From 9c521ee290243eeeb1735ee98de6104bdc22456a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 17 Jul 2017 14:59:03 -0400 Subject: [PATCH 001/988] Open master for 2.1 (#3788) --- CHANGELOG.rst | 5 +++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 563c32e9ead7..9ce4b96a3f63 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ Changelog ========= +2.1 - - `master`_ +~~~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + 2.0 - 2017-07-17 ~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 4b4b6dd04a5e..e99a87d1c819 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.0" +__version__ = "2.1.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 9ee01dd02a7f..951ef354ce00 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.0" +__version__ = "2.1.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 4973350a666d235228f1112c4d28a3b4d215fa05 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 17 Jul 2017 14:59:17 -0400 Subject: [PATCH 002/988] Refs #3646 -- invoke twine correctly (#3789) --- release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.py b/release.py index 0894d23fda2b..f10eed418939 100644 --- a/release.py +++ b/release.py @@ -133,7 +133,7 @@ def release(version): response.raise_for_status() wait_for_build_completed(session) paths = download_artifacts(session) - run("twine", "upload", " ".join(paths)) + run("twine", "upload", *paths) if __name__ == "__main__": From d7e73c257ed5dbdb33c4f1c9977ddf5c03b5729c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 17 Jul 2017 14:59:29 -0400 Subject: [PATCH 003/988] Updating doing a release to have a correct path (#3790) --- docs/doing-a-release.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index 5d96a49e1624..b70744eb68b3 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -79,7 +79,7 @@ Post-release tasks ------------------ * Update the version number to the next major (e.g. ``0.5.dev1``) in - ``cryptography/__about__.py`` and + ``src/cryptography/__about__.py`` and ``vectors/cryptography_vectors/__about__.py``. * Close the `milestone`_ for the previous release on GitHub. * Add new :doc:`/changelog` entry with next version and note that it is under From d3c4ba3a790883be17ca0a4e7ae291d261771700 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 20 Jul 2017 00:57:59 -0400 Subject: [PATCH 004/988] Blacklist some pyenchant versions (#3799) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index cc3b706fa244..fcc9edaa1684 100644 --- a/setup.py +++ b/setup.py @@ -293,7 +293,7 @@ def run_tests(self): "test": test_requirements, "docstest": [ "doc8", - "pyenchant", + "pyenchant != 1.6.9, != 1.6.10", "readme_renderer >= 16.0", "sphinx != 1.6.1, != 1.6.2, != 1.6.3", "sphinx_rtd_theme", From 0d6aaf49c1890378ce7ecf741a3a40c859d3b9fb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 20 Jul 2017 13:04:25 +0200 Subject: [PATCH 005/988] remove deprecated items (#3794) * remove deprecated items whirlpool, ripemd160, unsupportedextension, and the old interfaces * flake8 and remove a test generator we no longe use * make it clear we warned you about these things --- CHANGELOG.rst | 4 ++ src/cryptography/hazmat/primitives/hashes.py | 30 ------------ .../hazmat/primitives/interfaces.py | 17 ------- src/cryptography/x509/__init__.py | 11 +---- src/cryptography/x509/extensions.py | 4 -- tests/hazmat/backends/test_openssl.py | 36 ++------------- tests/hazmat/primitives/test_hash_vectors.py | 46 +------------------ tests/hazmat/primitives/test_hashes.py | 26 ----------- tests/hazmat/primitives/test_hmac_vectors.py | 16 ------- tests/hazmat/primitives/test_mac.py | 15 ------ tests/hazmat/primitives/utils.py | 12 ----- 11 files changed, 9 insertions(+), 208 deletions(-) delete mode 100644 src/cryptography/hazmat/primitives/interfaces.py delete mode 100644 tests/hazmat/primitives/test_mac.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9ce4b96a3f63..886d53074ab0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,10 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** ``Whirlpool``, ``RIPEMD160``, and + ``UnsupportedExtension`` have been removed in accordance with our + :doc:`/api-stability` policy. + 2.0 - 2017-07-17 ~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index e1172d9d7966..1764e9cedb46 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -142,36 +142,6 @@ class SHA512(object): block_size = 128 -@utils.register_interface(HashAlgorithm) -class RIPEMD160(object): - name = "ripemd160" - digest_size = 20 - block_size = 64 - - -RIPEMD160 = utils.deprecated( - RIPEMD160, - __name__, - "The RIPEMD160 hash was deprecated in version 1.9.", - utils.DeprecatedIn19 -) - - -@utils.register_interface(HashAlgorithm) -class Whirlpool(object): - name = "whirlpool" - digest_size = 64 - block_size = 64 - - -Whirlpool = utils.deprecated( - Whirlpool, - __name__, - "The Whirlpool hash was deprecated in version 1.9.", - utils.DeprecatedIn19 -) - - @utils.register_interface(HashAlgorithm) class MD5(object): name = "md5" diff --git a/src/cryptography/hazmat/primitives/interfaces.py b/src/cryptography/hazmat/primitives/interfaces.py deleted file mode 100644 index c9fdb3bfef2b..000000000000 --- a/src/cryptography/hazmat/primitives/interfaces.py +++ /dev/null @@ -1,17 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -from cryptography import utils -from cryptography.hazmat.primitives.mac import MACContext as _MACContext - - -MACContext = utils.deprecated( - _MACContext, - __name__, - "MACContext was moved to cryptography.hazmat.primitives.mac.MACContext " - "in version 1.9.", - utils.DeprecatedIn19 -) diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index b1a32ef6040e..3b7473029e2a 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -4,7 +4,6 @@ from __future__ import absolute_import, division, print_function -from cryptography import utils from cryptography.x509 import certificate_transparency from cryptography.x509.base import ( Certificate, CertificateBuilder, CertificateRevocationList, @@ -25,7 +24,7 @@ NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, PolicyInformation, PrecertificateSignedCertificateTimestamps, ReasonFlags, SubjectAlternativeName, SubjectKeyIdentifier, UnrecognizedExtension, - UnsupportedExtension, UserNotice + UserNotice ) from cryptography.x509.general_name import ( DNSName, DirectoryName, GeneralName, IPAddress, OtherName, RFC822Name, @@ -110,13 +109,6 @@ OID_CA_ISSUERS = AuthorityInformationAccessOID.CA_ISSUERS OID_OCSP = AuthorityInformationAccessOID.OCSP -UnsupportedExtension = utils.deprecated( - UnsupportedExtension, - __name__, - "UnsupportedExtension is no longer necessary, it is never raised", - utils.DeprecatedIn19 -) - __all__ = [ "certificate_transparency", "load_pem_x509_certificate", @@ -128,7 +120,6 @@ "random_serial_number", "InvalidVersion", "DuplicateExtension", - "UnsupportedExtension", "ExtensionNotFound", "UnsupportedGeneralNameType", "NameAttribute", diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 1b64f4a5c2ea..d90465b2a1da 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -54,10 +54,6 @@ def __init__(self, msg, oid): self.oid = oid -class UnsupportedExtension(Exception): - pass - - class ExtensionNotFound(Exception): def __init__(self, msg, oid): super(ExtensionNotFound, self).__init__(msg) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index d8e7fe47d1ad..3a73a3704d79 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -365,24 +365,6 @@ def test_rsa_padding_supported_oaep_sha2_combinations(self): ), ) is True - def test_rsa_padding_unsupported_oaep_ripemd160_sha1(self): - assert backend.rsa_padding_supported( - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.RIPEMD160()), - algorithm=hashes.SHA1(), - label=None - ), - ) is False - - def test_rsa_padding_unsupported_oaep_sha1_ripemd160(self): - assert backend.rsa_padding_supported( - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - algorithm=hashes.RIPEMD160(), - label=None - ), - ) is False - def test_rsa_padding_unsupported_mgf(self): assert backend.rsa_padding_supported( padding.OAEP( @@ -428,26 +410,14 @@ def test_unsupported_oaep_hash_algorithm_decrypt(self): ) ) - def test_unsupported_mgf1_hash_algorithm_ripemd160_decrypt(self): - private_key = RSA_KEY_512.private_key(backend) - with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_PADDING): - private_key.decrypt( - b"0" * 64, - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.RIPEMD160()), - algorithm=hashes.RIPEMD160(), - label=None - ) - ) - - def test_unsupported_mgf1_hash_algorithm_whirlpool_decrypt(self): + def test_unsupported_mgf1_hash_algorithm_md5_decrypt(self): private_key = RSA_KEY_512.private_key(backend) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_PADDING): private_key.decrypt( b"0" * 64, padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.Whirlpool()), - algorithm=hashes.Whirlpool(), + mgf=padding.MGF1(algorithm=hashes.MD5()), + algorithm=hashes.MD5(), label=None ) ) diff --git a/tests/hazmat/primitives/test_hash_vectors.py b/tests/hazmat/primitives/test_hash_vectors.py index 8757df24feec..2db9e906b406 100644 --- a/tests/hazmat/primitives/test_hash_vectors.py +++ b/tests/hazmat/primitives/test_hash_vectors.py @@ -11,7 +11,7 @@ from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import hashes -from .utils import generate_hash_test, generate_long_string_hash_test +from .utils import generate_hash_test from ...utils import load_hash_vectors @@ -100,50 +100,6 @@ class TestSHA512(object): ) -@pytest.mark.supported( - only_if=lambda backend: backend.hash_supported(hashes.RIPEMD160()), - skip_message="Does not support RIPEMD160", -) -@pytest.mark.requires_backend_interface(interface=HashBackend) -class TestRIPEMD160(object): - test_RIPEMD160 = generate_hash_test( - load_hash_vectors, - os.path.join("hashes", "ripemd160"), - [ - "ripevectors.txt", - ], - hashes.RIPEMD160(), - ) - - test_RIPEMD160_long_string = generate_long_string_hash_test( - hashes.RIPEMD160(), - "52783243c1697bdbe16d37f97f68f08325dc1528", - ) - - -@pytest.mark.supported( - only_if=lambda backend: backend.hash_supported(hashes.Whirlpool()), - skip_message="Does not support Whirlpool", -) -@pytest.mark.requires_backend_interface(interface=HashBackend) -class TestWhirlpool(object): - test_whirlpool = generate_hash_test( - load_hash_vectors, - os.path.join("hashes", "whirlpool"), - [ - "iso-test-vectors.txt", - ], - hashes.Whirlpool(), - ) - - test_whirlpool_long_string = generate_long_string_hash_test( - hashes.Whirlpool(), - ("0c99005beb57eff50a7cf005560ddf5d29057fd86b2" - "0bfd62deca0f1ccea4af51fc15490eddc47af32bb2b" - "66c34ff9ad8c6008ad677f77126953b226e4ed8b01"), - ) - - @pytest.mark.supported( only_if=lambda backend: backend.hash_supported(hashes.MD5()), skip_message="Does not support MD5", diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index 0e8176662121..60950aed6c89 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -109,32 +109,6 @@ class TestSHA512(object): ) -@pytest.mark.supported( - only_if=lambda backend: backend.hash_supported(hashes.RIPEMD160()), - skip_message="Does not support RIPEMD160", -) -@pytest.mark.requires_backend_interface(interface=HashBackend) -class TestRIPEMD160(object): - test_RIPEMD160 = generate_base_hash_test( - hashes.RIPEMD160(), - digest_size=20, - block_size=64, - ) - - -@pytest.mark.supported( - only_if=lambda backend: backend.hash_supported(hashes.Whirlpool()), - skip_message="Does not support Whirlpool", -) -@pytest.mark.requires_backend_interface(interface=HashBackend) -class TestWhirlpool(object): - test_Whirlpool = generate_base_hash_test( - hashes.Whirlpool(), - digest_size=64, - block_size=64, - ) - - @pytest.mark.supported( only_if=lambda backend: backend.hash_supported(hashes.MD5()), skip_message="Does not support MD5", diff --git a/tests/hazmat/primitives/test_hmac_vectors.py b/tests/hazmat/primitives/test_hmac_vectors.py index 8704e72468fb..70c929ad4cdf 100644 --- a/tests/hazmat/primitives/test_hmac_vectors.py +++ b/tests/hazmat/primitives/test_hmac_vectors.py @@ -107,19 +107,3 @@ class TestHMACSHA512(object): ], hashes.SHA512(), ) - - -@pytest.mark.supported( - only_if=lambda backend: backend.hmac_supported(hashes.RIPEMD160()), - skip_message="Does not support RIPEMD160", -) -@pytest.mark.requires_backend_interface(interface=HMACBackend) -class TestHMACRIPEMD160(object): - test_hmac_ripemd160 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-2286-ripemd160.txt", - ], - hashes.RIPEMD160(), - ) diff --git a/tests/hazmat/primitives/test_mac.py b/tests/hazmat/primitives/test_mac.py deleted file mode 100644 index 7263212a21e9..000000000000 --- a/tests/hazmat/primitives/test_mac.py +++ /dev/null @@ -1,15 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -import pytest - -from cryptography import utils - - -def test_deprecated_maccontext(): - with pytest.warns(utils.DeprecatedIn19): - from cryptography.hazmat.primitives.interfaces import MACContext - assert MACContext diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py index b8200123cd7e..16a268193ab7 100644 --- a/tests/hazmat/primitives/utils.py +++ b/tests/hazmat/primitives/utils.py @@ -189,18 +189,6 @@ def base_hash_test(backend, algorithm, digest_size, block_size): assert copy.finalize() == m.finalize() -def generate_long_string_hash_test(hash_factory, md): - def test_long_string_hash(self, backend): - long_string_hash_test(backend, hash_factory, md) - return test_long_string_hash - - -def long_string_hash_test(backend, algorithm, md): - m = hashes.Hash(algorithm, backend=backend) - m.update(b"a" * 1000000) - assert m.finalize() == binascii.unhexlify(md.lower().encode("ascii")) - - def generate_base_hmac_test(hash_cls): def test_base_hmac(self, backend): base_hmac_test(backend, hash_cls) From 36a4d473a19953443362bd9c3ca5d706688d64f1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 20 Jul 2017 12:26:51 -0400 Subject: [PATCH 006/988] Fixed #3801 -- don't create py33 wheels (#3802) --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index c4404c252a2d..8e36f01c05e5 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -8,11 +8,11 @@ properties([ def configs = [ [ label: 'windows', - versions: ['py26', 'py27', 'py33', 'py34', 'py35', 'py36'], + versions: ['py26', 'py27', 'py34', 'py35', 'py36'], ], [ label: 'windows64', - versions: ['py26', 'py27', 'py33', 'py34', 'py35', 'py36'], + versions: ['py26', 'py27', 'py34', 'py35', 'py36'], ], [ label: 'sierra', @@ -46,7 +46,6 @@ def build(version, label, imageName) { def pythonPath = [ py26: "C:\\Python26\\python.exe", py27: "C:\\Python27\\python.exe", - py33: "C:\\Python33\\python.exe", py34: "C:\\Python34\\python.exe", py35: "C:\\Python35\\python.exe", py36: "C:\\Python36\\python.exe" From d10480b27416508163bdb7d22265f25aae3d5b7d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 21 Jul 2017 13:16:24 -0400 Subject: [PATCH 007/988] Fixed #3798 -- use the correct stacklevel on this warning (#3803) --- src/cryptography/hazmat/backends/openssl/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/utils.py b/src/cryptography/hazmat/backends/openssl/utils.py index ff1b97458735..05d0fe589158 100644 --- a/src/cryptography/hazmat/backends/openssl/utils.py +++ b/src/cryptography/hazmat/backends/openssl/utils.py @@ -41,5 +41,5 @@ def _warn_sign_verify_deprecated(): "signer and verifier have been deprecated. Please use sign " "and verify instead.", utils.PersistentlyDeprecated, - stacklevel=2 + stacklevel=3 ) From 0a8bdff51330a380d2ae4c9dd85b7798111b3528 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 21 Jul 2017 13:57:50 -0400 Subject: [PATCH 008/988] simplify pyenchant requirement (#3805) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index fcc9edaa1684..d232e0b96db8 100644 --- a/setup.py +++ b/setup.py @@ -293,7 +293,7 @@ def run_tests(self): "test": test_requirements, "docstest": [ "doc8", - "pyenchant != 1.6.9, != 1.6.10", + "pyenchant >= 1.6.11", "readme_renderer >= 16.0", "sphinx != 1.6.1, != 1.6.2, != 1.6.3", "sphinx_rtd_theme", From bacff94f5b72d537ac1d07b91345988158114c07 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 22 Jul 2017 09:12:54 -0400 Subject: [PATCH 009/988] simplify setup.py branches (#3806) --- setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/setup.py b/setup.py index d232e0b96db8..a7e63bd6e87f 100644 --- a/setup.py +++ b/setup.py @@ -40,10 +40,8 @@ ] setup_requirements = [] -if sys.version_info < (3, 4): +if sys.version_info < (3,): requirements.append("enum34") - -if sys.version_info < (3, 3): requirements.append("ipaddress") if platform.python_implementation() == "PyPy": From 96ffd91956657775696bc6e260890543a5fba58b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 24 Jul 2017 02:44:19 +0300 Subject: [PATCH 010/988] fix wheel building with parameters (#3808) --- release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.py b/release.py index f10eed418939..b380179d9c7f 100644 --- a/release.py +++ b/release.py @@ -123,7 +123,7 @@ def release(version): token = getpass.getpass("Input the Jenkins token: ") response = session.get( - "{0}/build".format(JENKINS_URL), + "{0}/buildWithParameters".format(JENKINS_URL), params={ "token": token, "BUILD_VERSION": version, From 72e37c4062bfd4abbd1968d0fd42023511681960 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 24 Jul 2017 08:28:25 -0400 Subject: [PATCH 011/988] Refs #3646 -- Don't use shell globbing in our release script (#3809) --- release.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/release.py b/release.py index b380179d9c7f..77391e80237b 100644 --- a/release.py +++ b/release.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import getpass +import glob import io import os import subprocess @@ -106,10 +107,11 @@ def release(version): run("python", "setup.py", "sdist") run("python", "setup.py", "sdist", "bdist_wheel", cwd="vectors/") - run( - "twine", "upload", "-s", "dist/cryptography-{0}*".format(version), - "vectors/dist/cryptography_vectors-{0}*".format(version), shell=True + packages = ( + glob.glob("dist/cryptography-{0}*".format(version)) + + glob.glob("vectors/dist/cryptography_vectors-{0}*".format(version)) ) + run("twine", "upload", "-s", *packages) session = requests.Session() From 7377fae9033abd8c9035cbf2792df48ac07dc82d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 24 Jul 2017 08:28:56 -0400 Subject: [PATCH 012/988] Fixed #3520 -- added a github issue template for bugs (#3807) * Fixed #3520 -- added a github issue template for bugs * grammar * empty commit to retrigger jenkins --- .github/ISSUE_TEMPLATE.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.rst diff --git a/.github/ISSUE_TEMPLATE.rst b/.github/ISSUE_TEMPLATE.rst new file mode 100644 index 000000000000..2fb07b1b937b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.rst @@ -0,0 +1,14 @@ +If you're filing a bug (as opposed to a feature request), please try the +following things: + +* Upgrade to the latest version of ``setuptools`` and ``pip`` +* Make sure you're on a supported version of OpenSSL +* Try with the latest version of ``cryptography`` + +If none of that works, please make sure to include the following information in +your bug report: + +* Versions of Python, ``cryptography``, ``cffi``, ``pip``, and ``setuptools`` + you're using +* How you installed ``cryptography`` +* Clear steps for reproducing your bug From 7ad62dbb14e0c1f7f74cb97b974e7d3783249fec Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 25 Jul 2017 23:42:44 +0300 Subject: [PATCH 013/988] update wheel builder script for static linking on linux (#3811) We don't need to do an LD_LIBRARY_PATH when calling auditwheel because we're now statically linking OpenSSL. --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 8e36f01c05e5..e0ed164cd63d 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -138,8 +138,7 @@ def build(version, label, imageName) { LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include" \ $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION -w tmpwheelhouse/ --no-binary cryptography --no-deps - LD_LIBRARY_PATH="/opt/pyca/cryptography/openssl/lib" \ - $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ + $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ $linux32 /opt/python/$version/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ $linux32 /opt/python/$version/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" """ From 45f2a42d9c1424b587ff834cfe2c6bec5c8919fe Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 26 Jul 2017 09:10:32 -0400 Subject: [PATCH 014/988] fixed #3780 -- test on the latest libressl (#3813) --- Jenkinsfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index d1ea0baf153b..cc53da332e99 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -58,6 +58,11 @@ def configs = [ imageName: 'pyca/cryptography-runner-jessie-libressl:2.4.5', toxenvs: ['py27'], ], + [ + label: 'docker', + imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.0', + toxenvs: ['py27'], + ], [ label: 'docker', imageName: 'pyca/cryptography-runner-ubuntu-xenial', From 65f41af9889a94b988668a288d8d4184ce38e1c7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 26 Jul 2017 11:26:34 -0500 Subject: [PATCH 015/988] fix compilation on openbsd (#3814) the getentropy fallback is only possible on macOS, wrap it in a define to remove it entirely on the BSDs. --- src/_cffi_src/openssl/src/osrandom_engine.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 034637c598cf..4fcd34fbfe44 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -223,8 +223,10 @@ static int osrandom_rand_bytes(unsigned char *buffer, int size) { int res; switch(getentropy_works) { +#if defined(__APPLE__) case CRYPTOGRAPHY_OSRANDOM_GETENTROPY_FALLBACK: return dev_urandom_read(buffer, size); +#endif case CRYPTOGRAPHY_OSRANDOM_GETENTROPY_WORKS: while (size > 0) { /* OpenBSD and macOS restrict maximum buffer size to 256. */ From dce57f68d24aaf1d58892c5053441ca1d1ce641f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 26 Jul 2017 19:18:55 -0500 Subject: [PATCH 016/988] port 2.0.1 changelog (#3823) --- CHANGELOG.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 886d53074ab0..0ef7833b1665 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,16 @@ Changelog ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. +2.0.1 - 2017-07-26 +~~~~~~~~~~~~~~~~~~ + +* Fixed a compilation bug affecting OpenBSD. +* Altered the ``manylinux1`` wheels to statically link OpenSSL instead of + dynamically linking and bundling the shared object. This should resolve + crashes seen when using ``uwsgi`` or other binaries that link against + OpenSSL independently. +* Fixed the stack level for the ``signer`` and ``verifier`` warnings. + 2.0 - 2017-07-17 ~~~~~~~~~~~~~~~~ From 1750971987b57238b49c2ad15a7126936551a37b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 26 Jul 2017 21:22:59 -0500 Subject: [PATCH 017/988] don't re-export the openssl symbols from our shared object (#3825) When linking the static lib we want the symbols to not be exported. To convince gcc to do this you must pass -Wl,--exclude-libs,ALL in CFLAGS More info at https://stackoverflow.com/questions/2222162 --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index e0ed164cd63d..c59dba66acdd 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -136,7 +136,7 @@ def build(version, label, imageName) { $linux32 /opt/python/$version/bin/pip install cffi six idna asn1crypto ipaddress enum34 LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ - CFLAGS="-I/opt/pyca/cryptography/openssl/include" \ + CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION -w tmpwheelhouse/ --no-binary cryptography --no-deps $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ $linux32 /opt/python/$version/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ From 2bab0ac55c6e335a915d58eb793a208a96aee58b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 27 Jul 2017 06:03:27 -0500 Subject: [PATCH 018/988] port 2.0.2 changelog (#3828) --- CHANGELOG.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0ef7833b1665..ac83092eee69 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,12 @@ Changelog ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. +2.0.2 - 2017-07-27 +~~~~~~~~~~~~~~~~~~ + +* Marked all symbols as hidden in the ``manylinux1`` wheel to avoid a + bug with symbol resolution in certain scenarios. + 2.0.1 - 2017-07-26 ~~~~~~~~~~~~~~~~~~ From 2131b962c03c8787c8918f0672707cce3dca06f8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 27 Jul 2017 23:30:30 -0400 Subject: [PATCH 019/988] fix for latest flake8 (#3829) --- src/cryptography/hazmat/backends/openssl/encode_asn1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index dc1f61a04f6b..399000a4aedd 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -93,7 +93,7 @@ def _encode_name(backend, name): name_entry, backend._lib.X509_NAME_ENTRY_free ) res = backend._lib.X509_NAME_add_entry( - subject, name_entry, -1, set_flag) + subject, name_entry, -1, set_flag) backend.openssl_assert(res == 1) set_flag = -1 return subject From cdaf3ff72f6fd562c275c04836cfaa230aabcdf4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 30 Jul 2017 13:08:51 -0400 Subject: [PATCH 020/988] Begin the deprecation of auto-idna for x509.DNSName (#3830) * Begin the deprecation of auto-idna for x509.DNSName Refs #3357 * fix warning * py3k fixes * fix docs * sigh * flake8 * these are words * words * tests for coverage * another test * do idna things * more idna things --- CHANGELOG.rst | 6 + docs/spelling_wordlist.txt | 2 + docs/x509/reference.rst | 8 +- docs/x509/tutorial.rst | 8 +- .../hazmat/backends/openssl/decode_asn1.py | 18 +- .../hazmat/backends/openssl/encode_asn1.py | 13 +- src/cryptography/utils.py | 1 + src/cryptography/x509/general_name.py | 74 ++++- tests/test_x509.py | 36 +-- tests/test_x509_ext.py | 275 +++++++++++------- tests/test_x509_revokedcertbuilder.py | 4 +- 11 files changed, 281 insertions(+), 164 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ac83092eee69..d7f2e42bec85 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,12 @@ Changelog * **BACKWARDS INCOMPATIBLE:** ``Whirlpool``, ``RIPEMD160``, and ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. +* Deprecated passing unicode to the :class:`~cryptography.x509.DNSName` + constructor. Instead, users should pass DNS names as ``bytes``, with ``idna`` + encoding if necessary. In addition, the + :attr:`~cryptography.x509.DNSName.value` attribute was deprecated, users + should use :attr:`~cryptography.x509.DNSName.bytes_value` to access the + raw DNS name. 2.0.2 - 2017-07-27 ~~~~~~~~~~~~~~~~~~ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 3ebc63d1b9b7..f72e0b0c981b 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -1,3 +1,4 @@ +accessor affine Authenticator backend @@ -43,6 +44,7 @@ Google hazmat Homebrew hostname +idna indistinguishability initialisms interoperable diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 7cc727118f65..c2ff0ffe3075 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -599,7 +599,7 @@ X.509 Certificate Builder >>> builder = builder.public_key(public_key) >>> builder = builder.add_extension( ... x509.SubjectAlternativeName( - ... [x509.DNSName(u'cryptography.io')] + ... [x509.DNSName(b'cryptography.io')] ... ), ... critical=False ... ) @@ -1242,8 +1242,14 @@ General Name Classes This corresponds to a domain name. For example, ``cryptography.io``. + .. attribute:: bytes_value + + :type: bytes + .. attribute:: value + Deprecated accessor for the idna-decoded value of :attr:`bytes_value` + :type: :term:`text` .. class:: DirectoryName(value) diff --git a/docs/x509/tutorial.rst b/docs/x509/tutorial.rst index d34b3504384d..0492c9a7f869 100644 --- a/docs/x509/tutorial.rst +++ b/docs/x509/tutorial.rst @@ -70,9 +70,9 @@ a few details: ... ])).add_extension( ... x509.SubjectAlternativeName([ ... # Describe what sites we want this certificate for. - ... x509.DNSName(u"mysite.com"), - ... x509.DNSName(u"www.mysite.com"), - ... x509.DNSName(u"subdomain.mysite.com"), + ... x509.DNSName(b"mysite.com"), + ... x509.DNSName(b"www.mysite.com"), + ... x509.DNSName(b"subdomain.mysite.com"), ... ]), ... critical=False, ... # Sign the CSR with our private key. @@ -142,7 +142,7 @@ Then we generate the certificate itself: ... # Our certificate will be valid for 10 days ... datetime.datetime.utcnow() + datetime.timedelta(days=10) ... ).add_extension( - ... x509.SubjectAlternativeName([x509.DNSName(u"localhost")]), + ... x509.SubjectAlternativeName([x509.DNSName(b"localhost")]), ... critical=False, ... # Sign our certificate with our private key ... ).sign(key, hashes.SHA256(), default_backend()) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index a55b58808cef..a66f65f64f92 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -88,23 +88,7 @@ def _decode_general_names(backend, gns): def _decode_general_name(backend, gn): if gn.type == backend._lib.GEN_DNS: data = _asn1_string_to_bytes(backend, gn.d.dNSName) - if not data: - decoded = u"" - elif data.startswith(b"*."): - # This is a wildcard name. We need to remove the leading wildcard, - # IDNA decode, then re-add the wildcard. Wildcard characters should - # always be left-most (RFC 2595 section 2.4). - decoded = u"*." + idna.decode(data[2:]) - else: - # Not a wildcard, decode away. If the string has a * in it anywhere - # invalid this will raise an InvalidCodePoint - decoded = idna.decode(data) - if data.startswith(b"."): - # idna strips leading periods. Name constraints can have that - # so we need to re-add it. Sigh. - decoded = u"." + decoded - - return x509.DNSName(decoded) + return x509.DNSName(data) elif gn.type == backend._lib.GEN_URI: data = _asn1_string_to_ascii(backend, gn.d.uniformResourceIdentifier) parsed = urllib_parse.urlparse(data) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 399000a4aedd..77d221270642 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -7,8 +7,6 @@ import calendar import ipaddress -import idna - import six from cryptography import utils, x509 @@ -370,15 +368,6 @@ def _encode_subject_key_identifier(backend, ski): return _encode_asn1_str_gc(backend, ski.digest, len(ski.digest)) -def _idna_encode(value): - # Retain prefixes '*.' for common/alt names and '.' for name constraints - for prefix in ['*.', '.']: - if value.startswith(prefix): - value = value[len(prefix):] - return prefix.encode('ascii') + idna.encode(value) - return idna.encode(value) - - def _encode_general_name(backend, name): if isinstance(name, x509.DNSName): gn = backend._lib.GENERAL_NAME_new() @@ -387,7 +376,7 @@ def _encode_general_name(backend, name): ia5 = backend._lib.ASN1_IA5STRING_new() backend.openssl_assert(ia5 != backend._ffi.NULL) - value = _idna_encode(name.value) + value = name.bytes_value res = backend._lib.ASN1_STRING_set(ia5, value, len(value)) backend.openssl_assert(res == 1) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index efb12e213223..02857c06c972 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -16,6 +16,7 @@ # cycle ends. PersistentlyDeprecated = DeprecationWarning DeprecatedIn19 = DeprecationWarning +DeprecatedIn21 = PendingDeprecationWarning def _check_bytes(name, value): diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 6745243aa4f4..9ea1cff680e6 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -6,6 +6,7 @@ import abc import ipaddress +import warnings from email.utils import parseaddr import idna @@ -89,24 +90,81 @@ def __hash__(self): return hash(self.value) +def _idna_encode(value): + # Retain prefixes '*.' for common/alt names and '.' for name constraints + for prefix in ['*.', '.']: + if value.startswith(prefix): + value = value[len(prefix):] + return prefix.encode('ascii') + idna.encode(value) + return idna.encode(value) + + @utils.register_interface(GeneralName) class DNSName(object): def __init__(self, value): - if not isinstance(value, six.text_type): - raise TypeError("value must be a unicode string") - - self._value = value - - value = utils.read_only_property("_value") + if isinstance(value, six.text_type): + try: + value = value.encode("ascii") + except UnicodeEncodeError: + value = _idna_encode(value) + warnings.warn( + "DNSName values should be passed as idna-encoded bytes, " + "not strings. Support for passing unicode strings will be " + "removed in a future version.", + utils.DeprecatedIn21, + stacklevel=2, + ) + else: + warnings.warn( + "DNSName values should be passed as bytes, not strings. " + "Support for passing unicode strings will be removed in a " + "future version.", + utils.DeprecatedIn21, + stacklevel=2, + ) + elif not isinstance(value, bytes): + raise TypeError("value must be bytes") + + self._bytes_value = value + + bytes_value = utils.read_only_property("_bytes_value") + + @property + def value(self): + warnings.warn( + "DNSName.bytes_value should be used instead of DNSName.value; it " + "contains the DNS name as raw bytes, instead of as an idna-decoded" + " unicode string. DNSName.value will be removed in a future " + "version.", + utils.DeprecatedIn21, + stacklevel=2 + ) + data = self._bytes_value + if not data: + decoded = u"" + elif data.startswith(b"*."): + # This is a wildcard name. We need to remove the leading wildcard, + # IDNA decode, then re-add the wildcard. Wildcard characters should + # always be left-most (RFC 2595 section 2.4). + decoded = u"*." + idna.decode(data[2:]) + else: + # Not a wildcard, decode away. If the string has a * in it anywhere + # invalid this will raise an InvalidCodePoint + decoded = idna.decode(data) + if data.startswith(b"."): + # idna strips leading periods. Name constraints can have that + # so we need to re-add it. Sigh. + decoded = u"." + decoded + return decoded def __repr__(self): - return "".format(self.value) + return "".format(self.bytes_value) def __eq__(self, other): if not isinstance(other, DNSName): return NotImplemented - return self.value == other.value + return self.bytes_value == other.bytes_value def __ne__(self, other): return not self == other diff --git a/tests/test_x509.py b/tests/test_x509.py index 41ccbed8f42d..661461d45175 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -225,7 +225,7 @@ def test_extensions(self, backend): assert aia.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.DNSName(u"cryptography.io") + x509.DNSName(b"cryptography.io") ) ]) assert ian.value == x509.IssuerAlternativeName([ @@ -1176,8 +1176,8 @@ def test_subject_alt_name(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(ext.value) == [ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"sub.cryptography.io"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"sub.cryptography.io"), ] def test_public_bytes_pem(self, backend): @@ -1405,7 +1405,7 @@ def test_build_cert(self, backend): ).add_extension( x509.BasicConstraints(ca=False, path_length=None), True, ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), critical=False, ).not_valid_before( not_valid_before @@ -1427,7 +1427,7 @@ def test_build_cert(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(subject_alternative_name.value) == [ - x509.DNSName(u"cryptography.io"), + x509.DNSName(b"cryptography.io"), ] def test_build_cert_printable_string_country_name(self, backend): @@ -2166,7 +2166,7 @@ def test_build_cert_with_dsa_private_key(self, backend): ).add_extension( x509.BasicConstraints(ca=False, path_length=None), True, ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), critical=False, ).not_valid_before( not_valid_before @@ -2188,7 +2188,7 @@ def test_build_cert_with_dsa_private_key(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(subject_alternative_name.value) == [ - x509.DNSName(u"cryptography.io"), + x509.DNSName(b"cryptography.io"), ] @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) @@ -2212,7 +2212,7 @@ def test_build_cert_with_ec_private_key(self, backend): ).add_extension( x509.BasicConstraints(ca=False, path_length=None), True, ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), critical=False, ).not_valid_before( not_valid_before @@ -2234,7 +2234,7 @@ def test_build_cert_with_ec_private_key(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(subject_alternative_name.value) == [ - x509.DNSName(u"cryptography.io"), + x509.DNSName(b"cryptography.io"), ] @pytest.mark.requires_backend_interface(interface=RSABackend) @@ -2375,7 +2375,7 @@ def test_issuer_alt_name(self, backend): 123 ).add_extension( x509.IssuerAlternativeName([ - x509.DNSName(u"myissuer"), + x509.DNSName(b"myissuer"), x509.RFC822Name(u"email@domain.com"), ]), critical=False ).sign(issuer_private_key, hashes.SHA256(), backend) @@ -2385,7 +2385,7 @@ def test_issuer_alt_name(self, backend): ) assert ext.critical is False assert ext.value == x509.IssuerAlternativeName([ - x509.DNSName(u"myissuer"), + x509.DNSName(b"myissuer"), x509.RFC822Name(u"email@domain.com"), ]) @@ -2525,7 +2525,7 @@ def test_policy_constraints(self, backend, pc): ipaddress.IPv6Network(u"FF:FF:0:0:0:0:0:0/128") ), ], - excluded_subtrees=[x509.DNSName(u"name.local")] + excluded_subtrees=[x509.DNSName(b"name.local")] ), x509.NameConstraints( permitted_subtrees=[ @@ -2535,7 +2535,7 @@ def test_policy_constraints(self, backend, pc): ), x509.NameConstraints( permitted_subtrees=None, - excluded_subtrees=[x509.DNSName(u"name.local")] + excluded_subtrees=[x509.DNSName(b"name.local")] ), ] ) @@ -2909,7 +2909,7 @@ def test_add_unsupported_extension(self, backend): x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), ]) ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), critical=False, ).add_extension( DummyExtension(), False @@ -2995,7 +2995,7 @@ def test_add_two_extensions(self, backend): request = builder.subject_name( x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), critical=False, ).add_extension( x509.BasicConstraints(ca=True, path_length=2), critical=True @@ -3012,7 +3012,7 @@ def test_add_two_extensions(self, backend): ext = request.extensions.get_extension_for_oid( ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) - assert list(ext.value) == [x509.DNSName(u"cryptography.io")] + assert list(ext.value) == [x509.DNSName(b"cryptography.io")] def test_set_subject_twice(self): builder = x509.CertificateSigningRequestBuilder() @@ -3032,8 +3032,8 @@ def test_subject_alt_names(self, backend): private_key = RSA_KEY_2048.private_key(backend) san = x509.SubjectAlternativeName([ - x509.DNSName(u"example.com"), - x509.DNSName(u"*.example.com"), + x509.DNSName(b"example.com"), + x509.DNSName(b"*.example.com"), x509.RegisteredID(x509.ObjectIdentifier("1.2.3.4.5.6.7")), x509.DirectoryName(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, u'PyCA'), diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index c3243972e05b..b707156ae1df 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -13,7 +13,7 @@ import six -from cryptography import x509 +from cryptography import utils, x509 from cryptography.hazmat.backends.interfaces import ( DSABackend, EllipticCurveBackend, RSABackend, X509Backend ) @@ -152,20 +152,20 @@ def test_hash(self): class TestCertificateIssuer(object): def test_iter_names(self): ci = x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ]) assert len(ci) == 2 assert list(ci) == [ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ] def test_indexing(self): ci = x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), + x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(u"http://another.local"), ]) @@ -173,26 +173,32 @@ def test_indexing(self): assert ci[2:6:2] == [ci[2], ci[4]] def test_eq(self): - ci1 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) - ci2 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) + ci1 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci2 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) assert ci1 == ci2 def test_ne(self): - ci1 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) - ci2 = x509.CertificateIssuer([x509.DNSName(u"somethingelse.tld")]) + ci1 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci2 = x509.CertificateIssuer([x509.DNSName(b"somethingelse.tld")]) assert ci1 != ci2 assert ci1 != object() def test_repr(self): - ci = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) - assert repr(ci) == ( - "])>)>" - ) + ci = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + if six.PY3: + assert repr(ci) == ( + "])>)>" + ) + else: + assert repr(ci) == ( + "])>)>" + ) def test_get_values_for_type(self): ci = x509.CertificateIssuer( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) names = ci.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] @@ -891,7 +897,7 @@ def test_authority_cert_serial_and_issuer_none(self): assert aki.authority_cert_serial_number is None def test_authority_cert_serial_zero(self): - dns = x509.DNSName(u"SomeIssuer") + dns = x509.DNSName(b"SomeIssuer") aki = x509.AuthorityKeyIdentifier(b"id", [dns], 0) assert aki.key_identifier == b"id" assert aki.authority_cert_issuer == [dns] @@ -1434,7 +1440,6 @@ def test_key_cert_sign_crl_sign(self, backend): @pytest.mark.parametrize( "name", [ x509.RFC822Name, - x509.DNSName, x509.UniformResourceIdentifier ] ) @@ -1462,6 +1467,32 @@ def test_ne(self, name): assert gn != object() +class TestDNSName(object): + def test_init(self): + with pytest.warns(utils.DeprecatedIn21): + name = x509.DNSName(u"*.\xf5\xe4\xf6\xfc.example.com") + assert name.bytes_value == b"*.xn--4ca7aey.example.com" + + with pytest.warns(utils.DeprecatedIn21): + name = x509.DNSName(u".\xf5\xe4\xf6\xfc.example.com") + assert name.bytes_value == b".xn--4ca7aey.example.com" + assert name.value == u".\xf5\xe4\xf6\xfc.example.com" + + with pytest.warns(utils.DeprecatedIn21): + name = x509.DNSName(u"\xf5\xe4\xf6\xfc.example.com") + assert name.bytes_value == b"xn--4ca7aey.example.com" + + with pytest.raises(TypeError): + x509.DNSName(1.3) + + def test_ne(self): + n1 = x509.DNSName(b"test1") + n2 = x509.DNSName(b"test2") + n3 = x509.DNSName(b"test2") + assert n1 != n2 + assert not (n2 != n3) + + class TestDirectoryName(object): def test_not_name(self): with pytest.raises(TypeError): @@ -1686,35 +1717,35 @@ def test_ne(self): class TestGeneralNames(object): def test_get_values_for_type(self): gns = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) names = gns.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): gns = x509.GeneralNames([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ]) assert len(gns) == 2 assert list(gns) == [ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ] def test_iter_input(self): names = [ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ] gns = x509.GeneralNames(iter(names)) assert list(gns) == names def test_indexing(self): gn = x509.GeneralNames([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), + x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(u"http://another.local"), ]) @@ -1724,31 +1755,36 @@ def test_indexing(self): def test_invalid_general_names(self): with pytest.raises(TypeError): x509.GeneralNames( - [x509.DNSName(u"cryptography.io"), "invalid"] + [x509.DNSName(b"cryptography.io"), "invalid"] ) def test_repr(self): gns = x509.GeneralNames( [ - x509.DNSName(u"cryptography.io") + x509.DNSName(b"cryptography.io") ] ) - assert repr(gns) == ( - "])>" - ) + if six.PY3: + assert repr(gns) == ( + "])>" + ) + else: + assert repr(gns) == ( + "])>" + ) def test_eq(self): gns = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) gns2 = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) assert gns == gns2 def test_ne(self): gns = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) gns2 = x509.GeneralNames( [x509.RFC822Name(u"admin@cryptography.io")] @@ -1760,27 +1796,27 @@ def test_ne(self): class TestIssuerAlternativeName(object): def test_get_values_for_type(self): san = x509.IssuerAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) names = san.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): san = x509.IssuerAlternativeName([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ]) assert len(san) == 2 assert list(san) == [ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ] def test_indexing(self): ian = x509.IssuerAlternativeName([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), + x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(u"http://another.local"), ]) @@ -1790,32 +1826,38 @@ def test_indexing(self): def test_invalid_general_names(self): with pytest.raises(TypeError): x509.IssuerAlternativeName( - [x509.DNSName(u"cryptography.io"), "invalid"] + [x509.DNSName(b"cryptography.io"), "invalid"] ) def test_repr(self): san = x509.IssuerAlternativeName( [ - x509.DNSName(u"cryptography.io") + x509.DNSName(b"cryptography.io") ] ) - assert repr(san) == ( - "])>)>" - ) + if six.PY3: + assert repr(san) == ( + "])>)>" + ) + else: + assert repr(san) == ( + "])>)>" + ) def test_eq(self): san = x509.IssuerAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) san2 = x509.IssuerAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) assert san == san2 def test_ne(self): san = x509.IssuerAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) san2 = x509.IssuerAlternativeName( [x509.RFC822Name(u"admin@cryptography.io")] @@ -1870,27 +1912,27 @@ def test_hash(self): class TestSubjectAlternativeName(object): def test_get_values_for_type(self): san = x509.SubjectAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) names = san.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): san = x509.SubjectAlternativeName([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ]) assert len(san) == 2 assert list(san) == [ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), ] def test_indexing(self): san = x509.SubjectAlternativeName([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), + x509.DNSName(b"cryptography.io"), + x509.DNSName(b"crypto.local"), + x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(u"http://another.local"), ]) @@ -1900,32 +1942,38 @@ def test_indexing(self): def test_invalid_general_names(self): with pytest.raises(TypeError): x509.SubjectAlternativeName( - [x509.DNSName(u"cryptography.io"), "invalid"] + [x509.DNSName(b"cryptography.io"), "invalid"] ) def test_repr(self): san = x509.SubjectAlternativeName( [ - x509.DNSName(u"cryptography.io") + x509.DNSName(b"cryptography.io") ] ) - assert repr(san) == ( - "])>)>" - ) + if six.PY3: + assert repr(san) == ( + "])>)>" + ) + else: + assert repr(san) == ( + "])>)>" + ) def test_eq(self): san = x509.SubjectAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) san2 = x509.SubjectAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) assert san == san2 def test_ne(self): san = x509.SubjectAlternativeName( - [x509.DNSName(u"cryptography.io")] + [x509.DNSName(b"cryptography.io")] ) san2 = x509.SubjectAlternativeName( [x509.RFC822Name(u"admin@cryptography.io")] @@ -2124,8 +2172,15 @@ def test_idna2003_invalid(self, backend): x509.load_pem_x509_certificate, backend ) + san = cert.extensions.get_extension_for_class( + x509.SubjectAlternativeName + ).value + + assert len(san) == 1 + [name] = san + assert name.bytes_value == b"xn--k4h.ws" with pytest.raises(UnicodeError): - cert.extensions + name.value def test_unicode_rfc822_name_dns_name_uri(self, backend): cert = _load_cert( @@ -2220,16 +2275,20 @@ def test_other_name(self, backend): assert othernames == [expected] def test_certbuilder(self, backend): - sans = [u'*.example.org', u'*.\xf5\xe4\xf6\xfc.example.com', - u'foobar.example.net'] + sans = [b'*.example.org', b'*.xn--4ca7aey.example.com', + b'foobar.example.net'] private_key = RSA_KEY_2048.private_key(backend) builder = _make_certbuilder(private_key) builder = builder.add_extension( SubjectAlternativeName(list(map(DNSName, sans))), True) cert = builder.sign(private_key, hashes.SHA1(), backend) - result = [x.value for x in cert.extensions.get_extension_for_class( - SubjectAlternativeName).value] + result = [ + x.bytes_value + for x in cert.extensions.get_extension_for_class( + SubjectAlternativeName + ).value + ] assert result == sans @@ -2265,7 +2324,7 @@ def test_eku(self, backend): class TestAccessDescription(object): def test_invalid_access_method(self): with pytest.raises(TypeError): - x509.AccessDescription("notanoid", x509.DNSName(u"test")) + x509.AccessDescription("notanoid", x509.DNSName(b"test")) def test_invalid_access_location(self): with pytest.raises(TypeError): @@ -2799,7 +2858,7 @@ def test_no_subtrees(self): x509.NameConstraints(None, None) def test_permitted_none(self): - excluded = [x509.DNSName(u"name.local")] + excluded = [x509.DNSName(b"name.local")] nc = x509.NameConstraints( permitted_subtrees=None, excluded_subtrees=excluded ) @@ -2807,7 +2866,7 @@ def test_permitted_none(self): assert nc.excluded_subtrees is not None def test_excluded_none(self): - permitted = [x509.DNSName(u"name.local")] + permitted = [x509.DNSName(b"name.local")] nc = x509.NameConstraints( permitted_subtrees=permitted, excluded_subtrees=None ) @@ -2821,39 +2880,47 @@ def test_iter_input(self): assert list(nc.excluded_subtrees) == subtrees def test_repr(self): - permitted = [x509.DNSName(u"name.local"), x509.DNSName(u"name2.local")] + permitted = [x509.DNSName(b"name.local"), x509.DNSName(b"name2.local")] nc = x509.NameConstraints( permitted_subtrees=permitted, excluded_subtrees=None ) - assert repr(nc) == ( - "" - ", ], excluded_subtrees=None)>" - ) + if six.PY3: + assert repr(nc) == ( + ", ], excluded_subtrees=None)>" + ) + else: + assert repr(nc) == ( + ", ], excluded_subtrees=None)>" + ) def test_eq(self): nc = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(u"name.local")], - excluded_subtrees=[x509.DNSName(u"name2.local")] + permitted_subtrees=[x509.DNSName(b"name.local")], + excluded_subtrees=[x509.DNSName(b"name2.local")] ) nc2 = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(u"name.local")], - excluded_subtrees=[x509.DNSName(u"name2.local")] + permitted_subtrees=[x509.DNSName(b"name.local")], + excluded_subtrees=[x509.DNSName(b"name2.local")] ) assert nc == nc2 def test_ne(self): nc = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(u"name.local")], - excluded_subtrees=[x509.DNSName(u"name2.local")] + permitted_subtrees=[x509.DNSName(b"name.local")], + excluded_subtrees=[x509.DNSName(b"name2.local")] ) nc2 = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(u"name.local")], + permitted_subtrees=[x509.DNSName(b"name.local")], excluded_subtrees=None ) nc3 = x509.NameConstraints( permitted_subtrees=None, - excluded_subtrees=[x509.DNSName(u"name2.local")] + excluded_subtrees=[x509.DNSName(b"name2.local")] ) assert nc != nc2 @@ -2877,7 +2944,7 @@ def test_permitted_excluded(self, backend): ).value assert nc == x509.NameConstraints( permitted_subtrees=[ - x509.DNSName(u"zombo.local"), + x509.DNSName(b"zombo.local"), ], excluded_subtrees=[ x509.DirectoryName(x509.Name([ @@ -2899,7 +2966,7 @@ def test_permitted(self, backend): ).value assert nc == x509.NameConstraints( permitted_subtrees=[ - x509.DNSName(u"zombo.local"), + x509.DNSName(b"zombo.local"), ], excluded_subtrees=None ) @@ -2917,7 +2984,7 @@ def test_permitted_with_leading_period(self, backend): ).value assert nc == x509.NameConstraints( permitted_subtrees=[ - x509.DNSName(u".cryptography.io"), + x509.DNSName(b".cryptography.io"), x509.UniformResourceIdentifier(u"ftp://cryptography.test") ], excluded_subtrees=None @@ -2937,7 +3004,7 @@ def test_excluded_with_leading_period(self, backend): assert nc == x509.NameConstraints( permitted_subtrees=None, excluded_subtrees=[ - x509.DNSName(u".cryptography.io"), + x509.DNSName(b".cryptography.io"), x509.UniformResourceIdentifier(u"gopher://cryptography.test") ] ) @@ -2959,7 +3026,7 @@ def test_permitted_excluded_with_ips(self, backend): x509.IPAddress(ipaddress.IPv6Network(u"FF:0:0:0:0:0:0:0/96")), ], excluded_subtrees=[ - x509.DNSName(u".domain.com"), + x509.DNSName(b".domain.com"), x509.UniformResourceIdentifier(u"http://test.local"), ] ) @@ -2997,8 +3064,8 @@ def test_invalid_netmask(self, backend): ) def test_certbuilder(self, backend): - permitted = [u'.example.org', u'.\xf5\xe4\xf6\xfc.example.com', - u'foobar.example.net'] + permitted = [b'.example.org', b'.xn--4ca7aey.example.com', + b'foobar.example.net'] private_key = RSA_KEY_2048.private_key(backend) builder = _make_certbuilder(private_key) builder = builder.add_extension( @@ -3006,8 +3073,12 @@ def test_certbuilder(self, backend): excluded_subtrees=[]), True) cert = builder.sign(private_key, hashes.SHA1(), backend) - result = [x.value for x in cert.extensions.get_extension_for_class( - NameConstraints).value.permitted_subtrees] + result = [ + x.bytes_value + for x in cert.extensions.get_extension_for_class( + NameConstraints + ).value.permitted_subtrees + ] assert result == permitted diff --git a/tests/test_x509_revokedcertbuilder.py b/tests/test_x509_revokedcertbuilder.py index e3a06509fe23..9fc5eaa779e3 100644 --- a/tests/test_x509_revokedcertbuilder.py +++ b/tests/test_x509_revokedcertbuilder.py @@ -146,7 +146,7 @@ def test_create_revoked(self, backend): x509.InvalidityDate(datetime.datetime(2015, 1, 1, 0, 0)), x509.CRLReason(x509.ReasonFlags.ca_compromise), x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), + x509.DNSName(b"cryptography.io"), ]) ] ) @@ -180,7 +180,7 @@ def test_add_multiple_extensions(self, backend): datetime.datetime(2015, 1, 1, 0, 0) ) certificate_issuer = x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), + x509.DNSName(b"cryptography.io"), ]) crl_reason = x509.CRLReason(x509.ReasonFlags.aa_compromise) builder = x509.RevokedCertificateBuilder().serial_number( From 908bbd3a9f0e511f452c5b2b0124400be475aa06 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 1 Aug 2017 11:39:21 -0500 Subject: [PATCH 021/988] note version added and deprecated for bytes_value/value on DNSName (#3833) --- docs/x509/reference.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index c2ff0ffe3075..ea74846895ef 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1244,10 +1244,14 @@ General Name Classes .. attribute:: bytes_value + .. versionadded:: 2.1 + :type: bytes .. attribute:: value + .. deprecated:: 2.1 + Deprecated accessor for the idna-decoded value of :attr:`bytes_value` :type: :term:`text` From 7f40239ea2a8ac276f8dbf07fd51d1ff5e98c565 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 1 Aug 2017 19:54:35 -0400 Subject: [PATCH 022/988] Blacklist pytest 3.2.0 because it breaks us (#3835) See upstream: https://github.com/pytest-dev/pytest/issues/2644 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a7e63bd6e87f..a003bc89c4cd 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ setup_requirements.append("cffi>=1.7") test_requirements = [ - "pytest>=2.9.0", + "pytest>=2.9.0,!=3.2.0", "pretend", "iso8601", "pytz", From 6c29d74cfb60ba9480f2fcef18459cc532b2f33b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 1 Aug 2017 19:27:06 -0500 Subject: [PATCH 023/988] deprecate auto-idna on UniformResourceIdentifier (#3832) * deprecate auto-idna on UniformResourceIdentifier * fix repr test * docs * some updated language --- CHANGELOG.rst | 8 + docs/x509/reference.rst | 19 +- .../hazmat/backends/openssl/encode_asn1.py | 2 +- src/cryptography/x509/general_name.py | 73 +++- tests/test_x509.py | 8 +- tests/test_x509_ext.py | 325 ++++++++++-------- 6 files changed, 273 insertions(+), 162 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d7f2e42bec85..254402d7eb32 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,14 @@ Changelog :attr:`~cryptography.x509.DNSName.value` attribute was deprecated, users should use :attr:`~cryptography.x509.DNSName.bytes_value` to access the raw DNS name. +* Deprecated passing unicode to the + :class:`~cryptography.x509.UniformResourceIdentifier` constructor. Instead, + users should pass URIs as ``bytes``, with ``idna`` encoding if + necessary. In addition, the + :attr:`~cryptography.x509.UniformResourceIdentifier.value` attribute was + deprecated, users should use + :attr:`~cryptography.x509.UniformResourceIdentifier.bytes_value` to access the + raw value. 2.0.2 - 2017-07-27 ~~~~~~~~~~~~~~~~~~ diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index ea74846895ef..5b0bcd45f207 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1271,15 +1271,26 @@ General Name Classes .. versionadded:: 0.9 This corresponds to a uniform resource identifier. For example, - ``https://cryptography.io``. The URI is parsed and IDNA decoded (see - :rfc:`5895`). + ``https://cryptography.io``. - .. note:: + ..note:: - URIs that do not contain ``://`` in them will not be decoded. + Starting with version 2.1 unicode input is deprecated. If passing an + internationalized domain name (IDN) you should first IDNA encode the + hostname and then pass the resulting bytes. + + .. attribute:: bytes_value + + .. versionadded:: 2.1 + + :type: bytes .. attribute:: value + .. deprecated:: 2.1 + + Deprecated accessor for the idna-decoded value of :attr:`bytes_value` + :type: :term:`text` .. class:: IPAddress(value) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 77d221270642..78ae21a291be 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -449,7 +449,7 @@ def _encode_general_name(backend, name): gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) asn1_str = _encode_asn1_str( - backend, name._encoded, len(name._encoded) + backend, name.bytes_value, len(name.bytes_value) ) gn.type = backend._lib.GEN_URI gn.d.uniformResourceIdentifier = asn1_str diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 9ea1cff680e6..40525a0141b3 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -173,13 +173,36 @@ def __ne__(self, other): @utils.register_interface(GeneralName) class UniformResourceIdentifier(object): def __init__(self, value): - if not isinstance(value, six.text_type): - raise TypeError("value must be a unicode string") + if isinstance(value, six.text_type): + try: + value = value.encode("ascii") + except UnicodeEncodeError: + value = self._idna_encode(value) + warnings.warn( + "UniformResourceIdentifier values should be passed as " + "bytes with the hostname idna encoded, not strings. " + "Support for passing unicode strings will be removed in a " + "future version.", + utils.DeprecatedIn21, + stacklevel=2, + ) + else: + warnings.warn( + "UniformResourceIdentifier values should be passed as " + "bytes with the hostname idna encoded, not strings. " + "Support for passing unicode strings will be removed in a " + "future version.", + utils.DeprecatedIn21, + stacklevel=2, + ) + elif not isinstance(value, bytes): + raise TypeError("value must be bytes") + + self._bytes_value = value + def _idna_encode(self, value): parsed = urllib_parse.urlparse(value) - if not parsed.hostname: - netloc = "" - elif parsed.port: + if parsed.port: netloc = ( idna.encode(parsed.hostname) + ":{0}".format(parsed.port).encode("ascii") @@ -190,7 +213,7 @@ def __init__(self, value): # Note that building a URL in this fashion means it should be # semantically indistinguishable from the original but is not # guaranteed to be exactly the same. - uri = urllib_parse.urlunparse(( + return urllib_parse.urlunparse(( parsed.scheme, netloc, parsed.path, @@ -199,13 +222,43 @@ def __init__(self, value): parsed.fragment )).encode("ascii") - self._value = value - self._encoded = uri + @property + def value(self): + warnings.warn( + "UniformResourceIdentifier.bytes_value should be used instead of " + "UniformResourceIdentifier.value; it contains the name as raw " + "bytes, instead of as an idna-decoded unicode string. " + "UniformResourceIdentifier.value will be removed in a future " + "version.", + utils.DeprecatedIn21, + stacklevel=2 + ) + parsed = urllib_parse.urlparse(self.bytes_value) + if not parsed.hostname: + netloc = "" + elif parsed.port: + netloc = idna.decode(parsed.hostname) + ":{0}".format(parsed.port) + else: + netloc = idna.decode(parsed.hostname) - value = utils.read_only_property("_value") + # Note that building a URL in this fashion means it should be + # semantically indistinguishable from the original but is not + # guaranteed to be exactly the same. + return urllib_parse.urlunparse(( + parsed.scheme.decode('utf8'), + netloc, + parsed.path.decode('utf8'), + parsed.params.decode('utf8'), + parsed.query.decode('utf8'), + parsed.fragment.decode('utf8') + )) + + bytes_value = utils.read_only_property("_bytes_value") def __repr__(self): - return "".format(self.value) + return "".format( + self.bytes_value + ) def __eq__(self, other): if not isinstance(other, UniformResourceIdentifier): diff --git a/tests/test_x509.py b/tests/test_x509.py index 661461d45175..58d3e5460117 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -229,7 +229,7 @@ def test_extensions(self, backend): ) ]) assert ian.value == x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), + x509.UniformResourceIdentifier(b"https://cryptography.io"), ]) def test_signature(self, backend): @@ -1506,7 +1506,7 @@ def test_encode_nonstandard_aia(self, backend): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( x509.ObjectIdentifier("2.999.7"), - x509.UniformResourceIdentifier(u"http://example.com") + x509.UniformResourceIdentifier(b"http://example.com") ), ]) @@ -3154,11 +3154,11 @@ def test_build_cert_with_aia(self, backend): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ]) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index b707156ae1df..93538bbcb176 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -167,7 +167,7 @@ def test_indexing(self): x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), + x509.UniformResourceIdentifier(b"http://another.local"), ]) assert ci[-1] == ci[4] assert ci[2:6:2] == [ci[2], ci[4]] @@ -1437,36 +1437,6 @@ def test_key_cert_sign_crl_sign(self, backend): assert ku.crl_sign is True -@pytest.mark.parametrize( - "name", [ - x509.RFC822Name, - x509.UniformResourceIdentifier - ] -) -class TestTextGeneralNames(object): - def test_not_text(self, name): - with pytest.raises(TypeError): - name(b"notaunicodestring") - - with pytest.raises(TypeError): - name(1.3) - - def test_repr(self, name): - gn = name(u"string") - assert repr(gn) == "<{0}(value=string)>".format(name.__name__) - - def test_eq(self, name): - gn = name(u"string") - gn2 = name(u"string") - assert gn == gn2 - - def test_ne(self, name): - gn = name(u"string") - gn2 = name(u"string2") - assert gn != gn2 - assert gn != object() - - class TestDNSName(object): def test_init(self): with pytest.warns(utils.DeprecatedIn21): @@ -1540,6 +1510,25 @@ def test_ne(self): class TestRFC822Name(object): + def test_repr(self): + gn = x509.RFC822Name(u"string") + assert repr(gn) == "" + + def test_equality(self): + gn = x509.RFC822Name(u"string") + gn2 = x509.RFC822Name(u"string2") + gn3 = x509.RFC822Name(u"string") + assert gn != gn2 + assert gn != object() + assert gn == gn3 + + def test_not_text(self): + with pytest.raises(TypeError): + x509.RFC822Name(b"notaunicodestring") + + with pytest.raises(TypeError): + x509.RFC822Name(1.3) + def test_invalid_email(self): with pytest.raises(ValueError): x509.RFC822Name(u"Name ") @@ -1566,44 +1555,75 @@ def test_hash(self): class TestUniformResourceIdentifier(object): + def test_equality(self): + gn = x509.UniformResourceIdentifier(b"string") + gn2 = x509.UniformResourceIdentifier(b"string2") + gn3 = x509.UniformResourceIdentifier(b"string") + assert gn != gn2 + assert gn != object() + assert gn == gn3 + + def test_not_text_or_bytes(self): + with pytest.raises(TypeError): + x509.UniformResourceIdentifier(1.3) + def test_no_parsed_hostname(self): - gn = x509.UniformResourceIdentifier(u"singlelabel") - assert gn.value == u"singlelabel" + gn = x509.UniformResourceIdentifier(b"singlelabel") + assert gn.bytes_value == b"singlelabel" def test_with_port(self): - gn = x509.UniformResourceIdentifier(u"singlelabel:443/test") - assert gn.value == u"singlelabel:443/test" + gn = x509.UniformResourceIdentifier(b"singlelabel:443/test") + assert gn.bytes_value == b"singlelabel:443/test" def test_idna_no_port(self): - gn = x509.UniformResourceIdentifier( - u"http://\u043f\u044b\u043a\u0430.cryptography" - ) - assert gn.value == u"http://\u043f\u044b\u043a\u0430.cryptography" - assert gn._encoded == b"http://xn--80ato2c.cryptography" + with pytest.warns(utils.DeprecatedIn21): + gn = x509.UniformResourceIdentifier( + u"http://\u043f\u044b\u043a\u0430.cryptography" + ) + with pytest.warns(utils.DeprecatedIn21): + assert gn.value == u"http://\u043f\u044b\u043a\u0430.cryptography" + assert gn.bytes_value == b"http://xn--80ato2c.cryptography" def test_idna_with_port(self): - gn = x509.UniformResourceIdentifier( - u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" - ) - assert gn.value == ( - u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" + with pytest.warns(utils.DeprecatedIn21): + gn = x509.UniformResourceIdentifier( + u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" + ) + with pytest.warns(utils.DeprecatedIn21): + assert gn.value == ( + u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" + ) + assert gn.bytes_value == ( + b"gopher://xn--80ato2c.cryptography:70/some/path" ) - assert gn._encoded == b"gopher://xn--80ato2c.cryptography:70/some/path" def test_query_and_fragment(self): gn = x509.UniformResourceIdentifier( - u"ldap://cryptography:90/path?query=true#somedata" + b"ldap://cryptography:90/path?query=true#somedata" + ) + assert gn.bytes_value == ( + b"ldap://cryptography:90/path?query=true#somedata" ) - assert gn.value == u"ldap://cryptography:90/path?query=true#somedata" def test_hash(self): - g1 = x509.UniformResourceIdentifier(u"http://host.com") - g2 = x509.UniformResourceIdentifier(u"http://host.com") - g3 = x509.UniformResourceIdentifier(u"http://other.com") + g1 = x509.UniformResourceIdentifier(b"http://host.com") + g2 = x509.UniformResourceIdentifier(b"http://host.com") + g3 = x509.UniformResourceIdentifier(b"http://other.com") assert hash(g1) == hash(g2) assert hash(g1) != hash(g3) + def test_repr(self): + gn = x509.UniformResourceIdentifier(b"string") + if six.PY3: + assert repr(gn) == ( + "" + ) + else: + assert repr(gn) == ( + "" + ) + class TestRegisteredID(object): def test_not_oid(self): @@ -1747,7 +1767,7 @@ def test_indexing(self): x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), + x509.UniformResourceIdentifier(b"http://another.local"), ]) assert gn[-1] == gn[4] assert gn[2:6:2] == [gn[2], gn[4]] @@ -1818,7 +1838,7 @@ def test_indexing(self): x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), + x509.UniformResourceIdentifier(b"http://another.local"), ]) assert ian[-1] == ian[4] assert ian[2:6:2] == [ian[2], ian[4]] @@ -1879,7 +1899,7 @@ def test_uri(self, backend): ExtensionOID.ISSUER_ALTERNATIVE_NAME ) assert list(ext.value) == [ - x509.UniformResourceIdentifier(u"http://path.to.root/root.crt"), + x509.UniformResourceIdentifier(b"http://path.to.root/root.crt"), ] @@ -1934,7 +1954,7 @@ def test_indexing(self): x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), + x509.UniformResourceIdentifier(b"http://another.local"), ]) assert san[-1] == san[4] assert san[2:6:2] == [san[2], san[4]] @@ -2335,44 +2355,51 @@ def test_invalid_access_location(self): def test_valid_nonstandard_method(self): ad = x509.AccessDescription( ObjectIdentifier("2.999.1"), - x509.UniformResourceIdentifier(u"http://example.com") + x509.UniformResourceIdentifier(b"http://example.com") ) assert ad is not None def test_repr(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") - ) - assert repr(ad) == ( - ", access_location=)>" + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) + if six.PY3: + assert repr(ad) == ( + ", access_location=)>" + ) + else: + assert repr(ad) == ( + ", access_location=)>" + ) def test_eq(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) assert ad == ad2 def test_ne(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) ad3 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://notthesame") + x509.UniformResourceIdentifier(b"http://notthesame") ) assert ad != ad2 assert ad != ad3 @@ -2381,15 +2408,15 @@ def test_ne(self): def test_hash(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) ad3 = x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) assert hash(ad) == hash(ad2) assert hash(ad) != hash(ad3) @@ -2472,22 +2499,22 @@ def test_iter_len(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ]) assert len(aia) == 2 assert list(aia) == [ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ] @@ -2495,7 +2522,7 @@ def test_iter_input(self): desc = [ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ) ] aia = x509.AuthorityInformationAccess(iter(desc)) @@ -2505,41 +2532,53 @@ def test_repr(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ]) - assert repr(aia) == ( - ", access_locati" - "on=)>, <" - "AccessDescription(access_method=, access_location=)>])>" - ) + if six.PY3: + assert repr(aia) == ( + ", acces" + "s_location=)>, , access_lo" + "cation=)>])>" + ) + else: + assert repr(aia) == ( + ", acces" + "s_location=)>, , access_lo" + "cation=)>])>" + ) def test_eq(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ]) aia2 = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ]) assert aia == aia2 @@ -2548,17 +2587,17 @@ def test_ne(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ) ]) aia2 = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), ]) @@ -2569,23 +2608,23 @@ def test_indexing(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp2.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp2.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp3.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp3.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp4.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp4.domain.com") ), ]) assert aia[-1] == aia[4] @@ -2610,11 +2649,11 @@ def test_aia_ocsp_ca_issuers(self, backend): assert ext.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://gv.symcd.com") + x509.UniformResourceIdentifier(b"http://gv.symcd.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://gv.symcb.com/gv.crt") + x509.UniformResourceIdentifier(b"http://gv.symcb.com/gv.crt") ), ]) @@ -2633,11 +2672,11 @@ def test_aia_multiple_ocsp_ca_issuers(self, backend): assert ext.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp2.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp2.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, @@ -2664,7 +2703,7 @@ def test_aia_ocsp_only(self, backend): assert ext.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") ), ]) @@ -2985,7 +3024,7 @@ def test_permitted_with_leading_period(self, backend): assert nc == x509.NameConstraints( permitted_subtrees=[ x509.DNSName(b".cryptography.io"), - x509.UniformResourceIdentifier(u"ftp://cryptography.test") + x509.UniformResourceIdentifier(b"ftp://cryptography.test") ], excluded_subtrees=None ) @@ -3005,7 +3044,7 @@ def test_excluded_with_leading_period(self, backend): permitted_subtrees=None, excluded_subtrees=[ x509.DNSName(b".cryptography.io"), - x509.UniformResourceIdentifier(u"gopher://cryptography.test") + x509.UniformResourceIdentifier(b"gopher://cryptography.test") ] ) @@ -3027,7 +3066,7 @@ def test_permitted_excluded_with_ips(self, backend): ], excluded_subtrees=[ x509.DNSName(b".domain.com"), - x509.UniformResourceIdentifier(u"http://test.local"), + x509.UniformResourceIdentifier(b"http://test.local"), ] ) @@ -3102,7 +3141,7 @@ def test_crl_issuer_not_general_names(self): def test_reason_not_reasonflags(self): with pytest.raises(TypeError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, frozenset(["notreasonflags"]), None @@ -3111,7 +3150,7 @@ def test_reason_not_reasonflags(self): def test_reason_not_frozenset(self): with pytest.raises(TypeError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, [x509.ReasonFlags.ca_compromise], None @@ -3120,7 +3159,7 @@ def test_reason_not_frozenset(self): def test_disallowed_reasons(self): with pytest.raises(ValueError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.unspecified]), None @@ -3128,7 +3167,7 @@ def test_disallowed_reasons(self): with pytest.raises(ValueError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.remove_from_crl]), None @@ -3145,7 +3184,7 @@ def test_reason_only(self): def test_eq(self): dp = x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3159,7 +3198,7 @@ def test_eq(self): ], ) dp2 = x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3176,7 +3215,7 @@ def test_eq(self): def test_ne(self): dp = x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3190,7 +3229,7 @@ def test_ne(self): ], ) dp2 = x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], None, None, None @@ -3199,7 +3238,7 @@ def test_ne(self): assert dp != object() def test_iter_input(self): - name = [x509.UniformResourceIdentifier(u"http://crypt.og/crl")] + name = [x509.UniformResourceIdentifier(b"http://crypt.og/crl")] issuer = [ x509.DirectoryName( x509.Name([ @@ -3263,13 +3302,13 @@ def test_invalid_distribution_points(self): def test_iter_len(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://domain")], + [x509.UniformResourceIdentifier(b"http://domain")], None, None, None ), x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, @@ -3281,13 +3320,13 @@ def test_iter_len(self): assert len(cdp) == 2 assert list(cdp) == [ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://domain")], + [x509.UniformResourceIdentifier(b"http://domain")], None, None, None ), x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, @@ -3300,7 +3339,7 @@ def test_iter_len(self): def test_iter_input(self): points = [ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"http://domain")], + [x509.UniformResourceIdentifier(b"http://domain")], None, None, None @@ -3312,7 +3351,7 @@ def test_iter_input(self): def test_repr(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), None @@ -3321,39 +3360,39 @@ def test_repr(self): if six.PY3: assert repr(cdp) == ( "], relative_name=No" - "ne, reasons=frozenset({}), crl_issuer=None)>])>" + "rmResourceIdentifier(bytes_value=b'ftp://domain')>], relative" + "_name=None, reasons=frozenset({}), crl_issuer=None)>])>" ) else: assert repr(cdp) == ( "], relative_name=No" - "ne, reasons=frozenset([]), crl_issuer=None)>])>" + "rmResourceIdentifier(bytes_value='ftp://domain')>], relative" + "_name=None, reasons=frozenset([]), crl_issuer=None)>])>" ) def test_eq(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(u"uri://thing")], + [x509.UniformResourceIdentifier(b"uri://thing")], ), ]) cdp2 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(u"uri://thing")], + [x509.UniformResourceIdentifier(b"uri://thing")], ), ]) assert cdp == cdp2 @@ -3361,43 +3400,43 @@ def test_eq(self): def test_ne(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(u"uri://thing")], + [x509.UniformResourceIdentifier(b"uri://thing")], ), ]) cdp2 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain2")], + [x509.UniformResourceIdentifier(b"ftp://domain2")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(u"uri://thing")], + [x509.UniformResourceIdentifier(b"uri://thing")], ), ]) cdp3 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), - [x509.UniformResourceIdentifier(u"uri://thing")], + [x509.UniformResourceIdentifier(b"uri://thing")], ), ]) cdp4 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(u"ftp://domain")], + [x509.UniformResourceIdentifier(b"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(u"uri://thing2")], + [x509.UniformResourceIdentifier(b"uri://thing2")], ), ]) assert cdp != cdp2 @@ -3409,23 +3448,23 @@ def test_indexing(self): ci = x509.CRLDistributionPoints([ x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(u"uri://thing")], + [x509.UniformResourceIdentifier(b"uri://thing")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(u"uri://thing2")], + [x509.UniformResourceIdentifier(b"uri://thing2")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(u"uri://thing3")], + [x509.UniformResourceIdentifier(b"uri://thing3")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(u"uri://thing4")], + [x509.UniformResourceIdentifier(b"uri://thing4")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(u"uri://thing5")], + [x509.UniformResourceIdentifier(b"uri://thing5")], ), ]) assert ci[-1] == ci[4] From 3e15ca5ee264d419249ff95f1b67df64a8e979a0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 1 Aug 2017 21:21:19 -0500 Subject: [PATCH 024/988] deprecate unicode input for RFC822Name (#3836) * deprecate unicode input for RFC822Name * pep8...? --- CHANGELOG.rst | 8 ++- docs/x509/reference.rst | 16 +++++ .../hazmat/backends/openssl/encode_asn1.py | 2 +- src/cryptography/x509/general_name.py | 64 +++++++++++++++---- tests/test_x509_ext.py | 59 +++++++++-------- 5 files changed, 108 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 254402d7eb32..5fa545fa9664 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,7 +21,13 @@ Changelog necessary. In addition, the :attr:`~cryptography.x509.UniformResourceIdentifier.value` attribute was deprecated, users should use - :attr:`~cryptography.x509.UniformResourceIdentifier.bytes_value` to access the + :attr:`~cryptography.x509.UniformResourceIdentifier.bytes_value` to access + the raw value. +* Deprecated passing unicode to the :class:`~cryptography.x509.RFC822Name` + constructor. Instead, users should pass email addresses as ``bytes``, with + ``idna`` encoding of the hostname if necessary. In addition, the + :attr:`~cryptography.x509.RFC822Name.value` attribute was deprecated, users + should use :attr:`~cryptography.x509.RFC822Name.bytes_value` to access the raw value. 2.0.2 - 2017-07-27 diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 5b0bcd45f207..8b9761190ffe 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1232,8 +1232,24 @@ General Name Classes This corresponds to an email address. For example, ``user@example.com``. + ..note:: + + Starting with version 2.1 unicode input is deprecated. If passing an + internationalized domain name (IDN) you should first IDNA encode the + hostname and then pass the resulting bytes. + + .. attribute:: bytes_value + + .. versionadded:: 2.1 + + :type: bytes + .. attribute:: value + .. deprecated:: 2.1 + + Deprecated accessor for the idna-decoded value of :attr:`bytes_value` + :type: :term:`text` .. class:: DNSName(value) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 78ae21a291be..6d9f95678970 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -441,7 +441,7 @@ def _encode_general_name(backend, name): gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) asn1_str = _encode_asn1_str( - backend, name._encoded, len(name._encoded) + backend, name.bytes_value, len(name.bytes_value) ) gn.type = backend._lib.GEN_EMAIL gn.d.rfc822Name = asn1_str diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 40525a0141b3..114b43aea0e1 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -51,31 +51,67 @@ def value(self): @utils.register_interface(GeneralName) class RFC822Name(object): def __init__(self, value): - if not isinstance(value, six.text_type): - raise TypeError("value must be a unicode string") + if isinstance(value, six.text_type): + try: + value = value.encode("ascii") + except UnicodeEncodeError: + value = self._idna_encode(value) + warnings.warn( + "RFC822Name values should be passed as bytes, not strings." + " Support for passing unicode strings will be removed in a" + " future version.", + utils.DeprecatedIn21, + stacklevel=2, + ) + else: + warnings.warn( + "RFC822Name values should be passed as bytes, not strings." + " Support for passing unicode strings will be removed in a" + " future version.", + utils.DeprecatedIn21, + stacklevel=2, + ) + elif not isinstance(value, bytes): + raise TypeError("value must be bytes") - name, address = parseaddr(value) - parts = address.split(u"@") + name, address = parseaddr(value.decode("ascii")) if name or not address: # parseaddr has found a name (e.g. Name ) or the entire # value is an empty string. raise ValueError("Invalid rfc822name value") - elif len(parts) == 1: + + self._bytes_value = value + + bytes_value = utils.read_only_property("_bytes_value") + + def _idna_encode(self, value): + _, address = parseaddr(value) + parts = address.split(u"@") + return parts[0].encode("ascii") + b"@" + idna.encode(parts[1]) + + @property + def value(self): + warnings.warn( + "RFC822Name.bytes_value should be used instead of RFC822Name.value" + "; it contains the name as raw bytes, instead of as an idna-" + "decoded unicode string. RFC822Name.value will be removed in a " + "future version.", + utils.DeprecatedIn21, + stacklevel=2 + ) + _, address = parseaddr(self.bytes_value.decode("ascii")) + parts = address.split(u"@") + if len(parts) == 1: # Single label email name. This is valid for local delivery. - # No IDNA encoding needed since there is no domain component. - encoded = address.encode("ascii") + # No IDNA decoding needed since there is no domain component. + return address else: # A normal email of the form user@domain.com. Let's attempt to # encode the domain component and reconstruct the address. - encoded = parts[0].encode("ascii") + b"@" + idna.encode(parts[1]) - - self._value = value - self._encoded = encoded - - value = utils.read_only_property("_value") + return parts[0] + u"@" + idna.decode(parts[1]) def __repr__(self): - return "".format(self.value) + return "".format(self.bytes_value) def __eq__(self, other): if not isinstance(other, RFC822Name): diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 93538bbcb176..ee94faafabc0 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -166,7 +166,7 @@ def test_indexing(self): x509.DNSName(b"cryptography.io"), x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), - x509.RFC822Name(u"email@another.local"), + x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert ci[-1] == ci[4] @@ -1511,44 +1511,53 @@ def test_ne(self): class TestRFC822Name(object): def test_repr(self): - gn = x509.RFC822Name(u"string") - assert repr(gn) == "" + gn = x509.RFC822Name(b"string") + if six.PY3: + assert repr(gn) == "" + else: + assert repr(gn) == "" def test_equality(self): - gn = x509.RFC822Name(u"string") - gn2 = x509.RFC822Name(u"string2") - gn3 = x509.RFC822Name(u"string") + gn = x509.RFC822Name(b"string") + gn2 = x509.RFC822Name(b"string2") + gn3 = x509.RFC822Name(b"string") assert gn != gn2 assert gn != object() assert gn == gn3 - def test_not_text(self): - with pytest.raises(TypeError): - x509.RFC822Name(b"notaunicodestring") - + def test_not_text_or_bytes(self): with pytest.raises(TypeError): x509.RFC822Name(1.3) def test_invalid_email(self): with pytest.raises(ValueError): x509.RFC822Name(u"Name ") + with pytest.raises(ValueError): + x509.RFC822Name(b"Name ") with pytest.raises(ValueError): - x509.RFC822Name(u"") + x509.RFC822Name(b"") def test_single_label(self): - gn = x509.RFC822Name(u"administrator") - assert gn.value == u"administrator" + gn = x509.RFC822Name(b"administrator") + with pytest.warns(utils.DeprecatedIn21): + assert gn.value == u"administrator" + + assert gn.bytes_value == b"administrator" def test_idna(self): - gn = x509.RFC822Name(u"email@em\xe5\xefl.com") - assert gn.value == u"email@em\xe5\xefl.com" - assert gn._encoded == b"email@xn--eml-vla4c.com" + with pytest.warns(utils.DeprecatedIn21): + gn = x509.RFC822Name(u"email@em\xe5\xefl.com") + + with pytest.warns(utils.DeprecatedIn21): + assert gn.value == u"email@em\xe5\xefl.com" + + assert gn.bytes_value == b"email@xn--eml-vla4c.com" def test_hash(self): - g1 = x509.RFC822Name(u"email@host.com") - g2 = x509.RFC822Name(u"email@host.com") - g3 = x509.RFC822Name(u"admin@host.com") + g1 = x509.RFC822Name(b"email@host.com") + g2 = x509.RFC822Name(b"email@host.com") + g3 = x509.RFC822Name(b"admin@host.com") assert hash(g1) == hash(g2) assert hash(g1) != hash(g3) @@ -1766,7 +1775,7 @@ def test_indexing(self): x509.DNSName(b"cryptography.io"), x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), - x509.RFC822Name(u"email@another.local"), + x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert gn[-1] == gn[4] @@ -1807,7 +1816,7 @@ def test_ne(self): [x509.DNSName(b"cryptography.io")] ) gns2 = x509.GeneralNames( - [x509.RFC822Name(u"admin@cryptography.io")] + [x509.RFC822Name(b"admin@cryptography.io")] ) assert gns != gns2 assert gns != object() @@ -1837,7 +1846,7 @@ def test_indexing(self): x509.DNSName(b"cryptography.io"), x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), - x509.RFC822Name(u"email@another.local"), + x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert ian[-1] == ian[4] @@ -1880,7 +1889,7 @@ def test_ne(self): [x509.DNSName(b"cryptography.io")] ) san2 = x509.IssuerAlternativeName( - [x509.RFC822Name(u"admin@cryptography.io")] + [x509.RFC822Name(b"admin@cryptography.io")] ) assert san != san2 assert san != object() @@ -1953,7 +1962,7 @@ def test_indexing(self): x509.DNSName(b"cryptography.io"), x509.DNSName(b"crypto.local"), x509.DNSName(b"another.local"), - x509.RFC822Name(u"email@another.local"), + x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert san[-1] == san[4] @@ -1996,7 +2005,7 @@ def test_ne(self): [x509.DNSName(b"cryptography.io")] ) san2 = x509.SubjectAlternativeName( - [x509.RFC822Name(u"admin@cryptography.io")] + [x509.RFC822Name(b"admin@cryptography.io")] ) assert san != san2 assert san != object() From 990d7596ca5d8dfa1d9331cdcb072fabf9d10fca Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 3 Aug 2017 09:02:20 -0400 Subject: [PATCH 025/988] Remve outdated comment and linewrap (#3838) --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index c59dba66acdd..9151e3ea9025 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -111,8 +111,10 @@ def build(version, label, imageName) { virtualenv .venv -p ${pythonPath[version]} source .venv/bin/activate pip install -U wheel # upgrade wheel to latest before we use it to build the wheel - # -mmacosx-version-min=10.9 can be remove when https://github.com/pyca/cryptography/issues/3635 is resolved - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" + LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" + CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" + pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" otool -L `find .venv -name '_openssl*.so'` From 765e771b1148755eb2344dd46747c7f853c62a52 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 3 Aug 2017 16:08:09 +0200 Subject: [PATCH 026/988] Make changelog anchors stable ids (#3840) Closes: #3839 Signed-off-by: Christian Heimes --- CHANGELOG.rst | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5fa545fa9664..2abdeb419dee 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,9 @@ Changelog ========= + +.. _v2-1: + 2.1 - - `master`_ ~~~~~~~~~~~~~~~~~ @@ -30,12 +33,18 @@ Changelog should use :attr:`~cryptography.x509.RFC822Name.bytes_value` to access the raw value. + +.. _v2-0-2: + 2.0.2 - 2017-07-27 ~~~~~~~~~~~~~~~~~~ * Marked all symbols as hidden in the ``manylinux1`` wheel to avoid a bug with symbol resolution in certain scenarios. + +.. _v2-0-1: + 2.0.1 - 2017-07-26 ~~~~~~~~~~~~~~~~~~ @@ -46,6 +55,9 @@ Changelog OpenSSL independently. * Fixed the stack level for the ``signer`` and ``verifier`` warnings. + +.. _v2-0: + 2.0 - 2017-07-17 ~~~~~~~~~~~~~~~~ @@ -91,6 +103,9 @@ Changelog performance improvement for programs accessing the ``extensions`` attribute multiple times. + +.. _v1-9: + 1.9 - 2017-05-29 ~~~~~~~~~~~~~~~~ @@ -124,17 +139,26 @@ Changelog * MultiBackend has been removed. * ``Whirlpool`` and ``RIPEMD160`` have been deprecated. + +.. _v1-8-2: + 1.8.2 - 2017-05-26 ~~~~~~~~~~~~~~~~~~ * Fixed a compilation bug affecting OpenSSL 1.1.0f. * Updated Windows and macOS wheels to be compiled against OpenSSL 1.1.0f. + +.. _v1-8-1: + 1.8.1 - 2017-03-10 ~~~~~~~~~~~~~~~~~~ * Fixed macOS wheels to properly link against 1.1.0 rather than 1.0.2. + +.. _v1-8: + 1.8 - 2017-03-09 ~~~~~~~~~~~~~~~~ @@ -164,17 +188,26 @@ Changelog was documented but not enforced. * Added support for subgroup order in :doc:`/hazmat/primitives/asymmetric/dh`. + +.. _v1-7-2: + 1.7.2 - 2017-01-27 ~~~~~~~~~~~~~~~~~~ * Updated Windows and macOS wheels to be compiled against OpenSSL 1.0.2k. + +.. _v1-7-1: + 1.7.1 - 2016-12-13 ~~~~~~~~~~~~~~~~~~ * Fixed a regression in ``int_from_bytes`` where it failed to accept ``bytearray``. + +.. _v1-7: + 1.7 - 2016-12-12 ~~~~~~~~~~~~~~~~ @@ -187,6 +220,9 @@ Changelog can be found in the `pull request `_. + +.. _v1-6: + 1.6 - 2016-11-22 ~~~~~~~~~~~~~~~~ @@ -235,6 +271,9 @@ Changelog :class:`~cryptography.hazmat.primitives.asymmetric.utils.Prehashed` digests. + +.. _v1-5-3: + 1.5.3 - 2016-11-05 ~~~~~~~~~~~~~~~~~~ @@ -242,11 +281,17 @@ Changelog byte-string if used with a ``length`` less than ``algorithm.digest_size``. Credit to **Markus Döring** for reporting the issue. *CVE-2016-9243* + +.. _v1-5-2: + 1.5.2 - 2016-09-26 ~~~~~~~~~~~~~~~~~~ * Updated Windows and OS X wheels to be compiled against OpenSSL 1.0.2j. + +.. _v1-5-1: + 1.5.1 - 2016-09-22 ~~~~~~~~~~~~~~~~~~ @@ -258,6 +303,9 @@ Changelog OpenSSL 1.0.2i. + +.. _v1-5: + 1.5 - 2016-08-26 ~~~~~~~~~~~~~~~~ @@ -282,6 +330,9 @@ Changelog * ``cryptography`` now supports OpenSSL 1.1.0 as a compilation target. + +.. _v1-4: + 1.4 - 2016-06-04 ~~~~~~~~~~~~~~~~ @@ -302,6 +353,9 @@ Changelog :attr:`~cryptography.x509.Certificate.serial_number`. + +.. _v1-3-4: + 1.3.4 - 2016-06-03 ~~~~~~~~~~~~~~~~~~ @@ -309,12 +363,18 @@ Changelog ``pyOpenSSL`` release. + +.. _v1-3-3: + 1.3.3 - 2016-06-02 ~~~~~~~~~~~~~~~~~~ * Added two new OpenSSL functions to the bindings to support an upcoming ``pyOpenSSL`` release. + +.. _v1-3-2: + 1.3.2 - 2016-05-04 ~~~~~~~~~~~~~~~~~~ @@ -322,12 +382,18 @@ Changelog * Fixed an issue preventing ``cryptography`` from compiling against LibreSSL 2.3.x. + +.. _v1-3-1: + 1.3.1 - 2016-03-21 ~~~~~~~~~~~~~~~~~~ * Fixed a bug that caused an ``AttributeError`` when using ``mock`` to patch some ``cryptography`` modules. + +.. _v1-3: + 1.3 - 2016-03-18 ~~~~~~~~~~~~~~~~ @@ -346,22 +412,34 @@ Changelog * Added :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier`. + +.. _v1-2-3: + 1.2.3 - 2016-03-01 ~~~~~~~~~~~~~~~~~~ * Updated Windows and OS X wheels to be compiled against OpenSSL 1.0.2g. + +.. _v1-2-2: + 1.2.2 - 2016-01-29 ~~~~~~~~~~~~~~~~~~ * Updated Windows and OS X wheels to be compiled against OpenSSL 1.0.2f. + +.. _v1-2-1: + 1.2.1 - 2016-01-08 ~~~~~~~~~~~~~~~~~~ * Reverts a change to an OpenSSL ``EVP_PKEY`` object that caused errors with ``pyOpenSSL``. + +.. _v1-2: + 1.2 - 2016-01-08 ~~~~~~~~~~~~~~~~ @@ -411,6 +489,9 @@ Changelog * Unrecognized non-critical X.509 extensions are now parsed into an :class:`~cryptography.x509.UnrecognizedExtension` object. + +.. _v1-1-2: + 1.1.2 - 2015-12-10 ~~~~~~~~~~~~~~~~~~ @@ -420,6 +501,9 @@ Changelog occurred with some OpenSSL installations. * Updated Windows and OS X wheels to be compiled against OpenSSL 1.0.2e. + +.. _v1-1-1: + 1.1.1 - 2015-11-19 ~~~~~~~~~~~~~~~~~~ @@ -429,6 +513,9 @@ Changelog which Python interpreter they were using, users on El Capitan (OS X 10.11) may have seen an ``InternalError`` on import. + +.. _v1-1: + 1.1 - 2015-10-28 ~~~~~~~~~~~~~~~~ @@ -453,6 +540,9 @@ Changelog * ``countryName`` is now encoded as a ``PrintableString`` when creating subject and issuer distinguished names with the Certificate and CSR builder classes. + +.. _v1-0-2: + 1.0.2 - 2015-09-27 ~~~~~~~~~~~~~~~~~~ * **SECURITY ISSUE**: The OpenSSL backend prior to 1.0.2 made extensive use @@ -464,6 +554,9 @@ Changelog to a true function call. Credit **Emilia Käsper (Google Security Team)** for the report. + +.. _v1-0-1: + 1.0.1 - 2015-09-05 ~~~~~~~~~~~~~~~~~~ @@ -477,6 +570,9 @@ Changelog release. * Raise an error during install on PyPy < 2.6. 1.0+ requires PyPy 2.6+. + +.. _v1-0: + 1.0 - 2015-08-12 ~~~~~~~~~~~~~~~~ @@ -537,16 +633,25 @@ Changelog :func:`~cryptography.hazmat.primitives.asymmetric.utils.decode_dss_signature`. + +.. _v0-9-3: + 0.9.3 - 2015-07-09 ~~~~~~~~~~~~~~~~~~ * Updated Windows wheels to be compiled against OpenSSL 1.0.2d. + +.. _v0-9-2: + 0.9.2 - 2015-07-04 ~~~~~~~~~~~~~~~~~~ * Updated Windows wheels to be compiled against OpenSSL 1.0.2c. + +.. _v0-9-1: + 0.9.1 - 2015-06-06 ~~~~~~~~~~~~~~~~~~ @@ -554,6 +659,9 @@ Changelog to verify signatures. Note that this only affects PyPy 2.6.0 and (presently unreleased) CFFI versions greater than 1.1.0. + +.. _v0-9: + 0.9 - 2015-05-13 ~~~~~~~~~~~~~~~~ @@ -605,17 +713,26 @@ Changelog silently ignored. Read the :doc:`X.509 documentation` for more information. + +.. _v0-8-2: + 0.8.2 - 2015-04-10 ~~~~~~~~~~~~~~~~~~ * Fixed a race condition when initializing the OpenSSL or CommonCrypto backends in a multi-threaded scenario. + +.. _v0-8-1: + 0.8.1 - 2015-03-20 ~~~~~~~~~~~~~~~~~~ * Updated Windows wheels to be compiled against OpenSSL 1.0.2a. + +.. _v0-8: + 0.8 - 2015-03-08 ~~~~~~~~~~~~~~~~ @@ -729,6 +846,9 @@ Changelog ``cryptography.hazmat.primitives.interfaces`` to :mod:`~cryptography.hazmat.primitives.asymmetric.rsa`. + +.. _v0-7-2: + 0.7.2 - 2015-01-16 ~~~~~~~~~~~~~~~~~~ @@ -738,12 +858,18 @@ Changelog * Added a new function to the OpenSSL bindings to support additional functionality in pyOpenSSL. + +.. _v0-7-1: + 0.7.1 - 2014-12-28 ~~~~~~~~~~~~~~~~~~ * Fixed an issue preventing compilation on platforms where ``OPENSSL_NO_SSL3`` was defined. + +.. _v0-7: + 0.7 - 2014-12-17 ~~~~~~~~~~~~~~~~ @@ -765,6 +891,9 @@ Changelog * Added initial support for X.509 certificate parsing. See the :doc:`X.509 documentation` for more information. + +.. _v0-6-1: + 0.6.1 - 2014-10-15 ~~~~~~~~~~~~~~~~~~ @@ -776,6 +905,9 @@ Changelog backend. This works around an issue in 1.0.0, 1.0.0a, and 1.0.0b where truncation was not implemented. + +.. _v0-6: + 0.6 - 2014-09-29 ~~~~~~~~~~~~~~~~ @@ -809,6 +941,9 @@ Changelog * Support loading EC private keys from PEM. + +.. _v0-5-4: + 0.5.4 - 2014-08-20 ~~~~~~~~~~~~~~~~~~ @@ -816,22 +951,34 @@ Changelog functionality in pyOpenSSL. * Fixed a redefined constant causing compilation failure with Solaris 11.2. + +.. _v0-5-3: + 0.5.3 - 2014-08-06 ~~~~~~~~~~~~~~~~~~ * Updated Windows wheels to be compiled against OpenSSL 1.0.1i. + +.. _v0-5-2: + 0.5.2 - 2014-07-09 ~~~~~~~~~~~~~~~~~~ * Add ``TraditionalOpenSSLSerializationBackend`` support to ``multibackend``. * Fix compilation error on OS X 10.8 (Mountain Lion). + +.. _v0-5-1: + 0.5.1 - 2014-07-07 ~~~~~~~~~~~~~~~~~~ * Add ``PKCS8SerializationBackend`` support to ``multibackend``. + +.. _v0-5: + 0.5 - 2014-07-07 ~~~~~~~~~~~~~~~~ @@ -885,6 +1032,9 @@ Changelog * Deprecated ``create_dsa_signature_ctx`` and ``create_dsa_verification_ctx`` on :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. + +.. _v0-4: + 0.4 - 2014-05-03 ~~~~~~~~~~~~~~~~ @@ -905,6 +1055,9 @@ Changelog and verification support to :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`. + +.. _v0-3: + 0.3 - 2014-03-27 ~~~~~~~~~~~~~~~~ @@ -918,18 +1071,27 @@ Changelog :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`. * Moved test vectors to the new ``cryptography_vectors`` package. + +.. _v0-2-2: + 0.2.2 - 2014-03-03 ~~~~~~~~~~~~~~~~~~ * Removed a constant definition that was causing compilation problems with specific versions of OpenSSL. + +.. _v0-2-1: + 0.2.1 - 2014-02-22 ~~~~~~~~~~~~~~~~~~ * Fix a bug where importing cryptography from multiple paths could cause initialization to fail. + +.. _v0-2: + 0.2 - 2014-02-20 ~~~~~~~~~~~~~~~~ @@ -949,6 +1111,9 @@ Changelog * Added :class:`~cryptography.hazmat.primitives.ciphers.algorithms.CAST5` (CAST-128) support. + +.. _v0-1: + 0.1 - 2014-01-08 ~~~~~~~~~~~~~~~~ From d026b1b226f97991cbf1994521fd1260eb27a762 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 3 Aug 2017 12:52:39 -0500 Subject: [PATCH 027/988] Fix weak linking of getentropy when compiling on older macOS (#3841) * Fix weak linking of getentropy when compiling on older macOS We use weak linking in macOS to determine if the getentropy symbol is available. However, to do that we need to have a declaration that states the function is __attribute((weak_import)) at compile time. On macOS 10.12 this is provided in sys/random.h, but on older macOS the declaration doesn't exist at all, so we need to forward declare it ourselves. * update a comment and a style nit --- src/_cffi_src/openssl/src/osrandom_engine.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index c400ea3e6e6b..077046d97898 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -13,6 +13,9 @@ #ifdef __APPLE__ #include + /* To support weak linking we need to declare this as a weak import even if + * it's not present in sys/random (e.g. macOS < 10.12). */ + extern int getentropy(void *buffer, size_t size) __attribute((weak_import)); #endif #ifdef __linux__ From ad294c6b2a2ff03abb387a8bb17831766ae62d1e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 3 Aug 2017 20:16:32 -0500 Subject: [PATCH 028/988] port 2.0.3 changelog (#3845) --- CHANGELOG.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2abdeb419dee..c1ef165d847b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -34,6 +34,15 @@ Changelog raw value. +.. _v2-0-3: + +2.0.3 - 2017-08-03 +~~~~~~~~~~~~~~~~~~ + +* Fixed an issue with weak linking symbols when compiling on macOS + versions older than 10.12. + + .. _v2-0-2: 2.0.2 - 2017-07-27 From dc35eaeae3526f7e47a6c4a3000663f30d64b8d0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 3 Aug 2017 20:16:52 -0500 Subject: [PATCH 029/988] (mostly) revert wheel builder config change (#3846) * Revert "Remve outdated comment and linewrap (#3838)" This reverts commit 990d7596ca5d8dfa1d9331cdcb072fabf9d10fca. * remove the outdated comment --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 9151e3ea9025..11ba278135d8 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -111,10 +111,7 @@ def build(version, label, imageName) { virtualenv .venv -p ${pythonPath[version]} source .venv/bin/activate pip install -U wheel # upgrade wheel to latest before we use it to build the wheel - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" - LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" - CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" - pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" otool -L `find .venv -name '_openssl*.so'` From bcbff3efc0e5973d84aaa1fe991b210d97ff2ea3 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 3 Aug 2017 22:41:51 -0400 Subject: [PATCH 030/988] fixed a typo (#3847) --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c1ef165d847b..7e6b9073ad12 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,7 @@ Changelog .. _v2-1: -2.1 - - `master`_ +2.1 - `master`_ ~~~~~~~~~~~~~~~~~ .. note:: This version is not yet released and is under active development. From c1f8e460330b7ce83d4ea5a9b753a35321f0cf9e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 4 Aug 2017 13:45:11 -0400 Subject: [PATCH 031/988] Fixes #3821 -- improve output during release.py (#3848) This should cause stdout/stderr for command we run to be displayed, and also print which commands we're running --- release.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/release.py b/release.py index 77391e80237b..07c5609b79cb 100644 --- a/release.py +++ b/release.py @@ -25,13 +25,8 @@ def run(*args, **kwargs): - kwargs.setdefault("stderr", subprocess.STDOUT) - try: - subprocess.check_output(list(args), **kwargs) - except subprocess.CalledProcessError as e: - # Reraise this with a different type so that str(e) is something with - # stdout in it. - raise Exception(e.cmd, e.returncode, e.output) + print("[running] {0}".format(list(args))) + subprocess.check_call(list(args), **kwargs) def wait_for_build_completed(session): From ca941bd00baa598cb83d91a4e88b4bbcec0fc265 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 10 Aug 2017 22:30:07 -0400 Subject: [PATCH 032/988] bump pytest version (#3860) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a003bc89c4cd..fbc7f22b45e9 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ setup_requirements.append("cffi>=1.7") test_requirements = [ - "pytest>=2.9.0,!=3.2.0", + "pytest>=3.2.1", "pretend", "iso8601", "pytz", From 6c02ee85bcd68e1e4fc6770421699fbd07c9b3e9 Mon Sep 17 00:00:00 2001 From: Vincent Pelletier Date: Sat, 12 Aug 2017 22:05:00 +0900 Subject: [PATCH 033/988] Add is_signature_valid method on CertificateRevocationList (#3849) --- docs/development/test-vectors.rst | 5 +++ docs/x509/reference.rst | 6 +++ .../hazmat/backends/openssl/x509.py | 16 ++++++++ src/cryptography/x509/base.py | 6 +++ tests/test_x509.py | 41 +++++++++++++++++++ .../x509/custom/invalid_signature.pem | 28 +++++++++++++ .../x509/custom/valid_signature.pem | 28 +++++++++++++ 7 files changed, 130 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/custom/invalid_signature.pem create mode 100644 vectors/cryptography_vectors/x509/custom/valid_signature.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index eb95a62e37f2..ec6a1d0c3206 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -369,6 +369,11 @@ Custom X.509 Certificate Revocation List Vectors * ``crl_ian_aia_aki.pem`` - Contains a CRL with ``IssuerAlternativeName``, ``AuthorityInformationAccess``, ``AuthorityKeyIdentifier`` and ``CRLNumber`` extensions. +* ``valid_signature.pem`` - Contains a CRL with the public key which was used + to generate it. +* ``invalid_signature.pem`` - Contains a CRL with the last signature byte + incremented by 1 to produce an invalid signature, and the public key which + was used to generate it. Hashes ~~~~~~ diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 8b9761190ffe..47f76254c5a1 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -563,6 +563,12 @@ X.509 CRL (Certificate Revocation List) Object over the network and used as part of a certificate verification process. + .. method:: is_signature_valid(public_key) + + .. versionadded:: 2.1 + + Returns True if the CRL signature is correct for given public key, + False otherwise. X.509 Certificate Builder ~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 5bf0438ec26d..9637fc0e45bf 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -17,6 +17,7 @@ _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_time ) from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa @utils.register_interface(x509.Certificate) @@ -338,6 +339,21 @@ def __len__(self): def extensions(self): return _CRL_EXTENSION_PARSER.parse(self._backend, self._x509_crl) + def is_signature_valid(self, public_key): + if not isinstance(public_key, (dsa.DSAPublicKey, rsa.RSAPublicKey, + ec.EllipticCurvePublicKey)): + raise TypeError('Expecting one of DSAPublicKey, RSAPublicKey,' + ' or EllipticCurvePublicKey.') + res = self._backend._lib.X509_CRL_verify( + self._x509_crl, public_key._evp_pkey + ) + + if res != 1: + self._backend._consume_errors() + return False + + return True + @utils.register_interface(x509.CertificateSigningRequest) class _CertificateSigningRequest(object): diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index ffa7191689af..2c96c5bc5dea 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -250,6 +250,12 @@ def __ne__(self, other): Checks not equal. """ + @abc.abstractmethod + def is_signature_valid(self, public_key): + """ + Verifies signature of revocation list against given public key. + """ + @six.add_metaclass(abc.ABCMeta) class CertificateSigningRequest(object): diff --git a/tests/test_x509.py b/tests/test_x509.py index 58d3e5460117..52854363dd83 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -336,6 +336,47 @@ def test_public_bytes_invalid_encoding(self, backend): with pytest.raises(TypeError): crl.public_bytes('NotAnEncoding') + def test_verify_bad(self, backend): + crl = _load_cert( + os.path.join("x509", "custom", "invalid_signature.pem"), + x509.load_pem_x509_crl, + backend + ) + crt = _load_cert( + os.path.join("x509", "custom", "invalid_signature.pem"), + x509.load_pem_x509_certificate, + backend + ) + + assert not crl.is_signature_valid(crt.public_key()) + + def test_verify_good(self, backend): + crl = _load_cert( + os.path.join("x509", "custom", "valid_signature.pem"), + x509.load_pem_x509_crl, + backend + ) + crt = _load_cert( + os.path.join("x509", "custom", "valid_signature.pem"), + x509.load_pem_x509_certificate, + backend + ) + + assert crl.is_signature_valid(crt.public_key()) + + def test_verify_argument_must_be_a_public_key(self, backend): + crl = _load_cert( + os.path.join("x509", "custom", "valid_signature.pem"), + x509.load_pem_x509_crl, + backend + ) + + with pytest.raises(TypeError): + crl.is_signature_valid("not a public key") + + with pytest.raises(TypeError): + crl.is_signature_valid(object) + @pytest.mark.requires_backend_interface(interface=X509Backend) class TestRevokedCertificate(object): diff --git a/vectors/cryptography_vectors/x509/custom/invalid_signature.pem b/vectors/cryptography_vectors/x509/custom/invalid_signature.pem new file mode 100644 index 000000000000..2fc483d95b5e --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/invalid_signature.pem @@ -0,0 +1,28 @@ +-----BEGIN X509 CRL----- +MIIBfTBnAgEBMA0GCSqGSIb3DQEBCwUAMCUxIzAhBgNVBAMMGmludmFsaWRfc2ln +bmF0dXJlIENSTCB0ZXN0Fw0xNzA4MDYwMTQ4MjVaFw0xNzA5MDUwMTQ4MjVaoA4w +DDAKBgNVHRQEAwIBAzANBgkqhkiG9w0BAQsFAAOCAQEAFgGnFwwqviPvA0bfmnvI +c6oGIlq9Bmx/vSH6gwLCuGWn2BrKCWCIJNEtK4hrTfQRASb/uywHvhnByAE2lQlY +9FiefdvXgF5zEah/gV/2A0azvqfvOlPBLzreeoW3Q1fizmip3XN1fXiq8cXBpEYt +SRTJPzgbHvIu50EB2J0hs+rGo1hPTDtZn/r63hcQzUhIWQVmwP+NOzhpUcdnQj3/ +pn6BAJcxyYO2xDoUIncq586k8XVqshEl9xVwJMKhDDk84m/WQZg8i8szgI/muFsm +3vilMgIISrTMYeFIZWAy8rYfKLDMlmAtPRXYqyqOdTsLqz2X3RDMRHMXf1Vf8V31 +vA== +-----END X509 CRL----- +-----BEGIN CERTIFICATE----- +MIICxjCCAa4CCQCETsDmKRzISDANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpp +bnZhbGlkX3NpZ25hdHVyZSBDUkwgdGVzdDAeFw0xNzA4MDYwMTM5MzRaFw0xNzA5 +MDUwMTM5MzRaMCUxIzAhBgNVBAMMGmludmFsaWRfc2lnbmF0dXJlIENSTCB0ZXN0 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwUMEv2zCY/YMUrmuTqF0 +mWvRTB5aU9YQFOT882jTHeFvb4ZKIQDUBz+B6UObGPcdwJv/S1srhcLa4dWEEkVh +GrFRXzPxZOXS/NbMgqnlxtkP3SjiINmYVSUY4+zXpneM32QXbEoQQoYkHHLiHg4l +L2hQHGYE47cRFzJ9IqIIFGx5Sh+fAWm40CzCDTaVWd7C4IsamOdYhvflpXJZcKtQ +ni1vQl5IEunsGP7nHdOcOBSi6LkNj2jGhflPwuOlWEXeqbHxAfd7We6fMPXDjZVR +TRTa+MHpfA1yCZgpr9NOmu8h115zWx+/pDjsNf9PqNSGgfRTsayT8AYFi5SzfORm +xQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQA0xIWlIp0LmyqAEASHppuDFbKLVlRb +H1oSQRbWiZpRpBHIdPEtEqp8+2KOQXyZEWzkGwuo46++Zt/aepGOBEbSAljvyJV9 +P4JqH/jJeHkZSC+/CYcegMh14xr6X3OYe+go+huwPSGULYbDguhgzAzpU+0LHWsF +Q/JCKZOjDutLJekzbvNeUgxkNFtsL1OhWYvSzngAph0OJ0QsDTyUhHv2iigHHv/I +Y83lNYi6AriqE2L42leHBcvG6Gnc8Ipx+su6r2a/KnHt8XeWXf/OK/HbqKiCG1AV +Xzp8dgfQjXvDdTLl9yL+jjeOcMdOemY3x2EzQPX1God0rl1pvZFIRYih +-----END CERTIFICATE----- diff --git a/vectors/cryptography_vectors/x509/custom/valid_signature.pem b/vectors/cryptography_vectors/x509/custom/valid_signature.pem new file mode 100644 index 000000000000..9c2180985001 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/valid_signature.pem @@ -0,0 +1,28 @@ +-----BEGIN X509 CRL----- +MIIBfTBnAgEBMA0GCSqGSIb3DQEBCwUAMCUxIzAhBgNVBAMMGmludmFsaWRfc2ln +bmF0dXJlIENSTCB0ZXN0Fw0xNzA4MDYwMTQ4MjVaFw0xNzA5MDUwMTQ4MjVaoA4w +DDAKBgNVHRQEAwIBAzANBgkqhkiG9w0BAQsFAAOCAQEAFgGnFwwqviPvA0bfmnvI +c6oGIlq9Bmx/vSH6gwLCuGWn2BrKCWCIJNEtK4hrTfQRASb/uywHvhnByAE2lQlY +9FiefdvXgF5zEah/gV/2A0azvqfvOlPBLzreeoW3Q1fizmip3XN1fXiq8cXBpEYt +SRTJPzgbHvIu50EB2J0hs+rGo1hPTDtZn/r63hcQzUhIWQVmwP+NOzhpUcdnQj3/ +pn6BAJcxyYO2xDoUIncq586k8XVqshEl9xVwJMKhDDk84m/WQZg8i8szgI/muFsm +3vilMgIISrTMYeFIZWAy8rYfKLDMlmAtPRXYqyqOdTsLqz2X3RDMRHMXf1Vf8V31 +ug== +-----END X509 CRL----- +-----BEGIN CERTIFICATE----- +MIICxjCCAa4CCQCETsDmKRzISDANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpp +bnZhbGlkX3NpZ25hdHVyZSBDUkwgdGVzdDAeFw0xNzA4MDYwMTM5MzRaFw0xNzA5 +MDUwMTM5MzRaMCUxIzAhBgNVBAMMGmludmFsaWRfc2lnbmF0dXJlIENSTCB0ZXN0 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwUMEv2zCY/YMUrmuTqF0 +mWvRTB5aU9YQFOT882jTHeFvb4ZKIQDUBz+B6UObGPcdwJv/S1srhcLa4dWEEkVh +GrFRXzPxZOXS/NbMgqnlxtkP3SjiINmYVSUY4+zXpneM32QXbEoQQoYkHHLiHg4l +L2hQHGYE47cRFzJ9IqIIFGx5Sh+fAWm40CzCDTaVWd7C4IsamOdYhvflpXJZcKtQ +ni1vQl5IEunsGP7nHdOcOBSi6LkNj2jGhflPwuOlWEXeqbHxAfd7We6fMPXDjZVR +TRTa+MHpfA1yCZgpr9NOmu8h115zWx+/pDjsNf9PqNSGgfRTsayT8AYFi5SzfORm +xQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQA0xIWlIp0LmyqAEASHppuDFbKLVlRb +H1oSQRbWiZpRpBHIdPEtEqp8+2KOQXyZEWzkGwuo46++Zt/aepGOBEbSAljvyJV9 +P4JqH/jJeHkZSC+/CYcegMh14xr6X3OYe+go+huwPSGULYbDguhgzAzpU+0LHWsF +Q/JCKZOjDutLJekzbvNeUgxkNFtsL1OhWYvSzngAph0OJ0QsDTyUhHv2iigHHv/I +Y83lNYi6AriqE2L42leHBcvG6Gnc8Ipx+su6r2a/KnHt8XeWXf/OK/HbqKiCG1AV +Xzp8dgfQjXvDdTLl9yL+jjeOcMdOemY3x2EzQPX1God0rl1pvZFIRYih +-----END CERTIFICATE----- From f944c40c86c8af9917a596bfb7704a6f0af36acb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 12 Aug 2017 08:52:55 -0500 Subject: [PATCH 034/988] add changelog and a warning for is_signature_valid on crl (#3861) * add changelog and a warning * document this properly --- CHANGELOG.rst | 2 ++ docs/x509/reference.rst | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7e6b9073ad12..db101a825891 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -32,6 +32,8 @@ Changelog :attr:`~cryptography.x509.RFC822Name.value` attribute was deprecated, users should use :attr:`~cryptography.x509.RFC822Name.bytes_value` to access the raw value. +* Added :meth:`~cryptography.x509.CertificateRevocationList.is_signature_valid` + to :class:`~cryptography.x509.CertificateRevocationList`. .. _v2-0-3: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 47f76254c5a1..5e1c95c49c56 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -567,6 +567,12 @@ X.509 CRL (Certificate Revocation List) Object .. versionadded:: 2.1 + .. warning:: + + Checking the validity of the signature on the CRL is insufficient + to know if the CRL should be trusted. More details are available + in :rfc:`5280`. + Returns True if the CRL signature is correct for given public key, False otherwise. From 7c8ed9e306c4e83d7bba80e782794d4055851512 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 14 Aug 2017 23:25:01 -0400 Subject: [PATCH 035/988] Get our travis from pypy (#3865) * Get our travis from pypy * doh --- .travis.yml | 9 ++++++--- .travis/install.sh | 12 ------------ tox.ini | 8 ++++++++ 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 79631b8c75f7..4bf00538a3fb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,9 +29,12 @@ matrix: env: TOXENV=py35 - python: 3.6 env: TOXENV=py36 - - env: TOXENV=pypy PYPY_VERSION=pypy2-5.3 - - env: TOXENV=pypy PYPY_VERSION=pypy2.7-5.8.0 - - env: TOXENV=pypy-nocoverage PYPY_VERSION=pypy3.5-5.8.0 + - python: pypy-5.3 + env: TOXENV=pypy + - python: pypy2.7-5.8.0 + env: TOXENV=pypy + - python: pypy3.5-5.8.0 + env: TOXENV=pypy3-nocoverage - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0f - python: 3.5 diff --git a/.travis/install.sh b/.travis/install.sh index ecdecea43ac7..e65030f117fa 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -54,18 +54,6 @@ if [[ "$(uname -s)" == 'Darwin' ]]; then pyenv rehash python -m pip install --user virtualenv else - # temporary pyenv installation to get latest pypy until the travis - # container infra is upgraded - if [[ "${TOXENV}" = pypy* ]]; then - rm -rf ~/.pyenv - git clone https://github.com/pyenv/pyenv ~/.pyenv - PYENV_ROOT="$HOME/.pyenv" - PATH="$PYENV_ROOT/bin:$PATH" - eval "$(pyenv init -)" - pyenv install "$PYPY_VERSION" - pyenv global "$PYPY_VERSION" - fi - # download, compile, and install if it's not already present via travis # cache if [ -n "${OPENSSL}" ]; then diff --git a/tox.ini b/tox.ini index 89bcaae3f597..777e9b89f529 100644 --- a/tox.ini +++ b/tox.ini @@ -26,6 +26,14 @@ commands = pip list pytest --capture=no --strict {posargs} +# This target disables coverage on pypy because of performance problems with +# coverage.py on pypy. +[testenv:pypy3-nocoverage] +basepython = pypy3 +commands = + pip list + pytest --capture=no --strict {posargs} + [testenv:docs] extras = docstest From 64dc16b9f91ac383533582a9c12f737d8f2a10a6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 15 Aug 2017 20:17:01 -0500 Subject: [PATCH 036/988] add test vector with invalid basicconstraints (#3866) * add test vector with invalid basicconstraints * sigh --- docs/development/test-vectors.rst | 3 ++ docs/spelling_wordlist.txt | 1 + .../x509/wosign-bc-invalid.pem | 34 +++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/wosign-bc-invalid.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index ec6a1d0c3206..7918b1520ae1 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -163,6 +163,9 @@ X.509 * ``bigoid.pem`` - A certificate with a rather long OID in the Certificate Policies extension. We need to make sure we can parse long OIDs. +* ``wosign-bc-invalid.pem`` - A certificate issued by WoSign that contains + a basic constraints extension with CA set to false and a path length of zero + in violation of :rfc:`5280`. Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index f72e0b0c981b..5eb896e35efe 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -97,4 +97,5 @@ verifier Verifier Verisign wildcard +WoSign Xcode diff --git a/vectors/cryptography_vectors/x509/wosign-bc-invalid.pem b/vectors/cryptography_vectors/x509/wosign-bc-invalid.pem new file mode 100644 index 000000000000..9c1725914f62 --- /dev/null +++ b/vectors/cryptography_vectors/x509/wosign-bc-invalid.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF3jCCBMagAwIBAgIHHZ1Yp4r/AjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJDTjEqMCgGA1UEChMhV29TaWduIGVDb21tZXJjZSBTZXJ2aWNlcyBMaW1pdGVk +MScwJQYDVQQDEx5Xb1NpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgQ0EwHhcNMTMw +NDA5MDYzOTE5WhcNMTYwNDExMTYwMTA4WjCBtzELMAkGA1UEBhMCQ04xEjAQBgNV +BAgMCeW5v+S4nOecgTESMBAGA1UEBwwJ5bm/5bee5biCMS0wKwYDVQQKDCTlub/l +t57mtbfnhLbmlbDnoIHnp5HmioDmnInpmZDlhazlj7gxLTArBgNVBAMMJOW5v+W3 +nua1t+eEtuaVsOeggeenkeaKgOaciemZkOWFrOWPuDEiMCAGCSqGSIb3DQEJARYT +amFuZ29nb2NoYW5AbXNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAKHXZgyC1zV647ezNhAVENKEmE5e+r2TDZ+f49ki0KHmL3d1oBJeSkHXt6f+ +wXh45IuErTxkVGqt4chy+ayM00P7I6VqxF3YcsGrV2X5dQz4Z/vxQGzSnM8EhkNU +t0IDEo9eO9bZ9vdMYlN26VSJpsll7a0MQUYTG9+k3G0FbhrA6kVK4SHOpZaoPfjD +aznekJPS2WTOnk0OkvU8LlfEcPCCYW9iyX7yymAGntcFN6siznhguuOYyLXiOiSZ +TE2rVmUcBBgh5peaCedOt7UrprkvDF0V4JFy7pdo6tPZ1L8xM5h0rWdWcMmxsg0C +3YWuK7jLDm6Xufz7LfUC9blX1E8CAwEAAaOCAkEwggI9MA8GA1UdEwEB/wQFMAMC +AQAwDgYDVR0PAQH/BAQDAgeAMB8GA1UdJQQYMBYGCCsGAQUFBwMDBgorBgEEAYI3 +AgEWMB0GA1UdDgQWBBQ7j0GVMxtKMuG9gcJJ3HNg31BnZDAfBgNVHSMEGDAWgBT1 +AqpL0+AajndQ1hq769+5g3CwTjCB6AYDVR0gBIHgMIHdMIHaBg0rBgEEAYKbUQED +AwECMIHIMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3Lndvc2lnbi5jb20vcG9saWN5 +LzCBmgYIKwYBBQUHAgIwgY0wKBYhV29TaWduIGVDb21tZXJjZSBTZXJ2aWNlcyBM +aW1pdGVkMAMCAQEaYUxpbWl0ZWQgTGlhYmlsaXR5LCBzZWUgdGhlIFdvU2lnbiBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXQgaHR0cDovL3d3dy53b3Np +Z24uY29tL3BvbGljeS8wMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybHMud29z +aWduLmNvbS9jb2RlLTMuY3JsMHcGCCsGAQUFBwEBBGswaTAxBggrBgEFBQcwAYYl +aHR0cDovL29jc3Aud29zaWduLmNvbS9jbGFzczMvY29kZS9jYTA0BggrBgEFBQcw +AoYoaHR0cDovL2FpYS53b3NpZ24uY29tL2NsYXNzMy5jb2RlLmNhLmNlcjAhBgNV +HRIEGjAYhhZodHRwOi8vd3d3Lndvc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4IB +AQC2PSLgcv8nhlkhuRwLxfH5GptSq3FrThkB6NGoFbXMKCH/WTMnp2lbrTG+Y0yH +sLgQkr6XVJyCdj4/ELAImFLX1oP5DqS0w7woIDLsP4AwrdXB9OQ/uUNkz14xAhQm +MH4EzbmAMgx68hmXckGuN/VWEBFYv5dhbvRT+RJiEeIx/FuXZ0qnIks8Mz88+Chx +/uU+tkuc8ikpy4UmTMD5q2eUtPv+TerKbSFyvjd92HCfI7MxpiPeGEjiUlKywifv +lku3xjMj1siCbiD8Ebq2fX4YP0a7rtCzWwPQcvn41HUBI1DxOFn9v1v0WjolkmYG +zGHGrEVvh6XDtJaP7bya8cFY +-----END CERTIFICATE----- From c4a23fb077d7a172f979326be99293d4eb895de8 Mon Sep 17 00:00:00 2001 From: David Sanders Date: Sun, 20 Aug 2017 05:17:01 -0600 Subject: [PATCH 037/988] Fix mistake in `RSAPublicKey.verify` documentation (#3872) --- docs/hazmat/primitives/asymmetric/rsa.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index 97f68c3a4c7f..a49b4d3402db 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -702,7 +702,7 @@ Key interfaces :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` or :class:`~cryptography.hazmat.primitives.asymmetric.utils.Prehashed` - if the ``data`` you want to sign has already been hashed. + if the ``data`` you want to verify has already been hashed. :raises cryptography.exceptions.InvalidSignature: If the signature does not validate. From c3de566e053b06c6055a7b3032fae56a3e64b3b7 Mon Sep 17 00:00:00 2001 From: David Sanders Date: Sun, 20 Aug 2017 05:17:16 -0600 Subject: [PATCH 038/988] Fix `load_rsa_public_numbers` documentation (#3871) --- docs/hazmat/backends/interfaces.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/backends/interfaces.rst b/docs/hazmat/backends/interfaces.rst index 93eedbe67bdb..2c2d70ec8140 100644 --- a/docs/hazmat/backends/interfaces.rst +++ b/docs/hazmat/backends/interfaces.rst @@ -266,7 +266,7 @@ A specific ``backend`` may provide one or more of these interfaces. .. method:: load_rsa_public_numbers(numbers) :param numbers: An instance of - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateNumbers`. + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicNumbers`. :returns: An instance of :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`. From 22bedaafa70283e3efd735b3fba667172a25310f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 20 Aug 2017 11:50:57 -0400 Subject: [PATCH 039/988] Remove branches for 1.0.2 betas. (#3870) There's no sense in which we actually support them --- src/_cffi_src/openssl/cryptography.py | 6 ++---- src/_cffi_src/openssl/x509.py | 4 ++-- src/_cffi_src/openssl/x509_vfy.py | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 1cacc8f51e1a..9095e3abb195 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -25,8 +25,8 @@ #include #endif -#define CRYPTOGRAPHY_OPENSSL_102BETA2_OR_GREATER \ - (OPENSSL_VERSION_NUMBER >= 0x10002002 && !CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_102_OR_GREATER \ + (OPENSSL_VERSION_NUMBER >= 0x10002000 && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_102L_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x100020cf && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110_OR_GREATER \ @@ -36,8 +36,6 @@ #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 \ (OPENSSL_VERSION_NUMBER < 0x10002000 || CRYPTOGRAPHY_IS_LIBRESSL) -#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102BETA3 \ - (OPENSSL_VERSION_NUMBER < 0x10002003 || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I \ (OPENSSL_VERSION_NUMBER < 0x1000209f || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 \ diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 2ae574a370cd..e7619dd6038f 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -356,9 +356,9 @@ #endif -/* Added in 1.0.2beta3 but we need it in all versions now due to the great +/* Added in 1.0.2 but we need it in all versions now due to the great opaquing. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102BETA3 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 /* from x509/x_x509.c */ int i2d_re_X509_tbs(X509 *x, unsigned char **pp) { diff --git a/src/_cffi_src/openssl/x509_vfy.py b/src/_cffi_src/openssl/x509_vfy.py index 7a5e3dd674d3..58069eb1f6b1 100644 --- a/src/_cffi_src/openssl/x509_vfy.py +++ b/src/_cffi_src/openssl/x509_vfy.py @@ -214,8 +214,8 @@ """ CUSTOMIZATIONS = """ -/* OpenSSL 1.0.2beta2+ verification parameters and error codes */ -#if CRYPTOGRAPHY_OPENSSL_102BETA2_OR_GREATER +/* OpenSSL 1.0.2+ verification parameters and error codes */ +#if CRYPTOGRAPHY_OPENSSL_102_OR_GREATER static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES = 1; static const long Cryptography_HAS_102_VERIFICATION_PARAMS = 1; #else From e2c1c0fb8cb91b18597496b00df6a23b77f4affa Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 22 Aug 2017 09:37:32 -0700 Subject: [PATCH 040/988] add blake2b/blake2s support for hmac (#3873) * add blake2b/blake2s support for hmac This was a bug, but it turns out the noise protocol suggests using the HMAC construction with BLAKE2 (rather than BLAKE2's own keyed functionality) for a few reasons, so we should support it. * actually test the thing --- CHANGELOG.rst | 3 ++ .../hazmat/backends/openssl/hmac.py | 7 ++--- tests/hazmat/primitives/test_hmac_vectors.py | 30 ++++++++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index db101a825891..e346de55966f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -34,6 +34,9 @@ Changelog raw value. * Added :meth:`~cryptography.x509.CertificateRevocationList.is_signature_valid` to :class:`~cryptography.x509.CertificateRevocationList`. +* Support :class:`~cryptography.hazmat.primitives.hashes.BLAKE2b` and + :class:`~cryptography.hazmat.primitives.hashes.BLAKE2s` with + :class:`~cryptography.hazmat.primitives.hmac.HMAC`. .. _v2-0-3: diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index ea834204835a..3577f477cb19 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -25,12 +25,11 @@ def __init__(self, backend, key, algorithm, ctx=None): ctx = self._backend._ffi.gc( ctx, self._backend._lib.Cryptography_HMAC_CTX_free ) - evp_md = self._backend._lib.EVP_get_digestbyname( - algorithm.name.encode('ascii')) + name = self._backend._build_openssl_digest_name(algorithm) + evp_md = self._backend._lib.EVP_get_digestbyname(name) if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( - "{0} is not a supported hash on this backend.".format( - algorithm.name), + "{0} is not a supported hash on this backend".format(name), _Reasons.UNSUPPORTED_HASH ) res = self._backend._lib.HMAC_Init_ex( diff --git a/tests/hazmat/primitives/test_hmac_vectors.py b/tests/hazmat/primitives/test_hmac_vectors.py index 70c929ad4cdf..6ff71fe38508 100644 --- a/tests/hazmat/primitives/test_hmac_vectors.py +++ b/tests/hazmat/primitives/test_hmac_vectors.py @@ -4,10 +4,12 @@ from __future__ import absolute_import, division, print_function +import binascii + import pytest from cryptography.hazmat.backends.interfaces import HMACBackend -from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives import hashes, hmac from .utils import generate_hmac_test from ...utils import load_hash_vectors @@ -107,3 +109,29 @@ class TestHMACSHA512(object): ], hashes.SHA512(), ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hmac_supported(hashes.BLAKE2b( + digest_size=64 + )), + skip_message="Does not support BLAKE2", +) +@pytest.mark.requires_backend_interface(interface=HMACBackend) +class TestHMACBLAKE2(object): + def test_blake2b(self, backend): + h = hmac.HMAC(b"0" * 64, hashes.BLAKE2b(digest_size=64), backend) + h.update(b"test") + digest = h.finalize() + assert digest == binascii.unhexlify( + b"b5319122f8a24ba134a0c9851922448104e25be5d1b91265c0c68b22722f0f29" + b"87dba4aeaa69e6bed7edc44f48d6b1be493a3ce583f9c737c53d6bacc09e2f32" + ) + + def test_blake2s(self, backend): + h = hmac.HMAC(b"0" * 32, hashes.BLAKE2s(digest_size=32), backend) + h.update(b"test") + digest = h.finalize() + assert digest == binascii.unhexlify( + b"51477cc5bdf1faf952cf97bb934ee936de1f4d5d7448a84eeb6f98d23b392166" + ) From 13e9a6f9e98635d694310e87af7b82d180e486e7 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 23 Aug 2017 16:46:55 -0400 Subject: [PATCH 041/988] Document that we care about our infrastructure's security as well (#3874) --- docs/security.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/security.rst b/docs/security.rst index 1673b02c92b2..646b3e22529d 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -5,6 +5,14 @@ We take the security of ``cryptography`` seriously. The following are a set of policies we have adopted to ensure that security issues are addressed in a timely fashion. +Infrastructure +-------------- + +In addition to ``cryptography``'s code, we're also concerned with the security +of the infrastructure we run (primarily ``cryptography.io`` and +``ci.cryptography.io``). If you discover a security vulnerability in our +infrastructure, we ask you to report it using the same procedure. + What is a security issue? ------------------------- From 4c41ab087d4fa741ced2a8aba6fd38b20137f42b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 23 Aug 2017 20:33:01 -0400 Subject: [PATCH 042/988] Switch to using the other style of environment markers (#3796) * Switch to using the other style of environment markers * We don't do py3.3 any more! * changelog --- CHANGELOG.rst | 1 + setup.py | 19 ++++++++----------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e346de55966f..48dd0bf49d95 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,7 @@ Changelog * **BACKWARDS INCOMPATIBLE:** ``Whirlpool``, ``RIPEMD160``, and ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. +* Installing ``cryptography`` now requires ``pip`` 6 or newer. * Deprecated passing unicode to the :class:`~cryptography.x509.DNSName` constructor. Instead, users should pass DNS names as ``bytes``, with ``idna`` encoding if necessary. In addition, the diff --git a/setup.py b/setup.py index fbc7f22b45e9..692313fb02a9 100644 --- a/setup.py +++ b/setup.py @@ -33,17 +33,8 @@ VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__']) -requirements = [ - "idna>=2.1", - "asn1crypto>=0.21.0", - "six>=1.4.1", -] setup_requirements = [] -if sys.version_info < (3,): - requirements.append("enum34") - requirements.append("ipaddress") - if platform.python_implementation() == "PyPy": if sys.pypy_version_info < (5, 3): raise RuntimeError( @@ -51,7 +42,6 @@ "upgrade PyPy to use this library." ) else: - requirements.append("cffi>=1.7") setup_requirements.append("cffi>=1.7") test_requirements = [ @@ -285,9 +275,16 @@ def run_tests(self): packages=find_packages(where="src", exclude=["_cffi_src", "_cffi_src.*"]), include_package_data=True, - install_requires=requirements, + install_requires=[ + "idna >= 2.1", + "asn1crypto >= 0.21.0", + "six >= 1.4.1", + ], tests_require=test_requirements, extras_require={ + ":python_version < '3'": ["enum34", "ipaddress"], + ":python_implementation != 'PyPy'": ["cffi >= 1.7"], + "test": test_requirements, "docstest": [ "doc8", From 10041cd9945ed33fd96788f5c620a58993d3926a Mon Sep 17 00:00:00 2001 From: Kelby Ludwig Date: Mon, 28 Aug 2017 20:46:35 -0500 Subject: [PATCH 043/988] added binding support for rfc 5705 (#3878) * added binding support for rfc 5705 * WIP: testing some cffi updates * added openssl version check * updated cffi defs to align with pep8 * removed superfluous version checks * remove more unecessary boilerplate --- src/_cffi_src/openssl/ssl.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 8bda4e010b62..7f9eff05d9d5 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -420,6 +420,8 @@ size_t); size_t SSL_get_client_random(const SSL *, unsigned char *, size_t); size_t SSL_get_server_random(const SSL *, unsigned char *, size_t); +int SSL_export_keying_material(SSL *, unsigned char *, size_t, const char *, + size_t, const unsigned char *, size_t, int); long SSL_CTX_sess_number(SSL_CTX *); long SSL_CTX_sess_connect(SSL_CTX *); From 8396d43811f28b079a9d391aaf6701a4455abbfd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 6 Sep 2017 23:23:15 +0800 Subject: [PATCH 044/988] send a few more variables to distinguish our jobs in codecov (#3892) * send a few more variables to distinguish our jobs in codecov * put the labels in the right places --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index cc53da332e99..b79a407ba2e2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -248,7 +248,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { call .codecov/Scripts/activate pip install coverage==4.3.4 pip install codecov - codecov -e JOB_BASE_NAME,LABEL + codecov -e JOB_BASE_NAME,LABEL,TOXENV """ } else if (label.contains("sierra") || label.contains("yosemite")) { ansiColor { @@ -265,7 +265,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .venv source .venv/bin/activate pip install coverage==4.3.4 - bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL + bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV """ } } else { @@ -284,7 +284,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .venv source .venv/bin/activate pip install coverage==4.3.4 - bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL + bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME """ } if (artifacts) { From 012df127b2990a1f73d0d94f5b164663af162446 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 7 Sep 2017 06:11:22 +0800 Subject: [PATCH 045/988] add OCSP binding for obtaining information from CertID structure (#3888) * add OCSP binding for obtaining information from CertID structure * empty commit --- src/_cffi_src/openssl/ocsp.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index ea3e5ad16409..1701f41c61f1 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -54,6 +54,8 @@ void OCSP_REQUEST_free(OCSP_REQUEST *); int OCSP_request_add1_nonce(OCSP_REQUEST *, unsigned char *, int); int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *, int, void *, int, unsigned long); +int OCSP_id_get0_info(ASN1_OCTET_STRING **, ASN1_OBJECT **, + ASN1_OCTET_STRING **, ASN1_INTEGER **, OCSP_CERTID *); OCSP_REQUEST *d2i_OCSP_REQUEST_bio(BIO *, OCSP_REQUEST **); OCSP_RESPONSE *d2i_OCSP_RESPONSE_bio(BIO *, OCSP_RESPONSE **); int i2d_OCSP_REQUEST_bio(BIO *, OCSP_REQUEST *); From ec0e1cc2918e2eae9c67d2ebc383d7e5a23683e1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 7 Sep 2017 09:48:10 +0800 Subject: [PATCH 046/988] move x509 tests into a module (#3889) * move x509 tests into a module This is just to make grouping things like test_ocsp, etc a bit simpler in the future * fix path * pep8 --- tests/hazmat/backends/test_openssl.py | 2 +- tests/x509/__init__.py | 0 tests/{ => x509}/test_x509.py | 10 +++++----- tests/{ => x509}/test_x509_crlbuilder.py | 8 ++++---- tests/{ => x509}/test_x509_ext.py | 4 ++-- tests/{ => x509}/test_x509_revokedcertbuilder.py | 0 6 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 tests/x509/__init__.py rename tests/{ => x509}/test_x509.py (99%) rename tests/{ => x509}/test_x509_crlbuilder.py (98%) rename tests/{ => x509}/test_x509_ext.py (99%) rename tests/{ => x509}/test_x509_revokedcertbuilder.py (100%) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 3a73a3704d79..3a847cd2b61e 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -31,10 +31,10 @@ from ...doubles import ( DummyAsymmetricPadding, DummyCipherAlgorithm, DummyHashAlgorithm, DummyMode ) -from ...test_x509 import _load_cert from ...utils import ( load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm ) +from ...x509.test_x509 import _load_cert def skip_if_libre_ssl(openssl_version): diff --git a/tests/x509/__init__.py b/tests/x509/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/test_x509.py b/tests/x509/test_x509.py similarity index 99% rename from tests/test_x509.py rename to tests/x509/test_x509.py index 52854363dd83..533862ab8c2e 100644 --- a/tests/test_x509.py +++ b/tests/x509/test_x509.py @@ -33,11 +33,11 @@ NameOID, SignatureAlgorithmOID ) -from .hazmat.primitives.fixtures_dsa import DSA_KEY_2048 -from .hazmat.primitives.fixtures_ec import EC_KEY_SECP256R1 -from .hazmat.primitives.fixtures_rsa import RSA_KEY_2048, RSA_KEY_512 -from .hazmat.primitives.test_ec import _skip_curve_unsupported -from .utils import load_vectors_from_file +from ..hazmat.primitives.fixtures_dsa import DSA_KEY_2048 +from ..hazmat.primitives.fixtures_ec import EC_KEY_SECP256R1 +from ..hazmat.primitives.fixtures_rsa import RSA_KEY_2048, RSA_KEY_512 +from ..hazmat.primitives.test_ec import _skip_curve_unsupported +from ..utils import load_vectors_from_file @utils.register_interface(x509.ExtensionType) diff --git a/tests/test_x509_crlbuilder.py b/tests/x509/test_x509_crlbuilder.py similarity index 98% rename from tests/test_x509_crlbuilder.py rename to tests/x509/test_x509_crlbuilder.py index b3c789f6902c..b90805ff5e1b 100644 --- a/tests/test_x509_crlbuilder.py +++ b/tests/x509/test_x509_crlbuilder.py @@ -18,10 +18,10 @@ from cryptography.hazmat.primitives.asymmetric import ec from cryptography.x509.oid import AuthorityInformationAccessOID, NameOID -from .hazmat.primitives.fixtures_dsa import DSA_KEY_2048 -from .hazmat.primitives.fixtures_ec import EC_KEY_SECP256R1 -from .hazmat.primitives.fixtures_rsa import RSA_KEY_2048, RSA_KEY_512 -from .hazmat.primitives.test_ec import _skip_curve_unsupported +from ..hazmat.primitives.fixtures_dsa import DSA_KEY_2048 +from ..hazmat.primitives.fixtures_ec import EC_KEY_SECP256R1 +from ..hazmat.primitives.fixtures_rsa import RSA_KEY_2048, RSA_KEY_512 +from ..hazmat.primitives.test_ec import _skip_curve_unsupported class TestCertificateRevocationListBuilder(object): diff --git a/tests/test_x509_ext.py b/tests/x509/test_x509_ext.py similarity index 99% rename from tests/test_x509_ext.py rename to tests/x509/test_x509_ext.py index ee94faafabc0..fc8651c8c304 100644 --- a/tests/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -25,9 +25,9 @@ NameOID, ObjectIdentifier ) -from .hazmat.primitives.fixtures_rsa import RSA_KEY_2048 -from .hazmat.primitives.test_ec import _skip_curve_unsupported from .test_x509 import _load_cert +from ..hazmat.primitives.fixtures_rsa import RSA_KEY_2048 +from ..hazmat.primitives.test_ec import _skip_curve_unsupported def _make_certbuilder(private_key): diff --git a/tests/test_x509_revokedcertbuilder.py b/tests/x509/test_x509_revokedcertbuilder.py similarity index 100% rename from tests/test_x509_revokedcertbuilder.py rename to tests/x509/test_x509_revokedcertbuilder.py From 32f88bf63452314acdc16bcd8b612a4a7fe056c6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 7 Sep 2017 19:05:52 +0800 Subject: [PATCH 047/988] add set0_rsa_oaep_label binding (#3894) --- src/_cffi_src/openssl/rsa.py | 10 ++++++++++ .../hazmat/bindings/openssl/_conditional.py | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/src/_cffi_src/openssl/rsa.py b/src/_cffi_src/openssl/rsa.py index eddde84c2402..459d5cb92650 100644 --- a/src/_cffi_src/openssl/rsa.py +++ b/src/_cffi_src/openssl/rsa.py @@ -21,6 +21,7 @@ static const int Cryptography_HAS_PSS_PADDING; static const int Cryptography_HAS_RSA_OAEP_MD; +static const int Cryptography_HAS_RSA_OAEP_LABEL; """ FUNCTIONS = """ @@ -62,6 +63,7 @@ int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *, int); int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *, int); int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *, EVP_MD *); +int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *, unsigned char *, int); int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *, EVP_MD *); """ @@ -76,6 +78,14 @@ int (*EVP_PKEY_CTX_set_rsa_oaep_md)(EVP_PKEY_CTX *, EVP_MD *) = NULL; #endif +#if defined(EVP_PKEY_CTX_set0_rsa_oaep_label) +static const long Cryptography_HAS_RSA_OAEP_LABEL = 1; +#else +static const long Cryptography_HAS_RSA_OAEP_LABEL = 0; +int (*EVP_PKEY_CTX_set0_rsa_oaep_label)(EVP_PKEY_CTX *, unsigned char *, + int) = NULL; +#endif + /* These functions were added in OpenSSL 1.1.0-pre5 (beta2) */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE5 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 7f61ed428677..8eb67760989e 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -75,6 +75,12 @@ def cryptography_has_rsa_oaep_md(): ] +def cryptography_has_rsa_oaep_label(): + return [ + "EVP_PKEY_CTX_set0_rsa_oaep_label", + ] + + def cryptography_has_ssl3_method(): return [ "SSLv3_method", @@ -251,6 +257,7 @@ def cryptography_has_evp_pkey_get_set_tls_encodedpoint(): cryptography_has_rsa_r_pkcs_decoding_error ), "Cryptography_HAS_RSA_OAEP_MD": cryptography_has_rsa_oaep_md, + "Cryptography_HAS_RSA_OAEP_LABEL": cryptography_has_rsa_oaep_label, "Cryptography_HAS_SSL3_METHOD": cryptography_has_ssl3_method, "Cryptography_HAS_ALPN": cryptography_has_alpn, "Cryptography_HAS_COMPRESSION": cryptography_has_compression, From 9a8e29eda723d0406fbd727f01d83473ec6246fe Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 7 Sep 2017 19:11:47 +0800 Subject: [PATCH 048/988] add initial OCSP request test vector (#3890) --- docs/development/test-vectors.rst | 5 +++++ .../cryptography_vectors/x509/ocsp/req-sha1.der | Bin 0 -> 88 bytes 2 files changed, 5 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/req-sha1.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 7918b1520ae1..1a1c5d728130 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -378,6 +378,11 @@ Custom X.509 Certificate Revocation List Vectors incremented by 1 to produce an invalid signature, and the public key which was used to generate it. +Custom X.509 OCSP Test Vectors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* ``x509/ocsp/req-sha1.der`` - An OCSP request containing a single request and + using SHA1 as the hash algorithm. + Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ocsp/req-sha1.der b/vectors/cryptography_vectors/x509/ocsp/req-sha1.der new file mode 100644 index 0000000000000000000000000000000000000000..3327ae83d06cfa442dfbf03658d3b956749a1534 GIT binary patch literal 88 zcmV-e0H^;jRxngBQZP_3PA~}u1uG5%0vZJX1Qa;RMvMnUjr4(*$8Bv)a8aIMr@aIe ud3C#lI?F8HdI`QU8$-MtDos;Z0u=z5+2z2r!*f+F_k3Ls9<>sVNk#d&z#p3c literal 0 HcmV?d00001 From 2b01c55736ce9a03f3d77284ee182accaeaba282 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 7 Sep 2017 19:14:25 +0800 Subject: [PATCH 049/988] oaep label vector (#3895) * oaep label vector * add count so we can use the nist vector loader * add RSA key from the boring vectors as well https://boringssl.googlesource.com/boringssl/+/ce3773f9fe25c3b54390bc51d72572f251c7d7e6/crypto/evp/evp_tests.txt#8 --- docs/development/test-vectors.rst | 2 ++ .../cryptography_vectors/asymmetric/RSA/oaep-label.txt | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/RSA/oaep-label.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 1a1c5d728130..7a5f8797ac0f 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -36,6 +36,7 @@ Asymmetric ciphers * `asymmetric/public/PKCS1/dsa.pub.pem`_ is a PKCS1 DSA public key from the Ruby test suite. * X25519 test vectors from :rfc:`7748`. +* RSA OAEP with custom label from the `BoringSSL evp tests`_. Custom asymmetric vectors @@ -497,6 +498,7 @@ header format (substituting the correct information): .. _`OpenSSL's test vectors`: https://github.com/openssl/openssl/blob/97cf1f6c2854a3a955fd7dd3a1f113deba00c9ef/crypto/evp/evptests.txt#L232 .. _`OpenSSL's evpciph.txt`: https://github.com/openssl/openssl/blob/5a7bc0be97dee9ac715897fe8180a08e211bc6ea/test/evpciph.txt#L2362 .. _`BoringSSL ChaCha20Poly1305 tests`: https://boringssl.googlesource.com/boringssl/+/2e2a226ac9201ac411a84b5e79ac3a7333d8e1c9/crypto/cipher_extra/test/chacha20_poly1305_tests.txt +.. _`BoringSSL evp tests`: https://boringssl.googlesource.com/boringssl/+/ce3773f9fe25c3b54390bc51d72572f251c7d7e6/crypto/evp/evp_tests.txt .. _`RIPEMD website`: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html .. _`Whirlpool website`: http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html .. _`draft RFC`: https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01 diff --git a/vectors/cryptography_vectors/asymmetric/RSA/oaep-label.txt b/vectors/cryptography_vectors/asymmetric/RSA/oaep-label.txt new file mode 100644 index 000000000000..be98d811d537 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/RSA/oaep-label.txt @@ -0,0 +1,8 @@ +# Vector from https://boringssl.googlesource.com/boringssl/+/ce3773f9fe25c3b54390bc51d72572f251c7d7e6/crypto/evp/evp_tests.txt +COUNT = 1 +KEY = 308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f02030100010282010060297ac7991b167a06d6b24758b8cbe208beb9b2d9ec9738bd80f90a2e35005dd7ce292d9e29ba885bd316fef1f20913bc0ac90d6b0808b2414d82104441d8624a33ce0233c8f780a48b375aff02d76712228a702484db3f9ebecccfbbee1709dba182800d949e9e4216e0bff3558388f8bd90da373a1d82743ec3fbdd1427fd16825a657a316912e8695365117ca2f845c909405fcac55f895fc15d20386c26ee78c9e99075029a178a6c1e4cf0c200e8a9cfb27e9d156f86e6c2adc22b1a84a1cd5ca5b2790875d79407c84b352395cb81cc3fed5bb043b69ede0c07204550025cee8c5f440170b6120bb48e0f747bcd8f522110850df043c428dfd187053102818100f6f961b47cbc035d3aedebc7de850a956b65ecdb9cf60764063f15aa48553c58d972fe6675056e35ddfdc37bf3b9f2f622ee271337256849c9bef2176fe8f7c3f8bb91ba374dd53baf3dec814d2bdec10c1fdc88cdd16876f26b1edfa3f094197edf4d42ff1fb2971103b898ca859c427287086a842ab410bb69cf2d35af6be302818100d47e724a7ff41048b270c2524a4101878b73159bb73d3dbc187b220e635b3534f96e243a184d93f860b6bfbb6b71c1ed9a1e1f458583023c301e96a692c1a08b53d0ec9ca910100d80451e3b7dc6a01bac4aecef8df798846bc235a08cbba2cf4c06804cc11219e95608c714e3f1430d491fadbba32a5751a04f97745834c9a502818021f2452bb9b95dfd028c914bf799f1ca77e89a95d50d3c16d384f8455f8bd7af9eb3dfa3d591d9842def235f7630a8e48c088ff6642e101794535a933e1e976fa8509fc728b2da0c4a1a08d7fcf37abaae1ff3001aca1dc1bbb05d9dffbaa1a09f7fb1eef38237d9ebccc722b9338436dde7119112798c26809c1a8dec4320610281801f7510aa62c2d8de4a3c53282781f41e02d0e8b402ae78432e449c48110161a11403f02d01880a8dcc938152d79721a4711a607ac4471ebf964810f95be47a45e60499e29f4c9773c83773404f606637728c2d0351bb03c326c8bb73a721e7fa5440ea2172bba1465fcc30dcb0d9f89930e815aa1f7f9729a857e00e0338dd590281804d1f0d756fe77e01099a652f50a88b7b685dc5bf00981d5d2376fd0c6fe29cd5b638734479305a73ad3c1599d39eae3bae035fbd6fed07c28de705933879a06e48e6a603686ed8e2560a5f6af1f2c24faf4aa960e382186f15eedce9a2491ae730680dd4cf778b70faa86826ab3223477cc91377b19a6d5a2eaea219760beed5 +RSAPadding = OAEP +OAEPDigest = SHA512 +OAEPLabel = 00112233445566778899aabbccddeeff +Input = 48b956c22b8e40cc38f0893672ddf488fc806cf1fcc6239c66dd8345eb543d6b5cac589e6c7ae86dac1c2436c4d72c48009a737b2c649e6000dbab17203e4d9c078bd70b649700a0830d4ddc396af0c48973177a229e48259d93247f04f76474c7611b530c66f020c4da2cc861c2e4104831ecc0336e0cb10d6520fdefd0b33606f5cdd736dd439583b9b6011cce99623c93caf5f76e21e9fefab414795dd5ac12cba551be74ebf266834fcffab182c5e7c9b6c064df154cb26ddfd4fe2fd87590005f4bf45e776a0082803e9f68995b8eeb4c6802c67b5ef349e5b2dc0cf7a12fc097030f2bd28f0253f17129b04c82993a12957728b35880fdd2f8d0cc469f +Output = "Hello World" From 52067bc300ec37c1b4a4b889fd7828600f5b9ce1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 9 Sep 2017 07:02:22 +0800 Subject: [PATCH 050/988] add X509 test vector with a TLS Feature (RFC 7633) extension (#3898) --- docs/development/test-vectors.rst | 3 ++ .../x509/tls-feature-ocsp-staple.pem | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/tls-feature-ocsp-staple.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 7a5f8797ac0f..dc89cafa084b 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -167,6 +167,9 @@ X.509 * ``wosign-bc-invalid.pem`` - A certificate issued by WoSign that contains a basic constraints extension with CA set to false and a path length of zero in violation of :rfc:`5280`. +* ``tls-feature-ocsp-staple.pem`` - A certificate issued by Let's Encrypt that + contains a TLS Feature extension with the ``status_request`` feature (commonly + known as OCSP Must-Staple). Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/tls-feature-ocsp-staple.pem b/vectors/cryptography_vectors/x509/tls-feature-ocsp-staple.pem new file mode 100644 index 000000000000..55c18f2235bf --- /dev/null +++ b/vectors/cryptography_vectors/x509/tls-feature-ocsp-staple.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFwDCCBKigAwIBAgISBAkqVGPY5uvY4mED7P7emq/6MA0GCSqGSIb3DQEBCwUA +MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD +ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzA4MzEyMzAxMDBaFw0x +NzExMjkyMzAxMDBaMBsxGTAXBgNVBAMTEHNjb3R0aGVsbWUuY28udWswggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa2odZX/NOf9NW/9tqMOWaAUfoImkp +t14vv3TgikHjBVNnNd8Jt9SSFSzgxn0JtLGot4w6Uy47NIhDE0Ff+Br2DuTYMUvJ +xg0b2cIuULUy3Rwt1IWhicSL/XDSIsSWleEhUYjtrFXhBMEjfvcKhlGGdXb5DgLS +KRol6Rv4RF2t3q68TF9VdV6wEU+2EdoadQqJ2HlIo2p8NZbfoQ2eo+6IyNi+t+0N +acsadrdRKb7K75l5d83/btxuV9tOmRVVfUIGqUztN9tJZSZMS8LxpMnQkf2dizL6 +Rsyl1vTpYLdo5mjgNn3r3yRAQ6qXhWhR3RyKp8WyHvKe/cy/tVx6ziidAgMBAAGj +ggLNMIICyTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFJdftiVVJIUikEi+8+Px01S/ +/gBFMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEB +BGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0 +Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0 +Lm9yZy8wgcQGA1UdEQSBvDCBuYIYcnNhMjA0OC5zY290dGhlbG1lLmNvLnVrghBz +Y290dGhlbG1lLmNvLnVrgg5zY290dGhlbG1lLmNvbYIac3Ryb25nc3NsLnNjb3R0 +aGVsbWUuY28udWuCGHdlYWtzc2wuc2NvdHRoZWxtZS5jby51a4IUd3d3LnNjb3R0 +aGVsbWUuY28udWuCEnd3dy5zY290dGhlbG1lLmNvbYIbeG4tLWx2OGhhYS5zY290 +dGhlbG1lLmNvLnVrMBEGCCsGAQUFBwEYBAUwAwIBBTCB/gYDVR0gBIH2MIHzMAgG +BmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9j +cHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlm +aWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVz +IGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9s +aWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkv +MA0GCSqGSIb3DQEBCwUAA4IBAQA2bHizYkS6EA8xpLwcQtsI2wHmU041SEFSJzUH +j2HmYQRk2qcpFMPlliSqpGrRm2cvRj2wmbAm3mkFw/D3qrC8c9+5YBSbzwRNEQcm +aCbvgQ5J8q7ZqYG3X/p72KuthuEyKqAE3BYYXBqoAIJnyzJALNRomCM6XcNFoDRN +0tXfEJ4gzRt5tBYYFlmLLm3Fhdf68HWE2W5h2E7FC4ScVuCczQZ95wITrAFapif3 +Z0rniIZOZDW1KqtHmXiHJH4+YDOLDOInD5en5Znt+c4PDCezymCJBy970VeSigpb +xFBzfG7Ocz3LpLbP8B0ZbwuahiXKfND/0HjTyQnxMA4FMdfE +-----END CERTIFICATE----- From d4bde9ce6668bb019f9c9db4cd26280e6cf7fa21 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 9 Sep 2017 07:03:50 +0800 Subject: [PATCH 051/988] RSA OAEP label support for OpenSSL 1.0.2+ (#3897) * RSA OAEP label support for OpenSSL 1.0.2+ * changelog * move around tests, address review feedback, use backend supported method * unsupported padding catches this now --- CHANGELOG.rst | 4 + .../hazmat/backends/openssl/backend.py | 6 +- .../hazmat/backends/openssl/rsa.py | 18 ++- tests/hazmat/backends/test_openssl.py | 12 -- tests/hazmat/primitives/test_rsa.py | 131 +++++++++++++++++- 5 files changed, 153 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 48dd0bf49d95..32560318aa27 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -38,6 +38,10 @@ Changelog * Support :class:`~cryptography.hazmat.primitives.hashes.BLAKE2b` and :class:`~cryptography.hazmat.primitives.hashes.BLAKE2s` with :class:`~cryptography.hazmat.primitives.hmac.HMAC`. +* Added support for using labels with + :class:`~cryptography.hazmat.primitives.asymmetric.padding.OAEP` when using + OpenSSL 1.0.2 or greater. + .. _v2-0-3: diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 6c9ef84fee98..d9a5bdf29b31 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -547,7 +547,11 @@ def rsa_padding_supported(self, padding): elif isinstance(padding, OAEP) and isinstance(padding._mgf, MGF1): return ( self._oaep_hash_supported(padding._mgf._algorithm) and - self._oaep_hash_supported(padding._algorithm) + self._oaep_hash_supported(padding._algorithm) and + ( + (padding._label is None or len(padding._label) == 0) or + self._lib.Cryptography_HAS_RSA_OAEP_LABEL == 1 + ) ) else: return False diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 839ef147ef76..05b4e9dcea93 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -57,9 +57,6 @@ def _enc_dec_rsa(backend, key, data, padding): _Reasons.UNSUPPORTED_PADDING ) - if padding._label is not None and padding._label != b"": - raise ValueError("This backend does not support OAEP labels.") - else: raise UnsupportedAlgorithm( "{0} is not supported by this backend.".format( @@ -106,6 +103,21 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): res = backend._lib.EVP_PKEY_CTX_set_rsa_oaep_md(pkey_ctx, oaep_md) backend.openssl_assert(res > 0) + if ( + isinstance(padding, OAEP) and + padding._label is not None and + len(padding._label) > 0 + ): + # set0_rsa_oaep_label takes ownership of the char * so we need to + # copy it into some new memory + labelptr = backend._lib.OPENSSL_malloc(len(padding._label)) + backend.openssl_assert(labelptr != backend._ffi.NULL) + backend._ffi.memmove(labelptr, padding._label, len(padding._label)) + res = backend._lib.EVP_PKEY_CTX_set0_rsa_oaep_label( + pkey_ctx, labelptr, len(padding._label) + ) + backend.openssl_assert(res == 1) + outlen = backend._ffi.new("size_t *", buf_size) buf = backend._ffi.new("unsigned char[]", buf_size) res = crypt(pkey_ctx, buf, outlen, data, len(data)) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 3a847cd2b61e..40e928538fa8 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -422,18 +422,6 @@ def test_unsupported_mgf1_hash_algorithm_md5_decrypt(self): ) ) - def test_unsupported_oaep_label_decrypt(self): - private_key = RSA_KEY_512.private_key(backend) - with pytest.raises(ValueError): - private_key.decrypt( - b"0" * 64, - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - algorithm=hashes.SHA1(), - label=b"label" - ) - ) - class TestOpenSSLCMAC(object): def test_unsupported_cipher(self): diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 627248fd8e67..fc956ecbfcf6 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -38,8 +38,8 @@ DummyAsymmetricPadding, DummyHashAlgorithm, DummyKeySerializationEncryption ) from ...utils import ( - load_pkcs1_vectors, load_rsa_nist_vectors, load_vectors_from_file, - raises_unsupported_algorithm + load_nist_vectors, load_pkcs1_vectors, load_rsa_nist_vectors, + load_vectors_from_file, raises_unsupported_algorithm ) @@ -218,6 +218,133 @@ def test_load_pss_vect_example_keys(self, pkcs1_example): assert public_num.n == public_num2.n assert public_num.e == public_num2.e + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "RSA", "oaep-label.txt"), + load_nist_vectors) + ) + @pytest.mark.supported( + only_if=lambda backend: backend.rsa_padding_supported( + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=b"label" + ) + ), + skip_message="Does not support RSA OAEP labels" + ) + def test_oaep_label_decrypt(self, vector, backend): + private_key = serialization.load_der_private_key( + binascii.unhexlify(vector["key"]), None, backend + ) + assert vector["oaepdigest"] == b"SHA512" + decrypted = private_key.decrypt( + binascii.unhexlify(vector["input"]), + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA512()), + algorithm=hashes.SHA512(), + label=binascii.unhexlify(vector["oaeplabel"]) + ) + ) + assert vector["output"][1:-1] == decrypted + + @pytest.mark.parametrize( + ("msg", "label"), + [ + (b"amazing encrypted msg", b"some label"), + (b"amazing encrypted msg", b""), + ] + ) + @pytest.mark.supported( + only_if=lambda backend: backend.rsa_padding_supported( + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=b"label" + ) + ), + skip_message="Does not support RSA OAEP labels" + ) + def test_oaep_label_roundtrip(self, msg, label, backend): + private_key = RSA_KEY_2048.private_key(backend) + ct = private_key.public_key().encrypt( + msg, + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=label + ) + ) + pt = private_key.decrypt( + ct, + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=label + ) + ) + assert pt == msg + + @pytest.mark.parametrize( + ("enclabel", "declabel"), + [ + (b"label1", b"label2"), + (b"label3", b""), + (b"", b"label4"), + ] + ) + @pytest.mark.supported( + only_if=lambda backend: backend.rsa_padding_supported( + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=b"label" + ) + ), + skip_message="Does not support RSA OAEP labels" + ) + def test_oaep_wrong_label(self, enclabel, declabel, backend): + private_key = RSA_KEY_2048.private_key(backend) + msg = b"test" + ct = private_key.public_key().encrypt( + msg, padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=enclabel + ) + ) + with pytest.raises(ValueError): + private_key.decrypt( + ct, padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=declabel + ) + ) + + @pytest.mark.supported( + only_if=lambda backend: not backend.rsa_padding_supported( + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=b"label" + ) + ), + skip_message="Requires backend without RSA OAEP label support" + ) + def test_unsupported_oaep_label_decrypt(self, backend): + private_key = RSA_KEY_512.private_key(backend) + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_PADDING): + private_key.decrypt( + b"0" * 64, + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA1()), + algorithm=hashes.SHA1(), + label=b"label" + ) + ) + def test_rsa_generate_invalid_backend(): pretend_backend = object() From 5d66966032a1efbcbf093804a19951f399c2a6eb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 11 Sep 2017 09:16:34 +0800 Subject: [PATCH 052/988] [WIP] add support for the TLSFeature extension in x509 (#3899) * add support for the TLSFeature extension in x509 This extension is used for OCSP Must-Staple. * fix changelog link * pep8 * refactor to support the sequence properly and add status_request_v2 * update some language * add test vector, implement eq/ne/hash on TLSFeature * address review comments --- CHANGELOG.rst | 4 +- docs/x509/reference.rst | 45 +++++++++++++ .../hazmat/backends/openssl/backend.py | 19 +++--- .../hazmat/backends/openssl/decode_asn1.py | 21 +++++++ src/cryptography/x509/__init__.py | 6 +- src/cryptography/x509/extensions.py | 56 +++++++++++++++++ src/cryptography/x509/oid.py | 2 + tests/x509/test_x509.py | 52 +++++++++++++++ tests/x509/test_x509_ext.py | 63 +++++++++++++++++++ 9 files changed, 258 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 32560318aa27..51488ce77f62 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -41,7 +41,9 @@ Changelog * Added support for using labels with :class:`~cryptography.hazmat.primitives.asymmetric.padding.OAEP` when using OpenSSL 1.0.2 or greater. - +* Add support for the :class:`~cryptography.x509.TLSFeature` + extension. This is commonly used for enabling ``OCSP Must-Staple`` in + certificates. .. _v2-0-3: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 5e1c95c49c56..f07272a6cfd6 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1606,6 +1606,45 @@ X.509 Extensions Returns :attr:`~cryptography.x509.oid.ExtensionOID.OCSP_NO_CHECK`. + +.. class:: TLSFeature(features) + + .. versionadded:: 2.1 + + The TLS Feature extension is defined in :rfc:`7633` and is used in + certificates for OCSP Must-Staple. The object is iterable to get every + element. + + :param list features: A list of features to enable from the + :class:`~cryptography.x509.TLSFeatureType` enum. At this time only + ``status_request`` or ``status_request_v2`` are allowed. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns :attr:`~cryptography.x509.oid.ExtensionOID.TLS_FEATURE`. + +.. class:: TLSFeatureType + + .. versionadded:: 2.1 + + An enumeration of TLS Feature types. + + .. attribute:: status_request + + This feature type is defined in :rfc:`6066` and, when embedded in + an X.509 certificate, signals to the client that it should require + a stapled OCSP response in the TLS handshake. Commonly known as OCSP + Must-Staple in certificates. + + .. attribute:: status_request_v2 + + This feature type is defined in :rfc:`6961`. This value is not + commonly used and if you want to enable OCSP Must-Staple you should + use ``status_request``. + + .. class:: NameConstraints(permitted_subtrees, excluded_subtrees) .. versionadded:: 1.0 @@ -2673,6 +2712,12 @@ instances. The following common OIDs are available as constants. identifier for the :class:`~cryptography.x509.OCSPNoCheck` extension type. + .. attribute:: TLS_FEATURE + + Corresponds to the dotted string ``"1.3.6.1.5.5.7.1.24"``. The + identifier for the :class:`~cryptography.x509.TLSFeature` extension + type. + .. attribute:: CRL_NUMBER Corresponds to the dotted string ``"2.5.29.20"``. The identifier for diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index d9a5bdf29b31..3a889344c340 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -23,6 +23,7 @@ from cryptography.hazmat.backends.openssl import aead from cryptography.hazmat.backends.openssl.ciphers import _CipherContext from cryptography.hazmat.backends.openssl.cmac import _CMACContext +from cryptography.hazmat.backends.openssl.decode_asn1 import _Integers from cryptography.hazmat.backends.openssl.dh import ( _DHParameters, _DHPrivateKey, _DHPublicKey, _dh_params_dup @@ -943,18 +944,22 @@ def _create_x509_extensions(self, extensions, handlers, x509_obj, res = add_func(x509_obj, x509_extension, i) self.openssl_assert(res >= 1) + def _create_raw_x509_extension(self, extension, value): + obj = _txt2obj_gc(self, extension.oid.dotted_string) + return self._lib.X509_EXTENSION_create_by_OBJ( + self._ffi.NULL, obj, 1 if extension.critical else 0, value + ) + def _create_x509_extension(self, handlers, extension): if isinstance(extension.value, x509.UnrecognizedExtension): - obj = _txt2obj_gc(self, extension.oid.dotted_string) value = _encode_asn1_str_gc( self, extension.value.value, len(extension.value.value) ) - return self._lib.X509_EXTENSION_create_by_OBJ( - self._ffi.NULL, - obj, - 1 if extension.critical else 0, - value - ) + return self._create_raw_x509_extension(extension, value) + elif isinstance(extension.value, x509.TLSFeature): + asn1 = _Integers([x.value for x in extension.value]).dump() + value = _encode_asn1_str_gc(self, asn1, len(asn1)) + return self._create_raw_x509_extension(extension, value) else: try: encode = handlers[extension.oid] diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index a66f65f64f92..9c2d763efcf6 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -9,6 +9,8 @@ from email.utils import parseaddr +from asn1crypto.core import Integer, SequenceOf + import idna import six @@ -16,11 +18,16 @@ from six.moves import urllib_parse from cryptography import x509 +from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM from cryptography.x509.oid import ( CRLEntryExtensionOID, CertificatePoliciesOID, ExtensionOID ) +class _Integers(SequenceOf): + _child_spec = Integer + + def _obj2txt(backend, obj): # Set to 80 on the recommendation of # https://www.openssl.org/docs/crypto/OBJ_nid2ln.html#return_values @@ -210,6 +217,20 @@ def parse(self, backend, x509_obj): raise x509.DuplicateExtension( "Duplicate {0} extension found".format(oid), oid ) + + # This OID is only supported in OpenSSL 1.1.0+ but we want + # to support it in all versions of OpenSSL so we decode it + # ourselves. + if oid == ExtensionOID.TLS_FEATURE: + data = backend._lib.X509_EXTENSION_get_data(ext) + parsed = _Integers.load(_asn1_string_to_bytes(backend, data)) + value = x509.TLSFeature( + [_TLS_FEATURE_TYPE_TO_ENUM[x.native] for x in parsed] + ) + extensions.append(x509.Extension(oid, critical, value)) + seen_oids.add(oid) + continue + try: handler = self.handlers[oid] except KeyError: diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index 3b7473029e2a..176ed8ca6406 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -23,8 +23,8 @@ InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, PolicyInformation, PrecertificateSignedCertificateTimestamps, ReasonFlags, - SubjectAlternativeName, SubjectKeyIdentifier, UnrecognizedExtension, - UserNotice + SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, + UnrecognizedExtension, UserNotice ) from cryptography.x509.general_name import ( DNSName, DirectoryName, GeneralName, IPAddress, OtherName, RFC822Name, @@ -130,6 +130,8 @@ "Extensions", "Extension", "ExtendedKeyUsage", + "TLSFeature", + "TLSFeatureType", "OCSPNoCheck", "BasicConstraints", "CRLNumber", diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index d90465b2a1da..9eff34316355 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -732,6 +732,62 @@ class OCSPNoCheck(object): oid = ExtensionOID.OCSP_NO_CHECK +@utils.register_interface(ExtensionType) +class TLSFeature(object): + oid = ExtensionOID.TLS_FEATURE + + def __init__(self, features): + features = list(features) + if ( + not all(isinstance(x, TLSFeatureType) for x in features) or + len(features) == 0 + ): + raise TypeError( + "features must be a list of elements from the TLSFeatureType " + "enum" + ) + + self._features = features + + def __iter__(self): + return iter(self._features) + + def __len__(self): + return len(self._features) + + def __repr__(self): + return "".format(self) + + def __eq__(self, other): + if not isinstance(other, TLSFeature): + return NotImplemented + + return self._features == other._features + + def __getitem__(self, idx): + return self._features[idx] + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._features)) + + +class TLSFeatureType(Enum): + # status_request is defined in RFC 6066 and is used for what is commonly + # called OCSP Must-Staple when present in the TLS Feature extension in an + # X.509 certificate. + status_request = 5 + # status_request_v2 is defined in RFC 6961 and allows multiple OCSP + # responses to be provided. It is not currently in use by clients or + # servers. + status_request_v2 = 17 + + +_TLS_FEATURE_TYPE_TO_ENUM = dict((x.value, x) for x in TLSFeatureType) + + @utils.register_interface(ExtensionType) class InhibitAnyPolicy(object): oid = ExtensionOID.INHIBIT_ANY_POLICY diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 4a6fa3c158bb..7f8c90317468 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -85,6 +85,7 @@ class ExtensionOID(object): AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1") SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11") OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5") + TLS_FEATURE = ObjectIdentifier("1.3.6.1.5.5.7.1.24") CRL_NUMBER = ObjectIdentifier("2.5.29.20") PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ( ObjectIdentifier("1.3.6.1.4.1.11129.2.4.2") @@ -255,6 +256,7 @@ class CertificatePoliciesOID(object): ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", ExtensionOID.CRL_NUMBER: "cRLNumber", + ExtensionOID.TLS_FEATURE: "TLSFeature", AuthorityInformationAccessOID.OCSP: "OCSP", AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers", CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 533862ab8c2e..e41fdc76afbb 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1092,6 +1092,18 @@ def test_certificate_repr(self, backend): "graphy.io')>])>, ...)>" ) + def test_parse_tls_feature_extension(self, backend): + cert = _load_cert( + os.path.join("x509", "tls-feature-ocsp-staple.pem"), + x509.load_pem_x509_certificate, + backend + ) + ext = cert.extensions.get_extension_for_class(x509.TLSFeature) + assert ext.critical is False + assert ext.value == x509.TLSFeature( + [x509.TLSFeatureType.status_request] + ) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @@ -2608,6 +2620,46 @@ def test_name_constraints(self, nc, backend): ) assert ext.value == nc + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.parametrize( + "add_ext", + [ + x509.TLSFeature([x509.TLSFeatureType.status_request]), + x509.TLSFeature([x509.TLSFeatureType.status_request_v2]), + x509.TLSFeature([ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2 + ]) + ] + ) + def test_tls_feature(self, add_ext, backend): + issuer_private_key = RSA_KEY_2048.private_key(backend) + subject_private_key = RSA_KEY_2048.private_key(backend) + + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + + cert = x509.CertificateBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ).public_key( + subject_private_key.public_key() + ).serial_number( + 123 + ).add_extension( + add_ext, critical=False + ).sign(issuer_private_key, hashes.SHA256(), backend) + + ext = cert.extensions.get_extension_for_class(x509.TLSFeature) + assert ext.critical is False + assert ext.value == add_ext + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_key_usage(self, backend): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index fc8651c8c304..5b9fb3478c72 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -92,6 +92,69 @@ def test_ne(self): assert ext1 != object() +class TestTLSFeature(object): + def test_not_enum_type(self): + with pytest.raises(TypeError): + x509.TLSFeature([3]) + + def test_empty_list(self): + with pytest.raises(TypeError): + x509.TLSFeature([]) + + def test_repr(self): + ext1 = x509.TLSFeature([x509.TLSFeatureType.status_request]) + assert repr(ext1) == ( + "])>" + ) + + def test_eq(self): + ext1 = x509.TLSFeature([x509.TLSFeatureType.status_request]) + ext2 = x509.TLSFeature([x509.TLSFeatureType.status_request]) + assert ext1 == ext2 + + def test_ne(self): + ext1 = x509.TLSFeature([x509.TLSFeatureType.status_request]) + ext2 = x509.TLSFeature([x509.TLSFeatureType.status_request_v2]) + ext3 = x509.TLSFeature([ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2 + ]) + assert ext1 != ext2 + assert ext1 != ext3 + assert ext1 != object() + + def test_hash(self): + ext1 = x509.TLSFeature([x509.TLSFeatureType.status_request]) + ext2 = x509.TLSFeature([x509.TLSFeatureType.status_request]) + ext3 = x509.TLSFeature([ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2 + ]) + assert hash(ext1) == hash(ext2) + assert hash(ext1) != hash(ext3) + + def test_iter(self): + ext1_features = [x509.TLSFeatureType.status_request] + ext1 = x509.TLSFeature(ext1_features) + assert len(ext1) == 1 + assert list(ext1) == ext1_features + ext2_features = [ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2, + ] + ext2 = x509.TLSFeature(ext2_features) + assert len(ext2) == 2 + assert list(ext2) == ext2_features + + def test_indexing(self): + ext = x509.TLSFeature([ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2, + ]) + assert ext[-1] == ext[1] + assert ext[0] == x509.TLSFeatureType.status_request + + class TestUnrecognizedExtension(object): def test_invalid_oid(self): with pytest.raises(TypeError): From 363f5b099ba6e9e551d20e39242bd657bd0703f1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 12 Sep 2017 08:03:17 +0800 Subject: [PATCH 053/988] refactor AES keywrap into a wrap core and unwrap core (#3901) * refactor AES keywrap into a wrap core and unwrap core This refactor makes adding AES keywrap with padding much simpler. * remove an unneeded arg --- src/cryptography/hazmat/primitives/keywrap.py | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/src/cryptography/hazmat/primitives/keywrap.py b/src/cryptography/hazmat/primitives/keywrap.py index 6e79ab6b59f6..702a69328e9e 100644 --- a/src/cryptography/hazmat/primitives/keywrap.py +++ b/src/cryptography/hazmat/primitives/keywrap.py @@ -12,20 +12,9 @@ from cryptography.hazmat.primitives.constant_time import bytes_eq -def aes_key_wrap(wrapping_key, key_to_wrap, backend): - if len(wrapping_key) not in [16, 24, 32]: - raise ValueError("The wrapping key must be a valid AES key length") - - if len(key_to_wrap) < 16: - raise ValueError("The key to wrap must be at least 16 bytes") - - if len(key_to_wrap) % 8 != 0: - raise ValueError("The key to wrap must be a multiple of 8 bytes") - +def _wrap_core(wrapping_key, a, r, backend): # RFC 3394 Key Wrap - 2.2.1 (index method) encryptor = Cipher(AES(wrapping_key), ECB(), backend).encryptor() - a = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" - r = [key_to_wrap[i:i + 8] for i in range(0, len(key_to_wrap), 8)] n = len(r) for j in range(6): for i in range(n): @@ -44,22 +33,24 @@ def aes_key_wrap(wrapping_key, key_to_wrap, backend): return a + b"".join(r) -def aes_key_unwrap(wrapping_key, wrapped_key, backend): - if len(wrapped_key) < 24: - raise ValueError("Must be at least 24 bytes") - - if len(wrapped_key) % 8 != 0: - raise ValueError("The wrapped key must be a multiple of 8 bytes") - +def aes_key_wrap(wrapping_key, key_to_wrap, backend): if len(wrapping_key) not in [16, 24, 32]: raise ValueError("The wrapping key must be a valid AES key length") + if len(key_to_wrap) < 16: + raise ValueError("The key to wrap must be at least 16 bytes") + + if len(key_to_wrap) % 8 != 0: + raise ValueError("The key to wrap must be a multiple of 8 bytes") + + a = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" + r = [key_to_wrap[i:i + 8] for i in range(0, len(key_to_wrap), 8)] + return _wrap_core(wrapping_key, a, r, backend) + + +def _unwrap_core(wrapping_key, a, r, backend): # Implement RFC 3394 Key Unwrap - 2.2.2 (index method) decryptor = Cipher(AES(wrapping_key), ECB(), backend).decryptor() - aiv = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" - - r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)] - a = r.pop(0) n = len(r) for j in reversed(range(6)): for i in reversed(range(n)): @@ -74,7 +65,23 @@ def aes_key_unwrap(wrapping_key, wrapped_key, backend): r[i] = b[-8:] assert decryptor.finalize() == b"" + return a, r + + +def aes_key_unwrap(wrapping_key, wrapped_key, backend): + if len(wrapped_key) < 24: + raise ValueError("Must be at least 24 bytes") + + if len(wrapped_key) % 8 != 0: + raise ValueError("The wrapped key must be a multiple of 8 bytes") + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + aiv = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" + r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)] + a = r.pop(0) + a, r = _unwrap_core(wrapping_key, a, r, backend) if not bytes_eq(a, aiv): raise InvalidUnwrap() From c7ecb4568444bec5a1db02e9db1ad386a7afc88d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 12 Sep 2017 10:26:33 +0800 Subject: [PATCH 054/988] add a faq note about having a compiler that is too old (#3902) * add a faq note about having a compiler that is too old Also add a bit of text explaining what to do on OpenBSD 6.1 and earlier since that is the most likely place this will occur. * I always forget it spell checks titles --- docs/faq.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/faq.rst b/docs/faq.rst index adf03d5ce5d4..7133f0c5b773 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -75,6 +75,15 @@ Installing ``cryptography`` fails with ``ImportError: No module named setuptools Your ``cffi`` package is out of date. ``pip install -U cffi`` to update it. +error: ``-Werror=sign-conversion``: No option ``-Wsign-conversion`` during installation +--------------------------------------------------------------------------------------- + +The compiler you are using is too old and not supported by ``cryptography``. +Please upgrade to a more recent version. If you are running OpenBSD 6.1 or +earlier the default compiler is extremely old. Use ``pkg_add`` to install a +newer ``gcc`` and then install ``cryptography`` using +``CC=/path/to/newer/gcc pip install cryptography``. + Installing cryptography with OpenSSL 0.9.8 or 1.0.0 fails --------------------------------------------------------- From e00bad5332f3ba851823270bee8e191ac0fc4ec2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 13 Sep 2017 08:29:19 +0800 Subject: [PATCH 055/988] compare against bytes values, not the U-label decoded ones (#3906) We need to add one small test to cover a case that is no longer covered with this switch. --- src/cryptography/x509/general_name.py | 4 ++-- tests/x509/test_x509_ext.py | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 114b43aea0e1..abf3a48abac7 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -117,7 +117,7 @@ def __eq__(self, other): if not isinstance(other, RFC822Name): return NotImplemented - return self.value == other.value + return self.bytes_value == other.bytes_value def __ne__(self, other): return not self == other @@ -300,7 +300,7 @@ def __eq__(self, other): if not isinstance(other, UniformResourceIdentifier): return NotImplemented - return self.value == other.value + return self.bytes_value == other.bytes_value def __ne__(self, other): return not self == other diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 5b9fb3478c72..830283bbe8c9 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -1669,6 +1669,11 @@ def test_idna_with_port(self): b"gopher://xn--80ato2c.cryptography:70/some/path" ) + def test_empty_string(self): + gn = x509.UniformResourceIdentifier(b"") + with pytest.warns(utils.DeprecatedIn21): + assert gn.value == u"" + def test_query_and_fragment(self): gn = x509.UniformResourceIdentifier( b"ldap://cryptography:90/path?query=true#somedata" From e535985a73a6aee349ac08b07ebe4f652b2eeb29 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 13 Sep 2017 09:30:51 +0800 Subject: [PATCH 056/988] coverage pin test part deux (#3908) * we pinned coverage for xml generation...let's try everywhere * add so many comments --- .travis/install.sh | 1 + Jenkinsfile | 3 +++ tox.ini | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis/install.sh b/.travis/install.sh index e65030f117fa..6090e07696da 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -78,4 +78,5 @@ fi python -m virtualenv ~/.venv source ~/.venv/bin/activate +# This coverage pin must be kept in sync with tox.ini pip install tox codecov coverage==4.3.4 diff --git a/Jenkinsfile b/Jenkinsfile index b79a407ba2e2..93819ab11130 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -246,6 +246,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% virtualenv .codecov call .codecov/Scripts/activate + REM this pin must be kept in sync with tox.ini pip install coverage==4.3.4 pip install codecov codecov -e JOB_BASE_NAME,LABEL,TOXENV @@ -264,6 +265,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { tox -r -- --color=yes virtualenv .venv source .venv/bin/activate + # This pin must be kept in sync with tox.ini pip install coverage==4.3.4 bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV """ @@ -283,6 +285,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { fi virtualenv .venv source .venv/bin/activate + # This pin must be kept in sync with tox.ini pip install coverage==4.3.4 bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME """ diff --git a/tox.ini b/tox.ini index 777e9b89f529..51d81d2c32b0 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,8 @@ envlist = py26,py27,pypy,py33,py34,py35,py36,docs,pep8,py3pep8 extras = test deps = - coverage + # This must be kept in sync with Jenkinsfile and .travis/install.sh + coverage==4.3.4 ./vectors passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME commands = From fbfc36da2a4769045f2373b004ddf0aff906cf38 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 13 Sep 2017 21:34:59 +0800 Subject: [PATCH 057/988] implement __hash__ on all GeneralName types (#3907) Needed to implement __hash__ on AuthorityKeyIdentifier --- src/cryptography/x509/general_name.py | 19 +++++++++++-- tests/x509/test_x509_ext.py | 41 +++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index abf3a48abac7..3ad71e4cacb4 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -123,7 +123,7 @@ def __ne__(self, other): return not self == other def __hash__(self): - return hash(self.value) + return hash(self.bytes_value) def _idna_encode(value): @@ -205,6 +205,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.bytes_value) + @utils.register_interface(GeneralName) class UniformResourceIdentifier(object): @@ -306,7 +309,7 @@ def __ne__(self, other): return not self == other def __hash__(self): - return hash(self.value) + return hash(self.bytes_value) @utils.register_interface(GeneralName) @@ -331,6 +334,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.value) + @utils.register_interface(GeneralName) class RegisteredID(object): @@ -354,6 +360,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.value) + @utils.register_interface(GeneralName) class IPAddress(object): @@ -389,6 +398,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.value) + @utils.register_interface(GeneralName) class OtherName(object): @@ -416,3 +428,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + + def __hash__(self): + return hash((self.type_id, self.value)) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 830283bbe8c9..b3ea1f96d4a8 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -1525,6 +1525,13 @@ def test_ne(self): assert n1 != n2 assert not (n2 != n3) + def test_hash(self): + n1 = x509.DNSName(b"test1") + n2 = x509.DNSName(b"test2") + n3 = x509.DNSName(b"test2") + assert hash(n1) != hash(n2) + assert hash(n2) == hash(n3) + class TestDirectoryName(object): def test_not_name(self): @@ -1571,6 +1578,19 @@ def test_ne(self): assert gn != gn2 assert gn != object() + def test_hash(self): + name = x509.Name([ + x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1') + ]) + name2 = x509.Name([ + x509.NameAttribute(x509.ObjectIdentifier('2.999.2'), u'value2') + ]) + gn = x509.DirectoryName(name) + gn2 = x509.DirectoryName(name) + gn3 = x509.DirectoryName(name2) + assert hash(gn) == hash(gn2) + assert hash(gn) != hash(gn3) + class TestRFC822Name(object): def test_repr(self): @@ -1728,6 +1748,13 @@ def test_ne(self): assert gn != gn2 assert gn != object() + def test_hash(self): + gn = x509.RegisteredID(NameOID.COMMON_NAME) + gn2 = x509.RegisteredID(NameOID.COMMON_NAME) + gn3 = x509.RegisteredID(ExtensionOID.BASIC_CONSTRAINTS) + assert hash(gn) == hash(gn2) + assert hash(gn) != hash(gn3) + class TestIPAddress(object): def test_not_ipaddress(self): @@ -1761,6 +1788,13 @@ def test_ne(self): assert gn != gn2 assert gn != object() + def test_hash(self): + gn = x509.IPAddress(ipaddress.IPv4Address(u"127.0.0.1")) + gn2 = x509.IPAddress(ipaddress.IPv4Address(u"127.0.0.1")) + gn3 = x509.IPAddress(ipaddress.IPv4Address(u"127.0.0.2")) + assert hash(gn) == hash(gn2) + assert hash(gn) != hash(gn3) + class TestOtherName(object): def test_invalid_args(self): @@ -1810,6 +1844,13 @@ def test_ne(self): gn2 = x509.OtherName(x509.ObjectIdentifier("1.2.3.5"), b"derdata") assert gn != gn2 + def test_hash(self): + gn = x509.OtherName(x509.ObjectIdentifier("1.2.3.4"), b"derdata") + gn2 = x509.OtherName(x509.ObjectIdentifier("1.2.3.4"), b"derdata") + gn3 = x509.OtherName(x509.ObjectIdentifier("1.2.3.5"), b"derdata") + assert hash(gn) == hash(gn2) + assert hash(gn) != hash(gn3) + class TestGeneralNames(object): def test_get_values_for_type(self): From 8c1f5edd12d755c770d1fd3a6dc8251c95588600 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 13 Sep 2017 22:06:12 +0800 Subject: [PATCH 058/988] fix a bug with URI value when parsing a string with no hostname (#3909) strings of the form "scheme:///anything" would incorrectly have two slashes dropped. This is fixed in two code paths in this PR but one of those code paths will be entirely removed in a followup PR. --- src/cryptography/hazmat/backends/openssl/decode_asn1.py | 3 ++- src/cryptography/x509/general_name.py | 3 ++- tests/x509/test_x509_ext.py | 9 +++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 9c2d763efcf6..f178af07fa57 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -102,7 +102,8 @@ def _decode_general_name(backend, gn): if parsed.hostname: hostname = idna.decode(parsed.hostname) else: - hostname = "" + # There's no IDNA so we can immediately return + return x509.UniformResourceIdentifier(data) if parsed.port: netloc = hostname + u":" + six.text_type(parsed.port) else: diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 3ad71e4cacb4..768be3bb0bb3 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -274,7 +274,8 @@ def value(self): ) parsed = urllib_parse.urlparse(self.bytes_value) if not parsed.hostname: - netloc = "" + # There's no idna here so we can immediately return + return self.bytes_value.decode("utf-8") elif parsed.port: netloc = idna.decode(parsed.hostname) + ":{0}".format(parsed.port) else: diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index b3ea1f96d4a8..929a93805205 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -1689,10 +1689,11 @@ def test_idna_with_port(self): b"gopher://xn--80ato2c.cryptography:70/some/path" ) - def test_empty_string(self): - gn = x509.UniformResourceIdentifier(b"") + def test_empty_hostname(self): + gn = x509.UniformResourceIdentifier(b"ldap:///some-nonsense") + assert gn.bytes_value == b"ldap:///some-nonsense" with pytest.warns(utils.DeprecatedIn21): - assert gn.value == u"" + assert gn.value == "ldap:///some-nonsense" def test_query_and_fragment(self): gn = x509.UniformResourceIdentifier( @@ -3819,7 +3820,7 @@ def test_crl_empty_hostname(self, backend): assert cdps == x509.CRLDistributionPoints([ x509.DistributionPoint( full_name=[x509.UniformResourceIdentifier( - u"ldap:/CN=A,OU=B,dc=C,DC=D?E?F?G?H=I" + b"ldap:///CN=A,OU=B,dc=C,DC=D?E?F?G?H=I" )], relative_name=None, reasons=None, From 89aaecb518ced08d8e244583e75a8c3fb600758e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 01:45:09 +0800 Subject: [PATCH 059/988] remove u-label conversion during general name decode (#3905) We support directly passing bytes now and these code paths are duplicated in the deprecated value attributes. --- .../hazmat/backends/openssl/decode_asn1.py | 53 ++----------------- 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index f178af07fa57..6ed4aeb7f1cb 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -7,16 +7,8 @@ import datetime import ipaddress -from email.utils import parseaddr - from asn1crypto.core import Integer, SequenceOf -import idna - -import six - -from six.moves import urllib_parse - from cryptography import x509 from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM from cryptography.x509.oid import ( @@ -97,30 +89,8 @@ def _decode_general_name(backend, gn): data = _asn1_string_to_bytes(backend, gn.d.dNSName) return x509.DNSName(data) elif gn.type == backend._lib.GEN_URI: - data = _asn1_string_to_ascii(backend, gn.d.uniformResourceIdentifier) - parsed = urllib_parse.urlparse(data) - if parsed.hostname: - hostname = idna.decode(parsed.hostname) - else: - # There's no IDNA so we can immediately return - return x509.UniformResourceIdentifier(data) - if parsed.port: - netloc = hostname + u":" + six.text_type(parsed.port) - else: - netloc = hostname - - # Note that building a URL in this fashion means it should be - # semantically indistinguishable from the original but is not - # guaranteed to be exactly the same. - uri = urllib_parse.urlunparse(( - parsed.scheme, - netloc, - parsed.path, - parsed.params, - parsed.query, - parsed.fragment - )) - return x509.UniformResourceIdentifier(uri) + data = _asn1_string_to_bytes(backend, gn.d.uniformResourceIdentifier) + return x509.UniformResourceIdentifier(data) elif gn.type == backend._lib.GEN_RID: oid = _obj2txt(backend, gn.d.registeredID) return x509.RegisteredID(x509.ObjectIdentifier(oid)) @@ -156,23 +126,8 @@ def _decode_general_name(backend, gn): _decode_x509_name(backend, gn.d.directoryName) ) elif gn.type == backend._lib.GEN_EMAIL: - data = _asn1_string_to_ascii(backend, gn.d.rfc822Name) - name, address = parseaddr(data) - parts = address.split(u"@") - if name or not address: - # parseaddr has found a name (e.g. Name ) or the entire - # value is an empty string. - raise ValueError("Invalid rfc822name value") - elif len(parts) == 1: - # Single label email name. This is valid for local delivery. No - # IDNA decoding can be done since there is no domain component. - return x509.RFC822Name(address) - else: - # A normal email of the form user@domain.com. Let's attempt to - # decode the domain component and return the entire address. - return x509.RFC822Name( - parts[0] + u"@" + idna.decode(parts[1]) - ) + data = _asn1_string_to_bytes(backend, gn.d.rfc822Name) + return x509.RFC822Name(data) elif gn.type == backend._lib.GEN_OTHERNAME: type_id = _obj2txt(backend, gn.d.otherName.type_id) value = _asn1_to_der(backend, gn.d.otherName.value) From 54024493bd50ea6f27aa094dce2d0ddac43221f0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 01:55:31 +0800 Subject: [PATCH 060/988] AIA hashing (#3911) --- src/cryptography/x509/extensions.py | 3 +++ tests/x509/test_x509_ext.py | 34 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 9eff34316355..44d5be942bc8 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -284,6 +284,9 @@ def __ne__(self, other): def __getitem__(self, idx): return self._descriptions[idx] + def __hash__(self): + return hash(tuple(self._descriptions)) + class AccessDescription(object): def __init__(self, access_method, access_location): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 929a93805205..808b3681c356 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -2749,6 +2749,40 @@ def test_indexing(self): assert aia[-1] == aia[4] assert aia[2:6:2] == [aia[2], aia[4]] + def test_hash(self): + aia = x509.AuthorityInformationAccess([ + x509.AccessDescription( + AuthorityInformationAccessOID.OCSP, + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + ), + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + ) + ]) + aia2 = x509.AuthorityInformationAccess([ + x509.AccessDescription( + AuthorityInformationAccessOID.OCSP, + x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + ), + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + ) + ]) + aia3 = x509.AuthorityInformationAccess([ + x509.AccessDescription( + AuthorityInformationAccessOID.OCSP, + x509.UniformResourceIdentifier(b"http://ocsp.other.com") + ), + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + ) + ]) + assert hash(aia) == hash(aia2) + assert hash(aia) != hash(aia3) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From bdad051b9987951b4838e5c3458f6ba38b4e2ccf Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 04:24:20 +0800 Subject: [PATCH 061/988] name constraints __hash__ (#3912) --- src/cryptography/x509/extensions.py | 13 +++++++++++++ tests/x509/test_x509_ext.py | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 44d5be942bc8..01378b38acdd 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -973,6 +973,19 @@ def __repr__(self): u"excluded_subtrees={0.excluded_subtrees})>".format(self) ) + def __hash__(self): + if self.permitted_subtrees is not None: + ps = tuple(self.permitted_subtrees) + else: + ps = None + + if self.excluded_subtrees is not None: + es = tuple(self.excluded_subtrees) + else: + es = None + + return hash((ps, es)) + permitted_subtrees = utils.read_only_property("_permitted_subtrees") excluded_subtrees = utils.read_only_property("_excluded_subtrees") diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 808b3681c356..6010e77da9db 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -3119,6 +3119,27 @@ def test_ne(self): assert nc != nc3 assert nc != object() + def test_hash(self): + nc = x509.NameConstraints( + permitted_subtrees=[x509.DNSName(b"name.local")], + excluded_subtrees=[x509.DNSName(b"name2.local")] + ) + nc2 = x509.NameConstraints( + permitted_subtrees=[x509.DNSName(b"name.local")], + excluded_subtrees=[x509.DNSName(b"name2.local")] + ) + nc3 = x509.NameConstraints( + permitted_subtrees=[x509.DNSName(b"name.local")], + excluded_subtrees=None + ) + nc4 = x509.NameConstraints( + permitted_subtrees=None, + excluded_subtrees=[x509.DNSName(b"name.local")] + ) + assert hash(nc) == hash(nc2) + assert hash(nc) != hash(nc3) + assert hash(nc3) != hash(nc4) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 979c26303fbd6a2f4044855d989f4a74a4d51ac5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 04:24:30 +0800 Subject: [PATCH 062/988] add aki hash (#3910) * Implement __hash__ on AuthorityKeyIdentifier * Adding dirname to fix build issue on AuthorityKeyIdentifier test * .authority_cert_issuer to str * use a tuple and not a str repr --- src/cryptography/x509/extensions.py | 9 +++++++++ tests/x509/test_x509_ext.py | 11 ++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 01378b38acdd..8880f7449f5f 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -213,6 +213,15 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + if self.authority_cert_issuer is None: + aci = None + else: + aci = tuple(self.authority_cert_issuer) + return hash(( + self.key_identifier, aci, self.authority_cert_serial_number + )) + key_identifier = utils.read_only_property("_key_identifier") authority_cert_issuer = utils.read_only_property("_authority_cert_issuer") authority_cert_serial_number = utils.read_only_property( diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 6010e77da9db..22b4cc5bc76f 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -907,7 +907,6 @@ def test_hash(self): ski3 = x509.SubjectKeyIdentifier( binascii.unhexlify(b"aa8098456f6ff7ff3ac9092384932230498bc980") ) - assert hash(ski1) == hash(ski2) assert hash(ski1) != hash(ski3) @@ -1025,6 +1024,16 @@ def test_ne(self): assert aki != aki5 assert aki != object() + def test_hash(self): + dirname = x509.DirectoryName( + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + ) + aki1 = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) + aki2 = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) + aki3 = x509.AuthorityKeyIdentifier(b"digest", None, None) + assert hash(aki1) == hash(aki2) + assert hash(aki1) != hash(aki3) + class TestBasicConstraints(object): def test_ca_not_boolean(self): From ab96a53bc9020a4d605d57dc972e45df5c8c4862 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 07:42:33 +0800 Subject: [PATCH 063/988] implement __hash__ on CertificatePolicies and its child classes (#3914) --- src/cryptography/x509/extensions.py | 17 +++++++++++ tests/x509/test_x509_ext.py | 45 +++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 8880f7449f5f..9d6b3e79b620 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -597,6 +597,9 @@ def __ne__(self, other): def __getitem__(self, idx): return self._policies[idx] + def __hash__(self): + return hash(tuple(self._policies)) + class PolicyInformation(object): def __init__(self, policy_identifier, policy_qualifiers): @@ -636,6 +639,14 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + if self.policy_qualifiers is not None: + pq = tuple(self.policy_qualifiers) + else: + pq = None + + return hash((self.policy_identifier, pq)) + policy_identifier = utils.read_only_property("_policy_identifier") policy_qualifiers = utils.read_only_property("_policy_qualifiers") @@ -670,6 +681,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash((self.notice_reference, self.explicit_text)) + notice_reference = utils.read_only_property("_notice_reference") explicit_text = utils.read_only_property("_explicit_text") @@ -703,6 +717,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash((self.organization, tuple(self.notice_numbers))) + organization = utils.read_only_property("_organization") notice_numbers = utils.read_only_property("_notice_numbers") diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 22b4cc5bc76f..8d13753d54f8 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -369,6 +369,13 @@ def test_ne(self): assert nr != nr3 assert nr != object() + def test_hash(self): + nr = x509.NoticeReference("org", [1, 2]) + nr2 = x509.NoticeReference("org", [1, 2]) + nr3 = x509.NoticeReference(None, [1, 2]) + assert hash(nr) == hash(nr2) + assert hash(nr) != hash(nr3) + class TestUserNotice(object): def test_notice_reference_invalid(self): @@ -410,6 +417,15 @@ def test_ne(self): assert un != un3 assert un != object() + def test_hash(self): + nr = x509.NoticeReference("org", [1, 2]) + nr2 = x509.NoticeReference("org", [1, 2]) + un = x509.UserNotice(nr, "text") + un2 = x509.UserNotice(nr2, "text") + un3 = x509.UserNotice(None, "text") + assert hash(un) == hash(un2) + assert hash(un) != hash(un3) + class TestPolicyInformation(object): def test_invalid_policy_identifier(self): @@ -477,6 +493,19 @@ def test_ne(self): assert pi != pi3 assert pi != object() + def test_hash(self): + pi = x509.PolicyInformation( + x509.ObjectIdentifier("1.2.3"), + [u"string", x509.UserNotice(None, u"hi")] + ) + pi2 = x509.PolicyInformation( + x509.ObjectIdentifier("1.2.3"), + [u"string", x509.UserNotice(None, u"hi")] + ) + pi3 = x509.PolicyInformation(x509.ObjectIdentifier("1.2.3"), None) + assert hash(pi) == hash(pi2) + assert hash(pi) != hash(pi3) + @pytest.mark.requires_backend_interface(interface=X509Backend) class TestCertificatePolicies(object): @@ -571,6 +600,22 @@ def test_long_oid(self, backend): assert ext.value[0].policy_identifier == oid + def test_hash(self): + pi = x509.PolicyInformation( + x509.ObjectIdentifier("1.2.3"), [u"string"] + ) + cp = x509.CertificatePolicies([pi]) + pi2 = x509.PolicyInformation( + x509.ObjectIdentifier("1.2.3"), [u"string"] + ) + cp2 = x509.CertificatePolicies([pi2]) + pi3 = x509.PolicyInformation( + x509.ObjectIdentifier("1.2.3"), [x509.UserNotice(None, b"text")] + ) + cp3 = x509.CertificatePolicies([pi3]) + assert hash(cp) == hash(cp2) + assert hash(cp) != hash(cp3) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 7b6be923e24481c2db75b3737a3ee07e7f3fb292 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 07:43:07 +0800 Subject: [PATCH 064/988] implement __hash__ on KeyUsage and ExtendedKeyUsage (#3913) * implement __hash__ on KeyUsage and ExtendedKeyUsage * properly use private values and alter test to catch that bug --- src/cryptography/x509/extensions.py | 12 ++++++++ tests/x509/test_x509_ext.py | 48 +++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 9d6b3e79b620..f6957b9dd772 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -755,6 +755,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(tuple(self._usages)) + @utils.register_interface(ExtensionType) class OCSPNoCheck(object): @@ -933,6 +936,15 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(( + self.digital_signature, self.content_commitment, + self.key_encipherment, self.data_encipherment, + self.key_agreement, self.key_cert_sign, + self.crl_sign, self._encipher_only, + self._decipher_only + )) + @utils.register_interface(ExtensionType) class NameConstraints(object): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 8d13753d54f8..62ce9050e8da 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -896,6 +896,43 @@ def test_ne(self): assert ku != ku2 assert ku != object() + def test_hash(self): + ku = x509.KeyUsage( + digital_signature=False, + content_commitment=False, + key_encipherment=False, + data_encipherment=False, + key_agreement=True, + key_cert_sign=False, + crl_sign=False, + encipher_only=False, + decipher_only=True + ) + ku2 = x509.KeyUsage( + digital_signature=False, + content_commitment=False, + key_encipherment=False, + data_encipherment=False, + key_agreement=True, + key_cert_sign=False, + crl_sign=False, + encipher_only=False, + decipher_only=True + ) + ku3 = x509.KeyUsage( + digital_signature=False, + content_commitment=True, + key_encipherment=False, + data_encipherment=False, + key_agreement=False, + key_cert_sign=False, + crl_sign=False, + encipher_only=False, + decipher_only=False + ) + assert hash(ku) == hash(ku2) + assert hash(ku) != hash(ku3) + class TestSubjectKeyIdentifier(object): def test_properties(self): @@ -1177,6 +1214,17 @@ def test_ne(self): assert eku != eku2 assert eku != object() + def test_hash(self): + eku = x509.ExtendedKeyUsage([ + x509.ObjectIdentifier("1.3.6"), x509.ObjectIdentifier("1.3.7") + ]) + eku2 = x509.ExtendedKeyUsage([ + x509.ObjectIdentifier("1.3.6"), x509.ObjectIdentifier("1.3.7") + ]) + eku3 = x509.ExtendedKeyUsage([x509.ObjectIdentifier("1.3.6")]) + assert hash(eku) == hash(eku2) + assert hash(eku) != hash(eku3) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 83bb406138d344cce22c54ef3576516031c90ec6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 11:14:28 +0800 Subject: [PATCH 065/988] add __hash__ to PolicyConstraints and Extension (#3917) --- src/cryptography/x509/extensions.py | 8 ++++++++ tests/x509/test_x509_ext.py | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index f6957b9dd772..0bfe6f92564c 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -554,6 +554,11 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash( + (self.require_explicit_policy, self.inhibit_policy_mapping) + ) + require_explicit_policy = utils.read_only_property( "_require_explicit_policy" ) @@ -1063,6 +1068,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash((self.oid, self.critical, self.value)) + class GeneralNames(object): def __init__(self, general_names): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 62ce9050e8da..db805aa6a5a6 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -91,6 +91,25 @@ def test_ne(self): assert ext1 != ext4 assert ext1 != object() + def test_hash(self): + ext1 = x509.Extension( + ExtensionOID.BASIC_CONSTRAINTS, + False, + x509.BasicConstraints(ca=False, path_length=None) + ) + ext2 = x509.Extension( + ExtensionOID.BASIC_CONSTRAINTS, + False, + x509.BasicConstraints(ca=False, path_length=None) + ) + ext3 = x509.Extension( + ExtensionOID.BASIC_CONSTRAINTS, + False, + x509.BasicConstraints(ca=True, path_length=None) + ) + assert hash(ext1) == hash(ext2) + assert hash(ext1) != hash(ext3) + class TestTLSFeature(object): def test_not_enum_type(self): @@ -2677,6 +2696,13 @@ def test_ne(self): assert pc != pc3 assert pc != object() + def test_hash(self): + pc = x509.PolicyConstraints(2, 1) + pc2 = x509.PolicyConstraints(2, 1) + pc3 = x509.PolicyConstraints(2, None) + assert hash(pc) == hash(pc2) + assert hash(pc) != hash(pc3) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 5e9eeefe201e15f559f51953c8002a966cb9af1e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 11:15:21 +0800 Subject: [PATCH 066/988] add __hash__ to GeneralNames, SAN, IAN, and CertificateIssuer (#3916) --- src/cryptography/x509/extensions.py | 12 ++++++++++ tests/x509/test_x509_ext.py | 34 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 0bfe6f92564c..7a03139f30dc 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1113,6 +1113,9 @@ def __ne__(self, other): def __getitem__(self, idx): return self._general_names[idx] + def __hash__(self): + return hash(tuple(self._general_names)) + @utils.register_interface(ExtensionType) class SubjectAlternativeName(object): @@ -1145,6 +1148,9 @@ def __getitem__(self, idx): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self._general_names) + @utils.register_interface(ExtensionType) class IssuerAlternativeName(object): @@ -1177,6 +1183,9 @@ def __ne__(self, other): def __getitem__(self, idx): return self._general_names[idx] + def __hash__(self): + return hash(self._general_names) + @utils.register_interface(ExtensionType) class CertificateIssuer(object): @@ -1209,6 +1218,9 @@ def __ne__(self, other): def __getitem__(self, idx): return self._general_names[idx] + def __hash__(self): + return hash(self._general_names) + @utils.register_interface(ExtensionType) class CRLReason(object): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index db805aa6a5a6..d121a92b8457 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -285,6 +285,15 @@ def test_get_values_for_type(self): names = ci.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] + def test_hash(self): + ci1 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci2 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci3 = x509.CertificateIssuer( + [x509.UniformResourceIdentifier(b"http://something")] + ) + assert hash(ci1) == hash(ci2) + assert hash(ci1) != hash(ci3) + class TestCRLReason(object): def test_invalid_reason_flags(self): @@ -2052,6 +2061,13 @@ def test_ne(self): assert gns != gns2 assert gns != object() + def test_hash(self): + gns = x509.GeneralNames([x509.DNSName(b"cryptography.io")]) + gns2 = x509.GeneralNames([x509.DNSName(b"cryptography.io")]) + gns3 = x509.GeneralNames([x509.RFC822Name(b"admin@cryptography.io")]) + assert hash(gns) == hash(gns2) + assert hash(gns) != hash(gns3) + class TestIssuerAlternativeName(object): def test_get_values_for_type(self): @@ -2125,6 +2141,15 @@ def test_ne(self): assert san != san2 assert san != object() + def test_hash(self): + ian = x509.IssuerAlternativeName([x509.DNSName(b"cryptography.io")]) + ian2 = x509.IssuerAlternativeName([x509.DNSName(b"cryptography.io")]) + ian3 = x509.IssuerAlternativeName( + [x509.RFC822Name(b"admin@cryptography.io")] + ) + assert hash(ian) == hash(ian2) + assert hash(ian) != hash(ian3) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @@ -2241,6 +2266,15 @@ def test_ne(self): assert san != san2 assert san != object() + def test_hash(self): + san = x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]) + san2 = x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]) + san3 = x509.SubjectAlternativeName( + [x509.RFC822Name(b"admin@cryptography.io")] + ) + assert hash(san) == hash(san2) + assert hash(san) != hash(san3) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 409a0c8d66a074033f7c6359c4f1578c9f479245 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 11:15:58 +0800 Subject: [PATCH 067/988] implement __hash__ on DistributionPoint and CRLDistributionPoints (#3915) --- src/cryptography/x509/extensions.py | 16 +++++++ tests/x509/test_x509_ext.py | 74 +++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 7a03139f30dc..442000e3eed9 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -412,6 +412,9 @@ def __ne__(self, other): def __getitem__(self, idx): return self._distribution_points[idx] + def __hash__(self): + return hash(tuple(self._distribution_points)) + class DistributionPoint(object): def __init__(self, full_name, relative_name, reasons, crl_issuer): @@ -487,6 +490,19 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + if self.full_name is not None: + fn = tuple(self.full_name) + else: + fn = None + + if self.crl_issuer is not None: + crl_issuer = tuple(self.crl_issuer) + else: + crl_issuer = None + + return hash((fn, self.relative_name, self.reasons, crl_issuer)) + full_name = utils.read_only_property("_full_name") relative_name = utils.read_only_property("_relative_name") reasons = utils.read_only_property("_reasons") diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index d121a92b8457..b9400b64f5e1 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -3629,6 +3629,46 @@ def test_repr(self): ">)>])>" ) + def test_hash(self): + dp = x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + None, + frozenset([x509.ReasonFlags.superseded]), + [ + x509.DirectoryName( + x509.Name([ + x509.NameAttribute( + NameOID.COMMON_NAME, u"Important CA" + ) + ]) + ) + ], + ) + dp2 = x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + None, + frozenset([x509.ReasonFlags.superseded]), + [ + x509.DirectoryName( + x509.Name([ + x509.NameAttribute( + NameOID.COMMON_NAME, u"Important CA" + ) + ]) + ) + ], + ) + dp3 = x509.DistributionPoint( + None, + x509.RelativeDistinguishedName([ + x509.NameAttribute(NameOID.COMMON_NAME, u"myCN") + ]), + None, + None, + ) + assert hash(dp) == hash(dp2) + assert hash(dp) != hash(dp3) + class TestCRLDistributionPoints(object): def test_invalid_distribution_points(self): @@ -3780,6 +3820,40 @@ def test_ne(self): assert cdp != cdp4 assert cdp != object() + def test_hash(self): + cdp = x509.CRLDistributionPoints([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + cdp2 = x509.CRLDistributionPoints([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + cdp3 = x509.CRLDistributionPoints([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([x509.ReasonFlags.key_compromise]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + assert hash(cdp) == hash(cdp2) + assert hash(cdp) != hash(cdp3) + def test_indexing(self): ci = x509.CRLDistributionPoints([ x509.DistributionPoint( From d8371a8290d6bcf8f75424aa6a4b1f6502ad5f9a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 14 Sep 2017 20:38:40 +0800 Subject: [PATCH 068/988] add chacha20 test vectors from RFC 7539 (#3918) --- docs/development/test-vectors.rst | 1 + .../ciphers/ChaCha20/rfc7539.txt | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 vectors/cryptography_vectors/ciphers/ChaCha20/rfc7539.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index dc89cafa084b..59dfdf94a077 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -440,6 +440,7 @@ Symmetric ciphers * CAST5 (ECB) from :rfc:`2144`. * CAST5 (CBC, CFB, OFB) generated by this project. See: :doc:`/development/custom-vectors/cast5` +* ChaCha20 from :rfc:`7539`. * ChaCha20Poly1305 from :rfc:`7539`, `OpenSSL's evpciph.txt`_, and the `BoringSSL ChaCha20Poly1305 tests`_. * IDEA (ECB) from the `NESSIE IDEA vectors`_ created by `NESSIE`_. diff --git a/vectors/cryptography_vectors/ciphers/ChaCha20/rfc7539.txt b/vectors/cryptography_vectors/ciphers/ChaCha20/rfc7539.txt new file mode 100644 index 000000000000..c1541cf8bbbf --- /dev/null +++ b/vectors/cryptography_vectors/ciphers/ChaCha20/rfc7539.txt @@ -0,0 +1,23 @@ +# The vectors are from RFC 7539 Appendix A.2. They are reformatted into NIST +# form for our vector loaders. + +COUNT = 0 +KEY = 0000000000000000000000000000000000000000000000000000000000000000 +NONCE = 000000000000000000000000 +INITIAL_BLOCK_COUNTER = 0 +PLAINTEXT = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +CIPHERTEXT = 76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586 + +COUNT = 1 +KEY = 0000000000000000000000000000000000000000000000000000000000000001 +NONCE = 000000000000000000000002 +INITIAL_BLOCK_COUNTER = 1 +PLAINTEXT = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f +CIPHERTEXT = a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221 + +COUNT = 2 +KEY = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0 +NONCE = 000000000000000000000002 +INITIAL_BLOCK_COUNTER = 42 +PLAINTEXT = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e +CIPHERTEXT = 62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1 From b522324c43fbb0c286cdbb46409f7a0ee7173d88 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 15 Sep 2017 02:37:39 -0400 Subject: [PATCH 069/988] bump libressl version (#3920) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 93819ab11130..8742e85889a6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -60,7 +60,7 @@ def configs = [ ], [ label: 'docker', - imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.0', + imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.1', toxenvs: ['py27'], ], [ From e3fc93af73e3ef7c482368f14995985e03b217e4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 19 Sep 2017 01:28:53 -0400 Subject: [PATCH 070/988] Update NIST CAVP url (#3922) --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 59dfdf94a077..e01851fc4040 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -495,7 +495,7 @@ header format (substituting the correct information): .. _`NIST`: https://www.nist.gov/ .. _`IETF`: https://www.ietf.org/ -.. _`NIST CAVP`: http://csrc.nist.gov/groups/STM/cavp/ +.. _`NIST CAVP`: https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program .. _`Bruce Schneier's vectors`: https://www.schneier.com/code/vectors.txt .. _`Camellia page`: https://info.isl.ntt.co.jp/crypt/eng/camellia/ .. _`CRYPTREC`: https://www.cryptrec.go.jp From 8cb1d36690ed823206cc91e5c73147e4ad557d85 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 19 Sep 2017 18:46:21 -0400 Subject: [PATCH 071/988] Update PKITS link (#3923) --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index e01851fc4040..332bc745735e 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -520,7 +520,7 @@ header format (substituting the correct information): .. _`NESSIE`: https://en.wikipedia.org/wiki/NESSIE .. _`Ed25519 website`: https://ed25519.cr.yp.to/software.html .. _`NIST SP-800-38B`: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38b.pdf -.. _`NIST PKI Testing`: http://csrc.nist.gov/groups/ST/crypto_apps_infra/pki/pkitesting.html +.. _`NIST PKI Testing`: https://csrc.nist.gov/Projects/PKI-Testing .. _`testx509.pem`: https://github.com/openssl/openssl/blob/master/test/testx509.pem .. _`DigiCert Global Root G3`: http://cacerts.digicert.com/DigiCertGlobalRootG3.crt .. _`root data`: https://hg.mozilla.org/projects/nss/file/25b2922cc564/security/nss/lib/ckfw/builtins/certdata.txt#l2053 From 872cdea547e55a85b23b1bbdf123a7505e7cd4a4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Sep 2017 08:03:02 +0800 Subject: [PATCH 072/988] remove py26 windows and macOS wheels (#3921) The wheel package is starting to drop support and download counts for them represent less than .02% of downloads for the month. --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 11ba278135d8..ae749cc60390 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -8,15 +8,15 @@ properties([ def configs = [ [ label: 'windows', - versions: ['py26', 'py27', 'py34', 'py35', 'py36'], + versions: ['py27', 'py34', 'py35', 'py36'], ], [ label: 'windows64', - versions: ['py26', 'py27', 'py34', 'py35', 'py36'], + versions: ['py27', 'py34', 'py35', 'py36'], ], [ label: 'sierra', - versions: ['py26', 'py27', 'py34', 'py35', 'py36'], + versions: ['py27', 'py34', 'py35', 'py36'], ], [ label: 'docker', @@ -44,7 +44,6 @@ def build(version, label, imageName) { timeout(time: 30, unit: 'MINUTES') { if (label.contains("windows")) { def pythonPath = [ - py26: "C:\\Python26\\python.exe", py27: "C:\\Python27\\python.exe", py34: "C:\\Python34\\python.exe", py35: "C:\\Python35\\python.exe", @@ -89,7 +88,6 @@ def build(version, label, imageName) { """ } else if (label.contains("sierra")) { def pythonPath = [ - py26: "python2.6", py27: "/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7", py34: "/Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4", py35: "/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5", From ba7041596e428aff296555cacfce82a0cd62f5f9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Sep 2017 08:03:11 +0800 Subject: [PATCH 073/988] add unique identifier test vector (#3925) * add unique identifier test vector * wrap a line I didn't even touch... --- docs/development/test-vectors.rst | 6 ++++-- .../cryptography_vectors/x509/unique_identifier.pem | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 vectors/cryptography_vectors/x509/unique_identifier.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 332bc745735e..e27490d7c152 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -168,8 +168,10 @@ X.509 a basic constraints extension with CA set to false and a path length of zero in violation of :rfc:`5280`. * ``tls-feature-ocsp-staple.pem`` - A certificate issued by Let's Encrypt that - contains a TLS Feature extension with the ``status_request`` feature (commonly - known as OCSP Must-Staple). + contains a TLS Feature extension with the ``status_request`` feature + (commonly known as OCSP Must-Staple). +* ``unique-identifier.pem`` - A certificate containing + a distinguished name with an ``x500UniqueIdentifier``. Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/unique_identifier.pem b/vectors/cryptography_vectors/x509/unique_identifier.pem new file mode 100644 index 000000000000..178fb0a2c7b0 --- /dev/null +++ b/vectors/cryptography_vectors/x509/unique_identifier.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqjCCAVCgAwIBAgIQVHD6IGvy5J65YtdaBbMWLTAKBggqhkjOPQQDAjAaMQsw +CQYDVQQLEwIwNzELMAkGA1UEAxMCVTEwHhcNMTYxMDE5MDAwMDAwWhcNMjYxMDE4 +MjM1OTU5WjA5MRYwFAYDVQQDDA1TY290dGlzaFBvd2VyMQswCQYDVQQLDAIwMjES +MBAGA1UELQMJAHCz1R8wXwABMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvcpe +CGVYsjDGVH8bfnqiV0f7zLT6EHWq0Cp3CDM55mLMEhqApxqiExuk4+vuLRYItver +e6MDZxIduNlhv2+4caNZMFcwDgYDVR0PAQH/BAQDAgeAMBEGA1UdDgQKBAhIY5WA +x6zvpjAdBgNVHSABAf8EEzARMA8GDSqGOgABhI+5DwECAQQwEwYDVR0jBAwwCoAI +RV6x1kMmgNgwCgYIKoZIzj0EAwIDSAAwRQIgYxMeqRLszP2Z1P0e1pMt5sb/DMir ++MvjqA35il7Hgx8CIQC4hpUTmQjB/ALfGC9huk+Gx8tZ6Xiz0fqT7vZZ5J4ntw== +-----END CERTIFICATE----- From 20721c9ad94dbeb42c0bbe7f9a5f4db5e80ad9d0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 20 Sep 2017 04:39:45 -0400 Subject: [PATCH 074/988] Update the rest of the NIST urls to their new HTTPS homes (#3928) --- docs/hazmat/primitives/aead.rst | 2 +- docs/hazmat/primitives/asymmetric/ec.rst | 4 ++-- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/hazmat/primitives/aead.rst b/docs/hazmat/primitives/aead.rst index b4e4eaf5cdbf..3c45b523acb4 100644 --- a/docs/hazmat/primitives/aead.rst +++ b/docs/hazmat/primitives/aead.rst @@ -231,4 +231,4 @@ also support providing integrity for associated data which is not encrypted. when the ciphertext has been changed, but will also occur when the key, nonce, or associated data are wrong. -.. _`recommends a 96-bit IV length`: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf +.. _`recommends a 96-bit IV length`: https://csrc.nist.gov/publications/detail/sp/800-38d/final diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 710c11ca3227..6d02fdce7970 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -669,9 +669,9 @@ in PEM format. ... ) -.. _`FIPS 186-3`: http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf +.. _`FIPS 186-3`: https://csrc.nist.gov/csrc/media/publications/fips/186/3/archive/2009-06-25/documents/fips_186-3.pdf .. _`FIPS 186-4`: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf -.. _`800-56A`: http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf +.. _`800-56A`: https://csrc.nist.gov/publications/detail/sp/800-56a/revised/archive/2007-03-14 .. _`800-56Ar2`: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf .. _`some concern`: https://crypto.stackexchange.com/questions/10263/should-we-trust-the-nist-recommended-ecc-parameters .. _`less than 224 bits`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 9e27540d32f1..822c6a8a30a7 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -709,7 +709,7 @@ Exceptions .. _`described by Colin Percival`: http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html -.. _`recommends a 96-bit IV length`: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf +.. _`recommends a 96-bit IV length`: https://csrc.nist.gov/publications/detail/sp/800-38d/final .. _`NIST SP-800-38D`: http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38D.pdf .. _`Communications Security Establishment`: https://www.cse-cst.gc.ca .. _`encrypt`: https://ssd.eff.org/en/module/what-encryption From 90375552fa703a20e5863253d4cb73ca18ef5fdd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Sep 2017 20:49:03 +0800 Subject: [PATCH 075/988] disable travis mac builders and add a mac jenkins build (#3933) we'll re-enable mac builders when travis recovers and remove the jenkins build --- .travis.yml | 80 ++++++++++++++++++++++++++--------------------------- Jenkinsfile | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4bf00538a3fb..a2cafef2b8ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,46 +49,46 @@ matrix: env: TOXENV=pep8 - python: 3.4 env: TOXENV=py3pep8 - - language: generic - os: osx - # 8.3 is macOS 10.12.x - # see: https://docs.travis-ci.com/user/osx-ci-environment/ - osx_image: xcode8.3 - env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - - language: generic - os: osx - osx_image: xcode8.3 - env: TOXENV=py34 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - - language: generic - os: osx - osx_image: xcode8.3 - env: TOXENV=py35 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - - language: generic - os: osx - osx_image: xcode8.3 - env: TOXENV=py36 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - - language: generic - os: osx - osx_image: xcode8.3 - env: TOXENV=pypy-nocoverage CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 PYPY_VERSION=pypy2.7-5.8.0 - - language: generic - os: osx - osx_image: xcode8.3 - env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=0 - - language: generic - os: osx - # 7.3 is OS X 10.11.x - osx_image: xcode7.3 - env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - - language: generic - os: osx - # 6.4 is OS X 10.10.x - osx_image: xcode6.4 - env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - - language: generic - os: osx - osx_image: xcode8.3 - env: TOXENV=docs CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # # 8.3 is macOS 10.12.x + # # see: https://docs.travis-ci.com/user/osx-ci-environment/ + # osx_image: xcode8.3 + # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # osx_image: xcode8.3 + # env: TOXENV=py34 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # osx_image: xcode8.3 + # env: TOXENV=py35 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # osx_image: xcode8.3 + # env: TOXENV=py36 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # osx_image: xcode8.3 + # env: TOXENV=pypy-nocoverage CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 PYPY_VERSION=pypy2.7-5.8.0 + # - language: generic + # os: osx + # osx_image: xcode8.3 + # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=0 + # - language: generic + # os: osx + # # 7.3 is OS X 10.11.x + # osx_image: xcode7.3 + # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # # 6.4 is OS X 10.10.x + # osx_image: xcode6.4 + # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 + # - language: generic + # os: osx + # osx_image: xcode8.3 + # env: TOXENV=docs CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 install: - ./.travis/install.sh diff --git a/Jenkinsfile b/Jenkinsfile index 8742e85889a6..92b0c7e75561 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,7 +17,7 @@ def configs = [ ], [ label: 'sierra', - toxenvs: ['py27'], + toxenvs: ['py27', 'py36'], ], [ label: 'yosemite', From 53e4505861b00e6fb4fc2c30de23218f80bbfbb1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 20 Sep 2017 09:57:47 -0400 Subject: [PATCH 076/988] Switch NIST PDFs from nvlpubs to csrc which is HTTPS (#3929) --- docs/development/test-vectors.rst | 2 +- docs/hazmat/primitives/asymmetric/dsa.rst | 2 +- docs/hazmat/primitives/asymmetric/ec.rst | 4 ++-- docs/hazmat/primitives/key-derivation-functions.rst | 6 +++--- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index e27490d7c152..aa6327879c21 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -521,7 +521,7 @@ header format (substituting the correct information): .. _`NESSIE IDEA vectors`: https://www.cosic.esat.kuleuven.be/nessie/testvectors/bc/idea/Idea-128-64.verified.test-vectors .. _`NESSIE`: https://en.wikipedia.org/wiki/NESSIE .. _`Ed25519 website`: https://ed25519.cr.yp.to/software.html -.. _`NIST SP-800-38B`: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38b.pdf +.. _`NIST SP-800-38B`: https://csrc.nist.gov/publications/detail/sp/800-38b/archive/2005-05-01 .. _`NIST PKI Testing`: https://csrc.nist.gov/Projects/PKI-Testing .. _`testx509.pem`: https://github.com/openssl/openssl/blob/master/test/testx509.pem .. _`DigiCert Global Root G3`: http://cacerts.digicert.com/DigiCertGlobalRootG3.crt diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index a60881905c33..57b4a960d079 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -443,5 +443,5 @@ Key interfaces .. _`DSA`: https://en.wikipedia.org/wiki/Digital_Signature_Algorithm .. _`public-key`: https://en.wikipedia.org/wiki/Public-key_cryptography -.. _`FIPS 186-4`: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf +.. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final .. _`at least 2048`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 6d02fdce7970..50c38e3e4d19 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -670,9 +670,9 @@ in PEM format. .. _`FIPS 186-3`: https://csrc.nist.gov/csrc/media/publications/fips/186/3/archive/2009-06-25/documents/fips_186-3.pdf -.. _`FIPS 186-4`: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf +.. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final .. _`800-56A`: https://csrc.nist.gov/publications/detail/sp/800-56a/revised/archive/2007-03-14 -.. _`800-56Ar2`: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf +.. _`800-56Ar2`: https://csrc.nist.gov/publications/detail/sp/800-56a/rev-2/final .. _`some concern`: https://crypto.stackexchange.com/questions/10263/should-we-trust-the-nist-recommended-ecc-parameters .. _`less than 224 bits`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf .. _`elliptic curve diffie-hellman is faster than diffie-hellman`: http://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1100&context=cseconfwork diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index ea5f3f882271..0196e438a388 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -897,9 +897,9 @@ Interface .. [#nist] See `NIST SP 800-132`_. -.. _`NIST SP 800-132`: http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf -.. _`NIST SP 800-108`: http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-108.pdf -.. _`NIST SP 800-56Ar2`: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf +.. _`NIST SP 800-132`: https://csrc.nist.gov/publications/detail/sp/800-132/final +.. _`NIST SP 800-108`: https://csrc.nist.gov/publications/detail/sp/800-108/final +.. _`NIST SP 800-56Ar2`: https://csrc.nist.gov/publications/detail/sp/800-56a/rev-2/final .. _`ANSI X9.63:2001`: https://webstore.ansi.org .. _`SEC 1 v2.0`: http://www.secg.org/sec1-v2.pdf .. _`Password Storage Cheat Sheet`: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 822c6a8a30a7..d6479a4434b8 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -710,7 +710,7 @@ Exceptions .. _`described by Colin Percival`: http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html .. _`recommends a 96-bit IV length`: https://csrc.nist.gov/publications/detail/sp/800-38d/final -.. _`NIST SP-800-38D`: http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38D.pdf +.. _`NIST SP-800-38D`: https://csrc.nist.gov/publications/detail/sp/800-38d/final .. _`Communications Security Establishment`: https://www.cse-cst.gc.ca .. _`encrypt`: https://ssd.eff.org/en/module/what-encryption .. _`CRYPTREC`: https://www.cryptrec.go.jp/english/ From ce4d0845f544f8a95600fd8888bf924cd25e2e85 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Sep 2017 22:14:26 +0800 Subject: [PATCH 077/988] correct the docs for CRLReason (#3930) --- docs/x509/reference.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index f07272a6cfd6..2e86cb13c17a 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2319,8 +2319,7 @@ These extensions are only valid within a :class:`RevokedCertificate` object. valid inside :class:`~cryptography.x509.RevokedCertificate` objects. It identifies a reason for the certificate revocation. - :param reason: A value from the - :class:`~cryptography.x509.oid.CRLEntryExtensionOID` enum. + :param reason: An element from :class:`~cryptography.x509.ReasonFlags`. .. attribute:: oid From b5c5bbe478ece57d76e6701fec3021384feb6dd2 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 20 Sep 2017 10:14:56 -0400 Subject: [PATCH 078/988] Mark our custom sphinx extension as parallel safe (#3935) --- docs/cryptography-docs.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/cryptography-docs.py b/docs/cryptography-docs.py index 56baf127757f..238dd69ee358 100644 --- a/docs/cryptography-docs.py +++ b/docs/cryptography-docs.py @@ -59,3 +59,7 @@ def setup(app): latex=(latex_visit_hazmat_node, depart_hazmat_node), ) app.add_directive("hazmat", HazmatDirective) + + return { + "parallel_read_safe": True, + } From d02842b03bf94e9f62e788a2120f02d96a2b0cfd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Sep 2017 23:40:05 +0800 Subject: [PATCH 079/988] add Freshest CRL and Delta CRL Indicator test vectors (#3932) --- docs/development/test-vectors.rst | 4 ++++ .../x509/custom/crl_delta_crl_indicator.pem | 11 +++++++++++ .../x509/custom/freshestcrl.pem | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem create mode 100644 vectors/cryptography_vectors/x509/custom/freshestcrl.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index aa6327879c21..66f7198598da 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -324,6 +324,8 @@ Custom X.509 Vectors is an unknown OID (``1.3.6.1.4.1.8432.1.1.2``). * ``policy_constraints_explicit.pem`` - A self-signed certificate containing a ``policyConstraints`` extension with a ``requireExplicitPolicy`` value. +* ``freshestcrl.pem`` - A self-signed certificate containing a ``freshestCRL`` + extension. Custom X.509 Request Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -383,6 +385,8 @@ Custom X.509 Certificate Revocation List Vectors * ``invalid_signature.pem`` - Contains a CRL with the last signature byte incremented by 1 to produce an invalid signature, and the public key which was used to generate it. +* ``crl_delta_crl_indicator.pem`` - Contains a CRL with the + ``DeltaCRLIndicator`` extension. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem b/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem new file mode 100644 index 000000000000..f49da4c8b60a --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBfTBnAgEBMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEmNyeXB0b2dyYXBo +eS5pbyBDQRcNMDIwMTAxMTIwMTAwWhcNMzAwMTAxMTIwMTAwWqAWMBQwEgYDVR0b +BAsCCQCrVKmM6x8K0jANBgkqhkiG9w0BAQsFAAOCAQEAUEE3Z8rgIZYo1YK0wZ2X +bz9NnnE/X1YZQZ/IO/mSsz/k2d5XhLwa53zMlvX7J3UFEjEp+82b+gCMvgpJzTBq +a/XnifnA8lnFJmPiLB1JgRm2/GsXxkws3ziH5D/6yRdV3MDRQzRg610GayF+LfrF +74kMns0a1TaOfRhw1APiDvJLngElvcutBS3/mgr+SPPdDgFJ++PSrWOdAw4vo4HH +TTxduelWWDag2Bg0L90Td8Cdv57jgbCjSwWPSLqfwq674cDxotYABqtLg1Q5jeg2 +GIzEZqYXWvxMc87pQLRwrxG2+U4p+hDpx3TTIn2uyxDTihXvWKmiqzpOiXJKixe5 +Jw== +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/freshestcrl.pem b/vectors/cryptography_vectors/x509/custom/freshestcrl.pem new file mode 100644 index 000000000000..139c2a845f54 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/freshestcrl.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDGjCCAgKgAwIBAgIBezANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJVUzAe +Fw0wMjAxMDExMjAxMDBaFw0zMDEyMzEwODMwMDBaMA0xCzAJBgNVBAYTAlVTMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwXr8fndHTKpaqDA2FYo/+/e1 +IWhRuiIw5dar/MHGz+9Z6SPqEzC8WTtzgCq2CKbkozBlI6MRa6WqOWYUUXThO2xJ +6beAYuRJ1y77EP1J6R+gi5bQUeeC6fWrxbWm95hIJ6245z2gDyKy79zbduq0btrZ +jtZWYnQ/3GwOM2pdDNuqfcKeU2NeJMh6WyxCFZaAY83raKlyurvB48/wD7moDjcq +TQwskg0ejO4zPORw3C6BRa2wW/Ka7h0k8UHozHhJicWH/G+6zZefPyFjwdcpmzZb +xy/+KEjpZ67R5I3MUVs6UO1N4E/QU4RsoQoiOxDMhBzID96+5E8xFME+iGr1gwID +AQABo4GEMIGBMH8GA1UdLgR4MHYwdKBBoD+GGmh0dHA6Ly9teWhvc3QuY29tL215 +Y2EuY3JshiFodHRwOi8vYmFja3VwLm15aG9zdC5jb20vbXljYS5jcmyBAgVgoiuk +KTAnMQswCQYDVQQGEwJVUzEYMBYGA1UEAwwPY3J5cHRvZ3JhcGh5IENBMA0GCSqG +SIb3DQEBCwUAA4IBAQA0zwxdhbb+rUYNUNVNigzbbHPI314FomvMzXGgn0or7+n4 +L5RJeZ1lB/PL2Iq6nasJb03ikrNguS9/reQSNdZ/mTTYrui5uNavlCICesm8hM7m +z1X/pjnZS/S0WaIgeWrPkRI/tqqE0eFSfDt9qvLvu/2Fj+q+/tLImKPKk1lPqzCQ +QfRFYUGhVk8vvm8rk8l6A6QfrPRF8vA1jZQbZfVrA3sluYIFQLb4G0oClSIKdz+n +tjYsoHwWF00ivnRfFHBW7CNaMOFz5erX1fMPb8w4Fum1lfaFvE8ON3FlPMEYfToo +GHgtF5mM7Gz3OPPU2R6LcJC4IsPSxISFiBHjBJRH +-----END CERTIFICATE----- From 1b86dc527dfecf1795ac28cd6bd32e8cf8725566 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Sep 2017 23:42:34 +0800 Subject: [PATCH 080/988] docs for what bytes means for DNSName, URI, and RFC822Name (#3904) --- docs/glossary.rst | 6 ++++++ docs/x509/reference.rst | 44 ++++++++++++++++++++++++++++++++--------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/docs/glossary.rst b/docs/glossary.rst index a630878c4129..3a1280a60dec 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -79,5 +79,11 @@ Glossary but does not allow access to the key itself. Typically an opaque key is loaded from a `hardware security module`_ (HSM). + A-label + The ASCII compatible encoded (ACE) representation of an + internationalized (unicode) domain name. A-labels begin with the + prefix ``xn--``. To create an A-label from a unicode domain string use + a library like `idna`_. .. _`hardware security module`: https://en.wikipedia.org/wiki/Hardware_security_module +.. _`idna`: https://pypi.org/project/idna/ diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 2e86cb13c17a..71ac9d99dc7f 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1242,13 +1242,18 @@ General Name Classes .. versionadded:: 0.9 - This corresponds to an email address. For example, ``user@example.com``. - ..note:: Starting with version 2.1 unicode input is deprecated. If passing an - internationalized domain name (IDN) you should first IDNA encode the - hostname and then pass the resulting bytes. + email address containing an internationalized domain name (IDN) you + should first IDNA encode the hostname and then pass the resulting + bytes. + + This corresponds to an email address. For example, ``user@example.com``. + + :param bytes value: The email address. If the address contains an + internationalized domain name then it must be encoded to an + :term:`A-label` before being passed. .. attribute:: bytes_value @@ -1256,6 +1261,9 @@ General Name Classes :type: bytes + The value as a byte string. This will contain an :term:`A-label` if + the domain in the address is an internationalized domain name. + .. attribute:: value .. deprecated:: 2.1 @@ -1268,14 +1276,26 @@ General Name Classes .. versionadded:: 0.9 + ..note:: + + Starting with version 2.1 unicode input is deprecated. If passing an + internationalized domain name (IDN) you should first IDNA encode the + hostname and then pass the resulting bytes. + This corresponds to a domain name. For example, ``cryptography.io``. + :param bytes value: The domain name. If it is an internationalized domain + name then it must be encoded to an :term:`A-label` before being passed. + .. attribute:: bytes_value .. versionadded:: 2.1 :type: bytes + The value as a byte string. This will contain an :term:`A-label` if + it is an internationalized domain name. + .. attribute:: value .. deprecated:: 2.1 @@ -1298,14 +1318,17 @@ General Name Classes .. versionadded:: 0.9 - This corresponds to a uniform resource identifier. For example, - ``https://cryptography.io``. - ..note:: Starting with version 2.1 unicode input is deprecated. If passing an - internationalized domain name (IDN) you should first IDNA encode the - hostname and then pass the resulting bytes. + internationalized domain name (IDN) within the URI you should first + IDNA encode the hostname and then pass the resulting bytes. + + This corresponds to a uniform resource identifier. For example, + ``https://cryptography.io``. + + :param bytes value: The URI. If it contains an internationalized domain + name then it must be encoded to an :term:`A-label` before being passed. .. attribute:: bytes_value @@ -1313,6 +1336,9 @@ General Name Classes :type: bytes + The value as a byte string. This will contain an :term:`A-label` if + the URI contains an internationalized domain name. + .. attribute:: value .. deprecated:: 2.1 From 2931b8609427f0dc3b95d70e02804c53057bfbfc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 22 Sep 2017 10:07:10 +0800 Subject: [PATCH 081/988] parametrize a bunch of x509 extension tests that were identical (#3931) --- tests/x509/test_x509.py | 516 +++++++++++----------------------------- 1 file changed, 139 insertions(+), 377 deletions(-) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index e41fdc76afbb..1833a4a27e07 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2051,154 +2051,6 @@ def test_sign_ec_with_md5(self, backend): with pytest.raises(ValueError): builder.sign(private_key, hashes.MD5(), backend) - @pytest.mark.parametrize( - "cdp", - [ - x509.CRLDistributionPoints([ - x509.DistributionPoint( - full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - NameOID.COMMON_NAME, - u"indirect CRL for indirectCRL CA3" - ), - ]), - reasons=None, - crl_issuer=[x509.DirectoryName( - x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - x509.NameAttribute( - NameOID.ORGANIZATION_NAME, - u"Test Certificates 2011" - ), - x509.NameAttribute( - NameOID.ORGANIZATIONAL_UNIT_NAME, - u"indirectCRL CA3 cRLIssuer" - ), - ]) - )], - ) - ]), - x509.CRLDistributionPoints([ - x509.DistributionPoint( - full_name=[x509.DirectoryName( - x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - ]) - )], - relative_name=None, - reasons=None, - crl_issuer=[x509.DirectoryName( - x509.Name([ - x509.NameAttribute( - NameOID.ORGANIZATION_NAME, - u"cryptography Testing" - ), - ]) - )], - ) - ]), - x509.CRLDistributionPoints([ - x509.DistributionPoint( - full_name=[ - x509.UniformResourceIdentifier( - u"http://myhost.com/myca.crl" - ), - x509.UniformResourceIdentifier( - u"http://backup.myhost.com/myca.crl" - ) - ], - relative_name=None, - reasons=frozenset([ - x509.ReasonFlags.key_compromise, - x509.ReasonFlags.ca_compromise - ]), - crl_issuer=[x509.DirectoryName( - x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - x509.NameAttribute( - NameOID.COMMON_NAME, u"cryptography CA" - ), - ]) - )], - ) - ]), - x509.CRLDistributionPoints([ - x509.DistributionPoint( - full_name=[x509.UniformResourceIdentifier( - u"http://domain.com/some.crl" - )], - relative_name=None, - reasons=frozenset([ - x509.ReasonFlags.key_compromise, - x509.ReasonFlags.ca_compromise, - x509.ReasonFlags.affiliation_changed, - x509.ReasonFlags.superseded, - x509.ReasonFlags.privilege_withdrawn, - x509.ReasonFlags.cessation_of_operation, - x509.ReasonFlags.aa_compromise, - x509.ReasonFlags.certificate_hold, - ]), - crl_issuer=None - ) - ]), - x509.CRLDistributionPoints([ - x509.DistributionPoint( - full_name=None, - relative_name=None, - reasons=None, - crl_issuer=[x509.DirectoryName( - x509.Name([ - x509.NameAttribute( - NameOID.COMMON_NAME, u"cryptography CA" - ), - ]) - )], - ) - ]), - x509.CRLDistributionPoints([ - x509.DistributionPoint( - full_name=[x509.UniformResourceIdentifier( - u"http://domain.com/some.crl" - )], - relative_name=None, - reasons=frozenset([x509.ReasonFlags.aa_compromise]), - crl_issuer=None - ) - ]) - ] - ) - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_crl_distribution_points(self, backend, cdp): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - builder = x509.CertificateBuilder().serial_number( - 4444444 - ).issuer_name(x509.Name([ - x509.NameAttribute(NameOID.LOCALITY_NAME, u'Austin'), - ])).subject_name(x509.Name([ - x509.NameAttribute(NameOID.LOCALITY_NAME, u'Austin'), - ])).public_key( - subject_private_key.public_key() - ).add_extension( - cdp, - critical=False, - ).not_valid_before( - datetime.datetime(2002, 1, 1, 12, 1) - ).not_valid_after( - datetime.datetime(2030, 12, 31, 8, 30) - ) - - cert = builder.sign(issuer_private_key, hashes.SHA1(), backend) - - ext = cert.extensions.get_extension_for_oid( - ExtensionOID.CRL_DISTRIBUTION_POINTS - ) - assert ext.critical is False - assert ext.value == cdp - @pytest.mark.requires_backend_interface(interface=DSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_build_cert_with_dsa_private_key(self, backend): @@ -2316,8 +2168,10 @@ def test_build_cert_with_rsa_key_too_small(self, backend): with pytest.raises(ValueError): builder.sign(issuer_private_key, hashes.SHA512(), backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) @pytest.mark.parametrize( - "cp", + "add_ext", [ x509.CertificatePolicies([ x509.PolicyInformation( @@ -2372,198 +2226,23 @@ def test_build_cert_with_rsa_key_too_small(self, backend): ) ] ) - ]) - ] - ) - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_certificate_policies(self, cp, backend): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) - not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) - - cert = x509.CertificateBuilder().subject_name( - x509.Name([x509.NameAttribute(x509.OID_COUNTRY_NAME, u'US')]) - ).issuer_name( - x509.Name([x509.NameAttribute(x509.OID_COUNTRY_NAME, u'US')]) - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after - ).public_key( - subject_private_key.public_key() - ).serial_number( - 123 - ).add_extension( - cp, critical=False - ).sign(issuer_private_key, hashes.SHA256(), backend) - - ext = cert.extensions.get_extension_for_oid( - x509.OID_CERTIFICATE_POLICIES - ) - assert ext.value == cp - - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_issuer_alt_name(self, backend): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) - not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) - - cert = x509.CertificateBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after - ).public_key( - subject_private_key.public_key() - ).serial_number( - 123 - ).add_extension( + ]), x509.IssuerAlternativeName([ x509.DNSName(b"myissuer"), x509.RFC822Name(u"email@domain.com"), - ]), critical=False - ).sign(issuer_private_key, hashes.SHA256(), backend) - - ext = cert.extensions.get_extension_for_oid( - ExtensionOID.ISSUER_ALTERNATIVE_NAME - ) - assert ext.critical is False - assert ext.value == x509.IssuerAlternativeName([ - x509.DNSName(b"myissuer"), - x509.RFC822Name(u"email@domain.com"), - ]) - - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_extended_key_usage(self, backend): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) - not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) - - cert = x509.CertificateBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after - ).public_key( - subject_private_key.public_key() - ).serial_number( - 123 - ).add_extension( + ]), x509.ExtendedKeyUsage([ ExtendedKeyUsageOID.CLIENT_AUTH, ExtendedKeyUsageOID.SERVER_AUTH, ExtendedKeyUsageOID.CODE_SIGNING, - ]), critical=False - ).sign(issuer_private_key, hashes.SHA256(), backend) - - eku = cert.extensions.get_extension_for_oid( - ExtensionOID.EXTENDED_KEY_USAGE - ) - assert eku.critical is False - assert eku.value == x509.ExtendedKeyUsage([ - ExtendedKeyUsageOID.CLIENT_AUTH, - ExtendedKeyUsageOID.SERVER_AUTH, - ExtendedKeyUsageOID.CODE_SIGNING, - ]) - - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_inhibit_any_policy(self, backend): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) - not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) - - cert = x509.CertificateBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after - ).public_key( - subject_private_key.public_key() - ).serial_number( - 123 - ).add_extension( - x509.InhibitAnyPolicy(3), critical=False - ).sign(issuer_private_key, hashes.SHA256(), backend) - - ext = cert.extensions.get_extension_for_oid( - ExtensionOID.INHIBIT_ANY_POLICY - ) - assert ext.value == x509.InhibitAnyPolicy(3) - - @pytest.mark.parametrize( - "pc", - [ - x509.PolicyConstraints( - require_explicit_policy=None, - inhibit_policy_mapping=1 - ), - x509.PolicyConstraints( - require_explicit_policy=3, - inhibit_policy_mapping=1 - ), - x509.PolicyConstraints( - require_explicit_policy=0, - inhibit_policy_mapping=None - ), - ] - ) - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_policy_constraints(self, backend, pc): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) - not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) - - cert = x509.CertificateBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after - ).public_key( - subject_private_key.public_key() - ).serial_number( - 123 - ).add_extension( - pc, critical=False - ).sign(issuer_private_key, hashes.SHA256(), backend) - - ext = cert.extensions.get_extension_for_class( - x509.PolicyConstraints - ) - assert ext.critical is False - assert ext.value == pc - - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - @pytest.mark.parametrize( - "nc", - [ + ]), + x509.InhibitAnyPolicy(3), + x509.TLSFeature([x509.TLSFeatureType.status_request]), + x509.TLSFeature([x509.TLSFeatureType.status_request_v2]), + x509.TLSFeature([ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2 + ]), x509.NameConstraints( permitted_subtrees=[ x509.IPAddress(ipaddress.IPv4Network(u"192.168.0.0/24")), @@ -2590,50 +2269,133 @@ def test_policy_constraints(self, backend, pc): permitted_subtrees=None, excluded_subtrees=[x509.DNSName(b"name.local")] ), + x509.PolicyConstraints( + require_explicit_policy=None, + inhibit_policy_mapping=1 + ), + x509.PolicyConstraints( + require_explicit_policy=3, + inhibit_policy_mapping=1 + ), + x509.PolicyConstraints( + require_explicit_policy=0, + inhibit_policy_mapping=None + ), + x509.CRLDistributionPoints([ + x509.DistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + NameOID.COMMON_NAME, + u"indirect CRL for indirectCRL CA3" + ), + ]), + reasons=None, + crl_issuer=[x509.DirectoryName( + x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute( + NameOID.ORGANIZATION_NAME, + u"Test Certificates 2011" + ), + x509.NameAttribute( + NameOID.ORGANIZATIONAL_UNIT_NAME, + u"indirectCRL CA3 cRLIssuer" + ), + ]) + )], + ) + ]), + x509.CRLDistributionPoints([ + x509.DistributionPoint( + full_name=[x509.DirectoryName( + x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + ]) + )], + relative_name=None, + reasons=None, + crl_issuer=[x509.DirectoryName( + x509.Name([ + x509.NameAttribute( + NameOID.ORGANIZATION_NAME, + u"cryptography Testing" + ), + ]) + )], + ) + ]), + x509.CRLDistributionPoints([ + x509.DistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl" + ), + x509.UniformResourceIdentifier( + u"http://backup.myhost.com/myca.crl" + ) + ], + relative_name=None, + reasons=frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise + ]), + crl_issuer=[x509.DirectoryName( + x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography CA" + ), + ]) + )], + ) + ]), + x509.CRLDistributionPoints([ + x509.DistributionPoint( + full_name=[x509.UniformResourceIdentifier( + u"http://domain.com/some.crl" + )], + relative_name=None, + reasons=frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.affiliation_changed, + x509.ReasonFlags.superseded, + x509.ReasonFlags.privilege_withdrawn, + x509.ReasonFlags.cessation_of_operation, + x509.ReasonFlags.aa_compromise, + x509.ReasonFlags.certificate_hold, + ]), + crl_issuer=None + ) + ]), + x509.CRLDistributionPoints([ + x509.DistributionPoint( + full_name=None, + relative_name=None, + reasons=None, + crl_issuer=[x509.DirectoryName( + x509.Name([ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography CA" + ), + ]) + )], + ) + ]), + x509.CRLDistributionPoints([ + x509.DistributionPoint( + full_name=[x509.UniformResourceIdentifier( + u"http://domain.com/some.crl" + )], + relative_name=None, + reasons=frozenset([x509.ReasonFlags.aa_compromise]), + crl_issuer=None + ) + ]), ] ) - def test_name_constraints(self, nc, backend): - issuer_private_key = RSA_KEY_2048.private_key(backend) - subject_private_key = RSA_KEY_2048.private_key(backend) - - not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) - not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) - - cert = x509.CertificateBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after - ).public_key( - subject_private_key.public_key() - ).serial_number( - 123 - ).add_extension( - nc, critical=False - ).sign(issuer_private_key, hashes.SHA256(), backend) - - ext = cert.extensions.get_extension_for_oid( - ExtensionOID.NAME_CONSTRAINTS - ) - assert ext.value == nc - - @pytest.mark.requires_backend_interface(interface=RSABackend) - @pytest.mark.requires_backend_interface(interface=X509Backend) - @pytest.mark.parametrize( - "add_ext", - [ - x509.TLSFeature([x509.TLSFeatureType.status_request]), - x509.TLSFeature([x509.TLSFeatureType.status_request_v2]), - x509.TLSFeature([ - x509.TLSFeatureType.status_request, - x509.TLSFeatureType.status_request_v2 - ]) - ] - ) - def test_tls_feature(self, add_ext, backend): + def test_ext(self, add_ext, backend): issuer_private_key = RSA_KEY_2048.private_key(backend) subject_private_key = RSA_KEY_2048.private_key(backend) @@ -2656,7 +2418,7 @@ def test_tls_feature(self, add_ext, backend): add_ext, critical=False ).sign(issuer_private_key, hashes.SHA256(), backend) - ext = cert.extensions.get_extension_for_class(x509.TLSFeature) + ext = cert.extensions.get_extension_for_class(type(add_ext)) assert ext.critical is False assert ext.value == add_ext From 2fc5849960032a246f869ed1a5d7597d64169cfa Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 22 Sep 2017 10:10:33 +0800 Subject: [PATCH 082/988] refactor rsa signature/verification logic to remove duplication (#3903) --- .../hazmat/backends/openssl/rsa.py | 125 +++++------------- 1 file changed, 34 insertions(+), 91 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 05b4e9dcea93..1b6ebfd7751f 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -187,47 +187,40 @@ def _rsa_sig_determine_padding(backend, key, padding, algorithm): return padding_enum -def _rsa_sig_sign(backend, padding, padding_enum, algorithm, private_key, - data): - evp_md = backend._lib.EVP_get_digestbyname( - algorithm.name.encode("ascii")) +def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): + padding_enum = _rsa_sig_determine_padding(backend, key, padding, algorithm) + evp_md = backend._lib.EVP_get_digestbyname(algorithm.name.encode("ascii")) backend.openssl_assert(evp_md != backend._ffi.NULL) - - pkey_ctx = backend._lib.EVP_PKEY_CTX_new( - private_key._evp_pkey, backend._ffi.NULL - ) + pkey_ctx = backend._lib.EVP_PKEY_CTX_new(key._evp_pkey, backend._ffi.NULL) backend.openssl_assert(pkey_ctx != backend._ffi.NULL) pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) - res = backend._lib.EVP_PKEY_sign_init(pkey_ctx) + res = init_func(pkey_ctx) backend.openssl_assert(res == 1) - res = backend._lib.EVP_PKEY_CTX_set_signature_md( - pkey_ctx, evp_md) + res = backend._lib.EVP_PKEY_CTX_set_signature_md(pkey_ctx, evp_md) backend.openssl_assert(res > 0) - - res = backend._lib.EVP_PKEY_CTX_set_rsa_padding( - pkey_ctx, padding_enum) + res = backend._lib.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding_enum) backend.openssl_assert(res > 0) if isinstance(padding, PSS): res = backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( - pkey_ctx, - _get_rsa_pss_salt_length( - padding, - private_key, - algorithm, - ) + pkey_ctx, _get_rsa_pss_salt_length(padding, key, algorithm) ) backend.openssl_assert(res > 0) mgf1_md = backend._lib.EVP_get_digestbyname( - padding._mgf._algorithm.name.encode("ascii")) - backend.openssl_assert( - mgf1_md != backend._ffi.NULL - ) - res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md( - pkey_ctx, mgf1_md + padding._mgf._algorithm.name.encode("ascii") ) + backend.openssl_assert(mgf1_md != backend._ffi.NULL) + res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) backend.openssl_assert(res > 0) + return pkey_ctx + + +def _rsa_sig_sign(backend, padding, algorithm, private_key, data): + pkey_ctx = _rsa_sig_setup( + backend, padding, algorithm, private_key, data, + backend._lib.EVP_PKEY_sign_init + ) buflen = backend._ffi.new("size_t *") res = backend._lib.EVP_PKEY_sign( pkey_ctx, @@ -258,52 +251,13 @@ def _rsa_sig_sign(backend, padding, padding_enum, algorithm, private_key, return backend._ffi.buffer(buf)[:] -def _rsa_sig_verify(backend, padding, padding_enum, algorithm, public_key, - signature, data): - evp_md = backend._lib.EVP_get_digestbyname( - algorithm.name.encode("ascii")) - backend.openssl_assert(evp_md != backend._ffi.NULL) - - pkey_ctx = backend._lib.EVP_PKEY_CTX_new( - public_key._evp_pkey, backend._ffi.NULL +def _rsa_sig_verify(backend, padding, algorithm, public_key, signature, data): + pkey_ctx = _rsa_sig_setup( + backend, padding, algorithm, public_key, data, + backend._lib.EVP_PKEY_verify_init ) - backend.openssl_assert(pkey_ctx != backend._ffi.NULL) - pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) - res = backend._lib.EVP_PKEY_verify_init(pkey_ctx) - backend.openssl_assert(res == 1) - res = backend._lib.EVP_PKEY_CTX_set_signature_md( - pkey_ctx, evp_md) - backend.openssl_assert(res > 0) - - res = backend._lib.EVP_PKEY_CTX_set_rsa_padding( - pkey_ctx, padding_enum) - backend.openssl_assert(res > 0) - if isinstance(padding, PSS): - res = backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( - pkey_ctx, - _get_rsa_pss_salt_length( - padding, - public_key, - algorithm, - ) - ) - backend.openssl_assert(res > 0) - mgf1_md = backend._lib.EVP_get_digestbyname( - padding._mgf._algorithm.name.encode("ascii")) - backend.openssl_assert( - mgf1_md != backend._ffi.NULL - ) - res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md( - pkey_ctx, mgf1_md - ) - backend.openssl_assert(res > 0) - res = backend._lib.EVP_PKEY_verify( - pkey_ctx, - signature, - len(signature), - data, - len(data) + pkey_ctx, signature, len(signature), data, len(data) ) # The previous call can return negative numbers in the event of an # error. This is not a signature failure but we need to fail if it @@ -321,9 +275,10 @@ def __init__(self, backend, private_key, padding, algorithm): self._backend = backend self._private_key = private_key - self._padding_enum = _rsa_sig_determine_padding( - backend, private_key, padding, algorithm - ) + # We now call _rsa_sig_determine_padding in _rsa_sig_setup. However + # we need to make a pointless call to it here so we maintain the + # API of erroring on init with this context if the values are invalid. + _rsa_sig_determine_padding(backend, private_key, padding, algorithm) self._padding = padding self._algorithm = algorithm self._hash_ctx = hashes.Hash(self._algorithm, self._backend) @@ -335,7 +290,6 @@ def finalize(self): return _rsa_sig_sign( self._backend, self._padding, - self._padding_enum, self._algorithm, self._private_key, self._hash_ctx.finalize() @@ -349,10 +303,10 @@ def __init__(self, backend, public_key, signature, padding, algorithm): self._public_key = public_key self._signature = signature self._padding = padding - - self._padding_enum = _rsa_sig_determine_padding( - backend, public_key, padding, algorithm - ) + # We now call _rsa_sig_determine_padding in _rsa_sig_setup. However + # we need to make a pointless call to it here so we maintain the + # API of erroring on init with this context if the values are invalid. + _rsa_sig_determine_padding(backend, public_key, padding, algorithm) padding = padding self._algorithm = algorithm @@ -365,7 +319,6 @@ def verify(self): return _rsa_sig_verify( self._backend, self._padding, - self._padding_enum, self._algorithm, self._public_key, self._signature, @@ -456,16 +409,10 @@ def private_bytes(self, encoding, format, encryption_algorithm): ) def sign(self, data, padding, algorithm): - padding_enum = _rsa_sig_determine_padding( - self._backend, self, padding, algorithm - ) data, algorithm = _calculate_digest_and_algorithm( self._backend, data, algorithm ) - return _rsa_sig_sign( - self._backend, padding, padding_enum, - algorithm, self, data - ) + return _rsa_sig_sign(self._backend, padding, algorithm, self, data) @utils.register_interface(RSAPublicKeyWithSerialization) @@ -521,13 +468,9 @@ def public_bytes(self, encoding, format): ) def verify(self, signature, data, padding, algorithm): - padding_enum = _rsa_sig_determine_padding( - self._backend, self, padding, algorithm - ) data, algorithm = _calculate_digest_and_algorithm( self._backend, data, algorithm ) return _rsa_sig_verify( - self._backend, padding, padding_enum, algorithm, self, - signature, data + self._backend, padding, algorithm, self, signature, data ) From 5e3cc98473ad54db390736ac81bb74210e85056d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 22 Sep 2017 21:29:36 +0800 Subject: [PATCH 083/988] support delta crl indicator extension (#3936) This is an extension for CRLs --- CHANGELOG.rst | 1 + docs/x509/reference.rst | 32 +++++++++++++++++++ .../hazmat/backends/openssl/decode_asn1.py | 7 ++++ .../hazmat/backends/openssl/encode_asn1.py | 7 ++-- src/cryptography/x509/__init__.py | 5 +-- src/cryptography/x509/extensions.py | 28 ++++++++++++++++ src/cryptography/x509/oid.py | 2 ++ tests/x509/test_x509.py | 13 ++++++++ tests/x509/test_x509_crlbuilder.py | 1 + tests/x509/test_x509_ext.py | 30 +++++++++++++++++ 10 files changed, 121 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 51488ce77f62..d239d754bc1f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -41,6 +41,7 @@ Changelog * Added support for using labels with :class:`~cryptography.hazmat.primitives.asymmetric.padding.OAEP` when using OpenSSL 1.0.2 or greater. +* Add support for the :class:`~cryptography.x509.DeltaCRLIndicator` extension. * Add support for the :class:`~cryptography.x509.TLSFeature` extension. This is commonly used for enabling ``OCSP Must-Staple`` in certificates. diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 71ac9d99dc7f..dea7ee3b6b6f 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1954,6 +1954,30 @@ X.509 Extensions :attr:`~cryptography.x509.oid.ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS`. +.. class:: DeltaCRLIndicator(crl_number) + + .. versionadded:: 2.1 + + The delta CRL indicator is a CRL extension that identifies a CRL as being + a delta CRL. Delta CRLs contain updates to revocation information + previously distributed, rather than all the information that would appear + in a complete CRL. + + :param int crl_number: The CRL number of the complete CRL that the + delta CRL is updating. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns + :attr:`~cryptography.x509.oid.ExtensionOID.DELTA_CRL_INDICATOR`. + + .. attribute:: crl_number + + :type: int + + .. class:: AuthorityInformationAccess(descriptions) .. versionadded:: 0.9 @@ -2749,6 +2773,14 @@ instances. The following common OIDs are available as constants. the ``CRLNumber`` extension type. This extension only has meaning for certificate revocation lists. + .. attribute:: DELTA_CRL_INDICATOR + + .. versionadded:: 2.1 + + Corresponds to the dotted string ``"2.5.29.27"``. The identifier for + the ``DeltaCRLIndicator`` extension type. This extension only has + meaning for certificate revocation lists. + .. attribute:: PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS .. versionadded:: 1.9 diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 6ed4aeb7f1cb..1326a94e23d3 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -152,6 +152,12 @@ def _decode_crl_number(backend, ext): return x509.CRLNumber(_asn1_integer_to_int(backend, asn1_int)) +def _decode_delta_crl_indicator(backend, ext): + asn1_int = backend._ffi.cast("ASN1_INTEGER *", ext) + asn1_int = backend._ffi.gc(asn1_int, backend._lib.ASN1_INTEGER_free) + return x509.DeltaCRLIndicator(_asn1_integer_to_int(backend, asn1_int)) + + class _X509ExtensionParser(object): def __init__(self, ext_count, get_ext, handlers): self.ext_count = ext_count @@ -742,6 +748,7 @@ def _parse_asn1_generalized_time(backend, generalized_time): _CRL_EXTENSION_HANDLERS = { ExtensionOID.CRL_NUMBER: _decode_crl_number, + ExtensionOID.DELTA_CRL_INDICATOR: _decode_delta_crl_indicator, ExtensionOID.AUTHORITY_KEY_IDENTIFIER: _decode_authority_key_identifier, ExtensionOID.ISSUER_ALTERNATIVE_NAME: _decode_issuer_alt_name, ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 6d9f95678970..5ceb29c0e7e7 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -133,8 +133,8 @@ def _encode_name_entry(backend, attribute): return name_entry -def _encode_crl_number(backend, crl_number): - return _encode_asn1_int_gc(backend, crl_number.crl_number) +def _encode_crl_number_delta_crl_indicator(backend, ext): + return _encode_asn1_int_gc(backend, ext.crl_number) def _encode_crl_reason(backend, crl_reason): @@ -598,7 +598,8 @@ def _encode_general_subtree(backend, subtrees): ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( _encode_authority_information_access ), - ExtensionOID.CRL_NUMBER: _encode_crl_number, + ExtensionOID.CRL_NUMBER: _encode_crl_number_delta_crl_indicator, + ExtensionOID.DELTA_CRL_INDICATOR: _encode_crl_number_delta_crl_indicator, } _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS = { diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index 176ed8ca6406..e168adb7f9a8 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -18,8 +18,8 @@ AccessDescription, AuthorityInformationAccess, AuthorityKeyIdentifier, BasicConstraints, CRLDistributionPoints, CRLNumber, CRLReason, CertificateIssuer, CertificatePolicies, - DistributionPoint, DuplicateExtension, ExtendedKeyUsage, Extension, - ExtensionNotFound, ExtensionType, Extensions, GeneralNames, + DeltaCRLIndicator, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, + Extension, ExtensionNotFound, ExtensionType, Extensions, GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, PolicyInformation, PrecertificateSignedCertificateTimestamps, ReasonFlags, @@ -119,6 +119,7 @@ "load_der_x509_crl", "random_serial_number", "InvalidVersion", + "DeltaCRLIndicator", "DuplicateExtension", "ExtensionNotFound", "UnsupportedGeneralNameType", diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 442000e3eed9..beb20bad260a 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -375,6 +375,34 @@ def __hash__(self): return hash((self.ca, self.path_length)) +@utils.register_interface(ExtensionType) +class DeltaCRLIndicator(object): + oid = ExtensionOID.DELTA_CRL_INDICATOR + + def __init__(self, crl_number): + if not isinstance(crl_number, six.integer_types): + raise TypeError("crl_number must be an integer") + + self._crl_number = crl_number + + crl_number = utils.read_only_property("_crl_number") + + def __eq__(self, other): + if not isinstance(other, DeltaCRLIndicator): + return NotImplemented + + return self.crl_number == other.crl_number + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.crl_number) + + def __repr__(self): + return "".format(self) + + @utils.register_interface(ExtensionType) class CRLDistributionPoints(object): oid = ExtensionOID.CRL_DISTRIBUTION_POINTS diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 7f8c90317468..fedea310f217 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -87,6 +87,7 @@ class ExtensionOID(object): OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5") TLS_FEATURE = ObjectIdentifier("1.3.6.1.5.5.7.1.24") CRL_NUMBER = ObjectIdentifier("2.5.29.20") + DELTA_CRL_INDICATOR = ObjectIdentifier("2.5.29.27") PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ( ObjectIdentifier("1.3.6.1.4.1.11129.2.4.2") ) @@ -256,6 +257,7 @@ class CertificatePoliciesOID(object): ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", ExtensionOID.CRL_NUMBER: "cRLNumber", + ExtensionOID.DELTA_CRL_INDICATOR: "deltaCRLIndicator", ExtensionOID.TLS_FEATURE: "TLSFeature", AuthorityInformationAccessOID.OCSP: "OCSP", AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers", diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 1833a4a27e07..d0ce46d8d02d 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -232,6 +232,19 @@ def test_extensions(self, backend): x509.UniformResourceIdentifier(b"https://cryptography.io"), ]) + def test_delta_crl_indicator(self, backend): + crl = _load_cert( + os.path.join("x509", "custom", "crl_delta_crl_indicator.pem"), + x509.load_pem_x509_crl, + backend + ) + + dci = crl.extensions.get_extension_for_oid( + ExtensionOID.DELTA_CRL_INDICATOR + ) + assert dci.value == x509.DeltaCRLIndicator(12345678901234567890) + assert dci.critical is False + def test_signature(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), diff --git a/tests/x509/test_x509_crlbuilder.py b/tests/x509/test_x509_crlbuilder.py index b90805ff5e1b..e90fd3fd8300 100644 --- a/tests/x509/test_x509_crlbuilder.py +++ b/tests/x509/test_x509_crlbuilder.py @@ -209,6 +209,7 @@ def test_sign_empty_list(self, backend): "extension", [ x509.CRLNumber(13), + x509.DeltaCRLIndicator(12345678901234567890), x509.AuthorityKeyIdentifier( b"\xc3\x9c\xf3\xfc\xd3F\x084\xbb\xceF\x7f\xa0|[\xf3\xe2\x08" b"\xcbY", diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index b9400b64f5e1..9f0b1b0b1cce 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -326,6 +326,36 @@ def test_repr(self): ) +class TestDeltaCRLIndicator(object): + def test_not_int(self): + with pytest.raises(TypeError): + x509.DeltaCRLIndicator("notanint") + + def test_eq(self): + delta1 = x509.DeltaCRLIndicator(1) + delta2 = x509.DeltaCRLIndicator(1) + assert delta1 == delta2 + + def test_ne(self): + delta1 = x509.DeltaCRLIndicator(1) + delta2 = x509.DeltaCRLIndicator(2) + assert delta1 != delta2 + assert delta1 != object() + + def test_repr(self): + delta1 = x509.DeltaCRLIndicator(2) + assert repr(delta1) == ( + "" + ) + + def test_hash(self): + delta1 = x509.DeltaCRLIndicator(1) + delta2 = x509.DeltaCRLIndicator(1) + delta3 = x509.DeltaCRLIndicator(2) + assert hash(delta1) == hash(delta2) + assert hash(delta1) != hash(delta3) + + class TestInvalidityDate(object): def test_invalid_invalidity_date(self): with pytest.raises(TypeError): From b76bcf88bd272dcde26858c936a743a229aefd5a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 24 Sep 2017 08:44:12 +0800 Subject: [PATCH 084/988] FreshestCRL extension support (#3937) * add freshest CRL support * add tests * add changelog * add tests for FreshestCRL generation --- CHANGELOG.rst | 1 + docs/x509/reference.rst | 23 ++ .../hazmat/backends/openssl/decode_asn1.py | 13 +- .../hazmat/backends/openssl/encode_asn1.py | 7 +- src/cryptography/x509/__init__.py | 7 +- src/cryptography/x509/extensions.py | 41 ++++ tests/x509/test_x509.py | 32 +++ tests/x509/test_x509_ext.py | 227 ++++++++++++++++++ 8 files changed, 344 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d239d754bc1f..a56c67b94560 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -45,6 +45,7 @@ Changelog * Add support for the :class:`~cryptography.x509.TLSFeature` extension. This is commonly used for enabling ``OCSP Must-Staple`` in certificates. +* Add support for the :class:`~cryptography.x509.FreshestCRL` extension. .. _v2-0-3: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index dea7ee3b6b6f..951e6b7dab0a 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2027,6 +2027,24 @@ X.509 Extensions Where to access the information defined by the access method. +.. class:: FreshestCRL(distribution_points) + + .. versionadded:: 2.1 + + The freshest CRL extension (also known as Delta CRL Distribution Point) + identifies how delta CRL information is obtained. It is an iterable, + containing one or more :class:`DistributionPoint` instances. + + :param list distribution_points: A list of :class:`DistributionPoint` + instances. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns + :attr:`~cryptography.x509.oid.ExtensionOID.FRESHEST_CRL`. + .. class:: CRLDistributionPoints(distribution_points) .. versionadded:: 0.9 @@ -2792,6 +2810,11 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"2.5.29.36"``. The identifier for the :class:`~cryptography.x509.PolicyConstraints` extension type. + .. attribute:: FRESHEST_CRL + + Corresponds to the dotted string ``"2.5.29.46"``. The identifier for the + :class:`~cryptography.x509.FreshestCRL` extension type. + .. class:: CRLEntryExtensionOID diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 1326a94e23d3..ec55a9e83133 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -463,7 +463,7 @@ def _decode_extended_key_usage(backend, sk): _DISTPOINT_TYPE_RELATIVENAME = 1 -def _decode_crl_distribution_points(backend, cdps): +def _decode_dist_points(backend, cdps): cdps = backend._ffi.cast("Cryptography_STACK_OF_DIST_POINT *", cdps) cdps = backend._ffi.gc(cdps, backend._lib.CRL_DIST_POINTS_free) @@ -554,9 +554,19 @@ def _decode_crl_distribution_points(backend, cdps): ) ) + return dist_points + + +def _decode_crl_distribution_points(backend, cdps): + dist_points = _decode_dist_points(backend, cdps) return x509.CRLDistributionPoints(dist_points) +def _decode_freshest_crl(backend, cdps): + dist_points = _decode_dist_points(backend, cdps) + return x509.FreshestCRL(dist_points) + + def _decode_inhibit_any_policy(backend, asn1_int): asn1_int = backend._ffi.cast("ASN1_INTEGER *", asn1_int) asn1_int = backend._ffi.gc(asn1_int, backend._lib.ASN1_INTEGER_free) @@ -728,6 +738,7 @@ def _parse_asn1_generalized_time(backend, generalized_time): ), ExtensionOID.CERTIFICATE_POLICIES: _decode_certificate_policies, ExtensionOID.CRL_DISTRIBUTION_POINTS: _decode_crl_distribution_points, + ExtensionOID.FRESHEST_CRL: _decode_freshest_crl, ExtensionOID.OCSP_NO_CHECK: _decode_ocsp_no_check, ExtensionOID.INHIBIT_ANY_POLICY: _decode_inhibit_any_policy, ExtensionOID.ISSUER_ALTERNATIVE_NAME: _decode_issuer_alt_name, diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 5ceb29c0e7e7..6b86768356c5 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -484,10 +484,10 @@ def _encode_extended_key_usage(backend, extended_key_usage): } -def _encode_crl_distribution_points(backend, crl_distribution_points): +def _encode_cdps_freshest_crl(backend, cdps): cdp = backend._lib.sk_DIST_POINT_new_null() cdp = backend._ffi.gc(cdp, backend._lib.sk_DIST_POINT_free) - for point in crl_distribution_points: + for point in cdps: dp = backend._lib.DIST_POINT_new() backend.openssl_assert(dp != backend._ffi.NULL) @@ -585,7 +585,8 @@ def _encode_general_subtree(backend, subtrees): ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( _encode_authority_information_access ), - ExtensionOID.CRL_DISTRIBUTION_POINTS: _encode_crl_distribution_points, + ExtensionOID.CRL_DISTRIBUTION_POINTS: _encode_cdps_freshest_crl, + ExtensionOID.FRESHEST_CRL: _encode_cdps_freshest_crl, ExtensionOID.INHIBIT_ANY_POLICY: _encode_inhibit_any_policy, ExtensionOID.OCSP_NO_CHECK: _encode_ocsp_nocheck, ExtensionOID.NAME_CONSTRAINTS: _encode_name_constraints, diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index e168adb7f9a8..224c9af6d79b 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -19,9 +19,9 @@ AuthorityKeyIdentifier, BasicConstraints, CRLDistributionPoints, CRLNumber, CRLReason, CertificateIssuer, CertificatePolicies, DeltaCRLIndicator, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, - Extension, ExtensionNotFound, ExtensionType, Extensions, GeneralNames, - InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, KeyUsage, - NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, + Extension, ExtensionNotFound, ExtensionType, Extensions, FreshestCRL, + GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, + KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, PolicyInformation, PrecertificateSignedCertificateTimestamps, ReasonFlags, SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice @@ -131,6 +131,7 @@ "Extensions", "Extension", "ExtendedKeyUsage", + "FreshestCRL", "TLSFeature", "TLSFeatureType", "OCSPNoCheck", diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index beb20bad260a..eb4b927fbbbd 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -444,6 +444,47 @@ def __hash__(self): return hash(tuple(self._distribution_points)) +@utils.register_interface(ExtensionType) +class FreshestCRL(object): + oid = ExtensionOID.FRESHEST_CRL + + def __init__(self, distribution_points): + distribution_points = list(distribution_points) + if not all( + isinstance(x, DistributionPoint) for x in distribution_points + ): + raise TypeError( + "distribution_points must be a list of DistributionPoint " + "objects" + ) + + self._distribution_points = distribution_points + + def __iter__(self): + return iter(self._distribution_points) + + def __len__(self): + return len(self._distribution_points) + + def __repr__(self): + return "".format(self._distribution_points) + + def __eq__(self, other): + if not isinstance(other, FreshestCRL): + return NotImplemented + + return self._distribution_points == other._distribution_points + + def __ne__(self, other): + return not self == other + + def __getitem__(self, idx): + return self._distribution_points[idx] + + def __hash__(self): + return hash(tuple(self._distribution_points)) + + class DistributionPoint(object): def __init__(self, full_name, relative_name, reasons, crl_issuer): if full_name and relative_name: diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index d0ce46d8d02d..06aef66642f6 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2406,6 +2406,38 @@ def test_build_cert_with_rsa_key_too_small(self, backend): crl_issuer=None ) ]), + x509.FreshestCRL([ + x509.DistributionPoint( + full_name=[x509.UniformResourceIdentifier( + u"http://domain.com/some.crl" + )], + relative_name=None, + reasons=frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.affiliation_changed, + x509.ReasonFlags.superseded, + x509.ReasonFlags.privilege_withdrawn, + x509.ReasonFlags.cessation_of_operation, + x509.ReasonFlags.aa_compromise, + x509.ReasonFlags.certificate_hold, + ]), + crl_issuer=None + ) + ]), + x509.FreshestCRL([ + x509.DistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + NameOID.COMMON_NAME, + u"indirect CRL for indirectCRL CA3" + ), + ]), + reasons=None, + crl_issuer=None, + ) + ]), ] ) def test_ext(self, add_ext, backend): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 9f0b1b0b1cce..11e06eafb439 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -3700,6 +3700,193 @@ def test_hash(self): assert hash(dp) != hash(dp3) +class TestFreshestCRL(object): + def test_invalid_distribution_points(self): + with pytest.raises(TypeError): + x509.FreshestCRL(["notadistributionpoint"]) + + def test_iter_len(self): + fcrl = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"http://domain")], + None, None, None + ), + ]) + assert len(fcrl) == 1 + assert list(fcrl) == [ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"http://domain")], + None, None, None + ), + ] + + def test_iter_input(self): + points = [ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"http://domain")], + None, None, None + ), + ] + fcrl = x509.FreshestCRL(iter(points)) + assert list(fcrl) == points + + def test_repr(self): + fcrl = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([x509.ReasonFlags.key_compromise]), + None + ), + ]) + if six.PY3: + assert repr(fcrl) == ( + "], relative" + "_name=None, reasons=frozenset({}), crl_issuer=None)>])>" + ) + else: + assert repr(fcrl) == ( + "], relative" + "_name=None, reasons=frozenset([]), crl_issuer=None)>])>" + ) + + def test_eq(self): + fcrl = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + fcrl2 = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + assert fcrl == fcrl2 + + def test_ne(self): + fcrl = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + fcrl2 = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain2")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + fcrl3 = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([x509.ReasonFlags.key_compromise]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + fcrl4 = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing2")], + ), + ]) + assert fcrl != fcrl2 + assert fcrl != fcrl3 + assert fcrl != fcrl4 + assert fcrl != object() + + def test_hash(self): + fcrl = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + fcrl2 = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + ]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + fcrl3 = x509.FreshestCRL([ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(b"ftp://domain")], + None, + frozenset([x509.ReasonFlags.key_compromise]), + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + ]) + assert hash(fcrl) == hash(fcrl2) + assert hash(fcrl) != hash(fcrl3) + + def test_indexing(self): + fcrl = x509.FreshestCRL([ + x509.DistributionPoint( + None, None, None, + [x509.UniformResourceIdentifier(b"uri://thing")], + ), + x509.DistributionPoint( + None, None, None, + [x509.UniformResourceIdentifier(b"uri://thing2")], + ), + x509.DistributionPoint( + None, None, None, + [x509.UniformResourceIdentifier(b"uri://thing3")], + ), + x509.DistributionPoint( + None, None, None, + [x509.UniformResourceIdentifier(b"uri://thing4")], + ), + x509.DistributionPoint( + None, None, None, + [x509.UniformResourceIdentifier(b"uri://thing5")], + ), + ]) + assert fcrl[-1] == fcrl[4] + assert fcrl[2:6:2] == [fcrl[2], fcrl[4]] + + class TestCRLDistributionPoints(object): def test_invalid_distribution_points(self): with pytest.raises(TypeError): @@ -4150,6 +4337,46 @@ def test_crl_empty_hostname(self, backend): ]) +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestFreshestCRLExtension(object): + def test_vector(self, backend): + cert = _load_cert( + os.path.join( + "x509", "custom", "freshestcrl.pem" + ), + x509.load_pem_x509_certificate, + backend + ) + + fcrl = cert.extensions.get_extension_for_class(x509.FreshestCRL).value + assert fcrl == x509.FreshestCRL([ + x509.DistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + b'http://myhost.com/myca.crl' + ), + x509.UniformResourceIdentifier( + b'http://backup.myhost.com/myca.crl' + ) + ], + relative_name=None, + reasons=frozenset([ + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.key_compromise + ]), + crl_issuer=[x509.DirectoryName( + x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography CA" + ), + ]) + )] + ) + ]) + + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestOCSPNoCheckExtension(object): From 7bb0210ef9e4cd7c822ea3864bd7b18f3877c24b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 25 Sep 2017 21:52:04 -0400 Subject: [PATCH 085/988] blacklist yet another version of sphinx (#3940) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 692313fb02a9..e69ffee72ea0 100644 --- a/setup.py +++ b/setup.py @@ -290,7 +290,7 @@ def run_tests(self): "doc8", "pyenchant >= 1.6.11", "readme_renderer >= 16.0", - "sphinx != 1.6.1, != 1.6.2, != 1.6.3", + "sphinx != 1.6.1, != 1.6.2, != 1.6.3, != 1.6.4", "sphinx_rtd_theme", "sphinxcontrib-spelling", ], From 72c92f5ed1a3fe1b5196e0247bbe4cbe5e93c1a7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 26 Sep 2017 10:23:24 +0800 Subject: [PATCH 086/988] both parse and encode the ASN1 string type for Name attributes (#3896) * both parse and encode the ASN1 string type for Name attributes Previously cryptography encoded everything (except country names) as UTF8String. This caused problems with chain building in libraries like NSS where the subject and issuer are expected to match byte-for-byte. With this change we now parse and store the ASN1 string type as a private _type in NameAttribute. We then use this to encode when issuing a new certificate. This allows the CertificateBuilder to properly construct an identical issuer and fixes the issue with NSS. * make the sentinel private too --- CHANGELOG.rst | 2 + .../hazmat/backends/openssl/backend.py | 6 -- .../hazmat/backends/openssl/decode_asn1.py | 4 +- .../hazmat/backends/openssl/encode_asn1.py | 14 +---- src/cryptography/x509/name.py | 46 +++++++++++++-- tests/x509/test_x509.py | 58 +++++++++++++++++++ 6 files changed, 107 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a56c67b94560..6b4d53876691 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -41,6 +41,8 @@ Changelog * Added support for using labels with :class:`~cryptography.hazmat.primitives.asymmetric.padding.OAEP` when using OpenSSL 1.0.2 or greater. +* Improved compatibility with NSS when issuing certificates from an issuer + that has a subject with non-``UTF8String`` string types. * Add support for the :class:`~cryptography.x509.DeltaCRLIndicator` extension. * Add support for the :class:`~cryptography.x509.TLSFeature` extension. This is commonly used for enabling ``OCSP Must-Staple`` in diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 3a889344c340..ede35ec0ea81 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -95,12 +95,6 @@ def __init__(self): self._ffi = self._binding.ffi self._lib = self._binding.lib - # Set the default string mask for encoding ASN1 strings to UTF8. This - # is the default for newer OpenSSLs for several years (1.0.1h+) and is - # recommended in RFC 2459. - res = self._lib.ASN1_STRING_set_default_mask_asc(b"utf8only") - self.openssl_assert(res == 1) - self._cipher_registry = {} self._register_default_ciphers() self.activate_osrandom_engine() diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index ec55a9e83133..2665fb2269e8 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -11,6 +11,7 @@ from cryptography import x509 from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM +from cryptography.x509.name import _ASN1_TYPE_TO_ENUM from cryptography.x509.oid import ( CRLEntryExtensionOID, CertificatePoliciesOID, ExtensionOID ) @@ -51,8 +52,9 @@ def _decode_x509_name_entry(backend, x509_name_entry): backend.openssl_assert(data != backend._ffi.NULL) value = _asn1_string_to_utf8(backend, data) oid = _obj2txt(backend, obj) + type = _ASN1_TYPE_TO_ENUM[data.type] - return x509.NameAttribute(x509.ObjectIdentifier(oid), value) + return x509.NameAttribute(x509.ObjectIdentifier(oid), value, type) def _decode_x509_name(backend, x509_name): diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 6b86768356c5..e45e105015c1 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -14,7 +14,7 @@ _CRL_ENTRY_REASON_ENUM_TO_CODE, _DISTPOINT_TYPE_FULLNAME, _DISTPOINT_TYPE_RELATIVENAME ) -from cryptography.x509.oid import CRLEntryExtensionOID, ExtensionOID, NameOID +from cryptography.x509.oid import CRLEntryExtensionOID, ExtensionOID def _encode_asn1_int(backend, x): @@ -118,17 +118,9 @@ def _encode_sk_name_entry(backend, attributes): def _encode_name_entry(backend, attribute): value = attribute.value.encode('utf8') obj = _txt2obj_gc(backend, attribute.oid.dotted_string) - if attribute.oid in [ - NameOID.COUNTRY_NAME, NameOID.JURISDICTION_COUNTRY_NAME - ]: - # Per RFC5280 Appendix A.1 countryName should be encoded as - # PrintableString, not UTF8String. EV Guidelines section 9.2.5 says - # jurisdictionCountryName follows the same rules as countryName. - type = backend._lib.MBSTRING_ASC - else: - type = backend._lib.MBSTRING_UTF8 + name_entry = backend._lib.X509_NAME_ENTRY_create_by_OBJ( - backend._ffi.NULL, obj, type, value, -1 + backend._ffi.NULL, obj, attribute._type.value, value, -1 ) return name_entry diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 108b60ccae28..2fbaee918e4a 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -4,14 +4,33 @@ from __future__ import absolute_import, division, print_function +from enum import Enum + import six from cryptography import utils from cryptography.x509.oid import NameOID, ObjectIdentifier +class _ASN1Type(Enum): + UTF8String = 12 + NumericString = 18 + PrintableString = 19 + T61String = 20 + IA5String = 22 + UTCTime = 23 + GeneralizedTime = 24 + VisibleString = 26 + UniversalString = 28 + BMPString = 30 + + +_ASN1_TYPE_TO_ENUM = dict((i.value, i) for i in _ASN1Type) +_SENTINEL = object() + + class NameAttribute(object): - def __init__(self, oid, value): + def __init__(self, oid, value, _type=_SENTINEL): if not isinstance(oid, ObjectIdentifier): raise TypeError( "oid argument must be an ObjectIdentifier instance." @@ -22,16 +41,33 @@ def __init__(self, oid, value): "value argument must be a text type." ) - if oid == NameOID.COUNTRY_NAME and len(value.encode("utf8")) != 2: - raise ValueError( - "Country name must be a 2 character country code" - ) + if ( + oid == NameOID.COUNTRY_NAME or + oid == NameOID.JURISDICTION_COUNTRY_NAME + ): + if len(value.encode("utf8")) != 2: + raise ValueError( + "Country name must be a 2 character country code" + ) + + if _type == _SENTINEL: + _type = _ASN1Type.PrintableString if len(value) == 0: raise ValueError("Value cannot be an empty string") + # Set the default string type for encoding ASN1 strings to UTF8. This + # is the default for newer OpenSSLs for several years (1.0.1h+) and is + # recommended in RFC 2459. + if _type == _SENTINEL: + _type = _ASN1Type.UTF8String + + if not isinstance(_type, _ASN1Type): + raise TypeError("_type must be from the _ASN1Type enum") + self._oid = oid self._value = value + self._type = _type oid = utils.read_only_property("_oid") value = utils.read_only_property("_value") diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 06aef66642f6..0ce0a63255f2 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -28,6 +28,7 @@ from cryptography.hazmat.primitives.asymmetric.utils import ( decode_dss_signature ) +from cryptography.x509.name import _ASN1Type from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, NameOID, SignatureAlgorithmOID @@ -1496,6 +1497,43 @@ def test_build_cert(self, backend): x509.DNSName(b"cryptography.io"), ] + def test_build_cert_private_type_encoding(self, backend): + issuer_private_key = RSA_KEY_2048.private_key(backend) + subject_private_key = RSA_KEY_2048.private_key(backend) + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + name = x509.Name([ + x509.NameAttribute( + NameOID.STATE_OR_PROVINCE_NAME, u'Texas', + _ASN1Type.PrintableString), + x509.NameAttribute(NameOID.LOCALITY_NAME, u'Austin'), + x509.NameAttribute( + NameOID.COMMON_NAME, u'cryptography.io', _ASN1Type.IA5String), + ]) + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name( + name + ).subject_name( + name + ).public_key( + subject_private_key.public_key() + ).not_valid_before( + not_valid_before + ).not_valid_after(not_valid_after) + cert = builder.sign(issuer_private_key, hashes.SHA256(), backend) + + for dn in (cert.subject, cert.issuer): + assert dn.get_attributes_for_oid( + NameOID.STATE_OR_PROVINCE_NAME + )[0]._type == _ASN1Type.PrintableString + assert dn.get_attributes_for_oid( + NameOID.STATE_OR_PROVINCE_NAME + )[0]._type == _ASN1Type.PrintableString + assert dn.get_attributes_for_oid( + NameOID.LOCALITY_NAME + )[0]._type == _ASN1Type.UTF8String + def test_build_cert_printable_string_country_name(self, backend): issuer_private_key = RSA_KEY_2048.private_key(backend) subject_private_key = RSA_KEY_2048.private_key(backend) @@ -3628,6 +3666,26 @@ def test_init_empty_value(self): with pytest.raises(ValueError): x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'') + def test_country_name_type(self): + na = x509.NameAttribute(NameOID.COUNTRY_NAME, u"US") + assert na._type == _ASN1Type.PrintableString + na2 = x509.NameAttribute( + NameOID.COUNTRY_NAME, u"US", _ASN1Type.IA5String + ) + assert na2._type == _ASN1Type.IA5String + + def test_types(self): + na = x509.NameAttribute(NameOID.COMMON_NAME, u"common") + assert na._type == _ASN1Type.UTF8String + na2 = x509.NameAttribute( + NameOID.COMMON_NAME, u"common", _ASN1Type.IA5String + ) + assert na2._type == _ASN1Type.IA5String + + def test_invalid_type(self): + with pytest.raises(TypeError): + x509.NameAttribute(NameOID.COMMON_NAME, u"common", "notanenum") + def test_eq(self): assert x509.NameAttribute( x509.ObjectIdentifier('2.999.1'), u'value' From e6859232d40a0dbc0c3b7f6bdde0e035ccc45374 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 26 Sep 2017 20:03:53 -0400 Subject: [PATCH 087/988] Update the list of macOS versions we test on to match reality (#3942) --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index e2ef1b6273fd..51caefd0d4dd 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -15,7 +15,7 @@ PyPy 5.3+ on these operating systems. * x86-64 CentOS 7.x * x86-64 FreeBSD 11 -* macOS 10.12 Sierra, 10.11 El Capitan, 10.10 Yosemite, 10.9 Mavericks +* macOS 10.12 Sierra, 10.11 El Capitan * x86-64 Ubuntu 14.04, 16.04, and rolling * x86-64 Debian Wheezy (7.x), Jessie (8.x), Stretch (9.x), and Sid (unstable) * x86-64 Alpine (latest) From ba61c2738e5a79480d135c280316e29080a4a777 Mon Sep 17 00:00:00 2001 From: Scott Sturdivant Date: Tue, 26 Sep 2017 19:29:55 -0600 Subject: [PATCH 088/988] Expose FIPS funcs for OpenSSL. (#3939) * Expose FIPS funcs for OpenSSL. * Remove FIPS customization / conditionals. It seems that the FIPS functions are always defined, regardless of if the FIPS module is present. * Do not include FIPS_selftest_check func. * Libressl does not have FIPS. --- src/_cffi_src/build_openssl.py | 1 + src/_cffi_src/openssl/fips.py | 28 +++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 8 ++++++ 3 files changed, 37 insertions(+) create mode 100644 src/_cffi_src/openssl/fips.py diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 86ee5007752b..7ec235ff211d 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -76,6 +76,7 @@ def _extra_compile_args(platform): "engine", "err", "evp", + "fips", "hmac", "nid", "objects", diff --git a/src/_cffi_src/openssl/fips.py b/src/_cffi_src/openssl/fips.py new file mode 100644 index 000000000000..c92bca494be0 --- /dev/null +++ b/src/_cffi_src/openssl/fips.py @@ -0,0 +1,28 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +""" + +TYPES = """ +static const long Cryptography_HAS_FIPS; +""" + +FUNCTIONS = """ +int FIPS_mode_set(int); +int FIPS_mode(void); +""" + +CUSTOMIZATIONS = """ +#if CRYPTOGRAPHY_IS_LIBRESSL +static const long Cryptography_HAS_FIPS = 0; +int (*FIPS_mode_set)(int) = NULL; +int (*FIPS_mode)(void) = NULL; +#else +static const long Cryptography_HAS_FIPS = 1; +#endif +""" diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 8eb67760989e..866cf4a66339 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -243,6 +243,13 @@ def cryptography_has_evp_pkey_get_set_tls_encodedpoint(): ] +def cryptography_has_fips(): + return [ + "FIPS_set_mode", + "FIPS_mode", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -292,4 +299,5 @@ def cryptography_has_evp_pkey_get_set_tls_encodedpoint(): "Cryptography_HAS_EVP_PKEY_get_set_tls_encodedpoint": ( cryptography_has_evp_pkey_get_set_tls_encodedpoint ), + "Cryptography_HAS_FIPS": cryptography_has_fips, } From 62ebb429fe94693e5b94480025f3f3e0556b83b1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 28 Sep 2017 23:46:49 +0800 Subject: [PATCH 089/988] add ChaCha20 support (#3919) * add ChaCha20 support * review feedback * 256 divided by 8 is what again? * ... --- CHANGELOG.rst | 5 ++ .../primitives/symmetric-encryption.rst | 49 +++++++++++++++ .../hazmat/backends/openssl/backend.py | 7 ++- .../hazmat/backends/openssl/ciphers.py | 2 + .../hazmat/primitives/ciphers/algorithms.py | 24 ++++++++ tests/hazmat/primitives/test_chacha20.py | 60 +++++++++++++++++++ 6 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 tests/hazmat/primitives/test_chacha20.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6b4d53876691..91e450b8e3fe 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -33,6 +33,11 @@ Changelog :attr:`~cryptography.x509.RFC822Name.value` attribute was deprecated, users should use :attr:`~cryptography.x509.RFC822Name.bytes_value` to access the raw value. +* Added support for + :class:`~cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20`. In + most cases users should choose + :class:`~cryptography.hazmat.primitives.ciphers.aead.ChaCha20Poly1305` + rather than using this unauthenticated form. * Added :meth:`~cryptography.x509.CertificateRevocationList.is_signature_valid` to :class:`~cryptography.x509.CertificateRevocationList`. * Support :class:`~cryptography.hazmat.primitives.hashes.BLAKE2b` and diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index d6479a4434b8..10a349b1006d 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -104,6 +104,55 @@ Algorithms :param bytes key: The secret key. This must be kept secret. Either ``128``, ``192``, or ``256`` bits long. +.. class:: ChaCha20(key) + + .. versionadded:: 2.1 + + .. note:: + + In most cases users should use + :class:`~cryptography.hazmat.primitives.ciphers.aead.ChaCha20Poly1305` + instead of this class. `ChaCha20` alone does not provide integrity + so it must be combined with a MAC to be secure. + :class:`~cryptography.hazmat.primitives.ciphers.aead.ChaCha20Poly1305` + does this for you. + + ChaCha20 is a stream cipher used in several IETF protocols. It is + standardized in :rfc:`7539`. + + :param bytes key: The secret key. This must be kept secret. ``256`` bits + (32 bytes) in length. + + :param bytes nonce: Should be unique, a :term:`nonce`. It is + critical to never reuse a ``nonce`` with a given key. Any reuse of a + nonce with the same key compromises the security of every message + encrypted with that key. The nonce does not need to be kept secret + and may be included with the ciphertext. This must be ``128`` bits in + length. + + .. note:: + + In :rfc:`7539` the nonce is defined as a 96-bit value that is later + concatenated with a block counter (encoded as a 32-bit + little-endian). If you have a separate nonce and block counter + you will need to concatenate it yourself before passing it. For + example if you have an initial block counter of 2 and a 96-bit + nonce the concatenated nonce would be + ``struct.pack(">> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes + >>> from cryptography.hazmat.backends import default_backend + >>> nonce = os.urandom(16) + >>> algorithm = algorithms.ChaCha20(key, nonce) + >>> cipher = Cipher(algorithm, mode=None, backend=default_backend()) + >>> encryptor = cipher.encryptor() + >>> ct = encryptor.update(b"a secret message") + >>> decryptor = cipher.decryptor() + >>> decryptor.update(ct) + 'a secret message' + .. class:: TripleDES(key) Triple DES (Data Encryption Standard), sometimes referred to as 3DES, is a diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ede35ec0ea81..2cbfca2cad41 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -58,7 +58,7 @@ MGF1, OAEP, PKCS1v15, PSS ) from cryptography.hazmat.primitives.ciphers.algorithms import ( - AES, ARC4, Blowfish, CAST5, Camellia, IDEA, SEED, TripleDES + AES, ARC4, Blowfish, CAST5, Camellia, ChaCha20, IDEA, SEED, TripleDES ) from cryptography.hazmat.primitives.ciphers.modes import ( CBC, CFB, CFB8, CTR, ECB, GCM, OFB @@ -258,6 +258,11 @@ def _register_default_ciphers(self): type(None), GetCipherByName("rc4") ) + self.register_cipher_adapter( + ChaCha20, + type(None), + GetCipherByName("chacha20") + ) def create_symmetric_encryption_ctx(self, cipher, mode): return _CipherContext(self, cipher, mode, _CipherContext._ENCRYPT) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index e141e8ecd536..dfb33a0707dd 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -59,6 +59,8 @@ def __init__(self, backend, cipher, mode, operation): iv_nonce = mode.initialization_vector elif isinstance(mode, modes.ModeWithNonce): iv_nonce = mode.nonce + elif isinstance(cipher, modes.ModeWithNonce): + iv_nonce = cipher.nonce else: iv_nonce = self._backend._ffi.NULL # begin init with cipher and operation type diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index c193f7979f38..6e5eb313d8fb 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -8,6 +8,7 @@ from cryptography.hazmat.primitives.ciphers import ( BlockCipherAlgorithm, CipherAlgorithm ) +from cryptography.hazmat.primitives.ciphers.modes import ModeWithNonce def _verify_key_size(algorithm, key): @@ -138,3 +139,26 @@ def __init__(self, key): @property def key_size(self): return len(self.key) * 8 + + +@utils.register_interface(CipherAlgorithm) +@utils.register_interface(ModeWithNonce) +class ChaCha20(object): + name = "ChaCha20" + key_sizes = frozenset([256]) + + def __init__(self, key, nonce): + self.key = _verify_key_size(self, key) + if not isinstance(nonce, bytes): + raise TypeError("nonce must be bytes") + + if len(nonce) != 16: + raise ValueError("nonce must be 128-bits (16 bytes)") + + self._nonce = nonce + + nonce = utils.read_only_property("_nonce") + + @property + def key_size(self): + return len(self.key) * 8 diff --git a/tests/hazmat/primitives/test_chacha20.py b/tests/hazmat/primitives/test_chacha20.py new file mode 100644 index 000000000000..16ef97ed096a --- /dev/null +++ b/tests/hazmat/primitives/test_chacha20.py @@ -0,0 +1,60 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii +import os +import struct + +import pytest + +from cryptography.hazmat.backends.interfaces import CipherBackend +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms + +from .utils import _load_all_params +from ...utils import load_nist_vectors + + +@pytest.mark.supported( + only_if=lambda backend: backend.cipher_supported( + algorithms.ChaCha20(b"\x00" * 32, b"0" * 16), None + ), + skip_message="Does not support ChaCha20", +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +class TestChaCha20(object): + @pytest.mark.parametrize( + "vector", + _load_all_params( + os.path.join("ciphers", "ChaCha20"), + ["rfc7539.txt"], + load_nist_vectors + ) + ) + def test_vectors(self, vector, backend): + key = binascii.unhexlify(vector["key"]) + nonce = binascii.unhexlify(vector["nonce"]) + ibc = struct.pack(" Date: Sat, 30 Sep 2017 21:22:07 -0400 Subject: [PATCH 090/988] Declare that 2.1 is the last version to support Python 2.6 (#3944) * Declare that 2.1 is the last version to support Python 2.6 * It's the Final Countdown! --- CHANGELOG.rst | 2 ++ docs/installation.rst | 4 ++-- src/cryptography/__init__.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 91e450b8e3fe..81aab1ba4537 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,8 @@ Changelog .. note:: This version is not yet released and is under active development. +* **FINAL DEPRECATION** Python 2.6 support is deprecated, and will be removed + in the next release of ``cryptography``. * **BACKWARDS INCOMPATIBLE:** ``Whirlpool``, ``RIPEMD160``, and ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. diff --git a/docs/installation.rst b/docs/installation.rst index 51caefd0d4dd..70668656d0a8 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -22,8 +22,8 @@ PyPy 5.3+ on these operating systems. * 32-bit and 64-bit Python on 64-bit Windows Server 2012 .. warning:: - Python 2.6 is no longer supported by the Python core team. A future version - of cryptography will drop support for this version. + Python 2.6 is no longer supported by the Python core team. The next release + of ``cryptography`` will drop support for Python 2.6. We test compiling with ``clang`` as well as ``gcc`` and use the following OpenSSL releases: diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index 940c66bcb78a..e5c34a271b44 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -21,7 +21,7 @@ if sys.version_info[:2] == (2, 6): warnings.warn( "Python 2.6 is no longer supported by the Python core team, please " - "upgrade your Python. A future version of cryptography will drop " + "upgrade your Python. The next version of cryptography will drop " "support for Python 2.6", DeprecationWarning ) From a397d75a1e091299d012035655bdc30376378b4c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 2 Oct 2017 10:03:20 +0800 Subject: [PATCH 091/988] Add support for AES XTS (#3900) * Add support for AES XTS We drop the non-byte aligned test vectors because according to NIST http://csrc.nist.gov/groups/STM/cavp/documents/aes/XTSVS.pdf "An implementation may support a data unit length that is not a multiple of 8 bits." OpenSSL does not support this, so we can't use those test vectors. * fix docs and pep8 * docs fix * the spellchecker is so frustrating * add note about AES 192 for XTS (it's not supported) * docs work * enforce key length on ECB mode in AES as well (thanks XTS) * a few more words about why we exclude some test vectors for XTS --- CHANGELOG.rst | 4 +- .../primitives/symmetric-encryption.rst | 41 +++++++++++++ docs/spelling_wordlist.txt | 2 + .../hazmat/backends/openssl/backend.py | 8 ++- .../hazmat/backends/openssl/ciphers.py | 2 + .../hazmat/primitives/ciphers/algorithms.py | 3 +- .../hazmat/primitives/ciphers/modes.py | 59 ++++++++++++++++--- tests/hazmat/primitives/test_aes.py | 36 ++++++++++- tests/hazmat/primitives/test_ciphers.py | 24 ++++++++ 9 files changed, 168 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 81aab1ba4537..a4441b85beb5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -45,6 +45,9 @@ Changelog * Support :class:`~cryptography.hazmat.primitives.hashes.BLAKE2b` and :class:`~cryptography.hazmat.primitives.hashes.BLAKE2s` with :class:`~cryptography.hazmat.primitives.hmac.HMAC`. +* Added support for + :class:`~cryptography.hazmat.primitives.ciphers.modes.XTS` mode for + AES. * Added support for using labels with :class:`~cryptography.hazmat.primitives.asymmetric.padding.OAEP` when using OpenSSL 1.0.2 or greater. @@ -56,7 +59,6 @@ Changelog certificates. * Add support for the :class:`~cryptography.x509.FreshestCRL` extension. - .. _v2-0-3: 2.0.3 - 2017-08-03 diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 10a349b1006d..2635e753c6cc 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -469,6 +469,32 @@ Modes a secret message! +.. class:: XTS(tweak) + + .. versionadded:: 2.1 + + .. warning:: + + XTS mode is meant for disk encryption and should not be used in other + contexts. ``cryptography`` only supports XTS mode with + :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. + + .. note:: + + AES XTS keys are double length. This means that to do AES-128 + encryption in XTS mode you need a 256-bit key. Similarly, AES-256 + requires passing a 512-bit key. AES 192 is not supported in XTS mode. + + XTS (XEX-based tweaked-codebook mode with ciphertext stealing) is a mode + of operation for the AES block cipher that is used for `disk encryption`_. + + **This mode does not require padding.** + + :param bytes tweak: The tweak is a 16 byte value typically derived from + something like the disk sector number. A given ``(tweak, key)`` pair + should not be reused, although doing so is less catastrophic than + in CTR mode. + Insecure modes -------------- @@ -744,6 +770,20 @@ Interfaces used by the symmetric cipher modes described in Exact requirements of the tag are described by the documentation of individual modes. + +.. class:: ModeWithTweak + + .. versionadded:: 2.1 + + A cipher mode with a tweak. + + .. attribute:: tweak + + :type: bytes + + Exact requirements of the tweak are described by the documentation of + individual modes. + Exceptions ~~~~~~~~~~ @@ -766,3 +806,4 @@ Exceptions .. _`significant patterns in the output`: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29 .. _`International Data Encryption Algorithm`: https://en.wikipedia.org/wiki/International_Data_Encryption_Algorithm .. _`OpenPGP`: http://openpgp.org +.. _`disk encryption`: https://en.wikipedia.org/wiki/Disk_encryption_theory#XTS diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 5eb896e35efe..f0cfc88ea8ca 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -11,6 +11,7 @@ Botan Capitan Changelog ciphertext +codebook committer committers conda @@ -99,3 +100,4 @@ Verisign wildcard WoSign Xcode +XEX diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 2cbfca2cad41..6abf4ecc8e37 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -61,7 +61,7 @@ AES, ARC4, Blowfish, CAST5, Camellia, ChaCha20, IDEA, SEED, TripleDES ) from cryptography.hazmat.primitives.ciphers.modes import ( - CBC, CFB, CFB8, CTR, ECB, GCM, OFB + CBC, CFB, CFB8, CTR, ECB, GCM, OFB, XTS ) from cryptography.hazmat.primitives.kdf import scrypt @@ -263,6 +263,7 @@ def _register_default_ciphers(self): type(None), GetCipherByName("chacha20") ) + self.register_cipher_adapter(AES, XTS, _get_xts_cipher) def create_symmetric_encryption_ctx(self, cipher, mode): return _CipherContext(self, cipher, mode, _CipherContext._ENCRYPT) @@ -1961,4 +1962,9 @@ def __call__(self, backend, cipher, mode): return backend._lib.EVP_get_cipherbyname(cipher_name.encode("ascii")) +def _get_xts_cipher(backend, cipher, mode): + cipher_name = "aes-{0}-xts".format(cipher.key_size // 2) + return backend._lib.EVP_get_cipherbyname(cipher_name.encode("ascii")) + + backend = Backend() diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index dfb33a0707dd..8e55e28bdff4 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -57,6 +57,8 @@ def __init__(self, backend, cipher, mode, operation): if isinstance(mode, modes.ModeWithInitializationVector): iv_nonce = mode.initialization_vector + elif isinstance(mode, modes.ModeWithTweak): + iv_nonce = mode.tweak elif isinstance(mode, modes.ModeWithNonce): iv_nonce = mode.nonce elif isinstance(cipher, modes.ModeWithNonce): diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index 6e5eb313d8fb..99a837e4e1d0 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -25,7 +25,8 @@ def _verify_key_size(algorithm, key): class AES(object): name = "AES" block_size = 128 - key_sizes = frozenset([128, 192, 256]) + # 512 added to support AES-256-XTS, which uses 512-bit keys + key_sizes = frozenset([128, 192, 256, 512]) def __init__(self, key): self.key = _verify_key_size(self, key) diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index 54670b7f8f17..598dfaa4a40d 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -36,6 +36,15 @@ def initialization_vector(self): """ +@six.add_metaclass(abc.ABCMeta) +class ModeWithTweak(object): + @abc.abstractproperty + def tweak(self): + """ + The value of the tweak for this mode as bytes. + """ + + @six.add_metaclass(abc.ABCMeta) class ModeWithNonce(object): @abc.abstractproperty @@ -54,6 +63,13 @@ def tag(self): """ +def _check_aes_key_length(self, algorithm): + if algorithm.key_size > 256 and algorithm.name == "AES": + raise ValueError( + "Only 128, 192, and 256 bit keys are allowed for this AES mode" + ) + + def _check_iv_length(self, algorithm): if len(self.initialization_vector) * 8 != algorithm.block_size: raise ValueError("Invalid IV size ({0}) for {1}.".format( @@ -61,6 +77,11 @@ def _check_iv_length(self, algorithm): )) +def _check_iv_and_key_length(self, algorithm): + _check_aes_key_length(self, algorithm) + _check_iv_length(self, algorithm) + + @utils.register_interface(Mode) @utils.register_interface(ModeWithInitializationVector) class CBC(object): @@ -73,15 +94,38 @@ def __init__(self, initialization_vector): self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") - validate_for_algorithm = _check_iv_length + validate_for_algorithm = _check_iv_and_key_length + + +@utils.register_interface(Mode) +@utils.register_interface(ModeWithTweak) +class XTS(object): + name = "XTS" + + def __init__(self, tweak): + if not isinstance(tweak, bytes): + raise TypeError("tweak must be bytes") + + if len(tweak) != 16: + raise ValueError("tweak must be 128-bits (16 bytes)") + + self._tweak = tweak + + tweak = utils.read_only_property("_tweak") + + def validate_for_algorithm(self, algorithm): + if algorithm.key_size not in (256, 512): + raise ValueError( + "The XTS specification requires a 256-bit key for AES-128-XTS" + " and 512-bit key for AES-256-XTS" + ) @utils.register_interface(Mode) class ECB(object): name = "ECB" - def validate_for_algorithm(self, algorithm): - pass + validate_for_algorithm = _check_aes_key_length @utils.register_interface(Mode) @@ -96,7 +140,7 @@ def __init__(self, initialization_vector): self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") - validate_for_algorithm = _check_iv_length + validate_for_algorithm = _check_iv_and_key_length @utils.register_interface(Mode) @@ -111,7 +155,7 @@ def __init__(self, initialization_vector): self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") - validate_for_algorithm = _check_iv_length + validate_for_algorithm = _check_iv_and_key_length @utils.register_interface(Mode) @@ -126,7 +170,7 @@ def __init__(self, initialization_vector): self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") - validate_for_algorithm = _check_iv_length + validate_for_algorithm = _check_iv_and_key_length @utils.register_interface(Mode) @@ -143,6 +187,7 @@ def __init__(self, nonce): nonce = utils.read_only_property("_nonce") def validate_for_algorithm(self, algorithm): + _check_aes_key_length(self, algorithm) if len(self.nonce) * 8 != algorithm.block_size: raise ValueError("Invalid nonce size ({0}) for {1}.".format( len(self.nonce), self.name @@ -180,4 +225,4 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): initialization_vector = utils.read_only_property("_initialization_vector") def validate_for_algorithm(self, algorithm): - pass + _check_aes_key_length(self, algorithm) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index a6b1e5f26ebe..a2a298810497 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -12,10 +12,44 @@ from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives.ciphers import algorithms, base, modes -from .utils import generate_aead_test, generate_encrypt_test +from .utils import _load_all_params, generate_aead_test, generate_encrypt_test from ...utils import load_nist_vectors +@pytest.mark.supported( + only_if=lambda backend: backend.cipher_supported( + algorithms.AES(b"\x00" * 32), modes.XTS(b"\x00" * 16) + ), + skip_message="Does not support AES XTS", +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +class TestAESModeXTS(object): + @pytest.mark.parametrize( + "vector", + # This list comprehension excludes any vector that does not have a + # data unit length that is divisible by 8. The NIST vectors include + # tests for implementations that support encryption of data that is + # not divisible modulo 8, but OpenSSL is not such an implementation. + [x for x in _load_all_params( + os.path.join("ciphers", "AES", "XTS", "tweak-128hexstr"), + ["XTSGenAES128.rsp", "XTSGenAES256.rsp"], + load_nist_vectors + ) if int(x["dataunitlen"]) / 8.0 == int(x["dataunitlen"]) // 8] + ) + def test_xts_vectors(self, vector, backend): + key = binascii.unhexlify(vector["key"]) + tweak = binascii.unhexlify(vector["i"]) + pt = binascii.unhexlify(vector["pt"]) + ct = binascii.unhexlify(vector["ct"]) + cipher = base.Cipher(algorithms.AES(key), modes.XTS(tweak), backend) + enc = cipher.encryptor() + computed_ct = enc.update(pt) + enc.finalize() + assert computed_ct == ct + dec = cipher.decryptor() + computed_pt = dec.update(ct) + dec.finalize() + assert computed_pt == pt + + @pytest.mark.supported( only_if=lambda backend: backend.cipher_supported( algorithms.AES(b"\x00" * 16), modes.CBC(b"\x00" * 16) diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index f1718c07edb0..2f58c9fc911a 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -37,6 +37,30 @@ def test_invalid_key_size(self): AES(binascii.unhexlify(b"0" * 12)) +class TestAESXTS(object): + @pytest.mark.requires_backend_interface(interface=CipherBackend) + @pytest.mark.parametrize( + "mode", + (modes.CBC, modes.CTR, modes.CFB, modes.CFB8, modes.OFB) + ) + def test_invalid_key_size_with_mode(self, mode, backend): + with pytest.raises(ValueError): + ciphers.Cipher(AES(b"0" * 64), mode(b"0" * 16), backend) + + def test_xts_tweak_not_bytes(self): + with pytest.raises(TypeError): + modes.XTS(32) + + def test_xts_tweak_too_small(self): + with pytest.raises(ValueError): + modes.XTS(b"0") + + @pytest.mark.requires_backend_interface(interface=CipherBackend) + def test_xts_wrong_key_size(self, backend): + with pytest.raises(ValueError): + ciphers.Cipher(AES(b"0" * 16), modes.XTS(b"0" * 16), backend) + + class TestCamellia(object): @pytest.mark.parametrize(("key", "keysize"), [ (b"0" * 32, 128), From fce63a57b42593250e883a212250b1f5317503cf Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 4 Oct 2017 09:16:50 +0800 Subject: [PATCH 092/988] disable smart quotes in sphinx to workaround a spellchecker issue (#3946) This makes it so we don't have to pin sphinx while we wait for sphinxcontrib-spelling to properly handle smart quotes --- docs/docutils.conf | 2 ++ setup.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/docutils.conf diff --git a/docs/docutils.conf b/docs/docutils.conf new file mode 100644 index 000000000000..e0c3d47c838b --- /dev/null +++ b/docs/docutils.conf @@ -0,0 +1,2 @@ +[parsers] +smart_quotes: no diff --git a/setup.py b/setup.py index e69ffee72ea0..c5a42b207823 100644 --- a/setup.py +++ b/setup.py @@ -290,7 +290,7 @@ def run_tests(self): "doc8", "pyenchant >= 1.6.11", "readme_renderer >= 16.0", - "sphinx != 1.6.1, != 1.6.2, != 1.6.3, != 1.6.4", + "sphinx", "sphinx_rtd_theme", "sphinxcontrib-spelling", ], From 3d96afd798ece830fcfdf48776dae48acbc5157d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 4 Oct 2017 10:53:18 +0800 Subject: [PATCH 093/988] do downstream builds as part of our normal parallel jenkins pipeline (#3948) * do downstream builds as part of our normal parallel jenkins pipeline * empty --- Jenkinsfile | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 92b0c7e75561..bac0067a5ad5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -363,15 +363,12 @@ builders["setup.py-test"] = { } } -parallel builders - -def downstreamBuilders = [:] for (downstream in downstreams) { def downstreamName = downstream["downstreamName"] def imageName = downstream["imageName"] def label = downstream["label"] def script = downstream["script"] - downstreamBuilders[downstreamName] = { + builders[downstreamName] = { node(label) { docker.image(imageName).inside { try { @@ -387,6 +384,5 @@ for (downstream in downstreams) { } } -stage("Downstreams") { - parallel downstreamBuilders -} +parallel builders + From 56669aae2a3cbcd6f538f0c5e2e274772a82f2c8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 4 Oct 2017 21:25:55 -0400 Subject: [PATCH 094/988] update security docs to indicate we staticaly link openssl on linux too (#3949) * update security docs to indicate we staticaly link openssl there too * spelling --- docs/security.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/security.rst b/docs/security.rst index 646b3e22529d..251d2d951926 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -71,10 +71,10 @@ as well as the most recent release. New releases for OpenSSL updates -------------------------------- -As of version 0.5, ``cryptography`` statically links OpenSSL on Windows, and as -of version 1.0.1 on macOS, to ease installation. Due to this, ``cryptography`` -will release a new version whenever OpenSSL has a security or bug fix release to -avoid shipping insecure software. +As of versions 0.5, 1.0.1, and 2.0.0, ``cryptography`` statically links OpenSSL +on Windows, macOS, and Linux respectively, to ease installation. Due to this, +``cryptography`` will release a new version whenever OpenSSL has a security or +bug fix release to avoid shipping insecure software. Like all our other releases, this will be announced on the mailing list and we strongly recommend that you upgrade as soon as possible. From 003f56fbd7fe676f6b6bd0a52bbf83f040b4a168 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Oct 2017 10:23:24 +0800 Subject: [PATCH 095/988] add utf8 DNSName x509 vector (#3952) --- docs/development/test-vectors.rst | 2 + .../x509/utf8-dnsname.pem | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/utf8-dnsname.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 66f7198598da..90f812b9b9b9 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -172,6 +172,8 @@ X.509 (commonly known as OCSP Must-Staple). * ``unique-identifier.pem`` - A certificate containing a distinguished name with an ``x500UniqueIdentifier``. +* ``utf8-dnsname.pem`` - A certificate containing non-ASCII characters in the + DNS name entries of the SAN extension. Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/utf8-dnsname.pem b/vectors/cryptography_vectors/x509/utf8-dnsname.pem new file mode 100644 index 000000000000..2a8214e538e6 --- /dev/null +++ b/vectors/cryptography_vectors/x509/utf8-dnsname.pem @@ -0,0 +1,41 @@ +-----BEGIN CERTIFICATE----- +MIIHITCCBgmgAwIBAgIOSd0P5hl1zSSpCbANQXowDQYJKoZIhvcNAQELBQAwgakx +CzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEVMBMGA1UECgwMTmV0TG9j +ayBLZnQuMTcwNQYDVQQLDC5UYW7DunPDrXR2w6FueWtpYWTDs2sgKENlcnRpZmlj +YXRpb24gU2VydmljZXMpMTcwNQYDVQQDDC5OZXRMb2NrIMOcemxldGkgKENsYXNz +IEIpIFRhbsO6c8OtdHbDoW55a2lhZMOzMB4XDTE2MTIxNDE1MjE0NVoXDTE3MTIx +NDE1MjE0NVowXzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MR0wGwYD +VQQKDBRCaXp0b3PDrXTDoXMuaHUgS2Z0LjEeMBwGA1UEAwwVcGFydG5lci5iaXp0 +b3NpdGFzLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+afrk1v5 +cHSIa0bTqrk5fVxFypBLgDeEoAb3t54hzbZpPgiowc3k8wCI4QjlQHcZsp7Wk2+b +weUoA8cd5O6ZJZPoeo1IbelHIMhKhfZMmP3AUCSIlXov/fDHI0eu+tZR6FRq48eS +f+czLqwPGnEMYxhnOf3Xb1a2xk4WmI5PyDOezodxF5fh/EqlK9Xss7CeQUgKVnRg +10HNIkzvLC3xw9QLv3aYOpFRKXADaANpy4ISnhfInYBb6GD3oztYOCyKWgGb0OOI +X5Uu+JwHyLXD7TS7Jw8TJSNs/scx2+wf+FwRbCTF5eaxBbP3Mmaa3Rbz7RLfhRBe +qcFZXd5EnwrMuQIDAQABo4IDjjCCA4owDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8E +BAMCA6gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFASmB1+ogS3m0icQ +Ls/AOo3HObuDMB8GA1UdIwQYMBaAFPEnxN5aPTQpuPPqD43+dtI5CM/BMIGVBgNV +HSAEgY0wgYowgYcGBmeBDAECAjB9MCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3Lm5l +dGxvY2suaHUvZG9jcy8wUgYIKwYBBQUHAgIwRgxET1YgU1NMIGNlcnRpZmljYXRl +LiBUZXJtcyBvZiBzZXJ2aWNlIGF0OiBodHRwOi8vd3d3Lm5ldGxvY2suaHUvZG9j +cy8wggE+BggrBgEFBQcBAQSCATAwggEsMCwGCCsGAQUFBzABhiBodHRwOi8vb2Nz +cDEubmV0bG9jay5odS9jYmNhLmNnaTAsBggrBgEFBQcwAYYgaHR0cDovL29jc3Ay +Lm5ldGxvY2suaHUvY2JjYS5jZ2kwLAYIKwYBBQUHMAGGIGh0dHA6Ly9vY3NwMy5u +ZXRsb2NrLmh1L2NiY2EuY2dpMDQGCCsGAQUFBzAChihodHRwOi8vYWlhMS5uZXRs +b2NrLmh1L2luZGV4LmNnaT9jYT1jYmNhMDQGCCsGAQUFBzAChihodHRwOi8vYWlh +Mi5uZXRsb2NrLmh1L2luZGV4LmNnaT9jYT1jYmNhMDQGCCsGAQUFBzAChihodHRw +Oi8vYWlhMy5uZXRsb2NrLmh1L2luZGV4LmNnaT9jYT1jYmNhMIGeBgNVHR8EgZYw +gZMwL6AtoCuGKWh0dHA6Ly9jcmwxLm5ldGxvY2suaHUvaW5kZXguY2dpP2NybD1j +YmNhMC+gLaArhilodHRwOi8vY3JsMi5uZXRsb2NrLmh1L2luZGV4LmNnaT9jcmw9 +Y2JjYTAvoC2gK4YpaHR0cDovL2NybDMubmV0bG9jay5odS9pbmRleC5jZ2k/Y3Js +PWNiY2EwgZkGA1UdEQEB/wSBjjCBi4IVcGFydG5lci5iaXp0b3NpdGFzLmh1gg1i +aXp0b3NpdGFzLmh1gg8qLmJpenRvc2l0YXMuaHWCD2JpenRvc8OtdMOhcy5odYIR +Ki5iaXp0b3PDrXTDoXMuaHWCFXhuLS1iaXp0b3N0cy1memEyai5odYIXKi54bi0t +Yml6dG9zdHMtZnphMmouaHUwDQYJKoZIhvcNAQELBQADggEBAJ/uKJpuItQ6/78d ++ve0ytSeLiPB7MdvX9N6WLliqr4doIQddZg/1p/aleDIYj895dMXapycA5Ei8UtO +noQr8jLgw+ZPK6RC1bMLQ5eKlm2gUY8ZSsbb+HZlFacw9W8I5N1Zw5Llo6wki1gY +ro/ykjzt4Qtf1jXphuxuoss3gNvtY4GedRZZYQWA6DbmKxF4eMgTTBoWoNERKRYl +oFfbC+GEPyeQU08MCy6YKPnNZ9TbvjNdRVLBcgGBZov904EpJw+QREvlZlLrYFwA +w92yuH8OpkEQmv5YBtwTqTaEV0anfnC1Pukpqjv4N+e3fUafr+ZHIhoZMVmkU+QF +l9h31VY= +-----END CERTIFICATE----- From ed32105be8daa27d39e5ef1f26e3f7bc672a7939 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 08:11:44 +0800 Subject: [PATCH 096/988] Backwards incompatible change to DNSName (#3951) * Backwards incompatible change to DNSName During this release cycle we decided to officially deprecate passing U-labels to our GeneralName constructors. At first we tried changing this in a purely backwards compatible way but get_values_for_type made that untenable. This PR modifies DNSName to take three different types. U-label strings (which raises a deprecation warning), A-label strings (the new preferred type), and bytes (which are assumed to be decodable to unicode strings). The latter, while supported, is primarily intended for use by our parser and allows us to return the actual encoded data in a certificate even if it has not been properly encoded to A-label before the certificate is created. (Of course, if the certificate contains invalid utf8 sequences this will still fail, but let's handle one catastrophic failure at a time). * coverage * don't delete that asterisk from a test. it does things. * no bytes in DNSName. Private constructor for bypassing validation * test unicode in dnsname (yuck) * fix docs * empty commit, you disappoint me codecov * CI is the worst --- docs/x509/reference.rst | 2 +- .../hazmat/backends/openssl/decode_asn1.py | 10 +- .../hazmat/backends/openssl/encode_asn1.py | 4 +- src/cryptography/x509/general_name.py | 67 ++--- tests/x509/test_x509.py | 55 ++-- tests/x509/test_x509_ext.py | 245 +++++++++--------- tests/x509/test_x509_revokedcertbuilder.py | 4 +- 7 files changed, 193 insertions(+), 194 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 951e6b7dab0a..238a24e557de 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -611,7 +611,7 @@ X.509 Certificate Builder >>> builder = builder.public_key(public_key) >>> builder = builder.add_extension( ... x509.SubjectAlternativeName( - ... [x509.DNSName(b'cryptography.io')] + ... [x509.DNSName(u'cryptography.io')] ... ), ... critical=False ... ) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 2665fb2269e8..aefb242212cb 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -88,8 +88,14 @@ def _decode_general_names(backend, gns): def _decode_general_name(backend, gn): if gn.type == backend._lib.GEN_DNS: - data = _asn1_string_to_bytes(backend, gn.d.dNSName) - return x509.DNSName(data) + # Convert to bytes and then decode to utf8. We don't use + # asn1_string_to_utf8 here because it doesn't properly convert + # utf8 from ia5strings. + data = _asn1_string_to_bytes(backend, gn.d.dNSName).decode("utf8") + # We don't use the constructor for DNSName so we can bypass validation + # This allows us to create DNSName objects that have unicode chars + # when a certificate (against the RFC) contains them. + return x509.DNSName._init_without_validation(data) elif gn.type == backend._lib.GEN_URI: data = _asn1_string_to_bytes(backend, gn.d.uniformResourceIdentifier) return x509.UniformResourceIdentifier(data) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index e45e105015c1..3177cf96d8ce 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -368,7 +368,9 @@ def _encode_general_name(backend, name): ia5 = backend._lib.ASN1_IA5STRING_new() backend.openssl_assert(ia5 != backend._ffi.NULL) - value = name.bytes_value + # ia5strings are supposed to be ITU T.50 but to allow round-tripping + # of broken certs that encode utf8 we'll encode utf8 here too. + value = name.value.encode("utf8") res = backend._lib.ASN1_STRING_set(ia5, value, len(value)) backend.openssl_assert(res == 1) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 768be3bb0bb3..d4d92c882899 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -131,8 +131,8 @@ def _idna_encode(value): for prefix in ['*.', '.']: if value.startswith(prefix): value = value[len(prefix):] - return prefix.encode('ascii') + idna.encode(value) - return idna.encode(value) + return prefix + idna.encode(value).decode("ascii") + return idna.encode(value).decode("ascii") @utils.register_interface(GeneralName) @@ -140,73 +140,44 @@ class DNSName(object): def __init__(self, value): if isinstance(value, six.text_type): try: - value = value.encode("ascii") + value.encode("ascii") except UnicodeEncodeError: value = _idna_encode(value) warnings.warn( - "DNSName values should be passed as idna-encoded bytes, " - "not strings. Support for passing unicode strings will be " - "removed in a future version.", - utils.DeprecatedIn21, - stacklevel=2, - ) - else: - warnings.warn( - "DNSName values should be passed as bytes, not strings. " - "Support for passing unicode strings will be removed in a " - "future version.", + "DNSName values should be passed as an A-label string. " + "This means unicode characters should be encoded via " + "idna. Support for passing unicode strings (aka U-label) " + " will be removed in a future version.", utils.DeprecatedIn21, stacklevel=2, ) - elif not isinstance(value, bytes): - raise TypeError("value must be bytes") + else: + raise TypeError("value must be string") - self._bytes_value = value + self._value = value - bytes_value = utils.read_only_property("_bytes_value") + value = utils.read_only_property("_value") - @property - def value(self): - warnings.warn( - "DNSName.bytes_value should be used instead of DNSName.value; it " - "contains the DNS name as raw bytes, instead of as an idna-decoded" - " unicode string. DNSName.value will be removed in a future " - "version.", - utils.DeprecatedIn21, - stacklevel=2 - ) - data = self._bytes_value - if not data: - decoded = u"" - elif data.startswith(b"*."): - # This is a wildcard name. We need to remove the leading wildcard, - # IDNA decode, then re-add the wildcard. Wildcard characters should - # always be left-most (RFC 2595 section 2.4). - decoded = u"*." + idna.decode(data[2:]) - else: - # Not a wildcard, decode away. If the string has a * in it anywhere - # invalid this will raise an InvalidCodePoint - decoded = idna.decode(data) - if data.startswith(b"."): - # idna strips leading periods. Name constraints can have that - # so we need to re-add it. Sigh. - decoded = u"." + decoded - return decoded + @classmethod + def _init_without_validation(cls, value): + instance = cls.__new__(cls) + instance._value = value + return instance def __repr__(self): - return "".format(self.bytes_value) + return "".format(self.value) def __eq__(self, other): if not isinstance(other, DNSName): return NotImplemented - return self.bytes_value == other.bytes_value + return self.value == other.value def __ne__(self, other): return not self == other def __hash__(self): - return hash(self.bytes_value) + return hash(self.value) @utils.register_interface(GeneralName) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 0ce0a63255f2..afe1c0e9bf31 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -226,7 +226,7 @@ def test_extensions(self, backend): assert aia.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.DNSName(b"cryptography.io") + x509.DNSName(u"cryptography.io") ) ]) assert ian.value == x509.IssuerAlternativeName([ @@ -777,6 +777,24 @@ def test_unicode_name(self, backend): ) ] + def test_non_ascii_dns_name(self, backend): + cert = _load_cert( + os.path.join("x509", "utf8-dnsname.pem"), + x509.load_pem_x509_certificate, + backend + ) + san = cert.extensions.get_extension_for_class( + x509.SubjectAlternativeName + ).value + + names = san.get_values_for_type(x509.DNSName) + + assert names == [ + u'partner.biztositas.hu', u'biztositas.hu', u'*.biztositas.hu', + u'biztos\xedt\xe1s.hu', u'*.biztos\xedt\xe1s.hu', + u'xn--biztosts-fza2j.hu', u'*.xn--biztosts-fza2j.hu' + ] + def test_all_subject_name_types(self, backend): cert = _load_cert( os.path.join( @@ -1243,8 +1261,8 @@ def test_subject_alt_name(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(ext.value) == [ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"sub.cryptography.io"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"sub.cryptography.io"), ] def test_public_bytes_pem(self, backend): @@ -1472,7 +1490,7 @@ def test_build_cert(self, backend): ).add_extension( x509.BasicConstraints(ca=False, path_length=None), True, ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), critical=False, ).not_valid_before( not_valid_before @@ -1494,7 +1512,7 @@ def test_build_cert(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(subject_alternative_name.value) == [ - x509.DNSName(b"cryptography.io"), + x509.DNSName(u"cryptography.io"), ] def test_build_cert_private_type_encoding(self, backend): @@ -2122,7 +2140,7 @@ def test_build_cert_with_dsa_private_key(self, backend): ).add_extension( x509.BasicConstraints(ca=False, path_length=None), True, ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), critical=False, ).not_valid_before( not_valid_before @@ -2144,7 +2162,7 @@ def test_build_cert_with_dsa_private_key(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(subject_alternative_name.value) == [ - x509.DNSName(b"cryptography.io"), + x509.DNSName(u"cryptography.io"), ] @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) @@ -2168,7 +2186,7 @@ def test_build_cert_with_ec_private_key(self, backend): ).add_extension( x509.BasicConstraints(ca=False, path_length=None), True, ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), critical=False, ).not_valid_before( not_valid_before @@ -2190,7 +2208,7 @@ def test_build_cert_with_ec_private_key(self, backend): ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) assert list(subject_alternative_name.value) == [ - x509.DNSName(b"cryptography.io"), + x509.DNSName(u"cryptography.io"), ] @pytest.mark.requires_backend_interface(interface=RSABackend) @@ -2224,6 +2242,9 @@ def test_build_cert_with_rsa_key_too_small(self, backend): @pytest.mark.parametrize( "add_ext", [ + x509.SubjectAlternativeName( + [x509.DNSName._init_without_validation(u'a\xedt\xe1s.test')] + ), x509.CertificatePolicies([ x509.PolicyInformation( x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), @@ -2279,7 +2300,7 @@ def test_build_cert_with_rsa_key_too_small(self, backend): ) ]), x509.IssuerAlternativeName([ - x509.DNSName(b"myissuer"), + x509.DNSName(u"myissuer"), x509.RFC822Name(u"email@domain.com"), ]), x509.ExtendedKeyUsage([ @@ -2308,7 +2329,7 @@ def test_build_cert_with_rsa_key_too_small(self, backend): ipaddress.IPv6Network(u"FF:FF:0:0:0:0:0:0/128") ), ], - excluded_subtrees=[x509.DNSName(b"name.local")] + excluded_subtrees=[x509.DNSName(u"name.local")] ), x509.NameConstraints( permitted_subtrees=[ @@ -2318,7 +2339,7 @@ def test_build_cert_with_rsa_key_too_small(self, backend): ), x509.NameConstraints( permitted_subtrees=None, - excluded_subtrees=[x509.DNSName(b"name.local")] + excluded_subtrees=[x509.DNSName(u"name.local")] ), x509.PolicyConstraints( require_explicit_policy=None, @@ -2847,7 +2868,7 @@ def test_add_unsupported_extension(self, backend): x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), ]) ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), critical=False, ).add_extension( DummyExtension(), False @@ -2933,7 +2954,7 @@ def test_add_two_extensions(self, backend): request = builder.subject_name( x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]), + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), critical=False, ).add_extension( x509.BasicConstraints(ca=True, path_length=2), critical=True @@ -2950,7 +2971,7 @@ def test_add_two_extensions(self, backend): ext = request.extensions.get_extension_for_oid( ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) - assert list(ext.value) == [x509.DNSName(b"cryptography.io")] + assert list(ext.value) == [x509.DNSName(u"cryptography.io")] def test_set_subject_twice(self): builder = x509.CertificateSigningRequestBuilder() @@ -2970,8 +2991,8 @@ def test_subject_alt_names(self, backend): private_key = RSA_KEY_2048.private_key(backend) san = x509.SubjectAlternativeName([ - x509.DNSName(b"example.com"), - x509.DNSName(b"*.example.com"), + x509.DNSName(u"example.com"), + x509.DNSName(u"*.example.com"), x509.RegisteredID(x509.ObjectIdentifier("1.2.3.4.5.6.7")), x509.DirectoryName(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, u'PyCA'), diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 11e06eafb439..6e376bb18425 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -234,20 +234,20 @@ def test_hash(self): class TestCertificateIssuer(object): def test_iter_names(self): ci = x509.CertificateIssuer([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ]) assert len(ci) == 2 assert list(ci) == [ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ] def test_indexing(self): ci = x509.CertificateIssuer([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), - x509.DNSName(b"another.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) @@ -255,39 +255,39 @@ def test_indexing(self): assert ci[2:6:2] == [ci[2], ci[4]] def test_eq(self): - ci1 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) - ci2 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci1 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) + ci2 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) assert ci1 == ci2 def test_ne(self): - ci1 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) - ci2 = x509.CertificateIssuer([x509.DNSName(b"somethingelse.tld")]) + ci1 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) + ci2 = x509.CertificateIssuer([x509.DNSName(u"somethingelse.tld")]) assert ci1 != ci2 assert ci1 != object() def test_repr(self): - ci = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) if six.PY3: assert repr(ci) == ( - "])>)>" + "])>)>" ) else: assert repr(ci) == ( - "])>)>" + "])>)>" ) def test_get_values_for_type(self): ci = x509.CertificateIssuer( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) names = ci.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_hash(self): - ci1 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) - ci2 = x509.CertificateIssuer([x509.DNSName(b"cryptography.io")]) + ci1 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) + ci2 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) ci3 = x509.CertificateIssuer( [x509.UniformResourceIdentifier(b"http://something")] ) @@ -1099,7 +1099,7 @@ def test_authority_cert_serial_and_issuer_none(self): assert aki.authority_cert_serial_number is None def test_authority_cert_serial_zero(self): - dns = x509.DNSName(b"SomeIssuer") + dns = x509.DNSName(u"SomeIssuer") aki = x509.AuthorityKeyIdentifier(b"id", [dns], 0) assert aki.key_identifier == b"id" assert aki.authority_cert_issuer == [dns] @@ -1662,33 +1662,34 @@ def test_key_cert_sign_crl_sign(self, backend): class TestDNSName(object): def test_init(self): - with pytest.warns(utils.DeprecatedIn21): - name = x509.DNSName(u"*.\xf5\xe4\xf6\xfc.example.com") - assert name.bytes_value == b"*.xn--4ca7aey.example.com" + name = x509.DNSName(u"*.xn--4ca7aey.example.com") + assert name.value == u"*.xn--4ca7aey.example.com" with pytest.warns(utils.DeprecatedIn21): name = x509.DNSName(u".\xf5\xe4\xf6\xfc.example.com") - assert name.bytes_value == b".xn--4ca7aey.example.com" - assert name.value == u".\xf5\xe4\xf6\xfc.example.com" + assert name.value == u".xn--4ca7aey.example.com" with pytest.warns(utils.DeprecatedIn21): name = x509.DNSName(u"\xf5\xe4\xf6\xfc.example.com") - assert name.bytes_value == b"xn--4ca7aey.example.com" + assert name.value == u"xn--4ca7aey.example.com" with pytest.raises(TypeError): x509.DNSName(1.3) + with pytest.raises(TypeError): + x509.DNSName(b"bytes not allowed") + def test_ne(self): - n1 = x509.DNSName(b"test1") - n2 = x509.DNSName(b"test2") - n3 = x509.DNSName(b"test2") + n1 = x509.DNSName(u"test1") + n2 = x509.DNSName(u"test2") + n3 = x509.DNSName(u"test2") assert n1 != n2 assert not (n2 != n3) def test_hash(self): - n1 = x509.DNSName(b"test1") - n2 = x509.DNSName(b"test2") - n3 = x509.DNSName(b"test2") + n1 = x509.DNSName(u"test1") + n2 = x509.DNSName(u"test2") + n3 = x509.DNSName(u"test2") assert hash(n1) != hash(n2) assert hash(n2) == hash(n3) @@ -2016,35 +2017,35 @@ def test_hash(self): class TestGeneralNames(object): def test_get_values_for_type(self): gns = x509.GeneralNames( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) names = gns.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): gns = x509.GeneralNames([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ]) assert len(gns) == 2 assert list(gns) == [ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ] def test_iter_input(self): names = [ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ] gns = x509.GeneralNames(iter(names)) assert list(gns) == names def test_indexing(self): gn = x509.GeneralNames([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), - x509.DNSName(b"another.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) @@ -2054,36 +2055,36 @@ def test_indexing(self): def test_invalid_general_names(self): with pytest.raises(TypeError): x509.GeneralNames( - [x509.DNSName(b"cryptography.io"), "invalid"] + [x509.DNSName(u"cryptography.io"), "invalid"] ) def test_repr(self): gns = x509.GeneralNames( [ - x509.DNSName(b"cryptography.io") + x509.DNSName(u"cryptography.io") ] ) if six.PY3: assert repr(gns) == ( - "])>" + "])>" ) else: assert repr(gns) == ( - "])>" + "])>" ) def test_eq(self): gns = x509.GeneralNames( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) gns2 = x509.GeneralNames( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) assert gns == gns2 def test_ne(self): gns = x509.GeneralNames( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) gns2 = x509.GeneralNames( [x509.RFC822Name(b"admin@cryptography.io")] @@ -2092,8 +2093,8 @@ def test_ne(self): assert gns != object() def test_hash(self): - gns = x509.GeneralNames([x509.DNSName(b"cryptography.io")]) - gns2 = x509.GeneralNames([x509.DNSName(b"cryptography.io")]) + gns = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) + gns2 = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) gns3 = x509.GeneralNames([x509.RFC822Name(b"admin@cryptography.io")]) assert hash(gns) == hash(gns2) assert hash(gns) != hash(gns3) @@ -2102,27 +2103,27 @@ def test_hash(self): class TestIssuerAlternativeName(object): def test_get_values_for_type(self): san = x509.IssuerAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) names = san.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): san = x509.IssuerAlternativeName([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ]) assert len(san) == 2 assert list(san) == [ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ] def test_indexing(self): ian = x509.IssuerAlternativeName([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), - x509.DNSName(b"another.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) @@ -2132,38 +2133,38 @@ def test_indexing(self): def test_invalid_general_names(self): with pytest.raises(TypeError): x509.IssuerAlternativeName( - [x509.DNSName(b"cryptography.io"), "invalid"] + [x509.DNSName(u"cryptography.io"), "invalid"] ) def test_repr(self): san = x509.IssuerAlternativeName( [ - x509.DNSName(b"cryptography.io") + x509.DNSName(u"cryptography.io") ] ) if six.PY3: assert repr(san) == ( "])>)>" + "])>)>" ) else: assert repr(san) == ( "])>)>" + "])>)>" ) def test_eq(self): san = x509.IssuerAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) san2 = x509.IssuerAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) assert san == san2 def test_ne(self): san = x509.IssuerAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) san2 = x509.IssuerAlternativeName( [x509.RFC822Name(b"admin@cryptography.io")] @@ -2172,8 +2173,8 @@ def test_ne(self): assert san != object() def test_hash(self): - ian = x509.IssuerAlternativeName([x509.DNSName(b"cryptography.io")]) - ian2 = x509.IssuerAlternativeName([x509.DNSName(b"cryptography.io")]) + ian = x509.IssuerAlternativeName([x509.DNSName(u"cryptography.io")]) + ian2 = x509.IssuerAlternativeName([x509.DNSName(u"cryptography.io")]) ian3 = x509.IssuerAlternativeName( [x509.RFC822Name(b"admin@cryptography.io")] ) @@ -2227,27 +2228,27 @@ def test_hash(self): class TestSubjectAlternativeName(object): def test_get_values_for_type(self): san = x509.SubjectAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) names = san.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): san = x509.SubjectAlternativeName([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ]) assert len(san) == 2 assert list(san) == [ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), ] def test_indexing(self): san = x509.SubjectAlternativeName([ - x509.DNSName(b"cryptography.io"), - x509.DNSName(b"crypto.local"), - x509.DNSName(b"another.local"), + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), x509.RFC822Name(b"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) @@ -2257,38 +2258,38 @@ def test_indexing(self): def test_invalid_general_names(self): with pytest.raises(TypeError): x509.SubjectAlternativeName( - [x509.DNSName(b"cryptography.io"), "invalid"] + [x509.DNSName(u"cryptography.io"), "invalid"] ) def test_repr(self): san = x509.SubjectAlternativeName( [ - x509.DNSName(b"cryptography.io") + x509.DNSName(u"cryptography.io") ] ) if six.PY3: assert repr(san) == ( "])>)>" + "])>)>" ) else: assert repr(san) == ( "])>)>" + "])>)>" ) def test_eq(self): san = x509.SubjectAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) san2 = x509.SubjectAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) assert san == san2 def test_ne(self): san = x509.SubjectAlternativeName( - [x509.DNSName(b"cryptography.io")] + [x509.DNSName(u"cryptography.io")] ) san2 = x509.SubjectAlternativeName( [x509.RFC822Name(b"admin@cryptography.io")] @@ -2297,8 +2298,8 @@ def test_ne(self): assert san != object() def test_hash(self): - san = x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]) - san2 = x509.SubjectAlternativeName([x509.DNSName(b"cryptography.io")]) + san = x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]) + san2 = x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]) san3 = x509.SubjectAlternativeName( [x509.RFC822Name(b"admin@cryptography.io")] ) @@ -2370,7 +2371,7 @@ def test_san_wildcard_idna_dns_name(self, backend): ) dns = ext.value.get_values_for_type(x509.DNSName) - assert dns == [u'*.\u043f\u044b\u043a\u0430.cryptography'] + assert dns == [u'*.xn--80ato2c.cryptography'] def test_unsupported_gn(self, backend): cert = _load_cert( @@ -2502,9 +2503,7 @@ def test_idna2003_invalid(self, backend): assert len(san) == 1 [name] = san - assert name.bytes_value == b"xn--k4h.ws" - with pytest.raises(UnicodeError): - name.value + assert name.value == u"xn--k4h.ws" def test_unicode_rfc822_name_dns_name_uri(self, backend): cert = _load_cert( @@ -2522,7 +2521,7 @@ def test_unicode_rfc822_name_dns_name_uri(self, backend): dns_name = ext.value.get_values_for_type(x509.DNSName) uri = ext.value.get_values_for_type(x509.UniformResourceIdentifier) assert rfc822_name == [u"email@\u043f\u044b\u043a\u0430.cryptography"] - assert dns_name == [u"\u043f\u044b\u043a\u0430.cryptography"] + assert dns_name == [u"xn--80ato2c.cryptography"] assert uri == [u"https://www.\u043f\u044b\u043a\u0430.cryptography"] def test_rfc822name_dnsname_ipaddress_directoryname_uri(self, backend): @@ -2599,8 +2598,8 @@ def test_other_name(self, backend): assert othernames == [expected] def test_certbuilder(self, backend): - sans = [b'*.example.org', b'*.xn--4ca7aey.example.com', - b'foobar.example.net'] + sans = [u'*.example.org', u'*.xn--4ca7aey.example.com', + u'foobar.example.net'] private_key = RSA_KEY_2048.private_key(backend) builder = _make_certbuilder(private_key) builder = builder.add_extension( @@ -2608,7 +2607,7 @@ def test_certbuilder(self, backend): cert = builder.sign(private_key, hashes.SHA1(), backend) result = [ - x.bytes_value + x.value for x in cert.extensions.get_extension_for_class( SubjectAlternativeName ).value @@ -2648,7 +2647,7 @@ def test_eku(self, backend): class TestAccessDescription(object): def test_invalid_access_method(self): with pytest.raises(TypeError): - x509.AccessDescription("notanoid", x509.DNSName(b"test")) + x509.AccessDescription("notanoid", x509.DNSName(u"test")) def test_invalid_access_location(self): with pytest.raises(TypeError): @@ -3242,7 +3241,7 @@ def test_no_subtrees(self): x509.NameConstraints(None, None) def test_permitted_none(self): - excluded = [x509.DNSName(b"name.local")] + excluded = [x509.DNSName(u"name.local")] nc = x509.NameConstraints( permitted_subtrees=None, excluded_subtrees=excluded ) @@ -3250,7 +3249,7 @@ def test_permitted_none(self): assert nc.excluded_subtrees is not None def test_excluded_none(self): - permitted = [x509.DNSName(b"name.local")] + permitted = [x509.DNSName(u"name.local")] nc = x509.NameConstraints( permitted_subtrees=permitted, excluded_subtrees=None ) @@ -3264,7 +3263,7 @@ def test_iter_input(self): assert list(nc.excluded_subtrees) == subtrees def test_repr(self): - permitted = [x509.DNSName(b"name.local"), x509.DNSName(b"name2.local")] + permitted = [x509.DNSName(u"name.local"), x509.DNSName(u"name2.local")] nc = x509.NameConstraints( permitted_subtrees=permitted, excluded_subtrees=None @@ -3272,39 +3271,39 @@ def test_repr(self): if six.PY3: assert repr(nc) == ( ", ], excluded_subtrees=None)>" + "value='name.local')>, ], excluded_subtrees=None)>" ) else: assert repr(nc) == ( ", ], excluded_subtrees=None)>" + "value=u'name.local')>, ], excluded_subtrees=None)>" ) def test_eq(self): nc = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], - excluded_subtrees=[x509.DNSName(b"name2.local")] + permitted_subtrees=[x509.DNSName(u"name.local")], + excluded_subtrees=[x509.DNSName(u"name2.local")] ) nc2 = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], - excluded_subtrees=[x509.DNSName(b"name2.local")] + permitted_subtrees=[x509.DNSName(u"name.local")], + excluded_subtrees=[x509.DNSName(u"name2.local")] ) assert nc == nc2 def test_ne(self): nc = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], - excluded_subtrees=[x509.DNSName(b"name2.local")] + permitted_subtrees=[x509.DNSName(u"name.local")], + excluded_subtrees=[x509.DNSName(u"name2.local")] ) nc2 = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], + permitted_subtrees=[x509.DNSName(u"name.local")], excluded_subtrees=None ) nc3 = x509.NameConstraints( permitted_subtrees=None, - excluded_subtrees=[x509.DNSName(b"name2.local")] + excluded_subtrees=[x509.DNSName(u"name2.local")] ) assert nc != nc2 @@ -3313,20 +3312,20 @@ def test_ne(self): def test_hash(self): nc = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], - excluded_subtrees=[x509.DNSName(b"name2.local")] + permitted_subtrees=[x509.DNSName(u"name.local")], + excluded_subtrees=[x509.DNSName(u"name2.local")] ) nc2 = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], - excluded_subtrees=[x509.DNSName(b"name2.local")] + permitted_subtrees=[x509.DNSName(u"name.local")], + excluded_subtrees=[x509.DNSName(u"name2.local")] ) nc3 = x509.NameConstraints( - permitted_subtrees=[x509.DNSName(b"name.local")], + permitted_subtrees=[x509.DNSName(u"name.local")], excluded_subtrees=None ) nc4 = x509.NameConstraints( permitted_subtrees=None, - excluded_subtrees=[x509.DNSName(b"name.local")] + excluded_subtrees=[x509.DNSName(u"name.local")] ) assert hash(nc) == hash(nc2) assert hash(nc) != hash(nc3) @@ -3349,7 +3348,7 @@ def test_permitted_excluded(self, backend): ).value assert nc == x509.NameConstraints( permitted_subtrees=[ - x509.DNSName(b"zombo.local"), + x509.DNSName(u"zombo.local"), ], excluded_subtrees=[ x509.DirectoryName(x509.Name([ @@ -3371,7 +3370,7 @@ def test_permitted(self, backend): ).value assert nc == x509.NameConstraints( permitted_subtrees=[ - x509.DNSName(b"zombo.local"), + x509.DNSName(u"zombo.local"), ], excluded_subtrees=None ) @@ -3389,7 +3388,7 @@ def test_permitted_with_leading_period(self, backend): ).value assert nc == x509.NameConstraints( permitted_subtrees=[ - x509.DNSName(b".cryptography.io"), + x509.DNSName(u".cryptography.io"), x509.UniformResourceIdentifier(b"ftp://cryptography.test") ], excluded_subtrees=None @@ -3409,7 +3408,7 @@ def test_excluded_with_leading_period(self, backend): assert nc == x509.NameConstraints( permitted_subtrees=None, excluded_subtrees=[ - x509.DNSName(b".cryptography.io"), + x509.DNSName(u".cryptography.io"), x509.UniformResourceIdentifier(b"gopher://cryptography.test") ] ) @@ -3431,7 +3430,7 @@ def test_permitted_excluded_with_ips(self, backend): x509.IPAddress(ipaddress.IPv6Network(u"FF:0:0:0:0:0:0:0/96")), ], excluded_subtrees=[ - x509.DNSName(b".domain.com"), + x509.DNSName(u".domain.com"), x509.UniformResourceIdentifier(b"http://test.local"), ] ) @@ -3469,8 +3468,8 @@ def test_invalid_netmask(self, backend): ) def test_certbuilder(self, backend): - permitted = [b'.example.org', b'.xn--4ca7aey.example.com', - b'foobar.example.net'] + permitted = [u'.example.org', u'.xn--4ca7aey.example.com', + u'foobar.example.net'] private_key = RSA_KEY_2048.private_key(backend) builder = _make_certbuilder(private_key) builder = builder.add_extension( @@ -3479,7 +3478,7 @@ def test_certbuilder(self, backend): cert = builder.sign(private_key, hashes.SHA1(), backend) result = [ - x.bytes_value + x.value for x in cert.extensions.get_extension_for_class( NameConstraints ).value.permitted_subtrees diff --git a/tests/x509/test_x509_revokedcertbuilder.py b/tests/x509/test_x509_revokedcertbuilder.py index 9fc5eaa779e3..e3a06509fe23 100644 --- a/tests/x509/test_x509_revokedcertbuilder.py +++ b/tests/x509/test_x509_revokedcertbuilder.py @@ -146,7 +146,7 @@ def test_create_revoked(self, backend): x509.InvalidityDate(datetime.datetime(2015, 1, 1, 0, 0)), x509.CRLReason(x509.ReasonFlags.ca_compromise), x509.CertificateIssuer([ - x509.DNSName(b"cryptography.io"), + x509.DNSName(u"cryptography.io"), ]) ] ) @@ -180,7 +180,7 @@ def test_add_multiple_extensions(self, backend): datetime.datetime(2015, 1, 1, 0, 0) ) certificate_issuer = x509.CertificateIssuer([ - x509.DNSName(b"cryptography.io"), + x509.DNSName(u"cryptography.io"), ]) crl_reason = x509.CRLReason(x509.ReasonFlags.aa_compromise) builder = x509.RevokedCertificateBuilder().serial_number( From d3f73e0de5bf407f375c18b94f3f9535439ece3d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 09:48:40 +0800 Subject: [PATCH 097/988] backwards incompatible change to RFC822Name (#3953) * backwards incompatible change to RFC822Name During this release cycle we decided to officially deprecate passing U-labels to our GeneralName constructors. At first we tried changing this in a purely backwards compatible way but get_values_for_type made that untenable. This PR modifies RFC822Name to accept two types: U-label strings (which raises a deprecation warning) and A-label strings (the new preferred type). There is also a constructor for RFC822Name that bypasses validation so we can parse garbage out of certificates (and round trip it if necessary) * whoops --- .../hazmat/backends/openssl/decode_asn1.py | 10 ++- .../hazmat/backends/openssl/encode_asn1.py | 7 +- src/cryptography/x509/general_name.py | 62 +++++---------- tests/x509/test_x509.py | 9 ++- tests/x509/test_x509_ext.py | 76 ++++++++++--------- 5 files changed, 79 insertions(+), 85 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index aefb242212cb..86f8f8d4ac66 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -134,8 +134,14 @@ def _decode_general_name(backend, gn): _decode_x509_name(backend, gn.d.directoryName) ) elif gn.type == backend._lib.GEN_EMAIL: - data = _asn1_string_to_bytes(backend, gn.d.rfc822Name) - return x509.RFC822Name(data) + # Convert to bytes and then decode to utf8. We don't use + # asn1_string_to_utf8 here because it doesn't properly convert + # utf8 from ia5strings. + data = _asn1_string_to_bytes(backend, gn.d.rfc822Name).decode("utf8") + # We don't use the constructor for RFC822Name so we can bypass + # validation. This allows us to create RFC822Name objects that have + # unicode chars when a certificate (against the RFC) contains them. + return x509.RFC822Name._init_without_validation(data) elif gn.type == backend._lib.GEN_OTHERNAME: type_id = _obj2txt(backend, gn.d.otherName.type_id) value = _asn1_to_der(backend, gn.d.otherName.value) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 3177cf96d8ce..3f0a4c8c6b0e 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -434,9 +434,10 @@ def _encode_general_name(backend, name): elif isinstance(name, x509.RFC822Name): gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) - asn1_str = _encode_asn1_str( - backend, name.bytes_value, len(name.bytes_value) - ) + # ia5strings are supposed to be ITU T.50 but to allow round-tripping + # of broken certs that encode utf8 we'll encode utf8 here too. + data = name.value.encode("utf8") + asn1_str = _encode_asn1_str(backend, data, len(data)) gn.type = backend._lib.GEN_EMAIL gn.d.rfc822Name = asn1_str elif isinstance(name, x509.UniformResourceIdentifier): diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index d4d92c882899..6f7fa7a7868e 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -53,77 +53,55 @@ class RFC822Name(object): def __init__(self, value): if isinstance(value, six.text_type): try: - value = value.encode("ascii") + value.encode("ascii") except UnicodeEncodeError: value = self._idna_encode(value) warnings.warn( - "RFC822Name values should be passed as bytes, not strings." - " Support for passing unicode strings will be removed in a" - " future version.", - utils.DeprecatedIn21, - stacklevel=2, - ) - else: - warnings.warn( - "RFC822Name values should be passed as bytes, not strings." - " Support for passing unicode strings will be removed in a" - " future version.", + "RFC822Name values should be passed as an A-label string. " + "This means unicode characters should be encoded via " + "idna. Support for passing unicode strings (aka U-label) " + " will be removed in a future version.", utils.DeprecatedIn21, stacklevel=2, ) - elif not isinstance(value, bytes): - raise TypeError("value must be bytes") + else: + raise TypeError("value must be string") - name, address = parseaddr(value.decode("ascii")) + name, address = parseaddr(value) if name or not address: # parseaddr has found a name (e.g. Name ) or the entire # value is an empty string. raise ValueError("Invalid rfc822name value") - self._bytes_value = value + self._value = value - bytes_value = utils.read_only_property("_bytes_value") + value = utils.read_only_property("_value") + + @classmethod + def _init_without_validation(cls, value): + instance = cls.__new__(cls) + instance._value = value + return instance def _idna_encode(self, value): _, address = parseaddr(value) parts = address.split(u"@") - return parts[0].encode("ascii") + b"@" + idna.encode(parts[1]) - - @property - def value(self): - warnings.warn( - "RFC822Name.bytes_value should be used instead of RFC822Name.value" - "; it contains the name as raw bytes, instead of as an idna-" - "decoded unicode string. RFC822Name.value will be removed in a " - "future version.", - utils.DeprecatedIn21, - stacklevel=2 - ) - _, address = parseaddr(self.bytes_value.decode("ascii")) - parts = address.split(u"@") - if len(parts) == 1: - # Single label email name. This is valid for local delivery. - # No IDNA decoding needed since there is no domain component. - return address - else: - # A normal email of the form user@domain.com. Let's attempt to - # encode the domain component and reconstruct the address. - return parts[0] + u"@" + idna.decode(parts[1]) + return parts[0] + "@" + idna.encode(parts[1]).decode("ascii") def __repr__(self): - return "".format(self.bytes_value) + return "".format(self.value) def __eq__(self, other): if not isinstance(other, RFC822Name): return NotImplemented - return self.bytes_value == other.bytes_value + return self.value == other.value def __ne__(self, other): return not self == other def __hash__(self): - return hash(self.bytes_value) + return hash(self.value) def _idna_encode(value): diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index afe1c0e9bf31..d6aafcdae7ff 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2243,7 +2243,14 @@ def test_build_cert_with_rsa_key_too_small(self, backend): "add_ext", [ x509.SubjectAlternativeName( - [x509.DNSName._init_without_validation(u'a\xedt\xe1s.test')] + [ + # These examples exist to verify compatibility with + # certificates that have utf8 encoded data in the ia5string + x509.DNSName._init_without_validation(u'a\xedt\xe1s.test'), + x509.RFC822Name._init_without_validation( + u'test@a\xedt\xe1s.test' + ), + ] ), x509.CertificatePolicies([ x509.PolicyInformation( diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 6e376bb18425..5ad283581f21 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -248,7 +248,7 @@ def test_indexing(self): x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), - x509.RFC822Name(b"email@another.local"), + x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert ci[-1] == ci[4] @@ -1755,53 +1755,51 @@ def test_hash(self): class TestRFC822Name(object): def test_repr(self): - gn = x509.RFC822Name(b"string") + gn = x509.RFC822Name(u"string") if six.PY3: - assert repr(gn) == "" + assert repr(gn) == "" else: - assert repr(gn) == "" + assert repr(gn) == "" def test_equality(self): - gn = x509.RFC822Name(b"string") - gn2 = x509.RFC822Name(b"string2") - gn3 = x509.RFC822Name(b"string") + gn = x509.RFC822Name(u"string") + gn2 = x509.RFC822Name(u"string2") + gn3 = x509.RFC822Name(u"string") assert gn != gn2 assert gn != object() assert gn == gn3 - def test_not_text_or_bytes(self): + def test_not_text(self): with pytest.raises(TypeError): x509.RFC822Name(1.3) + with pytest.raises(TypeError): + x509.RFC822Name(b"bytes") + def test_invalid_email(self): with pytest.raises(ValueError): x509.RFC822Name(u"Name ") - with pytest.raises(ValueError): - x509.RFC822Name(b"Name ") with pytest.raises(ValueError): - x509.RFC822Name(b"") + x509.RFC822Name(u"") def test_single_label(self): - gn = x509.RFC822Name(b"administrator") - with pytest.warns(utils.DeprecatedIn21): - assert gn.value == u"administrator" - - assert gn.bytes_value == b"administrator" + gn = x509.RFC822Name(u"administrator") + assert gn.value == u"administrator" def test_idna(self): with pytest.warns(utils.DeprecatedIn21): gn = x509.RFC822Name(u"email@em\xe5\xefl.com") - with pytest.warns(utils.DeprecatedIn21): - assert gn.value == u"email@em\xe5\xefl.com" + assert gn.value == u"email@xn--eml-vla4c.com" - assert gn.bytes_value == b"email@xn--eml-vla4c.com" + gn2 = x509.RFC822Name(u"email@xn--eml-vla4c.com") + assert gn2.value == u"email@xn--eml-vla4c.com" def test_hash(self): - g1 = x509.RFC822Name(b"email@host.com") - g2 = x509.RFC822Name(b"email@host.com") - g3 = x509.RFC822Name(b"admin@host.com") + g1 = x509.RFC822Name(u"email@host.com") + g2 = x509.RFC822Name(u"email@host.com") + g3 = x509.RFC822Name(u"admin@host.com") assert hash(g1) == hash(g2) assert hash(g1) != hash(g3) @@ -2046,7 +2044,7 @@ def test_indexing(self): x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), - x509.RFC822Name(b"email@another.local"), + x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert gn[-1] == gn[4] @@ -2087,7 +2085,7 @@ def test_ne(self): [x509.DNSName(u"cryptography.io")] ) gns2 = x509.GeneralNames( - [x509.RFC822Name(b"admin@cryptography.io")] + [x509.RFC822Name(u"admin@cryptography.io")] ) assert gns != gns2 assert gns != object() @@ -2095,7 +2093,7 @@ def test_ne(self): def test_hash(self): gns = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) gns2 = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) - gns3 = x509.GeneralNames([x509.RFC822Name(b"admin@cryptography.io")]) + gns3 = x509.GeneralNames([x509.RFC822Name(u"admin@cryptography.io")]) assert hash(gns) == hash(gns2) assert hash(gns) != hash(gns3) @@ -2124,7 +2122,7 @@ def test_indexing(self): x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), - x509.RFC822Name(b"email@another.local"), + x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert ian[-1] == ian[4] @@ -2167,7 +2165,7 @@ def test_ne(self): [x509.DNSName(u"cryptography.io")] ) san2 = x509.IssuerAlternativeName( - [x509.RFC822Name(b"admin@cryptography.io")] + [x509.RFC822Name(u"admin@cryptography.io")] ) assert san != san2 assert san != object() @@ -2176,7 +2174,7 @@ def test_hash(self): ian = x509.IssuerAlternativeName([x509.DNSName(u"cryptography.io")]) ian2 = x509.IssuerAlternativeName([x509.DNSName(u"cryptography.io")]) ian3 = x509.IssuerAlternativeName( - [x509.RFC822Name(b"admin@cryptography.io")] + [x509.RFC822Name(u"admin@cryptography.io")] ) assert hash(ian) == hash(ian2) assert hash(ian) != hash(ian3) @@ -2249,7 +2247,7 @@ def test_indexing(self): x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), - x509.RFC822Name(b"email@another.local"), + x509.RFC822Name(u"email@another.local"), x509.UniformResourceIdentifier(b"http://another.local"), ]) assert san[-1] == san[4] @@ -2292,7 +2290,7 @@ def test_ne(self): [x509.DNSName(u"cryptography.io")] ) san2 = x509.SubjectAlternativeName( - [x509.RFC822Name(b"admin@cryptography.io")] + [x509.RFC822Name(u"admin@cryptography.io")] ) assert san != san2 assert san != object() @@ -2301,7 +2299,7 @@ def test_hash(self): san = x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]) san2 = x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]) san3 = x509.SubjectAlternativeName( - [x509.RFC822Name(b"admin@cryptography.io")] + [x509.RFC822Name(u"admin@cryptography.io")] ) assert hash(san) == hash(san2) assert hash(san) != hash(san3) @@ -2487,7 +2485,7 @@ def test_rfc822name(self, backend): san = ext.value rfc822name = san.get_values_for_type(x509.RFC822Name) - assert [u"email@em\xe5\xefl.com"] == rfc822name + assert [u"email@xn--eml-vla4c.com"] == rfc822name def test_idna2003_invalid(self, backend): cert = _load_cert( @@ -2520,7 +2518,7 @@ def test_unicode_rfc822_name_dns_name_uri(self, backend): rfc822_name = ext.value.get_values_for_type(x509.RFC822Name) dns_name = ext.value.get_values_for_type(x509.DNSName) uri = ext.value.get_values_for_type(x509.UniformResourceIdentifier) - assert rfc822_name == [u"email@\u043f\u044b\u043a\u0430.cryptography"] + assert rfc822_name == [u"email@xn--80ato2c.cryptography"] assert dns_name == [u"xn--80ato2c.cryptography"] assert uri == [u"https://www.\u043f\u044b\u043a\u0430.cryptography"] @@ -2569,10 +2567,14 @@ def test_invalid_rfc822name(self, backend): x509.load_pem_x509_certificate, backend ) - with pytest.raises(ValueError) as exc: - cert.extensions - - assert 'Invalid rfc822name value' in str(exc.value) + san = cert.extensions.get_extension_for_class( + x509.SubjectAlternativeName + ).value + values = san.get_values_for_type(x509.RFC822Name) + assert values == [ + u'email', u'email ', u'email ', + u'email ', u'myemail:' + ] def test_other_name(self, backend): cert = _load_cert( From 1b43b51599e4a3b39662b069af0140bf24ac3a43 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 11:47:46 +0800 Subject: [PATCH 098/988] backwards incompatible change to UniformResourceIdentifier (#3954) * backwards incompatible change to UniformResourceIdentifier During this release cycle we decided to officially deprecate passing U-labels to our GeneralName constructors. At first we tried changing this in a purely backwards compatible way but get_values_for_type made that untenable. This PR modifies URI to accept two types: U-label strings (which raises a deprecation warning) and A-label strings (the new preferred type). There is also a constructor for URI that bypasses validation so we can parse garbage out of certificates (and round trip it if necessary) * nonsense empty commit 2.6 and codecov are the worst --- .../hazmat/backends/openssl/decode_asn1.py | 12 +- .../hazmat/backends/openssl/encode_asn1.py | 7 +- src/cryptography/x509/general_name.py | 75 ++-- tests/x509/test_x509.py | 11 +- tests/x509/test_x509_ext.py | 322 +++++++++--------- 5 files changed, 199 insertions(+), 228 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 86f8f8d4ac66..24eb55b1403e 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -97,8 +97,16 @@ def _decode_general_name(backend, gn): # when a certificate (against the RFC) contains them. return x509.DNSName._init_without_validation(data) elif gn.type == backend._lib.GEN_URI: - data = _asn1_string_to_bytes(backend, gn.d.uniformResourceIdentifier) - return x509.UniformResourceIdentifier(data) + # Convert to bytes and then decode to utf8. We don't use + # asn1_string_to_utf8 here because it doesn't properly convert + # utf8 from ia5strings. + data = _asn1_string_to_bytes( + backend, gn.d.uniformResourceIdentifier + ).decode("utf8") + # We don't use the constructor for URI so we can bypass validation + # This allows us to create URI objects that have unicode chars + # when a certificate (against the RFC) contains them. + return x509.UniformResourceIdentifier._init_without_validation(data) elif gn.type == backend._lib.GEN_RID: oid = _obj2txt(backend, gn.d.registeredID) return x509.RegisteredID(x509.ObjectIdentifier(oid)) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 3f0a4c8c6b0e..89b2f7f76d32 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -443,9 +443,10 @@ def _encode_general_name(backend, name): elif isinstance(name, x509.UniformResourceIdentifier): gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) - asn1_str = _encode_asn1_str( - backend, name.bytes_value, len(name.bytes_value) - ) + # ia5strings are supposed to be ITU T.50 but to allow round-tripping + # of broken certs that encode utf8 we'll encode utf8 here too. + data = name.value.encode("utf8") + asn1_str = _encode_asn1_str(backend, data, len(data)) gn.type = backend._lib.GEN_URI gn.d.uniformResourceIdentifier = asn1_str else: diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 6f7fa7a7868e..776219e2a528 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -163,30 +163,29 @@ class UniformResourceIdentifier(object): def __init__(self, value): if isinstance(value, six.text_type): try: - value = value.encode("ascii") + value.encode("ascii") except UnicodeEncodeError: value = self._idna_encode(value) warnings.warn( - "UniformResourceIdentifier values should be passed as " - "bytes with the hostname idna encoded, not strings. " - "Support for passing unicode strings will be removed in a " - "future version.", - utils.DeprecatedIn21, - stacklevel=2, - ) - else: - warnings.warn( - "UniformResourceIdentifier values should be passed as " - "bytes with the hostname idna encoded, not strings. " - "Support for passing unicode strings will be removed in a " - "future version.", + "URI values should be passed as an A-label string. " + "This means unicode characters should be encoded via " + "idna. Support for passing unicode strings (aka U-label) " + " will be removed in a future version.", utils.DeprecatedIn21, stacklevel=2, ) - elif not isinstance(value, bytes): - raise TypeError("value must be bytes") + else: + raise TypeError("value must be string") + + self._value = value - self._bytes_value = value + value = utils.read_only_property("_value") + + @classmethod + def _init_without_validation(cls, value): + instance = cls.__new__(cls) + instance._value = value + return instance def _idna_encode(self, value): parsed = urllib_parse.urlparse(value) @@ -208,58 +207,22 @@ def _idna_encode(self, value): parsed.params, parsed.query, parsed.fragment - )).encode("ascii") - - @property - def value(self): - warnings.warn( - "UniformResourceIdentifier.bytes_value should be used instead of " - "UniformResourceIdentifier.value; it contains the name as raw " - "bytes, instead of as an idna-decoded unicode string. " - "UniformResourceIdentifier.value will be removed in a future " - "version.", - utils.DeprecatedIn21, - stacklevel=2 - ) - parsed = urllib_parse.urlparse(self.bytes_value) - if not parsed.hostname: - # There's no idna here so we can immediately return - return self.bytes_value.decode("utf-8") - elif parsed.port: - netloc = idna.decode(parsed.hostname) + ":{0}".format(parsed.port) - else: - netloc = idna.decode(parsed.hostname) - - # Note that building a URL in this fashion means it should be - # semantically indistinguishable from the original but is not - # guaranteed to be exactly the same. - return urllib_parse.urlunparse(( - parsed.scheme.decode('utf8'), - netloc, - parsed.path.decode('utf8'), - parsed.params.decode('utf8'), - parsed.query.decode('utf8'), - parsed.fragment.decode('utf8') )) - bytes_value = utils.read_only_property("_bytes_value") - def __repr__(self): - return "".format( - self.bytes_value - ) + return "".format(self.value) def __eq__(self, other): if not isinstance(other, UniformResourceIdentifier): return NotImplemented - return self.bytes_value == other.bytes_value + return self.value == other.value def __ne__(self, other): return not self == other def __hash__(self): - return hash(self.bytes_value) + return hash(self.value) @utils.register_interface(GeneralName) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index d6aafcdae7ff..a07ffb3a81a8 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -230,7 +230,7 @@ def test_extensions(self, backend): ) ]) assert ian.value == x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(b"https://cryptography.io"), + x509.UniformResourceIdentifier(u"https://cryptography.io"), ]) def test_delta_crl_indicator(self, backend): @@ -1628,7 +1628,7 @@ def test_encode_nonstandard_aia(self, backend): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( x509.ObjectIdentifier("2.999.7"), - x509.UniformResourceIdentifier(b"http://example.com") + x509.UniformResourceIdentifier(u"http://example.com") ), ]) @@ -2250,6 +2250,9 @@ def test_build_cert_with_rsa_key_too_small(self, backend): x509.RFC822Name._init_without_validation( u'test@a\xedt\xe1s.test' ), + x509.UniformResourceIdentifier._init_without_validation( + u'http://a\xedt\xe1s.test' + ), ] ), x509.CertificatePolicies([ @@ -3120,11 +3123,11 @@ def test_build_cert_with_aia(self, backend): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 5ad283581f21..9f4e17580285 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -249,7 +249,7 @@ def test_indexing(self): x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(b"http://another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), ]) assert ci[-1] == ci[4] assert ci[2:6:2] == [ci[2], ci[4]] @@ -289,7 +289,7 @@ def test_hash(self): ci1 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) ci2 = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) ci3 = x509.CertificateIssuer( - [x509.UniformResourceIdentifier(b"http://something")] + [x509.UniformResourceIdentifier(u"http://something")] ) assert hash(ci1) == hash(ci2) assert hash(ci1) != hash(ci3) @@ -1807,78 +1807,74 @@ def test_hash(self): class TestUniformResourceIdentifier(object): def test_equality(self): - gn = x509.UniformResourceIdentifier(b"string") - gn2 = x509.UniformResourceIdentifier(b"string2") - gn3 = x509.UniformResourceIdentifier(b"string") + gn = x509.UniformResourceIdentifier(u"string") + gn2 = x509.UniformResourceIdentifier(u"string2") + gn3 = x509.UniformResourceIdentifier(u"string") assert gn != gn2 assert gn != object() assert gn == gn3 - def test_not_text_or_bytes(self): + def test_not_text(self): with pytest.raises(TypeError): x509.UniformResourceIdentifier(1.3) def test_no_parsed_hostname(self): - gn = x509.UniformResourceIdentifier(b"singlelabel") - assert gn.bytes_value == b"singlelabel" + gn = x509.UniformResourceIdentifier(u"singlelabel") + assert gn.value == u"singlelabel" def test_with_port(self): - gn = x509.UniformResourceIdentifier(b"singlelabel:443/test") - assert gn.bytes_value == b"singlelabel:443/test" + gn = x509.UniformResourceIdentifier(u"singlelabel:443/test") + assert gn.value == u"singlelabel:443/test" def test_idna_no_port(self): with pytest.warns(utils.DeprecatedIn21): gn = x509.UniformResourceIdentifier( u"http://\u043f\u044b\u043a\u0430.cryptography" ) - with pytest.warns(utils.DeprecatedIn21): - assert gn.value == u"http://\u043f\u044b\u043a\u0430.cryptography" - assert gn.bytes_value == b"http://xn--80ato2c.cryptography" + + assert gn.value == u"http://xn--80ato2c.cryptography" def test_idna_with_port(self): with pytest.warns(utils.DeprecatedIn21): gn = x509.UniformResourceIdentifier( u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" ) - with pytest.warns(utils.DeprecatedIn21): - assert gn.value == ( - u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" - ) - assert gn.bytes_value == ( - b"gopher://xn--80ato2c.cryptography:70/some/path" + + assert gn.value == ( + u"gopher://xn--80ato2c.cryptography:70/some/path" ) def test_empty_hostname(self): - gn = x509.UniformResourceIdentifier(b"ldap:///some-nonsense") - assert gn.bytes_value == b"ldap:///some-nonsense" - with pytest.warns(utils.DeprecatedIn21): - assert gn.value == "ldap:///some-nonsense" + gn = x509.UniformResourceIdentifier(u"ldap:///some-nonsense") + assert gn.value == "ldap:///some-nonsense" def test_query_and_fragment(self): - gn = x509.UniformResourceIdentifier( - b"ldap://cryptography:90/path?query=true#somedata" - ) - assert gn.bytes_value == ( - b"ldap://cryptography:90/path?query=true#somedata" + with pytest.warns(utils.DeprecatedIn21): + gn = x509.UniformResourceIdentifier( + u"ldap://\u043f\u044b\u043a\u0430.cryptography:90/path?query=" + u"true#somedata" + ) + assert gn.value == ( + u"ldap://xn--80ato2c.cryptography:90/path?query=true#somedata" ) def test_hash(self): - g1 = x509.UniformResourceIdentifier(b"http://host.com") - g2 = x509.UniformResourceIdentifier(b"http://host.com") - g3 = x509.UniformResourceIdentifier(b"http://other.com") + g1 = x509.UniformResourceIdentifier(u"http://host.com") + g2 = x509.UniformResourceIdentifier(u"http://host.com") + g3 = x509.UniformResourceIdentifier(u"http://other.com") assert hash(g1) == hash(g2) assert hash(g1) != hash(g3) def test_repr(self): - gn = x509.UniformResourceIdentifier(b"string") + gn = x509.UniformResourceIdentifier(u"string") if six.PY3: assert repr(gn) == ( - "" + "" ) else: assert repr(gn) == ( - "" + "" ) @@ -2045,7 +2041,7 @@ def test_indexing(self): x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(b"http://another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), ]) assert gn[-1] == gn[4] assert gn[2:6:2] == [gn[2], gn[4]] @@ -2123,7 +2119,7 @@ def test_indexing(self): x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(b"http://another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), ]) assert ian[-1] == ian[4] assert ian[2:6:2] == [ian[2], ian[4]] @@ -2193,7 +2189,7 @@ def test_uri(self, backend): ExtensionOID.ISSUER_ALTERNATIVE_NAME ) assert list(ext.value) == [ - x509.UniformResourceIdentifier(b"http://path.to.root/root.crt"), + x509.UniformResourceIdentifier(u"http://path.to.root/root.crt"), ] @@ -2248,7 +2244,7 @@ def test_indexing(self): x509.DNSName(u"crypto.local"), x509.DNSName(u"another.local"), x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(b"http://another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), ]) assert san[-1] == san[4] assert san[2:6:2] == [san[2], san[4]] @@ -2416,7 +2412,7 @@ def test_uri(self, backend): x509.UniformResourceIdentifier ) assert uri == [ - u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/path?q=s#hel" + u"gopher://xn--80ato2c.cryptography:70/path?q=s#hel" u"lo", u"http://someregulardomain.com", ] @@ -2520,7 +2516,7 @@ def test_unicode_rfc822_name_dns_name_uri(self, backend): uri = ext.value.get_values_for_type(x509.UniformResourceIdentifier) assert rfc822_name == [u"email@xn--80ato2c.cryptography"] assert dns_name == [u"xn--80ato2c.cryptography"] - assert uri == [u"https://www.\u043f\u044b\u043a\u0430.cryptography"] + assert uri == [u"https://www.xn--80ato2c.cryptography"] def test_rfc822name_dnsname_ipaddress_directoryname_uri(self, backend): cert = _load_cert( @@ -2660,51 +2656,51 @@ def test_invalid_access_location(self): def test_valid_nonstandard_method(self): ad = x509.AccessDescription( ObjectIdentifier("2.999.1"), - x509.UniformResourceIdentifier(b"http://example.com") + x509.UniformResourceIdentifier(u"http://example.com") ) assert ad is not None def test_repr(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) if six.PY3: assert repr(ad) == ( ", access_location=)>" + "Identifier(value='http://ocsp.domain.com')>)>" ) else: assert repr(ad) == ( ", access_location=)>" + "Identifier(value=u'http://ocsp.domain.com')>)>" ) def test_eq(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) assert ad == ad2 def test_ne(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) ad3 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://notthesame") + x509.UniformResourceIdentifier(u"http://notthesame") ) assert ad != ad2 assert ad != ad3 @@ -2713,15 +2709,15 @@ def test_ne(self): def test_hash(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) ad3 = x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) assert hash(ad) == hash(ad2) assert hash(ad) != hash(ad3) @@ -2811,22 +2807,22 @@ def test_iter_len(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) assert len(aia) == 2 assert list(aia) == [ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ] @@ -2834,7 +2830,7 @@ def test_iter_input(self): desc = [ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) ] aia = x509.AuthorityInformationAccess(iter(desc)) @@ -2844,31 +2840,31 @@ def test_repr(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) if six.PY3: assert repr(aia) == ( ", acces" - "s_location=)>, , access_lo" - "cation=)>])>" ) else: assert repr(aia) == ( ", acces" - "s_location=)>, , access_lo" - "cation=)>])>" ) @@ -2876,21 +2872,21 @@ def test_eq(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) aia2 = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) assert aia == aia2 @@ -2899,17 +2895,17 @@ def test_ne(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) aia2 = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), ]) @@ -2920,23 +2916,23 @@ def test_indexing(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp2.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp2.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp3.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp3.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp4.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp4.domain.com") ), ]) assert aia[-1] == aia[4] @@ -2946,31 +2942,31 @@ def test_hash(self): aia = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) aia2 = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) aia3 = x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.other.com") + x509.UniformResourceIdentifier(u"http://ocsp.other.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://domain.com/ca.crt") + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") ) ]) assert hash(aia) == hash(aia2) @@ -2995,11 +2991,11 @@ def test_aia_ocsp_ca_issuers(self, backend): assert ext.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://gv.symcd.com") + x509.UniformResourceIdentifier(u"http://gv.symcd.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(b"http://gv.symcb.com/gv.crt") + x509.UniformResourceIdentifier(u"http://gv.symcb.com/gv.crt") ), ]) @@ -3018,11 +3014,11 @@ def test_aia_multiple_ocsp_ca_issuers(self, backend): assert ext.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp2.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp2.domain.com") ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, @@ -3049,7 +3045,7 @@ def test_aia_ocsp_only(self, backend): assert ext.value == x509.AuthorityInformationAccess([ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(b"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ), ]) @@ -3391,7 +3387,7 @@ def test_permitted_with_leading_period(self, backend): assert nc == x509.NameConstraints( permitted_subtrees=[ x509.DNSName(u".cryptography.io"), - x509.UniformResourceIdentifier(b"ftp://cryptography.test") + x509.UniformResourceIdentifier(u"ftp://cryptography.test") ], excluded_subtrees=None ) @@ -3411,7 +3407,7 @@ def test_excluded_with_leading_period(self, backend): permitted_subtrees=None, excluded_subtrees=[ x509.DNSName(u".cryptography.io"), - x509.UniformResourceIdentifier(b"gopher://cryptography.test") + x509.UniformResourceIdentifier(u"gopher://cryptography.test") ] ) @@ -3433,7 +3429,7 @@ def test_permitted_excluded_with_ips(self, backend): ], excluded_subtrees=[ x509.DNSName(u".domain.com"), - x509.UniformResourceIdentifier(b"http://test.local"), + x509.UniformResourceIdentifier(u"http://test.local"), ] ) @@ -3508,7 +3504,7 @@ def test_crl_issuer_not_general_names(self): def test_reason_not_reasonflags(self): with pytest.raises(TypeError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset(["notreasonflags"]), None @@ -3517,7 +3513,7 @@ def test_reason_not_reasonflags(self): def test_reason_not_frozenset(self): with pytest.raises(TypeError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, [x509.ReasonFlags.ca_compromise], None @@ -3526,7 +3522,7 @@ def test_reason_not_frozenset(self): def test_disallowed_reasons(self): with pytest.raises(ValueError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.unspecified]), None @@ -3534,7 +3530,7 @@ def test_disallowed_reasons(self): with pytest.raises(ValueError): x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.remove_from_crl]), None @@ -3551,7 +3547,7 @@ def test_reason_only(self): def test_eq(self): dp = x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3565,7 +3561,7 @@ def test_eq(self): ], ) dp2 = x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3582,7 +3578,7 @@ def test_eq(self): def test_ne(self): dp = x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3596,7 +3592,7 @@ def test_ne(self): ], ) dp2 = x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, None, None @@ -3605,7 +3601,7 @@ def test_ne(self): assert dp != object() def test_iter_input(self): - name = [x509.UniformResourceIdentifier(b"http://crypt.og/crl")] + name = [x509.UniformResourceIdentifier(u"http://crypt.og/crl")] issuer = [ x509.DirectoryName( x509.Name([ @@ -3662,7 +3658,7 @@ def test_repr(self): def test_hash(self): dp = x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3676,7 +3672,7 @@ def test_hash(self): ], ) dp2 = x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://crypt.og/crl")], + [x509.UniformResourceIdentifier(u"http://crypt.og/crl")], None, frozenset([x509.ReasonFlags.superseded]), [ @@ -3709,14 +3705,14 @@ def test_invalid_distribution_points(self): def test_iter_len(self): fcrl = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://domain")], + [x509.UniformResourceIdentifier(u"http://domain")], None, None, None ), ]) assert len(fcrl) == 1 assert list(fcrl) == [ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://domain")], + [x509.UniformResourceIdentifier(u"http://domain")], None, None, None ), ] @@ -3724,7 +3720,7 @@ def test_iter_len(self): def test_iter_input(self): points = [ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://domain")], + [x509.UniformResourceIdentifier(u"http://domain")], None, None, None ), ] @@ -3734,7 +3730,7 @@ def test_iter_input(self): def test_repr(self): fcrl = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), None @@ -3743,14 +3739,14 @@ def test_repr(self): if six.PY3: assert repr(fcrl) == ( "], relative" + "rmResourceIdentifier(value='ftp://domain')>], relative" "_name=None, reasons=frozenset({}), crl_issuer=None)>])>" ) else: assert repr(fcrl) == ( "], relative" + "rmResourceIdentifier(value=u'ftp://domain')>], relative" "_name=None, reasons=frozenset([]), crl_issuer=None)>])>" ) @@ -3758,24 +3754,24 @@ def test_repr(self): def test_eq(self): fcrl = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) fcrl2 = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) assert fcrl == fcrl2 @@ -3783,43 +3779,43 @@ def test_eq(self): def test_ne(self): fcrl = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) fcrl2 = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain2")], + [x509.UniformResourceIdentifier(u"ftp://domain2")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) fcrl3 = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) fcrl4 = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing2")], + [x509.UniformResourceIdentifier(u"uri://thing2")], ), ]) assert fcrl != fcrl2 @@ -3830,32 +3826,32 @@ def test_ne(self): def test_hash(self): fcrl = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) fcrl2 = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) fcrl3 = x509.FreshestCRL([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) assert hash(fcrl) == hash(fcrl2) @@ -3865,23 +3861,23 @@ def test_indexing(self): fcrl = x509.FreshestCRL([ x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing2")], + [x509.UniformResourceIdentifier(u"uri://thing2")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing3")], + [x509.UniformResourceIdentifier(u"uri://thing3")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing4")], + [x509.UniformResourceIdentifier(u"uri://thing4")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing5")], + [x509.UniformResourceIdentifier(u"uri://thing5")], ), ]) assert fcrl[-1] == fcrl[4] @@ -3896,13 +3892,13 @@ def test_invalid_distribution_points(self): def test_iter_len(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://domain")], + [x509.UniformResourceIdentifier(u"http://domain")], None, None, None ), x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, @@ -3914,13 +3910,13 @@ def test_iter_len(self): assert len(cdp) == 2 assert list(cdp) == [ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://domain")], + [x509.UniformResourceIdentifier(u"http://domain")], None, None, None ), x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, @@ -3933,7 +3929,7 @@ def test_iter_len(self): def test_iter_input(self): points = [ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"http://domain")], + [x509.UniformResourceIdentifier(u"http://domain")], None, None, None @@ -3945,7 +3941,7 @@ def test_iter_input(self): def test_repr(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), None @@ -3954,14 +3950,14 @@ def test_repr(self): if six.PY3: assert repr(cdp) == ( "], relative" + "rmResourceIdentifier(value='ftp://domain')>], relative" "_name=None, reasons=frozenset({}), crl_issuer=None)>])>" ) else: assert repr(cdp) == ( "], relative" + "rmResourceIdentifier(value=u'ftp://domain')>], relative" "_name=None, reasons=frozenset([]), crl_issuer=None)>])>" ) @@ -3969,24 +3965,24 @@ def test_repr(self): def test_eq(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) cdp2 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) assert cdp == cdp2 @@ -3994,43 +3990,43 @@ def test_eq(self): def test_ne(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) cdp2 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain2")], + [x509.UniformResourceIdentifier(u"ftp://domain2")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) cdp3 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) cdp4 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing2")], + [x509.UniformResourceIdentifier(u"uri://thing2")], ), ]) assert cdp != cdp2 @@ -4041,32 +4037,32 @@ def test_ne(self): def test_hash(self): cdp = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) cdp2 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([ x509.ReasonFlags.key_compromise, x509.ReasonFlags.ca_compromise, ]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) cdp3 = x509.CRLDistributionPoints([ x509.DistributionPoint( - [x509.UniformResourceIdentifier(b"ftp://domain")], + [x509.UniformResourceIdentifier(u"ftp://domain")], None, frozenset([x509.ReasonFlags.key_compromise]), - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), ]) assert hash(cdp) == hash(cdp2) @@ -4076,23 +4072,23 @@ def test_indexing(self): ci = x509.CRLDistributionPoints([ x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing")], + [x509.UniformResourceIdentifier(u"uri://thing")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing2")], + [x509.UniformResourceIdentifier(u"uri://thing2")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing3")], + [x509.UniformResourceIdentifier(u"uri://thing3")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing4")], + [x509.UniformResourceIdentifier(u"uri://thing4")], ), x509.DistributionPoint( None, None, None, - [x509.UniformResourceIdentifier(b"uri://thing5")], + [x509.UniformResourceIdentifier(u"uri://thing5")], ), ]) assert ci[-1] == ci[4] @@ -4329,7 +4325,7 @@ def test_crl_empty_hostname(self, backend): assert cdps == x509.CRLDistributionPoints([ x509.DistributionPoint( full_name=[x509.UniformResourceIdentifier( - b"ldap:///CN=A,OU=B,dc=C,DC=D?E?F?G?H=I" + u"ldap:///CN=A,OU=B,dc=C,DC=D?E?F?G?H=I" )], relative_name=None, reasons=None, @@ -4355,10 +4351,10 @@ def test_vector(self, backend): x509.DistributionPoint( full_name=[ x509.UniformResourceIdentifier( - b'http://myhost.com/myca.crl' + u'http://myhost.com/myca.crl' ), x509.UniformResourceIdentifier( - b'http://backup.myhost.com/myca.crl' + u'http://backup.myhost.com/myca.crl' ) ], relative_name=None, From a3facfae09c881b8a1953ffd7b192debc58bb5a0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 19:49:27 +0800 Subject: [PATCH 099/988] parallelize docs work and always give full traceback on exception (#3957) In local testing this didn't seem to gain much, but it also doesn't hurt so what the hell. --- tox.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tox.ini b/tox.ini index 51d81d2c32b0..b8def744a9ea 100644 --- a/tox.ini +++ b/tox.ini @@ -40,10 +40,10 @@ extras = docstest basepython = python2.7 commands = - sphinx-build -W -b html -d {envtmpdir}/doctrees docs docs/_build/html - sphinx-build -W -b latex -d {envtmpdir}/doctrees docs docs/_build/latex - sphinx-build -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html - sphinx-build -W -b spelling docs docs/_build/html + sphinx-build -j4 -T -W -b html -d {envtmpdir}/doctrees docs docs/_build/html + sphinx-build -j4 -T -W -b latex -d {envtmpdir}/doctrees docs docs/_build/latex + sphinx-build -j4 -T -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html + sphinx-build -j4 -T -W -b spelling docs docs/_build/html doc8 --allow-long-titles README.rst CHANGELOG.rst docs/ --ignore-path docs/_build/ python setup.py check --restructuredtext --strict From 1aac78c4d036d20e8892f3861ea947cadf6ab739 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 19:49:57 +0800 Subject: [PATCH 100/988] let's talk about bits baby (#3956) --- docs/glossary.rst | 9 +++ docs/hazmat/primitives/aead.rst | 4 +- docs/hazmat/primitives/asymmetric/dsa.rst | 4 +- docs/hazmat/primitives/asymmetric/ec.rst | 14 ++--- docs/hazmat/primitives/asymmetric/rsa.rst | 8 +-- docs/hazmat/primitives/padding.rst | 8 +-- .../primitives/symmetric-encryption.rst | 56 ++++++++++--------- docs/hazmat/primitives/twofactor.rst | 25 +++++---- 8 files changed, 71 insertions(+), 57 deletions(-) diff --git a/docs/glossary.rst b/docs/glossary.rst index 3a1280a60dec..df3276054d1a 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -85,5 +85,14 @@ Glossary prefix ``xn--``. To create an A-label from a unicode domain string use a library like `idna`_. + bits + A bit is binary value -- a value that has only two possible states. + Typically binary values are represented visually as 0 or 1, but + remember that their actual value is not a printable character. A byte + on modern computers is 8 bits and represents 256 possible values. In + cryptographic applications when you see something say it requires a 128 + bit key, you can calculate the number of bytes by dividing by 8. 128 + divided by 8 is 16, so a 128 bit key is a 16 byte key. + .. _`hardware security module`: https://en.wikipedia.org/wiki/Hardware_security_module .. _`idna`: https://pypi.org/project/idna/ diff --git a/docs/hazmat/primitives/aead.rst b/docs/hazmat/primitives/aead.rst index 3c45b523acb4..7b01f745e26e 100644 --- a/docs/hazmat/primitives/aead.rst +++ b/docs/hazmat/primitives/aead.rst @@ -122,7 +122,7 @@ also support providing integrity for associated data which is not encrypted. passed directly to the ``decrypt`` method. :param bytes nonce: NIST `recommends a 96-bit IV length`_ for best - performance but it can be up to 2\ :sup:`64` - 1 bits. + performance but it can be up to 2\ :sup:`64` - 1 :term:`bits`. **NEVER REUSE A NONCE** with a key. :param bytes data: The data to encrypt. :param bytes associated_data: Additional data that should be @@ -136,7 +136,7 @@ also support providing integrity for associated data which is not encrypted. ``associated_data`` in decrypt or the integrity check will fail. :param bytes nonce: NIST `recommends a 96-bit IV length`_ for best - performance but it can be up to 2\ :sup:`64` - 1 bits. + performance but it can be up to 2\ :sup:`64` - 1 :term:`bits`. **NEVER REUSE A NONCE** with a key. :param bytes data: The data to decrypt (with tag appended). :param bytes associated_data: Additional data to authenticate. Can be diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index 57b4a960d079..9da7273e386e 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -17,8 +17,8 @@ Generation Generate a DSA private key from the given key size. This function will generate a new set of parameters and key in one step. - :param int key_size: The length of the modulus in bits. It should be - either 1024, 2048 or 3072. For keys generated in 2015 this should + :param int key_size: The length of the modulus in :term:`bits`. It should + be either 1024, 2048 or 3072. For keys generated in 2015 this should be `at least 2048`_ (See page 41). Note that some applications (such as SSH) have not yet gained support for larger key sizes specified in FIPS 186-3 and are still restricted to only the diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 50c38e3e4d19..0bb74c6fe15e 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -268,7 +268,7 @@ is faster than diffie-hellman`_. .. note:: Curves with a size of `less than 224 bits`_ should not be used. You should - strongly consider using curves of at least 224 bits. + strongly consider using curves of at least 224 :term:`bits`. Generally the NIST prime field ("P") curves are significantly faster than the other types suggested by NIST at both signing and verifying with ECDSA. @@ -415,8 +415,8 @@ Key Interfaces :type: int - Size (in bits) of a secret scalar for the curve (as generated by - :func:`generate_private_key`). + Size (in :term:`bits`) of a secret scalar for the curve (as generated + by :func:`generate_private_key`). .. class:: EllipticCurveSignatureAlgorithm @@ -490,8 +490,8 @@ Key Interfaces :type: int - Size (in bits) of a secret scalar for the curve (as generated by - :func:`generate_private_key`). + Size (in :term:`bits`) of a secret scalar for the curve (as generated + by :func:`generate_private_key`). .. class:: EllipticCurvePrivateKeyWithSerialization @@ -593,8 +593,8 @@ Key Interfaces :type: int - Size (in bits) of a secret scalar for the curve (as generated by - :func:`generate_private_key`). + Size (in :term:`bits`) of a secret scalar for the curve (as generated + by :func:`generate_private_key`). .. class:: EllipticCurvePublicKeyWithSerialization diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index a49b4d3402db..607cebb1048d 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -19,9 +19,9 @@ mathematical properties`_. .. versionadded:: 0.5 Generates a new RSA private key using the provided ``backend``. - ``key_size`` describes how many bits long the key should be, larger keys - provide more security, currently ``1024`` and below are considered - breakable, and ``2048`` or ``4096`` are reasonable default key sizes for + ``key_size`` describes how many :term:`bits` long the key should be. Larger + keys provide more security; currently ``1024`` and below are considered + breakable while ``2048`` or ``4096`` are reasonable default key sizes for new keys. The ``public_exponent`` indicates what one mathematical property of the key generation will be. Unless you have a specific reason to do otherwise, you should always `use 65537`_. @@ -40,7 +40,7 @@ mathematical properties`_. Usually one of the small Fermat primes 3, 5, 17, 257, 65537. If in doubt you should `use 65537`_. - :param int key_size: The length of the modulus in bits. For keys + :param int key_size: The length of the modulus in :term:`bits`. For keys generated in 2015 it is strongly recommended to be `at least 2048`_ (See page 41). It must not be less than 512. Some backends may have additional limitations. diff --git a/docs/hazmat/primitives/padding.rst b/docs/hazmat/primitives/padding.rst index 45bcc139488d..e49fc4946480 100644 --- a/docs/hazmat/primitives/padding.rst +++ b/docs/hazmat/primitives/padding.rst @@ -36,8 +36,8 @@ multiple of the block size. >>> data + unpadder.finalize() '11111111111111112222222222' - :param block_size: The size of the block in bits that the data is being - padded to. + :param block_size: The size of the block in :term:`bits` that the data is + being padded to. :raises ValueError: Raised if block size is not a multiple of 8 or is not between 0 and 2040 inclusive. @@ -79,8 +79,8 @@ multiple of the block size. >>> data + unpadder.finalize() '11111111111111112222222222' - :param block_size: The size of the block in bits that the data is being - padded to. + :param block_size: The size of the block in :term:`bits` that the data is + being padded to. :raises ValueError: Raised if block size is not a multiple of 8 or is not between 0 and 2040 inclusive. diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 2635e753c6cc..aa577f07f5c8 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -93,7 +93,7 @@ Algorithms choice for encryption. :param bytes key: The secret key. This must be kept secret. Either ``128``, - ``192``, or ``256`` bits long. + ``192``, or ``256`` :term:`bits` long. .. class:: Camellia(key) @@ -102,7 +102,7 @@ Algorithms is not as widely studied or deployed. :param bytes key: The secret key. This must be kept secret. Either ``128``, - ``192``, or ``256`` bits long. + ``192``, or ``256`` :term:`bits` long. .. class:: ChaCha20(key) @@ -120,15 +120,15 @@ Algorithms ChaCha20 is a stream cipher used in several IETF protocols. It is standardized in :rfc:`7539`. - :param bytes key: The secret key. This must be kept secret. ``256`` bits - (32 bytes) in length. + :param bytes key: The secret key. This must be kept secret. ``256`` + :term:`bits` (32 bytes) in length. :param bytes nonce: Should be unique, a :term:`nonce`. It is critical to never reuse a ``nonce`` with a given key. Any reuse of a nonce with the same key compromises the security of every message encrypted with that key. The nonce does not need to be kept secret - and may be included with the ciphertext. This must be ``128`` bits in - length. + and may be included with the ciphertext. This must be ``128`` + :term:`bits` in length. .. note:: @@ -162,10 +162,11 @@ Algorithms is incredibly slow; old applications should consider moving away from it. :param bytes key: The secret key. This must be kept secret. Either ``64``, - ``128``, or ``192`` bits long. DES only uses ``56``, ``112``, or ``168`` - bits of the key as there is a parity byte in each component of the key. - Some writing refers to there being up to three separate keys that are each - ``56`` bits long, they can simply be concatenated to produce the full key. + ``128``, or ``192`` :term:`bits` long. DES only uses ``56``, ``112``, + or ``168`` bits of the key as there is a parity byte in each component + of the key. Some writing refers to there being up to three separate + keys that are each ``56`` bits long, they can simply be concatenated + to produce the full key. .. class:: CAST5(key) @@ -173,10 +174,11 @@ Algorithms CAST5 (also known as CAST-128) is a block cipher approved for use in the Canadian government by the `Communications Security Establishment`_. It is - a variable key length cipher and supports keys from 40-128 bits in length. + a variable key length cipher and supports keys from 40-128 :term:`bits` in + length. - :param bytes key: The secret key, This must be kept secret. 40 to 128 bits - in length in increments of 8 bits. + :param bytes key: The secret key, This must be kept secret. 40 to 128 + :term:`bits` in length in increments of 8 bits. .. class:: SEED(key) @@ -186,8 +188,8 @@ Algorithms (KISA). It is defined in :rfc:`4269` and is used broadly throughout South Korean industry, but rarely found elsewhere. - :param bytes key: The secret key. This must be kept secret. ``128`` bits in - length. + :param bytes key: The secret key. This must be kept secret. ``128`` + :term:`bits` in length. Weak ciphers ------------ @@ -204,8 +206,8 @@ Weak ciphers susceptible to attacks when using weak keys. The author has recommended that users of Blowfish move to newer algorithms such as :class:`AES`. - :param bytes key: The secret key. This must be kept secret. 32 to 448 bits - in length in increments of 8 bits. + :param bytes key: The secret key. This must be kept secret. 32 to 448 + :term:`bits` in length in increments of 8 bits. .. class:: ARC4(key) @@ -214,7 +216,8 @@ Weak ciphers mode constructions. :param bytes key: The secret key. This must be kept secret. Either ``40``, - ``56``, ``64``, ``80``, ``128``, ``192``, or ``256`` bits in length. + ``56``, ``64``, ``80``, ``128``, ``192``, or ``256`` :term:`bits` in + length. .. doctest:: @@ -235,8 +238,8 @@ Weak ciphers is susceptible to attacks when using weak keys. It is recommended that you do not use this cipher for new applications. - :param bytes key: The secret key. This must be kept secret. ``128`` bits in - length. + :param bytes key: The secret key. This must be kept secret. ``128`` + :term:`bits` in length. .. _symmetric-encryption-modes: @@ -284,7 +287,7 @@ Modes .. warning:: Counter mode is not recommended for use with block ciphers that have a - block size of less than 128-bits. + block size of less than 128-:term:`bits`. CTR (Counter) is a mode of operation for block ciphers. It is considered cryptographically strong. It transforms a block cipher into a stream @@ -369,15 +372,16 @@ Modes They do not need to be kept secret and they can be included in a transmitted message. NIST `recommends a 96-bit IV length`_ for performance critical situations but it can be up to 2\ :sup:`64` - 1 - bits. Do not reuse an ``initialization_vector`` with a given ``key``. + :term:`bits`. Do not reuse an ``initialization_vector`` with a given + ``key``. .. note:: Cryptography will generate a 128-bit tag when finalizing encryption. You can shorten a tag by truncating it to the desired length but this is **not recommended** as it lowers the security margins of the - authentication (`NIST SP-800-38D`_ recommends 96-bits or greater). - Applications wishing to allow truncation must pass the + authentication (`NIST SP-800-38D`_ recommends 96-:term:`bits` or + greater). Applications wishing to allow truncation must pass the ``min_tag_length`` parameter. .. versionchanged:: 0.5 @@ -689,7 +693,7 @@ Interfaces :type: int - The number of bits in the key being used. + The number of :term:`bits` in the key being used. .. class:: BlockCipherAlgorithm @@ -700,7 +704,7 @@ Interfaces :type: int - The number of bits in a block. + The number of :term:`bits` in a block. Interfaces used by the symmetric cipher modes described in :ref:`Symmetric Encryption Modes `. diff --git a/docs/hazmat/primitives/twofactor.rst b/docs/hazmat/primitives/twofactor.rst index 9f11332f9bf8..3b4f396128a7 100644 --- a/docs/hazmat/primitives/twofactor.rst +++ b/docs/hazmat/primitives/twofactor.rst @@ -24,8 +24,9 @@ codes (HMAC). HOTP objects take a ``key``, ``length`` and ``algorithm`` parameter. The ``key`` should be :doc:`randomly generated bytes ` and is - recommended to be 160 bits in length. The ``length`` parameter controls the - length of the generated one time password and must be >= 6 and <= 8. + recommended to be 160 :term:`bits` in length. The ``length`` parameter + controls the length of the generated one time password and must be >= 6 + and <= 8. This is an implementation of :rfc:`4226`. @@ -41,8 +42,8 @@ codes (HMAC). >>> hotp.verify(hotp_value, 0) :param bytes key: Per-user secret key. This value must be kept secret - and be at least 128 bits. It is recommended that the - key be 160 bits. + and be at least 128 :term:`bits`. It is recommended that + the key be 160 bits. :param int length: Length of generated one time password as ``int``. :param cryptography.hazmat.primitives.hashes.HashAlgorithm algorithm: A :class:`~cryptography.hazmat.primitives.hashes` @@ -51,17 +52,17 @@ codes (HMAC). :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` instance. :param enforce_key_length: A boolean flag defaulting to True that toggles - whether a minimum key length of 128 bits is enforced. This exists to - work around the fact that as documented in `Issue #2915`_, the - Google Authenticator PAM module by default generates 80 bit keys. If - this flag is set to False, the application develop should implement + whether a minimum key length of 128 :term:`bits` is enforced. This + exists to work around the fact that as documented in `Issue #2915`_, + the Google Authenticator PAM module by default generates 80 bit keys. + If this flag is set to False, the application develop should implement additional checks of the key length before passing it into :class:`~cryptography.hazmat.primitives.twofactor.hotp.HOTP`. .. versionadded:: 1.5 :raises ValueError: This is raised if the provided ``key`` is shorter than - 128 bits or if the ``length`` parameter is not 6, 7 or 8. + 128 :term:`bits` or if the ``length`` parameter is not 6, 7 or 8. :raises TypeError: This is raised if the provided ``algorithm`` is not :class:`~cryptography.hazmat.primitives.hashes.SHA1()`, :class:`~cryptography.hazmat.primitives.hashes.SHA256()` or @@ -163,7 +164,7 @@ similar to the following code. >>> totp.verify(totp_value, time_value) :param bytes key: Per-user secret key. This value must be kept secret - and be at least 128 bits. It is recommended that the + and be at least 128 :term:`bits`. It is recommended that the key be 160 bits. :param int length: Length of generated one time password as ``int``. :param cryptography.hazmat.primitives.hashes.HashAlgorithm algorithm: A @@ -174,7 +175,7 @@ similar to the following code. :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` instance. :param enforce_key_length: A boolean flag defaulting to True that toggles - whether a minimum key length of 128 bits is enforced. This exists to + whether a minimum key length of 128 :term:`bits` is enforced. This exists to work around the fact that as documented in `Issue #2915`_, the Google Authenticator PAM module by default generates 80 bit keys. If this flag is set to False, the application develop should implement @@ -183,7 +184,7 @@ similar to the following code. .. versionadded:: 1.5 :raises ValueError: This is raised if the provided ``key`` is shorter than - 128 bits or if the ``length`` parameter is not 6, 7 or 8. + 128 :term:`bits` or if the ``length`` parameter is not 6, 7 or 8. :raises TypeError: This is raised if the provided ``algorithm`` is not :class:`~cryptography.hazmat.primitives.hashes.SHA1()`, :class:`~cryptography.hazmat.primitives.hashes.SHA256()` or From e885bd65a871926a8866db92035d814e3d179bf7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 20:29:23 +0800 Subject: [PATCH 101/988] Update docs and changelog for URI, RFC822Name, and DNSName (#3955) * Update docs and changelog for URI, RFC822Name, and DNSName As of 2.1 we want users to pass A-label strings, but we still accept U-label strings and auto-encode on their behalf (with a deprecation warning). However, we do not return U-label in the value attribute so we are making a backwards incompatible change for users that utilize internationalized domain names. * language updates * add presentational to the word list * the linux dictionary is pathetic --- CHANGELOG.rst | 34 ++++++-------- docs/glossary.rst | 5 ++ docs/spelling_wordlist.txt | 2 + docs/x509/reference.rst | 94 +++++++++++++++----------------------- 4 files changed, 58 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a4441b85beb5..d029ce6ff7f0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,27 +14,21 @@ Changelog * **BACKWARDS INCOMPATIBLE:** ``Whirlpool``, ``RIPEMD160``, and ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. +* **BACKWARDS INCOMPATIBLE:** :attr:`~cryptography.x509.DNSName.value`, + :attr:`~cryptography.x509.RFC822Name.value`, and + :attr:`~cryptography.x509.UniformResourceIdentifier.value` will now return + an :term:`A-label` string when parsing a certificate containing an + internationalized domain name (IDN) or if the caller passed a :term:`U-label` + to the constructor. See below for additional deprecations related to this + change. * Installing ``cryptography`` now requires ``pip`` 6 or newer. -* Deprecated passing unicode to the :class:`~cryptography.x509.DNSName` - constructor. Instead, users should pass DNS names as ``bytes``, with ``idna`` - encoding if necessary. In addition, the - :attr:`~cryptography.x509.DNSName.value` attribute was deprecated, users - should use :attr:`~cryptography.x509.DNSName.bytes_value` to access the - raw DNS name. -* Deprecated passing unicode to the - :class:`~cryptography.x509.UniformResourceIdentifier` constructor. Instead, - users should pass URIs as ``bytes``, with ``idna`` encoding if - necessary. In addition, the - :attr:`~cryptography.x509.UniformResourceIdentifier.value` attribute was - deprecated, users should use - :attr:`~cryptography.x509.UniformResourceIdentifier.bytes_value` to access - the raw value. -* Deprecated passing unicode to the :class:`~cryptography.x509.RFC822Name` - constructor. Instead, users should pass email addresses as ``bytes``, with - ``idna`` encoding of the hostname if necessary. In addition, the - :attr:`~cryptography.x509.RFC822Name.value` attribute was deprecated, users - should use :attr:`~cryptography.x509.RFC822Name.bytes_value` to access the - raw value. +* Deprecated passing :term:`U-label` strings to the + :class:`~cryptography.x509.DNSName`, + :class:`~cryptography.x509.UniformResourceIdentifier`, and + :class:`~cryptography.x509.RFC822Name` constructors. Instead, users should + pass values as :term:`A-label` strings with ``idna`` encoding if necessary. + This change will not affect anyone who is not processing internationalized + domains. * Added support for :class:`~cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20`. In most cases users should choose diff --git a/docs/glossary.rst b/docs/glossary.rst index df3276054d1a..ce08dbaa4a60 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -94,5 +94,10 @@ Glossary bit key, you can calculate the number of bytes by dividing by 8. 128 divided by 8 is 16, so a 128 bit key is a 16 byte key. + U-label + The presentational unicode form of an internationalized domain + name. U-labels use unicode characters outside the ASCII range and + are encoded as A-labels when stored in certificates. + .. _`hardware security module`: https://en.wikipedia.org/wiki/Hardware_security_module .. _`idna`: https://pypi.org/project/idna/ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index f0cfc88ea8ca..c53cc80f405b 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -24,6 +24,7 @@ decrypt Decrypts decrypted decrypting +deprecations DER deserialize deserialized @@ -74,6 +75,7 @@ plaintext pre preprocessor preprocessors +presentational pseudorandom pyOpenSSL relicensed diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 238a24e557de..014d1f473db2 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1242,66 +1242,53 @@ General Name Classes .. versionadded:: 0.9 - ..note:: + .. versionchanged:: 2.1 - Starting with version 2.1 unicode input is deprecated. If passing an - email address containing an internationalized domain name (IDN) you - should first IDNA encode the hostname and then pass the resulting - bytes. + .. warning:: - This corresponds to an email address. For example, ``user@example.com``. - - :param bytes value: The email address. If the address contains an - internationalized domain name then it must be encoded to an - :term:`A-label` before being passed. + Starting with version 2.1 :term:`U-label` input is deprecated. If + passing an internationalized domain name (IDN) you should first IDNA + encode the value and then pass the result as a string. Accessing + ``value`` will return the :term:`A-label` encoded form even if you pass + a U-label. This breaks backwards compatibility, but only for + internationalized domain names. - .. attribute:: bytes_value - .. versionadded:: 2.1 - - :type: bytes + This corresponds to an email address. For example, ``user@example.com``. - The value as a byte string. This will contain an :term:`A-label` if - the domain in the address is an internationalized domain name. + :param value: The email address. If the address contains an + internationalized domain name then it must be encoded to an + :term:`A-label` string before being passed. .. attribute:: value - .. deprecated:: 2.1 - - Deprecated accessor for the idna-decoded value of :attr:`bytes_value` - :type: :term:`text` .. class:: DNSName(value) .. versionadded:: 0.9 - ..note:: + .. versionchanged:: 2.1 - Starting with version 2.1 unicode input is deprecated. If passing an - internationalized domain name (IDN) you should first IDNA encode the - hostname and then pass the resulting bytes. + .. warning:: - This corresponds to a domain name. For example, ``cryptography.io``. + Starting with version 2.1 :term:`U-label` input is deprecated. If + passing an internationalized domain name (IDN) you should first IDNA + encode the value and then pass the result as a string. Accessing + ``value`` will return the :term:`A-label` encoded form even if you pass + a U-label. This breaks backwards compatibility, but only for + internationalized domain names. - :param bytes value: The domain name. If it is an internationalized domain - name then it must be encoded to an :term:`A-label` before being passed. - - .. attribute:: bytes_value - - .. versionadded:: 2.1 + This corresponds to a domain name. For example, ``cryptography.io``. - :type: bytes + :param value: The domain name. If it is an internationalized domain + name then it must be encoded to an :term:`A-label` string before being + passed. - The value as a byte string. This will contain an :term:`A-label` if - it is an internationalized domain name. + :type: :term:`text` .. attribute:: value - .. deprecated:: 2.1 - - Deprecated accessor for the idna-decoded value of :attr:`bytes_value` - :type: :term:`text` .. class:: DirectoryName(value) @@ -1318,33 +1305,26 @@ General Name Classes .. versionadded:: 0.9 - ..note:: + .. versionchanged:: 2.1 + + .. warning:: - Starting with version 2.1 unicode input is deprecated. If passing an - internationalized domain name (IDN) within the URI you should first - IDNA encode the hostname and then pass the resulting bytes. + Starting with version 2.1 :term:`U-label` input is deprecated. If + passing an internationalized domain name (IDN) you should first IDNA + encode the value and then pass the result as a string. Accessing + ``value`` will return the :term:`A-label` encoded form even if you pass + a U-label. This breaks backwards compatibility, but only for + internationalized domain names. This corresponds to a uniform resource identifier. For example, ``https://cryptography.io``. - :param bytes value: The URI. If it contains an internationalized domain - name then it must be encoded to an :term:`A-label` before being passed. - - .. attribute:: bytes_value - - .. versionadded:: 2.1 - - :type: bytes - - The value as a byte string. This will contain an :term:`A-label` if - the URI contains an internationalized domain name. + :param value: The URI. If it contains an internationalized domain + name then it must be encoded to an :term:`A-label` string before + being passed. .. attribute:: value - .. deprecated:: 2.1 - - Deprecated accessor for the idna-decoded value of :attr:`bytes_value` - :type: :term:`text` .. class:: IPAddress(value) From 0ed0e7e87b5e83270f4aca4efc630790c1fea429 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 20:31:09 +0800 Subject: [PATCH 102/988] update changelog release date and bump version for 2.1 release (#3958) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d029ce6ff7f0..49acbc6a3a03 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,10 +4,8 @@ Changelog .. _v2-1: -2.1 - `master`_ -~~~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.1 - 2017-10-11 +~~~~~~~~~~~~~~~~ * **FINAL DEPRECATION** Python 2.6 support is deprecated, and will be removed in the next release of ``cryptography``. diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index e99a87d1c819..3775996ab21e 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.1.dev1" +__version__ = "2.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 951ef354ce00..d1a01453c445 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.1.dev1" +__version__ = "2.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 0d6831d24f59d1125906a83ec90a9e566d5624f4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 21:46:47 +0800 Subject: [PATCH 103/988] start the twenty second release cycle (#3960) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 49acbc6a3a03..a8a48a6ed669 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v2-2: + +2.2 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-1: diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 3775996ab21e..ee16ac8ddfb2 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.1" +__version__ = "2.2.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index d1a01453c445..466a01675cba 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.1" +__version__ = "2.2.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 38fe038522651fd18eeae60d5e96dc81aa07e863 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Oct 2017 21:55:42 +0800 Subject: [PATCH 104/988] increment deprecation for the 2.2 release cycle (#3961) --- src/cryptography/utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 02857c06c972..986b504f58ed 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -15,8 +15,7 @@ # ubiquity of their use. They should not be removed until we agree on when that # cycle ends. PersistentlyDeprecated = DeprecationWarning -DeprecatedIn19 = DeprecationWarning -DeprecatedIn21 = PendingDeprecationWarning +DeprecatedIn21 = DeprecationWarning def _check_bytes(name, value): From 4cf6e785ca5608cffd8d92ad1e1a5073108a2a20 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 12 Oct 2017 06:06:01 +0800 Subject: [PATCH 105/988] expunge python 2.6 (#3962) * expunge python 2.6 * how did THAT happen * remove another unsupported python from the tox envlist * hypothesis can now be unconditionally imported --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 10 ++++------ .travis.yml | 2 -- CHANGELOG.rst | 1 + Jenkinsfile | 5 ++--- README.rst | 2 +- docs/development/getting-started.rst | 3 +-- docs/installation.rst | 8 ++------ setup.py | 4 +--- src/cryptography/__init__.py | 11 ----------- src/cryptography/utils.py | 8 ++------ tests/hypothesis/__init__.py | 4 ---- tox.ini | 2 +- 12 files changed, 15 insertions(+), 45 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index ae749cc60390..a8f0980e6ce4 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -22,18 +22,16 @@ def configs = [ label: 'docker', imageName: 'pyca/cryptography-manylinux1:i686', versions: [ - 'cp26-cp26m', 'cp26-cp26mu', 'cp27-cp27m', - 'cp27-cp27mu', 'cp34-cp34m', 'cp35-cp35m', - 'cp36-cp36m' + 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', + 'cp35-cp35m', 'cp36-cp36m' ], ], [ label: 'docker', imageName: 'pyca/cryptography-manylinux1:x86_64', versions: [ - 'cp26-cp26m', 'cp26-cp26mu', 'cp27-cp27m', - 'cp27-cp27mu', 'cp34-cp34m', 'cp35-cp35m', - 'cp36-cp36m' + 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', + 'cp35-cp35m', 'cp36-cp36m' ], ], ] diff --git a/.travis.yml b/.travis.yml index a2cafef2b8ef..467975379918 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,8 +19,6 @@ branches: matrix: include: # these are just to make travis's UI a bit prettier - - python: 2.6 - env: TOXENV=py26 - python: 2.7 env: TOXENV=py27 - python: 3.4 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a8a48a6ed669..b4ca5acdc879 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** Support for Python 2.6 has been dropped. .. _v2-1: diff --git a/Jenkinsfile b/Jenkinsfile index bac0067a5ad5..0e4c60ceefec 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,11 +5,11 @@ if (env.BRANCH_NAME == "master") { def configs = [ [ label: 'windows', - toxenvs: ['py26', 'py27', 'py34', 'py35', 'py36'], + toxenvs: ['py27', 'py34', 'py35', 'py36'], ], [ label: 'windows64', - toxenvs: ['py26', 'py27', 'py34', 'py35', 'py36'], + toxenvs: ['py27', 'py34', 'py35', 'py36'], ], [ label: 'freebsd11', @@ -206,7 +206,6 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { withEnv(["LABEL=$label", "TOXENV=$toxenv", "IMAGE_NAME=$imageName"]) { if (label.contains("windows")) { def pythonPath = [ - py26: "C:\\Python26\\python.exe", py27: "C:\\Python27\\python.exe", py34: "C:\\Python34\\python.exe", py35: "C:\\Python35\\python.exe", diff --git a/README.rst b/README.rst index 350dc721ef57..15576662f8ca 100644 --- a/README.rst +++ b/README.rst @@ -18,7 +18,7 @@ pyca/cryptography ``cryptography`` is a package which provides cryptographic recipes and primitives to Python developers. Our goal is for it to be your "cryptographic -standard library". It supports Python 2.6-2.7, Python 3.4+, and PyPy 5.3+. +standard library". It supports Python 2.7, Python 3.4+, and PyPy 5.3+. ``cryptography`` includes both high level recipes and low level interfaces to common cryptographic algorithms such as symmetric ciphers, message digests, and diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index 0d7c91ea6117..55dfd6cbd1bf 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -75,10 +75,9 @@ each supported Python version and run the tests. For example: $ tox ... - ERROR: py26: InterpreterNotFound: python2.6 py27: commands succeeded ERROR: pypy: InterpreterNotFound: pypy - py33: commands succeeded + py34: commands succeeded docs: commands succeeded pep8: commands succeeded diff --git a/docs/installation.rst b/docs/installation.rst index 70668656d0a8..35bfbbafe192 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -10,7 +10,7 @@ You can install ``cryptography`` with ``pip``: Supported platforms ------------------- -Currently we test ``cryptography`` on Python 2.6, 2.7, 3.4, 3.5, 3.6, and +Currently we test ``cryptography`` on Python 2.7, 3.4, 3.5, 3.6, and PyPy 5.3+ on these operating systems. * x86-64 CentOS 7.x @@ -21,10 +21,6 @@ PyPy 5.3+ on these operating systems. * x86-64 Alpine (latest) * 32-bit and 64-bit Python on 64-bit Windows Server 2012 -.. warning:: - Python 2.6 is no longer supported by the Python core team. The next release - of ``cryptography`` will drop support for Python 2.6. - We test compiling with ``clang`` as well as ``gcc`` and use the following OpenSSL releases: @@ -49,7 +45,7 @@ just run If you prefer to compile it yourself you'll need to have OpenSSL installed. You can compile OpenSSL yourself as well or use the binaries we build for our release infrastructure (`openssl-release`_). Be sure to download the proper -version for your architecture and Python (2010 works for Python 2.6, 2.7, 3.3, +version for your architecture and Python (2010 works for Python 2.7, 3.3, and 3.4 while 2015 is required for 3.5 and above). Wherever you place your copy of OpenSSL you'll need to set the ``LIB`` and ``INCLUDE`` environment variables to include the proper locations. For example: diff --git a/setup.py b/setup.py index c5a42b207823..cf79b6610362 100644 --- a/setup.py +++ b/setup.py @@ -49,9 +49,8 @@ "pretend", "iso8601", "pytz", + "hypothesis>=1.11.4", ] -if sys.version_info[:2] > (2, 6): - test_requirements.append("hypothesis>=1.11.4") # If there's no vectors locally that probably means we are in a tarball and @@ -260,7 +259,6 @@ def run_tests(self): "Operating System :: Microsoft :: Windows", "Programming Language :: Python", "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index e5c34a271b44..6da0b3830d2b 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -4,9 +4,6 @@ from __future__ import absolute_import, division, print_function -import sys -import warnings - from cryptography.__about__ import ( __author__, __copyright__, __email__, __license__, __summary__, __title__, __uri__, __version__ @@ -17,11 +14,3 @@ "__title__", "__summary__", "__uri__", "__version__", "__author__", "__email__", "__license__", "__copyright__", ] - -if sys.version_info[:2] == (2, 6): - warnings.warn( - "Python 2.6 is no longer supported by the Python core team, please " - "upgrade your Python. The next version of cryptography will drop " - "support for Python 2.6", - DeprecationWarning - ) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 986b504f58ed..02eec2098535 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -100,12 +100,8 @@ def verify_interface(iface, klass): ) -if sys.version_info >= (2, 7): - def bit_length(x): - return x.bit_length() -else: - def bit_length(x): - return len(bin(x)) - (2 + (x <= 0)) +def bit_length(x): + return x.bit_length() class _DeprecatedValue(object): diff --git a/tests/hypothesis/__init__.py b/tests/hypothesis/__init__.py index 0b34406677a6..4b540884df72 100644 --- a/tests/hypothesis/__init__.py +++ b/tests/hypothesis/__init__.py @@ -3,7 +3,3 @@ # for complete details. from __future__ import absolute_import, division, print_function - -import pytest -# hypothesis no longer supports Python 2.6 so we simply skip it there -pytest.importorskip("hypothesis") diff --git a/tox.ini b/tox.ini index b8def744a9ea..03c4c0749317 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] minversion = 2.4 -envlist = py26,py27,pypy,py33,py34,py35,py36,docs,pep8,py3pep8 +envlist = py27,pypy,py34,py35,py36,docs,pep8,py3pep8 [testenv] extras = From a87daea52b698a59664d852ecad567a742576265 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 11 Oct 2017 21:36:30 -0400 Subject: [PATCH 106/988] Debian sid is python3.6 now (#3968) * Debian sid is python3.6 now * Workaround because apparently measuring coverage correctly isn't a legitimate use case --- Jenkinsfile | 2 +- tests/utils.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 0e4c60ceefec..60195a68fd2c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -51,7 +51,7 @@ def configs = [ [ label: 'docker', imageName: 'pyca/cryptography-runner-sid', - toxenvs: ['py27', 'py35'], + toxenvs: ['py27', 'py36'], ], [ label: 'docker', diff --git a/tests/utils.py b/tests/utils.py index 2d3cb6df7bc0..74b1513d2fe5 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -248,6 +248,9 @@ def load_pkcs1_vectors(vector_data): attr = None if private_key_vector is None or public_key_vector is None: + # Random garbage to defeat CPython's peephole optimizer so that + # coverage records correctly: https://bugs.python.org/issue2506 + 1 + 1 continue if line.startswith("# Private key"): From 31034a03227ebfe63f4025cd95137f116cd4236a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 11 Oct 2017 22:01:29 -0400 Subject: [PATCH 107/988] Inline calls to bit_length now that it's trivial (#3966) * Inline calls to bit_length now that it's trivial * unused imports * An comment --- src/cryptography/hazmat/primitives/asymmetric/dsa.py | 4 ++-- src/cryptography/utils.py | 2 ++ src/cryptography/x509/base.py | 4 ++-- tests/hazmat/backends/test_openssl.py | 6 +++--- tests/hazmat/primitives/test_dh.py | 4 ++-- tests/hazmat/primitives/test_dsa.py | 3 +-- tests/test_cryptography_utils.py | 5 +++++ tests/x509/test_x509.py | 2 +- 8 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/cryptography/hazmat/primitives/asymmetric/dsa.py b/src/cryptography/hazmat/primitives/asymmetric/dsa.py index 03e6a53e4a49..f2f600ddbce4 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -128,9 +128,9 @@ def generate_private_key(key_size, backend): def _check_dsa_parameters(parameters): - if utils.bit_length(parameters.p) not in [1024, 2048, 3072]: + if parameters.p.bit_length() not in [1024, 2048, 3072]: raise ValueError("p must be exactly 1024, 2048, or 3072 bits long") - if utils.bit_length(parameters.q) not in [160, 256]: + if parameters.q.bit_length() not in [160, 256]: raise ValueError("q must be exactly 160 or 256 bits long") if not (1 < parameters.g < parameters.p): diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 02eec2098535..382905c06de3 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -100,6 +100,8 @@ def verify_interface(iface, klass): ) +# No longer needed as of 2.2, but retained because we have external consumers +# who use it. def bit_length(x): return x.bit_length() diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 2c96c5bc5dea..45b603f0b96f 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -469,7 +469,7 @@ def serial_number(self, number): # ASN.1 integers are always signed, so most significant bit must be # zero. - if utils.bit_length(number) >= 160: # As defined in RFC 5280 + if number.bit_length() >= 160: # As defined in RFC 5280 raise ValueError('The serial number should not be more than 159 ' 'bits.') return CertificateBuilder( @@ -686,7 +686,7 @@ def serial_number(self, number): # ASN.1 integers are always signed, so most significant bit must be # zero. - if utils.bit_length(number) >= 160: # As defined in RFC 5280 + if number.bit_length() >= 160: # As defined in RFC 5280 raise ValueError('The serial number should not be more than 159 ' 'bits.') return RevokedCertificateBuilder( diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 40e928538fa8..e430e2d9db6d 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -14,7 +14,7 @@ import pytest -from cryptography import utils, x509 +from cryptography import x509 from cryptography.exceptions import InternalError, _Reasons from cryptography.hazmat.backends.interfaces import DHBackend, RSABackend from cryptography.hazmat.backends.openssl.backend import ( @@ -141,10 +141,10 @@ def test_unknown_error_in_cipher_finalize(self): def test_large_key_size_on_new_openssl(self): parameters = dsa.generate_parameters(2048, backend) param_num = parameters.parameter_numbers() - assert utils.bit_length(param_num.p) == 2048 + assert param_num.p.bit_length() == 2048 parameters = dsa.generate_parameters(3072, backend) param_num = parameters.parameter_numbers() - assert utils.bit_length(param_num.p) == 3072 + assert param_num.p.bit_length() == 3072 def test_int_to_bn(self): value = (2 ** 4242) - 4242 diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index 25be51c9200c..a70ae745c148 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -13,7 +13,7 @@ DERSerializationBackend, DHBackend, PEMSerializationBackend) from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import dh -from cryptography.utils import bit_length, int_from_bytes +from cryptography.utils import int_from_bytes from ...doubles import DummyKeySerializationEncryption from ...utils import load_nist_vectors, load_vectors_from_file @@ -262,7 +262,7 @@ def test_generate_dh(self, backend, with_q): assert isinstance(parameters, dh.DHParametersWithSerialization) parameter_numbers = parameters.parameter_numbers() assert isinstance(parameter_numbers, dh.DHParameterNumbers) - assert bit_length(parameter_numbers.p) == key_size + assert parameter_numbers.p.bit_length() == key_size assert isinstance(public, dh.DHPublicKeyWithSerialization) assert isinstance(public.public_numbers(), dh.DHPublicNumbers) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 341977721bea..89303fedce05 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -18,7 +18,6 @@ from cryptography.hazmat.primitives.asymmetric.utils import ( Prehashed, encode_dss_signature ) -from cryptography.utils import bit_length from .fixtures_dsa import ( DSA_KEY_1024, DSA_KEY_2048, DSA_KEY_3072 @@ -82,7 +81,7 @@ def test_generate_dsa_keys(self, vector, backend): assert skey_parameters.p == vector['p'] assert skey_parameters.q == vector['q'] assert skey_parameters.g == vector['g'] - assert skey.key_size == bit_length(vector['p']) + assert skey.key_size == vector['p'].bit_length() assert pkey.key_size == skey.key_size public_numbers = pkey.public_numbers() assert numbers.public_numbers.y == public_numbers.y diff --git a/tests/test_cryptography_utils.py b/tests/test_cryptography_utils.py index 290e1612ad82..320f7aa8ab85 100644 --- a/tests/test_cryptography_utils.py +++ b/tests/test_cryptography_utils.py @@ -56,3 +56,8 @@ def t(self): assert len(accesses) == 1 assert t.t == 14 assert len(accesses) == 1 + + +def test_bit_length(): + assert utils.bit_length(1) == 1 + assert utils.bit_length(11) == 4 diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index a07ffb3a81a8..97b5a749bc38 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -3981,4 +3981,4 @@ def notrandom(size): assert ( serial_number == utils.int_from_bytes(sample_data, "big") >> 1 ) - assert utils.bit_length(serial_number) < 160 + assert serial_number.bit_length() < 160 From e6b020b0a550f3f535b2252860fe83e534ee9c03 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 11 Oct 2017 22:14:52 -0400 Subject: [PATCH 108/988] bump libressl to 2.6.2 (#3967) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 60195a68fd2c..a969f8a3eadd 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -60,7 +60,7 @@ def configs = [ ], [ label: 'docker', - imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.1', + imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.2', toxenvs: ['py27'], ], [ From b0aa8476d7df5585a8d0b941af4de19c513990fc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 11 Oct 2017 23:00:29 -0400 Subject: [PATCH 109/988] random hack to maybe support older pips (#3970) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index cf79b6610362..1fc7ea5cec06 100644 --- a/setup.py +++ b/setup.py @@ -281,7 +281,7 @@ def run_tests(self): tests_require=test_requirements, extras_require={ ":python_version < '3'": ["enum34", "ipaddress"], - ":python_implementation != 'PyPy'": ["cffi >= 1.7"], + ":platform_python_implementation != 'PyPy'": ["cffi >= 1.7"], "test": test_requirements, "docstest": [ From d0db04c989b383ed106b4a2948e3955deae43c49 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 12 Oct 2017 12:38:06 +0800 Subject: [PATCH 110/988] add a faq entry for a message outdated pip/setuptools can output (#3971) * add a faq entry for a message outdated pip/setuptools can output * attention to detail is not my strong suit --- docs/faq.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/faq.rst b/docs/faq.rst index 7133f0c5b773..4ab518e4bd62 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -84,6 +84,13 @@ earlier the default compiler is extremely old. Use ``pkg_add`` to install a newer ``gcc`` and then install ``cryptography`` using ``CC=/path/to/newer/gcc pip install cryptography``. +Installing ``cryptography`` fails with ``Invalid environment marker: python_version < '3'`` +------------------------------------------------------------------------------------------- + +Your ``pip`` and/or ``setuptools`` are outdated. Please upgrade to the latest +versions with ``pip install -U pip setuptools`` (or on Windows +``python -m pip install -U pip setuptools``). + Installing cryptography with OpenSSL 0.9.8 or 1.0.0 fails --------------------------------------------------------- From 0a42f4eba88c380c08ae84a2803676843d61451c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 12 Oct 2017 19:35:39 +0800 Subject: [PATCH 111/988] port 2.1.1 changelog (#3975) --- CHANGELOG.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b4ca5acdc879..fc0e8bf93a36 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,13 @@ Changelog * **BACKWARDS INCOMPATIBLE:** Support for Python 2.6 has been dropped. +.. _v2-1-1: + +2.1.1 - 2017-10-12 +~~~~~~~~~~~~~~~~~~ + +* Fixed support for install with the system ``pip`` on Ubuntu 16.04. + .. _v2-1: 2.1 - 2017-10-11 From 70da086b755aad9ee483d84899eeb40e19e7a139 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 16 Oct 2017 21:04:24 -0400 Subject: [PATCH 112/988] use the correct modern API (#3984) --- src/cryptography/hazmat/backends/openssl/dh.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/dh.py b/src/cryptography/hazmat/backends/openssl/dh.py index e5f76447e327..095f062339e6 100644 --- a/src/cryptography/hazmat/backends/openssl/dh.py +++ b/src/cryptography/hazmat/backends/openssl/dh.py @@ -17,7 +17,7 @@ def _dh_params_dup(dh_cdata, backend): param_cdata = lib.DHparams_dup(dh_cdata) backend.openssl_assert(param_cdata != ffi.NULL) param_cdata = ffi.gc(param_cdata, lib.DH_free) - if lib.OPENSSL_VERSION_NUMBER < 0x10002000 or lib.CRYPTOGRAPHY_IS_LIBRESSL: + if lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102: # In OpenSSL versions < 1.0.2 or libressl DHparams_dup don't copy q q = ffi.new("BIGNUM **") lib.DH_get0_pqg(dh_cdata, ffi.NULL, q, ffi.NULL) From a0022ead7b986def1d01b8e8b468bcb3b5785c82 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 17 Oct 2017 04:56:01 +0200 Subject: [PATCH 113/988] Make changelog for A-label more readable (#3977) "value, value, and value" isn't very helpful. Signed-off-by: Christian Heimes --- CHANGELOG.rst | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fc0e8bf93a36..f25bc2881943 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -27,13 +27,15 @@ Changelog * **BACKWARDS INCOMPATIBLE:** ``Whirlpool``, ``RIPEMD160``, and ``UnsupportedExtension`` have been removed in accordance with our :doc:`/api-stability` policy. -* **BACKWARDS INCOMPATIBLE:** :attr:`~cryptography.x509.DNSName.value`, - :attr:`~cryptography.x509.RFC822Name.value`, and - :attr:`~cryptography.x509.UniformResourceIdentifier.value` will now return - an :term:`A-label` string when parsing a certificate containing an - internationalized domain name (IDN) or if the caller passed a :term:`U-label` - to the constructor. See below for additional deprecations related to this - change. +* **BACKWARDS INCOMPATIBLE:** + :attr:`DNSName.value `, + :attr:`RFC822Name.value `, and + :attr:`UniformResourceIdentifier.value + ` + will now return an :term:`A-label` string when parsing a certificate + containing an internationalized domain name (IDN) or if the caller passed + a :term:`U-label` to the constructor. See below for additional deprecations + related to this change. * Installing ``cryptography`` now requires ``pip`` 6 or newer. * Deprecated passing :term:`U-label` strings to the :class:`~cryptography.x509.DNSName`, From af6f9900647c36224130270dab385d323ff7534d Mon Sep 17 00:00:00 2001 From: Chris Wolfe Date: Wed, 18 Oct 2017 14:23:53 -0500 Subject: [PATCH 114/988] Add Multifernet.rotate method (#3979) * add rotate method * add some more tests for the failure modes * start adding some documentation for the rotate method * operate on a single token at a time, leave lists to the caller * add versionadded add versionadded, drop rotate from class doctest * give rotate a doctest * single level, not aligned * add changelog for mf.rotate * show that, once rotated, the old fernet instance can no longer decrypt the token * add the instead of just the how * update docs to reflect removal of ttl from rotate * update tests * refactor internal methods so that we can extract the timestamp * implement rotate * update wordlist (case sensitive?) * lints * consistent naming * get_token_data/get_unverified_token_data -> better name * doc changes * use the static method, do not treat as imethod * move up to MultiFernet docs * add to authors * alter wording * monkeypatch time to make it less possible for the test to pass simply due to calls occuring in less than one second * set the time after encryption to make sure that the time is preserved as part of re-encryption --- AUTHORS.rst | 1 + CHANGELOG.rst | 2 ++ docs/fernet.rst | 47 ++++++++++++++++++++++++++++++++- docs/spelling_wordlist.txt | 1 + src/cryptography/fernet.py | 25 ++++++++++++++++-- tests/test_fernet.py | 53 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 126 insertions(+), 3 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 4444bf559d9c..60f5de115dab 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -37,3 +37,4 @@ PGP key fingerprints are enclosed in parentheses. * Ofek Lev (FFB6 B92B 30B1 7848 546E 9912 972F E913 DAD5 A46E) * Erik Daguerre * Aviv Palivoda +* Chris Wolfe diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f25bc2881943..9e1d0ebddeff 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,8 @@ Changelog .. note:: This version is not yet released and is under active development. * **BACKWARDS INCOMPATIBLE:** Support for Python 2.6 has been dropped. +* Added token rotation support to :doc:`Fernet ` with + :meth:`~cryptography.fernet.MultiFernet.rotate`. .. _v2-1-1: diff --git a/docs/fernet.rst b/docs/fernet.rst index 82d94fafb6c6..a0ffe64f8d72 100644 --- a/docs/fernet.rst +++ b/docs/fernet.rst @@ -86,7 +86,8 @@ has support for implementing key rotation via :class:`MultiFernet`. .. versionadded:: 0.7 This class implements key rotation for Fernet. It takes a ``list`` of - :class:`Fernet` instances, and implements the same API: + :class:`Fernet` instances and implements the same API with the exception + of one additional method: :meth:`MultiFernet.rotate`: .. doctest:: @@ -109,6 +110,50 @@ has support for implementing key rotation via :class:`MultiFernet`. the front of the list to start encrypting new messages, and remove old keys as they are no longer needed. + Token rotation as offered by :meth:`MultiFernet.rotate` is a best practice + and manner of cryptographic hygiene designed to limit damage in the event of + an undetected event and to increase the difficulty of attacks. For example, + if an employee who had access to your company's fernet keys leaves, you'll + want to generate new fernet key, rotate all of the tokens currently deployed + using that new key, and then retire the old fernet key(s) to which the + employee had access. + + .. method:: rotate(msg) + + .. versionadded:: 2.2 + + Rotates a token by re-encrypting it under the :class:`MultiFernet` + instance's primary key. This preserves the timestamp that was originally + saved with the token. If a token has successfully been rotated then the + rotated token will be returned. If rotation fails this will raise an + exception. + + .. doctest:: + + >>> from cryptography.fernet import Fernet, MultiFernet + >>> key1 = Fernet(Fernet.generate_key()) + >>> key2 = Fernet(Fernet.generate_key()) + >>> f = MultiFernet([key1, key2]) + >>> token = f.encrypt(b"Secret message!") + >>> token + '...' + >>> f.decrypt(token) + 'Secret message!' + >>> key3 = Fernet(Fernet.generate_key()) + >>> f2 = MultiFernet([key3, key1, key2]) + >>> rotated = f2.rotate(token) + >>> f2.decrypt(rotated) + 'Secret message!' + + :param bytes msg: The token to re-encrypt. + :returns bytes: A secure message that cannot be read or altered without + the key. This is URL-safe base64-encoded. This is referred to as a + "Fernet token". + :raises cryptography.fernet.InvalidToken: If a ``token`` is in any + way invalid this exception is raised. + :raises TypeError: This exception is raised if the ``msg`` is not + ``bytes``. + .. class:: InvalidToken diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index c53cc80f405b..4cf31f539701 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -21,6 +21,7 @@ cryptographic cryptographically Debian decrypt +decrypts Decrypts decrypted decrypting diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index 99eb10e5459d..1f33a12d899c 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -71,11 +71,14 @@ def _encrypt_from_parts(self, data, current_time, iv): return base64.urlsafe_b64encode(basic_parts + hmac) def decrypt(self, token, ttl=None): + timestamp, data = Fernet._get_unverified_token_data(token) + return self._decrypt_data(data, timestamp, ttl) + + @staticmethod + def _get_unverified_token_data(token): if not isinstance(token, bytes): raise TypeError("token must be bytes.") - current_time = int(time.time()) - try: data = base64.urlsafe_b64decode(token) except (TypeError, binascii.Error): @@ -88,6 +91,10 @@ def decrypt(self, token, ttl=None): timestamp, = struct.unpack(">Q", data[1:9]) except struct.error: raise InvalidToken + return timestamp, data + + def _decrypt_data(self, data, timestamp, ttl): + current_time = int(time.time()) if ttl is not None: if timestamp + ttl < current_time: raise InvalidToken @@ -134,6 +141,20 @@ def __init__(self, fernets): def encrypt(self, msg): return self._fernets[0].encrypt(msg) + def rotate(self, msg): + timestamp, data = Fernet._get_unverified_token_data(msg) + for f in self._fernets: + try: + p = f._decrypt_data(data, timestamp, None) + break + except InvalidToken: + pass + else: + raise InvalidToken + + iv = os.urandom(16) + return self._fernets[0]._encrypt_from_parts(p, timestamp, iv) + def decrypt(self, msg, ttl=None): for f in self._fernets: try: diff --git a/tests/test_fernet.py b/tests/test_fernet.py index dbce44fbea8a..6558d11b5853 100644 --- a/tests/test_fernet.py +++ b/tests/test_fernet.py @@ -6,6 +6,7 @@ import base64 import calendar +import datetime import json import os import time @@ -156,3 +157,55 @@ def test_no_fernets(self, backend): def test_non_iterable_argument(self, backend): with pytest.raises(TypeError): MultiFernet(None) + + def test_rotate(self, backend): + f1 = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) + f2 = Fernet(base64.urlsafe_b64encode(b"\x01" * 32), backend=backend) + + mf1 = MultiFernet([f1]) + mf2 = MultiFernet([f2, f1]) + + plaintext = b"abc" + mf1_ciphertext = mf1.encrypt(plaintext) + + assert mf2.decrypt(mf1_ciphertext) == plaintext + + rotated = mf2.rotate(mf1_ciphertext) + + assert rotated != mf1_ciphertext + assert mf2.decrypt(rotated) == plaintext + + with pytest.raises(InvalidToken): + mf1.decrypt(rotated) + + def test_rotate_preserves_timestamp(self, backend, monkeypatch): + f1 = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) + f2 = Fernet(base64.urlsafe_b64encode(b"\x01" * 32), backend=backend) + + mf1 = MultiFernet([f1]) + mf2 = MultiFernet([f2, f1]) + + plaintext = b"abc" + mf1_ciphertext = mf1.encrypt(plaintext) + + later = datetime.datetime.now() + datetime.timedelta(minutes=5) + later_time = time.mktime(later.timetuple()) + monkeypatch.setattr(time, "time", lambda: later_time) + + original_time, _ = Fernet._get_unverified_token_data(mf1_ciphertext) + rotated_time, _ = Fernet._get_unverified_token_data( + mf2.rotate(mf1_ciphertext) + ) + + assert later_time != rotated_time + assert original_time == rotated_time + + def test_rotate_decrypt_no_shared_keys(self, backend): + f1 = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) + f2 = Fernet(base64.urlsafe_b64encode(b"\x01" * 32), backend=backend) + + mf1 = MultiFernet([f1]) + mf2 = MultiFernet([f2]) + + with pytest.raises(InvalidToken): + mf2.rotate(mf1.encrypt(b"abc")) From a17bcba39a5f0bb0c84a3a4835ed82e023b4dc3f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 19 Oct 2017 08:43:46 -0400 Subject: [PATCH 115/988] fixed #3986 -- properly use unicode for DNSName (#3988) --- docs/x509/tutorial.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/x509/tutorial.rst b/docs/x509/tutorial.rst index 0492c9a7f869..d34b3504384d 100644 --- a/docs/x509/tutorial.rst +++ b/docs/x509/tutorial.rst @@ -70,9 +70,9 @@ a few details: ... ])).add_extension( ... x509.SubjectAlternativeName([ ... # Describe what sites we want this certificate for. - ... x509.DNSName(b"mysite.com"), - ... x509.DNSName(b"www.mysite.com"), - ... x509.DNSName(b"subdomain.mysite.com"), + ... x509.DNSName(u"mysite.com"), + ... x509.DNSName(u"www.mysite.com"), + ... x509.DNSName(u"subdomain.mysite.com"), ... ]), ... critical=False, ... # Sign the CSR with our private key. @@ -142,7 +142,7 @@ Then we generate the certificate itself: ... # Our certificate will be valid for 10 days ... datetime.datetime.utcnow() + datetime.timedelta(days=10) ... ).add_extension( - ... x509.SubjectAlternativeName([x509.DNSName(b"localhost")]), + ... x509.SubjectAlternativeName([x509.DNSName(u"localhost")]), ... critical=False, ... # Sign our certificate with our private key ... ).sign(key, hashes.SHA256(), default_backend()) From f2a0333facdbe88160e23317956efd490127857a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Oct 2017 09:13:42 -0400 Subject: [PATCH 116/988] rolling has 36 now that it is artful (#3991) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index a969f8a3eadd..0719907fa3f6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -71,7 +71,7 @@ def configs = [ [ label: 'docker', imageName: 'pyca/cryptography-runner-ubuntu-rolling', - toxenvs: ['py27', 'py35', 'randomorder'], + toxenvs: ['py27', 'py36', 'randomorder'], ], [ label: 'docker', From c0e31e691eefaa1ee00444b3f93fc6aa7fe48095 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 23 Oct 2017 18:44:50 -0400 Subject: [PATCH 117/988] Latest flake8 has some rules about variable names (#3996) --- src/cryptography/hazmat/primitives/ciphers/aead.py | 4 ++-- src/cryptography/hazmat/primitives/kdf/kbkdf.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index 07b6bce61672..415a45a9559b 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -108,8 +108,8 @@ def decrypt(self, nonce, data, associated_data): def _validate_lengths(self, nonce, data_len): # For information about computing this, see # https://tools.ietf.org/html/rfc3610#section-2.1 - l = 15 - len(nonce) - if 2 ** (8 * l) < data_len: + l_val = 15 - len(nonce) + if 2 ** (8 * l_val) < data_len: raise ValueError("Nonce too long for data") def _check_params(self, nonce, data, associated_data): diff --git a/src/cryptography/hazmat/primitives/kdf/kbkdf.py b/src/cryptography/hazmat/primitives/kdf/kbkdf.py index 29ac0fadb4d9..14de56ebff09 100644 --- a/src/cryptography/hazmat/primitives/kdf/kbkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/kbkdf.py @@ -139,9 +139,9 @@ def _generate_fixed_input(self): if self._fixed_data and isinstance(self._fixed_data, bytes): return self._fixed_data - l = utils.int_to_bytes(self._length * 8, self._llen) + l_val = utils.int_to_bytes(self._length * 8, self._llen) - return b"".join([self._label, b"\x00", self._context, l]) + return b"".join([self._label, b"\x00", self._context, l_val]) def verify(self, key_material, expected_key): if not constant_time.bytes_eq(self.derive(key_material), expected_key): From 30d35aef4a9d9a8248f9ca68d290c787b12e79cf Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 23 Oct 2017 19:09:27 -0400 Subject: [PATCH 118/988] Fixes #3947 -- remove the docutils.conf (#3995) * Fixes #3947 -- remove the docutils.conf * include minimum versions --- docs/docutils.conf | 2 -- setup.py | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 docs/docutils.conf diff --git a/docs/docutils.conf b/docs/docutils.conf deleted file mode 100644 index e0c3d47c838b..000000000000 --- a/docs/docutils.conf +++ /dev/null @@ -1,2 +0,0 @@ -[parsers] -smart_quotes: no diff --git a/setup.py b/setup.py index 1fc7ea5cec06..598643b67cde 100644 --- a/setup.py +++ b/setup.py @@ -288,9 +288,9 @@ def run_tests(self): "doc8", "pyenchant >= 1.6.11", "readme_renderer >= 16.0", - "sphinx", + "sphinx >= 1.6.5", "sphinx_rtd_theme", - "sphinxcontrib-spelling", + "sphinxcontrib-spelling >= 4.0.1", ], "pep8test": [ "flake8", From d3b9af67aeaee5039f2acc5ffdd35a508bcf94cf Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 24 Oct 2017 12:23:16 -0400 Subject: [PATCH 119/988] Forward port 2.1.2 changelog (#3998) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9e1d0ebddeff..19bd3ec5c9c5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,14 @@ Changelog * Added token rotation support to :doc:`Fernet ` with :meth:`~cryptography.fernet.MultiFernet.rotate`. +.. _v2-1-2: + +2.1.2 - 2017-10-24 +~~~~~~~~~~~~~~~~~~ + +* Corrected a bug with the ``manylinux1`` wheels where OpenSSL's stack was + marked executable. + .. _v2-1-1: 2.1.1 - 2017-10-12 From 4941fc5c01cf1222ce04d1389e5821fea40a8c76 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 28 Oct 2017 11:28:53 -0400 Subject: [PATCH 120/988] clearly error out on older setuptools (#4000) * clearly error out on older setuptools * use the right thing --- setup.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/setup.py b/setup.py index 598643b67cde..2f32c766d466 100644 --- a/setup.py +++ b/setup.py @@ -14,11 +14,21 @@ import pkg_resources +import setuptools from setuptools import find_packages, setup from setuptools.command.install import install from setuptools.command.test import test +if ( + pkg_resources.parse_version(setuptools.__version__) < + pkg_resources.parse_version("18.5") +): + raise RuntimeError( + "cryptography requires setuptools 18.5 or newer, please upgrade to a " + "newer version of setuptools" + ) + base_dir = os.path.dirname(__file__) src_dir = os.path.join(base_dir, "src") From 20128c78a148bcb9b82fa1c1fb524223742ef9c5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 28 Oct 2017 19:16:49 -0400 Subject: [PATCH 121/988] buster is 3.6 now (#4003) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 0719907fa3f6..2cd00058c1ac 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -46,7 +46,7 @@ def configs = [ [ label: 'docker', imageName: 'pyca/cryptography-runner-buster', - toxenvs: ['py27', 'py35'], + toxenvs: ['py27', 'py36'], ], [ label: 'docker', From 04be3b2848bcd5679237a2b681ac10d3a8d98dac Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 28 Oct 2017 20:12:35 -0400 Subject: [PATCH 122/988] nit: line wrapping change (#4004) --- src/cryptography/hazmat/backends/openssl/backend.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 6abf4ecc8e37..ca1aafe070a0 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -25,8 +25,7 @@ from cryptography.hazmat.backends.openssl.cmac import _CMACContext from cryptography.hazmat.backends.openssl.decode_asn1 import _Integers from cryptography.hazmat.backends.openssl.dh import ( - _DHParameters, _DHPrivateKey, _DHPublicKey, - _dh_params_dup + _DHParameters, _DHPrivateKey, _DHPublicKey, _dh_params_dup ) from cryptography.hazmat.backends.openssl.dsa import ( _DSAParameters, _DSAPrivateKey, _DSAPublicKey From 3fe869f845660535794ce89a7e6cd2825bb18c37 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 28 Oct 2017 20:14:42 -0400 Subject: [PATCH 123/988] Link to how to report a security issue in our readme (and therefore on pypi) (#4002) --- README.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.rst b/README.rst index 15576662f8ca..04b9ea4212a3 100644 --- a/README.rst +++ b/README.rst @@ -57,8 +57,15 @@ We maintain a `cryptography-dev`_ mailing list for development discussion. You can also join ``#cryptography-dev`` on Freenode to ask questions or get involved. +Security +~~~~~~~~ + +Need to report a security issue? Please consult our `security reporting`_ +documentation. + .. _`documentation`: https://cryptography.io/ .. _`the installation documentation`: https://cryptography.io/en/latest/installation/ .. _`issue tracker`: https://github.com/pyca/cryptography/issues .. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev +.. _`security reporting`: https://cryptography.io/en/latest/security/ From 0654dc93312b9381f7a4918f95482466f10e363b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 2 Nov 2017 13:25:51 -0400 Subject: [PATCH 124/988] Fix a few new flake8 issues (#4008) --- src/cryptography/x509/general_name.py | 1 - tests/hazmat/primitives/test_ec.py | 1 - tests/hazmat/primitives/test_scrypt.py | 1 - 3 files changed, 3 deletions(-) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 776219e2a528..65ba75c23a49 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -12,7 +12,6 @@ import idna import six - from six.moves import urllib_parse from cryptography import utils diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 82cf2fae8a70..f493869d7c59 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -7,7 +7,6 @@ import binascii import itertools import os - from binascii import hexlify import pytest diff --git a/tests/hazmat/primitives/test_scrypt.py b/tests/hazmat/primitives/test_scrypt.py index 87aee1f1dbaa..64abfe7985e5 100644 --- a/tests/hazmat/primitives/test_scrypt.py +++ b/tests/hazmat/primitives/test_scrypt.py @@ -5,7 +5,6 @@ from __future__ import absolute_import, division, print_function import binascii - import os import pytest From b1f9a51b5cc5d32cec652aa584e468fd1e199195 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 2 Nov 2017 16:09:07 -0400 Subject: [PATCH 125/988] forward port changelog (#4009) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 19bd3ec5c9c5..72d5609fcc1c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,14 @@ Changelog * Added token rotation support to :doc:`Fernet ` with :meth:`~cryptography.fernet.MultiFernet.rotate`. +.. _v2-1-3: + +2.1.3 - 2017-11-02 +~~~~~~~~~~~~~~~~~~ + +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.0g. + .. _v2-1-2: 2.1.2 - 2017-10-24 From 6c03b899c8ff2bd64ec3a09ab3e9f593a0256f58 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 7 Nov 2017 15:54:48 -0500 Subject: [PATCH 126/988] bump libressl version (#4012) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2cd00058c1ac..48e737c33f29 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -60,7 +60,7 @@ def configs = [ ], [ label: 'docker', - imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.2', + imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.3', toxenvs: ['py27'], ], [ From d2d800058f93f78e46afe504b5709b865b7af35d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 9 Nov 2017 19:29:14 -0500 Subject: [PATCH 127/988] nit in LICENSE, itself doesn't make sense here (#4016) * nit in LICENSE, itself doesn't make sense here * more cleanup --- LICENSE | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index e290cd10eee5..fe5af51408c1 100644 --- a/LICENSE +++ b/LICENSE @@ -3,5 +3,4 @@ found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made under the terms of *both* these licenses. The code used in the OpenSSL locking callback and OS random engine is derived -from the same in CPython itself, and is licensed under the terms of the PSF -License Agreement. +from CPython, and is licensed under the terms of the PSF License Agreement. From 270933c1a2afa0aa60409946bb7319d85fd60059 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 10 Nov 2017 23:19:05 -0500 Subject: [PATCH 128/988] Use a different warning class so users get warnings (#4014) * Use a different warning class so users get warnings * fixed tests * do our own warning class * typo * flake8 --- docs/api-stability.rst | 4 ++-- src/cryptography/utils.py | 10 ++++++++-- tests/hazmat/primitives/test_asym_utils.py | 7 +++++-- tests/hazmat/primitives/test_dsa.py | 9 +++++---- tests/hazmat/primitives/test_ec.py | 9 +++++---- tests/hazmat/primitives/test_rsa.py | 20 +++++++++----------- tests/x509/test_x509.py | 4 ++-- 7 files changed, 36 insertions(+), 27 deletions(-) diff --git a/docs/api-stability.rst b/docs/api-stability.rst index 7ba1d4266ab0..2bb53841d101 100644 --- a/docs/api-stability.rst +++ b/docs/api-stability.rst @@ -42,9 +42,9 @@ entirely. In that case, here's how the process will work: * In ``cryptography X.Y`` the feature exists. * In ``cryptography X.Y+1`` using that feature will emit a - ``PendingDeprecationWarning``. + ``UserWarning``. * In ``cryptography X.Y+2`` using that feature will emit a - ``DeprecationWarning``. + ``UserWarning``. * In ``cryptography X.Y+3`` the feature will be removed or changed. In short, code that runs without warnings will always continue to work for a diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 382905c06de3..baa7b7a17d90 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -11,11 +11,17 @@ import warnings +# We use a UserWarning subclass, instead of DeprecationWarning, because CPython +# decided deprecation warnings should be invisble be default. +class CryptographyDeprecationWarning(UserWarning): + pass + + # Several APIs were deprecated with no specific end-of-life date because of the # ubiquity of their use. They should not be removed until we agree on when that # cycle ends. -PersistentlyDeprecated = DeprecationWarning -DeprecatedIn21 = DeprecationWarning +PersistentlyDeprecated = CryptographyDeprecationWarning +DeprecatedIn21 = CryptographyDeprecationWarning def _check_bytes(name, value): diff --git a/tests/hazmat/primitives/test_asym_utils.py b/tests/hazmat/primitives/test_asym_utils.py index 4835f091d367..fc9e9fd886b2 100644 --- a/tests/hazmat/primitives/test_asym_utils.py +++ b/tests/hazmat/primitives/test_asym_utils.py @@ -10,12 +10,15 @@ Prehashed, decode_dss_signature, decode_rfc6979_signature, encode_dss_signature, encode_rfc6979_signature, ) +from cryptography.utils import CryptographyDeprecationWarning def test_deprecated_rfc6979_signature(): - sig = pytest.deprecated_call(encode_rfc6979_signature, 1, 1) + with pytest.warns(CryptographyDeprecationWarning): + sig = encode_rfc6979_signature(1, 1) assert sig == b"0\x06\x02\x01\x01\x02\x01\x01" - decoded = pytest.deprecated_call(decode_rfc6979_signature, sig) + with pytest.warns(CryptographyDeprecationWarning): + decoded = decode_rfc6979_signature(sig) assert decoded == (1, 1) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 89303fedce05..f08de6a18242 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -18,6 +18,7 @@ from cryptography.hazmat.primitives.asymmetric.utils import ( Prehashed, encode_dss_signature ) +from cryptography.utils import CryptographyDeprecationWarning from .fixtures_dsa import ( DSA_KEY_1024, DSA_KEY_2048, DSA_KEY_3072 @@ -574,9 +575,8 @@ def test_dsa_verification(self, vector, backend): y=vector['y'] ).public_key(backend) sig = encode_dss_signature(vector['r'], vector['s']) - verifier = pytest.deprecated_call( - public_key.verifier, sig, algorithm() - ) + with pytest.warns(CryptographyDeprecationWarning): + verifier = public_key.verifier(sig, algorithm()) verifier.update(vector['msg']) if vector['result'] == "F": @@ -687,7 +687,8 @@ def test_dsa_signing(self, vector, backend): ), x=vector['x'] ).private_key(backend) - signer = pytest.deprecated_call(private_key.signer, algorithm()) + with pytest.warns(CryptographyDeprecationWarning): + signer = private_key.signer(algorithm()) signer.update(vector['msg']) signature = signer.finalize() assert signature diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index f493869d7c59..4f08f184b89b 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -20,6 +20,7 @@ from cryptography.hazmat.primitives.asymmetric.utils import ( Prehashed, encode_dss_signature ) +from cryptography.utils import CryptographyDeprecationWarning from .fixtures_ec import EC_KEY_SECP384R1 from ...doubles import DummyKeySerializationEncryption @@ -350,13 +351,13 @@ def test_signing_with_example_keys(self, backend, vector, hash_type): pkey = key.public_key() assert pkey - signer = pytest.deprecated_call(key.signer, ec.ECDSA(hash_type())) + with pytest.warns(CryptographyDeprecationWarning): + signer = key.signer(ec.ECDSA(hash_type())) signer.update(b"YELLOW SUBMARINE") signature = signer.finalize() - verifier = pytest.deprecated_call( - pkey.verifier, signature, ec.ECDSA(hash_type()) - ) + with pytest.warns(CryptographyDeprecationWarning): + verifier = pkey.verifier(signature, ec.ECDSA(hash_type())) verifier.update(b"YELLOW SUBMARINE") verifier.verify() diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index fc956ecbfcf6..09820429c5d4 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -24,6 +24,7 @@ from cryptography.hazmat.primitives.asymmetric.rsa import ( RSAPrivateNumbers, RSAPublicNumbers ) +from cryptography.utils import CryptographyDeprecationWarning from .fixtures_rsa import ( RSA_KEY_1024, RSA_KEY_1025, RSA_KEY_1026, RSA_KEY_1027, RSA_KEY_1028, @@ -383,11 +384,8 @@ def test_pkcs1v15_signing(self, pkcs1_example, backend): n=private["modulus"] ) ).private_key(backend) - signer = pytest.deprecated_call( - private_key.signer, - padding.PKCS1v15(), - hashes.SHA1() - ) + with pytest.warns(CryptographyDeprecationWarning): + signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) signer.update(binascii.unhexlify(example["message"])) signature = signer.finalize() assert binascii.hexlify(signature) == example["signature"] @@ -714,12 +712,12 @@ def test_pkcs1v15_verification(self, pkcs1_example, backend): e=public["public_exponent"], n=public["modulus"] ).public_key(backend) - verifier = pytest.deprecated_call( - public_key.verifier, - binascii.unhexlify(example["signature"]), - padding.PKCS1v15(), - hashes.SHA1() - ) + with pytest.warns(CryptographyDeprecationWarning): + verifier = public_key.verifier( + binascii.unhexlify(example["signature"]), + padding.PKCS1v15(), + hashes.SHA1() + ) verifier.update(binascii.unhexlify(example["message"])) verifier.verify() diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 97b5a749bc38..27e284a3b4f6 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -577,7 +577,7 @@ def test_cert_serial_number(self, backend): backend ) - with pytest.deprecated_call(): + with pytest.warns(utils.CryptographyDeprecationWarning): assert cert.serial == 2 assert cert.serial_number == 2 @@ -588,7 +588,7 @@ def test_cert_serial_warning(self, backend): backend ) - with pytest.deprecated_call(): + with pytest.warns(utils.CryptographyDeprecationWarning): cert.serial def test_load_der_cert(self, backend): From f7486f6a3c4490b069448e9a130cfc585c495886 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 11 Nov 2017 10:17:58 -0500 Subject: [PATCH 129/988] nit: remove double space in deprecation warning (#4018) --- src/cryptography/x509/general_name.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 65ba75c23a49..26f389a51838 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -59,7 +59,7 @@ def __init__(self, value): "RFC822Name values should be passed as an A-label string. " "This means unicode characters should be encoded via " "idna. Support for passing unicode strings (aka U-label) " - " will be removed in a future version.", + "will be removed in a future version.", utils.DeprecatedIn21, stacklevel=2, ) @@ -124,7 +124,7 @@ def __init__(self, value): "DNSName values should be passed as an A-label string. " "This means unicode characters should be encoded via " "idna. Support for passing unicode strings (aka U-label) " - " will be removed in a future version.", + "will be removed in a future version.", utils.DeprecatedIn21, stacklevel=2, ) From 7bcb926c53fd91cfd76db302f9c0652c3a4ef0e4 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 13 Nov 2017 00:56:13 -0800 Subject: [PATCH 130/988] fix typo in comment (#4019) --- src/cryptography/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index baa7b7a17d90..d69ed89fcef2 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -12,7 +12,7 @@ # We use a UserWarning subclass, instead of DeprecationWarning, because CPython -# decided deprecation warnings should be invisble be default. +# decided deprecation warnings should be invisble by default. class CryptographyDeprecationWarning(UserWarning): pass From 9b086fdb0792eb9557eafcf97d5596b0b03dd28c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 28 Nov 2017 21:49:32 +0800 Subject: [PATCH 131/988] pytest 3.3.0 has an issue with parametrized null bytes again (#4026) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 2f32c766d466..b9186a8445be 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ setup_requirements.append("cffi>=1.7") test_requirements = [ - "pytest>=3.2.1", + "pytest>=3.2.1,!=3.3.0", "pretend", "iso8601", "pytz", From 4cc3b909bcf9e1dda67788c29c0c7770d2c67ffe Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 29 Nov 2017 12:34:42 +0800 Subject: [PATCH 132/988] add X509_up_ref (#4028) --- src/_cffi_src/openssl/x509.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index e7619dd6038f..394c37c5e88c 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -83,6 +83,7 @@ void X509_free(X509 *); X509 *X509_dup(X509 *); int X509_cmp(const X509 *, const X509 *); +int X509_up_ref(X509 *); int X509_print_ex(BIO *, X509 *, unsigned long, unsigned long); @@ -382,6 +383,10 @@ opaquing. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +int X509_up_ref(X509 *x) { + return CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); +} + const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x) { return x->cert_info->signature; From 66460d8f62b3f27a009bb61be6ce7675c8451b6e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 30 Nov 2017 10:21:33 +0800 Subject: [PATCH 133/988] port changelog for 2.1.4 to master (#4031) --- CHANGELOG.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 72d5609fcc1c..5a256a2531a1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,13 @@ Changelog * Added token rotation support to :doc:`Fernet ` with :meth:`~cryptography.fernet.MultiFernet.rotate`. +.. _v2-1-4: + +2.1.4 - 2017-11-29 +~~~~~~~~~~~~~~~~~~ + +* Added ``X509_up_ref`` for an upcoming ``pyOpenSSL`` release. + .. _v2-1-3: 2.1.3 - 2017-11-02 From 4662d44fd3db5078a1882100653a3dbab3e3c7a1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 1 Dec 2017 10:48:56 +0800 Subject: [PATCH 134/988] Fix ASN1 string type encoding for several Name OIDs (#4035) * Fix ASN1 string type encoding for several Name OIDs When we changed over to the new type encoding system we didn't verify that the new code exactly matched the ASN1 string types that OpenSSL was previously choosing. This caused serialNumber, dnQualifier, emailAddress, and domainComponent to change from their proper encodings to UTF8String as of version 2.1. Now we check to see if there's a sentinel value (indicating no custom type has been passed) and then check if the OID has a different default than UTF8. If it does, we set it. This PR also adds tests for the ASN1 string type of ever supported NameOID. * review feedback --- src/cryptography/x509/name.py | 22 +++-- tests/x509/test_x509.py | 151 ++++++++++++++++++++++++++++++---- 2 files changed, 150 insertions(+), 23 deletions(-) diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 2fbaee918e4a..0daa8bbd4816 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -27,6 +27,14 @@ class _ASN1Type(Enum): _ASN1_TYPE_TO_ENUM = dict((i.value, i) for i in _ASN1Type) _SENTINEL = object() +_NAMEOID_DEFAULT_TYPE = { + NameOID.COUNTRY_NAME: _ASN1Type.PrintableString, + NameOID.JURISDICTION_COUNTRY_NAME: _ASN1Type.PrintableString, + NameOID.SERIAL_NUMBER: _ASN1Type.PrintableString, + NameOID.DN_QUALIFIER: _ASN1Type.PrintableString, + NameOID.EMAIL_ADDRESS: _ASN1Type.IA5String, + NameOID.DOMAIN_COMPONENT: _ASN1Type.IA5String, +} class NameAttribute(object): @@ -50,17 +58,17 @@ def __init__(self, oid, value, _type=_SENTINEL): "Country name must be a 2 character country code" ) - if _type == _SENTINEL: - _type = _ASN1Type.PrintableString - if len(value) == 0: raise ValueError("Value cannot be an empty string") - # Set the default string type for encoding ASN1 strings to UTF8. This - # is the default for newer OpenSSLs for several years (1.0.1h+) and is - # recommended in RFC 2459. + # The appropriate ASN1 string type varies by OID and is defined across + # multiple RFCs including 2459, 3280, and 5280. In general UTF8String + # is preferred (2459), but 3280 and 5280 specify several OIDs with + # alternate types. This means when we see the sentinel value we need + # to look up whether the OID has a non-UTF8 type. If it does, set it + # to that. Otherwise, UTF8! if _type == _SENTINEL: - _type = _ASN1Type.UTF8String + _type = _NAMEOID_DEFAULT_TYPE.get(oid, _ASN1Type.UTF8String) if not isinstance(_type, _ASN1Type): raise TypeError("_type must be from the _ASN1Type enum") diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 27e284a3b4f6..6c33043b37b5 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1650,6 +1650,59 @@ def test_encode_nonstandard_aia(self, backend): builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_subject_dn_asn1_types(self, backend): + private_key = RSA_KEY_2048.private_key(backend) + + name = x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"mysite.com"), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"value"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"value"), + x509.NameAttribute(NameOID.STREET_ADDRESS, u"value"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"value"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"value"), + x509.NameAttribute(NameOID.SERIAL_NUMBER, u"value"), + x509.NameAttribute(NameOID.SURNAME, u"value"), + x509.NameAttribute(NameOID.GIVEN_NAME, u"value"), + x509.NameAttribute(NameOID.TITLE, u"value"), + x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u"value"), + x509.NameAttribute(NameOID.X500_UNIQUE_IDENTIFIER, u"value"), + x509.NameAttribute(NameOID.DN_QUALIFIER, u"value"), + x509.NameAttribute(NameOID.PSEUDONYM, u"value"), + x509.NameAttribute(NameOID.USER_ID, u"value"), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"value"), + x509.NameAttribute(NameOID.EMAIL_ADDRESS, u"value"), + x509.NameAttribute(NameOID.JURISDICTION_COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.JURISDICTION_LOCALITY_NAME, u"value"), + x509.NameAttribute( + NameOID.JURISDICTION_STATE_OR_PROVINCE_NAME, u"value" + ), + x509.NameAttribute(NameOID.BUSINESS_CATEGORY, u"value"), + x509.NameAttribute(NameOID.POSTAL_ADDRESS, u"value"), + x509.NameAttribute(NameOID.POSTAL_CODE, u"value"), + ]) + cert = x509.CertificateBuilder().subject_name( + name + ).issuer_name( + name + ).public_key( + private_key.public_key() + ).serial_number( + 777 + ).not_valid_before( + datetime.datetime(1999, 1, 1) + ).not_valid_after( + datetime.datetime(2020, 1, 1) + ).sign(private_key, hashes.SHA256(), backend) + + for dn in (cert.subject, cert.issuer): + for oid, asn1_type in TestNameAttribute.EXPECTED_TYPES: + assert dn.get_attributes_for_oid( + oid + )[0]._type == asn1_type + @pytest.mark.skipif(sys.platform != "win32", reason="Requires windows") @pytest.mark.parametrize( ("not_valid_before", "not_valid_after"), @@ -2747,6 +2800,47 @@ def test_build_ca_request_with_unicode(self, backend): x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA\U0001f37a'), ] + @pytest.mark.requires_backend_interface(interface=RSABackend) + def test_subject_dn_asn1_types(self, backend): + private_key = RSA_KEY_2048.private_key(backend) + + request = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"mysite.com"), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"value"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"value"), + x509.NameAttribute(NameOID.STREET_ADDRESS, u"value"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"value"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"value"), + x509.NameAttribute(NameOID.SERIAL_NUMBER, u"value"), + x509.NameAttribute(NameOID.SURNAME, u"value"), + x509.NameAttribute(NameOID.GIVEN_NAME, u"value"), + x509.NameAttribute(NameOID.TITLE, u"value"), + x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u"value"), + x509.NameAttribute(NameOID.X500_UNIQUE_IDENTIFIER, u"value"), + x509.NameAttribute(NameOID.DN_QUALIFIER, u"value"), + x509.NameAttribute(NameOID.PSEUDONYM, u"value"), + x509.NameAttribute(NameOID.USER_ID, u"value"), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"value"), + x509.NameAttribute(NameOID.EMAIL_ADDRESS, u"value"), + x509.NameAttribute(NameOID.JURISDICTION_COUNTRY_NAME, u"US"), + x509.NameAttribute( + NameOID.JURISDICTION_LOCALITY_NAME, u"value" + ), + x509.NameAttribute( + NameOID.JURISDICTION_STATE_OR_PROVINCE_NAME, u"value" + ), + x509.NameAttribute(NameOID.BUSINESS_CATEGORY, u"value"), + x509.NameAttribute(NameOID.POSTAL_ADDRESS, u"value"), + x509.NameAttribute(NameOID.POSTAL_CODE, u"value"), + ]) + ).sign(private_key, hashes.SHA256(), backend) + for oid, asn1_type in TestNameAttribute.EXPECTED_TYPES: + assert request.subject.get_attributes_for_oid( + oid + )[0]._type == asn1_type + @pytest.mark.requires_backend_interface(interface=RSABackend) def test_build_ca_request_with_multivalue_rdns(self, backend): private_key = RSA_KEY_2048.private_key(backend) @@ -3668,6 +3762,47 @@ def test_unsupported_subject_public_key_info(self, backend): class TestNameAttribute(object): + EXPECTED_TYPES = [ + (NameOID.COMMON_NAME, _ASN1Type.UTF8String), + (NameOID.COUNTRY_NAME, _ASN1Type.PrintableString), + (NameOID.LOCALITY_NAME, _ASN1Type.UTF8String), + (NameOID.STATE_OR_PROVINCE_NAME, _ASN1Type.UTF8String), + (NameOID.STREET_ADDRESS, _ASN1Type.UTF8String), + (NameOID.ORGANIZATION_NAME, _ASN1Type.UTF8String), + (NameOID.ORGANIZATIONAL_UNIT_NAME, _ASN1Type.UTF8String), + (NameOID.SERIAL_NUMBER, _ASN1Type.PrintableString), + (NameOID.SURNAME, _ASN1Type.UTF8String), + (NameOID.GIVEN_NAME, _ASN1Type.UTF8String), + (NameOID.TITLE, _ASN1Type.UTF8String), + (NameOID.GENERATION_QUALIFIER, _ASN1Type.UTF8String), + (NameOID.X500_UNIQUE_IDENTIFIER, _ASN1Type.UTF8String), + (NameOID.DN_QUALIFIER, _ASN1Type.PrintableString), + (NameOID.PSEUDONYM, _ASN1Type.UTF8String), + (NameOID.USER_ID, _ASN1Type.UTF8String), + (NameOID.DOMAIN_COMPONENT, _ASN1Type.IA5String), + (NameOID.EMAIL_ADDRESS, _ASN1Type.IA5String), + (NameOID.JURISDICTION_COUNTRY_NAME, _ASN1Type.PrintableString), + (NameOID.JURISDICTION_LOCALITY_NAME, _ASN1Type.UTF8String), + ( + NameOID.JURISDICTION_STATE_OR_PROVINCE_NAME, + _ASN1Type.UTF8String + ), + (NameOID.BUSINESS_CATEGORY, _ASN1Type.UTF8String), + (NameOID.POSTAL_ADDRESS, _ASN1Type.UTF8String), + (NameOID.POSTAL_CODE, _ASN1Type.UTF8String), + ] + + def test_default_types(self): + for oid, asn1_type in TestNameAttribute.EXPECTED_TYPES: + na = x509.NameAttribute(oid, u"US") + assert na._type == asn1_type + + def test_alternate_type(self): + na2 = x509.NameAttribute( + NameOID.COMMON_NAME, u"common", _ASN1Type.IA5String + ) + assert na2._type == _ASN1Type.IA5String + def test_init_bad_oid(self): with pytest.raises(TypeError): x509.NameAttribute(None, u'value') @@ -3697,22 +3832,6 @@ def test_init_empty_value(self): with pytest.raises(ValueError): x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'') - def test_country_name_type(self): - na = x509.NameAttribute(NameOID.COUNTRY_NAME, u"US") - assert na._type == _ASN1Type.PrintableString - na2 = x509.NameAttribute( - NameOID.COUNTRY_NAME, u"US", _ASN1Type.IA5String - ) - assert na2._type == _ASN1Type.IA5String - - def test_types(self): - na = x509.NameAttribute(NameOID.COMMON_NAME, u"common") - assert na._type == _ASN1Type.UTF8String - na2 = x509.NameAttribute( - NameOID.COMMON_NAME, u"common", _ASN1Type.IA5String - ) - assert na2._type == _ASN1Type.IA5String - def test_invalid_type(self): with pytest.raises(TypeError): x509.NameAttribute(NameOID.COMMON_NAME, u"common", "notanenum") From 9fa6fb273559d29d471df80942ce066e6e40dfde Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 2 Dec 2017 00:41:25 +0800 Subject: [PATCH 135/988] Pass the right length of null bytes when no salt is provided to HKDF (#4036) This bug looks bad but ends up being benign because HMAC is specified to pad null bytes if a key is too short. So we passed too few bytes and then OpenSSL obligingly padded it out to the correct length. However, we should still do the right thing obviously. --- src/cryptography/hazmat/primitives/kdf/hkdf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 82ed9b1c85e9..964ac2cccd56 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -30,7 +30,7 @@ def __init__(self, algorithm, length, salt, info, backend): raise TypeError("salt must be bytes.") if salt is None: - salt = b"\x00" * (self._algorithm.digest_size // 8) + salt = b"\x00" * self._algorithm.digest_size self._salt = salt From b916fa9def7ac500d34ab09358b35c40c341946b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 3 Dec 2017 18:16:22 -0600 Subject: [PATCH 136/988] Fixed deprecation warnings in x509 tests (#4040) --- tests/x509/test_x509.py | 44 +++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 6c33043b37b5..4a34d4a917f2 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -278,11 +278,10 @@ def test_tbs_certlist_bytes(self, backend): backend ) - verifier = ca_cert.public_key().verifier( - crl.signature, padding.PKCS1v15(), crl.signature_hash_algorithm + ca_cert.public_key().verify( + crl.signature, crl.tbs_certlist_bytes, + padding.PKCS1v15(), crl.signature_hash_algorithm ) - verifier.update(crl.tbs_certlist_bytes) - verifier.verify() def test_public_bytes_pem(self, backend): crl = _load_cert( @@ -654,11 +653,10 @@ def test_tbs_certificate_bytes(self, backend): b"03550403130848656c6c6f204341820900a06cb4b955f7f4db300c0603551d1" b"3040530030101ff" ) - verifier = cert.public_key().verifier( - cert.signature, padding.PKCS1v15(), cert.signature_hash_algorithm + cert.public_key().verify( + cert.signature, cert.tbs_certificate_bytes, + padding.PKCS1v15(), cert.signature_hash_algorithm ) - verifier.update(cert.tbs_certificate_bytes) - verifier.verify() def test_issuer(self, backend): cert = _load_cert( @@ -1357,13 +1355,12 @@ def test_tbs_certrequest_bytes(self, backend): b"db048d51921e50766a37b1b130ee6b11f507d20a834001e8de16a92c14f2e964" b"a30203010001a000" ) - verifier = request.public_key().verifier( + request.public_key().verify( request.signature, + request.tbs_certrequest_bytes, padding.PKCS1v15(), request.signature_hash_algorithm ) - verifier.update(request.tbs_certrequest_bytes) - verifier.verify() def test_public_bytes_invalid_encoding(self, backend): request = _load_cert( @@ -3505,11 +3502,10 @@ def test_tbs_certificate_bytes(self, backend): b"4c7464311430120603550403130b5079434120445341204341820900a37352e" b"0b2142f86300c0603551d13040530030101ff" ) - verifier = cert.public_key().verifier( - cert.signature, cert.signature_hash_algorithm + cert.public_key().verify( + cert.signature, cert.tbs_certificate_bytes, + cert.signature_hash_algorithm ) - verifier.update(cert.tbs_certificate_bytes) - verifier.verify() @pytest.mark.requires_backend_interface(interface=DSABackend) @@ -3579,12 +3575,11 @@ def test_tbs_certrequest_bytes(self, backend): b"04a697bc8fd965b952f9f7e850edf13c8acdb5d753b6d10e59e0b5732e3c82ba" b"fa140342bc4a3bba16bd0681c8a6a2dbbb7efe6ce2b8463b170ba000" ) - verifier = request.public_key().verifier( + request.public_key().verify( request.signature, + request.tbs_certrequest_bytes, request.signature_hash_algorithm ) - verifier.update(request.tbs_certrequest_bytes) - verifier.verify() @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) @@ -3659,11 +3654,10 @@ def test_tbs_certificate_bytes(self, backend): b"f300e0603551d0f0101ff040403020186301d0603551d0e04160414b3db48a4" b"f9a1c5d8ae3641cc1163696229bc4bc6" ) - verifier = cert.public_key().verifier( - cert.signature, ec.ECDSA(cert.signature_hash_algorithm) + cert.public_key().verify( + cert.signature, cert.tbs_certificate_bytes, + ec.ECDSA(cert.signature_hash_algorithm) ) - verifier.update(cert.tbs_certificate_bytes) - verifier.verify() def test_load_ecdsa_no_named_curve(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) @@ -3738,12 +3732,10 @@ def test_tbs_certrequest_bytes(self, backend): b"04d8b32a551038d09086803a6d3fb91a1a1167ec02158b00efad39c9396462f" b"accff0ffaf7155812909d3726bd59fde001cff4bb9b2f5af8cbaa000" ) - verifier = request.public_key().verifier( - request.signature, + request.public_key().verify( + request.signature, request.tbs_certrequest_bytes, ec.ECDSA(request.signature_hash_algorithm) ) - verifier.update(request.tbs_certrequest_bytes) - verifier.verify() @pytest.mark.requires_backend_interface(interface=X509Backend) From 9aec3f918a1c89e86732303a0cfaf50de930ce74 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 7 Dec 2017 19:18:51 -0500 Subject: [PATCH 137/988] Use the latest OpenSSL in travis tests (#4045) --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 467975379918..47c3620fda8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,11 +34,11 @@ matrix: - python: pypy3.5-5.8.0 env: TOXENV=pypy3-nocoverage - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.0f + env: TOXENV=py27 OPENSSL=1.1.0g - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0f + env: TOXENV=py35 OPENSSL=1.1.0g - python: 2.7 - env: TOXENV=docs OPENSSL=1.1.0f + env: TOXENV=docs OPENSSL=1.1.0g addons: apt: packages: From 0242c08ee3e8324fdd9f571b7cc094d2d99c6411 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 9 Dec 2017 20:58:52 -0500 Subject: [PATCH 138/988] In RSA test vectors, use verify() to avoid warnings (#4047) * In RSA test vectors, use verify() to avoid warnings * whoops --- tests/hazmat/primitives/utils.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py index 16a268193ab7..b0cc0cffcd6d 100644 --- a/tests/hazmat/primitives/utils.py +++ b/tests/hazmat/primitives/utils.py @@ -434,17 +434,23 @@ def rsa_verification_test(backend, params, hash_alg, pad_factory): ) public_key = public_numbers.public_key(backend) pad = pad_factory(params, hash_alg) - verifier = public_key.verifier( - binascii.unhexlify(params["s"]), - pad, - hash_alg - ) - verifier.update(binascii.unhexlify(params["msg"])) + signature = binascii.unhexlify(params["s"]) + msg = binascii.unhexlify(params["msg"]) if params["fail"]: with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, + msg, + pad, + hash_alg + ) else: - verifier.verify() + public_key.verify( + signature, + msg, + pad, + hash_alg + ) def _check_rsa_private_numbers(skey): From 77c94270bc9c8dfb605a8a8e0b7a4e979dcb153f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 9 Dec 2017 22:46:07 -0500 Subject: [PATCH 139/988] update the ec tests to not emit 3000 warnings (#4048) --- tests/hazmat/primitives/test_ec.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 4f08f184b89b..02b1cdc6811d 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -514,12 +514,11 @@ def test_signatures(self, backend, vector): signature = encode_dss_signature(vector['r'], vector['s']) - verifier = key.verifier( + key.verify( signature, + vector['message'], ec.ECDSA(hash_type()) ) - verifier.update(vector['message']) - verifier.verify() @pytest.mark.parametrize( "vector", @@ -543,17 +542,19 @@ def test_signature_failures(self, backend, vector): signature = encode_dss_signature(vector['r'], vector['s']) - verifier = key.verifier( - signature, - ec.ECDSA(hash_type()) - ) - verifier.update(vector['message']) - if vector["fail"] is True: with pytest.raises(exceptions.InvalidSignature): - verifier.verify() + key.verify( + signature, + vector['message'], + ec.ECDSA(hash_type()) + ) else: - verifier.verify() + key.verify( + signature, + vector['message'], + ec.ECDSA(hash_type()) + ) def test_sign(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) From fe06f3a26e54e3f9caadc306e15e4ff965b95881 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Dec 2017 02:03:32 -0500 Subject: [PATCH 140/988] Fixed DSA tests to not emit 200 warnings (#4050) --- tests/hazmat/primitives/test_dsa.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index f08de6a18242..d6cf2fd370a5 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -687,16 +687,10 @@ def test_dsa_signing(self, vector, backend): ), x=vector['x'] ).private_key(backend) - with pytest.warns(CryptographyDeprecationWarning): - signer = private_key.signer(algorithm()) - signer.update(vector['msg']) - signature = signer.finalize() + signature = private_key.sign(vector['msg'], algorithm()) assert signature - public_key = private_key.public_key() - verifier = public_key.verifier(signature, algorithm()) - verifier.update(vector['msg']) - verifier.verify() + private_key.public_key().verify(signature, vector['msg'], algorithm()) def test_use_after_finalize(self, backend): private_key = DSA_KEY_1024.private_key(backend) From 740f3cd344a05bc644d8ec83271d922942d74389 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Dec 2017 19:07:14 -0500 Subject: [PATCH 141/988] Fixed 120 warnings from the RSA tests (#4052) * Fixed 120 warnings from the RSA tests * typo --- tests/hazmat/primitives/test_rsa.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 09820429c5d4..8bab29c48f2a 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -425,29 +425,27 @@ def test_pss_signing(self, pkcs1_example, backend): e=public["public_exponent"], n=public["modulus"] ).public_key(backend) - signer = private_key.signer( + signature = private_key.sign( + binascii.unhexlify(example["message"]), padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), salt_length=padding.PSS.MAX_LENGTH ), hashes.SHA1() ) - signer.update(binascii.unhexlify(example["message"])) - signature = signer.finalize() assert len(signature) == math.ceil(private_key.key_size / 8.0) # PSS signatures contain randomness so we can't do an exact # signature check. Instead we'll verify that the signature created # successfully verifies. - verifier = public_key.verifier( + public_key.verify( signature, + binascii.unhexlify(example["message"]), padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), salt_length=padding.PSS.MAX_LENGTH ), hashes.SHA1(), ) - verifier.update(binascii.unhexlify(example["message"])) - verifier.verify() @pytest.mark.parametrize( "hash_alg", @@ -787,16 +785,15 @@ def test_pss_verification(self, pkcs1_example, backend): e=public["public_exponent"], n=public["modulus"] ).public_key(backend) - verifier = public_key.verifier( + public_key.verify( binascii.unhexlify(example["signature"]), + binascii.unhexlify(example["message"]), padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), salt_length=20 ), hashes.SHA1() ) - verifier.update(binascii.unhexlify(example["message"])) - verifier.verify() @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( From 3e38506e0d82edbbacd2b6f23f9b39a93001d643 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Dec 2017 19:54:02 -0500 Subject: [PATCH 142/988] Don't use whirlpool as an example (#4053) Both because it's weirdo crypto, but also because we don't even support it. Adhere to our documented policy of using good crypto for all examples --- docs/hazmat/primitives/cryptographic-hashes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index 521ae0943f9b..7e23ce9e463a 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -175,7 +175,7 @@ Interfaces :type: str The standard name for the hash algorithm, for example: ``"sha256"`` or - ``"whirlpool"``. + ``"blake2b"``. .. attribute:: digest_size From 582b2b4d85c4bb902beab05fb3044d96c49c910f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 11 Dec 2017 10:31:42 +0800 Subject: [PATCH 143/988] remove whirlpool vectors since we no longer support whirlpool (#4054) --- docs/development/test-vectors.rst | 2 - .../hashes/whirlpool/iso-test-vectors.txt | 71 ------------------- 2 files changed, 73 deletions(-) delete mode 100644 vectors/cryptography_vectors/hashes/whirlpool/iso-test-vectors.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 90f812b9b9b9..6cee4fe8482e 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -402,7 +402,6 @@ Hashes * RIPEMD160 from the `RIPEMD website`_. * SHA1 from `NIST CAVP`_. * SHA2 (224, 256, 384, 512) from `NIST CAVP`_. -* Whirlpool from the `Whirlpool website`_. * Blake2s and Blake2b from OpenSSL `test/evptests.txt`_. HMAC @@ -512,7 +511,6 @@ header format (substituting the correct information): .. _`BoringSSL ChaCha20Poly1305 tests`: https://boringssl.googlesource.com/boringssl/+/2e2a226ac9201ac411a84b5e79ac3a7333d8e1c9/crypto/cipher_extra/test/chacha20_poly1305_tests.txt .. _`BoringSSL evp tests`: https://boringssl.googlesource.com/boringssl/+/ce3773f9fe25c3b54390bc51d72572f251c7d7e6/crypto/evp/evp_tests.txt .. _`RIPEMD website`: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html -.. _`Whirlpool website`: http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html .. _`draft RFC`: https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01 .. _`Specification repository`: https://github.com/fernet/spec .. _`errata`: https://www.rfc-editor.org/errata_search.php?rfc=6238 diff --git a/vectors/cryptography_vectors/hashes/whirlpool/iso-test-vectors.txt b/vectors/cryptography_vectors/hashes/whirlpool/iso-test-vectors.txt deleted file mode 100644 index 08044c0b6f5e..000000000000 --- a/vectors/cryptography_vectors/hashes/whirlpool/iso-test-vectors.txt +++ /dev/null @@ -1,71 +0,0 @@ -# These vectors have been reformatted to load via the hash loader -# 1. In this example the data-string is the empty string, i.e. the string of length zero. - -# The hash-code is the following 512-bit string. - -Len = 0 -Msg = 00 -MD = 19FA61D75522A466 9B44E39C1D2E1726 C530232130D407F8 9AFEE0964997F7A7 3E83BE698B288FEB CF88E3E03C4F0757 EA8964E59B63D937 08B138CC42A66EB3 - -# 2. In this example the data-string consists of a single byte, namely the ASCII-coded version of the letter 'a'. - -# The hash-code is the following 512-bit string. - -Len = 8 -Msg = 61 -MD = 8ACA2602792AEC6F 11A67206531FB7D7 F0DFF59413145E69 73C45001D0087B42 D11BC645413AEFF6 3A42391A39145A59 1A92200D560195E5 3B478584FDAE231A - -# 3. In this example the data-string is the three-byte string consisting of the ASCII-coded version of 'abc'. - -# The hash-code is the following 512-bit string. - -Len = 24 -Msg = 616263 -MD = 4E2448A4C6F486BB 16B6562C73B4020B F3043E3A731BCE72 1AE1B303D97E6D4C 7181EEBDB6C57E27 7D0E34957114CBD6 C797FC9D95D8B582 D225292076D4EEF5 - -# 4. In this example the data-string is the 14-byte string consisting of the ASCII-coded version of 'message digest'. - -# The hash-code is the following 512-bit string. - -Len = 112 -Msg = 6d65737361676520646967657374 -MD = 378C84A4126E2DC6 E56DCC7458377AAC 838D00032230F53C E1F5700C0FFB4D3B 8421557659EF55C1 06B4B52AC5A4AAA6 92ED920052838F33 62E86DBD37A8903E - -# 5. In this example the data-string is the 26-byte string consisting of the ASCII-coded version of 'abcdefghijklmnopqrstuvwxyz'. - -# The hash-code is the following 512-bit string. - -Len = 208 -Msg = 6162636465666768696a6b6c6d6e6f707172737475767778797a -MD = F1D754662636FFE9 2C82EBB9212A484A 8D38631EAD4238F5 442EE13B8054E41B 08BF2A9251C30B6A 0B8AAE86177AB4A6 F68F673E7207865D 5D9819A3DBA4EB3B - -# 6. In this example the data-string is the 62-byte string consisting of the ASCII-coded version of 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'. - -# The hash-code is the following 512-bit string. - -Len = 496 -Msg = 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839 -MD = DC37E008CF9EE69B F11F00ED9ABA2690 1DD7C28CDEC066CC 6AF42E40F82F3A1E 08EBA26629129D8F B7CB57211B9281A6 5517CC879D7B9621 42C65F5A7AF01467 - -# 7. In this example the data-string is the 80-byte string consisting of the ASCII-coded version of eight repetitions of '1234567890'. - -# The hash-code is the following 512-bit string. - -Len = 640 -Msg = 3132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930 -MD = 466EF18BABB0154D 25B9D38A6414F5C0 8784372BCCB204D6 549C4AFADB601429 4D5BD8DF2A6C44E5 38CD047B2681A51A 2C60481E88C5A20B 2C2A80CF3A9A083B - -# 8. In this example the data-string is the 32-byte string consisting of the ASCII-coded version of 'abcdbcdecdefdefgefghfghighijhijk'. - -# The hash-code is the following 512-bit string. - - -Len = 256 -Msg = 6162636462636465636465666465666765666768666768696768696a68696a6b -MD = 2A987EA40F917061 F5D6F0A0E4644F48 8A7A5A52DEEE6562 07C562F988E95C69 16BDC8031BC5BE1B 7B947639FE050B56 939BAAA0ADFF9AE6 745B7B181C3BE3FD - -# 9. In this example the data-string is the 1000000-byte string consisting of the ASCII-coded version of 'a' repeated 10^6 times. - -# The hash-code is the following 512-bit string. - -# this test is not loaded from the vectors since it uses code to generate the input string From 5db4e5e77ee40521cd732058262e228be4430588 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 18 Dec 2017 10:24:17 -0500 Subject: [PATCH 144/988] Fixed #4058 -- use the thread-safe API from OpenSSL, not the danger one (#4059) --- src/_cffi_src/openssl/err.py | 1 - src/cryptography/hazmat/bindings/openssl/binding.py | 7 ++++--- tests/hazmat/backends/test_openssl.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 55f2470f025f..57704295775b 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -231,7 +231,6 @@ """ FUNCTIONS = """ -char *ERR_error_string(unsigned long, char *); void ERR_error_string_n(unsigned long, char *, size_t); const char *ERR_lib_error_string(unsigned long); const char *ERR_func_error_string(unsigned long); diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 7790213eb2ac..7d528adbbca5 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -55,9 +55,10 @@ def _openssl_assert(lib, ok): errors = _consume_errors(lib) errors_with_text = [] for err in errors: - err_text_reason = ffi.string( - lib.ERR_error_string(err.code, ffi.NULL) - ) + buf = ffi.new("char[]", 256) + lib.ERR_error_string_n(err.code, buf, len(buf)) + err_text_reason = ffi.string(buf) + errors_with_text.append( _OpenSSLErrorWithText( err.code, err.lib, err.func, err.reason, err_text_reason diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index e430e2d9db6d..58631490bb45 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -125,9 +125,9 @@ def test_evp_ciphers_registered(self): assert cipher != backend._ffi.NULL def test_error_strings_loaded(self): - # returns a value in a static buffer - err = backend._lib.ERR_error_string(101183626, backend._ffi.NULL) - assert b"data not multiple of block length" in backend._ffi.string(err) + buf = backend._ffi.new("char[]", 256) + backend._lib.ERR_error_string_n(101183626, buf, len(buf)) + assert b"data not multiple of block length" in backend._ffi.string(buf) def test_unknown_error_in_cipher_finalize(self): cipher = Cipher(AES(b"\0" * 16), CBC(b"\0" * 16), backend=backend) From a481e660a861ecf9ba25b517262d406fdbb82d8a Mon Sep 17 00:00:00 2001 From: Pablo Lefort Date: Wed, 20 Dec 2017 23:33:07 -0300 Subject: [PATCH 145/988] Add import default backend (#4061) * Add import default backend * Revert blank line in --- docs/hazmat/primitives/asymmetric/rsa.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index 607cebb1048d..4634dd457904 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -64,6 +64,7 @@ markers), you can load it: .. code-block:: pycon + >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import serialization >>> with open("path/to/key.pem", "rb") as key_file: From 24bb7a057b8851a2df8c8e5a20b2652af10675b1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 25 Dec 2017 13:49:48 -0500 Subject: [PATCH 146/988] bump libressl version (#4062) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 48e737c33f29..474f502a56b0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -60,7 +60,7 @@ def configs = [ ], [ label: 'docker', - imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.3', + imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.4', toxenvs: ['py27'], ], [ From 25905566118da4264001350525fec7dc2fbbfa94 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 26 Dec 2017 11:36:40 -0500 Subject: [PATCH 147/988] Fixed #4006 -- bind functions for dealing with sigalgs (#4063) * Fixed #4006 -- bind functions for dealing with sigalgs * oops --- src/_cffi_src/openssl/ssl.py | 15 +++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 7f9eff05d9d5..fdee30ddb5a0 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -27,6 +27,7 @@ static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS; static const long Cryptography_HAS_DTLS; static const long Cryptography_HAS_GENERIC_DTLS_METHOD; +static const long Cryptography_HAS_SIGALGS; /* Internally invented symbol to tell us if SNI is supported */ static const long Cryptography_HAS_TLSEXT_HOSTNAME; @@ -186,6 +187,9 @@ int SSL_use_PrivateKey_file(SSL *, const char *, int); int SSL_check_private_key(const SSL *); +int SSL_get_sigalgs(SSL *, int, int *, int *, int *, unsigned char *, + unsigned char *); + Cryptography_STACK_OF_X509 *SSL_get_peer_cert_chain(const SSL *); Cryptography_STACK_OF_X509_NAME *SSL_get_client_CA_list(const SSL *); @@ -233,6 +237,8 @@ void SSL_CTX_set_info_callback(SSL_CTX *, void (*)(const SSL *, int, int)); void (*SSL_CTX_get_info_callback(SSL_CTX *))(const SSL *, int, int); +long SSL_CTX_set1_sigalgs_list(SSL_CTX *, const char *); + /* SSL_SESSION */ void SSL_SESSION_free(SSL_SESSION *); @@ -623,4 +629,13 @@ return r; } + +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +static const long Cryptography_HAS_SIGALGS = 0; +const int (*SSL_get_sigalgs)(SSL *, int, int *, int *, int *, unsigned char *, + unsigned char *) = NULL; +const long (*SSL_CTX_set1_sigalgs_list)(SSL_CTX *, const char *) = NULL; +#else +static const long Cryptography_HAS_SIGALGS = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 866cf4a66339..8bc74c9796f7 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -250,6 +250,13 @@ def cryptography_has_fips(): ] +def cryptography_has_ssl_sigalgs(): + return [ + "SSL_CTX_set1_sigalgs_list", + "SSL_get_sigalgs", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -300,4 +307,5 @@ def cryptography_has_fips(): cryptography_has_evp_pkey_get_set_tls_encodedpoint ), "Cryptography_HAS_FIPS": cryptography_has_fips, + "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs, } From 0ed80b467df9565aa06ff79130f121effe0bd82a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 26 Dec 2017 13:04:31 -0500 Subject: [PATCH 148/988] Fixed #4039 -- added a python_requires to setup.py (#4064) --- setup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup.py b/setup.py index b9186a8445be..9250e2da2ac7 100644 --- a/setup.py +++ b/setup.py @@ -283,6 +283,8 @@ def run_tests(self): packages=find_packages(where="src", exclude=["_cffi_src", "_cffi_src.*"]), include_package_data=True, + python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', + install_requires=[ "idna >= 2.1", "asn1crypto >= 0.21.0", From c0c70fb78df67834f0912e0af95087cf93bb31ec Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 29 Dec 2017 11:09:30 -0500 Subject: [PATCH 149/988] grammar nit, use a comma here (#4066) --- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index aa577f07f5c8..126a9184c24a 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -136,7 +136,7 @@ Algorithms concatenated with a block counter (encoded as a 32-bit little-endian). If you have a separate nonce and block counter you will need to concatenate it yourself before passing it. For - example if you have an initial block counter of 2 and a 96-bit + example, if you have an initial block counter of 2 and a 96-bit nonce the concatenated nonce would be ``struct.pack(" Date: Fri, 5 Jan 2018 06:51:39 -0600 Subject: [PATCH 150/988] DH interfaces existed in 0.9 but we didn't implement until 1.7 (#4068) * DH interfaces existed in 0.9 but we didn't implement until 1.7 * sigh empty --- docs/hazmat/primitives/asymmetric/dh.rst | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/dh.rst b/docs/hazmat/primitives/asymmetric/dh.rst index b7f724829f46..e8e91cb4527b 100644 --- a/docs/hazmat/primitives/asymmetric/dh.rst +++ b/docs/hazmat/primitives/asymmetric/dh.rst @@ -68,7 +68,7 @@ Group parameters .. function:: generate_parameters(generator, key_size, backend) - .. versionadded:: 0.9 + .. versionadded:: 1.7 Generate a new DH parameter group for use with ``backend``. @@ -89,13 +89,11 @@ Group parameters .. class:: DHParameters - .. versionadded:: 0.9 + .. versionadded:: 1.7 .. method:: generate_private_key() - .. versionadded:: 0.9 - Generate a DH private key. This method can be used to generate many new private keys from a single set of parameters. @@ -130,7 +128,7 @@ Group parameters .. class:: DHParametersWithSerialization - .. versionadded:: 0.9 + .. versionadded:: 1.7 Alias for :class:`DHParameters`. @@ -140,7 +138,7 @@ Key interfaces .. class:: DHPrivateKey - .. versionadded:: 0.9 + .. versionadded:: 1.7 A DH private key that is not an :term:`opaque key` also implements :class:`DHPrivateKeyWithSerialization` to provide serialization methods. @@ -173,7 +171,7 @@ Key interfaces .. class:: DHPrivateKeyWithSerialization - .. versionadded:: 0.9 + .. versionadded:: 1.7 This interface contains additional methods relating to serialization. Any object with this interface also has all the methods from @@ -215,7 +213,7 @@ Key interfaces .. class:: DHPublicKey - .. versionadded:: 0.9 + .. versionadded:: 1.7 .. attribute:: key_size @@ -254,7 +252,7 @@ Key interfaces .. class:: DHPublicKeyWithSerialization - .. versionadded:: 0.9 + .. versionadded:: 1.7 Alias for :class:`DHPublicKey`. From bade58f1566683cb5b110b341e01e3d3397b972f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 5 Jan 2018 09:58:35 -0600 Subject: [PATCH 151/988] just a quick confirmation that it really is an x25519 evp key (#4070) * just a quick confirmation that it really is an x25519 evp key * openssl assert. take that python -O --- src/_cffi_src/openssl/evp.py | 9 +++++++++ src/cryptography/hazmat/backends/openssl/backend.py | 3 +++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 1 + 3 files changed, 13 insertions(+) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 3fcac0c2eecb..715bfe19ead2 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -21,6 +21,7 @@ static const int EVP_PKEY_DH; static const int EVP_PKEY_DHX; static const int EVP_PKEY_EC; +static const int EVP_PKEY_X25519; static const int EVP_MAX_MD_SIZE; static const int EVP_CTRL_AEAD_SET_IVLEN; static const int EVP_CTRL_AEAD_GET_TAG; @@ -241,4 +242,12 @@ #if !defined(EVP_CTRL_AEAD_SET_TAG) # define EVP_CTRL_AEAD_SET_TAG EVP_CTRL_GCM_SET_TAG #endif + +/* This is tied to X25519 support so we reuse the Cryptography_HAS_X25519 + conditional to remove it. OpenSSL 1.1.0 didn't have this define, but + 1.1.1 will when it is released. We can remove this in the distant + future when we drop 1.1.0 support. */ +#ifndef EVP_PKEY_X25519 +#define EVP_PKEY_X25519 NID_X25519 +#endif """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ca1aafe070a0..c0b3afe0f45e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1914,6 +1914,9 @@ def x25519_load_private_bytes(self, data): evp_pkey = backend._lib.d2i_PrivateKey_bio(bio.bio, self._ffi.NULL) self.openssl_assert(evp_pkey != self._ffi.NULL) evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + self.openssl_assert( + self._lib.EVP_PKEY_id(evp_pkey) == self._lib.EVP_PKEY_X25519 + ) return _X25519PrivateKey(self, evp_pkey) def x25519_generate_key(self): diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 8bc74c9796f7..b87ae9066f94 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -232,6 +232,7 @@ def cryptography_has_x509_store_ctx_get_issuer(): def cryptography_has_x25519(): return [ + "EVP_PKEY_X25519", "NID_X25519", ] From fbb0c12c87931c3c31bb9cc2c221ae3d6f2f63b5 Mon Sep 17 00:00:00 2001 From: Tux Date: Fri, 5 Jan 2018 15:44:54 -0700 Subject: [PATCH 152/988] Expose `BN_clear_free` in the OpenSSL backend (#4071) * Expose BN_clear_free * Use BN_clear_free in test_int_to_bn --- src/_cffi_src/openssl/bignum.py | 1 + tests/hazmat/backends/test_openssl.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/bignum.py b/src/_cffi_src/openssl/bignum.py index fb33c4598f46..e0d87ae1e5fd 100644 --- a/src/_cffi_src/openssl/bignum.py +++ b/src/_cffi_src/openssl/bignum.py @@ -17,6 +17,7 @@ FUNCTIONS = """ BIGNUM *BN_new(void); void BN_free(BIGNUM *); +void BN_clear_free(BIGNUM *); BN_CTX *BN_CTX_new(void); void BN_CTX_free(BN_CTX *); diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 58631490bb45..31b34cd06d6c 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -150,7 +150,7 @@ def test_int_to_bn(self): value = (2 ** 4242) - 4242 bn = backend._int_to_bn(value) assert bn != backend._ffi.NULL - bn = backend._ffi.gc(bn, backend._lib.BN_free) + bn = backend._ffi.gc(bn, backend._lib.BN_clear_free) assert bn assert backend._bn_to_int(bn) == value From 110398ee2e28a164ad6e564587d392bfb870eb16 Mon Sep 17 00:00:00 2001 From: Tux Date: Fri, 5 Jan 2018 17:53:45 -0700 Subject: [PATCH 153/988] Use `BN_clear_free` in places where `BN_free` is being used (#4072) * Expose BN_clear_free * Use BN_clear_free in test_int_to_bn * Use BN_clear_free in lieu of BN_free * Use BN_free on public values --- src/cryptography/hazmat/backends/openssl/backend.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index c0b3afe0f45e..ebcf8015fa43 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1359,7 +1359,7 @@ def load_elliptic_curve_private_numbers(self, numbers): ec_cdata, public.x, public.y) private_value = self._ffi.gc( - self._int_to_bn(numbers.private_value), self._lib.BN_free + self._int_to_bn(numbers.private_value), self._lib.BN_clear_free ) res = self._lib.EC_KEY_set_private_key(ec_cdata, private_value) self.openssl_assert(res == 1) @@ -1394,7 +1394,7 @@ def derive_elliptic_curve_private_key(self, private_value, curve): point = self._ffi.gc(point, self._lib.EC_POINT_free) value = self._int_to_bn(private_value) - value = self._ffi.gc(value, self._lib.BN_free) + value = self._ffi.gc(value, self._lib.BN_clear_free) with self._tmp_bn_ctx() as bn_ctx: res = self._lib.EC_POINT_mul(group, point, value, self._ffi.NULL, From f8327a977f31ef1d66c11555d65deb1c3f263bc5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 6 Jan 2018 11:07:40 -0500 Subject: [PATCH 154/988] Drop conda workaround from installation docs (#4073) I don't think it's relevant anymore --- docs/installation.rst | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 35bfbbafe192..90bdc2a65ffa 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -273,33 +273,10 @@ You can also build cryptography statically: If you need to rebuild ``cryptography`` for any reason be sure to clear the local `wheel cache`_. -Building cryptography with conda --------------------------------- - -Because of a bug in conda, attempting to install cryptography out of the box -will result in an error. This can be resolved by setting the library path -environment variable for your platform. - -On macOS: - -.. code-block:: console - - $ env DYLD_LIBRARY_PATH="$HOME/anaconda/lib" pip install cryptography - -and on Linux: - -.. code-block:: console - - $ env LD_LIBRARY_PATH="$HOME/anaconda/lib" pip install cryptography - -You will need to set this variable every time you start Python. For more -information, consult `Greg Wilson's blog post`_ on the subject. - .. _`Homebrew`: https://brew.sh .. _`MacPorts`: https://www.macports.org .. _`openssl-release`: https://ci.cryptography.io/job/cryptography-support-jobs/job/openssl-release-1.1/ -.. _`Greg Wilson's blog post`: https://software-carpentry.org/blog/2014/04/mr-biczo-was-right.html .. _virtualenv: https://virtualenv.pypa.io/en/latest/ .. _openssl.org: https://www.openssl.org/source/ .. _`wheel cache`: https://pip.pypa.io/en/stable/reference/pip_install/#caching From 323f2ad66befb13ec3b31b5ab99c9448b9a6b067 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 6 Jan 2018 15:00:28 -0600 Subject: [PATCH 155/988] add 1200 byte HKDF test vector and a generator/verifier for it (#4074) * add 1200 byte HKDF test vector and a generator/verifier for it * exit non-zero when failing * ugh --- docs/development/custom-vectors/hkdf.rst | 28 ++++++++ .../custom-vectors/hkdf/generate_hkdf.py | 39 +++++++++++ .../custom-vectors/hkdf/verify_hkdf.go | 69 +++++++++++++++++++ docs/development/test-vectors.rst | 6 +- .../KDF/hkdf-generated.txt | 9 +++ 5 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 docs/development/custom-vectors/hkdf.rst create mode 100644 docs/development/custom-vectors/hkdf/generate_hkdf.py create mode 100644 docs/development/custom-vectors/hkdf/verify_hkdf.go create mode 100644 vectors/cryptography_vectors/KDF/hkdf-generated.txt diff --git a/docs/development/custom-vectors/hkdf.rst b/docs/development/custom-vectors/hkdf.rst new file mode 100644 index 000000000000..0e1a729ab900 --- /dev/null +++ b/docs/development/custom-vectors/hkdf.rst @@ -0,0 +1,28 @@ +HKDF vector creation +==================== + +This page documents the code that was used to generate a longer +HKDF test vector (1200 bytes) than is available in RFC 5869. All +the vectors were generated using OpenSSL and verified with Go. + +Creation +-------- + +The following Python script was run to generate the vector files. + +.. literalinclude:: /development/custom-vectors/hkdf/generate_hkdf.py + +Download link: :download:`generate_hkdf.py +` + + +Verification +------------ + +The following Go code was used to verify the vectors. + +.. literalinclude:: /development/custom-vectors/hkdf/verify_hkdf.go + :language: go + +Download link: :download:`verify_hkdf.go +` diff --git a/docs/development/custom-vectors/hkdf/generate_hkdf.py b/docs/development/custom-vectors/hkdf/generate_hkdf.py new file mode 100644 index 000000000000..767aedd835ee --- /dev/null +++ b/docs/development/custom-vectors/hkdf/generate_hkdf.py @@ -0,0 +1,39 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.kdf.hkdf import HKDF + +IKM = binascii.unhexlify(b"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b") +L = 1200 +OKM = HKDF( + algorithm=hashes.SHA256(), length=L, salt=None, info=None, + backend=default_backend() +).derive(IKM) + + +def _build_vectors(): + output = [] + output.append("COUNT = 0") + output.append("Hash = SHA-256") + output.append("IKM = " + binascii.hexlify(IKM).decode("ascii")) + output.append("salt = ") + output.append("info = ") + output.append("L = {}".format(L)) + output.append("OKM = " + binascii.hexlify(OKM).decode("ascii")) + return "\n".join(output) + + +def _write_file(data, filename): + with open(filename, 'w') as f: + f.write(data) + + +if __name__ == '__main__': + _write_file(_build_vectors(), 'hkdf.txt') diff --git a/docs/development/custom-vectors/hkdf/verify_hkdf.go b/docs/development/custom-vectors/hkdf/verify_hkdf.go new file mode 100644 index 000000000000..ddeb3d8e500e --- /dev/null +++ b/docs/development/custom-vectors/hkdf/verify_hkdf.go @@ -0,0 +1,69 @@ +package main + +import ( + "bufio" + "bytes" + "crypto/sha256" + "encoding/hex" + "fmt" + "golang.org/x/crypto/hkdf" + "io" + "os" + "strconv" + "strings" +) + +func unhexlify(s string) []byte { + bytes, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return bytes +} + +func verifier(l uint64, ikm, okm []byte) bool { + hash := sha256.New + hkdf := hkdf.New(hash, ikm, nil, nil) + okmComputed := make([]byte, l) + io.ReadFull(hkdf, okmComputed) + return bytes.Equal(okmComputed, okm) +} + +func validateVectors(filename string) bool { + vectors, err := os.Open(filename) + if err != nil { + panic(err) + } + defer vectors.Close() + + var segments []string + var l uint64 + var ikm, okm string + + scanner := bufio.NewScanner(vectors) + for scanner.Scan() { + segments = strings.Split(scanner.Text(), " = ") + + switch { + case strings.ToUpper(segments[0]) == "L": + l, err = strconv.ParseUint(segments[1], 10, 64) + if err != nil { + panic(err) + } + case strings.ToUpper(segments[0]) == "IKM": + ikm = segments[1] + case strings.ToUpper(segments[0]) == "OKM": + okm = segments[1] + } + } + return verifier(l, unhexlify(ikm), unhexlify(okm)) +} + +func main() { + if validateVectors("vectors/cryptography_vectors/KDF/hkdf-generated.txt") { + fmt.Println("HKDF OK.") + } else { + fmt.Println("HKDF failed.") + os.Exit(1) + } +} diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 6cee4fe8482e..817bdaf64005 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -476,8 +476,8 @@ Creating test vectors When official vectors are unavailable ``cryptography`` may choose to build its own using existing vectors as source material. -Custom Symmetric Vectors -~~~~~~~~~~~~~~~~~~~~~~~~ +Created Vectors +~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 @@ -486,6 +486,8 @@ Custom Symmetric Vectors custom-vectors/cast5 custom-vectors/idea custom-vectors/seed + custom-vectors/hkdf + If official test vectors appear in the future the custom generated vectors should be discarded. diff --git a/vectors/cryptography_vectors/KDF/hkdf-generated.txt b/vectors/cryptography_vectors/KDF/hkdf-generated.txt new file mode 100644 index 000000000000..76b28f52f39b --- /dev/null +++ b/vectors/cryptography_vectors/KDF/hkdf-generated.txt @@ -0,0 +1,9 @@ +# A 1200 byte HKDF vector built for https://github.com/pyca/cryptography +# Created with OpenSSL and verified against a Go implementation +COUNT = 0 +Hash = SHA-256 +IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b +salt = +info = +L = 1200 +OKM = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8b2fb61057244b36c6ddd287f634795e7d80d5fe26bfc36def6dc129c29271a0eb7ab14bd2ca88259f8a3a92ac2ec0e3e4fa046a4b90b137ce44a2105152c2db1480a0ac2e999db47e000833856093a641da082a94429eccf5143b1780234baacfa9d89b850473f2c678f7caa96b00efdace2d71fd42412465308f2374960b6c3c35d3eaaea0b8f7e595fa9cc5db25a91bc0120bad6223b25e378f514686eedfc9f102e045868e64ab02f1c021868b4e6686e295a10a94524e8730d79b4d3f890c387763a19a248577e9aad8e23ba2bacfc9230fb144a7730d3ceaf799d1de1032951dc1fddea17f96981fbf6b05e4878df782b497f60c3eb4cff0c249d8c1bbeabca6e66c71cc79314f2bfc758dd41c9872cbb461e17cff0002a9fdee546953f98dde7d4aa828a68f4ccd950d371d1eb3839219bfdb9ef911d3602d78bd2f6a970a6c437763c81821e131325fa77fc8963a021b87caa8e35ad2a37f2237a2143c1966817e4da9912a2013cd7239c5fad2e4599f9ce20bcd8cd0ff1516f9f2496ecce94ccd82cde5c9ef120bbaf640d6292d6916d40d99d9d4657dd2fdf2d4e5a5bbb27446ed58a3d637d0811c555273b0fd3699161acb58205fe6cfd45245249a7ecfc4c3d0668de270e6962d1d19fffa4b8df099cd4022cb0df18ffcffff5b046f0fc082ed16f99b416b7bbd4982ad0afc8b1dc332a8058729065538dbe9422b795a887af9c5d50ee85a60871be14c7f2d1111f197378d99065fb89a0f57b7342792798963f00910e5fad47a64477f41c07ac6058e01932502eb6faa88a6cc21e115b8e3ddfae8fdcaab60d13d808f3206b4e9da8bd4ae1108b2a01d256a02c9131ea0f6203c8c6e55ec7ae16bb19cf3239490085713679e7c304ce254e2897c0fd3bc97263a562fe161dcf6d21e841eb2266aa1cfaaaf6fc094111ad4b2e4d8e05b50854ae5de83d81842c689a55b1be7d575ac50e81d7708c262c1f70452884c7714abef03b88b85a41e895a0e7529b8d631e5e77583175c80e86e45802763eaba0471d11fc885b34fa4b5309a9fe49a5215d4aa21041c53a30a1e97250f6445ce537bb3efb1fa17f141db69c7d97ab48cb34c33bef0ded5d4c320fe554a0faea353a5579cb08f072565bbd49d167186f39a298a553f320bb89eaee54151b08deef49b7b630af62b4d7be1f4965a53c67e7d3e34a6d8263ee86f44dfbe019cbe8e3bd4ed0cda06985127ff8d1794e6321891a950f329aca2b36b16f8a2bb910b1206a5c238ef079df12ecb0f0f7e3e4f8a64bfd23b57e9d286a1c8d2e9290d9a4f1d20ec100aac7dc90783cb2ecfd69d71a91dcc3913494ebf7a7a00d1051102d7f268e761855b985c2599350f15ee0d4093244113185bc7031d2431ccd9391fcd58a85e068458b644ed265b3f103852a2d7bbf0d2c1d7c02e30ff1ec552f09bc60e36393391cec05926009520af12d96387cc55b9553e79da8b2eb9303ecf15bb289530c3d65c4cc5a68f8ece60a37522fe3d0e6ba4ddfb560a45717456cf91c5dc5b8117da68bc49968ec1e35852bbc54e554fb839b35f6c3b5c09530855d8691fc0f126f67346f949bd813a6db44c513d1e61b8c8789eb9e823d1a38862dca1c5331da From 858a429d88c7e35ecd224a98bfda2c3dd428ae1f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 6 Jan 2018 17:55:27 -0600 Subject: [PATCH 156/988] The HKDF limit is actually 255 * digest_length_in_bytes (#4037) * The HKDF limit is actually 255 * digest_length_in_bytes Previously we had a bug where we divided digest_size by 8...but HashAlgorithm.digest_size is already in bytes. * test longer output * changelog --- CHANGELOG.rst | 1 + .../hazmat/primitives/kdf/hkdf.py | 2 +- tests/hazmat/primitives/test_hkdf.py | 22 +++++++++++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5a256a2531a1..5e0c0eb5a412 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,7 @@ Changelog .. note:: This version is not yet released and is under active development. * **BACKWARDS INCOMPATIBLE:** Support for Python 2.6 has been dropped. +* Resolved a bug in ``HKDF`` that incorrectly constrained output size. * Added token rotation support to :doc:`Fernet ` with :meth:`~cryptography.fernet.MultiFernet.rotate`. diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 964ac2cccd56..917b4e9c4cfe 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -67,7 +67,7 @@ def __init__(self, algorithm, length, info, backend): self._backend = backend - max_length = 255 * (algorithm.digest_size // 8) + max_length = 255 * algorithm.digest_size if length > max_length: raise ValueError( diff --git a/tests/hazmat/primitives/test_hkdf.py b/tests/hazmat/primitives/test_hkdf.py index a05fd752ff55..5d2d18676bd9 100644 --- a/tests/hazmat/primitives/test_hkdf.py +++ b/tests/hazmat/primitives/test_hkdf.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import binascii +import os import pytest @@ -15,13 +16,15 @@ from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.hkdf import HKDF, HKDFExpand -from ...utils import raises_unsupported_algorithm +from ...utils import ( + load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm +) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDF(object): def test_length_limit(self, backend): - big_length = 255 * (hashes.SHA256().digest_size // 8) + 1 + big_length = 255 * hashes.SHA256().digest_size + 1 with pytest.raises(ValueError): HKDF( @@ -153,6 +156,21 @@ def test_derive_short_output(self, backend): assert hkdf.derive(b"\x01" * 16) == b"gJ\xfb{" + def test_derive_long_output(self, backend): + vector = load_vectors_from_file( + os.path.join("KDF", "hkdf-generated.txt"), load_nist_vectors + )[0] + hkdf = HKDF( + hashes.SHA256(), + int(vector["l"]), + salt=vector["salt"], + info=vector["info"], + backend=backend + ) + ikm = binascii.unhexlify(vector["ikm"]) + + assert hkdf.derive(ikm) == binascii.unhexlify(vector["okm"]) + @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDFExpand(object): From 15cc998c1f60880b6177c506d89f3349201d765b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 6 Jan 2018 19:39:57 -0500 Subject: [PATCH 157/988] Fixed import path in go script (#4075) --- docs/development/custom-vectors/cast5/verify_cast5.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/custom-vectors/cast5/verify_cast5.go b/docs/development/custom-vectors/cast5/verify_cast5.go index cbc89a0331df..b2d711a9d6e7 100644 --- a/docs/development/custom-vectors/cast5/verify_cast5.go +++ b/docs/development/custom-vectors/cast5/verify_cast5.go @@ -3,7 +3,7 @@ package main import ( "bufio" "bytes" - "code.google.com/p/go.crypto/cast5" + "golang.org/x/crypto/cast5" "crypto/cipher" "encoding/hex" "fmt" From 038146fdc7a515937398f226531ef15d2674b3b9 Mon Sep 17 00:00:00 2001 From: David Tucker Date: Sun, 7 Jan 2018 08:32:36 -0800 Subject: [PATCH 158/988] Add a Versioning section to the API stability docs (#4027) --- docs/api-stability.rst | 24 ++++++++++++++++++++---- docs/spelling_wordlist.txt | 1 + 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/api-stability.rst b/docs/api-stability.rst index 2bb53841d101..205b18447b05 100644 --- a/docs/api-stability.rst +++ b/docs/api-stability.rst @@ -34,18 +34,34 @@ One exception to our API stability policy is for security. We will violate this policy as necessary in order to resolve a security issue or harden ``cryptography`` against a possible attack. +Versioning +---------- + +This project uses a custom versioning scheme as described below. + +Given a version ``cryptography X.Y.Z``, + +* ``X.Y`` is a decimal number that is incremented for + potentially-backwards-incompatible releases. + + * This increases like a standard decimal. + In other words, 0.9 is the ninth release, and 1.0 is the tenth (not 0.10). + The dividing decimal point can effectively be ignored. + +* ``Z`` is an integer that is incremented for backward-compatible releases. + Deprecation ------------ +~~~~~~~~~~~ From time to time we will want to change the behavior of an API or remove it entirely. In that case, here's how the process will work: * In ``cryptography X.Y`` the feature exists. -* In ``cryptography X.Y+1`` using that feature will emit a +* In ``cryptography X.Y + 0.1`` using that feature will emit a ``UserWarning``. -* In ``cryptography X.Y+2`` using that feature will emit a +* In ``cryptography X.Y + 0.2`` using that feature will emit a ``UserWarning``. -* In ``cryptography X.Y+3`` the feature will be removed or changed. +* In ``cryptography X.Y + 0.3`` the feature will be removed or changed. In short, code that runs without warnings will always continue to work for a period of two releases. diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 4cf31f539701..883edd17490c 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -100,6 +100,7 @@ unpadding verifier Verifier Verisign +versioning wildcard WoSign Xcode From d2c12683d3ddf454f99673ad7878673b60998b3e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 10 Jan 2018 08:17:09 -0500 Subject: [PATCH 159/988] Fixes #4076 - simplify the implementation of int_from_bytes on python2 (#4077) * Fixes #4076 - simplify the implementation of int_from_bytes on python2 * whitespace * Added a test --- src/cryptography/utils.py | 3 +-- tests/test_cryptography_utils.py | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index d69ed89fcef2..14909c66bb6e 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -57,8 +57,7 @@ def int_from_bytes(data, byteorder, signed=False): assert byteorder == 'big' assert not signed - # call bytes() on data to allow the use of bytearrays - return int(bytes(data).encode('hex'), 16) + return int(binascii.hexlify(data), 16) if hasattr(int, "to_bytes"): diff --git a/tests/test_cryptography_utils.py b/tests/test_cryptography_utils.py index 320f7aa8ab85..ddea7602c124 100644 --- a/tests/test_cryptography_utils.py +++ b/tests/test_cryptography_utils.py @@ -11,6 +11,8 @@ def test_int_from_bytes_bytearray(): assert utils.int_from_bytes(bytearray(b"\x02\x10"), "big") == 528 + with pytest.raises(TypeError): + utils.int_from_bytes(["list", "is", "not", "bytes"], "big") class TestCachedProperty(object): From ba6798161c6782829dc27c1a087cd8a8781e07d8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 12 Jan 2018 20:16:46 +0100 Subject: [PATCH 160/988] temporarily pin cffi to avoid bug related to virtualenv (#4083) * temporarily pin cffi to avoid bug related to virtualenv * right, don't duplicate the name --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9250e2da2ac7..800e94d2746b 100644 --- a/setup.py +++ b/setup.py @@ -52,7 +52,7 @@ "upgrade PyPy to use this library." ) else: - setup_requirements.append("cffi>=1.7") + setup_requirements.append("cffi>=1.7,!=1.11.3") test_requirements = [ "pytest>=3.2.1,!=3.3.0", From 2beccafe22c87a7b3feb6672aaa88d7b7f3a9fb1 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Fri, 12 Jan 2018 21:32:29 +0100 Subject: [PATCH 161/988] Use the real X509_REVOKED_dup when available. (#4080) This avoids reaching into the ASN1_ITEM mess if not necessary. --- src/_cffi_src/openssl/x509.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 394c37c5e88c..ea7b84b673fb 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -376,7 +376,11 @@ IMPLEMENT_ASN1_DUP_FUNCTION. The below is the equivalent so we have it available on all OpenSSLs. */ X509_REVOKED *Cryptography_X509_REVOKED_dup(X509_REVOKED *rev) { +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 return ASN1_item_dup(ASN1_ITEM_rptr(X509_REVOKED), rev); +#else + return X509_REVOKED_dup(rev); +#endif } /* Added in 1.1.0 but we need it in all versions now due to the great From 5e866f7191cf307720811ac87364cd36e7fd990b Mon Sep 17 00:00:00 2001 From: gesslerpd Date: Tue, 16 Jan 2018 09:07:23 -0600 Subject: [PATCH 162/988] Add bindings for SSL_OP_NO_DTLS* (#4079) * + bindings for SSL_OP_NO_DTLS* * + conditional for not HAS_GENERIC_DTLS_METHOD * flag SSL_OP_NO_DTLS* for unsupported deletion --- .gitignore | 2 +- src/_cffi_src/openssl/ssl.py | 4 ++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 60f90063b124..cdc4b6ad762e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,5 @@ htmlcov/ *.egg-info/ *.egg .eggs/ -*.py[co] +*.py[cdo] .hypothesis/ diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index fdee30ddb5a0..7bfdc7100294 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -65,6 +65,8 @@ static const long SSL_OP_NO_TLSv1; static const long SSL_OP_NO_TLSv1_1; static const long SSL_OP_NO_TLSv1_2; +static const long SSL_OP_NO_DTLSv1; +static const long SSL_OP_NO_DTLSv1_2; static const long SSL_OP_NO_COMPRESSION; static const long SSL_OP_SINGLE_DH_USE; static const long SSL_OP_EPHEMERAL_RSA; @@ -606,6 +608,8 @@ const SSL_METHOD *(*DTLS_method)(void) = NULL; const SSL_METHOD *(*DTLS_server_method)(void) = NULL; const SSL_METHOD *(*DTLS_client_method)(void) = NULL; +static const long SSL_OP_NO_DTLSv1 = NULL; +static const long SSL_OP_NO_DTLSv1_2 = NULL; #else static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index b87ae9066f94..8633373fb022 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -195,6 +195,8 @@ def cryptography_has_generic_dtls_method(): "DTLS_method", "DTLS_server_method", "DTLS_client_method", + "SSL_OP_NO_DTLSv1", + "SSL_OP_NO_DTLSv1_2", ] From 47d96e39e9b6d413f970cf02cc58553a9647241a Mon Sep 17 00:00:00 2001 From: gesslerpd Date: Thu, 18 Jan 2018 11:37:47 -0600 Subject: [PATCH 163/988] Add bindings for PSK (#4084) * + PSK function bindings * + PSK conditional * trigger CI * trigger CI --- src/_cffi_src/openssl/ssl.py | 45 ++++++++++++++++++- .../hazmat/bindings/openssl/_conditional.py | 9 ++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 7bfdc7100294..420beb120c55 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -28,6 +28,7 @@ static const long Cryptography_HAS_DTLS; static const long Cryptography_HAS_GENERIC_DTLS_METHOD; static const long Cryptography_HAS_SIGALGS; +static const long Cryptography_HAS_PSK; /* Internally invented symbol to tell us if SNI is supported */ static const long Cryptography_HAS_TLSEXT_HOSTNAME; @@ -225,8 +226,27 @@ int SSL_CTX_use_PrivateKey_file(SSL_CTX *, const char *, int); int SSL_CTX_check_private_key(const SSL_CTX *); void SSL_CTX_set_cert_verify_callback(SSL_CTX *, - int (*)(X509_STORE_CTX *,void *), + int (*)(X509_STORE_CTX *, void *), void *); + +int SSL_CTX_use_psk_identity_hint(SSL_CTX *, const char *); +void SSL_CTX_set_psk_server_callback(SSL_CTX *, + unsigned int (*)( + SSL *, + const char *, + unsigned char *, + int + )); +void SSL_CTX_set_psk_client_callback(SSL_CTX *, + unsigned int (*)( + SSL *, + const char *, + char *, + unsigned int, + unsigned char *, + unsigned int + )); + int SSL_CTX_set_session_id_context(SSL_CTX *, const unsigned char *, unsigned int); @@ -642,4 +662,27 @@ #else static const long Cryptography_HAS_SIGALGS = 1; #endif + +#if CRYPTOGRAPHY_IS_LIBRESSL +static const long Cryptography_HAS_PSK = 0; +int (*SSL_CTX_use_psk_identity_hint)(SSL_CTX *, const char *) = NULL; +void (*SSL_CTX_set_psk_server_callback)(SSL_CTX *, + unsigned int (*)( + SSL *, + const char *, + unsigned char *, + int + )) = NULL; +void (*SSL_CTX_set_psk_client_callback)(SSL_CTX *, + unsigned int (*)( + SSL *, + const char *, + char *, + unsigned int, + unsigned char *, + unsigned int + )) = NULL; +#else +static const long Cryptography_HAS_PSK = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 8633373fb022..6dab2bf0cf7a 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -260,6 +260,14 @@ def cryptography_has_ssl_sigalgs(): ] +def cryptography_has_psk(): + return [ + "SSL_CTX_use_psk_identity_hint", + "SSL_CTX_set_psk_server_callback", + "SSL_CTX_set_psk_client_callback", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -311,4 +319,5 @@ def cryptography_has_ssl_sigalgs(): ), "Cryptography_HAS_FIPS": cryptography_has_fips, "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs, + "Cryptography_HAS_PSK": cryptography_has_psk, } From fc2ad04b46129806b8261caff8e7260675a2d33d Mon Sep 17 00:00:00 2001 From: gesslerpd Date: Tue, 23 Jan 2018 11:23:53 -0600 Subject: [PATCH 164/988] Add bindings for DTLS support (#4089) * + more DTLS bindings * + BIO_CTRL_DGRAM* * + read ahead functions * rm BIO_CTRL_DGRAM_SET_PEEK_MODE * rm BIO_CTRL_DGRAM_SET_DONT_FRAG * + link mtu conditional logic * rm some BIO_CTRL_DGRAM* bindings --- src/_cffi_src/openssl/bio.py | 9 +++++++++ src/_cffi_src/openssl/ssl.py | 19 +++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 2 ++ 3 files changed, 30 insertions(+) diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index 2d9659e1ab3b..d3dd66903770 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -36,6 +36,13 @@ static const int BIO_CTRL_GET; static const int BIO_CTRL_PENDING; static const int BIO_CTRL_WPENDING; +static const int BIO_CTRL_DGRAM_SET_CONNECTED; +static const int BIO_CTRL_DGRAM_SET_RECV_TIMEOUT; +static const int BIO_CTRL_DGRAM_GET_RECV_TIMEOUT; +static const int BIO_CTRL_DGRAM_SET_SEND_TIMEOUT; +static const int BIO_CTRL_DGRAM_GET_SEND_TIMEOUT; +static const int BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP; +static const int BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP; static const int BIO_C_FILE_SEEK; static const int BIO_C_FILE_TELL; static const int BIO_TYPE_NONE; @@ -68,6 +75,7 @@ BIO *BIO_new_fp(FILE *, int); BIO *BIO_new_fd(int, int); BIO *BIO_new_socket(int, int); +BIO *BIO_new_dgram(int, int); long BIO_ctrl(BIO *, int, long, void *); long BIO_callback_ctrl( BIO *, @@ -91,6 +99,7 @@ BIO_METHOD *BIO_s_file(void); BIO_METHOD *BIO_s_fd(void); BIO_METHOD *BIO_s_socket(void); +BIO_METHOD *BIO_s_datagram(void); BIO_METHOD *BIO_s_null(void); BIO_METHOD *BIO_f_null(void); BIO_METHOD *BIO_f_buffer(void); diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 420beb120c55..d4d3a44ada30 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -229,6 +229,21 @@ int (*)(X509_STORE_CTX *, void *), void *); +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *, + int (*)( + SSL *, + unsigned char *, + unsigned int * + )); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *, + int (*)( + SSL *, + const unsigned char *, + unsigned int + )); +long SSL_CTX_get_read_ahead(SSL_CTX *); +long SSL_CTX_set_read_ahead(SSL_CTX *, long); + int SSL_CTX_use_psk_identity_hint(SSL_CTX *, const char *); void SSL_CTX_set_psk_server_callback(SSL_CTX *, unsigned int (*)( @@ -467,6 +482,8 @@ /* DTLS support */ long Cryptography_DTLSv1_get_timeout(SSL *, time_t *, long *); long DTLSv1_handle_timeout(SSL *); +long DTLS_set_link_mtu(SSL *, long); +long DTLS_get_link_min_mtu(SSL *); """ CUSTOMIZATIONS = """ @@ -630,6 +647,8 @@ const SSL_METHOD *(*DTLS_client_method)(void) = NULL; static const long SSL_OP_NO_DTLSv1 = NULL; static const long SSL_OP_NO_DTLSv1_2 = NULL; +long *(*DTLS_set_link_mtu)(SSL *, long) = NULL; +long *(*DTLS_get_link_min_mtu)(SSL *) = NULL; #else static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 6dab2bf0cf7a..006a80a5736b 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -197,6 +197,8 @@ def cryptography_has_generic_dtls_method(): "DTLS_client_method", "SSL_OP_NO_DTLSv1", "SSL_OP_NO_DTLSv1_2", + "DTLS_set_link_mtu", + "DTLS_get_link_min_mtu", ] From 1fdf29e6e0575e7976c68a6245fa217f6d611752 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 4 Feb 2018 22:24:07 +0800 Subject: [PATCH 165/988] fix a memory leak in ec derive_private_key (#4096) * fix a memory leak in ec derive_private_key fixes #4095 * pep8! --- src/cryptography/hazmat/backends/openssl/backend.py | 5 +++-- tests/hazmat/backends/test_openssl_memleak.py | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ebcf8015fa43..85e13b57266f 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1409,8 +1409,9 @@ def derive_elliptic_curve_private_key(self, private_value, curve): res = self._lib.EC_KEY_set_public_key(ec_cdata, point) self.openssl_assert(res == 1) - res = self._lib.EC_KEY_set_private_key( - ec_cdata, self._int_to_bn(private_value)) + private = self._int_to_bn(private_value) + private = self._ffi.gc(private, self._lib.BN_clear_free) + res = self._lib.EC_KEY_set_private_key(ec_cdata, private) self.openssl_assert(res == 1) evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 6e92e3418d9d..74973fe51f75 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -214,3 +214,11 @@ def func(): ) ).private_key(backend) """)) + + def test_ec_derive_private_key(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives.asymmetric import ec + ec.derive_private_key(1, ec.SECP256R1(), backend) + """)) From d6ad9fd2e05b70f5d01a3cbee7f97624abbaddbc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 5 Feb 2018 16:47:21 +0800 Subject: [PATCH 166/988] memory leak changelog (#4097) --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5e0c0eb5a412..79ce603b0d11 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,8 @@ Changelog * Resolved a bug in ``HKDF`` that incorrectly constrained output size. * Added token rotation support to :doc:`Fernet ` with :meth:`~cryptography.fernet.MultiFernet.rotate`. +* Fixed a memory leak in + :func:`~cryptography.hazmat.primitives.asymmetric.ec.derive_private_key`. .. _v2-1-4: From c58d01935263e91300c92eb33f58076c21530c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Tue, 6 Feb 2018 00:37:34 +0100 Subject: [PATCH 167/988] Add bindings for SRTP support (#4099) --- src/_cffi_src/openssl/ssl.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index d4d3a44ada30..b70e75b56803 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -405,6 +405,9 @@ long SSL_CTX_set_tlsext_status_cb(SSL_CTX *, int(*)(SSL *, void *)); long SSL_CTX_set_tlsext_status_arg(SSL_CTX *, void *); +int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *, const char *); +int SSL_set_tlsext_use_srtp(SSL *, const char *); + long SSL_session_reused(SSL *); void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *, From b71d5f5c5545a537956025e46472b15d0f52e9e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Tue, 6 Feb 2018 13:10:17 +0100 Subject: [PATCH 168/988] Add myself to AUTHORS.rst (#4101) --- AUTHORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index 60f5de115dab..f0c4a0be7c35 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -38,3 +38,4 @@ PGP key fingerprints are enclosed in parentheses. * Erik Daguerre * Aviv Palivoda * Chris Wolfe +* Jeremy Lainé From a36579b6e4086ded4c20578bbfbfae083d5e6bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Tue, 6 Feb 2018 13:11:03 +0100 Subject: [PATCH 169/988] Add binding for SSL_get_certificate (#4100) Currently we only expose SSL_get_peer_certificate, which allows you to retrieve the remote party's certificate. This adds the symetrical binding to retrieve the local party's certificate. The motivation for this additional binding is to make it possible to query the local certificate regardless of the method which was used to load the certificate into the SSL connection (from a file, from an in-memory object). An example where this is useful is when negotiating a DTLS-SRTP connection, the fingerprint of the local certificate needs to be communicated to the remote party out-of-band via SDP. This binding can be exposed in pyopenssl as Connection.get_certificate(). --- src/_cffi_src/openssl/ssl.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index b70e75b56803..29331145c696 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -179,6 +179,7 @@ int SSL_write(SSL *, const void *, int); int SSL_read(SSL *, void *, int); int SSL_peek(SSL *, void *, int); +X509 *SSL_get_certificate(const SSL *); X509 *SSL_get_peer_certificate(const SSL *); int SSL_get_ex_data_X509_STORE_CTX_idx(void); From 9402044dae4e642e3a5c884389405852bd5eb72d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 13 Feb 2018 10:31:05 -0500 Subject: [PATCH 170/988] fixed docs with latest sphinx (#4107) --- docs/cryptography-docs.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/cryptography-docs.py b/docs/cryptography-docs.py index 238dd69ee358..923ec6f5b2c3 100644 --- a/docs/cryptography-docs.py +++ b/docs/cryptography-docs.py @@ -5,8 +5,7 @@ from __future__ import absolute_import, division, print_function from docutils import nodes - -from sphinx.util.compat import Directive +from docutils.parsers.rst import Directive DANGER_MESSAGE = """ From 7254db5d1666d64c1b53321a9fdffa9ff1863d25 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 13 Feb 2018 20:07:14 +0400 Subject: [PATCH 171/988] add aws-encryption-sdk as a downstream (#4106) they're probably important, let's not break them. --- Jenkinsfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 474f502a56b0..e152d921aed2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -148,6 +148,21 @@ def downstreams = [ inv test """ ], + [ + downstreamName: 'aws-encryption-sdk', + label: 'docker', + imageName: 'pyca/cryptography-runner-ubuntu-rolling', + script: """#!/bin/bash -xe + git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python + cd aws-encryption-sdk-python + virtualenv .venv + source .venv/bin/activate + pip install ../cryptography + pip install pytest pytest-mock mock + pip install -e . + AWS_ENCRYPTION_SDK_PYTHON_INTEGRATION_TEST_AWS_KMS_KEY_ID="arn:aws:kms:us-west-2:nonsense" pytest -m local -l + """ + ], ] def checkout_git(label) { From 98cba4142c532e861afe609445d6b73bd1ee7b64 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 21 Feb 2018 21:25:54 -0500 Subject: [PATCH 172/988] Reorder this to reflect Alex's Opinions On What Is Good (#4115) --- docs/hazmat/primitives/asymmetric/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/index.rst b/docs/hazmat/primitives/asymmetric/index.rst index 891e9a827c98..173faa9ef05a 100644 --- a/docs/hazmat/primitives/asymmetric/index.rst +++ b/docs/hazmat/primitives/asymmetric/index.rst @@ -23,13 +23,13 @@ private key is able to decrypt it. .. toctree:: :maxdepth: 1 - dsa + x25519 ec rsa dh + dsa serialization utils - x25519 .. _`proof of identity`: https://en.wikipedia.org/wiki/Public-key_infrastructure From 2c1277936be6ef927b968816adf7355a0cec8f9e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 22 Feb 2018 22:44:46 +0800 Subject: [PATCH 173/988] switch RSA OAEP examples to use SHA256 (#4117) --- docs/hazmat/primitives/asymmetric/rsa.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index 4634dd457904..46cc30af9552 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -247,8 +247,8 @@ options. Here's an example using a secure padding and hash function: >>> ciphertext = public_key.encrypt( ... message, ... padding.OAEP( - ... mgf=padding.MGF1(algorithm=hashes.SHA1()), - ... algorithm=hashes.SHA1(), + ... mgf=padding.MGF1(algorithm=hashes.SHA256()), + ... algorithm=hashes.SHA256(), ... label=None ... ) ... ) @@ -270,8 +270,8 @@ Once you have an encrypted message, it can be decrypted using the private key: >>> plaintext = private_key.decrypt( ... ciphertext, ... padding.OAEP( - ... mgf=padding.MGF1(algorithm=hashes.SHA1()), - ... algorithm=hashes.SHA1(), + ... mgf=padding.MGF1(algorithm=hashes.SHA256()), + ... algorithm=hashes.SHA256(), ... label=None ... ) ... ) From 404496aeb74b13ce438d62712818ab793033de90 Mon Sep 17 00:00:00 2001 From: Tux Date: Fri, 23 Feb 2018 13:57:54 -0700 Subject: [PATCH 174/988] Expose BN_rand and BN_rand_range (#4118) --- src/_cffi_src/openssl/bignum.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/_cffi_src/openssl/bignum.py b/src/_cffi_src/openssl/bignum.py index e0d87ae1e5fd..2c140c93eeb3 100644 --- a/src/_cffi_src/openssl/bignum.py +++ b/src/_cffi_src/openssl/bignum.py @@ -19,6 +19,9 @@ void BN_free(BIGNUM *); void BN_clear_free(BIGNUM *); +int BN_rand(BIGNUM *, int, int, int); +int BN_rand_range(BIGNUM *, BIGNUM *); + BN_CTX *BN_CTX_new(void); void BN_CTX_free(BN_CTX *); From 8374206d4d4c4e9fe2fd3217b629d9061227198d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Sun, 25 Feb 2018 04:22:37 +0100 Subject: [PATCH 175/988] Add certbot to downstream tests (#3740) (#4120) --- Jenkinsfile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index e152d921aed2..8f291172a6be 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -163,6 +163,22 @@ def downstreams = [ AWS_ENCRYPTION_SDK_PYTHON_INTEGRATION_TEST_AWS_KMS_KEY_ID="arn:aws:kms:us-west-2:nonsense" pytest -m local -l """ ], + [ + downstreamName: 'certbot', + label: 'docker', + imageName: 'pyca/cryptography-runner-ubuntu-rolling', + script: """#!/bin/bash -xe + git clone --depth=1 https://github.com/certbot/certbot + cd certbot + virtualenv .venv + source .venv/bin/activate + pip install ../cryptography + pip install pytest pytest-mock mock + pip install -e acme + pip install -e . + pytest certbot/tests + """ + ], ] def checkout_git(label) { From 96787f954bf89b12dfc3f8744bcb0998b2f0c22f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Feb 2018 23:18:03 +0800 Subject: [PATCH 176/988] test acme and also josepy as a downstream in jenkins (#4123) --- Jenkinsfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 8f291172a6be..eba186fbf1c1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -177,6 +177,21 @@ def downstreams = [ pip install -e acme pip install -e . pytest certbot/tests + pytest acme + """ + ], + [ + downstreamName: 'certbot-josepy', + label: 'docker', + imageName: 'pyca/cryptography-runner-ubuntu-rolling', + script: """#!/bin/bash -xe + git clone --depth=1 https://github.com/certbot/josepy + cd josepy + virtualenv .venv + source .venv/bin/activate + pip install ../cryptography + pip install -e .[tests] + pytest src """ ], ] From 388d1bd3e9cd953fcc948edbc152d5d140c87eb8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 5 Mar 2018 11:36:08 -0400 Subject: [PATCH 177/988] don't allow GeneralNames to be an empty list (#4128) * don't allow GeneralNames to be an empty list * flake8 --- src/cryptography/x509/extensions.py | 3 +++ tests/x509/test_x509_ext.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index eb4b927fbbbd..af12fa9cc485 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1160,6 +1160,9 @@ def __hash__(self): class GeneralNames(object): def __init__(self, general_names): general_names = list(general_names) + if len(general_names) == 0: + raise ValueError("Must supply at least one general name") + if not all(isinstance(x, GeneralName) for x in general_names): raise TypeError( "Every item in the general_names list must be an " diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 9f4e17580285..b048c140fb35 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -2052,6 +2052,10 @@ def test_invalid_general_names(self): [x509.DNSName(u"cryptography.io"), "invalid"] ) + def test_does_not_allow_empty_list(self): + with pytest.raises(ValueError): + x509.GeneralNames([]) + def test_repr(self): gns = x509.GeneralNames( [ From 62303cc9dcc6464900623571a72cca3b3ecc2a44 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 5 Mar 2018 12:02:02 -0500 Subject: [PATCH 178/988] Remove unused bindings from asn1.py (#4082) * Remove unused bindings from asn1.py This also includes a couple removals from x509v3.py which also reference ASN1_ITEM_EXP. * re-add int ASN1_STRING_set_default_mask_asc(char *); * also re-add static const int MBSTRING_UTF8 --- src/_cffi_src/openssl/asn1.py | 57 +-------------------------------- src/_cffi_src/openssl/x509v3.py | 10 ------ 2 files changed, 1 insertion(+), 66 deletions(-) diff --git a/src/_cffi_src/openssl/asn1.py b/src/_cffi_src/openssl/asn1.py index ce2d0782414a..51acf10cacf8 100644 --- a/src/_cffi_src/openssl/asn1.py +++ b/src/_cffi_src/openssl/asn1.py @@ -11,7 +11,6 @@ TYPES = """ typedef int... time_t; -typedef int ASN1_BOOLEAN; typedef ... ASN1_INTEGER; struct asn1_string_st { @@ -31,33 +30,16 @@ typedef ... ASN1_TYPE; typedef ... ASN1_GENERALIZEDTIME; typedef ... ASN1_ENUMERATED; -typedef ... ASN1_ITEM; -typedef ... ASN1_VALUE; - -typedef ... ASN1_ITEM_EXP; - -typedef ... ASN1_UTCTIME; static const int V_ASN1_GENERALIZEDTIME; -static const int MBSTRING_FLAG; -static const int MBSTRING_ASC; -static const int MBSTRING_BMP; static const int MBSTRING_UTF8; -static const int MBSTRING_UNIV; """ FUNCTIONS = """ -ASN1_OBJECT *ASN1_OBJECT_new(void); void ASN1_OBJECT_free(ASN1_OBJECT *); -/* ASN1 OBJECT IDENTIFIER */ -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **, const unsigned char **, long); - /* ASN1 STRING */ -ASN1_STRING *ASN1_STRING_new(void); -ASN1_STRING *ASN1_STRING_type_new(int); -void ASN1_STRING_free(ASN1_STRING *); unsigned char *ASN1_STRING_data(ASN1_STRING *); int ASN1_STRING_set(ASN1_STRING *, const void *, int); @@ -70,7 +52,6 @@ ASN1_IA5STRING *ASN1_IA5STRING_new(void); /* ASN1 INTEGER */ -ASN1_INTEGER *ASN1_INTEGER_new(void); void ASN1_INTEGER_free(ASN1_INTEGER *); int ASN1_INTEGER_set(ASN1_INTEGER *, long); @@ -80,29 +61,17 @@ ASN1_TIME *ASN1_TIME_set(ASN1_TIME *, time_t); int ASN1_TIME_set_string(ASN1_TIME *, const char *); -/* ASN1 UTCTIME */ -ASN1_UTCTIME *ASN1_UTCTIME_new(void); -void ASN1_UTCTIME_free(ASN1_UTCTIME *); -int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *, time_t); -ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *, time_t); - /* ASN1 GENERALIZEDTIME */ -int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *, const char *); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *, time_t); void ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *); -int i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *, unsigned char **); /* ASN1 ENUMERATED */ ASN1_ENUMERATED *ASN1_ENUMERATED_new(void); void ASN1_ENUMERATED_free(ASN1_ENUMERATED *); int ASN1_ENUMERATED_set(ASN1_ENUMERATED *, long); -int i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *, unsigned char **); -ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **, const unsigned char **, long, - const ASN1_ITEM *); int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *, int, int); /* These became const ASN1_* in 1.1.0 */ -int i2d_ASN1_OBJECT(ASN1_OBJECT *, unsigned char **); int ASN1_STRING_type(ASN1_STRING *); int ASN1_STRING_to_UTF8(unsigned char **, ASN1_STRING *); long ASN1_ENUMERATED_get(ASN1_ENUMERATED *); @@ -117,39 +86,15 @@ ASN1_BIT_STRING *ASN1_BIT_STRING_new(void); void ASN1_BIT_STRING_free(ASN1_BIT_STRING *); -int i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *, unsigned char **); -int i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *, unsigned char **); -int i2d_ASN1_INTEGER(ASN1_INTEGER *, unsigned char **); /* This is not a macro, but is const on some versions of OpenSSL */ int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *, int); -const ASN1_ITEM *ASN1_ITEM_ptr(ASN1_ITEM_EXP *); - -/* These aren't macros these arguments are all const X on openssl > 1.0.x */ -int ASN1_TIME_print(BIO *, ASN1_TIME *); int ASN1_STRING_length(ASN1_STRING *); -ASN1_STRING *ASN1_STRING_dup(ASN1_STRING *); -int ASN1_STRING_cmp(ASN1_STRING *, ASN1_STRING *); -int ASN1_UTCTIME_print(BIO *, ASN1_UTCTIME *); - -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *); -int ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *, ASN1_OCTET_STRING *); - -ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *); -int ASN1_INTEGER_cmp(ASN1_INTEGER *, ASN1_INTEGER *); -long ASN1_INTEGER_get(ASN1_INTEGER *); +int ASN1_STRING_set_default_mask_asc(char *); BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *, BIGNUM *); ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *, ASN1_INTEGER *); -/* These isn't a macro the arg is const on openssl 1.0.2+ */ -int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *); -int ASN1_UTCTIME_check(ASN1_UTCTIME *); -int ASN1_TIME_check(ASN1_TIME *); - -/* Not a macro, const on openssl 1.0 */ -int ASN1_STRING_set_default_mask_asc(char *); - int i2d_ASN1_TYPE(ASN1_TYPE *, unsigned char **); ASN1_TYPE *d2i_ASN1_TYPE(ASN1_TYPE **, const unsigned char **, long); """ diff --git a/src/_cffi_src/openssl/x509v3.py b/src/_cffi_src/openssl/x509v3.py index d31107fbf54f..25c4fed87a4e 100644 --- a/src/_cffi_src/openssl/x509v3.py +++ b/src/_cffi_src/openssl/x509v3.py @@ -41,12 +41,6 @@ typedef void * (*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef struct { - ASN1_ITEM_EXP *it; - X509V3_EXT_D2I d2i; - ...; -} X509V3_EXT_METHOD; - static const int GEN_OTHERNAME; static const int GEN_EMAIL; static const int GEN_X400; @@ -234,10 +228,6 @@ X509_EXTENSION *X509V3_EXT_conf_nid(Cryptography_LHASH_OF_CONF_VALUE *, X509V3_CTX *, int, char *); -/* These aren't macros these functions are all const X on openssl > 1.0.x */ -const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *); -const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int); - Cryptography_STACK_OF_DIST_POINT *sk_DIST_POINT_new_null(void); void sk_DIST_POINT_free(Cryptography_STACK_OF_DIST_POINT *); int sk_DIST_POINT_num(Cryptography_STACK_OF_DIST_POINT *); From d87f80619b79de404072704c4e0a68806fcf7cd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Mon, 5 Mar 2018 19:05:38 +0100 Subject: [PATCH 179/988] Document motivation for a KDF after key-exchange (#4005) (#4124) --- docs/hazmat/primitives/asymmetric/dh.rst | 21 ++++++++++++++- docs/hazmat/primitives/asymmetric/ec.rst | 27 +++++++++++++++++--- docs/hazmat/primitives/asymmetric/x25519.rst | 21 ++++++++++++++- 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/dh.rst b/docs/hazmat/primitives/asymmetric/dh.rst index e8e91cb4527b..04da3e40dec5 100644 --- a/docs/hazmat/primitives/asymmetric/dh.rst +++ b/docs/hazmat/primitives/asymmetric/dh.rst @@ -19,12 +19,16 @@ Exchange Algorithm ~~~~~~~~~~~~~~~~~~ For most applications the ``shared_key`` should be passed to a key -derivation function. +derivation function. This allows mixing of additional information into the +key, derivation of multiple keys, and destroys any structure that may be +present. .. code-block:: pycon >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import dh + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate some parameters. These can be reused. >>> parameters = dh.generate_parameters(generator=2, key_size=2048, ... backend=default_backend()) @@ -36,11 +40,26 @@ derivation function. >>> # must agree on a common set of parameters. >>> peer_public_key = parameters.generate_private_key().public_key() >>> shared_key = private_key.exchange(peer_public_key) + >>> # Perform key derivation. + >>> derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key, but >>> # we can reuse the parameters. >>> private_key_2 = parameters.generate_private_key() >>> peer_public_key_2 = parameters.generate_private_key().public_key() >>> shared_key_2 = private_key_2.exchange(peer_public_key_2) + >>> derived_key_2 = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key_2) DHE (or EDH), the ephemeral form of this exchange, is **strongly preferred** over simple DH and provides `forward secrecy`_ when used. You must diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 0bb74c6fe15e..5d6251f147b4 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -226,12 +226,16 @@ Elliptic Curve Key Exchange algorithm in NIST publication `800-56A`_, and later in `800-56Ar2`_. For most applications the ``shared_key`` should be passed to a key - derivation function. + derivation function. This allows mixing of additional information into the + key, derivation of multiple keys, and destroys any structure that may be + present. .. doctest:: >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import ec + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate a private key for use in the exchange. >>> private_key = ec.generate_private_key( ... ec.SECP384R1(), default_backend() @@ -243,6 +247,14 @@ Elliptic Curve Key Exchange algorithm ... ec.SECP384R1(), default_backend() ... ).public_key() >>> shared_key = private_key.exchange(ec.ECDH(), peer_public_key) + >>> # Perform key derivation. + >>> derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key. >>> private_key_2 = ec.generate_private_key( ... ec.SECP384R1(), default_backend() @@ -251,6 +263,13 @@ Elliptic Curve Key Exchange algorithm ... ec.SECP384R1(), default_backend() ... ).public_key() >>> shared_key_2 = private_key_2.exchange(ec.ECDH(), peer_public_key_2) + >>> derived_key_2 = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key_2) ECDHE (or EECDH), the ephemeral form of this exchange, is **strongly preferred** over simple ECDH and provides `forward secrecy`_ when used. @@ -453,8 +472,10 @@ Key Interfaces Performs a key exchange operation using the provided algorithm with the peer's public key. - For most applications the result should be passed to a key derivation - function. + For most applications the ``shared_key`` should be passed to a key + derivation function. This allows mixing of additional information into the + key, derivation of multiple keys, and destroys any structure that may be + present. :param algorithm: The key exchange algorithm, currently only :class:`~cryptography.hazmat.primitives.asymmetric.ec.ECDH` is diff --git a/docs/hazmat/primitives/asymmetric/x25519.rst b/docs/hazmat/primitives/asymmetric/x25519.rst index e6306ff52657..67ed280929ed 100644 --- a/docs/hazmat/primitives/asymmetric/x25519.rst +++ b/docs/hazmat/primitives/asymmetric/x25519.rst @@ -15,12 +15,16 @@ Exchange Algorithm ~~~~~~~~~~~~~~~~~~ For most applications the ``shared_key`` should be passed to a key -derivation function. +derivation function. This allows mixing of additional information into the +key, derivation of multiple keys, and destroys any structure that may be +present. .. doctest:: >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate a private key for use in the exchange. >>> private_key = X25519PrivateKey.generate() >>> # In a real handshake the peer_public_key will be received from the @@ -29,10 +33,25 @@ derivation function. >>> # must agree on a common set of parameters. >>> peer_public_key = X25519PrivateKey.generate().public_key() >>> shared_key = private_key.exchange(peer_public_key) + >>> # Perform key derivation. + >>> derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key. >>> private_key_2 = X25519PrivateKey.generate() >>> peer_public_key_2 = X25519PrivateKey.generate().public_key() >>> shared_key_2 = private_key_2.exchange(peer_public_key_2) + >>> derived_key_2 = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key_2) Key interfaces ~~~~~~~~~~~~~~ From 37c6a80141fb77e5ade79d23e826f1d6c6f3a172 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 5 Mar 2018 14:15:31 -0400 Subject: [PATCH 180/988] remove cms bindings we don't use (#4131) --- src/_cffi_src/build_openssl.py | 1 - src/_cffi_src/openssl/cms.py | 113 ------------------ .../hazmat/bindings/openssl/_conditional.py | 35 ------ 3 files changed, 149 deletions(-) delete mode 100644 src/_cffi_src/openssl/cms.py diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 7ec235ff211d..6b15fe4a4c84 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -64,7 +64,6 @@ def _extra_compile_args(platform): "bignum", "bio", "cmac", - "cms", "conf", "crypto", "ct", diff --git a/src/_cffi_src/openssl/cms.py b/src/_cffi_src/openssl/cms.py deleted file mode 100644 index a5493d68dbe0..000000000000 --- a/src/_cffi_src/openssl/cms.py +++ /dev/null @@ -1,113 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -INCLUDES = """ -#if !defined(OPENSSL_NO_CMS) -#include -#endif -""" - -TYPES = """ -static const long Cryptography_HAS_CMS; -static const long Cryptography_HAS_CMS_BIO_FUNCTIONS; - -typedef ... CMS_ContentInfo; -typedef ... CMS_SignerInfo; -typedef ... CMS_CertificateChoices; -typedef ... CMS_RevocationInfoChoice; -typedef ... CMS_RecipientInfo; -typedef ... CMS_ReceiptRequest; -typedef ... CMS_Receipt; - -static const int CMS_TEXT; -static const int CMS_NOCERTS; -static const int CMS_NO_CONTENT_VERIFY; -static const int CMS_NO_ATTR_VERIFY; -static const int CMS_NOSIGS; -static const int CMS_NOINTERN; -static const int CMS_NO_SIGNER_CERT_VERIFY; -static const int CMS_NOVERIFY; -static const int CMS_DETACHED; -static const int CMS_BINARY; -static const int CMS_NOATTR; -static const int CMS_NOSMIMECAP; -static const int CMS_NOOLDMIMETYPE; -static const int CMS_CRLFEOL; -static const int CMS_STREAM; -static const int CMS_NOCRL; -static const int CMS_PARTIAL; -static const int CMS_REUSE_DIGEST; -static const int CMS_USE_KEYID; -static const int CMS_DEBUG_DECRYPT; -""" - -FUNCTIONS = """ -BIO *BIO_new_CMS(BIO *, CMS_ContentInfo *); -int i2d_CMS_bio_stream(BIO *, CMS_ContentInfo *, BIO *, int); -int PEM_write_bio_CMS_stream(BIO *, CMS_ContentInfo *, BIO *, int); -int CMS_final(CMS_ContentInfo *, BIO *, BIO *, unsigned int); -CMS_ContentInfo *CMS_sign(X509 *, EVP_PKEY *, Cryptography_STACK_OF_X509 *, - BIO *, unsigned int); -int CMS_verify(CMS_ContentInfo *, Cryptography_STACK_OF_X509 *, X509_STORE *, - BIO *, BIO *, unsigned int); -CMS_ContentInfo *CMS_encrypt(Cryptography_STACK_OF_X509 *, BIO *, - const EVP_CIPHER *, unsigned int); -int CMS_decrypt(CMS_ContentInfo *, EVP_PKEY *, X509 *, BIO *, BIO *, - unsigned int); -CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *, X509 *, EVP_PKEY *, - const EVP_MD *, unsigned int); -""" - -CUSTOMIZATIONS = """ -#if !defined(OPENSSL_NO_CMS) -static const long Cryptography_HAS_CMS = 1; -static const long Cryptography_HAS_CMS_BIO_FUNCTIONS = 1; -#else -static const long Cryptography_HAS_CMS = 0; -static const long Cryptography_HAS_CMS_BIO_FUNCTIONS = 0; -typedef void CMS_ContentInfo; -typedef void CMS_SignerInfo; -typedef void CMS_CertificateChoices; -typedef void CMS_RevocationInfoChoice; -typedef void CMS_RecipientInfo; -typedef void CMS_ReceiptRequest; -typedef void CMS_Receipt; -const long CMS_TEXT = 0; -const long CMS_NOCERTS = 0; -const long CMS_NO_CONTENT_VERIFY = 0; -const long CMS_NO_ATTR_VERIFY = 0; -const long CMS_NOSIGS = 0; -const long CMS_NOINTERN = 0; -const long CMS_NO_SIGNER_CERT_VERIFY = 0; -const long CMS_NOVERIFY = 0; -const long CMS_DETACHED = 0; -const long CMS_BINARY = 0; -const long CMS_NOATTR = 0; -const long CMS_NOSMIMECAP = 0; -const long CMS_NOOLDMIMETYPE = 0; -const long CMS_CRLFEOL = 0; -const long CMS_STREAM = 0; -const long CMS_NOCRL = 0; -const long CMS_PARTIAL = 0; -const long CMS_REUSE_DIGEST = 0; -const long CMS_USE_KEYID = 0; -const long CMS_DEBUG_DECRYPT = 0; -BIO *(*BIO_new_CMS)(BIO *, CMS_ContentInfo *) = NULL; -int (*i2d_CMS_bio_stream)(BIO *, CMS_ContentInfo *, BIO *, int) = NULL; -int (*PEM_write_bio_CMS_stream)(BIO *, CMS_ContentInfo *, BIO *, int) = NULL; -int (*CMS_final)(CMS_ContentInfo *, BIO *, BIO *, unsigned int) = NULL; -CMS_ContentInfo *(*CMS_sign)(X509 *, EVP_PKEY *, Cryptography_STACK_OF_X509 *, - BIO *, unsigned int) = NULL; -int (*CMS_verify)(CMS_ContentInfo *, Cryptography_STACK_OF_X509 *, - X509_STORE *, BIO *, BIO *, unsigned int) = NULL; -CMS_ContentInfo *(*CMS_encrypt)(Cryptography_STACK_OF_X509 *, BIO *, - const EVP_CIPHER *, unsigned int) = NULL; -int (*CMS_decrypt)(CMS_ContentInfo *, EVP_PKEY *, X509 *, BIO *, BIO *, - unsigned int) = NULL; -CMS_SignerInfo *(*CMS_add1_signer)(CMS_ContentInfo *, X509 *, EVP_PKEY *, - const EVP_MD *, unsigned int) = NULL; -#endif -""" diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 006a80a5736b..3cdafd6773fe 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -5,40 +5,6 @@ from __future__ import absolute_import, division, print_function -def cryptography_has_cms(): - return [ - "BIO_new_CMS", - "i2d_CMS_bio_stream", - "PEM_write_bio_CMS_stream", - "CMS_final", - "CMS_sign", - "CMS_verify", - "CMS_encrypt", - "CMS_decrypt", - "CMS_add1_signer", - "CMS_TEXT", - "CMS_NOCERTS", - "CMS_NO_CONTENT_VERIFY", - "CMS_NO_ATTR_VERIFY", - "CMS_NOSIGS", - "CMS_NOINTERN", - "CMS_NO_SIGNER_CERT_VERIFY", - "CMS_NOVERIFY", - "CMS_DETACHED", - "CMS_BINARY", - "CMS_NOATTR", - "CMS_NOSMIMECAP", - "CMS_NOOLDMIMETYPE", - "CMS_CRLFEOL", - "CMS_STREAM", - "CMS_NOCRL", - "CMS_PARTIAL", - "CMS_REUSE_DIGEST", - "CMS_USE_KEYID", - "CMS_DEBUG_DECRYPT", - ] - - def cryptography_has_ec2m(): return [ "EC_GF2m_simple_method", @@ -276,7 +242,6 @@ def cryptography_has_psk(): # when cffi supports #if in cdef. We use functions instead of just a dict of # lists so we can use coverage to measure which are used. CONDITIONAL_NAMES = { - "Cryptography_HAS_CMS": cryptography_has_cms, "Cryptography_HAS_EC2M": cryptography_has_ec2m, "Cryptography_HAS_EC_1_0_2": cryptography_has_ec_1_0_2, "Cryptography_HAS_SET_ECDH_AUTO": cryptography_has_set_ecdh_auto, From aa877e1a6696fd4defbdf97ef114bdb2d4cd8a18 Mon Sep 17 00:00:00 2001 From: Dominic Chen Date: Mon, 5 Mar 2018 16:17:17 -0500 Subject: [PATCH 181/988] add X509_CRL_dup function (#4127) --- src/_cffi_src/openssl/x509.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index ea7b84b673fb..2b845118d0a3 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -144,6 +144,7 @@ int X509_REVOKED_set_revocationDate(X509_REVOKED *, ASN1_TIME *); X509_CRL *X509_CRL_new(void); +X509_CRL *X509_CRL_dup(X509_CRL *); X509_CRL *d2i_X509_CRL_bio(BIO *, X509_CRL **); int X509_CRL_add0_revoked(X509_CRL *, X509_REVOKED *); int X509_CRL_add_ext(X509_CRL *, X509_EXTENSION *, int); From ef8f066d5a6790a65452e345ae70b8e29af5381e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Mon, 5 Mar 2018 22:47:44 +0100 Subject: [PATCH 182/988] Check all .so's are noexecstack (#3994) (#4130) The ouput of execstack -q is one line per file, either: - starting with a '-' (dash) if the file does not require an executable stack - start with an 'X' if the file *does* require an executable stack We check there are no files which require an executable stack. --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index a8f0980e6ce4..0f66bfb044e6 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -134,6 +134,9 @@ def build(version, label, imageName) { CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION -w tmpwheelhouse/ --no-binary cryptography --no-deps $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ + unzip wheelhouse/*.whl -d execstack.check + chmod -R 777 execstack.check + (execstack execstack.check/cryptography/hazmat/bindings/*.so | grep '^X') && exit 1 $linux32 /opt/python/$version/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ $linux32 /opt/python/$version/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" """ From e3d2fc1727598bfabb3df78032b83bdccb188681 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 5 Mar 2018 20:50:10 -0400 Subject: [PATCH 183/988] install only the minimum required to build our docs for rtd (#4133) * install only the minimum required to build our docs for rtd We don't need to install sphinxcontrib-spelling or doc8 in rtd. * move another package --- dev-requirements.txt | 2 +- rtd-requirements.txt | 1 + setup.py | 6 ++++-- tox.ini | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 rtd-requirements.txt diff --git a/dev-requirements.txt b/dev-requirements.txt index 93d284508393..58827ed47f35 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -4,5 +4,5 @@ coverage requests tox >= 2.4.1 twine >= 1.8.0 --e .[test,docstest,pep8test] +-e .[test,docs,docstest,pep8test] -e vectors diff --git a/rtd-requirements.txt b/rtd-requirements.txt new file mode 100644 index 000000000000..142b6ca357fe --- /dev/null +++ b/rtd-requirements.txt @@ -0,0 +1 @@ +-e .[docs] diff --git a/setup.py b/setup.py index 800e94d2746b..b6558163183e 100644 --- a/setup.py +++ b/setup.py @@ -296,12 +296,14 @@ def run_tests(self): ":platform_python_implementation != 'PyPy'": ["cffi >= 1.7"], "test": test_requirements, + "docs": [ + "sphinx >= 1.6.5", + "sphinx_rtd_theme", + ], "docstest": [ "doc8", "pyenchant >= 1.6.11", "readme_renderer >= 16.0", - "sphinx >= 1.6.5", - "sphinx_rtd_theme", "sphinxcontrib-spelling >= 4.0.1", ], "pep8test": [ diff --git a/tox.ini b/tox.ini index 03c4c0749317..6dfe1c7219f7 100644 --- a/tox.ini +++ b/tox.ini @@ -37,6 +37,7 @@ commands = [testenv:docs] extras = + docs docstest basepython = python2.7 commands = From a522f9cc0e6f09d530dffce6b1902257366eb68b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 5 Mar 2018 23:00:20 -0400 Subject: [PATCH 184/988] bump travis to latest pypy version (#4134) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 47c3620fda8c..7e5109ad77ce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,9 +29,9 @@ matrix: env: TOXENV=py36 - python: pypy-5.3 env: TOXENV=pypy - - python: pypy2.7-5.8.0 + - python: pypy2.7-5.10.0 env: TOXENV=pypy - - python: pypy3.5-5.8.0 + - python: pypy3.5-5.10.1 env: TOXENV=pypy3-nocoverage - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0g From 2250aafd6f475a503219da75554200165005ee34 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 15 Mar 2018 11:59:22 -0400 Subject: [PATCH 185/988] brainpool vectors from rfc 7027 (#4143) --- docs/development/test-vectors.rst | 2 ++ docs/spelling_wordlist.txt | 1 + .../asymmetric/ECDH/brainpool.txt | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/ECDH/brainpool.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 817bdaf64005..fcafe0f20d1b 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -129,6 +129,8 @@ Key exchange ``vectors/cryptography_vectors/asymmetric/DH/dhpub_rfc5114_2.der`` contains are the above parameters and keys in DER format. +* ``vectors/cryptoraphy_vectors/asymmetric/ECDH/brainpool.txt`` contains + Brainpool vectors from :rfc:`7027`. X.509 ~~~~~ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 883edd17490c..fb07fd0f31de 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -8,6 +8,7 @@ bcrypt Blowfish boolean Botan +Brainpool Capitan Changelog ciphertext diff --git a/vectors/cryptography_vectors/asymmetric/ECDH/brainpool.txt b/vectors/cryptography_vectors/asymmetric/ECDH/brainpool.txt new file mode 100644 index 000000000000..8dcb34440a6a --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/ECDH/brainpool.txt @@ -0,0 +1,34 @@ +# Taken from RFC 7027 and reformatted into NIST ECDH format + +COUNT = 0 +curve = brainpoolP256r1 +dA = 81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1D +x_qA = 44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5 +y_qA = 8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC +dB = 55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3 +x_qB = 8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B +y_qB = 990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A +x_Z = 89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B +y_Z = 49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DE + +COUNT = 1 +curve = brainpoolP384r1 +dA = 1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042 +x_qA = 68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068 +y_qA = 55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59 +dB = 032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670 +x_qB = 4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4 +y_qB = 62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48 +x_Z = 0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42 +y_Z = 0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BD + +COUNT = 2 +curve = brainpoolP512r1 +dA = 16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422 +x_qA = 0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FD +y_qA = 72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7 +dB = 230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429 +x_qB = 9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199F +y_qB = 2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FA +x_Z = A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1F +y_Z = 7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2 From 17c8f126c7c7d5ce886112a6e924277a7b203f25 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 15 Mar 2018 13:35:10 -0400 Subject: [PATCH 186/988] Brainpool curves (#4129) * added brainpool ec-curves key_length >= 256bit * limit brainpool curves to the set that appear required + docs * oops * typos all around me * add brainpool ECDH kex tests * switch to using rfc 7027 vectors * review feedback * empty commits are the best --- CHANGELOG.rst | 4 +++ docs/hazmat/primitives/asymmetric/ec.rst | 22 ++++++++++++++ .../hazmat/primitives/asymmetric/ec.py | 22 ++++++++++++++ tests/hazmat/primitives/test_ec.py | 29 ++++++++++++++++++- 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 79ce603b0d11..2f8924fd0003 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,10 @@ Changelog * **BACKWARDS INCOMPATIBLE:** Support for Python 2.6 has been dropped. * Resolved a bug in ``HKDF`` that incorrectly constrained output size. +* Added :class:`~cryptography.hazmat.primitives.asymmetric.ec.BrainpoolP256R1`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.BrainpoolP384R1`, and + :class:`~cryptography.hazmat.primitives.asymmetric.ec.BrainpoolP512R1` to + support inter-operating with systems like German smart meters. * Added token rotation support to :doc:`Fernet ` with :meth:`~cryptography.fernet.MultiFernet.rotate`. * Fixed a memory leak in diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 5d6251f147b4..edcfdfcb7405 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -414,6 +414,28 @@ All named curves are instances of :class:`EllipticCurve`. SECG curve ``secp256k1``. +.. class:: BrainpoolP256R1 + + .. versionadded:: 2.2 + + Brainpool curve specified in :rfc:`5639`. These curves are discouraged + for new systems. + +.. class:: BrainpoolP384R1 + + .. versionadded:: 2.2 + + Brainpool curve specified in :rfc:`5639`. These curves are discouraged + for new systems. + +.. class:: BrainpoolP512R1 + + .. versionadded:: 2.2 + + Brainpool curve specified in :rfc:`5639`. These curves are discouraged + for new systems. + + Key Interfaces ~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 7931b0868efd..83266bb4681c 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -228,6 +228,24 @@ class SECP192R1(object): key_size = 192 +@utils.register_interface(EllipticCurve) +class BrainpoolP256R1(object): + name = "brainpoolP256r1" + key_size = 256 + + +@utils.register_interface(EllipticCurve) +class BrainpoolP384R1(object): + name = "brainpoolP384r1" + key_size = 384 + + +@utils.register_interface(EllipticCurve) +class BrainpoolP512R1(object): + name = "brainpoolP512r1" + key_size = 512 + + _CURVE_TYPES = { "prime192v1": SECP192R1, "prime256v1": SECP256R1, @@ -250,6 +268,10 @@ class SECP192R1(object): "sect283r1": SECT283R1, "sect409r1": SECT409R1, "sect571r1": SECT571R1, + + "brainpoolP256r1": BrainpoolP256R1, + "brainpoolP384r1": BrainpoolP384R1, + "brainpoolP512r1": BrainpoolP512R1, } diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 02b1cdc6811d..1b491a109512 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -26,7 +26,7 @@ from ...doubles import DummyKeySerializationEncryption from ...utils import ( load_fips_ecdsa_key_pair_vectors, load_fips_ecdsa_signing_vectors, - load_kasvs_ecdh_vectors, load_vectors_from_file, + load_kasvs_ecdh_vectors, load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm ) @@ -1101,6 +1101,33 @@ def test_key_exchange_with_vectors(self, backend, vector): else: assert z == vector['Z'] + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "ECDH", "brainpool.txt"), + load_nist_vectors + ) + ) + def test_brainpool_kex(self, backend, vector): + curve = ec._CURVE_TYPES[vector['curve'].decode('ascii')] + _skip_exchange_algorithm_unsupported(backend, ec.ECDH(), curve) + key = ec.EllipticCurvePrivateNumbers( + int(vector['da'], 16), + ec.EllipticCurvePublicNumbers( + int(vector['x_qa'], 16), int(vector['y_qa'], 16), curve() + ) + ).private_key(backend) + peer = ec.EllipticCurvePrivateNumbers( + int(vector['db'], 16), + ec.EllipticCurvePublicNumbers( + int(vector['x_qb'], 16), int(vector['y_qb'], 16), curve() + ) + ).private_key(backend) + shared_secret = key.exchange(ec.ECDH(), peer.public_key()) + assert shared_secret == binascii.unhexlify(vector["x_z"]) + shared_secret_2 = peer.exchange(ec.ECDH(), key.public_key()) + assert shared_secret_2 == binascii.unhexlify(vector["x_z"]) + def test_exchange_unsupported_algorithm(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) From 47a66f19bd5bc9fb32d34eb1bcb80da297f0d6c0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 18 Mar 2018 10:12:14 -0400 Subject: [PATCH 187/988] Allow DSA q=224 (#4147) * load Q=224 vectors * DSA parameters should support 224 for q length * oxford comma --- .../hazmat/primitives/asymmetric/dsa.py | 4 +- tests/test_utils.py | 47 -------------- tests/utils.py | 62 ++++++------------- 3 files changed, 20 insertions(+), 93 deletions(-) diff --git a/src/cryptography/hazmat/primitives/asymmetric/dsa.py b/src/cryptography/hazmat/primitives/asymmetric/dsa.py index f2f600ddbce4..e380a441f1ff 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -130,8 +130,8 @@ def generate_private_key(key_size, backend): def _check_dsa_parameters(parameters): if parameters.p.bit_length() not in [1024, 2048, 3072]: raise ValueError("p must be exactly 1024, 2048, or 3072 bits long") - if parameters.q.bit_length() not in [160, 256]: - raise ValueError("q must be exactly 160 or 256 bits long") + if parameters.q.bit_length() not in [160, 224, 256]: + raise ValueError("q must be exactly 160, 224, or 256 bits long") if not (1 < parameters.g < parameters.p): raise ValueError("g, p don't satisfy 1 < g < p.") diff --git a/tests/test_utils.py b/tests/test_utils.py index 455b6c2cdf01..181d9833c917 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1514,42 +1514,6 @@ def test_load_fips_dsa_key_pair_vectors(): 7383a06365af82225dd3713ca5a45006316f53bd12b0e260d5f79795e5a4c9f353f12867a1d320\ 2394673ada8563b71555e53f415254 - [mod = L=2048, N=224] - - P = 904ef8e31e14721910fa0969e77c99b79f190071a86026e37a887a6053960dbfb74390\ -a6641319fe0af32c4e982934b0f1f4c5bc57534e8e56d77c36f0a99080c0d5bc9022fa34f58922\ -81d7b1009571cb5b35699303f912b276d86b1b0722fc0b1500f0ffb2e4d90867a3bdca181a9734\ -617a8a9f991aa7c14dec1cf45ceba00600f8425440ed0c3b52c82e3aa831932a98b477da220867\ -eb2d5e0ca34580b33b1b65e558411ed09c369f4717bf03b551787e13d9e47c267c91c697225265\ -da157945cd8b32e84fc45b80533265239aa00a2dd3d05f5cb231b7daf724b7ecdce170360a8397\ -2e5be94626273d449f441be300a7345db387bebadad67d8060a7 - Q = d7d0a83e84d13032b830ed74a6a88592ec9a4cf42bf37080c6600aad - G = 2050b18d3c9f39fac396c009310d6616f9309b67b59aef9aee813d6b4f12ee29ba8a6b\ -350b11d4336d44b4641230002d870f1e6b1d8728bdd40262df0d2440999185ae077f7034c61679\ -f4360fbb5d181569e7cb8acb04371c11ba55f1bbd777b74304b99b66d4405303e7120dc8bc4785\ -f56e9533e65b63a0c77cce7bba0d5d6069df5edffa927c5a255a09405a008258ed93506a843366\ -2154f6f67e922d7c9788f04d4ec09581063950d9cde8e373ea59a58b2a6df6ba8663345574fabb\ -a9ca981696d83aeac1f34f14f1a813ba900b3f0341dea23f7d3297f919a97e1ae00ac0728c93fe\ -0a88b66591baf4eb0bc6900f39ba5feb41cbbeea7eb7919aa4d3 - - X = 3f19424da3b4f0cafca3fc5019fcd225dd7e496ffdf6b77e364f45be - Y = 7681ed0ac257ab7ff17c52de4638c0614749792707a0c0d23883697e34963df15c806f\ -a6206f7fafb3269018e7703bd1e6f518d13544331a017713dbbe0cee8da6c095271fbf24edb74a\ -44e18b1d3b835622f68d31921c67c83e8479d1972ed0cb106c68188fe22c044254251ebf880b90\ -49dc3b7958ef61e1e67d2f677d2a7d2ab6b7c42b70cc5dedc3e5de7459a2dbc70c69008553d7ff\ -b6bf81c012c8bd67bdddeaab9a4a4373027912a7c7d9cd9cfc6c81dffe0cc7a6d40c3b2065aee7\ -be80e3c35497d64c8045bc511edaf7314c84c56bd9f0fecf62262ea5b45b49a0cffb223713bdbd\ -3ad03a25a0bb2211eba41ffcd08ab0e1ad485c29a3fc25ee8359 - - X = 241396352dd26efe0e2e184da52fe2b61d9d51b91b5009674c447854 - Y = 2f07a3aa9884c65288e5fef56c7b7f4445632273290bae6fcaab87c90058b2bef81ad3\ -34958657cf649ffb976d618b34ce69ef6d68c0d8bfe275cf097a301e8dd5595958e0c668c15f67\ -b5c0b0d01983057ce61593635aab5e0564ed720b0336f055a86755c76be22df3b8487f16e2ba0b\ -5136fd30d7e3b1d30c3bd298d3acc0a1988a11756c94e9a53184d0d3edfbb649caf03eace3083d\ -e9933921e627f4b2e011d1c79e45d8ea1eb7e4e59a1cbd8382b3238474eb949749c985200fbb25\ -41e2dce080aa881945d4d935076e48a0846dc5513bb4da8563b946af54f546455931e79c065ce7\ -ca223a98f8fde40091d38eb2c3eb8e3b81d88374f3146b0afc42 - [mod = L=2048, N=256] P = ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace5e9c41434c9cf0a8e9\ @@ -1883,17 +1847,6 @@ def test_load_fips_dsa_sig_ver_vectors(): S = 18ea15bd9f00475b25204cbc23f8c23e01588015 Result = F (3 - R changed ) - [mod = L=2048, N=224, SHA-1] - - # unsupported so we ignore this - - Msg = f9d01693df99a125b4f17e184331c6b6e8ca00f54f3a - X = e0c4b7d58836046c436fbb2322 - Y = fb6d9bf23a07215093f319725ad0877accff - R = 5764e8dae0327c5bf1972ff7681b9 - S = 475b25204cbc23f8c23e01588015 - Result = F (3 - R changed ) - [mod = L=2048, N=256, SHA-384] P = e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a46b989e59f4d984\ diff --git a/tests/utils.py b/tests/utils.py index 74b1513d2fe5..b721f3440f0a 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -353,43 +353,28 @@ def load_fips_dsa_key_pair_vectors(vector_data): Loads data out of the FIPS DSA KeyPair vector files. """ vectors = [] - # When reading_key_data is set to True it tells the loader to continue - # constructing dictionaries. We set reading_key_data to False during the - # blocks of the vectors of N=224 because we don't support it. - reading_key_data = True for line in vector_data: line = line.strip() - if not line or line.startswith("#"): - continue - elif line.startswith("[mod = L=1024"): - continue - elif line.startswith("[mod = L=2048, N=224"): - reading_key_data = False - continue - elif line.startswith("[mod = L=2048, N=256"): - reading_key_data = True - continue - elif line.startswith("[mod = L=3072"): + if not line or line.startswith("#") or line.startswith("[mod"): continue - if reading_key_data: - if line.startswith("P"): - vectors.append({'p': int(line.split("=")[1], 16)}) - elif line.startswith("Q"): - vectors[-1]['q'] = int(line.split("=")[1], 16) - elif line.startswith("G"): - vectors[-1]['g'] = int(line.split("=")[1], 16) - elif line.startswith("X") and 'x' not in vectors[-1]: - vectors[-1]['x'] = int(line.split("=")[1], 16) - elif line.startswith("X") and 'x' in vectors[-1]: - vectors.append({'p': vectors[-1]['p'], - 'q': vectors[-1]['q'], - 'g': vectors[-1]['g'], - 'x': int(line.split("=")[1], 16) - }) - elif line.startswith("Y"): - vectors[-1]['y'] = int(line.split("=")[1], 16) + if line.startswith("P"): + vectors.append({'p': int(line.split("=")[1], 16)}) + elif line.startswith("Q"): + vectors[-1]['q'] = int(line.split("=")[1], 16) + elif line.startswith("G"): + vectors[-1]['g'] = int(line.split("=")[1], 16) + elif line.startswith("X") and 'x' not in vectors[-1]: + vectors[-1]['x'] = int(line.split("=")[1], 16) + elif line.startswith("X") and 'x' in vectors[-1]: + vectors.append({'p': vectors[-1]['p'], + 'q': vectors[-1]['q'], + 'g': vectors[-1]['g'], + 'x': int(line.split("=")[1], 16) + }) + elif line.startswith("Y"): + vectors[-1]['y'] = int(line.split("=")[1], 16) return vectors @@ -402,10 +387,6 @@ def load_fips_dsa_sig_vectors(vector_data): sha_regex = re.compile( r"\[mod = L=...., N=..., SHA-(?P1|224|256|384|512)\]" ) - # When reading_key_data is set to True it tells the loader to continue - # constructing dictionaries. We set reading_key_data to False during the - # blocks of the vectors of N=224 because we don't support it. - reading_key_data = True for line in vector_data: line = line.strip() @@ -417,14 +398,7 @@ def load_fips_dsa_sig_vectors(vector_data): if sha_match: digest_algorithm = "SHA-{0}".format(sha_match.group("sha")) - if line.startswith("[mod = L=2048, N=224"): - reading_key_data = False - continue - elif line.startswith("[mod = L=2048, N=256"): - reading_key_data = True - continue - - if not reading_key_data or line.startswith("[mod"): + if line.startswith("[mod"): continue name, value = [c.strip() for c in line.split("=")] From 05b34433fccdc2fec0bb014c3668068169d769fd Mon Sep 17 00:00:00 2001 From: Denis Gladkikh Date: Sun, 18 Mar 2018 09:08:17 -0700 Subject: [PATCH 188/988] Update authors (#4148) --- AUTHORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index f0c4a0be7c35..5eae73e3754e 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -39,3 +39,4 @@ PGP key fingerprints are enclosed in parentheses. * Aviv Palivoda * Chris Wolfe * Jeremy Lainé +* Denis Gladkikh From 8aa1eb385c69ddc17e271acad82bade9da7884b8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 18 Mar 2018 15:02:49 -0400 Subject: [PATCH 189/988] change our manylinux1 and macos wheel builders to build limited api (#4113) * change our manylinux1 and macos wheel builders to build limited api pip does not currently support the--py-limited-api cli flag that wheel uses so we have to switch to downloading and then building via setup.py bdist_wheel for now. However, we can get rid of everything but the py34 builder on mac/linux/linux32, saving us 6 wheels now (and soon 9 with the release of python 3.7) * some newlines * review feedback --- .../Jenkinsfile-cryptography-wheel-builder | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 0f66bfb044e6..b0a2fff145d7 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -16,22 +16,26 @@ def configs = [ ], [ label: 'sierra', - versions: ['py27', 'py34', 'py35', 'py36'], + # The py3x version listed here corresponds to the minimum ABI version + # the wheels will support. e.g. py34 supports py34+ + versions: ['py27', 'py34'], ], [ label: 'docker', imageName: 'pyca/cryptography-manylinux1:i686', + # The py3x version listed here corresponds to the minimum ABI version + # the wheels will support. e.g. cp34-cp34m supports py34+ versions: [ 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', - 'cp35-cp35m', 'cp36-cp36m' ], ], [ label: 'docker', imageName: 'pyca/cryptography-manylinux1:x86_64', + # The py3x version listed here corresponds to the minimum ABI version + # the wheels will support. e.g. cp34-cp34m supports py34+ versions: [ 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', - 'cp35-cp35m', 'cp36-cp36m' ], ], ] @@ -88,8 +92,6 @@ def build(version, label, imageName) { def pythonPath = [ py27: "/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7", py34: "/Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4", - py35: "/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5", - py36: "/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6", ] ansiColor { sh """#!/usr/bin/env bash @@ -107,7 +109,19 @@ def build(version, label, imageName) { virtualenv .venv -p ${pythonPath[version]} source .venv/bin/activate pip install -U wheel # upgrade wheel to latest before we use it to build the wheel - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography + pip install cffi six idna asn1crypto ipaddress enum34 + pip download cryptography==$BUILD_VERSION --no-binary cryptography --no-deps + tar zxf cryptography* + pushd cryptography* + REGEX="cp3([0-9])*" + if [[ "${version}" =~ $REGEX ]]; then + PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" + fi + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ + LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ + CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ + python setup.py bdist_wheel --dist-dir=../wheelhouse \$PY_LIMITED_API + popd pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" otool -L `find .venv -name '_openssl*.so'` @@ -122,6 +136,10 @@ def build(version, label, imageName) { } sh """#!/usr/bin/env bash set -x -e + + $linux32 /opt/python/$version/bin/pip install cffi six idna asn1crypto ipaddress enum34 + $linux32 /opt/python/$version/bin/pip download cryptography==$BUILD_VERSION --no-binary cryptography --no-deps + tar zxf cryptography* # Because we are doing this as root in the container, but we write to a mounted dir that is outside the container # we need to make sure we set these files writable such that the jenkins user can delete them afterwards mkdir -p tmpwheelhouse @@ -129,10 +147,16 @@ def build(version, label, imageName) { chmod -R 777 tmpwheelhouse chmod -R 777 wheelhouse - $linux32 /opt/python/$version/bin/pip install cffi six idna asn1crypto ipaddress enum34 + pushd cryptography* + REGEX="cp3([0-9])*" + if [[ "${version}" =~ $REGEX ]]; then + PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" + fi LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION -w tmpwheelhouse/ --no-binary cryptography --no-deps + $linux32 /opt/python/$version/bin/python setup.py bdist_wheel --dist-dir=../tmpwheelhouse \$PY_LIMITED_API + popd + chmod -R 777 cryptography* $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ unzip wheelhouse/*.whl -d execstack.check chmod -R 777 execstack.check From 4a41e540b20b3b37814ec1fc042ea24723eae9da Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 18 Mar 2018 16:30:35 -0400 Subject: [PATCH 190/988] i hate groovy and i hate hard to test scripts (#4149) --- .../Jenkinsfile-cryptography-wheel-builder | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index b0a2fff145d7..c46238bd7034 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -16,15 +16,15 @@ def configs = [ ], [ label: 'sierra', - # The py3x version listed here corresponds to the minimum ABI version - # the wheels will support. e.g. py34 supports py34+ + // The py3x version listed here corresponds to the minimum ABI version + // the wheels will support. e.g. py34 supports py34+ versions: ['py27', 'py34'], ], [ label: 'docker', imageName: 'pyca/cryptography-manylinux1:i686', - # The py3x version listed here corresponds to the minimum ABI version - # the wheels will support. e.g. cp34-cp34m supports py34+ + // The py3x version listed here corresponds to the minimum ABI version + // the wheels will support. e.g. cp34-cp34m supports py34+ versions: [ 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', ], @@ -32,8 +32,8 @@ def configs = [ [ label: 'docker', imageName: 'pyca/cryptography-manylinux1:x86_64', - # The py3x version listed here corresponds to the minimum ABI version - # the wheels will support. e.g. cp34-cp34m supports py34+ + // The py3x version listed here corresponds to the minimum ABI version + // the wheels will support. e.g. cp34-cp34m supports py34+ versions: [ 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', ], @@ -113,9 +113,9 @@ def build(version, label, imageName) { pip download cryptography==$BUILD_VERSION --no-binary cryptography --no-deps tar zxf cryptography* pushd cryptography* - REGEX="cp3([0-9])*" - if [[ "${version}" =~ $REGEX ]]; then - PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" + REGEX="py3([0-9])*" + if [[ "${version}" =~ \$REGEX ]]; then + PY_LIMITED_API="--py-limited-api=cp3\${BASH_REMATCH[1]}" fi CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ @@ -149,8 +149,8 @@ def build(version, label, imageName) { pushd cryptography* REGEX="cp3([0-9])*" - if [[ "${version}" =~ $REGEX ]]; then - PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" + if [[ "${version}" =~ \$REGEX ]]; then + PY_LIMITED_API="--py-limited-api=cp3\${BASH_REMATCH[1]}" fi LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ From cd6cf4aa7567ec7e870c19eeb5c200d8bf133ed9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 18 Mar 2018 22:06:13 -0400 Subject: [PATCH 191/988] implement AES KW with padding (RFC 5649) (#3880) * implement AES KW with padding (RFC 5649) fixes #3791 * oops, 2.2 * make sure this is the right valueerror * more match * make key padding easier to read * review feedback * review feedback --- CHANGELOG.rst | 5 ++ docs/hazmat/primitives/keywrap.rst | 39 +++++++++++ src/cryptography/hazmat/primitives/keywrap.py | 57 ++++++++++++++++ tests/hazmat/primitives/test_keywrap.py | 65 +++++++++++++++++++ 4 files changed, 166 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2f8924fd0003..912a368fc0da 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,6 +18,11 @@ Changelog :meth:`~cryptography.fernet.MultiFernet.rotate`. * Fixed a memory leak in :func:`~cryptography.hazmat.primitives.asymmetric.ec.derive_private_key`. +* Added support for AES key wrapping with padding via + :func:`~cryptography.hazmat.primitives.keywrap.aes_key_wrap_with_padding` + and + :func:`~cryptography.hazmat.primitives.keywrap.aes_key_unwrap_with_padding` + . .. _v2-1-4: diff --git a/docs/hazmat/primitives/keywrap.rst b/docs/hazmat/primitives/keywrap.rst index 95cae8d795f2..1c15f9d19475 100644 --- a/docs/hazmat/primitives/keywrap.rst +++ b/docs/hazmat/primitives/keywrap.rst @@ -50,6 +50,45 @@ protections offered by key wrapping are also offered by using authenticated :raises cryptography.hazmat.primitives.keywrap.InvalidUnwrap: This is raised if the key is not successfully unwrapped. +.. function:: aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend) + + .. versionadded:: 2.2 + + This function performs AES key wrap with padding as specified in + :rfc:`5649`. + + :param bytes wrapping_key: The wrapping key. + + :param bytes key_to_wrap: The key to wrap. + + :param backend: A + :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` + instance that supports + :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. + + :return bytes: The wrapped key as bytes. + +.. function:: aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend) + + .. versionadded:: 2.2 + + This function performs AES key unwrap with padding as specified in + :rfc:`5649`. + + :param bytes wrapping_key: The wrapping key. + + :param bytes wrapped_key: The wrapped key. + + :param backend: A + :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` + instance that supports + :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. + + :return bytes: The unwrapped key as bytes. + + :raises cryptography.hazmat.primitives.keywrap.InvalidUnwrap: This is + raised if the key is not successfully unwrapped. + Exceptions ~~~~~~~~~~ diff --git a/src/cryptography/hazmat/primitives/keywrap.py b/src/cryptography/hazmat/primitives/keywrap.py index 702a69328e9e..3b5313189c89 100644 --- a/src/cryptography/hazmat/primitives/keywrap.py +++ b/src/cryptography/hazmat/primitives/keywrap.py @@ -68,6 +68,63 @@ def _unwrap_core(wrapping_key, a, r, backend): return a, r +def aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend): + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + aiv = b"\xA6\x59\x59\xA6" + struct.pack(">i", len(key_to_wrap)) + # pad the key to wrap if necessary + pad = (8 - (len(key_to_wrap) % 8)) % 8 + key_to_wrap = key_to_wrap + b"\x00" * pad + if len(key_to_wrap) == 8: + # RFC 5649 - 4.1 - exactly 8 octets after padding + encryptor = Cipher(AES(wrapping_key), ECB(), backend).encryptor() + b = encryptor.update(aiv + key_to_wrap) + assert encryptor.finalize() == b"" + return b + else: + r = [key_to_wrap[i:i + 8] for i in range(0, len(key_to_wrap), 8)] + return _wrap_core(wrapping_key, aiv, r, backend) + + +def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): + if len(wrapped_key) < 16: + raise ValueError("Must be at least 16 bytes") + + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + if len(wrapped_key) == 16: + # RFC 5649 - 4.2 - exactly two 64-bit blocks + decryptor = Cipher(AES(wrapping_key), ECB(), backend).decryptor() + b = decryptor.update(wrapped_key) + assert decryptor.finalize() == b"" + a = b[:8] + data = b[8:] + n = 1 + else: + r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)] + encrypted_aiv = r.pop(0) + n = len(r) + a, r = _unwrap_core(wrapping_key, encrypted_aiv, r, backend) + data = b"".join(r) + + # 1) Check that MSB(32,A) = A65959A6. + # 2) Check that 8*(n-1) < LSB(32,A) <= 8*n. If so, let + # MLI = LSB(32,A). + # 3) Let b = (8*n)-MLI, and then check that the rightmost b octets of + # the output data are zero. + (mli,) = struct.unpack(">I", a[4:]) + b = (8 * n) - mli + if ( + not bytes_eq(a[:4], b"\xa6\x59\x59\xa6") or not + 8 * (n - 1) < mli <= 8 * n or not bytes_eq(data[-b:], b"\x00" * b) + ): + raise InvalidUnwrap() + + return data[:-b] + + def aes_key_unwrap(wrapping_key, wrapped_key, backend): if len(wrapped_key) < 24: raise ValueError("Must be at least 24 bytes") diff --git a/tests/hazmat/primitives/test_keywrap.py b/tests/hazmat/primitives/test_keywrap.py index f41baedb8403..8311c2a4c4de 100644 --- a/tests/hazmat/primitives/test_keywrap.py +++ b/tests/hazmat/primitives/test_keywrap.py @@ -114,3 +114,68 @@ def test_unwrap_invalid_wrapped_key_length(self, backend): # Keys to unwrap must be a multiple of 8 bytes with pytest.raises(ValueError): keywrap.aes_key_unwrap(b"sixteen_byte_key", b"\x00" * 27, backend) + + +@pytest.mark.supported( + only_if=lambda backend: backend.cipher_supported( + algorithms.AES(b"\x00" * 16), modes.ECB() + ), + skip_message="Does not support AES key wrap (RFC 5649) because AES-ECB" + " is unsupported", +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +class TestAESKeyWrapWithPadding(object): + @pytest.mark.parametrize( + "params", + _load_all_params( + os.path.join("keywrap", "kwtestvectors"), + ["KWP_AE_128.txt", "KWP_AE_192.txt", "KWP_AE_256.txt"], + load_nist_vectors + ) + ) + def test_wrap(self, backend, params): + wrapping_key = binascii.unhexlify(params["k"]) + key_to_wrap = binascii.unhexlify(params["p"]) + wrapped_key = keywrap.aes_key_wrap_with_padding( + wrapping_key, key_to_wrap, backend + ) + assert params["c"] == binascii.hexlify(wrapped_key) + + @pytest.mark.parametrize( + "params", + _load_all_params( + os.path.join("keywrap", "kwtestvectors"), + ["KWP_AD_128.txt", "KWP_AD_192.txt", "KWP_AD_256.txt"], + load_nist_vectors + ) + ) + def test_unwrap(self, backend, params): + wrapping_key = binascii.unhexlify(params["k"]) + wrapped_key = binascii.unhexlify(params["c"]) + if params.get("fail") is True: + with pytest.raises(keywrap.InvalidUnwrap): + keywrap.aes_key_unwrap_with_padding( + wrapping_key, wrapped_key, backend + ) + else: + unwrapped_key = keywrap.aes_key_unwrap_with_padding( + wrapping_key, wrapped_key, backend + ) + assert params["p"] == binascii.hexlify(unwrapped_key) + + def test_unwrap_invalid_wrapped_key_length(self, backend): + # Keys to unwrap must be at least 16 bytes + with pytest.raises(ValueError, match='Must be at least 16 bytes'): + keywrap.aes_key_unwrap_with_padding( + b"sixteen_byte_key", b"\x00" * 15, backend + ) + + def test_wrap_invalid_key_length(self, backend): + with pytest.raises(ValueError, match='must be a valid AES key length'): + keywrap.aes_key_wrap_with_padding(b"badkey", b"\x00", backend) + + def test_unwrap_invalid_key_length(self, backend): + with pytest.raises(ValueError, match='must be a valid AES key length'): + keywrap.aes_key_unwrap_with_padding( + b"badkey", b"\x00" * 16, backend + ) From 4601fbab9552b0fc938ae3864e9c14e4476231c0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 18 Mar 2018 22:45:30 -0400 Subject: [PATCH 192/988] 2.2 release! (#4150) * 2.2 release! * also change versions --- CHANGELOG.rst | 7 +++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 912a368fc0da..84f3dbc5fadc 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-2: -2.2 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.2 - 2018-03-19 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Support for Python 2.6 has been dropped. * Resolved a bug in ``HKDF`` that incorrectly constrained output size. @@ -23,6 +21,7 @@ Changelog and :func:`~cryptography.hazmat.primitives.keywrap.aes_key_unwrap_with_padding` . +* Allow loading DSA keys with 224 bit ``q``. .. _v2-1-4: diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index ee16ac8ddfb2..53d31c22fe20 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.2.dev1" +__version__ = "2.2" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 466a01675cba..70cca3536c48 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.2.dev1" +__version__ = "2.2" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From b6400af03f50a57f1d2393a4f56ab285fa687e93 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 18 Mar 2018 23:30:18 -0400 Subject: [PATCH 193/988] open master for 2.3 (#4151) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 84f3dbc5fadc..d36991acb068 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v2-3: + +2.3 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-2: 2.2 - 2018-03-19 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 53d31c22fe20..b198409d34dd 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.2" +__version__ = "2.3.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 70cca3536c48..d15f1abaf4bf 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.2" +__version__ = "2.3.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 9b4423b254d0c4b1e5eba25d1188ebaaf8a863b5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 20 Mar 2018 12:14:59 -0400 Subject: [PATCH 194/988] add botan's AESKWP vectors reformatted for our NIST loader (#4159) --- docs/development/test-vectors.rst | 2 + .../keywrap/kwp_botan.txt | 650 ++++++++++++++++++ 2 files changed, 652 insertions(+) create mode 100644 vectors/cryptography_vectors/keywrap/kwp_botan.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index fcafe0f20d1b..2eb47493b0f6 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -428,6 +428,7 @@ Key wrapping ~~~~~~~~~~~~ * AES key wrap (AESKW) and 3DES key wrap test vectors from `NIST CAVP`_. +* AES key wrap with padding vectors from `Botan's key wrap vectors`_. Recipes ~~~~~~~ @@ -541,3 +542,4 @@ header format (substituting the correct information): .. _`unknown signature OID`: https://bugzilla.mozilla.org/show_bug.cgi?id=405966 .. _`botan`: https://github.com/randombit/botan/blob/57789bdfc55061002b2727d0b32587612829a37c/src/tests/data/pubkey/dh.vec .. _`DHKE`: https://sandilands.info/sgordon/diffie-hellman-secret-key-exchange-with-openssl +.. _`Botan's key wrap vectors`: https://github.com/randombit/botan/blob/737f33c09a18500e044dca3e2ae13bd2c08bafdd/src/tests/data/keywrap/nist_key_wrap.vec diff --git a/vectors/cryptography_vectors/keywrap/kwp_botan.txt b/vectors/cryptography_vectors/keywrap/kwp_botan.txt new file mode 100644 index 000000000000..f5ba245e3479 --- /dev/null +++ b/vectors/cryptography_vectors/keywrap/kwp_botan.txt @@ -0,0 +1,650 @@ +[KWP] + +# From RFC 5649 + +COUNT = 0 +Key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8 +Input = c37b7e6492584340bed12207808941155068f738 +Output = 138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a + +COUNT = 1 +Key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8 +Input = 466f7250617369 +Output = afbeb0f07dfbf5419200f2ccb50bb24f + +# Following values generated by OpenSSL + +COUNT = 2 +Key = 00000000000000000000000000000000 +Input = 00 +Output = A9D2D4394815D53F2799ABD7E51D2C8B + +COUNT = 3 +Key = 00000000000000000000000000000000 +Input = 0001 +Output = 36D0CA197F638BF478D022C7E543B699 + +COUNT = 4 +Key = 00000000000000000000000000000000 +Input = 000102 +Output = DAB4EE2853E1C44C5E553E644143902B + +COUNT = 5 +Key = 00000000000000000000000000000000 +Input = 00010203 +Output = 446C037F831092B147C372616357BF7D + +COUNT = 6 +Key = 00000000000000000000000000000000 +Input = 0001020304 +Output = 9ED0AF6457B82E0DDADBD2240A303D74 + +COUNT = 7 +Key = 00000000000000000000000000000000 +Input = 000102030405 +Output = D863A8CE0DF301A564945259B4F74E7D + +COUNT = 8 +Key = 00000000000000000000000000000000 +Input = 00010203040506 +Output = E8387E5456242B0C30BE77FC1FF0C1FD + +COUNT = 9 +Key = 00000000000000000000000000000000 +Input = 0001020304050607 +Output = 01FF4C430CDF3D2D815B0972B23D7C35 + +COUNT = 10 +Key = 00000000000000000000000000000000 +Input = 000102030405060708 +Output = C06E2163E0CC845B348E012AC9413DEEE40C8C3B030A3681 + +COUNT = 11 +Key = 00000000000000000000000000000000 +Input = 00010203040506070809 +Output = 3DFD2F643C38B07E121C77C2CA0EF82DA742B0989B6D848E + +COUNT = 12 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A +Output = AFAEF390634E21E754FD09F55A4EDD918A1D23ECA9B76F2B + +COUNT = 13 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B +Output = A42D14C830F64F0A73570BFA7FDF8DDDD5E3AD3065A09FB0 + +COUNT = 14 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C +Output = 83F23527625FC643942279D090C1B61D10FC978B54D778CD + +COUNT = 15 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D +Output = E073C30E0DAC595F9FD28A0CB9E53945B26D1E1DE4E66D04 + +COUNT = 16 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E +Output = 64E3C2F7E0F7CB297C6B8C4CAF665F9F0A3F7082D2522635 + +COUNT = 17 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F +Output = 8F5982C7D265A0A40FC81D2326429A0A65BCD1368F0E16CB + +COUNT = 18 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F10 +Output = E29EC6664BCBA00986DD9845F8C4B26472BFDDF98522E537B5D23D5D2A8D02C5 + +COUNT = 19 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F1011 +Output = 9451ABCA0B9756A183F8C9ADA834E1AD2400B693C33624E59F26C35AC1586E2B + +COUNT = 20 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112 +Output = F03CB49A65FD3EF8FC83C52F029A3D73667D5B84DB429C38436619ED8320D12E + +COUNT = 21 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F10111213 +Output = 759524B855037849812D62979A18F24D3E672C2663DEA9204BA5A639FB7DB292 + +COUNT = 22 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F1011121314 +Output = F352B8228FBFA0769C2E3858D7451FA603E9B751CFE780ED0F93C850C7870259 + +COUNT = 23 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415 +Output = 3491F4C8D916A1BC3824D1478EC746BE8C837415017ED52A1ABC30FB14DDE825 + +COUNT = 24 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F10111213141516 +Output = 0E6E35C5B9D706C2FF2C4C6CFCF254849879D6C1CB577E0A73BB12CBC7AC9740 + +COUNT = 25 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F1011121314151617 +Output = E7DB580663B113B57489E1107F2DCAF7CF80629E7CE1839E1ED044ECD0299E79 + +COUNT = 26 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718 +Output = 883500DB91747BAD8C5E122ED2338F3BCB6B43064F5DA9D1303E165815EC8CC4C5BFD31AEAE1B6A3 + +COUNT = 27 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F10111213141516171819 +Output = 24099AAAD4F19BF614ECC35DA9E3646F73AAFAA9C46975D4B56D72A332AF7EC4850B8294D94B7E1A + +COUNT = 28 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A +Output = C24F8CCE3425AC9638145A0DAC28B59368583FF3A7AAD85FBE1AEAAB5D23C0B128A1F9BC575B785A + +COUNT = 29 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B +Output = EFD0BC7612331A98F2D68F86E606717197BF57E35114234C675D40E9462ACF00DE7860C0F38677F7 + +COUNT = 30 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C +Output = 89171C602A315AD27EE1C7F903DCD08F48FF02D97EC59A079E9180B26F17BB010D8E56B3CDBF9006 + +COUNT = 31 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D +Output = 0AC1B4937C438DDE64E6733A70D3F1BF99393B2A3E6B42ABBCE6A8ECBB1F0665DCDC62530739E8FD + +COUNT = 32 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E +Output = 3A4553B4613F602B0BFC11609616744CC99CAD4B1CA1FFC6568DF20FD2DC0B020CFC1E6ABD2820D4 + +COUNT = 33 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F +Output = 353B0F55E3569A4F11AC5434F94D9C4ADFAC2E289F98B6564FB7DF0EC116E77493C176868DBA1F6C + +COUNT = 34 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20 +Output = B42ECF577992FFE257548A1BD920E8A2648EED647675B407A0E730C658AB3E917C284A6C4DF847E4D783A3BC614A2630 + +COUNT = 35 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021 +Output = 06D4BA477CD212C49B78C00D231FCCF7DAAE65742D889EE6C828D87D3C604EF3A14A95DE45EC537B7AC83B78C1CCACA3 + +COUNT = 36 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122 +Output = B056D034313D327E2A39E0930C0E43D79CA0A28F3323CD70AB19B381A0D71BB1AF7AB177B0D66B8DBE32178714917A7D + +COUNT = 37 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223 +Output = DE3AD3A933A842B574767B7C6A7FB28F442EA3C94DF7BB81C38F392CFEB8B313E999E3A8248204499A051CE50EDEC5AA + +COUNT = 38 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 +Output = 3F6EB078FAF08FA5D3BE87EE047CF1ECBAE7FC70753DB67EB63B0A073E73847AD200BD241C91CB87BED689CF8F75C93B + +COUNT = 39 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425 +Output = 445C7209CD605AAEF330EA0C5A6469728AD6B10C510F0CC59DDF26927E11FC5F2D0DC1375541A1F55BAF356D7EE53500 + +COUNT = 40 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223242526 +Output = 122A43F6FCF53F48127FB59F3F9CE1C6621F6B6342569908796AE1CF6E5F27BEA025E35ADDBC3B055DD365AB61485905 + +COUNT = 41 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +Output = EAA9E4B5B6372DE37C283D751F0376E4BEAAED1F98FE31DA171910D66CF839AB8FE11AB892806F04AE4E217847802FD1 + +COUNT = 42 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728 +Output = 8DABB66ADB361581E5D68EF8A17A09D74A685F7507298362103F5853F9475F21434019F2E92485DA19D2B11F75CF90734231C1421290975C + +COUNT = 43 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223242526272829 +Output = FC8D65BBCB5912874DF58EA60DD63D0E16951C10B05AC069A9764A11276D6AB8C968DA01674F230376F8FE6BEA8473A14D3C79EAEC52E003 + +COUNT = 44 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A +Output = 603C4F13DB9F651AC3DD6A3AC6CE056BE605C6D72E708A8424C451BD2C24F63352FA2BB693947689D2626CF273762E5FAEE361D793AF819F + +COUNT = 45 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B +Output = CA10E89057844F6E968DC6A75125621FB6FA779D3D1773ED99891694B19D28B9C9B234EC7135A585AFFDBFA85E813EE54A22938D2B89FCD1 + +COUNT = 46 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C +Output = 6C64643E7386B22E2D0BDDE6E812DCAC90F3417D933E057725BDCA8253EF1868AC7152DE08668515DD136E476B00BDFA2F5DEEE0FA23D42D + +COUNT = 47 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D +Output = 2FB135455B08C6EF5C7E835F09DC55078B3BF0B79C72308A25F5437DAD770A59D4E63EFBBA77E7C6A6316005E35082DDE15FD616A3EACEC1 + +COUNT = 48 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +Output = EFDB7BC1EC888B698FA3190BDA302D68E4C854CE38E67790CF661BBC394AB2113BDE3AE202259490253B08FC7BDA36DF0C8DF62E0BBD3AEC + +COUNT = 49 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F +Output = 6FB04EFCAE2CDC3B46A8A9C9834A28B1437C2E755BC594460E0621B46BBE0F5D4BBE181502EC9142F71A4A5B0871EE62E8BD5DF4BAF87357 + +COUNT = 50 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30 +Output = F0410A66EE0E4B9913243184284A7473B5E80E59149F23D2F85D5C58329678ADD62EF6038E1153B61772E3F5A7D2E2A65066663FE3B30D3F6D79F0EACBFFB307 + +COUNT = 51 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031 +Output = 9EA24A531B21B1D12AA0EF0CD620E46CCF557142ABC2DA7601C6D9C597D16C0CAD842ED4C791EEAAE9AC06AD66B58A44ACA0989B4ED09D9B1D1C07FF705E775C + +COUNT = 52 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132 +Output = A3946C7481A0439B552DAAC3C804A9F9909CD5DAF5D5EC3EDA0D31AE5D99B541FB4D487C7588A786143E36002050C5F8E2DF0864708296F7CA1178588D252D66 + +COUNT = 53 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233 +Output = 3389BE82398B80DC86C88B506654437B51528119C26BCDF1F3A6470DF96B5A89D012B7ED0E58508BD244622E3AD919E22A2DB902A53336CF69ACD362194EF788 + +COUNT = 54 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323334 +Output = 2E206446A99B6F07DB75253AEB0ACA89CE55811509AA969BFE2952720FE1BD8CE840C2FE6E3E48E730B7B9856AC28D2941EADBC39F829567EECF8EE70A9FEA20 + +COUNT = 55 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435 +Output = EB6ECD5B0DEAEB3D61B9DF8581202E272591BF19F3EE052FAA217C5CD96AE15882ECD934D1CF15F2CD5CAD48E46DF1B889C756834FC9067B4BBCE71EF7FBE2CE + +COUNT = 56 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233343536 +Output = 09EA967289A07CD184AB68484799B58A1AD4E47DD0FC1612480695F0CEA62A019D7DB9184DCBA2FA871B8D7F0A21B07DDB1D79A9912C4278A6C10517D6FE7607 + +COUNT = 57 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323334353637 +Output = B7B16D760E94318547FDCED193613311BB4C228544EB0D0026A3BFF85440411CECED8E9B72B2B088446E792058C5BEDEEAE42B622C97E7305DB06F49C06DBEEF + +COUNT = 58 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738 +Output = D90841D6B936480461BF2D77FCC3FADF20177A3707FE0A47153271F05BEE51AF1D5B9EC466B1B43A45DC8E439924B6CE3BFD28EA33337036713FEFA82164986696ED78F14E9C3965 + +COUNT = 59 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233343536373839 +Output = 1EF61764EEF8B3A532C0CD60D01078719EA74AF30DCAE28A7508A30CB3EFE4352C315DD68C329C967975A8344C99D3234A056040860390416B387DC263396F7EFDEF5A5B92A6C4AD + +COUNT = 60 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A +Output = A591BB3882464EDC11416ECA7995B7488EA8F1B89AFFCDE6FCDDDE60FDD45F51BB238A9503C7AACF750D8024F5B1DD39655558958585BDC842D07A34C35BB04719CC784212DED785 + +COUNT = 61 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B +Output = DCB4F791FB0C1867D90AF107256020B66E8ED09B898E626CCDCD55F5503774CADDC3B84E87A91E3CE749EC35A47E25F0C19B9C4C7D9705EA36EDF0D748471849AD61A8769685B2D7 + +COUNT = 62 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C +Output = 0AA8C1E34B37FDC58A1A9934BD14B523F20B6AB32F3AAC273E625081015A6E8CE95C891F522AFE87E580AB393CB8942E24DBE812DF74DB93029744184D144692701188BFFEB6E141 + +COUNT = 63 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D +Output = 9EEC100B358284F4E24AEECD3F3A87ACF45A67FB9FA46D5F77BC4F7272E544B2D7329A56AEAFBC668FABA50D73A37B00300DE3186AAD77949E28C12A04B65192225A9ED929FCF5E1 + +COUNT = 64 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E +Output = E5D51A1C59E955797CD79E962851315E788A72AFC17B003963A64D4713EF93D370129780ECACD566A9DE9AF289ECDF46FDA257D73658383C0C052EB9C70D034E29209568BF144D72 + +COUNT = 65 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F +Output = 3199D2B70CE5CDC5DD62F0CB48B1DE3EF07C836C49975841C7B972E661899A1CDA28253BCA33FEB3697C434CECF3EC76D979A3DFC3D862E22758A6B2468752249D2AA0B30EA2A447 + +COUNT = 66 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F40 +Output = C1C6E77BF5D31BC960ED2045165DB2D6A73283B5511121055773EF2A241E7FD0CE61A71F11CA6488C73945970CB684F5E009CC86A1D3EB0BA5F294ABEE29B3D4424005F21E096EDF105088BF69908455 + +COUNT = 67 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F4041 +Output = 59C0B44AF3C63A77E8010B03463C261C03960B4BD0F1AEE7EB0EC2D0E7EBDD08E28FB8C41F24DD4FFC3EEA78C5800714CB4A963A9489E8017362BE33AEB2CF6D9231AE39641A2760E9E5265780FAC82A + +COUNT = 68 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142 +Output = 72F38DBAE62DF7CB17D0E1BAF464224BC54A1C49D10FCAA70877F40B429384C8BEFC18EDBD9A65713A984151F97C3B0F2FA4D6127AE4FC8BED3DBD3A7073CBA8F174284DECE60D1556F8E5957D7881BC + +COUNT = 69 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F40414243 +Output = 1EADC50143A9A33DF1901C1BE115B9EE408561B03A7D0BACA7EE2698FA16485699BBC0D1C8BC74D87ADABB50CBB87976965CB01CFBA67035DC3189E98550B0C3902E1271313C81265F4521A732451E7B + +COUNT = 70 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F4041424344 +Output = 4182301DA5BE6417C384943AFFF69A8B80AA7B2DECB55C1A9C29328B8CD16BC9540DB5B5FA751CE1B217E66E51E7168D269DCDB3E6130929DCB5E1741B31E439FC87D2AD81556E1E788BE8F0B370323A + +COUNT = 71 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445 +Output = CD07B672EF635F47FD386FA62A8879FC304C8C2454CFAEAD21FB47FE30E4A4EC4ADD7C1EAB44D261B5DC18FB4EFFCDC56074D7B395E6559E9D5280B523E84A99862AD0BFE66D6980D0F59C56FC229773 + +COUNT = 72 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F40414243444546 +Output = 69DBA0FB08140943E3FE98E4178646C6CC0B1B44585187CC1688AF21A140CB4BCFA8D370EBC00B612C21FF95FC32FDB3D089BC2F5812139864500D30D8F25D2DCA579439542906CF0C1AFB424A7A2D95 + +COUNT = 73 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F4041424344454647 +Output = E852B1E41E680E45CA8428DDE1A4B4D77C620E6F4EB4EB757C69BBB44EB66EE09F5EE6271F6933253C3D2BA20CDA9C5F22E7445DFFE598790C6BF1E3DB70A2B42707CB8CA0A0D28CD3ED32DFD1E1227E + +COUNT = 74 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 +Output = 5FD7FE77D721DA369BA9CFEB4548AF21518A088DF3951960A6ECA5CD52FFF0A5A89E3A0BD6609C7B40230E31173898A82B685F40E001A67D1F4B8619C6E537A9E03D8D620BF8086CE2F6A81322A6026C1A6585CC12D41D58 + +COUNT = 75 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F40414243444546474849 +Output = 775509D94509D50839D8D4BCA6624F1DFC873CEC61EAF254DDC5BEDE233026E10625D7D5CF8BEB1C8518829E659F816FF1BE2D029390FE57FCEEBE1E3208C0D250C1F966C8E3FF27A4964E250AB7D732FF670B0E54EA4676 + +COUNT = 76 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A +Output = 862892008B4E499C6C6635CE7BA728DD25A6A83C043B66B6B5CE36028B72D3245F5B84BF22D7415BCE41F21D2104A43EBDBEEBD8D138AC4D15E32AD27A7FA88B91AEDFC382194ED728F09738B24F5413A74C0E0B13B4277F + +COUNT = 77 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B +Output = 8F4F512116100D0ED926D1645ABFE94E00D126F0E9429A00CA69E8CCA1C8E70A7F4DF6F9B0AE1CBCB40BE2B05086B4A6F1B101E65187C71B91401B49AF313A593EF01B96855DB1ACDFD809D60DA8B1A682543D7F6AD6C337 + +COUNT = 78 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C +Output = F9DD0B7980B4114126972D2ED6208E3FDD95B2A767C4050C16063E7433E3085C148221376F5209FD6AACC359653D2ED254A987C35F1D440F00A39E2B14A8D8DD11ACBBD635C0A76B6628A63B12183F2138A0DA32C074AA82 + +COUNT = 79 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D +Output = 863710066B206EBF4035E0B8413D6A94872766EE52155624E9719A16769A975A5EF0595F3816B7993BAF035AE10D205DA4DEC0EE3AF5210582DFA063D347565B332ADF99459BB718928478F334F249B4B38FF8F7B2D2E813 + +COUNT = 80 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E +Output = 6E1C71E71669D7CCC469DBA5342B6C14192A0E25A086352A3DD4558A12E1C348FDB1923C31C63F560C08F963B50D4BE52C21989B7A6D83AA14CA8A6089124734734AC4CF4F4C6AC2721D76BCB811F91507E975E4058F1FAF + +COUNT = 81 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +Output = 518BF14BE0D60D53D184D05068C0795E6AB1846949937546886552F23581A4A934DB2496731E93BDCFD43A78343FBEFDBC8A8B55D5E1A94AD03EEF07BFD32CEECA1A8816BEE47B846E4A368A30D64C10B993CC041EA69073 + +COUNT = 82 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50 +Output = B1BC96690224BEAF3F51EE319CE697E8DAF7A666B676239F7C32B7FFE63040F601B8EDEF54D90B243A39C9CD56CDD3AC14CBE89F45D5958798F7DAB6B6F2092FC38F1D5BDA51F06ED67B75AF2587015B1AD21C10C63ACBFB0707D5CC651F8458 + +COUNT = 83 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +Output = 649D67FEF0AE7432B793DE16B3C27598088E87DFD1A4CDA952703412B3828DBA04F9188FD823C03F6221DDBAD16C3728D40FFA2FD88DB52964E556B28D5CE532A52DAC53C7C3258FF2EE12CE901825372A01DCFCAA07C0B55773532838D9CDF0 + +COUNT = 84 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152 +Output = 997555B6E7CBDF2D1A010AA7865CA84781A2FA2C4F32762D234A0895BC62004B6BDEE39953B6236B0889147398A8BFDD609D92531325E4B7926DA0B06CD9026B032A929F6172DDCB99C6D42D35F9FC94D6C3ADAF0522D5F3D05217405645FB16 + +COUNT = 85 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253 +Output = 7B8582D74051A6DB1B7483D26E0612B86E55ED0CBB7BA88A676049F6DE0EF4C9C4D719B66DECF1A5E6F23653B705E6BF9BDBF423F905944E51D65D1DC792A2D3554B4C427E9CA40B4C406AAF58ED611109F97DE8B05B1ACA8F9C76118F2AA925 + +COUNT = 86 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051525354 +Output = BA9D1128654C32AC040C7B8460774CADB9E38D9EA07D034FA83516D9E06802FB55F5872C16EF5695EAF6C6A9DAEEE83748793843F213C54A778D4524C72C5ADF5F02801FB2F6C2FC9EC4B8299A42BC33BEA4C7DDEB6A5CF492F4F757ED9A3A86 + +COUNT = 87 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455 +Output = DBEB24A8A1198084F973517C8457DB028ED6DB5D1E3D97AE75F1E33EF7D63148DD60AF68F6378E04CE46D6B466C46F4089AA94C36FB0BE591E8D41547A55534E3B004CE4AABE1890B258317EEA581682D9DA7891B2A3AD5186E579B7403A6910 + +COUNT = 88 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +Output = 9325A7B4B743ADBDEB4F8E9BF92672CBD3E6D29AED20B24415B8D8ADFF2C7652573401BBF7C45386AC6D93F70BFCFF2351489EFDA6720EB9C1BAADFE1D52CED1D0754B5F00EDC1CD8AE4654EB2E0215FC694E64B32A09CF7DA0FCCE5875E0A90 + +COUNT = 89 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051525354555657 +Output = D3CB65301588CB2820595CE0C0BA899E5A530A4BEEB29DAAB1D26BBAFE35A0A010E3D17A7BF87B3910465FCDA89BDF4EF564A4D801F31878A56625BCA8F55C2EE3ECDB754060DEADCFDDB8F9D11FBD6B7D2B44F6B016C350D04666584C1547CE + +COUNT = 90 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758 +Output = 2DD836C8BDE95C111E549F7199096ADB2F7452E6986B8E736BD89EC01ABA1E8EC2DE7FD9F65FEFD42E5C572C61C5308CA673CD24C499037D8B7A33A35277526E83719D205E3DB0E79815D322D6A14388661D5B6A31D831AC76593D27944539C1FCC5440E0E42E53B + +COUNT = 91 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556575859 +Output = DDB5299481F0419C5672D08DD6AFD92781D05095A9CB9F5F978A892D77615ED7ADF00B9A4B038E450EAF3BC12A38567E3A7732DA9DFFA6B18B341EBA79299C5855138B70DA6E5D3D859F510ECA7F9E0921E433C8814C5B07BEFEB48301A4F3945D7AC995DDDC529F + +COUNT = 92 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A +Output = 4DB58952C398ED8D77C3B4E3677E4E2A282CA36C30B0590765061A2D849884738EE94521B3DEAC18CA8908C6BA8198ED8879BB7EA1B09E06E3770C2F92F1AFCE547DC30F761E568F496D5569FA9540D721F273B789919F3FA0BB10AF07D4C540DBEB8BDF2F939917 + +COUNT = 93 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B +Output = BB64F4A30DB269B6EC84E406E5C4706EEEA94370AD65736BEBDD945F5FD3AA85C22D74B47EC086093AEBFBF7A1E671ECA57A3E055AEB0C4B622B81A38EC6C3A1B5341E176AA8ABE20170C5A2B4CAAAF83E55DBC6B4E12339A53C116016EC806432E8198786EB4F4F + +COUNT = 94 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C +Output = C293A47B576F6FCFC00A6E46D0C3BECAA9B2EAE0C043980AA45C87A8CF26472A6925F0EC62F18FC782D69FC9CDE34B8385E6EF343B7BC9BFBD5C6D9FFDF5E49649984C1E8D4238D5F15E75D928610E02BD590F5247EF85486BF327E59D2078E002C9207EF714E705 + +COUNT = 95 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D +Output = 3D4522574E9F3E495ADF7154555128FF59252FB5BB992568E3E9D7D22D9FAA288DB70C931CBFC5A2DA5FB89AF6BEBB0B703101E885677E885D8AA921E05689615E98A00182CF683BB36F2CF29A7C7432CA389587B6AB0AEE4165DDD3988A84B207F5FF22E12319FC + +COUNT = 96 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E +Output = ADC07AD97AF4791C34CDCA604E787EF8519B1E82B69FA76F8BD561ADD476AD5C5ED35E9E2D4E5A8F69DBD5A4AF7F3B7C1C719F153BDF740B7C93C104FA44E9A695BF1AAFF7EA153A12CA7C2F7F09E7FF82D9934585347D2821D6D881AF14BFD4A596D2A5175E992D + +COUNT = 97 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F +Output = E3A87C98F63177B4AEBCD213BB5599EE5691FD97A642D5F952DDF6DA711E3CFE64A8C04F348FEF20CDA5310DAD3214F0205749EF8AAC76C46CC9699C86EFEC02678DA53C6B1F2B72FC3FA3A8F6BA9B73E23E351F924831E8D7FBA13F9124CCC03D0383C092656027 + +COUNT = 98 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60 +Output = 1FD0A6C2E7496670A1FC367BBADAF2F1662E99837DBE2D65D8FE395B195CCBC07B34E843277562E13F908889D727EFCC45C13B90F87E7E6F4E4C8B2A51D4E085D221CE31B9E6EF1DDC68E832F510CD25B3043908A45C3E13F303C25491CCF3684D4E61FC1B2A0C5AF84A1CDE26CCD430 + +COUNT = 99 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F6061 +Output = 50E0D46EF0669E88808EB80B40B7E7A5BC93A4AE5DCE984BF3F6B8578441DF3236B8E9EA832B17F31E35105B0C3E66268D5749D9120C7D44655C8B318329FC41282BD3E776F0349138CD4B0ECCEB19D9F81BB5C095E8E115D6CC1438CA87922B2B40BCA4C84E501769066EF392B37DC0 + +COUNT = 100 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162 +Output = 1B69450C2540AA9FAACF0620A1F17565FE19D5C9150F4669E0B0D4B653FBA06DCF2291F9DB3B0BA9A9C00DAC7183AD9C4E0193F941C9451B2B9F80A89A4269525EFBE65D378AE2214EC3494A1A3029A0DE632C293ADEAD59AF250AC5604FCE40729BA7AE11407AB45382DB4A70F7B409 + +COUNT = 101 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263 +Output = 4AB48AAF9B1A82C1A41DEF775C4FDBB2AFA918B12607F8A27B91CEADA784DBEA27D3A427AC44436B9377632FCD0AD89D61F090C98A4055811ABE99D24137BBDDEBC8AA6D9781871CDDFBF35868E22FF7FB2167E6B08931C4BD8992DE6EB9A050D58DF8747550136BE664A9E5D410E90B + +COUNT = 102 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F6061626364 +Output = 9F3DBCF9DF717D45E73B834ED3C82D3DA01CCC566F8DD7CBC1946383660C1CD7748C9CB8E8C50D11D94E9B4F2BEAE2DE8AFED2864F6601FA479A77359BB77493C2DDC2D7F1480882DB03140E716765A6A0483C53557609EE9D378EC53A9901B7ABF08B088B77B8F4729C81965E8C777C + +COUNT = 103 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465 +Output = 00D45FE14E3D338187B9119EE7672BC31425BB5983CED91A7F417A0A449D5A813EDC86ACE59A09654D1F3BC05A9E32DA138E8D1D206F58468291DE5943DB9133C5E47BA79E0BC665E839E01000C4317260E5EAD914C3B3FFA15C9638734CA71EAC37AF1B80F1C1045D49933E43B93FD1 + +COUNT = 104 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263646566 +Output = 9EAE24ED81F3B829763EBA904EAFE5A12A7212526DAF6441A53C8E9EF1608E0C8AB69BD5DB988105FF6029904CDC26357F53DD96457723748FE23E1DAE0B68692C8320CC62AFCE75C4D1BC6DDA07219F745AAC398960CE494CBE683B11DD49011B5E0CB353DF37E34D48278C06E3B9CB + +COUNT = 105 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F6061626364656667 +Output = 103E6859FA00EBBDF653FFEDEB45E8630A827D6E07B149ADC1DF74B41B3A4C3A2615E128E13610994A99EBA68A3F0B70964738AB9A4BFE5E057BABE30EE1FC9C4CD683CEC27DF9A20C72B5CAFC95400E7AC1BC951412C0E345A085662726780C132C7AA5C1CDE3B62D2647A346CF65D3 + +COUNT = 106 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768 +Output = 3074F4F18FDF69EBB6D9A9BD5D4E69D01E5EB2F061E291A496D45FAB0DA4A473DC29606493331A928938B6DDB99A6550B03993E673D769FDC0180734A5929445AD607930676BFD50D76453BC1C9B5842B0E05AFF04843BA444302BC7C12CC068D4C0EA5AB686558956CE2568F76CC7B950923C022188DE1A + +COUNT = 107 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263646566676869 +Output = 24216B02FD43B829FF427C5141B2518DEA38E2374E8DC75647B0CACCCDDE3795219DAA28DC538A62A661553827120459EA88856CF1A74C9BA569D0689087E3EA5FA2AD8D359032D2EDC84823F5FCE389E09D5543DC1AC387AB9022F9B2FFC8C088231D5052D9CC2C5756496E65E55ABCA3667851A842714C + +COUNT = 108 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A +Output = 59039CDBE79604BC8ACC0B5D6EC5725F96E65980F9FBF450772632ECE1EEF9CDDC634D97AF621299F084FB19D63203F35470614DFFFF84D96368A4006FD5FBF20D9D75B0CC4FF80BD0614327757664670B1E8DCA038BD5BF65C3DBC7FDB619E65E0DD3FA1BBE24AD9313A4EB2F15F54C74167C6C73ED6516 + +COUNT = 109 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B +Output = 0A51B1C2AC0406C5BE85E5F8727309DE78C6124FD917D12C8EEA624527D42FD9615F2E0697E10A129BDDE1F1E38128A4C3AEA8B910A0F8406C31C79986825EFD9F09D80DB0B91EACF0F4AAAC0032EF1CB6CBC0F548BAAEFB218B5D1634D7369B1D77F197BB2E7498ED0A3CB141D77336B642DACF31D5457A + +COUNT = 110 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C +Output = F664CE868579486A99025A42697622757287A581D93624868D38ABF4373E7EEF4E12D1A76396A0C0F4D7CBD21E4CB1D98EF8BBD4926C96EDC48A7880050D16BD5A957CA3B140ED14BF66F9A377F34992DBAF39BE45B99C0325C09D272912B9004192E233F43D35BE68610E130D8C8C1488F1F0EBDBD6134A + +COUNT = 111 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D +Output = 9082A582F7757F130DEDAE224FB38D1CFB0C21D2381A5D85052197217B1866769EB3B2B54B213CC8F8790DFF6A17AE2F88BE707AE27526367AE44A95926C7390F8EB36F473BD682FB5980015745F0999006A7BD5C0518965CF333F5A991A541B9D84AF8A0518573D9842D13BE4A7F7188F2619FDCD7A0379 + +COUNT = 112 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E +Output = 0EB4964ABCAAFC30588410830C84DBFACEB03244DDBEA08E4461CE01BED1EFC6AE641D73BF5F74B149A4849E584E3EB42470B6501EF20B45B378BA9ED031EAAD108440CF8DBD614CAB59EA67193CFF630311FDB802C285A08D5ED138C02E348062411F6B704676056BB7EEF6D33972B8573BF3320E2D979D + +COUNT = 113 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F +Output = CD20F890025A664BDBC6530D9C790CC35A80B260BFA12D052816C394D5090735B9462B4B480C8ED1A44E2E416A14646000726496597F2BBE534570DE00678C0EB477B12E5D12E3660A2A87FE9F3981BEBB7A5E799145315D0E655188607AF187811DFB114A625BBACFFDF7028324FEB78E405A8AB7992AB0 + +COUNT = 114 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70 +Output = 1D4155755C898D95C6A9DF5CD5F1A3B787A116F9260BD2A69D0B0FD303306F6644D20C850511C40C310A7D4B43AA640BAC12C6038E136916055FC78179B3FC160B7DC87616EB423B5B1E355B1FE081DB8273A2CA508E974FDEB04CA9FBEC14A7029D18EA58C6AFCB081E261B06C4A5088EDAE1269FAD6439BD4DCE7F2A7DD3FC + +COUNT = 115 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071 +Output = DA0AAD85CD857E0A4A6897B82A2A11EC9A5BAB108EF73D615424BA9A3E5CFA850AD9469096829AB8618E5967A7AF3AFE1FA583C650A95D0FFCE7EDEE48A7B935A49FE39EB0C1DB52CB6EBAA9C69829BC5E45340AA2FD149007283793E47FAF97BD45657C40411BEF86DBD0E9ACA6F49BE97734C26FB64CC1625895678C6DBF91 + +COUNT = 116 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172 +Output = 83F99171340C092801A8482B2FAC5CA3405135D2760503AF3897C08F4217A3BCC08C2E8ECA5230E7D5E48B65EAC41A1DD3F43B8082DAC23EF161C6DF3E88706DC31104FA970227740097F2DF3C0576E70918064B2739B330F35DD7D02A3D144D4F9A5808C33FA98ED56BF3DD25D67CA986CDB14F5DC11BCE798761E7C849AA9D + +COUNT = 117 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273 +Output = 6DD9D141E47A6948E60AF60A31FB955B7358FD843849B03798F3F8B3B28C4BB009FB55EA321F349E844526FDC183FEDC49FC2C6B54D260FBB3D7E20B3E1BE66B0C37ADF9E7F5EDEDEFB238162A01C59421CC8412637E9E9EE59D26C859BBBD7993B27C78084247D4CA894BFC4338952F2AE4669FE3456BE8F0591F5C92882649 + +COUNT = 118 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374 +Output = FBFCDEDB9E03C58077E12BFC87F86B7CD3FCACF0DB9D9A31FDDC36E4ECB2B23DFA7974055F3F5A1FF6E8136CF9C708F66F12994087C866E3F85504A3B9724D17938C199F6503BE6A30170296CAB00A2DB1E6CF0963780E58E1FA56E569244369EECC24B4B92FA2B349B8841626DFCE53FE4C36746086F1974ADAF2BA3DBACE2F + +COUNT = 119 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475 +Output = D1A1F1F7C2995DBD4BDB66CB367D6AA995B45CEB202EBD939EFA50D635336855AAFF2E7C548496A259CB4B34795B8099FA086AC00880EA25F3C345A77F40AC967DC91F181E19FCD4E3A5FB73B15B1FA83232DB970F7B30BE98E88BFD4CA0B475C1B7AA831078AC37160D581717E6D546FEA5FAA8EA99C9AEDA4EA471F33B3194 + +COUNT = 120 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576 +Output = D376E69BC513EFBB8CA8FBCC2635965E295CCD1C0C27CC6EB5DFE443A585F4DDDA6DAE207A56BCFD1362E4ACE1BFA975AF1212824D65B732E41A1D92D2CFE57F2A0198EBCF862ECFA9D22F024F47CCAE41178382FEC37A39088B94875B739EC64998F62A6417106A9C78BA28D70D06A93F90884AF6A30DD2FC6A21D9FAEE2064 + +COUNT = 121 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +Output = B04E30E501339A530360D9A845CAE9548E0F27E36DB3950A1CBE927A5ED8B855F78E86E1429C1AC5206BB7DE4F4A08D90E166D35F7583C38E59C4A56B962D1800D79C7AD4C8561FA366EC9C0C9EAC00B5AA3C3C16DF1647E73A8C64F14989D2D6FBB4642C12EB19DC7B5A18F531BFDF92434238660B1BE43CA5821ADA82EBE75 + +COUNT = 122 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778 +Output = 260635AE31634020B6E488F6C95ABD2CCFB11510C1BD96C093608762F214057815ADBBFB2DE2BCE3027A4ECC1DA4C7A2F8CBCEA25D916ECA621671A9275C6C5E60ADD32C203F995C97C5531A86488D8E3BDD7968C35EC61C2CDFA861C8879B6B32F8D5979FCD5ED1C2E0365547397FA4DF1B60E64FA4A8AA0981DD2A1A9965DF081557F8BF43CD6B + +COUNT = 123 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +Output = C7F38CB064D26263CDCD274AE9F35613FF1A2A4641591F6E946251FBBC64CA16039CA649F58995241AB67037563972DB55B9D12CFAD6E4128C361C353FFD8AC890D0D1C29991236AAB6C27DF09C24B6955A82777CD5F30BA372D46CB8A848B7AF91683B87EFC80EEF65C9404D2098E6218375D18920C7358E5AD2A1573440FA59F56FA7DBA5D40FC + +COUNT = 124 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A +Output = 2D15CBC166B3EDFB652B09120251DFC5092756E66AE810B1957A9425B2A592D4D21C9E5DC63FBAF0F5079E94F11326599C8D9E71BCA4E9EA6FE11FBFB6901D6A7E2106C1354B18FF6329C6B3E76FDE3A01CC268B7A01562C55CE3B3BF261CDE406750CDAA016FA990951494E54B13469AA6143F205F8D86544C672EB8369A5F363CB0E8355D92083 + +COUNT = 125 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B +Output = 19BC8957D0E3C941EBDE22B87A81AE8B422BF122C0C4AD133DC11FF43529039DC9D8671CC4B073C9A1C52A86C0B8F917A0D747224671F87CF3CFFAC440A2843398311A12EEDE2709C4C75C9955BBD9B7D3B2E58B7BBB428D62F20C58C6985CB3292CD82D1E2350071C91FFA08F3C27AAC312B47BBCB5ADE3877F4AB64DA88C1F82D89E78A76E73F6 + +COUNT = 126 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C +Output = 80C4B26C03B3FC542BD0674E46BE692606D7D0107EAF03E4AC3DB176D9CE0CE5104A9E5E9CA94BBB402C35643FEB6D08D5C9B7496141033CDFAB7D02FA6293D2EF001354C9565B875CA781872D922B4A4BFC2948295D7FB7C6874DAF9D0F10F24FA07338E08054A02A30D4E27F1C4A7BE139971CF4F5F1862AD7E0C170F5ABFE13EC19F5D7E37CA2 + +COUNT = 127 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D +Output = 0321201DA921361D45A6F9BF613CE15316945C2C3D52D9DDB2D6FA33549CFC4C0837FEBAB65E9AEB2777E4B4D367BC9F0A15683A1BB5805A3292A7DAC59CD1E73524F561FF1E2BDE898FB2605648B385F9A1AA38A10581F4F5DDB31DD54A777F91F21C1B8F61FCD5D3884AE083A5C90545B807FB3EEBD472A81B574718CEE428D5A0FAF776A5229A + +COUNT = 128 +Key = 00000000000000000000000000000000 +Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +Output = AF2187578A2495DB2A746058D04E2902C83134D727E750C37681015921A852D1E796D2B6D352C86A1F31B891C7EF5A7BB03CF2D61C941D6DC51F5DEDA91C512921E631C8287175EF9D49365F86B4D27160B0CDCC7755E1C60E52C60579014BD705BFEA6323CED9F4072A06CA00BD8A57F69BB87966CC34811DADAA52CC92823AC5DB2AFBA20369D8 From 79748a9e84b8084559e9a2794ed2d88e05259611 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 20 Mar 2018 13:12:13 -0400 Subject: [PATCH 195/988] Revert "don't allow GeneralNames to be an empty list (#4128)" (#4161) This breaks the urllib3 tests, as well as several in-the-wild certs This reverts commit 388d1bd3e9cd953fcc948edbc152d5d140c87eb8. --- src/cryptography/x509/extensions.py | 3 --- tests/x509/test_x509_ext.py | 4 ---- 2 files changed, 7 deletions(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index af12fa9cc485..eb4b927fbbbd 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1160,9 +1160,6 @@ def __hash__(self): class GeneralNames(object): def __init__(self, general_names): general_names = list(general_names) - if len(general_names) == 0: - raise ValueError("Must supply at least one general name") - if not all(isinstance(x, GeneralName) for x in general_names): raise TypeError( "Every item in the general_names list must be an " diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index b048c140fb35..9f4e17580285 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -2052,10 +2052,6 @@ def test_invalid_general_names(self): [x509.DNSName(u"cryptography.io"), "invalid"] ) - def test_does_not_allow_empty_list(self): - with pytest.raises(ValueError): - x509.GeneralNames([]) - def test_repr(self): gns = x509.GeneralNames( [ From f903da081b3eac3bc84a2e596591e7e634c3355d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 20 Mar 2018 13:33:57 -0400 Subject: [PATCH 196/988] fix bug with n % 8 length wrapping on AESKWP (#4160) * fix bug with n % 8 length wrapping on AESKWP * review feedback --- src/cryptography/hazmat/primitives/keywrap.py | 9 +++++-- tests/hazmat/primitives/test_keywrap.py | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/primitives/keywrap.py b/src/cryptography/hazmat/primitives/keywrap.py index 3b5313189c89..2b7955f8b056 100644 --- a/src/cryptography/hazmat/primitives/keywrap.py +++ b/src/cryptography/hazmat/primitives/keywrap.py @@ -118,11 +118,16 @@ def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): b = (8 * n) - mli if ( not bytes_eq(a[:4], b"\xa6\x59\x59\xa6") or not - 8 * (n - 1) < mli <= 8 * n or not bytes_eq(data[-b:], b"\x00" * b) + 8 * (n - 1) < mli <= 8 * n or ( + b != 0 and not bytes_eq(data[-b:], b"\x00" * b) + ) ): raise InvalidUnwrap() - return data[:-b] + if b == 0: + return data + else: + return data[:-b] def aes_key_unwrap(wrapping_key, wrapped_key, backend): diff --git a/tests/hazmat/primitives/test_keywrap.py b/tests/hazmat/primitives/test_keywrap.py index 8311c2a4c4de..9b1e43e42f31 100644 --- a/tests/hazmat/primitives/test_keywrap.py +++ b/tests/hazmat/primitives/test_keywrap.py @@ -141,6 +141,18 @@ def test_wrap(self, backend, params): ) assert params["c"] == binascii.hexlify(wrapped_key) + @pytest.mark.parametrize( + "params", + _load_all_params("keywrap", ["kwp_botan.txt"], load_nist_vectors) + ) + def test_wrap_additional_vectors(self, backend, params): + wrapping_key = binascii.unhexlify(params["key"]) + key_to_wrap = binascii.unhexlify(params["input"]) + wrapped_key = keywrap.aes_key_wrap_with_padding( + wrapping_key, key_to_wrap, backend + ) + assert wrapped_key == binascii.unhexlify(params["output"]) + @pytest.mark.parametrize( "params", _load_all_params( @@ -163,6 +175,18 @@ def test_unwrap(self, backend, params): ) assert params["p"] == binascii.hexlify(unwrapped_key) + @pytest.mark.parametrize( + "params", + _load_all_params("keywrap", ["kwp_botan.txt"], load_nist_vectors) + ) + def test_unwrap_additional_vectors(self, backend, params): + wrapping_key = binascii.unhexlify(params["key"]) + wrapped_key = binascii.unhexlify(params["output"]) + unwrapped_key = keywrap.aes_key_unwrap_with_padding( + wrapping_key, wrapped_key, backend + ) + assert unwrapped_key == binascii.unhexlify(params["input"]) + def test_unwrap_invalid_wrapped_key_length(self, backend): # Keys to unwrap must be at least 16 bytes with pytest.raises(ValueError, match='Must be at least 16 bytes'): From a1e9ddc36ec4b4de4aafbf10db14ac9b3909c621 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 20 Mar 2018 22:05:01 -0400 Subject: [PATCH 197/988] forward port 2.2.1 changelog (#4167) --- CHANGELOG.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d36991acb068..1d434f68e44b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,19 @@ Changelog .. note:: This version is not yet released and is under active development. +.. _v2-2-1: + +2.2.1 - 2018-03-20 +~~~~~~~~~~~~~~~~~~ + +* Reverted a change to ``GeneralNames`` which prohibited having zero elements, + due to breakages. +* Fixed a bug in + :func:`~cryptography.hazmat.primitives.keywrap.aes_key_unwrap_with_padding` + that caused it to raise ``InvalidUnwrap`` when key length modulo 8 was + zero. + + .. _v2-2: 2.2 - 2018-03-19 From ec90afc9f2d178f9f8a901fec9c4157ca08a0d08 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 20 Mar 2018 23:03:47 -0400 Subject: [PATCH 198/988] Add urllib3 to downstream tests (#4165) * Add urllib3 to downstream tests * empty commit * remove a suffix --- Jenkinsfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index eba186fbf1c1..7f8cf6b7a029 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -194,6 +194,21 @@ def downstreams = [ pytest src """ ], + [ + downstreamName: 'urllib3', + label: 'docker', + imageName: 'pyca/cryptography-runner-ubuntu-rolling', + script: """#!/bin/bash -xe + git clone --depth 1 https://github.com/shazow/urllib3 + cd urllib3 + virtualenv .venv + source .venv/bin/activate + pip install ../cryptography + pip install -r ./dev-requirements.txt + pip install -e .[socks] + pytest test + """ + ], ] def checkout_git(label) { From 67ddb8f79b83a64a136ddf6d86a4dbd29d2afa7a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 27 Mar 2018 13:34:39 -0400 Subject: [PATCH 199/988] port changelog for 2.2.2 (#4172) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1d434f68e44b..6ab6b04481af 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,14 @@ Changelog .. note:: This version is not yet released and is under active development. +.. _v2-2-2: + +2.2.2 - 2018-03-27 +~~~~~~~~~~~~~~~~~~ + +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.0h. + .. _v2-2-1: 2.2.1 - 2018-03-20 From 38e4d197a0d317e676f4e351a9c80935d5a771f4 Mon Sep 17 00:00:00 2001 From: "Tim D. Smith" Date: Thu, 29 Mar 2018 14:08:36 -0700 Subject: [PATCH 200/988] Fix typo (#4178) --- src/cryptography/hazmat/backends/openssl/encode_asn1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 89b2f7f76d32..4bea03e6c32d 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -105,7 +105,7 @@ def _encode_name_gc(backend, attributes): def _encode_sk_name_entry(backend, attributes): """ - The sk_X50_NAME_ENTRY created will not be gc'd. + The sk_X509_NAME_ENTRY created will not be gc'd. """ stack = backend._lib.sk_X509_NAME_ENTRY_new_null() for attribute in attributes: From 99470a46488d86855a189cc07a012fb96dfd47f2 Mon Sep 17 00:00:00 2001 From: Joshua Crowgey Date: Fri, 30 Mar 2018 11:10:29 -0700 Subject: [PATCH 201/988] Added badtime.pem vector (#4179) * Added badtime.pem vector In connection with forthcoming PR to fix #4158 * shortened line, corrected and->and --- docs/development/test-vectors.rst | 2 ++ .../cryptography_vectors/x509/badasn1time.pem | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/badasn1time.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 2eb47493b0f6..fec0363f5e8e 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -176,6 +176,8 @@ X.509 a distinguished name with an ``x500UniqueIdentifier``. * ``utf8-dnsname.pem`` - A certificate containing non-ASCII characters in the DNS name entries of the SAN extension. +* ``badasn1time.pem`` - A certificate containing an incorrectly specified + UTCTime in its validity->not_after. Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/badasn1time.pem b/vectors/cryptography_vectors/x509/badasn1time.pem new file mode 100644 index 000000000000..69820fde1297 --- /dev/null +++ b/vectors/cryptography_vectors/x509/badasn1time.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9DCCAdygAwIBAgIJAM/N3nz0v2b9MA0GCSqGSIb3DQEBBQUAMC8xCzAJBgNV +BAYTAkdCMSAwHgYDVQQDExdmY2tQQTIwMC5xdWlja2Vuam95LmNvbTAgFw0xMTAz +MjEwOTI1NTJaFw8xOTAyMDcwMTAyNTczNlowgZUxCzAJBgNVBAYTAlVTMRcwFQYD +VQQIEw5EZWZhdWx0IFJlZ2lvbjEZMBcGA1UEBxMQRGVmYXVsdCBMb2NhbGl0eTEd +MBsGA1UEChMURGVmYXVsdCBPcmdhbml6YXRpb24xFTATBgNVBAsTDERlZmF1bHQg +VW5pdDEcMBoGA1UEAxMTRGVmYXVsdCBDb21tb24gTmFtZTCBnjANBgkqhkiG9w0B +AQEFAAOBjAAwgYgCgYDHWlVCGI2r1fKY7YawkjNaeNZ77cCkQsfWw4AdgmOdHtt9 +xJdkbCHGx7Yzh7BRu6QkvjQKwgecdb2GZ7zRAF8FXPFa5fJbozQSJVqMMKCnTtm6 +PjgA4jgH3m7ov/JOcFsXVmWtQHFAnE6r2s6QE59LbryTb0cvmk9Pq63WxLenAQID +AQABoy8wLTAdBgNVHQ4EFgQU+upJrZrv9MLDSfoVdo0vMdc5rzgwDAYDVR0TBAUw +AwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAqjD19zQ36dVjCmPkSv/cjGfhiRtKV3Q3 +UVRFnDX0Lk5BB+GqeVgVfJ8oQForVlR1rZIAbnl0St+/xtUYRhBss5jRIKHkoylc +5k1T7jU8fFzTxjbenPlrt5V5+IH+UnLe5ozpoTsp69TgpQ3ImYDuxun73+OVSE6S +LKBBoy0BCrNG1ezg6P6idqR3rCS3cQFfmP9nJHcOgBJ71bvAbzfc+pmlliOPG1SV +OGYnxLJjduLYELHUN1hgSH+bcQtQMmsxkixXq3ejYvWyir4W3CPflwaUfXBes18S +jVN91T+cKBU5qlWMLRuYqmyCq9oiER2WSZH05FeHwhYyPjOuf/fIgA== +-----END CERTIFICATE----- From b9051a353237c0a9e38d9f6561679128680b8f55 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 1 Apr 2018 09:16:41 -0400 Subject: [PATCH 202/988] updated link to sphinx docs (#4181) --- docs/development/getting-started.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index 55dfd6cbd1bf..415f5d8e8f77 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -111,5 +111,5 @@ The HTML documentation index can now be found at .. _`virtualenv`: https://pypi.python.org/pypi/virtualenv .. _`pip`: https://pypi.python.org/pypi/pip .. _`sphinx`: https://pypi.python.org/pypi/Sphinx -.. _`reStructured Text`: http://sphinx-doc.org/rest.html +.. _`reStructured Text`: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html .. _`this Github issue`: https://github.com/rfk/pyenchant/issues/42 From 2920a310f29c6a61c0fffccec5bf794abc422b5f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 1 Apr 2018 10:19:18 -0400 Subject: [PATCH 203/988] Fixed links to sphinx docs (#4182) --- docs/development/submitting-patches.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/submitting-patches.rst b/docs/development/submitting-patches.rst index 431673e8aa89..2e9bb0fd66b2 100644 --- a/docs/development/submitting-patches.rst +++ b/docs/development/submitting-patches.rst @@ -155,7 +155,7 @@ So, specifically: .. _`Write comments as complete sentences.`: https://nedbatchelder.com/blog/201401/comments_should_be_sentences.html -.. _`syntax`: http://sphinx-doc.org/domains.html#info-field-lists +.. _`syntax`: http://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#info-field-lists .. _`Studies have shown`: https://smartbear.com/SmartBear/media/pdfs/11_Best_Practices_for_Peer_Code_Review.pdf .. _`our mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev .. _`doc8`: https://github.com/openstack/doc8 From 25f2b4e2edc9a162d3d9ecbd9f26e25da4848735 Mon Sep 17 00:00:00 2001 From: Joshua Crowgey Date: Tue, 3 Apr 2018 16:24:06 -0700 Subject: [PATCH 204/988] Raise ve on bad gt (#4180) * Raise a ValueError when conversion to generalizedtime fails * added test for badasn1time value error * pep8 compliance * Addressing code review + VE now raises with ```{!r}``` formatting + Test now checks that the bad string made it into the VE message * using ValueError.match --- .../hazmat/backends/openssl/decode_asn1.py | 8 +++++++- tests/x509/test_x509.py | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 24eb55b1403e..31fb8cfccf55 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -734,7 +734,13 @@ def _parse_asn1_time(backend, asn1_time): generalized_time = backend._lib.ASN1_TIME_to_generalizedtime( asn1_time, backend._ffi.NULL ) - backend.openssl_assert(generalized_time != backend._ffi.NULL) + if generalized_time == backend._ffi.NULL: + raise ValueError( + "Couldn't parse ASN.1 time as generalizedtime {!r}".format( + _asn1_string_to_bytes(backend, asn1_time) + ) + ) + generalized_time = backend._ffi.gc( generalized_time, backend._lib.ASN1_GENERALIZEDTIME_free ) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 4a34d4a917f2..720db78eef4b 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -3752,6 +3752,18 @@ def test_unsupported_subject_public_key_info(self, backend): with pytest.raises(ValueError): cert.public_key() + def test_bad_time_in_validity(self, backend): + cert = _load_cert( + os.path.join( + "x509", "badasn1time.pem" + ), + x509.load_pem_x509_certificate, + backend, + ) + + with pytest.raises(ValueError, match='19020701025736Z'): + cert.not_valid_after + class TestNameAttribute(object): EXPECTED_TYPES = [ From d57c79e0434ee224c00bcfd5b28e958144a1722b Mon Sep 17 00:00:00 2001 From: Joshua Crowgey Date: Wed, 4 Apr 2018 08:58:35 -0700 Subject: [PATCH 205/988] add X509_NAME_print_ex (#4174) * add X509_NAME_print_ex * Addressing code review + removed comment from bindings regarding deprecation of _print_oneline --- src/_cffi_src/openssl/x509name.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/x509name.py b/src/_cffi_src/openssl/x509name.py index 1be1ae517bfd..f88c8b063b33 100644 --- a/src/_cffi_src/openssl/x509name.py +++ b/src/_cffi_src/openssl/x509name.py @@ -40,6 +40,7 @@ int X509_NAME_entry_count(X509_NAME *); X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *, int); char *X509_NAME_oneline(X509_NAME *, char *, int); +int X509_NAME_print_ex(BIO *, X509_NAME *, int, unsigned long); /* These became const X509_NAME_ENTRY * in 1.1.0 */ ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *); From cbdc9baafd4cc919abc7aed070d08d8ea847aa33 Mon Sep 17 00:00:00 2001 From: Thierry Bastian Date: Thu, 5 Apr 2018 16:15:53 +0200 Subject: [PATCH 206/988] OpenSSL 1.0.2o has switched to winsock2 (#4184) So here we need to make sure we don't simply include windows but only the parts that we want --- src/_cffi_src/openssl/callbacks.py | 3 +++ src/_cffi_src/openssl/cryptography.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/_cffi_src/openssl/callbacks.py b/src/_cffi_src/openssl/callbacks.py index cf2b2da5ea66..e215ed4ef4d9 100644 --- a/src/_cffi_src/openssl/callbacks.py +++ b/src/_cffi_src/openssl/callbacks.py @@ -11,7 +11,10 @@ #include #ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN #include +#include +#include #else #include #include diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 9095e3abb195..4f9378d338b8 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -22,7 +22,10 @@ #include #endif #if defined(_WIN32) +#define WIN32_LEAN_AND_MEAN #include +#include +#include #endif #define CRYPTOGRAPHY_OPENSSL_102_OR_GREATER \ From 2be43903ea312f80283a9b3b38a8a414d8acd3f0 Mon Sep 17 00:00:00 2001 From: Matt Bullock Date: Sat, 7 Apr 2018 02:10:29 -0700 Subject: [PATCH 207/988] simplify Jenkins test run taking advantage of https://github.com/awslabs/aws-encryption-sdk-python/pull/46 (#4185) --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7f8cf6b7a029..ca49527caa1a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -158,9 +158,9 @@ def downstreams = [ virtualenv .venv source .venv/bin/activate pip install ../cryptography - pip install pytest pytest-mock mock + pip install -r test/requirements.txt pip install -e . - AWS_ENCRYPTION_SDK_PYTHON_INTEGRATION_TEST_AWS_KMS_KEY_ID="arn:aws:kms:us-west-2:nonsense" pytest -m local -l + pytest -m local -l """ ], [ From ba45d28fc33c9e4e88fbd7a51453f90ced9fb5dd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 8 Apr 2018 16:39:08 -0400 Subject: [PATCH 208/988] Remove version number from an error message so that it makes sense (#4188) --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index b6558163183e..4d7f5c2b02d9 100644 --- a/setup.py +++ b/setup.py @@ -48,8 +48,8 @@ if platform.python_implementation() == "PyPy": if sys.pypy_version_info < (5, 3): raise RuntimeError( - "cryptography 1.9 is not compatible with PyPy < 5.3. Please " - "upgrade PyPy to use this library." + "cryptography is not compatible with PyPy < 5.3. Please upgrade " + "PyPy to use this library." ) else: setup_requirements.append("cffi>=1.7,!=1.11.3") From a5e74b12889026979a1e2c017e1f5ff5e4b65540 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 12 Apr 2018 19:49:27 +0800 Subject: [PATCH 209/988] update the NIST keywrap vectors (#4191) NIST has updated the vectors to cover the bug we had. Let's use those vectors. Thanks NIST! --- .../keywrap/kwtestvectors/KWP_AD_128.txt | 2976 ++++++++-------- .../keywrap/kwtestvectors/KWP_AD_128_inv.txt | 2968 ++++++++-------- .../keywrap/kwtestvectors/KWP_AD_192.txt | 2984 ++++++++-------- .../keywrap/kwtestvectors/KWP_AD_192_inv.txt | 2970 ++++++++-------- .../keywrap/kwtestvectors/KWP_AD_256.txt | 2980 ++++++++-------- .../keywrap/kwtestvectors/KWP_AD_256_inv.txt | 2976 ++++++++-------- .../keywrap/kwtestvectors/KWP_AE_128.txt | 3016 ++++++++--------- .../keywrap/kwtestvectors/KWP_AE_128_inv.txt | 3014 ++++++++-------- .../keywrap/kwtestvectors/KWP_AE_192.txt | 3016 ++++++++--------- .../keywrap/kwtestvectors/KWP_AE_192_inv.txt | 3016 ++++++++--------- .../keywrap/kwtestvectors/KWP_AE_256.txt | 3016 ++++++++--------- .../keywrap/kwtestvectors/KWP_AE_256_inv.txt | 3016 ++++++++--------- 12 files changed, 17974 insertions(+), 17974 deletions(-) diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128.txt index 9def1f305472..314f8636a75b 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AD with AES-128 cipher function' information for SP800-38F -# Seed = 1a582b7fe5485cf2e8dd180e5ca97bd34058b6688c6f4deca8d496e97e5b962f2936f07e09c622521d845f6f9687c5c190b17ecefc6a520d51ce37ca6e47d9b1 -# Generated on Wed Dec 03 09:15:57 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AD with AES-128 cipher function' information for test-files +# Seed = 0f0c6b6602d959d22ff2305478ea477a85d196d9695abf5b445010b45ce046c501bc04e6ca4faf46137adf6eac452d97314cd91137e33fc30cc6df316117fed3 +# Generated on Fri Apr 6 14:46:45 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 506322a9255456f1ac79cd66c18b3373 -C = f8a05a995d5cecea6c4301703910bbee -P = 4f +K = 49319c331231cd6bf74c2f70b07fcc5c +C = 9c211f32f8b341f32b052fed5f31a387 +P = e4 COUNT = 1 -K = cd5da6951e29d38c2106294049735f2d -C = 49025ead2cf1760f5c659383e1bb7249 -P = e8 +K = 30be7ff51227f0eef786cb7be2482510 +C = 7f61a0a8b2fe7803f2947d233ec3a255 +FAIL COUNT = 2 -K = 7467673da243bc2bcefc79c33374113b -C = 3f5ecafc7c9e6b01d7f07426208d9749 -P = bc +K = 20501013aa1578ab32704a4287029098 +C = 382179a39d75756f57763486d038b50f +P = 14 COUNT = 3 -K = cc5e06df496cb074f43829f7f315e171 -C = b20aedd2dbc7d2ebee9180bbb15014dd -P = df +K = 008103a7c81a0f13612b0cea2d3a90b7 +C = a10e771f816db4f8d1b47819f0eba184 +P = cc COUNT = 4 -K = de2d21a1e11233d2dbe5ed9df7134f9e -C = 09842f8e5d49d5f9c3ee373cbb56ec1b -FAIL +K = 0dc32674ea454ab7db2c3928e7f7832e +C = 0fd5a38b7a864dc4b2e85945c0221a9a +P = 1a COUNT = 5 -K = f9bd372f0d663782c3177d5d9396f668 -C = 99cf4385882f75756b9b446762ccc891 -P = 14 +K = c82d425035db8908a42698e601b3ce6a +C = 9175f22343b92c0d02eaeede3b859a5b +P = 98 COUNT = 6 -K = a9fda180f95f8e36a8a517ffd85bd0e4 -C = 9819b16f2d75e34ad0ed211c108eba28 -FAIL +K = e25458a1abf3f0a2c8f6563ebd58b5d1 +C = 37c9bbd4b5e7d87116e5caf952a7f632 +P = d0 COUNT = 7 -K = 7f42f3bfec62f0ce3eb916e22b0c849d -C = 1f2955e47acb5c0363229b5707cf8d6a -P = d9 +K = 2c36ff34919c5ecd1723a58bd4125fa4 +C = 6df7b62a45422d15e11075d6d6c836cc +P = 1d COUNT = 8 -K = ef36b209a93fde56d7a54a0c0d245ba3 -C = 21a6437deec13dc0dfcf9dff41d3a1f3 -P = c2 +K = bd457781c1b52c9ad1f075560b212a6f +C = a421f825dff3257619f83da67066eaf2 +P = 3d COUNT = 9 -K = 8956d431ac1bd0be070421594d167396 -C = 08bd376ef4f8559c0306f0db5ba1f620 -P = 77 +K = 7a3f4d970501bf86147e915fe1b90318 +C = add70bafafb15e79c3a85ce1de558272 +FAIL COUNT = 10 -K = f304345df455c1df1d06a8a4c69a05a6 -C = d733b1712786bd98f39e242bebdc68b4 -P = d6 +K = 8432ca486088d7aa63caca6a899e7822 +C = 0fa6c00b9b98d1069354ad49ff0723c1 +P = d0 COUNT = 11 -K = c301e4c2d2e5d82fdf91ef7da6fa0040 -C = 06050948e4bd49e107efc2ae974645ab -FAIL +K = 4c61968825650603b24a6ab78ebdd301 +C = a2c614723f8c99908e2d7f69b357a471 +P = 9e COUNT = 12 -K = ff386b59cfc10b1c66026ad76ae826bc -C = be69f4f8739786e8ecab2b0be99b1dcf -P = d0 +K = 66c78e42d9106aad38da7555317a3c00 +C = 1f540343c743291ed2d676bfce8894b9 +P = 90 COUNT = 13 -K = 3be6170a667e2787febea8b3a721d6b0 -C = 3d2eab82ec8effbc50c64ecf5308f2ee -P = 6f +K = 7cc7acd8e5c436db4360a7d7611fa659 +C = 323bca8b78a81ea6702b90bf8b24c499 +FAIL COUNT = 14 -K = 086edccf9c17093aca14226a37b3342a -C = 12e73bdc882e19d69073b881d32a3ff4 -P = 1d +K = 162970b7dee3313cd836ae872813c0ce +C = 4b11432611f83ae26b0ba8a7f77d38b9 +P = 98 COUNT = 15 -K = 97d9b455c6910484bd5b6a5a48125462 -C = 3d12dd8f9524b25dd3900df25e4e3af2 -FAIL +K = 19c2a55208280b968a7ffddf1c2e498e +C = 443345f2dc5fadb4337283a2792b126e +P = 83 COUNT = 16 -K = 180fc546595f4ee4b992221fc82140ac -C = 99f20d5d4b27f34799ab9f1d2e0fd810 -P = 9e +K = 52fec9540ab837876a35878890c2b11c +C = b19acbf5eec30e91d4d95a9ce6e52413 +P = e2 COUNT = 17 -K = d47b5d1000413417749f92f26ecf5bef -C = 6e401356a86703dc3b8358fd1191767f -P = 3c +K = 22b1572f86dc7a857e945e33d17b19fa +C = 5dff709d091d7988f1777ac7521c8c8b +FAIL COUNT = 18 -K = 771243426e84823df8240509e7f74299 -C = 4bf676dc2f835dfee0c0d81d344c8809 -P = 2e +K = a535fa6a138c5b83dc5466864d3237b2 +C = 1a318316b481a763cbefb245f147cb43 +P = 2c COUNT = 19 -K = 909e8f2d03d098eb4aa80dec1149a7b5 -C = 92f861162f8a36c199956e005f091fb0 -P = da +K = 9a93046fff6fee1c47a813d4e69bdffd +C = 59ba4a4f2e009fa5d6cbc021a99e95d8 +P = e1 COUNT = 20 -K = 9bb5ce056bce228f149ca44cb3e37a95 -C = ee739610f6c91ceb9a0632583e38ef7f -P = 3a +K = 58a4e8aaf98e86ddccf06b4a494faa33 +C = fed206c1cd93a25114ab203f22fcd986 +FAIL COUNT = 21 -K = 133a21004dc90d4a43154d0749bb68c8 -C = 44b5386c2cdf14dd797d566dc768b58b -P = e2 +K = 4a57d53eb21f77f109870a7f9c880486 +C = 647384f375a70290cb0d6ba851d8644c +P = 72 COUNT = 22 -K = a0cb71f20c74220db1b84db22b7c834d -C = 6f04597e03935450a3b386287dd8b607 -P = 16 +K = 028c7907fc188ee7fb1f3c11b032bbc5 +C = b5427aff72f059aef2360078fafe8bf7 +P = f2 COUNT = 23 -K = a1a61ecfcd8b327df31b38e0e50b5182 -C = abac419695ff4667a1df27af0d35314a -P = 26 +K = a575f0e6267f57a2b4a85e55d205ddc4 +C = ad6137192d111b6d61d741124b2230d5 +P = 2c COUNT = 24 -K = 623af4ed8d3af0e93e325628bd4a000f -C = 2ea41f0bc6d7e0829fbf32a323796b24 -FAIL +K = 7116d1babee50e24816cebe5e1c5f24f +C = 1b989b0c52f43cf851cb2f0060c7289d +P = 15 COUNT = 25 -K = b07ea087a2ff5f471e7ae56900dbbc50 -C = 22827a46cbeafdfdaf864e516b54813c +K = cbf9d0610717b01bbec7fa26386fa5e0 +C = b80aba7104752169a7dc594ef888ff44 FAIL COUNT = 26 -K = 9c0773bf95c5cc16ef01be8efc315068 -C = 0207d444d8f68ca26a38947fcdd6ea94 -P = e4 +K = 21eafc81579752790a3b0690430d0c4a +C = 5f4d6f901b6bffe03e9e1008566d9550 +P = c7 COUNT = 27 -K = 047dba08590bdcff040d0364a7508a18 -C = 71057b3a143795b96d75b81046c0c38f -P = 84 +K = 72a0bf2f4e4949c19a64452f50476a9b +C = 5464388e684547c0c6a967807f90d923 +P = 63 COUNT = 28 -K = d85d90fd37937c17afe287750779a4b3 -C = 38f4675d0190b41ec07106a2b4c9ea08 -P = 36 +K = 702ff8f94d3e4c185743c390909b5ede +C = e0e40b793fe93ae09e7593024b6c5fdf +P = 8a COUNT = 29 -K = 6db636f5414e9ebc12a0348a86f9c0ce -C = 27731bfd98a84c0e38d4f4921589c49c -P = 0e +K = 553cad5b0020bc5e6750b7050a3afae1 +C = 497c2e0af93c901b27cc10c60ca24451 +P = d4 COUNT = 30 -K = c8664f57d55b924e90d7a656a80940ac -C = 2ecce553dff4757344a397c279782142 -P = da +K = a2ebfeaa2e58d0f959c92d28071fa0c6 +C = 04ae08eda935f57782049e20dc81e601 +P = c9 COUNT = 31 -K = 5320669e7c9d5c457d5e0d163613c1ed -C = c8b18aca1e07d3d3848405290b9a6a19 -FAIL +K = 1f8cedf0c2ac5d527944766b00e4de5b +C = 03ac1c88821015d1071cc12200df1464 +P = 03 COUNT = 32 -K = 4114397130d354c4ed1eba58e2320e2d -C = c31edad94e1b12ce647994a270c0a5f4 -P = ee +K = 5fbfb48d2efd4790c513bd855731f3d9 +C = fc64318d7ad9bc4f1dfd524e0f358719 +P = c6 COUNT = 33 -K = ca93e9140b30e80c874f0d435d9e7b98 -C = 4d817eaa38b016097894ecc62b3ba41e -P = f6 +K = 2e1a718358916fb1ac403f2c8b49bccd +C = 1927d041b199c2d2c8ae801aff52c02d +P = 31 COUNT = 34 -K = 5b0a270ad849d5c5cd4b452291d871d1 -C = 7a961b9ca576321a330634102f561e0e -P = 23 +K = 08d17991db439d198df594d82e289e4d +C = 59f5d6f5cb3f69d2d506f49c6a8df09c +FAIL COUNT = 35 -K = 4b0feefb20ba056173b89ffcd8062c90 -C = e9bd7e68e2f66eb96e2b851f87a59820 -FAIL +K = f669fdce15a850abf924bb8748a112cc +C = 522324b7fb139af8462397ed806a6082 +P = 15 COUNT = 36 -K = d30aa0edd445b3ab5a1ee7d4dd12adce -C = 60737b0d625dc794db2f433f7bef4986 -P = 21 +K = e538431a17cbc3517099b4a72da9423a +C = 2bad714e7351e702699cfb2d8676e225 +P = 9a COUNT = 37 -K = 7dd069aee8a291df279833847931901d -C = 977e19ae5797c282e42994e1302465d5 -P = dd +K = b0dc6993d8ad888c944feedc6152b0c1 +C = 2030c9fc96e95ce9ff82c03708497d2f +P = 6e COUNT = 38 -K = ca5f2c4960a5edb90aa615ded78f9225 -C = 6da7509371013621f1454d6d6d03884f -P = b4 +K = 400de12defb7cf79f15fd6b270f7d375 +C = 1d123fe03f1c030880c1bec89bef7534 +P = eb COUNT = 39 -K = cd0f33a130ec770767ca18d1d691b7e7 -C = a196b34f15084dab678e43326e7b4827 -P = 20 +K = 4992e8e00bfeba60da07004568bd4994 +C = 22ff42af00434406e3380049f6bc33d8 +FAIL COUNT = 40 -K = d1a8f0564e1393f66d07486ad20b5ca3 -C = aba7331c1eb7ec576fc3ae36f9725a2c -P = 46 +K = 0548ff537efe407f0da8aeb09759fd47 +C = d4ef810c7aa30d240beb2543615a7fe1 +P = b0 COUNT = 41 -K = cdacae9a4d29e8e8ac13b98ba2b2b2a1 -C = a3b2996d2adaacdc52a24fb74feb3af3 +K = 359e48846feb910d542f85aee5f76e49 +C = 60259b61322eb0ae0c07e06bea9b4dab FAIL COUNT = 42 -K = e48575d38f4ab429feb9b167648a7567 -C = c42ea2c68eccef40a5e2956c65344f67 -P = 92 +K = 0a39189728cda96158d83ac156e16fff +C = b1dc1e59bba2418deeac3a77207ba872 +P = ef COUNT = 43 -K = 7a4058b4989a34253fde0da9341c3a17 -C = a880d1018664969df8619a483097bc80 -P = 68 +K = 01892510c6e0a157cf48afc0320735ba +C = 3883c74a63955e74d3babebdd82032ec +P = b4 COUNT = 44 -K = 1d9fa457ced525e06e1370b6eb6ac103 -C = 4d949d1f9b341be77a8de8f827cf4d4f -P = a3 +K = 9d37a54aeae56d4b01f0b7258bb594ac +C = 50c22166e8d525f0c5128cc9653ec289 +P = 8c COUNT = 45 -K = 91f077b5e3981068c833576a1b2d111f -C = 080cca24f4daf6f555e783e5079c7c88 -P = 21 +K = cb1206e4ba8890127c6940e7581f17e4 +C = f7955be55e9ad339bd1b223328092a18 +P = 97 COUNT = 46 -K = 75739c1ae5f6a3c151de5739a942b41b -C = c7e556f823e29ccad6ee1488cffe5763 -P = 2f +K = ff95e7c1a69148dca7d6c399a0553aa3 +C = 8c1eb17256f46492e9431b5dd3ca9399 +P = ee COUNT = 47 -K = 8684a28d0aabf5b00c61f9d9cbf476d6 -C = 4e4fafb402d678a569567f8920f56e21 -P = 77 +K = 272e48cfcf98a639660ece340773be9b +C = 18b80df6b6c73e6c590e211e1ba16455 +FAIL COUNT = 48 -K = 8029144cadc3c2c3bbecfcdc82687607 -C = 8e411976ecaca9cdcc1cb8a067d8efbe -P = 84 +K = f2e8b7a547700bf0503185965fa0d5a4 +C = 359459e1f46e08a711d597b06865253b +P = 39 COUNT = 49 -K = ff57fc12836b5bbc120f35a34114c0ee -C = 77aede7d1f1f4ba664baa38e10e2eab9 -FAIL +K = aaddcc48773e8ced4f709a3e9950cebd +C = e4c41c96794e253f7f3d4be4124ec282 +P = 4a COUNT = 50 -K = 0b73baa0b475505784b63eda9ce30dce -C = 1964172d9f0fd303b5c37875fecddb92 +K = 895eda6cb1388c7bb4bc58e90ae9db3e +C = 8f39ba35cb8160c9b86a909bbe3fe9d6 FAIL COUNT = 51 -K = 9fd50770d0cff8bd6022964ae453d2d2 -C = ec4967d9ab3241d432d982fb8f7c6281 -P = fe +K = 870f3c7d87e631c064b3a5141275ba10 +C = d2db8c5e430c10838cc773b175a7386a +P = 01 COUNT = 52 -K = 5e827bf4e2db6dec5694849c36c6cff8 -C = 3d7a9ac61587928edf86152f44ccccc9 -P = 50 +K = 3c0e9643239eaf8d9a25c538b153e075 +C = 7735d310fe4bd624156b7bbb0616a5c3 +P = a5 COUNT = 53 -K = cfb51e7a30a577599e6efb2ea9efc5c1 -C = de1bcbc2462cc16f32ad5205721c887d -P = 86 +K = a20e6dda0beae9618ed957061e9fcb49 +C = 31ea9f4ef2dc57cee11e98d19ca33c8e +P = a6 COUNT = 54 -K = a6afa2197dbb9372bc9342cd8ae013a0 -C = 2328424d9ff5415678d56038bbc9ed55 -P = 0b +K = 06116cab6c94b19a9166919b3e1c5408 +C = 3161991c6a9cb534a66fce9a66a6d633 +P = ca COUNT = 55 -K = 991708af8073c8e242a975f9c4fc69ee -C = 6d81da9d63d84fdd66605704c7d50536 -P = c4 +K = c33e79d7fea5b1f3c3d54ba21b73e05d +C = 19628183a19f9aa4ee4d7730c0cbb6ef +FAIL COUNT = 56 -K = d77f0c6543b3cd73d82cae16749ac6ad -C = f814be152686d54613d59c1e63e42287 -P = bf +K = 8662ff14cc27bd5f3e7d45027f87ad34 +C = 5263468b643e15485a9deb64c09ae220 +P = 88 COUNT = 57 -K = 7d26fe2bf62d875a1846f86e4fc18c84 -C = 7a2469b441b86babdb534c9b76ff766b -P = 22 +K = ee18195e740bf83512e3deaa182ff6c9 +C = 02548ea7b5b7b3228d868bf4bcf33dd2 +P = fe COUNT = 58 -K = 69366facba417dcb4195ed0b30081bd4 -C = f82740d1866556079b4005e9de3c8348 -FAIL +K = 1861eaef11320d96c03d942349cbed67 +C = 6332cebc1526a73589fa8df1e58b9d22 +P = 96 COUNT = 59 -K = 094d40133b842f14876b7696fa2e8679 -C = 979d189f7d712a651b1b773af5807fe5 -P = a3 +K = 1712fca9b528663f39746d6535967dc3 +C = 5ff19d8e75ba2273b03eee925b998cbb +P = 82 COUNT = 60 -K = 3ea7ec76bb1767bbd97b2ad82185ace6 -C = 7c02ed1f1ea8887768607a6c2851111a -FAIL +K = a4c017cc0616b962418ad0302105da09 +C = 00efce6fa7ab942fc39a134ad79f397d +P = c4 COUNT = 61 -K = 4073abf8e5bdc9d01a14f64aabb2edd1 -C = d17a92c442e5754601eb7f6d943ad25e -P = aa +K = 72484dc05874445403bf567d53ac3a54 +C = 8ac7ed00ed3c1dbbd632827a7133578a +P = 2a COUNT = 62 -K = 3e9373b33a5e63f597e8714ccca71304 -C = adb190084a0e16e483f382b97b6b1f49 -P = 16 +K = d20c105aa5d52d00bfa5b0218d9b6fd1 +C = e8ed4d4267062bf459481df29ace1053 +P = db COUNT = 63 -K = 008ebeee222f110bd676f12cd1def803 -C = 0f35a0a3ed5da48484de5f323907aaa4 -P = c1 +K = 91888395d49ec981744049d4bdd21307 +C = 673b0997107129f9776765422dc58d94 +FAIL COUNT = 64 -K = 81ccb2e5ae194270734e4d106d86ce9b -C = 04d7b08688b23e7be6054b74cb4ec407 -P = 76 +K = 39d2c27b1caf19f88f57b5ec9075621d +C = 269260ad1d6b60a23212b95473bd05a8 +P = 60 COUNT = 65 -K = 6c817cb9f4d2ae402b8abf5ba5553e9e -C = 7686f2186ebb16e206fe190803c9791c -P = e5 +K = 8a483fed0c078238315ef7279335f22f +C = 85e6d34aa43094b95d9e941217717a90 +P = 7a COUNT = 66 -K = 43a0eed7e7ea959aadab34cf969e343d -C = 268572972ca48cc63465d0405a0138b8 -P = c6 +K = 2c241479693d9c9d6c7e381b59a18371 +C = a0371f14e8a354cf6ded0180675d74f7 +P = 4a COUNT = 67 -K = 30ba1b2867df30bf973cb90084f2adb1 -C = 7728ede402e8791d72356b294bd6456b -P = 74 +K = 8bc61ec6389daddcfd464614b102b7e0 +C = 5baebba46a36dbe03816f4b62e5e2ae7 +P = d6 COUNT = 68 -K = 6302626f1dbeed80f281eb80e76d4635 -C = 57f717899905f505cb80978643d8f926 +K = 9477a58a5148b899836e4fe8f6a8c0ce +C = 0fb26d212ab90f9c6c5da679faca62fe FAIL COUNT = 69 -K = 7b0c51e55ff4620e65fb903d3d98b23b -C = abae47c904027e3dd6c223ba8b7c05b7 -P = eb +K = ca565ebab4aa5ab7862d01074da62a9c +C = 6224db0cbb4a106a0033ec0d11101749 +P = b6 COUNT = 70 -K = d088ea7e45a99aba49d23c94c4306d0d -C = cbf18c8c9c6622a83c5ce5d4ca3b1825 -P = b7 +K = 51c03cc43ef702cf4119fbdd099980b2 +C = 3016c9c8d271cb016df29ae85bc073f6 +P = 3c COUNT = 71 -K = 1b4f78d87ed1dcd3e8bc75db16be57cf -C = 1fcf56234e8f70993854043fd21a58f7 -P = b5 +K = 954abf825c090da3fe1ff6405ecb24ff +C = 73954195db5b0ebfb755404053a879db +P = 18 COUNT = 72 -K = 5bfc6fb6c4fb2bdae7d508752b7d31e7 -C = bd84a17a6fd3b9d948f68cc35a7d153a -P = ba +K = 59d17ec005165ef5207fb2014cbd7827 +C = 1e8c57bcba65f7b962fb4b2e48253e56 +P = 2b COUNT = 73 -K = c30aabb7333917421964f4bb950ff03d -C = 6646e77c41c8b5e88fc1004e3186662e -P = dc +K = 49eae616c7432e8c4e4b324ea1b4c7a7 +C = 11b562d12f952ea1b20f1d942eb1207f +P = 33 COUNT = 74 -K = 8d465cbb0a089c3c88724e780aef2205 -C = 0feabd152549bf37f69fb8aee4e87396 +K = 56b44f94498b9b894f8c3893929fb0fd +C = d51a58038ca4129579eef9399e954177 FAIL COUNT = 75 -K = 40adf90f44823300a5632ea6c593c31a -C = 24680221c37a95eeb698c396f2693235 -P = f5 +K = c03ebcca19ef852c40579ca9963db16b +C = 3bfe581dec1526f7c3a094109696486c +P = 06 COUNT = 76 -K = 93fb7bb62e59bc3282b27dc710b14f53 -C = d9e86983112726fc99e4437a17f21da2 -FAIL +K = 8f52e72dd5f57701513612863787f152 +C = 7b6af5f120b42d638278d9af225cc7e2 +P = 52 COUNT = 77 -K = 231f52bc0eed3ce86ff490c99bc52b25 -C = ee229c8e8a20fc2507dcb286e716ef7a -P = 7c +K = 625704fd43e7a6f6f9f3f8a79b93abd9 +C = 24e996e061660d04b7cd67a15d0fcd74 +P = 4f COUNT = 78 -K = 99fdc6bb00cfcf19aa6e331b6f549548 -C = ab29b352e6719521940e7d059971cb21 -P = 80 +K = 7cb21870b78504627f63164b30d084d2 +C = 115fdbe638398ccdcbbd6655da5f1799 +FAIL COUNT = 79 -K = ddd5bd471efd992223bd1d76e8825d7f -C = b540647a45cfe6ed2646c34a2752b376 -P = 7f +K = 01c790d203539b739e5314a48f662166 +C = d1f351570e0fc63c4a75cd81c44e820e +P = 1b COUNT = 80 -K = b5ab94c47c27aa0e069d1e165b4c85c8 -C = 6fb84fbf47f5e40882a936ec71e211b2 -P = 1c +K = 875887d1ef07f106224b74275feb6fdf +C = 7c2bd0350d16c6636658087e8d361024 +P = 3b COUNT = 81 -K = 9a74bde1382c7b7892dcbbfa1cd47517 -C = cbb373da0ad44a6ade009fd09fd3089d -P = f0 +K = b242cd4045813e4a39cbf995a927e4c9 +C = 5449c41b8188a1aa82a2fe7e0183f215 +P = 76 COUNT = 82 -K = 1201fd3da6565b9125399da4e1aad8f1 -C = 317650008d76df5e9d59be2ca4e034af -P = d7 +K = 823799856699dca4f303a7fd67d8b9bb +C = 450d3216f191d8bbe823d7c016ef2148 +P = db COUNT = 83 -K = 4e2b087035152bcd209774ae8bae3d8a -C = 7cda7e888f663f31e3bb986b2ccea44c -FAIL +K = 1b74c51da5153ab95b5238b1e7eb0a67 +C = a4fdb4edb5effbf7f2e5133a07b2c0a8 +P = 4b COUNT = 84 -K = cc0fd5ff2c81aef0e0522e81cc9f7d1e -C = b15077e88c573d1dca9676d23a7c03b1 -P = 4f +K = c76666fde94515ceb160759edf07f736 +C = b6fd94f32ba17268173fb22e347f9006 +FAIL COUNT = 85 -K = b6c5296f05972bb164fbf76b778220d0 -C = 4cc71f6a190e6ae8b31bf02d1f1b81f3 -P = 81 +K = 5d8507cf562b9043809751944f7b52ab +C = 2b7daff75754e7afd0ab56f03e90fdfd +P = 35 COUNT = 86 -K = 9793085d1ece15a21740cfc21946dedd -C = 004e879ba3ff62a8afc2c612c3fe32eb -P = 00 +K = 8b46855a0a7f6f2d2f0d3176560643a6 +C = 5af5183b67ca79ae070cd740d04bcee4 +FAIL COUNT = 87 -K = adbfa1993d40a03a4982242f13bcba4d -C = af5d848a4ddf1ed2634db0b95729a2d3 -P = 01 +K = eea8259455d12813e2f9115538688c60 +C = 593bcfee7b72ec13398472f427e38070 +P = 27 COUNT = 88 -K = a700459044f7b3d87010d328161c44ee -C = 253efe2b3c0a7b30b7c2e5e26c4d2673 -P = 97 +K = d3e0ec2f46232c9f8c7e5ff67c679d87 +C = a37eded3531b3f6e5ef232c2a6dd3ffa +P = 60 COUNT = 89 -K = 1515b3e0f0c1c0df7841e09912050b31 -C = 8de2d83d6d3389697ad5e2f212c184ec -FAIL +K = 862b01ffd4c24971bce3455d21826ebf +C = 44709714eb233ad2ee58d2b282d09ee2 +P = de COUNT = 90 -K = 43c7b407a50c7f9c3e8983a717835b6c -C = daed3c57e6646d78fea42ec664b21a50 -P = 76 +K = 3895e27d2654e239780b0043f8b6610b +C = 31a744b72d0b3313c0d0b19609e87282 +P = a9 COUNT = 91 -K = acfaae6248706f97714884273cb07ee1 -C = e3da4e2399640ad3a544d216fde8c1a4 -P = b6 +K = add32031732eccf038b4fb0b01ca3ffb +C = a75262f4913e139338b905683d0339d6 +P = 68 COUNT = 92 -K = 867a4b936703db7534b52c8580da3d16 -C = 865684ddc91d40b2e1482461257afd15 +K = 3caa14ec0a0e3bf833f5369fb08fd10d +C = 802885ad23c7bf97d9731e4aa321dd8d FAIL COUNT = 93 -K = 8cbc3e116aa6eca9589b157b1001694b -C = 8b4500479a1312cca46eb2a4b97be2e9 -P = 9f +K = b3c616a8967bee546285291c968db37f +C = f29781f0118c9f260522d01393e4a2cd +P = c7 COUNT = 94 -K = 17cce367c9aaa6af022d8c8a9d654bbb -C = 8a52ecf532ea1788f7054c702bb1a576 -P = d4 +K = 645f0c4cd3bb42c9cb51d1a87c52a33d +C = 0189096aed2925777b4dba5ecccb69ea +P = 38 COUNT = 95 -K = be7a99e28bbade77ef84d4bc2d53c192 -C = d9c57c2c752812e54f0e0e702aef31cf -P = 3e +K = 02eb049f8ca35952060004688a6c6d60 +C = a737121d338dc48321264b3a49cc309d +P = 05 COUNT = 96 -K = ebef45d27ed1695545343d59b00baaee -C = d76a6fef7e691007fe58aca44e500430 -P = 88 +K = d7baf19b50efb1b690c27365b5f84aed +C = 0cd23561c6963f8b40df5533afcbcb81 +P = 96 COUNT = 97 -K = f29a6719ff9105dfe29727d9afae0588 -C = c8e07da64ad5ca37d87de32cf80dd0c6 -P = b7 +K = 7c4be0332574041d315daab8f1dc40ee +C = 4adc2a1bb55e4bc811a5de316519a8dc +P = 1f COUNT = 98 -K = 06f266ec673331fd8574579df4cd390f -C = cb05a2151f320b0a183e9e578b302487 -P = 13 +K = 8fa47067508acda28dba597939c571b9 +C = da86aa61b2c2d232654baea4de937211 +P = d9 COUNT = 99 -K = a6b6bbb781d3e1ad66ce43ada7134b2e -C = 5a8761ea76a776166070d0165501884d +K = e8e668954ea65d5db298c9bb773c16ca +C = 6c29be79f78f770f052a1c46b57fde90 FAIL -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = d88b4a2e5d5c0c2a8cd077a196726379 -C = 1dc87a4b21bc903fc1f232d9497c29192ff5c118461dd752 -P = 89bb6c2a23f47bfac5 +K = bbf0833cae0202b830f7b9575596ef2f +C = 4736f4488b53d4dc27103e2f2e7d6841 +P = 490f98c607fc7bb6 COUNT = 1 -K = 049fe749ecd0d86873fcfe03a8e444b7 -C = 8ad3782a87db8f5342a11472c30acf1c3544f4c8c426d3ec -FAIL +K = bf6eac232a4a09a1a2a54560979a052f +C = 1d308e5d43b9815ec2116b2afd386d1c +P = 2e87831cfbb145bb COUNT = 2 -K = 261783b328fa122b933a9a57047c8e9f -C = 026a1346a3c43585588a930e4734e196fb3809928e2d45a4 -P = 9eeb9b534d204d2358 +K = e7bc63f2ad744ddac0def7bab53b7930 +C = 6bd639fa8d813458abf2b8d81d5bd953 +P = 2cef076601098f37 COUNT = 3 -K = e08fe01e30fa49988c2e928609e9efd0 -C = 78b3da6ead8bbe73fa73b050f4ef4b1e0032b9cb1bc8f398 -P = a5b51726fa61b0076a +K = 371e3133299d024bbc0f621a6a60eed8 +C = 5b706feaf763c606a5ca42b9eec395cf +P = 03ea11735f4ce573 COUNT = 4 -K = 6e07fc08de34d4da10e326cca64deebd -C = 48097415f3bfd7792a4bbd8df5adf2462967f890714151ed -P = f1a8efd3e179425e3b +K = a8ba81b7b5beba13cf2caca84965d675 +C = 82787eebb0fdb79283fa55e8cfdf8566 +FAIL COUNT = 5 -K = c5df361246700b3ac26010409a64df1d -C = 78492d58e696501ca44623745c7f3d89cf1a8a8ad3929389 -P = 81d5670826e179e833 +K = a099fff482dbaeb53aad84f81b916da0 +C = b831c7137facaed059cbf268767e230f +P = 0d24299443bcc444 COUNT = 6 -K = ca38da3cb1014e12abc3581867a70f90 -C = 07e758ae4bc94d864fe2e241293bbd5aa180686637fafbbb -P = 05182f5845968bd0c4 +K = e7c584f4e098ead19f684ed871f7c6ee +C = 228a30a864e939db99c9a78f36ade8af +P = eba15897dff721be COUNT = 7 -K = ee9bdfce4c9e52d6cc2b016e30633ba9 -C = 5d159685b2573d5ebe6ed780c5f9810068b600fd020504ff -P = 656dbde6fbf4dfbdb7 +K = 9ad15907cd05d77b844816b1dd806c92 +C = 7aa0e5d322363afbdd71b531e50d4935 +FAIL COUNT = 8 -K = d54a8d22e80aa561893822dcdb3b6e0f -C = df48211ce684d479bc2e658dac84d5b6324b00910da38624 -FAIL +K = 43c33935e109d5ec2a669c5d48591398 +C = 952202bc6f45be0edcae682c8310c332 +P = 799c45a8e1e60a8c COUNT = 9 -K = 8394aa312cc290afc254b0498d638875 -C = 11d9ddb0a7e3cafa7d076ebc4be90500bfd61a3c96104855 -P = 6874c5acd08ffb333b +K = 5ff4f4a2b3aea89c2da8d52cdd3845c2 +C = ada69d7b4eeb63fa773e007e546c8507 +P = 1d3dffa6caad2883 COUNT = 10 -K = 08f73825839ec315e8a1de9063991fde -C = ddef9d88439865b74035e519463dbb185e0774becc3475c3 -P = 0ddcb776f3e525199d +K = cc9f1da19b7a26d6fc8baf34c3b322e9 +C = 4151eeefb16a81e2aa5eb8cbaec46f81 +P = e533552c9ac97dd7 COUNT = 11 -K = b7f0835cf93d393f9785679000d892bf -C = c083b02f15d0fc162ef451aba9ebe4e38375545031216341 +K = 203037ced7ce2be288b25ed11e5943f1 +C = ddbcb014b9683c3c3f409995b05c8c81 FAIL COUNT = 12 -K = d862a8e920195d81d21aad68e67d994b -C = dc85fc072a6cb052b6f413f194eb6795fdaca7bfa96840f2 -P = dab78fedc3bc62eeaf +K = 369d410f6bc01d148cced45a673dc7f2 +C = 2a910a7e597da9bfd59efdde80c3a153 +P = 419105a02d2e30dd COUNT = 13 -K = 0cdf8b56a11e4e9560bda41d7cce4481 -C = ce225c520ae8c07a3bb111cdd5c246f3a21ac61c68724d05 -P = efd9f7fcac4fdda9f0 +K = be6b135f2b23a404cd26554539e2be13 +C = 32621fd038414977bd89940c339d58ed +P = d8a2cf4bb4fc1230 COUNT = 14 -K = 00b732a1b9c7b6995240230c1f8fe6a2 -C = c934f89108e6f9f71a2880f7d93ddbf16a28acac1d51f9d6 -P = b9260d72d9b85acb06 +K = 844a1cb1fb110c948b54220e3bc90c14 +C = 7347f3833f7a299391c72481a26733c4 +P = c737380e3b6ba1ca COUNT = 15 -K = c5067980c134a77096fa1f1a9e428ddc -C = 190e17776cd5ac0641e4544ab0c693445af9798618c073aa -FAIL +K = cfcd778fd081858920d575612cc0e23e +C = 36467805fd4c47c35163cfd58ec0f79f +P = ab97afda2af5860b COUNT = 16 -K = 3e9bd679d7216c1999599f26d759e800 -C = 2223f7acd579a526d3a5586bc669edeb1f6f13dc5eef2ad9 -P = d0cfb7aa78a9eeae85 +K = dd0b875c100b8a6af379edc36f225fa3 +C = 7134d3969ac622e08383f2659b243237 +P = ad9d8878d1a86fba COUNT = 17 -K = cd9d683a32e9c70020b9fb891bd54b1b -C = f1659ff094f940a693fa01992bfe577ea92998f27c8f3f25 -P = 80395878852661ab62 +K = 3b368a6808c811cde861c24da96b0573 +C = a6858ff5eef3392f03fd21c5604c183b +P = a093fcde013dc916 COUNT = 18 -K = 0c00eeb8ae9e75848739047a6ef42625 -C = c0f9fcb0f153f4b3311fcea9e5ce902ccde8e2e6530e3f9e -P = 8887c62dd4933d7096 +K = 4ff0962c18fcd41296aa9e07c8effc60 +C = b4a8c37137cc2f093c9f4a097009ec23 +P = a187d9d74fcb92e9 COUNT = 19 -K = 98b23888118b8dd9994f2459fe20612f -C = bd735829bb28d153f89adb2ee7409a06a748f274ba2bf30f -P = f6a9e964d9395182d8 +K = 5f2a81d0baaf512fbb352714a7e5f365 +C = d020c11fca246ca4d06b8a0627e36b05 +FAIL COUNT = 20 -K = cc0bc87f511f6eaafa034b4b9536992d -C = cd51d7333b047c8d64fc17028094a8b443c4318774692234 -P = 9ffaef0c62d3578261 +K = cc1e81478ebf690cf8fca5f4043e499f +C = 38fcaac982b2599d4e22269bdcdc6939 +P = cd0c7ba9a9369c8f COUNT = 21 -K = 2ad16dc41dcf9a4a3fca9fbe850ea005 -C = df748da789f900607b2f15d90a3a1a4f55001b70e8c417ba -P = c849f4cf0a63c34342 +K = 7e6f4bd6b14e33929a506d6266cab0c1 +C = d8d199aeecf18813723ab69830f8164a +P = 7db9d4c676499741 COUNT = 22 -K = 02b671827968580521fe1830b6972ba6 -C = e0b50551e7b97da86ae3aa6e4a4155a0d403ea4da72f8c49 -FAIL +K = 126a4348ee3e370a552954e1fd3274e2 +C = 872f3ce2f99124cb6a93758ddb7f3ab2 +P = e417a10407aa8704 COUNT = 23 -K = f9d3dd8e38e5f8f40eb489151d900db7 -C = f90c473b931cbce5e5acbee02be8c2f1b8bc2579a3e14885 -P = 6ac0acf6cd6f07daa3 +K = e4ac076e51781f025953a68733fc214a +C = 423a2061fd2e5e7acf2a48ca616e318c +FAIL COUNT = 24 -K = 8c6d99b3727e9963bb39e7fb9d594dd2 -C = 1ae98f8539f2cb81bba0b7936f363537b377b26f4900e155 -P = 093f0b902abcbc31d4 +K = c498d8ec573e2219e45dfe72049cf3fb +C = 29fe1fa0c3ca9832f46b786c18983b1a +P = 7d6a3dcae7c85faf COUNT = 25 -K = 68225bc6edd3ee9ec78a5cae7f2a6fa8 -C = 69fa867a9eb7c08a6c8238d725d460c632803680b37f7917 -P = 914914f1007c4cbcff +K = 810a3374c3c7d87d2c8a93f0bf23176a +C = 77619269d6be6745b6786e23dee908e2 +FAIL COUNT = 26 -K = 0512ff80d424e80f3f4c29d2f4d67827 -C = 8b58ab56b13967aea97064bbc2fb7d7a90aaba8057f0b03c -P = cdb9db4cc5b8b10112 +K = cf85a371c08e748d032f1ade906bf9ca +C = a886470faf1da61b096941efb606cdac +P = 5c22a9a1f74da9d2 COUNT = 27 -K = 907b144e8f370e08322b60841b91af11 -C = 282512437aecd9a5aa9b036eb3e6f3ac7da29c45087e8b43 -P = f0334f896122135106 +K = f98564443ab1a2f77412b66d4e18b299 +C = 9410d3b1cb85f11e4ee5b111c6c68952 +P = 825f56b0baf25985 COUNT = 28 -K = bf048545c14838873b87d3840c7e19ba -C = 8342b230fb40a51254b8985c5522854a1a15af65c739dc7c -FAIL +K = d1cb49a3bd431653b85610c7dddcc961 +C = 1de5f06fa7c3634fc50fe38a0fa09c59 +P = 8a504b39c171ecd5 COUNT = 29 -K = 20af1f56e5af710e25a11e1640ad60bf -C = 051b171b0e89862b26d54acc6366986f79878e8f982e60a6 -P = bee88ae6563f9bd491 +K = 6ae2832c8fd54987a392ada93ef02aeb +C = dcefd01a283cc693de028d36672d134b +P = dd7e25cfe3bf9cf4 COUNT = 30 -K = ca1089506371cd8817f349d7944ca94e -C = 28bb61d2ddc088e6b56b76a3f36dabf087530901f0f86235 -P = f626023072e17ca3e1 +K = 6ba0d409d3b0000ce44d926a78c05e4a +C = f6ac9015f316b85f970a6ba2abebd22b +P = 38787ed956671618 COUNT = 31 -K = 0c5b80b6e5ea4e2d345c4ca787d41935 -C = 67f36cc12e6557aca6413172257abf03f640202b05c7d2fa -FAIL +K = 6f0291cdfa9df5b96253d34d10374afc +C = 007cd3f5fe2e93270707eaf2e5a22431 +P = 9b30a4841b4c79e7 COUNT = 32 -K = 02591c770d020f9e139d85cd6919652e -C = 8089b738ecdea5ac92eb1a62e37ee345b012ed8014d02d54 -P = fe6dd2ee7dace24f44 +K = 84a5a0b56cb06bf01fb74a936d9a4e67 +C = f1b03edb385907194140c859097a2a34 +FAIL COUNT = 33 -K = 9b46b9494539075ce608393657a65512 -C = 7180f57cbe7642a34db16088711fecdcea1d2dcf1dfb330e -P = 43800f481acc9cfa5c +K = 82b30824836fbbf653ebc0abbdd14899 +C = 22b972f07f96f5e7d36ad8b36e52c44f +P = fdba8fd8a73d4cf2 COUNT = 34 -K = 39c9dcd213addda85377b2bb3ae40ca2 -C = 54741ff62bf698e82c1f14379584955e5d5a89bffa8fcb3a -P = 5f13f2c24511b78446 +K = acdb153e36a14efef6cb00b5228f8a97 +C = 2efa6280d85e1fd48a0bea0717a75b78 +P = dc67961653d261a9 COUNT = 35 -K = c1395d9fc87e0981796565e9765c22f8 -C = 3e58772fd1c452e7bf8c7c2b5474e4d1acc46747f93093f4 -FAIL +K = c8e1e26a1de17a8dfaff44b0d8291b39 +C = 1c902393639637500788253f1518a762 +P = 528c92723aaa8a66 COUNT = 36 -K = fbf2254f5ea526927b33a5a465c5e2b3 -C = 0066cb847c1e214f50db4594d688130415b101c8ab21c967 -P = c2b8bdef07f6b54cec +K = 3bf257854dbd24b34d8ce0485f7748cd +C = 39a3818d1e0b3d85ca0b8580342eec43 +FAIL COUNT = 37 -K = d8ca225432e349a612fc95056d636bb1 -C = 1617fc89188070abef18e740ac7b8f6fee79eea89dc8876e -P = b96ba5048f63e0e5ec +K = e0ae9fd207d52660d3afbeb4036ba166 +C = 471faa150f8f8c1bffadd584414e9c47 +P = 6128d12ead813c16 COUNT = 38 -K = b8b38c72ebc374bbc5b07147529b46d1 -C = e88cbdb2cb764d9874384be8364d2ae1406c954de14262ec -P = cfbff8cafd05c81c42 +K = f6c96f13c4a1b01d107abff1e2ac09d8 +C = 006241f93f2ecb53554397b527c0196f +P = 98314a84edc62d91 COUNT = 39 -K = d251cecb816ca27c3d4761677e01afbd -C = f2aa4f6f962dfd84c0e7fad22cfd35aaffa3bbf272f2094c -P = 9c3358700632a016f9 +K = 64c8550f029745ac898fce8753cd19ca +C = 74562d1f411c1dd430b07932176a2cc6 +P = 43c5a4aba16fde88 COUNT = 40 -K = 518b8eb53ca228f15267b0945a701fb7 -C = 16532af8477e8839cce132c52bde08456bd8bb1bc5f311ec -P = 0beef79034d6e4bff1 +K = e1a94accb3099befc3c319134e630e27 +C = 306f86bd73ecbf5916802ada22685bb2 +P = 098af4d5d2829f2c COUNT = 41 -K = 37eb33da0f2b1b9abe23344b5f2ef8f0 -C = 1845d28edad1ac070876bedd018a61f9ca947c0f33abaa4a -P = 2b5909e28e6efea754 +K = b0fc5206081138d3bcdc0326d350655d +C = d3c09d11867ab10a4ed6fefa6492d304 +FAIL COUNT = 42 -K = bea0483fe361c43a9cc5bab59cd7060b -C = 0c1e3b5e4d0365c2a697237ba37633b8bc290e7f78f895c2 -P = 876613d859e5a55a93 +K = a8a8bf456b71fd5288e7d8a6bdccdf4f +C = 6c9f9751e5fdffb86b70a64eb9b4e9b7 +P = f7c71a7fb04e1f83 COUNT = 43 -K = 735d0bc07f80588a58a52b21da1a4ee8 -C = 13c80c8bbb57a85bdcefbd054763a15b830faa5a9f5449cc -FAIL +K = ca8dd7d43edf66fa5bae4170e53a1dff +C = 65c242b7da1b7c29ed3b73bcdde30df5 +P = b506ea40ce32af45 COUNT = 44 -K = e1ea9bd17854f31bb03ccda89ba38218 -C = 782a667da1ac57599f1c6a94d337f8e89025cc8248240791 -P = 7690296cfdb1b9ccf8 +K = 1dc4200fafd43264a281473a4e11ef1a +C = 6d270f4ec3a7614ca29684ea1b2dc3e1 +P = 6737c164af61eda6 COUNT = 45 -K = 12c4756bf6a00d58bc3bdb447ba0a466 -C = 8bf31b11076646e159312654c900829b7024cf073b691539 -P = 6f45e542e0712f93e6 +K = 7c1a86429444761b4fbd253e800a8dec +C = db4b66e57e52ec48ae2804eba1408d43 +FAIL COUNT = 46 -K = a9f3f6a0e5f0e05c12d3f39292def98a -C = 43d36632019716d849079d51e0e105bf47f48b703b2a1f32 -FAIL +K = e09d6f9c5c321341917489f8f530770d +C = 8585199e03d1e8340b1cc3fbb0eb6ce6 +P = d912f1c504485bb5 COUNT = 47 -K = 1ed6802d284c913f689729ea7d9d6d23 -C = 5f29a1f4cc01d5e59e3edfe76ddc604b80cd92f54af24107 -P = 855de4e30e422f113e +K = c7cfe0a5adcc1466163bc8691c7ff618 +C = 35cbead858e1a56e2f9c7baf0d2b265e +P = 0a442d9bbb40c012 COUNT = 48 -K = 34846e03e04064173ce05fd153576dd1 -C = 63263399173f3bd06edb454f189b0d062c7ed2edb178ec97 -P = 906bf3779fa18ae512 +K = a18533b326f1851569acbcb985839230 +C = 9188fefebc7aaecfeb9abad0fd850835 +P = 886d689ab2fc5d56 COUNT = 49 -K = 09cace144d8d50bc38b5f2779fb8f533 -C = f698782276c59d9f2c4f16edc4ea99dc4116781de93da275 -P = 614bd37736fd299887 +K = ce19a4c7e6104b6dbbff90501025f2ab +C = 63d2aed45d03f37266e72077ae5b28c1 +P = 742c683fb02f451d COUNT = 50 -K = 1e745cc2bc8f797987177ecfe3200e1f -C = f3792b9941eb06165346fa682a20a40682a08db7d5966235 -FAIL +K = aea672dc38d0f0879dab0b83643b9145 +C = eb141cf66ebb82980cd924063a38185e +P = d15e3eefaae62690 COUNT = 51 -K = b7af72a1c3be27f73922c184079a4220 -C = cdb430635434606730716be69a5bd63dc6e69a55da33e65c -P = bd1cb93e3af791a843 +K = 16b9acb34df0e6d7492cb2899dd43f1c +C = be29fb3bcc5ca0b9310afc2e92466839 +P = 878e0492b3ea812b COUNT = 52 -K = e7bf0bd46f71c55fe462599cc0c7f3a2 -C = a547233aa0c86313603fcd9a10b3cb4c1e8bcb164d205699 -P = 98a47ee33a17d0cbf4 +K = 18d7fba30acaa90c9a08ed10cfded291 +C = 8aa003861d9851ccdeee51c32e9679b2 +P = 98e810ea38c0b088 COUNT = 53 -K = 77acc31c8247a276a1acf139bf777cc4 -C = 3dd8c215e051b558f74b8c015ad1e9f96b5ad757bf753d01 -P = cd72c973f57ab8f14c +K = a1474092b515d357259a8e455194807d +C = 81ec351642cedfb8ef2bb2d5a446bdaf +FAIL COUNT = 54 -K = 376abb7196aaa34ceb3a8b9282869e8a -C = 8c534c52f6f4995e66004d59dafac9acfc5eca51f3781641 -P = 05c863586350abd22e +K = 43c84f699047594e8e0a6b5a2d12c4e7 +C = e663272c493f8a284178edbf82e1763b +P = a560e9b5c101652e COUNT = 55 -K = b03b21c4efc8199c360551852d8c2684 -C = 8d0cee3c6886437987c2cf8fa5695dc370309730ffd16117 -FAIL +K = e252a65b087e6eee268f1986054cc888 +C = 18307e2e3011434f5eca5be3404d6503 +P = a318365272c43792 COUNT = 56 -K = a37113da9f101bb8c5d19a4998b88361 -C = fcfa8b182f9ba7d03da4dfa02c47e527ded21a3baa1fb037 -P = 4b84842821d3c3c7e2 +K = 67836817e8ed3b9ac9e5c37d1e04f0dc +C = 957e4974b4ca63d41bb5acf2b4f3aab1 +P = c69ac8dc4950e7cc COUNT = 57 -K = 1e9165e841b3298e86c04354479bfc58 -C = 8446fe3ae8e15ac3d9ecf8fe70e14ee030631a0fe03d2a59 -P = f4d80976e34d0cf62f +K = 6d08024779765c2ae51c3020c127e3ee +C = 65acb0262e66ef6c7c44d20469a2c529 +FAIL COUNT = 58 -K = c333e97728c61639140b7d28278b5b17 -C = 03fc2759a12603dcb81e275cb3f493b3f3c453a58099b784 -P = 9f9f91d64ffc78f696 +K = 0cac27524bece0676bdc572ab58b4f70 +C = 9c55537b7e857a20a241ef6626a6537a +P = 5a600aeb07518141 COUNT = 59 -K = daca9c6ea70047ac942e4918e5a9477a -C = e1da95b86ed0368f0bf2de5bbeaac21929e9d799daaea56e -P = 356a470d8d3f172478 +K = a9ec5ad1d84171489671781c836db588 +C = d2bf5d73c6495f92a4de9e38c77a5f08 +P = a43537ad592676a0 COUNT = 60 -K = 2e01eda519a30537efda68b75e55ce44 -C = 2346da28511160d2877fb24a87e161f8c0e75e3dad9ffb49 -P = 79409662bb8950e227 +K = f0610c355ebb45312418579f7450afc9 +C = b4051343168afb461921ba548f17bd01 +FAIL COUNT = 61 -K = 12f96dadff76c07def1ed2fbdbcd7b42 -C = 042dd1c3b880872d70ca9fecc96254ad962dac5df9b4c8e3 -P = f77f5d93c7a6ac0e2b +K = e54a665e6eb93f8d4749fae6eefcb268 +C = bd2481fa538a01978596d1ab2ab4ae62 +P = c2c7da0abb3ef093 COUNT = 62 -K = 662efd354b80d93b088e50954fb61e1d -C = 4d4ddb8980f09cde8f197a4231eefac95ad32a2b10850a0a -FAIL +K = 5b402d911817acb5835e92e0dca81750 +C = 1a5f46b3df35828629120c8dfd8562b1 +P = 8750220858196863 COUNT = 63 -K = fc5197c6a01c43339217a445d3bb0f97 -C = 151cefcb2b22084119923b5519cfdd460321f55081c9cd41 -P = 5a877d2c726ede2e4c +K = 134bde0bb69109391da018e29893837e +C = a78637e0ff79513235fbfbc694507848 +P = cb92a66b9778aa92 COUNT = 64 -K = d6af95d55ba2edb1ae5c277f371d9315 -C = 9d261c95f6e77cc407442bb5a563adf9b22c45722eae4114 -P = d702409f6b4377f284 +K = e54d5a613cd4bc13df0b90808eba8490 +C = 7dbbd4bab0153509e2bc576d307e5d80 +P = 6466ad1bf1592c2f COUNT = 65 -K = a88b358cc1bc48c4a69933c7aeaa893a -C = a2e161fdcf678c0b4b7dce326f706ce29570cf735f0693aa -P = e8fea7cf4ecb42146b +K = c8c6befa36e4ca30a5d2dfe0a1da0c50 +C = 39944ae6ee9da6e3842b9ff4f5eb09e1 +P = e24584b872be01b7 COUNT = 66 -K = 09d72098a849431f896e259b62bda6a7 -C = 1b714d8d6073350dc538ae6308b19c232d0d61df70ca8f0b -P = 2131a72408ed0a0c46 +K = da8697bd5efe2c5026316d05774f4725 +C = f11a5fa503ad914dc67100ec960194c8 +P = a33a5a492a0aa373 COUNT = 67 -K = 680bfec67da94cf87fa791e6c763d5d0 -C = 90e863ed90a4a448da883f73ea35e13868c49d6044adf74b -FAIL +K = 35aa5a13c81b11fdea3d73a266d621a2 +C = 2fabf39dcf402040c3cdff7852a8f680 +P = 0656a992293ec9a7 COUNT = 68 -K = b4c021542c622e4de824bae302c7b35d -C = 9c6b28f9db4931917aab27762d068ed66ba2f2a8e11d224d -P = de12ecc3a1707885b1 +K = 5b202f5490133ba9c5a5aac74deac7ff +C = b6827203e9d0db55821da2f7e7743e97 +P = 2740e5f0f4556d9e COUNT = 69 -K = a37981316b7548bd987a5ecc2d3339a4 -C = 85fec8adf9bfa70f6f04f64a210c869c87afd2e4474ae59e -P = b0ce49be77c6bb96ec +K = 5a87e30b4ebbc0852772e3c79925c46a +C = 0df9ab4365bfb97be7cca64f569f987f +FAIL COUNT = 70 -K = 743faa66e9378f89021a1de0dd24036e -C = c71f58180f4e321974efd41c24ec593047a1cc60175fb3db -P = 7f59ec1bbf960ac8ba +K = d8a7ab57185647c5cc81ca58305164bd +C = bf58d7db1f00699d11e6afc6b6305733 +P = 227dcf18764bdd66 COUNT = 71 -K = 9562597fad02e5f5c3b68d4f3389dc73 -C = 30c6b609e218fa426cf4251f6e4da3c26800b57198eb4be6 -FAIL +K = 900655ddee46a29c1a78c99cf95a9363 +C = 5ca320cf5b0417c1d5b75a5e1ed309b4 +P = 993ca3000abd8c40 COUNT = 72 -K = 5089d2d6d4bf1d64a6dc48d4c2599865 -C = 360eab739295b0c45c5c923db8aa63999b97e6f8b47091d8 -P = 3466e740964d1f746d +K = 9ede7b0300254b9113e195d8417b36ce +C = dbc612e077d55a4bd5e75d30e0407f60 +P = 981694dcdb8b06ea COUNT = 73 -K = 8422f7d41018e0069571f146c6d0c1f7 -C = 32088e5ae8c30da4ddf9d2844788f1c15dd47f26a8d7e356 -P = da8f2b4f0382128103 +K = 28fe7a00f3b3832618eee0f58a0b5a64 +C = e027fcb8fb3205861d1b9f15dd373d2c +P = d13df947c518030d COUNT = 74 -K = daf6e0d66e394097dfd2012f4aa13c00 -C = b1973fc341ba487da16d52b02c62f6876e3563b2806d707e -P = 82369303a79bdcd1d5 +K = bee072e714154f3b66d2222daedcce94 +C = 156d28b751002f8827548ab1500eae35 +FAIL COUNT = 75 -K = 30033fef5ba2d4c0fa23e1d13d975191 -C = b8b17a44f0bade24890dd961ec4981dbede42ea719aa092c -P = ea8b42de32e984f76d +K = 12878b87ff13fb95ed92adcd82853b9b +C = 9599d77145c120346e25c91e363bbed4 +P = ed67808a56c2b00a COUNT = 76 -K = 4d4fd11dbd3e8077397b29f13375d1c5 -C = e59aff23cb220b5f5f19f33ee185a1c071c5b35719bb1f94 -P = e59de84a2ee28ddb97 +K = a34ebcc013ec403d4b043d8c93e779ec +C = fecc4209982430f861355354a7341576 +FAIL COUNT = 77 -K = 21550ce8b0bec68d5b5fcb3c9bf23095 -C = bc768312b2d30840c25905db8bff811d143aa4554b4e3bb1 -FAIL +K = 4087051001bc95899367de287a605bd8 +C = 5c13a3598dfab1b181dd27f135f431a5 +P = d6caa0d34d681775 COUNT = 78 -K = fd68e7b9fbec7dc9656f36c5715709ea -C = 525d56da775b02ddacf89d3b319ca75b335035f9f3defd58 -P = 5a274c4900513870d9 +K = 185d608d48d754a17be97e6eecf31cb3 +C = 13d00bff07451e93aac3f52848f6ff01 +P = d050bb7a29e25a00 COUNT = 79 -K = 070ce590043d48381a28aa06ab331b91 -C = 8c9cf194289f55d664c47fec2910e7d45faee401a320689a -P = d0c706a770db74eb91 +K = cd7635e757de47f80b68a844f2150030 +C = 016213af9b486870928c76e4f5a69d25 +P = febf53558361b5ce COUNT = 80 -K = b81b8f5850e88c892c1a450cc3b58c16 -C = bbf98a46f28a4aa6d9b762990c31d701870a4d567f470559 -P = af8f1840d5e3f241ce +K = 76334567e24c8be9ffd6ffa5ca762b3d +C = d1e131fe41a9125927288ad5688fa8ef +P = 784f1d75b941c7ca COUNT = 81 -K = b79f9a3631159ece0a96b9bc202d936f -C = 60160b1d3ba48bc1ac21c30e220e58fc4ed0357f6ff0313c -P = 432d087d2ed7309d58 +K = 98db9d6f60909ecbbefcd8eb28448246 +C = 760cbd2aaa89c2a73ceca55a7e34a9ac +FAIL COUNT = 82 -K = 851dc936b0007c93b18076f7d69143dc -C = 5edf6525d85fc2aead151d08175dfcde7dd00806265c455c -P = cc7a36f02ee94b0525 +K = 343ecf1cfe1df42e2f330ea092562c44 +C = 388ae4809c233fa71ec15daba77952e5 +P = 3b85e5b34d539ea1 COUNT = 83 -K = a9e20d08c22002af856133834c325272 -C = 035337e0693c946925c71852180ff3910dc947d2701bc7dc -P = 5c8646178859f20756 +K = b952cd4e2502434c6bae5bacc976f2dd +C = 3034225aa6a95288eda2d27d085a51d6 +P = 651f2cb0a7238a76 COUNT = 84 -K = c76e1027e10cc270049d71eb516c301f -C = dbbee3314de3b697fc680b722665ef0dfb828a31a9a60356 -FAIL +K = 53beed669ee04a1bf82a66bb0f0fb0e1 +C = 1c515b2a0bd10e7719ee353b7b76e265 +P = 8eb61c2372ef71fe COUNT = 85 -K = 8eb57837e960d63cfbabdf842b246b14 -C = baccc6c59f70d5cddf0968be75267493f51aecf3dcbdabe7 -P = c46f8a9a1f650cc6b7 +K = 43edd2cfb7a7c45f0fae6bfba787220b +C = 3edc61767030312a24f77b3a92948aa1 +P = b5fc82796a4b866a COUNT = 86 -K = 74a44fb0222ee2dba9bdb964d1c16016 -C = 201ba987724173636f4e5ac7a7e276f0b6ee33d1590fb363 -P = 29275b965a0d1e1d82 +K = c6c5b9d1db2751445255e02996566a32 +C = 75fdb3ce3ba63595f7c0bc6a7bcd2a2f +FAIL COUNT = 87 -K = a207cf807d49bc38743d059cba23af69 -C = a984c90425983ba1c4aebbe557b2827aed4cd38bff748a0a -P = 6f7ba5cde88b547cb6 +K = e1e41128d703947f757d5d232ac4bd31 +C = f35936077a7e8776aaa942abc71542fd +P = 341b3f5cfbbfc9be COUNT = 88 -K = c1a8ab239bdf1789671826ce6b178b01 -C = 733781fab936096e50207500766752fa3624a66a5f82916d -FAIL +K = c568181a878c513fa63e9f96836cdda4 +C = 002922ef88135b7ee62a4f37daab7c37 +P = c3406061bdd66a21 COUNT = 89 -K = b84468189f6c207816a024ff46ba2148 -C = c6dfa36d66de488823287c55d9c34e8772dda5cb422dd632 -P = 67313efa1f2ecbe64b +K = bee9f169d00a3366930be25836ed082a +C = 44883fc15e2d2ac9c1c7c3d843c77eab +P = 1e8b5a40dc143f8c COUNT = 90 -K = 229e02d23438968f72260fe27315b934 -C = 72de4d7bf057fd64fa348bbb76f3d590a7507abcb889b491 -P = 3a48d8a6aaf21ee3d9 +K = 02ae509a43aeec54f30701c40813a77a +C = 62689bad217cabbe6f1f9dd6d231b30e +P = 68ca234b8d7b48c6 COUNT = 91 -K = cc7853e04f857155716be46817bfa390 -C = 7f717199f731e392e2f8a4a77c3e243a7fecad42b483c868 -P = 44f8da86ae3778cde5 +K = ec8b8a8cfa9cb759b6c2ff557858e092 +C = ec5e7329b28b9268f5d99dd77cef36a1 +FAIL COUNT = 92 -K = 0b9643ad944fdcfba31d0ea50a9eb9d2 -C = ae5524b1a37dff61109deb3be24fdd3fd0fbe8636afe6331 -FAIL +K = 7eaa4d905a0e011eb93ce81d31f7fc9d +C = 7116004f8db6bc15d29a0fe57ad40f51 +P = cc91f174d5a6d82d COUNT = 93 -K = 98de62e3e8903985e97bacf19b6982c1 -C = a6c3491ea49849cf1ddf420c22c3c675576f04c1ec478bce -P = a973e87b1a3581bdb1 +K = 0388911297580002f9bfeffa26e770aa +C = 5f7e76e5e4cf53c4346bf7632cd91ff1 +P = fb35aafaa348c4f3 COUNT = 94 -K = f4a71108b18e0de9b3ee52d1cc7b65a9 -C = 26ea0317c34a2f522363b2e20ab5ea3d441321337afcd9ff -P = 5144dabdfc2fd1c15c +K = dd2555aec7cacfcd2085cf71de0ee10c +C = 7632bb7062064dc9d9164cd3021faa25 +P = 4a28054c64e12711 COUNT = 95 -K = 315ae27af4f46902b56af667219611b4 -C = ed0cda482dbfd1c0f69aa4bc32295a0dcebe8be9883e4971 -P = ef1d7dcfe4bdeb85aa +K = 0c162f58e85baff6162aad87d304a961 +C = 88903877660da0f41f85c7960efc1403 +P = 09f43f471651c7e1 COUNT = 96 -K = 7ab9db1e450475df2eb05d01bda5db73 -C = 2aaae250115178a8a2046e721cfc48b8617f483de35423c6 -P = a1457db70c111e2234 +K = 77d13b22ab3b88dc22690a5229fa985f +C = f67bf562efff2ad9dffad8a570672b7b +P = da7d1cf9caa5ac81 COUNT = 97 -K = f9f7fb4c37f5293689e367aa44b8b1b8 -C = cc638bb2b5d725dd258f402fcf420bfcb814579507756c34 -P = 309cedd08d190ff48c +K = 0e0ae1e52cec47b4059b3482e2d34aaf +C = 48004175edbd5f954ad64918e393c58b +P = 72b76e15a33e11e6 COUNT = 98 -K = bbd0df56628be1814e3db32a4f364481 -C = 7dfdfdf8e4a5db066395b2afd931f7412d8b53dcb4c8109d +K = 3d2dbd416bc5104e78b45f46d98a2afd +C = 90931e11f8a7f9430f4aa370b99e820f FAIL COUNT = 99 -K = e86d6cee32128c12e8fb5d06b750778d -C = 08d573b86e2b7d49c79f7b393e27b3c96b77d31e95793936 -P = e8023b405638eba836 +K = 3c1883ab135b24e94b1b12312be69995 +C = c5873eee158336de5b9610023edd7849 +P = 607bc72a61b22b17 -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = 5327ebd212b8a4f7168af8f6d58d05e1 -C = da9a27257719dcc5b8da3d68de796147 -P = 0ceab40d +K = 4d49e260348172c38a79eb925b189b12 +C = 54755a93ff5173aec60d1eaa8fd7d4090f00f638c2831aa9 +P = 2bbe64479da7c45976 COUNT = 1 -K = 69b3ac9adabc213d436a1485fbd7cee7 -C = 9747ef50738b1440d51d3372033e9286 -FAIL +K = 42f6de787a35fe6d40ab7e8ac3f8df07 +C = cd995e6ff568b5675b4ebe770bb7767d320242c81446921f +P = ded979c17204f6254d COUNT = 2 -K = ff9c0fbde005eaa2003e5b2cbc555a66 -C = f3514e2932600a49bcfbf76f1eb06b68 -P = 85f305bc +K = cc65bc7c2e42aa26d0755072248e7b22 +C = 7449aa84e09d1d309d1c4e56037188cd1c0b16cd631d2eb4 +P = d768a2868b8b6e2ccd COUNT = 3 -K = 469916539f53a920573a69533352d146 -C = e538bbd56ea85b2f0850bd39db1ceaff -P = 8072c32f +K = 0ddc55414fb3e94d6527da3b022aa945 +C = a2d73f5557b4b41c698a4fa5964446391b10a45e094f0e72 +FAIL COUNT = 4 -K = d9397d94557fd70fcaf516f72b270f3d -C = e68d255384d22cf260a849b8af8f0230 -P = 86675d40 +K = d443602b6cfbf857395b025a7525a524 +C = 566cf2971121bacb9eca68c8fdcc2922b72d85b05465e87c +P = df5c553145d4d8403b COUNT = 5 -K = 70a00f4e0290e123d6ad7657a8ec1204 -C = 7d2cd168a00767cea26fd1ef8f414ded -P = a55df262 +K = 2005cbe9cc66a35cafdff1af119ae6ce +C = 60f9c736ec3619efdcc7cccc6b90ae5cdb8bb9eceea5dd96 +FAIL COUNT = 6 -K = 8cd8f15f37c2307a24c4f4e8d15ab041 -C = a99d02df84a49bd5a673c390d534ba55 -P = 797f9854 +K = cbde3e112260aa14ddec1a6507890966 +C = 2ea0dca88617b8d53a45ae36dd7b04212a40f838173fde23 +P = 0a6d7ff1f8cf61f47d COUNT = 7 -K = 3cdf311ba63880f72d86edbd583ab511 -C = 6648fa1429dd84a54af9575b310b49d5 -P = 0c492a36 +K = 112dcf0c4d63047a0ea165e9312be8ca +C = 5b8b5efb45b01dbddfefbfc57f017c77d3be4f544a3250e8 +P = b0ccc2cfe7d7dbfd8b COUNT = 8 -K = d25f6e2bfa7848451228cf2a0b46db4a -C = 80b7ef9702496ecd625e87776b380231 -FAIL +K = 110220c701aa30290f48a720a8a4c07d +C = ffdf1f1881390ade76116cdb9231a4f493a299f6da94511f +P = a6e04766df0bee85f1 COUNT = 9 -K = 4a36ce529c2be7c0551816f3df605a17 -C = d3b060b18d4435179880b639f3ad3332 -P = 0ab3655a +K = fe2c68361bcb12a6fd67c75ebac00b48 +C = f54c00ed8a8efe600e3f33c4a99e350703aee430a6f0f8e3 +P = c58a13e2cc6c868f90 COUNT = 10 -K = fb6b0e0640bb1f6f2083b9be16b12799 -C = c40b5fa75c836b237461b8d973165187 +K = 6dda75f92b8f1aee818c795ba3dba4be +C = 1d2641e63e938b365128fe086add34daaf4d12ba1efd0bb8 FAIL COUNT = 11 -K = fe376aaca771ac0ed4897f05fc1ab3cf -C = 9c46ff8d5893a9047ada3f82a369474e -P = 817e8302 +K = 8eb04189ecca06a7a6a754551f23340c +C = 078e1eb8ba2f808510422682410b3b07befbe5ba503ef753 +P = 9e3015c825fdd4b5a9 COUNT = 12 -K = 74c4ab0cf090c40a21cb0531ca3a1a78 -C = 155785bac20fde19a8933406ecbda357 -P = aaffd419 +K = 476461d9b4e7fc480aa8b8d8c7afd62c +C = ff66dfa54616a46d574c1f640f98c595065e5e67cfb583e7 +P = d12de7c175c9277b54 COUNT = 13 -K = c4bd3953a42baef2e37408424c52eaeb -C = 78cc2fa840f70ca7ed69b60871319e27 -P = 80954530 +K = 8839520fe7d3bd9dfcb381a2ee678f0e +C = e3174ea5f38dd818d210ceb5bdd7a9352d67b5ac93081b9a +P = ed910a4b7615188b40 COUNT = 14 -K = 24307cd66d5a56f1b8049feb16c7ced6 -C = 37529e2f58c63781870c95302707473e -P = adc3098f +K = 3525f4b148d7891a564ee7337843e2c6 +C = 52898f7500caf2c42d012057a83231b3e9a152209e4baf9e +P = 0e4455e2c9b29c6c01 COUNT = 15 -K = 3b7efccf7cc989846c6593b85e1951eb -C = c0ba6b4cc189ccf6bf93097eb05fcfb6 -P = 6f66f9de +K = af0d453532b41b025d6716ff355d699a +C = 853c5eccab83b4127a35ac303ea578a883e5cc36d4e72dc9 +P = 31328bfff8c1536cd4 COUNT = 16 -K = b7b40acbbc415c4ffbef2c163731826b -C = cc8391a9cfc5efb4d50c9a45a279fcd1 -P = c4d394c3 +K = 5442bcdcbaba659dbc247f375688c496 +C = 0a41dfdf41da1f38e39cd59162f850fa851d02de48845eb6 +P = 41bf777a0ca313060c COUNT = 17 -K = 4d81a597797426d957e6d8b1c0ef0230 -C = c3b580c3c389f36811becd60ca564dd9 -P = 8b51a672 +K = 08084d9860a50f6e4c838d28aa374358 +C = b1f02192151a08e72a831f02ab9146973af3d984ab49430f +P = 190d1defc56a144229 COUNT = 18 -K = c3ad7ab7daa63e0b52fbc640e6ce26e2 -C = 046745925a7c21d4b5632ddb652b38d1 +K = f6698813aa9f147d9b456fed24865def +C = 4e19bc5bafbc36e1542071fd1c4253a27134013b28fc961c FAIL COUNT = 19 -K = 0cc20360d0c24e7233ad733e1b026b58 -C = 50b1af37fbfdf120bd9ac7c2f898da4c -P = 265323f7 +K = d3bbbc62d921b0bd3308231f4400b5e5 +C = 3f0a5d137e93761e799466d4b366479e5d6a4e121b1c412a +P = fe3ce8e4f0b8d21ea2 COUNT = 20 -K = 2ab311a59b4fb7fbb27f59ef8b355595 -C = a3ba01079e9d5cb01c05ce43dbf0fd63 -FAIL +K = 20b3c9212eca141424fa2a42c38283ba +C = 305452f68b48be9b2ea45795c04a39dddb1c27e05a8204a0 +P = 5c9136ddaa4efb500b COUNT = 21 -K = 8965ea296cf8255b6afe2eb9b78e2b2c -C = 4737282c5ee08e8886112d4059e7943d -P = ca21d238 +K = b8b6a949a11a6746ca629344ac432682 +C = 85e61a2e7639bc5c611538a743bc7b52b8cfaf15d9e3291f +P = 9c8c61404eb656a69b COUNT = 22 -K = 1519ac6cbb08ad3b2ce354415ba1f553 -C = bc5dc9fefce894bcf0a68432729d0619 -P = fe81d2ff +K = 2e90ec3dcf91b289b508e50bade5d690 +C = 38a5fc9de64760b06c957fc454fb60ac673f7822eb8cf827 +FAIL COUNT = 23 -K = 3c6f93d3513f198ab43e9350a0d1ae9a -C = 63a0598ab60e625b8c3b5f52da76ec29 -P = 89594f2f +K = 548b9c81075a0997368ba5cce2d36228 +C = 3000c816727e34c51fcf14bb4b01d2adfcb186e08e8c6a68 +P = b392ea55248ea3ffaf COUNT = 24 -K = 9834e947e93df2629f775acf65dac188 -C = 5dfeb72156d3042658e51bfe24b519e4 -P = 8df36d13 +K = a4ada9c19a1fb74f54bff70beb04b79e +C = 27d192885676673d54c8443e96239dd0e949843f7e7b0497 +P = 2d1f326d657c98848f COUNT = 25 -K = 845621556b5f0442af42d3fbd6d9ec2f -C = dbc28ea1ed38a255dbb89ae8bdb4ebf3 -P = cd8dd545 +K = 426cb5f5712e75f400859aabf35a9d67 +C = a6edbe4716b33eb2c9c76d062f9baf7ce726d0d958c885fe +P = d5a88c1fdc915d7158 COUNT = 26 -K = 6e6f0b34fa1206ba754b7ae3655bdb5f -C = 0fff28dfb53a93e41e5d9a56e1478238 -P = 2370d0cd +K = 959c63b41808a6c663d0c65013513ae5 +C = a8bb52b8078409e8c817ecdd215d59114a7dc1f4a9085ec8 +P = 6640fd0c2bd98877c2 COUNT = 27 -K = cce7c359de922d92ff95e6f0ccb6118e -C = 6be4e01aa5b6673fb6ef5542feb34925 -FAIL +K = 37a95507bb5911c15cf6aa1a499ce9a2 +C = eec631680229af0652d3807e3cb72bd9c4a5a8c9bbfc3095 +P = b2e7485bb0c871c361 COUNT = 28 -K = e1e8319b5458a839a60745576ffa30dd -C = 0d8e01e9eff5e397c237bab50cc2f2ab -P = 62f1188e +K = 6a1b4b122adf54297e6e4443d94b241b +C = 80e9394cdb6b81309becc1e986ee686867aff92b9b9d3150 +FAIL COUNT = 29 -K = c45c89a70563e1f60aad7fc5de0ef560 -C = e5902bd2f66536a0d3bec36c19960ff6 -P = 84846ad3 +K = 812a0587cb593c5fc3ff3628e2331508 +C = 53b4e2ef88043199462319eb8c5f0aa72deabeec97466a8d +P = be2663e973db6611f9 COUNT = 30 -K = 50838c2485b42b585628f41107b7a531 -C = f565e4df1edf2ac5700006da015a5c80 -P = 601524ab +K = 18335b3428b808169b5e08bf8928a932 +C = 31ed5f5049aeeee4c9968b618bd0acea420ee1530c9ad2be +P = a9eb2d0a3c24d0816c COUNT = 31 -K = 6a3b63e34c4bd03840cdaf22f1c1622a -C = bb2a805c540274ba39de65401902ab91 -P = 3066b46d +K = f5318dbac51f84894075ca4fc9d68aad +C = 5f6f9704a432fc06a0c798b114baf9b95a7ede967ec235dd +P = 5ebf218c53bd7a9ea8 COUNT = 32 -K = 5c232f92be035b95df224fb6b552f8fd -C = 4edbc03f6c94818892a4e54d5a9a2b2c -P = a4273500 +K = b122453fd2d0346249a51e55fc9767d6 +C = 050b063f8ff35db3720af4d23b0a515d0ea37783cef92f63 +FAIL COUNT = 33 -K = 6a645547247017fbf80c1c2d755f67a9 -C = 02738ad142c44fe4c13184627416c71a -FAIL +K = 19e31b4b266db0660a89a0c718535272 +C = d3bd8cdf1b8e2bccab14606f334e63e7ec20448018336191 +P = a333d852b9389fc7e5 COUNT = 34 -K = 39bc75b4601b1d03416f94e369f35130 -C = f0c47973854edb903ef3eb1114c7906b -P = 638665d7 +K = e553fa8121ca61f77ce66a070232b961 +C = 0cbd5c7828bc4d4888478dbc6f4f96b394153c4dc9255ed2 +P = 31a99a58fcaea5c69e COUNT = 35 -K = 334013840754527055b14819d2b0b44d -C = a87e00ce9fd6e582a382b7f9b503cfc0 +K = c1ea20846b48d0e06cc57e24c30e49d6 +C = 7e8ff1c501e52b77df37f64950e87697e3b7a535c5100e66 FAIL COUNT = 36 -K = b85bfd1e761928e0773f6a7241b60aba -C = c5507797b8b0a720c2b81373b0f73fe5 -P = 79ba8fdf +K = bc559906ac4b0430dd4289013365afbb +C = 90bc25f842757c8a5f265a9b50526886de558b27c149b2f7 +P = 5c793dee28338b3236 COUNT = 37 -K = a07b1c7f142acce29e285c451ea212f2 -C = c8cbfb6871f0aa29d554242d0593103f -P = 65fdad71 +K = c2e0c0ae43222964b0a27771df64fde1 +C = f2ceaa8d8c11234f1e9fc5ef1e36641b443f3052d2ad6688 +P = 4aa2bff4d863d89201 COUNT = 38 -K = cff09ac037bdccfc4f92e9b60714002e -C = 8a18507907cc5b9e61a9c61ca91ffd33 -P = 40370880 +K = 5fa6cdee27a7d1060d9d4b45691926e1 +C = efd9654fc10d9435dd6bfebf664b16d4ca582f9d696ec8c9 +P = a4dccf63f37677b8b3 COUNT = 39 -K = 2fceafa5b593bc8e620cd582dc882e1a -C = 2ed07794fadd58ce46239794101065c7 -P = 2500b364 +K = 2ef21a798d97fbfd447f6e324be388c8 +C = fef4815fa2794c2e90c98ed80a693d5b73d8dd9466953a41 +P = f944c497c4903a43cf COUNT = 40 -K = 6c749852cee85dcff5475b0bbe38abb1 -C = a8996071ed5367b9cef5a84e7ae5f928 -P = 434c89b5 +K = 87e2868a26987ce8fcb30eb97af2077e +C = f07648eaf5371127407c5b11613aff48a35e14300de945a0 +P = fa49f914fadc77a531 COUNT = 41 -K = 346aa49458ce3cbba72daf9469be2908 -C = f8176dbdde6c25680ccd1ee3ff4bac28 -P = 768bde02 +K = a4510c873a175f8735900e16e3ee7072 +C = ea7cb024a77e17119d20718fa58ccb3f44b38857bf5dfdc5 +P = ff6f5a1a8ae73898bc COUNT = 42 -K = 73a9cabb9022279c7ec9cf6906d9ac7b -C = 611fc7df3cdcf18677b507aeb5582624 -FAIL +K = d4da21e034f0ac53c3f599588e8b4382 +C = 2875ad79194496b6c1e49f40fd50024bcfd6c7b1baedda08 +P = 75de3de0425a4fca7a COUNT = 43 -K = 49ef9bfe18a29c89fc23a4fb38430ecc -C = 1eca12706b25eaaedf26426e0c3b5fa6 -P = 34e9d5cf +K = 7d8b83c3f94126763f20b33a34a37d96 +C = 113e6ecee28ebba023535c0a8bb5fd530c57335bda04a3fa +FAIL COUNT = 44 -K = c184ca9b1098720c7b400c0aecca52af -C = 48e2bda122c05a072f18620a0c1d9f86 -P = 3dc5ea79 +K = 8ecbf35696cc501205ef634bc4c491a0 +C = 1d58aac604c659440a853f7c353fbd2e9a23a4aa1688fd69 +P = 0768e2cfec78c19dbc COUNT = 45 -K = 7e8c66b5adec7ff2e0628a5b639cd573 -C = 48c106a39eb1fe939578dd6a3706be2d -P = 6042174f +K = c97f0d3872cd2caf71c89e9834a5abc7 +C = d46b2d5948e84a5180db018f4f5e43d8dc5c46f3b62ddb51 +P = 3635b5d233331143a3 COUNT = 46 -K = a2048dc9305a3cc8f0522baef1ee584c -C = 46a1112251aab73468bcf15734d1c782 -P = b0843d8c +K = d870a5f477dab9afb7240b8f37811007 +C = 9fdc1de9cbd9e1d02907e5dbf80e92a4964aeb280937c947 +FAIL COUNT = 47 -K = 708eda23db160b738d97426cf9595e59 -C = 90c2e4e6dacbf6d9df997426fc1ad3c9 -FAIL +K = c0780fa78ff13bc6a242a542ab096fb7 +C = 72c9a24fd5bb1d737354ea72ea4dd2c4ba2396ba3782fe20 +P = 3d85cd76af481ab0a5 COUNT = 48 -K = d50b487b5f6a7f48cca65eeae1c1fa0d -C = 457c21978f4ac888863dba2306ab3f1b -P = cf89263e +K = 1959010bc5a9a357db190bd1a53008e9 +C = c77fe3aaa410c3080bb83f78ffb5a554cf010d3e14c52f3c +P = 5be970a4e52c1c8aa9 COUNT = 49 -K = e7304c0ee6fe80c2971b5a8b954f6e63 -C = 0697705b5b86b68a0d900f7e86311bb7 -P = 383933bf +K = 9dffdbb42b7a0f04397f85850cbbe3b3 +C = 24b2fb6b1a4e161e6c2ef3e0fd0cbfce8a0e15768637d5f6 +P = c971b0614fe9d46018 COUNT = 50 -K = 06037cf708398dd6f83864ce6e61a023 -C = 8755446be4c858300992b65c284cfa3d -P = c7bea1a3 +K = 942d622ca7f34f2b296938e89bfadcce +C = 2f56458c3e0fb803bc1dc58af4739791e8e0cabef95017d2 +P = 1c4294c95449a3fcf2 COUNT = 51 -K = 8b73c37ad08dd60a56f53fb2e118bfd3 -C = acf1d924b8512fe514399afc4a9d5853 -P = eeb816e5 +K = 02893faf3796c443e9fa7c4c8057d62b +C = 6987691c685e8a688a508612a3e525b7038530173aa4b9a7 +FAIL COUNT = 52 -K = 8d2d6b3a31b8469ac17e2df44359af1d -C = 18f08e63198fba01bac50fea5bfbff23 -FAIL +K = 1816e5685a2b2307b4714fb7328ffd64 +C = 5316365f83c1f3cea575cb8b9fabe63058363c5e6b238477 +P = f81958e8fa3117729d COUNT = 53 -K = e4dfb361709dc194e01ddcc76eb58462 -C = cb1d57b07204b82cb57b0164797075d1 -P = 1bec77f8 +K = 002b1e2d3e02151e7e91afe98dede6cb +C = 9dea440c8f27f8f77c15bb2c23be701142297b8182f5d49d +P = dea30752984da971e4 COUNT = 54 -K = d9dc483b21695ee48faa554faec23a39 -C = b91fb423405916988a1aa653373e6e80 -P = 19b14dba +K = 18d8d0cc14c9302d929d9b2bc01eb558 +C = 4dc252f784cf4537ea19af56cf5a07e62dbac9f8aa60842c +P = 98b957999ac7e13804 COUNT = 55 -K = 1c5b6c3d93513b3f3471ffb51f25aabe -C = c3c5592977d525e77de65ecd57ca47df -FAIL +K = 1590d8134423a6cad59a8d06a8a611f7 +C = f004edfd07b73bafe25ab2017ce39ff08dbffad1d0f846b2 +P = 002fd00e7839ce1014 COUNT = 56 -K = 920892291449cb9355a5ac74b257cb31 -C = b3e9949d753f142639da9f612a7fd8e2 -P = 5f7cbbb0 +K = f9b9cd73ed0b276399232fd59eb242e1 +C = 67142c481e6424b4165efefff02f0a5ed968e057009acffc +P = 850099398e801f0b92 COUNT = 57 -K = 3743d8b19e2be6c086d86381695b49bd -C = aa93a088fdfefda331077bb7989701f0 -P = 4ca13992 +K = 62e999083c67fce3ad274328d2bb958d +C = 746572c16596d12fb1397612943b082eaa33b648ca77589d +P = c5829c326c8b0e756a COUNT = 58 -K = c79dad190de8cab0886d72866aea03e1 -C = b0e3c5ec942c0f24f7de7074355eb4a2 -P = 65d8d687 +K = c59744a802467125e76865ad37af59ee +C = 805c3116112677aa890897c5a6aaf8763121476b2ce70434 +FAIL COUNT = 59 -K = f31e75d0719d71b45cd8ad62cd258227 -C = c96c72f302c7574c4b7edea5b343f61f -P = a3a7a165 +K = 0e33379935432bcc9a376a25fc62926c +C = d8b64f39fe5869a68a2a5fc20b0a060f3610f471dd31529f +P = 4f8a4b72bb015a09b3 COUNT = 60 -K = 32d7625553904f9993a03ebe69e924d3 -C = 9c43e40d3841658275131e6e497215cb -P = 456e5b55 +K = 549d0c79aae90abe3881d40aeeaa6567 +C = c0b77743d1f12b5bcca9372e896b6876a9c041a680898053 +P = ad987acb59f2409f91 COUNT = 61 -K = 636b8778357c4307e31019f21ad56aa9 -C = fec5ceaa3f63afbebbd8dd79b69ec234 -P = 62b7fcc1 +K = 2636c61b7f99f0fd30d1fbb8a9431650 +C = d23eba68f456e5de5a87738ce5af1e01fc8bae2bcb33e385 +FAIL COUNT = 62 -K = ad4b0934d490c408e802397a2772ec79 -C = 94a6213a6d7c242321b7d206cc87f6a7 -P = 559620ea +K = a4d91dd490f913f0674eb1dc43437928 +C = 0c70a280ad4d58bdb1ba8e61eb8bac72cca9b471398e759f +P = 104660f9db0f8ef7bb COUNT = 63 -K = b5341a03ea793b41389643637363788c -C = 0e1f8fb3538f966802b594d328e791ca -P = 1fd19f56 +K = 095c7355225c555f7f4ea1a1e00636e1 +C = 0c3e718a60c03ace8917ddfcf976f4b576b28953a9aae299 +P = 081a07ab9799476e51 COUNT = 64 -K = 0d630dfa6abfb88de737ba6639021b7a -C = fc3aeecb5cdcd16deb047a6d3764122b -FAIL +K = 4822194b15b2d99abea2911cf01e32c7 +C = 28002dd1372acb9b624e01ef5aee22f1c7a0bfc27a5b7204 +P = 0a6fdba187352743b7 COUNT = 65 -K = 4b6829d0fd597c4228329b8b51fbad17 -C = f438a28859698035795ec42dc5bfc335 -P = 2a454b43 +K = e51d0311fdedc93bb11674648e391728 +C = af12556eeb70df00888b16256256e852b91cd3c8e55952a9 +P = 93d75d87c59b7d3706 COUNT = 66 -K = 3fd88f82099c376ecc815a715668c481 -C = 03397340a0296368bcf45e639ca89f3d -FAIL +K = 59908fc105b35f87e5cd8809560a74c6 +C = 012b91ed5d771d6d427be3de0b236405ff44cc9af4b73517 +P = 8389beeffb586d1579 COUNT = 67 -K = 601f24de3664b07ef2c2cbe2b61f8dcd -C = a2aa718aaea141adf9a899ab4dd44eb1 -P = aa9a6888 +K = 1650505d1ee8705c990f3d26f52afeb7 +C = 84fd97bb9e62c1fcda4070c4eafb25899a7d77d51dc8436f +FAIL COUNT = 68 -K = c25adae5d5b3fe17f2c1d2a5ac3cd6be -C = 5270e3fc4fe86e36957ca4f67846cdd7 -P = 921bd858 +K = 83b1ee98ffa33488f6b9421972b5ab8e +C = 7067355c956b0fd0a9be11701c305a8e911d3c069b7df3d1 +P = d93e0c0d62e0ce5aa0 COUNT = 69 -K = 920bf60b8fe7aba63fd20741f9abe2ce -C = 6a14aee602230c56726de88b10812235 -P = ed425fb2 +K = 508075de7f830eb354eba8d641882973 +C = 5ee3f542bcaefdba5e03bcc2ec01ca85d56105cd421ce8c2 +P = f9c4b67079f9a7d8eb COUNT = 70 -K = 304141bef460a06879d7956b1a793d02 -C = a0d09919a72f46e6740295f4af2cf742 -FAIL +K = 707e2be01762e42d8cfaf7074a970a23 +C = 74eae6a1ff00e3a8da8b3fc6c6256b5d67011a4993d85d0c +P = 28da697fcf0461f150 COUNT = 71 -K = 938551cef6986c586291872490a204cf -C = 07c935f358772523d587590f4b797159 -P = 68d63abd +K = d9b1d218698bf69ecade3b399105d9ef +C = 393919f3d035ff11b223307de772c67f3b72ac64d98baf4d +FAIL COUNT = 72 -K = bc4673eeeff32738398d619c4fc44c2d -C = 5f1da0c037fecc45798c8ea27b54673a -P = 2d365a93 +K = 5665f688f77b8d595ceeea2d7bba47b8 +C = a6e3c4bbcd4251a74f881ecc7fa0a9457e186fef105b40dc +P = c21cb1c828bc4bb198 COUNT = 73 -K = 4694a69a10bdbef9f952cb34382666b1 -C = 7b889476169cf06e5a34ae2f727bb894 -P = 1840bdc3 +K = 7dfcabaaf5d79d6f23678a0dc013d1d6 +C = 137b06b70a3ee5f3a4e07b38ab35a0613fd8e2c3091d0b87 +P = 80452a9ca0c4f70c30 COUNT = 74 -K = 596c3490ed02c453a474b29da7d5043f -C = 28530d86519c851318d438d60120bc34 -P = 8f9282c5 +K = 173a599a456a6b0c7e980c9405008184 +C = ca4068ee611bba87210f24fc515437d1352f5120b22e8624 +P = e237a94b97676023a1 COUNT = 75 -K = 4bba6cb7234d3bbda74a8c6f48264b4f -C = 4752553bfa7e922deaed8ba8960499b1 -P = 19798bdc +K = d32bbb776df73b2a0da65611719e3c81 +C = 7cd998e5cd1850f62a8ce681e39300f2fb248f8f8f8abb92 +P = 26bcbbbff0602ace98 COUNT = 76 -K = a459324b68e96a62115f9eb470f97fad -C = 61fc5c3d54e8f48f62dca2fef5270b5a -P = 2aaa652a +K = fe8d5e6af4b445ba8284fd7c8bb6433d +C = 0f36ce8da74eed581c9dbdaec9a7412990dbf0794a86a541 +P = f2b6a899a1cd061917 COUNT = 77 -K = 58d8d35b5124a15353b730c6a3fc3fb3 -C = 52498d360559f3214f36c3b544c45176 -P = 263ca669 +K = 9f85c4ef36d88244e50fc288002e5795 +C = dd112a04f465f87b6deeb0e4d04288e5478f26d5904d1f1f +P = cfa11ec5ac60a2c865 COUNT = 78 -K = 2e11759b56d12a207eb1a3826dce675b -C = abb81e0ee73591e679a082ab87d98ee7 -FAIL +K = e6c203063bf1916eeb463aaf14f55510 +C = 4b7ad717b909c71ecbd4e3ef365b679f215b6b70eb7aa7e6 +P = 380801acd3329adca6 COUNT = 79 -K = 351b4d9c8aad5d414548ed749e2c7e8e -C = 3466e3416b9c5c86eb0c223b66cd50fd -P = 13dd345d +K = 9e83a143c4cd273dd50cfcb1dc882255 +C = 39e7875caf79da4eec409674bf61bd000bdccaa4217c7613 +FAIL COUNT = 80 -K = 668f299bff087e0ad5926dd88c6c9c02 -C = ba408db2e5cbddcbc6be89538f391516 -FAIL +K = 9c1e9089375d13728b72c185e1dacbab +C = b1775268d2b59b2cda4fc617f4a6a963113b423ba7241206 +P = b0649bf733303b812c COUNT = 81 -K = b53599932e109c4175fbc505dc7d112b -C = ee7327142328ecce60c2c76991f91d09 -P = fc3470bb +K = b53308a66444fc88e24a00bd963b3aec +C = 7c09c2712d8928161cf6c2c5540018e1d7980bcd16524ac3 +FAIL COUNT = 82 -K = 96d297b93a53def7083d63590b401972 -C = 231f525fbe010ff2f78bf40d86e9a469 -P = 843b92c0 +K = 2b64dc12e4108d63ca76aa5718081e23 +C = 9241ee1aa0637592a4f1f4f019c85cd05baf1f309ddb2ce9 +P = 49fd96a9c24efacf63 COUNT = 83 -K = 06db67698e92b02a30fb44a7e2476b40 -C = d5a3ab0cdd852142851ec029db4bc552 -P = cb46020a +K = 532af6a8c9028e129553307920946d32 +C = 4663f3b341e412060de4fd7cebeb7bcdaacfc99e83108533 +P = f1d90b9ae68be966a7 COUNT = 84 -K = d3c25f577e4c7ec3ac455c2918886f6c -C = 2f80020497536726158abc69031faa38 -P = 7a1849a2 +K = bf4ff1864e8559a56d7ecbc946dd7560 +C = ec7133d49907e9d2c3236309d65dadb2e0cb5ad153462e99 +P = d49d0e37836d14ee10 COUNT = 85 -K = 0ad9ca43776b095e25f2e09df37a5f82 -C = 00b383a29c6250614088a75ce012e955 -FAIL +K = 0ace66826d8bf8cb5c5085fe1927e0ea +C = d041764253e6e2d9c4766b9de4bcbb141bb7998f0430b9dc +P = 43015c37b1a669f404 COUNT = 86 -K = 7f4ba7e28937c2e97891b84ed74c9ec2 -C = 9818029d7fe39293d0f4f862232697a6 -P = 52f6bd8a +K = 1ef61d89aae72d65cfe17d6bd6f138f6 +C = 1eb7e13fc05dab6cfb0bf627c93b9f3652f411f6fa3923d0 +P = 85e547c470cd1a6661 COUNT = 87 -K = 00e44443908b03469aeaf3412f8c5ad8 -C = 0e90f9c456e52b4aee5d076380fa0fd7 -P = 090304ce +K = 3b4e9e7debfd8444444431ef46255e2f +C = 426a8c041879e1139de88524ce50e1d31c7ffde10efc1d2f +FAIL COUNT = 88 -K = a58a2dc25816fc93d9d3c05f36114044 -C = eb53388738fb192813dc057e78d17f6f -P = 0173c779 +K = 56c011988cf3965edf2184946ad8bfed +C = 41a089cbfea99015a11fac8c4615d68e55c8f9ac8d50c330 +P = 3c1b86e2a26f380452 COUNT = 89 -K = 10e65edf4c137343dbb8f2fd45d9b0e1 -C = 8a37859cbdd0ab04bacc112246fa9596 -P = 369b276a +K = d646ecf4191605beef0b975aa50b640b +C = c925c25e9644e575bc2e61fc15ae187f693b4137c75ee2e3 +P = e78076217d90b8770f COUNT = 90 -K = 1bfc8ab140c3aad51c25ba08f2125d47 -C = 2e2910179b8986c2f11af317046176cb -P = 0fe2a82b +K = 64d0b14beef28a43bee74b018d58b5de +C = 9e0e4486cfb9f58cf71217c960c9355234500be4de92bc79 +P = c5535b49d8f4ec9711 COUNT = 91 -K = c16a450c731871bd70eb5dbae9583336 -C = 3ecc9c48757b843736068c9125053436 -P = 7f8830d7 +K = d0afc333e71bb1967a3f9a3d1a213ab1 +C = b9ecfce97c089c75749eaa6eb3338214b9c13f72e7c3bbe4 +P = 185c275da7099b7797 COUNT = 92 -K = dcf878ef8d1755410a781a2d5af65a6e -C = f2d8555b5fe01064ec6584244318ed92 -FAIL +K = f058b95416ca985f991ff9fc41b57b31 +C = 485a0870054c88c800c5298140aec3619bafc004a24a5b57 +P = d0b60e7e1957d4ba4e COUNT = 93 -K = 23e0a88f32413ca61d2864962d334f44 -C = 52df49e8e2fee64962de76c5b3e38bf7 -P = ac1701a9 +K = 8063a4a4c80ce2d164c6ebc66fa2091f +C = 3506d2fdc0d1dad56b9ba144cd3431620f392d00cde035ce +P = 5f57120e7685249124 COUNT = 94 -K = 532e6c1adba761e446d050c8796fbdc6 -C = fcc613647915306df78de7f327bd200b -P = 953a92cf +K = 61b62c30c75cbf041afb008e2bd4818c +C = cb8ce71dbac3ab54ebc12c98d6b337b5dc52c81e3e89be35 +FAIL COUNT = 95 -K = 18a4650cd147ee7a4158b189003d409a -C = eb29fb20b0e8bc37e8a742ad4a53d790 -P = 2b887c1c +K = 232e7209987793b5a400b7eab1ce9ef2 +C = 237c163435776e2cf7f8b03b7a95971c6e6c14e1ce858eae +P = ecc79e6537ba56bf86 COUNT = 96 -K = 789898cb0b2aeadf67b1702f49f8a094 -C = 08a9adbd7a74b3c137841bf6c41f1a88 -P = 06ae6f16 +K = 681e831148fe23d7ef83fea0ff60a76e +C = edfc284d485667f8c8b901427c4d9de90b8b7f1c1bb536c8 +FAIL COUNT = 97 -K = 961336a0fd3bfc33cdf04ad3678c2301 -C = a3e2d5bec2a5fbb8fc671b545b6f5e8d -P = b9ba6a2d +K = 7c9b73850c3d04e1f4fac02c9b5ad792 +C = 7d19096852b90387085d64d08bf12847abeab40df86426bb +P = 340dd047c14d024804 COUNT = 98 -K = 6352e254f3dbf0c0dbb1b707c0534970 -C = ca8244eb291507572899f2f00d831d26 -P = 2f1e8676 +K = 84ddfe210048fab82195383fa5b546d5 +C = b9fb93d6a916bf4305a5ced51a6947d688d50f01925ddd41 +P = 5a99ea12f869301a2f COUNT = 99 -K = 3140ed6e11dace07ff68acbc2b770607 -C = c067b9551af1e64670bf3fe0b2295f3f -FAIL +K = f7d7cbfdd682854a4b11dc20e1b874ca +C = 6cf002a178b148faa4c70220af9ecf84dd704d1056b9fb2d +P = 77586b5effbfab2c1d -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = e3f6eb84f5168b6ee87fa4fa110129b9 -C = 5493801f16458ea8e22946bec539ff9f301a1e29cfda16ec +K = 6929117e6cb18ea4a2985886f08c0ae1 +C = 5fd9e77c37041c2ebd4c346d5b6c78f7b485ca589d6b0b5416d0287a6db36b39bdc961b4dc2fecbc FAIL COUNT = 1 -K = 56a9ea41b0c04ccd6ac8fb1c87cddb2c -C = d4991304973b71d73c81613d55f1c6a4c12740dd694e3c2c -P = c7d4245fef9b85fd7f518f79 +K = 289023379078b821fc24f718bdc94331 +C = ff51b7ae52462344fc455f72be059b56a98cc833a1cf3b20b6887112f5a43fd45e9c5f51e7c662f4 +P = bed524c6402eeb7738696f3106999fc931bed6768838345d18ba44e1b032b8 COUNT = 2 -K = 08783d69065d3b2b774d526d19848684 -C = 7d3f4352e9cc3dbd2d12900c4aeaa2c07dd1dd80bfcffa3a -P = d669033ff57f2f557c5c7dd7 +K = 60f9e9ecaffba69abaae1a0087edf5ce +C = ba18ace72263d13774e29463b59fc657521e7fb106020e94298c93082d429766030f8a32914e5951 +P = fe8664f46325cfaca0d6bd6f75980edbefcc7db2f36bb290a88e0fac37199a COUNT = 3 -K = ae45c915cd0a5d58452c380880faa5fe -C = 7208295edffbafb708f710af848e895324e6d53f2575ae9f -P = 3ecf53f749bb301d1a4bbef0 +K = 6a5a5ac4ccedf055d7562ac58ee7819c +C = 46904a5583e8a22f4b2f5aa8d071f5cbfc938130f1b33f2e6401aee7cccdef2159a89c9b682cfaf4 +P = 33ac6837955300e569b29958985cdbd434c18208779a949d20b110b0b719e1 COUNT = 4 -K = d001807f5c4fe07b5e196bc613113007 -C = 3fdeb9b7dc943f63f3d32df40b027bcc61017cf7338f43ec -P = bc235d93ed98700e39323977 +K = f72edb30a2e3f7d6adb364dfcdf38026 +C = 6a4770844e2b971b6aeed6331ca152c0c1a78231dce27ea489e864dad01f7fbc70fc338fe6b69983 +P = 5cb3b3e9bad94bca2f93978328ac796e9f9141ba20b05ed0ed021755474668 COUNT = 5 -K = e6e1887af4b21c83dc5699eb1ca275a0 -C = 01c9f93322cbc34790325feee9f69e31cbdc3e97651166b5 +K = 2c3b49efbf60ed01a3ef27ee24ac90b0 +C = 5fa5a87bec09a3e05864656f8966cd38e1c4af48a06b1dab4ec9cca35dd0f92b54015fe5332bdef9 FAIL COUNT = 6 -K = 52abca80a836217ac1e7ec893497d0a8 -C = 9c97a5bc57e9dbd333fb2aee11e2f3e45ab7338058741889 -P = e898cc72a65cc2306503a19d +K = 2825fe190f93b9a4ec2d3ea2f16b5681 +C = 8e1e110795b3a5eb24cb5adba12c3c7edc272773316d371070dbfba5a3deb30299a9f2919de54f7b +P = 062d2e2fb7870b83ffdae958b1e5d711ac6f557a78a791680b17ebb9966b70 COUNT = 7 -K = 485623d3af0335a1f842bf03640ad6e3 -C = 048b097648753a355885d161dc988d84e40d643bcd9ec8d6 -P = f7e3c4ebf3ccebd62ad656b0 +K = 53047bfc5e10947877ae33d2b3b20d57 +C = fcb917fb4c1213a3bbb3c700ba10f8d7fe817da2f782a6865398bd2f9d24ec6210f60614aa1d8b56 +P = f3631be7093b2ce73082b3674c787fe6428932c8d8cfc8d44cce6eda95d641 COUNT = 8 -K = 6ce28dd784ea780e5d70633e13123fa6 -C = da77fa89cad6aa98f84c4100b2c3ade9362f157020254a96 -P = fd8aac1a7c2f2f593e966649 +K = f747299c9128a4320783f50ebfc95b41 +C = fcaa818539ce4734b30bc84f193fc9a52f863f0452eecee92a0fe3c008e8c756c1da64843ee283c7 +P = a92954c9440584f49867ee3dd365ff5dd82af8b783e49b4d7a4721877cb29c COUNT = 9 -K = e5c4b9df5fd7961c9eb6a1236630214a -C = adf51b74530686bf1e2f8478e50f279fe84962eca8213457 -P = 911a85579ae271fd6a12d51f +K = 95579b77b1753d8dfa0b89b31b4a5d2d +C = 7bcd619b3fd712a6d1c9e3df165dec599d6ab3730e0631c19c59787b2762f18485ae575aa544cf01 +P = 697c5e02191cf48e237a97f1f4e4deffa6f836ee9721be4ec3e025e63876f9 COUNT = 10 -K = 3d91e029e308df52361b85a19103d28e -C = 212cdaa07fcb8271195fe579169b70d9d418cbf73330056b -P = fddd7b4ad141dd44766944a7 +K = 20bf0155c4bc6604de8f37dd90802bc4 +C = 6ef0e8074cf979d746cadbece5aedeff033d683cc6f43102292434f9b8914c5f7de420280d77588b +P = 1f72d9b6e64a5e079b2178b5a533254b8e4a5ac1ad6a70843d062cad70032f COUNT = 11 -K = 08ea32dca8f8f35b14023ce72628e45c -C = 8b23da3b6b1be9e7ddae2a4a42f43a12244e86a70e4d918a -P = f1a9743aeb40878c76b3162a +K = 5f112e840de1dc6199ef3d441f5318d0 +C = 782980da8139b539ad06a05729b46a1d3a079287f8a0afc9af400aeb83c3ba8bcb79fba14d73b6cd +P = 262d6dd5e0daa3f94b43e5fd9399b900d414db7501b9ce8ba7d42f8d30c151 COUNT = 12 -K = 3320127c27ececd46ca210861e86eeb5 -C = c41350bff5ed9825c09c90fb6ae6f2896ff428b45a46608d -P = 902d095f65ac5a0acb8c5cdc +K = 5a77053d13ced74898304cc6ff1f12f9 +C = 04df4d2b9c83c21634d264bcfb6f518c3d76c08b1bd4e492b03aade962135a904573032f3491ecb9 +P = 4a9627f7582a02bbfa21ecaf9c1522b825896cdba8dcebf34386686434f1af COUNT = 13 -K = 1a93a88b5411499d361d0263f4add588 -C = 4fd9dda418969752f77691f6ddfce2862ab2ca7a4ec30dc9 +K = 50ed9f1f9d48be08ce4be41925643d12 +C = 651ae76210900630a325da753abc8f8e9edda6cdd17974ef7e5d5aa9be11474d6bb936ba0d33fee1 FAIL COUNT = 14 -K = e8291544f97ea5a30b9fe3a257cfa714 -C = 89a5ad651ba4820b846144a34654b366a7d941a00208f800 -P = 1ee3fb3b066591d6e0bd0898 +K = e60fe162d5a19b64dda38f9ea6263a06 +C = 47a85ddc57eb95b6880346a3d8e83ed6fc84a036274fbc7216544986f675326caa3ff126dc722dd8 +P = 7be1791c42f1fd47988059c9730a1fe8ec390e699e67acae99fde10caac1e9 COUNT = 15 -K = 916175fe322903f8a742246e374cb203 -C = d1869a67a194b0ee38c556af59b06d9c6f48584879b4a361 -P = e7f5c9a00cb444321389c7b3 +K = c60d237824f2b2bbb820fd8998533dd5 +C = b162430805c9b91f80f806aa47d8c7ce6eb64f3cb2c826c1c82ef37f04b51fb495bb1843518b5deb +P = dc395759cd760bc642d6724b929de87796b0365626739be2e17c67ad7f917e COUNT = 16 -K = af0510ad6afa5d6823674beff207e96a -C = fa67489d8ef98ce27a67065d49321524aa564489d789b8b2 -P = a28eaefc49d3fd5f08be35a5 +K = 76f62b04f455d6198b12bce6a55b26ec +C = 6b6bafe96cb4685eda44fe9a8fb349cc8db953fe554bce2387115302094b8e3d35f1854bfb757f0d +FAIL COUNT = 17 -K = a31d2922bc3eb8462a67f3d70f666260 -C = ec74c659089130d8204483ee0ca550644bc815bea36651a8 -P = 0f335d9d224ea7bd331f434b +K = 0f074747c8a6e4bb7ed045d6cebe8dcf +C = a85f4a5c64da302d7ead3d696ad5b9af826d18a6b8ea8257eb6e41db95173e049458f938b9893738 +P = c80b8af316c137ea48cc8c9d438552757529ea56c58e92b7c70e334f3977a2 COUNT = 18 -K = 13da87085d83c6c0c2dee61cc0b1f10d -C = 0092a093bbce5786dfeb827fda879970438ef5fca92d65de -P = 813416f07f31461fc1d138d6 +K = 1a23fe191321201c77183314abfb6862 +C = cc2598b78569a21b86bc9c5fa65cac9017f23c53d7586e1b38679b4f91383355f488164123bda87d +P = 43f233a863a8653567bb3330340f257540dd2980f100b95dff0614b3efdc5b COUNT = 19 -K = ed0f4dfaeb3b6b5196592cc65c4f8bac -C = 3303a0a2f4bd0ec188caf04b72f8bf63604b8ab0f4c2cc73 -FAIL +K = dfd9883ac8930c8dd0e2a726a770bb59 +C = 14776d5b9cf9bfa072648dfd6b144a21382d5ad634a03357f8678a1f53ab2d24500633d0a6d949ab +P = 2093a737c78cced4fc3a4a67881afe0a36db89e313cecc956b3bdc159f05bb COUNT = 20 -K = 0b5e182d0ee4716b862cb287a9ac7b8e -C = 6639bc8cb5be03bb7184d6dd54d4a452266c8acf3107dc05 -P = b7eced6fabac9d2b0a93f165 +K = fd6b16683265972df4e26100bd9e4715 +C = e1dea5d48ff11d8b01171d46d96d0e97d69d4e364ed2c7f7d844786457a91c4b1dea10a71d26ff7a +P = ff79449b3eb50546171de51a739a55ae0e8fdcaf2b2ac51c56b36058168eed COUNT = 21 -K = 78ab6d8d431fa4120d6b87b8794ef548 -C = de11d29e5a1ce9266ef2320527009349c57a9d2ac34b50d4 -FAIL +K = d401951590bbd728e06aaa1ad7124666 +C = ed26f991f8e66fab47312701c4da1f5552eff7b452dedad2164d21219b7bf941b3b60c4ad7ba8713 +P = faf6fd8c9823bbfd1c2ba1860f5518dcafe7e8c7c80c072c1228d2295bea1d COUNT = 22 -K = 32695de9db7d86fcab9ef0d4a28d0571 -C = 0f9e8af017f3f0c9bca9ed870436d53f4bc9527337fc474b -P = f650e82dab9a6351f177721f +K = 508163603198411f37c18bddd1dc6e44 +C = 7e60269b98520be0d0a87077d63a87c515038135282c2a3119b804bb78ea5ec5de3997abc345c12c +P = 785dd2d774f0954bcf43f2eafabcab891c7e1bb39627138cf43306175487b7 COUNT = 23 -K = 880a19ab1a99c98143e520684437f63c -C = 17e09de9e4d39195ddb5c0af2599484b7dff0b0f6b26edc7 -P = 806cc6a53396eb7659f7c642 +K = 7d195ae7fedaf2bf5deedf6c44c82e8f +C = 4f7a9e92a9b8e92316d6e3efc7c9a786334814ab5416be6cdff3b6886ebae8f50dc37db6224e25f9 +P = 59042d502a674bbe369a2069d07fc1bc80a7372ef2dd0636c5cf4dd179fca2 COUNT = 24 -K = ae6ff2838616f137a836de63a1e6eb8b -C = f426ae6317a35be4a9200a4f87024fb5f64d09cce895ed22 -P = 66bd8da0771e7b43081dfd76 +K = 9bb9698040ce176026c62600c0c88442 +C = 5d8b3bf3c6a7a4f52df6e0ad92e03114a8d865bc511b8185f8a96854cc4ee576dba45701b5cc42b5 +FAIL COUNT = 25 -K = a6385bf6538b09e45962efc08ab435dc -C = bac24a84190fc5614c20a3b78db5dbc8cb8a1a7170ccbf18 -FAIL +K = abae57aa891f6308af812f16c593379b +C = 213659af724a6db44a3b426de13c9c1e481985e89b674f560b610226dd4df3e533d2f4ea09eed1f0 +P = 9e3db126613cd57161713d89cb424360fdb9e377547193385b91652aa807a4 COUNT = 26 -K = b29b92cf2d09be1e666a82283a4d00f6 -C = 848982be8adec18e522a2cafdad6d98332ab6f27e7dfc1a3 -P = c48491cd0dbb374830c614eb +K = 73cc82c49aadc8ca019521b15d63bc5d +C = c5c674ce8755e5b4ff6b4b8fcb06e9f1c820a545c3143844ac39b73ecb2be72aa99ae4d8fa525f0c +P = 897e4d1b2b4e895d7d41f53303294dbb7e88633cacb248713954be7785f9f6 COUNT = 27 -K = 05039ec806c2aa4095bfd419deb424a4 -C = e4bb3ed8b244e4a77c7cb01b0c2d62866e492fd7309815cd -P = e0a14fe918b19e5e5b7e36ab +K = 29e38504b30280c6ed236ebd53100530 +C = 4d11de9df96f455d0393ecd9ba06018574bee794ad4ea6cd57efffd69d99ac9c0f7d9dee0794ee7f +P = b9677feb95345bb1864c68d0ac67907a68de894e33c6a4e6dd0139db43a515 COUNT = 28 -K = 186a78b199cd9d0cbc50e14e3876dc89 -C = eccf23f9b46723647d692252bf3e373cbeb9a4423b42cd46 -P = f561e0dc67db52436856c2eb +K = 10b48f326ca28dbcb51cc38286fd8e84 +C = 9c67e6c934ddc2bc7c72c49a98c5c46cda7fa573c41460ab6a09d9bc5f7367eb36cc5da25fb0dce2 +P = 03f2844d705e149a2ca95c698b3204646a494489a466ed3f9fb590a043062a COUNT = 29 -K = ff84c71e15907dbd82e3ae765524a18d -C = 7fe3826378d3710c4bbd5bbf9fd038d1f5e00f531b65a4f4 -P = 15c3ca63ce41adcb761e9148 +K = 45084fd39822ce2fcda506dbb263b009 +C = a3add0bace77fa7d95555344c6844f2c594b90efe2b790a4f0412acc2c131bfe25e0d2710304a7df +FAIL COUNT = 30 -K = 2b0b977f519da7e9ce95d7bf5c0d05b3 -C = 0c1a25889654110103fc13d1bcd533a93d498f99bc1bb239 -P = c1875fa32294236472b0625f +K = 81ba62f62062a8bba3f353d731561a76 +C = efdc337c91e134b44e2ec6cb410e3cf7caa286fc679c8f83e89cbad43b11b2438bb83350fe8d5b83 +P = f8237019f3c58bd6f3cb75d04ec2af902beac9d2eb97ce19a56179c66ec092 COUNT = 31 -K = c46305cdfa72bdd6fd2e2eb854688a65 -C = 4d37c43794d08605a2aa58ce397f1efbaee753255a215018 -P = f6af006d1e9e3b09b10d4b71 +K = cc85bd8f9c212b2944db6f4d580bf238 +C = 657edf06fdd9af0847a9ff53b7299c82e33744c8b8ab3017293a1b1f05a1587ec6239f9e68867013 +P = d345f60b79d76070e4048cc5716ef910880b84377500a83adc7d601e6ca171 COUNT = 32 -K = ee67bbeee883961cafd78a8d543120ed -C = 63846f730dbfd6d71a2372018bee1adc83741ce7c90eadaf -P = af6606a5cf4a363b284a8170 +K = 6dffc1c2dbb4584524d6802410548ed4 +C = b4d4851a0eee850a2fce92ee8085494eaa448a6a8442bfab9b149b364c71a683bb810d9c48ca6134 +FAIL COUNT = 33 -K = 083463b4186429742afc806f02f4e172 -C = a3cec6431f08e6ae2c402d8b3ab2bc81a5471470f441a446 -P = e8e2c5f01411dc007116a7a7 +K = 64493958b3493e0f1408ed26707e0c6d +C = bc7659b7b8991a5ff323f363720e778889480f06f66abce5046301713fd67a6efb78e89e3ac38249 +P = 713b3cf485dac60c22b976f4f7135baaa9e88128fe1a14691b4d7cd72cfaf4 COUNT = 34 -K = e5d54186b2f810d43760f8b5dda74e95 -C = b359be91bac706b0863e6ffc644a3651f2776d70bd09968d -FAIL +K = a2979cd91b7377a5c6085d34cfd86e58 +C = df3ff8588e511def5cfb680e960f8eb0004d48b3ec3ba404f3d14e81d47d62c092c2174ecd2a43e8 +P = 7b009e58f82e0f413c11a0c0bc66a4b0f010c2b8ff093d8f28abcf94abbf07 COUNT = 35 -K = 480a8adc76a647a374ca6e49f7966995 -C = 813cec3dcb4cd0caa333651f2c81ba6b93b23fd90c3a98c5 -P = d5dcdde5c5a406485a0dea2d +K = 590b2553b0ef5b968df9266f160a0f1a +C = 43ad2c2cffe2707097d65110e1ded4def91d61560dc762c2e169c9c55840e8eb2280348b14521b64 +P = e26a220c475cd724052f90987a070b4de28f1bf72ae21322f1a9d327ba9422 COUNT = 36 -K = d84f4147a4ae916a30380e63adb25a08 -C = f031ac7d26e4766f7f2cc11b6bc79bae2fdd4ae617a847d6 -P = 5c2ab139e4fb315474aaa79b +K = b6b4ce69b769bc4673857eaa360ecc93 +C = a1ca4e3b180c89fac15ce57bd95c218912301e82a8b60961117d66028120aa6ea0a99f35191fc625 +P = 6358eb03476d66f7c7f397e7264e778cd8605c6c10234cb0ce45a7a7a9e7f7 COUNT = 37 -K = e387e672821d7b9528a1415526105c15 -C = 63f90e885c3a89a3992c2a723fafee4051465246af5cefa1 -P = 5db7953828b0d80d74231898 +K = 6c107b77f9f44c5787950ba61b13bbba +C = 2008f7510625e7f39d425a0d8cb75a177d9a8e741b61576a24f0f7b5a387d178b0f8e19caffd4a21 +P = 3a2834be7ebab698cd3942748634619ca3992dab746076bee1c1abf63dabca COUNT = 38 -K = 0deab9478ce58dda36ebb7e6336eca68 -C = a723a2d1d97ec949950736467b303d4e88bd06cd9edb32f6 -FAIL +K = 76491b8dd36f7fa299da7ed8f1b62208 +C = 144af29ce409675f737f1153351b2a8c0c1812e1c16425ce061f484b5c876d08ec11e5d43eb854df +P = 843285af2f5aa26445a8d2a776ff14f79f78e3109914df87a8d8c50e24da3a COUNT = 39 -K = 69f1b94508bcce6cd4664d67bc3d30bc -C = 4476aa1d072f17f0c57771e05a37fe6b8d759b82e10c45a9 -P = 2fa0e12dafa39234f2de9342 +K = 4d95dda16dc55d49cdde9d84daf74aca +C = 850c2c5188ed441ff3977d0132b72da2610b5d56d4950e16a015e31beaf846f308cd9e16dcccef73 +FAIL COUNT = 40 -K = 640964065af9ad3c017c0842dfd1fd5b -C = e082525b0303c9ae33335c89ccf0b2431d6dd309be5ad4b9 -FAIL +K = 25660eb54ad46a6a1989f99025ce05b7 +C = 7be60d85701fedc737696d1853c191f3679d2a6cb795010f4f917d1dc38c36e0400cc8c37475054f +P = ea88c48e2f5f4672151c42c90f42b294b4458132c909a8677c6b47e6010dfe COUNT = 41 -K = a79c6a71e526387ed463de799aff7c2a -C = 620907b7a7cc7e4eb8a57a02d03ccbb9c96f9f399bd6c941 -P = d88d5d25e67d39e7fa6dded7 +K = bbf1713aac2a916261b0d2cb4b1bd5f1 +C = 50c12161ce089c5b442afa08ed04ab7c418b63725c09eb8841a6c9b6e0e34f19b8a77721fefd704c +P = d245632df39a22272ecbb60d90e841ba6bad756b914ae0a45d51739b0e8aba COUNT = 42 -K = 2ee955df367a28bde67c49a96d4e27e7 -C = 4a768da821bfbe18a184d774fe67e6bd61f5383718af7603 -P = 471465e175dd3836a351c262 +K = 8b7ab7b816599e03f2762787712c3498 +C = 7dcd05678de58ca114bf8d0684466ca47b73cdb1e7ef0f9abde4efa54fee030c1e96ed7daa056d83 +P = e001f3adfd219c9d8322407ded9a5cd9fcc7037ac026b322fd2843a0062b75 COUNT = 43 -K = acf5ad1886ed4b2367fd5a629ed7ba0f -C = 7c11b46437ff69f0dbdf76fc6247abfea3c1a1a6bb0a620d -P = 084382173b852815bd1f29d1 +K = 7c8b60175fd26c72108a30fca2feb033 +C = 06f245d77a19f2a599cadfcd0404f8fcc4b9615a22addcf047b6ec5082c46f7ff0edd79db661fe8d +FAIL COUNT = 44 -K = fa2a45da68222af906ec1c4431e67d01 -C = 3f6ca3b8c50745a5ee1f6b25c300f31f4615772e5fec74f1 -P = 854f3ad6b6fc096de352bb80 +K = 961aae24a88064f7b1fc95fb17ec7c98 +C = 3f2a343dbc86aea0448e118fa53807912939920fa82c9ddd5da430f656ee5f773c6fb653015daa6f +P = 17d4891288d378f13a9faad4bbf539b16eb08e90cbe3f6e09af8ad0e242945 COUNT = 45 -K = 5cdfd3d3567be2a225c10ddb0074f1fe -C = 897507ba9120d04414cef8c66cf8878a68a7ef18a8b38bda -P = 60dd7074eb55f6da2a5ac7e3 +K = cb4677fd9bac732b38fc724f445c7ae2 +C = 3d6191ab2d4a99bc2bc9808bd0f404ce58291857399f8b7a8854d13674822884dcf10e38e4daba9f +P = 6110afcfa9a158fb5f45502515dc47051f37ac2e6a6fc47f37d0e91944fb27 COUNT = 46 -K = fc32075d684f72a89c2306df51fc2f69 -C = f21c7d82773b3886ae8b08b445782de039958641d2b56fb1 -P = ceeba2d37017aec338b550df +K = 6d1d081b20d9803a029003025be6f882 +C = 99811e757d1e9ba6bde22f3d47c99845de1c7c8d9d335bcf529b2ce01f5dac2ce577c90bbfbbfe1b +P = 8e6cef19dedf02a69834ab020ac87589c6c06de66c6ce34f863b587f898fa2 COUNT = 47 -K = 1144fbae060a461ba1468fb31d045a37 -C = 4114621c3e7837f7cdcddda449874327af6ba1e2a6639706 -P = cd64a8cabd6aef0b79cd15f5 +K = cdfaf996ba4c24b0775b39a928cabe5a +C = 4ea6b572418650966011f0364763131321b1765f8bbc93a256049fc986d1a86939c8bb2b2e8b131a +P = 8d07d97438694f418d974cf7428162745615922ef98f9363eb11479378c9c5 COUNT = 48 -K = 713acbce82349d566406d96216db8d83 -C = fde4fc491981917656acc54091be5b4b0461384afe49daa7 -P = b2e81aef6f11a43b19686c2e +K = 6d4d41417aa9e504766483b62a4f92bd +C = bb96400d119cc9994066ff9203e75085c314e3a55dcf536ead7f254b3ab06ce7a456cd0aeda74bbd +P = b5d158ed0b61a62f3c4183d266aa7da65ecb7f887f2d174755fc64cf9ec2cc COUNT = 49 -K = 080f1af5c28f786e7f7040a7b72b6525 -C = 5ac5e582c330b1f3d043f4d4ad4e50249b926501ba9ef099 +K = e1a7b14f5e282dd9efe7303dc4e6e1df +C = c454a3ab4f999dee50c72e389d0b7d09c9431753405269b17f13b6f07256d94542992228f6acd2a5 FAIL COUNT = 50 -K = e718cd29d9b2c4f9272ccfc72c58f7eb -C = e349c612f5664d6b305743227fe5f85ea93db83c75294961 -P = 235f81fc93ef7b3859fdd6f3 +K = 78c527c4d666fce62729124211d37184 +C = 391138f9b333ca9f73ae7b7b76af45e5c0e7ceee6aae0e5c99ec84bcc7e48d19e4338b37b583a48d +P = 7df355c5d334531ccd511b600a6614eb498a9959da63e56ee9bdc1b06b399a COUNT = 51 -K = 09f23d3ec0336e497096571c72a98589 -C = c6486ec9d2f43cc83b8cc2137052f217a0f3de1724c3f72c -P = ca0343d2ac47906530db3751 +K = 29602e1ab832c179c021149bc0d8f950 +C = 6fe973a588cf22f2fded4856422f0a725d0b6c5c08626118f8d4059e5b40f7cf19f25a88a0efeaa1 +P = 40e585bf5dbf5f364f5fcb27c743b3df4a17308831b82fcf442ae8ac6a21e7 COUNT = 52 -K = cff46a214578da27771d0cdd63c8afdf -C = 05002812b1c09a5b9595a424f9d4b310f1a8d3303a184c9b -FAIL +K = 33257baf0027100a9ac8408250e3cdf3 +C = 3adc17e512a6cce59f1e52e09fca6bdc612de4a8d5b0be2d3a4987637849bcdcc693421878a73b81 +P = dbc97cbc9b3832163537ff594361a251163a726854048b8b8c766f3519f576 COUNT = 53 -K = 20ac86af5ccc204d0bdbc97e3662f9a6 -C = f83f21551c50c511e3cc4fe2675b49501b606d419f2aa8fe -P = 7253582347e80fbe647f92ce +K = c41b4bcb2652edf5d08118048ce004b9 +C = 0d0cdd16ce8e868cc269cd796b640505f7685e537032c296487e1ce430f3284617f4047763ab0bfb +P = 69426f74333f19041d7e05e6ffd34e21e6ac20c0f599e80dbf654d7c00946e COUNT = 54 -K = bbfadaff26b62667f8621ed207efb9da -C = 354c67fcaef04161bd06c76a4a9134bc33e64532c1491a1a -P = d5be9fa8e66545af295a4db5 +K = 758da7e6f52933e93b409c5c286de706 +C = 7911ed3cb5db8946a2b8a8d81778a4548a64bebeabc3635493426f73f4838d91b537f6c63f82d9ba +FAIL COUNT = 55 -K = e03f64f0a9ceae78e541271514c5d3b7 -C = 6d7dc8f015fad084c2e0ddcbbe7e219e560ac6f2efa538da +K = e1abebb725fb4fe4e212cde7909f6199 +C = 00a5f0fc4a0e57789011bb7553dde81cb296f6e05c149c957054277b555cb86302c08c874e751681 FAIL COUNT = 56 -K = 41ebc59e6bc7192f62a24cd687cc9d8b -C = 8284e6bbc8cb2c52dafb9d1b12569a6ded6a44d750528c2e -P = a3b11641dad616099a9766f1 +K = a271025d8464a3aa21675f72d8c6635c +C = 74b307032214a029931f0bfa30c40dca5d5675939dfd0badec88bdff02c8494d12538fca8d1b71d7 +P = 363449fa3ff9c7de3f10c2da3990b026c1c53ca406b3f871fdebb2bbed6386 COUNT = 57 -K = f5da936d9a33c0479b10ee697a6ecf99 -C = 6f4c38f40c9d8c84a4df55995582a6c5b6b388ccfa767fa1 -P = ed40c5fa3f53dd753ce269cf +K = 1dee478533b04cb8684f1f45566acb68 +C = 998b76d156a53097ab5ca70110b830052b2ffac5c7af5231df27630f8b16768073322e3ac950e74b +P = f4b8c4b1a4d05189565da8e7c6cc084e8429b836efabc1e3f0548b6e74fb90 COUNT = 58 -K = dd1e17e8bd0c5547cbb8ff4d745719c3 -C = b4752e33825348d57e333cefd7f4e9e55bc6d2fe15d688aa -P = 6a9ceca7ec66c956bdaf2b5b +K = c75256ce7de4e42b505c0fd28d20780c +C = 543e0d980f20878324fc3594cd173d6321e05f448c6d40d93203cd94fd60047913b3b09989041d09 +P = 4a3de2d97a916847dabba675fdb1e022e20484b3b01939775acb20f1643ae3 COUNT = 59 -K = 8a7005724c0d0ef82811a9808d15fb7c -C = 093ab94aaefd0ff5b3be52242d42ccebd53244611f163955 -P = d6388197f8e09ed5624b9861 +K = d06a02b2332487e9f49970da58ba16d1 +C = a003d21de35d86832982773ea73d6a7473f80810c72787e7226249866ca76a70656b4c646c627d51 +P = debd7d52df97aba7ea387de42e0cb2fadaa79d2d2fc2c5fcb358edb8ca6f9a COUNT = 60 -K = c497a2b8d8da59a96a7fbfb0f72cc495 -C = 48bee721a53ba065555ce7dbac7c0fd30df395c488239ab0 -P = f253ee07461a564f8e1a3acc +K = 3c40bb351b00486a23610ade1a2bf984 +C = ca3f49ef0185bde31ca16fc62db5b218b85627405830d6da26c645999815e489a30b3e0a05de6402 +FAIL COUNT = 61 -K = bc71fe8f77cbdc57cbbf7fb071432a99 -C = 34ae26f29d0ae2f2ea4c24f1771f721c31c1669d9f67aff5 -P = 96687c2c5672decf33745470 +K = b8ccdcaa0cd369641a69a8f43ce3e330 +C = 1cbd95161f3ee6470b4fe51c2b4b9c689a04bd4554403f7ad74b0a886cf23adf7e073233f6250da1 +P = 65b5d1d1e328dded9a961e3e035b271599dd8c568a26ad64239106782c0684 COUNT = 62 -K = bceb1aa84dc853c6f25a3cd264a82d3c -C = 699b1eb20174f45558e4fba1a609fc616d299558759d6f81 -P = 56626e54cf92a289dbc93897 +K = c621a1bdb22cee9bfe58d37a15e37e27 +C = 92acbd20f07c2b79448bc349d0ba333639d690b8d1dd722ca1203e5c5515f80577e7708846df2216 +P = 53dc2d185b54286fb60e2ca9ef96c5373668d20a38c2a5aeda0737d9268f43 COUNT = 63 -K = 4aae7a20ec3cdeb1761515e0390beea4 -C = 5a505cc93369a916fb410f263017e5062d5b2279185e4edb -P = 2df95297d088f2281d242bfc +K = 976302b17f59a59fd069942bf274174f +C = 965bb2f44c9fbf64cb35f0b36bee1196daaa619397077f308279899f154ace6376609b21efdbee3c +P = a81fef74464f42fbaa4d20a3865b594730c0101912f9c64e48f083ba1cb5ae COUNT = 64 -K = 9e11a5b628a359da646836977ce5854c -C = 818175fe918b02fbb07cc537bb6e8ba31369641465d0fb22 -FAIL +K = d649cc37e0f00d6bd2480947668708f4 +C = 0af17f1fd96a7f0454b6dc498aef31c72c5c12ca42bd6a62b9b592f71ab1cc590df0e784aac63395 +P = 25e0db88791307f9b75e2d110f1c8fef4f61c59cd034ea53eced743244c607 COUNT = 65 -K = 0c04360e3957d0728a93f51ecbb9c33e -C = 9c121b39ee9e252a342dc01ccc60fb2976a7c51af3d357ca -P = ed9fe7ab7bfbd89fb37bef9f +K = 362822deaad36091f133048208071229 +C = 272fe3473297bad75a9e34fc64210fb16635e3aa29c104b54a76bba9a9d193354e24a862423184f2 +P = bf67f2f16c29b5c15d78eb8b50df13e74fb271e422efe06f109077dad5477f COUNT = 66 -K = 25cdce627146302d3c01ff8dcc3be273 -C = 30a7ff304bcc85609499e2e1d53cd29ab411da7937dcbb1f -FAIL +K = d14d2c295fe8ace4c7ac462e70895ffa +C = db2e261e9bfa265a23b64a71dc0268435c97a0da97973d66eb63bafa7b168ff484c713ce2b5041b0 +P = 505da46fabe2f34d0eea118d8832a40cdf8fb7e58e871dc7172a5073da377c COUNT = 67 -K = c9650d98a0eed165ea624868eb161172 -C = 03990f82b4bd9ec7889c4277763950cdf16ae1fe8aee7433 -P = caf1bab764dc3fac450fb860 +K = 6434348e59bb018089e9fee0f4092828 +C = 26b23f445070717f55ac5ebc5f14e48d31e73ae5f7379154166ca2c7f0622c69fd41a8f3d0d61672 +P = 3952169bcb2abc1de8ee67c78ac94d576559f9092185c588f30eff4493fd39 COUNT = 68 -K = 160e3bc077f70297ac4f9f0ee01f5970 -C = d42d573aede79243ff5a681f5fbac8773ba0acc13c052e6f -P = a135e69f7505a6339bae8ffd +K = 2083479e62b26b94caa3c58fd29eec16 +C = d4943126707a7a98c9f014f53b2e2e88ff965ea7a8cffa96ce6d9acdb00aa49e061fb95f453a18cb +P = a7e94ffb052da15b9af4b84e80dd084bc68d3d76eb01933113d701727139cd COUNT = 69 -K = 283790c9e2f3a8153f9b321890f58404 -C = 31aa5ce3b34fed7daa0a51f2b7c7102b0cc1d6b22eed1603 -P = de6e333619d58999c318d0f5 +K = 782b3aea3132da872dba7358e28f7d92 +C = 2e3939d0711273380e4273046e317b9b144155327ba20d16612e4492c89979181b550ef426cf3711 +FAIL COUNT = 70 -K = 1fc59c7dfc4b76732293be1740b65da3 -C = 043a853e171db57d02cc832d8833a7db53c9e62330c890db -P = 040585b01c9f8adc2fbd7961 +K = 26ef194b3c8b4ad68307c1689fb77a1d +C = b2b7da951cef50d4e4d8a8d9ad38ba5831443038d450288c053187baf31d6cd0d70f9bbdcc8bce07 +P = 331f330b478f0c46ae349535b8b2cb2ece07c68ac57dfb9c74e3572390b618 COUNT = 71 -K = c38b170f02ce12b89908047dc00e4b7b -C = 5fb6c2db38454e4c1222b2399ff35724ce83e5088cbd6b14 -P = dcb3902cdafe0de1b23cbefe +K = 262e7d3297d3defe44e8128e5693808a +C = f3c3a6e3f6158eac530a8183231410affe6faa9fa0ccca65b79a2c4e90eda6c94ec86437e8317c43 +FAIL COUNT = 72 -K = 2e38d12dd754deab662c4294fbad001c -C = 5f2f37e01f8c5918d39aefdcb2a468d2f20a58eac6213301 -P = 036f74fe28d12446e4a3b9a8 +K = 11ce8c6f298e1cd33eeb8e69a97b79d7 +C = a9cc3836190b31dbfd778488d2cfb0e7dfe2743ce6b40f41451c380ca4048a108018c420f6cae171 +P = 8d057b6d760f3240880a4702ae05baee503f7558a729fdece9742567b824cd COUNT = 73 -K = 010185edbd705b5d28e5d0c53affab8e -C = 9803029260fa7e8e30922fae538a5f51cd05d5c85e3d57c5 -FAIL +K = 5cd9cf382022e9d89e429224de26ab1c +C = eb8e044d452a46b3c39b48d07e653fa166821df8ea25783bac856ed117bd6ac22df1aebb984e0fe0 +P = cfd706ea448f1eb097444706abecd55485a77f039b150e4c15c09de2b15a77 COUNT = 74 -K = 07916af92ac030450814922e28b8306c -C = d8478dff15fd33c54667e3fdbad4c38f854d15d40bac8cb7 -P = af41dfdd86b64714147f2384 +K = 0d4a0916a19338dca921a8296d974a07 +C = 0269db2e2867097eb2830b1ec11e281bd291101b8f26f32e707d34d82b6d5c616471df56d9bee07c +P = b9f9ed335b4394d7bd136c06381df374ae27019af4d83feab46c5604881d79 COUNT = 75 -K = e124c422516084ac00835aa4f8ce8590 -C = 3acd70dfbddb75aa6b8e47bce975ffc4cce27c7a187b3cb6 -P = 4ce2b25ec63bead47ca10163 +K = 34c34786b4298e595ec1844babf88e4f +C = 6fb89b405be69f38439934990d57f74335f81560affe724a49e49c345a34bb25522845e704fd8540 +P = 5b6f3d7f98f30786e23130ab6363b46110899daefc5d697b4c0066a84d5758 COUNT = 76 -K = 607bc477bae068b87eccb09dcd356cfc -C = a9b2be961aff03992738bf86a1408ef79497f8aa9eaa5c6d -P = ab24787055874cfe5ae73d04 +K = c50d21e098967ef977eb5c21d9833dca +C = a2104b9bdf357c3b5104f16f9becc523a291bf347de3a964e8f909db8b34524e7beb8f970c66aeb3 +P = d7fd9ff43eca5e22b63a58164312aec9ce21c5c235172b0ddff406f2b4e18d COUNT = 77 -K = 3ba7c5de1129eda5c9f9abf08e0ee125 -C = 387b182c43eae7f251e386da86ea92b5a9250ca7c75f43a9 -P = 6e535e4fb29609515db60a68 +K = 373d72d4545b87f0941b8ff7898fb1d6 +C = 0b456acdb33ff60315a5321ad5e43a3216e3c553c9634b0c0faa4b46e7e50f1913c64db43f808d67 +P = b167b9b8089b26a273cbd67b40b134c12213e067faab5cc6a3ad590db7c6f8 COUNT = 78 -K = 35f6c624a8e00f4a5ce3e8f5b7714370 -C = 9ded7ecc66757640084f99dcf287c8c63f439b7ca2f14ec1 -P = f874f55a864aab381dcb8d32 +K = c7cf7936a57fdb61d1a2d4f548864e90 +C = 38627277730a4aa95c5f4190b78a2c241ed6de8c833ead522a0f59d78ec565af12738a9bd6be8651 +FAIL COUNT = 79 -K = 9bc737ce1ed70070c5235d73e3305899 -C = 2985412ed45a950faa838d9db672430a64f29d4cc8f0ce50 -FAIL +K = 703c1652e8d571497661c97690bb27b9 +C = 00e4cb406a0dac1d9584e7d4b90e3de4478594a513535b099b73764304e2fff087d1bd57bb54b7f1 +P = 921b211e9d0590548137ea150dcaaa7a955a33f4f9852c67bb1e446213724f COUNT = 80 -K = 2208d928ebfe809c19fb19b453fc8310 -C = a4232f4d30ab5d4cb955dc52c0889af2ff57e5289bb53dde -FAIL +K = 252f1c08a1289864dd11a030b6e280de +C = 9fc9da5e30e4922530137bf0e253af5f2114bdec8f31fe67d6174ad393fed9946ef7305e966837e6 +P = eeb1020d5e141c4135236144d12287e47b0388695b40c0b20842525fb4f6a7 COUNT = 81 -K = 5312d06d5e9d1c635249b4b30b663ddf -C = 5e49567155400a6c9c407cc89da9de6e579caa0661187940 -P = 1108aa43b4408263bdf67c91 +K = 9605dc6f228503684c285c1d3ae238e2 +C = a91a42eedc8da7e079d4637cf49edf649764c7f9845b00463ebda5bb82df11f975144bbf386ee713 +P = e0bf520be3bad1d8770a3b58751fe265564756db689dffc4e477d480d6a77f COUNT = 82 -K = 2b7c10df67ba57feec3b56318b6bdce1 -C = 34ca3f1ce34ea2b264c5210985aecb1bd94a2679d33363a1 -P = bcf5a25b531d4b98f01756d4 +K = 732d0aaebd3a1e5d4fa80199cf291e3b +C = f9ce68e6c73ec2e1f97079328aea40aeb5ec15026fb8dea2017d74bf33d053b43510bde7b29cacbb +P = e9e42422d92730777051c32860ff3ddad0bdf74e9bf95438696f543a18edf8 COUNT = 83 -K = f3acf18b9b942cb4393bfd56290c41e7 -C = 6ae14e8cc9818062b5209310c4f22ae3c49ab9434ef2b3b7 -P = c39b5c24abd18d011e3c1fac +K = ec2754fe2f110fe07e2521e62af86196 +C = ac665f4dcf6cba3638a491b48cf53130fd5a17676748ddd71536e9bd89a7a577d93f584e55543d91 +P = 4d4b64a11cd4ca78cf14d39b31e65af28880cf1a7230d5f7178c4a55633527 COUNT = 84 -K = 251855e120fc6fe83f0dfbe934b5f012 -C = 9fcad6c247018b5a4883f3a9dc3338d8c0747e3216da843f -P = eff746fa25f680f4f54bac50 +K = 1713c68360d0652ba6fbc8241630c005 +C = 6376d11bdca6239c79d55ec02e880489c935f722409cff1096ece3f22f26095eb1372832ad5b0550 +FAIL COUNT = 85 -K = a86b59d915f27a525c4371d38f79f3e5 -C = bc56644d6db0b812c61e6880da30d24978864bc37f75b2b7 -P = a2f94266e6e802452b0ad441 +K = b7cb347d8b8bc7fdcf660b821a6dd60b +C = 2ced4755e6490117d745f3d096a8108914d17b6f384ba227de3fde1b8517e026a63db2c0315a9246 +P = 68035203130ae5562c003648017d74708d5eda1d4adbf16fffa7af79479655 COUNT = 86 -K = 1fa77cb9ecaf11cd9189b922d1bb8843 -C = 5841f5a029379c432c5fb010b7d5ae60c2335a15e773cd91 -P = 64c862c1accbb35013d96cd0 +K = 677db1334e3c020c9deb1e279bdacb1a +C = 2c1bc5e90bccf4afcfe28920a442c0cfb532cc6cad63651bd30ed0f88c0da695c00ebf0427698a2f +P = b297508f9a5c17737106439fb9756a4208104457899544c3b2b1573b4727e8 COUNT = 87 -K = 6bcd331188cbe7b70c4c8af2001767a0 -C = 4592806d3d45463a542924bd1ac740b137cba20d460dcd68 -P = d3e714593fa93023fb6baf59 +K = 617751e6f476b0f5b476a9b5913d514a +C = 22b947ec953856c3b235cebeea4481c3b210fd20541165a28544ad58b0d7260224c52b09862b65c1 +FAIL COUNT = 88 -K = ddad3d262d65e578ffc6b30ad5649f02 -C = b2ba097af8743fcce00837061db85fee370c99e5099f411c -FAIL +K = 5cfe94c57e45de0f4625d6de563d89d3 +C = cb30af1acf3d7ea8a18ece3403c0f0c8be370ef3d5fd4b03f94d48f282f50ad1f6712b82a4c02a3e +P = 4d09ff83e5d3abdcc06271ae778aeefc393dbda74c4135ac82a4fb664e4b00 COUNT = 89 -K = c74e737f319264a2929453e305e263d1 -C = 6acbbf38c4b4efc1d7f7dabf960d349440b0a289c3d30ce2 -P = 97541cfe686a7a117242c250 +K = 9c42286e335d05c5d6b7315fec5cb451 +C = 664afbe559dee11b88a0be3d3b0979c78c4bcd96e8b02d869325f522fe68540c1fd1a490ccbfdfc0 +P = 5fdf0023468a6eda332b0dda4042916a71d8a4a2720ffd367b80d752a85dcb COUNT = 90 -K = 2b2b1eb4e9dbef300c34dd967db994fc -C = 964f4c618741b8c6ae80263d22072fc2caac474cc93db7b5 -P = c07f5abc4714a04168c73be6 +K = 18d286b8c84483586cc5a235a1117ec9 +C = 03dd3468dfd4579e4ac44c8a1ce2a1aff25bf6ff231b04851e561a0336e0c214f191bba543714a7b +P = 08344c75f70e77f1db96d23e134def37e6ae31971049248c3716549639f25b COUNT = 91 -K = 89eaf02b0124d5b445c9c13e8b52557c -C = aed258730ab00f98c5c8fac229479f8398459cb5e5409b5f -P = ff7ad0b370da376e3dfae94a +K = 14db88cc04fff2f7cecfd3aaaecc467b +C = 7a124672c81fa41d853e1b45abea1af2dc21a7172a757a6fac0d669add6cc1d2a8119481f6e4d332 +P = 5d5ea424c93b6519e2aa7ab66c3fcdfe89a4890e465e027df0c112e2c3fdbb COUNT = 92 -K = 79e35a3785a8440be156d3b3a00f1968 -C = 2b6549fa9725aafb98196ef13c65710427cc2b43b5e8e959 -FAIL +K = 6b164e68b699fcdc957d62f761656810 +C = 0955019596eb41a932b7f0dda8189e248b8ee93ef4aa01b8b15a099040a588ee0dbca6914d1b2306 +P = 8d6754ea85b960d8607703ec88929760132846e6456f6c3043670431991375 COUNT = 93 -K = dfa1467146abecf4f3ad32d43a5bc6e7 -C = 79ac0e8558589f280a778a85bd18a811cb461f9648acbcbe -P = 9d45573641b092585de20589 +K = f6bcebc696cbf6881c70744d95946062 +C = 7a4c7be00881e2d2aef3376b550f13da161246faf48169d8a00e98bcef2ff6a984570bca0fc11954 +FAIL COUNT = 94 -K = 3275b7705fa29d3b60ee7491d295eaf3 -C = 6873e143ff41d3ebfb5d897e751c9e12c99bf849b4cc5050 -P = 1e0c4ac351167927d8e04a6c +K = dccfdfde4bf7a4a96e3e85bbef7bc3ec +C = 0d09bff02c3e2ea03a12e638b82829c88779e26f81b6f14907fbea430a0a0287e8211b51c44487db +P = a9c4cc5133aa2b5a47991d549428980ab36ae77abd5aed3c83b2312c49697e COUNT = 95 -K = d7d036a2e161c8fd886a9b66aadb5de5 -C = c1ba5fcc15a140902197cae4ed422d711baf43cc4a05b45a -P = 2b20e839765f5675f9601dc0 +K = e42608fc91e234eac1e36ac25bcf6097 +C = 6346a96bc23a3dc8bd2577f3d90d858cbf35969253d6ab688537f411d00e4946a670fab226194bfc +P = cecc2c1fb919e672427e9ec53314fa2298ff2eff90d6ef6e6be019f671ca9d COUNT = 96 -K = b19f5d14aa8bd0ea078a86dac047b65f -C = d13cc838461d6081153753bdf6c436919503045e03cac7f3 -P = 2db4e6a02665b0afa18dffe9 +K = 95e38cbd828368b1beca5231425226a2 +C = cd61d932baaf65ed75348123e951fdb43d45447fe846fe426b48a6b78e2e77996def4484c5643e14 +P = 179de994f83a7b19853a668c8606ff4c01876e150c36dad55d262461e07bb2 COUNT = 97 -K = 6dfd3013b604a905d34f7062fda2d45c -C = 9c832c0d42118559eba68f123b02658c4e987fa3d511ac4f -FAIL +K = 7d7603a35875ac378fa338e7c18d20ff +C = a5ae4547609e5d7f628a452abebacc68470e89a1b96d7269ece2768bd60704970f13ed1aa27cc741 +P = b9ef04241eed159ff5dd63f2c6a994a3317d50e50abd1cddd9ad4f07e85daa COUNT = 98 -K = b6fee6c311f2839de508ad2b6fbfb117 -C = eefb699cb37f8b068b1c9050429217eb7fa7f299ba3209b9 -P = 933fcbe39c36ac1a007d44e3 +K = 0d3a7dddc90545f62951b8ab6edec38b +C = e7058f51a5a6d6d20c982619c5aad9860cd8f484ff90e3798d2538e3bcadccd95df5243da728fe64 +FAIL COUNT = 99 -K = b9d14c277cf7698077f2402757d5e667 -C = e751d0d62a14776ed4864011549949368236ac72aac5e155 -P = d398dd357be9799df240210d +K = 9a6e74d31adc3166a6d90b0b66f693b0 +C = c2e0f7784375b219b782c2b88e879eab80f5754f4b89d60c87a01ef22077467b343ac593a250119e +P = b2762f6e4c90fd5d8d6d11e359d5d74bf253240bf4356be1aa96aa71c0b014 -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 26d3020460ca5d23dfbf28acb8eb8758 -C = ca12e37e0459f565b6dddc8ba018f8c622ff2e0d74e47e5a416b94778279b48bb74081b28c7746a971496b616543441363a072d7966ed34a2c466a2b57150a6506d790d946d0f906128197911238599f6e110efe96fdf6521f4165b339ba8922ac4b9e9026dd7ffa8fd48b2a38ac0689 -P = 8c8175614201d72a83ccfc987ec28604e754564607f3cbfdab207ebe857e5bf1a1769bff20698737967fc5fefc0f477e6acd4ce6626f25d6ff111a09ac7b292c58ee1bba0c3ab4671f276af88752ded3ca8a76c4833a586cd6a9e4526e599ec4e08fc03a5d +K = 1dd51f0d3a0a784174ba81b2c9f89005 +C = e1bde6d2df3b8e48ca127f97b56b5dc2672b3736cc3157c7b80a0316ef1efbdbbce19fea23da831836ccd2e002b2c1dfad206b5cec358446b8434d7f4c39e65b0e0b50897642ffc34bfb3cb3e233aa9c1058ff0d4fd48e98bc8cc3d214c06d514dd97db2278093a308f91f4ae92626d85771fb1447b36a3467fff02ac7e81ddbd0fdbcd02d1acd4f053c989ef3dcc2c01e23bc2f6090f3e8c0ba5f0082341200b1c37b99daa9cb6fec78bce3429aec5badb9fd28fdbdbdc5d53570675a9e39535b4594095658ef950ecd79a162223b60d2eb91765e022dc6e1bbdd86f1bcc280ed9df350da08a801fa16a1bf2701947acfb08f19fdfcaa1d76f466a5de2458a78fb82f6af3e1be68f405a4289f25896f4c9830005c9e895c86e67eceab0ad544856071b8d9585835b5e85a07ab01515f7ab54f98dffb4ca49a15068eefc6a01f7f52fd1adbe3631c59f6f43f79d2b4f2a691e2b30bb1d43a848dc3ee39c7f2e50f0c9deb7ab51e33bf40903ac255bb1510fd61676a6c13c3c776b8aacc6cefb95e24973ebb11192e2692dd0c6a085b58f86e11cc28ee2194988c123e3666da7339c0a4ac6afbacc83f1f100fbb39efff7cc605c9213828224a17c476395aeb9bb0a3150fb8889a8c2a494c8c526203f261642bfa69a94b86de9e6d3d932fe20fffe4bd76d502c0d437a3e1d0d8727b7a8dc0e361967109e93566326b6c517663731c4c9bdd0295d8 +P = 1a4eed4bf5b8d2e2a58f1f1277f164cc32cdadaed848f76fe634034082ff9aa1711870bf3936d01a2aa48de30de5143b9148cf56f4490f9d480dda0b672e8e17a012cd26cec3c68837bd5b2f9beb13e0110f21c6c36343e09e027f39557d1596d4ca406e3e7aa113e9bb8623106bae25f0ea23d46bc29970ba2596f83fe4f73a6f978a4d949fa7c271570a2ae5d2b50792d5ab5c43d455f359fb83c35ca3da37cd73cd66b6adce94d78ecdeabf667daa47ea70799af299e1d898ccf3fca6c42c6fff8cf2ec992f596fed4a0cdb502a00f9b5689302931d15cba691e2f8079a0411332438b714ace5234b91e4aebee8f8dda0e1968c2016fed350430a65d8d206c9436f40b79ce03083b8dc207d6960be1ce97007ed22a388ebb7b3d8f7d2b7d9f8f49731fbcb21e21db0cdd15674c795d5af2b2cd727f83e634e8c47157ed0c6873a5c9419e683f16f4a7827b444967812f9d1adb9201b89a0e66bbcf0591465f5d7036a21cdda0e10099feb819dfc37fdd3105120044dab716882d3971f312e3f4459006fd5a1eab08ff63edf6718f47ddaa37f7f40c9c372995f3aec97bc45e287b64fc8cf5559ab04a4d4d3ed482f5d61d3abd99cc87ee406da3ab9c9cd22ba3b8d191b26754aa94a2412f39e332d77fe72210adb0cbb5c96adebdbde036f1f1aaafad74a7ac2594f81efa734054e2e16dc931d49b970b81756862705fcd4 COUNT = 1 -K = bff805851c567ba96f776fd37686cd22 -C = 86011b6f01464b642aaf61508c2ad88a7ed8bbd200087a183ed5f426deb2a88a1e8f8176cc8010019b5c7beb89a526b76d8123276e6fbf73617cea71e99b57fd646c231343a151da3c15ba54a28992b266a677bb3fbe3fb5147aef3e49401042f4ad1579dfad936998637221a52bb7bf -P = 7de425b33c7a9240dbb6b3aa4086709def9edc3e8792bd09301923f686c510e6b70abecdc5180770f5d1a9415ca6c0a3d7ee44daecb54b64ecf228be151616f7fd2a80ccccddbd3fc9f90222646c65c1cc1c520df7cac905cfbbc96c9ded2d1d12baafee8b +K = b3fa008b5947ce58dfbd354dd01f2d43 +C = 55cd8e45138f477ce0a84f07bd28a93d7d628bb4860207a2f6dc4256bd79843e32c856a4fa831d1603699d49e6c36291b60aa80635900cc6c78cf0a2ddc457beb41782de0de03f08a064df90b41f2e98ce61185d735380403fe56b68f8343a801a14afb8a7ba79684dc2a585110da83e9a836cae1fd9e1a220dd6dc922b4f02b15ca88d43ab61e1da24a9b3cb99c4e5024ce5667f4841ca2a305b1f4c1ae9fb63d1d4dcb83870755a1a646b16c088e612d82ba2bf0e7e2fa0e8035c3baeb595f1ac9bb49b01f6f71392e217c049c0e9bd794b9aa2383cf59ee0a90f965610c65ecd629a17cba2bdf2458e3a8e1a9d219cb66eb9ec8e5226b34f95003064952523920a0b4e94ec8ecd1bdca8a65fe46ed25fd4d076e46fa62a8cde6eabc593045d17cef996ebbeca4b537f65c4f683a10baeb4c42b9867bbb49ca7ea1c5437bc114948c542cffced9bb1ebe3c946eb24ff55be89be004596ba648b264167217d267b881020b905f508e4f0e1a58eca051d56ff30d91891838c574c3de54e3feafcdf514740ddc94ba92cb85fe86033e67f14d90be7a0222e4bd1624cea8894df66a36a8e848dfe9168d8024b7ba5636afbcf6b945a53e6b2778f229af7dc2e59bebbf8bdbdfde1e21465f6b6344b13afa0e5ceac212b3b88932f21b1ae04268476597c92e64ff7c14b9ef678f10a35b56cd70ba03063f94aed97b0a6cf883d1f07facfa37b6e5b070 +P = a067ab39cede4ac6c6cb7630cba48c52a794ac8ebec037125bcd97d1a3c52a8ed64764899f9035a6944d0605a5d977172a55bbf86cd81aef5d6bafb1ac86bfa65da2b3c39bf5da94a98f7b6dbc5df16a7b38061e0665ad16b20fb6aedc9ce7f6d3497c3c55cea92e6343f21251092ef2ea307b35f999683298098bedaea847d1ccbf8bda18dc477e8d49fee4e357273396ad2245703485b97b5a7d97057bad875a3e76b67ad5adbc6ef3b8ba9a1786aa93149f0f8dd166535acbf93f1b9839754d537da3fae1ab02973427c3f353fe9aa6c5a100bf0e6ccb08dc1fdb0fc363a95c77c5758d440db0a70f0340a4c488de51e1ecb932ce2fcb2c95ea28c9f55695d97ba1765c8f11e523ae3e4e1efceb69000a192c047ab197f4840c664c035064ecc12926fd3bca0527a160b5b5a2bbaf5db11437f2c38a1c7535e87f552b9f04f2fdd309a826e4ec7708217022fb075cdfc6cc23e9301e33068caa69ef746f357b09ccc098443a3a2979a225e70be1e722e8d6fbb57d0dded2456c1d47eeb0af2241f769836026fec8fc51d97c4abbe9710a4aa5b95aaac83bee57e1333fa244ccc971b6260a9be16e31cc2fd283fec1b247a7340d149fe5309acb47c9cdb955b7bcc4df277eaf611e8af281ff0bcd64b4534309282d1b5cb14efa93141869d67ce7e418f06bb4c2feebcb7a1151aea2eb8bc2fc4dcee53de9b2fb1803490caf COUNT = 2 -K = 90e69d4790114c331608d73b8913017f -C = ad8a7b1aa195450721f532cb48bcc51d833ca226ef7e29031e356936b6aa4c09cb4b6d8ba01739e9e33261007a3e6cb517548763a3cdff581f6de9c6d95f473ec69ee75f0eaa75f87be2dba10297a4d4e186847a06787bc438cec348dec1e95ab33d5c19d1bbbc707944a33b747467ed -P = b87187966204cd6878e8db96437fa37aec1153c4de98e69a7ae151de5c88a49d3836fd2aef22da613cf702f9c03ab8d86bf1f51b05756ee11d9b0ce8f842d7ee0fe8966fcf21c007c6083269463d089e5cb3d34ad269033c3a6fbec1a1ac03f6c261f5e88a +K = 4b4c43c9de4fb4a2a7a7adafeabe2dbd +C = 6e4d08b8124f7d3e23303fac1a842014f95e3d71c438f8f1990307842796dc5e404ad81802e35c183fe000390a12c81ee684c5cf26c1d90e414cfffe6931b0f352936fcf0b31429eb5c7612cc359a15371390e518cf5c6a6bff1bb0348d14e2c39b98c9f30672ed2af1d96296df8b5567db25b9510a2083461810e119735490058ed1b46b7fdfa885041d8749f90a072b43ba49f2f51fbcda0dbf3cf99fca1d8f46330e5f6fe079d6679cfa26214c8831b782aaa023a2e0ea91050d277dab876aa6865f2bb3fc1a4a77db52f6179d5e5325993280948b6b7002b572829641d35ed3d735d8423e5b24673c4570ca25064fc2c2ad4840632536bcfaf2a7a814f3eaed92b4d501bc51c1719a0d8d8f420b66db845682bb41c88038cfedf13417143a3a701b521a9bf0bb639875a728c3b5ce6ca7e7a45bc75285c193902e6b5e7a4c6e720493d3937bf485e587bff894f70fd6165a1d0129cc673a992e0a4f5489d228a066b1df60002ec0521924f8d672cd1452fec927e58e75807b2a390256f920743fa4d0fc8f59f2469a595ef65095ca0c80adfc843e9e69b6d4a3f824af47b2bfbf2a7a6c1b650378f096f6f0bfabc752c8f279d4f45d56d09dce97962c119de3a64d83b93ea55066f24d4238a229ae86e6a7857af1d8aba823370a72fe358046049a84a70213ef31d9e77a722def8e21480e79b71299438070946bd459a7251707446c911e381 +FAIL COUNT = 3 -K = 7310b05d62228ebf4f8056ff7bc436e8 -C = 07ee2735c88bee0415fa4eee9677e274ed2f7fb2c2fa05f391332d78f4a5777527c7c2baa7de8c12cc04e4ed446f13b17beaddcd46b912be52931df225bd69c63961b0c7b54b9ec92d573a15e899d027dbb947b7193f33981c5b09bb483a288aac28a362d4057b44f25b215b0c453cca -P = 99c5b3444279ee0e614779096b6b37a8a02fdcbcae0e30967d3dfd092f3e4e03339251a68663ec1daccd1f36c5ea2a99e6edf5c31723e203f3db0dd65adc0b40b29174ef933856397fee35c940cee318f98a9f7a450fa056680608cf5682d045bb7b0357dc +K = 96ab719a3d08df2393ebc330e151dab1 +C = d50ae797f6c3418f388a7513d693c6dd665e858767531fbccd3eb1aabe796690ec8fbb757d88b169adf5c136de50ff0f2cfdd8389f812382578aee0b0b61e13c6a2bc500640fe1585f068eee0d1fa3420220e23090e24e3248fe16f4e0c7c0e996a21b4947ddd08fd3ccc1f036651be4f48ee1ffb486cdc05911244480548221d8da1f2bc37dece080e51b2cdd1ddebf37213a4dfa1b252e567243d9cec8c89eb8db544e7c389a2e13f1b91d860df3cbcec3e85c93276c2a9a5fa080efc85e9bad3bfe2d9bb06498dd8b3720456bfabd3c69b345f6954872baa1d43b9f7ceb92ae9ad77b270d0b94c79275a48874dafb136105f5553529687b6aeeaa521790b9376c9f88ace94049235cd52c4387ad210442513dd5e07171519d58b1294fb8ac1f60ac68b8f07b418e1bb0598601ec38b9a9b137dd87d0c8a41089d17ca1c720fd0e7e3b81b85a373753bed0f5e29586f84cb29e1d88c379c965c50f6a803ddfac2e1555beb9c208a3821f53bead8f120f4ef4a1490b730a0b8a2f1869c6b985520d709bdc0e5fce44316b8aa2448a2743761bf77bdbbfdab6a721a8ec79f38f7e7321a80a2cd3a35a912eaac5eace85c4cad3c6685b88be4517cd1c20971b85bd9e8eb6e52869e014831dff7585a163f5a4dbf1d59160104da90a9cfcc8d6a0324942b40fde4319a32442d83ebbf5d7a36e9495be2ffd0e7faec1b66c96f71843750b8a051b7170 +P = 3a3b9e6de537458875e59204ef7565b6dde796e5ab11c83f7a361b8143f0f7a7eadb5b53c6efa6d199f759cad5c029004024eabbaff717bafb95646dc31a8f6063b9f8faaea650dfa8803bfa0c79091f299a55f78611c2e0d015021d6c6d3abf3d85cac306740acc144201516b787421a77c78a566c6eadc88ecdeea4ff861b6db73f7b00f0a8f62faedefa58866fb368424d7267afdf5ff1279916d2f177408d780697e1c45e58a524bb0365858d2b5a42ee2bd9e8904134d04cf071e84db8a31804aa8bebc0b28dd621360385117764178fe74b29da3ac390ac4812fdc7eedf91fce6eaae3d03163435001ce42f55982daeda5cec5deb960b35df231463cbc26267746be628c53b55f4f21ef003816eb7bfc6c710efa03d0994a1b3c8595fc9293a2c101483798034d4ee7e3d5e07bbd897c9de4b8315e53cbd1f81bdecbd59d093c844a0ed1e3e9d238707a7b893ca453745223c67756d9062152b239ceec44c436e0896a59ea9ea8cf79a93b8b759389bb5e73c5f5330e26580d9777817400166d826008be5e8c7184ae2ecf8fb9dba92af3c747c74e1534c05395f9204b5e8481fdcf4dab5ea6224a8e0ee52576d467d930c0899d31a4e288e3eecb8cb7a3be3a66c79ae93033de5d0d422a6d54ab002d1a82f3f60db97834d9fa3782dd64cbec8ddcac2216a393dc263cea2705fd072ec82dfa1ddef9c588c49f17c275 COUNT = 4 -K = f4bfaf42f090a3ec95a2cb6fb6fb64c7 -C = e35b8eab93401a00d931638e2f9e83b5515b5f9bd9a145ad9a6be0d6a44ea291babc460c0564c7f16be2c6fb69127b2c367b684d7191191ba5944c9ad5eaf26a1f7166fcd227518d4d7636cad8f2ced766601fbbd7173a43db0a0a17414ebc92a0d6fd49737f81a7aa1c5fd34340f6ef -FAIL +K = d8c221e426109cb5911d7d6f0836f4cd +C = d853d57eaacac8096346564eccd33281ee864fb290ce91eb717fa153ca00064e033635178c59860a567215b7320fab4a72ccf716501dbc9a44d5b3d501729674987d2413cad79dece055a9b0d47ec980331f4a236b31984f5d62f9d7f58c0f3afb81fe60f266652da65d06874334be065f56096e98536bd1f2120313b0905ffe2f2c3b6de265ab7800c42be810bed18548c08f9193b02a3981a922b32b618fd9a978439ea382bf2890ad1f30d115b2319276289cf4f7a9917b0c064180e79c8644f9ac880a793b4a8ee424dff32cf2b6ca46f52ff8bd8359ed18ea8aac23e63ae337f5baea9e2ff845a5fdc0b79d5767d47c2a1a536d889f553c52696cbe91ccd2ec671a0644689bdb0f4db7e5d58c854eb539b6b4cd9214e361a216d315b1b124b43c76c703c01d3bc3142f760a399ba4887a6e326a58ecaf56fd49ae128a86cda485eedc3da80b75b171e77cade00c903c1f216eefa845dfaef660fc5ecb6791ed53765683f44da6c4ed8a9ad9e995f7d920cdee8463e79b18e8874b0a2f573b1825f8a480b1ed1245c81f4ec097bf0a0504aab9bdaef27b67d98805a7ec687c8cbcbc92ad3ce58651162a1f57f8af427ea0a111dbd6e3c7f240eb6b2360650a72b9c1c4417b1d541dfcc2a8d6ce3e8c160d8d417e4efbdce809bfe30802696bfd52a0f40be4db9be247dfd867179d82390b55180ebc6ceba0a990e3f6d32eef9dfdb946706371 +P = 92814e18dbe6e83714c4a82ba3ac3baf682a8054eb36666c9546db040d40b8613fc560d97b05265fb19ade180efeb55dfce2cc5981ca222e66b547b78a42401710535b1181674fdd426cf2b0b55e5b7f0505f11307120d495cfb197a3de00569b3d39f93c27270df4725243d314a026549692b0e2b4079c60a8053f0f36e83aaa3494307b175fd40643c1bc264eed1c00f8b565f2a3aeeb78bd94970bd9267d21f5a9a1b07df09ed44a3bd4255a139a328235b921833f92904a74ec202b0eac65df1caed05dc84e52b06c1ecf0f7914324ac4d828b7de7189705308959be42401948e3bf4bdd50ce24101c67ae745a73a67d7e366b6b432ce67b05cefd149a17247010f42dae4de1b2ca42a8e71824cd32c5cb2e2055443ec3ff24339c774dc9207744b84e9203fda1f85595f961987d847ed33867f1ddfce0795e3f2d78c5d749a488a4997392b8c9022c810197c93186894faa55cb0b6775b57a7ba2729c617c9430a44098d5081e3c5c4908ddd1a475cf9211408a8ddbe19ee527ddb2596456e1b1481a09b04e091b1c14b7b2e41bb4434a906736e115cb25ada0950ac5d2845b4a9f1e95f4d80f64440e983324c3aa9f3ec8964f9da0d26aa47e86355aa80ad99d0e573fa9932da70bd65cb1a06d8cb77e455fe7cada4561e027ca1608132c2605b6d0489bba6b29f293951883c451f37bd545f6605364ddc75918df097e COUNT = 5 -K = f3d06f982457a34877ac54a5f8b28a75 -C = 53bf469bccb4d2b31b06244cd7bda76c3e3d524f0ecf50e1b29c18726fde0e407513053a540f608a827ace66c7519bf0612f32a3a2153b047e07a379df668161f17710a0738b67b1d4da66d56ae10d6f9f56336ab5f65f54bd2eeb3a9c250f2135ee18a643a2cde446099a0e21ba9a95 -P = 57ec6ef1f46c9dcd6e1762dbd8f2ce32c16bc863528cf1b7151b2621e9e745939088442c34cf515f34eb716202d84fe425e1cae9a13e46dd11daae0e4da9dbae3e595c82a7639c8db6af21988046b0198434fb1b05fa50d7ba0bf66b6292f0b3b29df27094 +K = 704eb91dd5ba3d85279cf47c01eca2a5 +C = 51c71fd7778aa3648f3e31e1db0c73cb1479372f2e35f65f00188f08f794993a2ee2bb7e91cd1a2b86e92b8ccca7277207fb525ab17600173fa28844ae27f093e0e5ae00585cc714dac90cbe9b6332cbe4cb689b2cd141c102c6881f5b71ec477c5f4a91f7bdcb5871aadd478f1a9ccc6e069b7283f4d70b26e8748eda6d443ab13804c543a44fe2fb366f90de35d83fbf6354a9a9ab4a93ff7d61cbc0bfe05d6102c9c393273e7d3a04d61eba771f05cee29e5dacb7abf34ec9159e121841e2c39848f604c8f743313cbdca828bfa4635a81136e7a37f230c0d3c814d35c2eaabdd94183312909ab3a09b87cce0c719408f837bf24bfb2dad87630aabc9eab35bdb9cc536198389aceec68e8779f9e1eee84392189823a68195b75bbb6d33addf580564e696a362928e2ac506b79480600bc2f9eaa3e96f323390d1d92cf3c6d4bd4147ada5634cff2bf2d97b259904a335eaf11ec3fc84dcd8e27f7538e0fac1dbe7cb4533f4fa58913535d957b90678fac58aa96694a8047ac774afe488ab429c6807e709351f8159dcfbf83b865aeeb26722ef64a537ce932b2cfa6d53ed6cc1ca8ab58748c06a753515fffc56e294f51ab257585b610d261c6fe12def38a1b5dceaa4681569124c679b20984ed2967740419b342e9010eabd291de026f6e829e4dba5300cb668191358ab58e178c29a0194a639233f9c28c50a609bc42f8fa6cd17bc58eccd +FAIL COUNT = 6 -K = d8ee176336467e0ded8c03e83f5e8889 -C = 9f6170a6bba82a94634a56e53f760fce74880430bd80e72d9e779a5e2a5f1f208b9fe64876e66b9746f0a92779cef5139426589cedfd1c5c686a29dd2de5000ef89a3bbd0cc0cad698063a3f9be5dd283ab91fe97dee591c1f93e5a112be017ea09ae33f59128e7433eafb7ce518ed77 -FAIL +K = 4dc81ac7398777060c3b82d30b6b2c37 +C = 6e264a762cfab7b3d3b264d875edbbd9d89fa130e3de71afa1fe4c79b24d550e40b039457efd8ff2da9e47181c13ff01fd948f5c467579f90b345b1873f15ebdf069b94334b269db6ddea1392640c21b0c3c95bea06b7d450820cfdff2c64e0824d49ba32a1043c75b92e17b009db934e65c817c831212f8af6d86c8e4807f24d8824ec078c770906bf8c25310106b066e2f5b7f1c5a047476a9354e4d33643a9e701e9a6cbdf8ed887b3c9472d14c642842ec6c5d8f01a69bbbc2761199c8495fda96781e62d3dfa1b4ccea2249e32d2e978d76cf7db19d56da6dde65dbc7d5259789e0fa5d289a8e13bdf543c2c56708d3a4b3bb374e9d364c2c9dd3dcbdefe69f2ad92ff02bb9ec944507eeeeb91faf35b015298c4ee9fdfbd953ee0aa6600449cd6328eec0dae331463b18ad97e4943aec1ff55ae341255249d739eefcacbdf79946463141f7af8db19c798faa6830cd503b353d1211467be38d6573453381fbc92a527d3325fbcbdd1f182d699a3c53cad61acf24e640f18fe3ab2a57b25d5f4d8dc1d7c8cffdb7c7b65b149535b0be316a218242bfc101e62c492e1a0ead2705c2e6b5771ee0a235433b6c0a9bccc6835274eafcc10308023716a97c3d6c28f2d100f08387f70de35b040478da5127ee5fcb9692240012f60c2ee46c48cfbfb6bcfcce2049b90c7577051cb3846e2b0ae56140fd73e2d73aa36ecb99617b649d11a85d623d +P = 0cab9debf20655ead03b5ac585d81b296a3da934e37180b6dc52da024d202237239f6db96130ab649ee196d694085e48796b80ad9303a1707c74367a72bf51b9e5d20c0c37fb8de1312a47c544a25c4a92984020b024ca1f960073f68776c21e4073f4d123a3280f07d882f814e2c45a2d6801fa3f28386447a0e1b9099e2032de57e536a26ebead4315b284d70c19b61ace7f686f64bb84b8c5b1bd7135389921bfe181347564bee0864f98047989da4ac221ef5d7f8aa44adf1545734c4fb5226026d2607906f987586e1446c37ea2b3999422d7cafcf6f4c238428cea1c3c1ac069575a4db0ef3c78b24b8fa3e3a752d377a6c143a3acf5d6e593e11b04b40acbc3abcc99a043b804d9dce7b44fb32a3bb3f785959ad9b9e8b3fd0d94c37c0a278be793a69469420ea5bcb77fceb385e33a99b0b90b8dd0a462bcd110ad291c8af3f493983b7da966d11f88fe829df1d02aa3d25ef2ef73413eb20ad85b3fefd9cf6c3daa0037c4d6034109c42f2f977a7e57976208df26043ffe24ade60a2aa9af9cd0b57819e5bd881097297fdec54681898dbcd13743c6067daec9defa9bb1135ed36d88e71a280b44a51b5a8178c4c363af99d1e5dca7497b4f4506b0f28bfbd120d7e3d4dda1b006fcf640423c1695addc1fa97550808ae690b4a40e4dafad551bef886afdeedda671f4d2cfb1f1f5e9c647cae1a548361e96b457e2 COUNT = 7 -K = 583ea56a350af05bffc16712f1489a86 -C = 23aafb201910c63cb318a62341c17b8b29d130e3437651d1df96a28af866a103c349f04b1b3f33fe6c51a82bd499bd4ad5331bb1b93a16902b36bf38aa50300597ec104309d56ec8d1e711f6e4786c125de24e17ceb33de2c3d890f4aa4b710a1f3f879d1b63e7e9adabdbafbc14ca6d -P = 86b04d00db8589f982a8d39f02aa0acdc46b81540a0318699460573f5cc9afb8f8aae33fd13b79a73f53cf7e87f715700a2b4dee5482dcf7980aa943729468dbc97aa0916fdf0e3a3c74f74ba26831933d8f20574baef0193fff14795c3bee5593445aee37 +K = de9a9b16aa67b9b5d4017bae4f361a25 +C = 44c93bdeffcf05979b5527387f9dd1e5522c18514f7a25f0fd473f057f282c90161d3ed7f776f758638c29e7d75e1c3528f87dd3dec62b4cb04695fdf1d5aae1f031dcb0904f226081d6c98304638f822f925e29c056550a064927bc7af5998f90d064b1ffc840ce5f8e867c21c2c86a47f27a64b92964f24ab89d91b2f0a9cc65eb7ad24f64df4f14b90a1cd5af1b8bd79c0830c0ead4cbd43664676c6059eb2a1b70a605386717f1ad3ee2a84e5f542fdbc2b6f42ea009f08ea7faa944f7fc023ca39954a2bccdb9e6e6db567f6d945039b12f59d5dd2c483489fe20565e9077ead21f7d2153bb73a430a7a8a17a0742d483bc701aae7af66aef83ab0fff5e7f178fc37f3614417d23e06f36c0580f2103bbb0a5572cc010b3e03e8a6c6aec4a8de94b1d5ebfe22b2548eac4ac0fb6cf4e47954b3d6d2d282ab9bb0de7151429ab453c52b4ebf91a383ad5bf286d4048ddbc095cd9f2857073f8679fc2f9732afb960e7e2ad73b6f8011f279e331fa975a16fd2883fa7c4ca835a1420a4f023eec17c8695c788e60560dad579e124d62cc3da9d155e474f66bc6852c4e366ac91e3293f3e0b4a202cb5ae55bd534ab0d320aa7486c33c95257edd28423f72a2c5474a5e4b4c8f8b0a8eb9df1b7e0b3f4fa6ac9fd5c55fa88a81152bf4b6b9d64d0edca6560a9be1edb4629b9aa41fdfc28a8e138b5dc53f579a9b506a621173ce17a8e7466b8e5 +P = 5d0dd49630edcd05f51c7bb02d22255a60ea090f7855e61caad50cb89446bf56e1f348b3ff8abc53f50d4c829b736893b7a3ce1d0fbb6c2974562ef50a6e11731eebe2c1744cff1b3fd13306e84cf8921491f62ce65f81d9e3f9bb239dd3a81717eb1256a506a5c67278b38f818ce95c68955bf4b94456ef62c4ea45f007c79659d52c1b7b9cd0c5d97d375d7f6ecca0973121e9fb0d5d891d1aa17a2a88285faf5e3651daf359356d5c120efeff460c46864b4ab99d36d3da1cff978f1a351912e8e16150971eb0d63276c1ebd21178fe5a863c9e76e6827ec2a8906c2fa6a44f8078d56f5dbf9c8c73b077fd38547e2184f85449377e53fdb63c655a33f70bc2f7a97e4e083ba7d0c7acb8f6807e2b09fea997ff493b8c94a476f4c2b4d06278c0a411ce261652b17f569442e3e047d7d00bf319dfcfb01a32fc1d0db915314eadb212ee527d4315723da9c0c2b2b4235736ee9ad1dbf74990ce4d320d6538f2df178f940e10055adb2ad9ea217998c1bd4661d6fff0974d1b78d0f8a11ae481800bccf0cb140c929ccb289bce9dc06e944cb443b4f7c30fb0ee52e9a37b4bca71fc9c6a210f5201857d3b901b90a8673a3599db6364ae47b8bd5f9780761324cc44dcd2d07f6f292989f6b62c5ba3e0eeb5f8b98005ceee1a9e16770261b5bbce4e684b02f7ccc595e53375f9e76af4062661060fa1139c04cd97384fb211 COUNT = 8 -K = d3d26aabb14512b4bb2fccbc380487c5 -C = fc3173cddbd489d7355598b246a93c9261027a497008d5a10347419b333a07b5f0626ee800e1a214a30627acf94e72bc2ff9ea405f20e25e6a265a9c54295ab3a9d3dd273a046ad6948cc5584e9dbf921980db836398e69f4e61e09da600e22ccb06c877b46a9981e3274482afcd7ed3 -P = b01859fa806480d131c7ac96e56e80a539353441da9293c58668784d223982f1743ba65e3984d45e0990e919c5228723cc2171af71ee05dbc5a926b1103d0db50c47a215022370703b9fc0e7126fb9762500653aa8adc3f448a929023bc6986c1fdb8e5fb6 +K = 83ada338e5f1c42d2984b308c08a7bab +C = 7b0c6d68c2ed066f12c72148bbd7ec739317463ed3c93c0702da738f4d7249f95f9fceb1980fa61cef6c730ffbebb8d9a6fdc17f94cd6e3cd4062140b3e2d9e395378320e8317f5a98dcb1d4ba7db43907b9765620b9a6ddf26bd17e8fe87392818518812c1e8b1c7e865bcd99d8236cc26bda6bf8c5a1c28d3ae8c18ad04c128c566ed1ff90ed82baf48a3ff06dd419cf0d11c1d92a4fafb52489422a12b2a03fd22ffd539dc07330e87a0e5cde411818272ce192128e8c12957b4b5cf4802c03b2e5f61da6effaa7560dc2b0c5476393fdbfc16b8a23d13b815c431d29187d74a54ed522b8b87a444c4f9f867f36564ffdbede0d887d8fa7d5715432bf432c22cbc2e7b350c9a136abea60f144b4ee4756c2c21a9ee446fb5be45bc9c42025975e826d5b70c178cbd526a78dbfded58aa19289236190093cac19222edeec99e75ea1cc0bf3ecc5a1efeabd112c9d03f57b0aecacdc81ec1b77d8cb6de2277e530b864ba35266651250521b26cc9eb76e4f242b5c7bcd718faf71f2f6fe6de172e82372acc9fce650ee3f7d6fe5612cd3e4d6fe7ed291cb5b881fadd21673cdbd3797387c3dac62b04ae1217b3696437d0d8f20e18e42b4e6258024c338af175b98cae7813ac5870285aa31c703c5e9c3ecf1eab01029d05ffa2a4fc5c502eea76bef1b1a740b5a68cd2628a0bdbc30c66f134bf89c57cd97bdbe0cc2e337c2e7baf3db818ba8cc +P = 7386b4f50204de9583996b52622c22195737d69333bcd8fca049c56d8040f1857e5bddd506356e0329ba610e216b32bde336e4476c6e0414d72298a43f6ce730ce10899200237bea703eb3640b5819bbab13acd56215cc99a207ab8114c1df3119227ea8f6e684ddc418e702be02d705928a70133875ca741b7919142c301284fdc488d6da4e44225236433a1c8acb2006979af86721943cb3367be691f61aadefbf44365dec85975e5642203fca4784468082facaf2e1644bb0cc6cae7391507c20129f4ad0155ea282b2ba70ae1fc3498c5f52fbb8e6052271980b04467ae4eb732977a548ae2e57040dece812ce0ba786539781b9a65dd432cd3f3e3f7da8e352e88b7238262659314e2e9c3936e1cbfc0a8d4a1181e5c11cd1ec6815e41ec831629767cc45f9d6370be1369f191626d0ca49b1dd5cd3d2875976bf0607cbf80a2d07c14ff89e8a5d0bf1bde4f900c907880102fa2492e9eac67be9b3c2bb8fc8e4921bb17f1a01de914c5f00e9742fede7efd84834cd3a5619f93b953ad30edaaaa7879c3a11d2636a946263641e9b2912abef53c3942e36793df5ffc05bec288cc7a69277e2fac8fdbd60dded5f4d7b26ab3ba0b15fcef1bd1466a1f4c22ef9de10914e7e2831e6b93b7d1022f2c1b8cc8993230998c46334b3fc5e545ae3085201e07d9fd3d70d3efed7a979c202e45f5f856e4f9306f240e8da5ab21e COUNT = 9 -K = cb37e6bf1e4c844bdbb07853f1bb70c5 -C = a2d60d5f9264daa1174b4fc05617b7bee35dba6cffa8c68702c33bb2cf227ad5876f93c9198d87a046527bb361d47ad51480db9e88c9d78b3acd0ad46f48583c92fe2d63bded9838cd9d34b123aa0cbfc51927939665cd91178d036da81a806a9e0a13022dae946ba24f9b018e1ac270 -P = 8f614b1eb037b154e97dc868b552156aae08fa330dd6746bca9886658a253508775e2e0e78919c0e0a926391da7833ef8e9e8cf7f3425516cb95a46f86f2cd3164cf96f06fb52e4806e60fa45bd9ab5bcccb50a1cc3a4917cdc0d7727179672f502854d997 +K = f93c04f41b8af05a7d574ee031f8a0e8 +C = c29c13e6f270aea2db885e032c369f10797d8be3efb53e93dea85e97dfefdbb823cb1e363c7ed5862c63cc928a2c4faa29a85bad0e442d40ed99ae83b419513e3e352b6ce789e3fff456915c71d8305e0ee026d31e8ea3b1a2c0b783cb81dc1253288a2d989888de8023e0624f35a2ae0eaec73f2878726169af3e67569780a933b03fc1b73c7302aeea92f0e25beb9eb715ef42d313d109d4bd69b62342ff5bf8ccd84fa5934af51194a30a32b540e1d189271bc7adc4156382ffd37354c7dc0e2153ba7cb4d120213dc24befa139691785af82a3526c188f667229ea0c69194640217e1ec0877d3578345f313ba41e91d1f2de59cf713ce2308065f7f6d83f10b24edf940ebaa83215dfa150c6de50fff07553ed76064fc4bf1a1caaccdb5d5cf429ffa978079461220501168f2655576f046b06d76297c75d7dfa3b816bb9aa92007264676c881521e1ac3bc2007afdc6b865161d131b31bdd6b301e5d42d2baa14d4c1e83ab0a1fca6933491d43d5798b36f4cc53881b48eb46ce3f90bd45eed578eef124bd73f7ac19344982395b58d1816f51c249be1a288abe650576e2bd34a609ce4a9ba7c2a81ed6775dc69ef78b6eee8f28b748e82e965e6765f49961497aeebcfd6273b90178f0369fd87d328a81f76f465a21cf9cd1cf65e5039b07bc03c7a7860bd1514dfd46de60b0bc32b18f02fd91bf16e5809aa78ff96413773f900c9df2fab +P = b794959b7f469554145c933e21906284620b4e1622523e7f15bbeef82ac4e68799e5d9f67fc5c2671edba4a409a72a86ca3ef00492d28d5cca48cb12a99181e4eb4bf21a8fa90b773b17d3c48ad3b879bed0988de94680a786193f4652dcadc45ed1a5b5aed78b8cff453e950b0ee8402103f4c131f29ad829dab7504a30970d354458cc6489dd1d1d6c1413f9ca93e0801292e8d42114b21ad0ecaa22a51034e85d0aab080162edbda51d043e7c37e6857bd794b4ef5cf8dff2a3de823c7b1dc803e49db6997486517d0a41593526909ef51d82827b71fab39254f8efb546672c64800d2f6b2f17543dd1c8a8571c89294e0e43b15bcef495ff94663a5f67649a4ca16e92b07c814d8225d4042a6c98d23d5b2ef07dd7177bb71f9b4632ee9ca0408d2cabc6dca0eef40b33374859c2c89bb9be8dfdf84eac4f27fd73c9c6285ab3c934b5d0614e811d47be8ca77ec01db0d8207290dc0d10b828986280f8ea2b8ffd85bce251ee00b73b544cd3aca94b2d77fda148688ca77a8e75c975e3ea2227eb0afcadf28a4fe8c0f45bfb7a950a3df46833c069275ab24b9897e6e59e867b994c5ed22f2a989ee037d86bcd8ec2aff6b3269b232352111305a66ee2b16da3b2228f0a1f2441295a90a3e7986c612fce206e8aaf2d2fdbc31840e04495a94aadef24ef692efd28f2850c4369f828133cec29a7449f2ea619ff4fcb69ec COUNT = 10 -K = 22bb6f1c6755d21801b163e87562ecc4 -C = ea115632c6653243ff8f567e02bb4a7d15ab697373a625b2924c56a1f8cce87de60edfb7e00e47b3a80d1f81c5167f50813a7a20997c18e7aea56e94ecd7f494076a27042f53b73c091669bc591d31e926588c02a6a3f4b03fed0a253f4d1d3f751c9be3bff73cc997c84eb2da7d5d18 -P = 0d6d0f1fd67fc77f5c0dea3f6ab6e4a7c2d7012c0d8cb8b272888d6f91902bdb0b5067007421c0237fa43185288e9321d5ed0b75cac30b7ebff505fe07d47e9c6b15406a86ef3b433c53d4bfebfadbc150ad69539177c6af15e8574d451fc619dfdfc5553d +K = cb34f9342b248df94c7ac6338e135db0 +C = 5f6c0aafcb8e511f7345be62b048723460ddd6614b5bc631ba793433faff3870e9551117bd03de16bff2e29516cb367a1d7b426b5567335eb723df1920606f42b1794228ef05f1650792c3dde304c6a8422eaf5cb356792b938673bec719a1a33d3414bd11a242efe1278a1c640a0e0e476d11ca5b015d9f14f787910382f9bcd054b1acea44949590a8c493070b55e8bf7f4ff47c0b666c0ff1318015a447713110e08f598a0e68aa91dc6c35f495f1d178ef2225d51a621a1db0e3c020d403e02b845cb63f1f5c361724e611e40b4ddef3da02671b6701e2bb3663192ffc787ad79e9ecf5079b56fefd5243405e55c1e9bdb5f51e57dffb4e881fd859c1b71fed85292f23916d27668be87d39465c72c3870756800c128a3cd4e4c8a6847e2d0eac073bb6c8b4ad542732cd341246786cdd7dab929bc51f3d6de057714d33ffe098ec94d5019ff1afc8b4eeb76014b55147ed481996c22bd6f1b7fe4be1d0e97cc3a9f13ab1da3a6cb040af4545305bc7c37a29c206ae92be8579b7d196b815c88dc3b3b809878764699f6701787189da864c8f89688dd6af658cc9e15689d98270c6a53b8b0de96ad40581742c87a9bb0c8dcdd16e02e6fd74e307d37f74e8ef9cde82e422dee59dd3cdf24458924ac95ad43890469b28d4d4a11e3b4d110f18cec21ef8147ee87ac6c629ae7bf8d92d9ab800419cf5fcdb666370e5839346996a7959117db6f +P = 760181b399f045631667194664a1b1744b0a4df02c9560cb460619904da394e2a751b50991a6407e4ca2e0fe3d405182c2bf84b39fd2f584545bdc30652f9b0a9e699f944df9e65441f138999cce287ddb910cd778e7ac4ab51620fd30ae83707e8683117ae35f77a892634d765414d24f9040223fab3fce3458507098242b91544ef82095f724aa80a8dc68ab157fa8b95d0df57f7e7725ad2fa150e6cad644a1e3bf7ccb50ab038e2462cfc48e5240318a43841ff86125c979c431d9e8104191096a8a88b7de8371043ac8bb8617b28da8346e1691c08c037ad9b4407a62640cbcd6ecae0b046bea88fd04468c26803f59f413664256234142eca6ffd74dd65741be23ecc5df89e9225207213e00762d0eaf8c181a0378ccd0c6ab485f220f9e09eb6ed395a12560fb76b787a2717297896bb80c41ae753d96c0357394d586ea982a7f870021ba8ca0bb54da8bf851e8465c6c54267742c4f97a4e900b6a1268b39ed18cd56609a290a1a216f5dbb4f37529aa3fe63441dd0de80a2989a514a2663f68e9428284d049fadaaffdb7d961fea212e915d3250968bef21e008f826eac4e9f1500bdb3cbf797e1cecc0ffa506c8684158e7e1b0fba9cf2abfb746a2c21615c96ad21603b41772e99cb7256585efb95e5d31beabbbfa683daee39fc33929174363becf6983c4e1db8f3b74ba03abbb756f6eae2301869500854ffff COUNT = 11 -K = d9bb02f4642265456fb28a77ef110ff1 -C = c9ad348232c85e602261696604428a87e13c9d70c491c2da3aa5a29f02275b19946f93a671a24a7d87d75420a52039e996101f82bdd1c67ea75dc7f7c6e8bb52a77f10b5df9c1fef88d71bd07569986c70ab4ba7129222d282b0324a8ae4fde004117ef918bc333d480113cc3c8f2090 -FAIL +K = bec3c27df7f4eacc855fcb2d3ebad596 +C = f146c7f07aa91ba8cf4c9ecb69470e8d3289cbf951ce307f7d0479c542e52b3a116e405ef22b444da6f61784a971f996239887567263398954afe0065be68e5d0ada66ac32a9c32f141ac20a81e3239cc1f71f12d67e41503b6ab20a38d72f631ff0d914dd833a0937d8bf0dc22eb460848f7fdd5c4e174afd0f50a53f741782328016cd277a1cfe0ec4d1a4e823ca53dd746030b34631de93fae9cbbaa0b2c5e257c8f8077231a7c8cb0c8dacf7b3071e805f1627ff36cdb5bfe3703ecb61752b8f4a376f5e4b73b4dba6f22ffaf45525eab6aa8f68488e063b0953cd954aa603b9ea3fd2b64d9bf555e0b97c52c0729930d13fb006fd88c3e3e3d1849585cd33dfc5484f3ae2a2680cb11ff443b88d327d9a2c45b6a0575dc0ef9a4d74e50c9736e30d7d5cf3beef139ffedb9c41943699185f32a18553a1df3161d301b130badbf6477f11402e77c3e6392fd9d98dd7e0c1521a5b0fe5028b6d2a66308395729f5c1ee191bb50841a4b8d3dc3e9aff6a63b1a43fefc6a9d80c2904c8624d131993014050221ea88fd4bd9704529e894663527f50a58ad1aeefec8e1246a4ec1267a8e53fa4c093ec8d079f8b20ff5a33998357c919599973e0a1e0df0c54f612b0b0aab080c934126edc4209073cb1e50de945cf60b2d8e1ded13767517e76b1dc4d5ba23b7dbbce05261bde828768f52ee8f3b282a4efa3b627e5efa1d433ad673cb28d80f9f +P = 0984a08f8f13b85b22cf390c5ad2115f3598f10c70bce79bb5a1cca035ffa794bb394824f3a7ee88a1b4da8ba1213e5b40378f67730b1b4d911dc815f01ba1f014408d5137bad801706dc101435b81f1bc56cdb842485f422d881ac96df637e540f3d60a73f4f3db16111aa729ae86a4080a259b32452869b48c7f4f96afa491337de87781f4e2ad35f7c6825f7effc7d306913e67c13a997b6fd5ab5359b067ec065b62d1dcbc3fe2d00d1fb4bc81ee26a021fb06f82193819e203eaa38018075417f51fe810ebb2da5fe7c7d5809fd6073a65a1c307a671e96ad8ebe848b94ec775a102bc9a3c7e47e31e324f47ca0a7373da592130dad775eb4809c9f458e2955a3c9b332546554e688ec2217edc6472d08a1c1ab1dd5867bb24d4a65a9bed605861fe050dc7edd53f64acc554cf1a0c77f18bb00e465edff3e8eefb767a34474c36ebeb7f4006a042f3aba4a3a79c118db23bdca17d861afb64774e9c630ec9f19ffd3c9439da7547185bb739efabc1b016d4f50125e5dc086cbafd6a6c76d69c8346befbd65fcb82c6f32bb46b5477302d16ba21b5c9c98ae61393e029d377d41e6de566861af88568e1f84732ac9ea420425e844f7ddd218619f6e6d940228c3166b2b275588b2f17b370dfe2bf434315c539367adac37e2b787817932b0105d509ba097d9bf196c193c938e5b45f98592538557a0abf36f14ef3e7940 COUNT = 12 -K = c83fc04d24deb0f021a04c22dbdf7bff -C = cb75a0ff554827ccc0fff2577e32eafa54fe5dee7a82722adc7b52f361854aff2dc23cd84abd8735a2601a363ae1542baede3a919a8f3c3cdf701c94fbd006c3a865556cf412ad1b69eb4b256c7e6978f2aff90dd0ef7470845f72ba6f5888d5d8f01b5f929953ad93c27f096dde58b8 -P = f2a5d4ed82bab2aaab20a8f0e48eab3fc0e43beb3a4ae27a4afdd7414f83b64ea8151a24da0c954c82ca795fd33bd4fa2f081c98d714ff2290cc2af2636030f5cbb1c55ed8ed6001f774d04e06df0f4a37a4637ffdf6d0be94df32808b4860758227dc6259 +K = cd3a323fe9b914e2b41ee86b8ca0b3e1 +C = 8435187d1032bcb3bfb3e4ed5e3638980dc7ab02986732b7c6191622c40fa9061a8ef3737ed4fee4baea92d9e689ebd22fbf39d196affa47c014b86e3ad3ca06e351740684bb7ee014615dddf9419267aad85be7c23f090a247cdf494b1c5c88240c08743a9645c000906edc61c02a1cff40376c06eba9f495c61b68a260ab55de15a0001487794534a0815cb0a2128d4591f7091bd72a5137bd275c786838f1aa023e168861b18bdb65270d4caf47eb382cba5d21f5bf7265001213c1415db59e29e1141685c4b07df2daab5ffc7022796feb8a2dbb0ca7cb1660f8f68b2ecb4735354ec7bda54ae38489f1a140063021a15fb7712f51b329a8058c7b2f9b7e8d5cf2e4bd8908fa04d6ccbfbdcd14b28a4aff6e6b6bf7eb4be08bcd236f6ca5f01dea8eeaee4a5ce4ea8ebacb3ae8b7645e3dfc06f2ef0b58e24738a4d879c16ea3f366ebba6b57cbe8cb7dae607c4baa1f933bf64dfd5b7f5a03cb0fd4b9ded861901507b36e45499201e858cd0864861f2af53e6a7da933b9cd2c203164d3d21e6548ff6fe150b6828ae13f494407921249207c98b437127f66a59208b67c82fa9a19106a8a40436ccb9bda19fa782bd3c578332ca87b15381a7f4bbfb30f20c92388d6363d913350aa5b0530600940c451d98f0ec47f46bc9a4fab6133bb084e2bb70870e3de22687fc132a4f927004d271bdb46057c2dc1d8f1965f77516a1e9d9a2dc857a1 +P = 5617ef714882015f2d58d2fe81a9e5bee840541c2c94008bf446c0e1763fdf4bff59d9475a38e1267862d376fd03e3d75a0983004a013847574a12bb232ca41284194a62954c531ba2243f29f0b5fa3e3e4eddb4a3dcc740eab68c79b54f2dc0e3ec17fd4f91154ff43442a5cb94158e025c6197cab54e890ad89f639216e1f354fba891c89390ed5cd42ee71ba358caa631e6f099cc2b353fa65a2e8e69d2b4ea3d31a4450b30d19b3c56e3caae42e391b17bc18bc59a180e72ef37c7ed9f3a63ee73718c43b65937369b1afa5a509f11fe5a8e62e22f00830af4b7a6a804a65d2381bcb2de14257e1b1ef8206a52504676900a27aab99652dbabae5db52dd5e4c74f89260fe4cbd09588073893aa86eea61a9c7c6d68fe5a810f5afcaf115ad81b6a2173b88b49a289607c2e7a8832e50e2878e2fb72fd1bffbb5cf7de4c1792e96323555e18ccc21c8ff509b6a70bd4e41c867395b2521940a69b688e1aa23e2355187487e4a6b1e2c84720a1e7fd80d70b73a7ab12d7adfb644ac293db439cb1cc285e2b2960fde08ed36369c520831548aa181fb1f11cc4df22618cdf4f64fb4fa3149c5ea19be990ed6d8843e5d1279532846a6ff27315d4fcb898d46dcd367d6914209c3a6d418282112c336923281219d5ec796ec697a10d30df085cce879113c263d70bf5a7b2995371230e1ae7db9769f79a735808d958b2253bed COUNT = 13 -K = 04b9e8a0e7a7c1b70ea4c563127b6b43 -C = bc7242eaf2c3d6d5fe5165cbb8b67f6efc9c587450f78183c8fa4f4f591979dec4581fb71e12fdf419094c65de180cf9f5e48ee614ecaf8867c9a9274b31aa54c2b193e718e86a380e2d03ef06366fd9ddf2a5482fc5448405ac6a7f266e5eb4b655ab5783278e5a354e0cb59bb4705f -P = ccd11b57a39464c19073cd6abe86afc22a2fdc79a1c288ea7e987eeaeee82b60e7f2fed3980f0723e114944d2698f5990bd90bdb7793a19776ece111ab9d110d782d6d427347418dcd02648795734d08f0c32a4f18b73c540ec0c9e18383935325ec1756c7 +K = 46e7091bb7ddc85942a13d5ba3fef8b9 +C = 87d916c014211a56a2e68d89a220b7554b921dc7c47638edc8089bedce790b524da777656f457bb0f9df3dea7f4e009646eabca375d8c937a22982430e39dae3d1c61a4f22f33bfcc6af01fa44caffb6e0217bd66ee9378dee438254a62242eff54771e4ee7e8eb73fda7f13a58a5a96c1cdc7bd8f7a382c0de227be3a949b5e5d90c295b23868d2ffa2b05e55645f5e85df2bb994433e156299ede7d1eed30cae16931678ca072dd333c6bb4cbba1156f949dc48de29807f220e8fc904b15fcf0b5ae42450bdd7391178dce3e6c9934d44804d7696b8b56d6fe772208eac13bcb962b6f2926e05434ce7bcc4198ca885af222781b2c31cf12bfbde766a0d043ec49dcd2d134fc250e93ad0d738acf956f92a1138c7649faee0a4ee89f89d56ab33ff220077f773931632d34ffef64fcc4d9a2634042c6c967868d64d0d2b4eb6890d1d1394715b6f55dd368e47a0903c86a871d8c236de5b96980505bdf9a5a97346dafa0b2b84e8f33afe995a2cdae1ee7c0090bcfb05ee22e3325a2a997a0800edfa973dc31cd27e878081bec8e02fbece9f8c4bc0cf8b8f4cb915aecb4c297a4183c2711d1209f3571eddf3c8123542f5573ee5e243dc437f0d5004c0a9621c929b5678854d56e969b0b8a755441b6d476187de833d18f211db7c1a447c65f4d65f17697d80c00ecd6bf2fc671ad142722aaf22ec5edf2e593315c27d6ed8b93d237263e1116 +FAIL COUNT = 14 -K = 08224f7c9c0a91d71bd00283efdefdad -C = d37542df2f2382a6910481f4029078050525656e7b4fe36577f7c60253896fa6a81208afa98eaa48ad38cc3473d84485213b9b65667227ccc0705091a8fa9a80d446e321f15934b891eceaf1b2a7789c801128fcbfece1de90c03896372be8610ccfffe15676a6b7b0a37511b407aad4 -P = a29f42fe3082c2e60beef18fdd644099d6c3413b24ee4d2fadc445acd2b1838096dd97e5ed33fed2acefa0b6248eab9e8eb33f4d47f63721d4be3028daf2b28786bf3f8f1e975656c67cf41069419fcebf1fa23db34051d620d726f77827dbb999bcc917c3 +K = 3d9d5fb999774d7c35fbaaa92c674b50 +C = 362ae8a284845775bae4e5e847b3a04601581d21b9ba8ccca0501f767e574adac93d1e8ab639d07059b30ddf4d9a1eaee63d3dd307485ad528914047694197bef9cd7c90d6492539ecf8b5d1d70e2294ac76eafb34542c8d4948da55b1a730c1ae6e4bfcffb1e9652caed1b28af6c65d1221842c15b85bbfd44ace5bb78edcbff56612306275399e27eb438c1bc605bbbd2a0cedfd32e335e15339e527624b3c2dbee06b773d783aed59390132ffda2ffea150a2fa2b02a812b91ef53e39354ba19dffc1a04aa87617656feba2ed975e27555a342d5ead099f805ce05c1690aba76928d17981309f06a24330d8f042965a4d0ea15e9e39012cbce25f294d3d25e5deede5c9f1f90990cd51e3a80d85bca0cabf14c9f482e2dc3569ba4d9f83657a30f74e44c3b169bc8e67915c39390072c1c9d294db55e81f1c2a8c52292a66c80cfd070f873c44effd79b46954b86c39596a70e9aa2c5144e14587e1a4a282f38bc2c66b51a58e8d2cd7943fe41110933d138014d7580f6a2789d8ab9cbb10fe58b0b471e0c88a62d330a85593a1bd7f9b5271c8676a1eb1c16707b6407054a362339d58b8364f87886a3154cef78e3d426cb3a73ee96032e27a1683240089b95597bd99204ee2a298d987a923fdb6b7d295db5c2167161ce29f8e1eb8966f20e6821c75d7b2ae79d5d6ad77f0364cb127c866af7b65f01283a23bf5007071c43aed993da471b4 +P = 58630cda41fbb556f157a97a972e11400db8370feb4e781dc9c4c7ece1068233f1b7bb33c693168f7a8765b024d65cd4000fc6e223ac6e4ab592353c2c73c159c44f01d24a3f6af7320127810400fc25bf8224c82a54c8ba429d8a0ce0a8cecd24d7fdde01159241c1f628d6117e469f3a6032a25a31ea3cfc4487a790901879c50d26d216d5b536a346d2cf3cbac1ad96b223fc1c304fa992ffa5677ea98c5305a8285d55c5429292f5fc60a2a481267c9b8bb171f37932059ba85548402b445506d5b41992b422191af6329b3138447e6c6cad512b649333ab2a6c01d957ed8714f33ae9b345bbdc7cf81ba0a65cdbbf668a150f88c640d0d12460b613a5903b8819932110c7929061823ed29ce44d043d4f3f4d630e1879cb703e07eb8391b50eb790a8143b46b752f7324623a3470f4918a4c467c5a97500f7ee9a978c8e943b53fcffeaa9dc7cadac4550c23b01431a9a1c45fb08039e288ece0f8dbbebd9b1cea5b5e07469bc8b813e86d15c63f3c28073b6ed339770bd2fa8c4d360b87a3ebab2adf097ffb60d9d3da1a02d944ee1f5e2c18dd6a763fc74e5b120d73801efd701006c79c48a166e44eae43486a8525cf4a41ed011ca3d0b6061b418dd132140a5c5406ee8132751dc96ad4210c5b8e33bbda83649f0140e3df6c73513d13ad664911d84d782b7c9ee83c69670693044f74bf999556227665901568091 COUNT = 15 -K = c3d05d7519b79fed1877e4ca45f29ed4 -C = 9a771f39016b69cfa546ea664d7d8d53c2168f9bf2de313e08d58c5f28f2e5a2e4d7bfe71205e70b92fccec6ca090d53e2c9892770ff654bd5d519a63103f4369a7182dd4b00c500f2570d259fbca40b3c75504734df8e18b6af87594180294c5137f0372b76ddfad2d6cd5d2861963b -P = 972c391af8c11558450bc62dc503cee81164eca3bbdc43a241361e2da6e8a306832fbf621916064938f3c59324516ab2237fa2c3e81cff853fc068c9853233fc15c3897e846bafa99e731f9029b67702a3825c73adf390c21eed16bb7df1b68068fdd4dcd7 +K = caf457d7d0a5770d03f14f97e14c067b +C = 93ca614e6d8f46c6f271a8fe6ccd5e5ae0c70fde2cd7c2b5c200aad2d04df42459885be80c006757ab1290618afe51f1f41a420639e3b6e802b0cc3790e0e357895f520e0deba2ee3de2cbc0941ec460c4e52ebb90ffd74965839f958b9a910e5e4069c8bb5ee63d20956ee2bc366fa6dd9faa4d7c73db085e88e0f09163e94ab09cb5b797513a4a3f075b3e7c3f17b4d1f94cfc82abdc4de3fb6fa69c2ee00bf4428714be33fdeca312b62315721dbd0d5ea6ab5f23152994fe5c7c2945394d0df37a1685421c06d94edcca26362d5e3c30c8454351de856d3b7440ddcf0cced87fbad3d429363b4308c0f58fb14e6bec63a6241a36a47864db7e86103f799cf527d0a0774a48a83c6f814f133e827edbbe609739d9d9d238dd908d069f8205c8536c34acbc7fc28b017f8b30f71574344b5957c85df58f101553c782596b2aec2a6c30ad8f0f8c794ff2951ff115611acd7f9c655758e7e87c6d3cc970dc126cbe56c2977859552fc0d57b0b361f648a310f0e5687fb5c6bbe9a86256c017797d8599673c7fcfcfa41d79112de8ea5ee735d13335b5ac2f751ace0ef8bd1f82ecc392fb78b4ced55cad0a61bf3dca1beece2b5392c6b629a8def2a500d212ccdaca8fe0397c918fd5dca25e415520907b84c417197c31de0ce0e22f0612ecaca8aa5044604bd6634fc322f2f9adc4b309d817598047f4bf326fa3152e0d272b0359f37328279fa +P = ed1d6f2f0ede8c615efd37b3d5d2dcfe6eeb227c14a9c52b9e014914ff04f52f79357c75b1f7355ffade05e29cd1747ada2b52098ef07e9fc7715d4a70b6439f27851c3ac3ea209c309e24209905c5fa59966bb5b98d8b3a9f43e96791a162b8dff04935e7a56e477853a4b858af34cfd6245665508d302b73f340a9f6899f3ab9f1d03d407369c184048b498ca21639ec2fd8386ddbb2d067831aaf0d3cdc23079bb7649297e21fcfc2739f17a2a85964c15e1fdc4500767f648145708c0889d37cbc47d4f81974d5f953d985a53fb082142b695c9acd8ed002043b7e9757c0d1fbf56a8e023ea2f0eb96c61b9cb948cce82b83aad7a78066336d5fd7609729e4a63b56803ed9b119b0a997e54c488b3a6f808f7bc91aa8e8a93d883aaa4598043a4ef12e43bc93b65851aef2c6828f17a7b6baab6ea17b73652e2490efdf967c240a7d7a2066fbb3d15922cb5df2e62986fad5c1a87a6c5be86ba1d009176ec80f9b8cbbad5bd8c91c39b6f277d34d9f3548dee961c0b3f1ab5e6b049452fe06ce550f5b938d96f7eab93d38ff769457156dba5320a60b4158c6b87e12ca9faf8e9d6b3eb1f98444e2e2d5f365799b11f4667b7f7cb5ec5a93628d4ff10d50f30ff3f1d604a0664898b8530f419596d7cb3aae51bd961e8166eb4b9f84e1d47739cea4d05e9cb8cddca73c9a92844d7d82a942df242c7f0decdfc1ed4cccbd COUNT = 16 -K = c3a12591257a238f3126f53cffccb8e7 -C = 9658b3f31f86871879f1e32f84834adf7ff4a1828c9aa919afb360759b5651a737431811b5ada21a2664c56f758da4fec9b159b68625f8c710dc084405516a08e37a5c8b3632b6c29d5d1f63ec3f3d74bf74d751e6f2091c50ab4bbd5a8999914c7efbd9d7a11db5e2f36e6404c0dc88 -P = 7675c9343dd7fbf6de019e072513fcda6e5dbd454db52d1c6575884b0fce4933c27fca13cdd3052e418957afdcad20287133b6087adeba5fba4b3d686e3d5fc6d3950da9f2108ab6be1219bcd5fae932247a63b386338bdb72d43a9cd681f25be86dd7218f +K = f752f75fc9d83d4f064c4617517cce9a +C = e3324b3c804b65609679f1abb79cc0708f1143ccf1ad4b14502c234a175d953d35c931fdf16bb9e449e0d8388596dc6746af3a389002184a6a4d3e241dfc2bc92a104876e1ddbc7e8b8138104dda074304a910264728b23a3199a234d8c5377225ce8985fd1aef50c826b522dae482f2562a7017be6ed2033e5313c74018f7697d4894549e05d23460a1ae5cfa2b3afcccbaa4676127740bbe5dc12469b6b3ee383f430bb1e89457f66bf58c71bc34ed5a694f79745584365080ce7b59ba87561c03abbf62c84959752c14be740d27e0448286d593263430732c4ed676ae52583597ffd054bed23bc23d6720cd37625bf6934d1abd1316be65c81960d98a37c49cbce231682b7f1c7d5384db0d5de1c4c2d1693dd946ad51ab8c4b8c661d70f5651e97f03edac0b7c691633b60b361dfe480f33f64b89c70ab07eb467cbe67108b33cb7f254dcf260ecc677ba2809d8a5e3a558333402d72d45e351b5c16f6725973692576fae334f474f3156eb0070d859ff7783218e93d6f97b0801a5fb183763e4711034830e965d9fc7a1b5fc23cdcbbbb69fb6b59eee124e7d7b37a909707ac8ce0aae15bdf487cbb78ae4cb179e019efd6df810c9371070aade52c421d8a4020625077acd51efcca4692c21ac606e95675288ac7504465539a19b8843599414aa1a91d48f4310b947b2f58ef8d097326fb694fc1ea75b1171b6e7033ef82d06ce30df489fd +FAIL COUNT = 17 -K = 2c1f5f91d15726d77fb1ce1468697bf9 -C = 540dc93460deafa78cbcf74c87550cd73bee5abb6106b8d2a424f5c9235cce7c8c8a1108e6d1fd5b22f9ccc0d19bd8982ad12cd1ed2cbc61ab23ebf867f938279e1500379ca68caaefd89bd189bc8275a56df1d97bfd9267f452e7bd71733e15e536f55124871fb241df7bfc2b2e9a9f -FAIL +K = 4f766eebcd72f62aa1211833fe505cc6 +C = de38da0672fcf4b1439dc9ae7702b9f7d4c62c636d9dd1e2d03ef89768369d5dddb496f9c631fdd11584a093442f838e3a31749f5eac7dfe44e9bd936c48200005e6fa1121af523bee67f4644ea3f49f561fddb7407fe14c6142a274cdd0728b45bbfb94faf19eb4229ab468ffe005bf36b17a949a65ecfc0d2324a36813e383dd4eb53fb22eb8426a1987cfabe75ca266d9e51828896b1abe3b008316facb274bf21d963b4a26e8f0cdc8ad807fa53e66b62b780273b49d11ada8aa541228f1b0660e027f8432e8e5d90668a943baa8308861c88960e39e0a52f4ae51ff45baa78bb966acfb41a6f8861fdb578dc5c5f70f272dc1fb07e1b5db6123f6e66b17200e666f4f35a89da9f66edbbd8332fdb23af68dfdd2b8b7cdd4625f74798263ec18d1ce5edb1804a959b3a6a894364b65592362aecce74b9b6cd815af902092ee238e4a7f56c0d653dd540fd38b55f95a2bac596583fb5cd075db101d5042a03e785ef26c190814b8ac3d13386e3b4ff465852f6958c771eb36998819f90e013754595b1a9da1d1c59f177895d82cf4f3d9aba0ffe033502496cc6326daaefb0ec37705dca9cf095be55923db9ba512e5861723e790389418942ae60ec6f75a575a966e013ac1be2679cc60930a157964609db50ab01aa96cebbdbd1ca1d0f35b08a5639f0527153371a16dbbdba5560c8f9d4a40798ac3631cedbd4140c7e547bd1196f45ba57d +P = fff77da3dfd7179727e14e995e1fa15e8ec53c415f41b57ad547337fd8e032cebf6922e450764199c61555da7e1ab286b19de2b8f03305968c777a50bd7e2a04487f49abebcbebbeb46cd7eba7e9182cd6e0a175b3150286b21bd5740a3181f97de9f1c912ea044df881dc4f4a67262ee66909980ff1e094a185369c518d9945b55fe89e608c33573821842a4fa1d4ba75b42c8b252ee118f4a9cd532dff4bd5e90aef06339818d51baf805b090dfdf58ba29c1303c86dbe3a3140610b47afe271376abd996a65a3b7250b456fa3069205bfe9d9e598b59ce5416a2e1f45c22520cb62accf3e841393f8bef4dd4e1b8b5186ad840e8e90de959a63bd9ffebf4f29338332989b790b03e541b7a4601722d50651ca402e4843b95dea4f0e12d60f70edbafee4ba626e58b7dbb938b95c036ae58d0968dd45f15a0b9863e64f9ac9a5224ea08edadb25370de76befec413d7c316ee2dc95b559f8b5db5d1010ede1bd41311c60de0a30eb08ebdc55f8cacd8de1f27efbb159f50a606b0a4a48a449b418142834555a972f14e5e1aea88092bcfedd089bcadc124a93fe1514336ee8d56b469c4f1ccc6c1b0f9678a81578a6ea29568d4b702c8017baeead10db2ff20e400dd77add94e7a48a217b9b52266b6e1685545c7d6490ad7865b589560683338d8716393afe36af4791fa52b0c38b734a622d1a5c65f6737f06e372bcbab2 COUNT = 18 -K = 3db08882c95abd46fd8062d493732862 -C = 032c97f5fc81e4048849a80ce6cdc42e141ed19b92107b4e737fc86bfe975f5d34f10acc7d419d25c1939e0f96c3235a3b85a60237efa802b45d8ed90b10c45b21ddea64d77bb75427f74dfd33810979b0fa6fa437605bc7a3efe34992e5815eba579b206982c62a4ba82f15ef7fb1e5 -P = 6a793c0a435ca83bebddf75921bdc9f0ee699e96f90bd1ce2aed7ebd9d3443f7a609658543883a2900fe288afeaf2a5888563a864aa7a63596eafee10fb3c5ecc6251cd52dffeb6fb383dd56bbd9bb22107a5711ab75478a6e89ddca7ca1ec24f49bb70120 +K = 4db1a739db1291ffeba7b68a4a147ca9 +C = c23b90eaacc94f3463c30ef625fbdedc90f8f1346f2377840704efffca172ed4b28e16e3d861a990bc47faa6ead0362686c90a63d64be274bb533d334155f93915091433adae8ef06c9089e6aac3180b793fb1bc4e7e210d82a2f13187369b0c77d7858b91934eb1069febc578c31d8fd92f181879ad462b60455655bde652bfe8c3322a09e9a151b05b892a3f55fd9b03586157437d7d66f4c6512af40247fc45e4af9eefc91b0b52f58b7f9b2f551c2b0881c14d290eaa171487abcb58ce7b8a75c2edc636153dfaaf063fd0dede45c802678122a119dc65e035cb1d66853f7a2b026812e8984ce71fe24185b8a6b9f4dd73af2fb5187b03804075fff891e32f949ea1f83cd9c54142e13745068419566b067bf8cf7c14175173171be948dd839d0a4df21be1e1da00e4739d9865f3a4f69a7b8d9c53f6614c07221b6a69277dc757605a8e6878e4d456ef54a872dd1f6a55132459d23181518e0952378138ee3b7f84900164c40fd1eb624a9a45e8744616f9cddfc5684ed0fe369fc9a8c334a2f4be3b68d55e2449730a34f5d1e22c9808d58487cbb76db5dae6976f517c365954048a6ce78d9b10477a130d3228b21f1cd7e42bbf557949611c7eab25e548b2050242fb16ff24aac6bb9ac9e305c1b6afbef3ce9c04bac4e6e85db5c790757ced84de954793c0315f6c918b26b5463136988fe2e0b1e4b6d5d0739e7e20219b8f4401f6cb02 +P = d6ac44aef8cd0a8bec83ed309a5b7fcac62d2a4eba421d3bdf0fc12d680c15aa2ea3d96cffe71c88b927325229d7249cbddb6b9000ac4521eeede8ee1cf757b2a3654794c543907e541b9e6298c5842651b6cbb0a2ee7cc20bfb87211cc3b1b4a75d818feb99fd983cd515ee0900b0d8965d43e1baef0c40a2fba21aee28a07a0bb081d383a1de3c5d45c31d29089e49e395dd6c12441aeca031c0f8415c5c2197d9036fa67ca89ca1df4f4d17f5907a87fcefe9c3ae7952de1ca416df2de3080427228724721394fb115f02e6dd5ef7055578968ff353c85ecda119924adf6386b715102d6dd4d18dbfad878470d4194e37a9b4680afc8514a0d783a4558b04c7ee5e4c18a90aa4a4d4219279d8e373ee4d3f2827ceb091dc5114a7b3d6f6166572f484c88424f2ec9f8fc9c3f9fb688519de0e8ae0223f63195e18c408c37ef429f02469f08ed0ee8def91ba024934973355dd4d220b3e84705c6221282548ff752b879d78758929b83c80288f0ddc62641647d13c33c60c2dbcdfc9fc92e0ee7c6844540f2662fe697631a6d6b3eeaecc738591e0410ef551f3354dc20263e239c2067e7b61976dbc8a83ea9bcae49fa14eddd1ea66369e7ed390b21611f2a24fc7911fd8c878d992e0f75e0ba7605d29b2f64b707c59828d1aba716f83a79878e681773f48b3c906f8fba79bd5b3a2efe2c8902e755157222a7637f87215 COUNT = 19 -K = eb839056859d25be01482b33f70ce566 -C = 7c56b5ef5846748e402fcddfb76d392ff0fff5050e41faae4bd32c699039306650f85d9fc27175eb0af8f42d8563622b4d9b3951a03fb4152b75d08f84844259b1cf3b3b65931e35788d3612b84b700db99af7f5f7a5002e8553f493d9b740ef1dc35ba8da486e974959a66344c68205 -P = 89bf9f2409670e5a15d900fa2fab1693469216055f5936dc4c9910c0862629d5878701593a36893aed78c59529a0e24308b1923fdd2472f4001c12af8bd5d57cbc38d4f4e7d74c6f728e1127a7c2c1d755655a11b8a26893d6b379bd6a00e4a19b9431500a +K = 69e643b5a4e71e537030a99efa623f40 +C = 7d6f2d2d8cc535018bbbe6a3a10d49f4e90bc04e42c735ffca2bbabbbe5286e94340063b5291aeef74fad3b417d7939aab7469abdff9ac19d1485593108e19fe2fd04bba3b892b5a8739e39cc56ee7bee3176f51f440a7d40812f16d821060f496a07b7de7ac24afb63d168670b867c8c6f5cf587f7a2a748f270ff0fe5f204220477eb03169fa9507534eb1536f32c0559a1f67240c265352d02a241c86cfdf0b42e7a9a15a20420013d3c48a18d1f67cf1ec1778c09d622a3eb0b71099a6f39f2575211f09128002b09c42785f1ca9d9b01337cab6ca65d0a3ee11deb420a4e66eba7dd8a027245310950481cbb6d5352adf65f0a9849a3d567e2b52d2366f57eb57c24da1319ce116c0b44e4586ec1adfe679d555d0652adee409854337fe27d28aae02a624328ca8549b42953cbe1dc66162abe08978c2e698e0f092696eccc78e9243715e3740d79f1d8d7db779dc108d361ce1d6aff80b17e5d7ba4435b95d8f81af0d41df10d81dab858b61012481ec8e29866a2447023f9f863be476df1b4da042049be82d628cf10c7ea70d81025ff49e9440fa0ac733a7e728644700fae5b3b0565afe935df3fb820be5cde33b4695d2f72838be3f969a3584f5284a913a422e0016f0d1abaa6150cf853bee6afb3aefe1f880b2de0faa1e6491bd19e96ba300d8f330412dad98698d6c583e789e01aecbde338315bb5f1660bff000ac02189700149c +P = 69eab6c1e419b70281c1f5c89817d9322fa9cd7a619179204b1a4f240c52656736e42ad27bf7c471f8e14644c990e3349835fc177f67877f4147de88dc2a37486a6ceff834b29967e7bdaa756f3dc7cb073c2a7b57ed4c7dd27ee0f82fab18b0681fb4657bff9e04fae4662c2e7d1692ef88e7f7af19fade88da35ebfd5fbbb03a75275dfdb62a8c659dabd12253a7cce7a155e900d7541a5cb31728f4a7f696b799c5a1e8b0e094c993a197d9309cd78f316907783e9ace99e38934e559b1333bf7cf2f27a60c8615529c3dec4ec6f90194cc29a778432a87788f8a14a6d4bc9fb657cb02e1fb3e00ca6ad37e9ae200a4eb2310200da6180acebce3ac1ba40573befe7f7cad575c48938644debae32e2db89c2a53524fa80f82e3e6d18b8feeba00ef838d405e7a6a81474b7dff35447ebbcd869e006aa83a270703562e6769e1b883e719d189b3ba72947d3094b22a0c51a5e895a1a3576273739685682de8491bc3f3d29d8ba6f96862aa6fc2e63fadc7fd9bb7adf485cb7b23e90a81154cbcc457aeeec12a3c94f2eb4d5ca0ce843a95d40ad6805f3a2d8312ba09b7534fe3e9a2bd0c9443978569713820881229e4b67ad91c40206f26596c56400cbd309afcfe15ef5df59de3a7d52c58766f52a23deb9b8475391b1b4efc1aa82c04c337e2cae3838ea0e46d6d488b40044f64f6c758afddfa281da21745612a3f4ded COUNT = 20 -K = c159e1b8961c27b7238b57576c39aed7 -C = 7284f6dfe4c070c215b98adb13fe3ddbc5887632a322f70f937217d2dee5bedd6a51524e71baf5a91551bf1332567e28a8ea3ff4845cf05289dd76bd59d9d1dd2460f0bccbd6b4e6fff8ccff96a95a513dc7d8dab39c0850d130493931cf1d19c77c3a66682f90e4105eb66bc6707409 -P = 50ccca46dba455c1ff8bebe692bb0d8e86b33d03a14182ac429b338aabb7d13fa30b65cb878b6a8cd19b973e0cbe8c3cf455b19ecac02536fb88bd3a9f53f7ee8c4f3b06a71743c2bbeaf91734b95dbc40873932e0fb73c46b45dba7d20acac42f8ccbbc86 +K = 4926fbd703a1f4a02c5b7c63d533e39d +C = ffd7941657383cc83b7697c44031d53c727227bb45493d7ae866fdca1ee7425c1eea1777ea98cf4edcd459b73f009e1564465962ad40ab4060d5f5e11cdbf17bc9340da8c623437e093a79a3208bda53c728385f6eabc5b2a85b99459bfb9309709a47cea7242247e44577fe990609b267c8b6fbc5a8888dbbf4e71b906d88ba3efb0bb248f5a5458d85302d534f24437639d50c417b65dd3e23f21688b222294c0077f50ab1202ac5b8e04068587d98e535b29b025dee8fb6b5d970e6cf7ee4ebbfcd173cdcf35fad090cd78cc9c1fd5801d0a712c26e46bcccdfb0c688758f7664c559f56526cb7dd05ec08e398ab7a6db92417f76b327689ca4d3968980fb034e7cec79a3a036320b2ae841730ad2cb89a34e74af0bb25e5e795e83283fcc3ea8d6cf7980412d3da4639ee716668a8171fcded562d2ec221b91453adfb790c4e6e19e626fe8c47b650a4898c60d96338225d7116ecec3e2ef72fde1d7f50526f6b0ea80d0a7621f6af24e76816ff743f51671315c03a17f3901274f5e7a7ef826b3488421e6b265cd8d3bc666134c928a1a66757d16d2384d572ef4184ee54cb88c3f4a7de5ce4281a23c9504b25905de03762c91b7d90b76335d29acf122fd01893194084c5184a83eb3dc126e64991ac0cefe9bfac464185f4778c0e551a8907ca1a96b1510310c1c3bd12729cee358e9b34e5dfd967355dd594dfa020c6536bdc83aaac7f2 +P = 28dd0592f987a201ba5f5ebb19ae4f42bb217a7e56f36077975c3a3e99910151b8dfb6de1d2d3d8ceec0615aeaff0d4aded9488ca729761be9c551803f9b836aa23ea98f96cc1d7db054341b82aa7f1b58744975c2e40a064749f47b8727dc63866b6c7ed02c94ffafa598137a71cc880dce5a8169c146c5c8f95b9afa12f6b5573d90567903d0e94493de8ed174f88a7316caff07bd45c53959ec4d3cdb6978756e95bc3eccba7d8fb10c8c3e8685176ca04f82d8ac8a667906d3553829163022493930f6f4a5e57c43e1c8390d0f2374c972007bacc313b506c2ddc15a63ea85b72daee61136cb8a9417a92bfc5eea0f57e6adac9bc7f4a17171855a9afb36c27113536a9aaf9a1598f204d559b17be5390f17d274f06614eec7f3f97f8aff6669adf0083bdc0ad4427e1d4cf2ff5ca7172a82642526ee86d0321a8f37c7e6843a32a0374831f35edb31f93fb316d63ab6727703bc908b6e439121d791059bbc523b819f58961ee218db933a9f2e94da8e60618994f5b5ec81006b2cad670e1df45c6c0c40afdba7f317cb4d0472298b6fe470f60f4833df46e55bac7231e7c73db7c0dbc54359782d1d70f51336b2dad4573b5007e567c3565bbd93569d5345c7eb92b3b476a596b102de1779f1bdc2ab6d9849bf74db060b26c1e77d3aadf03ec246fa1a4d6705ff3016980d2c6f7e3a1d2a0beb07fcc31ccec75993b864 COUNT = 21 -K = bc8a6825880c2084ca260861468225e3 -C = a195d4c01bd70a63f1bf46aea2d82c5222f0c72f4bd7bd0664c4fae29aa3c3fc013203af0f685d498d1a3be4d018adf9388cedba731372d450beec11c8fb3640014de06638df5f9d072550eba8b479b55657b5e3dcf8ea6ca789d4ac7c5043fbdfe13d9d37a275a3ae61185a22171ea7 -P = e103b711c23ece157893328dc091bbb9d5e612ffdce798062a44aae3304fd8cf0ee442896fcc039aa8fc058b0264f9cadceb90e4fc28cc936f5663de8582c51c0a4370070eb081c99839e8bb3ab31e441f15b8a6da9fc28bd86b4dd9f7a275a8b5a2fbc43b +K = 7fe24406aa5b7290461c9405f22ddb41 +C = 38a692f7e7b522c2a0e884960d8469b73786ded53de3959433ce900684c838fcb468354edefff741957743e584e101887e5a0ef2ac94e58535ccbc2dc4b609c08bc2d00a6736632869006d640296fdb4df695c1f8d3b9694e1c51d503aa75529006f2efbc1dd441f0d694a46a5dfd8f52c04e8c00f8f08b69de24cc85c33bb4057965d09db9e25501482336ecac383e37e13fbd2ee74fdb7fd075acf65ff93b0e35b8f15abd707054df52dcb09c6ab72dfae73dc2354e4e9ed3a17f186681cbf32cadacf4a57dd1e4a5ec8a07af8a7e1c474225f315f26c258a5236c34ae184c8b254a7b98e5ee5e3cd788d9426ae2f2341c615bc092d976161234bad1aaebc1eb8b7a272554e469907ecb3c7bf30794290f1026c6f77ca6c4eebba016ba504a30f856c1c1fac4116232922d618a36e4153dadec66faeb750a06e4e41d79cf67f0e4cc2d734c8e6eb32470376cc044dc92da61752cddcbc552f1017af031574ec65940591f2e0e9283fc7a8830955bede958afe2580d4fe5fffa245c6c0a8b99c585d27ea361dd22cb7a02860f1b7c96ab25c6be3f5588826d66dacbd8c1a79cd3ccb68b6020a6fceecbe3b3cd5e40b86cea99c6bcc5d20b3008296b2727656d24ebe09c0e5f5791b8d68087b01f2545ce85f684978c3f34a43e9ab55dae76eac8636a1319eadf5063977b2e587436975cbaa63376783a3dba9c1399ddb1bef2271812d3c3bd484b +P = d5faae698c7dcc574ce292b49860b4646216ed1931228e9d04dc44359d764d7461407f2a1c0b0832ed41a309a5178e658720755a4a3ee14df2fa033fcf2967779e4ed899408e4d48e26e5aacddff14727131d4476aa037ec1b18fc981b62f3237003da3c5df2f138038ab02ee553c25b064e2f772185c8ee68fd93719d96fc6980337ea8cb3ea36f556b56ab0679a280a03136c24e2e8870f47316358779d309d70d046e60192dd734ce1042fd57300787e045a16c6a2f1d2113f2fef39b07e1cd218681a35615e7673730617055e4471a65fd225e0cb50bd553fa802c5aab75fa84f00df01465748bfba71245d6be80d89c26d3810359e0e570fc767e20da028441cbab540e35bfc56ad439811e6ce93b2519742fef2ddf861e978b0b7532b9d241824560c41113eb60d5ffce764ef776b4083a1112590a0ef369766e4838e1b6d83dca90496965c26163d386e050e60db6e1c68bb0529efd3ca02bac4cfc3fe4ea3fd9b2c8e52e7a5bfed815b31c94a5fabdea88c868111cc3d2457ddc04302648b79f8d84988af3ea546a0945402dbb8c8430df995c70409da464ba09c0a0bc509a5d9b0941a080b1318541966ca47ac75e7874e3000581c4bd6a3920143e2a7774b0a4737bbf00d1224a64320b0595878533972b24e0431d4379ddad01c7b627b6250d0543b604c80890599c0b8f1ae98fde807c9ecb29b93a11f699d358 COUNT = 22 -K = 4cda8a6c1a733dfc9522ba65ff753ef7 -C = 1fa8881c48cd76ac09f1791068e0d2480aac09539a679fb8b1ad3f96bf7f2549fe78498d3d5d79d53e050b27a1574e4fc7f58ca849a5f55cf86179be3e1436a43b535da42505125d626704a72bea4781b192e7e1f61bd71d73240fdf71b1bd289d4a5a2e6bdf94643edaa30cd1829f48 +K = bc12b5f5b637a5bf59781ce278a81568 +C = ce53a32e2c55f58ba63b5f3908ee2d13b869f7f5ba68c732f17e4d28e10dd4b849fa20ca0df60b1a62b1f8c5158789ba5317c318303d00854320a2e4639de07cb7c24c0d2e1a7cd7ae0336af670fd5227343151d1ba64d2f9a9521bf7ac2ecac90f19d11e109516774adee700de237d7b6427685eb66a6538d959d85323c52d012f18cb9a0a5a9c5d3900c6e4c027ca0d7ddea971d927411ece1f76d7c49a94ba978b51fd51bca80b426678b395c3d286d6d109af12d5c565eca34ec5880868f927c12a747a95a9e0f611ac6c504574d8a3b8bbccf595609e06622f89259008731797dbbef771e1cbcadc202733cf2958530de654f25cf7a3c9d0c5c3625c7884f037136f1b84bb98567b980a3a7af28593d7adf6667ebe827b17eea512cac62996585df7fe9d04650b348f176aac5433417ac47ffc62cf0115a53e45a723ecefd9c812954eb18821049ac5c6f710921740aa101ee0baa7ca83a529e73c76589214a10288448b22b754ee156219d4a51474e24aa5e7b7b79aa6ef3925c47a1e9dec3327554b51b8d22071da521bb4b9794882a947f659b87b55e629bcbac26ecd9cf0145e8382a29aa3ec4722e0ececa2411cb1a0630bda5afe97ec242fcb8a936787d13e739ac8aa812c7793b39d9ff53ed67f764c40cfdd2b1ba243e42e476c5879c1afc17cf81fcc0c19889a3bf83830c5fe4be7e4e3b42bd8abbb4e0952de569c52ce3e77f42 FAIL COUNT = 23 -K = d0bb72994383055ec272a3aff6f0516e -C = 920a5ce945bb21fc5ff4a71b8e97c3f811ccc9b06e1eb94c212878e39b358f5014b0f892cf5d3e4be8793a2e67d5df5d219c84353bb0f56ee62eab84fed5eb871faf6a6740f12d7b1e9a5b75ddb060ea2b4f9bbf3e80ccecdbbd1b797160ecfa462237796d822591852232053df50ab9 -P = 833e4b167e89409a84c92ab5a63281bf2777645b0e84b06748f0e9230debe4df0201a9856df56975c2a2cbdf671f68e9f98962dd58064a8051be50a5fe93c256e42c889da0a3897f1a5bcfc656d3a5818db3627cd55b870386d0e2b495ce70c93e859e1736 +K = ec904e6c06064bac122d298e2b8c58c1 +C = 5287dd3a30c860cda9647fa1a342acccc0a75f7f360eeda5c47555069888ce412b347eb9dd9a9f9fb550c9542efe2cd8f8271172b3bc8002f9277478f34543121826cb71d0167e3be89aa56f979b94252118dc11e69bde00c123d61ec11a68fce715a6aeb80d9992b73b7cf23487dbf939657cab5c52a8a116b25ecdd759e8e2bcc30053324aac4d750015519723c4138e791e38639ea6650fa12e11b21cba975a0bb3ca401bb01fed057ca8c4db00163e1859f50af4fff856ed473d73389acb285b4a2a5f437fefde890835a119033840081b463ba210cc1f75308678adb04e7174d3b771ff82868baaffd96455009cc0500ae8ac8feba9cfe19a2566c9529d250d5416530cb9bb65e796564b685a07656d939f0a21c93d5f876ae3656dfaf64cdb219a911aa677cba5ebfe56f65a563b1d2ee739a18f138b52559f7cb38ddb7c9990ffc3d16cc3f20d6f591efd5026bb927da7f4b7f8d3bfed9c2c6f544ab8c0209701f70779dfdaf861d2842112a56dc7430ea1da57452ed92cfc7c8eae51773d11bc27e6f0dff0976685696fd2b33eed1f6f108924eab2489e901fbab08ef5156e1daa4829c335443e52ff071359ff8ddfdb1ffb3fc65487f6eeb926cf1b965b4349efca405ed47a1f982c5b3f6fe23b7af409a862170dfa7b97b80b65cc11eb1999553dfb9d6e79862535075c41a4206157f2a153e7853cc2e278875166ba8e144af68b4386 +P = 2d3cd8a0e52b9ad82714ca78482be08c4c134a4f9fbc32f1f1655c3af61203e7c1d69a3b2170aa1f92cc70087873e6b3d1b324e2e2cfc2665c9dcf566663a3c7bd6cd3d625535ae4078c713d0bdcae4d3fd26cc7f61c7edb7c4388e5c368cb9e67aec7c2ebc740c35c0d6f59bc7b3f93b156039bf2f795c6fa021da812ed16fbd1104e90e6174f1e3aa0b6b309027addef6820d332dcabce54b051ef640077a869872a4de70ef361e6719113d0c05b7e32b03eba0f7286a4ef2e99f172748f5bdac9fc38cb7a0e60479f1c62fabdffa95eaa2690069560607043020127acc31ca29dc86eb630bf114ef0bb927f84f5feccc5a5a0bdb3be928dd0b629f256ddddc7955c234f4ec31ab2fd4a5b2246891d530a2f968e3d297ebea3af6be37c5d9f15bd9fa41805b5754397d89aac5404112a142b7f7085701992e12e2defa9f7199e1e4ce5bfadb581b02edd95d66523454f01bb36d240af8c2fabe251eea334b29662c27ab0f029712776a1b1af35612c9a918249a53ce62a059cf695e1f8bd65c13cc27b264f0999a1f96506b7502fef827efab1f6434803da58de8bcf5f98ccbc72564737101d40d3ea8691732ee43830599e9286d37638006c6230346c61a5143da20793093264c46cdf9c361fe9a98e930e436417b31db74beac6ba60b1e013a401a4f3e7a76112c985cd27fe33d1f63a0153a452adbb72f3230e7326be7a COUNT = 24 -K = 2ff8a4d103b7591ceb5a18b69cc02fd3 -C = 31c7f8e2f85ca50227c39c86bd0dbf90d6200774b01eb925896b1cd1e38de3f694ea89ea885a5db34892bd1ff5be61e3d6b22f0894ade99247bd29e52c55dce030fe0957ccd8f4e9c1558add9f00050b4a1728fff8565fdf1e03735805c4c4fb7559ac86267f133dcdb7c683d3402d39 -P = 62daf43a49457886d6e2f66b0f20f3de7c12314a70b021ac9dcfefb35911de29184c3aa295fc784167332d6a7d0ad8515e5adf8ef5ec5553654c956e6a3a2435abc8fa705ec799da95dc0891b6eb4a5fc819374a74b95545ae2dd1d7335324e7a70afbf2ad +K = e30fc047f2a864c73fafa7d709ff3e78 +C = 6513faed6bc6a3e4086494f1da80dc908cdde256af8178369257a65c4b065b9c0444b2be4e9512e10a4060dfc350b1603583a43818f49f616287cc69e997017ffbb1208decf5b427a13ec94ebee47b73e273d42fb686b3a0a939bfb7022875df9b166033aa7f42d71b89efe72d0442a7ab1f96e0373f861a1fdfa5452816f58445da2db42024c7fda4f9e51eafc3ea21031460a0564c335641fc3aa306fde13af513f127564f7ebd58d13bc9232d3eaaf471317183d959a7a90fa115a1f1ed419b34f8bc808b8537c1963259f32ca1a9245ba9d77aeb0f7740937ef04f039a131be58af5e1feb5549f67bf1a19a082419219b4cacb55ef21108bc47913fc402299ef7105ecf62beb67d7bd4950dc9bf9406c69248196d17c920b1a89537704ac86cfa49266be886431d2606064e35a6f820c06f815f0d883ab2479009bcf0d380c1663cb4a758cae3911a5c880d7880e8fc7ea0e261b1e8b8a4bfaf25bdb5d869a49c8de35ca5598b555622bc079a62a4ce2ebb0fa8424ffb44490d828daf7912bb056b3ff89324452aa7a700c166e8925ec71e55f3d2afd49cb0d64570df0b0e8a55916f7b8d27832667d3d1ecac9eeac25eb38f49e41ed7386df03c6420cade885d7c1260bc660867131ef81f6a72316f49e75d971e4b57e514c610b482765bf8edd9e8b1899b813a4701e926c5f9fde8bdacc294ddc91d856707fc91e5cc21825534d600379d7 +P = c44b02a501bde4a5f20d285f1a52189ecaa337a5075e405f3c04cf6bc594d264b7c8c12518e0ecb4bd1d1a9e896c4981389ac833dc407c522d9c47d2f4e337f1f87ab26a5f9ce30ec823ea35ec8793819fe414d9c01c072c31ef06fe4cfad202e5e4c2b8747efb2fed986477053245228e9e17c54beaabc10386c5b9c834baa053f3c35096162a96516b5bc825c5e53887f12ec599038b0d12572bbcde9c31a330c471883099488f6c6e815840c628173be8cf63c00955786d099ff0dc9ef848d00d435197df7857cd680e35a26dd9e44e8c8357f716c02b7c70a4a3ec37ebbed0dd5a15c2a8f51d1c0ad334001605eb5d75acb87c87c0efc6d13c24bfa4f619abb23c902b63c710a7048adab5dd70b5faee4ce812cfcfc100369161cb6faefada26bf13d3be1dd04a49bf0dc9486ff514bcc386bf4133421d905a096c562761789324e8e0d235fd632c4fb86afc504d38a957597b3c9bc63c9381784c682bd32de827cccc120a2632139350c3c336a77ac87332dbc7f4c80a8d37acd3f591e77e47fae286dc9645a237abfe9c000ddac4463082358ef99c492c22bb3207a65114b8ea2aa38ec7f6363bfd77e1a99533e6ad6785161d1a1e46d3811ab1d45e79ef17fb9ea7117e984867139db1ae743af1c23d867113801dabbf824755ea2e44a2c774c8571222860978a7026eb5bea6eabef0e873bbb632af7d4502841c1a91 COUNT = 25 -K = 2834441161116e3392cddfd6d6bbc897 -C = a318b2f073139f59b4211147503dd065a3090903dba09c3ed6db92cfef6fd816c2f412c73493f060b41fad21514cd43701735842a1644434649eeb16239a964b111e6ea2a994516a64bb2dd6b96ee178a52894d471da6be7e8fe1373b54796846680b48f4e0d51212d632f3b162b0ecd -P = fa143fdc1bf914eec61a19f245e2d57c30e2526c9a4e7d506f1e17f1753c03ab421cd133eb467a7dd6e5f4854adcddbc740f77f598276005b1336a885e570a3d806bbd7b8cea58dc4cea9b80d1ab262314357b70122bfdf931c61d5c8065114b09ee76849b +K = 717e43d98fbee8fc4904919760a170c9 +C = 9dd5c34b06c4cc3ec4fcaf3e4228cffb6686febed56cc03b99e4dcf610588b28b15ea956d69149f9a41d46cb388b53776ebe276cd2d7d764bed37f6cc08db3238b05e85ed57a3152fee3c5eddebb52e9ba1a6b549efbe08fac033d6160b315d4491fc01abd369d2eaabb5006b0853603a737e2ccd68a55faec79de3d2fa2b95cfb0b9d2590ce3eefebe86cdaa2b177cf1184045acd0a021d2929c31ffc9153b9891b50d8999b04ebbab647f4c69925c1798d83a33822ab07a6fee7a548ea2392722f67f5b028bc664071f5f06a5e48825ca75642e7ec955f818b2f60436c07b2f9c4c19d57e4d2f8d29fb88e3f92f109bda4d7c1ba7d547727f78e81f26261f115bf0b7f7762f9a8a58812cdd2f3495e05e891325810d273988cd83be595d97e231c7bc2c316bebdea6ed80fc8311d8498e8750d6e55636977ae63c833043be8fb0bf085c99ade7ca78e9a197b83a446786c7c3585ad83950c260abe957bb7f315f1ace081217b63ace6e2b985df513a3d18150d00dc6854784be04045301ef2a8ad920c003c55fbe9504b94e72cf4caf08a5cc9e9d041edac30e0a9162978d37307e1845907e377050107d935399cf831c8064a539c6debcc47957c533ddf1d013e9702ee20fb55d1422d3ce3ce0a3f2e61b9b168bcdc6a3d552125da5db2f1d99686f9f671e234bb08275847c3e054c05fa625b9aa9b852cc1a8b2eba0c082e2d831b399cdf30f +FAIL COUNT = 26 -K = c338f07d9c7ed3a823969be4293eabe2 -C = e22ba13a620d18858e3afbf4b52ad62bd8cd12974cb413a30b88b32663e1b35b937d3f383d7ff7ab02d278b0f604342f32e056c20025f2737df39596a5e710f6ec1877b910fdb39f23d53b89349dc145a5bbb6bc41209ed2879ec520e2c44a1bd43bdfce6f6fa1db727619e1bdf5bd93 -FAIL +K = f51fc8d60ce6000584fd3a46f357c827 +C = dd5111757837532ac8afcd893025026030afda86b6db21a3b364abaa0b00cde3f8cf83b047acd0d2b8df07a3388b83d2baee0c7226236ae2790e7c59ca5ddf84aa6e7154b5f6b9cd7763b6b81e050ab25f11a1dbe7d751dff3ae6bcf012c18a102ce644cd583a4b523823a5f16eeadbed4a0b28031ca82d561fe94b04ec57e275e89bc263b09aee14ab11ed5a7437b01e0d876cb18d3d7fa3d660f5864df178ab6d7891118466dc5f4ea738f7e817c325e00fb2881f192958b83e8b3d00480cfff77a47071597ee570b4e10e345082416bda035d4f9afc54b14918f42e48d41b3d7702340c9bf39156e62d656d93f84333a153253de9eda0d2187042e7e56b7a7cad77bc76205813bd3fddbdd5805e1adad2c0a32fc4c2db6a1bd5b7b82b3264b089af0e96264278c44da0126901843f98fb183ef32d3efb88f08eb53247287b2ba31d7f1b91cf83023dc6eaa3f0a546b83a7298c23b1b131be73f31dfe29a13d1cc9530977d445fda13a7a08622577623252ca048c47c9848c4207641beae1a236978edf0bb80afb88cc580aa97d0af7c63c49eb1351485f65da4d026d187b0993eb29d0cba51229dd1110b89b15dc463ae8029b776ec19c8dbc1ff141efb851038e6074ddc6b63a24d6319d28634d3615ddea9d9bc8e86bea9a0eba94ff6cfa2dea48e0688f8a549f745d0bd4952d4bbee98669277fbfe5c939a5a2bfe74721080925cec99daf4 +P = d5e93cc5f06e7c947a0438fceaac72015df07b448c643747a4831cbd787e7f684a23212597dc31dde2ee86a6440cd3f1f36e93e3e29f56503842422f11bb536440955a29b1cf91b03cafd1b9d1d7cd2c5e84a9948aca6cbeb8ba6730341296eb8af2981c0a9d92972326f13b9a789a5cfebb1238025fcbb40f2f8038165e2851dd911349a7f931946c6f0e2a62d94250e594243a383ea2712ff600683a833707cc87541f9a7599df1d5d5ac16fc2180bc29d84a657b7d8b42058e8e220b645f4863575477a220e2313db0fa738b16082a67de4f4b3693ab7852adc8625c992df5d872f5a9f6f3221ee8cfa4fbea459150881a866053c155d98135fecabae6b5f6a78fb27a058d49c507d5b368e2589c4e558cdacdcbf4cb05e58dd985e8434ddddafb7f41c6b3006959e03a0fd5bb3067f1e0fd2e0a4a23891ea4f5813edadf98ca5ba434fb8ef915e1c4df90fbac3b0ca00c0a13d078489d8e85d212c763a64d934473a6210619e58f7bdf1a35afadbe56c988b3333fd7b4fc00dcc2e3dce2968aa2ab71655e2b4979b73bff8b999cbbe30978df2353380017ab403c994b775290196748c1efeb2a14b56928982d39f3c82ba89f4b05ed6183d1fcd6adfaaa6365cfe795b1752b1cb26b7565318376844f7f39380f96db7f2e6bb370605f28bfebc00e243ca30dcee2715eaea6bfd30acf4b1af5ac127a530f622b8f0387848 COUNT = 27 -K = 1af9ea4d62294eea9ea48a4ee454d9cf -C = 41de899159d5c83cbddb06b778deff05688ab45d4677fe6b10fd637e3e2f223e30d7713e655cfe106753e2478ad96950adfbd19c08cd89f019ca94b576fcde36f510d9d16346e811f2e8afe8ebd864974ed7560afbf6a81a7c341b52f0ab2dc393d7d4d5e499f2935711573021095bf6 -P = c51acf70751b81b1db22e8118621bd731a9d86c045ff8f44a3fbe7072d97818b568cb982568219f98dffd9b7e47afa1226b79615a219dded2ee2e7b53565681b0f68c75a3d2d4fb00d9790f09dcefcf3b7cfb2d1ef75d96a7f13c48615dd61f8c4410bf440 +K = f9f16407d30ea84ef1dd18fb7b9c6374 +C = c69d9f763ce4d2fd7aab101974d36bda2c2e45e1c0503c94d7f7c7acd4466345429e212cc9a7b1bf247b333ee0efe7f029e0bec94c4a57febe543e5732c122d87e0178ae8bbddc084d35dbad4d387a1e6d986db7867877ad711e7d60fb7286f452c03fe392c3e426d4bc21bddb1fa3cdc322ed71cce8c22ff23328ec12bff6a583f89b3ea18deff5d2cbd9636fb26a9037fee754f443a336a446cd70132a7917e4919d5697e395df9d94fbfaba10bf6fea2a72e50c1b7ef294ce422d7237ce4d0b4415aea72f3860b034e95c90a07efc5a4abf97d66073fad6aa0f2820f031ce0e0234b132d2e14aa03f6f06fd0e19641db91d6f899cd001e772b9f0b278aeac6ef50325b1df34bae52e02814078680c188547d7428a81480288a18be39f77a6f09c8ecbd2d8226dcd554a10716bb78c3ff568ffe849aa0412fa038f99884921c5da78b81c79ba39b2314eb104bae2a4b95a460a692953d37380b33aa527f6795fc05e4881b2d19e89696d0176193099bcc44984959ef5245da5a0427cc01d9a1791af248d0131a390d7c4766977c122f9bdec2ab58994616ff62fcee212e1679796b2375604cacc2936f2dc6a31b226fd69182251893170fcf639830e736605e4435bff910dce9c1646ca35f3f4c4477cf74c8d828c2dfc5521bf9984d1aab585939109d7e245748b31c01c94bcd3fa33cb27f32be39ea91694b90a12089d2f0488badf2eb38055 +P = fe0228958051bda6b2c89beb6f4ea47e80591f94ebf55875e0f7000cca63cc27bc947dac9d2d2552ca2e0583fb3a1eceb0896d5aebd395d64c5b34382c7d9018228bd17c7e5e0208c8ee7721ae9b231782cc2e2837c5f91a7aa849d752645e4f05d5579706ed5794975b911db708b3c7580168ad65975a9c75110910b886aba00a1a1fe12b3a94b8d572391cf42cd64d6f5526ce92b98f4cf0a3f3d6373ad8fac4e6f6738f118538a567e8b0479ddb0f9108d79d8ec3dca305c24a7a0a06d14d1a96f240949bd086c0235fbbb8ef2541a0d051fc668427cc39820434787b0482f72c7d9c69b626cefdfbd8487138829f58ffd684341d9906d4a2424a31e9d957864f9cd8d4b46478a0067ba2a58a2f2ee0d768205426655138a22e3b5d63acc86bf6ccb2810c182eabd2e9d93423ee3a0bf5277e04faa826877966940b499fda9af6829cfa431e265e189f579e5538d9f9fd910485039db03319a0f566bed731c38d85214a49ad692c88a7dad14e54c611b2296b60d3abd3b8edfd45c792d093e9e141a2fff9a08c855dc90c989193421d47e9adbee1d5e2fdbbbed0c3aa0f8b4d23a2a898d7653042e2e7e98f60f7f0d32e2a70e93aeb523279a661490a831aee3652c946260a0369a8a4de9db563b7c3300f6d7a00af68137dc7f4ceb6d2ce0d1829a4680342ef41b622bfc29ec5a265d04896159078daf1f09c75fc870ebb COUNT = 28 -K = a536530dffb2ec7d3d84a21c8c877065 -C = 1581c57e5cd77a5bf8f51f01ac68b0e86d11e4c5e396c68ec7230c4c69f85890deecd9261da44337c929b85cc53af872423a4a414eb175f962401f615d6efd6e50fe428b530e2437776b1f36116e9d790432034c530f6703840ec19c38061cb7cd6d419b7162aa7c858dc62bdea11c7e -P = 6d535504f121d52ae8cd48650eb15b9b79215b98a1b42368827d1acffbcf700272fab87f15ed8dc0b2137212c630256dec8663aff3d96b97da3a31cf89faa04436bd2746a00ea31d16e930c328037f1334c5a845bba4fdfffe75a513b77ff40a10c7dff5bb +K = 39c9ad1be85c5f873d25a3fa72765ea4 +C = 52320194eac13060f206c4c3e518758f5ccd37990699468a1c15c59b7a0ec1ce5689f1a989378723712bcb065b8df5d19ee8e7d241d11fe9469285a6cff4b6861c4c3828fb16243636986c124d9a511c1dcc1096a8b75ff2111dc452d038529f5bdb2033b22ba55facdacc151dd6cc84ff00facce6f2567a4a64d93b7a84363c8b4034d6fbcd50b73aea0489731454e6fe1d499563588a29ee132c4a964294cd38e4c81d4cfe4558ae0b6b04923fd338c74e6e4798040e33306e7cb15806cd3778ed5631d8abc3dfda82f3789a679a6ddd7852224fd4edee65b46d83b7f2d2bef44a7ad4b11a0cea8daadac6ea69124e0760f11af259ae2e0a4aebd8df2af05739667b3df2de4f575ba71e13fe83ee29f1c310096ddad455f5efee57304e395890bf8cec1306e45d5273954f2eacbc0327434af093ad5e69fc9f22ebf0fe6abd33337d64b4f6680672dd0547d9b53c8c4d209767ba98bdfb1b45ed6217ab56c6dac1916fbbe584add2ce0d71cdff019f977f00cc085385279051ac90b52447d4620408c9cb85b5152b05fb4a76c844a264639d06c176b10682e20732311becdb038ce0bc3ee33383a41caf56e9be181b16bdbf502331e2063daa92054ff07c776c2c6e49a5fbf0c39c17a7ad7e6a94e85c9ae44017f5444e97370abf9d9d3ba6a6baf9cbac0cba31322dd1a34f5e847bffc1bab88ef594d8cbcef65dabb79e5db5a98848274afbe2 +P = 014591e27c6cb5eb9bdd0f063f4902251f10f7375e615fb95b108c406b0b7082e5f70bd34e8cd29a5be5ff3d7e0feb3f008171a34ba639fef47f0f53956db753bdd9f9864e93b4f5a6c5c139d2b99e7ba7230c299eae9cbce9e958e902eb1e807fa52ebb5051861f9d3e485622feefffb4b400096327b002438397c0158d17b7546b0fb924f8df698fec43510c11eae2aa8eb7ebb79bbf8a2e133b1b18172f68b9822a3137f9e45e3b526969928d14dc26ae4976ff5b59764f48f6bcaec39983a04f767005b1150f80875c335674decba74e739ad2e4e7761bb153c9bce8d76296fa6aa569353bc0e7ff6915d095afb7bc56c77e55aabfe09f8cf04b1be673662d2da70c041510b0601d4080db5ebcd320df66cecd81b46de828b3c73891566288474eb407683c23f6c11fc4f94e40533844c1ee39db7c9c70d5d3e175821dabc38db9fa17fdfa44570137136f3694adef88361a56e21a072709c927ffe73055a08b4816f023134fbb324420d3e04ca19ca7786950c1a0078541a38b13b62451808f17f63a660f1e28c684d183dd5b4008c0e319565b08451203a3a8a756375c0114635c6e94ebfeb0c4ae22a8bc573946320e4cfadd436d55a37818b03f4393128b0bb18e7b9db0f79d370170e18569ffdd258eac1e778e7dd4ceff080903b3bdbdb88e6ac0d7888de747a96b1e1e79519d69e5a14f8309a0df41c4e203861b COUNT = 29 -K = 9ad909b1579ac03d5932b35a499346e2 -C = 5f4a9e4bb1fb16ffd20ce2efe1c83d75286a84b525d357eed00bc10c952cf69f43dd5625c73fec71a2ea322d22711d3707c5f4e13b688c624787f94681f95f6a5e8da131969ec57d809f357f1dfd732f801b3402406f80217a36ebdf6e7c0062acd1bd230209bfad52124d5ddf35f2cd -P = 2da84539166554d91a5c50ababb6d11e054f0f6ddf2669138814869fff2a313d16084b9ac60db3789f1d288bf6f9fdde4f9ab743328ee88b6eefdae233d277b0aa2d5d6e64d2d406bf538d4f9dcd1ccfb61224d27b9441eff6825f21dd08d3dabf435b2642 +K = 64763412cafd829128c001a850078fb8 +C = d06d90647594215df993ccb42f5f3aa0a2b695f5cfb4ff2403c30fffb9bc895520617671bba8e45e21dd0e806b52791896d4cfb0ee82ec503150dd6e7ec420e1f7374021d8f80232dab8a76ec39ea345d3633452da24453df110d90a089ddbb5b944c9d8d0cd20b5240d1e30cdf49677bbd7b5189b4b4661b7d78e03629a26d3e67eab8a2c745289bb0be6fe27fd2e7a8ce4130de9c07f3cf9e66a588f2028786274e0092cb22dd2447fbe13ccfea9a1ae4b04b5e4f85332141c893b80aebca34be464a75609e2f1f8afd497f8aa10a86c22aa27110dd003ebb147591a5df11d5b53d2467efbd4749a41528d259a6a9b3caaab97ae5294ddb2c75f00d73c58df8100ae90374afa7597db1ac2455942082f48a41499c2e1140cb85d4e123ec29c9d39da8436b5d3908939f530069fce29a60213eccf16041056663734a500ebd4188d5a0520eb23364320e6955bfad2db0056a34607f483766b3e28def5e4b3aa882b057d71f88721097b4d00362d35f1036e08fc59ed7111be7c53f3b9699013bbdfe0c5fa5dc7353b93794e11af9c5459e1e2d971636b9099cdb418ee49390ab890451022c87e0a4617f51abf092d64d47d722ca68eddb556982d900c1b6f01babc598b97ff0e429267a08f244fb6de8cfee21077f3da78b0c51af955a8b16d8e3c5efcf1e2ee3984f68365ef0afdf86bce4f190b2bde2ca0e22a27426c2df65efd3dea770fba94 +P = b219e3f04d6de6e596e185e0dfd3bcbeaaecf1831715e6c343c44f4266354a006ba17bd9e40907ebb5ad14828e807141e0f71b7780a1e8a70e3281d519d7289aab2116fc05c8480b443da8356b121013814aeb34b817fd2e2fff6d88bb9c2821c3f9fedae5cbae2dcf3d487c2246884c2f7a876c11fe55fedb7082b469a92bf35617c0e060e6fbfa84f8190ddc049b1d06e736ccf39505a6a49398f2674368bcb0dc93eecf6ca98545dcc2001414d16cc9e0aea8d4bce4500c75f6b40941344f9f169f859a7828d2e39ea6c25f4a69066292108714c3033eb1f6af83df01a4677647cdd60af76d0cb3b09e848ed9d42cc8ce1d708c1b9103f4f07c2fd63040bf27b61f3376a042e9e835aee63f76e1b2eafdd2a92d77a16b8f597dd0b25f245320e44a64cca1e19028cbf9e22caec69463e7ae539a1962c9f8619ba5fac1beb56c7cdd608137ce5ff1b13c72e5f291fe93490ceb5092091230e524a35a6ca6c96781fa87048e52c5b1a19772acb02e80332cf950f36eb9a843a3fd17e33d735c0096975612242e319c5dc1d1b74a38dd51ab2689624b3bc9461846a683ad5f0466814c4d5293dcb73a84edcccc432b002f02638785d73ca603b8f3fcd4cb16c322b1d80f843bdfb4b99caf135ca2bff19938299f8fe72ae3b738fa071539694aba1372a085a82326559b3356949ff5fbe365a4d301da7d1b4a159cccb9bd4c58 COUNT = 30 -K = 2fddc18249f679ae5a19cff0d5d110fd -C = 041da893c05d628487faf0e650a7091bc4c56cdf7d14cca1f5aa58a8ae3dbf8b647563020ab11c2c91f6fc63db2455e6aae82d5c179d409dea2c982945532a9a48a02acbe92d63fa7ff2c693de77b9930756aef4cea6023c034092252ace8ee9765c4bfd5b1c3648111e2432f41df396 -P = 7835fb08c2ba85acef6dc82caf52d28e49e73e4da57e86938a15f51bae2bf5cc6156115f343c22105f3ae9023ae9b6ee96800d70efc41c71f91b1f98efda53b1d696f74d3109acb0b2344362d2cead3797bc79ef0750a2485147a17a7ddfb585d9d3ce1ad2 +K = 8b5a702a9361702b5371c21f3b899bd2 +C = 2e22edfcd21c7967d0a6764a6bc1d85e662eb10123c6a4ce9893111976c33a88630cdb1aea2cb52bf9875b61c99cceeefa849108e96161ab9fba959abe864c9e5735bc6f11f7af30d69e2b812ccaec7acb221d8a0e52d5f84d1806fb3b861c04566922ef02ea1efbb97d10e1f7606ff39b601d1ba9e89f3af58bc45ecbb21175b3d217b088a1c5aaf7fc451b36dd259ab111b78fe2b40f5073f31fa02ce307187831010d20d3d21141ff97ed57e66a1b4eb6f3299370568b3f35600828695b11188c46a4b4e2af6014f847f4cae5af1e9d9a3d7bbb5daffb7819a5f1a5cf79997317b4886ff9e69798c66b6ffdf6dc6964a198530ba17fe2de87461ca504bd6eeab018747b7dc66ebf0677b2d5e17872d2b6401217afda5cbf6314eb5871cd11677bd5cfe92a8a870b5f3e1ba7315ba7937fbd3cb497452cefdb465a5cf215837e0fa5548a21dd7895034be17cf871c7d2cb9bee0777df6bd5b255c1647bd6f4c8584558166cafdc9d2d0ea4afdab55256d5c3e6466f1c13029891d6de8667b11da094e574f9ca33236d988d606ba3628d47b4279a47803b03f51e744cd362cb24d8ac745dff79a22740b54fd9dd644516f0a7e224fa76b67f19f8b322bf37a92eacfcf82ccb9a725b6544ec98f803f2eaa93a1c5293d3248da92de99ce5dd9d51452aec7a193fb2ed8d6eeac5606cb01d299c1d8b117cc6d127771be5da4528f3e2cc4fda57218d +P = 90db7e0cb29e14a5831e1a7ac00639d044160bc1e1bf7315722910c801a714900b98dfd90e086dba08a882af665c940ffc0888742bc90f2cd58c7dbd9e96d199ed1228b419a7aca4f52cd6281681f119a2fe10d2441ba879ca7c731f33c7a40c71d4c269e999fba09d7c7dcd6a8985e94e3acb83ae5001325a0ebe63905c82f091cd498aad1f2540d8bb5db1c218fae7b48afb2fba59081765b52bb5a5b2fcaa979fae15411360d1781866a66a328314fed78aa3087699251db46850f25bcbc0c865612b805c2bebac32bfbfe3d8f4e7561d20c90de16cd57f89e1f390141495bc4a26fa9936ed0b3d17ea35d7e4c949e55ffe36f50a0b709eb885258d31b0943863229d365a4f8aa641076fe1f4de658050903bca55fb2fc03bd1c3637c93bd096ea5f22d5f6a6eb0278f5de245363cd2e9d0393c0a9ef7072ab6d3c186cfdf091936f94b3e9586779b445f4589da562fadf719e5890d94cfa3cdb854433594586ed9f758591c00a2c5c121bb22568cfa6407cc42c1bd197de007e2f9334f090b3f7f0ba611dc68e38693e2c2b66062528ed0b9f64692d22b4a877a1477a14c6e668dac11c319a7cacfbf99922a96e373b225600cbb37e78c411bd1c7ca4e48b095640c90dc8257d36077135c839741d28551946a44be8b5433c9ab95e3e75bcefbb5b03f6588ef4d5c80859aaafcfa225e88c4e81d6dea856e13e13db559e1 COUNT = 31 -K = ce43ccd93b699b1a2b933890590a3844 -C = 5bb371653be613dba0bbfd06af291fcb8ddd1f594dce953449c3f6d0e6a5cd94bcb0c222860edf303e2eb78a86e54d3f60aa607525db044c3119e4ca27e0e08ff96b5fe8329df698876956f1d424fc83e3a9d0769755dc82f0dd5c98a12b0b00b80f820561527cfd7ac4a77d13c03951 -P = 001b27a91e401998cfa1d3939d54b9af0fb363de64c53b402670c506adaf38baea9b2b0591373f95c0295fd2f3b1eff46ab86218713de153754573c7337322e010bda25f1e7a174e8770d78494e72ccf8007c6c81954c36b6e4de4eed16b76e7f368e61684 +K = 250e8d28c610a248b784f877518bbdca +C = c9eb1896c7a6a4fcf949dcd9d024170b4fb3e014dcf628809843b31643df814b1bc012947b335e9a4778823e8bd260af23b2d394335b660bd4d4b8e8ca26f5754507c289101481dc74c332b5aa554a47bb06dd92f9661dc16f8ea279ade92da9c775f51ce029b74ed40040a20d61657fa610792b0ede4394b07a86feee2baf0c05424af08f6cbb1a3c35cb28157453e6a6f03b028a2be56d519af0a6070208e3648aecaeb4b2aeb7659741beed4736ac05e738572ed8e55d037971d3ab3cec7dc7b0e4e28c4cdd05ca42ba50862d445ed1a637fe9ce4e5a92cb2f2483614fbc46ed4b75b1266b454bb89e903519e003bb028d14caf220a99810a74ee8845ce1037e032d6a201e06312d8e2395e1d6e93d9f4d94f8636fff128e36f9f52c713a175789569606934e3df6e42a2fb30ee39ea5ae8cb70668b8a8eacf6a1f141317faecd1f6b68d91fcd2bfbd1eb0c502df70f57d4f1b5a1604811f3c55740baafe9ee422e3b6819b3d33a7d60cf8b6441427a737bcd371a5a4b220ba8443cb9d9db4390b43ba92496e896e3260b776f8844ca171ffe4ca742946c67766ae544192cffe4dbc7425833f36a05f3c1897e4e403345d3cfe4181e54fddfb0bacfc0f1bcef3eb4e967df157474f6da17538a01af5662dc1ccb1eb33c2ab2115aa664e37c8030c9453db5b2461fb7294c2bb80295df4e1da01badde1be5a62e95b6117477a6a04daeaebf00b3 +P = 0dde98155b923f26c7db2f2e7fb59320d7671695ff8866ed9286d0ee7b122fcaf0b3adf944e0de0ce4d7d84a9a80b1ec4652358d99172dd2b6dfc6956c649f9aa43275f3574a83f65471a73d28bc54182624dd9067ef5898f57922502d44ecea35c1ef89047322c5c3cf5cd702a75acf2b8806ad0408d971e20c143c547c19a1f1a1037ce47f8c75b82977710379d6faa093c9cbf0371f0493530eb431188e0d6a1c0ecddedc8ec4dbfe459b44ace8c8053be99514e6a021cf34fb2361c32394fef7859a4246270c465f4eab720ac373801ec526cc383cea75529306b6038b912c056cd53861603e84d888712213b84da48b483dea45e51a9b35b4fec91603933a5d628c25a543683689041e97813e9b81c66e6a367a0cb08b383cce838fd9cafceb6bbbbaa0ac8e604e8241ed76792d533ef4873a1a4c8e3c900d57572d7dba9ea749befded6ef6d335f83382fd1bef426da5007d3a6c1747a5aa67d80d52b9e3013f65e9b98d8a7d38f0ad50a3ca5a56987b4ec833001a4610d4ee59d55086eeecc3b08ade9b09f5d07271b2ba78c0a81ab2c1235642ecdbcf06d5670a95f2f42d0cda531566463019cfb90b0d642770b2f5e6a8473a56be421c0156e00fe8824015555939bc619ce68589451e2b6a6a351fb02d6858fb7238478c610f58292dfa1f3a60eb047c2c86dc0c217742346aab4e0e99c9ef60dafea0c38ac06664 COUNT = 32 -K = 44cf649788bdc13ccab11b6cd2c5050f -C = 3d1174df273c987259f9dfd6a9a07a64d97dc07d577b824860c6677c6bafb17f38380be0dc2cde7dfd39df1af95b7433b9ec315c4dc3ff0ca7a35f8ad93307506dc3493a92ab2d74e2daef3b0c9fe04b2d8993b4cb54c7dc875d174c9cd91cd474d33aa7c19ce54f58011f9e582a46bf -P = 7db8fa988d533cfe080dafc21f62655e1f74086507c64ea501795e9c175413e84f56d225aac76f601f3861561fe1dd7b133956e7f409ddcf676bb4d98fa2ba61f8ddee9f29bafcbcbc47844356f86f629cbefbcf39bc3f90185b9cc4be67c160970a339360 +K = 9ce70446577f7123fabcd8bec549674c +C = 58bc3fec9a0a9d585f1c7e0b07fed8ce8bd50bde5f71183598cd5a1655610729203bdf7645d04639e67edbd72a77f8ae33a77c85a5a475fc3be289150029babb79b1edb4ec23b524bc5c4e1bef91dcb1b49e89f47bbf8d71ad998e2e110f5983749a55620fb60609080d411cf595035034958925bb2433271392d5871566e3f10c06b18699d7e0726d2917030f77ddf5d29da176ee8f64f3a2d1810ab4ab40f79a53ed7b68495f8eb4b9c777cb054efbba799b023573fdd1697154d03f3bd77ffa339f97b6c7317129a4f72f7eca235211b5f1f91d966a70651e998f5ab1d472bf9eeea830d196bf7e9f25b3fcdeb38b26fbfe8d1f1fe827b63db0f3dbc5ed924d6ffa9fcc06a1388cbb80a0a865cefffbbcbaaab61bf4ad851d17d4d36607f9ad9816a17d58ddcc2673713b23451c8df8231bb58a66e4c3981ad831981d472b99cf44baab274332c097d03a44303d9047d30b83367aa9c5307916c87892abb0d99eaace540b5ee4032b33b8180a99841d7586e162ec4a0332a5b3973d8ba7523220c2f2b3e88dd6972043133f0acf39be3a450fc30ea14fbc95b2df2e8c7bc80344f6d7c464adc7433f75cb8709d7b3c4d9bb69b55b637b3ba585c8b6851518f5d6092f6a0c18091c0cc54e4eb0e2e37499d4049c65ff373eb0dd7dd16a962d16257c31943aa353a98f679bbcbf807869f0a91a9318371ecf32e35e403abab7c5e82477ff89ef14 +FAIL COUNT = 33 -K = 64211c7128604559b6ecc2b40d440d88 -C = f37069878ec0c50d278afd1462ea1736fcc3e9562e4a64c6d1ea1d2e8f90790d88529be9455457c236d956d41bbda183f20573dfa4bc0bc549f4863c3b7ba184da884a7dd8fdeb092271b788987d0954604472f9fc5beda2bf71ef9b6a40ab7d86e35cfa02b6112fb118bd4e851f478d -P = d784903c40b19dca2bc19b51b08996ce584531ac69de94f3b3a799a80c544f8eb7331ade5ed8aca46af2f23ab37643db6b798e271ef59577637693976746bd869a11c169e0f0091940d01dcc72a8f8af7b8411f33d720fdd95d66846a472cb15c1c4b06385 +K = b9e854c10ee4c1ebf7cfe96a5ccea6f0 +C = a4e218ddcdcff53d7190b9d9f9cc9e9ac2f7e563e70d939eb4d268d750499b0f8733020116f4b61ddad5e7b095134bf85c215faf6ce003e93e1e5e3fb5dab8989fc21295707fb53253ff3e7043812e820122a6ea4b50bf12845f4f717e2612cd18507b3bf2fde1ace0d937183184d1ed33ef712317ccaad03b802118146db9eac4d5f0d07b30408db46ae11e6fd4aaa8d76794399cd9c8b18de35507a80545d9135efd66e731155a5a5b7d51ee62664c17c4c124e4571308348ae64d1100f756937a101d81614eff20a40d1a645013bb8013be9eec322b76e20c6f8b22f75626dfb1340948fa4f49391c6fe861a1a0e6adb34707672c8ea5f7bf460f05718fd50a70cc5e5b73d6c53022069c383f5060b8b355b9b3560716428b635ba0a37cee6cd0560f5d2afedc7095f7da7792b1fd42b4c37adfe75b67473e116c19c3b930477d02521b175c501cdb1d528d6664c583c0921e14e9ba0341128e0f308fe32a1b836dda564f0064622ac4346b1760e11310744895f536879fa81a79e5d70448e90c4752bc313097b8f26fd8b37a9bef3bf8300c6ce286d77fd5ebb68b37703b8ab4fc01e60723394265e37eb407d635152c023b0cff60afc692079b6fe8b67255ad53f49a73173607631f50e9b7cf1fd9c431152681afc05e78296675e442fc2a2856c78739b20c5f75baf402963ae56d08d2a841cea5c0a06edb6a3b62cc2be0dc0c4ca95817af +P = 6e6e14a1668beec940736de16cf6eab384769064d171e140ba544d181a95b00d2ce66fe2b97047d72a301fd8c95c83eadce920a4e5757d7ef301342d2fb4ee95a90e896409928e6431fc2c9923d636beb48b2561a823bd02868a1231afd69106a06bb7976f2784a1d3a5e398280a0b68e4993b55b06f7148bf5a3f8cc3dd1e46ad7a88fca8ee7010d73713b5ae179ecd2870052af15fb2fa86e18663b5aa32591b18aa5b957a463271b22f8391589f516d600fe5ce64b58529203b58dfcc20601e67fd93f5ddaf90dfe2b5ebc1d2fe00c09e69f7fbda8453dce1a65678d36e11d16335c05f7c036d4d4e58e34ef93640d5b6fe53d2d7df386f16d1e02b025776e0ba509343fe8ea692fdcc2b8d5759b34b379f0b35f7793295a4ab251482008aeb215c4b25640d8a29028c98515bdbbe55b26cc0a11cc42a094a3b34b09035f1b9785ace112d16f96b9172c5ccf8e3cf0cb0cf5efc0bbbf65e1cfca4ccc53cbfbfb4ae53f5affee87793cfbe166ae8da105401ac8a7bd8e1dac2b2ac0709bbaa2aa37b1e8701f52fe2f368bca6fb5fd2c716d2a1cdc51041c35e920432efbf7d6862cfad8bd39bfa7d09b1629eaa32f453233d3a0f30dcce1e063d33d2525a3a1c17a0b3b10548f0745c6c4e79730da51815a1291f49c660c6792a28f610ed55f1ff6575bcd5ba8ac59767e1904a4e8c75c19a4b627199bf0a2188d67ea89d3e COUNT = 34 -K = 1228ec7df3d07ffff968835f4f7c47a3 -C = 2672e6e800cef16925d27c2780d89167234d8b52b3760967c5a3d6f0d6e44438826e7df299ddee7091d3f9bf0f52347581978eae28b6fff071336a9d4a0808729f56cfb364797f9c06dca1555a06db7c575a113c6268f5c06cea5903db34d4eb584ff82233804e710b873e1a80ded858 -FAIL +K = 2bbfd0050a9adab845eec203b002d882 +C = 74f476d56843299f3e33c010a44651afc22e467686b6bfb33f6465f677deac6eb0e5b6673f40266a877d30155fde62521ec6d31113bf575d277eaced1ecc9c89c18b8564aee47a10dbe4170e93e8ffe12b880a4babb8f653a8526c1b956da9644dc1587a01b46307ce8073a31fe71b6f9157c3eb30c9ed80cb3784dd31775ff4803cf638d10b596cf92b4f2cbb634c86f94d55550abc9b5d67f18a71092926ffcc5c23bcc042a3ba091fb8eb0c1f4de6d2df7931b610b5cd24827bf00ae48e2edd7d57355ee90a281f3c5f9771ec8521353a886c0b467210e6a074f50da909862453f22fe71cd7dcefe5612d5c5e29855d5e555e79139367845a6ca819098de7e111075f558a25fbea91faaee8de3c70358a34c92833a5fbb563b97fd59f3aaa919109eae034b4d6439519a58d25a575f37df515c04510dee9347835c8fab5c363f411570338ed98017735b78f20688f116e999b46c0ff7d2a16d1f129032f13b2dd3d87cd14a61408c4a26fb0be77cf7c8a6387deac2f10622854571933cbed3a6a1f71129f9c279a73cea41dd11e81b7d0f0bb927b03e22dc8bfceaf01e2643790705bb7f193ceabc79b47888879ff56b5729e693641c7f4bba75b5683c5c1e37a8d73a7d451fffecb8b3e656499d91453428526e6049b0e0d71e1a1e3daaa0717bea55b44e194fec8c251c5c0d27c1f1cb9531d60242f6bbfd95215718a079c58db15d05a7dc1 +P = 9f6d5cb3a22b5895af992d96680716aa16903a60de9104a3afe10c2511a80f2d0a366f0308370549735adaaafdb05607918a77c9286e85eb7e0881d95689cf8cd3e7cd34bd80ea3e0f201ad923b05709b9656065240b29424086d6f8ed7e0f9ce3e055870de61df9461c785a8e06541c9f0b84a0b78baf3368153a05c0ac72fcf8c54929a6b92d8cbc4a9053ce6997b9be24f03b2af376db94d4f8e5e9af731ca8009e3dd8e77f1cd9a50bc5a8aaa2624aed8c7d83490e7beb63b1178a64d0d24f808b8fb99cd159621ed67995a976f02fb0bef905ac2ca8cc31396ac536e76a2b757ac941601db4d1de81067f01435146b272146ccb2ca025887fc66847472e5cf81bd7e07e75e6b947aa943cc52f3774a3dd810c5fed9468c327eaf626324f39c2350bcd00b25043b75909f926b777bda9a1f05d1fe96d05714dcc45e5959a1237f12d859d55bb75722b5380054a26bea195390c0179a2c11cd1ddd7d6bb51992d9e0e1a4c34166e0283bcf7167bc103b24eb00941a206d1cedb26c1861dda678d59ccb4a79549a62424e574c21199c186ba230a9c34ed6caf5677f71bd6c12a6e355cb151499f76afc00460107531811d65310abe0f9f6a915a3b95ad5feb04f6402447278dfcebade792a79eab6440d6513b6467cf5a202720b3ccced881d8f08a58cf28a0962f43bde18d8ebad9b7dfc078605e2ac01329c42f693d0ca2 COUNT = 35 -K = 8b3b1c653133b1a357b40e523cb69df2 -C = 643d9fd9686faac0098cbb89d9824607f6df80893b44b90c89a36bf4bf3eaf199242d5bc1560ae97a1e7cc528a119c640ac5cf4f1be6d2249e70d521186c5b3217633bbab9a440b1164146210a1f3ef39e1a4e3d7ddf62b1f1e49919ba78a32740fbb238b87baf58a6817a5bfd37abdd -FAIL +K = 4f31fee31660a83c422d790aab2a50ac +C = 674e03343273ff662a70cc68f9dd4d6e0b02261dcb6d96af7943f1cc2c6299fb2f48d584e525c49b724748f7ea55542e59d3cddae88b712bb4eb34eac4866b56507e7dd695464b6c161831ac8ddfc4fa760a19a7cda5651c84a9a98c6b20d8ce39ddd3b058e9a94606bc7e4b93eb191a8e97e1010196ee6c5db35d559e40a08b89ab1fc6c7747ddfece19fa5a91fa5d8fa3437010f0eb1aabb0f56918068197213f664c8761d223e611de9959fffe75142105035290535ab6c8c31f1d3f788aa835ecd5531a70ced1d4127dc1da14ad629206d714cefa76be9ea660a842dd4e4a9d51ef07e5f66d95f7eaf25c6bcb967d4ea3164162849f2bb2d60a00112603da3c2e336c704e01da8522802ef0c1e1df3897c7d8d4aa4461bd85eaeabe3cfa1de42973f36cbc3504d370150b76e7af1e1091e317188a2c8e105d2b12e1180c6252788cefa5609d4be1e216f44e975c755644178117e9bb73f2708fd616539e8df94f45c3673cef361361abe0105e1c6b738ba549517fc2a345986e80929239260e7a11a47c133d571ee680d9b31562b36ae81e391648722ccfec26daeafbe261fa72c7be983685d020d4c35aa53636a41a305a2784e2f444f4740f1eea4c9312bf7d0474fe3e131cb000d018094ac334a07d45194557745cb18a7d99fde09833880e9c84a322dd65518d0efe180907740f090c948a54a221345a0ce3b32e13a79de8c3362cf7a25 +P = 4a6d2be3c43b225d339c08e68cf17eb2131971c8c23a2a7b8a0907c00688ff331470861a75b253c9e0538d509697274a2c537e70eaa67605565c3e2d91c0a962a3c25e89e84277de92b0d43ef92c07d505891bcce1c34767619342494e49b3945848a860ff13bc4a6ead85e06b8aab4799f3c8d4b634b9df1dd1fefb71d8777ac6c83e23b72c8a90259623a6d690edc2733581c5d29439f7d4588f18683cc489973726fd84eb04240e3b4eef96bb3ffc26941ff6d1857d89750780f83dce5f834ae913b5f9d60aeb762fa06cd89dec9d5c5734c6a36b1ed8298d5a5600954719891112da368ad125e00a2900899cba37da6e1b7244ef0d8bec6e17fb034f696bc6e71125dab4fc64a044b389f126ba0c4531b229b8477e4619ccb87a7c2cc7150144fddcb604199c27179d18d0103e6ad4d8722f5491e50ac9e9ccdd64b8b6619c76dfd9e1612b897f13665a03a642ec7344f619d2eb71460cdf653006b410234821dbe4de4668bafdc8df2bc07372785af3bc8442878a86b73d744860320e8c08fadf4307040e786bb43639d43e46f3ba73c7504fdc0ced2f21b3b465dc4b83234640323af0a6940944632cec0026e4da2775dc361d3ca963093e2233d90a000c62ce1a71ac4f5c73ab5c8c75a4aec69554196295a243e1e71f75f2ee58c76c9cdd829864deba453ca0f23f1fe20d26139b20f0322469ad7239cd3a21bdd1ac COUNT = 36 -K = 0ee6a0dcca6d5996ed5e777fd8bb1794 -C = 40570e9661daafd8258139f08c0135fd1bd241e7c1566148958c83e7fdd646f2e8b358b6c7d5122b9b3817c508b29c807bacd71a6254190a10cd58af5b422fcedb15c5e3ec42e4b50f9fbaee2ccef91edadf9ed4599173ce87f383a27d255c082faf832fbd6f41810a39b1832b69d4ed -P = 11d40a3bcab8c7d8850dc6e409043f8366f6b61cee9ba3726b456a76aaab74d8e4b7cf73dc9d7c801c923b1aacc783af3d441ae295ec56e550577aa63dd767c6d96a6311e502fcea1faf5b993f6a3dfa12ebae222523cdbbb3740fddee701f443318cd4cf8 +K = 96335b252f1d6bd02cf62e7dc62dcabb +C = dd0d480990479beddd3962d91b13d40c89fca3e6dae1761472139dfaa861fd3467274da50cab60045af05df01f5163a4f202349cc5eeee6d952db589649b375397358e3f5741cb6887aa8783f8fc8b1f361aec92be8b475a1467009d1f8d333ec6ee48bd9d890512f66936a8679ef266dfd924ec5123f691fa981897514d6990113abda31af0775cb57ddede883ff7efacc2f5367c863aaed2e65c02e073a273c38ddc2f3d8190bfb6a4b15f4e880441db688ed49f80f0baf2ac0dda915b7e77fee19ad6aa3d9b6f3095fc26bc86d92a471011d10c057dcb94c85eacc314d60302da575715e8ca2bd0a4d75ff08f6e264459dedf749d96c7d7034eb33424b30357b017fedb083c8fa17e9f3e2f50d11d0db9a53252e7f50df6c62012752391059673bf8cd910b4e8792c9914244490a7df698d810a5b6f0d02489db4ff7b0e1649453417a06c3af858cbd3bf5e23067a5cca08d59e219ccedc3798f6ab0be95931e95f5091c2366bc8d058319f8d8890ba1eb878c463599c9d3e82ce84b0b970e6fe2da71a14527484640f6c8353e61bb7b4abd45ec34c0647acf3fbbe7d4e9f98d5526de04b9ebc027693cc9316639af409deb2d632c14c99fdf28d03433f168f48e6887b3ef328b3e9abdeec978b61e7f0be7dc35a164c3415f51d37199a2573d69692a4064bfdd15ed1932654520b3d7fa5b04e7bbbc35acabc25c5572874a1063903f76dccbf +P = e86b831d1da874acdeced7a69e4dd25c6a3cc8602093039384fef567652384a85bfcfd9b23393d57ab292dd49d129b5df084d5d42345893750b9c842d57cd4c427acc8becb63c05e656da07e6ce9b0587af528af9fddc0314b68a11d8c010e9891f26b23c29bd9c726b232c39104f18971abab47bd662d4fa9b2b9455b289d5415e07238a83320c3fcde439bb46dcbb098dd206df40a38ee424ace04bb77e326a59c28b9bead86aa4aab5e1b2435031edde675f6eafc1755ce6e2178aef21410b8829c02d907f54cd55b434527f2bcf7989d7ffb276e811693e9a42f958a1711c6f4b521c1633406a4b3ba9abb041f5f85c846f924ee16d4ad1092e2f6f29be80a28feae8bf1e217b482e6a423d2db026678b599b4d2eba9e59eefbb8c8906642c90638511e41f2f84ea89df9d09174fcfa2868b8ea875dac9559f303729538f9967ac6ef69faf59473d0140a3407d4ef956086668396b0324253c8ff0ca1dbc5ed0bb204f7f4d22555d329375890dd949673370d7267c67e955027f27497a63b731df470a5a3651659d4dff1436c8f3d35c745cf1a4cc116b2219d2ac035bb53033e838589d3dde319f9ba68b012ea3aeec948487e31af179ae5d82254ada68a1ef26b9967402f01ac25ddddffbc9e0c6111b3cf47f00934a0b6d113971af4648f651e4f2385eabc7337b02da12da0a8fd5eb5e6b7434dcadc044fd56eccf05 COUNT = 37 -K = f95312500fd9f8f31734a37c11a9e6dc -C = f667b6d82fe106b6f49d2ee5702fadb79af4d6e6bcab456d9c66668bf6b11f51e29850035b211d1f8b6e5206285f356e7af2632ef63c4ce90b817b4b9944220ee2893d93d3073a7079d2d2f714358c13803edc2888c2369edb37ae6dd1b7ee015b24c4571b0ff80f2e703c09026ebe1d -P = 6c4da2209391f95cab866b10bf957d2a2332ac78f56e22be9015c3e96a2d572710a99999b5001cdecd0d0a6ae778776463c28f32865c92df4301d1a1e8e5033cef449224759781164c8877043c8500bfeaebba90022a592742d9648dc4dbbe7f0858be2c60 +K = eb340a38f9db2042f4cdef00074f080a +C = 96360c8eaa2997c4a7df983372d45e4b381fd586862bccef10fe2bf850343a39bb289f547f1301c557befa7d6d06b1aa96bbe9b01326b222b8462b8dbe2cde07f273286976b9c76cf743103ae3537b9fd7a0a3aa2ef9222e548845fcec01895fcfbce9bb58c848d60b9ca5ed6aef267d8f0a25650252bb22684e2bc85cba7ce52d9358e7b7c421bed502a788be05b5875a1e5dfd4be73a0c41928a2b399e6940f5f984b6903464f363e8a31c08ad3b03cfa8a506c5a4ca2890c98b74e6b676dc666e4872b6537abcfa068c1076f373c97167dc20de07f98bcf2aa466dfa6a3adab05d3dd77ffc45b8cd99755b444d7cde6fb39fb92d9c1c4ccda521161714aa6d75c92d06c162147a08ad4ced97b65b4f244d63e65eefa34e00616dfbb5f708f93af3e97a9177a9320356fd01088710540a6eb5374d0a5230d25841d6a6d7159d72ef89eab5940dc3e0b964fafb9bc9ad1ffe7dd8a8f87c29ff50060a0759e3864853d6585366f69f05012852298087a8bd3a706accdaa04e5ea917310a56cfda293a50f3be077174bf4c07a7fb122f561d0164e9583dc79086a46ac0e45b153d242a0e20c9eb5ffab762b196d5998bff6a78197d6537b369f14c722901b7871540159708459d16472cd9ecbab50b7ec4fa8965f7f1071923e3a7fa897a534c05da571c80556eb9b08b20f0e067924dce68d4a62564aa2782a126acf9ebda9221cab5c72e32930c1 +P = 9527d496b6a7505f57d491f81541c1bfb0ec46416e7eae7ffd259b5c78422733985e493ebb2ee7a395921b1022f84023374f3802b1ce1fa32bf45a7f2b11b548b7ccd9b977a8ed9358b0a3fdfe90b762f60e711fe2dd7fb610f55ab21bc03855ef2bf15a7227b71b7a93038e9640d305fe2e278c5d942904711690d9cd6bee02d1c46d4051156f036d892a8e0674b6bbb781ecf8423d5b63930ba453165a7bcf602165bc7163af3740d714529fd1d5eb4f5902d8508f1354c797a3dff5b1dc15d4a8085dd4b69a62db8a7363244841076e2152df388772e117959743dc3ce15d433d8f2005476d83c6c652a8765fbaef329a54d41bc8192e79a6dde54b7d8726c81d1367972676b35e8dfcb04dde07906d19b009ca9b34bcf03fe7797da9845e3933a5005f9cda3155bbb52c9e5fbff57d060f1b52071b6d9fb5e01d9e6f73d133c97596e7f36bb04919cde5842278e858ec4591da97cfef3252c422a9a5d602b2b5f63c5b8ec97cc03dcdb4c817d19e5e1032c8bfaedfde75899c7f5ffa8409597f6f3849f340510bf27d9c5d4f36a038afc15900d66dac0adf55ca6eb13e8942d0c065ac56ea50a92bdc48e5a7caa9b0c8ba8744176f83cbb7a26581d3581b67cae90ccc24d169e3a40a89c3fade4b48818707090629f7357ae524c0c4ba40587953f40bcfb52c8d255ca681951e90d27e1c0ddf7fdb63803f6096dedb6efb COUNT = 38 -K = 64dbd0319fcd4e22fe63b0b9ba9747c2 -C = 5408d577b0ca6ecb7d481766d15d79807454cc5c55e213597eee04cb09250254f025b4be251c14e68335be00d632aab944eb0c1332993df20796a3a90540c07a1a102bf1e107fe65bc45ab25dbc85c6413c4e89a660ccbfb8e0978648889f7c6a6e3bc0bdcc208f95101ec49339086c9 -P = ab68ccaa9523a105ed408ccab52c99085184198f52a79e2fb4b141774699c6182190ea8b1c7935641bb442f92fdbd42b12da9200ba75162b2e7cc6705a13fa823f7ecfc8631e633e2b8c1b4ecaa5d714abeb914dd75317cdf0e19ddf18d6d4eb9c945a43f7 +K = 39aa0e827450f134ae27629769bcefdb +C = abed9dcdc6087c38ee28bbac162de8c1d992761761b68800bb8308a9e26b40e13710dcf06bde46fc7313acad07e7a0c56a3de07708fcd617c25d99defb4be5a497a8aa030fb0ced22cd96edcf440a19c5ce2142244ee62bcf204ca6bf05c634a2f9d025e8cf1f8cfb039c6dcc7c85497531324576f4c79d74d06532021c4899a1c755577632aa3f419995f79be0c27eca1fba72d71997c66973ae23adba077ab4ad0d2176f89b8646286373fee866667759a701fd38741ec9cba23a620e141dab13572649b780db4a8c1be900e90a518170569ab607f9f2192dcb604ddb044a7bb924afe2f5769124936bd658d18d101a3a7052865fe8fe793c69bbe1441cd19184715a266f59b83a8615797b109a874b1f3055504ace65faa1463c43fcf5cf4abe6de252812553552dc13e9adc9a942dc0022fa6b0c40434f7f112d44ec00301aed27d769ac3f9c51377ea83e551dc503a23b7ef435f02cf8c0b0b71c2e650064c5adacb0cd69762ac67935743e577e866795e04c6d98db2be3df027e193ad8969aee187d527c38bbbd04040759f8b65cb68be9ccd98e7ede11272ea0f1214c0a090eb38736d0d051bc547ab6a70934f5b8576db7d93759a5cdb7e88d6bb0f4e646dbc5cfd734a800b213a72751bf2a79ca4aca533ac71a0ea732ebf8ec842b97eb149f779a5c6627a6e7cc9cb448a02a316bfcbe17ee983290fb3ea7c0f557963044eb1282c77b +P = 274b78ce299e65e0db01023965f6556ac49ca1018d1de869326d22d74fb4b2fc655e97171179d07e97b55a7b0e41ccd5b27e85570607b6c6853fe2be5c8f2177ff6d920ddf50a703910ef3c12c50635cc26232d29986a0487ba54ec855989eb31e114ac2001a0e19f4bd56b45be9f68cc193b5f3d32a8cb634d11a21c311e36190f754bc4af08ab593b7172694a6ef8ace41e9f79deebaff1ac3f9abebf2bff5e98ac4e03e069dd6b7172a9c085aa28f4c68e5e632fe18299d1d4a978985bf94fc38e5e73b42d00acd8469f16cfd06205c6ad1149ec575a180c33d08d1be9a4274b22a87e67846c63fbe914195e190d5a685d6677337f9d82f55ecb3f29b4292c5a261469ff737dd47e2b4e2a673da6614b4e2b45c304f699280e8d683218a7d6bd3eac7bc3aec271d933a690ba6dcb03d860cf34d85f5fd9323fc1f13637965216d80fd73af1666e9e211440b8a8cea0535a96e4d4f54b1eaae651ce28a0e1267e531704918d37d12d08e2a5ee93d2ab303e323672260017cc130f459a4fbf0d8e4a45d11d444826f6a511c6e51d72f93c9571f8210e97e274a3b338246f2df90bac78d13014fb06954d8a6e8c10c941d398940a4d5226d2f461b091b2a3b84c9d1321ee0de5540c9f99e4141a571104884fb5f4f940cfd6c745051c99723f5fb68e5bec874d1cfa7c31d34c9ffb87c19c5bbf540b8bb96016b7d1aa99ff9e9 COUNT = 39 -K = da31ece79481d3debc9c655459e6a060 -C = 7ed97261ca701daf76352a8ae921d7047a57d7cdb73e24a332f88326d9d7756fa8653498d306f86105407334d4fa2da01da84334fe9c2897a3f30018bda9a2cd66cf4a47e3b0652aae702df382a098d316b0eb929021606e8416a09f15f0824acebe9dc5312ce61b9a85b3a83a5cebcf -P = 634368d36297ff81fc900100cffbb484a269fc3af992af8009464a4cf55883a20df821fe684e23abff1a94db1b7700874131064f09e8e4e85b6841a646406e3c2ca740d7f4a8112c08bc36407ba18bd3e405cf0028040b3245c019381a7852afd56946a8c8 +K = 5226bc69ea9e6d6aa0eb92d448aa2539 +C = 920a3703dd30dadc664ea8d2cc577444cd1cf7d5c1e5c1aebcd3f28c8d85220a3c24eaf4e90eeed1f900bc4f27f6b19573c4bc1fb099205b9a003a4969855f5d23032a3b1eac1864199bf0a9ca91b680d37fb5a8cd1caf68bac164461c0bdb3438b88f552b4da70179a48b6d380b0a594b381a299217532aca638e037a17febac965abcbcc893370172b9a5287db420570aa9967b813ba769806848a6de0cce0a84b64623265d90abb20987f77c8176b337405b4442eede0242997d6cfe51be90bb4b1d89b3ad355713162386b80bc0ce5ee15a6ed2f482ce0220bd6aa5c77172845fb9d588ccce0cd2a28ed3790d45ab41dc4f85235050e9ecea6b4b87bbaa0ce0f52e365a773d67b2211331363cd48144e9c8a5cfb542c7facd56f82ab8537656c48dedb3882b3816aa863fc8c25573acf1c4370cfee5be6a7b830548de3387172c0f1881d5494f77999b58610aeb6758fd0652b770a89fd509d4e813f50c6dd9f8f84d8f9589c0dcef754fa969d5580ee1cd81b91fddfe8e80a4d317f7eb826ca1c376abc9e5f30c39b9ddca65585a559c708886a5c46ec2c63460305309f3268397c8df3a35b66e03d08b31ed88a3755f771f7626f02e225fc80d6b3995853b5f460492711e3f4f3c770abb531cf853f46586ba4b1b3272b8bfe081c6b61776a5935f03ccb8d5e7e0977ac7362f8925ac1d37a5eb7f4e2651ce512e41abd7b349ce557674728 +FAIL COUNT = 40 -K = 53005e3cdd70bea54f1e9ab89b6a9a02 -C = c4e0de21fe3e944c55d36c039c93f8d60b9f4850d39b4308482cce614c70350f8dabc71d6a23101dfd6cceb90abfc8c1d1cec02a4c00b027faf8b3067e07f79aa7863422def33b5a6a978e3452243d339f0d7ee31ef43ca561024c7405f65d42c5384c55e972d4da916fa3cb147959c1 -P = b6b281c0bc9cc0102f185de34306d23ec334e433903ade3c7ceaf86f2889d2e9a0ea7d0505d99bdf9ad94415d87de531a271bd56e86bf2f36769c735c69968fc984df18031155c546618ec56a0a288ca3f0b6ff512e95982c8b62c9bd470887462f9e5cf8c +K = 088d8c494bf3e43964b9a7b45bf0ffc0 +C = 51b1c64c6500ac677ec8501ce3aee93b605142201fde5c8c51f6b4e5d0657eaaf094a03bc06cf46b4b092327f4bf901d41077c9b04e883f0d2f185a980d7f6b5be387fbd3cbe538f14a902e430cf860fc15b4c9606852af8b6543c7ed833f0305ab832f6f037b14ed148ca13eef4721b7bfc43a73431eb27f034bdb900876e046709427781a5ebac951a95f25e5d812228ba036b02eca158d8554fc8588e764ab05882fb11baea2d78acd4ecd94646866d7ecc01ad55022bd3fff9db4fe85c5015cb476d9ff380af9b523f0ea19bfb209a27c0d434400bfa2560ddc0070e2d423b835063c8e648238456549cedb55d46b8a2b95aa4d6b0da28a4ad1d060bd183076b2be6cb372046a725ab9988e0ad327f1aa5fdf557e594f057c337d3ec580f06b66bcb0ad11093e52d94f5eac128d7729e0b091b785ceeb6977b4ff47798607d5cbaf756449c1876eb613277f81afe9ce6b88d40f4468837ea6e6d1750b8eb3b63985f60050287e84faaa1e77bae86d0724d52af238177265dd1f672292e62952cb785ee2999051d3a805ab72be6fba49ed75d35a0bc11ca14fdb229adffe5c0f49d51a24ba6a551e3cbd1ee976be1ab9e37bbe7102b9fb3f7681039419e9a84a21ac0ee9e028916eff09871c37391c18c6e8935b77cf0898238f0242dd66036aeed130249e253c8cee181b614c8ec6d31d172cfb5259e58691b8f84d01df5a60f08690b3174dc +P = c4127fda38ab129fc1e352a2d2687b6c6f6e701a3eac208510de48fbeff9e77c4372e98777f8c2ac207f4c30bf4c08293953b9e457a15a6ae84e345ca3e41442e02f01654475f4f94c83c1dabb15862869e7544624a7d03dc5dbf018b61ba84563176563a89a72eedd36addbed03f0e5d509b4d0c292d670ca48b27225bcad8d8548f5cdc3e9b0b5cb7ce04e5fc40aa388fbd8d9616a7580faf4fa714a2decef97100dec99af7fcbf5033ec6047d634439b381ad59bc398f8177bf4bbbb9d641a873cef551bc2e0748a556f7d74a64363958c38bba0149ef5751de7e4b254a4ce32af7a33fbcb3875d943e2ab64047fcac321d9665ed1918a82fff8b789b901c3981af16fb4f21fbdbbf81857a4e591a3daceabfe05f12353078ae04809510dfb8f989ca8cd4882d35b3321894df6bf367111c1cad4aad7ee71fe3a7c83bf4ca0ff0446c0f806395f6df5da91f3474ffcb5810e9fe71dc1a37b89e8fd600739d7ba9eecf2a1979fa3945dcf99534e15b808d353b4c0619aee1fa43506273641a038778a73270513ae872a8c5dab721802a186198bedbf1a6d7e9c7ecaeea378898cdd8bf52dfabe058cbc3c1c5f0c93a81db734013a52e35565683565c9c7f862a03d9fe524ed584d579aa7e9a38b0191ec30a864d3b82658bda24dde90fc0d1fd60c7095b9b0d719b58ef556b4026d27920d5dee585d7d93c6dec5db2824caf COUNT = 41 -K = 9f3cf9c68df3d413ef7c8e687a2edfee -C = ed9f5031f5f606ad1bb8e5dcf7d5f39e52d7690e647e8eace23d09b94aa38e3bd3648b6ef2dbd2aa8e0bbb3c66627122215d8e56a52f2c0846f269b93156c158cb7f0618dd5b303cf3d6f0b1f58ae75a84273ea508c18f6bc530ec4ecfd726dec6ea7c6daaa2ebaf2e3f3790f87164a1 -P = a3dd29236c87d35d4851561acd5f5d71c88da3c5d76050ba366c7393f200a3d5dd787348b75cefbec7b4bcb9db2ee150911c4283c7dd7dda925acecf133efa9502e9949897dbd10150f74f41573fa9025b8e22d569d2adcfcb0bdc70f9b50c04f823d7f4b1 +K = b78fbbddd384c7d691c92c8ac7d17bd5 +C = ff08a6fc1abf92a78eef285406e5b4ba66611557e7f14435a1a531a603b30408b22fc17750a8d0a0a1787e01da40fb2b2b184bbd210ce3a3001c95301e196cab0c614ff1e6c500df7350f69cbaf0380b7caa0ed204d77566aea67f805227cb664fc20ceaa26fe1f64cee14fb240801336c6985e98131610f56fb8d09c3caed68a8663255a87e1a47097be11bcaa2b4327baf80000e5332f9efa872b08c421c68c41dce5715fb7e0bf38a54877a1047446980f5d059706a3cea1158b739ee721d52a49b8ee205973eb055771fe76dbc66d93a7c299e5b413014482963ef46f93a9f839290d3d6fff5ddc24cbc68ccd33f0a0d624107f665bb1bd3e5cc227cc42005e6e76c7219501a4f8a7e50dec0460f351cecebca51717e476f6c96986ddf99784e1032ad7967c4762a00d902d874085924be97fe842fdf7b27e7015526301d2beb3b7a72fb8b3d571b0032e8d333b7d59cef72fec7cdb1ce5bbb6a17858e811d6f8d06b0319694642801b999cb28755ca1c3d8a208b683a370126a6079a74739cc6b4ddef032735e84f68e78a52ff39f7d00b0747d461116233e263371906b9b8cf4b8bb503197acdf1bed4ab212af5ff85fbe53687d84f2838ad93108e8f8cf9314cbb231e851b5ad961ea30ad389a153c2c3bad487d265ff816ceb25f66744e5133d32e0de2c7b85da9ee0b1d4fca9c71d39a400f2c904f2bc712b4f54996772146f84a4af9e +P = 79b1968fc496c8dbbbb13e49a1d61b72b41ed10bd547b6b95eb5dd2828216d577348b268af6c1bde03d52f01e101adab8e9bbfcef7f09aa986a5088e31ef6c8dde99fb3f348dab8e5d61df5f772cfe7d45f56fcfaa6ff3cd290b0790d8851fb4616a4e58e9b5541450b83edc8e1beb3986301526b2796185d43fda3ca043cffc63c956551491e41e1170ffd0097c920e342d4188931150e963b20978f5c4a93b6ded7fd7bab1bf11ee72df6812b91b2ab369aed786cca4f2493a3cd6358f13b8f1e737c777859e8be594177ad99e88a51ebb34abbd2116dac2d23a2fd0dca54c972bd0454b07b372bccdac02ff382247efb427d57e91894d79f95546c3f86ad6cbf4be6e1ceed9cbaf26f8653ea2d4bbe96e86517df482966674565280f8769cf8b2215cba5f954459661a49096cc0e621f9e6a7bc06634ed4e4c0aa39ac25e6cd2634d634da3ab74f6699e39f406ea9dfcf9b65a2a672d829cadb5b226c43e004b74f1517f5900ccc2d8d5cbc04a6a90513ca09684652b8551b919fbe7e152963a236369b060d485172869bb47df930d266f9a677f38c3b48c549b2280dde32bef345049bdc5d31dc24cd538ae561805ed68e5bab87057406083cdbadaaf030c2082de71c2922e892f4ab8abab346c3200c65d33de617a8fea2db590a4fcd0c32c66f48a47b0ac4da80e1dd149faded3344178109ba3f5928570496ec0c7bcb COUNT = 42 -K = 0657d48e3283d693a04be37862e9f42f -C = ff5a169dd68eec9eb513d6b0bc4f5dd64c224e11f6a787572c69b9255ba83ac2570988ca2c74aed5bf5cbaf53e7f7f612f85a9f33913083ed4c1bcee39797b140fadbb9346ffbbed29ff00fba64a665e6cd5a44837fe9be864b839a254772d5dae188cbc44ebee75d284533c80d70449 -P = 04584869fad00bd3375b97f87fad6bf27d4d428dba863992f23a34aca06db2173679e0bb7eb9cd5a20ca6eb1dfbbd339d01440efc8388437d593ce3fcf0649b2e725be4024f726754e27ecb16dd7c702493f95576b3762279d8475b8827c9d9306602eeb53 +K = e501aae9fda58a64b6faa3c80adb2cc8 +C = df09b081ccbc29887d8f74bc94d1bb70a7ffdda9d16f331ed3d9b64f2d9c29b11adbabf3590c3d8877511709fe3f71ded6f226e678d5d107a489cfd449e51cb1c7cc0f74c3b5e9fc268d6252da49b9caada8afd0e4dd6ec4453601c47c8e2ecbec1ab4334edc53cc607c97d29e6930838f1a59bd44a4f9490497338933fc6aef0bdafaebe3fa1705695582b6219377871d1062203b64ddd2d1b4fe020d2b45d20431ff3df6eaf724adf89869371fcfd5a086fb110a151dacd2ec3f9b3cd1a7c5d2d137ab53152b0b253ee7745013b8c5c151dd5ce73c9778bfb9952dd28b96ade1f5cc5920c990c2a3e159dae5101a17a9c7697409f34567c44e5f8f08e403136b15ced9592d07f7a323b3ee146667a0f872c47d4985f4884a0072e13fa167416cef62189eae47557a00e8462330eba0ef7e7e5946e1ada670eaf053b7a1a63610b2454af7d73e90a805cba8d9dd61a4d55086c51899bce81d6ce062b6b9b8078fb9b725122120fda1254f377f8326c01957550f7bd6fe8e8037fb94bb27c6bc90c38525b9e0ac0460a1271ddd15019168ca5b4f7f69a33f22c59c6fb6304220e14ac44835632fab64ce188717a40b5e1125cc94df540da03ed0617952f70dacc1298b8fa0f8bcaa082428088c0b14b77288a0953fa79d7605964c6a8b49d1c84e9b02130c362e4b3af6dc0ac8314d3cc13075f8499bb71b1b2fe3d48288391c7c0729191c7a4202 +P = 17c65fb6ad0e7ac8502bcbff6049079628bd9a0f99046a425b0cbfb22d2564ee43ecdd5b28b808645c67e9d6db237cdb51cbb875fb1e50f3fe6f31799aa8fad29efc102eb8f4b8e7b5828abd7f9580aaa583c2803cbf215816c2682844f8537080c85d67a0c96ac7adae3a8cc5dea628998592098cb257b2cdaa0a2380590b0f695d0876abe90e8cd90528bb24a63f1e6059cde57c0ea9d9fbd41fcd66f13bd26f80e60fa02effbeee74d8e429da145dee195826e5712578c6c752dccd94dded4dbec41b7e2e57e2ddc5ff925f3208836487effbc67fd996112b64201334dd2270dc009f07e90876c5f4619de2e5c399abc888efe6443181ed5a619cf5225f85a513074536f5bc496bc11b36d144e9c0658462b3dd59ab8f869c1b429ecdeff9149b65f1c74ec92cad188a94f54bed97619ea363efd7b943ac4c1fd5533229d4cb67d40b02b7dde4d605849be72218323623fd8e8e4b436888d8fe9d6b697ec9f753261382e26cd4900dab93b2e6fba94d4330b02f594134a86aa324e95513126c4256217f809daf413364a90acac44d802ab2788c10f67b6d621ac3bfdea102117912b73ab37ac8586550adb121a9bf41ad8a3e017498b667aa247a10bac7d1708538ef8127ccd5777584a65b2cd8221319774d8df49dcc21429614ce37d3f51c5cd48a61e5bc9269d56490dc682bc419d1e78e2ca8e455f77b53565c21a7d6 COUNT = 43 -K = 28bda878f5cdd1d429b38349f3cb082b -C = f49171ae85ef743cb094fcaac6035f4fdcad4a0df4fdf6c635f75eeb8542c632858087c7044ca98b3c9ebd57a4ef12b6e2f5c59550f0c404c3b201745e00db4b4efc9dffaa3c18d064d840164cfeaef54d50525fdfeb264157b9e9f915ebe2c5f619529ef0751f2fe81aaff08554b641 -FAIL +K = a6b2920ceb20cd4159f7c8c671318754 +C = f913961387dd48d5678d6edbc14c1c98e8f92a8b688fd33ff9758894b760339f0177ee2dd87795cea9f234507744a0000087a6c8748854dcf2ed9c76cc79d58e7862d8326c102778d1348ae0ec2416870d1f941297c1778ec3e85d6a17534333086935e1ee982fc90f9175dad05b265bf722b7e36036f98ffb6b1b0b12fb2daa54fae436fb044f2abc0ec0d1f4cc756b23b257aac3a1a1d1afc051ef25995cb3ab36f3c3964787802c9c574416dc6523cdb7a61966b8ff09533181d54941218b37dd72fd393d52d6c6fafcfa4a1bedce3777ba38426876d4d717e9953acd2d8020efde17890f86cedc144415bac196e1bdcc6bc0631708e34fb5c285165605249636e16b4575e332b1ea29623fdc3a8f55ab9272eb03d0858de0f4854dc69fd501edffdb44097cf3464e8ffd526bf5d335f9ca10db87656262ee3ee51724be9c28e951927b3cb32827f232d2334a3ff9ea888fe0e9e0e9b8ed9faffb2be8742c9b5ea6375bd6bd8f575dc7c382d2cd1e43c156e7a61750c527ebd0f320cbc19d457c057c8a1ce08f71d0da3cf4cbf033d8ad74941529cbbadc1d1003ce89308bba8c1bd340bcf558f445576cfbaf36907ab98f86fe86856dfdcd7bb21707726c52043b19bb15728dd9b8e0082a0110add66bc90bf98a260d70e93b981e5ca464c380128e4bd7e3a9ff79cb6991050be0fa196fbe5f28d0f9d1a83749ed27a754bf99827904e9bd18 +P = 4ecbf3493be287a6e8ac73536be7204a7fee84ff7db4c79721f0cba09bd72d381238db66a8f1c784751ff572caae32fac48e906d00a2f3f8611afac8076898c0eb46a9f2b557f30a70382a908108f8dfc9c27048bca1a738b39976ea54277cb0a25780696ac3ecb4ae24362bbde6bf9eb3af43999e4727409bfec52ceba0d72a2f7694b9954914618177679a7a0ec902df35d1ab8b40ca329960669c83d7c28c772a24b2197d49beffd43f21d0ea5ba09af836539233ea34e4a869fa911d843aa0ba01a7c3232c6f7ecc8d4fd5f0e9a176830a3dd5857fee159ec932fbe2932399ef51011fbc444298d42027589ad50670a2f544fb7720fc606640f3ca4078b3a5454d59a8b0fc208a4ca674055cc4ebf64826d53f889ae34033889d415a02661ce1d61ccc7ca26e33c13a0078e1c2cc2b05daf9618fbbecfd6c816b09f1f45f7f64ddaa977d971397c04ff60f5383ef84c217b20bf3b978e9ac0aba6d4cb2697c2aa4892fe195ef7c4099de26897535a0f41c8ed90eb674bc673a5a47816c83abcb8a7e883316699112728f470a3aa08dab5662d632bae2a8b7d39c7bab2ead54331bf1342d2b045b62305e6c3eacd707815e23688431a9c8b9dd177e1f89c877468f4ddb3722452f4e50b17d01aa7a353f1c18811a9ca2048ff841c9c790d21054c42a60a08e6438571bcdb916008062ade46988cbb01879ec39f0cf49b7fb COUNT = 44 -K = cf3dbede839e888b3c52daba39ad9a63 -C = 1efef6fca40ea0d535a49fc113f92dd17bce21793a726c13395f015ff7f113af08d2f4b5628a699cdfd190253a8446a9393cdd34deca1036d7b816e639fdb4003bc52cb1454736f6791fd1cbac49d6366ef9b867fb132a243a2ba4adf9856f71014bc0192674ee3333ed64c954ea1797 -P = 56f2f567612693a194da1e97132a32b7e06411857b55a073290bbc635706d3af189c9d0cf39d9152c30b95884eec7e840ab241d03f09026a0c55f26f6e207943e92b3c3cdbbf4a32ff4f6c341e2ac4689bebc84c832861767f7ecd7702657b07b0a0c62267 +K = e20e42de787924b23b1552b20a6f2a69 +C = 9338109123db8c5fb449bc00bb1c95adbbb96c9a72214cbd25f391aa422184f5a87d7560ec15136615c6ea5a39a9750e78f7616b17cf05fb0dd0c24a3413f188146b24e4f2bdb94a87d575232c8ecf27f46f7dbd996e5b7850fca4bd7ced106371cb4226b07295695fc2a8069e799800ee00408de378f09e946e2a225c7081cddfa6944d2532da6c740a794b633ca37cb7ab9f917306c1d60524119af89b3d6c4d6930636162c51c1ee814cb94f81ee0b3352df1c60f531e94c35d1fa4552913c3e483eab2e03c2861dd3db448f09d0b209a5ada4ed4c6e4c7ab38fd17e920a2bc47a760bc293bca98264cdb6f13fa57a417e3a4c87c76ed53fd09dad6d1010555490cc4bf77e4fc4ea850ce1fa19ed8c3545dc2f2da68307b7cf86988be3ff153a05e0f81abbfe196f8f58fdf0a209524dbd9f8c968f4260716008783db893eb4c957fb1d54aa0093eeeb2876ae79d245e906fef8cb5d8615461723b7df23bd048585c9a439265a886ea4a9131133313ec82754dcc67456802910c85645b37e994973f32bc3b3217e9ae9265fafdde4c4e08f84b037cd5f0a422866942c44af2e100cc6bda422f0e0c980fe4282fe0bd5e2609d92b8c72acc0db09bf29d7ee860e9975ba7866766e1f0f37df3576fe6e66b379a41f5195b38efbea4ad50add52439eb2c106980222438401ccc68c84de1c71baadbfb0d2981564df35e23498e7fb155093a5c5eb3 +FAIL COUNT = 45 -K = 623a02b6070b1cf38fa1752a689e450a -C = d517bacc967b6f1e243fba18d32db69a46eefe517b7414d01857942ee198d72f54344c03c646f0b82106d48b7a0b6de03d377895ffa114c6037ea2ac0b38f75ee751e3fae605fc6e0f016fc2516a45f836410306a4814722d5c6b6bdca03ca740e81d83c36dfc439e980c592104b4d2b -P = 710ce7831a864aae89a3bcab66851f464f4a2db1b3d16849ff13b2475420365ea4a53aaf36d21791b93cc56b64c2c73bdc091a4e4f8f279410b1db723cd54cfc3a7f0bccb0c0d951ec14d79f58df7725e00f4bc52e277719fc360b443e9522cecfba6a0b5c +K = 1cae4ec8aa7e841080e680b15a4be694 +C = c93b9a32a74ad123ff2fb7c46047b8b374cfdb9ae15bea930133618d5bb880feed33783da380c38179f243c50d0b455ea8d929215d171a2209b945bdb68d67cd3fbf1436050b2cc5759d901966ed4c15dd6dec537dc73043b9caace3b234f97c8af8dd9e96608c4967386c4c1282becf38e9e09d9b8deb3e9c0a440db9660b2af612b7d8590753d57fdac6791e8a3f4d3c73831d3d852783925e2f71718298a096d2b6106a5f24b5d563ae42343fb7fa259389cf144751935480fb0252df7a9e857921c26dfdfff007ba766476db4b5d80d60e3a2675f6181c4df6f515db26318e1c88b65faf1d2ffd43253b3957114bb92b468bf9cf96acd07cb2451cc754d436ad081771ae01ab878975aa8120a2ea46ad2f0e8a808fee4439485c53fc2dbed323857f17f4d1da81d3159bb9132b61da32f0d8699c1d53caf884233e875f458794c43a858cac9c9cd271b4526a151579398d4fd497cabb74a8de4f2486c5140e824fb85ef476d6f25fb256c594e7e5207747759c9509ded75680d59a4da0e0f8e11828edc6eacb324997bc8ddec56fd178b32f57d8001ad4c3bf1cda68720c9b91cdedeca87c1e3fdd15906e8c34e81029e95b328f3bad63b2b517512230caf38fafb1fa771ecd5660de911ea7198be0f2a0ed79e78435ed751d02b710632508203d4531b2562a26be9636b0f27f0f5bc76b086b270ede3393d00021d04e0427459fbdb55383b5 +P = cd486eed3cd7da9b83eb471860592efecc56b06fb661fba681a5de46285d0e9de5268c156501cc25b6d29771bc7a0dd768241ad8a0cccecdeb2e8387e5edee43ced0af53fa2a158f6045be7ddb398435156b6f3665ca61f92061f83fe14880513bc91cc6a3500774690d421d4d019143aab3e8c099c3d48e5676e547af2979a2e0a909cbe0f28d6ffb22f5c4332e4ed0e2a90365cb1d5a97e077fc477c21f4778d75703fbb3351ae21a2ab5815a893b75df6c9b2744160ce8ef88532633cbdae88a26785f26ca018b986b13c65c98b32be1e82ae94f42f1768309c1ef42ed78b1a63d59558d5db1e469a6a80129f727b792f0a55454299bf5774864d5957e6666ba9b3f53a899d5513a510d24c535be53d6ecaed9b25936a91d8ad7a851f54933ed6c5f4d29219beccbb220be67b992f6b8556901dc5924a01b2c33fcff65a8fd1c88a775a778efd19ca4f0ed5a57b6fe87053b43768ef5abff47cc4b2b0bbfac59581e09ff2464d0f437c9a9506a8586213b3f7f87029d4697fc0a87f17e69643e5c6f7b3727febd52f70b99ac95865b962caa829c2443e56488c820128e7df0915fbc7a6e256227858aa14288edec4be735abeb4e957776cdbe1741bc3cd6b028760e40833ec55b92db3b4ec9a04da33339ebbfa6972afe2a618355f1a051f5dfdacf09735d200d51e196accd3ea67fd28f3c7d8d67385c3351ba0fb3dcfc4 COUNT = 46 -K = 12798f8df5fd49c9b66b47296905f92f -C = 14b4d8f8f2fdb91b20b0c882e7b2bdffd4c0ec5e03d214e03d34632c24c64aad92c33632f7fb840d9c616e72021acd8b45e9e50391eaf9c10f1f0ecedbec9fc5d5b401f1a418eb92318d2bd229b93b30a95e800d87a33489991f3ec86f6098d15d67714638c09cbed45873210afd899a -P = 95c6d285ee768a4e38784ee4d8f09a300392dfb3a45e73510d739b07719a9b29655ade613dc55e7d02da48c7dd3c071c9cf4448b08534ba620719603730cce457ffbb7242b4476deee83d831dca711c3a55d4b4ba60c664921dca3d61ffe5b836efaaebf1e +K = 39170d10e86c30f4921b36c0a019c3b1 +C = ba8be9acbf388ddb47fd6fb2e083753b8634a3a758ec9ef8fab29773266c56ed0b8be80f1d75192563349ef484a8ba3632bde1c342f1c5116ec6cf310aa4398e407852270e072372552c180540f17879762cdf2d3d7bae37c03e5086c0942cdd79942d48bd78b2c43b2111d3d58790864f5c1a18313d42bb894d728ca2f94393569ba11e17fd1284a5738784d67b00ccb2a1dad406ad937f3e127e1503ffeeb3c3a331599a983f4463950f40c6e1f840e24acc94d3a4d017194b903c32d60266b4687b29da9d70998f250754734964cfb81e0d2e1262744ea209a901f082e6d6318518e48d3d8dba648d6e6c703b3d34961319e47a719666d246b762f04ee066089241a0fd8a5c1e28c96a31ba4dbd65a99f7f0288ea47c86c99396fa0e9306fa754a42cdc2a566eb616a350e7f4bd6893fe4b965756b62a9eb9c6136f93182a4722a824632fea8d7e808c89029bfccf8c4c2aadb89027a49f9fba4b85f69a32d297eb86da83a42e5cdf7f3de9c8f69e47f7ff704ba3e499d3aeb123f277319a8cd46f42514f1250cfc9079f673d302e6c9a6caa84d79ae60ee2a1d0ea36b940ec5965c83c83795bc6557db72c368fabc133a2706bc14e1dec87a7d50a4e8ed50f21ae72fc424ac30f4e1e83ebf2efd8a11b27a2269698b737181b9bdc405dd4ed914938e87afb674bb4bfdd03c2af158863b73391c0858491e200b484278ec60c6f353eeda8ea9d +P = a0ca1f3a00d478790200f65cd0c3f1329ebf99a5ebabf9cd5205a5151bdb7b23aff67875fe34384aa1a55c4b1ffecd8f24ee25ec7e193a158533236c477c7698c52e71710fa6a731d3f87dbf27139140544335402cb37ab6f870e192099056fc5d0623a0dcd8ed88e676a70ab85e0910cc90308b0a125f350f72c971c50298f8abd92f857ec5ba6ed381fd7fa3a987ea34b3eefd0b87303b762e17546eabe84826753f75ed99705015fb2e64f4da3f9e827383491fa59639a258bc07603690e9cd73d0d11a98c6d38817e7558c32b098bfc9e2ca1a245c38770a5407623acfd20f426fbd54a29a15ecad265bd6d6f4b16eb8448d7ccc220e2e55ada079ba5816c68036435576ac1e0a44b1c6c0973bdfb7076d310168d22ad85017c8577556db174f0eff7ae126fca0912487e7907b9ec7d804669950ab6ace48b0120fa7322d5166c4937707afad4a02f38ca424c60c7e1696e93c29685dd39be7d065fc43a55d77ba9c563e4aafda6a247f6c82adada9fce532a435dc152d743c291f7e4cea1057d2e8898b9be75a7ee09a4aa11c935108e928f38bcc16648712009aadf10c102748b6a63af58695638ebb25bdc51ad6a8d734608f06ec795bc9df8ee698ad34d30d94ec79949a371e019b860e0cf4da6ddf0187d67d4f27c9f175a70c8d3d955d84f3e8e8691ee58bdaf34e145a588b0c07a0253e56f0cb788fe155ce48a7 COUNT = 47 -K = 8ebfcb5b039832be507da34c7817200d -C = 1a4a639851d1b378c80b207156bdadc2d56fc2ed9358444a08b4cc13aac6e154c7ab051b93f35d86812c0a3f4bea022799d6fa7e492e7b3baf56c0f4d9842d381d1eb2ebe5d1c7b0155dc7cb26744792fbf2e64c3bce1032cd167a57b4df4c2aed8c6a432275d478dff153b7b783d13b -P = bebc5f8753c5ebb152d1b12bcf508be616a2f14dc351c5e586d0c99ddcfa4aeba52234f5063e8bf8e895ad7568608e3ada393bf007c159ed247c6871fd1a8f659dda1c53aef79cf41010940480571abd4fa265924cf7befa3cf5fd2cc1564217563ea7362b +K = 87ac5e043ad73a0565408c071a4c7b6e +C = 267695182c2fe5d5942a688359936b71665a85752e186be2eae5b78dad7e332412a8c1e6d982fe91e1ea0aeefea164c537aa734960aeff329c6eda772f966798e4bf76fab8145d09db588be776c1dcf760f033040b39320db29915eb41c18bbf9f6dd8838d1e81d3c6957b02ea20f4f6ed65806564ffcfd4eda319c1dcb25b6d3e54700b63f925ef257e063a896c60c2e9b71f88e285874f46bf6d0ee0320533df7cdf6e61e63b43b161e0ea1d46255fd745aaf589a2026ecd00aebf907eac0da8194e68c5c686b1e71ad09b84262653a1c0c7f14fe3a1128506a71b560790026a430df50e63676351adc8a4c27e18a879ba0ce37bb5b5fa0f0c6831bcaeb19913d6291260c1ae040915fcdaaf74a59ecfb7a30db884628299338940d8cfbe8f07032b5c196f840023a80742de00b63e457636de552dcc3135d05e4a4b61f021217ac1b3fac3ef7e9cb684cbbd6cb82c86bac21b853c39f2b35ee694e2050b861d653f2ba7ae199009f04d79eb63305f577781e8869e2536f8f3286576306f53578e69e345539c850b6490cb2e15e92525c7c45b111a56fdd45d397e96c2dd5ce08f0cdef1070b03ae368f50e4a775e7db06fff0b00011d9f64aabde9ec6fec62dcc70d26320540da3fba0e6df2dbd2e68c446245c8d0b18079f4b8d6fd2ea632f6e4d90c70f0727e6beee798a32e2fbe41f78a0967467bd866dde67efe85a7c08e02eab82194843 +P = ec7098c95d6567ee9465e740a2b8c0a72c9bd97a84b6f6c85c85a52757b5b58f56ff0fcc94fe564c36d53920f4b21d02da273fb13fd587d15f2365c5491a613e383b91a09bc92389df506bb215543d0d58b1662dfc103a44c8e4c530b39502d5a19b46f26a09856d5a747171c14ca09611a610baf6082bd28bdce21f1990d2bc97df7afb4da97229d3fdce3de153eeb16b1c7edef7376905b4ed7a54178fa00b0b26cb514873ca6e9222d8f33e12c683d08f3a9a68f0e6519ebb677f68bc81b5efbcd554b60c8c2c7d00f7cfd4c4c8908828af51a963932ccafdd4c0bfa1623856add82ccbcbcfb113a44534295e289f9a8fd8b74048900fefe604f2ebb03c263d1bda6ea5dec792d6ddd3c0de547bc3a6cf2d058b41d327b684922fdd431b4acf82d0224749d719a4148aa0ea330b4c3aff0f9ce5dc311b2eaa0632c4912343ef8c702aad0bacd46a7bbbc4a3395f73ed45291c42be14607093bc6a001bfee7795e1180806fc203d66ffdfd6def9b2da40cd6ce300abf78c73d84c5a62402e23015490c8b0cb9e1ca7a8d71304359b1047e8401a140f6c47f987697574613ac5d4f4a668c76b88d7dff791783b7fba904f199a3acac047027a11d5aedbe65d8797c333d3964d1be1860841113e2acbcda402c64570fab3573b086851962ddad78733ffac6f7994f3a4e48649d162af681189f1ac461990d8ab8ac3cda198ce5 COUNT = 48 -K = 1005a788bf23ee941cc7aec4620330b8 -C = 8e58cfbf8b88a680fb65a0fae249fe02f604370ec59be9082f7f9aeebaaf7b8f292d6cf8653b650d8ef6c50aa5a5ef0e9c2f6371736aa3caa4adcd08534cf7747e8dc5b41f17de4f7c4a0d10379dd7dd68b4feac011f2d2e9a9e5eb7777d5977d10e877e429e34635172cd6ac2d9c1cd -P = b45ec9d7f9fd4a39227168326deb1d5a2cf88ddeed346641cdc6c54ce3daa2be52cb72e7efc9e03100e2236e12de6297a7d3fc171e6e836063e68590abbd08e400f100ad4d440842f25b09ef193c4b0d1672d21cfaac7581f1b9b9bc0c23e394d338945a6f +K = b4ab90f83ce75294ec0a4265d646b60d +C = 1b72932d6e22ba43f507b7d4f4b9c0e967e4b07b0f1c0b91d020f30cc7474965fc00d0b749d3463ec4bc125f416c766ed129730d4f23b78f5e1897051ab3e13c1bef8272aa269e5b80aadf55b5c483298ff645b10a155903968b730d51f507a88e884580c32593d95f0f78320340dab5776eefa561d3028bfe4544ecdc86951d3df22cd86bf88b3d0215cd1c3670ced8cd4c00fe22aed30086d12bf9d12e7a61f64a87df0feb35e1499c945d20c7bca0d4509b2f6cd88cb3251a24478ec83f3888ff2f0b3bc10743292e71d38df17dca966e378574a3f9248e92f984306a229e756163a95c052db6339938b897d5e8c281884d9241d7828bda59ba9344ca19b9d75a5ee64dc6e395d8cbc0ff5765b9f2f53d7a63e854c5489e389970cfda07f325f3ee5d20b2ced42ffe9ae3d2454f708c78ff59117f9589f6594922c44ad79d662297959cdda3abd28f6e30337d222dc98b28b967e3c00a221ede4bd470c56a0eb507f1613329c65712da4cac4ded3afa0b25df1a392d0fc1c2594896c9f5f77d467c4a555639cfb35b22b773e7391d597840453eecaf71dd68b2a7ca4d4828e7163ec59ba549ccdd8b0ae16e9ffaa8c5b0497f9cb49f580cc065b40501db0eaa7f32c161f90a85535dbfb506da4accccabcd74f3a20ea2e56d912c8c547b4d75562e6eb3d07e46f54874cb13fb51874645c4ac15065dde3e8af10d6b9ab10a610eb1677f5ea45d +P = ff193b99b52314a0d49011b15686c95005f70959a461c5d3bca9954a631c9e259308a5b52809d5ac8252ee91a6de17208b2424dbf2db4522431e35269d1ef929dafeb4d4292a43512449f1a51e8efa42e3400fa877eac0496ce73cee98fe353f017d5c288036c79ebfe36bb3dbeb269d3c959a64c6a0f795f76f245f6c6c322650180ad1662a7dce685cbc2fa593d37b99c0bcee7e66211ca20d39d78d1127792811460a815c77fccd1cba454d5643788d7ad128407d5e5e9955fed02d8f55b10e2a608db46615ee9a7e141efec9d9cdf3ea36be66bbf28c64057ea1d932e0256a9da3ec8ea45533de8a187b992eabfe7e3cc5e1a950476fa3447db55d3fb02db7fcbe55b7cd0b5869caad23096cb1a1ddefc21baeebc240ace0679517c7aae7cf8c1fd635f9c1bca6b80f45a626f73a248c14c495a842b0d46f60068fbe2dd7d3980495b6ca4e311d7bc9f680ab169d40120abbe34f8693f98ac01bfbc6a4339b1586d00a51f9931ae1aeb601aa75f76415cb251ab416ea18699a7a697533ef38f4056d82b7599789ced425bbbf20622e947ec28fbeef36b272f5ad220df89a2d60f621e2b4b941c3ddf82346d7b7c06382d7845c4fab5e642b7c611dca335a8da9a677fe7f60ff578d1626df8134f57c57504120a77fd7be49096b90740edb166258e336139ff4a767475ef39aae7076be63d6c5a8b0827d98625456b52d2d COUNT = 49 -K = 201ae46fc531a80ffd444aaaa9da0ef1 -C = 1614037b68ba909fef9b8a91dcf9d1b831c6263777d24c78f5959d3d0355f94ed48307d64131daf3d3b83accb7fc58c18b1a1430f4b09cec5325ae202fece99e51ea5607bac8e57437b2dd501a84b86ce1ad94b057d2347a8d008fe90a7202e3fd03a955c8e7146bc4a2d79297646c27 +K = bbedffd6a49efe8235f154e9b9ef878d +C = 57177eaeb246f0048c68a920e37d485840bd3e8ad3532532de074036d398759a9923138bb450b05d08bf526a7f72532ddff4189ac898a2074d96c6554810ed860430983204feb57840b05e4ce59ff9c3a54ed2d73501efb3d686a85a22f5cb23b3b4337ecbfc92b85604b2acea0099c52f2740ef7893c4fd26ac2aa38b5ea2de1bb1f13328d992c29826d97faa34b308eaa54d4fd08235c3da4e1a9ed8c9e8ac4bba61bc6877512a9c5fa9bd5fbf591fa4d89705326add09b37b74adc74abba53c0b3e6459f17bbbe633a5a8c8d61a2ec3d322eee75964a104f6077e551b12dede462bd2038d64567e666cae386c2ec2fbdd363a92b5396f6a4f308b8a83e02be0a1904a78594852897b0a2b601f9869f0f74bc50ae2c7038659ea41735f54d5f98de5d04bb2ab6ec5dc9c9d158acb9f56c79e978ddb9fc5951dd13f3dbf7e726983f8ecac288d53ac0c81d9f2060543509356c1feff785f78b1fa826dec57da33e9629f44a1c72830159512a4cd676f6cb9cfeb9550d890cafeb811ce14ff477bff2e718839859e587abfff6fcdfddbb76bc0f8a16631bfe67b32d98a2cb8aff0027f28e3d5cf8fb4f34218eea7edbaeab5e0369b9e2a2f04a7be97368f3366380a481e50c1d7f69686b1e1a2979c4af9589b570a6c8daab70fe26b561f34e848c9ec40a5e10268cc8ce741303d9bdec8f3d08d0c025c348deb32629b2f5a48e1c2088503fdb107 FAIL COUNT = 50 -K = 42c096c5486278eb6146d5f88ab08ef8 -C = fbd0001c1fa744d870da4fbea51df5e996f62de8e24de73b7c93c0cd4045e4716099d8f9321b6888d618a15ebf0bad473855c6dc3c2ef107de517ae4fc7cec2d4f542baaab43e6c09b1068851f4f4a43fbdd7082ba42a79690908684030b0c2358b855c0e61bb26bf54c6abc38df9231 -P = fc14a43f5276637c176bd2f9bd8d278bcf8fd021cb0418b49c69d53e01c7297c4484112d175d1d48a03dc8a1e6a0f905f1053cc19a4a0aefd34495599734db414c5ae56f36e90a3c8ce0891f485460fc6e079acce1844c66d5dcd6aa799a6592d4f91ee970 +K = 0c0b59bdda530861f0e25ea7151bf8fb +C = 522de4e944def124fe38b8b893ac8bd253f8803e6fbbf4c74c93adcbd8e805b15e1df6fa19f9d912d137d354faf38e65066afd913a27c4557c0b87f15926ced58277adc95a374088625693cafbbe614f63140dc8ccc5a0067c8cd4e539ebaa121514b8a201c84a841bb4981008c5d9f40be7fba7485add1779fe028c15f2845715eda28b0bb74904647194ec5475a19836cdc2d544164cdbd191f9e244b4ebe86096819f5de7964aa5b486dbbc9ac42d7fe0f1e23f6402444776984dd3a8044fe6b84bcb23cd8e8d2be4c0c94e8ef1458cfe9506822a9dfced4bcb5f5c4d822aab3dd19965dc9bff2a744684440778ff70d210deeea02f9f7244e824ff3a9a9de68c7ad0e7252dd2792099303a2c9ba15d6659318d33098507aa88bc33bfbd4dd58730d5fa2429e100eed21c0b81bf24bb736f2324f8c16ce48081851b1943f18616f063bc39907e9b31e0d4f5ab73ff7a68543becbb3647455c2d9d777ec8fc83a780b276ddc8183529e81d0bbe1098861e3c866ebe82378d9c505c7ce7382acfdd9f5ecf021e58594aaacb4f1885ff975f49b2551c20e5c44d8ac74401c46c4d081c80a628ff5174b846be6d52913e7aa7614f0229e767ef81b35af8e483f438fef30c811e2eb0eea406164f3fca83cfa76c69448e52e3f5b569ced65c56e0834e4fa4de534b22b84caf536b40a2389317f501a7868041f477e7c535ee4361384dde4a42f867ff +P = 208722730f3b9c3d02644102aa64917e0f41292751e734dbdfd24f4291d4acb711c5b305ef698b4270951611f2193c2d06c1e7937129524253bde258eb0dd962e06d6a14bf2a21543f21e100132d98311a487080bb584f15ba07bb59c05b905ef786a75807eb6e210c67c09d5d261506b0f7f0827f88b4a61d21e1faa4f455402f7043427804dff30061c342e4e9b8d409f16bbe71593b8a787a6e8400b91b4b8d13cac55f74f1865edfe238ac8aaba82d525499abe232d752213fed33f024a18f360fa8133d32dd52c86306901c8e9db71f1f4e0f6301714b9638e96e1470bacb54bb657fa8abf8fe4a41153a377b523cffa567487ad9532d585114f78ec1ebed88b17d36a6caa36b8f0bbe798c6678d35f7645f889bfc59558717816e442444ae9fe0c6c913664c430d2188b228b18b97ab4d78b4a0b8ff80305d7bfd7d61a2148cb64fb242be72922932bbd2f08b2ceda2096e99ecab7842e4392186040b51e3da9570893ff4f48c90a0775c2a4ca8a927242f2ba1483693209f15474ae10802155ae5abe1806b25b369ac176128a8a3c97d73285fe3649bd0e1de5fa42f4ee977d92e12277313c46a68d709f618375ea650440eb9c53e7b54e59770b29e00d80fb6a89adf505e9f7cabf356b66ae05bfb80fc05df931c7dd8e3748205bab72a45504e284dc3ec64c94de9dc081239c37026be2c1d834eb7b1749191a9caa COUNT = 51 -K = 2c2b00d292eb2e316791bb8d7ce79ba6 -C = 335a5c72efbb05fe6a058588ea58a59db2062dd8498b805412f8f0f63e4bfea751e2e5bec9025efdee662f357a201de4d28559dc2221299c0ba65a99155b97ee5ac8a6ebe3f8be98da52b200ccc7e2a9822af08ef3f0ee6b71aba5e5152a31b725bb41ae77e62bd52d61409d5ed0f6c9 -FAIL +K = 4d441ec693e4b4fba4e6501c3ca1cd0b +C = 8072a10ede73b094613e5a7e814e1fb18d858d76eae14a9b2f27bc8e0bc3c9ccce429207d1cff6fbd62c0864a59ab79707dece2044fbe7e15538e762dc5bb94aef5110b958cac19386ffb3dfc576682b611ecfdfce8db78a1eee6b76d0bfd70560a9e93154f13befc9394f2b2ce4583711378e2a983bc22ed42e79ac9b355ae306314d8734a0c0db7dc1b9f71bc0c203c6ef87b4577a1701fd01c2e5889c9560853aa8bce8c7749593c90b4a9504407a30f1085f9f0f6486d5057d7980120c84d2d0b744c0fb14a213b701c7b7fa78f88bd0e99b12357ac9c2b3029be4c90b9d6fd4945a016f768c93f2c221d5736948d3306674c21d0151f2432e27fd617504f2b4eceb4f2842ff856c0b1abb9d6f68309c3975c3987d489daa0f7ad2e34b9f49e6fec948dfe41d735d743f91b3e1a18ba7681b81e12345af55e8ccf7110a9cb718328fa50095a31f4f53cd3f20e69ccc795a3e5a67f3cd67213e5d63d6ed82dd1c108881511dfc68ccc34ab30b003ae9e60be0c3805f309b91b3367537c6db5e90917f52a41f20f2d84183226112ede4138e4075805c3e54a05a31abe3bd5c31cf305a63394cdb4ac51cfe3e07d5c2dc660b497c2fca472d80530e3a34b596f8c67639c0b195f6f4dac9b10f19a7fec3b6cbd1cb4fde8a7ee04e9a4351e9e3d014a08791b03453da3f459d45126ecde34abd88276856cb2f140d5cf3c1252a80b49ad4f5e34962 +P = 6963fe0e4c0ab7c65caf01b6a15d569112baa5b634da05986c60dfce764e669ff80e222e455e67f59f13c2f280cdfabd43ef8a88834be524485b785a4cb9558bc4dbd6a4459e899678e17a7ee3b4331943a5982a458b2c9b9ac07fe4f002ba8223f1f36b6513e71cb3aa4aad92b9f704f84e6adcad0af55e88de73b44c85199706aadb4e126910c71640799c418210e170bad99ff260a6e301f73ce23ab9c0d17b1f72e1af44b1d72b1597487e9ed4774300d53b2efb2e57201a314fbffe962af676069eb9a10564e68001bd542f38758477b6fe731edcaba8ab74c4660a8e60ed44c4e9ac7f9ceef6b267df08de9af8230d583ed468a06919f7cbfa3d54f85841775cbfeecbde910926f241bbc3583157456a0a7eb3b81e290e79b636b66c61df0726b51b20fbaf9d726f7f8a7fc857cb912351196a2f9391b2f4baccffcb46c7fadab7c32b125bb314581d44f74c999c78962244bbfea96f910a8bb70d05078999ff304c8d1c43710a8a24abfaf5e685f29d40735a32e701993e39aebc92e9adc95995f4ff7c7b675d262a1f2498444355d0c35dd9dcdf814b63fb1b50e7e7d52dd6a51f9d72188810cb71e54f2fbe40a20902795782b8fd7cf2e9a3f213fb0771d14b2d019303d1d2a53a7b22846b52a123e526b3c0264eea22b18b9186a4d9395d12e9b2c07b510abd1140bc46f34509f964f91553d0da10319fb2df88ad COUNT = 52 -K = 1085b9696ab255e4ac1c37528a3a4403 -C = 9c44f701d7b0e4ad7343e922a1b81f2ff35650a3fb7d9c5f0134be74845660b182f69456b12ec960cf65f4d4083401e54cd32501f476bebc053a541f15b5e95dd042cee8d390877ac9bb91a658482eb2dda814e70eab6d529e23fb8f8187a32d6b6fddb03c21d677433fdb3eefddc89b -P = 703996626e63bac1cfdf7169aa4f059c1f51eb6cd9ee90a2f937b7a563f0be1d7c94fed9505cadcf0668d34639d82fb8b57e75d223dd44ea198cb6653a0a15142966d8785ad275a654b795d6c7c996be5f906ca9faa3c3207190f65609cff7c204638bb580 +K = b4c56a17424a923502f672ec24729e50 +C = 47958817a1deaa1d8baa065265e6560af9eedfdebfc74586233b6ee27168b2d97946a0d9266b24f095a07711d894959f91b8fde3c7ccb279bba91d7602e8a570f0c13a6a287ae70cc9944108c857f2ee731ff79c95b6abf597d024aab660b6da060fab717fbe8cb9467bf4fb487742022079706c1e4224652ae704fb25c81ed6654cc4d6c2fd18b8e41103ac1d968cb208c9198ec48578bdfd0ca5b1e33ca575e11f9032b1065c65081eaac5e1f6304fa67a1d4c73329ecaae72d8e03dc6fa96616be781f562bc56292c9229c6a57c5970495cceb985548e6241e692470232e921fb3eb8d6d32bc2f3c8bccbc88c68f630ab64757933962e41132461910d128f387755000690724485d8057ac8d4ab88e3d8166eb19be9a4ac64f91feccdfb1216a92c5c42e48ab954099d719e9a20da687c0e711df5d7b6543c1c4e7f4270aa449185c0e32aa7f1e1f77286da7954409cb31fa3b0311827c489d25c8683a1b8b48eb35fe5bf2b7a2f5a8172cee106fa7ad7d0785b01baaa563c73a294f6c3cdf88b52fb4eeadeb6847146638c7aa64154024d14117919e1893c5fad5d5f4e03fd6d46e1f5400ce5457ec1cb1bab45db50f219b746caa406d9213d8b32c33a90cd65d620f17dc77209e70bb310b53cccf8bbaf21675ffea689e51377934fcc0b0a1b7dda6159376bbaf01f92e2e59fa8238b8dfe1f0356318c4e416e18c09d720739d764d17f9c25 +P = d702d8150fd3a1983e4e301093db8b6be761acc4164c35013abd2dd6fdcab468388259ab406fa7e9913841c8860affa8f33af2a66f2d19fd5ae222eff25bab6e1c3fcecbc95644afab08d6cc812f556a1660dbe566614ac9d0112a004e6181d2dbfa532ce48b1683071ba3b80ffa1df340a4aadcb97b388ed61608dbffc896bb25e34b2ee2bba502e536b8af086be5fcddd1e239328e2396036a5db4ea46e601d9997369d4fa2846d5574ab55823c34fe586025d6967c196dc66140d804558ceec7989548d140e1a3063238e3f65500e6de2c2ed3fc96351319bb3bb8183e964b7217bdbef1d63dd409f2efa7a08d5b2c1c83b587788bb069ae8577bfc2673fd1f16211f2cee95ab1d7ae8ede400426d4f603cac0e42c9f53cae8ef3a6efe7bf2f689fb68040da2cc34cdfd6a037c6b95dcd6012f6944d9b50d15b8413b921d94ecd51d31cd8cdc7e3d47978c4eb442f71b5323e3375b7b60aeaf129390d7082129f9967ea448cf943dc1460329868c00b30188617e1bef681de61d9f3376b827d4fa54693c8420def80902fdfb653b74092dbdafea517586d2fd0ee6eed68a4c244a6c6489050a9d9dc7925f2d02e0dcd327d1c8e8c88ad9642feff14d8530e45e7cd89abb1f8388bbe2185be123b1a5f9642c1e67af8c84150ce1df95db2a6d9d5ce6d3a08ce1f64b6ee55298111071d0d755ec118eac2b939c1296c807e18 COUNT = 53 -K = 908f91e4ef844eed259440cc0dce3cb9 -C = 7c62387a287c49d12861f9076972c1a31d5f77ad20ce706fc6fb9a92f9b8c24576bdb1f15d7722386e5a6916d9e15687fd279403a9b4d9fde0b512eed6e4b6d83bbb509adf52c9fbc77bb265acea5d72bd9ea4a3f58e4087fb88c42cba508a4f40c207cd694dd3a316dc0776b85f9d13 -P = 9dabd565701798b726f68eb54a29f357644fa5e919095294ffd97e472126304c5f51862c4aa8642b2257c3c31673cb183abd10a72b1d5e2b4a45e51eda9fa6bd5853fa5f3f15b262b0af8e403ae5e4935194adb1838b942e4d0dd2fe0c8181dd08f5d9d100 +K = f5d39b29b0c4e4b7c0a76bc405be1c6b +C = f04be7e39168b5a92a82637d812cadcbbcb09087da262cbc52a1551dd11e9aef3282fb827c9c9a51b102d7a751edeb3201f2c40e6b4c5380534861ccaf5e12c67295ce010be14de39235d8bebce481f266ef86deb7af30dfbdf3892767509bd0693e12fc25dab8794d218376af477431690b12e1000657fd9229cdb1f85df42a72e9801d1dfcba05fe32d2eac25817978292d6ef3789cd946403ea14a70120421fbc1135959d267149c760f87394243f589b499945c036eb76518318e539a060caeb1e1a049a367c04f5017e4e1329262f6ebce468ed4c9e8d2fb6be9e8fd2f2617e275b50742a2ab2f787116d30702a0a8a6778546a6dd3c9dd2728a889fe7b36b6510f82f4ead10064aa22d8e04c88b14a9f834cdbfed432af30e2810a443aa8b2d13042ebee6ac57cb92f99433cbc06559d3cecd212f2857244b096ad0e266a0b90628a3c296d91935c91eb16e086ead801cfeadd866eb5732d317db84551368ac5c69ca0acb92df3dba30c23e9d493961f1c65cea69896f27decf483d69ad946b469b58275702fd3f7b91eeac434d350a2af1e74a067d7620eb828c3c22f42d99e78f8af5de480c85a7ae9b71e59d22d9f71f357fa4d7d7d57d6d69907f1d300e67547b458027b9cae7af2af67514ea282fae22faa7f2e11fb16c2de7f8bef041c49cbbed3a45e2577eb218df76c3790fab7b19086c0965fab2345ae82810feb94cee44788cb +P = 5feff34afd7ce8673640b237f349f5546798c57cfbb80d4711cdc5ec49100586a1c046a93a89f9d4b145da2a0d6df1f1cc0683568ad7c5ceed2c12e852cd6c92b95310b2c1de987c38ea3f325f89d98891592ed2d6f9c89985c91a552ba7a12072448a17796fbe5374e76c773353f42fa95e6c02dd7b02f2ff44f4bc9ced83296d6eaceb871767bdaa3b6c12f79461ee8bd8b2b597bd16fd66afab77dbdb44a1a154d5d5032cabcb28b8b14a5a294ee815e8f5ee9725abaafa9b5c5f8fb8eec73353f4a77bba0d1bd664092fa8b4484c0226a37c76149c3eaadf3e438a0e4c8c201cb8b5ff69c9579ad9ac6971b93d522dc9d5db59b63ec77150be096262376e8044400166370f0853f39e5f9b381abd8bf22a9288464ee263360fed096bb0f16f30f53e3e17ebec6276f7651e66c313430e8ef6b7e3d7adfbe855b65346ebaec3a2896b845fcb09645e2a2d99d754999696be299ba85ab0bea339c0f0eed18fddf0079033b07b4e70f19c6b6719ab790fdaeb6d220c52beee416dbea7dae9706b9360f7a69b9dd596d010fd825bd58265fdc5348f1995d2d9182bc2d8daf02da8b62a58ba205792ba8989ca20b51073ec8f0492bfde8b96f85c0de1220dade9ce40a06237742ee1b4662774801e25c2f29939278e9f511f884cfa5ca707e1aa8e681decc074aa30f58e1252589caf8130ff3cc4346299b0675e4c6e714c283a COUNT = 54 -K = 144aeab35bf6336de52f293c717883ab -C = 997d37e69f8a30130f4436a6fc898a7d7518ed0130c28eb645567ab5151fa63558d615d930c7d1270b624be9b82f48795af09e31da8d329007dd22257e397b4b2009e4bc69ea574ba330136515f6d746ee448b49f40dd5de221a8daa22ccfb9fb2a77c30877462f0a1654443157e0540 -P = a3ed1231505d365233c0498a557b8d9cc45704c95d6c75d0d0c2026fa724bf44743c2817f180eadc2147bca52c26aa6b04f96b210e0030aff15705d5c3dcc7a1e2ec0127e1eefd764917f7ab96e037ebc5f82e22ee9d534c6a7128941f6aafcf1ed47d98c2 +K = 54138be637266fecebae800e4b34b5eb +C = 135183ecc867cec09d0aa1b3443c3820d7fdba3446ea4365fac2a86f9569dee375499434125439c917fa73daf54735907a81b66aeb392e5f893c5605b07b7904d5eb56dd60fd082572a6b904ee4ab3bab5052df877ee9926445b646e95769d560d6ded376a26660fac0e6d6bafbf127391f6e080525534ef2b6fd0c4276910e37a3c8c85ca6a3ee7e582da8c9f67c2f0bd5d3c3f240ad404019e37c414d9cf926e94902ef09edff4aec3721401f1cab199ccf52bba81e37dc0db9bc72c3ccdc2032984865673a57cddfccdc2035648751297d990b4daf3d37848643ea58be6a5c35e4ee4d45cb765674e93c0b27d814b5c1b6c4d33a4aeaa696978e6fc9e4ebb998b4067c1b997bab688734aeaa0a7b12fe003043b27f9e3080fa5b2a8f6d5b042044bd66a69d04d1fd489d4f2a7b2c0b7e29326358f0daa564f54c2e333d6bd4e676d4da1ab87fbc86a8e97237536521737bc7d1e547e284da6a79c3f0211f1c2a9c40e650a0c356e3acdcf8d7481597c6fb3055daed54547942f78bbe27d97ab3fd8c672e73335be8a9cffb8146827b01b0e18648d8ca4f3674072aa7c1c7d5bc3dac44b464883609a2d2486f3e493bda8d7e7a2a0e688efab237e3f6d42817e44a36097a155e6b4adcebf79a38c36d905d0dc9090e3bd0343c37c3e341565a31e331d8135bbc88e3f082ec0c506f9f7381ace6c9e902c4cfeefdf6a2576fdb2843517b72c3fe9 +FAIL COUNT = 55 -K = 8cebc9f8a82c47ca27efda6850f7d0e5 -C = 541768195f576e126525080f2b57a3e263f5966d6ac019189fe2bbc4ab7ad9c890966456bd06682f6fcfd80ad819cbd11d32eae304935d2199cebfb11b409d00c0e4ed8121a16bb93e088a5ea6624db68d477082706f8ce567f420e32fe74592754cb81378807b73c5cf3f4fcf793add -P = 4d7390e6bcb9288f4b4a2626f80295eeb1cdb74d70895ed5e19f30d4df5c1b6b0893bcac7acc947d4b7ceb3cb20f4756fba74461ac778bb8988ed2bd3a2bf7f64a5227816be7e2364098b04d3af6e3dea5cfdde0f9e0be0961f1e16ac5e0a60510f7a7529e +K = ed423ffc2b9d7f4b87285243012a5e28 +C = c1bcd5604069241d645701b55a1f9568990912664d812a44330944dc26c1ac88f8661999d392ae8906b31d4c3541a0180733b1018ad3f2ce334385fe62c781a6511adf7655e3a96b0c32316617ce0696be90c97f9c6a383e27e2d2ddaf3e295a074ec3bafb8cad8c12715ae56ff6cdaba361b4b53cf74d96b358b4e8cee80e29e52949ece9e1c2275dc84d54e05593df5a65a7e49dd474728c72f0ad14e9ff9293c0cd37cb402015a0b3248a89106fa6b3c7e13f8cd0aa9bc43bc04d7b50f19c63e933ce6ece9a3f1e7bd5e4f602009bb7b6e8ef4d6a264e66be843491bb6f9a332df66aaf297e0f37844ee48fbf1601d5a1e3be7543af0ddbc1c30ed20218cb7d84b343d47958d6fa579a4661433bf42cb09451ff34ff7bfcc1d5deca9706096ee782de666644249905e64690348643bcbe8721f044ed46bd62b3544eeb3b3799b9e29cb4a676349dd8834dd44ffb7f24606ab62e1febbd2054581dd5375401f6ff4e069b2a87063c0060beb6b327acaadb21408d7242705abc8a76778ffa0fa67f5ec0b6bfac0c874088293547ae35552878362668b26fb11eebe7303bf78f72b12dc9f07eda98b04f7e2518ab56adee1e2f4a2b074adee23c1fe965aa55ca1ca80b8044068c6e0142875cf2035bcd724ba6957bba58ab4b7bec30b54219ceae5cbbdfb9042a5e73700423e1e03d6dd8eda108e124761bbe5adaab97fe92d8d9b6c9206d417f1e +P = 09de8f388749f471bdfc7080162615445afa3a1a393218150a89242858147429c0e100e1dcff3d397ddd20ef2541299d171da51ab0812dea36e4429cf250bb935c585298951b39fa1027ab4e923ae36fa0df5dc7721b7c00616850cb839aa09c2e520e01523104c2c8dd841b192cdbc14a313793fad43450c95e27d0d34d6339fc41162bb37514cff597ed4884ea6d8e2dd1d72065e6a39ed8689a0fa2d3bdc8e1f9fc4a37351b99cb22f6d9e353f0001383d256cf07158331473b0f4e74fdbfadf649bf71158b6f58c4818a9022efaf8e415c5e3231538e1b6aa6654a1fec705df34e40cc9e1efdadec85289e6385b665f0928776a30c98f017cafc23835015276d6d6a80527818e5fccdf2a0f7541ed098b449bc485b07ba566dac514369835a1ca5eeb723de850844c25751c11597b24b0c5caae123ed36f37416ce7d399fd8d8cbbafe05ac123ee44c5de0eda6cf1517b570ff939e86271e1407b4a80264677d9081ba582550997a470b4c4a3a8cc0a0ac478eff7be238c967c2a3de081f90790d9f0351847d2b692f80c990de0a6b5439c81fd488188903b4d95208ea094dbad8ba747585aeb0456c497a03441cca089049e66480e81dad0d3293eaa8dbbff51c2ef4f9ac46658d3aef831c4344d193f1833c7bf948cbe5ffa6c48772f33cb92dcca39a3b1bdee7c35179fe8dc959b50c1ba53ed85a45ef7352d4979738 COUNT = 56 -K = 152840cce528de9b30e67ef969bb18c6 -C = cc291e64eba1b8fbd51bc472c299911e9300ab1c97056f0788a0b68031d5bcd53990c832e35603dbb1cae04be69acabb5a3b40ba19de21f68ccacab034055a0797caadf63c90c6b6699ada2ed986404fc436aced0706c9b15dd02b7046f8857960a70842d6c610367db05f6055adc0c7 -P = 61c80eab04d81e10dd390328d5b4c94b6cbf2d3f4cbbb5f4b62d91890f3bb1939e6ade871f385655d6b00a45fc23bfcb4e3332f4b1655788a4fea0929524455fca26ec319ea08e58c350647d3aeee9787a31490ad1fa9ea9d5e40182a0ce85d552dc499f02 +K = f3e961e459b4efdc6e5d958471d66286 +C = 49c70dbec9225f576a4d33075fe34b9f4e300570239be81a0a709ff9272b16b0cf2e98738a2faa8f4a4f7463a8c9038ca4763791d4c1b161b96bed1d48fc5065ca18f66691986479ca5a15d637284b5319b7bce166964a579b7099f9a9ae661e01de07ee39e3c2d9dda9dbf10cc77d2f5605f96bfb3899faa73bdffdb05b3160ee1af9196fadf3944a871088f3a9088ed367bc1884a0e41032a9300a98f913cee6476f9b993d6fb0d9303471f0917f5da57e87c9b3995e5f195840b60eb8fd9e96da1727e9c790db29569808490c45363c6b3edca8fe2deae9dda40829894c70490578b4006a00be5364c198f0b85efb6570e0745af51901dbc51f38a8eafedc3a7311e9b2d5b0d635e4015df4cae2e115ea2adc01ea1c90799e91d85dada33f7c9cc558e587541caf4b4150b549425f999af672e1e45ba767b568ee7a60f33bb63d1610d34ce093a0be9ec1d299dc6682a9396e4ab65d4b9a35d9fd565bad52b50b32e23efd925949cd7c833fd434d80bdf0ddb90cc8265e803754d1ac4d278b61346d7064482e78eaf075efdc72089d56f54f1bc7a5a18eb90f7e8b9aa74be570e6cd42b453e58c45135821e5b7bb94d73986ff0c4bb6c13cf1ac011469808409487494a8b44633a271df543ede97743f8d827290891a164e33f998b8b2f87cbbe8178682e5baf377d21c156d529b62fae183be4cd1058fa472a8a037636fa7874cf2661d8e309 +P = 1c3e7ab88e3b316b636d9859a076ce348a84a9d322ce87afcdb30bf9f2728fed0840edfdc152d5a47a4ffb58f1e2e36e5291cab9b24b61a9456d37df03087310191b45ca60caef983e12a7b72bc29d4823d93c9d134378355d27397838db2fef34dadeccd0543966d60fc54147eb5e0ff54cf9ccd4ecb4d05a5b7d6e079f5135b161d412fbaec5cbc6a8b8d104f6a0bcd97ddde74f416ca942ae21cefa714b5d1013ef743b23c39834fd609feae5bc4ce27d6cb96b64c0951989f81f9c65c191e606e1ab5f6795e10d790b79c16472ecde7fe616e02e43b98b359a127b99409368fbea4dfcf83eaa87f4b6611e02c5e7faea4136c93a9d0137c9b1823c9a57375384c009e2bf1571320798ad7c689cef5adcfb79f393b8399434274605eea1daa722db784141f5792001edf86d5ac10030a7c5ef8f9783de1d52cc9f3856517fb88e5332bb28d81c58e8d5065b7e92d15b28c3480111ff29cfaff5c36e9872fd505588cafb86bea293d25f8d45c55142bbd2eb875fd511d48ed4e3e3ef644e00d3ed6628ef3cd7bc0ab565b45b48f60c3b3fdb90df2ea7ac315b5344e2d065540f56b03bd095255c85d5f207fa48adca582608c1158b7e1d7954ba753277b59b268c16f2aa3f3844fb2bac9cf2d09e949af83722d72f1c51b14a7e490970a5fa76692a1d713499eb110e46e806739529749186ccbc24c2cc28c1a805cc543d1a COUNT = 57 -K = 6c2b91817b7b3f098f1cc7ea70df0370 -C = d53bf418d6d3644ffb0c3201922ef1d88693db2e5b30fe157b3566d48ea28d8d4565ff01cd2e892b194ca131fa5228e9c6bf0cdb6edf21c996e3202321d0de5961af35fbdf8d593b68bfbc141c67b66c798c25164ebb3cd07daf68de80b93d82bbb3164ee15c53eadbfc19ac4e1f53de -FAIL +K = 5c669a7204f576f37908210596b734b0 +C = 023173e2d149f9432bdb871f930868e9984d50cc30fd622c818659f49531ccc04abea4cefc65ddb647a0057e71d8080c659a0df7be3648be329c8aeaa5698990461e04f450ba109d0da467f72751d53213561ea1e3fb6a2b92b24751179e0d5a991132ce824bb762939f752a4ffbf4c729de63e6752d36cc2a87f33fd4eed78215fe98e6631a536b55fea8c0c84ca7b31087fabe204fe56587c39fbaf775f68927d8e7122fc3c173feb66ccd550875ceb26a774301fdfee5f2131a9cbdf2e84d9132e345c4a116490d95960822d0a02a38d269d797f4c0484757a84506a5f13efb433f9e5ed80052a74d9f11d00ce5414faf66f3ce4294fa7143fd25d0ceed07cec0eca365c0ed69313f3e139e79b071207c76dc1763ffceec1700988f04c26c5d0c8ad65175c59cd0965393f6b4677cf823f219f716f2c042cd790bbaa42253fc32d19d4966345f294ccfdae2e87fb3db370301ac6598cadea4105853b8fb9292ada3853c3af91fea184a8416c404018b9e952b90cabf5f8bf9caf4db42ec63f143e31a8c33b0a74cffb999299bca0bdf7153e4c5180f370bcb6ebee851c87e86f09329dc55425488cf0145e4e02140c2e51fffdb5a27c09b7ce0ccf7a779c13f8ce4e78283c91b8a5f4a3690e6455fd24459a3dc2fdcc54eea52ac09a8d5cbee01d97543e76ba407fee51b104820bfd2e65d0b35d0fbe6b9e284ff01f727757028125df0f2d216 +P = b68a616ebbae773b31f9b11dc3965980cc9293fca5a56494fd58cd7e4231a0560bd5f6f88873b30d2e22b9c750113769f889897c8a93f1d17734e480b339729ff39593fb12a7e7056182b2729969634d8aa98cc0a98d0a20ed5197265132a8ff62f3b331636cf0f16b892c2eed33e672f50f9b3c777c6be4f8f811654136ab21067758b9b8441f6fdfd8ea5438269d369887fbbd081d10676a20a8cd7f44dc887a63604a056b4c277349c39652b529ed059bb1ae2273f9a5cd3bba1f79f807e5ad4239b53140a65f467fc8c62c80b3bd8aeb7e6c9310b8f6015896554f209fa02b09c46cb487bc463ddd21f7ce7af1b04b05f5bc59719fb4188a8bb9e4660f3e85bac2a284be8fba3042e440684e84bcc174342c8a363f8cba459a3ddb6b0fea45bc64061db8e4d27a335e170632bed28ff45b2ae021157ef99c191e1fea4f4b5efdc0ec1de55a95716cb1e4a989b4b0cd51cbcda4f56cd91caaaae8e73666c9b8662df71c8612283c771c9da382c7d5a8435fabc758df6f78ed257e777b95c951a098823b3f6d81bdc433556cfb4aaea8dc95dced8a66290fa36bb8f58e078d70782a476268af303b7a960b53f5006b16fcdb04863fe949b6f8ccf73b95933789a0527fe61205a80823c473a00a07572cac88fbd6ca5ccc58859259b0edafcdd7f6346decef4b53863e29accc970b4046c5801f5a52d0b305c585f4c66f5034 COUNT = 58 -K = ffbd2a31953ea02b4b84fe20b315693b -C = 19dc0bd5fd6bc306bf541a5398c5dbcb3613e3f06114d32df389453be7e48989b87d8685617e9a3fdf7a9a1eb3afed5442356d0c3afd3275e390dffd62b1bc48384417dc429d498e01b479fe13966e10d56ebe326b119d4f062281b4a2929a93445563db5510a8aecefea10427bc10e1 -P = 0791e2da10ad60185806cca120f84120d029397a1956f4f5384180565de1325c98c55ac136e68fb2859b185beb0d87e0487e02d4108f9392540ade9db77c5d9d0e848df19f8f896ca3ee2b487e1373758d374fbded6a2886ccaef342f719a9716f2b37dfca +K = 3841dc31178dd3ba16f9104f6e676a7d +C = 987471d61d6c105a05f80914eda3f076c753e5d6bae54314a844e7735af5c80cf4405d10a79c912f835b987109fe6303cdfc8e11877ec7f9af982779150b0a147e6f11bf40d3aa127139e866a17c58f9ffa2203b1c7c7b92c91adfda807aaac23911b0d961212d945db394faede605707f03932ed768cf3c4bad25f014fe6e9a4cb59cd074d7e39402ae25e5c73ab3a429cb59d22c2d7767e51970602deefc93001a10320eecee3280dcae02ed1443728708336dc62408f9b932224b2ff62083888a83cb6e69e86a2d2f787c2ba26be95fb85283deeed3768f0c826b9256703969e18ea85a6ab61a9f6cc04eac7a6c4a4b87673846a1f008f2d9308932f8c2acc2ed80a9f3f8f6be44d0ab22a6f6525db66ce8edb9e46b5a4b3e17c8436f16926fe66bf361824474932551d560d7ae51d6862e7a0bdbdd6f39240014584c70398366ce8012910e8d6f3e812e4acd3b5a6fbf20292f51c78e149c75f70205dc8b0fd9259bc73becd66d120c2c71c9cee43e1ad7913cdadb40fcee82842dba0e0bbe2b80d237e7103a8717d3460434bb32430188d8f1b9b296a17586810692b1c53006958264dda29851060363a7664dab7fdc38fb1cce13113364dad2ffe91e080bf4c1e26c96652b54e14e6dcf998e049a829c191561239043193a4dcb34bf8ebb37a242d172e0671255ecd2295f63260082e3c31ff572c62eb9d20f68cd049e4aca33fc234f083f +P = b01313ee840742023a99155713170403197ab2ad3e797f9da8e8deedbd61029d7c40215b8a4490ae4e61ff2506e7906cecc45623aee2c6823438f261327e96ca7e21b9f1c128c21714f0a3fb014844769aa9ab45063d1b550fb21fce61575a2376c0a3d86a8ecc839c10ef27e5038a486db85d01dd7522a31d35828b9b68b21ea82814fc4f1f6054eaf4a8455b5f5682fd2eb6dffc553b209168cbc01dda8a318319e4000e3a1167bd8b16eb1c7a1bb7cac5d5a49d84e914246840d9ea90661233e3cee1a9b5cdd04d113b3bf0473266d513a3e13f68452e5ba1840e63d2158f1197f18468512032eabad46a70355db1b241ce1132fcb374f55c408923266e6419b4faae171cabe1c4fdb5d30fb8d8c1cf60ab1840d492e649be4faef3a3563d5d132095091fc88d1b42084ee2bcab7de1f155fe8c47745825c55c57b3b7c7f4d13acb82db8c555d89bacc5c896f4c5c8be4f9788c7fda88cf8ce48281dd26760b8b98cb0febe0afd2103a71f257de99e310b78f210cedbc51eef8154ac6d27b7e7280c320a2e871087d1e642cf0b50d6eb7252e7124e4e86763ee567d7682e14120869417eec6a0746bb4e0baf8e5a1762b165f790e024076630f8d8cb8f8e339b9c284390a0402bac00f848028d0a6ae2960692ef1fe80fbf82215708931fe9b47e758c7cec8e96ac8d261f9f47cc16015253ecb90b9c012071cf3ac89b351 COUNT = 59 -K = be7a68b7f1870ed993089fba08d920bf -C = 1432aad7b15ce44333d277b6627783b809200bce34552e447b1407d82ac393a4384f4819942708a2a9e43f716fc867567308fe2bd14e0706346c7b3fe1d7b4d02a93c0012cc1030254bd385fbb9c2ae340ef460c6519bcb81ce2fe8d5fe8a2569dd616257435e6d539e037c7108bdd3f -P = 2c7fd2625021289fc496b62cc2fdbeaca59791d5ca9a23725cbee0a527d71fd8c278d3b7f22a406140831aed3a8bac2522e2a584bcb583fdb43b2746f15d76f7f087e23546a0d475224d0ee25746614928698edb1f93483b8f07b4ba38834ca8542d8c04cb +K = 345ea0138f4c3b78eb5a5fa3874e7f15 +C = 2513cbb7c8f34d97ddd6fb374c0f55522f15f9edbd8360a671f8e83f533b5433f17da29cf06eb0496cca0ac44f9ec998addc6baffc31329119e0f744094b7851a3c5d4b0e2d652e58f508330ef780f1e255a00180261f9972c2eeca44a49ffbf3f1e461fd9f42dfb32db357d5c12474f6f0b858bb51a333f3b71fd0fab3632bc35aa05e0820bfcf24d03d64d8bc2ea51bf7fa8188539237096f90b1abeac35d071b532ff3ca227afbd8c623218406afaf35261851912096f34b257581868abf84d146c0ad46ef659743990bbc872e18d375366c5ad5029d2fd87fa88f409b04affb7a174fd390d3014bf318904bc1446594d43fc1e5279db1d41596ee0085658a8112a24c51e3b2f9c6a474e788ef1ec4571ef08c029083f8664352ab8e794c73e0ad739782d9cdb763c5a059e5bbeb7d34d57ee85b60cb4f0665fc25c0f56689867852de7838396fff106ca20460ad0b389e623a53f01329acf00a52e6540e9587dc377173e1868cd1b23c734704198d16bac7fe250e9cdba277d1873034daefe7b16dcfdeb9e637aa3bfc3419e1d69baf33bf30636e089655fc6abe5d708efdcf78841f55956c9f4d3a807b0997e27de974f0b7557fc4dbfa28a5d127bc2902324f07c5378fc66171fae93dfc14de2c9b00e9b7867fd9b1664909024638d98a469772418b70c829d385c98fe3664ae6307970388f9f6a04ca4062122edf105d4c4054068bb3204 +FAIL COUNT = 60 -K = 1327fcc98a775ff439b78692afdb0fc8 -C = 3f1c10cc14a7b9d7c8dc8ac759a4b5272dcc12eb25443f827a46d3f03bb97d7527469e4788bb12ad58c6de0c80f38e556e50e784d444b570053ec249995606369713242d0a7ab252839fa413f99cc89719ebe305cbfcb1d085fbe44b2d1a2c27837bb53eb50594d7d6a49c6103218e75 -FAIL +K = 1393fdfcca4a560ee5c1ad7bcc04cc42 +C = d889f6cc185403151575372f79f4db6a3cb5f17a1a6776535074c1619c34d824c137671b1b47d4cd1da81e7f7f9ea5e44a14ac6986397ff91414dd83eefdcbcb7494204b9417f6f221fc2274637286e45eef917ebed70b84ce23141e33b75dfe053273019adf98e4c04ab740cd9ed8a377c4f248b828c70015fe1655aa2e9b60a494bfdae42fdb219dd31cdddde05dfb1389443f618e6319cbdadb9f8c26fbca91892aab3c31f39b5f2a9da498fc54eec66d446905aee16c19e4a0df98790bd08af1f1d0f9d7bb1f6ec379c06d1603fb7f300c7c1f0990067f6a890a84872c6deee39b8222906c68bc76ff75e167ba9677e5e282255e0ff7281bc8c9267c486dc2e5f561309b4829e5c40b243b22717b4ee276313489729c34188eabfc7a19853ba76f38b97c04efcdcba65fe0648f132becbe5b133436e55e1e97d986877188cf8470bb3259195a4a8e80c0cf067f14c809e57826627ae8c74d9094559afca1651367b6a9f1bd8d4735cf958e60d37409d511d283398ca79fd2c0721616d76540931683b07f1952a61d5d1a24ba8853c2c430482005a71d4708177140c8ef9bd8bd18418491634bbe18ba9365f4f97c61ed574513d75af5b55b83d9210be604ddcfa449166327ddb2464a423eab3c1b7ad64ad9beca9067b199172ab60de8138e0104361807fe633a9e3f5a080b18f827a7880a8533c8a09abcd59e6c45b3b9ccbd110653f6c2ed +P = 61a07a4ad6cd17132de4544fc2d24de09ad09af0ae01e19f99e02c742ae66b56bfd6c47bbedc3ae68e7b8925c014797afd18c7fe21a37e259535657d7d423cef0689accd1219275a7807168dfb6fb568acd43136eb2dcc765c69a254673ba66ca402d15fb646269974f5cba8f250ae741a2534c2a78e0f3f4eb4bddd6a08e8ce87ea706a3d1b2e3e5ed7132b0c1b510ede3db056763225b37f6dba1c8a365988dd7d7df1e788caad56dd0b4efa4162bffb06d8fffe068b68beb741b08e22d5031ccf8e8134287354f5b13758905b82721b3ea56b9181e98596846ef4901fb99d0ec9e091e09157f64c50bc538f94ff4384a56b79c09c6adb4fe901ecb07d5ae0eecd2161c40aa4a25166db00cec394335f2ca3406c70189a723f14c3dd2adc4e72b62df105e67ea19bc803a94a0c3f92d6cc186825aa32aebee1628acc6633706282d9da294e32c51d5e013b531051d32b07081e5ab3aba0565664b085f1dc388f84fc56b182c06a63dd303f9b63564cff19b5580b84b4fdff3a112ddddd7faf56f44a3afb706d53a265e938208886e36fd6f4cf775f9dd055c348c2ab71afd493f082929200c20191c1b6562f2d596c786d1bc3ab96647a3c729df403a39d6e6039f8000ae46414512151313dd7398d5a8534b0b022a63b3c4dc6d3533aa2eefdaa68255777d75752019bebd0fc0cdff15f024ab7636a9fb24badd88484aed1 COUNT = 61 -K = beaa18a2411ccd54452a20a1a574d120 -C = 7a64d6fad7921fda7b80aa31efdbb792dbf5628a0846639f44eb025835f006816ecef49d022da56f9620dfdc75acfcb72f2d306069e6d16615ab4589046944c9db8aad5301cba35b5cc9b527f3917ef44f891d4698913c3c9a9547d55b8bb2976a7b9b66ea3a9b70c0c0315f75193084 -P = f404767202290bed7df7836fc5f7d59634db41eab77cf7ce0826e184e23958c58024e1a00a642e1878a2e7a663150125312cbaffc456e0ffc100d3e9e203ee18e9a362872d49ad77de6c29a32075edf40cac135cd48892ba4ab2b034f29f4f82c59eb10384 +K = a61fcc0aaf921724c78f50d197230714 +C = 33d047124341fc41a3815ef274541544f1485f09fd34e6b43b42e1344612f7ccee8a3c096527aa01fd022b5b9d9661ac36593968f73d083412f58e21a456c699c2af35f6e647a3c9b505dd45f4835c4d377fd8e104f1d1f6f1b83b8b7d1400a5a396c8a30fab224fc39b5adb55c52385f75238f0b7e98146d0874350e751f5ca19fda17b09f8902ffd4b29bbed989f4c246a2dacd0a01f5443581f2f7caf340a17d0635a7201c365e1439b97b0bc3c5d90a7e497f1c6905825e265dc301e77553ba48504bea54424e4248994d70138cc662ec95c9293025025f22031a4b71e2ef728fa6071620e5d41c73cf543704995c5d74cedcb3acc71f135b4f533b6e6768f485dfeba52fc17c5a0a34b1cc2abc6962fcc725e59d51e71eb6d30c3f0351150cae98e99550e69883a8f70b84c2f9d6c4c8d73c1c203a0355c1727b75fbc02f4f2ce6737168ca8304c81af91bb68d60472bd7ec43cfd4a760bd1d7137c9cf7eb5512f8f5a9e43a0d39534c1724a9c9b9e355e9bb6ce7555df1afcf00f1b55c422fff58c2921571397ce6d1b6a353dc88b802af23aa51ce47945add23c7aae699d2e3d5b77e807f4ddd783549c8a76e169d65c416f83d6031f7f3d89b15079ee9e1bc73bb8c11ba7a0efaf8eb1cc349cb6b993790ca35b48d8feec7a995117b6c082f2d069e3c56b1f8f8475a6ca32be376e75b87027a2af94b5aae309c075eedb13faa93003a8a +P = 7a03c94fab5c9866a00de4460797d4a579477637300566035108f51161f5bb911e47946e966af347df13344c93c31b2fd5c104f096091a61cecc9a56a5c9599a3b5d0f6389de06fe06ec2fba52bda16535d0b7b07a4aa4f6137cf8351166bae32e70cf32718b43230586ae4fee1a5cc0cabd235b098e975b19bfb14949acd5a4df2c4462254d2ee5e7627468e8642e25b5d1f131dc5125a743ff164d9f762e26f0d360d1e41a9ba09664d4070e55d990225e25e5b652220d6e891766350b85c5060837f75ef33f5e120d528b8c43668724d9b4ac349422d35b2cae1e63007e376d540445cfe7f6e05d4cf73484c945a14c438e47d391cc6ff4bb6c953c94d1692f4e5a36361591a97406d0e3bf81153448c059c6e33e836c63d5f31668aef0c24cb9a168e87d55a950224ce86d6544e94b2d4d2809cde30937118d8a8382a402d30f9c0e1182a5e0bf81f17986d2673954b41932e926180ff336e64412131da6af6c7f69558806ae739c20dbef812750349226af8a6460b39471277b35b7d24dfd96eca98ebd3cbe2cc3f7b44a17c827ba945909624ace05ed92f557281fdc210c9e9c26b220abe07e65dabd73733730f2fded480d4b52c8a332e3ea763fec2007e1e4fe6ee8991b2d9901a0e119108bee98f1eddb3c1d576013dd310e35d256dcd074910f949e6478ff9e92c49d85f9e9b1b46e31183eafbdbfadcc23053360 COUNT = 62 -K = f4c315d9dc9776eaaf0008f7b14cdc30 -C = 24137224019b567121f3638c2a85c6c8dd100a17a2c2e5e9e8fbf659cebe5b0ffedf8ba880f455e2c7cda45346f5e8346d7dc4623a0b376b90807053ad159d992ef24f02a2a8aebefaf43e66d60256c83bd0d825001d378b90e917b97445931c502746608e8b9dfdc9e49b8e93dfd8bb -P = 7d5a86ee36946051e0a503b76c126d582938eff0e0d2bd7a0c44242419225a9913ddc5fc03672e947b54cc73c148602fe539fcbed856c079703a479e6f7e7eedc5e49f766f1857b5db006c93dc3dc56c7d0e404fb267cd38acab69320aaeb8e09f26136d77 +K = 7e3e5075e79a4b8039fe8f9b7a98e255 +C = 832c34f3b052c35bcd5519dccda7e5daf5d17e1b289ee7c65d5659e14c98b52ac0cade33ededeaa3e2b3b93e9ff1cbbb8d2f6a290d7569f259ea3ee15223db2546a0b043fd1d9da25daf62cee2e1c80173debf0392c5302b42b5f75d68bbb5e0ff4e029eb6d89b618fb66dd422115798595242da4192eb7a2d0b352e1d7452ab3d54c45cad823f818a89e20a30289aa7299a3190f186188611e5b2633ae380baa7a68995eff6771a49c80103a987680db1830a2bdee4d0d1e614937b4b7f6a14cc1df94179f5e3aad869685612439927e572d97e3871a9eaa02addae004f7391f6fd7e719d77df1d6914ecd539eb303bf2dbb163ed3bdc56ca524dc5266243f0fa3babddc1d57eb3a245389678361c6a3f63133f5aa886748739ab0bc9143285b047df3c9f792c0c4148e1fc2b2fca8a26d05eabe8f3d4299730c13b9a392864c345b626c4196d49f6d7fe6d6a8b4517cc9fee80366397564dda31a88b1b11a31a637ffb07f935d2b5d4fb3698e1e913537ae8ce06034a74a51768366a4028bbe837a2d0764c6210ae95b3abd50e1898679899e961777cb13af9c6d55c46f7435a9a2bd96e4ebac42254063af9082e567011f17a369a4039c977ae9852f6fa159070724e9d24ce37ef3e39170ff7ecdf1902838a63d52c7ba757d13637cfdf09a6af89cc538bde6afd4d525977f874099dae9f7e49efb7b1c0c02f291552fab493eddcaaf3ea8f42 +FAIL COUNT = 63 -K = 5f148ff9b2f45dbd9015c923bd570431 -C = 7dff830cbff34f86569a97d576c5fac3f6ef84e2880d2566df90603ac497d5fcb1c9f4e537e69a5b388ad48e9c7bdf9bf0bb3ff4f36f32a408eb118c9cdc8397c3208928c2ae72de102481670a9bf89846a27d1eca71a15f455f6801923485d8d0590293ec7cfd7f7dcbc5ffdabb8d6e -P = 72c674e11692bd1dbc2456871963d4e3c5b97fd0db4a0c0b6e98d3e23bdbab5221ba84961b83254737d1d4361a4539ea118045c8f4ce731a63d4355b6ed377e984a3b85f55da0a879f98fe17ed53df09f3e3b87db6d2e998fd69e88e88b144e8a0c07680fb +K = ed0fd7715460704bdad9e8dd54f7d23b +C = 0cac11e37b7ad6607e92636338a4595d20de2a0fc8c03f33ecbc2739cd0f54711a98dc5cf0b050f46602249f6e0ca1755c763e104d234796975e7b8756128dfcc0a4250aa15711ebd5fa760738079b27f198e504fdb077a7ab152ab5cf3c4901143d658129406cde448c56f96b55eb964f355b031d92fb95f255be5474c7951c7d478b7d1af2fd627e7b543d913c3efbdbba20ff3ebeea6c501371320e4d3694ac70e8956ffc8f4a5a8a28cce30b69e8bfd5a66a3e4c1d69dfca196e2fb09a9b79c97202ae2064bc8f1a3e75623035161b4c8bedfcdcbf90b1881428207d9b72d6c9c53609714098f9128dbfb9609e2bda91b22bc2152c3739e6de751a2a3830defafb7ae71886182e4ef35e6b90dc4a782cfeeabc88f098f0261e3e17b7be68ff46643678865e24830932662f570cf49298a8f71fe4a0aa629bce98875502f6d5929e1f235b1280809468843c4182f98418af3935e14909d32b1a7009e4091ce94e8ccba0f4a2a61c9b8f8de6840ee3d6f05e8ee365f6958d904333a27eb3a16290d774cd46b5f0b822e4dee87b892f70c83190277378c1ce9a2590501bc30ebc706c312ac9d08648e1d03d73d7015f3b32d64c98b3312f4f8bcb79f1cb6c05c0ce6c0c75b24a98768fc57074736b78020492dca57c3c41f30dfdd0339209c929530e271b8bb03e0d560d23d31c7518c9a84e5111182b8007e9bcc0558f67013ec8b2d9bbaf799d +P = 3aa724ee97d3592da9725919e51762dbd7233641ded379cbbcfbb7563dae8d1509e8f59fcef705508353e9532285ed2ed2ca412c71c8f31bfd81206bc9520be300530825bcfffa81eecbc9b1cb8321c9b49da659432f9534c9b54e4d68722c7ffc2f4e7bf1a1751f202977a73531eddd4bad893189a9fa7a2d9b819b7419aa3f253c04814bba01a800e870a44807a636170ccd2aa15da00cab715e0971a2ed26f6325b71b1ca0099e5c91cddb58a5ade8463cfb2ccb98e87bf36e0a16386035b7f530980d0ea67ec98cffe61e2c6287a3c8c1f3ca1b79cee795e82fd78409724840e782ce83a6ff0a4094c91de11be93f694e018499e76c02bb6d83b848b6e99dc95467780e12681cde4f24b390c72b1d217d9eb6c43c43518e7fed4854a5b4e6e5c571ebc2729f70b2d5aca31ad2117a55b825d70bce7d66264afea7375a4b2d5346ac0a203dc8afcc56f3053cc3468ab6a92be02ba8a3a8dc3b665dd1de37e501f27bdfb5a38c7a00503e5e802021471b1d2ea42d2cfed0c1c04d07a8031c9badeb27534a35f2a6fc80b31e1d2836e6a620b48dabb666dcd59503e8dbacc1b1a7d053e5d2265a7caa6843e0009883849f2346aa2ff150f69114f94006bca421a3d86ed48078da75fd492b55fe4ffe7f5b1f6a71a34df8554c26fbc52264344dc3c75f0b41625f89bde867d9916023d1ed06155dcb60710a780ff3fc88c1ff3 COUNT = 64 -K = becc297b6476a4fcf1d9017c9ceca4ee -C = 9ae6f42a9a9c77c2a45bee5cc1f12671814f321a7303a0e66800858a999e76e65150ae9f62a44d2c79c278e0ce05ac285d234237de742e12d50b694f1132cc62a87287aa74b73e0c7b042af986d1fe6ac8d940b11a78d2da181534c7e43652995f43de6143f414d0bd8b63c04285d741 -P = cc7a729d73ddc66df40e6855dc9970fff0f693c0533fab1e990f8f57139328842aff695de7fe3885b0aec5d1b896ff9f9e236e8d584c89caf5afe1a1a531533701dae94b6600d42a5af2292df6cea32f7a3651ede11b4a5ad680f82b749f092b72d9236e8e +K = ba265b3618ceaa0f164b6d9b6770ef18 +C = 43ccf8b27d6f36fe44f0246c35b94c07afbe13860347ea83b60b8033019f827aec6c8f7e28898c9c7f8e47626855163200569f4d72e847db250f5e8d6e15836e6015d6518b16c4e22d4890bae3cc437846d35cb7db5a0a9cc358df3d6d9d85787efc897ec2caed5125aef746f58e77eab63dd85729d4d75db01876966ccdcf794ef046419d8403e9c237515c37c1d6c5a28fb08f5f5544807df62df2181cbe80bf8bc0daefe0e6dd427e21951a15d4a411e79ee04d4ad8e933806269717c9e4fee6b53bbe157aa1a09178aa09a513e2a0d244f2c4db43e1ec447cc2b20fb090907bc7e5d9d316e84b8356d813c55f3b101bd7ef6304f6216508753166db49dd564172a7dc753ebde550ad9a220b9f6a251bfa8607ccdfc14044e6eaaa86089f4f9b6f19128b1df4e532e964728fdaf97cfb40016e12b9271ff7f608c14093734d8638674379307df464d8ba700bded78d090d3ae31b2e720915bf4a41f59a1a8d4ff340cc45fd5f2fb04ff6d3b111c1f72bb329d4fcc41e92d9025210ac6bcfed2d637fb26195ace03aed0dd06c3627a77a3f9e31d53d27c48baf5268692ca5e19ef9d3e92d9f667cc2fc7c904c05f7e397df479b6e554e080419f56c652e79a2eff50851e65111627beea06a5c1c800469e6a307b45e11c82fefa178da1713de918b67715c96fe2d4aec6fd711f11118bb133965023bdd66a352d836143f69c75657c6b8dda4f85 +P = 837a12c5beea8af7258cac1af1b2a114f5f0a9fac52110c5abe3a4462703b2e3b190dc1bbf151a99c29876fd4998eafc2fafb8b689459f7b86713d52e16bf180aa216367e222d9f1fd5da18c56fd08b536a60dc8c6e66eb567df70b72ea0f5704579f6c4d4053440a3447d77c1702d540b68d5af9a41d26b95b53418e5c9d2c681b7ea34c2cf6089d7f9a0d7496b1ab86bec86324610f148cdc34b5c1ac94d59c0a53aa012380414bb8c710700015973b007162077de9c4aa0a3a36798f14b63cd9705a1fbdbe24d2bb5c7591f2dcfe398e6b7e5205f7e747a93e0f2f4264c73a6aee0a619974be39519650e4f4a3a4e71f2dd292a442348bfa6357c23c989499d7f339b6e2f3a214f10416928ebc6acd6527068a5ceb9cb89cc74bab973c84e4f05b0a6668b38b7d7746366e9b25a8fc21de76021e3651ad3c76e886612784908d5008a3d95b89eb2c956e7380a1ad60c45f3b43cd31c5a63c3ba31d5f76bc5d11a220c5e6d727f2fbd96e2902986c6e883eef6a5e9d35e8d4e2e241b428ccea1a0cd4240c2701a47246b24b39427d4e346cb4582a4b73348d1615c52c0d448184d497d5d954dda49181880707966ce9871ce1e28605cd4fbb79293e1f143f779b31822a5d7cc93bdada304bc1546e0902b0576c9b61d0a9f12a6ef95c1aedd98c3eefa3c6fcb35851ae861004143d1714eeeba73f1872d3d8334e2913cff15 COUNT = 65 -K = 2147396c7c8fc27922c08a27891da2fd -C = b54d1ba03627be2147c9038eb9ce4e3eaae744357ab9c92d0cdc109daa56061ca83dd4fd4fc319e073df29f0b5b57dd9f6cb5f773a986f72232594425821a6381ca15e5881b46a003cff267cad3f8fd2a8521d032f78da5190b2d2146ba917d174d153d2471f9f8b11e5bbc36a8fc7e6 -P = 0a52d186d950644fd3b179178a3fde92295a8539fc200274ccbb2bb1025d19db74ffc1692cb7df5238f9e82fcb2e4607040c36a59f1719bc0d7e0faa3cf8bc211f64626e435d32044523de255a6756806d180583806cdbb204f4ac7a0ab5ae9861a916986c +K = 7fe6e6d18ab36483f7a0fa0dc5d194a7 +C = e25a1e46e160292bf2b061a79431f46cab0f0cc11bc26fe38bd05b47ab5fd1ba1a371d9419579707ca7abef037dbe9e0dbacc00907f5157f0d58c3531f108e0e022610edaeeb6c6491dd0c4ec36413a9f2cf15252cb685e0f3bc56aafe48fac644e6bac72dab74c360cd54bb0d8deac74cafd89de72c093064248f1fbc943ec0458727914586e677bfa6525388b87d197be05ac31db2ea9bca5b3cdd29dd0c7fc2398692758810c7a5011eaccd83b34697b924953de165122e6c5f1d53ccbf1f2cb81ce5b4a22fb3c1ab91f72cb68dcb8e7687ee40bf15ef6b2c4cc5f8027db98cf6ca4b8d187abccacb707b7d99fae6b27f2d42eceb54e18792aa5b2f2943370b2da046d0ca21fe7ce0361919dec2aee181b571851d07e26da4e55cbea9269c9471baca753cf94bd86cd3da6ef57518ca8dac7ba4816e9edc3f2e6733c62f30603c95140752ba601554811550f3e75f9a23966f873e25aa6493efef5a9c5efd5a231663c67908b4b4d035031b76e67de1d3dcd76717f4b636de9e1489bd68b5040fdc94c3e22e0f518b55104513dcd7a4c6c3a2c4c8bb949e5a5e3e36dd359d0684a50a27732bf902752c47c335f755c849c45e2d2d4c7e5a94813d66e86246113b4129abc5aacc77beddbc46a61f0f76b950b746618c64010b9f40a6bdc9750099c43b2436d356efd9f4df8abf63b15a90ef650aa734546320d2e94f5a9ae8a920fe323e2e7374 +P = 6c1ee68b700058d5cccf43a79fdab682d7821726a0f4856aa5746a1b83c99617f04a94744a41cb448a0d761d9a817d86757b132f0d6f4cc36a5dd8efad2f66d3279ef283370a31dde89b6cb6915aeaa554926105d5cf418bf8a5fe9d3b4d2b8985cbfc733c4dd622b1e30f0979649ea7e0f3ff2449e3f5619d66e205ba6473a37c98ae3c0f6c5931f4fc1f69a42b4c748206aaab782d1463716f3c5dc941602c915b866c6154d8b7871d4037bb343c719966b0ceccfdd2eca3d35a8109c68ad6c2525526826d9f9384876293cf088f6554bb7571b39507aa50fc8fb5b89d340ea38fd77536c3b4ca5a179215c6ce7124b4fc618f9ef5ad1d4f04b44084d5a6525b3ad3637f23e9f8be170977aeef91e47fd65268441f9ff7ac281f353e8eac4132587ffac1f6b15d8ed5ec866037dbb8285ae24668dfa706e4a065155ea8af565461f8d79c5170425df1d954c6d80c7d1aa2a64e3b13cebc1727ebd4d81e8a7860cebd83aed15e2a67e3b6bf68ec19e30551ff3dcf2c0e11d51bf278e2c98e5d560b8736ebb449df4d580826408a761e5fbaa301af25add7b113be9319243058a2e9cd0b58e6598fc3cdef6429bc3ac565444df1fc27f56db509d68e19c43176e3603f9d902c2633466213345a146608f91b5c9ff976d29ffe1efaa573facb6050b089a3ab62215753112b12a14453f678de9525c58ea58ac81e6029ec97ea2e COUNT = 66 -K = a036cce0fa829d4724eacca62f242d90 -C = a7a67b6b9b35b794f1521e69b60a35bcbf3975b122b1de544a6791dd4f8a4b87a70e63f165d5600deef076e102fdbda3ee73d0d4bca6b539f97c1f21c5b03a99150daf87b1595369818a248b8310f061158b1001c21f8c4329356820c65f2ad7150e05403206c80f756a4c5859a9034c -P = 3a95055f67792f219b47184e848b0b466b9a90d01c4b5a164638e489b67d849d1ca18f19ef17c1eb4689b8cf67bf7fe9094bd109945a1bf52dbc8eb48ddba5fbc4a45454e8a8347076eea46fad8bfe48f35087e84f03a528615441c5d3267719e7fcef1513 +K = fcf392b202f4fcc50d63a8b16ec72aab +C = e5c9b932c8ef14c1ba982807f7a32b29b148a552ef7e60f52732b07f583c28972115e776a38b84faa753f4a03c868dadf53db7a3224fd526a99234bd40e38e912e5b28d7e82da73d7b44168ebde0e1eb5118ac7e491b7c4153a3441cbf64826cc8267f75e267b827ed1b7c8d9d965bf84278e07ed0c9d3e9617ddb07a40a8525e180581e199813cbbe1757ee2f72046ce5db78a68d9e76b4746b7f54ac2df2f32dd14633c7a7d4ef06e770c6a374c1ad8155966eea8b8069997015c4b3bb29d721bd3b346935aa4c90eba87df787c3d7d90f51fb176d5a0fb3408587baebfd251bb88377d523321697ad61cf7af3008be605d4a0646e8809f99428afed96d97c9d5cf8d678c4f8291d66d6f4791fce924bd83f145e39688e1edbfc23a6e62a745ff6e317288e3dbea995b100295a91267ce1ef1048cb30cc850490dba0e699150f4d7517b437439969f5b9b25a8d7236c427a9ca301efb76a05ad4714b0bb212a5662b9ce2cc1d6119a3a813f980e8bd7b685add6367040ceebf832bc17329c49d6998ce688d165a9d45166a7cace054b93110df9ba22ac83010c13f4d2840bd364417fd6becbc2f84e1e638f2bacf043789ec4548053ccc94c83bc540bd393f68ab8bcf90ed565d918e08677e92420c63877715e629c0fcb6968eb2862f1d2e0f40a4bee0693de082ce94938cb4ecb89325ae5e1d9ddf55b298eb1b2c4c73d2c32fee137d0fd341 +P = 009e6428549ebcd9489827d024383ef367b44f4a8c5dfe98a59149c49c1fb2897b0730b0424976187ed7bcfce7f408b78b81ba9a8595e61ca0baf012a19af7c1d90ef960eaabb0ab2874b31233a54750711deebd249cdbae8d36c257169b70c4287fa8351acac82579bd48df3f925a9c34c43a645960c1c05487c202d3c85ffeb246ead3a78c0aa73cadc78487192d23b43b5be1dd4d3f66facbf21ca185ce493d767715d8e8debf9b219a87d7093b37e3a326aacc10f6d52f6b745674c35901b5f4591c9857651fa52fc25f50617c7cf9efd86721e98e4ab6d1ccdc3eb54546524e0f979c0b3c8acd909ffc94a370232e5e7bf79ac3fcaa1b12b9a4d6c206ccd556668220709ecd81da56f4e9c32dd75ad3cb8913922de9c49b65de80bba95aaf2deb267f84c650739aad3c44acff54b4d93e67d09ad319e4036787fe7f136c4b9dfd3d409a9df89301cc4b940571458ea73b200e14081fdc1f23e59ab3b2860ea3a6d62d2ef370d26c3588f7694aa82b4fbfd77d9ac9e33a43085554326667378ae4ee45319850f06dd1e21b880da87aa08905a783647ef43458e40e5b8176a2fbfdd179ead9991d49173e79c8e45849cb3d0344429992cefd07aebf644301e3a941696dfcd74b1c4dddb9d66fa183bea65dd031c072a18dc4752b0efaca4d8f9376466e346eb47f1682aeea99f591c56117076b303ef75aefcd58587f003c COUNT = 67 -K = a150ca9dd39309236a1d93603b75d1e8 -C = 86e9c977f57ddc867629030f7c8cf2bc947611acc8c038888f3a0e3332b059d6780397e1f66945cf1836e185acfa5f85591f6b722b31d910ae13a9a7d6bf905ec1015e7891c768cc3bc672c43153e0cc67ade8f3f48e375198891b9f7ca777c73a952b595e775c980550945af1b76ae6 -P = 0099719f0b0b455befb7a70d7a838a80d5df71bf361d633d6c248bf237814e45fcce468e8d748f1b54842893739d8927497ea58bc9fcbb78a21977ec1bbc7ba4fda9d41b82e936f59d238b07e10dc3d213626bb2aadd9ce4e1e789159f00026b9bfbb42b8c +K = 2f649709d4ee6dc2296e527788c935a3 +C = 26acf7f671f9d388a2e7151c048ecf066548621349bbbbe982920fa717945c9ea53140d76c8588a4df0c2c580fa2d5b0478ece3395dda813e1c8681728dde4db0eb59ce0955281e4605b4cdc0c97fb4177c0099cc15873dc2507abf3685b0109c1daa9e2b63cd53cd7ee094650b2c7e9b2e605d2792ad1c0493513926fb84a2a554a1af4793e384ae63ea9f0c94072069519eae77348580eff66bef215d9b0c97f63521fbd6108a3dff77cab9e1cb9517e1d8befe3d9d4db8fe93ed4fa0f74893f4d6308453684db4c1cdf3bf55afa9d82c2fe8533067a7dfd8d8bca1cdbf8942d523083caf18cab78fd06ff90178d6ec1c76e428f07d7031adb4055ee564d0f6e9ac461e5d9e05f50ea02233a0749cf8b7a051aa38e50a8448e28f0b2b5e0c9fc1f5834b510a62682babd5c9f6f93af42ca37f8888f469d88e1eb198b910785b93a7b2a3c453f944387a7d29e7336a4f88b7593c5333ced03dea2d5d9567f843385df7d990e1e7fac529b6296a5f01434f31601566f699f19464b4359dc294836b76729b1ce18b76363ba82c568a6c8ab862a967390a26320148f7b85a25202ff2a75c045313d87edbdb64e4875c96b81c1758d4689acb90a1df405558e531c1ee1eb99fb4ac0004561a359c08650e4af7931940c7fcfcae57366855966c473a4b4906a083621955f65e82b823d71caa00c65309d8619c286666e3d7208b678219fc12573bd7404 +P = 6e9ad5faef196c39f1312bcdc6c6476091472c3700526553b4cbf6022efdf5a56a39293d80d8bf4e6c862321cfc9ef8e166833cdc29a47925fc12f6fde95a1c1b212bcdec6adcb00d49302a55657b69fc17edfb101832085e1a2b515f86a49c412a4d7768327d2b9d48cee2197c705e60d961f505bb41aaa280951566599e6951dfd4f6b7c9470e8c40b103b1457fd897e5e53170d49a7eecb8dd0477eb8463870d8169600304093a6e6d6c215071b62865c540986e8d25e2bf36e238de83414287f10f8987b361f5dc2f626e58e897e8b820ea98b9ddbd9b9948cc9d9501bdac8a904a3593aa59d24f3827778ba88ebf60e2e1c9ca2b95b953d66acb956c16be9c9795fd8094611973d41db745fca60dbdb671beeb0f9ab2826aea00c5ea1c4c8a3d1ae869329d606fba0ead48c1689afa88a2ea845f2bff37d4df2b2cbd37f975089e2783e1d44107fb869ac3227d623615e56a0d3a8a23942c1ea260902927b5b1d4c285baaffc17ba4c0c9de64008cc7f907ee42a98273be286c8cda9dfa568f6abea5d6a3b81f8d785119f507b2e259ce58c1b045ccde49ddf31623f0528ca4576576c1afe3c1647a183f2c4a8e537f5ac57a9c21ea1e162fa4cfd50fb651f08912458f1a2a57b01e863716b3794a1a1b2c72d9f4c4d42bb5339a627e1831e3da6efabb17c0692ae5b257cb59f3d5ea5a68b7cf6d9245a6fe476c71cc83 COUNT = 68 -K = 309a62f124e12b9b70a6b547cffe0471 -C = e0bc5d6f359a4c9a9e014ccc2a569f1d3a385f693bac460cc23727c942b9248a78af083f8720e95371a043465d0105e3a03427c47a6f85d5aef3cbe84956f3f7356180afa03251891b9200ce9a18e1b3172d31ef3798bd22a823584942d017ee0ed52fd0a948ca6ab63b96d181162fae -FAIL +K = 92fac48db901bbacee9f4def72cd22da +C = 80191f2dc01ef304203db978682efc896cb52db22941d76d52d14136373e7d7d4e1a7007b772a0da75c2d91b08b275deddbfeed83d24bf5dadeae062f757e7cb1169cc36f7dd6cb7e7600ee5437556af52eb16592dfee9225795e2fd06bee61c3e0c98a560ba2c88f91735851480a80961ec9740696eaa1a4dec7ad2ea7831a41f10ed02ba3bce9babb479c2b1962f8770fe19a5c7cf9e9c52ad3fdb74be1687ed75f05fce38b22dc3e29d868e0011ea9d3d08a733bc4cb3b3f00cf5423b2f2cf3f1e30fe064b18312504fb1ffecac5d69ad8d1f556060f548d6f99047e5638bdac1337830e5e0f1039cf3f7e7f8f0593c2c4ab7d2ea8fc43fe8681fda259da6405fb0fea489aec0286d0fb08d523a8cf4c4f5e5201dbed8b51b83ee7570081cf33c4d5c3b01b90e6e62600e5b53f444b5e0837dc68aa0aaaff15fbb4562f7278eac6a24fd30286794919d4f32737c1a50528178a2c446a7568b05df9148e33a196ec88bb63632ed981a355c3414724a915d97e172a0090ba93208300762ea083630702163922e0747a06e447fe6dd53708f3c498183c27a480cbef3f8957337d255531568f473d790ae5df3bccc19d7d799d8e20a766b1d26e941ee0c40856eafefd3ec1e17908832052ba18b7cff2e62f328b7fa71b37fabbb7a9860bfddcca6645863be20e2b7ed7b9c901535ed975f68df8415003778acceacf48b04d2a51e484fd039f09654 +P = e970a277e1179d275aab950474367f65037f7c75c9dd22e54fb0a9eb3d8c3ba0bebd8277e073b30d0d208eef372d302242decf291ef833508294309d2841f1c32d091b589e15eedaf63d21da846a9f6dc2ca9630cef0729d6edea7fe3ca69721e1c4eabc41d2c885c107257426ae377d5679d8eea4a8251645bcf6489177d50fd4e5507cfa54dd82c9130b45872c4aa9bfe9bbdf39cfbde6ada1474c95be925d8aea0143d064016a1bb2c52b9a689d03fcdc6b7148f06a167a621edb8d626a18cc6c90c995819dae2e3655bb3eed3cbdcffbb37d155fefeae2e1b8e6b389a4b7302fb974c96535f290a2609b83745efa687b4124787b3caf72ace08c56cb933325e2a019d2907d67768a3c2ae47ce2c7f77f86f011da53a8e1f506447bad6fa855021fa42d12a85cf8546159fc808938daef88bbc65b9b771c5f547bb7ac86d51904882477d3b7ec0757c08ba91f8b1637c8bdc39a55b34956ae56f4bd6a1aa1c439031e0bca3b90a43f3e05a34d07f5b6cdc94d28bdb192708f2d124f93fc313f9d529677e67ec8fd7d388b23b46f236f9833d99312022cf9c33cf3cb3f5c52fe11194b88caac1000471da9710b873c075a9b5ba5e57ff5a75e699f216c2cc438b3289926a994f8e1f78343b6ef768e872e2f0fdc2e64e83e14c44161481fba524a414ad5fb42bb819002122ed1d3d9230ad57e6906b1161745ae730c586536 COUNT = 69 -K = 36c72323049d597360f2ff9fffbbff0b -C = 8090ee03d1ef8b788a397f519ac82afdbe734ce86b9820eb66be94743c8f84990cbcf3d4302dd7f899684374ee91cef6524aad26fd4e5e0f499170e18a1b18932b17fb5c921c2f04a4ea022e97a2b7fe5ac3bc0ba38f4c01040ef7947d287ec00fe6cf3ef1e8e2002aa8aa1bbc15b9b4 -P = 03319e16fdbe5aa40b87b03b397bdb8a995370d6870f60f77fbf73c3e738327dd5e05b903b20aed40a0290b01b10a232b8383f55ccb83b05413cb88ca3da3ed4c91a957f8096059f7c97a629ba49fa1f8abbe8a108aa67bb3a6425f7cb2a5fce64a1d5243d +K = 04ebb8de106378151aee1a7dcf53a402 +C = 1853a916d47ad4356ac7367b84189ce2ca7e53f4bc8a11c2ae819892019b8ee84388b77b2e52fa25f41804c4c8aa00678cac22b82bc54284335703edc21db1a862bf06985f7b7b0c20da109ee267949fa0152800a2107f401515c05e5188b64839f539cdd327fc3a41eba4be94a1f6ffa85e2cc0a091b37be0bf7060672d362f700fdd4b66ab4aac53c7c7af2156b6d49665d016c23ead9fc17694f970cde9825c666921513929f6ed277d0385f44f54d026ebde257a765c6f73e6174248563f4cb0813476abdf2d7ea54a0a53cff8664ae62f7d1dc33f13cd3ae12002d9fde37916a93faa1e94bc91f35fab230204e10147a9cb81bfec1bc85ef18f9932bba7e80cd763312628a32dc2ec3ecf4b9fcf2d38cfc9ed0981fb65d6cd2f7b735ebd2383eb09609757288f9e42ded34c6e1ded47584641d6006ba6341f5e9ad25591633c35b078953a7e4e50d64cd04f8aed63fe0168ab52b978c20fc907c071d8a3542787e65ee561c2a5d379e4953f2a4332a74f2ccf6a3ee4ac2ec43ec364bbe26e1e6a983445a17d6ec2b07a85e2df5207b5f5a5d46c2ff058233cffe7a0873385d9b411a9583041063a1481963f737245a2d8a0bdfe1e9d0626ed7997d01e93a6e986d4d8f842f2d35e9eff8a8c3ee902a74f7690f72f1e4a52ee4dab5bbf713d521b64dffa74ccd585cc843213777e94be057a55f95b8b1e578e9a4c677b6ca873d4048a56dd54 +FAIL COUNT = 70 -K = e9d174a7ea28eb092364b0e4041c5cf8 -C = b4d8671dcd08339a1404b74accdfc916ebcb2b0d62a4ffd0f4fe8e91a9ed840de5b1ad2d7dbf7f0fd915ab313e8898c4f0b10f9cc88ac8cae8a2596919785054afb5af2e5d40376a87e95ded1cba9811cfb613cee1f694b94870c8f40a02a099d669ae881ef232528962c7c5b973efb9 -P = 8367fe8e4b7747f7d75cd80c6daa30a25432e084f9dfdf2a6e42e73f55ccd845aa5f2f3550d0ae38d6c36d1e18c290db021391dbbaa2e2a34b8454f7b9146ae4d925b567e5007c207200235939523844f0d08a2e1474dd6d11753d5e7e36438485ec748d13 +K = 4e50c800e24d3e6ecd401828b12fdecb +C = 53961d9b76b302575116645a190f17ae857cb852e699aac5035d552c9397924ca7ebc1088105ef5ba0e18303b7d4f279fa075089028c516ff1c333596004334de69e5af4082034486fa67b70ab83200872dd4966afc546b96a069304f42f6a597c7d1d62325e68f7fcb0ad7d2d814ef61b0bc1caff97572d646d824129aeefb5a056a9a10c987938fbf4aa68e429a7e39c71fec596c9d89bac7bf4ddf327bef8909a4aad81494cb2c1fdfae40411b849ffe5b04bd430f0a26c21d054a29a5d106bef74a3f68e9a0c7a579dfb0458f97c70974d4bdaf7a65ab05fb83aef721d87d2e349d2e79c0c4ae0eae52405d056d16590f1d1d6b1bfd6b3bd91c425a367be220fbd18014b923e53386a7124be7d6810f101d113a154a3148fbc6f4c3f12cf206b591d1315bd6c1351be59c55b338e3bf10d83d05120d169a601b7d169a17c815c367cd808c30dc941f51dd57167975d8161203e55fa7f0afa504c93cb90466ea085c5890ece05deab75410fd5f930b244b5ac8a08b0dc55992b4ac1ee1beb7b83740f9a45914b1c11115a27e6d1a6b8917dee29f0dedaecdb2bb3db37991e9c837da44607276b4d073d2512b4bf3b34a9065b4aad236ff703ef687767cbdbb762a2bd8bb27d13778273d5764defee4832fd34a3cbcb3ed146b30706ffac8abd66b698f50edada77ca0c22fb78ff0bb955bdb73337d5924304b24a3de5e3c88d7e8fa3add4a578 +P = 328774e5e368616440a2853ae83c945d1d954f47766365bfcd820913c0be05580b4501075dcbf0ae2b2d23af999c45bf1e2d4db0b6271c3f494c7525fc440bbc87f4a95e34a09af02e62603f14aa3be0529fad01cd8bd211be9fede61150d8055502265a8714e195c5eb7f6ea9d021f42c3f69418256883d890bfa65bbc00ca17fced4945297361d0fd315725a43becdd51162ef1c045ce25ae5f271b1246d96aa87b2b58373f11a6f8b74bb990738c4e4fa84830b6a65502d990dddfceaa876c5e22ca92560583f0df3b93ed788956018ed71ca71fabb90f14df90249ca2bc9b9aa48187dc1d1884e737eb2474237fed86923d9e322178c2a79c93f314e20420d944e503c7c8e190041ccff2fc31bbbd024c78656c36aab687edbc2605adafaabc404296d86497dafc8a1465b96b1659c32956c22e5ca4ef327d00e830b7ebb053152c7c950793bf14829cd5d58f278c8a99928bbf8b66969e1e07fa92c5c2e6b8b80e0c350320acd4d876b1fe80b4bb5e41382ebd77c2b9e46039e9d57148025d2c2fd6251d2ccd51bdf01c972d3fa61faed22d05a2cc42f84cc27457f38d2b006c8131cefc5ac6e2335574d33f8cfd305ceb0568e19779e72468a523dc8896196f764d47b742aa1879295736575b84f643c2418c9397f6a38ac5eaca6958cc117c64dfb5fb83902caf8c3fd70026e220676f6a0696d03ecc9758d6fde1894 COUNT = 71 -K = 416771d7668f6b5b25d68489a31e255f -C = 8574b2c10d85d703b7d88b956cfd5c311ad5c158d82d1fd5a432186a9f0d5c12ae94d5a7e6691d259a70e75a4288b4f27336eac177fed5e0a9a32ef1fec6ea7be6528c52e9203e0b2bd584f0c2f976db7d9c88affdd631e729f710a8996f989dbf91980f12830ce9babc7788d6d35bb9 -P = 3665f5da01de7e406327c3c04a1eccb9327fa417a384cf309372774b98cec42770645983086d1954f28571b32a853be3c58b4bae3c07d89b76d1c5857850a39c3728b211378cf333cac83418dd8b2f173f2bfb78728f47064aa70866000be1b29f2f95ea9a +K = 4da664feef8ab103c2498acaa05560ec +C = 8e5a5e580e7c299a5162cfcc53cff3308c4e976a2eecde30ad27327ca341eb93410a52e5f89b871a48a5f753f752136fef0408b80af98cd212446982f21ac4977a3ecb3cc3d5818d654b428b42311be9f292372ea6d82bed60545b5bba42ff07b019a81524242edfd2ded48a042d96bc3f6e55e8f322dd2da4b8268eb966d4b63589629a92476fecf2e93a291f6db7b2d2b726346d6b2345e2f6319e2d164819b9930a6134ec8fc5750ed9e8be282f03a498f79e17ae273e2af6d21a3b8b6c1a47329ccfae79b925f8814bfed878694aca4b61daafbb7d78f2c46c901e05e55e893b11923618b6368756b6c0087996d9e0f58c86c90be2b57301fc6542edcbc6522fe510a4ec5e118d2183130d0f79cab45758fc0286de9ce4dcefb194269d65303dc1c06b2ce62b4cc5d05c253605f88ccc50cdccf7f6dae32e380831b485a8284c7b61abdd370941b570e0e10b5baa7b6a82354baf3658a0701606e7dc9d9352e2d7f9178ae8e72a38e22d5b9d7fe66f2b723cffac698c8cd27e08a3d0a0413d7d250220e51ea69340b6b9b9d4c6d99a26e971b08852ef6705aba8c49e2d9c2db9b96c3d4b9cdb0c3de02a9382ae491c015b73ab28c09de53fa2ab5b54a53901abe60c9d0ea4730e6f98c9765d1deea912e4f5e6c39381ce2b52f91026e0b10905f67fe8b774f248311037587e7c8460f20ce3500816f593845ce3285c738845c9a5413d9275e6 +P = 7afa4156ec213d85f6a84f29c15f485aec7d81e07ce1f8ca0ed2c73e25ea87628ba00af5ae1ca255c661a4685c77685ca60d23836e35f421cd0ffb04cc936e09a20a11e3c363591e47915c4e4255d6d256d66c2e4314a9455cd67d4738355711c2b30b6f00e644162e0a80762d5d5f7bb5fdb995e09a8dd61f6c5adb79acb7faddc4b1ab67399be1b786d045c74c19ac5aec4bfe083a65139c2042160ce406154c3dfe5ffda91a3878caf386e83c806a1d31593496b7ef07728a8d053eb15bd97c1daa72203c48396f6ade4d0f58e94a1671785ca079224c1c5a7238afe12a785d63dbb73796255d014a4b981447597878dd4dcd5ac710a7920ccc85ff1ccfe48863005ff7830db77c6f732e6a1e23f6b6fc291e41b35979dea67e3a8f5e0d74b1347b0132e004e91e717f175bd672f10bd2539a58818893cdb762efb0406ab017af32895fd46743186101cf1675187ff7429dc275498361ccdb60f786d61be3c1305f8f4e210326dbe1ee37cb29c7bbca162684b7b48cdc64ef71e4666b2974313c38680a6153c6723d8b0829530d034429419b661c432c8feb2d6952c506860dfda971fc0173f9b6c343ad202c1538d33fa5d6e6f265c3a5275c00cc156616c3c97504d25dd0ad2f10100a100ba3047e7762d579136792b75cdbaa5f16fb221dcb30cc743c8513889cd52704ad52e2a220111cfefc071ddb9f9c2c453246cd COUNT = 72 -K = 2fa8c643140c335eb3c61e63d2c10e4f -C = 9313ac4d572915e6a21083742cb697dfcb32da291a62b4715db36f5fac9ce8299d8aef5ca102b3c4cec8d7039f0dea41fdbf4c608e6cce3828b14d1cc8950ca9b00d395a2dfca671beaca8ef436419de35a44388c05833b83b7a5577b0f7ddae8448d3ed0087f568bf91fc6ad2671402 -P = 79bb0509b9472228ac1102bf6bb95bcfb1401a9ed903d102c5d3db088e5830f0bc9f5b09dea2310132c4d8d5b38d06a3d402532bdf62a99ffd93a3a6c14828c40f48bc216a7e7c0d0d614be788e3ec215a7f9e80ebae5d7cb12ceb4b641cf862b4bd8201c8 +K = 8cf9fdc2d77af94631909c2b22c5f96d +C = 6d342494aa5be618517120782c801a93348fff73003fef112e978082cc9d69c11722f348765521b7aa368545f84be0a1b573dfc786d3f57eb974e59819306dd4c33cfc46b364b8145b6874167b2f2296c5a321442b483b8b505a535ee338ddcda3ef5cad2eab030d1113c084488ee888e68e8703e8fce1f54765f89568efe133705b38332d7881ecee40c901ec3ea1156b1ee38499d0660e33e29ffc90c71f38bdc18301a6978fcf0f6ed138073b73bf6af5b985cfe7c2690ef9626bb33f41466f21b6fbbd77c6876bb01600901f66973f1e1a82628f928292c4fee4bef7299d221ca1098b08f170aa01fc43305ac61069d986e4f769d816dc81f89812c6e96cc0de97c9cc9ecab3cefe49fffca28b1f7eb602c9d42eac328ceafd729a7bf0df26b5df3fae0e3f6781a02d5b41353d4cc5f4434835db0dd1d27a837df5fe12bb9ba1d6d565db02b312be13acb9f0a072b9dc6cab11a31bcf30fcaf049f6b3b62100f05f203a09e0f3354bccf8463445793d72bd3da48b2c6a19199964af1a2e4667ead848488d61eb5cbffeec9dca00d64977b940bac781e0c8999152c39235494881371fd65e66195158f91e08a8bff8463ba076db7ae46c8ab2d131e76aed7917dc7789fae6e2d944ffd77c2f001e2049c356e862337fedd63c9e3abc985bed5c8d082c22e0551e36b4638d70ae8dd6851d7df955f4547b41b96efb13b6ba529eb3b3e63d7f8d8 +P = aae34ae339b8f78c03cb73d921f9061c7bcb7985401b96baa38bf52ac0f36f385d47fc001f668a45666c62610edfd17eb959133a79b8a7e2164b972dd8840087dfc5159e727861f99a9882d433159db97dd3c6459b3cab75e6959381ec79e06ca1fe7de3d3bce56e2afa07d79732926353d694620116cca43a0ad57e527a6a924019e32da8edca10c564f38ac8e0ae3cf8c16e2982e1a4289979e5ff34815517b4a1a3efdadcbf2e386e76c551b73832785695e3d28aa687fe08001afebc0803fe45e5b793326ac6bab5c82e79c1911928118a4e419b13b88a4070a823fcb91e44d297060af4556bdbf3fcb5c8d95278d738ce00aec7de20d252ed836ae529ce2f7bb51e2c12f7d65fd2f55b9613765f866c1607dfb44b4dbc155e0001cbff74be222f9b856a8f4ce633e14e189757102ef7ba847f462e0832229993f4917f9e26cb0c712080a94af74c424707c1305811ee191846ffbdbbc755b73f125836f7aa833fd0d2e82e2dadb57e0dfc20dab2a46a48aef7eab3b3c48205f2240615e4adb447faeaac2537f0a4e7f821bfbdeb0c58896c973ab599c23df20da7de76d38080071499853444418c729d1ff99781a7517256095b04e0e042d4a5c52c92d9deacc8fac447897fbf8d36acdbb668ac8fb9a5aee4656bf4ae67681fc3c80d3fceb985b265276163fe468e6e812c5cd58b15748ac719a4a450d402433409ce9e COUNT = 73 -K = 864410be851ccfa476d27d0c056c1c7c -C = 574371b9cede51573b6cc93e2abc0a87cb7bfe79b0b4c313f47162171cb53c7cce8afeb5bdbefa1dff03f0337fbf9ad05946a053a07fe84d355bca228687c93d427af110e76e2070d33d2618239ad3747eb778059af6c496674d228099c9cb9869096933c7fee09d64271526b4216327 +K = a1d2d76d0b0f5db33f7b7954993c7db6 +C = 0c883e6486dca5ac7479c73763c67c84b7e827981042447fa680e815d7597bf42a1059092c436bd000dba98c38dfb9c41a4cccaaae4cc01a564a29c91f12e76cf4f62c4c191a95730a20fd24083ca5e94e82bd1863766bcd9c71af8a45583aec68f69ff3dd0827e926d77e6b7fefc744850cec4b25ce95c42ab0b15760d67da4fd6b3d85bdd04260d44dccccf76a2eb1911809c910da5d09b94fcb158d2126e446c2b1a553c0ba0803de839397b188a2238aaa0fd5682ec109541ccec07f2d0576d1a36d9033f67d94ec09b5e3c80b8a426b9b8771d1c34b7e30c327a3c116e41f0234ebd4ba399ccd22fb0dbfa082db634065af66b46555fe8dbb060c3f0b2d3e28b756c79b02789a6af208acacc86aae47cc2fcdeb739c172e0ba3c5f4b4862e6d69674c5c0b5fdacc6d21e91d88c38a18fe50ee931167bcfd945f6f7fd5b24846ba1c21db0c67464e1192cada3fa83130aefcca39eac279b79ef28fdaedf41a773276435539ac25b68871929951ebe3e21e4f6b17c6e5ca1432230ca664a922554ce5f31fe424c308b3a997fad5d580dfe0d27c331b0f02575faa5fe8d964c82de054eae3233ae46d7d0973d277274821df464e59fa4523b74c59d4e20674a134e19881e042d1c70d16586c3945c02c5aa7b5735c21710152063767cf29a976fe4ebbb9770fda8a912eabd174ecb3a9749e81f143f02131050fe3ffa255893f69b42cd679ebb2 FAIL COUNT = 74 -K = 4c85a6379da08601dda93c2d0e91633f -C = fbf6866541fd3b605261f8e43a37c8d471a379cbcb04861d7137ed208f7cb33fe026e10133de0a97777c61bd7542fde2547fc4a9c92ab9a2e244d27048d0bba6f7f14cb4fb6dfe22fedfcb07287762b93612fddcfe943d741bb7a3f3abdc7567f692999526f31dd267bf11b5d667c36d -P = a8030f9656f8626939fff5c6e3a2aaa20f2591cb09abadd37fc7f86e78a2cd74882172fea54ea860f3e2fc98c52b7a23c37a130e0614a9c11328f215fbe8136a3d185d7f510538f6f2322b1898d37c5b5bc815a6a202c8fa44023678179b3336659b8c0476 +K = 8c4ab8087b8c0234e0bcb8187d5a2598 +C = a6fbe2dbb61fe5c592784cd3052a4670daba123d9d64676e3f18438959f21b72501533094c084a6b2b65db1054e96d8d6b1e3a35b0fa72b88429ddb099ac1008a871fbec5ad8ddbe907888f71bcfa3adb4afda89e5a8cf682630645e7f8514cddca5e3a8fcaff3864c97eccb06ad60924801c2dd3b6996e3c28b80e886c93f61c1a2406a7cd949419e31410fcfb23124ea946aaa65b6c4229eb38e1808954981ae5ac050660cdbddc3cd355fbf9b125ad53ca3ce4b9fbcbca7d31f2125e8cb31fa0495906948ae0f4277d51402bd1a4434de4f669af203d190cfce374a69306da6a3cc9d97d654bd56b533423fe75b9e3a92064e93e7e8813ca10f97dd2bea34a8df37b7708f83dc653db86ce7c69a7825d427a2f619eef329a6f6347ef27047729e45d801ff3d47e1b3c1f6c60e12f11adf2227c5fd79234a475d560e70c671b24ff8dad80a931edd77322137a3aaf97861932bad35308bae5d1ba023181637fe1ee14ee206cd9bebb1c4c9231fdd59fb293553ca7c1c854a24a6b25a582b721d3b42bc971b9907dd1fac884372a605ec2c59f9b7be86b8edbd7a9a3e7b210bd38b650a1cb5c626529bce7a835de1f3b5dae96c5969c957206d2af0a8a6157d503f6136d843c2305bed6f5c7db6f88ce4a3e51a91b9d86fec08156628a5ffa36f40a5d5dcac69d6a124888522d9f00ff4a488404c1236c8bf41719cb6966bca1c6f4243fddaa07d +P = da122dde13b5cc1e1a3dec0560d0fbd1e210617eaeea5e8f1229caecab3a9745579b45c3872270b94a81d4137131476f959b429a01eb7b04789d88a1f3dc74ba2f79d4a070755d58125d5b44c632700c501b3ad5b08e75d179f8c12f5bd3219c864d03eca27e3385357bdb54c40e8c3b2539fd3e9b9cc65d9256018831c7dedb4a1f54d4cb17b40d2470514e777bf86bdf3df2cb13f2de18a3cc68eb87ccf5cf4df5b03048737bf590cc687a03b284eb668f46591720fa54e28f49d4c28784517bdeaca63acbb80078af80d36a4ae470730edb785423224fafcc7518c8dfd275c8ef7f8bf6da0a9199856ac26ac671178283c053db698160ae0bd05a9840c8e712d03cdfaf43f12e29e1d4724b2ea51c5d3af17e37db89de60cd59eb7908b7028326bfc17c80695b002831cd5ace86bb1d67085e5cb51f6f6a00e5f079042647f5dc9e598d7332111162deb48b8669aa54141c011e0ea308656972f5cbebef2e44643863608932fd2a953b17803b4f0ca85d9163c394447d02bf125775983e742544a139eb195a4ecf8837e6140c1def95cb2287988e69c73db01c26092417015ff579af32547d9f433e37a0ccdf75d1ea3c8e5d07b7a307e1c798ef2d6aa81ecc7da4ad0a0c67500fbe6b676a7efd353fc36e6297a9652fa57a7cdebefa5cf08ca8c8a67d3103c706dec598e81c582a0816af16d6e41023c78a880f60e308be COUNT = 75 -K = b96e148c10241e346fe44c14577241ac -C = cc2b227e38c3d71f83530d76bd76a09badfde8a143f1f4362d3956ca0fbcedb6043d93d928172d1e649cdc9a08f46fcc9eb8373b5264ce13c9555f77889287f3d7fba338edb7cc3aaab4dde5d0d12b5134d5528a62f34bcdca9cfef4d9cc6f772b2e9a36704731fdf903e83215608ce1 -P = eb8346e3e8bfc3f61d50a4c266291c7f5903dbdce95a10f607a7e7a245f5b1891955dee7b4efc1a826369d830de7e36946863049b074a2db5f1e30e9ddbf7de1b7d911bce3273e311b0aac59efc489322ff2e176d794b3c84e22178f554e173cc1ae9e9919 +K = e8c6861abbb88a5999594c2ccb3538db +C = 3b76b4e308647f49b6be29e57c7d45221e1623f2979b77ac8ac35e6d74a6984bf037d56c81106d499ae0afc20c3750ab615aaa4ec3a04c3507e425739c6cbdfd58ac3cc9b9fdcf7cc5ac4705a1ad94c928e09c816140beba2c2c3fd4eff2a495067609f70f0a6d17fd81e70d22b1c0491065095a30eb0cd2429dc68dfb80742994eaa9e8d4e5d16b8c5a049a63211b5bd213172bbdef1b37e62d0a2aa1e649f9f74410c8ca4b33251280be94613c658d4b965bd2eb7809907fd02c6b99d47498fd1f7bec0096a0f5151f3299e4440e0d7a2fdaeec7924b3bd922966291de2aa6cf0aa6e2c393d6afa9e50f0945e70dafbf86c15da573873e2d553eaf2d508c1aabc49150fa5b3934bf2b9b955292bf07e1b1af428afb6ce4e2f8a3453808dd43bfddd935adf111d70bb4c9efe5cb48edcca339461aff69010122bb4c5bdd4320cfd1966397f5393ab578cb215cc15d048f38c9c5a5c4d85e1f12393f6cca3ef676fe75482dc57edaac4399d0621536c52c7c84522422816792c67772cc05d8e22c5e988370425b20fbeaa2bb36b580243d976e3d44758787998b3d3e2cdd34180ed52c2b6fb26c02322356832f35cfb7c8d1b318d50b019c1081f86a1e3a4821839e5089a9dbb5d4c6d18cd4de941f6b96c1560094fe41f2bef8806c602da206aaced65ee2fa10ed2ffb9d6b8dc281e6332eccc75f15b6e8bac82804b19946f50b9fb3e7a0968ec4 +FAIL COUNT = 76 -K = 4f5bd4cb233c0757ff7d1a7dfcb099b4 -C = 7e27b7e4b3902f293639fcf2aab83aa3fbcf9398fcc527dd2a022c4681407f705a5f34cb8ec92738a4043a056174b10aad1b95c47281d723a8e4976916c50645fc59163c92fca76492a67794562d3d7f272fd872abb7662a90859f92fd7ecff69909cd412114cedeb312633891f127a6 -P = e31ff5164591b6499651b2e2a0dc1fe2ae04d5eedf34f3715e427225e11e318250071550297ea612ad64c9da1fa2dfd1e0be0096f15e1dfe2a5de765d3c78011da85cc1c73f4f2568320ea9589455d18bd9dae999b5127071a4c67a3a1081ff76d09ef866e +K = 94242ea8f46dcf584123b179dce35fa3 +C = 7daa23d891d3f6521aa139c80da3c35ea41bdf0c6d1d77f0df299fa00b9f2b590cd5191d772bfc22d4a7ddc2478e11baba3b62d41ab5fd1c08fb59ab86820fa3f005ae323a2402dbb5105b4a21e09c4d0d680b53cc937237fb663b2c0384901e4adae2b144ea368f7289c457881d0570fc6f2fe83482346e2cf19dd00f54ea58cac66b8f6a3cdd008453905abe42ffd7cb3856b8890bbfa0f0c0c92afc93700b7d05c2e178c7fe88d235d1ab7fe748a328c2fa758871e76b06887a35758f32e63d2e0bc05137174b9a7f63d70ad483bd85d28a8b2056c19f7a2c75a036dabf6e20b09021bdc82f167c89d032f3ce37115d8bec5074ff33355c7e25a9a3f6752df0e120b9dbee665e8bbc2ae9cebb2b2f2e731f02c8bf0d645782817c1d41d2cac354163f6458b26b0f22332023d8dcbf7e036db9389f7277cc46302dfba543c4bf7749a6d09558e8b0873f7e53a4fb5b0f2680cbd21b751312ad88e40c32ab390e4305276e80f851bd5f88fa3b128809772e06dc9eca9add0e3fb4f9d85553c401160d1c25ec2e266faaad74e2ef86886305fa579d4aa6a319ea09a5aa3e80a2335bf8310a7e25ee4642012dbb0500b331f853015830530049c97835965837190fb4d02e50763d09a31e7b4725a284620a68a23a1e80583fb4412fc0d4be1080ffafc92bed447bc7f597117724bb6516ed921831edd678ff59eca641f7db2d7a961381689e757ab1 +P = 6dbb9b8a878dfdc0b4a8f96ed893da3626d478b788c16a1dbf273e93a1d974e9b0034c79a789fcfa33959a70301719295ec2fe223bcb2885f394e3ead952b765941e546443585fa9017ee5a262221b20fd52c8b3e2117138ed8d7ae3aefce228d03a7b5e3bcceffd639c5675c1b26f6d7c06a1f03f49624942d36b8d345796aad0e6a09422858c5e6a18127a2e4ac240172b3f5aef74f102af0796f74bc16e60707964d39543c8905a59bd42ede54cecf8e5498e8f550b9611a3e3dbe667ca75af1784e653c2fd9a0da378aa963a4578834ba713809f42dc43c50af1fe3d51d336df5bda197e4d7ee9ecafb77f7ba1bf404bcb9751071c37f35b65d6956bde4609f2db1bcfeb400f57edf48a8f88ac933b90964b9247a8e04d8a3abb22915150fd2b2a8fbe19ae447c6d49d8fff110e1780b567e03304e27ae08842812e89736ee245609c5b07e285c1aac68189c4faae216d7020022521b40491b02c91d781fe39fcd1606ae78ca044b5381a3395f2a4f588fa4f80b4a441216217fa807b9fb1c7c41e700aaa68943ffa5ecb52c54c1c41044e1936b93f973f610213f6712a3a2e19392ef391c31fba485af4310dbd2e926a4b068300736dbe0d889f3d6f1828f1f51921762c14ef222f4d23d5a57b289877f45926927126a54ae20371d626403df7cc86e03ba58aca5f7f6d4d73145ebccd937d9c5098ae19f4ddbb77058ac COUNT = 77 -K = 0a6cfa3d0e9b7d62a77071cef8ac64ca -C = c0cbf6cdfe2cb69f1b3265046293176f6fc44932bf44eaf5a2d45106b571506d0088bad20612816fe01fa977575b77cccec83ccdac6c309297515fe0e8918825c18bc499160af9851857f45ecb45f42107bac36b42111e06c9a84e195a5a4946135054c1851d94686b9bb392dc4b8fa9 -FAIL +K = c3a81b596b4f6980fe15e66cc0b593fc +C = 5db05a3ff7fd5fbd045ada7f35b02b0b10863e32de36ab74eaaad5bdf874d98bbb0d0016ae4baddff897bd2d3c4070e9b404b4f8d9d86d2d8e5e8bee841f78b884c2182001ff31c03073ec7c4704c694cb830820d1e8135dd5b8f5e15ca615121f8f797e1f8d543e9d8020a0d06a03f804a7ba958f54042b8b968955cb2b7a49aa26d8c6da3ca05f4b1aa4b99d9491b600c083cc59ed1bb74a72feacd7e8fed2c1c957fc1c54b5771e0c53dac0ff1f1c420f5bfe0cdddfe4e24b9ff123c2901039b2e3b815f7ca4fd0695c7bd9fbfc83771c5be302c062c7f34f957542c02297b14337b0f7b827cc1d99d00b0abcb55c63e3efb67b6b2820cfd99495ed6f5b4b162d37e6c79768c96ce6c1ba9660757ffb17018a528c3064bd4725f1d31359cb3a9b476f589926baeb116425098d1c8240899e7a363f278981556a9b264d259c973dd388fce12afe29e45b7ed1ee61802e4a522ea87ac0eeaa70ef2c751d56e6c26e96b0c839b0b23ea94ff56e0f57b1f4f6714d3a3c82ed95dedc42b9a1546ed88261b9bf8ba70928af797d898a4f078bfd9e78cba351b0fb0958f86557a426ecad395b2af22e6957bcc16609a020db3a419aaa078ace8207cba42df22715085347265bdd9553d137277e3a6bd37e3ec660a0a77591b8dd63b904a62782d469bca285b96aae6244ea55a26979d933b69f822127edc99c931699914151b6eb9866090488992aba4c +P = 1e34f13482e815ec75e3320c0fdb9e3f70c90c947db38f0387e46709942fe915703064c127f554db4d2963dce4ab96bec5cab6a1246616b899fc4f87203716c0abecc2c2ec512afb6fa0ffadf33a6ca097be89c65f9ffa21a4ffca9f58886bc4021ad00e0f0f43f7e06c202105d058eeeeb8331b5cf9fe4c2c2efa629b70e51829b9c6a8e5d645639603b9a0fa7eb175d3378f9fb5bcec50fc54e4a43ea8503f1eb8eb35c8b897bb551e10e445899e24f3043d2df28be3b7abeaca5fdb127f0ae1a4e95304607ff803dc43416872199b83aeb172b69020c1c65ee9cf62472d68f44402782d528dcc02ba8203d29a1c50029430ea55e03a4b499f9536a5f4f7c8f300f5c1c6780ddf34bb8d09c1ef2b4e2efcc7321c67c44512239a9b22a54fed3947bc2ab31f44859eaa43b095e5b5efc3c3cb7f104677ac1ccb55f3e7b1a625f67f8dfcacc4c9a725bfd8dbb0720a2453f90d455e5d388d72677facab3a32878530d7df904c89cec1ef3b134e4ec995a3a60c390c90348bb4e1b6dcf6d67c906b233f8e1bd0426d11f817fcbce1fcdec72b22a7f4df0ab72a079f7523be694fb909c52975ef359a14235a904badf5690cdc2af1d1914844f0948c8f4a554643cfb3939bdc7e336aee3d275157677f898190f670ec12a2cda663f0c3785f9ffb783affadccc10c8a6fb96a96291c0b6fb2b413875fbc0501488612b82c80f443 COUNT = 78 -K = b0a9050aa102e06345c882be7caa8604 -C = 41edf353217e17f4d20d67898dcecb4423e7792a0d41a4adc8925bb85d23beda9aa6e4a45cf2ee20b46ddddc77aa95312816bfad79883ff279d80662145cc3ea37ae46ad7a5b4e206e09c3588e573469cf3093024997dbd963bb88d3a5d0176274d5cdee06ca764067c42510808023ec -P = 1c3a1ea2db9963afda03bc75d3e05e7a7823658c4c9a2953064f809ee8f4ae5896dab3101310085cd662150f2dc53517f677e6a39c92599b25550a59a6a9eb9d4aac5b92e8ee7fc7ce13d1f1eaf2aeb01dcf3a988fc12722a39132587af666cb6bc8ed781e +K = ec7c3ffd86e8d30be17a6f67a7b5f032 +C = f5084bc7c918c08be9548a6ede311095976102e490944c4b002d7de5b722d8399167267375e6633f2a1d01531a41f6eae3a5c2909de0862143e661049d78a9634b025a921e7aa523eb2034f346f4df3e30193a090ab220c16bd6ce35d989187a19fc31c06d6da6a8caaba3622c8bf95d231b551bce01ab2b2485f9a804b1ae5c53a458ca6dc4fb142ab3c319b52f1f5fe531600f9ea48940617665560a88b06e8636136ec0761c056aff7ed27b1d3ba93d8a0e0c8b662991b3b45496befab0d8286577cb9ebe4688586706c4168d51eb4e4ea1911e97fdc4c80c23575e9c7c9bf383df63c90044780d7654d8405f00a0ebedb80fec16047af96d146ffd165031798e957e57470d66a601a49b14fced0a4ab02b01c7ca2daf00915e289e4ca0a38a0b822735cf839a7800bd1a33f69e9697a5e5ebd73ec1849c9053da7dc34d3bccc2e6fd84ea3bf161e396259dd15e86cfe31f7902033def664b977b16c43b3789708c90a11fd59221684b01d8f24c31e998f2e036b8aaca4ebc02f411b305e4bac439b25b49c67f45f5a18877dad11f2c80bc62a53b3f466814669262b0255c815555230e8f315c8cd07a4071726250bd496a498dd850c1ef38f834ac6f907dc511ab14794fd1680d2a7492797ef8cdf6b19ae322353427c31fd2667e01c25000513018cb67ce7cbdb0bc632aab40e9b77124895093d9914b624f40863845f2e49e2fea18c03e1f +P = 16888a62ef7833056535dc1231618caf1d9248f9f110722b78f26c1eeedcddf4444e5745512634388a060cf6dff88d8225553622241d08637dca8bcaf5ff265f862d59da21d5b5fc1346aa6a961df769e80df7a45aef2a0cc3330f35520c8c89c2f760305991969ce27bd492bc938aff587ca5124bcf9bff41eb1a7f73cf157636dc94c59d38e80f1aeea9a6ff409d482807bb3c127d31594f19ac3791acfba5e5503af8ef562767014faa4d5cffdc9d8eb9fcd0e360ec861f631a95b5c201cdff1e42ac0e36850c28964ddf68f41470d8508de2083d4ee576c7da370aa5f138cd4bd9d02c3b0030ce807f96f1dbca1d79f6497d617fa96d57534eeed5584dad8ffa659c44a894da299bc88f4e402400328f472e12a543210731eaa78a0761cce391b3073d439fd4ac11c6e657178fd5881ef515b1ef5ad16725fe433b876380f0ee4661f4a933fc6f5c9be540ed12fe24ab3cbcde6db454b14fcb0b4b32dbe475e6250ac46d3e569bf999c0a02ba7ff31c159c0cc729e650d3bee9f29e0a5ab0c1c47388776d6db91a4338e5209d37f1e54e507a5b11a2bb18de8d0f891eddd08ff291848ceb075db5df643fc5d3206a926998574afa924be5cd76f98b51b8fc52923316ef93dbd8d4bec8a30d8dc4da5f05256e37a0bcda0811f07695c582ab245f852a56cf730e16b0c264d1340b136ca232d286f09eb38ffce3e9f1e1746 COUNT = 79 -K = 6e2b9e916dc58f21d04d8ac23ebfc352 -C = e5c3d1b917e6bbdeb114a4c8bbc2ea404ba7ab69dc7fae507deec417e5d827c0d7c7ece1ebc12b127c4e9057ea95c1569d2378179f027cfc2568cd634b45fe623b865ab2b28df5724aa67e35e299a600b8590f2bf3cf48ea92112e1332f9cd487d81e2a8f6fbc688e055cb302ecaa3a0 -P = 131bd27b59af439177e672678058eb6b0fb3a3ba8f2b7023df6db1f1b264cb62d8e07ef23c9f8012af5eed9904d3bb88e09ef8a3173018ffd0470d70c854948a73bc75ff25b046e6d69927c5155f7b6911fc93044ba882e6414fe4eaf7a5560ee0b47b3d9d +K = 8b8d9e2fbfcb746cb58c89a8a002fcf9 +C = 56f6b4ea47ecfaf96f53d0d8c77eecd16e77b5135dc8051bfbdb6399f3e0be070ced4d8fdce8604564b32592efef01aaa6985e35e25167d3d1a30765d37767cde4301510d763057931107d44fddf0c57afd000dd3ed38daab8f0417181df0226b0a2c76e3f046d7641bd74826c85b4bfec99c235aa6d1acc499c016e3e4335848152f45e371567670b80b94bcb4622ff3e450b619d5677bbaabff4441ae23f480d80e2d285971268071b6eae227f41166ed4fb81c74699f26a7e42c4135ce4f88ac6ab56eebf4dfce506e3d41ec4b03cde9e42dfd21092f250bafd6c7642e005c8aab9b811754cfb691e662fa156061a35188c4cf18d99356dbdca69c0af1def4495d3d279c004b12f800590f2a74cdf5aa5ac9fcd67a7bcfe342dceb6baea56384f39edcae743ad655eca9ab16b89a38bb89f347ca8df9a4980b2a30821a36df15a729da789770e8d82b9d94dea373959e7769002a38a4815cf1f858aa84113f33e983457359d814a1a19a5b76f67dce1593cc6ca36f61a16a657405a0dad5b3d98c52e6f8100f935b25e02687be0160b998ca2ca11712abe48d5fdfde0e54ca039391296401eba7341fb743bb8b8fdd10976f26d60fd91cd5f39da8202a7491750b23025900da9bcb112695bd8392c1f96746d472ec8f2a4577e0f3b28d321eda9f263c5642e8e87d4151ada1f6f3f02913b104d0f9280aa38bd24dc9b5b2e220fc5301d92d2a2 +P = fbdbd5f57413ccad7dfbcc660e227eaa16d956ec7147a82037b45af4f5b77f13947f2022be2bcfecda2023d4b1ed1e35f73e632792b778d844e42b7de7bb8702c2fdc613fc404363dce06582f9ac6e8e9b50a26fb7b5a49f65ec9df91bdc9aa99e8af1d4f4592192715774d8e5846ca20d4b29a777206657228b5478c537adf00fd8041a9651a20ef1b4c9418a51a79e72778d5750fe23db8fe9c917b2ff08faad279bb266381dd54120784afd0576edaa3859863aaf982220e634712cb3d682e7d1c097035c7498ccd4ea6e02bf05902f24378b73e6b85e79a74af47fece7cb783a6e857d73c0ae6600b9e1779a84cbb9c4fa501b5132b8947f6da96299326b9971d4b1cdb1f661437f19e45c27262cdcc3da7f03def9d3341596029e012f3b93d4f25b96476263a2472200edf8ea0df84754c7e5e6c839d3d2cf03ae3712f3e68649404974b972dcbdef98ef69de1d49fdf18a69a611e5c15acceed93cf760ef2c16f9e96e4079b2ea19d3b095e6497dce997a801cce797807d944d5e4befc5b6a02e7cfb33368861db898657003b9a3ca3967aa2be0effb7bd966d64091590f9a45f8978863a2d10bc7e6fec01983d74cf8c057483e2f54b5649f7ebd3a97e254a9cf5a38035920f65809a08f9ab927f7f16989dbd411a775b587914cd1f47856c5cdae66b2d512b63b62979b31ac3bee18875c0925cf7ac7617a50cf3c41 COUNT = 80 -K = 94ccd60578c26b932c92a59a472a763c -C = 403e931d740aec1e327021717f22470d66ba1a50e2ade9a6b5bbf5d97584263dc9712e5f0f443a04fe883fde5f52dc9dc8603ac4d2074165f5f09340b2669e74fe2691405fdbe00db7ef973d93c9a8b3023519f7c2794d24c7a6a57ccd71f85f64b918e630ffdda1bf90a52472c6b362 -P = 82530f15d888cfc12756c132a96bc44823ac062a0a5a52cd6215d95769278e2f7ebedaf03be43e5d4b07ad26dc0a7583ab6a4bcc5eb5c38b0c64b00c64ded3b5e8b366714684c733211cc15c71315a92bafb62e754193825b263da7ed813c30bb26c982c12 +K = a6a3b7fe5829571f5ba2ccaff69a0cb6 +C = 7a3a21b47be391e1497266864d4c7782f9cd60727418cc7e0873273dc856bf43401085fa9bd4adb7f400d5434cacaba2d2ac22a102191c09d2f5674ea5a356cba2d33cb2ccc60466d75f3f081acf7c8ed86e7515455133bc06eeed5e0a0b1997299c7a38180baf2254a0a9d1d7e62d66574f07d6145ee3f985ddafc005f0226f7bdbefd16d7422b50356ea8e97db9f6402b3fe8e377c6357e5a6f212d84b2b68abe7e46f0fed8e8e034fc2839921287d341cac7707786f9701491df9987539c97920a4edac4779d99e242cfd99834434ba90e5333e86b921b4b93835c8286e11e43d5b39f3ed2c4bdd6e25538a0a351c5304082043700038cb62d25c8e8e12ffb7401b57d5670951c1e2db5c28e974d569b27c671540423e2ec93594495e3c345582cf95051b9e20afcd4d1a7811a0da9fe363d6120851599cdafa9a900709b8f7399aa1b22eb66fd48b8f501fe136fe13616a821a8d964b4aab0a0f27bd0328ea6f45e57965cb07a6770b548586ae6f0810f241d6ea7e812af3cf7bc0ee506a30d36db8dba3f5486f1b3ba45cf43722fe17eb4c4f513ce8eeeeb4bb09bdb8f44173d543f12c6b147a6c513e737177504f8525b10f3cd3475545a9908f83ed647779483408b29f4e4b2ff4ce55fcefa6f8f791d1518cf9788f06bd86182b0b47d89008f4978d8aa7ab3421ac9d47676c77cae5b7cd42bb14876730a5ca1ec65f5349b54fd1752e60 +P = 973b12b034c35fbb0aa93ebedbbb357d9274e17f60375f5440f31b853da205ad292835f94d6db8da385d25380a3b7c26ece5a3f2d8a6100c92e93697677f605158e50f482769c104fd8af4f25e7179876e7ec5b6ee74460d2582a64e3cb62d400f2b36907330e02ad2ae901ea62ad8fa18cfbd403a01f43a7557900baba3a6d1b598986c9925edce552926369f582c6abdae7feb70f4ae8a93ade22bbe9419fee4aae81bc4d6de999e2d02fb3a79750c2db248ae1825ff2b9f6110aef49d5207bfe8df39b1100b15705e202128cc511d9a9be35efa36cd1927ce4ac19061f93ca4187b9e977b47c95b0101f74bce0785feb6f171cdffc831f9a07d9645469cdf39a383e1331d6792de430866249df07822962bae4248005d312b10de9a06148c1de4004fc3a05e2e5445b2f126dabfde3e3c7990ce4501a9a0afc96241966b11b400bc507de3e888c06e3ade20e044f873d9bebd0f85d0594bb134c113f82c5a3be01d7801abd10e28d9fa39545f118667ca7ac5d8181b22c3a2d1abb34c1e5615ff05d791155bfe431df2890fde36178b7de7e4416641f64c6450b14bcdcff2f79504b97e1a58b66dd215a45a5a344e3d9f1de862dfbaf026787df2a124675c6cea1e7891a71006110b11cd041e9f93dd85c471d9ade5ada9e2cb4a7f4c5d7e1ad2f8d318cbe9f69883bd478f6646e3a64bc9fd9021ace9869b15882ed9ecf3 COUNT = 81 -K = 101275b3459801c6e075e3c36c2fd807 -C = cc051e9f6402b2de437b040691ad7f058d910bbc01de501e19f3931cc06c8e38e9c72775223b738294a9c80706bd351bae7b40b6d9ae55f09f650df2ba97a2223e617805644fbd0d1a5cf75a30bb164368a21dc9b60dd1d6cdcbc89ba8f196fc98015623e37a657312c3d2fde9b558ee -P = 24f64d73ceb57ee8780ddd18faffcb67e39f72f9b7971cc7581f40b49f9be71ae0246058b987aefca14ab711abebb9bf82c374b9c4e6d0f19b24bb8ac842d60cea70c3614fd1c2ddd756455f0163072ecdfb8a174e998d01f3e2df946d29650f986d3dafaa +K = df423d0c6d90d2e67bc4aaffbcf617f8 +C = 9bee30f678a67e74470258a7417ee6cadd8747b72006c35c45c8a5afc30ab740c021b8d93af8a4210f3446704cd2730e9ddeaa38a37fa0522625b739607282a9115035697145b5eb5523be39291f3d02d2fa18b01b4639e9390e64cb081a582360ff08ba7b9c0d08c847ce0c3b23920a5c93e79b3268d0688a2d7e555e16a25d3f8edd486cc0c65e9cdf9c6e865dc16f8633f725863ebfcbdca40d4befa507dadd99b31875065f0e2a8963e94469397925403e176cb444392ae40ae45569b71f78e432de72b33693ca042821e79522827ad7861b062601ab2479039bbe6f1b599cb05476c1f168aba8c9b2c973379d3a27620a74d4acd09f7a82a1b97a8d446352db7bb8c637d9fd068e411861b932e58bee88b784d4389698f8f4b30174f4986ef54f53802e8c461b0c69541c9284fa0dbd05c271bf8c960050ee3a8e93f212c61cf16f805989b47c084ddd6797f8789ecee710ef8e2a58df3720ef855694a093bdeee1051151d4ed68b1aac2ff439748328ce09cad21c1fc25056b0858b8d067c3cd0cca565fece5f02b57423da6b8b11ca8b5c3e1df803c82ffdf64f8b18e0e4fc5888a6e7ae5375349221277caa692768d03c1d679f9a8aa7d322dcb129146a17e7bcbfd6ab1910631e87f87252ab30a175078aba1bcf2b6bad0081e25da5e359fe54e0c35fb7a38e28d76112cfbc944c1ccce3030b48b884fa5c26c51a0054ee58e0cac8d6d +P = 02fe51acf9fe30c56756351c2804c63eded451687794f77e431926bc2059fdabc8c39ac9d46491b7b82d958e179bb561491dfc8efae5d74ffbf66457ef06f7d3ef47dc72304ca404b1af4d26580bccf9919c4006b7400fe4039a480ad6e95dd43d849398ec901c75d5012ff31a1c0c7c591bb5415271566a8613d59648ee41ed5ce758e71335e5705f647424652aaf900fad7872a3edab1c96998b35e3d5e976c704089e17d169fb6407e3267fb33aaf929dc3da1906ed725b32bc2c2d32c30e91888348c0cf9a37ddfa7f304c527f8319c9812bbe97289c1582bc1317b7f92bbde92a8aa4aee1752e85367da5ed9ddf1e178ca02a27851ccc451ecf99031b04543371e2c842528f61ae43dda7c04ef8c639703d596da10bf4e28870a7e0cbaa2ba0676fcfe7b136ac75b4d6ce55ab845486ebf1cbc019f0e85bea633e6a313e8c26e3c167b4f577b6af9e14f9e9b092f41fa268ab054ce46dba346520c4a3f60b0cc0be2d551eddc23f483e4803b4fb234670f701ad060fa53aa6ff297c3a5980266e50a56d7c41bc1b14cfa5d30aef45d8981002423819f19cbd242daf3190e8ca1bfdc9b67916ff13bed809bb04cd049be80a0286aa8a565a650bb6ac70fe2a262a66140eee4f1a76acb3f7eca62da451c86017341734f4e1fbf6b2acdbb9ec55aa8f6146d59d1d0167e258eb68b216d6f61081fff7f2ad3b99b3b567da4f COUNT = 82 -K = fef9414481b4a393f29caf6ea781402e -C = 634e5f60312ef7dd9c0899e18da7e49dc148ae20e4824dd3883fc79bc744606a8c6cfc217155881cd5e02be3c0f1b3bf36aed0a931018ddb40b16383537b52e93167bbd0149463108d6735209e88f0c8b95c2bea3fe92d353d66288d7719840a8101c02a1ae9a3d561a37375db9dc85c -P = d5dc4925bec4fd73f08417fec8fc81076638fa8f1bcdd7d718d0379b066ffdc6c03b5b1072570488f5ebd2ad52029f9eb47844703d76c74a3005851ec20c40896f6870dc398839243116b95df3f6a5ea57c996487be891d6eba9530f5209d08c4e0f5c3d8d +K = bf8ac4ed202e00b55db046a15514620e +C = 31135c689483bc544e7431628d326215945392e478a32219da0cbe1dea552ad52dcacf01ff821d82b3ecb1f3073f796b214e4d68ed25335f91d3e70c25bfad1970cd36a5e545a9d9562280946be51c53b7c8967fb2b75b1046f643ba45a792e773985ce9a5dd842464bab66d57060178e3953cc19a172d77f9ee52f0d28970397eb6ad9c0c2c11452954060adac441fb3b1937f68fe516370e966723af934b7776935ffb9e246a13bf4cd3420ad7ef69ef420b8fab668a694360d87157c38dedbd3a64bd3b060151d012bc51ba043bac70e7087d10428d6a0affa7a78a3d9103f9ad83836a1019846758f2dc19ebd4176b480b1300871abce8a36e0cefba5202aebe300b2fc5e44115ac0cc77185c4a556370874739769bacc98a5419dc8a98a537fe40e7de49db4aab6d7bcaf3a0cf519f2999bac5cf190e79016eb2b046f8946fb002f658564143f02027cc85de5e3ef249a01d91998c242d5748afc81b917cd9543ed4eff7eb8ec64ee7e6b924f49298358edf459a982a3b1a63288498bd5a1cf8dce922c3b3cfda4ef50a74e89101a75e59c01a7d70aae7840634def65e0ab8aee50a0f8d2db5266530e148627374b569f8347407357a5b650ea6c8b588f5aeda3402ae407fbf8cb6ab93644cb79041c37e6f5f02988c70dcef7d96b7805efdbadb8632bbf637c0e317859fe3a329e8df8d6e01acc90d20db1a07205aef532c7147d16956b20 +FAIL COUNT = 83 -K = ae466f3666220df76de231ec114cc0b2 -C = 8408a5b8dff072023f69cb16506a178243c6ae07e548e8f2d1bfe6e06f99abf6242a36e69b4b1d7de086cbd4014f9f50f76542aa6777f5e53cb414a58be357eee245e760878759b8b9a216eab2694d3ef88ed39f1e0b748ccac9222b41e77219d876de72348fde46551dc79e200d906d -P = 33fec2925deb9163e8867b63735d97fc672cff18d9f8648728abbe8c8b677b3e4c299a321c21df8877c493827483ac054eaa0798c7ee3b8f7815661587b6aa73e6bd8b8ee110c81c39269bcd8ba136ccff4df7323af4ad22b8479d72a0705d88079c50c34d +K = 9cb316a3ac8e4ee13bdbf83909ae3b9e +C = fd4b64a25bb91e6c4cdd896d9e24846eb0ed2e8989fee5953270d5948b3141d28386624225b57348c779b2cfa179d560b058bd9a55c554395076870fed631770feddc90668a90a0324c341e78245eafc445a93ebec04bb1ea290117fb1b8b5c97a08f7eb9b3350f2fbb1f46a1080684386be72c371f489567eeec2143af592972b794f74966c3666feaa4c98c4add35287ca3f8c1be4818bc10cfe7708a40df1e1dc361b0ba0965396dfa5c71de0294b0bb9120b9c140e24324b73fd2996b551924a07cd2dfb9e7702db3e4aa612badb6915d5a6a7ace1a838b000b63ebf954810d73a3eb28a91ab81cfc74c79b87be5d3abae2b06bbad8a86871750b116d56d5fd8d0ff0cddcf0d71c88743e480943ff55fa823fe8de55a6185dbcf93547239e4d57cc508b124907e70a8754c775fe4c03073e329b3f1bb6fd9601dbc8c6a5768ea79422404ed986267b58cbc2dcc5dd67722715244f010f0f52629ee71a153c60475e86ff46d59ae4740e3fce5887f6c608408c4593ab47f21a1a0e086b9b6b2cdd7326fd6be5e3e08ecb4ac398141557bc14c1723bf8938f934848d75fd546b26228d4279196ed0a4c24ce76bb1b15ec1a3301c8af5156db3c1298a0a931f8be9f2949899093129e64ba33e9052c7111d2c2d1a996711ab23600488211068cfc2e7b01608bd30595b7ef16b63436cfdb743f0494eb153be1a1cedeb05c301cc94a7e6daebd905 +P = 0fe60592de0f3459fac761ba2c204f9e8c231a05552225ebb76d001c268f873e657cb1c7b57e28db3542e0b8a71cf23ebd230ce0a85fd205d79516c5e78bfe1a3405e32150134ceea840924f9224b0a7ec58cb19dcb5930a4b192002398cefabd4fc11366198deee1b9554a639712ccb2d353a32cc7b1e79d2e1a8a22d35003e846d1f1c5073f66a03c68cb4ac5d42183ea5b817a61c07ba5d5eff91deac37d7fcb94c9c2d59c7c36381780482f4af15616581fcd3a10fbc677182fbac4d09def6ab7fd54b4adda3257e7d094c7549bc7738a248106064c596f5fe8c514c12e951d74885f0ccd410cd6927713c3813826bc1ce8dc72157ca9615f997e5489e31eeb29684442823fa18a7484c6fd12e6dce930daa7cc1f0576436e84bac7d9a23806ca74e0400d7124c44a0e9385e7c78a7d9dc23f2d5e50038cc0ae9a875e38022f05f12690be7f43fdeb0d965d92428b73faba1228d70598ee19a248f971962d8293848c955c665c8fbb9cf024a5e623c8610a3b128372424d9a5f32ef0a224032c005e6b218e67ffbf4c16615227dc76aee5b8774a37eecdb9071ac956ad50ea31390a82009f7e3bd6b7ac440bda5ac87b45fabd7747c127d451be1fba3781a98fe9451ca5d342cd7691f7f92a84c34efd69e08e8985eb4052f88eda4f44170df7afe0e62a906c2a78b9be809655e2520163b069349f6ff04e2d6ba1cc1e35 COUNT = 84 -K = ae6cbf0ef72463b94a5227f9322e0cda -C = 6527020fcae32523b3e615b928e7c72d0804d85e031ac8bc722a89d1c5fc219a22159e77287f3e3854cdf910144f9345cec930163484b10292e9c9db8cc13f969564368237ed209ff80ab407fd86cec175e420b72af3fa9c37e0fa8bcd84ebefd45cc0fe20aa2884bb10579e591448c4 -FAIL +K = 53699a76990e923eb1f07ed97f92b3f8 +C = d74d887b0aa1440ac5f9907a794b767f22cee52694452f5a6250d11fb541f0b849435aaac59ad57da9ccd04146404a2a817babae2f1ab560ae05d23e31022f704485792b923ce78654cb6ae3269e6adc53d8e5304b5afb36ed8b4800b9413ce50111ebdea4477c6332698908d01da44678303e51f21d256250be30a52a24bfcc9dd4015df2d3db59574916e0b03a02a9c9974c57ec22f545ea458c56575be4b302d598e793445a890efac8a9a57dcd8abb829b1aaf9ccdd3159552e6df30eb0c90e40d0d5a78de2e864a4bffbca85776ce1286e2077a15b163e515e7584e0d6ad4cee38b2b90285427276632ea5979699190085758358f5f4381e7fece77f6e8bde46212130a1e11d568af718670e38f50536abda47c2e3b7c9cdc19e2be7f4807f9cb636fc42f0e9d5d7792d978002a198ad72c1a7f0578279c036fb11673cd7f1a5155543c7bff14ffff3189665cd89bb133cdae7dfde9e1dfafe2078781b7410d52d9a5eb1f8ad7935cf49defdd79c3678d1071b7f9e00b337b650e601cb520026f8f0af943b1a32087c059c1c86298844acc329379abbb3340a6bc5737c876d7964d6cf0f84d896127d6b4e20b0578c3aa442c0e195184cb1948d3c8f88a37de25b936e65b1944b94caaa5458c91ef14bb16171afda02617cae66d9633f4e927686c1ee02896ff21c83e528d5559313dcafd81132f471c7f80b790d5903d1452aa0b1b71a0c5 +P = 8847386506761a4c20f482ab88f5fe724a4aee5f5a798a59449682858fe48e60ad4bfcda29fa0c8a0451b44c0363d042e830fac76303e0e0993d02cec6b52c56d6604b8bc4b00f28030177f3181c8a5430c3a129de44c973be4cd92cd19d8f760ccf28644888a358f9fc4a91e1b0c8c2b6aad510181f031ca48056c6a96183252851a01f56db6a59a71c6cdbd7298abee1b49b8d47cb8b41bf2cc2dd75d631ed419c12fb1a94c1b10b90cc1f23f62e5598606a1854d5a7c82f2d59f2363fb23f0365732414b96683313b5457f1cfe5d24eda1bbecf7a8e03dabd21d24fd9ac0c701db80ed4bc47e54584de6f9313f1281cb2f44b1b1c4cf2b401e03d627266daf6535484fd558e3e9c674f7f2cad2f38ec980600d123a114b40a2cb5b5d2d21ef9a8c297e609477d8d8d7f552d6a2f3f17ca7c0336d7265b5c73fd285b827bfab20348faef4a6ff1605480e11552e631f0945cc3ee19a6fd09529b7771c4149e2b86171cfa0d5490c03f2e768eced294b74a548fbcdc424ea71d3449fb95212cb0d4c091425fa6d55a9aea23ed3f3971c52a9b9946cdd51d2639ae58e713012bbf81f28c2437a2696ba7a973c45bdaee92148ea009b43cfea0289eb17005282c4f0acc23981bf668671b80cf8d4e9b43602cc32271e33919e262f0476c13d62090a5d2c2f888a738d13ff4180d4edf36278ac9bf3b1c2e5c32f30e67e25178c9 COUNT = 85 -K = a2c8764f733e2e62ca24cce817d2dbd4 -C = 05e9e3c81cb133ca8a1bbe46007b88b7c4ff12d2551ffcafc2f4f8b84a130e71115e00d97c5da67ac1ea1fa155c529df84a70533bcad6af6ed9dfc031fa10aac6a29064502327fde83c9d26552de4fac62c1fdfdd2fa0fe6e60ea3da2ce9a0e8f0f5900c861cc0c743382ffcf83e9bd2 -P = 76f748b86ca56848321652c3283390b66d115f7758f07af38daaa03b42437a288724d6a81782cb3a80390ef3acdbcf058e7ab08a1fb66b6403d4503f046560b9ca6ea526e55fa295cd6da27d279c04bfdab384d36179d7a40622be14b3e62892d4c5ad6868 +K = 976ab2e5a5d7681621e02d6a3b4f5901 +C = cdc822df6b5676cef6b7d0e01a630c1dcb5ec030f02971c94814b1fd5ff4d05ac1fcdc3dcd221990cd86968b47779120b2a4986c58f93ce3af9fcd363f8aed49249a41d95df24906956b5c03129dd34de0ab4ede27a365c7ae1f264ef20df94270d052a1d1d5a1fa45220849a2bc28e14d17f3c2acc81944d8cdf5445a931eb98c9f4db5ec3189988e101d313fd2c563553a840cfca9deae60331025baef1ea73764d9b7ae74b2fd915147d450aa77f502247f1753b95224a690da96212489cd900eff34e23856cd2ba8c4947b0f8c5c492a3c83a2a99c64522d4535275156784c51eee29ed86ba8b23e5b58149803c548d379c1f33ff39d52b4510582dcdef64c3f930e1320601e8de4869e1d1e8a4e2bcc831a21c851b3e6a2bc62dacc688aea9d0008a509e11a350318f71fc8df3ec8bad4292f6cfc72067d1a36ca1a0383821a631d65e15dc0b4e4e267f3bda6fe094c53bcf3672b11ea10fdaa1b5c6c11afd5b3fc478482b63d592e6fed9a4f73ef459b8f31473848badc01ab3c8125e2a89fac63125ee28007dea6af87af83397e742812b5b80acec37c4ce10c2bb7fe1b37a5ccf9bbf116c330bfadcfe5f4d6ef66907cec53c891a779cb5e111f0da56efb387c0dbacc507f26442c5ad6d24d5cf1bf1c14c682d1d4238aa20369c56c38ede67778dc90d5f46e434f5b2c574a22ff82fac2d0bcc71d207afa3e764d86e2e42f9d8b9da6d8 +P = afa9867463583116b33420c6a282762bd6afee6c7401eeb6d186a9f8ae51291bf8711d8053f31f811af77ccc22e4638e782b79da5628431788238ef6a4d3d019c3957cf0a361985cd9a328dd388c3f54288bb82088bea523aff9cc6b6ed5e244266293656a89accb7d96f0ecbbce38953309a52c7f9452c04853e6d40471b0ec3fa9d3551eabd8c7182936d130653ffdcbbb126969c870de82431dfce2bef8e7d780a48bea124a64379d6feaa1a52e06897f00289ec8657885814a367beb5309341e32651c7d911ab8d0f9099eeebae3f523675f81232cabafbb02f520743c11cf0298ec671f1f998af8bfc4c4804fa5530986d68efe9dc047c7ea297cb64e7c2f0ac3f61d425afe61c37ca0baecd0e322f52e951a29f7d5d8265edfdc224684c9bec672be27464c6d8e914ad81eaa08209d55dc6e032d53494472aecbe67599c9a1badf44c694d47df5335cde56b9fbbcaaab8aed690530beb760888735f76f175dbc9705f6fcc41a40c53abbdfa86dc4a894a302117b708717068bd8809925119701551bdb2af890aa1f34c408e450160031b8e931b0fedb4047f2e06ef2226ebc563b724fc7ae9e28fb8688108b226f5aef579f6add624b0cd159d889ed9690163debf8738f8f46bd9f406cc03bf492dff5efcc6352eb366604296c39852ed075a72463d3a623498c89f96769375a5976075693e464d96198bdddcd13b4d6 COUNT = 86 -K = 922b7cde5378016ead81a033d27b2137 -C = 2f789aabe9a3ac0a288d7ac4071cbf1d589185e3c3dd784b39c08fdcda90862d7703ab8dab9cbf12f6a1fedaf3cb2f14639ed93674ef47c38265df3aea3c7e9047eb859aaa23fbeeb07d6b2dbfcffff31cae0de52482572f9ffdd289e5764d0e9dc8bffb9b5b9c16af22d762539eb1f1 -FAIL +K = 8ca5c378055aff7746510e8010c4b38a +C = 4cbd3dd7d9308e87c8f003d24f1bbfdb24219ba927ec02f43ab8a6991ca38b725dbf03b8f4578644ded3b85b3c5a8baf84fbaecfee27c138f214b1369e0e1fdc4b50f85f6ec5a48632e89a05742c15f2268728d2560f6c09582d2fb5594c7e890f9422d4cbf84da1bec3e48c629c103b462e056e12d16e2b50f4c0c3c761bc06cf96d86ccd3db6b0b2f938e30fe3dbf648416ea141fca1a3c6c98785952d9d3381d0313cc8684f068b7b35a0137a7415ef919a673c9dfa9196391019c2d8aa7578e0a986ed3f7e91358c56a381537d6f0cc398132bb679a1766bdd905631b3a40e9753d0548d3394099b045dfa2f725ed2a7c8594ec87c2b4d8e1af19e8996e0241fd5c2152c727e3e8e27247b2b825a59062cc5f62ae9e38c6bb4781858944c4b099e34702665aee08a773ee5d496dd780a5bdd947a9494ec6e0697116e46f6b28e18f431278a6d656aa9bd546eabd4c27b5d523747d49a5aa21e30fd0255c1df7d9133d4cb283c6f980add306ec00161036796a0e93889374de4ced491403de5066600bdd0c42f4cba7aef33cb984b9c38db4fa7648c94bdd4856dddfab1c22e4475e99bab36d8fed3631b7593e870080caeaed7684fc10896a7a30467d403c6f7d59113ca054c18b6d4f2678cc0103c95086523425af5bca95ab94f1f8db7aaaf8678efe171d0c7d206ec7ba8720931073911d80c19b34549850676e1512d2af643b8c00296e2 +P = 396a91fbe151c0a97f75b5ea86b2268c8f36f333c55d85c472390648f9014b99eeb2c896dce97ba625915185ddeef30af457bef41feb20fe126302ada1ec2e387a9f3d989dae7459da1f91eff11bbd1de224851b48f0bb2296c9de33d6c6c9b0600f29354402aad27e267411039afb8c7a27e8c11b0f8db7152ee0a95fd7be453e1b49e50bbae99970535c14491f6b91006750476766c0f31ded701f1d272ae8532973916aa90c2b87e2fd281873fc602d8cdc0dd3b284a11895244b1a3eba0da1c49700a1ee688ccc7e3abec403f2d3ffe54b567404b399cee3662c3291a756fb514493b8bfe99a551d399618fa9264c0a5b19d8185debbabbb010e4725b30cce9aa5fd0606946e371c9c28d555a5ab33a9c47e46bd96eaa10153efd29edcfa364b55d224c5b02ce8cbfd7aa1e06d8e08c52ab13db96f97b7dab65e395f51436273521398c31a742380443bb7f6ae1d796179c5bf05b0ad41dab92d3f8f4653d894a4ac463b7b6bd1b8660091b5cc2d1d44b271b90753d778e17b5acb8e2adf603f0c78654d3f21563001c28540c3d122592efdf4ada7fe85286a078720143567a867901c278f3221cb7bb9f381edec94072c7fb0947ce17fc66a55741f04951c6776e7cd0e33bd235cf779140a7d832684829aec2c06eb03e696176e2bf35ca84f119e68fbc11852aee81cea1c8ed99d63aa020b26b585ae986dd3b8cd5d14 COUNT = 87 -K = 11411097cd6a8c4fdf9ef545d64552b2 -C = 30fe3a1dfd37a3a73c827c4baa101be7161370f89723ddb7317ecadff3f10eec741503b78bad072f2b1fc2cc685dc5656557d47981ac52a04ac1d1405a7cdf261a84fe723d6140378eae2996882662e1ca680ebb2eb1126ee723bdbbd410b284285ad0fdf46179b672069fafce42ea82 -P = 6ce910551316ca4ddc3fadea83c39abeffd7ee75b37ebeccbc567c87fd20597c4cba2f8a7a191a20ab759adef0b04959f529b0f0d3143b893b74c7da7e5e9dd86ada0dc95ebdb465e415c12cda93bc43f39d26115e1ca737785fafa1474fd1372fcf68e7f1 +K = 6b6eb0c971f5b1add2fd4b2937ac125f +C = 0953b5b9058fbcf93e3f75caa8d8538e27b1a4d244eb1c6517b8a67e3af89d23ffea36ad86832eaa0fbb893c3b843616856b576dc75fdeeefce7f97b6c6a0507c70cbb0edbe8cdd3850597f41e15c181bc088000000ffebc3033c7d5b60bd34415d4b7dc7afb4d5c5912503c172e74ec56dbf11f291ce2338b9c00da4f0199a62ff3d602e809956056f5426c26c54e5a2d19a44099a4520f13687ba616715aa2d975423629536deced47ad2c64dbbb23023c0c3d3d07c7bff873012fe47ebd17f6747aa6dfc650564ebc0ebbf2a0ca04c52417241a54eca0a25f8b12934e8e7b939b7c4707e8099e898ce047eb7eb736bd8071e781e20fdd75b79ddfdb57fc3f27ad74c099585044c5b75638afc1d1b2b28edf321be1f1db7c460af2ba349fc56dcab0bc686dc37845eaab3d7b6fb09e4d2f9e9a78349fc93588e9a9edb65231336951f46ddd3fe18804f147b5d3d3e6341e789e8f5f57fe81b480d912b64044f2833cfc67edbf4463731c51d70024d2f06cca582f704cd718a6f3f711af722c74d9198dffa74299394b06a47cde1f6acb716ba12775dc3c92002f29702b713ae3a7dd172452829622374cc2feb664dbca86e82c9ae5d3c6d6e1e67f843cb2a12ebffdc59cba98b35f4e6732bb96e2dd9be4a517116f7e11637c7626ce6fa361e4312dd6906b29f6e70c0785fcca06154466da51476b38c88cf5cbc0036f7231c64ef0aa0bd72607 +FAIL COUNT = 88 -K = 36dad92b01b1902a992b38b49cb91f22 -C = d9ba14af0167f890ed6998527fdefe04f5932527ac42aa5fe12ed548ba8cefd3206308e67b6570ca788f5b147a024b9af7937887af79cbd25a120d2371edd540bd266706c4d254e46da221976243adc1047589bc8d8e306f54b13cd6789f28139361be389095de675f42e1a92473f2d1 -P = c6b6e6fc1670dc97d466f4ac29cb427673ada2b4bf0f504e6884529acaec4f9f3b6c32d98aade014ff9904a3fe00f6098d9cfffd713f1a77be2d0eee549a0c7f042c440e8bca3c0fc09c620f269bf38c5ed5e9db64670d0546d1e68fcde6b3f9cb9e2ea11d +K = fd42d987dbbc492c3fdbdab5dbe282fb +C = 05d50c35ffe14277c1d75143f2e995d6f8aec0a9529511af8c420a7600c520207f40265dfe0fe2f6888fc7c03c5320b851e18de135844dcd37713be24670e96639846bb4f2a2cb6139a92410ee7b91f3f2add20d631d90e1a2e0b56a07dd575ac897030d19c57c4ac110b7b9bb6dae0753c7c48b61c8da3dd48405c92761c61cc68787378844abd5ecf4e23440d9710b6652b1854e18beb89436289a8b5319f5e3b8c5b9c96ac917014f9872d9cb4c7decae408a7a81ad588170b0bd2de89acb3a32940ace53fb76d6ff4e474503c7c6b6fa2b5c85b7582ca8a4a7aa7ee2b682f8a971822a7866c308ca1ec737d7db5be36c71694e009dd23210ee56b1f761eeb70aa23e2908aedcd2ff65b9baad854d988e8f9a772c5a6e3fffad4e1beb9f2dcb697d9f5ef85d9fd5e649e1f85aa5c2ac2bc68bd776aca51ce80a51a4dbab53e86e8d62ef532d6d42ccda737620ff061add3d5f9770c8fb3b35c6b84cc2667db6a2d564b52923d36b22b3bfc6165b628e2b74f053b123ea755a4f4320a56262f077e151a3a203dba5630f6263bfb6918d8e70700a827f582a8e0fa8d3d5e67293643a3632a0fcf92601338679a68ec4e656a5f22bc953cea7062506ba8f6e6a6e4039acff0c2173c5ae557768942ea1b2fed26cdfc4e4d365de3b386e5d7c87d59e6ea885d6bb0a716dc641b55f33b490a7340fe54c2ba6d3c7e2e5f02f0ad02eed6aa12cb4f23a +P = 8509d24ad269c35bc09cea89f37a3dbf4f4c12987addd2e7a9c2d8560e45eae10c81c7666129ac319ccf68ed9d1d91817190cb39c2295e5f28abfffd6010c91f881c989fa1797bb3fff1d580b32f9c2cb300e209828a136b27e436ce9aa2d538b32c621164c1219d1102ee64bab85e9e5b65cc196fc1045fcc0057afe36a15abf72510a5ff4a9e7cac193617ed04b53098053b3372f52b7504938432beabc5bc2dc2eca501a8b880f35a8bdcbbd18a7800db7071b8de3613b4410aad9754cbefe345acb177561417ea37d56693da8b21001b484e613cfae25b3c22204d27a1ef7aa69686261b6e03cbce11929c69cfe2116491da3db5162cac2e787bbb809fc44b873581df6451b9170405dd7776e355b3bd5fefa77d73cb2f8044502ddf81a491fe803d826bcdf28ad1e259be33a075b653bad665b6a8d70c23023c19f0f14b68181127bb2e289fa0cc27186163ef15eb934e81dca6bd111005c363b31db8fe01d2713e85117eb89804be23760ca8a8b35738a52a1544f86719521766356534123bf3f35377e7138fe103c5ea213ee682ab4f6aa3070d34ada64df95576ddb31eac19e031a8edabaf52c56dca7d4b90b1dc3d75e9f2edbdeb54aa73c3c3551dcb074207487208466de43994201d203c4697d87ecfc4983bb70267d4bbae6a83896ffec5211b83a1c55a57d68ff1ec23d180d1ebd7770c09b8b51c2b19b099d9 COUNT = 89 -K = a3b4b86e55de502ad8282dc0ae6af9dd -C = c622b4f14ca65926dbe021adbdf7ecc07d5ce47cc963625080c9fb309aea4d89a09ea49401d4b5c58eba52b16b33600d8dd10a457fb04949ca00af016dfe9f61674cb57764a540268a9bda11d7e00c793a4e4c18f98bd673874d187231f0d54f699abff0005fa8b4c0731052e361214a -P = 37e74268dc8ea026547b886f61987fd1da75f5d1da66bf27cfe612034f93ed7fe56e96a6265955fbdf61496fcde17c60befcbfb7256359bbb5e81e688d780e09cb18e91ebfa99018112122b26f94df21a0a58bc602e0cf86a94120f67eafe659caef29eefd +K = c4a3ff3a2145bcdee33c879a7a42e244 +C = e9642c048a78451c3f65e6e109d49ab68252682b78e440d44a2a91276532e0b216873f22f50b0a9e1ec0e4f1b583c2180b020948190f3a2f31f9ae0ddbcd62c1bda9416d80c7b303a6b9d8d2fe34311d217c1c73aeecfa29e29968d5727b507f25a0920ca6d95d4df33dd55e405b437d9ac10338da5bf647434522ba78773278f2686ae1d72d6ba41ac71f6d648985cf7dbd995ec35013cd613837518fbd5c0b2724db4346e4c45c88da0ebd011094b8049fac1dd63eaea16ecc837fda571e1ffbfda0f89c05dcc31aba791767eb13d83f5b5fc1b8c41c18df9409a4defb49e7db0fe836262f8adfe16484cf4434296d42b256b82cddfb9cd33ed8594b956cc017d9755959fefdd862c720d1df6e230c14e41acaf235732b812f1c3f66047064939bdae008b1326ceeb27654630b915ba813b3bf95068721c9dd272e863632b52d0d62936b8387b4c492cffcb623b5ccde4e526af8f3533c42b0b24d4fd14bed8cf08edcd6e49ebcb2ec83e63710525ccf31328194317b986a89e50c907b5e45831c07273896b042f1583524740adb6cac243e6b8c0420f82d523d092fd4d12fcc32d586afed7f6e0b4118927ff012b0dcc6c0efd1b7e48d2d63677974a011e2a0386c386c2c72dc583703238488993a1838adc013e1313451701c3987ca25fb3ecc3d648f3b1fef351c3d54a6809376e402a7ddbf0871ff06ac121a1074420db1e5709b9153f268 +P = bbc113f512b05d579ad9352176ef372cc3aa6edc17ecdd37dd621a90483499daa6b352935186a271c8af61888c3c15ce5d0a11d9c3d06c2ae3078f8cb3bb1924b8fda3bda9d4bfb4b21e621ae696430816aaa1302d4f9599768ab72f3c9eecf93401ab0e02f97ff593c3e855da45f90cc166e677b946f10f44e71ae6ba64d674d81e55c8026ddfca680766fee81d9e18baab113f32bec84779707f30f2d1930f379209acc4a16b2a1da04e645300d406818d1f76dc2d7959e37af68bf5ecf31f9d695e6ae71d57c8041d828b277c4b67f956558a37de8c80955a6d087cf887fd9c4995853500af6d439b36e5640c872e1e29677e08a66cd7b10341091a1b596b3da6cbf68af4969bd16a46546dab2fc9fe1c7ec7fbc3b274cda87a9c4784fd2aa2b85887579f36a6fdc35c635b8efe63b2c1e6ac84cd5e7b50a351a63db9a858999070e11d19702fe0de122278155ccd577b306e078c253143b153eb2a76cf40975e0092c8c64b662d50637e921c60ace988a766cd0b820c27255dd1a76a59d46935f480ff1f531c2c1f1076822d0c9e501f675d7301b23f5ef025a91552a0c84a4ed393def6b8fa75aff4f5368ae802314734163c998442536971bd6f4e40479d9b8032bc0131cf2cd5158de663a9e204b3e4e35d1b71d12957c6c68fb2cba3d3f82bf1723a9d80c104e92cb4189577db6fd13241de81b0f105ec0d5537fe38 COUNT = 90 -K = 6610056cb6dcd44288c16bf07214d594 -C = 0422e11f0302956b66633910049160ff791da507bd9a1c5dae716d18852a74fa7f5205dc96a4272a04213e2fd1a64a0e80350b05073362965edc9b4e662670e9a41c3d073af9abce2c5a85003d89234182071ac968dfccf9928508aa9e72c4aeac12145ed54c7342ce0718d815f83824 -P = b4b61accd11c672075bbc80f39770c2ae8efcc9f1f8cce5b63f4787599ac946814cf4ce65ff512d4dd28b949b940da5584ac46c2fab3d5131fc517e01f5e151052e98a9fcb590af73ac32d72308211c513120f6c6747ac58ebe8b6c56821d498cc56c25bc9 +K = b43553f073e08b515bb4f9cc7fdee29b +C = d16313aedeac0faa678fd0fab61652a24bad47ea0ea871bd72609abe545e341d1fa27eafa4da397edd78b44c6baeff6e5576598fea8c4a8832acc21dbce26b392ceaff5e4ccf857f4964249f0d02f280b191065bb03e7b0632156394393ab671e74e08103c6044ada4f034d6071d7ce4960ad4a5a6b223b401ae191098244bdbf54c9d2f58fadf9af7767d14dd385043bcc8106799bdf52aaaccb79b8bc3a928720d4bd0865e9529a3538e95994f6f0b60b29df2d7bdcd6b2b5a4f06324d0b6166ef2632a2c256c9f9d08b9460d4760aea1ea518e5817167dc8184400e3010e6274315f9b1bbbead2aee74cf2301ec4a71cedc9f61dabf7171fcc434ff96c059d9fcf9efdd205247ddd161ad3d99010b7266c40eb8edfde183c8992a4d82cafcf794c5d0a6cb0396a67340f64ef5e88fd9d5bd12d2519bfb72d984952a67664862196d05b94e7994c6ca8e11075d0044e5e937eb439f9ec918c4cfde6179f501b5cc63ab9b505e61b821ca7af86012e5e816ca28f3b12c092257b76b4e886fd4aa13da69de1829322f279733a154dd0a32b6281801274207abbd5e3c50eb6c0e0aaeb6d92526c9fbc63d055f76e549147ef3a7ca12826d3fae0e2a4bba10c17b6cd6a95eeb1aa9a17ae0ca1897576552da69299827bf5eb5c40f6abfaf9c8cc74f79e91478cf2340c57644fb97912f3ed05f9ecd6721744f66c7af71def522bf1fc2b5da1a2f2a6f +P = 7184f8e5b45b4102da482bf2cffaf96338edb636c98f38457d279ae26ed31381e5943cd55329d373f9d81538db414d5c3f94f6b63eb0d8875aa06058dc9a80c23729f741fe6b32c68c92ca7a0efe86b66b9265939226f0b91110a09f6f840b3888cd7edb1d5b292ad5c7373d60c9c244aae67c38bf687d49542738cfb0c6a5758dbed6982f89e6fadab4bb0d439178d5f9e8f93e3420ca94cc3f4446d3206b517ef66a23f0657eb4ef4ecfffa8e411a6a82d073b0f793116aa96f31fb182ff6ea126f4790d3317dd0c32abdc643fd7d26446b739637fe0ed198ab2ba061cf6d14b5c312abb7176b67f8130524231d07327e472ddb2b486791a38526fa04cf02a92c54b27b237b3aae72cb36dd5a5da559bbe5a4d6e473e69f7a6f3e8554110a23302da0696b9237e59af88eef06970a6e8ec07b63bf1a1f2fb01d92afde1f97ae510c7bdb97f25911109efe8f48d40a2ce68e40c10b52db41dcbc51453e47c9e62114d37d6b6ae76300d873c41284732fb2214ababb0d484ab77efc03d063231076367351f5689f3f7dba6f55130f83fd813f8ae9c211bee6bd99ff6a47fdd1764becd5f5a0a53818cf1275685ad99293d123a01be7bf7edb4e706c5f6c92bc5ba3b46efdb91033260248904ae80ccecba2efbec4d9decf13593a0decf184141d272a92cf4be62fa37d76dbee8731a2f20490be26989e58a164cf5dd39244791 COUNT = 91 -K = 8d61261a1f04f75943a9972ebbed7f03 -C = 81d2844a795c5ca50b4ade8ae04c58759e6ab1591c3b9fc799bf3d2c2e5562c3e335d2780c977309f76dc4f7f03633c163b7a01868210fb2853a783bfa33e037bd4168bc08e00486525d180e85e2309df6144e21f12ca00964a2f4f5fba03dfbcc8cbd847761b1528f20e661e07566e8 -P = 434ef73a8f8ba60b3aea08b573350149386b598f5689466c767ac3294fc192b27ff0d4e903a68a6acd047e6ad48b82737fab40c0d23a63da9a4f02850a04d6eb2bbecaa316be1bca45fa24135254b50823a819f7c5c32f4f44f98ff22360660f84e0a0aa0b +K = 3dad37737b4637b76d0f12e71127421f +C = d6e04ab463570f0f622d336631ae027da80de382bcd31c52b43953e7d9078e132d9a9540aa5cb1b07f0e878d6d9524a9501ecc14c08dd10e9d934cebbcc3000f6e371d3b44406255cd2449f4a78ad15d1dccb809b6029e0e465b6a80ab18162f2d875d9a509b60620afb89e6e2b59c2960e7af9348b5e20b0a34ccb114bb8809cc8546e59650bb8959988821903116514fe9737a07766690363f35b6009d664ada9ebcb6cb488b805ac0f86b4efabff43dec1b78133169dd62aca0f005f8baf164370497ab7ee73e3d71e4efecafba739cca7f5771324a2256069df02dba21844b7f97ca8dffb5cd242759d73ff6a5460ec53ff52fa56e94be97db0ca72d446bc283045757d66743be97726782aa06b31c09f2ffb45bc758a82891a2da3063e89f38d6ea9db0ae93a5a4e34d8ef0c895937ac8be230533645a062409a5af21942e7dcfa16e0e162beb8f6acdf923708b21711a1655837bf1012fe643864f5492b3c8f6937f430931fe1762a99aca1af311f110d9f4048592a75c0a65be811f6062effc95eb001d24ea7148a3c8f5313d163f5b7545aa296372d7657507c3384ea195146dee5aa5257c9c4bd0eeca7a8165ccd73a00b492c6a1257e5df57257baf7f5b50258a1224fbbae3447dc56030322f3f8f372f61c2cbf1a9b37d21423586f0ab2d7c90aa630cde5fef76efb08e1e2a54d1cbc1e28a3e62044f3caa44094c51ddb2e22fd94ab +P = f332ed4bdefe4da30cb2496fd6e832c249a81765f7f1bac3897fc4c341de1a7c4eb5e12baeedc9fa826be912af522f0e90cae0af7f41b32080ea20eb7f03b8f1e1ffbfba334f434b9b7ab20f39783a6572848f51b72bc0ff7fb20ea3e0628aed64b5707e8b270444e8fe0b70685e7ed02b8f585ece320b4bf5f4b6c5cd6294770289855e46996f0257d076a256f6f077086c832b0112a4a3e6a89d8095d1abdfb9b87b73e33b6505b2f548cf19326be80decaa04531f1fc7fe620911c694c2f6cdb8c5dc02eb3545673eeb0850fa10c444b7df3772ba1d1b4c2faf605649e9a042e829fc405d93bb07b0444baaad4e7097488c1e35dd295d833a0d333ccca8faf7280baed7f7fd3e06548e32c0d15578e0fafd3f57d9e4864e4bd65f7a2b6cf1e7e241be17ca356fa787ae18ba6cadf71a180dfe1fc5b2994be5898f6557b41fb121eb5020a04371bcbd25c1dabde894f62f4487be6ee2a02aa2d82fa5e8af395265f4680b16d3105ccb6cea459cad3ab3968babe1f5e57b06d5420a949093e527ba37954919b20e5daceb1cbcc9ac77f675b477e7a45fa2b5bc340ab246d7be7d156c1a84569dba4aa34e87c10968adc652f6bfe2a44e18e9276f8036fd06dc312413e3625f12fde854b6c1e5dea730026a7fdf17808ceeb54bd775ee9b40a60e3bd28bee8bbde204dc1264937d9a2dc5b30753f0a1586c5aa3032c0f7ed42c COUNT = 92 -K = a2391a7a3f89490b239c5f2241e67683 -C = 6dec73bf00e1fdf63d340516d6785a8fc7e11267277c49c3b9d78a78d6595cb14c34fd64cd3ca29fa898b0e4a0535340764cbf7ac1c824b830d03f91b19f281bcfed6aa844281e521599a530caab458cedc338cbde8c63ed00cb8b9322bd6c1c3efb936330280eac65eff960e3dbd407 -FAIL +K = af2bead3908e03b2d54228157ca5524f +C = 6b93258a88f97ab266567bf76ea8c1db918b466a36776c1bedd3add6ff2d7698c31646189d430bcc1271e48f13e8faaede8393c2a673e5207c9d0843edd1dcae14ef9792c052887fc8d084e4eeec6231c6e3b97659c7b8469f1d331fd4cf1e0c14525c489d018f526ca4912d8809b8e764b330db3a3e030fdfccd02416ac43fe253a18d125b834c13a0972aabbfbfd99c46aba5e803bb98f2f38c6a3514ed061665783a2196fd28a2161a0b130d4bea87f03d8768dff627574a8bd209629a31b8c4baea3c00fb7fc91f8f09067499c8ce373ddbbd80d49dcc2e10d25eba7e374599697995739e02d9928b9a05942d96a73120c67128a33e516af1249f282ad8e501fb494e6b58022edd0fb2645e7c18890102d2c056c199ce72949352ec97629005b6227533006a84d73185cab0511840c44d0f66c1e404e8b07b3d874426e3f5c376d9d200feb47198b3e1be9f6b2fe0c4cc0a8158329e039a6c0b9987a12f539c2ea267b80e1fb5e4a528064ef5368e40c2bbecbbbcba4954d7b4133aadc241b080c1e199fc4341795a61b84fe7e76ed25f8f00144ee221ceaffb07d03845bd299cb3d6b7e314fb06f3c05bab398c24c2eb5d187f39b128d5b0b0570a368267ecf29d94e297be32bcdad7cea8dc3383fc98e2341c477dfee85b6eff246c09f6f18539bb734b4916930bdec4c04b00ef5678ef111e59f00112cd41a2d216dd6cf2a9e60d780ef30 +P = cdbc5d30f05beb556877e6cda02486fe259b5b2a0886404f510eeda0504133939739236bb55d50c696466adf00c2cba2dbd60be823f0c5ba95a926a24a7237c7eca8c8b9603f58e171044cddc9b80f177de2345a34ae51a152c1329dae907ce18a37e8e94cbf35f7890004bce577e777ea522a72bdf2e5dc6ff31030437bd43a1b814e9aa6789a775e36f9007fe73d50c7478a942fb20b8d37b906aad1a6c5e7a95c71a42b235a98eb615877277da38edee8ceab6e1642aa4446e0cc5d963435a24336383055b544839bbe7b3d9de0554894c5cf346790260131e9aa46aec2e56783938f9ee4905f637c30d8bd44fb3301d5a9e1e96c95700c95e95b937818265bdd3e77c0be79a4de38cda072fa5052af96d3de26560db8c33d315cbbeef2c1577d137e6e41159ae69a38db4aca44d763e85f41d9062605dbcc07323118f20dc28dc7adb8fc02c54effd2bfc9b6ebe0c343e4e5765ad70d6cffd6526ba50e207d9f45107a683b4925a499bf6e232c00a4adbab2f00cded7a96e3fc3125cfc9299cf2f3427d65ba0cca686dcb97f243a244dbc0957f59c2eef8bdfed81da73bfe8d0125c7108446deea28841471f7a0209b799d3915368e0b42df3808e9f6e20ad24c20e1f370c7ec7f351d9b99aaa993b80066d86f8a1b92722a244b49e9e97558e6d8a82260785a30d106cfa210cd79a6d990f0657da90006f53cd8072272e COUNT = 93 -K = a68c37800fd9600014e97c9619d9a8e5 -C = 8f2697737f68a502853624419a70885e5a229c644231c5df1d9f00c2f78e2026388462448d8bb2ea60719473aa43070d13b55e8f196dfda929276fff9b3531524cb915b2d5359be5725504a2961bd3dfa8d933f57f578ae88f492491598044bbac6e03b42957019f5dbef0ad73c6710f -P = 8d3ef41507300cc7cb21edfc1c250240656971adf000175d4ed244eafed47eaa551313945addd96754e5883b3b23c8442a8efbf5a294450f01f4d4cf84b7fba9562fd818218aaf5c4d47e314f5ce3ec6a9c03b95c33727cbf430ddaa6af3895f69aae07780 +K = fdf1b758f1bdc27debf4412c5d1ccc79 +C = c69b4fdaa3bfe47f2e38f5973933d9bc8b0415af9b08a5834a61c51e5fade9afdaeed1843ef2fdee0646c896be06d087b066dbbd7d74668ba0f241cd5285ba80ac03ef391819a152f53173b3649624242b5b0e1ed99a5f460a31672640142f43ca04c3f03745bddbeb5e7ebb6823265e1202d8799f946733a384ecf2f263671f7967ff1b11eb8d1d40842f19371fb1efb312891653f2f0a4f9430a3966c8e78ed9df53d7cc785e590a77e3ba3c86d4730cea0d21470283f5f9fe77ec0519f728755b3b2ff557cdd65118bfd45de5f04e81ea19cd05c5e4679d819b8777ff210bed0061ce20487ac4f74713620e7b57b41ca6f76b5e0d50006ac5ac1ff731f2024e1118a93b819cd75335dd82d7bbc2cb8796e6ad42ec83cc09cc1f1ce0145d87698ceb10fdec27470ca1656092222f8ab626fa6bd9132d3fcd49b0feacab573ba311fa54180200807eb3215a659a40808cf45301b6e9e615141a933cebe2d009715815fa8da130b7658703330fa3af64a9e5cce0618d4633062beb00a6347eddf59f85ca7afb2c217c0fdf784b435af57f9fd8576676504030619a8cf3f7da2687608d85de6b1a322565cac7c2a6c34fce2a08d24585e9cc2edad8177f932524588778891317d2b4479cc569eb79420defe04d2e52d3467bc62a7b0906be7fc543d12b184fd968c9ad652c848c8522a0eb0977391b3d13e2f6bef0803e823ad06e2322b03d42ae7d +FAIL COUNT = 94 -K = 6f87b6201fe1c74aab863f97d4de3d0d -C = e22d1c07c3cc6cf0eb403b4232da8966131fd842daf1df60b76a853c4a7626b73407410f4f71eb6b3843970e6be1f3eb15a2996a1942f4c33c273bc8cac3399dbd7af12e3ec874d3739bf4c181e8b9cec0f2a692d3f891c8fd0c42e37d0010be64925cc39092c4b2fab49334f8190f11 -P = 300014c9e7b68346f8b680995f89456de6081258690465eff06c1e59c02ff0d3cbcb0283f4b2925fb55d3cddf5fab4724ba404c412b77a01bf8cb509926aa1ebde9d9586d78edd6b8ceade60f6b50b3046291d1a204953b3e7fe3440e885fa7bc8fbe401fb +K = f7ee735c2b88b5833c915080fa588f68 +C = 0e5e4b485356e7ccd1c27d233e09789df68039fa689cb8ee753a575bed9f17674d4b61399c3bcacdc9f712f4142604779437ff445ef572ebc67838d506f9ead59a7957af3907c65b76fe0a75971c1a29853488d90a24a3341b1bd1767790fc17b43c2c06cebaa57f8dab14fa0ec7434e992995fe288a30b6281ac374a59bc27fd2bc9d5fb07c8949848e02d3f8b3b3168e5691f9107a6273f8bb24b548e6f4639041177735e7f5982f2121acb37380f8ac1fec71538c0d772b94f24da47ea25e96424edff8bd30f797f7db1aa1043e3346efb28a0a0e7f2167d78cd121d5a9af7413741a9a9eeccfcc9ccbb9c144e2e73d3744a76460629a9f16fc7c1757969ec893f4fd865984313761ed746d6d045a130b98cb742da412ee804217eb1c27b64b8d808e32ed76f9bc6716c15a247b90cde696acbc51983086ae42ae86d9a1bfcdab98b2232936afa409a1d0f64e5e0571deaf58efed56f6e8b9570e5a26b11b2cb8987671c85760918b791166aafcc996dae148acf2b7e4243c9db6c52d3f071f1c5c2a8556419e4ada9ab67d6fe15a9642d3e8e26ac699f09cdad666a7228bd691ed2fed68efd8fe5e74706147c4e05730a8b353c4efccba34a9e909d450c19dac0d0effce610ea6c88726b746f9bd4bc1624592513d947cfb2d8412af0687a5752db8ff49cf58d5b9c9ee71bb7a46d9fa505d1f0fdd01190e7033e14bf7930dd1b71f0887bb58 +P = d948d8814fa11738ba1c7a35128a7802057897009afe92149e45d7793b4ecf54ef5580f5f1132df019b8ec13e2e82d1a55a9b52a720e0866de5af8dba5cd498546329b340734ed2427ece499db2964cf88e6e292b54fc095ee15237eda9a37475bcab9aa797ed30cb6e4febfe589f28764d3dcfecb7169234755f1e9654797e59e9105136c949c754114ad62578b993acd5c7941410cb1b7b3baccd053be7b310fe365c020d73addc2c2ceecd4a9de202d7688ffbded11677f847bcf9689163fc8688de61266aa6322b89e8431024ef274c6d23251610360724f74e6747ad3461cc8a655fd011a7d6245385f1fb4bd7b4acdf6a68a583abebfe3d1e5e476fc0e693b5c6c80d85321b52c56c58e862175f7ee6a5e56be191c70d3c83d6f4fa7bf8f63a4280f09500b8017598daf50903b039971c42a3fd900d126065c6cd695618a68863a36f711758018abb02bd7908a45bfc61b526a7b2b72c494b789aa74ae2eb9d939fe40584a58a3050eee7e2c154387449febcb92bcae018f542a575bde315cb6de085c07a36be03499d230999c4de774d9c9bf1a445a1582579dc305ed5df348c9d4d4df89a7a32c262a730cba46add3167dec384e4a97662e02f4c8f438163d042d166f46487613e5f69f7e6d5bd38c83a4ffd1a953625ec0d0f7631c5a3d154ce7490c82a1f4e4c2f695d167e76651e165e7842af89062d5c268a45d COUNT = 95 -K = 6f8b5a5218bca3b4cbbb0404e4ce861b -C = 76f4a300e262bcaae692e56943b00637e0a406a5d9ec5e6d0aa89d15249a465024cc2579867dafa1ff72ea812a28119749cb95179e01c3206e4dc88f649e78d35c2cc09b5fb96d8e2885f68bb6d94b9c7b8e5be6d39dab2fe7b62668d2eea3be8c6ee7756c1622a48189f7fa2770e94f -P = 64c94fe60ab90e59607f2bdf40d4159d43781262091f8af72a41dee132b8652e627d65da2a2eebf363e0d4ba8d5c0cad90ba981fb2168c1334e431f01d38a4a19a3c8015e6ff1a9e37ee96b01e8fe3ed6832c110099551f9c27dc88d1ee16ce6551e4e15e6 +K = d1c3a2242bce694ee52b786ca9046133 +C = a65c910a7ec009917089905333e01dca92b0b4bd49209c02b96be857f05c60dbdbf530d30b01cb4d6e887ebf792fb6585287ff5fa1845c54a861ef4b4800e8fb490464fc529e7f30754e7e5aeec6fe0f7f96eb594c9ef297c17e0759d665728e8f4a21709c00511db023dba040ddb21f190db5969139fed592a44cb39b26f1758c55555f3a0578c44d3c0a7a6eb4eb8b8fa6204fa623fa08e0177c6ea780f0e25af193453a749205c622c4d0e4f8be970e8b492ba47beb4961105441ba207a542ab5e721342aef23d7f96d7bce63fdf5b6a3359c28928c4f0949c9479d5305eebd5e37502f27e4da35aaad8388e8d7f0e717bad07e0e6081faae5cd280b9630cad6f02ccf55f4f64797c190b6fc89526b988b7cb2520e1239678449fd0a9e7c9de533ad4623ef6c8346a522b0821640dd4fa952b32da49bfcab4ef930f39aaab9e4fd79ec60fb557a5575591a48d78f7c19ad8dd48dea441f3086fe66bed05b2eab62d923574d16bfc84eba32e550e04df5ac5335d8fa8c957ba3a259cfef1310d3c145e0a3a3c3d79e73c3d0ce636b208f0adbde7f605f4e9b219989a1d1ef8dcf9cc3b50b9ebf0752f2d24aa46d20151153f1955b7fccce8dc21b49f5afc6abaea2b313bf67167a635f377c59c3a5adb3d8e5db867a94d3b9c072f32e9cb6fa89d36438e94beddd0301b1fcc9c459fe7359234a2887d3d699cbcefc41d2bb4e18b43b9eaf1b5a4 +P = 6a321593277e11bc064d284ccfad0afc0a7b5e1b9300184b854e1299c36a27fa216528df7cacff31d09d297d418d3a111c2a2c245e29e078db2bdefc87d6a050345199eeb401b4846831b6f5e9ce1875af54726c0f8ca55c9888f17d93ec3cbd715225b6411911a63734a1ce9854eb97263971e84c010096132e25a9cc8acabacc5da65d64552438fa15735c726bdfaaa67321a41d592ade260c49a3fb354232abc6e3f15c82fad6c62f14e484302741dab83eb37922db18b5909138b59cafda33674c48a96dccc21b687a92d5756f8bb99d6fd8d9b3e0cc96d894e1191a6de01ff78278b42c8353c05c2591141242c67ef5b9bd666cbe671c270b91d30fc6ae67741787738bdb6a38c6c5b6a919c688a998956d904024681d4a0c1131e9d46633e68d5968de64cd5ad3c1e1742de45afeec4f0c88f349cba5ab6a49db407fc19fa7642e3fe53b28a8946d8b6c6e4c7f4045c02b037fe67153193223b2cff61687b494f019eb2090ae831f6b3efd638a217fefcd500bd79001459272b36141d590600dc52a2d91f6a0d694f5e46e0d1c0fe386f15450b1051fc163ab68f842fd79a19242253106109eba8bee08f9036837151f716cafecadb3fa7d01daac18cff3c995d0980071d221e5bfd470bb195fd977087708bad55550e461d771c9bd914e32cd14ee9698edf10f291ab5b2c202839b6e6e31fa46e50fcfa5ca5571fbb2 COUNT = 96 -K = 0d31313eda14c1b796522471f0548d43 -C = de9f589d8006849cec270b0206d1540d2f960542c6dc606a3bdb8a824176c6e392852099a7de605cab292a96169faace36611421bcb6087f20131eb6f01880b436c800b4566a5f0efb797da0703926d500cc2eab3099b8376a6d5ee4ac457d794bfe788eed07f81fdd49f405dc31bcf2 -P = 8f7b423787930a19b181c9339073ddb79a24aba88da7e2984fcf6b0c1c3b5694decbfbba8436452845ca3d8adfe80f1232305599f67a08425911027da727bff0f6d8232471d8072c013a47b14862b3d03878735a8966735c8680778b450811612c5e3fd5f0 +K = cb0a068fa287e377fc6eeb993814bcb2 +C = bad52097f173312310e80a85e07511bbc5ef5e8a2e9cf99e4e1ccfee0225195a9428a1a418564f6ff3ed7311eb22bd786e8a2c56e507d78c4aa5069a69ef5f4eb75ad6e7ea3149e34d13e20e317b1573ae995a9e47e9603910a9f5955fe969df0a460b8108b20bd4b7506ff94ccf1f935d47ba2bf2f772bc6841becab4c4da5d84b86be4ecaa72dcd6b1f340306c1492d4e2a270148cf787346afda8b1675662d8bb0e2f15ce28647b854c33b433199ba6eec7a0b3f0945fd41835e60f63eb193eb9208883cd230e4c74e27a9b775bc3d460b68f0a8b90f54a090e47fafea90eedf77833fcc2024c4db37b5f3f0c577e2e456a6d3099ce526910c024a6d9313c96ce41414c589689866757d8f8809d57febb7759b4d6dacffd0a586a0825f0c644edf9903b235428a350167133d72903bf4485905cf48b7c3039a971942166a82fd45d63ca0c60bfa098c8f44e73f650b00daaa0270757ae5e21db4713f6ed32a09302cfdb2feaad41a78a6be9ffe58cf6e69e589849d0b668072fef54231fc3e0e03baf0536f4764a337d1cc817c61307ab0ca52442b9c724ee37e980053dd430ae48996b41fcbbd45e2138aaaa7c646cf36bf3b27956211fe476e59fc3924e16058dffcac48fdd1fbd18055f3fc5393dcf16e0147d90fe46ab9fce43a4feaf1cd4ce0cc929c5ea725b97e959e2e4c20827e872fa6858f053b9de22bad7ef1d1da4bc627b52d989 +P = b39b885f44933943fa3cad02a1cf028b693263747dc2ce758658cf3a9f594faac668c2a95d64593ad8cf8d1a8dc442f21975e51b91290e232bff232a0126a473ba639c6ceca91f4bd119c87eb49e9027701557dd91240c66c645234ad7c3e42e07f97a645d9de98e47d693dcfbabd2cea8d0fc9094a4f723bf6ad0eccf2edfc5162a2b1da6738a1d276ece7ff18dca47721c5d31592c4a373c18b458f3bfd28a775ddd8863b598f0e0f91ae04c55d7539cf207d62e23308581656aad393d3f285c810cb77a89aaa618e2e25d4230126c1bac67ae6587588418a3ca3bdf4b7d92b1739fc74ad1fcf1e7951e200a1b9634bcb53321655ab8fba0474c8925d42fd6012ffda7dbd19c0077d62ed69e6c174cc821953845546f425ef7159995a0cee12f6c41257c273868c4dda2d8c59fb6a4b1ce3851e984ffcfe4fe9f32a23c21b1d5704b0f2e048ecf62b597b3b2a68d2e48f2031acd1d67a660773ffde3c2047946be272c709343fa566d82f57b19d2c15e2cfcf133d821d91070c429cad451710f61a030de0a15150d2800e92f2556dc9d65e941e69bd09a06c960069139e523d7ee77c355be99ecb21a751e4a44fdde31fc5911d24668e5c9efadd6a3a3e64ca364ac9196d47e70ab2046097cc1925aa6bd2d26792b448fc2f376553c97139a43accc66c10be085d2ed31c952895122e8f614d6e7b33ea88c3d76639f757139 COUNT = 97 -K = 91f7db7f73231491fdd0b21a1c614466 -C = 772a4e36dc728e35bfd0a4b278503aaa4c4bd3ed1e7f2b38f3c524dfe1390e531192a933c20e5e7af4295b82df6e9ab56b76502d347b9cb407cb490005311a41978cb161b0db7202cc50f8702cd2620951225eeb4ad87402a9c92659f47b608f2bc30830475ede086a076aee8165e17c -P = 17fc2f03a76b8cb2486cd96000e2e34daf5f2b49e35cb4877bd57b93ad77fcb1c3fbb52028789e602e722171b5b83dc14e8b35b72d8ba2574eb8c5dbec9bc701ee196e3b8d291f08f96a1d9a5257754e13087e463c3abf3ef4297e4589131b0735759a4dbf +K = a41174d1e0356eb659c3e7b838767dba +C = 8e835ab772b90e6af02c14ddac1e578691447f869452570b082debe02d1d3a1ef79797e63074443146a4959104d591e1d5d52caa61aaa2822974fad07edafa3246042b041106bb5cb873ca52fb05454e5d5c06994c7b4855de9763d41a1c891695a17ab631a7a1e0ac1cf8f21d35cfee77b2906b6b3390ead69f4c139bbd91a6163a528b0912d445b198cb6275965d801d87d2a03d3030fc833da290c263eb6b65fcd81675840ccb9fd384ad08a0932a3303a8519be2b292d62cd8731f79b854c7fcb26406fa479f7e726a477fd96007540b03f915e6a82828f43b7e24a7ef1dabbb345a0ebe2ad16259ddddba997d9c19257bbe303f635e1a074978a0d363d6db3bc94211d51648c00d896ca8c987c71c47217b3e7d3a4c2e51f5e0b468ec76c3a50d431ff5882c8f41bf30d06acffae80e66605b2a27f80064c89670dd1700df58782f7b44716d89b2b8f7d48c3cdcdbe8c43f4059252ab15ebd30f1489876773ea8aedf1809f7f4633a98573461587e7a16ff71ca3a4657e74c0154452d622ad25daa2f0851337d6c1a99322f91bc093f1fa74362e291d600d3086ef2bf8ada5a45a92e5a51cfb8b26305d990621aaf7e9e2cd5f115f2bc776fa079bc665a283230fb4f70edf75dd4cac055bd620bb08bc1a9c3997f40bea94873712002045ed4dbe210645368b142955eb93122c5753864134fc9f90ff991fa78510201272a813b678a6e8137 +FAIL COUNT = 98 -K = 6345d981f36837fd526eee9deab5150b -C = 02a7a4381326709b1d7c0d3e9c439cbc19d30e9bf6cd9db233f9909944a445730702d9e816aedde35a2d8ba0bfe16732b46b3b3067ba2eb6cba6f75775667f512dfe20786a637a970ce69eb5e45c9abfbe4379cf0fe05dd9e80a85d7a2ea9c3c907bd50d967b6265cd3830eed6eed4e2 -P = 656bb4e990a9aac9c00058c95f75192b28e1223dd3ec337c0fc4a7324b3470fef3ce0547947748063bab2bc7521adbe9dd29f1b0bd0368d8d9576f55445a42049f73ca0cc3477d701454be39f603b9022d07f1b024cd0d6876a0d20e531d360f31d1c549b6 +K = b6e0ba31209540265025156425e53af2 +C = 8cea290a38b8e60ef5d9dab7ea90b665d22bad028ceac20267fc0b815caf54b32ae373e14440efa34a3daa57a98afcdf56acfe6ca039b1ec67c770cf8021baef8c9f16017fa3f00641601ae703c800bcb7cb47639f50be3fa1e9cf37abd30ac74a55cd987efd61786ab5145f1a83b3289a386cfeb4bb1e724625624847a4d4f74a01e2871e239fdc7a82f07de3ee67d3264511542daa0f7efa9af939a0a3782a0ea0eec527bbf5778944ef61181f6d75467aa1902a35f64f524a63d0aead7e1d9d43fa0332efdc0c8c1346bd564bb692557551d239c70f7fb92d5ab357f0f9615d7a059a0750cfea777a2a1ffc84b0eeb5982320d4ce9542161f4d45f0d2b0ca3353316f82da1745bb0afb23ec8d17585f2c8773d62e2f73b0123e22f85a750383587358393ae68e30ea1c3bfb648399e5c923c275cc2ae28e3593b28462a04443a1e7342469e0e460e460656f1c0c7320c783bcb4a38a42b1941eda0a005bba9ac76db19c605ebac027281dc6486794032202e97acc3d7dd34513b44f8f0ae8cde32a025bc03470120c6ea14d32d7ac0a3f3fa03379555619fd0bb0e689c73c143e85070291f2abfd8f028e32578bb6fbcd173663d72c1af3e66e5481dc70ac17e8ba3940a13f5a469427f417b21d4c7c27e4d9a35ed74bcd5a4ee9cc1f329b996f2388d8c186f6ccee3a10554c37df35f4dc60dbbcabd8beede5a7e6798be344b4ca59d04249b1 +P = b4db7f955a61f873d3e8d7a88b5fe2a756010e46e3bd7fe5cc150c16149dd58b0a068617a01eef83f854f38461f19cb37e1a898e6d2b237d7133df3222ebb9cf167e80b4ebfa8e1faba489498bfb98ab5fbbf84b223f403225c5d690d9490fc10bd219ca88ae79f8d32fc5f694f506851a9789e119d382abb8fedf27b9872c4de623002247e52ed559100f777c098948b06a6b487d29edb27d266e790c7fbcb3286f8178f44ec24b54013c309bd4d46adfaef8b56e961f26b58d74a545ce5aedd529ae3abb30bea7192b30eab7f5acdaf1783d6b725103aa3e3dffe564135c04631dd37a482b8e4fd31ce2d43a90b8484aa2705993b3c68e9eb456c2608fb02980e847cc937d454f7ba7a61fbb0b5c7206ed70715c2b06d95c47c5659169c6fffd3d0e8615c52a8eaa14c676eeb3f83acbb2fa2f62349f524a369d74bf69a923ae996c9139294ab2bb8d95c2144baa540916a6803e45be0d7f0b3da4fbc7e36cf2e2dd12173498a7bc4a89e696868ab705ad3b8923366786d213851bc0c8046af1ae1f47f9ba1e4fd0f8dac34bf965fa97691c1b98c841d4869dbbe42986497a93d30501a8bb422bc5855d25187c5a88f0d3247f7721994a202051ae98ae656eefce21518e13ab2299f0fd90e2ccf62cb88210ebe80b28f96d3b52aa4f2c248f8e36d8f1d395e0794c7504973fa5f63589b291cc5005d4ae40fd92ad9d18689d COUNT = 99 -K = 7daee0502008aba8920fcc4387e1264c -C = 93b30cd2995f0d7cc35102d2539b4eba4fc0e107cc52c4be84b943d3b6f591f255631fa45733d1d62b9df9a5da2faf0ccb6ee1154b4e212d2653382fbe99489b328a0bd02bd50f221f1349b6b7025b1d1fa3e1bf7fc974d177604ce6cd68677136dda5f6eafe8154ed057e45f37214f3 -FAIL +K = ae6c135ef9be5bec65eba9ab9d3f8d53 +C = 89ae6a4aae384eb1d3be6116d264ac24c6b9049df2bd17e391ea81188505e7ab7266516a628408c2d36ba41e213dae643cb5463117aa638cead5d95cf96e49a3e360124c3d21783ad8adc6af87145309aa9a801704f609abf9c74c2771d25d6bf14022278a7a90c4de925d2c9884ecaee38ad4e4c35b18b052e9571539a578f6f0696a31276634a28ef5a1d2ff26131aa29b5503eb54c95f0df641b246f84973327f9a8e26ae98167944fd6b2ea1164e9517b976848cd13e4ad5fe54387cb237bacecce511422825ff28b2a5312c05f91b247965a3834625b79c60ea782794d89f11c431ba010b56b27875323707f9d53f5fd51ce55bf4f0d247896031601247cd875b4614e7592259b1e46d7a11a58ac888afe00ae957d7b5c7bd0a9082f2fc51f3ee7ae18bd191f787c6fe1d84c4e6650cf9f23688374442725868436dce9ec83d16c939a57f2fbf04b3699e7c0be9bfb049dee534539f245e3f0920450b934511a0f94c568e0ba0a68a4105aae7014df2b47bd218dbf3cfcca00fef755aae01a9088e82b4e558dae8894560e44886306f9a8b3ab6f0375f7c051c002a695eed391adb9566bac2cb4877c8225ab7ff5d068c8464598b13f2c61813686582ed36462a7bc33d9c5a294caaa42a8007aff701e02615ae0c789901c75fd00bee53d9af734b1d2736b63b26c5ad201d220c599d4eaa4b09d0de23d84c2b712fcf55fada66dd25e19a7e +P = 2c843d98d15d1f88cf5d4a370cf12293541516ad33934330bd6560864b39e1f488b4826fffaff3312f238aa81c1fbbec6bec9f2d8a1b2ab2e72f8262e5b05a47b793bf5448e294cf4b416c51168d4b8c38b29faf58877930e9ec3971d3dde24324d612ae0da29707bb9998130a108f715b8a6adcf6356f5da4c02a5a4155652a2fdb7c0923d3580b42b3b19cb55b81607055febca32165f882fcd36f4a9319a00fbd1f1adc33b8a28135632c1cca9c5dee9fb0ea65ef1d36cb70e7aa5d2249080049e757e6de7b0f8ed929837d71c0fc3ffcc338c557105a8fe59692d4dc0ef2cd27824003fa8d8e919f041b79146f8d2dbdcd7aceda0ff0699f3924dcc4d15cbcd32c1611e9fde76a766101330646ea8e809675e948bd4dcb1407b7743e42a9dbe2009606eeab1df9fc5068a06e611ea1623d6165860238f57c7b56ef24d24529fc5087c67c730e0399dde547d24777e83d1cebf859c802ba96da61766272aff6119337ea287e9b221f47dff0dbf5850ec76413e5fead39b25f802f693debc2c5b8ec663723f081d9aa8267abfae3c7c92e9b6e1dc8562eef8499beca4fc9781796f598e8609af0772353fe3f4d453232ebe622597dadad18e75a19427ce62e3245ad49f71b6f5d30c89bb3cb7684485345a65bb4114056dc260687e55ca875facb352c6b54ad5adbe6874c89fda931057655160e26ddb78cbfecb85be75ca4 diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128_inv.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128_inv.txt index e05d0cf8d308..64d5b243ae8a 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128_inv.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_128_inv.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AD with AES-128 inverse cipher function' information for SP800-38F -# Seed = 63ab583df10e8411ac48c5525e017f1cc80add621ad7e79119eb90415b36c7fb2b340e0911dd90482f2d34fa42b88c861508162fcd5c2c2f8b3574c7323a4bb2 -# Generated on Wed Dec 03 09:16:17 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AD with AES-128 inverse cipher function' information for test-files +# Seed = f5040fbb7df48d988415ccf31b5256ea66033a53318df11a699b70ddd66e64e94417c78521db5fc947b3075cd5d3a3ed4bc467e40af08d85c6b9e890b9dd55be +# Generated on Fri Apr 6 14:47:17 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 6a280f35b08307b5f319985cd1ccfdbf -C = e06da6986e20085a78beb08cecd77bea -P = 00 +K = 7877f11e1a2d530a0b27274d4e6d7f2c +C = ea53d73d75f5f0642c64d4715d1c131a +P = 52 COUNT = 1 -K = 4bcc5801967792f380e82e6f80ec6a2f -C = d3ac335081136595c4cc33f97d323b93 -P = 50 +K = 172ec2e2061f19eb722dfc927f870a2e +C = 0d927b5253da0db2520e33ad8c7c49a5 +P = 63 COUNT = 2 -K = 5bf77d26ddf7f3d913381ddd1aae613b -C = 0416c0aff3f75792384838cb2502ef3f -P = ec +K = 0bc8ca3b2388af2af6592a8c4dd862a7 +C = 4c42a02231beef21f450eaed56495852 +P = 19 COUNT = 3 -K = df3798e8a5bcf7ef216d445ed6239ab1 -C = 40c018262be1260f665a428180f0f2fe -P = af +K = ce11621bc7059216481518f5153ce820 +C = 0c1376ba28f4e1bf19947557abee2997 +P = da COUNT = 4 -K = 659fc41b910ed045a76707d722ff6fa8 -C = 4d4b37f9ca2416b2942f34f702f0cd37 +K = 6396fd2a833648b1844c93334ecf8fd1 +C = e33984ab4f8ea18390a9d9f329965cab FAIL COUNT = 5 -K = e77f2a16b9718b78c36eb2a79377cc8c -C = 2d935be9c5c6d445cbf605512588f0cc -P = 4c +K = 6647af5e41746806486c423245c9aa32 +C = dc8100b197e0318cf609df3357fa17f7 +P = a7 COUNT = 6 -K = c9e6d650b283591cc6b1c975deea38be -C = eeffa04e8d8f6330334cd61c63b110c5 -P = 21 +K = f0d2644206581215c45038122096e011 +C = 9e5043132d292f1dac0126047af5666e +FAIL COUNT = 7 -K = 0a6b2f880d4aab7485e28efc564a3bab -C = dc4df3bb677aad744a97742190571cc3 -P = 6c +K = b290c4230db36a3ae12b670cb9d0127a +C = 1f9fd391be91ece9113da4067d850c4f +P = 66 COUNT = 8 -K = c2255d97e5d5a559e90cc6a94b2ad185 -C = 46a6adac469092ba2b5b3e9eef830bc4 -FAIL +K = a1e9ba67a1a36c2c8edecf7bf1dd9860 +C = 2c7bd2e268eb76f657335171df981588 +P = 2e COUNT = 9 -K = 610714ad921811db9db115b033ec4c6e -C = 04e754ec1a974527eefd7c2131fe7e9d -P = ff +K = 15a92085ecbd951279d1cb75279b63ed +C = 274496bd34c9d1e37a4b2215917b9796 +P = d1 COUNT = 10 -K = 22083aa709fdff28feb83a16de66201e -C = f07aaeda91a15b4bd5f5750cd7c16e83 -P = 43 +K = b061f8cbb7ae939236705ee989ef7848 +C = 45233ce65ca152d74dda6919db3febe0 +P = 55 COUNT = 11 -K = 2a62f09195d503fcdfa4bc9a0d3e0d8e -C = 682b21677917f3cdb51bf40e43c07fdb -P = 0e +K = 98a45c4383efbf7bf33d74fbab2623ef +C = 62418f5aad74dbe3f3bc01b114744fd9 +FAIL COUNT = 12 -K = 49ba2b4ac8919de4e7e4cb2648b5dab6 -C = 3d9afc5661d9c8e0343e1c362b9b2bc5 -FAIL +K = 04e0ba0ebad38f38b615a8942d61a712 +C = 6c3a2a4c1121fd0170a4a242ac1bfdbd +P = c1 COUNT = 13 -K = a29e4d5acec0a5e400764da46f67f152 -C = 8e81781890b55cd6a30a3cba114b7a71 -P = 6e +K = 311520ae19953ece34930fb599182137 +C = 4bab3181f0c76e4cba3250dc28821ae0 +P = 2b COUNT = 14 -K = c805c06c4f6787b197662cc93f0a059a -C = 43824e605fda683c307f67d5f61b3f90 -P = a8 +K = 8a375816fba862303edda570497e4afc +C = 3fabb02a936b54a17f645e33788e8a9d +P = bf COUNT = 15 -K = ac4a465a91521dfe112a17c57c6121b5 -C = cbc00dfcb223625d8d10e3b09d1ba52f -P = e7 +K = 91fba59e7bfc87e071f0d1ef2b2f4fc3 +C = a76315aba06ae592e9e399afab0a075e +FAIL COUNT = 16 -K = 7013fa96477c242ad06a8d9ecc0ae298 -C = 84d9c7fd8f8d8fc76a517cc047c35680 -P = e4 +K = 6ed3141c91a1d1c46667f1c2043e1af8 +C = d1265871ffa616e46a1c0d4f8cbff864 +P = b9 COUNT = 17 -K = 812acb22ebbc2f9667fc67ce2270e0f5 -C = be14e2de95c458cb8210c1d42258326b -P = ce +K = 0ed1d6e2b635f5636c95081ef467430a +C = 2d3e3c7d07e31ce67c72c4c635275c54 +P = 49 COUNT = 18 -K = 05d349f1b0eb9bef9c503490bc251177 -C = 80d81fdea7b476bde7dc67b39366388f -FAIL +K = 9e6a29c84e0f9adefc6726a216c46929 +C = 9074223f303e3f579d2f221853dc726e +P = a2 COUNT = 19 -K = a216861b86ffd5c136a65ecb837d1bcf -C = c858a5e164808b11ea3ee6c870d0de73 -P = 03 +K = 48b3f4b3de6ce24b21084c5e7f0efcd5 +C = 3b10ccb79c602862e1ed18e1861692b2 +P = 0c COUNT = 20 -K = e70f6062723ed01f379f944e7475ee96 -C = 03b0b46dfe9b21490df83c8aab73b71f -P = a5 +K = f543fac298e5c91d19f61234c6e262cf +C = c4efb9befa34c1840b36d70f9c76bc94 +P = cd COUNT = 21 -K = 4742189f51c9e21e2bda133b1d21597b -C = a7d2ea82233a8d157584d6db7e2ecd4c -P = 3a +K = b876e7e4878ab5adb68f9979f9c21e82 +C = bbe6dd6ec149ff183a9c891215b10e3a +P = 0d COUNT = 22 -K = e98cb6a18a1d3d082708dd32f6026d6f -C = 4f9b6fc8eff4f75bca34c2b397c83fd5 -P = 77 +K = 0fe7414c018af1f97beb87e75c0c3a81 +C = 23ff289869baccb13e463f40bcfb3678 +P = 2d COUNT = 23 -K = 3b4e72327e465d7707f087d38bfe3762 -C = e22a7ebef963b5b8c9fede6814b31ed0 -P = 1b +K = 14f34041131e63ad35c7c122fc34748d +C = 771fb141c21404a2a888184d42ffa0a1 +P = 7b COUNT = 24 -K = 383a26119e12fa1af6fbdd504e90bb26 -C = 36ba0e576dfbc687816083f77c526631 +K = baff90242c6f0776375262eb2f729882 +C = 955a3ae6d460a74521ba4d0784de2b67 FAIL COUNT = 25 -K = fc463600b4a1ab4f3525fe2852fe5d4c -C = 6d666e2601e06f0e277755299dc7a0b3 +K = fee2a8f0909616ac81fd86865b02ef6c +C = 9c5b7a19a6dc71401ec32911e02a8e85 FAIL COUNT = 26 -K = f2c1237914f1efe96174f7985947fbd5 -C = fa080ff7595c32cbda1dcce960123558 -P = 65 +K = ff6954c9e066641aff074228f298cf44 +C = baa969c143bce3740d9232ce1499c1d9 +P = 7b COUNT = 27 -K = 52aed696a3d82424520e925ecfaa7347 -C = 16973ddb1839bd4728acb84a17c3d7a6 -P = 65 +K = d5566588f006fab9fee7e87a31199673 +C = 95276c9868153f62ca172d45bea7a00f +P = f8 COUNT = 28 -K = 4ee6887f0977c835369ec06919def1dd -C = d70520b20427f3443ccf6693dfeb352e -P = f6 +K = e4dcdf62bf63aaebfa67e52f0d5a76fb +C = 300ae65fb51c65cc63294e316a1b7b7b +P = f0 COUNT = 29 -K = ee5dac31461b58c430340175bca7b17a -C = 5b3b81362bdecaa4554bf57ebc807627 -P = 8c +K = 6b7d2bd39c0a0ecd39de4d7239d91349 +C = 01925d4decea42f4deaa520a9fb7e4cd +P = f1 COUNT = 30 -K = 5daac338850beac0010470e3d1cee951 -C = 7700d8075d949904a7862a434320a371 -P = 8d +K = 5521f3da0fc0535cc58c64332e979600 +C = 98d0b64f8af8eb07143b4e1843a5e074 +P = 68 COUNT = 31 -K = dc45f4306f88fe493cec054b95a147e7 -C = c5259d0e61bba616d73c816d26c416ec -P = 38 +K = 4b4120455536a99031418892abad6b83 +C = 22e04078fd2a0b4ffe0c370c0a9ce538 +FAIL COUNT = 32 -K = e02d3c6a86c82bf658d4e35d4d28440c -C = 39d9dff76c1c38c8848eece2c3207576 -FAIL +K = 2fb2a9d468ce47043930df4bbe5ca546 +C = 14663ab421b9e01bde48748e3191c6df +P = fe COUNT = 33 -K = dafdbeab61d658cfadd9e1745d78bcfd -C = 510ef6d15c115d00001843eb0d6afe1d -P = 99 +K = 9da547f154c6656e864a1e28c053d792 +C = d3bc949020133e414c39c2f65d6d08b8 +P = 71 COUNT = 34 -K = 735bde519cf58ca3aa03976d01da6721 -C = f10a5a77e7cdaf65b8179e36e7b4eb5e -P = 33 +K = f5432ee6295143c8f483cfa5e5839df8 +C = da3f65b3f59c92878842fc72cbad6cb9 +P = 12 COUNT = 35 -K = 5488888bdd9531ebe8867175c13f4a28 -C = b18f1353241cb08d0baa45161a7e832c -P = 04 +K = 289711953d5bb57a741c0fcacf18c871 +C = 2b21479b5f6a8268e689884ac19f6a9c +FAIL COUNT = 36 -K = 56c17f1628065806050f6304659dcbeb -C = 3a5c2d117964a67411be8b109d6c64ef -P = 47 +K = a63582555de209a7c738a2c03b49e9c3 +C = ad5e51a8b8d7f8c7a73bc3b70bb34925 +P = e7 COUNT = 37 -K = 5f789bf9576c669af8d3eb9811e7331b -C = 84fbdddf38a4106f96e936578e2cff05 -P = 51 +K = b96e70acf1dacde2f4c39e28a1ad0483 +C = da6f988cbc74a425cd5ac415a56a1c40 +P = 4d COUNT = 38 -K = cb0a121f6a844aa648d8c3d76fc02488 -C = 6bc869f3c393373f295c60ce1ddc9eba -FAIL +K = 2a7b315e4b86893d9268b9c9e20a671f +C = ab7d4e85a7e794d9233233779ed24d6f +P = 7c COUNT = 39 -K = c40f416f640585c7bacf322a5f28303e -C = 048ccaf344fadc3c184adb654249437c -P = 7e +K = 29287df15603fe6a567c7097be60f00e +C = abd0d2453fce5f9841aa3beaca3c80e6 +P = 34 COUNT = 40 -K = 491a80c0e12b17d8f95658688e457861 -C = d060a9e1604bc64cb906d81d19682db3 -P = a9 +K = 534eb6b00626eb60de1aa2a177405022 +C = a9eb42a606ed2484ceff0ba1231d9ba1 +P = 7a COUNT = 41 -K = f9e105aa828b480d1c9b84489344032b -C = 54f023ba78220d048f17a91a90dc779c +K = 0053decc4303520c52d4b51131fcd8c7 +C = 8e469bfb9abcc5ae0eea6159fa4f3e8c FAIL COUNT = 42 -K = 6bc4d6463d473ecd70aa2418663758c3 -C = dae1bafb19f70a69ae591ae409c7cc1a -P = 05 +K = 9d825f19c0d8a0f377e88b63c1bd7e1a +C = f76e379c25597bb6fdef12279856951d +P = 02 COUNT = 43 -K = acf632be556f5a78b4979e09dbd311f5 -C = 1d20b409edc7b843c1749bab0999c51a -P = f4 +K = 8669016805bf4a841178f4b3e074e7ec +C = 2aa2a150540b39d8d2cec69ab4bfe126 +P = 82 COUNT = 44 -K = 4339c491c5a9c2a4715f20c317a2abda -C = b7bcf1afa2eb37d3900d7add544295a6 -P = fc +K = 2df0c5fc7cdda5bf86ed6a23aa22bf63 +C = 90f3eb3356a809b8e29988320c7e16ad +P = 91 COUNT = 45 -K = b80834a710861dfb0dcfd93729f7bbab -C = 20f0017a3504bfd46f69d01462fae9be -P = cd +K = afcccd5a95a87d21e837b8ba76dce548 +C = ad6ea721ddf12864350176ef02d1e914 +P = d8 COUNT = 46 -K = 6304d72482d5cd55593b5b0dbb9cbba3 -C = 280281eb2d507bdbbf1d80ea027b1b6b -P = c8 +K = e4299a8fdd9d43f99655a43645ff5805 +C = 78f1afdc13df6004459fb04a61737a08 +P = 4a COUNT = 47 -K = b7b99c7cfdc5e126f0fbc5226aeae7f4 -C = da2f673e9b38709b0c41cf31356b530d -P = eb +K = c19d13e47e1509b15b54925c551375a0 +C = ea2bbefc4bca8ff539eb487d8f467984 +P = db COUNT = 48 -K = 1831af243c11813b2c4da9007d0845ae -C = 76117cf87851ddec708c37ed335b1ccf -P = 89 +K = 6ef5db704454d1ce6ff82fc58fc80fed +C = 3ebc7afc72ad3063f11f0d8373662f89 +P = 1b COUNT = 49 -K = 701f29f7c10aba87dc188ba068c29773 -C = de0178865f2eb8467b7810ad2cb50e9f +K = 73ac8928dd3115478d3177c6b1db5f47 +C = 2d8a561de0686698dd148bf53cc1ac0a FAIL COUNT = 50 -K = 74d07977bd1fb6709a523b8f710b5bad -C = bb7e39279f518fc0fe857cb7aa72904a -P = 66 +K = 0c11b77d09d91da211a8171be7225d36 +C = b03236f39a52b26e2b4d8750aed69775 +FAIL COUNT = 51 -K = f0a1ed6314f48d886e83f1bb92ebcee6 -C = 5d5c504e8d1e8024f858275b75f4d732 -P = b6 +K = b3b3d4a6a07a5bfb92a428e48eda7895 +C = 0954798919b962e9ed761b0a859e70af +P = ce COUNT = 52 -K = ec0f4c7e5e956ffb73bd115442d18db3 -C = 57bb40e08909e18d488c4e733354d4df -P = ca +K = 9471b09070ef5962247d5f2bcc2f7709 +C = 3ab79586c7f53e525acaa7568483b94e +P = 0d COUNT = 53 -K = 987565949d6611dcb438fbab67a6cd57 -C = 8734b09811d6357dc9837109826be836 -FAIL +K = fd92f4a4ffabf17271b28caba1fa15d8 +C = f4061de0b5497a90ead40de9a9566295 +P = db COUNT = 54 -K = 412fe2415c5f3488b8ac183b579adb77 -C = 077f12494cbc619dae0ea91d54ecbd4f -P = 9e +K = 53997e0fa899f528f1cbb1a1fb0bdf28 +C = 056ffec16938ebef62733cf485e815b5 +P = 20 COUNT = 55 -K = 7632b0645fdfc204051f20642552b991 -C = 01c6d3e9813dc948cca2f1ec40db7ab1 -P = 33 +K = bac1a81160a6ae7acca3b3264715cb52 +C = e39a10a619f9f5ff92d5f9cae143ea78 +P = 1e COUNT = 56 -K = e33347f0da3d27b26edb519c6da3c4e0 -C = 74da91c49dc2990a51790cca44351b5a -P = 17 +K = 2fb83a18b80d9b1ae08a26a7f5a2bf34 +C = d0905202af2c23bad9d0517a375f3b5b +P = 91 COUNT = 57 -K = 917b6a6380a0b07174a0d512c8d3f4eb -C = 6e393e264059f72fd92d19fe98f4037b -P = 8a +K = 504e5d542ac178e555663ca3c302d465 +C = c923c35bcce71760cff4a7c500f4955e +P = b8 COUNT = 58 -K = 10fe194e7aba31350487b3f084750b2c -C = 7c8c6e5dba048a56da11e1dfd13b5e6f -P = 1b +K = beb7054921d9a3df7b4f509458491abe +C = 0808444847190688c967889f044fc14a +FAIL COUNT = 59 -K = a7f25a5348667ec5ed5c3d80fd501687 -C = e51c3e09246dd2c75e2db4367d66a8b0 -FAIL +K = 848c57885fd76035bd3596f942c4dcd4 +C = c3201c4543f93bf3cdf13c4af0b25f0b +P = f9 COUNT = 60 -K = 6021df0e03671abbe125d6bfa597533d -C = dce3126d88485364ade6e67932fe7d7b -P = 2d +K = 1bdbaf591562a2163769290c889032da +C = 20d1bc1f1a79c7fc2f3b292e2c89f32e +FAIL COUNT = 61 -K = 1195a2d49eee5864395e63b7df7dda64 -C = 421d918c935377600bb2684ab2d3848d -P = 9c +K = d406a8ba0c3e2f0cfc9a54cd972d7c54 +C = 1a6bc38cbfc8235c6df8f8b0d9d9e2ad +P = c9 COUNT = 62 -K = 9871f72de5a380c650a489bc5e65f2b6 -C = c208164da0671849dc2039a2a966ac93 -P = 72 +K = 959335e19d430542dc4626a17b35daf1 +C = 13967e95ba88396b456f6c533702cd90 +P = 6a COUNT = 63 -K = d65842756367f7a912a905e52b726485 -C = 791153016ff49c46345d834b71243833 -FAIL +K = 44aea2bc795e741a7540c5211f31b552 +C = e799437bdd9bec6372f64f3d5286098c +P = 63 COUNT = 64 -K = 3dfcf012ab58ce0522b1bd2057d682c5 -C = 4e63c3271af9565c93e33f872835cb9b -P = 93 +K = 07ac696b7db6071706671220792b9b54 +C = fc260418703a7a04d38b4fd689bcbf12 +P = 94 COUNT = 65 -K = 574d2806b5325aa825c50a01d59f8e8b -C = fc0557a7882bf017c24e376675b30835 -P = 18 +K = cec94db69dca5256808617e922f9d526 +C = 81f65fa41daef13af9280b4259126f49 +P = e1 COUNT = 66 -K = 1a3fb55d990897c0938bd21eecc1b94e -C = 6e6c9abda39dbf2cd7ddef842f0eeab2 -P = 2a +K = b22c764b7b589467bc177180908c7225 +C = 14ef2c12821fd314c6e0ab550ad0faf8 +P = 4d COUNT = 67 -K = c81b2a7e01b329431a3d3e09ba85ef8e -C = 4bd36917c3e7ec3e356017545b29d7bc -P = 3c +K = 52a500e95a882f15d2e3739947927558 +C = ba5b0d92db0952059f643b800c7f801b +P = ba COUNT = 68 -K = f3faa5fdeb30359f7a4e4c2d1b9e5396 -C = 17fabfb6b943540d14cc2879d803d086 -P = 4d +K = 6827367e3d4b1085b376da8d08c9b3b0 +C = fcef476612052e28b733dc1383b58990 +FAIL COUNT = 69 -K = 3f6c64f3b9d6bccdcd06c457a7ccf96e -C = f8e64e5745efc9673f7ac487e6159075 -FAIL +K = 8e247f04e1d34a33e8d97d5c19120701 +C = dec5882150504797ad67b8966a0b7622 +P = 50 COUNT = 70 -K = 0a5db9aa5a7ce6b96c51c724744743d9 -C = 0521b88a621bf3e9ce5c77d3da752a3f -P = 2f +K = d4b6e9eb57f0888fa67ba0530e1753af +C = b4525820a399e9fb0febb349f33494ba +P = 44 COUNT = 71 -K = 23cda4f10ce819b45781f75f2da6ecb5 -C = ea9296096919dccb3767c3adc63d1c76 -FAIL +K = 3d40637d1ae757ed80d3d672f31eed3d +C = cc507ce0e8f5107ffaf89257fcc1cbb2 +P = 76 COUNT = 72 -K = b19e6976866841c0ae56d5ca5b133b9b -C = bacdcb4b101398410a5c1c8d47f4c3a9 -P = 3c +K = dc29ad8d6ec1dea250b6e2fcd74dc3ea +C = 5870a3fc945065da1dfa5158f9d081f8 +P = da COUNT = 73 -K = 39b04095555d384a52f2295f3689910a -C = 317a709dde382378082d24a4b9c0e469 -P = aa +K = 27658b69e67832a8b6678d0299ac2617 +C = 3da27cce4898f5b56f6d01ff0880ab56 +P = 64 COUNT = 74 -K = 1e2b160378d77962ece56f2b9512313c -C = b92de500d9565827ace5f492697b1071 -P = 60 +K = c3efc14d56ec2080efbe6429fdbd1693 +C = 24bcfd0615bb65a5461435932ffb0150 +FAIL COUNT = 75 -K = 7c1ca945f8d458da787e8b81fb3d22d5 -C = d159eccd8530c7717226181c2eee413b -P = f7 +K = c8ca82d57d9c8ad93d96006a7f2feaca +C = eeee1497c831e10cd4dd482d64531f1a +P = 99 COUNT = 76 -K = 27761cd41240b9ace69b9483bbce5254 -C = 664d9ef8d647a28ea3ee97a065813242 -P = 8f +K = f66459f7a944ebc4d20954276d24ddd2 +C = 84040001dbeb9e689408f9dc0bd948e4 +FAIL COUNT = 77 -K = 0c4001bf0a70ba99084db6fd6ab73a2c -C = 16d717c687252d292d167250b12053d4 -P = 7d +K = 1d2766241f36071ec2e45d6e38c29cb8 +C = 0d2904cc701b22b3464644cca433c922 +P = 57 COUNT = 78 -K = aa20ff3297094a437dc30193bebdbffb -C = 35b19c671fc1b1562cad460edd67a2e3 -FAIL +K = 4027664b16bec966f1137e40d5484f4f +C = 155955509255dec146d015dc5126f9f9 +P = d1 COUNT = 79 -K = 4e26250824e63a03965cd843fce75e0b -C = f3b46f5c48949cf91f9af60cf717459f -P = 4b +K = 0eef7688cc7ff6fcfdf46c137ce177bf +C = 2d5582f1508aed125597b3e4a40acef5 +P = 1b COUNT = 80 -K = 97cb3555ba509d7e1083f708c90a7007 -C = 7d90910ab8a9b0c2f0131e98edf19ad6 -FAIL +K = 3f770ca5e7325f03292542cda4b40001 +C = 3181659e3e252ab16368b8f4fc056bd2 +P = c5 COUNT = 81 -K = b6d28c3f5e3a3e2a724601eaebf23cca -C = cbf0e0fcac21f8a13c68bb1a31ee98e7 -P = e5 +K = 8c8628bc01fc47d6c2f2dbd8bf4d1e96 +C = 914e01a09aba12481f71a272b09ed64a +P = b4 COUNT = 82 -K = df465e94faaf4292525fff56fdd4191b -C = 9468b2a568f587d3d7b04ab239b33bb0 -P = b0 +K = a3751255c8af5122964822358c43e8bc +C = 74dbfed44ced64fbd98122f0727aa626 +P = fc COUNT = 83 -K = ebd910f43bf1a7341ea05d002452edc1 -C = 147aecf0129d41f1ee95887ad32680b8 -P = d8 +K = 45e6bbabc31b52ffb9627134aa31ec3b +C = d7529d07e28c3c98776be469eeb73622 +FAIL COUNT = 84 -K = 7c3368214a110e735e6e2669a0cf0b46 -C = 51f79b5859c0ea06abfe034efacf7a31 -P = b4 +K = 5c013a5d2e88d5833b25a66b5945bc59 +C = 70dc4f36bbf539394a1086a8d0c05b07 +P = 04 COUNT = 85 -K = 6770fd3c9f71ed680514a60ee66e8754 -C = d5ce22a224c22c78c003df82abeb1d0a -P = ea +K = 648804e503248f7e965ed5e4bb9b7b25 +C = 6bf4019e5e299dedd7ac817ad40f40aa +P = 43 COUNT = 86 -K = 803fe4bd5c80ec2b9368400dcb2af992 -C = 91141878cc3c6db0f7191cde68f7f11a -FAIL +K = 9d8a216a62ba9f18aa8999c4995e809d +C = 87352f17854d32ebf91600c15a93f0cb +P = 59 COUNT = 87 -K = 732a4fb221474565e6b06f2b96d5f855 -C = f44c55e676ffacd1a86f693c236767f7 -P = 60 +K = c411467604c50ab0b8e1026a3c9e04b8 +C = 90161da00c3d68db2b01896b490901cd +P = 31 COUNT = 88 -K = 4593494e2ed4cf96c46967a09e6433db -C = f8a5a7f47fef82adc730aa19f82596c3 -P = 5b +K = 853c36d1b6260a684126179c4733de08 +C = 22b73fae85bb950ad0e863ecbc587071 +P = 66 COUNT = 89 -K = 4e8ece635d9fbfc76472b83970219a11 -C = 6b00042e200cb3e47c057a7c8bb612c7 -P = 08 +K = ce9fc4528a33d4cfed85bddff7fe0065 +C = 3b0a6060058e5c83a0989e7f929c97a3 +FAIL COUNT = 90 -K = 8e24014220b5e0b304b2573603c648bf -C = dc417473e753582cfe7ace063a815a83 -P = ba +K = 95306a3dd5cbde53cda4586fdf248e78 +C = 4a97d2fc9d096179292b340b14ddce50 +P = d1 COUNT = 91 -K = 5fc96bbdca91e1232dbb988ad2977440 -C = 8cbda5d27a4b2e21e2d4a5ce793a9ac4 -P = fc +K = 20e0ef7bfdcdbacc2e88200ebb0aa8b9 +C = 5e86ce0ab256bcde185470de78f32bd9 +P = c9 COUNT = 92 -K = 1050cf6a13c20aac9469e3ba7ed8fad2 -C = 40e01b96dd28bb496e0b0106b9ddc1ce -P = f5 +K = 2760ec471c5ffa00878f336b3b52e76c +C = 583207c7bfbfe5fcdb7ca1e6989ce6a4 +FAIL COUNT = 93 -K = 059bfcc5bed4ac3d09c58f0932d56e4f -C = 39d2530eba2bd5749103bec42b1ccc3d -P = 44 +K = 72db6588681ff907e4926b779bd2330f +C = 02ec609563aca05d1e97a82a3a2bd375 +P = 28 COUNT = 94 -K = 90a696c665f7ee56bff349a4fa35edbd -C = da5b8cad93ce14f3d547a9347aa5985d -FAIL +K = 3c33e2a8e11f45adaf14ae9fd96b0cbd +C = 98f9432d53a7c17958d7093674144e29 +P = 07 COUNT = 95 -K = dbca4630602b9bf50b50180ba95666cd -C = 8c685691685f451a22b0d2e6911ee0bb -P = 4a +K = 955606fca7e6e2c8f5b293a0151b66e1 +C = 42c317b2ee23b758e6239ab9f322a6b9 +P = 74 COUNT = 96 -K = fd8ad6118377909b0ab3670b3e8ca799 -C = 770e7aea6871fd1d553c5e374d901cfe -P = 55 +K = c649f0f188bc7dddb6a2ae47ceb29503 +C = f2c636e0893dfbac6cb0351322b0d21a +P = 97 COUNT = 97 -K = 51334e86ab189c0826cc258356611438 -C = 9b5ac0e39836a36c8ab9e7c0fa523823 -FAIL +K = a60dbb9d2570cfa088712737a203db77 +C = bcdfa4514af828823090d123f1175593 +P = be COUNT = 98 -K = 4a07bde34b2bbf04f0180a207347c556 -C = 08403277fb0fb7e3d7b90d298805d316 -P = 44 +K = 3e57d901e4c0ae2f8e2377b7d1c730aa +C = 7f16cad46e175e0c724f778ad3ba76c2 +P = bb COUNT = 99 -K = 0fd7f6d44ca4df118e3febe728bf5c7f -C = 8eaddcc82e08d0a6ac063075f353caf0 -P = 7f +K = d66a82675d4ae9416485c71485df887c +C = f0dd36d6ed76ea83b6b0e7ea9fe551c2 +FAIL -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = f6dc914d5e5d2c3060680163daf51b09 -C = 0db5ef028b804fd847c2b89843f8817e2511f96aacd55b1f -FAIL +K = 578215026e9d03cd3c4819377767fd15 +C = 2d4f1f5153fdfe251334fe6eb25deac5 +P = ed482f37f61f6abe COUNT = 1 -K = 4e36d03b69e1de254cc844f7b4c30127 -C = 1aaf2e4e49bf9fbb910dab27bbdf53f2d562f41dd55bbb24 -P = c934bf854b8728a1e7 +K = 13606340379542f68ab44259b90a36ac +C = 26ed234f1126e56b8d87c85bf6acafe7 +FAIL COUNT = 2 -K = 4a3b783ffc64a6eef0d7f5985c87f38b -C = c6ff17b3fc66bd897e30bf1d287c6774372011421d9a8c58 -P = 9c246d23d0662730c3 +K = 9405fbd2987771360f20fceeb518b9ad +C = ba1d6ca9fb0dc2ab63e925bf96690cf1 +P = 4bee68318553dcb1 COUNT = 3 -K = 73e26b02dcd74b21e087ec03dbeb2751 -C = e7b5dbd4932ac8df5de8dac655d04fc91ae263f9004557e0 -P = 067f456e202c9ad02f +K = 52f43d7cdf73136d40a89b08b8ac4035 +C = 620175086de899c05217898ebc1a7a6f +P = 9f69365d287eb5b9 COUNT = 4 -K = 69cbbe481a46ada4aa3219ab5a71825b -C = 04c7a421751142536e3bce013ab218861a136c6e9ee07389 -P = a74edffc831bee38dc +K = 6ea47ee7fe6a69679f2018a24df101b4 +C = c27f1cd0ff3107449fa1a37ca34cb11e +P = eed661fb765a7a31 COUNT = 5 -K = 8be8504257175442afe770800e9ac858 -C = 162d20ad7cd9c90c4c9f2bb94f63b3a261f9ed1dd6ea08d9 -P = d6f48af7a5be790685 +K = 5fe5c514ee990da5777d00fb6982f107 +C = 02d931840b6685b81705ad6c5655b886 +P = cf03571f861f5bfa COUNT = 6 -K = bdc95df39ef6de4cb670660a0752e076 -C = 7fa0cd7fd35dce1f632cc59df66af5e10158d893332ddb42 -P = f521bf6d70fd55aeb0 +K = 3031a9a0aac0791f783417d2394faf32 +C = 3f27369a84f1b29e192ccc333d8728a8 +P = e5daef33dc3d8679 COUNT = 7 -K = b475c0b3f469b03dd703e22abe98bdac -C = 9586e98be2ceaad0e7b702793eb52ef4afcf03edf95cb1c4 -P = 6e3065c9622d42a4d2 +K = acc07893982310e98c1a37f00ade8ce1 +C = 555518407a2a83ad8e168a101e313b69 +P = 781562a5eb925f46 COUNT = 8 -K = 21b95421eb05f9778abc187156c6263d -C = 2376259f75ff061857f71fd2e19dc86b8b41bd96f7081f98 +K = 8748f44c1e9d885a8a95891b640ffc6f +C = 2d15356e74c395fa6f1d25e885d27cb0 FAIL COUNT = 9 -K = 20945060284fb03676fad03c32a9f1b3 -C = beb9c1f82489763e3aaa39d50ad3fc64a13847d25c83b4d1 -P = 7267bc4f3b15b4787d +K = 5753f550c7f5fb6ddc89ad2d4677649a +C = c339561dca60e3625be8b97e336bf2fd +P = 87c8c7ea5c711d42 COUNT = 10 -K = b7e5cdfa4efc695249947a049ba65351 -C = ae82bd7111b23d6d20a6cc6c3ad75d0a7fd448e7b6ce03e6 -P = a0d9728b5fd21c428e +K = f4adbee67a77fb3f2595cc2450caaaae +C = 102697a295b7c552d3dce1c26d362fbb +P = c24dc151c6dae140 COUNT = 11 -K = 5473456b0b77f171b30442669a7cf34d -C = ebdfdbd49019f2faec8bb10244ae1c64f0c0ec1ef81ebef7 -P = ce2bedda41960ef468 +K = cfd0174a4ed913d181a04fb5abd0ddb2 +C = 130a4ac5ada3ad39b00cefd73bf4ff30 +FAIL COUNT = 12 -K = d0e39053a21212d480908747c6a75c8b -C = c07da2c8b9c18c2cbb396dd9f213a63f9056ca7b14a09b93 -P = 64036ddcab5a9da12b +K = 8c71eda0c994892bf7ea456e2c204833 +C = 359e8582d7d83c151c13330c137e8e47 +P = ecd72aae410768fb COUNT = 13 -K = dea9bdacde2ae4818f1ae34e7ecb8948 -C = 80823bff9e9a31e846a745b0ad8c06f9b664992831f40ff9 -FAIL +K = 50eb36d04322ab559ab5d0ba4fae16e0 +C = fb350d3eccffed12129f8468e243fe9d +P = 52cbffeabb6d61e7 COUNT = 14 -K = e53c6a2a9b4443c9bc6a3d204b36788f -C = 865478daa3f76b798fde284b680fc96cde0cf9bac85c3390 -P = 16dacbf568485694dd +K = 8b7c4f2abac69abdcd2d023b75abb5b3 +C = 6da782f55524e01c0760fcb3cab0055e +P = f7f43bcacc1916dd COUNT = 15 -K = cd6b7243f1750720eb9f3e0fb8bf1f2f -C = 845741cb307b3a117b0f3efa2ee05df93f0e6b6d13d53c4e -P = 84a172f990f73ed267 +K = a77b47cf432e9d62bfd0c5a1c3a7bd0f +C = b3c70072cdc85ce9b50263db52fab5c5 +FAIL COUNT = 16 -K = ba29120b72d7635bd020d429cdc91c0c -C = 2278946d9d0e899399c5a5165c077d70ad935ec1f5a9fcfb -P = 41b199a64f00ea2823 +K = 9decb3c770a3c04a5edfd3926491b95f +C = 4b28acb14562d85d4cb54ec63cb5bfa0 +P = b36d2b13827e1948 COUNT = 17 -K = 2506db36b0840eb1b3327665116c0d3f -C = a8f9eef8971e3df18e0b5d7f2fbcb0204806e1e4431637a4 -P = 11b02dc42dcbab1355 +K = 0a90e4ee589a032ef4c129a760494d4f +C = 1ab40d0ee71e6e5c59c4172e8d70e063 +P = 3dab8d5dc02931e0 COUNT = 18 -K = 792d035155cbbd76a84cccd8b527509f -C = ad80408087a3531d77743a807df805226c0dbdba2d73b978 -P = 19a68e48516c32fe09 +K = 253eba8e53ca7a2399c267a21464ac87 +C = 407302fe92dfde74a934fb6aa7dd994f +P = d45c191cfaa7e951 COUNT = 19 -K = 98a18f5c2f8347fac4557884aa96643f -C = 682e6cc87aec146eed388504480107f36064e15b3e23aae1 -FAIL +K = 28b13b52f2c86169c4b1e76c8aef2a1f +C = 8f733f0495e0bcdb272a323144224e9e +P = d444597df6d7ef64 COUNT = 20 -K = 790cfb192aa463618a819efd9ad04240 -C = ec62b51fd48651efb4aa2cd3e797651d64039d3cca2f88f2 -P = ab22245c4114525fb1 +K = edd579af0fe9c9c8508d38bf04d940ad +C = bf1c0db60c8cba99e30310003cf3925c +P = f52a8915b83e5106 COUNT = 21 -K = 384e5bb9f9e25f5a299b00cdaa8e9d5d -C = dcda6709c616e87b22891def389fde16dffd562a008709bc -P = 86f85a4f99285553fd +K = 834a5d45827777097c9e0830c6ff5c1a +C = 610f6a49efa998152f1a9c2a444c8310 +P = 19c6269088f1691e COUNT = 22 -K = 67f96e06b446db980663e26884d0a6cd -C = 0a1b998b8b5d6f33c279edb39db8db561346d6b866e833ef +K = 754bd32439e3a4dda47ed8787d50ccc5 +C = a1274be0f2e870fa062b0f9853af8f2e FAIL COUNT = 23 -K = 7e6cf039f022c292e25559f45dd1d53b -C = 749dce61113c2607b5f04435e0e511e77422c4a4a1eb29df -P = c21273ea38a0a8a1db +K = 450c9eb278bc95dade697a2761122ba3 +C = 8053de69da20dd558e29b14cfeb98782 +P = 90abb049247cc085 COUNT = 24 -K = 0a78bdef1e3797f250c516ec15d9a7ef -C = 8503f4f82fcdfafedef8c7d42b08bdcb6205ea9c07abc2e3 -P = 2079e5c7056e899a06 +K = 729fbfe919efb66b23662de251621581 +C = 722442993c5c6fbd183955092878f535 +P = 79f1a24debb57d0c COUNT = 25 -K = 9be16b5b05e11207e7b409bf2bd39034 -C = a873b213d6551a3571cfe10e13eca9c903d99d7404d23c51 -P = d7e663d98b281ac5df +K = 859d773dd1b42c05c524046723ef292c +C = f47d71b8ac0fb085a2b059378efaa04a +P = a6ea5b507c935216 COUNT = 26 -K = 291eac520fff268e4e973095a89152e9 -C = f6131d8303ba5a5d494c2d96a5f6f6a63eede445871b60f3 -P = 56308e23034ff5b22f +K = 52b093ada5daeefed33451b2e40af765 +C = 103c81a6fde53be8a44c9eade5861113 +P = fcc7ece7ebd8aedb COUNT = 27 -K = 1315c241ce7de98322916273d7aafdba -C = 632b85416f0fb5d3f89e269bb2ba0eca37588a368026d095 -P = 0d70e7be0ddde08ed5 +K = 05829649c4361786a86314a686e1b676 +C = 293ab3b11f39eefd41a3cd0aea356639 +P = 16744200df19bced COUNT = 28 -K = 264ebe9224cf30485d8e5acadd9a28ce -C = 7e049f00702dcbde705338d074404405f75c4400c470dfed +K = a4d789b03b91e9c9bc8b5d07eedddc3e +C = 7ef2e5e3ca8d1f06819a78b5f38b125b FAIL COUNT = 29 -K = 6f7d609f6c452a58394b5c9d8d0a0ad1 -C = 16a499b7b935296c4fd3a9c96c784479146874e2c1fd4ab0 -P = e4ea86090395ac7ebc +K = d564492ee2e093c0b26864f8fc43780f +C = 50053730bdc1a37d6eed13d2bcaf6782 +P = c5761f7d394ca273 COUNT = 30 -K = c28cd83a3052a4e19c79d5a6a6bcba38 -C = 24760fd762c9e5dad8bed17eef7ce50bbb50fdc38766dad9 -P = df39b9a37263448768 +K = ce22e586d99960a642b7f9595930f2b9 +C = 910e4fd8151e9d2f2092850843fca7a3 +P = e615b9f1080da56c COUNT = 31 -K = 07cd12a90fa1185bb5256993865c6706 -C = a0e287e6ca127f7deb47dd6198c6d9c2fcf0413738df6e64 -P = 55b791b21262f3a261 +K = 511f9fc898b51a0d89d877083a5ef81f +C = bbde643914b963a40edce6e94d7a37d5 +FAIL COUNT = 32 -K = 5f4268f716c35a01197c6e9eb599145e -C = e7ebc31d1781d7951bd51b444f6bddd8e22e695524bab502 -FAIL +K = 036f98b4795138c14bed36d302fdfb91 +C = a8117cbf46a33c1d53d8accdd1c08ff4 +P = c275fb118e972822 COUNT = 33 -K = 0af8e23a0141e27049e09d07c4df6328 -C = 1da7fc6804ae0a32f62e75817a4854622ae7858f1a9bb85e -P = e6b7c5320a8ba68ac0 +K = bd30d1e76d5d56be96ed9b43c93ec7e5 +C = 82f29dff12861d9ff7ed068d521fc7c7 +P = 480b7ef1055bc971 COUNT = 34 -K = 9876ed803f7fa3aa53b640a961751c74 -C = 740bf794b4865d1068e2780dd8f4c00d41bc88cfb82d2543 -P = 5c2781a9d91f935371 +K = ff7b5f72a3ea3cd72e173c509361ccbe +C = b973ee126ff5cf42147dd386852b50ba +P = 376b2888bfd763bf COUNT = 35 -K = 92130e7a9ff5154b6bc5ecc10b7f8c5d -C = e7a7f7992b48410fe64659ba2f67d57f6c3a5fc2aac7a948 +K = 8c5083727e8ffeba095ec05e7270a5bf +C = 9f7329b231e36457abcf28b53c11d53a FAIL COUNT = 36 -K = 82a6aeb93f2a4319750215022017727b -C = 27c25a504e10909454160a7db6674ab9d4fd5ceab3004c44 -P = 21a0ed639640778cb8 +K = 0eb1b75e6e8a64773bc1c00ff4d5dbff +C = 93fa20fa826ab6bd62d46c0b64b9086b +P = 7b13a406da33f82d COUNT = 37 -K = 651eacee49008206e2f2d7bdceb51b80 -C = 74c9e13e416115022755e3520028bc0135541fe341070dc1 -P = aa4b3c1272a77ec157 +K = 1c33745edbc8d115c3c257cb0894709e +C = c64997f8157846dd0523613a025e6185 +P = 110d25535e9f0a76 COUNT = 38 -K = 3cd339d465d1e3e79997441409be9114 -C = fb8972e076e2d724d3f0707dc49eedb5a7ce7425fed3a08a -P = 495b9406eb2fff17d7 +K = ac40dce2f02d09b3f3069232d73fd4c6 +C = a65e25450eb5501a391e57be61efd236 +P = f2a5047d5293b8fa COUNT = 39 -K = 8a9cd8ef9eb2ee49f0ffd94260b12502 -C = 01e4a8f36a4c655ffc1adde3b524c4d635219b3e1a5511b2 -P = e1e8454424529d373d +K = c0582a7c11f76fdba0af22eeee756b73 +C = dab6628740922e1f351839f0ca97b1fc +P = 871f051e1016d155 COUNT = 40 -K = 057c93050f7f2fc335f9894529d6f634 -C = 6dc7c249028ca93654d9bd3a687585cad488173761fe1607 -P = dae95069cbcc4682ad +K = 90e3fa08f78eb67ffc5a482442ee693c +C = 7f102687e086625f14fa055b6455c98a +P = 907cd563cf559029 COUNT = 41 -K = 8ca175a4821f97ea9ef3120f236d1bc9 -C = cc38760e643284c31a7c4e26fe90811206e5d264236a96b2 -FAIL +K = 1f02473251cbe8c305c9f80d22f5a27a +C = b88a48c6720b0137e11926b040c62533 +P = 98a66244671de843 COUNT = 42 -K = 8792c84f1cde34f9b080a54c09c5bb54 -C = 131cf3ba92f0efe3a2085a95e5deffd95d94e4f6be2f8272 -P = 536cddb10a4ca79854 +K = b04c2a2ea95084a56cbbc0220d78111d +C = bf4f7fb3509ce2d076873ee060bef55a +P = 72d05c146dd42b39 COUNT = 43 -K = 3de654a5ce7629dea11ea34d56b159ca -C = e10ac2b1bb65278b81decf66a2fda23bdf3ff7ff64cf801c -P = 0ea320b4c3d6a3689e +K = 948464741fc3f224baa853fba4f1027a +C = 432b30be3c14f354162f7c5dea99d5eb +FAIL COUNT = 44 -K = 84b0b4b7f87b76adea249d513f776269 -C = d037fee9c6f504b0ae81b723f0fce6fcc0b0dd005ab6ace0 -P = 9c572cc3180e795967 +K = ee9c41c134a6b1041aca3d92a94e83f4 +C = 12b7cf95001d4aaac7cf30852c0152a9 +P = e4c6fcb223cf40f8 COUNT = 45 -K = 8154f4a593ad74dee13d7e48b295b488 -C = 094836cba9b70e6b811aa985906cf8a3ccc6f386d6e32009 -P = 2dc4fcb2404aee866c +K = 9dfd05ff264d5cf27a5a23e20b2bae9b +C = 8a68ff593e85a8587583512f587a544d +P = 0c49012d1fbabc08 COUNT = 46 -K = 4e5c9c64eece4d22b438d17c308443ec -C = d16c217f352d73cc6e71a0c7ef4ff7025905516502ab8a1e -P = 62f1d30222c50a0943 +K = b110bd057501fea404044b6c3058cd8d +C = 2d7b1ef2ca08feea3d183ed888c9f7a2 +FAIL COUNT = 47 -K = 93ff29881e8270a6ba6f0046c296420c -C = 8b34fc00bcc0e13e65253befdc19abb0aee7051b22db4236 -P = d053fc7f1f6accc0e3 +K = 540e438012c5b1858596a48552a50a70 +C = 0a465341deefe76c26d05c312a480369 +P = 4fc4bd6621eadb1a COUNT = 48 -K = f757f1294a75ca9d36cca5b310ccca07 -C = fdbbec56572414bce317194285d1db19b8ab2b680784e276 -P = fa426bc61ef048af7f +K = 2a5c2e0840a28363fca3a06049eaf37b +C = 6ba59616099bb8e897bdf2fd75abca48 +P = 60d07f0457f58f92 COUNT = 49 -K = 0607b560f3df00996d1b64009a7ac5c1 -C = 04ed173835429df866b2839badef9770839aa2b60c348667 -FAIL +K = f6087f4615e9402e337e0d4eb75c12fc +C = 2c52e52e07925ed161d34c4ba23b1a6c +P = 45cdcd7597db98e3 COUNT = 50 -K = f6c3d5c18e284114f339e70122cfbb54 -C = 3bf5ca5b87ebd4a28f604868ae8c340cb5d9dededc3f3113 -P = 662a8c352947be6bdc +K = 69878856122496d932825fcf50956642 +C = d0dee6879c94ead30d371f39503f9d75 +FAIL COUNT = 51 -K = a4606bde3c80ae2325797789299f706c -C = 1c191de39b443b63a4c83cdf569916d16f3d926d8df11cc6 -P = f7078138b13dd5c259 +K = cce3f7c3d0e0d829d7948b41dcfe8ee8 +C = 9b9983d41a4fd58cbeecc483d7c27fca +P = 0fd5b620d8b31083 COUNT = 52 -K = 152c67027844f7f0fe1f51b6a05d6117 -C = 5de0e036889fc3accd8cdf5bba7593d15133cda2e9daca86 -P = ee2bef966f4a81f6e7 +K = 1758f531116b1e3714a7bd80a65abbef +C = ce3bb73ecec1360110cb3f1191040882 +P = 02b9d74dbbca1283 COUNT = 53 -K = 4cbcba03477cf9afd72091292f438e3a -C = 184c140485cae58a25d0997db78b142701c83a9b7a1df32c -FAIL +K = 0992c62caa1bcc475b06e23ddbd7b9cd +C = 491093915689433dbac903f9f6ce4555 +P = 7be18e934491387d COUNT = 54 -K = f646c90e3d0495e7ed8c30f17e144bc2 -C = 26c66baf4852a6047ae90abcf3524d41761742235164a6d9 -P = 678bb77266f40bc489 +K = 9eb45458d3ab5efed2bdc980c0d4399e +C = bbefd846572fac80ccd26dc07bd3aaa6 +P = 06f2c43fac3563e9 COUNT = 55 -K = cb000b2c6ebe3ba59ded62b3785458ba -C = ba95771478490927c65cc34ee898d9bbce0c9375a332524d -P = 35980d99d4b6a04ec5 +K = f9bad1a2452cca4fefe7bc63985bea5f +C = b5597708f080f1a85bf65bd510b8fc45 +FAIL COUNT = 56 -K = bfd8693b63115df1c5658f064b2f8cbe -C = ca5cb6264e7119d19e187c819dc8785e23b638b64f6f7189 -FAIL +K = 2bb1f20cb9883ca839412fba84960795 +C = 60ff7a421d43eec9b5b3c78fff0d55e1 +P = 14c68f42c6ccabe3 COUNT = 57 -K = 6e2d8656c437b34671db3f4332eeb636 -C = 4567eeb6ca5ce149c73108f3c90766d76d8101a5c9024ec1 -P = c685e0b557c2595d7c +K = b38def41f731bfcb5e00d8871da2e41e +C = 66bd771b72c9072803ecf3090e1c6bb6 +P = ad3b3ecfbf082093 COUNT = 58 -K = 251b7da2d8628d76dd815ac55d217f3e -C = c3dba66ba1f1f28ea5719752a6b64b1aba675ed2e307d814 -P = 4617d474371956f03e +K = 0d711c8362c47b85b08c54cf053c0839 +C = 60ac104a6293d26325300626bd2f022b +P = 344160180a478580 COUNT = 59 -K = 7dbde4bc1ed0883dc31e02412853b345 -C = b7df6dbfc65e48a2a4615a2c1ec716dcb71b399cc89c1a78 -P = ebfbf10f3ddd240d4f +K = e73bdf636d28779b05b04e5425f94eed +C = d2e5977a4830ef0b1e366d6d40d9164f +P = 1b2413a50878f6e1 COUNT = 60 -K = 0a7dca7e751e394ad25323ae1ff811b4 -C = b53e8954f1073a380dc9dc522c36dc3bf34caac27c10a07b -P = 621b8f4d2cacb082d4 +K = f453801fd648b79b283fc43f2dcc6f50 +C = a2a59eba9d274709966e720d4ceeaa3e +P = 3efaac980e8af880 COUNT = 61 -K = e3f7fad68540c745cbb4e63c8f35e91d -C = f243ac501d949848a3590e825815c0cc1b33dcf67a272240 -P = ee0e6ec946e51c9cb1 +K = b851fe311cef62b671f3684ed7ef5d24 +C = cc78f10450844ec11302151136e1b870 +P = 2b7e29e54ee6e18f COUNT = 62 -K = 2cbbd8f2d98d3ba5a4a0fb8f745e4044 -C = ff6e414647c2bb27cf923d2cad511c83f0ab1ebe3bad3982 -P = f820650f5b27620bd5 +K = ab6bd4d3c29ddce4a533d462096ca178 +C = 9fe40dda09d8be19cafb65f2f633e05e +FAIL COUNT = 63 -K = 5db15dc9342d9f507b441eacbb36d735 -C = f8d4c561872f7fdc629830d0d071d0421db8ceb2eb6c2da8 -P = a5fbfd211bba627bd1 +K = 9d53495a31647c19bdfbc3b378e916cf +C = 1cb5c4bd5f1a37bd2112add28a5f2a2d +P = d64e401f6ebf7cfd COUNT = 64 -K = afcd1ac6d3420646f677a981516cf1bd -C = 15783267db0216f9915160231db64f65a0f45e0b3b5d5de9 -FAIL +K = b4bfa8d4d2c7e7b2ba9918ad2a4aada6 +C = d36732ced901a792795e4ea2c99b8029 +P = 49d700ef68050baf COUNT = 65 -K = b78d794ddc9c5a39dd1252cc9af9aee4 -C = f92cbf1851fd6616d35480b41fbc1fc52ddb423e6582f0dc -P = 8632bea0889ee5c0da +K = 1adb6087a3fad59770eadeec60dabdbe +C = 39cfb25cac31f5ac15bced86dfef1da4 +P = 6b801e3dee76c3d2 COUNT = 66 -K = ce60478ce8383de05da0954af83d19e1 -C = 1d4d3543b7a71921b9f7a5ca2d12aecb50325dd383e55c5a -P = 29893cdf975c1a58b6 +K = 41f58bed94e9eacd8179fa2437a65569 +C = 3188922516616b9663058442b5b80e10 +P = 19ad1517ec2b8e0a COUNT = 67 -K = 38f52b82bff32505882f59c6f21628da -C = 03270cee2c7f98549721ed1babd1a176a2375c8f790e79af -P = 550da099e9bf3161bc +K = 03babf55a4983c13716e0f7d3271d77a +C = 3eca0ac0ea8b2d2b54df1926850f2f0a +FAIL COUNT = 68 -K = ba75192aa77ca37b6a804ec4d10be5ff -C = 172c3b6b95e90a5004e526403cce6f31ee1b2d18ec04fc3d -FAIL +K = d35e03235fe9108029e99163b543bed0 +C = 060bb65d853022a8a5fc57d61a535cb1 +P = b393efe6c4664b8a COUNT = 69 -K = cc4ed920e2f409dc2162f59074c16fe2 -C = 05c086780b0b3d142b6903e7c96dda9bbed4c20c625c2617 -P = bf4e74f668bb497e86 +K = 30ddf41a49c91a5ab124eb4f21ff66d0 +C = e91fd90fd4947332e5bf3c44bbbd92c3 +P = 77bd72aee5520cce COUNT = 70 -K = b543be3d3c60a36c2da52574809c2474 -C = 1daeaccbc60453029b75771e6e3a9a8814f7ec15d87c4752 -FAIL +K = 625ee22893c530dc4d27fb52c911e577 +C = a1208b25d73ec74b8b9e536610de2663 +P = 7fb1390558457c41 COUNT = 71 -K = a4785dbbf629905e46d69b67b995ad11 -C = ab1879ed92d699df77669a08ecb601e8fc1ab513e4493799 -P = 5e077e31c96bdf0cda +K = f0ad99d8b0619c55fd0557f2ed6cda11 +C = 2682621eecad0af043ae7b0acf71e39e +FAIL COUNT = 72 -K = e92c71210ee08745cd9775e3e0a2a70b -C = faf8640e1a461e2c79258edb7987f6609ff8f964c48a4aea -P = ac585f76d2afd11795 +K = d5725afb58c768b53e9109225415f9a7 +C = b44fc16bb169172d48e3abeaba3419c5 +P = 23464114ff5a1557 COUNT = 73 -K = dcb1a1b475d8d9d8cb5b30032fb7498e -C = eb6d8f0967138011c8c0d1cc7cc31af6760632cca0157b73 -P = 6153cd19e6154410ee +K = e7d0d30f8b21e71830962ab2b1b2bab5 +C = 8ac3fa3e8bb77cf03c653db9e9bee501 +P = e27f566e4294a510 COUNT = 74 -K = 7dd50eaf723ab2eaaa14a629e7f2c80a -C = 149666ff14aa84a8b852558dc2594417e1f2fd876cf2f7b7 -P = 73cf09df3ffee7b304 +K = bd8237e4d7474ec5b0805130e95e353f +C = cde9af5485d5d3477791e4fd9731a226 +P = 96b1b586ff79668f COUNT = 75 -K = 015fea51449714fa9a170f78d5b2052c -C = c6217a5299d45910f9bdf96e7f280d35b7bb56711f994e27 -P = afb2e908562f6b4b3d +K = b33ecce7a1e21deffbe165e2dd70cd24 +C = cf492fb063ff5b3179ac6d646c3b1bc0 +P = 037b4d1b4eb586af COUNT = 76 -K = d4f126d537830661c4863f37748ad427 -C = 754405d50db8719ab4574f5f13a1ceb4293c94f91e2cefa5 -P = 86ca6e68ec9b6431a1 +K = 3f421188bccbf9b86a480a1ba922c84c +C = 70db15d8ad67bed2bddadf5bcf370f78 +P = 3c00aa8dd53ec86f COUNT = 77 -K = 432f19e469a849bea2d375a3b70a34e5 -C = f2f565e4e26e41fe9676ede38e1f0882ce2bb3a3de294bdf -P = a9d7e570f59d0f247c +K = 0a7fcd26d745affd1abf7ad79d3ba8a4 +C = e933a4922eb2a48d9d57cda68a020795 +FAIL COUNT = 78 -K = 0fb87356e058db8fb25985d1ef391135 -C = db5b4193c1840800367f6727bdc853e4f3e311e886e040e0 -P = ac56cf5ff0636b7158 +K = cf0c9348ca53858b1a5e38667a37fc45 +C = 139fe9f1c4b8dc76246c13febc88aaf5 +P = 957ab1990a17f112 COUNT = 79 -K = fed5fade16cfe8e19d7d2ab2f70e22f2 -C = 20d4268d2f7f6c2cf02670cd4a709cdfb014ee8955fedb67 -FAIL +K = 6b8aeca88a2193152c294d10e9274e5b +C = 0b8b430a3a4df60ebff7211a499ec041 +P = 3b900f66655d781d COUNT = 80 -K = 2f98ed916968a037f34665c2890c821b -C = 7d00f1d80f7a49c4818338ad6783bd5624d0460f5324d4c7 -P = d7a32fe9d6ca06e128 +K = 1ea284339b74965911393318cdd99212 +C = ae374d0931d68d22e959f947622d78cf +P = 5408272a72dbeeb3 COUNT = 81 -K = 576f22a54d9c0a9b5d60e09dd93dfdc2 -C = 48f9d30579b6070395919600d64e416d6f80127c16be1c6f -P = 2078281b19ec508382 +K = 95e928a575ad6becaf55d465b9c0af93 +C = 70f8f10854e01bb49c2ad4440e57dcf0 +P = e60a5e66d9d106f0 COUNT = 82 -K = 6c5595dd56978c44fb7175e24a53763e -C = a8be6605013fb9a654d84221917d969bee2ce7b34ff07b23 -FAIL +K = 383a7307fc83339a687d46ea880ee2cd +C = 241d2dc1eddbdd710d79b6daaaac49be +P = 90acbefdb1aee727 COUNT = 83 -K = 8fcb2156d26e2f5e562de212d84bffaf -C = 7b53fc10ca88d40146556e481f007f6c8d94be65b7c4bb99 -P = d363d905c6e589b1ae +K = 68e21011c250f8e4b2f71674b4aac88e +C = 107378e1eb85ba4830c8d6f4b041fce7 +P = 5affe836a272ee09 COUNT = 84 -K = 0dbd20da78bb9c941fb2bfd30abd1ce5 -C = 0d03398af43fb6ba4c59b47b793a4e7045a78c882f07f87d -P = 4eb8fa7d659c96a335 +K = ba11cece9ee26d22b80f9c802762da82 +C = 98bd81ac073e3c9713c318b5621aa1e2 +FAIL COUNT = 85 -K = 255c72a9b9becd27620091143e6e4191 -C = e04536e0155adc0f343b298bc81a821297538ab24b5387c2 -P = ec4fe8488a8b88abaa +K = 01284d8e2963ee3fa75e28115237bf34 +C = 5d57a0c825cc2a0ae3728c43f2e1ad37 +P = 51c591ced7a25870 COUNT = 86 -K = b261d050887055350e0c2da516933beb -C = ce41130dff472bef4a45dee8ef76aaaf11ded38d8475304f -P = d22752cab945be36e4 +K = 6dd03e21726732265a6da806cf3ff19f +C = a63362a37dbcde82871ef8fa2ac91056 +P = 59169e688841cc8f COUNT = 87 -K = a1e33f37ea4e762e035633a8df897142 -C = f2630c10fae33bb623aa1db51fbc6252ede7523fa5ecfefa -P = 8fc1ea01251d7e5dce +K = dcdde7916201fa463b0eedfcc0b32940 +C = 9dd49fe307d5fe37ed537de754adb65b +P = 6f22fa8c7453b4af COUNT = 88 -K = 7a6eaa90867e53097030984247ff7ff6 -C = 9ad54ac3f7bd9198cdd89864ba06ada6e2df38a5b6132631 -P = 93517165f580912435 +K = 4a1611f6258701528c4df4710dde7883 +C = 586bee5affe9dbf2f2a8b3095e92c6e2 +FAIL COUNT = 89 -K = e89b59e54e03231486800e736396cd26 -C = be47abe2bc2da34d71da6b772bdfaf5e740aacbc3a1d2896 -FAIL +K = a3ccc98cb6058a9aff6fa91f0db0922c +C = a9e6d615a24e2dec216dbf47279a4aea +P = 307b1e737749d91a COUNT = 90 -K = cb4c9b27bf244bfdff5a99b3a0e4e1e2 -C = 91ca393e672356e014e5edd91d8f6750e9e0ea240e8d2e0e -P = 767112ba6f985d721c +K = f3b62b297447448267b143cc8920cbc5 +C = 518c7c0db655b4a4688bf552e42b6a38 +P = 3f1eda1fab82bebe COUNT = 91 -K = db1fdafe7eafff5833fdf3e390256aa7 -C = 0fe4de1dbd9b4d87050a65ba36c101a3648a307321bf83cc -P = 1cb8db63b7e2620123 +K = 0782bfac21a3c23f6a1eb2e656795c39 +C = 77820367fad9ca34f39d8601e93d7b65 +P = c11db09b99932243 COUNT = 92 -K = 687a941ef6a7beae07e595374c199cc8 -C = 9bb8e306f2f7f8f462df9489dd68d40460f055593970c740 -P = 028747a6f20806075b +K = 6c6e9dfeee1e2d42c683e68809f60bc1 +C = 4de522d16daaec09e4ea2f034bc93bdd +FAIL COUNT = 93 -K = 261224e3664923cdaac67d565362dc52 -C = beb9b7cbbf8ceaad345ce0e577b4e6a381f38da0fbb990d3 -FAIL +K = e0bd8f7d4ea3df16a520134a7ad561ec +C = a8faed60f3544d15857cfb307168a776 +P = e0fc1195a3fab6cc COUNT = 94 -K = 5be3e81f4b619262312e4ac28e210cd5 -C = f48d9f421371cfbc64392b7792aea1c73d843355d2b1cbdd -P = b1f85e6214a6782930 +K = 606965175395ce0499b7d13254f63abe +C = 87814ae7bb9f3d4f402d99a849a07b0f +P = 67bab1a187d5f881 COUNT = 95 -K = cc7c9fca1dac3808eaddf870a1e834aa -C = 52a1521cd17fcd6ac56bcd3182e1230649cb466b9e1997a1 -FAIL +K = f91d2a4f0ad31f79f9fde07ca95a0f5c +C = 5a0519198727044c282f5d8ddeefafd0 +P = 0d15732e69a3fc2a COUNT = 96 -K = fe3563c33402b3b39ec60ae32da0a9e4 -C = 45a4c9e55f6b3cf85996cdce3be9ca63a3b64314e20b4199 -P = 0be7fa008986e19346 +K = 3c1d3713a8ebada3e397f1d124137c39 +C = 2a6bab2ff17b3fc10060b2555df32a60 +P = 50f6bc8ef5146815 COUNT = 97 -K = ec4d15af8be318d9167d8ce86c17e5eb -C = 285a49955257c8956edda37a375e43e0b611a81a9a058a83 -P = 1c6cee3865410d9731 +K = 004de5d67e232c15d020de1a47e546af +C = 023b99da20bb2a4d1e3d2dffe5fc2b8b +P = 9b6721533bc987ff COUNT = 98 -K = a307f6640252671725b1189801118a37 -C = d7b9f4f3099c528482d2e9bbd8bf34535f9d8016501ba43e -P = f6789536aa5943f652 +K = 1727d13b41b5841bcfe3bee59f7a7fcc +C = 43d6bcff7ed4d9bb52465d3cf9e6cc7c +FAIL COUNT = 99 -K = 539f491757c7e60316643bd2d12470b4 -C = b6eef1a3dd1175786cb16969ee41d71d9992e20109714cb0 -P = cc6505502107963e7d +K = b4b0f61f526d371c63fd3fb764963aae +C = 60143fc03376dd205dee0233abc19a94 +P = 04b7fb05191e349e -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = b3403daf0873148615fa5c42d245e8c7 -C = 0af0e20c5fcff88db99ca8f9be8e333a -P = e8462394 +K = 983dc3acf84ca6522b26f818cd0cf64f +C = 441da28c430266c29e8413a5938089013c0e8251280ecddc +P = f469d3232eed4d096f COUNT = 1 -K = 083358e7dd4ce8eef3bb7689b2580ac9 -C = 73ba498cfbd41ae0faff8c0b0beca312 +K = 5d5a1c5293d6d145d8b64469fcd092cc +C = 1350989a2289a819ce9f537a824794ecfae26693544adaa9 FAIL COUNT = 2 -K = 64bef8a62fa9bc566860047236570a6d -C = 5ae94df96a02f4c16e29f5961ef9e953 -P = c83d2bba +K = b87e55417da2f6c9c5a80c5b32c43913 +C = a7f172c17c4591ba698d0e2b80f9b567ce61d334a565df8b +P = 6b8f3d4380954977b3 COUNT = 3 -K = 3cf0ce4aed6c8fa280dfe6957f4da6fd -C = 88dad98112de735468ef737a9616d3dc -P = 3c8108d0 +K = 67a0974e2da5cfb72ec8dc7e9f227401 +C = d9ee0b65e4f9939f580d43d913963c8b11135ac4772079b2 +P = cb7f76dffa3be880b8 COUNT = 4 -K = 09e77f0612e43d6341c8fa04f47fb8f9 -C = 6ab9a48569f327b8a32e6cf8447f430f -P = ebd12340 +K = df0666c63b236163fc743f73e7270596 +C = b10316c71983d08caef37f2a89f502e9f3cdc7805a22cfdd +P = 557bccea4533b7c941 COUNT = 5 -K = b24d049580a660ba9fb1986973d80fca -C = a3a4ee4c44fa1ff4481d78dc763d252c -P = d5a84ad9 +K = 1f99114d61c3ff7ac7d0a06b31070337 +C = 1d4f1f50026ae5462f23f5db3390e87c78cc2f85ea13cfef +P = e16405e70c806ae6cf COUNT = 6 -K = ae90640268a61314ac554cba507abcdf -C = f869e7cf1445a49476b858f3023be743 -P = abc87816 +K = 4332565907f041f727f17405d5a74ee2 +C = e8af34eb1ecdb95ef4ee78dd32fd268fd14c9cca23809f5f +P = 3c83f3564b3886fb9d COUNT = 7 -K = 15c745066902867b51f1bd551884fe08 -C = 974e337cb45b697ee10ae293320756bd -P = 744cfdb0 +K = a6d65271745fbcca21a5389ebc040392 +C = 86f2367dbaf3d2fa995bef564e50f4419e5123200ef94010 +P = cf02ad34a9d200db67 COUNT = 8 -K = c5081d6c927efa4565e03da2ef82562b -C = e3ebd2496fed8c4df1f66c37b384d78d -P = 9e3dda54 +K = ced31f4e29a13108c457b796a816a7ea +C = 6d551ee8e0c4d02cfcce26e043348395630275e56bc07179 +FAIL COUNT = 9 -K = 928ddb6d9d757fc99c67d0dab5fb6328 -C = cb2213346258ad0179ad5810a459e9b3 -FAIL +K = 8ad6119d060d2de68777ca37d6339ef2 +C = 4f39b30e7910c42f47c06d6e8a6ff79bbf6c8c014e7b4860 +P = ef81747fa44d9bd9ce COUNT = 10 -K = e73130f0934659c3bdb792bc22d9318c -C = 8fedeb3278317fa948fbdd53bca843e1 -P = 27c35548 +K = 6f09a77194c925af2879eb782335aae6 +C = be19eb89128c8fab60fbf92719d99c4e363dc4bc767a2558 +FAIL COUNT = 11 -K = a05ff5746d5e758917e1c76d96ffc9f9 -C = b88b5d92b0ded1a131f58cc960050ac1 -P = 133dc212 +K = 48e390c79d5061e160f3c3ea9fd4643e +C = e6d0523f43dc0bfa3d154ae4764b67fa80a816ffdf2bb08d +P = 5e0d36b62a56030302 COUNT = 12 -K = 9e6176c2978224c467612d5f4928336c -C = 248a5039efa69dff451d4dc2317bb5ea -FAIL +K = 0e9f14f8653d0edb8a1cef0e94e3cdaf +C = 4d0e690c95c34e0584f63c1f52c41b2aa3c92541b22b68b1 +P = 187f4e556b71bbc2db COUNT = 13 -K = de86493f2013e03f35af20af3cfd0bb7 -C = 7618d49bf0a408ac70e55a738c95dc39 -P = a049a6b9 +K = 6777bc25794e5e0430b489480adefcc3 +C = 7d5bcb143b42c37bbcac662185e45b9039e2836bdec6a40a +P = 34e981b79d338f8ec1 COUNT = 14 -K = cd81fb7145e091e2d1c5f78807e5928d -C = dffa90536eeb96ebf82b86a6173a47d1 -P = e208fab9 +K = 6483fcb05ce88287142f807c724a4974 +C = df69ceca3e6ed90f4fcfd6394c7c091d5d7d2ee3b5289224 +P = 218667e21542f96f53 COUNT = 15 -K = d8ec4e2b984b62c588a24f915b11ef29 -C = 325587ca66bc673ac5a9038707df758e -FAIL +K = 8cb92627116c2df6b01b1a65db463b34 +C = 2bb6c758b98b30d3dd70108cb7516953f1aa6cee7528c79a +P = b53c86a2985b3acad9 COUNT = 16 -K = 3841ba05ffe17d370d2c2c1da0e2f1ef -C = 65817dcf1ea2cce5b2b1e3d358057431 -P = ade3dbc2 +K = 3e2853a7e68c723fd3c23a11f5265cd8 +C = 070b5def479bf6a036c3055b80a344a01dba11d89149a0c7 +P = 91528cfe6d127f51f5 COUNT = 17 -K = 688aac179f2068b8fa9f467d362c39f0 -C = 0679645b6ccbfcb03ceb462fb67d0f0a -P = b55b97fd +K = c4bcf3c1fddf9eabe15054dd3e572d9c +C = a62e28251edc4f5845559cb12c09b07b3c02bcd80e01d73f +P = 5971ba5c0bb0ec0f2e COUNT = 18 -K = eecf0e0347828a0175d793d2ba2f80bb -C = 4a14990e40855ef18e671a6e1a2454a4 -P = d2d971ef +K = ac3f444e23e8db29956c8a42bcce5e51 +C = 1330230b82df57c70c4e0355d99ff216ff21dac9b8ea2b39 +FAIL COUNT = 19 -K = 3a37a8fde00c68977d28d1e0217dd310 -C = c39ad03248defdb46fbaf248b0708ed3 -P = 7e42284d +K = 945fe574fe185001e450fd5cb75db0be +C = 02c71f1ae3541138048738369a40a4c6369fafbc3c95f2e0 +P = c66d99902f98f7a26b COUNT = 20 -K = c2559c3e8b3a47b47c0166bfd675c1c8 -C = f1eb75764f076a0e394fa94bc972fb2b +K = 55c4a1780efc3addc39b20db56a26f37 +C = d0d517299b02991d257860b205736aeca1a0ed579579487e FAIL COUNT = 21 -K = 54064af81a409ef21eb89bb6a602cddb -C = 5c7a9ed4f0b96a8425b3aa1a064e3840 -P = c686cdeb +K = ac0eafa3bffaaa69d5e06ff843e40f05 +C = 8541373388fbfa33807edfca8686ee33b0b6d03ea060b767 +P = 2d062b49b090ce6baa COUNT = 22 -K = 569b4e447ebabfcbfb2592db9f8a4cc9 -C = 2ef4df8e4ea305f2b01eb262c37cdf1e -P = fdd3ea6e +K = 13a902a1b158f869805ae9f7f67ab4be +C = baf0f5323760182a2b70185a2e8e9500771df63a90aa6f1b +P = a88ad9b29c5fa75349 COUNT = 23 -K = a84b631a3b5458ee766671eb16b5262a -C = 629b6669075464d482f66947415251f5 -P = 432d9740 +K = 6056d38033277a6bd3ae29464e97dfe0 +C = ea4a3f780260a20328f840e61daeeb0a62aa9e4937ae46e0 +P = d9cb242b8cec1d82d9 COUNT = 24 -K = f4fb8bea44be13a30f1dbc1e1f8ffbc0 -C = 58ffc711da32de770747298fb874452d -P = c326badf +K = ce3ab0d663a1f92c303182338b36769e +C = 56401fd64b26b038cd440478bb51ecabf17e0891b5860103 +P = 17ba1f16fe910bacdc COUNT = 25 -K = ce8e1ecf00a7d3f7264589dd9cd718b4 -C = 800aa99aadae6ce13bd239d608f07491 -FAIL +K = 62fe95d00999048685b080d6268cde51 +C = 63f77a644d367376c6c486a36f28520bb04cf3d473c9743c +P = 7e844bbf2cf0594743 COUNT = 26 -K = 7b9a02f31f52a43c2ea7ac96e1f9d399 -C = 37e01865514bc4fc412c599562bb750b -P = 981be9b2 +K = 1e0a8db49fc5be2eebdea01be92474ce +C = 130fd37fca7df6875483db48b372769320d23f321d9212c4 +P = d4012fae3b94b9f622 COUNT = 27 -K = 7c9be2ef007bb89202f73803cb195e37 -C = 828c8118b341e6066f287500a10a095f -P = 1305b37e +K = e252e84273cbb79d2bb9aa4f5b8b588b +C = edafa6ae9363057cf527f92b310e826ef79afb23bb316f36 +FAIL COUNT = 28 -K = f890bd64b76ebc77a79f70bd7901c68f -C = aa18ac1996347c71a90d0f484cd422fe -P = c632aacc +K = 9461a8781b995b34b6278eafc845513c +C = db9d50852ab2a0f7baa7962222a109717b99575ae7af981e +P = d96f559ad75369898d COUNT = 29 -K = aa7efb085d74d73768e49cc7ca991192 -C = 11737aa64c41bd9511ef28a6678cc40c -P = 35382d76 +K = 21733db9a47d3a80f6aacecf419f6a39 +C = f9478c6d1b7e1058a23b9de9274ee8513173e8551edf9601 +P = c713028f86fd734122 COUNT = 30 -K = 1981243502591ffa8402af3c87612025 -C = a65274f52fb2a386388dacbcc0c2350c -FAIL +K = 09e244b2ef896f918711ab09cfe00995 +C = 4dd632c81071575ad4f5528c7d5e30bc3bc1bd51dfeb6aba +P = e245aff9dcfe03621d COUNT = 31 -K = bc0acfc2a1c6bb3f33caed3e522fba60 -C = 1309f8eca623a266c016e7e8e3a0e977 -P = 13941c41 +K = fce1852a1697318114af4d2b20849c69 +C = 6e5fb76b26c87d2c5b078304a1711b23740f5e30f291d00b +P = 622668890c67ddc1c9 COUNT = 32 -K = be512e2ee2d6f6e829a331aca3165c95 -C = de0326840eacb4e48747bfb5fa52b460 -P = f0cc2bdd +K = d0ee06abb81b0b5045b7365495124a66 +C = fb302c959ea50501218c7fcdd9ed1d5d6360b769f92eecb7 +P = b9a3ad97f5f508a514 COUNT = 33 -K = 2bc21b4e3015abf095daba3e0997587c -C = 98df41b4f8c23a34d5c7b7208b49de85 -P = bbcd5c3d +K = b9b6651ee93953f3c5a9ba173ba4b9ae +C = 10e67b5e5d048ad2ad09046b5b65949a7a67de2bdc726a99 +FAIL COUNT = 34 -K = 64b8ef6497c7abdab1330bc4d580ca04 -C = 60148c388096360a15296c7c79934255 -P = 586f56dd +K = 73e4b6d64bdaaf499e20d6a22c6d88c0 +C = 1d55e2f07f469eddd148336f125e1a8092908054d0660376 +P = 17de06de8f2400c352 COUNT = 35 -K = 607285373aa87f6640d51f8dc481c24d -C = 305dd39576a364dc070c162cb6fba6ad -P = dace69f4 +K = 3de9620bfa5cf1c37e1a71ba40f1566d +C = d60902e28ae3af4ce4a982f978cd6164b43c9749ef7e95fe +FAIL COUNT = 36 -K = e9eea56d84a412214d1eef07c183454e -C = 85a3a7f16359c8a03dba98c2e0ff1831 -P = 69f4dcc8 +K = 8034c160c42287a7a69cad8d1c3cf538 +C = fe75e20412d06d8b64f156e936b892c5c65a91e331df1add +P = a82cfe6d0df50fb1bc COUNT = 37 -K = 85e93504e1b798b7336c1f652b08fadd -C = 33c69b597d7b44ef63a1bbcf3fea8dc7 -P = 2deb221e +K = b5a2619eba6cf77eb7609df16506b3fe +C = caff2acfcd13c320371e3dd5c736344f8e13ac63152574c4 +P = 4b73aaafb8f25bc301 COUNT = 38 -K = 7328d159a4103b2d01d5c67e91865ad7 -C = f0aea3dde97f8f47e106515eeb16cc63 -P = 837b110d +K = 40dc53f3b02d6461f8085b60a42ddafd +C = 8223092ed7bc84638dcdc0046ca91f62dcf88c2c69b9d63c +P = f9bd9db3009ac9ea56 COUNT = 39 -K = 2df48896697314dc09bbe675010e25f8 -C = d819836c93474805f0f5920c84f0de3c -FAIL +K = 5f1ee4ac36413cba5eef70fa79a09702 +C = 3b4339659a7e22627ca753c6a35a9ef1c3b42b7e78d029b6 +P = 311836d163e9a723c3 COUNT = 40 -K = 65bfa1433a649128b36f17af21bbec76 -C = 41aeabe0d3ff9946de1c70bdd9c96837 -P = ff624169 +K = 5c829065b60deb3997a2f32b40e0aba2 +C = ac1eb81d7a823777463c24bd8636e124ecb7492c980d65e7 +P = 7f27fbe00215dfddee COUNT = 41 -K = a7baef023f563d682393a115ec0818b3 -C = b57df7e20fb6c16b6b62726e513ce7d5 -P = 781d4376 +K = 18d4242ee193b0f96a5d56597e80a3df +C = afe981a31cc4a2a7407517b9db565c0caf1fe5f2a98d5098 +P = 0cc0e724e949bfda6d COUNT = 42 -K = 97a3be0c6c9943056d2d80d8ca87b1f5 -C = ebb3ef742cf058a7012f6d26da89a214 +K = 44461cb0b3f5b1d13b95df3df6d6bb9b +C = 3c5eb77ab4f1f107278f44dcf53f46c9f6d0d11c6a2a8d33 FAIL COUNT = 43 -K = 961d0cbbba9a201be8d1ca486beed6ff -C = 97c3c2c9af7fbd2122153b39b5da02b6 -P = 50443f07 +K = 2f476df2e1fdfe198ca1e16ef850451b +C = 03b03b91d69b91e299901a34ffc4a0413ef0e4f7875dd84a +P = 16c7028d01b6f32522 COUNT = 44 -K = c0947ad93a35c261922432fb8943361c -C = 5189e96ae248f093cc024ba78df6d28d -P = fd0bf8d6 +K = 72d98826839bac0a3c005a3778da106f +C = 5807590ab793851451051da89e827242f87591b440601804 +P = edad93013c9d71e038 COUNT = 45 -K = d66153bac514368936d4de0e58dd08f4 -C = 5e2bd3501f911342573855b629f475b8 -P = 1a560dd3 +K = 809077ae62d04a642d56243e75cbb7d3 +C = 5235bfce99a0f2b29380c16d13f4d2118af961b8324d7a94 +P = 475aaa08f62a5d21bb COUNT = 46 -K = 17be7471c91450c793226772d9968dc8 -C = 9520df70899b69119afc4573e01c69d0 -P = 24174bdb +K = 3cbe36e7a2246a3c9ee9a4ceb561d00c +C = 39620e7047bd32ccc33a1d1e328695d56a99a9f452e7a194 +P = 268d57bd930e056912 COUNT = 47 -K = 2698bba1ecc85a1878a1d011866d8bb3 -C = 82796dbe26c316183d347421847e44b7 -P = 09af4c15 +K = 801349d78b67d5861d75365e3390e752 +C = b8ce5c72654427a49f907f8cd73ad81ac3d4aa23d256f991 +FAIL COUNT = 48 -K = 86d0f3f4716ce4fd0aff78f2a8816fd7 -C = 99733c69c479d938a8299b7a94a485ed -FAIL +K = bfea09657ad873e91a02f0cfb0a17766 +C = 919be77f4d4de7b2315753552001a91e75c638e888f54fc9 +P = 12ba5b0cbad19b9e1e COUNT = 49 -K = 6ffe096211d8d35b7c382f54eb1e9b66 -C = e77c5ac6211203d6d438168dd94e44a4 -P = 41213c41 +K = 99052c41ea8e5fd111380ac50389539b +C = a7d44eae32e82b5119cde28972b2d765930f65842e3e8e04 +P = f74d2e87c54fe13e75 COUNT = 50 -K = 5819b840638a47cf113550003435387a -C = 6f14a45cd66ec9366629315a7eface71 -P = f9cc7a4b +K = 726cf715a80aece8ef26662b1d5f2f9b +C = 06a5c318b291d27b0166aac403bfa97f6c7e6d1b98f52351 +P = 173f6a603c18eed1f8 COUNT = 51 -K = a85478c065c2e2b30270a928ac4dda67 -C = fb04e8caf0f6e6b09d59068bec7822c4 -P = ee238f15 +K = f9dbdc818e835295034fba47fc7c1ce7 +C = 7a2a0eaef44569974b801d843163f2f2c4778f2e981ec7c6 +P = ac991766cd86a520ce COUNT = 52 -K = 064badf7ada995011092f1f034b4b2f1 -C = 1ab87f86ebbd14d25a66fd65daad3bf1 +K = 84007f4c08bdfda167d92d41a8a21607 +C = 173f256074920f9958a3c745e14d9acc7853645b3e2552a5 FAIL COUNT = 53 -K = 884c9bb01b3fe7113d27ec76224009fd -C = 606f1b4dd57dad499932a2ac9c2f41a9 -P = ad3d6dc9 +K = 28f85cc8e26cf47a8d99b0584de5d09d +C = 6138b046234f2b14a71d86c7ba1a71ace833cfe2b30dc1e2 +P = e5e009a9c2878d0244 COUNT = 54 -K = 3b8976f7e005102246507e23bfa1d0e8 -C = 4e3d5fada85c3fb71549c450b2a77769 -P = 68bc066f +K = 7f5b9fff0baea6ab0b7bf8348d978346 +C = 637bd9cb964d1a4cfa7700f2bfbe5ad7a60bc0ff01ae95c7 +P = d0a5c3a3946c8cd0e2 COUNT = 55 -K = 1ebe2891d6f4b5225f4687ca98106ce8 -C = a29c3591863622ddcd0bb6f18feb00c2 -P = 177de092 +K = abacb17e0dc3d4c4ccc2d2bb44fc4915 +C = 6f611436fbb4dca74f77a1eb325bde63b1ed0e303ef42519 +FAIL COUNT = 56 -K = 7233abf473294e6ac42ce4730968e562 -C = 83d2736ec87bc1eadf961b7d7d54940e -P = 5d707fa7 +K = 8097a0e83f9ed32fe9a76844cd232a39 +C = 169aa6cf0033ab14e94430a6ab9d7a3ce93942f903406ff1 +P = b93f363c4540a94cbc COUNT = 57 -K = 05a49025092ffe303f57e645580239a8 -C = 37f98dfd4e50069f60555aed85f1064d -P = 702ed70e +K = 3017d00af85f2912f084917a48e7dfc7 +C = 9dcdc6eafd292690b6049f437d6c89de835b383539ae583d +P = 170a5e223659637eb3 COUNT = 58 -K = 35a1dc6ffad8bf0b88a487f13276e874 -C = c10b97f77f2081931e07136f9a53472a -P = 0ad172b3 +K = 47a6e3cd1ce846d84d9e50897f595ab4 +C = 174c8dbaf971146208e1978740e9b7ecaed2252b8c5d887d +P = 54a0cd47450489b215 COUNT = 59 -K = 02d5608ff85d66ff38ad9d1683a6f305 -C = be56fbfb61f4b3fa196895256e503fc2 -FAIL +K = 0d6165bff0c90af9990e81983f8e4fcc +C = 8bd456993cde237aec6548541935cb83e5699ae6fc7eaf9a +P = 2963d5d2ee716bf6de COUNT = 60 -K = f406c7708d716093b6ef48cc50664664 -C = c2eac2f91e86a4f9f4cdd9f65f3f89e0 -FAIL +K = 60ae01bdff1871f6b84eb621dd0e872f +C = a095aaca974de891737ebaaa1ae890b24efdffa9301f07fd +P = 98e1e7d5d0fdb178b8 COUNT = 61 -K = 0cb498595a5942500a15cba413949f30 -C = 1526bfcb8ae5cb57741273336530d952 -P = ecb55d97 +K = 384dcefa828cc8bbd628db3ae2b2dcb4 +C = 859ea8f1dc0be982bf65aa74f4dac53c58ecac866ad2c4da +P = fc696daf138a67153c COUNT = 62 -K = 53bf523789a82c2a25b4bf5c312ad9ca -C = ab59a52aa1b91e865939208390b783cf -P = da56f193 +K = f03d47fa16b3dc6ada69516f0b4b259a +C = 91dccc003f8493c453796f15df205846f56c207f3b91a8a5 +P = b67ce1f6ffaaf4763c COUNT = 63 -K = 6f2f03be83c5ac5cc1a1b84c6a637ff1 -C = 0aa4e878cf54c8c7aa0171a99ecafb72 -P = bb2b35ee +K = 22e7beb1b37755a622c60ff3d1335f94 +C = 8f290a2586046b2e59738bd12c35aad4ce3cd416cdf1dd0b +P = 6e04298ec7b92440a7 COUNT = 64 -K = 84b501b560bf574158a9f30d603d723d -C = fa3f4455d2ba124ee153c21fd7a4dafc -P = 1e7aec9d +K = c17899494142cb04f0b30f6ab9f7b9bf +C = 0952d3c651b9998f04677887207ca908b5854d21663d9b1e +FAIL COUNT = 65 -K = ac1ca9e97985a922a4258057424f3f2c -C = e98f281fd45918f66ef820a901e97a3b -FAIL +K = 346656ba9a9364354f78881eb8f5ab45 +C = eaf5e49107cd6446f4ef9cf946a38438c006086a055f6203 +P = a08e4e67de4b740579 COUNT = 66 -K = 70eba457230bef37b6f3249d27ac957c -C = 5988875532206a83af32a0cdefbe194e -P = aeea8c76 +K = 7b2befe43b7bb7178444252e90717a72 +C = f58585349990442624216d77d022fa5ebb3fc6d81f59a915 +FAIL COUNT = 67 -K = 0c2e3b07191e500b331500911544ab02 -C = 810d37f60ee2206439cba61c7bf0a84c -P = ddf3f3dd +K = 6824070a43d573a7a6163223747211de +C = fa67340b1957e50f612ca71bc1d6b7ee3f7b136002736e25 +P = 7e7397ad51f6e5838c COUNT = 68 -K = 0b218ec2782c656ab892f80a948186c8 -C = d3b36fa03d8e1f03f56c10c115fa0a16 -P = 86ce0d49 +K = a6896fc99e8ac06803920b1ec7e5111a +C = 28ba550dbbb4d7bd9c703effdcb863e0ca9c4bbd37638e96 +P = da8deee5c278e6aa41 COUNT = 69 -K = f1d84b0134a14c9442e867b8967721d6 -C = afeb5523f75b8125291182adada8cc13 -P = 54bf6e17 +K = f8cbe10d8a2722602d49f5702ddc6ddf +C = 28ac806d7123e4e3fb531f04737c5f493cc3ffbd2bc18dea +P = 2faed1bd5860097844 COUNT = 70 -K = 7c9912fd3933908641790123698f21d2 -C = b67d5c456b23cc8a41492726787391b8 -P = 6f46247a +K = 26ca2ca753bfdd5c3f68613a47ba0475 +C = ad3537b946b3e99f2409bd46bc6719675529cfc858858058 +FAIL COUNT = 71 -K = 375e376dd92b277b288a45def6c9549f -C = 5b8b198161db24faa05863ccdb0a0d8a -P = 3c2e693c +K = 4c93c7f529c4aab96050bda49d3cbac0 +C = e3f5f1593a36e53f7fd93a290684a13c162197175d033cca +P = ebed4e0d50238df284 COUNT = 72 -K = e764a5e08f3805ef3b7f9b65c6a7c13d -C = 4b10f072e60c7cd4a4f32b1c1b62458b -P = 807ee837 +K = 3ef4055ba096b8465cf98a05042c9e98 +C = c25417ccfe71ea0abd5573641f8fa7a4723f60d78953ea09 +P = 5aea0cb15b1c563398 COUNT = 73 -K = a008845cbaed0ce8193d8d535b6b6172 -C = ff3d193f22709149e1cfc0c44f6b91b1 -P = 58f9e9c3 +K = 555a27fa85e24e917e95d8adf4057c1b +C = be52b071ea92c8ca3071f1b6740389e0e6e708eabc589403 +P = d9b8b9cba374a4caa3 COUNT = 74 -K = 7880daf22c717ecdff6a0361e564c344 -C = b816ccb68833c0d453002b0f7b5a418f -FAIL +K = b7fa933f12c98768423cb2f9ec1b844d +C = 43fe8eb5c0d161ddf998a22ac0ba9e458cbd966c4c80799a +P = a732b5d2b94666fff9 COUNT = 75 -K = d5b4cbec42ad110b2b7b727406c8a547 -C = 2eb1e106a7b544fd90fa5c95f76d871b -P = d92018d4 +K = 6bb13af9a77559ae257b9c1f7efb1f9e +C = 272c54088612b38100fd283fe9a1ec231aec393eac41b4f6 +P = ce1a01241b6eafa852 COUNT = 76 -K = 75efea4254796bd56d24fbf990ad399a -C = 2f29b9c61e56b901a0fb9a0a18396f61 -P = 7f92ceb7 +K = 34dcaf7979b592905f2aab868ba95eea +C = 2abc98f72f48c22a38599642a14d0971db7acd90e1b0fb78 +P = eb1f1690059cf50370 COUNT = 77 -K = 3b6f13168271b689debb411c43f11072 -C = dac75e469751cd7c3f105d1db1a35c1c -P = 7d242809 +K = f8f421d88f33d5460b65c5e16116455b +C = cbc3c16343f95683f1d84a36eaceb77f65ef44fe350bb110 +P = 0dd41bc6b4fddd21a4 COUNT = 78 -K = 76fb0a6e15648d582134e0b184bb2bc3 -C = 4aaf46b6e9cea0ef6942e21705b13695 -P = 0318b91b +K = 51f9e2533805a8d44437feab0a15a8f9 +C = 5ef1cefef18a3df80cb714e75737d1f70ad43e5f5525f4f8 +FAIL COUNT = 79 -K = 50304d4b172aeaae51bbb914ac31eac9 -C = 6f5596f6cdc012e35391056a89db0861 -FAIL +K = b6571202aac72648589bcbeef0624f66 +C = b8d5596a1c4194a4c28ca7716bcd2f3409ed5cb939273851 +P = cf4e16a913f45ddcf1 COUNT = 80 -K = a1eb7ccfd1b683bd390dfe4e8287e375 -C = aca5ff13e38e7107525aeb925f626f7b +K = 777d56f9060a4fe9ed806b1cf552496f +C = 7e5b27e8aaec91d7f6bb5b6252e328722b6d1f4f67afa095 FAIL COUNT = 81 -K = ea184bedfa32b009ac8d74bdf5cc9ea3 -C = 41444f4f6fcd1b221d793d9bfbfb30bf -P = 17267a77 +K = 910ae94e810edea9c1bc3f8ed96a2230 +C = cd441c475cf044a3d2ad0eef0342c18eefc801a941d9b116 +P = 1b7265aafafeac196c COUNT = 82 -K = 0c0b17c1bd326ed93b04e32ad82192b2 -C = cc5c5d0e8a8614fb1691c94a5ba98c45 -P = 8e3f7069 +K = 86ebe269dd031692158a5927ee798540 +C = 6164a88e1b6c402415ee033275b1ab1449e095df218ca5e6 +P = 60599d6b28d8726029 COUNT = 83 -K = 96b43833cf87aff8add622b06d91c160 -C = d2c4f2aa2c6c996d03d4580b36106198 -P = e8deb6b4 +K = 41fb2ec10227d46d1c53e018b42432cb +C = 719325906dc7d7bc0608807b434c55fb23cd22f4f62a7689 +P = 338a3742e3937273c2 COUNT = 84 -K = 15fbd589fc2e872900b32f5dc87018b6 -C = 69534c753cef0f2be97d70162f80314f -P = 264c5414 +K = d03ddb7b6e8972f97ef60c5dc43d3784 +C = b4b984f2caf90a250786ecefcf8299e8454c12d90e66437e +P = 36081d35e8139f011a COUNT = 85 -K = 233cdeb0223a019a955fa64ef81c79c6 -C = b0bcd6e1719948b50302ea4dc76f473d +K = cff0b3220da855c98962b18bf754edb2 +C = ef3fa0d134effb7dbe7aee0905257fb762a8abac2f2e0be9 FAIL COUNT = 86 -K = 2d25d441494964751f28f897975697e8 -C = db1c0b8d8821c923ca2672a8be170c63 -P = a0b5c597 +K = 1556013990d7c4e8d9471adf87382ad4 +C = 569288c5ab0287758f567ec5e7c9df46ba165bab912f33d9 +P = 53e52ee633557cfb45 COUNT = 87 -K = 3e89d7ed8f33ca2b7c35ca73859d9550 -C = 57f5d13e0c5ff2130d57779f29466317 -P = f09e5a49 +K = 6d7559844302e2340818b1a9e7bde45e +C = 5668d93542ed800a9913eac80eee086117a616de80eea81a +P = f9a5cea3327c7c840d COUNT = 88 -K = e1eda05ac983cac46de4d5aa1df8a895 -C = 9a26eee6537fb100b8e99d073e85f8eb -P = bab82ecf +K = 74017b81b6c31f688065e63a2a154253 +C = ab3cb707ae0fb959e1760ba94d1704de0634b893e607d484 +P = decbe76836edfaeecc COUNT = 89 -K = 78042d725f759f9ac33b2d7c257f5215 -C = 20b1bf0e1b8ca4ebb187d20a5d5977f0 -P = 14e00616 +K = 88a7c65b01dad7ee90da50ded5be2a51 +C = 6d335eda569854cd3d1020c52888ad9f07feb8c3f7a36b6c +P = 02f1630e2da2c530f3 COUNT = 90 -K = 15a34bba0fe0468e95e5f2612c94b983 -C = 7710edaa0f624d38533ca607dafbda0b -P = 855891df +K = 2e426014acf8e82bf4d09dbbe6442fe2 +C = 76a72b3a9071e074ac433f877b465206d1379c491258ae4e +P = 8edb21d88cfdad6f16 COUNT = 91 -K = c2d9902132f68e101d7b047ecfef5c47 -C = f41fcdb9d37c532ad08191c405bc9bfd -FAIL +K = 08b02037542c93a0b74ac1c0a038970d +C = 12f39b5d62fe2abb5ee23fc2fd48f8f0c95b852c74098e34 +P = 3319ae9f2a22a0bc19 COUNT = 92 -K = e23d63bdbc0d2a388b4c19f4092e5592 -C = ed1c9c90a6ef63f265375c589fcd7074 -P = ca7a48ee +K = a98be310ec647310938dcd91d85b6331 +C = 8c278372fbc0f7cf7ffaa9e92ffb332eef287bdcad649596 +FAIL COUNT = 93 -K = cc3cf4da07a6d28a299fb62bbe5fd8c3 -C = 516631115aedf15b670cbf3f0de3f666 -P = 7cf985d2 +K = 3aa53b3da6b7588c90a9deb5f3105f3b +C = 570828bcd6c461b8fea7aec085377dd6549ac86a917fe5ec +P = 08d75f16b051934413 COUNT = 94 -K = a7f63fbc9c065e550a8cd4ef74639461 -C = e3434ecec92e2158311560dee1b22175 -P = 3304b124 +K = 2b3e2e7284d49e7dd45cc734e0d0fa80 +C = 36441d802ff7b5d57c88806540c1ff7997dcf707e50bc899 +P = efe560be4819df2dde COUNT = 95 -K = fd554bae2b180c87da3782c1b4ed3939 -C = 5424e88bd831963250cd47308d18478c -P = f8c35082 +K = b4bc3f95406abc83694fb941b28378e3 +C = 9af84e4a03beee4ef322557aa2eecf0f9e1131b364009eaf +P = 18d20c27858f0512e3 COUNT = 96 -K = 158026d9ed9d5b60862f1c2fb241e239 -C = cec0e4c955751df24680e8c710b230c7 -FAIL +K = 2fc560888cf787450d00387ed9a4988e +C = 99d79e2bf634e41394114390765f643243a5bbd8f5cd7777 +P = 7732d6067025cba26b COUNT = 97 -K = b53df009105c3f243509fa39b2e3829b -C = 548842da1ee3c158af9b3fe8cfadeb77 -P = 893faabc +K = 71c0925ed2709e37dcf0323160050e9a +C = 0e9b4c66dddf0ba699846fdfdec053ee5e9b22eba6e45cf3 +P = bd8b9f230c798d8b92 COUNT = 98 -K = 50e16ed41a9abf75147c1662b37003f8 -C = 4938732ff7fccb261b0d3b3436c532af -P = 22ebc0c6 +K = ed1fc4673974091cb4f6e195f171acde +C = c4e4b1a73c92ef9414db64ce9630af2976d9526a95e6ef1c +P = 9f1ec6585345837105 COUNT = 99 -K = 1c7e51e6adab8576ffbd8a030dbb2a22 -C = abe296c70d1f14c8c6da4f866161c353 -P = 71319794 +K = 3c936a8b8d376e2b7a0b0a488541ec71 +C = 57634289e42f24c417df3ff8e34683a45cfdf03a87ed1802 +FAIL -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = c5f0ee1fe5800a4dd6a7851630207237 -C = 5fbca6a7b7a44f3535d21adad76281ce8a2a622ace3eb09e +K = 9fb29956dabc7f1a6ab21ddd2d295572 +C = bf25dced05dea29bc5dfc0d3266b08ee15c4f07a453a7b4c5fb7cd296cc92741519e566061bc609e FAIL COUNT = 1 -K = c8089e2e24107c2a95301425c55170c5 -C = 7243aaf2bade3eaecdce3076793f6af86954fda473322894 -P = 53faca98f7b213a6ed357adf +K = f685992c8b99e15c0d3263277f260101 +C = 1b50e6dc0e109bdd0c0e38eb99147b182b6c970a6571502e0467f57369d5d891b3bd78c619de8ac4 +P = 3d704c2181ec240eabc161269bb8da6589ddd74219ab9c7558867e3d807b62 COUNT = 2 -K = 6208e8b33b897896b24d4e55275484c4 -C = 631975e0c7cb7e89a73d1893e0d48241dc808948c3f9df57 -P = c15e206c3fc2ac06a944b918 +K = 3871abd1ffe55a4bb36211ea6c53af7d +C = 85643b96e9b44c763c9a981645aff9a391379cf94e5eda590bb32550f872d5bbe9ace50e1ed514a9 +P = f96e591ecae934c101fb2dc3c7d5595073f64562e449c32dd0b9e69b8b3770 COUNT = 3 -K = 582810efed07c85decf402a9d224a37b -C = 22443a4a97e794578924464100cbcbbebe1289ffa7faac29 -P = 3b6746e6c6c26103ce54e73d +K = 05582ba33a5c7cd1be31833a16ed319d +C = 6f9441dec112e33bb59ec3cfc3ebb3d63687cd6541aa998368ffc747770eb2656412328e60d25e06 +P = 477c701f74a52dee5ed5d5aebcb1cd3646857987d15c14407c8c0b368f18cc COUNT = 4 -K = 9d47855d6a3b89699ddd238e6f91b902 -C = f95b960070ef457524d93ff94a0e1b1d2c1476beb40d2ac4 -P = d70960830770cc8eaf18d2fb +K = cc83702031bca85f0312042a0ef5b364 +C = ba8af3dbc9a231b145221bff0af59567808e34d71e1cb73e22f3664e3347c5434e34afefed181395 +P = 172c0e3c1d274814450c2200bc6763385c4942f790a96914c3e7c36fc0a481 COUNT = 5 -K = 1aa67d68000549f76e4f572fee88627b -C = 5c95bb3c560042f7852249b124fcdcda630ea889e6d939d5 -P = b847413c06b6136859ab6743 +K = 1aa67a58a6eb57f638af6512d63c86be +C = f2cfcf8b651faf9853d5b0cdafc1bd591b9a0277bd4f5e9db73b72bc590297efe07b038393cefc3d +FAIL COUNT = 6 -K = ed7eeb8bb28b9101b6c2bb7e6f5a0eef -C = 31843886f0469c9da3af1ee6822baf2b763b2281094698f5 -P = 34726cc7fb6a6362f43e61c8 +K = 1450bae6e772f7599eeafb96dba1a8f1 +C = 183b1be1465d6a968ec11ba349611c46519bde88df8c8664be3f3361591d5a813ba1fef4bf4d91bb +P = 20e785fb06e5e34761a0993665f4806acb0266825948a373593e27e2148c79 COUNT = 7 -K = 8a91af4a8af9cfc79912c6419cf1c06f -C = 7cbefd175e18aaf6a52d3ff9aabd65119004ad44e03cecef -P = 4009a2c7c1a6b08504ebbdbd +K = 9e46828cf5757d1dc31de5acf1305b81 +C = f56ef258213894aa7b443b79630390da8b9dd2303d0a2a05b46d3a5bae0e2f3547c4f037bb7e92d8 +P = 4fcbdd9ed6971833c705a5316137c91e4a6e2cdd15f3fc7f85fdbd52b58d85 COUNT = 8 -K = 465fac24316389b02128cc6b5c182829 -C = 55b5df075f65e7f62c70e048b116ad55c223127711ff7309 -P = 40ffddaa860043cc327fde85 +K = 89e2c970b9149a1bdf92889a77986fad +C = 5037c2382585530fb5ff05f3fa42d9912575abb5024f563f601b47a9ca0f485e181372448e8984a2 +P = 7d5712de23c4820e9bcfb5141324fd84b43195109552c12fdc97de40dab5d2 COUNT = 9 -K = af05ceeba67a867ad40c127b179d8ae1 -C = 96d4c0618032e45f238e590f7e14abc3976683ee9039e3cb -FAIL +K = 03e8249247b171d3db7aab12b5edb431 +C = 4de89506f6d3e1c1e52f28445412c7b837146eb0742f51b5d7eb5f68a69fafa8b5e4a2bf1ea821b2 +P = 7acf92a1d2069e6ace4d3f49cccda29aee478bf9e27a7ff27c3ab852668f45 COUNT = 10 -K = 4e245218bbd2a0598a767f68d0b2c0b9 -C = 66ce7c91fdb28b8a6790d25e4c3b62d6894913341620fff1 -FAIL +K = 3925a0e53b2d901278b83ec32ced8036 +C = 79419f8e3836530b1f5d284af3c9050ea6ef15b9dea818430884543a6b1bbdc2f6232b94244b8494 +P = d2fabc46877134cd38f891bcb09a26d23c53058695c6df7e2a25c2167fc632 COUNT = 11 -K = 9f69244e151a4eeebfaec385a1509747 -C = 2d629a5e09ada7560872fa4ca68e1ed205394eab50a4a4d5 -P = 3ba88a1d6f798f63bd652c51 +K = 5b38febdd87b4cf741cf242d71f67fb9 +C = d97a94d304397049bd104c82d55e663b301d4178fa02b3e6652e06083760780b94ea7a9673db18e6 +P = 38e4ba2a1e8401e7dcf2a5c83fcdf1496e8717ec0b57f3aea5d9bcad74bf6c COUNT = 12 -K = b2b3321d455e0f6b61e7684bca48caa8 -C = d10859a967c88b7bf1e0f33f06ae23c1346cd2d186c0fbec -P = dc492312e45ff6de4111ceab +K = ee621f50fd70fbbc63e7588f1c9f8ded +C = 8d36092dea1451a86a67185085d6984961c83c49c3fb707254ad37027c6ddc4a2cfb9d8227a25c83 +P = fcc1f0857fc97168ab69ced1d8bfeaddfa5d36c6393824d1e1f3a6e588e37b COUNT = 13 -K = 139702e8bcd512c263c84808d72940fe -C = 2444a5b4c152c506faa79c596f6071bf6d89b03c84bdf269 -P = ffb015081d82cb46f1d1ceab +K = 9754301c12cb2ec257a0a63d5ffe7b66 +C = e25524b03fa4d5e44019f6b179f85ae011ef59e89dcbab8f5c270d2db7f288c3f035c2de843bbb44 +FAIL COUNT = 14 -K = c45023905ce8c5a6a89cc0624b8d6616 -C = b96272cc1d25d88fb496ad63ec4641575ffb0a9446a5afba -P = 372e411ffb3ffd3c008cd761 +K = 47574b614fbfd8cfa31a8d9eaa9ba859 +C = dbdce49904cf3e07cff8c1befcb93b1801b2b118f8cb9fe66ddb6d75f0f4d1684e007432d5984620 +P = fab7d16ccb455691169cd0c1946f72c51d6071e9af6d386afef5870cdce8d5 COUNT = 15 -K = 4d18ed5fd5428aab5d967c6f253b8479 -C = 1beb3ded779990cfaa0ecc5c3f12dbedcefc951f522fb223 -P = 484d825f5e14c853311c1f77 +K = 916f514b2dfaad2abe6dd00d88bfe4ee +C = cb5583e81160eaa9703c0ca7b366dc37d2858eb50ab060a6cb24d3d624c40b5706d8e9ae93f28023 +P = 05f4b476df8b7c75076eafc755e7e08097e1dd9f421a76aec813c060380969 COUNT = 16 -K = fcdf5e6e2111cbf6209a958c76bffec6 -C = 6081a89c18b93143141636d462b5473ee1e5fa2097533c6a -P = 6ef271277336b38a03db2a9b +K = cfe07ac56ff9a895aeb44bc31fb35f13 +C = 194836343d5b23a5d6b67a27ee01cd1bb19051c5aedd8a28efeef6af1831c3dd238feb1fe8712ee5 +P = 81c249dcfc042eafd4d10b69f23555b2336ee2301bfcc7ca4e4e1686921490 COUNT = 17 -K = d4dc1bcce58f3a973267df9f12dba3fa -C = 2fef768c6468923620a12dc6ae08c48610de2077ea42b8e3 -P = b76eb57c678a7af7b43f6c14 +K = c6ff60be398c246c0296d77891b59c06 +C = cccc2956fd9ba7e5c27a336714728653ada25c840eb1dcdb0ea5a1c06f2b9e871e6809844a79a75f +P = 88015003e8e9576997f705c809d6edcc3a3647bbc909827dc22fca2156528b COUNT = 18 -K = 3835b38ffbd4afd6cd22477de3ea569c -C = 5df3d10b6785b1629c278c85b4243c3882749c655df1d4d4 -FAIL +K = 54344fffd1399d4c44578afcff70c281 +C = 765e55d481a200b76627beddf2e384414b60072f8560ec86242e54993a40e90eab44ab3bc23906ad +P = 1a60e33fa732d9a8463e1e29a4eb40efeb36865e0a24878b145756ba781c98 COUNT = 19 -K = 89a1338c6b8206964c2435be851dd9d5 -C = 908d8e5ea191d218b306cbe4b4ea6b3a9530e239b3d4c80c -P = 966a5a7fcd47edad7ce54fa8 +K = 29442c4c7c932a43a423d8d042c5ad84 +C = 83528f27dbfadfea69b78cae7e2a1e09e4113a4d4b16c092bd5c2e6fc69b749f564f4f337ef27a44 +FAIL COUNT = 20 -K = de955301d865e4b492500fa277b8239c -C = 7e4adaf38b4f2060870b18d59cd6575b672baafb47642751 -P = ad8aa49bb9599b8a71e6db8b +K = f827cd73294e3b915b2d3642f5433015 +C = 99a1988e5b1135667b39fe91a6baee05489646a08203331f37c97448304f09a224d6d49c930784bf +P = 58877a6424e9415ecfbaeb59869a9f15bdc0e43bd73e08febd9448a2e1f7b2 COUNT = 21 -K = 0485880e812e27f737a410dee274d8b0 -C = 15de5369aa7705f665a70d79f54e698ef72857f8542bc5b9 -P = fc1677013a1da89d17c3fdc2 +K = 1857336d2b53265bc14a5d8cf72b2673 +C = fc9967601be3271148187c34a6606fc9f4ba432820f9840c34f82ba0601fce289ef4ad4c14e869be +FAIL COUNT = 22 -K = fd3f6c86f81bc17d1ed01e5ba8061d8c -C = e4aa0955166170b3aacd992b88ff9cdc6baf7b87a1d65892 -P = 6ccd0e08c50735c81a4f20fc +K = bc69d159fd7ce5d8784a8df52b12b6d9 +C = 25a64b826436c36120fb4db8a9402412f3180e24c5dc19b2ac8a3ad0e7ae214ec88408e693ef1678 +P = 2ead92c8929cffcdd6bc5a7c63d05bb5035a263a24b07c254448f98a85ae0d COUNT = 23 -K = 4ef4a742a5c537c7fecd5982237d7dbc -C = a814390aa0dee10c49524560f78b321bab16f559b7ab99a3 -FAIL +K = 6c1dc35ef8acd05518eb4c5c39b64831 +C = 8d9dddc879607792116b24a9e233f97a604b8ff36a3de2379c849f9990720a9c5136e2b463b38947 +P = 55131b7fb0025b7857b974d79229e053a0f992750c6bf9575178fcbca162fd COUNT = 24 -K = e233d99475a2c2b27b969f9c3e26f384 -C = c7494b24074225c32da5241a948340fd78ccc9cf0bec7d81 -P = de51fdaaa97f310cace4bdb5 +K = 56e2186ce90c5895fffbb3234b3d3d6b +C = 8e4a15715bf0e5cfb87429e4ceaef6202b5f183d4c681491776621a8653601c0a221949faa7f4de5 +P = d1eaba3b1d56b896039c8e0413dbdc1b420031af3911c37b3349769d9bed8d COUNT = 25 -K = 757902b5b234b19a4e6fd0df9a1f28d1 -C = 5f58c4d1632472140cf9758f1fb4fce4b26c496e99944779 -P = f3bf8198d5d80c9412cc0c15 +K = cd5b0adc63ec6ee8b3047000ad89a17b +C = 2f4f5a01c18958357dd27de8810c2b173bdec0da9bcc819a54900b0d131906232e6cf9c41cb426ea +FAIL COUNT = 26 -K = 15e7913e606f93c0e14ca38b3b150673 -C = fd85afa965345318acca9bf218fabb17d55bf0488bb35136 -P = 8e398b08fe5caf654e210970 +K = aa9b7fcffa6ef573a33c5459a3e67df3 +C = 326fba105d3042915732b0cd334a30c0b807960b31535a0db1b615f4d047cad9b39ec7f91c14ced9 +P = 3cd277595139bb76ee6caaa3e4361fab17b1293ec58682acb14b6c63f36548 COUNT = 27 -K = b834527e66fe206335379bac89e247a7 -C = 0a739bd6200309189dcc1b8ecebc41a938c7cb6373499131 -P = 8ba76f5915108463eb691ac7 +K = 803b8d32ace4dcca617935a7e2bcbfab +C = ac7c0a624969e09cc93e7629b8eea88f7917995abede56091d1ba52ac70bf6aa34951f7a28a78e6d +P = 85b47fd5ccc16e0cd3e1f7313b7cef00d8734a2aa1e903c5c9d7aa9a6a79d3 COUNT = 28 -K = 543ddf46c69b6d88b427719843074b87 -C = 74eb528ef84951a5db689b918f657834021099dda1162689 -FAIL +K = aad08702f4d88f79cdaf8a5a1493a237 +C = 60590d3d82ec6d2baab0f60cf6b87446666db3a1b3b9e6f35115f4344ad0970ac82024a97b78707e +P = 8833e14e6f9d441a89b7c4ee000dca61a63f3a739c6b7adfd2e5a82f1cf448 COUNT = 29 -K = 7cff96715e9407d9f6763e24a4ab9c11 -C = acf69d93246cea45613d79536a896813fa4f0ce386295d15 -P = 3c6b7cfc5cd83c6c68fa19d3 +K = 54440bde074d345d5a4bd713dbeba930 +C = b395bf624f408fb9b808d3cf9aaa572fd8229271697f8491a9cfad3ff2d1ee5ee7fa66a1b57a4895 +P = 2f5cdc934b5c3e3ab1fc374a397e3b68484f9131d077649013369ede46e273 COUNT = 30 -K = 369fa7b1c1d78e54e297fda2ff9ae9d1 -C = 76e2e2224a3571825df6a0f92cda711f01a6b101a373bf9a -P = 9c1515a97865b28b15a3f605 +K = 19f29c7cb11cee8dace332fc85a3cc1a +C = 5407eb64ac13edd7c8024d496ffc8c038389ae84fe40ae3ee234128da77ef8750b6d5c5dd1d1f8f2 +P = 608a83cae89cf2cb937066d898cade23f74329a636b46244854e4de7e3aa6a COUNT = 31 -K = 31273b55aa93da5ba34785c3eee05135 -C = 6c9d6a8fca4c533b87f15ab43849ffd4de90cac8841378ae -P = 4a1bf7edeb618ec56719e7dd +K = b30e43f73fb4c00317f1e0e16248d3c1 +C = 7a7e630cf724052600e4f0028800df095eb7dbcc3dd5a246c63fbbd25422ea176d67446770965405 +P = bf201adec1c89799ab5e6b456c66cdcee7d50291d93943ef6e630109175399 COUNT = 32 -K = e685d025b6783b6bc31d58f294606257 -C = 05a5770e0f8a2b27eea357b6fa1fb6096ffcfd2246e01034 -FAIL +K = ba4cc199a1bf06b143125e76d121cdd6 +C = 357e88a85a9fd1fde96e201700c7d3b496de7b5797b1fffb6f9cf38ae49d6a3db73b5365313bc2b9 +P = 5bb801ef045e814a7f9109b1d696a45aa873bf44ef897ac1783d0088544ddb COUNT = 33 -K = d10027f2095845dc3b1102d4152c6296 -C = 7a42c2a7e8aa563501c82088dcaece48f08a894c1ee9aa1c -P = 9913a1af72ce558fe314c65d +K = 33444a2ec13f7564fa97683b5b87c10c +C = 9b62bd49001f384bfd4a90f15921c5ccd761f94c9cbbddd482b132fbb28ccbdd6c918e63859b78da +P = 6354ba269d138190c425ed245cd66b30008054d7ecb68742875f12a1710978 COUNT = 34 -K = 5c9e3cfbad5eb456d60dcc4551919fca -C = eed76fc0ec07fdb8e591d231971e432870407bd711706dc5 -P = b1c8c699c87f8b38bef2c68a +K = 2db67c8e1bbe70277dbfed72869db781 +C = dac6a02a708b14470145bcde85a16aa428ec2bba519e328daca1273a80afc42dc880d3b8b5c509bb +FAIL COUNT = 35 -K = 6b869ea19562cf240b6645edcd9d9c58 -C = 7092cdd2c42eceef6f7949d7cce44f50eb54bfeddaa9dc6b -P = 35f4750b5d074f5b6a9a1a98 +K = cda0c1c10b1e616fb9f871f592f7197f +C = 3a721d7c7a46a74b5da1c49806a65d7ad9a1587a8f30ea579bdd0ce211b78bdf1dc55cd994f607c6 +P = a30e5cf97e9377852ceb9c9b8942bd52701725160d30e7df606a755a5f3fef COUNT = 36 -K = cae10fcee5086dacb89b3a073421ab98 -C = c1aa11c6eff8a09320d02eeea828e6b2ffcdf185f3831d10 -P = a42827efaedc68c10ae2a3c5 +K = 27a66be448cd1dcb005bb1c415802931 +C = 685fdabe9e1880b1383e54a90a6db3bbbfcd691429a255f09476c5324bdbba4d291041c53ca69760 +P = 67a89c6b5d5cb7e8afec88c956f1a2f448f00da4d7fa00c11fc4bd5315cb20 COUNT = 37 -K = 2c862d08d7eb7dfe6073b9dfe3233254 -C = c8ba29ecb90396cf4cd5fe8e7dcf3331de7b6760e44fde45 -FAIL +K = e7dfa52d4ddb539ac6e35f13a2087587 +C = 0b6309c5bb23dd89876ef2d792b0495de72981dc0203ae61d3950193827b7ee8787c658908fff799 +P = 1df15972b18c20d2b60c6a0fae57a8bb4baceb35b7e4a8893f4b831b7361c2 COUNT = 38 -K = dcb87d6fe0f141e0b24289ea6d7265f2 -C = 06fb70ea99d83308a8f888f75ad0d62d970515203fc8f0c7 -P = 877c5dc0757f063ae2ce15e8 +K = a0f0faaa8db66db49e4b91bbf168d63c +C = 9afdb57b9a70ae26f03599ed4b0c1583cbcc5f3ae0a7e2e3a4a49172e5d0c367c5dde9713069f751 +FAIL COUNT = 39 -K = 983f12fe2a9a6bc63b844c2660e219ca -C = a0e72fa6ac98da0cce4b6f25df275839fbad1ca7b90da963 -P = 8a414a909c2b46273b498a97 +K = b9d6c2341d332412516365b6981b3593 +C = d8e3e6e6e1a86544352b4189616355d8fbd40303d7c758922f72085f7d5bbcbf72702c75fba8a265 +P = 5bb3625d3c05661a9446b6cf6e57fcc9e70c007c0f3c7597352bb890b305b1 COUNT = 40 -K = 52c554e95fbd09262d876e1258e6f220 -C = 25604b6b4411232b07208f39e70a5190a219a5ae91486b15 -P = d7bc3526656c49110757044a +K = b55693c56f67438b128fabb858cc37df +C = 173a1f24a29edbc4826e22ddad850278282f38f7139d3f17b8a99493b46dc8a62b37a000c598a665 +FAIL COUNT = 41 -K = 348bbc88f4ff218581bb6c7f3258933d -C = b08955d71f2f1c15d7174e051fd4a8dcba1878114be58e2c -FAIL +K = 7a107cf7881a47c07ea91cb7da0d9082 +C = 807cfd1f6df53057523d471e5a3710b8e68dfd7833bff6a5fbcae4c928f6ecd7aceb70f732dfa12b +P = bc3bbfe9e2a4e617196ae5c05ba4515ac6470bda8fd82ea622df93395a8b7d COUNT = 42 -K = 08fbf92e0080a5ef84fe37f42ac2a9a3 -C = 0794d0ab60af3b9a836f35c75230b7e53a78af8ecd5d9bb2 -P = af2c51444b3206411dd8eb64 +K = 16020d463f35991cfd53123a3cfab53f +C = 78b97c2a96c6000722d8331f4a394cdc84aaecacc1e82add65fd23e7625a34a621292df2b4fdfdaf +P = 821fa859279067334f09009cca5ec4162d2b9ce78829ff19afe4004842cf1e COUNT = 43 -K = 3d6cbf6640478180adb11efe6fbc3c78 -C = f9004bbc474daeade56b1e5d5877b5d9a0b4da3ce7bace4a -P = 30e6d58f6d1320711269a2d8 +K = 4e0ad1fded8c127242af2f29b1540e26 +C = 7954acae73278189863c342b3aa3b80125abf80bd453eca37e88410c4ffc195a7022edd5121d819b +P = 48b33652a6a2ae3620c21f00bbfc5200381d94d0313b49d45907270f652807 COUNT = 44 -K = 7930bee6ced13cebb0daf3e2ce590ba2 -C = 74cfa91ad8021926540abb4fd15d58732e2d989f32410ecf -P = ed185f79b287f514e4bd95b3 +K = 27c8b78347a5013fd8c5cd30ea3aecb0 +C = 2dfd6c94ad0a14d3030898352473e602aa425cf1113684ae3bcaa3e79593c767d4207e87c3640974 +P = bf7524cf31b300a6c94a060ca027992b84ecd941569b221ddf0349c2e39319 COUNT = 45 -K = de112ac34dd5d01d7206c13fdefb4c36 -C = 2c5d5004042b5a020deae45eef0aaa619b14aada26524425 -P = 63f37eb64b9e42f009e40488 +K = d16c5cdf07e1af44bec084336b2b0a83 +C = e2a121d400e417ae21b01d9756778452726d984c20f37a276034573ce3bc07437055bef3e8e29b7d +P = 836bdf04b6bda9182fb498c1a3cb11adac1b92315762123ebbc9a49c50e61a COUNT = 46 -K = 3c776fe4b76f1e2685df19b3e3676de4 -C = ce398e52c0d0eeadced13708638db756e6f8242d6dd0444c -P = cbaf94a91e9df0dcc7ab715c +K = e4f7d4e5dd5e32e2c3e03f584f0db035 +C = 2e7c8bd035dc399c50d7738974050b32c6ddf00797aaac38b08f9868ab428b177ac86735e8e0ccef +P = 8d45c886b5012da7badf854d123822fab2804063d2fb3769a513f91f48bfaf COUNT = 47 -K = 9af83bc10c8f503a36b8631779f424fb -C = 0e4dc8736f9f190ccf6b656e5bc5d1ef56b85c5d26a1634b -P = 338bdf6844e67465bbff8c52 +K = 30f0e804daa92f64bbd5e42f905c76ba +C = 2a3bfe1009a9087559509370bfb6db0f8054290dfa99e3fc449fa012832807ee287fbc66c7c7ea31 +P = cd056163c753c261481521047ce952d3710ddd1c979e4feae6f59834d4bf34 COUNT = 48 -K = 9ec162aa858589ee407fd2c8419c7981 -C = ba3741f38d4c3af19f4b7d5883e24ba3457aa4c645942255 -P = dd5c303409811be10d44d449 +K = 50290810d4285c0bb420bb55aca90b52 +C = 1f20e48494ac78df0cd943671672b9d0cc3653f7271adf22378d06744a3126e1c045b41a9854b271 +P = df78fb3352ae611d7b7cf8991f22120b2d5c7a0038634d1e0a1dda144e9b9b COUNT = 49 -K = b9debd2ece6ef783c59dab2dcd73a0a5 -C = 4d9dde2982bde698dd8ecde6140d63c1bd89ed868b6b5740 +K = 29b8e2533e0128c51218c5e8fa34dc37 +C = 8264d51f451fc58a3a1a985fbbdd454658e7e253d85e87be352ec04cbb596cab80a471b1853f78a4 FAIL COUNT = 50 -K = 60b0b52f2b7383fa8dd063d4194da730 -C = f817fbd70758116772341771dc2868123c04c51f14b4f13c -P = cfa728546206377faf5c6c11 +K = 141afac48240072f5a49fc4f1332def1 +C = fd8fa08cfb067ea91a1d2791e0f4ba77754012e4260260c9f1c5c1320463a80e7184ca47ce76aad8 +P = c12955cf3c3218516725c61acd1fbd1ef28ba824d3940df76ea134f8a4289e COUNT = 51 -K = 5ac01e12bcc67d5bde02255f1f581efb -C = c0faa27cb01394200cf76074e5c09dd45f989a19248be3a8 -P = c81d00772a3c03fab07d6acc +K = 745ae397563919146eba9ad34831bfc5 +C = 40d3688be99a77b7b980e1971c903af582888348355e955155a7639271851aba13c645c9696019fb +P = 6b122c9ca6dc09c269dacfdcc0eff116e40217adfd52c63935641819b29e77 COUNT = 52 -K = 85dc7c99cd1df10aeb693ed46453541b -C = d4174cb34d384be206aa70ff4f4d80e069c17b7fe714f9c4 -P = 8b1760c7806fb38ec0721c67 +K = 0a45dd83dc426acc1a77cb423deed5b7 +C = e2d793ab31133d7bf3e07adf97d52d58af9a03a9f38bf86c9c01ce015c7694e89ccf8c7be9f5d69a +FAIL COUNT = 53 -K = 293e8f3974bc532baf36dae0681fc066 -C = 950573d41c70000fc13218adf59e7ce3efb0e51773b50e6d -FAIL +K = 1af0602df8d284f760899505d8afbe24 +C = 96c73f50a81f5efb0b1bbe43212ae265c1a2e4af8ef066a7ac240f063c42727bff822e010f2f36c4 +P = e52c9b5736a7a2150e29cd9d7802a52ac21a3dd4fe8ba5d80a5923c0231e33 COUNT = 54 -K = d02bb33457b791e107d7d953a47469a9 -C = c3a2c3dc07d356cd48b1acf67902909ddd8d88749d1ee10e -P = de80a73670f85793685da6a3 +K = b72d7e263fdc9f314cfb6a604a02107e +C = 1ea55a2d452592c291fb33999e19a724eb619a1e10238d9fbc112922129407c89358a64dec56dd05 +P = 225d06666c571c0271a14c5a4bc101920efc56fa0007db5afc3c9dfbd658db COUNT = 55 -K = 08fa6b02e9b351b809e4072d6135f183 -C = 5023eb10056d644dce56e5f5ee64453a0f13f28968b9a3f3 -P = 209d1d53c90cbf4809eb6a49 +K = 92007b63b7b1402ebef30dbd46bb3cc1 +C = 7900fa62a53467b58bd2ed98bb0ee5c940dfcfd640f445a5158e64152bf184f20a8c6052e8924280 +FAIL COUNT = 56 -K = c93ce053dd87a49d63cc8bea6144239b -C = 528a8dac7f37ca5058c57f398e32a63fd6bbc11040d59b9a -P = ec8796e6a4b0f34e09106e8d +K = 47dddabd84f0bc57edd6208b79c2f5d0 +C = 34933c0d0c394db973dfec86ebfd62c0982269bb8f74b7b5486fcfc87a2f602ad41d19ba75f4757b +P = 59f9ef89f4c2821f496423c27865c12ce38459e2e1c707d27a9b9ff175c38d COUNT = 57 -K = fd18ba0c50bf5c81a5458b8bc68d499d -C = 38b3d83f38ce68e5f805bdf11be83eec5bced0bf2aaf41be -P = e196be3c83e318a4acdee8e4 +K = 9bde90aed468f7c53555379233668dd7 +C = 13ab5a9fd8d8d05d2de552a7947392b0e74250c262f6cb6893ca1948fa053874d33f014abc8c24eb +P = b0fbab9282fc139ee89885703736d4600c96d2902a1ea7d49ac2601d949b0e COUNT = 58 -K = 5065430f0079e511272c264da56ace24 -C = 8c4a4276c97310c9b582df9890a8cb1d5933feba078782db -FAIL +K = 87661c3118bca14bb3e7a04f812ffa10 +C = 7e0c94df696c6c6d6664ed5e22ae7769a834eea5dc4fd6873bab6332541f011b915b9e9d8b7eac9c +P = aa7cd1a955bd680527e82ae05d2a1cd9f10339f52b72f4395055a24284229d COUNT = 59 -K = 4a05067e536ea113532e57315f1c09de -C = 6b88b4efb0fb35f5c48ee59a5d190ff80f41a210fd2a7aa8 -P = 3ed7518ceb397434b0c67e38 +K = a3e242269fcc911b70170bb16cd3aa4a +C = aec0a14578e1751992947ee8a117d89867c69a5d03767af06e374f61ef6c5b1a5c4e0ed53580253d +P = ed26af6ed3fc39df0554d4b3b32fe64c1ec637723d1df387bae637b7e8807d COUNT = 60 -K = 9dd80b60c3896e5be46cdd6bcf199ba4 -C = d491fb36545605b109b4f4cdda9c6aaf32466d797daab788 -P = 90f3687f26d170af7cf821dd +K = bcb5e003890660c25d34f7202ff69f9f +C = 4a02e07ae14c395f369170dd8957f11e3ff18d0a8eab493774d953e741f115af9e02b61724b2c7a4 +P = a57d350ac4e8bfbd07a0f770f8cfd5eae649c0d4a510426ccf09f8bc5a73f2 COUNT = 61 -K = accbe01ecee670fb69fddda153b68fa8 -C = bb90fba4d3badf7e54da7ef7f1a6cd872db7d08d54879abb -FAIL +K = 39a2a2ca015708862e4d84832c29afe8 +C = 259cdec88202309a46d2d1dc58dd208d0061f916cf8b73c17b90af05de761040a921d681506a79e2 +P = f88f9217cd6e0880fdf053aec45a848a0300be8b8dabc0556d7f8bc9a6ea2e COUNT = 62 -K = eb40675225ddecf370e6d811061d5071 -C = 42569b051e632b8b5fba943b4f3a450843e525c89e509b92 -P = ec5b885c65e499dec5f81817 +K = 262a6646c109a7d4e675d345f565a5b1 +C = 1118ef22c3a156db97e659554628aa009917f59733109a3b0bd0d97f72152f85f84b163be5761d6b +P = 9aee74fd7b823260a2c724a52d2cfdf5bb781735d0d4a33159a711e4fbe1d4 COUNT = 63 -K = 906ecc90aafab35896dddd501d929384 -C = 4064f775bb2e2cfabdbc843ba2409212bce3c489e2a50ecd -P = 0c073e7406a0887adb17e8d5 +K = f6ed28fee2e95a1f4bfc6669686cb28b +C = 66bb7900de82662b2ad35e4a3619e4badbdb804a99608368c8e659b0b4de2dea7cb2cdeb350db34e +P = 10981db1ea3a4c35cb49c32e5bd25982438aa10cad03d4de53d6ce804229fb COUNT = 64 -K = 54cc572ae04fc05878450f1e4d576544 -C = 99027b764778c330a27678e628510bf66a364f007f947793 -P = 0b3bc8e6eb10c53a7d05339e +K = 17aafaa90a396d28e3371b3859276782 +C = 8f7c6dd8126fe2daab48eb402c7d71d5311cbe7ff87285d42c5d82c0d49c4be63dc721574a630c97 +FAIL COUNT = 65 -K = e6f0fe90ea8c33d842cb885370d25e16 -C = 4ece86097955ef0e3308d2895509a2d24ae1c7bdbe1aaf20 -FAIL +K = dab5f60f9fb4b51ad4eecd4c5dcb36b4 +C = ba7876f1edada1f84396a89f8711cb78d10a9434cc54808355f090af295e0839f8e33b610a5ce400 +P = 46401288d974774d3b9b3166f4b8fee681d5b58ce4d33eac965b95981811b5 COUNT = 66 -K = 02984ac96c33c385d0d676b2eaec8c23 -C = 0367e8a615fc617777104ff599e585d205fb5107e203d1d6 -P = a2828771c573d0832d0430b1 +K = 1522101329ba3190e366929acac3cb14 +C = 8352518cea9f9ae21dc8220843e42bf552f9538ecf89d5f512a4e3bc6b11955ed61e28a72201a636 +FAIL COUNT = 67 -K = 445a9affb73a03384f4ab63f94cc1006 -C = c6b1ed41dcea6308900a0339de2a72deb88c428b28bd0b15 -P = ebd6e7553454b7a2ff27ce8c +K = e8dda6d413d9e656c4ad4913b9ec833b +C = 48b8b191c63a6b25ac01dfcc0cc5c0545249b001876aead7bba5edf5fc18d5e5fcbc957f161464f3 +P = 82c6b9cebd002f74d56e9c6352b2d5f0f098a01c55db0b8ed7a1550563ebe6 COUNT = 68 -K = 7840358acd85403ed7198133f08b1285 -C = 68b522148ad86276c5dda637eac632a7b8693b8d399fec16 -P = d8923aecf524e1acc02b2b83 +K = 25696788b5aba34ea55163d3bcdba350 +C = dade51aa88cc367f33527c193089aaf5cbdc29b5b7a4a7735a3a4505f364227ba1283475e58c3d82 +P = 450f4a2dcd2e10170fb3aab073cf324bb772909b6c10f112fd990c06ff59d1 COUNT = 69 -K = 75a0ae6461984ebf3f995c7c7b56d592 -C = 19e58ce6d29d92a9c7b03e26be91ecbd48bcebdb98dc9523 -P = 08da8d0ed79cbe08a3395732 +K = e7919dc9f01f0922c55e677af60ad8c7 +C = 3b369130c98944757edcd9fba063977e0505872ffb3f76047082f4775f51822021db07d7cbe58e6a +P = 8b2c4c3b9347edf005b7f0104592e417390d8665ddc1aa59392c39d2475424 COUNT = 70 -K = 36fb513a4aaddb3010c86bf63c62c81b -C = 0b9f5c097ad97235240b25f486f0f2ced40a8706cb668bae -P = d518c7e353845fd4dd31638d +K = efa1bb155734addf747a2b73275036fc +C = cdba5f362fda37d32ef76251364ef9a67de1b7b8e0f39972fc35ad489d6242ae5095dc7b3ba7896f +P = 1276d9eb437ed4a9624d7d081ff993870bd1b6b928f0fb448bd74827c2bbf0 COUNT = 71 -K = 2f79b69f5eaa20387fa2b77f852f2490 -C = a99d101326901dd4c2e6874c914ab176a431eb1811e4f65f -P = c01cb4d604f74cb6c5792d8d +K = 9eb540fb8f5f154baf52d42079bd4654 +C = 17bf9888926b460136fee2821174593e773f7c0994e13d1f170e392efd1961d6314bd02a0f58d900 +P = f29b25ba2b6732b6eb1f46bc45fd5132f4de4ea07be1b320f8802cb6a748d6 COUNT = 72 -K = 41f4ba3480070740a2cb6dbada3c8c0a -C = e46dd3792f008c66e1087d1a898ba56483f4fad1220748eb -P = 35fde1473a31487463d5cae2 +K = 46412cd64ed5f0257f3c65a27d1f338c +C = 2fbc25ab8a114a203eefede16f98bfae5df93ac96246e32f0f47e5952d7c87355c3b01fcc8e25a8e +P = b5ed075fbde9525fe1573f789a9264dc289c8bcc1dc9628889eff9e3b25244 COUNT = 73 -K = 5a2fc5d8c1ccd424a5abcafbd6cdbeb9 -C = 5f398fa2b2093e38051171276e5c3d000e685c02c0493a14 +K = 545f1a67bf56c0e45f8ad254952cb21c +C = 0d241e4e8d03db0ca27d46ad2aff802c580bb1b8ff5d8abc275d9a2ba242c846f35639c8ec2e4103 FAIL COUNT = 74 -K = 49b8214173caddfbeb74a0c0d12123cd -C = 1c4b6cdd2b0d2bde2e11cebcdb1428d40be7d468914492bd -P = 64ed157ae4c7f6b6324e6b4c +K = 3c721aba066815f42bd883f9c90b3216 +C = e24db01276f3fd1b68166bb902fde83908e38627f2e4beecb9eea19a65b12a80d08119cd406e62be +P = 228875864aebba6c8b200b000b3a3f0d8608cd645f4f2b9a751bcc4717247a COUNT = 75 -K = 04b804007e00ef49faa013ed8b27fb51 -C = 7b1ad2de955326298fb4abb87b30c132c9054a04117244c7 -P = 4a87d0637b5f75a414d7b0bf +K = 396978d791f81e845fcb73b0b85b2285 +C = e291a432f8d040a36dd1b25b246ea5df4e7bec30eaa76a39dc1bf12f8d8130db8cdaa532f7e68e2e +P = a60d33d1ae58782ccdf81c786ce5318fd5dd3a0420de8f91308d55de7b1cf4 COUNT = 76 -K = 742dbeb4ac20c763c5f373e5414ef70d -C = b35042894f8d2af9ad6c3e0ada8f426f313baa3d88e5475a -P = 45d030d4a651a603d2bb6417 +K = 31bc18225eb3d7abf5bb5d5085959e84 +C = 42486f432bd682ad03fbc40cf927ad4fbd7e664e210ec0d7cb26d21844eef32030e760645a7f00d4 +P = 848ed8b31d976628acbafa1d18e19b8acc2474fb74c3c15a937c93d2ccee99 COUNT = 77 -K = 1d13a465b509389ceb775ac1987fd7cc -C = 31b99e153cf1b4b751c9e27444088075779a7277d6d378ca -P = abec2c9218601c80644b506c +K = 3fca9205d5704db28f9b12f7c7b4ea08 +C = 2b2bd4f6860e40968c9a124beea0deab00c1862c90be779e1d1d9bfc67821f06a178634fbb9c8419 +P = db4629c78e855ab7b288ed75fd3c102cc6c56047477013c6561c8bd631a1dc COUNT = 78 -K = af0f6b344531a5d251877ed991391250 -C = 1573c6c4c0c54680229449e25e4278ddf3d054ef810736a9 -FAIL +K = 4db1426083b1319aeb8bcb2e9214eb06 +C = 8e3d9c545b64fdccc01dc34fa9115752d102552fc82bfaf18bd595a1fba1c38104400a2e5477da78 +P = 5c3d7f6ca09f3e42fe9e534e958f10b70d7590ea952f83bb406d1e28db0926 COUNT = 79 -K = 11b8bed89f815f55aeb5017b73ee5dfe -C = 18cd52767696eff382894693c832e52fb1b6fb21abf8a168 -P = ea032c25e594a64d44efa80e +K = 516b1a75e95991be5e72fd6e0fb7e699 +C = 941417d436045338b027a79f1e0f0de1907132ee1b2b5b0e792d460064f00d764c2f548759f95ef1 +FAIL COUNT = 80 -K = ababf70050bc88335b54cfbb902e42f1 -C = 01f1ade9bac3ff41ad2d01f83764ea813c6e6fc9160204d5 -P = d937bf7b6bd325b1ffb022dc +K = 6847907c34a1836c807d6f8fce449e5f +C = 32074f2ff021adf077e30afb66c0e9b3d83a4efdf7cdaf46d949847e6d23ffddee9abcb527e878b1 +FAIL COUNT = 81 -K = 303b230fdf2fd58a9939f65204787a29 -C = e18e8b8d72d682b67e66738e841112e00a4e1e888be3c1d3 -P = 7a7062d7dba7327220b51b1c +K = 61e4ee2075a30a4f18b9b1118b640715 +C = c744674bd12f18b4737e946c043ad7adb7c94889cfb814bdd4906eae62bff765352b94159a26b9a8 +P = 4db2fc89b2fb8ee84ed901a49291b0efb98287885ee10e589a3d38bf458d34 COUNT = 82 -K = 1e6e20ff4d64056c78501559321d0605 -C = 43b3682c2519a882923ac00de88d383513e9f57f1fbae697 -P = 1b21eda9e94e87b8546cff4c +K = cbeed0b211076ea792c6c31630340a6d +C = 7dad4e5e64fbcda90823a719dd3ec5b51dbf5500a49a550e6a4c2fad7b018dcc66da3fae2e82ad7a +P = e61af69c6ddbd2dccd88060ea561b21e7346a60fa87bf28de21263162bc082 COUNT = 83 -K = ba58a2991d025ccd49fc6013947cd6f0 -C = d53c9bc2dfec47129f8d2dfcbd7c28eef20033ad4b59a024 -FAIL +K = a66a78745578705102b2752658b27850 +C = 60eb19c5d35f8eab4f8075b0b755b51a0b27943fa5388a319f65f897006fdfab819e7488167b77f3 +P = 9f4d014b8915e0579134e6ae922b492bbfe98f9477107db41238f2a5596c6b COUNT = 84 -K = de3d67089192553c4c7e15556feec20e -C = bffd0540da6b080a18cd9e24e5701758d395b91376064c18 -P = dc4599ab7d71c03be9505588 +K = f3a88d45a545868ec4743fd033601887 +C = 85383d159fa854d3fbaf3d91a0b79bab35c900aa078a3ecb965eb73129a2d51dbf1101ccf93d9860 +P = d5f5be039456a759a70c7b4665e9b7b678cdbad3b9339a517d40ab05e002fa COUNT = 85 -K = c28c60035d2016a032e9d99902488149 -C = 87cb693421647859358f08c0d993cb0937445fb3a2471e4f -P = 524e5b57b644433ab09ff234 +K = 8ad186477c1a4d5c0edee13e8dcc8797 +C = 1c4d167747f90cec4626dbddd55dc5ee6c02cd511ce278bc2e7fc4cbf009fec11a995339f94f51c8 +P = 8c66ca7a80b5df0a929f939bbc4bb81882d1bfae8bc8b37635eb436e9ad8f5 COUNT = 86 -K = b3a730dcaa3f30f5d4e0294a435df28a -C = b47724d660505b4e52741997d3dd2116f0b3f5eb6dc438fc -P = ee48219df3d95deed7c1d165 +K = 9ddeeca38b772eaa43e86a82b27d47f5 +C = 523f600f38fa3831067326ad4c16b3c3426de9d77c64464adb946c973cba40d8a0abb9ba2f71fe35 +P = 9eeec22f05d2675f0ae872bda46927513d70c9b280d0237521df6b7dc068bf COUNT = 87 -K = 9c23b7542393b590bc78060049d0cb8d -C = 123d14cbf74f7547fb2bc80a7088a6ed2e9670230e1b3ce3 -P = 473d9d37b6b7f84da7948122 +K = 21e28b3e9af04b718d4121d3de85736d +C = bf1f821bc5eac77435820eed532d1aea23dad0224c91157f64b2a24f630dea40e267f78bd36a7b0c +P = 38491550cb073d268b87e01d952171c092ad585e68094f8caf888882221c87 COUNT = 88 -K = c89246ecfdb38b2dfa1ab537329dc853 -C = 272cdefb55c0d2e79e29bd4c854822c5d2dd2fa93db20ae7 -P = 199cc3c74d02b50277e8e480 +K = 126c99f3b38162882561fb5291e46411 +C = 0299399cb840a7a3d1279965c45899fab62ddc9fae3edcec24754eef586db3d3e9c5d678aaa3458f +FAIL COUNT = 89 -K = 18557a294adeeec456c1c2bcf7acb5a4 -C = addb0b8feec6a12bcd1a28da974462c565a732dcf0f2dfdd -FAIL +K = 4241781c53426f3093a6319aa351a6eb +C = 84bf39f527071e4307e89b5fa3d0ced7e1474a077481ede971e3b0220ec4a00b89b49686684322c0 +P = 03d47c8d75a2adc42730798c1df7eb4522b020ed076c8b6a1deb0e34284cd8 COUNT = 90 -K = d41c3c6bf993895d7ddbf79792dbdd56 -C = 7754c53253e90dad01696762e873ddf819d286d7337e2ed8 -P = 31b94c6a15f8cdbe936bc947 +K = 7a2d6ea69400c8adaf703599072a3a2e +C = d25d4aa6668168c247b17f41438b4f92b075059dc74f9d43eb266968b1651dda6615337e5d632ae3 +P = 921bd2e5032b966d57aec99a4587912275759c5164b005101421e35ea76ad1 COUNT = 91 -K = b8c37f3ada38a34be864908ddd50594c -C = 5da664b0cf3cdd312104f3311b3dbd53225653bb4e424ebb -P = 2704a53f9b9e50b5cb8e5f27 +K = ec25459feabc874edee75c2799f35775 +C = 20f6d52055b6697f0431f4fc2532fc148c524233d31afe7cbf3b504bc49f213f0b02d16b638f53bc +P = 84a90301b7f1ff8567f92166e321b6055a610fc8c856d3be0e94f413bf77c0 COUNT = 92 -K = fa93f5752b150a033cdba410e0a8ede5 -C = c3d56e237e5ea902f93b6035bcda35123d05f814dca77799 -P = cd3e2fa6d34aa56cfd769c6a +K = a2470bff5a972955520eff0a52bf06f8 +C = 5749c6808afc931d6d9f0f5ba63622295839ad32e3a08ecf0a8ef7e62eb4688240467c2a25267c6b +FAIL COUNT = 93 -K = fd9bf5e56186c0be6f788fb9991bb6cc -C = e8a8124b5682adc8c0817c15faf22b73623b6677c53c9bc2 -FAIL +K = 25ba67bddbbd32cd49af26064bd36366 +C = 8497e640df9dff247e010c4ef01569c6324c7b394734cd6d8154fa4e8b7b4b51fc46ac83b6cbf509 +P = b69e71a256c7f42a6017395ee1c5ad779c4a1297f6542de9d03f18c0c0165a COUNT = 94 -K = 0dcb092cb0f5b9559450609ab1554b83 -C = 054e9b3bcd533507c011869ebdfd3088637affad6c00b5df -P = 95e3991115c24dad31924d86 +K = 4b9e90c11429d1706a6d1f7e580cfdce +C = c848a038f2b9defec3df952df1eb3cf62d4097a3a171ccc0082e89adde7756d9ecb6cb6be693e31d +P = 43e4b2ebd920089341f5f534c54c3d7ec56d32d1f2cda2ba551fbc10f1ad3e COUNT = 95 -K = 1f0b2b10d08b4c90408c2de5d20bda8d -C = 2a7131e7eeddbb5774d1d81361ae576763879d341b74e8fd -FAIL +K = 64c0afec39711ec57c8591ee391d7ae9 +C = e28a0fad9dbcee87ee33f14e517ec15dacc1459b803c69ca25981ddb3c2c6c9db61044c4c7d28701 +P = 9b2e749b032b23eba9a103d9e652262aad0a05c5884519fc8441939293b759 COUNT = 96 -K = 392911ec08f199dffdeb60ddeeccb719 -C = bb77185d9f8afbaf163e0f2e55ef8b429d38d604de7464f5 -P = 86ca4f2cc8d9e09f2ca41f3f +K = b52d5a310c7fd04142fd2fc7f29d2ec5 +C = afd51f77521a846f3afdba7709a3c4a63001691bfb4d40fe852e2bc447dcdca60a6c13530f1af1b2 +P = 3f08ffb69677ec31207092d1904c514122a66ff04003d707f7c9c67152961d COUNT = 97 -K = 1de40ecf12df6ef4859944e1bb711969 -C = 2e5ca143732e0cca82b8b842d68855dc13ddd8c1591986d1 -P = 22f2c09ef197f3a1c2ac2876 +K = d5d69aca5d849d6833dabea1aa335768 +C = d083abbdd21f67921b7f2aec2fed1ab356313161af97f39ac3b653b87489adbfa59dcb9c41d10d05 +FAIL COUNT = 98 -K = d6649f964e30bb6a47d1e468e4462da8 -C = 63f3ee3b55af8e558bf0b7bd4cbe04600c52fb7430f3f297 -P = 114a17928aaef134a4b6c6b0 +K = 8354cc1bd5b1c5197c239ae84e57e6c1 +C = 0bdeaedff8e052de5a8187b04304de9be25bc0d2d43c53b64735648fbd1827fe3693ac7b60b82ffb +P = b739069cf0bbe074b937ff11a51f0de2df8557cc3cbe28a87b01ff98b232a3 COUNT = 99 -K = e16c9497f09690f7a2d6aa4c38fd25c2 -C = 68edba1f6d17f0b8ec5452a74a133456b565a66a6324b1d4 -P = feeed21c37c39f212ee0f84d +K = 652ae02063201cd4f575bca6f561b9ae +C = 7534231101ab0fb9b88dad47ac61d90990f7a1238012c7baf57523ee359eccd51dbcb49f643ffdf6 +P = 09ffa38a489a8deeb1cbbe5af86ac4391620fa9dab087ef563cf11b96d7ff7 -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = accb402f5daf0fc92d0e7094d6582f0c -C = b0d28138e9999f4c6a068a09b9e63f772db671e38881db8bccbb70cfbeb57cbe22c315bdd3a2e926b0746208cadda4e13808dab1a37f7700e9e48518000779ee77005f272d6730330cbb553efd0f57578751558b07f263c556b97caf93cedb049555247ed27465eaf8a6fdb562659fc7 -P = 26dfc52fbe23acba108a43d37ca17c10c0fc2e5a9f363421e18361889340a147a3257cceae63ac053533d00eb169e71800f692085ea3744139daf5928168865d06e67be353e1e6688220d60b2b204c9a21256dd113c5bbf9c0594a689e0eb030b7807c97e9 +K = 79835681b07365f9f78e3065932d66da +C = 5adac30ca7ff6ee18417fb4b0750cea13047e5f629b78a09cc1f2013aed56515369ef23fc2f853bbcef7bf1991041819ecd45330269819d6b7cdb76a5c35bad25be54a715d0f740b34f5dd5f28339e734df10a22e87ce7fd5f2f0f9c79a1c20736ae47f2289ce14c166794bba7dd809e3ee97cef792768ba821e6d7df693b0f9a04c9d078fbe1bd3f2a1b4b55df526ccdf39f859ac69290122b8fbd9c30fac55d069708f570b48e46667bc088cdf23b61921c6e70d16fb263b7137d8c990a49b6981040b760ffdbd47150276b25641c992c50df310f960902b770a9b33084edb6d1bd68451812f34ae444b2bf55c7b58c1f760623e7a4aa66bed2c4c2407ff1971e2f35b1ab3e174b21680c6341b6aacf55ede1e4f47998c08e5f6b2099dc9df15a41ae78a80cdc909513bdff817dd41dd84acab8f31e22ad22d92b2848a5fb89ab7c30c6754f35359eaed475cc5d67f449fc42a7354bc0a6315fc323cd1c0889010c1ff6cdbda970000345b5acbfc281d641eae8dd7a6475accdd094a1b1149d869fb17198e374cdab59de8d3dd93776fdb42c2409fc37dded53923ba4fb06f38303e0c500b49651cd73f20d8b8da050d5377d0dddc215c4e74d6297375b81288991f0808054dec102a72178ff9e0b7781934d0334ead0be5c0437e77c488a422dc200feb697a82ed0581173df48527878a5e3bb1865efbff87197651dffe659236a21d583ef2cd +P = 83d4567ceba7a6c6d94e2da46f411d4a1acda5a8ce8ca7e197e0a66a93b7c005594ddd542bd71613efac8fbc5be41dab6365ce7427fef48fe5f82a94015eec3c6d3232e9cbfc62fef6ffd05053acac2f4a52fe06129f740e3f8b940603d5a21bc88ce15177cabe748db694e472b286bc8f21958f06c0cd2bcc5876bf716a118ce6a842fe82ffc96c1008412a9bfa73dbc41a3436acad2bd58d86a2b84a88a69a26c12fa8420750db4ca50ca2ae8a193a08237912a23218bf9739a97f64fbeacbe90b1ae84aedd61f20c68a0b5a34da36d1198e5df94bc387a3e193dd0092ccc670439b13fea7c2b8ad2ffbe89a421d22d198dcbe1551d2cf789f32abf0260cf932b035e5ff39896007f2ae0a7b189290fe79e432980b1338087c2c585691b1774abfa6384c986512abad7d07a04df35481bb43f8c4ca4061b0ab9807be1db06462fcdff80dd53ef426f379a6aff42e447ef094e5a4cf6fee95537881cc2fe818379d2ed13ec28f74b731647d577fe1acec4a115269fa47c34e3e958098b8763e76127589fd9260cfecc1a868e44e30b523e7679ed9a43c2453015cf1dc8580088091ce255f4b35366d3d5826e86e8534c7bcbdfd445c14b99d1ef3731c25a5b6c8fd1cbb75a5a367f68d2edb8c3032c4fb864b7c221fede0b495dc5df9d56b90e0cdb212c544d387ccce4d978c1bc28ed5ce9486d91c8e86e1baf6830c684843 COUNT = 1 -K = 538abd485fcc048042178b968371cf5b -C = 98d1e7e22193d43210821b989cb0eecd0a2eb8d2325f8a5568935a146cb00d14bbe35aaa6dc3163f04260bf87f761602bc5312bfcce8897e9bf4e46c8e27d23966a29108e1aa80e60d04b1ffbdc023d8d352763ed27e9551763685d07bb9ddf6dc305f7c2f8f5aa739737a23fff6b59d -FAIL +K = 7ef546911c86b629c8136132921e9b05 +C = 4befbc417f4aa2dba68640390c4708e039f93e28173bc7d13bb42b7a012fae8d889136cad314e77d4d4638d2de990e2dc78e7341388e8e818be657903c4327feb67e7b492f0dcf60114a12906aec0ebf089c2406834348cc090567076d6cc84ea577d0ab67f288d15fe8d0e30225ceb5f34d62b6c0398e5065e353e57a70b832a36b29e6cf45a9607a5af7595d8b59304129d8dc6d8582cdb88fc9b9db33678955acefc39eb89dd19d03c4a95d373cd90ac257b489ba9957c9dd25e2a948b76e48cc95d9bfaa5e71eca9849aab02252c3888d25e5b7ef8b2327d2319d43ee887fd5c3624db8f84524feb8af14766f9819a7b804e69cbe5215692209d91354d05da8b53e470fc0064445bf85892fefd17f815deddaf132416b29982cf3bd267aa82b4fd809a9f558657321792c7bddb89161d4ed5342a62f6cd33270be4a17058cc5b0ec77a1f4b33f8961d6d69245c4b5be2979aad34ebaaa678b558b5625224bc1a677488e73f4563da504b5c58eef4d5e408a460679e9a65136272671236babfeb65d6413efc42bab4aaf0ca575c7a2c201dac0e7b0afef323c68d3c807dc4139a7a276f93722a227825bafd9d495099e9d619c485358c514595987c13134eba20cb6032d2a1a14dc0d9bf41dd1c7180943ded3ccdf1885d5961402e99dabafab5a661a8b3bb211382386e5ce39c9bdba529d26c66de3265717e3313be1172958180ec2b9604d7 +P = 3f942e66eac761dc1866841d17508fbb0e1117bacc66e8c9ad33ba4f97e99a340d089a4f852993b30f6fc1f17e1839a278cff0586a0c7ea04533b7d640a0a23a97b2501dbd05bc881c8affecaf0d901caaf43afa60b71cde1ebb34fb9f95ea62d701b34b611dfeaf4d2a604d18cb1696e437354fd0634ecd0905741eff23db91cc4e1d86d5f22aff21877e90f8dcee9cf5b78a256446a9077748899a8effe3c2129a6a6ed2dcae8939dfc9db5b96126093e353dc7d578cc8648a46ea314057eedf1250cc28e2b5d4bc562c5b104dffec51bc6260b1dd98884f9b2adac010e7f3386aa19615aec7accd0599f50febd1ddf77d86b0af945eba764849edc71b747c2116be1f683fb9661234404a91326dcc921cea6f0a73cfc6f49789b0ea1bad4aa815a50fabe7c040430dc9b7621e013ff423c978d4a07b537383740e0ac39d2dd6ec525c782d79d80e0469c394f7e9d246f00399a862d88649960dd12c5bc9cf11a2357a4ed4052d755258ff68ed58ebc427e167774e5d8aeca5766c5126aa2ce426f60929931688e24a15380f4cdcc7a0948978ff437036f8707449af74d608338bc15ac7f2d74efbbe90c2996d9256d433a32ad95a58bec229cf831dd4536ee5671ea3214c8e27bc0970a1c6b178aab6ed55329b527270fdf38d99f869964a6644311466a2893fddad61e410ac7100a3d33b670d8fba80bb9907f1d0fd8333 COUNT = 2 -K = 4fa445a9db78d6168ebea33270288382 -C = 5ddd7cea370761987b512af70956a01682a3c009fbca9aaea146393cfc1fc152a4c5470d2c600d578222ebe278cb383cc2623f21f57378689414d020aa848957e65f4e6e0e7c8a612644eefbf55178b97276b9fc082151eafb632690b86bfb179757d3cc805c1d3ac32b2503370e780c -P = 3b4f90956155195c30c81c47112fb43f29e2f95beee7b6cdc5f91fd26208b91fe130fca0afd582b8c17a53ecbec091273e91229b7faa16b358c073eb51dccc18475bff0424598a51a0b5a2d374a4c76e1ce2d71b888491fbee89c016bdd31fbfdca6e43faa +K = 84450d10fb18450e974dc682f87bf78c +C = 53490d4af6105d2fe2867545766438f0c53d11c6b31caba48aa3d16416445bb03a16c17e8f9d3e5ad5f61249bfdc495fb1ecb206425b736a273c4cf2394455bda17c83bf8e820d0141fb24883fe1205063659a5b584c8f51f38e99f63b46c70bfb88a18808dcd0bc9f26e82aaa3fb23c8f9077b73b2a9fd9793c16175abda1e00ba71bf431bb4dfed53eebb5c67aad83b8be8803532ceea95ab7ba59a0accf761b521b499098a354c6a7699f4c89362ae74432f0501eeb3d262dc997e93ad14111f5afebdb8604dfa5e3465c14af14afb0c7b1fd482d8c2f0900159d805c8cb8c31e5163cd6642bc7290d0067259eb4d1e6d471bb7c18ed9f8dd67f1ea87a348daa65f60b30e57bca5630248b407f947d77a7d2e123b8e377cee6fc79dd55f6aba1d69d8c64df5090ce73ece4fd9be97f9d4b7c75b212886cf9754b9372d86f7dba689de43ab653f2f52a6a9a090591e4884765c4bb41ec8afca0f3ee1eb47b07fc4936e78305587a1ff0b68cc5b8009bb4898421810d74c30f6850a05f2e3e8b4f6700f5b2dbab05b49d45a9ee8979f2d8bc654a9522f48f4f81b7c092460d73f515f39fd4c609c7146ff882c5feff39cfe1a8d2c501673263673e665c1c4a6389e74946f5197388d8a6c8ebd1a5ea2c44f651909f520c1900dbd504603bf588205ef6b5d1f1ea59d4a06bea56712d5e0f9b2f50f8247a36b54410a3ed746f71902b9f673a7ab52 +P = 72ec5a86f5a2950d1bb5734195a26956c6547f2fec902ff1fe7f0c3e727ef88ee8cfc87f708ebcf6b18b190beb1784e8f7b06250116d70585f1690767607d661e7a3f2a135ed90fcafcb1642bd0df956a78afe2c976580cbde5fdd4f19ef75f884201c1641b7e2d83c5b79305563baba7d07ee8d6674286694d1ef202983104ca0c0cfa614b3ac70baef8fc5912a054c728010ed21b93367cd13d7e78c0e8829d6b4efb216ddc0190ae4fcc87096e7b6bd3cba97fbbb95c53d495269dfbf27130a5ea6e93c8d4fd1923460935793fdf633843a7bed6050a38a6b4fdc0becc5e783844e85e987985cd354ebfbd4c9ac789f12800c6746525a28270737069bf2e6ab7ff205d74bafb15073a03371255c1ff14e76762eda74f1b596428578f1a4b239123656c4ca96045b0213617f806ed66ef83c0e024fdae63c477dde2150e06430261c16c9e4d00dc066f01c412d06a49381334e6d2c344d819e0eadd9ea61e669abab7ef6c4cd604f5531b8b2e3b389bf4bc52f9fcf8b03a1b8775a57b359edc6f05d1b97f962318306c65f8f7989331d0de4eb5a500436c5fd6429870f8c741aa1c6e88f4bb2ab7c3e3259e4c01735bba57439cd51ff9dfb2597aa8de68822069f46fb78799edeadf770cd238c88579a1e6a3a13539dae285373fd11e15f82d792f6b13ca6adf74c9d52f5220dc3203e2e5acf75e285c1b0081f1552e64ae2 COUNT = 3 -K = cab66b20e5434e2b9a1c24652cb51483 -C = 701710ba61160514768c5b04bc98f8b4794ddedba1f643acf12c6613e110effe03f3a485c38a25493cc4de5fe25146ef8d2251e321249b170043a2c7d6f6bc91d6f3b9de354fc30a98488e4c35ebb9bc579174bc5c8e7565918bf3b55cc4e8fbea85adb88fd3f4d7ef90c17db0bc8170 -P = 3b2a29675badcb6554ea2a05a755632a3b75b1712e75d5f1f28c93b92913ede80ba19bd34b4b6812b2986df1ddd6958196dc7bf0958b38e5dfee14b51b5e211747af8cf4fa422ce67f9a5a13437a382e8fa8302c1eb0f4b613ec803d00b3609bb294291245 +K = 0af364a1f38860199d9b0bd9da24c750 +C = 7c48ec2a4fb23b3996a7c654cc2bb3c45e2fabdf0a72e659f7c43d03665c391984fe9bc42bedf51944b5050e94ac149b2165410b81cc95c54329847e4ce070671fa9699b2cce8c71bd49024ac0229047240aa78aca9ab9035173af6beed22530f969dbd0f67db3690587fa954f429b318de8f4076aedcce500b088c24b61c004ccfb09e35e0f7014c8744e6caac137ec1c358f7eb4efaeb5c4ec1c844eb2b0683ed15ee55463549a5eddc883e00a8aec86726e5005011eeeba11f4e5c9ee9fc0d35b611eb3958263c326671aa1d17697236a69a63899433236994afc842521dcd0093b18ccfcdafce9bae35f1e3cb9ad3154b2c659cfd8f556331e7f1ce597e3484505b07023cf533be2a880a1044724b486b26f36f75605b6a7d0725f0c4f74d31d420402ab4fd4f0be2895af9f58dd5745bce3e40a7df902e30ece9732548f2903438eeab5258e0de5a804eb73e8b14b42342790c4158443fa8b7177cb847ae05bbd12bc88e3d5c71cb7262c3067ff5ad7179ae95015adfd3dc58886670c31374ef670f1816bc514fcbb23f0174da070f3d1338f2d04d388e2c52e857ba10d8ab856bd7175dc41e82946a5ac49d25425004a2c0ed916b0060e3a76eebe82ff11059f5b1c7d3e32e382be7772a33b74b6bff1c2ba21d6f8ad032dcde10631c386eaefcfc81b1a7a6c8e8c506a28e2005a6efcd9a5048aacf64240871216f38507ca9ad19b9f82db +P = 384a6f5d0303b8b3d8c0a60c691533588d75a0369a7e7b039ae99a21a8a3a089f6e470b748b79e68be98373a4ba4b8bb8de78cfd72e1a35a7e5eef9df9ba957f92cacf655b89430347a7cbb12e6d0752de39f4ccaadbd0a7a718e32ea6e620996586b7d128c9c93a8644cec0e668b6e28cca69abbfb4972d20c000fb577799a6096a0d87de164940dc0ae6a7f07ef69730803ccd032727f9bed8c6b32b1d6b86c5fa1e46ad3b4688840436d4fffed1a261d5b7647f9cd88fcf158eb813aff3d1ac3f503ae68e3feb4f6f41bcc78545d149e6af4d859ee0939fc3285108a1f9a9bb781e87f7c2fc13b01984f79acac717e810f27cb18b1459be47a51803abe30616def467ff2e826dc24298b82a561b1f77e21d1dae161d330f1427ebfb558a042a5774eb04c80f89f99e5689c84abc9d2268fe3d01b29ee6608c53da4508c63e4f422fe79808cae17446e2ab5cfff44dec55534286740970b59baf3b1db2e713118ec4495ac4dda2928efcd659de216cd57d312b6c3034ad18b2d0159053cff5b6fe7c50c52f15e8266b328053b57e39c95a1cecca0848dadfb79b7ca2615b500e4fb21d05ecf1a3ac9ac151583090cffae8fe2856be8c2a2fdd8ed0a4478202b5f3c4f7221db72fa0b7782deb45e070a5a9a1687fc7ee7e02fb23bcc9393e8eb60bacfb1b2df818f94914e6df93d300481c11e824c5caedc584d2eacdc468b6 COUNT = 4 -K = f2b87b84bdb099141ba34f56695d57ef -C = dc14b96c7acd6dd8a3465f2402c59e3bbb766309bddbbf87cabc4d7e9434308b79116f81b74073510fcff6aa5304af7d86fde509673d834a50a0c6c1986ab20dc669d0490f44ee9c15b32ff1a3f9dc756c7980767e621994c847a4f2fea1a536f9be44b77ddd952a0d6e66af6c6f2ae3 -P = c552f4157542d30602be1a73e590925fd6d948ca7c62a2b616bd73afff34478755a9f919980873e4b388eb0e3284b64e1e9b45103d3c575b28fe2c82e0cd370a3f72cfbd579ebc7ad700d3e344a3fd71f64261544b776be627bf5de8f3d1ad6ffaa754556f +K = 41640a5fbd169a2833f5f8aac6281233 +C = 4b63f13ffe1652b4b37f2c7c86cadb8be39fa3a140ab55f1882798826068a355206a6c72c04e067d1b91fbfcb1036c51453960a6c35966e0219b7adeabbb585d1cad19ef474457965f2c24860aff6ee9fecc3f45c6833ccd70057959e8fce12b20815e4448383458bd7026de895193089370a5f81ab8975a18a762c1b9317033b4ffc70792f1027eda42214fdbbd5d15d1a16016cbcb2599e203f9847126195de03cc5caf80234825517e55b28df7525e0a409e52a0a452a38c77a9b069939de0034c9aae8f50844b68905ef9c3e0f57968ff5dd28a281b805988942914c30e9c8747c2a89ce0f61933ad1fe55a0cc2368332f3caa6e19b0e31b41801e5d8ca0ecb201d6f289f2b9d0692a22d16b646b2d6638d5ba97304125beef00c847fe78e159ec3fbd9bd2dd8c71f8cda02eca30e46457e7a0c4ea9d4b89742e8bc76d8d3bd78b1a9e2668f359955cc710488099ba218f4854d6f429846fb07a041f8cdcbdace33676d46e272a9121de3ec07c763ee8ebb7ab4370fec588cc1939cdcdf694a970bbed0cfbd2b01547512837352af3139c7b91868420b18fba57f2299a91d66cb10991d5aecae4ebbbb44130e6587c0d11e45e2d20610ae8cf585f358f20f0f443ade95c0b091b90db249b8bb188e6568a5a8f884bb95228bb885baf14c82581cc4f4dafbf2e788f7d0634a447710152bef9fd138c87e6ee117990b1020ce2275c00b218b782 +FAIL COUNT = 5 -K = 69affe9b1d0634d0ed47341112d92fd7 -C = 0b76677dc42fbf21796daee0052d87c799747f620c0f3d766369ba2da22ce23bfdeabf409c498748a64982d109e5fdc19ac0d4972460af070b0a66b3823c9d0c85af764aebfd418c98372b821fc8b440a938b56d79e0e565300a01f00bc94bb885d71b5d566cfa2bfadbc1377ffa1a92 -FAIL +K = d920101176181deeb5952f6d9305b6ca +C = 0bcedf6e2cf0f16b077282a3c5106c6937f8e6fae07aa4983df4e737b36dee08fd2666faa14781de9a8655c348205ddef5ba6506c126cbf5e7688f84523ac75676afdac51b66287a1a246d00662090265270faa5190b576bc9b6de9432f37e2cd3e19c73ab2c1bb73da04a513432437a42cfc55320d33740303775a9065119a15b4218aafbc8c4af01a9c6a165ec785fe1d910bc9864ac9775a41670ed871ee8e1e346adedec8dd01d39f341ba763ea8ab7d97d5149f09457745b9db6a6572be26e37e336bc67f5e5b27e4ef884d80c785097e7af90d4866d1899d88a1e41dc47e69b441bcc562c666d319311276d5787586a1b0e3df34aa02ab717551731b80a30989b3b2e7e6e55c4a1ac73a601741744b44fd837e4b74a14abea82d6aec321418eab8b937223174b9c3cd36858a9bb191ffb979300c0eee5b70d7e72b19a08d5e1e25b2bafa21bbe76dfcbbcc69e50365a6a9cf1a151cf3e57a487d3b774162e05c812ee61396faf5b3a3bb5c1fe0679ffc87c193d885ea2e32c6368c49a95555fbd311a8eb68e3d9248c93e19a2fda747febf4b38145eb7beba8f8a1998a6e3ece04d88a14566edfd3510fdafadd46cb466f9ef15de9162172cd96004377f0d10f7485dca9cbd89ce629d529d8cc8ee5189d0766fff7fe0cf13bba5cbccebf8c7f4abab7a1faaa0ee1eff047251834eb76b173c46e5aca6d00e021cb2310a5a91f1e9114c8e8 +P = e7b2b8ef658143a8c2b67f47885a3a152443a6c3b12e3a5924d6ad6bcb4747ef6c42fbd3c2754acf468e4ceeb205c37156e63a98562abaa5d6af5b304b67da8670b945e8bf4ae099a340150a327889853d46118e6a2f4602f2ee6ecb34df9d456ee1950e4cd76510a023d77f0375ea51b36f7f64eefaeb039cefa19f66507999f165f84eed9aecebe7537bdc57d0d3fb14e66e584c090b4d06ee377e1e7107c02e5a9ee3731021c86d89fbb9a29fd10001c6e8c3de7a93b7c33a824314c4c64b62c05cf486cbe4a5efeb22a297f2063f67b6c98fee98ab150f2ccf39b190c213fae76999bc28641790c2bba9ced13b40194cd9cb437210badae0b1db678c8a6879273c88d4b925f9a066560771d1c1d8d92c4cd7016487720ce41320f5542560654416523477c6687bdb3ec04fa8c9131c8999ae411d1a15b713c05e967ce29d0e55e6df6a940c4210f83c824d8ffbb3c110438adbb24d672f3414f04c7bb544d2fef97f9e8200e1c7b666cab8d43c93cc6190432ad51bc44b0ee1fe3056d7b75aacb220a98e656ef5b470f7f6ee6938278ea18889ba0a07b655265b3e3179c9bd99761300dd655bffd4accc55ac613d6b960cea1a54c162e8f67258eaf6974b52b8f7b1020ad001157c6aea5aabebddfc320bd243afaf1294ce76336d87779a7e21aa86051ba0baa137d9d56bd74a0325017501e175af6bc30c516d0124ddf6 COUNT = 6 -K = 9ffe731486c2be53370ac5073d7b6178 -C = e12e20aba27ec97f66021596b5e48b05758d409ee18cac352989025ee3a4b2b5864d2a99721b29c75e809d6e1bebc444cddd281f8f9fb377b94086ba38e1d0c846836b78d2254ecfbde315d0b4a092b25dfe4e83f51961e9355e2131c5ab03df62fb153ccd04c13ac5fb74e8e70510be -P = b075aa99ebeb7cc946a8d753cb7f70c452d1a8e88625b8cc6fbb4506610e9454473e6c9df3c67d271a119916bef47af9348e298f5ae09f4c4b03e8b1ded112129ab77a18e4e8fe31e00c1a46b5c0f32d0a66b2ce79e01986b88d5ed8b4ae4e3cb21d234a45 +K = 6b231be57e3232a0a9d1d738269feffe +C = dd846ba04c71502b10146950eb3caa1826c6035495fe9ed147ad1a1ae2ae10292bc68e73bad372e4ebecf4bb106894f8995c61e8fd2ed73fb03bc79460f75a6d302be4916f83cfc94ec34e8c6c3264a197da77ade3c50607c18c9ed65c816f15daa7dc5469044081bffa04998f30f2d2ab4a4fe5d0dedbff72e5b62970f59b071d5aa535c2dc723dacad9f2f11a0d790938419d24da8a8a52ba43ad39bdd7172a5bdc5480429e8d3e6800a0c6af7e25b8cd53ac7e172facacb6ab61081e1118739c05ef030e05015fc0f92dac868c338c388098911735f112564b05688c7ef8ab7897d059c86edca030bd49325e89cb32868010ab03ab7aaf7f6f9d34bc89ce59168bb01156ff4ac29b1f10db19238f068ba5237d019f24bb69d79597d7d024bb9dcd804e8049158d73c61bc9eae8a5407cc6c2c4ea686ea291613f12f317735186d67e58759e2f4083f5600b18d10978a91d643788bed022c4368300033fac8fb7816ceb50b44d0045954ff232b3f48cf9172eb125e0226c24b777d83dde67a480f40dfd26cf560652bfcf3c50897021f8162f225675201bdea3ebc0f89d4eeec59ce0fa9fe4c41e9210c1b0bacbe2158bbffe242d634b554bd8e268f4dff5544b4305df346077e25bda9a621e36f45f7119877ce283e4271846aa25aa486b9535064b28b9fd4f700c9f32eaa234fae2330a25055bdea14a7c087d9a57e528098b6ebe7f7664868 +FAIL COUNT = 7 -K = 7840cb4195201f370852b648bef70ca8 -C = 80909d72fe79f37eb8b2416d276f4e63fa9d43cbc69d54743862b5dfb42ad0f4084780375e98ca4bf2fa1dbeabd2571cd6149d83cd3ca61df860d2f3e9ca11427fc161bb02636a37d3fd81f86e2781d0613af302453d64f31344f169b7f68c4c01909fd86deff63d6c47d12578521e08 -P = 2ed4da97a25489fa3fc26081329a7bce3cb3b8a6fd8596f6d4d3f0a0566b6f12bc49d298d293c599a1a51190d9cfd409f54144f0bc0c04807254aec88305428c15fd03fb14064a705097170a19707cf7ec8fb4719368feefce5dfc4b039ecf69bc7cefc3c9 +K = 620afca1378a312cc290bb1313cd0aa1 +C = dc937c9d6b5219c321e0ff046c62c948cea1647e9c92b7b62b385f6229284a8fd1b407fa15dcac44b5e479c6eefe64048f674d77f07790e8215fe0d6df7bfdda69c79c3ae5d806daf47412d66a3cb361775f72af72c082c832d7d23e908f11a34ff77c5f08dcc743a3975a74dc2e23a3e5143a690a439ba5094d7ea7ca936fc958ca81f66b5749ec447a788f4dff02c13c71c31f4a2209f89da3be55319f94089d5aa96985afefa2794b9c895744a3e7d76332ac287747a73caeb78ae236ef392c1239ff678464b46f2e82905871b2becb610ce19c212a8e751512c8f0a86afa7d395c03e8cfedb10203b3630b6d40350c6619d4d71e8f6afa66daa91d45c092fce646f87eba577de667b0b5bc853bc4d2733dd7391364249114487eecdf787e18de1081234fefb86636e6feaa57d9a561e7d15c745d5b77d2f5e8cfbad7796bf5ba6d02e2374bb533e208c0e580b6bed9c50f7be2d106c10a877641b4a05f2521abcd93d9092f433556c08466f1d5457e300a9b393f640cecdd46723115651ec375cc5d8227ab9e7ac4bfd28caa0d5682bc889a0a4911e3fe3c0a416b7e6a5c6cff0e04f021e3976466951112623b582c307011c34e931b6e2d909bad87bb8c2090aa3115a63e5602cb604d289424e284b1afbe795bc4c1427b769a965020b05e68f31ea195b7eb46b8b788a3b5b233c84cc960944fb372aede0b32c1f33f4e3f3d87f4a00544f6 +P = b294163868b4b28e724b7f33cbef4233ec90e333815718b66abe16b33ffc5ab74996ea793d4b6f2886717d2626ac1d79dd1c66a5ae847e900af232ac372f3349226172c4784a0bbfff5400e53d523d2e17abdc6d278145565f8eeac94150526f33faab6c9910f9933f50fbe81ed5c7fc203b4afd3cf291fcf1fd3564e4730bc73046974f27fcf9f45849d598e9533b63d057c4789fc3a16c56dc614ab1da25ce7b5bd817392cf829d95f5aab0ee0b74f7ab29dafaa14afd20d12698042839c74901878d17b77c5c12f83c23ab66c3812962e3590c5a42b829d3eef5aa111813ed2201cca9f3a1cd337b9875bdb9a2f9adca61db1b6a0a1131bd500d66a613ee5ac851e7f15bf326d914bada9aa8119b3bfd36363d079698530772216e9ca7dbda05b941a9be14881c08f8dfb5d9fdd3c706c90f0edf8561c1a10506f3c6d02d024ab66ebb68b8176c6b1316bcc2abba2caf39c7627745ba5d27d9e82b9de48b5e13189b1c646802796c2ca7e636b551f8216cd06f013ba5d190f2b29d71523e1e3a0c7d406d19e11831e43b1fd349109694cafbc65961fc69567e314ea156f5bb7d77648aa6c71a897bf0e6a7d39caec53eb891880e999a7c38bb650d5c5c960d6d3eab2d6f2dc8ac811b259310981e28dee7fefb8c03b0f5e56dff2a52b6bd3df68358d05795cacc35da58c395e9cfe563cb89d67ac98407bb972603b4f93ce COUNT = 8 -K = f903653a19bdf2df1b6a0693da867802 -C = 65e93753223ce46ac477ee95618ae6a33064ad098d4562200629022d9decdc8da51a5340092cc676adefdb126188a0b16b11c7e64ca59437c6420d6a3c288bd4001d3960bf499f6f13f332e6e1279fbb8935b7087ce4eab5dbdb0d2683709b7be6c4214e699cbe0582c795d7da8e5ced -P = 2c9bea612cb6e10ecd10e5c0955174f14cbdf85d1fd614b2a9f707f2da4e08c28fed98b05ffe69bd4f6115532ba4b18d3b5f4a188f5825f3c84829b9f4f1be69c75f0bbf37151484a2092aa56276f6a2f78298a5f04e83e0a2d1217c5eb8581ff8447b251a +K = 338ac6da67f08b46b4fe6b26e5fb2baa +C = fa0b6333c13c37aaa3656408db474c668d70ab2d4e9fe9364a3a53a5ba6ee48507794c0dc645fa13f7a0e7b8d4c85e344888777a546ccc3a4ba170d527735a87ec213858221f698bffd63047fae1cbb0410803ddc97f411207684b473ddb4793b863101460e57c458e8b231a66ba4a582e65c5098108b9f4b709dbef4e9c820abf7a4d50d01a9db336aadede72edb903243d48fc941ffe872347168e008e9147252c04177217fc8fb7451346e083d592a1887eab821db393031552053eb0ed9ececab4dad0c4f63f4848d72f6d9c588497b8cd9db46f5c6a996640580be3cc5cbb8f6e444f1bad60b3cec203bc38b547b5ba08a33cd2cbfec33b2f1faabf99070fd12617ba8a1fd9d40e197d04c13291c40d3abceeb200970e8505879f6f40bcbeb5f8d9a187525df13585df87506c0ad21e22adda85c15abbfedc682224c71801ddb128a832eaae48ec7b17b21caf6053fc709ce0d00cab7ff05d313244d7e50e48195e3886c8eec2fe333dfb0ea77edfb44937afd8973062072ddba5b0fbee9f98a66f15302a4cb8080cb640d17ff9c0d922a58bfc527d4c4e2ab7c6230cb3499811e1c48604fe59fc0178a64f0180d12c0bcad51d500d422748d296b60d86d7d23cd5f89a15ee815ea50785d1431851d3761f3b312f4ba9d3467687ee055bd4c90f1b71471856b7e0e71640fe797f61fa3bf87af8f1426d6c9453651b630d685bd6c6c844a724 +P = 3131ffcd3ea35a9c6112825a1077ba0386885984d43a728fe5a121dcad140344ee0a60c70727f6768f9720b5094cf2916118d30f27f6d1302ca9e7496c538151ef63a39cc8a4356a4cf7b3e519c82c82067e28b17d7d149b5f204329783556f4348644cc6d80db75c271cdc15c6dd244923c024d76a9b86ee24e85a31d8342cfe12bb67535737ee5d82b89691b59dcd8a6f33829c48f652aafe88ab6ffc03d7264dd49c7e6178d8b303a3cfa9477d97ab17a983d6b01de112e13de6bdb6a3708ff1f68e9b181613e1e6071a3cfec10b953efb54e9467a3f87005a5f77cabf088ca666db2f20e2d9e0bca4c6b246107ddb95c6247ef4f38eeecededb6f82c2c472759bfd1d40ff1ac28837209c714b1781aa2923f91ca55f585808cdd1d04fdcaf0d4f12eb2aed4bb0ff9762c7f1376e4f60c571249e56fa99097ae690086ec45b0cbcdfb4e1811f382f1276815b8f5503c166605358060934d4aa58c050bf3f001f76b15580b1491296323192ae3bd6fed8ddc28604e403fc2e3832420ff942097aa8dd447682db4992fdb4137ac4016a023c92452126422d10920153f2c49d17740488fdf8385aceca8a6115a5c8396b5e8c11f5c7560cb0d25b70cc8980a6cd02c292d36b9d476677fa950e1746cd506f676f9d7b75e32cf3330c46b738b5fc7ed2ec6b354795230eb59be2e112d8ec5168e50f20ef813ff4e1efbd4620b41 COUNT = 9 -K = 1bed8de2b31d1605cdc7208342d8c4e9 -C = 41f38272c3ccde8ed7ed39b974b99a18edf9fea24bde74d013298ff02a170164250673b5c4b4d97d8dda70f8203634957b14a4e247da4f6f649b09894218954584525845ddff9bcf183fb1ac3e0aef58903080d44fe197d4458acc697e984b3c9be577efbb4d31ccc0b263364b3b11e1 -P = 8d0417e611ff23116636b4ef2e32ec4f785f2fce38370a24174a07e724c5ed7f64cad7722c493eb5e9ee6e94470aa851afde4ae0444109319704109c267f79c50df646b6c2c407091bb1730ec16f7a31750198717b67edee6108c6682aef1e25f020900645 +K = ee97c231b5afb19ef0a8aed74df98465 +C = a0284fb18dac999f20b70e321820abc6e59a74539338ae3d989bf3b36eccd5d822f7a1f41a54dfbf63ab54354c153a8b8425ac09427c1d2f29011512869143b77fda0ba7aafa82c8c4b82041b528de3bd037646fac4bf66d46f885e4e50387900748dc4ebc5412bd1b4826d6e26492cda42ee8d1180e57dec54a9c5a97a9083765f4d3a4d050d40ce0496e9b30e1f2ec1eddd3ea1db2eac507711d84e553aec8f2d112743472e3287e56f53ee7ba8d8410e16b81294707a5c4c27fc7b0f51e8172cb8ef6c1c3765144ab6f8cd6f9d84cc4d796bb8603f96bb25c46d66f1532343a3ef28b2ad491b373d6f3cb384c8dcf7668f946572daee8f38d61fed0ce6e12147700f6ac85d236efe162d9ee27a5f349fa548b3e35da949fd16eef71672bf8f040f06f9067426167bc6dcc1fd1f2cf5d5281717c3ba8ccf455c22eeb261dd9139fff4524daa5ac78509115f7606895a13f6e46ea1f742fb9b2428b623ddb76c1f3377927226d664e35deba4524eedd2f6d3051e941470f756754b68dab912f4e304a2c80da5b5ce1ae3d5087ff715056d58fc34463139a79250eefd0e7173cc8f3dad755d06e9650bcc7b735294d03bf80a4fb7ec0f3ba30759abdc466a48f6bb7f5b541b9f1accf42ca5606139f13464f8ceebcfe14cfc316dc5df073ce2ce7f48aa1b736d9c2744eb71c50022718155e5883be169d9012b12990246bc0707888dce2e3b6d1de +P = 241ae2361ba6e52e67fa4aaa04b06681cc377d6aaf015a1190964a7c3d3ab95809c7d09b8da66779f63640258d6dece123d1b13521f982ea5f87aae3cfbfb7d20fb0708b60af23023f6454d632fcf2bcc0f89d639f39168a8136d18031b4b910b8a212361cb67955f63e4649eb2e827cfd035f4182e26413b36b646de10d08f5b1d7f4a0288e3ed1a14b3d75bb6a8f6c8cfd72a6ef8ed57a97ecda7d5e6a6bb66fc9bbedfe61929550ea636452d1c13e0bcb3db5e5735ce299d9ce3d45e99ddbbeb38047203d7670317850090ed118f95417210c2c1024abd947fc96e3768bc8b48ac2a266c8b2cafeeb71a3596b3e08264f9e57aca4c7a6889baf592ad469a226478a0a9be5ee43fba782a3f8d6ea3b9dc28585c88f24ad85faa100e964c167bcf4deeaa0f9e3e6c5524ed20c22581d8a9585c93d44e97d734c651f8040f9edd80a5bf8dba74bef782e6db480579fd1b84e9b0ae720a344b08213744a09a5a98ebc37b9a94293a602a1ae3e4fb4b70006a28fc485cfa5fe1ad69afe746f1ee7ae0574912a8e471656bd6e9d61ccdcab74a4fb4437fc52c44663ef369432337ee0fdcf176a9c9abe2c117f03c5b62ba7f1d3ec91a8fe5fc1a97d4bd8470efb89aac97d21479b4daefbeee9e9f24d12dd72a31f5e6a61e46622a985fc662748a1efaa19eee478a317b1012279a23ff65aaa93a919aa3bae5157f3e05c5fdea49b COUNT = 10 -K = 8e39059b7e63866ca160a96aad428b27 -C = d2bf409a41179684ecf7299b53e4edec9e7c5f254dd05887d4b0eef4adf1e1b76c586db1b0b60ae5fc6beffa76583102a706669bebf6e60bb619d11e56365c118ac1dedf3d8c20b11548d39b9200694efaad96d6fc09481e193327afb67c9f8a19a98a9065cc817f71333bd98dca083d -P = 4d8cb6f7b1628b8d4543fc8c7041839731b4958d754d00305bdeb4c72c730ea1beb79b113cf91136c778a55cfa9e5d1fddd5ed4fa0ad4fbee5669e28171444dfa43a97b1e977bdb1750615385b063094b12ab4e07daf8c93be13181496ceaf2f89b77d82ba +K = 681971a9c038cc3c965a21f55d00d033 +C = cd8c6c4e41090f8af0bd6a2f72092ac58cb910589d9b9e09a1415efb6b7acadd4a78d00050c44cf3b8bfa8f248dd43761ce210084297df618f7ea20e8d2ba47f6b52e08679093126c1f265a903f59a2affcc0ceacd21974506de65417f04d154b810329b598432734717060326732296d7e6ba23b817d027638627e34339c6f9a95837a53303799a16c26302254deeabcc0c114ee86bd9a9b0b95c89c2bd086b4beb77f22fb9c5ef74f83624aee76c5eed0241ac0da9fc8df524277ff4da9cc14769cad42cf58f04860a8d6af12f588a4234794153008d35569b4feea908201c5b099a1e4071f05d86fc16fff61efa3dffd1ef9b1781291b41ab7a7851be33c2c1ced19117978d49855bc753cacf721b711ee6cac84599d73c7a1948c46e883b55768d28d9f49687117f2caecaeaca94ec05145f5dda9c889ae332462fda2b7bc05159d91028daa738909236584a36054c4325a83ac376c938ebe902dc0eddc0d3db43833a815279fa7ad27908b15551a2db10063d1ffe55465555dabf1c03f9d85ed4425dc5c5ad6978b22ab8932408d5500d9b991991e858e9e785d4358de4d989ca34b9f14c5a9d249a5a4ae1f0e29d7aa757c7ed587ea57b19b36d22d0d2d13b658e24f782fd079401839890eb3d824a7947c14a2d7d164aa580d657222232b044ed4e4b6fd57c20bfb754bc0f8e3a6fe17ac4343106c6a64f184bd3744d852e39feff6c1e56 +P = 1e6cd8f4ef90aac86f88924ffd2ce9cd5cc3e09de59a90caa36fe5be55d7eb332851e362618e053b6bac2992272252781c996b7cc58b2e84b8a5f99124adf96671ac76e5b54d7062e9cd4a538ea02d1d1ca95a056ab601a52afa24d059e618a106714652339e218867413660366439b861551e530e849f1e70a168e699149eb6ac38b83a578641bd7fea3d45499e88f9f4baaa07cb666ba2055399aeb7f4980cba738bf3b0e54ffc823001c4c4404ed8548543fe38b51c1bd412add9f897743fddfab7d3edf1e2964a98876a231d74f2e8c147c2f05c53ebfbdff5f878afc0465ff2ccb8203c41676cc15aba29f5df6ec5bf7e11c918e4feb07ee0f428944f3f37d7e5bddebe4679e9894a3fd2e6e923f475a259af50021ac4294ee44a562828d116565bdd013f55dc8e83a7af3a977c16b8009fd8f03dc1e87e42a1748d5376a6f4b7a463cfb28795c3f1c4d513bc3005f9a4286144277874bb7e2e540c7b91f8ba7246be6d0ab90eb31e585c194a9bf72079ed81b1b7dcd0470fc62f4cbc309ab06cc7d2be3e350761c64348dd942c661e236b593075cdc154e7e1e3d6811c223888aebff02e2cffa1844d7720112434367c9ca79879d6f585d408ad963c370c73f160518ee586f37c57fe7736254e739cb241712623ba14f3928f62abeeaf87d13b0fb9b8ad9e400e11a9a276d2ebdd8fd8911ad37cab49e83fbe25e7692d COUNT = 11 -K = 9f5abca895a1f4e130332b824b07afe4 -C = 4fb92db5954362056737d314d257a93cf0a078ebb32c83a1709f4e1cb0d7cc62b5b9da8ae30856ba2ec5739dfeb019a82bfd74c2f7c4053a3d7e103f8b565353932b85f32f72e12038efba0d5d825b0b847cbb47287f0198f220d58e4d9c3158557681dac044a466d316b4cf41883758 -P = a1a7f6446373a55b9e051de1279849cf12d2fbb44a1b22801a2c2280e2f1285f13104cb0d2868693184b907ac3110025c7b967189dff7ba3c29a23ecf91461c7d20741fa294ec8b95a12ae4be2dc14068c079c97b8c669880566301cdafa77285662bbd344 +K = d2ad7e40d1c9ced4cc47c6f94ae11b4f +C = e831497b073c70443bf9c3c3485d68ad912b5cdfe573f9888172b5856b81cda46985280c2ff01da4cff7c7f523018f4e2829d024ac689a155a837f64d18dec40e52289d53835cbbefdcff5fe2d9a07090692daf3323d3ef3e9db87019fba1b2d2dbea711209a08c45b9f289fc688541eb5d1cc96061375678415aedd5c17ef4100b2176912bf3e2b5840d06a8c44fe27d8bfd71159ee61dd4a015ff582602ae851983b2b5e18bbcc86aef96d9189ae9521232c5c1819fea1a4006d2b4c44353544ad6dd8e5c47d517c31612dc5d560ae7c357aa2be994c443a147f69f424edb1b182bff1290d19f8dd22a2b96f520cc25873d76914be43c1c4e64fffe1952c96f780dfb9974504eaf81ef3a943d278da11c683248e972abd00db510c816e54c7272596aace881d1d80d7b37d78d36dc78ddd542b2e9db738a4bb668e425b22a729a57585523d2372ff402adc7fa6fc510887146ec27dc0a837a200d5a1cc3545e10a11a8e3c01139bdb988937d4a76f4686c8725d74e3a88600fde18bec70f8b2ef999132c845a52ac10f03b1ddb8db4849a419819c4d8e016a60d127e73349914e2a64f23e97609e3efa70dc6f64540a2a83b188d83d06fe6c5a76f2bdf560e52ddf518b4be3ed12d11c390be9706a6e318c5dc6517cb5870336175f51362c377157e111f5f4fd0fee09fdae0eb1b4c86a3be52e6dfa1f33647993d322e55f6f536177270fe835f +FAIL COUNT = 12 -K = 12c2f7955372e3da072ce702a0f67cc8 -C = 9f280eefda74111b69d331323f7198025e99e70a7abf0338e4ff23d6002bd0ccdb665d535fd65b3073d9133cccf1e10db1020f6051ef40e1da57544e38246087e89c571c773bc48edfdc3142165ad011d900b9d0944b1efbc8b330918934ccd7be1eb4dada4919f888e25d86c382d0f2 -P = 5825dabb0299f390dc55575218ee1f8b29db3ae8846d7de338e71aae560d7d446c8c3da9709550d27aeb7c51f969f9e46974d48dd64b98743ca2d4cd8e402ab66a0ecf5c65fd1a83d1c9a0951b298109aff937299ce3495d747573dde95926b43e7d7cc158 +K = 6d4d6607099de08db894044dd8d7a76a +C = cbe122bbaa7b44e8297423dff3666d508e5fc661c47c46ad7f9a0aa9094e78a569207254011dab5ca2ea9bb530ed8ad92e8b21602e0abcd2522926401b92952a0bf7d21abea42a47e66e658a17f054be561e112a59c2f21bf1f6e6ca9f7fb2a1178658dc8fcabec8ff4e358a4eec5647fcff1e98859c08a050d1000528f7bc3319eeb2fb7ef2e2de4480081397e06673d4f447d64a0db5e4bc7e5abcdf53d60e2f0a23045f42f30769b9958ec0036f3f28dc9a7a2d82e58afec7c844d3e1e284d61cd90dad66145d3bac6471bcc051174fa05252e332371bd9d753532077bb192bdaa3294c1eadf5ac3ee9de8371efd901c54d01eaef35310c5b59bd1e34ca89f9085d5ee46a3f4094846428cbba268827ab598d14c97915ea687e4675c96c753a77c60b6250133fc46da1d289b5152b2256ba1003c237c9c10ee5e09fd791a632ddef77a2e10e87356da83a5d6c1d4282e1cef2b17803a56476ff6340fa1098a5d89570f26fb6f76c1d3b54eea548bfa85b01d0834a2755de4ceeb68167968ed8ef3d1a0ee5dc7158a7c085261c5d36ef71c37dd4d0f2b1e691a810c82791d7011fb0aa1c6dec00d7075cf1f8b70611ed4726c11be2d595946a5392c2f7bb16ecc5ab86d7a94b9463ac6d6db1fdea51de8a7977aa5886a16a350501fbc3d59ae4ee67a0a6fbf5c577430b3b9f8a897387bd0c1306f3f8c9a953bc5b1823f44e0e3bab22053c02ce +P = c0d275a964db7e9d036dcf87ff141fc54ae40159e79e9e3ba96f28c23d6ee9a231bf4f2d570c87a20954d6becbfa1628cca1c100c0e467368ee69154762872cbabc590034f6c1616381361bd6db220a48aa8f075d0f0cb3eaf83a080d3af1294b309242c2349e2f471000442a48ee63d05bff9b74f3291c52012c81e95c3b32ba0c4a7315d2d3ba1147f5fae63a08419dcf6267b6829dbef52516b5adbe954630aba2e96e0d0bf3894bc7265c54fac779349f1550e5181e724e666803d9f49ea703179b053ab1fc32fadf98e6683df0bd57a95d031245aad84a6f0ffe60156e1b9b0b74b8c310298b49e462f0419cd836dc7e0b8fb6ad6c2b9b7639771d9477c8fb06294903099ad073f393fd7d035a06c266aa7e94805c7d0ac381e085eb47dc1afd666d8adc3c0af3886357496ac36e78173798f0318cc2eaa6946e5d1310a1a15158dd798568464b20234dea9e678788ca1d92f4a308e17962bf672c5c1215c63c75db4f05c39a23fe2bef7c3bb69061440c1a9e287d9a38a4f32026221c34d6445a061cd14523846f6afc16c90ebcba905cefdd9bc4e03bfbf5995a749d54aac711d69dd819c23c83fbce0aa30a512b432efee96781fca5afb5f476c597d260005f8f76b3d5990b8eb2505771a09136f51aa91823b256f1a34d4253ebabe31b1b5ab90ba9caee67df29e6ca7387ee40c3ce0d894effdcb29a03d666f521d COUNT = 13 -K = c3f130af05aab506adfd168e4880d932 -C = a53dfc19d98e96816a449b59e18cf784bd5ba99ff63e60529709f2ef6dd458a4a76ce8d7c6a905f3b5a4a5553d680e4e710e726635e23042cabcfe57a07f91245b9ee79e8c5ee0648c138980995bbff3e9cf3cdeee9be79edab747c3ba2c174059818a53a770354744ecd9776574a436 -P = a328fb9f5e1c62c805066fadd7dc47a1640df0f9750fb55a986395946d64cea990286f3b1d578537727ae0d839239b460ef45a407639f56d66f1dc47d9cc24ef0eb61b8daf49c78bccdc946648ba220afc16bd27280b4e1fa96c6004201c826b47f8685078 +K = 151efa54168748e0f44e34ba07255dcd +C = e7a1a92510e8b201a3d2a65b796e52b4f4d244bb92f3e42d6b7f19d5db99e98fc2123a20ae5a4c88b241ab9f249f02b4109053fbcf1aa64284a988d7fde3bacf3a622f92bdff65f986152788b36cd49da37ee9085d373faf19a867bb7777cc9d7d81516c44a38b50030f004db87fb90bc1c05537bc062ae3bcce0ba7df094c31ffe92d6818da6ee5135bad0864450f2b11005e0f325cdea0a01c66cce74675c68285b78cebb0659cdcef6d7ee8d75f342cad7b02298d9da69d603b964fa1bbb4e0fe2513fb6e40b4f125e3f9bc6a128838b6f2a6823e4868077a9e540df7372279375d09cd80d9534dd52a5897ff1860eb512cdb560d452cd59d183265efdf455eede9eefbf9bb3dc810d354df48e5b14c8568fc8cc0ed8e6372d5e274d1c5031bca69b1e36fa0c1cf2dce4b86396cfc5f1a7e5ec09a889b7e11c0d6a886a169d941bc814544a0b30b38d8e9da90f730b59c42eedb764378732d027a9dc8ccb77ea8c49a9f1bdbae59965a0c9ccd06803eb79210d59e336d285b1f85f6fa1e07efbba9f207f34f133fbe0da51929a76fd88f8134193484fecd61bcfa8a3e7959e2fb7e69e2e947573673110ad419c7bf40a752b27a0f3cd4b172512d294b692885a295442591e5511a287e08ce4542db26a77f3122434027f3507ad3b750d7c46475c15145cd1fa14afffc0dd5c31606b120ae9439519423556f3b7cc0629ad3a1eca9e95c7fd68f +P = d7e63ebb51b9df0f4c6385e18589c1e67808fac365f586ec3f0de4bcb06e0a602abbc75fa7b399e784e90e43be681ae09daa05c0815a793e3328ce5d3f8abfb8885d21abeb29b72dc77e42fb0dc9b59c21044c6ffbd38139df6a4c67e70a77851a89e5b4c2b740166c22ca6d44e6d1edae85af3c9dfe3db29810b7099969390d9886f82b79a088ce1db51bf1b651153b85377f289604bcb18694a768615687a237ede5b26d7adc8c3f30af347495ab173709ea73e1b73dc6bd88b16c1733645a84fc8fcc38f938ab26d9e97ed2a1108b5ac7cf71a334ef42ff1d413aadbed5c7c689676341b92c02429d8faf40573baccc8b8f310f10a30757244881aeaed60be30e5853e9cf75dac5270cc1bcaccf48c84248e1d9e9c880e29352b1bf7b950f86d54cea1439c6bcd2b09d8e3b466440ac87ded8b56a80d288f3326c3a1ea9e84bb50ceddd581dbe74b17ef57006cfc6f06d3ca5fa8a706054928cf161bf8a87507667b603d53fae7d8651ba30e4d61dbccefaa15f830a47db4731c8ebf71ee5e0255eb00816e2fca1e4aab226a1eeef4a03d1db3f5432cac968f98d0b9fe53a70513956d5f7a6f1181acfa158e2ee188ead5d01c99ecce14a7d48a411a1ad33d5f5ed54059d8bd61ee4c8fdd502102666893153b61a8fa3527da9b5c1b891a1dc745c4dd0e5d6179f96542c79f5c7d93494a81651fb81bedaf4dd8c800ccc9a COUNT = 14 -K = 0a83946d79aaaf520a923e1a84008aab -C = 4f7a5a90940b69169067ade55c736af07e10d8220f677bf23fb171c8a7cb3ef870491ae9fd65057c3c8295abbef48bb91d288692f16ba53a00127d1f9e0275a3971f38fd91d262927375481ca29935f48ee4eaaf09cff22e33a02a70095668451743b974d2555cf0b69d3db84a6c7852 -FAIL +K = 1d1871b93aa701c0b6e18a6fd41636cf +C = 2b032241505303e8487f0619d5d3d154c6471704f996361be9a57fe29fc9d9ec4957b0f35a62d65b913383b825915ffcef0cb671b460b6b12eb3ba3c6c427f446b49e06191c7c1f20aa7097600da97e000d557a5e95be0d2d434a5d3db936b86615c705c869af32cebaa13d1f9f86bb5d659495dc8d77e9ffcd5714898772c88bf0dbd3f8134f2f80908e91d60b50d1ae79042d1d19d36e1b05238b05bde1e2f9c2adb4b52ad13d9adbe3b737ecd12a39aa0c31e9689bc32f8792ea44edbd0cb87c46c409dc14c3e2de66c1a862ea083220eac0fdf255785755e427c149ed12661ca5e4a6832c840897cba84c6523962dd1f04b0e37b9ba4af594fd4412ad0b80ebd1dc64042049fd469d273be203c1929dec86465d90e9cfdb08bfdfcb31e46cce700901449237f5e20b03f717d264db02a864d625649509ee23e24b7450e38a71a5fa9f84b6666f7ae8673bd39cd30ecd665dff060c628f533fe5af4cabd5074ab5062f14b52a1ca2286bcbc0862a6277515ab984cdf2c2d4e6c32009582ede2764be75cd0b048ee492d3ead73bfa0777860b2d9fceb62abadedef5a79bf8e04e28db40cd981dd9f35c9408eefc800b446933b0550504e47dc26eeb34946a6633cbb425104e9b5f2e38c229c2e079f660aa11c39f13574d916b56367e72da23cef50a752881d27a9492559e7f2b0a4c2bfc7b8780572497445c8bedcfa1658cfb7cc1703eef10d +P = 85d42c85f53dfb57b02e570149931de04d9c0c8c7631513c0e1420aca1e74b538eef93e5404875aaca647bdcd649ac21b4af46685b0a0aea72f4e1476dd0298e191778962ebde69a579b10a3a37b13bc5f3a728ab403758173e7bb86fa4293a757b26e69f588d527c8637c34bcdc4f5676491e7705820c6fb04f8badd7d1dbeaeb39a52753172abd685149ec6ec84139bb3c74722f5b1d72350cd422381a2cac8593fc1c852ea56abf845f919ff897d3df9276fe39946a05b11e25b82cd2c32f57c3d8d07cca8abc673a6011a6d08c0aff705ad60cf69afa3f3a1bdbbfc784ea69ab22bf48de26333dc5360194f182531ca0091db82fcbbe4d8e865a53896576211abf9c3c9af44d8c4bcc612c3ecb83c68371c9314e0860d815883779bd866a35ace5ae2458ee46338e7c8a5ac674214b1c45092b9a51f406deec7877338cb05f946f28ff4bf1a7430ec99014f63897ca8a264bf1bc54041e48516e06016f6a9c379496b8f7c46e37fd5fce3df37df1b57925657e53ac1c629ac83c935047acab5b9144a52ed7220ca381183b109b7444fcd77892fb34569998a8b07bbce797af5aa28da6a0ae7cf845e3470dc076be9bf80db4297cbdb67d36d03f1cc8183304d24b279f51d9498536ec436ea56fac4fc9f65fbe2b00435cdf421c55c7a38dc7c05290ca2b5774aa3b7e177bdee24a487ebd15398f56010ef0c5425d5f799e COUNT = 15 -K = e009b16d9dd70c8e431d60309411c284 -C = 739d7d966cb0b233bdd0e2e209b7271c99d2aa2b7efa8435c133d3f49dec52eadd3e417f5121fce06ed76c20780800f92da2c3c95b91d07432753a617c302577558bd033b0c071f722f55c0f8d575e5193ffcf59125d5ab2860feb17ff30e467a209ba69d565fc6105307b11a0cd58bd -P = 423121b56db76126c0d71c03e4270364ca3c68a10c069b66d94473ae38e47729b4603dca5d877ec2a3b6792b3a23bb98eba4f89f6bfee361fe714f88b68dbbf678d84d7a0e024a1d3d55c21e3b472f1497e1879e4d927397989deac5c2904c5594feec70bd +K = d230f63c3f30ef3bf318804ca6a81e9b +C = fb586aece109c9d1af392c09df764f152003264d87b0e9136d89cbe3a9b8e9bbeed3dfaee4fa0699fe2b03bcc37c83407210dab7dfb2d51eec71589c25faa6f6e14ed7942c94f45be8ab5db23693db7f9aaefb5e150e06a6c183285633e2b234a5c75bef0b2e789d8b8d5b2a33c1d68fbc2411e497c990ed9c5aa3a2d52a60abe0da0b5c41b37ff286a17c19ebfb0185826e32e449739b82e1aeffeaa44dc4078955b12d45a9d96cd0fcc463e44a1324aa9fc5b6e3d9b143f529c3f7c0c535b67e883edf46f3d149a5812261c6fbdbedf4d1ebcd35669943b42e4b1301cca06d01eda9c4a8be75dac25d1c4537b99cd05a8bbe46b063bc803f5131f1fab8d11d07124a88a726962b10526c2af7e422f16da8c5487e37c6a2618ff9e7c3fc42a6d527e246a32ec3245469e9ce7755552846f697779167003ca115aed2b20e6a6c3c85d1a22c7182c2949f74af19ba755fbf4f86e548ba67b7acc2b30fbbde729e1f9ffba8b76437809d6a1116f26a038c2a0440e5a302e367c9797ae5cd251e3d04931482e59d522466295109542985c0cfb13c98197f23704f3c2ba923670a3c301f277442d6992f015265e4322f05a7bcf1cd30873cb68ccbf8079040119f1d426ae7ce1c8b24486a752063f34979d0b810ca181d6537116ebbcce33a0fa6a9e07d41218cd384fb4e2ca1bf57700897f8319770fa09a0bf0d5abe71e8e1b72dff1d7f74e1f0de10 +P = e6eaaad7a79f0103a383b2e117eaae525f1d18b117bea9c8d862cadde911f0af820d4f8b3a518e0a4202516f697086daf9a21507f0e6c3ad2e4257dee491242222e64c65a5017399d25954d4bbd00469782b697405d922a3c32c5d54e69c42be871af76e1933f460d74e4ae92be939ca49a146782d2dfe46047c35ce98f6c04d5ce9f62423342c59ad39819f8caf4558ca84987e3ac2952b1b85dcef65f6d271b2c6744b016713e2ffc7f8313b993d9660d241cec1f6f945a361c067c9cb6d6f0a8bea1c50f1325d0b5a8313a213274b02ae8677add0b65d78f31b99cde24f214106b225678ff39dcf0682d0d587630d98b75d3752e64600ce1115caa9ffb30473cf4c895498df204bd57785794b56b139668a1fa8196707139a911609a7431816f76c4a619d3f27909eaaf3aad0c474455c6c80a65cb5554637809438f89e2240e41f93acd35eb5a64ff5fb4c644e45300673a7190d80449eec6c9fb2ed9e655575f0fe781ad938ee1a6f4ac24ee54aa5b103a2bd4e78285f03933a1b7bd9cdb601d7306e19326d1f3f6c77db26e98ca656d35bca4ef26280728266f0fc4dd190907511bf9cf2e9af2cc27728131b5eacf2b797496e4796f871207193d2d1a333cbeaf20ae24c31bf75f7cdf40c74a6735a4af60f18008ed12bdcd653578f23ce16f2e0a7b9f014d24aaaaea8b9a4a1ea39a9f68044f9d86f35971fcaf0e16b COUNT = 16 -K = 284ed4781366f39d859ffe5c01dc5157 -C = f26f4bd667381194988e7d786b209f4670131991355f51c3fbe83179a10e2a7247382a262ae1620dcdeb88c5ca4802790bcb5ec1848b4e946c1a0901c4c10dc9e460efe5d29f5d8104912d1bfc5c0c2939c45e7577732f20989655a2f818594b047d6020273e83c3ed0936195c4d6867 -FAIL +K = a48f95483f694071406f66bab5f8ec04 +C = e8c0c9899aab4ccb61f6ac12c4db88cc0ab7b0ea94ee1db4c4ad618ce9da44fc99edade0dc2a3bbf533fb5fe4baa1350fc28269ce84e880156ad51564e738a129a080b2c2d0422c4429e3991594478d0f713db44471620c4b869ab9f247add9cac71b423ffd89038ae21da11a5e21bed47f18d17dea78e3cc8ec8d35ec7d668c3de3aabc4ec942ba79a268ff3563cfc9e51fc5f62ef807dea8aecadc36c2a14c8c3eed8ca292d4013ee6792564f9d91442eae24e084693e5ce981bee175abed82f66eaf75d12b7d38329bb0d7450ceec519ebf3e354496684ed37c5838656e30b53c3a6b3d09458b811b901de41c792877cfd0a60887c913fcc02c842926222639eea0df13d6625402b7555b9ff2d3eb525090fc306895d02e1e4a64d259bdf12c7e24d81df1e4470091199aa6a72d2cdd7f74af23380612a2bc950f20258b75987e48a86bddd224ff1e972d31ae21f7f59feef231d8c6203b6c5e1a80e587285c4b7481965f49db37ee56b5ee02a97cb8bf082b30a22d2a0d8b69e915c2b77477b8a203555fc1dc7153b5377557b128af5ea3ff1b99e9d91f6be0c6428d61902398a37a56cb7d12e622be74459cd6ac5e13a0bdf69d664b5d8487b4eddd1fb0b9c2cfcef72005160c05cec30e07a9fc92644b0efed64cdc05e16f4bba0bb8f04dc6e37eaebb98ec78191ffb55ef1e5fde034d82e621df7ddde92fbfd977411e029080ebea480f9b +P = 87a1b64a08d289c72ea7675b11dd7dd8da81402be9b5cd4afccccbff7468264a9414308a26de1345c23b5930c1f1e712e8d3f5e1d0f4b1164145de136158705255c0ecd5649111464c64f83e3f579408c33c265d30ad3fb057328bf8c6c38b0fc1c1f44606b16c5132caa14af143202bc1948c1740b85d43090c410df46878e26dd6f5714dc9b99bb84f93d76227517bf80ba8e498c0a9b28b7b261c1bf95ef2f98506e9c869011e5c69f5677e364f31e0c640a72c7548451300dba668633f8362770977639b98c343f283af2d2d2974ee5018ea67c326e95d4e8e591c392af395b754287ae1267d37ef7a8037f74501ab99f954de5fee7af463de90fdde6adafe80586851f48073d5cbab227827182b1d5550ed382a15627da93112464340363fb00135bdfe606efb6284a52c3d37100640bf1c7fd75f782ece16e0cc52f1a5e53ba90fb5b5dbf94292dc1830ab91af06d7e786e20b3e80a7a4f23a2ac348aef4e42ce4bd9613df23cf08ec47bcf6bb2b2ea4778b8cbc22af31f322e98a6e118c4c5a1b864d99b3c3cdca02a97419e41f33d36d1d4cc5febf9c2776644e623821757b7104089db4cf19954a5e7bbdabea8701d3b8c23f2bf39d7dd722ea3f0d7dc4ac447cd805338fd2ecffba3cd96674e73163976bdacacaced61363e9b7b6518398502cd652866b2efb31a8c9bd9faf5fc89a737200e5ae53eed19a4f7eab COUNT = 17 -K = 4209484a255c2c7efbd4dc8800b4cd10 -C = 60cd76e871ed6565f774e9513d0fa85bf229829038c81f4de1c0c62e06838db750d62db9c7c429be227f6d46abc3439a3ca587b350121935d637a047ade00bf0cc1819c1bf0ee42c6b78702ce975a67f8348be97be375ad7e7b5e682fe85fb92fda5a8e25bbb1aa8b647ce2e87af75e0 -P = ad61995708551f247b2ec5d0beabc887569cf2dda6174f4eaec7bed1367b3180bbcf2ed4ee9bc9375392fc412e49ee487b71620c5501d3ed39f2c2ff3018845eee9cc482adb751fef225537f0588fdf5f5ad65fa79c28884883b45b66347e9cc1d2d8eb312 +K = 1a6eca289ff9bbab6b1ad559d3b6d570 +C = 4112be9c8562ca92f96a5ef43de5d23046fef56027a21b694d0a5575eed1cf329ffabcdd5f751ea339cbe2027271ec0d84c8abe9a38b8ff5cc2d50ec782968bde184427a97ff99d5e0233c1e96fce831afb8d089ac547a08149f0721c593153a0308a5af00000d9f5df19bfa724f108c85662152934b95cce99cdf15a8584fd41fa64f5eca1c4fff05678be437da9e0dc6e729e89681888f1ba6d6cac8e8d12a027ed9326ff4b29d039d242c9bd983505ced43ea8ef9bd3e647ce817b02974c3c62d62537a4eecbca71b8260915f7bebfa42ac33984c497e908ff95a812fb5cfcc6380f4147fc077fbfe83e74ccb2f2eb91a1385dc61e07b82a950f555388ba87b78420702056973a851bf2aa9b9eae2d4d78d7e90b748188807fe248973eb8a1bcc1ee1372f56656e937629d19aecfd30d0eec34635e0020e9260104b89c67775b0296cdecea15e5326221623fb6560c4bbc4fe976370f1c1fc6b273cfe0e42865bd185d1ff7ad14764a109abf094bef0c2894826729b47b06e3d662bbf8702aab97d11688d007a497d3c560c2ada69f022f1e7aa7e1b634325cbba3dfa97c6915d9791b8e556056c7f40b6bb5129b4ac6c59c502bcb864d7eff441cf132fa6fb979300df4f0b19181349cb533c7457dffca6d45dafd6279d4826d252c54b700e7476f2eed918a1b29e6641eb1dffada592691d3fbc89eb99b589ce2234e8d52f93c730a0ad5ed8 +FAIL COUNT = 18 -K = fb591e4655632c91f452c3a863e9f8b8 -C = 6749cfc6d2c3f5cdf6b484ca5ea75cb949bce66b8b43802ad985414716263e1b0ae7e66cae4b095927fc3f7d0b7d9d7111cc537bcb740e6e4cb6598c94990a1ff43e38e289a05563f56ddbdf779274b860ef3468771317c9d46717b9422f018de3f620eebaabdc0390286bb4d1e0654e -P = 7ce69429aa69d1b4b1edb1cd27f0c0e172bc2e3a7f57874c29f51e0f0efcd76ed10c218ce57074e449ea63dc74689ad6b275b81cc30a434e0b4136a458e83b56169a515eb8bfd19ea3042ec37259d6c27cc79a24730a501d7a9e9688786024439efed9d833 +K = 3aa916ade7b867ecef8fadc1b01c5a51 +C = b60ec5fc96fdb686c671305af1c92e3afaee2b7c743daee991dd11a21fd243a384151c39fb0f07b584dc4ca24ab663a1db5f20398c8a17ebe5017038c7e9c42b151aca2509160a07322bf4b0bf6a56a297c25b98791e86426f197d0622e398d62e3d8777566683c8db775189bf566c9eca8d987c25143d2a48d3311a136e6cefc1f8dcbbc417e12fe935cb624ef9830bb27b7133e093101e001102951e7fa542d40dc8a894026d30ac849ebed24885aa4cfdcf3599763d7391d7d1bde01919772900aee4df15671d692a483f52f6fc7748e180828912fd7b7ef1aa793f0c456e13345249c8f17caa2f558f7cd19880efeeb7bc141a12524a31e06bd69dfccbc1422219bd31baf5f173f5683e6cb47d39d10a9818e8e302b2d2fe191fbd061a0c91641162cfdd3b8f100b6c07f7623b4598e9c64b9e940104ba74cdaa90b487f4853e78fb5eac9f9e69e155e64a520a9fe332ca3b72999e016ff29dada69fb93917733e517b053e91adb471b507655fe1c9b1c716cee17f89f731e6f40898eda12a9c550d829c9e0411d1371d1ce99daa7e9a076ef3e5ec5359ca48f8ba299a02b5e6dfbb09f904225363d8eecee4bc1114785f0c4dc7b46a32193ebcf32d52bd803855cbbabf83523857bb68285758d9aad22dd22c4885722f479104588e91f383933e5b4ed41c6638275298299b8083a11c47ef52156680e0aad35f1b9b0c45f7302ee733441f28 +P = 448660842d6625c40338a0e30ece8a636befe3590fa8a2a56030377d0fd1aade30e80c6b201628b3072f333d10c94203e32d4841f9000d8cb6e4d22519f53e060ab9453bf98c1ac4891a770af1944dd589d1223ab33da1c5e0259fb575c9dd74a05be82592f28759b87dfa817e0aeeb7eac3490e2e5d023e068e2d5a497d9af1e009871f669848f35ba0f1f5f952ee7a63239420b4c24a366a949d82b098a6dd412289585c6e8a9c65babd3a6084aa5556d3b7f529d76822fe52c9bb66bf250e7a045c5728657441628da7dcc1daf1b11eb7baac5409bcce42518fdbd7a37b717dbfe626df209441c0484f8faaccc4dfd02c4d3b4315ac279b2b9e41c14cd7dba4696d76d39634edc58f73b6c2959811fdcc080df2f39ba7b5c4869bb00d2a6f4ecfb1be5be40576d466547a0baeb4558a96be06163e198543af1188d2ee0f2a71e2de536d98b2a4990df3a3aafbfe82e50239649d0a5a367997aec8fc5fd8aebe2a50af43924e8f232cbe52ea46dfa1750a145e8d4018173e891b5c3de4767460bac3342c291a04f05ff920de1533c30ebb8189e49ce91f4d89a0acc67065ef60f5443b63d51d84ce431bb2e339caac6f437f0c39ba4244435d2d75cb46b2dd71e8c3e851491709522fe6819b3dfc79be5ccad8f8f1b445280e2532d2b26a85af439d7034bd599badb6e3507e645137f7564d40537c02918599e0d693afe48c COUNT = 19 -K = ba74084fd2f13051569790391ca7d7c9 -C = 5006b25984fb71036c609c88ce1681a7e696a149e9a51913a49057c03623705b25ac0d75c3a3024a2d99c64f21a3760c91fe245503015b92ae488f8dcc8f88795e8aaf424a886f95aa0b7e50b5b4657cc1b379bb929596c3e7a1a444830b51ff3f557285fb72dd39004a0d3627f08488 -P = 9a80bd9abc7626010bbcbe06f97db83a1c985f30287b9628258a35c3526cf06994462a3a8019e78d3c748715601f367614cd861d9d8a461542d52f6766f1ddd665d874379f2cf2f697cdbf9a5d1169ff95fd11392a103cf60f32035ae5fbbcc758790ddadf +K = 67e08d45f8d6440cc870fc7cee25b67a +C = f3c144886db23f7b6be256a3f6099887fb96e59a32141c9fb45b2a66d5cd7a772ba62969498f7ce29b999e51618ed3c15ff3aa822822fec4df1974e48b32c2c2f210b15e76b9afbed7e8c4b15c99be619e8adba76104fd98f6d3bafed29ac899dc809eb9f58e07309a63458f3a76781c483e9cdd4d8592c6d611b330cc4a4ddc2cefda6ab95ff652c2445e04420276adbf54ba26623209f0f3b9dce012dd12cb7b02a76546eaa1ed2423a0ea838b118371b5dfd3f3c51cd047c992dc749f307d6a5c3337c0a8c7cac916e2033233c103a1f282f2f367c8eb84ec082639af5d4cf6a2d360b3b08b1668f88ed20a868a1b623a9c22e5eab3f474f155d02087bb8aadbb4018c12509473f096eb09067ce1c1a8f7c42b656c133e4529e722dafab710182f6c68afba8115323011266902c72288c19c9259d02bab1343c33a99a5f164ee632766559a7d984276cb72f2358901e205a4b062ec04cb57d0af327db39d9d16ccf821eb855e74a9e5db71764bea5f329a302e764491fde4caa9bf69a8f14b6e9139b3604c495644911aa95b16f9b80bfbf2b695c786567cabd98cff8d701f5682b74f2abb6bccd8bba834ea049a291634e8c9c23a6786e994e8a3923545c000602f3fa082c479e1bf6f913caff225dd800af2de1a6ed942918510d4544d546476894883fc3736797dfb7155d7646b04b82520ee17517d5d1c46973ccd810d1e5b59ceac31d5d +P = a1af2bebfe265628eb5415349c01dcb6d1e36a4552a4005042d5dc06fac0ca16cf2428c9458cb1b20eb94ad974795b3189e4dce442689356b9748cd23ef8624b072add235c922b0a5c970054ccad7d2c3d03967b84972e001247c2d6145b53652d6301dc6d185a01bc686bcbf855f2169ebe27207097f1fc2e7e493975b0f57304175ac450a82ecca59983b0d304e0ee06e067ac8f2a39e0eb66c26ff76a967f3032c78184b42fd7e4408030a70533d7df0df2a231abfe323d3d8a1803d7decfda962ab4aa28694eb63ac4d9906cd1c08473300a6ed0daba8f8bdc0504bb162692e1c44fdec8e1cba4f277e1b96bd6b20ba180f7822e157738b2461ae49993700ef5d06b8314a53e851f2e494869e8372a543f600944fedebc891e2af8fe0141e7f66dc2e50374a369ea577a3d495e17986130f055e78758e712fafb04b2c7d4e29fd066ebf3c934156a63c29b375d6c7d2b63f2e7df5f9bf507f38f32c0500bf0d5acb007fcc2fb9b87899b614bf31fc31c35604baa6de16a0d107bd062c69996a6c9551d648d2c1d2ed6f7e61b98aaf13bffcafe9fbec0de9d70c3e23312e77b071535779671d229c634813f2b9aab33fbb2292749cf3857ab74fae8a5f3f042bb09f7c6b6fd1d91a34a94ca60a145661b0cd97e684919543108a66508aaca3b87b9e19453789aa1a4e25a0894091cd806b99b1d2c96a2e4bfe9c2019e5a65 COUNT = 20 -K = 9fd7ea465b9e063d7965b44dea7aadd0 -C = f794ff7bf408bd82ccb5abe04c7d9af945d2fb5900ee45a4b0525ec5def3b60bb2d549f86b4c78b541a9947713993fbeea984b8f87f67edf0d8932a052eee03bea5550976125e930d3d142d1e0f68a37759035a6a0fac48294e253f146ac246011ad054e3f4c7f0269cdc5c239edd846 -P = b7ae5a81c17c13f9e6d3dd1891089c755fba1ea1837c348b05f50432486025c742716e1e511367fb24c45ddc709a507f8acace8180d3979cea8117f75429cf6cc69efdc485324e8fc08ee23dedcf467d1a70c1e5334febb5b037870a0e4fbc6f841014192a +K = b9c5054258ac32cb47058f53192c0066 +C = 046408530712a2e4801a263e5e09d42dbc24dbf8080afa676847ca3a5b845ab79399f383b3fab6f37dcc69accd7271e342c337e4d4e8d789e435133ebee5c27549b87ae8fd17f6dc9cba04b632593e5fc1ea8495f925fe5165f1360489bafe2fd7a0bbf998c7441b7187e636dc46fc76e21c8766621f6dd4c88951800615e1036ec9af02da836792147a3ebd98a0a647cdbc25fdce4edf13effbbd62f776a3696acfcfd6c600846d5a5d0108bf4d0331762eb30484c4f0e8ce6ea21496c68ac488926904cfd34c2f3eb8512c571d1e725a0c9121a306459edcd93e9817a3ef20593f93c29551a8c4677e133d78e9070f4ef6e37d293205240505f255f831937ff32c12992db93fef4ad82486340cf48c623a6e82aad53ff04b55877aeb1196a0a004b3948bf16982067bc3936896b888c12ce0dec8925237d24108ea2766af6a7277043f9e1b53c414acbf6e749c5245cbd6cf2581c7c41fc75d98e9185b87c6c41c44629f61708d498420bc98f4021a18bc10288060feb74c925117b48778037ee8046ef0030aeb0fe6bed7bb4d39d6002b4d8b9443d70097446bacdd174d3a8fa726abca90bf2170921dcaab6c1c5b806b5a4ee1b39163847cd5411ffbc8aaadc4031f7305943c1cfd200e20f20c13a619587dd45a1b738995b1bc37adeb57ff4c450d10972370d19cda161eca826c6af71803d2c79d1d081de03ef4bcf156ce2de3000b115ba3 +P = 16d347b8d6e48c3de185ff38b39bb28a30b4c75a1a077b76318a4f7334d374ad3e16937d412ecf76b1457de7a7b4b38cb2f8795d7327647257e49229d14ea0c6852d075a6613261258b769656bcc8b77e1ca1b331e7337890a73e241176ba3433e2610c5941706e1ca2714bedbd2f0646821d094f3844addbf1ed42266faf19a534710ca4d87e0c7632a53422788efad3e974b0c5170e954973eaff65947ec7497d197002a16332397c17debd8df1d657c6431959dd019e8d12d6c0945cfbdc084e77cc8ba31de35901fa0ba42f1aa64b144c2d2018bc556fb6ac403efc20fe3f51675c6800a9a74347c2c8b486fb355ff102b779694862357c1e296494ec165c5941d9009866f4d8b8668202da8ccfe0a28e147b4ef310d13e2c785460a80033650848dadf848623161938336b8ca09f8070a0e5ee594c10709da6630dc668ff66d8e4a0e4b37a6d8630d49713d7d1c4d84c31907189b51fcc092c4a4a792ba1a2e9f2167514d624acbe4c27fc6e9af10e3b9890d7a6d74a58bf2f6a2d36b9d308053b1c006ef00512697c981d29dbf086c1ffa6c39495773f002f498409449192bbe50252cd2356c1e0ddccedd66738e72d782a71d71115837696731d1e6670462144f4befdc61ce224c777ec33f0a68018b00c063833dcda82a744347563a815934c3c2771e7ad170251114b160c11f000c8889dae89e32dd38c4cfea8768 COUNT = 21 -K = e243f908864402579cc21000fba47550 -C = e0d6e5abde3ccd321fe99da6c44f8150a2b365b3c3467de1e6f7490e535021eee115e508c972d28e55f963adf271f7a6692d5a44a11fa5cb72555feb867b6b947048b56ebc1b0e8fb30f8bb25b34018dd6e1013e3aa8fb4052b2796c0a65c4f6354d9e0e3f0659189bff9e6e17a92670 -P = 4d0d8884fabe5186ac70eeef84961f05936f1896a45a886fa5840852ed4720d81203b6339466ae9c5a08b0189a6bd7a15f9e87251b3c837e7999b3567ddc936b46151508f52b486544da91c3034a6fb06bc26ee396b3491781cc77b45f71a9577c7a168378 +K = b1c6008a3673a45eda5376cfe1f6b883 +C = 7219119f31bd22c2419fb17581eceb5156f625cf06d0ca03d89b347fda51b78de2521b43e48fd31e2e392cf5839ba72360801b3c0e6be06ac80d3bbd723f3f05f17328689a139e0881afc54d357f4f73fb48907496ede830b6dc0ca1936af5d47be20630758172f9a5c179f10c83dc26ded0b7580f6d060ec9a74846c6808b57df07dee0628dfcf70e42f5c07890551d6275ab4264a336bfb4cf0de13ce65cef4fbf4eaa67b290a0b4aaddb25f0aecd3ed1f848fc19fee3c80bb0af36575d1b231721ed9d84e43a63b4c4a1e599c41b623b636237f74da15b7fb9d1da98b4734e790bc1ce90e0e3b62c54fb66cfbd724bd8773f964b9fda6c4ef5af5fa63eadf2df3a7d41c6957e49fd075c1e24a9d32114483e9924f54d0f23b71b98933b0bf7b79d04d08b62ca653124efdcc71a0e3d060a121fc5611d7cf316cbd8c6126824b2df85aecdd12e517b1fbfe348f01132175b9cf1a4525ce5b335e623450b8c8267976b2989a00c898f835f9639d5b122a198a3ea2ce6f3dbe43e3b5fa87c36324ecb5cb9535ac1978b04bed00759e91728b40a6ccc4af530e0f5e6e2a1f84adc8960782c571f69dd6bb9aab00370a030f12df19968eff6aee9abf8d7bbb2a6b4d2488cebbdacbeb18b95bbea2b3da2e8f84801a3d861502e5e2ec1fb5f5f8be19cdfca145b441cbf8e1e2dc7ab067c42df6e12f4278cdef625aed7a246b1edfbbd199b32ce8dff5 +P = 3c4ace9d8c8014d4f940b49a8080ddddb374f1da3a9f8d2632a9e2f0673e3da9e42c2eb0eae06f6dab0fafa9c5ca4e3ccc7ca0529d2346441bf53fffe2bc1a2368f87fbe6c1ca425d03ceeedbdbddb2140dc0372921705a800702c24af7514324a022ec8a1f406aac4909a054e2e12e7c344f3b5b0b060fd220826e73dbe567ade082efc1e5d43cc6ddadd12abef7172a652a01cade03bcad3cf5b8f12d828efbeb9f69e2ecc8332740b10b643c5eff075708db847e40bad2fa584e5a4c6e1b639cf46bf6d51cb1a096a1336d2094a9e2ee4a1ce18310123fc734e9a0fb57b7683b2bb352af55fa419fec155d544b6000a39822d34c8191c39af43ac95f6f48bb0b99cedd0caa74b745010ec2e125f051f1dc2ffe639b12121fe01d98a3fb40d5dc43ebe90321e0be84d564c2de38bf0f46234f25de6e31a8952c5548caf68e8c54449fe4a177e9eb1c73d9ad81007d65c06411075bd4293f984104cb59de390bee5da42d2b974eab319445cc9a6e1c3a4c9e1020b58f93048eee9410dd79d1aefcd8bce161f4c9e8282059ceac7a62e8bc7ace726cc0f1d81ef20cf4c3923abf1b979d5d1f09adc0ef423c11e008f7f02d06b4a2b928b0ba38093df077a2c9d68808cffb3b5f8e0aaae7ea6a8b0886886e39333191d335a64d4288b3cfec58021d7dc6c29137151550c7756f2f9ac482994dc7cf3c26153ff9f7918340bf5d7 COUNT = 22 -K = 7eeaebff477c1569c22aa9ef5a9562b7 -C = d6d8da8d6041fb6d91f338920e709f9afb39210c287e35aae55f25b6e1ac6c76db17d970df6b401eba516e5263a0c2214e80e5da9101bef76cb21aaa0659fe4d45f97d9288a1ddd7cbd65a370e478703de33c35af1225b4f06645ab9784176a07b2f9be5590f63b215670b903ec5b454 -P = fb32af9c6b4d9acee5c7dd8d3de239fd974cacb8e0a8019c43c9a306f69c4bb67e9b332eb1eeb7b63ea7698aff4be7050c3440255083137dfe73f21ec2c027c8f9d123a931267df555490d16563332b76174a8ec37909b109c5172ffdb8cd53cc5d3f1f3b5 +K = 838d6404e87fba20a4b96a29bf2784e3 +C = 8ae4d114e60ec2a7caf176451231df20ae8b95e2e0775f6999706fd64f4e4ee7e8109b8b9fe18e571ecfe516f9085adbfdd23a954d236d6163bb8b327faa9ab6c1e303f088a7ed8c89410dc8a0cb39610afe5ca8c2bd5dbc238858393ba24dd3038a78809df0f5848679ffd7768a4ecbfbd84ad01fabf099fe4039ff446602acd7ce6cab2f489626c620ecf4a6c73dbda5b33eb0c1a352b2692fe8d46bfd09339c70fcfdfdf9c0460e19deacf8e39418bfe0929e7cbe908a56d24f393e6ce319eca67c46eb5bfc31e4cd1fbeeda36213c5ea14e59d2c005365f7349c6001f57577edffd0fd44e547a65a54d3867f788a57f585cb890e4f1262f20c683a3c8026ae342765d1fe0a14ef86980d33e7962145a4825b731b88da26a5bf597167c7098d5dfb36c4bf9dd54b25393f89b3246d6a8b92d7821d6728af984d232572180b6b1ca91e058ba48541e5cb8f1edbf476f6511ddba7f5756b3995d93f4f471dd0cba59e41192ccc1502e637d234ba39b939b526efef94ce2633445865c8d166cb2b1c26a4fe5f7f1724184bca919be4bd00f833146a336a783d32c471d993fd35263ec60bfad85282b6358a22099ae0e1f22a61a9a776f4a24805a20ae5858c3699e40cea41b728c3bb376d2cd347fd1d31f935da011a6939a7e2e72556345ea9dfeba431df4ac0ea22082e1179bd105f777ba71c12283b078ed3f4a8d8c8b27b241aebfa70615fd7 +FAIL COUNT = 23 -K = ea71d93a44385a2e1fefec3c2ee9e017 -C = 55d56cdc8ad8775423b63964575b442e7f6ba1a3e8935e834609b72c5b08a4a6fd8c51f80f544367d6caa0a9dbe9369d22abb1c1d24129b784c50434843ccae0911a309371223b285fc761b497f73c447432d4ec0f47adc1957b95ea5f9bba41e5342b434c125aa35df4d476e75e6710 -FAIL +K = cbac7d1528cc848f44400265eab1b36d +C = 57a3bf15a3203620717013d220e8bc58fc5d45ad6b398e971a51c1965e14ee4e5d6b28b1d2effd6a9c340be5c38d1a771a41fbe39b4e758a6763bd142be072f6139136884f3b4fc568f96ba3c6bdaf9dae6359c4abd3b5078d8e5900b2f64bd494a11e9b589f5d61075e6f5db7b170f699a6db71b55e75cad56b39969ac5da819c60b8fa76fac39e8471924e13f18fc03bac45ec3dbe994ca1f273db0321cea151d7dead85fa6a138b4aa5233e47238f7e4a6ff0b9481344f86ce95f5c3daa3763c3188fd2da5ebb550f03626e0737751b27ec8bb89593687d3c80bbd876ecf75872afc2dc640c4a80e1607a47047a31ea7342fdce8065afdd266b9782d31e614486786270d3fd8c67bf0601ea910e5cf64eb08f570e84a2acedd2a1cf580f828b4425674202f203f012ac644a0a6b4a98cce789a09bf68c4fad47dc7957189bafc8146b5664f6ccef157c369522d232ec60567a4c88bd4c0d7326f1e567c1409bc31b09a1118a5fd626796544ff6906fe17be9d564421a671dba04eb672d1f411b19abdd57c700acba2bc33e0d500c7cc914838704ef217ef79875b0ec14a35aa0928eec9fbad7b2f20de5bf1df2d198c95c007e70fe0e07ba30ebbd2a39fcb22c7c621e5107bf0014e3cba5d27a1b884f21ce33e36c15522809ba0790e02c3dcbe4304e075cd2c8c7716beac98c2cfbafb78c742537910ee463f589f6e2a0b25614a666e8675e8 +P = b78f89d435a709e80732d5f19c5408d2f25a7e3924cfd6347ba8a17fcd5fbdff6ad842c6b081c8279cf2885f1fc1b97dd7464bde94fa1b2b54eff506a8303e413ff8e30214287fd03c70f920b034394133f2f1d39c364bdefb2e1284556218428614af11c1e174711352a8e710227dee2a478173443fec1663b6ca0034cc41ad1ec9650aec41504e2982f2c0f8d83b3ddca80eb512aa51bdb70229ada6aec0fd2df47084838ad89f3025166c2c554f1a317180ee76ff64fece058ea6e95598bb4587002e453a031a953dc2a0248c0874f4bb3e44a97582da203930292db7335592348ec9c96c29996bf327a785f80afafc504e00e998eab10dea6e65a33dcb412bdc6916040172f221764e80f187cc8657d63825ecf126bb2f1c9ffec5c03a54d0f78e31bf82e0b391f241695b313b7216784c4e1523637fd6ccf98fd280c82a39e1139118c77c7d94dfa3d43ec0b9ce60ac0c9a0571c08ace0b5dd9e11261ee899dd01ff97d42a3f73719d1626bf1fc2fcdde874c8559a532965d5189035481849c0ede0471ace2744f51741b8daebe1a233cfee1981623080a09c1a13ebcf03aa9f547d6ab51992eb663597ecc1708496cf22e54f4e0bf07f3a040c69d5b59897879b505b5bb2f18f29632aae8836886f8a137c9ed06cf9fea57147921e5b076587c41559fb4ac8d7e55f5398f996905bdeb08024029fb85eff2df9b28eddb COUNT = 24 -K = 85616a1ba482d9f915d8f255c94d272f -C = e9f8e8b8d2f1afd70ed18636829b0fc306b026711d879515e2e73dbe4139770319c0009483e1cfa406322de6e1f76ca5d7f203c281229abb420a7d5825c431b3c11606833fc7e8cdc6f3d1e55197fb1098c2d134877f7682ca79f2991861dca20c61e8082bb5550a551739236db757fb -P = 323283e42b3a395d357cf1335f08da896ba1716bc4f42cc44f3b1e2243a6d1894d5228b7ba02879d9e953d07ce57496ae73ce5876d8504404e15de3241bf7ee7866f019f72954f572347489c9bf38811a24c2e930ada31263b282f4857e1328817e0b5b934 +K = 512b930b19ac2583ff79d9cf21880f51 +C = fe9cf5e0982f9b4093faa07905c8f56d286c00713f32c072221fdd8296f6f1a748fd9bb5fa0d4ba57970da0a8fca746d7fe800fcfceffe5da9feb48cc00d372badbbd221c57a488ae00ef1ee5697213a016bc742fb9e0e9572934e0639d0a040f631aa2a7a4fc5d7581354d6d0cd083e66a4b1ffebcda16e8fb8c54aa2a2618f596f6c0ec0f035cbd7a108740c8c5de1986b543abdc72329fdbc527b9f65259f1b5a8f13c2101b8ab0ad9401f0bf4901bdc25b49bbfd9a998ae452f4a2c1a2eff6a4302928d2fb0951f1cc6c3df183727dacce9106936df31e630ce8760f9bb90e2d41582689bc2952d18d51cf57069597a3875bfa61fb9fca64526975a839f8d02636de0895ede13714e4c089f5382afd1523457d8a5f0f3982611a00ed46c644b48ab2311b6066a44d8757680541f5b6b0881389847c2e9f83aa50fdce49fbf4c081e14862d99945a5ff470d294c14b03e7a1f81faed2c353a10892d9047b3dfa67570ade6ef0dcfc2b8b2da0042ea7a3c406867887293b35d1f6ec29180062b2d1754e5228e5f221d958bfb795104c4db69c3d0385b70b6ab87f1c7b8fd46d765811851081d82afa6f51fd710d74d8b6b891c7e44b010c181b1321533acfa01811f3abd9b8e607e929e35e9751057f595f5dd34455f3e3eff6ae825d2ac0f16ad9273d7553b814912073497c83ade796c66da14f1716e72eb7be8a12cb17bf4854b944880a215 +P = 6a94d207c5790281f3d0d51635f136c2afa461c05a2c548620037de540a902cd4f8ee1170da65a83634ed87296e3c75c85fb6ac0dd1e23467071d8d49f49a78ce66a1967c79b869dd58fc7fa04e5b261da1f14947dd4d723b22b64d3f56cba6e485774d86c109dfaa7fe8d5e595fc2fcafeb2d5651f71310c53ca22e15e1923e5139d3b039bc5154963914c83a035a81aacdffe714f78f7d4055273d782090b5b3afd88fdf0e93f49ecc4152143dfabc72bd9265c53966d2aeadef897b7a2d57e24bc01ad8b78d66ba9d80404fac3f3ced439700d6709ea35ffbe1e559a145fae9e827b49ecada734fd976c77511c7e7b37969269092528127cf20ce2aac94a0386a55b5e31442aea8ab29f168e5a375b0da9e44cfd8fba9dc94dca3583273418ea86ccd381f3712bcd6cc8641c4e8e5a5406641c69197f7f05a677663ec65fff3d8e6eac53108b176a28fe3bae8c4c51b0ce06b6e0fd200b4140bb0b7e2be9ad8aea281d3edacf171ad4c776fdbfe0633e0cef8363295daad48ca9b47ce4d7b2352919cc7f39d9ea954e19d002f1b88e9454f4f3b70732bc847f8f83976054560130c376977651035110e8ca856a114c3641e872297d9cf275a63fa00f3857031cf66c1b41c2af190919cd89aee0ad4074611b0c693368c755c1527ab048811deb1b545f150cef7c7521961d994d56c5bff6eda91721185477fe8854858934d COUNT = 25 -K = de74bc82ae2c25cb7682fc7221acbcf9 -C = 4463459d17e50816167d72ab434c5f984177e49da245a9ece6e66a65d4770eb42c5171fa05f48405d0c9b8c02469db80ba27374c936ba7c01d028d0145bd430302a7259154a6dacd6a1ef765442b5e99acea12a5b91c35e34a7918486340b7584a2aca65b137ac5292d28fd949850e7d -P = bad828a471a7600bf68948c3d8d193e607da60ad2d56d505580953422053ab8b62b7ebce92b1dc54e35ff561f69fc27ff80a61353deb6ad6305e0910e7299776461fc40c518bd825cf6d55e8f95eb0974ae1b168da3224772de1b64e046ab9cfaa3884c8ec +K = 4461ec7c158080bef70e7b14db358896 +C = afd905d884c826eb542a9b3875936847ca10a93f6d3911d327873fc502472a892eccac44f05509890d5da03e5cc49ab975c71fa5c575092f2ebc1673932907534063590634186a2b034c77e57f8e57894fe9ef483f3e192394dd4f6f8b66573f57f226b600810ae116a5177456b5cad74476acd564efafdb6a32cf9a13c2366598c0eec22e878ba193ee4d06ef65536578b5c13d9890047c51cdff98003fbbec7f6078897303f2966d58267e6c1e1a7f264ae1a50ed2b4db3f10db9bd99ba437b7b7526c892985a18aebf69cbee451a6a7a7cb374591ce8fe1f2f9e207c985da5d1d65896d9fd5e9a7ac21d3fad1cb87009c8237f9a567a183de50db14e199de2a73e513d5b03c3269aff7d3f40c4d6bf667ffd868f5e7018e54e6c96354f83966d5ba87bc3b5fa0bb8d96e40f7049ad009cef47e829de2313a777950dc97faf5cf3fdc318274cf2053a672a7a72b8e56f6abbd1302bb8c7e454d3c64c09b98d6c3f3f8610afc157d98de3f7bfab1acc45105e41e527cc5e6349745d99034a08b924433261c01b647f207f0c1d5c877ab94f3fef0dd658ff1ebe38cb0d810df4454f52fd60fd2b5fd13c76933b384863b0ff36cb5d57d354502a74ecf25131dad06772fa94bb5a3c3f0902282be9c4c92b08ec420f311610aa8b6a782254ffa39ff79544bc49d86952a31515fc19bcfc7a618d315f3eabcf603964804a5a9279dd044f5613a5a382 +P = be0afd01faa52ac2accdccc17a9c6159f09a5cb69fc415ede75d4af1cc0c5f0dbfebee9e7b6051b5c44c1b85b48c74953c998ef2b274471fabfcabddac9ae953e012c4159d5b4e262bf398eb2aa0a18afe569f9caa56bc2a1294953640a7c2a8eefcefb98a40766d93abdf05a6c5548c803a96c322cfe6a19f753be8ee044ef81eb968ce3a2dc88763178cdc0e85e3d0aa6a591be6e527d317bdcdf5e0471e384828332414bed9891e0a2de844f69ab36315c67306d3fce7dec59335cc15b9e8a583bbb6e2a1b1c6f636b929db5963807921b296dfbf5b26209239d413c03848a8aa308ad673b50cbc150b1788fcfc9a868b9f4784d64a8e6e803d10d0f6c11bdc4100d132d3e0e55bf94fe366f239244632056e01a80d4ef4ec0a0a48f203346a900dd066929cee014712c47d89de597babfeece7796eeabb8403226e3609ab1ba34976dc4a8a1eafe45b7149e613fc6ccaee5318df4dc0cc7f4033893a9fbb764c05ca3a0a04a5906e22b0ab5e8fcd581c63db45565634a4fe7ef1e31159dc31db65c3c914beda0f719b3115bc68d38cb5b416e72d3562f8d9488540f32c151cf87fa253d6941de90eb5127e5855e81fb8e898b723d3459e436f8334ea0c76afdfe9d6f63406e18ca75d628940b3cc27e1508dcc0ea4ce294edb003887136c9f9474f04afa6e5002fb6314ade6ba13f69ff463898373d69f189c3dc77d4090 COUNT = 26 -K = 34f2ba4e67bfd7e35b2b606d824c94e5 -C = 1a9e14f95df17bf3ce7795a465d684a78893275619c8e95dc02afc1e8fcdcdf220c78df71bdd1cdd899ab56eb69cb99975762b201d58c9ec15da65f7c4b365704f8a61c53f5efeaffbd97571462021400d76b5412793edd96f5dd0f0ed57ccab94cb4b26db195710e964c944fdfe0691 -P = 6a2aada60b4b9adf1f741a1c1b46555fdab3170b1c30b64445a3025065b54b3c3df587895b2aafdf18cbc33b5e7ed3ffc7a297e973fe1390c8f55e4871826ec4c5e8e875449cc59848a853310cd8a27fc3df03cdfa4c4778d8d08ac17c08c820a79f7ab322 +K = 63a90110f4498564d2bd747ba203919a +C = df99671d51d32025880e237cc3ec9efe144f11fdc0c0cfcfe0bf2185db72d60aa16a7e209d696ce1748609ae7292d6e4ca3eefa75ca6a7a780303a2c6f6d72797cdb90a9ba6234e439476465637d2c7ad741729089db955c19374e89ba23937d7979e9d9301134806ccfc9e68337431606123cc73634ee4c75ff8b797f34704abd4c0feba9f71d53867deee227f18ad9054f26dbe14f86a04072f2a3fc6d259924cb9dc4cc139f84514dd2c87b7d66d171799ee9b513d2fc83c4e0f9a1977a37ebf8ba936b06e4b8029cf25148b1a85fea8c935c5a825cb80d11ea8a8ae18b92bbefada8ecbb940756fa542948790de9267dfeb226502af3e2e530bb6a9bb805afa06ea1e1aca9b88ebd1557e3c9932155a8acd99e081d88cdaa74dd84341bce81b8ede6049b159d7f574b5cec3045c6d9eee0c79a9159e91f38a66ad4d0911fd2283c3c28e19741fe677350fab96d2a45fc1d5a6333006973f35fff36da9173375614f0fa9c4a8d697b3798e75f19eb480939be106f4041fd9d88818d33339bb1c2af19a9eeef2d3420cd322a2ad62be21f8b4ec177d228d8c4c7f872d978f87751d70f61f8a4accc958bc9374ef8780d8718f31d788fd47c6adfa2bc0b425bce3df60b3cbb53216397e7fdebf5f1af1a7d4057517abeb050fad67e1e75528a38bf7b05d6b29ec6f4f6689aa3906b8ebb79c779fe5f1213f44560dfc5a8ad79c6cce6533c301bd3 +FAIL COUNT = 27 -K = 40c5f607641f6bb6be83485b9fa2097d -C = 5e465c8a341f5a827a22d7d9ddc5f08d20002fb1333641862f8e4df8613d86faef4e8d3d5a1b00ec5c37729b05ed0ceeebf79fc7f9df2aa7d2bd39655bc4da538a1455ed6ea04745207f6d8caaafcf52cb764e3d0a1b391ef7c9788a6c17931e4e71bf30735f9e4883e43da8e03f0261 -FAIL +K = d764e1cc05c345c580cb718e28bcca6d +C = a81e51ac38a6b416eebcaa7a49752c5be2a87e6cf00ca1b70ad1cb5b96aeeb4b2161c0b1df371b3c97a112ed33f0b8f458b7d3e26b0da55d33778659527e3625f0aaaf4c9caa0ca8d1c4cdd8441c376bc03479eee2417dbc48fb93fd07cce529d799092b6fadbef27285ec78dbc6d54e70b2fbb17df55729c3423fe331db6ce2ed5d5cfefe21b672310ebfa30d2cc6c095acc13ba04c29dfddc26940d52633fc7bd44abb92ff695fb017eed02f3acc7fd07fb6082f9638a6e3691bc8ff7d0da93c2b620674512e34da9ed5f87f9a210a2d964c7b71d673991298b3cb7705c4341f012df0ded7abbb692b267f8d5c646cec3ec78f3f90ffc773243555b7c6b91c2fed965c942246f84e002e4cbeebc2ddd860b2e2c02be4491efbbf78c1f9e5dbb3d05fb7e497b37e53a59337560dbfa5879cf22e1f648bfe98534396bc6887d4d37b55a8c4825b6dd22a6ca13f242c72950ce9b0c2d5e81abd54f324b8872c0f6a247ee9fc3936514cc988da22f8eff4c23254758797e019997fb10709dc7bd4431cf9e08d35f72047be65e7ff6e76b7a4626c47661650fca49880ddee1fd5d43d1991652cdf920eefb1fc99baf6ddb5dd3ad740a6db9257f081129899ef3d4c2fd3c13d268338f361f8e306a5de079672390a51f87167d1da57e312824c71738ee7c14e7c6ccf0718d785466ea0a9b9ca0a9a7ba240fdf791d39d4a0e87576fec16f07b3d87acac +P = b33ede706df90121bc6dc9b6ff706d053b3b4744e706bd4beae399d45c9d9c7c9d1e584d01b3ae728926ccba33ccf7c8473a33987ff9780ff0f9ab5949c06955cf2a37d05db25f7b568dfbbdfdaa9bcc7090acd46bed1e366f50b9ec36640a40e75b9cade98bc61c259ef31418e69dfcd14def61e5dd716d3537fd2c523ced8a764fb959de4211237ea29098ece03b50ba009a0e7172be54eb4c75fdf44f016812b5b8f784cc24438a7a58b635517b4e468dd8691f6b07217057622e45e637adfdf82ff648746b6d6ac6716f8c7659588863c06f41fde1ccb94bbb3f6024657ad5b40605b963e4fdee02ff2419aa4358a9aaac60b140e0453eab7e1b88a5601f47f21b1eb68f6f5e4bbee9d55dd6a3a0535bcc83a92b8ff6c8064b8300999f4cd96e1d0d1386222ad65fcb3ea5e882aabb8a103fe432cc0b2512c5b0c69f3e3628426f98cebd5ba3d76a80d114a7db6a9d6decfbc9f891aa2fe3554ec30c571a251759506e7e76a8f38eb70ab0f5d52df40c4dc58c71987cd0edbe254f3a502463a7316dcf009eec0722bfd7abc0e3f02df86edfcd84016faa814987aa6f9e7560a6cc108b0307abd2521746ad8e08a3ab88913c46ea708447339c40997cc920544b12557ebf31e096c09754d978a5ff412172450f97b311713f938340b53187a6520e180139416c426e1ba1ba95a2ce92d4d1537cfedb344fe548b7a9f83429 COUNT = 28 -K = 7197aad58a8c6f18abdd290cf0e4ab4d -C = 2b45bae348885f13b32655e3b109c019968f4579ed920e548cccaf3c0d08d8f1d353eae0e38b46a6bd677c08944be828b8351f52e4a0dd2f0db0394ccf28c6b6e17779f70180e80ce509bf746e1843de3ad4925fbae5898cc32d49b2f80d28efdf99da36431917ecd42a7a435be61ce6 -P = 092cc031d78d359562df6c4efaf5235aae6b97cfc919460f5076f4af2351af8b1759a862a02c4329c2204052ea0820d72f0877533820f13ff0197691573a6b0cc0a4de7a6c00b1e1216974fd275119ec3e512ffa9f9d94accbbbd7f9f8b1b87a7c8eab136a +K = 1cc5fe3faff49fdb7f73ef812e3dc805 +C = 7da24906efeae3bec6c2b38165454e2cc9570dcfacfd53e1004414e8692deebfc56d67ab998fa8f50e0f9b3380d577f5c9cd2b751ca9be64931ec2e6f691814dc0358bfc9cde6b0784a0f6292fde12b99cded39b310904c8241dcc3f0df8145b587157e613ce4059d5d7c82d437d29046e09e1eaa8ec62f47220a463cd739d60aaf0787a251a4bdb4e6b9c04b252e2644eebe1842591a81b0e3424b71b63bec48bbd6b49e0c7e336ea041fbe3ace844f8642e5f9f99357944d7e69a47ff913c23fd7480634b02219d9bfbc0c2706abfba583d7f6bc581284d3a7ec1ee4c096a5d50420a94a12a8557697e1290de9eac8af60d1638f43881327ceb3c276f86e9ed72050cb5e6f5c3ce0e5840c1e07185409c41a1316fa5e0ed2c37fb15b49d527c4d90d675c7a8ae50d9ef6d7dfef30dd9e249b95b88d1a4782412daf8f640118d3cc4cd5da010f9d2e6c229ea77163b463d7c3acfa0fe7c0378e250a441ac701ba4a63ad0fb4a7169c2bfe2b2ef7f3cf08f3019d6215907ec08fcd07c7a2ba803b43a0c6db65c428c78f842cac291dcae8ef0e8573c2f44392d9d37845fcdd3bb96bf1aed4a7f0b0cd750c300a1d232d4c377911d8ac8f88e416bbe27ab9d71464942ea7415ae3bb1ffa364f22837f9f3d5ba4858d235864690e7bae2a17a53dea0f71bc148e530d2f0f530f13cb4400c21bd09cff3f39416e5c23c8a0c136ab2ad2b370999efd5b +P = 4fead20c65c5c1a14524bc277773988722ce22b26c444c46e8cd8c0430ccbe4e622d02528bb7b080fe2d1c417f38ddb3bf14b8c753b12f152dcc41ca2ecf37535af7b89c4fe39d8b55fc6c204634da00d737178fa2a1eba7948cdda1479c285d7f322193ea1f3108160d1b77000d9ce8d52e758bfd8ee51682d8fa0ef59a617b6bb83729a5f90049daa8c6db5cabdab21031bdbf3c20d4d8780196a1a053508abf5536744d8b9bde6f10a3dd023f8cb99593a7d1115c1eea8b171646b0e4f2ac2f7e715c9796aa0b7d439d44ff1dfd07dfae1366089acf66854f69337c293711965361b265bf7593abc34cd3ccb5e47785de2f3a73babf2f48bcecfa40a48b1c6d5a59d9d2eeaf20aa99a456a919cdd49af9d19932255bc129aed744cb85bc32316e55c354f40feec11e731b61e5b76e329d0f2c28c81f956bd8d75882f5c03250903ed5bd428a895c358e7f1ed092018df964c7f7efe3fd14a1b58515903ef8e1c9c9cf01ae99fa9dae3ba6bd846d307d6c0376f2351cea485bcf40dc20881147fa8ffc29a165a714c34040936637a2aa55f43fcab83f15776908c975ef469b2c6be7938d5ca740392d2eb885d47cdeee8fc6f0f6f33cb64eef561a809d9fe37899de26af7e2bf5e0dec64be89060a77617772a6e2e0edfe7a2d8066dca8397f40a307eb5fa1f8f27b5505270df306602438d6eee9a2f7c1403287f89c067ee COUNT = 29 -K = 7528690bd7d9546a061bdbb8a9fce04a -C = 1fe95e03cd7d98c384233335e073a05fc3b4ec911cd5aabf2d3ace1513e0aa2963a3f464a058b5be4d0714f6714d6302e6f3ed8edff82f912797cf8aaf8f08a99fd67835ca7aea69e161d73102cdd8bb0b242614dd97ca446bcb2857122b196c2d16de4a5d40d7f5ea1c25ad66a12918 -P = 61959245884747163bc5ad3e72bb8fcb0527df6d90151b8947d7583bef9ee5c36db44e916f615da846f9d6263abae986496330bc943933ff0b4e78ef5be7a85e10f692e19053a54b9019601717aa196eed8284d25def90154fbc5e5fed5875c967cfe4613a +K = d7b8c68bffb87dce81509bbb12b19ddd +C = 76553fb4dd2b90d694f9a2c1a49bde5843e6652a0f74ad41c883e82e89f5250def0a6c7a2a6314f4a7b43b1be3a33181ae4e08ff3f6327806c876e9ecf2a169eb0097e03e014e1fbac5e9989902f782453fd2d5166152da33dc52a55ef9ed73befba70e9b62035856f7b65a05803ee450c564831d8031089bee275968e185f6d1e5ed3648c62f41088b00c2b4d927a5af7b5226ded0ddbbfb871c91ba1b1facd72116d64bfb353138ca483697bbeb3ca4deb251283d4703c81d61a1455eec4accf7b7a7d2fb2f800218c5f6cf5baa87e7c8cecb56e4e3de6bfc56c16e2acdddb348b176be0a4622808ac8e5552d33bf21067f8674354b2e47623c16511939e695a8b8c7e869d4755bbbeab2a6066efe623c3e9e450a75b51c60ab16c4525244ab5665e69b659b8914cbc487961ef8d9048a0b80a88452e647a538c2160946c3f9aee95255d2af456c69f9214c6a8af6f75146a662d47c71b5225e74f98a6d6bda8afe9e049849a9db7987d47ce088397809917c6e59ee8f95088b631b0cb0329ed2cc7d7eeeb7decd76ff92590db3aecb602dd84051b881a4c736a67f59b89694d879aa16536199f0ed7ed7430508deb1607de435c3972d45f836547df7fd632b1db00529fbc217cf49d22422e0564cb3efb235665877445efa98b0799f677e71792541be267c17167bdf17e19cad07f92f1af2f37d099582e18ced8128ed71aa35b6c0ac730327c +P = 3f4177553489a3e2a39df31d8fd62815dee599b50a0caf96b36b41fb526050a6ea0cd2f7fb8f0d0c7455b5086e48e38f7630ce95647d495863230810fe76ad657f45002880d242f1d9a0ac91c6799e5e5fcffa662fe3f72e08865dd9607e7456e82cd7bd17fb629aeb0f4e235e67737ed8d48a379be8825255ff8ed390f20af8da1b0a55d56e511a0aefd095a53bb8cc33743c595ef42dce97fbe3f8fc68672897cdfa12e4bf9a8ea7c9dca95b47bbbddd64df9d5711d26f08fa937c5b6f5a9b388d1455dccc5b177bfa664c9633fca1400b98d85a30ded3406614e41c3a22784de4a65872649529bec1ae2a4aec249805c5ec265c33fa5e0559d4ce3392e2348f5a386c7ef15ec676bc4841881545aefd92e5e7385f1d04aed94bba18d72ea3137f34fc525d473262dc803c1dd508c3ee59751bd7adeb5dc84931d55730f00b4c92a8176b7144451852ef778a2efc3d08285cb044466eddd341a7e3e84afc1343f2c83449ecd431eab39fd7d3599675ebd34393a96a45f8a9e9c7f931deec3807d873e618a9c11c3770b15fac560209a569847e0272272d0c2e39952f2588d3b2f92ed9abd7642d27a1f5b31e5caeee96cfc20b532f7bf7adef48ab133f30817ac1eddb9dbe06405004d9f3d0d322eb3cdf1472fc9d7f6518a753a9b8d349c79211df5c4e7ff8e692bddb177837d48cfd2958e085ab8bc51de6568e4582912f COUNT = 30 -K = f1f249150ba663c806742c60960a967c -C = 5dcbe65ad4fc4e1a13394324c4c8e86c765806275a8128f8440b64ea1bb0428f064cceba3fdee3cf5e4cfd43fb7bcfd946edec7192b0c5444ddfb659dec7a6d9e8774bf5ed913be24a5f2ad78b5553cc971ebae0329c0c9930c05ddc5fadcbef620e5c7d91f14c3be987c51a99fa9d82 -P = 28b39f1c50840b141e0fb85aa46402291c5dc0fb47d64b107d5de4149ba1030e7600121dcab598f51e8e91a1a21cd6f3fb10afe0799c985d8d6772786a0ef6b4366e7a60a5b41be9ef384c8911ea4a00fbd634834d16004e3a2d8229d9c4c1af70919034d4 +K = 800005323fefd40b4214746218bbb039 +C = 46001f2e6a271e7d38bcbf263f0f66ec947a0e6baf7755b426ad776c83960e9520811a75ee69edf4f56ea13f9a2aa571af4f705f1aaa02fcbe4fd374d013386b02968830a28a22216a384707e916de442bf4fe95bbeb67b4bfb27008c743b97b03b9255241cce81a56b5697e7c178e2b7974a2195f1029c68237bbde028b9a5683165fe15f7fe5dc2edd044b3ae46e23c74721127857ac680be633b30c517a3abd0e2fc4364f5272d34723c5f1886ebb40d6375821d92fdf320f7449c4b136b42b2b1c2a6965c3ac32b3d2991e67d28c5da6a7c7e52a9086592658b72f46d13170e39c00ca8a6b8a25959113dfefdf74f9393b31ce6a2443a54c89e6d4a103ff2c2fe86c92e121cb9c3ab376b1abbd71364d28ae090f6262b0c9558bf74cfe6c4f41ecaad10ed202d0a9dba61f080c40243d50113775f9ae2c99e1da4887db8544d028c68b25a019fd894ddf1c97a2b2c750aa9918cad754eafb56ea25b3bb24f60a3bf42b7bd175e22d39ddd5d3e094ac891aa40e45cd02e900deb5fc944a9261a02b19af86d190b6ad211ca3ff434e234893ddc05bbb70ead64f01f07a96845edaa4b53db18fbf88bc9122ce31debf01705d8f4b00a8006b89cdbf2d9b6ea0f7b56253ed18bbb9e882a9abec42c82cb204deb48df16f87dc12e1ee612f8969938ab4ccc4063e41d2facdb2b8ca9d6409b6fbaa245334a547aeac4fbfe6d598e96c426b18f79611 +P = 8f7811a70d29fd00b82506b9110de3fe9dd414e2e887174211b00bb361899f505b423e2893f8c68ffd376e239eda470d556a0e112ef8fe0af750f1be6fde031cf1d4ab2fb17995f116e92b0c765fa56a6ae08d7830f6080f578779cf6db341fa08aabe74df825e4e5aff4717df32c607d095f334c4e45af4e86444fabe70e9182b18c46ccf8edbf637f2ba2670874dd2d81a931e3352298f3133d138c7552a424036afdc1318355f33c6a17ace07d519b84d0f27689b1b68fc8ccb31eee9fb161ab1b71f007be19045be7d9fcbb17bcf219bc0de6e6beea770308f8fa466ae5f9712c4c9263bb7aa11d7a63939f77ccdbfbe36998f39a6c5b95b68cb946538cf27d006b91d2df2a207fbe92801b6881456050e385610774004c9506115ce77e88ae65bbeb50bb7458d42e1999d72737ac117592d72bce590508d9a900f96da4c6082746ed90777d8d2f549d1b29fa76be73ae0ee91c464cbf3b26f4b5c73cb4e3efb3609192224e6a66aebc03efc91f03a94fe823abc0709c5bc147c3a92113cbd029416a4b8b4ee553ff0542c66f2f4f5f06a1d10cdec9ae7e76dc9cf0fe2165def7f402a8d5b3c6106f70bbab791073f15efef351eed29a4af016f8cb66e1e32059e0662b567a4f77036e0a5a0cd35e9ba4ef1266d979a994d623999fa72a348367a3296a9506ed990d6d4d40b088241eb4d6b275078765537c06417bd19db COUNT = 31 -K = b71302975e9377737e0550d7062e8b50 -C = 815a7ac7d50cde6ba0082ec02db8c68b782782ffbdd19a841e5fcf33cd4527030267415066a6a6896049f96f563743b32b15b68d98a2a3cce660907eaebf4483a926f8bbaff47f5e9a69e3492d0cefea7c14711c3dc03d6432a4c15ea4de063b104e7c41c165c4378c5db363efd1476a -P = 03ac3e9d3bd29357baf7aefb26d313eb283129918ec2fb8e39c680e3008e86bb45cf60523562f15b3c6fa2eb7a49a270ac1d50d0e240014a8c564d3db65bb6f9313f33b83535136d699dee5e96094e1bb7220875f18bde62f516bfb97a77ccb9c63e3bec20 +K = 392618d33d9f3a0c3d6028f54325deaa +C = 94335b79c9f00ba434bafeb0b325f33f9407553e29cfb7f409831c2477279b2f65637fff5f6278e805237e4a9296bf6b62087bb7feea52e6f606fa0fce02d63902a5931b64fcb4561c716a45ec2b045ce7d08234280b8aa9663e0dbe7157218d023b4cd8d7ed0dc3330d80f24a308ffedb4c77d9aff03185d4cb8ae1440054b0363d15b03ab5a78e31c91e3928a32c3b50d3eec12a11dd520f4b9e5ca7cf3e686272245da4f3f913493f82f8ae3194c2ba8ca8312676fe675ff328b3c203cd58ddd7a15831146092a44104888deb2550600b7f2374fbf77fee1711ca610292d5d8bc19751559933d2b2be6a4750d0ddbe68837e8e55ee007cff381e15fc6e9bf991c535b766825a2f1411dfe757cf9ffd472fee12badfcf663db2ed88616d8834750a252e62230d758b9cc0506d810ea7e1c61712d55929b5b7c7a978c49c9d7f00e5c57b8ecb465787edbe59f5da51181c83dd1323967b6d9069f32b39cc9c94e065dd526edec4a06a6c32ffdc746d3c2aff1be704ce7e006781c5b3d4dd8ebb434f20320bbcd35a98a5b15a168932faac60306291214270d963681aab732fdb180530445b2d3b025eeb65bd72405d13bbb71dd407c5c9c29a2ea9cacdeeb85be12dfae062446d12bd9567f96b710386d475cdb5797634c3cfe119460e3dc7c1766d37731ffd8d84d5a0f902f3c60c4909ee49f0d2d0b959def008aff8825fcd2b64663e01b44bb +P = 1c48e643d70b1cbb9f4ebc54416f4fe1d39a962f689db2202921da73fa6c88c1b06b457acb1c12f97f3c72ceea62254ef9d37c42b83c9b1142e010479d802194c1a20523b348d42dc5eee070c9400751f4f0df505f25b71680df3dff545f32b4337f060de23d56cae0ec4a302f15ac674fbfb0e7729078dc757f0a7c2adf6be0be2ee41b8f80e47291d513922bcf50ab7c40951eeee0b8c94f79536ebc782c5e2feb8fca62eff7d2d835f88017248d697450a17361788cef52cbd6519c90005e39d9decc44a0e859b96ab06cd4f19f5b8665c0469311fc100364248d7d0087d625b55c9006e319af4cc9fc741243acf5d1f9d9ade0af3f9bef79a9f7f7a920eecfd410e61dd943dcc26835df966594d51a213f609150076690e0f3397c183e7d7e6a50de4d5f5be8e6cc6804a8b11f24e6c0bbc57cb9d0636ecaa430e0af8119a1d6dfe042e481f36357467df0fe7482df2391fdc590709af13c46662da985ba0142e3283d646b16e6f825db3832cf8e30d05cf975bf6a8620383f5794b36e236852100a53002e616485c06059f76df399aadd378c7a5ce1c0dee02d44665791d72effd5d6874bc7ca3f341a49d0cf195607295117c1872c2e8b6841efe6fd88f6060b39b5d63ddb8770e2cb0be67cdac01a79a73b9d62d6adbfd48eba8ff1f4623a16bee8f39ce71f3f0feb4615c5236d21f4a491d1195c6a422361eafd5378 COUNT = 32 -K = 81b2131f4e37da2fdf72c410232b73f8 -C = cab2eab835364cc2fbfd1d4dd0e67937b3d716b85f5fd65e1ec096389031a3a2a1b799f8ed49ece32009e165ac829a5d98e706c776327ac3b0621a41d30ab2370e42e22b83c4234731dac05ef4f89273e15c9d3364950d062a118c0dcf96520d653a910a23ed8ddda970bb0f4c2e757c -P = 902202ef8aa6ac7d4f6a4d602a3e52517456cc1cbb2f8a9b180c57171c9511c3e7f043a7db95708d60608badcff9521a88aa64c6353ef0c53e0bf3f98efa7877f8bd5c1f23a1a24d0f9771b3fff54317ea14ccad2fa0ff040a37b61a414e5790b79eabf38a +K = c59cd712d0ffb9c57ccc11afd1e73117 +C = 3818808b504c7b280a7a384a1bfdaca8b8b2044808efb0478dfa73ba007fea9e57eff388e51852991e24efcc441c31d16478afa1645203a0d1e1f6109fdd425e63a72f6826a3d5c0b39e8c51d0ba21c23f05435a4a8769cb4ebbb5ce9feb1b02946d3950fa8cf29524b7f702f88395f551cc51d36531ad25e1ae910cb392ecc809134b84baf376df541e6d7a0f795e8b41099f29d9274e5f0cd655cfacd31772e5d138333ae89b3ef6cab0254c4460a838e524fd9285476bc0843b4e11758a2eff234f26c42d1b2994ef5efa8fad42e8e74971d23ea3440416078d84d59857f4321296eec16b2987729c3ed8aaee1752bac3ee6060d5ffc670dd6bd33a786b002cfc6bfe0021aba28202a30feb7f9828a15ac5bacb4082b97cdbb81995297956a54c9d5fe9f6e088a65b561b14983519d12ce8fbddaf3e71df0731c0919465264d6b999243d04af97ea3cac9bd96bf52b348405aab10fd430b3a60d74e0a8d6f5d352aa3d389a3262d7f8496d29b09993a3d88a9cf4801b10550d8b4ed83f639e5cb3aebf810c1eddf04fb2f5f2aef405e7aceac607a66d08ab18a2850625f5690f677d277f4a5dfcb2a927d4afdcfb1f020c6a19f2e0b64787949861ca0ff278a44e81d920f398f4b553e82a480cb343ee5570f5eb1d4e4c07b09de6f75b0422d731e105eb68a8f7a7c61a7b65bc02afb4afe96aba9034c96f44719706c1e532a51bc713e1cbf1a +P = 76ff5f4eab7ca27bd3cf4ab4dc85e43bb8396ae49e90a361a27ae8d421b952de172f4d502203e9de4000554fbd025f873dd55a9a1f373d7a46a691728710b1173b70f78a013e12d77b3bd08ad7d9813e23bc4544b8f9418776a2438129f4356f7ea4b3f0ad60b1f387854f6bbd53e76b75bb13d789033166076c5d3cbc0ac3f94863569b7a0621a5b9efaf4bdad9f87e02aaff5f33b63a0e46fcf6065e60289e179162bd04b81eb9b839ca60b6d193530945a9eb814d7413f2b82888dce67a9251289472ec98a28de571d470818a6654a35cffd31600a159bfe3ff919f978d1d337a970e502fe4a75481587b7f26a38b8726e6bbbb312d43a277170066ee85fc979632489e58a3f6337232996d8b785f18e552f6d2c1d8f79204a204387fbed67a9745982a2706eacc9f401bca1b5235adf80e74a67faf287fd53157e130e052b77270d985b42d86a68f19eb52053da7402459b2bad35688042f17580ab104debc2988867ed0a2c41bf9889beedaad15d9e716a9f7d8ce6ad5f02017f0f1317deb5acb93fbbd1aba684d3e138ec007266b8bc7d9c03684501087130d9f0ee483f2e4b9fd0e4641364d2c1aa7505293a3e5dde82493da55024aa87f58ba8c7e31ae877652d5a06aa419b2be715141164c80ca0539abc0402af1290a34c116eb4827e08bb67313331a42200602c913426ab8cfaee6154ef8b64666495499d1a30a COUNT = 33 -K = a688fc52afcf0bd348171e7f3a9e54fd -C = 230b4865d69331c051d4fed692c4996b7d4912e1c459c0985ca2b9a75e10683a6ae118943397c2a9835b0bc0bd0bae69f9f31e35a635b68482b988e3e5ce9cc26393fabdd7c29625fa2e6c5d3c90c9a318c7b4876872e75d3dec360cf0029c8220629135023873d0db158da0324f2a67 -FAIL +K = fd24bdfbad9d50e3b1c297e6898d7329 +C = 51e02488dbe69ef7c657e4ac46fe78db87eb15024589d3a285cf6e335e2939ef43a0d42f9a3e048ab1d99dacb36ceb8cd5be993c0b1128f3b53d1f4465b6ee124896776e8d3b08fdd393a18ec9b239901da753d5ab3cd9dfe547e39f390efe7cfe38d9e0a7a61e6ce7d4f3b443b47f5fd2e0147c545778393518e51cc1358f6f5088db473acaa11dde66749406693d07d9528731c440aa3e797b3066fa712e23703575ef9be06533de852532b84e54abeb117cd91dc2d3f8243669a5192a682cc1bec7733793ba04b9e90b868fe620ca65cf350fd8edacb671b248dd4e7e64ee2c76d5d6e4d581c6357d933d0a9afefaec7592ae054a8458b3d6ba066e0f10944924ed22556e7f3cb1e07a767557ee6578b0e0649d748c9b8bac639da80011c4ecc2e69d8893e1ba5e56483ec3df6b4f80e4fdd2f2d99cd88d7bb7bc1f073d15a7945d5874c997b6c8cceda0b2c03514994b2b76e4eeff3fa1bc8f92f09b1dbf2e570306ee1f23c00c4268fef244ddda713ddf2d7b7cf3500b7f1a2c2830876da73b2c0f359bbd937e780b0d777b21c522c276dc26d0a1b0ec9df93199c4873cecc309db852b66ff77d0fcea8514f0033fee604ee61e2e8e63e8df7ee432c425242c1ea159065e6d2ab1a6b405c1a467a3df448fd136e5c2e03369204bfa17a9e856d69a48745facee87b78171fe501d2e9ece0ab3240b571d019b31ffdae2b014be4c97effafb88 +P = 703cf1b48a30396b230d2e4a93199229097833f930099473ae62635819f0fd918b60784d7c77dfe37a54e70cddeaf290f2de359b665e3d1c2c4be82ab3713619e74c13fae562c334d977a6b4105a0af26f27df0cbb01f5eb9251a7bcab3313677fb1cbd74158d19995bbbf9569c52aca7e81c0e9f749e95633e16aed50ad07deb64d25789c7442fe2782febbd106fdf6217a64d59f42d1b124afc5804132305d234eadd7dd089f49f6d23b378df74e160b78fae91388a20b48a3fe887ec4171caf58d6f2c74b53d296e65746e5c4aef7e053bb50217ad6e6aa9ff0aabbc22c75a6b31c9be229440362e3d4b2591b4952a38a9298b3da1ff88cae02ed2c4227aea1ad8db3fa6260b888e69e944de302464297473e1b32a545701d64aa1fab648237ecfad6a6e1f46ee10a19f04e0033979997d6568cce1c2e2e03348a303369979ee822cefb6fb19f01fede1f1e9b50e0daff080108b5d577d7e2ecbb07a4a1ed16d9f50454272eaeea20fdba41020edca85f8c6ad0298714e951fa627e0f1c6448d5bd42a5056cc7d43c4e04dde79b3868d39d92fd213d6d7b8ba38eea99a6711840627f670dac2a16c24d9a46ee10d6a12979abc241519152dc33258c380cb5162205827a22d786cdc8e9eb99306507bb267fed9aa107f9b0f421301538b6e533f33f260ee0b37133ed79f0dc555a16ac204396f9d4c3cf5cecb299b8068b08 COUNT = 34 -K = 5e83ebbc08e2c3e2e7728ea571e09440 -C = f60b37cd13e9f35f7669988bc9b6cf641c3e09e7c65944dd7985e12ae62851bbd0a5a210ed8a0a4451cbc899bfe35ad025dc87ecc1dc2a28aebea76dfc84df734086092c928de2c44a035a0ddc063df5a796ea68726034050610583645418d0a9cea8549cda8e7a492bd23580a7bf3e1 -P = 1aa9286923dca01ba80d35e65f0e2af38d78f8b308c1494579f7faa8c47e73c0450136a18b564ec66b45e753bfd017abef89467eea4115591668ace2f7c8237d4325b8ea65c5971d440509d126c210f1441d394a30c8c18adf7dd8da2135cae1bd9f1e429e +K = 5bb82f7aab416b6710b84cab402fc925 +C = ab8ea9e9ef5880ceb6c34b144dee023c5d2d5658deee68faf96e770a603c217bb54240c1c9956be28d57dee20e6d70af7a3229f2947de6417da14244d4f3983eb55990a97273e78360fe165b69887401968f33ca82492cea397e0b31fa08f5228f12c00559c1c65917a1197ad5e1caa7b83e5dcecf57fa52d3a5f4ee901be6fed7273c7908da7cfec904be346fef09c9cd2c001d4bf1c6440db1a81dd66d489baf3a4270081d8faab841c9286924c981a0d92fc77d7a0fbcbe24926eae973d3e89ae75d881e892f98cdb951eb70d2b6e1daf7ad4ac3b0084efaee9fc8a163f9ffaa4c962742e6d486e83e6ef4abfb3a0a6d9edf523c0fcd8359097b941545a976c493c5bb50f09673f090ab1bd6c54717b2c8b2c6525b192f51cccc4635d023a9cc2359f7cd3963165117c6a4d143a428915fbde37830e9debb8addfb5c77ccacb32b12c50004c5afc67317f63dc1c284b70a50e298b643ad8d011faa2f0854a5b8bb98369dab27cecb2422a737da3a0cfe4c9fa92fef7f14091223ba536573c40cb567f5bcdcbba1cf8bf53b081b5b0ab5633aa43ff6b6628a8abd4421a74d94fa794ea502c8920f07f72bd2e8e9041cd027c41f3f007157593e6c9c06348b96c5fbb8e0729192db3fea713b022183dc26f38f82aed7f5bfc72b4e02a4b68f0042005b1ac8c7ef6822ce910d1e07fbcf0814543a7e3a00d014180f7a36baf66c22e008f35847b5a +FAIL COUNT = 35 -K = 18c95303743db6fe18284857c26708cb -C = ad846ec7e5b21ef85ed177217f5ef4020e0293ace216659b903b97d9e596f5f2d327fd336c25f89e646a257e3b85ceb5fea197ef1f769f9a8485030622cf4736f509ba959d787f321fb3a2c447fb5b1bd5fe0d87491387e72278d69ea0add12ccd38aae9e3b8466170fdb6b1762887dc +K = c881bf5f886a3e13eb7d5c4ab086d40e +C = 9c21cce7fc8234e51bb28dad9151b75d515f7a861b94d945b0015feb17a0085fa203f5ed4c75181576fc9073853092297bf71558eb97e9213137ffd968c8b9cbd6b1410f64b8fcef31662429bf7344595c8bf5630ffcef92a52934770d3b420dc1f6bc8b6ffe66bc679f505867c13f5dad3d7298319e7976ed07a9a36788e915a1884ad992a6d0f1f36d1d43cd34f31ab837a4bc959152dbe70fdba2872bba136d4380fdee826556bcbf64294ba4502129810e664f79da1685d7e610aa7ccb4d5ba21c6d7e96c593c97eaef2b03e2f8b31bf8ad0250ccba363673ac5c9a26ebf22ee0416ccce957d31c4dc11ffad3770b8500b9d635a0fc77c80f339d9406b2aa01d0db9cde003dc59e5e9e2fe0e9f990a2ff40ab4a831ac9a074abf34827af4bece7fe82d6f13a4b4b3e13acfa0be4b6461c679f82da89150b9a02a9303baeb4172d320ec7de058429c7eb232200e556347b55f80f1837d74393ec58219df6966e48411d67d7606fe973246f1aa36e38fededff47cf7db97fd349167f38659b27f55c2991171d4d71208f0f114b7dc68c26ff01314b58a36bb9ca355dcb0dc08cde21cfdb6723d8c9b5a02d6365e6aa1a299f7fcc5b82cf028f0d7698de454a9438fd9919ad9bbf96ae8d908740f475b6aa6d09ebe02d27d935ff76ebf789c30afb69c3349a6432ddf6c13b34c0eb94985f16a03cfeefeaa3f0f94b74e938f1e33d4282adfb3b14 FAIL COUNT = 36 -K = c0a5f5709ece90ac45af221a0c755191 -C = 7cdbee64de4b148fe84d7891822446825384dce3436697b3f2739d1500b217d37642cc0d6a6821b5df4a20f784840b3f90b8386e0540d4cf72259ffc6a81db7a1b1c838bf929a5efa15f2abac0955625652029915255d70ae6349ab0c8a92cd7670e104e5346dbabff181bc1b971109b -P = 98c86c3f3ae17bc69c46935d70e911a38796d25e1b6e84b1c417edfb02fce37bb0a61c394d0239f99690e23de9a358ce297d8b33740ecf17fdb02774a6ea1c7ad929fcdac86a422bd0323b6760e488e9edd829670d783c1ebafffdb3fd263df646d3838c8b +K = d5c1c99eb132a22cd722857e80a68337 +C = 1a86e398f4e298c72eb48634d67f2fe897cbda807ce9f7e52cfa843a44a8965ae70ec3f8555729afdf79fc8918166bd952669f8e1ab8dad93515af483f8e54928e3a14f39cc88d80adf8ff0b7ca6681fa63a1f6d10e917f2844acfecf769b647f3aa2ecb7936954598740382efdbabf5ea66de25013273907ea3151a1fdc345d5f07dfdbacf952f22a54d8e6530b727f415db4cc12446fddb32e35bbb69eafe028048eb5dc9dd48bc9cd1b3f9d00ec6ff4b9283e912cfdff793e3879cd5dbc3e167e841672ae158e7c0f14f10d7c355352a190c35db59503a868660e324fa13d5f459e62627252c26a4fb0a93017951a01d6718bd1c6206c5e8f69559a4c236bb5b4d80cf1424224702f3710bddba42a4595cade8569c806ca0775b7fb698c58cf0f126a76249e1cda023ac2a28911f05297e712ed6e62eb1d2ef9dd4382bed87f3b79ef9a1a8db4e42cea825d0029e3f3243703a508b759d596d0463bdb5724a6724dd0ccf3b030fee6fa9858312ada623134c97560fa61f67e526427772b7c4905d084aeadc9b50c07ad103cb4e5fc9989709b56ac49f91830376538a6d4011a537ae765a17e40cef749f459d6a56ebef235109f4b1bd6c1798a053009e1cc3784f4293cd4413d82d5dc82f7a166398814a48f34f45e49e72b9f53a62dbc62faa295bd488799f67f68d01583945eaec48986a93fd6b71c0afee69e779709e8d746f63b91da1151 +P = 6dcbccd8f773e8c839cf917326746a06443ec85b395b9120f2ef34bc43ec28225129e2cf5d35b401d9a80a9822a3b079c11b46092a600637a143a763d8197f109de645e889b1e99452d525af5d5c550d30762f880dec5d464bc4b48fe3011a56a9bab3ffdbd05f21356be59e2dc791ce5c3b661c3ee9247ebea309e74bebd5371172c305023a691e289a04159e6a51c97f35b1432b03d3ac57f3f31a4e615849cb1eda8fe65a6abc52f07a7c51f68d1308ac44c3899acee7c7bc5886281f5973c801ec7120430556e84aa22d2860f9a7220690820db7944dc6af0827c9a89fbf0497421a04a8b2ecc7de016c5f7e4b73ab2fdf7d13cd56c735c82f8dfadb349050215c1137febdee12389adafb309d061bdda58d903ec14eae180dda1ee2797f9014511435ba02a7e6709440b6ac9f21597cf8afa5e348d2a7d4ab97fe0e282a51f9e0d6a202629a7815e1c1319c0d01befd34af230e6526217f56ff41a41dc9f753b96bbd810915ae977a3047352aa3f98bfdf9374f9298e01c1928c81ee2c55542ddc0ed4e62b0bcf4f5c20897587e03d505ca752385647453d2b567fb58f72b4de86237c4a0774cc57ac33a049b8dd710206ba97c58ea9537e2badb3eddadca6b61cd998db2374d1de2fc9014473fe6a8baac3ad967d261208bfa1e2475280d50220f3cdc15efee2f26f442bfafa0769e26e7ddc17c8377beb1afd0461f27 COUNT = 37 -K = 65bdf66befae53a151f526eb4dd63ad2 -C = c462e4e2f0f3b09e0fe9c1a1d150ac2804ec8faa222dba90b34c45635d3f9580994e1279b4a8bf8005630eaf97ae65c4385cb1e77ee4b45f06848494b98a83b9eb7b8f6b518130a4aec95d6a5921777365336f329908bc8693c09f9abb4e8b270a566cb9c56f1abc455a2ed493903a2d -P = 1ab90d113f5299e8fda9dbacda0204f43a91902b654ad8d1f0f26ef878ec375174acd47d6a4332c8e2e6b0110034ae0181d3d9ebf83a84674c241e0b9b4ff07741c99d030e9fa7d9faebfeb49b3e718ada4d73bb57afe640145045ea7641bbe5aefde24773 +K = 8e98b9d4a2d0115a7f3f45c5fba8d196 +C = a3997a81e8d631e6eb38e31efda4c4ab3cf7e1ee3f06a735e9db32ceef728b7837d730d61b1f201927391db2779375737d2b90b83fa42196b783bcfcc35a2d9b5c15d9e1737981ab89ec4ac3a542e635d12fbcad5e162335934a00732185a5f9faaf3ddb59bbccb06a4a801add9ab9b75acb7ec2bf884443a32664c19eb244cf546aee734daa6f616c80ea077e17187dfbbd9fe0f273c6074de748cad5145f8ce0d217299bdfed3f97045452eb26334e7391c8477bd5d0a35730ee4eaf97650541c1a49dd4fb27402f3c77942e5ef50c6b043b324e3c818815525f7176bf6e51c6e8422a1aa87d4cbda07fa5ca4d8382de4e52918c1a58b50d92850dccecd5226e5463d26b869815ecca93a0e913e3a2a755860a49661aca4fe8fecc5b2214542ce751cc9b1c374fb20487f918f6eabf9f83c61775a9d40d674dab90452d2cc94f356950e593d425554c4d0e4c586b63a9f6183d56f84e65cd9a4c01a3fb689ea5f0b4578746052a373f4ac0af2cbf6ed2f64b4c1a4ddf7e64ea7740bd0f6a00a093b2f8a543b3d64519e1d2b256e763af5f2fc70f8118c214bc0bcfeaf7a46cad50c80f81874e3e7fd4187eeebe37cb8bd97e6825cfed931f4d04a7bbf03101122cff3f4472c7d7e7427a5b00cf0b21be36613954cc76c0f1cb8c96e07e2b49ef5e5d498f08695823691dd13d02e724dcc41bb16301bf727ce4490b62587fcb39b0598f53aeaf2b +P = c7917ee2ca500a45a49aaee0ec92dd9c33730c00ad0da53994ef7a71890c704bf0404dceb3aee62cbeef80fbe3ed4e72c5f01f5ee169be51645e6525525717ca7f9e9ce73265cb20f0774d0fd90a626570cdcdb75794db1f31034fa5d3ff3b62a10237a1b0129d57569d73d4ba5c016922a510dd15f5c11d21e5284a4157ffee19f38c8832e10a64f438c5d5ac8f92372e8d81cce0cf21a9602119036c48fb5cb4ed2d3a2b44ddd1cbf134891f83ed8b29cab9e22eda16e50639bc1e6c821fa26d0b4c8e15ee6bb722a5de8783d5837876fcb707b20d8eb5ba455ae2a879bd0bbbaea24d013b3a6baadefc9deea08037d51b37e196bdcc66e823e4189b7a06585d81b06de571fa7d7aed335d675c5cfebf6ec2f783968281be0a31b76260dc6b4a7235118546dcba6fde5b83b6f77fe7315b115fc207cb7cdec5cca4b5aaaa90a7ebbfac457ffb3f55a9b1a1e119bacaf887f5deba5882cff8f794a260c615816e014e71854c40bc647a2dd2a523e62d941b6ecb25224bcd593e3ce3cd01e42e9ae617634dead1f9afa8ced93a3dc75d18697da4e0aade7ba85a30cb537658a067227dca4ec3d02ddb379594b1e5b10022aa4144dfeadca992a1e4487bff6be9e96d8546f8c276ecda469b250246d952c8dc96b0854eee6081a75b2887d53ef14ddef1e1f9baeca8afc46943da597c6835132d24255e0cf12bd491311c870789 COUNT = 38 -K = c21c3a02e94244c458e1b6cfb42b7e20 -C = 18d829bd8e922657dd77d9068a26268f7f9980feae0b3078d42ff0e0a1a6427b920fe1e41913a1ac4b1751045aa70883f834b3afb238d592b0d44fdb4b3c56e5aabcdd33a4eac880e33c51d244507e72185f71b9c74e5e736353045b1cb82a2b2136d50d191cfb50d5772be2fc60cd6d -P = 55bb20292f29973cf1b585ddda3e4d7af83f56f562d32a3b05a3d47c050fa9931bcf281e28544ea9b6828e2e9952537af763722d5213354baf8a550e826f4f02c5641d27d4a832c238820be6791f93dbf44aaff8502108101b3bdeba31bab4cba9c27efeee +K = 3c183fdc1b5babc82e675a851efa5e05 +C = 57fabb7378e1907febaec02bbe5d6c0fb525141f0c76eeb80a3d993466592c79ad8f51e8a968d5c0a03a9cb84686bd3cd3c5828f968e25bad4b564377ba1f0b41578589a2a0b47f52a26219edf9a650bdf067da8f857f3db0184a02b15aa5faf39ac116ab453db4784d50c540e0c5fafc85766928bde0e9ee58530fcdc84c9807dfd5067b6a3ea8846c083d4d727761ffe19ae50ad8d504ee44e61104652057a2bf869061ca5a34e6bb58dcaaf33afa4c5e3156369591881e88da123bb8e2263ceee0196678547c21dbaa991e05d13fd1ea5d4801d13e90cc31a99d83a240a4c82172c86893f1246bdc943c338cbd6ea025700b640fc3d476f048a9d3943ccbf66d7c54f9c18627ed7d05d9c0cb95dba8962331c89dbf4a492e12c8c9bdc985dd0f3f965a86c06af42b6d0e4b33dbabb121a1d6125270f206802ebd28a246130d9c6c96e44ef79ad629d5ef8fefe9d43f602db8639461d83676a2ffe63c507509e267545278f05fe410861bbc65637c3d2d4df448e0c4f956d8189b161f52398af128d7ded4c13bce27747a70a0a9b6cba197eadf54cc6d4f2cf44a2e41e7e4e3540899f726df68cb76a3a3f0f5d9f2c2774802335149c87ce8c5533366d8eafcd4a592cb11403d22bb9a470054d03e1e6ccea4e7af77f0c87846c142f8c7986a74986cb5c2f98655346ae3a897324957db0bbbcffbe0244f8a1d985e3dfb59e568e3d12911f2f5d +P = 55c6629e5df86c9f3e239c41db119a9679c00dd00ba53d826e9d3ecec115b00e2bfc0b61760d6d042270876251e4172d66d5b219c2579c1b33ca22b0cf845ef442ba9ae4835ad7daf0260263f40fdcfbeefa92d0a3aaa9f5eea0b1d5dd80c046da442294fc755a9b45f242cff025041a55cea52e4c10bc2827384711e711f2b96e925c376d1ce66c6af7bf6b7fd92c7b39e7bf6c22fd426f0c733eaaaaf34b0cb257db8b71a0b866177662f366274a856e3d41f752d166839b8d699da8533491994544887cfa6ab023dbc639e10279b274e98460e06d5e9adba49d8fd8b72f97aea4a163a02fd173eb957f6454dc604279e18f50f20f8ee9a2bec8780c98cefc7a824b985da4e98c2993bf87ef47fbd998018c55a87cac044c4ee17b721e74ab02c2180945c451767528940550dd198d327a71b1f88036eb4dfe39f87361b39e0c046c0713813670e2b83a3956cf9700fc2bdb3a60ef9f8609385be92c1ed73913644528f0d057d51f7e82fd4b06aa21cb8bf78e9d89e4a19da01d54ba0c48c6b5c8fc67a793b3cfd1d6762a8a78b74a47ea27bc8ed810c0c8b1aad5045c672ff95227b5e6c74e851eea163f6d38e18e15970623fb1eb6f5b14e00526b4315b2d20a8972c75f1ca2041ab776dbadd79bc39501100219ba2dc56ec13d5d1ca7bff56e6a336c1d44038e341a43d62c7f19a166a14d13b76e0838c332b53f83013d COUNT = 39 -K = 4d0200df5f12112bdefa39ec45e84764 -C = 10c2324ada21b757a1a3790c780fb9addbf3fc3f1e2f915271eae545eb4850ca63f1be7fecd4974410848ff451d280ad022a1cd3b68b4c006697a77cb6ea1597c8102da41dad5646fe29d4c61984e32debc9725c3ed67c44cfb52bce254dcebb712a0a5a0a8cbd9632e2da714ce56af6 -P = eb32d954e28ef410c927b78e6c94b3b1d1ef87c5f20b3a84984f5b0bd4bca274b08e93392f9541c39182baed8c38b73a6076ecaf2e3f74f4639bd0ef9d631454a536359b78d8ec1950754e8ca3412357d7aa324d92a5171db8719a2997069ad50f68558bd0 +K = c7488d5d4ea5aacfc77cb6b1ca6a4434 +C = 6c3334483e35d28b2700d33706e3478ccadf07df956ee7f8f50d3f0f83e43a34e5d97c9db9c83a64015ab25aa085cf72d3b6de84aecc2a0bb5213f7b24600c7aae6acd073f145848171964ea4bed47db6bc702f1565259b3d89d8507969542ce79fedbc283627d02e3d81b1e18c748a3c0cf2d938d193614930b7c06c6c8461756af107503ebdc4f29f61cd04c09bcd51c31360a896f6337e6f57a5515d9db84600319b6bb57a3c599c563e7a0b8784fc69d3996eed99e7ae33be69f3e9b78656c5f6bfbf15b6b4a520363b71520b6fa3717d7ca30f3fa8e1508f88a2147f7a0bf444d1dc9cfad7c56d4e161203dd83d6201e7c23c8d836d75b801ed1b1d3dc7c03aabe95311150c067e97731882ba7957c2338bbb69ea2a183ffa6505277fed9763fad886a611b624ba2e8688584737b729625d7530595d97ae73e6c0d87d6a5c72dcca594640d24960f8abc2befe82b79555f80c99fcb7852e749c999c077387b4f2060905effcb5aab9b5dda839d691bd3ac5350e86f843617ebed0806609a9532095795ce294efb24d8475cca903069afbe150297d95efaf3a4c4712812d596db13c4cf30a32745af1461a6b0597d764fa4cd8cbf9c6886fceca0b66274d5fec58e72ab9775bd13747e3c7289d4c7bfa5730c072533a2e7fd4fc26f79fcc917745754c9fdabc4fc17f6d92a38f9162bb0ad76ea4c3cff37cf80b7c85ae94edb6ae60d7fe9ba1 +P = 0a513b6f78c2ca3ad839d9da44e5e3e0b126b155a591962226a4cc87996b35d4ce02dcdcb3deee7717f848c7c39b656c306b770cd55b08656c5a3aca787b347544a1eef4e7c759825b1c99962d7bffe16e59fb288069c249a61ed18a68ea9ce32b1530a73db9d6358a0b1adf3b2752b9375ccda25039040f6859ca7e02c519046fad716975b5a058e671e4ffd8870eca1036951f47a21002ca1f0c9d5104d74699f52a9d613a38b271cc481fbae5baaf2850f2b026ecd1f67e284cabaa2ed5b40e080bfb8f9ee3dabf23d8cbc708f3443054e488eae68d446340235e664bcd7da462a47ba700796a1a2149765e27f2b92ae20bd55b2e8c12a0dc6013573265663620483e0909675972bc2878b464960ee4731fad381dd77915d2bee567a59a3a202f29e16291fd895a5e9f3adb1e02a584a7d3ea06c31138a738dac602adbbc6e45169c062c384352728eacb364007d98657ba2f55352bb7f7a39388fd12b681cee5a1e79d737f038d538cdb7070c2a2b91abb79d489d363bfbad08fd4988852b19b314c8e645555b60ce224948178cc94ebea0172621e0b0fd57b81ef9330402a7bb1e91f18ee8445abf351d25521ff8a2c3563e0f9e743774466a82eec95e9ccf1b2e106ae3c9a4177e18610a2c31f5c9e5af5874b805c6768257146a1dea2e772ee084e34c32c03f4a9bc365d85ab4c117935924caeb3eb50e2b255818894 COUNT = 40 -K = 3e74594d16fe1bb8c3bf1247aa595bcc -C = 28849962c396bc09e1e60560fd5a4bfd983be88ac7cef91270beb4ac13b540c2eff3dc6772f09cc8f7016100a0a87aecfd4cf6a721d5a584a91107836ae862b274816ca704c3346517927e1c4a07f4f539e6de1ac7274fa56d810f9633fd405f67ec838bd1443fefc84f2e2e09343c1a -P = 884f6749ee7e85ac90fa760cad2fc8e056c4f418c1196a788485b929598a179652a9fc11f86e118e57616d0a6d6c0c7f85887f00d967ad6e520f5075c8fdeb817cf7e6f331f218d55c4e902fe2ca9edcb4078dfb69669b62fead25d1fab88273fd7c81fc09 +K = c2dbc87113d2b6aa33245ce0b46dafb8 +C = e4119abb8409e6ad59966d84b27ad61e522f5def41d3cfaf15246b768b56df44f3e5d0770864fa3e68bb7b39f4d92d00c6f5662f2d48a158a0df9d5c37c2a6f1da7f5465c14e38cdff2ff5d7826fe2ac1978fc863a57c0714897f62da7574ebc9a0cfd1e52a7dc38be74424f3fdf7c2bc376919d76f1b6a6d29eb145a60619582cab534f8870214c2d50c575a6e64e715faca79e90f56667a8b652a5b2ccbaf497bcb354d0fc3f0d36bdcb4814145b788c6d8a17eba08904befb85078eb9de1aa2180a72984de3acc4b77c0c4e4c1edff34d9f42fc10ad60d7c6ea0669e32de8a3efdb0e8dced1d363e18f73024c4b7bf5e737568ef5028973e205c51172d6f2121a5cdf6c4712a0bb648b9319519387f94476c9bc10c72e1c34dd1690c0de1ca65696bd40d512e02e7ce154d6a71d65d6e316748eb1fbc6b810afa27a56950ccc411da4973de32c176de1335062022a059fa40da05e9827ec34f2c67ccad3784decab7c07358ee977b2de01d0685966db4a76b51efbae6cac3f6d1bbb12a49f6c08856ad3e020bb637fbb940307d73b8abdd9a01061c9b4f73fb0fce5096a02b932392e397cfd6dca3bce2c159cccf9a96e8d103f2d3ad17816fc75d6073a6ea5c1c63f19f991b56ce3eb4e4c34155b12022f655d15c7f140de88a4ec9eb7d0683e38160db595bc05fad3e920403a46621c1c558152a95b74366e73696a5df05282aa44802ea96a +P = 9a15700d709ef44eed4f44d090c1f20fffcd7fa6233e2f0930b6ea2fdc91bd1b44a50bf1c62b317417ec2fe795109c1a23314ea6482c570f6d4769e0d2b71f4dfc0ddc0a42276f2446003e7e22ce2ecfea0b38cc6cbf601cf8a309a4cd3f63afe2f53b72f133fea47c4228387df64c6dac937316e4d6ce0d4a65c0dc21f620ca804fb8a35e693eb949618c858efe6e00a6e6cad4443a956023a92296711471ad29073c2f868765e5c1ba1843c35584a32a08f3903ba298f2a93695369ff0cc870ad374fbf9ad0ffbcc2bcaf7ad44a194cc866e68700c04462ce196e93a9355216248b90034d48cf69d278689db9b2992a36ffd1c7602e4dedad14e3f468ad205233b2a88c4b26a71b16be2f9d70761d9db1fed2f7cc7aede7cbe8f10540142653b5586b637b84f9245b4a01796652c46f5ff0d1a1397b9129a6edbfe5b25f1515aacf78cd81f6e7983b5f9accb8430e60569d233c3af3ff20e5f519bc160d7ce5240456ce4de836a88283852e648699a1b5cd674cabe67f30451bab58d8390fe3df5e7acc688ab48b200eaa0f50debcb7a09ab7535f926fecef61714859e4e568fa9edf253193f1982521fc3289b88a18936c8ddc14653bd296084cfdab816b3c45f323a313d3054901522bcfb3d5eba1c843d14ed28a8719224c7722ec539ac08561dac6b1f042403680b9c2be5fc36477eae026cd36af690098e7c4b4c45c5 COUNT = 41 -K = b459da977d9a498c39b04c3648c45076 -C = 3975ccadbfa0fcbe26ff096776b1e9ec5bb7cb65e836522c3a78ce7276ff83caf5a6292e9f8cbd7ab113d8d4f0bc1f57e9ebb41c9fd02fdb33f19b8d3e105acb92a7f4fa2ad03bc74737d5206ea7132b0b98655b1cf9c6221e19b0c0bcc6b6bc3387f0519bfe666ec3622853235ad41b -P = a730b35cb9c188a03daedec167ec774b0323dd7e5c6f615dbd4803af2040109773b0a101d7868632af4fa904ee40c2db2a89536a9951d64172dd47c09f1667baafcf47fdaf15fb31329b7f0218f8df14bac92de1b49c337261c75fe8bb634fbaa56d17e762 +K = 8403c0ae24c4caa30579634d2f4fd8f4 +C = eca0448c53b415cd5a175756e3716a207c0859a5927e4d043e9fd48c528ca1cde70de967d7588d194a0eb98af13b3366116e2cef5842e2282ef6c16c24eacce7faef27742e1ca32a9abb331a94ebffce8a5f9b9130e30ec66a67b54719ed7e2755896d2570aba3238ddced19da0cb5847d488953f0a2cfa8c8bb125d0d8baa0975a4b092669607b110d11f01411947c8910dafd4debee35f5d8419032abc39f7e22aa1351e966bffecc9fe94696fa18ad65fe7e554889f413980bf41d097cb7d38963277ad64bacecc0f7559c4d9f6f35a53cde9a20aefdcfda4bdd6cb166d5f0d57c49ff2595d80e395dc0c154445e52562aa98ae72a66bbeba7e3a08efbba07ebacd0ff0f741179935a15e73c33a3fb1daa7b1323dd5d4d9dd61d40495a7dca3a2435e8d48bf4466675b26d51136838eb7e25d5a8a6b8d5af52a606dda061b480c719d21eb11af111d364e278beb2f760c61a55d4c925300fae1e415395cfcf02717858c27d17cd5e86c48fd22a2319f288502dc60d25af7f26b983af2ec8ba6210da5b48ccc8b4e863789ae4fa480023a5d3a6794e609f8d88e8b7e3a4b00eae54e25e959ff08a29f2d8fe384566665d489a5a9bc76766400840265500dfaf16a78e30c5cffb0ce61ffdbf5842fe5bcf42024e2abce9770f5d1371b18f7f9ab46fcfc67424a23684b62b2c29fa7c05acfaa1e06855ab551b2be08e6ac42332cefcb83e079c741 +P = 7b346d131ac9a69ae6103e63fde4a8b9e9feb4674a8126c3b2bbd2574872306953a6e7ba02194b1ee4dd630b40ccb62785e3d1e1d7af92b8612fee58689b0e2d197c6b4a2684445df58d2016c1cc46e348f00215a9559f8d416b97ad8605a2dc2a865d0bc2f1535308f6cae5d9bde30802c68c4eac0cb7a56151b087c395d9d039de3f7e7a1521b679d491f40408963ac2abb56a9638ad10619a5cf21bf3da108a6befe4fb9ec9f77d25b6b28391f275346838d89a2c48dab87051709ace1ad7d5e577dff62fc8712f84eb41c86367afc46e90fba29da4dc7eff9f076a6ad331b4b9261050e05bfb5dc1c2f60929f7e089f1aaabf7d7583c564228908408b3a74e4fe4056053d70513db1f10a9b2ce2a599e72e6d438ecdcea94d873fc2ed3417cc6c8b962d1e05ef20408f170af049ee4ce741f83c04ad7d17e68ef167de544fb471303ed130c51c7bb90575dee7fd72784158ec20b740fb459f15ed179f0a38a5760b039896a3ffa3904942689413a9276db65ce8fc427be11096d809b2659f019c1d6ba907f86b353c8b34420ecfefc163a21c10790aad7f67109254a22d2daec605b94b9a5d84bd942610838ae98302ec3ee2e7bb52cf20a5466ef6377eaf104e6e9c0e135111eb5cf9b47e49b659d648b3a10a46ff6d922406995242f2b22345a9c366b71738bc3d87a4fc9d2681179e5ce7bb4fe7cb42bfb088bf0ba50 COUNT = 42 -K = 3ad69068660630760aff390acc3a05c5 -C = a569473fc80fe9a05ec9bb0da046e24d39256d7d170be04fb9e2adc8f5c8be3bcbfc21c4a72422650c3ff66b51d00c7eab4a87a2f6cae935fefecdab572e9c4800ba028f96074bbbe1482e19bdaa30c1103b81a9f44f882b5a4e351948d7444164329601ee70f6347de0aae2885c70e5 -P = c14d56f5318e0bd3cb37cd4900daba9108983a87715fa98985adbdb68ed7827199f8f4261b704a171c0069e2a4c652ed7485728767055946d7757e71443e630643ac52032d40a256c6192dcf95887cd04bce45c51498c28ab63490744edee30f5ba4ef72f1 +K = 2e211fff349879d5fd496010f1009739 +C = 01632c4a1f99b45caa087006bca01d36b9c8c441634d4d32d75fe3fb8f15e9b8043ed539a604e4db9765f837bdaf8f38fafff89017ba39a88e01b43ba72698b6535445f3f2234511b4965c9fc130b60dfde25d1dcba16893c38b40bbe4bf2973e661c5853cf9c5c2da14b98829e400f8d58bdfcb674ca4be980ab841698b8e7f1d57aaa37979f0ff92501a902362a128467d8af2b61b04287ec682f45d48741133ca5644772ab41232d274420ddcb5aa7845010c0833b5d37768b15bbda2a51d318ff7f74f7c81e203c94c35fcef3ed3e26cf05d6b6b2bd045f26cad1c19c5edc5189b4f2e6183c95e1d959ede7fbf41a85db5e20f451c82a56c396690c843e3c6ddc22a95c0b1d70da0cbfe3b5a6571cb76a8d69c4b23d5bf93da7ffb82844f7322c1f890369693678bd3ca71bbac41b8fd1ab6c19770f546f82d42dd917395901fa16ad712ed8bbd036531c5ffbc99386289834414a4dc715ffb72cc92324d88241ebb678ec473086f4032d03c59a704a233806341934dfc1d9efdd4732844127616dd67a0173eff8f26d6e80dea31501c326e85b90b45e48897e71cdb16240619e5f12ddbb0c1556fa79a7b1e0cdcd19baf36b0cdff8e0d1a823a186da7c3e524d9abeb3f3cf54e25cf02a862ed30ce3dd29edef5dc939145c532cba73089d33588d155c0fe77753ed974ab2fb8d247d5fbf2d200fc9a44a029c6f13c4cf0167c01b73634a6cc +P = 67b3a092bf4bf0f9aabff72719905d3b7b4a774d875f0d79a069d9d55a8a3ec623c50caacd551efce1c49e33c27b7034829f1f0955be5fdb664033eca415c57358ec20c023b67b9348792cc8361fa0b9adef72f72030142affd603e6a5695301461a7c98fda74e65688ae923328d8e0fc96407b30c96fb83ff0608a6dec188d5d7e6e50520a34a059e412d9f655063d61ae49f8014766ce056e6c12852cda88539f59ffc018d537698d186dc389dc123f62b7259bc1dd75270c13b250f64b7801107c14a3d3861e3e0e435a55c4a4e159d328cf187fb4c08e6c91ab252a86d7215080bac8b67dbd9143c5ffd303aadde918ac0968ea838152e470ec7f53e9aba6411c6a4de600ede91baea89dc5c5920a41ded8c1015a8a6f7dec3bb6abfb9da3f6e4844d8e13aa5532bba59e69d53df2b70dacb25e8afbf518b7d95d8ea285e3c9e12c900638289d6b9ae51123e077454a27b077f715f70bc531358410ad6a9fd2314453628802c23dad0d6c4c564a998a5c4e9b7370214dc957fa69b9c3044208b34807b43c8d37b5715e1eab521bbd7b464bb1f8d196d3a206b4a0f0a3e8b5b7363b344443ee4a58c6ec66ae7f7145fd560985b06926e46a7468acb6bcf04ac6bd1ccf2ff27bd36ed9ea24dce007e2cf794cb55fa640cf96313bb20d551e73a6d26b952b379dcfd5a8bb78f4427634bfcd369b65b169840b3b95834222b9c COUNT = 43 -K = 801f541dfc85cd50b01aaf38c4565555 -C = 81b99294fa34bf1271420296bde83b5747f082f385e750fd76ec1dfa3484ad38dbca1190f8389f799a48e45ebe304e68937dcfd7c01f9efe81397ee291f7f15aa6faa2a234fc51fe0c357929623b24b08946fd706923bbb531faee5996362706491f5cb52f7a0524b03fc4893d2e5e0e +K = 91c1cf5c2ab4ca35ee79c4b71fa64c9b +C = e28ca60e64f61748a7433fadb54e07d694e12984adbf5a5b9503e1eef288d53890ded88ead63e0d5e58e688ed1d30b897a4ee3b4d22da4b2a02cb460df6b706deee460290ae225ecda6cf4725dc05826dabb51b8ff9153ad9a0283e875af02aa276aa6a519f034f514624d8bc5591d7e3acc27c440b72b81bbd7d84ffd39364fd884575823c23efa321652ff1d5d02ce8368a6dbf2a67c79a78b5afd9ee931cc3e09dda8986126b1a3f29474e3a5546f711cc079c71084f2fdd95711d2c771360c60b64799f1c66d670b888ea2b0b381914c594a17053deca2c9c09d1b3a783b053a7951ece4493a71321bca0b5fdbefa6212e8892f0418c18f8c7b792df4d61978284e04cca35b54a50c4a090de3ab31dd7332d098032191235a7a13047cfe0f6e637d66fc4f43105b57a3e632b5576a3d540640e497afa09c16ee4fdf7ca2854772fd5ed2dca02e746099203190d6b1f8e0007ae8d03aa2fcaeadfe3c844141c39eec0811e00058f6d989306ec218c5826439be0b0ad3442f4c569c5a8bfd797dbf01b695e3d30263e336d8ad026faef02d3e75fd5e31c932a7fc46af31096f4eec097759252c5e8688a23401a2a067df4bb63faaa8a2e2456425be945c8609fa8c588a612a2f5e8f7b9d54b2368c6092559826167d883dd73da7fc1eedffdb72d074758ed0a608697741cb4ca702c17bf185418c721fe74988dbb4f28876bb738c50249411f69 FAIL COUNT = 44 -K = 70eddb70a63d5e8e3df8d663011ec3e2 -C = de2123404bf6101efb440937e23084a1dc9db2637abfdd1d603211d0bc825230ca76a2188c510d8e33c3ffbc8eb2c7f0836cfed7cc6287c35431b973e2d4414acbbb3378c5a034c2be65d1f37751f8526f72a31fcf4ec7451673413efbfef4820daabe40de58ebba2a5d1d12080a3b27 -P = 768512e34a7d55e215ac6ca20c3ecd3073714433b85c5473fa7d8a20c9e20169e734af7344a5775eb502883400e9b310319e11757e056de18798a9377e9b5bcc79883695bea29c604dd274eb8254a937e27292a0e5a11e16ababe69a932e59024655c5f778 +K = 9a7f7a6693c03b73fbb260680c9e248c +C = fb4f04b01070da8af54d1e01bd1337dcdab9e9669dfa57cfe6d228bdc79ef933065efd691c78548e11cd29c70bca0fba44e936f502a2a72236b95a9db08c7a10b453e91bc9e2b8fd7b132a9e69b22bc5e6b1934aa1799e98d0fd5895fd8e424d18663fcf80746316277c091bb41fbd9567d71013e0865806ba83249eb69b0ee8829c1851c45df7c3d278b50fb85862fb3e1e192c45533ec52de62d6420b8ac0077c953bb7effd6bd73025d3c7c1c9105fef6abb81ba77c388b3fd5f99fb9c48949964fbc2b56de35697b376387e9d56e516b06d1aff97161444b2b042f59d01dd457d3e76d9654daf4782542b8198e089427d56b08cbac9c93b4e8a8457f4b5dc50d9c0264a03014f8a8a0c14235f28f0382eb55b4862e85a019028f4724a1ee93966bd826fe3bf74e3eb07094f0a1f488907d008906251f722d32726fc2645b19fabeede215683877d420b7f2df2f20460d43d974e12adfb23d1804a7720630d01441f36a8fd60daa9311de02f84122c713a3fcdfaa556e69706d9bd7c2f8aa470ded847a4e65316c425ffe78c0f92d85c1945bb0ca0efa8a77d7daf1772d87c6268b2d32bfc21dfbd5246ac5db770ddebf56aa086c924d84a23c47dacfc4f67eb8ec66ce56ef56b2e35683173432d09a6f34bd329fdf1e1f74f2c710603069f9bb0845f3387f570d3169ae73da8812a327836ebc877305e2525480cbb37ce029557c4bd4e99300 +P = 2e86fcc99cecbb7078e0a2f5799458bf7b4b51b6b560e8b893a9ebbb7d91d273229081baaa3275c5c3db2ba3cccf5aaa8f74f8f20c02e2ea38bf3c877087c9a5d712f34216843abc02e83ddb5ebd7db38db574eeb6e4a41f9a9266d39e137b62fa0b6b1623e8f95f0b48d9a3a6791640930ac9879edac072800804aef872d419903b47203f781d508b77d8f4d4ef487c82af0793df121e718ae5178f725224f627acd42d39d6fb46565bab4abf4c207f2737ab1130f963f0f8a9ef15575a3a1ed7111957682ff0941b92928439d051452e24f3eda1449415538bee5205a271b6faffdec8ef033f775ee450aaa800f45ffb27ffb500fad81d2def28b344fd08d5c7de95c3eb94650b1bc24fdf4af2d5387a7f901e870bed6464ba24817ac493e5926cb5af786357e56557b9947d3500edc9c4f45e947611f21ae9916d00baeaa763431e9ca673605bdda24adfb264ced7ceabb83feb524b9405e6f09f7a95be5d3c78bd815f5722a5d091fe400b67db9a284513ce990e6e4002f63e42f4ad017205172929a0e810a8dead492f0ed7b01e7bc3340142f35e8286391d18d3c3bd3771b81d051afc19dc7479ab37d01be0728b28e52a9390e0bb3a3a4c51fdc0b570a712f6b52b6ef596a19a3456250b7a92041e6a9a3a135a943fdf9de43fcd54f312b429cc863c2a618016a9b1aff3d4ddef5f47915d5e6c1876e2936d769623d4 COUNT = 45 -K = 52238f7c6864893af9734c3fd2fb8cc4 -C = 28eaf0f6427dcb250a0141d5b674b380b62e8e044ddf0b89118b43c43aa7bb56847153f6089b53754147954c3bab09ee655a447c4e800dc553fddef337297d410cb4927a3034c165e9de8bd7bd9cbf2724f5187f0e5caaa90826bbdaf99682de7cbd9045d7b1e919f63731853e4e1e46 -FAIL +K = 1aadd0b5034d96b071e324253d4ad02b +C = 3baeb740d41f5bed3d7abc6cb3aed545f9a40f2c1df28d772b71af3166744e3d5a865c1c4ba77993061159a1ae14255263cdbf284dc96367fbd8449c7b5d0bf8f43a2656376c7502ff5a11015f994d97c0e4ab3f7c03b41b1400e71f1db499eb8496ba923e987a530ddab848a15788cb4217bf1ba300ad653cd66692e0ed5e0dad4491c06ddb6fc048e852e0b35a1eafb6525654670797b6f39ef1b9610428cb2f5735e3a5217d80b125b71d7b4030160494dff51a5b4707b32a9455199381c74bac3b1cc6bc2d66839e298d18ca65fef34fc405130d39475d009811c78b03cee927c5e07304743f37929bd468682844cadae044375cb09fa6122f49e382ff3546bd8c1051ef91b5a6a60755b8a7689724fa51a935139106b54eae28eafa3ce7aca1e2f523ccbc1da5bd1ac4ac5e4725743d589b8238b9e5fddf7641625e0f1cf664e9af2ce1f3e777570b33342fc9a1a414d34f57923d7a86ae5b8973e554dfc75251a4d41f98ce3e936e38859d2fef139b6ba5f5b01edf859a7e10e83e4c8e36566996b2fbbe2cff38c9608da892552168af4522dd8ff4336acd82a9ccbf40cf21dea37319b97aeeed750de2f94aea644a59f2474cc2ffdb6f2deac5359b60b04c31af7eafd2bd0259d7b57039e8ae39abccfc9eecdbfd00c0cfd83f6193e7ee95997d98807f9aa13afc5dc2c69dde37b31365f73d9aa607d32ad3d490c31589aac7d2cbafe0a2 +P = bfdec4b78088be871b2b9ef7b9751b0642efe48bda331fe0dcbc54bce73d014be8879c115da107802c34027d3927093d0b0d66573e2cf2c0691c5efacb152bf2c4d342174a9a45b4488b78b329c73f1a78c1d6995b3328b538e3e12c2832a6a759c50709070aa57a6af93f33661466bb3ba3ca76188fa66a19591b4082092625dc7a415d235ff4137c820e705edc746826b15a1fd287cb78e53ff43330560d39b0c013a8dc8c6de444356bfc22c7c310a5f3e9ae126e1ab0ee1ec449f06db3add614518dca2fb3b29044b0e9a84d4a516a2070b2535bd331bd848bb87e83005498e599b73339d5e0df8388e7a29187e5087c05e35ddc53647bfddfeb7f919103b8f7acd4412fa9234cf0a126c323c4bfa08380fe5e929cec17969e241d7929f967cacf51a045b9bc7e9ec609a78282fbd5fe249904f43213caec46028dd03174a71e112bab21eda425151ff9d0535057c7868f1fcdeb2c1efe77852802acddd8a903d6f502acd5d4078d9d7968a9716cc91f2786a7da76e3c0848144e0dc4f8093ff6f4847136dc3e10de58863d082c80d03234c0041779a103d25162f3d9d1f63839940aacb3956ac6d1148984430779247a5179a674c134a3b6fe1c17a20abf130f3cbfe331370d38fa67ac7bb291e439817f1decfc392384e49648586fe62283707cb5ef4fdf3c36708cd91a0203e26b4611a668c9a4dfa3e98173fdd547f COUNT = 46 -K = baf18e00676d9c7ef102dc61b72a74fc -C = 463c7c40d96e4cceebb3eb8a2ddb66f15c6ab2784c0cc7f72560ff539205149f5913cf7b589a00a7722efb0b58e4520ee282056b2d4881c0acd1f549b9ba6f130981268137d5deea010c6d9320493795960abd5a6c7cb4e0a63acb030be07a54236c705ad5b4e25ab110510bfa77697d -P = 9c72f246f73f6e090d7725678ff25dc7d8afbe3333968aae6114d4ee71f77d1e9b8e5ade56a4f6dd3126ad7710ebc512d6c1174f21f848c6739833ec829638367cb23554895a1a9a0b7c90dd34c3d20ff2c040c55b792773ffb23eb55cb24333ecf3bd23ab +K = ee1ef8f9e51f6f62f5b47596d95eecdb +C = 6e1dae2399a0ddcee25a8c63c9574fd9005a96bd10422c772e2b801d0778fef9d3115f5f0008fe3e06f573a311fc0fab8a0336d4ef383d734e2dd8b40334990fe2df792db407d0d66f06ec121e12168fe50fb4fe0dbbdd6f42a68830163a756262ee2b2edaabd580f209fc4ed85d7d4b3b409b47a15036c3afd844e2e546ee811c0ac6185888aa5721ecbde17f5c7083d22970903ecea797486d36eecfb2e3bfcd3014377853f51502fb3eacf6497bf4794a75ced66f22048138d51339ecb417d215ec0316cfb7dd3cc61da6e9e3d48036c9c1efc8be7ca41db37a590a80f0e237bdf04217a5790bdc92716ce20bf979c549d3a7a06c6f1bf7c958479d870ec5853687edbb232a207a806408ffeebe909df0c59250da58e067427560e379228e64378cd64e35ef943b46ef3756e855a112f9e52d3316473d95e4d6a0ca351f6a67189f257d6bd0a0bd6c986dd10430bc743243494f1822dfead50a9d2d642427fc3eeccec2de19e99f62d5a9a52e8a9ac07961e18c16a2be36c8ba1be0d3831fc49bf50beeca22a8bb32c35a7cb68b2940e59dd045da3a76683496b24efd609f6b3b8564ed76b2912ca8c70714f29a452bc20fae463f215738c4fc0903fc2e866356e3c6fae487208fa20399824de732db41798f88d6373f5cb49d261a8b611dd2d7975e2157604d3d3ab03f0dc1567a9f5e9cfe11030bbb5690346167f37efe1461d61d05ca0f71 +P = 0edb3ec5ea1b11f77c3722ff98d8857d401ace988d13a98cf43712c68db33484420faf05e15e44109bc42c9c98b0630f26977d2c422fed6631254df6da0455208d35b989c10cd87c16aac8698326e8e14db4337ce50631e682b24be43f8834f1ea0996d6ab5af166af36051e2be23ee2d39bca09c2ae1e9ebb7aefb9a33eb92a453c175c6074ad835281c5d76db3b5b57d0682018b0dbd268ac0a77b6f5de3ba07730d7886beae8ca3be3c914bdedc88290b686318a7e4cd721bb57df763cf04529b45a040db47dafbd5e7f74762bc414e739851ee07255cca307c1c9943448ff6775fc78b224e7448e93b259b1e5f1bfd55b0e1c95feaa94559211a50066b0eb73637532c515eca9f2089fa9c1e2aab28f050ef6238a585e621942aa40203b1865b5c1813d10008a41c7c4b375f17914f41e0eb6d7dc194438325672dfa47c61e90bb978c75573397f08aaafd61b75548411454ec60e12bc4d6e3adafb5f6917aa3de3972811a9d8817bab65d05b429aea91a8a59431ace9411965d48b8e99634ff715d78d33cb737152d89959a51c46c76d477e52ecfee22cf602ef896d1dee4705b98654bf819d8f6f460d986d7dfd64f9b72505e61c88274cac3cc2bb27f1a2ce20b87d70949c246a2c5dad9a852ab997075c5aa752cb1b01de5363c2f3d45e843df1735fb57c8e73b948f71a633e56c3f9d26da1245a69c6bf46dcc6883 COUNT = 47 -K = e08eda3cf209d29126e44d8bd5bd169c -C = a16b4c191756fc6c8c05686ee7ee6d41e6a61c8b204c29d2c3d431b509945769704d52f31cb0491b7e52baf827d593b771698084202047848f33a776ced7ef5719aa016be5ee296a42e757e5d7193a1331bed84feb3b15e393fef5f5bf8c20cae5a1fd3860b9d7a54316f383da8ac81c -P = 4163fe822e8632a5bea58ae3a3cdbed38503333ff4e4dd8633c54704e19aa5ce95b76406d16c9e10be72989a006842b0b959a149693274a59fc39afde7f72786a7e59ec7fcab35aa954a9a9bc4045ca12de7bc552005fcdf1a26f1b9b004b12fc3a2e0a8e1 +K = 23047a7dcbd96297645d133df01c157f +C = ab06085b5b19f1970ac4adb604e94f9eeceb7f4c4fd36dc4e000dd3e53d53a320045c7358a709aa5db8edfd84a2b73792e9e63fe57f98f2f10baa002044dac77ce6d5cbb7da6a3528c9247bcd5ae8321d3c735a2d52089e5e4fc50c6eaf904221a67ee699abad8958506afc4a707cddb7d7be2822415dd7066087977e6d02443b8a1465c5b04b267968701f8eb96b99820bdb41a3b3bd80822d778ff045f152667d77dd4d0e0860a61a8aa1bda4eb2fe6dbc82ed7fcb8e730c156c3140086375c6366432142a6ccb3b09ab6c7e71ff97936849359f526269aac0355896fde2651daa919c4a0ca67b38f7f28312146842a5457ece25f96a08fcaae3f050195f16cf49a5419d9a132500d89db7802893e8bf0454d021ce262ac39d3f666db8e07aa9179001f695ce0d4e02c56850c4c249118cc9de78ff3eb17f7e47b31a12c92627a026620dd6987c5536f3da3bf82fda9e8f20f696209872e99e58d28b9be8162ae88a1a8f67040ac901cd43d000ce237c2af4c0b685f1c4a3d04f8a2ee2391f0f74bfb5e13ec80b19dc70e4d8fc4efdc92fc9cee9a707b352b69fcd4b90ca9dd6ebb46023d6b0c74b14994489342b95116a50b9cc70e7c358e70a157adffa4102749f565121d8f6406990b815ba391e0e96d8602edffd931d128e506caccb713558bfa9872ece42bc527b177e373ca55d1075a131335edd349abd22b51dd8470ba6bf1537f9f556 +P = f95dcd2ab0e69466b51dc0db7baf43f13fc92e70befef6812ead0bf54abf25447502119c1fa5ace4c65e0ab50d6e9e6aa7fa8a56346b32c247ef3f792b7735a650b4592c093a920c04bae586877953a70bf7f3963c81aaadf92112fd81891facf8209729e8e7003538827a7f91bb5e3c14b55ef7bf31efa28cefbe49a0d6521dca56e7267e38d57e31969d15b892815d5d0a2da079be4ae2662e19c61891be7e9438a5a4c5edbe48a44055386c36bc7d7bd2640187dab4e1d0903e6cd39bdea0a8cd406112ff224c14100f3c54264dc4fb1f0e72dd1630cb9d019fcccda26194eba08efe3549bb66edb50666d6815a91a647b50a96e58cd9a7d538da434f43e4fc3111c11c7ed5751dac8e4e5e4adcd89fed0f00d37bb2a4e8e97fb32b5b14772b442ba8fa5ed9c0fd82b1368bc3c48cfcf5334a7e22c6e43bc5134ffe667bf725c0ed1b7d6c66f0e7b567299562ed2ee5e9989793f0dd66d8490206b0768a5f9fa33db24fe554e64f2ec1b049b453d616c37bea9a630ad7b4a4ac0679a377440aefc11972cf6fc0408984421d6c8d2aa41a164fb09f4e76aafc9ea775b7e48686829cb46e1a434d7d42babeeb56844bf7f6dd6b91c1a7925f2786f4beab330cf4f4c0b10d99ac54de54e365eef2ca184af2612c893523fab54e079ff1144ba0a4b726354fd36fa304bb552607db1c9990febcdc5ccfe6e1704692f9264a69fe COUNT = 48 -K = 4645699551413664059ab53e7f926c3a -C = b42379e9e1835a632f03beae8bba8fdb9dbc37bc9494bf65c35866d04d208593c8609bb77a0474f8e89ced896a9d2256632a232856202f9e31b06b1c5c8e7a9a87e49e12170f34222b970e3c0b963393da01682ddb9964464d9e691158f5c2902d267da47008608ac26fc46abe9865e5 -P = c4c0aee738aee0bf322790050a592fbe7e1183a3621d2366cef04a09dbcf3dca0d2fd4215389ecea677b48a41688dd385a1d39bd236a55515423a2e6f72aa88a20578693b0cc0c231ef609bfd29502a0340ab498c389722f346eca8ab549309ae96a936e66 +K = 398b5310ff44874bf256a02166843081 +C = 5a95753f51cee4327b1c3b08a812a6489ac2f5d78cd3b007e7a45f89de7a12b2c69b36020c279d5b0bfcb55ac75cb03ab4c7070ea2d3f122a12c159e3175e52a89c62d3b7f37fcd413b584ab56190c4e6bf0516a8ba9bb7d0f10f7ab48005690a56a89131345c2c92b63e190eb310f6036abbd03d639ef4a486033cd501a4fe09fce91ba1e3042b0adf17ae923e8a1f2c0a131d46f582132d2e36c163321c9fd4dee77de5b8632392052f7e3db201570a3303a8da28578b3dc6b4f7e39a7454901d4b1113c1ce9e3923edf07761b60b3423eebfed94fd3ccbc07597bcb7e20876552730d684aa690b9fde69762194f0cef13f20381796317593812e03b3f7b0220f249832a3206bb78d2eff14ff978b583016d30b347f0f30f7f6082d8fed9d9581891d33afc8045a239605219bf578e16a7b107a233aa5c94522ce448e93d2ba86fb38cdab5cec1c8f9660872378cf1ed3285461452aa5e63d4b24788db8539c3b1eab300af3abadaa26fafc663086b0183f87ab160a1eb47c79424a95b32565ffe6bf330a22c872c64cfe64b5953f1bb5d4a5958807774be093a4546d71eaae769220526f5cd6cacf69c69ec5bcb4967952edd4f161a6f4365184d768c5d4e083f6c6a4b4afacf8d5f614df8c8af32b6dbc4cc48bb8949f703f9f052225c430af67f46df4c9cc1533621b4aa79df5327627eb898731ff283f0545c2036016a1b9b9d8dcd695b2e +P = fca42ce0a53ded91677f9ad773e33d06cf33a196c9703e4e4f1db13f2f10ab38e887bef658972cd8d676b197c02fd9afe0994c9ea9a54bd90fef2a4ac428c1e18dfbacd8a31fe2e6a1def7f6d38d538b914f443d5fb771a4abf36dc3f9c2a2702a4477ec2547ef63131a5931bee88de011890634ea26eeac1655cfb741804963375f1724e637f40dc6db0483bff13eca5df82e4af5af1fb5ef38906301454ec656e4fc8f238d7a19df6af76843e730286b4f9e5cffcecf93ff8d493a0551b1f55af7b0ac48768ba58e73d75d1fe6c5fff0ae012d8d94306648038fd4be4cab320223424968be5ad5f839b5e53e88d885665cb919dbe86b851d624e2d1966a9fe355ad9e4d4ff58a804c3da5f807c8c00f036b299f12f1e05ff7e6f6d7ffd8fbf33b929e85e4340b1f5cb35ae6963edcc72201a8c2c7e757a20eae416565bda390b9c368159324a1f3553220f2c80a2cb856ec4396d587ff5b42819d704a952452216686296aedbb374d789b75b904c7bb0b70ed7f6b7d1a0ae1563db95bf3ea8a8dace31dc4d0619a4a69253ef983b1cf56d6d6f57db3ec7981bf045ce19dd8c9a343319fb0450055280b7362d6524312cf3a266992e12b8822ae8997385fa1378468e989284de6b5eabc58ca2872a1214711dbce6ff47ad7973c97e15d76c206af14be221a2529cb7b46a1af43c21d803faa692063a9c5107d12f31cf58a0b0 COUNT = 49 -K = 0214b448a4fbe5489c39c70707cfd166 -C = 3831af2d5a0fef17bd12d20f419109c0cf41cb744ddbb2833b537bb90392c2a0f8c0cc106233eb112e36f3ee3afa4f0d744ecba3fc3370940fff2cf600dad59fd90d9ab011b9b263f8827481b55d34059885ff42c7c9f733f07c9d3cb6d48f00e9f43ed42a173f483baedc4ca5585248 -P = acfdae05c4352e56cf2c2191aabac1a352f7385f88819a18ffe85b85c1725bd2141ec7318073a7a8191fa0f6265f6ce2b4d45dfb8e0dde4def586ac2bd5e09cc963ff6dc2464ab74cc8c8051b8120ba5d8e4a152501951aaeae7c5288fb39e0e0c2a208218 +K = 0b487be65bba31b5d8292efac125b8bf +C = 3779c6e246aabbc98d55e27c88e3f6c2f201c6bb8db5077ced2f48bda39400814fe004e6b37915afc24b3fd8449af58bd43832b7778f1f7a7aff8b70888ff0dd021e7d11764a38a212f2ce42e7ba2008279f392810bc743ff07a19b29a328224ca9380873c603ec26d4d3cc73eb31c8fc84d52105a4298c88170b6f08c5f6ea622e418aadb6d05d84f6c52963c0e7f87c8bd2142b5869699c19a7e5a9bc86a256135a7e97697cca91e167f214b9f332be0ecd47cce9589540d171b66fcb977de3202b05789ef7aa97e5641dd65e51860bef16e2c8335753f44f1f5b2766486ca0c57ea0cda5176d27afa4ceb09dd8471d77733b2dfb2bfb2dec3e47ea94d6b5ea7dc7a9e80ca4a04553246779b1adc7a34cbb8ab367616706ca315341dc06e7b4058fdcba10ed624621fe6b14e1c0e8d061417de5a293e6180a345953f29915b6447a5f8fad896c3144938c45976ee7581265b996a07930f793145bbbd73732481f34c4fe26a37c6c131bceded150e11eb26a3e87369b853266dfc255d93adab22ff709639e8ad22b62e62c212a05d92042f28a2d576482f15d737c0bca7ccdd74de1b2f92d8419602773b6d4cdac9461c5dee00a48a68d50192af1c6e944f5a8ff2bcba5bee13b4a5044073676898ce2d6421eb517387ede29abec7541b4e9adbfffb779197cd86b24edcfe1580cc432cd727b447d29eddaad0860ea4a2eeff7164e4f07a6f0a96 +FAIL COUNT = 50 -K = a0cfbc5ce4103e45ad93cfa887924591 -C = ac7cf9f3a099da42f291b778bcaf552486fb6121bb88d93188b520c901e5800e5d32385324c0efcaad581e32b46a0990ae9772026510fbef8a840e0998b1ef6cccb6308436914bfab389547f296a5aef88e82662a359ca59d50f9ab8f2aec1cbf90c071a975ab95f2bc785a37cfc8ed5 -P = bca24adf9a22e3285afca408dd47bea3ea3ef0cf88dbceaa24c482435c8b644911ef11778e80da6bfb32c7b2902de78e9e794e4b17016650ae0b434f5dde2a9c6495f9b4efd8183796b400e0919528ac7170c298037ed4d6070baff079557dbf9b0f813813 +K = 31e461982920dd84d8bcabfc9037bdea +C = b9d3988abb9154ff34a02ee0d897d8a436bbdfce484364a1944ea7db69f7be240f7e6ff74e8af00b97d5af91a0fedd208a7a2bf4c53c8ec6f3a254dea84de669f75b4c14a817d85314bf7a0e7ef55711aa7381a42ea06703619abcb211c93d30d14bba631ebab93978947279c6151be73e5876624be4dcc8d045b8b4756ae6a5a22ecd1c6cc9c2806fd063988381d356188c7fa3d82e4dd7927a396c07cd7faece061e3375aa82dbf05acadf8fa2fd6de8872f89a7c6da49a920be20fa97f6d84395138ffcba0894edd997ecbe3d59293b31d58687c4d9d1eeb4295a40dd67760164b8de0932de4420c55bbef6bfb5f0ccb4f07da09cb10a129becb64bcd7260214aadf49a73393f0acd55d7e903a02b65fd846b622167d1cba93dc4d5cc8e45f2623e4f44c85680be816e761b4dee18c54448e55bc1f3b9b09e258a41b85797ae8bb622a4d356f7acd027dca8f09b0e96907913cff34f059163306ded910b8e40dc0b2feaed3d73df919a63a8ffe99eb2b3c95e4c10d36b7812fec055f0b60451128b790a02261817ea16b7032c3c6de14227b40a4870cdf7d70b5580e5e2446af7cdcb576c0af04eb699aad3966d504473c10ffc58facc592ca89212846b3cbe647d3159f63f4a317aa93a652efacf09015e90434efa37b1a124f04907327aeb2d4e4c6d8d97f0da06b2d27b32582983d5d6a531192666bfb351feed341b771d38e6f02b112840 +P = f06f1a9b6fb1d74b551ae022c2fbaada9ad0268a9871e3137454add41892a102561240e8e9d9f833bf8f26336ebfb67750d5a64e6ddf3ed9dbd28e2b4ba63dc1d8bb097a6b24357f028a8b8438ade68ba5b40f0a20c4f6cd12d1ccfe55060a34726280b5498a730818bddea1f5fdac7cac1c05c1977ddc23f8afee8670fe103817e6537319351ea9a60d362671694df71830e819828665f19bfe77833133af83e9d3c143c5fe7417394184574f7a5066e12f18215740293d75523b13e5dc304a29270bfa607665d671a9a74d1092f0ea5e1bedc6cac3e9f46b35ae9ebb0a0bb650e5dd0ad09d3df2699a7b514a5ade9e4aff3d6bb2607a49b589aac39e5524dbd7f5caa1226daf2d7f4d8d470348dc2bcf815404d461ec59195c87fdb94d4aa22e00f3c61be366c056dacd531c1cc6560bf682a67e0800aa22d0656df641be199652b9fe1f95bb87ad526271c6368585694bc4e6d9775ce2e8039ef228b323c0e341e05fb76a7c0b42101a3304103e1b5207c54418e90e44c2b0fae303132259b57039377031fe67b13e67d31c9eac454d46c9901f596c345f7c8a6f0430f619e963763b21464470a9d2a7242388c622d640cc90c83337e46443f36167a1242bb2f5fb10a2355336d3548346739c4d6ceaea31e78351269fdb32eee3a2f8acfb830b045a8fc89f8190d74d926c8471ba2c20c66d2fdf0bedd298abbb965341be COUNT = 51 -K = 1b4fe4e7cedadf360bc881e6bcfc9a54 -C = 52bc78259c1a3d14ad872bdb8653a735d8340f5b9c36cac10c9933ff8b39e3d0e5cc3befb86dab7edd7ca1d806d94f3fb4aa8db7e5495b6f455eb030eba0fbae6a7f718c094265d7e4b056055dd4245135f7f6862ae870447d4fdc492d594f8fc6da9c18f8f11605964ce02e156eacb5 +K = 721fb78c003074c76976132bad2539ba +C = 78a2c1114c3c9afab852df21bc54bed242f6c11b679a29373d55f71798b5f0af5df835324156f45e1c5ce6f7ddcf71ca806b95e94f7a98d62dd7790bc837200f7f259987c8041f1ee2ef030698a91b99a393fc1326534a621bf65a39ff7dad6a0f0fb57a957e3c42d449bd99f36694c46c36820f7f693c95f5126a5a54489d8e883ac1f77b7616a341715b7a42e1efb426850731360f97c3a7ad4da8de4fe33bab135880d830596ca7621e9e8920836be3c3911ced232b80178a7081d66e33e6b2a1327d3cfe763c7a084da27743ca0a2aa8c32c614840203e8ba6d88cb166b71590d25131bd30a75fc9d936dd6f51d942f80f83641a8fda76fb01ba0bebf1e89dede978c1fc9c5a5cc6fdc0d5b1926f3129bb473d7f58ebe3b134f212b156d965006c442878184a933ee61e4429a9d28eb211440146532895e914612f8d2ad4dbfc067306e9d270fdb234e354bedf168c607648a70a9c4ec9218c83ef15f95f29052f860a39d1ff9a287ceeb2529a33d58e36f8389e7e09ba23d8763c582e293f176ceba06b261e59b6b4534b60186f41d863a66de1b756e08b8fd8b92eeb61b4cecd116acf8c2c114c8675fb58e76d6993b6fcafac55971bf8918082a60ea9a73058b473d587fa90162e2cb6824661471a05798a1b815014c753f258de006528e984080afe9d71eddf9f56914fd34d71bac20a75323f35ec7fb15e18bc9faa8aa06737e9b7661b FAIL COUNT = 52 -K = 345bece4ae50f40b6406ddfd3d7a39f6 -C = 3238b66e8735aa6e539e9eb8f497e6acba9f50000942ba7d4ce8b0d6cb4aeeb14d2077212e072d0c76389baf42187b3996292a02ab5558fd496d1d2afb281d732011ab5c0858855401da200d4b4138ec40e85df89121a1483211fbe744369d53f9bca43dcaa4f06575315beb7679282c -P = 9a2a9ea671383f8ad7c660789d3e69be88ee1e554ea5b6a9cfcb8ee8b67fbec3e63d6c5851e634fe5316c9df02aff665db3a0b9612c47233ea323ebbbfe43e7b49d5e9bfd225fbbe66c3d68984a4f2e83a95855a1b6009f928c5008a0d785d34632508406b +K = aee3f49486fb9a75ed75d2898b1e3f2c +C = 498451f7b7ac3047120e038dc88308c3a26946df9596964fa537caece6d5cc612cb69141f27c6b64699a95a4d9e92ba2b6d7f2650203b0a4d2d858df3a3f65e6ae547962db6f192178087f54a4103237ae6ebc6be7e61652048cfcaad503adee63ae5343b79419736bba4c1aae063a452c607f5196ffc2f4c6990ef510432e1935f989dce981460622eea9a402a5b9fa48077f8ed76ba6a996b677b7bd1c7807237c7eb12fc4c0825f02e44a15974a62676a2cecc6405f7d4b08096edc2ce871f51c7af9fa7049dbebc76e99f3d000de2bfa699499be5fe7fcda52dacafea6a53678e2688436459c67271c4eb6c209838a9962e741bb71a3d91bd737544b05ff33a9c64861e5e1620afcb12200925e385fe3061506ecea6ddea07f1817e702b080b5bc385a604e9b2a103662b81d6ea0e50282494ab0c3ef4101465b3cb8e0b07bbdbc14fcb52c531b559fce6a1e7e65b9347d9676ec874c06c0f3abb56fbf73d4bc4bd6c43a5f8dfe01392bf318e694cd9175a8a4b49cad27e8ed3f49ae1d27a085e66998cb70b571b78b9ae73c19b321086c03d347289bd1b9be6f4dcef19aa1ee50df51e3633e420633404c93a239072523923798bc6d71e6432a613b749c73e08d4a1afd9053830bde3ca74743c77dad432f9fec56e017221339c42a3209e30c8cd0e061661dcb794b775f3ecdc92b9853791d5f520d485807e1ff01fe338a803525d2bc0060 +P = b322edf961eb63306e0b4ca8c4ed57453ca19f16d0f4370db2191962b3648ae74f57fcb9de588cddb1448799545378ab5be605409250649f376ab881f869b9f47d8b9a55efa159bdd21ef408da70b36dbd4afd449c845fd96dd5f58eab6b1f45d66b778a810e6873cb73ada96a5d694a1bc2f42cd07213315f325c28d338f3ddf67840cfc5829767fdf3096105f8fe007e519e4e659d2834835d678033600867d3923be13911a7b9af855305bf34e2c4ea1fb43eb0e95ae61a65fcad088676eef23955650784ad27a6fefd75ba9d937dc8f9c78aedcd50faf8df7ba6b14e037dc63df94736105d0743d6da8e7262cc35ad2da8387924340df6cecb68626a8727dd583f32e991abe1c44edbb5687ecaf0863a76518cb663e5c254d527f5f7c62d535ec09a6752980424b4e5132b5010f09be3e0e2f13c40992534f1af3ed9e080e4841fa0e7ea3c260c7e5169dd3c6c476b1eb47b915edacfb5203ae326c883be13f277336fb41bd84f9dbe35612fa924f84ea59581afde688d4bdf5fb0c59eab0c3f87903ea882a9e04f324ba2eca96acd0d482a80631ddc91757d7e647f1bafbf5d93a77c442d3f0c3a3697c16ef8bf6708e206dcdfa50ef9a2be611d11079519983519960a62083a98e95c58375acddd285376f666d7df933b2afdf54af37be5ab954e984feeb6b6ccede0a83f3ad45885838dd47d1ea853cd15f885af57cd COUNT = 53 -K = 5a34e5c86fcb51bd5519d5fa4c3139f3 -C = 7b8317d2a7abd8cdc49decff236db1bbe7f34ade7d161ec10aab8278db14068394b2241564f09c9c61a926be1c83e4007c7d75fe1793664fce7ffb8b96f8cfa0f9cba3b02925475e25e298660e73bb87e8c0701180d43a520edb68ea5bf48841adbc99bd63151bb6412f71ad3001d3bf -P = 2c12117c3b321fbaf65825d6ca9ad1da74c710825cd13f9fddc985d4a86c2e0a09d65de33146940a04912ba0b250093b210794f7f679ddf54ba824a7a488773f5f675840aaa4c669b80430ff8d68fadaa5b1b0e6c14a415aee1642a4f0ebb4ebaa5e105406 +K = 8332a27fe8e78d6a1c4e4736f9d8839d +C = 16224ff09dee344fb876d786b5094df7a557b4554da13ba53110a18908869f5f7ded6cc514fd25dea7d1d37f5511dcd3609d4e64ef029623b1486a943c1b5bb6ed708b558d05ce8f4d7c039dc93c68b566dd11ec7f48cc7270a5e755d475c0eef6508488ef2cb9ec386d4236bf9e837c648140de08cfdfb3a6fa40f4124c6bd5b3568540aaf2e5f46c523baba763fa0a2a967f8db2a4f12b9be2c1164b49f0dfb45fd856ce56e1f10653c60b871449490283c9502f55ad8e59c0ae6f69d9d1e7f6f4ae8f2c9f06c9174daa54cbf858f64929c1ae4d8c5bf243a5c74bc01a29e287e82027b8b01af374e1711ec574dc99f626c7abf9e98beed152c6270462ce559110dc5a9fee188bb7ca7cac00c164a6603efdda9a72fa195b7420a135777f244a7ee933227feb2ca4b41eae6e359267f99cc8cdc331f65cc1da0d8ab8393649faaa11a366ea896ca537a670a83f26175214bb455d95f1061b27f671372e996b0614bd82c24f5215a31b9b6f9cde625f9e0ac599debad053834871024af84818085ebf17bc27a690a6f4559267a3c64070af98b898713fd295477b5206d20ae68e83c61872c733077d6698f9d4fe7b46d9484ec930001c0bf1131ce680dac7d5875b734bf88ee04b58ef5938573248821cba07e1ea684a41950c1e7e38aeee2f7c07fece884108ea861d3099f02567650712ff196e1d7eabc9c45a049ff914fec2ad8e676b1d1865 +P = 84daf9725c6c426d182293a1501f8ec4fe548a17a6564899ab4345444e9f031702950811ddf31f28840b6b4d10db1345e08c8b896f20fcec310e5b76c597cd89f411363b301877a5ee99a993a89ef27e87c62065c35e882c308dc3d637b95a9e0299e7b235a03ef1b651d88e0890bf6f6f46018a5cb7c0c721ab570b23e3ffc522b2338ae9d028bc10c4def228548f29c86832c8a1c312fb6cf09d28489607d6d7ab376136064ba10d114186a0262a60d5dbee2499384379d9b19f4999485667c008d624fda4ccb71293d2e194c446b2c81c2c8f7966260f07725e567e43e8718378c4419304ef6b5be28d934e05f5a9a3a0b8ad033b67a7c45e1dc6e49c504f5923c8e7a6fb6266464000853610d6a5098149228c512d4a9408cd20c4fb4940a41246c01f11e9d5f78407ca50480a17287591dbf5f10cd059d3a755eddd5c07423abc903bb241a8490f3aa50473123bbaf4588526b81da479907997db2a474a56dce18b64b16a84c456e365f2b699200f6f017ba00be45ac7c36c6c57c2628ce67576d2ca7d1f4da4701c9c88d7c7d75b599011e00df1ecdbd25d2a3dc200509ef3276866955a674a332b70fdeba951d6c58ba2b080e149ad81a9f93746c6c67ad8ac9d09baf0d81a31e38102b257d707dc16e36e3f17d65ed8c7991bd521c4a0f3fe47a6c4626d282cb5b834402ef4b00dfeca113be9434e93864ee3a1b8af COUNT = 54 -K = 058be44fc1c492cb7d15db41508cac37 -C = 0091c6c761cf3ee4d5d1abfbadddbd956b60760310b34f4d9cfcc936ce1256ff779dbec257398691847f1f6b165fdd82dc81f8624e866a7d0b37d278d1eb91512b72e08d78d90fb0825671b9df03600e1a4e581aa512dea93cdb641e017063e6d7727f01a1f6f194d41f6d767c7bfe8c -P = ce1531410bb9b045e2413bc3bfcbb547504c1a5383c34f26b913c5be4e0719eb6d95330e790951b27f2e335fbc574b3f05805a967a56f1c284568150bdcd04fff96b5be1fadd5b1958c805ada9fd91f94cd865ba8d9683e79fe7deaf2cafa99a502c8758c8 +K = 435f4c3c7db5ed959ceaff52508f7cfe +C = 5e89c3fe72e467275932209c94cb6cd71ad20adf8ac44ed5bed3b47d59a1ca31a6b35266ceb15be8ff018c0fc14467226c14fa52e204be2c5b8e6df38af0a22b2602edf4f4dd4987f78b062806e96c3e740f3fa3159ef625ccbb89d9bdbf7bba30d3752e28a24716628009b2776bbe9d3d4deb72126d5f76e916d3228a36eac4b2287aa2f0e66cedf6d1b39bad8b698b0fbbbbb9e8630e9de332f175f6664b9e1cc6fa499ca5e1988953ae2b8eec265d70ea3842ef4b2bdea5c4586bd679c52e9070e88d0ed1214f70ebe19b82a93a6a0c635a491c73eb93fa6fee2a512fe93b4536e1b9d4442544803fc96813873b8d5715392e1a515c5e28cd8af5ee4e206c91781b181f5a1ab4c906a1f9f5219209fe226c70d61d215af431f0bca3d06d7e7b5701a8444b908540ece95b6429491cf013454de3e4b82f12f98c94c32feda07b678a2fd99694df88813a1f2f279babe50ca6d77808d57d80273a16d4a068ab305f0161a0ffec2ee02bce748cb028ad56c4ac4ba1c997c1ee86cb1e24376bacc014cfe135244dfc7753353d72c4cd6660c4cd6101ba320910159af819c3f3b7aa847c31e57a80578f085d652e0ae83eb690aa9d913e0f9aaec12b565e6d90af28efcac88e10ab9d172621d4411645f1ccacab70ea4a2b40023a7c6fac77922b66ce0e4974b28c75dd4370b28c803ec095a298b0761cac86c1dd12c313261574158215f73f6c8060 +P = 37f7eb8c745b90ba5887a4fce69e83236f63426d4e2288420a15b0a92f0abc1287ca133d852e5a084da75a6e0b83d90dfa5ece80f942bed1d90f8e75f46565fbc4ed431ad238e09242a64cffcce054d13365ac43e17d991126bec4c7b15b5b8411502a91384a568605477d41521c726fdc5b0b8a001b5d0a97001163a7291d31613828fcf840565c9b5a6d731bc62d8251759ddf9dd12d3d58691e11c6d60f21d2fe220bbe03c7af859223d103ddb24e3cc0ff8e17def0bf8eefaffd9dfbd4f4b821e4c690916ff44b365fcb3cb8f70178aed614e541dd537bf6b024445c963f59e5aa4bcc41067ac75813c1788605609383d3f64d0542b903bb953a478fd239a42ea5f7767039db64debf8d6288d45ba0f05f8d0745d352a8aac26dc4208d681ed60b107e48dcc206ef7ecb71b87c210c43bd7fb08f89f661f978564545b6739c393a3136baedd821108541855464e3e1bea0b92b6c64c02c87c40725afe0cd7ec4c0c0df6b622995108c0ce5e3b13fed1a6366e20bc1e4f429e3dff9adabe9cc8b0332dfad6f2b0975930e167b8fbcaa8b8c1c0cf827be51bce7659c94a44469d1e6c4b17e15a1bc2ad8d2b98b4fc1b8b13a66a91afdf91a396654d9f75195475e72baad5a8c8f17b84edf246a26aa76f17b23775d374dd1be128889fc5c02d3affc6e47a98ec253b3b9c034f85230e7edbcbf242d715bf0c46556c6ed5074 COUNT = 55 -K = 6c47b92cbe699443fa4c853c8256c913 -C = a31abbebae4ba9b642de55ceb290c4ed75ad5d9d4f893b84613e855e6a0339b547d744ac92e22beaa858087f003462855a8d97283f17d8c84b39a1f8a7c8dcaf9c2d3fffa2deba5eab4a14eb4b496ae35790e8f7430540bbd7221ab2a37cac1da6f224b726477a928a55d9b245d838ed -P = 7e92313e7356f8f779327241d9cf26441d91f92c872fa4f6d9beb3fe4341b9a2b9f0f001c66b943d26530489320b3a289530a77d44da5a4a53b064444766ce270ccea615ae0cf1f03cd1ff8c18b99b4247660c0fa1f07ca188be45ffa65af6540d62062dc8 +K = 4640eac16453bff8528babc5d42e8b6f +C = 060ad9dfab6f7b4fbe652f8761441c7f2392cebc84221a603ee19748599e985b2a0021f96b4817707a89180e9609d3b785b50a77eb37ab12a38b30c46bd360a59bf40f85bd63a36f9a5498b9835ff755a3d91b620917d9207d7a7967d162c5d3ad48f2675dc72c557838e7153e975e227cddefdd1b41a0c36f2a901609e785fbffa804e0ec28772133b68d86573d263158176229a22fa45ae71f3dd871e09d8ee1c193efe1ba1fd7e222c2729db6232b5017064fe61724cf8ed72cdd44b6c46f958b87663558e4bf618e0d7f88ed08bba148fd82bb67c8767c457b7e8c3ea72a637aae5647407acd87ac981f274427bda97f80454341a74cf404bc14e046f039e3c366fbe24102c74774440047c81343589b67377f297b732dd4d5f3acb2492252208c38586ce343c53eaad1eef9c56dbadadb9d0f1e364292caae5914c4d18d029ba6b2b8b45ffd3861243e0a815ab10f0d2374aedaad956749c9924d9c60dcb25312a43696b148927874bc8f7b684d7056bc7bf11749f178000253db3d3e26aed1892ca598f162124c0ed95b73e361dcc8dcafa13b7a797a1c1d9471b0e2d855a2b94d7377d85061eae19beba443576b468ea556e11bc01437cc507b2d0e14701b5007cb57d1c42506abd4ed9df0d50deaf12aac4691c860f3ce23fcee917ad93e3040a0eaecb05f07863fb3f1dab0269371b950e6f828c84677df41f8b176e03a0e554154b9e2 +P = 18622d58fcdc3dc933adc4993ba8cc575733b7f3303c36f77b5c6d5e605450a95a105e71b16129d795cf181f9ff46472d3f4e4e589f5aa882a22609bf80c47d26cae10fc4f0b34b25ce7db547772d05f7ea17b51a641267195464aa1d63b7f295d1e4b1b2c1a396017d5cfee83bf7eb0d4b2131dbd2b3d72e81733d860db1bbf500e880262cdb19c49493c0b648765de4d3d7f23be0c983b09ff2e0632536fb11de84c3b303f5fc6e0fc459d0b543279dd05dafd8af42c60f20322fb50c2c29d3e12d500dafbd11ebad1c3999802632fc9422557aa8485b7f2a5ad6106323df6f2728e2a6ae7944238265d6ea44fe3be746a1cfb629399b30d5957adfb2dbcb98dcf0c2b3143d3c83c7bb78f76fcc6e910c7250ed7a9e4a0f61e99a20762238750b0f1415712874dd585299a63a1623a03b4b95c0853c2eea6778fd8774a2fa84e9fc534a5938b565c6bdc6b0169891c6ed56e24787cd824a1c2d0c43d196645e847934ed1a19f2bed2ff8820496dc0ff46461025fa312e648d3c183eb582c9dc9422805804f2ea674b6a13119f1e392b4810091e67f7c0c928ec12be438b1f6f0a98277c2c1eb2b94945e062a5ca240fdc20d21713a3727f892c3bd25dbe47ed3470220b022a16ee06dddbd9f96106d812eee92b6d4f7b8e334ea054324d6a60d3e577ac5ff3aeb6841d9d4d46c4c3bfeab06bcd99ed43f9170f1fa405896cc COUNT = 56 -K = babc04aabb37c4979313efcb7841d2d8 -C = 1aad66a7f536d31055a33aeea285ddb9d437ad4a13683509fda65ee1a8a99fe666707891d7e9a73a849d82e330df41d01bc967ee9a327874ef40ae429ab46962b30ab86f0072858d592600deeaea1c92e9cc3e7a28558529b52d0538140e459c63d5a1eae6ee767ea15a52c9c2fc2c5e -P = efef077be9459f2a7dcf41ed5debdfa4363fab563ce7e25795537b20af8e4d0372b111aff898025141928b730f6ce96087a95e7e9fc2071a1f3f0fc694be1a9d9b74f54dfc3a00ff446230c12eef88f1db8ada8b9c8bce0b224295cf1305d7f43c0047f18c +K = 243d7ea7f20103e1e0ed4e2c83e3c79a +C = bbe35e79a4a5d203e4a72298413e34386f4964fab4fd8d66ff1fc11b4017abf83cd0279c9b014872253c40fc675bd7f299ccc099a8526887cfd8f7c8d35abb378d81d0c72e0a3b3d41f11bdf47ddcbbdd8e4496ca67585d519393051948b93665d42168470b500931d863b92a4deb953de613bd16dbdafe57c9e2b31c383b427ebf8e5354e1d31a0aaea60f0a30d21d7d1c3d9a6c4701cd9e09a3f4576aed26efcdde3dbfe7ef85cb2b9981001308f135e8c180cacc90432c4949e8569bbb621f352e22e1e440ad2d7c58ce5798c22f1783fd4a284cfc822efd4ae16be290b63de8f19bb069c7f70533c55ef8f8e4d06bb97dc54a75a613c8bc1777637923ac9e58a0b865e8530cbf3f3d300f3cb61ac50b6b7a8989c27f7b26458cbc7eaf061b85ecf31c7f3c281460be67b2b687cd0ed57c0c8fdea8ed4f7a27939405b422a57ddcbe66e4232f0240c1430582e33aaa39c5897a44986e1470b464c6a4f72fdf6cc99b768c79fddb4d451d349477efae3b6bf9b4ea24e372e13c17a42d86f2b8adc5465ccc25c77b2cbd2e81bf58366e012f0fecd8c257efd03df6a05f5bb9a4fc65e53499fbd53c6f91239b698c019d0a631072d416c6829036a893430f9d3cdcbbbeadf0be25c5993a0702c2e129108a0b1e98a6e106376363589c628cb5cb34188cc484503b0dc361f3324594a678463180a99367396d589491465fb2ed3ae19f274979b154b +P = a40c430561317cd55719e8d58f7a773dfd52132359aaa1210d44a6d97c4a786747dbdc1869f6ec5724a5d53e2820849c0e73eb9a70748df5a893922f8334c81c299b6589d118cd0d5ecf42cabb706af1908c4844e9c1dcb47b118cd7fb97b870c38ae3b92fb19a5a426a56b849a0736a94f56e1f9cedb6d7a169d7e79c0502c70f73851766967e38c7931e8d376ee6e77c84798235ac8a14ccb8471f57b64b2b54c69b0c61c89779435f57de089dac03539d35ddef2780ae478e3b5b9ecf9d98c5c733cb1ef1ce505c11042bd23b3bdae2be15b03ac0e33d625ca75dae995bce7b1519242b3d5b0a5aa969b2b7330e82e995a0da2cb2d7db3dd5dd7f9ef92c7fdd9eda084e4495286755f64c4e13b4c770e1a810c7a832b7d4c32a4453056e71a98da7f2cdb6acfd89d15a8fed48ff9e54f0ed4fa3e6459e26adafb602718925c94102e1b28dac3c4454594fe7aeabeb474b5dc7220443b21904e66fc73ce685aec61d17f3a2b3ec237224f6410ab527538b4bd190893f4a8b29881f19cdcb3b86ec1bbcdb2c808d5143592a6ff4a183016e14c4b2249054cd231e34046ac7b5b2fd0d4e562aba1598f316f35b75ee0f69c47897a8642043ea3e93c55e53fc03b609bd8971ca2b0e282451c21ac5cb060cf375bd159d2673444237243b1488ab1f569bdf6fcdc7f8e0d9ddd43a3c9c5c62c31cbfab592eb1082e4e59c237dba2 COUNT = 57 -K = 6d5b98f3d683b16c7c265240bffe2d8c -C = 7ec0e8746e8583a9eb597cb607c81308bc56dc9d4e6f9a2908e76d5b751f13d46f11963e9d48a3f385969e010ebd639fb8727ae8fbf3ed071d160984a95d8fff81fd9bebbdb8fece216d4f82be81ae3a4b209ed1660b78e92535652746f1c656b48fa5750ee313a61dca6e9eabd33a9b -P = c68b76e36bc98fafbf31946853451a180e9bb882bbb42f43da5a4d7f6f03616091b87e9efa862d63787bd7fbcc32486d6a5dfb395abf1fede00c7bb2884ba4aae49348827f3e838ee0fbd88a1efc663acc839fad5f40541570d30c4879c19eb2067aa11dae +K = 4443fbaf86dddfda955042f01cdd802f +C = b6da6a0836db92e3e6a932aecc283d9496d8b9330e1029ee5280bfe20d103422676c6454f9ab49ecb198f77fd178c4a399e8ff0fccd4614492f59d1965ecda7ca13cefdae5710b7b64bcd575a573d8eb0f3e51abd450bcdae5173f6367b5787f0faf5bc612a36e4927649b13b798683f80aeb21e4029b1e07d85c7b3ea31b0b7a270055760800ba1365b57d6729a71b657017fdc0cede7da7c8e1bc6b274c5e7d21e6cd23108be94afd7dfd5b3b071762f72ad6f106c24895cae5f6c3dade30d6821cd05b9f545b491d867d7c6b05dd45aedda013baa0e18abd5b3155f388213cd8c4301c15ce32d8356d6679ce1c6bab044d1559ca24e6f1915db32a20981b23eea32ccd220482919cb16e1a00071a5b8270afc3a0957d261ac7c80a3a9ea4ead92b11655c345f0ff2fa7fd665d6e976a9acaae411f1568b12fd0c824de0bbf28c4f1b03f5610e69eabcc0425acfc66c98ccaf3af87ed5615d5443ddc407168e37445a1168740674333249d2b8ea26aba3d5267c59bc71cb8890ebe898e2b9af21d3cd3e72c028844ba9781ce734c73df703369ae3bea1a5bc89f49f8dbc4761908f071ae7eba23af486daa56c379e6865574dd1a3440537724028fede4bf0d52f5802e8dd8d8e3bb043c1d35abd6a7ac497ce06e57122823fb576e4f29a8709dfe3ede391da2e497bc7e8999db8480392d3206438e298d6b91915fb583f534f4e9e466a5e226cf +FAIL COUNT = 58 -K = 6b1bf91f797fc0669504dd50f734b6ba -C = ac1f85059913efa604fe35f0ac4a86178b35729d7c986c36a3fa65f777e9878f11f4af1929d38955840c6df3315f5a89d9cee968f675221829d1ace41d4adac699cdc954c714df13c5773c975a484a9f1ff6f5d557c0ed2792d1766a37a12ffac33b3f781681a70c7f6309512629eb69 -P = ed8ae90ac47e31611090d8b5b65740d0c3109b676142e5135e9bff81cf55f2cab7cde0e2b19cb222b458bd28c4a84c269222bde07cde11bd1f5276d3ed5f99b84246c3b451566f4daf0f2e84364777fc085c22938b0be3b5d49162aeeb63efa7f0f1f034ef +K = 4b6d2d7775f3ca30f86e1e7440b6d95f +C = d859c96b7ba63b54f9de8f99dd60490cbd156449dc114a47e33c357936831480b6cd7e591bd00162ee39d39c35b7a8eed387ca87d705c631edad262159ac4937121f5258713bd2808f11ed53e4bc0f6660485f7c4649a06be1213f52a590a85fed78dfdf6f7ec3112aa26912f344dac2cbde592f24acd34df96709964cfd6e17ab0881de8c1036d792fffca2eed7737ed8ed72b1a02ea9836b90db62832d8d2b90d12b71c9dad60a076ce972a116c68f3f59d5d1ec1aeaa4ef87ee42e41dc4532ade58bf823e33acd56486136b028446e474ebdc8cc5feb9bcf54c99442659811c0e862da0473458b54bf9414380515fe1b133bed29e8c4c02b83b430c4cc4a780e7fde32d05f6eaf1fc2f7cd948d9d95cbc0c0284f77304c7d7870bcc53c47750e650d8188ff3c2a4d08adf9597d4d3e4e422a87de0508f4cc3f894775594a3914af935482e151ea69eaaa82590d9f2a35db85dfaca03f1c4c185cfc499fd7e569a42034b318b6e3eb7369ebe96a60270f024366480f01fb27ccccf6c6807e39e5fdcd0723c3446adcd7d81d5c1d54a2688fdc8fa26ad76c2324d4799d5d7f1c4cc740500a04d322c5550ed7abfd9bbcb69360958d9944b05365b4490ef49047d62bec91adb7058f2a7d90a0f980383c9d97d095fcbc90576c3db0046c82cb60871493ee618b465acef13fcec213455d228b5169cfa7e88329ba8f3059627392d6a518716046534 +P = 2d63f8b411435c8ae80cbc1b890479c4ecb73bd2d9121e9c1463531f90fb7b6b5e446ec94a9dec849dca2302a8c2528fbb25aeb7fa748a9548c91b085ac14840090c45d4a08d712357ab1ce91ed2c9746331a59f7b351a6bd882fbab00e319df21c4d18354d4b4bec4f65368c33400bab12a54e9fe22b9437fa884eb560cc0a6f8ee313738f242a6fd0dfc131e34244af83e9f15e59daaab520e83cf3563a655c57c64607f0c140ad3088b346e8ce808af02f432c8b604eb7c47a8ad2f2dfbd7aa8a668290ced5e769a5c1d88249acceba1c0f2a7d31afa71d4ce621cf0db8cbf78f7dee1ca037446a1fdb0d035d0c70c7477f848c20d4b440e4ec6c5fbd9be330a23386156a6ab693cdf1f9c8462cfbb76d9f1e443c9e579f5d2738ff6e5c2d8d75cb066d6cee75fdd46f51820770a12b385304bd67905a08a86b55f0bd54d35ac5c2102272db86028dcf9d368686fa5435ccf53612649cc1ee90d70db760d1ccb0b8c9bbe29c0e0e2396bb163162442e66977ee81106f9f40103d0935abd7468983866de3637ebec7dcdddfeb09747314f83f7f1380f8010cdd0dfaf112c675f0dab4072eef76d708d2b5c61323c58343d25b6526eda766ee96ece624157e3c15c69e60241a29e5fbf22fdd33cae1768fb58158acf39b8ba803083bf792666ff17cba1b3d84aba6f65ae6cf735c28be6dbeab5308416c1eea728430c0a6dd6 COUNT = 59 -K = f04ac7332fcfb3f73c4cdb3aaa78e093 -C = 962e177ed7bf78e7856634f367f773517caf32ffecd385cfc0a100cae5bd960dcb496d7f7df985c6bc233c1e7480e7b05deb1402112c95f3e28d3dfc2b54bb5dc6d6008837703c858e9e5e189afaf7f84b7803b10606bd158ec9258905ed9c00ccafe57ba0e24477c8f1561f3426c094 -FAIL +K = f340e859f2cea28c666094d1ba82fb38 +C = 2f144e8697a941d8c1da9ae5cd2095504e9aa88d7bf0f3235b17ac8d4722c0e5d49f35bf70296348281cd5df4bfff1c789a4041156ab968aaf041fb97fb7960165cc5361557b38fd26b67ca860fa2ab651829906ebc5790620f27e6476680674535a68440b27e3fac4a5c4c1ba3063673a0ac97d316cbd9e83bd9486bed6403635f394c103adc6c442ffe7b829f153a396cfcb2417c9506818b05276c24e2aa75c55c418b9666583ea6572b191ab4ee6da9470f0493a730cd8b9f2eaca97cfc371dd736e113c95e0472dd6eb18376c53cc60bf88ea3677045def903aac98ccc9770eebd9dabbd7f4c582e6fde03706b06601d6cae4d7a8a9ef35a8fb2d242b89fd365d1bc7d64818eaefda0ef693069b3d0c64696504e43c7748bbe33357aace3d1f4de4db2fad026a7823be444ad0eba0bc370dc17f39b344079f39f1c400c94a8dc85a6ed04c3b9bd73cca0641074d035222788f854bd8ad6f6937ad58f155a09f89eef49e117e2f92534f26a944b196bc6d0695944ae63932048ed8474a92ed0fda2353d5acfd31395aa5f01011f1bbc6e91b2189a74b949bf96d1fcf8c6d480f7dfdfe7840182ce8d7502cc0b99ab53bf5f1dee82d4cdd21af0392a1f7264c2cd237a4c247641c5f895ceb703ae34a28f188c36d3425f187997cbb8dd6bdfb64504f6ff9fae51df1e6d0a614d902cc42275bab7779040f902aa4864682384386e6e7502e737c +P = 7b6ffd4d70b1391cd83efb4867003329e0c71b1972377800e2c461c1416829530d75fb086a096a00536d0c81e622a56493b0d1330c99f0c8e7a6838336aa2aab99c680b4d5ac308183fded0b0f91b71cb867802f2570e8f49f79b6c10a447dab97578fe7289d517793fdd9a572ec00161ca9d7a02a9061fb697ad29666a9bc19475f426b1d4ca773bbc56d59ef05c19714b9d32afa056cd17de2afefe846996a20b06a89f6b57e1befdff5210594bc07c79140fd452da3fdfb61ae3ffbd0c4062ce064b39d70a485515d3f5e04d54d72f7835d90db2e4b55a4241d4ee9b62b1c1bb3268378227b028c3199be5eb5544542c026a03472a70410d9965380875ef4f2da60e79f1e1936aa9bf9a78c7f62b989157f667612de8c08bfe82484ffe6102cf1056a865cdf45b242b4380bf54b9e9caf77a71c1f3241ed2aae5280c629bb482c64f4a87eaad465fcc7f3b63d51a851525eb042bb7f581cb813d64fb172599a2c1e93950bd6de288bddf583883bd49e003db2347fa494381fc7e1e872db3a8e1306886806fdb6cb92478a899d678ceb2ec443d1549c64420176bb9f1ad9b50022a0b96413cb672fb0127001f82fe27fa39e4f7251d223552390a26e94356c8a23eee335cbbb220cc3354cd483a0e30973b43fcdd6f727c560627beebd7dd4102b08402a6ac577429eb24fe9f358df6ffa29f566770bb2da0fdcaa552e6be4 COUNT = 60 -K = a3419227d6a259842e8c3c097c058a66 -C = e0f3c7176693cc851d4645527b1438d160469a9674494e94ac50abe7e089fb7ce91dd23c693010f70e72cee81a6e3b638327e672a87b3c6431b6467d552cef928341bf0a5a8ed3695109399f0530b0664caba90a1b73f4cb0ab1593beb8a3e27e4f50a397e8f72bf90336e85da9ef44f +K = 6814feb8fbf42e53b73021bd9b0c64d7 +C = 167cae8561cd9da7a5644c77e61c93ab3556d0260b9f4299b4f128a2a71fadfd2631f60a078a19f76f1a05df47a90f3be71aef5d7d801dc98ead5ebdd4b42c6691dcf414886494e4926a754c8f1e41dca1ecf1774b5fbc4f51c02082fe53ad10dc04bf7d14d20515f47cabad3a0def44fcff542a7aa606ae4eb6aaa4b02fa55ba141fec621c7e158b835e373d658c109f0311650a8da85ad2a01a045769022ea4b7698c72879f98b13dd1acbfab8a394d14cd40336c408ba1fc3db69aaf779b5bf56f46247f5badfaca3aaaab9c98a98975cca7730f15277b92f6d432387b3c8cc429409a0246304374f9e0566ef522f58dd87486eac816f6d004d96e407156dc9c9b9a1660e0b3de0424675d28f810fd86b9fb1bc6b622875ba8a50225fa4550b6b7d1cc7eebcf8219c05631a98aeb3600cc53376a32c153d63ec2f1e21e4c294e64d5321c17bf1893a9e5ad044f3ac3d613e353f8c9cd2a7582244b1892e9d3ecbcca3e9e69f6eeb7bea96e4a0b8a64f474130f321d3cc9a36fc71d9dfb23c6d1f5f9c614ba9510c2a559cd67ee860558da9295639c3c0a68850d4a4a0d2720a3f568044ee421dc1f41356671eca4ac7f01a5ac1919a65a1d833c1c91511f05bfb18ac93113844dac000c35ad080f4a9433469e036a151258f6d7086ff073436f706224354edb03b7990670edc0f904352ab7cd015a1d03cebaa5e5b21d4c5c46e420889a8bccb FAIL COUNT = 61 -K = 37af3fd32cfff5ffe15d735a6496e446 -C = 5f657bf5d4011d98539c4d73b07b35886ad46dfe14d7be3342115e55fa3e74620a43786006fdac291b53d1c564a17d2d7995b169de44a902c1acd79dc3a6e3d0b24b34087cd7b3db242ee848c8d24d2e1390c404a2be441476d508b58feff9502df3f20f7484605e365094102461ac35 -P = 31ee1d94adb015956521589d4556828f7e4a188b668253a99b2c053a5ae8b3b6eb3b9cd38ed77d9add86033392314510011d7567c03d89c64e92a1100ca5b8a3978058d0d9054bb46cba1c22bc4de5fcbb083b40cc9c126a58dd4e0af303f272f2ff3cb013 +K = d4d79c1a3deda207a3b9ae1d07deb08d +C = 66bb3194f70d2b62a75e6a17ffe6ec90567f158433b034bd62b34adde0e4584ffb8670fb1cd892cde2af3c0d5e4c4831fa87705da481ea27a0450047de78f411a21444956981dc1cfd1d200f70f5fab09ff38fb325b8845fba82ebe2420252b66b22ffb04a592905a5ecc8062543d286117c656f799114e4872e216023b60774ca55c7aa76166ce1e1ed683e2c40f59cab7f19702c17af8a1ac8eb1d277db268b2f147276db6407313dc97ff5a041d1c19618edcf36828cabeb870a4122cd241fe0be031f26da818768d5afce0c4028016e01de6d3b3d1aacc8630c81b29c27df47f6f846e47bdd016a52801097a0f430dbe3d8061c855391834055d27304fccf143d31dced3c0eb2a89d885e9441c3cee126e8e2035e04d618434e0967d3d307d28cefd37f4c07c3b88bcc9bca8fe59123b337afdbb162e451f79b86e87b7f11a614b9d6f6ddafc265bd5a3afa2b0101546eae07c9930fe874f624a290531a4b28d98acfcee0159bddaf33dcfc9a9cb2203f96d3e1cf8458dc6a1d0a3ba561579651174abf0e6a826f88154cc3055bc00b23e809a48b4b178e92e25e249df83ec93ddd6d46ba9d567d81ff8cb7dbe77759c52b1a90617ed593cf20b377f1a76ead87fbb0dce89f39cbb7870e877b74fd8d9af24fa9a609ec363ab985dbb69b97e99c172cc6fb4510379fb47e540cee25d140bc01098419e90dde37bd4484aad7611b34b25744f38 +P = 6e2d5e4ab6fb8f7b8f577745fda8bf458133012018bf8e9d8bc5c08f796fc3f0adae4abea8637b98b0702103b6ad3717429ebab811cd1ef0beaea0c5d732504014747458e8301efba9ee31861358ac3aa989944dc6210cd96d236b7a7fbe936f32d48989044bb499bfdefb2a4235937afa180705f3af20099066a924a4e862f758ef091d8cb9ae7611bdce2edcf84abd9443d53ea0af230d8870adbdf728dfadb3cd4848dc0cb69b38b8e79c60d6fce7f92c2d1edfc74e27d648a75f149a38842535c520f15f494033b88e2a9693748e9fe15ee224b40b6826f3ab35f2792e97d38f26bcc6a890c10fb100af4a7f78959507374fd8de0208f1d08c0bced5092a2f3e0f7886f2366ce62b43ab9eb806ce09465fdf0d4588febc6d49a64e69d9cd548dc77db36a9d6e8572c9a9541b40947628ee5622e5d5859f9a8b08f1840a99b2d56e5342cb52f88fdb266c3a7ff330531563bca1d2951b7dae87bcb954cc5905efd49523b311b482fe807f0caa0deacb430ab906cfd916fafcb42cb245667e651e18aab9b4116f942dc537403a45bc1f193f804e138d12550ba4bc3286f652e200f80c0aa72f5fa6f01d5a3bee083fcf5098a8f7d1e32fe0d32567f9e35350de4ce0199512c012cebcb99ae31025b7993a5edc0996d2585d2e94fddfc901525613b6db649043a4f9e300cfb80537d659815f9db99266f39b51843d63579f33 COUNT = 62 -K = 8e15e6cd19b93e71693031139d84ee9c -C = 112f863f7abb52b1a4d6e6daddbef178239d8ad76a736847a70bec61d84c34ddec182b9a22792c0b8fdf0a5086f3d06046ed0e8b16c2615b9cea6309c6804bd3521125542269f451d4b520b8f347f358bc0f3d7146577173a1841bf9c20e667234a9f3f9b9495d37a2b3de9950383d1a -P = 271c88934c8955ed8344c4c217da80fc42d7ea556e99df37548a1dcfb964150ee2224d8792184e6c32214ea6ae854e6515435c40c9e129ae31cb45fd2ee9e75e5f9f97a329abb5b56eb143214d554a118cc853587ac93321344d4b04ffb991538af0695348 +K = 27d37c736776f3d1b092a927024c0b84 +C = 9c202847ade6a2662acd155b81d0f44b1522462a11f80ade0ed041e097fbbcbe5cb96de1abf8f64aa9c0b7a17e0e2f02cbcd1f627eb569ecca8df5f8ddc4fe5b93ffbbb96c8b031bcb4bf93bf2795044e40a9bbe59cf07040489afe974c8a8204400ef347d8f5a4eb57df5a8a1f67e69271c40796cc6c5193a90a9cb58f54552a2d3770a93118430a52ef72b369eb074f6023773875eece5c6a27ecfe6d862e10f9974ebaeb830cdc756a77878bffacd2828f00b1ffa4a2b375c9bd0d3d01d456f2c5b9bbd5ee57b415f44bf3d51bb1dad3119a24539cefd9c6ec37c577fd93d728ab9cbf073defcb65081796b2bbc3b70ebb11e670de9e740b267331317feca848e53f5b1a2319de9f06ed91743e2036cfb3fc5cf3613c8d3ba1f002134dddd88a6814470de9269fc7d4cd23b2efdc7134a8219b4257ce2b73e743c2ecef8a9972f3798bad2f200ba63312bc3b34d6c45aeec4643be813a3dfd65725d3a7832c938a6ca9a1791e0333798fa574ded52ecd7817c7ce038ea2474a6f15fced2c3b302e12981ed6e2b70d18e19ff1818bd6807cbcb9cedde1cfca0f606e81ff0f1a2eef93f100d1440b1f5c427bd574b7b3d9f14d04c7699723ad8de10f9537449fb143e67be558c55f5de2485359d3e4569e1d5b1d1145bf5da49811430dbb3786bf9ab062fb45fef9aecf8433820dfcd92ec9b6290eeedde7d05f4bdba1e69c0bc61b2c03f14b0e8 +P = 76dd7c81693391d9b9f6afeeea7ea69cd2e24b53604041ee4585edeec8cf614ec29ca2d0fb0265b8e5322141b8c403fb28cb7b849fba19122b74ced23faf26fb48d03e485e00936920fd0ff92a9062248e12e589fb83ad31d61212e8b291f3bc652a7e119a2bc40bf3c047360abd4ce959f54fe2d83f2871d5cd465074b3a9162d44d0c349811238206a151d81728425aa77e5ddf73bf5b827ff6c3a76f01541eacfe43712d1223ee4ab3fe230b74cb9e2dac9fe969c805fc917f8df0e68ff2a5d22d2589be71b53633a88b5a7c4fdcc7fa8b835ce94af3b532702f1c803e5116728d9e87b25e3c2e3f7d068656fbc4ec5234837576007254ae4bdb21a8fc2e9bd8ab24013027f8d5297399897c4d847bc7be60950c619d83cd59433a3187d806719c98293a148a91bec90a2eaa0b218b8f46b695e37c2edd52f56a67264793b654f1b9b8c326bd9be3df17614e182ef2e7c10a9eff418f8ee06889965414b6e9e4cfada719ba34f4f029a590ea7e8953333952d69d40f145bfe921242944ed058cca7046e293d493d3df30aa3303734b36da038671b6e21f438a2e214cc06c691f83ef87dc48a6985beac530abf2af9462c2d24cfa86b80cc22763b40030dcfae96c0761bb55e0d34e9539822ae908c6896c54ed6fee7463c145b04d18da488c475f4398c68c15f86af98ab300b69919fef4a0a84c6d498fcf77b8cf0cd05ad COUNT = 63 -K = 1ef5270c1cf6479452a4765a24553ed7 -C = 583b41dbf7dbc6269753ce2c9dafff689b609218199f631e06f2bd0ccd57ee2ccccd9e931302d6bdad7fd5d6f5314579fe9324dee96a60f90d4983179fe4fed014c0f34b4880614a2c1cd0e3f5c6329f7fae57f836af222b6a70d8846ad6ed75bffc545038cdde19454b954917d98462 -P = c521cbb91d0a901b77bbc1a5ff28619ed81cf9b8f5681567f5bf206f6db465914872a1e4e7f4e5b72b71a59533725da8338f32f7061b10cf7148f39a1ea8475deb2dbf772d97a11f345123158307931c8bc50f5835ed94f72168e5fdaf67267cc854d83149 +K = f654219638cd96c6828c04cf771398e1 +C = 144e0aa0f44d1ddc2a18420dbcf7c7cef4a2e7ed17887bd3d0bad99de6f94a5ecba8685e0c7c4447f5870f1f77f0724f3b0495e37101dd49bae424fae27de83db2b6f7618ba5053ba0e2a2187c84e4d0c8c41c798498375c740de38cd8f6608b8516a816ca4f5004d9826f543ce60fce0114fabbe8b1baff2837d1c44704ce10e76fd4faac05189000fba99706ba0d946a9d75ca25cd70b39f079ae2cfa63f87847b6d52615177bed556a98dfb14d5f9af1bc30e4ab3f1a776801359a4a0c0eb796944d46cb7d2ee65c7715f397a4563b0b8cd1b84867f3b61edbd4f6db5514f037dc2ee4ddf77079fe85ae539130cdb63e5cd242f6e78ba80201f545ed3f59e3194fd98bdb7d90678aa12ffa179d0bbb3d93a01472994db3fe7c5bdf1fd3ff240e3e49053f0dd9ae4cd5b4f48fbe9bc13f7303371d115f3166609f1ba0e32b657214cb9a79f00250135133e7a0fb8274df143b36df1f22500a2010b6f7aa0a392c6670fe165db36836597314537477966f543c303d2c32355c9d1aac1fa2b29c8f250f74fa7fa3a0a65664949b21379d85c4aba938bb6df3ff70eea0d1af94877fe1d31d0f028c151d780ab3b2620bc5145f1fa83dbe1802e54421c20cb8428d4383c7e18c6d8f99a027a106b676e84b9927385ab1fa0afe5ad8392478015cd082d8ff1f005226f2dbf717d9e3e9a9d005ae009130cdcffed779a4c9a2158229fca9a582486f080 +P = f42378ea562ef7f8ba7a7a86da8dc6cab99efc939bd2307a144474f8b7eb6c687e31b459f0c9ddfc102074d3035a4529b1862aa41507a0355a8d448e573a88a1515e0e4aa84b86ad1eefdf712f6a58f7adf24b49d9b87329d172884855f3c2b7731518a1dcc2d5337f6b7d46289f456094cef362a63f642390021d63ff44ca24cd47d3ad72ec9e546fe6736dc057deb9bae609b09cea0a2e64b10bdb09cfdf9822ae37dcf1b144420973666b18dcee3677d778282b21a151fc1f3b2dafa2963614f47aff6f64d679879f80c9f8369fcf3ab0189540d462e21e06f00e69df1eb6c5441515d87246ca61a3b8df0a766610001e356d81b7786cd660e00b184c9ebf0d132f4c2adfba0dffa62c7b6e744d9acfefa7ff7b8f3386adfa69a851478e5aeac61f962891da2c0d7468f2cb5cab8434030d42ceb745d4f08691c9a3c489a37cf52bb8bccb80831a91bd628a5f221e8ddb21daecb429f52be8460f4cfccf2c77793c61fb4d8e172edb56cc69815838f59786d7b5a4f205870e0efefd4624ecbe62217a46341c1f5e001294f624d242fd5e0ef8900de2dc6b96843f43b9d2674e9ef8ea8f267ed8f124c7f6b6cedf02fe8365e8be9b11f9af8aa59c7bd21823952424b0548600b8efb5bf9526df3c8b6b451cffe878d60b5d8ef2c7621b80347660df72de8ae7b4613a8e9dbb7c18d04f4e98afb5b54d5852aaa01b7fb37d61 COUNT = 64 -K = f234e4f0f5214682d3f230e41ed060cc -C = 9ed702153db803ef70e32692eac2e5646fd7783b0577c52d4ede25dd36876987d681685f4be2183d6de1d2f205a6bbf1597d66f6eaf6f91ce3d799e850ae52cd22fa71efe07f629b8edfdeb5fba881876427e20c53e249bd4b4d13ef3ef3567f977f3d0740c656b1ffd81813bd06f40f -P = 7d693dee84ceea3498b2f6e03759578cc52055284e4c6136d8803f7a0c959188ef266aaa6c320841c1bd4c0468c0a30da2cf25039e421b7f34c0f56e9c16d68a3cddb3368429e1f5d53686b734e5384df2b8c266bcfbe1806081c302e440ef605e836df0e2 +K = 470af0df82872c85d6d247e485d0098f +C = 08b4a724f679a2a8e8d5e764d0109df47603ca83b1526caeabbcd90285ace361f04f3d106aa06e246773382734225395cbceb026b4f0e3fa02c6b712873f3dd2a93a7c74a2745f302c459278f70a1b37661a285e7c489964e6c5234b2bcbc222b5e464a935582726affdc2b7ad59da44f5c311e09cfa90cc7db70bacebf868cdddcd6cda4d6fa2d884b3affccbb4cd9549107695d6099d93c6a7ab186179e382edc5ad692bd12ed51a758e7ed229ff0b4ae8edbe87efcf807ede59c06c5fa177632c401a21b8abce00389beb04b6aadc2b15e71707ee25060f0eec75cedad6c02874eb64484a6a8a26f14db7b7c633d1525c01d6fb5fb0d5415e4ea0e21749ad9714de23aca7f75306cb2bd24f5a976bc356a27f5375baa537277f4ace5557ff4baa63efcae2e4f276d0752713e70f6c5be14f048a18ab749102fdc4888b632bc2ef0aa1522f770da1cc6c803396517a390bbea073acabd282081ac4a63ea88235978754ac29612603894d9c9796688e1b97f02d5cf2f19685ebac732ae9a02258304a2d145635de62c725af74cf1412586d80a748ce6b2fca76cde960152f10808948c563c6ca46aab2057801eb1a8e7d8cbde039024f182734b422fdc20cb04d02fe39121f0cc65db233e35614f81adc926cc41a31a24791fd23cfaeb6e6329df1423a384594873d5d45cc0653c50fd6e01d95cead8f0e61a097ebd9d33962d4bbe6bf536db225 +P = 4ae9d5977a90442e39933277c713b9c1ccce18a2745c76878cf8370fc5cf927a255d8881515118226bc40c37c797ab1b04265eaab54d4099620b8f0ed4fac3930572c9a7a5439220e1ec0a071c129de3c50950f2711826a7fd93dafded5ec7f3fcc9123f2e6c0744fc917a648ac66ffa68e47095993d2b0082596d417936b21c73a73d4f9198cb22e8b802e636c91485c5df85679f5ab8af5cbee6bad17bf630070f81f9ecc9538e9bad342b139c6811a693ebc6474ccaaa24d044e24aab06a9d221ebf8d41645c3a3d9aff364f45f20246b7a84588b8b69e63a0f27f041d4427c78d981f6e0c41cfe8393750126ac5a5723dd2f368b1612cded7458aed1e38a2c4707da4608f9c9871603a2cea66cb9a23402a4b1af975b569b9e477c4b55f65d5f89402934eb92881cb426c485ab11746df78cb3bc8a8a2a042656e9acceb3e7625db2378f5b50bfc0583314ef6123cddff5a3b964e199f998f5d4f056116d8150dba9ccc81225ba40bbafea5826e1228383950f59f4c2f8112ec690f203962159814c2761e14de872f2906fa178f71f1cc21a9c16d012018728765b50ffb0a935904f1ddc28ffcd798dbb78bf8440cc607a4fa5ab09a4ebed4981fa44da71133d1732cfded2ec957620a7ff98d2da9948faa532ed92f6f7a1068c569b0e1dd876f8ab41bcab91e4ddf9c3ac3768728d1ccbacabd6646d9ca4b5c88ea96f3d COUNT = 65 -K = f06439ba060015be241cfdcc9eab3ccc -C = c742f6678ac0aff2eace118bd458aa1c36c4b85b65d3dd5209a0e62d9e0c0c6bfc8102ef2d40163fd6e2260ed040313d528b189932e026b80599e97020a01ce016319d281fc734cb645f9b47990698e82a6805501fadf67ddec35f34387c1d4eb9b6f924dcbbce2562612d47c72a9d59 -P = ea2ff8217a746234d0133211ebdbea2ed11f25877797170c767a7c6e6127e869c216988f2aadd8055e2b2d9230051d726107764d2451be7ceab1f77c003f31dbceb962534815782fa1529dcf2f66178f30e8ba1b9ae0ed1e0bc366c63af7320c800a1fa727 +K = f99f9edff8185b3bcded314c224d6028 +C = 8cbf403fc641c9f7055d59efe06d110404412cb41cbe537140a45b7dd1294249678d65bbf5792da58fe47323fa43cb6e003b3c88869f570822597cfa3ae69cd1d2266f54b4d5e54a06e30bd368bb0b2962145279b3ab0aebebbe3c7b31e4cccd4b6e8731667c812c1500944b7393c58e7ffe550eb69a80dacf82a2537d51f841b6f8d15b6e3751c0012c78ee15ce9b528187cf6661e6dfbd62597022d2327b518407923028fa23ce51bd1db8db7a3adb73072a2d3460b0ed44ae11e1771414822286d4c0febfce7fc8761d9cd96203d72394373d36e6fd28076beec0b9b15674f32bdf9ac5301610ec1115fa9a691117ed6bed637e0f3459591ed83bc25e85f9e965f03df71929f5ef2205bddd052060b2d9967fa822c0e932f46103f3477d63dd18eab1a45163dea0a9514217ed068a3b5d598d557e13a190f7d0df72ace65a0118e674e25cd2545c784c4700acfa922686ccb5e9ad672dd141e2fdcf16b7ef187ae54840841388882595138afd7ac39352fb862684c6e93e85e210a71dbfb92927ec043e53e93495bcb1ed359e2dd8c673143073cc9369f55a54b8d5308e0443c1460b5c59d743446d67ac45402f21b14042065e9caa5101d6db0b5eb1451a90a475f331811c32e7265c1fb3f72fbf129bb394a4c3cca73643df3c6ecf378eeb07af74fd9e1ce4aaaed409b013e7e4071033cebb1a169d43770d96da9532cdb1205c1418dac0d9 +P = f3e0b6e92d2ee293cd46cb2758e810aa359bb7992e726008e7c4025bd757313aa1389fa3ae39cb81822f521b8963f17f7a001caee3a85bcef65c7e13b88c65f0fd8b5bd0aca0b5773545fed7fef93ea668c5f89ec65ab566df6d662f57cb59228366fde77dd8e34121fe646e5fd6c6cd569d84add5a1877575d1493c3d810def31f09aac6541f3fc086e63a7886c4906c5bb689475a3deceb65b3992c0ffc5e5eec7fb9611257619df5f1553ea455621568944213a2f7217f3e0cc80aa6c81bf58707f68325881ce08944e729bc17a07810ef1f2fc165d95c353d0320a068423c3884dc949c72161b56b91e0bc02c327be18c077d7d66fe98726a2c632824ca6f6cba11d06f3248606ff3bf75bd7ed31eb48a44ea7bd3a96a9e8823432eb3bd7d2ab551aa85262ca09898a2d8cc1321a91c1defb727fe43f70f1caeb81a8f22859f7b2a5252cc69164b5867806a57a6ec52bed5bca59c8c7bd3bfc731ef37d8caa86baaf29807c77a7cc840de805141724aca376a11b0ba4d36ed5103bf67376b5e8fed58631cc68baec4d9805eb8355f4df78450f9e72221b90f1258e700744c5407ae9390d5cee6ed32800fa1617cc056083ed11521a63e34cf34d35c228554753b4a3e7031ac4f6a818d5490b81758364a58d8d79a78d6f60ae6db33a04491fe5bc3129afb63e69491746d1a78ebeb578eb5b48d0083e240a2a225e790c1d COUNT = 66 -K = 2229c91f2a9aef51fbf16f8d7c2259df -C = 05362ab5b913907031a92fae6928b5f2a621de52734e5a66f003f82c34b689a8e70c019ccc92bbaaee41fad8ea50d9758e9a8ac7617ff4392f8caab9662ed857c72824563d1b08a2ae88deb1d7cef60dc007e1903d638b87a02d6299fa7899a5fb3661868a2c3da2771cc1e8aa7f7e4e -P = 5c0b4446393f0a3a14f94d16ae5644260e2ae6004001e808269890762ee4b2f6e1f8912bd3fdeff155fdf6fbf73a891f61a97f11e11181c5349b27f6d7c13ef8e810c61bef28ebe86ba4b75fe846f0d8410c5df80d15039f2eb23d97abb3ee6e367a4c9287 +K = 3b804bfebb00ea817c1cccbf6c002a67 +C = 4829b01aa138bdb2f1a4aa92d270afc5d129deb4cb1d833fecad14bddd30e3838c340b5a3f174826c472732110f3aa46f398aa88aadc99980b5c06c51390c1378d89d879a85f0ca50b27e09da06b0602d58dbd260312ea7ca4061be4257d182a07d6877cd90948e3316d7049ea7b6036dcf907e198ad5c3654d35c93fb0f82ab7700c8c921bc3d2a0c2e86f0ad634fb09cb0eb4295f3e3471a3cdaf8df8fe26824748078b81208729fdce6af541d475489990b17fc742b7c1460db1b2a7437d41722bf78e23c7e04e71d34e605e37c85001974afca4f76a954d5983c77793fcff1bf7033086a6a1c4b53ff6dcc241409b2648ee48254635d33ed6d5f2dc7d5148f3012bcc286e5f61c1cd16a3cb3110f4f306b384e3b0cff76925178b4f5ea78729c27ea7f11b65ae0b498d60647939d3933e80fc89ad687c19ef101f12b4f8314a5c3dd2922f0f7d772761c12a4b3d3b6ce9028b5ec5afab2baaf8cc89995f2b3eb56960588b444219d32e6c8aaf7c78b9b0af6d04d34a0c39d9009e2b57edda0a405fd72cf1a585d4cad96c99e3243767be831394fb3dc24fe337c75d179d5365ecc2999cc9403912b46f253ef5ce6b65d3b24d0b93dae2eba7d3d28e2eb86bfde0e1ae5c621e4c8f073a95a6f3e27020bba80345484c95f56e1117cc86e9cb05749469b3d271385ea819baa2e00ea01900c8d385e6748e7d83536f0f5a587afcfac17c3421eff +P = 86395c3566d562a5b7749a45907826202771553bb9ee635761166c93f73a939c66745c1c72f6c66744fbf3d47a5ad1ff373fccbee920e054994861a72cca4c1cf2e4a17a8aa9f31180ee04645d27712db481d3567ba3c8621054e8b52fdc25cde4ccc40d8cb06d5970b76551fcba527fa7b73c312a5362e7907addabf6ba11c2cd75f6eda23ff1995bcb86f2d1b93925a5d9894f6efc672e919d0e6c6f4be418009cda602a48138686d4906c3490ce6177f24c3bfc9eaf9b3673be4821e46c9ea67ebbd1fa9d7209a39aa49e9fb3828025828dc786c06684fa5d078489d96f4e0401fdd114726910b6c81814001300062825ad12fbf3cdb54dabf4f5dd3ff97ea802e4a486790a7fb60cd7bd7589ac8feb8432bed31e0d3cd64ac51ec3d659852dcc9b00bbafa7a0d63997db91917c56b9bc911dfb6b6527675dd8dfba7fb63136a43871b7528b469eb0a00c468bcf6c838f6abb78a186afcb5aefd3219083f45809b5f8305e6f903fc09d2037d419733e310c23c0ff36df5b43a0ee4fcf7c09e0fa6c211f1af44ab4115da043dff0b862931725021eec2b9a2b429d01665493346ddcfcf4259fc8c5a730f50f5081b6536331b563925480335719f4288e99b2b8a947c5c9ddb676f00cca1dd363cb60cd06a6a6854caa9c6ae15dd04fb79cc5efaea9ce215c25ee84a982702c537613ead4b00ae7f2d67bd3f848150c2cd0a8 COUNT = 67 -K = ca2306edf7dfdd730b0062607d5a943d -C = cd0eb7f95958c756334dc275e734c3493d7e697292664c246b905ab022004bf895ce72d6ce56454d930df8d962acef6deceab851d1d167ab7bd5dc3c4361d2e6a6e1a8f076332932efd658fd746adac1e846f424659b5dbbb52cbd113cd669d062f0514c5ee0038b2d85934fa6a04c56 -P = 8c4896036a08a70e2966df55704e4d4a0c038c4d7d99f546a128e320ea18d6c309e2a7553eea1448e5df2f92c98e0cf58acf79a36c72d446f89104241fecb3f448a30245e67d0691b47c07045c0d81c45e6ab2538d08d92c75b226b5e4f16aa5b9e5a1dad3 +K = 34331440e796209a9afe25c2cf7b73cf +C = c6e3ccecdd3e26574ef6d626b98598747b99816ba0849171a1a9309c57f43ceaeab268496fe8e787ce8e26d42bdca9802b9752f3bc81d007f843fb17068761b29c999856756660c1f27b80a0ca6d3b9d9f25039b89eee7ba2065f5ddc05120425fae1a6e8c6ef3e60ef60577fc63ced6006e66c43e83f432721092245487a569951328245c256567b36c2b1f5d5337caa347594f2802f8a3310214bb850ca8a2c0ef62ea67bc51b576cb03c4c1c75d3077349a3c022f646952a48a396bce407310186b93a1f91892f5d842afbc7aa853b049f6ff64cffedbfbf841ca2c3048f54734d2ecd3fb7569e63e2a4babf64b6d271acdc408f7589b1e11ae9af9c0ad39c89b69e774f0b7a43106b8d636706121b3d6bbf1c16a2688ee6c005b07122786093b78fbea715775a092959f2170503df7fd077a39a873d7e382c7c6717cd98788a4d9fea809f6fa8a5a748929a2ff2c595e7e28cd7dec413bf718221229d391cd27afe85934d830b018a1d27bfcb41fb3716378f4c1334ec3e3001e794447abacdcff538011b4aa60399f9e0ba88fea6209cb4200d1268bcf5535e967a5360e10159adbf58e805d20eb06afd5facb735edd86c42627b33f970edaa7918f8c5c9766820e6e0363cc2470023cea80fbe08166928b0e41fcbdbc07b9e7614d6dd718dd087d9cf1b665f96ed9e52d5f5cf156e46c0b5f68ccd9b9336ba3e4864bf8a18cc740709f6e3d +P = 2d529c3e6b81f08f71e615a2d5457e97172bfbc06a91e9df92d4f75f9f4d31d4a6f6a9a33da4d337e60599cc1f775d7f17b5f9cccee62e19623f4df27b39ae6efa74ba0ef3780744e686fd8f02991970e49b3dcb334b508ec5b95dc98489a1807fcfa533d12552dccad8a753006a21866bef1ecff6c9e383297991257d77c00dbb7593fbd441a26278570c7a7f1ed16fd869690df99d81e95688ac30cc0432de26b1b9d6677db7decc516374eb50c3f8785169f1035b3cc18ad56641d8da8f6b9509241dc54a098dfbc3beb0ab84ba180975969e7ee82edce429d7e9262aa2cec9b9f65f6aa72c4c9a508ba04f9544b208283ff854ad027899e5cad9ade57a486736988bf522bcb3589c43d933ffcec89026330e4fb5d0f49446b8cce69ce13fde3edd69e10a2c01d29e1b2170918ec10a913b9a47e4230e65676cbe57b397eaa292e337787a259304382671ef14bcfa462e9e39f35c08c6fdb4c6867bbcc517cfd5f22a947a1abc71b842ba05c5a15461dae247151b187f7e95c762716114ec6ada0c6651996d47e0bc230c71eeb913f3f326c2f0f409c43f81b550707b7c6564b26bc37ad44db4b619dbff733d436bf93d8aed5804cc24bf6f4e59233ef5489886eb6fed49a28fc966f04011eccdc89abdd70771122506acf25dc45414a3a0ab0cd47a2a3261bd5d94434c6e5034ad0ef404b20eb24a04252632f118bd0a05 COUNT = 68 -K = f00b54aa53b28994fc44675d639dc2f6 -C = ab54205032739eb7f8d451c56e0d13b9877e4fa2fd8774e0ba0f9a8bb80cdbc94e3f75827b734ac37ba372892b1434d06062eb46f23f371ede88f3c780fb3d3d7d81c159c0f9aa266bdaec7e8b796e15e9754c09b3a4bf025355a78d59a4d4bd1d8c688409bbf591a21fa10cfccd7e25 +K = 59ec3a830e33f014ea0e5940259944b5 +C = 434198c86710bf78972f66057b60f871fe57e7bd706dae5f4edc6ac2cc2853189c9017ad17d207c056472038cff68f1ecb5d6dd3097f0120fe7d229e933c7bfb49348c5ca8890b17966094ce21678a3c970263d60067dbbf619a82d90854601dc450cf2c3cfb5b5278fb9b4b46492974c61c1f1351ca731fe2d4f3dbd6764c1f76eadc04a3e22e3dea0932d017475837ca4258e8b12f23496b3ad6d8096be109a610190826a10fd1b3bd5b1cc55ae25e521f0acf94e252bd5371f315e8af8cf25def97fdc4e133f0f7e34b63ec4951169da381e31ca422feadb5f83ba7868ee67e9a5f44f3b8d925a9ca743e0b0c86ec3ab976beaf1d3110666d35ea1c2d3c44d704d63aa133325e0deb87f15d4df865e258730b3cc58806bd509d4e5a74c1fe947736a4134811310d090f45ecef7d149de8e06642c9f4d74453565d3daa844f04def663dd2aa701f04d533459ce1b439f6eb8829df8b9ea1ecf4e3a16174659663faab8eaeb0e31a5560f4f85f8f667c9086ece94c91b97cab814bcaff1601ae7ab883ef8a5f389e341b7d4d9775e47e8323146151f21227f18476c2d92fe45145bb9459ef64dc10db213ebb6ab98b8770a7294d88edd0834e9ff0cd01efcdc320f693f38adf10acba0a768b8c6703f922fd55ec15400c0b557ed37199f5f7364e18601182e430aa4aaea16beb18a1fbb7f849254b2511abcad4e7dbb44ac71104c7d5ea2e36645 FAIL COUNT = 69 -K = 8cd9c9cacfffa8f602863350ba55fbb5 -C = fecd7c477137f601eafd5879cdc331c5ed8898cfe933dc8a97deb5ecbf074ef46696a33779b869c3b0e8ba513ed5ea29fe75356a611c5e2187a99d2417b452f20a998c5329e75779490a7800764bdb2bb74cb339659dab8a73f2103d6603f159682365a22c098d6359535e5ce2117a02 -P = d782e4a6ed5f78b53ea01fd1eb58fa0595921a9d041da2e2c12c01dbfea3c0963c83af5eceb99b2fdc4052086f98e1ff30d0be73503df1440bd7b6208464e4b33b339ce8281384221f6dd822451f0acf33cc0298fd69ff4f9ac2ed4eea116f1755d911210b +K = 43f642c63512e6abf78b51acf62a362a +C = a4a690aa7b1d0db0b755069af6ae3d7c23da8ff4e0db15328309f30cea1d48a6afda6e8daf196bf804b93cb016f76d1cb6e0b4675effd8ced77edf35022c871cc19dc62feb869d9ac4811776b53544da2d9d8875f7b3e62a8538b7d62d9a63238bf176404d24ec1ccf76b91567fcf69ce2db7beba0be9012363eccdeaf82476be142f325a3b23a5f0a10e7dbea79c9be7febc79cc47eef8bcdd52575ea2248190cb685da09fb1938dff5b5eec5867402c320918a79327186bddede331d86b1704db8af4748f7e975555ba0911d14f0755ad52550e70ec5729cc6bd034daec5de193af5a8400a52ed1ef05c6e138624ea75bb705a2b8c4aee050c447ae1cd44b550ca603ab592b9a9f11ad71e8f2c53fb9e7aee252f37dd5183bd8ac6ccee11aaf4dc8d65011e3626e3a23bf03fcef23adf8fbf29efcfd0db1cea62a66e549bfc4cf704807f18564d7ecbec2ce72d13f65d9712baf00809ea94bdff5504a368b70e3206cff5213c4f93e26454816b217b9798dce9969d07ee2da2fa90077dca0662c4b6c0313119f87dec38cc25a03a161f7aae78882c3ef11fe03a6bcb4c4af76068e0d98e9c77be309975acf8fd7bd1bc46ec847594fa5c1d8576366f22c41e050d6824ffdf227049c2bef7a075e8f8e65e0f94689ddd48fd1c48a06aa3cb1127b054e9f30c9763188e9c17635f08aeae957ccdff7affb61bab2a8907823cfa6e74f3a5794a4141 +P = bc208bfefcc768b84b0cf9facd15660ef56dbc579d5cbf4f6429806c67840a7446f180913d12eb682a09718125636d1bbe2725c028c4b547520161b9f80d68aa004270044a1dd40362ea45558104bc8a24906496f8de131fdc196e4f71f803562d632715bfbf47680afc7597778ed0fbbafd8d423a0a8a16e3075a986273c002add5574df4a9a102a4c8d75f245ac9c60be34ed4d07f31af4b5bb9f2cfee21d9ee6354a342295b481f6af6dbebdcad4de96a66606e8f937dd1d572abe7a6394d424ce48812cc8b48ad68f4bb02e7c88240a4244be162d92a41c864f463466cf337e08258389f462cb61b0ad0d625535f849c5888f01f288fa6dcec7d6f44a2096b1582ffbf0831a4ae47ac8af7129f63f6e46bab99394ffad275f6e3386db64b5b07bbbb8210b0683f7830a353447670e27ba9f2f24bcaa4b20d71edd48c4f1e7ddfd802e70a2e3aa2687789da25eb4b6a13ee2cf895773f66e5f81d6aa5a0fdb4aaed75ce9573d5c78aca79be7f83803ac1ba372578bf199cff228690f703e331e324d51630e3e83b3abba624a1422965a70f215e0e533c206b2d4a2ec33920e9dadcba107910e5f69704746d2db146b51617e934996ccf23c9fe2c213c04f9db29fca25dcd74b6220a98fe6e36c21e75444c58dbe59ea6bdfc7bf6f0b543fadbec1086c9a459bf1f11487fc788f18c5dbd965742d296e803f0d1a81ed2445e COUNT = 70 -K = 670a1a2739c076a0c6f7b5ab4b8d573e -C = 78943d49586aa460930774d7fc1af0697db5854c5446c096fa1137a010f63d2bccd8eb17fda9fd9cbca5d8c9feee8674382b2e859312b80383929f417e826a54936b87f0a71556a3670ca9bab042211a125f557a94f73ecf6569ececc533fcadee70ae202491b2ddb363181e4823623c -P = 36f771079ff87665394066fd70e5f2910a086c1b8ef47750ec83aa3dfc19167a4a22b9b9916e394a7dadc63c1fd73bb5078e7c274f28abab287cdfc7e5de8e1cfd318105422ec5d02c6154d0359431615e3d0fc9afbe4af719fb4fbd81f11f1a0253130043 +K = 3a6f4a58f5afe447e59ea7224ee46277 +C = 215de5db1db6e5d4183755c1ddfcb28f529d7001fe9690042401b0780aec8ef7329433f500d3e41f0c8c87c61a6710593ad4fc665cc471bedda04c12d4f5f0d6cff5911f3e74791ccf057120ed31c5faa70c785fe84f6901592d4b231d79103e34a6820c409b38e67a1376d7b501fb87dec526c342f0bc02693c4acaf0aa73e2909cc78b3df547563ebc965fe37af5e981fec65d2392b2d67b9a09af4e4857e77c9da63e5a3d3fd8a81f568b96dfd032d39b4ce3589e796fab9210010cabeeb700b2e45acf00873db43745ad9b7067184cd2f42009f3c4f998452f6da5bab1e8bb8504f2093a5f18b3ee23e2d4b61ec3e15d12c2e8e90a4be2b453d03b4f67fe1096b2e1a707ebf5e7006dd71b5f18731edd7a2ba043ab0ac30886906cc49a093bb8c50e14a4e376295178bf6baa31a728908c9ae921498fdce4c6722748332e7300f0d5798f37a08218bdee4c967927938d8a2f7e2f6b59128745fde3ceecd313913662b1d4ad829ded45114e735bab3a476e94d6f9b5e448ab371bc80505e2aa2fdf842c8f1fb5eed524aa21c20e50249cb9bdc6a8d3ebe6290020674a57ea94a856b900d94932c1f0800f664e711c03abecda2d4c12de2ea6d6d9f99bf1b631e91f49bae373694719123aa23eb6448bad0b8df48ef9aa8fcf04adc28cdd75c6b5f9d501d4640cbdbb584ceb2d2503d98df4abf16efd1da86adc6777884753c897d6746cc96412 +P = e1c50f73624207ed32e9f1aae8f8e5c7466d69eb4223377d52843c4b17e29879feab70299f70c7e8ac42ced521f694e8b38356336a3544065fb7a131b7724e441e963fab5a0effe8d0f1b4c34275b8c5031edfdf21909d471514a4b382cd5c2db9a7cb2f00e89c620f5edcef8cdeb6671dd62c98355b85ad12c420a15e71d60c1f9cf2ddc875bd796cffd3b254c816e2177cdc03d814abd9b17cfa2fb4787b7100d62023a443e92b9b2b80b69ac6bd0a67fdd82ae86dd6680c607bbe73db6e9726b31408698cc03d5d1e8e478eca65280145232d2a2f56fb13764df7a305c722d72dff9aa31307ccbcd986a7b3e8cc5bc149f14ac004819aece2d577502c9e83ddf66858f87b70361e0f4b4ca8340b15c34411aa69f9960944e5f861b3b1ba0d98896be8e98ee2c3fe0ceed782ef4fc27bc4942670baad8df0877454e3e705bb6557b94d948f476a1c337e6e6d41a6e284d9addd223fa6b7eefd15811eb058c572a6ce6297f43b619c487968f80768396eb5afefe0a9d11ecd66ef41dbacfac3cb506e70d3bd78679f8923ea3412200e22e0f2d803ff3ee7e72235e8dd7e33406b12a64245d11402508c87ef2e2250d7e83c11a71480277fae17fa6af47706807bd65d6193a8e2cb37679462bcc346450c1931347842a6ffb04dc420034221cad166c620289a7f162556189cb09cdf67e8e73156b6acec466f7505f2b4453d97 COUNT = 71 -K = c4bd1b7e52b8501d8f9743da0889cad3 -C = 0b88a9fc4b592c012d23b88f7d2e0353325200a7b291ef509b5e5b5584a31f383b94ae786233485107c68b800fd3982c48eff9a0907a5314f16cc8594faec248231a75cab1098b1e9971e46713baa7bf70b9b8248298819ed541974eb3a5b8181f47a8d7c0075f8b9ac19f000da59d80 -P = 4c68aea171990dfaf08d120038b0680f6dbe4c2f13fbc0c5fa7d898683e8980f054f0aa9184c448ae2b74ed5686e1c21f262afab428731cd7d2395961dc9f6447a6847035a20381cf83cb765e76408b299d64e5ed9e122742005275b9a3da90cf8777d5837 +K = 5da45dbce46e7f672a2ad9adafbcf9cf +C = 4aabbbc8a843dff39627f37ed8ce542922d0728afa5f667a87b62f1897d2c2f91bcf4122564ba21c9ec15ef6f9028100c1b9ece80c5aa35fb480e01904bb3fbae72654f00a0ebd6c29233e748e329d15156505c8c71e78c155109308bca1f227197c022633833ca1df2dee855af13753e23b59accebff4890a59f7cb78cac16c92daec0a8495fc69e6e0e57a4895f0f21c337eb50eaebe724ec3749f9e6a5057de083fb09a2e2923ec06d4e15730e1a86a1f8e2a7cdd5e376ae1446d3ca66bacd9ba6da7204ce44ad1d2daeb07619979d08c0b1ef7bf97f7f8e9c949aec4f91fa074a8d6f39d768e22dd24e72d30a26f74810c861d138c8a0d5de14da816296b79c31c56be99ac0af675b43c7a831196c3394d047dabd8cfcf4f52e182e87977ce459d5e92af4c14e1589ea83dba45a9b5102d586bc44f114a28abd15f6afa0258f85f7cf6fc5ff39de4f6ee7fb70cf8d6c27a7862c24b12c336f46f4126d841e5e149cf1c7aaebf5cedf00dca75d23040b89526db5c9ddad483e86b3a3e130124b04c85ed5be1a6995f2591ced188fe64b1a5cecee19f08b2050a77795157ba51a181b23be9723d8afd51350cbb7b320e210933287d7767889467d4453548f0f569a45ccced7a89bb608b1211ab193da891e54fa245b87f2f480942d7b553888b82072df395249814b0c9d73f6b526f3492e15f76ffede7c766036d7c680141aa2ed8638d773c49 +P = baa7e141ea9ad06d62d6c3df9a8f357b866f483ad7ca76a4544afb409160d5ef42efc2bb71facab7353aa62341760dd0505293e69469af2d567d46fc333ad0406beb60fb29b57765c5748980481eaab3627b6c28b305af0abab7352c6f783a37959449bed83f9bfd0f515d6560a891c4c2f8e7bf0aa7e1a7b991b0df463584c4d680e60b7af0b6dae404ee2e805e31daff98e5aa9d6d477f02e1afb3037b88fd218d55f8d0e91789f903ccc9bda8f274c2437a6cc86cc295fe2773882ed718ba005d8500d9e846653b682ffe36c26f3c0fbd9c53004238f155c47ed686f552bedacab4da1d633d3aa974fa4880db51359d74e7f4d9245b5636fc8eaae1ffef561a081a4244fcc4036ad2f8aecaacb5a6a4028d95cfdab1955ff9af1e0bd1aa290a7f23c4528ba52672c474873e2ccf7576e00c36eb013df3ad9f47035113109ff09583fe8bd23f2cca57a18e879f06201a002ee60838b1570e2f9b57aa4d2eb42d32175fbcef601d885b34ee01a4ff94607d5185ab2cd77f6e8eed7790f741eba781c2e0cd3d587aba9d0b6ab63e0231ab2b19ccbfb0a54897450a8c4a1fd272f617d6733a8f22c2c90ba04e18b75c507d0c1b4b3e607a563a800a60bb99509b11f06be732abe575be327baed8d28db0496b8d522d252a0eb10cc38375c9aa096ce1f08aa2e2f2675b81986c15061de949b33bcc9c9b6c9842a2fa1d746be12a COUNT = 72 -K = 38dcf1d1d2600cb1a395fd63745f3f21 -C = d3d07540cd971f7da16ba8d893797bf3b2536aee2102defba4f3cbccef52f0d76f6f5f178806685108c5f53ac5e64ab055582817360d9f39760a234c4127aaae5a9cbf0a4d00359f9bd43d3a9108b971aec50938180e3dcef51b1eea6a7cdbbc87db919f8d91e7da0866832f552918d5 -P = 31f7fc8b73777c0334ae4bda7f9738738f323016cd7787ba6b3766d9db4f3423ae585140eadd5846cdc85dc842853bbc679da566bc6490047e3465e7f64549921f580f6c7bce5a2f434593d8ffb6547dd5e88eadc77b5e75668c02ab2076be1a686abdcf72 +K = 7bded80bc4bf57ab59cc02d9a202468e +C = b5cf63082a85a54c54849983415ebd38b01d749bf0539ad66ff8167b89b67b91f94e79c1926bd41b149eb438b08f3892d1fab7897f73b045afd4ea329840971c3241488a8000a31d5da6a812e39eaea072383c9e3b68d6f539cf5ef6f37572d201fd971f0a4fb69a66dc28d6d2be1a9384722e7cb77480b5d2dd65ef943d6d4acf28c7d7f481a3850f1b47bd0872b8da02ed7b2ca7599d3e2d646b77b1282f152140e358b365b1ddccb386fba249b4236bd59df9410eb19c425347eb98649a65ce6b38c5b743f04173712e61d75fe1c9dd6174139e617d06376332a9bc3f27e980c4945688d417214677308dfb662e36308ee73ce956671d9a286e5b19e2e286fff1eea3fc8198a8de1d3bc0ff952bb9afed8ce190aa4f916842449bdee99c1ec268cb521b2e524731fb1579bef15805eb45fa212b0c1da6147d2dceba8cb4c9d50e007d9cddaceb928c3fd966f12dbe81a7fe71fdea697a718d65faf5ebf43a840fe8b311b5f8e623e399a13c9db301e5c8c54c98cb96c9212ae9fa95ebf2805095a276a419491937e2f2819675ec77e039793bd1bda367e74b0fe46d1f87794ed4fbcc23f1323756b9df9be4231994748b357abb753538d093ff63559608a9249e83224053d71834d13f0ebd4679bb06658c6d5b019202241ff8994441bb5155dc83dc5f4a57036175c6088abd696d3e1214905bae7d2c2e04d46bb076267539db7e512951bd93 +P = 8cd433f9c163ddffcef595239e1ecf8d8fc68489b4998e54638b36eecb54d5549ed85ae084fa1734907eb9c63f6789b6501f289112a4f738f40ace1ced450b7405f581e161c46316c95f9b6e32471fa1f3ca7ab6c3590aac6a5c35f3145bdcaed9a034be92ade61dde49219036dcbd2676d3104d8e9f960cf1a51e9a95853adc6a8ea3081b08a96f289aab22976dcf0d4f54f3d0c43fc7d2399b6b6ab799f6b17085c2c19f4e88a913a7c4cfe8f6f69a7b5d0810017b277981cabdce645e4c271eb1259ce826097724f068dbbc618954b28a56ba5814b9d5d8a6f8ae7ca28e77f7ea464050d733daa22000dab52d6b3802a1af5f113937624d9564d4a88db174ca41f39ba717c00b4be6cbb217195d158cd95531ae8d81e23682f6ec26871cffeac686c2c80c0bce9dadf9428f1039137b66baba53f3b8d5e3163f3e0e4a98a31a6a78dccdac3b0834e9ae344620aea9055b9ab64278b393fdae300be775590e4f487e7163fdd46483f76e8568a4433e0468a58207b2240ef3b4a8818c636ae460cd7a14adc18b1d1bb76b33f1d590db0fa06fae3c5fe506e093b2969a7d3b90deecaac59a0fdef4f3f1b1d5b9c733ac05ed59da47a158fb4db374504df62f81982a1b74e8d95ef88f3672447ab33fc1a030c70ad9e468065989d549f64d1474d90d6264e9ab7c582bc1169471b4114392014ef4b774d034fa12c61b860f70d4 COUNT = 73 -K = dd9d0d8d3428fb7f8e1c86b6be7fbd58 -C = 8b15590b4038091afc8e6695bd95f5e4257519b81a0dfbd1d337bfaac8394eb12caee4392499dcb0761e664746a044985294f07b85e4102969d1eb6868e85fd083907546d38de1036b3b83d5268ab9ce53511f08b08986c2a7dfa88a0c1eaede34006e0672b9abdcfc65f969d37dd00b -P = d7a47136f49f43f5063a04f413e63e3559e7aa96563391193fe7d3c4e377bc4ceeb46806eac6699b17a7a40c1d3106f4b00d13180092d141760500d319d730bbf8dcb64e106afa15c5ebf41ce22f10483b7197cb6c12083101346763b3726cf8988a176933 +K = 920101716e832727c5074631bfb665a2 +C = cd4a113bcbfdc0cd01377d040b370a31322717fca9d98a04f8d23ab1e8491581a9157ca7e480eabf48e5614d711371da4fd448a0aede619970b4c43ef39b263b760d12f929096a9d31cf48563271c1f2748608c3aa5534bf059bfa92dc763e1aaacf6f8d9799716687db39e75393f4d4d42c4059a50b8a8d9541ca8bfc4c78fd871fa46f5f7017aee6609bfe607a15a11771399b59cd5bcf9cff379b4d3f5bc5e1abce1df055f8792c26bac3db72cef868ca2ea0aed145a61360c51b858d9042ce33b312939e332ad2fe8ccd7bf8c2d7f04010f80ca185b60d8b5ac1aede627a6a9da241b20bce14668955ace2ff93dda5920349411790686f1cbf635df9bef064a3c7a4d0ff285ab714c6b84bd633f7f15f29bda3ee63005672420317bb21ae3b2b7e100f23f85040060aac195f821593c4793e24a62218e3ce45a29fb9f7f8a2fcde3ceeabe7ad1efc3452269ac00bfd9dc1042a0a3a4a73300162c36d6fcef8e59d9b608cdf6b6ed856d45c599ae9cccbc9444fe55dc9732b79e2c1c62d24498a54c35ad16f7322644a1758634ad4329a0b68e8d3be852222c36aeec40b07ce897744bdc7a6890b1c05d78db716581d88af577eb28d722e2d1604dbd2edfadb9e9108745d1da50c0d5d9648e91ae75d5f4728ba99c1f2d472045b6494a4844c8eebc894071343c9353071bd73b0ecdca29d877dcde41addd0c401fee5b66e2513e693dbf36d20 +FAIL COUNT = 74 -K = 063e86a6de63ce6d07a14b023bf8f606 -C = 022d8062c7232b18d9da1531393dd70119dc7ac1f733e3cf792b0e164ab9fcf6f76654fa9bd03565f2f6a48eeb4b79b2e91a03ace8e4c3ea98eed8b7d265418af9efb2f60d4d8eb7dda52144819c28550131c98ba9885b403e148d44f5a5bfdaeec6f1293d5fd8115750cdbbb8d177eb -FAIL +K = fc85522a066ab36acabf22ea65909971 +C = 546c6abd0a0c0e97701ff55b8fe43919883598a7378f2c9dec16fd0c80ac4356d2842b948a26b255de54b99669f329ebad68c35ef119793ed2c6e3d31c9e6b44a65353d1e826638e109013b8565cd1c02ccc37fa4460ecc6805ba3ac23660fd0b09edb9c1d79f898ed2699179bc5acc59bfed2ae0cb32ce05cb86f7229d94b519ab37a8f6a89dc247107bf6f892f256018861fbe6f3fab79788a8471f3ea0a45fa6644f24b71071fbc58e34a2923c0fa7c9f7cc9a69e128bb06713b687f4dfad580c766d170e66bc0e9cd611bdda5e2881476140006fa3a9d84311198e9955df9ea319729db56280d06616b9f9bb1e17dac754443926213cb4bc0923542158edf3161df00bc2f889c6c1de72c282c176cb641e0ae34c21d64020ca700dd52655b0841a0ee432d66723b8d7bfaa94ba111c35588855bb3846e46be3f7bbb992a3c4afb837a72ef59b1ff0e678b343a02aa1b963b681453e2cdfcf285d025f7b74a3bed33e9c602850d4ccdb2c371a5fd125f4829dfb80a752b3c3238c904ad0a708264131f1617ac5918a12e95e657249ed913e4f57e2eb2ebd8269882e991d92a8ae2d4b32b4cbaac17a0f6f190900c00f7b3cf36429e76a9e96886d6218d4c00e1c3bc7366018dce7ee6336d592e64862c4594a56bdedb7f5b50e18e608245711f2ff5d43c1141681a3d7e0abe9111aa666a12f136d1279bac541f9d4fd8c23ddaafe34b08928e0 +P = ede21f29b8802182f99241be5816b33a4c16522e82aa683a552e99878a2d9fee11b68363383e795bbb708a68341b858d9d49791c902e6b9438e30891f510babeb292dd44abe60dccacae7c6cf3c342395ad2dc544d2ace337bc59ff8cb1990c4dbd1291c61f5af29489fea52537ea973e317f737fe9145ed08c53f9c00ca7ccd9f617a9d3475d9e203f6838f5d0274598f1b766ed6bf727081ed756e2a52cbd37aecdbd8e155d473fe435d654f0a6af7301265576d6d7c478f0ddde64f1a191cb5b1d4b765f913f9368027bfc5f79cdf1f7dd5f8e291a8177c74e43560360f4893a2fd5a88bfdc2b0c8b01509e1582f18350e36bfa2214fc3fca34d20c6d1ea43e70846543a7a5ce738f6a336ee7ccef8af3a262b17f91e201bfdf3d2099630dc762d5f8cf18545a6c8bb1baf2716023793c579c1d1f94c97e06f1a81e465594bd61cffe5c8dbc737330cba80bcdb1f1f7a6f2905e7f21196d605da94135c0b147d545450862188be0fdb97f85716090465adbc0950423f889ae227d217550f1d420775161ff72af0ef6d10b095a5c7699d4811cd2582812ec0259c2d71bfb1bbd82dfb7ecdcb19fd0fd6f8dc31eec2fd30ce1541951b56117cd517f2b82e5c983a79a175374f1322da4af28009a4d488cd04eaa5b0e0137865a2c12afe0494d5071c101650a3e41207eb2c063f4c3af197f7a6725f1db083080fe1f7743dd3e COUNT = 75 -K = 497275582e184cef9295017a89e7d4a6 -C = ac32a355788f9bad4a26bad029d435fe5af5d4906c6144e069b6be60097926f8cb9329f7438ebf033966f2e5583ad8317a83f8781e6343bc4561cb80e1196200a7c0516d2245b467fc6979e7b314fa25eb5c4fc48b27c25d62b4ff21744d09d2882fc44a9a7c9d1d81a7e1acd01ad9f0 -P = 2df5a14dea81a07959ba6da8fd6633bce48b988e8086de9eb9faeddb25401692c760177ade1875f4ab89ff8bd8eb2540a8dfe263aab61bd6fa7d2bb37cc2b0417499b6971c5831a83e0991a2a5cfcc785030e54655501a7d796a518413281d9b3a3ca12f29 +K = 71201dcb4953f637fe74a6ec24d3473e +C = 727192dcc3b6b19fb1ae665897b34d861560e04cd75a24645efd9bfe6022d16187bada6505780b80cdc5dba085462897e955f03a3c440e6a38903fc5f3993f2828f73d926f1f47f612e41377ec33b4764ac7376da1b3fd909b99ecab1da1f2acc5937a6835bd207153e4dd0b1043dfc637fa4c280fb0bbfc0e2e347189a107548360584c1bd98da7a96eaa0e24e0d0b417291db11c273ae6d38dc48fac29dde39a92d58bc91e0de511255156973627895cf191290ddaa4d99142f70af0f2eec332eea42ffd8bcd8c6741b63773a246e6bb3da4f44e70a59ae8ceef32d9985bda68e6e18c3d7a4056ea0ac6da9c77a83e6473af06212972265e2aefaba309c4e8614f6aeefedbe4d32fd018b98e508fe17dfa5d5fd1ddb83c3f7276d3029db3fa8d848b508edc871dcf7476bcb3d352a012b60adc167be71ac22b48d61b5b91c1c1a0794e80c0a18c291a3784bc5a61c19c894667960f3a774488d63469fb7f0b300220093af671a5a9035162c29d7e9ba18bf2bbb968e66f33cc2d359e30183719a9a7ba14be5ed004efe1c4dddec10a27cce0c78c6edeb04064ff62a6bbac2a592f0078ef93db7a782e3324b3797d920cc5f9fc0206ca0f19cd7bb2b2fe73887ddda02adb1742f51e85c8466244749ac0142b8cd57fd10100823dae944cd51288231932770445f3922ef2f1f3b1ab0f9e5bdcc42f3f3480316015dbf0f086731ff91dded00f7e05 +P = 5c4789ac98489760028b17905cbf7241a45ff2c150f0d6f043a0dae093242605fa600af367145417deabbc03e3e85f3350540f4010233f02dd6cac7653266477792e26bbde09885c68a290c1798722e1d92e5a79eeb0bc483d424b62193788233a63b5c2f36f6a926261ca06e3ac4ef2c95519d886f383b8db840cbbe30c95b84c4fdde375806f4b5dbbe77b9baf6d37d0e0c0a7d7138153c5321619c1db800c6b59326b9e61eaf311e93a02a50c86479de2a633fb4a8b1a2243f3fa3dfc843b1e2e8ac371a5095b9b34aa5884fea4db8b1fc08bd4407862a7c54673d9ab35446743aa47be8904c5f77d86ffe71bdb94c849ae9d277e792351faf8e9ef7eab5fbd415067a76dc4375fa918539596b04961d393baac106242495e3a5f1acb0d7821b0e85272b700787d08cb5425af882fb81754ea2d2d6688b000cc77ae76e0d2e37864db9d1a15f8341754de6e90c1519cbc6d0442650cb46fe65f4ce550869f2212310f6de59118d6d40f141abe5e6c7a1ecce79a22d9b500989fb65aa6278188d4052fe9d4ec71804c775c072fb9009fbebea209c220b892d702c2bec28bbd2cb290e929babc1c682cde26bf19df5b28d5453c8ab25fb0bbd112a23058445599146c262573953ae200ac217b2864bc05662aaf12777dc43832661522de8f8bb54027341595dba50e59345ce5182c64ceccd3451b1334d67433514cc4ec78ea COUNT = 76 -K = 9c31cbb7cc36b63eb36e8d92b7e5cd7b -C = 1ef23595feb66f9c134956c35f82de679e7963efaa6f4823a8f65aab61c8ad0a40c45dcf036fc7d7e962c37c6e2859a8565973e4befd47560ac9268eceeedc817b68adfa735f74b2f0f20c44575719c0999c669be4dcbcd4203e026c62c237ceb2918bb8d28cc1bd3bb4cfbe4c4d1476 -P = 57c10eac48c6881f244ea352f9ecf61435aaa0b5154ef069f4d5a78bd4a4c8d2abbb126513f087383bc79b8acdfacda3ffb4a37016d8ced75434a552b1c4c3ec510db705e0a3934a99bd681861fc1bf2ab4816cab006a746dfdacf808741323200f924be86 +K = e8bfe5801a120e1c3e7694b519f6c26d +C = e92c917436033b2540e44c40e32207a810013a3b7cec40b4fb0804634c519e512ddd58e4c1d94506089a1f903557350e32be32df87ed7b6d0f44a57d14e3b45e1333ca5e39891c8a6b5e4c60817eecbe7d1884413200e8c0d1cf3abce7881be20eefe888ec10cf8ce162e15a0d015ce36501ffe09b3dc1a80c5a315cfe399f67b2d8e3f444723dd0b45c8ce22e139f482088f7562ff5854723f8da615caadbc53e1b4a35bbf8a3b208a366cd82e192575fb849056d7179700152852f3b8442a9d324418fb9213381cf17bc28376d85ec4c03d569424e5befb3114f7c124ea2de473bc92924f795c5f000fbbcb6ba85e011ef0a073ea002be4532a90190c5e08707eab6ad054a25a035fc5d86709cd6a8d41c3e24da3078ae161d1226ea4969a7caae914568df3d5893cf3f4bdbcac9e548415d657b87bc94b35607fd52fa0b2d80e4e7edc8c7b04007da7e0573d9f84a3f2c2ca4b95e756aa0d75f693c1da712dcb3be60e6ed80ddf5a6491b9a6276f14cf38b848ed6bd0d4cad527c704e311905f3a72dfaacf11117d34c1fb15667f29714ace96c79475ad8ff91fd56b7d6f5f38c39de50674034045573c63d13d3df963ebe5f51852bfc84a0cb529908169570f7f2ffa7523c3997dcc3085c54bfc959bdb4cfe71dbd3eb23a15db6a30deb8d80be4674cf1e6dfff18d44df718e791ce47a1f05a2be944d41dcf3b343ec0627922d7f3441782a7 +P = 5a1625c205b05908987c21805f610953d78d18512abe3e44cf98d165c036f83ce184eea70c89200ca06db05c42d396b81cb249eedefdb88edb113fe28486d8439d5f779a8396cf00dfd5d4b85a90fcc3472c86989d1cd9f732878509e60d6e5af606064314f246763f1367608e1702f35b1c08e2e94d4c943f749dced7ef1b42bb3f6fc6fd08fbb89b3593ef1fbbeed2e8588f8a7b11e015dae5beb6f52a859092a976bfece7d9bdc16a95eb5f602b9a41091e0ff3b5a6d5b55c676ef4d43cfb7c33806d0c55956fc9e622f21e64b5972f6d32e589b8e2069b90d48bce02f0b38fa49422caf57e41566aa4a79b3be5a64de0358f75a5f4cd53d1e3efb454f753f221daa1aaeee8de9ebae7f2bf6c4d8866b5c5510e25a5d005352513b3846b7cb19bd049a1dc7ac1fd97dd528b8cf3fd54b5521188aa9b3cddf49a9f714cd3acaa3f7130b57af5d7c8c0cc90123f3b3b09bd222c64613eb1ae93e9f446482e2ba49890d466f75d8e8855b552f3bdb018e3b7d660785fb171a79a0b8b366c4151f83438b5cb4bd675c4a25ac790fca6a4ac952e1f277bd9eba449429dd4379d04c4e5e19876d07b75ecf956ea3d6ecec92e5c87671686d330b2df1ec68996f3d6eb1d8ced5d1e7dcec7afa12fb2dcc33712cda7ac589858d61d9d95ba934049690bc35c6a62c97fe7c5510215203d31d68daac00f6334685e22ef2e7c0169f291 COUNT = 77 -K = f1b959ad14fc2a7dfe88e36475334b1a -C = cf48a37da31a0151023bd98edc33978ea46b036351ce6ed8db5725710cc50a20cce5d703fee3e25f24ab63e003741c8cdb2ca0ff9cf0b4673063f717400e0ea2cbc14d5ed9e1d82ea35bfefd36cbe8bfd67187ba029ac8b22593579f530ca05f79a865185d6e349fc0fc87df52ad7f04 -P = 4c49a9b65ca18772b8bc737321e0d2ace2d29e79ad42189b03d78fcba5c81b0ef5446cfa2ef4c6b2098d0eb92883538e7db73217ed118f66712fedd9802ed4305c5d85301a80d471917dde87c1f65b5b4a102444e903a989bd08a9ed4f0a77536cd3a8311d +K = 37fd74f087fbf38b4a859e7ab4f65a32 +C = 31c1c46c45cfc37e22e3e24b1045484a529adbc5923bfa24adc7e0176c0b71b6a64754e5bf97934c2d407e4f03d2d9969e138414683ba377261abf0730df31abab7f3973c16f198357ad9033ade20935ee23bd48f9423f70d3ae43ba9d6fed6baa261c564ae38cc70b3c0d3d3b0dce8c4733f23fbf4541eedbf66e43d4860be012e1c38bc134df414c8fdac6c96499508495a82acabd5b9141d209214961641dea632b2b805bb09984c75ff96fa53ed09c1187703c79c6acef7f1328091e99bcdef67ea191459a849db846a9ac1da98a7bdc1e0c67c9e90c9935b877247e3d8a4e0cc2840783671bfd899684385caf9473f5adc3ece46095c05e497a71fc5c91d5141df75ecc799c2a1a339ff3de77e5c04b1fc0343df1b88cc450ab594a6638aab2fa2b97b7855f32b06d9470d8857aa8aea7d22c4be2d15ff659cd63b866cfbace2df65bc5bb30487eb39769b33b39bac38ba2f738785142b8b9e5c13b58ffaf56ba8435e70f1c372ff7fee3b4ebcf54fa529a0476602ffe221da90a27a8e89476bbe0ef2b874592760603c20a6db25781b35b24ef9c017cfc40240d7d7d116a163082103b0dfa2bcd695860b26e57904d44b47dbebff6545af49afd43a874edde826057a5de5aeb25eb6c93c9186a4109bbc7a5e607d4802e5e675012682986777ffb6e18d4bee260fea4f8b4cf523a34f29336999feef5712850196e7b72ccab4d05f1813986 +FAIL COUNT = 78 -K = d30108b9aa2d51344c6a53b6c8075f9e -C = 13bd2825aa613c6739ddbcc744c7f7f029d30372882db7ae748e9c58d209c17f0588b4216141efce9e0dad3df3a66dd22088d6ec90b7186f54f9a5e47a79cb3fb21d72eeac07bb2738c77ebecbdfa7bddd858f4ea33c778165f87d1321f8bb1b5ae3d3c0dec4d46b5941c2144de78706 -FAIL +K = 46f7143b45547391ea7284b73b1e1814 +C = ab2ed6c86b259b3ecba1bf4ff98845e8b94d8347a986c79eb5da4ccfdfb4114310a6f394011c33086b15cfbdc967161187ed1c74f6e822949b5a50984301393f7e27bd5897e8975e6a67134f150072301efc7d9ea9c2f9ae528a597a27028eb03c5bee32067e4a4fa3bbc4413cbda35b6bb03fe88bc642805883e26a39e9ba2a016da1c4cf0e5543c8cb66fd4444de331f95d14ee16aca795fa7237f332c64a0536f597be37df54a25204235f05c139516ed9b44bc61ab7a6830e5acf6ecb133af00e9c6446d41e172aad71542db65162a222e1f7b3de1a185c3ad13dd5848d6dcec0e0f96b00814425bde1d0a8db7af072d6846a3c9122d5d17479fa809e325399c87649c817f14a69edefd6705b2d729baa685186a8d9a17d21d95fedfb7fff3d85aa19292e5119a1d5c710422cd07748df0134d5c4f9252ec7b06f07121568d20b6271144888040bd3b619bc9ccfc66357f841f91dbf412cda547ca66d2286d2057ea37883c30c9502ff9234e4fbc7d0989c1a652bf30ea568a170dfb15bd9db0c697242e27cfbb8aabf687327a0a27eadb1fcbeeb2e1b485628586ab1d99a65f23888154ed9f55642113706a1b52d3eebd60e1848761bb25f4d0437272ba953942431cc1da9a93b1255c699ad009e78f7b39c2c71ebc0bc1307e5c324f2037657e17ed12785806a7c186d16e4322d9372dc61e9a95431f163afc8ffbb93340f1864b7d1a1980 +P = 90e4a942dfff0ac61d0cbe85a05ec8a718a3c0b4bfc8c8f508b6a180b3058c0d0b86ec6ed51c0ff7c6e7c038d1bf1e94dba96cf6fc2cc71233e5e67caac8a5f94f0ea19e97ab35c1f331d14b21752d9d4d442e2c44eb2d6b93acc3da86067cc4f73be7aa2afcb77f7263f30dd093cffe8c8183d9e0e0ddd4ad3d8ce267f0ecf9f00692abea5393e153f498c60558f736aa89864b51d0fe1345f7370edd7dbdef7d2d38d1c8f3a40af41fb630a72495870d3e726a4a996d4f5063464cf2bdf4a0ef514ed0774d922d13041670b1b1121b8a96519ddabd6c6c3969cc2c368071f6ca8114081426cebc5a29df6fdfd8f82f678d72c92ac170bd22eaed7380fff8457b66fd9a51d6c08c644e22eb5a445c048cf8022c5200539ed292254252ef491c34470eae02cc238078a967642190920eb8175f32699e8c82f5dee3657226733d3af6dc7113422d8d1da600cbd36b3605fd17799e29f09ba94f27d50c4ac78df338e59cced283cdd0924809d6b091c352f1085ad4f39fd505abcf89eaa6813d409cc3a20d9e124bc3a6655f39ac978c40bb5d38df522b8340064e1721daf19dcc781a53e72d888f4946d0f2b1927f31abb6c5598800dd395a44315b5ec77670d523dc2a8fbdafbc3d64d66ac371386993823ac797afe43c035fc520d8afcddc72bd958f754bc1b4a0dde1e50d3484444b66be3fb5e6654d5a445186d585758c96 COUNT = 79 -K = 26722fe3a2d831692ecafabc2f39be71 -C = 87c51b78c205057dcca64ed7fccb2efb57fc73c57852a2bfc74aaae5d1034989ceb000cf631523c0ef3a135bb49d3e6fc6152f319013c731190ae5637d71d4848cb60104ba9277275a14e49a47c0898aad303148e1d02579dea4641e29817099eac044283e164e84d2836f949dae47b0 -P = 5ab02e8ca7024be19d517b0289d1835ea50bc8065663886b4480a1571250ee1531ed17c3f24f8abbadba83b8a98625acb94ab8cdc57b44a5d38480d266bbee9f042d5e2441102ea99d55a53afb8c1ecf73d117710e5e31f46df5a5c6a4c1988bb9deacfc9e +K = b4d5e0b92a30195b40ba17c18494edf8 +C = 1bc0fe47af307231603d532b2156caab90da6986ee55a92785775cb97fd6cc12dd401bc783094ef011fd5de64d4f5258b9679ea8699743ca806743acc0cd3714b2060f65f0c01999647ab213b322e1f0d31f4d6a6f3d5a7661898d668248ca7ef2a23e247ee98270b08f30dcfc5a27a5c02c4f834ed5f401821f0472863ac8354f6be5e6156d18a551d375e102fecdfe38b9188d5618a2cb36de0ea3e07081891850b4f77634249b7077c418d19540afa07dfd58d752604a73ee3eb8393d613834c52ead772fb69ae8581887102c74d9373db03ea89d276e74a2f4a24e6b4a73f63f164c2f94bcee9ddf60d0703154c6cedfbfea62772152afa4fd8aba639ee6c73e55fb3df63e7692632a6ae56f37be0d7d6b7746a776535ee1e6cdeac54dff67e60a5ca9db000c2e5649731716bcbb3c007ab85cba68ca2c538742945926e5d928a31e1c5f97169b40514871d54f647e3b4a257224da5e52cb804bfec3d195c8fd181cf7c0e2a42ff5cc8f38b6435452664af73743ac0c5a53115802e0dea7aa7da15c56a8bf1f194d51d520ca377ab5ad45197f0c87c2c9e3853680a1bc48af6ede6a24d454395f59f052f66501e7c1c4f87840881bda9d57f9f7d9984177fa3d1be553f2a184b3e2a2835a9800cab7d3fb6625d738249868271d8d38ad57cd583bdfecc4babe51e63fa96a5e06139ac425c096d6d85c0035ac72aad5a47159c66748feb7fa9e +P = 304ea7fded8aa04b8deda77917667b0d30676af33503621f3f1bf97272d234e0dfb51bd82ecde90c4c97a4720795892978e041bb65cb7cacab025855108f1ee1a266c75e7af747582a44678608b926a329e33187c04cb26e986eeab30eb90d5dd4fcfb2e20cc56af0b41105ead1775c3cfec60ddaa292019e4696a3850d9bce814da4f7f80985e4b0f9a9b54abc63f8d0d9cb985681fa42c793243b9cea1f964ed839d5a703983aeb47a16299901f4816fbd932d61c0b5432f24f6e455f1c3bc0e29102b1486f26714bc19152d4c22bdfbc24a05b2d36200d33b7757c85c7ede826ff287834df2eaf031a7d28553a538cd30d2bcefe58cd52a27d86523bf8f0db4a2161f542d21e2b214cdebd4e3aefeb8e95185f786667fc0ac3fcd15a3820ad7bbda4c1041ca0acd70048032a6382f3bb357e7c17042f3c62158f6146782a9c47c905a143cd019b0ef7c047e63ce6b53a75b05f5f78789c4dc68aa7f7d4fa1043260d239c494fe28e01e129f3279214b6d8484eb85866587557a79807e64a3698de83e94d440c6ce0f1d702d6574b4ed29d20942b48299dda9bfebd1dfee2927951f01ed8e763cff79d746853b6822bde0c06ac649867bad78e5aabc312b5b58f3f3a82f90004c906dfb9ccba522757bfdf4cd728b9a8e501488e71e98ec620eb0a6cb1070eb2732bc7f457a0a12dd2ee829eede63158dbb1a1f43fc38a162 COUNT = 80 -K = c61c1fb11173b15d3e248c522d4718ad -C = 54a46da2a3a2d8215d1bb98a176a2f2449c7ed55e10147297ba9fb0fbaec4caaf298c79fb5d1a4c327adac86fa9f3996f8a1fc20b1c3837f9acb0a9b1721780d303ebc523e3998970eeb5715ca943e98683eedc613c05d630402be751fb85556193f68a243a6d383eb6e67820db9aee9 -P = 75d7703da2a8e77f50cccb769104aa4682d559cf4bcdc7db6eef9232b30f68c481a88f0ca86bc608cd2a644e3e5fc159331d7db4bebbe6c8a31b746927026c638a6348dbb4d3030dfa40d9cfff07a97a31c91623a8b01da9c4fdf19c9576f5461b99510b9b +K = 23210534a72c5455158d172f028331b9 +C = 1e9eec64b46d68db8ead7b51ba94953f3aad6278b80e07e60e5cfbfc28bd89033578ae9e9c6eb781afb1ed02d2a8c4a889790b12904940504686c8017c2c484982b448cb455fe65d0dc082ff6a9222f9406ea800047b9820d7861276df84c74856d1191d3535d0bcb72f16f14121c2bb5e8ff87fd8cd553e81d8a320441a67d32f1ed1f00e7bb14763582639561629e8948f935fddb972108c8e7db4c14a56a3d1cb85d3b70227182e2f53e3315c4f40303981c874838bb985ae58e2251f006160a84e416d7f3bc51d1fe301b46382aff30e70ed6af6298b276ffab78d62e8015e7a1e88aabd6079dc3f0c0be57bafdbb121c37c7a169135825badab88c541d35b2ac0dac4d6f660fe5d66585e862b6ac2bb638ba2dbcce2b56f48d56fd0db938daae2188d8d02254018fd9be5c9486d12207350f92daadeb9a94426565890504ec62e4511ad0e9a8dde023439f81b2a65521bb7583f48d3e38c00f27720a67bb04d1ac78f75bf20138b619dbbafbed1c112ec64a70f6c0e66ef3a1ad2bb8846b1cabe363a31b94183d40ab366f3268ce3c51b5b9216ccb99288a75fc7adcbdf358c8201e76ba6729c0cf16ec5d6770ba6ab3130d98d3d673597b931f57b28fcd30d4fc81c9b102df3c7817667b6576a74875705b355d2cc919c5c5ddf945d9e81b5fc24e51a6b72aee4e2db9bebe33c2c5aabd4a143e83d7d81d372fb209f200d5b2e21f8203301 +P = dbb33aef2fd3d65f90c16a9d3c12ad45bda0fd2985909421b9f73688d596931337e961955d275ded77d0c90bf61e922e14c9bb078e42a43fc12a770d59ea848a91482c045e0d9c0c94b13d023c49236f4c8cbc43a21f7d67ab944d80380f10c86dee4408256cfbb950f75d84b6a370db34d463d97cff1be0e19263a51188d8d58dc83468b147e0e42203111199dd1853798ef89810a3ff068b0787740207ca8d02ecebfa1050ef8c25c47a5c8aa9fd0cacec405058157fbc88e8b43776997a96d06a45a755c230916dec81423db9ba2260ae872265fbb7aec3c69a2f0830834829a49f927f3cf59c501ec8883c7ffd9327aceb653b28c859536fae433c36c6b8793487a55cae9ee248f1a6d280c59aa34c875bd3a69cf4e608e9c2da25f5f03eec766f8be6879e7a74de0d64bd140a2d488c2da13e226aa45921253527b3bce79c248782d7f21dd258203f0603ae9ed44ec0553a8ea3b6ae926c3edecc94226d834629e2298ccd28056c2ab6e77d68144680db0a2ce8479e1527b8d73b5ff2381d0db1d55462ec8ce296eddb2d79db18c7c380886dcb98c316672e43d389a4d2221b2a35566ea059773de3a542a71a4b15c79e1c4459c527465ba7ac4100277ad2ea0dc65a329ca5c602dd084f79564dd59e87e483fd18057aa2f1330e4c68a3e9f158f63657b45976c5d07b5f82fe054f9e67d203cbdee3cecea98fea21fad0 COUNT = 81 -K = 7c4dd5fbaffb9cde44c52d14cec11084 -C = 8de96a8c35c49e515823bb62974f5850574c30621b06b6266f34ee1ff220046a240153f32d9b75656a8cd44a2b7a42017a021a54cc2eee939c790843ff8c6007574d833fdd92196e58110941179e93a792b28cde65bc8ea1688a7751b4b089fef6fafcc14695828c550072c209019cde -FAIL +K = cec9655195388a85e163ca3920e90b7b +C = f8ff24d8ce937a603c85438af650509e8444ba264991548c36e3d691f49e6b96236b1bc7a1000153de21379873a23aa8e94a50b7496698c09736a7cea849eced2b9002f90a2e592b0bdf1f94747e6948e6acf14a6cc296b4abb140718611fd6888a5661f765968c2ea7137864f80f5851b0838071fd06c0ec9efeec1900529ce89de8d6792d17b4cf82b83569f7b22a93df4748217778435172bd35f9eb246446df64aced8b362f2d2b30c6302d59ffbd45cd32f23c6deef59249aeb179ccfc65cd7aa3a51fc53a30cb587943806aec8a0e57a152c27602fd93f6a481eb769bde896d9cb11bf0ecd857b25e9e13f777a34b8bed735a9c51a4d0ecaba817090b2c380dbecb2c80bae640c74cbad3c93efa02a73bbbf17865b0e2edab8ed55d0212224c54a275da753181e62f781ada4eef42370f41c01d67f5a4155f98c23d1da1878644c026ecab208587692f8ab353a78ee287fcc71f5bf3f6b24fcf0f8aad3abc89fb58eaf2f4c27fe12a4a85522dc7a932da2c91eb0c3c1778af88137e0584be42ff470cd5dba4e52c1c146a9b42c582d07b5f99f7e1bbc72b13de91e81684fa6b7b826f889713fca08a66e9c5f65c5a3935ce415a9e724ed82c0a4c14cd2eccdb798ac29ba8af5e0b0f4f49778fa7fed0c2e680fd53756d4046485b914b6f60ff218430a049a5a48d508ed1bef9fc53c0d046e314c36f14d57004cedbfd4cb3d142e2eaa1f59 +P = 82b5b9697ff15ba9f179b7f1b95d731d71bdc402a5033e7f3faf3d55c180862f510223c5691dff1c5268a78f56fb0a1c5b7f40c27a2821e75a2992acc18090eea9068b27d80aba95140de84cfa8c0e8ad5186d253466fecf828f27772fc4e3b6ee0cb498359ab9553048f6138a556000e96d87a23fbcdf884466ccaf28787f4a1438e51a1300d5b333352f64894e2ffa3b7f7369558191488a16263924189aca7429b9a8f830c84702bf248f698b3774da2bd5eedac87c337a32d079c35b45d9d319c6b21a23581b8de61fe9cba6fc16fe121fef689e3b421774ecdefd9f7ac333ad0408a2e7e8237de404c4861d7a174e0f520e818c8901fbf0da4418b33f4c51b2ef876c49f51141018945796d6830728ade815ad039a1d6eefd34d46970a16504effe116c9ed45430eefd68cf1763d29545c9849d63685b8e3af1421b210055ea57cbd0106a799506528588541ba3847412a1028195882ff44f47206e9b1a6666e10ac1f199c086cade48ff3775a68371bc69ea95a30b0b03836b5424784c5cb03a30b42b489aa197e64bd770f158a3684ede80408e9903060f05f830af921732e7d1215a10796d6b3dd12a7a11193ee33d5178304f5a9d2f9b16c8b2724257715931dcbed0a88c578ccccc754a958dc61520da98101bfc7aab65970c3dd25bc15344a30a28d1ca9ff9a8edc48dc5b7c7e3ca2a5e59f7eba3951261d2554a COUNT = 82 -K = 4bd966f6fcbc111efdc431f968c519f9 -C = d24e3bb0da2a9cd5d8ece62dad26a038922e815bcfbdbfd042f1acc0ccbdccfbf52a3a484fcb9078c8d0fc85abae2f2887526e6715788a3d7e266b0c440d008c91d39f559c5f1be6b50b0b95c4daa8ce23e69fe783e6e5ee1f8bb2163849b9b1b1a5e40b16c09dbbf95716bf29902857 -P = 68e330846a3e90429a9fa79bc633b69507701ef33ed96dcd4674be96156700237686f186c999888384a7aac08eb4a60f08a8b83789c05a27523a904bb6e281b656c9fdb5e201db40ef9c905338421999bbc5f40bb13ccb0df249542798c27844c5527bdf00 +K = b4d45adae90c60707b927348e3e037cb +C = 61fdf116c9b49d7c322b2932d04ff4c869702869f382d80072dd93f4eb6b6e89d2bf06b271b2653115150481b7227941b4ebaca4c8972690a273a0b15ce580c855eeaea995c1e6926681cfde473caf63711e7721a97e80578aef83f93ef0e62ff1e6c694967c8160316c5b53e4fc878e603079bd855eb8da19e2eb87d5cd5f0524043989f536d96caed3817a32db51a2e18401582b8d04ff8db31bdf2708177d2fdc3ef5d557a164557cc1c0d38ec5d67d798fa80652a66244cd396f81e37fef8d8d41cd13acd31c12e425274ae37f17a5c353dbaa773f79bd377b5d1faf105830d66048857c1bfa6d1f2378e87758694c1f934ed7047210dd4acba0ff7fc4465fb0d3136800ffaa4848b68fa29942549de85cef2ccf17cbcc092fdb162565dee5a40191a35b8145d9c0067368df7bec387e00aaf59e0cc045c13502086bc3de76a5880f9b50c4329622b73bb36dd62c1ee1f425e6d267d917318140b643d937e9ba17b76b90a78ab7f5377ab695b0b5d4ddfa4734f6b408d7ffd9d88ce463bd87b13c1dac0e354e6616ba8bf227c90bb99ab91a0e439f7f5d368a13b68ac2fda98c3e1757c8d9dece0a746d81c225451f7284d365505f5b4526ad97f0bb3361df2c20c749852ea051833799e258940d4c6e8763cbe19c91c5f79ec8864bb158575b525fceecf9a3a2e88882a7b7fb9e76d7c11158c1e56435a2542e33ee20055ae2e8a042d371ef +P = 2345307d40d11980f36ae8ff6e7f4e9308ebffb5a7be11acac51ca5af9e69c51524bda96ce8b158757399050950798b384713062e0ba47028e07f3b66fe43ff2d0761e4ee09f02be24044aa7fde7d64c8e10fd49139eeaaa4274c1a4bcd3af92f54bf3fddc9ab9bab71c48625646c92cce6fcd65a73fcdb635bff19287f8d1fc450ff0e4a73808bc4240e355630f7492f535333adb5fb57019a31019ae308a90077b596af600207d7370ebf60228b063a2951f5913e7f06b5b66e12e800b269fb3e4cd9696c3a2dde7822725006c2a6796fe162c051d93463d6283ffb05e381902bb9b4d4f6cd550c24c256c52f589612182cb76312f5ffa2391d2d6979791a6717dd1ddca268fc254911f54192a103fc21da9aabf6669a81750d39f59b04f75cbe548338fb689ee5571d4efc4e3e659573c2bf6377a4f62422bb5d6e7792b930cd64670e17052ded4afae795f7e37b4e92e149f9b0b4e7b42c59f8576e40d1a258f0c1b30ab7e50c2a3788d5b3549e38a21c8f24dba5546cc9d90428284850f1aac54d0d75594a34aee66ec34501415ee46369f08aea237438df6692c85b7d3d63b38771d8d6300c2457858a3a854ce5af630cabf25f211649448d91256ceb21d99f1d79f634b303f4d0d0f360de271e3905183883e86c26108f84a025b5d22850be27eed7734bf330ac0090b1a4738aad0a001947496172e5d01caebf2f60b COUNT = 83 -K = 20fbf682380421f403a0742313176f9b -C = ad04484dd31e991dc65fb331e69d110a2dff10b8bb36d11a943e9c443ebfaf25d3867ee3b267841f80a41f98d6a8fd3a68b1da5e1de3f20ba18b3938e53e76e29a4294311241bceff2bbe1a3f00d71b48df5452f7e07c8f7adde960889dd2ff8b5d59d94e62e0ac39edca250d99fcbcb -P = f78f5167217a69043b8e4c2804cbbd6cfdaaceed79dd5667d5e8c6d89c6f08128919810e968c5aa1bcdc3c8cfd8843673fa339440e98c93e5b68e43b1aeeb8a0e90c3216e057f0805afad6dcdf91410ff3a535bcaba827c47e1cfd22f10c688c4ce7967faf +K = 695809c4970260fd5bb0c01904f54fd3 +C = ea0a1c9449f5a755ea5516e5ac4f2da3f45fc158d72eab7d7944fc9c2a4a15dfe2e4e0445667d618ba50beacde9852798eca767f83ddeb4fb64cae2e382572df15ceeb4421c2f310e7a6933c98655ecc8e7423c47853d19dcbfde3daf04c6311043a1b06706b0bcf75c9e7ea052bcfafb771ef7d8b287919aaddc1d7fd951d6d32cae405b16121814058a098f075e991197494cce2a9b0346423ba34ab51d4dd48cc58d72ad2c3f0163273948ffd85405360f70d22b89d0d28dbd4e22098f408cb7737c57e7cada415350441e599ef5d493fa84e0dbed789ed40dcb6b8d214dc8234493ce2f854cd2f0567401170a40a33171b77965288f784774310ab75c9ce37846b951842592ff5331494e4cc870d3395f8b0a43d5bf61e141a1aa4ae994a40d2a18ec64377f2d07d59b857361ac7cba97f8f51cca07c382ae87fe4b74fdab12f2bd39230277c6410e4ed9a0e3e334ab65677e44145d6c5510fad2171c4daa933b57bbd980b9075659a76d26a6b89e9ea9a8ab8595e89e91aae2f159282359da19adb9ce902253a2804c3a6ea83c64cb6ca4141e7e8ce313200ee5bc7e300b05cbe04377ff85824462424553d7880a2c2b47b92bb26aea0929536e23d813ad1e9148b19be49f9be2e8ed1955cf1f20fa7795c308d46dd3d18b69c8dc7a6a5d90fdd1c65ff6ef83bd943261f46d5a90d79bd33999c54d817ef9f6c32f43e1c4e1a28b4330741ff +P = bdba7f363e411a7cb50207e4951f51b449b9fd524b04993e8d7822c33a4ee76e686a5194cdeacea745b950af2657a9d5ff3d7e665a8292d1533da2555d34f162019ef1df0af2385536abf3f229fbb3b1ded383b4905e0b125f276a62725515f027f657e278b891d728df9ea19d58ff730e433b9403b45d81515a969a80786033f13903f373460addf40a72592322368edaeee8d13484d5b0cece359c40e034e9756df69673c70980955cc1d041197227ed41c97d63f5baae4b50246ccc9199959c4565cbdbb88134e1940cd02ecbba17340f80dd163c27dfd97a5c972dc328b5af16751d28bf93419216ae26c7f05d62a8536b66e050e9117fde4807f9d9eb9d48e07778f6d28744bafac7ca426e65d46ec2c0167089906d04a64002f11b9c36cbb921dcfa441f5aa64b27bd29295bcd5f7a000501224d683dd82774e9cb768bcb78b4a3b4da0d195aeabf8aba3a4aa0bc83ff8dbedbf86902cdd69145ae72ab249e382f4cfa2bdf7c3c676e08f2e3ab2cfeeffeeedf39aa0d7ccc95738fa44445aa6cc2590c1b626cb0d89f5d2cd74104a6fb51ae3270d8724b7f7689f51847debe847dfa1e4b29766ba7ed1c77547b7ae6752100bfca6bd27665b012ffd58568f88a3e13c9cb1536173fa326eac46d1cf58ec01f7579de2c0ecc440f2c83aab9c285c7f983b26d3bfd6dca941d092c1d88a9e6a340e11da89d4db35e75f8f1 COUNT = 84 -K = 375dd5e65b83ab5f553156b08d814893 -C = a38dc526a886c6bd7123158864f61f62886654f63b9ff4b2c27675056fc9bc842d445e605b4c11c9cf67ff141369cfd2920150dafe91096ec88157daae320c75b8b5be0e0da706fd66894b791072630d5ead001e3a29b78f22ff4bf2cdc778ccec4d7ef14db7bd2471723ed627a2bb24 -P = 7d154f70056e42c6c02a40b4b2a1bede02387fd0a6eec5914b71f3059b0fae16464e4f33f4990bad5df38f44c55c120b5d3fd147d7a3aa56cc221f5473af70bbea744b5ab5b96fac9d66bc482fdc597db0bc80f519ccbaf7a5a6fadc3b0b53484997a75193 +K = a27b8c86c570adbdb35096335b40e5a6 +C = 142b893378b4fb2e972073f8c9d34ec852e2af416bcc8ae5cfac28945a4e259750bf7211cf63857386a54856efd9b23b00d42636ecb2868c2960690878f3b1b845b94e9f0222f1ed6c4461fde56a6a7b8cb4d2a7bc7b1f01fa13e2e8d03357e454134f46a1fcb1d33663755caef1b203213da97f7f80f812657fcfe0344850d9f4d9c45f7f818a9c22988594a6face58b3ce72116017fb2a11afb2db025e74d0b829193463fdace02d400febaae86f3e4252e11e4d14b751185b87d1cc2d0b528a4f6624c2aa8450aa0b5d8099ae6d835da927fc7cc89578e6bdfd07ffe2a73c63875445cda3bd475820a035b58a65d97e044b8a6a28fcad3215d6482018cfb470311e657385151e104a21dd28d73197df8891c7177766e69870a70b4fb45a0d0daddd995efe202d1eedca7b364bee3e3f11731741e5de46a760a6e6cb1be543f7ec5bad043684230590fe99dd31a0e53b2914629cc4f3beae17d84435271be18eef90047930a78d26cf661144b8df2747aa4177b6b11fe76d7a1b5e71613fb2ed1ebef2468063c5c6e6655ff31cb35fe3fb57b58a027cadca4488215672253f3be2d7dda1d80d69aa56ddaef8d60d3b138483325189192bfc0c7c7b5bb47719314cee825f313e303e1b025406f25ebfc63b3fc58c6df50ae19403da7a7813db0c7dbeb68f0d22d6cda48653f5bf570c28129811d147cf29412a8767b1581ec281f516d58943d503 +FAIL COUNT = 85 -K = 6f96714295f511d88c4bac497f5b5290 -C = c5f8baa98fd5cd9d1aed44971cfbbe1703fc3f773b18109bcb1a822163f75a61714e466e885585314e2a803916d53ded0625f96cd3ebee957e78d9273b40c102a6ae7acf523251b48771213918704bf30c7a30109b4f7ace7632467672dbad41b2d8f83116daaa5c5e84807758dcc8d4 -FAIL +K = 0e4a695d17a5b627127347c2bd487ee6 +C = 79fcb2f338afda9f2b4ce68049e4053d07f4c398df88a31001f561b1246759844932d7f185bbff80809db1c5875f326de46dd436229639a9b9e8aecb8e915b2730210ad16ed8c3e39dea4b2bfc3cee86067afe8d6aca239f2ebc52d59ad478503674ccf6487d31b21fe4f9de5eb3b9b3bdf97f1066dad802a31b931ef2e101254b601f9909ea869bfaa4242d598e2ffde3925c377d1312c536909fc73537fa5c0b97c707eeba68a97798ede53415aa15876ad7092254f6dca9c9445403d6f3b22aa7009e497af5198af222bf6be361cbb93e577ef569989aa4d046bbd966af1dad7a88843b7b1d94a5965ebf160c67346332671cbe7649024728982fd39e5294d5cb69e75fd8335cda30519dc4af29c9720702432199bf41d4d065b0f5aab1c7eba34dfba810e0d7e704ffd27428c5ea565c57c077038a957873a85a2f00ae99d71b59495b59de9e4d1db9d4cc2d875ef22db354badd6aa9e290fcb2157b11eafc6ee457940f0eb3b5e0fc6d6e0cec9313ee94e27f4a2812cf066892c6f8d31a1a5424985b590c7d357a7918c997ceed17f6db43b12c68f31e82c85cdf7c455cf6613554705f0e7e53ef2075f79d11c9641c2db9edbf3fa4e38eb0ad5b1ef98660e9328f18cf433327dfaf58ee690b11ecf46e18ee79af80b1472c7e07063aa3de756ea2a946963530b7e710774e424a20a0ce53fbb103e9be526f6a446e03894e9c48fe1ce6a86e +P = 12de0dcd6fc697a9a5693230ad4ae40974b7348e7a923a4408af8d26b1139d79745af9cec08b29a077f5a916a792cc08c878839714c9e8122e67cffdcc8bd9cea41a4a08776349827280e91fff7664652cd7ff423282d3d0b9ae910bf42408a0c64bfd660f22f6dd7ab86f026e19c03b1f2f3e6eca9f66e51d6c20c4c9f6c8d04fdbedfafb50ab71ae60a0d605e816d608e693a85e4a279087f89945a47ca18b5d7e6867f095d527ef7b04b97c625169b23189b0caad5e6951448044ceca717aacd3e3bfaac1cecc7c5d75a7fccd774fc676f322f661f387d87e77fd72fd02a67f0851fcdcaf44b9feabe529111e7fed05cdf78e1233d959f7a6dd82d3fd1a8fa592c0b3b276d5e80fb0b4a3a66d081c34722161153934f76ce175884eba3b16f74adbc8d35bf321158741317f53f50eec88578622ccef642ec1e148fd35ab3dcaa4901fb929e07b4281350957b12c30b6514dd385e2232dee8cec262d1b8f930f034170657a78fc1b818638f3f99f383514cad351d19ba825ba17755a17ba17bcd8b7c6d7bf83a73dd07be51205ee2e3d468b1639f710084da902cd43205fe6e736e9bc8b52418b09d648fcf30e1d5b1cfe7f2740e77b7f31e025c60da45b4ec8ddb491efd8ff03ba634d33164661485e1c1dc4459dcc79d663e4e875272387a5161aa2e6e9e7a80b9e7b6ff81d526f72c147699a799eb73792021f97a2a319 COUNT = 86 -K = 67d630aa55a007884b3afe66dffdcd97 -C = ad49f4e14c4b6ba4aa2394dd9c8ea3f33b369c18cabfa82999dbad9b49a56784a40beb6c3e55934e8e36f4276d3806f11b92e624be82c1e61cffd0296f5b904ec52dfd11c98d6183a424af226cbb44f68947ab580be2f0f1d90c73d77439f4808e34321280bc9f273065dd0fd02835c9 -P = 0bbb3cfd9ec658a1c1c43d4f057f444d77607a17edab33b32a8b92e9d679d811f4b19e87a0f36e4f69e724aa7b67c78bb748153f35b3070af073966664fbf5578e0503a4217c6013a72d212983cacca0594966c13384ed71483391e0ecac35b97b3af90ac8 +K = 8b4ec9c767123d44d0af644933a2ff77 +C = 4db7bb20abb8a213f919c2a9e1d679dcde663122e658046187b255ca23dae4193999988b94c3c3b4069d35690309d4c3bdeeeee99b029285ebefbb02648479f72ed4526de165b82c6333700c45626993567bf7467d1eec32ba762a4cdc894df656a609ee40f390a1d890a5d1fb2765d4b25e4bf166ddf60d83f0d17e9c042dedac1fa103f3077a62e7819bace4351501da8bd2988911b65a19242fd1810955b6d6d7b4a6be26813c4fa2fd683215511dc5af3346ecee1da337c0e4a0dc88708f501c93af9afed2d356e27bed287859353c4237d86baed294e37009dc38df1d0cacc77bab5c91c48808d42517cba06c245543770714d6a293169e1df46fbce64c9df8c0337c276716fe154ac228e01b80d7203bc05601361cf72277690e66d1bd55599447133993ae9e2afd74aaa4dcfb334b0efbb8179fe294ae23555bbdb62b20278fd0c6abe89e97ab45d2a5233ae71a342560b577f505d0c694b79698154d090a1afcc0f7066a9b2c541dd7abf76be4090864b56355113159a426558515cfe1b4c0d9c8949eb81f819ac4b7d31a1164bf01d2e4508d6c027d1132a4c36cd6f9cd8e10deedfc56083c224823e75cb2cdfeb1593cd6a3a0ec4b08e76e3826acafa1ed4a7eb0d8f7696de03677dae917fb5ca107bb4aa1acee42065f23d4ffe15a1f8dedc82a81a782d67cdca9462e42b2873d09036f1ec19e4a6445e4919499dd7f86f001bc4508 +FAIL COUNT = 87 -K = e10ea13b06159e63ef14a3e23c9ddde2 -C = 303d50c9550379221696fb88078ac41b5ff074d29baeab52310525c6d0abebee20899ecbf189691fd08662bb9aead88f08a86a638975aeb999962424ffb8b17ff8d719bd684b8f4dccd152dde8d0cc97ae8a9ca430fbbbd815be0d9b4ae904b653f49f6d1a21b016e81a10cc0c743a54 -P = dd17ab9b55851494e87bd2bec35a8a0ef87a6b5e68a351080759214c15838655225da5e9227c6b62f6d9d6836c6b4137980a38b8f78266ec51ef7a71ab821bd235866db37e59f4bdcdc6691e206752d674493c609a767b04a03bef1fcdd53f02a571de433d +K = 60d61422ece2e03afaa6cc336ffe5080 +C = 26402c2e954e0f28936318f648318e5b8b247ba3011f95de7929ec74f5b74c5ebdf3fdd042b0f0ec78f8ca5b5a0783edfb38b42c302f73bf16138281cbe14ccc4df18b68b7aa0085e8f6a3bd70d1d8e759c49af973a01d0ce9a7296ce9f55f658d9d571ca25b891fac6fccde0670a511f89969ebf66fbf45c673cdf4307ff316572587a40de32cb08403a53933e9af2affa37aeb5f78296b6842c7f77dfa75d65df00d091491068690a19b2d52d6fe363ec30fc30373d9ae1cbfb2a6325f880eaed840b50a71063847f317ae852a4c768d67d44871781c5017b3ddb1da0e5304791ac802aa8d80cbb5c8c5d38379be7a39a3d6055292b5fd28ef58cbc87e7f841c52a51f419a1a2fe4d1516bc0bd0a5fc4e5a1e59d4f0e27cec0f7a0bc1b2953f5f8b50d64caaf59575c2ba0e24541508c962da3aaf0d2bb44fba600b6b8f939e8c9c615dafc398361f3d24f88bedde4fe2b6e327f5e37e6291be04b1aaa3f1463b71f80c82e850e08da38ee702c42661da8e566403e4d83166ab86490189d216075993b40dd996f2cd4d87451856563e5a3199a0a85193d11362f2214d581411cc87973a3d4c9265139d5fc1db2c19313e5991513e5f94cd068bab606fc98db3b22f8bc906a892598a3fd1c68342ce0de1189401fdb87b3d29dde01545af988cc5281698a36853d09050671c2ed13f9e92410e9823e6b6a6aacbc5e66f343efc9abbd03f2ece5d6 +P = 1185afe908bc347cfa47c6fee8f36ba2b3eca4b255fe12da6206143135b08e9c13f5198b0fd294c14a1b05f1b7277dce2432f86072221acaea56b2846bf300a5c0521837f69916d1616af4876fa565a3d731d7019ff174057335323d16231c7a65d8359d44863960be4440c6046b6237f6bbef1230728a86c30656931f65176ccd3f9cbe962a4188b430f1f7ac3738170973e92f8b6b1a28b18fc7f665e36a9f00331997a56721ce20757dbd56563211d9908ea6002cdca1614d9a01f3aeeb73f82523f5609db89c29fe31f1c16f040e1fce55aa68a435f34654060303ac39b1bbcfac146ac9f20e4e95e53220c38df3fb4bafd9632898b78c1dc30e0135f22d47a64471aeb28100541e03633f6b498c86540d5d8aa5d4ec04433ea3e5a0b21dd83033f56c9a9ba1cba335b0ec1d54b2dd54f32070182e4d3fc60f0c6b8668a6f881ade75b74716a9a2f4822be735dd53365c4ac762dc1f2265164dd7afb89206d4a94be50e5c9f11ef89620e3ba8843cdfe541e477c5b0893062b9c1356faa16062c6b674bda35633d505ea0bbf59501633b8bc68da0cd9a23ca7de0b7ed9e5dd1ddf08039a42cf7b029aefd981d989b2c2f048699f9a3d65db4c4ae459e29d8f2f68eb890d1b7bb36b7d72c1ed39a4c62e88042979c9b33c8674d75379a39762881b8b69c30ada31c4b4015fbd382d943c74ead01de890b79780904d2a5623 COUNT = 88 -K = 470cae69b6a14804e3a16e8e6ebcd4bf -C = e153ebcbc7747d0a3f75381da5e9ba9950e5a81efb6521619cb6e55cfdb2607638b04c5c4fefdd0fb8ee5730e12d55848560097590e7c1e944c60a74ed8d3b94eec5e3d686934119e03d55560f402cadc06f158946e42ca2cf856cf016a309ec7b9a35fff1171063f6376e161c6e78ac -P = 01ae1bf92f6d36c07203615127afd0afc02662e6a305be49fee21cbd11f3b2ea8df15e69ff7d98f01004c054aa0e57f19c1554fcf55c422af7204fbfd3f453e27775c36ecf6cb7e0068dea7e0f39c83c6a7d991420699c793ea938a20c195b98cc65b1ec54 +K = 35e0145201fa31817563f8c05b1cd1f6 +C = 76827ac1807e6a6c0688113e7e06c92c4431dbbdf04d9c6c4226a83d5d7d1be501417fc6daf5e48c27a043d4e7ab1992d2ee2a3984ae4298c09fc23a77be405c79b1ff83b70291254b253bae1645cb85f1b1ed9f302489b40feaae1b9012b0033e73d3ffd3ed5e849bfe3419021c763c051a7c645a3e179b1f0299678b514dae3d4ad66097afa4cd1ea88f82aa7f44c68dae6de1a48b8eb9e3f185dcb6e0d37d24995a23ebd69a659f8e64adae10606ac0623dffffe2e8a180d007cba60b782c0e8d705bb38436a8a593a7d27b2f4d6f68ec666341a4fbeea58b4ae6a5612c8e175e81175fba3285d5b829d6d2c5a79222b4e1d65df2086e30d9fdc6f178bdb89efd9e3579ad5a445a00878e1ae42cefac1e329bf40b3503c2ded0b9804bfab530a8ace0660501d7d627b667aa3a86a33e7d43b682cec16a59cdac2c290e9a7c3ba15d92553be8658ba8cf852531098b93faf1a0c4d5aa125fc4c733de1600c3bc135eed495bc9390de81ba1c4cb82e0e8734f1fb5d9be0a0e5c2c3f237ec932258194b706675e3f790ad8c366f9cd9e010a09db8322d2c773a7b9d3f60cacc8d0524ede5deac3ef148a01dd5a8e60c3279b15800076917cca76bee7aec50a67e70cc06046d623aa1f15f06e8d30beee8000ed5f4dd41b367944c62bd827c6ed8e5ce50fe9ec1733d9b08ca8081c9169665bbf9d8c107f16edc3cc557526dbb7f1d3918f5d0e2821 +P = 6fe1405ac05f263b5f21b29b0aa857f8e7f7ce5bdbc8aa55979271af18d4b98ee60dbf12ae6873a7161a751e18a57504cbaa66f5cd63aab271f12573dcd032a623c117c4f0b72c3c1c71eb934456da36a6c45c4393c471097dc13aed227cd336408d8df788a5572f810a868aecf207a640fd322d8ccbdfbf65811813f04da9f6897f3474fe852b4f76913775799b897d48855f198e46c3bd3f96657b2445f39041981eebd879e3bdb9157eb90f48f9dedf4497b5a256baa06e02325dd48b1487fc70a877c70b36dba0fe1717e5f9b0d165cf89738cf90697d0dac82078e7e672468a36df18e876aeffb6a8057583773a8879f2afd9afc9b2ce1c0ed4e704054ce23155c0b1c19c5ab0149ad84b591889e177ca9ca2d42b8972f813130ff23f97df1f9b7a3ad7d8384ca96c60330f21a17db5490c5bf9c492a7488344deeca92157287ec7914a8e7a6cf02db89af63974315263f8188163dc47bf6f3070dc3cb7870f290d6fc72baba311f499c8a23f831955bff662cac7cd3a970d5dd852d50dc35a81dff5556b641abb3ed142cfffd48b14be94e018a9384812c87e35e7745649402e31809e5875a0e09bce5f9c1d68ae434e674d55155f17b9197e64ada75487dc71db28c7aa1e1bef111d1c6f325bd6f533ecbf772d1e20c9558efe2496ef72cf083dd2a2b536c3223319f9f52a6b19ff344b1f888ddb0d0d87a016199e7f COUNT = 89 -K = 004ea461d9a0d3acb879491825d8d4a6 -C = 5d385b09cba8d41ede8aa1cb6d4b97b4979e85573b76b13e5c275d605dac41ba7bc6bdf9ebcc09b3b31a44250a36d2ee18bfdc2183848a33fb64d55eee1d71999d588be76f3d798ec5ab11eaa8564b320e1fbed5f79d179367f5aaf07c62e988eb5d30de29fe002c8a5c9cb798a5d755 -P = 55157f963b598fef5fe87454517c9ccd2cda99b02f5fb1969323b39d9f0664ae8f946296b259c577488a2838afc9d5719d75e226e5f165783269d0db20fd8e816836ee9cdd596a487303c7bafe9dddd6d123365f4f8711bfa72243764b8b86210bc77d770b +K = 00a50ddf1cde1a0c263d08a98a450114 +C = 70e9aea9543eb6a548381c71ad9fcf85effba8b1720c9896818000e349320ffdea7887c1192c7cfefe839ab0bf75b86bdf40a9ef009b4b992a364624d6c514e7fc8d1e44d18618a3626fefb1ad6bd3ee4002b756d6c74b720e9f89261cccd9dcb306aab177a72d091566af44ab3ffed80d9a93bdeb66b5cea7cf827d762828f1b72e0ed4086c516c2c8710b5000501ade3bd0b56c3ff4e8b9c36386fb29f40414aaeaf1bfa8447135cf8a3d0fef588dd03b1702c874f3697aa72db3860038b0b793e9dec4b059f6f69ae748bd82dc43a7b6ebbfea6454824c494702923b82e841340411411b3154154f3a8a1e42c33028bcef74a9ccfe88607793edea16415743b0c065511768c906107f1c16fa4665a2d3f19f7c950348328c0db21117052985456942cc65d7835d425970cd31b5184b46184393dca03ddad8fca668b3abfddbc498488f57a56c53bf068c6cb3d84cdcf87c54786ac26d1b8a332dab2683f387eeec63d5b4d9dfb5ade5a627feaff91eea9345e906b51ac84166c1f6249ad21b2248ddb86c1dcdb01607e321042f2f5c48819e941f7b46df471f8dab82094e71a410926cc355ecbcb1ba638cca77c0119d858b1852cf26c1fe10db50cf7dc6da4acee6530b61cb29775042b425e1b8ec3e26e9ffc7468d36d9ffd7644ae9b113a49469da6d6c4dd50cf5a3eadc492f2bd5e414d0300fc21a3333ed39955b72e02c3e8359c0d929c +P = 5c49d00c077f649435bcea5139e47042b2106e1d875bd79bf6673575aea41752cb48221bb53d073f9b48738a6e90238a91fff3bf6544ddbc6b9a46a6bcbaf00614c27bd17aad95289184b3bb3ca49a3a3eb6b097159909a252aae3b28c8ffb1fba78ddba1385a46188156fc4a37eb21aa95bbe140697505775af0802daf952e8865683470513625034a1e2cf7f5fe5867ddd02a85914e4f4b2e7a1a312985a6207f7f439383ca00543def7b1f98e7f517fcf35edf503b02f7dc7b6110c7d806753a0a8f6d4e97bdbf0501d4e5d93d2d1bf3ac148cac2e9cc953ccc0865d487be066cfb86f1132ed66fd1cda80e5eb66761f7808a1015ddd6505724479ba3aea7f01f287434f5748daed6e6fac98c32e3de055475fd6526c53dda70aa1921a1b38ffd64b0a2baa19061d70fe5a2c32233a4a262776374d18d1b01cb890c72068eaf1de0ae76e150a314d0310150fed9b92d91d2cfa498231572966d560c6ece45425f147a4e799adc0b323a8ef588afc0aa4c276a7b2fff494ad7417b812751b3fc558676048ad0988d955cdb99b522535aec99ee3f0c2b127fb423175800b2afeeef2f036aa58b40a69fb4299cc4c227488cd9ef81f727137994ff4954981ea6faa074466043676c10693b29be886ac328bb5afadf6373ec84051fcb2f8c015bf5bc47c2451ec5f194082d1b0dc80770da03537184890328bbd7d887cf2c2403 COUNT = 90 -K = c87e3a04d243adf7a3a58707288f0121 -C = 7be6d32af63c30589f9885e65629e0906951aa5f596e4ed67a00a107210541e3f93c152552fadd3a795e373498126476b02ab1c0719c950ef7f031d17f49e9a1e3eb9b9164646be60c429197adc0281052e3b94f10c46859bad5f38a72ac53b73bccbe293a90fbc1a93dca0ffed0a70e -P = 5bd43ebc1419184da3e2b3513d5178b6f8d385abad710bf13dcfedae5b3fe27d8f2fab69d32d80cd424c6590f9c619800aa41e0913f299587306257c17ffd47b0a213e5d08f5c37961892fffd9609446bee07387abb850bbe785fe0989394bcfdccf43109e +K = 112003fb7e4a4ca53e08b680aaf09d79 +C = e4693de806478a9b177ed389ad5659e861acb9174aca61ba0e9abd5a2b2c4881e0095aefc26cf5b5a3bae40cf60cffb931f8c22f9a5f096870818895dd4dfb1c42f924b3dc6ff6d99bc41d0260efdbc78626b1057d8d75dbd632eb59fdc47e461cfff8c69b702cc3da89da86223323e51baad4f7a818f546fecea578d5806261ae754386df16db4332c58787e372bf57db318aa3a94e33ad81c494847a84a1c12305a0eeb48b5bdf346c47f8a4b9a216133511a7a3a5d0234c163ec6f6a13c70cdbcfb827671e7920e23c7c8efb806921f9943f2395124fa2990d859d37bdfb14412f98b32faebc2e07f1bac888f538d3a3aa411291976646a63348911a93508bccd6ad1a3693e7a22096d89aea355e17efeb6a34d28a0dace036546215ac2d73c1f20470c21d08395c6bedb9e2fa75c0894a733a70ed0d7efccebe65c4458178c4fbe04e3f190d7518a7d5ebb5b9ec92efd55aa631476d9a0ff6eb1530eba31b2ad9f320acdb43266998a5d4b66e31ec6817350446a551667f13db14311717491874e9c472b3f39befd335b97a4e01c02d5c3c009069e56e40c6a9d56ef4a62b3dc9fd65ab22167deaab83d5b1f00c9d05982f607aea37e7f80212a7dfc4159b2797afa0bd949c24b65a50b58312514675c859e61de572fcb0ea4db277ef104d396a4e6685d327a4a8a112e249bec88ac3f89dd1551501b05d314faff3157d9c9708028ab7e4613 +P = e9f0f9d6ddd872032eebb2d2d88820e9be3b904c56c8ab62de44fe2fb2f98ce8d17825a80f14828df7d75c61a16fce2b977377d5fd42a92b3fe7c6354d887f82aa40915b01df48bc8fd9bca14502715ff1af293a09a5164ab3d114105c11bb085fa9ec66c7986a73240ba3f78f488a35fce64c025eeb37a06aaf77e2724284ac740794f328ac1356b8a2f75fc452d6e7ad6c8c7fce5ea890588e3a0d9144713f528c120537e21f53684be97e5a40513d2b3531b89a134dfc395060276b79a055af3ebfe64be77cf5d97f5ee52a3a17db15578af44b79546c3285e44c4e604757ee0d0afc0136e8f6a711c1b57555f1bac0072cc6a5332d6940f72e2ebbe42d078bc07cc3fbbeaae4f001fe3951cae7cb0cec301c6546ff5ae55b08e3c1139ba9d02d660778313314d9094e75f8f3db53bc9a06bf66c5b91759c7233a244017a17092d7492e8fc24513755a44df25e438e49a4a0a33994c06fb9a90c8e4e0441e98d7220858b2305cd00cebccdb62fe9ea037dadcd51cd43fce2376c179d7947dbb6362b508ac0b2121fb3f606876ad1bc5f7174f98427255a43caea14dff93e5fdd40089c185c661d1b2d9290870e9b27e3ed84cee61449ae5b87e974f37c429ad2c45ec3d1175b538807175139e49850f0c58f131374f769fe37799c53b859d72cbbbb05cba6cd5b7ca26a233b5b24733104d9c8fef8edf989ed129ddce8a59 COUNT = 91 -K = 6801637408f46b912c14330a88ce02d9 -C = 31f78f54d749e02014a8580f600ae1de796e08efa4f6b60230b979f133a0b735967304b67e280cf25805ab55a16765ba209a4eb66eeb902b90db633d9df1e71e1f707e8fc938adc415b051b6bfb452816f51cd820197b79d16816bd5263b10cd6ceec3239aa1288c731e146a9c8e7bd0 -FAIL +K = 31c190e95a701adf39ee28f2182c70a8 +C = 326b7dcf201b1fe6663f6a10e2180f2b1dd9cc52191c79ba0146eae1f0542125871e898d363d070f5b914d82b0de0fc292a3e5a4a90650f0ac1b0d7c0d8d07f834eb5422551282a86e7877770f68d0c90ccecd42dabcf627f41c3d5f898f41ff700f2cc259e2ea24a4a6c9651b9d2bc2f22a4843b548e65d31d5e296db66b1c74a44379afb168c069b141c4ccd2cde2408a565c9b021ca567c4e82b47826697838801a43acb9ac092f3020e0a9a14018a0a9c9ffc3264cb8c0e74864960b17da1f901d962d23222e6d0e272e166c28a86fa2fbc34aa239f329089da6ce01220b01ab2c84535b7d7e3a4b423d3d3cdebd4dd352d22264e5ba84d75a61d3d9b33abb5760fa27393f49b0491ffac4b1142901d94eb4c3ce96622b4646e22f05953d69ca41d383682e2dd8720af1cacbbe46df0cc1331969119546dc7afc1c0d55b22f062abacb39e28181316b7f03d92ba19794d450a2173a33bbc3a8cd455fc86d2c94d05eba3621dbb17edd1719b30946ae503e8216ac32a3f85a7d4c9234b44ddcc57d12fe35da9b76cc7e4dfc1e9e433a7ef1f874b32413bcb7f08ba29416861fe7c6a3f240dd6049b8e89ef77ed9138cd9816f2d8743e3cc97b6019ded15c5e315b7c303deed157b710d5d0df502d1254b0a0375afb8a3154938fc100ae25ed31741d1e9543228796429740d1da5ce3b3a8c1b001af491312770e9168768e538c9980aca0a5e3e +P = e3b96cecf497fee9b0a5449d0d20ca709915ccbefeda544904651478d1832637930ec85386889c813c8ce94c04cd3c22e6d94922960e373559731f2c430dff7fedf541b98e8dde8557cf65910d2cb0279fd055456b7b95a2f78958a4a71d5168674ad66e2e989d4e342bb32448bf24bc38d8f1a73f43b4d3ce3394cbe0819d22218104410635791928d3fece9d0806712bacf0eb3c1236987e4e9f66b24398f5ccc11e0c6094edbff01489cdf00e413ba88191d3476ad239a5764eccac11405673c7136bf0388a11fc8404baab456b424faf50590c08e528b18980914f2f408af2b2a5dd8e60907ed49251d8799308ce8f90547f02d584a25469d5226de8c4467db2d84f59c8354658a6263bea93207cf60a30bf5dde87aa87878c45922d47f8d5901ae02f2538fd5be062854a361570e3f91d87a4748615b5c0fdc40a2465c41b6048ef430eb1e12dbc023d9831849ba890baa0b10b290244398e7c4122f7e43e34e41c3d8d1ae9242730ebdaf9bde68003331c57699ba016e78d5f58a9fc1b75c73b8479e3e687b2882cce156b1a7ea25dabbcd5620fa38c2ae0818312641a8c648ac70c5d0f5ab43245d96de3ce36320e71961e650f30dc330122b12783ac14431c2bb7440482dece1e2d20fc3fc89f0dc80a98266cbab8150f5f78836d84d45789d0ccd4f321b544cebfc55998d762e239a325e74c56ccac8283e21725b9 COUNT = 92 -K = ba52e5fb8bc06310c629c773c3acaed9 -C = aad04b700625c742d50471fda37acbd8f73da981dce4c1499017e11c5aafc0bbea3507ea4f3953e99df6b53cb4fac091e1db9c1aa4538ca0c1c5c2cfb2dc5a2d27c37ab690d4b042b920b331b30ec6fcb47ec066269ce259c7f4b96bc731bb123d13a45fd5f3c4f21e008bedd75f7996 -P = 5aae7a4620ba6983fd38fb8413d6ce23b076f91c08b4fc897a63b246815603524dc4ff39f5d92b52e574a9eafb05cc297bb5a7775fd2ec2b4d9c5138037ebf603e7fa144704846f17ec6c4c0730ad9bd3c0d7631561ae032463b0921dab4168b8d0c4210ec +K = c26d5d8e02fa10fefab24eaa6a86c5e8 +C = fc0be0804e88a10380bd244013d9cc29647b4f2778d2510a7b93d43c9c5a604a8ac24ffbfaaa35e712b6bdac7ddc0b788435aaa1ee8b16f00d01a0a3611ab22809332e259346cf38900ecb436742aa3ad60d53fd6710dba48e9b79979d701be6e985c92ee9e31e1bfbb8c1bb42f57d85d618ae4cb6df88b8e6d89ef415d9e6deeb53962c2ac5f1cc02b190d00fafd935f2b750097eada346675a226e388d2adff65032c6bd04a0a1d45fad69e756e68706af866d10f9c8006ef189fd06f6abf85714c1d8eed66a2c2645666b14b4e0f4e8d66f71aafb96e8222eeb9a89db78f7255ae03edb1a8db1723e4a8719a71f8bd7e221d91e813570d7150d35b63bef234a44ed38f3120d0d374436e1b8df52ab59d5391c139ce12fe23a4eb8e6abbf029682a9d995bf91022837e7649b699b91684ea8054819917ceb48afa885f809810743c0f13f4f28e16d3aebc0b9906a884662fc1073fd1709336a520795766576b4c445bd5d77c4ae81852894e8c9a584add02c8777868ce29d6b71e6e106face9f542a0cc14275bfcc65380e4dfafab76bac37bad6cf817795e70d948a3ac2fc51cc16d9163788c0d1bbdd8376de4db34b3cdfb5738743d16f4e43c3458a92b093cd94b973ae34252ae5c16f1017be55d31a45e1e9ee4fc19056b5645fbf8f66c0d785402b318cde6dc76aa38805c80c2de80d95e54b60e785ef99a77a063d0bdabf0cc79b60b4da +FAIL COUNT = 93 -K = d5c983ff4f2a8916c52b2a9fbdb672ae -C = b217ca3f2f48a8c9adadb1bdb5ad51ae1fee8bad38b67758ee01901f0a3fd16b22b3085579b3cf0144ebf3918f19273d569adb4adacf679a502454851244623edf02d694d23b4f3cd676ce35019ed39c2c45f8963e37e23916eeaf87e7520db1190b724aa5b6aaee53ecdf1c1a100fdd -P = b1a933eb8aaf13862abdd1878a4ace31af60c1d47d8d6f65d1ecd11a5ef2115958a78f5a8a9945f27dae62d661a9813e3cd1790ada98dfacc002b4662e792cdddeae21ebb88139264a4f13088d25342de4339bebf86e0146192c5c2d39a71ed4b97aad95b9 +K = 4522669fda90760bdc6bca19544ee58b +C = 620477747d706238a9e9c1fd5489f627608a4ed9fedcd55e7d29e6663bf14ae5921137dabdccf63e72c73939505b3000996354f00fcb99f3bb9118a4c602580ba67286490ea842d0051db7db780d689e8e2db2a676a1ad4b53084b9aba3ffa50e60cabef3b2c12a51114a103c962b441d1c8af9c9c98976236a6d5193ffc114b585885742b77d892f69b153b3cac2d69ddc5b833608426630bccd815ca846ee3b6dafd42610cb08e7695362f42fe927e18705345f2f2f35ae4a9908c9f4585daba2bd162ef23a1dbb9afc843846af15016c91d811a958e8bde0636bc469bbea7c08f2e97079971024958b83544a0b4d8661c90df13c8a849439465b84b8ddb0b3b70043727013a5c4130e444487c8586b6a1e5adb5fc96dafdc8bbbf749d311566b149c58b62ac97b58863e6c215ba5f22d625f3972838a09e6d8dc16396507a8862b8c618de577e2907f6193f7ebb6dcf956a36f9872fff9d4d4dd33f3d71a09b8425aa4e68e67c3747ec1dd00799dec593b0943665d8bf9db3f08d9a0d98d39251465c415b58773cd2d84c70f6233c9ee466ca7195dc4d5a7967e3aebd4204edb31130b9ab5f0212d5a1d8ae4357042814759ab44154b324617c8a5b99fa82ad58d50ae245ea27060a9b77e5cc88c5c9601efd49f765d7036198f301f5939cc7913da1d8dda45cfbc578b7ce12636cadedfa08dfc4eeb2454974a90f716a933325cbbb3198b0e9 +P = 9090502ed3f81c2b3633424a8dfaeabc13d5574a390baa9bb27e33816b113ab05194d714ba7baeec9ed088f51b314ae09f8b035c0986bc6fcc0820fc74ffa631adaf662e8f9751c5ae9953abf4c0fabf23310c7137d028b4a288a7edfc8413b592a3ad2745d572640bdcd78a7cf46aa932cb03ecda3691dcf2497c31d9fe73d7d232977a3762c36549b90c0e07a651b6696a8708518d9bc1eeae44d3d6c5ba7abf8b4abebbbf6928c5c3f3655229166a1ac76139b0eeff31078166e2f79d2c6d9a0c79c5a91cc16359fe099db24b09700092bd937c86aaed9101e855d6ea3d6d14a80b724f066800987a2461c5ecb0acb2b860450a8691aed02fcfe1bee02fc4625e43e259b8cc570f508b31aaebf388fa55b905ae409a76f8213ae3567bd450e2afec73ce5556ca1633c24838cdc24efd7d55181db3f72f40150bb974b52fda7d6aaabbe6778a0ce267104821c2f776066d94d06ee1092113aed41f8bb42a217dae735d625a6abc51753564f202ce9f3d882c12522af021210392af9778d9d4c526ad7f739ef3b547317f6087f0a3d29c4405b53ef19dda167dde26c9fafaac55b856e246ed65321a1d8f49399080ee627bab1f69e57073e3be22aad8f913627e78ea0c29c69cd04b6556b65c77fb6a5f3b90b34237193df528a7e43165aa024f959fe97b81c875c9fd4ff33514336cf6bb1dc7f413198822bdd50f891e4503 COUNT = 94 -K = b3314132824b70ff9210821c44632bf0 -C = 3aae788397ea8b6246764dde19e63316559ef8be3e66fe316805e68e5a2e6e4f62829ae6ce207db168ca207fe87024895e574e9b52670527120b32e6e7aad2560cf214cb77e8a499ecd0889ffd5d6039fe8ecfb0f69a792283b06fbd161c783452cf03f02d301a145c783988bed12063 -P = 707ff4ba1b2c7ff998b2423ff5426f330fefd8b5080c4db80e44c4691df50e2dc342c1e04eb132ab172bcedd7095c3ab260d5791e8f2d66d3be68e5a993386bd27fee0585bb4b26192379714a88056f240ca632628ca2d71318f91465388471c1b2a87b66e +K = 4d087992fc43e9b7b5a5368a6b9c7977 +C = ab5f7e3201cf8c801d0e903df4c4a728f9f1469dbe294f6aa3ee89b0c139d69f87058a98c5403b0c0f7e078c25f93c5ed0f6c5f06dcf953b3d14b30b3a58a281d997cbed240b592878932a03ef2c64305552edf42eff36de5953d54869f0008559724d6c3f04eaabd8f74bc9dd2e235384eb1ca662cd29a7b7b15e1540fa9e1fb0c4785e5ae69e837ac56638c9a069a6a49e40ec5b746a58ba1c5e0486fc55750b39bb17061c171a4a123702af9aeb96073dec91de05fd05b4856ace70321b2c0749a24fdb2bfd45e9c0eecd35ac43f763b4813a8b585d6a2bea05600486af752db127195f7816ce480052d7bd32f0589f2e468e375dea2aeb58cf0037d8bfc923ad00080c6c0b2ed95458875dc63f326dcf98f7f1f72b62ad09ec28c48fa7e242445a82cb236cc30f058fd8383f1aa720c3a1450265eefcd476339256ddec0282a25fe69b8ba235d0f577da4b8d8f33310a583d7c7eb844110d56b46047dec49c3152a605cdd2b124f6e8df4f415473e1597ee2d8d0f58ee063af8fd69deb5e0a5f86568c1e0790260f8dad3f882a477597d76c613d25691ddf8bbec8ef7c50a4be0c3ee6c8835beae55afa08ac9c7c14d1d22df4a915754fe78b1d0121fbb04d168486c9c84fd33d1ef4ca51a4ee2a3e11772cb7b06cdd8337f498cccfd3080d1f4ff29e307d202e76cd96efd359b6850cfb28dbe56ba75b3bef017b8c90cbbd86f44c0facaeef +P = 6da4baecaba4dfdecf3f6fcb0ce30732f12baf34e745ef04cfa0a7e06573a5ec82073d0f4de52c2a47d31d2a3a588ff5b8862b1db5904011c7094efba575dbf87478b0dea00412cabf9039a7606acf6e05a8cc51d8d0aa222067332ce12f5b8f5f939c0ebdc207e1870b7ef56fa7c137e4e7e04d5792e842e067d5c5d8037407c11f60b4fe205961276037349c3d33e512778f531ccfc40644120753197abb826b72777438e5fef388228db2a7c41f5e3dde715e5e5251cf5136bd9100ba25319a16f14fd40fc7949a67591e07c7f8975ab0faa7a72bb0be90ce655a9327f402ab824846630720d86f0811b18568a2a267109d46be280c64487689283e08318e788b276c4c9423a659c8fd70741667a61def8ca4dba302396d3b12ad9c275088828555e55824fe99795bb851bc233ea5ed116410420b6a408e80a3c44ca16b977f4c04d482740b975410a247fa505a061d81c6dd25da6e813c814a09d9d55d09cefabc53902a8baedc02214f10267a3c45ed9b9ef6b0c73fae6ce7da58116c2cf0c179f5b0203008facb42e431238703dc58e9fd640a869e8a10a0d36f37a943ff5d0d326f5936fc7badc098a7f06f4620ae9fbdca3acc36e31d4ecc65e7c5ecb8ca61859675bbc59a552129013b4a962f3e577fc505145a6f0fc93fb698718de961098cdc5abe8f2ce7e167003097a982eda21ab0fd1faace4d9ce7c098efc9 COUNT = 95 -K = a85a6aff520be4490109d139ea58a09f -C = a27896678421f3c82f15efe583c396a0464e4f25b02b2ea51065b1cd60d7cf4ef6c369a4132354fda840b45ea206f0fa590601bbde77f6d61ed9cbfef5d69dd9ab91792f248f23f01eacd77d33d2bbf292c5cb3456c31a155a9f7800e83bf70f636fbb169b3080da93ae49bb944f31f8 -P = f04e14f035b50b5a4a71c99ac911148996e96efaeacfa8615eaf300673887f9c57a48c495ec772773c2ee5db584bc052b138d39320bb354ce6223c2d0c677082fc6621f41469b44e765056eb4eed40f44aaa008bcea76631937dda124b5bdf0a76e190ca10 +K = 2c71d34dd934fbe22ceb47cd2ee3c46e +C = 4a2a0d0cd394aa7c20af118e22bdcb75f00553e9ad9c323f6ebcc2664b695f45ff0e84a6cfc6090b1d0a8f23cd36768dd80565014eca636bfe937a4f57dc456321394c38168ab1aa13262c1b9a5e9216e83257b12ea44449fa25745763f702d3ab4c12de61e13d285f53f53f8fcfc4382d88ffe8dd043e3e57a3cfb0b606c4a101437328de0fdf96d84f16ab9da69df6f0000e4b7b976c4a0aef5ef48e8c9dc0daf81e364e70931f7417dec54b4098b4a3146081fde05f55d73aa4bd70697dffba15ac05ca6744197e15a0a54a2e1dee0522897a975bdb018ae11c3152cb6d5a705a6c62fe4a3667530bf8824f69604707ed47426855ccf5fc3d585c845d676e4b483ad7e38f4fce96446fb7b1e1ffb8cc79e58c13a70b59936633bf7fe0836169cf8ceedd83aabafc9bba9fa6a24c80d8e37a512cf9c8ddf9eb849ffbda81c664bf19287219b2dc2b2ae3b8369a8838e98d6f0cd8c80065b1c137478cbebd121d77942c57e3fe4d1a3ab831d1b932a9c8ab4c75bc0df80d9d708ae6412518379b45c6f3a2d365dc5f0e0eb0fe759c1e7cd374a41c18a9e77f4d0ae4fb4908c450a0d02a8e46f9ca620883fa3644296024c87ac476c5448dac64eabcf84c98cd3cac15fdc31427f52e15f50a2c75062dd6dc74809cea81a3368bc66250fe73da0a91aa23d8dbbc328cf32ca30768166a61a945005c0f95226ba866fd0b84fac89ff0baf9afe6eceb +P = 9d25b6f43e34cc9ff5f8e47d5024dbe0ec05e24b5d906dcd5f53e87e345b7d9f3a0c68260632a9fa0b751cddb50f4f1564f3217d1e1ca0e3c64337d18144149c472f55ff84b5bc0793cf7429fde2be65571eeb555d7a1e672bf11d5234467ee49322cb8f62994a631adc6324d5852a7a11a7bcdfa6386af83597dbe963176bb3aa9c344e015df8c2055483c0b77bb16edd387396963e6ab3d60b19fab312b95db2202b5ab766d5be603935d2f340dd62bb9891b0e9f2bbb1de12eb5cd00406d182367a8a9a05a59078a284d624fcc636d6942defdd8747f7ccf925e21af6865a96c80130f249986876af3314ec6c558f52b348f3f11eb580c8991835cd2a217da93b52bf478e511cb987a32070824beb596b75832daaea39aa8db3bebb029bddd81cdb8290810b21120e5f192a24d9eb35a094603296ef45ecd8bb936d667efe968ff15ceb1bc75e1f193ce7e3b41b8cc3cd73e0dcdefdac258501c175a9fbbebdd4b2ab84aad575994b9222bf2e07c5b2daf0abac5f1f305a64d0a773fd3daec2a517ae50a5b5e3b12c490f6d50d50ff4e125ed234e675e3341ab00dfbaa42358719267cb888725ca7edffe47f4a43271b6f0b5e01efbf4980de26ea6e5fcee4329ac33b6741b25ec0ff807f8c33cea808295065a5062e55e1a0b84f90208b29091bbe7888e463ae096e89dc998f95e06e4f791238771c548e61f91c4cb731a COUNT = 96 -K = 6bdcc51cc4bcc85124ebe5867c52a28e -C = 1365402cc96443e4446b9a98d607064643197f49efd8104004ce37209d3601eedce4fa75f92a1b31e4bdb1ce0f0d90c639f01ab503f39978a93ace90278df8372d0b7eae517bfa0358eb6df1095c66943362adb692a96a553201914b78563f968f90b5a27ce3bf57563a419c05b23a0d -P = edcd76c4eb730fb8e54644be497d503f892743188cc852dedb1c00f23cf4d1a6f4ade874716f468e2fabf13eec99bf8e988012435585c280c134c8743186b243f056adc60628b0fc7e549a3ffe5075d130d7399a6f86962ef59e9c9aa512ad2a1b11d6cb82 +K = 4106f41206cf069eaf5f104f2eccc646 +C = a26d0a8fef277bffc0fe981cbd8ac4a741a8bcfa778cac7986be76fa7add10a80d3fee616c6d66fcea5244edbd83f33e759beef05dc92f6673dea080c76142d36cd879f3045478646846bafcd5f1cfdee5cd657dc3fba63bcac25527ac09f9384fe849468697c9bf50b98808c2678dadb2fa84e7e5c0dd9661492a4b2a25d5e620eb1bcdf119f85581326b42276dc5f04f5a588aaf2d4634bd91e836703eb2130642585044c6767d29311e13b6f1e98298affdae67b54765fa086a7e02cc384fb7435cae2da13287a318eb2da8abdf98f6b19ba414550264ce5585e79e0164082fedf115995cb441127e516dd5f5f1f7de97dce8eb3f6ffec561d5a713c915e8dcba257ff1b47f0a6e76a23b8c65ccec77113f531c0810356f88797067008f3828ba02ff02864f8ea284fa9c3fc9da558d93d40f928ae6aa4c97f741ed10e976f0bf4501c93367bc436fc9962ebac869c0960f6d4ab93697dc7be2de26622e8b39f0297b9cd15f77acb0326b25523812ea20cc91a853f65c2284e7bc1bfbe6a36cdb7b85388e506457e9c9d6a42b579ee54a991b35097eb17595f8ecc4aaaf3c39d9a8f009b8f5af3df7aff924b5ecec191fa4db7c73e208661b21caf9fc1750ea179e68998b2783cafedc86c9ec8a70d6732cbfed430f469719dcbd3109204c093829e1ab9f2683ac06c78376ff86d046a879e3f2089a9fbe1d4a46c43658fb9507fc9da2ae0372 +P = cd7d37f9d29817caedd98d24f776fdaabe86e50761b26f1b6bdac651b73950ee61fd40f1204ef63c15a25c97e2ffd9dda95b7455a47f7067179db0d0a159f1a531cf6ed3969a480674eaaa9017c40c0e3214fb1413ae32012238acbbd3d23f8047a5f214708782dce117caf820b4a4ad1e9264342402795ae53dd55b6c10e9457858345f806d791f5dbfca764e12065714a72d7cf51cf83626d7f5cf65368e543e05453fc4fd5c973922f9ed57f62d4dcc06c32e15b4a1a43029eb03fb19e9fd4bffee946482b3fd5af52f4d90450096b252381c32b85185df3739e134ee8e0ed96e3e6d4d4fce54bfb9c7101bcbf4d973c94f8e8ded5f4f963615f0fa2f9817f3eb491e9c5d1cdf89e7be6bb2fc44bdbd154f14d3f2b0b35fc23a8a29b09d4865c73631750dcc9a2870fe3fb63a9cba1663dee9ddbe898ed20608f70d9e571c7a0b67fe0c8cd2f37e5c0b9089069bd53c4b4279a2890dd5f0129ae796dd35edd9216dec4dbce77bb4e5c0c3f474adf5fc9da9bf1fe6ea9632287ea2285a2228b3d0ed5f55c2dbc395c11d075916ab611984c4a1f1249dc1f946327a157efbc9ddc6a616f846cfd75c8a96eedb31f1e12039735d2f4d5f23a41c6d18de81d4b2f169507ef1c9616409ef7f370183f41c29b2e07e5a18cea4e3861879bba74ef34262774ebdb324ad7ad5015410cf24d96eee9d63915a1aa7cdf0c186117a5cd5 COUNT = 97 -K = e44097be78ba541ff51e0312f21f3449 -C = 6164400e4be7d41d3faec27f172d7fa079c6127b18bcb8ac7530afe4f0cf197aaafccf9eff9073f97c80f42a6ffd726c5562d79aa9f6699b4c007d795d9a6755c332fd89c6730fa58a876c56ea6abbd08edcd6639ff76b9f96c24d268b77cea3998e5c75bfae933d7f0e5a1045fc88af -P = cedc11f9374eadccbb392ead346878a3c7707ec45bd68de735adc5469d663a46c2e303185e2ffe0fba0e45995de76766ca8f306e8d5f6eabcedfc333182613136a4745f6613607e430e2a7ab3fef315b82db3c815e8b02252b78c80f997190188f651c72e2 +K = 8d1cbcc2e8975014e3d309f7fc21622d +C = d85b1766a4240fbf1134f13e2f24d48f78eba7917e3957904853bb6a35ce697026ab91031893eb990a0d69473ef545806b5b778e5e489597e6c1bb3e56badcab3d123116e82c8c30ae3e4d82678e1b537c88e8ed7219cc671c4e33086c675987c3ef9b1fce2e128df5c8df0939012e02ab2661f66f8bf1c356d3874e538c79606896de55043e68c87f48b2e823642b386919b7a32aa6d459bc0071997e5e3a0b96573fb7797fc0634242234eea455db7352501b7ec5ea3667badf4bd0b849a4a67a72efd91508c2f2ca034cc48845b3ecbb2330c08c1d9798a48d4017c1b3a2e14dc64c64b1e908cdee85da87142c41efff5481cee3ecde9ba4fe0353ac1712c233132da894f842d0fa367dbd4e520f831e99b5e74bf8319edde83bb187597729e668d02a72df4db964022af2d9b518a2a59c9c5864f1f0f5175b82e03203a2fc53fbd53bc3800e397169f12f428b80e19b1433cbdb4d40897aba22619658b05f8cfe5e1685b9d118533c7d2ed4fdfa1af41f9ca94bcc4fe4ba7ccbe46222a1730aa1297ca8f9852f70740c6ed4c004ae2af88e8f35a05cf2912b2c7ad7f5bf5daf50d31d2da9fab62a3a22cb4fe87a0400e053c73fa136c085f8c071a666353288be79021c7dfb2bf2ac7019750f5af82d66416b7684d62962be3c7174513ed4c1b15a43602e3ab3614e9027098e4e448c329733b5a069671fb604155cef76e12af95429c723ed3 +P = aa70263687b4e7feb952fb09211bf322cda639f42eff5431dfaaf25dc75a4c847f22a294703a323779c7cc3032f4c2b1b97b0fb877ce70f4597f16917f0a52ff0cf748ece280903451cbee4438fec68f0ba3ef4ac912c293bd7888f2e5021ed9cb47635cd1eaca29ed49040d67b6ae3f9d8a78fe3ab03e8d33751bb5bd4760ef1a054be03eee70cadc157e8091577492be8ff57cdab9da66da98882baf0a2482d38e5e0c8c078ceea329da66811db5012be0e5111d610067de1520344b2f5db6ff861ddcd1660c879c0a8a4c82e73e66fa62f036a4c2cb5a17ff80f6fe03a97faddd8ce5fc76f2336fa08b5fde046b1156b266b55f345c52a41603afd0d2825b4bb2fbd8c1619642e9c8e86b4d3a6db07ff8c50d0f0f196c2bbf96f9feb24006d5c5ae4f253669301867edf8fd7f3988d2f1167976e211bf7a813d683f7d9ccf248cb7d423dbc39b216e6f660ae0945dee739a8f62a69f212c2faf97fd3013d8770d76ce2f68c10c63eb06b07f20401ef766a99843479edae58e8da9876d041edb119e380105d10b70f64013319022fd2335072ea1eb6fff8cc0c73b725309c10accf6bffcc1dce17e1fa2f71489155ba711b7256374610dcdd51d2894e341e3f4e7e981cb6ef2687c2f8044fcc45b6f2b0ef8c0b21c83ac81e0b837eb7c9f6e3fa510158e2e93e21ec0c88646da33bc3790ddf615e8dc757fbf22ed481af1f2 COUNT = 98 -K = d5f24e400f66bc12be8e31b0182fcd8d -C = 5091a3d7b87012645e403c93709add16e3b417101756866fb5f092b16c4d3a67cf729f3fb57429f4df9ce00693ed36e840574fe0e415af5a6c4e2ae4078b047c259aef55c4e8805726a1ad98bc4a720b1569ae8b9d2666307b24cc5965099f4bebf5368d359ba86724b129548ccbeb77 -P = 106b9b5869fb2a8e9940d815a375465a75c643a18dafa365c952f75ec6dcf1d2258cdabce1ed11a6c1437f44fd3b667191579e334589c03dcdc5189b6a7ade6a12e243636f322e76af57c4ccb4dff434202918dcc4788f9f5033f1b681c4709b5092b81b21 +K = 221be561260def0ff7aed42fba454604 +C = d6a80f9323242f575e8e46d995f185b8fb5a65beffd7156c0ad2975477ae8620f5e0258861530c61f3462d85474afe9bab20c6b9663dc49dc18bf4e84f0fd2459f34e4aa6188e457d36969c75c96065c72ca0e1aa028d261944ad4878574f10413bcbb1f0038844acd31f55b4a4cff120bdb3d6e6c93ffd73c7bad9f21b5915932c6b645a2025b5f4c97d4741466f19e6c1ea8d3ee9d0e63cfbed5d829cee1150b03cad1eeb24662ff79aa4780c593cf375d15dcfe5ca8a19454161fb96731d49a01a6bb7cfe54726e10ca160e4bdb7061b74f3f05f3936a1fc718c403b76315788c5f9ab63c9d3a432091bace9860f0f5a3a9802c13f868e3ec1ef2811ddc25dbf7e59d2581b2caa1861c68421200091d38b32dc452a938fcaae7bb74241c06303a305ed3dc2e0c11495c689bf8a9a95455c1b562906e40cd661700da6ca55b0ab17c8b98106836e307eda85d094b00c00ed1ad86b09c0f3de545704eb94ad5b9f62d7eb8bf738528b7ec7ac56feeb25fecd49f37d5f5a91d3d9a0bd311d6215c67d1b04ec946baee9137a68247cc1a162718468c48473d2d5a3db050f75eaaba4b38250df0e418b4b37dbdd14553b304c4ef77bb97d03c2d9e44f4977c1ee5f1a03ab1a950b0a994ed4309a28723909fa3298eef57feb45c95e01a703c35eadb423e6066a183c7485a3cfade8718fd51e1b5d2ad188100c9ee5d633172000c80a448aeca603971 +P = 05b60637d64abaabb8ea884853d7b7e6449c7525c6baee37d6e16f405847d46e00659feb1d665f12dafd910c26f82240963ee473abcac825abdded2bfa0731e1f20d1c43d7394a9d76c7f6f53a7bfc489fecd687ab5b53efb36755e02d22c03c6816e76d369abd5ec6519e30f1d74cf79ba99348f6f8b84a0e246d11d2b56718b6026f04e25603eb8c5e4325b2dd92366a421f9aa2bea1758595b1c1ae47ac214ee54aa733a6aff95d2b645ffcde500e43a71dac82fb0020702bb678ca7ffcc90d481fcb19022c86487bb6a5eea6b7b2efb5ba201a2ca076a72cb6e0a5e5193197769f993673fea4b64523c03cd53163e4f4d40477f75aa1374057d2d3db26722367ee4dd9bffbc34a699e6eac090fe989f9f59c0bdf14a3f38796caef0650b4af052a005be18fae24d287bde7d9bd9ba79172d2b38ad68c37c87b66eb44a65277f814a41aee0abe6f1b9242228cacff6cbde38f4aed4027ee2546e1b61d19ef7f703d706e6d8427bcea1582dcd08b13b13d2abfe6b5dc30a96018325da06358d7de52eb5b76179ac7983f103f8323151ba8abeefd66f218bf9f7b342115eee8c862beddcd9f8c7b32023fdac427c31d55facd458528c99d17c17918c95de03f18461ab52b7f5a8baaf57d453e08508e414931952441a1bb60927e8a70131260a4aceab8f3d91c9d39ba13d2a1e6640f697a27b90dd581bab1d1c3c717076222 COUNT = 99 -K = 03e6d668900ab4239a6e450e9d44c2fe -C = 04f23940f96db950b6734044b98c222501c27bcd97a66dc9dba83bf4c9e43b3114b38856a74c2d31d4d9c0f22d85533c1ef87abd0fe7e3b3da7e7d57efae8e00be0f51a85b38537e3da9ecbc35e2776fe3b608678578c55e14ec182cbdf91b7497ee53fd2321430ac58c90fdfcca4a47 +K = 454327d215a7b024539d9bb8677f3a6c +C = 90e4af402f3d8bb35d293ba5e70eaf3d1ac29154ed6d5bba804c57e5b4b8c1bebc3b0521929be50205e3c03ce06e6177e5f240cec43a74855645ffbdfb0aa7c807a570bea7149d3641bbe342ed18d467f0b68c3c9026a6a85ca2fb88d21c70e6468e1dc6f2391f30c82ac407e0a362b91d3b5a741ef190f1bf8d24c904892d34ad9a83dec744853f47caeb8ed92a94cfadf28b8c6b74d75a99111c4de8e4be21f9b4cb7fc40629aba92b849706240fa27763a137a7947ab37a12069a2a1b1c496051160d02f905a4fc111e7b8712a8838210fa589ee577e0b18fd35a35c737ba5ffe58012793ed9819af2c6710afc569f6d186efa6926891cbafbceb16d6e410511424336ad5ec19e7983c21c8a02006fa5f8ce776741fed7ec9956e7e6be29d79fe32ca40dfda84822a004c460b67b2ba86218aa7b2e41d5892f42ccbbcce9c1cff98669695b9f6f96e4f4f5b46df99f36966e12ca126ee07cdfbae9b587a37535c86e39bdc5458cbfb9eaca14d60eb26ad7faf6cad8259c3a32e5fa04063b9a19c9c9014c227874f64bac5e524affc999da8fedb8ea43f1cbdb0eedf03ebdfff66f1abcacc64f45027b5a6ba03c0eb606472e15f3a3f04f24fbab9dfa5e57bb9ef5386d6929f5e0bc10395c324904bf8de9bbcdd1d9575572661abaa0cc105fe56fbd6d66ef63b7e28f9581be2a569064260b9fca81a56862bcecd489a60b514648e659690ab25 FAIL diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192.txt index 5192e678a247..a6c50e61ce99 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AD with AES-192 cipher function' information for SP800-38F -# Seed = 3585f1c9c3fd2b93d487420cab8a2f8ed910d98947c8240c1f8c803cee98b84b7b402497a5bc4a2956dc4b4a6b6f2416955176b4b055381af6e5b95bca73dee3 -# Generated on Wed Dec 03 09:16:03 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AD with AES-192 cipher function' information for test-files +# Seed = fb99305dc2bcebb8cf505d8eea2e4516225c5cfae5cad53d6606278b25463ac782c2f76df44012e75f455c51059de0f443de046fe15165b1991bb610a5c9dbc5 +# Generated on Fri Apr 6 14:46:55 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = bd79085883c6f681a58d8183db8e4a0b43900abaee326a26 -C = e0880c63dfd6c02d74e94d89bc38c522 -FAIL +K = 58e7c85b60c7675002bd66e290d20cc694279f0bfc766840 +C = f2edd87dabb4a6ae568662f20fcc4770 +P = 76 COUNT = 1 -K = 609585432c2464cd5a2e743270ee7f3d18512996f366f2dd -C = 969f647c81c4d553f796cd5f0825366f -P = 1b +K = df870f26436691bfe31dfbf88b4524c0b20245f3c1cf3104 +C = 89143ada31df84d670bf494bb744036b +P = f0 COUNT = 2 -K = ba33f03925d45544e0649394eaab0b48741150e4a1cdf84a -C = 806d8b342434cec0bf0c29d318ddfb5c -P = cf +K = 716da5cce5877d8f305b5478d671f6c73eb1bff4de15df07 +C = dbd5247ad2445575cafb00ee7707c218 +P = bf COUNT = 3 -K = b351b9829cbaa1ec1b667c104f5f9fd833b44bd1e9962aaf -C = 491b6e09c42ba029e031222b23d6e352 -P = bf +K = 21fb6600c1d34a74adee67612672593a86cf235421735350 +C = 56b45c49c3e379b18d9c38b6423db133 +FAIL COUNT = 4 -K = a4e002809bfad298dba0744e94fcd7422d017814cef450cd -C = e4043ec7356c433c3148cf3c38dc8ee4 -P = 4a +K = 7fe46e89fe12ff6329b091cb9bf545156b6076ada53aedbf +C = c20eb0ead2d64a8250c39bd274af5421 +P = 52 COUNT = 5 -K = 14f5a1458b97bc85b42a57a7f5cec0177d35abf926e271c7 -C = aa6db9b5271bed45e2d8c3a9d715e2b5 -P = a7 +K = df8f5124b1e03228f2b96f0df31924bac1d3b5d094da22e6 +C = 230bb26c1ea9d5c8fcf7c122ea994f41 +FAIL COUNT = 6 -K = 16fcbbf921fd75a04cb62e1dfa19b910c6355ff0bfa305cd -C = f79c031c3301e70171f15145a0930901 -P = d7 +K = fcd478382405739df02e17a82758f2ee85ff046f23b7504c +C = 78140415da806be809ac7a8bc7aae4e4 +P = 89 COUNT = 7 -K = 90b2cbd7a34589da4ca4982bfb83766d1efff72b853d3bd8 -C = bd399be6b8d75b268a2062154e0b70bf -P = 91 +K = bde5224d8f7e0df415fd0fd18f951759dd18d0230217101d +C = 276362e619f52443fcddc04ad32fe570 +P = 1f COUNT = 8 -K = 5db67aa540f3085316e2984b9b75c3f0c6118e56d9de2d83 -C = 9a6744699caed89cf9c9809b15b4b755 -FAIL +K = ecb2f96b57cd010f74e40f0d789c519e21848d03f19da7e7 +C = 64191675bb1c69fda9f6e880e94d64d3 +P = c8 COUNT = 9 -K = f63c413a1d0cff9b7057242a63b2440cf06befb8628edc9d -C = c558ab883da5a91764080eab1660db48 -P = cc +K = 8c0727129b51b0e76bc8ea779c1b0183af7e5699d5dc0532 +C = e7c76a0fef2f182206ec4dabdc170542 +P = 55 COUNT = 10 -K = f1f5e14aa011fd4152be4d8631dd283b793cb4402fe6363f -C = 997d168fe19bc85655c057d9cdcb93bf -P = 80 +K = 0c07c4500a280331d6d8e222023fdb72ecec92a5604474a7 +C = 8bbab70ebebed190636345a5701785ae +P = 09 COUNT = 11 -K = 2c048a2ee754961f286c80b95584a6fce5ee6b6362f78b41 -C = 75160a634014a9b951ed747d05ed70c2 -P = 1a +K = ec66afb9dc33451bc331f13baeb1ea6fcffa13ea5bbd90c2 +C = 266144d88ad530310d1042a3c282d856 +P = 8e COUNT = 12 -K = 196a0e19b278efd55988cf1a8eeacc874530a9762afbdefa -C = 2e5bf43a4a211c669199774f8043f034 -FAIL +K = 4ab007baac3c6fed617240188e92b52736f39c1f4887a8d4 +C = 0f6a2ef588afb8e263c0c5ef65239ae3 +P = 5f COUNT = 13 -K = b1068580af5c1cffa3362ad6674796063c829ab4f1c142ff -C = 3773d3952171ec289944a72c106724ef -P = 96 +K = fbca475c7b2f24db2d78139ec581f65b287bcee1b7059198 +C = f6e4fd0e62934bc2d948a7cfe7bb3d06 +FAIL COUNT = 14 -K = 0575941435430185bbc47f94c76c8295658329f218b12937 -C = b9b3d9b29384bc723c87c374585f0e5c -P = de +K = d9988c1138bb9185bddfbf35324bc94ccede68bb6a0b9924 +C = 407a12067324653127ea7c09760e8169 +P = 5f COUNT = 15 -K = bb3bc8a893370046204b4b4e55da045c68c55e221133afc7 -C = 65441628f6845e2a93a0798a330d8965 -P = dd +K = 5993457900093d41c263cf28045e922513090836218a67f3 +C = f0dcfb407a156ce648cbc7a863d57458 +P = 9e COUNT = 16 -K = 49a2eef42d3ac46d1e58075d7d60f3d7a318c83ada340959 -C = 53bd2d117148e78bdece5f6418d56688 -P = 38 +K = 393ae1f6a0b83212445e550a55c213b011a3aa873ba4bab8 +C = d67cd49be03b02c86e8a8f849094e5eb +P = 1c COUNT = 17 -K = e2b3f87dd909d444543666d237dfddb6741054d648cf77d1 -C = c90d747f98b09d60d35aee593e76ab8e -P = a2 +K = bd819901b8549d6a767264c4267a885279f2360e8b44dffb +C = e5881ae49ae20e4cf603a44c05c947b1 +P = b9 COUNT = 18 -K = 29e97124483dd9df582805f1f25827fb071c7395bdf0d4db -C = 198719d5d06ab6804eb4677c5a6cef3b -P = b6 +K = a9a09d3c7597e207d22c754a5a2feda9aede913ee7673e02 +C = 75ef1f8abf916f03e4d719f452f1c44c +FAIL COUNT = 19 -K = c4c3b57570696077c7a7a4929fa58c685b709cfdf1359441 -C = 7a3d5c3a180dbbc0f4dd1b6ff1632f85 -FAIL +K = 6b9695fbf42a62a5ba2a5b6aad239eaf1ebd276fefb8d53d +C = 9a2c3c223f3a186910b2be4c662332ed +P = 92 COUNT = 20 -K = 22a428113ba2861215a9320fc9acd8ae796a7f5a3d576002 -C = dcfca18d0e7bc6e46008d2175c179f7f -FAIL +K = 38d1c3e31e4f9a81cf5cb45235e1d29f55f06da9730ea1ac +C = 1eea8e52f05fe4e1a5939d0132079f14 +P = 15 COUNT = 21 -K = 0a4064789e67602e3c1de11b0cd744cab66f0c19ed01464e -C = a46661039309d06f0ffa1d0c65f2d8a1 -P = 9f +K = 64f778576180f71185ae0c6eda91a92096b735ca443b4321 +C = 364196499da6fd933bdb034a7dd42f03 +P = 23 COUNT = 22 -K = d1c2da53254309591d0a6d140fd3529cf6d73e3ec51497e2 -C = d64ac06db68556d0f83006f81b385314 -P = a1 +K = 9cd235e77926f313a133d5ada12e479607266f3989669c7f +C = 8849071094ef6aaa9ca06998d8c3db92 +FAIL COUNT = 23 -K = 1e069d05428d4c65d8d32deb34f302ad32f19e7ea54e513d -C = c7d5a3ea807c04f9d643cc98d81ef994 -P = b0 +K = 53d5767d8705f0ebb94556a743d86677fe25c66a06ac07fa +C = bd2da5f2c450704843be695ba05f4699 +P = 33 COUNT = 24 -K = 560da18d0301e98a13c6fbebb59a6e32edefc1820885dc1d -C = bbb3ca314efc25a5f437d823aa421b26 -P = 8b +K = 03f71ce465720050ae381cb3fc44964da44052c322170a51 +C = 36d3167d966b4bb1e7c8fe2e87e1835a +P = 7c COUNT = 25 -K = 7ef5c09773735858d012f2f6f86769b5f3fea420b656c469 -C = eb2da24ab088211c5ea575292c99c57f -P = 0d +K = 27bd27c65fcd3c83a5d732b30db227c33d492f63c134d151 +C = 0f3c51ce7cc95f31798a766a14305b76 +FAIL COUNT = 26 -K = 8722f12a8d8efc78e3813df5e06a74117d95886aa0c55d60 -C = 1647f8f47cd22af4c04000354889f4ec -FAIL +K = 70ea770f4fd1bb700baf0fee4a0b59efcf8de635808ced76 +C = 487d33cf397eb2463a8d1044b5d64f89 +P = 95 COUNT = 27 -K = 9387a8286da0c896a507c026b413cb6dd27c9b8784408704 -C = 414421bce6d76bb21f5ee39b403811be -P = 35 +K = 8cae2c53b49c1fbd72714d6bda9eadbe12e2be13ef8bb46b +C = 979145ef55fc52fa1ea6429adeef118b +P = 2b COUNT = 28 -K = 9e7fb7ec19fb8fd97757561bbf10ff45a7bffa9f5882f8bb -C = de7662ea5e48fc032b0e556141f95ef9 -P = 66 +K = 7639038eec33fe5c6d244368247786f8b5ef3d343739cf08 +C = 60524e9de91f9eeb6d043eb226706e95 +P = 59 COUNT = 29 -K = 8d3c89d094ad041b530c075300273b656a5b00b8b7d28485 -C = 982cb7ea48507036f57bfb5652d98982 -P = 05 +K = dff4bacdc4b577cd1625e41cdbb7c897c086c4078b1ccd6f +C = 45893922cf61455748c744d3ee602f2c +P = 60 COUNT = 30 -K = 57b2b158e0a7212e08d43124e537a4ea58f087fea2580595 -C = 8bd3fb5cb47ee02733fbcc6986587ad3 -P = ec +K = 0cf5c6721c2d6cd98d04e15e00b4da2de345fbfba6859662 +C = eed5f1c7f8420c5005b11894cdde2490 +P = c1 COUNT = 31 -K = 8bf47c4bdf6eb3d6f3966366c6aef7661e252f840da2099c -C = dcae08af1eace6a8cf65a197c3908b74 -P = bb +K = 80b80715a4d4ac4ab34d17016663d94516b91bb8a20e9291 +C = 1524b12ed6d8c50cb85e7b7183694f0e +P = f2 COUNT = 32 -K = 4b0fb889a9b8fdd3e4e277fb4cda7753f29b63e8871fdc30 -C = df23f587ca24c65c3c8980a527eb113f -P = 7d +K = 72c4bbbb541357547bea7846a5fef7ea5ff0b3f8878c4cac +C = 1c28a663172b48e52c7ec48640a016ca +FAIL COUNT = 33 -K = 873d2920c966bf7f409f68f97ac1c22be1f03560c8df5cfc -C = b1177c67a110c0bed05e6806c9fe00de -FAIL +K = 1ca26d04b3238ef1f88bf15840129cdfcb56640ed10278c7 +C = 90fdd0c70ae34e5895b1f23593c8b3c1 +P = 43 COUNT = 34 -K = 1772209fa236789cff7e4f9a8e3637d3f087291cfe88e98b -C = 09e6d3e8162ad460cd251e53832aff95 -P = 3d +K = 89d31db8e3058b4d565a693b77c5bfacf9171292f85e77da +C = 3f5c4997f950f3f402b6b3c994b5f629 +P = c6 COUNT = 35 -K = d6aa9353de3a859095abf32f09e1c98dfbf9452508e6dd13 -C = b883acd665331625a3f379c1d772e0c6 +K = 60a88c5042de16fc212fc897d1c570f05dec7e8704df7975 +C = e7bb2ac952bb79569e1f09ff5e4223b3 FAIL COUNT = 36 -K = 3f914e16f88bb734d731fc5c352d7e8016679312293e0608 -C = f948001bfdb42781b59df945d230fff3 -P = e4 +K = 831d35cf3ab0db59814c29401540dcd797048d9524fa96a8 +C = 744dff3a433eb4096668a2073331a478 +P = c3 COUNT = 37 -K = 7360b5376f49e236705697e187dc8c7922c10fec911f85df -C = c9860d7612afcb15a7c53f047876cc31 -P = 4f +K = 6df91b050571d22ae9bb937ae25fe418600ff959af4bcf10 +C = 3de90fa1e13a1a0f824710e1dfd4b62f +P = 49 COUNT = 38 -K = 627414dff62eefc0c24fbffcfa968e08d611fdb05df6f0ab -C = 5cbc90906c4094c279afb9f272cc995a -P = d3 +K = a89412512e767791260fa9db3f25b033e21b36012ff9eb1b +C = 85a49281835c6449a9950a24d795bc89 +P = 16 COUNT = 39 -K = 06df414536c5534a0b0f3262ab1076ada0ee8769718edcb3 -C = bed89be6fce47d67236958f9a391e321 -P = 4a +K = ce88ce060955f87af4a8bda6c9cc2f496858cd0504c4064c +C = 384db1081024d354b8c7d1ad5c78aaf0 +P = 75 COUNT = 40 -K = f8ca17d2beb95af0dec565a9717ea01e6f1c3f589283a6f3 -C = 69c7852878738d32f2ae03a0de95ad2e -P = bb +K = 8942e3f234ee578646e3159f3eace4c789492b3d0cc51582 +C = 4a7e6a4113fa477577842f847ba08c2c +P = 34 COUNT = 41 -K = 2d89904df6719a9cdb33e585b1ed0524a30fda39fd0a4058 -C = b57283d9a8bbf8623d61b2ca36e56dfe -P = 9c +K = 816084229699e37475b29045d3c8c4b7fe293c25884499ba +C = c45c7ed3bb67c0e95280068318593df9 +P = e3 COUNT = 42 -K = dde34f5687a877fbf1ccc7163ed887c549dbbbe9d3961b9c -C = 20a18393a331aa28c6d146d88fd412c2 -FAIL +K = 830df5c7a6aba0a10b56dc5f0ef673bdd7e42d639e6df23b +C = 179380e6f783a221ec33c1c6209a8d25 +P = 64 COUNT = 43 -K = a8b93fcfbe7efc8c6513580d25a39c61c1ef05c607e0f02a -C = 77c2229d9957e36637688b03695b9551 -P = 9b +K = 1df6b36f22a342f1f0420ce0a9397171d2b56da9852b4f2b +C = f0a6cd892c188a61ce55acf73287feb7 +FAIL COUNT = 44 -K = b8cfe5bb3e284e7fc0765158af724c7cb5c9e365b8ea819f -C = eb3de70e51ab210b7c6ec01a13b23d4c -P = b4 +K = c37c52235b9b225249b8be5bfc0c749268820e58316207d4 +C = a5cd26c51ddc2f99e7aedc14efee0e44 +P = 7f COUNT = 45 -K = b50547d9827c427620d87dfd74be2d49f92e4ab562b75957 -C = e2157a48e5023eb8093678293c4a41db -P = 6f +K = 3366ccb10c3285394cf530df2872eec8b5b7c83fc21ec3e5 +C = 269285c5cd745425250eb40c000bfd71 +P = 96 COUNT = 46 -K = de5062d69c9ce992a4a5571eb1ed7430db11a138b645fd3f -C = 87033d8ef2f9e1a381c5d0256edf34f4 -P = 41 +K = e66a10c9b0dc9aeac8d79edc307f719e7b2f4eeb812f9087 +C = 3231c4c37daa7c2614568219c5be217c +P = 09 COUNT = 47 -K = 4260f674d45dc35a123ac2157bc1307e1ac880b2c50c4c92 -C = c6ba4222d15048d6d6d08e7d9455a215 +K = c683f19374f323125f7b93d2edec7bc6c92164d1af2acb9e +C = 222bd03764ac856c3d115b930baaac8d FAIL COUNT = 48 -K = d93fa449c89910fced7c911d7d62e81b0d3861d59bea19ab -C = 09910656e86f1ea28dc3e5cd77209158 -P = d8 +K = 1a4e720a3eb85c65f6493df9dbfa18ab416f2ee5d6c576c9 +C = 77687cab7e0060a159e2fa3f5a4cae7a +P = 61 COUNT = 49 -K = bd6ab8e9874c37926800d81be18c2547a272788e0a4c62df -C = 90e7c20e53696162abd27456ae687823 -P = 3e +K = 810008b02adbd9ccde2276a875ee45043d5e5ac81cadd5c9 +C = b1c5bc76a47dedac62b3b923b23104dd +P = d2 COUNT = 50 -K = b15228b5d58e79c966093d357791b3eb8435b62c465ddb97 -C = 32a5e8d287f223019ca031f407bf73a3 -P = a8 +K = 0bc24576a3865a5df16653b8f51b02454d76123edcf58c56 +C = 62d03ec47f7ed48ae409daca59f3a50b +P = ef COUNT = 51 -K = 845bb8c5c8045f82f47d58f278e362afb52c7b2d2e920766 -C = 01d3bb915605558519d246b636c7d162 -P = 42 +K = 22ebc106481b3ca074870bc97d9db73e451b91167989e089 +C = 50ff95b7c662dcd602e445d59cc24c7c +P = e9 COUNT = 52 -K = 3d00bfdd7d8ff06deb51c9d98978bc3cb00fc8c05a308100 -C = 73cb72dcc94585c4e6128e6c50179d11 -P = aa +K = a0d6d4e21b83c382468cc2d2d7a291153c96db0574befad1 +C = 6e524ff675160d3fbc75d79440006b0e +FAIL COUNT = 53 -K = 00cb11134e78244943788918e6b1a70ded766ab2ea5b7155 -C = 2d8eec5c4aa8e02d7c1816e89ada3ffa -P = e4 +K = 5458b769d9640a2ddcb7e8aa6d55a44fd843793fa0476108 +C = 580e09cd7219b0902f69c93bbfc3e269 +P = 85 COUNT = 54 -K = b606e7bd9d1c249d60587d2ed45d2fba018f3c85cedc0991 -C = 9892400e56dd871f7fbe6e284f20952a -FAIL +K = bb3dec77a86680819a88fc9b377f8ae187bd511c7997ad02 +C = 9407339524e40ed61476cc9f80fc75ad +P = 76 COUNT = 55 -K = f0f4c4e045fd4d2f8513a437df472ac1898836493c318cb3 -C = a2433108d1c276e65ca0b0a7aac0d889 -P = 14 +K = 615e33b67422ff48f933f4318b4e4712004cadc368e8f427 +C = 4d7b84e96b7cdbab9538acb5e6ac7adc +P = f6 COUNT = 56 -K = 65b60f4e0dc10ebe3cd6ed8cf30a97518b604b59177e4047 -C = a0394c9a6cfb3fb77edfb61835502e4d -P = fe +K = 6de43ce06c2baa11ca705db836185707856d0aa5bcf4cf03 +C = ded886275b8b089aa763da8e115ce9ce +P = 92 COUNT = 57 -K = 2c0b6d28a0107ec85ca1970959176c8e05a06ce5120f79d7 -C = c060ef7ec113fa28e7e32352f63b0a99 -P = 1d +K = 24d492ddc8afcf6cbfa99e1c81076431b24c76b50bd7fa8c +C = ffc71d5a6f440a8e8daf27e5ef778c78 +P = 46 COUNT = 58 -K = 6951646336d7f8e7542e00092555ec00cd7969d4a082d59f -C = bf3a76c82f01a80706afb85be36d016b -FAIL +K = 07c69fb586b1e4aa04c5009cdda49902f41b85739c294bc5 +C = 3d07aeb51a308130657a70ba7c9d38e6 +P = 2c COUNT = 59 -K = e49e312b81ab1cb0b4156db5f1a9a28963d875695832331a -C = a4819d397688c6619658d2eee03709e0 -P = fe +K = 97058fa50b1246ece5dbf687c8c380a701e7c12e1de1d421 +C = 2330d4e2fb6fbcfe595e3563b4c2294a +FAIL COUNT = 60 -K = a7c60037816a7054aa55b2c759346f92a026262b482a9486 -C = 7dd5927d8ed09c4a9c8dff4fb6414f00 -P = 67 +K = 2d1013413799cc47b28010f02c176ad4ac85726539e4bd53 +C = eb704aca067faf0e7e359aee1f1ec335 +P = 6f COUNT = 61 -K = 64253cb6c55f5040173d2676a6032d1e1d9a35e22acc5c19 -C = 999f00ef698e17de54003503437bbc34 -FAIL +K = 35786f8e62f41c6b11258d78d7bb9ffec6caeecde3749f9e +C = f1635be8ef4b420efa05e962a66d22ad +P = ac COUNT = 62 -K = e085cf1136a71e6933e14b7e84a1a46e111ae29a312b7ca8 -C = 30d2d9aaf715bb8df011afafc344c3e9 -P = 70 +K = 3f539d7b17c544b9d924736f7c20edb973f66d668695bf1f +C = dbe262bfc9a18da2fd5027385b26b608 +FAIL COUNT = 63 -K = 2fa37b52ec2b9f80944571ece0620297ea22b1d9cbb42806 -C = 927906b8f925dfd12a461974ad694206 -P = 9b +K = e9b80210022334d198907c10f11c3c64828714cf110c047f +C = 39f2e36677131e680a58039429e42696 +P = e9 COUNT = 64 -K = 317137a59e5bb19bde7ff1c718fd10df3edcd5afd25091ea -C = 58b2989ddd8008b653d716a8567204b3 -P = 34 +K = 8925524757573b8ad4a39ec44e5790bfb164d1773673f891 +C = ccc7836ff0fde15847f719a0796f0f60 +P = 48 COUNT = 65 -K = 74cd07e0aac6171c2328fa90b7db7b42e5ae2f1c6c03415f -C = 6386d58fd94d39cb271415487cb1b037 -P = 86 +K = 7581b5b6a2c52d42e89ef5f896f35eb1523acd9f9eff0f09 +C = 380f7100d59e5105317d6b097d9885b4 +FAIL COUNT = 66 -K = 3e95af69495eb6995c30fe1c0067d3875d7c7e91d1083509 -C = d6749333590ebc44173052fa7dbe695a -P = e5 +K = 3335c440dec8f0a5fa207a8e6b11bbb2018a134ad897cb62 +C = 33b95852002711b95d932cb0ca151b73 +P = 2f COUNT = 67 -K = 1b175b195ccc8cfd2e47a2d4d9b8dbaf22b6eb3d248ad001 -C = f723a266a2f863680b381b9ae07551c9 -P = ac +K = 67419f365dfa348a8f2252eb31b7c0ca4a8baf18e89c8526 +C = 4a7e28f5e9c8ae8639bfa64fb148f7d2 +P = 7b COUNT = 68 -K = fd81a15a0f7a8d1260a85ceb13c2bd2a13e81fb642507a10 -C = 6a10dca854b074143e59a8775508d9e5 -FAIL +K = a71d677658671803b85b901966e1f50548854375c6d9d7f0 +C = 0ef6a94c5222f0cf9e436914cca9ed25 +P = f3 COUNT = 69 -K = 149c8bd128be08e20db7192da28d676ac442604ec1a9cb07 -C = 13353fd7e9fc1e3619e281492160f6ee -P = 3e +K = 3c1baf68a9167a3b38e62e1db8d24f1fd88b06d49454e6f2 +C = 5afb10f82a6835db4e4e5f9b448ebe8e +P = 51 COUNT = 70 -K = cb339ebeec105300966b5cfd8dd6996f0895d9de174c5544 -C = 425c1c44d8fa25bcbbbb8c917d4e06da +K = c85fe73499d12d7885d63d5b8454dc2f97a8cea661ab96dd +C = 76018ac527c1d7ad15de06ecf4e0ff2f P = e8 COUNT = 71 -K = b2183483382007e6bc8cf11838479f1d077ce61ddf22e950 -C = 266a5f3e1dd8e3b73fde5aa7a07bc28a -FAIL +K = 0533e5187eae91d42b95595db6c4147b3949e89f3f747b86 +C = e326dc57875bda311f4aa8ad0195bf31 +P = 23 COUNT = 72 -K = 12b3f3db2fe366046c4e5b5b2294e580dbea992c3adef6d4 -C = c0d3b84954a78f6976993ac1c575c9b8 -P = 8b +K = 890a66a5e7329771758c690a6c4606e835bad056167a8521 +C = 7b1d5866585356a7b5bf24d6173046a8 +P = d2 COUNT = 73 -K = 50422775a2592e14f77d968d095df2e36c1e8efde6062d36 -C = 54ac58ce49daafb925a15972db8ba6b3 -P = 33 +K = 3408efad6a82f023445ed0b771ec8f83be6c7592504a6bf9 +C = 1c3c6de6c134f86837a0eb80c11591ef +FAIL COUNT = 74 -K = 12c111d6587fbefbcac2e7d8ea3dd45d48ee544449535a3c -C = 9b0756f9438b5f8a52701039c2aa56a1 -P = ed +K = 164f994d2991b75e100446ded65b452cc94a0e3250dca8c1 +C = cbe7ff242deb722f5a42766cf2b7dfaa +P = de COUNT = 75 -K = 35d3eb0f791149cdbbb513582b2e39d79545780ffac32571 -C = 3dee49d5b1db685f41a7915ea2340a3a -P = ae +K = 7c2526d5a1c74cf6d9e0158976266a1981d8aefcd3a37bda +C = 795ff6d30a007bde372ef3d00711142c +P = f9 COUNT = 76 -K = f16364c2be534331409aa0c09e439fa623138c35bef34af2 -C = 5679e6e357bc5afdd4378a4e13925f07 -P = 75 +K = 625ed90acbcd40ccfe97d627789633705825239ff626ce49 +C = 03d15503c07a602f89243428e7c85987 +P = 01 COUNT = 77 -K = 5795a330287d6c5d053ecd03bac76846f35d79e576501fff -C = b731cda5f8d2e1944786d9fccb5343c4 -P = 55 +K = 1dc3f8ed39cf01523788ebd6a438a6a3d343400a4c5a10f7 +C = 06417b451b1fe71f4cbe40fba333d15a +P = 7d COUNT = 78 -K = 9829e01288d69c432114faa661d02be538957ffc0be180c5 -C = 4190f9a2416c3cdd6c439769d606b36f -FAIL +K = 86e7955330587d0ba8786939b7676c593e1be5ed5f577424 +C = 97b6d028eb2cb3d07bc5c9d8d46213c0 +P = 36 COUNT = 79 -K = 524b96e14c84bcbb00dbfacdd077e4bf4de612097491c466 -C = 8aed1aa50e7dd2194427afea44cc2037 -P = 2a +K = ce5b765da5d37b945a3375a35834e6cbe931f7d5f88ea11b +C = ec2062035f8baf90d2c3f2a308e74d32 +FAIL COUNT = 80 -K = 963f2bdacc0ee1866ccf10dfb1e2172cb65d0d82dced657e -C = 4d884d9787b7c2bae89b9f3142c8da65 -FAIL +K = 30c376536661a475583ffc397d4bfb28bf776c7da7707a2d +C = 9b4a47d20241fc05dbbfe899e61905b4 +P = e0 COUNT = 81 -K = affa122199dd20d49549fd8ae64f67a720cd18095fb5d9fc -C = cedfd06a7f8f376af99493272dc6addf -P = b2 +K = f9638bc83c7d36ceb619eb1c5b5be6afdccf9e0d62f54e86 +C = 6d1ae0826cee82e36c25309d0f036016 +P = 97 COUNT = 82 -K = 8ad1f2a205817350f1887858da5da49e73e0ca63219d5a8c -C = 58c585dfb0bd2a4f1516147c33615097 -P = 32 +K = 55272bde4d5e6f717fd2f8f5413a19f1b6f5c650aa60a412 +C = d07c7234874cf9f1e3388c5760b67c65 +P = 42 COUNT = 83 -K = aef6d1bccecb5e7d4a99b9eb504ba91aaaf3efae115992fa -C = d2be57563478510ce35e4b0df1b54178 -P = 35 +K = c6b27e67da3fe4e2eadd127f24bc2b102d45e3ff1420f730 +C = c2917c69be27039721849baea18b00a5 +FAIL COUNT = 84 -K = bbe32d7fcec5f9b3b17e3724b1494d3c2183f11204d08a9f -C = d27e56c359b3bce4c0b126fb44502b88 -P = d8 +K = d245e20d5d29bcd1fd25dc4d402dd8334c653fdd1b6f5bf4 +C = 59980f4b76add01a00a71b7893229a19 +P = b9 COUNT = 85 -K = 9d6273b7d53063030f7e930ff98d7988b821686ba128832a -C = c2455f8b44495fbbeb82fb129db35523 -P = b4 +K = 759ec11c33544d0bc9a011486fc161a6cde60e8a306153f1 +C = 1d27633f5a50b2c705ec4de9051b1ab4 +P = 9c COUNT = 86 -K = 3eb8a14802aed776e4b56f5803f0f33dc9d081411a92e25f -C = c81c8021f4460250b3772aeddb0c8405 -FAIL +K = e7803ee8a30db53e33ef46ba9816fcba7d81c8350316b163 +C = e6d2af9095855d43e874538fe0121b93 +P = 7c COUNT = 87 -K = bf3d7098d189df3632faa429499ad31142e7e0cfff3ba83f -C = 4af4bd0d01bec3068e43e3a17bf69d26 -P = 69 +K = f0176bb0b6da53fd1cb9b14a1fd35b7e3f740b15782e4dfb +C = db6b02749e69b6c6cc701d5d9678dc06 +FAIL COUNT = 88 -K = 1035bafbc38c423f85241c9b91937b89d4bc494dd4ce97cc -C = eecb6b053d927b189ca2464e81b630ec -P = a0 +K = 16e98580be02642d0571c8ce96366acff222dc54a82dc32e +C = 1414056d0555c2c706338bb985cd4546 +P = ff COUNT = 89 -K = e288b5b684f7b8269eee9324a6f7bcb00ab0d2ed932a02ad -C = 6181a9b35ed4491837ad4031c78c41c2 -P = db +K = 99c722c9b36e18bc25d7bfa5a79920c256cf0f23db346db8 +C = 5aaf8132e9a6a97ed970f20d00d97842 +P = 3a COUNT = 90 -K = c536b5ee014e50c11059595a7b5064902e8f11c9f7c5ed5a -C = 8218f616b82cb81aee215c4787aa9f47 -P = 79 +K = 5840141d78459100486b06beb1f78633f5e42817a139ce8a +C = 4eb3dfe77384c50fd1cef23039191497 +P = ab COUNT = 91 -K = ffef9adf935b796195848ed8e124d911287bb80de0d65e7e -C = 5ead56d21555eb2a77589a2d35c42ef5 -P = ef +K = 0d9400b0fcffd6dfc8a5b3504c7861f260ceff7df1035349 +C = 3375058395dcf60d85ad13782990e213 +FAIL COUNT = 92 -K = 29117595a0cbd1cb7fe0c42413032660d8fb0fab9cef33ad -C = 6aed8f8316d156b424673922f0f4b430 -P = 91 +K = 7d0e5188e15189aa4c542b49efeb05fcdca52c08241fefdd +C = b58f81aa184e883c91be8f11db95552a +P = ec COUNT = 93 -K = 765bb34f8bac006fca3efd1f747377deac30548548aeaf17 -C = d622e7faf0cc19827abfa3329aae78dc -P = 68 +K = a99d01f7686f938655f3f1fa95ba4ec5dd7a7c63c7df35e1 +C = df292e3a0a4323b027a95e5dfa4c0ea9 +P = 61 COUNT = 94 -K = 64d5418ee416d882e471f301ab390c381192df49b89fbc96 -C = f37b4d89832577674a1a5aac4d95940e -FAIL +K = f4a14447e6d0581cc46371d54d4ee075ddacef221c7ffd0a +C = 1f2b0804d3ef8a086d6f59ac5b79b8b8 +P = 4b COUNT = 95 -K = c4045ebb4cede0529dda761900b117c3c9607169d66f5549 -C = b46cc03de7674c2205e96d518736e463 -FAIL +K = 7d991dd556cdc2d976086ce16e2cdc8723165a48202129e5 +C = 6e0b346a25eaaacf21909512a88d7ba3 +P = 30 COUNT = 96 -K = 85e8c480a23dee9b1a82e21671dfe7a2184cdd665efd3845 -C = 0511f11dcd2cadbb747a108f3aa5ec4c -P = bb +K = dc68785b04cf546fb6c1909e142a31e1f2c566277dbffeff +C = 7a9ae10531769f369f4a115db8e71155 +FAIL COUNT = 97 -K = 9880c1a035ee5cc5aa245320b6ed03d13593486a4536e008 -C = 95894925c8b0f6b534ae4edbc2a02d6f -P = 9e +K = dc976568e37932259a735e6bbe83176731810e5783ca3035 +C = 53398fb9bc4b241e8dc447d7ffbe38d6 +P = ca COUNT = 98 -K = 4a2aac93c781de69362e6504df88946710b154aaf1651243 -C = e5e9817d5f49f342cb2097e38c0494e4 -P = 3e +K = e954ea3effb3dd02b955be37c254c81626493c0eac6b4536 +C = 9bf86591c75ba94050617131b13dc555 +P = c8 COUNT = 99 -K = 05c9a1fee839bcd39e071297f447b9926473c3caafe96569 -C = 9e5aeea373fde22e8492ee45eeebd694 -P = 96 +K = 9f20fca5b531cd3b7c12217dcd231df726e8e90a7feec44b +C = 36b72db7f2bb1cb1f327392833ca07b6 +P = 91 -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = fbefdb0eca349a19947e3491481b782f4fe40338f345f07f -C = d7233b90eb9a1a157c3cd3542681f196d4f3f3e7af9e94aa -P = 9a55ba27142b40ef22 +K = 9bb784983e6754eae0aae6269f15ac2571b3b8e4245d6297 +C = 217f53e362c4a4a4b8ed31bb74ec35b8 +P = 1fdc2c4df9eafd6b COUNT = 1 -K = 3f35d519a41a72627b97f390c196fc8df8e45b84fc5f1380 -C = cdff312e6d7fa56206c076b61e9ef6caabdaed1d38e1001e -P = 886d6e2718e49b515f +K = 905ec4a94569ce35869c63386515bb93e32ec9a69f784152 +C = 44fd7b15f0bd14c5732f7543466d11b3 +P = 6dc830ac0679f379 COUNT = 2 -K = 02b9eb854235f35d0a8904274a5a62bc036490b2a1cee956 -C = fbb8bd7f252bb8c5c19244769a2b2c2945dab82a95b2d307 -P = 39609792ff111a6d69 +K = 0149c929888748e94223ef9b62b7c12d8fc0f5be8b1d93b9 +C = 1bd69eee250e98d279369552d5559019 +P = 2dc1156d36f8c042 COUNT = 3 -K = 4f2203e8b2caf79ab4af978c28cdf67ffee6fd447a4935fe -C = 96704f7677d23cead3a31591f3f8ae3eff12dd4be097d0f5 -P = 599eac040a4eb60fde +K = b0c1347b6a6562082f405cb419f2d97141d2b0877398a230 +C = 00c4f14016d81874ffbff354d38f748d +FAIL COUNT = 4 -K = 8e4e3b71ab6ae7ddd771ba577586c713e8ddf4e21463d8b2 -C = fa12bfae14c54dc8e0bb2c118ca879d71549431c35c271ae -FAIL +K = 47071940f7f69d40225a501c14821d1b275d5220df808dc7 +C = 0753cca3de1b7c3a6970d9b434a3e785 +P = cd579a8125bb777f COUNT = 5 -K = 4b778722947fb18ccc1eca971d1fdd3a0e443df709b2f316 -C = 046176c4e8bb4857d7473ce256fc378cf0e8f1160120872c -P = 63b3686c4b7277fb01 +K = b94bc10b85a8c2f74a66fa723a25ea1b398a4f627efe1ce0 +C = 18eef64a022b2c7db27648cbb5f1d5e6 +P = 19c0f2f78606fae7 COUNT = 6 -K = d6165b872c0def7ffd952dc6975fbbecfc20e55d38fe49ee -C = f21417052b1f810ad5ca1cca4d8317c3278edb32151432d6 -P = 4e61cbfb4ba9ac8ec0 +K = 7424ccdbc2442198a1be1f07d61998ae008303e218ce6ed7 +C = d80f6184d18a376f080ba3a70b6e3fd9 +P = a132800f9eb0c0fc COUNT = 7 -K = 9a7d043bc570c8b22633877fc3c43b6f86d075388bb80e0a -C = 79d7a3bf5062c2d7eed9f6eb9ec31f2a493a3528fce8d515 +K = 94c8dae772a43b5e00468e0947699b239dfe30ab5f90e2f6 +C = 239c6bceee3583fe7825011e02f01cc0 FAIL COUNT = 8 -K = c6b6b1b24befcaeebb72916d0c85ccad8bc980f24947c729 -C = 6682f3c0ba668a0ed91b07e4d80dc68500caf939731ecbf2 -P = 3b92099b3827f07359 +K = 00dcfe4ee617df88ecbed79ead41895f845259d9e4daeb4b +C = 3567f7454abf3f3903df723d01005ffe +P = eeac2300106949bf COUNT = 9 -K = 3a2cf8664f5b2d838d771c6bb6055d32b192eb2efa5c500f -C = f2bcc00e9bfe8c8b586f7578a587332770d326e5ab8e0b1b -P = 3431d90ce262cf5414 +K = 5f2256077891aab8c1a1fca33f9a491ad55acfbec2438bcf +C = 2477e12ad1a289fce84a7f184172bc79 +P = dde4805405d57ae0 COUNT = 10 -K = a5bd306a2017fc3b460a6f7e760eed3158ca804785ae1d0a -C = 4c530452b7ee4a43000f41d218dfecd4d0e305e4ef6e48a0 -P = df290a86f87ae3dfb0 +K = b2d82be9e03382cd944a58cd21189238cb36351638f3401b +C = 3964d0bb3e0ab14f2c98938e7b596c74 +FAIL COUNT = 11 -K = 2113ed5940ea24f09f95947b61ceb1846092a3a57d5c8dad -C = 5862d0496c1d6dd2887f52121a557b5c1fe5ed1ca71f990c -P = 0adf789c592728f17b +K = db9bcc4acaa330f748f25a528410965ee2dcf8ccbcac602b +C = 1751b271c4e90734fe4b33a8213525e0 +P = 7c052fdf246b236a COUNT = 12 -K = 65dfd65e3e2d15307ddd68bda596d2e3c0bcac9ce48928ec -C = 4dbb2f32244060971b21eb2a5ec0ca29f5ad48ce3a507259 -P = 0bd7bfb9cc7d3fc7dc +K = 8321616887776dec3054a90ce57d9c96c8ae9525689944ee +C = f33ee416570d93aaec8f2ff8adc0fef4 +P = a5d39308ee7e7799 COUNT = 13 -K = 41b35a1bf6245fad70192ced8ec7ee1e0a7912aa342013f1 -C = ac1ee2c52c37f1137baf524272b72060c58c9d7c3785126a -P = ff1a735f358b89ec35 +K = 58cd2d593cf5e3ca35e41d7559ea34fed6ffd869f85ee6cb +C = 99c5281534362c7c182a26c11506bfcd +P = 55a458aab8f425fc COUNT = 14 -K = fc8ed5c09c79d4b4b6d030c1a53396a81a26a073defdccc5 -C = 1669e55c1476e207eb3de6dacc96aa2a92ec4568e2b31da2 -FAIL +K = 72c16303895a83d5a32ec14300ca314a1097d9d8986e927d +C = bffd0d085a5ac199e472e9bcc142a717 +P = 7a6778802919d40b COUNT = 15 -K = bdf188e4892ce91cb501841ef5521cad32f35850f741441b -C = 49ce628d2c25a23da797867b761b61b535c75060164f0a1b -P = ddf7f5c809ae3240dd +K = 1336537cca4497b32197ab2326a4dd46b37a060b8ad52cff +C = 5b4945dd35af2875f0ae03e5f371d2a3 +P = dd2f1221d615f53d COUNT = 16 -K = 2fcb56353ce554946866a7f06473b878060e53f342313ac5 -C = 07f4359edeb5e0fb150fa140331adc861d8b6900b5615a29 -P = 56c569c3b1a7a193f2 +K = b7ba3a4095200895a0fb76b490c77e3a2fba95123a701026 +C = 5fcf97d261cb9c46c1a8ac0d18fea893 +P = f1a9b81d044aa925 COUNT = 17 -K = 0d9702f4294d6ca42390c239f4eda4873921e12ab1ad6530 -C = 72d15d8f40b33629e4be5d49a5f861cc7be97275c66b2fa6 -P = 2926f91297c64ec5c2 +K = 5b691e40ceff5a62d90081b3b11ecc053aab8735f0e13fea +C = 42091b7d89a493e8bc6b5b9b38aa0672 +P = 556686054129fa95 COUNT = 18 -K = 0edbe6160418a5c1346c866695830949f540faa0d8ac1620 -C = 553b242504afa493c6f305ec2ca7e9cc090ccbabc2b4934c +K = 6db433f24cd39425f9453b9706328a590dfd87a32c7835cb +C = 633eb33e8eada3919db01b34bda48e7e FAIL COUNT = 19 -K = 28a3a9ff07088cc26e881bee6fe9b44212b48d904d33cf9b -C = 97e966007a17c94c3e99d60c8460cb7dc385491e8618df9a -P = 417b45181a334e6cfb +K = 7325cf22b917ca423307c7933c0f429b9f15c633248a7d5b +C = 360b6d5f964b5d9fb2d30d4e6af4b36d +P = 83ad06beb0a33962 COUNT = 20 -K = d1737c8da8166a4d2c0ea0d53c6b5cc2884b223b6c1904bb -C = 7ce1227d6199c97715b51ed1cccf2c1f511c70631012a822 -P = 2d49ff3339dff545a9 +K = 626d8eb62af0849591449faa5bd410cccb78fd7c82e4d5dd +C = f907200a6777bb0a49e0e7a4f0ca7226 +FAIL COUNT = 21 -K = 3bee9f9f7f37fe2edd6496dc48193e230eb721319784771c -C = ae5e69a1001eb0194d04727dc139bf16d012045da07627e3 -FAIL +K = dd0ff0997d0c2edd200bba11a6be21827bfd57674fc64ee3 +C = eb506b62a285c9a6a601b63781386963 +P = 0b270ea6384a29d4 COUNT = 22 -K = 619e9b35a3238a3b16a48f03f7a6bb6f43daccff55ea49b9 -C = dbdac75841a25ddbda38de56c6a648677b1537b8e8017d2c -P = 6cf816f2a70baff59b +K = af78f5ae8de1689b89de9d30edb3d82f8cce95cadcff09e9 +C = 298b6830f98247d01699cd09f904264f +P = 16624866804e271e COUNT = 23 -K = 43076e2a3ce2f20c75d37ba2741b16b59cf65b849e42479e -C = d455fef62acf0bfb614b93f73b9461d42f6f76e6bf8ff547 -P = 40919c876c6dc32da7 +K = 0c5f8a121bf2e3e6eecce41a195fddc9bb4fb423e438d6de +C = e7e7ad047cd8d39b17d5f7d06492aafa +P = c0a0727db4be27fb COUNT = 24 -K = a28c09ca26bf078c1453e5bb0018818768edb90040df5903 -C = abaee12f6889bbbd2e96cc140ba33f459e946c490e5a52fa -P = fa741198b62918be49 +K = 6f9badc2b8748f2f5b969af0d9de1f9459df615ab89b7fab +C = dd5957a9252813d0ba7ea1b31cf15438 +P = 41d4c2723bb3c04e COUNT = 25 -K = f02dcff1afc7127c75051fdc1e8da5e8aba29bd8d8e886f2 -C = 9effcdabf88cf12adcff89382999a431b2fa4a09762cfb78 -P = c274a9da0e3361a004 +K = 6d9e354c66972fe77a4a0852ff84b6105eae62656267823a +C = 0b992f672eef4a1a6c166bb7b215706f +P = a0c92fd965d04bb4 COUNT = 26 -K = 533da59f7fd8923add113ff07b8c2cf3d01b0f3e89831e3e -C = 2e5325d0d4560f0fc2ba7a9fc78060c740f91b127377ed87 -P = 4c27402f74e6430019 +K = 334ea989dd617a7b320ae7e78b9231a3219f9b763bacb423 +C = 161139cfcb81dd9e9a70ae22e917aecf +FAIL COUNT = 27 -K = 3025f4daf214038d2ef2eb3a421c2e2c4610ab2775ddda5b -C = f343162b385b35c9fe66e40b0b0b55fbd3a7b980e02a0964 -P = 7668fc7afb5193ab00 +K = f449405b7d419d086bc0570143127362baf0db2c5bc0173d +C = 31ee163275004ee360d7e51eed338826 +P = de8f573023e88332 COUNT = 28 -K = ab869c8e9358f91f363ad5b687e7d2daba82d6e3f04809df -C = 5464325e15af5f8972f01c06539954f4301d66c0f61c7be7 -P = 21237c45b654e3036e +K = 2d52adccf68a0f82660b1932877a9f5739e3c4a720f1da45 +C = 1df409615f5118b61a2b66043f2b5597 +P = 1faac4f7f10a568a COUNT = 29 -K = dfc56d636173242eff5a4460a37d4fddc90afb42113f63eb -C = 983e6a6417f7af0b37a95263cd361bf717e307676e7cef1a -FAIL +K = 3ac767dfb3cd8bf30d7bb0a7c01c0eede67bc21d2f089a8b +C = 465383013bee6722b06b2a773ce76993 +P = d4e54bf3d3db5d58 COUNT = 30 -K = af43a8eefee9861686ab605a52ed802284777dcf1c5fa7ab -C = 202ebe84b1702f28a15414c0e4de42b1c39253a449974d5d -P = 77bee46c041f9f97be +K = ec2e78a5c16c764eacceb8ab8596e97f27a2a56a1ae04851 +C = 8d2cceebc55189edc202eaac59370898 +P = 621f9a1daf8381c1 COUNT = 31 -K = 3b7200efcd4b610bc95a93caaba9fdd777afc672d4ab557e -C = 57259444fad94ae68ea3c9e42b1e22285b6aa93a0c67ab51 -P = 4301b0c7fdf32c8418 +K = 1ee4181c11ccf30a40bbe81a4c6a6bb1321046a09ea6a34e +C = ce4604e846d2bd74bff92d5e477552d2 +P = a8fe0e79f09c23be COUNT = 32 -K = 57261a21fe081934acc9bff55d841fbebf155c3fffa327cb -C = 305ddd2c047a52b1d4816cc11bbaeed4a0c84e84930618a2 -P = 1ebb4133d397777cc0 +K = b800c9ec9c84f303f6478ea2048e669c6123565595fa3506 +C = 0fe03cdf451b08d2edf1f7eb23028389 +FAIL COUNT = 33 -K = e4bb14790199c6b7315d486f7479114d2263ffd7ab5263d8 -C = d73d32539c2f71c06c31ccc5bddc75eb471db718c64c5196 -FAIL +K = db1c443eaa38b60f544b2cb72813e0241d92d2c4695bb3d2 +C = 02b89af7cbdfc3a3e8696414cfcd98c6 +P = b21398574ef55d1c COUNT = 34 -K = 499a543a85cea443a167f4c175855e160198b3abbed2e6a6 -C = e0a8abeae896988559eb3a289356919e843f816ee41e5ae7 -P = 2c4529e6217cd7fc86 +K = f8532a18d68195000d52ceafe31d8979e16e957de91fbcfb +C = b9c90b6f5c3c4d0a343634df82832830 +P = 6fbd8afa7f01b067 COUNT = 35 -K = 48b67d4f235d5554a5bac5e2fa13865be9bd1c3dfc5c2d9d -C = 1fc1975edca21da6bc2e42b5456e6187299b4220a6b060a8 -P = 4386cbc57060de3a3b +K = a1ba1cef9697cd984d0cceab5879119e981665eba83b84de +C = 2c8cecd9caa12285403498b6bd88159c +P = 38078c146c374bbd COUNT = 36 -K = d40fdb6fa860ecc346703f787d7a05ad8b5f5168d408854c -C = 1bb2bc4e641c5dc487535812157a276ac750b281063e93c1 -P = 1ec63098597aba245c +K = 4610e07fa5c31c4051e2c6da75fed85b3dc451bea5db931b +C = 4039b3f9d02b7c8a764ae8c2c407fbdd +P = 65eb49c34e4a96f2 COUNT = 37 -K = 8096a895c87de06576624d07cc04e8f0d42b1e3802b847ae -C = 02dd5106e539cf8be5b7e977e25f9fbbce655b46060e5581 +K = e5808e366d129bdd06f0ec645d3a16cd10702a4fb01071be +C = 0e5e02327453b764d6675cf5ec24b294 FAIL COUNT = 38 -K = f77ba62a4fbc6edeb3b651621543922031f6ea850e0e54a9 -C = cf5ece2265cde8012d7d43b42ccf07514ea716227c467106 -P = 30f778e14ed947fed8 +K = 0b29b8972242d54dadadf8a6fb3312f9678ef887cfd26608 +C = 01c4a4d7e24608b79e9277a6d441af4c +P = 4541bba694f1b60d COUNT = 39 -K = cc394165c4f9d544645afc73b9d72146a10873afc23a845f -C = 7767938c6b965e811e06c7d5c8e58a53263c070dc3d90b40 -P = 279aca57623505a054 +K = 4addc785661f93a3ccbe82cd7a1cb3e2db8eb0559ce49edc +C = d927fcd3a8547ef0cb0eccd7cbacc775 +P = 2d6f9102e06fe453 COUNT = 40 -K = c74fb8035dcaf4eff800373df0f2ea7ca7de57f2dcb27aa4 -C = 23b481a5205ec8f1d1311b3a64cd95da77c7a7a775118af8 -FAIL +K = 93c0a04d029b8f12e3d868c0446ca57bc5ed1e56aa4a39cf +C = 69f8e3ade449e2d2e4fc54e0718ba09b +P = e0f805b602dd9ac4 COUNT = 41 -K = 42a965c0577cdcf2569dd4dbd0fe5c704c2bbe683cdc0443 -C = d7065d81901980fa21f69d2d645b67004af38082c00be02a -P = 937f5dc61ea09d9652 +K = 74401903fc0055c46ce6dfae43bd50014e48e8fa2563f33e +C = 6dfb5b7e1cf01b5d7372359af7fb0cd7 +P = 29a7c5dd24205de0 COUNT = 42 -K = 3520a949e073ffcf6cdcc89027695fb9c3dde6edd6744cc7 -C = 01e96ef712b811fd6a7fc928bc3a01b3ac27b1326773a4de -P = 7113f4d1f77a6b36c9 +K = 4e2391eeabd9bd399dbdf78120f2fc1670dc5efe63204d91 +C = ff02899b387d4819b76c2498ce836e45 +FAIL COUNT = 43 -K = 01e314a8acebb0a547a025c2b44a0ff8c98318e817e39ef2 -C = c2c9d87d86b172871a36df02fe6fc36e9e1a24952e7c18d1 -P = 480a17464c5e313835 +K = 61931f40f765439b5fd1604f84490aff1de0f8823dc10c16 +C = 91584ac4c3319379c54def2bb9f10332 +P = a0ec588f329bb14e COUNT = 44 -K = ac0992049cae935acd730b7d76016ca119b72c07c55784fc -C = 1a7e816aaadcc867301a2f4fa7c1726c42fe83d63d45d4f1 -P = 54e40ec397ba586ecb +K = 6e039497b3d5425dc85b867f28d9b4be983a63dc04e42a3c +C = 47d8a293b918d513e93e7d72c4c18b5b +P = ff1182814af470a0 COUNT = 45 -K = aca2e75177667c565377b77c4b499082d98324353746ba08 -C = dbea47aacf60834be101df7c810cf693423aa553199adfd5 -FAIL +K = 4f8820e40870d1c016299e9a608911a0be6463bd8321f88d +C = c6d74916fe71471ed3dc10e6417e406e +P = 571625dfce0fb791 COUNT = 46 -K = b9780618b2a7a6ed2f0629f6a0c7df0d8f80e5846d1a6589 -C = 47a6e8612e70ef876319e078dd517a253efb7b2b58f29dce -P = 89fbd89456b4653b5b +K = 69d12ad6f74f706280e3c46b4699a59b6f78cef547f9b734 +C = 3aa2dc7c4326a9f257b0a6a0a2feef91 +FAIL COUNT = 47 -K = cec3cd386b62bf7cd818933a0d73d962e4e1feded620ec5e -C = 66d0a18ca893665df638f5b161b2aed5820ae0981bff965e -P = 77a3691a5bf567b04c +K = 0acce9e967663c280ea502ba0020f374b63c5cdced475091 +C = edc0729897eec865ec561eff5c2f1728 +P = 5fd553d9cbe83227 COUNT = 48 -K = d2b2b93432c6dad2793e2d99e234bf9db1173a55d406100c -C = 4fd1ef7fb03d7df697fe8f64123ff4476346f6089b7552fb -P = 45db6ebbc6b332a0a4 +K = 25b339dda382faaab82870dec823a9fac04c7488f232116c +C = 12c8b27b1bc04fd1aef6d679138fe178 +P = e6b280e2fcbb5238 COUNT = 49 -K = bb60dcc13b2ba76847997e8854e8c5a2df10f499d72d47a7 -C = 1b1a50600e9f8ea1dd187ce7d5b8a832a1e284befdff52b0 -P = 13f0f28d49f24f1399 +K = 44db2e582c59f452da6b00370ce2ec4decb203f13a5ea559 +C = f93fc64ce3f99b35a3225fdca0042de6 +P = 6ff28e2c0f3378fb COUNT = 50 -K = b4c791f0cb1dc2ca9a2e9cdc591d63cbca2097b104801135 -C = 7b00924dc916b6dfe37e52a203c8b6ef498a89ac86d69744 -FAIL +K = 7427b8c56bdaaadfbd45d595cf4a18e3b3f1ae10de08fc66 +C = d47f660e5ab7bccc1f5ab99fbce00e60 +P = fef8a06a6316cc92 COUNT = 51 -K = 94cffd43304263c7e789a79aa647b42332ee1029e868d0b2 -C = f449a70918fcad84209a5923e1023293c65ef22e0421cd02 -P = a1a1225663164489d7 +K = f129b3456b73844240aaf34bd3942df3a35fcf4b056ca841 +C = 18672ed6fb82f5bb617fa15a3739cb40 +P = ffff338ab7c2271d COUNT = 52 -K = 9788276748310f79dc01e264944bc78f8c2822e5c1aa558c -C = 4d9788f36cacf034bf57673b07965363f5e95bfb5a8e214c -P = fa1a21b53a0d22bc35 +K = 13e7ec4e2b9e3ce4dea0f1928f28203fb95b6ad641816692 +C = e604e67272b02872d27496e23eae4f99 +P = d4e86e108aaabe9d COUNT = 53 -K = 8616149e767f6c659424f3968c5d2644b75c0d95755ee93f -C = a48e628c746661641900cd9785e5c3b0037c65a4dba3637c -P = 5998424952882268fa +K = 0d88b02143bfecdb05714ce50f22900362a6df0b39731d79 +C = c82194332407fe93905c303883692701 +P = 17abca88582697ec COUNT = 54 -K = 87ae0b162db3f27582ced1229ffe7999f5626d51a76dd90b -C = 5497c18baafadbc3a93bccc7276fd54025666c7e89946214 -P = c7b3c82aca08b258ea +K = bec3727fa0f86edddf11f1d1dbb44592d4e9b03558a4e7c6 +C = b07d889f49f232ca0bcb265a4d329980 +FAIL COUNT = 55 -K = 94a24198ee8992ba2261bc6efd1a3be78550b06da51dccca -C = b814117cf58b7b4cd9b8ed82daacb6a60a8ccebd720b4df9 -P = 12fe3f4cfc5b7d2b34 +K = 0133038761c48e9ea6ba9695282f51269676b9f54f44472d +C = 4b842aaa6f4e373271cb5aca3894ac7e +FAIL COUNT = 56 -K = e7c444188c06a727c5dfd94a2e8885552663a2b3d04041f0 -C = 0fc9bf5e3273955366b0ece3962e9ac0ef52e5a3520eef85 -P = 202bfb2e50f6936fa0 +K = 9fe28e40147cf41ddcc6f3abe91d8cdaf29094dac03eec9d +C = de4a80a19c7a27f17013130d861067d0 +P = b04df096cf8cfa08 COUNT = 57 -K = 3349626d93dd391b254b2c14e1de6f4d9fadbe880b2eb84e -C = cb90ab9370cf12cd8e4f0997796e69bfca8ac74d17b4f16e -P = c1b88cf90e8d20ee88 +K = 5733579525281b34e8ff4131cfc500ffc3d037cad58ef231 +C = e00131bdd0aaf1f7ee7cd7f64e2fa781 +P = b9351e2000a3250d COUNT = 58 -K = 00d5df7a8ffd0885ad2f38592e259c5ac5b3d81d3a13fee2 -C = 47f5fa78e8c66f892fb5e15fbafeb60f20cdf146b37cee05 -P = d7228d9c3e354eda02 +K = c6eb0895743424e133191464fe27427498d73c7fd934a5fc +C = 74ceca219cec515989d076f6d80d5716 +P = 750d47d94e292e92 COUNT = 59 -K = 128605747c4231fb7ff16d3844899587615953ba8cc5650c -C = d14bf6761fdc9acd219fbac037c3d0e795191d8272ea9a6e -FAIL +K = 5b523829658b9fbe3695051f3990d07ae210129b8975d75e +C = e30ead14fe4886b75bf4592029137f0f +P = eb9a96217d436cee COUNT = 60 -K = aef58327fdd3586f13302b25d7c83a7359d76ad7f6587283 -C = 5221d3191ce40e0f969538813da38318f5eceabf66f3f50e -P = 481e3050d4732925d9 +K = 59e4d07eddc36db517a6a2d9b229d0e326dfa19c961ef805 +C = a0cdc3f952ad91ee1a0dc17e3cc31aa9 +P = 1014be3e8ca59405 COUNT = 61 -K = 7050bc5c18622b64c8ba2214f05d68f2528c46f603cc4e21 -C = 1771137a6d2594fb406731c1ae0c5080e94cb781773ff0d2 -P = da0b9730c048056f0f +K = 253b6793d033f7f2ed9c3fe3597201c6d658a833dbdad75c +C = 149c7e8c044ad5291c8dbe946a2cbe00 +P = e39c33acb1e16c8c COUNT = 62 -K = 9951c198526d7032c9c91d928058fc80f496ad7024918f54 -C = 456b5fe3570295e03229b074f9c2faf6d5659df8646d77fe -P = 660319040aa39fb6b5 +K = 0ee40201622e8b00c80062857be823d2947e6002ab4e4918 +C = d5d4e03b92995d2ba1557af0e494ddb6 +FAIL COUNT = 63 -K = 06996872b9c4c86bf395cfc229a29c55079c99940249eae7 -C = 455366bcba43f9dea996d95d7e98257deeaf69ad055be9bc -FAIL +K = 434b70a4de6ba9f73796cf3b3dbf736f24850a52cf6b2983 +C = 749eeac8e381bbd44acb441dea77e54d +P = 0d082397121c72f2 COUNT = 64 -K = dee5b79a9b6f1491cd4cbf5877d77bda557ee1f60bdf210d -C = f9aa7ad590802475c938cf16dfdf660f8dd50fade2de5b41 -P = 4f4eb576b825e0d939 +K = 78b531a99a5ef0f0fb427b0e19c3ad7101e4c97a6bcb0873 +C = b809ad6169701ef16ef86a8540ece7c9 +P = 3f0d0a8228dafdef COUNT = 65 -K = c911114ba09934211e40f5469954054348368baab9acfc23 -C = c6fccf67147c68777d82753b29553ade3778d62346db8f2a -P = 6214f0a293c52f3a1e +K = ee8946c5624e08c181b96a22d2afd66cdbf0ac58bd0bf15b +C = 7b24d8ed63eae77374dd649b70a5eb2f +FAIL COUNT = 66 -K = 769cd8ccf94e8780631bf0970803db6114c27f1b67b5573b -C = dc4f848fbd5a0b7d895b479c036620cc222696cf076cdd4c -P = ec0aab9c423e2d3beb +K = 91b39f7d3cee1b2a78af0d6cd6160992cd59e3d6dab95342 +C = dc75789b9f04905f48261766d48aae09 +P = 9ac405d491180a29 COUNT = 67 -K = 4d31d1e6dfb472ac13994e034a4d206b3fa5c398818afe6e -C = cf494efd43ecf5e19e4dc109d14f7c1d2c5dd469cfbd17b5 -FAIL +K = e05cb516e5c40a4fdf909c40b70bb85123009a4fd44175f0 +C = 608ff7fc8e37a327f91d6ec2bcfeb4a8 +P = 075b1b526e4a1382 COUNT = 68 -K = b079d092c8b479b572aca5ff92257f44aa77775a7af1b602 -C = 076703636aa036dc5dbea6757b839b1ac91b921ada9d0cb4 -P = 73b2e1d75b80327d35 +K = 04383f6ea640f34ec0c0a335eb0f6951c909acea9cf320f0 +C = 0af455a397ea59863394eecf95c300df +P = fb58717f3bccb93f COUNT = 69 -K = f3cb2bff65ba71345b2b7fa09346283003c753e95d56677c -C = 59d70acee94a19ecf4e39d3368f55937a7d129faf9b428cf -P = fe32041c4b9ae370bd +K = 2b16941c8e723806c2bfb09e46e3e8a605b212ff7c3beef0 +C = 2191ad7e62f1ce7f0503adfcdc49184e +P = 15d34fbec861d506 COUNT = 70 -K = 37bb9ec918d619691487cbd052c6c01e889e1e4322aa7d3c -C = 0c2a076f3a69847873582c631437f99bfbf31ce88558458b -P = f286f0101b6eb9d6fa +K = aa536a02d26902e296c18daaf785e4718eba363a49a62b59 +C = ec6902896e4015b508a1d69452e6ebec +P = 500c1c9139377751 COUNT = 71 -K = 04d1e5ac0e40ba8de52e2c61aed169c5b4a04770751b3f88 -C = d9650ab71f8cc0dccd848feb185583ea360eacc00665b23c -P = 5df1cbda43a093abb3 +K = f87c7d0ad986ae73c6de2cc43fc08ffb230b264c93d773d1 +C = 3eb28f265bf4407750ab820e5434bbf6 +P = 9259df27c3c98a31 COUNT = 72 -K = cf44d44974c14bd028283d7fa4ae638644955f91859dbb78 -C = a816848fd867fb23e57e7513abff7ba247e9ac94d0273fe7 -P = 54ec478e400dec745e +K = e746e1cf64a9ee02aff3f53021efb25ebd21034eefaaed76 +C = 59bf60822d0366b6972d14b3bfe29256 +P = b05166cea489335f COUNT = 73 -K = b4843f13f56014a613c8421e8f59136bbe2e4ee0821abf20 -C = 79faa64060b391a0a5c4504c09a6dba47bdf464d221df2ee +K = c4746f2ed96e1c0fb96db049e4c027a5bc732332dc12e8d9 +C = 2b96fe1d305590f6f6dcb4ec00e0f1ef FAIL COUNT = 74 -K = 84957931616f31590d1dc2b4d7d854cae587e4f7d41c351d -C = 37c6be8eb2d5eebf0c755541fa2b9240525886081cd3486b -P = 4dffac7d30c3363682 +K = e5cf57708c1f5c38ccbd9bd19302562e53b8ac5b5c5747b9 +C = 40528b2b553bd2447b877dcf32e19662 +P = 78e43463d99d7745 COUNT = 75 -K = a106930b97e852d3dee5f55fd06c91c3fbfa32ab321411c9 -C = 413993570e60f35637d469f5a1fdb947d1146e5c68c86bf1 -P = 2a23f03d239839e7b0 +K = 7268db796d44fd05cd88b3bbd34319d6de2ab0c0154ebedf +C = dd5ce1733745c3f49422abe4a3807473 +P = 016e1a31b99f19dc COUNT = 76 -K = bfbca73d2476cd65e3df410c28590759f7605e8cfe6f1f6b -C = c1c75f3ae7eba04e190921f240499c5da851582af360676d -P = c8d4a002e8dfb2a31b +K = 61dbdcf2e5a190f1260867bf067a4cfff3a66a46200d56fe +C = b62b0ddb0837f84d595426b174adae91 +P = 5f3d8bb6ef1d219e COUNT = 77 -K = 0c95de7168a54578f3c6a5e830f5d7db3f97a06a0d3d608a -C = 8147f78b92016d1206773f5b86d9d6a01f8eca1545a4d300 -FAIL +K = 6f7907aa1089d0df45fabc6d7f044cb13aca1f47d6480afc +C = 24e0fa34296c10561a965e3b42223c8e +P = f4ef455996d504eb COUNT = 78 -K = a170e3ad11706dc6e9218902c7173c9d162df8cabc0c14d7 -C = 8ba9e8cc77c675cc430faec1dfde5c6dd407f2e732f50904 -P = ba60c26012cfb76e98 +K = 354300a05ea0921d79b8bb145d13e7c553003874c9e8bd30 +C = 209b41a9cd21164de36f356acd116602 +P = dcac3b44ac4f00dd COUNT = 79 -K = f42dd90d3b576ca49759273598f9bb227eff5fcba503b5a9 -C = 6bb5f3d6d50a829936f339734fb0fd5b7212331d6da92af4 -P = d55f6655036a6d38ad +K = 0346dded42955ded69936a778627c99fa3a54de8d7ed98ef +C = bb586a6d22ed7f776713c691299d2817 +FAIL COUNT = 80 -K = 64df46f08cedf851e76a6784f06002b26d9469050b62c0ec -C = 5a2fd6f53ec8f49f800a66d127f5c8990b37dcc427857282 -P = 6d0841e3174ed7a84d +K = d9c8f053e7f28f732b2e046eef7b33ce8e3009ad0ddefcc8 +C = ecc988877bdf5ea4a967a48d81fe654c +FAIL COUNT = 81 -K = 813a44155c79f7a3388e57af46fd618a8749eea629179623 -C = a256b6a7d29b372302521c7b42a44ec298cc6f8e715673bf -P = ecdcf8e3258332fe1c +K = f3eae18728bbde233ee36c9bf189fb0f460925a2ba8571fb +C = 51864d335da4c8eb005bdcf558a0248e +P = f5a9f37cc664c7a9 COUNT = 82 -K = 8e9638849f0a384ec48c8914b44c84bd408d20efc178d4b6 -C = 8f1ab7e59a7af7a48649a9922bc9ba670f55e66a67840242 -P = 13c55e9c0ed269adda +K = 42ec43e78b09708b7d80e5448108fec6ec8c762b2d87f559 +C = f8a8154d03554eb05f8ff132ff8968d6 +P = 0795f0719e129833 COUNT = 83 -K = 5dc1862753b5e1d0c4190fe3a85df52cff903cd30f8fd099 -C = da116dffdd63b572d45dc2af0edc49766b3501afe847aa31 -P = e5cd7bb30c8ae09c14 +K = 53b2a49ee1f1087edacdf9b62804d6458fe392497a8b05e8 +C = 2b2452eb5ad89a342d58f55c5b036fba +P = ce4cc2faaeb62cd1 COUNT = 84 -K = 8179bdc828587165449571244f84be4db652cf3fffc4a9ae -C = eefbe2657d77626c30343a76dd4d465c546ee3fdf7bc272a -FAIL +K = 1d36bc038adfbceec020bc654e464163bc6004a411a12abe +C = 4aa99df3ed136dde4bd5053196e4cdde +P = 7cfd85ef1dec6c5d COUNT = 85 -K = 700c1292b01abbb7dbe16310308439a08c2c8e5cab473c6e -C = 6c31423ce34bd4ecc55e56e8612d3d64ce55a3f83ab627f6 -P = aba0d4c851779a703c +K = 68ee16c69bd99565ccffe52eee79cd9b459c85bbed9f9f2b +C = cb9f69f8d419f2c002896724851cfd52 +FAIL COUNT = 86 -K = 89f2529d564e85bc772c45c6d634d1e5ba0dc35a20c00ab6 -C = 4e325b60930dc79fc21c6d65974f8102633e0b1ef68f28a6 -P = 3c8439dd2f01c0cdc1 +K = c74d6a09d73b9c9757c6eb7fd1dc0b21097da24708721267 +C = 5bd5c70ab690d4c3f2ab27f67a81c4f6 +P = f5b286e4234b57a2 COUNT = 87 -K = 5e94a6ee25c51e10dd9bac21ed05454d768efd1eab12fcfc -C = bacd3f6c057b122b77b7ec8d9bd734aaf0f0aaef96343482 -P = f6e7abc9f92b88dcfb +K = cf10a7c40ae805076af0044c8bc1faa2a4f0e2c995e0b4ff +C = b58324c273d9e2a27ebedbb044e47ab4 +P = 84680b147519b848 COUNT = 88 -K = 062dc1bff4ee3b5d29c26793f3f448fe16bcde9c5e7e147e -C = 6684776dbd88832355c01c774f98611984675201f2deac25 -FAIL +K = 7f64110b30b07157fef7e11a068e99ca15d35e150958519b +C = c13bb7102d996d5826103b43782ff8ff +P = 50ec77ded28b10ce COUNT = 89 -K = 1994c71648228a16a8fb23fb3a836d11c1c204471bc66961 -C = b86a3a7e2ae50a2527aab025d7f2cb60595b9bda76844900 -P = a71349f211761c8b0f +K = c249f2b23ac7264890ce5b598cc67a06341f93e16ba283c4 +C = a80f0b746a81a93990cbfedad333d84d +P = 1f6bb2a46a649d8c COUNT = 90 -K = cddc704ea608ef665d9827e5be756758066b969202371e02 -C = b985d84abe2e2734b604edfafa461a056b442bb97c62e8e6 -P = c3f9c2d6054b5dfed8 +K = e096e488eef9f74cc52e1f115c9e5584159627433a07c2d0 +C = fe65ea1286ca07d1fd9ace6e7db92bfa +FAIL COUNT = 91 -K = 26bb2e1ffa4f646c10c104e336140f0ff3b40d7502446c39 -C = b1d558032a693595134ae21c87347ca07eba04b2a6a80b57 -FAIL +K = 27df8fe11363e037ef9b00db66aaafe14a6a3e9d90d8b9e1 +C = 5d0a4e7975b231a12e58d8050fdd7411 +P = 6c689061047adc18 COUNT = 92 -K = 5537d0b2b6b20f4ed7483137063cba5282870526d489c803 -C = b7673665986c9d707d6604c57a19190a4a45e3a3e767d982 -P = 89ac17725cc84ad1b1 +K = ee8a9a24c57516b963997e191613f51caf3bd86387fab054 +C = 4234004c4546cbf04fdd52c0db41dfdb +P = 5ddd3f50ac1b5dbd COUNT = 93 -K = 7fb1492f0e4161d534dd307ff65ded205087785197849a9a -C = b952bb63f6398019abf63ad59a227f2c73bdb4ea4b6a071e -P = a24e1e7c9d3250ac0d +K = e221c57e279a5cf575981383c3e102fbdb4b9b5680e8895e +C = 649954668fc7abaccc592b289a9e6c52 +P = 1190d57a1ee52b30 COUNT = 94 -K = eeb20479733c083ad64f92eeaf1dac7fb64ded0a09d7963f -C = 864d420d5bf2f6726c93c3f38d7d0dc7ad3065385498be72 -P = 6846c00b3f5a8cfb04 +K = 2c216272fb925ab003610d8d34b8befa5fd4977da40ba710 +C = 45c3192910126f92edbf96951178b522 +P = 8ac5ef799cd4130e COUNT = 95 -K = b96ac13bec747622ff3ff9e88cda105db4a9a42da2e023b6 -C = c2646b87f45c4d6e30a87b4adbd36d3c7fb9f0b30cb659c5 -P = 3516cc03c5b86cddd5 +K = cdf09c56b243912126474f171276b6678d8e618c395be9e4 +C = 2b3cf554396cc8a04136ec83b5bd8711 +P = 7df9d2b27da4b140 COUNT = 96 -K = e01f8eb54c899de96fb4567b299f39a0e65bf5c9f8b89bfc -C = e9d80e5e85ff04266ff4b342d03d72f9d29c5c6140f6446c -P = ce6f5d69bed236fefc +K = 45b9d24bc3b6a4cd5e4dafb859b45a7451fe895d0f269677 +C = e87c42bb1b4a42453959d940eafb45ee +P = a5ab318c57a917c7 COUNT = 97 -K = 80a5dae5c6f0e4bfa3129c52e5930efd5604ec7cd60d9533 -C = 42c73f7e2fd56ff49e7af62eddb07b6ff1be9adbdd1b43c6 -P = 6ddb9c4edc04176555 +K = 86d3ae57fa94be281e9f88b31421f666a8519c4a12a58ea9 +C = fe4f6848632aab9685f60b70e1893c4d +P = 40461f3c1a445664 COUNT = 98 -K = aa7b34b9975b7821d8bfbd36c47a751aa99eff18a14c4f9d -C = 5d9fc1c191e4453f6ec95ff62a9bbfdb51486851303f3619 -P = 2c1614f2973b6b9802 +K = 0cdb435a17071545aa761cc670c1802ae686916754e07876 +C = ee01d0fc25bee6ead16311c3dbe9fd5e +FAIL COUNT = 99 -K = 1a25fca7ffb00ae59a1f5446f351ea8f9c6f58844746eb4e -C = 75e8933f730964bcfe59de629b23973ef859025e98e11381 -FAIL +K = f5cf20b18af4660e55c64adecd4259502b2c28ba85a4e483 +C = dd3342726dc1e1846691f2fd687858c0 +P = 4592f42396ee12f4 -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = 8d490f4519ce09bb415d53366629d89297e1f047d568d895 -C = 6b70e7cb400df09f70b793012edc354d -P = 60545500 +K = f61cde8e515d59a8ca95efb1a98ed4216c4a9649151babf2 +C = 83fce85e9bfc6ed784b052472e5780fee662f17a91faf1a9 +P = 1c6883862ede37b31b COUNT = 1 -K = 78398889ab206e1e84298ee0ed963c0231047f7c0a27921e -C = 65fe9abaa17aed7950f65255ac3131be -P = 7628fc43 +K = ae5c1e0e9b9faf7dacd2b31ceb767b646e7f4a2d03b12f72 +C = de3c336aaea714dc6b231bc673f3e844d7023131bd9b2db2 +FAIL COUNT = 2 -K = f8dc17420c28e9a80fa47c148b9b0b20417cd7cbc71decaf -C = 30b4115e2a6efb9f61c4eaa044aab0cc -P = 90644836 +K = 8b4ae1a46cb53eda11263ad29043f56d0ae96285e21de90d +C = d678ff261fa3308d64e78101001692be0e2de6e526a8fa7a +P = fd073d7a9c0c8226d9 COUNT = 3 -K = 4ac1ec3baeaf1f4c6de5ebb92f604cc11919c29fa4c7ce16 -C = f47f59980e53084981857c8712607632 -FAIL +K = efbf4aa9b01ac693cd0d8e9e15fe4a13c248b77200aad64c +C = 01d308b2d5057eefc1ac2631e23389c8e3802da5fe801506 +P = b1154a02b200f7a860 COUNT = 4 -K = f67b881c8dae08d44d768283b49a6b0f9eacde53b024faa3 -C = 5dae5ab05cf4ef39769202a5840dcd2c -P = 0a13d440 +K = 6e26a6840995f219e7d2320dfcd84ddc1394ba0237b36089 +C = 7da14743485289cac9fc57b37737038882b006df4fd9cf4c +P = f2447a30afb5e3a459 COUNT = 5 -K = d5e552391af566f32b499f4f74ecc06729af9d6942400512 -C = a3e2c2272408deccbbb45653fd8ff07d +K = d81b7162dc6e9e18bea6e258bddb53a1c9f22a4a7177d9dd +C = 4f3a2b7b229a665776f9cfa42e0c2a615a81f69cc0f0f465 FAIL COUNT = 6 -K = 56b3cc31d227978894efdc8b6af04f7aabfb748241f60800 -C = cc318237192939837201ac998d410af7 -P = bd4245f6 +K = c7ee5f3385db192dfc84dfc4571f890c3cbb118169c00102 +C = cc350f03ba9f850c9ce7247dcd5fb6a6a28dcff692a813a7 +P = 5d4043c461823e58d1 COUNT = 7 -K = 815bb119ee2d50a35d4de52f0dc80ca3f2c6d5a9bff83b4a -C = 5f2255a2cb558714ff658af5626108cd -P = f1c2269c +K = 43455ea24dd83ba3fc69a5c0e637714cc9506adf9c794251 +C = 7e5c67550a626928175524245ed15232bcbf1e6227a03d80 +P = ba0bb613eb7359aa10 COUNT = 8 -K = 966540b0254136855fdb2207af4417d2f3dac31f3f87dc8d -C = 0538ec366880384c47bf3e900759f1d7 -P = 2216b2e0 +K = adf87982e261b6c8e43e5efc1bdfa30de8bb89accc957d2b +C = 02e22183b8ace554ca32f699fc259f331c951f46c291d237 +P = c19923f3ad205c61cc COUNT = 9 -K = 068107e02527b84ce59eec4f5a9eea64f8951cc100d7619d -C = 999121b5de952bc46e42df54cf88b57c -P = 7c19db2c +K = 8c6572fec536a5e303ba9eb2d4253ce25648785f0d7d7bd2 +C = a0306fd2c9977745a0cf2b6915a1951e2ea1ac2628875d19 +P = ecc746f9b610325250 COUNT = 10 -K = 196c8c2ced99ae9a255496ebec99c304e2cd8eff50c6eda3 -C = e9111db33fe8e2d6112b362c8f8683f9 -FAIL +K = 841d21193cab77e4eb6c2fd2e435e613fba65ec74365e3e9 +C = 817cee66379219695232947c9e0f0929a327e7f924ad2959 +P = b620b1b293467f8a08 COUNT = 11 -K = bd810235f0a63860f7293d7aadbf8269559e6bae7462b360 -C = d2f8118d8505892fc2b7f8c74e9b09b7 -P = 66d51789 +K = 34e27ecf3fcf4d9472dcac358321a440ca76002bf860550e +C = 02b037a902f0c5be7de9b3806e8b914700563e056512ef7b +FAIL COUNT = 12 -K = 7fc58a56812c7c1bebda37e3cc5a18d8dd135b949cbec2f3 -C = 746ba48614400fc5defdaf408b30a259 -P = 7945dec1 +K = 3844a57541bf6a5a54c1fc67efb3d867de0caa750136349a +C = d25a76a97c3927ef4339116a56eff171c5237423e57e0c05 +P = 4a4647f7ccf46e308e COUNT = 13 -K = b6b154cccd22a8b519907d97391eb4bf5ee0e255adf071ef -C = 602ac180be4221b5ba8e90ed836a4723 -P = 44eefb15 +K = 95446ebf9a1d5df5f46f19940bebe7f69c56d86c14d9d349 +C = 568074ed6aec40490c2d1be552ae82bfcb8dd938dbf7411e +P = 51574c3e66d11a99dc COUNT = 14 -K = 3759e427a3c3a0e5f4440e72cfea8c2b275309d619704137 -C = d0ba8fe4bad9ad85c694b4437d8825b7 -P = aec8b6a8 +K = d46b49b62b0d6d992916e4bbae6b510aad876da3f3dee1d8 +C = 886430600ed0abdf350886ad1ab68da8a4d10ed24c8efcc4 +P = c238db81203be4d44d COUNT = 15 -K = a71936f866b034b04798e785b7adbcb0ee41454962850e9e -C = 1b2f994626f8fcc0161867fa6928bdf0 -P = fda79466 +K = fc1606d74563b4ca057b82b20f3d4469937746b3ae7ef442 +C = 4e243402fb86f28792314200b2ea5476b7944e169103838e +P = 5e34730974f3b673d1 COUNT = 16 -K = da0bc9496b8a7c5bcd72095ecec4f88ac3af624c509ba3aa -C = 9a5c511759b811894d66d6affce91cce -P = 742f69f9 +K = 74d7b70ce4677c419c4dc0bfbd1e610646a7e46ab0a14c2e +C = 6ae402c4c381abbb3b7cde5effbae827e641e469e116ff72 +P = 980e42ce540bb8f0f7 COUNT = 17 -K = a0ef65ac13822ae1ae553b2d1dccde4d90e76f86c69aec69 -C = 511f372af431748bed51e02afc0df33b +K = 2cb643bd0a7a1e20e55b5b775e938869ffe8e214e526d804 +C = 32c5e1d7f4932003991b104d357cfb4bab232b49960fdd04 FAIL COUNT = 18 -K = 40631650d3a45849a78a4840d8ed53ad4f2186dc9b75df11 -C = f49f26249c30c28397cce33f25a23ba7 -P = 54631b22 +K = ec21d69c800991fe2efd742a69a926833805b7bf628d7280 +C = 9fd98c631eee96ad67c8e169533712ca3913e8be14ea481b +P = 1e0c1ad7efde00b18f COUNT = 19 -K = d4aa8414b210e533bb27df5ffe22dc1e4c389c622e313f47 -C = f2f3e32018be99366b8a603146b6e975 -P = 983fb507 +K = 2d574188416f063d4e318ee349a059d2a5f010503314bb21 +C = a1ed992de49dc3c43f717d885c1f0019beabb63f73afd9af +P = baf4672aada8a3ab15 COUNT = 20 -K = c36c4be5eb38a2f1017919666ec8e48e9d7f37364c8a56ab -C = 8174523a6c3b26935d1f145e6b85510f -P = bc270058 +K = 3b6f3442736dea4066394c2a3271adbe81b2fe1f85ed1a2f +C = 0760fbef2f677f2d41a9ed0a3fb47cb5c83e1fcb2816653d +FAIL COUNT = 21 -K = aebc8042d89be4051e4cbc10a5595b24885a3a6880c42339 -C = aa471f4031172f92338c6d82f1bb4eb1 -FAIL +K = b0730c43e5dcd8d7168a56707e170d8e7dd7992ca5c0c694 +C = a9917d0619a569a7139369ee07538617fa7b8d560dffa3e5 +P = b1322d7dd5f5cbe0a2 COUNT = 22 -K = 9c8e0e9cb9cb02c294d5eb783ea46e089b775f7570b29508 -C = 4be81a1759c41c851221b4cb26f6ed2f -P = 11a59c94 +K = cb90e3c01fb0f587d534bce717165f8d41a171fe8047eec0 +C = ea900b4e261646c4f8499bb66c6735be2310aab6909bf772 +P = ab41beb6443a65c8ce COUNT = 23 -K = 0c27ea15a0b0c2b5860bb377656cb6c0f4d751969835e92f -C = 0743ac0527233307c6d938b1bc2c3cf3 -P = b9955aef +K = 0f577e61f6d1227eac6c31ef27b9673b7598fe31d1a08d5e +C = 42ba929b5a776741aa64ca29db6960019cfaf54d3544ba5b +P = cbc92067f852afa726 COUNT = 24 -K = bb29e2d96d1cdba3a470462c1aed9cbf52223eab26dea882 -C = a4df8e251eda27c24327a3b7174d89bf -P = a81657b9 +K = d5700ce581529317a15a8ad50e67841c5f62533d733c4719 +C = ed6bab45ac5735ea59afd67bdd000c7ee01de80b5d9719c6 +P = 72d4bbc8c8fb9b6a31 COUNT = 25 -K = 2a3bc5469d38b61ce31522060095f981d277ed69f40cd71e -C = 05054b44f67d87c393efebd59903270d -P = 55a32a8e +K = 8b9a2a9f75ccb3d2590c7dbca72e5a0f10adb4c6a73f9390 +C = 0302d14cbfd7133d1dc1a3bf81008b85062ab699d6117c38 +FAIL COUNT = 26 -K = 753957c3aa237d61d11f918ff3398e76b9a7efe688928ec2 -C = d681bf0078447bcc40c65bddc83f6055 -P = e8615e30 +K = 4fb1b6d385f32bf8599741902f35325fdfa3ab5405100e97 +C = 598d1e76ed825b1258d8c7a9095db4b16399ad8561ca8d0d +P = b64e4309fcedf660bd COUNT = 27 -K = af51b91b4f521e5c946072f05112315810e92222f65bf759 -C = 8685cfaf280e54777951c562f79f832c -P = 772f6b7b +K = 2755b09a37e2c71c9e874bcbd0a7e3cbcc64ecd37395596c +C = 88def9a27144eb6c542ef7e3315de5d7dd7644eb47055d87 +P = 000ba6e13e74127a03 COUNT = 28 -K = 3793dd95738d47df446b07aa90f2df3373b20ef5d4b1cd8c -C = 060faf46722356309a1bd19fef03136e -FAIL +K = 38dd8d076b85406d94d94c432aba950602ff5b413412097f +C = e082cbd04fb0ae76bd7793881ee4d044b01fd15ee5729fd3 +P = 947d18240cc657bde0 COUNT = 29 -K = d768b609cc220fe0705f26e6cc3194e6125f18e602cf6ee2 -C = 08a9db48e6b0f8f93a9dca62ef52788f -P = c1b61b08 +K = e29f04aa79037ed03df8b7f5e55339afbc802dd13be0a820 +C = e8d606ee68c7cc91d572eddf4bf233908473803dcc7a8e76 +P = b105b00e4aa4184be1 COUNT = 30 -K = f60604d5908f9d682881a30d4940bca250151104d1054ce7 -C = 9fc609577ab00cc6846d79c213116c37 -P = b15d4357 +K = f3a0726def80d54cfadace1d3832bbb0bb13da681f1227f7 +C = a7312a71f9bcd6a092c183e42eff38553fb8e7b0b46a77ed +FAIL COUNT = 31 -K = bcb585083d0ab5a569e16936d7caede407b5452f4543d27b -C = 6097214103a099c7ac2b3653ab017a15 -P = e310c3b7 +K = 37af452b2feb4feba22619b7371042d072dcfb7d76639fb5 +C = a29586b05bc8143d186875415d84876a0463e93a8779db3b +P = 0a8187c56f0ffb0a99 COUNT = 32 -K = cf8fbbe67c96b2968f2df73e37d33bb0f676fdf00d4acf58 -C = e6014ed656427ad815a767c5f444b629 -P = fea941cb +K = 8ade0344a461ec0956d7850a70e454539e95b1e52eb6d9bb +C = 9ab39cbd0fc870d3f6ab9e7d68941874c2532e7db93b1bad +P = 55ec628bd6cff56cde COUNT = 33 -K = 25d2edee2bd1a6b4723daadc9ea049801d3fd118f540d55b -C = 5f01674f8d2868d4658658c9c63751c5 -P = 4c1dd04b +K = d1b9321abce4b6fd8171dfd236c6885ba9b3cc0eb8a0c950 +C = 6e0b54e1811b2e05f506be37884b09dbc4d7390b4ef6c4ec +P = c37c61fe1053fe78d1 COUNT = 34 -K = 4380554bbe699d1a256d429df76231d70895080d652e11f7 -C = 9b1ef423da28b743c9512eb69be5a836 -FAIL +K = 9e4507b582d7d62cf5fe261f9ed828a0833645a8814d0226 +C = 7293f415ea6ff98eac735c43e56e58855a6ce584124b5098 +P = 24a8507170e3b76256 COUNT = 35 -K = 9dcddc42b0085f40345a06263a7d4052eeb8673fa1abf7bf -C = 6f2dc860df9a10202529558f8c667f13 -P = 5a69d9e3 +K = 4f9ba3a7e2ba3eec9f1cbca4200a71291c2a90733244f2a5 +C = 1c251ccd848459ced0bbeb9e7964c8a1a386b05db45afb58 +P = a0282d527a0187acce COUNT = 36 -K = 84b605df80bd92adced8cf0a063e123b7a57ba2c71188326 -C = bda1434443ab4bd8c2f4547fc6ea623c -P = c8ac92f1 +K = 336274c2eb9a96d229fcc57f4dbc22e74537a92829404a55 +C = 1be514f5c41b0c704b9a2bc8f7e0db41330df79da32faa1a +P = 23a9c140968705ed87 COUNT = 37 -K = 8f5a76efa5276868eedb984e33a0c61dc9a544ee999b883e -C = 4fbc1637c0c754fafa14b768fc4274bb -FAIL +K = 0bc60f356880035521ce0524b7a435ed35371fa799eb45be +C = 3f6911afbe06c678e0cc57d039b9b45b91ddfa3cd82feaf4 +P = 9ca34a511d18819b5a COUNT = 38 -K = 23052763ac4589ab6c12bc0ab8217449a31bb9508399084f -C = 66969d21dcd980ce60a8002d7ea0c9eb -P = 51df82c8 +K = ff71b7f8c9878320ff779a31b700935b28f07cf9a2ed5ee8 +C = 9823587b1f49b182f02bb8395d177ae057f840bbb98cbf74 +P = f0a209941132d11c03 COUNT = 39 -K = 96d229d5d70a8009cb5e78d2779934c7df40ba64cf7c606c -C = e9aeb408e091dcf02de4a6d7651cbc41 -P = 576138bb +K = c31040b4af13e9ed8fe853a928fbacdbd52fccdf929549cf +C = b5f6302983243fdead8a516c0b69b984e0f561bee7a9881d +FAIL COUNT = 40 -K = 5ac6a1f81a7a16b54682da8fa312a60eea41c8d67a840be9 -C = f4908876ac3ccea211ebca5ec5f8f139 -P = c51ae1fe +K = 6e83cd3f4f7850f36299612c72658ac71b2cf356525e7144 +C = 1923ebce3771c81caa8abbdb4f12aae769e845a1dec7d346 +FAIL COUNT = 41 -K = 8de5ac8a3d839d86631328961d8d0f3371704c11be1aa193 -C = 7a5f7b8614b32a34c7c968e8740f15c6 -P = 7c02b388 +K = e43f71f50f40b90262e4bb5c22e59184a990d78bb1f936e5 +C = 4892bc34adc49632d161b278794f39b282014d7a07d3180d +P = 288a79a4bc1afaa3e7 COUNT = 42 -K = 3ce49a925b861dd8fec210aa84f356ef3b1ddc850be13ada -C = e7a58615c1300a060fb6592baa790d66 -P = a6fd3ce9 +K = 2f7a9b3c2b1dcf267dd85b6d4906c7c6481f2aad51c5914c +C = 09708ebddf4322df375b04e561f51e58a0e22f21b80d4e52 +P = a8ffa3c62ff0b5c328 COUNT = 43 -K = 7de905cb832ccb690a546b3af0edf72dcffed4e5d31960f9 -C = dc424f4d2307b638ec9150238f4f81d0 -P = 38e63d2b +K = d07ec9fe90de9d95371fb0038f7792f40258020c28e7d2fe +C = b17c12a1befc4253708039ac865cfd184cbff8da85bbfde8 +P = a33d613365bf616f38 COUNT = 44 -K = 159ab1b71c7f0aab5fecdc05b2a489a888d60ee88eb59f3d -C = 34504903e7e82b7e807167ed562f341a -FAIL +K = ed3709562a1273a4a611e7e4bc6713347f2f73a68cd411a9 +C = aac61588c40e96ff33857271a5ec63fe67ac391d5967da07 +P = d38ca9ebf6f227974b COUNT = 45 -K = 59f36908f64d4e553b88b01eb622e89b7a44330cb5de0f8f -C = 7de624a5e6697cffd9dcff2998d99608 -FAIL +K = 7d279994f509c6c87a052cc16626818b965a0c51d8fbe9f7 +C = e9b45dbe26fd7bed5a908104a1fa1571db535f3393f98af7 +P = 8f446f0b8e240d702c COUNT = 46 -K = 1ab73dc83042ddf4dce09366c4f6b93680dea5d0d7890cf5 -C = aead3c9e504be926cccea4e874fe189b -P = c46caf63 +K = 97dde0c9344a0213736a5452772d38770edca2b69f57a79d +C = 3cd526aead9d871918a3d50f7616428e978e2ffd24b752bf +P = c2a45f138469375b09 COUNT = 47 -K = f1c1eb2a5a5f19d1cbe05a365e2d3cc982b3c8939e89aeb8 -C = e9beac8513730f2d944296b05648c488 -P = 6e9e4ec5 +K = 9f8fa2c5fee847335a20c60f09d07c5c58b6af81c7c85b48 +C = b9bc634133534ca69644cdfb69599089334422285fb8625d +P = 19bf9b6e8c537b9762 COUNT = 48 -K = 708d20d71ff3d4d017fea8c37dff559d65d47ae96ac25f98 -C = 94cc4dbdb087a7e5566ca04b5c50b82a -P = 494da03c +K = 07c9e58cb719716feb4bd4034526d450c67b4d5b075f6933 +C = 776892e33041661aeef796dfc9af21ca74d317dc473d7792 +P = 37daf00201e48863e4 COUNT = 49 -K = cf633d0ed7a6ba600069b60469af3c7cbe8e4c933d6b99c9 -C = 82af3cb68b7906402874836bdbb84a62 -P = f4613e5b +K = 6c890beb848b9c3b64f64fbc0213a65e4da3f84e9f5cc4b4 +C = bceca9eb5eaece8925937fdfa3849e74f80245a124438c6d +FAIL COUNT = 50 -K = b6840a6afab698c34291382b1b1995c4ec1df5731993625c -C = 09048edf7fb5d4b52e50a9a2fafaefb3 -P = 03453139 +K = 8750350190b9b97e29a7f5b4d3565b4cff8beecfe20ff010 +C = c4ee0c269121f0cb628f776512a0ef610016c0f4e0622692 +P = 509d8ce060e8c62614 COUNT = 51 -K = 5d06b8ff8dec7068bcda9ac205b04c05465e57ad4956569a -C = 61c24e5f06d8760d0b85370c7d3dcd2c -P = ca2fd915 +K = 8e7876df475a258b3f81baca16b981a1c639369bbb877470 +C = f638e0305be73a0e9a477a54d0074968f1d28b3f4b32a643 +P = 49c75b147e38768d83 COUNT = 52 -K = 87b7ad2603cebba60c4b09862c5fa8748897ddf1e2aa00cd -C = 21a06e2393679320fbb653a3da253fa1 -P = 82f0b4aa +K = 38b80d7850f7bd62a38c5d8c32b84c7735d7c6c77c48d502 +C = d3cd06c66f10e457c09dfe8bc7a1ec8b4f4c9f865a99c774 +P = 9b13507ccde7d27b57 COUNT = 53 -K = 60a1208d7131764b751f4c944b78efba34e4dde8b87d8152 -C = 4d429cb32eeff7bb62f8da20bb598839 -P = dd90c4c9 +K = 316829b7db9050c4ea26a866e8f2381fc3028018da4c1e74 +C = 1597ea69dae7ca17274ea0439aea7a4d9694e9ad97a13560 +P = a81ddc5f589a834bd2 COUNT = 54 -K = 4f656f1d7039a8b7a471647648c4cb9ec59c1d94a9df9431 -C = bf50a9d532fad582b180f8140203411b +K = a8e5c043927882aeade06c932898610092df393e28f1af99 +C = def957c4cc5b044e26758685a8fb23013d6bb27785ecc41c FAIL COUNT = 55 -K = 49c160f473d69b721860c23159d16a307d902266f7940c27 -C = 2a189e0d273f4ee345962c2f33c789b8 -P = 082f15e8 +K = 414e6b382029a4a817a96dc7632af700fe1d8c78a43860b8 +C = 226aee40171ee84aed5d397e26de2e9e9e85ad87957ff998 +FAIL COUNT = 56 -K = dfd92a1cfb2a7c45df5b8bb54ccb3a0e1c1b791f5a7badd5 -C = a04e15420daa232376f9d75c5e01c1fd -P = 3c529187 +K = e986f10630d9023e2f1d9bcd60ee9bee6fb1566d9c8be2a8 +C = 0be7fa12bc28decbd190bf00928240e2ef30f1dc922e41da +P = d22a2c7f1321fbba58 COUNT = 57 -K = e896ecf11bf92268e02ce2a4ccf0489ff1386b9d2ab03d80 -C = 78045869b16983245dabdbdaa00d40d2 -P = 8ea8ae95 +K = c28a32cec50408794f704f0fbc219f57808b3da8eac6d2a3 +C = c6bfa0e76ad0aa620886a97ad2d36d37639548715b88f862 +P = dced05aadc44fbf59b COUNT = 58 -K = 50bc48de067b593f44e414f02dd9a8032bbcb1b98926d047 -C = 645ca16e6d146a56f2ecb4367dffbd0b -P = 6e6bfe0e +K = ed31192305496f24b166aeb1ad87dfbb663d944e8f9c74d9 +C = ca573a1943267d15cfe1d9a3760895a5a6a6712612b2669f +P = 4cbda6bda9b0a5596a COUNT = 59 -K = e1173dc3246354de78181b49b7ea06d862b48631702ad3a4 -C = c36ecc0a0ccf97bce6fd6eebcb3633c3 -FAIL +K = 22c9a5a4ba5a97354545a2287ae0a5f3f59bb2cb5c1ad241 +C = 473ab30ab51bbdf74ea1eb912348d57002646de0fd9de029 +P = 5b7342d3333b49c676 COUNT = 60 -K = 6928201ebd965e13a32a8785abf218af523d14942998fe80 -C = ace37d3edf06fa4a1b250320e22338cc -FAIL +K = a79dac9750f9c721cc101112425a5f14e692ce763d685e5e +C = b8c0bfa89f4a1d27d9b957addcd15a598403e9d590ccc1fb +P = b9cd9ab027201b6875 COUNT = 61 -K = 7a2e2ae0ba7499e2acc5c4fd6fc712ed7b767d0f37e18ec2 -C = eed2461039a366109288557126b96ab0 -P = 62b94c7c +K = b8752398f4db744321138363b01c70e9c2ea60d0f54adc67 +C = 218a94bb8ab892a079bc53c2e44cb548328fe382134a7da8 +FAIL COUNT = 62 -K = 7d21e5a545fa7de150c770762adaa5f6ed2bea0fd1657e08 -C = 58eb54fada735c4222ae3efa4fc0c90f -P = f5db380c +K = d4163541b028049212ee66e7479e1adfccde0efc66a8c6ec +C = 8d7b5126aacd99003ae4926743203d1057bae4943e4c16ca +P = bb3b49fce42c8779dd COUNT = 63 -K = 50b70499ed03d42b53d09de50ca8097bb419e76dda94123b -C = 4a730d65cd07ddaa6dc1a430c9975730 -P = 4bf7bf43 +K = 2bc9a35c67feb00d756cd523083456ed90847ff23637f980 +C = d148d282d980443d701fb3f8ed793dd9a7952f6b98041007 +P = 380c0b2e59a677e784 COUNT = 64 -K = 1a096f015d62c1c89e00098b05ba2f89ea89990c0e641842 -C = 25d80d42955eff346b18da371ac09717 -P = b697beec +K = a619dcdcd171a294179d959a6f708f98143b0c530ac5334b +C = d65c40415567bd7607a5e36aa729d5b11dbf34d148edbbe3 +P = 5b31b550d073ab1aeb COUNT = 65 -K = 8b9f5f009eac9f70348fa2b23aa532461403ef67e792c6c8 -C = 2e06dafede0d89ad1ba81227658a348a -FAIL +K = 163e135ccddeb0d395111d0322abc963dabd86a58d6fe099 +C = 1436b0677b2915d1ef5d695c2c8c3fd7f1cb38d23c348e30 +P = f972e803dadd83f290 COUNT = 66 -K = 368701abfc83ea4cb63dd1ce1fc19d72294bb413ddb87966 -C = 418ecf9d5f98c7549e42fc1debf10c32 -P = 3bfe6f4c +K = 29bab6e1a1ea1f5a78ed9bc57f5702b733c88417310e8ec4 +C = 3226a30c9613487643a4cb510699ecd79201d17044a88530 +P = 79951d8657073a3d54 COUNT = 67 -K = 6372f07082930f2d9b3bfeee8c312fef8e9f1501e52e5ccc -C = 64f038a4aded19c71c56d156880aac67 -P = 0f662ba5 +K = 3bf17aa9996208b2853dbd40bfa6a467088fb5a4b73c106c +C = a51097197a1d3ed6e8f9e3c86337a8e2a435601e668add44 +P = 31c072d04d74a37da0 COUNT = 68 -K = c3b2311a32feae92048fda0a75a1825b5cf93bd3ab9228d9 -C = 247e325799ac37c5e98af15b7a5d876e -P = 76f310ed +K = a4431ac37f8f08cc0aaf6a34f532f52ccb9b504a3c0a011e +C = 7dbaab303221d6c529dec3b18827959c3d3c474d43609d23 +P = d742ba3e4db9d476b2 COUNT = 69 -K = e34e350446061d69a6ee61ab903b380827694f6b1f7230ce -C = c9a8246417243b6dad48eb35722cddb0 -P = 76fc2a8c +K = e4232450f7348dd415449b698bbf09f5419625c800572eb0 +C = c1fc01a4a399a8eec113b227b0b2aafcf402436db518675b +FAIL COUNT = 70 -K = 57a6c4307962458be1d3a4a486d940297b86e75c1764c7d5 -C = af583b13ec86faab8f393fcb17403ade -FAIL +K = af616c2ad56b05c23391b30c0678a0d32bd1f6aac012d02f +C = d4519a4c5aa0c26930c094d1cbb9856fc0f4b0420027c4d3 +P = de6f02542b88d23443 COUNT = 71 -K = b70f76235157d8a853c2a25a6611f5fd6c3a0febc0e7964e -C = fb02fd15171f3f21d5a6961ea6a9a005 -P = b0eea7d9 +K = 614829739316fc62f66925123c0aa910e740ac8afd7e2ec9 +C = 8821eda8a7f37a504bc68094a75a02737453ea03e2dfc3a1 +P = 137729a773373c7761 COUNT = 72 -K = cfdab55edaa6240efff473b4a9f563b49e5704f39f56d5f6 -C = 8967b20d9b2f940f7e49d41bd7c3bde2 -P = d387bdf9 +K = 72f4a64e374e02fe290f03482ac138a7926737439886688e +C = e2aae203a471287d9c128ce76b3fc384bb2a8e322be803ac +P = 8c240a0713717b7b69 COUNT = 73 -K = 2664113f639e20eef34a0826d54d539e47b321f927d661f3 -C = 686b333a0d35edcc009f59a30bcb8688 -P = 84745fc7 +K = 82b8c1e5a462c175ff428a11909c1cb264d2d34a04f85d1a +C = 3074a2ff2fdedd472c142fd793a873438e644a26e457cb63 +FAIL COUNT = 74 -K = 6ecc498b7bbca779d6398d7e2e7fb60f9374a2d923e3f684 -C = 5d1b8d255dafac708c15ccbf0c5e41ad -P = a2f99510 +K = f664972069f4a195a707a96f4d2320277406b4f3501f4525 +C = 055e8bf397a12bf9390701776f0c830c5eeb5237600174e5 +P = 3049812095e8650a7e COUNT = 75 -K = 19716cbf67aa4d9c604fa43704780a1281058d0e71c75a1d -C = 29c30ed2e442775fd4301c76cf07f6ab -P = 360f89f6 +K = b61dcd737a11bed54eb0507aec0788baa4604acc5c2751a7 +C = cec30d1f4c3a78e19de1109ff741710a329b7507227ba0b0 +P = e31727019ecb4e6d30 COUNT = 76 -K = 562f8886056653085cef55433255b01cd913920b1caf7a32 -C = fffe1ac4d584b6ebc267ce4ce60d66ae -P = aa37338a +K = 5af535c8a9c755c9560e447bda9a01c7ebd7e666884f43cc +C = ea1db933d277b603792dd561db76815dcf989e431dff248d +P = 20baa551445f14f4da COUNT = 77 -K = 358ae818d578cf3e4ec7d7249503535a3eaf98761cf77011 -C = ef6b0d12df69fe588946532826a61b81 -P = ad59f891 +K = aa628727ada66a1de367561902a6f3f5151d709298c46350 +C = a655c582797144449e519f46124f10b9c14acb82107557d0 +FAIL COUNT = 78 -K = cf9e44c50a8f92c031a5977309a57ec1886cefc0b3ea008e -C = 9756dc69bd417c898d8ce5382c04b66d -FAIL +K = 932a72ce27a7617997a98ebd4430d3139ba92e4ab88ef649 +C = 54ed3bc5c731a20984f0dcccf0ffb8b5017706afc29a06c8 +P = 04c18222882fcfe7b7 COUNT = 79 -K = 8e1b98710d761a0f55f7c1d3ddcf6d1cb3ca50d2329e4bea -C = 8bb0e8749f80a70ad4e54d608cb81910 -P = eccc1837 +K = 947f92b93b769be47dc624036b9c28c737c8302a00fb89b5 +C = feb9cac1eb7c39eae4981db9cc28f67daf8173b381e154dc +P = 195a6db3e89a4ead9d COUNT = 80 -K = deeeed194770a0e801e90ceda959bb6d86c73b4c7437ae58 -C = f1e2584bb561086e89a8041c0aa3ef1b -P = 96e74094 +K = 3eb7aa10952a44097181f0386143ce44e5cdc7365883d89a +C = e99f8af3fc794e01d0c788b107f593d0a96ff98e4c423007 +P = 3931db3c4da31f19b8 COUNT = 81 -K = 29af4add716ca480d1496d8e0bdfad028735b38271c69c7b -C = 67431603cf002b2f18c8a7a6f6fb6515 -P = b35070f8 +K = 2a839a90f575f16b4b8d23ffb3fa3757c94a2f73bc03e98b +C = 5d55f1b87157920c2e6e225daa89bb11f6869ff514933ddd +FAIL COUNT = 82 -K = e92a1c90135e3f8c843f063051bd30a9e7d7cf24ba4bd57e -C = 7a8f34f5ce049adbdb207695ec9296ae -P = 6a7c0b8f +K = a84d7b8b0547bfa674a8a9b31bf23b759405482ab95a1d66 +C = fadd528cddf863983d2129b139bf9b507697e0343241683e +P = 30003e20ed418f2683 COUNT = 83 -K = 847769207fe945d241891fc614ad14a2eb3b0f6b402d6361 -C = 5a538507589b135a6883569a91c98eee -FAIL +K = ce67852f0e31ce871055517d44123d6f0496eb9818e6835b +C = b4040463b4d43f731170df97ec41bdd2f041b4917edd0b36 +P = b67bc19f6279c732ed COUNT = 84 -K = b5beb57dc7016b684c0ae7423a4aedc7f8067805b666c4fd -C = a2d2e8c342c578c6caaca69ced630d98 -P = 0628c511 +K = a6465e8097aa0114426e6212639b5dbf2c9afa21f6470070 +C = 3d93f3a315cce5e12a114fd22a8ede0fb8f8bd11cd39c447 +P = 384e6c8306361e5028 COUNT = 85 -K = 321fb0aba3e1c5a5d3214a8feeae36a7c219b4b2abe2caa7 -C = 9c3c7f5bdf9648d36b463f370a19c97a -FAIL +K = 90b060f9171f335355ba475643a8aa0cd9905928eb5547af +C = 582d531990d3cd88d60eee1089341f6ec3f735442c06af36 +P = f0b5f6e7eb98e41b53 COUNT = 86 -K = b1ccdfa28892d71b59e2fe9a71b733bd40f10ea0cca794ad -C = e786b7eb4bbf29ca30a98fa4fb4f4cbd -P = a64cc18e +K = 1fdc1b889e79e41bd71af9eb49a3044609b3b9259302ede9 +C = 350e3b05374c1007573f1ecc5419a902e21a35b6829d63aa +FAIL COUNT = 87 -K = 593e094ae562172e6aabb9731136fd9bd650f6e0ba7103f2 -C = b5853b70a398141b6a4e2389d08b80d4 -P = c4f4ca55 +K = e61c504b0de6fce0de9808abdf4fcefbd30526bf5e3e261e +C = 0ec55a67fb9f461fc9f2698a2591eb6426e68c0772f65b92 +P = c90662463a6c1abc4c COUNT = 88 -K = db4b68935fa336edf22cd268dcbee04be519220d5c0bbeb2 -C = 1b80011035326fa2c1d3660f68c1d224 -P = c200a505 +K = 78f83f247730242a027280351463b0e2d797dadbdac96be7 +C = d401bcf514cb679c844924ddf986b1327bc0b878cdd19b90 +P = 99b1c73df453e05f00 COUNT = 89 -K = e90945010b02bd52af3f6bc04329a29dbfecad2908d30b3d -C = 55fb1c5a9453a17b4c883d67bfe08b0f -P = 3335890b +K = acadc1bc27610875313c3b97e19dfec69f28dcb9afe2d32f +C = dec5e7eef3be54388e244b5647fdf95082f5c4feeeacd905 +P = af958621c95a91605a COUNT = 90 -K = c9cc94000605e98144e29bfa8f8ff89b9dcd2eaf7c5aa6a3 -C = 83b04fcb6d5495a5666cb9f66412b6e9 -P = 14f2ef19 +K = 1cc7cbc6a46fd09160b99e8838306c0f0d5544ce21bf442b +C = 932a0951f15a5ed9b0b07d2bb62e3815fcd2a55c41b4eab0 +P = bc3687330cf84ce273 COUNT = 91 -K = b6b6ed144bb9f642a472cb48d31321a227bd80d7b3539090 -C = 40d479ae7876ecc16ba6212c237db807 -FAIL +K = 8282672b2c680bf9ff31f1994356d1fa2182276373650934 +C = 30f726cc1006677f07202d9486320ffda2ea3305543d1579 +P = 2687d0d768e4683cfc COUNT = 92 -K = 3b148a9d08e55a75bc53a7fc8d1c7d51d7a353ccc5c98fef -C = 687ed8bddbde8aa86c5657186ff89d87 -P = cdc8c8ba +K = 9864c840d7d1c25ebd0db98f6db0afbc51d4bf31dbf48a9a +C = cd190c1457da8d6542a4b2f2f023ab7bcec4481ff9a68f76 +P = 8b089839456a4e057e COUNT = 93 -K = d0c0ccdd44a52b918caab7aa393a118376a668efdfdb4458 -C = dce78dcea8a7f5d160ff02f0938ddef6 -P = 053c1a04 +K = e3ad28d4dc3b55798a5d4114218cb2131787f14b492e5136 +C = 8fe05865e3991ec096b1db6e07c8b26ee7651c8742339884 +FAIL COUNT = 94 -K = 7bd38eebd771aba589e143d41da2948f47d95c4c89bd51b6 -C = 8d7b97f3bf243aec08322a700cdf5875 -P = 64e72875 +K = 77abd53b5c6c7adba795bdc2d80c9f213e6f5ea37d7d31ef +C = 32c069a853d0da50824a5a2c1d1316e1776b68ca9deff30a +P = a8a3ca7032627c2c95 COUNT = 95 -K = 290e69f04240c38096e90a2587d088cd66f46235246a6a57 -C = 5ecb1e5caeeca3329a713fc34d090062 -P = 393de1af +K = ce6310a5f15d645136101758a8f45ec507bc3f30b674ef76 +C = 823ac2cc2972f0cd69e72606eaa25d3e7b46327d94603f0f +P = 2d6e5b8f73c9cc2065 COUNT = 96 -K = 3af511b7abf5308ed19ec86f6bfce9df6e7befc901b65a3a -C = 02cb2c9d6e365efac322f839e9c7b631 -P = 58716e81 +K = 2dbb3ad8da5def70b90d60c23c1ae74b240e59caa9435458 +C = 92f9360c86ae86fbb3c5795ec0f1418d5deccc80a8614347 +P = aff672f428b8e91292 COUNT = 97 -K = 303a76e062e8c4b0d2ada883c03541b67d106409b38de3d8 -C = 2a1f9234d64364690c7850dcce4be036 -P = 9ec4440f +K = 36929d085bbc3bd62bdab8fb73dedd9aff76b359e5068c0f +C = 4fc714577ee434eac274a72223bbac8089d4438f1bdfb1ec +P = 32faec8c57ea13d913 COUNT = 98 -K = f3e3c53fbb01fc1aa3ccba8e834a6d187dc4e727b6b1c832 -C = 837381f720dd5dabd144eb332423df88 +K = 5ed7e695714cc710d870d93a05faac55cbe12a6ac1df8dd2 +C = a013eefcaf1699f15595e11555be536356b38a2ea3b12bd4 FAIL COUNT = 99 -K = 88c3af5ee519083740f881fbbdef43774e91945988e17c6d -C = 4366c7c71dbbbc8da9b421f56033b0bf -P = 76f5e596 +K = 684fbb2f7a0d9a5f02f9874baeed820bc9372d50e7dd80f9 +C = f5979a532b8a9947b6210bd85586285352a84aad7e60823c +P = 51efe30616caaf16cb -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 7ff8820380a0d660011e77f4bcff8027b013e3c9a74beb83 -C = 4ae9abc7c0061ba8c87049c1c5d5c22b1e57d36189ba8333 -P = 1a7f2e54667a093563102fea +K = f5f896a3bd2f4a9823ef162b00b805d7de1ea4662696a258 +C = 4e9bc2bcbc6c1e13d335bcc0f7736a88fa87536615bb8e638bcc81668468179067cfa98a9d0e3326 +P = 6ccdd585184097ebd5c3af3e47d02c19147b4d995f9643669156758c13168f COUNT = 1 -K = 85edc2c9ba2a3047b0d9b11ee0d44f6136998da760e3d043 -C = 603211499cf6b4bf8a2dc043a9a92569c62644c8a13d76e1 -P = a55bb02a588f1bf4ecf64ce3 +K = 688833d56cf1a0f492bf1f7e35c2fa6299a2b1b5ca2a2823 +C = 4b7c17d7a7189e7955c03abb0ca95fc0c780953787972097ae596d46fe2a8cd75995e6309780ae5f +FAIL COUNT = 2 -K = 9d2d78a7e7efc697d80e406ac192ef7bc38545ec6b3cbf33 -C = 0c23548bc0b9423e2f81e8e572cdc15de77d145af16a5836 -FAIL +K = bc44f93c11a803d2a037dd8442c370a7f5c677eed04706c6 +C = 2ef9990cc82bde24b149a321fa46c1c2da90027d2d0294ad46114e2adebe5b777129bf67f2aee900 +P = 398fda7d8ccba2b554cb88559dfec913d93bea51750cb41f291ceb34e8ce36 COUNT = 3 -K = 9d3c0b1f0bc28204bf28e232aed176caf3e6b86d1804f97a -C = ba6fcd20c5befed0bbbae8dddb8dcc6bbcf91ce3fbee8333 -P = ab635af20f48296f7161c450 +K = 1c883af75147bae6f34205cd656ad30ec97e617456591ce6 +C = f24f6747711cf72fab0422026c6d548ccdba786d77ab900ac3fb8f39f116d38e92c82d5fd9a045dd +P = bdd793f086d8733f69055bd79bbc448be857286e918fd4c54be4acf4eca5e4 COUNT = 4 -K = ed9937e0acf3e4b6f3cbcb79b19ecf200d31880d83cef849 -C = b3ff0cd6d879fdc66eff3c8352a9721c23060e5bff968351 -P = 41891019cc84ba258460118c +K = b6430a81d5d60260bc80e6492ac13ec5a2c44e8e246dbac7 +C = 7080dc3ed8e4c128bc9cec017a68bdbaf4a0d4a432dfb314e9be0a60bdaae18812354ca05e335d00 +P = ce848d0a6942d49c621e1fe9b4df59d4ca85e4dd3841b8924273b8a362c9fd COUNT = 5 -K = 6e8648c0eaef3fe5952bbcece136a262eb154965452da759 -C = 6e65715e42ba33f1ccdeeb7375d6c1b5f4bc1c7e5595ab34 -P = dd247a800993a68019371233 +K = 8f93e073ba07d37b171470ff147938c7517bf34572a7407e +C = 586f2115b3ccd1a134444b0da16a149ac4a0ee3ca0a53b876084c81a3e19a1424dfddfd1e95ec5c4 +P = 88c700762afe25b22704889c420d95abb038e2634d6c512374587f7d9683b9 COUNT = 6 -K = d8be9da8675ab0402ad27f42385cdf3c51321da002160214 -C = e2c6c4f351c439222efb4b86f93c75819421a973200867ce -P = 7f7eeacb95a6831ecf16ef5a +K = 8f30f6ea6fbd9371350dbab98adf74085c1d03de165ceede +C = 2ddd3e6858445d85523ff668bbf056f12f5a4436094e1e65493d2c60369e33c2843fe32c269d4612 +P = 49ee1d821258deaabdf32c5d19f2866d1dd6c85d1a29c0a88987df8f73a532 COUNT = 7 -K = d6e232ad6cedd87c1dc004c5368baaf65667f8bb87f3f543 -C = 4a81157e4d0f7e096fca530e127ab06ba4af402f5193345d -FAIL +K = 3cbe1bfea7b9871e3c0a22401b7ba8dbe81c77f763ff7960 +C = dc93824017888d6008fb01b0050f140ef67a5837232f56b48e9bc60a99146a2826f27108b38b7665 +P = f05408a3ef316af58392784a02fafea9c70d26344f50d37a34677d0c1cc587 COUNT = 8 -K = 67c9e1de4ba79f9abda9dbbdf0141b4fe67f70fec12234ce -C = 437758e74763a3aded57eb192226a03a08030193901a38bd -P = 3b6250d6982eda3540f111a6 +K = a3a343d1df3be0b440389b6ba6979bc2a5af28496e8f9808 +C = c9fd8c354221ecc6488eb9323c3c9f1697fc6a1e7c309e5f3f1b643e5e1dc1fd9493d9d80b9e5186 +P = acd609fe0cbede43bf8faafdcd53b30249295c301ca61ef6f0ee1f454ef09d COUNT = 9 -K = 48c0750c7eed590a421a103a3e721df8f9e52371f48c254e -C = 6d5d78fd2dd28114f22f5b29df5b357bf188a9365e1a1989 -P = 2d0e6723e98d73cdb0058a5a +K = 11228881547ea59497763b04e916047c6fc52fcd62b49eab +C = f46f3692b86ff035098b1b8635ef4b93a22305bdf59fbc97cf43184a0475a4721aa46d0a21f8aa7d +FAIL COUNT = 10 -K = ea84dbd5043a6db12cfeb138783b55520198eed8ba5e5c3f -C = 7e47e30f2ca7b85dc76387d526670a6386d18e61f5272b6f -P = 747dc951a48119d6dd61f5df +K = 15c00418c17e57bdf42b6fb1b9d30dd6251a9d16e812a346 +C = 37ce7ef308ae2a45d3dcc1a25537be5c18d6377a8703663484b98074ec96767be4d248df06d20f1f +P = 5cae6d85206b459d2f2964f64d8de8f4c0d14f79f6e96b2fbf4ef8caa3482b COUNT = 11 -K = 0e9e8224d3e9bc7082471e06770f5256e79896d8a2ac3329 -C = 9f853285312e948a93f0c20cc1536100d5e9336cba53ce15 -P = 42d5c12a96e72c697dd0c584 +K = 94c956c63e3920362853ac9c18866addf09be0591ab41ddb +C = e534a861100aa7f73374d163746d0133f2b9f84dabfe26c0a1391ae4ad721f6edeccccefc65253b4 +P = bcfffd4e5f1e49af815a066e6d273705c734e4181c9fc5fbcc178193ce0f17 COUNT = 12 -K = 91f3984e5dcbefeecffef828425b1e9496a996eb795466d3 -C = 22f49bfad0f73dc196e1d3577c7a02b0968a6cd65a1b444c -FAIL +K = ac42b9f70c6dc0090140475fc80361822b2a6c7f9b264df8 +C = 7ae1abf5271bc180440917289d2b09ac7f09af6c80affe68b745ed8e9506de2e6ee5cbb3a0faa091 +P = 1dd4e58f3a52442f8ccfd6991299858533b6297b64d5164e0dc70102454355 COUNT = 13 -K = 714eb0f98be54f0323d5be316ff186863a1f4c541b039da6 -C = 64e47001c7db2a6ae9f56b0e8fb2bf4fbce28b36fab33262 -P = 206feab17eec48cb002692d2 +K = 29cb8198a36904c602b52e6b87672c546a2e167174941a94 +C = 95bb18722e1df44612609543796584a21012a8f9ea1997e94325159d0a4a967acc6c205a06c3ade8 +FAIL COUNT = 14 -K = 7d749ef0692930488e2b80c7980beb15fe9cbed947fc1084 -C = 533339a44467018bae24b4d369942d0fa006cdc5acab336c -P = 73cc3fc0a5ff690c04aafa35 +K = b83217136840ab5bed08b8e313e210d5d6a98d50e121c12d +C = 609e94226b98b83c1dd560a8cc71beb9509abb65be1fb3b43dfc97c30e1726bcb17a0565bac88fbd +P = 10e6f88f2bf154b47ffd6aa8b2226d87b756ed4630c844fbce7a2507d5db87 COUNT = 15 -K = 10072fe26db8ca81488ea62467d7e8a604712d9a91d59daf -C = 3eacd0223a47ef0567e10c3e090adb6c93509f76093792be -P = a53ba3964edeb3fa52d61c91 +K = fc9c6a682a7100a93cefb01f2776b7025646afc4ecf30e07 +C = a5e2f0bae3a61d669bb5ce3fd73ec13e41595999b6327e1d258b22f763d7c0044e201d430867b630 +P = 7dba9b51327818554427cc41fe68b9ac88bfd73a940ed0fea0315b86d0712d COUNT = 16 -K = 5e967063b1319965d320e48ffd439d348071060c339e9599 -C = 0242d7b8a8c6e374d69116dfa3aff4246f547a68ed0228da -P = 14adb863c0cdf6e429057e02 +K = 4b5c4bd5be3d44827e71ee8ac27f8fbdf40de4c5b293e743 +C = 2cea237a8796d5cce09048ae544439631b8bfcb6591a0a98d83eadcf3ac45d54da8d03e45c0500ac +P = b7fc0d76467218ad46601c7ddfd34ce38ba6ae6a63002476c2c1196710660b COUNT = 17 -K = 6fef192ea7f4f91a1e7602ad7d3f15c1fe3957bdac84dc9c -C = a2e3c372b95ed8a012ca46e6c7f843ca5f1b4d6dd0e5103d -FAIL +K = ca522332e27558d27ef07cc9a88af7d7defba4ff7d5302ad +C = abb07600ffbfc004bfbe3f5fd1c783d6d21ea1ce906e778899cad8b8ee9e8c5935e723f99733d078 +P = f5d758f30870810f743578db038a903fe1ce9851fdc92ba00ae2820f2b9ee6 COUNT = 18 -K = 641359c169088213064214e54d174e464b57a0c10a5288d6 -C = 177506498baa92040afcc352a5d1c3fa96c911db64343932 -P = a4903a4c46060fabf4a65f87 +K = 3e0232417a939cf5f736d61335c36f75cbfb5b77491b9d10 +C = e30e74eccfdd5c95da3fd8aa4b583306d269bec9a08925896cbf320110eeed75780963a243ec9338 +P = c696e08c4265b5a2552325b9efc61966799651a36365a3a2cf1ca7d7ff89a9 COUNT = 19 -K = 60ebc16e0615da5b7ad49b259503e6589bd9ea634a3a64e2 -C = fbb6d88454dd4538fda22728c9be474edd874cdebfe2c78e -P = e9162467460603a478254796 +K = 0929898dc1796da1084b5bde7243a884f58ad18ee9be05e8 +C = a521426201866739b07fa636b87039269776123e6b578ba220edf9d0966c0158329562039722d372 +FAIL COUNT = 20 -K = e20c44051ed2a3bc28c84589d70233476d0da31b07b7a584 -C = 909f264cf86e291510f153f42aa97d1159b53274c5281be1 -FAIL +K = 5180a0d1d79e3f07a021757f7b9b5c789c4a4eb6d207355b +C = aec19d558791f4d2e61e8d2af1e404c22a32cb372913ad8ef2fa00d67add332d129bb0ee2d37ef5e +P = b2dc2b8751d7959a52ce77f18a44c08b6f15b17dbe87a3755d9ea9464d37a2 COUNT = 21 -K = e893421ea6e4b8685d7b5dcefce79d86388ebee945695045 -C = cf9819e0ca086872c655fa53dca0b518dd84dfda78f0477e -P = 588dfebf67acc0a466fc63b5 +K = 57124c3204e4c4c78d5ea7ca9b1bcadb58a70cac6989a7ba +C = 01f99ac897585f1eaf6a1aea80cf420fd26d412261fe2947a9a74e6fba762782c36b3d9d57117137 +P = 626da0c3d39cd4b878e1dacc9c9ba860d3d5630cc03e85fe7517eb3c9a79a7 COUNT = 22 -K = f4ac1bc79b8ce55b720518575355fa5e48293b0510c4a766 -C = 28aa27445538dadd1aa33a1f297903ad72b7f0aadf08c174 -P = c1f76a88504665d0eff11435 +K = 35fec3fdde526a574d4ceefda659bf263174bf6cac9ca09f +C = b800d32bd3455924696ce3149200fb2dc7933850f3d75c3cd45279a1104ce3f48c272dcfc4d4a9d1 +P = 498cc750efb4dcfb597755fb51191444cf10b231ff62be4b471269a77c51ad COUNT = 23 -K = 0284562e42fa84f999cdbec091cf7b14cce4a278a1699b32 -C = 68c93813d33725f17b42a11772138fb8c63d7b81fb25f4f7 -P = bf9308931f83a888fd6e696a +K = 0c3d7fc1c92d445a757ad58919b99e5dab7f5b877db9c9ac +C = 6129d6e9eb24e60ee8722ba3530c85ae5de06cc4c630002aa9f9612e3aa957e8a2bc0ed97cab6554 +P = a5ee652578d88be6543cc40586c89498c6486a3f53f39c1f5f6e48369a9af9 COUNT = 24 -K = ebb5b25352bd505db36247ba7ad758b15e84e5448d11e717 -C = 0b01479c35eba54ec1016db5308840fb59a4d7da1ad5bcca -P = a9ced546599de08708765d81 +K = 91b99f988d4aabfff14eb3e11ce0802060efe1b244545921 +C = 1bfc437f7e7d3d5d09d09f80ad4171f7d445aa6f0e3fc363b5471e12e94f460e00a5e1e9b05d12a2 +FAIL COUNT = 25 -K = b5be50d2aca37af9bce35d47ce8db366641eb70b1eff06d2 -C = eea09a05c4bf60beb288b03192588f336320f5a9979182bd -P = 42551b857f6abdb7435d6208 +K = c8791d241541c590080ca0f4d600b121ce357b49420c19e6 +C = 688c1ca1ea2ab2add5fb1fee4cf196327ebb36f9dc61cc4f1493cac415cb75789ce6e37d60d53d9f +P = 102106b8af61e102ea7f78cad218ca7b55a87fc6184b6e244fbfe3814b8b1b COUNT = 26 -K = 84df96f4b43146a8626cd8be2cf958dedc36c536502ec466 -C = d464af9263b1ec00c461658896ff0f69fe634595f0e3af48 -P = 10d9ab3101e826dbffca80b3 +K = eff4617b167589cd35d91cafbdab862260eb1e24259c0f7e +C = 652f373a2af0b700bd5be20f7cae5d5be7a8869db85284435815e965d875c3f9deaa8d4e28c6a3bf +P = f92748dc1e521b671e95280606e8328754a9aa1e4a3c493958d59428b7a3c4 COUNT = 27 -K = 0e76d3f7cc1184234f4d2c2de73df14bd50a7fd9aae123da -C = a9d77bc27b3912566fff494c2b979b8362cd4fca08dccf5f -P = 8f46062fc1c3a5f7173f450a +K = 506bad5f4c98589de5b7ae069bf15205c546a1e04abf2a60 +C = b4fd2bcfb6d35c66cf3d20bed107df746d2ac4653d57eea2d2e4b52c7ed2ff3b2008a143a33f12fa +FAIL COUNT = 28 -K = c5c40c99e6b9b26bd98e8e484c0483b9e6d89558a5aa195d -C = 0c5886a9da1397dfd45477d1cd84d8dfdeb6b1315de387c6 -FAIL +K = a9f2bb5f8a9fa4f059cfabd45319343ba5eb1879125b7887 +C = 43e1486b2f5e5540ac450f727f8ca9ff17be6ac6037f45f92ae55802ea204216b4520d1c79d8661f +P = b0ac438d87bc1099807779cd13f15611492a2ad99ca1510546db6b8bfda71c COUNT = 29 -K = 24d7405b04fd8b4a0b69d08c7c80dd8a2ebdd08e19d35a88 -C = 7cfd04d2aa66fde3a9e6f81e89e8587a2b11145729fdb7f4 -P = 8f4b12b3f067d8e7b4037199 +K = b13eddf4ae357dc82de0e49e726f05492da299e75bfe6f16 +C = 53deeee383103b848b1f0849f72f3a01fac6528370033386ffec629bcd612eaf408bb76a43a98fd9 +P = ce48a23d15229b3f80a3c43936c5517ebac44b6b30cadb1435ffaf75ddfae9 COUNT = 30 -K = c5ee70f63c0732d8f27dbae3b9e0be81f758a77f18aee669 -C = 3964bf023d457f75901c04a1b7ac52ff58a43055e8a9c526 -P = e6beac78f04c46f1f68d192e +K = 5314b42113a13955dade5b4910eebbf7158cb503a2d97bbd +C = 3569ab50c974a9151ba4e194de17b4a7409e8950188e467fadfc081d1c67af2961707799617dfbe6 +FAIL COUNT = 31 -K = c36d7f6e8603d552f686d2cfcf3c7b99e3033169b9d4ea35 -C = baee638ae557347e30bb5080d5e092b0c0a766d3f24ee280 -FAIL +K = 6fb9c3b4aac26dcb41ea8bf074b07ace1ef9e1a412b27aca +C = 7290d6b5702d8bf3a84260f737a273a5b06998d5aac7de0d4e79dac97956d6fbb86e542ff34b89f4 +P = 98c4771bacde7f38f18a989d2fde85cf3193eecf352f63c10ef5917a46c54f COUNT = 32 -K = 168bc720acfaf174e83272e377cbb0af525406a76f809890 -C = 6e4648a1577848340d0f09f5c298dfd0b32ebf4e4a9d4a56 -P = b2350299ee50d406ea167357 +K = 4a36258f616e1a3b9fb5009ec3c57883eec4851eb45951dc +C = 4b6ecc8950c4a898287cdb75bbc481d089490c7beb8a8d267dce9ce08ff17b85c2d8c029cafcdb3e +P = 7b6d2db446648dc09109d695a7db92907b89e520666a354eff22b1ea1374b1 COUNT = 33 -K = d851f64c43df20e6a603e8eb09eed4bb480736ee3b283f02 -C = ac3354d4f97058e27ae4ff1cf559483bcbb5e0898ff0aca9 -P = 54470c2efd19d292fad1cf3b +K = 5e9a84334180098d0f5f076426d930b635a2ced9a73746cd +C = ca11155f820f457d6a32ace28b800441840b2956986fbb5958db39ad4da486a2b944e51f755d071d +P = c390ad790e6b3acef3e068737e09a3cd8ffbb7c8eade7b874c3ba84487cea3 COUNT = 34 -K = ca2dcfeffd3144dbe333436997f0339c0f57a4d870cba3ab -C = 38610c6c298f163e10a2a3accd70893e14bc379241255d6a -P = bc90dd6d89d18b85c1933771 +K = 9aadf33e0d993fbe90b43e5d25b2cf08b7beb388d9c5d005 +C = 3a832709960e6c59989e7c46d518e1e6e9431179ebade4642ec2eb0f63be7ef47bafe3ef43286468 +P = 71a4eeb123cab31b50600f67b6d82e20ad14dc6420ea397c9e222844f5d8cf COUNT = 35 -K = eecad59557af079aef0b825c9afb0b97adbafa4182ed9a0d -C = 7a65717864d3944345887a293e0af1ffad8842191cabb5a0 -P = 1dfd80895fe68fb75ac63e06 +K = b7cc126c845043a844e3dbc40032056217375c65bcb0f885 +C = eca071469acd250fbe2f09f8b680d4b91fb3589a510f82c8542d580d026f8fbf67fa00b8e9f21e95 +P = 0121d99163791f7d30073f27e169f4bc5e02d033fb542539e0f5203f81ec34 COUNT = 36 -K = 3c504fb8ce39674933158737d6972e21a5b82e03cba743c1 -C = c4875a608dc3f1bb79b72b01036b96042e8674f9a525eee7 -P = fc1e4c0bf91004d534aec20a +K = e8ffbfeb2b61c500c5b89c4c1d01255564b6ae14554d49b9 +C = 2c7ac876a198233621d48773a042c9d82978bfef8b817eecfcb1f1a55131953f48d80ef2cba7d376 +P = 46def35896be958032fc3654ee2db553c5a3fd843d9100dab1e755990a92b1 COUNT = 37 -K = 70b547cc433a7d553908ad0ff366b74511e3c952138ae785 -C = fe788fd5f0d313ef68cb3baf65154642a1f93287470104a9 -P = 2a09d945e3f99ba95a1c79ec +K = 3b6269e1e52ff4a1d2e0bb020e310bafd5484491e01a3a1a +C = 2bec779fd01229258de8c213b72e92cc8225b9f6391ae3e79309e2423299bddcaf9887d49835331a +FAIL COUNT = 38 -K = 04b1f7ebe16d3cc2b14af607d55bd880d0ca0e8bbf86f7a5 -C = 3096ae5a6ffa11f846dc44ec9949be2b59af529f6928386a -FAIL +K = 3e5d3a7974a0e2711aef6ca3f50015b53e6b6b5f7b4cd7fd +C = 47a3e2d65095ba9a36061ed53b6e62417ea80b9bf0accc2555695d0ea19e1fd2cbbbd4238b6a28da +P = 3a850f429f58bf53219a8aecd36971a3335b880825319149b4ec27c6de69f0 COUNT = 39 -K = 778a364bbbbc7e28662a75b69c077a8d4a532a7f54870515 -C = d8a91b3a4d88a4590398095eb885eff14be746436bbe582a -P = 2aba79273885073514a5941a +K = d191aebff30d5b4969009fb654a33831e904383af035417c +C = ea4165b9287c6c27dea6eac38e95974ff329e1105d5e42b178ca7a9ba2ef133ce4668abe3ed92ba5 +P = c665be469b36621360f3e09e630cd3121c13bd1db62034efd112ba3d533d04 COUNT = 40 -K = f24cee52085a62def1117ba79af4362301b4cd3cbcd075db -C = 0f971ad163f49ae90c57efb8ac3e31c54c75262ea67bdc9b -P = bdb9eb7c6e1222b6045cfba4 +K = 7604fb5574fe9b4526b76a5a4f820ce664fd87152a537013 +C = fa839f60201caa7f42b146ea925be3e3024a2d7e4941efbdeead05b9a430e0996ac9074abfcfe221 +FAIL COUNT = 41 -K = a0621fe8a1f33ecaf9a95e869fafc3b5c0110cfb72aa2cd0 -C = 5458abe413ed0174bd18d413d3e325e4028382fd9ad5536f -P = 2ba3375a2a84129b1803d6bb +K = 16a98f56082313bc3904fc4d232cdee1e5e250b5e1f92546 +C = 2bd6742f8a60428d72da8b180e8b49acc85cef4ab51fac2f89e694c17e193ff453a458b3f26e5c0d +P = 17742b9d28880d619a31ed12b87131753154064236ccb62291e935cac1ffa0 COUNT = 42 -K = 0455cd5f5eb3ef701eb3f8b3fae55cda0d3fb19871cd5270 -C = 855c581cf8aa32a67b659cf0af5b0a6daf9651a8c578bdbe -P = 4ebb9885f620ebbcfc6023e9 +K = 9acaddabdc1a702e6ab8fb3b0ab6480ba93970a154723b02 +C = 18222e4097ee87e0e68eb0bb6332838ec97b1559af87ccfffa18fddae36a45b06afd927e792803ce +P = 70b1322092eba5cf98677bafcc4571bdd6f3f1919d8af809b73506b74697d5 COUNT = 43 -K = 5947150bf4c0df547a9bcdd79550aa293008a9249c003dcd -C = 147b0a345cf2f15c1c0ede9febeec399f270f5b0bdab34d2 -FAIL +K = d7159c0187041a3192c10e88cf3ec0a8af7ee0f410372e60 +C = 193894571a98b5cd9dd396410f2e9e28318b78f7d0713b8763e19d70264b2a8d7314f78ea583f27c +P = da56e4facf1177c6cf57f9ff8bd90c9ba24657e168664147eb95ad8a038aaf COUNT = 44 -K = 71d891f85381dff9b54c56300365386f1b1104e18d957b23 -C = 39c149aed21261a6a3ececd914285babf60aa3471d958303 -P = 0f4e4e977820e2cabafffd0d +K = 32a04fed65c5913a60a2ae9bd5d752ff7d83cf050455e613 +C = 780ec023e9cd777b4d356ce8c3e7649f9f8a3be7d401eb5716a1965ebcb9f85e21904f77767e49ac +P = 0fe3a1c728d73628813f6b70a1f1f751aa3aa7d1c40f8e13742da714a74e1f COUNT = 45 -K = ba8e811fe6fc7326be5f5c93ec778249b5e58df7cb7c7969 -C = 5309002261ac51ef6e17f906fe287ec9ceca10bd688cf767 -P = d5d5f9c73cb012c8796b5538 +K = ab7b26cd1fd0b56476bc025991e5c3f57f374e9819cae36e +C = 803d3d1638d3a2e32ab531b03b24c4d9c5fb244bddb7be18724a054e1d962f3a0636f12befce5388 +P = 5c1510408c31d86d399809fed9ead33207deba93673c6a97da5b110f8426bc COUNT = 46 -K = 21d427e732e595156b850ed556c1c60226865de3f4df3644 -C = 94c0bfb4e5c5c649c3caa76b95d2b319e78c19b7c69be844 -P = 76e940c201c430df8a8c5187 +K = 8eb72ceadbca9fff76749a9fd7a53945f17e3fd9eb70681b +C = 4cb6e06bd6e755fc591a3d4d85670a0daa9b7351c8818e1229c7135fdfcbe999c8761132b61b4d48 +FAIL COUNT = 47 -K = 1388147df4fff5d3fa807809d1714032bf2ff2d6c6661808 -C = c798d4c0e5eab4ef705e056535adebd92a51d5214b41cda9 -FAIL +K = 384d8eb51e037821b9134ad206360daada8c87abb5cc22c3 +C = d3f3eaad5e65e30187b7510e347957fec2297831bb4033d536dac7828932d3dc9300192eba0c286e +P = 766c5e248b747d92f07a9046d6d548b38fc9d91c96d0a67c77c6d3dcfa786f COUNT = 48 -K = 47e63b024d26e36b0ace96bf02a938c1089c7617dadb3659 -C = 59d5819f62b8585e4da5941d99e3526281a2c0bc732920fe -P = 5d7c503a0ef56712989c91dd +K = 5584f3393e7f6c2816439885f16a7054b0dffc80e821eb79 +C = 08b29c778299e7b781a54a15b3fb500718abb6b488f878cd4215d3a54cf226e468a9490b0ed886fa +P = b1b8e949a2a58c772296a9b33f27c7c9eca1c684e896c01fed3cdc81d8a19b COUNT = 49 -K = b5a95ee5a3aff9e837af78eb535dccc5e3a322a65fe9a02f -C = ccd6986b2eedca721f84671f900fc8af096d4ce66f1e1b0d -P = 7d32d34003b538e2fa481511 +K = 7fe66540c9b3a30bf9e246abeb11f04f10f31d845a6af6e9 +C = c123f87d8a62b1ea2bda476b77d716923d4da8725e2627a7c2fc3d80e9002e9a6b21f62e4b5af5ac +P = ea378c5c0f0fe6faf9365f9fed808374e0f098a7681c39334906196d8323cf COUNT = 50 -K = 9915980b771190632adaa0b2770c99d4c4bb4c3f71fd26ea -C = de3827655022a5f15378c968ef83bf45fe7752d4f616806d +K = ddceafb019c9dc155abde98bb6f340143b6de9ebe4022dc7 +C = fb5d0b8a6788c3e228b2ccbe76e49b677382406566f56b9e8fe25a64bd3943755f0e88150511bc82 FAIL COUNT = 51 -K = d706ecff90fe5595f8a579e14fbff6c2cd9d8d726cc38427 -C = 6d0a0e8bad1d7edcaa6c9bcffebde68489b60f6eee48469a -P = f4f786954d1bb3412a99a965 +K = 3c9ad142e6d4decfe914aefe76c9b8917bbf577c83d0a3c7 +C = ef61665dc495e81f5bd0de88d95d8c7664009f75d0421a8b68deb04fef49ad77dfe4135e41c36324 +P = 77d066ebba67f4199548683d5791d964b2966f16629093979c6626b16e5085 COUNT = 52 -K = 42425ce3ae764496ec83c141fc59da12fc8333468e7e8096 -C = 19f82ef307bc8305c24f5e641ec32e83506cf13fd13d504e -P = 223795abfcd24bc178db8d8e +K = 9c216c410ae74a9e44f74b148570f328fd680880ad2f675d +C = f9da1493a9216341d7a9a5cf7b43b97b89533a9a0c8daff6223e5bd30762249afd61ef8656b01611 +P = d7469c4fdba74ea1a4658e77cfa2494016e87ac9b7281270472f566a2dce75 COUNT = 53 -K = 7ebb47b525641d3534280f8f20cf3aadd7f8992180791270 -C = ab00ac8ebbde6e6ff8ee39b08c6226024359c15ced1e44a5 -P = 943bdb4aad8a2ee7f833dd1a +K = fc1697cb7b6ad1b25626c3a3d9312113680453fbfa6d93ee +C = 36c87bf7dd600258b00fecea8e0f5406808e8dbf9f57764428c2121fd6cae5d9571e17b8e42893f8 +P = 4c192855f11be58817d0a2047cea106a6332f69fe2e3782ee58f5041a0fb07 COUNT = 54 -K = 9988edcedd1b5f8ba1fdd4d2f43d978e4df6fdddf8f1df92 -C = fb3c8dc6cc5120a48f1e488ac009530f7f0f0e64db759ae1 -P = 41a0d04205d87eb2656817da +K = 9bf38ca0393a1209fdba242820995d201736287cbfa8f8fc +C = 4736ffb54c463d1f6b03c935ccaca5b7a7d68092c4825af0f35fb54289f8add916271fb0511a7b40 +P = fdddca03541dca02df3c8244078e2f8a005cabe4888336c0008c33bcb86e1c COUNT = 55 -K = ca54681194adb79b6d6f2aba0daebf3531cf32e9a0639163 -C = 473ea0c55f4fd30fa367e4ac2d694d5ace736e8efed3e5be -P = 5a50e837c3d4987cf707a449 +K = 2010e659225bfcee9b0dd5e83c419b1351986c245b3e5599 +C = 4239ed88ffeebd3394a674074b23765ec904c5e95d57cc74de7ad7b2b8fcc67fa8873998209eac60 +P = efd1f8ceacccd1144196ced5406176949062231f85608ae1864ef95ecd7df6 COUNT = 56 -K = 26c5922bb7a47c1337335f92ee2e62170d68c8f1ae9d417f -C = 071d1b427a19399a74afd0a965341c39ed614c600f3f238b -P = 7558c7ca0214b65cb608f84a +K = 9fff91e5608ff1a1afdfd96a71290a7b3d7ff8e4e3a6b4b6 +C = b0ad1c23f0d812155f0aaf114eb6be49e24cfcc21187316ad8b040d0b232243a9c1bf79dd30c4fec +P = 42d09b065011e48ee9f3ee5252218f3cab55f09c48c5a11e0a910a55207360 COUNT = 57 -K = 810a3c16fbf728368b3f9607ca716770190eed4d92ffeec5 -C = 80b5950ac808ab58acafbfe5b36725bc7a6ef19de1d3d9fc -P = 67b21effe47bbc51b0fbae20 +K = f4fc158066de45006043387dbe49feb4153da7a5566bb7f5 +C = e886d50bf1699738c5f3bdd9436d1db78335e69d21b2236e5c77cd48a0e80ead623e9857fd997c1f +FAIL COUNT = 58 -K = 46b256db0611a9b9fc813b447090657eba0bee79673c64dc -C = 2834db4d8d3964b75dc590fdd45bb518a6f44a057f5205d9 -P = 53e643b7f09ca3dfb213af59 +K = 689f87e1e53c3e2bf54264e7df116531aaf29fc136d5a822 +C = df2035367af1d99df6d6f057afc64e5f83b938ae38839d5d92249b548378e99b7ed262107018e5cf +P = c9c760ccb94b9b6e5603966a3825b74e137218502736304392aac935046a39 COUNT = 59 -K = 14784c58965ac47a1e8f50f5505e0def0e03190bb03a60a6 -C = de573e9503b5375940a4ffcb1253fb90e55088a93636e3ea -FAIL +K = 33614666a09de8d126b034869439d6e53e76e486bed85670 +C = 71a94691aab8c633a358730adcf779ba63fd6de3301ea536e3d6cef6e37329889a6b46af85d98f68 +P = a6950b6d0b1084fa814e2797beea924658e6063af0fb6578078247c41d4200 COUNT = 60 -K = 53f9397e26ed444c276e8afbf94940165a7ec14c2d3a02c5 -C = cb6adb1e3c56661f975ec6c3b890796718d79f1899a4d434 +K = 668a371c535a3f8966fb0fac41e9f396e492c10874511529 +C = dfdbcdd521095f2b9b2597d01a3854e6ff56316390f06b1bfd21660c9ae661c752ae3dce9e7d294c FAIL COUNT = 61 -K = fade0f08b531ee62ad0310dc1a86303b549c22f4a115e39e -C = aad9f71fcea82ccfeccf802e2bb33cd2f25ab362d8f2e990 -P = 4d3574bfefe3eced8b896719 +K = a6397cb28337be091a382d3f58c80e3213e750a48a98e0af +C = d3bcf6259a04254666e61def98870d6e6f3b90729df8cbd5b97dfa994b97571d6c961809920298d6 +P = 233da0af9c1a9cfef0d018dbf71e29654996be94c41c19ed541b666b926800 COUNT = 62 -K = c688fa531be0cc06a0fb5be81939b8152c55614e4bb1ebb3 -C = 608343e673a3482c2679e8bcfd30ac12105980ac9e0e2ebe -P = 4c0335fd02c8ac380cc493df +K = c3a023853c3f85d72ac3adc88d1e375828bd1f6f6918cf4f +C = 77a7cda09b8e99608ca759a75ab3632543859952cb9506020b34d0efa11973de7ffc37d0ac939519 +P = 0bd2532b675eb4701021f0acbc645192d246d2d1dcd984246c71ba71c60642 COUNT = 63 -K = 9558dd9a7b10d4c366bb6bba91bf986fffc2f6da7e004e11 -C = eb1718da5c1a6bf9cf96e15dd5680903a9265535f8e4b6a1 -P = 9a117f71cbd0ed8604a3989c +K = 009bae2c6290e413a7349bbad8003b8ebcbf57b7b7d951cd +C = 520367a806f08e4bd33be25d9330bcc7fd54d69218460051000211a043534e793da8c02ac0d0f0c0 +P = 38cf0466ea37e55bf292f8ee8f71fc24e9938a7a2d40570be4c39942aec4e2 COUNT = 64 -K = 19feffa81768a0e73eefbcd7999bf88998cabbf19dd5af2f -C = 64c505af5f36b702597a511efe68f56174300ad863e56fd3 -P = ccee6b8d31622eaa9633db05 +K = cae083a5d1c9eb6c1e67fd02467bc4b79a8a3e864db699c3 +C = c667a850a9b093d8457c9931a5f73e350b3bb2204caae204457654d2c62ccf6337f87b13d5a15af6 +P = 3ae61564f8c21baf6f2e28ccba1df471dc76b6756fa50bc52f1bd20f85bbc3 COUNT = 65 -K = d6e956c54daffaabea5bcdd4644e173764fe98573da83139 -C = 692fd0b3cce1dc544a49798cb117f4851324e7be05be238f +K = 29e182c565c6c7d09b41776e169983251caad268f6f4142e +C = 70a5a86f8b22cd627962913e1e4d263e41b4934d62f7632f88a81b03bf3d5719865a4f82e2924b11 FAIL COUNT = 66 -K = eedf5234b6f151d2b8d518b7210c0e1e140343f9bc5a7d09 -C = f49d771bbbe86c7b88b6ac232daf96d5135e72ca05672322 -P = 058f881586a0782ff740b2cf +K = 2c5262096a79542642bf15c4921aa24770fc3391b357f607 +C = b522ae76d0d63be834a2d63c439844d7926b0a0508aa1be380e03348adfbddc2746a5e761d307133 +P = 66a5eb0a4079517768221a8c7c610950e754cd9c796c596ba6fe06835eacb6 COUNT = 67 -K = 5ba7f35f6c2d5e09e59335291ded1c7d1e1b77e4a2dcc851 -C = 27c2f81fa7ca4b7c88c51ce7705de23128d8fa14171dea5d -P = 15400798b9cd13c9ae75fb38 +K = 418a17bcfe1212e461cad0397cf362f4c026d856d48d6f8a +C = 9c1dc4ba9e2a9ec2498577262af3ff86c4783de56b04a3b3bb7b3f3b0a199297e600328d18a88c26 +P = fd09cffd25f2ed319aad077c75e247cf5df58417de8ec83df08a80ee8878b9 COUNT = 68 -K = e419a1778fcab73ad53e813efb1161c3b7fae7edd22e29f5 -C = 14481ebf8c7fa06ab108c86808aea3a57b4a17a222562511 -P = afb414f312a993aec9b53aa9 +K = 2f74bb44adeeb1545b8c3eb6524427a859b06bef827a08d1 +C = fe673b687ddc962af8496965b5b0f172bd1b14e15b4235a7feb1068bd90f67a3b3dad22000dd6163 +P = 8816c089e379222f8b150fc79191bf209d9cd636931b8a00a37511dbff9c06 COUNT = 69 -K = c6de63f9048549cf96e21abdde0bd7bf79dcce7ff2f5d188 -C = d4d06874b0a44854814c03a1f9b03222ff539aeabd840f7b -P = f3530694706832d1be5cda16 +K = cb56ab25a69b5fdf17f5ad010acb6f99e392c4563d19f768 +C = 9277d1068892aca1d85baf1d020cfeadeac52554ff262ed809045300c637369b80ee4a8d3d775311 +P = 64b75ce0eb0db466212f30ff83a9ad39468b4a4a748f1dfeb7688132cd0721 COUNT = 70 -K = 4a0c8ca61357f744840b5160e57d5beeae9711608c25edbf -C = f22773dbcea8e4f379f0442746bf617d8f70986e3951ab1c -P = fe92991f9f02d3f174ad4a64 +K = 36da8739790c91279d5955b35b211bcf31262a69287dc442 +C = 1b0a5d2e5c6aaa7d2368f35d00abe1a988dd053c8cf9e36223fabbf8e671bef58d5e5210be736bbd +P = 3d250f6db0223fe9874f5c5185e55aaede5d738202fb21735bd1479349a76a COUNT = 71 -K = 7a99631e1960bf9d0ef2ecb5ade9c40f645c4fe8f1decce4 -C = 6288442419ab070b4e7941198698dedb637ecb0bec498319 -P = 62cbb147c287ccaebb69436e +K = 6134da6d4e5cc95aac7df60e1e47cc74b8647acd8fbf25d1 +C = cf3b6c7ef4be6ad0c752b748f194595f9cccc4d70e9725cab0790e37c26e6df2fcc40c0e59e36182 +FAIL COUNT = 72 -K = fe1332a3aeb8927f14574d84dc11b36e76a49a6e00daa20c -C = 1539cbe182bf9d7a83bfa372858cee201fef9e9d405acfdf -P = 9d62859ec534d64abefda3cc +K = 4c1ee454106e1c753f3d44e2ec19516ec3630b08df5232ad +C = 861a406d7b99fdb15705f1a4fd9fc0379376843979afb9c734c28f29b633e29d2dc583bfb209d336 +P = d77a24108f539eca6180526d73c061ffca4043e9fe3426dd754ed9419cfc0a COUNT = 73 -K = f9898c60758c2e4a9832b710f471ea654cfad94f779d7df6 -C = 7dd18a1061279130b7a1ce4b4bec07339b7478c333e7382d -FAIL +K = 932c5dbf11e1c0a305893de577c289550bbde84bae44c1db +C = 9298c0d66159d4fdc6e97e701b941948d84a6cb9dc7ebef08189250a9756b184f1af8ab081dc514a +P = d4404c748dce2fdc82da5cf1a888ac4cd4eb930ebead7b6db342ffd7371d04 COUNT = 74 -K = a807854dd354674bee0905866a4d41e41860262e241f7a08 -C = 98424082847ad50b70663dceef8d9b38e126e5779b0efded -P = d1a57485cb0dfab56e2f219c +K = 7a26a85c749767d5583d4bf8f1ce81e01e9c5b9435f0bf26 +C = 65ff5dd6262559f5f82d534f583e23ef01b94aae7132b0d930fc79abd8654ede9814c4514421e780 +P = fda5ceb4319826b037ea7c3a99ba6b8d53fb3c3eb167bf8693e07b6291085d COUNT = 75 -K = 01052df8973c704e8b5a22f405d166d5c13db911f45c7601 -C = 99af77d034d863612456f2b37aaaaa76c85ee7ad20e3df12 -P = a0a9b0b9bfbaee92887ba15b +K = 8a48b436ec027631285a744262acc5fbc1c198caa097f49d +C = a3be08aab0fbe890e5ada3d8eeda871e734759f933c1df88aebe9807ab5d73f3bec49090292a2925 +P = 4250b02862eec2a35919329b0fceb4f0da4277725ae9264a271a2da990c14c COUNT = 76 -K = 03b3d8519683d35b4f3121211ad527eedeebd9e44d53ecc4 -C = 73ebe6f6317a0e6838013be734ff069e24bf8965352b970e -P = 725e81f9913c19bf00e306b7 +K = 19d4ea5111eb1a3f2cd9c3857c4183a7170f95ba955f3c17 +C = 38d1f9cff193db93c42f412a54069c90a20a50e0376c41c7b563f8b205934a1ca97f6181308cbcb8 +P = 63309fd1484d9ad4a9155dfc989f2d58b463b9e7fb06671f5156183bd4f69f COUNT = 77 -K = 5df6772aa8f04e8dc599476edece7bee77f5489740cb4160 -C = 3a650ca943cc4f4f607547d2237fed528d46b97e97dd6618 -P = d6c0e69c48b63a9e16f8d3cb +K = 8f16c22a664ea3c356d330f2d7481ef78978fd19cd86b4f6 +C = 11f944df58440b7bdbf99110f926c73585f93c4160246337363def4394cdc10422e9a81b0a9ac3e7 +FAIL COUNT = 78 -K = 32db9160798e47393a024afa1fdf9cce06ab1e3231d47bb3 -C = c3bc178809fa13e4a65b89ecf03ac0b6bf331d1f6e160f53 -FAIL +K = 678812367e935a3ea43feb32421ee92c3a6200643d823152 +C = b67590a7c6e734923bc78aa856c017fbdf1ecbdf5375e802c383362de73c2da18e4f0833014c4abf +P = 3279a80b5acb41c6a53cbfa62ae4f2ba4e58230e6f5ffedaf8d7eb0c6bb712 COUNT = 79 -K = fc8c8f0f3d1a6f3a4fdcef671e4f1f4c2a69a188f0ab4c5f -C = 2740580d67a3d650c48e76878ce21fd5b28e5fac15b36566 -P = 540ecb9b0948cf992b483bba +K = 335842704111c9022e3b59b0bcafff4e9e93552e914800b5 +C = 5af0106735635a03fe1acbfbd3cc9e3765af6076c7f2bab9d67cf20163e7f5c4e42f1f285ac17355 +P = 5af1f6c85f5223a0e9bbda62eedb52ed77481333779914ee44d6192466ebda COUNT = 80 -K = 02a86c2aa94f21699d97a221a3fbe5ec00a1f5b2e29df500 -C = 3ae9cc5a430536bddf25856b217c4daf92f530c01b9c613d -P = 912360b6f12bf72bb9686689 +K = 6c9d53f4462b20cef41afe8c6663fdeefc382e6d234b1ec4 +C = dc9cdfacd45c27275046c35369ce7ffa7e0d1d3d83c737d7d0ee1cbd5097697674cf7d902aba75be +P = eee9a77ba4f76766660067c1356f2c932f45d88965ec71663f69adb98e7a66 COUNT = 81 -K = fb62024c83cd9fb98874d250037357c5a3d3050233dc2ca2 -C = 0a02934bbc83cf0510bffb46e1444a5646fc3e14f8be2b69 -P = f5b8085d56d7e110aa0f9ebc +K = 4c3b4ed6dc69556bc8805651ab4f3acfd29f1660604e3057 +C = 714bac0a1075a5ff068621f07a369c874d93b328a056c9f7975534b515f8a62127ecf059b1b397db +P = f4d3e3eca9b4a91d7cab522fda090d62d90542af66d734689850a60d11d23c COUNT = 82 -K = fc55907d6708e115cd5e726fad824b7de60137ed0380b8b9 -C = 154f1a022d37325f737618287c5d497610bef0e4968d2c98 -FAIL +K = c04776de1abfe6edfbb22f6f1ffb9e57041eba9f3e63cca6 +C = f9f2571505c549da2b6ad67d320c718f58706b44959d68733bf0a77c8bdfc39e74ec6092908a9760 +P = b48a98bef9fd518f4928c7a91654c68d575f951d930ab47d1a626dabe49d48 COUNT = 83 -K = 11e9784ad7c2794ac63e2de84d38577b8df936b0594bcff9 -C = 8171936e667de3bad204658953c77cd134b0fdb16dc3ad8e -P = 89d71118c2a6cc4820ce87f4 +K = 4406ee8dd415fbfacd9f20effa672b6e18fada76632a4476 +C = 9e13c051ea978f8912a58e44d7c0896831c909108bf7c34445e29d2383eeedb1dfc72807c388bd84 +FAIL COUNT = 84 -K = 06c018df77ea6eb0bfbc9888d3bbc32a4daa2028a1e53b65 -C = 81819e8c0541e2be60481dd02c9f4c34e32a7ac4ca9d4844 -P = 06e01cf68c44b9549b88635f +K = b402174d1539d8881baa3421b876b985c8d6fd91c8bb998f +C = 564f1110f5fb7a51789bde155a36207f506cf1e8aefd648428034fb24a966ce5a72c1127fb321e0c +P = efa282429f0cdca60af90ab8efe4336c022f41fe67cde63682d55fb231f0d6 COUNT = 85 -K = 20355a504de4512d4a970fa63ffcff8829b86970ac16949c -C = 68e30e3b32f3a608ac1eb34c1f890ab6adac11d1991d926f -P = 2fcbe81f86fb9eb3649726b2 +K = e5bd0586ea3c469b832ca6e9106c8ddcc586e1201ba75b45 +C = 7302676d62fca13e5ae31fc026094f4d6edbb063129e7ba207a84c891845a9d18b145e6b57b01d9d +P = e66a2bc1b683ba86960a98b84aeeeffd8c25f01d6ae7e76389cb6b0f2341d1 COUNT = 86 -K = ea2faa83440370cb5052720ba3f83f47f524160b7ba33630 -C = 80bc1fb94f0891bb0cd7dfe3368ec1c50bba6785d7d0d291 -P = cc9201c6b5b41fb2fae5b654 +K = 4e442b01ef67010a4b2dacd0dbc6b871163d7eb419e8cad2 +C = e56e04b8fad6c31c33027656fe9cd7a840cc68cb8c070a3635d555fd481df83c17482564e2522360 +P = 1095087f900cb0565f9c45f798eb2f2e562af60d7cd2760447050cb0bcc279 COUNT = 87 -K = 144e410704e6d27d95d05da3b411fae5291c1d810b3e06fc -C = f2070db36a04a3ee14a200f5d786b2dddc6ba7e5b46bd921 -P = 50a7018f2366e5b493a094dd +K = a4574a488593a44ce36d7fca1ca22b92f98e0b3d78ace1e7 +C = bcb88982ff6c37e3edb607ff09adc0859b7822e3ef2d6fbc759b93fe532d37b53123adcd655121f6 +P = ab043f0169c6cbbeeaa8ed4f82d6e644d9b98591d7fe5a3b5cabb01009707b COUNT = 88 -K = 57a97dd72c2aa74d42baf6f07222abeb694da4827fe98aef -C = 52f86ed0181fb03ae295e207b693efc66ab2222be3bbeca6 +K = d3051ce683b99b57cea266a951702f4bca4fa631408f8c61 +C = 3d0ad5bac6624597d2253533e7961e5832be28fa9e5adfd11427174243ecc0fb432d1fda03886468 FAIL COUNT = 89 -K = d5563705676b9966a2c6637621a1d11a525cadb66a41bb0b -C = 5d2a2b20710f83523ee5cae3570669cdee490bb48abc19b9 -P = db9f83b282a0f4bf5dcf6101 +K = a5595564e2712088b64248670c81c18a4d3841592f74d7cd +C = 6149f8a3f7bbf82be622edaa1cfc09f37075441af77f735a3bfbd1e2c138d2d38a38792588310b75 +P = 8a1d1b018c2a092c647ac3026af4a3fc22b3657eece46c818e487344be4bf3 COUNT = 90 -K = 89dfb2f8d7f68ddb6c149f3b7e759f3a258e36ce2446c479 -C = 10aefa27879d15d797d6d1f3ae992018f796d6bee85df553 -P = 5818b9aa55838758fd7a8b13 +K = 5c90a7a29c3923c47f1d7485b62b9bc522a7dc230971daec +C = 9d762b3ec8eefb5c1fed31eaabb384e6c61a4ff9fc70efac728875cac8a484455cea974127b0e634 +P = 3434af54c28d1a207482c2e936c5a92c963e82331a1c985946813b6f46e4e7 COUNT = 91 -K = 07facf6dff95b9d34d1d010e6f5f448632d6933e58a1ea8a -C = f31a6080e7b0888c195a0657a661f57723904796a2cb3cf5 -P = 22108639f19c3724c82a9bf8 +K = 3a4a38e96aa584eafa636cc744063ccbb019c3b7499b2ad4 +C = efaa1e4e57c2ef71874f0f144a92bc9c2995202062a9725ca15bf18dde557bc3ae88a6cbfc9a56a5 +P = 734904d21325d6637e34b253dbfc9dd5e45cf0b9fa5c75b93d6fd5bd995cde COUNT = 92 -K = 53d0acbf8687159287941d7ae48e4b79c001f166a1db50d4 -C = 1d77344c608ddabb258ec281248bdad6b8a80f1a0fdaae46 -P = 3fe055ac024935dbfbdac582 +K = 1be4aa984c16a319ed9be2e9fe158168986c2bf9b5ad9cc0 +C = dc2026d171bc140d6408843c81e121cbfbd32af12a33ea452f7e254b951a50d13ce8c02397b244fd +P = 12da0159af35bb3c6550d062d22eb8f149771e107d5f8664d1c761083cd94e COUNT = 93 -K = f04b6e0d3cd4790498c27e2e5804cf16e294d34c23e97028 -C = 80221a05f1528d5caa496c42e9654988964d87aa3485fbed -FAIL +K = 331c94df330c7cf092d89fe209b5e0b78b31600439c883a4 +C = 1d6cc2c3272cfdbd6933ab46130df37ccbe6f78ee673bbee1bbf8e2cb2f7c4c2b0ffb1adcfada087 +P = 713ede470b68f520221cbcfca87ca4fce9763ebbda3b0b37310d7c4c0fe979 COUNT = 94 -K = fbf71c49ea175ca21c11c102b89af9e0e7afdcc129f0123d -C = 08c32550909e148e36f8be818692e49c4cbeb27ca5138f18 -P = 1a7fa2dbd4b782986469f023 +K = 8a9e27e5de4101d0b27153a69b564a2d5b9028a29d3eaf98 +C = 710647b556acd01c0b18be5d6af083595c1539c19b3d8ecc4d80a5c58e2f0afffe724ec77ac5c134 +FAIL COUNT = 95 -K = f91f47b342745dd7ce5ecfbd8e0ae71cdd7aa10ef7054d02 -C = 4286b3e7babb1cf81e24195f98a63d44731a02e2db2fd79f -P = 7dbd55faf4d83e79641fb923 +K = 154138854f54c7f7b6a060a65231b379e962e17606cd7bfd +C = 91428625c9f2cbb5c0ff4b4545e8e689e5a90677258b44539f10fb0f5b6e17dfb0c7ca2d70da831c +P = 8f4d7a4a48c8a8a83e36e5c8dd6cbd4a5751159fafacf9eb186182e7714c66 COUNT = 96 -K = 2136161fe6c5db281fa0e339fc74f81b7937ba58441b1bb0 -C = 2f4d4cd793f22f74d1ae127629771c7a921fbd11f7c9c3fa -P = 858aae5028e9e06c2a0c33ef +K = 15b7341a6defcc903cfaff0f40b41a3bf55b335b0f418ab7 +C = 4874287de791cf4a33c2280f5eb023cb43cf38b19c4f572419ebe10bee7c6be1e6022a966b487709 +P = 0840083fe3ec96100a86f6eb98064f829c8560902920d125130259c3850d4e COUNT = 97 -K = 4aeca33be83b85d842d98769fa4944322b4030179f393cb3 -C = f67027431044d647ac6536bc2013a7515cf2ae2c52b3c355 -FAIL +K = 1518b86dac527d365aae6bb798f6fe5eb19db4f59a2a65a6 +C = ac8c21ae115ba3aede5fa00bfb8e7058816f2af65adae2b6a76e342f229a7a09d5def068cb0c6aa9 +P = a12be97ac4ce446619a92a2cc35612b1835c5717bc9d0a851ed8d8b629511a COUNT = 98 -K = 616744dec97cbc19b9be6859b9e43b501509596fbba93f55 -C = aa770d56c1141710e5d6d96695d658aea4fd2e4f7722be27 -P = 7957e6e73b3add4edaf1d80a +K = 997823b628df24a6a4b6da55293907ac6bfb491dc3cade9b +C = a2032639bd64b846b1c9d588bbacd8da98a2f3a9659cc1d9cc532a230670eb69443ccd6369ae3366 +P = 080362221a5cdafc7138ee0c021b061b94f00a143c8c68e633fe47c3586171 COUNT = 99 -K = 36f944670eded1e88533c18446b8f02e9da5bb1b6f8b2df5 -C = d9748b01e9bf111d27af2b01d948353fe3f6c80e5260d2b0 -P = 82a5b7ca01ad09e74bd50b91 +K = dfa6e52c917376659e08bf18abf66350bf4d8f8e44126483 +C = 426f65f5f23260d014fdd6d7c5d96618f65d647ee9b07a07759e0b1f88ada1a699713a4e8b367445 +FAIL -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = c6d9270d4a62ee61176bffb776a178bfc6df98dacab078a2 -C = c831ca27e590319191df1fca813aa957b577395e3705527382cf0506844cacd232a7271243e00b362bd2bf2bef80e74115a5d39a4860fa3295a3f489476e4d0a4801876b877f80111014f01b62dbced45f3835761d590eec252a0d22386ffdded7f5012b34b1b2ecc1b2109c9fa9f240 -P = 027a7901bbda99e3ec1bc1deb80ae57aba4c9ed25141e0208d25f7fb7d1fd82ef9bd100db2dc5c74da28d739b839716cf3206f8558b32d099f1b2a8afd8df87d2107cb456df5df5c8bea0b52f9567795fba84dfbee5105dadac2b312e69c7211981f5056a7 +K = 1b38d4b366f844e71a8db6be2b77a05a9e81720d2d3f31ee +C = 62ddc158ecb048250bde439dc7aad34dbe7667d330a349026266c24cee9742953b623d1e247e501641b45b60cfbab665e68040ce06ebce478d9d77f5f344943a1edb14f0d9f165ecfe407031707961fedcd016559228bff5761cd6542944a5d86f9acf4e0a4114682c2312b8d4e8285d3efe1a7c1526642c73c332a9e484377a1c86714e3cb687781928c8a5fe28b4aa74e79f53ecd00793e00041b39b172e5fedef3d4164dcc6b2d2e47994e73f2ab048a4adb8cd94fcd7767314ae40f8cdbef2b26d25f74277a2f88f1de56342a0ec97fde4df2d052e6ebc62622f65725d845f670a647808666c7325725a3428e26fefe725c2badb8a8b8f04e30456bd1fd39fd0f7c782b7a2bc9d8c53922a54c5f103551271af6d7243133b96cd1c108811e4beb9a56472c1f9823a1e88832c5505e07cb93b9041f4b8d69cd27403680a18bb3848c269babbc52aaf568ee8245f4f72e177257103dd4bdffeee9b48e0660d6c2f4dfdce52462d0ed5cc5114dc0aa5a35601c9a644a1fdd3c57c3153e65a108eb94eea3bc9979a67a2f569eb7398a4bd24547c15faa361bb2950a379a1cad1737f56e7c210652aaea7581f39f07ee09a101fde8c34c3cfc404f2b8f682735fc4c721eceb4bd2295d8a74ee3cb858329509eba9049e7e791e04d8452b50c6e6225b94a8cc10ec1d262588fd2f05eee08113414e770c83caa84d310559286c393799117c177089a2 +P = b1c88d3e5648218ee085abcfcaf7f362f33e4d6de363cb84182af9f18a31475f0e14ae8eff76ca67455726392a110ca262b90d040abf49beb036db096be053d493787a67e983b63945277044acf648172c75b38d7f81dcd58e3bbcecb963dc95863877784ac04eba83481152c30b1ca9e9b78fe537deee6c95933e1b5fb414cfaf7ca1dbbae8b114f0538f4cbf433ef214b776faec9ce1d29f680f4c88ff7b9ba0e964898dd253f5f82ec9f25663ece9dbff5e284f63b0e0fd07fb13b41aa8359f1ba1666bcb26e65d28b1f899952beb28b8f902f048e31efb6ab4817cafc6d84c7f4676b50936715667a67df7ca965b3ab2a5fc472375b1446c810242eb1cb78b9ac496ed4715e0f89a4e1ae0e2724edd59c954f54196ab55ac1947528fa14e716b7707aeb023bd0a2242da7ac97f3feb7795d9be05cd5b1cc33095599ab4c4d8d583c9e2a4d4ed12b836722370569737fae2d6fa60c8a5b8a80fd71129fe29395746eb746528a8845c5a9d50e7bc4372e7f3f9c6333feec791529a6ae1bc0f620feb604f56969e4ea3445810c72dd0772856feb58f09796f461f7ab1b454c303c810eec7526aeb397520b6114f57a4d906e974e8d4a910afafbb0f030b18887b951052d18578022cb7e33408578cdca34f32012f62d3dd35cb74e9d0fecac52231c5cf5a34d470d3b5413644c4e2af1f1613093a3b0550f8df26d033a35b9b COUNT = 1 -K = 538487976d0e722f53d1755012d6539432fce2a404fc94e7 -C = b58cb821ff837398909dd2578fed006031ce1eb2577e823f26a6502bea6b3e8a1bc653d6d4a8ca3fd43bdb9ab327e1552fdd07b24d6ea9a5b5684a0eb6987c7824cff4b85406e175922a78f12c66974ea4319bbd3e83f46edb3bfa8f8ba86e58ef22be9d2915e630abf7172d69e43ce5 -P = e102f6be728768dca7d1e1cc34163f5fc0b1b01cf251ce5296f2b4a10d5d66b4aa8a1701f60d3476b27f7c74ac2a773f0c490ec94d7c8e1f56104b5ddabd04520abf464a2076fecbce0c1876c047b2f211ab5d7661aada72ad09786aabac6d943dfa564ea5 +K = 043caee476e2a712beb5fa712da332cb1aadb499495b1af4 +C = c5f990ca854ae725ac2237b93cb79deaa0d7e9f9c22e3b60aa7d37ce290b1d0cb5fc532a0dc9fe529748d8317a581617bd9072505819691dd18755945f40560ee1be25914bc0b01699af05deeaef739406927b0788033bd22bb09cd0a4bd180182259ebcff4721aeaab6cfe4097ffec856c281aef1a3c5f58f3364ca8c334f09acb79f9443a6593bc85a90cbd90ad87040e58134c3b8056f040a1334f590052bf950cb8dc3b522b26655e52452307de8d5ee61f9d03a862e8312616a6bbf5e6d109c7298a32eebf7c9a773d28d820aa46e214efd35a26eff88d4ee1b841a6582c901a94305d508678dcb0810dbc44ef8dd0f515dc856df9ab0b7670da3a951bba0ad1f7f2dcfd0ac7943e74f2d8536e5ceb52204fea15c50653ddec2dd81652b82ec10750c6dbbcb316ee504f0f3c1d90b570babc0e7f63c9db96a2553936a552d5f57fe854dcd1f6c1bfbd89da618bdf3aa22c0783de59a2562cd3e87cc91c354333db351b9759b64d26d4bff6e10bac7441eaa8d2d8b244e685e307d1b80bb611cf8c114a6b2db422935afc8667327fbb02631606533d6aafde5fd17d0aad74ec180711a92f28a12aa30c72e1d6fb6edc92fa0efee0819564edda8a0c9e62e347771e73d953652b0c161f65def50c9622aaa1801a79dd5d06d88ec6357ad64e2bfca964a0e98a78f9e1ebdf3a3dfeb2db0daafddfa5d3c8dd84af70b667f4cd9d6659f40b13d4d +P = 7aed64d427c50f95a2531c2107a337fca2ad66bf6f8d0e065ba0cf2f9fecfcd6ddff3a88ba7b3a79fb66e2ae9fa32ce187c3736bfd4ff7c6f240bb56043809467fdb23f8fcd3b79fd2c64ee72af911f6bda13901db0ac4cfff166718c710ff04ca5d1bf98d5a221c0f61fa4f36d5380f9db8bfc4c0d64e45f037aa8fe1c0eacfed0ba98e91d2064a8a9e4debc06ae86fd67df25b21679137d125c697c779a3014273d89e854d83a323d8a0cf6c5dc7ac78129fc60c3a13e67a0629dccb311c73325bcb12550a47c1f7db49b71c92e88628612488854acf4357b7426bdc693adde8a3c68b8612ca7428cea551b5106187702008e8691d30aa6b9d165fae5692f479c7c5b536fc85e2d025aa2b11d43e37c4b10767d10f58f7ed0ba04727e056ae07448d269ba4a784990cdb603a7728fafd81fc488d12bea664964b54d81a804699fc497e198d0d7b75401f31770bd4481088eb1f59ca07e83df6adb5dfe778ddaed0ebf374b0683fdade70a58416709aa40bbf9d960cab2fd5e7de846006c5add9ceb027b21c8e065ca78755070ae3154d2fd9ee44b4c3dbfb0e4b8c64f56f571d5fa8202c32bd76ac7c65fd028c8b3f95d3ea0a49b85fdf7a1435c6dff132ec2458984b67f1dd65115a65b655f4ed7527c36021c3528d12b74546bd26e85498d0eba2538a31bd02e5bb9624ffca916aba03b1ac332d6b624d6806dd9e49675c COUNT = 2 -K = e5b01963dd8aca612e13e349d92111a2b6fdd60a436fc79b -C = 84d7c25f01ab62d2b2d0de43adccb42eb78ef6da8444fd9acc0262360d985fade7bc246371e15f97c4ec0e31a54f400f51df567c11259bf2066ffb690bf04cbc71583b14370e0855ce59cd5a1aec68335aff01b159097dc1088b06f95c097b9181b43d92683624ff94632bccd3daab4c -P = c0e4ca5d2551bcbef084c83a390afca03c57ffeef9ab84cdf42753bdc6e7318f5894ef89b47b70999047fb334b39df4eab01afd464df15c1b1ddc4514ec85d12586cef446c0683f704773d6e17f7ae080588a1a770cfa6ac7c455cc70c2aaeb520f0984a32 +K = 4b0faa630930b0ff8e624aeb4ddfa018a858cfa653132675 +C = 1640db081e87ef7797a9f17509f5bc67d40beaef096131748f413cac3d2500462b61140b31bc3965958af51351903549e4a71db589a6bc67d72ec33b8605a25a539a2043704389e3e0781152dffa9b64d6ec186ed144847434345e6dccefbe26626eebc4c22e3957b2145c46fa11d7819d4195cb43a9db8d2de507c023607548b56a07628ce4c706939fde1bdef8364b2b8fb7db30fc5c8e99f29876130d9f71a8486d99f2c7fc09f646918d4c60e53c7b9f9a8a1e9a023d70448f6b79c3f35cc6b9ace0535147f7f27be66d918895b9106cc83eda1aacdc2bfb7daa75b2867ae63109ecbf9423526511c64c4261e395d9b5a68dd2503ada57cf1b8a18336b8d63d248ec4dedb6e30662336546c86ef83b53504bc3bedd85a027b6b9f0323bd9380d9ba696b77072d98f96b77f9b3ad9e219715122b2dd033529eaf7ecced8be6d1e6467b8e4a61105be9b7a7ce208b6dd6bd34481f80b3bf534fb87904d45986931a088480a8040047c681dc4e8ec1c625a5449d9ab28709d04989c4b1a4ef0f1e379d37fe6f0641b9e705207e9a0652463cd5da71cd50321116d4ff1cbae08063df336482eadc0d117bf119e01f2577afe182e7fa477ec53b754e347a2c742960b9bd355f969e6ae1df2210e75bb44c598b683dd4c8692f4cd1b92125ac9ed10ec4cef6289d3f815cb894e74dff0bb72d51c43cb420d74a31c681c10ad7f9258d77f1f186c926a +FAIL COUNT = 3 -K = 4595595445474aa872385e190876c76c7d5de3549568841f -C = 452654cf0d37022e6f4bf4afe5d2de20caf4e98e15addc87951af72c905571167ed7151ad9cae7d72411714b4f1ce6bdcd881ad42340ece4071c147fb5ab60ab15d8806400cd31b098fdc436f548afe3b3c4c8c7c277f143fa471df1533020b7985238fa1cbc334ecf163e7f38b84948 -P = 0eaf0ac05e2cb19169aab24704ebc1db467f37fbe5490ee22678acd1cee78ddb70eab3f9c7fdb93e66242930cb674be2ff295ec9e72a1ffabcd23ef570d6565ea786405e80c59af1a9db4a142ffa92354c3e6134809bca14a7f6bd0a55360487650a417098 +K = 15ee03a21f6fabaf93a1d16071370d47700c6a7403ed6968 +C = 9cbfefaccbfa49bcca172e0c1d600bd066e79ce6eaec3b955f7b2d735f5b4e110ec9d1f0aa232dd7b98dce269fd00ee1800bdd8ec19fa61919b248f17cce0ad5f9e41b3c243d5a2ea07dafe76750fe72b3fa87a4bdc742de4e1fedb0e566cea2bc39391d593a09bf66e7476b86ee37053f229af4ef7ecce8f28120d3b365256d9e8f3d7936a1dad59af88fbac23eb3ff3c55dfd0cf9b496e8a52e6c50bb1655a529ea4229194e903cadc3b994c26bee7f6c780159c977cfa2a8531f89ab343f5ee7ac07fbf5099a17fb2d582fd715e9d3231a34a26e42bd997b553624256abf1cfd64c2f2af8e6641bc671cef6c57ee246402d9bbb3f9b311df726b260eaa42eed5b16e5b13ab2f38a460745d5ce3844e73056198677b05c8c03b60daa9d43b80a6aad49d76513d9532e8d4bcca0375bc35138e2662a67d3b7c4c3a9133c8f9c72b0420300bdf7df042aa9770416755e819e18dae958a024b0f23afad71cd49ecbb4d157e385ffae46436d383bbbb658bda7faa8eae0fbd2d0fb87a7306991c04c6594ae7550207ca296917a26c0a074427ff048b00c62455ba56ca1c76db8198dde3bf9a01cfeb70d3dd03bcd998cb0afc4bf895ad5366db3dbf0653db40960ba5b954a817c94548c1d0f0ff7dd2249345c0493f95935badc79f841590a71ed9d51dd6b1f20ee17d600f38af7b0b9983f854cb766afb6ba4a2a7da68e84637ef94c5f7f5d2cd127 +P = a035917c48ac785a2e2f7ef5afc349ef7d3fd85bf517f8bb2044fac2aa6aa1531e536d6122bb96d427d3c456203b27193280a7cf89e4c078f877e80620184dc565c24f17f8677ef7e36871a1aa938fff841d6fda7b063993dd235e5bbe4a49f11bcdc97a05a82090fa0945d6115c1ff55acddbb9822b5f0de1b56376495a559b6c92741cde5fcff7b227db450feeaf9cf76e767223e98901e52a4c3727210e99f898003ecb9853ca293376890729414b7828c307cc6e6af8253ec7829b617644ad8aade3169e00b6cd7653bbf88c5848fc13e884637c5b7230fdc82042a53cfefc18639713acc28d3be797c82dda42ec17ce82d53b9a4dc2693190f5fb3b068ec6f14d60289cab2ffa913fa02861af38407b30557ef4fd46511e48888c4a743251f696dcc7b4bc9f9e739893032a45d3cc48c56bcd193ee0027579be6992487fcc0de5a9c187e0d199d6e9454baa8ee8ce396ee81612c372e9f42c50598b8e7dc1990d13284d3b280ffc9312b9c45d8eb5787b3e0617c24eeab7e80da1de75e59152003cc6661b682537c0ebcb8eb3b123cc2fb30539d4fdb81155d891e913720c05b03f1cf0a65b3ad2378dd9c5c0306667917b1d6993c52524a9db70c2027c9537546d1c1193b7789ad059a0af1fc905fb598f4e8343d4bc4d565721a5d9f5ab2c40d6696913d96cdfc42e4ae7f3ea5687183f827bb4d7e4fc48e386947125 COUNT = 4 -K = e56c5dd262e0e28ee0f730e2f4a62acd507bc996642cd480 -C = 8b9f69d6e7e908b1a8b07302aa67ce4821c7219b31e14f200dbf14cbd7da4eb6c8fa2c8682f4fab9268209353a6f996db74ee2068c8c4c5c656bb8fbe5270008df3142d97998d9576f9bbe62539119d2e565929b57fd736400b018674b794c71771d8e03af5f728ea21d133ea4f17ca3 -FAIL +K = 559506bbdb022a36bf1685c09e24a67c385b9ae6abf5a339 +C = 6002ad7b6a5d07a34ede08dd222455cdfb6fa7730b56b402c21e1106bcd6baf3a603864e815a4b19f6f1348b11132443a9c44666be9605062c498a1cdc4579d43dbab727d01b05495eb6e59c7cfd14cec7c3ade3b3a326ce1e3cafe5a49ca7487f2b3acefad4c36612126d86dc268068dba97fe03ebefd4770d49a5cd929dd0a9b8e57c3358e790ec21220e7a826ff99894589615ba633c70a7d672fcecb8a32b50bde809a7de6bd57af20ed2998a65e172a1238944a01eec0392c957c04305b4528e4d2f42ee875fb4ddae417324cd003d8823bcb15923d0b2e85fabfe1d77db16fb19bb4f9d5f1dc8eb72a6465ab8ed1bc9b94bcd54f8beefb84ab70fd064879cf268c1337f8857c7af5ae3171b0615f51ab2847491da425fd611a06556193e4a48cd0fb4e47e56fbfd1aa0e47ec34c7f52ae39c4c497a4e5db61da4a103f8613deacd5d26b3cb8cb6693c516b4f3c7076ba44f74655bd696f08f83b3c8ce05f22ede5ca09583772c66bea5a2cc4c24a4bfe68300f049e78f57eefc50644b43c26e7e747d1d641b20ae573adb80f56cc9b4082e81dbdfebf2f0baac86b8ce32a0d24864b13f49be22595035598b34f96417366a4be80aa8c469381660053369e34cd10a1256196f548c5aa97f8c1dd4a4e7c3059f260e69604fd6f8e4565d8b7834b5c9360f0f441c91b95f84499da18625e2a19bc85fb1ee1b5853847d86d42f02ec05f97d8a9 +P = d26811af78647317bf9a3132bc37c7fdd4057f0d75979b4dc545fe7efe768d92af77185f32619605756950bba5c20452633af7251e8d7998e06a3c5e00dab32e473ff4c61f23ac5eb612018ceb3a7d0afbfcbcd89f6f695f5beebdf71f05eae2ddb545e198b291e059d55b3847c8b329b140a7db8e3a27cd5dd0b9d848113ffdbb7ad81dcefbee138dcdce06858273fece2cf6089afa2c2a5ffa0cd49df3962c55b82dac67ff1929fa4bdff6b3133a9b9ed17ef541b3573ea622c5f9c57161d0711f0b5101ac53754e43381288f8fd9a0b2729e04c95e0b132248157872fe29a497cac49e1640e6442672bb9844cf08d7a914a867cab98561bfb8ee493a2e001143acb6f83d1569a47899437fec0694064fbae5b73f57501951c3a741e9e737a8e923228750ed4e7b2181ed669a212527a30a2f7d2ad786567abc40a72be42f9979e71f7692d933b0e1a03fac4962c4ce6b10cc66caee1e3af2dfd43e93476948964dd1c7675778102c2f8414b7e0965d2f02f9ee9498694c5ddeddaafd83467274e6a14f52c286c1578c3f50f61775854536abca742fe75e098ad367ac8266c1b6e60e754ffeb5f48b83eecbea7b925466609dd06c3e2d6b859c5e7932190a7c83cd836214d1cf7fff4248a0b21c0dae59ed08c459cb7eac66c0303bfdaedd2c8144adb6c78557968dfb872b1d5f94aba456ec68c08a16767cf6eaeef70793e COUNT = 5 -K = 9536a6aad137b8881c08a9c19130ea195555dc975c8f228a -C = 98f8721b06d92dc9d66872aea04d479a2f7b06a03407ba616899f92b90b6f0ff3cb1c217a62f772c4f75b308ef044ed2acbc3c49f31e9cd854c2e06a5fa274b676975f6e81b97973a0bf1ff6e05e4c3f895845f1352c293b725a57faef1e6a4fd3a233256522a47122272fc094a3ba3e -P = 418cef63fb504486e2d68ebb15fceba7951da2eb3e8e22e067b43b6718d6e06089c939e34b421148937cd23c08b431368e64bbc091ac815bc09684e8359024d30b44decefe57fc539e1bf9af0efa446bdb72f71ff050d23f7fa1c5274f1eff9345a97f1af8 +K = a2e847fe36d49c09754815807d7ce782ea221049afa03753 +C = 54b230e59e8c2ba31fecbd260f624f13f7e215609cb028389a76b3dad676354aba6744e8bec1a01e70bf1c9da47e643bf6b84ae9041bc37c8f2a293d9224a5c268b4280db7adcb3d48bd28a8e4a42d9e2488c51cee6c4a3118adcd61ea330ca930393e87f3557962089e09158d497cb69716592566835296ca59a4b6ea3a0556d4a11ea3230c7acf5947b1a37cc9d0fde31a450b0526a56330f2dd5bccfb9ba84f95b461743f5c8bf37214ef2e200b8cde57eebd3663955893cfdbc919f07c2e7a4b2900a1f0d958b6279929d67229d75b933aecd12124b1dd83ebf8007cb993f43cf121e883aedbd133f78a1c36a33bc233a2531e7c2d44508f1734611fa690d61fd6cc509f4003c54caf91d204c0fc2c2d9c361126cc5358c75a667950cbf3365b10316b00a890f43d9194508e37110c9e304c6989bf063ed712996ad79f98b73fd0ed79058d6e2ebb6b6e608a4745561110e207caf20a5c38fb31ce2fb9ff16846daf20ff79a6ad260f723e7598904983360a924265934851f8178d3dd741046fd288d39064e3aaea19b1f637a6e5999ee0b557a66468e083e6aa6cff36c65fb286f938a53c253143071308944d288b4a2b0c3dd29aab23d3cfaefed4ac5154af81e2c41df2df4abeaf441be85980e1d82efba60180854d848923b88e8b7a82a1e5667661ac7001fb4af65fac6f5857b881ceb3a0cf97664d05bf7f1a90660acb98563df725d2 +P = 971a57894407d58c5f6618e55fb0683e001d83540ee66962837e8d946366f1a07550aa587fa6c04e6f01c063e4036c3cd4c7170b36f72b71e5f208b8d428384fa9e572a78822c00df617cca5f2fc5a3747fe683b4df1bf201bf251de53954c2b7a2a9d2f7d8a9c964d3e2c1a46e6e7ce937a4544bdf3bce3d5dd5bc3b6b790dbb577e350f5e81e840d9391d7f7de8ccf5f8cf2c686b3929cf5e25e2a546eec03a7c7d90e63d63701f612a0fa6759f78d925d5c0d3a0154b5a66ec6bd000f470da126a0a13ac712f2c884fdab7684c350e1c0f8e95abda574f658874244ad4973e0db31081e3879d85a91721e546adc04d4b77bb63fe7dd69f0241e69a213d211c4bf630c7e0d866ef7ec336c914a060201e477e6004b9b0b615c50b5f542a53e7737f2d42b99818a1a9c5a9e3ec914efdfd9e54e796d8214d89334bf721196e12b0f007e4a2e4014a1e086d4f9dd8be06833bbafc4f7a317406abcd0f6889f699ba2139a8c545b7845aac200a50ec27a140f12b013ec66a07458764dde2cfec2f219a9cfd2457a776f15a26b1290d4cccc496a8303d016a35e99f82c62afcb7ea177bca66218dab6ed3e04addd1707a4b0f1d5320c5e3751550146eb60550f83533bea54f29ae0432d1a2f418f7798cf2aa0f9ce46500384845c7bfe2de4a5ea6243f640733a63c6c38a6be5076fa6503337a9f019e0d19bc2cc1bdd4c2b56c9 COUNT = 6 -K = 51c94ec4908ab12f76e2866f2e01d4f94e0d9aace1eeffa7 -C = 42f047ad275779b99fd519d29b1b0fdbed524bc6726c7cd3a3a8a02932d68103539a95aca94ff373bd1d92a023c1f8309217438f60aa857c4b346a21390b48b6aee5c73513e66d546dddd343c7e1c47a8e49016e2458162497f6416d52eb2cbb1cbe4c35d218d9d2c892a7284613bbfa -P = a54f3ee33c6a649fbb98bffe9ea4df07440dc23e12c1c8ad2737befd80776960d5a1250cb869cce593b6acfc59d29afabd19303702e87bc7efe28a05ffa886f27f5903d3e0e886cb219080528a88da6f0724b6d283cea32310c57fd5fc41fef32faba514c2 +K = 36870ef9d538e1993b609c8ac1984da16b6c5733b3c0e9fe +C = 5337af30e4a655e78377ec095cddf05ca0d827dc3b4a78fa90807a5f30b33ab4fcc24ffe3e8a04096f22d1320fc29ddfa6356d4d38dd5cf118c3193d9934479c546ba36871e8abd78b021271e53c4078955c856b18dd5e4b8cd463f79c4fde40b77e88de60c45991cd5b057aaeb88faca74923463d389cf4a058b13c9521965b14615875779f4859fdd9838bb36899e414a9d7c49a02dcf6e6fe0b20d10e7ebdb05c0ca4d6e18250d0068001e72920c497f27f5fc31497267a4e562ee1729e683626101bde620c509105ac7d4c70343bf9aa9a423a64459eb3a5ceff0f76f355ef2b1b90a2adda1ef46b100be82ca37cb54d1450e62a71281a21577e6ac3cb10a1af8c2d9c96478a24abfe87815b8e0c9c37685d54c578f486b10282d788cb30b0b0000126aef4fdccebcf037ba81596f02e798b7a9d25ca5337bb32de0b208a5b0bcd4ddd3062e31aa924ff3e5deccf1916323b34026f5ade2415ccd23c1e2a57fa821d11fcc4f4745b6634fed9d9982d17b42526b6a6507e420ee2e5f7b0d7aa7cf4749cbe01d9de2b876731846d170a8647a40325f474ea0943809285e71c546236c3713e21787c081e984a96cc98d63533fb64511d42fcf6ec28d9c9166576d4b41db500bba2531033757d15dd487c00be61c722f480e2a2168c9cce1c301f949cd2535aad25831920a7fcbc38e0953c87bccb9d380b901edac7c151b2d0b337baf8d10617d9 +FAIL COUNT = 7 -K = 89f4800c0b0e695d426c3b9bda8d4ea5da52d09d5cba12c6 -C = 711554c27d6375d69ea1764f4e68596a499a65f1e029f7e3086e393af17e35365d46bacdae5e11a7f34cec6ab7231f200663790adcc0baa17dd36b03bdf484f187936b363044a435729eca857268dc358d63c91d12d52cd7d530c6cb160535e26e3ebe59e5dcc386ac392a99332f4246 -P = 519e252e02f900f351cb610d7e66f9cdbba805e0b9111c6219bf519c7271531ee23d12af7c3a3c93a5db6f71467c98e46d5cf775e9c2bdbb382898cdbaf86a4ba64cc825fc89681580a53f3bb2af90932d8693b00a00b43d1a5fb35ece0710a74612153113 +K = 467c7d06d2593d1779c69a01a989bd4230d699f1b36b82dd +C = d05ae415247a9badf47e8900708d0c0b5cff8e1d505e6a9656dce2a2dcfd2cb06355462ea5a9ea3244245bc1b52f33f13ef0399e9f8d9e81df059071ab2c8648be607e7c8e22180fa17e7dc8178f2d9a771842a218fca498445cff17a0cb054edfddd1c4661be6adaf2684ee294539f824f1985ffd03a9d7c9a252e37d8e7b0c94b168fcf8d451d7b89ec50d296d242d9c98f644f09fef158b81079be5aaca2967626aafd5d3325fbaf5dda50b446b0863669695cc70621cb67e2be72d7a7d9bfe2e36d606392fd97b8287c703592515d36d1f99d3bb7903180f3e7f48c5c2a190995e6a74022103217b5f2401d48b064aafd3d068665196e4c9a6fbfef37de219eee435a3dfb7dce75c7d84ca404a5bb568c72db2c39bc7dbe341beb3b5a197f133d442eff757390a015b8eae06f30de2fddb8ff141a88b0cc98c10c0c1f47753adeab688efdc985860b8bbf107bebb4d68773c2f51c82bf1f444d5b279cc42a69f024ca41c36ccb9fe52a0f288ca25188e9cbf27e08ffae6498edabba651b3a42265abc6ef8bfc1fd3ac085c79133adf4d73ce4e0deed33c852fb945d115ad896c94e4aea4b5e37b99a0dc3cf55c0b5c593edebe680d5d5c147d5b3eda460e62a83c271ab0c051c8ed406f5f2b37335308b1c5de62a656197a42da0e3398701ab76de85d0aae2309bcaddf4ece4d0963ba1629eb43319f376ff86246170a9901513ff02d727ae6 +P = 712e883f3f0865ae789a22c525053f13c21433f17289a2fa02c7ed5ee7d0a4fc29e2b752ac7cfdca4bc9714ecf472a9f6c1ef6825adca235515b1cec8d8b1011d448c19a13a43e8b475a5d2db43b509cc905dc000ffc82927366822b2748ae70994ff6fa7af76806277ab38baed9bb9a8d5d4cbc2dc89f06940e038a62fc586597dbdbaaaa09e549538eb550f111652e43eedaab9d20c7c19a7d9cef0da56adc848b5eccf1b66acf45f684a1ed7f6e49ba1a4f6fafb5cb0ab2914c102e6251d53340579bd5f69d32c12384a3df55b1e1f5f68850e902a784ca2ad88901501be3a6880f62f5288b582aab695237a314393dff6e936c43e08583fb4709173612470ff691dbf8e2f91e0a12fd188c66997fc4e9d4c6135b1f9dc3177785d68dd4f4527ae7bbb8dfaa773c362554afd7ccc9957fe561724cbe28cb606c43e8971668863fb12aebfc782f165c5a3e2be283f277456e517fc380023a5fdeaedcb9d54a18c663c468f7f4af0caecd5811a546640450030e4d6923cc5cc70a5af0a402008db13631f72822c0c560f20d8a4b9cca61f189ad8ecc3ffab1ce35c1626eb93a6b499f84a40abd85dea68b507ae87ef570984e6947a58c2cc3ba36e6800e7acc969bcf741c060dc990b9abfe06e7ba38c9966f88114030ca5460a1be42218afadda0045a8b66ebcdf4af752ef5572030e5c3cb62879f3f97e9b8465006c13241 COUNT = 8 -K = b03993dbc558b68dad7a5bfde6807cbf50a7df14aedc4664 -C = 04969dcd84783210b66bf47f8806c3c9b15505b3768dff21d37646bad131a70df255e620303af43027b2067c09b2fc5d379e72dd00e3609088b4b395617bee91533df79e3ecf72f8a8055abbafb47dc759589a5747cc5578d26e5eb6b8ac0496368ccb66450e5c17a9d5d1fe47974915 -FAIL +K = 65b52c7e3275967cf546564fb38360b1675c3c59d3e25afa +C = 45c3fea1d7111b5951e388a8976dafcd3708418430dc179b17ced66f88ee7735d30c616c1b6f573432693e22d05f43d67a96988947ab365820222f36fa44481a95ecb81e6ca8c094e7fbd7e043b161eba50fabcb20ad9e6614d846fdb3b4d556a20f92a0dc23c4cc14145b0e881b4aaff6a7a48d3435aba4fd8c1e2a00f365ef50172df5bec561d4b836bfd8c4c4b2af776b6103f5339db50c552555f4b972e3c6003d5dad7f22d07fccb7f3598c6c054d52bd5ddb50e53ede8819da40b218477755cd1a930e1b2c9bf47d2886d47a936a7373253314fd515e5fb88917ef2e6f0cbb5b987c692b1ed8a0866644a9e27ab530aed8595aa4fb79fe891a4885fd1457ad014884d8c9663762be63ca279ea7d31dd3e413c40d93b9bb08cf90bcb569b9b665f9907d30689874055f0babace684d952174939bca5d1764e992e3702ee789cc63afe467273eb5d7b2f43ec455deeaf1de0d4ea898743c73b5e8fb79d33633066f3dbcc2f60f287548a51fae635b3dec54939cd488bce5a45026947a160b06eed4aa8672b009a69570ab02ab03172b69391c8c241120d83f91d43aa3362ccbca4dee99c0e4117aebe6b685249c911e9ad454064697d1e0437e5ecc538aa1c01fbc628ff2e9d6ebe2241342f6731b0289ec091a386a8de9c62cdc49788d670a69b87949ce2fd24bede1bd41b404ba6edcaeda64d56e5f569c20c7a7276d70322b546fa3e628a +P = 8b5b154a90118c5d3368ab844f8215e6f22cb46f9f55a6a37d9cd47fa2bfbf3829ade4f3c108350cb8dca787c3e5b49790db6132ed0c1afbf08191f21c3a39d211a9fd975ea5ed4958a6d40bee25d63f926e2d454e1794a2615d6f2c488005bf3462c3e6e793b9659528f6fd9d5b9800f4689a64a93e6ce81903f05b6998f3aa82b14ad7f2399b33d36de7b335975932315e364cd132cb6c94bf5c9ac8dff5a59118e502ff87210bf21747d23f706e9f312201670d3e00eee02baa2bade941d718ebfaa4f49c88e05aad42d0fba6fe7f6b8009d3746d5f881bea2621c61beeeabc5a9a56e1e90eb1eb5107a17c65b1544e61fccf9fb63894f93a8f570d2013ff1c1c99b5dd831793b348fad4230c5fae0d5c77f943f87bb3dc6ecf43e29ffe755c41c31b0a93971fb189ca03846698c179dc7458a91ad2883cce7fd59848610fd6927bfe324c82d95811b54f6af3c0bc486320617be50d99f8d68f50aaded411babf9ebc18480fcd6a21816d623a43c2e6fd2e04cf1020ddf8e721bd91e90b4f90da53f7ec0e87faf6bee8e5110d79993789072ce3bb511e0e77433fd98f89bc3c3b70c97c68c2942a09dbc3b87dac70145d86b2b8d4a73f73dd86389d2370d1b216ebb627803a979f104355c294559e8d9d54f84a74b527984441282be2967d61cb8fbc792b183948a04fae2b0f273a687a8bd4ae2421f00988e32d2441b98c COUNT = 9 -K = 40e373a31c2662a3b6a4b2f2072f1425948f55eb22dff70e -C = 39697b9c440a8b66188501f67b7224455d20931b93eb685e8f162add7334ffeb9dfe29cc8fb6746d21539e89bb3a693dd42f5ad215f8ef3be773f1c0eb76e9e6ac631e96abcc645fd1bdde704e5e9360defd1857e819285594b0399cbe9de890daee4520780f33c67350f6d611d4df91 -P = e88b4ee443bcfcdfa3a8754769a9fdcd3a9a92fc62d17e102b5fe2db263fc653e4b8a5f1f206ef98c655d31b63a37fc6d124389ed090ed63995de6c970fa227beeeab1f0dfd090181de144cfd65b5e27f3e31d019b2ade7dbf50a68545522341ba8b8023b2 +K = ce034f27e817ec18e0069baf25a8bb8d31d0f16f8cbc1bfa +C = 6dcd72a9f0836ae426bd908a47e1047834d7b2f26fbe35d2ba0da4bbfbce736fe0364d12f6b6ca49d75ea78939becff19ced3f2da86242601b2cb895432a9d5a480272f0691dfe2b2e627c0a26c3e1e5fc7c30a689136582f30b2120d874a6536d3d76de2e0e0682516072e975a5e490734e6aca6a0bcd63ac6efb6e54d3c14d2bd366499502e556531808f66b5908c620b6c289058e060fbde71df90435da185ef4bd42fede5b1f0c521345848dbdb2b0d06f6919a2a089933aa349254ee3be39050fba8d0c1cb23933ea577039b84cba6cf6cb761af261ad55dc1c403c579fc26880d8214549f38f66ad899f3ad6fa7e4f78cdb8c1c027a4e5ad8d0569996ea1df457314ebdf2016a8321068bcba1b2ebb28a26847885dcb06c0a508ed8262819c2e63c19179a814d4f83a835884e9e48573651e7e7cde27b84e46e007a6092b370a296e04a2f500105926501d85de1959000399acc9a909a1877a82d2b3513ce7911bf608cf993fe032b91ba75e3c87623fd97e1a9ce1816daa9f0b530a98c0ad23ddef82962e8b7508c4a03f62bc68b8ee09ce15f54539a23ae8dcc3d3295afeed75f3bfc88fedf640704d6412bfec343bca62b93d8cdce0b08e0481eeb9dfe2bdb719a17af8260885a8afa5f893a65b64d1fd849288f7582c835c76961ad9b7bfe7b2737b012db6d3b9cd132598ed0129892b7d3fa6040205230bfadb796d0ceac506401fd8 +P = f85d4f02c25fd03f8ca461a45df7f6baf0407521f5af3f9e6ffa8eb46797c16b91b777660dbd6dc63a4739df083fd204d4adf6e9912f9741b14d229bb15b49c25cfc6abf7eb20e0e44d7da189cf62d20ac16650f7ed7852b8cfd7ed3a7f6aa5315658c17327fd29c156d988ab7f349056c3ce838b93c391c4b5dfe51ffd5cc44efd941cc049580cace720f78808a4ea8929b5fe90f0e09903fa2fbbc06bb466b2bf69bbc3f495d8d1dea3781133ff1ca73af41a0a58715acccf77bac51105ee0934cddfc046fdaf38987ede7b2adb1aa1fbea692ea647ad67bc294ae2505edc8a502dbc7fc3d583e45a8b8ac69ce9ed2316575b5d07a837d1ed8b097c6540b50dc70126b38140ba35bc85d76b9419a95bd6553a9651f20642fbc9b72d1c3b76eaa320cfade048fabefe74f3a3eb316d6e61d6de3f50de7b38228c8e65559bddec8f0b787f448d2a68920e1201c4b8d0a609483c3fa0ff57d52eac866ff593325fc1ae255ed65a6ad0eb69fc679c8aa20038e63e830643c8027240394f5e03b276290a1cb861d206ddc83284bb7a41d4fe0c934b5d29285e077350d75a93b1ee9908c754756d3423e7a9ce6f7594345e7fa6367d95f3ecdc8ef4eff5c385718c31574125f96ff5c5171ee3f2b1ed9c33bfcca23959d4ec508d6c9fc32e058dbb43036757705e215b9b18833c76b8a5fa92c813732df90fa54b9688f4a8dbd2460 COUNT = 10 -K = 118bd6356086fcc785f8f1f07f22b11250c60e60129ec697 -C = 12f8e8e838a38b3810f61d8496a1dba140099eb134f55aeb71d1a768164de7c65db4b12a9b8fa95534297a281ab9ed06121ab4183323a27836cfecd0b37c71cb676f66dd839ba8a8487bb9dd5e4ec526306e9f6d1d84fce900efc84c21de8b1a3adfe374d888bf7780fbb551b2e97e0c -P = bc9d60a36971cc2c2a033fa17336f14eda2652955a89f76a62bed03379d59fb82e80c91007a2d9d6c7895e08d605061de577ccd898545d6fd8f388c1ef869068453d72220a681bc9aed6c52f20597c9e33d2922d0acebca571753c9b87922163604db4acae +K = fc12eb863b65da30da0912375f7bc4b5de188361847f8846 +C = 758b993c6b21bfdd90548cd6130dd829293427ac609971ddf711a3267f4c0a5ad3bea6b55af6ffe50734c61e4e9db715956b071010593bea93eb73fde5da74da6dc754ee86c8e53528e86299bf216c0c1ea20baa1f58bd55034af7ee1920d13db03f002955b19298644bbd8425216b23ea739826ac1fc48fc4b9300ac356e652563d17b08fc699fe13d9f5ec307e02490e9a3792a578a5e1e87ca16f2d8856ae0ff36761fe84d0cebb7e3e9d98af2aac48fbeab7b0e3c4d484318bdab0a09e2715927c46908866b16045623367809b2e080a0bbb0dadeadadeebca7c4e271e5e431dbc2d1fc8577d490daa67168561b9a8a6d2c1d58c739e7401cd23086bfc44a3620fdb5e240d677dfd840ecb16af3361024680066ab439ed4a6fa22ef598c5b4e8633090f85be6d5cb0ac032bdeb1dd36f49ecfaedd4b2e962eca4aa3adb226b7e0d1f7de4b047d5cb1f517d77f526773e398cf80ba1b79f22e6904217f7bf4874cc4e68dcb2f063345db1739b564caa7f46bfff77d3d4221801e8e5932a0b022367c6165b0cbcfd8be1123d69d96e9ec9f14e81ed38655ff979aa8420d53b22f74c77a731a4e4b8207f9c2a210f631f55afb08887a8dde0c72f1bc80faa99494bd9df55dcd531972cfc4cc49e64dd7b0a7bac3adb19f031b39796b919bf06648795d1c470ce63bec52fab7e52c099ff42753f29d8654ae7bffb3f328cc67faaf2a565212bcb43 +FAIL COUNT = 11 -K = a1f0f5ac6543cf819029fa0229935fc89cc75b00060cfaf7 -C = d17d918e1a2b4f34027741ef44518a7e55ceb18f445ef271591aef02d81228ef9a0a75fb601c16b621ea04787af8fab7f05be67d3b814748b7864400f04b5647cda2e0a89763c9bef063e5e4e50d980df69bda137ba90bac851873131460b66687351a10863a03c2403e13c8d7290944 -P = 59eab5bf2a818bc930a9608aaa26a0c91b53f7a22880278f62cb74133048238f389bd83fd1e2886d3245e7833af4b8364bb7af9f09a986880e3430533aac4836a869e1794f75bef8c9b01a92f665c887ee0717c3c95b3607f81e2df2d1cddf9a6fc4f24cdc +K = 491557585adf4de825272d17354a5110941df15a930235ba +C = 2b069375bf6b6691863dee4078576c01d8b31f91db309f1ea1fb31d79e01093d683fc9a97892a51b5f123df60535b677cb0a66c37804dc67d0c0f1b1904ec276ce27ce5315b57557a47fd71b424ac08428d5476f48839a957aa30b3bbb89346850b8e40d8c2dfb340c888714df106f2faae5f6e6769d7726cb54c91a0a2adb37428b1109b81cfc87db973e3508e5f1b1eba947405b0370189ea8510a7061d2c152d708883a61e14e1bf75dde9e68de4da0dcc1eded9cc6c14eb5425c77b707b0ba5ca951b2dc9c28e57f002a92ca9bf644fbc69b67da5f9ddecd2c5bf2cd53cd9489988952d58019ee1689dbda8563f580f1527b63613225ce5fa0d235bc6ec14ccbe223ef4f6321f98ecb729fa47e997c8a6050f061ebe5c21b72b07b6cd3927180698f215aba4dad2748f0317480858557a09ea7f15355bebf510420e967b3d9aae0faf5971a8c1b22999ecd84b269e9792533e7c44798b65918b9f176b7a03fe11069270b97c95af36c5cd40e9933b7e4ca8083cdc038453efeacf86b8f65f74573b5bd74c80ea278d958df457190e2e37c5641d617249cb203cbbad463fe4c7a42ffdb91ebc50ce47e479b3d3a11e7dcca74efaf6253470dfb979a13b55131175cc46859cd4581bdbd46f7856c96897ea3fca85c03088291e87755977d7cee8f069f4097ea3bccc516796ea4259e6bc27eb21051e9e3c895e867fab8d2e883139ad648aaff0f +P = 3ae2e8e44659c94c2d6b4f1fb474948a638e3613e341f832abdf9b87131c4bca4971d91334f72c7c48e1c7271d5c8112790733b14051634c3bc0ae6075f00c073b69aa765663fff07d76f1d1f7df4b4cb4fc3d5d6d6ed644e382fc449b81f90689ba79cef02577a3def1f4769697fb99a860b31ea148ef700f87065a211aa14802211064992ae32da5d4e882869058276606b018300f647e9c5336ed325a49b00adf71a6c78cdacdd75a66e8b5076580b70ba2c0a42423be5ddcbb0136ff9c11521072e32cec1bd88910b1633064e262f22ff27ab9763d1df20e478d31122fa522841e92e783e9ea7ce47b705300a5faed24ce926289837572ae97c9e4b6a8f14f73dc93a22723738b10d1bd1a5ce198ec9aeaedec91a3518e0f2c5739fe20646803ebfaa44f1f86ea923d1b0892fc13c26b01c3ba4d86eb7967626d38f9e94c7046318ed717f269646e58bcd865755ab488e1bffedb2db52ef540952f27d3053f43ca421ba56583fea712aab6f43666cd91817c473d540b00fb8deea576cec83171af89bbeb2515755e7f6bb5366f3c4a86820b1471f3c5a3c21c2ba2fc9b1b418fab3d73127368318838e0b91fa31896088f76de6466ea1091a80dad8231bd27af4cad3f9e16da0c259ea1c25ac90761f418741ad963ebb7586f1701965b7386fa5948424ff00c70a7a24832097bca35d8d077915de83b3677bae53fc53617 COUNT = 12 -K = ff9e4cedfea0c38ae03faa9bdc5f8ef314346c76a56df38e -C = ff918ed1e239636ffbbdd476fe257e704664523a3d5ab38fad436be849fbcc7b74ad501a40d819275e25bd2135889bb59b461525f5843361edf66840979b33ef5c258a55d77ec51991f1b5adc53f1a4d62d5a147e0355a532c72c5afa5a224beeea7cdfcd5a987d4251ab98fb60f78a5 -P = 306050b1e9f9eb4aefa3784484e2082eee7dc73ac871d143ebb41f1a754b5932e812cfe73b03b15b8610aad2684658442873d8bef1f919a367a3fecfac3e7f9a5e9eed58fb469cc6b2526b9223030e42d20d1f296cb4bf65ec711e45f260a85082395b52a6 +K = aa65287b6a61b8752ab9501e6debefa165e89aff08e8b46e +C = 4001ea967b62a7691655c7d9c1f8908eb3c9f79f4ddb998ca9ffbc08bca349fc6156265d484516fcc77a3b76c8b64a5f06f91a0d3c9ac99ebc8176188621d9c852b441a60774ebdfce14f110b5dcda89d43d06e0975f9456250bb6851bb57f9d232f187a3f920512b5f57d15080d7e8332d1398fe2d53d2b5fa22f7e1b46314997e2152f5d40c1a958df806d6088e16ed69b5deca7f46e9f9986bd18023a7a29460dee9b7c26a0aa490e710ec3b2a735c40357fa180613047b9c02c1efbe9b7737abbfcff4424ed75975de550743b7764d48c6e7e81e8484f18b1c198d825c7bbf1dd1c4eb434a436efd7ffd20f4b3970497dfe40ca77b1198718a0ff8da376c04083a8e91e8eef03cf2a6aadad779aebe1723ad825a013e43ce9bd391c930027de94b4c6caf41405c885814519bd7c353457c717caa06ec43bddbe78b252961799fce21b9ad99e9fba553bc6c35292353717415ef1cda27362159e0d41696618609282b16cd2aa64fe0c0af3f63dc86897e3e5f197bf300138e8e7e1e6a2ec4747953b697bd0c166ff365f3f351ddc1b987ca856d16181f7a2b1a7d414d266d073f86d7234c7a57880f89fa1c4d22a0c95b4b4fd1d809972fc8280b054e6c332d2b33f4242ca0c3a68568808259b5db043b3c95662afb8e09954a4f6403abcc522ea6b93ddfdffc358d6a64666e4a6a6ffc496d3d83f3796cfb530faaee22ea7ad7756c0654e5bd +P = b4cf63512867d4ba1875809e28ae747c920a1c687db9cafe3ea0888b5c779bdb12538a0b9cdde4b06dd71d74e8c36cd6b9ad8e781b0dd2d3bf299a59477f2d7a70d66f07c833ca485fe51ab15065f1cd02b31eed49451fca5fd70e63f0221feb401143f52a3a8d66322046d5e4b00c22779e12bcd5eed0b0a2a75bed378d1b657ff66cf9f80f330f0b339310c5bb68837e9137e9a6fd4b531c9b87dce0f3b287ef4f8100ca0b16bc65577cff19ea3531422817126eb1c5967492c0575ae24aea85eba9ccaa7fe60ab6351185d819426dc30a998d2b4908111cabe5d2274b0deec3081e83e33c1f530b9fb8ba65cf62ff846f766243e40598d3dc440735e5789e5d24bc3efc86c2b4bfab65f6328b7deaa0361c9a9fa53d8cde0db062740008d5ecd380cc88b546de28cbdd35b1d7b484a91d983be0effd3100fee6e89cfcab92ca2c56475717c034584376942435284566052951d97e289f0a34ee4486494d8fac4ebcfc6e63422aa73815ff524589978bb390f813e2fdd8d8bd609359d0941db4f896e790f07dab1cbfaf6fca0f1b5c183482d52dcb6434cc6b99097c90b3f85510c1fd945a2a74960d55122aa9b5061899468a1daa600944edb04d8ba5e61275817d62b94cd4047036a05e74b908637fc29259ec9edc5f56679a70740f0ffb28b578d16d74fd9c82a5cc25ef5fad48a0c65df96f2f6050ec13300358c07185 COUNT = 13 -K = db7a649b0748fb9c2c394491a79254c9e234d4a80a4c7e1b -C = 055c35b25d75f6b5f4f810051bc1e04a6bf02b5bdd93ef7726569f02d0ca5edc9e458fe5fca532edfca31c4ec46c5489a73be66ce0a2f64d0fb24266c61129bd660c6427348189412498ca9983001ff25825d84c8ce101077576106281735fa8e636c9e72816cb26811657f09cef5a40 -P = 5ea4f3600d6faaadab50b94d4c08c8958bf7868e963c1371553c6183b1e62065aa924da593a43391a3b1deca0fc1b198383436b65ae8fc059569ea51906d19e25ce4239c15098d3ce0da4e4697fc1045d0b5d0437660dea098851acef87ea400039665095f +K = 5c705344d3fd9aaf1be1aae06ff8cba401ca86dde98574d4 +C = e788bc4525de5843dd00cc8f25bb55a01f969d38ff3517f1eb656887443a5164ad0b350e7fb76f6b22e3722e3e17489e34ccd49289ef89afb60525c5f84b7a92445cbe5b910dd0fec4ee600465976b520ce5cd8ab4c6909133b4377d347d290cf4a3aae7919e7b33d57ac8024958d48a3ce37af8f642e68dd5ea6e20c65b0b201e2c9de8f0c4711e2bd70845250c3ae46a5cb223d294e8758b8a57041338a10014e5a5f559baf83b89607690242a183a256115e0f959171b860569c713c18bb841d35fbf86596115183fe819ec8b77aca06b544fd67510972990d0b824efc086851d5d4f29d5024365798fa45a8ee56411f33e1937685606bd60ab2a86c0ecfde00008f26993a040111603ac1f259e850127341dff3735df5d40223dc99354020e8512f85100d7f1bd153a900238e545d26885ccebde3dac99eb962a0ae13a1bc55791103d0dd35ab8ba2b54998f2c12eda1ccdaac05eac67ed0704174e65f4003516674a80372c1e31d0614337e77e82a21d6135b71cf3df949e244452267fd39a1ffeea60d4cf6c17b30651aec2366e61e308794dfbd298a8d580e3274b7314860cf84d7f2cc2a6050107280a9bef6ec85a42e2cd938808a3d83eec7a0418809c56cd55ace5681b964f7da7793a244a97702f07f0a33eaa20314a810c6609ffd548b17679937a97a4aa96388d911e1994a5e1be52106a0b9139051d2902b87a1ca295b5a4e5041 +P = 11496288607ed42c57073d1abf641ec42cfd08c244de90cfdce09ddb04fe193cd9f249453d423ba9cb65ac558652d498857f42ca573e60fee5946b5bf332e95cdf566df0d0414bc24695369d6beda3b44852e19e70595757c743c00246d14ae5347f17c39d5306a5b2cb87213e594ff767f78da7912c32d7e8ba2a023270eff86a586117bd87612b78ea489adb6c12e435c0f8c1b1ff9b8ea505244ebf2679e04579099f2340889e27f89bfe2ac86c352a65d0a645aca8b58ec0c5e311b4c52808b146a9feeb3c83b6fa2178d10ce049d7e50943f2a41881f54fa88d1b854d1b3440621239529e250bed74cf3334310eeca84022aca62deba7dbae89521043c69ce97d93b1f3322802d1e6e43c04e228967713f5996e35b452805298345da532472b5dfbe5d177d184c87ee7959ce95cebb751d60a7ab022128731a193c652c850890cb3085008f10d7b3ccbe2cf3f3ce88b3c4c5432ed0ea47091ebc70b1409ddddc3efe37c0fe900572b5342512a2ba347b043f963da80b49dc5e61264a5d26fac779ca1cdcb62c029f29b839e0d6a8e65528b163a8229a9d5d422f999fdeb69c1dc4bebf2fc5854ff9f7046a69ff57e8da968d35743ba9dd3a1b25b46fc39d49237be40d7b3270a05030d6cbd1ccb6fb1893d9871b6928d83cc61052da1cf59b3958be0f1071613e5fb375e68ac642bc00eaaf62fa518f7106892e609a52c COUNT = 14 -K = d4bdab091709407c540fd12ea7de9312b57a2789847da6ff -C = 4e6543c8d2c7eb1b78b71e9eabcabaa9692d39cd02a375c0e7c098ab8792c67c40b6efd92c491cddc1c298ee2af450ed5a974fd0b43e47776aa450ec4b1c1254326bbe67ac2b69b35109c27a85ec97cf1416f38ea842c335eaa70f938caf177906fb3433b5ede1fbf60d3a73103d0aad -FAIL +K = c13e549279cbea4df793424425d12433d83e9fcaa287830d +C = 6af41cf1868b47ac13033d4618c88d7c9cfea96a69793f2a4647fb70623529a6f9b565df0fb36899d9256edf89623ccbe1f730f4a87910765b1c14ef910029d7257c0aed5700db9e7058c9058c02b8f58f14c257461e521748932d29f861bbe81d0a6ac0eb7f310d1134ae99f6bb3886277c29aa7c13b43ed554f47bde9911ee65ddad9c5e9bf75d34d81aafb6c0952fb0f5ddc80f4e0c9dfdaae00199fad917869f82e6dd51bab70f449a659bbda9655c4b73ebb488c4bda4a6c2a9e2a5d5fbbfe0ef788d6dea77ebaef4a99ad1a652984d666209df2377227a29a02c7df8f86b2180031ea5f8887de11a93bc6bb04122acd5bc0ff989b976d18d24173f3e9c944140d0d7eaa13fef76168fe52d40abb24af5fec56508f700633c8a25e0b2302e78ac18160d70ea2407ba0a449c5b6e21e5754c821e9e0a1049f90894dc7764940fcb6eb16726f4c7122b6ffcaa4a31f3f0cf7f373492df9a89ed787d2f25fda703f0dccd9efa01a858f1e94f3c25678886225e5bad882d3e6c42c133356128e03fe45cf6089aed3f00b622d74e9842c00106b61f1e3964dc7c4f22b7ec3e7cd21e48524bb6ce25b278e67e1ec3c37baf42bd3c6d09c669a558f268728ca354e43e1cb6e5128980570f1053b0e2efc293b333df333fec25d2a6f670231934363fcf551c29eff72f8c2b99f19fa51d9250292771b065b37b3fb8e5f04aad11fdd49f591ae2ed4a11 +P = f897116bcd13f9689f81aa8cb78628563e5fa5485395c91969be6435a9615ac6efcda853a6ab943f5bea08eaa2658231fe228c1c830e8d4b7eb0fcfb77ce18b0166a8cde3441c5d240561e18202694bad077b0abf0451d1b514a3d13ba007621b784e3a07ca89a1016273a239e8c8e405d73f53b0f0db9a8b2a164bc500ba74a3449342b9dbf96fec7a5f99ea3d611fed7c0f2ce977dfe18c0a3d5779aed33179c19f84e76d0b16591ff8c45384113a8b04b1a37044fcfe3a6f7106e3801a40906f2e75ba4015c0275a8076c015cffb00c353ad443de5c4a004a11f36b415b0a1d12bd9d80978790bc96e4e3fa8e82d0559b2ff6ee5873d6c51692c00cd91bb046b87b60ca6398fc7ccf09d340c9faac6d5aa995b73c3584c89a66098431edeff85580bb133290808adb784149fb2eadd133aef8ab4489dbd22c61355533e4032354633defef81c9daadccff86735977a6c8f1d912b43bdab1debda1e3d1b5420f4efbc668afc6cf0f2d7a032540f95e5a2461f063692630854becea1ec73ca20fb74ba92e45ae7ed548b44f8b46168810c32638f362906f8fc59377a0eebc301c844b80e8eebb1fc4741179a796de877e10c373af3c31e9bb9c7ec24077e08a1921ab36bec61befda859af5e41f6c626202d41cea2c9a21c4d4d3c9f9065ef104802ff8134979f94b56d454e7306ad58ad8f8c1660f4a4e57c0c6a78c147b9b COUNT = 15 -K = 935b049c62f1162ece95c9ee98d6e35dec8df6656b38d059 -C = bbcad0493bcbb4e376cab6eaa2e334bde2f6de75d471436944d78c5bd234d72032d7dfbffbb2d85fc33a4fc8ff5fe71752a201148f9f97ab9f3d5ea8fd64890023b383fdf5761025efcb94e33bde23653f27b666f8a243589b013b12e63fd090b4f41f80fe62728a8cd41d6473b4a89d -P = 2adbf252e11f805df0023cdb44d586446176b73fe9f94696564a6757fb9ac82035d0d4e1b54bb01c858ea50aa4042c1ce6721a63dd4c84268d057c2a701ba76e548aff2ccafe3b324b4719f7a3aefb693f4350051fc35e30b40ef89a21b5a3692d3fb68099 +K = de51bfedf5d515f8ad0f1faed18d4f81fa8d0aba2be37a28 +C = b3d51e8aec6d9e52f16a938f79e3c2e8dd4c488aa787e591c762c4aa7a21175e4a9c862eab28a2d54f7f890b9009a78f24c981360dda30d4ad2adc423ac23451e80967c58ac9df055c1d18a806afd3c6903d4e6dae1d1389ac94c5c2d5b749e22521636cd11abd5c62d2fa199a7752767bbc48b8fbe48981ec8494ef9b1d6bfafa2f0cd64ccc4ad21ef393100b4aa8bb8e925afed6c73824b2082c4bee909a77d3f895a2c9e45f7ee190ce25dd23a72c061c170e073d5053e931556732e03e714c44be4aa5e3d1e782ebdddcbcdb8ac8275a50515e5f4397f8800589b7bc63c61232a832b33ec1afbb723735458acdd65420ee8a44bdb013dffc5ee602dd2761918fad1d3e647c786a9c696dca8d890f8838f0092daf3b6b6d2f0ec59c2d4026f8f8ae031ff54f0f51a2b51013781164164bd13f3f242e63699123e402bbd8993d5d7b7958536e30fa8059e27e74fb648a419f4d319ff7b1b410dca9556b03894823d2971fb034f6c7c7602d658cfbc4779107523746d16e6d4ccc47fb213840f6bffee5aeda6111d8d98784f9cd8291434cf831f40d4591b643c615641e976eb453027ba6e4d7b84c5280056560eef072513086a84492b924bcbac3f95670770051af989e6f9f101459892fb028647b511ebfa2b445b2d3021c3590c7add3348a704f08fe1fbbcdd7b8e0707c7ca9889a3b541c4dfed2a5a66323ac17e0be2cce7b81e150c13e72 +P = 6db23a538d3688112d3dfa4f3c49bbf950f688854554e0800f22c6d36d0892a5182d6503bbf6bcb9a2898d78c1d03ff5bc76bb84a5817b3277e73e289a7d333e211414273024a1b0f6f3a108569a17809332e9d5fc875341aed4e799ade86857ce11ddfab90b5c5538b446fa9088b6df15f4a7f0dda50e5b2adfb6b42c953a3d278633016f2158ab50f1e5c5e4f8f763e7c36991dba43787226aff938c954ea539ee9e29c3a8678431d204f02906d4f12986e2c212ce6e5adb9807c167ab293fa13d11c40fcace94f99957931f70e21733283a0971a907277c5f07144f49f7251cefa61044591e68bbb8e91ee09fb9dd5d926a2617bf334d12285dc3eac81cdc2bca73e0b5ebec36f51b9d260cdaf6a168035bfa2d98d80c8d0a664bbabcd3888b5a26eb4104c2d9d553f46b0709364b45b7fe720e2621c2fa35c7de5b51a1cc74aee8bd3c93b1fc585ff042c3674ae4ae5940663125df51f1965fd2b38c921a724c783ecff5fa8b285ad197f76ee4c9f55c223c1391afbac19f9e027b3dacd077f4a6be9fe902285335646014d9d4d8dce226ec2a86cb5987a6a11cb165b93e2872c0142238957a820e37713203a9dd2cef121d5554ff1438b73a4d677ee4e09d5ed28340976595e183e81ad68cb265514449652339baad21cc976e715d7530f32a92af0ff60f9e86a2f7f21188e312a41f0147a2c4541c00a9d5ca06a4df30 COUNT = 16 -K = e7dd2b0ad650780aaa97d1ed8476f6485033d66b55d25cb8 -C = ce1d699e855436fa5fe81248922b215d485a19dcc24d17246f4075ae3bfe85b5475b63a60dbd48b3ab54f0d50e29c1057e898d98a28e77a8575d224eaf377c1ec9678b35031affc6e40ed0c3473a8705899bcbdb77e0536250050ae4aa336f985dd46c54cf1c01efcbfb4767f68812dd -FAIL +K = c61c2eaeef1bbbb9d421c7f4fc6834c20174d863ac6ebf08 +C = d36a819bdc4a5b1b6c6e90662ecdccd7d0f3369a98e6e91cd4379aeaf9bf43688154140079829be2347af31a236cdd26ae947608b2274c411eb1d740041240de53ace158c80325000ce0b1a30917735397c2b8fcc459e65560c5158f22ccf917ac67247ae762a185151e69e8227550002cbfdbdb3e0102e218a355eb1a9067010fc181479e7ec84b27a10e152a554027b1d021674a5cf09f6a8c538beb95ee1e76c3a307a56d782dbe09f9d1a04c04c0025e270c8877192463d157df11dbdf4a551d50c0d74456ff41001519bfda52f2cec64acc971ac94eef17004324bf99efb758222f55a5135fb129c1c9679feac7afdb60e0504bb6840c49069ad90dc3045d48daf8fe4206e591f658c8c788a75243aef24f05eef846983aa6a6c2a20076fca50259ce1ee0b42996d3a8c0d29d4323eda9e0288581d616a6eafe6bb80af6fa7e732131b33209bb54e67fb63b754ca308e5ed27ccf4576e3ac9df1c49cd9a6d7b93a5b484470a72deed55af126d4d7abdf1f6325228979bfb7dfcc5984e26ddcb998a17cfa645b5b0bef0f256350695163622b90d02b4e6cd214a7a74ab618cecfe8f0b39a53376d7d47779a7f47e8eaf11a3c6206ba464550d4cf047a161bb1a93d4f667fd7d78d70eb3f7ee09859f7476e51e858cdb8be7170f9cf6754113e1ddf32b87c047da4707f2841fb8eeef890d82f32779d7c0de1f0c02697b027eaa99940fcc5645 +P = 01a8da4ca0910af81b98185e33fe0711d89e6568fc4ab94407f6f9b216abdc12b2b1b3fd38c32267e34a698bfa70863b1e3b3bfd4d9c01a7fa6c185624302b552a70e086531808a472202d8b9320063f0493237a9e5375f6f7b79ff0846e8d3cc99966ddfebcf14586dc6027e8b319db86b9d59f47f742cf8bf2facdc88a23b6a4b3db380abdca65c90dbdfa5fd0c593a3de0248b21e8cf75f4c74e9860d11f23df64bf1b03c85da10be65ed2baf9033bfb4b6be44cdac8a86aad869ccf9db6422a7cc7cfc9ba577e91b06c5d389d6413ff1fe2659d48a65e2bb7481dd80779976468169d4c1d549ac7bf3dbc56c6dc64250e90256750555a14c08fec9d073472d094f71329b82f00fe3e394aaddc56a04ebd87b86f2c3d86fcf8be3c28537d3450a431b3772a42b4361a1a70d8fe0e873a845bf0bd56d119141085002e8f3a8765f8c6921f79a627550bd39aadb5ce4e243d09720d6b4acf475985fd4ef6820691857d2c34662c02407358e3eeb35029d871ff01689e9d19da646c2bd510f69e01c962fd0f80e8b32e37f4fdf1ea1fed2fe9d58d05a2fc908897da186138800bb67c8878d731d4aa426160f9c53632b3be03584ddb5a641cb5b44b9e4ef7439a89fd51451c2ba1de4ddde515fb391b26bd6fa4c01afe6045f94b47e8e988cbb8302d581155b25a792cd6c33837cca524a4fee4da0699961783fb5383d2d99c2 COUNT = 17 -K = acdb31f5c5fab0e14aee56d8f0893369747804e4fff4075c -C = 4831f63c00e00a041e6b7decc94909d76343abb779a39956ec58bf066dec79e78ef72c3ae5b9a23ade77f778d0ddd160329dbceddcbd3bc8e8915c009938bf4c44f26dd3742a81b92790c8a4eb13309c6fc2d67bb3bc2ddab79ecf9d1bf6f3976cdce9a990700e56d61590cc507f23fd -P = 2c888551d8f7d0283f454699ce6e135f347f8bb4ec11f6d28654b7e5b15343d9fca9cbffa69a94a1bb7be2a91c848724a87e634374eda929ba044604451f3ed32729016bf747b20d9aef43135e59b4fa87651dcbb59dbe99458ac04115a644e1953ab52985 +K = 4a437e5dbe470e3f5b5c11cc9b8a0e0df47f92043018438f +C = 80b2e8f96538e0a3531015acb6081399d3b719cb5a26ff49728999ffefa1a04b681b354cd2353ad7fa1a920b86de0fa66b1097427618176e4e5c86d00facbc1e681d4002485a6853c9b4848a8d315677d18fd188472bf1c071be977205396d8681b1ede5a78a950343377a73ae0d178375dfcc153f6522f7b277eedcf4bf7a3a5828f51a7671df5048c8c026c6b0d34d93947db39603500715cd96672052d0b60c0eaca0b0e2ac354db41954b89f269647008d7f69ab80ea0fefad3c57de9947d06216ebf757d16cd9ec2b6c29b563dc5c298524d70b3ac20309b2147cea7654efc4956807d7b3f1cd1a5e34745e4f0796535662f65df97b19340a183234685ef4a417a13d251e5441c7a6c442f1962c76d6af78e0adf93df2c6c6b12e75c4023c6496676487301930c1c75cceb84dd7165f5401ebece588734fd11ebb2a8196348f1525a4251d9aac9133306ba0bd8155835d3c86b5ff33ed7bb54266126502237a62fdba10e05db06fcd3b3557e5f6397b40d811b0682a081798a59b47ffe3395275483262832936f962a95121dd0e884b9e0a366b5116d8ec1a26e0363aa7e142707ab9e54979683d8d204ce77556079c5c1d011a045bacb49afa6af5a77e55d5f16620a427e47970129e56a347e52ee3d95415ebde7920db5b7f2c44767bebed649b5638418d5e1de547385e2818c799090dc23e33b20840f2eeb1ef39d4c880cbba07202d06 +FAIL COUNT = 18 -K = 2c1c60a3d338aad346a3695ef7ace802461e763ea5e25368 -C = 37792a7a34e8879d5b43640589cf940ea495601f8a7b1ad58d11f69218c714e313362681e0eb9caa15ea9ce909b2c57e00378f803514e9b8672ace311550bfbab72a42ae82605e3237c67daeae725eeb821ebd4c7f50493f5648d32cf27f9f1fa8fa0553d79ec5881200457f097999ad -P = b8dd05c98e3b4917ecba8579d87b0340d8a0e26342002d4ab704447cd5ad122e826d99c596ba37b775213b650e1676a098a06f451d59713d77d5e196e875dd94a68bd41736246b03ce639982e13deb8ab7f00a14b487d0c9d58835eaa46392d14b2ffcf2a9 +K = 646640bf88e2a99bff58cba72b58e6111dcbb2f57b14251a +C = d90b977ae957d8c0948b53fa4610def8bc15482e2d70dd3b44a6511beef2e8690d723ee41fb5d68725854c3f29e4fef070357087e5e71783765814c14e8fc45a174296817c804a654db56f61a5f52c9fe2581ec3f3a6690284db9dc645abddec83fe9c5fafda1246e31ff96118c9d6375e6adb8a40d5c1cb8305228749542336cac2de0658f8210ad7629ce45cbf13f94b4be1f680b83d17f1f10709ddbbab32a59192bbd61ab8f3b069ef88c45a47c9a9a7ae3e58042bfc412ea43709d1582da698886152e10fc4815184f64c30db9bf44840626c7b188c4a1f9e18ca756069133c2caace4b660441aa7b2d3085963f04104fc886a8b3f268e8ef5952f31dfe7131878ba732791a1ef1e7b966ae2c089263f92155b4dfc83987b1203341ade998a4a54f786f2ec53ced8f28ea0e555314d05beb9e5d7d65327851e9974e2a4a55a17666806d599fe57c57da43954753bcf3998a334ecc1f84c6148eae9b6637035a1fbfe911823b3aec34a0020e60a26692bd85156c3217da6812980231917c67745ed7e212cbd768c6b33021036dccd3583570c174fe6d96b21a42674e4d26f010018954f8178f7d5ef33cd2a0402298f03d7f76c0b507e4fa9eaea94d493e6d11439690109838b00a311ac3a32364750a2d2e0be35f103a1ae263be73fd8909a8edfe5df8abf7e15ebf12a858cb54313c9bd975bdac596a641d114b63248d8a9a8ee5392ee8fd +P = 4595d4f5abd37b67da7a811a200e06124f5b632be4b647375299b32830b4f8a7566ca95f1a5ab1cafddb6c5b059487415460b9a112aee64f5b295e31169711e89822c616d33f2cfacd953d2569ab852f4e6999570691ee65733fb85a0572b09e0520e10ea0e83e058299f864c08181c3b72cd138859df6d879f6ae3b7c66ff3cbffd07bad3c76afe6306dab6d341f5dbd57b8463983652a5f6c010615156be1ab8b2bf8271f62c0c54809dd378cad7725ba5bda4f5ce4933d48412c40946d48909b6cc8e2ddb8ce61244d67ae0618f8e4ff75f29b177a9273ab3b403adef6e910ecb9ea5517bd0ca154106a543d2a3e7633c3165ade68a22a4fce608a1332aee40a05565e799afbaabdb766d833979c362f0c8996a39233fa34166e5ec026c7ca0b8c05da43393173ac00058ada2c450aca65df8c495a6a9ff76da4b338a70b82150b937a7dd03a4e7f4985738fb9ae360637b5c4f77963538d9d8dfaa3e4b7a472110eb9cc133a0379c231f0d494c5af1ea36de248f37c693eea717fad063e4d2bd41fbe884adb3a992964c3d29fa8815e7aa9dec32e2514768366c49b7a5f25d845c83d696b4005cf4856ca3ccd462c1104225d8c87d3c83531a9c44bbd395ab86c5768ffe6e865a89755f90b3e07fdaf3c2eac853232f33f1f2aa94a4dfcb51c649edc534b77c030f3ac9010ad96b415241aa9e48a1c15191fdbacdd95d89 COUNT = 19 -K = e907ecd12382fee6986dde83071939c4e7589307089562b9 -C = 7777c882ed8f304fc586c601470f3e8c5efeb0640e466cf0b0912c3511074e093b0a173c1123069889766de66f7b7dbfb2369c1b064cfe5a8f671ec3f2a9b7c29c593b3322dfa98828384b58be6e05db636727195db5fa23d060b8adea7b4e412222334978aeffc41c41229af182683d -P = 00ea15b931d7d47b43cc614eef9aad4de24cbe161159e996e3b8ce5e4ee0683b0b1522db21022ab95f66af42498a59c57e028f98989e008a96cb705bec3c0fd80a2e549741ee67fed169c465ccbf8f90049f12ff7a1a9573fcc1f108b62cf0170f8709a248 +K = 7b54b6b74178d5dc3f0b84bad7efc817b3d7447b4fa4bd22 +C = bec12d5809124f02d0657e33903564cb35677cfae601413981cbef6cef1b9f103a1f9a8d88f14f99fed72f51320cb7def881beddd3df119f0ee7e53f6807f205c8a24432fc766efac516b763e753bd3b07bda4e2269c7a6cd4d8d39f48adf2cf34892b217e602fe689ae560101b1ea0708ff35c9a44332d86342563f66d5cc2aca6cf55ea01976c4696aa5110fc153b6fda9c967510e67475a60a6431e81392885df3964a74f5dc6c2882691f34288bbe39a70c3266c0bf21b42794cfc5e9d782cdee27afaf5f696a3b7638c6ec5994f6c25cf9639478f2095b953f8194206f5ba10b32c8da52316eeafe92ea37a0d8acb26e26d712b28871b0d7c3d4f2f1e479d22c1b030c7ccca99c23e6e3cb4427a2a46ded7769c37e44c0d45d7ced99a405fb3035b118a1fb0b73524066da572b99900af628c3dafb22aec194fedbbe99d133f843305de1a9258240c497db6012ad7718d30e1f50f678b1b18866db55214b322d33545112982c8983d13a7694ecfab088c561a92dea15a5d3be697e4f8d0a56b349323b8fa4a9d60ef1a43ebdc96b174d029243e4ca732783d3cb7a2b0c2141d87f9ac5acc2a3bce74a16070406a9471794c4558fccf52cdc76b6a385b1e920c98f3c3beb591a38a46bdc5176d8c561649735a9c8b2f11ad680020141da8c1c36782410663811f40872452a310dd1b6fa2d1a69de9b505da0fd9b67885dadeb45d39cb7fab67 +P = b3387c8c96631409cce5d5a6b70089aa913cd3a062d0a1b8c47b95d55299d005522ce34e97320fcf5ced216c26fe5a433c1cae7db12aab0e749f865b56c67c476d79d2dba960ddb8058d9a496ce163153326cc6548acdab71e9f27009d1ba456e7b9569f55c29f535216cb46bf2e47cfb379880769a8985fea901b6f6d2cfb56b55f45f33e1b639e14878e83861a57c8feba12455e4905aeb3e8a68c59a7775f6325a5d563f6ded43d942d4b67de6969ead15ab4272db7607717a1dda79d8218191f8e4f31203d65c65a12d967358057421873ec596ae3ff21f5ff526298335f102aafc84bd9aab6c2b403aecdee263d96adf8c267e7ec576ff9ee5ea618747dda83c167cec8e6c4a815bed992ad0ed51d94ff483b6a5b6d370d9923e7ac510485ff827dabad598753fd2d6f58e1ddcbd287c532b895884ba7ecf141d59da7966b649608a0d0e51e6ba02dee9e40406cd767660446e6ca665d572eb4f3268e2176d84f8d563e0575110fb7e2a297f4cef49508e16edac5c8e08caf9f9048455a0dea8d507770362f160e44881e1533a704c763bfa7b54586a138b93c770964908ccba97f466330e82a3eec639ac3ac28dc35ac2f7b1f147c6fe4c69634e3d2300b9a42941ab2f2994740dc40543dceec50413842d1f43fb792cad045a747cefc65496bb660a6bac51730926de6ee1f4c344d34754ac3e301ae7782761b4fbc3f COUNT = 20 -K = 28f8a7a0b4b4cc62fd6fcce08114f0f67369d9d9b6452ab0 -C = a222bb6bbaf506b7840a7371c96f26302029fc2428b5b73b4a7ea6849ac8399a166fb7687684dbb36dbe183dfa857a17a76a39c8f4b5e1cd08fac730ed91523dcf6db93af211c9cddf4978ac5ff8d64fff0de862b442e7c5ebee7f761cb1b41985381afe3ac92d01209c910dd5907745 -P = 977d06b9fc28147db092872ef6ccc4b543a2e4f4b09ebc053e76df9f2329c1c68f36415ce34fc28f9262b53fed54690e6c7935b13603038657d63332962323601c67c55ea7e51eea3289bdb65d2237f95a06d0588dfcb3ee35708a76ffb5b5ea3f866b666c +K = cd135cc97c9dee1693cd8d2789a574d3238a2bcb9cbf7564 +C = c2f8d2808b43066c3d0dc7ff2e27fca3300c66df0a4d504f040f14fdb714bf2af74ac9bdc0935ec98412e7fb3eccc40b62f0d02b0bc50d2b492d7927768ced8fd4d244def592e2d853cb880ea90535395b675d445ae7d4f45687de34297f5f180df95ec47e5d46339e898c9478478c18b4f0d39575f9f815de06c9bbb6b3f13c6ca0ab0313bed87549c165efae2fb8b8e9999e2e99f38aa803e85db53f4daa7225b5e58f8d47c90df6a5e0ed1668da7a350a6afa59402fe820685df3afa31618a0d70b15bce0d330504d8490a9cd1110d2d1eef65ea317702c919edc58bcdb29d7cf83d8c102341a08998dfcde30f0166af8b6c1915905d21694fb4e419cdfbbb2da1ad2006acd198778ed707ad3d14c05ec7ffe565d192d7f2b377cc9c2976d9373d3a6a96c378a6592d2799657eec841c876ecb48dc989a95a8d33df8f5be015350ec0ead306ddc40c509805087e6d57688e2a6558fee415434beb541e9bf0fbb5517d94d7d9867ac3702ca03f813743bede0884550d4ccbafcc98a6f544f785c5aa34d7e2e5ad7bacacb7d72f2f0199beea537a249102f4fa0c31cd3d6d73ee98aef5be5abb6f44687d30c59e68db5a20d476f6a496a57c4ecd6d2e3c65dfc86db9ad9c8398bd6e18de892dfee07adaa3de71b4b46714727e3a5b8c2280923a506958b596dd5e510273d87ef31048ca6897a05e821bb1744da65f6515a61d0c953cbe30a12dee +P = 968e0b3b3f81f5dab39acc3bdbee707601c953110f096c1a187f37b8694af9c5429095d8d52e2005525d6893a607361d496418f34c3c2cf06d4c49a0ff960528ce88f724409afbe7cb02fc57099c2ad3be28a234e023b214caec3c5dfcabf40e824121ea4c5cca9de14ac9078081c7cb3563a9334d4badb9c54c5cec29e461bb23e641246b5643a4e83304dd88413e36244a88155225d0f71d95848829649aef7194b80cf959e02bf686e8e67b454f9bee120df9db4758fee073d8daaf3af60df538051785194ecb0f2f1d988199724bed549dc22d07db598f4c8ae8c4874ff58eb112e93adeff0571e61047b877f93b820b18cf3973560ad748c93fa1c56ad8f77105a17408fe0c3c3bde36bcfbd985ed6c31b0a06c046f6658825dbd0e6a436ea625eaa0a59b3e8c95058cc005f832552d1a9c3c7f1cf0f8efe8921718d90c7f6ed5180370a870ab963af76e61c8da5d0b3e39ee57504c488496c24766f01966d114d18c26d88dd2fa474a4b08b66a0c5be41ac62e2d38288459e98771a9fe3f9a2227d1ff2478b15b1948a8f439ee488ad5aeffd1cc6942cbe4e8572871e693f4939514bd9ead959923bc04044ff946a231132bce3dc16748d5f0c48070b287662ed9d481f26a49f991a92b6c4203dadbe3d9f6cdb7671b83cd75fa07eba55481beae31ef2523ca86997bb9df9bb7e6faf0f7ad8942a8418477f7227c4bb0 COUNT = 21 -K = 3a612698c4d1b8fb79d9087aacd43979d8852f5ad1fae28c -C = 0c77e96d6ba29cadba5b38a8980422d574d26a47a58cf7ce4cedf471c7d549afd8270d361bd63b6be9c155a2dec660f33200ca5c677d21db3572cc0f195cadf9fa3e844f22e96f4a6636b1f40de4a2008baed2ba3ba3d72a94d296cbdb3e1f30cbb43651336c7f97d57daf27a6eb7383 -P = 747068545cb9fbb48978cdef3f161182a2519a0044119c2d7f74a5344aedf5b411f03ae6294198fd2d43843ebf73dbf3f6954f0963393b2ca817105d9b2fc663b12423d7ac9d534c91ad23c57256b3db40d7c90ff1e149857d1cc6e77c00b759ce63e595b0 +K = 8dbf2cafd2b14b5aae23546ca9bdfdf7c265eb385e0a47d7 +C = 166a36a06ad471db9c1181b513764c121c0e049140964db177daba2bfe0b47e9c6b8c034567359946f32a6f8ce24e2fe366de5ba65450428ccf6d61b3a19fd2c282f70140a65bc50d0a30529f48511dbfd31f5138c391f483829f2cdb37197bdf43426e7c691ff1969ae50e96b00eebdfd3e4d3f0600daa8791b84cb5f22d81ecc01e8c22f3f198229e2192dd889122e783a6b5b979a8d2fc1a6e64ae246a050a2ff23406d3d45c1a8b1a591c293dd0d422c7b50ab57c2e1971689cb3c8efe9296b94af32f65dc76f282383a651c513536da5d552f8df9a91cd626efa9376f0efcb0a569b7ae2fb0d3c88a95fe5e9a315038b7988638291c3440668ae3e5cd7559877082e6ab4eaa540955e84634c1fbb6767b002c5cc6e9ad7a2f17f43268313239f9f2820e103fbd50706aadf54f8162821ca6049f187b16cd1f849b6317b66c70dc99339bc1fce51dc79fb4bf7d2aa94360cc524cb1d84e300aa91ea61d4bea8de23efcc8aa29547ab4eaeb1db9a98268e2345d0ed4a2a17816daf5708c717e6a9b15643a9937c1f4acb07724b3f0d9ba7d2ee6808705559c60950ac2bccb5e5c537baa3da09f27672f5483f0f82fcd58549f9c85bd0af1a3d9126603dcc5a5c14fd694b3adecf9022c2ea2e85cef8e945ee6af924eb34af20ce4a022873d0942204b53da2324dc354f8ebcf228a1660065e9b75a692862b2c231de5f1e71900752a2c3c6d470 +P = eb9fe4619d5198b7f5c00ef290c6ca81066765b594bd8cd9453bffb41961493024ba150a3e6d2d9e55d21f928928468a70c05e70ffe53424b7a3e45475eddd3cc405ef5e8b98799ee2440aea09a64635ba2277d8c817171dd188e33d5a46243a5fd459a789bb49413422cdf13c0e686f24ad9315b18c172a87b046275979b486319c54280a8fdcf44197299f20707da5d32fff6391856a27ea15aac078154789e5a3d14bfd2373e8081af4d3f19b933afdc30d4c31c65c7b32e4fcdf2e8bad99f9cc5822e6d19d9443e0f17fa086535737df8de05a5f01c783634ee3f2140232e52fd51607cf997b600d393dc5c2f5a1a57431b97821aac549bf533383533296cd8d89925ab8fd052e432c1c4c7fbdb149e16921678ab3aaac7cf6a10dfe1b14de03142957bc876bd4e29e5ecc8e966c6815ca4265e4e8824255205ab8c85ef4c56a68b0dea54e488efccc00f1523ca5e1323a3e1287e8c476eb8827ddbebf0087e9d3dfe2fac319f614006f668aea1c29096ae7eb3ed0e6b5e4fde74fa069ff403a2352ce2f6886fd9b5735d0834cb0c1bced87c86f9977304509a3885814b048697aa7c464f0ee9a06c7d26659bc03e49aaa6280618526a4caad7c34befee3f482133c2874a4c39afc1076c2aff628f8f46d3f8a6e65c6001938b9a97a7f138fd1307db1adc28919e84c026058b6d9d4978e621da77193cec7a5c73b964f1d COUNT = 22 -K = 2179fb5c813b8b9e44db0aa90df502c2a826996d5303b8f2 -C = ab7837a89d660dd4288b9b63a0a2c72488b3d55214e1acae0cc11bcc19b36d2198229d7db978932b72a748195747ed2294f9f08e33fd622bad6db211a7d98d66815fa7514c4589e5394738f183daa26a0a032f5233e7255f0a6a426eb19b23c61124a1043fc5c2f0de39631d35190057 -P = 1f64106c0ae9336513ed2c31571cc8486f43b396e2165e4ceca8a350eabbb1e2c9dd00d555db6abb489aeabfb4e2469884deca431403e16652c23f4d7b7fbaaafd27fd548075af003c802940dec69903dc23c875e83d3fc8bbfad81f6726e61776712506e1 +K = e0390bc2b5263769d57adc1483d51bf1dc0d9873c5121bb1 +C = 8e72d7ee6477928c027aab26a3fb2e3f0fa5bd22e50216f004ae8c4c5b26eb7421740313c54006d88637dd5ed98fbd1b98515469fa91aff5350ebcc5ead541a0b2122f7df772c9772970c8c31fbae25cc32b31f1e9a56a418bd0aea4ec77d9b87fc53abb400a47938d6ce0f9d9995988142a805855bc6922a6815a38866f239c011ff6df06faa1cc3c6871bfd971fa4b06bb19e628d86cadd05e367b0728e943c08f70108aad7a2bc7caa9c6adbe7e0d7f7f3efe272ff71a2df6df4a15e9e8a6b740b7c22470f71ac7bf6d9012ad19bfba71b88add946ed58155e53a2365ccd0a323edf085ef4c2877d0363fb4609fee0d56085cc3e0bb46acce6bdf21a73d4c4b957dbf0616c2744543cf757b30f75c7b0c1977ec4a30e0f19403db12a1859cad4a09702c87f612d574e0ced6a92fa31a1ceffdaefd87b024e9a36d5efe67b6e368414fce675f1d46558f05324c7772423852cf30b1da2564d1fb1820204cb6b384c09a1410740950f7d5a41a955aa465b2a65a95a7ab181becc8408a238a2c6694674f2faef5f439d9007c4fb47db4af42550666a68720dfe77965fed3a7c38981f88137c2ef76d77d62a6b3855c73eafddd9fcd8e376c810deabb3510af15b668f342df1f72a56a6ac0313f3a592cca7bba4d0cc1b6e9e58bf374c2359924830e115d4458e564d731d32a77ab762c91288c5012f6ca70b2df16d654a2abbacaad709207578db7 +FAIL COUNT = 23 -K = 98ff7ba730f04c1a1b80617e25ff8efa3d5d352d522d77bc -C = fb71c2e29ad612342bf9fd2195499f3c7f5aa034d29b64433ec62e8e7bded55a925045e58687f362564e830ce34e1c989c21a203cab53f23de9454f4eb3b338c1c02d2c197d41e9c141f6bfcd5716aa3ff978da024dd7917bca50a59e7f942dba2232e947f236fc2a93345ed258f8d0c -FAIL +K = e269392acb3065a80f0f01dd42c151e67d11fd99da279a2e +C = 91a3ada5a348712d5ca383d37cbe697dda5cecf824dcd2155479a2215b893f9d91142ea02124264dd650095fc9b5c7426508554ada9f808449b8ee645c4ad9f74500d0db26e8a0f4216f51b04d6d609a3a13f505846f199c0d783ac724a3967e60657ed681399c77891f7706fae598fa0b74904f52629cb820c7478320966d49fb36b901a2b49129876ffa19ec8b5e5baed19641a80ffbf8b58344d8fea3447ee504a832a8f92ec279599dadcb0fa9ef7fbc3eef04eaf16c30b8c07fb5692235880bc5be257804848c5ba6f345b32927b8642fa89695c2ffd072730a952f0e41e6e32b8dc59933af4d9e785653dba740463b5bd92764171ce95c9b6a838170848bc8ea6ba6f6173e11969284134052c00eb1c8ecab11874b7295e273095b01d090755abe1db6dc6924c61d9c1417873bbf4d487b85ebb4e9629322715ddbf5e54dbaf15e0d23b87cc31dccfac0a482b8409331a109f9a7e973409f1137544a7d4dc1cc9a0aed129e9e9fb710208aeb14fb09638bbb1f539a20d7c200e655861176dea827b2dcf79cf5fe6e5dd98d3cdf6effc8166fefbe36ad174e27c4e6c599bafd18b0e1ac7545b5d6752de1ac49a7eea5827158f69ae7390e718645f71e8af649a784df3b70a747454734b7fd170c475da381ebe396037c8a1d26eb36d002a4c75e8aa4c6c769fdcaa5eb8cd6dc4e0b1ef02b0f7e75e767c468af36442dfb799162a3c9b5f3dc +P = c907f126f0ca9979026871d35e70593135a907a222ef916df08a589cb9ffc067cbe0db5517491238d84902f5bb01e44a9cffcbbfdd0700fc9112d71357ffb79d751927ae8a00246e3e343c3c65f948fe66da8b6924463fbbfe2bca9d9e03de32f3e538f29bdd5e4f4be3d801231acad2ea608f6d31bd5ab86e8d78df1ae28fa8f4869904b8dbd2ca6c13732bda181fd3954454f92f7b621c3857be37769e66139bc0b876a1dc4607ff30d45fd447359efd160ac67084850c1141906e2d62137934b46e5feaa3310c59847aa98f60a4cc292dde43cdd1f5624e480bf4870a489a6983aa1c119000c02f05ca60260c56aaef5380e1873621f646bbdde66317b92b387161f3e5258a0f875787d5c18d59577f5d4cece228944c8f6cc469a224da21ece6e7de4799c772921890639541a70fc8e133ad784e18a45a796254274dc0c9029a54b2e73e416419f9126d989734eb862e4a8b29d528316f534db2b78e259ffc0f3d6d5d53883cb43e8130a322ab42b6d837793bc5bc8135a552e94a91a3a18959c2dd117f5fb3bc6926f1afc4f345e1f6439e99b43a45c14a10134e1e4bbec5d839f5a1e0e23ba9a9aad9f4be969fd59db8f968887d9dd1eb5b03c9c98c8da9f62f6826bed5432677fa73c547848e82185c06a45b200eacb10ec6fc98a73caac76cd7b2bbad3e10f701c37bb338e24ef291ca86aeaec51bb4f2b6eeabc45a COUNT = 24 -K = 458c9bf5b1ec3ffa9ca705d27276f55fb3031a9056f6f538 -C = 55de7d1eb5a5cd43ce8b4db1708d632fc21e1eb714f736bff13e1dc3eba0e5a8d4638cbb07991e03e05f38555c80b01ca3d2625fe3f0be78176e45b86eb63172a79d408d811a27139e353c2c7f73cb13352cb5cf02aac3806ff8d731a92dc68a25a918f6b6c206a173614bfdeb6978dc -P = 832749237bbc3a3f65091e3cd0d06e2ac43ddd22e533434cd5b43da4cb55245564eca24a816c45224a3f2509d8ede8b047ea58b5f8400e4541e5bea08678cf8b8d31c128993710e59fb4755e4b23b31a963c89bd6ac1058731f5fb97da5aa9d1eff1d41692 +K = 9b16da2776d133ade251b9ac76b7809d61780b3282fe2fda +C = 0bff8520c9ec1493b6568388a10513d133d993c847d48b6ef8083f729dcba561dd287bbbdf7312713dcfd4d13a18a166a34f1b9f65e0ba8abdf2907b7bd60608a65ac50acd20e9932dae9cdecffe1e1e2eac7e688a71b15a6687e499d87487fc3a564a098bdab4387cf61d755726c92cf56f9604508e36fb4e152e4974beea14f29e762b9d7438be3dbe402f6ea399b8b8b8831938670d2dd0f0061a61296e466a654e33863c44422a659202b9ecefd449ce40effc19b8bfa583015c75e14951b84a686bcccade0832ffaa97a80f682ffcb17d3d4250f6bd4d9c7a459e4951a91a0044fbb448a63861414ae2a6793d82a3f0f90365e7ebaaf044c373a558bdfeea0256417ed7be5e3e190b8402a8283d65797b718ca9bf26a865782a3881456a0da704194af0efa07f46e0194d3768b66009b82050cb109971a0e16bd35d8acb9dc6f902eac94bc2f6edb541a3f8adde8431a15d6fe9c6b70546d7f5ef55e6af6e58c5991053ad81007e74c8b9f13fefde5382b122ff7f57f296840c2f59c1ea92c2d596f623315be5a8e203b61887886e0304e3aa966d5ae68544f72034099b692b8b29287512ea7beb935d587e654e1c274981bc18a913307552ad3fc22f5d59a6541ab494c5940407c59b1cca3dcd613f353a2e571115997d7f1b19a0615b8858895e48ea4244c448dba5555d47733e2a819efde2250a935cc334c76a3eb6f344ec403b794d12 +P = c940bcfd80bcb2061d7e7bdf3c2ff40970c5158b4836a91bff5e5bb949ddc2cf4683532074cd7bf1323e374c5b5263aefba2eee702c4dde9c4b409c38bdc5940370b36e1bb54549411f4d7392ad2868936b5a4fe9e92af5a0c71340efdd20d57c1d8e34cb54ae8ff2f3b9d165d5e01907bfe8e0ed36e35de0393b69512a6ebe9a4fc1b4f7d5916395c0d92b005773515295e1ec7c3878afbc03391d1a891fad35a78760b0c93108108f342139a0d581c2f922ad4aa949b467623bfc25037bc602cadc58b72a9a507a9775dc486e249058cc486cceea635047914a86a37646352ba165e2365f1fca5b3794b22e9e89556486ac6481b139420fe8f13dd1dfd315f5c35aec28049c6c7b7f561c786982c817bc67804835c4e9cfcd0ef099f94ffd4997132ce9f460e925830a74811cb126a372cda949c867b28fbdad372ffdff7e890ef734d1616d3a41f26a3ab95ed3529ba32d2ac39bf12e7af33cbcba3c3bbd9915ba3a08647204e8cf680938ea7b68dd260f797734eb966f337e13fbd9499a8688a52c02c301081ccfb0b594fdea2509e3db55cbaecb277d3bbe7d8f65155367a5905eafed4d5b0c82b961b7d416951279ecbf0c71ff66e753829a69ac744032cabaf59910adc55d1f3d487bf711e7bee63e0977f24111f0cc22d7c6f00919f61b60cc5aae501e60a704ad9be3f2dc5d8a4efe8091ad9927f93c845f5690d77 COUNT = 25 -K = 62724a10063a4e739e50373047db2a6867986b331aa1351f -C = 154664c73ada63b8a02858d1af460414b4266896b0de7701509ca54a9f34276ea0814cf9979edb4df20c646274ec8b9a8269c1743b63b4b5b2a56970d518a2e961676d55f6c61fbea8371416e19bc424432c6009feba2f10a00c2de85e1c0334dfd2cb21fb7739d40d4453b88e59caac -P = 4ac24303315f6a74fd414be59229ce26497574455a7b8b46d9d7921f84803964be63927bc7688d18f15d224d93795c33292cc9d64c83bae34b26add194f09946fdc0c2616a81cb0f42462df5e978e1a0b2483de278e0a7c543e9184ceec965325fb7741209 +K = 5da1b890ee8fde2f5738e14e3e9b860d5a000b37107b3fcf +C = 22ad6afb3816b1a80ffa5c5db70075b2d3a761bca3d3f61ffec28c8673fc5421ca9a91198b934a357a0e03b97ad5a4c32401aff5792e8f107475b4f2e5757cee6edfa58e5a59fad5a3c36f97b97bb84158589a21f0441ffe65b15fedc2f19e777dcabc50f5546e3822746bc6833c3c76cd30d8b925f67e596293c75655ac5bcabb3ef79b55eae1bf2d9f735c06f5cfffd10e7824053706b403045dd3d1e4b3fab4277eaca61d12cbed4339b36caa2976e658c8373c1db33910ea19d60dc1150e75f5307143a98ece765263078dca9ca5840b0ac066cbf000b84c4cf31adbbeb71bedea44e39bc98023aa285a89116d6ee022c824f21e1ffe38e046cd2506c051ed538e5530baace9222e3902d836ea18ce03919579d311c4d0f372b8ba8aacb5cad10e86ed8437762e348274341f93a0c0de45251597123f3e2d5c200305f798a0e3d37320d41cc34cf7e85c94c7388d8341a3a0f8c0a25dccb8c48ea6a28f588bb644fed44f57df3adee4a48708c275f570a78796446d3b6ee2237678797cb64ff455a40899454df60d65062e371bd8cf77c8573f773a346e47eace86b44dd2e4a93535c98dc6ac1889dea0d9e4b8655ac74ef2ea81a6bf6ca63cd3b7e6fe20f718f7ccbf8baffe06d0047d1c23fc47f49ae29687515e9644cc83b7d2fe43aae14b6b9ee06870edbc17cf57856647857562f82c16f5a0db464b6740314d73932f2977ffd712141f +P = 63d382049b51cb6284f586d6e2539c452e514933f8b7571d45256cfb84e723c8594b7d00e38c827384e535caa1030441025225aea8cda86080d79ef384c1164db7346d3e2f2fe98e7f91f72927ace4922d196e1d910a442eb9c87ff51ecd2843888a2391937a8ab35cfe30ba280d1f8559bbc4398bf2a2c88f1c9fb233eb5fa7ad7fdef952eb1d961bf6c4350c0738abb2239736df136f59940bf6c0790e553c68bbbc59229bcb6019159cdc3de5dd013314e65deb3035a752ac9641d8a9602fa9d13099c2365dfa7bf2af8911c0354062f01b67804eefcae34ebbbb5b3f54ee3f0a9de08de94c91bea06d7e6686c3637bd6d7acb11fc94d49a82c3f69252690f8610eaa1802d946a96c275e3be233c39778d5823729a2cec4a085b8529c70a93f5527fed96c61cc8298602a48dfdf5c5fbe49aed6d361a52996579223e8a6a1f4efbf1471ce67ca756b739abebfe06ed09d9cc9429a2090eafa5d0538c022368ae4a879fa2b2a7455e62091e46f91456dc32ccb2c7ccaf12c66894f03d33f521efe24cb2de84e4acddb85c9dc650458f1a38d7c0e4969b33cf8b7887a422bcdfc2f5dfd752eec7cfc1153e18de5ebe48d230b7e4b0a9cf1254d80fefbc3fef74246549d3bb09d586bc9b5e257ca226b5cbc880c8f7855f17384ebd265290e375323d10de6b1737317ea9b6c72e5920a1abb444e6255648b6e28efb5b1e9ca6c COUNT = 26 -K = b7a59b18e4c88fce729eb753eeb4f32f5216d3f8cf91e299 -C = bca3daff1204ee66e3bd27c2af5dd9df974e3528625dd261ca43ad73f515ea74a97fa062d1a127ac6c0a83c0baad92b650fc6d04d516b06a0e87763de37179f0de39e0ac38b93dadf1bd74cbb4d051a6f0850c7d5f606c5c1a26cce0aa8e523384b685cac6c97039746992c607f0c416 -P = 6c8aabff2d53e35d0cfb697f0333cbb5887a3302f25bcbe34e796282ba2fb928a955ad058ec154213970968b4b8cd7fd7ad2fc202e45771677c7f9743c38877efd4a9139be10b6ac31ee5ad80e10fdcc7078d1d198894e8a1ca01e18bae216eca44ccdf61c +K = d9bef3638a715102e0930ceb92b65a07f6a23946432c1ce5 +C = 3bff6a4393d07e55c1c3c9dfe46a689e91df4de1a19a919f24d20c7b1322c35d9b8918c04e7995d5de38a3d5262cfc16f84e31c3356ecf116c496e1c484b554d042544193a631700ca99422c77003812df1cb2aa2b500cde954b8e5060e5102ac28c6ef4e0f7e9087d49ec53d93d38b29f798627b20ccfee7ca475eefe2685ba546a028ef39db35341a666e2be9ba3838cbea9759a3da30521e53fad42f0e87744995ab77e2520142d9524b59b2f804cc6b9b8bbf980045cc7ed1178f1a3da548528a2487e3237475ad1c26859ac971c58c74579ffb3b6925a8044e2f13c322fc45a0f9e37d057c5fd0fdbe71e88f75d8524b3aeb265ee19bfce8faf0d7d683c410fd1e854966270655e86909f804946de15b3d18d578b92cc3731e0d0155db79ee26d33fcca3d5950d33e6867ff43658f22b3299319a757265ecf043c1b7ecaf3b5ac65d13fe61e062b227167f7810522af8ab9f4aa5d7e482ca2b94ec54bca6cb6276bd324dd26642e8f65c85ff9f4a2a245eb93f416999a1128a3ed05896e38d41b0e497898a4f75f22f4847efa824d8eb6c0f9f7f03dbfd12c298fe9f5a8b049ddea5a784ebe540b209bc81a76463ec0f631ddb58f647ec3a512cc606210b876505732c626510f98609eb32fc995fdabac7e3e5f44774dbb7a2bcec4459a83cf1c1b6552629ec0db41b9cfa399ab52dd2b1eb38a7d48047f07cd755dcd0e6336db5bd43a85ad +P = 6666bc46f53741deb5bc2bef20fc13a216033df228b499bba7fe15e6672a7c40a60d75b8a95397def7e76aa9ba3d8d7235849cb718a375ae92fdafb5653e9c4bd368abe648c5fa90d1cfaaa70eb77810867c4f77668d5de5db21e8119091f393a621e431090a5b8cd7496d2509bf7d2ddc92d8e4091600104650fc9939352c67d1e48dc280e97e48afc5cf49199315e7b1e3ce06415531ea2c898cc2b52fdcc000d84139ab74345e661f85be739d5c8b3c84ecc5fb5fc939b0c0a19829840b5821ad74e94310815dcd4b82c0386f83bcb1387e26fdf6bb37d51513d41f0d6f69eeff85e6195c4484f5615969950e8e1a9a654671a7d6a91da1917f4d430524949ebee4c388a086eeadddce9fcaf83149ddffb0ee7e20ba9d6cd047998af3a8446e3dcf5ea34084433c092742785790eac00f738527166ae37c9f9ef08dadb55dcaff80076524bc90461880bd97974617e03c7f6cead9363d06deef4d823c01c826201a6637952cc47bc6039da97795fc6f3be77e0d109247e4f9fdd70fdc369945e006eb6daba30316ee257a224c40e18e02fb512f3e8537851ab9f39d1f6e8ff2338403dfb0532001d680f39f2866408dc6a6ff81a2f7472040938dc129368f999cb961a37ed12c4a43f18719017cb40c17dda8b0b025112018e8ca8e847feb6dffda5eff7dd723cf442a619309a059eb537799725994bfd372003d4d5196c4 COUNT = 27 -K = ef30833721fc37284932be085c3d979414405df25e71413c -C = 0cc35188108ea822ee98767706b738ef22a270a2d20e4fd93d3cd1905bd8eb0d6b5ac9ea57dcb201d75b385573dee6c43d8554cb4ccdbd6efdce407e41fbc6c2d9d083bf4f5e9dc33608b20aff7f7931b2c8d6a04faf6021cf8e7c2572022e3520fec808c074eaf82bb98d0fe0ef85f6 -FAIL +K = 0b8fa0d04f0e70e981cbe0dec34283bb3232d334366ba0c1 +C = 0caead906d8d291f4a317493617baac0da958a3a4004b794c96f14749e1db74dc5d15ec4f388f4b8c666ce77315f2b7dc02bdc27fdeac74119f44347d856a8a55dfc0cf158cc3ad39ee37712e94027023d9f84e672d992b78861214619b6da183868d5625e721d4a18ae6aab1ed06e2655760ec5c3450e2fc59a736458628cf7d192641d0a0ad195556d3a7030ff12f520ba040893ea5f5568e2eb7bf505890c09f2ac269a9892e3f34630f9cc549c47149fc1155e28699f5e2eac16374ebedb19496e1e64cdec9a5cbf6357430d26017e20798263735f19f96aae4306cc6496f63b95433e788c9419713f02f2149f92ac1a19843ed2a9290e482731ef48c4ed4820f661e6b6baea639f1c3497201e9f48ea98398921eba13d6df7b6a67b569c7217af1ab3fecd259567f516988e6e2e8cbc665fd86ad74c04be31f96738d2d8d24d4cf6c03c4e1b95e7fe71bb23058f3382c64c4c1fa51abd8713b0f1f2171ef476489d756e3cafe378cee0a4595cf8499afc61b01fa8268964d65cb54fa6b071f19e4375bcb03e0413dc16499932a39639d8c2a822b04a79da9fab1a9e3db5ee8c31df2764668e5a745eddc489cd2073cebf74b1586ac5842abc67d493d057aefcdc0da8ad861eaa79d45b98be5462b2e1f6a4238eca22c22f1a3b26236fbb50e81a8b3e9cf8c05f50bd895efa9418806b827aca9fc8736ca46c421a9ee3d59bdb8a5c327f06e0 +P = 0e5c44c35f5e28fea45b9107a33a60fcba5184c4646dbe8ef0093e3aa4b3fede6b8f5442c0b85c01858e65bfe7676dec0c57273de93c44867b01ac24d7f7f35ab5cde20e52f749d3dc2b5a7122c7091029c626a1ae5f2bf3939a2e75d4f8c15d9483bbb69868bb7497b22632a623a7770c89fd58dc38392f0c1c622c6e473e3ef4763f9290c5567b2ba821431dba88e3cb1e2e20e66aa8c3098c3bee4b63cb01e5fea35c300315f07a917e97ace3992705029cd58188a79c0f163b685ed8b1e86eedc4f9d1ae91be4eecb8a3939433bedab3c10d05709d3ef97441a9815b5142ee385f1b030fa8859889c2b93e6e098de7310014b848254839d200f6f430c4712a49e8e31b43ea5c4a1addb16a1a1b97d4c809d8bbde274808ee865d7df9be78129c39693a107ae8036125c4c07952bf7e5099ba1b58128d378703f11ef2c01d477f403dd56c9fbb15d8209f888d0c63fa6fc6dac04f2cf691610cba0fd280d137d670af403bb1718c6307c701039cf10ffe67110f5616799e9ced43818285e525289beb1d890d1b8b9079bb687bb4fa448e7e0f5d26edbe758d658ffe07df53a8dc5ac5167d99a09ee9e71ded7f0c146d28c82f6c11678f34d275b098e4516163023b302c19a1998dd0fc64cea8b2e23134ae03c15cb612d4b69868c00ba6f3ae41eaa07a001ef9b367aeff1beb463f37b40e831629490c2b9a93b8509ceaef COUNT = 28 -K = 625bfe40b025d78c0309f5954d7ceae4b736373d62203b04 -C = bc08b643d4dc2398b4a42be74d47e0598186010a921985c808b827c10a488683fc9835fd3cf588a608eb744b2e99b2fa1f414bb83b1298374480ffd335619cc59455faca91bf4dc8e3e1cf5a151a963bfec752f7b8b15f290c7c6166e5cdfc1540413e155197dd274ec9448fdf1cb10e -P = ad9010e56e3e84a8e9f4599254ec99b587b5e35e35a7ac6bbb312e096d8e9104113e665b41e6d8990829567dcfe67ff6a8e6799b81ed8183ab2b01397e57a6c43d774d805c3b512b0cba5c49ec08bc063e84735866c9059993742a8b6be172185f29b99c47 +K = c3769f2591ca65c72b1cc8e482eddd285cc1a274e332d1d8 +C = 7f1c166d61f2cbd67489e662cfc528b1503fb8ec939adb6f178912f307fa4763fa39776731f089e5c347567708d9921c0d012e30370040f74a7b72125eb26e6cd2518b0322d31d0f42f3f780ba9157d8e4a2f11e74ef004b9eb9448b2d4a00d63f3ae6f4945cc8d92cddb14ff096973d03ce7cd75bede887d5957b29944f456018666ce00a2b01eed1960fa575dbcb0b3bdd63b9e21c3cc90490ef0a70df43e1dc401e67e65d4a2cb89b181cf1c8877816f732d0c7390a0f0beff6b832e5ecfc04a9aa9162cd2e69e482fd94ceaf7eef560ea46f0364a4095d649ec5df3a460a88b1902e2243af7992695a4d46d844150d72d0d50283e2999a774eed1ec9659a13ff70aff18ef0038f06e7ba0dae5a6334adb1ef04aeea1d67c4ab3e270be671f50e60afdde9b7d95caaadf5de1b959f7ea472809c60c5eea7fc4a80cc88e5300311e6efb34e1f20f857a8ab169e8e2ab7f26b3e824707dd1c966fac23b91a915ee3d83f7a67de9c6af5c7ba1c6a3d4154f84debdfd29ec48e4732f4c1fc598cfd7ec4a7efc359d6fa0b4c1c17b6ccf06bc4c7abda1e27f4844cd196462b3592127d5796639d6a4b2a7cc9bad7629d6c67b524acf6fce8a4ad478169dc1bc50352f5f3ca0ba4c90ae5556d51595162f1b8fdc3059a39827351252c81f993b89ba90c942b442e14317bc6869e3960914a1650c22d8d22426514d5632af088a69121576a9f83725e81 +P = 7ddecdd17bb3b936d3b371e7bc7eece74ca1676ec8fdb690567781ce536e3d599988e77f94617f6e810e3f79ff228049c303aabe9ba0b10732d4cbc954be489e7da9f7a24349fa23f587455aaee86d6b086a5acd99f89fca6c4c38419c7a364f670b0998907944c6f1a8a3ca438897e0b294f4808268c0b7cbd9be0fe8bf3845b9692be3dcb38d0da78859d49bbdc8c2a3ba1c8e1555f3a026609eb64f6ae5d2dfd5b8b91df58660c2289948ec67a13ef74cc14462188107ff19161dec23ec46904d858330a4655ba39a2fe39f6f403773f06500ba3cd9de038d351a685f9bfa2895d2015340bdcc03c2d7c2712980046dade7f79917e0c09fdbd379fb9df1fba5ef18689de20120e37e6bea1b9ba415fe598fb4eba0da899a675ec455313eecb81e04251263aef0215b4c676ef46ceda14c92b8dbe1ba850a2d2ae0f0d33fc27e909cff55819dd6ac178a23e443e42aded406ecc5ac92fcc090d9b808bae79b0d23adef296455f05889c4aedc3148998e24156bf99ba3e4493ce91a7081c0f955790b66432734bb3454451fea8c576fadea46ae3833766bb15b6315ed7df7240bea97d3a962cdeb3fd195f716a888432a0d85cc06456e31d8d1faa2c45d44da6e9617cc2b8dbe5dfea3f4bce2a7ef6a9baf3b599f787a4e70b45c9c8a91639d0291b2fa971e14fc6cd24a1ceeb09e74a9de1f9ec058205544851f1f7885e3ec COUNT = 29 -K = 1cbf5f3202fe9f07c9284b421e3ac95fa845c09e2f87b66b -C = 5717a7bc5f4fe6cd742b67076dc48c7b38c1d5432b316aa629caab1d4b4014a62bad635ebde299aa07c47124395c3447e601aa697e675019108943fb8f2e8c5d1ea5730cec2877595dac83daa0ebe04f7bf922da5cabc9d4f6948f8a37dc9d9beebbf7e6c6fbd72f2abcc80f89b1cbf4 -P = c8f6e8f2ad50307ea31274b43dde065f536c4ab56bc97752760fb0d1888d7fd023b496c098cba68f74633a6c003dd622c4e900c2239db6f52fcd6982ab7237e56107e512eda2e0e5ee30396b46147c367ed511a54d6681914d59a43a7f51a6e75fc0f56cbe +K = 3ea5c3e2f4d85b4b53c5f83a46670b1c4fadb15daac4fe16 +C = e63d78e224c4a1f64eec82e6d8c4af911c6f7392f127df7aadc6a41a114c783cbe8943a32639ad5c9998bc87b820afe6bb1117a11e9340003110f8eacf248fc9b8338fdbaf8c7dd15080db5828e39bf65be6bde0c408dfa65c9b99776a6aef9bc12229dd6d0202e14df6b2ccaca8b6fc8e98229e8b9d0bf71bfe8b970fbe29cfb5dd38b18739d836f274d3eab2325177d8d24c2db7da08c1424fbbf4ca859fd93fe21c537525dcce43bf0ab040c9c16e164c47bf52e7789c1af03e4ca49e9f1c501e0203b3c4c0c09e3691073bc9af7fd589dcab42cbaf8c51ed2c5a65e86a99e19f9b03ee0c4a7bb0e414cdd2d091b0d3bb87d75ad9055257508f83fad642fe6d6ae7bbda59ba734ded1002fb9f883fa11b733da03f110903f60c5ac29c6013b07bd71649ff5244ff24f21fd0460c7067bd38202da0d1bfc447d7cb088ad535ba463186325b9cb7f8658dbc815edad939ff5489137f300aacc7879ed800c284e2a2cb9f622e496c994f08930fb83c10c2db006cbb3c41cf323f6d227269b137d1adc8026b3134877696e12649f2f41881c9fffc9e06b658a83fd6a13d746ee08e44f6dc96a7bc987a1cbdce842de34491fda29f7586c28511467a984c5428ab292c9d7c1db9b31c9e50e47ff65c5b3966a91cfc77dd936e43cb4bdfcd8cd32aefcc985f9ccbf17bb7163f8ae27e392d64d0c1a42b2549b0943fb9dc25914fe3f52b9205b0be05b9 +FAIL COUNT = 30 -K = 1e8c0bd0519c8767d94c6d4da8bca743d1dc9b1473d4c518 -C = b680a2ccf05a0f0598609b1ee947218074f995bd0a1a9d0c73179c5e63ac24ec0880995f3a88f4743d0f4229b138a733b7bef6f5b03e22eb8049cb48e179b6e314a3a47baba98095f416c7d563fa872eec1c19cff1e8b9dd6c0be9c18d1174657d5167ac745e58748a0ab7a87d33984b -P = df20e1f24ef8a5ce2e1438cefab0de69335fbe68afae0f8e15890549ab743b141aad17650a18ccf22b086d6cd819341d99c708f86bcf98d53b7894e2256b42f30f918766807d069dbab1ba48ea8432d196c5201752743567520b463ba0c372a0f1a97ac973 +K = bc6f641a16575d0c73bfa7eea4acdc2280953ba31f4254f8 +C = db0e0af017056209d68ce9050d0bfa12a974e6bfdc5cec8d1f01511ebddd6224a75080b3d50d42a872014a22b1d658817ebee0a2aef45ec2e3ad4b749cb58b17ffa4de42e477e6cc518804853e9d2e3b5f56f31941d94c0f75246037a18998aa567ef47bde0f9ce723efa6a0a3c569e5ef5aef12160d60dd0127f62c3036175749a0228714213e3d132d2eaa3d40da8a413bf80092d2a71da2ea4b5ca3fbd93d55e709a7e2fa81fc36d08ff7984086bdf9a646f248b4d3efb7b7f18e976a99bba74cbe806297e280b853db3d54f0342a5b7e56eae631f2411fba71f1363edb16899a2a5aa8cf5112f7b141765f0fec5684443c70d430934c3098a229ed52dac1b60f30d3ca79f5867e9c96b8912a669373322c0d45804bb016523e1b0062a20bf5c8d251d216cb0c1862102fd5cf875077863c6ba194e4b2a4a50ec4c4ea4606a5f58e73fdf6958f329727e52bc03c230f3a615dc01aebd9f38214c44e2931ad48545e7ad1da010ab0be588b2967d96306be7795f695482c3bd823185cbea64915d28e933c320a497167d1350d8abc0798150c3e177d2db64cdd08401e24162a58d02d838f2b25af84b521adb71ded028064d0c49e1f1eeff2570c92364c4092f8cb51562ca88ad5ec90075d5027669ce80e17039d7c56af591286b9546eecacaf3046daa17a2a237fc657975e80a4db1a5a4148254584843f486ecb12d118fbb4f3c71accb91bf2 +FAIL COUNT = 31 -K = b9f7612c696b02c6eaccb310b1107aea3d78a1e7581e4295 -C = b89a4faea9e87b502f72370c277241239a42e8f2a4684f2e32dde59cefd0a1c4e3d82f2e90ae3b1756af4613928f347fd56318bdaf42d80c6decbfed22dd4e83659d89498ab894f48eec93ab8610c0fdf405cccff5ec01e24e158e0f39bcf8038bb306b9319cec54e6880296a203fc8c -P = 63888fd9173cb1cb807a1fece94c036837ce56ff68056afcdd6499dc84f30e1337546c4d96910db6a4faa4e1474aa6981ef5c751c8595ffb5bf8813f4f1462912b963b9da738178bcb69cbdb301a4aa8647ebc17fd543963ad747bbf89b9bd73f96ff4d09c +K = e6d3f8ceec20c3e6df5185301612b0964ec651f2f2919536 +C = da45772060a5df729b1b09ef775ad4294dafb4d28062a512fe01037aa603887d2f3bf255ed02c740e1eab599a10d1b38a6f47b1003c20e003e5bf0751014cc9bf672f4bc21ba31c6cb2e421bf145112e87d2133c17cd2a3daf4e115836c19bdc7985cf9ca328aec61b4c3d6f825bc479abeb3de9f9547b4234aaec0b3b1bb118db6bc1fbf6bb51acb8f53b65341d7551ba21f31ba69ac248f2c9534fb050e30f81ececca701eb9ada5ba60a88fd73f752f78dec815e1f752fe8ecb0dee7de4568d31dc89e415d767049f76041a274fcff2f17000b93cc9cc234ed0135476801ce9f4af60fb274ff8b8affeb0bff3014a39288406baf5eb41fd924a5798bfda3c3d6d8cad0865032689695aa1cc18faa6e1b9db987974a2d93c9dc980a4d7fcd4cac938dce88f240a74f86752dfba6120564b1169484999aba4d132cc482621d1619437873bec0a428543cc35996a845475de7a70625253f011b6056cab69f153ba65e60496bc3957881b818a43efea801b8d027b2e593964b4083c72084be62ea6c5e166dc22059875043b9eed7e65788b4ac83605225b76faa55bc1c22a26db1be817c092f8af0f2293841d86218c306d9ef55e1e498a058b33ab51c0e54407ab50adf026f23284ffc1cd4d13955d9408c1969f535874e2fa64c4d79637ef596704f267daec47dc9aba21b32ea01b39cf37803dcabe80c390c63e2a36861528cbc25315cf423936 +P = 5ca97b0aa90b65745157fdcd63cb1ff4dcf749b1ae7b97c961ee4d65a3390cf722f72c6beedaadf3632fcd6d56a571ed2b79c7a6b7cdeb1672915097152d28c2d70b8d546088cdf335b009715c2871e4d28c7c64d217efd27d37496f0e92e0b8fbfae59418244c3f7b9c5bf6fefc92462be0062a8cf390517d7d1824d1fcc9ea8e8a7fa7293a417625b0a5fdf211f6640b3b30820025285f2cd29feade8cb1681d697c31039c04f5eb288272047a0266ae0caea8c99b5a20ead6780c5df920cfa3dd2c42fcf3136cb77afbed029998cff6956f0961d297b71483e9066de750a25455262f18e64610e05a20c2f83c5f96568818312befb9e6e1a002ae0ee7498ac3f0ddc0a2d00375475d4312ac7bc1534b842b70ffe1994ade29545ff6e627b6c7731d4d01a771365dc3fab47b8e28df8ad972be7dbbf36684ae95dd4b48e132b29f3b32b244ad857e54077fc450e73a4f514f021b21d03423175b643dc6dd2c6cd9d65e974b6f0c392c8af2d188fea4dc4f08f7bdfee9ebfc6585f3bcfabc9c08c78a34dadfeb50699e9f60ccecef9609a8ef8a9f8b3bd1a1575f3b2dd90e9178ad6ae8be8c2f2f6e66f0f832b5842c3299d00d2ac3805bdf2315fb28da8557aa9fbf4fa86fd0406ff536423199bd1e1ca8665f51f0f67e37f8b9b69f4ed1d1154ffd39096309306a7de73279f782d2604203697602fdbed46d9766df1d3d19 COUNT = 32 -K = 3e4645e0d87376e904550c8771aca568c15f6c65f529d994 -C = d526c760f5c94337c07e978c57ea7468601b31747d18ee3fcadc19aa6d32cf7f695f3d99ca54100e8ffe773daf867a89f327ad340a31670b593fda7f1d6bd6d3ee075a104576e532ffa5131725684619b3d838b2a599cb140e5fdfa494b6b550f31366effb75e13b5a8e3b5db1af1aa3 -P = 719142dc85e623d540123feaf5d7e6df82840786aadfbbe1444591c36b1f0a76c9605e68560e92711d761e90d042e907fed62b1a1d7b9ba8eb723990c788b07c0c99e57c0a6cd4ee8b25fcd170fa609faac0ce9c252b4be891dcb4664be4fdd980fd3e40f6 +K = c834d309638cf9fe797af98357c2a9494e30fe046df18c3d +C = b18db35bae8c21b5d51b07e4ba7349dad0e93e03ee5c53b5de397de650d5309ffdc8b8511fd5574a0baee0313ed6d9050a7b22455c35bda52269235a711f97749982685beb7458dd022eb3b058766b5a41e4e43b013f08e11f2cc1a5bb157ec2fd903cda9798ad934a06f5049d96088c25cf680859929e6dbe81843b5ef1f509b58226b2f8f019d6bf5a2b5f3a71a5db34c62ede77ec42635b66039736d8f7579903b41a538c837ea806fa8526301cf8abb28fe0b1c9bae8e6727ccfedc665e7edf70ee836b0ce5caa9e98999ad58950ad47df2439533992f9c9d64221a2647697150dc46e9d8f21ce74c06a534d811cbd3dec2ee0d8981c2ee3956a048a32a14880caf0a6ca03456936bf16a9d76c62439b37fa926ee7a07334f4e525bc59c43b1bca224c88df1b6e1b10bb44e66c19eea8a970f4c502676eed28de511779671e5ff0b4c98a9a1845d82158dfd3e62b76088bb961e6c555b8e403e1a2a50b8904af5fc1cea730f9e548ec52faa1d877cd5ae47bb1c6cf7c80d45af75ded779ce462c256d10c4f08f83d0a1e299b34f47699bb580ca80273be9a6b3847627e50708e92e70cea6d0da21e52180130406b0b74fd93e063ba927cb2db9be9e820f110904baac061568e47aceddddd4fe08650f228f9b738b773cd8084383ec0617fce7dabf089760b6dbe249daa38fc0dee4e38603c454aae001b1d9dff7bbc683b67356705f16f99ad +P = 2c1511a43fb099155af718e1bcfda8c747a9b2f15c2f06888ef1d276b2c429b6eea41e4d6e36c565995ae8f771c7814d1e23b4a308537b2bf7e8edf218a44cb90624a23dc23ea9a3e4bc6d4fc03ca8404ec201b8ea86890078268ce4dfe02c2b082be3c59cac04a882490de1f581a123d2247399d61821316f0d019962e3c75153eb414580f1d683f9f11e87f1fac09289fb9b263f3c82a0d80637693952b7a3ecb7350ef0e5f5875ab09cadae44ca0ff9b53e4548e829e6b9f5bb70fbc3fda397bad5a9c5ddc5caea2fc3d921c1c138111b78e66c9759ba3abfd998b9c17e45e8546eb44ae1e1a8213a6be7fffa114cff2009ba8d4cf6cd2f88ae87b4901aeb7ca216fc46183e85ae4c276f6adb18a618db19a5a66170fcf02547e89e3fde7a87ea00284ac0bb7b4c831c306ca7401e1c762a81e3058922d727325f051600c852cbd922f127f06854b60c098d83f1f9b2d6c1c936fa0472a05cfc4fd8d8efd977fe5f196db29bd5c32d6c810e6b07c1ce03e027714ced237887a03f920e436d9c345a10f2dae0f266768c76476b7ab0c78df47ba2a4dbad6f9832b5066bc16bc17c849bca0a03d8487b30b804250347929035f1ac7e7a4192e221900170ac2d74ceb34898bb67b873ba3d79ae379ba8b96cc0a67d8194c67395ca610c8592379406b7135edaf898dab78d30fc4bf6e036f11f933bc79cefbb560b3c7d06437a COUNT = 33 -K = 3ac949004041940657e668c58ede7d22b65c4238e4d7b67a -C = 045fe5729f3aa572f88b4d9e66b94b91aa0fae947eef89521a74250f4ffb926b76bb41e3177fb05267c0477fb05f7633557c17d13bd192c56fe84e68bc9d796371d091d12fa15004c4588eafca021fdf469454966227e40c82332d5c17aecee5c2f741fdc43213450143fe6aacf62364 -FAIL +K = 1f1a1fb687801b1c4341f7c931ba5b1f4d69559a104e1da5 +C = 885e9a147c2dfddc2300c340855406d6d718a295cc7c833dfda04305287f74a8b79afbcff084b4cd855a3db668e8cae7574573c7378629bf4092bf15e7a7eb4bec3e258cc2edd14f36c9d5b1993a55fb178e48767d6bb8aba700a7922b841d8d9468602613def743018a0d36d54ffb46db94d83122cc83e884f1abcd48c08f87c1a15dedaf38c966aca1619592f670b99a4486e6e7877dfd8fb57f613b95e5b9a6e24a3d0e7bb71269bd7c06d619314a90405d4ccd89e593bf74fc3792e7625762ee8544ddc60b5ff7c270cc6d46851b92dc0645bbef5daaf5f088625b4b1bc250f0b56d061ec94c777fbb6f1ffa91dd814941ca9ba1eff15fbb2509107610cdf91e6a0e312ce3c744516fdea297f8a63708c3659bc001ec3a9ca49619318455055eabe2a4608451c668b8f62ab40eb157710c87a9d4958379cd77f87ff3eb39ec5036eac1d70dc8d3fafaa3ae20ccc83ba1dd41bed81e5466726f5802448951944be45ef6146cf44430bc65c81ec06e7a20a87e434d8e9888000e1402cb922f3e7c7950ed1f5a78971d13783351e4234e87494d7641a332a53a8ca71fdbe547eca3e217e4ca3739021529fcb8d5ef922a3c8d0c60be8d0dca2f9c085dc5d735bbd046659a935251d3c505b9869dc63f998a36d3c87b877fed11f208cb4f448b6b343761e759cd393a92883d5f785e6bee8c304f7bccf46c262db416ca3b4a907dac1915310a4ade +P = cd4bb916216c098580ddd1f519f8a7f2c6d6badfafe02c00e5b613fc0450aa2cc32249c5d2b4a4e6012d634677e0df373b71fc9676ea0670c512e10712ea78937da5a7a8313f855ee26b4758c97a8b7e18408a61ac993cf3e2663701a9eb0a7d8718392110b35c23c96ceecda948d3965f618b135fdde2d14d420830e67df12cf127867ba85bfe7cabad099176f77a4bf585097e062265ae83e5c89e48276b19dbd1f42b9aaa99cacdb26519aa9193ee63794ca569a83726ef7ad6652dbb8523dde4d0cab92b64625f7cb92a407dc60765ef1da73d8edfeda92a39086a87cc9fb34706a484fca5bcd4eb3355eb2d0d124f15d67d4c44986c580159c3effc1f0fe880f3d9c0bc311ad56dfa45e4a37616ad047fe1bbd103cef4b004155f8c98606df201f5401dea7303e34431d7521716c531aa7fa1ac4800bf9045924f89ef380abab9b06af4b247dc9e205f2ede061201876e460edac340020acaa26e8158a8158e915b9f955fc375dbc41c5c324ba916a307f4bbdb3f09f128bfd4ed27b25f9c741f8624d9c8356a1c27d0620db38872fce513456d82fcb164c64198475b3fd6e6d6e8a5ce3a36f195c4bfb31a86079bcbf6e2238ff5562d6934300f36ef322fe55f414ef9598e1400379fdbdbfea6e4f44ed5d50ec849dfc65a231311cf213f45816fa3fbea336346b4c60076648701934cf738061900b2baf053c1f13343 COUNT = 34 -K = b2e2adc85c3eb27b89a9c88cce7cb7fece09e9a7d2f94716 -C = 361f02bb66a6bb0e8af6299afaef306f315a5f73485ea1c966f12cbe4a9b439004439a48e70a2c7ec0f01bb05e07b17f12ef944fae00e5842f67e04478c549ef6f0386950e5fbc718a7b69395a69be80ed722cb74ff344b8e5c3c4a73d93b580552df54e8dca818f94ae39e0be694038 -P = 327d72242b5773810436d2550f97328563ae1d236f250e63c92e367eaec2a21ae199403985dc83b9d58e1f0e8b1b1f7ecb9159d1e679201c5f2f4c6c21c4dd13688969b7c00f7d0b60bba0ed5a8a99794d7735a225496634c9d2aa9f58537425cbc125f386 +K = d865da4a7df839e3f113bb5aa8b2612cda83bd23de411859 +C = 60ff140f679d59727e1eb779ef3dffe83759b1e2d1dd1573e45d1527b708e84099fa7f8453271eef8b962821564cf730df65379192a8924454ef44d90d9c956bdab3dc2cbe2b4b09c44c165217d1c764ff9cad306688b5f2faf335b457b9f9f398eaaafee5a7ad8bba67f0c2fac34904775e84a3cbbec253d5134532eb1a4f2af2c401c7ef72f83f2a592eb45b08f881ada663caacbf91f2a2b5872bb89a8a4383d08c072e10dd548d7f71941b8915f1a33353b9cb9e704e682e9bbb13b67250e073980cebe4d8c6c8b31e3fe468019e9420914b8f45cc5cabea7bb4378128dc662643be3d73509bcfe132a3cd3fa8861cd0f525073359a069ecc3fac1bc5c7d7d741960e260a8bd8b5198c4a5b7da30555bc479503b6351a6e2904e5dd6729eade047aaba49284b924e3b13d9e5023e6ad83319aa23b80a8fd73b5a4f4a89e2060555e83f9635ebfac0ae8f4725456ec9c4944c3f0e8f3f1da5b861e04d1fb993563185ec466229bf311b5fd4fc0f1847bd0d643c6713bd1075b3c7c55e85037c3ff6152d10f93244b9c00e15e0857f297e31096bd6836dc2d678a0a93b6ae5cb1ef5f4ba3f36f5af2ce9d2475bfeb367a24ddc88dd8aa4629a6705c6a0090545787ccceaf2be23d944b821fc905e6251e2ccf2e25cd15c910bfab6bb1575886473560fca4446ad6cde5510d8bc3da3a88380dbf5bb6621ba645979c1415bdc2a206d89cebf081b +P = 4e9b331cda757f6fe3cad51208151e8fcceccc2d4f178bd7cceb18b0fa456ea036d7763267ff019f8fca9e8f1126dfaabcc8397cffa34a3c6cd9d3259ccaf5edfeea914a4c56ecb143f4080fb67ecde3612d1bb067648ccea2a820985ea1288e51cffa60862f8d1907f258c56534783e939bd2ec651f1cb0953b7eed07444ac982b45ef7a45f5cb74a94dcf1c1bc9fb77ee51204c8febaef1204891894dd0e02675bf5ef25fedfea7aafb935236b49b00592e0da44716d648ca128a90811ce33ad11c2f6f0e1c496d19236885fc9de8432b35e18305528ec200513d7d86bd002f11f4960856c1562c325c002a70a4b2a5b12711aaa6549a1c95a62de04703c885675bef3aa278f82acd4f0ee862372aa34905e074712c3d91af6ff23e3fa74585e70976781470a2046c5e5644075b6ff6cdc541a11e83a5f822ff8ce90f9fa8d2757bf372945cee914e54eae4761ca282d64b363b51911ce1e9c395c73ccc07550a1287b2abdc4edd488cf47f8463fa9bb381b9f69ce845293951a500b8b60832c0ddd97b1567e2b19962abfdab47a62136079a609a603731ff65723a105ca1be0e62c5c5b27a6ef3e234d5533d518c077402641135c846804bc90c9cf081f459fa965b0d243591c025e039fa38078295a92a9df29b85b8bfa8d4a17872cd055aadf447f72ae44f363a88ce17453d354e466ea470749f8e5e3cebd20e96bdc63 COUNT = 35 -K = 5c591c8613b4d2f1bc7e1131066ecf7a33d1a51b22ba28f8 -C = 6f5b8b9a751b20a007c2f01f46ebacfcd84f7bfda5b44d092d3712858104f7db597e2a6480853bb354b008a803bb8073074f873ec9cc998b04aa437d1a9de911cef7db5e722a8571defde09e56810e2b14450490d06eed42df3e4cfd041f7e058bf0f0fec9e267047464a3ea8375cf8c -FAIL +K = a5dbde804facd252e6bf2f70a26cad5e584bd155cf80850a +C = fb7ade0d2516683cc034de49a9d438633fd15f5ce1ae5012ee2614c74d918e96ad16152d6b7491d34763253f50d66fd18d8e87b1a64af283178ac71d13ff76d4d2d66080fb2285724b0dd0effc7f1a4ebff1023dc7dcfec33a1240ff5782c3df017c1f5549cba32a84531c4d7da92a62d59d114543c7a5a17dafab11f1a38b1d1dce71fcb1b83606cc41ba5d8f0c528047318e7fb7e459f9859439f4c11f3aa1443d1dfe44f299ff214264afa7458b668091d949d9beae9216176f37a98c7bf83ba3c396a085d807b5c298b147266f754855c2a07bcd041cd0f4a9e11e7474dfd0cd57be95c48b1a9a76a836589ad83534b307647ced6feffd0326b21498fd066e66f6c7f06315ee44967af4dce9dfc63a0e5144013cdf72f806eb2af335b274649ffa45c53a093d2972156da0ca2ce1bf3c5bd2e16eb248c6a4019c214bbaefacb05b299f0d2e1a1be94b38a71da97490b0a235d912d4fed5bd7947feccec7b6c4e26b3e8a4b50396b57ffe01b6661946e1681d2ab7c34325cac94ba850369d4d4d9c749a97fc9f184fd90f6e98956599641c31e9b91c63a480fa6b1906b6388f2f7f805280cbc83e0e950677f30a3438b7e9fd21d218f6b77afdad16730ec00727fa3b3f7df88fdf0348be7e718c7ee794cd271e419657ca82ad4b83dd646ca888028ebf3e5624acee5e868cddd3a2855f4e2bfa831e9af70443c4348b6c09bdc424e3aa74ff45 +P = 527f9abfb807959e1769383930748be5b1dcd3b9ba59830d7ea98cd7ff2a7e4e7159ea667fa321f15e06eae3fae976931c3fe3b6b581acbc439b2c4bfb5a659cb278b87e11c3359df5ba77e47a2956a21704c92a1ee1ecf8bc27989d2af5992c9393b9b7112b60f485edfce3bab1660693ad87f69d3400720242b71414c103e7b199602554b03d3290fbd85928e05ae71094d176f3c73103c4eefe4b6dace19bb6ef1315025222767886c87f71503354b3cdc2accc3c1d25196ee799710288b1b8d95cda3c08093afa8bc6c468d400af98dd34be4054c637f384324dc630b4df345d8e5f67335c0b7b26562c560c662ff216214d937bb1058403ac85d1c4e8b7fd6bc10837a5540a12b7767626b60bce8393e53787898451419e8a3fd7ccec54e656ec559f843fb0da9f3bcadb1b22f98a38415b70df1ff22e5a63f9f65137b2f88a91d2d642e2b1879611f0b3ff663273ab718ad47f914a8235a7a17d3139fdba7c6b4b7979666ca60c30be10c298e8ee22726bd7499e574bd4064f3aadec36770d854276034e64aebed1003cfdc74663683ecae07235e1444d10b4eff2e5a36af008850285c4e66c93817fc5c26b83b8ac7569c5925e4bfa16dcf060089125a3bff2acbcfe4c857b36afb2fdab4b9170f9d63c1d245929bff8776ecd33ad278d632faab4f4aa33dd3662f43ce4af4c113742be268d76a0b8a5ce72d2ffe863 COUNT = 36 -K = 72d8aa0f64c6a72fbd2ed020e0ec2a58f04d52c30a8bcac4 -C = d93c4cdc91e8429fe5f9ee4dcd2e63e33d0a9937085cda43fb64091a4bdd3642b7aebe8d71c1f4eb13d0efca50c0be7eaceeb3a4629894826cd1fd75db2afd40b4c43ad553942c39f2bef1941cd24a7bf27453d497b02743f7fb81134f8e3c20a9ca6d0c021b1e2de8deb1fc15f5c429 -P = a5a59fba12c43ad6903b28806c9f2f00575aa58f60af473a16e30ecdd52cc1b0161ce2bb263caf562073508fc425d2b9211a0b697703f95f57a59ed5646b174327c7023dd0a3643fa1e6817c0ea1c5760d1e61d97b8b2bcd8c367988d5641120316979cd28 +K = 1f5c0174707bdd237ecf237cebb898396f9fd18a0add4238 +C = 14c7713bfec47f6fb036796cd00ccc3c31d76a3615b9ea03cb1a04176b7e968d0d51fdbf4ca218ad5e386b6d6c0dbd53b971a3aeaff778e2eb8873a0ac3d62ba656738bf519cb8e8ef2222261446eac771a88c13b8cfb946d96ab1d12836aa73691c2ba1bc69854743df22d30320353a2b94038627264a9ba6e2136c6c447a15514b386b0082dfe9bf5d1e73758e2a5ff025d4f077dd965e38c876ba81f780e132d379fdcb8846c5d69c97128633be95321ddd987a871c90b19f717a3d4f6045dcc79bb12bed7a1e8dfd8f82d227c1381c133e29619cf2032caad6c3e8ef91f0027acb94149a11fa198819b018baa0b084afde7e39b640f2ef726964dce29783438e70efda692e99cfd1e51c93820fdf4aa4269fba33227a22d07bf294dce4c7d952c39d5a220df40d5c8c28e4d736384463cc0c8f165dde925daa5db4555e26fa600f7a9104b69956bdc58004d87507395277294450d80f5b624358d675351ae08ea84d2891a3b48c01ab7068bdb05dc3fb8617e222aa568cf1ef3e5428ce6d015cf834186ea5960f14edd59e0edfdd9ae9c496bb6b81c257c488d549dc91cf17fbebcd344042457fbca500e18322a5dd80d50fe3e77fafde028147cb5fcb1302b707ac2f90b9605475520eb88c77cb70266fb9a27ffe260f2b76353f599db116c4deabc663080a61745c6484aaaf4ce002cd0575c795763fec6c419181ec56982e3e270ca15cf1 +P = fdffb0912817206412cc2eba8c64e4c36bf46453e960fdd6be5abdef7094e06f802bd723cffc723e29329dc6674cefa5bec750fff87e183f1edc67cb2ac53fed238ac312a4e310a4421aa18b2490ba68bf32fc556cfa4b298127bf40b2e7bf220da2f3b5af576c943d1ee3636762cf6f84561055af350cd9af9b72ca24089f5b489018d59b07b15eb857baaff27847e26ff63619199dde2a7ad2d6e3e6b5d3d81c53aee1cc79f97f3ba6a4e580d5763bd5ff5916f92e97982fe6dee76001994acf6ea641ca48f46a7c459857e271b735d23b10739058f963fb8172b9fb11520098f6240b9ec77f99c32ede9581403a5af754f89af466357f207c3e2192f17924d27d9643f32110f979aa0534b428a9168efda027df8d10f84179a40dc575071020586ff431a4a935d328b6ca2b00b088fed8386bfc7381d7d686baa5c5d43431b019d5557583b9332a237265d1de58fa38a36966b5f8eb2eb5cde121434a7c330fe95caf72dfb1c2883ea855a60728f5c7f1508f5f4f59371efc8b919b2625036e952b8055d929d075b445706217dcc909ffcfe62068b4f9e161a9b53f34686581842da47e7c302e92fbeb731a84d44baa9e087156eee71e8252b65c27842bb5bbbb0aafe50a40699e902e2eed411e5d0cd88d1ba48b888aac22e82f5f4c2c9bd845e1f10dda8396c53f900905ff83a4884d0af692f4de99c9d47db09d9a1946 COUNT = 37 -K = a1a5a753fd799cf38c1478c3e436d7a7e23acc7a16c1b17f -C = a88f7078370532d494a1c2429335339245c0f469a9836bd9a81572665e5585b06641f15164efce3a53e2d71fbcd6417d2edcb8706515d8fd2250fcc5208799b55ad98073b85c4988e0fca96dfd920a9c29a7499d2b52e6e2e26ac6467e6132d88a2dfcaaa58261dee0ec72a8d37a3f9f -P = 967e7baf5e181bc1b16f67bf05030192065d91d573e23db10b903778316e480c0203395980d53d2a5cecfd48c3cb898bffb08548844c56267d6d1974a2bdf71608835f01213e67a667962717c8714dbec02ec5606f568e37056893cec268da803ff74c8f4f +K = 2a3b9c65095434a2969cf925fcc47d9278a426fecbb1c7b5 +C = c168bfe7cc08f9303a0532d164055149ccebf2d066ecf7c0124eb30e984ddf92090e4f59a4630b777d55630f9042d9875a61eb87281bfa49aa347a38e712b6d8844da65387f917c585fd42328970cd314c98d2505792e47a9756b7cd9030764c534a4ee9cda3ed5749248158fe9528d97e5a5460c73d1560680f9e6b56cf3bd873bd9aedb2b6131add3981f8209491c0618ff8c472f9cb1e4dda1d3dbe3a37223763fbbd5757a6d8e9dfe5bdbf829fd8eb1d73cb8875d91c0eca3f69c2ed24ff3b4d7df5a24c8581193d9f965f6b6bb0dc52128175f3856d3627a16c54851a3065d983c040c3930b7a67d6d1f2fadd1870ec8ca668251b096c03e072fcbbe5cc7098fa8b8eb8e95d1c3ea6d3c0096f307919670874be3c86c8865402b6a73ae43dd2a1344488c416c37ffae999a4f7419ccf39d734067fce910e54b15b8f8926d80871f5438691d70710bdf58a6bcd00c021092c688097a99381ad0d34ed4ee39d7e3faeaf3477f1d769cdba86983a13e85c5d690244dd5f642cb6662ed889d8431b9703ac4ab8159d3e1ae90c4b2310d508500b9fee2acb192ff7ec17f3a63961c27ef881ddf499a5a367b43ce110fd58db5948992dba390514fc853942f42fb93c780500fb60517ca2deb09f015490acb72d6eb387ec4a499dfdddccc366168871ce77791b811128ff8d20585c731589bd99b7812d3370bb36cd099275bfb1a035df5cbe6d0015 +FAIL COUNT = 38 -K = da31cf67316d8ded4467ab57930ba6bbc84e7df195642f70 -C = d84352db1f2ddba2f6d2a670d7e0360bde48ae3ed441921f29644417656eaeb807529bb6271982aab8adb73fabcf1c86487e9cb1b03eb9093693d0c1326a410ff4bed4ede44d96d66adb5bd0cc21b321cac2262d10e8bd9d8152c5e548e723d449c6e880086be9c6340deec4a61ed2ae -P = 361d8e5309b1399105bada066e18b39df13edefe3c9ea9027da11d79dbecbabb40ad3f6521e4e05273ea4bb62e982c4ec095f5e076d28a9931cee552bd0ead10553ae6e9ab0af2d8ab9b8bf4e646df3ddbf196605a1c57d3617f3f706b66cf938f196ad7cf +K = 81a13cfacc96ca91108de20822c467222cdecdf4bf603b77 +C = 617b5b0dcbaa10b17c68bcbd02485cf5c9b4bc08ced4b7570b7e0fb948d8e5286ae9f4fe019cdbc865957d3d620c27b6d001e2156b966f7bdb301bc46c3aa9db6eb4b0897a0b6eb2e442b587eacdbc88bfed725bc3cc85dec5b4203f7e105a6ef45a91346f090e97048816b4eca8966852d93767562f001106350ed760c8e9d12cf74376930a726d1f17d6b96be7670f5b75454cf592bb609969091fc6c7cb2f6245a9e9d19287793ad1c126ebc3f023521e6b905de9a6f69e4126d84bd7181e5411aa1ae63a440fac817429ff26eb48d380a06169f69765039ba96954f85d0d54087b36817e2952f9f660f8bb5417c9b614ec3252c3e6916279a6da7e92ef1cb12da96da2e3811732adbb9fad3235e610dcf0d17eee4a418e32549fcae96967e3c7eedffd4410108131692d57306b67a0aeecc90fe3c323a138ea515b33a5644436c0c76a07f75d460a051f66db95d4dd167e5541db8ae9dbd94b50fd66b0058234a3008770fb4e7b2ff8c41f44bd62717003a1d13452f32d81e7f3efc239b1ea16a60077461c86413f9e2db898312d27a6a52fc046afcc836e32502e472cf5ffe7a1153c8eaab138bea4ebe5f8e165a8eaf1b8c6ff103ace5da5f623f0cd1d704960170acc787f21bfb89ab90ff03084ea3b4db2e1356b592fbed8717f10e26b2d0ecba493e123fe7ff098d212294f9a1dde14f8ce4c2e1ce4dd031e346b3af3d13a57ea0fb588 +P = f35052e2450df120588c6274881f5075cf8740df6ac30650e2a0e5c78264015508af8fc0ed5967bebf130f11cc00f2ab051dd6d1a6e722df2905e7361adae693e0c0c98b2f7c5cba1cfb68c09f2edc39c37ae483eed9da5cd3cfcd3f62f034c6e2e428a9ec9dc87f93cf8f5c8bb513a10c88c4225a4b88d8cf061f2e445b765e944a699934ba9803f66c62801ad874a92f4a9c0190cfac1489c910e7043ce12f5d9c11e164759744531c36adc174c2e971e6c63e77e28a947e82d4238cc335d99b40459a8849ae1d123ebaeabcac7905a5437d3ae7d4fe4277fad8bf818eccc94ea8a27c96b34c02de4dd6e2da786e8303f7c18d08b48a32d61639c75520a6e579c14fec4ed232ecd4ae042c36692dbafb22a1baac66070a0f6c63dfa03495e677ec247eb3846db7024a6a024b31d4330cf6ad2d150bc007264dc59a55011f3d62d69ea4e4e3cd00f0af51c1c88b5db9bb1d2b216352ba8d137e37f083a6b9ada38b9bc6fa1abcea99aef17de4e357bf7c5e23bc6f6f561c11fe0c9ae5fb5aac44c733ef7664f5ec59ac5b2d6f60aad5587de62cd967903787fb625854843dc1455105081eeab73cdc109cfff04e111826f4015e90255d434d628aa0624d28ac971b536cecf87f1fc0988e24e29c1c8b05e7189e5d437761786d25334d1e6d745de51a6c367f736ac4710e6677a7ce20b06becc2d9d5912579d8b46e4e640028 COUNT = 39 -K = a10ce004693a3bb423dc8ed7639b70a947664b00a76f5255 -C = 0bcac7d1a3972147873f7b40846ce59c734325d1ea3a18b6309f90ffabadc856188c3399d8c71787ddfef390dec4395bcb9ae9cdf181bc2eb8493b77b0d56e685f33230f0b0eb0a21ccb57584c4c49f782c60d1db721443d7ae427c7d33526da9e4a5eaa7ffbfeaaf04104f53272dabf -P = cf79389f9334f9c7de19d3206ee277bb71d3377078d77860c4cb91005abe099742527a2ca3569b2b2ebb2485c468ffa3c82d71327e4fb8d1d8ab758ea140aaf96376a2e4b2f1a3f21fc0fb186724cca7e0bb071545e9f5a28df545c941fa64d94d085bd9f1 +K = 769f168bb40a9b2ebda513c375fca630b9772375cd3b02be +C = 6979894be996ed5b393f6640a75a9249ed7c2e71f89db9d94ef12db1b54bdbf8fd3995100f3af8ea5ee7fdbefc9601931e97859bf6ef86d18a00aba3b5c85b8edea7836a73bb6c7106b872193af42ea57db719b53fba9a72de80ca5a3da9af8401ca32b74e821a7a1f56255dbc466f441b84645ac68436142c41fcd63bf9760600a2e857aebd80c6863805b8738eee8bf1a5800363373a904bdeb3da3e13a07d633570bd9e6f2371e847f9b4edc3965d5eb4ef6e7a20720abb0aebd27a64392ac450d5066861412741bc2739f00945df59064899365b9ef5d51b24564dcb1149c62681001d5377cca793683623ff5760148ad22e06809ed4ab3dc52766e0fc8fbcacaca418b170fd408b64dd82734181ff778b91e3df1db971018510d0c0246ff227e84bb003169e0bb7eadeae5e990c5cf877c9627075deb4ea6c1ef7cc504656eb5aa79beeda0c3b3d3f49ad87ef488ba2d343e86dc4e467d7ae42ec96b14254dee6fcc35db48575d6376caae287fc8b30c7c17958d9b1ba8554de89eb640f37a5aa937e3d253844404436658dab7c097cf95ac304e69252139f37b00cfe7488b63f7f8467337dba7bc699e36aeeaa887a15988f71f1062a6b137fc1a88420bfbc3277ea4ef03c442ceef0ee988d9a49c1084f4d1093e33622f66c1727f607f109bc30b182f307403580a7116c19f022cdf2ad87c1e508d2bc57409890ede6a20ec8312b68b493 +P = ae8823853c81b0c30c379dbdd01a8c24ecdc35768d297e67f5b38be56745cdb58d5723f2f614d68101e18046ea6e42dc0cfe844dd1d0d4159e46e7e876b985f77cdbb541e5e8128b94d1e76f8e2848cdd79e2406b81822b6cf8329d0fe1af183f925986132463ddbfacbe684a38f195485ab8be4161a4469093f1c47952ccbd5fcc3a10c17fc8e436f1ff3c2054d7a00afe4cc560db0a619bb569f467d1d2e7207cec833bebdddc4cdafb5ae1df66945113f44dd6cc7166bfac716ec8435f96f2544ee655ebbd7da07311747fea12fab192ea9efe261602b1aa967280320be3413f71a9d6f495af41fca655c5b3653c1a9d1090c9c27f325e7af4f35265100cea6dcc6f565b51604992d2e3be8a2c27169fc4f6727741b709c4a492b591f1586e2de9930a2678a5aac3ba8166832b69f08d73ae8f8cd43080c93cab510995c8532fb564a19ef3b24308db478c6975abf8aac6876c5ca485835fd3bb36b8a720bb0f47322f9a2d722b3755138a0c602bf78418ead03ec3b68f9b4c590a3cc21ae90f57feb4afb53823e8fd07775b46b3f46afa03f410f5e42c43526a8f82f002a254e0ee0a3bd6f9af18400f86a917adbd90603cf4e89a7a788bd2a7dc16de44b31d2e214bce70cb60dcb64f7776474ec56e8ead9d9dcaaa615f03a12b12a08fd0b9a80dea1824c7d034d273731a7e394aae49c6afe65b15769c317f4d712ce85 COUNT = 40 -K = bc7b1f67d8c3ec1636b7f8ecb32129ad74633676b20ee4a3 -C = d0be11bf34f1ae511bb4475ca653103b9ab8e85db506a72fc2716138d68fbb86122f00112f525ca2bd18b41ec912b97917732ae0fc5b5e494c174d5d7a6239445e7bf606c690f2c724a0e45a328b9bdb8293426326015f3a7ea076460b3abf18c766c676c7579cdbe8106b2b539ead87 -P = 7bf0af5c4ccc13390646f566e6875d2408f7b23db062369073cfca122060c48e4e11449b8ad4390df82243e07e08014f2cbe12ee18b1fe84d4db7f45ba8571695ac5c0775161ce7d0e89dd71484f376f958dbb2b1f4422fd4cce6a92a3f35429993331a765 +K = 19b3c263cb4f75662c7ed473b9adc5d4edf941b3f8696c74 +C = 1734940004909811e1550b9ba9c5a7d7be085fc7415dc2606ec3e299540c77e1e8363edda259908551dd9a7086352d7ea8090843f8f05fd51fa7562ecff9d7f68c2f41fe32a237fe6fee30bad161d775292d427c9608c98d1198553f92ff4e91323d937457b71e60ea5052b9fe0c71c8016e234bd3756ae8f8a5f736ede4bb3625f0481be922e9e53ef8effcb720c01af2dfb28cf420cfa203bcd6da1199eac2bacc6a880965e61906ca7a5682689de7b82fb1fda518bdb90746d44e337f9036b803b259e4a738c21335a5870c624f636754b843b09315769e5e6ddce27bc11107b881ae37cf8cd5472bd325c4754d30e1a351169e2b9a86989d4e14e1fa1a527d2c453e9c67f33f2793dfd4094c5774d2c696c3916a9f32907802d303d9cd7e631b7cacd65ed9556659454a6d39b2879d45262a85beb24994856d70fafb2fdb2082e712d0fa3da0001fd373bdedc5097750bf0b845293de1dc9705a5cda8721d21f1ccca057ad92f7f2083bb1a2ffd56f59b67da14af6bf05125f5577483213ffca2ab6b5f5ca8371086edfa96aa2ca82fd9c0c6c1fd5ca8413b2bd56d25f7a919f3ec66d6e34335bda4f0ee9b3339a19de7555f3d866e0a67a62a14bec74910ebdba4a2b63f898400f3f128f7febd94ed966d3e4278de3e160b8fbb7efe83c193d5bcef74325d359ca4d1ad753f08091818a702755000dfba7a41640aa53e89607f679ab78ac86 +P = d7f2f60e04cecc373076bbddc219d298ee1af305beb30737ae7ae48bb0665f0de43ca0a6c46b4cf4befe31fd00b1e8e6896dea12f7761e35ca3623dcd99d460efd32a8610b97be4441879b6294dff9ffffa7f2b08af321a0a289f56e42cfd7849a925f71b7d61f53c950e705e01f2c866e0586693b78bc2aa0acd6905cff44cd9c0ce6584c5b6db2c5627313802efbcaf37ca0c0fb2c39407640abdf4859b0a711759d69860d0dde37643ce35930434556bfda467828882904c457be7c5f1b0057e99c229cdfedf1609657da17a9eb2a716fd3b2f2d029434bdfa5788b4479c150d8f59606bc26f98a160f8a0c3ab02024f1b975ba33ebe7b6579eca5e81f35ee1f01dffb847431999e242f100303d68eb9f227db3f371fd1c1c00a78072242bf030610d646e9d462d17a85d4a8e6f9a1f69645eab17b8fe9dbebc617fc3e024e2ab6dadafb2641f4c01807e23927d6ecf479647ff6b7cdc185e9263fffaf83293339cc39086ac6edc080d289cf1fe425501abc20e60dd672f586de5f5ea7547d09150494d25c9a54bf45d33a8212c24a5a2b579fb5d474229704beb9a56689e0fa990b6ac3466c7295e928760d4a2f70f387c6f73eacb1851083a2173b32543e8867ed38e91d48215102666089b73f4151606ba28e4f155aa450e749d7fec1b43055ae11287735b4ad8c3b0690339db64cb41c798ae02b267a1838df847e83d COUNT = 41 -K = ffaac766c01f85b8203509a2a8615e491da88add39730602 -C = 6e8c279260661c7713a9e0ce78a03f9896425b8b5a1ddff1f8f06d4cba80ccb01480014cd6ff95231cc2c61994fd6dde4967f09be177b4b1da3bf253338a209e46964ed7ed5e5a3d6ddb0b530a058975c2dfaef553bfb63d26071d3c9ba11b4a19ad88d663e75d10d02b45178c0a91f3 -FAIL +K = 1a3355a5b6759a0b99e4ad3f6c97175b080a1463f67537a7 +C = c456ed4a279f50d252d571d57a8d10a4ff33113fd88358c2821fe1e16450e89d3769f91a9d5beeb5ca4a0f30ac9f2635a5d98c0312aeaefd65550ec1e213b06eaeedf7e309047c21f5bcb6083bbfc7828208f606eb7c296d74d6fbc6655de047ddbb60cccbfbb216b2f7a9475ac41db6ea7e95a22acea47e93d3d055439ff44ea7302ae07198a6e573dfb9bb0c684f85fbfcb6f090065a8a0ee10daddc38fd5e2a89f5c9501c202836d191bf7fffbe497ad1891ec33f5dc9edfb7e799cf7c0456d3daaf9195805d986f52dd2e7609c75ff5d58704150158f8db83cad0c816ffbc253246b21ce5fef0188cfcc63ea56de05991c4d647ed5a902f9941307d1e7fd1d0d63b0bfeeef92ac4a12cf7b785ffeae99690877f5c00781149a07302c70d722463a5ca89a01ab3d77319033c09745aff44125e9c3b1d09bab34010cd4ed9e1044468bc351f7631d8a2616bbbed9acbec348932357200fde298921c7d6f2d64a329192a36c055b05b1a6e02834d5c0631058532a17e855ef1b45d18223dbdc1732392c5168e54c8c8c259d60436010aa1f7b8af1a294202f948867e16f70bc4959f2c54b5a093c270cb21f2dd3d4457523c5f11c7d18de42eece7dc414b10a62264aa499888bb6c30b0cf2c50fe7f6d70f69be600ebf059984c079f5ae7534aa9834e3f48802d93d7af73ba1ec8b2161a3fefdcbf1ef91fcab7571f539c8a67f50253fd3eba71a +P = 01937b1664c4792981f1bcc50d3e802697a5594e2dc6cfd32cac0dd9079f73a697d79ef830decd768a5b13df99f3884a3c96c0c3b2cfc57e5acfd84998b6a48cbf3336b5afbb4a29af6882d73e2df4c6e8dd36016912856e181c7adc6aa95a16c003c2275ba31bd75a87ce36568d5ce32babb275b26dd50bde035e71131f58cb3f5f2b1d2491ae35ab02857ad5eb3b003681f562ebc5da15be07ced830244362e4eac833e063f2495930479d368dd8f333bd65d86ccbbbeea84c58abbede64404478943ba80edaf3b1430ae1400ae5898a5aeb8112961d3629b337de4c910785f16732a2ec3fbaf28fc0f7a34219fafae4e487ef87e83f881063efb42bf7c6c8f85623906d97aead5f321ab637117ec94e2b57a6b073aa0782922cf0056af6ecb17f0e85a9bb3edf912b0bcaf2d8a4946fdbaf60983c484cb0a1a599c009c9ddf40629f10cf72bf3aa414e3d408c98cb10635741afa961d7c57a9de0b403a81ff60cd7b98f047617bd13194a02bc6171c59e144ebb9504724c9ab401e26f8bd8a218c7f860132944374df4d800cca065e3cb3242a550045bd68608fd45f4a648d0c193211d434aa7df4bc53852ac85f96d6f5413c541c98e06f1ac886dafc5eb3e381ce944d3a4b3842321bea3a710253e05d80433f98a892c557cb6e19c226216e13ae7d2194b320faac080108501c74a47a8358129a66e4e43a34ce0480563 COUNT = 42 -K = 75532bc3818d76b0c7f679e79e699ae66dbd18fa80ebb45e -C = e45bd92d74fbf6c6343a4f29e40efb7a40b7abc9b722d4e23da918373c7cb8e756ae00ca04c9f5546ad7212fdc1ad38a92219db54831f741bc687dbdd450cb151bf7c46328845e24be8140c7152d429688d8526e4b18ffed4f32456eae6f77b3f877731bc61a2d945bc4ec9e2d6fa371 -P = 438efc505da71b76a3a825225bccfbd1c2e975fc4d201f082ca768ad4acc94a08a012b9f002a0d42c3f3933ce9675c3358f521e3cce6958da726aff896e7ee7fcb377af107d931cd548574b1b2682c6291feecd356ef9fb467ed2526b7dfddd9bdb4ffeb86 +K = 9d96ca501317ca425668516f3c985175199871640bec3fb2 +C = 771476260766c1744c01674d1a4fb163efa187609a8ec3520c8bd3bfea305c35e620b513ace88e9f3a51e422dab960fb503766a2d8dc02b7f7e81ac03402aeaecce0e748db71819382e4a630a3b008968be2eaaf66cd79b16c0bd260ace7ab49e3df227435f9c60f0168de413d6bca31dd6fce1889cd9ac04c5f818607697c02a7e4c9b2f27b58938f9934e32cd46688418ae73656c76481b4ac99964857390a58b389080dd86ee8930ead03cd1dc1827d68afcd0e439721b61a1ad5cb21760c47710218be89205a1d3ca6c14355edf9291d219dcd2ffe0d5ccded6e3dc7559a672e2b8243708746c94cd699d1d2f619061640d2e71733523c6834f4989d45ac82c992d262cc63510e5042a632c8bf09e4042782a2b7deedbdd313237f7794f3294af24bc7298ac9c295a865da5e8fd34b5556e157745f2299a4fc118c99325cdcb2d6f56e12a6540a0ae1e7038855d1f202b34da0ee5d04db94d1a01f0ac4946018743a3c6b7f95ade62d93b73f0897eb7a955571859eaaff11646bb435f57ff7954e4e3779d7c9bd1469e882f4e13a90d13b48a701465090120fd3521cb9b776ab10c07897fc5207ce1ab453fab0bfda7c67cabfe98af3ce147c429cfe2d8f0555310a993e27f297de8b67810ed17816f307ea8f77ff5813cdab90f3913a695bfc3f83b1aa24126fecab01a5a5e36330865effbf755785771fc7422e0cc27a599a5bed6409a845 +P = d3b8dfd23d5a7951e1786a0828a56b8d4ac11193633cbb2bedea9784452962946039858a983a3cee1dca6223571fe7f4650d2186e3e47f68cdf660adbd9b4aedc8a8d2d5c4f9f8d157b5ab5dfaa204ce085bc70d198ce82f12e59ad5300112a91fded02b2892a5df8f24caf10f6939ba29c080308847332290180400874d42e0a6c51174f6682044b04e93830e8c781f67173dd0cf9cc2a06b0ffc7b3c101e954627ec0c30b5595befba8e02ed71b2a74f0db2c9709752608a9bf74c132202a10ac98bb709aa76eff2e6af614a210a254d8f746ec8289edc1cf88388394dc6e4d987eb7d0a5ca6992ddddf398981ae0203e90b678836b19bbd174b220c8fad989f3dfb626df33317bcb2ba1ba2cfa8f5e9b7c108874efd22f5af19234e86c5ac0358bb11fcd5209d6f22d6e5f11ebda33c8a05ffb96ab7a668fd727b07072a846692026f07282c222ad14ff35b7ad557979b5e87d74ede50b00669fc306c27107fc27d35d39d1d8d4997ae3e9fbcbc170c3b055c01ec261bd46e1b8f139fe42aa1a84810b7cedfc927ae2d08b4c101d2c834c7ced71bad075433322073ca5e2380eff3bfca1cafb0103712ba619db38d79bade505b36335cc28ddc82c3cd86af2344f740a2346110445d3b96f284f147ff3a2de3dc9124f9cf9991d4bcb92d4a0cb9b3c90591cccd98bc30452557b6f13319db46d1ff1b842a610fc4e85f2374 COUNT = 43 -K = 129abca91887de9185700b5953c750a365886bfe568361e8 -C = 536bddccf04d0c91ac8222cad844e9cf87103e70bc93f635c14ba12f43971dd785e822d86158d96a141a647f6c7c5cfa8efb8ce7375c02b0a5a8f1672f8fcb1e9b7300d3ad2bb14bba919dee22b16afe8a69ee70e498d28140ff225263d5808b8d248a848bc9b499abedc5a985d67006 -P = bd7b689ec54a3a2b80767adbc7a7e1a731bf49062281d8707b18fe320ddb394d16e0e7ac50b9e9b6e116eccc59bc189bd9bbe58d71d938271c61636c66d5f01e020c5f505bac2a667253572fcbdf5f59f3c8628980d0d059f9c450d3f9500c5253ce11d7d5 +K = f9b4dcb34a002e4082468c936847bdc20be8c61021f97d33 +C = 6d4d0093b85c7bc47c937f375c7c0993e922413d1aafc58fa3058660e92432f454bef5b6436c6734ab47fb78f5d7fde47a40e931643df4076779a9e4675ac968c5cea5e0b40ef772fc194be88a36e63830fc2eaa59320fa8934fb65246c5e07b57423bfb359cdc863b9769ae75e9b72bb9942ee644fd1a68853a84d2c0347b2e4a60bf9ccc06e48d9fd704dbc9bc544cd96ef69109cc8db80a6990c67d17482a542714f9cdd04b96632b125ed4eab2f7fd92a376259fdb13dab7e6cb82b28302192c19576e178a0d87c187328762399db6949f6ec367ff1c3e610304dd3af47c6d09dcdf1fe547b4720fe091c83b92e989a329b0f2883076946807211b98667c8dc00d2b84f3354d0dac20b53183892f1c14dd263ed0e8e756e245c60f92e7f0da23c4d5668a2e726164db60cd1834e5e82907af9caa54dfd508dc08ed814d316f25a16b8f9f73b09876181474145840d0240d23dd0367ecb50b5d2286023247342c2cb0499d45d3b8c385f78709169c78225579d9736477eee68a13eeeeb6b8320f45f1ec843adb68a4f4dfb31c4ed3dc7b2497ef2dab06880d771556516f3eb18a986d3aa6e91de0a55b7f01ab578ed02c0f9bd5a1666ed742d1fe92ec0db72f6cb2abb19a874f2cd945b53745226a510758900328143da8e713a352c5fa7f288885824466539f8be7944108f9ebd589d6b33f87b30b8d7321bbb9364dfbf0ad96e978cc1e3113 +P = 6cde759002b3019070be645559219abadcef42b39b92891533950af8921173694e9b57dcb4614c021f0fff333715cd56b9507cfd9680ff58bac00cf11d9e22c727ab1c9ccad2dc760bbb49543aeaa44d09cea98893ccf944e7d05269f9929f4dd364726ecfcfbdf6e7f0f4514299b5abb2803022450dade343014cb47dd8cf37be1f6ffed9bbd1f26b3c478f56fbd7d42628c63878d9ed1007916fe000b175020e51dc41e030f4255c0b9d7c49d365b427d00ab681db86ef20b402576bee9ad59fb552f3dfc72c2d71a25b362e61ec6c484516fdbf65e88dc48cc694716b6cd289016309228e060c67e51e6113780385a75690914582f2546a9fdc262943385d407f4632d469a83b61b1bca4c927c140556dce7f782a3688c985e178699fce2469fde6e68c5a494513ef0b02e83d0e6ed2274ddcd7072d568d24f6619b31237ce1859630339e6ce8d28729332ec81c7a4c8214114947bc98818955c1fe3f14ac0bfaf8291feeaf440c8a13141c4c8e2cee493c39732b603e29a1aa912213fc00e1a70ac0296e587e79649f0647cd9e90847541683a111c29c9f0fcd2763ada108793fcf3af3ff47e24f366d19e4305d7b1c97d34ebaca26afb6511ff5e8bf972b29bedb7d6f48f606c67ab659e4177c35b7ad014157c94ab849c82ed9aec7669aa11d10208d950d0f297c2c65ffcfadf87c352d868ba2d8bd3fabc74d5ba5b15 COUNT = 44 -K = f43628f1617aeb68d5a7138db60a8190b95b40f57d4c18aa -C = da4078b90d364ee91ffdf25fd09018620f75182c381f032baba37660ac632f644a900f707ca725a792cad257a4c807c8c4fa03fc4755a3311322d30917b2b92d750696876e1f03cd6760a0048b80e0535f09832c41689c4113c4d068772c131bd514e35c02d4552430b5a39a78ac2375 -P = b7f542a9e35be9764043445a7a5ee346fa6b74eaf5fe4bd6240e5ced935966d413f67a50939ed107fe8e3f78d80f5efcfe06bfb5d376b6deb4e91dbeb3eb6b08fd780505de3fa60a029766ae4ba885ca145760aba00200d9ba19d19e263cb3f180593796bf +K = f7c1cae72fb74b97d609633696907c9244676aeb30c7ed21 +C = ff6a422646181b718df613f6ea29de64eeb4603e72d08876fbad8fe84daf70c69fce3ab7e79d8fe99f696227992fa3a5d69b3e355f61377fd4e357bee8aa15b2020e435ee428ddd943898c6630697b99578285caefca78f67ebb73b52570200900545224e5ddf91df6f12b713b6249c6eb8c45af5c71666500bfbc96e0d94c88e84ae3860fef1f06e85be203a698b3e0a781729848c139d073154118da98618c1ac35b4c0bc4c93ffadef5149d95789ff2ae67dbfe82f33247f3fd45a04a97783bb4966e82d6c6b9e940c800e0dcbf396b9f0c2f8c4ed0e1c936c00008deae13e136a9e1156751296fa09c40a3bf043142ef840cb39224fbb90491aea4b9826ee2cd2fa19471f987996988609c4ec889a1825db13d6d9d2aaf6dec63f7597c99caade39fd17d2dcae3ad51061938714f80b5def01ea66f99de12b94b0327f60c0624c8040062d57387515791e31f466c1377c884fb332a6b2ddc6b7e610ebed977f10069eabc4e954b5efbc8b680b4d022e446c5cb7e1605e2135c6e2ec68020422a49ef8671168c63ff712d6c6ea167c201bfc76ff47cb5a5e93e69bf6b5861f3b77bab3a4b2bdfc9da1db6a2fce96075f21963e18d8db9cc049ffa51e007b65845f01e576d17efde52bb0d68696fefcdc7bc611f10fb32fc1a313f6213677398e69b411b25a4ef553b8ba87110163ca8266cb807a5de07628114788e9bd6c20e7c19c03031cbc5 +FAIL COUNT = 45 -K = 54d8ed78d98d5f2a4201c02b973b0d2ea9ef6fd6bdbfe94a -C = 57f27185e4430e60d335661a0f45b6b93f81838ae03d519cdc15fdb78b284cfed423d163d433458caee73bec9031737f4d14f75e315cad6e29dc64ab959359b8426d9c9e45c2ba1809512db0e6fff34aee44d9977a1c152a3771e8787dcb3648a128c87557bb7e3a65f677d3e87614ba -P = e87732dc95210032d636f7bf5eb4f125d1bd1ced9d652a2ba11fd532b7bfbeef61f8ead1d7783bc13ce1665cf087a83ae55ec659edcfb8a1b49e55af8e361b34405eca21d3e011a0984bd5003a5b8652bf9760e223d2d73c7741e69d927c9ef4c95e543e87 +K = 6d1cf9eaf45cd3860578c788653dd0e69a6b0ba496b510b7 +C = 543161141eaa13b6bb49349ef571eac17dcf439e814709468c0073887ea7e6a822d5d9d2e2acdacddacda2a9c0e3f0a54588db40657672e4515bc564017258fff66d388926735f0cd75215766fdca3b70dc68a1a0338e65234649bae3f8e75212c53d58437107118cabf18a69f1599224cdd611b9e67d386a66e5338646815faa0796c7dd6d131620b73bd417bb4cd3aac11e580a6093469d8614518dd74e113fb2b6a2a9ab0364d8012f49e2313ed5eba6a6b914db9efb8e19ec14cacfa2a25546eb3d6a1abc5457a64aa620c8381c3ab03316bb979af9621ff4fc348213fe02d28b3970dd83b538eec8ae5193078db131a2053c2daa319655c50ed5379a33136b6c8bada9ee893ea93ee0250452a7b06038af75545c995eff3a5137ca7be95b561b5d1825ddc0f0c218f6c30c16c7c8bdfd8f1ab2fccc0c339053d9df2ba8501d754824e583267c7ce842505bb4bdbad8ac171100a8d41fe7f1904a9245c2657bc12087477174acc5408e454c1e96c1730d51ef139c125f70c31d5c4fee96b531a92ac881ff004161dd8ce583c8637f6e7adbd3f06e3d7479c3bd6bc14c1426311294b8a01a917717b0d6f5562a81a05313b63069ed5c1af01c8b019f0db94f4f710b3be72b1692cb923bca3dd31a9c1828a9666920f8c36b8e2c0a8018527c696385c9ba06ccacc82bfe137a021d219dcc4fc832faa8dcac12068d3028febe9dc88cbafeec603 +P = fdf269ef36bdfb24666b3e18d9b9e7ad07580c78e2ed54d533adb46bdfcbf706b5ee7b11f009f05f1d3bb5f9d5b0ecfd887228c7af35a2cd0a2a7dc9044e5936c58a5d2cd8f2337257bc93cedc7afb52ae595cc016b205e16de25fb2f3a0f1e985b39ebaceb1fa699fa6876c95bfb3556d0e5b9c6c1b7b861d412f0b3e538c0668bd3460cabc1cdd9e882b7973cf0f089c0910bcb131441804f0b3dd4c8a9bd3c9d8cd4bcb338695c52d867a55f5d71021b6c9b94fe083ab5fedcc0eccbe5b16e2ce3e736cd37d5dc832192ad2be1a283b58808b65d58d5a060e413a7c339b38bff7f2a68a6f6742b6b9debf034d8917520e68b64c438d282b7d61528c30d9116aa902f02b199f24a2a3cd794eb4e579c848f0746948ff3e364249c3d470aa6b410b1dfbc48147e17fbab3696a343b7a9e22424fa9d5f8d53222b31319af7095db3560f6743a658e0fc99dab35217a1235211a64c7de225515625d7eb4ae8415ece2884d976bda9078c4090255d7108bb56c61a80337270a3995925d069eaa24334ff4133a45c262a025d27b3a2c1b2ef487c00a8670042771b9f0c24c4dbaf2b88ba0ceba6f2b4972e7251b761b7074a2ef0d90e7d765363137d6e299ef43a2964788aa191598772ee42863e67e0e4af5126ba8ac3d04f5e22b4bce288827c3421d857f830cf874f71247d56491f730d1416d2d7047b934811f43e4b3635f82 COUNT = 46 -K = 65b8896c9a957403bf864a9ddc7e14e1903e0e5f51996528 -C = 8d0c12b5b0ba524f1b9c244386934a25f87c0fb1a89e9e8261b1e8db54bc89eda01d3823c3188f42e35df9b60c14bc6b9cb63f0c057afe8397bf95706946d8ecd5f6b66026644d73082796c3ad43dbaa8fffb76cc72dc9fe54b8610bdc906a36ed24fdee9bc92577dfe3cc5e4262c6ea -P = d443416b83b2b5cc2e144e292a73c2035ed018cb9798c4b1bbccd9e212328cb8e6d141a8054e9c58f15cc2b5998658b7eae8ff4e24ac236968be75b4e7cb37b16f3a3354ca726a73890c736a02ab0f120d97ca98bea312b45357ad7139fc4f6ff77f4bf8a1 +K = 6dc71744cb9b190fe320d2484d1c36ca447867b73bd06e91 +C = 238acfe2fb7cea3d1171137f88de0d472f94e3df06f00a775a73ab0bfc21be089bbd4f7e30f5fd862475e0b8de6dfa07eab4932190fc4478ed039b4d1a8f693882f0658bf31b4a19c02f83603a1c05edcf68e7ab55f0cc72d066890404221f2360a1b19c642c63962a2d74a3024d61228354c46f9cc918cca758e7eff350d9fbb4dc5789ee0c7d5bb977a779d4894c5825c1b53da0c6d686102c1b00637a91b9822ba24bc0c629317352c16bfd56a9f0ffd957e816d50e19b67479bf7b19f9ac660bd822441b02ee25a4e1ed4b259ec0fb7ef12cfa8a4be083fff7a9d979075c01fef04501b22393a8ba3f1eef7cb2abf886614c337164dfcc2a00a8e4052c680c963ce1214d3737a7366934dc2f662ea500b4ef7068dc81acd78bca52be700c5aaaeb892e37ed49bc075e38a890fb1971cdb9c86b54d5d54ec4f266325a738e681f607c12a47ff7e7a93e0d796940f52ad0bfe7d32345b1161273a05c5351f52607f4f80b02293f7705939171d11406267da99b55cd6252ce98366f3ec2b0bd004ebecefd1eba2260866c93b948af89f397260312debe596234afc57561e81507b641b0254785e3e518b2ac7061de14bf5232207d605838452849a7a0f02afe61f639e7c890b9f1e2ce5ce18550c36fce3fd2199b7fabdbedb2365e7098b1c08b3849ca694bb2ee580c7643404a0d0c51160ea9e1b84a8baa892832673ac8ffe9f0ebb4f55acffc +P = 502b426b14940f5e00144e3d740dc3286d6e15ab955c60044cf871916de22c8f204dfbc295da5b90992bfa33954a80c4b18078f43acce4deb097a1d8b1210b476475539e501c697ea379c68af7251fdfc11f9b4497187183aa6efe1a361a6e6c9b8af9930f37686aadab3ec42b90b33c888b9532035f9795c1575ced624532de03819553f27cc597bb7901a124973f30dee9b75c3417847d14648ff4a047d8a3bb4facddb363d9a87a8ae920d0600fe6f48ebb8a7c596acfaabda746302c91f2d0ead41aa3382d79d9163403cc54ed6ab93320175c595de52a0bf58d0026223593846813f6ccc03de7b05c34fe698fd9b4ead3fe448bb20c3e1146fc45400042fdc004855e39e7b7cd8f5279c835a1aa76516f014193ca211600788c7cfbaf6b8086294db5f4498de0628575e173b83576312313fade45e38d6864bd5b055308ca265215683cecd4fcb5be1d8d2f211b2facc842d1fa2a0d3231941f80192da0f12a8cc7c301202234e992885022f27405f90c54c0ee6d6b3699a90a1072b02213e2b12fad0a3c8f0311e2824ba4c56412573ce09e56b41cae44e1f321e450e94a75fc227e468c52823dc99d8673ab342e665bd0458fa274795b9f921c5254da78015f95d6b12ba68ec1123c5c3ecea94b437c5c8c748e45f2f4f606069869bbafa4ba07b7cd431814fd2c9087b9d6df5643456cccc449bb5ea718b2d6722be9 COUNT = 47 -K = 2fcd2d6174953ec1c0b2aa9d203e605884cdcc98eabc7131 -C = 66fed0d7945f9b8030de5abf4b8207d801efb910409595942026c234198209705e4fcfebd3a1b1fa32796acd407883eb6cf029139f6a79f584cd3b7234b21284b5d9322a2fa22d067ddf2d2ee725aa30fd00991fc126990880bb9c8dfb4fe62483bca9bd3c50516bd5af844cd6d25a77 -P = 85aa0da87070370abfd766d55fbfee885629a6728885e719775a76e7afcc4f72c6ead78387421461fe7c2117f987dfdfa94affd46a01cb569712935b290ad5dd7c3c30dc002be8c902651125f0242330abc324d90d444dc953a1a278985823aea4fd6f8621 +K = c293672307cf2b6fc2b80b9a73b79885d2c7d98e0ef4576b +C = de83576765c9e9c6a1390caae37962d9b66b4e244c8368e1746b4d2beb66c0471f98dd90c7f402192f42b9e9a26a38c5477cef74cd0623709fd6bf1af065faeef6bb2e53190b96739fdde20afe9d1be5c0a50c443c580578f0c4424cc0827cfe242ba57dbce61e95c603d8567a58ca5d329d883149f728de3b9bc45af2e91c55b846a0cda71863da13f65411e828404ddec08ce416488a25b527f0dfdbdecf961180b8910df908b2b27f443603b0832ca95b8e7bda9d0dc5799e3c693526a7a78d3c24331856daa69dfc8dc1b124a9f191c3c5aab40d07eefef097186060896ef2e55a6b42ce2fb8eb9c696ca39a9bb5db8b84d0690878c64d979c202220b5c1f56f0f34bb84565d3aca4bfcfe8d0fce3e53fe06a6b5a952f30e6340adf25dc36cf98b4a7e2297dcea1f13f7a3d16f4499691cc314741f02339932596a9b31819532996278dac4c3e9c8b2e676c898bb1775a09abd49002ea5ccee4d0f94a21fd1e6ffea4fb625fa264ec2e983f341805e01fcbc6e004e20f408974811d48152f11a75761a0e93c91e892c9a23fed5654a0ffac81b9cc189504ade849d38cfa336701830f1fe17e043d64d4606ff2e86517901d418edf2ef53ac349ee63e14652c62dda359790923f48b5d41f9fc6bf257f10c1fc257e244ade2700dfce35670bee0d5a4bd682312673563ad78b18d144b76e3d456b699b224a4115c73dc930a49dde9b30f1cc5e5 +P = 8bb9310a761515539fee2f445d66afb27cd11a3e188d54f50fd16f9158219f7695ffe50709c8dfb9b3ce9348f28178265abdfc1f5a901575e8a433356623ed236ea6ec24dcd579131fc5cc7f00c8e7892e05ccb05700a1cf0694534db40e7b945fc5ec91f47ba772bf621a22e905cfcae7757831e91328e3a8e79dc7417dfe056fd213df765f01799cf295d8b314084b1b103fe57f83dc214e89d9200d3d8c493102d60cf0af753e9472a9dfb873e390525a2cebaf8460766ab16e2e92642d5598f1fd3af6bd5440f49b42946f461d655505d28ae4e8d6e565197f7aa35828898c8857db8ef332b93c06b0641c928a2600a088cfc0bd909acb2809196c875d57cd3d0b2b80388a6470e7746b7399d0c594b90977de0417e11250fc32035f913da64e8cb8450ca8509a9f44fd0e1dde16c32960672e26414bf49a62ee9680a8dd980dfc1185a58626f7a3a01d43dcdb9df5ffa351c8e6fee38df3950597c71abb567402e893e863eb5f86aef70daeed94a01a27ecf96ece4d10a8024d803a1def8b7d2a9e46ab65ccb645fc54ec42f8378db9bc4610d9f53114e6bc2f5e1f3284f92108096953939e8024bab351884d874468d18439ea8fa9ea06436244e3d72f97c125eb03f0836598a8e19de896ee11dd2eb58e08754b98b927f3c6d53949a440fe8365a7e470c0f9efc317e1a293596d1b8e67635a724165a7ac8bf1124cd3 COUNT = 48 -K = f795ba998c8cc5c718e50fae32caeba33225ec57d925a1b8 -C = a2015224d0d0dac85a904e80aa02235882807cda31fb039ea69c7dfffb05f713e4058c87b6ae405c992d84e61e217199ba8d6308bc76a3e5aef12584f1ebe08db94cf5059527a9b3a8039cd2b6de02a83417205b5f9a73e2a154de7897aa46882447cd5180ee9f380911cd715afd5c4f +K = c358f7c430380b4ca836ea41d230805e1b66d7b720440e58 +C = fe322485beb8be7292cb635583318a5be5ce958fa7e0cb00bc5c0260a6c0ce61a2d0d67a72f06bcaf4bf2ccd354ba21ad2f8ac4979c8c1f1ccb50dc6b1592592d162bb90f85deea2bf229f058ccfd4e9b9f71cd8ba78f2f5665f1f3d97c5d8e2f0485fda167af8a7bd0aceabf086d063ad7438da95fb28c2321471cc373e5b6c804f5339b8f6c1e7e3004bfd8c3bb85666c68a336bcc3e62706d15c91cac4d7e3951247c2d179dc1cd7e41c8395922ecfc213f4b98283b351e0d05c988e339974e1ddcce4078cab74c766a021320315f5b8ce13afe9b669d469fc7b4eb93f7d43a26633c901886467dd67457f1f0ad7631dd1f4ca1f145caca50ec9153ccac7d60e59e3e36b902e15a7cbc74cae04ca10f8eebc2c76a60bbfa763ef6ec8ff649e428f07476c5f7dcc2da90f36cbafcf8c48aa8b29384ead9663ab02f3024551bee743d0d8164346bdc063636348e40e665be52f153f18bfc882aefe8c53b60d52f98af048164d230ee8f348e28f31e73669348a0e1a70022f06c882402074e4ab1d1dc5dbab5cefc3d874b3f4499ec68487372d22eefd18e5f9f92b67d8893e358390fda8ad55170063dd97c87f551e5b62cdd39fa20145affe7eb8d6587b012240b31f483e9e7259aadcdaba971c6c0ae194c2040152676cfc53d9893fefa7153971987869fb328be35e0163171bacdd1234755b2dbc5073bf1da72e498b7b49114d9eed10e04df FAIL COUNT = 49 -K = b296fa178c617626b2045143a8d0cbf43745e3fc655a5ec1 -C = 4d0165a7eaa01d8d6ab8c95e58fdd7eb5958157558bf19cc23800d7691abbfd59caa8a1e7888c25fa29499943fcdff4f37e1b2eca83f0ef553f21e09e34e449ceb7f7be2691391e1152a4168258b760ce76dc7ca42c7feab1f7b589bf2d05a9994d5d768731878b7a47a1efe6a5e77bf -P = eb0229c53d78adbe7ba9d0258446c7cc12a8d5426b4c426e95f4b1a2d4eeb862dfe96589c3f241d5d180eb3aaed2f5a42ef38a625d924143d9898e48fe748300e21b1bd945ca3dfbd40482d229c6ca597e416f2e8991df35e8dd7bfa397c038efa024ee36f +K = 7221a6de5b5256fcae3aa9e862d61a053e786cd4d46b0926 +C = 9e9b9b67e9e93f65856916aaed3bc4260d5850bdea057ea0eea8392cddc67389ef0c0b4919cca893f15c76814c672275eb56f2e994184670140583b6850f78119df6ba094b1e81f95d357e1a7650e43bd4487a3d29fe2fa2be86ccb47280a21ef41c2d1a869cf3023cca9a6771ed605e013827647e56c4b1fdb6fa5dfd5ad5043a2726c8ab742161ff563e76fe596a7a844d96c5d7859a8ba552d9cb3a876175992b2fc19a935939ee76d27e25a48e2437fd4870b3b2b38b82e3fced7d08a15b71a94523cc15df3757c8996eb18b7a2b552270ed88210c1a41745266c601284d7510f4085099888b427d834edfe3448373d138b556233d7fb9d2937ee85137efb15c6f0593e801693473aca97cabc2142b7e23c73ee65c3d4322b4a7a8f2d6e6af60be1284fc6dda8537b594821d9a8eaa1c48ce61d57542845e44701bbd90fc66e4e377010771c7e30d9ff05cb87a7356bbc8a510e586bbf227df7237227403a8406c0784321f55824119d3ac48cd3e111c5d215aec000c7fe1e8cabf42e90d6fee246d808fb0871d3b06ff0a0e4e9d61730ddd46356395e35947e755d8391e061d10851adba23116e06a4adad84c1d3425113f9c1c6891ff0c5a17fcd7d7a4af82b9e26bcc184e6015657c127af1f598bcfc067a963a14c3d2891aed172a3e8f9e10c2397395502a9be7afc87b1c360d21984ff8001eb301fc9edc55ab86d297a309a5d25f40fd +P = c54ef8f3cbb6be9f4e668d9f96c70092f85973e3b4f8ae733708f8ce38a10aeb7dcd660779211d55922eb7373734db785ddc4e0ee218a11182038d364331976bb01274f3a17a3ae77c5e752dde4bd286b8d12d17ae8573c5f515006cfe72756507cef1da59cc3698982367f9e9702340241df3695ea4a548c3305d8f464973f6385f823b47bbf061d52435cab81563b7cd7faf9f5f76e78ebfe3322e10781c74274f29f9e4c212b1418d59c9ce0e02c2ccdca68cb9099469bf756850f61cae5855567d50aa058813945f001fabd0a556e05a2800cbab2dab63a727bed87091caabf297da2cf047070aee2cbdbac8171b2c5a246e446d1ead46aadd7798dbec191a10defedf53dea6aeb58318334954e75cb277b4cf68963c7e66c2c0546d8bf352391605afcce6ed052f25347e378fa62a3c7e95a7b7e45bc0ac206d56b47650ad1573c82d3cac02d525ce89d392ecaf1a08743983b226227b609137da7d2bc92b1839085a9735721c3f170f8878290a06dfa8f16f62fa6066d77049112cda2e9733b55827c361b6467f19dc9982ef96ca5cafd14a9fd987bad4e7e527838b72547a56a7910fbf7d8d4a76bf622026800314f5441c4936f378bde68a6c424d821701324fe033ba1dc17913b79f98e348781f1bdf02b2a8cb9ec29cf87a0ac1320fa4ed2c55942d2796d18a84b85252876a7fc33f12a9974ed3e92f86444501e0 COUNT = 50 -K = 53178a9ca45d314d17e1905ca5a008f7f481520ce73724f5 -C = c5f1273368ee7f2a10baf989f7086ca01c75399ffb95a9962af250285379043e53dea270980d6d42ad1e1f978baea124f58e57c7831c521fc92dead3fc331dff1f383600f7bf974fc013cd4636238c1784720fe9c65a9f08144ae6ebc6d74d7e704ce2c225e08e9cc00bf3b840e49b16 -P = 8187c8480355488d133a42b8059f1017209b9211d3d8a8d82e50f0c28965205c7ab7dd30fb15bfacf8a8ab0f68b71024e586229c6e109572c6afe3bff05fa76330efd289a9a9225bea2a53191b29c7d485b351274482c6e7494d5cc7eb828e97349c4c87b8 +K = 6554df639836c873751b2ceb025d7006a072333c34b9a975 +C = 477fa3ae297f97b51d1e4367383d4fba90cc422acb76c7f70bbb9242aace28cfe92bdc7acd3148ef2b03fe2aaef948e7d0f59dad0736f304e8de29a231e97e687cf34408819ce72a9c79d4407dc7cb7ce916d8dab5683dd6f0a3c19a09cffba1fb7f281ddcf4f10fd9368e0c231c8f5bcc8b0dea69721e5e31cf20fa4b7a54c4d1697039beec731ae549c9590aa5083a60d59b7881abaa536eeea9b16fa94d3eff47a89f64c877769cd334c5626d473c0a2b6cb929613347794373be1360d67b94519bad5037d5180aa0d1eab75fc3287fc116d08926daa635f05248489d821b782b522107e803c7bf2fdc8cc32ccffdf6a6ee618388563d1a4a7d09fd3396261a7be193da554dee8f2f8ce04dd60598ef268b123e0cef291acc4ddc1eeeeb41487a02bc537d5e141952c94b9f74e83f020627a2f9db00255a84b78ed709c52da47f324725afb9e45dc625c16ffe8a037cf358702a6c82551e1c8401ed179dcf7163a6335d1ff60e5743d3dc75591913f20e47a97f1d02de987656e292fe31c4887b06934899203efef7c696021d09b189a0312211fded8e3bbc67cfd9fd4f2b9c7a435722c51f982f2e507f2bbf2ecb21d252cc83c199ee628bf768a8b839f25eee0efcefc1ae62fbd416e77355ca98be27351575284ec543c63a723d16839f3b296734b4a5318940dfb125f3b9c360f93c6e9df4881e654b5cd274b891dc2b47319291306a4133 +P = 08ad8445a2d61119f965a3f4de6ce64da6876809b31f09d5485747acdeeaa38b72b888e5678755cf7a3bbb3f01e414940bf399e2f4c907fc14daa12e53988c22254c5eeac65615964fa7d88b53f5753b9c620e02e78d7a98d503a7f177bd0c2e75b065d717017696b412df426df508e7af75bf865e7477e3e11fc6db61e9451b5e19f34bf1151aea7b9dcbc0e3e5746f365b0a0e0a33309c0831bd79aea3070026fe4a7a9382fc012de770e9acd599df75aa7873895787b342f31564b1449f07244b8de72053fc83b0c613be1d3a78ccc371b66398e7a65bb22b6aaa9263ebb45987ac0c17d11f7691d0dddaf1fe6d1524b5b1d2c702739ac6703c5bd9bd4ae421e34f097847af8daa847707f5b3125d464aa0d6b99edf711c58f900998d14c3052af9e1ae2b577129b211ca146497bd80a828be0e5a8ba0166b088b0c32632060f8d2193dec9c06ea1164446d78966fc83871063ef36fc2e88c9a56815b7e94abe181f645f9a13b6f92fa0783a4ef299aec1d65a5b1aefd33d50850003bf86464d5215f2d7ad18abdd1fd8dd920d7e4bdc4f82642509d3cdf0d3d4644ea0818c1820a3f8b5d98f7b9a2972917fe6ea5f5e18924a37e9d14d8ec832fec7aa41fe128fad9f53edb6aa085cbc30def02e6e7531fda1ac27a63a6a81e8647822f80e3e7b4e664ba5aefd944260c0c34497c691c5fda0771affd617509c3c705228a COUNT = 51 -K = fd39b6bdb6d70f7907d8b767eccbaa5c3ec1ee8ba4c42789 -C = c0181230a0a15b737d904210bcb998dd3e0937fef84b540ea499aa701ce313ac86f3112bbd8c9eac553060b5d5751f6a7b7cdce4ce2ecf04bfe4d52e2f16717ca1cd8391c57a38bd29d3d72f9eb993fd5f78335225a355238a5a88a907457ac6b558749c05b612af39601e379a0a1e0e -P = ab81699a13c25e702b5f4127fcb4a46d948d538ca7cf4e8d8bd7fed9325977c8fcd02d19467ac6c4296460bb435ec3a7fb0a89dc44b404a9697be6acb8d81b97c0b1a838a295cd5840da230356fb5558ea329b0499076ea9b2766dc052f43aa6e67abb0c07 +K = fe8c2cc36bcc1649e2f315bd38df90a5505d133fea0b95e5 +C = df00934b954dafa11cc96ba3615817a1b8d9441704df86f3e0fae72b9026e952a71e2aeda44051365dad6bda229827e56e30e15a9fbf6a3ef7596360730a902521c14937a18bc830851c8216e424fd8f363f8ff6b0e384807c11bd5f5baab816b74ea95721c9182af80538700334e9a0af18c1ef17376ebdfbdb8e2e957f0aa371aac4a99bdd98fa0a6d92b47c348246a73b48a4a2edf3ef6bbdf423a8e0afabd07cf67c3a4254b655a7f8947f3386ab2d0a3935c99f95d4e0f004937999a8f488e36dc9ce8affc81370114eae95e02bbdd09fa9b2c29cff2a5b296afb3f989040626654cc99d9c2296700d32b0efbd22a90afabed97668ca660e44fa2ad525a27bb69a7a672ea56179f92322c5140526ef8a78795a018cf414cc91f8a73815f8fedbbb6ebbc057fb85e15d164e49cf75d09e476f105217d54a9714b532c7d9bccd0b3e3534d02f98cd3b0583084ff5a3164f0c4c139d2df7aa28eccd176ce239f9078966e8d9e1ea3b80d1673b77f6b0cf83c6ba6d358e7307a63a1a1841205a6048db4e10752b738d5d36d05df3ab3c17e7a1efe0ffb1d1ae6e44dd1a9cbb26d747a66deab3fe43c614cc10c223ae37d67d52f7def6b5d198c03d33e37e65943b8efa6fea6097cbd93b6547b0ce5dd1b1bcb1d342dd264107d6baf43e285fe48e9aa2f4d33d4010e0d92d9ac33f933b1451531af338bd7e9fcd35440ea50653481e6f635679b07 +P = ede3c2aedf71464e25db0de9d4bdaa32a30a9326375f06855970ee5a4a3abe293b4b416e10bcfb7f3dcc45c0bd4cf8c8dd31c386a8027102adef50d17d8e7be5819dc3753566843168f7d76ff1dc04d4e4c12c84f8d289e7953040e224498bf0feab94e3af9e533cc24dc2dd1ff0af1b46d7e81a8a2f6585dfd86a54f915945c2289f1e063d29367e30b1c0582d43d502afe54f24734bce4574651966b3183739fce796f9074f3e4b1ea2b5811eb794ba9d29ab20e4c6812625e311d258259c55f63565a780175ae5f0b6caa9f3d371a46c802e7ac5311f8bc6dfec31b1d37f7ff5c81fcc9f1571401ab4e76bf25f9171d1732960104087bcdb2ee3dcba1ab894d3324601ff137fa066ac2a96bd6658b1fd53ba533070050822b12b1963f1c4dd9ca678118009f09509a8e9c794bdd246cae418e07edf61675785a32e5cc8e3d690625aaf286f574dbde25e2635e86feb8098b2ba41c7a3b63564b0660ea2705b7e2c547f2fce1167f913aa30a24de13d85b10250b2af3f079b390e855e0cb8ad0e594243c88b2da7331ef0d5f2cb7502072dddde8d9825ab630ec9a8dd832cb5f1cee9510c55d2ca97bce5e2a45b695819f49fc0ff855a3bede50969bf6e55c9fe8ef4cd436c377e559042074942d783a74adcfedabebd085cf5326608824d12aac156f3384c5071426e942ee5a329d5b61d25ad26482d9e16fe77f0959ef91 COUNT = 52 -K = 055c4a5efbb5829a587703d9566f1cfa3ec084cc80a3c4ba -C = 8eb73442c276d021033e02f1f07e804d9dd06990cc93bc2b8792043b23165e0682f6a1f367d5f867a3aa28484540178c5ee7bb86c5a1739c9f2ad2fbf2bae40f918ac2296ce8cb8692ad48f7ec1472f5109715fc13c588d36959c6debe0d7b3f2d31090bdc517b524b4f1fc13db86823 -P = 0662829366d0150c001ce8355050159ea99a41818883dbcccd2eecaa3ecc9f49c7d50c2355c36a47aa00d09e51d575949afff3929822106124789c1a0ac9f30c5ca31b8238c81a966103dc0c08d9da38d23b735f8a1e24019fca67e8cbcbf680b01838d61d +K = 2b13a3ec5b6c24c869d863519321484c941637a235a8feb3 +C = 9bdd542caabfd672b1c94f37ed63c9acfc7c9969dfbecca5d5e4ffd58137a0f57d8305a3d37fdad739aafe5fea000bc5d3f23b1d1f94cd552ac0ee76b0482e3d69d1fff1861adab9f662fdf88ace57baac00149562bd656d4c37fe41f32cf10a5ff796316ea501fe8518b70d334d906beedb8c7a05444dd0bb7d3a263742a05b1c2848b7e1f7aa4acd25c0efe6fb693711333110d7269e7da944f0abfd10b7bf04b9037fcba3b08f3c4f3ece3c4f6e04f05afa1b0498b4fb4f96166732f560e06806ce0009d3d396bd9ccde6323409fb7a7ee48c3bd353f7d2ee58062cae6b5a7187eb2d8cfbf39e14072cd7ece54c97642e7dfeecfdee0a686368d1f32e43f43b0e27be57804f42924b451bb7a0d1124ecee0d4d7b5e331b8f98adfba23f8cdf3122a8f5181ea6752e0abc793f8fdd6ca19e2601bad97833e4717de5a53b1a5ea884d338bcd600d4e708b97433a1ac6f24ece748ee2edfa3f3227f44ad837b3209c4b1e4356731d30382e842953e4a3cdec52d0575375682afdc89cf22704d63323b6907e869e13052b81b48e44d8b287776dd7674ec9bf5575744c962b1f52e83f1342e8fec6f1c1459e88aabf9eabf24cd9881cdde7736b2708bdeed377ce427eb68972ec1c9050c62e166b234d325f1fde670d33e61572ad5a4b3837b84d99bf99bde642cdb51ad3a883c5bce8bc630a1eacd56d7d20d6faabaf265305c0114fbdfbd9013a56 +P = 255c67d30a58bdff0bdd4a28520862eec60715dde463800bba8816d9eed89e404445cbb09688225d60661bbf2bbdb742056d3ee27e58c734c3df98dbf7835977d8c56eebe3c74a207146a163a9953f5008adb1ccc4f692d7121f6e02601de2b8f983e2a1ddf988ed32823a9bed902fd169162e821c2a5e26505757ef54fce5c5936f3b628f0478c801e65d24d5179d10b9d54c4382998e8e91907b0d764add7b54c699b95101d4794a339ad3d09be339706fbbd2dd0188d19992e30b80ec2a58c50dc510a4d9c93a2132d6576a7bb4d1713ab1d9a080a6af531e4b3ae532b749df145ba72a7c894a9a6a169b0fabf756c8ad5b7edcdca87836c6459fbf3465cade1606ae0d97b51e35d6f4b791f872f0d7322dd17396af607bcc600ac74abf80efe0a2161a2bdc5135a981dd876ca754781c6dc6d32e5f811266c5e33476df71955435618726e06d8de4e66f43e50675cfee640676aa3d377fe22e2dd8095b3375b0857e289f45a2abd7153c1d06eda5366dcea32c437065a81e8ce477f48ca371405dadc574e54028b60bd533f82e9425370ac7242e0417072337169fb2406020d96d8bc562da725212d5ff43cc3e937af33e78a0721c86c47af6215c227c6d6d8486bc7d9a465c1e5dc7540eaa075f05f2a880b1ca481b259fec9d9f043a4f3244a22f277830bbde5a6eaa0032d9307f502d25026946f73c36a2e7f9d88f2a COUNT = 53 -K = 2317171a7361841d6f97ec3ef27d4dc512b75e90eaa1b91f -C = 89287077b8a44c5be851d740ca37b34dfbe73711f153cea748758e8e8808c679876aabce95155fe194ed48efe86f8b9d1c7a341f8b6204999955b9a9415560b16b9d0ff3b53fd98fb0d985615bf31faa2e7131fe5e0ceaa8a76ef28178347cdd29b633197ec2a91cd7061b58f8c9249a -P = 3d97f293b2a758b71286f02c50d2e896d6b125149ca50a4b6d9c8d93628ebc692a81f27c316a0f07bc9960b32a2196ef2de97b1e2897cf429d309543c552f2443f4d992398678770aab55d2dc40373851a7f9644ee9e7e46a345109582fafec993fcdae659 +K = c851137da79639715df4f09969c67113ba511f18ff2fd8cc +C = 4d3ff3819bbde353a4e239c63e7bb5ec964d78433dabac637732dfee3f64764456172f2a287b30178f5a06b971a83ef373abce54add6cbebc62c624a3dc5323dc1d23766c7281275ad3d1cdb2529171360a98372dbbd0bcb2bd36da6de675769ec0133ccb7babf5165566f2b9ff8821257711e65cf7f5671b598441956ebdd2b5ee219355e62be8cbef577daef71e61c38b9616f68bef2be0c6a23efaef28ca559ce4f74ef7a2e8cc835fb808c228ab699b0c857f21b5442d263eccb2ba94c9b49aa0b283a0345cd63c2848121c15c6b8bf5719ada9401ba270c3dcf074e1f7bfe41e5c3f1313b942aad3b59d459e9fdfed89e2051705cc3420ba46d47eb9780cf9ce4719ba74e6102d61ac26684c39ce50df71446abb1920516165ec5ba261a6328b9d7b262768e5223464ca574294f3bc4c5bb880be8bfe98b42a10146149aea2c8e399a9aace98a40803e6077965fe60f61f5384f835357011865eb8eb46664a6100eba49d447689b30a88ee30f6701318f3e4480f2663d528f3b35775186a5d75b0bcd69a3a355609a38f0d8d2d6077b8cfdec4d9d44b17ec97f481a66baa8fddc649e12a9eec7d5d80ceaac301ffb853efc2a09534db572bec1dc6af5ab6407fa5b60a9e2d702eb72c0e88ea850e08f66655bed67d93283f7aad998dd3c4f492cd753336d861c64380f1a1e827c98f157704ecfeb32195e22de0cbf5647fec65d9b9f8d1cbf +FAIL COUNT = 54 -K = 0ae198163714c38d966bd21ffbc12d389b9c709ad09eaf5d -C = a7c8f61b13557c732bc87c52dcffadb7701638b8c8245fa8228d72aef5056da4c385adea250db814ed6440c0289be6efede81f82f3a008ee973609ec24caedd7e2f97b57f27def684c1c8e31bfffb4f808db32fce531da1ef85c773c0630efe7349b6f1a05e12475079a253bc5b3805c -FAIL +K = c7440cc89707d524952bef0753eef296432997e79e996699 +C = fec5942ba10bef819d71acd6f71c54c147ba0762398cec0b78cb2e04b891512e77d75b31f2293e1aea71ecbb914276347966fdc9b6f84765836a7f9999bcc98c494540b19ceaddbef4befa61001c30debc3cfaa25e19bd9965ae2c37a3031b5586b0195306a03e8a95426cf2bbdae6d36238de5a9cdbd6ca8a4cdd4d800397419afe3b5f7e21e2822a823b9188481d3c74ab154160aa56c0bb39ad16d28781770452603492e290ee7ce2b5d8526cc20ce0dfa16b3faf70b754a93106eac096f4467af8a66275e99f1a5b346122eb0ee9f1cf43ad9681f8255518ed94b8c1e2b8d50b720ca8181ff7f56ac5bf89d1b29ee8ae2fcc65eefe16018278e94587a0b65bbcb1f270527a68cf3973e7ba1736a95d00fa9573fda27a1d4c2861752b00c92458575dc65d5202fad9ca21f83901e8e7c368bae9c569bd98edfd3d534fc2e327cf2aba1a7ae38c6e5a2ecd554138b59ba2c9adea0b6ee8d2e83ecb753e96be4ca3974b12555f052429cecb17521df6c336b251f9315bec096dfb0cae37351c1db1f92ca16c6a887fa16a984106afeb74f8a7200ca3abfc8add004c277cf5b0bf9518d1562a5ee5d99b128d8392aaf363680c4c194728649567e3988b7baecff3756b2ba88f0d315f95eb93912e0cad1a292a7b478c18bc3eb9a83a5b7e9b1a713432cfcc91ca836932075b3f81e6a2be7c62ab56de1744ee827b5cc6e030f8fc9f56ce49f32df4 +P = fd98807e827bfd291e4e10622af58c506e74dc24791ea511cb335faecd79a828bf98450dfc5fb4377d7ca8d65f60ce7f2a198d737a00732cf5ae50f5292ce7a54071033e813c526e90b3a7a180910341cbdc6fcf604a2870986fcfb52c817d8f78894c4fc490ed5a0ca29fe792efae10ba9c32a0760096f3d88a34d70b7f12c6916ebfdf28e2d3c307edbe71f7ac171689703e5195c5a9db5d3bf61e63e91f2ff50310cc4ede24bedd25f42600dfe27c2c63e04e6231a4460d5ea42ad0813caead0b7cd2a34a436aceb231b8a8c2da3cc1b8d084c10a107e0f66615e569cd0db64f191c5c7d674c05265818c0ce6f0020259dd6cab33d9ba4dc048bd301935602a1a101a2b01ee4112241971376bbec87838aec7bf6ba9e0c3018ecda7ffdb23a4cb1c77cfec78f0c0db38a91b7a1f4a2e2db28c2fe21430e79ff5b08fb5c928be8e6e39b428a8177011f1039fcada2ca90ce30206ded39e2d70c57fcf845545ff92bec8c498918c532844aef8f1458564518fd05b3a4a66c3f4ef353e509ff08057d5e737a9d889ed8114365c1defb515ac6a5558162adb0041c11e12013b4b4cef6097f1d215d581125396c0396011295e9b94bf4891d4cf091e2fbad8a56b4a21c392a8bcecbda8154455bc4dfdd050d99b02df4cd9f4c0b7c2644e0836f8cb6746ff881603bc41ba2f8f4dbda14760cfe98c7d1fa7dd3aa14f15976f1cc1 COUNT = 55 -K = 4448f72c890c8cbd8cf8b95f0059fb8f6c9c61fd7c093cf1 -C = 1ede9bd4eb1a93ebc6412590f82c770dd3a0dc76992e2dfbf089176ac0811212abcf385d24e5a7b25c4472f32ec443cfd8e6fe9969a42231bb0443198963a81510c7e752ec7ce8ac2e0c3c5d7e7d2efeb8e964c90fcd4367e5f3340099998226286ea438b56bddc2f5b7cfcd13930fb1 -P = cf115804250d0b47f512d57171c11b1b598aaa9cc6dbf02cb8beb5568255993258c046f77fb08a5b8e8eed1409536affd18464839898b92152a0d63cbe3d32a9a427c8eedb4ba9d28a62693b5bde68447a015bab68a549a427178e12369cff13eb84d9355f +K = 009214bfa7e9e20a408751551051580212b2c3893b94fb4e +C = 0d87e9056f0b8232b2b31af27812b61906597a30c839a5eeacf165abbf10247527d46dc9252634d190638a6617654f61d38dfed491300d319ced8694a57152a2346e2b4c7ff60052da41f8fb391237d13d73259ecd078cef740c2c1241e2e4cb31b20b352e8a5be912b06a692f3d56d92abd45578e3869ffbec9cfad78267563c48d989fedf8439b0dbf50deec6086b04cae3dd129d458ef55f039cdb1ab17c7d306b2cc66cb0d01ba6acdf5c6bd072bcfdc2f0df83a0d6801e740373d0e20645d7798a2bcbaae0021b51fa75bb0f938278f84a304e74fd5bfc12683e90adfaceab717b6a6a3f140d5190350c636b909f6525b2680dada2fd09885c68716d34ad2e8078e1c38d496ea6c719ecdfb3b943f56fb6ecf6462a3ad93e91ae6a1c7a5461c1ecb9048942d791b41c80d9cb9cb05da1844b5940ef5aa33bba75efe7125d59e1ab48c0dd2bbd22e19686814b1d08036e5c8fd5e354a293a227b06e5586dc315cd6a7112e056e374b759930498bf78a4e1cba13c99b7edc52b957e88439ef86f5c22b51bcd497a6143a2ed1541d5f4c75a4b4006ae0d0ea115e08577989ce84c98b608dac4bb37c1e9645d7416924e75817112edf238b846129389f453e66bd029ac48677dd403b41a6005cf933e134fb5616d30264ea2fce78434197ae42c08b2ba48c374b439019192a3b9e41f00fd40a605a0e4c79b982436eb89ebf9640f2166cac7816c +FAIL COUNT = 56 -K = 81c0d01f203414b2b36c739272d70e4d91e71e1e17b5c3de -C = 06802bdae1ca217e404a40e5adf280c6020934f41730df61599136e9a8448aaa3cbf663185ecee33bc00a55c81c85a67398590be7adb9fcfdef23eda08e7483880bc82489258e2de65e20712c552d5c1d46e8e31043bb6b48bfcab91e292d854d236808ab6aedffd8eacaf4b6c0f8d98 -P = 5eaf758bd5b4f173694a9c30174fb755a4526016d8fb80137b7eb289f4df759ae5cf26f692a7efa738d32e768e8a21eadc9cbf9e2eccd623d5ae29fb10397c6a7ebbda245690758dbd2861889308d57d6261be48d88cc186f1689d97080a0dd9b8fecfeb30 +K = ba5020073c3f27316d9b91a3c821bcd6bca6e68ab0fffef2 +C = bbd4e457bc0d1b7204b71f284846ac81d7fe044b45acaa103a4a5abc6f2c091b97f3f6e6f6503684fe36306ddf2bae9f39d756e7e0ffc034bfa20bcbb1109ac5ccd5ed4afe5483b106a9027ed81b30b47f5ae7455a7e0c789c7a901bebadf811045963c0a4d162b232bb82329e69a22b4c0903f8e54e412fb98f45fe3598b40087181808982139d2035256500e91b042752659404fcdc299610762d5416ac86e74c306de48f65c2e83f3120958bbc1d8f023e2aff2a4bb84047cd3c8936c45fd196228919a88f59237c426f0c43b8a98774aead18634a466a4cfa45f87392680fec718aae0e99b603749e686d8be3ebbaad2b5ab6364a09d15ba38f051190dafca919e373defe5b842bc1851175bf8511cf700ef9d9e0063e495f11a6a33cd25e4678c38772939eb60302a02a22786b6d171672660cf002b8c1b9900b5ca0a7efc1ed3a90c079a8fcb06e6e4bcf8536a12157fe284828614175b55136b08c22a55eac3e4a31af2a515ea4a66f54ff4492b53ea7597494f177954cbbd79cd173a5dcfbab63ad33f2e066d1c2652bb00d0bd12d8751e6838fb9ce86337322e0bec3f839db06b7f624d61e1d0a6f4b60d39c2432bd5f81735aec4a41a8676987aef1d1023225685a7d281732d4790a5fd5ea61583537b0ac35e86e76947991c25e9350c69c8cc798c2a932937ba6bfc4d30e09e0a4a25e65c3bd2388e8c70a3d4bb6413a72e82a58705 +P = f96adc26e9ffc4e966c04465b6d15105c7f8889ed340304bbeb3a78ef819245660cd0df1e709903db1a4922561e1d8eadc98310d2fe5001d6e2c75e1cb0157604edb1023ededf239b31b2d32a19ad6b056ba288f92fc241bec4bfe5cb18f523304b4430a4b3add3367612c8dc2667297464bbe3b01573a56a4848e02a1e8330a5d057940e598e5c276432caf1a011792c4b61bd549d17f9e211d3fa848a835c06c3b1ff14e896ed441bafe0725aae12450ceb77175158a89d778e03a6b95e0556919d1e6d18a30613b5b2864eeb227fcbb6d7ec346e72063d5b5c31a087cb47108dc100dbb20ec330b1a3763616423aa2346ead72e9a7313b6db78a2ea037fb0130e59a047c8b78a9194402c445850fa55a48f98d642af54d22b655dc5b7da4f0d12afbda5baa15e0b6f17b0eff7bc6551affed0a0805086f2dbe8b7d997bb5694e6f34b7fb55dd9caa4eea6889fff87ed6f253d5f4cc4d3619b7a2e880acb4f12f6bba711003655407aee6f7b13593d39df00bc4ad77cb4e1bb0bcb6c6f2dbf711be0f96fce231b9dc964bab9a9deec4fa4b5ec389dfb3b9527151bec76c1a34efc18a33a97837f04ee3bff3b5f106565e63d70531a5a6ca7014b6138274102904dcbb560e99d766e05f5c196ae64f654db7dcaf324efe923def90e30e57f22ea02ea495832d3b66c2013cd3b2004807780e657541f2ad53598bcd7b30c7ddd COUNT = 57 -K = cbad49019bef8ffd9ab3d2c4c2c6de0b2844d46ca2f1d81f -C = a28fc0319a0c65e7393e9e9d07bddf1c492c2075f36cf3d1dd0961cfe1ad38bd0ef2953cfa532e167278909c335290123972ac5d7049fa0126c887008a2e98ddec069a67f743c023a625568b2d4ef50436df582631f42b23205a05eb8d3ad63cc9689d40ca58c921fd8d7b40f1a244cf -P = 3418626f68aca3f410ca17cd54ed9b52f0f2e37bda7ff811c113111aea44b3d327c47d2b0ed0fb8031ddfd4eea37e95685f2a002096be1ad7273288061bebaf8e62829797f4508ead07713cdeef3a60edb097302c211d23211b8bf3d85a31fea06bfa95642 +K = 23832f850d89889260443d138fad612ced660e483ddd7c4c +C = e481a76696f5bbb71ff1a7c7548b087f997a4c1f400398fe37b76c059d9ae4af21ff75528dce7c090f342a1bda04b34e87dd25eda9bfefc21bfa5dce198626510d27bfa3d24dd06f778f82e37498d44c4f2755af5bc42d4321b02a985aa039e4479449cef723e340c0e07697c334079cccf61a7cd485fe0598e4a784cb599a28320c3493479d3ed34809e7f670717b58c00318fa195ec0d1e00bba7875b564325310ad957fe505040e716a98af53e618e4742e8ebedaccd3ad2606462f082d9f380ee49950ae7259941930e8350169552d14a795e36dbca161a15469a63c3f52568b399fa259637cd5d88f5ead9579a12ac04a2b4794265a0ca5c496a20f4b012c80cf97aa8048350a18750d0769a5f31851c25738e4c7614af305878db3519408bf14c70985f2be7f04108de8c6deedaa3b982e138898c7533e54c40d2b5b30023a23b06ae85babe23539d46d501d56b45922c4c8ee921ff71aa952f21cbc155ae94f10f187cf67e11065cff1c208ee3af59860981708964d4e000b702bc2b6b73ab75e6c6f5a7c5aa46b59051ce5afe3fcf186f26a2a5e3b43f3873376c81e052b56318dc9631e57f67c996b0ccfae38d184e93dfa300c0028a17739bb7afbd1a1ea4bfe0e163ee84cca3e61fb72bbdf814dc88e4f82ded94e8805edc4a4f7626d3499bd1edc3760cf74320929b40dcfb0475379243287c6a67ec772d4ac76e0ced75974c0a534 +P = 4078b23cd0d107156cc923dce9994d5889184ec4f1548a24295e6571a1033f1a742f47cfc905cb4323057188d1a8eeb06a877ccfa4b1a36f5706210dee0e04af73d747c16fdfd6aaca08a9bab013cd3f389e5d5c93352553c387414ab2a07d84aef882388f467732df84fdf1e281c42ed0c9990db73867879f9c81758c35a5c998f53b5ddd952d8966146f44939f30534c0dfa757d22113cd0e6cad7824c1c00c7f1444d72182f33849729b4ec88df460e4d38f1a1550faf025ecc51bb72b4d61bb98525dbeb5aa42e5ceba00096f90cd565425d8063103879274d4a0c067aa1dbfe3cbf118dd11e1b316c6500c486fc9cc11cf5c2180356f6487e2a5811d18d78657bf0dc70e3cff8c77b07b0774359379d5c06cf58cd3ccc894d26c441fe60630cf7d2b5a6f4d198e1311f8e7ea3c39c45aebe327d10d6482b13a7f909691e2ab971ffe2dfee10b8e103152991af7cd15c53b92aa649127f4181b214437babbf1e05a5b6e61af4af105e15b7901966f373f4682117ae57d469883580a833b0d16f2e944385867c67a86b0ab961022ab377c2277fa04cc19f9b3e58c3d93a1931c01f7513473b34a93f033ce6b4c791e8ab2cc04f9d1af9020552cb6479b383cdc9a9abf7a9cf259e1fd8ec4b77803c8d8dc180d79929163ac4287904104bc452b24fad5a04e9c6b77b96cc751573650d8337e403f802ee9a746a9c2b9ddf59 COUNT = 58 -K = 3b8a8a5d09cccb8f2d46abf7553a949709c330e3488d9fa9 -C = 52e45f9d6422d24cb1443c47e3ec5b510f020afddc7158293e023b285c6eb638176eba0f01cec4a9861f0600fe14fe073bce2b2d70427b5a586853bc09a2e3673ed1675b6431aab5d758db503469023e126793a2b266cfc088951e71e740681c5d77901a334b282011d276f088e4d2d7 -FAIL +K = 8051e0f125b3b6f6c28ffc4b64d9e996dcbdee87c2e4532e +C = d6406be90a2cd5cbfb2e434f47c25982f6668ab00bbd76b24bbba41c8da5f6eb03e3037554f9cb83e5e90f0d439d4beb15f72ee92c886e48b5f404502889b9114132cd84d9c734c6c00414a9d0d7b50fa298f734a83d5c378c1b4491632dda51597c4d665ee36c7ed59016bb8f5a2b785966e92a8b8bc0d2f5142a324aa25c57c1b0b05aaa6855521f6c663e94657c2a2bd457d8ce7d3f875f885fb6bebff00b02c7178c7fda797913fa4c57c1c95862bcfd5f6c3ab2a19300a9f2455246f917a06d7724d6b87c8b4cf04c0422ab23bd886bf7dc6897665f9833a47889086e6470d216a0a9b05080bcfa068a7dda490f96d1106dcaa2ca222165fe49c033ab138bdf43af13e3f5da7c332838062106200f85dbe17c3bb7cc178b3208b1ae28b43e78301ce67d549c9779ce76398cd7e7b7c6d3f9a4fd87eafcc29acc30a58bb6cbcb257b4961fa6cbf188d61abf31e23daa45f52d4905c1f2514eb7e0dd5d255a316489cdde2ba867519948b008a098b528e9b52736b551c2df7c0f4bf75ed15387b3a085b4ac136aa67272fa81ef4f7e9ca76df3772fc0d1b5775f52274fa22ab66c0fab5a16d1960795c062d674e92732bbf3c290cdcf3452d80ed468d8a541a173f6f342570fe4dd5d49e1ddee6bf69288e5a5e2863bbc75603a3206124fac1d92929e5618ddeb862c80577b52cf58196b15750e0924b703cb51174196f54013fa901b79fa67b +P = 69f08b96c40136b074dfc924bd1cc80252cfeeb1848dc777ee6345c5483dd6ad427eb5242a76e5814f57590faed7f3c4b68286846ba4560a817adb37f4e81b1d2b503297163267784a59ea01a9aacf64afafe0a2f6dbfa3f5258b7429b48ac35ea9018c6f094642a7901562e574acb2497fa7ecd3f1ef6a6bc9b8eb85434084362be968fd7d2f8b6b2fe74a0a860cba81d01633333e8055a578dc8931560492d6e5637670dad6b6791ac15b7227d925e263bf788857255bc141d2acebd269e55a0b601f7d1b9984ead6a49913742c033b12355d0bd98bd59e769b45c9306f240d35a5d933daece42a2b7c5bc4be0300dd18142da6c365aaf5f433e9c2a7ec2d1b2cee6ded37008970fb7db0e8e1b7cbfe280b2816666c55e49f26e834c712935e717825c110133d2bb8fb676c8b17c6bfa9ff374ffad5b400d49493c0a796ca58151356cca2b04986d841fe473fd44519a1a487d7d3ef969664ecde31b57bf96c7baa0febd465ba42d1f8a828c4d341d431f9d5faeda73bc3cd9e05518d735d6414a990cd62e7d5d3d71a6852348b7ffb2b68853cb42668f487050b227fdd88152b8e014f513cb007449977a186119131cc0535d87f7b90fdc8251c3c14fe3945de94c0890ea0f2c60a7df31cd3183c4ddfd232bc61e6741b8b93c39f30d89d13d06d1f6a7dfabbda7558dcd3c19293c3d772e4d0b8df886d3adc0e23dc5a732 COUNT = 59 -K = 5f3aaea36e1f68b53ff2f46195243abd8b21c7a0f0c825d0 -C = a32dab6d7c74417644b2fb8228c9c613daee2cfe46b5a3e6e708d6f5b4714afa7a99ab09df54d91f777ece4dc42a6b52982f756ac22fca94a5e2d9c3a0e9f7eda16afa369287402d6223650d24491f300ce28940cd89c3d5a2cc908896ac393e85bd947e1d24f7c3c42d462f83fa67dc -P = 41b4970b437ce722b056309ef7023f9877e69c919f2951c5431d36bbf8563d94cfafbe4317a4f3858116d6021bcefb7534bb649550961bd3499604e87387ee8791e0a4a3159f16dbcb525617182b0d6a12a23891d0120a5982f1e1ace29480614149913111 +K = a9cd921f6abda858f774ed7aaf25162faa650c75eff6132a +C = 4725560bd949ad852ff0f4452aeef5b5b6b4fe59e6bff98638ebf892acf208138381db371d4d36063259763ed8b034e2ad537a2c7b19fe1b285e323a86c262ea87724e18ca253a7e11034d3793bed27cb6f0ce6b5211ef6737d42aae2986d2f34f0abc15f762dca1d00fb757e23e4168919e93a3fcb9ff0e502c36d8e7580b41924eff62b53a943749ed5fee41fc323d19f2b8159732c64f679593d9f859b0274af0cfe4e28d1d71ee27764275b4c0f91fc7c7cde57fc157d325e031493987de331fbdef7067d210f14adb5748b43984b09273b6ec8c181663b77cf89f27863521a8a7e797a64f42337a234b6fd1855223fe348a8c5673ab9b29f2175ba19af0158bcade024cf95f8ba87b61a369d5ff551771549de77b117ea29f220592c2d96d05021d3b71f8b5b9b89be264f6cf04c40a860f94b7fa5918285ec023d54137cefce36d62750557b7a42bcb24360930e252ee5a9088bc8894d1e0ecb5955c1699eb8577dee6564cde5c2841bedcd9dafec6efe569b727b0046e60db5672465d73ed837497d814d776c53613e2c2affd7bd32460884d172803c7a4d2f1d842374482a06fb8b81bdab0e22e72734902e38eb0ba35b0c1b235dfe4012fdff3f9f26d24df5d7f7110b398eb85444d40828556ad24dedb141ea1cfdf7a0a062d43dff38c71a060996e694dbfed3b8d84c85e158f9a77ac5bf04aa37d5cb4dc89ad7a49dc590796572e39 +P = 86a63ec8bb87886f2705fb39385885ac41427be1f0e069c01caada51ba3fa7803e5571951d3a29f176a89a1dc80f777fe0ae60378a392a56cf9e20ef6cae84adb00e6398dbf0f20456938b702877e4436801de20bdd76b77cc2a13e2d7c2f8692069441b856f867bee7c04a2910a2fb8c9f7be4eee50309766c1694174fa0129880f13a75ad384789795844e68b02f26e79ee46ebe711c683c5904ab196fe558320fb9d76a576256872f3bd9441547d826e6d2f57e995630a3d9f3ada96705cdea949a824bfe383750213fefdfcc8e194a70406d5740bc91e8982fd03c3784b173e7547dc64b985c7fb35d8bca15d38110d6d63afb3552cdd1d2d14c9cdbca63976cd04e88f14ff571d7b20bd7d488f777e4e96c87f21b9c6d918099fc39f2e7cca395790227db13d30c543baf93bebd165c5fb38877240602250516fd97c8728d36cde5a4b570c81177b0737922a82b098e9bbcd868ee741ac04c0559b6994a703e6aafdf4d34338f2c04f426a4ec7f88d40a5843c7d242acc658addface26a365c2db4077405b2b2723b3b8482319618924420ef0a33cdcbcf93c4b35f600816e04933f5db679f75225326d9dfe21a17d305892d02e62390d05b3386aced8425eefa7eed89806d11b82a1dd4bdd22e52d5d1ac0f8646018cbd91d2eff4081a573a746bcb3834c86e8ec5bf5e62fd0cbf0204a21514c298113f3d85b32ceb5c COUNT = 60 -K = 3edb892a330435039d9f66f3eeaf81e94390ee40a1518d51 -C = e03172bbfaa690821038635fdd0479c5a757e3c81ab00bde01061a0fcd1f7a0adae64288196c6b78ea01ba927a99a83ea626aa5645037dbcf5a68bd266226dc50930ec876f0a71135b19150752da220d6beefe01462a3d057bd57582168ec03e47a95261959be7f5ea1d9041fbea180a -P = 2d1b65e2a37b75516063c8e6cac64213754b7633ec717e880416bce0bbfce11b76f2bee1042965748521d9be9471eb394e6baefca63b8891e978f368a16bed71db5667a24b6bf0f3d5f4848a0de1bce500a614aeac568dde647f4ce277c87a68887542e947 +K = 11c7b54aadec2f2be0d792ead4d06f459ddb83d3a158dae6 +C = 5b8b0cb85f95ef20710b21bc94b069b603d4bf7bc39638ded4642f84946e87b317a9f277671efd3694ba450373f8904f2d22d1dd4d0a1b40ceaa4961b3962f1e076d0e6bc57029de2c33d9d162e35554977750caefbc27c928fac33ce7a7fce0949b3283aa9f75c3557df7e7b14bfeba4869c94360f0a29b5ee4a280d37cd431b7feeb47781124ee27cc733d982334bcb9f73798b3e6c3e99d8a2e1e6557e2fc9b71ff15af58bbeca424a911fe2f04c9f5816618f4bc9da451a595d7e776d447ac51edb4c5d5da2ceeaeef3d3707f06555d79a1657ff66c038a8c15251717e92f823fcf4ea5e5de01daa22fe0985c1872afa2b84c67eb82221903ae21863de0ab58cb26b3512ed2878fe5d226544d8e1ac04bde10b2c0e5929fa4921411cfb84ca92a4abfb59e8c1baba488f462d3aa750e68d9b66c36d5cb4b65a498798c6e50c0d559b90a93a5e8e26cd78d6a0dd617b2423b3cff4e4d655c96e9cc3087117ec9f84b387053e586f72353678ab54fd2346814258c2014b2c24b9b3bcff7a560f44b19e962b48562c476f29f2709c1e78fb0279f930721ced4d3ec1f05a9117262c9476e35584fbffc042db309206585d11b92a1a10845a49ea91d13f681a7c246fff11345bc830b792b86e4557970530244ce6247be1951d8186295ad6eaa7d3f779b2462a45ceddffe7db71082ed2b890a982d0a271b0e48b4293ed58780719ede7d013af904c +P = 76399611354ee82388b3fc5130258b22d57a6772be8e1fc05b0f912ac50ecc9394ce7d6f22173b3ef46ea20cd2c1434d793a1f6dd3fe42b0896a29549530a5aae27b86af76f0f0be02a32d41cc127ddb7a4c12e83493c3c9ea8b320275fac43d7252e69c9e0102f805a68f8cb08084419984f7ea05d5c993596cd9080a4ce774f718f140e70157ce832d1fd5968be9615096087354838d6e81e1dd444879ba99af8f1a8d043e50c9985804d35af213f65428798e1e3b7a8408566f01b7cb154fb539763b10ceba4fe7084c6fc9e6235d1c4657a4251b2c80a8d8b8821a36e04844180cff98585e70c7efeb4b11a1b3e2383ff8d4143343fee1a2e040553c170ec5866e9b373ab0caad856755df1f3635724853f12a37a894fabffb932349246dea7c6e42fe4c5abb048cf83c3ef416557f7fdde3cf5e4182b496e36662ed5e0b5b3e44d5353d00e43f6f5f963735661abd89781d22131c89661268b3b403c40cb9c41efc1678ccf5f8158053adde0624b03c822a932aa6b7aff6b83a80a962f59c11af0121beb1612509e2086a02e39fc38dd55880b9ffce4ea70004692997d9ae8bf85e1477c4540c33425b67e079d8fbbbea247b5e9639fa28206a205f8756cb25c96a6c68b2865417e892e0bba1f2f8ab38d849f033ae00e49a22df52c38e50d3266e844550e98e9d097b99c400fd7d2ded568891cb54ee9b339f71490de4 COUNT = 61 -K = bbe07217049956a85432b89d607a23b519d80ed8ea1a87b2 -C = 3bd8a065e854a48a2467aad1af830ec5ae4ddffc50d0e932212ae67738624261b462a12264dffaa923b4e6623dc253db74e9c0c809cc4d24b9a3f0c0c21d8330eb50ae0a2f98854b12f2da21f562d1dc0c9dffc85cf92304fe09868d81820fd7876ec60578d3b8be01593e132ace9327 -FAIL +K = 8ce32987678833d0b2e1a813fa2ef3dfac59226550006f3c +C = 6cbed1eb50b6726a682188273b4bb07a990c45056cb4d6e2910efc51731ec3482f853affb2e9a9a08d22f5f851e673ade46f85f476dc405dbe7134851292b0aef6c549437fd932c48ddaa954a56dae84ee6106f11d688c627af86437ece66c9cbcdebbdcf5687a81dff270ad29571dfeac1b7e7e278428d3b547f52f715fe0354e2872e89b13dc35c4eb3baf589154ab328393a0f331477be4b2d55f00fff271baf5f52a6133b0923c777d39d123e08190558888b2fa2fe687a13cba76f7f5ab6af1c2e240bdb2e08f3d3fcb0a5f1ed92fc524ab2d1661432ad6fce3687fdf74171f7caa3abd0c16c5f4beea4043207144f35d9eef04c5a629d67d75d41e6121e53e250dd729b70d610a643929ace985b3bd17bdd522afb5f4a811c348298147c6ad95a0c391882e8d40d3a0e8459696a753c886f854385f13c5b5db511610974c79fd6fd9fa3e671c4274d80ffaecbac9311582e1114a9b0005b0f76ecee712afb1f82a777a00b7bd00dc247b59e3b3fe28e558d70c3e9e73f259d460fa7895188f75d6f8e9ddbfaa4a878b0bea4fffa920f0182c451bb2525fb3f8dafd5298f693e1cb00684c8794b8626462bfbd54fbbd0042255cea09fb2b6e5ceaadf1701d8b2b588dcd3875fdea06e56041586ba527a11d891668a1bfc52b8c0044e68935af2d327182210f58a266c1c8933f857098dbcff29a64895a7451425d3dabaedd75aa52341dd494 +P = c826e8ae9f07cb5fe423ae934ca4d5d132cde0c1c873a773879d960faf58168785886a7869147e724e3023ae9da2cca5cd7f028b3e87d2eba5119f3de78a2abe79b394ac48a21015ca42aa5bd7ba4d755644ae5811f127a8c9c79f258af13c3d9c9538556b1c637ce0a2c7e8f6eaca1036100cb37e20a8836c1b1d6973a1354742e8b8922a290786ef97b9138d2ac58e27c7182d0f8cb83af5ed50de76c6306ae66495baf5b1a4ef054c7819039776432efdb5226e2eb2cbfc9ef3e359e87e031b90fe688b1aff31ba46537d4f0ced14d9d97ea5ba33a42b34199f4b91e0655f3111f641dc08ac7f84ad97540f09f88a32346bf5e3bcd6014bb42888e1fca1f301b1c9cc81bea7b172f2a2cb7ffb10a7e6832c12578776e07d4dbdf6a575a607262f1137f91cade501b8ef5f1d5a34622087d3c56e29f347fe753320fa33bd7335630529c511296a3bee1f4c3593891c3d52c88278c4cdbb017d0da0866375e047953cc34bb42ec6fe85901eefbc767abe6adf5ee34934426ba1e051b916f8c8d30fc2622bd39b429ed66b91d7cf4afacb983fd0cda2ebd89b9f95a2899a213e91f3c7fba61e126480c42a866862174ffd136babca4290615bcc3deb013f20863d62870545b5fdd2ede4d02332b8e6529968826b3f1f86de60883df1cc44ef4dd06311abed52bebc46bfcd7b9aed69bf4294453cd23769346d3194f32dcbc01e COUNT = 62 -K = f892e1c14da646646946b8637ce9f5600454e189d3f26a15 -C = 7362c3ae37ad57588abd4cd7e0fc0c306177378d4510e73171b0b966c14581c323bc33cb33c92b7d7426d936e0747366f48c7789654708b0a602072cb174b68616f53e44d63484bb915968c5000c5a1e043c702c69aa12173e2df4cfbdb31e01679b70e898b00fc9392319564b0d3711 -P = 53ea8b83a72a973ce40de6c83e375e0664bb8fdca3f1512c8625e7af94666f774eb1e37616a7f8bb05f30666a5146d3d636cca23f89121e613a0a80f4df909073515df5b65e542ce2ef633f421a07f04e9390754503e725390979d9107efdadb30555e8cb7 +K = 7e99d1ade07c3bf0760955d416fc91a7f00b9bc38a31f2ff +C = 010e98917c53ca472a8bdfd507586a10f025724a93b77597b45fa2eb6a180d647ab48eef1ff502a3ed45212a7c2071f8037cd5673854fd7d26bfe26e7b0cae8cec4735a4e6271609cd33ad4c91683c93b2a862827cfeb8d70df4a49e390765c9ef9cbe1cb610089d6ce777e788e0cfa7a2cd3532c6185ede03a4d094cc6b6c68d5f3dfe3f020cbb1b6dd65db960ecae80af9a00017e30fc9ffcdbea15cfb3db5949b05ad30e5f08e69de9aae6f330f7f3536ad660fa3378ce2e7e8e9e25d155aa1b067de974b62746713d82e902625574b2cb086ac8bdd003364698828b8cfdf085694ab33731a2abe8c93a8474059de6bda59037a7144092a539f36b6bc5018e838233fbbbb3d87ea70bbe6416faab9859f7f1ca7194d84c57cadd335a36007cb182cd252911cf18d5ba3fc17450a9ea4c5c864eb71f3a33fa4629340496022ab603e74959c8748db2d990c3faa55e975fa381a18d50fe7c4de6df3c3d8121c0d091d391aa6b9c340f5bea82b7a6a432a7adeb5364a5b09732aca66ccd4ad6b2d81454369f0128f5a707d8b2f245be5505390b42b9e28357aded197b2ca8c745ca32cbe7f6c62684d81cdd4cb9c9c1f3854f28349bcf8ef0be48ed0e4692a02b66239e071c388cb948c2972f42b2657ad9dbf7afbd864475afde534dcd6c1e4835af04c555bdce88f93fbbeddc3e56d32123ec4d95b68844c18b6d540d60790ee0c04497a9b7a66 +FAIL COUNT = 63 -K = 88284a1ca57e932f87bd20aaebe26269691f53be4192ae0f -C = 34e034d522b10cb6c97d4306524e7d68f342591e479c1734b1cf6c901ad3dad82e7b9e230e9e0e6942c5ff732ff5c9ffea3fe84b37206e545086553ba78a38dc23fc51facbaf650cc1512ba0aad58f9495c00d71f260f1aa0d4210d48520e8cf2adc266adfabb9a8ab735ab3dd822f13 -P = 3183ea870207edcb9f03b3f7ce9509bc6c0cdee4b54f7f9f2bdd2c9c1d2fbeb756b0ccb51a02cbd1e47db2a7d7b18ce627bd1c68c5459714e65683e416f08d28fa84d8e42905a31201ca83e68a3600dc32f054fff6aefc8f35feb0ecc5684153578bdb2ca5 +K = 4a4a2fc0ad3ceb5ea25dda65cb28a946d607a2453178b47c +C = deeb2ad595870068953e4cb2c44d4e6ae76f268db0f89b8a9af7e3b627b0f89760a8e2269d26c4a78be6c81919cdf5f22560de77ce281cc046de5cf639b0cce3242db685ffd4fe74e76e70a9ad98e0e3fd490f8e5d2899f1dfadf07a22f256c00e06bf6ba49f8499ee727b63406342b5943bb7b1fd020b7bcc4d200b8437444bbd903c75e8629aa41bb79a2d46ef03b1b30dece7dc001af87baee34a2a62d6733b84e05fbb34a82f2a43fa4f12dcd7c023b3354228af74f397fc05c2ffd1ee5ef5a58ff22c7de4875646feb12e400b35da956609f684fe5d408db720a2fd291e81944261a925fbd03f2495e0b59c82fa85883d1c90d54bc28ff0f8498f9b857592d7734dca803d26fb7c576b3896fdca9d796ad347464875b6086f606bca366eda775d7b575069d0f46a1ace31d0bf15428751b5c1bb024ae12c0631cbc28416d877cbdd289432ae4379e8ac4271bb74d867ce2486d9414a96ef11ae2e9f2a59621c23a1db04aa834c6cb04339c8400e7588d399e1c56b130465345b28d6820d1fcdf8bf19daf86d7c9052c1f0e428d1b191582f02452738e5c918937fc7fd5a36c898b982aa21f6157330ec8b5b4cc28f5d8f25398f7d4f5f51c8dd9daf1127d0131d0b199cf3ab8e28ccacce6fb996dc24300f836827f004537fc1118cda1f38bd6fbcf9c9376c825af55895da6385ff756ee1ff7723fc4bb58f7bcf105c0a2b813db464ab6ec0 +P = 6cbdda7ac18a42fbf091a2d174d8a93c5fe57c420c70b196e35915efb41fd9fd018fc290318c06f9a8bdb6d93bfeb7e01f5de4661daf8551957a8562e39ce31125e313784f738cff72e0ec43472c52e719433e4f7e81e0fb4dad39f74e06e9499f98824d8a9dd91d401f0f60d2e2625ad5a15edec012f9efca3186eba59eb689777e52ce6a8733d3ce9d6d593c0b4688974f3c3bf0871c6f9e3cfdfaa4b9e7e0ed63420979f8cf484ece9b2623511a16c7f0b83f026c67427feea6b3d45aa83bea5bd6ae37cb1d03cf1b54182882e0bd747007955b19845676923ae6a1bccf25fb9fe97e8111f2f0dda2f5b17a1df76a6afcbba10caa18f83cb0612a1c12bd9de015b2eb4409c23a018f606cbe4e55cdb3e5adc268f1286575a2a7d98182b71e7ee70791edcd753c2033283fc2403e9be71c7786e387b420fa1f69e77986bc93c423893b361f921c5e8127d72c8ce918f30bb23d6e965cb7b54cd551c4e68266773728f0168b02ddfd7a4960a29a38997b117a805087b5dcd7cef655fbdf25e6aa275bdd4a3ad8c62dfc7e2c927c9883e2e83ca21cce108d1a4b813f296bf592ed31eca278ad6918d3c47c4befe5c3f07a6976dfeb1a4b7e227a87e33fbb0c270254c8d1ea323cb90bc4e664ac57d24ee2d98236f4f77abb2ffe1d4adde5d6187b3a038834c5ccb09f52e3c87186bde5d13bc21824e7bb6c6c5013ab15e59f86 COUNT = 64 -K = e83ea9ffa6d126b9563bf8437fbb7ce54873bae45f59a2b7 -C = 30f60fe5c0a3af960a4a99d136608356a91241a80c79a99772c5785289848863bcf8cf8f5aa92c835ef6d038fce21b7fb0eed89a09d9de0be727d2bb9b43703825d0e10f52ad696d0b68412f314bca0964b719fdb943291c5f9b08894b4a5ebfe1f2f403d1527fa962024d1f7e8748f9 -P = be9a7e9ed08d47ff27a432307a715c75c23c89fa000930cdbb7b49a5a97299302523d3105f0d583830d7fa0d8692ba3ecb78652cb2b8312be114df8ff96df0eb4ff1820beb8d01e1e77233283b78a5887937ee7377a174bd6adfcdea000e5dbf3ae0e87c2c +K = 6fb65466912d439280856902849ddc7614551c0c690f77e2 +C = 32e40fc400fd35bb381d9f2804899a9abb171b3f3d6deb2f32c21b4df93aa11054dbbb91a03695a926fc6f6ef21048ca9ca2d42cb3d1b9485c6559493a0190bd909d8eeca469ffa060c573aede42df188bcca199f4cca94a9e542fcc64fe43d2f511090d297c55aaba83dcd61faf2a4b8fd0132743756b56b6446f20d108cb6de503d84aafaeefd4c411d50da536a939cbc3d59f302dd46d130dbe2ae2b06fd170eec4c82e51a170f4764fa2555a10557aa980fa33c656defdd778301e36c4b45ab14c35ccfdcc538767df0ceb9c67488aba9fd87cedad400d37efedfc33b99da6a733f876bb73ba8739cd36b7f920f55f947e13c84c4efca502f4365bc85d5f339d818fc844ea462839d3b11bea602db728d336d476a3abcaf959a762ea0cfc0dedc21fc0ba9bf2ab112121d5316b27706dd6f2f428e3f0ca3ea417b0a1dc74179ef33135e737e429f514181a32cf032a21747104bbc57f0199dbeb330518e0e2579e0b48c6764842d964dd32e4e4d204c7c80cac6f95724db6247af09ab251d2ef76af62a4f04c63ac64dc098a87be1a48e312400e30c4cc53f2cd29f096ad10031277290ab8be8a9d36e34fe0a82bf3113bdd6fee147a88f2159a1e0b6de54ae97253775cea180f9d0f50195f011925198025e35852056dac24e4226e6cc2ea70cb8a167b4ced0e3392ff71b86aef5c1925081fa16a986f7993a0b31d05c22eae470a122f9008 +P = d76759199a4338b8470d00af208673ca7481c7b00b2f3632b47e2f80b71c2aa8fc4a7f6a11ac06b0dc87fe75d14e516bf9312ec75ae7077d3a69e662b6a7e4978160247807b4121018edac47add5bc68a3b4d84699d1b23c49af581408967b87001749a1367bb8c4189e890dd5047c2619139add63f36d469a13ee94baa89022a7eb6cf43ffb8afb3f8c32f36ab2d927b79ff848a7f63493587db8a099a83a57f8a854b959e8cd9d610877d67843e652eedf9c697ec7390291b32bed1fa5561cbfee7d8b3d9bd12e54123b20c2f3f779ebcb91a5b43b20c01ef4a38501f6dcb2dfc3d7ba1c1479d8a11fb78bc7fd6992c08e1c69df4572d7d798c8ca46b92be9db43b6e5a4132ca96802224850e04181c9362776271f03b1f8d833fcbbe18139545a2e729aee8ca011efbab0b18bc89f51187ac20d91deadead9592a085abea79c0cd14fc3575b7bad3cecd802c25d0be27f177b2ec90b896c596917770a50c59706b363480678c8bb52c3f8edbb389c1b057fbb22ee4293c95628e1f5efc01e0e0ef96b948267db0e95d63963020c83b1458e158f62e526871eb2f2514894c49778e6718f0012b967a6590e00fd570f447cc765df62f647ba1e07f7e08afdd850ae9598b5c766b38f6ad8466f735abfbd6dd4f46fba5a69e6a5d04bf1791a3f0be884404a9e82b9d671e1a3d9559259ba2264062512a56f6056bf560db76a17 COUNT = 65 -K = b41b83da0e71a7273770369cddcde471cc6b2210744adafe -C = 173c7171efc82e1817467f395406e667e7b80afb7bf80e86942782b70c33c43257bcf8ab4757a883572edffb6aa741bc5c09670810043eafac353e53d1670b09a70e90696f2ede24ee2bd3a40028bcd9df9a350221f4d0add0dcb0e362a4558cf5501f2c9bba3b88337e30aef2e5e887 -FAIL +K = 387c1b168ac6824634189692fdcb2d32f4a4302e0204bd5c +C = 4cfeda7695627777ade884b71f444d3e8f9123f92da9ab06dc817fc8a5bf289be82e1c7232a42b6e70fa47c7a5e66f99069248c42ad12f22a94bec3343bbef2140651bd08f33868a844547cc62b9927d4afea495b5f1b75d4b0c5a336be550f6717c228df9e50e8a1f259721527f9ca68593b5e7192e4ea9d35f93decaa87c15868ade8b136f3c64d039ff9e0d488284a3c56774dc01965ba90e636b6f8e1684d1bcdfc43dd157ae8e32d37a92c33d850d7ba6b64533619779b812b70649bf143c327329edc9ce7bbc991833aaa8bcc438b330fd9adda368aa4cdbfc13e7005abdb0c1ec0d8587cc6fccaa2f3cb3f59af5e7c4c76b193b7362290d27e8214cf8448e3a682fba93915f49f73bc2acf8b1f470bd7a8fa1a9ff4f4bd49d12004ff27d689ff256fe17e833d745c1fcc2c6e4e525e0499768b7ad0cfa5ea923416fab33ed93ab44d5bdcf0915c27ace280ece4ad1abd93e69be97ee1a65654d3454059347495562226ccf971a23c47e5406ab703dc250bbdd6251b0fcfa1860d0dcda288aa6762bb5c59e6d5b48bc30b81d0f0427c68af7796a52e70726ab46f5810bf13e55af0cfe0a671e1a65944ce6d5f4a9cd46f2f0e55f6638d8b6134674c3654a1ad265938dc04581196abbe2f3ad3ffba3b244b7a4c1dab653387c548e0bf2452e5ec902726140467c1867733e56cb0f4028ac2088af5c703ec5acfd7e092862fc5913f59caabb +P = 724c6dcff9fe8717f5443a30a385e69179473f2a2d0b8159f2737586a97fcf9a774e71392ddd0d8ee5d3a021560547de50ad042c9c2a4790a33c654d901a41135eea81df823723984c8d3c2a8c5ec169bdfc08049ebede5c52d84f528396e7822d81f29e08e64d1f10685e0fe55e299c52d0444a2c70e1cabb38f9c97c47dbb965e8d4b992e9dbe1f9235409bc59301a055085c4da4b88e978c1384634a341c48edef2c5d237b369992c92e903ce2d7dca5b00bf6b245a0c024581d8a61d03be6207aaee75b557ac0bb059807964c1537360b429b53da8aec20609c493445325178e7f90c2fb657b461a129a65c3cb25fc14f9f1f779e2401d74318a2d7ba10d118c80f677693a1c30a48aae65280476f5ebb2bdca8b3df8d9b7a351062df6bc67965f27e86722024a5583548b9103e8d5225ec0618fbbc010241fedeb53dd85c8cd6d97ae045b1c6db52908ba15873883dfda7057560ec9df3045ddce6959118df7c89be080ab350513d8bd696fd894d1c441ebaaa72f3994c86b178983aa2a4ba8b51e151e5eabf0b36930c5a27dc6787e07eb25c441e501bf8ffe8f0fe1f3f69d501de9d0f3d626fc6f6d39818e1b277493f53e1c2e1a7bb2a88d1a7be6a7b7a13187f5d887c7ac05c4cf5acad9bb0fc671cb5a042db0d6b41a34ba566d6651d7ea215e084adc1d53ed814cd052241f68d7979583c1f7f26a0c19359e3b8a COUNT = 66 -K = 810f37246462b4ea2009ddb56c3b56d842182b126f904ebc -C = 735c16c3c6c71a50df52ef18be6182823d3952b7d8c07b35aaa32468980f9cc6336b7679de0b84a3db23bf6b70a2379cdf9644b966dbba9a250bc24ba124e39dee0fbfa1dbc6bc1c989dbbd183faf48ef55a8cd58f86f15e247a9b4057367e64cd9f0a1c22d59e5449125a26751022e6 -P = 84b4930e39e2c5bb74710a03e98712aea847b40960198373030bfbeed5ed8524da45f605c40ad1b72434692a7fb839e56993b6da3252b405a8bf4a55cf2aa032bdbc2cf66329d5f07dfcf8c6d3ce519610913053f115505bc85d4333447ca7bc7d9a0406ea +K = 7d52ec9963a8fa60a6bb6408e969ce3c5b587fbfcbd3384a +C = e8ad6f047f7a685724e119c283fb5dade59f14cef614522548810a9b069628b9e46fd40026fdb9d79edd9f7b67a493a1795733df6c7688642e95b63eb50c1b0c5e8fb3fc5ef79e17d94f9f375d1f5d898cc7b1d3b1e199087a8aaa2a3010fd4b06ee47c642f69b3488d58a30e16ae60f14e8298d33d3f70de80bf7924cdfffb2c748ff8872a514c0a5083af27591b1280b21945bcbb477e3a5bbdf43f204f5d696d365fe686aeb88f600598ca98b6c5f679832cbb9c9c475b9f1e33fedbaf0063acd67da39d98443e8538d165a2a3f4053dd9bce6dc60a9a242ef929f1e9deeb41aee4eba90905f2d177722fe17cbb4a89279a55f110af61fe4dabece09279e1dcc470d62ef4895d5717be923e5264688ebe085527bc8c97281b87c61a4c38661b2c50fddf57bdac913e0b81d7f36bfdf860489842a7d63308c0a352c29a7dde91f856e5c4aa49a90a22c964b94eb109538544590532e52a30fe306562c6d4733676da4637b407782d44e7ac05c4dd0c17fb3b4e1747ca7136092839d371ca457520f27f1090397d59b917110ca6d9e161f0e182b8e6999361b9ee1362f685cde4cd43cfb2f8625a3a5ec519be90b5b6db5ad7859c3cb6cc13db49ba2cba8f9edc296f36ef9e03298931ae22b7b1c5733652c4ade2221b07e99f29049ba5ead187c801db00ca78097dc8cc2e6311e4cfc132dda1936735c951afc58a49b46044a43586157dca70b5 +P = 3beb95ea2009124bfabb64a6b912cbff50c08b33429ceccc98c6a566ca3d2c8fb60493e7373e866d0ee2ab6c1596802246a2f11c31741458171da3b511e1af91b9649fed4102e234f2f07e2f2a103d3f87ba461588071cdb836ebe5a6926fbf198b032c5667e7d08dccdf3ba3e1d7ade5e5c16ad6c39277ea189343e2f398261575d23a055ecf26c1fe09fcef4489cd783057a8f56824940e3eb75de30ced30bcecabe769eb5bcc0e5c00d5c26f7c8f78f93ba3732e6c0af223f6310592aa1b45a59cf42d312b1397417606e1fd35d518891c80d6c2d037660d536c1889763d8d2964b22dfadd2de4367fbd223388d8817b931c5078f7347213e351f31b99ec26482926dae7fb7626be8335e9151a2434bc95ba9ee4d31a497de07f844c913f5b43d07939f4b5356a31dc6db516ad78873c3031530d8ba87b7cd29ed1bc292fcb47dc60a75ad263027b212f19fcf84da5a66bd24e08cc71a180494a91c5354e5211cb9c7a7bfc6ca895db03ab9ee04be0644b7b46aba56883a751f3ca4171d50228a0edfb039215e725c31255bdb34f32248f9b84347c1fc3b415c8bf00fb5c7b8b142f33e7b18c31608a691e76d9f3050b37be603d0b3bfeb8daefd59ea8b99d93b171346e1c68498a7606214e5fbf256758f99443057243ce4a4235e7ff86f55fecb5c310fe213b91124d44467e92c269e1d20df1834cfbbc735a900283b9f COUNT = 67 -K = 3f84228b8155413d26377a11c1c83a052e889d8a830eeae9 -C = ad4117632149eef6b6a43ce6cdda620d1ea40a87c291646fc2f4cad2ac95043c3e4a9a0f96f9a78f97b22c4dd56d740b352e9b7c3b8e25d7ce1c0a935b2b58caada299edc0b3ac94b5514f36386651d6bcde41dc4e5352cd7727d355dfcc1815fc331e4c66ea9e09cfaa28805f07481e -P = fcb897181b557ce5a83c627d55bdf99f871f4105e224d13a6cdf33491bd9f772fbbda8f224d8dd215b31686ed67a79782f96cf29152b7ae60f38940745e31de37a7254fcb61377b5cb68e1731f01872b93bbf86c6ab59915053bf400cd6f3faa03d57b127b +K = a8e4193ff8d0ae9a144109a4681a4e403f1de3f3cf9c2201 +C = f9ce9fa11190410b1fa9250ff29132d3f23d1f7de87da673d81d4cbf45ae0128269c03c7b5ac90e9e641af2d947861b44245a8ca5a27b2377a0230a6ce2773373b495838d5c55394ca32ef6f222b412d98613874d0f677c0b215451da7d1f8d261f3a579e848c8be814b035ca837634ae51173917a73c008a244635035208cafca166392bb3845ec6b68453a3f7c76a40e5f856bd9e755225839125c4828d3fd1641cba0b3f7fc28d4f53ec657c5908c6b3f44239739234a9a3a544d7b29ddebd98f2a1d649e1a98676b162a3aeecca7b00f939cd18cdc90cd4fde239fc01367a6313c69082932a091bfbd533c900ce69a853115f2f41ef3a9298ae04e0908c130733ab13f839b2c84d71c5e9708c03e4eccfb549ab48af855aada0877966a0c8b019f71221226f0d94d99dc7b18f19dbafd0b08c57603e3d8b3a876672d4546fe765909193743e7a3109d3a7eae571d2cc32244ac5207f15198c6d14787f59914028c2c188f2915caf8a8ccbf4263ca7b97d60618ed2a438367c3409a5537869dfb4b0d7d83e1042681e4ab0bb1f9c38e074e5cc3290290e1d25bf3682374cdd7a0575d416d953a80d3b0c188082ac727571dae416bd42c355f8754ba2bd6ae13309bb28998f938c9eea8dc88968d9e6f803c853d654502b65a453b52b293a3ac6af21a9829e4a9ec09e1bd322d44ba4fe7ddfba1c3f0458bc66ebe037005313ac20dc463c2182b +FAIL COUNT = 68 -K = df1c95018649d168c5d83b35470a325a85409f5cab6893d0 -C = 0ced9ddd0f5411bebcd7169f8c0f8fd82711af2e65e4940c6d0a2fbfb34980fbcf177c47ee42480d7706b26ac720f11183f4ae1c382671061019f1402ea5c0b54eab75ed3846768153e1da63f9c95e89c53b0fe7afbd34263fdc3e692260fa8d2f3353ecf513a6bec95daf8a4e8481df -P = b37397bb495c89fdf695f0bd567e671e2fb0b581ee280d7cb787d3bef4892631ace17fa0b2531c90d0b45e318ce1bebc0715b7f3ec2e773ec91a48effc7da8c5ecb86340ea3c504179074885475393edc23ddae027ed5b22636378081cfe99c16dff57be3e +K = 64133aae0f45f64a7125aa234c1ebbb61431692627e48330 +C = 84148663e0fe96672fcb4c4d1f7e459dec93aa8a57727ae1f2e612a4f7aca39d959e260a67888056bf1937c94622c566a56e8218795f61bb9b287c0f80646cc6b5a811151ffbdcf45fbad7c6520e412f29cf11ce1f86cde3b47d44e3d44f29453bb534027fdb32f9cafdf41093b6458e66f4c45bef71a31c1dc940c6ccaad84e9b06f13c88bcc09bad53f07e749420b0746e1b7be02f2a4696d28c46bdddeedd7f4865932f8fa80d12416ef280279eeaabde1e7d1dec834eec1b35bf1b9a833525e874ccafd3b97160cac33ba8fa39350f1ce9cd149d1b51523257de9e18970bca6b9a2dcbd656e295d96903a894a9eaa39eefdde025ec6a55dd5f09b6f03e67243e2bad5d913bf24d3f6669f8fdbf434f282e77bd449bac613b1fc897e5e021669f15a5c028075a06afa774e5737d42ac0a112611de549442b7b65e387105477b72768159a7aa56067e9eeb892987a7ff528bb107a3ef7e5888c31767fccb393a23b583b36f2b89b0cf56b64670eb3cc621f504d2d66cfa74644e7f7ebb7cf2bdc8fdd69bf5198f299f492894942dd93c37ce344815e289620de9a8a8375cddfa330a77664722efbece71452596f375d8230ce54ddc582ace84ae72bd21b8a30b2e032d49569d948e66be2df159964c46a9c379ff8f2eb4c03c461d0a499948e2dea577d850bac0b6b2827fea44b4f371c1539bc6f8909221dbb31a955b8592f7698fa87f7ed9e4 +P = f98f06b20442a5d7ec41dc9e88063f657fe14cef0c0c15103a4a8f591ac566cdb7aa85ad00114b8526698288d1c607c9b333475b93da24d118b7a38f6f81466d76170b7fb7c0797f834810e0cc7a2c3fbc62921dc4af49bf63c2f30d74b588db2f5bd9922c576290d163157ad7bfe9b9d756a1112ea779f941b911fbe2106c5439d03d0171a74f92a1b32473df0d822d61c5b77205ab42aa313d5875d2579f4564debc04c1c5848eef5a525b37af677f28c8df2350c78767fba272c4c651235ba663591c041809b95901d479a5802c4b52cca7e22b601a468b61d369f0fd420883fd2b722f8da394eb21df9919cd97162d57e19669f8f95cbbe45f5c01d18d25b8c0436e6e5fe4e64ca38d7a644fa5218b7714bf8794739535ee657383144aaba8cb42634b3f364ea34970775714fd85940f19805238fffda702bd09f5e6909159923ce8a24d5e8672362cb2ec9e924af2a088f37f31a869f2fd586242ba1464b825acc5f4b9b73d32cb5f3bc8ac703f57a1a504dbf6c103b1b2fb0bbe014a395e1e3806fa89220ea922ae2cc084016952316dc8b797eee6811e7158cb3eb59fab03d6cd1b22bfa39303ad6f43ae3aecf826913836432b9537f06eeea01aeace6454904ad536ff73c9a3a713d739d594fb37d6a6443059492b4120207dbd52849cde3da19a64b42c691f7d71a3306c4d279200f8eced75117c0f2bdf0c4b9746 COUNT = 69 -K = c808303315ae5aa81b9a03d48e316d1daced3bf0f4577166 -C = 6af2cb6fd25939196aa02b413b042501588f584ccfa708c6f8861c274c6d2151b4960b1c2e0d14743ea0a91a798711b7e64ff5d9b4220e4e7db2605f8f9de1bb988814b5ffe38fb3fe37c5f027dd45a42e6f955d69b065caf4a9fc7ef0232a5e940c8a439c59c5f2438831960453aa00 -P = fc0ff6b70e8994b43764c17c492c0e869ff97bf2ad4c4df086346d15932ecb0e8e57af16dbd33886f8310a1bf08ee61e3f16c1ca79072882ccf882a3e952dc9b8722a6909249dc8086cdecf304fab618aeb53b2d327ff79bd3db80cdc9284d4599b0e90796 +K = 4ef2ba2c080a6372dd27879dbd6ed6832f48f49d03abd31b +C = 27153cadcac2632d1f55ffd9d6b3e0946cd17cde7d059405493accf3109e62a4e1adf7ee9e3445b0c523fec2c3907f6001848b5d8373f447c19a3bbc8ff89e07f4cf77a99bec5cec726743d3a21eb799fe82eac628eb253459c5de4971ccd6d23ebcf8e4f7f7abe1ca6eabd1f5aecbb9bfe8e5b14e200e2493db4a75895c45d15a54d64f2dc5d9790f73550b50def8f3e63bc563ceadb5549ebdce75191595bb9dc9fab21cfeafa548c9eb3330d43ab5a1fda663d3b3fffb0870c45f6ff7ba67251866f18e14514f5dda0498d611b7ee6f821f05a315e6441d72f2289081f5d6f1154987ffe4bf275ee4f1f2b8b466eccddeb0e7afa4ebaf1c49ae121cab56ad061e9db82de7351f200df13b2fc03b440e97d51bdfcccf1f20e714531bd8eed2e620a5dddef19ce2eba3953c0c5fb53ae093506df32addc8af1df9528cd56b97339e53f13848acd49b96fcae98f8682f06e452a0ecb2f569d0e53d2327bebfd59b831c9730f2b9459147224c0b16eadf444793bb2ed6ab649cf20342d672dda3cf5c6afb4a2354924667ea59218b6ccb7fa4a1da34325e6a673952dc610a32b1181b2bad03c6be02bdf5e7411ce56930e0d481164447bc5708e5cbc87868cc7e95674c2f9b77fb352bc06ebaa94e261957486e3c75aae27982a7366c10643b3c96e96c57b605d69bd7f5b982f080cdbf8e6e93531ae1d6fb82a7014bf131abcae17216e197cb533c +P = c3d1e5b1375ecc6f64dc76dff9bc82694f44a2dcdeb6becb2971d61c1da27f734725acde6573fcbbe8f4cb85c71c7cff7c184d6234d54ec0b5cfbe222a538b7e96a333408a1f3655c1e577c482ebe777903ca0121787a2568e1257d0e01174cec55ac263fccc633b6d08f48f577e8804bc6c9a1293cbd59764363f4b4acee849c8258ce1af337aa955f60e6bc53005bd9992f2c26f9a22aba16953fe199f861042b9bef016f647e860d3e6c4adbefd1df0954b573e1f7218c61355c4a91bd4321bfe0c8717c7f6ef7a608174b8822713b24374152ba38fa4a138ee9c529c34ef026c7f2b639b1f1b9f97bae579bb0f7bfeaa9b88d379174aaabe589bc994f69ece2a60f219495c101f8b94484c20717a67c89b4d02b50084177e329cd35a29508c8d41522c92f6fcb27f23400841469d9e79efe7b5022fb0fe1253366e7c32465a0b6bde4f2738429ccaee996d377560b2244145e12dc30d240d80c22ba6777a0e74d0b0f43b0314db6b9f922c6ab5e3352c1c745b540efb6886c7d4ec534c6db02c7162ae2fc623d8cad147d0cf62f618b5d57d3349aa15bb12f981644c9940f492df106f87d8c52a6973cbd34097810722cfc39ea565f36d02350df22d16e2f10beab029a1c1ef3b666b98593509b2ec5932d7783517294e8883492b4c4970d21a525f6491fcf935f56732c67399ce4405790fca67702080cdd6a4098ac4da COUNT = 70 -K = 2898586c92421ba9ccc2ad1b57764b46893a3e57cadeec64 -C = 26093412ebe83886ee1e165179aaeff8fcf959a2f891d4a728ddd8129b98ec967d6bb6e50e4c121666afddb29ed423891a1691dc95641768cb799da736a169be0a7ca92fe859962baccca16529783279f14117fde06940d23eb19a4f97b83c905880c5bc1fcdd573041aa8dbeef83091 -P = f1b179447f751c749811ed295b3c623c0301ff960758f1c485752c528b96e8bcfc777b839853634248d24d15802533fea3e0023e45b685593220e9321f4de0906eb0d87fd36af216bd08fbaa1ae71063936501139ecc1b990fe5fccc71638e9d00f527da81 +K = acfb33504c8d13bce3ece0879cd6a76626303193c96dac06 +C = 5c79317c75f9877434286bd5b3e2844cfb3d74c075189cbf9314f7cb60d1751bb611e9590494b77f0544185c17dcc9ee27c71fa4e4a7f22ea7e4d55b21fbbb5102a331bea569068577588cd03c078fc8ac59002bb9c6fee608a3fcaab315104b7495eee427f0a7f0ef8d502473929814f8035573c06492dca5d5291156fd6f5c721cc863c83785da887ff5cc02df5475a0877a0e340862138e5cdf8ba61fa5e5b302cdd68c816cab9e7d8d9da638412af3ed7384709470ba78c748519a9f36745d0ff24b63f4503567db2232799f65d245fc71164d1153ac8e08ec71758cd66bd265f55d036a922167f1d0dbc570784d18253a95db84f0b77a1ee1e9549eb05f983bd590693bea56b6eb3586577fcd438d61b922ef1c5dcd0761e253f89123a8ca2ec714762324b9f7124c4dc5c48cbb477d167512b4a7f16b360e201d325100904ae568134597a6e9276be7ba3b629d66df595f449abba80203284e4090be745bcf54e539d23359c3952e53ff7dd20a491c5bea9dae0e005adf4a17af0570a5521ca3bd277e865fa563f34e7183dc9fd203911485bc06d9f1d964334ef735d53f5d5f66222da98b550f3641ec3eee62f4b34993e0a5ade9f0ad3f276212ebea305d433c2190715c10ad14da83887ac996afd1c207d5a6e9d2c67d0fbb8e8966b52ce7613245dde85dfd69863159e7719b159d89bba99461017d15f3802e19ac89200056cee0a95a +P = fb75592174dca4442037ec92a3271afb7811fb761aed89e48db7c9153ab0438883ea6670c32f67f02c9fe9da6dd62a28d9eff59cc9b15b631e240c6485369131e0eb61e3a29d22219b271e421cfc3aa323293839be895dfe749677b43dd0165fd7b38ae25c583aeb9be5225ff90d432a1d36d668c90ba4712a8e4840dca89bbfcd04bee0e46ae97e177c05cfa97e95db7b1854595660216e780db4f14fa01f361896b4518ec821b7a590751310ee550f3db14780a5863f76c915b78f310232cfbf951ed0e844c0c7f08a00f8e6acb95e9d64aefa15f657c12720dcd72819b6135444fe99b25c525269ab67ad7b02ff3d8ca82f1a5ba080616df05142687da269bbe9a1e58c86f9bfe4881462babed54c47eb945596dd16d203ea6f5fc3cc561d186f25ddce798e63a663b080512b3864ce1f0b2d86380dd80fc4ebdbe83e2ec384df6f224692ceac492ba206e7e7b84c921050b58aba1ad7991917bf3e35155bba5ce3d4ded57ecf3171d7e246c8e03664a0293c5da957776d254cbd36d7f7d040c03fba1750b99084a2fc6c16b4c40cd8cafe39caaca392f656b5393e47ef053fab53827ae01e7ee5205f8e313c2c56357283e40694b7dc5b1d81ca0418085d274a4627022b0dad5ef4b209812294c25ca1d4af57e95012db734524d924861f53508bbba72a7153ea0f3e7de78a6de73dbff93d2b00ea1e0c3a0be2e5415c6c COUNT = 71 -K = 48cc35ed8c9e44be78351637929a9d7839e432267f5c8370 -C = 008fa46b5c680414929ed69457464b3a35038f51dbb87c9959fab78332ce86c0f5788ca341b3c53cd11ece2f4bc3527af109191839905423dcfb0e1fc3d47f42f27c966c8a92f2dfb10a9f8200c9fe5368779899988f8540d0e548190aa9354693c7da9f9512ee11174f6950ab5e5522 -P = e925e0fe2d7ffbfdf745beec9eccd00b8425ad7396c74a24190d682df1a8dd8d260b2b510192b8a85bd8a800af60fe11a8fda72560635d98ef963e8d67dc9ac3e0e4194afa16034dd1b0c88c2ef6d271606a5e35005e9eef315fa56388592ab4034b79d092 +K = f0a956530af616059356f1ac5a93ec3dba392dcab75e04a7 +C = 6f7d5b39beddd36fe1778e5094d83db31fbf2c013e1f29ff48da95b1ee7fd08630b77201e71abde0d1715671822b0bfbaf410980425482d78b6a75803ee4225da7426da8450cb4429d362456179169ac757242f80d66f706ed4c19c864465899363edf1e07fccb768fc1ab4a8ec5c57edcd6b7d5fc74f9c417c8186ac1cb6958b2a75c8ef3eedba33dacf4e2fd33c194106f15028156fafdc850d8c909d3cdb646bfa45ac577d5a1b2f237b95a1e6c4219cbe0113c175bfc8d9b981f4021a17012bd76c858c1d367f77ece137eca92ed871385a1b40e20ef1f86f90e055bc78218c77eade30bfccc8a428b338eb5b79f4e5cdacba7d73fa09589fff3ab0d5168aab9bea7c1e411f73886002bdc762d4cae471d1c7e9af902eafd82e68b425002bceca63dae8c2fd5640af665733364e110963fd86a4f90cf63635fdaed088768a4135f7c8b92e8ee3ba1f125590b1209149a5413590262472001069e78f65f2865a976dc3602d1e3c860a266392b615e6d7a1e8d7f3451eafc68afe97d065acbf854a2757d6f5312e6b4b969e3c96c2491159adae34caccc2a0beb8b2f1ca36487609ac10640abafb3a88b2a24b90c077c7176e8f62b33c6e8395705f909248fe470308fcc9f3f6446d9d82c80dd15692087d2ef58b93e7ddf198ef31e556f8c8b1a3408e9010d89e521fcbade32f9357f44a981ff994fe6cacbc918a0c54195c77e2da464776cbe +P = 7ddee610c0ff4103873406b86762ef89321da373abe47598d1b721e7a0f4dbdcdbd313c42ef058eacbd38fcffb934402f636a832e92e395205424db8ffc45fb125d70c07b41ef915f97abb73428eb9ac7e7b8a5ed55d7bd0fcf8f93b445c27151596ad0fe1bfa210807c6e9cecfb7ca23386f86aa287718fee014665560820d5674308bfddee6329b64b15c3e4c7f6bd4a4f52bd1d78ecf56d567b73a36dd270969df277338d67af337ba73c81b9510862745f7772ad65a73a27bc7ba0437cc6f2f6bcde2536f05662789ed8ac91117ad22b70ec615c35040e90937fb0635fdc797bb2f5d238170c1dfd4c8cc9c217ff30eebaf6ea53363f7aae6e1e578c154463c664bd56d44eaa0a2cace45fd5b08cdf726a9820be40f321c56fd7ce7ebe12e52c76d6068077919fda30c6c6de986f3b4a2a5d3fe239ccd1f35259da6199a43e1f610a21667c916afe6e5df47a5185e6aebb111232a984a6205b30933941a132b88e8a2accf5561668d3e05d72832803691200324c7b385cb1a1970fd6634e80725692b7c9b8b70771b288750d9e6b004ee683b034532915179b93648ee3763b30de60f2df40198bf7ae829752052af1d3d90854a13e28228ffb4f148023e8b1c2276b92b741356baec9e375b21f7048dff1983df3aeace7ec7cd6def76a947557c57c53f2c5f018d22ce5156e380164cf28e543dfb54733198f82c7b95074 COUNT = 72 -K = 7a2e9092ce7d06fd267e1f3517709c386e80eaebb2a50eac -C = 82423e491c25407ae9e578ff6be11f127528809896608f8014d3d9ad693d874125e9e715aa4e1199a494c4620236032ae849c93d1acfc8d1e7203c50f5e35b52cafff997a9e28bac75291600b97bec9ea221f97fd64c8f0214d56bafc3039904c8f400963aec2bb816fc6f80babd9781 -P = 1b1e64b0a0c43d49bb5cbdd4b97a8b2dfb9bd6b08d4dfe89864dbbaf91e17d6d1967c49a18ea8d9de133a349d5799f4c19b14e47bffd65998a41f0deaf5a1c2ec5119170fc84d593de5fe8c7cae2bd8c8db5d85d30edb41c4ef12839bdf3e162f0ec3b2a48 +K = 13fe89298e559f3edf2ee5ba53b572a282bcc51458b891d3 +C = d1cff04fd3cc637b4b69df5e6e7961360ea14380bce854c43e171eaf91eac761d909489a8683eac42870f367410ad56f6db18d45719032197347b49955c7f959411ee6a8c03fceba821300132540f7426105ad764e7041613397db1dfb1e98ff0165e5d17c7a728db9718c13114ad847a09c2245d705892940081e4e06d85148159858256caf31e81534dbe8e014fc5f0002f03c4d0234827515a77b894d276f066d3516a7eceabdbcca006ff25bc027d48a3e414c82ced75394d23f62d2d15ee22c52a7605c64bb34b3fa7ec4f78044407cd89c61ec9d719149c38af8d833e85f16a8730d6c32c2d917acf87e336ff04793300e5e0e77c095a4d8c6efa6d84eccf23e77092072fb1f24b14bab638511fbb0d82217de31fd696c31c063859d8dce15e3c250d5efc099187b0394f213cb75908feada726a427a385874e80906bf66995b662e0911468eac1eac233e7c6ec67efefe9e125e0c7c66aa5719eb1a1ca21f36096aa2ed66447392e228f37947a4b0958551f40e0d00b1a728d74bc902b4c0a9784663c455ab3bf620243159017a16b5002178b6daf9b6b29e6dcaefbafdafed4dc796e279095b1103b578126666478c843760a574a002873e1393cb693dc0acc6e2295a186d10001720007a69fb60d5322fb04e63b7d1556dbd540bc08397fd0df9883783a1377526091a9e9124c25ce0f1735dacf30e2d6fb242997ddc262d8ce52feb4f +P = 7f0c96ed87600b2e3e5e9b150421c5e28a32b9b2e9c72b7e07c146032a44b060a9b241433b986f57cb79a39f320e20a43cf1e31860710c81740834d0525887351eae35a4582f690088c5ebdeaaf240f1c51c20f02604fa0eae7525cb9805ba59ac7202ecfc7c3f1facd08ff6f0deb91087c7c7673422895d9d8337402dbcda91429884d9ec998e62bbc7a74fe45dd0c7b78ca4bc6bf972de7c85fb9038413fee834a7664fa2ce4062ac88e5f96a8995ae3f890c53147ca78e9a90bceda62c0f5ddda4b77e1b958c51ac830808df1d4365bcfa2f3165628a573181fb7ee03820a5990520cb53bbb1872a3f1bad59277a1e86cfb5915ff25b07f82459d81e595603211eae7cf17964dc706dd9e25cc32c090a522f2f0bb0b9142b514eb0f87862b37292b679188e7f62633799ed1c8043dba12ce328ee179d729f36100b83a181034dd6547599cb7b064707123c14eef4229dea49723afe7b370ca7726e4e6f74f38615a228189c510b9d301bcb8aa81592c2691b394784efd247d33fc82d1160aa4a87b41ce13d5ca4a760fdd679ca1f1b133ef245f1ba6e84c5f7e6f7ae82aab3944fbee643604e530c71c077f7d8488b4a6741d475f7c74e5c333c10119d26d2e197a11213ee67becfab090d737bed3e0604ff34772d0f4248214f178c96707a186f88ad69a78759abcb696c8c02224ffcc364bcace33595390ca3b573c4d19 COUNT = 73 -K = 66dd379002f111de965bc5ce4d326b74bf602e9ab22c660b -C = dd185b84629cf53ed43814064f7a5b969192b2d0244b97861a6e55f366a93e29f264108b8913f55c04f7417544db2fe39c01d90a80b81047c64a88dbbe7b149bbf268eef7e75947b1f4902788d5a26d2c37cc2cf35c62526214e909f4ddce268ce477ff22908c399948737e0695fb3ab -P = ca711645a8ce6700ccae6b8dc7c45893f43d2ea9188759cb65dd5d10a4b574f7a341668ffad83627812268d25e8148796011c8f546b26836bcb2928bd7a5cbaa94241559763dd6334e8e7172aca12b8d9bf3fe55d973b0c3a5349d3c7c2b063427a01aa3da +K = 811a2231a878938acb241c25c4dc0f0c8a1c35872e835cd8 +C = 7935d84f1ffbe2bd02176c9b029e59981b35e23aa4235145fa2de01c2cb0264a548dc167824767fa580e527fa29d423a6cf9c88dab95505c5b7e77938d26d3914f76a8dbb0c26dccf148c31af9ecb5285f4b13f21555ece8a56479c9a140eaa5a515692aebc7bf79174cd7668feaa3a2d4df49f1dfd678a99f64d97c7a1debe3df74c9573f256a6705ff1de25a844c4cf0bbab6edbfcad172c25f552683d04b186d16105e99eeb5a947e1afa7539369b5e335a8876ddc3633e5469abc9aad098ea64b5b3dab2e271fcdf84cd9216e15d305bb1410039bbb9b1b11c3b1f9f177bf118e348baf9c8a188f05b00f737de909dff7eaebe197a1503462833aafac837d035d22c7cc05c792fefe2d0fd199c215661963b80e262ebe8b4ea363e4cadf59e47c1da88febe744d2d8b40f88868d2684a4d4a910f5f2901d41eeb64e43df79c1c00d3338d085325b0f404e04435b9009027c7e6e22e1aade8fa0723a3a6c48f083195bafc8933c8fcd7a2d8733090622169f13c2bf319ae1795f8141d19b80429eb59fc09370ad2de28ce91860a17f64d497e5223a5217ff15c9e534cf051c2d22b5a3f5474192a3e7b6b6e6d28ec620071fb33b63d9628bc0be6602f6b5a76846c73d2eb26923d746e924c82989e236733c0dfd0ee97caf22da9462a94316c3058f784792cfa6af93916e6e6a4cb0c09d4959d9191e5623788db15d3b8d7dd7925c5ec228e90 +FAIL COUNT = 74 -K = b0246b44f7eeab8fe4bde0b46d1a7a44e87197dabe54b7f1 -C = 584841bf7cda3d85ad6fa3649b25257efaf9fd0e7135bcabc593bf45ce5f38ad0ffec5f7cbdbfa6aea39dbeb8ec8ad2461ad67d76de37bd05125bff529844f67400d8fafd4f489dc256999b654da9c680a63f4f4a5c5ed3d45bf98c904af9b05cfd7340e327656912e67a452f23ae313 -FAIL +K = 0a47a292079cd59c8a242684f9d9fe79c14c8895883719e1 +C = 4f387b581729f61edd9923f40accef3eeae1571e1a5dfe79f5cf752d6fcf8dee907101252f73f402f6afecb82535a4126909f7d1389187a6d88f5c13abd3d0821dfa8de7e59aa8aaaf46879636a3a8d3fba47e9fd0b9a58d7b5ef512800551914cf69b9daf39e5039ebe88e4fcc3702134c11e69124a8c562001df1cdda78bd468e8fd5fce1cc1d2005aa692224f067e6ac727aae6a1c4308178cd8fabf66dbdb262c2bdb58733fadf48e2c667f49154331c84890d1b5efe9e3c432ac9cdc14a9ec73513111349ac90474a47fb4027c32e8485b8b83d228e4ea02b9adb51e755aa2f09683a35f63b5180fe651dd4dec0b8107dc8b74b64e0c2cc4c30e4a116d465cf134749a27909914e84b28d2acea99bccfac6452b78cdca5fdebf6e89b9a3906209ed4524050790eb56f3eb233fdcab8bb70adb5c288f11dd3ac975aa0b1393411c1ff5701399cc412340334cc6611ea5720cf0276e8a9eb3954b12ba6004324367dbf1e6420a82f4522c491b5f053d6fa1b6ba2d52c56022ce44423db5681fc9901e8af9059ac47c125f8c61b725f0e2dfffd1f379f276dc6fa3d2668c1cb17ec6bc0533b0683ca933db5d760bc6df1d3f7a5514bbaee143eea0f832f82203f29ceb73fb2b272426f506fbba9cd0214767bc000f92e05073cecdfc43953958c9ab82967962f4c4e848da6c6de93504512b601e58bbc615a5fb42acc0ae43464da761808b30ef +P = bcd36e0ec01ece1ce0b8474ea4520629a71b6d8a7b1cfc205964eab4878a5891224ca3ea773f1eb0a3de399dff8f221fab844b4f8d8ba02d4b0c0e07dfd5d947c48a292d25d5c3e20c3695e42674181c6d0c4306ea8cbabd56f04f2f7096478687131c9eff3b2ce134fb4ca215fa59144d086fbce5225101ad2311d70f90c65346686cf0df3ab552718062517ca087bb18f5c40a77d3b76c0703192b963d473980e764b389bb9fe98d6511972100945a7aa82760ba6d3a8b1a38041009942375eb18e0770e87e11f33e60ffa4ef507371bfff83049347725b3e1e16d810ade4069c6b62aa9f9a855407be90126f0ce00e9844bfdbbfd2d86f89403d6fef75ddce23d7f77eb9850a357a66aebfc85aa087f9aa9bae78f16bc8c7423bbacc59469511f918e658bab26c2fc262ae2642a788285e4f1ea43a69c30096c457ca73b1fcc134751cc328009a12d529fbcf79e535c3ec4b1583e29fae9384095a54bfdf99f5b60b6354b57d5f01d01d42afc0e09b7a074a70ae7c24fc6cb7b8d6155733266e055d1b38c75b0a28094c684efa22e5144a19e9fe3f1eb6f0b8316c75b73f4e8800646dc67b8e1e5696eca65c0ee1a5b361ba601ac84c65886043b7ddb0d2532b1a59c492fb8f6d2e473186b13dc9b7a12c5b547b8c1ceb16474f6c3ba5bfc7a9abd8bc827f7fb15ffe5405183536fbed216a8a19cd2300288f892faf50420 COUNT = 75 -K = d3fc294404ea9b3e54d26488d9b45f8e72e4f3aa906e119a -C = de04e11ce0df2fac1cf058c7911f5b594ea7eae50787ef6021ce571599241e9ee309cc0d9ecc958b579ef7cb2a3626e7c1c3d55a9579d44d924d037f2e060b537e5bfec49a981542d45c865188c7a21c347a4a7f65ccb43a48efeec3c74605bf20c750f064671958af8f8e06b0dfd4a0 -P = 864875a48137dfe0ce241c34586fa87f40b60e097327bacb780bc134d3cb537b0064664c1e4b5bcf5bcb70f227f0d12227111a87ec2de51ed24d8eb20175ec8d72a2c947cca3cb1358697d70a626c9a64bde926db43a1134efb9c0b6e9921b235b6462cc53 +K = c1aad307d281a1810d4d7357be5c1d65fb045b7f455d5517 +C = 7afcd8f6ec0363bd6c98cbdb4e9b537ad30306244f8b459bfcbb6d2b9e6f37309c08949f469a9a6878366491230114b723b07ae78c5e4ad65b25a2dbb2ec0405f10e43df19b46b38d74aac8555d264f1360685e8d87583e2a893f8ac49e7c925c6d1bdb4693b78118292a62a720b55fadcb78f077d3a5449e4c2f9843168b83a6c16d96881fc329ad804e8c5314376b82482a26a9e77d04fc0c476d3f489ae6117b06d28bf4053164df7805ef9206b8bac10c8d60af4b4450866c1c81413a3d095dbc9c001f23932d315908c48ebed4f0c4950ab23ba28ef111cf51b80f33c7b66d0b18a42e2f7b60af7166f0a3da6e0fd8e002e429bd897b00196e07ff4e5ab527d103fc44b6127f02140dc34af48a554cc40de1f9327db871e28c5829af5d5f218d830d5989ca5919dcb87b5b1764a8c5f92437799a8242a026f6d057efc28b8e8ceefe84fb5060d404e386c492dded72a64db4a161d2f6fb70a856932d6f4a631ec3140040c8badff264da7a4bf540bf9da7960d331e589e40cb99f586e8ddabdabcd06b5a25b48d0a08f0982a5bfe9e3a9ed014fd88246101c6b33686b0b211477264c1cb5338a4332650d1d29c2db1d70923e9d0c6e3a12b4bb7a63bd748204658d590e2bf5980e3f70fd7937cd6228e769aa44598929b808198dad845c3ff0411271ec381a3ad5ef0f8e922ec62f6e00240e9fe02bbf815f01e7bcbb18a03376cdc0f722d8 +P = 9ed8e94c7e887a05db9c855809d1367193e8c5fe31e7b42e43c914b1526f2aa8972725b58554e1c636e9d5fcef72786f4fc44f059090b2a8be35a40371431ebb8184af968aac45c8f0f3a2b5fef8ff10eef61169642144d0de72e8530c0af76462715ad0e6ddafee3f0b5b5776fa5c23596fbebf80c6af043087735b116abe638a216bcb82953181931c635c52ba8c358dcd81afdbbd97ff1a17dc3201aface1c98cb0462b571e0ef013d98cbe973d85529adf0a6e6d1e89ea027523255f4b62140ecd942aedd68331f8801811b146b04ff01d7d220649a97754fd1a870debc59ce7912e30b8064251ea66ff5ecae8ec3564d87d951da18bb360f5b05539808d6680eadcbaa80675f3d9630b523ae38dee5992f55022f2b8f64eb9b2217e9b85f5cf6f939074433b9b608ae4e45f75b4bb7378a94041298149861d5578144ea167a1bdfb5ba19fe1ba3f2f908a0484bfbaf51c72f35885d81d6bf49a0cf6943e12cdf18abb52332ae21db8eaa5eef41df0aa9d4cc461160846327ef2e94f69a793c8d00947a570eb0615d25ebea0366fe45d5287465dbe312626a7c76c0b6fa83d20f6373594260a3c176377a7a275e00658dac33ade0768eb1658d6f4bda96f4d78f0ba03ea3878cbb0277207bbb66c647882935120a6e24072c155d9579e01e3ea5897a816fa54875f1396b4441823fe9103064d334684cae073c63444397a COUNT = 76 -K = 1e09c2a1d7fc8e23ff9580e82b560d7bbdf241f8f4f597d1 -C = 1144683c778b18489f8b8a9f9e40804b591cc83c1f1f3c1d288dbe88148e200c75d0f83b3471a9c3f92c5f7bc879aad5bccf4796d8af4f3cd09950361368db53a403d8dc124d6e7fb22e67705b3924e5c1ab79110364c59d7c26d17cf0bf4fc507d2e60c5bdd775f9464dd0ca199225b -P = 3e573e5c3245f75cf7fce83206e375b01354d658b77d417b7058a4393b352047be1fb40fc026259517373036c90ce7b3863a126efcaa0a613a8bedd3d7e282a3aac0b0b02f91b40eb58b7fe80d0c1e72d3c4ec1fe782be4837964ede8f69c2d3be1a3c4a12 +K = a32f901ef23e84bc98237060245a8e7baddde61f018b6c8e +C = b8f806dfe63caf5d0b5339cb3ddce250fe9006e242d4cb38fadb55fc2734a68e6a89d93418975a1f9bcc1243dbbfc426bf27309f9e56f5aa1d651cca6c8f26d292081f6999f1c80423ae18e5a1ce1a20eeb0eaac0255f56a52ffa7ea9a3b8511f06ff26667dc7d0247f9bf75015f0662dd205e29d6feccdc92b95e8bcf338fbb2e466c7b4d0542cfe8527b89f359a1a3d7f8df1dd450c769d82f03ddefbdab993e23d6d763f1b9e761a9f790fe9b55f48a87bf6f9e9e26813199c99a198892cc479dad0a84743fe33f2ae38bbf9a4b826a0208448164fc0a1eba53aa113db27ba23837d487d44c1667785e8dcadce9bc784ae1be329a14402b2482e75398eb90238071563a1a74839b59a45348cb6e2d4446679c6fe3bb3c4a831514ef6e58e8245364fe32cff9f026dfe7eabae79be236441c91ffe6ab5bf4ef0c98e86ee85f4d220293c5b9416ff2c48953a2e7855bbf2ee4a836936168d92ede0f48ff049265dba540afdef34ac1bb8fc9425bd6e3309ce273422f1dc7e8a9c11d66cf99e4e2c6aaa9a5096459084e3491a687f9cbb127a70eb68cfe07c99c8fba83c384df46d22453a94e67b99229bffb03c154a010d94d814bd28745e16738f60110aac74a6a6272b65a65513c1a2c8883dd5f31f1e78a0bf0d59c2341e83ad13f823e7b8feadd27684fb3c722cb81d449a8b501fee4d9cbe7981722feb382c05d9cf8a04d04af3ce2d54869 +FAIL COUNT = 77 -K = e0202138720075e42d7eec52fc0c2dff905e8fff13dd53f5 -C = e67c732b23576cc2aded114ae8195b6042d68f9febb749a8fcd1f0323f0404fc7d79f1c0755089a6c343b988015af5c04d585eae07c46dda57d85216e2bfda6ffcc6ca0b6d7bff7e6bc309073ba0454cb2f7b013901688ff25ae1be77c678de1eb2a34ee4155b2c7b475cae8f4ed5612 -P = 962bba0c08528d687bfe870ca6d13cd971b440f4b2a81f794182df20e338c5b486b73dabb83c18969562f9c0228e76796d7524ae88db1091db0c531588f80b82bb5398c3ea990ecfd22b2af5ca16fabc747c494acf68183a0178c03cd0fbcf02bbdb52dd2e +K = 1573b36e7fe3c13efb6d5612a7991d0390666c79ef83dfaf +C = 6d371e0578add8933d60554b5e249101377aeebf64adc3c57b04c9db18c31c2b1d2f6d16f750f7e94138045964348449870015824b46af3d78b7c7f2c2423053faf590ab601c8f959ec3d7eb39d3abd6551a114233a06c801540fff18565fc36456b966355b43e703a6a1e9b2c1d183c06ad6e3720e335396e723bc2fbe0b7c87c605ee16a16faa596797869eb8ffa7a6208edc5c772cc397949383a4cb79e01e82a6ebae7703db35914c2166754179e98acd20ef2c0fc517d92258abcd1ef2a1ad9b41e960cfd662bde5496a9284f76d688167dbff36085c971592d13b7e0f9943c372acf2a47f99351a2dc8e5adc82a2c8c046977bd65cb2b3194ae2bab3ce5b80f945182a25f83a274156bd342104a7b87029df831056b8d1a398ebb82784aa4832b0f003f430a8677953b97b176fdf061cc198987267b0681e6ed12aa62dafeb370a9bebd16d8ceac2014983ee0da6ab66348bac01d2d0f6807f6a3e004200a6f3f821a3b7b6421dfd88e1007252539d7f818c378d75605b6518a1b10c3a9707b4fdb2294ae37c8cbfd861a84186e40cb82bd34a369b0e403a1e865f68a81e0a5682573f2cfe47e87a25978b205718dbcb21e94f6012d24543c8ce18ae80a7e164513a40a9811a8a7437e2fdc245e3d16e1d452bafb876e05b13c50d245d9c2413f48253e60f2cd4ff4e5adbc9254ce23b3c024e2a6f5d9db14cbda29f40cef89067cf5c00d8 +P = f0de7ac680ccbc6e82ed2788541d1a21500d03252a7f31b5d6763655c89ae7f45f80149a004889f0eb94323b26bea5c20a625550209b3c42157317b67461d236628e2b37b76f8a7dba659c9a14c6a76e226bee8d5a3369d1447762119a2df4301a316eca97d336bb7c7820786ff836dc8f241d751a7b6f9430ee31da5d5f92efb6305e1e0920113b508e3d98a38db24eb7da3797120232fe7e4e34297c9cd794830d6df1bb6a31a7928a81f516977da28381c77d41ae47df3e58c7feedbdd7c05880a1e6fe47e09e30febaf8cb067e927ec9e8b67991c400e4c5a7121a572b5c3ca90e33e0f122bd9dc449ef4ac4aee9892593d92751c9edd347c513f2744ab6a13f3d2d91b7c41297d7efdea60100a289787b3ca884fab1a3a58bfa5d77545baab6f35a4ee71e2cb9d47ab9b38fd584a46b91daefab55157fcb9f60112c0296e131e8949a7d28f496266945e20dd02ad18ee34e95216f88c9a1fa581b089a04b7794fc365e7c422d8cb3dfbdf295b939f26e70ee45b6cbb7d9bb31a30476a2c489443e871a1859a4334cd410ee53b6f0fefc86eb851f8dd4faaaed78f30e712ab73086b9bb0aea05b7a6d470b518642f9373f3bb4ac4122f5f46639b73dcd90166bc4f19a92dae00f34fa7ef4030a9dcb55b3e9799d04b5053d0af1a2041b8004df0f1c7e79595cc47f887a4d134ff4fb3b93fbab690933cf3df12dfcfa3e23 COUNT = 78 -K = 58d51a09dd61beb7268d9f340213af8d9f48e4b3d4a2de4a -C = be7206e829160245edfc219400e73785fd94ba656741ddd1dc8487ae5a7a95094d88a1f0a0652d291d283026a3024db93f44ecdadf9463172aabccd4f5e027bb75622caa8749736875cd8037cb8df091402453c22977db80a6cfe33be9f5b382c7f4d902219f1d2e639fe403c75be856 -FAIL +K = 8437d8fca0affba5cb633b0407d27cb099c76d01b13e3096 +C = 5fb118244dc68d4a998fc49d0012409f29d05d86cea2c918810205dd6e1507c55fbdc4059ca115c85d74f587600bbf1812117e36867a03f729be70f70624f0c5ceb57ac4c1cef5395632c3decde876e3831f8f733227f0b513bc98600d2cd782ab6d3a536f8f558303c52fe5da06f96038a1250b602b359a32524c62d8fdfac213a7b4f97b7fe89f34d531d67a34bfa6110dfeafa827b53fc3aa108b39083110259fb90c37d96e268776c19d79f31a63c1374647483ac307d030e060346b832e3959f2e88541d03f49684d3678955512a1b967c45e58515d9da50440e25cdf3eddb1d91434aed2d687726f41b9d5ce861c99d55327f52ecab138cec53706a791905b5739ebecaa444e8aa41620b43e03e631fbee5a7ab6a6d1dd51b840a8f65124c422efb0cbabac3f4e9b161743cf99e2e1c9398dd61d8e073ce7ee5e2c761538691a35d40592fe0eb7f506aa32bbe4c830ed5060c566bca218418313ae30717981537e5d172013044e4d95280318cd9dc3f08dec207f60234ecf08575820857ef748b24df066163b221f6a9f15eb1e45c44382a4225e312ceb2be3fae06ba52051696dfe79e57d06896c0e828e12b6df362df76c4afe93b5739dcf00e14711c7f82fb836f5ea24976561896b741a9c8952f67b6a6ebf3258a9db05e5e5d16e1e3608cabdb233564072efdad8e48da1183a54c50ea4e1a30917fb9cc86f5e34fea607f64939cca9 +P = eb54e8b7d8780bf6eab3d5af68acaeaab899071fef5b0598f3e8108216085edc9a1a49c88d1f0b4bea7f40900facd196cff14838cf668fa2a2cb81f0d13c6b886ad2da8d4520f1d49ebc85bdd9678afb75ac97661e60dfe0c384c827859aa16eec96059665c3eeed5644eb7a0af489803a721cbc0bcc19fb030a1c720d30b4f9fcb72c489f848f8bf699d7c7a8a11e0e37daf244a24e8c49c57b948c5eb659d1f1fde7e2399c6b1706294534a753be533e5bb79307f894304cfd31e710464e8c319ad56eccd6904f8a5c5ed0e15dfe1200ce8bcafe1ff40fed5ffadb2c65d88d237209b8c7d1e68df86c58a512b01671ec0bcc2cab3d2a3c0d18814a183c1e7db01b6d14651ccef1226f46d396e1b0556d4dcaff14beb1cfd2aa2bea17767d1d321adffb6f5ff6ecc1eb8461a6afd3913a958c47bf47a1a3ed437a279a3f491cc2bd3d827b6c7125fe3cbe7ae6e299e1683da0738b0151c3b8d97f1adb1df688c0efd77978d6fbd2849227c48001416aa9f0297e6808897b0d1d142409f36b63344426bcb0c5ad4933148ced1587dbfeee82c97d4ec9b2ed7ac9078ed8abb8ba251be5e42ad2446e341976f610927d4f1f154da10a4cc449c50115f14cf95539fa3212f43ace26bedb325af4f3b4b4161810018ed3ef39aa3c5101844f2e52c5e6392a821203477e909e39a14eb06cc3e9261cf4a98da2ef0fec37fb68193738 COUNT = 79 -K = 1b1b0a4522be2ab598b9cc319688fdec8ed3ec8bb604bd24 -C = 8dbf1d8e553ef01d1be5f1853fb25529e814abc27d2f8fc026b63311a105154f7d30de3a28e32712d7ef83280b735ad869ff083d51484b48420f4552c1292947ee7c26ff27c22ee7f1694c55ea0cf0bf2029b6e322e17f0b097ecdf283c0d020ad6c6869e67a961061ed2877950db3e1 -P = edea7017e4b04bc2ed6a44ef7089648c812bb597187bb124e2f577071ad4354564d8e0ae845cff79e1bcf96d121f199367a897e78ff5af8139580b4029543efe163a3aa5c795adc8f8a7d93e493af9a262ba28ceb3b17e400ee5fa0839b0634c764a2eb25a +K = 944fe8647b048509b519eb6015a220d7afa56ce769824916 +C = 857864a4c47796def1bb2e9313b0e662b8394bc98bf49b75ded5341aaf52a178d2bd0c7a0319bceaa219c9b5661faf4f8ee6cec6fde0607eac5bec6feaeb13805ef98114f7c62bf4f3b92de2cf493896e77cb579e2cc0cbff1ab77f5b6bd80024ea9fba23ef3d9317b918e0112b7e02e919c1b427b94007ca8185b1e90fa5ec484a3103ff2a0f0faf4b238fc4095af7c5c22d46c2694a5a7cbde55c3f47edc9ba90c434e6e59c6111c4e1b599618c90f0caa9cdbeb325d729ca8f570e25e6c88a486056fc23c41522eb56d6bac3a209e265f13403711df30c810dfcfe2eceee78e4bdef062be8c79d7b32cff1c5ac75f84c353bd40caebab3634445f601928a64b1fba7292be00d6775cf4f5252a250ff54faaa39c74c407011d3d157186d3bc04e3e52b9daa55d9f8e53f2c180b627c46146d4c578fcc24bed1375d137599c1ea51c7dcf344933a27c9b1b812efbd6190a3eb5cd7966b18d026cd562c0fb1a888f348c9851fb42cafa6e4b823cfb14550c95e968a6570f041ebf30d8db46ceccedc9c01b6341203b7b069d6f51c9fedccf3bae0f4d0bf25bde97ea9c809fd7ad9f7cd5bbf5458ff85e5baced075d06994e1dbc66aeb44bf9bb6efe77d30e5c84f0f419c5e0ccaa157112594116b4457f7e94e9f82774f680fe4ab8edfbe167960025e59994f4499170cd8cfc2c86279986e236191b05055a1d40f20b3b4539254a93c64c1f75e57 +P = d92a8421a5f441ecd2c67df1a40ab10e3be8fec339039e19146c62331b7917661fb8b7fbf6e465e5d92efbf3bc9d60789dccfe576b806203ee1dba51c6e727a750e4d800da6b5d6d7cac6afa16d464f11729a650d255e2c7b6bce446d5e4877b520bccd3ff31cf028b4cc631da81cc7263e48f292757b7aeade1f243324a53a25ba9e47b0fc7f313d782f2e0ce4827679044775b6f5386629ba4397edd09c4f33bd98e19c4f5f0d4b1de917b0f681b1777b6f197a5bbfe93aecbb9123624d67d9194f3cce49fb8bbad8459a0b1bc631136abe50717be709d945a7eb9ff5c39db04084648a657b876f1bb274fb7c76128a6548c1d08ae4254520d511c94f3a7d8e683799ece63907d369a646a65b5020afef332b923807ffad4f23540c3d93532e1984d476c5fe303932d1087e062fb8eb8b27a239bb2a114ad0661816bd5e30bf474c5c05efb42a1fe6e225fddc8e2c0caa945c28d3dcbbc1618302fe3ab104c4aed643a35cf10d8c9867ab27cc0e58c0aa3bc55af4c6f9980d188596af2f27d370b6b6880282cc27304a09201e913c1b6d3af812d4e57b9744f28fa88683afbb371602c0c4f82f94337d11fb320f3c1354511bdedcac13d89b8b643f19f108c46c982f626790cf7eebb678ce7edacbc85d566c4a35642746dd109e4c14509d78a8d8be775f1e62660145cb80157db14b61140bc6f48dfa359820bd84c4fa6b1 COUNT = 80 -K = 9f8a96b1507c1a30158ce8e2b661c76a7939b66812f58b32 -C = a749f211eae23cfbaee56627e7b2f99863cb9d5858e7a3b1d969f0bb743859aac0f54f493a1173775a7753f6f0f2f56dbfbc3d13d2a36805311b4325eb340bb1347878c99e5745fd6954cd53b56e08ce25e7c9bb8498ac74522e518f0ce41b3efb34cfe4a73c4134452a0b18fc9c002d -FAIL +K = 6da84cd4824b30203a0a72aac0a500a2dc4d0a55542f2dca +C = 215d5b6c3ba02a42eb1f5322ff12c41ed1c5d17ef90fe42d4077fa285bbb80994a422585ae1e6bf2941b66fe5cba728231ca88228c28fde8acd4a9367c26026d0b690cf45a1ef4afde3dcd3a3f478cdd27a91c5ecd4750828e6971b351385268bb28afd4e6577159fada97487e08f10e2161f536f30134ba440a07c2b3e92b03b20ca4fd44f8cf86ac2a20cfc817acf6916fd9cfce3645f13eb2b76d208fda46e94f67024ed212d564764367d9226e24f6a5c63875d8f65ede7ad7a966f29efeb37c245d1f7d0d1d174e68ac33d6133d2a47ee893703d88ba60ff7657018c5698f954c71a4eca2bc065fdca7c16a4d786b7294b289733553dd34b2b4619b6d85c3091d4124b0f05c69afb55bb61ab30ba22ec6689361f3a404e90f40e54eb9c31b6c88c2c68cff65346c2d6241c4a6f20417f1da345af4471458e19346e088bcffe82efdae3b15e0e971c779a66595504b2accc1c37916827f4d45be8bdbd788bd3848b99c697bbdef80eec87427b338ae2c5478fed65eb0645cd066a6f85b57ad4a316b7a6840fd4d438bd7c057e9b3dba04979cb86d6f9ab908db920a61916e423d6eaa6291f437c96023056971579dc157fd3f0b5e3f9a4c81882223a1b1850914edfc300b3ec4453d39e44618b40065dfdb0fe39b30a088bcb881881f5be1aa524ce23e7f842f639e5911ff45da0a3d5015e3ced21349723496bbb9bf19b0a29f7474f10227f +P = 64c6a5aa40d7f6ffa41b0b0c5c14fe3dcb0ea9895d8d651135c0e8a82d65c2ea6e7e11b21ae7e766735e6c0cd2ce1d003f47fe234dd48a9783350439f6c5621c8324327dbb643112e301b4a697d86b20875164cd8f9a6d501510062b3408a57c520a063712f9a2e09509b5d6963fbfc74697ba3adcb8c69fdfbcf673c97715f6dff5ff8bf77d4cf0fa23a7395f32de48881d87e9d3a4da2bbb9a611c20e668af1c9d6bb2ce9663f95dc7200229e6d6baa9d63add58be3056e11b5d9c41a5b360a2921b99a4a4e732531e28077d7b5115c450f9497e590831e3c203c91305dbc0e88970bae42c87ffc3bd20ad4b569a766a39f2e44c1caa31e4447fb6d5581c18301254f0b7ddd2b051f6642a6d7c8b779ba006878ebf9fc632a44ab4cbc94f0984db60a384c931c7b8db7b451396f18a17cc418240ecd533e3fbf04863f8687718960849a549579529631985a0dc01eea3385934f4e46c4e6a86511c784bc25e3a4f43787a92ddade871a30a58c997fb3e3bda4475a2fc240bcbf3441e0c52437549ea98222dbf428ddd1ea7b8e590cc68510c827f1bc0c5a0c579e9c778b5fd7b7367819e44520b2ad3ca31f0775a5ec53756e57ea747691d6c9e92aa26b9c818d6adfd42b5cb9d0715f949fbee1f047f21a13dc3d96ad36844a0e1ea457907b093081d7f89719193368e98212b3f59fe42f3e79a18e9d187f9143ba818d8e7 COUNT = 81 -K = d144e6f6e16577ee17a8ee6c425b87c5541507c5146776ee -C = d72eae7b0869be5938958b9d3b7bdb5f584c6733bf6daaaff21f0e5007ef6501eec11aca63f255f9d8265ed9dbb3d1b5e8384f49f83a89cbd4e6b311884771f7ca689570fab713a2dc5a1f24c85171c351f4b03dc60a929446108bc788f9ad79e4ecac38b604ef0aacef283344683872 -P = 7223b06364d0f107a55dc78adc42dd880beaa0288f398c1f275e2de1ee024c5344c46983a8f9c17370da18bdd4b71cd9822d7c5ea7ef23bdf2f24336fd17c29c88080510b04035d318df474fd6ef89cd28180b80502b5e46592d8e1dc9fddade90ce577090 +K = 8df54ced78e52553b2a71d999fea736f85926372b422378e +C = 23130006739c7efe2dce7c07f1d7c61a703b87b03791ed959bb3ea1388a1ea7f56dde99dea1201975d38e1d4e289cbbd74c4e4c38347ca932caa8e0298a4818ba4982ca2236fc95ca04478a1759f188240308a6e43e5bf36f401471af6ee0c8887d4bc6bb3b0efa433efe6d8ed78b628b77a3c9841f8faff6bb849cd62ea82e638c68eadc7c5573b8f7216067c714ec5ba9872857988a7aaf23fa072b4a81e457fec36ba0c3bc56826a5aabb68cdda2c865f7ba89c2da18c50d368d4d4e1b64ac080eaa9744788e6212a1aaba83cbd31c19b3ec7e735aea48f5f374637fb22fe9907b75c51dd767a445ecf8e56b8991a4b6537579241ad01abc82fc52a549252b8156a6ef5e16d0d22259acfc31c60900fbc29a6ef9fb7fed63ff7e2843672c72b59c94eca3059eb634344e0c8ef8760ad2d41d818b5f4e455c59a1cc4d1da5fca03dbff87328972a3a9be958050f50788db832d703194bed4ec38e08e13d7cc687e5ae6a8054ed8d8d3b2a82eb89a60f77c0b719ca0c10cc52d65657a92f68ec67620d5bb9fcf8a24557331390ba7dc5844ffe15e4e584256f7f28d14f0e40465f223e8c770d3879823ec19885aba24da1cb085892269789cc499e6dd05a87453ce2a7f5335e7bdcd98dbd0236229378361d09a14e2b58854d81952c0f34ae6025531f44df2bf6b669703c5884f7e7cc4d8e52736d9a170b6b51c3b18e5666ec241fe4352e6fd6f +P = c4e841ffbdcb39b21b9fb54c15571513c62b495a703125c454f7f16e2f27377367be92e20170c85e7c55743c417940f3c1265da3cf8084e45bd972d53e0e01bb124d6a75a725078ce5e12fa60136faf3cf9033ff409d761f7aded8be975fb8bb04343eb8c45eb14464519516448196f22e9ec3e618819fb0ec58904741f3fdddaf31e8829744663397bf7c2efcfb679c47c1714c3501acae7ae8836c8164c48a5fdf184778fcfb6ed2d2de905b971272ea8f013fb890297e86afa1f76e6e55c2e4db371ff9084fc71d9a2284b80f98e4ba03731201aedff06ffde81b978e4a508e9f1d97d2644ff583ccee3bc3678f0ecda6f46149fa9f96a843c9fe8932e27a86be475f1f224043983826dd1ccec3545ec225a4b1ff6c9d6299884dfc71071df4e08a3e5ee37667895f0c3458509f8caa4e615408397caa58e2ef3ed5efdd8f5c351f5a685a704d1170ec2fefbd1f1f2ae663ab69772c395319ab8c3295a94e5a31bb29f20dca637d4767bdb99df90b179df7e54ead7e856661983d06fafbfe1d7f86a82777eb3d1cb145e474e3997b7b29e3e4f6a7250591f7c4a0d66b5840a4c34367789f830b59604b3c5198f9e3c5385dd04a571af9a9c89116ce38bcf5ac522d1c27c0bc0dcd3ee753fa3ce763bbc7916dd6d1befeabf86595a541d17fd77d71a40ead96317e03fe0ac93ddfd0ccb9add22a20a9cc7c64734621221e7d COUNT = 82 -K = 4f751dd03b203d3ca33858239c96aa06aeab9d5180b5e94c -C = 7f1c1ee8fe137a88b018d98584058b940bd92599f35fc1832094ff59df4aa16faa4616aec780cb3b7989f222893434296e9592899a4a30ab91367e3eef014baa4e1dae7ff2efe0e0bbf12eff4bc6afea85c6ee5fd28b79200f9a46fb93fcb2e0c614e151879711ad9375268bc37b7142 -P = a22edac8fae475ad56ff6f646a7fc806c749fe79b52b6d5cd55aa0aafc9c16d27cbc6bc24a6034a7e6d1e326734b4990166790b9013f4c65e9f41a604c208137bc01b80e2aedbaa7d2be8b6c5223ce7d47b17a0392d84891ecf5b77856f0c98e042d54b2b3 +K = decbbc17c8e40415ed437daf3c8bad5946595d7a30fdf602 +C = 618b8a30a4683125af843fc5f2dc0dfdacd8733911b38cfa00492ca4f20d1a0b22f4f587bce2ded29e26c3a7b41298b10f8f63feecd4d29d935073a87b61f1e32c630d69dfa64b56bd8cfe1b26e8741f529b17b1234d7c1e1de778e30f58f4bc952c4c83b751d58bd6dc82dd10dc01a35c7ca90a239cb79505ce9b0f8cc2e07b62186021a7374c5f548047705bdb2737b18eabb88cb282d145421f13b3e49ac56576c836e971960531b65b4d4d776501e80b6687a700d0d6a7b272e5e0d2476ef72a3e454f08c7163ff1cd0cb0a04c35c0938783d135d6e734c802a66dbb53fef794ab48388fcca641552fcc338163a42f9e731bcc5be7aa8927e7ddb23f5dc7741dbf65ca0174b110b81cd07379903b5a9a34b8ba5774a0094a2b0847f9fd143ef1fe5eecd8029654131acb4f5537e72625facde1ffc7ad120071c5b40eb0f5333c16fbf1f8c8bb5c22c2100f9b5f28b0d9ecd4335417ffce58af1f5388f5f945bb251c4eedfb67e07e24fc5f56e1a8e0b4f2aaf5f10e10ec8c6340c22684e8ce96c2352e33e86920db8c06c068cb10975b5f09bf0bb66dcc5f8cb7724bbf036d1ff0be9ab2d5388a5e1da78305336cd4c137050b4553eaa562365c2ed791b2f245492fcfe43d76d3de4bdd2e92bdbb07c65cdd439b3d02aa1e4ee591504c0e6ae47d72f3e5e887ebdb1921f35e069397425b0e2ba5a0d2a95bea94f252b00a98490960b47e0d6f +FAIL COUNT = 83 -K = 62ba08f3685887f35410946d6c2af70885354c98eebb8798 -C = 1892f20521ddfc62fc42bcc99040035c2342361ee745bfc0da8fd7bec3ad9484a3b148009a4f90c5766e34821149ed42a2be2a475ea79cd8e713292ca0322e513c461b8cb399649cc1429f16220ae2b1fc97feecbce5b0270a8ed15e76a8158468034cb6d7209e89537c35170db5c406 -P = b9274eee0d6da797a148007652d2bac00d095c2ba4efa1cd3538b88305496b5f5fd0d3c42df1abe774dbf053f20f5dcad038d8cac72f9957dc6c1e7bfd9ae9d666f9c0cff0818703eb4aa94e1920e453aae8a08c9bdb0ac81f2558539f6cc3d08f4c6d7e03 +K = 2bbb52eaddec8391bbcd58826defe2cb36e76ba8a508b3f8 +C = ceaf426ba8546bec927d739f2d3756c7ed14c1d705cdd067c60fbed6d218691fea82e004cfcc85258facb6cadb949e99b53d9238716aa08a56aad4ed399703a8fdc4ac16a0e0e154451bd4d8bcf70c417283e4e146837b3bef9d9ae2bbfb82495f0028058de5b9c88f4e1f202797ccf4075bd438f912fd7e1a892501133b7c3424e55a71dad4967058ef0b957677ea06b5201ea42accf6de08aade7752beaaf58db1924f878aafbecde0f44cf69a17016eb270ec5d1bab5dfd93edbf7332f22038bc0347bf5a9295920a5cd0905706474ff283a510bb6dcc9ddd7158869addc92070ccac8593f3f5c57c45ae0862d050c6508f4ac2281729459bde8e59cd8942e50ee1d654c8c87500348ec1b7f01430724fdfbae2dc9b54c484293daecfa0ec54de7487f313c63efd0e5720bda687488504cd6f97a2346e6c3629d6c31797bdc55ad0305989449c69698a499610d315ebb9c380a04892a58b14cb6be9201fc0b195e41d04b73d259a254d688770901bad8c2978044b89b45f030fc0974285f245b4f7d75bd590ed4f4359b2bdaae12d07adc3194c01ebfcddb36918d663c87ddea6cafe6ea5b02f28effea4b458a22d2221b97f6ec416077fd12173c030dc9a1a7b5b6db7b8bca281a131a21493d855ed116256eea33b5f1a09080af45efb339a6450ccef986c1507df8a7d267ad8f018eeb4d93f3a3f86057aa016005f29b80a79bac93528c7b5 +P = 2ed47dabcc4ef5cc7bfee8cbeba7735d629ffaa3565c9d9d7a4e1e639f491bb56454a13ce13d2dc1df8d71bfc425476611d79ac09687c480d258d6baec948f85f5e52cc586baae8148c3d904ad61164ea9c9fbbbb36de14cafe2379725d195c54acaec5aa843de964ece359ca57b0698a3c651c66913730a1f4ab8f27a7f40613bf178fbad87b9fd6a3de9cf1bbc33ffb0b08f9ed6fc27347af5751c5cbcc0837a61308b5dce390faca51d5eff682d5400785adec00de233cb3648f327aeea5c01ae33776b186a5228ae130f3e8ca29f0fd7c7cc3d98ebb1752fb99cf900250b96753760bf30fb10f5dd42c22a16707d62ddd49dc9d37176886de8c2f436ed33ae004752c75b08d1c8c526facd3d9b5cea7e6c5b1e66d6a4aac2922b36deb34857e3f5ae55a3d3b08a8db537c7698471b8626ec68855ef0100caeff2bb7e02dbcc7e154d10f09acab3823eea33bda073b7999a2ce8ce2a22077a6d21cb803ff59ca53cdbab788c01c4c587f3785a97a0af7aa96754eeb462cd2e8053dec4f8ab06d0a3fddd9bd250cfef9169340f78bb297cadc2bc8f2516cb398fa36845e64804b18db5b5cef62723dc621bdab7460ac3d2f247b2b21233a383ddf76ee090de588dd3d04efa1ec0be75f479e153547957cd2f3529e192a66b48c18ee3caeab36ad5e616078fd3e3599f0458fac40ada57ccfe8e26303b2faa69adae209ff84d COUNT = 84 -K = bad7a42c06b4198787517e58e023595cf24eaafe4b3b7206 -C = c3164680004eac30688265528661e209f0f101db5576c4818360b4ae525629aee27e44e8998fdd165d8444d3c3dc172510e476ee7ca6cf04220fdaba89701d55806427c9108d21e6aa197120e4076bf799b2e913fffd4b35c664a5c6d102565ee88de71c986f19cca0546f101e033eb3 -P = dd17848f0654cfecdd71238814ac725ed3615412aebda8ae8224ff26a9d4ad7a240555e4d9819c77e6c7953c65db5b9a6bd38fd0ba08498f2bff9bdfa1aeb4cc8a48928102dfe833ee8bae18a714525dc5e75ac25f101455ce331d5b6c22d5f61e1201873d +K = 68895d0b32b48444d85b26cb6c37e92001d9a78948d6197b +C = f2298da80ee2fc7f43e83ad608dbe799ae85dcf2a8836c4c07e2fca3ca7c02bc18ad4be3ce850d209b6c3dfd61984a82f44e6c87ca0b1165c53b344bf100fe21bba89da21b05bd28a93b50d3b192000ea272b86dcdc4436d1a9a241791fd85f74560397682fea3a2865d8440bd0a08bc28848afa1bf641a5767d0534d77640897cbc913d4cd13005430f96eebf7acc2f37f2057864703374b3c9d466c7a6d02f1f66438198e7f655251cdc31648ff962f5ba32cf1a4df66e143bd41bbeed63c5189b04d46f3f4a87564fd14f56a12a5574bad1117ffb52973bf3af9a2162d7917c288a2202d64ad8edd785f259807e082c7d08cffbd4ad3baff17ac02920a62fe4d885569638b4c4aef45089f9ac8a78390b65e88c1d7be3333864f0e3fcef51f3b29a2d2713e0aa0f42ef0a5226b527873de0b210d7c084564377e81e9accd7389ff72ca164ccb053f709152e50b778fc325125b1401acdd12b78a00ebc96fe242ad9846f39bd801ae426719571febc1aaa9354690d9d40f4443f979915bce299d4d4410258e87fe108bf27a99ba6af68e46d94a5ed96581c322b72826a9f141dc695074af2583cb9be2651a048249c412afc72804cd642c7686e3f8bbdf08925151e1a0c7c035b0a551eabce30820b5b29058f92a45580a05834bff02dd49990c133ee3b532dee4edeb40da8e796d6b633e629bda6dbfa30e3500a1023e5b6b739bd28959d75a1 +P = 491f219ff92fa7609352c3db67a38899a67c1d1dd573ab92021c5b9a6957efb1fe3f0224df43050ce8bee2faf2bf3cf0aa2444743d7b6d9d70d0193e636b91a76604c3462d17eb14151b395709af69cf4af4d61c45d861f69c7b23c61432589973b8f97cff7a466b6b1f701581f4963aa459a9fa1a562b019fd2712d7effe34cc52920536077676b4c4455d24f3e44f5a5be129c3599b44eee7a6446e2309be9d6b88ff8b55300b1ca30d862bf833fc5c0722b61c6b3d8a07ac7eb5e7b2576710003fcc9c6e35092407b55198ceefc0c3280ad5cc902b4f1b1bf69b0c236ca22a4835db54aa70a4b1e7ed30c052f69542c946b82698656b2c71fc49105a1e8c65be8caecc04c99062ba7ceb188c0bead262af68dbf9d01f8beb7f1cb6b9f8085f06c7629e164f6144266249b3fa35df4710e2416e0b21d6a1fb3ae6fc8227ca6075a608dcea7125996adcea19a1bab3ad63aec04b9ee45acb10df1be0d1ca924d2e350976d1a64482ad135b7e9eeb0c3f4bbe4df0ac6456ba0214381c52d423e98b1990faad506e5b14f2ad354e2bdaa49b3bfbbd94f790087c2e486b25441eeea983e2e7998710bbf66788614146d0a61785957b2ea733092d6faa125af4c1167b38d666c4def327786551e8da34d438a0278dab8e188a9a204feed7b0c6cd6c09486f9cb6218fca017411546ac4d8e1602bcbf0b57eb9a3366f99956da394a COUNT = 85 -K = 2882e685177a272b9a1bfbab6e5be06d6fff8b2413ac84eb -C = 17bbe589b2be10b2f9c8114261fe560895bcc80b6fd97891a2cbb9f8a314469495b509f25bc39e6cf6acc7577f73e5c21d90b6dd5651c23adf9f0bc3f4f8f085013f79fb64b14f22aef9913dc0e23a36fa81411bb8c90b1e72e89286cc78b7b28a095e9fdc434c916f9aa2ee860f5b50 -FAIL +K = 47966cb0841568e49466b1130356638f7c8f5893eea9a871 +C = f480dc38e8325622051ab260c50f6db89c471c1b11bb1af74d8f7005720730d2281829856da5d587641baefd067ee4ff176b74a1e0bd9fb1327026330bcafcbbed22f18818d7150c4c697d9a743b4c1be58fb86a7342f3010ff16ac5f3b566af2d2963fb819b0a3f506dea9f38a004a442170cf8ef8bb4263a2a424ccadda38fd15f3bd9d42f9693b6205fe4852ace2e226664212e40a6945a00a92be3f365907705c2c7221a274a74386b93eebc12e99a947e8a0382ad6d4c7ee4a444174febf48242bd50ccbbfdf3c86aa7fd98cc0f767a72674a04af8e006a9d291e7fa2942324a6def17f5a386d2be6c241c75bc27932abeecbd9213cb388a5e0d77f29668aa30ef34edf722adf2b129fe6130c9086cfed4be34e12359c31ccda050d1328fecd33d3d683e4f542ce0318b5109a67791895d1db8ac63fcdaeeead2079a275ab1bcb5983600f07a3aafc9e6fcf63d91af1131cd6eb248a7d1fa01012fabaf6e2fd1985c303d37e02ef8189acfa190a2e0b5dab0812b6e2a2cf55b4d2784cd3706f06e48dd0574373ca3e8a346eed92a9abdf23e1f333d8de1dafb3c9031e03b2c63ba48cd173435fadcfc6d320687ae11a5e7a3480127c6e37dfc35ca6cec20b6acea6c60c1acc4c0ae7fd4431322286e32ab7096669e1a08bd1243b115324cfc2cb675ce4a8ae616b72d27257274fd678f0e8f26710f69ada4276054206201e562b30fd086fd8 +P = b3409722886a88229fdf2306a453bb701e0a3bb3a8760e9ff0142d168c408f7720809732e516c99f6552c3f70deba988bad3d10821d8411d893d3e3eaa1621bba0cd862e1f718766f657b0baf52e5c9555c0c626919289fa56c32cb9b9fa44ed9f796472b113fc38eaa3482eea3b2a6ff69069540a3de390af7fe6f61d76d9a9b3968b7512fb4333ff2d1d595210162dab758efdeb0b8363e5486ab97f1a0ef565addcd79b170ae1e633b42a763afedc93b75490d5bd13d7efc04a84d72818e66e85d118ba21322444768c7fff8ecfcd10fbb43c8585d9d1e948870ac254d34e2e565b3dbf056dde441e08f90a9f00496242618a3b8c2a4939bc52f4d323eb4c6d38f7a442e1807944b738b60100e796339beff8e96c160b8f96251f2a1dada6e12ee9313cdfe27dcd5d98e8ec2539a963391d32fe8c434ce3bc3f5d3acc06c5485e26d97cabe9ab64ad79cc9610a48575c40e5fb2d472664c76530662347761d0c0b78d84c8249f653545046a010529d40616ff3f4398989b868c316604b056e367258199b8668fb9dc4177609f81cd6a63d77afcb65851c7d624288c093f3b3dd38645ba6afbb39a1ed54a41cc3abe13b9a726f42c06f01ba97e367e0fdbb4f765a1c974a8f1e6b5a8438760bcc4da17e9e4890c9218fbc6939a39d86c9adf12efdc45392787ccae867a1906cc70597c1960da9e88beaa557b52fadb5e6222 COUNT = 86 -K = 863327920561692bd943d365f1f3f1e925cd198cea93296b -C = 866100b5b8d10e6de13ad2d769ca73d4d6c9a9ff200f1f7feef017ce4073024a136fbd2845608f9734e50519bf8ccb44abd6f83a25d255a45086e3275cd8b4a6402e5c6b469833d4a15ea8dd355fb12964547c1ef5df43e12e4c3f544473c283872cba19362818dc88cb0a2eee1ca724 -P = 8cb1a250062aeea06dd3f67e7e6506a30b16c69411acffd1eed5ef691f8e414ac79228b005d394e55c9f8fa8c3f229b3333a39e321a00524b4106a10c2e611d1a15cae71bb02bff1ab36dc9ab926c475eba319c931f973d94d847e2e64adb2afd38ff440bf +K = 1c3e6ee022f4498490b17d6672dde9c17c2b49ff36ee20f0 +C = aa9f84dcf4c3cfadacfd8a7f548bcfea6f082900768afcfad96294f08c8e40e37319f3c992b34875dc44235b56155eef47972eb195c1ef446ac40ec812f411b78ba9fa05ad657c3992ccb7aaab9a2ef6db552ea9913e90c96c9e2051831b4589760f7cba3c5deb2b516d204ea87cf0e73291ac89f0b4636e55e5bb073ebcef9d12a2aa3070fe64b6a0d3c9660649199bb0b2b116ee0882bf8b9a3ee6bae136e6a57533bb7f77e76cc10f03e495976e224d8f0aaf9825795faa71ab9a17851d15f0c77d4e4bdb8a362378474cf1de83c0ef8e3dd43edc71963ec28e17f2a884394b0c3f05f29678c722f477f0062583504d415a554edb2965b5bf03524f9f59f6ee793250df51d056545675c5b5d1e3ec623ef951690e3d4ed380c73ec426ac13529390583e4ee39a5f149cecc5a4d1507882c251f22bc66cf309dfac9b501c6653b938b6e38dc1c88976858bc091247a387a112dafa68843604f40fe2fd60b8f4399188c2c1065595fe1f8f0038c278ea2dabda066ffc53bd616cac7354731844e94e6689ae5367be388130c8b3cef45cbc88d66ca85b651de0158a2f22487ff62b8e5400b9d88cf3430f42ca824b82aa4e5279c867bac7340e6951942740bd2a147e9d55d6e9722094baf56c21b4e2233e2c6a3560f786e54d27a4bee67febd6385f34e49d5c02f6a886bbbbc308aef2919c549ed0c25d9d076b048784afa0a9537436f3a06eb6f +FAIL COUNT = 87 -K = 0e18850288a835fb70c996f6b513c73e411a95f1a17a330d -C = 6bf9be709bcc31edc5155276f64546c82eae073f5bd0821b4647cb54e9044df55282189efb7fb5689cfcb0bb93bf271c72fc4bc1f851ff303960bb43182e9d9abc5be405836fbfcb14565b81c042eee27afcaa861c8ba8ca947e5e82809f41e3bfbe207b322b297a16d62cf5691947da -P = 09da0f90e522bbb4fd5c78abbcf5ec8ef8271e59926d7d067edd1e455a1b4f3ce17befdfd2956b120fb1502dfa71fe36b419e94635c85a3c92bd16635f46c00a58655c86ea888b81d3c9cfdf4ff2c42dc049c43b858b15aca767dbec0bfd997f4f2baa450f +K = 945db70269986c3976c2caea937659e4f3d4f55da46d05cc +C = 51be24d248815d45af3d68765f4a9c33c46953dcb054ddf333f72dbbfb7e02f8b736f919dd8d245391c38a20d4964c08d72ea8ec5a37976ce4c50b2ca5ee3ed7e53e078db2675bba63334f465a9b0c79c26f508be1fc29dcac29be5b53a8644646c0cc9b5b3f4bf4f2df4dbce79a6a33e1c416630fa5bc62b5c55810684a289732a8c622e0c161c3a03f8f6b69aa3322bf487dd20187509f3a6359d292fa91a84c7036ba9e32bbdc65457790a287ba374f0f5f1f8400767095bec963ee9f2c781a675d67f5798f0849d9ab196a8994e515ea0a9298b749301b64d40be74f691ddd09a8ca85648e95f2d92c72ebe75d69aeba91056aa45e736467f4d78c6af12f10c51148cf35e6447fce4d5d43b8a32fba7717497dacb06a56bb9e2a5df5b7e0a648204ebbe9316a76543783232abc94de34cea100acb96751dbfa55d0417cfc01a163408f356196a815357bd25a3325e0ece58c65e8cef28f3a0c1376f4b8620c795b4373a010299a44d82259dad0e53d0a505668cb66afa545ab9c3f6b93cd0eb91c40f845997f470dbb7ff921457a8e4502eb0fb3386b26a0b4eb8e738eee7a833337ab48b329ea0c0c5db9b98605c5ee7f016778db3a3476fa4d7694ccb920eac4d37e53761a0581830a3208566663934c309e4e5f45c3a7d8b7f868e75afe7380c6e6a058d69d398e04daa8d8c79484375227a5c814812932ed3051f145151437313f2b5f06 +P = 01c8b9e15326d7e431813c6df429ef51a03999d4a7bc7052a7206dc0980c2e0d7367e079f80547d5d6b4f0f9904e2149e537df7be70035be6b939f64ca065c7ef4750585e4010bdb17b108366375ff722f58b657e33c555a5492e7a26e29ceaa1664d6dcd7084e967b6f9539b4bc480e1abbeacdb655a5e03b7109c6db13134481f062d16adb5b9a24d05e0cafa5344dd8c7178cd412664a73b1f7f7aa688c884179f50da2a3a564777a826538199c64bcc8b4a3344fd85df5b12c2c55ad2dc68394478567b6f5dc44eefb6aa4f551e1ad5f47a2dafae513c57c01d96e7b0083c206f27825b536a45daaa95106680bedd1f95bede4bb070d21f00550333b47a52ef1fa8b4a242bf8535b3e3742f6817c899934c0a32b0cb047fa103093603fbfd95a80cc69abb9af4737342bb14247628f0d191cd8e9354502861b24e009d581ea98f67168185519112423fde9dbee4d6194214d1cdb2ebe10e912a1e48282784e45ab77567790cec1a8f4e1e34d0f648284e40b372007898bb7327cd4ad6aed8dc3366d308d6f574e2b02ba0885473021f18e87bcfcbb30c3e28a7ff39462ecdd9916ed0547a57bb84ebe4ad47dd19a2e6179c76fc9c00cf129c2d0e1fd18fb6c4b571347d8255dbc743832f731e7a2544c6f745525f99a09d5710460c1b3426028723ab25833b8ca3b2d2671cf3d124732cb724064dcac35afe2791d7abbfa COUNT = 88 -K = 377303edc6fc78542435cd174ce06454bd421222820fa752 -C = 9a9a774322623e0b75e028138a4026116d20f588b2fd08ee944199d9be2731b02048cf2c1059d4a00a260555df57a8c1f9a75272938f8130b655bcc781583b4ac08b29787655f16631aaaee1a9c8cb7682aed47a3162a1d1e3f4a81e2558d42bddb5dcfc86a432893984028ded6b52c0 -P = 152f1abf6d32e6e05157f13cbc1a48c2854fd957295fd8f53461e128b69797d4c7944740303ed87bc9692de9e1bba8f69d5c7becc7a4445c2a9926fb49ea004d4ade9408fbec7f3cd91351d2707bd4f2042cca387680304fdeb4ec5b67f63c99a460d2e47a +K = 7cf313a2af2033ad7908f7756f4a0df55a4d92afb6418530 +C = d1a56e521046c5e750195ed7a1ff5c4292acfb7dc3709f14d3fe066dfc4231c0ff79f76ab1fe425acc0fa87af2ecef9255fe76d476612044aa58b099fca13462cc0da8c5f730840cfdf9fa6b5079e86f906bee7573387e37274254372e4a8b597ed6ab97a22ed219d9f9776463b9b5784d4e7c6c81e15381b290a8f0a22da979486576c21d721dc02ef7a5a56332d933ee9a9160f348a642596c6e80e3ac9c3cbd18093a4e64bb705087f459736a14f02e387d32ec797ff56f163b23cc4539e1537d991a512c804484a9ac23d37e53de18717638595d0d02490ddbe7eab29a9cf9cb3e065ee8766a9d3f9d75ddf9f6095d207098dae8e8d902c8150031c32b1ef7d589765e4c43ac59914d92fc97b8192475e77ce0bb8ce8b2adf5f599244de7e09eee256d9a9fea33d2d9c0b831130c4d50e97c9934a862bc12510ae3af1f6ce50cdf86d173e3d89c43dce419de12078e7c0addbe26cdec4103856636ab3f7cfa94e0f1e441225a00df854be10412b3189549eb365e564d6aad228219bcde477aeb0e304f786e1899059dc6d31f21c387b97da21fbdc2b3769788ad28de678446d558d1749754579673f833e08a696be411795d309b98631c87437c5c5bd9427f8c01f999387bbe70f70ab7f28e7530ff0263b74aeb97a9513355892b0cefc32cd6c41f45d5133e8a02649ec176049ee45248515282d8d55a99043bcd9cab3aa095c2b533717aeb +P = 1925b936184cceb6c4eb9e414a7102b4161017bc4057d3851bb59bca4412fa1f1b6e1437c100d3ce549727bdad2d08964752cc2e0a174296423f1fd24e8659f6af63732641a2edd06c7b795e116e4253bc41a6e03d6f7e1e5fc6b43e8af725e14aed24404acd60c33c0c03de84e9c2ccc290b735871cc7323692e304cd1b8cc114f3b189ddca3c528035254df8e59ed389c61660c48a174ae57a0d43115f82831a87c00c1b240968fcb6c4f400ddb917768c77a5e6c0e326165a4dcbeabd6afe7b09eb93b5f871a168b52a02820274a127b6c02bcf7ff87ac45129d67ccd2af154847e31d66e12a5b014295e6ca00bdc97502046bff4f101edc1017d9fee2399ae9d9006246e7a86d2232f39f5ddb708e2356fb60967232ab47e8d5e09969f7886ad8e65465be90248aecf67d64503d25eb43dec740e5efcd73bee424ed27cd8b51c9db6b66bc86763d98cfc705bce8c7d6b265883dbb01f4f2d269819b8401af73c862fb51fe6de342921c5f2e7f6776b174a09a253d006e2fc95677760911f058df83d41529481592795a093673fc052368eec6e5dc46910f392329c6852d84fcc061ac9c1ff3568d855440c98aea56c0607da5cf1ad7d3ce65e3cf01516823562525223a590feeb059ec6dd9c3443316374b32f66264416d96c89fe2547be90b1c775598b5f1495e44d92aab5c563255b9eca65bd0b1951a56ed96df7d008 COUNT = 89 -K = 72ff1307cbb457781ead60f3b7e7d09301cd8a2d197e18c7 -C = 32d1d23e138ffee4511cddec8909b0861a244127982f5cbbe07e4d4541c1a9ab279341d45d4f62693e715e86c41098b0edf87f44bd7a513862ceafc514aa24ec004a0af89b8522db2bd11f329f52d315b2acb765d2e311e69bd4223d52bb040b959b26a4623ca96bcf419bf385c8e93a -P = 80afb9c2bbd2883b0760bb2fc5179a0ca4128cd2936458a14bd1cf4b49733bc19470cd4d0463c5a4821e71ee1368c45c01133dd2a1ba5d435496f086167c6ef32e1c29d1b0e92093bd0f4e19be1b9fd5586a675eb440c5a2d86634d838cd78c3a2de207df7 +K = 1b328e7cc9aee3ab5123f90ee35700be23d93ee47cf486cb +C = c31d4f4971a8638dd28c418cabb226d4b90692ada1210ee01b8660ff827931d58d32eb67d68a5f92e16e0c83e7c09d49ef4a24be93ba6e986049c413e081476c192cc4e6ae71cf06457f1832d5a7c1916c088c9677d510962639eed3e6068670d688d88fef6df4161777b7da1e00b31ad11a373fc2afacc06ed522d48fd5ab44d8c43984eac620eb37c3e80bdf617112a767b1fdce6467e1bce2f576ed5af95c97f5d916ba4b1cacba9cf3cb0af6320499ef0c54ac81e722d2b0e938aa5270868fe374722be00c4c537fd1034cf00d2555bd31b72c4a94a3518b0f58cfd275b7aa02d2503edf1b083e814ef9979b73ede109709f2da5602766315be83e4a252eab950a343fd28d0663e024e3c973e0c3d0c72b957a6e191cf88e1f5b5df8f7985ad0bb59014400405176c8a21acfe3b17177bdc11cf1700e963a6585efc7d854214f3f50cc178d0bdb75a0530f0ec857d3c1841b34f258323339d306bce7529d08938c9c7bec3db38e55e37670cc1a00b29228361a8f2778be9f625603e0e0616cb6db4137e7dd0e7b6f76978ad4b62a0f29b09eb274b991b1ebfe900112302e66d5c8f0824aef6e7b0f6fdd397cef6c17b040c23c71c55949e0b187ae227535062e7a4718807195659f7464333872b14a7a6b8dced4bb81d182e990162ad50dd3b8b5e987f94c2befcd9880ae1e67fa25d4011a7f4ae451f79f41f2b641d657c9dbb0dfee533617 +P = 6560d30ef290e393b50467cdefcbef1b869c3c89231c76fd462c8cb2b92ca562c8d90ebc9aacfcc3329f12b28c6b38ed31a43ba60341a6f88b0980a25e0c624046260e2c5cb5cc92d1011f1ebedcdda38b0b80045c4db2728a2ac3a8e13317769ab6b723f67c8a08ac0dae7c64d690679da058215dc594ba35e1274c67e1e0d0109f66810429afd18ec21cb17c9e0c17bb7f0b268bc820ccbfdc241a0756b01dede3b321011642528d247a03a35d84bc4404747a7be427dc6d56e1216d03353b45474543f86c50c727869be8e36602cbe2f0ff4752d76c9cc1f428d792694163d0e00eaf74d882223cfbfd950bf52fd945bd2719cbaa7f222217d58e5607a626fcb5ae1fd9fdfb40d94b1ed33f7f74ecea91d51816a72483619f9084bc008f887a9b2f7f30290946ffbde8db16c0277db08f0db602d3e2fe5c5351695194551fd9b4cbb6d7a73a67e4ccfa96cfdeb6e12a29b032f16cdcfcf9ff54fb1429cb946ec7b69f2c487c9a85767ee599b001017bd0e88d1f4b138c11aa81b55601bfe2803ac175bf923818784af1f7651584a701a9fa82de3ea4f3d1baa3f729a12aff708a3a2b5bfa599d5abc84a7c1c1579a6df8c2939afd4f455f4e23e492a443511365e5bf515231fb68f510b809c4d5c011ba26cc74e7a486f548f9217d955d1cfd6cbfd42e004cc88c04cbb869a4401df194897c2bf8a462a2d81e7eddba2bca COUNT = 90 -K = 060115b6abbc6d5d04cab13cbbb4db285a3393c280660e20 -C = 758cbfd0b2717df6ca20743c798f9fc02411c1c95c69f0d3130f9ae392b6be2b4f2014c081ab02ee7f2a3c4ecc15bf64cb73b21f57a23c64df0414dd3c787485a9aa41f99ce0e79d5aded469150b67eecca09fba25be1ce57e0fb490c1819580993406c5dacfe5285a230016896ba083 -P = 6e01f08d439b9401477f96bc59584cebd88faa2982f7a30ff06c155c24edf4867f9ef39ca86fbd70ca8148eac71c3734ca29a1696866546388107aba732630acd1ab1bae2498899c2731908861e72ff92cb0afcb8c5a7f6d8ffc6ad8659d345910968f3a12 +K = a40002767637b1e90ec5ce2276842495a293f06619adfdb7 +C = 4b15ba4952abc2cb7de253eba402a0671ae11ba936f97f49a2f87b2e4b60a33cedf78831bcc84b2b0e48b987ff94e35a40f003ffff2b1ab0327b63341e6832f170acef376b5a67607660719cf8e5c6daa0c1b098e0d34a8b2a7129d0f2b0d4e3eda2051ffa7b05ed9e6b84d3a420410fdb18ef71a0c8bab8681c71f73c574cf14218b36f8ce8f421f51110cd6cbddabc8a0e56172dd6cf1e028edbda6a9daacd21afe39aec47a026dac3bbaaca76a451b64ca2af5ae3c87c50e987e66e9f86c92f1239491628810b3b8d5c78caa253daa2987b6cea8894103404d3f257332ee72c185c4ba9ee3334f0c17589c313f417f4e24388e83ee86499af65fd668722a4edcac1c7d6738959600ca9b88f92c64b4c545bb6a4334d871137ff03059cacfb6c59fa4af3f58b67fe3011a57839219f0802988d98bf98c709ee05fa2ce5258de03203ba81eb2c52e3608d4aad3b955f9c8f3b5749d442eaed233f0289eb91ccd7cebf7a2433481630fc5cb64d9a2be99583ba9b279d85642611dc3a2e7487feb71dc8d1c17a3cbdd58535a2546296c8dca7473eba888d1516ec179ae28b90da0b07b17a094510bd60589df2b9c52db50cf0df72143c05647ccf326203050f423ea2ac05c253605157afc2361ceeb2bbbc345bcc3aebd5a03b47bf791fbae9d286c8392813eb491b9a87b6ae3842820ed8592e5f9a9455cacbe27b4680f5722b387d579fab7abc3b +FAIL COUNT = 91 -K = e9f4001722f0828a097c1f6db0e87f300c01236c6e2e4d78 -C = 7752ed947087c0646b39cf564930b09bbf31809f8ecde9255c6f640d98f0113a355e481d2db5beafbc8af338ecc95ef9d723da2ddf960cf3256f8100f2dff5ed16e3db934853331c460a8da8acc7142ce8fc1ebec531512311c3038d0f4fcceab9f7be45aeaef5b399ae97662543af1a -P = 789bab1f3b50e0306856629742dec288b4ea19bc5c90749cef19887fbeaa1e95c32b3bc8549acdac704f7e4a40a170d98dc0e9e77108f6f4346a45f0a489ae7c255866a4c3bd5783ed6e989cb67d09c6e7c415412919e789a7a1d6898d00146f93daaa226e +K = eaf16e620b5153247b09d3315d74783961d08bc25f27c6a7 +C = 5fbd43281becb81356ee38890c7505377e44aac4a7b628bce7092332071ad874b85aeccb2725f08f3bcb2ecaeb11aaf17015e31c408337a6a1bea703e6c66ec406e98c43801f8695d74709875e4aa7b00fc36c7f30f122101feb40d449dd1303ed56cf1f8c8ec31b8048896f9c89132d50c5f7372cdd4fb838e825dc8ba69001815252d7efcc9542513e936e7e7051ce325608a540cc2eadab114e52ea3d0d917247f0301bfeefaa8135ac452f61e2b2a254af03c9682baeda77befb3e33eed40911611ee8b02e59976e523a641d439aac7a33bc2fde6008c776c000ab055fc05ca78c5a0d998000d32c219667e2e618052379324e434bea27e91b7903e3d554d990fa9c2304278eb03ffc83d210ccc2269294eab0e21388db0df88c2f82537a7bda870cf2e3b3bd44d2491e60cb00e171cca7c97ebb0685b65cd9aabba7baf0f1a0ba7625226d0a3f217c06f3dcaf0e0155d64a08abca1e59243914a2a69e679575ce57fffcd76c31f8e0ce9b246f1769fd97fba6950f623e07ec345d36ac54b7159f4bf7a19951cd879f23eef7ac694c161c7bfdbd797ddde433ac6999f45b783c24e5cf6e77db1504b843f689b8b8752f0fc5d7975f037ef63cb305e77589a891a1f6d938e2aa78a24a65045ba07e0e6baf4d0f97e937c07b0d229abb5e373b433881c3c23fe5a5629bf595a1d9d646accff24af424b20694e2e424821820a0af8acfd8a6c7b8 +P = 6ed1ae6d2b77bfb70a71f01d4af09f518317c048806cc996b963d0ade6f29f8ef7d42ce2206db1817297b1918c4d16efb2b0dfd534fb816cf760f3436c22f864555f45bdb2cff5a64dd3283e7f82b9712fb7ff9264dbb6c537f3b80f91c00915efaafa0f8dc1c9637e16277d8dd1a93af9318326fe8e7ecbde7c0c80c15d6273573f7e85ffa598d46adf004ab5e2e110d208a994b93daa92e55b918bda60d41ccca1b2afe2df0e7e9cde7f29bf5c205b5283079732e46648288cad695d7ac5f9bf2cdc6368b492410bf472f467b7d292110131ef4baf0b6e547bae795bafe1da05b6a3a1421d2b856f9fa038ded864fb416b5dbea894af4c415ce0aeb27b17b003cf758cebb5cef5c36ed3f29bb3b1b949bbc24095f07da937909bdb93473a8b4a2487702a34b911c857385c7877f28f4745820adb83e7014123247ae545f10ce150478ae728f30513d614fac6ad4b8d9b02a91887fd187cfd64b6c2ed6d807976af6de19d7b5d7f735f4fb77d1cf58975828db514dddf925e392be7ac1ff79f6c601a18362a9575e43a7648f11ebfb18b9338daacad880685d0e5e61b38ca36d26f417f5558c0936579fb1da222b0d7bda8fb7313751ea829b866677ba7de4a42c0f212b7b6754614c920a5c0a2387fea99cac835aeabb525b733a77ee1f14b8c4eb8a96309bcc96ed90fabf45f1a87e1dbbd2815e4c690e042c815bc1122f7 COUNT = 92 -K = 9628d014cede8cb0a030a70c8cd77e1c0dabb5ce4476301e -C = afffa3e60eaa7050497b032f0319075eafc4a872772c9869cade95dcf3f24db9a8e49a418f5738ddf77a6ac4ca9863fceb3d9496bb6c159fe5c6da4f688f1169d30a1edbe8aece79bd25aecd1c6f26c85dd75efd24d70b62d3c2a73eb90f3d4dd31e4d07a9d58760c258d767adee3c9b -P = 3d74443ddc14ebc30a249262faf97ed3d6d6d315874f041826bdb2293e9da7755ec3acaf7f57ee067253068bc950373298ad1883224d392064af8994a99f55cb391eff1a26d7e8ba18fe7cc451ffac6d38e70176da0bf62702e07b9a58435416810253a00b +K = 53ed62afca9e8355de9113195832b3c45ad8583245b9b7af +C = 992a5cc6194f532cfe50b96af704d9b58e2e15c627cf4fb3980da7577bf1805396e94e09a85eb7e2dfc0f0f433d492bc551a9b6c731d3ba5059aa70fded9bf96c7ad3836136856c16a60b1a8f8b6afcf139e46a97574039d02cd13f5b6cef127f55d2fc235e266b0f7823f4dccf1346c1ae94641e6d033de7084b992c0e150c27e23c3f46890988970300962ac17482dced841b8ae686df168c3e6664a43c65de8d3fa92fa5b3f4df1de59c153761bb94ff4519cff9878803ddcd022b943fde7be01eba5489ac818f7a5c0bc4e2d237a33a9118cd6a51624c9d22edf5d895a3324cdd35b61f150bf6ab5393e5e03107f2bb197125230194585f68db884e667f6c778471da56e4a210f0326d82ea75323166d313b17d7983a06145d287dbfe3141df0f679cff5feb211b608e286c8345b82e0fc695da5513727ea0e2ad25450407ca2ecc7e7a58120722e5167b9e0913f3ad6b8e094762d7d1b4a08841e2218c4597affde5c9ef9d56bd5b1193508af2f1ef882a736df1a3fdda5c226bc51dc792e6cbab7a4f859372bd790cad91d9f127f2ee484e73abbb7cd95c2a7af00ec1b2ce9541baee9c2a4103d074e85746be939df65b61f6c5f16dcd4564b1aa8beb4f9c95725f08eab1a645d915787b4b9522d5890926a54d06925228667d7da95d96f1116e71b84081120d7a796ffdb7ff5b299dfb7d22fd5e389622cfd6a0905d8a2398b729c3be7af +P = b0584f4230da497c7f760bf360869a1a4113d80fb5dbd76c2636163c8bd7fce01043fae6da449bcc3fe3f4b3f1aadb19237c4d648ee00ea02fd3bf8efce77475927c9d07cf6ac17680511847cd3218662e09e76102c43f5a9f4e6164f4f82f567818813e539d6e36924a8b6da3f1351faadf11d42821f5a66226fe0577501c37ec185a380db3629e55b69610b5de8ab6efb865ab77e60d628db19a8d222f33bbeb7df78874aaabce40244936cf5d3dab8c6baf1d4bac42c02ba3a00befa3136ede7a8b8f3878c9b689ec715846b11b177dd9948e82c1c5412b42318560eed394ec4b9f7946690ce17a5e1c2bfc64bad8c9b0893c59a37f12fa6d3abc7ad1e4c86ee93702f6d170e942eb4d272d5e09f3b23aca417c471e540082fd4cb8815a068fe024f0f40b5b1581eb2adb0d5f02f081d26fec40e45fc8c1ed97346945fb1c9a547b64e90d1966ea73df14972a44fedaa2eb89ed80a3b221aa65465b6db523f0fd1e8a17381ae5cc4a7575bc0eecbf2a91a4ff10c00cdd63deb4cc2c13fac1ad255c0ecc81bbd7b2262a968c8926b9941ab5e9e424c1e376bfea63af7f77147a7e3a925fceaf9dba59cdf3fc6194c2b9f27c57bc892ec8c3a8bb863396af8617132b5802364dd42fbff436d6b758b3ff154c99766b2479ebe1a45fb60fefb14d252b730005f52e8db8e5dfc427a436f4725dd8e78ef3a52ab8b6d64e63b3e0 COUNT = 93 -K = 7887492fb4efc3fde950974411f97a6d31a2ca85fce4552e -C = 9a41cb1cf73a4b704d7cc855f0115fb202103bc0964bd4687d291dd4dacc0b4fd6f1d5543680e8c68cf7d0410a043cee8e5c82b2cec3c878ad626dd7b5723d74f1e3aea6615c69890770306ebe6c24a35032fa3faf1a47ddd804ae364d788ccc1c84b99fd692895e3465016918d29bf8 -FAIL +K = ba6cb6ca40f3db2c3dcca22d4de8a930eadb598320a43608 +C = 58537f8c01ac56d6be2498f8012e3c3700f969fc782f690570720de41feca6d6b9f642b1ca80b0ed7ae14b9d39dd57694c083ec53f873eb65b41d5b3634f5c0c17e07d038006254a09882e449b9ecd76c1af11b460d2b95a304683622f76ee73115a03485aaa73d6512123f6f634ceb18e9a08838dcdd0b3ac2892924f7554253818a0f85db4c3521702aba852680e095a4736da1cb99205c736ec42e30004f0c0f377da8f1591a5f9eb9b68316f3c27be0ce9620f1c7e675d737b2593096bbb24e2ae4bef42f57c453764b97bfe4709ca00ffd31e53cfc7c7cd56ca5bc4fc816cbc9cee69a3dd7e6d43cf007d4536d8a73e57a309b311f914c2637d2720638ef7daf9c5c5d0383c59db47644bc0eb3d31afb33c197790ac1d5b7e594561522836b14d5081f15650ed98125c7ee2333298793484ef4e598ab552307526833e6e277319c82d34d0e32cdda2ded57b35ca5753ed207f2a2cce6a95327f908d3d9f01939125ed916a8c2b9547626cbc03754b540ddc645c939e8cf6591c8d5772dea37b5dea51c9ab70e47d8961a9c4adff247885a0dc90e080397caca70b89a3a7f182441f1496e49e38f5ef65802bd34e73cf8ade51addccfddc1d37547149bc1ab38e2d36c58d1b97c5baf7b7c245370767f6170bfc8e9227c671e64a98b13dcfe16d9e3d81f41bbc26f1e24c79ea56bb30fa2c5070c2f613060c47c59ae4eeb5e59d82afc61cf9f +P = 33cb4b1f56335e169de42259d24dfb1e13b8e42bd563637878c8e23ca4d8ca540ed4a86577ae47aad23b3040b71b2a09dd98cd6ca02da95865ce61a582c349f0d03c025409c9f7297ffb7ea67e45a7a23b11b5ef44519b72a1369e16e647d8c433ad1f1c7a5ee2ec863c04799fc816887666448c5b154794bd7186b990903260155a113d8b1cdebee718d50a014843dab565ff8851519991930c3fe2c01d1cde159ab35713110bcebf34adf00f1ca6d4f323cb76a4ba43d812fb977c7ff4c8f24bacf9f45b3ef870c13e59f1b46b64d3a8911c04fa1ec27a543a97f4e8a90aaaf7e028aa29476570496dc0cdf9aa4e13538068ee98dc92fa253b8d0ebbb1a228308144da05e1b00375b6ba615e2614e2936c30995fed9a26f0cb58d474b20cb690223cb902d427d0524563ff1e6f90e3d18835b99561b421f2c40beecc21452de421d9522f414c767edcbd587de784791381da443b1369db4f37f9fa5b97d50952aa5efa116663ba83a341f0b2c78487723f93112e923fb4ac3e882bb1dbb55c8fcf55f4fef3349acb70e9330ddb5e3667273ad54a256b018cc827d5aa8f812f0897cfc3f09c77ce9fd69a42e610957a66306fc38b44f475c24d1120e21374593c74431e90a131f66bf428a0ebf40980e661e01f65bfee4170625d53f3fa020408944695efdc606f48e877eba837efd6e9ac6e390df946711e5a2f52cec945ba COUNT = 94 -K = 71c59023a1e6f9040fd03c444c109c153f06ff32bfe84c31 -C = c3692b2d5ab57bee1238264d76b2253cdd4670df151e58bd88b09c3f4d37765558ff7a67b2afa8e5194f01feafaeb097354dfc3372f5ba09104190bc516a272869891f093edf656ff8ff0f5f411939350dfb90b0b94eb3451924ece6935492c65bcf9a5d617bd8d4e4681b1e872c34c3 -P = 34fede11b3d3cd23a7ec114d7f65a2bf66d17236dad335f6265679b5bbdc435e0c27ff71b1aa67ccb8bcc48b0f2219347ca500445521d94d128c80a8fa0fbf10d1f909b3ff823a696e9feddee7d4d97254d2428b50daab01b93cfff0a66b2919b62cf1e1c6 +K = b0f9fe26ce8251700bbd2a0ae764434a125055c013ca5026 +C = b4e271ba9b704b902cb25f23ed71d4ce4eee1723800d5c7a16a76c6c6054b36c4d41d25bc6d33cf075e5424aae06bdb51ac6319b35e7e67f9a002f2447f6e13431ad98f09a091b14f954b2aa45c5c0e581caf572225eefbcd3bd277e9355e82742a61c4f0a81c3a431fd27e3b5548057384b6830a10a77586146227a89b1d5d12d32fed3a253d5f78c8a41686c681ed00b25dfc4bcae713a443de29300204a6f198d8f638badfd35f02ffa19b8926e831b84cbe30b35a0808304488c4692939d1baa56dd11f197aaa3bdee3bf380a4cb6be8f8c636355adaa6563164b0261f7bbbb9e1ea715a3731ab43da7526927ab07dfa9c42a471875d31179df6c4f5f2e64a74c8c57baf0b172d96b2d855bdb285cfd06dd9c3b3c8fb74d00ed1890d3a02bddd5fe6e2237a79eb88cf4eaac0ca1c218420e51c050acabe2cb2f2cfe1bb86993956b730a7624dfb52b34221a409f3e74f8d8f6c02d1d4a660432a231d6f99e3bd5d293d4bdfdbc2f2cb00643c4e0ad292fc2c862a81f7894c885e3263cd65321d14709e6c9a1f720cbdcd2935ed5970ca241b4c0d6997bbe2ecf402ceda2d7bb17babd0aace639496a0b44fa4080120dee5924e972bef799dde6671dd20dc052ea67b77252a20a37bd667812cea4d6170634eadd3657d9948c81d30ae073a63518d009e87423ef1f3524cc50e6aaa3910569f4402f3580884482c3224ab64ee35a317f6ff707c +P = e2a43cfd478c49660c69ad53244d247d8f43b362a81af1e8088dc24eb1e370c5879ce42a1ccdf9a3c0357af230cb79684ee01bdaca9dc772b455ded77c31aa8c7e749afd367bcc62318985c614d7f8d519b02f9fcc442a47783679703317b2bd4ef93f95746aa677284ff1458c18738b19285439ee1b6b3f7d92df5e826ac5a6943369f7dea613a8220165486380c7857ca5a31e96969569cc9f155015e1e56f067e3e93865adb727effc6dcdb7034fe2125543a6c810b3f734c9b85a630b581a0487291afd5562ff64236c072fcf44590596c0bca02a4873df81fbb1896e4814f7ed8ead17102dbe87d08997d36f89afc1e18393a8aeea9d0292d53ab5928a6c6eae5aa6d844a40d7711b3bc124d5d14a7ef0cd5c9cf1ad9e54d67b760a3bb4192bcc9c63f31f61f381fd6239f3e1ab4e04faef259651420ab2db1d323e591408133d26e82a748b4c05beefaf3e99d0e7f1ef730d9ec0325d8db47f710142d07def0e40df4fc272327d8ade1f4ee01ee03acdac8f6984f3036f501a19651ab5b2667f46f7c4bb51c5c741c7c18ade5cf4319dd6e523a1dd22281609382982a74ab2ef4fcb0ad4581e26f3df3da55e1133fe264621864ef9a208582a482e82d319f25261c41f642f803b6e27a5d16a81505b53e015faa5ea5fa6da0bacd2c77263302e3adfb5aef61a5b46f28b251f86f2e56ae16736f802fd564e939d2f506b COUNT = 95 -K = 2d82abefca61eaa29c7fb71d9c5d702c563649d48fee4ed1 -C = 14ccf7d9a734fda5ab4ee1c7a0599c1e742ff506d9c2e9d3446d75c291805cc0f52555557914a10fead70868ac4ea368072da661a1732c2ab3aa4e4cc53d559d2954c76c47a98bdc110e27d7cc34a34be46d0f3f5f868937c79d2a45c1e94a7308dd0407a5e64fb63ead013407db476a -P = 97089d0e6dcef6151911ea10da045e57af2fe48d654981be1cdd45663a3d57450c0b42ce1479b953ccae594775848ee0e3d24a780c74adb000aa4287577f549e2e37a506eedef37d6f0b1a2bb7f1e85e72a3332dfc2cb6297652b71c4e076fa740453be367 +K = 1998f4b636575c276aae6d4ec736353d3ee6f8b7c374383c +C = 21fdfd2d4d999cad8830748f3b3b2edceed8ef00144944f2070e043f66034518464cd13ca6add0ebdc7c4ffe41b5ce7d80a95880296aa23842f386a805a3d32e12374dfe0f3025ec6daf7d72faccb8f65d28814bdd71e6ed40215847bb4aea89c81b9ee951737789e4e2385d21da5288dc3a5aa2dc0bc3ca7b1316164f0378b2bd06327fafb4bc629aaeef36dc54d38d8a83289db2a14c2ee7931949d679fc29a9732b691709c3bc751f9b8b3bf46990baa83133d68ac591e425c971bfc8e429477e23874e5fafd9f72be0e2fc7c2de20f95e366c76e91e1e3dc8a6188c789785edcd523c82f880b9ffa466d0a2850dec856fd54ee00b3845b235ed418a1d15897ab425d990ec2e85b47416a565c43c07b39a9968323d2b5bd873f6b2de77698d62b16a3518b4bdcff905e2f86a6e53029a75c0e8e1e60bdeefabf4087a4916af8bdca15c08cee97c171ad5c1067bc3f8b73b7c0b0fbe4e74739306a606073565c3dfa5ba881803dbda9223d843d5fd71f1c6257798652b075a9363aa759e704009bd50e17ae8dd20b60e077a13a4190e5a20c0394ef1457d2e8d7a7049217f06fc6b747d59ed08be48ce2727e3b01f05bdd6736618ca3c863bb4dd0a4584a1343930acafb1955c697a0a7ae558485c46ca1fde37564bdb7c6592945e3722795763ffea75cca6371f1fe5278a685a204e1ea491c148396ba0bc13f1891e50ffb7e3eaa21572d9293 +FAIL COUNT = 96 -K = 0b43b8606a36245eca879d88badc0edca34eddd95b40ca0d -C = 3c6447ee37bd027c8faf90897d2834716e0a99f8aed7fc0eb5b9d34eeffc4195b2c7259e833db564fb404c0b08f82256660dfce3d197b8f6274cfbc0e1da4b5b9dedc4207b009c0253f54820f10b6bd5febde74b9a61d4872934fe3c180724549dbc173729e976e546edccb3616fa6a2 -P = 4f4048ebf6c68af5aa5439f855c6e3ce823f8281ce40fdf1d2c0279a18422fbd4650ce62c8b43f855702030e310f71afa1782b01c85bf05c632394634a818d0f1791fc425e8fd7d43c8bbc1452a43864b917d3f2bb4981e44f3ceb9402b77833493a33f445 +K = b6e3861c5bda2576405838a4b04c39222c5fda1a070e605d +C = f41d646a24155cb84d9d18ef3003b4b10ace807a7b79b55e748b3d2fa9d23a2ff6a8287ac7ccb9061a7d0cd01dae4452bdb1dc736e27e19fd470f73b5fdb93b8659c22dc107fd17b91f9ccd15743b6c5ec7ce15cae7cfa2ba308f9fb015d1a5558a844ab3114c5e0d7c8ec96e40e6c5458e8cc0b52b04ecb332ae69b4903d6590983359ec44214654e5d2c781a4565d92865a71458bc48b61969d895a0531d3b749b6656eaead061486f1df570f7f97c2df070413e7c0bd2268e2c841306d9a7ca892c09a9374bea7691731911a080d17de2a8d256ce4538a7ec2bcdd856b967d2da4901e6dce866ebf63f1dae1dd3c648dee184ffcd36f99a630aa2dbbc56208f778636a714730f68df7e14eab7269dd031eff34b1444da64b2f9c3feb013523371b3a6c87ba4faeac27ad7fe9f9f5daaa730d3fe684877a2cf72da78b0b6d00586c57a565053f21e2444244e54553cada48f36a8d83e25413da95de91ffff129b19c90fadf5dd53325f4b07ab4b1a3a443c4042e043ba6c150605b7267ef8de2e494512178914cdc43b0db6234605f514b763379c05c9fb5f748ed68292592afad182c97355a88b8f4d14017120d921a6cd89362416d2a9c74ce33f21dda9c59772c170f4d48bcc6ff5da7f221d48d62c65e3109b06126541d6330fe40ef8f5ca83e18663f30262de244c099e2df741e1ad38a111a228bf7057537d1d1b5fa87afb2c4edcf6ca1 +P = 2693017e861a0af7acc0732afb50f41f056e19ea2728abcb1b852e37d96219d0fd9bfd285db7452a84f55ec9d2e9ec2debadaf4a57dd046100ef7383ae8574cb120777e7afb24c7597c797bdeefdc9fc7336bb256f3854a36b4c1beaed94937c43ce504ef42d6a8c3e31c6bd3fd606d1a8cfea3aea17f3a2525211ef0b6f6acaa7b01fbe03132f36b2d5a2a9bf7475fc80b32fb7cb563ddb3d13ccc44d687e14d81df8eedee5ca80c2fe516608055d85ad98de5043ac9df6cf05d5d0d565498ff962ad3442988744f5ad17c7e2de402cc0cbaef298ecd890c039204f5cbb61ddf4a4c73fc83defc6587ae569c5874e5cb535006a0157d059ca917d8545781d438ef11c64f7ac58f6512805cdba0160ecf696a00fedc4a31a0d4c28fa806904360a129d0714a44c758e28f69dd1176c092acd5e5c3d0826640b81b2956153f28163d225704e0ea706b8ba9a7e547b577f04bcbf8b2da55225e846230f2ca6968ace2aa0aacc21d6d22ba0f14eb2856f91ba7fb898c36592c787fc17deb7fadea897aedac6ca2292ca05bf0b0fe0c596320a501fbd636aae9a239ac77b1cebf325fc7e91e376aad2b24c5d1db0f819558e208f4e1e8da25bf0bb4087014360e59914c0d7c82c9026550115521f6c8877c72466a968b6422cf17e567a0e3fb35aae103b33c609d4cd76b8d3acd88f124ecb5ae0a13a29767ce7aa223aa869c0f136 COUNT = 97 -K = eed93f850e3a4c7fdf773ec32457ed9045bba2077fca057f -C = a9a1049b982f1e8ea5395d80a43046f1889ae6802d5e19f6cef4728ce9f65b3c1fa1cb9c2da0444e6f845cf6ad19826fe892fd7b4fd958fb144a16196aef398603001c9a2065dfa7900198e4a39265adf8186d6a4dfa2b4ac334791431ecbb74f902636fcbbce45a3f2bd87225c7d2f1 -FAIL +K = e3533d528926a96a9839dcecfa4bd982f3be90b4c74b697a +C = 40dfdd6d4866063e96c610128c7cb34a552579262f6f2b48f9e0e44246b9e6d1f9660550438fe1752f2416154b7ce099a1e0c02b803fa7336bd3d51f93adf71500f4e36c7bb3094dff4029d5b64895d9dabd0b6ad6b0775e65c2d7fc5e45886f90e14794c1e88631ba07f24b2a9f4f4198a24fc881aeb51d812e69dd2830570729c887d3fc8164a01de526bf0f1591ce85d65edc39ee2b7e8321eef56e9c9229846e12d917ecdf468838d60463b0da449a6ede91f1aaf87a57752f87c06e53291d01146405e6c4c17cc66530d7af318c4d34624ce427a1c01f3425a3a33bfecfbd189a4454adc484cd325da0bb0c2dddb83787bfe5c999126570b33c6954adf75a91ca6321e99d4d8689197c2fd7920dbc0eb9e014c2fcdb2e07c0b1cdb521619da255da387e3bb16e52b54e8e8c0e2c456e7ec623010e163dfc4909098c894d73382ae9643cfe83f55dc7253245d788e0745e079a007fa503c2b251bca2efe1a52dbb8139762760cbb60331e8e1fd3b48c8c4617cf2d0753773c5c535d91561471dd3ffa4577d97522d5842075cdff6b16995d2190abb224a1a89f49b82766502e2ef8a6c1d67dc848583a282cf4686443207cf41ff7b9b5c464b69319bda8cf0b969ba9e12da00f7c36e7aaf31d354c5791a3b7c860a56be28a54f2533612178d6f6dd6b00cf20d3886e11c47b124948a0e7c7308befd24cd9a2661b8fdc3bbc1588c0fb4f80f2 +P = 32b19b34c8653493de8c548174d1b2657c6abcc9a90e297c854f14aad2686950a7a208e64c680161316e227d2256e7160b0852c6d2620dddc111c79d5414a57d1ab94cd83fe73a7da5c40c0f3a7715ee8e2804c7faf9a80a14dbadb314270e6cfe34d7f8002e552d0746ab642b0790b0a05614742d81913b5c8814868bc9dc437dbab1013c85a081612d6eeec47814e58312d6c99d49157a713bf0c3078051becde1abec10f53aebd3dfa785df0d69e2dc46e5409a7219c2bc96d177c72a04797eb64035bd364dc92f834e82abec135e9ff3abb360c869913c98209ec467b86a00116c5d31780b9c2b2ef48883b1ebc07d131e8d76421440134aca14d659ccd726fd92f39dcdd57e34793306ebdb42e61573dae05feab65866aa6d454bfbe0799db8b28d3dc7eb060f89d8a96cd2f566a2d5e77f176d72b5100ddec361d8c326609e2bbcc5f2e3ed5c7f196deb57efb36e8e88887196ad0eaf3cde31a14f92b74ba3df4d42f9d4a401c1a481d4966ac90238a3a21d6b930cf11685b44c81ec8ec649b6917b893fde400eff5410c48439d39c75ece29107271791ec835dd9c7c0a7e6b6fd59ed4e34676ffdc45b60aeeeee5865efeee1b7320b6e08ec37b0c47ce1641d19480124eb47c2a3a302b0881c6f5339c375df140e100d3b0cb47bbbe27ee1ebeba0092695740a4ff6f75b3a807588bb36f34dd9ce1ece893042dd93e6 COUNT = 98 -K = 6f8f760d5f64d8412bb398268d2a427bb3e0e72c27ea3ab2 -C = 28adc838ffc19eb4f574790a177eb2e79e110b42161ac30832461dcf3b88ac4ca62e24c8922d9f7e3295c45fd0a59e1c4cabb685340365962b10472b9c113ff92555b8538a6c504be739b34b8bd0515f5afc8a56616ff40763605fc8f400fe24fc46ef8c65dcfd8af5ec6ff854964134 -P = 9a4e8205e141e91c29dcc2d8473fa38fabdeb15c733aa79e5dc3370b7bd77eb05f1ee2e47e6c361b43da3612d3ad65be63fb7ec329e6ba23b3b15c4234954136926ff2bba1d59b40a1011c99b47dd418cfea09c594de5c057dc22741197864d0b9bfdb44e5 +K = 4188edfa897eb42377c2b7c8fb13274a9e0e759587078ce9 +C = effd0e8d881805257e067943c55a7278a07700cea2315c2a4b53abd9cb2946a95e063f0f90f86349bf19dfdc0ad8685195c168ed516882909876bf97a4825a82ee130ee43b75bd04d39c2acfd67299b4d543faf394e0767cd55b48824dacf2a7efa68218b6c4e89bff38453ed7898fe4cf65d684f279ba28c913ea28e096d9a2bbffa6d9fffda3292c9afb56c0c9847f01b7b5f956ed8f0bb3372e7e79ea8fa309f353410264182fe5d75954d23e60b93997efb98f25474a784397b250529c24331a0292113db47a6f23b58510f50940f43e53dda5856c943671a33b8f58abeece2671ffd007eff08142143103ceed2f13afc29aae4a5cedf8ba8b5db7f0fd2e5cb33fac062eb2808765e7412fc24e1728e37594e2b958f7c4e78cc06c12b206bb0255932a18a152808462bb221a349de493fd400237663e2dd4ea8d7e343ac56865d5b39039e10afd4a5e893ce65d5d35912dfaf9e46d28463a4e8905069e20311a880b4894fbc165dbb37d28b23e8755b140aebb9ce65865308bfb7dace497df96e5071cabc029d8f87eae3d623013ae4520a9a898716da4b9cb42c95ef59e8d2ba140fef0b23742c6d7bd5b1a48806f2c93cfc0a010a5fa8a8707ceca37cfd410ac0dbcfd1b96fc16fcbd821648da3c7ac551c47e3ff8644d8b97fc7daaa92fd963059e74ffa36e892a7ceede7c686af67d080e67a244b1822bc0351053068905ff6d20e7d315 +P = f6b435a2f5a5f57ed1095bdc22a464715ffa1af37cb04aa9a8ea6b03c56b62b4e86c592633cec6443d59f2e9b9e5f44671cf81d23507966bac0a956cba916674a87a5b3d84c122bfcea22e68d97e9c617285518f8277b80d9798ae7810e3adddc601966d0c7b1ae6ab41d1a833f2625448998e1d9bd3df4f8548167c35849daeac659bde830e5d335c9efd5ec760afe21927f364b7a09040ff1bd8794fe4dd737884245e8902aa0d7db23dca6872a9a7140cf688b026992bc3cd75f947628412bc1d5d8c86dd76a9b721c9eb5761d07beb1c8e8ff32f845cb514e11797fc0b0fac5e7a2ea97216ec66478a226bdb9faf703f4a10beba369b35ebeec70ca7be37fae205ed4530ce800f4ef4d008dfe37971dd304f828c0fbfaa2720ded98b0cbe67c91b7c7b353bb35c13e5493ee3320add9e395a0eab0d435979d2ead6a29a9053706f403f67d18b03375fa2ff855158a340f8df79ecae3ab4bd218936ae0c146118493b71cbae076a9e94290badd4481bd156404b806b1682675ae1a3fce1221be6a2924b26d44d6423e2ce7b52ba2c652385ad4e17db66e8e906d2df0990af1c62987b1bf15bda113319df2a9902e912b1f45ec46b791566c47f61d8090531e1f4af400c8127309f7a9a5a6d6560d07d9595560696bb4f032204f900e9d0b67e45c164ea07b50289a87b968782505b143c9921912b90e8ca4ebabbda75e7b2 COUNT = 99 -K = b19dc2769de39ac764452a4ec6d9ccfb0af9ed3cdb2e7936 -C = 5e3bc0d177d7bee7cf43fe0ac579c7f825247378bb3a46806f1c54d4b07b8b9da55b6a18de03b4c4a6d736b8fd7cc7688d723416c22b9f85c6d58168e50fb5b83694d3aac6d29238f479e15bba83629639ab76a510521b3ff1a5a1b137fecb2d581c8bedc63b2e64b6643c7a08b4f4eb -P = b83157330a9af73534c7d9b6849a41a17be05338f0d25d39fc7235441d648d1a076456f1e00c5bc1b3ec6db2dabb299830abeca96c18479aa1b6abbeabb2afbfc4b3d7acfd59ed470b0ad39c5de114aafba2918e4769a4c185ef1fcfc4546d7d1d971792d1 +K = e1b8936edbac1fb09b2116ff290a57bb33a1c2bdb432b73e +C = 4d816d5d7ad8298e58bfb1d76af4d39b32ae4a302d0692e5de164dc2ddc12e308448ad39d6c40c17831a13d6785cc5ef6a6e2914e98da1145191f74e94c399cabdb5e87fba78486aaf35072bd5083d64964967e876c55dc4bd24a4ce6f3cc940ba19c8bc8c2e06f860237be7b703700829f079ef0a635471fd2ab58007bd44592c59ad5f194ffbc92db27dab8448363c5fa48f8f7af1979fbd3659180c7cd814f09fa7ef85c587416ab9109ba5dd06e3d1aa22f6006bd96d99bd7250c4ee1da348d3143d106d5f7da5756afa83bdded66958bb5c49d851abd7cf842eb7910cd53b1d13b5d22d8de95dd937184fa207d6e12046baca23edfce156d0869fae7d01c3c162134c32c73bb9071f8feb88146b9b079ce367e721d9bd74a69fe000d41c47a2a00b52baba476815c77662d59cfb47178934d6df8224bd7a4ff2b37863fd6e978b45cb8bf5c1974202c40c8e6ade480686a8a271f13b408c9e12cb15ec37f2cadabaf5eb891afe337e10c2e513c8fd7e6d640bc97876636930087446c16a4c747f08c06e0415c5187e9a8f3fd73ddb1562afb996bf8bdf2cbc79a1358b9df827bda0c10c37f84fc82f2564d1aaa855c3664d4a93bb4de655475d027c66a69bf734fd9f0e8fdfa54894d9b46ec0ec0c6b6ca5c651e760d7a2f144f983f9864ad91311f238e214b45bd378f932e56257a1e697997e67e41962fffae1225c81194c74d6c17bb018 +P = 40eec0c7111ce7c15805771c524587fda90e68e72da6afc7b3892615b6f6b601381be97d90f7812e212a779d0d07ea88e02043129daa3df83ef064d61c54b00ff7eb2b658566227b84b950da96b58e6583ea1352b6ef1925313f71d6d8273fb34e80e9949964a19f5aad01ba211074b96f8438f9c8c694eebc5c358d4718ec13a68fa90128d08f70381fa640346e0a542faa0cf1df74e7f2ffb85b4a655b88c0c731881cae70bea9d50d7c104cfc1eea83445bae0ec3b1726538c914050738145cfcbd2d87e34cb4fd8406baec842bdc1603d22ade090c2198929801833f1cf5fb8c6acbe8c0dfc26b83294d6da2a614a22b304acdad7375577b1e5c7740d3f6233b5433ea72429f139e5315811f490c7e980d87115cd0421ae1fbee02d6e7d92153452a35f0580ff476afeaa8473bc11207bbf9d55fa6b68757152c87401c7833cb8459aa213b24e1732b1a1c47e3889d26fdf0809a9b8d18d4b4b1df5f7f9ff8b6e6f8d9e6a4cd516e3ff4d53f96e577674139732243705f9eeeb99aff1920eb5a64506f1f3a038b16180c004c267b8c8da67fd59dd923ea3e20470700a97b99e62a24910bd82b95b0ccdf05795c0ff65f639ad5f39e5cb6936202916fa2231337650a27a8be08a56e2da92ec28d5a191fcc44d28e5689c8ee34990b7f6693752643f42e988878823a7c11b1c1dcebd637599bd47aa8a5ccd13f69a57b3dfe diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192_inv.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192_inv.txt index 738d601d978f..a725e897cc1a 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192_inv.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_192_inv.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AD with AES-192 inverse cipher function' information for SP800-38F -# Seed = 990d89ea41f54fdc84b7a9c4465728001a5f45efc4f0a3ff2cf72be7bb517cd654d35988bdb7d0871978080f96e9a5d450dedd4e2e65dbd68bb655b7fd69ea05 -# Generated on Wed Dec 03 09:16:23 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AD with AES-192 inverse cipher function' information for test-files +# Seed = 4aea2c5a6bd9234ebc2dc59f1dd35c395bb697c4a22edb946b504fcca6839305762600c5e24841717de1e947f11724f305f811ed3caac62e9524a33b69f53ee9 +# Generated on Fri Apr 6 14:47:27 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 1f6f99112aa4cb74d1d7573898e331b6b9677d9ce23fb3d8 -C = 8bb5e205a2aa4f3ca87ffe4d84080b54 -P = 96 +K = 45bc1a8d26266e0c9d5220a973fc4b435b36bd17c7f92fc2 +C = 200c7e2b59ed27214929fa90dbdd46d6 +FAIL COUNT = 1 -K = 353f645db4b2076a2f061af81c1c6ae8ffc760f156ba2a70 -C = e448075dc558b4d73f0dda6b3e429c8e -P = 38 +K = 427c6c0a2cc30bbe0cd9fc6b11c29f8cfe64df6ab0379433 +C = f5dcb63193a377a526db98a852db6099 +P = 98 COUNT = 2 -K = 438c79555e0f5b244130d8e7c386cee8cab4b596ade69060 -C = 728794b6f4702db9c42183067c0a5575 -FAIL +K = f685de4fb07f15b160397d6add629a73441ec7b299858a00 +C = fdc08cfb03cc0198189e1eb7ebd11b4c +P = a2 COUNT = 3 -K = f46f0b38d3bcf34a3cdec1a197b1ef2a9b1c1d786993a01b -C = 7bd5c4d68c47caa7caa4c070443bc0fe -P = 90 +K = 313f3bf0affddaac788c4372c0a2fa4826726ef407b41837 +C = 4f7f09f99736d6b7245d6c2dc6d00e96 +P = 98 COUNT = 4 -K = 1390139aad0fba13ef01fceb366b8462b21a7f3f12df5112 -C = 38dcaf7cff77891907b34d5fd2288fab -P = bb +K = cf0a56479cfc7c2980c066ee590f436333e7010aab7ae7f7 +C = c222845db03b42f3cd3f1b74e7dc683c +P = 93 COUNT = 5 -K = b8677deb6ba5d6e9a81c342977043bc424ebd8dc03787a52 -C = e7c8e67fc22dd4f4e68fbd8917781b82 -P = e2 +K = 5f7743a5b234585d61916fb10ab5e05b8d81c7db995b4e72 +C = 2528ff1306dc42c73be9af59241cf7ed +P = 61 COUNT = 6 -K = c82b86e90e1a007412c0e9e434a6587bf7fbc2f32751405e -C = b7381be85c1cd5744d8015d65a8828d5 -P = 83 +K = cf6b139709e0cc26b6c2780a9a2205cd44d94c05699514f0 +C = 07fe72dc4ba4961ce0514518b19d8d7e +P = ad COUNT = 7 -K = 927d3121193e4f51c0301ad31ea2b278c8c0d443882399c4 -C = 4616928549413e7b8dabad3297720606 -P = 27 +K = 0f1d9d79d57ca2d3cdd9471c50224f575fee50d272fd1406 +C = 7724c6dde11071457111289edcf23f1c +P = ae COUNT = 8 -K = 77a082f08f09e390be0f9b57a59e380df7f8ac1bcdeafcb0 -C = 5fcd667448295e3c20743c8807df0292 +K = 58502376bc1cb17a8bc9e2a0f41a376b8896da1ccbceb1ac +C = af54f146071cfe0fdd0fb88ffea9e2ee FAIL COUNT = 9 -K = 24d23102fd8f4f17fbd88bbac86e05bef8e41f3a342c583f -C = 4a50de2f6b5c9c4e3242f019bebe8503 -P = f7 +K = 52e671ec78eeccc1e892f060e766b32eac3252680d310169 +C = 6d2774e5f46e4a4b7d87d08b613df0d2 +P = 93 COUNT = 10 -K = c80ff62f71812f377ed3dafa0b6bbb7984d76608b1e9db4d -C = ec9bde95a5ebcd1100a9580d7ac4518d -P = 03 +K = d1d94d9f1af595a6eeab08bba633fc5a9a02728f12d278d1 +C = 7b17dd307c74910c934e594613172344 +P = 88 COUNT = 11 -K = 4fca494f2f6b8ec14f31edfa0cf46cc5f61ac02702b5d895 -C = a43c8b452060f435fb12f79c92d226e1 -P = e6 +K = 3b8e08b26b9b6841465e6c883eb9f69271b38ebc689eda4a +C = 76201b0e033d011017442ee04eb0279f +P = 7b COUNT = 12 -K = 7232b2fe0dd1ff5bdcbf9a297bcfd5c2f3cbb1d8e53a6d6f -C = 3a713aaa8b12a3a31161a76ca62a3396 -P = 98 +K = c6bd10561030214aeed81896b90c17fe23aa27faf120522b +C = 376c5ee7b55807057781d234c4d54d3a +FAIL COUNT = 13 -K = f1944ccd0b96ab752c3cd5ea49680399319ff2780dea0d13 -C = bd44e362e17d1c0a9676eada8ec8b4c5 -P = f1 +K = 612617152fa08350e29361b27884551b48d2858afa13ca81 +C = cc90169aeb0881ebc8f9bb04bc262ee4 +P = a4 COUNT = 14 -K = 56c7ce0e35a4decd0c06d967347e14211d8a0f45d08b2f73 -C = d5cd57453b3c1ef4b9ab9c09fdc34f57 -FAIL +K = f8fad7f7a54fce6a31c0f1e70a7125f5c2cd2027867917af +C = 6b39bff405363a6253ce85a9d85d82bf +P = 79 COUNT = 15 -K = a26f318eb0f3627ea9f7d21a5bdeecb810da525ed0dd6812 -C = a6cdba3f69a66f64fba494768c4cf630 -P = 9b +K = c272ed1d5336c4df9b14cbbdef82f52c5465216bf90b6704 +C = 72b81558884ea303a3999dce1a91598c +P = 2b COUNT = 16 -K = 9e9287d951c5a3c92108b3519994fe2d4f427b5901fe0297 -C = e195468b61be8715bc35b950d219a236 -P = 38 +K = 9bd929e62cce89f51e475d48586d4ebb2d4a453cff5e1912 +C = 479801c0247bfb67275d4743d1e87cc9 +P = 4f COUNT = 17 -K = 8ae865a15c6ed7232a20e4854ffd0e871654d22c08f92941 -C = 925e2de3d9c703c11c38b5268f02244e -P = 11 +K = 486a06915624939778cf62dc69d002a83ff46853a141df24 +C = 9c040ededb7ff1f02b53d0c555fab906 +P = d9 COUNT = 18 -K = 44f39fce30aba2f73e12068b013a3c3d817c414038eff27d -C = 6ad33161e6e904ee02ec4f0ef5bc2d6c -P = 8b +K = cd3be19fc820daa300bb0d30ab114faafa55845cf408d756 +C = 0b24e85e8005e7fc6cb29ad7aa951ea2 +P = 1f COUNT = 19 -K = 8c66b1f0451de4eaf6d0a6c2a49f20221b7d41168784b0fc -C = dc9a4edd79702b9139e8a25d746bdc0d +K = d04821309e13770798d0e76998412e5fd2fda80cd818c264 +C = b68406791fb8b38d549c1176c9b252c1 FAIL COUNT = 20 -K = 754544ec1c6b1c0b9d5ccc7536f1decfcdd3d942d881c396 -C = 052aaee4430c7e361ea0e1fbf1751b41 -P = 90 +K = 49debf8d991e799c2fa2e9cf6ba0783579930d6c51c18632 +C = 6219be61eb1efb4cf9f83ab0298bab54 +FAIL COUNT = 21 -K = b64e8296030306f52268060b7c4e13204bd16c52471c202e -C = b2056ecfda6fdcfd3115b451b0c0e016 -FAIL +K = 0ed67f6a22d201b56941d98111a58fd7d155e805cc2387b7 +C = 5e3fe489f06d2f698e4bbfaa4bc919c6 +P = ec COUNT = 22 -K = 68c34a47777e979ebe0a81c49a2ca410c364ca9a1bbafc29 -C = db23023eefec7b8447481fcceeb38cd4 -P = c1 +K = 9ad14e2871053383aeb2d15fe1e565563e48eb3c8bb71a86 +C = 223c071cf7323336bfc469f638a79649 +P = 3c COUNT = 23 -K = 1f30e2d2672cfb5b554137307797def39febca3664132c38 -C = 87b72137fa80edc32b11dabc0edbcd7b -P = 8a +K = 59019f7cc300e7efb1359aadf6b447fffd08f33464326f05 +C = 540beef8a236b79b26fef640d2737091 +P = a2 COUNT = 24 -K = 6031933bc9e9aadc969c4946f33c0fb0846befec956ea999 -C = 11654216114d432c7278993f873bc73f -P = 3c +K = 216606595c46cebe2cfcc680050bd02d655a43393359427d +C = 0e460404baf0976185b2737d63223da6 +P = 38 COUNT = 25 -K = da5089b74fd204ee9c7e731a4792581c39d2c50d143c59f1 -C = 89765809515f943286e3790ff8d541e6 -FAIL +K = 85f4b536faa161c1f8ce3dba9f3705625a7c932bffd85465 +C = 8ad4c234f089398a1bea8ab2ff5f13d7 +P = b1 COUNT = 26 -K = e7cb30d66b5133aae850039c5a5a7839d75e9a2229d6be50 -C = ea5eedc0bfe6ca95f7abc112a5481238 -P = c7 +K = 1781bef9fc286a4bc2d9c43add03774642682b828fdd308f +C = 49e38f4022a0597f370f3bb0376f5a0a +FAIL COUNT = 27 -K = db89c97adced03ba8a65f3501c10d4c9bf8856c3b85a762c -C = 8c35e9b782a61794b510e2da68f2025f -P = 24 +K = 66b0e5f44d625cbcf22556534045932e9af11079a4f0e29a +C = e8e7a0fba24a658b1238a154e0d6ae24 +P = 33 COUNT = 28 -K = 2741a36fc59ed0324650a36baaf68f002e943489e9cabc01 -C = 379ff679628e93b0330f1f720fb56f1c -P = 81 +K = b599ec32f56b52ece900cc3114534cdd23be55176b5cf75d +C = 6d5a519d90a4eab011a32cdefc65a954 +P = 2e COUNT = 29 -K = f9ab40fc4bd9f83aa068601fc3a7951e45269be3d7bfffc8 -C = 59998160c5a8c66091223d713365a929 -P = 3d +K = 8ca6cf90b39426810a95008c56fe9c7977766e3de48584a4 +C = a6cc662b96424aa6ef8d63977f635dcc +P = 31 COUNT = 30 -K = 85782c9b11848c8f06024bfb47cb131688a9ac66bd3ec1c8 -C = 3dffd74f811812323515f0bdd1b1e869 -P = c3 +K = 1d348a5c4821eb8d4a892e51458b949ad4e2751e9f3b8cb6 +C = b8e9e0b14541b821fded9db3977cb3a6 +P = bb COUNT = 31 -K = 947fecf6ed813fa6bed1b6c556142fd2473be1c6b3e84e16 -C = 99afc547cbf79bf51ceb65d81f4261a4 -FAIL +K = 64aa5a3850cd73ada21f7855ffe3e31e196f65177d4334a3 +C = a8b539b3d5addd3d6d63af28f261b098 +P = bd COUNT = 32 -K = bfd7122fea92048b929a6d361bf35da4287d5dd3bf702bc9 -C = 5f9bf5835b341f2fa1cccf6c5ab0f4e1 -P = b7 +K = 3e2d3d6406791d661de49a0622566cfa55e5a91b5c94bda9 +C = 0a4f62cdd98f5d7bd6d3501a24b466ab +P = cd COUNT = 33 -K = 81203066f84bf8b65d664fa835d535088e00bf7fa02c12ca -C = ed07fba756313196ea83ec1f60d67e79 -P = ba +K = c6fe13f1bdd43ccb95445a825072fa69e107e1d518e1ffa9 +C = fb9e96ba849fb294277e0bf67eb140c2 +FAIL COUNT = 34 -K = 420bf68d85d19ae4561403966662eb5a511ed1ff5ac8dc5e -C = 2dbf968c59d512b13a42b6d52ce7aa85 -P = dc +K = 662aa77f52ad058d3ae509471dfbf1f8c2bba3421638b60f +C = a0858867538a786c29431d06c92b171b +P = 75 COUNT = 35 -K = 59e7dea5f48ce868e7e98f89a66e60d621aa871fa015b8ea -C = 51125d95aec46e98428807c54809a2a3 -P = 50 +K = 9b2290c61eb3f3308d2c306456e86c7b8f1ee989bf04f328 +C = 7a2ae121b33b6638fc09f0c4e0692eae +FAIL COUNT = 36 -K = 0b546c414ab949da37794d44c7bb878a34d22d0308520de7 -C = d54f812303bf3e32f9181363e1f2cbf7 -FAIL +K = cbac81f7de209c639cb4574a7d831494bf27d1e5c68ad35a +C = 176c130000c596cd25174738c12679a4 +P = 8a COUNT = 37 -K = 2ae4ec666a24259124a2acd8cc0a1872316e433fa6c8297b -C = d104c6e2b4337494db2d9237c0a9a0b8 -P = 81 +K = 77cffa41b1405f34e3e0e2dfa03a29fd128b7e8923e26332 +C = febb28985d4632a97fa1e92780279ce0 +P = 60 COUNT = 38 -K = 0ce095cdc5ddaf4f49829dd041c54cb67291a5a117282347 -C = 71823ac5f47f37bfc201a97e6ec0a1db -P = 03 +K = d2cda9d314f680597a09e584ffd62a93c810b9ba69c11db4 +C = b100ead3926d9dbf40fd717e32773b49 +P = 33 COUNT = 39 -K = 95a883cd4f1cbfcef9a16d80cb43b6e222bf4558ebfbe68e -C = d01478c2d43e95b5c20eabe1eced0a80 -P = e0 +K = e638ba17268919c1eb81eac2ad2380cd2498b7239753534e +C = d9a9ff3e3a9edae2f2083acdc6fed5c4 +P = d0 COUNT = 40 -K = b8689bf202da33e658e35a7f8c22cb6acb970f88db0339f8 -C = 9ceb460cfe2e1c281d56cc83f38e2b64 -P = 69 +K = c32d833d0ba685435826e9e9b319f73e941214c0590b125f +C = 7c77f8183f23d78c00adc0b7dd23dbe5 +P = a4 COUNT = 41 -K = b77ee9afc66f2bde74a818faaea6cc375d0d1f2f56f73bc4 -C = 1ab93bcda666a5eae9b86ed3975a6022 -FAIL +K = ff6c64aa75f75a594054cbc3fbf7a73fd0f3428cb4546225 +C = 8c1f44a89c009059db5040e23532a040 +P = 41 COUNT = 42 -K = a4b2ec416ec0b76a6470fba3a839963a839a73c9998e23ff -C = b604e1fbb2820ba85236a7d98b05590e -P = 06 +K = f68000ee27769333c1d1033ef61b763dad21748e76abd4ef +C = 56a4b81c2cf0b2b83ceb9966cd23e49e +FAIL COUNT = 43 -K = 9cb2c931980befbc037e11a80f774bbd62b84e4219a5a527 -C = 910ebe6a30023cb9e2cfe937f0d2eeac -P = bd +K = 06feeac3b9e88753ea35c8b3074ec81ea3984d76d9f21ad3 +C = d45fd602f7bf33f833fa711a72afa61e +P = 26 COUNT = 44 -K = 932f69b4c7be9502693bcb7e3deeb87da9587f35e1ed8256 -C = d9955bd9b40636e3789eba0375a7f9f9 -P = d9 +K = 206c26674c04598b3d4b9b9d319bf4e6edfcef8fd63fb16f +C = 83e07b143ad9d9abbcad2d117355d25e +P = 0a COUNT = 45 -K = ece0503efbeb20fbbdc85858bdd7ba934d9512e691ee3e45 -C = 5e9a6601a85b302c8582d1ed8b39fda8 -P = 71 +K = 40059537f8bdd1703217dd5a9db6de0444e9fefd0dd96a68 +C = 67ea169e68b9d68e2a0ebba2336da1e0 +P = 8e COUNT = 46 -K = 5f51b380c0365a018e01834b95b6e3298ce5668178a0eedf -C = 9eab99fddfe8e5c79bf6c87ecc57958d -FAIL +K = c75928c9819b6e74e50b5c63400a83222c333d6fdbcda973 +C = 82954b10dc944370c36834f826c8a792 +P = 2c COUNT = 47 -K = c063dbf426e8f175e2f829a0a04a3edf3db96db13f6637dd -C = bc629ab8a978c8b558c816ad560a9ebb -P = b6 +K = 31cf4feec34c5a07eb737970b937a2957a58ad7d1e4dfb1a +C = b7c008f6269cd99e088d905544e2cdf3 +FAIL COUNT = 48 -K = a8ef0d381873fd7583bd56069149229ea8ec1bcf36afb178 -C = 2ef1c48d449c0d2e7a1f3686fcfc895c -P = 76 +K = 1dc5e142ed72f54ffb5970280d061e746c1c4d54e913c9f2 +C = b14821b0c803b8bdfe2bcd922a47aa39 +P = 07 COUNT = 49 -K = 16d2d83fde54a616a67febafb4701c2c8cda0506dafd347b -C = 94e9c840be4e0caf91a57cac4e18df01 -P = 58 +K = 2d1805cf62924739fb19913806ae1a5e5e4f4594b485dd67 +C = bb54aef41b9992f2d93000ed1e1ac2da +P = f4 COUNT = 50 -K = 52f9ef10ad893dde22e436140d9e148f791af52f1ffe1bb4 -C = 31af9534e56154265c7090f8e270af08 -P = 99 +K = f4f1406278cd9d837ac8c978eb3d1e2b83de22540f323a3b +C = 24025bb066182def054bc14cf96ca6d0 +P = f9 COUNT = 51 -K = b61fb212f0729d8dd2af57cd4a146b79c8a9dce599f7ffed -C = de2b558ed6f90bbc126789d9bd95faa8 -FAIL +K = 438b851dc07a050c501e644fa8ed1020eb6f7d94be6c55ba +C = 2839bda867e10c914e2fa31448c73dd2 +P = a3 COUNT = 52 -K = 0d4dfec4fb7a7cf759d99abcd780746adb41dade5ca36353 -C = 0505ab170ab58e26bc70bd046c752b9e -P = d0 +K = c7ea03f4f3e5eb6aa8db4954a64775490ffb1640d87a599b +C = e7c5225e6db7edea936414d5cc0b4ec4 +P = 4d COUNT = 53 -K = d35724182abfcf82b5135d0e5f385ff7a613aeb95ea3e1c5 -C = f5b122ba3671b66cccedc08cabda5b9f -P = db +K = c74044def6e3b3c679ec76406f28ead5f5503ba9a06ebca7 +C = b2523e8f28b881595e474dbd491cead9 +P = 13 COUNT = 54 -K = e9e75a6cf1b07a9bbb408289d46ed9da50f66189c1275193 -C = 50506ce97547c41db9944ed738c2ee3f -P = 4b +K = 621474a8edbe06e890958f0bec85a74df59bef9c31b38c7d +C = 41cc19b7797055355b13b532d89a1f4f +FAIL COUNT = 55 -K = dfe8cfb4d3a5c984a51fa6641e0164b12728651adfff5e16 -C = f0fcafcfeacc3cb760391a46df016047 -P = 08 +K = ed02e5870c8fc5ee30dc79093c64029f17fc016bf07f91f1 +C = e6721f7277603361220c1307b74b0981 +P = be COUNT = 56 -K = 477a0b4447cf8f85eccde092953949eafd8eaf3213eb4b78 -C = 021c2edc01eff7c257a2bda810c77b0b -P = e3 +K = 926f274ca64c01e1523a1d5aa432d5f5f37c1fe1dc98dd0e +C = eb899ff4b0b3b19a663d61b0045196d4 +P = 3f COUNT = 57 -K = 5075fe52ca94fd9c04c347d3ace1493e813a1bac7d5b2b2a -C = 79a614c3ab9084bd97486da9d5498955 -FAIL +K = f8c37f59615e8eb40db0bddcbbcfa1c725ce4b7b85268fce +C = 673bc4433f319feb4686532c8af98bfb +P = 6d COUNT = 58 -K = 93ad4794544bb94a7620d93aeeb68c771d82a8f83161c3e6 -C = f0ac96fac22e3f08c768a1a75046c9fa -P = ea +K = 5837318279eaf412fdcba98180a4a9a7996627318fb27a53 +C = 9f65b74bda023b9e2774a6ced7a0c932 +FAIL COUNT = 59 -K = 50d9ab7c755bca54f5e54a430de1c64ae7e488068c591850 -C = f17a2b3592706ac06300a8fda4e31167 -P = ee +K = e30ab0add99b4fcec7758e53a8aecab1e125c6eb982c9ba2 +C = dd59e270b05a7f89b74fcedd86cd5799 +P = fc COUNT = 60 -K = 5d3d1f7087b930b786c099c02355e75b9b8581e123079077 -C = b894c36be4387daf7b70052ccec65b62 -P = c9 +K = 5bae7c3a0c2f969acbf88bc0218e26493023faf40be71e6e +C = ff6d6772b706ffd1e4ae4be0ce22b11f +P = 66 COUNT = 61 -K = 6d81b91bf4d53c9e2dc2236dcb5e50ee517c4002c8b67550 -C = 1e3cbd29a19c49974d6ecc733ca04284 +K = 99799a472d4c959204eb620439cdcca11afda3633ec830aa +C = 5b128d11cd45830dbeb9aa4ea4e98d31 FAIL COUNT = 62 -K = b5c2dfe2c4f14e00e3d451cb6c95c6fe901b7d09d3bf8a60 -C = 69ea63114468a50aa820398353a6d6f2 -P = d0 +K = 02598376bf8bc15b1b6194e9c002ed6cd8bf7c0c1f3eac59 +C = 9341b08c6d28d9a228c389d49143965a +P = 67 COUNT = 63 -K = 127421db20962a63540d179e3f06181125e4c057169d6a2e -C = b5e682cf6191aa3a8e73c26a8b97888e -P = ab +K = 1170b1d8e39d3a43ab666c3ebd92ae1b65acb7ed45fac5e7 +C = 92ac4eb956a5589987fe14387268dfd1 +P = 6b COUNT = 64 -K = 82fa9dfcb3fcedb52519beacf66ba931b4af16cb19b9d988 -C = ab9b0f1a97dccd71bf18abe401223885 -P = 18 +K = 267e758be1e88ff9985963b9d9091690ff3cebaf3ee77c5d +C = 64378d58e8304df15443c498f3ed27e6 +P = 0b COUNT = 65 -K = cb124d187270515818f71754e62b3de610f5d661f2f7bad9 -C = 60bc813399b3c5cf0716f8a654df8fe2 -P = cb +K = e72ef7b00c8c53c242e68b7e44c905bac2d6e3e7482b6d95 +C = 07b31bc42ad91c9c6709f5e9661614f4 +P = 0d COUNT = 66 -K = 74cebc77d6dfb087b79673e9fde49b899ec33685177ac0b2 -C = ea17107848a8c9b41217605703d18ea7 -P = b5 +K = 7448f6101bda5837cf5340fc9f86d73d7a650f2f96bee03c +C = 77a655ca098d26d84769b523208f193a +P = 2c COUNT = 67 -K = 6501d2edbe721b0cd20a847fae747ebe4ca2e21154dc20c5 -C = 86342a98b11d694ad28adad9e34cdc3d -P = 2c +K = 06864ee7d7a71ce09c0e2167b0b6499c86de007308afaf00 +C = 8fe31a52d9ddcb42e1100fc361478035 +P = 42 COUNT = 68 -K = 3196eb57d8762ca57774a03362bdd44e14f3fe6aab31a90b -C = c57da1e3868ba1a13df1f3da02f6085a -P = fd +K = 49496ed8cbe312c3ed027bc233b5be0d7b954395e6863148 +C = 7226b0f552f74a17e5f542b9f845a371 +FAIL COUNT = 69 -K = e5c44265d6f0876d5747aeb22259c5446bf80e095ddf06c5 -C = 679a1dae79d641f5ec85ba240a6d6215 -FAIL +K = 2dc546a19d42dcceec07ab03cdf95afc0149c88cd272e866 +C = 4711db3e5f643d9bd358ddaef0b6eaa0 +P = 41 COUNT = 70 -K = 98c262984ab9490ec97610fb11df0c14e3ba9180bdbbbac2 -C = ccaa6af162794df6f4c6c895320be5da -FAIL +K = af99b3f38194f0c414ebd0f40e58c03b019b6d1cf3638df0 +C = 7a2f8ab50cdec0aef704d1cb6e459e50 +P = b7 COUNT = 71 -K = 124ae93f29d06d5927892de7b9af211d0f86004f242a384c -C = 29ba7ffc4d94aee6e09e7c6a5937b5ab -P = 95 +K = ad59176dfdf8f2e23b28c9d9e5be63ddd444b582e52fdd3b +C = 06b34d1786f047e5071dcb56256b1786 +FAIL COUNT = 72 -K = 16eab9420dbfff64fc44c916275407cdd7917d94490337bc -C = 9b4cbfefff047c66bb0d4c8fc418e4d7 -P = 96 +K = ac8a3398216340c8e97f86c54138f1d7beffbebb3c3728f6 +C = 572e2a07a0ad714b86a0f6476445a952 +P = fa COUNT = 73 -K = 7763cd891711af3d31b8570e87bf68f0d505b2b54a5dee3f -C = d59b80a90009d941ee4d78f6d97c7c5c -P = 79 +K = 5b17f5753240303a4ebd46c314817bbfefaad61d085569e4 +C = d69233b3ea85edb91e22973389acf6ee +P = 66 COUNT = 74 -K = c2214394ef6974b6361655983955504f9ea7cdb8b2239d07 -C = 5b72569999f85e1555885dd56f8cd7b3 -P = 5b +K = 9db509c867caf35cda6affe92ee60c1387f4c6654e1c582a +C = c0318749c8ff6ff7406b69bf02aba4b6 +P = 2c COUNT = 75 -K = d1c99e0c329f22ddc9a42abeb865814092aab410d45ccb3d -C = ce45f4d14b7bf5a1a6e0f2ef9547bc04 -P = dc +K = a5f8ca9d469d0c4b52e35714c2f6ed483d9ce8070a28b63c +C = f03fd0c7c6cc02e409352914d9f9f4f7 +P = ab COUNT = 76 -K = e247819c977f59aea64bdd8f63e44a8d68cecf50dec8dc6d -C = cc3df248979c4e952a4f092e726e8394 -FAIL +K = 8af16db7ca8b321d4f283451c0a5273f281febbf701a4427 +C = a1359d7f13775f352a8c9ac0d91d6c3a +P = 73 COUNT = 77 -K = a60fbfe6e929b5340c54d28e5fc792ba26363c7839b1a3bf -C = 6909edc3c5cb1fc33df430efebaa6da5 -P = 76 +K = 991143f9820aefc41c6530f1926c6ae9b8d9505e4566d95c +C = 61189ecf4f9bc734b86e3eb3fb89bd97 +P = 38 COUNT = 78 -K = b9f35e2cd2e0d47e93fe139d7dc14494ac3d9fe0ad965d4e -C = bcb418abea0b06c41f579279217c668e -P = 31 +K = b02fa4b334a7e03a4b5f7bfcf55e314c2c056a87fd053066 +C = f667a94735fca02ded0ea8f0907ca05d +FAIL COUNT = 79 -K = 59d579ad9f6a93df40f4a4013aeda997d5522d67240a2918 -C = befd625b5def448bf6475b5183e7cef7 -P = f8 +K = 92b208ae42fd0af9ddbbc54207bdfff14697a6de17e70137 +C = 8053b2d3f2051fd7fa74a91f1e12de41 +P = 6f COUNT = 80 -K = ac0e49700a31cd3fed4069f4b428ca72fd9207937c651e96 -C = a2ff3a616e9594b8218806f5a4cd5e16 -P = be +K = 772a51f424ce5ce2922e0ce78a58026fff334892d740fce0 +C = cc3641796ab196d51fec7cd7d115aa70 +FAIL COUNT = 81 -K = 3feb95be225496650bf386b300de13ed4b5dbea87892564f -C = b81dd843b57f1839197ff12926a12043 -FAIL +K = 2dbb3a74398aa5d92a5f0e86ad52e7ae021b5119a2fc299b +C = e94292881e3653c3c94e882535d2ba96 +P = 68 COUNT = 82 -K = 3238702a825755d474d0974ae56902943685ec297aec7f23 -C = 76cfc454db1d5e80fe239deb025cd6e8 -P = 17 +K = ba9a02d256ca0ad84a0c56922dc315946d1c1224eb2cfe73 +C = 63f378cf119223bdbdf9f0d71765af21 +P = a0 COUNT = 83 -K = 608890aeac805e083c19fb0a339f96f3b78b6f07c1494d15 -C = 4014e6154bad417fda238cb611f7716b -P = be +K = 264800fd779e649dc9884ec05ade76018bcf2b2b57297e1d +C = 7874afd7bc2705c820a5c4cff633535c +P = 68 COUNT = 84 -K = f85822708fe37ac917fff888da5f9f012d056a03fc847b66 -C = 4b93d01cac03f9e695ca43b90b849a15 -P = b8 +K = 93e7c2f947f873d9a3a0d8f063237d1a871ca905031d043b +C = f8c1d13483af9289f07c928a41572676 +P = f2 COUNT = 85 -K = 24c0fa0e9b3e195f7250d7634bd1472d9c28900fd71df4ef -C = 604324ec949e2b7fcfdf45ab1a59f23c -P = e4 +K = 01f4506f35748b539b5f8a3753d3b05a3144d566ce969b29 +C = 4ff99326c6ef62842ffa1920f9eda4e3 +P = 17 COUNT = 86 -K = 67810f537f9ce066f44bfb3874ac278d433a0569b919db15 -C = f8e4b0d9a7ef94cb00a17d3f2d1275d4 -P = e3 +K = 49457db1ed8a24c13981e201dde45eef1b8490c10e42b230 +C = a03c7b1bd0c05ab9072d552d73e96128 +FAIL COUNT = 87 -K = 33a775ddd5d863211d75da4d55150f8b8f0a39d5378273fb -C = 8633e2d7d3fdf5145b62df00841f2fd7 -FAIL +K = 27ebd8d53c2d48254e2349fc4502117a0c172e7cff32a8d1 +C = f925044f8921952c462fc8b3ac01d9d1 +P = e9 COUNT = 88 -K = fd17e8c3384a5c83fdf4fd0a998cb706f4834375a1232c38 -C = 853630c3607b7ede55dc1a8936ea8d06 -P = 8d +K = d195cdd671ae63b20157b7c99f3a14dfab1641d55853d713 +C = 41d3e475b2c7299321e67e8fdc8616d1 +P = 57 COUNT = 89 -K = 128dd1d39f7785c152f9d18b974eb3d439d9f944a1130cec -C = 09e3df02892673e16670bcf6e1e234a4 -P = 4a +K = 11c87826499fa27f24440b72109d72da6099c079af2f940e +C = 77ebe393a032af4f14d7054070f1098b +P = 9f COUNT = 90 -K = f2ddc093bc84af2a3a5458c98ae612459b3f8178d0e32add -C = b86f57064d9b6da2f17b994e29be4198 -P = d2 +K = 54cc3f6120e7d1f893f9d6db16f376c7df57c18cd9271481 +C = 97fc92210af5a7fdad32bf635e5fb28e +P = 7e COUNT = 91 -K = 46f71fd73ec4941e2248b623caf1d6a9dd1b1d7dcd418c31 -C = a6a5589f25200a791136da5ef45feb80 -FAIL +K = 76662ff4384633034fe0acc2e16473540cda38eaad7fef8b +C = fbbb61cea45ac2dd9ca9618142c38140 +P = 89 COUNT = 92 -K = 29ecb6895c4366265a4d730cb6394a6a019120533792ebc7 -C = 387c348a7f2f7d3888e13566f3911c7b -P = 3c +K = b45abef360ab69dd3cc7e082ea0464e8cfcaeaceaad40168 +C = 3078a83101c165102cbb5646c1d58c26 +P = ea COUNT = 93 -K = bed5646248eeb2b5382e9f070b8fee3dfb95ef1525dfbb06 -C = bb57d068c2a9cfd4df51b18db7a612cf -P = 54 +K = 8a75a2226812e04d0a1fd382fd32fc70574268d971b6f2b7 +C = d5e4b2ed3c13cc25b864c31db319a9b6 +P = 6c COUNT = 94 -K = 94ad382f07a58271bf1036c9fe743c129807a4ce6ee529bb -C = 7dedfe26d53122bd3cc92a0db1583ad2 -P = f9 +K = df8a95907e3bb839e8f995970b18330e138037607ee40715 +C = 5a5a8c4c3c1f608b65bf1c240cbadb0e +FAIL COUNT = 95 -K = 9c5c43ffbe99933c6ae0ed095e123d7e1bc651c35e637229 -C = d5aa417b7c68e2d159d0c850bbc4b34d -P = b1 +K = 70e0f44b63c955a6bae02d79c52f5d631b36456c7058b763 +C = 7d48db5f849faa81557c1bdffb3adf60 +FAIL COUNT = 96 -K = 75f531dcf2be5d0e9c595317ebf763212edeaf3d3e40385e -C = f88d1230c8791ff940d89be70c64b133 -P = 1c +K = cc0fadddfff8584c34202b02296926d94e383a59a3d010f9 +C = 2f46033ee9871387a9e257b3d50af52a +P = fe COUNT = 97 -K = 00b66d090e05dd84728bd2113bc72a4dc35761224e0f1ddd -C = bac9d88b8035e10acaed4b9ceb275bd9 -P = 17 +K = 7a3b478b6c55e744abbfd2bc50ffd13e047c7b404cd5c38f +C = 9eb7532e9ce697581e7a3566d742e027 +P = 04 COUNT = 98 -K = 6a4c602243028e9a803b588f81c89279047d5ee0d1ce24e5 -C = 243dfb0eb175fc6e35b5dd8b0e17323e -P = 13 +K = ef559c923b91f6fbaa0dbdb2febe45917e08447affe5df5c +C = e224e03253a9ac674a9b27871894e308 +P = f7 COUNT = 99 -K = 9c9a24214758ef57344c43112e1142778e459da45428bd96 -C = e84d40b919ac118567a122ec41f15efa -FAIL +K = 0c411dda905c5bfc17663e1f113976488cf608f108af56a5 +C = 1ff3c556d821cfaa1e8fe1e2b4d4a645 +P = 23 -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = f1042d815b7613b1a3efc7182c77d7e940f50751013892ab -C = f48684879dbaabaf8a14c63a08411e0f09ccedc2b64b53f0 -P = 2a78644e3f4a5bbfba +K = b05cef65ca7b1a7908f575e4aba8b1d8d2c727e1e74e77d2 +C = b573a8ca839e15e0f3b7c9c7f666ece7 +P = 1cd6adfced3b9b36 COUNT = 1 -K = 44e398fee1b4611f04b5b4f4878c487d36deb735e3c3030d -C = d8cc13c8fed9d25333629df1c639e82151414ad95859828c -P = 0213f7b18db3c69a9f +K = 40162d95db577c454666d35bf8ae4b304febb2e521c9c8fd +C = 1aab723e5b106a355f2d964b4b3f94fb +P = e06f76686bc2ee06 COUNT = 2 -K = 45636a156387eb227ee3dca3b1ee81d2d3a9230d59dbba6c -C = f788b75c5e8c172c93f95d4a8cc101c9ac9b1742a8e5e01d -P = 320e35abac58fe68a2 +K = 2db1accae6f635268b9f0e7e8f1ac30ad74aa388ee28daba +C = 292d570f4a85e985ba658cadf267a22c +P = bd399bf5ec01462c COUNT = 3 -K = f6a11d0ed8d5fed245d5fb16d362d6c33859d57fb0995dc1 -C = 51c7c1dbe2518d13372c2204102d5c71c78e9875d5eea9cf -P = 412425abe9cea9dfef +K = 8f7f7beae6d8f93cbf967d6f47ef0fa49ab13950d5aa40c9 +C = 490ef58d78e17aff4dc8c3eeb12fcee4 +P = 373483d7bef7a29a COUNT = 4 -K = 89a5c9e1044041c378f9d7f3cf8dcb675ef3d0d83d7d7cc0 -C = 237bdcbe23a3d43d4f446a61adf8347c3b741075c7087e99 +K = d3d2e9aa58ff39b01f08b81374ba2b55f431bb6a8680a66f +C = 69b363e3a10f591e4423aa424c7a2a2d FAIL COUNT = 5 -K = dcec5bfcbeed4736d3e92c1dcb90f60a23ff872b79d7a73a -C = d1ffc1fb92fe3cda6f765ba038f9399997ee5d714b6d9d38 -FAIL +K = 1fee8e81d8b964242e7f938c220135fbdf55b30af00a310c +C = 468bff5ccb613dabfa7620b75ea4aabb +P = 1c507ac354cdffdf COUNT = 6 -K = 683c67b7ae3c0832a4bb2f3f97b0638db46e09854e24148b -C = 6f540346b4f4f07784a0740cf02bee22ecdfe8037b232364 -P = 7ef9c2b18d32d9ee0d +K = 877241706088da28d5a31a3aeebafb120bf7b914e5bcb908 +C = 9aa07b9b7ab204e4d2eecdaf34424926 +P = 94749ead43847cea COUNT = 7 -K = 23771cbc804a9d99e0cd56e8122fb5a8e908c93d16511651 -C = c7a13990e5dfa9668894e41d6898c87ceb3c91c21505c12f -P = 451b30db43a6139172 +K = ae57d674b67d5adc81f72cbfd5231d32f8575c425a0e4400 +C = c2589e6865a83365520b3ed427930824 +FAIL COUNT = 8 -K = 2cc9a21ac30671ae81f60fe929cbe4b66fb00fda661be968 -C = 34c69262662f737637ebffc3e57857d960490a60dd23fa89 -P = 6ad69974f51443c84d +K = 02ee5116b21ad18dad145441e05d63c53bebec84e4ea804c +C = b15fb1277bdf54f8e6e322934cef2ffb +P = 89bd62aa3de0023d COUNT = 9 -K = 8596889eab63ce3cd67d17e9f12438e75d4aaa73e968b361 -C = e8cc2dd8d68751800185dc75a49970f9736ad971b64ee1a1 -P = 49998a9850751e7312 +K = 62c4d6862b75eb926f39440b21f88089d549ef4723a146b8 +C = 03e4d3e3739bb6ba55b6697aa9048966 +P = 4df6674160989b89 COUNT = 10 -K = 811530c08332a41aadd5254e1f9b91271fefa97af30f78e1 -C = c7396ecf900621c38337c0aa21951f779ef75be35bd1dd9a -P = 01e9755dd799ba05be +K = 5d63cfe13ca7aa6cd2c7ba16d277fb9ac1759c245c6c1e16 +C = 4b17e4687f9c434cbc2c3e2718e2efa5 +P = 186948958da9a812 COUNT = 11 -K = aeefaaf0955d435536d7b0004826a307beb1845c03b92e91 -C = 44921935cdc6be1ef847c508fdeaad235b46645c69c6c7de -P = eb9802c7f288564b5a +K = 8ce2a91109fad77ad91742b2bb1107a786b1826b15bdbeda +C = cfe6e64e7a3f5c331eab47c14267809c +P = a677eb3c47ed964c COUNT = 12 -K = f2cc6e74030b17ae06441930d403085a8b1c246963ea7438 -C = d86c49764ab346de2565f2566f8555fabf21589a77abc766 -FAIL +K = c64302bdab084dd702391ec3e02dac10c92c3d9bbbfba894 +C = 6df6667c2d47185f52da030d87f59555 +P = 090b74e6748f8957 COUNT = 13 -K = 341565365804bcf61769f54d0278c20ee9292bbef523ff27 -C = f5a677580c0c00769b9b3b02a21346d0dc25ce7b77acd6d6 -P = 55202fa0137a8a55d7 +K = d5200c77348f6baf7a1545d4d890c3b6eee191c276e94d6e +C = 2c7678ecb1c50c141c8e7e15c79fdcb5 +P = ecebaa9e9db1cace COUNT = 14 -K = e2c5b0872959041c283c68fcb68196e9edad3958ab7036f2 -C = 5b217fa6351fc4acde252b1a90bc160dbcbcaf68fc901edc -P = 3fdf69aa978ca9ef49 +K = 43d3aa25ead98767cde9c3d77e6aade5ed1a0f059b1760ca +C = b0d710fee6d616d5152859174152cf6b +FAIL COUNT = 15 -K = a8f035606fcd3af7ac8382d023fa969339feb13465f53d26 -C = e0751680d04d43655b7961fc13bd2b0a808ac7a0461fd198 -P = ce53276c5e37488ae0 +K = 7435062dd220faee0af63a46c4cd5f57e9f49f223f69cde5 +C = e0d08de95ddeae187acfedd1fa823bf8 +P = fb95da8f4e77625e COUNT = 16 -K = dbc911c0604c551d8b7943a5aed8281c076db786da1ebe2e -C = 10e79dcbf13ba3b166382011f996ec74ac84307aadc91c3e -P = adc880b3367727beb0 +K = d8f94c741894707e85605b2abd0d7b3f89af33afe385ca98 +C = 91ebeb61e1efb91b56cfec55323b5f85 +P = 7e9e772323d90462 COUNT = 17 -K = 520ca7408d5f47c15272d0da5170bf89e362c696635fa850 -C = 7e428f5161577e6686a690c40d6fc254d60a158706422f30 -P = b2b7960f2beda4ee7b +K = a4a7022cf66461354142dc9a608fd476a8822e1ed505ec43 +C = 7cbbae60c6930ea6bca530feec61afde +P = 308a1b20d9544a00 COUNT = 18 -K = b4ba9543ceac5b4ce2fd5ce246321bb8d86aa97c8567dac1 -C = 00c7d92a3119de2589423bf9a2612d59a21618427e623f2a +K = 7643ffb01328309077e017a795e71b0bcac4f3d21b267904 +C = c428aa9db63e8526db3fd98e2abd1a4a FAIL COUNT = 19 -K = 24e3e14c0bb85f194a46464eeb18447f9ea286cfd9d19dfb -C = 2fe763cc4729de6cd39110556310390212ea1946dafbb78d -P = 220c4ad85a9183aca0 +K = 83145a7819351fe9d7a31562f933f9809724b30b68799a72 +C = e931b4807615bc8a635cfce40833e300 +P = 852025f64132664b COUNT = 20 -K = 846dbfe355532b1583b023d6f694dcfe9d25948fe5c7ad05 -C = eb5f8a0bbf1c27c48975af4c386ed9813227995944363184 -P = 1cf5d42ed1b58b9d67 +K = 4652c89229d2cbf684282eed1959f946f2a94d6c150b6e8a +C = ef686e7d3f602f69d84f700cdb4f2d92 +P = f509cced8843737f COUNT = 21 -K = 2ac2cf2f7393ee2b9f1bf5e6d44be11b2b01a53813915f39 -C = 3dcf9b27e98a770ea6cbd8f5d136b4778a9d01f7dd3bcc02 -P = 4c2a920d5c78dab8cb +K = f801f623591e789caa236a6c202fca09d77121013f82730b +C = 923560097b57e38b1852a75bcbb0c08a +FAIL COUNT = 22 -K = 0831c411807d15e2d7282648943490b083dab175a8af35df -C = ef22a26e633900ba6b9dbd23c7d8a411dcf8bfb17d44740b -P = 16a09f6b3df5b1d371 +K = 2ec5cb5a8744bc01d1f89067b82be8ec4a37371f6cc4648c +C = c926e5d6fe051942d43cd067341c1744 +P = bda4730fc373f3e8 COUNT = 23 -K = c91ba7b561368b36ad73b7dd476f3fd5978ecf8797df029f -C = ee2500d03d1db619e19063c87e9231101a895a325d031fcd -P = aa758258ca164dc890 +K = e621eb8197bd95ca9a15ae163c8e11326cb28654b587ffc3 +C = cfcc5009c2c1d4f944dbd711fc1c4647 +P = 56d619dee2890f62 COUNT = 24 -K = 0117d0fc99a3c092de3facc09d2d43331580eb662d43cf24 -C = 859e8f06d6eef7808b942cd35a8f583be5799b7ae8a57502 -FAIL +K = 2cbb0227188552b49fb424bb3b1f4c2438d619b51377f0a3 +C = 845da3c7087c00ef334b4eb04fdbb6b5 +P = de771dca18b22365 COUNT = 25 -K = b519cc01b6185ab04d0e04f15da329888f3c5c1cba2d0c3c -C = 5d3d6153a08e3fc03a0515f38e01d12549bc5f59a983b60f -P = 2ccecc94e40bfbefd7 +K = cf0b97590881e7472d813fb6b07fd1693b1b624d5a890aa6 +C = 6e35c1bd3195ae36d86ab7852b945830 +P = 94f81e3719289cb3 COUNT = 26 -K = df17d6b77501cdf8679796432070cc6d2115b4a9f510bf3e -C = 0d0b68f99717edab66ebfba2afa65f32bf198fd843491b6e -FAIL +K = 7fdef0014565c31874df2d89da493fcddcd87eda105337c0 +C = 2ce3fb02e16d88294f25f8649a4bdc83 +P = aae6e479da7bc99e COUNT = 27 -K = a4e2750c886d52c66b0f7fcd3aa2c3179af9e109e21a2e5e -C = 5b626ab9712b8137b5a14d03dde5e121a06d058c88fbd8a6 -P = 5b37b915fa02c89271 +K = fb0451de8e1a4abe6b0f56e3ce1d17dbb1e37f2b030f351a +C = e51425fe0365a071667f507391fce8ef +P = cdb81a5cb60e6550 COUNT = 28 -K = 7ab0564dd3634fbde14fa4448741fb210804b6ec2168e546 -C = b25cff743921c5fb491f23079bf44406b782ea0630252ca5 -P = b87b33d3ff133a2b3f +K = eb170a29165b4c71f1aaa2ae93e71029393e93c4967b76d1 +C = 26cc92fdd48f85c4194309cf51208303 +P = 448d2cc4fc4c9ed8 COUNT = 29 -K = 698548e29f99775840ba4df9509c776c5d3fb5c9e3b3c5e9 -C = b948de37bca9bc9bb5d3c24bc5932809a1a1f54c9e4d0a2d -P = da5e1dc078c7a08eb7 +K = 56dd29c62754bf2e6a81e404cfdf9d201a21586402b4f4f0 +C = d4e46888082192ed476752108a80ef70 +FAIL COUNT = 30 -K = 1e576c2a44a3370f948fcb53ef4cfadb712b565700e1bfdd -C = 0cd89c53428d6ff78f8036a8d4c8e65e933bb4fae4d9de1f -FAIL +K = ae8e81ef416efbce0232f6cb3964018dd57a0a85629c0cf1 +C = 8ac4e889577f6b9d55a0799d1e1e86ea +P = c95b5433115c6cbd COUNT = 31 -K = d61e2b1ad35aae824912c63126e2268e9cbc1dbd2d6e646c -C = 383b6175314287d766d60037464c18b8dcd851280cea97b8 -P = 7918ad339811d6a92b +K = 222abedeb17ad85f500938ffbd02b7f194ab78c009b95689 +C = 3bfd9484a0076165f925449493d5d6bb +P = 014735dbfdae05fa COUNT = 32 -K = 13b70d7ec0432a77be091058d68f9851a66c4744ce396583 -C = 3177b055c209e30055e67e70a5236471cda2f46e2175459b -P = 337140f94117eabb81 +K = 13e1e15413bb92cc92245ba903806abd0c8108aa288a8a31 +C = 88016f76915f0d3652fb74418060e857 +P = 75c799fb85ea27eb COUNT = 33 -K = 1fee269af767884d2b12c6f0c58d8fd6bbb323c9e350621d -C = 401dcd14b2ab8673ea43b041bea1413eb6b2aa1fc06d2146 -P = fa67070c661392b0b4 +K = 880d25152344fafb887c0a1b40ead219ec0f35057443ae38 +C = 9f0bab35fb17efd55384279c9bc511db +FAIL COUNT = 34 -K = fae6471630364822a30948563f905e35a8c89ac5a893c955 -C = dc745e26a2e86569da4010c6a7cf3f58d9af98a0c386380c -P = 62ec15104c7c638e67 +K = de69182d3822fd7a9440948fe3831833d3ebe0ee69bd7cd8 +C = 21bfd06db3c56a231a3e43bdc426fca1 +P = d4863862d72b09f0 COUNT = 35 -K = 0fdd07a6a3fa568a29e5b623507953e3014a5a510dd22e64 -C = efb18aa6de57ac5e538e7aeda4ab231858c4e25e8b0d741a -P = a6c7c6ee9a62031837 +K = b2033f953836c0ac24c1bb6da37bf94aa7dd3ef3747d29d5 +C = c950c0dcfa9f561bd239433b8546420f +P = ca3fd45af06ae950 COUNT = 36 -K = 140d9268e8a3ae403ffd444429e9b043c3644552fba7ff5d -C = 5c119d44da77df87c82ffa2d13e771c82db0f05bc85c0a26 -P = 76094101f4509bd8c4 +K = 10b40b7a7c430e3ffed5387b20d83f7b1545666bf8233610 +C = c625f5d6a4db6bf439fb8e93ca12f5d9 +P = bdd804f824f649ba COUNT = 37 -K = b6ae6d2135d54b2878a2550248ac9ec62a308a5bdd1703fe -C = 67b02c2253d5946bc2a2a47ab920b130eb16439fd96ed8ce +K = 142b28c9866f4b63c982f40d877bbeb4744ead60cd3d8b7b +C = 57d7263823d53bac7ec7d04079259b30 FAIL COUNT = 38 -K = f1362039aa7a79ef554bc38369adf07db8eddef11a3d9c4b -C = e0fe7415515657211cc01ffce473d4d4ae31c9aef525548e -P = 380065753f2a150adb +K = 03fa655d3a9042503eae8080485804d80134cda28ff4571e +C = 8a628daaaeb3eb3e81e0dee09c469719 +P = cb27018e0bbef262 COUNT = 39 -K = 2bf95ef2869ad95bdb7487b760445596fcc23abd654c0107 -C = d11f177605250320376b0c4c72fe7ff289ac233197cf94e1 -P = 35fc1fd3799a17df51 +K = d17608854588af02dacf260a33a85c78898957556cdad0e0 +C = 3370ce3bf0765380619d56ba6387029b +P = 88b9a9569e81399c COUNT = 40 -K = 0a1e6a23ace24942008ae58c4c2b1942744e35b7d0371ac5 -C = 26957818d6d89c93c5dbea1521bebec4c95e727712e27610 -P = 06fa671f49dd8aae06 +K = 21a20619f0d6df6254f5197376dea9a52328ee00938b0d8c +C = 905826f54a6bab55b0aae1ad0b5a150d +FAIL COUNT = 41 -K = 765968a2361584aab9e6a28c5faf138fa93d141e150a12fc -C = 2a350cd0766c3cbb2046f2996887a73a36553fcb28514c69 -P = ed6bd83c8c4d4488a7 +K = 1f1c3ecaa6664b4c64078a24bba0ca4bf57ba48c591cb5e3 +C = d356bc79010da9d4fa3a56dea3712037 +P = 0cfb33360eb15fb9 COUNT = 42 -K = 36d0236edaa63f8ff861ebd88fe010438eeb32b185425237 -C = c3b7c62a9f3181aa58e4a0fc93be54ab24baa4a916952151 -P = b7afb7119ea2164076 +K = 57a3beac21eb3a18c55e978c7729823f2c8dac300d1e0dc4 +C = 2ab2ffd4166e88a473c8683a09de6d80 +P = a1c9c7b5e4a90c68 COUNT = 43 -K = 3fcd8ca619037e3cdc82ce08f37bf8b567d6fdabdba3c52b -C = 87fa982eeabe8d2d0fe3f2af66cd3a0609d3b42f3a9b7366 -FAIL +K = 6b8f9e8e80872bfe50d6ef9e7031b7ad249b695842467e0b +C = d20bd1c04de6d4e9f1206902622080bd +P = fe4e15f5f5192f7b COUNT = 44 -K = 8ac6d12a5f7c08ec77a44a861a479de7e5625faebfab11d9 -C = 51ae5b2fe3b70b943437a134ac4b61dd145c5cd5a2a2381e -P = 335611d4cf7b54c198 +K = ee07351d32794a0c631d65fb8f0fe3e0ba9f0d1369427c5c +C = a1a4bfd6060348ecc1f431375e525bb0 +P = 839cd00204c55b45 COUNT = 45 -K = 2efda4f6e3b7dcf9ac8aa22770b642dbbc74bd05e4af6abc -C = be5017538f9302054e4ff272e929fd99a77a24949e6fcdf7 -P = 3c032d616a69a455ef +K = de15c153805b4262f7b901dd6f6e0dc1d2b23f1a75508d43 +C = 33005d37fc9e97bc66beb36768199f09 +FAIL COUNT = 46 -K = 0afbb0a2ccbd133c0862756752f336fb2afc75fd7c30bb01 -C = 4d60ebcb8ce8d9d6fbb3eda636846e98d3c8436bab3bf6d5 -FAIL +K = ce2432414673795e87ddd4336d9142ec0978c658841db184 +C = ad7bac8b683a44b9c4e5d6b89a4206c6 +P = 3816acb19ddd560b COUNT = 47 -K = 4a58ce4686229a034b18049d0527e11f8f658a57a9ad56f1 -C = 36a68a387ccd71d0053a378ddaac4c9d4dd582389a5cbe30 -P = 8bd7d191c1152c7ac9 +K = 1f77fb1cbe652dacf5055d8f935714410f2dbbc7782dacbe +C = dff249ec97b0733e58095600627a12f0 +P = 52767b2377b26d3e COUNT = 48 -K = 2a1b7cb79db8cfa57df6d6b3a34c8376bc84638550c79e25 -C = 03079638ac09be2048a3c2f3c323bab29b57ed8d9005edb6 -P = 49eaa6c681032bd747 +K = cb829262be05d41217cad09b0abbd181a84adc84aa55b240 +C = d2102108d7511afe9a3f67cd2736bb73 +P = 38b53d35e690c031 COUNT = 49 -K = 71aa1f80dc6019407f7eb05bb3f5c25d134a53d75752b815 -C = 257252b0b5b7617235f286c9b6781865546edc1344b12adc -P = 3813351b9e994f4a5b +K = 113cf61cec24b35a29df37e72ff6fd45c75b53613504983d +C = fab1d26f985b3729f8f0f9b14aeadcdd +P = 47fd17e1c578ee45 COUNT = 50 -K = acb48d98f949458582e99cd8b7ab31c1ca876315ba7c78b7 -C = 077662c8fd2719215e8b93ed5a3e616b85697243c07f4264 -P = ef133ce7a0bcf28e2f +K = 84edc6f9010baefa01eb55ebc4ea0cccd482ffeeb816e894 +C = 94c6f696acbb77b7ddb6a52bc596b478 +FAIL COUNT = 51 -K = 732747fed1cf6036058f26b8efa96b74c227eeb30da1e9a7 -C = 5a15182593e300dd8a744903c9ce013a5406e26c3a5f0a29 -FAIL +K = 4c206de92a05169937f1d6b33b096fd31d2cbe547e2ff775 +C = f25ffcb570baf585752a651827e4fdef +P = 54dff8cad25e5f86 COUNT = 52 -K = 8e418b2a8e0f9ff51c5ab26c3b52a6c0ff93f1c165ca0ff5 -C = 37a309dae35d3eafc31339e3fd686522424cf0e2f1e79d35 -P = 5b6cbc2828fe1900bd +K = 44870ce430f07d0fe8c2a06d9b6460818348d3c7cb0ba74d +C = 0499b4650b222f6b708aa25836e917ed +P = ebdb4535def68c1b COUNT = 53 -K = bedaa6aec8d3b427e23bdff5a4b56ddaca9f05b5c5631094 -C = 4c7a8011f2e2c74abd584178c6469d6895a8b427689d2d8d -P = 123b267fa1419edbc7 +K = 4132ced20b77de8f2d33c253399c5c896c0ec8d25d235d5e +C = 282d65ab66a17d03325b8c6d2d1bdb22 +P = a7158394830004e1 COUNT = 54 -K = 61a680ea158e07c092efb03a8728046944d8074370fe689c -C = 82864afa25df3d2519c5d161d5509fe1010a1074d9037e47 -P = a84d4cf654c63546be +K = 2586d815bf9da4c2e6610035b82685787122629c00e377e2 +C = 95122ef5e766d73052b50b8c26633858 +P = 9d84e28b6a313c60 COUNT = 55 -K = 4c223cdf6a11a95abc8aab97a048dd3703d0d01f4739e121 -C = c908eba18a05af3755eae9ac8a361ac276d0f8e272fa52fa -P = 7c8cad9e9fbbb4b5f8 +K = aa1e1fcd221c247989801e942e62706103fb2c05798e384d +C = 853d94e2f90c7919a8807c476e11a45c +P = dfee3bd8cb8268b2 COUNT = 56 -K = d1a2bf1ca416eb1629eb916f1ff6d6c4be1fdcebe9875de9 -C = 0fdc6d5e17aa864d79db926c3cb3a3b9a2c4ee26ae8010f6 -P = b123580cc88206caeb +K = 2a65e8783b91321da23ee1b6303ac60bd1b95fb4ec12cd10 +C = 66f3d6acfcf2394be8e13bcb65bc8e86 +P = b7f503c308b3a7ec COUNT = 57 -K = b06dc203eed4f98ae9e85058ef944b55baaedb7f804e126f -C = 7623ff1235523d6ee0bfa6dea63f289b65960560d84c5714 -P = 1f5bea973eb59f1d97 +K = 9fe3e27f9079dc71ad5361a54d5de3bf21777ffbb4b7a161 +C = 5caca4a9dd88c850b64b690d65f5488a +P = e890fcb6cb8b1718 COUNT = 58 -K = a55b1f9c449da8bfa2be74798f94135420b5178ffa2a7afe -C = 6054dacecb904c0e66ca299c926ad168fa040620278e98ad -FAIL +K = af4ffcf94f8f95eee04dcb88d1a129e7d6e7946f5d0ab983 +C = aa707e74d98e0a75da49ae7f1aecdbc9 +P = 5047c1ee3f6614ac COUNT = 59 -K = 5048c52fb9fac4d84fc79e3630f3c3e8acd82ad3cb2d2ff6 -C = 2d7f47e1bc7e6e27753e4f2c86d7542923b47548bc26dc8e -P = ad1f3ff1d700bf80eb +K = 77c7ce8032e4e0a614cbb378022cc78f50e3ea26e6e79371 +C = 1ca13059f133f3e74687bdfa64c70fec +FAIL COUNT = 60 -K = ff08676bff6f4dfec4ceacfa51bdd889fd78d9802075278e -C = 28e0e1958fd9d8f8b5643196f6d147bbabf25df5c36e093b -P = 441f4f2950530551f4 +K = d17234d7ae12399c8f3bed61ba3a19f5b4348d53573d1098 +C = 7079c0b547b95089f0a370dd3e8f70cc +P = 873d5e2c0e9f788c COUNT = 61 -K = 476b6f5398501f1111845631cef32ef0b2926a6371cf1d60 -C = 8efc40fa2a1a2c4720f1428eb0ba2c33395b1412cd23a431 -P = 02a76d461a0bc0b727 +K = af3fb5f052c942503dd352df153984c28b8cd9362a5c6ed8 +C = 29c9adb30b07ba92d88d1bc24c6c5f02 +P = 6b36c94e0f636639 COUNT = 62 -K = 5be38a34d4cca0846f09d2b1104c99889b87edf8a35e11c3 -C = d35ec43d7fa6286731ee0ac927be3fb114c9657b405450ad -P = f091e065151cff3fab +K = 8877d917120dfb4435ea8d2cafa9796bc3a1c97ee6df37f9 +C = 463a326cdf6bfbfe49175bfae6df27f7 +P = bee273a29393df57 COUNT = 63 -K = 1364eec062a80ae11f9ae2be2c888a13afb1a21c9db6a123 -C = 8dab7877c6c9e322f0442269d71b3ce36d6cf039ab829b36 +K = 1f0a861e7c41a5c7ac511961cbac97d40cb54c7659b8b5a3 +C = e353d8192a742bb42d6a3160ed8c5ded FAIL COUNT = 64 -K = dd7e25b5a3a09c28209a041bd4e18030513f288ee04f0f6d -C = f81ef32fcaf01e9bfc4698cf48178c710e99390f8e6d47fc -P = c1bf8bfa9692a173b1 +K = 74a709bcd4067b47aba8427bbc311a6546ae6bfded7d4cbc +C = f989697fc211b67b40198a36fa95e220 +P = ce080e6cd024ee74 COUNT = 65 -K = d2d95a2a601fba54528faf01f1e2fced0c9e95818548f696 -C = 4c44b36be2efd005baf07004dadd35de6179bb315149bf33 -P = 47bc0b7660d3b366aa +K = a351badf7833b7f0f71d34eb78fec5b41bd34da1fa670bcb +C = 34043741af5abba4cda241469a8bfa87 +P = c3088c8cc45167be COUNT = 66 -K = 8589f0a2c2f26818b601a09107fced24cbea0cb817663a27 -C = 74d8b2c3bcf913df2df49e20257e319db6d061e494570076 -P = 1d547720e337ec17e0 +K = 1cf24836b6a6236af32f0efb257496793884bd291592ae14 +C = 11663b80276202fcfa17a292c0b4c7ce +P = 22c6bd0495318117 COUNT = 67 -K = cbfede693aea7620272a61c95fe3240f004097a838b397f4 -C = d40bf5b56b6ad07d7a5e80e548b6251c89f0beef3ecb0900 +K = a55c78e7a0c669ec1d14348839458bca4ae06dce2d2f3c25 +C = b3810940a2aa3f9513305316306cceb5 FAIL COUNT = 68 -K = d21d1733a8f9e4e8e4c988901d48f64ab8d101f4181e5e36 -C = 361a0ae5068ab8d9e3bb69e71d77e96c873eff772593ef19 -P = ad3a4484e821fa65d7 +K = b3f470f2b52e7738703657ae75cce2cf572663a17992dd92 +C = f7b06a2c8a4c63b97519d96a24a09777 +P = 136f01108ecebba5 COUNT = 69 -K = b26245c0e2109c2cf1790ce6385739a1db4094595dfb5bd5 -C = 7f92712c0be8acc2e2fee00ec279af2ecc632d08ea0650d9 -P = 5e08217b6a0f5205bf +K = e7f2127dc8139c5cb9bf9a547eadbe23fcee80bff27785f5 +C = fc90bc1f7a78377d634e69bd495d57c4 +P = b6431ec21a00fc26 COUNT = 70 -K = 99386e65cc801e00f2bd40acf856ef1de0729699ea6e448e -C = 2d0c68429e57473cb8424e76484e2e0d61b4454ec367dad7 -P = 27c17ef36553d44dd2 +K = 21dabf73f2c985e5348645d04b19565145b97629644aea2b +C = a78962c7c302d27cffb095b6adc95b79 +P = 71784e7c0dbbc37a COUNT = 71 -K = e62eace17ee70306aa0f2143e64a8b903f6098f95ac54c72 -C = c04437bd7e37abae80ad9c93713fb3d61198f2f27e9e6525 -P = 6d075a3b8df907e7e2 +K = 50b7c684d4795f8a1a69ed54abb3e9616115bac5e6ddf55d +C = 02db4ef2d43c0d7f26edf7f2d1a0d09a +P = d37b804d78d38b97 COUNT = 72 -K = 4f50e8e1d51b9a7f368ea6df0f7d19a2f3ad753541163186 -C = 617226695b014a60054ae1838cbb5f5eb03872c7868eeb0d -FAIL +K = 99bb72f708ade872cf592bc30eacc03f6af1a7a6e7761d11 +C = 68dfb9e7ba04416cc52bd4608eb34e9d +P = 505134e0d552e925 COUNT = 73 -K = a52d3e5d3185310a50b7bbf8da8da4f694818309bcf8796b -C = 0a30bec0fd06840340ce517fc7e3c01977c19b0660254dc5 -P = a70503b899d223e2b1 +K = 96a0229653e69f711c338de5726b9bbf285ba624d7e7edb2 +C = 4e2f0ff87a84339381d9df4b46bc303a +FAIL COUNT = 74 -K = 24adab182f4044b87e21fdfaabfb61a698d0a7a237cba942 -C = 6043d6884ff3496c5b91122b6379fb7a8083d868b0bcfce4 -P = 0e89438e3ab1608674 +K = 4b49683dada11448d709931e2d02df41a3f2c4b2e4320836 +C = ae35faa006fb067c80708e3f41d3f3f6 +P = 2bcfcf5ae0443ba4 COUNT = 75 -K = 227672325fa6c114f9c9bf99f935dc50c3d7818373513658 -C = 1ea1c93a30d7f3f156594c356e043b9b3bd1d2cd9e6475a1 -P = 21ee4ff6347ce1566b +K = 52cb9b2ca52bb7faadffb861ad8bc4655427ef740c7eb42b +C = 66917416377167b0fd6e85dba8294f4e +P = a8060f785d0ef6ea COUNT = 76 -K = adb4fae8fba8c83f6088c21e25de5b41c395fdfc9734e0a9 -C = df6e124f59b6dfa5da76fdb2023d639dd70f8ed22a239255 -P = 1b16e733751a50633e +K = 5bb08de28edbfeaaab2e7c8bd17f65b263f8b8232a36b164 +C = 08679b6f8fe06a64f5d1ede8694d65c0 +P = 33f9340c62992ce9 COUNT = 77 -K = d747b3fd62e5aa10f599988b2574545efd0bb07824d5ae70 -C = b1105bec1a54e82ac7959bb44696c543b8e8f219c9498b5d +K = 28f456b802fa28fa38722a5dc9391e3d82fe86b750b995e5 +C = 8e010c830ee171ecea1fb58f5cbef9fb FAIL COUNT = 78 -K = 9e205c056e26ddb934d345355fc95414d2783e55aebb67c3 -C = 82ac1d39be289736981abcb94b36b9ca0cdab715b6bc53c2 -P = 72a07f966205e502ec +K = 3d28f8075d6176b12f284d9384578f67331923ff55887eea +C = 0eb66747617de158b6a16ae0cb285b46 +P = 8c536070363b04fc COUNT = 79 -K = 7b6a8a85feb08d69c41e5d8c402c2c350d479fec26ecd596 -C = 6769effbfca242f7b65945863b1d8ca8cf0419f906447aa8 -P = c3537e64955bbc3df2 +K = 6c31d27285f081d7b547bd85533edfd171b33275ef1495bd +C = 610b9fbc7d6daaf51ad1659edb05875a +P = cb46854f4724ac69 COUNT = 80 -K = 58ecf0b64e09a9b5862781c714b1bda758a66021e78c7b7f -C = b5fa537109c3230b50e4791ae71a6d280db44aec6828daef -P = d9e60df08b109d3de2 +K = 4e8a8afb0209b91da8331c5c093bf8ee81a5d39e0de49bdf +C = 24c60431dc29e251050cfd86cc318364 +P = d4b61fe4285dd165 COUNT = 81 -K = 5b83e078ffb89cba26d33aa501e5855300d3008e284d4534 -C = c5c497e522904dadaf0da498f8d2c0c7603ef2608dff129e -FAIL +K = 970202375766b24fce7d290e8422ccd2d47a4847a5947318 +C = b103ade51bc58be6d58c0f1d8cab4dac +P = de386a10ac961b09 COUNT = 82 -K = df17c825b8986edab061c2e6a2547cd5bf9c94e00bb43a3a -C = 4c2a6652f06c7cb245c41124a555aa81ade8cbdb56506434 -P = e3eff83848e027db5b +K = cd5261d37b8a3a82bee53a29cea4e10a1e2c9fec77f837c4 +C = 72dc2e5ee6418859744868229a9a98bf +P = cdbc3cc04c383b9c COUNT = 83 -K = b1fa77ea7b79c28171603180337fb1b07657df8b655c0bf8 -C = e9914c9e53a368a07fb87f372a9d8f4127acf7afb673a0cd -P = cc7c365eb11df33d1a +K = e6925b4fb9dd25875a8b714c62afd5fda46473a5c870e0e5 +C = e0d53e544844db5a327ad8bf6ef8a052 +P = d8a7aec2abe0b257 COUNT = 84 -K = 7d428cae70b90d267da1916cb822625826ad33bab41aaedd -C = 43ed4693e069acedda5a436ff2461fbd7907ca5d4d821ee8 -P = ea5eea58305cd38865 +K = edf6ec80c7a6a2935cfd189f593b8114e6bb928387e48f8e +C = 55e40251bb181dd73509d0ab8b17c84a +FAIL COUNT = 85 -K = 42e8dfd9b20b946c0d446722f2ecb09e4906709d0f793f93 -C = 6996f3224b69f5246ba423308f300badbc4bcf6b31f37411 -P = 4ddd8f6e223e07758f +K = ef529835871799de767201fabf44acc7ba29662e97b9ca13 +C = 4df5704b41f07d90f7723cba4ad59b5c +P = 2a8fb7296f6897f9 COUNT = 86 -K = 558b638256d5d0c24a4d30d662b386bee2ace1a647acf17f -C = 73f421ac05376a0790e58ac96835f192fa31a9c361a6e84b -P = 2a6ebb5ce6839dcac2 +K = 3fb48620e2b307e20f8e9781666a92214136816548d7926d +C = a4bd71e77b261e07d07f354d03343d71 +P = a731c6cd9725349c COUNT = 87 -K = 3b644342883918f3e96c01c27df955df56af513991591064 -C = ae2bfd173a4583cf4b1b3632a083f6bb8a2f9b0f155dc596 -FAIL +K = 293d1019f9f01c3cf6f27dcf09536afce6ff6c393ff22a68 +C = be0acabdf5061a3c3c12cc281c1acfe0 +P = bd93c320048b33e6 COUNT = 88 -K = 98cf97f9de35daa6d878429b1bab4d8f4b8adbaf0d9abd54 -C = e4ac1b3c101fa493d5dd4870ab1245ba66fd7b7d60cc0f55 -P = 40e0e5d12a9c82be06 +K = df2bc8eba668fb4c9d1324b0c09c5d28294684353c185e41 +C = 3d63c877e5bacfa5d64c6924c8a8c014 +FAIL COUNT = 89 -K = 622b1b8174907a05994a9c2598c9be2e2e4830e5f312015b -C = a92d8b201622184b3c0c27c171607ce1816ba9815e4112bb -P = 826952e3ec02825a7b +K = 45039de80daab49ea4ca718fcb0228a6f4ced4d4d5042172 +C = f3ddd321fc38933d41b3a40f1b7849ac +P = 1bc0109a2569a3d6 COUNT = 90 -K = df25c3a6de388c0e07c57e993cf0055d86195708d0f012d4 -C = 06ca875228162887113a3dbdedd966f6d8b611dbe082fdd0 -P = 5c974181339102607b +K = 8a034ed75b14dff0cbc6731f6e8fb3c61e91901c78a290ba +C = 736063ce4584d6dc8a1c56e355df80f8 +P = effd21e459fbda8f COUNT = 91 -K = 958c7cb26fc261a5be90b8c7b95f2f17d8b975ec9d470d8d -C = a0c982ae88f09a2e739c84a8c79014af359ea9bfef3dbfcc +K = 28609d02ffc5d275c633cc2c69ad745d607b88acf247d397 +C = d4550612f230a838fed9020e76025230 FAIL COUNT = 92 -K = d1f19974d729b26876fa40060b77dfb152584c0e1d90f483 -C = d2cadf8d3997851f9a30d561cbe1c300bb1dcf6ec85a5c5a -P = 2054543716d5d7a5fb +K = dcd86b0dc8f07ce360e51136dd7ef03d1c408a454fdc04cf +C = 9603a55ca2d2c7a931eed8f4af022bac +P = ce455cc4dea9e71b COUNT = 93 -K = 9b95e56a9a389f9b39c2cef96bec1f8edab2a0a7b0c66f4f -C = 1af67b151b13c0ade5ddebcc38ab248f66b9c3648c3ec6ca -P = 5667db81dd95809d20 +K = 84c3ecc5fb0ab6e0d6d3fae6ac526c18777a9748110ded7c +C = 0f774970f204bd0f591967abc4c82e1e +P = e48373f1bbc8e25d COUNT = 94 -K = 0ecc88dcb7f9e2c284ca9bbcbf54d5cc2fbb6f95d8e812bc -C = 7b070f055521f47b7f5df80788fb4cb303fb3c8a10c2242b -P = 1e1e7d707951bf1af1 +K = d4e046ba74fa37aa1126973d85061532674838f615965934 +C = 671101e07fa862668b05df81bfefbc75 +P = f9f4aae464284bab COUNT = 95 -K = 675d1e7463444d2bc0c0ee3cb8f83cab9510f9e3e990213f -C = a987af474ccac4888cf743bc7639276ad06d6f1a13e2f088 -FAIL +K = 6e1ee96d4e4cac048169eb8e30f4c34fbb2a002e6efddfae +C = a7010928a465689c0ba9e7cde7c56c19 +P = 5cae19de40880c7c COUNT = 96 -K = 6a4c0d8fb1a07a69cb15d7deae514a95d92cc41cf820d19a -C = 278d59daa4f6b63db15fa7af680e1941f0b7ffff19a39257 -P = 1eefe6d4acefa0efa5 +K = 4386b82b773b6c850fafb53357cc6cd1524550520f333e85 +C = a3af3f45b7b5653cfe28bfefaa19da9a +P = 44944c22649f1dc9 COUNT = 97 -K = a32ab5967315e93bde87d398eef1bbd9756c35c7d623a899 -C = e41a07d76537dd38520fd8eeca17aa25276aeb7cc459d91e -P = bc20a13600cedfb498 +K = ce1252b7e48da6ab406316fbb5340de3b90bf69360267ec9 +C = 21e118189d772f646212e2536f9080e1 +P = 7392ba456f941538 COUNT = 98 -K = c5841a924d1b4817399753ab6b55f2587dc50fb241a246ca -C = 58063a062e9410493752b24dd60035d2f810d4f6a591b0e1 -P = aa18d8fac2a7325d84 +K = dbfc4f54e0bdcb3c8c9962e7be907a8521fff58d02744976 +C = 869258aab49aa1a49bc9f704cfe71b32 +P = 34ba3f27e1b56c9a COUNT = 99 -K = 2a6ac2bdf0a8c35b5dc74371e015bb6be55ebdd19b7bc1ea -C = a3485778cb22e54c7810b4af05ea8312c23872c4a0cd6723 -P = f778a0b2a885f382f7 +K = 82c016a0a91c8a2386311fbb86a07bcc647a90e3eb176f8d +C = 75b611a76d35394802ba0d0017590f07 +FAIL -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = 3cbbf72f4eb43364acb258c895410de54202be65ece3d77b -C = a4779f0f3f67085ca01d35e42e496e29 -P = fe3078d3 +K = 31a31ea4148d383bb9b7812d0f8380fd2610e4246106352b +C = db0e8d32a2232014fc5f98a7c2d104ca432ebfe59c2d5e51 +P = 2b22dfb6889d369623 COUNT = 1 -K = bdf1842a1d4390069cea068d596662edb22746d42a051260 -C = 501d92608b12577fd545e553f1d28206 -P = fe496554 +K = 6cb2774032e5325f2ce9883375374184d42a69d818d233a8 +C = 0fc8684e829ff09f8345e5f27b562f3ceda5b05659730b1f +P = 4b65db45e9020a494c COUNT = 2 -K = 9cd5cde4d088ac5b84df481f23118a1527427178e75e34f5 -C = ac7347e817c81ef2a80f2b88161d2509 -P = 9af16884 +K = db57c46628d9457bc5e74767e8efdf557c03057024e108dd +C = 82ff7b612e2bdafccae2a6df4afb1b50a6c18ffa6cc85ccb +P = b8224dbc861f90c5d8 COUNT = 3 -K = 0bc3d260f2b665888704dd0262602b51208e66157acf85de -C = 5c3c65fe386009662189f7aee697a5bb -P = 7464edde +K = 595118c503269dfd11bd00c1eb8678f3e7dac6760432783c +C = 24893d68daeed50581f53dd53a4d72042677af3b4e7d8fe8 +FAIL COUNT = 4 -K = 63ec483a243204f8095e6ee7ca449c4a191651b799843f6f -C = 676baa06278d7bc01930e7454b3f96c1 -FAIL +K = 1f0c19310ff108bea3fec24fed17eaefa093ceb42e7ec1a1 +C = 330f2b2364c289ebdcb6d93823b244951fd764b94f53bf1d +P = 3fd78a50a3b12a4cb3 COUNT = 5 -K = 19ba6d1e9084431e4c2681f39373c301b06e931c9034019f -C = 69408ac22e5fc07be926f5c4cf20ee5f -P = c3b5ace7 +K = 2cbc04d57fbe92c3b4feaeebc4a9e339b38dd91f51a79cbd +C = d344125c4bacbf9ef6c8771de38391cb731223e16891d284 +FAIL COUNT = 6 -K = 411775f3c6c87065c4fe0887d68ccfef9384783f7f904886 -C = 29233563d5800d36e334836f4ab3630c -P = 4591ed74 +K = 01b2e330a3b04a259450abfa53fbad40feeb20013300cc13 +C = d7588e27ea6b5a7b6e930f87f55efe7c79423fffd0534e95 +P = 93525e4ba191209eda COUNT = 7 -K = 8aa651037a5a1786bde2d0d43d22e3b619483d0eaa5511a0 -C = 6d9bc39d065879d3279d8963f0240ae9 -P = fbfce8a8 +K = 88f91d1ccbc5e22cd4a27eb8b1e46f9d3b02d899eda6ffad +C = ef577fbbdc16ac8825f49cb9335e47569219e17fcc1dda3e +P = 5e025f84fb3973e3c7 COUNT = 8 -K = 93b51807c84f71336923a2284971e0e91374ffb04cf6090e -C = 18c8160d379573330235f409f15a0276 -P = 0ff9858c +K = edb810293ce6d09d532871a2a0eb9794f39de0c1f2d98c06 +C = 8d736cc77a7a0ae4c977a580f173853e2029a04cf85dc6d4 +P = e6c2569ce4f75c1306 COUNT = 9 -K = 3f53ffc8b87eced257b1f467a0eb6991bb06a3b8aa4eb76a -C = 8d521643e27039c04cf7cb0aa4c06726 -FAIL +K = 0cff84f757b48665be765a2709b2f0fe8e29b13e1d1aca01 +C = c8e60ef3bb5b9cefad413a64a54b467844c1bf5a0b957e7b +P = 7e16f2c69de9118ebb COUNT = 10 -K = 36600ff90656070696f1efc8f5c88cd0042233d60fc0da44 -C = 2036d744fb86cda6086a0b5e478b102c -P = 4547ce14 +K = 53006433dacaa43f536ef510cf04fad700db570818aadede +C = 3ab78d22b951c32f12dcc1059ea0236bd62e99e585c79c1e +FAIL COUNT = 11 -K = 29dc5a5f3d0f3e1a01242f5583f6c03beab6634640560d9e -C = f35f43dcf043911328ac31c422931807 -P = a83b13ab +K = 658cf248480ae2a625f204a295792a8f827bd8145dcf5f93 +C = 7c5d4374f17d61472f02d90be69e3e55f1da15de096fb1b1 +P = b1ce0753aa17925286 COUNT = 12 -K = 2742e9134eb67a605b5d540f0131a0753c7e10a26f4e5381 -C = ac103cfc3cfe29b93e21561a087fa434 -P = 852be8d7 +K = 535e1e00da22840cc496df70b2b6592643d2333be98e3723 +C = 661b71fb63daf23f80ce8d10972a3226b4ad92c2c056f46d +P = 6cf455d8436b48fd3e COUNT = 13 -K = d5bf1a7e1c7e0f5c549b357ec56d484790542e8a77bac427 -C = dd602e7ec6ee44157c3b414c614a83df -P = c838a9c5 +K = 9cf9512ac452e116a5f1c5e6c43e4c6bc62a932e07129108 +C = 6ed12847d7c17bbd7e7a16d7b65dc5725b5e4643c30d5e07 +P = 2f498d0ebb5a65a915 COUNT = 14 -K = 3437510423bbb3b59fcf5c1b2b2b18a7aae244a487b2e7e5 -C = e3d337ee874dc0b7f8c87deb61bb07b8 -FAIL +K = de8f2b6c4d242941f9ebd555de22d12cf7d1ecc23d08f3cf +C = d46d323812f6287cd686285196df73b699d5fd7ae1583b2f +P = fbbb83c73fc8b4dcb2 COUNT = 15 -K = e2f9f2ebc78e3bb9ee91a51ee598afeba7454fa15993c14e -C = ca655669b8d9668c2117ee1b11c4387e -P = 1e5d61c4 +K = 093a68dbe9de3d36285e034a047b091ed0d7006a0a5f514b +C = 1f67b70e858746e3c0a561fd973111aaad082cf1a982eb7c +P = 8862850114657a1bff COUNT = 16 -K = 615804ab9ce3eaf8313c776d7fd004508532561060a1c812 -C = 9e7a4481e223eeafb5fff2e0dde32229 -FAIL +K = cc7b176590c601f8b5bc597ac2f57f78b1bf8ae638f9aa51 +C = b15928c393fb15e4ab7ca29b489ebb4d5e32fc5b300d220d +P = d172e263a56b50fb4c COUNT = 17 -K = 9d2de389b79df3b78abbaf54ec88e7ecac78a2a6942578ee -C = 237ccb794cc63c185822175b444b2c47 -P = cb92a777 +K = 8535a1513a5038d7b2e23f6d200f9b3c386edf711fd6009f +C = 7d38c226096a3a25641c32b06a2e329a95af69869776ff24 +FAIL COUNT = 18 -K = 520ad4eab07e6c8f2068741fca6c8b517e165db3188c3d31 -C = 1a02339acec0f73d6df2ca6ec77bae15 -P = a2645c5e +K = 678c854150fb56634b2e24cbe38307691a53c0b259d17f4a +C = fa8800b7fbfd49505b06ca2e18265a1b5e6888614e790afe +P = ad21ba3ed200ec022b COUNT = 19 -K = 1826c6ce22881391604ab9ccf33f8203eba1e47ffaf0a0af -C = dfa45f061ea0de94a3c49ef686a77dfb -P = 1b44bc55 +K = c2a493adfd58dfe6817ce7b26af82ce9dce099391ae1ce4a +C = 99ba873061ead85b487c6476f3ea4bfb4e7bcd49275d63a1 +P = 2c76f542e7567acfe1 COUNT = 20 -K = c5f1d52bdeef5647ce8020a045367a49bfcecfd3741e5d01 -C = 254a5dada2f70babc3720eba211340aa -FAIL +K = cee14a060711ba12e0c48a433c20ae3523d6f281ca411135 +C = 6428b85588c2e6524c836a01f7f6c2bf66eac7da9078dd20 +P = bc5f473df7254ee9a7 COUNT = 21 -K = d78377d7eed4c31a03acd5e20d28895dadd6f98fb098a8fc -C = c39632ca4f14fa7b3e972ab908a6dde6 -P = 55c27be2 +K = 28b9722e74a3a2870796f0df85d8fc81a6675ab89c0cc292 +C = d4c96314be84ee89cf2b977004189e617a2e7da8e87d75b0 +FAIL COUNT = 22 -K = 89e7f7707630f34a608d5c696b4e3a1652eadacd497a88bc -C = 2ea4056e62a183cbd53750c8c099c5fd -P = 71d8a592 +K = 4db9e76c19d85c9b0f3effe30ef64639d11fbf4b18de514f +C = 4be1cbba9af2385346b6fb7cc1e003333c21d2aadbcd5bbd +P = fbe359733be5ff6225 COUNT = 23 -K = 83fef0acb54bbed3913afea098d8a61fb089522d44313cfa -C = 4670795cf82d3697ca186f4a8a2f0e99 -P = 90ede280 +K = 2e122a8becb4b81bdf68d2d0fe27bcc97082c7f7303bd850 +C = 733f5030893713617fd4fb688f3d227a0e19d5fae3372f26 +P = 1ed12c0e3afd335ea3 COUNT = 24 -K = 0cce0b51fc928b2c150eba1a49acc61b2b03fa91a81ba355 -C = 4bffec861e49701019dfff137664431e -P = 0ad8690a +K = 7f67b9e0ae0a43668d2a88651d27219e571ddfe63a8e62ef +C = cce47b15b6cd3584851bff66bc4981f7d3d8bde09185b3ca +P = 83e9cdbc1a423ae026 COUNT = 25 -K = 345c50a3f77a2d84d7954e6864aa7c1cad2c105684a99af0 -C = c5c885560d41d915b79cd33c0568c548 -P = 17da717d +K = 805bed05355c66ef6caceb50d9608634b014202d6b9bbda3 +C = 1fb875a7d7cdfeaaf6bd558ebdc9c05022e2d3d804000f76 +P = 247ac1c8440f1ffe05 COUNT = 26 -K = 52872b53edeba704cdede189184c1320d99dd892405c0fb1 -C = b8a25d9e567306669c35b5d9f000462e -P = 6368c2a1 +K = e937ec72e6d995e8a5af7ca3cb4fef1f3c0600a8f0647791 +C = 7d20c4cf560ec4048bd3f09cce3f63eec95b3564dce053d4 +P = 5960bd24eac66e7d9e COUNT = 27 -K = 3f45fd87dba93f85b1a3626616ae45cbea8afa121ec265f9 -C = ef34bdbc46ba27bdb72c03db7c4e0eea -P = a8aaf823 +K = 0265cc1c48af667783f3f95b949caa685d9ae05b8ba497dd +C = 02b1837517eb1e110399bb62b1ade9acbe4fed9be2229557 +P = 967be8cbebf8801d99 COUNT = 28 -K = 77fa70840807680fd58dc02e158de203c8a11c5fe4383745 -C = c260304de8d6bedcc653efcf8f6c446b +K = 45bdb34a4c1c4103c343174fef828d4ceef92d11774b2534 +C = ce55c2c2124a9958a8dea5e81a550aa0631a1e7e5318f86a FAIL COUNT = 29 -K = ac5e2441c7dcabe1af3d71fdb5ad3ee5a8028aad435df7f3 -C = 3838a1bf24e184a743850e81a843b4df -P = 78eebe24 +K = 4fa2b41285b9bdcf2fe07d48927a6c9a50fa70793442a09d +C = 4108c69019bfa67a6b5f249ed2e4ac1249bc6b31340467c1 +P = 6c2a2ac4e355169206 COUNT = 30 -K = 4b268d06bc8b4fb0f83501f0160c5ce2c6ad4ebd32a88af3 -C = ca70ea90351bc859b3adcc73064373ac -P = 0331d2ff +K = 1dd2cdd2d85aedb7d5b75b4883a43d00a77c7fb2935b33e5 +C = 728047cb95419c974adbf20ba5d6c650e9e8fc7cdd0b6657 +P = 81290d496706c7a366 COUNT = 31 -K = a6a9b1a40f0053e44e3616c3d663af5a4c07dda542d1dda8 -C = 526c481855c31df519e6307e59fe3ace -FAIL +K = 0de45efd893c52a058b65641c419debf39f16579a9cf0a40 +C = b16c197d47e0c11b931294f456a3a3471bf497b45399bbb9 +P = c0603fd7c077b91e02 COUNT = 32 -K = bb2e5b9b99ca7868b24abae71f9ea3ff51fd763c15375972 -C = 1c021a4f27d46b034fbeb5e5028250c8 -P = 5852fcb4 +K = e83d49aec64d51bb4575c10446aa7ae8421b47a6a24db3e3 +C = 2027e236895c64c102fc3ef0b5fe96dbea3315cdacca9e41 +P = 31ec0c8a0ec643aaaf COUNT = 33 -K = 883980bc95f50628574f5b184615d0d74f2e09937ebdc35b -C = 303f7d584d8734494a714bb2a63754a3 -P = f9c0cf97 +K = 1025fb5b996b3bf4568887a84b52c7a3b5339b61019cdc07 +C = dc34551371cca1530da676457d2f4ec5d5db1f5d0749ee08 +P = 010934a2eacd994894 COUNT = 34 -K = 6ee4fdd18354dbba00d89f20456b332923b3d22f780750fa -C = 07b5bf2caf284f877db10f5009387f5d -P = b6571601 +K = 8f57f00440317ba1b3f31626dfde3fed451c4d6abdd9106b +C = daca643edefdbbc0a6e94bc29817b550dad89bbbdc1d05dc +FAIL COUNT = 35 -K = ad19a6e7df04891a7343178522cf6e68b37ec12089432cda -C = 2e12697eb3c092b29938de269862ad8f -P = ff2219d6 +K = 1a30ea920fd7a90495537ae7bb0f357f8769509fe7556dcc +C = 1bfb873f135053c3d14e80abd95d60e3015f300e9dc8ae37 +P = 9cf1e120cca2862914 COUNT = 36 -K = 3642e8f0fb824177105d14e4e97e5c3e039a112975c76ecd -C = 8113f11ac1d48a08af57a87d7b72c60e -P = 96ad3df7 +K = 57a786bb0ec1cd73179561e1eac1c27c8624d04e497ea0e3 +C = 8bed64206549b0d768d1e6df60b11096a95a67acd2a1fd6f +P = 7dd52e1c66d4802c7b COUNT = 37 -K = d19ce3f08868fdaf8374d6bbc52810b3614aad11ec09fbda -C = b7b9bccf2e324e0a7d6946e10a0a7428 +K = 44673165fcfce9924af75f36432c7cfa3b741e3676545476 +C = 00e543efd4c45dc1c7baea0dd592e2ee72bbf8ab049b6099 FAIL COUNT = 38 -K = 17fd63f9f259bc95333ca47a6073bd624c5b4b8f57adaae3 -C = 5cacbfb4fe39600640dc501d3d09739f -P = 8db10663 +K = e8275be36c08c12c6d5be1e63df4bb204b2e9629b9b26b16 +C = e018311d1e3490b8187f985db18a8e71ba13b71854e8d9ed +P = c489c3fa8bef9b8883 COUNT = 39 -K = 32691c1da17dc2519f02d91ab0d31c3d60dc3b145a35bf6c -C = 1fdc2436750f527913c2263facf9dbfc -P = 19a137ed +K = dc1bb3ad1e583ba08474755eaf4072b9ff40f869f4d22b73 +C = 9173453c3374fd779ddf62cc70cdf862d4215fbf82cd977e +P = 0082e6160a9e6b6315 COUNT = 40 -K = 0b92306bd946c8d89198a0fa84ed81ee5099e63d9a9d4755 -C = b1ca14bcccab7c3f8ff19b529872e1c8 -P = 06708864 +K = 939bb02ffe77fe6c5c2cffb43cd590e2cdae8a45ea1af75c +C = cea1d6a6aeee19737a035d029b7e8d2d2cf57c6da95d9ad3 +P = 2d927bc38fa0884f08 COUNT = 41 -K = d36a6b68af35ed6e4344f8d99c7470ac85792ce97be295ad -C = 12bd62ace431240424343d72a15e52e5 -P = 9abf2353 +K = 81c3c2a93a39a09809b9a792a18862ff8e699653d6d3c08d +C = 1bcf20b2b44b3468fcd316177395304e54c05d0660553c6c +P = 610eabe7a87334d4dc COUNT = 42 -K = 82ca3595bd3b14194f3fdfaf0dd63a9eef2d12dbc314181f -C = 652925446794533dd073503f05db052d -P = e6fea624 +K = fa72cd7d202f6b60f4848ef5739469b4cce2ebbc7ae8539f +C = f1b6c23d92a0a4b14d3a051e4e56bfe5e306c0b47cdabfd9 +P = a9e653647bf2ad04b1 COUNT = 43 -K = 17706724125184e8d582d64e62a08ec14239330ae7cd7f0f -C = 5dab8f5bf6d3ef8600692325d9cc9301 -P = d6425699 +K = e684c700b8edc29e9e0208dd09e367a9dec1ff24505df649 +C = a1a567d0287728172dc61da66a3cc72e75bb6691f88b860d +P = 0694da578ce411d1fa COUNT = 44 -K = fea3766f77f046758f705c47c1320e44c0d29c242983ac16 -C = 7b82afa41ed04d7427fe776489876f82 +K = 6b60fe921de41c9591dbdc93abd019ab432873268dca3623 +C = 015cb5f1cf11a0a8217d75d33da6cc4b88d6827f5f7463a7 FAIL COUNT = 45 -K = e6bf6a4631d8cdcea77cbf527b7b21290306bdb0c549cca5 -C = 82b930a20f02fbf08a2e5e71573946f2 +K = 805425d5fb0f17a1d15d8eb86fc7c561d12446103d0f6b75 +C = 4b9ad884fec34b09798708d9ca889d78cf454f552676ec5f FAIL COUNT = 46 -K = d166cbfcfff4dd4628893c4c05676b6c7edae3f8efa0a7db -C = 8b1e6201d3f6164936ef21abc8ccd8f7 -P = 2412067c +K = b5be4f42f6704d9fa202b8213ee75f660b5a5793e8cc82e7 +C = 3eb96ed88ebf35b352971b213a00e7367df9daa599ef1783 +P = def0ccfc7355435c58 COUNT = 47 -K = 5eb7398e1b0f79b6f08b8bd983c51703db87ec98c30415b6 -C = 2ba9f54de44e53f3deaa59098ef5c41a -P = cf803631 +K = 808ee08883de68d52ee3de1373ea900ffd7166204d4293f3 +C = e81463f35fb13410e4d907194c33239c7c2f451f0a1969c3 +P = cc2383b6a2618183cd COUNT = 48 -K = a391dec54d975030be7676c948b354a90f828edf505fcfbc -C = 5877ceadd4d47bc5ed17d47f7cd05d9a -P = f8756638 +K = f374d82d9aae7fd9bd727a7a17f56550ef31059960c264a7 +C = 695f09a6429be6325cf0ce25b611ccfeab714e82af0a6f11 +P = 28abecdacd4ea9a6fc COUNT = 49 -K = e714412cfc46ccff7a0b88e88c7baeae70ab90e76546b6cd -C = 8d10434dde1da3baf95e0b27b0578741 -P = e2cbd222 +K = e0b537fc0544e6899e8676eedc21b3c23cec589753e49efc +C = 2e08cac961cb8977f2e7b12c993613563afee2c1f94b0f75 +P = f50db6e8f470559597 COUNT = 50 -K = f2281c7fbdb8e855565a626a8b8912aae625b04cbce963b9 -C = fb7a931a16dca230b661f619cc8ac747 -P = 51471727 +K = f7137fffd43ea1fa808e548f641a29e07d58c984e8efd604 +C = 25dfe1019680b2f0797efa78796876f672d59f716a1f2b6a +P = 955588db7070c433bc COUNT = 51 -K = d196219b57914bb5a8f6c546cd2a271e8f5adb2b1fa9e03c -C = 3898e5cfd809554fa21a0ceb06e164dd -P = bdece05a +K = 52f441a607b07b090a04332ac8a72407cb1932ec4cb4746c +C = 2e62488d906eae93782eefcec5ac063d5f43567b57a650db +P = 84ea38394b28ba6f61 COUNT = 52 -K = bdbd82251cdb5b812aa4a434c5724c3b0e81f48ce2d257d9 -C = 10490d0a4a2b90dca2bdf9e9188be7ac -P = e84fcaa4 +K = bc7e850e76a1cc6d3b52ff790f3802021b32fb234a52ca48 +C = a9f2c1c0019d245c880a942ad08307fe9f7d9f906d2c049e +P = bdcfbff03d75f27461 COUNT = 53 -K = 7b73ed67370abcb02a41e86e1ffbc3b5063df366ea58fa3e -C = a7e7fb7ff0b2c33dbe3594c57e8fc29c -FAIL +K = f7e3e8cbcaab3480db3802e9065cdc81e4a4fcc7b60e96ab +C = 46b8d7b2ad64bdb31789ecf73d5374d4f1b888b5ece790ff +P = 7da08c9ff9ca25cad5 COUNT = 54 -K = d6a22b3d265677f94dd74e790a338a13bc1f1ad2e33ebe21 -C = 78935779b2f9c561049e06fe361917f9 -P = 61a8cc1d +K = 9e24da5e813d96c9c961a5f56566c8c1e563edc142ada7a9 +C = a4265a1409b0929157d6bae37a3bb25ef630f0310a5f3dec +FAIL COUNT = 55 -K = 02c214ad04bf273bbea2a248fadf040f5fb00d38c7877ffe -C = 2a3bc3935c761c066077b28ccfcbbcf5 -P = 65a8badf +K = 3c639fce51b90444f4099f232b8dabef159d28727f2b8eab +C = 82d19bf24431521ce510a14fb079a2efa435ae66624b415c +P = fd9bbc8a1cac9167fa COUNT = 56 -K = d40879aca2833f252763e0e751f21565491599cc95c27d01 -C = 616ce132effb4a2a0090117383df51a3 -P = 9cec3231 +K = 1bce1004e2407ce9f93ff76bb80f02ca89095f83814306b4 +C = 467a5ce1127bbc7c4fa026b856dada4d716bdb041f930020 +P = bb7ee20d8b91e152d6 COUNT = 57 -K = 77b2cc2af7be436129112b2258385b0942d732bd41ffbb01 -C = 3465c44adccf7d0e4a442df087112eb1 -P = b708bcd4 +K = b7e55b8461dc105f6b7fe36335c8c9094495d611545eff07 +C = 2891df0d2625d5d8c838ca3d2ebbe8a0aa7f051d1f220b58 +P = a88714718fbc916480 COUNT = 58 -K = d5fedc6fd976453d49ab1258c2d8f7788f0c30dec6c1563d -C = 32c4d9942e6abf2c370aaffde5cc519b -FAIL +K = 9debe89a6b16b33a297c66bbef8f5df14fe5779ca7e90fdf +C = 9581e10c0e47ad90f0ae08c369853567fcb03636c0b0e70d +P = ebf3bd62a58818ca2d COUNT = 59 -K = 957a684e6cf488d6781056412d4141d8bcc9f03544353ff4 -C = bd09e9272f9db2e6edc895ee4b051a31 -P = 4777bed2 +K = 905198c0db017f6fac3acaab33d4882982ab6485399f166f +C = caf72d409a39402f0c89ae6299ccc805015623bba94da81f +FAIL COUNT = 60 -K = f7b3844376ed6ad066668bebd2874eeb0e405b30189124ff -C = fd122eba89322f1edd5fb9b0af00181f -P = 2b64e168 +K = 284599544fa86082d9ecdc68e4f9808e56e7bcf4de2e3bdd +C = eb138d365b8d909fc2911626a6a4b4742072cb8d3984bbfc +FAIL COUNT = 61 -K = 131d42dab13adfa41973f7484f177d9aa69b7c2f177b1e09 -C = f7047e4b25258e87b625cf3711e1f37b -FAIL +K = 53c7565ba7448698bef15ce2ea8c820a79a8a2ee14fb8c75 +C = 38bf72547c9d1d6b79f2b8a11159b5a4f20ab47aa5966b8b +P = b4b6c3cb2c48149769 COUNT = 62 -K = 961057967829533c183fc32565b2fedcb2ca0bbab45630c5 -C = 0efcdf7859cbea74c8a0b2c7c25d53f8 -P = c937d2a3 +K = 5def2ee3306c4906110d8398f0a47ceee104b8549d8fa5b0 +C = f30c3689cc351c619782b3dfb5d8ed0fbb990eaef53b2fdf +P = b70645f237a56332be COUNT = 63 -K = f6184fbfdb36f4bf0d6b1cd293cd55fd0e15ae7009f761a8 -C = 728e811f2a5d7584099d029cca6f3461 -P = 990b8f51 +K = 4f8f452e477fcf8f2b75952daf0d25ac93c458c8421af5a9 +C = b1eb057e1c21a98855302fbffa1cb191a5e5b5c740c5b4b6 +P = 388b34746508dd1807 COUNT = 64 -K = 45a527d411cee0ea37789c8f11ec38451cf54f42cd507349 -C = e26524772d6080a6f8f0047ee3e0454c -P = 59efdf15 +K = 209c194fafdb66a5c363891830435d7e151efaa4add2cc91 +C = a8e83190218175b84c1a78d8dbf930ab1960243ea82b9066 +P = cdbc1476ae745727d3 COUNT = 65 -K = a819e312d60848a08e0ec7535e792a02cd38d30dcea5c9bb -C = 08aabe0f6dd98ab64175ac3637a76d16 -P = bed8236e +K = 8dc1bb0f1596950317c2ad81be7b7192a168a31010522389 +C = 0faf1777cea3fd6d2624336e12a1abebf229d28f429cfbe4 +FAIL COUNT = 66 -K = 9fd760c568c73e7cbd68948d3c77eda5198672b28b24a5c7 -C = 8531fb42d4b256044b1ee068ccf8ede5 -P = ce76142a +K = 6aa9e3d9fc77086f99066801081f633a48be99da6ab8f142 +C = 4bc34edfa177ac220e4fbe3c5d4cb4399f40f07e59b75b6a +P = b718ec57c773dfb026 COUNT = 67 -K = 04c57eaaefed9535bd590b3f89d3cd30230f4c88dcc5e985 -C = d95e024a9d9d5ad7efaf663e89aa17a9 -FAIL +K = 5cf6bcb55dc49b34a4c95aabdf53c1f411224cfa0990288b +C = cabbc25d3034038b94b57f0eb8f17b5699ab7967867e797d +P = a9ff8c14a8f008344d COUNT = 68 -K = 33db4474ea5648b60f419f8b5f6f518aa2c5c9620dabd0cb -C = bd997cfb0675fccdcbb864df6f99a818 -P = c550c10a +K = e6744411200d07636909d233e9a80bfc2ee56e962c074c58 +C = 72ea7828e501b8188813671a9a7d8f8f3114837c4556e6fc +P = fa0af7f190f4df9377 COUNT = 69 -K = 557874d43e17e980ae1b7574a049b298652fb36be12cedd4 -C = da0054022c587b95e206695e6f6e8bfd -P = cece9383 +K = d894b3ffe127cfb7e237a053c20ce02899ee4869f37a695e +C = d72d5c715fdb61b429532de0ff7266c5f5b4d7c1ee652c26 +P = cf2c20b012dd6b0f96 COUNT = 70 -K = da0178a35480d1469387e3fc5154d82fcaa3cc72f10b9e79 -C = caca2dd2589a221d2d9d92f6776cddfc -P = 8fa45738 +K = 09a55b02c0fa91e8441f6bc398da50964c2e4e043bf8904d +C = 2ea5915d452348167841ea1db34de6ed373929f0d6cd02df +FAIL COUNT = 71 -K = 520f03f649eeca2804ca4e39be4a268aaa860eaf666d66a1 -C = 4d912dc0a8b2f1b920990acdcc7564da -FAIL +K = 72460a28ae1933dda0ddd72f687614235e01fa414fd41c34 +C = 77f31d9f25a332f207ea0817bb0b4a3460fbb17cb4a5e8da +P = 06f388a35a400c6dfd COUNT = 72 -K = b64b005ffa84b2dfa9c8b3679263e918d8d418f59e34d065 -C = 885169db4fcdbe61a5de5408399eef7e -P = ddba7ace +K = bde5a5ea9a1943fd069103e1a1f90d7ba19d6c8d3ef92b32 +C = 49f07acf7aa8b773a37019c004060e26bf91ced262f182fb +P = ae3995686c03ee491b COUNT = 73 -K = 56d83f24a2507800b8bd2efc0f1d4cc738b33d3cfa009445 -C = 427729111d557cc2089994b2cae3cf9c -P = 44f62ea0 +K = d470969b5c621273414d93ab44e2f5e50c862a9445f2c42e +C = cc1aaf5aa3eb5abfe881ea2b64609cdbf54e1306710e0ff1 +P = a3c112b05b65f96924 COUNT = 74 -K = 2162f07b46e147702aa6e9c85a85a3966bc1dc0be4bff3b1 -C = 0179d66cc67817c3e2939650835d25dc -P = b7a498ce +K = 37faf74eb630a521a4e4b3879facbbda0cc790fa1969532d +C = bbc497dfc863036dc514280123d7b3077ceb9da92cf6fe4d +P = 84a04cd80dc9c736f6 COUNT = 75 -K = 5ad988ab31b28786006adcf3d538139601d252347de0466c -C = 1e410b155992b33dd9eab54784a14551 -P = e16b1189 +K = 58d789406e8cd8dce2cc5b5c6517b3c13a3328ebc610d193 +C = c99ca651f81f3edcecdcd7fbebb969e44d9d8353770aa7b6 +P = 93bf126f19d2bfe3b2 COUNT = 76 -K = ed1d33955c800f4d53b97c359b85f12065b78d885bae68f5 -C = 9849ed5d446c44b7cd954cc4a3cf4cf5 -P = 6b326261 +K = 9a9ebe97ffa8d7231456a967333ecb7520588689375a6ab0 +C = 39640f791f4be0415312d3594dfbc57ff4a004480fd6dc0d +P = 48871097575809f39e COUNT = 77 -K = d0d86bdaa549c96e0345ef0bd9c5d574e2454c87beb2e253 -C = 1993ded1641e6bb6973a5be9366d7005 -P = fc1bcb46 +K = 7810bed8d91ddb031818e4c3d4ad2311ff50633f03b08173 +C = 68501a399e356d9f2f3a4577f796b1ce9561f6be93f741d8 +P = a843d8070a88f861a0 COUNT = 78 -K = 83fe8217662aabc0b7ae8b02381961f8a8eb526b94186326 -C = 50f7380ff8ad0b7df37ceaa52113158b -P = 8c65f58a +K = 23068ad8a8c1ed45aa4c1643fe306e5868662d61a5c42e0a +C = 55f6b63ad09bb85b144b13d68975c8a8010a766c3f5719ed +FAIL COUNT = 79 -K = 2bdab904624866ff2d8ff3b1df7cc4bbb84272490fbca2aa -C = b763bd8ed3859106a0c32b646ebfa291 -FAIL +K = 5129f3469e4330fea55ea8a9ae2996f2eab2f14256913344 +C = 0dfa1bee27a53589a037dd5ca90e8c1958e70a0d1b9fbd20 +P = 7f3ee011d0adf2f475 COUNT = 80 -K = 9734654f63092bc2af36b1b805968e0650dc773c122ad1ab -C = 6a22fd477dec0d254945c0f2b0a20423 -P = d1688ae8 +K = 786d7bc8ca73888b95edb6bd1c2aa6497e6dc3104fd2afbe +C = 27cf6e26d3395806c30f8d57a4f3975b4b780bb28408a275 +P = 5d540ea0bf0d82caf9 COUNT = 81 -K = 9c9c5484dfc39e9664df4e6c317f85a2ff4a47bcf8a86df2 -C = 11a96f01f4f6fc97738b01a24adec1e7 -P = a8fc9478 +K = c0641e5dba2dfe059a5d61f76e157d0bd746f693e10106af +C = 4c24159af1faa5bcd28f59537704343f838703d8e7a2f19a +P = 5fcfa49d73f8738e86 COUNT = 82 -K = 3b2c748399dca21a54c6024e56c9c3dd3b243120a470cb66 -C = 00e0889d005eac23d1bacdbee874f42d -P = ab0008e4 +K = 506c2afbd293647e3641a0e647e766dd37aaa5af9b7a4ccd +C = defd3b85bed76e8447202faaca74e1e26cd7e6fa1b0b3d41 +P = 170c004fcb89b91178 COUNT = 83 -K = 74f9013dc1125622abea693e6774a15a3cdeffc12b28b9ca -C = a549ec40b10c1df772f91ea9b5ffe64c -P = e621e383 +K = 980fe85f04d786b351ddf97d39c7a70e3ea6034fcf255280 +C = 100271783665d3b7becfcb0cd1e2c2646f98a283b5fc6ed4 +FAIL COUNT = 84 -K = a61951c5bda1303212aae56c1069bab8df576685cc074e26 -C = c635c4b38a1efe7b338b95ffed5ecb19 -FAIL +K = c3d5bcd269e9385689a4d5c692816c86b7079bedd56df1d0 +C = 0a6f030813831ce8c33462e9e3b9bdfadbb72415b7f94bb3 +P = 7a469d515fbab93967 COUNT = 85 -K = 03569af6ac7a12e21e2fba90c039f73e11175e60707f86b0 -C = 797e2da93ea5ea9704cce47d45914355 -P = 2c287ff3 +K = 0794c04e65d833848eb1ba37daea947b3ccf4a30a76fdf45 +C = b77c6ef5ff8bc9a7134289d4ff8ae0bd756811cf8ccf39bb +FAIL COUNT = 86 -K = 2fad03e573e2df5e2291e6559771607a4c9e949aa2402da2 -C = fbe5458ecc43e65c34cb34250fcdc8a1 -P = 65f368b6 +K = 469744ebcb6ac695b553dd58a50a372a98a0eb4940faa92f +C = da9af96b82fa8463a0d28ca0a5c6147d8425688b2f167906 +P = 0e20e6a6ca8a7a27b2 COUNT = 87 -K = 5071c56d3f664b40755f17fe95bcc16ab8629785ae5a2c3d -C = ee3a03a382e1ca7c0afb0c4a13689161 -P = 84b6376a +K = c9f841603ec2ebf16f6f3c2edb2fe8bd7d38cfc4cc07912c +C = 6ba3ff117049db6c56290590974a07b38ef9c092c7af471f +P = 55b72d51dfaf4249fa COUNT = 88 -K = 41378b7e6e26a17ccad644dac673c186da6ee036b1109059 -C = af931bc519366df42702a3f4f586a4f7 -FAIL +K = 7b1827162c2a19ff753ceb4cafcd741e1e0ef84650d9f85c +C = 7a13ef51b1d1a506d540084f667076efbe38273048abb7a8 +P = a9ec4034395357f117 COUNT = 89 -K = adf28e8925c84d4d0cbbf052ebfc18e362e0f60e7e470a05 -C = 61682a6ffd0bdd6ba7d7cd7239488ff1 -P = 0a7ad3e6 +K = aff6bbf169a5aceb188c4b11eb5937a0c23d7269f18fabab +C = 8a282e14a308cd584c0ac28520dc491a274d77ba139b546c +P = 9d443c90dc7cc2f05e COUNT = 90 -K = 5f98be71401bd1fe992f00c05d3afde08d6d9dc97b802123 -C = 1a90fc977e98b326698670d6e04e4a8e -P = 9c7961fa +K = a2bb1e25cb7b022deb79ba1a14a9a2ccc1aee4cdb1ab35f1 +C = 6bb10392f7177ea37c889ce18158f8289306958e091b857f +P = 43fa413644cc61e6ce COUNT = 91 -K = 14bee43e5635fcdb07b56c1e55ee58028c005df7701e4410 -C = 536a179bce4d05fc712a4ab69c09b6f7 -P = 8afaaec8 +K = 6e5b04a0ac815c60e5aedea5ce241b36ae6c7710c64d7a31 +C = b4321661b92300cc8b109694613aeb147136134d30e2faf5 +FAIL COUNT = 92 -K = 22ccc38b87e877e27f7c4321ff31b190e80f823368c890c8 -C = f9e5a5d67f01d757e4d7f471e61c92de -FAIL +K = aca13b524ed4f440c5acd982aab72d81712919d11add2e35 +C = c38b931c0d1fcae1c28745dd4a3924a8334b476ae388a6ac +P = 06da2b69dcdd8e09b1 COUNT = 93 -K = 5f47e1c37605e3343669a3be72c2dee803e4bd235461768b -C = b57b751b29bffd70a920fe8ecffe23d2 -P = 7375bd32 +K = f5dcb03681e6a8df8af84e1d59776ae5e3fbd98eccad9439 +C = d066192a33c2ba3987243f6c9bdcd2173c385f6b58175a3b +P = 6682a9b4887ad2c6be COUNT = 94 -K = 1b3ec7ca33c87863902269dff5791b520f07c96932fc4ce0 -C = 4192398de83e7f4a795da819aa93995c -P = 3ee4697d +K = 1ec3e81d3693a481ce1f0886d74125f830cc3f29b501f11c +C = 3944998333103f58cc2f8ae516af4e6cf26a5a0b6aac2373 +P = 22e0c8f5b66ab6c883 COUNT = 95 -K = f848473431e468177b3d40a2c085bd52370e745a648c530c -C = 39bde77c4a87cc69f681fd89daa149a8 -P = b1675d6b +K = da009cdc9063ae62b474b08ad0b23ec771e6bb74a4b263aa +C = 25e17f435f0a0eeea1047ddfb1f0172cc4b7a5732243d0a0 +P = 5f1338fe6f8159d47d COUNT = 96 -K = 174eace952148fab9363f891ad95adcba096c94754b63b74 -C = 8aa78cb5827826fa96d8a3123378a7cd -P = ab0f839a +K = 3f0cbbe30fd9a46c540aa21fe68553fc942dacb5719fcc5e +C = be81f4359da567d5e4ec01605fd0def16944a7bd0b9219f9 +P = fc195550aa3ffb2e6f COUNT = 97 -K = 1d310bbb5053f7e689ecbb15199eeb372dde7bf695868f12 -C = 5b88e74eb1768295d84fe6ffaf8cd5df -P = 62d5f595 +K = c3942324301c2a935bfcfd1323e40cdcb7d080abf3611e53 +C = 2586229e46f318a311492b2dd159b796030041d3b1e9c7de +P = 3d7465a757522e6fcc COUNT = 98 -K = fa5d0d15b5ae1fa7e353ff5fb6ba63f95ee4885d1d2b514b -C = 3fa5e5da2716c6ddb934d90aca47ff12 -P = 720396d5 +K = c84f3addfc0ef10601ab33e3904ccc8a032ea95b121bb5df +C = 368bdbd3121480508639ca522b8fc97c476bde04d170a839 +FAIL COUNT = 99 -K = b7b8d29917696bfa4a1cf43330c5ed9d5cb88f90609e0261 -C = 0de27dcbaff5d6e5fc61e01aba097d8a -FAIL +K = d3a2b3d8be86b017eca0256e854714de2977cf3262b2f3f6 +C = 7240f161a759b331e96fe139853773a006858483200c8983 +P = 2627ff5487bd6c938d -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = ac3e6d3b57da9bbf1725d05ac4943c8a6a627404599f0e24 -C = 0f0b7511fa163d55362b6aa9652f81ca31373f5175959ee2 -FAIL +K = 6f7d08f07adf1998264baf860df933df248089298d9683b9 +C = 5491a4f89a85e3f3397f04bf91b84c3f0ecd5d067e415f0728f8d6213bc86d95be78ac1b4f857629 +P = 6da4a5e42efa1ab2a646293f5fa88150af86b6891fee46c78e529f89f6043b COUNT = 1 -K = a6cfe6ab072bab5f54cd79ac8688a3dc918e355681aa744b -C = 4113f11648c5146e4c9c0a71fe6a7491cfb384a3b8cf3a5d -P = 2112b9ee036fed68096abed8 +K = 7f57b5ddcc9408c1b494bc995fa67f3facbf0c38b89d0b85 +C = b8541250c2234165e1f429c7e2b028e75e6d86144add1c56e8aab3bb99258aad85558202fc070971 +P = 0c5f764415ac127831931cd037a62fa3ab20125e8c8ab6fbf379c1a4cfe6e7 COUNT = 2 -K = 7ff2f570f4e79f404bb21a64d21d57eb07f2608d3e776eea -C = 4c52b06972ac982cac63af79e1e092a12fb2d2ba5fe4f70a -P = c63e2971a601fb41aab3d232 +K = 1cf0bfb8f5ca259be762b2f6d6a1447085878716d53404f5 +C = 6b43125f3348ae2d36c69def3d8a1b23e9a597632d2c19cf39a028c860ac5a01a821b54eb104a8f4 +FAIL COUNT = 3 -K = b883fc53cb4f737d85e158ae1faeb8aa007834f063d1407a -C = 5d92b64c851852238ede75e9e2db2130329e2cd2893a8955 -P = a2058e0a6b3ae269cba412f0 +K = 7028b90c95ff25b92ef806796501e824ce568cd075b11d80 +C = d9f2f3135d2201c8df90f4cb251c124d4644f2831d537a2d343dc52661fc5d0f56a9bdaf3208eb0f +P = be43ec3ed0d07a664135aa33be33707b06a5eaf7ed3961ed6a4524ac7e72f3 COUNT = 4 -K = 042e10f1016dce5857ca397ba4a3bf19d9f365dabe31abfe -C = 1b51cde4c2d2d8cad7608783e75f623e0febf270087df6b2 -P = a11af10e8d64a9978d7df94d +K = 32a52e903a1597484746608a7dcb86881e1e15d17f0200a0 +C = 113cdbf4d423df2b84a883bd16cce1727209b5379b4cc2f404e52aae0bc616222474d972176ddf47 +P = 79507679f8c45d1aaf91be70ca5e388b3aacb455bfbe3b9eab021b65fffa27 COUNT = 5 -K = 99bb75eacb496d7e7a92d39959be61307a7a8a3f09ce3682 -C = 9a880dc1dee69df6b72c54669040776b98df029ad77856b5 -P = 36d9322e294de4f3a2ae9123 +K = 9fcf543a54a5128b5d555805a32f87aab34274faca9a5ccb +C = 6db340014d73569aa77a6e7dd4f55e122048de2fbcf851432b37a12143fb4e885bbb64fd0247b966 +P = fa7e2de1fbe2cb5e905c0bcf63c7c3ebcc533e416ee5bb0d43a40be0c33ca8 COUNT = 6 -K = cbf842e10e4fec5c84691c8a2f4bed30e43d13c272321b0a -C = 90f75bf600373ca18308f9250d31a516807c08c2e01dac4e -P = fc2ab88f11ac57ac95587833 +K = 30d23ce7b7c3d064560258f15dbe8eef6fa1caeb36d9f6d9 +C = 8ea4abffdf14e59605004d9babba44d9d58450915bd0a47cfe738e0d89ed662018120fae245c4f3a +P = 95150f1e94691fce7deb9c4983a1525b86986c445b21470dd48670b8e02c0b COUNT = 7 -K = 44586341e4aee6ea159c59aeb935123666b3b0d472350446 -C = 7a9d90c7fb61869fb906afd5e7a8d5cb4fba7f46265b073b +K = 0869f1ee856b7fcc2438b3afaa7f15c7b778367bb6a3bfbf +C = 35923d7cfb247b38f1839586debda8ebb2ffeeaa2d8915a18918a61c78d1162e4f094fe97eb93b1c FAIL COUNT = 8 -K = 70029c233e7e555467623ad01b7d3bcc675bbf673907570e -C = 6c128cb8bc53f0917d765fe57340a1a0e9569b5862a98605 -P = 8f2c953ff71dc64222214bd6 +K = 2a6299cfdfd35377a525b63b01e3cd1d1c0f79ae03d29a48 +C = 81997d6593606c620187be1f30f57c372394659d4305cc0753f93454a7394062e82bb52b323b360e +P = c9c2f5bcebbc8e297deeeb85745520d3fd62916721e1067352bca5f2ce4dcb COUNT = 9 -K = f7848827b18b8df49c4c646210e229f3cdefd90d3b078a3f -C = 24e7948ac06d5e6410a772fe6d82a8f4edf214c6d99a55c3 -P = 1396bc3d72b391acaff84d2c +K = 22991eda77a0a69c1799eb3fedaa847880cf4379cda2c7dd +C = e5a66ca880b8d09d2074fdfcd77cf4dad82516fe55d5ec24de12ffb6d2917debddfb618bb0db7552 +P = e082ddcefdc0a8bf0c3108bcc1395fa708dd171187ed66e493c6a922d8cb1c COUNT = 10 -K = cf5668e7bc890eadbe9ab7ab013a9c32a16afe15adf4686c -C = 192a8386cc5643c9807cf2979b90f2e9985f67f490525d73 -P = 822ca78b0d2337dba679b11f +K = 41b4384ea4d1caf2e444e18e52668c14aea7148cdfd68edb +C = 414bc66cda7d4c435408ca1f277a609613604c2b946b4e3337b001752a447030626dd68e94674c28 +P = a0f2172cfe3d255a532fa0bc1ebff2693a5b8d6e98c66459508973287540ad COUNT = 11 -K = 429c9e09f7fc97683fb1ffdf94c1beb248c2105bfa48e4c3 -C = 2c74a9a3e6f877b9c8db446ab703e5f8a90a8de770254da7 -P = 4efaf5138147dc7ef67bf11d +K = acfed9bf3ed3546afb260bd7dead144d17407af94ef2c850 +C = b5b82fceee28a4d7dfb7f9784832d873b325e8d375b3508fd00acbaaffec8668c0266d760fd57157 +P = 7c4beffcbd96bc41819435c38a27dc4ad89288aba4cb96d71e0f17986968f1 COUNT = 12 -K = 957949ff3d1be33d1160401d9792e68a100d910c8c39a811 -C = 751f25a04d907de22104edca34280c534d99a49e0d6d9c7d -P = 5c5662b57fcdcfd0c0b0bd6b +K = 34012f050b08a64410d989f383c6b1eb9302c038facfa45d +C = e7c0d14d71c7233ff46df04cca1347fc11c465d00b65828839d0aa5bfc56c6acac5d5c3216b81c28 +FAIL COUNT = 13 -K = cf53896aeb5139979115fdb8c836213438678cbdb2b160b7 -C = 91b350dac7ef8ee900f78aaa5a3753d2dd627b696077665d -P = ae2b9f028e1072f1d9b6e1c0 +K = db8bedc27f83019dde23c7df7c54f7a7a804442b9155c228 +C = 2e1f4d75f590c8ae0e974842dda83e325981fcd4dfa03c814e4dfb47fa03bb7a27a31ae4eb388215 +P = 4a931e1eb7eb33d2f418dc4cff110ca4e306ec58d8629b94b7327498579280 COUNT = 14 -K = b89bf37f1d1b7081bf5f826e33a3b75c03f99085386c8065 -C = 020183ab026bd18d185f65dfba150849086899c0e4c35ea3 -FAIL +K = c2017b821bac8e1b183f6b712e6fc2dc634a9f8a62b3c1fd +C = 4d236701c978ff98aadb2a58e85598ea9e8050ca35874472d39cdd77db3c9988e6b1e880118b4798 +P = ca870150cc160b8bce20d24ece384937a2cb61c16a24dd2ea4094116980b75 COUNT = 15 -K = 0b938ba54c719d4b83a1c70047f0c02558e6ee733351ffb0 -C = 51a6c7d0f187e71c9e6105b2348bb0e854eb494a1b3f268a -P = 800139c37d5e4d0ec6aaaa65 +K = 4d5e6c501490697edcd6da82d29d82deae2911a2bf632aab +C = 1bd4062eeeedfe2a177da592d1c472a89079edcb2adcae68c33428a0c03533800ca95fda6cae5955 +P = b9fcaa03308a689ff2528aa3fdf9f5dcfbd7ea834ccd8078eb5cc33aaf3ba9 COUNT = 16 -K = b3ac1e40105b936d124e4bd0dc36026c22f1d91eec054c4c -C = 5d7af4f858234cdaff307046c7d816288a0dcd4f296e5d07 -P = 9dcc57519c0df98b97fd5032 +K = af01fb00bd4428f6ee873da6aab206eac7fb69c7ea5d9129 +C = 38c88fcfc62a8a7ce0b8fb83aca063af4cd0ad0e975c0bea0c3dc98ed5ee84cfc7ee17964fa8e0f8 +P = f449ef394d0a90c09fad4331c8a338a87bcbf2e4c030d1a2de14b08d738a3e COUNT = 17 -K = fbe3872e2a46eba18269bb9ad954a552aee22ffd7fe85b1f -C = 59321a75d7a03c4e12bf39b02536cdf88a052bf0740f2c22 -P = 7d1c5f0b8a4647ea71254e41 +K = ff5c581f3dae4a5d2955102881968a4bd37152abb8e8cbab +C = 81a8b4587f746839666234e8ef9505bcd045a279065591d900feae7a8b02397f417ddd58f3149830 +FAIL COUNT = 18 -K = 8d5ee3318c528566dba1342f3f63ef6efa475493c0b8fc81 -C = a242c0f087ddef83213944cbb34275210e7e5b350619a8fc -P = 1f8d3a35ccda7c4c67670f82 +K = 33efbfecb10583514358143cad3351c10bf5386c137f9e02 +C = 5e403c8a48cf8b1cf60ddb72a77eb372ff1c59a0d3f54c7c39682ff15afd2793a1b9687b076dcd69 +P = b7e57eded1ea684fa0bec3fe305156cab9866965e92646f9d68bf13d9c2470 COUNT = 19 -K = 2df9efe00b0c15cba928187217e7d7330900feef09ab1bf5 -C = b9c4111b8b6402d0b5366b73100a2986a691c41c5b867795 -FAIL +K = 96c9a2095fa849384e36adbcdb68f557d98ef8718033d0cb +C = b04450709b2e72614c4a4cff2a7c3d0f1068aa26d74b37561732c4166963882a064385e985cedeca +P = 32ad3a91a12ba10fb605a973bc1bafc20e87a40b99db915e1a583203b9c657 COUNT = 20 -K = 8371fba6abe01b2adee5d569e04f567a591cff7d5bfa093c -C = 9be893e0a4281141768aba2f4ea9860677276d23d9f64cd2 -P = 7cadea1419b060cf92de31dd +K = 36e8ef8890a015a307c2d550e8be1379bc98e4da5aa650af +C = 5230e54216e90b3a65212388ed1ee0d08e7bc29a1a946ddc4b45fb5740f171699589fd1a126a8669 +FAIL COUNT = 21 -K = 98deb5899cda39cdd74a1ca52c1ca1b9684a6058e019a3d9 -C = 1759386e26fce13e4b859cd5f0d68a71aa758b5be0235559 -P = 083487c2e3ba4bc491b6aa8d +K = 20a9cbbd7c038b5f685332fbfd3a8a35d436511e062c819a +C = 27f0d24f8297f99ee212640fc38131aedbc1699e714f3e3847cb2c35ef21e1aab4cc4e57d4f3a4ef +P = 77b78d97fd3f923faf4c4fce577ed3429515c439f81e202e5563e15b78e354 COUNT = 22 -K = 0795ff838d5e487a838a7bece978cf350299a05af341b015 -C = fd151a3da5b3e750027ecaeb8a3ae6e6439de0984494d89f -P = 9abaca748d884c83ff5f3ca3 +K = 9d523bb61ddabcd7f5e6eeb21b08a4467511a382dc717abd +C = c5a3bd4393a6ebedc3e41d0b451e967bcc5dc0812c946827c4cd5f0d08a66e2cb90da4d275c01e25 +P = c5d726545307f2395afca8f35149668f7c1b9574af9534447911a14583438b COUNT = 23 -K = be8354be84fd4fa7cc0c87f4e480332337b5edcf76d39597 -C = 2f3293e10b0d316b5d5bf0a9eefac5900a2b5ab7f18711da -FAIL +K = 2954177640aeae945c9e32ec6dee58ea0a4c1c7ad77e278f +C = f18db52ad001608ce4db767e0804953b11be354079bc931586a564393d63a1be50fc2a132a40157c +P = 078b1d5025d440a0ec3812dca8be05588043af3619bc747b19c2601cc4b23c COUNT = 24 -K = ac8b72b87a3ce73031e053cee6efa54d6e2fc9559b82c8c1 -C = 8aa83486a62521b03c68cde91e59a0734c35f2d2dca4d3b5 -P = e25dfd01908006dca57a7da7 +K = a501e43d3fafd740238c76350ce2cb6a894f293eb492d88e +C = f4beb0d715f3f549040e3312e3a11e096e4862e16165f80b3df27395701828c988e8c40905c22e88 +P = fdeb7855247acf08315cca7d1b37ed12c9b0911969c534624e8f51819338ff COUNT = 25 -K = fa64e0f222e6a5ffc2394aef9db73cb94a511fabb918230a -C = e210cee5278006e80753a94a63607a23f5cbcc1593b8827c -P = 3f39d52d0adb6ec3d90baff8 +K = d3e0d07761eb2f384089d2ad2d91e19f04ef88af880ce362 +C = 47c1eb72b22c5d1ba95c58a243a91988f6ecc500f543ceff987cafb3727fb1129ca6103d1171e135 +P = f59200bba7fe673231def38d7981cc8308fe9913c2f77e1e064415c32e0b0e COUNT = 26 -K = 151978cb523f57e2840088f0427fa0fa69e6d72d83c9605c -C = 11415a3602c97b136c3a42c4a4a4c940952079f7201f06f3 -P = 7ae59e2a22e88e033d293e1d +K = 7786e87282d317a9d72752a021d73f4a1761178df57eedbf +C = 49bca6483194677bb339b3705214b12fc6a52550cd017dc9066a63386f1acc0242e69596707457fb +P = 3a52ba3acb6f9055cceb0622c8df354e509394c875be62b0faec88d4d08708 COUNT = 27 -K = 729ff9f8d4b8b8d0dc6df5862fc458335e610daed5e4516e -C = 9db7ff1934c5dd09e1da37717399a87aee8dca411f0abc6a -P = 3541bdd81b237082b6624374 +K = 2fd22fbb2b34424fd49228ba6f38125e9386e34b2293a9af +C = 28daf31ce98af5194dca3038738587164a184cc2756baf64b541e703cdb778f47dbbe315c0cf8196 +P = 48beb84e1bc73a11ee28b062c734d76fd212a81a530e2b8056e1e3d372a96c COUNT = 28 -K = 8b3c88a1bc71e4b7413e256b3ccc32843f351b91dd9e319c -C = 070f86cb61e71e5f93b5834d8ebd2917d6e01fba98b15022 +K = ae4bd1e2eaeac32430313bbb819dc22d826dfa7aec550260 +C = 5a3b3d1f448023c6ffc557004f80d9ee05d2886933b0c6f95adf351e18688b80f4c40b70e4a03ae5 FAIL COUNT = 29 -K = 1872ea237c71c6be77d48ae465755a4e0c5652edecc8e1f9 -C = 0b3c466989a52112dc1d4f5999665b16611a6817ab47726f -P = 49c8024213f3b02b2c38cfa2 +K = c670ec4a9f86700e17e18d8c6359a4605415878f6568fa0b +C = 8536c2ab9fea855a2f1f55cfe249fdec2589012a818a0e738bb88cb2329803d58feb37de3f4f91ae +P = 66bdb4ebe0ce41255d7898776ac9ff98504bc688db9c5a2963bf15c3663462 COUNT = 30 -K = 827bc1a46d7e42ffd698f7dafec062b432b711d14cebbb33 -C = b426aaded7b28856ab1a90ef2f60b628bfc2c2a61badf365 -P = 090eea6909b74efd67864283 +K = bcadfd5224350c056d19db87dc7d2fc807b16a775840510c +C = 6effa058a98d1798c88c028841d69e9b5bed0d5ef0a3d73a095a3f20335dcd5890be32a9658773fa +P = c095e575295753d2df234a642c1ce7b3441dd7fadeebc5bf9c33d506f074f9 COUNT = 31 -K = c9e0de3d28ac43842037c5ee06ac9403ae487c4630535ca0 -C = 2a4e7f947a74cb48e548068af148afc4b6b3b254d08bcb82 -P = b64fa8308e0c4dcf3da093dc +K = 185f6101f73f4b18e166d03f22bffcfb66f9364c3d2618cb +C = ef4ed808e17947d19c78b6b4822c342a0d372b19a747fc7e2af6d8ee0f395fd099508417fa55f9b1 +FAIL COUNT = 32 -K = 3c79e694721f45cf1bfe2ef568e6d7cbba7c76c42f66d6c1 -C = a0a4d0d1c690e81a2bb8747cc5c17d2ca5f979b88a8295c5 -P = 35a88281ea2c9688672aa6f7 +K = 2f06c39b991a4dddb342c3f616b218d1c590119f6d13087b +C = 2e64c63c0ee45b03bbdac6c4f4b552d542bdc954c98608e76e3ad950b40b1ecce71b84a7694b150c +P = 80e83d13145a58bf0f790e16fb5541935838d82575d01b79d5f53752b14d15 COUNT = 33 -K = 80b6f2860d90503a8ea8fc950ee55a2ee7a7bbeee37249d2 -C = 9f402e2c7f60883a1f2b8dde553fdfd130359bd1f8686584 -FAIL +K = c5c5ac1dced330fe9809d34a8e01e5ef47894786e9df8f3a +C = b24ca7c041971348cc6611f6d524aaf37d37423624d5077b32f04ffbc772a5a45f9c9b32e86df659 +P = bff8114cd207feb2af7207b6cbeaec4c6683b1cd612b23502b607c4b00f3b8 COUNT = 34 -K = 3f4f3a2664546101dbc47fd561d6e8e5f1a10fffd2d96685 -C = 150b4e5388a0ea3ff308a6775b8086b35470cda43c2ace05 -P = 14c19179cc772bf7c01bb34a +K = d37c6b2aea9cfaf9c08f785d351bfe08b94fa50b67a95f2d +C = b831930e88ae7ebdba147e9c42dacf44442703ff15fcc32820697f980ee62cde71a6cb85958c8902 +P = 5e929be91025d607cc93ae35fae38ea3a065e3f02c6ee9b8b3f7b0ecf910e9 COUNT = 35 -K = 24bc24c3ab2f98ce17cdb26a3a8d5a6c0763dd5dff6bbc29 -C = fb6fc24af09759b5089eb95121262a5f8b717c5d47a21237 -P = 759836bc162d32c312fa7d39 +K = 49521edc09a29df241664e55c73169ba64634d2aba986e5a +C = 46103ac314d1636ba02954df17eee9c7f7e982fc1720c7f7cc21bbfd9428405c23117e917015d18e +P = c5ac1989471f81b99553a5cb4064d8efd298f77d8c52e8053539b0c32a708c COUNT = 36 -K = 6e1df3a3cad1254e92b0fff5bc4f687d8efde4f81f559754 -C = 3040608ba76111c7bba90163abe5166c14538f891ea08612 -FAIL +K = c8532d3fb29f296385b46ed739cdcf16f222997e68278f00 +C = 50665a2cb5e501825b2773c52135bf3ae102c2fdd20169fc6effedc97f9f389a177900b8fa62eaf6 +P = a5a6604a750466ce1b526dfe7fa3d695b10a0b1fc40645c2a09c75732cd607 COUNT = 37 -K = 3dca5190a249e708ff9b235b5c861d6cecf3cdd53b5b938b -C = c3950f1284a77e84df79eeeb4b9f490680dfd903bb3adc60 -P = a5b49a442fb60b39c28e83c2 +K = 6eaded670b798f8f74e3f52f16666bb8f6e1a8ec72077ad3 +C = c111b4499cdcce796afc37ca665b32bd69d80846f32a8569f593875d2a6a7e1cd8fa18342f122203 +P = 799258bf2f873452eb7b0dd01934014dda001273272d2aeb677d9ed55db417 COUNT = 38 -K = 6c6df8f6e039edc72bbb4db3529a39ddb44d40fb83e27834 -C = 0918d65da71558fcee99ae6d5a1d5552dc29ba0779202b64 -P = 0779f961d1ff4f8ff18cf73e +K = bad2e7606b6bdcdedd6c50f7c35f04ed9279c96dd9df9709 +C = 6040181db7cf6a0356b4bf0677c9ca22baa2fd6c6220309456f93159fb622554fe785e6b52c22c04 +FAIL COUNT = 39 -K = 9fe0d65b2bfe98b3d8f635033f0c1d6ceb9aefe1a97d5aa4 -C = 2e14165a98163d47166f9d1d38dc30c9a6a2fa358ba1de04 -P = 2cc0c1ab6e82d9a0d8eff369 +K = 1bcce79b820da76e0aae34e83a8e6aa3df40a0081083d72f +C = cf63154e5be622512a1103b625fe48f010dea2e49de00753825fd5c5fac3b169e7a0f7208d3d7f22 +P = 10982cb85b12ba2f91d1270d047895562a9780fc1702354e40fef5cb93135b COUNT = 40 -K = 6d8a9470bb57318f9d96a17c5eb0e9f9374aa0627c0eac23 -C = 8ef1755356a31ceb5c0a70da8a9e8ce6bd9c03885a6d45d8 -P = 42f6fc05788a81ae49273954 +K = 874922c7116db6ad2e981b546d855bad5adf6b8b5843e39d +C = 31a6ef2a4d3f4df0a55aed750169f366e68b0342c0ce4a8e46f78d9b50844ca2608656c8f5982d51 +P = 1ffc6ae21b87cf0e1ae417277aca9e9b60d8a911b1ec9b9058740b5aaf94a8 COUNT = 41 -K = 8b10d5b5d2b617235e0aefce4e154cbd8230797b5e229524 -C = ab6cd302feeb49bdfb48657303a36cbb55300c6261d78d63 -P = 5ba474b7515c0ce31cdc8278 +K = f53dca1a9e598d73d236b5abf044b56573f5f3c67e60fb59 +C = d3bafd518873e7cb0f55ce4ffc80760a7c41329c23d63867797326d44342581d2eb53e0f95ee4ae5 +P = 3729efc922d79b70fccb62c9cf16668c95170ac1a36ad262770d9bb7ba0950 COUNT = 42 -K = 4a19e8b0633e381de580dba7b0da3aae3773e730704501f2 -C = 4c519bde35cd5aa4a74de70dee48efd89dffe549c97b424a -P = 58e8f90869b51f81aa7ae12d +K = 6a8455f3953d3ebaa119aa50b35249d33772b517b4def162 +C = c98c264314fde7960bc5a6525551c7faebc70721d301d6423bcc933ad12c3e779ed4cce999783d4a +P = 12edceb6be62c07ec66f1da0d4d6b480b5fc937ba13cbc71e674abf81694f9 COUNT = 43 -K = f51068a60a6eef9615ae5602a32cd6c9247e42dda3d2426d -C = 73c23f153fe3e8d33c1f4172cd6b75d278b231d9670f13e5 -P = e3aa2c19381be4367fe5b2ce +K = b06ed91aa3ca2e931ee5630eb0485551bd3774b207205b4d +C = 06b3d8561160d4174b559e7bd28d98be3303ab25edaf3e35e93038366136e6d0498308319d61aabe +FAIL COUNT = 44 -K = 169f63442d33ace0be407b7dbb967112e78fecaab8a1fb9b -C = 3e723385006850815585f440bb55a65479d979044dbec4ac -FAIL +K = 77cd7dae2e2fedf69bd14506b829d77e682c5d9df9c66794 +C = e10fbbee22820a48090a6037f3e8a3db307c63918a9204610cff03c094860c94cd6af799e83208cc +P = abc105cae15bc8a7ff171d47c07a17cb40feb54729953e931b2ef6ab1ec7ca COUNT = 45 -K = e102ae1a01cd6d9cef5ea8ef27f6fac91f54310ede2de004 -C = e0befcb918e26661fb7b481944e4220d01de021a8a96a516 -P = cb7e9642bbd1f00bf403c99d +K = 10bd943dbfa3e79e3a14820e287b6274ba5886211145199f +C = c5eeea91935fd4c95ef372ce70fb8118f40bc19ecb11cccf458c25b6f1deb310398656e99983f779 +P = 91cb80f6edc88a6e5d631c94860e3c7a67f08f28f3869ab24730d9157827f2 COUNT = 46 -K = dcea5a2522dcf612e016c48ebd030ac611502a64db2e0ba4 -C = 0e448d428942eca43d4dc2db311adc44bde3867fa3cff9d2 -P = 5048b8a338048fef44c87b3e +K = 75be4e5a55c7dd31917168bde850ea5af632f807232b8266 +C = 0550fa85c82fa50ed0f5fdd9acc27788a4a19f9cc31cdb373c674cde24cd139d3377c69eb71a26c7 +P = d664cce7958c89e1355d2c8fa9c0b6e7037e20c17e2d80e7c746281eb84568 COUNT = 47 -K = 78df1615f390018e62c8493b84202f0965556dd7e6360cf8 -C = 1ee8c4a9d2ca24458aa517184c01a76c87b73ed059dfa9bc -P = 6a0c5994a11d71ae0dd5959a +K = 6d4df63ba7eb3c2a3845edea8354eb8adb05bed4fb839b1a +C = cc068a175c4ac212b3975e71e02d12ee77180528aa49fe3845e49659ac46e088c0c2ff1b0e1d2bbf +FAIL COUNT = 48 -K = 35507077996ee68223d53f1d41f70fe24fd9bf8b5fa8a094 -C = 5d933553c41509f243011f5283093983a782fc8cf40747a6 -FAIL +K = 14ff7b060243a073febcbbf5958eb6c1bc7657896657be55 +C = 9be504547ee712459bd79cbbb2cab0710af76f1b99b183138e1524c17b3b0b6547b9d217647cf3fa +P = 27aca985b8b68fdb495bad6e5be7e86b4d90cfa36f917c0c6dae633cb40cdc COUNT = 49 -K = 040e9d13cfb4ae8b54ea0413c54c1300cb60522f8a09ff07 -C = bc0241bee4a4a6c3d97c244cc86e05736e3e4512e89e8bca -P = fe8bae42c8fea245ff20a267 +K = 767c2366f6b39bfff80a89ad1cbd9009d32ab630b66ae2a6 +C = 93aa913d279182c3f632773367774361e366717c2767b36c300e29c138b339b533a03e12a237f0c4 +P = e4853f88431a18da44f9aedf5547395f1251992aabbf01835274938b2bde5c COUNT = 50 -K = cff56b7f8501c9fe770eb45f439811a93d3539054fded50a -C = 27ccb4b05857649fb643a0acbc9dfc1d0b2543b63a60c890 -P = f7834d211df0009bc477bddf +K = 8dcfacb54f13f85883d4148a3ae2f4398553e81398347680 +C = a0eb1dba30cd8525cf75821f6e35763a3a6337608a12fc87e52d69de1db3b13b360070544d9940cf +FAIL COUNT = 51 -K = 377911982ef2315dd110c7b38dd7dc6372e6e8e1f1bf7c69 -C = d0ffb751cca7111e7f67eba60aca1b9e1942932695fa02b4 -FAIL +K = e19adf952fa46396571ee97c20d77bf2645d2de62441700c +C = da29456a17fccac9c7643a06ed1fe5e9b6d900337dfcd2b8f7699c828a564117fb8043ea763ce04f +P = 415146dc9ab73a8377fb5deba366ecc563278e0af72509370f296031ecf853 COUNT = 52 -K = c31fc24d724b810059643bfc30ec14898fd0c46b158f708a -C = 50aa68b1f77bdba41a5779306087484f9eb5ee9cb4b107a1 -P = 447725c6f7fe3a25a97de0a1 +K = a8244716782454d76feb81cc2c6b6bf7dc96bdc896a7878f +C = 3a3397be9ab82ff7d7fdde794e0d7f19b558aa586d193d98ff3be1777c0f3dfa78172c44a611de1a +P = fc7217e09162ef9a6b97078d2bf6eae9476d6bafdd02aece115e2a06379f1c COUNT = 53 -K = 488426ae3dab37d8b2a38ffe645dddbc644aa84c8f1c1494 -C = 144e62563d6162a262b8968b03022d0f9bed8070a5c064f3 -P = b68a9676b72384c265a5caa0 +K = 3047b1918acd0e2ea4ad6e90bccb7fdc8300a19aae60d669 +C = 868c787142b9ef4a2586b8025599fc5cce5b0ddd8567373d34cfb46a502d776965b0df49d7e4d677 +P = 28bf933ce94f4e49d6f6a66af82f46d61b80e87b29019be0a2e05a8e56c4eb COUNT = 54 -K = d7dc695402c580115153044fec2522ced69b4e4c0e1db102 -C = 03338e0606aa824423ae1c2886f9190be1cdf9894651ef42 -P = 45280553082362c9fea893a7 +K = 3da4c0dbaae42a9dece01caad0985b368bb7b3b2237b3382 +C = 4738a1938ead25ee404eda779b726c0fc8de8959bcc72a274f24e37cf7a9e94b9c17f7c2a21da176 +P = 3bd3bc8fc8395b9f1d55558ccdb7f3ed8ba0d3f0be7b0f8082f65aa30ac9c0 COUNT = 55 -K = 427ada85d00877c52376d3aaf6188bcd88cdb60d4811adef -C = 530c765daab4393168b37a47f48aba058fd4f348161fe4c3 -P = b9f3b8ce0e423fceca32a931 +K = 34ffc6fbcb5fb8e8cc36c84cc3f1a511729403f9f59c6a12 +C = b21f2add5855f29006e75dc35b29d3bdab3b40f8e9c42ab71dedc63fa4d8832103bde8c919e1be08 +P = 28fc6bfbb9a328baced41f7c43397db96cb6bd720f58bd53e433f817a292cc COUNT = 56 -K = 0daa68a0daac9aca3aebf4bcb3b564e1eb6bb769082525b1 -C = a648fb2e2b0f0a443b0cd0d5dc550137a5e358543a278f4b -FAIL +K = 0838f2ed48a2240c7f4638171a15f73bd447ffbd13203230 +C = 3ff14d614d73ad711af6dd6f49b45e4425d99de139668057d6830282505d4e99f0b80073e0f13218 +P = d3867d8ddadffebe84b97b13cd145f77e7a2687bec75aa48676ac9edf89576 COUNT = 57 -K = cccc8cc96dde832febaf39959141efe3a643a6c63bb25c06 -C = 7ec39ef261e2d94245a99b5412432d1c1a6836bd406404da -P = 959106e5e8c7bfad1ab4e8de +K = fb5afb8427d7ad13741528218cd740af43cc7dc880aacb07 +C = e8e0ea8035ec9928bbb61edf21cc76f823771104b24ecf6dea224f6e57ef792911b6e424a8d1248a +P = e923cccbde202b340c34dfd27acb9a4955096663304474d03003e4a5a9e0b7 COUNT = 58 -K = 2e01aa879707570c8dc3add43a648ad6eaa85c94470d4657 -C = f8a4792da855f8d98f82b6f55fe112d0c6143e1c3f126ee1 -P = a31c7dceb4e45a1507ae80df +K = 465ad1ddfb97747f813303146fadfea062cd98c23693ffef +C = b647cad8880d748a5fa2aca13b7472190bcd370aa773992c391e25df4f994c279c36b658304d2619 +P = fef09119d8b09a15ea0f29317cb7b6787f6d042c287c9f6b1bd1e338fddc5e COUNT = 59 -K = bab2bc51ce29f449c920bea5256f784bf1daae83f0b4b952 -C = 76a44040df48a417cb09e0a521b7c0adf703ee654420a546 -P = 6b7f75bb8ab8d6c98d743e18 +K = 458c246096b3571ded4a025669a1600d99922f2ef997ef48 +C = b55d00bcc866791cc64b11d287e744f7943dd58b39ac09b774e011470958688943deb8253a0d0851 +FAIL COUNT = 60 -K = 226dcd0738397b4e190f8498c5b7560179a752de3e6609f0 -C = ccb707fe4fa4aadad2b88033c0a1a0e5a787b4889b818152 -P = 7de8f60087637ac32477ff48 +K = dc1f2cb3efb5d8117447f1329465b712a930010e9bc66dfe +C = af67d064b26960f08afbc30e2e35b14d33cdf410dc2d7fe020d2e4c12e843a6255101c0b77ce0bd4 +FAIL COUNT = 61 -K = 80570ac592e02743bf93df956aa1fff28f3528eedf1772e8 -C = bc795248c5a77c40c8c47da55cf212168f8bae545b66fe5b -P = cfc062b30edf3d5b75491bcf +K = 59b3984348660ea5e760ff8dc0a2812d9212cb0105bd86c3 +C = e6ce3f69319594390d5da0ec71cf8873ec6172659bb15cd0caabc3798e133c06d16892d659be6b06 +P = 93c1ccb08db7ed1b0854f5329725479e3cc34ccc99071b75c9cdf9d610ced0 COUNT = 62 -K = e470d86c9fde8ff5883809c66efcdf8992d62dd8a716e6cb -C = d5998b065651cb67d4a0b472231c473063aec66861673467 -FAIL +K = d3cfab170c99118089286b645d8cbf1ae125ff932c4e88a4 +C = c82966ec2fecf3528ca93ede0340135e3f87c79171a7df68c543087eb87fe58d5a0f0db8b6191472 +P = 0c1d558546a8751293ab23265132a74c1136da515b4b05d53802006d22ead9 COUNT = 63 -K = 677bb7105560e586c6b34de6a0f262712041cdbb0594d678 -C = 8c8e8be2b1ddb6e23fcc6d775d215adefdf297f0d85dc8f7 -P = 645e7ba5e633678f0c64b66e +K = f8276cadf5d48946f6acd1c39c892c3ef38befdddda02bae +C = 5527d8b176abe6e7f22155d091641d55d69232fe21bb0ddbc8821f3d441efc84000db3cdd4ef2aea +P = d9140acd4a46da78b709b58a150feb5b3ebe76a022b6a84733a529e5b668b6 COUNT = 64 -K = 741f4972674af80c5ad952c6733c702ffb78a1c55dc31d1d -C = cdc06ee56fdcf834525adc002ff10e3eb826c0057f20699c -P = 81db744afaf68f968e0d27e9 +K = 65e2d8e71cb33815fbc7bfbb0e5cd760d47af76ef799e038 +C = 0ac07a1ac09c6d44115d57c51c7896af30c8fb52b0ea6102ea802ca54fcd644c0e82cdc5ab0c7fb1 +P = 57e9ff4a800565b2c27f3eada6443d9c54476ec598941f93da711334fc0642 COUNT = 65 -K = 9235d1623cb635f9cd2a13cbf85d735f06eb0ce4cbc2d3be -C = a3ce2875b67fe8e9d08ff3ec9aebd9cecbdfcf6f02c24792 -P = 3d6bbbd437917d31f9164510 +K = a75b5b51237b1e2e14dbab110866a07afc1678acc12714ba +C = cb7cc9afe4d1b4ba50eec2df2765b203b3e4e7b8083fca95beb4037d4013ac90787e3ef6c9fe30ac +FAIL COUNT = 66 -K = 24134e564cc135c03adbc09fd9f449e881ccc978cd13dd76 -C = a62f6aae7094dc2fd405f62dccb23b1b118f91a600e6a987 -P = 5e715c36625c5ec0f21dc24e +K = f50d943c2896aea96b626f85e446b4cb2ae27071b45984ce +C = 0f25d844f3db9be0fd93d58fd81667cf173cb3f34ac683e1fd0c739389c6339823115bb2fb0a60d6 +P = 38463fce8bdd2d2fc5651d5a37797cb966020fb9f71febaba774eec1a0b5b1 COUNT = 67 -K = 36275559ed2dce0c9ce83757a66e7698dbfe6bcabf15c43d -C = 2ae9aabf8c79a225f5a33e371fb94689e96d922d67ee6442 -P = ba99c53d4399e1498b584286 +K = b16c813d2834532049380bddda00371591a029e0ccba375b +C = 0a9f48933d5fc0a5f2007ebf97e0a43b8ef2c8add739578f85d5873fefc636d7bcdff3aae22d273f +P = 739b3d1b6d680c123ff36bc9c75bedd0664f444f7bd642f3381339959ec2d9 COUNT = 68 -K = 2a0a654e20131c3028fc0a864021cdd375a18be9f1a21ac7 -C = 97d676e609db048933e16f1ee1063e163057bf818f11a707 -FAIL +K = 4882a78615fde244c49241525e0110c340834ed506e3b207 +C = 7dd878cf2583a23cd280bac74cb934a0557ffdceebb1b2b041c59244f1127a4a2efe15ed8db15ab5 +P = 583054199ace05283da39c323146abb970872973a0e2cb61a76ae4541d8be6 COUNT = 69 -K = 4a8c340acd1b350d302e0492aedb1a7f241750e6d8d8e864 -C = 3351bbee18ae9ae920554e3fe3306ca9744d4a535063a0cb -P = 8103017d1cf5d2f79fe7d9b3 +K = b5511710b129cd2b1b701ae6ca647e232fb6ad3ba0fc70a1 +C = 937bbfe4428df6508d0974361e2eb950c4776841412766c886a23d591845cf14f9da5586eedb2163 +P = 57953c3dfd5f17f97d8b6a7a3001ef53b54c45db2b76be6fc94388806297ea COUNT = 70 -K = 2e92004f1a2ffb1bc6f8e2c30db1cd336808bfbd2bf0152e -C = 14163923c3a4ed03a2187234204e73a0fef1b719d0cdf164 -P = 2f5143478f4e7352513e5ca2 +K = b2543ebf94379eef3b8c90daec9a6590b63cdd5df705968d +C = c0fe74554b845375153073516d42a12f9a076f7f030052d581dc7a2a5fab8580cff153159ffbb8a9 +P = a99c6b330eba1895a4a03ca9d1d6ea80ac1b46a3b315bba33c5c4f15ddef43 COUNT = 71 -K = 27bf24376497ac0e2564c286131c05da20cfc826790eff92 -C = e2e15e8a0c2898820867818fc72ba5ed06c5032aa312d612 -P = 0f5562ca813e7bedc683afd5 +K = ce0f8db9657b6c257205012964b712b1a63d034c1bf713b3 +C = 09116e340b06f8d075f462d7448c2b9254516f4437ea4b7c33a121e0d813e20988e59a3221f39805 +P = 583e823c580aa1e6a7e373c6bc814cebafaafbb8b61afb7b17b7af2dca56f2 COUNT = 72 -K = b8996147ac481a7448000012810139bec9cab745bc59d710 -C = f31748572a24a6626b2577b4656a7a59e64fe25ca06b0079 -P = 7bc5e258529351f2f4cb5b74 +K = d649e3643bcda9621eae62c960d049c709521bec97d766dd +C = c28ab1f2aa718b4d491c5cebb03709c983e8269b9ebab4177ef04c25cf9547ae973c0e4bd6d68a4e +P = c64d3c26514e9af507ab5e90dfb2ac74cf526435869a35ccb68a59177d455d COUNT = 73 -K = f6c3d1b91931b6301cab9d32181ddb627763f81e6a14b139 -C = 73451b88fafbc9b5bc1637520c34deeac42353fd884579b7 +K = 9e8eaff218f73ef93981c055ca408f2a89b3842a91aee38f +C = 4a8c3933b051c4f51ebd3702e2097e148df3538b034dbd55b6801e7c2312fc9867a528580f98d490 FAIL COUNT = 74 -K = f792c0e7bc87c4c0c13a20d3a2ad3e99488a8e1be51c85f7 -C = 0c1714be1f743f006b4f52fa5f88528300d8c926c38dbe7b -P = 360fb00c21ed302aeea6f656 +K = 5705a4afbe367f694e1248810910b60c971b22cbb4802ed3 +C = 8ebeba9632cb1d905a442beadb8eaad629fd8dcd9a6056450f7d4249df6ee2708424d875ffcce267 +P = 844af4ff6625b9f119450b4921ccd48f658824c3a3b57e38ab0ef0e44669f1 COUNT = 75 -K = df4b44a1f163fc8a0de362e8c1b0ba70b1cf6800eac6eecc -C = 05bf0eccc5da7f1a26d93f6ac483450f0d4c223a23c53357 -P = 8651340c29a54f31ecf2aa22 +K = 8862ca52a967ad9ac2b310b72abe711d01a884af3d88e9f1 +C = 74584e8b59dc30b346759b7f1ede6a794a77f596ce44b9ddc9fd060c1140b124c965b665044ed60f +P = b76578de1941ad529003e057a799d31dda928b72aa1dcf8983def500b9a4c8 COUNT = 76 -K = 9ee954c3c90678e04de0a9ac95eda8927087d13536ac6d7e -C = 12c432705e83b15f4e272ab7b6a45661372a862eb9085931 -P = 9a1e0d024e7d6f9fa1fe4b1d +K = 685dbdc21759be16f95c01352ae9b35632a7d6f84b7384e2 +C = 30404f62cba7f606acc36a23ba6db13f7e29f1bb31cba88133496988fec2e6c2b89d9255156c75ea +P = eebbbde878db313fb89725138b0215bd9ec57c43e5380bf09284f35f313c45 COUNT = 77 -K = 4dac706a4e7fec780c0ddeb7fb35b37f00138885720e4d1a -C = 399439f810316e14a031ea776a4c810a3137ea2f648c7280 -FAIL +K = b3e376b9e0c02e3af80eb939e1f376904c8bdd1e25096dec +C = 50c4f8e88c60328248c841b7614d8621fb22c077b7836d5dfbd4d1351df723935159f5c9b8c11a40 +P = f9a9b438d9ff10a7f3d8661fa3caaec5bb2b1246d4b896f8bca23326047934 COUNT = 78 -K = 90de38e5a2c4d653128843657ecc76079f8e0afd567b4e5e -C = da2333d2d89ba4ac4c428c9e1de80603f3521edc2c79a577 -P = bed12f4863558e7f20935e18 +K = d2923d9b6dde307e42c2d37ff57b763d24e0d0e510020d3f +C = 20ebbf8ee3cc9af11318d3200689b410c8bcce7678274dd1e7eef40bccf9fb327fd00a2890b4fb10 +FAIL COUNT = 79 -K = fe69cca941446d6e4e8ac5509affffb1e1c266ba6dbcface -C = 62e17975adda44c96567caf0231ec59e6643e83a923852e6 -P = e5264dc4b87b18d0f4f3aabd +K = e4d0a7f16d4154536a717f70752c01981134c922a7abf432 +C = b301d82dd4b5bfb874c45e77a9f75f7b94d399525bf9837ff16318e9c2edc956a2ad015a0438659f +P = 84eb3f8b1aac3c8ea2356454426f3fd9d642f9571e5047efa4f2501aba2137 COUNT = 80 -K = 73589c3538ad05e7e52e9ddb4c7fc6ff042d634a87ef2104 -C = faf57f4ee7728df704177e5bef901efe3bfac246c3ce8744 -P = 6c868f978149286156439683 +K = d68b7c9ddba23e59ff53cca8b4a00c1ded04d0bf8401dc10 +C = dcbbbcc4b572fd0e4998280159211c44279eec679c5784536d68dbcf813eba2570c4a84ddf2f2860 +P = 0829a18daad935a04a9fc67e1586cf48ef162efefd0361ebdb000b9c4eb4d5 COUNT = 81 -K = 9f34aa35c632eece51bc5a68208519638c169bece6d6535b -C = 8db8af1157911b01c7a508bc29cc352172ebb55f7322ed49 -FAIL +K = 7d447e044dbd1906ec7b779934514fdd495e46683f748131 +C = 96c8f51837cdeee1e979dd2081214b5fa21aa93509a470587558e5dfa94ea00b8ea4006bb6aa3512 +P = 4010178bee1bbd7102a897b3cba8a26c7f50ba597bb222e238aa1134af9f09 COUNT = 82 -K = bc61f6ca59121056805f39d40def525482a585c01679ec95 -C = 30ddb05bc92a28362b159915740c615cddaf2dc579e24320 -P = 7b5c0f68770fe3eef23290c0 +K = 09e5f716b031b6a9324f64d9c70f0fc9bbb16ca93fcb1465 +C = a97fe40f5818a6f6d56db6569a9aca3f355aaa2aa4ee7a2fa624e9fb1b34ff9a22d57090a16109ce +FAIL COUNT = 83 -K = a53e113d93bd12765e3ebebce704b964c1e6cd6e0586305f -C = 9f5f78b39a7963182f8f9ecea176b7a55768b8ca7a0802b9 -P = a97c9d51238f26fd1816b4f6 +K = eb850bc8dc25aab5afd94d83840ebe8c5dbc1974a9eb284b +C = 19a28a67af4eeeaa2fecabc343b50d18544d1a60c04603d580146dd68202d23dbe9a22a3b401aab8 +P = bbb94a391512faa1a56645ea139e6f4d9469919b30595c6edd5b1cc9d9c5a7 COUNT = 84 -K = f06b442bf2da81ef5c168b36594ead73843f6e6b47cfeb7a -C = c6d878430494011709d2e4da4dcd7e35118309465f6ae2b5 -P = aa61b370f159ba7a1e1b1d72 +K = 9f02ba780aec1118678ae802de5317e761c0604388124a9f +C = 93a773f6fed2f9029834f98b2fc92b056db6016ed0fb939f1fddb5c73de6f3d7d9cf47cddb379287 +P = 8a5bdb300a047f5eab0a35cae258d1de83d42b8970926fd39751d9c131d0d6 COUNT = 85 -K = f0e5be51e09fac2cac4b191de492120b500cbc7f7787e8e8 -C = 189cd66b5c3660bb318759f556af3a43fc6c0059572f4d65 -P = 8f22439624732ced961c4eb5 +K = f5e4432a86a1fc17a77c6b6f797306d137c91a8fe7a36ef2 +C = 0cba3342e966640cd97a787e6418c80dffe6e52c9504ca12715ee21c705ea2a8c85ec10e8b7ca664 +P = bbb53021f462dac6989d1cc0a5dc84a3031b29528e323f0bad92106e0804b0 COUNT = 86 -K = 1ba2e29cfe64a4f3187ee93cb933451eaf8e93c738fa7b76 -C = 62084ac74763eb3eeee6712502a2da01f81c9f32e4660c61 -P = 28e27fa30ffb50406daac9d0 +K = ef236d9727b5ed7fcb4623a031154d12cf4fc651b2d98774 +C = c807f76ca35b57cd43aefa6a9db7cb1ebd6cfa6cd0dc16ab4192fc3cfcf515fec1ddfc271a5807f5 +P = 58aaf15318558a0ba56fed48a1035f4486b40a806f88d3e390611b39ec9b47 COUNT = 87 -K = f87e5b1a39de162275ae0d35e44b494a22fcdee887730620 -C = 73d66ded1e273af7de0873c4b63d9ce2e509b448b3f770f9 -FAIL +K = 12b4d3b91e5291c7316452288cdced133f1b8e32d194dd7a +C = 9646895a25d5f29f19878be77a5600b525f19f32337377c016ff649460b5f03e2fe334211468dd1c +P = a0f8f53534e5dd4066e7d9726a06d5e2a8a493b43d5f38c620a952b8d03bee COUNT = 88 -K = 4bde442609662db8ee381aacf25546097748df4e5e3e62ff -C = 32e53abe73095028ab5973fc67e7788a50365228d5917c2a -P = e8465657ca31d7d381a851cf +K = a25162fa00533e09610e30aa42b4983c910fd8e2f1919fed +C = 16456ad892b432fe92cd70549fdf52afe8bcaf61629c57ffae3aba24eea74d75f0ff7231ef2c0ccb +FAIL COUNT = 89 -K = 513c27a9ae9a74d7b81f7fb08c743103a1494b0a2ce8fc7b -C = 38bcef4c47dcf3885b426011fc03a7c5717dae6617d5be2d -P = 76212520923b77b6b5886784 +K = cee8559d559f4eaa261f220755ebbe2da27fbcabc1253664 +C = bd24b9a46fe0df3f60645a54b370593f5449c2624eaf612075bff721237f77b3a1a2ae91f87b249d +P = 0db9f352e2649671d04c11832c4fabf395040ce5e24c4c1919afc0470d4d2d COUNT = 90 -K = 37264cab19b829a01699330ca63c86105e68aa0dd1219e4f -C = 87c2fa60968844ba3153532aab9c1ad57e3e173628689ca7 -P = 482c99682ce37b9b13f7cad4 +K = 43f87764b385c768b944e880f83eaf7013b66d472be7ce5a +C = 8eddddddb82da48f90ecbf47a1784b6cb17164878d2d05f7d71c8045874d39a0e7d62c93bc4516cd +P = d57aef2e20aed717e15851ce01c6355f587823a41536cbb7139d674127b695 COUNT = 91 -K = dd6bf9d9ae722bd6b21bcef529ba43cae1d2e1f09e0d9d7c -C = 88ec304d3d8480ee3de6369d9a213315fe657f6e41029b0f -P = 09556744ad79963e395ff57e +K = a5961bf715c99a5a954c3f1fd45b75dea229169410332d6a +C = 6a4a1d05259c5adef7bdfe56b883b47b3b3087c5ef41aef5c0a5c5760d2ed63ba147a46bca9a3e59 +P = 5322ec5525fe61859b8c28709bf05fe4a428474ce0ef31e8674ac7a9db8762 COUNT = 92 -K = f380119962d5230316f890791e8f2950b410fe213cdb2cdb -C = 100b3c8b0e6fa311b5f656fba7104e4c9feb42a85c2454b7 -FAIL +K = 9a951113f666a28f9fda66e48d50cd4f6de4f0d36aa45c4c +C = e07d1d4bcc6d69aff9f6761e9db26fd11628d40581dbed963f8c2394038f1d1135e020e4d84e3431 +P = b92c085eba97e87f0c45f8ad41c590b7fe4e7c20feed6412bf862602ca8fdd COUNT = 93 -K = 4121e2638a143f9ce00025ebecd8be56e31888a22b11bfc2 -C = fc11acae7318530c73ac046eb3e0c771d0e29765dec5e72f -P = 116036a0c5485b6ef77053ef +K = 5e9c65eeeb1914cc8031f37b5555971b8f103533ace026cf +C = 2965d28c0b38bae3d8cf033dda0b34832108b271d8e4543b181ea1a1068f6424cfea051e9a364da2 +FAIL COUNT = 94 -K = d4a23430c80e48dd04d350fc4bf99e5f37bc48b99c3a8215 -C = 3cff06ea647f6e77b33d2cce65e8b178da1d79788408c01d -P = f4880fbea7f1c027efd79dec +K = dea00c3a32e37ccf185d3fc7d47ac0e2dca30f799d8064a3 +C = d9854d13dddc62eb255d8fb4b4af0e751ae60c75bd6ac965ba9822873128229f8e3bcc356554fe0f +P = abb9ea593fd44b0b5265d428af164b6f16c56bfd42519637ae965adf3763dc COUNT = 95 -K = 7c1c925d5c51b5bc2766029cb9b52f4c52664e26649e30bb -C = 8aebf1e244bd50cdafc5e2dbadf3c0b39fc3ab2997d5abaa -FAIL +K = 3248eb7a8cf4e94b4a06185e622d17d3ca268091388e8ce2 +C = 5bfb77d822debcb36ebad5b7a93368f66e62e28924b2eadcc9820e1218ddc543e1da6ad6d022f61e +P = 051b0fbbb975a68cbcacec0240ff4091415be65328611a25d31695b3af276f COUNT = 96 -K = 4bc960673d81974eb0b6d0d6026a82f38405ada9d6a4876d -C = b17f4e243dd01b14ff589d9cbafca13f849d7ec6ab766a01 -P = 384ba0a76870e303f15724c7 +K = 3234ec0f2585be32164ac091472202cecd6de059e1e20151 +C = 1633f27418241ffec85fbce23876690b5fc14bf9df7acc7d07e9fe5a7066fd7f01a25f71f31b5b1e +P = ddabe303fc00ef70c659575989fc306c7d349e617c702e752fb48bafeca7d0 COUNT = 97 -K = 66f94eb5060b770e4d815b683e9ec3de315cbe4485020973 -C = 05a2cd53e7e3f2e77d9a8a901c20aea7ab8ff48be8f1cf0f -P = c0fc9acc2c73df3ddf7a84c5 +K = f42e9d2ab50ecf67c931ceb234f7354961735c0ad9bea768 +C = 2469c65c80a72d44f42cf7fca32e4b379cd7c3fb943fe478fec453e58d6da818d6ca2cd4f2fd49a4 +FAIL COUNT = 98 -K = 98f4f95483aedb39a100e9651dff66d4aa88756a10735314 -C = f40a7736647b60624d61b1a8c750203701eeb9f0417c8ba8 -P = 4547c92e809e9ca8655d04d9 +K = ab810f9e8508adf368e32152b248ed80b0f12bb224b268f2 +C = 408c42fc8f234a760562e529ebb8891384ce0a246e6a4853de6df9d738e3366a0565a7dc130ab350 +P = 5448e3c92ecfdb639c4e6c81c17c190027e2ade14024f1c864600b11b21b8c COUNT = 99 -K = 3f00fc8b437543fad0ae66e40ac6e3b95406d7ab68f05692 -C = a53d69f420d68a4305232ff154375595062d6e447ab5c6fa -P = c97b844e7e20e82b4dba8df7 +K = 79e71fd975c4db4a5c299abc9c5eff814e7c862eeee18e27 +C = f3bf6f54db8ba0de7817aa0654caa60943ffcb6cb24792a80b4164f3e8313093e13b7a83fb15c754 +P = 2090f7e9feecba16e09303b152eff983f0eef17d0b771d33cffa2b4e320b23 -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 56225873ee1dcbca3f078e5b24bf09d08c668865f91b04a7 -C = b053101b3729cadb351424605248666b22ff78522d06a4e6f133e5aafd22fcddb8f608bc24de94226784457cec3d41df886c47ba9b515ceb69cbd4bea4b33b5d5f8a44c6c5a99702b09f8e6bd9fdf05a373532920c53a2b8c16fced0ba36045f9bfa71437eab1c837f76474ce2c14244 -P = 9fe45a26af48ff67f51db8eb145f7af292a03270fa4c5fc2e49cc8729b469b3b0ca2a893d1903b6122107e1b946a6cc02be569755a68fd731cf1c66f5507177d21ecc892f1220b9693407de7118f72737faeb9ce2f91ea191c10773f6bbc7a6344338c4cff +K = 378e720100890f45a89a553c15b3e24c4e8a515d637f8277 +C = 39c9aedbc709c84e06bf29f63d9b9ad32e50a38635fc0a3aca90ca149e5ab88bbceba42b8984c56a725727f0e54b25dba4f74ed5815ada0007f3d4051077f97ecda865b2b21fefbef46b69feffbf5a959d15ca5aa204d437587bff37ee827f74666c793181cf46ece849830ba49f2470baa69dd764436572299be28cc226bc0c776ebed8ff84807619faad22ca25e749c6e2a391b0cf242adfc6c6399a3b1503c6d2e80b6b8c539b779c580d80402806c7d4b6bf33fc7a4b97ad733d3b8e2283d4f558bd988d5004830403605430634aa0413d480e72e745fb5c30958e26234b46f5a8287af40bb40c1569b1a0ebe6cbcee87f320624615911e4416bb5cb9aff899d77bd5a343d111041360e2fa8c3e065e435b1c1a9e7e2b7cb30fcadb23cdb65e5c0eaeb956cb3d992088e64899db77ae74f57c1fa8f5637d61272ce1806b25492ff1ee8cb00952a26c38ed6abd29bacdac2a2fcf9eb8eea6568eea46d32ff6ada5bbfae5cd8463a99e1f02c8ab2c3d5069c43959b9a0f0bfa3ea1412df206f47b10847094e8d5a3a87f1aec048c4d24f71c3bdcd581640091b16979969d1b6c255974d8c4f33761f3a4783cdc7e412cb93d99e2b1d83668a016f55a6e419693645342befc53c43a4ddc992b798bdee4a514f75ea51db9caabdf6fd1d6b0842e83342c4ffff28a0a99620a9c603f88bacfadc39f9fa56d4baf5ce879708ccfc62aac6c5fe9111f +P = 4bf8a94b6a12a9c273f641078f1d7da3346a412616ffa9ed5d0534d10c06d51f4f938d1f69c10f580bebba7b43aaa120ae1ff4c24be188a821fce9d8a084c998f873a3878931e2b12de5d4d60334b1bfcbeb967a8bd1bdb53d9f980fd1ff30438d5a24eba7f9100c1e87ef36e6816c474e2fa0727614a94707d3d62c6df7590e7629cc7f0654bbaedbb372ea870db7b0d8d9e4aab44fe4c1db9666b9df77443036464ac70e3eac2699b1616598752b2a544b2cd63186ad81290760c1cbf55112355171c0e7b545c900296a2bb99d992194b803efe7e121d6bff81e9f8574a005dd91163fc7ee8c8bc3f6373e62f6747b25c9f94c4b7adc71dcd5ed0361d016edca87183112973d6dafd66f51bb6e8c084386356c9622e980e148328b4bf671f7f88055d32e9bbc8309a4378d9473f6e226b08d87223499c688e2249b33955bd305ec2a4590a66cb2f37de2ff5bcf2f9e382d8efd7daa4d16cfa5a8c7b1dcab7a187d291653486545a5e95fc3d1e413a841fd3a4470689f3b515e3cc306e7886e316d99e4d536804e2ed7a62ac6080018a52048fd540ffe306ab06e564ddad4255f18752d010ad38c004e2751975f685341d66eac4338c322355b97b105cf09977e0822811fe00824f3cc613a35f3e84c430678e8f840cfa615bc846107696dfd3ccd60de7acad4deee8a2aa4431b0c5f55d7160ed54c0701cbf4fe1753eeb2e0 COUNT = 1 -K = d067f5e1457fb822638ee715735437e342b2e78b53970d08 -C = 87ef584256c00ff1970947360f5c7d5d639034ce4864ecd6274b73cf8d20acc8aa2889014e80aba07ba6a27a627a04cfb302df492ce63f3ed85dfa69f591c504e2c54b601e0c220475a79dda849b906f48da4255a2aab35afc5e9d0c8de28c1bbcd95b68fc10f5b0ea07e1eb50624286 -P = 07ba6bda73c8bbe5eb85cd7af29bd0ce33f1e52e93dbd8c9d701998dbfab97e409d9d2b4dedc56d28f937cb3b7a274795984fb6f57e574ccfbf6c90a9775c051b36f2507e5720d54891bca09f2a6b0538a1eab22a5a794425e21c0c6fe7267cc5fe5c7789e +K = c48f4c300f06b30401e8eebb5da32399c86a6d46cdfa7ab8 +C = ad8385ff9d183a5c214a9f0537cb3d9b1958f8353068bf91b2022258b51f02ca2c6b27e3afe615163224250ae806d72028d2145fc227bb9fbdb63674fcc070b30871ca43fa54bf613e904a10cb10b4053b31f75fab3405cb0ad68dadde9b15549c0248498e796ee811dc090335817adbad550865d3a9f8bea25093222f94fae59accf420f00cb65d1175f5ca77201f8cc685caeb80b26e372570b90682e7772cf3c4ddbdf7b3f1f3d429094905c431558e2dd6dd2572ce100f370f04f2b6c375a8d28b87afc525fdba221504d1dcc86a4ddd03a175ddd3cddd482aa79dbcc04ead5cff27edd3aa16aa3fb27895196dd00f496510e60cde70fd8252d7f762a8d9ea1de4dcc0e56a04a5c7f698dc0b629b513d9584a9295a6953809739f2e79d509a2efcce78805da96c67fabab052faf568e099c049a674d8c386e93efa8170418788113ad8def05aa3493af1d4d708c6ad2bb3e8d017c604c30eeac8815222d9daa22ec1b57fa0a34127fea69e44a3290dc079770e990c2f0b11128a93cbe04e55e5611538e20a09f604da0fc43898abbcb001dec459e91a635897b14ae62e95f3bead841cecdd69c88a6c9d2fb44f3bd811722861071be9020ae017495da593adefc6936317cd10d50dcec0e4cd35304cbc2acb3c010ca54090b6f78c2c84e59e7ba52666ad7e31b1c4019dccea8f3840fe5113bad1a939691a1c01439d87fa54e8b6526a3f509a +P = 0d9d78c80db674004c64a81872f42bef31a4b47d6f4d11dc9cc9623e485ad78b6677be30af705f7a4d42bcb8cb20dab9b73d06fdd0f8bc97b8e85b8a0d176709a8f4896d472dad51fc007237d1e24a25a6e2f1518daedf6e7dedf9185293dff761ead4da8f2699ecdfb6ebbe7097f7541b53a463cd3153d0865b07f8cb1684eabd2a9b9bb825acbfc9200cd25168d9baec087ca4eb03936e8b8f1b66550e031823aaf1525b3a268f7ae144061c63ab2d8b99ca2de4804ba1fddf7a353ef47b0d6c642a9f667bb293730b3e281302ec874582f0472281d5e535e5f63452ffc2d297c33939b233d2dc733d034c3ea481fd11713813c92630902406bb7ccb6d112685377ef00a276e58162b0ff9d0f17f1eb7e924231819cfab832d765cb07c2867bfce9e68f38a8a4e4d2082d100a63dc047f1d15e367d552b564b8b9dd8f8f681865554c5ee83d4a049a97c89b01da882736fb5be139ccf5359426f596ca8255608f902f03667ca950dfd8e5e4d87c1ed43b5f3045e972144f7e9776a6ff25f866df8d8dd3b01f29d16c09fe84ee286a0ba327f0f313b6ffd6c3c02b008c677e067e948dd3a470c4d0e3dd3b8c67b4ab66c7920fedcbc054a47b63e04efbb6b58687280de7d3c6e01a239d706c270fd6f0967ab0bf08b8bca4ee3dca710247fb6283713d5f9b6eb499bf87fda7447dda4f76bcd822dd0b0bc93f97fad1ed31bf2 COUNT = 2 -K = c434dd9d34b02b5cdbaa81f1696055d560ba790e83381673 -C = b07a6f8e1df72485d6f6ab36a027f50f2d9effd650870c78cb2e5e7699a0f293ccdbdc0a917348c6d60c3d4597eb95a8c01f07947d519efe9af6426abe05ec11f19e8d8412fede07aa64c5cc1434ee0f7c6a0ff8a64b45a1bad5207ce08032a3e087bf45fb84ff3ddf446c3c3b7e76e0 -FAIL +K = 1e756f1840a1dab1c67612189c0261c9a458180cc90d327e +C = 2e5fb7fc760a9fd8068dc35e8d8649936b461bc6a04559b752222dd202f09cf00843da210c63bb033c4db9e2fc7dbf652c4a152ae84c4f941f13d84cc0d5fdee84209ab11b227cc929d1c7b2e7c354c253860e23e7828c42f2882b42b7b1b6cc980fa543856412691ef0ae47f599caad7ac8b44c22e702817b828434c0baca502d821884edfe0febb83b656cd3698fb40dd015e7c8d68a8b5ef7687c840cdcdb10d18dee2428327763d3defaef2fd1fde71c29e76a58cec4977c81f2296e5cdedd8da0a4a41942e640b948049356ab1690b9c757dba17e02e5d4a90aa813976e3e1d7555b0ec7dbb22bdc1c44b256ee80c647db7368a58aa2fd6e9ac261245671e8e20d751be1c6359bb5f7b866102eecf1a15282a93cdcd51eb00b42e1f62eff42a98ebefae8d1e5286d985bb94da712f4af56180ae93da5f5d2223a2ed03b87d0815d6e0686d29e3f4657359cf221e60fa9c6678003573bbff57252cfccdc4f9cc8c86d8418a366fb22406617f7c60380b6c32119ed968f02a55f7508a2242ae23cc445effe72c1da54012cabcd77cac537f69d801ea750d146fe675adacdfc8800945058568631e1b90b94810e6ac7e452fc4a81dae90430189574d113b0664febb90c0ff79443bf71de20b60b176391a49e1d9c05329fbfcf23d545c141d5e4ef69b39a3e88f1b910952466b8be8daa0bcabb3cb303b98776112a3c8fd417c0def97bfe45c92 +P = 2dad226cc1156a1bd6a174c453f95c04fcde7f9ba68572de095969d9d89639fcd94258cb0e73e1b9d77609a9a75d83916aecfad2813b620c5e4ba9184e4b6c0b0b48ea2b6b1d1312d5ed4223b75f95ae2bc1efeab835017049729939692dba428db377f903fc300a5aaf3283fcd8f4838f15da6c450c13fef633df6cc1230649a10f4c4b62f654e12f3bcc122721dd327d9406b18aa7e1c75ab10dbb0d9b9ad87a7deb4965b018ce4279c9cdef99d57e2d2350d3530845ba65b368e8a9152ac0f809239bff7913d99f893648c4e7690f1ac6e8bf198539e839dc7b8df537fbde37679c9a27269350e6b2757a289511d722b9bd1ceb64484e4a9d9d7d9ae132d06cb58dee1bae11086fa26ddbfeca72b4aee9231099d52103c3f2436a7c9dccdfcf5a76d4a4a7cab355fec61a9bd24b9022eefc6fe89f6fc919fa9f6366235eede37488e91f01b4d69a47cab9ce9eec07f1ebcabad2e43cc39fb2cd373574b848e1476c9b1e0c650cb93e0494f466f574e996aecf5614363c1f7a390e78957f931e90b83cbe6e9cfce3a7eb1f5387979379a39acec74db6c64faac948397d74efb2d2169211f0598c7f586f3171b1b6a4302954a6d115c115b47dbfaa3ba4a73bec1a0fd880517821c2e60a91ddf7eff724229ad068a8dd379d5772f6eb4a34f86d7d7398f9bc8001de2e2aa22b197761319cd9f8315f4d6e1763dcaaeef6bd94 COUNT = 3 -K = 18fe5c108d3f44f083611acda37ca12bd7c29969332b1b68 -C = afd17a6dd544a6a1680da829d183826611f5d63b1878d59234c809ffa10fd05847ebe58a6715327a06c58bc53c8c16e33bebbe92d8a963c6a3b5c5c832211e9fc09c639b3501b47b8936e933562bdd2c3a64542ea6490e83c0f73ab23f027eccbaa70ee4ef0ff8c89c462897da455d91 -P = 6acc1b38eb615f2a052a28ad7e556c3f7ffce5bf0e68019c22fdb2bb77a7dc4e2e00a66394474f1bb78a027d0ab497a4ac0d9e7cc1173208b576185ba231054bf4e5bd319aed98580dfde8f90dbb06ec2310913c9780b5522b30cb0bc1301c3b411c85caef +K = 5649c038f25f63158c1611f76a46c207263f65e5cef48ec3 +C = fc3315e6f82a6a96d472c0b665f2c7eb1c22658f6751ab24c2ca50aaa4e315467992c587d3d5028bfe585de3afca38d713dea023b5db1926c55ebece84012efc25e360c4a0c44b1b2fc0685cd8de5dcf38da424e9d9851bd119500b7a362009a2cab455c83d62f25e50337fa8fb9a58dacf1a7759cfcb0a121732e21676d18def29e6aea8bf85f2d4919bf198505eb87fe6062d4e9b430e7e9360b7da8215c5468317adeff8117914425fd353f9ddc4fec3c59f42b4d9e774dedc13dcfdba5fb8bbb2f9365acd8d60c1c524f5e76e0c1620459210d6f20c1a3bc35774f91e7f1a074629e84a12ddef41c61f8a1a6178b4e77cec30fbfc10e392e161d2b594a3a6852afa70fd067d4af251c40b6c1139ad91041c65fcb4a736ba8c4159806e34863db380a3f6ea82a23827294a03c0d03304bd5aa099c0b3e4bfe63b6ffcc36e2bb8105ab36a928358defaf2cc61f4f492035af11a3d7aa1cfac35d70bc6c489377c4a72454fe5502074ccdce62dd68cd1ff784f98c32c57f113c22e6650977aa02a02cee6996f339c1177acd8d5d8e3e41cc958f3ef180fa2876e55a15a8659ebabe22fdd36e647cc9d1638fe376b5744ee3e899db038d4148fabfb84305d27f5ffcb8f341ccefec1c85b1fba62077d88f73362312300f2dffeff3a38b54279c90b2fc282346b3a1483a4e6ebb7a30ebf427cf27f21ad6a7c7154138c7d00037ccf54db67f8d6794 +P = 22fdde99b0dfacf72647808f26309871effe8f10e179ce6b758f5b73924568a815445d8c869da4b3ce4d38348159e696c79a481f7df0bfe91dca21fdee3d1f39ecef7d135709bc17c9c41fa263a2157f595aa67369eec4e18240c1708d6a49fbcba394ca1e1b3e06ee780d40fa57623a32d5dc8236643f3e94cc56465e1244b0bc3110b40767772103cbd9efaf30838e35c528c492cd1a0ab3f9bf9030010c3964f5f46a6f4ea893e83531b80dfd77b6a953887360fdb38904716c2d039669e084f49097c47ebe5d68a8a33726796ac0aba7fa4d61ee3013b7b843329c073d68a8d5bab6208733bad1cb67c9665de411ccd47f8f00f799558942d5e6a6bbf958b3164be66f11d395bed73c1d918e570b158768a2c3f78526aca50aecc1fa9ed8d9cb5b7bf82fd954589fb7aa7d492d4194e5e5a6f4b175de1efe45e6123af94e07045914b252221ba7cd505b4338f6759d4ee743667ac2f8209655b96b31e6eee62fbd559b5af2c3df92450af3d02833dd14edeb8a1f00a858483c7336b4c9c59193189285011f15528a97f5433d934aee73ad5a07924597484c50a01162b2ecc69be0b975731b588e975982f108c59078e4ec86c4b8505c256897e31570164f0b4f91b586bb09412d1e17535133c7b4eb98855341f74b30ad8e086eb0e4beae8d072cbf83a45a8e3f41365930aafb5c8ca9ae0bfbc0bc63879dc7121767c434 COUNT = 4 -K = 3753018c753db7e63388e49a9d4d24f0b68fe2f369dbb302 -C = 37d405a0aace8dc90bc635196b3a5a7c7f8ea6297d6031d7541ce636c177c597f0156457a61a51c41c102a79c83ccae2253f3d161e050c61e0454203969f864d7a8b3ffa695e4f60e4d909e535fd554dbcde5b8efc86fe20ba08d4408a7639902825280f6817e141cc6082dd3af8c4c7 -P = 88e379de6ab2db833b321272607d233fac957a38a59842fe89e27e71a9760cc8a70b804e6332b2cb7ab39298f8002c72d48ae4e481eb47575b0d9d72a28657e08edc646aed8bb8f88ffff04d1b1e3d5175f5335a15f817552a65761dd4e12f22bf6bba389b +K = 60715c4d898cbc0fdc8a2baa10acd371fef10cff6ee16f7e +C = 8c13a99b6a2a8653faa498ebc85af42e2b412bcb2885055c761985214f9973aab7d436152871f0581dad2a03f1f7825b0b0f7aff05d1f4c074183b0ff3f6c178e1c2fbee14d4453bccbaca364f32796a47abc0e7c51dc4f83b01674b6d44c45a7961ee21513d57a3ce8dd01b67a69cb768ecc1aad1c119c9946b26af8e5dfde790f40b4c5ff458ae40d52cbc3ad99ca0b550d3c04c27ad3fdda63ce130c77ec7b7003ec83c370d23416071c02fdabdbfc29b69171701283a630c162d929a9e9651c197aeefbcf54ad9f46fa4429b416a9010089448b6e7b13a7f4a32ee175b4688b4a6467431f517220dcaae58825f649ca451dd123b79fd1d7f8a02ba0c2cfe9adbb6705238abbaac21cb1c4b6c3113d0e19f1529e287592f1ac2eb6ccec5f67398d255e7bfe0a1f3e89963782d23888a3d43ee15a254dd39ccaabb04edf809f5f4e30c09280f936ebf3120171a0a417388aed534f905d3307c2fba496b3ed39308d3036eaf4b6cbd830ad745078e840fe8fda132eb0d2d1a372b8c15b23047be9da781c76e96954c18b31e56b921cfaa341bc022d27a198e01f1759321d12f0d984deb424f357c38cee24a5f7d49daf3e370aad175b06094f5f998a7bac453e15a668f15cedb7963ba7a0f21540542bd4b13ba8bd7e92b6e80f8dcbee9d8fd1824e30e7ab4d3f69abd2c830927c18487e8486227c50a178f7539ab966a340eb12a49344e8ed041 +FAIL COUNT = 5 -K = cfcf5ab2b272bfdad8f9bde842bed185819f355966ed850a -C = 13cd18b98e961a8c2c6712b9e8a43b91ef03d22e7bb77532132a59c5b922b23810ce5cda73eb7dbe08243f96f60485b28e6e7e603838c7071d983d213ab0ee464392927c5e544cc756bb155ed4a27d53820e407dfefe0b088c26fe454169b87d55639b4a112d529e04f93f0073c8873a -P = e641d768f93048bf3e74f4acd4b62458a90fa7b13354405eb7425730eb3d9103306eeacbfab6b239be12f58642cdd254db2489b71e95d821f0ca4bc7e5e10e6adbb2c14330ffb7f7ec8537c25d711effdbae654431b36d03dd4db7be457c2230b50fde3df4 +K = 690748a5b0e351d9680d5d1ecbcd1fee52ac53ad3dc85f2b +C = 9c9f1b6e4ad24a671db0faee800ded60779ceb927d1626ccda6dbc040e059e06cdb5c4b86fb2b56da2cd076830c8fb7c91cbf9d0ea487315572ba11da39130f29e4f433df766de4099e93623313a23a9738c1c6b17f2297e8aabd8a27b6ecc240af0ca3645bf2d4394870f90b4691847ae5c699c1a9afc2115ac741642c45852d64bcb4b1f002b64450a8e536c941ff349f851a97febda776f235667361daa55fe252f04039a31b35e2bef910b59cd7e3dac7f8fbb6e9048c8961357f7d51ae538f0beb19bd7e2bd0c90e889f24734d4c3e50647a1aefbc576272069498af2eb66c61d1367a8459bdc4db096fdc5ea29803c94c5e672d21e7f1f68659d7505c510f56e7e46e7e04cb1427ff221a32ee61dd59ea9205da48e5593d09711e3896ac4372119f66bc65df1aaefb320ef968516ca9778327c6c5916de63077e402f0c1ff97131e55190f6b7b26aa0a4cd76178470cc81f3b7c9acfd9caee25605aaba51022d9fe08e9e06aabc40c0ccfb80aa032a60de570cad828274dd217d5d29b60ce7baf5e6273e2d7b2453d39ad7eef4902e17bf7c37c65a00ebdf73994b4c2562144bb39219dc34aa560753be864da93011b99823ad5ff6510426cb62cb8ebbffacc5278124efa2bb9033aba17a5578f14c89b17e209802b7ce084c407b317487dd8fe1df9cf61ee15d9f55e0a4cb918309f3b948cb513101f6a5b5b7484439608bbaf8f3a58273 +P = ddb0e5a2b756f73ed798d46180ec3a7e149d1d9ac4a412a05c6371f07eb6cab98199c231bfae7c6048e04fdb54a36c2f02e0e48d1902787191504506212f6081cbd94767c8a43a0e4714fdbb4bdd1af0fed6fb32aace8b2c77fdfc79480552a3d521f56905f4aceb576bc79dc02be3456dc3bd662147f8efeb78f8c47045c554d3fba58108331e8341d84f58c80d09ffa95d068fa8f28ee4b256347e65d4ddd58b06614dea3655deaa57d3e6eeefe9198ccb9fb3466be895d898e7124172d2907e65cd7ec69a30cf1cfc3af4acc5cd6bd0415fb632bf1a281896df81e3ca6898fe0121a712cb2a023c9d8095d0ca1c98ba890119094afc121c4de0d737237ddeed6e57864476999bc434d8734f5b23582e0b1d7902d5f7a4bd16a864cd3a9670f272fda001eaa856162e2e2cc7bfa0d001e849b72b9772e535499d091bc7693e1dcf9d6d40c3b37ce0087f8f45f87e9d4006c62e10d2bb6861d5df91460cee7539f6ca7470b8768527c85cc0c280cfa819a790569ed4cb619158cc2813155b11b42011d4e314084035b1f73e997b8afff7c50cd522fe96d0b124638d43360a1427d1ffc6b227d6c6e33d7d6fe32f92938c023ee60e81e576f41efbdeb6f6b6d495dfaae0c5ce5af6f802213da0332f0871bf43157b16156ce87c90e6e85372f2f0679faa194123fcb74c122181cbca529d3c26a94ad95686721a836498105dc2 COUNT = 6 -K = 352dfd1040f9445b0f3da2c08e3eec7e7260b24bc1cc4fc3 -C = 7f300a64db4baacfe97171d294485d128bf41b73542cbb5bb6966f37b32dd59f652c4e6b37e6978cac6d017ab42b83ff75ffc6bfc6e727667d29ecb9e92092d007ebf35dd66c0aa336fb80b9491d215bc0716b53f09d2ac704358c930c41d3b6764f0814d862a81c66a68f7014df7056 -P = a109500e5878678eccaa003a86ea30c4101e7c0e896a777d4824e5a9bfe5e7ec049fa05c432364c90716c043c6830586573c1cfeeb5687f4a1b66a958ce716470d110a7170555b6fc3cce3562501c08344918938648ecfe2cc8b3bafdbd64f4e67acaa009f +K = 40535f0a65475b003c846d02950e73d2f94d793b16a8aa35 +C = 5d28690da262086d53fd264bfeed31cdcbaad24fd598301cc9642808a39479681ffb9a5ed214f63f0edba7869b6499cbecd606b94f0b71d617aa84af73ced0d220063bdf610c5eb7d6a60a691a2555cd4d9325ea4b7bb5f3e218bf5bfa91adafdcc9dd051b2f7b38d3f6078c10412098430f0947ebf1e354818ca4798c891023a1398d6e2bfc5adec6f689f5e95885e1745921b87c1d69447210d92a9dc72309058a38e6891dc1acb64dcef60b7046a0bcc427404f1f1001866b0cae26aab1ade1b1b8c6845807223415af07c2d76eb966f7da1c0afcb12bee6aed517b02162a7e218bc17c92cb418e5eb2fbe22acae2dc3d4c098b01cf5c51faf37751a081a3cda861d6bfc330009e47281016c430077e51566d10e9089e139dc80e9fbda126d8792507bb4bc8561a9bf444f80a9602f6152bb2e49ec2a22e82acbb4bccf7c6629a5b90272199453e337a16d3bdf5fd4cd808866d3de76a1896580debd6723f8def305103ed7a417a2936f7bf789c8d75ba1af87f320a2a92c766831532321e43521dbbc9643136713b463ea5154b8bc771bf5c78080f09d400808de428127dbcb295fb2469de04fc64aa3122e6c06cedceba28e05467124c3c75156121e9cccf3c548e7dcee652a104754293c013276abf1bbaa4b6f6d84e54d7118f8f16018a3df29bb9aa253fa34679f9970cad1f6eadacdf1c61fb4d288bc32b4be1052e8800cfc2e2055761 +P = 059af1f449f90207d065520ed0615bbc56570240348ca3c426c152ead9f81bac1c7de341727642b410ecd4a5594d540b2f9bd318b78841d10a943298513d513fe8f2706fb37e92e46dab29083349cd3bd32be93b7734c6c50f16f8bc0a8ec97a5db196b13b11a252c1bd8fb908e777f8da0c7500c2c35b6bdf01bbed4721210438b6bc6299967bd3fb2cf14f88c0c46977951935c8aa3606f9880ade28f4a996d9389af8912a40624a3ee3adf22ca4d0b04f972f7ec7312bf541983f2e11ebedd2f12b59d5131d5c7ed23496a58d857826533de3c720f6cf7abf449e96247040d5d0780a1a1c5e14fa075828bc9b5abe66ddf7355ef89c5eb6031baaf7cd0282f8b6d18e6b95ed83e6146dbfbf5601d58f901637c9c5b3ebb5adf64dcb8544314d370bc4166d731fea08bb624d8080ec00b9a090d91c76687471d8422840ea4744a283decc4530091ad79d31d9023394bd906f12205f6c5d20d4a8e1a8f2cf2f114ca5b9596bcd426c93e60d21e49ec1e883eee6fc8af94f1538358c311806d5d5da3db3a18b3633abcb165e67d52a84141e7b5ae05a416550851f654330c03b7fb0ec07d48d802dfe3045cda27896a750c587143dde526e84c765ab6576e3d4c13c0256ed38c6d7635dbba29737ef8a4a12848c6746bce157c3b3eab11fe5f66fafc8fcee0b91cf566208b2f9a6a5762e465032dbdb6cbfbd54e75e910159c8 COUNT = 7 -K = 2fe71a6aaae7ba1fe3ea9edc45642ac27beb04834fa76bf7 -C = 6e690f3349549fa5f2da96bd1713e9c8844ef726ff246e36305eb504a3a6acef5da1f74ee3bc0504ba9e594a395f9eaf800b3cc198b906eb5f9d6ebdb12258e1f9b5562059c9b40d1a06193dbb3271660ff1fa37b05bd06144c7ded0d111205df15bafb441f6c354bae313012762c498 -P = 3cce74057739aaaf1c1d92fd00af12549c563b671eeb2cb80d428714fef24b6b6f46950ce562a9ed3979bfb2083148f26e6d5f53d69151a06d4f53ea8e2b0d78b881a78704fbbf3d183c05805f9389032c79961302a191fbf689240a66df6196f37291f292 +K = 025658debe0d3648c9f7c9d64fdfa525e3fd5a7e555b9521 +C = 37ce1e12490f5ec0cdb2c5473996af848319310436ea687f00cabb05f8a850516585a1f71ebaca468d5274282fb2ffcca9e619998fd8b74bcaa79b26631fd58b92c841bebf3060792920ca5f463cda92d4d5ec9da128dd1695c85627a66f9cb3ed8584832fc9cd447dafab91ed5dc9082b8fe6a94844ab9b836b24fa981c0a9bcb591cce1ae73fc14a2b6960e006f6d99df7e95ea568d0a1a5fbb1016e87b7ab85d715bb7ba07dd075889e75b3b2cb8bd97e6c2b2da99bc78832aa1a18cc7150e2d6660d159bef61363dc314b0a8ae7f8d50906a3cd7680e51bc409d5ec0982aa175dbe2924bf428c0ddb5ac4a6e0f100a9af253adef92fdf76dcd6834812697de58ccd29d6e760262eb83105af9b6d5b5543cf1ba1755deda7e702d141da3b8ff18234aaff36a136892a61ff50ea1255c75e2ef99f8b50bc1cfe0c1bac7437578f4adce0ef138b6c9c1924ebeb1a055d710e06c7e14c5172683cee5e7dce6613ea97a7dcf507a0ee956969c2493ec7390aa81873b749142b62bd7ca283b80b37301baf581c9c2ef41cf6494b7bb65031a44bcaa9fd20fc0f12314d9017b70453c92274881b1c3bcef8a2739fdddbe89007e132f0a4997a471d72aa692423f886625307f66f64c9c1bb906e7f7622bbb54ba4d23cb60adda03ea0010082757e0bbb7c225322debe23e17a1e62392a75ea31909c067f1cdc7b3343aaee053b12a1930c2b678740c22 +P = 09720a18ca8cc4b4dd18422181ada4c73f13866563a2d47b965462bd56fffa6f82c15ed0fbf2b8aa0da94b567b3e314e71785f2dbc588667bb583ccc6caaf6f0349ca862161d70bd46f2d8d3ccd37949eb1f9bc954105a2aab8c494af3d2e3420cbd2406da11fccc9e1f54becbc2c2053d9fd99ada4853b95de30555f2a07395bd8f3e3dd0bbe01d2955dafcf4f4085c2e4001c27abfa4b9bcb90328e0b8ce90a8503b3022199b662379891208b6b5fe872ca450ce9312af2f177f6497bfd5ba3752ad88b80c7c0f4f2313368b004008f43add6819f0c824f6a26aaa82cbc453336e0383bb9798991995cd9819f0163f97b56491e240fb31ff286ded5d9a5bbd30844c5d880c7050569c4d72a75df8fb6f173e911171afc6d804c7791f97651a1c42167a03c69657b8930eca700a250492c272e1e59b9306c51d3c543ba77735f79e6abd8c05ebfd4983304667ed6d7c32153f7095c107f40882bf113e7a3f9a3a73c02299662c1d5d3dfd417ca5a8e7cc525954bd3a640a88d827752fb7fc79767618850cd91ad5c90a86befe1f69a3a418083003ccfce06e60eb0a4d7dfddd3dd2a5cb95e8ee3f3d80dc54d2e324ff50e743008f5758b694b3f9c63d058e082c00c012faf5c605b713e83626b6c2f2ff1a2e5477a952703074289b462205365dbb25d83f0319d3b4ea3bb863cdc40fa98a8f1ce253b467ee3581f618c7c10a COUNT = 8 -K = 85609d502bbbb9c823bab71ddd57f6b970d8b73218866947 -C = 0e2f3811feb325aab834d0fa4c32265df07bba4589a90c2f9b1337c522484e26b0523b93e58134f23379022e38f9731a7a62fdad37173a2de8b42fe6049fbcec37e78ef9b8cce15142cbe5bd4dc11cad015a1624c512fd0728badbce73f275762e6a7888444e5e5800ca19562fbd05f0 +K = dc0936929ba23e32611bd2f4de8c93d0e4b0b7db3f76551b +C = 7caa931a8637886ac4b069a2fcb6e955014f67d1b05c05f183bb4decbbeb0742c58033550abd8dcddcffd8ba9ba49b0d479ef50ea555be0343861fac3b76ef25b3e8f0300cc0e7bd4cac101ba2fd11611574c154310a75c5daf00dd2f72604b18237b85f3dfe6922fd800bff0040bde688ee2f0d31135ccf338450e56a06c22ab16c44666836584362fc04af263c70d9aeb6a6d7873a56c9968256026909f51882b025df5084a8041606ec1884b3ce1b2af51fc6b5872e3cb388d7f1d8490dd9db63e8badb55f4be2b813c49c3ca4d92ba14d7fec56437b4fbfbed8e0528991bf679dd1cd2eb27d077b905bbf57d9caa96bf98086f1acf445d25f8594d8ff15caf479f927c7a15e0e6c24f67acb240af0bbf49d1490a6995346abf3cc34f9e7adc9c8df86f91900ee8995ff2b7cc72d3a2fe4a66ea1e46c28eca5f16b67d26f6577b9bf62b8a0debf476250876fbe2eed0258f547969f07f03267eaed247fd98f407198da0eb89781eb3a193ca12de1cd3ea004d72f60612bc6821e628d146ecf700de6a9ffb39988374242a7d400a13e4c2d9bf4ac1f6fc1182314ce1602d547bf27c7e6aad26be3b47a140156ad7c48351c849854f0c0b610f69a2a67844249ef807a36bd34e9db74bb4f0ed83e0fb6a993c8c93262eba034876f3c58a71251e515b226b26df4b9f05b964434d1fed6ba852d90005617eb795ba02ee251d9c74e81faef19e84ba FAIL COUNT = 9 -K = cff22147b1a661eff4e394e18cf006c534f5f3cc3e4f0e4e -C = 7c19c0a46f9a6f04d30dade89cfb61c0be3b4d5fde08f8f5f90a6825ea9dbd1e06f56a2aa625fc59a0470e907d797529ac92d0ab22d4b2d6db83e026b257a7480ca5f034ebece83e41bc3acc4359b3c4e17ace8b7f50e08383f5b708b0e0e77037dfe39429f07492f622ec3f25a1e622 -P = ac041e6e6bf3df39d29ef2f9c566ce72b0a8fefd83608e662388d767f34c57f44db0e07a7c5f84b0f3c062e607c6cd63e7562667f200b4c293e85226746bc96f0ee95a8cf2582b5402de7638aa589058684c1aa6bddc89cd6d6be8be0d576224b6603e83d0 +K = ef4e9fab9ed16335df243b170ed492831f735137de2fb669 +C = 5f50b6413b33d093eb2623c23d0898d25b50d195680dc0c431f94924a52ec78667585b9eb134a513affb15f58dea59c384b455c1cf815625dee75cf12f0b1a989fed01f3bf2fe33c13e1c67c4827bc2f3193f0c14fcff2ba4fbdc7ac2ac69eac2170fe4eb1292f3d8455b80a4edf507220106e9bfc10e558d463a39efadec629e6716455dfb733db94e24939426b05b013cf4c14984d18f1e21ed8c0b8130f82b1b63d86cda47e7a7138ac2bc53f81e1f278e971315ecbb96593f0407e487323e133579cfcfb41a3399cc219cb6db9422c2e3a6e1018144f15a71fe1997506c4ec4ea82c3c1bc38785651bdb496cda7aad211d0096e54e9756590c37d9d0a423b8d5d9f8ce8684231a409f5fd5d1b1df69e035d090d4d1ce6d8b504e8ce123da6d3de9bc0644d9369f87950d19702e0f8e87051c6408c2cf42d85151596f997e93ee5d8d4ffa09e22d25ecc5eb27f0d429742a5850b7fcefc8fed959864b04e6066951105bda8386b5984ad5d2490302bb05c4515262e36ea58eb4fd749e1a09dd8970087bf8133e4534476a07d49cee27a4dedd4348e0a90fbe8799db361022fc8162bc97a4f107f27174c026ea88a8e61dedbd946bbd6105380307f01c7fedc0d02e93ce983fa36be4d70ee489041d8e4a9347b11c395504238fc260977a5db68d1e5a20be86c24b17cbc1a6b5b690990db3f1bac50785772196a784b3707340c3e2e24dc22317 +P = 3457c59b88aa08b502ebf62ce95abad4735fbb251267a4f0da843a18813f90bd0cba888bd23c2e05c9365639f06166f3d6167c72de6adcc529c30c2f247f5bc16f05c59dbace7ef754ca0aace401f5db5ac66a379e606dd84443733f1a2a7cf6f8d7ffc36b4aeb7b56f3f24e1cfe8aefa43e8280b58ba2172445fa1db031a6b99c521b1b182b5e4edb869691db3dffc37d492d03f1d25298309f2f82eb74308c614d157848229f776ddd3105ab17fd9fe82f7e962f5832ddd3cfbb52e1e649bf596553e1985520bbdaccf0a944cdae671f440a98f8906b1d019378343299a4a9f1628a3ab399f5720a3941d13c40cbb560e5fa64a235f6691b8e1d3da7d25694752012364d514f7aab35b8d105a3a2496929206a749325652c931c6c1df05a85c68cdf14735f8222e104dc1e4de09df09556fefea686f3bd63c884c778a14dbc6f58f93ee90433d66c90d8b4cca5cfec42d6ccd6ffbacb4844de156f8f2671b75837860d9a6b72e81ccf6ac5a1c110d1e468b0a2d112524a87074d54c275ed2fbc8f06ee6b79042ae20cfd223cd5607ed033ad2a67bfda39ae76839df3b8b0d69d168f91417b8759548cf020320241b908431b583189ee80baeace6e2f1ad4fb7a7c53af45729340f0b21e0464723016258df99e5a94b188853f538b597c67cacf4d6564d0e66281f3ba1225d659cce030a1f58bffe97a75b68eed0f78859647 COUNT = 10 -K = ea458bda65d3f566421757aafa1315d812ddf06ef2c4fb97 -C = 0ea06582ae60dfc5b04f06d0a194dafd4e5d64743b0ddeb52fb7bc6e05b7232db36f566c7c4516440778b2fef69198b75f452cc93326ded62076a327ff0904c28cfa0ec1770d7f1a0eda32c11bb076c6a80a6c4e8b9504cfbce83dbbf72ae2266902dc86da0f949af6039109fe99aae9 -P = 0b94d9cb74f508dcf59d53c71cf367283e82228ec2de2a12d52d4bdf6c37d517eaac7d66a27b50281c4da0cfb1aedb23611541ea01882509a2f631e156101913148184983e2217c1caa1399a6f1b08cc7f292c5255c8fe4a9e89b7efbfb1d33add465ef0ca +K = 067c9157cdfa6aa74f8e804c90793cabbe6320cb0365f8b7 +C = f1160e72e4fd5598d89cbd0841a23d2ad10be96d998efc56138baea53f63fc68de9b5b766a93ea7284d0b8ff68a010327b15935175b5b9fb2bc532cf64c81a1629d7aa13edc5595f0154dba8a1ba5f961d5401cdcfb9cd6648f9bd76838b0e776a26446e93cce2b054478262cc70b3ebe69dea186435b0c6f3d517a7614cd5cd215a1210083dcdc559a4398c506c5dd84f8afb931f27e0484a24bd5a2d3cc4fdb3e0220d89f1bb349630e4c6d3de65ce18f27e9755ff2ec22ce01ace750b1f7bda386a840c140dfb979d30f13aa2a083eb83b66dedb8a16d32a6b435823bad14e95ff43f968f8abb02d5a91fc9e324052f1fa551ca9e0ba21621ccbfe3c807ee28ff779e23bedee7415d5155d9495ba98bd894b05d7e8fe08d1e52521256b81abcb6a6758cc0479dc2bb1225612a2575a8eee74b198801431b65764c7c2fdb7df0696d1c533ea8fc9c25a293308b30db0cf05c71ba4bdda90243b4ecf0e849f709fce2cbd87d020619206f1522b39c547d823b4a6d3bc6abbc7ec4ce0dbb793459b778dae6438c95d5fb081eec38d947506f90d8e5915db12bff824b1184c9d97fdeea68251f5696b0a3887205d662c35dbc2ee7b74ec0aa6910dbe0d67037bbdc5810a0fe245a9d82069518a6f415afc61ba2d9edd14c2bafcd7820347d7532610729ddbe2061f9e8afa38d6d942bcdafbb30cf74f2d92bf62166ca8465385396edf9b694aeff76 +P = 352bb5eb64e4b122be7f86049e60267afa8f73f5d923d168415acca98130347d87f1814b6426541bdbbf4ce795ecb5a47d9ffb92734f179976a9280d3b9363bd9fbb3efcac6d9ba00e5a394446734e875cd7e0d5856370a91cda7a3b3c746e6d8e72e3bce7f8c47651f586f5f00240cf1c96421a9ad39a521ec1912eaf2daa63c52560ecf286e8e9be6d387393ca66ff8b502edaa741d99b6f090c907c2250281bc0d9ad7edf52c49b2708b3ac693f7597445874ed82ed073033f7b6b825a2b5c3b1cf8f91e048b319977787edbe8b6202196a72e5e586776ed965ff35fb51b4a072c5b4269f021f5ec3c6d46dfe3460ab9ae82a6f4d1d5e601450b8a428d59841f82dae390ffb5860527d93a86fdb2dcd9b9a205003fd8d11505629802f0e4ccd0e10684cc894f75d04bbdc1ecc613ad9a2bf98066ddf49d8bed9d09daa04b93acb65dfd15350c72d1472f5c4cc73ac3c601f38ddd7d7ee16cd9fc53b8f692a82e0fe0624ba7d14a5aa1422f7ca81d1ddfe976c7aa9e597b2d5b5373cc764140aabf51a7ec2c5954de754fd63896248124105a8905cb69b33678c3410ac4964126755d96bc717fd481706c3aff173219763530c1fbb92c76f11308909afc61fbe9a3e1f18f0194de93ab37594f77d05621347c62f9bb2b4922700539a9ebea1b6dd7099e1c1ac3393e378de6e1dc0fb9a00535f1a6f14307642bd50fadb8f3f COUNT = 11 -K = 0324bd6a9bf3a30ab5721f18e298aefb162b8baf70f60ff6 -C = b748b5db4b2b681830cedca51e6dc32f348fb082bf48de36865bd14165f93f4afe375c8584c4f67dd95f19a136aa3f7426a090fa9430d1ac90d6e4eb9dfa0c0a8309d0c49bfe3f41550fc5609c1b44a482787bb2a8aad8e5d704eafa19ea76a817dc01a673d147703ab98868b832186a -P = f836dca1a5b0ed39cb3773e71ab7b022ce7c03b16c16f097e9076906303d8255ae70110db85484ff45f908d32eab187a42c6aa0386f9f7c2d0bef373b1d335a199fc41ef71ffbd01c6547576a0bc837c24cc5c94a3b2cc64d4973f7ef13ab2b7e64ae0b456 +K = 17941b55d63f7452c6c4f2001985782fff6fb7a128a9a1cb +C = d944ffad2d2cca328ba3d15ec145ea48d23b64bb21f3c13f949d542f1fb8f2f85fc725c9e640703718677716c704d91b60d1357d989d243a842f72a5675c43eaaed75ecff7552e915d9c5cb9c1caf5a61cf489c884c591037d73c2d93954df2c5659820c9acd808c42200e5a4dfef33eafa0b8b99224f155433d71f733b00d0152a13bf1e8ad82bfa1a743a31ecd02a1505f128fcb8237609863d66c878242e491a2c039a2c67154d76f561d4ae9f5812a61b4d3d13798fed130fe72ca16681f04e440e2d62f307770a2fb8f5cdaabea19f5d1cbd18e6f95b284c05b50fef95a141712cd90a6d5c04e2e3d5295b8d0605e1950e881a8aaac678a7aea9e6bd45a9e7cc78d1651cea41c3befb373ddce7eb6dd30c81dca9394e3f2c166030390e8412caf75da5bf05eb56e973f0a2db1ad056da7d3a773e8ee23017d37142641b9ea95d68ec152dff1974fe22e4ceab7f11365c8af6d0b375cf5a677cc9ed4a022a71e8f9943a337208d336d34fa9407048e0961804dd826f686cabdfe4a7f6c594c3a59e0d56adbb2bf6a792ae098eacd059d45301ef8a2cdc28c22b69d7b7869a9130cad6715dda1214ff3bf706cd0d62c8dda9057e2f0188f8e89e039eee337e7bd1d2e63aa41aa0c28b9b8685c06c4c7e4aafcfb27c27d791467cb3a738deccc6caff0d515ecec09ea6d2efc7abdccad21fdd45b4d5499693974a1ae7c43f8c1cc2f2929a5f195 +P = 4b2a7daff30c632062ecd7eb98d7e96c5c946372e1b39ceb954bb678a2ade548e6a8f9a21ac06c5adcce9641e2e4a36ee29dc35cc92af04e03bdae99cbad543af891c28afae6ef7139249fd2a00ee17dd0381687b89db7fdc16f190fb7ac6faa9d6fab14d85f14084c4c9be1892d39bc76599a9aad68649c7d368518ce847a3f12c5626d36b0c604d4407e918b95de24507bb4b5d25fb91b50fe4814e2ad1735e33c6db4c420b962014fb799a60755075d05a74ad210744dfc420ce88034ea87c4f4f8224209084a9b20f7df0b7f1ec9aaf34bc42aa7fa6954fada66a1da3835ea37155c455b8c9352d5ad8ac86a7033d59508c92d0e502c2df4fbee9a101a7c87fcd35cfdb7bf5d221c11104f48fb205917762378141f04c831e2594f30c3dd5fafbd6bb655fdc13827c9b8728542779866e84d966ea1092b47eb4cc5a85639b4576df977405a0282fc24f6c67137cfae055520447dd65488b939569c61108b1ebc12020c810b72c2bfa78c8f5422edadcb1d8ca1e9767418bcdd4b8512bd541083ceaa02ea6e4a686a66b1833bab3c1359627ba20d2879197502f7f1bba49303487d2c4391b7b6d7a8d7b52e3de9f6e75c103be3a5fcf1e4400e138924e057730a0488fe90779331f42f7bdc3ed32add84dd00b73050a97a794b0ae00d88cd2548daa1182b49a044fcf23065287e16208eba82f65f2ac7e6f7ebd45960a167 COUNT = 12 -K = 3dcc396d3f376fec9a0e205cd354fa837091571228f74baf -C = 329b4d46aba9c8ba76e0ef68e2bae0a6478fc5373b5e3bd790c1b1ed91c3dba15d293a85f1f14e4a80e49d92b57751b31114a519684fca59e2389246058a8ea0f58f59029203e74fec51aeb5f0dd078b2ad6cf1e115305881c23e7875374dfe3f0198b8097e2c0abb38d7db5654b201d -FAIL +K = 8ceccc13fcbda4d7eac60f92afeb88e18126c7466b7f75c2 +C = fc32e2750fcca472a72be47f6e80654c5c8962924c7b50c2b0d1976548f2c31536c182536db005ab22d26b097a2c086242b6a9f3d897fced29a36ee425057e04a28bc95f3e9bda8b653e5a665933554da3fd363bb03a85456d2aafb91512643f0c6e6c78377503629c9abb217f1933741b9539544a863ad18d6ebca78595f3ba5bf50ebf36690e019179f3f7c48a0b3a8620d1b3ad20bc8766a6f2c66461cb80fe60c125414e4219c4c903538ed74a24d75213458f494e9b3704e6a1522d21eec824f67ae28e6227373b57317177275cdc7e10045c79e3250ba1943b02c9138bfa3e5a46b27c69ec63afa4078eec76a6ef991762ed3790b97dc82a988ab72f5f484d78dfdb0b6a99776426b451b5a55057c7b10d437411d8af93a0fa91788ed7efba73c37cca611ae0c6c9283cff26c9cb7affb081418edecebfb267515c56492864645bc68c6fe980e7945c4dca83749602bd15e80168da16ceb8c4d861ea5a00a170fa134358eb71b1463038dc738774cddfb355506f64215b13f3f3578a3951f9523a9b17de6719b4997e7ad2c8c188c78cd19831815fdf58cbbf4440c4c56d4c7ce4299dc0d0c0e3e260031667729e994e0ad9206030305dd62b3e4edcd9544d3e64ea76199fe607fb04f9e880acdb3d3a2e6d649818f44c1cb97baddf116b73032c0a9a67fa8f752a4cd53ef5928b326e6c7add5bf23715fe9ad20a1c375070961aa36470b9 +P = 58df2554d8dd2b78604713f5aaaacec1cb6f8f1ef518a26fa8eb7d9b7382de1b207c636e466fe480f4da8d16399c4ecf3cc2c6fd81ddd32eb07eb2250dfade8c310ea5ab4876c07862ed67aa071622d84e46deca8306f1fb5a87aa3e4660060e3d49a4d7a55425313197f97ba47eccc00d3398cc1f4ec9593e853175002042e671546fba32a58309b2639d7934acd59a62784079e64346079bd25178908aa7b999660421b3a973b40d9cb766863c441b66b6f68bdf54e1a316eed245339226c6995ae6fa9ee5b89ce64b0d4eedb5888a20e90e932c9023a22c7d6464916ad90e5c05aed907f8330e300187f172e1123f2e653aca2614c0da80afe5315f7496bd9379d2558820966ab3148bb14e3f07aa95dc975ab58015091491ea608beaeb0fa5c3b377529099c79accc856b0cded5cb46f3249b6de6cdbb6b6669fb00dc713d975a0159a7e69219bf4b46d7296dcde0bcbcb17fa69aea00fa678bd191a419c45e4085d8b6c706f008b222ed10a60431b36c932987076617f53909c3a18f7c2226fbf858ebae3a835f8444aa77526f824dfffa0ad0af7912e9d7612d8d10f918374a40697df729a4538f54ebc88381f7728efef749f68c7fc99af3339ddc5a414df060c4870faa94b9c466680ade46ca729d560a0e371287c1227b21fba3215531df144787f1dadd91ddeb4cca52afe0388367ce0a7613d185ee424f103a8a5 COUNT = 13 -K = 600cd41645e813d9e1e4e950a27d086e5b196cfaaa625570 -C = 9d3428077a865d6c3a205dca8e65d1757be4569d6017bc86ba6fd7898f2a5118ea52e4e1388b930b03a3339f7d7c8725e5d7cf37bade90a2ad60e92afe6ec6faefe4dd26974debb6ed6325dbc01edb2454531113ee3a408871a7fc6a194a32aac64a2d2659d3dada60223c4f326a549b -P = 5112089b6dc09a89173d5f492f9ee18e41592375a34addf22252778dcf5c529ffba35c2e01299a8eb63573dbf36ddbefee0acf655604bfc9412528091f5ee232dce16767d580798d019e3e2fd91f85217a784eea9ef44d6b8bd049a7b7e3ef2137f7ac5041 +K = 8653ab0f1b1c6e7350d86f013a54fae737295f55a630a1d8 +C = 513423606a3a6aa1cce168cf135e47d0bbc3f2d93f3bf2b013b6074daa0ebc8f0ee5f83d0171e33a5d7a0a7495df708138a08109d9ccc5b8513cf4c456eae3aeea96789d2661e377eb4de30349f0ffb814af21967f0fdeef78af56dd177fc772ab2015318852e7c1ee95373a6a93cf1058430ce6e1c70dc91e994856a7764e6825cc3f6ed6198502a2a25d1ba2a4f4a8f1329a856877f6c6c206b121f16f31846cddb1e9ec227ecb95f50e0574257235e67cc6f5da9aa36057f6c9a4ca9981de8836f7c215906dc2c44e5a1f855e2e729397aa0707948040ffd30365ec85763c7a13d3969f042e0f4928d81d9813c5f963be771ff3fddc39bf2f9ae78af3028db2769c3947f7f159e4c4c2ebe742a13fe4a5a6f961b57a81ce96ee045dcccaeb8a2c24e0a67d94c69ba4903a1ee1a6ec33a562ce9f19774b1d9af52c5f35d018c5f395fed1f16f7731ac35b3d4af96a72a08410347b1391a9e7a20f44102e1f8799ff1e83b078ae4d61ac2a537f438afbacf1b7f9fec7d536d8fc0a278a763809d539ab116ece602e460e5ae9cb2aa131a24ae3fd5ce1c5c9b637ed4f7720f8e10e0f88f03f524c51ee2b645e60735d1972ecfef3cad89489bf6af873bfb61880fc181ae1ba29664a164bc9a9ae95bab4d9af3c64b108a1feb1a7e554f87830cae3f4e79a646ded737233fda166668350f85dd934039b3f7beecb41a64bcf765f99ab0b06781a29f +P = 418064216960402c633ebda1758a5c37a74d619c2a546c1f795cc31891384240995672373719793bcdee10ce69dc415424a20f85990e201454cab57b94326bec38febc4848208e39bd8e12fdc62a953eb0a5f55d8a2f1db74a66bc8a4ac8590dad360670bad03b7c50d15a5e8ecde60b69fcd1941dcdd41d2380a745776d4f9fa7bc60eb60434b24f79af7ff75d27d85f66dd8bcf8d4aa3c82aad4e75c48ce81d6a55a7de8af6f798df6d06b666cfb6c299698a4f2ae81f7757f42648ed412b05da1855f6601b30ae32a7bfdf95719631191fe935c184ef394fe48f13856919d885dd476cb0a2a8936c0aebe6c36350fa268686ef1ee50c643bba561a752ce7259fa8ecddf84af9def4b5a85dd5d3ac79e4e07781fe1e138e955b46adb7b7e4237a3ab084fd294ed796a7f65c774b7057b49fb043ef3cbcdc1762197eab9010e63f1d9e784feb9c15122bcb3024240cebe0c9a24403048dfbbf5a0fba42cdd21a3c3ab5e41062ce202cd163cb8b5574eb927fcd755217858dc69a8c542943d5660beafbe82c6529b53b7c5b8b64baab87b3fda002ef7d2656acdebe9a14d9a5a199bac50e15d88870d2f61972f7967a0e32229197aa8a1016110bdff45d9a46a7f99c929657f0a2bece4bc559507d9b427a7234adaecfd921260a1bd732101f0d29e0c369c60265a70ff69a2e3fff22a491190ea6204f2109f8d1bf0b6de0c0e COUNT = 14 -K = 3ea6fd70ec57d3e4185e09338617238e1343599c2bbb8db7 -C = 9cded40f69befa3128509de9c967ebb0ff3fbed2b819040de8d706d4ea6112c8b31f01d83f27e92f2cf5810647afff5770a8851cc31ef8dffde22e45af2f44e231eec8bfabdf33adfba66272ca0e3024e1807af4ef9bf1a3dc63b6bee49f186387be23514afa4d6a4cb002f3ab8313cb -P = 4150f39fe46df6d0d036350a2c24f1c939f75442d82ee096d25a256d27d016cc816a879e7ad15eff8401e8a1a270d531b18e4d8bfa19cf156b445ce08921070a0218a4946779ba696f18c74ad6367e070a3c251ba14a02c615a6b9d95aa15badb69653d8e1 +K = 01527e2cf3b2d5f691499e1acf66ca5fbeb7606bb6c3fd92 +C = 822ba92b6f8c7a62ddb9600ec244a1282921f88fc8e16e2b6fd72cd68e090b13b09744a3498c13738c0763f21cbf80228c6f7398b59d51d236f5b06d4ffb66f553acf4dcc0d99e90149fd5dd67fe0732a585dd7358eda99316f97f68c6eb80c187e3ca778b537b77f1ece67cbd90e67a70dd84ceb9027fa43549c13603fccff56ad3d181048960b9d10860b72fa999c56dab1a2c991fa3966a0fefb044b4f4ef11c6309bb59f1dfe58c212267af86092c5bf4dd0f8543290a2465972724c7399b6cc484b58d44d5f8ff0be1893825ef869731a15db3ac995cf4909390db2455a548365b8d0901a2a0f618ffe94d72a1602af97a44815905e922fc9b3c9a4bb30a935c514c1fea28b08067334186882afd6fa0e6e242a8dada9ecc048c2b8a0f7f07e76df8ab651d5ed755586192a24b6a823b737cc81be55c2d755de63cf81ca44c4dbb395a079c0238b161a4d9d93eac6dc94befda01bf1c8e8810fc60222efc07518bd31bb3bd9aa9556028b61b0d6034be8f8f6ca363036d27a8218d5e97e80f8deb38d53748f839f23b207b8ef768177fd0f182c6eb9640f7b2b867e21ede9d7a086af2917eb9df1be0c579a23aff67c104cd6afe73cb8ea7f1915f7c9d814f12451a690495bf6b442789833620d53251ed6719e9f2198d81fecd21507ad64683776323602f48e2d8be012e9753fb4c29dd47d7fbfb83a6da8a2f4aaf07cf03d6ffea415264f +FAIL COUNT = 15 -K = 6927c69a767ae9025cbd019bcace5afb223ad8f67677a3f5 -C = 092dc93b36848daad80a67466e7ded14f930ab165164c50aeb464ff7eb311784372940f4e6ce28cbff05d605cf7a2395e772175e4c1bc2678061bf0aea8b67d7625954f1613b5734cf1231e09ecf0a56306f196c6e0152ee5e241ca10d9372b6e3b45154b691688a0eb65541a7ac016f -P = 6008610bf11baf1eb15e3db350a228520ebdb048c68bd191a1b2eb502607256a1263590830634de3f3454f79884203d378845d343c7c813a5bfc5cfe96efe4eb20c849b3652c3e7513f152b9e10ade7843329ebbe6b1cdb021a21ee819faefa4458ea10227 +K = 00e02f1611e3b3ee52c281fa0607c8bcdd9ff101f2046aea +C = 22f9b91e113d2e69ddef086aa4d9961f5b288375d9b7cad915e9d5d4119b6ae469b7e592c6865f3eb0f48b27407af65e3b0a0b74c2dd859832cee6cbcb7c259b64d811b1dcf895e9b79b8dab04d16c9e71c8f74d361c1614afaf37ebbc8f7e3b7a115450259aa3df9b2040f08bcb22a534d7bca9b62aafb477538920651a00a132e2e40c42fdfb294fc654a35ee08dc739e31692d5be83a77986e0bf5a65ee03c137bd696fdc6c97dc4ea61a0726cf33fe7777503b8fdd11f8453768c888f36861e38e8131b8663ca371c06c28f1823489f0ea6fda0fc3eb6e29a82d784fcf6e7ddb450f90fe949dafee8f70c06e7e7282d6a8c5694c133a1261da64f1f9fc871553d2db8d295df2805a2edaccb66069362100e982d469d06eb3088aeb704681ed35730918d319d69947380540fb11c74a41cb150a849e5ca5dcbeee0cf520e63239f2fdb0ad844d7aafe4d027904ddc239bc228161d3787a37f50e7d7f51bbda03b4e252ebd3f6ae6acb2d18c871becdfc8fc32a90942b25b7ed50527f5cf1dac850eb1a9df982d51062d68a6a92ddb436651217f3b46ff76c3de0da4a0c8384c38e84434d9ed9281b5070f5380f6fd80a90ee54f1ce917e797cfa408d271b40c2e917898736160b5886049d63894ed351955df2f96ffded476f776be7e0007dab88b6f6f3ebebec8a3d9f97e056dedb757de132c6caa212231880136ef09970c48a579bb1d899a +P = eb03ca7b4157b4d14484902061cc3aa736d0a3e61b17991be3a0c5fcf82a1ffdae4bd055f9d86e414874198d9897e53e7302d8158b8daa760a92dd79364844f45b795b8d20b747b952abf16ee84fb126f4e6ea0833fdabcdefd7a5a38e56944f89cfad9fd91313e8a2ff166fcebfdd14c612a61d971d03b5596a9a63a15cff52cabc8fc23fed8c1090e640deeb1a36a844d74d94dfb142593596c802aa2a70965e244941d1e0d7726fad76ab93e3bfeb06f93fa42625e90c963644f9f40366c7a33fab59229119450ee393418465f16037dca4ac291ab30a70fa667fd7458c95cdd11c7d9989bc9ddf85aeadd0996fc16a9dd390ee1291788f3c95e8c110aefed30103c3e82e6b54f07670b79b67e1cdd9aa5d42580589bc3b69eb69f54a692385972308659ec9dfb8bd0bc1e95e1bd81e1aea7c03a80c0f396159578031d5580b0ff31e8142721c8d8fc1365fcaa7bb7fbe7a9cb2b9abfaa70078f3fabcedb22f6700074c5eb67bfc070f085b77f18a68b94d9e6c3e2be9c12b6a1226b52ed0ff91a5c4d731494e7702ba692171f0355e7d7995939eabf50f6d481645668f0bd07b963a27afe47eabc9e8ef399ee4105738c620c498df2f0ecf6b0d67e7b3b3fc705ae0e76cc7964e90b782daa441ab2481a1cbe3633253caaf4fa279ad47c3231d6cf2e688b931d560569b5895c3dd0f08ac92c214bc1f2c5e97d48a0306d1 COUNT = 16 -K = cca8edc0a831ffde77f9d799338b1d9f3324b97e8b4b8339 -C = 68e6c4fab06bd612f297e1e4042750b8843413618871010b45fdd806ec09f546ac03aead941880feded6f0c9547c1d153ce6cf813f9dd993400f25f33aca7aa08ce840138f542564af95eb7c16f4f2efdc93fb057af1a8aa20ece8eb42a60d06518a0440b9f98052f8b9a8df8487331e -P = 8f2c08ae3c189fb29c082a96c5efea85be0292fb241987b5ea83388df11232db594bd73f72cf8799017692b7ab2c279e399162f782a393a1e7d6e0660034f6bbb64970e1ae701fb818b67092f80d47abb5b536ab2d5c09284418f5453327f3778aed6b21a8 +K = 5603806911fec3aff87d82b69e22b818bf29bee70ad1bccb +C = 701cd9db2935eacbe2370829d9bb33fe97b79f8d06bce24d11ab90a998881ceb4ed98f60434b7402249e40a28ef84cee6df77dfb774b859a33c9af936befb076583b9b34c0a1482c5eeae151cceb1c1be8e6c0f5d86279f88e6f1c19305afe450b2649b24ddb93d1deaa57e956e736f31b0c2535bb8c8104c95130592fb7adde0c92fcb48345d00b1af91b04b32a5c1154f6ee9bf97da5eceb4333c816fe57e9c8983530e858992af277a049cd8ff07ab0fb606803825a14007c6c284c4bed7172b8e67419138febb471125090d1b7867edbf4f1f397d0c670edb3e59067e314c42829c12920776f4a3f10d9ae016bb8a57ad6b2f0910015063a6289650dbf9c162f201b0fe049dd0071e1bbe9fdfaea3318ffb782d7cc25f5c31d88d94a8df4731e062b7e2ee8bbc16fa44dc5afd7c24ee928b1c95ed9f997f3ab3334adacb055526da24bde34716a1932930688479d1e920974ef7c9ab9a4bbbb1c18cb8898d7ece541ce4ae58d584796a7c8f7c1deda2747a052114461432fe21205af69f0e660ad0055468588db7d529f3dc45a696a572b81ef12d1ea47ebc019bfdb517a8ad4aae99ee4898b98d00b92167b9c28e80bbcfad1f2158dee17df13c2138377a2e018a01ad7886a07e46eb1fec736f558cb8211e5bdfb2c9f3b7519e4005291b257506425aca2d48332895911789f3992e348319569ed687ac71be64f4004b9acc21fde2130c522 +FAIL COUNT = 17 -K = 6c8541f8c67517abb0d068e9024ae843945e15900e70f35d -C = ad082a695e3d8221b24b0bbb338f7ecef5e2c8b726d405efd2eb45da752e5e45f6f223022670feb16cea1857b3d7842b093f856604a5fd4a7d1b8072dfd8e0aa43066d295abcc7e4aa6379899dd11277f4f24774ad7f9a8aec8f19c60a2964e8f59c0fcd8c7078838af63a20e6e6fe18 -FAIL +K = 98c75f1a441a7d16c8e0563d35002b0b9a75cd0955de7d7a +C = c42e0cc21c18d02d3861e63aec86538440b9b5a711e82615cf03568f30be65e8032e5a955674ba18946578e1ed466929e5c8bf8f25c1c696991031c415879e244fa2bd6ec6ab65b90c7fe83be552243c09a1a64344a2aa2642fefd3c994da049ea0fa4669c0d514babe0eee3812b97be9dd8ac4f9bd904cedc761da0007acc8d9901827ff11f5ccfbb8ad70f525a72634891fc83dcc29a9669ee094c082b5ea4e51f6c12a1fd7066836bfab88d6de451226b63566cbeaf31580c3456db7db7da51e1bcd88ec446cf069f026083c6ec1da6b4f63dabdf61757cb96108da9e49c774b0f313c2415d95b5fa4d39f45060068f4f47746ea4c0910356449d10931b4ddb4234aa981c91320145e9342c4ed4bc2b6e5038f22fc19fb9bc1cdd0859a00da1a88e8478a006ed7215ae903a9cc9c068aef856e0f4fd8c545a8f0d5a09dd8645dc66c8e51fe31a7c445efc57b578318cfaf1c444132b788b4124ad696eb22ce4825ea546fe5a59d12c534349c14838c4d6cad48c92d35c0e98adbb76d8569e48f63c02e233456b31547173ef6e0338569e0bf0c63469b79a26a33b733131bd527d7cd06995c1a1d643e5c4fe36abf9ce6edc143027b7cfb160387e6e9f9613bfc1b025801da54ba78191588bb5b9ea37b71950b8ad4be19bfec5ff85e65f0cba6680b4fadb3521e0781f15215523a2279105d282bed96a6b9d151628f1bb409b244a60fd2579fd +P = c42a5c9534c59163b0947d70b34e1ec49396d2627164ecfb5cffff2e605f64081ee5415d2cc0730ad16aee0a5379562b68e7816182d90272f4d36b82afdc5199b9b397b502058edae51b1df94a57e3f23480f83db21e668a1d39c5aa3aaa4e250ceea87e78ac158d0ca2930312b58b5b8e612de2a4f94deca2aeef858b50d10760010bb9d92cadd16397e826bc45a1cb7e11ac9a4ed1178532ce8978ad93a3cd45973a803eb5698087f2c1e666cbb63130a4243fb30a94afeaa0be841467058918f4b9e943ce9e6620c685239838509342efe4862fb6d9e306f8499688d8daa78e26cc67e380f0f381dbf6de09b12dd2fb8536d4c8414a513959b4a6d2f3c46afeca030415d29be92728cede786a047999a88ea20c87cd686bdbbd57e64a14562cf660a0f48f7ad85c18ad15ddd555e8ca5ccb03adea947204bb73a0aa354ad74fd42ee0a9519e3fc9e0905a2e79485c4f8aab44d1d73e2afe2a6d1b723ba80701e050d71c3c430b649883462f46306a888482fe999ca48a5b39e65ca30c05aba2e04962de52bbf0c78b8998d3cde23f74849a6a4e8d5f04b7937d0be204d64db34f9ad4fad5c4aeecc3dc6d0199b458bfc1f48224b10abbe3ee12cfff393d46ffd824ce4fcbd82a7c125886b101f52ca94692153de1003a8e3e54f11dcc6a48988589022fb43dadf6d28f12cdacb10f93d5faf0f5b7c1a4b39c7b3469fe8266 COUNT = 18 -K = ab9c13d53719b3e1b569711f8c1d3280b46067e0aca1754a -C = 30461dedef2925cad1c245b535e02d489a1ea5c4161a128a322b01ed084be76980509941e6cc7dd4383aaa694db453722a4c16feaec95ac4ab5475ee7d4c24196afd90ba677d8ca27f0a8bc21f16c17addb6273c50eb3a68aaa8e87ca1db253f985b42f714631b565e8c8b9d6fc60e92 -P = bdf727a344e73e12a2993ca70ea283e64e9353123dfa8c90585073217fd648155141230cbbb1bd59c9705e8be552921a3b21d63f40297770773625f1fdc5b3af07128a0df29fc73edc902ca5302d6b44275e24aa712cc7af7445df5071aaaa933d74d192cd +K = 54f2e66eaa08a901470b92b40154200af5224e01e9a1116f +C = c6b254cc4b49faac2a75856c1d51eb26d45ceaa1741c043cb372d67bed13bea2b6ad915238b7f2eb86f9fdfd2c397451e093c8368afde394daa16f6c6b04a9bb465eb6f4db37d0351699d399b77ed4a25d5515a00b3ff1e45ed6aa7d4127f2f08cb45ca1b388886e2fcb63ca32ce0e33745f55c511d24d2a0fbd98b47e60f852bc008accd166ad0a01b2b6a5335b198abecebc839e39d08cb4e9138e42de494e381ece80ebdd511cecd04af48e5780d9b6ab4f1f2b4422df3c2686c8cd974f667829509560120debec61b340dffe41afbf52dbdcd7cac23f063042b42dd8fbaf87d3637d7d01c6bf127ad2131fdae9ea5f8a8632985b8bed6485a3a7730eb330b63165ff80518fd51664c0bbbed98e346c0b0aaf16eb9b8286ac3a3ca22e0c4028460c182b24b949f6403c0086b181dc1f45c518fe0a13edb633868e9dfb7ead5f022527664994cb15c084d3387df4fa5136eba2c6e09eea3228540ef076980a3f3bf68618b1c5054783e982401d334b83e862aec23af038486e5d94d3107b87fe812bca84e60c01c0e4386dd6e179689f6cc1edd40be3ae9bb396262b7c5ee7160a9e0bbd36709e83eff682358d28500dbdef0cdf51842c317594dad7ac627caa82e1b7b6172685034f45c12f43deb770f190256e10e477c0077386be0cc479e372b240c51ec5fa15f70a0eee52c27a23f09cf12a5eee2231f19ea731e7eb4f193bbc4cc9713c44 +P = 255a218462bca9f2ca5669809993a08e3a953aaeb4410b9a110ce23d514f3dd349d47d6b33607e9cfa098a4ad944161578f2e1db8f7993a3916b8eb7cdec2650b998dc5f7773b5822f5d901e44eeefc60e4058b92bbb19898f51211a63acba642eb4c277d01da8d7bdff0fb267ff5fbbd584470c05d771901badc241b8741b56b21e91ccf56bc79a14a8d67598d2eae82d0ce870790541893acecdc09a0e6f614b00b7b11e6aab3b9b4c5cc6365f120d81b3a063eee295980ba2b506eabb9c9a4d0e64b4ef2307e2b8f12a79d13350a27368e7abc7e46ed7aafd718ea418ebb1b58d15dcb0e6bb7d75d2274699357601ceb9dcd4236b7c54af005fe78bd1a61556a5e989787500b6fb495d68c43dc72521395b79ba37cb0855c738984b8e215ab4ccd07369af0bbfb05ee50b7bf2b5605604c6b910557b402fb0755f64f1b6d32d5b3edb7d87f3fbaaab7e95c922ebac0cfd0281a29036402c280cb25bee87add75979c2814a3055c3ae270f7f362be3bd5f2b48ff4c41d72e007401d6f5ac035bc20ab839af332a2eb1678edbbe3abfce522d4b6242bb355c7146b1eee93980028023d12deb61438f7dcc40843227afee152ae09e656e992488d6f79998f25f926d1bf77e0203e3e7e49d58b93ef05c2bac79478ae764b5c4b853df63e3eecb12c138998597b8fa9d6b0e934b9991494f6b1e282c002a6719c2f59308c530f8 COUNT = 19 -K = 72d132152259dbbc4078baed557314d5cae42216726a9e92 -C = 63e1e1ff3215b2db6abaff009c779c5b7f8fb1d8f1f2d1465d03a94ec784306e9e069d5ae525c8215e8788bbbfb4fe416f8d713a1a06c5a0dbb660e1ed0d87efef65fde9b641e266237fb30e132de42c26d413311a20702c4e11fe2bfcfd6df01d2286c3cb3aa3f5e8cf9d2c57bd7d3d -P = 70e8da004744ca7600ddb6512fc8f353a3e98eb2b16b63bfc59809e6a58cc0a1b2df98dc639b7bea4a2cad75502ae8b987b8fb0ba906a8aa7d2b7d2c7fbc6b8625db28e1ce1af082d736202344546e4ce1426f52d0733e92d09aa8649a2b8a7800b3b09465 +K = cf56d4744517c5d9f4f31cfecbcad6cf2b969182933ab9fb +C = 352181c6d5b3301b2d39a91f7d0a5e90e7ed5e69ac3ac779172eafb51e64e288cf3ee04313b91cefe1551ae71a9feaca3b17eb4bfbb8ec25b54d921c0cb46781c35603eacd6f1eaac2d1d53a1057cb449cf79d08bdccc80be22827529e067c3e4e7c31065a47b229eb3d376bf1f153e676dd47300b890dfc52a24069d5f13ade76263a544c587ca8c469e7034bcf06bd273a318b7b8cca54867b3f6443b65d9696d86764654fea5d62f68275db24d30423ced66e8bd2406be41fc291a4c2b3f8a391e7128088f57d1f4cddf33bd7d0ea2319e688b9afc6b144accdd320773ca44a764c0b6b519011d9722854ced80d283fe6f581ed421dae2ea6679786b176845b77d1b4f6a0290fbd7b3c125def3e963ff8cc6ddc13beceb80111ee4d7ce43c4ac2db7cf53d82140ce798cdb237c10a42c19a20f4623cba775712f65f1000858367afd46a8537e2ffe5d37741391116ec4c941042e102ca487d6ac09f7700b3d79e9e4593c1ac15e2d1fa852ca126273d0118bf12c29e4ed57c84bcfcfb07d5c6ca28e1e181c82ed552d0ce67d99537f268c08005e2165b0e6a9621fc42b24cb33680986632fa8660df94dce7334a26241a5ccbebb68aea6e266c5429be6759b6caef09a9647264cb71552eaf412a5c704e81f884f0b51ee1b3d6938a101b71630b32c88515e3c9da654445ae8df161b624d5edd705d7864d8f133ecbbbcaf69e02ca0a22a93288 +P = 32b1e53dd728ef90941d64a87bf9b140ae1e11bcc0e1c5bfd76436c87b177d384d8fe2761305210ef208487ecad6bc4d9d708ea0cc946aeaeb13cc3e36ec810d32ac5b09fc4edde51555ae7f58e0195c9bdd6036de7868baeb93d59cc57fcad1883c13415bf44b95abb4e1ebc26001309d30aa6332628cfdedbfc3d78a768164a94c957db8fdc8628ae4578e367753a8f86190db898e11f57979dc4ca9680f85a3208c51b782fec80cca756d763fbfc0c40460b33e496eb7185294d5772d2bbb73e756bb92d8f63f3ac8216545a8296aef7efc8dcbd9b8204908987fbd98b83a43984cac60aaed079dfdd61da1a69956ea98f76c7528880f334c99a88efea8b12c794b3065c7e81e512ee655eea364a38b29f6b38d46e5757f638ed07bcf88557474fa102165157973ca830af0ad8698ba0ceb85f8a4b63b5ff8172d0a89894d9d60f040eaccac4ba366d26d218e3f56afb54527bcb9deb2b71d3ae6b5caf2ea5dbc80067d5b23f9b2903f64102d4db1fc85ce4ccf0a75936cd60dc9336e200f9bc152157ce62a6c8b190b61f3d719b978e303ef811e154d48f1ccb4d62a6eb8e4b5c05776e3b202e2d95c18a45ce1ab28dd0f7df8c4e54936c3561a14841188e4ae22651971e429b94b43c5b4f4d470a3ebc514310458dc23395c5a79890a75029fc3e1d9e0b185dce4e8c1d9532afcc8ebd3750b88bb55eb48277c15661cd3 COUNT = 20 -K = 6d60aa5fd43bdc3523e50bbc1c41316af506f3eea2dfc344 -C = c14a9c59109157810d4bfe018760f00ace99a2c899141570361274ab07867363b18258be7c6958a19cbab650eb11a873532aa7def858e6cc7fabf172d77cc3d126052f12287f144ab73e37fe484103af1e3eb4f632d8615d020682fc9cc0faee032db5af380d903684b06298fffbd2ba -P = 2e6228c9cc6d2dda274dddd94e6a48978800c24d595f1d5466486dd12fca9c8b04aa6d242fde654cbcfdb92efe382a9a1a8e600a0e15348f07044fa392539bd0e34c97b6d160b2bb204593c2d64d915927db1d5da88e497d1898492540b655a5252869dfb2 +K = 1beb582b61287260b430ec87bddb07e02d9c52a9f3c4b3fe +C = 3f55b47eaa4e6ebb9ccb59e65deb628b30814936020a7e3b128f93e1d9500aa445f53209212dc8d1e8f0f1a565945d36d6b80f9ec038a8f23d3fabe7aceeb46a51ccda44768cc3cf12e234e2e2a3fa81820824a651b7bec4b307c27a34f3e6004e33a0f898e3ba45c4cebe855973a0134724e77228670899e05210a22c64e27a91f727478e61d9e146cf0ec671b80e89e16737f5b535d92634c9e4f68e61754cf6915198a3b969efcc8a2fe44135cbffe18ea10febb87b60789eedbf8a505f4c3dfd6c15703da55761dd8da1c643a5c56d3a316534f23d265f1556c9b6d1e586c74e7de96a2a4a0d6d5d4cc06a75453a3b83d59bc564bc3e388a9fa8ed2d435588755b92ca4f5819129207b9f1b200773b07128d59798385a0cf0a26a971e2530a07286aeac25bde9f66a022cf95fe2ba74ec913b743c7db57d7fa0cda26238bf4e8d24131ae597f43ece9bb52e29d3ec00cb3f1aeca103c488d84b0e1de56cf6608ee4c23e909dd3a808c1c328e2e5bb5a62a9c4d82a2ea563a8d6793d8b86cda1378b0b7f74d3b192759229fed790e4a3f04f3c656d67731331aa6106987ea4e945cc235033d9d6e18d3798bf1d6bd05b5a0b690ca1621cda2ac04686bf546f8d89507270df18de05f3afded218328a61640f6f7f9177de8a60ceb51dcd282e50062e76221b5da14260e8b933f90c0755855757bfaa822fef6591f7fffe23cc3ca4d3f86e8b577 +P = ec49c86e37df3bad489a8bca93dd5002fa4f557c4ea3c1e084c6dacfcf20ccf71989216d97016104d6d1987d02650ea2de37d947f1cc9b993f28eac734cfd863a949c05c7c0aca25ffbf1de8e2b433289946a91f162f29f8473e41fc48a3352232943e90927b0dcc0cb6c858d36e5540879a7b09a7c708e79e0ed56b6717a8b25927b1b049b8a7d97eb394ba1b99a2c1db763fef0655753d07983afd3a3cfe3eed4baf3aae3144ac9c33630366a54c3dede39148095f755f00c49d479f6a324648708ad94e9334339ba824e7b3f38c0737876f6313432289cbcc1510a1af6fbebc79e2acb7a2fd4bf487063e32d5c41c0f3089f9c940297b7482add0462b8e65f11a32a343c025ff1bfac5d25d3625a16812f2cc094282814b8ffc89ead15eeb8faf46a68b5d3275293c5a0e71df5ee0c27710585e929fc8be86d8b03d1a64dc58b4911dec6287d82cda5ff68eb76ea2752d0c23b2ab8347c7f19997e2889d03e4af920382ac2094efefec5b4948e57f30a21f1b394a09988ffdcb2c18b97f53b03740e82f502c7e3605f39a68f741a7b07b5a9dccbdfc35133571ee1632436b118aa64063a9aee7ff2a977e8c8d2ec5d85239d6a8d4c0e4ffa0b21d38be4b1e1ae4141b340569731d9af4c987cdfc92f85b668ea518d5245bd097029566af0350b5cbb81c7dcbe80fc6fb9a2f4494081b0d4bddc857a856570fbfc887e04cba COUNT = 21 -K = 183e31da0ab27100df49a98053dc29a831d58890a56395b3 -C = 21308a42b22f0373461efd2864ba665a849e8144024ee6ebd9b0db8990d8d77ab938720a7811e56822bb09c92364849324768684f5701e9784bb268c5d249ec42cf9032fef03859366f55e1bc187965bb7c2b59337cbe51eb711ddba692cc888a0b77e6d6c0b03c1b7113f77dfa68f2d -P = 424e018e37fe66a2693c6f0d6e8504d6128044d27121a2c18fc5973febc0e640a348d3f2fa957bdcc7e3ed1c6a715f743d56ed2140cb0faed11bfcf9f37cebfa164a6d7c782f1fec6efc7b0719f90d6579feb4abdf0afb33c6da90f3c9d091c7a03943e718 +K = d89fb40dd100fd7b33cd2bdcae7df0c5353894ead2c99e3f +C = 796bccee3f05aa5f57a561b8b2aefda7a270a2c757caef36835a56af47d8276706378c6cb864c9b4a03d0f371f0ff73e8468fbb7fd42e53168f2e435f580e390b39d78aace4941a1b735155ee900db39898f4fe3b3fc55e27d7651d292846035823c4e3cfa795576165d84fff9551bb9b83b610808bc0681743ec1a5444ef90bc4a2531e36dd3b3a51fedc2e0695b167755aa3f3e2cba882fc2bba7dc748f91ea004093a65a643a015f2e0af0e78431c7e4da31c2cc46d002526f2cd76699474127a2ef3e89b7ec1b95115ee27c014213a0882bcacd355255e43e9e09cec6f38ef6a30dfa9a98336fbf187aef22654ec2652b7675e8dd1da3a179283de18c2c281fb1619fecc8a40ef54d98a092bf225c974a222bc9886605e62842dfefc51013b6f84f25bf22ae0512a0395abf3fbf11360cf5f2c14661c5df5b287739ea34a3b4ebeded2a6df5a6cb3fe23a10e31599e90bc4c6813133e59dc9c43c11f7ccabb961f3ddd1ae5372a59178b9cfd6d5782df2940da37fbf4d581783d6589c258367993020156b62a1fd6d122ac445f9e8dc26821a20259917f3b1815c55e52a191ebf99d0db60977670889c33ad45b6d02713abf466da06a86e345a7dbeb32bc6bd1a0a52e37fdee53663cfd7ba2804c69754c4b3e9f85e5b7b3e35be9de5ae0c6cee9b54cd343a6cde64c0c415fc97dcadeb1c68a9161e1bd8b0b795ebed9f2ed9ec1781939771d +P = 7655280a9e3bdc776edc3ba4766a99219ece1fdc9874f66d2173abd64cbd7836e5278aed704f37336bb3831d0a01af2dc96c9f7b52bb45b10fdd7db2eb19bd53b215d9c096c3ec5837809d418495bac61be323d12d09acc52eb94de3afec0f3e756bf1c293ae66db05d4a7335c69eeb3187eb04be4c07d1daa84c49161fad8460b545b49e05effe99f9bcf11cff39199be3e4f777e3c59de5e15b5674e37a2017fc5ecb521983406f21256d7397e5e1752371a039b7b140d0fc07b47411f0044a43322f7a568e604f402cf2c56518a6e769378620574ca70cfd7ac181c43918dec8d55fad8fd47a5b51f538026de237aa7eace210969a4dff6c700057bfe47b5eb5e7f181db96c2c9b5b3fd86d08e2077497185532495b7c3780a83d98858893c05a2f68b007979f20c48199aad32ee320f0739151229c86745933e8f266529144297df75ac10d43be8ed6e6b3cf4a62be8344dfd4b42361c969952e8029f3bcd46a3801e0b2350348fd8bf307cfc7121a27bc9a12931900b56ebca7a42225d1c7e5d4ff1523c6bb3bd14861b61741100ef038d9eeaed74ccd34afeba089c22b07ccaae259e264570bc739b7cd0d0024fa3bf0d7119b60502985b93d0c588967fc23bc98d78f7f7271c1785fe0c4d7d36449569e09b6bbc35920d26dc1fb26d1a1eddbaebf93d4d3a1d39084860ca594119f450b169b0e3070258b7076ed4688 COUNT = 22 -K = f23dc233c8bd9764854648644e5510162276064059f5eb1a -C = 5395cac05df02e2d99f3ec36c4e145a1d16c767d50ff75840894cd21a039d114380095c14e66c56f9ca5390332c424512b12095167b30972fcad0b167a80e66f8054428d21d1c060d8fc3edf5336f1f5845eef562ba763a1011c88856b7d52b86b7877c8a0ed34e17680c9bbb59e998d -P = 08f5d472b1e36dd73eaa85d97ec273bead20042ebc42f532fc44d97ed0af4047e03b78ac52aca3716ed0a4cf6bee7d98dfb701d7889ff8b35ef9224c01e2fff4222d80267890922c47552284e3a1f35a7caa49b912288f1fb3173aa68452273201c8893e06 +K = 84276866b94edc90d2d53243320b9110c9ed1254bb5727ab +C = eb9c101d78e12098eaa49d6deb47c10e6464abfb48c4512c206e97bd4741f53a4632d15cb0e44358d894b679a2ad79ed73b8cf76eb7568c66ae24e56e48b38e121636bbc040ab832227f4693fad50131aa8600e423b0e29a83cef6583a78a0f300b0e476f7254b91294260ebf30c8e98b6a935d5f2b72a84fd7986bdbb9035a70719d8916592c81a94df7b8a8ad3b99b84d0e35ed2f7a50f81bac4f4bb736ad996f06544f1e6df9b6c62033eb5d48b5c78c064c946e9b587dd02af88ecd02527af6c5e37efa1bdf2acc5300cd17344fb545984191f20fc954087e15f949cda7d2c64180c6df3fe1f535d6fd8be47118f4690a654f4ae28d389a296ca43ae0e1b4195a96874704e9300b47ac789477cbd011bcb2776f90f7e4dc23014af20d1b744c46ac72a1cd5b608a4cef8ac9a7895538b5f6b66213f30cd4201994a0c86b021626c420a2ec9fcb8cada83c4600a95fccc8655c91812b1bb4b2451eca4e4b860a70d2f2a4e615be4874b259af8d63628b556fac82c72f04c82e60b968ef2dc7a8bfeb7a7cd5325c8cd28d19561542ebc0e6edb8d0c87ca946161d770cac5947c4814710c9a96b5e0111c3d30eacd7615d5a1b9b889aadaa245abccbf64f3e4be1c5131a25598cae23b15943667ce5ff1080a6b75573969525c6949cb299e0402108105844790eb23d4da4a9af645fe7954e8f27e131f7356d8603af9d925bb46577a3245d68763 +P = dd851ad1a3a8e84a8648f2fc17306442cac07da45e2d530ba240413e656acede7cf33f95af8e4a37ca86defb4594e8eb1ee02d8f2ce77662a6480d433891fc258264e8eae044da27a50df4162d5eb04d889a1ff3ef49d055caec3f774a44a6759c61067f64a0447d9457e21c5999652c0c4609e1cc5ba9552fe85ad288ecc588a0748b080b4f15ee5ce3e267d97e9e9f677f3bfbd1189d7e200ff48764dd83a5626c4ee93ed0a5928c4b847b8cf25c152abba1f90735696aa92536759e3366bd5afe24affd1080648dad3ff168c3d63892dc266782831e90fbe78dcbca8708958f3c22e5daa536c2334cafd97e378fde858283210aa1462684d79a4670364ca9f515cb83ebee3ccdd34d0434f174aaea8b8c287eddafbfffaf239c114cb7c24c92a72627879d175192d782348641d0ebf79c3c6d88669d8e237dcd0d8abc09405a413688ecb3de475c4858a1709e6a4683e5ae87b8ded9f6252a4b733b29ff638714566e32da86ecab0f3213553c6bea788d12ff2181c3a4fd47d64041e749a75a38990a8fafcf09cf9b6419724356fa531f4b3e73e906cb04dfc46347390694e6e4f303f84a2b4fbeb1f0e9e62cb8118df4ecb6da54462e1fdf5a816ef1598d7d295715752c32053a0c2a7936ccd7f447f8282f97404ef4162fab5988bea33af161b873e8d960d57c0d633cb2caa6baf7de794c978e976a4d0b32ace77581e1 COUNT = 23 -K = 79f6ded32613dcabf6d6c42c37cf3452ecd837bf289e5c5d -C = 7d51dfa2a9ac2da0236d55b7058bd0adf9d441a644d1ce4537a40a9e037d403adb3b5717af5016104c96ed96f3b471ec12c54cd7535b9d64b1c8eedfbcfde002952c814118c4a3db65f7003f21343dfa299134e8c827355415c600a454123bb1637cb4fbf085526ab6e7f557bece5391 +K = a2ba85e09b057b1965e4d218130c52928a47d4e8f05c250c +C = 321444aece64c126a4d0c705c499632a52a0380e5e3e5ab7a8fdb41459490d7b3d34e6ff332b7ca62102b364bd6cf07a41553800844cf4c7b83d06202f13b3be3475dd934570ac9fd5e02997fac54dd346dec83f0667ab64c19b36228dabb1263b56d4067746fe4719d5e1460d9f04a4a3bb0f966693239a848d683db6fe721272adf8080cdcb4bb97e94b4d0a0eb33bf08f8f2c66999a1829ab639b2ee2c9f31c180288840f4bfccbd003cb1fe537525045a35c47100d16386de58c3c6815997eef2bc983dcbf36502e1a038dbef957cc95770ada05474ce97afd020c7b9112acc1daef8b547b6f3fabd81068a4f47413f213663cf8f79d776a7b98594d0e203a8c6386b6cbc64947a32e93de8cbb712957f7eaf0a4bb9b93b32bae7b96d7f1d3081e8ae57aaf0e5e84f40beee2ee903e96c0b1de00e7b79b3b7bd1a29df8a899f6ec24b1a6125d5c861a61ed1bc04223ab10fb6266bab850a6814df53766d79ba9106454a5788b2c8d69ff262d55e029d760a83796815b9c3d0acdfcb2e34a59ed52a756ed21663f5ebd3fe11458d624b6e55ef072f4c7a1cc8176719b2aa7c9440fbcdfdd1799980fb01a7845dcf33992e4b6dfa10f6e27922a1f4b6ccf733ae21a6734aa2c226ac07bbd174d7ab94395760b6ec602c44ea01a67fab665e61a6fbd61285cf172be8973fe0349b93b44bd6afb8ae3efa784f696e5e1e27c0714b0490b11b7f55b FAIL COUNT = 24 -K = a88abb634352fd8a553dcc8a772cd194cf7d38a8f2c348c0 -C = 500d7fdc6d938d1dc83a5320e828e364e5587c750a9bea32579009a7b6cb2c4fafc5ee7561d9dad6a5c095a56fe96b0990866c237290fdac05368c3551aa768e57ffb422871af2665dd33790e10548dbde10ebf9393f99f9eb235b387483e4a7c6c23c0e996802b18d2138720dbd726d -P = fed4b25eae637cff69333e5544131f79edec49abdb86dc9f9a2d80b3eb8a7bee82c9adaeb3a0fb844d6fcfc872efdb1bf81bd3635a4abf83088b72174f6c580bf5d41a1d6305da9fded7d1ec54cb24a933e25b24c9997a239424ee3c267f6f36eeaabc041c +K = 7279a01750fdb63d33447b8e3954509a189e9dfabef8eda0 +C = e3d81b5ef15fe74ab7914b51df49044a172e4944631328a1869176b48c09b2c1f501a1cf3d8742788033cfe16f400cadbfd6b828e0735a9a671e4fa36548eb8a9918179de3fe887d59f06873e8447a116cf18865523486cde8871a19c70d8e810d7240d8536f34d5a5f519b32d23adcaecd9d5088089eb105e149a89bdaac0933a33b495ab7a9957bb34cb3ccde1b894c0632f3c30f6d625d987148d970bb297c205402a8141c7458773897c23afdbb25b8434a87adf999fd1f7b921b77f681903524a988c0ce6c6aa970b6c3c79fd315b7f8c1f456e6d674af8378a1798bd258fdb3fb226022bedcb341b97120864d4c44577fc1e572adc7a4cac9c977e6169dd669a4c4b64851f59b5dd448f27962c09dd84ab0609ce0fbaf47105def6883c4604538e43a35f95f32994d7ac100ec0bbcb3e54c3bf47002d85ec9b1d45ebc48c1ceec41e98801f4301503f2ee349fef9571126c1e7954d746e404dd24f43e9e8ed416a91c3006688b01266fd0c01f5c1fa1de89e9774d2ecee78710ec94f37ea4cbdf49135b516f9c8db9306b41c001830fc610d2a3431cec82ad132b0d221a4a8f31acd99ec35e809d77f5780b0ccd561d54b56ebb28c23531294e64685829d70b41c50ba7c7f4eb7638748cfecbd366d537d2e21085d8ee54ed772f87cfc7a63e7f0a044e4dbbf97849a6c44c7d59fabdc1b0ac620ad7972569897e0470ddf7c83246c7694e5 +P = aa954a3334c094c91530fcbaaa92f04e9d24444c73b62c0e7d10634a2166e77880f873d4011cae547017328695f3f523ca589e3c238f3c70d9f6c351a77b24a9e012fa742338f15c264b2e1ea5d2e61cebb2eb9dfd5fcd155823a9081bc1d71a72b12e0a05272510c60a4d0dd2f3fc3b3028f3cb2af568554d75efa18f04239c88a1af1caa2e53a871fb7c358307b16d8d51d3c5d909a62f830cddcdbccdead9645862c7c211746ecacf0c56032d428f2860596a614945aeb59d060f0cb260714aa367e266aac14e9e426c4c1c84080524a6eaa115f76a606645f473419de15356ec55ec2653dff5c02aed637ceb5a8f20d80951f0903fde76332e719fb851659a04e479c2d15918bd49b10fe8c0dd6aea5e233c343d9e21742acd1fdb822d816dfbe5821b539f3627767ca395e573a1b9e69c7bc4593c5763fc723c70dd2185d6285b7ddb3b301901c2ada221bab88b421f50032a254dbc5bbf0dfd5bebaabec2acf69bd84b77b76ba7f625792a2ecb8157038e6b4789ffaa64a63ecbd52b9c3f6ecec6becfed84ed9ad30733e00bba91663e29579c6b32bd9a442810c2f2f976a148f66753e15aef30b7cfc1d364f8c42e21d0d58c74b0ecf4df818f90ba1c3cd97ce8b6c42103193fe668eaa1ac94afcc15e52c2c951420dc2dc66407990d92b23a1171a5c5bd03b95dbb9e53fc53f32b3b6637d50508a0b2cced56a4843c COUNT = 25 -K = 081fc3dc70e12e80dc7168fe9f126e3790e2c343c51775cf -C = 8624516c7f10f9b0127e7776cc1ff2c03068550bfb5b2c5ff660acb84048b70aff437ada9cf51346b245bbb66efa838a620a6adc8cedaab48be983d2e8e13737f44e7e99bef0f041737aee7900f86395acba6df7ff27e8c36c45d21ccc96ab81386dc7f6103da8b0dd53e34ee0b2dc73 -FAIL +K = a231dd0f682e559fc97def6ad3b801cb70823b1ce08f0882 +C = 88819146ae69251c958c37916ced0b10ce95d5b9a887b701a0c68817b5a8541388fa310ba9a235ad6321dee27c83ce55f4d2edcd376beea60323e3e9498a0d2a2012b6e006ce0e4f29b11e0f17a4f38b89ecf9b8db60b5712d5a55ffe49216ff91e83b7aec6637cd688aab88d247ce684e095e1fb957b91b4d0c7b7190b0981a7ab11fd06c7ad45a49728bc54da1c1aead0613ac38954927366109443b5c0c2d701089f97670bc1cda932b4e8fc1810b9c3110101862b0d33c624e85839f8cc56d93b2a9e51ec7a1985d7adb5b0a888a42ad0442ec36497c750d05f62e2e42a275579825e45d757eefe13d6ca72ca1fc8e528936ed35f0f67ca5834c9d4b069d88c985e1907760c9a2e8efe54047e8de6ec26d9ad1e87cf585baabff7f63a29f0cecff40247362508f9c8f2951c47f0f3590371dfe21e07515f71e68fa4cee59488b15fbcd16769c21584f0ad066735db199d1bcd4f56c0eb7d1c791f2d372d0a04e450e658885fdc40362c9e02873fc13e1499a2c07d5a1fb9e0ce68ddfc833bb958890aedb2381d23cf2c1ea20af71a15d8fba065c7614a71e0b31276507e299fa6d762829718ec5bdbc7e01fad1bcbe209d8b8f540642529191213d82154133274604b620f2269821b1a339d40e9687d6c2c7df6b401d4ba6b45e0ad56bc533aad570071003f9e8aa4fa8660e84a25e4800614096654430571ccaf9298a4ed27539a19c287ea2 +P = 989119d912860b095d65c83dcb54ffb8028a1fd2e953d6071c2d63787377b46c0f39708941e38ed60f1ae77f2c88a8b710e3e15aa8ea73b36acb6901942fccef64c09aa8ee210a8e0737fd8cbb1803322a50679c6339911e5cd649dc36947ac19677eaeb3ad28238272a93f38b3492fe3e50c319f8199df995fa3ca6d7a7f5f72bbbf3af6a36fb85585ff6522cf51865867550877df7a7fa587e07012f80d35563f54a10538cddecb58c76ccd366c4beb0e03c03067bb484e76ce4b3d38ffbceb07d3c9907397f1603f1b2999c4400ba02161ca2193de1572b391dad0dbb63f5679de61574e75fbd760f923625be5ab72a8b9dc12c283810c8dd6630eb8c26210ffc84ecdf391f8f41e111d14084c8b1964015a0e321105dff2eea2fbe214345f57732d1124e505972ebe89bb73e2611669fbef4f0ec6b2372400698b55f859cea1c51734d1834f6a423245bf9806585cc9cceb4080d03bfa36711f461e2181cf3bb9ee31e071e37060b0315a78af4cc1b1ffe2b7111572f49b38389c8a63fa0aa09ed075cbf58b0a57bf7228252c0e854ec9ce3feb9865adf5a1f489d5dbe74df5c9d5eb2130441019b4fbf5014041021d13518bdc72903afce6c9daaf3dbe9a5fe966f64734aeb640aa4adb4468b10abae8057ab6114b6993829a3343c276ba2a96ff9b78a9e5e824f1b725c64718db8102440bd2f308553c458bc60ab0d98 COUNT = 26 -K = fa60b15f20272236072d6bdc3ed2d9a9371fccdc9c509414 -C = 589fac04c09c5b113441d14ffa12bdcd81a9f0012ae4c05496fe8974bfdd0abe79b678addd2516cebf864b376c487769497e288012b0a409b5a1029b3dbf03ae4cf748e2b63d035cf9b022a70764f11b1f72aadc851db6d1cbea6bf475cfd4a3e4e471dd513dde1872cecc70ac811c00 -P = d33bfe9743a7a477fccd04e74acee94018a0a97b209a57a01239289bb3d4a17d5399eba7601f24c248725467a3f473503b6e33096a7c6a229139ad5220d6dd804e018791e513b63f71f98bb1955b470955b62314def1cd86e66e104f5d76bf6831b12ec367 +K = b7aac7a5bb848b79c23f6033174bba7300dec6a53af00a3c +C = 5bb1958de5bc2e4e0b3fa9c710c521a9232d58deb0c5e178bf1337d76cb0262ba62f724aa45c9b0311df6fe019015f090134590b733e913cdacbdef8cd314b2f4a3edc980d1ca02b7d0e6105c9cd086a3ae098e28251a691ed23c03bdfd3e9dfc48111a478512d57ed767d07e9330b2e36e6cd0a4f9b5e3882dbf0121bc0c5d8b2cc7e5c43a87bc718beeb2eaa015c9ba678b6e0b7da9845f6825f451583f04ce4d1444143ec8573c5fe1e74e8f4e72bf8c82b4fa60c72b160e62b8cbb18b803b2b020b96b2e5d6cd3656d2897af1eb6282c2e075975ada68edc364989c00ca275e7b43d136f45d34d14ce9f2cd08c8c4b38d97a694e1d87b91be333212d4515820f356621f8321bc97357abe36b9d3f01645be9dda56d35447a6c0a9f36dcbed6c342eff6098fe47cdff8ec59f6908addf187b9b40538ae30ecbe3f76268d3947fb09b8243fffacf336d66985abd0acf4d2f5ab997b6a6d877aeab4a21af6711d4d4024397debdbc904bffd081511ee75e4d4366ff4148a800bbd44fcd6d7afb7b2335cc61c195a456ebdb7d95d7374e2cbc1f1eda5ca09eaf7f6c47396e85f8296262f5166c6202527cca1f76c9be1efdbc57b60128a1c51e7c7cb6bffdb57f189ba8ef2a163c3dad328c5f6eaec2d4a3b1b1560cffd6b1c5fcec53df082da4fa4118321dce361bfe85a5b39c3234fffc2281efe3241d4c99fcd0ccdf64d71aaa287ef25e0b093 +P = 983a90be5660aaab19fe54084e0dbe94dc24d0bc3b27c9cc256b104336fcadcba2b6a987af870ecd669dd2ae211d76c040e04f02f3d545cca9c14fbe7830cf7540079fec09f385e916d9cc0052f59c722c09bd7ae1777d32cbf9775c1ee39afecff9e30048483a89a041f1d53c42a439345e2fff92699ef6385c716731e8e54cf0ef8132b4a9466403193dd9cba2e34f2ede90bbc2f30f5d0689b6ca46b47763abc7aacb776995aa7ed75bc7acf8d6a57cf1f3716538bc1e63580e2c59df283bace08296089b9afab2e988535b07c718d7aa1a30431f8c30be8dd17246092f0145469c13fda0d0f688a52d80a594c20501fdcf66b55d3e4023717922776e81b80229d5211b4ee5dd861c0a8ef9ad25aec99a2ae7c93f6ab37074c1fb7d39cef1dd03c28f96f69cd28358fae692eab59cd16e07f360d84ce7cf10454156ceeb04a672ce4ae5f3d05d955484fa4fd29f2ff993deafde43b20ac40821b9cdbc2eaceb86d9b2a1259e9a325533dd3943ab58a31eb7005c8fa61810f5bfea2893fdf247a3e8024184daa7ec3d740a42d3032c29f3a16651a36b838af3700fbfe64833c63a5b15b17241349d3410efca829fe1a8f53cc52c8b31da737a64f98e1002376e88189d9dac6c16ab8f1a4c69c9902eb08ab591113dc2277b78eec5b1e6216e362df3f734fe78a698b75f671831b381c3a3c08e79a343cd8d06aa31c4f0a309 COUNT = 27 -K = 84291ed65f7c312df17bade82fbc73653f7f568e6fece6a1 -C = c9670554095ab4b134d174aea9fa4a52b6c2509d51f8379c5028bb9c28e779cb9a7eaf604a1a9e08889eab64f9c3a6cc983bf4311f849121060b6dbb18ce51d2eec1ec4d8c981b1aaa47db78e5623b7349492c0f0abb8f624e84e8ec020ceb32f6c7910c7a9ddc9cf2f2caed951ec312 -P = dcc9f4267db19b68baab02a65905d72194d87906e84036a7f2c4424c2aa53df23d24b3b5c7d32d88c39ef5abeb5e2655d755558730abe336b70868872f33e58fc810681a3ec900aa67a86e3ae62087b86254d172b98c821a9f671698ad88f9651fdcf157cc +K = d02bbbf31fbe5b98e64f37ed8bbffc0dcd98130e65155779 +C = 41fe5a8730e82588a9a05a87bfe7d7c13bbd0e22971c108d0884f0230a48ae94e274128d5858fa37462654b1361b83ab600e1af0e43e6fcbcf5fa075edc70fdb290ffecff5b1fc99741c08c1bc07002862f9701f9eb80ecf0264e125b9fbb7c2913eae3d71abb497fb38c27dc05a615fc5dfefc60089ce43887daa7575d4785c2dc8919e8fb86f421dc09426386aaca62e8a706fe5d93547eb264851ec8bd72c89f5542b777c8c2d1d746ecb88e09fd163595320d1972ffb8dc77c9eba9bb0e4e3bcaf34259831e7cb78690866271feff97783e5e1fa9f10609a7994c9caace91d93800d3d1389ecf1c8fb13278a421906e51fb43e76304e01160b392085c07fa67abeaeebca058d9b5c49b4cd05f3bfc552a4fa9b72e960eb423eac27cb6ab68403cdc5f98ac921632ce666404864405a16e753d30a1780e0de47736f3b165ebcacde9d5300b9271878dbbfdd53bb5cbf562f4914eacd2f5fcf8bc6aa256d6fdda79e87c018614d3a5953e8517b470c046a1dd5364a58fe22087097a56efa8f29b47acaf2576838215a8cef343c445d527047b8f2204975c9dc38fc9ac9d97cf153d51ee09741eff77b03393b6ee086fd05777756c4b7d8731c043325d8b7ac3666a4c3de802cf31999bc93c8a53e8f468868fd00b6d0fb7422de0ddedcb14e1939a3d49dd949fed3399ab5330298370766624bdf60420b6ec02da062afdf115c666172808ff7e8 +FAIL COUNT = 28 -K = e953ebd38d508ed839b4df235588131a67bead4c163dd068 -C = 8e3767d3376fbebcf7a1b5f0280f2499cbc9a6ead3d2bef543a325bd3e1436e8ccf2b40a08b7fdfdd3092db9f79de8b3a39fcc5b2914abcd112e93bcabbadbf0c9e8de0f43c3778221f6bc78c4ee58c5e46ca89ff624ffeed9790140a4c39c6c0a686f19e947334134f30b4dc55c64c8 -P = febe1800d5b80ddfdc308d1a38167387674269530e164325339b785044075d900aefc80332e168f2197212601f56c53514c8e0f88a85a52b3708808b1ba7b2cfe3a74145c5583e4f80bbd42c1dcacfc26e9b220a44adc4a2d33859853bf9851a234d2d97e8 +K = ad1a394aae34c8b13296d67b45e2334169011daf9ecdb0d8 +C = 85624c6f0f4b7716d2a387a72604181e9c56687478dc9097996d9d9eecc87f314621491036fb300ff792f1bd71683e1140948186a8129b1381bca8c29709c25ca48dc6b8c919fc984df6d497e077518eea479384a62a14c314229af53c1751bed696c22fa7e125c1591e71d448cf85f33cb418cc8a43f99f86497b34ddebdde9b338e54f25a17a0867479de233fc809e5184f594e29cb3bb4ce66979be6a321e12d67f2c4f43b07cc4bfac3aaab5c73261e2a2b7303044ef0a93ef13a40d8f84aa2496cd01cd40ed0a4e55d6493598602303067fb624e5f32540dffef03fb371724f07de6e1926aaf508ff9f8795623fe6d0e3c4b0f976114839a9d5bd2eeb8f8cd857491ced479a9fc67118fac39d0880edb93163addd9ef19b31202d9e69af76a343504ae791207008ff1e21f9e19e24873078231a1aca858422cbbc266d88fc45760cddf3e044495dc7c9a1d5183018111ca81b9870ab97b118c94bb90504d1f4eb288f1968b397d1e75141681049459095465646416846b10837ada1076c7bb5c549bc907a2b457e1740a9912c7e9be35ebc16cc9fb62274b60c42dc1b863f8323ecec59768b9dfee0d9334c99f559bf7e1a94b81e2a2b865be09c656f48f327ca7bdfee5fd8ae94f765ebd895e5deea943527455972289d584fe46542e8b89ebc2977fe596e6445af47b4d7e3d74426048472efe9682dd31abb30ca0ab5a3730e483fce2b51 +P = 41465a7ac629317aaf876e9725e7afbaf66c04e2441254ace9e1875477ddef39c0494e7f2108c4bc1e467713a1662752e1c67aaef1981bca14a1c2e6eace477ab1ad234885283adeaf9a88f9a07b8db585c94b185bd03e00b028fc73e7cef68481d3fa00d41cb61e360fb636d6cf5c0bdca82914cf4076844088c0ebcb917b3b06395ca4d449e5f179e3db892f7e81a691114383d8da92df30d646a385864eb94cc78f25fa802b04738c7b8d6a4f5f34510c97654c400eda0ec13675f74b7b998c5e8e1b9cf1331c2b83f2c78d3823cc3021e2c1099c08ef29f8725e3d598dae4a3f1cd28ac2ca5bcfc972b6475344d35104ddfcb712292d5b7d6a922f0ac3bd26db4345116df69f6cc8f2bcb48fc3c9ac5c4cc231c739547fc15f6eb8fdf5f7581b6e588feeb4425d1f778b499868a98c90d6c0a0dea05b6415c14d2b2a101101e513039e2f3eacc76e786b2a3bbb373cc1411d2a9d1cb42349aca2a0d5557a28a0216bece97469de80ecc9b76842655ed849c481bf52f0799b2d12355b9af6f4c411eacb56121c85c3a1efb07f57850bbca4c95a53784e3ca52e09c2cb8a1cc11d02c19f7b3204469918167fc48dca3a78a1c44182917a3060e6a74b6393dd246ce1fe62a78738d9f59083886072a34a730239094afd2c8fadf5220c45f8f667e9041cafbafe515d98d68b7af392ecb3f597b221d9cc14b53e9419fabcbc28 COUNT = 29 -K = f1ac3ff9f09b8fa32b79fafa681717a252a8d27306f0fd19 -C = c20ec4bc038f5411aae9c96cb897fa5c8a79228f2ff6dcdedf18aa58aead9f990782bfdcfbfb3326620cb70f35a716769cd9c9691be379f8c2912573b9bea0d61aa235ffb9e50ab97575dce7d9bf4eb07a59cca38eced0bbe267f524d7cb289f4a55c22230e94d0a81d115d59db8337f -P = 983a8daf433b126f42522fa845f03533011c067b3ef09d710bfc50713aece3a62cc726354fd26cab5cff3c3699c20b48307306161a79d09bbe974ff81521cc34daed19f67e040f00b0a9c9cc1c9c5bff83a2299ab322e86389dfa5471baad758dc334b97dd +K = f02ed014a533054faa84ea04951c118c401d6e62f62d4a84 +C = ee2b3e5b41067b0d197f4e4d9a445b63511ba6fc5a543f25976e4ad526f2707937b62574f5b2dcee7ab59f4603b9385264297c9f07a5376dffd6ce0c807060558b77ca969bd4b00b5d3ca6bf2a3df85906759a91667be958113b42e047435fc1e7508f5331ea3bd8fad182c21937ad47cd19bc8638bf12bd4b20ec9a12e4485da6be54b4ea3a7244622d6461b1a23ea79a3e93ead5952f6142da73b41746eeb7ce0845798c1451572da04180a4ff525ab9b7aa5f904077f077e771f8032c58ae435e23875302c9b85830a563e4d96ad0059b3a69da233740184d8f4eda518d54b7df6fc9dd55349e66d278adebdc4cf0c0578d23f73064fd7e872350624127bd61692cf1402147339d05f8d88a5af1998802b80b1052bc5a22bd3df7bb95eb522d2a73da5ac7eb1daa5a7aa11adc3d3afeda6af52bd7b70d679ee5153554b5783414e7cfba7cf82dcdffdddd3326c707747fd1431506295fffab07a8c34906eb0050ddf9837967ee72df2514a8eb63c67c10da0de02d7a365340c94ad293851e23babe8294515bc9f4096ca2124982436c34558933b42e60c948d97796261df22f855ec694c9c8af6c1b64dcdcbb843ab244b64b711608ffca360ee6c4edc4a53282cf052337a73164cf8e0d6afdda12e1afcfa1a4d5edd0d484b349021dc233ecb6dddb4fb4db06a9a5ac92c0c8aadf38f5f799ea694da4fd3bdab70e95b2f41d2a36797beea4f8 +P = 29564b8accf6b412b3314b4bc8540aa10fb50f1f231842323cd35b39dfb53e6eeaac47a07250a8fa32a4eebeed10b3e8829875fd2c8679833e9bf1e48070c3a36e2b2712d11b25ff6bfb4c24221b0563d82c08f95348646299c6f652aa3b5ced36ec536174f5487af8ef068793a0e317f1c96c787beedb83bbc1a3e1c82ca3438850c95c7c491b0a2fcff96aaf70174ea19cd039a3c73a23567272390c60e99fc717a3fc77f60e7779c87952024cae67082b8a14a0c1988abe55765946c5856ecd9a207e390df3d17f8def1469784a700f11ceb28a3901c236ce04bc01ffb08855f3e51250c72170601b4eb46bbc7a6fde221eba6093cb93bf391e5cca1d8ce99a131690791d2d915880010f4ce2b5987bf70abbc9cc300539504641c7eda56ede7cd4cdd69f7cfceae670b133e10fd2b46d7afda48b5c492fc768beb1ed84cdf4bb6442280e5a943799b675f25ffaa166dd47219a409198d05746e88369ec62c73e2785b11385a7973e537d4e2f98dc1b0b45c408fd1e0ae7cc77f9f2ceec8c7434999c7cb6edc4e58c9d66d7b143fbcaffa2f032aa23769e43ef42d1d2a39e63318e75dc230384e395019fd99c5fb51323dbc3e492011562838bfcd527b7bd056cd8a7018af5652a30b17c13e38501f182670eefd894cf090e6400a0113d6a969292a2fd6aa380f5ff85f7f69fafcc018c6d3c1cb073beb79c6b441e10c6da COUNT = 30 -K = 0c6ea52fa51d295ad5a72a427c97f62090f0e680ded04ed4 -C = ae406bfd1b8f642b0be5f66aae5b7b66938430d9283d4a4b63f1b41bff68c25454f63783be5a3eb47700b82f7934e85e1a22171a11933731116f66413bf73c1e05d893dfe3c19e4ca2b01778a08e05816b7faad50aa748f57c99483d6ef121d87a705b8eef65267951670005db20f3d7 -P = 2ebbb4ce77df22eaa48121bc3357eac9346c03ece5e8c1a595141439c0b35737244551198da12df6b18f40e4c38356b0855c3105551e65b7a20e112a3e69c3042517767f2018dd289f419903d957f4397b305ae7afef9c95eaef1bfbff4d53251b9946ed51 +K = bf818ee381f0d3cf4a031b4cb5a9a6d13e2452bf9a5d164d +C = e5f61abdf4c36f3697c4bf038207c6fdb265a5b3283277e32e85572a78512fa208dc174bb88eb1052a1b53360bc8865f67577b6f6d351e77bcfddd98909f81e212da63b1896ba1a9484d6e40d4b21a3e15f49ebb16361a3d3f40ee63d7d9cf62e8ebd42ac4043ea2c28dd1cb879c07694aef644e98b23fa28cdd7fcdce81c5c2e8fbe5556ba14f0426ae66f746d67f5720d9654fca19d0ae584be2833d95c466edd9561b93e08786ac3ddae11043b9977a1afbf5d18d74a33dcaa5394fbc0f9dea4c749e6424ae3a7295a145296e77005eb8b56c5342052a529e69a874f6d51d9393c3d5e84d91516054f1e2188eafd717fb7b32bb292a22b2f494dd69378cc16ca698ea8f759542d5277526a3796d48697fa1459a253362f048f75a6949af91a9d6da01fd753d1a4d8a53805442ef536c0ac61a5de3c5aa3128257a495c8a7db0bb37a911f0cc50bf26b4f5055c50144bac009c29ac96a8db262baaae8e28c5a1863a20d844f31117cfcf4adf65b14c7fa4940b58b95564f53801b5a6c72713520ead6bc8e22b36d64d632d48514e916635a3fea4f05cab6c4d4c627383d6b29a64c72ea9476f9530082e6a17154fce6bb9c1af1a8ba2ece6eb7560bfe3c7eef31e866b166395dff22fb8a9df14207d023ba394fa41aa49d85019ba9c53de9809e08593b53985388e2de532ade04013189a04a178c9e9f058eca070a9d87a29bc027e0d657b5f8f +P = 10a5307cbe8c7e49b8a99a62b64ce7717a12b5a5113c892dce5feca022fc07a9491581b39fefdd2ddffcaf7f5b13eabed90b9f6e10053a417b04fc90292b0fa65c869ce23c87db3436b1eabfd7eedddff4c79f0baa1808b4ed83d39697714ea6d0abbb91f8f85b02e4404b1fc2a3e643c47b599eca1a568a4ad33419c4ec9ec882a7534ef380222acc1513b3909117e34800417afb59f61461369b7775bb460f028ae8b6cc3de5eb60f9ecd6dfc28d6f717045594a1b6e781aca9f98ec1d37b941a269846b9a842c007499fb7994108060bbb9ce5c0cc96a8d1abe6e7b36244792587a5cea4b7e1241f1c151cb2df125a804cce9407298e5ff9047c0ae5edbfeb7607596bbee74ade7d56e613ac7b12b33ff8ab96bd822550c2b213280fb1a088e0832c185f26509b8a8954deac34a74b14d8d3151ce3c648f3d6c38432da032c71d2074e3561c9268d34cf3ae3191a6c574856849fd4854558b762e36a5b7c032fcfaf8062ff36e06ad3d3efb5d89153c14e838d6e87e6cb178f3cab4ddccd098b9f2b2e650df70519905ad977bf1f5bc3e0924722106720daef134a3e5d2778c1ed5f5dd6a1594ab156cdde30b37b5c970bfab25d36120049e12fbc370b1e4dc4d04e05015d009ad411c2d2fc3bc1e348afd7177633e0174c858b51e434d4e0cc6099caa8c4ad23de3beed33f5f5d9fe7e5f83486ed921d08ea3563ff5e273 COUNT = 31 -K = 6444580780b9241c1e00b55d16d969ca3849fb5dbf39e8bd -C = 1384b7b9acaa3a217c268caca6fd08be16137736f6a0a46138672ac6cce2024e0b9fea60c28341d90f15e6a480dbc3dcd48ca990f244111fb9e40be4f333f9ec0110c112552c833487d544c7835bb771846c8c53f2afef6a75a065e97e3504e2b60dbf684d59a60aaf529bda34530e5a -P = 6809d5a8a1f25251582c0c7a20006de5a08bdf45bd18c66caefb3b1e433f6060319b37294e0b9b0a5beba558fd649bf6935a5c1d7ebeadb318ce5b22c3d2526809ebd81eae52742e65c401a9ff54c0a5bc271699dfc0393f950a20aa47196ec5e2a2fa60ae +K = f4f4257854ca600b66433ab624ae6f56e1ad753104617126 +C = 5479f35db3c37626640bc9621d7cce67cea8909b71bd531389ddd91db026acf23c96cc52f689d3c006fb89543bf77bd576ed8ee9097f1fa9c06c64b87d0a2057d1661c52ba67460df57f6beb30547a2cde15f773ce7ec26a4dfa6b87205d7bda262f90fab1e4db2dd848d5e466056a9df73ed99f64c26bad862245b8fa1e48f6777a64e84564da2035beea2762326f5bb52bf5ffb0059cdb6030e15d67aec97c14bff7b6999ac1816380dbac65005c40b5b2042c18121742536e42210b7d1afecb550a2787b59d88a0a67ef4674e5f764d06df95f084cf6c396c87f8141d7bf1a1f080a11ede6b2dc1ec720256e670cae5b7921ba68ca44496ad3519b570771b47b0c85c5d986dd97bb0eaeaff84497818c112de5176a5c5ac1f540734ac72e553add6bc9f12d5a1aeed5ef866e9b360dfe10ff0e8a1a1cedd2d16d358bbc47accfab5326aa486ec75b463df63e7376ec741ab39de75fed996ee75e6bdd295a4b77a693e7d43fdb0225a6b9889002d1d12dd7b1d848e2147a2f170e3cb4aff6ff0618cc79ee231155585ccc17f7ea00d6cee9787317eaeda4fab642e0ae4e89e60596879331cd91af60f83a17410454e17c2ab2a62a84f45374f27e319ba5e2918295e82e355a12562c9a346d6251d1a23ae88852ba01bfd2c6a14d739acb6a91fd1269bdc35f74546eddc3b8e319f64040c1aadd18f69529dff0c2528745eb6d3528c46c13c6501 +P = aca06576104265e334afbad7be4d889cf51b0a64553b29058530ab460f84c1744f221333cae364f71fd595b2e75108e4708cb3eb62b8c603061f0a15d8f50fd9a6de74322860a6995ffe2fd01bc19b1a73d2294733d034c524911c6ea166bcc57db14fa12d6e58c4de03c6ca30b639a60106c4ef64b1a4cbce79cbf7105217e3c380b5e478594f67ec41da33a89bf7aef58be2c214c062bc72e357863cb91c7f485355eed1ecde3a3274bf63c8fa59977373e80d93a6a1294c5cb8fd2f762a072f12a7bde49649bee8e6ce13597fb513751b53896e77be0526fbf407b8fdac10daa961f6397e1f2d996462dd405ff3d20beb982f79703b6ad505e19c430f76792033c857f40d8089e801f22225668eaec506df7548c3b4c9c77357393780256604c4066a78509a6c31305a087c2121e66eafecdb8978f2fc3451c5c9e27c0e15d8990049befc403dc01bd1162f9137cd8448a28fa7a3962ffd6a4d385da9e25261427142e66142cf3f5cedd538675af4d6d66dae97a18cd57338e85b7e5516bbd9cefbb60e6945b0465c62d4317afecbc5a1727598426351237a716f71bdb27b76c05bd6005d4a90081eb998442b17c2e20e2845fa883e52bc901c9c46c7a04a4fb2647978c99c5aec3e75532be6ffa5083ff63d07ad440cb945ed76c8ed8ebfbc9dfc81e1926ad73f433d1a8b3c2d0995dda93191371385853f42d3f003ddb5 COUNT = 32 -K = 58d8e1dee1d1da65ebd7430123505697583cb3644e34f8b5 -C = 0ba54b3a7e4a66b36b99b98d41f07439728aca989e484daef18ee7ffd2046a4fcc1e4f01fe2c0f6140a5a1701f2cc278e9eb45b925534339138c95cd65d37a895f9479e8829381fbb1827e07a679a6cb567666099bf239ca9227313a23286dd1562fe4cef4679e1e2aaf3f7070018e29 -FAIL +K = e2a5f39f0fdf0bfe5a7506e9db2e3a0475d42fe54738fa94 +C = dcdeee80cb56871567eb2ab72b501187382d92d57ce6767c158fb4bf46533279af33d0f17b82750830123c701538d98c43b5741a4f0ca02b48deacdadbc36b115a47e6cbb34253430da46539bbaa651e06a59a10f82c1903257866ab5321da1c0b71cece92349d720b55218e40d4921b641165bf3fe0ff9fb8aef852d9be567d0d246c2f9698baa4cbc9a6bbc4acb43f8cff1c6cf86bf0cc2dfae4629da0b637fc0077276beaddd02c22e80a16a970b6d6c36b9f97164d84591458641b832c794f0ba096b01002ca4d83c8e5183482103ec2c1135a75b87354abc0eae29637f6b0bd54f5f3e8668cbabf0b8cae1f188d802c16329d17e6244bf24e425d996cfaabc2b9e46db42bd8b1422d213edb49fde24c48855002949c58a50754a9ecf36911e8059f9580a1016983fbc377af0734fcea94713d43c5d95c6d3a339b416c64ba944d9884dc5fe6531241e36da5fa5c535c9262eb65a777de4b31dd2550b2d51f4d61ea4a292256f848a972c9dfef39db3e5f7ac36c319647d4edd84053c69309b351ac70305654db207bc7c80ea16964c9afe9a65e3b4545f096fbcf7cca4360b1d2b3232a6dfeec1be18c248cd462ec974d9698802b88f21d1c1f86262c3863ce4e80243c2cd30075705ccf4184ea3a105a63146d0452b446a59dd1c0b761aa5a24f78daf68518d9d753119628f72d7d1c4e2624abef934301ee78239e3569e3a25f5801a77d5 +P = e86ac44dc9ea84d259bdfe256b76da76c2b19baf53c6f29c5e3cb8323c433e4d4da439c34c3138c6b0b7f1fa109d37f458efa6bc5029d585d4b78faff83806fe4b7c4fe39e58188e8445dab041d4bd1e0a0476deb3cadfc435062f6e7241891e023de2c6c59c5148b75120149d1440ba3d0b747a223ac14e24d0dff101160936c0435a43d8f6cc3b7c64c9a77a00e3d21bc878f40846994b0e41081321d91881ed72b28c2ddee22e206f83918d05a5e85c89cf0638697138e7a8371398416f560e8ec1c3aef6e97c2cfaabc0345865d3cad20a582195b7c71dd0d199378303e906aa6f7adf11d87fe503da2bc1cf5ac971f52ed63d75db5e5c1a43cbd9c7a32db7ed2f6d6e8666e43df05450d5507d87a60c6c5b9748f2da0edb05d9974728bd2278cb6d90c36fb055a5794cf59ae401025b4bb31bb90455525b9c86e280315f494afb92fa4314df2386ecaca6f275beca5baf4ee4e50d6e77da49dfa1720896bff2650a300984c9d65333ccf134a12678c798768e5029c67268868ec25d614f6b2d8fcad496af4cd9dad6af0aaf3b0e599ea0c71b9a1ecf8e124c3f61484b3e4c6f1d960d0ee20859d1cf1b116cba5ce3e6b6b45e99a74c83c961e6292d36ab2fc30c3c859eab5eda4f41f7e625d7b2f56281c394d6c0bf04365c39b1d9e8c411675dc77c3ad24bde2a72f1ee4535c1a782acf1e488edeb77717e513a48c6e4 COUNT = 33 -K = e7bd54e9dec0c9d9af69d37886cb3bdeb3d07a5e2b8901a6 -C = 51442cb65b8c4112921eadcad6fb91e30693198000a3bbcf96bec0707e0dab135d9e6c0704ce8a9bf8202d04172dacfdd76854d55b9b7daa8ecfd253d01088e082bbd66dc85c93737d1361a3b7dd70cb2df818053e149820fd13a29e49b1c173ee67e1b19652df3a69f92192a0f8646d -P = ce4def8e3b7732049989c2f485bd2384d6d2444f2e313f44718e45c987a5580986add1232c68563c88d08659826c53465f8cfd494068128254d27f39f8d1b3cbb5140fa8eca355dbcb67dee1ed34fd24e3f034cafc6e6494e8f8205d39b902d2556cfc28bf +K = ff2daa89524198816926352fc8d00a3fa06342ac94400671 +C = eef35b3095ec33252b7649317a775139faf247d19f7e5125eb5224ad2efd8cdd4e628cbb2552037a6d1c907f36e9a204d9fa0c00ca39d7a0f082985c1b7aea86665870aa8bbb5edcd2ac210765c93faafe2d8b254bd41f064dae157fe01952e556178d3bdeeb6791fa954cad622ebc3db03f98f36d45fc1af2cec51aa90e6ba398b33455e54643f628496429a3434f62d80fc421ece9949bf55b89c0abb169a4a549e19d3782ee5fd57b12325bd4a22879224343f16b0982a1453fcb363f21719f652684a635e0cfef32889b3e2cc364bc18c4994377d51c96bcc6b86f81edbe54108028159fc372ada3ba62afdc6b068340de5c35743086dbedb6586d634a37edebd6d8ce61b415fce9cc7c32db57361d5eb1d853a03511ae73210a49b123d80b339b544908f7c741fd19167dbb878f3f729fd1d04991216c30335ac4ebeee1ebb60c9ca1e4c8ad90a5744a7cbaf2edb68b7caeaf09f1730257a8e8bfce2f76c686d6e499e3bbbffe1f5d09526d256b6dc56aa641134959e70a8e9dc19542eab89f49de829d0dd8942e946d70708f826451a10d9b3dba1ed575a571314214b7ee30f3bbeed8646e0e40735b7301411e89da69f5f603fb20068746de561763e46ae5c672b60ebd19522941fe83dda83773dcba72e8164d3e2dcffe58a56b9110441fc9910ed17718ce6feb717ac13d95d72fab3f7c44c940b610942e9119fa955ec6aa6d3fb1efa5 +FAIL COUNT = 34 -K = ebc3fd2cd9baa922dbd9e96481c9700d583fe7082e0a25ab -C = fca600159fc1747eb41db9066bd29712232de6b40034d967426a91a1bb2a604cb9a800f422304d2cda121cd5e7573646fbc7c35d63ed9e45cca37a7af87054da2e121eee088eacf3e8d7185e07af4638e2ca5c9094f9f3cae756d5d66f7bbbeabaeb3e1dfe88d2a1f6b5499b492c3d89 -P = 7f4fce860ec2870a3993640fef284d0463a7ac6cd20626de52a1b4aa11908dfd6130a5aed3194d3efa259804e8365d821ebd33c88ce0a7bb6e28c9809acbff03a77326839a3972438dcabb0e46441ef0fa4565eb6aad8de9ad175878d27a8f93c55dc8e6e8 +K = 39d07a03750bd5e84675b669209a5e4b0e220eab37a27758 +C = 1ad3a0dde2fd5a052f4b8d0ab9caac0543bd90c5f61d18ce2e1a640c6582198c71e8a818b3edd2f9b7758c1b29fc29ad8de949f2b3478376aeb023f85e8944fbacb4355a4e27b2a1062d3ed7fc2ce7be2c583ab91614b622eebd211ad3fe1f5575e8fa407aea6327f12ada336c4725b6dee6a407ed4eb390b72d43e019f12b7618ba45095057ecf507f48ea6516da183339b06ea706cf4b397d7dcd3041cccd4961ecc65953a59f37288c122257b1e2a19043f8ec8d55e40474da7fec17566ea12dfe2d233e4d426a585bc3e04e94b28c4032836bc3546596caba4b15bb643a71e152def40d441999ba5c932e14ab6cecf3272823ad1c2ef5f082ff775974db81f958e7bf5ff52bc4b450dea104d8917f2c7ad0460b2cca4dbb2c6c3c6a9aa2cbe781c2262c10aaea02ed53f0c32d9fb9e0d5c39849df5390d2bd41b22c4f53ed85b8a2c1289d0013080e78828158b03f7fd7cdb4760587aa9221def28f1c9eba5e772aca8b8f01a26b6b094e5b212737b7a74db08add3a9a20fb798c576348eaab8e810cb5acebfeeeca2a9ec9a9fa149028d6e00901c1ecbb75ad6cabc314f892c581e4a9697800220f98ff483737bfb7cb6df493de658fd308e92cdab54e95c1673441fea794a8d2acdf37cf138d915dbad6849a6985c74a8a14a8981f19d1df35008a27a253edd5ca5ee7927ee3a0714f539f3ba876d9490655db86aa72bc89781a3b3caf49c +P = 6915efa61055da04168835724270dc585f51e62f206936b0099dc183db39a090038d048d239c04da015f5d7ac8b7b8495abb1855de213d2a573b4365278da0a46504f93882db134493e581417247775eedead1c53ab6bb562e328dcd079f32e7fb34ccd55615e57da0bf12324ed78465abab3cf00038d3b4ed6f22d61011c409b30911d54e468edfdc4af4746c1ed7206418287e25f477cea451d8b900a8cb71523d43dc4cb928984fe65b636769f3bb86c4cc95d785bfa4d9e50942d4b755f707fa3d03c2b78ea534d9eab602b50a74668d43c8a77d6adf1a713e9531f0b82c20f30b07ca868444e84ff357e08d7c799e1b849ac980274fc0a85ffa30129d44bc503a6aabc00cd3a931e35ad741834de7d50247d18bab4fc04b0dafb221d1d3e51108035fd9bb86d051d68ba3807647f2230acde04504dfca56bd45ef9624edede2f7ee2b0bd11df9701553864933c55ac4425c092d0c113879b3dd37895dd1f3f7d47dfa3df55605cc0f3d41f82dfae18517c0bff0ca23c569f46ec26933084ea2af025ff42f1b56f18bad4a6f54cc2de5bdf81232e67f346e2306777e1a80b2b8c507e4de7593ef1a6c8b496e260a0f01e82db7502d3610a5fdd5540012e564401d002541e79b4c49d3c2eadaccead320ea04d9dc77898649fe2fa9f70ed901a932bff6bd5702149fa51adbee990245f654f3167163685b74c71507df4e2a COUNT = 35 -K = fc67b749968498378ee9ebaf6fe2b9edba5627343069e3bd -C = ecea7d3ef97a2c4fc263ac1d486dd15473e18fb5f86c0ccb5afb1dd790e902023432c4c2cdb957ecbdfd49e4c475f4579831d1aeeea349989b255ccaeb896011003a1a9d96700d61870cb041e02f0b36bb805b315565b2d4a1207f8432a0a4319d64235ea9af585984b4b908b5d93c81 +K = 8962545cb45006bc2da1ee5cc43348f9798e0059902a206d +C = 4674374a2b7dc12a37cfc4fde692b9697681d7c90866138c7a7a76b498cc9cfe9891f5d59f697afead56eb522c1919e7fa5d6cae59af2b70caa80e46d7f34d77058e31a2bbbd08853ee34a3c36d330ddb47b12afa34efc82d13cdca5ea8f9aae8b14ea6ac0e7d841e717850692e796d234d744aa0b2fa08eaaf00c157d9e352a49710cd61ae75a8df98f89bd96838d12fb84d5acc5424753e1cf415880d62b8bf5e4ae4e7eba7491012afb1ee48c11d36212cb90b917d87db663028aa17cf4b413699ff6b6266b87dc9eea436b97d431c91ce82f6c114697d492fb19c7e605cee94afdb314f99f719e29bb26fb64eb81491a6f1172d21ebc8c6e6b871f1a98438ec62285f170eddb420399d9f63f3a2b6ac8432af938f670c42cdb825632920771f13f40024e5231fd5c453b5a0228876d72fc346d3a69c5e0cd2419cc9b619b11fa1234f077874f5d29f36340771e2bfaea4ab193787d88226f117ee10b7fec9019aa9f6164e8f99aeaf23e1951f9a4ac8ac55700d745f19aa51630888b83b5bfc3072fb15e4e15c8c8d2e4c1b57a987a5c474ba011cf1d99c31891858c6b7cf6bc27910858183eb24d8c948fc56d8735652f53be32687acee78fb6b5cfa409acfad5f1835d9495b56974abf7c2006d3c73ab20976f1de98bde0042a98ff71e0b2d329573cbc3954a7b98a6e41ff2b9eff625cd3e9037dbc3c63a1fba89b2456a7249ee0525ce2c FAIL COUNT = 36 -K = 5a547a058ad6fc89a8ff272a649668e6525ef919624b6070 -C = afb6d51cbf7da0a03358aea319c8304efd27ef080d163e48c6085d580d5f651b2acc858f610946d322e3a67f10a268f68f378bd81ab35cee9b873253ab4c2b0b3c71011824434bdd775a2338cb517810235def2406dc4417f0da9a978a2f2b97c840d9599bd685c7a281e323e936a38d -P = 089b435d6c649c627173a5439e7eaba3da41d3cfc102f19bf182b1ebe34ef24fc57a6f41de07e65009b7342f45f7e1b3077cdeab45a1e62ede54e086cf72063fcdf4192abf75c59bbdb561b7cafdb195ba19e64676bfe6654fb978d383ec8a423f62c06d53 +K = 32c7eb926967fc018f4d3b68bb361c03993dcbd0d2aeea38 +C = 891759a2fc3385fc145d3237e6dbd156cdde5a3a872fe5f0a9dfaed257dbe2137ca75e07ab601a0a658ea700748afc13eb7138c03adb32910cb6f465860f3f3089541cd15c90acd5fa5c6671d868686af71473cd726332131303a0c4ba0453e1953325b668d765833bdc044c479c35191fb0bf5e5111fb81f57134f561bdbb6ee2914c9b98c528358e2b99fe30955c71942ebe3436bea1a499765af4472fadeb100975449759c95ddc7d98f8639175a2cd56457a41f0f5da13ec6b35f260b6cc9c9d96378b230a662be6d79556f6374a8c8997b262a2cdece3c0741254b623619b534ab7b946ff0f25dd0e119c1975c6ec1bf0b54fc7af931d0254f66784dd328ab7abf3bbc43180d5c32db560a821e0336937a99b50def737598d04cc427bb76b6f3224933d852c78e3f87446e717b301cdcab3d55b228fc1c327b11cc4a96cc661cb343a82fe30d17ee6bd5d487d0ecb9b5007c8b4536fdeb06b476efb20968dba998cff66772aa5e2a265f5ee014b4a79f3fc404f9f061b9e06639d12e30014d9a2a4c281d2efa1b653545e4dc306f289cda1bb9ee4ea0ee932b4b5df67d152aaf97ed616f6160bb1f4feea439d8a75dca54cd372060b14c1f5d12db36869b337221645a9154610c1dab0d418b8b96bc3cb23dca31d71c43e09bf01b0bf945d6e4a058ddb4cf43e9c9b4844b60acb548e26bde69a7ae6a4d4c98ce21c696582322e133eda5ea7 +P = fdbb7961c97630966e7510d61263dab0da3db448ccca3a053eae0a42f8ac9e2f1af4a65f3e05c485a6d6bf414d8b2273659c983ce8e9694ca48422e7be11396a4da04ef1773153190ce342fcf97436b2aa7a2240782431e63f6a4ea794f24f817511c01946af6a285bd0886b031f40db87142c7121a61a42192414046d72a797e00c8db471e3f2f27b6e042c4cec62058d3e8956a70d12948e2dff523dd15152b245b9d4cf46764dd31055cbbe896c8adf5ed39ff0ebf11950a66a7ab04df38b560a0fd65a992c39eba09d8e0d85bb7f1980d827ada6e9a7ae6c8aa6bd739141bc3f92159146da870a78e7844a0ec2a8fce15bf9c3059f12e80c03c742fc2e52f5f997360e6f00f30942f08584c56db6a6b996a5429e193ca38fff96c48b547d18c1977ebebdab179e74c6ee5b98e60693c23aa2fc81ba2b98cf47d4d194ce238e3c681b461e8235e1f53c0d56b29ab7e1d06816dfa3fb45d442f3e0b5b70dc75c1c972256f60bbd44d0a78130c679cf1cd9859abac8fa9fdfa0c9aaa6f61bda83b7b7d2724b8bacca25c6a907ce87b3e7c4623391b73f7f556bb409a0611d7c191a02057946fd0f48a0a1872fb602849df9d20ad2e2cdc69397b14a299be7ac409547864cd30ce5ac290462bbb9846377d0e049aac5fc2b4c0a22c8d0d011a7dde2e0009da6a5798615de29bea30b26a3b38a9c37203ac60bc9dd851434e88a COUNT = 37 -K = 7750c5c6dcfda0c7abdea1106070716afcaffe72ea32132e -C = 0f3cbace6c3fc47614ec575a97ead90efb3c223144160245e8dafbe0745b014ee7a2d7d7402a02644f2cbfb7e8cf06f7f070927a1026c2470b702c958754a99345f91e9a67a9f7131d82a3010d49a81007f0be3855b8d5e07dcaa45b457a29b180da656dedda0607d471c85e3a636e42 -P = f19cc02230a11414846af9ef5a0b5ffd95311c06b9180135389f19717b4d8863fd063e525ed66733a336c77b6c470238b1833a7a5ba469c9ae44b96e0eab9e1c8c4292c00b7f29774dcf6cc22192c5d63ea93e555e9721f36aae28c9f5bb9dd626c68f213e +K = deb50f98f7f34b3fd3d0cad8afe852abd0a91955e1698da0 +C = b799ddd51761944ffec3aa71b0a95cb8a7b7436e96b7156c96b539d0115989abacdbc586ba656bd208472884705e01dfb9d285dc727f35f78b8f8e338808f6117b5912fb3a7930109d1f669679ef7b725b731d7389966e0e8c6b7f35ea35c904717a8b489c336856ef5b0a455e42e3b7ef4692096b1a6e23a7e6c786c41cfaeaeb66b477195a9064a880298181a9cf5509d5faa00a266665a1e5020f7c4a2d02ce5b5b158a64499671f09c318e5c0ffec04ea382ffe38edc1b7ea051eb1047fb4f7d5cc1c7db721e4cf1f8b995597b4c9e978207df26521e93a359236a01cbc8a8fd5097f43c4590beddfa52562d1dd66309a0536a8eb93584a4d25548a5d04f04772b7d8689fa9f4d78badda1e2e2aaa0821aac70db68e0069a050bc985525b3439ec1323e33911ee29c71f390396220206053a9a162158f496ffbd9e7a6f5e964559e016a669b69915fbcaa078c3bdacd8331b6878523f6ac7be02af4a0a1140d36a4582f1b597f149e3568fc4aace0f2b614717176a024903a0ce8a0a2aa24c27071ecf541d332e260b3b43eb87c43cdddfeb058a8dd5fb30c18988141ae93b7ea77a619a280cb6058486642132a36b617d2c699c474ab87c9db655b4957922f52e2d47db7f84b42a022bed13c11fdc789b9fb161324506e00bf19dcd1ff941bf0f97ed468f6a8fa59dc18807bb1a095a6259b8ac6b5816ee026f9adc6150b9fe0dd747b42252 +P = 1146be912eb83ab5d5915de756f615ff09488054914f1cf37007c843be8d1b2fb64090d90bd58b3beb8630c958c8512899ea35b67a3c184729b39c6f8ccc0f2939e708692ae437895e0bddd9704fc43921bfcda0be63d84e283e33091c9909fede032276d28f6644210e508c2e806738d08b4c6c6fb4d3ad564678fc3dae958f0fa9d270a8cc517c321f999bf75c542ddc51dc2301abbef9b01c7939af15e335ed54ffb89dacba5b7cdb3ee568e6980c793a6398c9ba5d3490015f03e39b3e2b2935fb22c18fd008ca4c8ae01781f6b928e8fe2ddc36bee278066f0a82cb3fea5851725eb414cbb19968b540bb005a6baf74f84e8d44011c94f171157167348ec075e80d4b08660fceb1774b962359568d44b75e9dd9ef1cb77b1f63d8c7b37e92bcd65c68ac2df5f7b888710eafb5f317e8166e45bcc54931ceab856aade3598e0d5593da55ec62696d3eac35182aa7efe42bd17450b825a7382db52b9a528a26e537d35ea2783b315aa6818bbdeea1f7b908deb8fec1ac55b8dbe0f610d7f4e45ff93adfa43ad9c82f639a84fec1e1a3078cbf7f7055380679b87dbc0acb65ef02eb3008fd6212ee93542e1181fc9d58b118388596dcda9d4c46056f15b38d5f328f7c082556e07b55ff0ed8872707da50b01661fcbab839eaa3cb26af2ff520fbb51d6651dcb8e0e3193d6c7c52a931f492a6f30311e49c4cb30658cdabf3 COUNT = 38 -K = 295750b9abf8ed8e8f461367aee98366ea29d63b879b22a5 -C = 76e409f8aca298b699edf1ade478f7828add7a89457739b37fe5c65c62e2c44735f867a50c618ef931522086dbaac3be43462bfded05d5f6a9a8fa616e213b755f6a71b0f21eb75115a5d57552082dd1e12158e96c8bc87364043940c304696d3c327170e093b2f06cd3593aee8450df -P = 774dd220fb95c88eab1cc153013244d69249d6ce6cf1e5bc1f33f454bf618d48bc06f8273a143901e8d4495372a807a1d372333deaf7ecbd7d354ee0e2284f12da06e166584a8b745da29f98c1791409f3e261a980412ff585340191895120099876edef98 +K = dbf8094a4e012e917402a6dd3b7d1001196f529c7c9d840e +C = fa70c4bba36c6c197d9da32e4b5c030e1215053a8cec0b217b5c16cb5709fa6650d0e93bb1d759e6c5aa416a0f0b9a27cbe56595e1c7396d7db5190dc4572318184589a310ded8b46ad0cb23cefa7bef57dc8780bc28bca9ee8ce11e1f92171cffd276316c70d43ec0529c7274d124cd51cbebc9ea35458cec8d070363a7da65995c58a4856cdc78c96e617efe52af9354b8a1390e7b68e15e9c11ed550d79b704c436a36bc180d23d5cd4c92b733e732c595b76448d3b7b49ae1e225292b1f128bdc63de26f226acaca03cf54a5772a8fe7aa78ffb0dec733855e18ac2d65165bcd2d67548c1a11c10a19da17d27f9f7913b61693bc55137a344561cf641cdf6a4d1b826f8f8376f5480b0e606ba3c78a42f97179b1f9b97574879d89c7067e18bd88efbbd9c429e6e20108b379845dcfc649a9f85ff9d25c9070f38956188bf97cfb1069ed5d8c5452dd393491f802e78852248e11901fa4d9ac91de242f9e1c73698ba8978134f09f5cc6d650c7cc9cf0c399a847baaad5936f83bd6e9988441693242e8b419d33d04f6381e6febe66225161e17b45e05746e6c7ed3e86bf8da682e7e35d0f0aa1330cd7110874b0c2198392b80f75b57c395c880d3066ba93cffe3e3b9fc38fb246742b75320f83f92de7275a8ca3f158b8e031f7e10633254efac2b21d32e4bb4d568f321f21a0de23901c52b4cabb818b9a795a3aa2363d9feaa25f0126aa +P = 6f52cc167c24ca297e9b081a477c61f5cb6ba33a0608d62daa407f0c8040dbe6d3212bb4ee78794f60e2531b7abfe4840780ac25ca919686173df51acc0613952bff050e556145a3b82e52373d62935ca0cc9b58c7c4dfed7c5ee507f06f0bc20b6271755edf9145ea75564796be02774ef47e9d2229bb4ccf53847e75f4891c35b5c050a1da75f7f8bd00a3b7fe3eda4361fc3aa8d338ebcea81c1b752dd0eadc5758c875e2d5086c378e0f798c04b570518176db898f6c45fcf7dbb3aa242a071d0ed16108699b2fdbf197d07d6f22459527689bed596a411160e06390d6a200799cfd25871681a80e30f20ea59a9af514e50b354894fcb48e0c07aa250705a69fa6438b5c865949987ae2fa4713a0e2f98132104e6143e3c6ee0666f2d221133f22292c3b47eb795017ef6b20e27bfb468979b2d5b7a3e349176034fcc026639b2d91cfc095364107b1f4c29f1d8e122337168ab860e3c8d6d1646cab2de007eb8a9c1974bd35cc962e2f497a8633139a1dc74e0bb8c5606455921d66b8b0920d296f473f2278f422d7f2a66c9fe78bdc2245622d95bd999aadef32acd3a578bf468b86e8b07773e7606c6c76bb881c34e55d9650705e05a32f0b3859efcd4764c963cd5c50ca669b97f371a7b74d91b1c4933f00df0aeb08eb70e5397d8cd2830da9dcaf9ddc65ee029167ab23cd0974588f2e2422272c70258f42f089e7 COUNT = 39 -K = 72adda3f7dc0a1b446010609f7500be0f92d0a82019d9159 -C = 266540d60899a54bada208cb768374a616ddd3e7018142355cec39c53bd2e3d04d7ee240de34b91495ea825bae5cb511f8de9fdeb3020956542d37a9c18f99f44c6725577fd14696ff357f34766d18393a1a02d185dcaf2cc46ce8d2527f5b9cce95ee003a32c13d28d4f74de4fbb9a6 -P = 4e75d5eadf312bb16dfdbfe24413e5edf987d54bafa670d23aeb3bc5a990180c035be102caa155a9c092428ccd8153d7086d597e8851141254a7748a297700445b4054ad7258bddf729ba39888a0543019eca76102a98a90ba6a0abc061e11b695aefcfb69 +K = 3a809aba7669c630d432e47adb10fefccce455a7a6e6992c +C = e100493acde448fb15fc17d06321dbab87edcf3220b81df75910d0425881669e9d2e08e05f3b2999d4acaa189404726d8c2433e6a46b764906edfb8309a01e0b47743db98b6f8f0da8d848f6d4df8fc8626e2480d77d5af5ff2dbab5ad0669dd69d7bcedea7b376f25bdec298261a0f09e237623c21e19951b158959cb71c3d1807304e83d66f18466997ecc15ee2b08fe281c5940c3931921f6a15bb86533ee42ea3d243bcc09be1492776b691e5a41661fa7b124767c61194201c462503f6a98309cccf3ab669a53ae9b6de78f00f132c9ec9a5b143696d3a9eeda94b4a1e8fd78d765c4c21d963667b55176f2a34d13ec252fdbf8f3dadfe16ae95efee9ea1fd564b7d16bb8f6afca3b8675d5430f1b4e0f9cc020ad582e4acf8fa4b7499250c5fd93834026e3ab52c16fb08477027bb54e483036f8775831f1164dc95b26aeb3b0f4e3ff1a2865cf59699ff4f448eee3ec44a8f67ea1dcf38f6d2f8f1ce7672b0d7a96a784da52422abd57d060ef7ded0e9e0a8764fef404542fe569b796db1525513a8cdc9edbea2c1423fa424c25a1f4860ec1d30db6cb236fab10c7d6e8312d00e04d4345b785efb2a52622b9857c0baa46c9b2ef4b60053c600a2161c835326c15951183e8dc259026ba4eb7e49798862268c2169c217122b8957099898c4b672bbcc99b11b8475692bf98ccd9b7734e867b3f719816304d8d201e88b46c797a63fd2b21 +P = a308dadf9811fa939975bef859214c0c6753a0ba54cbd5fafc4be33a25a4643fb42388874516d208c251c8ba641878fa6e8c5c2032cab25b9bde7b283e1c4752a3744f26a92cf78585744186ab8dba036f5e67e9d39ae1aac0c5a3c7a7e616f0813a0a08d391436ebd257533ca88f316b3c1682cbe778b7bac602cc66bbb9d8e653ff6b88628d9dca281404df4973740e69cf6039c995aefb917009fd4f499fc9cd6a268662c278076f6d138d2a59c5ec6311e8f4a151ea684d32c48efbc448ddf67cb70670d0ab11d2cf2eb85b522fee9d18ce644e67babc7acffec86a8024bf0b409a81c70d90e0257bfaae0803394087b63f4700e8c4790c68ccaaeeaef50ff18e55669001bdf3262eb74d7bf13915124985b852067246ee40baa8fdd479cb0940ff63214598e62df952a0ac413e3bf58602480ec2d711381344ab2619edf846ff6f7ca7cd9b0692b35cc869ff5715c197a11d77e83adf29b7dd0e5adaad26b1aefaf1184a124d667dc5289b32ee001416258932768fd79694d2d1cc3cf6e8a486947c11afc52f6421a733d409933e4c2cb28a66a2b4b63ed8f286ed1122946ee501a56be3c8439f82026e8b98a296afbec396a586d29901910ef954bd5c777e71bcc2660cb298805f5fedb3c65257d87d842936430613aa4c0f059baa0f7faa7892d1db4bb7d6dae8ae719ed7e238960a6f352c75bf876e623670871a1da COUNT = 40 -K = 209f71ccaa6967dbba10f9b2b68475ea6c59fc56d045460e -C = 93760ce19e2885b08fa2b58d7010734fa6d11fa657d25d977a25e4e5cb353283938a34287f143fa00a3b5d7102d9097f20914dfb0eb45da8998c853d5c29b06aa2f7a827cf3896656b442aaa03ac887b26a7fe92f178e4ad0ecbac71459d4e27bc2d5f1cc20c895743318e91862a1e20 -P = 2671e5a6a2558f647ab9f0c78bf27e61e4ff4997d1ccac43a4896c7570a2a6ac03f7d2564d701f29fc658efd95374852d89cd6b21ae86543fd4687b3a2e875781b2da3fe327f1a14a91843fc3f7f217bf9eb32e4cfe581c1728cbc099bb625a3e82dfb98ae +K = c2a051cacd016f39d2d892a57b919d4e0bd0f156c305856f +C = 11098351e2b8f69075f4383cf57357d57e61cfeea778d158927ef3900a7df8caa293a7145fe5bf65a5c9e11fe45ea54e5429aeaaf5b11aba13079df5b44a67a35f833226d25e392ec2fbb7b49f8f2c07a9b7db35c3c759883f36a1f508a92b926454f1a6902a9f3544ac220ca7ecdb82a66065dbbcca64ca65b749f3355ae64b9b7395d8aa31d0ccfbe06fdf54230f891df5d80129abfb69a90b93867aafd7934df0f2e6ec33657a425eee3181e7a6119cff214226548a1de92283bcb3c4bee0b9d116693d2cfd2746e23e0fe58be702b6cb682b9ac8076339889196a5b21a8c9d5a7c697b2fd4576fdea610bcb454b3f4755ca8a2d8d799c2f3da74317b355672bece44d5f391862ef86336b5f1ca4601743e02e1f371fe4f31bf7c20097be039f6f6fb748bef66dd2769921b1b078c83d5babd5662c010d052c0758d5140d0338bc7c0f1cc8f47b783f95cd1cfd4194698c0cda7bb31d4e03120cdc37229948455813b3c0a58543487e7b1179c122004855c220440bd996304240f9eb5a52f2908651e7ab0872915bd88a2516f6f0a44a3ac2c9e6955da71dce127182f5f73c6a2c1266ef73a353b771449b7afe195257bf44c72ebe32bb5b1e391a7d112476639cec26235cc1e157e352667a00f06271df3a6462d73d0f8e600bcaf0732fdb37b18591ac1983a42bb28da0196f9dd343a5dd0a6888e5f3046a0b21185c9fb5810af1d6b472a67 +P = b51eeac6c62fb82c40a22a099c66ea5ef1bd7c549831c355723fea9f70f57026e83c1158d0b6cd5468ff4f995b0e8a408f1523d241bac9defa3591e062af7337724518427b072f3aa50cbbde3f58ffe4d5a922aa75ad5ada8d1247ea405958d726ce1a0ee74a6a25a0a7dfdaeb6a30b7ccfb87814cbbde7f94eb0d8bb9476d3c1d262b1b9b113d8387733de88127ffb4acae124784a371b0765e44e681781b2ff2dbd484b0e816fa80ea81bf9712621429c8512185ef641d36e86d5424dc61643277953e2a003ebc075fa18858f8db4219823857ca7f526ad6c35f1536304a60df6b22fed8bf2b52b5fd36e5d9581eeb76d0d7e342699b7b62d12b29a4bbbe38479eea2596bf8d852adff1a9f71051c74d6f2534d1eafad122fe4a2e74ad311f3b038541fbd079ec8786d5e13b74883ceaed38f36030e9534b7e9f907f334b85b66f6ae9e48d30c756cea940d5edf2f7d759d78e0a7ecb2a750fceae03f1a573cbd27a03378ef54527b29431337722a40475ad578d258e658b440f5ea61c96ca414123abafa8fe71ecee9bf1d3db4802d95e7e1b5a6267bf4c49babc86777ace40f31daa01068a30d34b4f3a770de310ec9f8134400310fe0ac332af6fb17d9ffb9e0a0ad223594de1a5a3a8e39bfaa25de021d2ec7d8d4084005bb0c31664a3536ed7c0f788b689da039606ade8b166630e65bd28adac5486fc3120a67fcb7d COUNT = 41 -K = 699c0afc3af7679f1bb5b8c115b6ca1865d1a47115e5bb15 -C = 97eb175906d117c1d97bedbe1ec211301b44921d227604b6b5640a2818bb95764ce956612f7ffc6cc5bf2a2eda75a1f66631fd32ac74b329f92998040ae1f90b5551f96d688550529190805bf402b70a3f53a59f8b731e8218d5078716717fb61ec69d0cc7d56e72f753595278a345a6 -P = fb01b314c650d066b6c4d1b83dd49cfea679da83b270d01a4045bc0b412ca4a0736efc3cc0cfd8a860b0fd26906cf4a34ffeb637683145fcf69d8fbbfeb3acf5837e04965c8d35fa771ecdd831d2c7a27d793fa7905ab6afa224a11a63d4aa0db441d72a99 +K = 4c749a0ccfc2b6fe9109566b1822799aa149f3fac4117053 +C = fd51bbc193ef2ff5ecdca3ff6f4969afff92b509b6d405c00c6d32e37af65a0ff169dc2de9665d8159467c87e4787b68bbf1e4de33e2898c88e3ea2c762ac26b09ed6c77ad83b9d95b43e5ad62d1c50c2bf7781a0a6dd3f65fe17fda3db15c26c8902ebac27fc45f562dd67221994a8b5abe3982cf0d92ecdc1a82303c4139ed1f39fb3de9e363aca3d57175bb80a8d6bcf6839c13262cdfa7f8736cf45f374435b84b132657d8ea455d94ea2887762c6c88b719d179888bcb81d5a8d02966b457a12362e3bc74259a11c179a192469c158e4bf0fd49f9557e1eca9143366254daf5d290376f0abec63d9769f23e98e7ea565c50262bd189de199359f7938659f3947472f545273ca4a5dfe294513607b329fd268978cea4d948fa29cbc8cb699fcb2f52b4c7a13f83563b2d3bf56a0bebb027c3a393b26af893def94ae23cc74cd4eb39505294aa0964eddc149e4f194413490e9516d105c67aa93982c284bebc694c38c3779c856241a03374a401eae2a385cf99a2b7650fcadd6add58d4ae3ccfa597e891235f85077fa9edc32982a428882767f93030f99f85801c26609a4960a7e85b542f5a31a54dc988ed2a68f37fb8c07e57e943b467ee3b687aebb2b1da7dbe36ebcbef54665cb8399b06674605a5d4417c1fccf2f9b5d362400523190fd8935cbd4aebfcb53c73ec65822dd0960aa317de43fa5f71b85a11bc4bbe7ad305f00b598192 +FAIL COUNT = 42 -K = 263d78893fe853287fe28e8f39cfbbb9bbfe443c0cda7fcb -C = 1218ff7db1c0f9e104ee88e1d13ef229bf725d22beca0f4988247398249a4cdd589025b31a474d8c06531bed1ef3ce3e4980f6c9acb7d55dde40b3635b370ed66b02797d445c4ea39331b56da64aa04b86225a1352f5da85e312ad3201e601be44c2b4b97722df902a7f53ea04c104d7 -P = a67beb4166c25fd41b9661483b79991df22e1155cace579edf871fc03c24026a547156c109ecd6b087b3cb48a557233b62de2031ed3eb8bbb23edfacb86504d5668e91bc7bae4a7ce842e3d8c5eb650662d089287f382ae481726faba78446508c9944d24b +K = 81cd5ed85f1b7eeeee99dd9188f7ecc5c9aac96b0633385f +C = c37ea1653b924c236abbf284fbb5278ae955bcf184338a3004220da3548dbd83e1c9cd15cff40427ce205d62294b78880873f686f46d6a586827c6ed3dcbb5d9cee48fe667e164924bef2244fd2bcae0d3f28c31c86170133173a67980f55f0b0e61c573d1d3f3a507660a78fa50dd17ccf13920f6e0d56ed3c942477d69ab90314bf18e94831b89b994709435bc45fb0ec70be691919653ae92eb87878216dee756c821b2bcba05373482b78fe45cfa733842544f0379c58bda7e607f6fed6504ad2fb3d8153926c4f865e60fc9031c89b15b4f7e1bfecec3120199a0884044c52799d04fd375c37818dba10077950e9ece2fb34cbc755da5d7317cc56991f119c1b98a051e5f8acd42f07f52b5f370792d362107bfaff840ef4d1fc29acbba541f403cb73390a100c832b94f36c73ecb1b34e73bc90f0d2aa757846e848fe96d9b1d6c48a83080739d4f0e8bd082c0255a301ea91e2c339211ef7f1d48115fd8594b49f85bb0f85bde3140bf45ef7853bae5b5f5a6f0daadebf06809131724a0f4829b5e5f15d24ba79904b2721ed53d19fdee3e001d3d3dacc5d05875bc72fda11cec20cfe2ad7e2ee73e2fa4ed7921fa81713a8856f85e88e5fdc98a8b83ddf96eb29bf4113c47eb142ae89448aabc98117fc3472e319ad07c2f89a3eaef935c496a305ea9a6abae0bc53250af166e839e938a2bd59aa746866d3673b27a89eab52f21a5d817 +P = 6ab8bf54b8034fe015a8282fadf96ee61d6c2acb453b8934f9ad6ae56c96f0da15010c906ae8c7d49398209f54e04e72f37a374c42e9465c03e5498d76e1203c33e54c3b9695b8c81f7d504e8c8d2960a0aecb6ae9ff944afc31972f57a22a72c2d12d3be50b19e5e7edbb2a619b3677f3ddfbc75517b106ab0cc1421de44e67af95a7607963900f084e2831428ca3d753b72a20c8c773e6efd7ceb1c6f0b2983f514e71e4c14a7e1748b2cd1ea60a9abde0cf84039475ed4e5cc678c015822076da2ba4d16a44518b65ab1036a7d4c190972632878feb08949b2f9f7570c05ea1ad7ee003afd5c4a6fb1af297cacf76d8bdaeccc0c2387620c835667fc231a6d91ec6517d2610084c0f78145a18dbf8ac83235cff9573aa89be13aff131d880939e214bb2d8fe00da455beb1a41f6ba50ae28ef512418e96487c6f2c1f419d1ad1aafa3147f91ec737af8c12ab6d5f21ecb954a482e91f373b249c148bd20f616610237abb9d5f057a8ef89becf630877bc29db2d3a368ee0b7eae35e7d8638fdf1235070de6efd5f3d8f786569c447f7f60e0739d97c406efc7fe24d3f2f7c0dc4e16e57a172c4d5c663820eaa4887927718b92246cd6d07015f676700a4a3cf1413ddea44a7349f405570a9a09d902b902f8c250ed33a9f273c86baf6f65cd98596ba0fc14f2e6cc1b33ceb829f7b3d2126deee56bf29aa40e2d67fb82228 COUNT = 43 -K = 2b8cef77adb2bbb7ea286be812f4b47dca3202add0fe74c4 -C = 0ea3f56dca3e8345a50ca9c555f6d3850e7e14533e2d4cf8bcddb33a0c467b99e356d3c0ecd9ab980bc5a04af4863f99974bc6a8ffc9971e44fbb781f08373c60046e298a47f2773da015b79d6dd1104b80206e8d887ff5b5c36cdd91aa521c7ad56e98a66be68cf8093f42b729e8e4c -FAIL +K = 0a356fa8ae7b6cd9a833e101eb4005353849c1cc0718e30a +C = 38dd5b157cabca59065f4061836864e3c661e72a94cfaede3d27077ea04bba863551e7ba24a4b866f12a2b9d5956e2b01844e1ac88d80af100e475c425995914b50eb545c32dcf9583dec95d77352f633afa665f7ff295417f88f46e3d6ebe8cae01d148aca13aafe3a701882ef7fe93772cc357f4a3a1f4b3a684c5ae74c54fa18d437b3ac8abb35aba2afb06b15aea83cbd5edaf954200d789162d1ef3d5aa6075c39450a4eaf2ef8eb42379313ec5b22fc8efd3eabca5cd4315251a9b3a2758b326539fbac62826ec51b379a1028c2faa52efae9fcc53162ff6dcba3b08308d9e05b04c737ac6bb7e61e9927998ee00ca58293543e767b3970deb797bf3b2f3d837f702dea1c0b7de57428e9fa1e57817381c0199080cb6cec720a2229edbb1e5218a64fb624367434ee14aa24255caa67302abec048cae0857ba9d3610e90f0fd3b0263374dc4f1875a3e730b8b61ee3fbd850723b3f5de7dc95a30e494c55702087fcc5a14cb6809b9c556a49df41e65fb29eab72131bc020cc5a2a8a9ccd92e7584ed17b57be9996179c0d81506423c7e690d7faa48eefb521cbaea8a5e870b138eec48c929402c2bed3682f8e85c1cf83a7d1f98cd43562248291163f3110888eb4f78dfd552b9d5d32ffaf616816142c0ad23bb2870663ad5979b306b3244dd9b418335e2b0755534b13f30de99ebed60f1c94027264bf2addcd3acc3d619bcd8f62af97 +P = 126c1c7e37a25918217f4fa5238d8204bdfd92cd3f2d74301e1258a8cb85f9a945e1b19d9f84dc6d3c9933d339619772340c07e1f48eb1028c1f5186f09b3f5287fdb90ea76ad1b2052e37b3f74759403e88790615247312642945b598471e8abca2e87a84dbb546411b45119c3e1ea2007af1fa18c3c85edffdb6d8ba446bed83ff96ff5a0eaea429e11053cd71817fbbb8d8be35738d6e197f9bfa01d545a1623a22d2bd3805b19eddef6fdfaa8f6adababff417fc209620d446e91cbba68c02281c6f3cf6afd94b6168cf269e5673e00359604a2a1d5138a54e572bbaed79b08e8b1d3b7bd5f04b66c2a0549e0c8f6bd04b028c7d41f9b84012da23c9ba1e126b0275e84c7a4efb1ee5bccee2573d4dcbd8a1bddc656869a7544fae35b2f5ce268b5b4aca6dd028e4a397eca4dd760c278a22cf6bf646e8637c823c6e96e3f58f6ba97992c6cc17bb2afb905a8f4a232a5096cdc6be149d7a25c2bb488df473842e21a5449add20654fcc3cae5414717b388478da7990287bc3112292244c135fefa3cae958a80064a5615236798bf3ee9997ffd56fa9ebf9908a3ecb175d5df5600e64344cbeae79d6ebca6a4a85f47dc7c973f56737ad24344e8917a628aeab1f88045c49b8ec0b5ed5b429b1ed078254e02b8a689a75e7ca2cb983db27eb7c9adfdf1c024156c86ed7ccae5a2fda2f676391fd339ef1983d59dccc7344 COUNT = 44 -K = 54f2835130e74b6b3363cb30833c342cb2cbb14816819d70 -C = 34b07f6596c7b698c258777901645b516b9cce3a9b130596f6c5b596af7bf30f488c38f60cdf9559989c66bccf500488efde22509f8d23fa41a3d017f71146f8ecb93e27b7ce382441e2e1e65bfc77d21893da56964e379e9571c0ec8f63ac6738d21d33f8943399836f0b0babe5317e -P = 9a975b243410f2db7d34ca6cba15f7b11730dc00b1b221eee70819f0d4136610692db92727d6b4d0169cc7950e53d24e08a3c5c372fc22c37c39b12088c871e7d7744a4c17474c64b19e18e179e1dd118d206b6ad8d74c9aea842de59ee678f912c57ad990 +K = d5c072ca25e5b3c9682ed7fe6a20079f72c44c8c9506c45e +C = f7d09fa7ba68a85fe3424df449928e64dae030a7ac92b678d77ad9d0b54b3fe82e9f229bfa31feaa1cc033b62bb2f6ddbc65dddae2a52d2d50fbc89d6a7bf8caa432e81bca917be19536d2a23ae7c32d1deddea09557d307ab176fedf26fd496f9709f58d318f44d788af790819c3fec148e9bed70cbc331e83b3a304a4384711d81abd367a34a177da23bb86b50ca64e99599a8ff4fbb81169d6bd5dfaf7ba3fd868df87622c113648f924c028a1ca08e4d4f2e65648732afb4598f2af011a16b145302155beb9bcaea801b924faee989134e59d8fa21083628e25b0533c510c876554f664fdb7711b028aee66e4787e9c116e8a708b8d6f49c01026d12c5c044a7fcdc0effab8782ffd76316aea9204de50958b7fcabaefcddd94e87953c59e1ebbce75e8667fb9849eac0c8548c84a340337a00af9da0c7acd90fd73bd56bedff408132cec4663c2f20a9882cd8051518b8f7f4181c3b490e0f9e61cf5f2738eadd5c1ce53bb66c169a95a1691ea7a79629662a9d86e8bee998418e1553138dc8623bcda4649487562a49f12dce79abc41924e834975901ff96af0c1e7fd144e0fd4a5d29f956621c82c70b22a83ff7f8a17f3898ea9f06ab503d18664d46c9af515a8f7b7cfac043695c3fcae583157940e094dda16553b9337b135cd80414a5ed635ad261f62d6f2d5e0ac51fe03f4b95e4ff41745a9fab2c4f5531a03f645f1454794833dd +P = 764f6d4f33ae13f145729ac045d38e08550f55c3450e3f0d4d1192a793f4bf94fdfa91e062968518b200ed0f8d9906d03ba47b7331ed3187f9e3c85a75bc3396218ed5fc708b1b026164c271b506c7bcbd7b14cd37469249c98b0e6f7af7950e79838f1f3907da99af488e6c53b664528c566aee5738a877d1b5e8cacc707155e361c4fb6eb338aea9f5ec02a281ceda2ac84a88438952654f92323db02ccca4efc1d03bcb98465d7f6f7116b361a3058d5fc734aab8683d6459066d6c4e192565f3ca53e3a830dcd84e2967c770340ed835b816b18a3763ced7c738575e7233ca05e2d295eb39ddc6e2bc46437f21f0ad59ca1c58dedae4dca6e93ed094eb655161dcca886353fb8d80f9226592cb8ace4f1b11897a20e80441a54eaf2e1ec075d59b9d188524fe5136c7178e0d9d7ea0855ff297958510cfa52a36a712b0b620063a9c3b2ae3c168ea2c138bb3472a3a7261008167e3fe0c35af3b0d1e75036edf26cb1e672a499e67d5b36560750d554de5ee8efc553b07be7ae566e264dc8bc6a323d568b6b82597a12a7260391486a19918f19c391f413fe0ffcc84133aa6828abe614c4400e548eced4194d3699e6bd4a6aa4b3213b5539ac39c9663e7ccd8497fb072a7a85e0951c98558f329bead478512c1940052178f514b85646db005797af768dc256862e9b1bfbe81a3921c1c0421e3f4b0315de90ef439bd61 COUNT = 45 -K = d1cc2c59ab7f41b27284d6012eeadc93a5ddde3bd5d71011 -C = 78576f02efb1cb830c678c05ae1201792520d90f01373a1b0016c47921854555ee0fc5c83178168d0bb5060813e27065c0459364d59321ad7d952c5fe46dee1d11c1db1a74f16810bd7ec9e887a63e552a343acf1fb290484157c1973bdef4ccce5522e8bc401627b975b913c6857bb8 -P = 7d7ec0a57e78d61fcd2e1ab207df3fd60038188f615d6afb695e80f9a9587127e87fa138e07fccc3c7f23d67c79639ab6f098cb3aeea5da40fb839fde80eecbaed7a5953dac49cfc05bcd40b66a851e0ddbf5a63d4fe1dd03ef752dc55ca76b77ab269c7bf +K = 3f64c222bec6001962349062e399ee0566800afea335bfb6 +C = e0d7e0c3577ca02d7aca7d657fd00b4011ee667111a7217a0f2db1140390da7ac812903e2438353f6d5ed6346407a2e3bf8295321e8780c26b635eea88089016cc1b0176814c360d3e0fedd4aa6f2b649966026b7adcf7fd394bfe286d9c8f1b6b27565e44f6b7c39a0d4ad0d0900edd40d87ee9d80c412305a960fa64e2127920b4f44bcb29ae800dbbf92ef56d39b4e943b63da8f14a6d2541a4d6f274fc9101555f3a33f785b20722e463832aad765151f53abdcb72b51da857ca892c711d54a7aa210cdc138da1c8e09a96c26e14327d2a8e043f82263bee35c0f2388bde1b3f8692628187cf1cfea5ac5f788f8d8afdbb89101952f3c8faaf5a6302fcc01a804438d8ebf97b331635d05b9bb0a84ec946f9939e6c55f78f0bbdad73bd35c4569fb9bcdb111283793285290e4bef902f7c18a6a4dc039a2bd05df8b633007cf678d9f6ad2a6345d78b7f7deb3b46cdd4a090f475df848505f95d9b7766cacfed98f04f17d735c0bc1c932ca5ae36a7bde60cbcb903046171351ef15e44f2acbb9a7aea2b1dc3fe1f365df92b1fe26b9f2bd82ac07a09a2060b14f3fe78d25acd48514f61eb20c5f0bfef1adacdb1a520995568a41e0fe8cca906500784e244888cbb78174b61f62540be2139294775b87dd467fba51adbd5fe7b66891bc13bb4aec9149ff135718a7995f4375675715ce4227719b35772acc8210c0763b4aa642de101a3b9da +P = 35d2f287936fe8d8f30421c991738577644ddcd27f05c969d1b28c3a371932de9b31904287f459bb703c67baa31ef9f698bfbb30ef07755bf320dbf75a0d225dd9dfb965b8e4783fb61309d3bd3bca81a3dd0d6e8dc1e0341ade0c3118bd7e0d0a7ef21b0cf6aa416edac21a3c8653eec60794e1b4e1ce27347bfedd468abfe207ea3967c62d4869b466c9bd9c50b883531e4521dedc69fc708641f0403a53a550aba65e653bfe93430b8639c1f19726f997797ef363dcacc97b63cb1ee2ffa26ae0c8c58b543419c1fdc08b0b6b53e980bef763ae24282e78f805265d35300b1f704439b9f3ec52c6d579e7097f3346b4d966c39de61ce8489d39d5617564cd8ac9c0f0ac23af182f3288611fb226a5ce4914eeb8876f12a88d8155f00a8719061f6548099073a5370a867137fecc8946be545a5bbbe1c7c785c395b56dbcbab4d7dd70855dd5c6eeca2df15a457c7764fdc954afd75480af5c2d011d8f8b073df105ce96e763e32b24d4224ad7a04df14c3c43dd0cd549d542caafa2653ffc690655a696155adc79a92a793c29a5e5ce03410aa0b0bb849be3b782a7846a0e7817c13b3ff5674fda13e71e55eaeb3486417bac79c8aca11d24e729e771e1964149ded3e505541ed4c99b71bffe041c1b19809290f73c3c4c982bc5a6f18be252ef7f1968fc46d10b266f0344df9241d7199cac1f2fef985fe7d2682f736f68 COUNT = 46 -K = 5f11666e13fad3c5a4e1dae20658073a68ed070bc24da0fa -C = b8235a804165795c33d0ec20d8c8dd56bb42421a1ec4269c898529338a41d381b863ab2007c7badd380e38f160fbf93667e1747ecc7b3d9107b75ecb7dd22406db7bd386a9c70f7fd0883a49b8e6cc4a05a48eb27bb9eb3c928c407e6499feda18f437ee794b48f86af226c0d959eb1a -P = 2069d511b5e46cb40e28e1cc15609268fc093949ef203f66222afa13b2d41b1e2f545ee7d9c67a63b7efaedd9f10404a5acc89f91da0e1b5159f9a814a38951ff90adb08ba66c247b9add06154ff7d7b011e2ac34fffe2187cdbbc7cc66c187509f805330c +K = 8afed1f8ee30c042cdbdb607f91ee7667064ebce5726fd17 +C = 7d13d8f90113a72d84e56438f11b59c98b5312a8e27ed659695c9eeaadb4ddd1688c43cd7fb579d12f1ed1c506e50331ed7097ffcd088f6ba76078946a73dc943c8a2655ca126d105c3a9cf4a7283bd0a26212a5fdf9a455b58654bbbb6c0e806848de18beed778b7ad08d2885b8fdc0f69812cc96bd77cb9e755362dfe6e490546a1b721eb26a0726952bf761cbdb0e99f84bfe7093596a44525024f6f471aa452c16829dae96bcbccdd355a715b30fe956b1b3f4d4529b49e4ba42a1dfb61da0bd6c68055077be5a261e691df87beb6d87ce92dc2e02d976d74b54bdf60e5c00c5dabf965771ff27984618101325cab5ce924d72489255278900eb7c12335775c3fae610d1bacfee61d4d386b94f3741eac81e00a35bbd39bfa45619edfe182f4d89ef89efcbf294b73203d0cc7a0e66019bc98e78d6abb3ec3fab95f0ba2bc725de0bc4f8822fc69d96041c7604c36238941da2bd7fa0399a546678fc4eb76d9b7a2c632ce3eb20fe338ea8bfc7985c0e821f1cca508852a41be8e9b6f7dc6abd96846ce9e62fd0e5c4250f3d954fec42b5bf99024176c4c81deedcdff7ba95f353f40b7f58c0aaf8e3bce8b9e8845d24c7d73d4fd0c8b772f48646bb452d42d2c59d539fafd597c3cd81b1a5101ec88af8606d8227d5078057ae6eba31f31bc20e40ee2db081c178488c20ab143029406d2763ed48c827f3bb4a023e253d7e7e2eeed4287f8e +P = d9c24031ae565646d0c763fe7114081141a7c83c66cbe080404692b43cfc8afa21655dbd1038241d1449f686d641c501f02da5c2756509614ad62f1e7c151468dca370611d43f36701e5c7d4c65021a57f65eabb90d8dd7b416001cb2dc8cf9d13f8b95c190cb3ef2a9f295cd573d0fcb4fdc37e9fe11c9075ada2f445c15c732d0268acede80a1985cf0fc23317cf53a6c0d1a999682d09843c1c9ede7c8a22f727d088cbeb870be4cfa83aae424421936e7f0fad831b4110e290cc93ca0416ab60b16dcafc97a5937499dba18ec7fcd0985b3cb69cd0f6669fd802a3ef5fd616630441decdd4855fa670d42be9a30b641128a4315fa9aef901f2ba691364430a76fbb50a4321a2efdfac1d20e661facddd24ae0020c6ceedba6006d38ac1d8c3a1dd720d339c22b74451598b8c6a24ff9c427519a6aaab8927cda4c13058e74001799e02f71b23486395c9f79a8d3a0860ad0379ac1afb72954ca855cd2e5416ddbca7114ac5ef6c093929f1d76f28f6bfdb3480987832d349cc3a5628214db38d52ec5748808dcd86274f2d2d67a73a8227c1bb2f0d465abbec2bda0f7c76a278140b8497963ce0fe3e9d36df36d985ec906b436a177c70c7e59efa6158c74de9834899f60d99d16a3fa94a20f1b154f6fea3268bb674827ca6342d47d08e5d36b707b82107e80c8c46caa9eeb62b31df5f0a028e1c2f518dcced7a863a5e COUNT = 47 -K = 99ca16f65331a7e55bc1debe1c400c80b5584d01d8ad48b3 -C = c1f10fdf15162fcfa0dcf2ab1d85cfc7a58cb21271571ee62ee96340ed739fac44132b1ad17d79a15616720366b31e698f8cdd42c7498e39c596053ce80dc05a78cbb4ca659c82344c7c6c5cb8eaf13b36d8f2365b0bef3a185dcb086cc72de47a8cd9f0f3ff441216d86235316fb268 -P = 373ffcf1c70f870d77ae5e2c627f9df37c4fd3432bba7686acc9d4d207ca2729a27384c9872bedf07c1a885eac0e9d0207a223d151623399abb7d5f150125c93a86106bdc36f51c7f329f4d2e3e2627efab56f48bbe3135a02d9294c40bfc2ca2e7b789474 +K = 02218a3de0ef7b9ba94aecb77a0275957e673d73db1f99f9 +C = 405cd61d63a9ce6536fb0ddb4abb305ac37c6a2e966c8251fe3888432fadc5919ac82a66507c73a6bfbfc2884a7a9ed1f7674011db547184de36086354f4f5177351ac1fd3039ab03174f5444c491bddbd255b96aaf5661f175481b77e3fefe0db5861a9fd3db8f498531a793875efa18a1d29b609834e3aa00872ae31d72e044426caff13daeeb5ae4d8352a5e81717a7075bde8916a0ea369cffd08487c1fc939613a01df2f3dbd776bea19f899113bd7ad48399c7268cf7154ef9cf2916eabe21ffc4a357436d3aeb9be5a1792430ddbd8c84c9ef05b34ec093c6256f9917dda90e8e55a64fac4a1e3e7651d5212e46dbc0e8bd62b14df13d77b9baece4cb699cd07827272e8b2085aec3c6376c7ffa3526838f6b8cb613225a74f68587b020c313789864050fa6a42f7e5a321ee3c4849da2efb29f990479a617675df8f39474c6dff158e8f5f1a57c7982437049df7e97e55d531e946fcf4cdec21c52928be9241208497f35bac27530ead231315c655b9c109acbc4ab38a66ffe3270c77d4cfaf9241c2ff5fee5f524c0f5f03b02c6c742fa7e0aa795aaa8027cfba03758fe562332b267d8c395b305017cbfaf600bafb7aec4007714e582f471ae5cde3b721442a0c2f3f2d63b79f883cfcc389ce37498200c4b9ba2ddb9c6560474e978e9d0cc60965d0d650b6b1e9e21f58dddcfa7cf1c957eca42273765db354344175dc59a2dd0b2d3 +P = 92c98173429c60c0e4baee5c16a554cb7d45d06044af9def22a908e9b2d84bf05b5d781b27131926b071487c8f26e029d14a1ffd3f2104297f706320f0568387429afde11e320950d356bf11a362efcc6e1a59dbd8376483b5e2f102512383983fa1d5090899afe1a9ebe650c4c21f8052639b02f16ab9760981e97f235a0510bae2cf01e8a6fed15e57895df599c4553064db3a8bfac302684a08383416d237a3f1c38e8f168ed9c0bb9476b2dcd4982f088f6401dbaa9639529da8d1d776aa8454479318985c6742cc5effb38bed48863749054d67fd66738031b6f3fd2a50055a7b36df98355e3052a4816c4bc980395b0947074977ad3684d4e8d1e4be499dc3dc99d3d2edda2f1e533a20984099d97720eb14a2509775478022871a0de6d8db8e602da777f72e26b2a6e543e4bc7a31f4480733fd52be00273bd52f078ef8fb22cf63ebd81a36b01a2ff1c7357f401eeb4d7cc5be59c19aa9d35a935980d1e854153223a3fff9b824f0c7f8b54165561a11652457d46eac23b28828943f3e4b1063f07d597ac1cae082c1f1edda406a7300b21eca30a8cf4d75fa30450ddb3993c9b1bb5607f2ce7bdbcbb8703a99fc2bb2eaa008034a4b4a95a0e98805258d943e5490332edf9fcedd37775013512bca89b146128f8dc9d006ea6ad2c998bd841e7dc249fbbb8430d7a57c4757b5dfedf69c68822957a0d64c47561fed COUNT = 48 -K = cf310bbef78ae454ab89a9977c7d74158d5e7edde3652cd5 -C = 4ea9a5f25dc7935346d85d2edf168bbe453d8a0b76584964df059aa9917a98e0c821b9fc40e948dbbfa5c607a390c10c2e0ed9a92d064c69e7d2133e40010fb6cf1b4aa87bfd6fdd1a922b19d1ddbd23230fe5c0a6a11ae8e0390d8291b6a5465dd0c7798fb5cffe3a79c829a5c1e8dc -P = 1284b9a846bee869374f7af05c756bcee7bcc05505e2b333fd81a63c6c4e4b175987ecebecf2aca7d161c8d50e8e6504961521ba9673b51cab507049883de75b64ea364eadb856533b0247b44fb2a54fffb51ca49ded0a6efb96a88d2cfa0c5a3a617964b4 +K = 455ea46e5a69a42c85d23816c6f0b25b82b8793718d6cf3d +C = 9b2af36053abc6532c3ec8d5c1b386e72b2799419021c7860533456cda5334e8fde33ffc13998e08297aaa77dc0a0fba62cf74a35e9410b110bf2a0c947149249ebd4d82fc127980853e64e1ede13d6eb9a579cc743d0ace6b7d4624a0c3febb9f757d882aed17f9a8795ec23ea4b174b854a4cce404a30ad272cba42fceffbf51275fa821587c642caa853392af55ad6bb6edd3147f73fedb0c38fcc43370eaa6ce95e2ffa8bb052438da007fce7e1fad80b2d2596db33c473c9f47d4c3397b48a4550eb3e3a2736e5e5f5e11ada27840d457982c2e8ef58ebc2d04e9629a9a97967c79819c9b70eb74ecffc5a49d41f1c449711f58e7981aa1110624970c3d57e70eb4a8cb91e9c390e425481e301ba3b16a230d98894062d6969c350686db99c8dfe4547398e432c9634f70344bdd67ec8f7d9e1bbf22e1a521a07f3f6d72d8896161aa516566d5af5ac187f853a0c7ef5eb833db6de7c1e6e57e401bdda69d71f334126408445c6aec493266192a4000d67a3de7624ab5d85defe707dbacd0ce19473fa860824b83a84973f8b9a0557cbfd3bf91b8bb0856998fb88d3863904204a64bb0c11976d6bbd6e22bab19b6639361604de414c134751ca3c6c5bf1e8c3a249ae265a2e9639b95662aa265db72f62a6cfe6abc88ab42ef88a15361e3ff1fdacaee0c368ac5992d176672d91cdf0fc46fbab1a9996be1bc8c3ca311a0a9c48f9ac29f5b +FAIL COUNT = 49 -K = bf18e5b7a061fdf641eff713b6e62b79d8e3d7f84094ca87 -C = d77bd3896cae65a97ba337538063c87834677ec157b82b364774168adde6df7cce3c6ddf366ae193b758515210f25393c18ddcd4bc94ec089de86d05b7da61875ae78f31ecb11c568358d0b26e1d4db891cfc72f51487e2d09326563966ba3c5c4de8ab1cb8469d84fadff64d92a84e5 -FAIL +K = 144cc3594827843905b2385cd83fed95f0af7d36fde44613 +C = 517b24c153896a87826f4dab366720d88247f6ccfc463413549324df45ee97b1bd7591987e64b6f328e60dded45685bb9393927c637c7012509cd6cea0fab4499264d204ad876a6b5d8b4a75b7f7b100704412bdb3097aae6f8625431a95ce7ed701ec36a4d7396ed9578956678f675c45925fd4929db74c49e451fbf15e5618549d3c9894424236f759c8387bcd5d17b010ba41ca2c5e8ea6d30de04520e645ef51eb75f993224314c74b3579811d7c27823fc52148b39c8b98651f33ecb3f30bff13cf4fa63d421798f48694267948b9202a9b72e53defa95c1d53bdff0ed1d375dee3eed316d72316526994254a6cf631dcc4f69d398ac7ee0bda4887c5b691bd1b81d8caa11a50044bda6451a9de7cb8292c12f618bf37850af3042d8089984447cf1697ab32a1e383f059153fe0f473a093435975d37dfacc843a5be50bba2d81a31085cb7f485f113bef2da084a488d87a158302a57e3cf70b3b048d0cf14a9f5154692e4e585d77a5ee57d7ba830964692825936639473d96edd877538aad9ff89d6e5303cc245282b8e3d1dbd254ecdaf881bf2f6f4dbf3db4901d49e4ffc88348e169a3ea88bc6c65b594818f74438b12b1646aa4d06e53e2ffac082bba03d2fc502a4ad8dc53d2fd4e34ec971e32b19372fdff24fff0f757c01d80a2c6dafd4028b248be8bbe86e9c75e899b0172d6656cccb3bb3193dc59b2b03f8e6dafbf8c86a409 +P = 5f0a39705be4b2673cc8a9bb54b2b1a5c607a59bcef6f2fdb79d5396f9276d8871cd1f391d24ede0fc8690688a49471b5b9fc163604955761a66bf432bb7ca8acb34608fdea873fc54feade6b9fa77dfe266d6f31817d116986d896931fd62b4c6967ae65b5c8cf955b61ca91223b5fbb88a3c6b96cf933ceb9d3dfd47178e557b0359cc3d0c61700f0b6ba58537532151429995bc36f543516b12b0458bb9c6df1eaf1a9911c001f2d9c76e685eb71493feb981f5b00d10d194de87a922cb32ae2dcd78bdc54311194d49bb3527be4ff9f0db15c1302906a219aef23ce6f4ccdd423848896b84083410641e1cb0826b5dab336d80dd5775e38479d7f061ab0811dedb855ec785b724fc9298a7f7fe75e30d3ac12ab33ef5a6829f243a8473146370a1e275292bf54e576cb0220f284bbb36f25519fc0a48b147e77c7488965696b65ed337e95f9ab9135a0412b6dfc63b91a9f9f852721de00442bab31cd75eae132f93f2e31d4c2ac5bfff8690020b59f5e2109640ef267d72e5e929f993ea54212e5fa21223bfb6373833cdca86dd0a248df51b482c542d56862f6464c10afe58406d447cddd53cc25c9fb6fb4d1f56dd3aa50f7d080cc788c639bc97027d78fd1ee4e32704dcfddac738226f23f680a6496544dea309d70d6977d9faaea0f2b9eba2cbf615f714616434bd72cbd44281476a3983d08f4b39a4a19debb678 COUNT = 50 -K = 234a45e47e43396ba71af00c8ad6e7c6374aea1e45379805 -C = 5fed3e0cf1065f7d3eda107bf1be6ffc5a803bb1b941d09d67384972c4e5455c4cd1ca5f44e66409a3cbd4b68f5a7e6d09e472250e01ed1180d78bcbfb01fd777c7a94429e1b8938f47e9d192040d8592e7c4d381c7f717104ccb1b6b9c2ef52645d784f0ecc8285b83eab2a68b0e1bb -P = 5aef7b3564cc906d52da5ed1f18c8c4a870313d7a060aeadce464a760a2f800f94685551f68829bb2e6a1e4366849981ea34a31bb7114ad651932e5f39a8cd0d5c4ef72ee17a4e47afd59d62fc8a0b477d318d3c01af12806d14e7feef728b2253146cf306 +K = ec8540f7ed2f16f0c1d6426a62469b4ff058a38bbe4827cd +C = 32b0a1e55e1067dccc67d18805bad33abf8ca8ade3a5b20a0e00f400856ef0be9e1c0dd059ece118515d691887b1e9ce9960e2ca120576d0c108d6e2eec9d9602a9c570f6c644eaecb0ed31f06a2d75035e97fc94d9777c7baf6826c07162d8ba6bf784bf7acb87f57fab519f45f96611becc90cc2af55bd85826389e196c01e3ab83ab4c42e56b1ff1e96c5d42708b64ceb5460e9fea20b11789a7c87135528ed038c467d3274001708f10b31f78788a10944d53e83c59289b5292011b942f2f8cf92160ddc5b1985c95912cc329fe2f7b90cbafde6c3b386e70857163349dfe4d2b2d221ff36d054ad722e151c12f7b9d16001f2a3591e910224e6378ae40e38637938a1a68c36bc2b849190338b33600d136b253c9c194df1646292f6a31ca2eb99f6a05cc3afe8b317c8bc53b5ff03a5cb61efcfcc021ca05b2f4d6494f23424197f1e57d2e86be219ba3d986705093640bc7c14d5dbeb980059f940a9d103a131b2cf7fd2b138a56c987016dd15dd23c39bf4ababab94da0950960300de359c499fac31cfd57ee4cab2379e040e153fce1b5084785d56ff43c660d32fed788674d295333ff26fd85e308f430a1fc428c7f32d5be68c3798fc498321f1d78b9d1222bf8eb37508ab27b3bfd917ed047d96c2b2c80ad93d865d4522d2eb40bd55e77b95c9364e69fbba39f6183d72c0bfd2741ec201db9ba978b3f852e16bf9825c4dfd67d1de +P = 1004dbaffadd59f36b200e58b38d1b529b3f22735f38e2efb3c90e68ff307ce30b17224471b748a43127f58da3791da751c41e9f3a0dd0b2fb00c46ebaae87c39bea4297d3113d3120a1f92431301d1dbf8d4e8c75a4d6570b7fca19223057ecfba62c7fc11f5a0642c0ee2b6f75d13a7ac4e3764bc0585d46136d849d51fd06b659d012193b679881461b7354dc366563881ce5306ac01504ee7623b82e9ea6543609b5bc09faba916b65b8a82bf400b4bcd010e366f906d7b87b1852ce7b3934d75b3f9ebf00c5eb00b01dd2e82e5b5e05053f8c83292fac5d23bd3d644e45558303f670de507b7a912e5a1f1ff09c7b9c1f8ed0118f3c0a5eefe629a64742437240f39ece9ccd9b555ab7a52af80df025ed759daf0b91ac1b6daee4f90052175685c575f075ec1b976cde922d91c62b1ab607a2db26df4516534df1c781a449426eaa178afdd8cacc4c7b3eaa5cf0ade57451fd60349334982902db65957ce45b2131dacc42f9e98a2f9c13de1651f51e952c94497e98b4bf710c5e18bb3d902940354b6225c35f5ca5c89fb1fa02fd6c7ce380d005f2202d468d84ab2117a321b81a9d5da07e9b2752f7fe321e9a5deab4c091154bf0eecdb87e6a7d62b3f12947f34320dc0937cce7e30ece577ded46f7b5d054a4d26d02c2fd555cdb448272625425b737655b6c2f3e5db719251bbe7a246c36844a9a8eaeeaf3c3d1c5 COUNT = 51 -K = 48f4161b70c7b307d29547c680b83b1c4dcf31e21edf8338 -C = 8f7f344fcbd5f18e976689086632d87c9fedb678c1eb9eceea9203168201ee17029df81e0883ef16bfbc409dddfcc56e30819e37f74b8bd62c319929da3809a3c98575ce6a20962de7f5bf34e120ef23045e902d1d2626f77cca4231d4d2252aff5e65f5de8238d515a8fd21863b5e20 -P = d0de46a1327b810ca71721fb0ffb6e609e78e64b553d8c6a00cec391f073fad086685b6742fee2a06c77d4f7fdc30d90791a573a76708582c3ad62babccf79cadd508f3eb693df62379249ce40df58544b1a5438bf8ead96885cfa521614afb7a39740282d +K = b490e2bd7f2523c9e796da9b894c77e24ac44b9d364a91e7 +C = 19d5b624c41103299b560e6c246aac820d2d39b659b492b839b4708b280fdcc41509c6dcd05579c7842bf7c516425112da11de4dc57d576540842b4a22787b1c7e97281a4bf12d843ff2f10eb40edb74a756d93a878aa735d63253d3b0d4b89af111328b3b94b25536b51bd7f8b49f333bd3e67548772bc075443bcfb64c1c5baa92c75f4b07030aab3f86efba6f015a5b3ca867aa5bc5302b36a24bcbbcdb015bacdd242f233e7effe2bc04577c25195e216bdd8b1b7e088f7808169b0dd2c8775c4886d10335d1b044c22f89eedb46efa86e16245315491eb34ae3917dd510eb74b47bed7ec5e6e0d219d2c1603089e91fd0309278fe123aca40bf84d46286eea601095bfb93b483bc1efbfd0a96dacf46d241e535e32f152b8543062a6b8a8bfab8d544d1622738c04e286cf969739bce79942a95c15d4ab019565c1dafdce767aaa2cab1c2e3e84d83580ba240ee189bbc800451196247f5ffe87b0166d53dfd9be8016ad58dd2628b63ae527eec87b430e195bafdb6c5d1a3ad6d7a548ccfb2698ca7e01ff791ddc88081b508bf1e5696f2d6b03cc81bef950c7ed8bf4e9330e6440402728b8b045283664cd974ee4aa7924abe45b831819cc61eb405bf0cb84c7aca873d017f2c1404b517e40c7797ff35aef5c9a7edc84ba94ca429fca74315d77e20912dab49f68f3afa8acf3b11f1cc1863d4e63bc56332c260aad46d3fb638a7b52049 +P = 3a00d461e6d29822378dbdf4f692093308304115119cab5cf66518b1cf0f68e2d91330be5ab8365143c2c13d6e64ba2f5e6e1e69a66ff410dbb71f6a71f5fcadc57b0f14df63d4f4a7d18371516a791f4af4fce5ee8e364f2570b0af6c306bf060494412788e580ef63a731fcd849159b41125e146c12a909de196f5bda3e19ae3f501580ae5dc2dbd6a6637d5f3b1cd3ad5c3b4c7cb3d4d83162bf8ce140ca5854f0ae7bc9eb13a5dc0121c17f6cf4d1a9169e00c6aad18d29f053d2b6a297df01de7f8f9af1087620332a9ce10259290c0afaa05a24f59b1dced6e1c517446ad3512665bff65040c20cafd7053b7c68b6719bde2209e98f5611e9c05615d0bb7a967b7ce3b640dd1503e80fca53358fffea96f2cb80b59f50683e7be61e11fe5e691b549afa2627389341853ad935c9bb5c072dc08fe532f4c456bbd5dc25d78a8567ef98c618a15831272d14870f537274a1fe58d9543eeb721c3bd7d776a5f23154e619591a4a3e36a81d74facf9ed5719185197f0df818388a5fcdbff2f1d359d260e24193f2a4d11939c001e9437f8ed272f6b84213f76fbbfe4a5656574b714d951944a3854c5008a1f6ba5ac20135bc5266a752f4d7e3106a13d1ea4425ef9dfb6f70b523d686fc2ab48e73295e74a62c2f87574d0bd7347dd46963ad95fabedcb91b7a6887c0677d952e9abf11b62bc6dc26c8245a7249ad2f29126 COUNT = 52 -K = 38e8ddfc6d49d1123d11ac82d3fa49c4ca778d34aaa598c3 -C = 55abc164a8552e7aa43769e125f3c81d3f018d86a084ac615383ae2c5c90f29f63b76a1744a06ddf072697562d9da6d8c8dad25970a9b5070377234da203284d8241b1223efce89d6c8bef5476dc220b6a09e8958ae918a79879f4b972c9d0d327247179570e9d278558089182d8b4c2 -FAIL +K = 0ad4293289ad0de8ce8199a6d42367e5e2b039c9cdf925a4 +C = e7c85b41f104c8ea79095e8ca5748aad47309a132a073dae110dad85e9140520c30f8870ceac7c45dc221c2263e086e32368966beef1899a70db12725ec02c588d3a08d8f257f3e61747baa915b05a32b1e6beb00ab5b03b4f94246a03c668f271ed43cbea1ec5da26ee63d4bd18bab2f1708fac8776af100a07615251a15ba0f77a0e545ad1f77868bebd682ce1dbed7827a87af3ef2e504893a811a0a12c872d25c6fdc7a612c40dcf08ac0312678eb6360766fa06e1d45efbcaac68ef9cc9f542b18aef281bf14485dea66740dbae5fabf3e537fe2a5fc981664a9c9956789c162adb8cb37b9d4a289fa82395707ff9f64dd4085c0d904c8a21d7d55b34980e6a8096d13675db708595d6fcf0c8006711a1c20e7e5dc711a6bdfd0eb6fef9422c17097b1c6a3fb29d499220d2dc6b8b0327bfa0fea02b5e89b0e27caba01b6baf36cfcbf83ff041cf66fd62c250e7a9951467d0e990250c38914c4ef08d3364cbc1c05cbbbd8bf1a2ecdab95448754d23477dcd0da8b8f8602ba3024462ff1fbc4417116bd03a3f7f93bd7add40906f0e939d75b18cd90e25ac5eecdc3f41bbd6bc65b64901ba5554d14268e79d00a84163de33532c95b3915751ff578b8f8d5b53bcc35a6100b603c24315b83ad581d62a85f52526c2a10cfe21f6147bdeee1012f7f20e57748224570b3f5ae38c9be5a4a0850b70105bed62fd02af01c1ffc68e2ff54adfa0 +P = 5a328c5e25e6168bc4ca9dca01037bd9d791e6aedb6f82d2696bed24e80c424532db6a0506668867bfcc895d4e56277e20e2a7fc8f391545db1702b480d1cc0476d8b59c9114f4b2d02b5e21464fc5cb6c85f9eef7861925e2d4dc4c73308b80f44b888a62ecd43d82d1777d983b653c2e7ffa3c2e97f467d2c01e1ebe6e9c895b2a5c8d54eb137221ec120220c1a26f88332d63b006fe6fbbd8f11f96e37d2931ae705db8079018af5758abe937caf10aa937610b0d0d84a94fbf5b06272f2c0f04ac3a178ef38ac24d4acd8cb313cbe29d765690680cb4e9de5d4dc371703238236f90dceecc4537163fea384ce902eb57ffa464202a0ec18139586c52f1dd3964f60ff5043a2e41965d261cbaac4f8841bb6df04cc4505b870184d672aca66e0dd169f6cdc39cfd671e88d6f3e53972e939020ef3ea1e7615fc82ebbd574d48db84ca8424ac1400c14aa2c12bd1f256260a51b43f27a3626b93310511fbb805c3876bf7cea3a181149291ac46af234d065aeb61b8b90776a70f04e13c3fd0f1389b7a0320c9c4ef18598847ad1b1542a982d196568653f59086f89285da2dd6b787c3dff891562549a20112d42041f0612b5935074d32083788749234c9454a141a5435f84d20a70fb6671cdb1847338d1c291e3784cd4fed7cd7817b5c79c17341043c477faaa1be4197ddeb88aeb762240717604065dfd4cfcf27d73ef0 COUNT = 53 -K = cdd27ad9b913cad6431da380c1ebb8efdc8bfbb1df1e10fd -C = 4835d776804bebce1fa2ed32e83b999d384bc35d27d08ce356a556239cbccd6a70fd1b0ad0d31bae815bd6715045369e368565e0c46e3b8a8e2a5b3f1ddcd49a2afc657cdaacecae72c77b36593e4647c005997c5750c02ca1c4bb8f4d3e03e859bbb3bab41a7d1c027c43444bfe5240 -P = 8e1ae9af39aebcd325656d966827b9c14841147a8b8f664ed11fc32d470474ede7d41fca538dc0fcbf59362df055dc0a120fd7d2f9f9cfd418c768e47bf2680eb9b06aa587534a205b34b9da42e3d57507e2be0abbaf1091b053a914a5da91efa07ec6be56 +K = b022559e14790028515ad1b0f00210251ce48c41008df6ad +C = 8b876030cc0bb7c8da7a051e674d452bf198c1285bbb3e8588c84b8ddab202e868feb4cf1d43dcd9eb5459eb91eb2afa1aa435c3f821bbedc9023ed651bad5a0f47c541dbb3b84449339e0562144522a2c793ea94e3643d66b7307c0ef583256237c32b1c59b8d4a72ddf296d2d5323875e95bc47a07c9fc45f5f563a487e50c31bab954aaacd22f382af9d64355c00bc1214353007c95f3e32c421bb04ca00dc20a98c0ac5ebe9461eb631ca0ee6cc6b6f13829731281f591fea419b1b4971f479cf1845874849f1e6dc98268d3e75c3b2b4209577b204d932a92f81923b91d70b52fc3b6db712bd9e37764c9ad0d8230c158fde5f407a5770370a04f55c4284fe23eea1f05f5b1ddbb875fbd125e934df65f35bcb29ca1afb8dfb77717ef015ab2fd5ef87a56f7bf0b7d639e1de829f8b964933e564d9d514aa8e1e693b3392ce8250982d1c2b4046e48d5dd401aedc48e0c2d28ab794b7c1fff813e2d06b2c8e95ff312a32c97068e77b1f9ca82180547696ef80ce2bdf6d2555241f9c2258dc8588d7d52486a82d6af745b047c4f68054006b1cbf7fc5e67f912e65ee93c88f8c998392c52705460c843b4eac33efe61c1c328eb9cf999029f5ad8589ebac864054ac3d3180fc7a3ffeea8f510c927a7febd6020c8b1b2a5545ed5f82f50b9fd5525e01c0c90f6a8523fcfc5b66740dbf704d21d67011617b0935dd3cae8a6706c7962d5671c +P = 4758d781587fdc4df1e187699f00d03fcf073725b6e7c113e49e4c75f1f77a38f6b832879f82957ce58af336836205f5c178011219f809c86079fc584bfd2a7f1cb1418958a69d0c85bdfc900d51b95aa40538e96c27acf10d4b49b27d91bd0d10ce792c0ed59b4c2e1e118185bd62e2329e353096bc605829048efc04c4ff843b7b54439a846a79725cd257eb6a477fa17ec6575fef771abb85562a8e001db3c7e841af8ad1d46cdbe975e045f5abe2d2def5ba4f7e800041aacb7ed55b6e04991bf1baaccfc7552d6a7529d236000a1917f15d099c60f0892b979349be90f27d572ca64c841670e797e582b1506d44e966955ee519ca3005d165188c4a7ed0ed6420a215eb88bc6e8caf4fc3e28977c4b2392898226bff87ea640f2894fc8084f9191ea8bfb180020b417f6f3bb157c2842b846be0a1a59e3e03dba6205ef3c926a236ad7ed995a383f42fef935657d4c07d176aec6873d7cab9ec8246bfc8f3b0074c791ad85a0e485ce14207cd972d4fa30254a702ddf56e248916709743f66ba8bceac9f552f9f303ad6d9a11ab9bf8fe75b7d342763849cb7f6704bb2a9d2c37bbc4bc49b6782a427e9e68a3896e95a0913a58838633dcd4d3a76ee73c704b059e24ce14745a7c28b5e54dd215b50edef61fba6a5917f71c4dbb66ebc1a3ab459ce6ec074c909fc5ac1c799418e686b76802b27214e0a24b46dd759599 COUNT = 54 -K = db980207415b3ada781aec3dd83219aacd470b0b674232c9 -C = f3a4aec6c059bbdfbf21919afc7e10cd083f0a1c099ccc125f797ca1666a48737e3bb2081e4f4eb8738aa4aba78cac74ef0acf1ef031e4a0a343f954394740962aa6c18fb6dc35eda7f1419f6db83219f6d68c9efc73e19e72bb3838c601b737d147f8d250f44c0f807e02c89c110913 -P = 7f539328e9535495b79d5e07b2ef878eb7700307dcc33b939566d8757405f21945152687e40d894ae01de00ff5bf4018efd4f4307cb12c4583d2fde058c564f13544d6801a2df869747a8456f3f43ac2e559a517a274eae6fba378db872c6b535f3e64999d +K = 33d24b08e13df8f8549e009352c5b272a536fa5b906743cd +C = fdd0bade43f620fe30858494df3184b38f38b5aa188f6af89b3ad9aaeb0a1ee232f9b177c00347624844a3366f6d79f0371b5659914367bcea5beaedf2721df8c13613b40331d371b9d6786288146f736dd06a55af2a3157e1a01eaa4812036113fa4141948bb2a13ef423c6f6ffa52b3904059e69e1f20062e97290400b33410a68e0bc241fb6de6b07ae1662b5dcf8488337418312896cf0022ce3cd678f056b788ad3190ffc0bc9ffa01aa25d579f54d36f26993c3ac683d736264f44cfec8902e0f59be78914176b8af8edf90555b2a05932678520fd6178f245c969cedd232702fba144561d0bf562cef918ba08d89ead9da59e66670153d9ebf867cd73243ed1ece8cd4b5a37d3b291f2cdcae1cf2f1263f48e68b33c048cd46cb4a996d92a97728767292ffaaeb0903bba4d5d784e6f587da6800c6b0ab2be0b97c234d93048d3b0b20115790a37ae0eaea744a31ea2d0d7c4d2a31a3071efcd96522dd779f7bcdfd5fa585ff2c289a90278422aea1e0bd561907e42438ebf4c3340f0f9fa7c5ff577c49007b04c43a9d11934c63be5a9e2c75291f1303e48f7f425aea0f3f66f5f60265abc0c0b7ba11153be342c6b1d80f0dce2e0785dce38fea3600db9d556a28139de8a727c264fe7c8e135d5f390c4e9ed3196b4526e20b83158003e3ab0cd239cb8507e1a981652d7bb6ab293224b0adc17c6b8134e567fef483530d53094cda097 +FAIL COUNT = 55 -K = b46b44bfa64952baae58420a21db72c0192c64cd3b0d73ee -C = 49b637397260c29ed52fc90213b34f36f47ec5fc6dc9be185f0b5662b50fe90a3803e4bba7090d1a7a22c0d478d3c5f10363fde5f56264e99eaf7a6f26d16634d7c4c4d8024e46cc65487790c4a20bb6bf62da980d3ee5558c22798b291d801b0f1f86b2ffd1c45bdef9dd6b6a83d8bc -P = eefa77f67c4529443d3ffa8adfcebc5d81c6843895815a6c91a9efca234d078ba411c1849f469ebcaeeeb82c851859f5461498554de98fd2347ab0c85c0de24b67bc2a2da97117b831b870f3c4eac6572c42682c4135a077e896d2e041362d732eda76b1ae +K = f3b2a16740456780a3314094b8d23b91dfd5313e1466ecc1 +C = fd94cb1ea1b9c4829cc76e367bd0ef5ed32a5a6beecaba91b10f6927555ee7b0c1bd1f32bfa2b7fa4f931c3ced004f763941e0c7d220ef3dd43be8e73da855f90cf409a217f3c31b7552793bb79e935fa1f5e1bae2326790acad14e22113f0d8637b471925d70181c8ef39ccd853b086a3d7913a726dbd1ab3ca85951eaaa240ca6b5cf7af46db334d35f86549e9a3bd1a1a72c11a1d66c9188dfc67d75725ac8bc29c9562e7b52d202567d6aeb388f29eee1e19092aa1461281540459d4bf1d60900bca92fafb5e40424593f98bf083f95fba6ecde8b97fe62ba832dcecb20685d15a5ee3833d2df8b1b130e21e01ab36530225daa19797f262836a4b33250d768c3859c133cacc3af7c070ad63f542af92f120b0a5409351310dde56ac7b4a1b36ad7f7bdd08f11ddd7a3042b8f4d325a891607d669612502677ee1d917f066684a029da9f9d3e19086c2edbd15e00d8fe1d772c24107efc88ebcb8627744a142d730b1302079280122f39c21a162ce9a4594901408adda9de587217f0f4944dff10f3ee80bfce7b43933cb9c9e2dc4b57f004940584db6e0a3e9b22bb3d1332104f3c5dc337c13c34d3c662afe36370fba99d7a0fe64fe5298db92739da00a3dbbe07f286d335de64c89d338230d7521cbf8d3842b87f60cf2be2778de2a72a6fd5a4145b07ad439b2ebefb8e427083d9e6882c4f73dc3cd9fd19133acc404590dc445fdc3856 +P = f60cda300d4a20a6e3c3b0eea3ff98a5666d5992cd87b5e260d595137579ecf43677afaaac28502ef7634269de2cc0f0feed92f9d158cc6404fa081ff45a3736c746d44cc287dca745f2e02ec6e924b8d14017870a2fe7676feb255cc45093eb424eac62023898f09c47afb791a8c7b690e4d15db65ece95df489fedf64de50163abcfa3cc14b75bf1821de922561579f17e57679369a034ea34a01e7510d724d0a4323557b184c8f42350157285ad672ba96fb719bf7f4045da10b8ac956427cd020edd59e73b26fb3129fb7f03cdd13053d0c6957074e9c5bbbf3639b556da2ac18eaf9afd4aebaa184a8a602cb6e41aef67b68c7a66fb9ec8791ba7d9a21ee64b249d5a2496b1efab5eb6e59d5e2df31f303f81d8ae7edcf8140bbdf3754ca3723e841ecc750b00bbddb2cabd9cee9ef54c2d56e367fbb4eaec3f44a20aa05c46805cff14c442c3da289451f91242506dae957188f647f76e1b665308b09e8f867daf80dd6923c3f1969cbc5944397d5d82673772f458b58202b3531821e82023fee15259cbc048e88189f16501ef9be9607fd9b1e1f3a884c8e4a8318e144c84178d08d3eb381fd7c1d05bb6cfb1fa2698a298c4a3f83292749acfed83fd16d7a67e5b741395c01bf3c747bd27b07cb9fc3b7016b415de152e5d6f415dacf21de0a02d797b06f837ce73b6411a76a5db8796f264427d822cfc78efbe2a75 COUNT = 56 -K = de43bc72c851ef3e97b2e409e1b45f1839672443f9db6c15 -C = 4ba1b972e2f7bc30ef5271f7415db91528809b2dddd3c46bed3253fba882dc8c8347e705b4afec620391f468ab439970bc38efdb54b76a11faba2060858866110a74e0f7eb14469c691c5184947c47033b898e1f90d16d7644bc951fb539b8f7a9e461fcb7ce4aa876af501f11663800 -P = 0144c6c8258c0e3b73f15cd942deb700ec9f3272c8ff0be171978a3d07dcfff7f9631a4e9378ee2a7bd38c24d344dc67656c63418dacb031df2ef48e4c7eed84c04409ed758d899d099245a821e93b6f8eaa27f3d6a3b1a787ff03abfd048d38f424212b00 +K = 1a40b6119041673d61082d7208235ceef0375e99a993fc4d +C = cdf1fdf599a98a6696da5fefaa85f3ce96edd08d599d1ae56e4345e2639e676d8be4f26606d0495409d6e9d12e3ea0751b5a32d561eaf20158e2f280b4b42777631dc5390f05d001bef7bf33f135c88720b5230d72ebc16dc85146b762aaa8c2c9e22c750ae24346c7a4be8953f334bcb0c2a71d8d60c97c680f95ad49ef252faab883eae5f159d5160ef59d7cac7e5fa08b4ff0b73dd9adda11dfd0e9d8c757c408bf924080aaa28bf37e31ed20093031ed1195c681a3aa96ed56ca0238b54c53c613640e73f9754b5af70f372969fd46b567b40886264bcf9601baa039aed71fc19565f216f88a3ea2d4c2c5b85155b5cbdd3d263da50fb99a6a60924b40710e719c605fe5b67448b7ec0758947e28167dd724c6ccb350a5bb2abcfb479fc6583fd6ddaa759f5f4e9a1813abf89397ebc3a506abd5abf680a3cbbfd149c0e9aa931d998b827bb5ae3757e2b081807513dbf45f11c169d6024252c5135e4885eb9ec1bfa98af7eeba47812e47d21da0a487a987623e4ea3c22a6bc67282179b5982d4b7b41daeb0a36cad98aa83b5f68e4ee74655540c67f4845b4b762eea51b019e10bbe4e19b8514bacbacd2aafe590807eea7448fadbccb2dab8a8755211284b6a4ca016e2b7d4033a6b0e3fb4bf50ca571000a46c82ede9852f0b791f15074b4550dcb615ef7c2b6dc36a53b7942ae2ab19c13455e5f7cf46f1cdf3a7a94fd7605836cf668f +P = f536870f5156e80c6394730829ca3909498ca6f125a17e07a820c1f1502c4f3a92cb01c8b0afc8c9c85d30e3a511ec07a4714ff5d876a1621db53b81e573cee7beae5b89d07a25f4583decd7a5824d70ecbaa17470d95b2870df96f49870079a2848d897b7291a698cbc640755ce518577f8c10745b8894d024022ddfc47db2cab93dea457038e02287d16247ab19e78b6cb6366da431c75dd48117530c26d10b9665563632c2f42a991bb3e1636daa9b8b7d34d32cee9b6e5319e52dd1d9c6bf7414f809d55f2152775a507cea9262bc0b0d94c2afc206f498dcb99741c58dde6851ac94999c859038f5813793d7db97b89f00a0f653ba75b4c8647e8efa1c3f7a175d7a859fc2b1dc341c52419556aaa47653d08330b96b3bce5d7275a04ce8c3131f93ac2301cce072c47e3205444aa1d6b6fb5642388f3434118690fac7d1bc484ed6cd4bf89e683f4024c6ef3d75372941622f3cd4bcd837078d54664afc02a99aa129208b16320e9b8b9975708b0be99a67ce841709ecab20aae41e4f17358c0fd644bc67a3a1b5e86e4880e26ebf06092599c416e0c39422691417c86eba8a2b51f935e7c26dac70b22ef9b2494aff3a5f837f6221c3546c2607cc1107b5da0a85047a82ec694a384625394f8b5429d143428e5f64aae387c3a0934cfed1d311bde8efbce3f7ceb31b3e3e8bf4884fe903e9f14648163c77e552c770a COUNT = 57 -K = d17beea60fd4bcc48c96750802eb90e92dcf83e41e3e9d40 -C = b2f3b41f875cb426706d2fd24a29cb4cb25dd37d85931397750518d5aa8611eeb45911965920032f1f567f42763b9421f0de037af6047a823e57a1ca1511fb40ada9c9ce4c8c7cd992289c5f06b28615ec5eea2b80dd99ef25039e1ccf7c9d7a80ff8b170b295f4177b3f8514fa81510 -P = 24a3a9bc83437607ce163e63a30c5911ee7ff0b87aa0634671d240a4003afd65da138d2a815fbe99c23c6b95d21445df131853185ff99f7e882449cdf9e3a9e660a66f86b75e066c58dcf8794d25b0d68a500c0902582934afc2954299c77d259e1347f760 +K = 99c07b840e0770351a67526f7f61f30577e924631c9cb74b +C = d32b572959deddd340cd92e383973b0cdb2bd327f64087c133f06155044d9d171b6f091b504c4cf226ae2310bc4c098e2af45ce91e1b54fdfc812ecfebfa3e85e10ab3233b30cec38482b2012ce9cac92ec4c2ed8dfebf7d800112ebe79d6e51f6f4800e746a361f871e6dfe974185661d161930c8a4354a5436dee44314325d11135004011d213efe40e239eed15a4f89942a499b087399006cc3f6edee35a6c659d03883edf49d4d6d98d1fff80b30fbadadf9d076815495850339e3241163e4c843361c0862bc850531bcc6317423d9e564146d54e66b7813318429f62020d300be69805d3b28fd6ab830c24398fd00bca86a1931fc1d6c6db85c7993d705c8421b419f9c00dca23124080be025c8ca7befafbffb77936d873ffc79edbc832eb942404f0e9aa4bd3d2f5aab91c7247558f857cd41ec1184e280966fe8722edc1903b6a53c1921741c87765a105356633d301d1d5ca87b1a21ea80d51f20b1a662feeb333e6bd63fc500cea6d22176d02bff1e0fdae1082665fc966f31cccda40932f2c181bd7d993d25c57ca9ed230166c1d3b405d80d765dec5843d2aa95f324e39c6a3d807b181a09ff635e1cf609863e878270b30862b19ff5a39734bff2f70b0329f9092ac3a8f89db77c4841c44a362eb811c45ee3abe9127697d22caf52c3432108a7a431b252ef490914ff7abbfe8a86f85b9f742df488be87da1635ef51a53a4d0447 +P = 0bb027a6d56baa48e47f9d1c693a04242cf305d7af16bf00e017970f71bf093827b906a28fb0d9233254e1b50f605da788a9db189e8f5e2fd6738b488eb168a951704cf545bc2c5ef663ae6786af70d886077200a56e59c2acad7ce0e96056c7ff113bf6d387f54dab86c4262647ac34ab02e545ebd9b9356996f9b5ec518082b1e2f1de3679a07fde1b4ea6475c90ee125553746729a81bcabd78db60b2f372527ddd558c33c3c9eab911eb768bc7700ef52100c560bb5637c228b3ace5cf434dda9ffd979c6fb22631982df4c1acfa548d22025676086100bc42446640bad674205728412a07dba620ba3dd9af2541f82280c3786433061df7782e91c75c236f213fd8b2e6b24a5563f5b5b1990fff7492ecf2765de854371c3cbe549726092d7c4f91a0773bf6f341f0a28579cd7ef80fb62fa3f04bfcdd76ac7306773cf003c8e2ff8763a0addb51e6a8ad03a1a331eb5713c55f55bd2b8c28753d0d2b2bff2e6925b3bc8978a5413a1717243e2fcb6d19c24531f559f438fba32af4aafb82e349fb5456735067ef6ccc05698085612ad699eda76c1698b022a5ae704c62294b704e80aa478d2281f707fbf538101babca2935a1c56664995b12108a3a934e94423ad898a6dd0422404632e6ec8911a05152afe2b5a42b77cdf23751aa6924b3a3e91583cdd0c39b595192aaef40598ec66553eb9dddb263da2b076c7a12 COUNT = 58 -K = cff768d86703e7075adc206e9d21e9d00d0dd28be4ce8744 -C = c7e5cb43addb6774e89c8708edbab894447447c5597ce2451bfbe4c8e1e105506dfddfc6f115a9c168b0757757f1e361528ed16316e536c81a164c7c00095e555c5e51e1f0abe65a255a5242a6e634330506b9e27f3aca0a23601bdf05d9d164cba7838a693387d15c1e6ea25a3e322a +K = 6ca35f33a069c83ae5fe391e678241d87e323401c66ade32 +C = 0f493a350d468c42938fc5f51b644b534e43d5974c935b6f0120c3fec12aac6693f521534fe391693b3576c25a1821f99d7c45e193c4276eb800da2a0198bfa3108e7035ab4a4307da9e07cdc9fc115eed4f2a366bd3e22b62314ce3db8d8d2c87a9c37d457ae32458edb0235b8b5fff2e0ca5bb84a67a32f0188c5ebd04cf4705a06ea7729dc8b182241a58ab842de58ba33b72f57b88debf25db1c21ef01ef90c1f7e56eb57fbd6005e554303c12eeca053d9f81cb55ebf4bd0d5005d3ff6267533591824347298cca64dfbf93b6330ed4cfbb3306ca000dd3e77e288ebfeefd18cd03b5f380a180f060a09da7018a1a2db8bbb50a17a4d7f081ed39dd481db8a2513f222b9569bc8ad06a244489d99175861f6c9956e44ee24bcdf4d810337ecc6a466d9a55b0bb90e301b8390530b1ac7356b31c84a71c30d7ee41c370d671600691d8b49fb155bc15c8bb12896fbfd86482d11919cc12c9c44e0e1131ecdc4413df16739e9f3d6feb314c3646e29a40dc4842fc089b6d82dded6143489ba167d3c54c0bca2c782c448a35a1c17bff7a775b8fefba9d75e9338846ac66c6d847608cb6baf16855ea18c6d7d7df07d44f6405eadd8acc2e875c98e47a4880a59abe189e8c46c4c4eb4eac69e639381622885a16692ac1c67b687350e400d457d20c2f040b0e593652bea12f092c7a688d181679987fdc051c7710c28de363e36fc88df05a0ed9 FAIL COUNT = 59 -K = bb083b364a25714f8e4d1084914be037ad4135975f53c87f -C = a1ca00d3107d71e496620d1598a2f55364cdfee2d1e24a8d96f872a29accd6b084b7b919cc8ba357cd57ed3200d555784a6ed038c5b1961797ac148cef6786a99a00bc2b029d88daeb0332ac140d4ef1e1bf3c324901318498d531aaeab41d60344dc7dea2a7d5316522f64dec5ee0ab -P = 1cf1bde729ab7f486d9685605da4203e83b89bc04b04f0bdf9c7d55d83f9521db9c7ec57be58871c04311e67cf4aef3341bc02cb9b9aad0578e35b70f14016458d3375db5955ac20daa8144b40f5a1395288a5fa9b0d75fc637324caeab86aefa8c03e4a63 +K = 136cee3ce8fcf5570512fd363e7ae52ffdd34b28551fca12 +C = eb7ffb56ed082178e0f418267c91a616b1656cc6bd212c58a7d975db2617bf290419246758c2e52672626cfca8775bb27d663b8f862b71e5daf600e5207c95f3449fdb802bac4e6b60592ec534e250d4d406b62f73ae135870b14dbb68e1dd5bae053be1a963e73ea404ca7f0c229198bfd96c0b95ce8dc1f69657521c1a45b35267df378cbad91b738b4bb3b5b39545ae2ca57bc43513929f272e50de9b1caa1b3c8c352c43d67fc8bef80c0edcca19a7065474d1a9963acdba2e3c513d2d9b95f9dd612014d4cae8b606020f3925ba049ea38e2a16dafd6afeb22f71576e9b4a8eaa97315aea7ca1d4fe1c889f1f7f5ecc4e0273c11d6bfef535452f924382304ecdb6ca1b0297af2c41facb9f8c83382cce12ea24b2c6576d7c4ef2056762e1fdd30c12fbce907f7dd48a79fcefa9b7c6522ebb1f5e1c15d83cda97151792e45c20d610ac6991786ec7e95647fac0f78775c40230fdb211e7910f69aae4c44da2819e5a0cac4bb50c4ced4705d58f90dc075eb971bbef92ee287cbc996a1a03c420ffb2701870e89f57ba9291b2287413b9a1b3bdf3b7d0f1fb4bda642111740afe708e359669283e971a8b38119389e444bfdd418596f4720b910e3e63c9a4ed170e4188386cf5338480a3d84f7e0e8bd7a5f949e30f0b15f1ada20f0b4777608b7b79cd19989d082053d9697c8d01b4f3847329759f184021b1c87bdf78693af122ae521892 +P = 9543db5a3f95feffb2e4172fad2e57988f3b0fb4e3afa30e391bf8b771dac377e93a6e6e1fbd1d256fb125075f44996443dfb1666b8ea7b73490cddc785660b41d551de278111ab5c2e4c877b904c4ccf3d127a75d2a58446d3d3595388ab54058daf39b6a690f988090e627f2339cbab6b57871c5229706558a76e618a254950e111fb385ade68954b078ef249010141bd65dddc72fbdc75a064a9f854165c898411ede30ae49aa9bb7614c1d5ef0855ed8266d5ec158635a00ea581184457f3eb405c3b3fda6e1063ca71c5fe8acfb68188df765fb72e35af5e0b5ecf4a8ea0f75ebdb45e2131c2a60bf78b85b9b84c24546ab4e539393f033e14dcece7501222d4407845f4035715e9bc2e26d3c576d52fdc1deab206d31e209f2b21f82aab61095a4d21029708a4c375559cd3b76bdf86c6167dd1f1401f598574f6bd0a02e79f1cecf986403faa3c2ae73ed04920e973ac1e421af498bc7dd76f2986945063c47cbaa27e007d61b610f7dd9b6ee1647c1e01095704bff83120c90afd04ff29cf2e9e5f97b4b36d8fc836bcc3986421833696a80493401082a382978f1972a13bc60bc4411113634c4b01505f22864e8ca62a57d99ea44b91e8a80e122895e39bc0a416fce9268a6f247e134c1e8603419d93d56d323564142207701c29c917788af59143d718df99996b0a084f88bf99a0c6770cf30dee73a9d4e70cf77 COUNT = 60 -K = cbb4dc176568c3d1f4a63d96ccca966ae3224ff2fe0d8b84 -C = a09ba6b0569be5089a93084a8f1b6728d8606a1dc4091ad7c258a2a2c7f1f452f6196c2f39577cc6670028547994178730a930acdc919ff31282a2ca7eeff4ba9a7cc7523e3ecc51fea58f3c2fde8d5c459d9a91fba4ee60539a2b34b9d75d2f5f8978c9756df1aac3a0db1edebce612 -P = 3bcde7bab6a013ea5d98242b75f2e51121ecb620dbc08aba0de7955b7b67dddedc6a4b29ad9238b3b95c77b3c70344e919cc178b583f9c2b6dfa9148fa958c699df7067a303f863dd7f43e69150d96a2fa6a9cd3c6e68de9d21478b28ecd4bdbc64c882b2d +K = 4f04a7470e9df6be067db876ba8b04c30d36fccf44abb4e7 +C = 1fae475698bdb5ff7c269e7eb343b96ec759ab43ad1acca87f58d081095e27846f1eef6fc5997a3cbe4960a9ff283e6c5cdefc46563d0444a1d0d10577c5ffe0aad9940e3ede9da0afea2ca4f507c7417f33f5dc54b4d6e78b9bfa099c4ff8e36a02015c18dc26f04266637be35cfcb4f5566053ea4b00cbe7160bc6eab95efaec6988da32d9a6da687e68814be3be5099e19325216fe1d93575e568ad293bf12ea2fbba06168b8c7f7abf2819ea025cb1eabe6145d483ccf44003facf2896e19e88a80884f070fba11f64d4de7e8e1be42e6a2264f14a3b10ed610c0a716fbb3e01ad88f5c24fc4486fcb405fae67da9c37bb3d6c3afb8fcabc06a2a97cfb76cd064e4fed88ba7d52371dafbd37533788558ccd591ae3ffc32b9e1f29cc2f7fd35dd660a14ae75b77fcc2c3357365b21bbad8d91b041847ef99848de5b747e7159a0d77b0364a184d120260edbaf25c91e3444e6b9dc8a9ee1834ff6f4bf62044b3f4f2a53e66379ac5447fe0187e1565da54bf4a8f8dac71f8a67df939c4224578370c55c3c498d378fc124df1ffd09dc360d4e4b6942fb54af4616bac2ac26151a0d1625a84f29667d558ad7c4302956d46582cbef4fc82d2b59d7640a59d22b35192b6b3217add4f7ee2d414c5ae806b6202bcfe127fadf92e0726dcb95686c45568f4644ae8cc7f41680b086561f86cdc657e945ffae5cab9213e0c944df0a1a0382242c90b +P = 87bb8175fc169abc4c191caaaac0c51d623c404f2eb41a19912c9708cd4bddcb1d717dac59b3f4892ebbcd361de1697ff18f267c4792008d1c5036b89982e8f940481200e0543a419e93c7640668a666b7def121ebfa731ca71d391fcf3ea68558cfd3d671b3b616b45098dbeaaffb0a91c8e647c5d60c6feb9a7b1ff0676b4732bd17087f58c3a74e182ea1ce8d13f2d25f10ec6c9cd8ca240cead17ad7517e8d9b4aca9a5c01fbf84a91aab5230ee56617f26c01de5f48598cd926ccb7847e46e04eac60ec6efceca931a65f1011ac8ece30dbe8ffe8202169ef99f9cf486330f14052b0e50ab16057676b8337ea9fa921a177e6d17cc2ba61a0049fc9562aa812da77aaabbc6b19ae97229cfb5db5f031a0238bc9842f3e4fc799c5c3d7f7a703618d974d67efcceaac3c0c8e92a9c896b603f230321d6502251dd7e181d806c7ca31f074a805844f4c3d4178ed7223bea7897dc2d9490ed1ab42a13c92cbb4f58198eda0ef30cee115e53e73451d043e4047b7ac54a84bc5a25ba9a8708605ad4837db675ab70306dc6d7430527e30dc55b294873cdc0a3d9d59ab9b7ed83a4b018979f7256d7778f0909af6d24b3359c134f3f75745dcb612b26bbe24f0f0f1664a474454fd0da337e989acf162ea5d324ef24fc10a48b1cbffa8c68ffbdf2b2a959e067377302eef79d3094f66b257004814442ed6579d016d8d49d796 COUNT = 61 -K = 6366d100e03c90b79474ea9ed22905fd8bd48ad59a64d566 -C = b4db3c2fc3d64c8941dd06230f1032a142c04c8cf4f77f8fcb52897ed9ab18b8255d5e8d097e974d8b1bbd751900f314fea528fc8179ffff5a03b7327854ac99abee06a62002caa619201b6fa9f6b1d872375323a5fe3df2813caeee4e0912d72796dda76d66347e64b9dffcc45120a2 -P = 876a62160eba234c9153bb665ed1299119f1c9213e60f4f4e79aaacdfafb49d30300617683f9e3483c69e5cb6f54a7c9eaa6894f0beb48132123e70d084205393de750d48bafc21f4fa75c6a10fe65efe170135a167b7a4311316a570aae908297e052bf05 +K = 2056162abe2653c4b7e0d4cef30627479f8266d3e2343830 +C = d7f5e05e3e4265d9674abc987c873915aaacd6fbd612bbf68a063c8a2493cc0d4bc6032c019ad2d3b41afc3d0db025166dbcc57e2865b95077abd0ee9d49a409fde96626e2c78c266c9086469cb8c1a30f26dab22b040b5bf5ee5613593d81c28382d30ba06bbdaa0124051c22c384148fbe57780189ac22375e8b63bc88a9943285b73e4ebda13ae1d0e0b1905d5c923fddbd96ed95ce8c454faaf7afb4993ffe1cfbf2fbd592c11ec392cdff03da8c12d7508951d9ce8b41b63ba8330a3f6dd1f04ee3148b3ff88f5e8a4e13e3fdfdb6648ceb74b4470b92876ace514975bcc66843dced3e61f59d26e354020f20213b39fbcb86530c39226c62f2ab572cf7c3cd25f01f2d9a620526fe0d7a485bc19bce39604912a016a7f895bfa15a1d69cd0c3f62dc3e7d55793ce31ca8aa9eebcee7f1da6fa88dc9be8040527d6ebfd211f0df36e25dea52c0e5d58bf9e4b0ee28dbf390cdf0d791f9c237adca25568627161e3d98abdc96ef3544a4ac25cb1896028c16a8c717c3b76fc70cd5717d42ee632a945d3fd45ab7f4f9f824e5d7fe06401cec9d64400c6aa78638d94b464d12d50e771e0a354a4694f3d2b8469528f1a5ab5b9c3efa118ad139e03d31d93ce82f9a7cb17e40b8e5e2e28458ca22abca0328bf2049b896222987254dc7aff8d64cf8cef73383c4bbe58adab45268a19ff731b9433dd6ed86e6b72f9d1a48af2911a672dfe5cb92 +FAIL COUNT = 62 -K = 9394c874e318f33a14c7217fca36082f1b3f62bfd0330d32 -C = 4f8d4032d16df97e5ee98b3eb8623ebed85b9841b054c14083b2caeedbd34a2805ff403a316a3c014bf58189d4c3e01e3e666db1e84ba6014708af11af4a90308ec850e658db0a440773856286273ab9881529edbf803227d49ec4b21fd5f87dd8941c8c8fb6611f29db29cfceb41e90 -FAIL +K = 84c55639b3a56f4b2dad2bdf8feb280a5af791eabe158e8c +C = 20c018ddce9b9d71e23f22abb42948123f42d60c779de1fb0ec55c7010491127aa8bbbd42f68c5c205e0629c6c9890dd2526f8d43f469cdf3790caf72bfd503f9ea89818dc47767f0ce592feec7bf3bcc3142bf2c49eaf98d8e374fc7c28e9b12aafe0cbf907bd66bb454a1fdf78d0976ad74690fba89b160e2e42b7460105f3f3c92c8489a605b75aa5571a1c00a997f4080b21d1f524c98f2ab0da7d02c8a81a7c0eb12db8e34b4c8537586ed878145f0b7f2c19a5b9211b9842cebcfe41b4ee57f12de3fd0187b316f7d781297588684ce92b10b3537aaf401ee50aea945f5706eb1729d823dcea5fbdcbc98a2ecbf62054c77e5ca78f10513101d4b241e77255619625425826a67876387fc7c51a1f0797899d6d35889cad12d39137cb0a6405105f9abc4570a2f488f3bd6e4169dc01c70d8d9c4174dd44cdd178bd02f812076b3847fb87fd4651e40213ad33c6e7bc36682a6ec6d6d84c0722824589aa690779b0f94f235491ce62313febe1bdbb2cec20ec43b5e717048d181fcbf978e6f8a070b113bb740ac475305bae29957cd8bef9a1778554ada2e777efe00aefc4ea208fe32f60482c62dd9540283efb7a24a21d50249e23ef7dab2cf4da15c50a832449b36e6f65f661ce241cdbe094570aa5bf4983953e012d71a4fe37ae267d234a5c63e9d140e1d181df4af2de321abd31aba077b880da3224d7a23cbe1aa963b1150b2593c5 +P = 05774fe5ee43d5374c3bf036664d7776b84f976cd4d2f236077a956dd69f916605afb9a42eaae49939ff1c0ee21924a741a18bc74d8fa24849fc736d6e09a30d94367e0bcfddc6182dcfa0a4787a63815eb18c13f888187e85db7894ea8f015a6167bc1789f5fd35d56f9b7e76cd6961b1eb03373602a43dd3a6a89d30406f2783e482eba3d5e0ec1f6d26635e233ae219f98e61bfc256b3b344e2dc656630f00c3997fea3400e94455d6281ed20ef378c5d9afb9cb51a8a34cfce49f3a6677d3abc284b2ce670656f0896d1f3742f8e21675bf7fd4ef2af73c6e8baa91b869a77a37bd6b8a49ea4bc70a4202d5c76fcbd273b12bbe48cb0493af4140dfdac8f0127f6edb8abdc8806299094bd1b794ff607bb740f0ddd5da7ccae04f5e16556243b9d4dd1897dda4e1186c277a423a2cd1b13fdadb89615461f5cadd10be5f40b968461affcdd0dea40534a624a21ced15eff85e2fe7e73a111cc649747696f250125e638aa5ea16c14dd1458b6d88ef529bb30dbf7373cde414d472ec0d4cd3c7307a7c99dab566c3a71d832b1ec465c61a8b016c87476d3fd1a9b91bcd440f562035e6f755305f7d2af1bed25db41015e7d23f7563e63e72948f9255351dbc3df84ccbca237415e2676101d1d427d54e3a65cacf5550c9f573b5a9434f1cf018c5db5b059c50afd837645c37c6b806b92a156968d14097925967e0bb44ef7 COUNT = 63 -K = 6d327031521b62146c9a1598d8daabe581d0fea4efa9dd3d -C = d0255f9e9d14f00a2aee2980026ef236286f3ce258a71fb33234b10cd8dc14cdb6c82805d4bba3239854dbb4875625de5ddc31ff8db1dba6d284c7449eaa7baa5b81f0aabd5035012a59d1d110e51e6b6b7c54ebd62966c032d6867f29e0b78d1abc233a32f7debca820c6bc3addba53 -P = c437d07b5749d70758be71563c8f62607a99f795af441112ab80ee7e20dcb5c2dd54fdcee0ccff5598e5b06920b4ca904ce0afd546c64397ac1f02335582e6acf0c9d0e0e0a82beda099fb4822c9a5f5c55753e18be98fee8d791377bd2c39ed2212ab59be +K = 54d1859198ae090745e686e1eca7b8d2fd25219c5e9eb5cd +C = 259023ae5f7f21d410924d58e78b0be9ba22878c4aa4a6c66ac803041e0f33305e9bd5e4a55dcac38f630f14a33be521f1dc10b58e541bad01303ce9473213ffec731c8e9bf1b99c399d066ff7a89a57b09c8a3fa333f822cef76a89a04b6d670963db80ef9f3207c2b323f0c3d858fe36a6da41064e3b8fd1ce67064450b6ade40dd7ba17530a476214177721fae2dc49de45799a658bbbf21e407b1fb8bd69485fd8157b4989c7ba00bce4c0735319cc2bc990e41e53a15c20b711ba09f5d26af0cb7a158449e82d6bbb679289a7737f5290032f32f7a4e9154b6283238a1502f7d5d07080f07f06391cd9e09f8b65220ec9dbc78c0821a7e1e5c1ff348e9702c7cc39ddc3b48dfa6ae7f887002270bedcd9d314997661a72ca01ab30924495f55cf8803452d96aeebb3fd3b31f69a58762b6f9a3a741b2923395ddaa2bd3742bd35f4268a8b9721019cbf03b7415f776660e27523062e1ce689142b36c8a9731b445979bddbba8501a4dac0af722409e73fc22d10cbfa6e4e2e74c98d08dc90cbe2acca3a01fe85d727cfc2c4e79e6e7230a345cd2e42e3faa4969f54bd62b7e203809c0a673c058a4c82bdadadbe3b59c0ac93bc338a49b6c4aba7f2f24c1ae583c7785d23a077bfbc90013190af633310227178cce8bf3646d53ca10c0225ad09696c47646e8d01ae9b6db77e3e43b77dd1abcd03b048c4d73252fb44a49dab2c511cb60f1c +P = 3feab6ef41e33a269e46ee7b25403967aba11914334b8dd43665c18793287d5d88a70dfc1c8cd58dfff202622b81c369a1c969ec1bedeb08cc8f04d89d6576c5607595cd5a476dc564cbf3d1ea8797366e90f4f43b4588bb1272c067229e92342b66d18435e02d47aaa20f00215c2cbd155681b621275c1905261d6d57858aaa8e7a3e58ee68be65b3af4fa8117d54fb2f2b13f310bf67f29dd7289638f04e4ff8aad0c211cd34e9aaed3fae68365fba6d3812fd09d1461bfdbaa63bb213fb152519344a6b13e13b0ea54863cdc1bd49022b45ec72e62ab9e35dc234e0b0eef33b3c97ff1e0a1632863db3c2fc336f3c5b657dbd60e232fe128633ba189835d1fa6a894fb71644e68957a5dc9f390e030e74bc6d91c06b0698a7c1d88df5e03590167cf62b984d31d440e7780a82e082b35625f450f6f9393a8ef03bca51e9fd5e5fd660f5db93bf39f38a15eba07d3bace6147af68f20ba6899f63b59539a6bc2b85b7092d521fa31b4b3fb750c93e1a6110c72b22651aa350bc7f10b2fa425ec9b358eacc3b06ca8aa5d2ead576cde01192fb3d8d5e730baaea5b4a68ce4b3a6482cca9f0c8fdb29b66eb6f3a497365d9a06625c8ac081793381ad57fe06fccc3eff3751758f500375de3ec05353e3d91420e72ae49c9a9ae8ec1ecfea59bf936acc1d41805fb64732e4f7b3192c1ee8d145087f66e7bee8bf74919261ab4e COUNT = 64 -K = aef11307b0d655419bfd126ed55b4149450ca89f6d7e2e57 -C = a0fe0dd8161c424dd56b7aed60476f60a39ebcd53cfb7ab0787b8ea4402bb972c6601bec4087a7a56f4fbdbc5847b582cc2dada551a194baaafbe7b3087ee73e818687707ab211f3db3ba1a02504bee33a822cb0ffcc16957705b92a245777ddb78d142b5e1799af7aa3afda9741ed73 -P = 43add6a76330b42466d4e1b7e0f48292acb8a61b6d923cf81974b7203b2667a0f3d25db179267ad81c6d5a76a486553ba0e5f99b77e4fce864f40d7021560a6579f6c78e528cdfd03a15fc46eafbdd2608dfb57a3990eba67d508ace64ec189d4c386926b5 +K = 205c30d945ab2d81f58b3b04618439da7bdd1bcdd9eea1e1 +C = 1c173c910181ecd4e6792baa72245aaee6fed8b7bb6ad17489c64fb347641f908420cf0c854f055d3c291b0189b54dc9288ab96d0a4d69f96c3ec581954bf6fe8f0058202bdb2463e4bbfb607063534a3606fa4ab6fd11ed1e9aec11c075d4656b4e95034eb1c32db864d83d07c1686de0ea91e5d073d2e3933021860886f9df2bfd59b21161cf4d40d318ccfc1e2ba5668c5ce380225dda63361b55a10f5e404fcf5fad680acfa5e358b9d9dfa3c2a1b5f9c07d98bd84543ea057a8140856859984711dea93934124a6640caec2d5d2a95daf3f9fd584919d7f9463fa288516fed849b7b64ba7bcf99577f64e03608473ab9a20ad5d6f6fb10b86412e1a9b6a17b664b4a0cec63a639aaa313a288d10b887acea34c281f412e04dde69b1e7e88a3a6ccb4f6b573e8f041970107d96529206407fb47711554dc90ddf4d78c3b2840cf174038d45b6a69f51b905a0386b5107d493692e2479674b5d524c8b03937235976a34c1a3213f78ddd31f43f010e8023d582a5056cf04577ad36c45a7bbe57632f5fa73bc1f84ab39fd17a3ab0e6456cf4c97b076325c51739960b8dfde6fbec27de2ec089ab9f73320c8166e08f31eeb8bcb89b6bbe7044196d8aca4d9847f1a3ef8bab9015dcceaab6137ef6eab04595eb621744b6b9c5438d047c14a92e0d013dbdaec2374f3ca13b876ee286414771ebbdcaebdc7a6f507f1a814b5e75ac054ce81a7cb +P = 4065471d8be30ea556cb6147cf8164ebb6d965c9611e45285594bc9ee988b21d9efa3344a34c914f466d28dea33832be14c026da067b49816b2d7ed2e8108b0029f7b12d60115ad358be999f11069d472fd20e08ce2d079822fa2f837e2a0bf3e4fe68d4026aeb0d188e0f09b504e66467fc2e8189271999863c9f0bad00a2d50794b4fa683c54cf01bfe68d43c5767a45690f8347b2d1afd085120a61af0904c01eee0e8f93e9fd5b29ad6b1b83e604eacfedfbd1140c9187cf65a14079145eea933df5f1a9d10d9a29326b64f0a85f7ba812cde647a1a47e06fbd01a0649a1738f731a99b36a27cc05c45579437c42b3c9246684825097da2c5ebdf7dcb4f7e179df610a8065c995b5e07a1dd18c6d8799eb8f90b63616ccc300d204dc78f5d53812bde63436d484fe32d286f1ebc5d7bdbd06de59980b2ac1a3699ce022ddce668be0df8f9bf45e142498387f9ef84d8059e049dc21e18d43dd7764b0ef847ee3697187d1e7a17c26ec76276c688005e23e4c1b6d4c4f3503965908e6e6946abb28e768474994d926a6b9a513f0e721979afbbb310e4335e53801da2dc73e5e97d631443c38dfeb11d61c70272b27a354c33836965824bd8bbcf012dd18f8bec9bbbf2b2f7b4531873acd60cdd646d05273a218dfda5fddca97dadd09d460cbb7544004195a9b994542d3324f989ded7672be52a7937de7bf0b9e9b2aee8b COUNT = 65 -K = 785c91cfb1a2753d4b91b10743b5e436e35e4694f86e76bd -C = e2486ebb24f59d57d3438a60d587188c81d9faed0be523dd830c4a3b9a4c15475b1e52464efea93b4466fca1700cc8d80116f64be3b91499be192c8f2e9b8512d1d72414629b5afd819fb1510dd7897db12c3a3d641369dde09a7a478a5b0e8ecad9212ab03a9fba158dd233697ac100 +K = 4d2c27516d6e662b10c69069fa291299a847465cb7a25da3 +C = 1b98069dc495992762dff189309b6516cead4a86c45f0f1624ec98aac6c1374e4ccf1e240dc0e783248621d238758c1e0567242f643556f34d9f912c9ca12e264632894a747130b58f245ac78b33cdb114a8bdfeac85aeefc4a43f2c7c17429ba8a0f8f59d8e7be555fe5aa25ffa7fe01831bd32fc1bfa9ee28c7fa3837ed29fa253ccfb0edf9bcccfe82bb14d761770e5495fcc35070639a0e0ce774da5c35551940cdbcafaf30b5f06125e5746ded54ac48ee9cdd363ebc6a41125c3c0c9efa00a9352cb17b464b13f548d603aa1bc82e584de648efc253b5b50381cdb2efb47dfdbcfee77febd44dc59fb224229ce11ed08d5aa316096533cb48aed9bad586d7fd52a5e82db8df0126dd3c8cf8534bd52b4d80a9f0dc9a6ef3b944d84c1433feb588ee0dc7038b0558622e7e6f293e87220236b5439227ebf10d831f1e7409acd58e3a4372c18ce9273d322fbd6930fe8a1722c34355f744f7fed24152e50322c51912b8ba0bc7fe47f69ffc4909cd52310ff0ddd22d7da7be96d3aca553e842b8b889c31ad52a11c351ea55dfb78375840c89698849435fc7bcbbb3d81198f1966d59de645418a59e6da955ce9cadc765046032dfba9124e2899cddd55226cffbe302ff4311c134a9c6572e1d1be907e4bac69e157b1596910198e8dde625c359e7be821f6b1177913fa271cc5b59ec4badbb7bb86fc8782c86219c992a29e8edde76f038e25 FAIL COUNT = 66 -K = 35a9abc7c1d4b964ef8380b76a2d9bd10c6d12c030d37c0a -C = 4da58d20ebe9103873506874f7c02e04207396466d64ff0e08743c4df82ef3538657fc2f31b0ca439605ec59ca92f781716ce8506ba919a07e8d2c35c93894678e96d5204ebd77495f42ed0cd573cbe2f13e124c538da05b69420ebc3ad36255c1d5cfe9e7a157be932960a4a90f7c39 -P = 7cc90362bbadd99f01665ce10b530c47b5be692b4e2929090952e6d6cf004c74c7bd1a83777fad50d4b27717111af398d2a29c3e64d9217bc77b4c10b3af4fe4b52b7e47fa50d822f8fa7129f61a88b145d52b5d167ba13a4d68e762ecee0e80bcd6345286 +K = fb44c6d5c6b26e458f3a235a5256b0a2d208445d438ec360 +C = d521ad852120e0875696667d84725f47f85003b76fefbebf893ddb31660e78c2e9a5d7d3527c45e425143e9a2e49ab818959c6c06941b9f072d0ac98cdc33536a33fa1788021350e2d569f0e62334c11446324737322e18926e79a4de7f480504f766cb5a3d8dfae913929c719ca9c6da8dc8c6a080746509128d60b986cb740024b317c95a2eca5990f22e2d5ed780474f7ef58f6deb38d4c444b2a63d56b37ead93928a720392af24dae93908986381090003f2fdc959949669754f5936da4ec1fc6fb62c795968294c348be56903d7f6de5094c36b646a7d6df325662637cc4e2b1ad489586ff26f5819c406a3b7b1f73153ed37c8cc6a213cf8469be0a5b6abce49132bd4ebb1f21567f03cfcc7f36f9cce2ff0c8e3652cab065adc26b90eeb5bc7399159fcfd675ca3b56247fe90e8c70420ec0ad2f74ca923ca078e9cf43b2f8ed59b40c9afc719d6178e83cb0ce1faa48afd8513c864bb0ac0699a87013718f6ad423275b1b71613831fb9891f26dd8ba57837311b33a0dc39826012b04c26b56d4af1f7347956d88e5ecb977321d9e765c28a825ae3aa55b02daee433243d62715940559ea81a985f4b424addded695a85dba2f024933f2f050e35bafc555c79b85ff37114cdb5fd63422ad7e493bb357c92fd1b0cba3bbeb21388a89ba4f92fc69cdb6df0b06eaab26d1ef5b8b9686daa22e16423ed91775e79c74b6416f44abf875a15 +P = e868d2098ac6409466ea610f6a21a90a3b8b185d323ff8e3e682044a3243c7c26a673515334bc1b23953fef345511398f83b0e9976c8cb3cbcaaeae58b5436a756d2309c55ff8238fedb40030086c447bfe1780aeba63d39c239e46f9c7fc8de7436fb4153a25728f337be1a9913db323de8c1874ada92d22d7ef29ecf171177e56f5e360c006ce4d6886a6dc318e026c39a0dd26d155f6ac7d7246b211d3455d069cac6febe82025908a83ae0bccbf100943beda609e90ac0e89fcf9946b64d733d4b74b1cf9ef5a0620d2d507c3c0718609c1e1f61e763fd247a990de03bc333b37759ff1181cc751161e64a28464bd50ea29a61d39bb346366f403aa8fd680b8022e25cf62731bf9760122d8865c34996e552ce1d37e83c637a3127018dbca47eb95c6b6deba9b90c5f55c6a4629811dd4faceca78d3d68e09bfbe07d453964ff0297145652815367d0ae0f2732549486a57fbd3373adc3251ec66ebbf7ea7d7d41459e34ffcbb54d1e746d4cbe58afddb9a72ec718c8ff6db0ada6a2808c1ff60ebebd7c6a96fbf164129162b894f5d351cfd6cc36d143855352a4f8c96f5fd57f7187505c0a5645f5a3003f24468e0d160d0323d56475ab1e97df9524ccfa79785f5d3c64f310ed2b0c7f8c13554ec14320847285fa3e6a65b1656cd9011bda5bf154ddf1f03476429d4f694b31ba22b6c23ddc0ed542a76759ac03123a COUNT = 67 -K = 7941134961a4c40cceb94abc188212448f2abef5481993e9 -C = ea686adadb5ed4dd7c421882fe09695215061d661db8dec5b73f3ad42f8dec9cc78185c3215775ff3f2025c2bfab351324674706e7419118946cb428463fb8cfde337da4f267a082a3cd83ccaa6ab3cb84a71f8bcc863dac4bfd853e3e40772af4019a011cec58c863bd674f24d97523 -P = 2a08d768d9576f1a4e631b1b44f68b54bce2322c75c84cd405aeddc585ea75ec559d066359e29b27011af096c283da7aca81ccba3b691c9b97390eb33b84c7770c42b27b4f1638e7dd992ce93d1516510c79ca99ffbf3e060b4820b4868b237ec79758f800 +K = 61a1394d63cadec78958f7d42bd91caeb22c4970204c5dd8 +C = bdda87cef68de59ec03fbf4c5cdba0cd25bcc6e1e5c87cdbce64a4985f8104dcc19e6974eee60e1921b9caa887496459c2b3e3e7a5245a4a0cc31f325a1852ff6f226a0843e0e634f7dfe2acdf59afdfae5d5bef87bebbeadc11cc1ca1339362d57dc85e933c67a5bf4693531f2e298ecd395b895439e070760fdf780f59e015702956468c26c4540204592fc61c089d36f713dd107d247a305066a8d91d41aa3688ae702714cca24ea75acec1bc617bf9be6bce138343553b5033ef815da25892bd054b5df004e0036952ec65c8e5d21cc05a307717d29a79723773845e5033230d18437b3a61539cce8423522810fa0c5137d06fb73f4a12144b7a52ce862d69b06abbf9fce6af76c3d0232760d193cee9089ca074670b3ab118f5eaabda15beb8c8d0cc103dafb3817805aaed069f37d8f688c911d893b7a7f51f3c13f05ceef76e014ef238150184d428731618d58ba9ac99c085f2a4bd22b6476291712baaa31fca4dbfda5d3bbdce852bda5b06170c220d252df52dc6a53be5993af68a2479d85704fd3740c02197eb1ef93dc8e94d1f7726ac1490b2f9b6a6978afed5ba24e7c6a9589718e12d105c749b8883263611ceefd6119a9322729f2ff96fe0b6e2835c008511d4a879ea92574e9f008d098c25e935a49cd0c1e65895061bb73c10938417f03dc064f14e6ad4d95751a8007f84211dd94d10a124f5f2848c4f2ecba0c883380417 +P = a67d59d2a576d9f7ba103620b68c822a4b43ebb275958def5310c4b02c08bd4ff097285283182f651854ddd8fcf3f19d93d3f9ab00466cd494f006bf7c815a7bbb4a479ca2af78d08f1fa4981129f91685dd3cde4572db8c27265ad00ded28ba7ec5ad65b01cea90bb04e60c908673464db27417c15760b60c65d038af8032c96fca5f617fa594c01982e0b42957487d78856c73bc112f8af8edc8b753c5087a4fd4c1c2aaefeea6bc869ef3670603a8609e36037c706f1d4559caedd05b890fb4c835f38ff5f01a442e82121b2a8f6170a330911a3b494c771d12879f703997f42ae26340a48321ccebf712c1fb1ba8fc172b13e75f11b7250bfb16e83b1ddf612fd6f9b8e2b4e06551a80de39511c71625ade86ff76394b63b686b6565666ed81c031345aedc5fe72bb2c2fa7dc341a6a2057fb25afa87f8675e8690631cbce3c8e45692f5fc804bd2974e63bdc5307c6bcefec6ecd015ace2d0e4cd96ab4b350d80dd300bb68437d87664bb5434c37aa6997b844037e45e1acb3b77cd36cddf2b8b25bdf51d52290b45e3e7c8dcebc612a5ef1e432903c519c66f23221efaa745519dc733f8b88c1e04ea4b88f30abae3cca9bc02d3a85516f8aa1f4788f1740e784cfd4567305578dc25035d0f6439a77b279b8eabff34b25929d21db7bb6aab02c3c518d11942d3c816fa75b6e1bbb0801a79d29053e118c5933a175bb2 COUNT = 68 -K = e6aa98845f1393e2294789caebd9244c4cb53e5fbc71bac3 -C = 1a314f1677151b797ea2286c0c5b33bb035b8549c8ae63325a5086aefbf79ef69f7e7869bf843f5cef2ec105717671df04b5189fa4f753ecc69689f6ce1984df3db16227d18c6eac8fa73e26e3b9c6d86701cce420cb4000a76a1efe8d7433a342223176cb9782086825c25eb404a8df -P = 585a9ab209faf91d380dfc2984efbe6fa446235ac12e8e36b6e162f2c01f6f0533905e71284f58f84ade8223891d46c87f6fd0f0a3153227a7bedaa2c616d98f652b9976b44c7776b783fdd617ecf2a502a7933fad74a0054f492857c982f936e0d6d24eed +K = 9b1a3981110bdfc925e9d858bb38f57ba0f366a08e17fff2 +C = b4fae059ad2727e42c03578e8f5d1bbda3688a41c3675dcd597fa80afeafc9fcfaa62c6de8af4e68194c7f9c38887fd3e24fefd506f90e880baaaee9d7cbbad3ccd0797d545914f5acdc88a0e5ff763a674936288a9fffead4365139ae6f94401660ace67cd0497d652fb6442d477184b80ea314024a6f0672a27deb962993ee3bffa123170bb00abb3e888f2b52620a80a254b5b42b6f28a3d4464c8c556454689e4f94ef5a36953c6cf055973f4bf458642572b549ac9b45c3e4cc4ae4e4098caf645fa92e52dafcad5d4ee193ad05b18655796c51b2d9214a52ecbf7e01c083de8f9091586b3be16f74f1a788f70973718481a377d352cd5f68727feb02bb59c8cd0d26c03b60f861a90939c2e0c69e70da32f94b224d2bccf8c9ecf5a9869ad6ceb57a6baa114d7cedce9a7eeebfc17764dde97c8e7b10da4a9b474d83b4894f89dc4c67ec646ecfac7996812d16e64284b07a46b41e154060b7a6b85440aabc5050bb6f7d9a37fc8d8e3ae2c99d6ff91c12e54dfe6f235ca9dfea3183fa715bbc4310b34b331ebbd3098f86a98f19faf7b78f10a0b6f22e4d3e67f86a2341bcd35cc0db8032bd4a93ee0fca61cbcbcfe76c4d56ac721aabd2e160c3a73d61949ae6e4539f9af5183bf9098a28d3c35e37cd326bcae103e207cc398b1c13b78247bafbc8b4a134e6de1a6bd8704183c28685daf080b2925234d947993919bedb4ecea7859847 +P = e85214117d18f503a8cf5ec094257889cbc5da3a6c41d6aaac8d85a81b7cdb40af6a841d22053e49c1cf0adceae750c19fe14bf43b18ef13f2ab47782bdc433ad904dbcc3f466297d8030aa9c79299c999530002f76a54dd1f889e40a575c07d400f397b9c8c950406d11e884de361e4c91fca7bdd36c0804327dee3fdc736c93e0fb250eed1b2ee2b8847d37f97dbd5135c823deb978060682773e776d8afc190fd98400c64ab8be7f86f537efc7055d4fb5301163810b78bffe75fc9cd604df9500e3ec6292bc1e9871a3c72bbfb13db1a363c6500320929ccdbbf2ab842742f8bd6715544923f0388de66038cb811d8461c28da29a01e728485aaf8380696553ee1c9447ff91b4a243cd9b1d080d69a154995d387fafc472d265aea902f1dc3667c7b094cdf570b4929735c30b16276783caabaa60e4d881502d4380892f1d48eeea7eb4c48817b0ee5fdf34ae3f8aaa4004a56b211c778d1aae78b52d1d80c514ba01ca735ac212663f7d13790a688550546059ca99c46820eba3c8e9e45d6256b1ffa5df5333ce49a3ee245673ebfc20ff806882e732bf8fdf3f713c7bc5131f7dd944d36a3b266177c965b9ed486a10433be0d24e00b2edad85f788d3a4877bbe318c953b169bbe6bf6fc6c9b08b54872a2bc45226cd6935661aa543d8eb4aec972128317e372f025cc090fdf702e6f76337ac2328579bf7529609e8a0 COUNT = 69 -K = 2d4c70f5c2501026d06757451199b7b6b740f6cad6b9131b -C = cae6d45b172058776eb1fe11e89fe4e7f7cf20711a39069147d0449f79368836c705e63255af1badfbe7f642eafe70091d215895f725c5d58aa97051b4cda27a5337d9562d233e791a5ba1f649c8a18d0d48fbac7463143d2f0343bcf12f8a12e74c523d03adc5943cd39f349987fc63 -P = 47efe905d9e2f9fef0e84116ef1e734c55f037e966cd212da18249e59b56f77a8bd06dbfbcf738afb0f07f65d1bc0107ce93f2d8f9af88459c1b91e61b8221fc6f909b5d7c50f1ca7033f45361f1f809e0d5dad1571e452fd778635b4ab940f55674589d17 +K = 1568fb28df532b8b583905a98e1fb1ce74b71d00d360e80e +C = 90fa1d8b63e1f3a8cb98b09307858a9fde29845d0e3d39eae97f8bce0254981141d56651d562cb0a93c142b7e89512f52e626aea147929b312499390c8057d6e97aa036aefe7a60dfcf6672542e8374d228099e9bab209ca8214b6a87a3e0872d549be0adf6e65a5f15a859b761e325865a3baefcabd4439ed96d41683d223f636bdbf3ece1da1b692b1807c9aa918f55f6f9f2f7174ab6a6bbcdfde86b84f7de7537203cd49381764f68316ea72dd98feb4b9cae730f4a746660dded19cc778d3bdcba83bc04ed862b322d57c56ec6f1282189f63be4b47ad0ca17b3e990e11ecd68b137f7fe12fc655bf7e3a75cf5eee32c90b2721d615ca2b0a93d1d30a14782dcafe358b879f1fa3afb5bb9805afae93abb7035bddc95390beb6e3d33ebb5bcb9cbe4121cf142010056e1719a5a4a95996f387dc0b609a3912faf389d39322875f32cdfbaf16548a13479e00f70b68ce41eb06dbfec11c2cde617e35b78e1ea7cf5587aee9ed169705ee1eb46c79060adf905b099d8acda378a053732d163522b2a61e348b55bccc66910ee803bf4cbb43a1eeaac2d760372166020f8496f10b49a19f3b2c8a677f64c69e8fd04c1c8035cba874c60edfd151e75a58efd8b00f8634e9b07fc3c19138d0dca90b9b4a5ce36fc96a571af48e196013d1470058a3a1c15d39bd53b6fbacc95adcdbd764ba11e47fc3ea3e08c11ae591f375b783de695f1afbb172 +P = 8b56aff2d78c8a68cd788b65c5360b55f1142319d9d6156351757da58ed300a5c2e0480db5b45d92244ce2a5860281226c2d5d38b3efd37dff3d56e207113df68ef0377d3af68b235cda0896718d62f30fd81c8d459c3a8ecc9a1cc35a51b05e628ae7991cbc34ce358ca99f166ab29020dc52b41a957722c7f5cb10dd714feb81f7b81e16f2c2579dd3b22ca1a1437ee752802806dc701a1c8179498dceda7d0008cdca55c7ef07953066d55e226ee2f26f6bcd01487e3dc718f91ddcae822b106796bea5985b8bb76423d6e72b02cd383ff9edf6ac993e8185a765bace7ac523224a09dcc1678fff419971e5ec451a47bbbd0804a75ecc7cec1982f1da03d3153d518d801dce46d1a58f65666522073718d6a7f7b06f4873becfadf6bf721b87304ee5b71210f42699abfe4d169c567c2d3f1d8c07c686fcc7c02bae235fd17a8574313994f95783b6d7bdc6800f9330aaf0b6c24c424dbda5f5eb13457a0e97b548e9893f84aca1c69871214d95e9706dc5e79c58f5ddd5e2191dc6bfe8c169f6aa0cda0b9cfff67e81f456890a6ae4da82bf29e55829aba6d73b35c29d9818eec31c275b49f6650bfafafaad6ec59b1a0ac251b2a0e446682ab1714924c8fc1aaca09936a4a98f41bacdd9cc749f227878b73593335f6f62d901ee0db8d6bcda9522096c503d247e61f056e35e65055366563e27fe33a0d9f4cd74e0b70d COUNT = 70 -K = 36d076cc0c22ca6f060c286a96b6bdb030fad7be26b89c6c -C = cb97370bf414505a8a20dfe4c5e8972d6319036093f070df4e5fa006d68380f799fe10af0f987b0796573b17e259a78dd625eab16e5b7985af06acb0a0548584c0ad27d5d2abb82760ef941097383b08351143bf6d774a2a6a919d138dc5d57cdaf15fe380034f794fe67a0bd7861d65 -FAIL +K = 1f15929df4894a29b76ab2390101dcd56293f24d117fa154 +C = c7064aa61e72556afcc94e3e5a9caef485d37bfadfa33599ba288b6e436f69b0fba7cfa9f73339b95ec50abead7f9d355e7f0190f1d267661e4683e25472a6bec328ea40d1507432863b0d925a388bd254ffceaa0467b99ec1f353679d3c7fecf92f7f5e6a1079f518fffe2d9d3204c4707ac3ed087298d468e30701d27bdb916f134a970e9a4cbbd498a1a74d110c29f0c2f02a3d1412d87840bcf08c1ce0bd8757904decd1095116c7f2635490d6c1bf544f15de68ca76176dfbefac12d05126cc2ad8fdfed605b6686550de92b18537f4ace5ca237b11da4538108dfb6b986bc2945ae283e8d649e087e17bb337b53ef149d5895363956d3c05d1747462de6378fea611388ce069a93d0181316ac06cc7e8eb8cb506e3d1a6f7cf915b24142b6c6b9ee4a1b0b8e6c19b7b2a5ee4e4ed6885c1095e506e92eb2bc6bbead7ec6d24faa8613e29c4ef87d94317f50edfd949478f648f4bdd3fd8b841877c9c6d4a0aae44ba83b848b6d11d9925c646b1b48933a1205688081d4ebc915803bd47aa2bd151ff10b1ad8e97caffcbf738db89fcbd8eca5d325a35a82e4eab7b2a918237de2f44ccdb9414e8f4603eed60c56df196d4af39b15ac9fe2262da4776e0591c8b6aea75dc361c6f869a233549cf39391462cf9263f552ce664878faadd5fdeb5bad423a12e13cd1945e4d978c65c3c863ebe60c676fefd68ef886408490720ae8672930ba1d +P = 8b3f48ed39c58cb2215df82288e5b3b2d78bdbdc0de40586b3379cb9e0dcba9b6cf36b262dc934c49fb4b46914498a931b4aeb3c1d32dd7f340cd768e831dee3e2df56f5a4ea4d88bd594883b3bed024aa4b350205af3497e2ff6a6ba9641f7f451e5a286ca5984e96f46b1d0e1b234c26875fe4bb57a12fd58ae351025a6b52a9ecf50d354d40c129cc6ec0de515f4355884fbe89b65cb3b20004e20dd9c60725ef3d37f090cd0f58247e9f2b1622ecec446774b88bfa9a3aa8dded181218096f6046041263445f844cc45a0deab0dcc23247659bcad7b4fcae75b96591fb6cb183e6e6ef0aa5412f1ec0d27b24247b9a1c303701e45253afc5102ff76ba7bda3bde7fd5fd7eb72fd92885d23354e4a94044add2bb266db4d0ec5181001d6256c59567e7bb3484607933988e30704f31bb1dbe5231c8e70ae15c67d4e9749a71887cb8c1aeb373f46a57e47cd50bfffb0bc49a6093ea08d4e6392b2069c886bd3d2fc6c290a7ae3e68f62071d0aefdf9e62a0160ef711e538c795a9078627c9dee5f1a1df6f0a3eeccb13f9e36795851be065e67e68521d8514d046cfdeb3fd2bd43c83de90b074fe08bcbac4196ebec0728df46e97458805829baf81792ef4622483ebddf01c7622510ccd60d7a833e06260928faca179c78fe69bb4e7ef11b16725350c4d3fd8e17378455bb29691a03ebc246412b87e331ccfb09482a05e COUNT = 71 -K = 47ac2e88e985c84285d6abbd8714233756a78a876827654a -C = f482f76da494ffcdb9975cde48bc8fcc623fe6b7076e55d717b61d380abcbc40291d51510b7a286eaf36a7dfd207ce39bd4bab03b47286e0ff5ee91c7e02d44d4f92a0b71ee9c4391882b0ffa98262aa04f74be205e6662208e87bd0be9f0735f8780208d6ae3bd42870ceb4cee95135 -P = a7ea4c92068f65a623dc9dc4128d3ff81219fab7e46531b114ca125aed05a2c1ff4dc341d99a4c9b7385fc793825934c0d3395a9010801837fe22f8172376d7581a9a2d02604846c6f958aba3bb46f082ed1ce1420008ac5fad5f373ee70db377b4e54a0c0 +K = 20c6721fd01dbc44da32f36f633e369b6d8de0fd7f5a5691 +C = 62a2d99ab3b7e0ac5b54331d8461b6d9a9c4a9194784fdf6b1b486599b61e1436fc515fdb601ce5d42c1c9609f27d9a5b506e51465958b2cfd73e012be3d9584ae5e5db054e06a033e8f38b260971d198afa5037da52cf44c947357dd6528c6d6b75291a4cebf138fe5f22518e602e3159b8be74ea265ecbd5025fa595a87501b73ad7fee482f7a93a7796b40d8f66c86f8f62f105aab3d1d1bf351a704326af5406dd74d0744bf89592abfb9f40ba231560e44e14ffee18a9e03513ce53822bfa69e4a0936ed862f5f648eaa5e600548df39ecc025db000ffcc5e6c3a9e018c65a944c512fd617a609ed8223574d14598b24623a6f652519c341a152e5fa1d9106ead0e384996771389c829a6216455466a4c9cdd19bb54015ff7e67cf192360893bd7b7e0ffcfdb423f73ed6ab585bb246d55379ba074fdfb6e0216d83de0fdbf736104c14028b666a75bbc9f4ba18632c0f54948080c8ec7da7ed9d6d60ca1f4f1067d0e37bd90387016832247fcd2b9cb7dc68ce6a4b04c913b965608daeb40c7ac7a8886567db7bb6436366907e019302423fe9b848963c13af5aafbe51338f207f68d64adc6a5351473db0910708da3715e60cf9aa5712773c426d5fb424c829d6d6440a28322d47d5be1a8c5835bbf762eae517199059bfaaac18813dbcfe1d7b65a4b691b912cf192866915e30962ff62b1766133a9b3b38d08388b3ceefade2816ce072 +P = f5b5f64f0d147f4eb988d09993d8ea187cdc89c73f39225a3403efba62b51f391a60b0772e960f4161bda72cd1db25d880dd2c7dd9e10f6d4a084e3a081c3d7ed0d6dc0a60e48b49e26e9f873e8de286191d2573b49a066de3604156e6ac67d1f7fbe425c00e3b52ff6aae1b0f5e6280c63a0270e2650b28d95be18dd58f71f87ed4ad6f155156ec40c95525d74748140a19493d0fab455d7c062ecff66b248db25d1203f97eaa0bec01e071cc8cbeebcd5cdb113b139799b34c8a28387275550fedf653a036ef332d6dea7dff446691cff3bf9403af823708278eaca5d0363872b5181b945f7363814445445826b1e6d8fc8a07d8eb915ea74c9631c41117c980ef5c1fc85687bd3f0774a285d4b83bcaeff32fe4c27699c55387b406b93d756f57b43bbb5c6f94600f69f6345fc752425e7db666078ec8abc5c3de7e35194ea322687990b63604438e7be12909e9fe66a1634091aa4969bbf9fd45aeae950773f2ea774bd30e304f91f3c1acf37e0ec0a61d29c91d1e66e4ac00ea5b0f8eb659aea6674264d3b744d3676e040d690ddaab187a0453004d52d504ec11c9d57372c21ab0a0db7893facbda99069cbc4678dda5650502ccbdbf8e78b952f6d42e647d0ef6b72b4dc42ea474924a718adbc14fcb96e360dc07243112e194b4478f10c6391477b5423ccae66fafe1a8714bd85574735ea7e2bd3b9b7c3a0b7506d4 COUNT = 72 -K = 28726b6559998fb7c190997804499ee875758fb631c724e3 -C = 6a1edede7cb35d477fdcf96a1082d076424bf9e6e0b81d7658f0af60f6bae7d15e190706dcc49e33964842b219ba8bd742ce84e7a5eb0171d68f982e471db72fb241c4f8317a63bc2cbff8a8fa346128b03c8fc0ee252b8783376991be98e45d0a6d7bd77b978cf11986780b288da652 -P = 65936e7be861d6ec90b8bfd4049ca515e2304fe35a1eda17fcf61356d9b0764a2c591f8657e928012e92ede4001d40c8445ee2772039834be9481033bcc91260015bcf0a6bf74c930b2d9fbcc1084e22e9f12370123c08baf912889e96c70655b64cea2e7a +K = a0d2c0803ab7bc8401b2c67f89781fffc6b2a4f9d1a12dac +C = 5ba88c625a93b60a053d221a580f9f9a16c1ef8f9d0b1240dee6153ce11af5d4bede362a114c96a0252796d411e608dfaa6ac0c9ace11413d05eedd4f1586f5db73e93aff7fc7436c473312515b7228e9c91ae868fcbb67e910939982df0a4cbbde28661ea84b6b750b769dbbf98b709a4304fa0a2c6a651ef43ecdb847c42250a086f2ef58a1adab31987a06dcfa478c291eaf782f67145682ba12a254ac9021f25a38ed10d4a49c2d4e3120560d78f8afa4f91ef59c4dbe3b7db0bd20ece410f3d551276e0dacb0e984f40188eb519e3d5db98a0f4140f21dd8342d6ec4a85d2b06bf4e130bc061da1592016289e3c1749301f360dc9beb12a4c3e6adc8859e6b12d81dcf1de1175909efdf72d450c2b5ab3d38ea3822d57ad7bee7333841400132b2e4e5f66155aca23ce024616c1f75151fbe4f2bfa68d549aaecf691bb92898a347ceb27c04cecde3baf0fb8eb8cb5794d538bb9836824a1a1334e3fbc134676b541b32ccd4ca466be33ae0c157fa276f99775401bfc6839d0db9988214fe9bd14b5f2c5a1bf4780e49649e3d9304d9ba2a89fa20681761fc3352358262aa4931dff5a8e44a61d76f49feaac8582ca3c2ca59a1c10ec249f50351db42d587df2e26dbc870143d13f66ec4d0f822844170313ceeceda1e9e7b44af3769d7e83f5d489cf4bec00a6b0949f34563a220e92a9b2560f28c70f0579b088b22d248fe41a34ce0ceb0 +P = 73e647301b187016aa876988d531468ff38d745cf0f4d794411079407aafa55f1b94aba8a6e4fd9411d64b50f06a728371da2d922afb6dbb2f607160d396a9e6b7fa847aa94cb5f3ed447f352229fdf07171a757e4adf73d4be5b071f8c9dc76f11ab34108169e9f8bdccc7c10e5a82df248dfa808d1c9b779d2c5ad2f64e90b0a2e7a6fe5ab6454d40c7985827dc4b80f317c24b022ac42bd2a8c7d0a0daf785c9b8e8078df5d248e1e9ab48094b4ed8548cd12fc2dd12f55f212f90ba59aa164bf268c2f8efbedd702692204b95ccf659a948b1b18ffb50a35874580b4e6466beac5c5315b36ecd3b0e1d2695e38c31d50a8010e97d9a52e3f1f10ce9e2eaeaf4b40551f81639af431ff13ca8db0e1962ec0652e6bba66fcf066ddda25acf1a187b48db9652f426548527da41609325d4519cf5e8e83b6c505ebb4ebeb348dfcffca60ea1c73c11cc17f1457dff60e5bfebe546d1bd7b4814f771f9678b0b0a5b349ebd7bfc4826a462afe751e121b9d9c5c5f59977b41ea4174667b5e6e09c46f40b57bc73ed590a03b127c4b52ed5cc510a5f76aa64df19addc02091b4e6a13aad97f670e3a5c1934cd251f101b40aceaf3c2d4c8093c46d9f866f541c48bbdd7f6c78473c192629d3ea354f22242a2850050d76deca73c8080c4ed354e38ee6aaae3e83cfa89d62475a10800fa9778cd64757cc4b88a867999162790e82 COUNT = 73 -K = c0ae5d3ac450ef4292e35af4e7a5e86cffaf716a9d005381 -C = 0563f62337c580219ef130dd751f52a2bd9d2d8b56978e81540bb8fcf8c0f5e7d538eb530106368f4716a0dd50175cb00f2eda6e09a145e818289707f4c692e02e5e3de4d7abf5c00e4832d3f6dfef1eed672373369c042e40bd941abf21c93a620beaf7059656d17b389e12aacf65db -P = 0a9dd3db3f78d15fc13d42b072916d9487d8ed5239c1e9c9eda84a9e358cba62f997cfbb46dcbc301ce3ec75f38a083cf93c56eb5019d84911c7042560616777c6b905feedba53f15154dcc1c9363b75dd5103848d895aedac686683288295d8fcb0dc90ea +K = 1659950e7f8e0451af772e801f58ee408a0c6d2b8f3ec739 +C = d1baf846659b8367d646e9b63dfcffd4da4e7b7664c490271f078c5f9c1584f1af1198bfd073270c4887bd25aca4efd81ef10c1086cb21a0ab3b4b30d5f83ba21d6f360a09730f3bb75189908ef61e71ad3f6cc92c927826173652cd4fe80b473ea63364e74788d5df5bd0c2ac481e66c0aeb33453d065115bdab810847363d073bd42d39993cc6d1cdb5979e914c978a176cd48bc16daa86d465332916dad667e9904e2cd33a17ef2abae2a337b19a44665a8faf6f2f9f2b96639fbf4e77181ada80e34e25526cff82e071f139669ae296b95f3bd8f6848cbee874341ec30b767d5e6d45250363185a8d4a40714743d79376c2bed1b9356a1998fd8e9282018e40180fcdca8a7cc5b790cd332f922c6abd106bbc8a7b458f03c3f34791f436e4ff9d2d03660c06cb95089ae11355b413f18c446eba735d40351c2fc23cc0b7b9a48612908ead5a7aeb24500f509e23421d3d240d4c940e0cbe9bcdb520fa86071176203582065d4e91f6c8226471137b7e7248dfcc9ec6e2563880e00c024756268577eff062b191b3255fbe73532e32a8fb68209e6b4f51faf93e2c42f717078e0f8b96bf7104891b5b450acf179f121d0db8e94f3c9fe7848cb039293380a72de06fe557d118e48d74fd5237ee71028c900e495182b74eb4c655728acc45b4cb13fb65e79594e55a3fad4f71ef8ead2521439f1eb2ff3c07bf01c168c62477895ef4f5ac533b3 +P = a3fc7bdeb27695e4c16171a7a01d17f0e1bf3e6f5696ab18a94a4166c1f66c6c195f627e46262d74e4fb790f971a8986d4f898a211de50c6147da6f5a9b46626e2689bb316036c3683c56a9ed3aa57ff2a35a933bd70c90718a98076ad224da9dbf3772fd1de772037f01ab8418c1b6c534067389b7ff203fd0109f60ae7edaf52a9bde0cab77cca8bfdbc0a19799a863da341b5a46fac9a84240762894bca2b853c5d36116ee00a2c12f61914ac6bf029f2f2b5da469df82abfef18d2406bc53fc55580b776fac85af0b2185d194cb8c0328908d31d118befd5bf59a2ebd284ba99a81a0b8e92922c31a249604c421ea80e2ad7a28f5f0244009cb6b4e6d3104c5e9dd08204a164d3e453d3605c3675222133b593d798027ba5269ca42dbcf8ec6b329d1b349cce6e53d038bcb27e8e26e7d524d09a15aa9ae9a412ba8606a7f4783232537c9b20df1bbd1480cdd151eb68934d79314908239ab56515ada81d00a5a93174f9be5acf60a099613464a1ca1a589a545611815016f1457b84da397da21d230308abd15d7b785e2dd93a8aa35f34ff8a81c1e318522cb1ce19ea72a4ae76c57ba730fed7e4256c27df38b4a39176a0ec3d93bf95a7a9461749353e0fd077b6e5dbfede1496016ab07f6254874875db1509f7d49d1766bce309f0719cd92fdbc7677923291c45f0c78570b91297a8fc4af7ff229fe929b945ce659f COUNT = 74 -K = b5546b6b901e227f00e175f368b7d7b871a4e153b3a4b340 -C = 1a331cc918ac18f15308f1967e39e90960adf18d2a637edd6b0c493ec961f79f6265509e4b06cd676c1731b27244ddb3f9e18175c2ef6587f3d6cef19101fada39f31d7210246555cbc1a3a5c2b8cce1ebdfde444dd3eb16416ddcec444eefd4b819e74aec8812c1abfd093130219187 -P = 1c833c94c82e551c568caceceb5f78a1761a96e9352b5bbff6cd7d54a56ed13232ab8c508537aeac4622b5f6141419e33483555a8fcc360c132783aebc8b48e32c01c13478b933bce5213004088a385d7af4192240794b4fdeefa236d1732fdcd5ad9072f9 +K = ef77da8032af689f8f919960fcf02f2d77b04598842ba426 +C = 89fd363ff665942617bbd30e3f810e36104803335436e4758a179e982f91e374b42ae94a4721b90544bf616e9f43d2a65958afdd24e6ce2bc701eb2ebfd7e41ab5aec5d523b376840cf4e844eb9169afb334e0a47ef9886e3bcc0a2d621172c54376ae13e535b0a2124a0208f07161351c1d2b00dd4222327d078ce96418ac1dec0115b1b807e0aa3a32dc383d8d3d8717f65bedcc526155b7385c255ac0f4e18e1fd59f6b8389a4cdd0dab1282d296f347cdb33b3279247290f35098b563d92cd0711fee5b25135351d993d42206f9b384d8797b3e53df563aff054ce312056cc0e03d0d947f5a40dc62fda9dae071b327b7d106651e054fc2315f35d293fc7810330467e701d03893c524fb6426a681f77581c54a96312087fc0825a51c2ecc6bebb939a150fb554f42ecf3b9a23fd05a5b84e1be1922a5644aa6335655b2d68a2a1288f8b7d7213f28bda458032b97f5796612d58833929125e89e9cd7c15caf9db31f6eeab02e5f7c0cf3d25115e860636057141ec29de19ab28d9aa34a07c0fdbebe140fa7fef6d63074874c00a7f445bd9834281f649a5e1e1f6a4b762e0c9411ee207973c9efe4c6c7010e857c5423a080acd6ba414a6b23202723f6fd1007bb3e3e4b5cb0423cebf3bca138a27a6d146102f433055953ab2c8a0c4097422eaefc74e9d0faa834065081cbd9627361b39da0e3e4110eae2bada42419fa92ae11392f384ec +FAIL COUNT = 75 -K = 75abc6f42ec77fa7abe625f35324ec8d5c90d491e0885d95 -C = 98865075e927c063b5c18a95895e43bc6583b665e432b6d1fe47428211a761857fea589a3ee7bf1b3845658fee48e5e5147ef44a7bb3a76404067d52c4845ed5a1d19b5dca6c5dafb2518c0e69272b40a93ff9963ca6b3951b76ebd9eeef00e907800d333f167b3d24063abde1ec95ad -FAIL +K = 3cf778e0afc8fe409980170c0a78d8544aa1504447e588f4 +C = 001a0d5ab41724957be67c1f391ea70899e5361944cda02b0b30e1cbaaff49816365246d36a9a5ec07afc60a9aa77fe63366613b728a528993d3a6a1e2204e878598233ebbedd2cd521bdb2072424f2ff26001c09805a79dc1d310042079f2f6f8a1b5c494c0d916efd4f241b780153cea3c20df6f2a0e48ef8693505be900b554007943ddaf1d02e68d67d7b2c0f0b816c65c5b4e8240533b5ab59ee36a70ffc9f4a958282c987a9a724a4d49f08c2ddefae18367c1b8611d308d62f9ea5c950d18b42c3ff79b6954bfa6658e1c7d7af4cf8b687561c5a39968866c2ed949bd651fff847247ce53cfab1f5802c95bd3d29e1b3d6ba84d78c5d2eb49bb6782f5f48704e37fa2ed32d442d00deee622213efac62d8809aecb3c20f48dc76845ab52c7f033b2f8eb92134d17e1b6702348bc5e4f6d0a822216c8cceffe44bcd2a1327c1e7feefd7036450a731077d73080328b84672783976c0efdd82f31d090ef7c8ec08279617cbf53a5dc2e5125cf92f90c1996022b5b7b48be9d74be0203e6a3f70121f37e9fd485d204245fdfa8a819107110cf54e60dc48f05ca5ebc60bdd11dfabb43f7803711dee98bf557d0b217f04ed91d896b2ad1621ddc30e6e236ef17bc3cab4191b7952e7fd27673cd154a213fccf6d3b5d3a4775187872d3199cd42240dbe8986778a24d7403fc8214a8ea80194dec829b9892d4b156dfe38200d037c693c32636a +P = 1d973317ce99bcf60bdd7d2633d99e484e44b6a013413c9a63474d4fd40c266d2a3d52924315ce7d6f2b1118cddea2a6e0816e7f8f403f515a2a11145a8ccecf919c317214c72f2b119ca694436cc458b780f0ff3aafdf34c107349338a2485ea2be7ecfdbc9d9cc88099ab7425e2a472ff24a3a851cd3923cac901125fa1780aaa07db80bb7d94f6f02dd44aec4507d9d16b29ffca39669cd6bb0382e973b58b7361a43b4e5d18f0096dc81bf2561790d99b4620d0778b57c75be5eb437c358b4b04385ff9fb75f9ada9d2c98bc26e0b765f8e05067f61ba29f93f0a19ecf57718b9d94addb7b8bfb0e102d83fb6b8b7865459f0169af24694dddb8fe387f6ca6f519a262ac0f147ae91f6b750683a4d10a5a13853187bf301896503d6f3a3a8d32b912d88107814aafa38844b8d8933a3de2cf353f067942ff41ff6718c1f5b437b26907fc55bf6ebf67d41d03cd1a261f62234cc7ed5ecc201d9b9025485b44c7063203062a2b6dc88ce428ad89e0c29e9d3a35cebdfca6bab7e1a726f093caf115cb97bb26a4f00752402b6678f56fc1861f1049f03bf0f2057e9b058b410eddfeb06a220facee7a2018dc9306d2064a95c1e9d4fb948e39d7352ac765d148c050bb9059b0f7ca99e46dff559613fbc103afd381172e90d60754d7f9e23bc67e13f1783e353f8b0cc9235c6c1d9229ee338ffc99445a43cda94d102ff300 COUNT = 76 -K = 1831b0e92b58fb736db938f5c8162317231c1984f1840109 -C = e3e37a9e0791d24337b1f50dfe3e7659a70fadbd28c273c2448a5b59dfeb9664f090eb0b0cbf9b906b794b7c8e6352d7458f1e36b340e91412c9079d5c9c30d93a63794d342bda690598582d00c5d60b5fbe02cef738e5a686601fdb7f78b125240d0bccf16d49de7ad2946653f2ac65 -P = 54bbaae429aad5efcac9448966d9bf3530e1858a9d06a6ff7c6dd5320c9ecb291094fd3272162cad82c35514bd4d47f5fd8294459805e34e26ea9887608f89ade790520d4fe15db2bc4bf5e447ab5e86e7a94ea1e8f8c47c63d702aea6e6c37b3f630af24f +K = aef99518e6a9712d1e2918f39b9a6b6ca1f9ea858c286c04 +C = 20fee9ec6f569b728a01ba2c463a9e6bd813f425230bd7e03a92dc30c8c658de27c0b91551f16715f39514e111601693d72f791ac71b416663d4423c1ab6d884f5a4719348f971bc36b93c4e49e372640776535610c3f643bd75d3fba5547ca99c49dfca418b3615d4788f81add59e88fd16cf80aaa4e963d50f18e23405d41b6a1b8a7b88e60fe1b5930fa27a2931dad08c5ce7747a7563327c3601fe5e0de39a8d2382b01f583e4039a6d25ebd64a68df92479790927840b1bfd9a3de32bafbf7283da2d3801ced9d68ca53bda64447e50fd0055c32ea69af5ddbdbc2b0875f44c6f51acf750ddfcda3ecf94246b2b13921dc791503fc104e51c992b0823695706f4421b13e8367fb90bea2d02998fe129e2df6c3f68de38216837506fc38215388c30afe66c0c90111a50a4b4c30037c44ee70fd82698d3a51f915b8b1e606b69ff0bb1d71131abe3d844f27132a838270fac6c0c5df9d9867f7b535dbab26946526f116e87f0c3780dc2f643de6cfaed9cc5b962c83627c1b674b3322679d6cd27253678c981fa9bb1f5ed657e8f65dc129f15909009f9c5f2ea4a2037dee63781166c7acea849cae72a4d33082a20b89cd7849585a959784f07f1c558632883453fb6913e428205b3b4cc07e4518266582de9fc2a8faddce1f9044020070377f5610ed5e9fc7f061ecdc9738c106e8bec900084bd77786eae89eeb8a688714c278033368e60 +P = 3b368802e503d9856e1941478753606f8aced4713d4234d60298bc66334294c45cc123bb338015f33177107cd42d106a6b88258d52a0c203450395feeccc824b7a4658d3b13afb374863c110b846350087e1d8bb5e47a7dc6202f558642aff92cbee8c7e5ea0d71ae63558dec3ac7908cf984fd0d3ae9c5ded9c46a4cc46d8431ebdf7e8a640d4adab55eac946fe5dca0a1784f4bba8c9a28df46347bf77cdee8b9b2c21bb896cd9185233a3accd2ca69a6392a669146862ecef7305d788c2f4f781af731cd50b9bee00f5a4d2f952bc4370b606a8382cde79c4c9eabce08919abec558386f419f3d830ef0a9ad3ad68b8154dd93e6de65bd0714106d0c2a8fd6a66216a9e8b7a71178202aef51776715e1d1d3e211cddcdb0ecfb9dbd8aef4a7b7a36e6e3b8cd40e08516866570ee2fc364553447212b94824752ebf11dc18d353f70e9f2c7f16d502cd2aba03838094e6538a54b75bcb17448e5684516f0ea53ea93d6af0c0afab94c72b21f1032f2ca87e23deb6dc81033c5ab87f98abf364678c1f10a6eee57a41e3a841f5a228d07339fde80b953ba14d18fedd65922e8f710d670ab197579c1b34edca8b1dbb0db6f97a473f1771d1d43d26cda079b614cce10ae8739334027e2126481307e11052939205a4f3b66de473249f60cc07989bfb6f55b27486771d638529738800b1c742a1a38827a17a3f7824eea900cb4 COUNT = 77 -K = cfc6ae1aaa7591ee2db28696f8ad2a4b8242eb289f8a1f1c -C = 14b6aecbcc532d9cd5abcedcbc031ed2c62131928d56ea3b7e328ede50c513c1e948316464b360f175d11354b96b6678cee28d4238822199f6233ecd6f2a9b7221860595ed060558da6373f1088fedf47bdd41416fb800d637356837926b4ca748b420cba078fb15a4e9304d7a6a6879 -P = 1f213931287a97620af2d21741cf7f107116a1a544812592c32967284d1547216f98be69110f270acc6cdf4ee46d298285c68c49be8e1f65e832d27f1cb7811ce05bca1162a4dd2020bbeea603027c17166f7a2df834c67ca803334b689bd68a4042abd5b4 +K = 916aa48eb7eadb60a3defa3032664debb00c53437a2524e3 +C = 2182dfefe69c8e5d0bde2d263d84f17f42bef46cf920d1b5c7c8691539da37d348bdb6d3007f54fbb00ad2aa58a010e8a48ff18d27ac891c1d724391d74d09be7c85fc14c0681aa95de9ebaaa17965e4dfbda0588081b99597a0a16f4d646c64fbce4c4390ce95eb8f9fa403350c36a0091bf472cbc5fa454848f4d9fb07cfe5865f6ae975b3436bca33d50ea4bafaf0bcef7c06a0a239ce29475cbe9c94d5cd7bde7ee0673225e77810cca44ac4631a081be9bbbecbf951dfc73ab3fd2ca4f05408bbda9761d57ad428fd27a5348c3b13baebcf11d5dc938712028dc6c456c4f9edcc3b4d3b5fb010519da236dd544e9e3e39c38eb719760c9d70ae1b5486bb6b110ee5804428f220cdf37fe1616e8be3d12efbe244a3cdc3ce3b57fdea0e43014d568f9cabc59c7ef2841189c2018122d61717d793aad25d98a5b4facc9fcffdb695b7e58e783151c6368e61e408617b7f30b80e10594b0dbb3660e54a6b810f93e28948e93a88ce6154f314a06596a89675af9b0befdc5cb09f0fd83e7c02b4881ae9766d5bd561e7b816075f33639b80b53e9ef33667802243eb362659c1da91d484d24fa68282eb525ff3cb306e5e12c826f5215fc78882cda9742613b34e2e94dd55dedef493016bb42a4a823a8fccbb138ec320bda6bd07217a7c34a455d858bfb9a323101b9f753bacea6d322a505e7dc26cfdb5a7ef0a5f140da91c43a56a09d9333868 +P = d85efeea1a0a47b63acf69a773c885b7b025400bab112730aab982e86663a2474a061445075c366ffc1b0327139b50b402c8f0ebfb86ba59188cfb85fc67f0188442a9cd2536f4e7174f468ecfa00ed85cbf61aee5031a7afa1fdfa470be18c2496a702c281efe3947c38eac4f584fffa243b2d1d38268c7d5274d06c3a1c1459c9aabb9a0a3cd846162be3b76a31a1df955ef82feed50dc9a0f288b7c578743c6d4a7a6fda44080b135f37108074f47f0ce3490b5b30248fae116fa90db1756579027327d4656f2d09901a6f9022643a91972194c6ee1142c78d315e33978764d99dd4b77ebec61ff7f1890ae6aa4449c799a0c3188854f6f2ca606d5d35df12b976602a0713b9ff17fb0e67ddc5051974b962b34ceaff110e4bd6e3e9ddcc287a70ac63ea100d104dc03e0b2be7fd6b47134bfd982e8217f3213038f0a164546b896149e400fb0ee356128671253d943c0c4881da4511d4992f629b1967cb7df8d62da2bfeedac31633c2d1a2f3df6ce81896670dc2d51bdc474e8b9aef447c90e3d3890d9637ed66612e59f50ad643c7cc6feaf2c6394a33e6371321ff2d3ef172e969b09ee75122ddd42f782e85f3aa5447c4de7ffb789b8ba298db70397877d6517bf41b1122f1500c8325b4c64ff9b36419e965d1100060d1d050c21ed664d5e205f8dae12f35a89a1c7646aefdb8f7fefd1d08daa1fbdfa2cee402990 COUNT = 78 -K = 7167c5decce304abc282c8ff0538b4951bc0d48bc63d47c1 -C = 685ef745e0e0b78c1aa7f824e4ca6d6ceb83fe42203deba9e422ffa6b79daac35f83f8cdc42207aebe5ed18bb1f8076d168fa95ce151d1fdb74fc9580b6284e05d6ee4a518d2a93b6f5afb39d1d3fb0d72f5f1c8d0eedf3f83ab555b9a3788935672637f68e64ce25b0b9345832337e5 -P = 30f9b58fc3a09b4da91c0e3594842b299b54628becd39b48bbd1d2a1492cd2d7cbf8ed1e1a3249fb41d6b566675846ea3ad4418176db566496e7f48d00e86c8ce27ececb6119fa4340eeba54b09ff9daeb4f2d804f19ae8eb02c0b44f9a0e337a3f64a3260 +K = 48f45ca6b284e7dc7cac2bd10cdeb026c4acdae616908d37 +C = 6319a9b137f46c7b4c11dccb86f9506b9bda1cf846d004a796350549f8aa5ab038dda625218e7b38b9345ddde2e0be0312a2bec74a89a8a4ac9b40cdf77d3395b4367cabd8ca1d0858a15e1b8a47034b5af7c7e5d364c6a574f26c59b07448eea0d97cab074042cfa109c6c33ef4aa3950a3918a133a00d3de96a641e2fe76f06906f072054aa2d92c624bfde0590f11dedeadcacd5347061ce51aba0d0955723a8987986964b74b65e3bc53f0c9271a76f334226184fe9f3bceefc2d147c5c3cf5c2edc7daa183acfa3272be1c3493e703eeff612c7913f65302bd1ec17d5b55b8aa3923dde6c9e95556d972d10a5b767f3f8709135bc6f34cc1b5e0077f4e942cc5dcb3248bddfa49dace6612773fe1c57af6640b6b0b204da1105179c44761bf22568cbf3e7442e316309b69cd4fd2c5dcaedb7add9ec8e9f550e38bac1ae1455c91210d8d49812c69383cdca96c7ca68100a3ea046d64a811dd3a59aa50cc2f412c198aa67a44205cc431a4904de51589534060bf41bd8bfb3f89f9d671e511098476e52fad69cc5cdc6339947561831e2b6adc1c8d0a8a918d4b2251745632a38607c571a0ce5b6dd83385a2e312f28cf47b0b185edefd03732c5e40120b754d356d99e24913032fba7c60e7560bb0ae57346dea23cb6d689a7808eea97493b2bc43ead0bfcccb1ecba38aa7e6fc968a5889880d43671f7392997d9651b2b40f32f4609f045 +FAIL COUNT = 79 -K = b6a9e67707bc17f8a5cb7d2a84d7ce8a1d35898e174098bc -C = 90a3515526d9bc57e07abf86e7d72cff70eebc269e2eade12c1dd37b74886ecea96cc456082c2808cc6c420516c60469af1cd6dc591dafe0299097bbae3f61ea3e3a5f3ed002e709ca32c7a01033903411d490a6d357218934311798cc37453a242e01066beef4df1e000f46eec8c498 -P = 877f3d9233fd700829efabd4c4fb2c47a1a26c15ee435652ce9b303e85b372bc6009ad68d028ff203909a92fc786a1c633a057fc9d1cbcaca44d59519ab3020feaf572cdaae37c7c9c751a3d8eaad3471bd8788f4b9a0d22d2fa4977d17bf9c9b6f50a99e4 +K = 60fa412c0de9c741fc2f8e62ed6ed9ab8a1f796fa657efcd +C = 814e3a6d0ddf8b331eb140a76e65b2fad75e60e07bdb2612373045481a796c90f90435998457f32fd81373644f87751a08d7533eb4071f7092e7a6c203aefbabfddf94603b671e821e607bc4bce5e1053fd18c713935c7e3fd7f59bedf2938a457cbf5d90ebf0f75e529d84759d2491aad46d80a00e5d92b282fcc8cfae9fa4311cc2ef604e13bb4f4e63c2a96778fe4bf5e209a0f828ba481ecf2356c1ea3d03cecc0bb17e8215801959883c5cb3aae9a7c8218c0646bbbecbf2dc1c2fc35226e1acfbae52a26defc70d1b70d398d42ae8c91ad39b0e608718d7d63fbba3ff12d4e7361188eab74406302ae32ab60e5a33b226654e9e99df83e0400caa4841e94251d875c569852266776dda56cf9cc581c529de9b5cae035748eadbc8a064c4f4007240ea110d949b908b5415f02110e64b6cf09d5723848aebdc1c5f1936e05b02ec7b27d9770369920e86366040ebd270ed13c427201b5a12bece9ca5719fd8e2a944e949ba03aa4c73bd248a8786a89ed836780e4a882ffa26a49be2847860aec7cc73f632213ba2d82b62afbc8197ac1d4e10559e657f8d0c107a6ea51b9080432fd9f741b49aa75579ee7fa9cdc9d98bac6b2b84c7a253c2b3cd7caa29cfa0533a0d8833ff78334148f344809d48a8c64d9c3a34af137019191d2a769c7f2c557e734ed1b5c17fdc541d15b930115f9f906bd4812edc912ca21628e100e8297aad99857a0 +P = 7b0cd8c128286aaba6935193c8c8f16b9d7ad9d77d09a6c6b6e468fc3f63356df9c5b78337f07d65cfa793d5c2a9c097eefaad3076d70adcf6523d666cc482260db8d7f5b02656eaa9d14c07fc83a5ff01c4ede264ffd2dffef6918e1a840012ecd5350e34ca0b49afdb185716018c5ba3ed8080f749038369373dbc02407fd2cd7cb2333c109a9dc1d27bad9c6de3668f709cc3c56c88bcfa0414c8967490fd0ead5174e90e8a10bb6e48705ccdac46b8ac025a030a8cdf355fa49a485750bc47c8a5038750e3cba0131f1d37fab8293242347e8a84ed75cf911724f8a16311234c6ac5a50b64349e14739e01749c353d3ef261c9c6b7dd88fbf4539452620f7931cd5d3f453d6bf33d22decceca138acc7336893557b416d1ea4f304c8a5476baf277c2c6a01f0a996ee595f75e5ee24e3222773705d183239addb2be5133b15afe2f77a3ae0a6b63f84664d8c23fc3764150dd1ebc56554b956bdfc8c28f72ab3e15e10ef4ac5b16e4e1fb6c1b6d1fe389d0c0135112d10f85ac05c5ba93a97f5243b0ecfb01a742390da94ab4bd8f86b0386d191208df8254444975ca4238bc92208d76449479eee7e5b94d3f135ed1adb5ae9092ebc0fee51316ebd7b880aa1be779b0120b419fc3797f6fe59836afda5cd542e449455b88c2b96dd36c1aa97f2f585db414f72368ec8273a16388d5a4b81535ff643c714f852d6e99e40 COUNT = 80 -K = 881243ecf40af65a3da2b2525570616d662cdbbaac1a2834 -C = 514b7223c3cba31f820224b4fe15822ea297d5e27c28631b5d31b6c72ebb7dea46728cc0917b1d278b8571870f002d44c5f3b5012c933615bc15f9dcae51430cabd2f7a3c4183b49cd6f49210e3c5ac80c8f37284d928221c9e7dfdc9744155b32e5e0f25f866a14bc64bc979b994bfd -P = 47318475001b6b44f7d99bba6248ed35fd0e6669840225adf7f4da32043eec036d44b73d4e9cf45476270bb67f6830443438d3b48a6f1a1f3e3c9c2636a0e8666806289eaa4880fc640ab32668cec2852e617c4676121368046fff74cfa022788b7f6778e9 +K = 108160c5cfcf44555428f2101025c2fd04e54d6e2647c911 +C = 66cd365429c570e183dca1a5fc63d1cc34b66d6826cbd74b1129b5def7168210d06e33b5e6dade13d7efbb0c64c4f1c7052b42656ae5cda5a89051f6f6c8f9c70af1de82622db2b726a31b5994f29baa5ff558a85e2c203817219bfc2ca3d4cfcd853be9b6d127eb7a3cd4c34f67c451874845e329ea34cd41bd8875b3dbaf393a02ff946c1adc8ac17e12b781311c52b183a28d2435e80a7be4ba0b46476c188be10817abcbfa0ff76b7fc3e88c850bb26853b366c860c496383de72022ff3c8cc0f5f70816bbfd9a82a13d07c583cdfadd0960914023006a0512bd1c076dcc4079370e08b07defb93f89ad4d8a51f4618b14f15afca9f112e4d605aef56b5636f774484db6ef1e93993753dfe5545f1842567390aee84060eeb1cd196db1ae2768fdf6e345b460f892fc16614be28169868be9ce5d19282816576e407feeafc471a35bf91daa2ce03e661374c6595f33ad2a0565a036b760bcbe0176b0d15c8491f55750a44f3137bc4d1e3c938a6fa2a9938ee87d0c3a7aef51e8fe816bb9a32b4c893c0a889a615cc8b5a7d65f9a21945cd3d58cc4442326c327f153353b18b7d8de5ff2b6b7c8678fc33e66790d214ef55edac437a416b741d4c75f8425a99c0944b587a3b4c6d5e249c2ce7b44513b315968ecec7a6a5eb2e6cb44fd5712071f1f6b7ea29decca21fcde629afd4a78cec8fc1abb572b1ef9dbe02eea090846c67a6e00d3a6 +FAIL COUNT = 81 -K = 86ba5cf9136557dc2567c65c27a63366a5455ce7ac826336 -C = ac7471a41f955edeb12f39e53ede6cafda918b83818db64478b30a3751cc1dc759487870fdd53826362af33681f96ea1d1e1a9c4d46ebe4cee10ddbb69acc3a4d4808bc14e54b326761c35a7e3daacefd69fe9a7b3cece565714d69ef222e6480bf9a0d3483fb183573a7373298e6926 -P = 7438503237192d0debc383c481aa1c2981f7d94998add8bb2432d7d03b8a55c31f5c380f3e58f99b093c396d0a547540d749bb2c58e6a23b1867291cca525d28003061d769c417997d498d06f3ea5f3727665ee69e6bec06759aed82f61a3ba2aa29026476 +K = c529ffab1c033d9905e8132ed163b949e4fc001a98cfb90b +C = 15d347815885f83de77d56abcbcd727e70ed152426fd2a2966f29b09b18687c5bd5bf7cfd96724e719b3d6fddea85d6ed0fa9fefc20b760ea6747426290edf32446d15f7fed58a96043ff0f3ec103826b566a63483cc7593558cafe69349f01ecb7a3f5c64e3ef9803779260e108ea644fbb3c49667af6d5d004990c40c85116191341742e70ad22c8d615d8694fdde7150831d435151ed1c6d68a7ab193595d0a47629aeb9c0db30614deff9115dc4a3589a50061cbdf27c97f89e8887fc845ff86c770f6edac074919745c73f25bffe168793aca521aefeb81fceaea3e1688325edf543b5c09e0e81aa083f5080a24104e247d5d6e483b7cd1f719e1d7b0f68f088e8c6806440db9c71a393edbf233e48afe19c26e79e6677ae987e83c86452ef7ca2a819b45b72986163f8dd1d28dd9d090b5e49565147bdfa57607d9a950eccdcdd75c1d52879229ef31bd09675b7511a6716529b1deb87193875445133069dc97a48f842f03744304ca15e22c1f11eb05e546c5905dc4645f85af1d510a266fadd8429a1c9472ad3cd88a87dc2568a61a152e3e55233d40d13c0ced9f449f1ff5d5a54fe9b1abdda048ede6095821e74e272222b632795af634c5ae0beedf24a57dc6c538e84f5e398868d32bcc927d716489d0b80a226ed439e5d11f5aefcbc70847d48a5c99915c22c5ce702b7db0d93eee6c99842bb5159173f730a135fcdb104c8419c8 +P = edfebab9baf1e37fe5d7e16c3ae856ee6a159952fdf3e194ab036b31610fb796b70d96fbf5c632789628614177c2134a54a4adb5ae965c2e7925d467063ca65218f6a75988e904f38b3d26aec1dc15cd7ac28cf02816cdcb24da967fcbea0bd61a6d36fad9c72b380cfe2e743a3ff465426f55b77008f1e2462802d2ec979a3c24ed6777acce29db0ff895b04931e769fe3d33dd8ae8764d9df44ea533f58d5c7e7d1c4ed4b369c1771d846bbe994f78cbd0db2fad237715528679b71e4e72190729aaf90bff07eb78b1abb99b8df64d2eee9f1437e16a4303364f2122253d8061e6bf1e58025109b7588c8ebc9b58ee60c4a35e1485007539c63fe61bfb6003c3ca8b53f7df583c91cdddc14e9d0f3a1962a8936845b1b948c29c63072234822140cbf9bf57d43bc22f11221c1d2a50251ce6afddf797f7f5e88547e9ad3455290065601d25786779bc5afa0a783dad432c31fee512c5f157635381cefadc5605e8102f7e12937153d34f6be3d23f37e78c29435c4c03e25020493e0e4bea6c13118620cab6aa8478fb7b8532f83c8421a004704ed720f7ad81dfb79f4c1ea69fe4f7e938d0cb8432d3fe714e1a13abcbb6f8dea3f500688b251efb9b0594262ba23d594355b13a79e219781cd011dde3e04d11c261ec183872443284e4041e3efd3236e96ae4c73642156ee08b33d2b78595d65f50f003861422d36c7a2650 COUNT = 82 -K = 056a0ed6deff860a1e8bd834144797e52901635aa1609c60 -C = e34b5140233ce81cbb025749606a47c4a085a9b1f19c0f15f78dd0beec20944ab4191ece2c6266a44a4958545906709a01f1a458b701226b4e7a563605719812ff1e1196404f96868b470f5d2e568bd93399d97883eb0da406536599e82b4160c9d2cbb15da8ab7c12523ea9466bc9b7 -FAIL +K = 990a6edce1eda3f708b0b361108914d00abe901537cc7728 +C = aa9d9c33cf4d40eaad04d53b33dc1b6e089dda55e2329e00c0ebf878770f9bec793b82a682dd50ebabc8cb3ca7bcfc55e52048333414b6316f87b34cc93be0dc57990f4a0a85bdde05e544b1d5ebb34b031febc8bb27f203756830afde305b1e7344164bc1fca1f9774f9f37dee1679ed4cb341552c47cd048a6e4b46384bb0a2332835b38d727cd7526b05ab1c01652e031aeab063cc287e5ff267a1f1994083570d614a587c5bc3aa3471e3df46c44efc502fcd9d8ad3c0b35d3982f10ade6b53699d966a04d0652f0dbfc561e8c89ca6ebb02cfcc5b31f1b86ac323a3172d3edea2e35c90eade2991aee8836bcff6c052676a95d6344dcfbf2be69f97ba01f6d281abe2a52f7c989618031e2f3a29a497729b05f0134c537f52e4dc24de8bc15e084bacec2a70094e82e389c6fd22031b80a828737aa55f2f29c07e2854c089210d65204e2080c8ec6eb4a38f1a37ef536a29321ab230086d725c8c67518e2b665904f285b74c7a8106f1e9687772f5db218ba529ec3e1c7f88ab133034746ae79164a7b081ecef19e389f37a62dc3d0d03b92b80bc5ac21949f1464b1794bad663f33d89df5cedbbb84b52aca706387f4cecf4ddec91327cbda729a6504e57fdef72ea2f6fc7168be8a641528351c59718ee1bd6f3c9a2c4f598ca51276f7ef1839940acd08a1da3704f6422a2dcf46f1c3ef07b19348a707924484768ce7875e69fc9003614 +P = eb712a9b07f7f559cd0a92347e6876b274d354abbbd56f8e120651955dee2c7740b2f57016f4e9e6b1ca0392e19c3af23738880394381e8f128efd5b68345c17fdb73f30db44a01cc22540b8522d9e453e9c6bac1cabb58454329fd26ca6b427a80981cd6d64d01df942d235dac362cb865cda64b31e6d22d3b826e8dd13f1003d149cc90f33957823e58e9d56017af396e0381d5265942c075c81b34de982d36387a65583d1dd0c53b5c1dc14d3ccc9f037fcdcb801e0ff20640d06eda16bf8dd7e7e5e9bdfa273ec65f41696d85874b0d444d60ae1af5facba3008a76318ab23558843bf823e90b5ed71511ad9adbaf733b35ffaa1f19b569b28b141470e774bcefc020002742e0a5427a7794c92596983c2c75757d204bafa82046a90c4a96d7a6ba114dfa5260e62a23e87bab794c59cc28ab4bcfaccfa5a0f7d6032ff8ed24e74a9613b9d71257509a93339b162e0a20221ea3fe788330864bd7ff52fe9f1e763ecbbc43e2fa8ba1a06736fd9c5fe77dfa6cd47d155df0944c9d9603bdf72f6bc524831da6048d2847da757fabcb33244f4742915a88af3805ef6b06bd11cfe8aed6f59348066833a790a49f337fa51b2920056e0971e6f9e94206f8593329447c6db1e2d7f1b356b4b9ab044c95797d3954e659b98b8b592adce481906d7e96b4903dba5e40c6a3b2c55c2e4b6d1b733d1a7d484cb2df5ed3896c74f4f COUNT = 83 -K = c56cd5b8f9d1cf60bb6dfede99b2ac7f577c792df0bed8db -C = a0b6c8511636f8fb6b7b1980b73514e2a58ac821860316cc5c2144a3ec25cdb9c7e544774234c55472e3f091d59baa3af0788317debf4050c7001afc8e97239ea6ea2a528d092ac933048f03749d905ed32c2b1daa16322f6838b5a39de2e0d47ac8e3108ffccacfd662e5dffed79f65 -P = 9fc7c1bf022fb95d3128fd816a1d96138296572239ea130ab4405f4cf17624bfc7f25f85c82c514a3f4c8c70bc1f824dc5d9e2c6d121a4b894196fdce8a06d8820daa371b69c6663530b14cf203f0262ee6cb4f4a471a73be27dd86c0e80918d7bad4b0427 +K = 44d586fb9f1a6a3cca5b85114f531ea30059ee8f6f3ca2f1 +C = 9465dccbc3ac4878fd0f20a8271e63b61021715f8bfad491099c3f5d9505e937dbf362f6079bbd75e2310b801a0cf511911f497b3c86dac5ee2210eb001b53cb616e2df051803e4f88406a0999faa15df319fabef91228aab5493178fe9c5d26f0930200c0c4f8eaaca828e94191371145fc59a60371753d2283c0a71a5ee4df88bca77353913e86a8dcf02195aa0ccb997aee00b4006bac760b36efbfebc930685efb03c61e98f3cfecf651aa94f25497e24791b2e0eac41d09272f30dd235e97654cdc95995d789fab4ed1087302dd46cf1b1504727f596dc80bda02d9cb6336a89d023c060b68297dfc86e25fb7a29a87559cb93ab59dc7904280f29ad229f7b965e6da15a6baaf954daef9b8216b0fc536d42d832936dceb4f82b125fb80fbf938395fb82837403e9826213d56332b409c6699894f377757a8fa11097ced477a231406d3d2a1e8545c3aa06f226d2b6ed2dad779c03a74916320581f8df9f8efe02c564eba5f3bd2ff17ac436d0db6fbfc623559f49f788eaddb7fa52f2b1f6d1541cc7a9c67a3d8fa6c90a73df2a826ab7d48c018302ccd15171e34b0e34ee2c7089dfc60041485ff42df7c8b44b2c88f58c83ffd04a155e35c400d38e03267460685887a1398e51d51a3ffc0645a28ffe86b63af37d857d147a4cc514b7558114276a48047b0d82ada08f99b4b9721a35767cf9282f41449d6cd9d58fd2578a4a68d66e6ad +P = 4063711c3bdd2c871da6fa41d1c3e304e2c32e6783628ccf4caa5538b858d0ab64e8b08d18aa3465743d243fee0649a0a8c31d441b096211fe05f8d80176419cec6ba9fd878405ca123a5cc082b736187b757b1dec7faff91bf6e57efd6d7f6d0e2abfcdf51e6d242e43b92721fbe2501447ad15de06b0abf84ef60413a38c86634905bebe1eae3330b8552acc03aeb93ef4667bec24360cc8c2746e632c7342dc6bd3ab1e5c941cfe476fda7e09c14b7bef31c926282938c9cb8981229a522237935ce30db5c54ca189bcaaf792ae17504227bb5818c5f4b94f6f18c5080227cbbc47e3858be263fcabd223c9fc1f7553be4faf5d84266f07535c86bac41087ad876edca1f07cfff10c599f3ad1fc428b77b3b0a5b6c4176bc09cb4029b458390e0c018dc530b860238d4b04ab939c0cb9e1c0b4579ef0c65a56c316699074fc55858d0dc11448b49631600308e620d848c728a2df484841f4d75924f07fd872a93a09dde41b20d4ebb63a8982d4adc3c192669d67a2fa8e5ff0e6588198bb3056f84fa44b26b0d5d4f17a9c4f75f882c03573ca874bc9ff37b51b92f7b4ab31c9631e1d6080246dab03deb98d325c5c79bd88fdaabb872821a6080f66c64d15671b1ea28930137597f509d65fbd5552573ca6fa924c089d69a9aa06465033e6809e3e819fa1621a32be2eee9dd42a2c81cdf9e8c22fcad2ea65ad540020ff2 COUNT = 84 -K = fed30be1331cf4fd4e682f36b448a37918fa53c0d62f3e0e -C = 0c7b7054ec2b0103e4c2c3182eb970dd17719407fd4bcf8d9236df5e128760b401a05fda248161964f2b6dd774f7742fb1565918424409c490394db42dde40b49fd27893a085ce51849f5fc28443cb623e28460b8eff206fecad9d1880d1816ebc5cbaba4a6c6f4173cc7511ad71196f -P = dd16ee8df637ee5ceef223dfcc9325e8116ef79a0e3840b5ece0ed4df99204633fe335ed9f7a09affc98e6569c88fa676076548245f531b7a8501a2077d0f819100094845e9a71e2d60fa9cf1522b380c83edf175c290650135ba2e47cd16c8d3b24f45642 +K = 57a9161be0b7381faab04da643625da37c6896d5abfcb0c8 +C = 2a81937ba8187533997dcbd11894e3e6b4e6146c83563006bcee63c9f2e7fb20fa6394a3bbbd3db79e12e3493dcf3585b9aacfed1815bff4224c5dcd701a276e28fa8071a67212644c9d54140ea633d5906b73e4882b2916e5deec8aed9a4f238a4acc4e6d18bbefd3f4ab10a67c64b63c111e66060157e5eeb46003b825e95df6b1a63dbbf248d16ac649fd00d444e96f729156d602f9fb09d2c3456d79861a6c3e656cae4f44769e77cc4d0caffef43a75f96ba3e74a52e20f8b98a4a54a848d12914e0f16bbc1ef81224737bb17f45471cc0f6812e85037d763bdc4bb2d41574f3c192d808dfe441ff11dc78d01a51aba3db1f31dade526ede6eb1fbaa5ef2d94febca5ec4fc69b6b93927656211fd79ad132a52d8b3dd5803045d1c915f846f4337c498d98afacfd46b5c44b1213938b29352ca9b899b48a4457f417b70cca01e61450a36c4272d38138b9084441d739535455e1a5d7d1bfae5385ecd1a6c81a9058f20b96a0183f8085cc6a9daf63c6bd6ed27721de199cf5f6202c00b58f45d38676f82595d073c431414a0d4eab483a29f031ce9cd2a9ed24a5d01e445eae826d557ab31daf359856b3376cb233d069e246805d7556ae53c5fc6fd1e75b638bdc8a74692a100bb4b08a00b0937174d5bbc3c361d4cd247f24e03a4946e66ba73bf936a239df96da72601c87fce8905c9f77d1d6051525b56d5e3bb0477f9f26e039653358 +P = 8f602990eac0d5f4897945fca076aa39ce1a68a5751a3e1fcd8167a1128d980cc92039e27847f2ed6de1d4c693a35a1806cd7500e293e4eb42a0b7e3dfd59cfe7ad9af0cf90552372950b90bcf602c6dbbeec4189bc081a595e0dbd1d7b3cef018640c9f8fca8ad6924b8287dd2942bb381e823076c6b78d3f9f5f2058778c4dfe483ae087b3fa411ea723ab1e03f2f530b5240abbe7a7ebd4bcc71873e0e9d7a8739b1049a225ee4a71f61e4661a69e84cadb25c900f879b950b2657696501d1a7adc1766ff4d0aafe46fa3edcdf9f28bac3567748a91b2540ed41a7640f5aa45902b075c00215e3822459c8e4f2b3d08e9e5c4e3553b0f0b222171ba0d340ad8ba0be508d23cc3d97e61a2e24693dff532aa7549546650bc4755d0ac33a59b75275e1402f9257144d88a5c7ef57ac94696302c3e33f2300ccc1dd97084c5a722ae2d28dde851bfc7682caaf694f50026c8020f205a6fcd22e7e0e15c30fcb09dd9659ee379f26352613d66043e8f26c66db0d40bad1fb442808196513ccdf502a034459d1c669c974c023591460eb90fdfcf75bd0a44c72f5cabd7a3634da4c31bec1f0dc90359a3d689e3192b90e8659c9c4c7697cdc8167ef04e45aa54990142ec6aab2f26b01ff7f05a7eddee3ada5021183c45139786afe7c93a4976c57630ef1ce1c0ec90b9d197727d15ccc3527a902abc4bbc8656b0602faf2c24de COUNT = 85 -K = 0581de07b0e41bf7dc22cbbda9f8ad5471e0b145e40ee929 -C = 43aa2d7dff40f787af531204e8d30e6506a8e589e666820ed7df7a02d6a64fbc6edd6d0534989fbb57eec618a485abb73f826dec2b40bb09252120d5c6e0d1221e9d0fac42263166d4602313011fb4d96fb7c9f107b086037126e03b23f35475bcf390223e3533212266c0baf0143869 -P = aaaca09cafb7fb16e3223c56055b81373af668e3d743480ec1950521b7f97089b77f7d3e086069865d47e6fe35b3696085e599535c02aadd9353b33d3f68c60a9e4e99cbb2b158c1b56463d3af05d9d8d9bb84d868206828dcce3ba37f48e17f805fe5655a +K = c7709140739a7422f7d98a6e2d519859abdb0c83b0c90483 +C = aa1121d397974832be9368d476ff203b6e2a9f1f947495c9a278ef70da5cf362962901e06f25fc1b129c40948c86577917e2163201165e4a40346a04c10a0e62d83e6240a212674f4376b4aef2b5c4f2b9fe5b3194429dd26bef2abf7728f817ccd59a1d5faae55e4f701179bad769d71ef1c225b84f9ae9a28cfc869569f44d4b12f5c76cfaf73ed90bb662e49e06913d4d673aaab73c21dd6bfd9d70fe0588563f65ee509e257bfa3d3df027c1602992c53d887342ad744b335622ed9581cfe05d87746d4a01c1afceae75e1eb60df722bdf136dbea7120714872c39553aeec16a485611d7e1022bae2244cd563b16db8bd5addf8e2ff4147e250fb57346936d121685af19e960215dbd974a8a806b039cf68a2528beb465cdc8f23b496bdf5ac48b04b76daa83781a26b98cbe89d542f06cd86ed06e901cc9e2f42e40be33c9ec008c86d687eda065de91c2a742507f828e9a484454080c14cf7ee7e7a827b66bdfccac6071b832d5e22d2cbc8773e923dd41cca88c7784c3565da53ffdfeb31077028811ddf681c15e126d822f4330309d5a4faed15e345a15cfe1984fdc31d5cf6e23f8362cc125ccdca7d2733dcd159afaafc40fb96a8200e226d5566761716d2113d2d15123c218654c01d3675804cf4ea0a10e0579a931bd8d656256a3dbb62561f2375045d7a4e7662f02e136c8ea3bce865435dc2fb57a25faa7359b3d5ed9a6bba1e5 +FAIL COUNT = 86 -K = dfdaac37ca71a76cf3c22f7a4439862b33c374933f46337b -C = 0cbc0bbf9859e1fe80586505ef9ac64aa6e805a020c9a191ff3cb51fb5e8ab68f69901112e917a58923f951ca7db7327e283a70be3258a29a72d090a0aaa11cddc4e2ddf97a135773d9f094f95b6648b4a252d5289fe12b424f42e56718fe742745e783473b118ef01d805d46408bf66 -P = 475617c9caa4376a40f15dcc8a890e293c10e7659edb149c912107ca66d7f1ecd2f1dde37320585bf7bc25f80f79da6d1e2bd859221be2973e17e956cc3efbb6af6717d8efed988be43dc7f00feccaf35a03b997d5d65d8f374441e03f1dedb19ceb20fd60 +K = 8442791343233bf80862155aa316c509a09179409b7202f2 +C = 555d958b389f1408c4d6d01a64f962cc26c5a16570a904df2ffc9be722f73b539a877553e8879730ac66517fb6fd32c258299f24545f7f0243dfc5cc308d6bfd2c506509a84ee554ad34a120c25fd1e9c1b3c51cf62b1905e4adf1f4774cae0837425cf57fc665d4e68846d4d6dc20babf20312aea56d7eabaf89114936e9bbf5a232a156775261bc6b57cb878af8a944e727d99a7d41ce5981c30cdaefe4420807aca23a32ca93461f4be1fc62313e9de1a2cc7547352628df9d40ab02754bbc0b0f66734d29585aaad1e9ec9147bf7db53b8dc3ef960fcb9fea525781985298b69a04ad25325c49c15acd971427f9b14e2b5dbf6bc1bc3824a56d03e457fd5a7510f3a8497d195b93db016b45466a2680be5def73383e7d242a558f286c25eeb2ee05ff04dd6a73166e72e5c51241ad563a8e2287285da837575eb48075f5411fea420eb3daec59ccf1d89981da16e736d4b1a6122e0e74a4f55d6a768405a6a8ac476de8c5fafbb11fdc8c320f4825288f4b988628e614e6060ea70cdaf2a9b83c96f3878509591a6efe34dc35c2c990163b98212316ec04091cab19678be25eedc12a31fedd67ccf2311558e5a249b80ab2a8adc7f49927555a9bc0e730e97b4e333c394b73230198b132c6604822489d363bad304915485735c587d68e26dabee56b265978b367e3ddd79eab8ab54778dbeb365059d0f3054d171d38539e37bf4a4cb8a03a6 +P = a863c19d972a39c3ed790ea3934081123b94bce36b00cd9afb7630085a05041adb62bff62990ede63f850d8ee7e4830e2c9539a4e5a73ce2e03265b0f3dc42abe7429cdfe16ca16ecd1c353aa431312d14b5587eac1763e5a7ea85b3f87c035f71ae050ea373062460840b26fa35f6f5b2b0d7c3347d2b0e930ce04b24a8f3bc574561fef1c2bde4c18ac33d371b05136265a0f41f0a8fb80cc9591f31964d5f8dfd71fa3448d231a165e374de44f519fccb891beb637b4bddbbae98a77d18576c7c1f4abe6661760aef9539a02ac6166778213567644cf6f59b2ff6c7407c6c66b49409acdb40ff5b16ec33250cc127d64816bafa025245586023abbd6671bdba6964a098b74bd9deb5728fc677eb1dd52fae9eaa36a75a5aa27ae57d6c62251663de67501a51fe1154df82e24f709823fd46ac497bde048cf82169f0d0fe4f6c3a23378d98189d217bda3edddc50f06197825407039803c5849ff60ff3b2274a59585f43671959079e4b56621a9241ed2f0ddfb28cd5e917dfad2a0400fd684562f78f9a755c7afadeb8454e8bf38f6d3cb9f65a486ba870f28f8b1b3a652ef2315b13ad0bc306f5559ec55f152640e3f0129966e9e52bfcd72c4ff6b9a78d3c5a5c57a2848b38275e44a5d7acf3ae64ffae453f4c08e777bdaae2b09e811983999abe61dcb074d2f4c060cafa49995c7f81fd9a98f660e6ceaa548c43b005 COUNT = 87 -K = 60554d25b2238850f31e52be7f29fb10f73f34b793e73f48 -C = 909928d3b0d2a6d071b619199f5fd18de69f77de6aad5d20c6bde8d7d08b8793e4ec6eac985b1690a6ed31bdc834aeb81cf2da3fc4e9e753755414325e3d58d496b1c84e17d72d5f4222a8a1f02e7de62ab5236a29d437b4d1365e5ec743f0e4e17c3ce1e4fb6423209a1ec991f3a2e2 -FAIL +K = 4b383f471df195b908b97cdc11e202d76fd2d8cf9e390509 +C = 6f48d4caa45d0732df3fdcf5aa43e02caaeeca6710465e1eb5701e8eb84faf190b69c93727ecf49cf1df207e13a14e0405bcf6b2dd2a4b8a449cc8ae818b3b43de333f659e840120518d2ae841931f54b7317494ccb6ddf7e646759715739aba02b282e3db3742eedd20527aa8d991a57640860699b762bb254178b025df10b50f46f300fc5a8aa058741885c8b6107acfae747a3aa655a91bc02a46142471368fe93bbf4795ae2a68443d503667b8520202d9e543415aaa53317f4507de95f8c9608f7192e7eb91010c87927ce5f778f5619fb905ecea825aa3b6b035e37973a6e8d232cee10bcbbf314f7cc7b2cd7a170f0496d4f2dec057ac62c50f4e81a654912dd4cee8a4f7e9c3eef93ee7ef95294c416c2e8f84202a3cda32069dda81bf2bc7b8ca674a59badbb8a1a4491bcd9e29636dfd07af7ebf994524348896aa8777e3b2086de925b07eeb372536535f7e5d3cddd74c61807353bc3385f970b5803605ad6933fd0d3f71d2a13ae708d5abfa87acda3c323ad57f279d691cee0f605d1ad0d5f9f392e64c48bc49c4a3c74369f11fa8c9677baf64111bb6159037e8c214b106510e4a3a98dfb92ad2e191e98c0a2a2c85f8c67105dd20d91a70943d6652fbc72edd4aa502996e79baba963c288964df310e88a2cd4021d3c2894f0fa7f90a94cd6f266da0aaff02296623b8ed95c3559c16816f2364145df6373573cbf54aa67aa2e9 +P = 0f5e936ac71b56638b5b3655cd5a407f0134c7835db9de151286c87a34626eec2443af4f6ad67cf92bc74a5625fd83afde0c18383efdd32caffe411fbc3f24973fe8edb7093c3f2b60c925a61830610e8e6be3f8fe1682bd4776777619d1ceb15202e5120aef831280e7fdc1cea09cf74594f16ac15ca4ec2ee64d6941db70568de12b7164c3493334fe125f669ad5818efdb5d0561ff424b450597fc739a444febd2a05199a9c3a687748831b613295518c88185022945be42c44d6cea03c2a475b7faf2e8638a0d5a39eafe4ff0e8decacf3257cb2d2d0fdadbd254d3e39bd9fa7cad54538bc903f02899098f45c601e83c2f5bbf971ce47a789fb62e072eb0376a23b79951116aa0fd691cbc483dcbb553cf4ccfa67622020cd4419ec852d213a55f46bfbcdef231b2d8a5fd0de0f6600256c12f269ab0f587438bca185cbcadfe4604c5847b6c4eb05a52adf297a5fec3fcc1b31e8872fcb40364b72c5f844ceb0ff0ec57cdfdc55116695225b9b523a290abef74c87f32b7724c52ebcf54f2b49eaaff3642e7c070d5ab50593b8fccd5f4bd3434c4be5998ee0dab656bbf6e273c6f4a541a658f3675290b2a9bff51b25bf6eef86eb6bcc3a36dfc5c8d0b0d87ef6b927237b4b44c7f9754427d1fb9a26a29460e330cc25980785cc90b947f53d131b46c77977a85171aab39a675303a00737053917190e7d84870b924f COUNT = 88 -K = 8f8686af40254862d4b56a27fb606041b568c792d2d87e6e -C = c21f3a6f77ee2941935be20cf8cf7381c7ae89b8afb3e99e7fc2820d74168f0892d3eb9199a3fe26fe01f5530b5d13b64f75949049e69ce77a73808c229422901687a5996250715dcda24df96a6b667d63ee5fa87427694d30900ce40189ca5ad4d6aafc724725b4e1a11a453079d997 -P = a63e216f035d0ad754b4df06b033a748cdc6d5643f9bfa80714645d464506dbd7fbb34b67ba410b838e803ade63204c09f903051da622d3b34ef3a09795414a0bd332be1e438b5ef4ca843be5eed1b03770b81e377c77d80976fce5cce290c9f3d92381765 +K = 348d0a7d1b7551f87a9d124529fd063d7027706a255fb102 +C = 493adc80b8ad4678e92972721920a9f1be8db5615949a91498cfdd4e273a526a8421b67e7e6f0ec2203822dadec3b63d8a0374a4f83f73acddb3811441f7369ed913f9dc7cebcc2caf6190b26327ab0cf0dab4c668f3133a302e2065327376e1a32a1d0f7be40c024329f33bc7a0322e717b2b68671b96f2eb89411f37d430db04545706effbf4ef2d3be448e0bd90dc818e04f0603b51a61a276c7bae69948aca62d58c1a298aea08c28d6a0700c9210535c5d64ca210adb43c12c7e5a7e74f3e1c497c6241525d7bd6376c6d083da42f25b9022a939ba06e5bbae39433cfe3dbead0a9cb28d93de7e6495165d06078a6a4544f74e7d66cb449c81ec2dac305929e517a8e0fdbfe97949c195378e727c4409aea603d56f056edd38aff481cc8539edab26a7399e3671fbfe9805db574d0bff52e419dbd9b6b234674024a41c09df181aa7d2b3116df47223972bf37e2a669d44683127b35f3758f59a1a069c5755f96b4a82ab57c78c9098235ada720f5d2bdc830e169f4a44c2f14fffa8b93351dfebbb9b51868511b2bfb9fc751d140007eedf8fbf01ed37cc3833dd7e7a2e731ccca829b31ece466c6f5fed97aa44ed913f94b53c88ab7c54ec6d8e730a416e30bdaa019d8beeefe9491b78ac3e69d44749c1c7e490c6eb17f06699b6102588bd9aed9fc9ad73f86f68e25d3bbe259097c245cda92a54908f598de19ece47c7f155099d9be98 +P = 04774e46ec00392ecdd11a0fd65b3a8031941f619d0f7d739359b9e06ebbc2ef99fb733cddadf887243dc80c3f3b70f263a5f8283b7c6075034064044a60a5fb75225cf7e20a2f2304c1264e5ed79d7a11755bb88560239e53826d7d6ff26ae956debd7e1b1a7a1ec76b39d1dd8151f7a9313e0f5e28981963c4ccd64ae4f639d66863b4551ed3208abea8d6e78e3c127655ccdac6c6728552ad6d20924802d5432c0c2f76653084b1ff37953f2acdcb914239233d8da4e165c94f3261a3af9cfa809ae7db4693394dd85a0c6bff5c6f945025f09865a4be5178467ec1780796ae3d7f19cfecdca8fbb84dfd7e8865a4a6b6e0beac060e765a847417d7c6aead9289370075c14afd9a91d4d6bb307803182836ba359220c2ac2ee80f910168847cb490872c5eac5ceadc83ee79c8e777507a2937505d299673876d87ff6732a2b6c9b9714e102239090691318370ddadcddd7aa5aa45e596f215698ce17efca61daf58c8de704fc105578290f89190092bb1610f6d6f612e749238bc6027c72bd75fb104f5b42e219564b53bf392ed9e5a465d9671fab3e8ee0841e87426bd2d8b18999d2652db5ddfab1114ebc8aa80ced532e1cb2a22c1a376ecb60da5b4e8d87ee04b77a9251053e598febd2f9f5657c7ddffbebeecebc34fed617674ffa641c093c6df6857644ce40fa45d9702e03c1ee76340594327b664ba9166702bfa COUNT = 89 -K = 69837b43990d79e94300da35fa423d1f0ece37510eec0f58 -C = 34814e2d9f2d67bfa61b6f7ef5920df6122eab45fed03668b93696658fd9b490371f58f1ddefd70ba88f65a6c5f4d08656db7b147ae1ab95486d2f8b699a2d6178e636c703c76ff42cd4e6ccd6eb4febb034b330bed5b311a259720352e0ff60b6d923f10a4ffeabc2194762030d1fb2 -P = 333d71ec774c066c75a74ad095a813a6badca176ea0be7dbb75abae4aa968ec415f49be292eb791648f44e4dcb82e7b2081b91de2683c17c5a32d87051a10ad5f3dcc90bae3f59c093b5bfca223bca5fe371f1815f74d4b1c31d04ad484d6780030429ee53 +K = 7e70aeb51f250868c783e0ab3532ee7db7e9707195f02b27 +C = fab0c9be3a4f4452f82d06ca361007230f098c888985a1b8fee97817565106b68a33a025126f808ad4e676af95b880285a8ce6e9b813c88e5e3aee9fe2edc3644b39378f50b76e6d61448f855d35439a67a6e23faa1c0be51cbcfbcedff213c87d1c65c11435f442ae04566565c3e1aa829a4475edb07b501c980f15d0827b1bbfe78d7a4983f0edbceef4fbc29706b813c70bf3fbf3dfed179edd74dda119f41b2fe6a1c19421f14375214796425388099e8d3818e433ccff43849e872be121f7af3e3e0a4c8a4687b97aab07c72b314cd662227274634b8ce81ed70131f8089021809eb3d07e7eb5a515c041e367d89040b55587760f897ac30516c5a14837f2aaa84cdfd011ffa60f4a97aeb1ff1df67f60c2d61cb474b3278e942bb54232a2e297f3227ca8b52de58299412c30488ab24c3d586f4bdafc0faa7824a087fea64cf6894b270554c62128c1444de6eccac76421b988d9f4474e36a78c8c4eee4815ec0ff6d0b1d730a209a2586b4671ee3d5200ad80579b3cb50bc3f5e1313be7e2d3bc8e188e63b9d87aac947472019f879ddd3f2b3c701372a151cc344a13c09361a9b2df262c3c44c1ae9b466a81e16ab39b0e518dc53a529d398bb1cb632f4229e719c020d6f00d105c645b6be78c72dbcb40f8e57018cf4aa6a3e1f074b652c121fd3913b9edf411ee5eb90f911efc17fa11e51b7842106038d08f097dd16bbfd0288945ec +P = 2325d4b5d28f184770502f237db0f29707e363c8cea12553722ab27ff5e4d809ea3226c2378e3d79f07c029c44366464ba10a299dd7958e74cb267586e7aa5ebca9a486b35a0618cea14e40b731c392e3c3766d1da2bb2f27abd9c6900f24de1169e8d0f1fce3655909518525c584f7a85592f8bfe11746af348533aad79de8259bbccaec838df3a9895dd3698b307161ae1b710cf07ba189d26739c4e9914d7dff05ef69097e1ab42ea355f9a4cac27c07c5ea4c04c7ab5534441fde750e1ceb7eb782bea051501bb38325c6c34013903ef7ff5ffc08141a800b0c5c7f5fda1484be65cf6050b28feecd164dfc2bfff550f6937c255d308243c4f660ec1bbff8a657b4f14022b75bcddc196d4dd03abf8a0cd0d744e479686a77683caf51fa8d6076228a6a52802994bab67fe26e1c122ea0d7a5247a0eb4d58351f0f85488f5333ccdf3b13611d8aafbfb8f34674365b82fac454d87b7e55bf588217b47382d74e4a8229482649efc2223c7010525d699ab2c2bbba26e3c291bd00c5947718e9fb37ce837398aa6dfbab20e09fe56db1346f27d07c6522fe330dbd6f7654ef5457d4969c2761dc7b15987bc720ee2f1dadfcf41c37a102b7a3195f748b31373ceaf2b27ac16637f152aa2128fcd024fe813797bf9dc482edbc042c85edc918062cf2c3c7a0447727e35e9dd3c3f6d76735a0ef3e1d606ce95b348626453e2b COUNT = 90 -K = 7c9ae8790c8cb151760728d9ad3dbbb7399e27d6769188d7 -C = aa0e004367c699c5fcbaa7d2df7efba715b3ea1c988ee13eb4de4740dd646ae0d969f82724ee8822697e90d5aba0b73a605451166dd02f45a44eb4ea9180c98102271461b06c2352840f6410b6c6faf0c287f02f7f312b08c3824d79d311e7923cdfea545573adeb39c63f86d319ba29 -P = 5b762ad00877c45f716e8252086e23662da4a1875882bfda302bb5a0f055f467b2c67776299ad8672378536d46df539918cef6b3d79bddde2a9189130aa1d4565a1e29ef0d2c19f0a06edd787c287de4b220f4f85c2384ebbc85ae250a6e205c45b0cb2d88 +K = 9e6d310002a6f4f888024d323ec6ed347ddd44debed9e0ae +C = dcc448cc97eb86f60f62bf5a02832d77b7fc89ef46ee9da3e0898525123bdc138cee78fc940ff74775026640aeb4f4bd793f711dc11bdfb353b81d91d46e2db41f8073b0bdae58e30e7fafc3d5caa17546c33971c9900b2e1bae9c4d04decd5b556a0e07194bc6883ade507297130cb59b70e25b963944f08a42fa2e6c11ebfc8da1873cabf8e0883c4f2e6e9a9ab5dc261afdb062fc34231e4540d3b2a35a7928b5076371c60001187a5812788af3edbc953c759735f33d04b7c7a4027977c145d1bed4cb2b0ecdc3001a1cbb67c8b89ec91dbf9e14e913cc21d7a4f3fb0a113847d4adee31e2701cc134ade851676cf9f30fb3fd9df65f18dd5c94b95c1a5493f8f42882961164818bf2eb52227a1037dadf5d24e353c927f9451e4fa5dcd63186e0bdb4527eb9079ef401b1401d6e37ce7bc13784a0dbec262d550c973bf6e62c0cb38545e7024ee11e080e8ff7d91fa2dea45de3cc896f9b2f3aed35ca077179a9afa0e349029d0b504bcd68e177164c4f620b19a9506a5a9b06d3b85b5f6fec31e4b335dbe0e789daded95ac47fb80c878e0550b80e645152fda6875695f8fcec500d6f69197f2a4f8752af061b61b60eaea8dfd810fdccb1966fd2b8144e2fe49ab21d0e8ec0a2dc1bda7383311e2bf0372455470dd996bfbb04a6b54aaed1ad49f2430030883cdca9d903c9be923e4684b1b265f2beec1cbb9b80c2f784208b5f229b368a +P = 35b1025da4bb071fa3d284f5cd5b4d0100fb349acea21867669110ebf745e6f7787575f102383fa74b365ccb0eec5c37c3cbb8dd2403a8b72fd8fd60f65d3bd659fd7ebbe090d8ed30c3c86a0c5907faa78d8332d4caa28007d04694b00650627bfebf61f6b9c7bec98693ae7d80b1caf5f5886cce16e1cbdf8f48d175f06eb558be3d55013d2155b0098e7107c8844e60411a7c3dc54828ceb7e30fc8c046e120a15d79305a50b8888cb2bc9e5af6c2d814867a6cbd09f36f771e4343447c14e1e808fb434ec43a1fdecf4b1afd440a6f8674c9b70a67b60271760c1d26b80e0216184d70b934ad80ffeac14774ac8eea02272787df93c96d31722b08f6282ac399727af66d297c85c7bceded5451770a0990dbe8e5740b332fa13eec0bc35b29798bfc97b2a44cc9345d06fca0f714c35472aea2a00bccc36266672f35d9cec135feb8d587654b2eeb9b5123c73e88d578d417d3b07e4ffc9210265a0c492acd5e7e3fe762b54be2ece00e2f921fe1b14c08c56ae03f884f808b53b374d71fa40c1b16cd5d093af1a361fc882297a19d115044ba11ebfd7c495d8bd859ae9789b9b4b151e37edb7ae12adefeaa9429502d2eac79c3812717e0d9451ad2e950780fa1d96be2b3f13546ff9d5f80dec5e30400ace3615843a5038f21764d07f2c1d8ffb9e0e0edd7bd82c4bbbb8fbe911f3c68429470ded4ce23c42aeb06b88f COUNT = 91 -K = c096aac8e155c9e90b5371ca8209b622b2cd85743b5ba5d0 -C = bcd2b48630a3a9b262b4e44928baea8db8d77f54238fccd2a45df0d99ef1a0d29ed9de634939a5805526145e894c759a36d9ba1d4f1ae85dc6df136c9aad916b4289b55e657c23cdf1f47a35c03a1e565e3eb72d35dedf24a6b6ed721f236a261976550ba553dd8039f4e4c6bb27c3f4 -FAIL +K = 035dff4f2bcc9a873459c43f3be323900aec0e746d8cca21 +C = 17f5ede4ecd91eb7dcb1a406a1e852a19d518b6e1a587432101864b11b44b64bf964fe38ccfb4d2c6a9a87631d980adcb9693fd2c61105176bf4ec89de0bb62429a50f25576e32fafd437eddade70a18c47712ab7258517d7d0985b1716b991d6d07dc10f6915c793cf28c4f0831c804d20967f27d542a84daff80a0ebbc5addca3ead38ce15e8a90d2c645ac3baa38b092c12f190018812372d7d2b1fd2916ab92b718bf5c1c21b2b4607df2e5be3cbc37d23d40027b5653ce99d81090a9b179e3a7aeb2efaaa0ae23780aef62aad28244b233028e57456ed8ce0e8cc55b979f48a9de690e0b6b7f18934f7578df36986acc9ad500cdd142316d916826946513cf8c65612102af8d62022370716f8c6488fb3577608d10d64236695cda6d71502cfa5793a5713d6c5b9f279fe6e7afcc07d521f2e432802719a036db5badf3bc191635f2bcd3ebbd115498e5f124c9b92aff329903047dfd7a453e04dc0ba19a0379145273e5f70ec92c9a170f22062ef42df3feca39d640bc39ebfc066f8ebe712726940df6dc03ca41021263ee71030c57a53733ab035f044d3861e2e96f7b6bdcae6d40a8ac3882ec6b01e33bcff814c90bb1a0ab99a3d81c77b22436d26c44b12d9ca6a67559b39a2b6e18266ae0cf6b86375495c7ba21bfb52fdc8577063a5932ddfeba27bff62db6d5702bb0a2142d635a598d0cc9354b0506fd5099cfcb7d6672c09edf4 +P = cfb8a1c17184b170e957e5b2b86e269a3a2250aa05c0f8cf0bfda52a18e0570abae8c4d94269a41798c6cdb9c1fedb818bd6f407053cc6522fd500a09cb2509d629bbec7de352896bb8c05fe0c906ac71a732780ae21e535f2d0d172e6901cfc860e33b4c27bc0cd8b11ffe8399a5402540d4809dd0c7a669a6b008ca5c18fc38908633643472e96d195d4027290be5bef1662522ef771c8a8ae36f0cdb8c93993d9595a342c432e5980121959c16579d81b8eb50cfe3a52b4be198e5e33269b1159efab0f06e689807a079cb48a478cb7e1803d4530ab221eebaecaf2f20ba181d134fa7b51d678d9cf6f7f69415511920266b5e089460e979bbcd4b3842a7dec1d3dce4030c63e2e0a8c893faf458eccc73d134e26c66132310c2fb5218451cdd35c0ada7b0367ae0b81e725843966f761fbc1243e1c2b28b199ca0bd5b433e34c2a461204e9bd90c752091dad685658dc45558db05836fc4015db0c7e1a7997d2afc2add2c387e07c486e66570ea191e00646061da98e0e220dfe9556c0e169825ef00b13ec4c80f44fefd188e6e01dcb6c32d618080064a434603e7508a12fff4154bb3d325f2ab22f0a141715a690284faa303028bcd71c4cf7c88eb0377a48d7fb9fa8d55493eacd546c98dde4a2867b58bcb1754ebe58c1ffb5fda0ae9aa36bededc53ac87a5eabbf21473732a476c091b89cef648da5d51df53ff811 COUNT = 92 -K = 79259714b97bb138825197a033d8d994d4ae9f8f20cfab11 -C = daaaaadab97ae1dafea0e30a6d320e5390b04c8f06e3c2061575f85b9b2549652bdaa47f5e886ea36d8b35a864d50c0861c0c096ee4107d8ef80e97ac99ce16b918425f86048708b40f6f8e90f1e0632bf037be4b045e787eca45d18780104f80fa93dc839e0f0c0e8d0d9ec988e6362 -P = 49bc44d4bbe2607998684e3cb13df789092e51931863ae999d948e61f91017f12c6a94788cbda7f17d35212d4943308c6ff6f5cc92fd79c18465bf6be77d6167094971ea03663ac9ab5674f70ee1978ea5417bfda042c9832bb7e21e2d90bb9a245cd21bff +K = 8d155229885bc4e12eb17ac906e9a3c7924862ec40b3334a +C = 8b094f45f8107ab17be15c3094c862c8139d685003aa3d39d7f4feb390b77594de5f122afbbab4ddd6cdeb078689d499526be97eef8806b9c032bded494970e2929072ce199b61ea0f405cf1e11c6d1ebb2fd38dffa8618bbe81ba603daf929691af46869d47ea8dc2d9731b9784aa8e7bf2ce2372bbf1a673ceba3617cfc8b525000e632d9c61a9a7cf987c62df676c1d271aacd7c6c3da6aacdebf285e7fbc14bd704e56f43ecf5a04e3ed3981912783407cd5ff4d131dd9c20a3494cad0fe8624f7d4a00af9c29c751c6c7557a2febd793ea3aa1c3faf86ebc7090535e6abca68d3381cb790ce7fb4bdfbc271beee18aefa096b711db9b738a4b0570c8a6687fb871d62f4de9d7904766056848785dc5f82c45c12fa8a596eb01e0e5f48acabf8b3730c14367898859cd49f0e34034f710004bdf29cd162168565413398bc2fe5cfe4f3ba52d2a1599cc6c6deb199fbba8c959f9822d45e3610004cbf2f496ab403fb56d8a9c2a1e3ee880927c4f2ff1cd97dd21765801545a1a85e3d4ae6ed6db171335604876e4795389e09edda32f194f302271331f034a5be298cb443526f98ec6953c8ec8e94e226b9998ee270b9311670993b1feecfe9bfbdd3edd3e41996cb8ff6a2014504cc2dd39f17b4bf8125330f2c26ef441d64c531438d350d8990d934e31dc9dfcaabb50b4385d3f31c52a233b660f5bfd661c73c63478a9a488ea4b6b97fa8 +P = 279c2af5832f5f767265f3ccdaca921ef5bd0115651d35806e167e9583b73661a5dd6f7b42be96eb63b4718e94332ccf4cfd6c9969b2dfe7883b0a309d5c950fccde9237cc5edafdf4a1eda6ef6c8f89511e8bd3d90135898a887d3d4fbf64df1f12c0a7b9fff61f9153d534274bc3ecf323b5d22e0e37122b0b0b3bf8dd99976951afd6cb2d1ff451a8b336f20165399f2128396a1af48d8b880b1264088937b64b3d810d22f7be40718e938e58e83cd569c5ae5fbf67b11e38e83338d6deca61b1deb87aecbe1ba4c81afab60aeeb46f1e6deb073fa6efaff0a0d6db649348e5da3aed6992c6ffb20d8bcfc0a052b95a2c964b32b4cc140a7cea7a022a6ff7830ec60b469bb6881d6f15127a2d2aaea4b4e3d393f5de790c4d9408a1619becba5e4fdaf801f6eca0f13258c92a6053e0855af2dff7109159c33cfd35c79d7298e4da32bb7d3884b1587a65d2248cf65c65d575950bce8a614f6290848b15d79d8b8bfd6e8da801073cb7940f5f0a32158a7697450855f098ee9e58564a3a2e76e9e15c9478030eee3f33af9a5c426d4947c1d9aa0fdce35718f58c757e924cbe7f071bd54dee27e54ccdbd04c67ea791403b36cf504d0526e83c69ed7ebb384bc775f265067759be8fa9f4215de906148716e28a0f757e137975e7ce3f2a9c0f6f4fa9423f09e8cb182c6b78a6224e60dc28318794b7271b1ec29431775a71 COUNT = 93 -K = b6e01761601897ecc3ff6175d1a72d71a1a8cd9cac39f01a -C = 17c74e2e2e63ab88dd6e2e2719973c8441056f0b051f979468e304f9b93ccf833664cf7256439a1f45062a97e376c606110e6e57ace2a3101ebbd36f65cafab22a394062d680d732fe60bc910ee37cce6ae612a518e4e6dd5d699eddfb16666155bf347cf8fd3ddeb4d29e6a99332ab7 -P = 6164117221e136488750bfd0ebbaeb1597edaaaea80c06f6b8de9bf58985cb3b344d4756b565c73cbb9e37b281eff181f604e8b0bb05d4d1353af14617ca5a57d4aa6602f1d60dd6bede823af67bffd21bf2f6170e6d4178c393776e6cae9e27eb345adec1 +K = 5d1e61962b8d57a48c9875f917ffd18c53b7901ef3fe6941 +C = 6dc0092c179d679e02175b0a69ea7e6fbe408a78a78aac51f724c943b3e79f8bcaa90901c015ae6d7dbef92f73443ff1db1fc62e3c4115846e8a99bf4974b3d5cda4efe8da3f709478f4d8144d3d4aa9fd5e3c1c7f0910893502bf6367c7a9ab2e0931688dd1daa17a242d22addb0da665e46149bdedfa34babea0e69f2b90e3bd96181dbff60fc8784b6e31303575671c4bd03f641138277981c195d4b79ae16555085d40a7436286ca4e3e0d83aba5b714cbbb5c3613cb85e7175c38e0034ada993fc2d246ef993b3df4164665cc3245f85d5eb978e0deb643563c8b25f32355652942eb9d1dbcd9af0669fad4ed38729d3dcb6499b3971dc6055d574e65e2eceaf9594b661a2c4526a1bd513b909301bfc7a60c24b57e88000ed4dcd960ecdb68ede3e09be66aff07dad6eaba6bd4e6f340a672ab690da1f47b0fbdf775239e9e1d3b19bba5df860a2e1cacf147d03e03469b646b83ce0ff292aa56f16db4a5492a585dae7b9f9ffd5310d32a4f8d6f3e704fc9212cebc6e8167fdce0ed199ec2921b8baf2a93428c0b8e352e353454fcf3695fc19eabf4c1b7546bfc2f333c2dab7f6513404a6dee427d4221ad9d94ebb8a663724ea7fc469bc8bfda38b3c39d98d168823e508b1c2770ff0e19dcef1fe0fbad2fb70a1df1a46ddc1b399031a69e4adfc58505025a3680c387aeba3a87077bad8b2542e3e2d465c465c21c999caea8c1705ab2 +FAIL COUNT = 94 -K = ef62e4e500b1a041f0e5440f903c50e6569f5ae5da080764 -C = eb4846e1dca0ce6f4b2fec98bb52ef61ec3bf0a6da1dedd3a831fe421a08e436558bbdd5dd287ceb3628f5c55b23b51d87b0486d09f7f768277a668c8653ec38c4a5a216106e4cf44851a8401fcfec0df524aa53896ee7803e43e429fc021d65f16b15844fc3f031132cdac16123f63c -P = 2d3dda3f6c38679f10148bb676170c6317c7cfbccda76c5540fe208edb33e570704ac9697fded3db3886e137d4f815313743f2ea0d0d19438597b4ecb45ee4d002af49c483376d398dd80c6e16dcc927b64a5dd2302eedf6b955ee9afb20e57d1ab340c0ad +K = 76aa3b322b4f4fbcb1992e7003e869d88dd4f98f929c7efc +C = e88dae049ed3392f8b0545b651fdf87482e48bea7539c5110be3e0369777349a3aa7cd850481d5aa807a45d05fd95631a4c40f60eab79d5c3d6291d6c293259a885d81d9f3580ab0f56283bc57f538834b031579d113344f0bf38da5d570220768ac3ff1aa70b6774474c807b157e08a7c2b871d8765c48d9230e4b4563572f1de8a8e72b42431414cd4756e6c83517e2260f5317aa3b7b368d1c2ee20a4d382f78de1068c40db080081f480e9bae109452bb8eff441533b038982e52fc2294d4fc62bccfbfff7f419300b60fb7adccb282e7ee9d7407d9e5d57050e2fa11551becddea2543b7e9697ab5b7b9fbb6afe9785552e65864e2bf6ea5de70f4e661315f6c1d74d9cca7242d0905ba528dfd06da040d1a07cda09dcd67f0e785b8f5d866a62d78d45f3b7fd7660ad3d1c5fe6a64b3280dcc4320031f1329a45431ff406605b831b18b9d2cf9975cf9521e7fda9ea4e73b9c9d70d0db6507307b5d8ef4269b361c8e87ed5a7a6974198a44d89e502a58837f24772b07391cc2ae49431e4533747ed120b777eaf16d500e3851bf95163507ec1ddd895bf14eadf5095cb46c0ca91db338a655ba9119d60f11491aaabf08e1f740be37f6f762d9fc2e3e45791b0247418ffa96d0aa6377315532e5adbc091f30de52a18e7eb67a53f0eb2d7c2d1ddcce16c9f6ef80e06a753efb205b8aa0222eff0cf525c3ed4e43a79718f291f5324f0abbc +P = 4b6517e6a74cc50955e79e51961fb0d7b2fe8be133c897fea0936f6413175fb8e580b111b0aa849f6d2c683ea7e7314b57945ee36033374ac1022cd4124828dc292d7183d4f3e41cbd548e64c0235fadb425f3524faa61226bf4c012f13d3f0a3b66579b2a51a5ea6619966cb48118c9233fd2b3853a7b26bfadf5130e76e37521f9c9feab07e75af9fc9d9762cd716be2a1fc094a43bd15a80700e2c1ed98537e2b237a489185f4d673c87877018acf8bdd818bd67007fb71e4d0a327c891ec70094c39bbf415b5ff62fdf45e69716f4a2c65d0688e76b43addcce5f21fa1f423dce8736621f6121b96b8d0b3b4f8d9fb705c27fba065e0050fe7891e96211536a7d072d25cc4e3fa345a579a0d3dde15293467403c0365378b0438884c251579b80abdf2aff0a8ff9b04b669f64752cd07e79edb6f7a26cffe6ac27e5e316553591745e1f99f37065251624da7225ec9bdf1b0e5c30fbb2c211677191339969a76c610d2268d3d52643bbcb9f02284099a9fea3290cd6a1ac1624e4360935a5f0ec60558f98a7ddd533e76f922508bfe494b457706293d68b1e11373f2c78ed616498ce413199a06182b05463d5f85fa3105aee9bf3e20c8748db67b2268bb466cba92f6303e1782677bcd06b3feb8940577e005283b3e67151ceaa1c7ae80cc95a47b6caa43da4c83908d31157e3fb174ffbc6d627cd1749940c394e623f6 COUNT = 95 -K = bbd76175cd8e9450705dcb3a3720f2975d8b6263b6c47be9 -C = 3bce1bf12b5ca0deb4c3f527fc2954565e0778372c2666982b99d06a870422eb2b240cdb66eae817e29b481abebf4459c14d1419a00bf43672b97fd22595550cd3687face7bbd956c668082e29bc64bb739c404f2532f63e60bbed7b30b6772573277803002e303af1629b9238750a9b -P = b98870ea90c70d912bbc2f1f883fb25ef1b9bd32e24c87078a7a842607d6462a18135b0ca0a94f99778e97cee565d7d6738897b3126705db14ee3b79adcfed6fe10a56f6f4429bab1c56f0096cdbf65e834caac69e1b10c1b46c7022d4e43cd8ff2fc93914 +K = f0f1e267895a96f129d7f0d9ee4297ebbeb4b51b4228e226 +C = 4e7356d52fc530251aa4b19d7ba8df3db0ed8230ff1abd84c664f3c9adfdea5938bb1a22bafb88d7d5dd453d49d1c2fd29a6d29eacc49959ae4838191632ca68158c008f3f4f8055f07fb67cbebfb72afe0acc099f72296333173f6e69ee0649a1a38474564b529bee20163c077a379b2df9556d3ca4ee21fa4797ceddeefeb9db2ca697dea13ceac895bd6222396a3ffc935e7c45fe0e8dccc250ff6f3f789907f5eabcf13a8925bc961b9b4b10852454f5109813084e9fffff822251a838a441c9532b6a4695dc99afe4e5e76eb8da798d27e9266ba10ee9290ee561c142b2777361bcdb045b10584a21c3cca6c121715bea99f5572410e584e71e72f0fd0f422cf0e71ef8e964edf81fea053da56ef522bce2f4d26d0ad35c31dea9834f6c73da33b693b87258af8e3d5d396ea44dadb71f7ed75b332ad736f620906cd0764c73cb9ad635185817eddf4be678779cb45547112a4eefd72f9a25520154b56f0f5ac146ce822106c2ee2fcb86e8d0e5a0226cb558198d56c3f0e87e4d463c6332b8e8e12ef8ff7d41126e6d1c6501c3be29f144dbd8fe4c31442573a2cf372ad3634f651f23ac8714c3d61569cdec1318117cb5bbdbd31b4cb4c7ae5ab3d14b778b996d7b9305c44fe72e2cc6bb928df15716eeeb4bb26d676d2d186c4eb37628c431afdd5b3f4a30cd07e2d1e6e495de9d835789920b0330d8e06ee9c09ec5a76f040e284376e2 +P = 375da685370d1c8dabb8736ef75a36bff9d11031627fa61098626a7e4c2cf9a068681dc0d959982ad8072e0e568d61ef24185d3e3c75db62e277cb9515b775e7a3338ce1a84e0d7e91d4531bc454cc7a486c74a38358cdcc713c344f1d7ab78912bbe5c4f4d2ff5994815c44491a2cd1a0e7ab0ae2cf8cae40fd99b7e7fcd35f767554290857acbbbde0bcf77a2ce414f67e8504414399dd7e013abd38b41f19276e3538ea2cf7e1585dc95c3232f932d063499ea58d27565deffa8704d5762cdaf7791cb64065c4d73bee7a7aae11ca3bbf81c831ebcc27ff22df60b96757ab98a29d427c5c62e89fb7caa710baa71892c835d779cbe023161a9d65dba91ef7be7281f04ad40089a4078786247fb3a5972a9fc1bdf80aa2d6b9af3527dcbcb9d5178df51c58085ce7dd3724af5dc096bcd551d9381c287c8d9e4e3457d8a1fcd3eec96c740f345db25773b963729865f697f29a3559e3229aa3e8c77b8791de11e7e932ced068fec083e9a70f04afff2a678481f840157dff27baefdbe08d1899c5d4bf005e52fa77f9bf3caa7337be590fb1bd24bb97b2f2b2ed57b1306af1f63eb1c92c262d7ac987736db77c93d7dd2dee0b043c6cb70719b3824f48b1a2fc5ecc076a41ca3de4781885db4967627093bcd01e495436f4f51f1c62ef0a6dce82e1660526ee4e5493a40379a8cb7bd131545fa1708bdc0cc0f0d396e8dd9b COUNT = 96 -K = b07ce918c25899f21acb08155cbe55989d42b97479b359fe -C = 9c6e0294378f47cdee7e44ea2cb301187a4d1dc20136638c9e6ab4726af49ee147cd43c2b12c3d4b52c190efc81edc4d9114c90ce81825b88a61bce20911f3ff554cd15b638f7873b2dd0088f101697e6f73c6b9e4e92e649ff65facff451eef26c5c9836b81e679120a33c64c5e0d84 -P = 55b84adad4ce4fc13de34779cd5cbd1447c044edc519a5fe4978631bffb92dbea1e585435c1988a2b1090a2f20305323fb05c264c6e786b848528f829e545c7b296ff21d50b77245ce572054beca5ba78aed2177d9d00f4d19a0e35334b694382b796bcacb +K = b89535c472291f0045378e7399426957e4eff28096c8464b +C = b9dc09aa8ca34792dd8df9ddb343b1196a6266bfc5490fa75fa0c779662817c6292c44cbb17e62ad19f90b1e3068dceda39c949f633992402b9e406008cb289b28b8492ea40d7027aa69ec7eb8b9ce6b8ad41bf86d4de4ee0f7b2a90d7622222d54716459a53b24bf70a1bc2aaa024365470f32ec4e34d1879a4a5d749961b3772f79068c13cf168b300d596b773d914d4b3a69e65def02c490873eeded7632d9d782148ef63c6f69a9d022d333ac66c05efec62377259a2e5b4cb798e701b8f923ddadea3c14cb727c58d963f946595843132e8c1522cdc5c9aa3ba879c0dbc5f99cd109158b4c02f53981a801170e2922c8d02e2ff76e205b6078b224f89121fa47ec9f601c26a83daecb8bffed62adf7ea05d40c8ce1e3818e03283c76d2b0bb2df82e3c3745e0912127e11be03e447ab22b7ac6a0b22c5ee6fc30191043f4ea56f945e15adf77e5433d9824aed1bb8cdd90d0451b639817dd4b8ea4923192a4673346104d6fe7dc0536b336afc7804fdee247bd2dc2563472b4620bdb0ca916797ad98e888b87a05b928a068432d74daf0549b0d6064bdfc4391d8cd794f9c96b43e8240eda8202e87b9af080461292f291b5042b2c018d1ace7369b7653c9ea9754efe06bd4fbd0b5f90951515c00bf44051904568306956715b20defc72b980aff773671b204f6620fa6dc87d5aa01c9bdb01f191975927761c4843edb66b7834a1f5edbdd +P = de38f784c842ed984c1715e57ccb3149c110633322c6ef865425e5e920ab384359f10518e70dbb1dd9f783663ebcea5feb2a82c4b7c729ac02e3f8221ca9ad5ccade680f0cfa7529aa4b5ad159f313d1c99089d5ada795b11018cd1751ad955317bfa826f6f65effdff6c71c8b4e2291668fa87d8cf850775dec01d94e921c341fa841a665602374da8e1a2ba7794c30dfa882bf9fe7008585b47e580e04c2d4f3df51e70e958300de61eca8a6bbf7fe4861f6d7de25e151e75c27d8e3cb4da01d5bf4d67ce49844087dc02862eddbbf7192fec070fafeb7b2f5f92e9311efdb2b04a49895d52856240e9af0bbfafeb2805e94fb74b40c530c9b8ca28a785769323c9d9f1e02bf8d85b07b35cd4613266d877e1658124f66fb5d9babf3491ed5f48b13457091bc645ed6df5115cf24b489be709a4ad2c062393ee380737035426ab78ba83179d7aa3e8d9e5caff33a8eb31ae4a10356f025247bb32b008ad04f0f6bded66c31dc42d7d074bdc1bce689c955486f0bcf94319f1ea39be7032fd676563a01d0bb1c3b2da0a45c63c5634b0d5f9bcd548fbb23c72db38ec0a349f9c3948ff9b56a6ba107683177085223168613521bd986c6f36126dfee03f10bf38817e24431388dd8c210aeab69c159f9c6d62dee05f411ceffd4011eba907b35d521fdf891b21bec68d24535a60162b626cfba620b55fd6aebb502d3f397c65b COUNT = 97 -K = 1fd44c5a66ef178169ba62aebc3be2fd9888d44953daa4c0 -C = bbfe30ea7bc916b3ba5328f9dee9a2d86f0de57c634fcec0210c39fed50db238ee46423df1e834ae1df053ad5ef17e7bd885e4c18ec5f408129781546bdc71c1db3a6e86d60e3af2c8a27dee7b350b91e063b7458ad9d12a8272b063e22c01b8a01ff3e0814fbbcd1888b00d49a92eb3 +K = 1a71212b86052904ceb354ce14b7438255dcfbeb742b3476 +C = ee9fe38b481a689a1a33d794acc6b4f8fcf767cf704a58618849091e1394980cae148c4238db3d325ba2e3743554bb39f8d0e2b242d501a5251d9033dafe6b752241337a11b78205ef51b580584edf67cdb8c73b3ebf9ce4b440911f30d7b9860738db6b7b8ae668a56350212bb8f86ad16e309b3cc373243bb8cdd9d9895768b3b5e41ce71da77715e888d37669892f71ba3392c5090841c0ca2b88856aa1d30e40dc5890ac9cb1485e287c008b215a695fa37d6de11a2935d2a1a77f83c62161d348308cda91829d11e1295ae90df30fc0423b1544b75f783cd0a9e52aac696748409bc1a642159af73c5c305a6bd82d9531ff5371554652e53e4caed461bcc276408dbc1d9bf6a69e3e9c74c2e635443693219f345d980c9055098c2e416c8b0b0d6a840d281cac78d5ff913f0611a064cc97bcaa64971dec6dd58f7166bc09491ca79fb9dcce02813bbbe120f9c1645034bcc3748e5567640de3a71c619ed3110911900100c99f92d751c40fd2adedfb358248bf02d1094880e1462dcbb00ffe473140136aeb836e15816254e613f2420f82128700944b9b3423423e7b82b49feff0e35742de9ceaafe87c67936b3275389bfd62ca0281781a4b3e295678eb206d650074961364501a84f2d651a330b549f5ba50a709e549fd345af629bd152034f365db1efabef43bc60234efe9a77d5dbce19c11bfac85ff9d469eede90ce3b35d222bed69 FAIL COUNT = 98 -K = 0e826536fd772b07d828f5edfe3d79c321c9f4c4c5be11c7 -C = ffaf90ab7fe69e10cfb854c5e8d4d3868d5c64155fba809006ad275f79eb6ceab0498e8d8754442266a6600e1296ee2553c232ca6268e592bdc20c0e8ce88511aaea2b64e59efc90ff4d83261806b0726fcd6d6dae53bebf5463ae8ddd421d566f65df31ab83a62c2fa765fc97df8063 -P = 375582e69f332ea2a1483acec19e29af5c4145ec767d59c5ff62b4ab02d8e1a57655cc996a9c4d06181376951c1f657b4f65d23162f3a701b31b3d0bed8c19d8f39e9a9bdeaa3709a1df7a10438ec5197e5faa41dc6a652feb8b42fcbd9fe4aed6b67ad546 +K = 181a0fb5719ae9a2eee6e49ea3dac99cdb76accd386f781a +C = 938cf36e6ad883f9191e284f5fdab1d471ef97b124bf81fffa483f4f015bfd7f1946c9b86e41ab481eed5b96b2926730473325277bd46432fe08092383fcc8676cc2a363e2988be20f324e9fd2967899822aec773b4512dea5d7945265a8925144f3a956eb76e65da62ed43405499d05d6862f7365dc183e92657430439ca32206604586b4990b0ebf75b6a4419618e2b605a5efa8fd5114fabd4a859e054c825bcc5f50abfd623ec8e7f01ff526f50623fb98899e2ba88f6634d0f13d603654cadcda199367e6d53b5d6d3f0eef86e23e110a0b8c98dd644f7614b307fcee66fb7d07b566f02baefe69adbfde4938896e3bb2d08842044356d0591ff323dd0841ac6873063fa759a390faf031c42808dd6169caed3e8d6db699bf6afb94973218a9d9cc5318f37fb6e09de006c472f373f028883c1d1fae72ed1fae4e612767ceab025e17423487f9f004922428220b808ccade8f5ab9366d34e6ead178013c5c8dd8f1b395f0a72d01b40f60206d6d149b4be9bc4805e3082583c1bf837b260b83979b539b478505c1ee3857855aabfab6167efc9047620356211a634efe46f2f2c83ad3b6d5096cffccfc61e7850c903abec5fc168bc886e6bd2d69bb03824ff9761092307a29f9ded8ae0288b499b7321885d5899cbd0077cb439905e78c2f2b79aa9fb86b5b7e3794e8cba05654705e6e8a7daeaced1a8434af63d1b2e792e424d61793fa07 +P = 4daef8a1aed6ea07213193fbbbcb612a30f0fc9fd5ed05d63ca3d2263402eff5ec0ab9a48adbd9bff575f5813a81894260d9203b4ec8497b99c48f365550ffd209779ec9146c39e5f92c6407adca977280b33956a81ba5c972563ffd578d31a6d33fe677c9b60b8d3c587d0e9f4eac7c62f2ab2b1cd97a3a2a771262cdb45e28b09bfc026ecceda7985937134b2f2fb10f2a14d8415f7758494706fd9766cf8393e52e57b0bd840196934985847baccc5b9ba0c3ea974a20d8c7785ed07038cb6f99fb87ed32a451955659bbe90d0f9bc6fc1de7d487a434b471f0e789cadeac52c86879a66c43b8085fe8240d28d9a7e8c09a02ab14e5c059d8e353ba3bb1e1282f5295408b95edfd4a2f2aa3837870a63fb7404ebcd16c28f2be942e641e68118b4c93bb0233fc9295e4692e821c8edf6586f071a3be175ef7079074c778faa76b0f847faa7ace72cdac8fd87b37192a8c2afe44f0a8d5384f995284699500bf8e9665c250b4eccda1a1959e7fe1742d1ce71bffd9390c56fbcf2579ff3b28d069b04549e61d4b5e0c4a418f634f7caf865207042609fe45f3919582d0f95fc95696a536696a657b78a835b96591076e74b2e4fcf9553a160e1532d7ea3813bf969610e0e5345421fc431d3be4578b842e23c14a4f0e89de59e745bf8932b070def8086b20326a4c5e0a436d60087e2886a474da75119a26295b6494d7c5d8 COUNT = 99 -K = 73cca1bf0fe33a68ac129f0f3cb950878120073289f7db7f -C = 1ac8aa57a6f32af38b66caa246e701542d8e66e8e9064dbe828459e785775422f5f036dee1891077970cd01691adbc6709dd56216b450a8f28b7137857271c3ca2f219b7d73f9fdd3df4da94f83c3df546bd4f281da5dcb5bce11077d279a945554cf44bf044079e67917f09fe2d4324 -P = 12888df247096dc8dfedc69dea9989b5a25047dc6cdcf28d2eab588c5ce96be23c741fc10a56c94087932be70c05d9192a61e33f49f95dbd8ec47a4029c8c574eed1a3f2f078bf3bd52e72e8def6b4d3a58f4792819af94386c05e5996c4943377a0e56fc5 +K = 1fc4a0f831de9391387f9f6814aaab080344ed09752798dd +C = 9a972e45f075a9bbdf9b1b7489e35ac7313e7a75a4cb015b40f2e9f33febe91baa84f222a99343482e31a0203e2c48963d114b1d0dd207833e03d5e0d78d371e1935c334857a03a5e697005c60578121e8d47bec88ddefee2314a326f06784b93652a0242ecc8b9ef47791cd66d1a286b58c69031834f016a3374061bff6afaa5a91cbf618c2ab484db2a738ad968f54de44f4611d6053da4c679cf965f95837b2f0ad91ae3b43e3b1f8b12dd952d6765dfd0ae2246b27b6f5df1c87823f33ea39c676f31d63681234b6e4f321e4d6197f1e6e9821c6ede663c3bb67e8672949c37912123f09a36acf48ba008cedd27d2653ae180773aef21c50e64fb320392f7837bfbc4d500e32705ec614b921d2cd5f705530cfdaf8f6b3f8be96cf3be30af7a0c1dee03730f8c394c4a968ee3ef19411bd6061d16ff0f512963da681db86272bc843563e8c94be29f206222a8c259c99c97416154fde7e772dccf2bdb4ed339d3cce7ae4e99e8756fb2133b7db4074d6d0b5edbddfa478cff1854dae913920519d49f0b9cf479d553371aaa3d921d1f1753465ae713b1b6236508368d565bd2cc3bdb0085968f40152d92bd4fa1865d98bfd03e3b2530c38199adf44a4b398bbca6fef6485d0064bd800e135f85f9a6604ec057cb4babb0a1358e33eb3e1b8de6ad163f6f2968ba98d48b868634d6da4ca15ce851e6724e548fb3bee1b16880d9cbcb1235c10 +P = 63f86bdb1acdf5dee36bcb2f3d6affe6be20143d46010404e85ad215afac052fd4a942bad9898ef0b6e19dbbcaca6455071c8fd54f67f892f182b5a5352843ef677637513e34012b3d53a44cb1fcaf4d3c1e61e9aaf73ec5d527ffbd018d584f7b771b11db2835eb7926dd6395c69a7f04d4e7263f76ed36a343aa2e0214bc8f2208844a18023c79ddb5d002524fdb9057aaf706460d96bf00fa94eb12d38b822916eb7be76d3cfbde41094a871b5741636cdd4f9c11431ea0525746ffb25b21604a86d8f2bc79170a82206cb5ea0018b2383677ea08834587268664a41243295543c3f81e5e9d022152365cc3925b5062a214cd192291087b680a217fc4cb93452a6b85a337b8f4fb1dc9601cd9de46eb41ab9a3e6769968cb2b6fca7ed9a3ac3cb4ce9eecd3d7428065b06cd02425e97086f2090d985344cc4f1d075f0ec379ed6ef30b18e2f7b7fb5f41098170280f7028e6f0103590a0b5304594e4bbc6b1799824ebc933781a3897e19a64c2adffd99eca43da3d7a7f77cbbd086390ee8c7181b1f140389003da6438fb9bf0470006a02d7ab6a79f9562c520616ad7e3011b19a86293964ee0a44fe172f21167aa42d1f72d908e755dfb8931ee14553ae10972500a5bdf5401b6891e8426e745591bb5851d08594e43c6ea1c185c4a97af85872c192ab7f9947a51a4bf783a22988d177e47f911f611e08e83598a42a29 diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256.txt index c1ef7f14ec7b..dd5e26575667 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AD with AES-256 cipher function' information for SP800-38F -# Seed = a71622424739d67388951ad51304660ac0c6f313149558590f4e6bd9a1314ccaf9e2567fdc1f413685598698079b5fde1b7d99264cc82a34be91dc378dca8f51 -# Generated on Wed Dec 03 09:16:10 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AD with AES-256 cipher function' information for test-files +# Seed = bf1ba8f321ce0abadb40026686c9d9e7f0c4a55388f2ea7cefc81aeb0e054d40c94f48093f2739580010d6ad6e6ce734f21e7338100b750ec9c7bb06bf46f7f4 +# Generated on Fri Apr 6 14:47:06 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 498e48ca096cb0c466ed31ca2a4e8e76599732be1ac72e21337efc98dc61a51d -C = 41e2a0cdb1f89ba091627f93475f6e33 -P = f7 +K = 20e4ff6a88ffa9a2818b81702793d8a016722c2fa1ff445f24b9db293cb12069 +C = 85011dc927b167f411b0b8e21b11d819 +P = d2 COUNT = 1 -K = 73d1087d1b432ebc75cacd3350ad6ee3909168dc7541295c7042efff079ed7b9 -C = 176fee9fb65e9b2edc70af93692e7a3b -FAIL +K = 068b05d005902438bb7a837c18ca4d7abab63c7de558993df68492b3cf3c1c3c +C = d54525e33b8d29aa1497ffeb13acd10a +P = 24 COUNT = 2 -K = d1a0700b0fd639baf3d0703611bcedcf54a1514555315cae1b3e49f3735675dd -C = a8d823d72ea7e3590a6c25e2fc1e0f66 -P = 71 +K = da862b25a629d328cf9fac7be0d6ead1cb2404e9bab87a2381a46eb1a81187c5 +C = 5e01a2b9b8413f303a3578d2cc255fda +P = d4 COUNT = 3 -K = 656d6a097ba20668707ed597ba69f6c242b21678335572d5919dd896d76eaf8e -C = 93e344fccd39a69be0c5d769e23f686c -P = b7 +K = 5eb8d2680f51ad36cb9353a48ea02c9d9847c378fe5d4a7563bd9aa31786b0dd +C = aae543e01f6b3d8b2fe4e641950115a8 +P = 7c COUNT = 4 -K = fba8bac530d62182dea55518b632ebefe560ae1dd7e25d613572326b9540591f -C = c353b95df60c0c30de7ad704a4d172a5 -P = ed +K = c32cb3e1e41a4b9f4de79989957866f5dd48dba38c22a6ebb80e14c84bdd9534 +C = c29b05c2619a58ecc1d239e7a34273cd +FAIL COUNT = 5 -K = fd5a0abbee3f9749a3e4e8c6f53cea6f3bebea43503bc27376efbbdfb74ef663 -C = f93f4f1fc267c748442458ca470d37f8 -P = 0d +K = 5fc3ef43eef256993fb00e6ccc90f60319f10a3bc9fe5ca4ec876c165e2a7720 +C = f3d922a948969acca293bc3daa027e48 +FAIL COUNT = 6 -K = 564406d8e9cd885b34018634d57a9a95dc269362c28e103b0fe2ee62569bad52 -C = 270f8f9b2eb16fff4a230f038e950b8a -P = 0b +K = c2a01a7944ad4d7a2ad694f3eec8a9e02a875bd2f81b2d870a0e5ae7d154061b +C = aeea3fb39ebc04725aa4ffa09dc9157e +P = a0 COUNT = 7 -K = 6965b472b29485d169e4d351aba69a6a8f2d72784db4196912ab5a114be6ab26 -C = 2643aac0e70a068e5245668973dd70ce -P = a2 +K = e0ab48312e08cdd79866d4f9f504e6d743d43f96d1b9257524b36445fce9e6d1 +C = f92199bd7c07148473780e6ac4bcd2f2 +P = 89 COUNT = 8 -K = 1b3461145f4b7941b48da345d430660a43060b682fe11be7bb64f5c08cbb2e32 -C = 9a58a1528e5dc9bc80624ea1e6486eeb -FAIL +K = d2688e1748fa5a06dfea30ad5333f9637bfa6fee1f6fb56ef34f68cc53a28e1c +C = ff55526c0f96959e484e7ed101397898 +P = d4 COUNT = 9 -K = 6bddc5cc90070048cb1bd1633df4ae69197d438a11ae0c42856201e52bbb1c0e -C = 4121744cd8bcf537f1eb7de62eab93f0 -P = 09 +K = 2ba98cde13a0249e902ef28a46b7f2d41c9599ccf6041b4f4b7a754a55329f63 +C = 769301e794f4a2cefeabc8e7b7c9aa4c +P = 3e COUNT = 10 -K = 08be487dd01c6efb1c1586942325f232fc6601a660e2991df6c89ee4997362da -C = 3d3e39f4595dc1b5d6d6cfa06885c083 -FAIL +K = a3cb05f2c44054439f51896d05ccd6c51a57df8c12d60f7bd4aa6f27fe18b8e3 +C = 730eca82acef411bc88077af97f6e73a +P = 70 COUNT = 11 -K = d7c3fd48e3526d3b09312cef6411c5656d09fe21fed28833331f89c6aa27c31e -C = 428e4d41b0a3a9b69e99fef6147d542f -P = 3f +K = c3de6d43f7927242d8d4c6c76f6661a3c8267c380890ca8a94b9a9747f94c1cd +C = d6fd3c62e0e95e2e48667df1b290f01f +P = 82 COUNT = 12 -K = c9ff2e11e437f7809cd4c6442b423458c22196c6f32f44e12114607e35d459d0 -C = 740cf898f2205cea11e0cab540118d94 -P = a6 +K = 11ecbb342a73f6aba0a89cc972799f8644e606f974e230ab931a3bcdc7570163 +C = 0cef215d8322b213f2b6d99c2db06e81 +FAIL COUNT = 13 -K = 7ed0243cf66ecbed1a15df76f75ebf69a5062c59a96dc2d8ca292ae520ec5169 -C = 4c54797b40cb299c9f6bd713f8155e2a -P = d1 +K = 1041ea7065cd1ac4dd63b4f2e28cdc02aa518640999b6b1bc63dfece00ebf2f6 +C = 62929dec0511af85dff856d49e1460ce +P = 86 COUNT = 14 -K = 74cda07c8c28efe22d9918031c6efe50cc9eefa507f72eaee55a03688a679414 -C = b0cc1246839f008706b5f0d64384161a -P = 42 +K = 753cceddc0a3323a43f88d577668cbd54f1839a8780492db40c930e0ba33c3f2 +C = ca4688c0299b0f07f7b049f6622dfaaa +P = 96 COUNT = 15 -K = ad5ae7b83071fa84fd5b3e68cb8b419c5e304dacfb6570cc044959a93bd7c8ae -C = 6b59b4081c5b7af2c454815177b62ffb -P = b6 +K = d84b6fb85cb134344d92d43f736720af65a2e3bbdec8f61356ea1962ddd3ead4 +C = c283e6df8a8664d3ecf598ceb043638f +P = d2 COUNT = 16 -K = 75e18f75d9e2837a04a17122dd1783d66a3ec5ee956cbd857d94b1cf730b9ce5 -C = a63b0dd2ef289845cd4992ce51b93f25 +K = 167263aa235afe5e1c1ef537f0f418336c6e5dc6438267976636e1bb7f6f8f0e +C = 34e197821ce4620e2d6284add980b5a3 FAIL COUNT = 17 -K = bd90a0d68a4b1f76ad23aa7335c667dc8d29c34181ee0c7db12cecb3351edb80 -C = ce63b6848709c88381cb5398315c8e94 -P = 6e +K = 3e3666f32db8e2c09b31f67b617752323fe5be57d4dc8f7faf0414ee7e1df31e +C = b3da3d32313790e314df4d01432af433 +P = 34 COUNT = 18 -K = 82b81219a5c5816a686e355bf57b559d4ced0979734d89d911c1611440878506 -C = cc6741f3163c20dce790822132164d4e -P = 61 +K = d5d2789f84408fe0c35f3d307bd523eb841d0afec32771b57f04f628ecb02976 +C = df8d69f35070bfc48a1062eee7abf816 +P = 08 COUNT = 19 -K = f2d98d3afeb66385cef9f0ad2cb774fd50589e1933c83398fd0b1596095bc581 -C = 88bc54e09af50fc2536e270bc3745f34 -P = 9b +K = 31599b410ae1f02c35a4bfdf872b69cc7c7a61b04b21f34127778e3780d33d7a +C = 53813e0f92453aaebc4cff0774fc04aa +P = b8 COUNT = 20 -K = 314fdd65f6acc9527df68464b736f0e2a2772fcc30a5a9127bb30ff16502f757 -C = 1b5fbd47d9495e36e79738c089b02155 +K = ac3b14a300d1544d3c5639ba26e80ec87fe83610db75db792a2ef38a918d7724 +C = 4ba718c590373ddf4e12547bae3cf780 FAIL COUNT = 21 -K = 6181fcc9307c00ed30ba26986865ca26f87e45b98bfae3be4c2e06da93d9420c -C = da6fe8ad7fa24ee209f00a41a8b40f6a -P = e0 +K = 0b387bfcc07eddf3187321799f7dc50b515ccc4e71d5a90f43b279a8bf848707 +C = 50a9f34e1d3c37842d5c1d83c7e86391 +P = 28 COUNT = 22 -K = b4135de90f3d5e1dd7204cf82c6f140f559c5b5bf8d133ccbaf2e2a97bdca682 -C = 661457d8bd5f15704a3a7827fb5e2c32 -P = 32 +K = be7cb8c97a7d9b70a2044b27c8b2a74ec6488ccad0500742ca53bfebeb3e570f +C = 42e5730db74fd826ce95e073b68adf50 +P = 50 COUNT = 23 -K = 63db232901ca999c9dd4ea5bfa64ee43051bff33fff620887d17d14340c38274 -C = ea8b31283ac8ff0c8f859013b6f60057 -P = bb +K = 361b492eb605a26a5928b5a0c75823b5a5f44777ae0e28b45477b570ba09c2e1 +C = 3b562b9a0bfd318d836a3391d2037fa8 +P = 5d COUNT = 24 -K = d2e5dffea861c6c98fffcf353ac2c930533f9bfff34e57cdb08d5ed1ed7e339d -C = d617d3591c99d3f86b28bcf9896ed873 -P = 50 +K = 5dd3b4c8c898c228a26b50d13b5bcc5cdb2c59e1649ff810f07e04fbc47e2585 +C = c1c20df6a4b356e314e096ea59413aee +P = 4b COUNT = 25 -K = 8b5d46245c85786863f9d6832401a1771e1a20ebebf1a3681cb2fab25e074525 -C = 64e421aae0a3001b76665598fc71550f -P = 08 +K = caca58caec828807b393fef7f7d3b498c81dafe78aa6dc85fa6a3a15d715974a +C = 3aaa1ad59288b380ab2d812cbd4649f9 +P = 7f COUNT = 26 -K = 7cac6cddcc3f64bf95f69f912563f342e79a98b493cefadf3e28e5bbac247e46 -C = bafa0ccbabca6f5b6ca1000e2f039254 -P = d0 +K = 2042c8f12838c5a1f1258aa69f504723b71bf7ae9a5c42c279f2e8ae3a14744c +C = 798b90d55dfe32976cbeb4b283479f49 +FAIL COUNT = 27 -K = c11ce4846df8a6b3497d6cf9196979780f3cef711828838c4dffbd13d0b494d9 -C = ff22df4883af6e79c6f4a1e68aa4c76b -P = f5 +K = 0da3a2c04dce0a34a8dfa4d4de6d9ee11df73dc407a823805a1a31d686f5c7de +C = 9b96e23ceed2ca46a51cbe7c7554686b +P = c9 COUNT = 28 -K = 66f5cdddf60c28d1cbb5bbde04d577908b457ad2fbafb1a4b9c207256dfccce6 -C = 56496c4ed13733bc82c7ec60faa2e522 -FAIL +K = e9c017112864bc1474ed19d123aaa68889afe0718379ab5629a6938916ff97ab +C = 464b9a332153a557fe516e2ca6af1e1a +P = 2c COUNT = 29 -K = e0ce5aa68042c3117986dbc056b72d1f9216fd41fb8c378ab3a8de88d7b7c408 -C = f5563272d390dcdb2723c0bc9c7160af -P = 7e +K = 87ff4e1e3d9cb32cb41aa1deba9ae9f5bc2f405449b34a013098e3adc8fd5c48 +C = 525218fac1473edbf3238a742402478e +P = 67 COUNT = 30 -K = 58227de9e798c5cfcf295ac72c15efe699a5d7c0ec5e2e3d8c03b9728527eac9 -C = 59ec4e6ac4806eced380d73bfadfea91 -P = de +K = a357d4d8abf2c718fa57909f2386e54d0e60f8a96424ed68532cfa2ee511490c +C = 47da006521381a61b41dad846366ad89 +P = ee COUNT = 31 -K = 4cd91fb71d7530186b93538d70454698d630aa1224c8f3aa4711d29c8047fe06 -C = 85d15e982fb588eda7867d5202fb6695 -P = 60 +K = 12919ae8b792a4a0a86ae51ffda1710353111a6fb230961c156baf4cf416ca82 +C = e5f17bff01ff4b7348b9252873196bb5 +FAIL COUNT = 32 -K = 0786e4bab3d9a7f6e8cd3e269bcaf3b2738a5750aea9ee3222e3046d805fc796 -C = 67eaf34bacb349f8ddcf786153b7fc76 -P = d2 +K = 1a1e6e2983e7027a0e83ca0f2e8f4244ead3a8e989e25dcb5be9e9f5db521306 +C = 2816ccbd9dbcbf163adf6dbd0feed026 +P = 64 COUNT = 33 -K = d0bb9896c28b62cb4cc908496b203385ed0b67d4610bebc8c43931bb9a8408c1 -C = 31f31a81b1a30b99a01f0395bffaafc6 -FAIL +K = 9153d04183b4f9d8ed4df74e4e48953e6941e4e7a1aa993619c5899a7060ddd9 +C = d5d6704f5522ddf2cab6a0200aebf22e +P = fd COUNT = 34 -K = 35d57c0e70842a94d545fe81098fe4f292290a738f25566def60f79bd03f1489 -C = fec47f5358e737c8440b54e8318be82c -P = fd +K = 96b1a2cd0352736f9c7950a140e91b345ec3513e2319650ee133d57ab55e0a2d +C = 28875d6edfdafdb388db6761ada7f4c2 +P = 4a COUNT = 35 -K = bdf60bf8e96fabe1e25d2a8bda286eee9ade0cd252b3b66ee01b3a88ff77d61e -C = 701dd8fc2fb0b52ef8c763a383dd1023 -P = 81 +K = 502bdea844fe0e60cfc883d57d4ca2301d9ea9e2679f4b935dd28968d6cc9735 +C = 9f0c55d7fd5d8d51c28d9ff825c0dd12 +P = 4e COUNT = 36 -K = 17f8ff99e3f5443f83ad88d3951d4e3e92ac01be18ff7efc95e2c948c0c6210d -C = aa92b09034de11f9e0d517b7c3a6f021 -P = 9c +K = 60df48266725538c6ec7bdcc7c5b9f0ffe1a54ee03434da7d47b3b8b16667bab +C = 0b6b8ddfab54f2a3f3f1ad0ab2889f8d +FAIL COUNT = 37 -K = 4fec736687bb17ae62bf1e82722b3613603f9acc68e6f4cb83be8edea64dc109 -C = 168875c9c916eb1ec8ba709288d7b6d1 -P = 01 +K = a26131b03a639c7cfdfd2b47606f69497e07cfce0eeb125470bc021edaf02bb8 +C = e119b82479e0dcdccb5d9e261c3e8a6c +P = 9f COUNT = 38 -K = d674238c296963c67c15beb5f0666ce819f45c24211f42f114989e9166ca782e -C = f2af663d85949b9e02799bd0b7855beb -P = a3 +K = d1a732f4a0af22418fda581d8f3437d972f95cb0163bf75969ec4084f5bb826f +C = ce7ef55fbc907903d086f622b21b1916 +P = f4 COUNT = 39 -K = 2826392462b61b5ef5f9a79541259f0f9883dd43627a2fe148a39a0257ed6f6f -C = 3f8fc7dbf5f5b2187e11bce74e93e9df -FAIL +K = 18523da4ebdcd633338ceeb72e9ae347391d71669ffa7a49b73604d2bc440a1d +C = 0668a7839bebab84d205fe5fcc3cdd8b +P = 66 COUNT = 40 -K = e8f92f67452e3d3bfd421aed1e8cbe4141ffb901704f40f01ec13b3f86b30143 -C = 9e759cd2ec91fb06441663ba1b9771ae -P = eb +K = b1eadeff0a6e901e3a57cb94de3adbef15bbc7436af626c447d1016268017f2c +C = 816e41da901b9461bcb6ed7dd450a4d1 +P = 1a COUNT = 41 -K = 475ea77968b3a8882e26d3a4a5ec80bf5abd5891c0744ca9a3ebe55c99375023 -C = 6c8490365f7e7a758e7978a4e175fd86 -P = 67 +K = 182f22f3fa81d4c52fc27f8f8cfbeacefc2ea9354a6248f563ea48944af92c97 +C = 5989a4880f3034fea5f17314686d6848 +FAIL COUNT = 42 -K = 5de6d3aaa7e839d8e3f9cb7ae2b067db44349779e9e737a78f06147ef32c193c -C = 4d3c7c7e72d08c18eb4ae5faa227ad2c -P = 93 +K = b66c6f9f6b545c7b24905772c49cc2e73dbff951ea17d55a3ff6899f994cfc62 +C = 854cd06a69eb48767a2fbdf315e3cf35 +P = 5a COUNT = 43 -K = 1d84bdad2b4f308cbd4b335004ee757c5376b0c9c0f7240a5569a548b7824db6 -C = 0bcf5789c9d8801965bdbf9fa302e2a9 -P = 73 +K = 79619f9f1a9ad2f83e5c395e3d91cf6239f083d0120b5a3538d98f27bc39f558 +C = 07e9f5263691b0b32e43a99415620bdf +P = f2 COUNT = 44 -K = 4c45d4eb517e770042907e0a3136a8d8ce6d4b4fa9b9f505c9862d4782d8c372 -C = 68c89c5a702c9bc0300c4e4c0239c3a0 -FAIL +K = cd99455e26e1cba8a70a08f20de27c296c6527d911627799fb18d0c9495f7f44 +C = 60bbd95ff2d039c00065724a99d48781 +P = dc COUNT = 45 -K = d1b69ac71f5138fe4c29d769e58e62840176828020773ce089b47ffcbc2830f1 -C = 69e4fb3830bbd8cb47d3ecfed187727b +K = bc356b850f71207f42a05a70f331e1ea9eb136b15e6d23b673c307d17d7bc614 +C = 5ba3ee47bd97be32d39c62ff5a2b35f7 P = ba COUNT = 46 -K = 47ff0d1d6b5b5b38e6591e2f3a6eda57e9e968aa2c71027bacc950d3bf55c868 -C = c55ba1a3841e7e8b1e3711420459d3b6 -P = 66 +K = 5be9ffe757b48c86ecbd1192cd0ed198f1476e4127b91faf495432730190a706 +C = c4369b257f500f3ad63c518d3eaf067b +P = f5 COUNT = 47 -K = ace6d25d242e4376be7d44112c7da7dd4cc4432b6faa44b4ba82af313677b266 -C = 678b21f5f5816703a456d36337262647 -P = f8 +K = e865bf0e7b2243829af642a0a70c30151149a981d4020cb5c27996a71ea74d9b +C = 702e8163416f84e9af7a1ef0a03ad36d +FAIL COUNT = 48 -K = f194b3b1bc6d5b848abb05bece072639d291e9a6e8986f492a671e97d207353b -C = ef7e8b2e957abef3404d713b73a5d2e9 -FAIL +K = 55f71735284a93688071f5eab77f71bd4b2f650ef1d089427992f5154fbf5427 +C = 4488afa0d9a3432ab1799f224d827b63 +P = fc COUNT = 49 -K = 56c70a74cc59955e4dc2198e65f02e24807d8cd17b8780e258b2476da8492d23 -C = 685821b82b94f1c1d8af1af5aefb764d -P = 57 +K = eaab6bd9b732c42df2390a96234aa51838e4f92cc6bfb7c08592756f9b00402e +C = 7b031300f18d8799f9ebd38164f69c9f +P = c5 COUNT = 50 -K = 0c996d6ca9bbe1b531d51d0e3668791742ae759ee4c556df16bfee9ec3fc56c2 -C = d6eed32faa35c8c817a58425db60e1a5 -P = ac +K = 3d5d057ea66b8211f653e4f9cdb60e2d5afc313945a4a23ccc94a9a36fbe0b23 +C = ea2d9cb63d4af182eabc002fb46db5de +P = 57 COUNT = 51 -K = f125448c33415dc388c0308e1b824bec62e650826fce3f312ba836f0f9f272c4 -C = c7ed8a1c8fe5e49c4458e4a91d1e5a86 -P = b8 +K = 982b06ecd6bc8471da0be62503101b820e1939a002e73250ce7436addc17b266 +C = 903de32e4ee60cd8fc16d07858c30e04 +P = 44 COUNT = 52 -K = 45729ecd398f0ac13cd9ea0a66b7b7b6d61cc5abae0e71e368a332c0d1b9e4a9 -C = 8b7e7c01161eea842219a9dbaf9437ac -P = 15 +K = bbdef07f1f70a8da7593e9ae3fbcc411a732e39920033b94761febf2eb8563ca +C = 13ca009de64016fce8b18209d6d96f00 +P = e3 COUNT = 53 -K = e839fffc23b98d357acac87866571027a66c984f8756bff25a57ec4f8d680552 -C = b627a695a26a72ba8550c56a16a66702 +K = 547da57d42e595869e309c1cfead83b34dc582122d192c40cb3e81873b78024f +C = 92798c099d2135508165647a9a8d2d4b FAIL COUNT = 54 -K = 6edd45b268bf1d1ab2a002f3fccca7f07ce437ea8c8505eb0946ea4fce91ad0f -C = 35ccf5bb5da5c9da2ea68de0e40d1f0c -P = 7b +K = ab2b6f309678c46f700e7263860660d4261afcdbcdf0892a8ab6a260babc14e8 +C = 0be36ee5251571bdc242d6c49a61da54 +P = ff COUNT = 55 -K = 0e0f170c9496d7764b8f2b8cace17111dd496db5bdb2484cb9ba0fdb48622639 -C = f4399b80447201dee5db0f1fc4b1aef7 -P = 4b +K = e4b6f0a17e9563959d9837a2ee44e204022d5f45bb93d8e2eb134106a7945927 +C = 4ed0b82400aa9d4e3ff3e3d959711bc1 +FAIL COUNT = 56 -K = e8452f74bccbdaf7d0d39780dfa4b490510e9d1edd311d341525a50291cb5256 -C = fc003fd6c6ce7b1463cef418b785268a -P = 23 +K = ab88a688a1fc24c54cc2c61f7f19faf1828eb75fa87d850b5183379b5bd6e96b +C = 68ea2535c7bbee7df7a641cf75148dfd +P = ff COUNT = 57 -K = 237613c9c781c4525515810311d2eba092e9a1d07c572ef0f3353ae48c0004d0 -C = bafcd457df1c4026152d62ace999b486 -P = 6c +K = ae1a61a01f8b1d03630f4ca0f995d45218038e2edc43f7d4bf8117fe3b49f5ce +C = d7975b62363181f2a6c044bd147cb36b +P = 4a COUNT = 58 -K = 5b50e03c9904150028a326ab6f3f9f0930e302e293247d60eab1fa227b454999 -C = ed2d88e43d466c59a5e71be25dce867d -P = 48 +K = 8bfb3d232eae4bdbcfdce556849d338db0dae3792bd9ad5c34cf11f6e7bfde2a +C = 0516406411344eee4e2b89df06e4a448 +P = db COUNT = 59 -K = 031c6d817c472052e7f431ed8c4ccb71bde7ba335b1b865bb146bb4b3760193b -C = 2f420337427433d4f0d93def57e5f648 -FAIL +K = de3c39999a787b9429db0a14a5e54e6f32d15f12948bfec6a3b5ef85071635bb +C = d296457a4be28965d4876c3e389a2a34 +P = 97 COUNT = 60 -K = 42692a961d23cf4f964dcf9090f6555baa466e9c36eea001763243fb9445f210 -C = aa514e08220d3a07467c37d177ef4020 -P = 3e +K = 7e446fbf93ed19d4e36522d5d527f2c624431ff7646595aa08e8a77241f9d2dd +C = cff40486d7a64f387928da274355c63b +FAIL COUNT = 61 -K = fda00fc5fb390c55ee83f2d9cd4b40c2b6335d38cf9c24883ea1bf1eaa748956 -C = 5945e4e010ee29ce4e150899508e1f95 -P = 58 +K = 5f9b1091be7ee6151448172c79d61344f94d70aacd0c4ec9ca461ea0d5508e63 +C = 2b50f71bbfe62ed046ca96bb5079cb4c +P = 6c COUNT = 62 -K = 230e48592f696c69dc6bbb0384534afec2dc088dfbabf043ba32fbf2618bef56 -C = 4c6670673155e5a9adae4d04805496d9 -FAIL +K = 341e3250e546cbf0f22f9b90ba294499fcc2d85c5482b6e4afbf2cc054e868c4 +C = f81edf043ab99f78a54663f8e56276f1 +P = 82 COUNT = 63 -K = 8cd9d4d9628b8345d4938dbb2c3037ff4e99026a071ae97faf90f5652bbdf4c9 -C = 41fd71b14a6dba2859838e44278320bc -P = 14 +K = 58952acfaad210e3f24c34f06a569ec9db675289eb54769bfcace1657554f017 +C = 45f05af2ebe254a85234d375c6e7dc06 +P = 64 COUNT = 64 -K = 50a7e33e513abd3c365027e6280d574d3c58ead7542b97c55e362579d3706403 -C = 408efa784b6ec99dc2162226dfc3a1d3 -P = 96 +K = 871ce8a235be1ea7df100293db7439a8a72e05ee1045f5aa06079ecbd3f99209 +C = 695dc2c0ce6a985e27729844b6611138 +P = 72 COUNT = 65 -K = 6a044eda426f97accbd4314c96ee5fcc26293d779589937f0f3d6f42f7fc66bc -C = 9699643bbad0f126a12df0967e199796 -P = 00 +K = 71b5bffb9d5c7b447ba82a715f7f1f2ca74e9bdabad98cd2618cd157b4a07220 +C = 938a3b3ba81a3f69f24e18d82c9142e4 +P = ce COUNT = 66 -K = 0bd52e1ab4566a52af440696d480aa880bad3037381502d97162e38c7073e817 -C = da3dbbf0e9635a9a0603b2e1d2f4d69e -FAIL +K = a31d32532d6769bf5313b63ad29af272411ef83a6dc1d1578069e9aff552f643 +C = dfe92048e63dc2c327cf752e7b1ddffd +P = 5e COUNT = 67 -K = fefb7b72e5214ec5d8bd548e1e92eab36489aef837d5d3ac297c1d9cfd779b9b -C = 80e245a8dc2dc3b098190276f90fa84c -P = 6b +K = 0e88212a135aa57aca47efb855a661a9dcf3ac76a6db58a12d10df6a09bb399d +C = c283f95e98d551b98725da43b276f097 +P = d4 COUNT = 68 -K = 6aa197516d728f4b723c74bc97bcc9235b78e1178b35a05e5e23799898790539 -C = efb7c04b6df2e8eb9edac6748d094054 -P = c4 +K = 0204277e00fd2f6a3490d87bbde355acb0e6bc724b9f2636f9861d7f7f280774 +C = 2281eab0e8ac79a66aad32520e0179cc +P = 23 COUNT = 69 -K = 4b2f2cf8e64c6bdfe81ff894b68b57f39a1684bc172308896f9c73a288e9100c -C = 04cc99e180a9665c78a5ac1f69daa923 -P = 13 +K = 3450ac1c3a7762174d143609e9ae3b16457d7803f247e19491fc6a625982ba60 +C = 26da3b8454e49360379e817061c36bd3 +FAIL COUNT = 70 -K = f9970019ac5060680605c64fedc36c9eca67368ccbaa9034981fa1d6f2c9cec6 -C = 1469b8e628e82a1c8a1e55b3993babd6 -P = d2 +K = 066251b3be376035a9f24836bb1a34c04c4e8d8c61d98c4149310713dba78ae8 +C = f83ec412a3d99728fdbc8e878fa7b0da +P = 17 COUNT = 71 -K = 5796bf07e53b6ad4ebeb2c6609c689062597eeb0c2bf326b276fc735cdf66641 -C = 9af43cda32c46bcbc6fb91ca428103ea -P = 01 +K = d42a79626ebee33e038ddfea4f4394f2a2c05cae5aa9dc4ac88bc4f7b9ec2889 +C = 3110321fbd582025b72402412402268a +P = cf COUNT = 72 -K = 9217914eae66e1e20b65470cc57a44aa3c465bc12ad4b856e3d0d5500621f588 -C = dece0f3b1dcaac4877ecc8dacecefc22 -P = 4c +K = 167f0977d40aacc9229dd7cb3f2746ba8d9d5092eefb079ee543f263ff2cc965 +C = a2f76381118d0a0b47b097ecf7677924 +P = 22 COUNT = 73 -K = 03dfbcf730e437e61638df1fc0bf705814f7c552673e07de04f2f649c11e1385 -C = 9e318adb9a918e8792e06ca3981dc590 -P = 70 +K = b70c5bb3c90d1dc9816a186b249ceb2a185f6fc5bdbf01f95453a207d78c6702 +C = e2d8931b4856ff62eb05c4c9fb87d97f +FAIL COUNT = 74 -K = 49762cbcb60fc1a17b565d2a40e6ade45903793f23c26c912744961f7b2943cc -C = dd5d4f900bd76054f7a3ed740c30eaf8 -FAIL +K = b3bfecb6bf9ecd231b3db189911b0b9414c07fdc39495370dc3281b1c2080b3f +C = c82d4a03dd0dc14f0de39b8b14b6d781 +P = ff COUNT = 75 -K = 4220bd94ee81a1d12d8968cacb3b24854c0900f373460f065b0a92308227c85e -C = f0a4777079ae3cc59b1afb0a9e4b6f76 -FAIL +K = 4e3645840e68569714289392251df83607a59f33223526676ab246cca47bf7f6 +C = 96e54917556ea18b96ea94f7b9d2c9b3 +P = 89 COUNT = 76 -K = 7eb24c18a94cc0d4e4e4b50aff299e9c452172b0d9ea1ae4d56809394212174d -C = b56055feea4d092500923ac8da45dcdb -P = 9e +K = 02d5dba1993788e168603dd3ad553ef4b54dac112a10b38fec1f9869f1bd99c0 +C = 3d55d66d6d9f28407b3978724934c152 +P = 52 COUNT = 77 -K = cbd0e21f263840908bf1edb997f90ed2618f90dadcccf210127db6076e2648ae -C = 06a514e033e77eb6768ecb48d47030af -P = 54 +K = 1e29d60f8d75a66220b8c73d609a60f055a51b98eb4efcf7348acba4998cc721 +C = 18c35ce923bc7b7705f407a6cc1c3c95 +P = b5 COUNT = 78 -K = afcb057d37c2ec085673f0e608985ba7d17b64c459659f6eab8c1ca177284445 -C = ebcaaf03f0cac00d0b450495ef3328cb -P = b0 +K = 412b2b33e46b1492a96b296b1ed2dde1263e6a893e78ef71e966a6e62b8b76ca +C = f1813ce97610bce784dce29a96dad063 +FAIL COUNT = 79 -K = 6cd6207f6d8515528938b065ac8af1ba96b4878c45ad728f1a2a717d78970fbd -C = 7119eba0f865cf5a3a9e0d23f2a63b5e -P = 1a +K = 89d03fda6a473c96675c4d2fcffaa928f419b4065936e51d38471e249d3830b8 +C = ce50c37677aff8cde2bc0732df7dfb42 +P = ad COUNT = 80 -K = 38af6b19bb23ecf3b772574d6070fecaedeac20fbe8efafe9bc746b3caf525dc -C = dbcaeb8f4540d30cd7432ea2f00f7fc0 -P = fe +K = 422d7319f42969e6c251fdeb25547558bd137195e802e7b94abde8b2ed4f8777 +C = e38a2d1e736f0293ba0e86a283c203af +FAIL COUNT = 81 -K = 731fb04b80f57f30955e8a45e3ffd3109d0c47bcd20e0a60750b9b15c349e1f3 -C = 44adf0f636f301b91334394d32f2abf4 -P = c6 +K = ca5a0df91f91e7866f1a7b53e5e3679c139eaf2dc946b5a55e16ea50a540a40d +C = 15cff725ac6f3256dd4bcd15f7a83cf7 +P = 1b COUNT = 82 -K = 7d9cba2fcbc384484a50a78e0f61f0ca0205e162c525dc2eab06ff79b0fe17ea -C = 1af5864bbc1905ea6588f87080b573f7 -P = 09 +K = d59a89d4c881a31429e04aebb814bb5e72e2e31aeb5f4514742fc1e5cd46bd85 +C = 228233cced78bb8460f34a98d237abf7 +P = ac COUNT = 83 -K = 52e5c5ffcd065a128b94dcbda3c78e4e21097db38e010e7071bcc832af0d0341 -C = b2980f324852306925cad2ffa930580a -FAIL +K = dc045dfdf2f11076d449618351dc3840efa917b33042bc1a968d9eb8b29b7cee +C = 739fd23786295f5dd46a14804029c5cf +P = b3 COUNT = 84 -K = bba9851e2c82477cf2cb8854b1c2a017747243d5f55d0bee87693732a91b3a66 -C = ab2d48f5105ad129999b08e4b01e5e96 -P = 2e +K = 8a1514c3851fdfbf8c0244722e34224386b31992a7e711666ebf9353e4583fa6 +C = 13f541d76421f7e8a95206ed8bd99c32 +P = e7 COUNT = 85 -K = e93e990c726fa15446f62105fa63b0168f1450da596b7789770e45e709e72f55 -C = 5062bfc7d9f841c8d898d9444a1c0c36 -P = 64 +K = 0187a363f79412938a18fc88df7aa22929f3ec32dd6e8b7c5bf1075a24a83faa +C = cab79f90aa972d4aa5f6c588716e8f78 +P = 02 COUNT = 86 -K = 266cc44ec36547bbb7ec26c8066f493f95270837ebd7f1f77a74ce559e1a1a57 -C = 4c6f17cd7abd5f251afdce9907904422 +K = 071733698299f2076e68c702c80d118d5445505e1cefec2d7d1b32b335c973d6 +C = 1a446541c616227c1f6442c1c586f835 FAIL COUNT = 87 -K = 6aa07c234ee49d0d583a9550eed1c6ef3bdd6b81c8719860c61d90ae030c3d98 -C = d506ec87c4e48e460afd1709a1a51128 -P = 2f +K = bae0dd1f0f680f3d3cc09ed8eed22766671aebf833ab164e089e73367546d3ce +C = 01479f05902cae1bafb239a11188f2d2 +P = 70 COUNT = 88 -K = 31d64603df44bed1618c5317fa532420a17708653d4de29561c3ae54414a1765 -C = 60390e8e643177eaf69e958a7bec3d77 -P = bb +K = 51a10cd57d199a391170d2798c79dae5380d54b4df62c272fadae0fb2864a19e +C = 0fcde1b9218ad3577f547645a7b85b88 +P = 2b COUNT = 89 -K = 6bb145c029ffaf2fa5d18a094067490dbb2595136442959f2f4fe788d8fdd474 -C = a4c3d27e736629f0af27711e78d534ef -P = 9f +K = 62fd47d0a005cf8c870122b773c97c1e0c3f8e7cf4407af7213647aa937a1f60 +C = d97e9985d3ac1def1f18f9f17718944e +P = 0d COUNT = 90 -K = e66d39ad9b527d6e84b791314567a641a852a9f45eb6ec3babb6dbd72f7b5d11 -C = 35c20202384705b9c26592f876accf8f -P = 7d +K = 14123afe71f58d3dfe642d2d6c8425b815d94d26bb892aaa3376ab6d4e4ee395 +C = d25c17a16ae69150619c28ec50c1d970 +P = 98 COUNT = 91 -K = 980f05ddb7f8da0a984b2fc955b1c48fb08e9b3777f034af2b02331a77c39257 -C = 323295d19f820d5b732bbee539f4f45f -FAIL +K = f246d38eb6cdd4a3677a37a90d509a72a748fa0a3f61d011a6a0a7de712948ea +C = cd5ea9cdb087cb2c832cd685c0d6ba51 +P = 56 COUNT = 92 -K = 3f33c94d790a3024da7e723c82e550afe0daf68807d95fef186de4e285a20ab6 -C = 3633cf460f5756ddfea9ec32f6b9538e -P = 0b +K = 0497dfc83ff1b3549b8e31b72b4b04f1de8ddae35891201e82d59f01b4c85fee +C = bd15a0f3cd6d6f9c988281c651ec8ce4 +FAIL COUNT = 93 -K = b0230a7f8b0e8746413b2f957fbd1f79f61529ee269373b0b257be2020e6d5b7 -C = 577c9b8d41cdce640947a9ba848a18af -P = 49 +K = c3a235cc61ac82b914ff3252a113ea3acfae0b356cfca9509b5d7bf1b0657682 +C = c54c7907b294a0775445c52f899807a7 +P = 1f COUNT = 94 -K = 58cf0d95f2659e66ce04a60e5d6cc5bb222c537ea33548f657e44de4e158726f -C = 8455f21a1c15d4e74a27a086c75f9cd9 -P = c7 +K = a43878554eefdc3ede0d2c5b57497789d3d1007bb832809fb65b640535859eac +C = 679e1ad408422e43acbe91dc3432b5ed +P = 20 COUNT = 95 -K = aa486f7aa6177009c80bd2c5349d8692d87dc83c125d62f3815e2156e50f7c6f -C = da61fb11c4e67218a43dfda5fd9793f8 -FAIL +K = 3ae5da3ebd1c9d7b065c25ea5f5146d88b4625b9d06e845341e0ef352f6d6c0e +C = 5c3a2cd932cba0be6173df60015485e7 +P = 0d COUNT = 96 -K = 566b5ca9e4b22509357c68df6ca2da73f9ba1f4a16828ff760ab55fadc92b37c -C = 94ade6653222a0867c3c0332010997ac -P = e7 +K = 17c1cc04f4d2616677c7d1011a6e4f1c577c660f9c51522a6c1fbfbded950152 +C = 068cb31000427c350f402c6e7d051e90 +P = b2 COUNT = 97 -K = 1b80ea93756bc1ff6e18662b2413f579849877131dab15d93d287d91fccd5241 -C = 72f2ccb641087bf8c318255ba37e1a29 -P = 38 +K = 52b77c0851dec4c58c860c2ed95c4bd61ae93e462b0122d4f380f0164eb0a755 +C = 5dd8874ae8d660cac76c4a29e0c5c376 +P = e6 COUNT = 98 -K = 72cd43efaaa9675842211a70601f540918a18a7ce8c1f40ab8a3b2089c074d02 -C = 01c118c61b84e22f001f3db387ca3bce -P = 04 +K = 748f97f34c6bf646a6095aebdf3583b39a624d36e67bf81acb2a564029171168 +C = 26848bbebadc4af5cffe117f77d9ba43 +P = 0a COUNT = 99 -K = 40b0ddaeae5f52c502b6994f55e3ae94dae648fe06c203f62604ed39db70b9f4 -C = a509fd013616d2419fee8ff0394ecb30 -P = d9 +K = c1bd9f7aa8deb464ba4d82e2450d6bc0fefa64a91fae4472cea76b7ebc2cb01a +C = cabe347d3aaafb05a23bc69f045eb9c2 +FAIL -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = b63bea8a88283ef11ce1d6dc624cc4a05feb76fa668debc74f83bb843b1bd54a -C = 00e017327d858529583b0915554953d8509d725b7586d02f +K = 398444df32841be9e699c64faa92630c834564b8384876dceb471c4056fc8299 +C = 30032c9a3ed00d29512d8c725fa86a4b FAIL COUNT = 1 -K = d46213ef637b3fe0363aa9eddee4fe3b2c914324b4c3a4c4193d5c590a53bae1 -C = 33ba3a80954173012ec64b82fc89615fa7847c6df9d0c33d -P = 20ffd74d58ab96cd5c +K = 96503e950d01ee1664de77ef6c0108aea2cffcffd0cf282e58a3fb982914ff9c +C = e5fa8bf0919d5a7163f2af43b3b549b8 +P = e731cf7c44ac7722 COUNT = 2 -K = 8e2c44d21f87ab3534fce4898c3df46573415f78ad1161c903132308e7be644c -C = 37920c6645a7193db9bb9f8df255a6450916de5a831f1eca -P = c1bbebebf4a18eb1e3 +K = e154288c434eeb0879a793cf51f1912d691d430a196f33703b75cc68e8d599f2 +C = 137f74b5bd90c57f140a1515140f2b6a +P = cf14bbdea4ac6c6e COUNT = 3 -K = 85b5634ae638c7d693b9331f05ff6acd70036a020d24468e004547b30c0ec790 -C = a494a379ecb5af538518c862d89d1149402411abe8f35924 -P = 4e2f9349da29be59b7 +K = f7b67e640c11130d6e3473a0b6c627a601740acaef85a9fd83c8df5c66209f26 +C = de6f47ba1ef4ed3bba52e5119935a93b +P = cf807d9a67671675 COUNT = 4 -K = eda09dc56d10d276cbe70b81d01ece650becf9d9f75e55112f4fe6b8f0450344 -C = 83a37fea917b09ce515ee41e79f89312e3fe7d0bf6680dea -P = 326fc669fa14ad6f40 +K = 08fa129ddfb17fb0e723aa3eeafedca7d228e85b30319d0c71ea252a3f5e37cc +C = a8f60aba373e4d4dfbc2516d7d6e44ca +P = afa88e4bbb375767 COUNT = 5 -K = 9f8c054836f58eadf9090385b96f118263c3c00840d318ee0b90375c2e0ce4c7 -C = a51334e0285dfe7be7acf239e52377c542839f3d2d74b42e -P = 9356a2776cf4deadc8 +K = 362586d516d38e4d58b50a441443e75064cf6d6cdb6420862932ba7b0480b0fd +C = ea7ee0f5af3a271a9777838ed13c61af +P = f1b92d0db744bfee COUNT = 6 -K = af5077ab154af7afc38c1caa80e57daf9316f782b171d51c4302fad47ac92340 -C = 51b5d5c0c3e6d47ae82b1c2ff2606eebc71313bba0703231 -FAIL +K = b34af745ab46823e3583c37015b0ff203fe1e9faa5c19706418380bac490adea +C = abe7a258ada93e280bef5fda934f96e6 +P = d6bd4cb0327eecc0 COUNT = 7 -K = c94fe2afe05e4805a64029537b8846e82b363c672b0a7d819667e29775963358 -C = d1ae8e2927447212d894a9c332b402157de0766a7d2f5d8a -P = 30ed291788e9e1a65f +K = 3f48f714cdc29eeb0531e9bfc74ffaa7d9288ab87abfc064c519e44ac4b34e8e +C = b669c896030ee0dd1a6dc6f3a07cbedf +P = 5ec69bb549172178 COUNT = 8 -K = e6d6b70ef696a4c669b677c5514a9d252e7f9e7eba904d2032f88c9884b42998 -C = 8e0385cae6f7f09168e95c120688146959578bba37a42e31 -P = 9eb0f529353e8582ed +K = 532b4699bb0a97dc426a511a7d0fe70dc7ba163106775677a5b2d75a4d5b93a0 +C = e1e64a6bf74b137522e6c5f47ca859ae +FAIL COUNT = 9 -K = f12cd9eeb07af220d641c0aabba48cb637a3b5971a86ecf768d8107bb8bb5fec -C = 8e4be7b306fb4383fa81c6bf64e4040e3b0801772e7b61f3 -P = 433ba46834b27393cd +K = 55013a8d41e7da458d934943cc7703e5f77c9d263700013e24ce7de8a90c5824 +C = 24a5a66848b2397bf96ed13ec3919c05 +P = 8818cc42565b5a4f COUNT = 10 -K = 90199763dc91627b20761b1630e280072fe1a4c1317ed24abd355d9d5b8aae91 -C = f11f7dc92d5f24cc4c78d0de8819533919ce669b912e9edb -P = c235e95cc5b6a786b2 +K = b6dd8ef1fabf5c9d9af859acc2bbeace4649c5aff1ed7debcda342fefbc0826d +C = a6fc9df648e2f860eb8ac940450dbdf6 +P = 74414e633d0699c5 COUNT = 11 -K = 5a8943f44154a5266509d071bdf2584ba86db17ee7df5f8d7d1856ecedbc6a21 -C = 195a1878f8cd02c28a772f513444ec837235264fd65519a3 -P = 19cb0faa45d28d7530 +K = d953f5b7d5ba3aa3877b86f6b5951b62b5154b1c878ee81e1b647c27c68a15f6 +C = 97e632890487b78d4503216d4a10c92b +P = bb6916960e3c302e COUNT = 12 -K = eccc288db6871d0548a26ac27809955784f74ec523a614f70664e82bbf1b26a6 -C = 09c7817fded6b76aa03f77991d03d9c97d502b620016084e -P = b6c5fa672c08033e0e +K = 5be1044bc6e8c031decce4b259c7e1ea38ad085a74702616fde845d4ebde49b7 +C = 13674311f22687c461589ab34c8e35e5 +P = aa4284a85a72116e COUNT = 13 -K = f8e4a6df8301a085e90505c56035e3163f4c9b54849093a93df307ed3b7e8958 -C = 3d427fdd3292f576a44e386add6d976c3b75fdddc9c0ed36 -P = 611fd4f13945475127 +K = 5f28c2348846439861ba290b9a32e7fe5340045a4994d4b122fce5c1977ca2c6 +C = 617b2a1a29bdb02ca29817ab9390362f +FAIL COUNT = 14 -K = 0f5336fef03fd1db01e5feade189d49b71828e554b199511458e85aa5a4e7d36 -C = 0ad058e255a8d0d70a1a420c2e62db8531fe392957d143a2 -FAIL +K = 7c343faa5d68257f37c449b057c7c856b55919914306beb6758ce040cf5e28b7 +C = 64277509b14f8f3d6e36904529e4d37d +P = 5eb5e08ac89d0c92 COUNT = 15 -K = 3b2cb8f32f8f4928c78f16b3bceb642965a1bbd2f5d89da0a466a14e8c5cff1d -C = b35f680774e6126d80ed723c71c558f5d5f3c3cce59e064c -P = 541911d6c580226a39 +K = de22c381b61407be22f0f4191714316ed4a1c50373021c9659108e103229918b +C = 8ee4d6a414301450f3d1142a2377c1ff +P = 826312cdc52a6f57 COUNT = 16 -K = 020b88c1a6f2cb420275eb3769a57c9ecabe87545d90969aa9a1a6aefbac177d -C = 2706b036585025e61c150f4d3927d955977e7d91e9d126fb -FAIL +K = e89e9bd2b9880d50d66da6abdbcf204f342d63e13809f59e984d8c4832515092 +C = 4b4dd350c31278214492525220f84b79 +P = 5555c5b96a882eb1 COUNT = 17 -K = 68a5d0947f22377322157523150b359c9219c0fda8750139f4a1ad5ee9bded53 -C = b8a006a4f66e585527cd6a8322e795638d6043e1e999b5ed -P = 6f17e2acda39f1d85e +K = 74cb0549c83449895b667d207c84d031d676073d7024ec7ab985390021c7bda9 +C = 7d901f897c558cf5cb43c98159a1d486 +P = 1e34ba59132230af COUNT = 18 -K = 2b4df41d900cccd083f30a525df518badd6f393bafc8f63d80809ffe171a6040 -C = c7590c50e6f631c2e6a2d8e66b2bf40f467f08db43d2ea8b -P = 4d52624af5f80814e0 +K = e8244e6c3f2998055d1192fd8202d81b37908f91f8b90a4e00a201fc2a4d84ba +C = 65f5cd645e8d430ee35f7aa59754fce3 +FAIL COUNT = 19 -K = 50230ef4a3dca8919a46a3797e56a6521a3afeb3b70bed0c53f77aa37d4bd8a7 -C = e7e7c446b645d89c56dba89746e068ae5e3c76c53fee6334 -P = 8499cc10ffdda3a29b +K = c1368107c75312619a5d839744e6c0b411f78a5d3f1f3b7a3bb10da2d606dc91 +C = 303c7f35605cda3962364e32af96fd80 +P = b25587b43e0e638d COUNT = 20 -K = 08b17265e225a54fbf24c1cb5de78759aaed428bf6df7ad78a0e062088c37d54 -C = 6f42f7c060500cd950924f8323e3a6d13276d5523aef2c1e -P = 2d9eb7615375d9fc71 +K = c2aa810619499c9099f1a3ef5550f9b6fb138817398faad429403a5ae31128cd +C = b915581cd71d59ecccec7b50a80df982 +FAIL COUNT = 21 -K = 48b58e1b60d8098956203d8a2db0de24a177f5ae18717bd2edfd05a5da5d4ddd -C = 79d4662c5b88fbd289524c9c700cd17e60a8985510b413c7 -P = 05094dbed5bfcd687b +K = 8358f8f37104613a97fce384c51b1d802ef26434cc221b65b69e427e2cb94ceb +C = ec593950ca72ab357d42c5fc6185bd2f +P = 78e407d4bfd8c630 COUNT = 22 -K = 3fddc5448e2ef55968b177d8d80938dfd9130e8c530a37976805e0a5ac339c55 -C = dc1bc6457b9d6ae59e39291908e2d5e8b84cbbcecc46f72f -P = f021d82f2f58d27133 +K = 96374b8cf41369801a8f4e27055220aca21f767fb3cc158dc3bcade05c50baba +C = 4ad73dcccb949590345b038b62f2ef9d +P = 53b69bd69b845691 COUNT = 23 -K = 805e3e6311d2da11d86328f258d260b6e455fab55ba0908b933c5ff25687719a -C = 4449df3f629f527f0acdd23e4ca0dfc5766cd249fe76cb9b -P = 43579382f040097559 +K = 7a18063a3b9edf773a5142f07163381658b0d6f2e9d9f6ca8cf66666a1a75a5c +C = 44c8ccafcb9ee22d1fbeffe409349c2d +P = 1837f42870e42315 COUNT = 24 -K = 147d00c0f342b5492eb429a75dc1dd7b8062de61afed91b458abb1b833dee409 -C = d0dde8ee9b9f074f2ea91598f90ca7687f7e744b300ec3ab -FAIL +K = 542a1c65e0c0c168dfb98bda740a2ed2c6534dc27539c7aa1ca4a8ba6103347a +C = e244cce7a70fbf73179207e31b689236 +P = e7822eb5b158d7d9 COUNT = 25 -K = 44b103a28aaac445f727bd9a3247ae4db832141f1e39097db054159e26ce9405 -C = 27b290d66efe26239a682157918eed70a8cbe6977a5a0404 -FAIL +K = 589a59bc27201069a8bad4d4f0590b69b27c94ecd8fc93bda3c16dc3605a630b +C = e5725c6dc3872e9942b59e707e3e9355 +P = b8c8858d4fb99c70 COUNT = 26 -K = 2a7450d23f2998e0e7011910f2515cc852172c12c93087ff9d77b151f0f8c0bd -C = acca5df403925642ffde3a422903dd28e44d560192daf2f8 -P = 2f6a0e019254515231 +K = 5d3f659f0a187e75e7faffb35835847e87c8a91471636e400adeb742038e27c3 +C = 7b313bb521b799b5aed51a3f27e3bfed +P = 445b3c1768d19893 COUNT = 27 -K = 3fafe745808f90a22a09455fb9351ba1a812ec51762512fc19ef87f20e2a4a39 -C = c346332491910b4ac2bedb585e44cfc70addfa9157fe0079 -P = 6c7e0c013f9aff0744 +K = aa6afc732ac7e9414bda3fcf6c496966395dcb5d1a3956a381b78f113f13024e +C = 714897fede249afb132dacc74cdfa2b9 +FAIL COUNT = 28 -K = 11318e1bf052afb5b62f0eae4cb774b902ed4ac6200bc0b0246433512f33df2a -C = 33ead9e403ef4a7d4f8df640e8d688d1db7e9fc746132425 -P = 05d50ee46aeed7bc0b +K = 47371482dbcef1960bce2cd10aebe2da9155f99f421bb05f2d6ed02462e03f8a +C = 40e85df25c5c4408573525f3db48e1c7 +P = 3078234e0fd24c3d COUNT = 29 -K = 70566da3d6795e23aa0808b0e82d7c8886b0bca7aa4cc4e45fa45c8bfb058c04 -C = 3aadc7274a378864f9435db622e331b115c4bfeae8d997a8 -P = 38f1b15bcccd82c01d +K = 81683b1093487e7f53993b1dd54d8ed24f6387e9d7ac1ac2096a631bf109b86a +C = e365114dd6e8d1374ec770469d78c1c3 +P = 6db52f96e1760842 COUNT = 30 -K = 98761fa055903012d47c6f54e0346dda1699c5a71c1c272ccee782fd6f2f4d43 -C = df919ce72e2ed8c91a8bcec077edae6498436a5bbb9f1df0 -P = 40a7c2bec5c923c123 +K = ec23fd60f5d7e5ead30d61b9a153b0c6795173a31ab695df39b420261d2e72c5 +C = fd8b32102d362ea11d036f8e8bdc43b1 +P = 37accb9330fdd2e9 COUNT = 31 -K = f2d5a9aac8285ae3b44cdd5e4d0e81f61daf4669f392a867c191329af1c00726 -C = cdcf09b7e3d41bb528e87e201b083ccaf1525e60728147fc -P = 729f594467d4265126 +K = 97c837135be151844fa18ae046a63a387bef596f92a162f1713097bc584ec7ad +C = 7954133f1cefd595f090c9f4b9450768 +P = 6ae44b4ce6080b34 COUNT = 32 -K = 582800a584a5fa122be6d21f5ec4284b855d575163c883a2cb7e9630cd3218dc -C = b0f81d0e2464838da9405c90c5af245dbdb294e955a5f6f0 -P = d40f3062d10fa5dfa3 +K = 2495e67060098c42046d1c070f0e956eb34962e450bc9a2facc891f09374f0ab +C = 0ac5eef66b721f53d193c07d76d6e0e0 +FAIL COUNT = 33 -K = d2b5ad5b8ea81deb4bb39ac6522dbcff95ce6c8b2e6f9212528ffd79a0e6dab5 -C = 0569e66c87777923aec89052ecfe0b7e8fafc2546dbeda48 -P = 4c339bf71af9571b0c +K = 8f927c852efcb5d02a74444cb189b1936e2bcd6238ab3db8f38a879a9815d11f +C = dd7de9c555e2ac4e6ff3e9d63106908a +P = 02bdf952e30010d4 COUNT = 34 -K = 11e80978f268d0f9592911568e3ff37d4942082837dde50b106499354b5b9ebe -C = 3c9a49d1a5d902d41603dc5e744b001e72edf56bdaeb3755 -FAIL +K = 45cd17fea0756395d53e1e65d4ca3f601a263c9aed2559356659936172b868eb +C = 2f45aafe5de737fd23d6220037eec07d +P = fabf1ef07c3ac950 COUNT = 35 -K = c97ab6772b25574b68184a04b25c36d46cbcd19c86cf81d167e720288f773b63 -C = 4b34bb9bef07c3ada0c041c1e2d56f93ee629ff4c663517b -P = 92828ab95ddbfa4a8f +K = 31fadb10d83685f9b1b2a0d1e1973303e82c7aea6a99e025e34679ec88211843 +C = 05c76918a015347142cd1514078aa562 +FAIL COUNT = 36 -K = 5a1112a34945f27b3957ae7164af6e7ecacd8cf3c1a9e8149490f26ec5a7da88 -C = 6dcdac46427caae15b1e1022fd6cc60e61d9f24a1e0ac662 -P = ac75e4ba5c48e7cfa3 +K = f3a122cc6bbab398f395140df612a1d5f796b6fc01e35071407227463b51cb7b +C = 912ec5824496f3ad8989ff0b37e7cfd8 +P = dbcfe69914595a72 COUNT = 37 -K = 1c6e4edbc702745fe8efe7b815361d68ac51e054403f959b708025fd218c4a40 -C = 827e7eb79524472a43a67bde8a6a1c77043ba8edf56febd2 -FAIL +K = 1a353735579bb76f56909a42a73fe2fa5f4ae059bc148fdebfa30052a880f312 +C = 9e9deed35ffc4786d8666d79d744c570 +P = e415662433c1800a COUNT = 38 -K = 377b9dc807ce2e0583dc8cb941879586b9d7da055649bf38c16e835f95b915db -C = 15cdc5dbfc15061fda145fdd61b1c3bf4df19dc6dade20e8 -P = f862a0935e1e84c896 +K = c50ea2b257ed5cb31e0952660342fe4a9dd8cba5c479c0537db4c16aa5132fec +C = 1a100f49b724740375c4e1e93287f68f +P = d453866b407ea54e COUNT = 39 -K = e36ebd3e95ae93f79dd1b893c462cc0b49c7246537a054027a098dc6aa294608 -C = c951b502c4f4d56a291802514b9ac6c4375f7896df5dca1a -P = 1f925569e4befbf707 +K = 777e0e210c58055f71fa401c3850b6ddec2cabaabfaf3694c6ec83bc48f3a64c +C = 931fc677541d87d925a4cfd64e884b91 +P = 73e72201414ea922 COUNT = 40 -K = 1b76757b9a4b4a5480bea6caf1b4f073ae9ec1a77d5e5dedf7cc9c2a5c645dbc -C = 20c89e87929eb461da01eb343ba645f1ea73ae0052e4c6c7 -FAIL +K = def292db26eda7c9cecdcad216fa88047badc99e434f64246f4b5e41cbb83628 +C = d8e738f17021e626ce02678c9c0b6015 +P = 1775c5ce2251ebbc COUNT = 41 -K = 8385864d6130db52515c6f7a8bea1de9a1d85b0f849c34ee4f0b19472ecec4cf -C = 1ecf0c9a4abca2460f566ad4bd98b8f91ba599b089af2080 -P = bc72fb9b25549ac595 +K = ae6ad0b0034030a6707a9ce572b26b2ed04fa142a864e3069b2882c01f40a02c +C = 70e2f12f534ac757bd42cd1261eeac0b +P = dce7d5aaa315e129 COUNT = 42 -K = bcc84d40c390d3317e10bd239d6c7f85252b6638e79dcc95337c385e62484379 -C = afb45feb3deac0129548658af5020f665ce340b185d27ecb -P = 7d597c8356a9fa2830 +K = 3f70eba7e4a80ad6d285c0c4122b03f98d9d542bbd8e763a3e92a348b698d0b1 +C = 9222b22f47111662f766fd93a6b496db +P = da046035c8481dd4 COUNT = 43 -K = cc48b749959bc5a49eb720f820b0443e3b1ed31b2eb89f3ad574f68c11ff0cc3 -C = f3e91ddd627a3cbaa64e67c5c29f46753265a40cf5569828 -P = 82d5bb3d63c5bd75ca +K = 2e614f801d0706f773eb8c1eb423954944a4e3e3a37b47ac1f2dfe769300fec6 +C = 96825a51fd28e66c402b5569f34749c9 +FAIL COUNT = 44 -K = 53902000580c202bd0eff064b43ed3d0937bf147f97578e7a12e041cd23297c0 -C = dd7a4db8b3c61acb5a16103ce73657ecd4950a0561d8db84 -P = aa36ef2e9947273d54 +K = c2f1e58a35802c84220fea7250f8bcb2c1c1a0980021c6c69f6dcde82ac5662d +C = 9323d3831a081f65a40003c16fba4afa +P = 8df8c539ec286120 COUNT = 45 -K = 435a7fb196522810d697b840ad743affbdb9c75f053779872b25d5dee34eae1e -C = fa973e36d2e6dc4645bd7cb7e6f6b482709ff0fc6ef05bf6 -P = e221060b92c4a6efbd +K = 75e610012336f6089f3174326e32ddcef90f633535c75ee0c2c0506a4606c1b8 +C = a314c7744e2fd403ae1e65fc7c022f05 +P = f0499e87a8af61f7 COUNT = 46 -K = f8a873141cb387c7860862b61aba254b18b4f238f49d1ee946d1dc2ccd66f2e6 -C = 471b9ee0218eec77b47d07d2647596f16018d72651e801f6 -P = 58feaf606b8c7e5e58 +K = ef25e6dd9e6b1a25d824413d7894f0e9a79fa9c677e8a392ef19a02919cf3ca1 +C = 2aa2278b09a22c046f6157f40792b1d1 +P = 97981425f00bdc6b COUNT = 47 -K = 9ff6e615d5658578778c7949b4fb6e0c9d97859f9f130a4677e591d5f54058c9 -C = 58575757892059a06be8da65143972ee52487d9d9bb23d5d -P = ba61731fcc16c24917 +K = b00f2e5387f2dc7272d41d6109bdb212a75d7d188a3f4b09aa9465bc4e4f9c4a +C = 807891dbd21a6df4d2fd9b338e56c5a8 +P = c2fc0ffabceb0ef8 COUNT = 48 -K = c3401c1a70d8e698f52d6be178905f73fa52c6fc0d64cd9ab45fc3cba6c1b001 -C = 5258d796818cd8c2161d93416da014ef062ebb8c72bd9049 -FAIL +K = 79e50448b5d011f1e9e1ebf8931066f66d62f9ad5031ab163e627ce91b467906 +C = 07e531121eec39e7e75815646dba8e25 +P = cbd7f2341ba535d3 COUNT = 49 -K = b780b85a4b463ac416e502f23a8338169e99d786a7f85e0e2c7b0ff10366006c -C = 01ee797c217adc649f2de32743471e8706770952ae277539 -P = b3de9e61256c0e00ad +K = c2a165bef39f12faf8a302e0ef2cfdbcbd29989735a07593c025b01d10f29698 +C = 69da6dd9b509c0b739f3b373575ad060 +FAIL COUNT = 50 -K = e59f93c996380c6cf3896802dc2e63fbe34e7ab26d2d4a31dc9fde1298ee921f -C = 2f7c17beb4f211a24f2a1d2da77a9bd8e9ac5522197d226d -P = 75b50097072e9f9866 +K = a0ea987e130d550e0c3de9a6926bed2bc2e2ecf4f2ca84c660d42a2a42887747 +C = d1acda983866458306bedd44e27b1b1c +P = def13c063badceeb COUNT = 51 -K = bec76500cde69eb2fa835eb7c457b2420ac2d4010de44a6a7ea57f3b3ecf1b52 -C = 0041a594156e563f5de716ffc040c33d14a11cb7b90b5892 -P = 792f544c3b204f74c0 +K = fc22bd7c12473c0b77780bfe7f49dfb05cf6ca15a5e849da2bcd1e1782b688ed +C = e3bc549dd0bb06610c59043fad0ad1f4 +P = 68594a11e5d244ef COUNT = 52 -K = dfa9177f99e05f27de742d1efdfec18658ebc8c4a21d75e763faca4face82775 -C = 3024f33509654e4d720b10286a603f07ea320ebc73691f56 -FAIL +K = 3159b30bd5bc85569ec56313d326aa18ab60723360718fce66fc2005f6b88336 +C = 2aba5c3edf40d9973850ac96b6b26be4 +P = fc53abb0164b413f COUNT = 53 -K = ea06e79d28ce15600b118b5c03724a88d57b63d4c5100c8da0ea97843aa12b4f -C = 81e9752ad5523ba201dfc66e6a306341e0922cd4a0850cb4 -P = 851debe0f8d46ce6f0 +K = c17ef08142bb352f93049926a784b0d674f968269f6b839cae339af8d825523e +C = 460384fd40d2d9437b96ce024175c6cf +FAIL COUNT = 54 -K = 0c23857025fe38e0fe61ac75befd90f6d75a80b1a6bf3d655001f139d581af94 -C = 332e86ab0425a32de2dccb9fc9f07bb25884dfcb0d5081ca -P = 9930c7b3e1fc721aec +K = 374edf2ec37e98d9794bcc83ae8caafbf767c5ec2b4e42596b4261b2bc51f5ef +C = 523968ac59e5a472c726c426c67f0bc5 +P = 5d49c61ef9ab2783 COUNT = 55 -K = b2ff2471c05cd5b481d2f146f455cba7b432197a222646766783757b658045ad -C = 5a59203515beb5f490840d542775078e0d267f5fcb92d938 -P = 530a290d4a9e1de937 +K = ff64595e817b2b8abf42990cf62497a82c22c562c1c20e79ca0443f2d7ef5510 +C = 4e290976ee1ecc492c15dbd4190d6c0d +FAIL COUNT = 56 -K = 69d23f3668d9906f5569feb9a1474a1cfa193bfc3632216878e716058c0759f7 -C = 385fdd1277f942a129e7020d32b213f7f39c6abe9656544f -FAIL +K = d7b7543502dda2c11b4ffbbda21d97b98c17c21526d857efe9660566f5578a07 +C = affc4be2b7f7a401366ed42332ca0027 +P = f3c1fa654c784d06 COUNT = 57 -K = c856fefd4c483710ab75be4ff135b20aaafac326582e3ecccfd84304e01ce9a3 -C = 1c06693ae7f8a5e871a1b10d5cf2f445cd2e7c7008f78e38 -P = 90b9e9bc82d5027e46 +K = 9f44dd367611de39a34a4d8389bb44efb8458e799c15c8c2496046e104201f3b +C = 8567e37c0b552fbbda5af8e9e28e72f5 +P = b752c60b3041f23a COUNT = 58 -K = 1c2508fa8d89c3f991d2ad82506332ca800f97cc1e80b46a5c468de884c3c3ef -C = b18db5fa0f6b44db413a9380f6aa50d3a4a7fe9bd62d8087 -P = 341b4a863d8eacab28 +K = 150cf5bfb1717e4a2fbf82210d39ce70ddf176f307ff63a5adc95306f5017bee +C = bdae7639c495c6e439beb94d7974febd +P = 63686871dd83d766 COUNT = 59 -K = 22c70cdfa5a0a7e5e2b10d22513265a78b5da656fbc9af0f60e15c1d0da128ae -C = 31274ace300a0cc0dcc76a96ac774bca450abae9865acf27 -P = 6530eb0d4ae0e6dc10 +K = f608b1db71cfa7a8f545670d9b2d2bf786963146d3f75a9982fa2d2e24344f7e +C = 7538e6ec7e4caef2723eca3594b0bb75 +P = 26866c95675bd92f COUNT = 60 -K = 45ebae33ec0f256848bd8a077c503bf89eb236dc6e4216767efe4de96c19f9f2 -C = c8bd5d52a38c3de79975e55dca46f267178393b71260d792 -P = dfcc23d1104cb3e1fc +K = 4efc89702895be73ec8e5acd29040b09fd3568603ed2f824715c06178d3ef0a3 +C = 6263ef61d0b9ca0784965ef3b20a6c79 +P = 0d7f1606ce5b6683 COUNT = 61 -K = 187bbfa4e1a0045ee83ca95fb8afc479ca17868acca10611f7d35ab319005314 -C = a5a264cced5ccb51d4aa66bf2c314f429953a2cadbad44ca -P = 4ed8ae3ebdf06a2ca6 +K = 85a2b79a2603f30088a563688ffeafb8d27cf64eabc7f3bdb0e64c1843462b3d +C = f8855a1816c9f633b81fe49d517a7b68 +P = db8a128de9bb8119 COUNT = 62 -K = e3ecc4adb0d6cdd53095cd828a4e095c702bd131e6811c195d11741db3e33540 -C = f43023a7475ecb6c8abde19fe0c682d688e2e31916d76405 -P = 6e58e2db17fa311b81 +K = 2bfa9eaea5dedaf6c184ce8ad01199e13bd4bc85c7483effa4395d0c921990f3 +C = 47246f4b4bd314fa82f77d9aea4569a0 +FAIL COUNT = 63 -K = 8cefbdf2ed003430c69573a23467db2798eb4017dda925b28780659148bf5113 -C = 7c3c0a5d170be04044e9d4ab52b2609ea93b3afb58b9e702 -FAIL +K = 322365a19f4d6250e8f6dc68b80be33bf97a8037cfacb94160fe0e5144c719f1 +C = 5e1420fdb57919138e784e5e7a5d2139 +P = db7b5b2f8b620409 COUNT = 64 -K = 5aa4d6ef32da1a680e6b2ef653e2d4220095c8a54bd0a4f9a8903d44516e5f60 -C = 8d16024f01a05e6fc2511e99fc75ac06968178af37ec06bf -P = e00f6b8543bfbe5af5 +K = cdf4e567754d324039c5c176cdb8d58b98458a4b7232033ccae0dadcef3173e2 +C = 64c227b62a5f452bc72a92c51233ec61 +P = 474c86dff4e7d00f COUNT = 65 -K = 5b6318ac5467513784d0e11388ba33d1bf4c3221187a858776b4576d7abe267a -C = dfa8b217b86df27bc946b268286ec91f3b9e766eb8fec403 -P = 7f62987e49ff1b906d +K = dfb0105a98574f957df9905064b16595369fef4bca933cba7959eebaa3eb39d2 +C = 914acbee6bd9fa321bcaec5f51571d4a +P = f81fcd0e62dec8c9 COUNT = 66 -K = a0e6e4e8411bc7cd01c60808de7f35581abebd555422efbf4579b613f5c4fbec -C = 3caffa8d0e877e032b9e99016f50dac9c14f9c1efc6fb4c0 -P = 744abc507fa95efc0c +K = 98a5bb5e65f2e41429f356e2e6687b9137ba8ef1f644a6ee23a7eeef63ca8eae +C = 0089129330b3351ad80e0e46211128df +P = 94a161c4dfdf35f6 COUNT = 67 -K = e395cb85499310bb454c4e076a1e2f46ec69acf9e59f3427f83f0cb39d12c1dc -C = d0d0490901b9a7db4cc50dec91d1f44d67738cb429825533 -FAIL +K = 3addefc5bc243d694c9cf434d0a5a4eb6b2760bdb9d846b05c516840eca0b6bf +C = 7e850d398ae03d47734aa685b9302438 +P = 089e30e1f0533da8 COUNT = 68 -K = 1b73e3b4fa9b24845485b4edc7f30e952a2212017704f13894b4f24a4e5883fa -C = 449eefafa0d6e719e94a56b6dff6eab29d071e5f87a7ecf7 -P = e31024cad0a6c7bb82 +K = 878a5e80bd75090bc6d98ab1d5e5560cd9e2e781b7c3c34ab02b9de40628b93f +C = e4808c64b34b31548c5c3c48155efd41 +P = b91062e381b54144 COUNT = 69 -K = 7d4ac055ad840764c9e09687f83c572ad6821f6eb6ac695668694eb85af4c976 -C = eace84354733536bcf6cdb9f3766c9d653a132dc1105c51a -P = c4e2408c247cc7f299 +K = 4784da576b30fdde91e9774be7c3ee9d756dd336e52d0694b703950520cfb948 +C = 027b243e643c8dfadfd4a25e695a714c +FAIL COUNT = 70 -K = b741d525a4376cd6a9700b93bf586800755ed468ab962a53bc7b5a9e719cc4e1 -C = a2479ed41e03ca90b9473a38c163b5f08e9a1ca246bafe93 -P = dd5cdb73f4f5698787 +K = ea03b38d224a0b5c0cc81f52dfa9b98811c719e4558659d98058aea6dd2a821f +C = 9aacd7cc75e77fbc98751b2e52225ffb +P = 22e90720c2648992 COUNT = 71 -K = 6b8e8a585e287e3100ae26cdbff856c95661ccfe13d499795e8c93258ae78d52 -C = 2f17703aedfb072127bb341115d0dc65bda94d783819809f -FAIL +K = bd502cd42dbb11e81e91399b1a5b0a434bef2c0c5274292af82025e992bd4c13 +C = d8675150973704f87cac2967236a14fd +P = a0d730d770422870 COUNT = 72 -K = 5a8b5de2a3eefb98f5e554a2bbf8f82af19f7b6b57411b18ce6faa4e3f62d637 -C = 09a94b8527ee226f3342b66e73815821088e51a75615d846 -P = 448ea8ecb24d3585e7 +K = e434d0a005ced8e928fc4f6676fb71c073680dffac86ffbabce75e079e98be2d +C = a443bc7fb48c809df409b2b934185cb8 +FAIL COUNT = 73 -K = e0e50afdd821594a75b76975382f7da20e487965ac5f0ebaffc7bbaeb1ceed72 -C = c16a5e7912bd63e185feff0d50c881838af9ae30db84ca2f -P = 794f16bef0067042e8 +K = 13fe5420ecf09c0b3cd0b97026d0ad24b34f10336ab5516794ed7a96c3b9d910 +C = 885358f307648df8a422ae949d282141 +P = f87ae1406d808bc9 COUNT = 74 -K = 9a875a89049c9935b2dc07ffccfcde90429c23d057f2ad5daee4f66d4616b3a8 -C = 96ac0b589e288b5a5ad4c8dca4d43399fa24a6aeee9f29c9 -P = cee9df6f26e2ef0c2a +K = 0dfd8ec8cd4ddeef0234f55c7bd49cef81ef87a3d271470164a7fec0cfde4894 +C = a969e57fb925e3312d359b3e5d083da9 +P = 8affa591a737a480 COUNT = 75 -K = 9a1c1eb8ab6d5a8de6d6fd14f28168b2dd5fa69ea953e72d7aa95048dccc439a -C = 4eddc523c3cb2856da4b0a09788bff61e4225a9abed90460 -P = 2df95784c644f02933 +K = 44c45ac3f5f11b674722480f86559392b3714dde63adf3530fe45459fe5d1850 +C = 04dd9d7978b882d9740cbc3835cb9570 +P = 6d2d2b39600a6f21 COUNT = 76 -K = c29ccbb87b14cdfe45a5d018a2266d9f3cd9b44a5f682e703fa93df574979a68 -C = 254bd2476350d02aa1862fca12a23f2463e8aae4f67f061e -FAIL +K = 3a97413cacf9ea73c70439735eab1dd198b4f21bf6bbf7e9d9a67c7fcad0e7fd +C = 10df31d77c08623d1a85a3d551ca2979 +P = d01919ca588086ba COUNT = 77 -K = cd8abc6d096ab76dc53fa0d5139471b209783a6f7558add173fa1ae32bfedd6a -C = b0be8135be4a8f4ed9900193aa2380440187d6c10bbca3e6 -P = a926f1a7155a8a93f8 +K = 928a31f5ca2db8a08699de015ce44c75636b01edfbec02e4be832ce76e5768ee +C = ba70ec5c75d7966dabfc519972bd4957 +P = 2a8bde3ac2cd8b0a COUNT = 78 -K = cf713a19773075ad8a91cced4a72ae7d562f485549dbc5c7b3b6969186b7ff9e -C = 141481a2fe256277cd8e5c1f3f0b0745e7af7995efdb8508 -P = a6da359b1a13e34a31 +K = 01fc8e57f35df417c8c98fbe8dfc15f6d56bb3662066907f02b21c01eabcdf45 +C = 5ce02472c2fb8f83949c24f72a93fe98 +FAIL COUNT = 79 -K = a37149a8eb4688221179cdc29b54d2ce2274f60b8b648570d890189f1a55cfd9 -C = 318a1cdd7f18fcc93c5ac225c726c05bd460f2130e28cbfc -P = a76d9fd2f7f4e4d74b +K = 3932d4020c1c9865e9abc9e65737741ca7a6b80084ca38e92c3905ec3466c284 +C = 16bb35bc53c95d79e3990f35aacd7849 +P = 00d65ab3bfc6e633 COUNT = 80 -K = 608e9ac29823ca2b76783b94b42035c0ce7f3410d782d4cfa1ad90b3a34230ea -C = 729d995e731ce6605f60686297ba7b34985aa0c6651d656d -P = 364f147cc21f8e572d +K = 53cd70a389c0d0189819fa38266d02fa27832c0f89b7e19474dc650acc9eab1b +C = f4409f88badab2be2cd0659a4fe17e63 +P = 3757cf5dcb6830e5 COUNT = 81 -K = 6eb3cc72be84e29b165a7bb19c8ec3df13f84310df3cb183b6610c29c737e661 -C = 3386d8577ef5738cfb35e6b5f3614280af7bcf4be5449623 -P = 512b44248607189be1 +K = 1f07ae701898ca9f4a06a9f05196086b908ed125bd87b950bf875b89473f4f7b +C = 805588d40a5380169e0c18d16e50c113 +P = b7c65412037619be COUNT = 82 -K = c53470df21599eb7f9ff08103cffa1ddaf05677f8f72cc451d0e242852b731c0 -C = 31f8bd55ba5758717971d923194d8a7cfa554d0f862c0794 -P = 1a43a86c95724d01e0 +K = ca4152cbbc32d22574aec256e102668d66844f9986436419b517b381a44bd138 +C = 91c3e313903a40f6427a9eda4082c318 +P = 37d0fa074659a6a6 COUNT = 83 -K = a650661ef4735598fe96be661aba8c3204225a20dfce9382d1d541145e220e8c -C = 11a168567807583bc97bb19c1fc87f2ba414920d74a34151 +K = c271f4fe14d6e6e2cdb830c4a8ce5c2484d1dfcf599980634b72102b9bc067b9 +C = bdf9c04d1fd4d0f03ab38ed6b9ce8b9c FAIL COUNT = 84 -K = 3cd7a8ac6c096dc0d370e9c5e51ed5569f617a7403ff3f0b3d4165a5f3e02fb9 -C = dae4beb422996ff281538cee7f43fa59db282ba2a5518a3f -P = 9aea3e8d104eb26ba6 +K = d2701cf8cd0c969f2445a833d1571c5c054a37bfd79bd24b6497357d68a7ca1d +C = 7006825d97bc459ffa458d43683505a8 +P = 71c4f26b9e689b18 COUNT = 85 -K = e5c6d08b5e0f567e9add639125368c76337372aed18ded9ba0e2c1f6d52770b6 -C = e9e7a5e106201b5e2a158aab9c0754fa33b47ac7f3ec9a1e -P = e917920bb5ad9608c2 +K = 23af5c5586a861043d2fc7a8d799e9e76abdce43b2bf44c8ba785fad3b6834e8 +C = 32804810dc843a02450df0ded1bc54e2 +P = e2abdc79dceaaacf COUNT = 86 -K = e44dcee6b9db033c2454ee0eb7b7191193778f187d152f49d83941aff6b004d2 -C = 1fbef871d6c759e15de489949bd10e76bf889c844e1ed7a1 -P = 146943b60599093af7 +K = a506e5ec855232fd67b6b191d93d51c29e864518aea5cf9a5e38f57540a4792f +C = c28e4a955354f6f810fb21a3289776c7 +P = ca467a5888394332 COUNT = 87 -K = f62091b7679d0946d10e5f98b7cc1ebb81cb5b9bec49792cf09098ce39effed3 -C = da0f9357cf38fcb071dbfe11bbc6e8d352ea5c21dacf6b4b -P = ee48d1d7670e298e7f +K = c6ddea72a2c5d5d125b0c1a52dfd5d607738e50c35823d51eea808e13673c0bc +C = 1bf3036758662a90a9bc34593c772d5c +FAIL COUNT = 88 -K = 0d0d0a0b845091537219e9801078db2bb8fcce7aef0ec94699fd5fc9fa8d5537 -C = 2e646ff1931d0059e0b7119d3c4f55574887082326a17afc -P = 6fc8f4884345d19b7e +K = c24f956db953a73cc8d0257ca45dd6c5bb9cb20a236c08955d1025e74fe2a82b +C = 52ddc6f3d80a496c80cdebc687327d8e +P = 21d82de699414dfc COUNT = 89 -K = ddae364ab8376faaedecec9e06ea74e779dda42090e47acc1f67683d9b24ec17 -C = 5f4ae91cdcdd61ad5ba001728d31b75ff4d386099464dfa3 -FAIL +K = 026336802e9d6fa19393b4d92fb1c34d970c3da252752d393db248140efc2cb9 +C = 7f765a9737826e33443b09445f64614f +P = 65ee2b1ff90ef3e0 COUNT = 90 -K = ae82645528ce883eb23f92dee0e031a8525fcdddd73dd24c52c00e3d2279cfdc -C = 7675673331661e94c4788ca886b73c89b59d26a76dda8156 -P = 018f71a93b45d9bcc1 +K = cd0610523257ab618f3302889499070b367f739f8f5a4b3eb498ec9c278239ab +C = 4e9af9c1486f352193d5d6bf5c142311 +P = 4dc379566e866f4c COUNT = 91 -K = bf82d3356fbd2196fd082ab7b86344c1d40f24a438732138f031dae70742e362 -C = 47f11327ab72be5fc8f2fa682251aed22ccc0835285fdb59 -P = b87a49164e2028a1d9 +K = 9239ca19336bce699ae5e49e781fb29de405c3817e5d3c1bb9bdea7da44b011e +C = a1cd4f18ff7298fbdea9aae4e3891e12 +FAIL COUNT = 92 -K = 33bf964a4a54021861d92a08ec188d795063ab283bb30d976625e9ac1ea510f6 -C = dae544462488423755e054f55f36ed33991f51f7c2b6a2fb -P = 402eb8c2a17f88ea09 +K = 2ff1e89ce7e490782c812965d35c9df2b4fc7f1fe3127b7be52d36d7ab50f51b +C = a7629f94196063866353c0786e8fa220 +P = d2cae9b70b48a9ca COUNT = 93 -K = 8aedb5fa209581a418b278df55af47531b13f94bdbd49dcd3e885c426aaf791e -C = 797575e4a36fa1ce28dcf832095bc8bbee87d8b83ba76b23 -P = c53fd4da023cdac9fc +K = 713579996b279a83059e8541af4f1b5d61351cbee9c31f9e8cf0340ca2172fa4 +C = bc93d06a5d6214709db23155b1628c44 +P = 5866189bb0c0ac3d COUNT = 94 -K = 0edd1cc46bcf57967304716ea47cd37159403c13f8dd1c881def197516f6fcef -C = 2a3b37f3f1cb59d0978ea6e699dbe08f8b502a5e7e93b704 -FAIL +K = 7843d2d843d3f4694485e03584b9c723b2c3b220adbdd6b883721f89add76583 +C = d421b116764ded9c9e8870827905e660 +P = 619c7ba54f60bead COUNT = 95 -K = 53eb7a00f8110735e5412c01c9e437c21764b29c22c899f3c0d06c375beea2fd -C = d4adb9f723b4be04358919adea8d931260ee4cee0eaf5a55 +K = 0942c399016d9cb03832405a04c38dc219fbe5e8ec1f9951a73cef489824cdc7 +C = cb56c161053008362465cbb0569c699e FAIL COUNT = 96 -K = d5a69f771f5ac981384edd7761534eaf8282a512c2d8283488957788e9e9ba63 -C = a64ab043b9426864cc4ae1a6e3cd83fedd9ff91b88260e94 -P = 6e74e24c87d1a1e13e +K = 18452639dd5f730de7075d70f2fedf27f1955d7ac3ba4368debe11ac0cbafcaa +C = 009cf74732a37e33f589b8e242d63273 +P = b8ed40226bd9ce43 COUNT = 97 -K = 680880ff5639fa393022613ca17f9d3d4976747976e04bd10ef7d9facc2338aa -C = e68189328f7ab38fdce646e61f6b32f03beee263012902de -P = 5cf5e633322cd2637f +K = 82b0b93d78188a689d3406c44b22845db42e9f1d379e7034846dd3948585351f +C = 6b8ec7cc659455bd4915f6553ccff655 +P = de2fd19d7deb05de COUNT = 98 -K = f21c7bb85544f6d7649ab34166f0dc15d77a5ff2dbe194689dc3239fae39b14a -C = 76af2030b51c2ed52eb3f2224502e45955c0ab0e9ab98b67 -P = a0f195bde199563d3e +K = a72672496ff3f61e58763fe08b1836a7cf3cb6187a195feab01ce090df024024 +C = 8cdc56414502318a138210c55fa14d68 +P = cbc7f5a9f241c165 COUNT = 99 -K = 6aab130d81f4ea4dc62ad3c27563f108f42655ff36668eae6b0eb99500cf2bf9 -C = 05549b7086a7446eed63f58b61d3a03dc4c8bed856c3bf0a -P = 530cc8234b766237d3 +K = ecc310f824d5d6a47bb05e344b0a8869ceaec59090a332f2508db31a0b50b430 +C = 0ba80ce59f460259258b3cfd14afddee +P = ab91a7eb1844ef37 -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = ca01c585e4bd0955f4a27ec83fd6858b08894aacacb4eac27f8bca90d26d120a -C = 7979d7ba9fa5fae7e7546ea080d58626 -P = a7874f99 +K = 64b69233fe392c0bcda28a931cc3527b1a8f29235c1adf6256556c685cb89b9f +C = 6b5fd75ad16eda04a8b29f1bc0411ae28befbad9e474f2d8 +FAIL COUNT = 1 -K = 798f0446470a627664049452be2f17e1c31797bfc05f0d921d5fe29d6168963f -C = ade500b8a6ff60673b7cc0f573c95dd3 -FAIL +K = 0e6d542f960c7e61ca190d7fd719fda157030a0a013164613a8c522b52ae685d +C = b5cae8a82095abb3478ab167dbc0201d2f4dfc5f81bbe44e +P = a957eb4ea02e68ba8b COUNT = 2 -K = a4746dbb1c9aa7aeb9e410df0d4232c7da2c7babb4206f139938bebc3baa3f87 -C = c19d2ffb4760514ad05f17c43378f98e -P = 37a62902 +K = 0dc13a0407d01917c6b5ff6d7631aade32b42beac8af3985cbc9bcf1e4a71890 +C = e7a80c8e2854595027e557a434d8e937df404a10fef0dbcf +P = dee3cc016cba889b49 COUNT = 3 -K = cf3a400fa0d3fec6f3cb40697d513e4d1a051521ea427b5b27d8865b1334dcea -C = 18ebd4d913edcd8eb6b9bf333cf7af80 -P = 47bdaf98 +K = 7b54198135669152c26e01d946702d5031949555f9090c4026402a7347f837c5 +C = 2871e1856941cb9cd4632b6ed60018e24e6d374f591cd29e +P = c126a9ace7e1bb0c9b COUNT = 4 -K = eadaaa8c91b2d5202cd6ed422e6a11ada0d957b06202778047fb443857c2bcc4 -C = d123974cee2c895dac4c620c6dd822c7 -P = 8538aa7d +K = d3fdf10aab1d33d71bf2ed89f0e2fca345c0c7b048d33129d5883dd116b93f7e +C = 211737a95393d2d629655ec8341bf41653a2d7088a6417d1 +P = 344d12bb2f352b1b5c COUNT = 5 -K = e554ca66685266771c95913d0792789d73ef30160b1dc7c850b95151c8c007e0 -C = 27e2ef2d16181ed3228ad5d13f52dd19 -P = 2407e4c3 +K = 63037cfa142922e765fbfa3758d9b46579a5990c4bebfde36e7f9acfd34a546e +C = 64b1dc4365a1f10734f78f027f9794f130e0fbf49c3d0cbe +P = 41a997a70d791ef263 COUNT = 6 -K = 38bcf0020656f85ccdb7cf0329e3f939dd3baf63585ef241186bdf5f3061606c -C = 685a1a16d19de4bfbf8180615fe2c6ca -P = b28711b8 +K = e76564f0e25a84b592f9dbfc6af1ddfea44a75d2a800499e10d111a4de623233 +C = 51e6f0907ebffb6d932e21402818b5d4a1bfc5a7a070e0c8 +P = 1b81b66408c507088c COUNT = 7 -K = 8371b046006bccf6c168021e34dbb5040497412a40dfd79993702f9b2c7bef07 -C = eb2202c111e9edf458d4741fc369a6c3 -FAIL +K = ec06f8d726ca842edd0b6944ce1f390c4458168a1b4f4f2f67abb3dd21b6db64 +C = 9a4c7eaa10c0f0c83eea6a876ec5897d71f090387e97a5dc +P = 829179a357de4ceaa1 COUNT = 8 -K = 3ec708d6f9093a9d95e6a448dfb231cb1e3d66860ae66fe5b0f177a22abd446e -C = e0da2a3b25af00dc3dd2f8076f997056 -P = a310107e +K = 9de38f3eaaf2ec1e32ba1674bac0d2e945f79af99939c54247025331c1ce03f1 +C = 99a9c746a25be6d8e9c836a3ba4b3b8fd1e44fe40638ff9c +FAIL COUNT = 9 -K = d74b36056f8265d6ab561a1384ffae5b1c00097fe345c01e09264de7ea6f8c5c -C = 6541c7e3f7f883aadcf4c46412a2ea64 -P = 964fb573 +K = fcbfc4436193d176144e0ee42ec30e1ef575de44a4c7ab10d77520cdb9c1a354 +C = e118642db4b5359e873fa464e771f25b0f258ba99e6121d9 +P = a05a56f85db52abf00 COUNT = 10 -K = d8a9e65f2c2ab2de66a29b086cb3c3e15db83c86065a8655d51c71b5a0aee719 -C = c2dd02df9bd7b6628fa9aae9c53d8cfb -FAIL +K = 6cf70ddc7d4c427e4e2810d218eaf9f2df5c35373a40d81bd99bac356309fdb0 +C = b7e43ba46ba4afcc9d614011d974c6648467caa325eadb84 +P = 9ea6248dff33ddee78 COUNT = 11 -K = 7bcc73388fc47823df281f0208ae18e74082d1d391515ba00e3acbc19722a3aa -C = 5d4ba7e44f06733a1a471017d5d1c2a0 -P = 08f4d31f +K = a83aa143d00c5dcccdf4eb2adb257d1b447584711485a70ba611dcaabfddbd59 +C = 5d4e83f0ebeaa2800bba0e69a4fc2b9d52e016919f191a98 +P = 875799fdf76b22e02a COUNT = 12 -K = 3d4c3a588c74d8c280f090317ae39772bb672d9152725e1d477faac37c9034a7 -C = 4f3dd6c6be2dda13fd390c5339de1c23 -P = 795dc4ee +K = eab34bd17dce9d8b810fbffea0502619d94c5357966b89b581a145450a331b7d +C = dbb05b9211a65d5a1d30faf1af9f24983af4fd02c0d46da0 +P = 82c804ee68d1d62ff3 COUNT = 13 -K = f889443dd706cd349ddb1c7c7db4a1afd461dbb7bbb7bba3bf72d8d14af82885 -C = bad7338d9d6ff5e8e44063dda0739273 -P = 06b71554 +K = c4cb1c559f7af8fd088fcd952fedf00f0fac279a6381ac2c04e65ef5616e389e +C = 7a60ec264fd331f2c7076714114e5606b17655a86827dd66 +FAIL COUNT = 14 -K = 15e47bab3336829b26607554e5f1a45a5ba150716c1efb33c3814fce00d3bb47 -C = 6817161ac60e6ea65442e1b63a1c627c -P = 52873b1c +K = 90ecf1f630dc89cb6c1778c1aaf525321e202030e7f39439e7dc1dce75657529 +C = 7c5522a390a6ca77d093dc33053e6eaabbf2d21a35047321 +P = a2a157837bef6616f1 COUNT = 15 -K = f322e6a84c87f22743f28f690845155d148b6bb6064a3ddd0b00c807c8235c16 -C = 547fadaabb77254fc73e6a017c3b5edf -P = a68eedfe +K = b759eee7a35ae29403818c88a75cf32a20fab450aeefd6e1775f6846f24f7f69 +C = 5535b31368dd547bd2a46d23a522ba8fa1c7ec037db94cb0 +P = ed8fbf0d112af57765 COUNT = 16 -K = 9822005fa6b4d4e089552830ae1256746992e7c8a693e52d6873ca9b08d3fd79 -C = e288f0d48d1627c36208f03d7f96bd40 -P = c969d8d7 +K = b3196b46b2788c803c8754035920f6f0574cbd46d4c433734ba86569832b4cf7 +C = 74dab050e3ff557789154751e9edcd8f0564aa667dd27ce0 +P = 713bc8d9906fa81df0 COUNT = 17 -K = c8eda3f83e79b557187acd9d9f54b58ae2fc80a240cf308566d8a37c9e3b4e16 -C = 16f23447a40c9fa994d2b17399a2295a -P = 01095137 +K = 72143ffd7c381879877887e03c14bc12c437b4235b4cae8e9a2c91b3d27c3c1b +C = 29a6e6f05f00609249a506fb66bfb2656b9ca0c03a85bf19 +P = 47f69758e313d2ad6d COUNT = 18 -K = e229ec43e40fd00b69b6775bef3e9240c2dfc3a2aee1d152059cb97dd40591e9 -C = 2140acd0133b4b8edc80704d64ed0c94 -FAIL +K = 7dc8eae71ac8b739d456cef0ce1db47bd87e7ec93f6f6cbd21301e85548f9f97 +C = 5661a8fbe9a7e42b678efdc69ee8d82406c138bfcfaa0cd8 +P = 594acd029854d807dd COUNT = 19 -K = 3240c440fb7fe12916079cbe191eab018b2d0c2325001cf9a93ffbbc954cecf1 -C = 2d2fb2bd4222e7afb8309f9015876e41 -P = f83744fa +K = 862990f2c42ac2a6964d23e2dd3c491691f6e8799e6266ff518ac12ae592909c +C = 4574d07e5f3e2ac55f16e230d08d59259e60944bc78fa0a1 +FAIL COUNT = 20 -K = 6aa355ae1c5d555e0f79a4a226657bde0536c45fec5cb75f33681b1c1f79a2ba -C = cd5af132b2c87179f5575b7aadfcb3d9 +K = 99b36cf6b907084629e73a20ae910c381adf6382cd12384bf8d9984a383e3225 +C = 8adfa91b6fad64240d7c9f89ba45f70eff7724d05f5b80b8 FAIL COUNT = 21 -K = 43e58acec035aba46faafbef3c7e996298997e070999cd89dc957c152b9adadd -C = aabfc99a01657081378b5c8e8a02036b -P = 2731e170 +K = 3cd22fc72040a8be3b90918bce788c2360a7bd13e45edfc998e854a1c2ad3cb2 +C = b9246e59b565f069a7f1a4f0543174e1caac5e3afb35d65a +P = 28ac03713adcd1fc76 COUNT = 22 -K = 5086e09e1c030950414aa5daf13437c00e87743e1135914b0d9967682dca7c49 -C = aa6e1ea90bc53c69fffd3e536a2c4535 -P = 1bf433cc +K = 0183ac2c6dc1d1f85bfc886d94c17be5e89f7353433da68b63280ff54590f2f5 +C = 61abeeddfc02136e4010d2ec9ecff42f1d78d54173e7dcf3 +P = a7d3fc3d135a7bf812 COUNT = 23 -K = e313c05c2a43948f0c046bba6a8213d4826dec15dc8b0b52bf3d5dbb160cbebe -C = 662b491690045428ae9d3148bda53e33 -P = 0dc39ac8 +K = 89ff75ed99fdf6456e6ec560ad7f3593ab51de7d4d9eb24bcea94f7384c6445e +C = 806a0b27a05c4302a9c4644156212deb293db67c0f0a219e +P = ad9f2ca60b3aad2d9a COUNT = 24 -K = 89eb25967961276c43641dd2a25c3db01c699c7a9f744292cb066d48c29d0caf -C = ccc0c1fea9ddc6703082023f18b13653 -P = b4c0204c +K = 60890174d1ba14f6f1bc3b9e206fc36243420e0b81b280a2cdb8784eb31ac8b9 +C = 71e0993432f9698ed1523eaf13e713fcd7724f667c68c112 +P = 4a1a44f6e19f359da2 COUNT = 25 -K = b08b2edc2580a6baa829592ab28c6aefae3410d4c935ba4ee602eeb65bee9f7f -C = 73bb595a9bb49a912e6d795b73d5e734 -P = e4f74516 +K = ff6e73361f70a5139f39249c768474842d95e0833183953919a278e7c128a32b +C = d870c0ecfd82c0ea6b8aacff193158ae6cbeacc5dfea0e5d +FAIL COUNT = 26 -K = 8c606df43da234811dc1406565ffaa924d0ca9c9f9178cd70c164370560caaf3 -C = 7ea23c7f229069180ce5b0cfc51fe676 -FAIL +K = fbc1e3fe4640ae99ea5e5a7c65d502f7954c585e39c630c45ebb387141e03279 +C = 8f8800e3c977d51eeab77c7bd9379714570ee1b6849608a8 +P = 7cc43e759f811a239e COUNT = 27 -K = cd28b8bed01c34ffeba2b5c6a5d37b95171ae077bd685b5c2be38af0e811e6f2 -C = 32bbea77d683ed07ba56c92a423ed8d3 -P = ff8c06a0 +K = d0b8d40b1166c295a8d794bef65972d92a1334bb34c8304d743e883629997bed +C = 2a30a35ad778c5cb9247bf1171be5d732fc04044711216f6 +P = 116d0ed75c110ce732 COUNT = 28 -K = 321225634a520a005ead703c7cb07bd974d7acce6c64d5d30fb767359c24a3f5 -C = 3444c8222a26f505778e13e5068246c1 -P = 2301e2ea +K = a1771b78db346ff9fc0bebba9a067b72109452d3122126f0cc29578519427774 +C = 6095945f10b255020303ef4c64c85cc8054f65a71c289444 +P = 404b7b4817721b56a5 COUNT = 29 -K = 2f37b6d1f036c21409ca68c1258c60e4473e1fba32f3e19dabc03b2e5f38a013 -C = a94d78397e56291950a85b868095235e -P = 4d4f01b8 +K = 8f61eaf1ff3d7d92dd7b3d00bfb47643a1b846f0c567f078b669dbec2e914813 +C = 61ed5c615c3b885eaea6c2c020c6f4ee7ab2ee20b35c4547 +P = 4b5932f867fe1aa9cc COUNT = 30 -K = d6f0c5982460b4bdbcd35d01dc5e5ba078b14d055edd747624d7289c16a3ece4 -C = 86988f9223cc2c62569bef5fa0ffdf2c -P = f4d630b1 +K = c507e0158f5279052983a4a5a69ef82e4026187e0d0c515daf7bad02ab478a5b +C = 8bd9ddb4c82274d0304119d1c40e8b4a80fa663eaeef2d69 +P = daaffa4a76efa16f74 COUNT = 31 -K = 96dec087341b69bbd2af3aadd5087982430a560f609f7683b7454a81fb806353 -C = 54b48cf4a82cf7a6b39318ff73441a62 +K = 2134d7762c02b1010c88c13f298fa18d225626586822fb52e6e71fb5d0b7c38a +C = 45a9e44f7f8e2d933265db029f2ac4bafcf26dd1af306951 FAIL COUNT = 32 -K = 89aa32a2c5f0e8013870edb31d49271bab3fb8d43f3833405b330700094f6770 -C = 132b31e0dd32b6ffa5beac07c1b9dab2 -P = 649983e7 +K = f119b9792f5b677c285bd124b91edfd10e3e36586f4e24e72ea921e48ce361ae +C = a09ff7d7a2f3e7422b95cf5dde27b0bfffe6a368cb18c98c +P = 82842dbe4b984b88e0 COUNT = 33 -K = a774e9dece012146f583fd52fd8d9027be18e27126ce846842085b594672933e -C = 360c55b83609943b08e29ded7131ab2f -P = 76cac4c9 +K = 423ff3942902f854980fec5b7ded4b9332ed33cfda9418d334679040e9a989a6 +C = d541674a94ed3d317f09d9fbc50c701f165ed2fae26c4a20 +P = 9d90cddb2c1c2ac415 COUNT = 34 -K = 5beb5852a500a408749584525c81e8b64689a893f8c6a1f62f7f36c75680f060 -C = 95a80b9b9c808941bdd209314fe430a3 -P = 6271a23a +K = 0faaebaa2a3420da81e0bec96020664c1d65156ad7b6d047fbfdb0b9b9462175 +C = fec481e9d4265af594709d9094d6e377fd6f16835718d37b +P = de81825ef272a5fc96 COUNT = 35 -K = f43a0c4f1daf2f8518a24a983ca36c19650948cfcb9e747eaa7b12413f2b4932 -C = a5cf39d6484a90d9a4111d2529845e5b -P = 60f95492 +K = 9785dcfe5129b4e3951469b6a363049f208857ed40e602067fd2f7bb8bd18f96 +C = 180ca25b46b95937552ba20da15a82921ef0be7909e02c34 +P = 78639ce0065c309daa COUNT = 36 -K = b5d9645aab0f38df4dbac9471f49f161a1d76d8c1bb7a3b6dd2b2b587ab7e1c2 -C = 157021e6add99cf8c1736e4fe7ab5513 -FAIL +K = 1ecf520f1e252eb7387abbdeaa86307a50a2ccd0a4a05ef9997880e2cf3f4298 +C = ca7110b57281ac2ed757f713cbe98c6f386f959c3c0cd852 +P = b140c89f8a93c13223 COUNT = 37 -K = 24d2cb1b511350f0ca615de4a20ca93610c7ba7c718f0f68fec02b820bd69ccd -C = 650491edd2186ae51c2a150720e8e305 -P = 146b2609 +K = b33fc8bf7ac9afc74f0d1cb70f77f7249dec71b472fce0e4895a5045f1399a39 +C = 8ea2974ae4d447f3c478647504d648afdbb9bf53057faaa5 +P = 647ddaa50227d3fac5 COUNT = 38 -K = 35cc5f523d15a253c10a0c3bc3ad9cdd630ab5a960b5122c57d2834c2b5e6531 -C = 29883f80f6a5e78c76c758282ce157e5 -P = 1b2c30a0 +K = 5167a733996f1201f299fd53a047e853e18c72c74c6c00962d6ad7503563fa34 +C = bf38c25686b55913501e31da3656b7f0970b4fadf6377065 +P = 23527cefe2e9291365 COUNT = 39 -K = e3315d68a4215477db7745c06283960b026a40cbc07c595c0a259a79a2f260f7 -C = ec565b610c92abd1bd531080106172cb -P = 0a8c0190 +K = 417fa4419225ac0b758ce6e2e8d83651d3c12a71e1c283d0c10ecf02eb4ec139 +C = 05e2ddd8fc994eacdbb0bf3a0dae642fbde4a2c617b0dd64 +FAIL COUNT = 40 -K = b1806c7f73b5657f8e897c162ae26f17c6f4bfcb960cde5977a0e438d9db4b25 -C = c1c41e871fc103695b6cdd8de9c6eab7 -P = ce603563 +K = 9dbbf08afb226450fe2fea085aefbe16348390551b86e82e3fedc0c68841794a +C = cca7ca9ca00c35725786853f084ecbc2aae1fe59a48b111b +FAIL COUNT = 41 -K = 8ba9e9a39fb69dd631c1bc970157e31e7d385b7a9f7bc4a274df7df8bb64e46d -C = 2493a47e734ff9e053dc39b04bb67c12 -P = 8bec574c +K = 32bba91db5abfe33c41917b252c49264f6fc26f206f5cc6e78e2fe4157005383 +C = bd0c13897c6c470d5045baa0839366f660df1ff1a049533c +P = eb04d4194fc93ea054 COUNT = 42 -K = 5f0e6516870578d5c0f59efb03575bc57faa5ed27b9e47bddba59ab23a6bf4c6 -C = e3c7acbbe990607db5ae7d688683600a -P = cf7ccd22 +K = b5bcb6c96a0f558374a2df54707a315d629c0f34172b578556d2244bb729a132 +C = 4c5b5cc5316a8fa6644fe615d452e3f6d42cf1749b948cc0 +P = c15afed429b9b80b57 COUNT = 43 -K = f2b00475b829feac91ce5d651bd51149c9999b1650737fb29e075a03e51f5f01 -C = dfd4dd2efeee382daf356cfef44e535d -P = c4cecc35 +K = 235de71445b62ac9836b8226abd6621df6428ea55e8e4306a68bc5f6f54b974b +C = 3b3aa39c5e95294dd0a3674a570031cb906b54548e5b516e +P = f649c58dcb3f73bc5b COUNT = 44 -K = 03adfdb31f9fabbc30d947260ea1f3e791d1c64270bc935e56c2a6dd769e8c06 -C = 9b7e3f18acc30501af5d2cb5b8d939d5 -FAIL +K = 3de315c7fdbed3a67b25d26548f82a24e950fd31a8668ef3e09436f17fe4f0f9 +C = 9ccf368f1a2c9a730331ffc1e99bac1815bbb3f76472b8c1 +P = 1e2eb8b07763b5adb1 COUNT = 45 -K = 5c4460bad02f5cd8fe3ed0542b3e7c2734bd4c496ee376db43018bebfe326875 -C = a982533ab024b92f468edb71db1b6189 -P = efb6ef3e +K = d8fc7c8e5c2c89570745ac7d48ae10423ff8a5949fd6e073ee45603d406e666c +C = 012005359e7726685e810275201018bbe5d9c511da7cf782 +P = b1d7b42d2d9de1c3ea COUNT = 46 -K = 048360f839473896408eeec9123c0d5b8844e07fc6c78252af6beb2495238b1a -C = 403ed6ead6fa6b9314801078daa04851 -P = c8fe2977 +K = 990b054e6ab3ecfda656d4ef708b9257071a851121a601419bdd1ed035b33096 +C = 5a3b09d606465e4aa3b3007155e09232833c2d8eacdee19d +FAIL COUNT = 47 -K = 9cfaaa0735b54308619ac95a572d8b7da9ae0ab43931ca55f93f897c459a6502 -C = 789779a6c2a928be51b4c5132aea550d -P = 7cc3c246 +K = 91d6b6e7b735525e1106bacefa6ab70595e5fc9aef2a107cbfa7c2f10d3adeb2 +C = b07b22000080c23d0b8d06c6e9b7a7ba4fe02b2acfadee0c +P = 2d499277b2458c4a10 COUNT = 48 -K = 147715a3be5fbaa68c27cac9febbfc0e0a1681ed2a91251267ca1cd80ff6084f -C = 349cf3625b732c801d8c8faa45251dcc -P = fd5d8eec +K = 0774f7060b7fa0eb7808602b0c6db200ce98873ae69e6b88ad26e48d403ccd36 +C = 8a5e520404225ce9c06904561a0d382f21a935f069f22814 +P = 4c04345d7b0e0d1d2c COUNT = 49 -K = e94fd6956a893452debaf55aa70fa31492bf63b627c06629a133dd7465a0008c -C = f329164770b55753b5f34a942dfdf367 -FAIL +K = 1bf96a2016d089fdfdc6c1a6ed5d549517f1e98e55632b128a2229ff9a56ac3f +C = 3c10f05ac62698c9d538a75de3a713fbae1a567301f1a379 +P = f8f9b9a472b72c4cdb COUNT = 50 -K = 0fdd7250373c29b911e4c6b34f33ccb083cfe87e7356f03a8bf9b87f3acff553 -C = c21463c045ec3903af42296b89d8e88c -P = 85298aa1 +K = 83e9c820742afef324be1fa16c14713791b5abebdb5d97dc3ae72b056cb10de1 +C = 1b14261b23e10b00f1045fe12debe1619e8a92cfe3f1c0e5 +P = d50175c22f980183c9 COUNT = 51 -K = b9222acc1e03a5419ff6e0dcea5699e990b8fa3b5930328c753743bd5b9c2d6a -C = 21e322108606d893906bc864756f0088 -FAIL +K = 438d9c3713dc87eae2f20391b91eb1c42c34e23223c2aa691ed717f958b36d60 +C = 439e480cbe1b8b51e4d414532bd8c3cc7e660f0414894661 +P = 65e194cb469bb510d1 COUNT = 52 -K = b5b7fe5c0b5a3b8940bf4c33cf77bbd7e1b70143af949501761fbd62fb596212 -C = 4e2d3ba677d90b06cb47474c0e7bb0c3 -P = 8892ea7f +K = 7198e320cd5464bec121b38bdb7ce8ddb196c623057efc7b1928eb1c31239f07 +C = f553dfbdb61776c42f71ae7c6a20c7f007a0a6f951da86e3 +FAIL COUNT = 53 -K = e7e22f00f70a48244ff83b2602d4aa255ccbf579c323b479540f806d21798192 -C = e9abba27d379f1f3b515926b2c0ca53e -P = 232ac8b4 +K = 50fcc4267c7f7920e51954e167aaa61eeffe9f1d48bbb6db8ae29ad15e2659fc +C = d5959879fae7a373f5cefb399b6f127570c41be035426f93 +P = c21f4b068e75199076 COUNT = 54 -K = f1c2af8f9e7f46441b1f8d71bec5bb7237d15231903d80a548a220c587ae19aa -C = c2920048b9aa6d9f0bb4ac1dee207be1 -P = 8f57f5cd +K = cbcf75b70054020bc54a4c025e580e9db0072c9ecbfe1f01d91a62524a22c2d4 +C = 15b36ed9d847d4efd729d608cbd105e6b729b8be333b360a +P = 62b4a3db361674bb0e COUNT = 55 -K = 88d3852fc053e18d53d36bb38befb1d699e016d8328fd6548929e22399ab9124 -C = edc5788f03ca4ccf24a8bfce84901482 -P = 4d6eec72 +K = 2f7e38b238ff22f10cd13cb3f907eae8a09b6175f53fb968f4e34fc02b23fd00 +C = 825f29500aca89e5f0006b29ed4aa47a4b965a4f6b0c354b +FAIL COUNT = 56 -K = 4ae963938a6aa837002a2e8c80ad22aa68e88bd98e6b78cd406f1f5bfdcf30ca -C = 92f08a2fb649ba70f54686408ca77248 -P = 3e4bd575 +K = 695d952d8a69203db2c5d2e0ab91aeebfd01161a81baa8b83aca24142e2efd45 +C = 77b09ef08d7b42bde83ebc6b8c4cfdb6d85fd5228d790fff +P = 2b135680869aaad5cc COUNT = 57 -K = 382f14ce1744d436ce92bd8327b661e510d39923d005d53950c0ead4c687aa96 -C = 3f9076407b9d4ff6e4f8e862aac1eac3 -FAIL +K = 08013dd5abe1ace9a15aa9bbd657fcb8cbe37d5fea9bac8f75f10831c3122d5f +C = d66437080d459845585dd6897704f1c75a5997fb2187dc6d +P = dc8c6a2262683d6674 COUNT = 58 -K = 9cb8f8e2e1c732b825fab0871599e198631cfe428cd184d6aafab2df443338f2 -C = ce212ad2d48f22856a93323cc49d019a -P = fe994571 +K = b72bc7059af08d4a32d40d23b346ccec80c5e097e67499b9d270fcf1c3ab4f96 +C = 7ea1e2a4037e3e3de3db35f4bd15f5fff73f6b3fb1e470c8 +P = 1b6a26837019f64305 COUNT = 59 -K = 4fa9f0a3316481697a9f1848622d94367b201e1fd3d4ffcd058861e042417f18 -C = 44d6f587aef2be26b9900baa023aad64 -P = 90c64094 +K = 34467b03cf4b0f0f045e359e7ae32a2f61ccedd2d3a16944f44c6e0ed84071e3 +C = dfbdda114b853b8722a1867346732c7096d43328fe4c74fb +P = 257a62adb62d6deb45 COUNT = 60 -K = 9b741d1b1178225bbc96bf5b3aa9f741f95b5f6d11fffe3e482c200cc41843fa -C = c4e694b45c4beca48e6c7a3fa1c5352c -P = b022fea2 +K = c929f6e35388a5e6b1859a6d18be768a36c5b6930f403a6aebd7b95047b25cf0 +C = b2e269aa2f65b2900e73590337ed1edb24f103648a74460d +P = 9daf74d2f0baedeb3b COUNT = 61 -K = 12a4892c9b1e712dc25be5d3ce0e69f386ce67a1aec145f2b0625c86bf367e32 -C = adf9a1ba8f3d6684e0b341ccdef8ab90 -FAIL +K = 9f58a84693e174399436aa90af459053b7ee3fcb5e149d36e7b841e0ef4164ac +C = 65eba4ebaf60aaa33710fa4b6c44008c6b5f4975c3fe7611 +P = 91f0e4ca4808301cab COUNT = 62 -K = f9a874773ed0925f579b1ee3c9cf8fe250de49d8557e4b4b091c577e5bcd48ef -C = 20f647222b8ea7e41c89c58c6de66269 -P = 2f57d78e +K = fee8c25c3463c4568897dc8c9e206b9c99619105212d631de7e02d90372df3fe +C = 9c133065b862e71e0aa16d34e8a7d365447e372a17684bf6 +P = 2b01ffa8a8c9a57dc9 COUNT = 63 -K = 939e5190a87e2022d67074f4c70af47aa5aa04bcb9b937837838cbfc6196d12a -C = 07733192f075fccf6a8a24794baf1cce -P = a3fd2e6c +K = b3eca1df8fb9720d452daec48031ddf857f06924c9d36ff018280ece988b0de9 +C = 08c3d957e9cd9cda497fdcafd3cbf96479c340520bff011e +FAIL COUNT = 64 -K = f49198e274ac0335e6e5a869e626a42340c900a42aae15363c84f36e3a098a08 -C = e3beb70716780cb7e01d12db1bd8e5d3 -P = 1a46a7e0 +K = b137a7df21206352c82a6b3dfde09e42fdd96e43de6711f3f97f0fc3f967aa04 +C = eec9bb3a860d822b2b40c3195050abb0935e1ebf835d4597 +P = 15a759c292ef2f0b54 COUNT = 65 -K = 98b7f32b1d163d7861f5150295a970b6140456d88354eac9def1fc877d0aa4d9 -C = 69654629a87ea3a7d0620849f2fae548 -P = 1954982f +K = 499e05568f0ade17b711ceb39f3ea2efe1d804833fe338b9eee690ec380c82b1 +C = 25f12e672e28c8dc3317f4e47c81837419af7543d4bda268 +FAIL COUNT = 66 -K = 1c10f8a5ef668e2bc82da0bb77ebfa8ea3a9a6ca9304cccac77a3bb3fb78b582 -C = 435759fdadc7146063c9f8da5dcdb1f4 -P = 5d333367 +K = a0c7d6f29fd0b40a51eae3aaacc53f99975ec98d896a09d10513b649376fc354 +C = 23670234dde770bcc0e5544c6b4e119dba81ba78e3017ecc +P = 872beb655dc0f5ae8d COUNT = 67 -K = 8b2edfa948ba258e593e2531165b00d3e617f63c8f7383501ba16e25994ea9ce -C = 252b513a29327a7eac306622757fb510 -P = 02afbe07 +K = 0591767e428c46ccc7093707cb08f334aedd948991448c12fddd2dbe49b99795 +C = 9741cdc3127724aad1895520f7391a603bd0b6518a37d9dc +P = b86637ec380e381a90 COUNT = 68 -K = 61d48fad1fb66044efaa134762c12d7e6cf0531e8afd4f4a0dd571817e2650d3 -C = 661abe370a059e69e9d349b9d0ba3ef7 -FAIL +K = 69d6787eb6f93c84cd8534f4543587031ababf2a656061ca1b81059375bdcb37 +C = 27bb8c0eec0f950c186229d12991c04c4d010b62d6fa0b36 +P = 373f1642501b8d85f5 COUNT = 69 -K = 088fd172d06717ba83cbc0f5108e26f8990074d2a458f98939f86ddaa0939f53 -C = 60fdb54cd91773b4cf14b307510068fd -P = 27361dff +K = 9272b9fda6578c7bbef2244e3e36219bdc498b546eb45d904f0e613683229d0e +C = ab800963798c81f466ba37dfb3a41b7e95d7b682e681f8cb +P = ef9481dbad7490cd92 COUNT = 70 -K = 26bc292dd280cc6506d190186d722d42f9bf41a47df4dbf81f6f6cc5d31f726b -C = 33ee7fe06473f737e0b65604341147ce -P = f0de8508 +K = a794057dcbcc9728dd52ff87aac6943192d447553c2138dcb695dd2de53a7425 +C = e27150e5f0c33986e01262edb3fb07a9ed8575d512be671a +P = dbca845c358332de66 COUNT = 71 -K = 504d67eb29306c30f6f12d8c824eb5bc1903b19f44bf7e4f68a99bb65b2b9ce0 -C = 7f110e23636ff722eee8c2e43278d092 -P = 6a5b93e0 +K = a214b18b695c540eef475635fcb6ab28b4b9e3a331b041d941b2e974ad9154be +C = 49f77f86478b4d51b0c44a90a13daefe4f5cae6b2a94ecfe +FAIL COUNT = 72 -K = ed4f60762b85c556db6cd752e517fd2144f4d63f9dd330237a94b6ca42c95cc9 -C = f57646548776a5f583e294367228a727 -FAIL +K = 142bec6e4ee3aada1d38b74418651011b27656027b01c42f6d41c124c11c1f80 +C = 95616782a4649d618f9dd36ad97c745c1b0fc45fda042a33 +P = 6e9a037f2bf75fc9cc COUNT = 73 -K = d8a4927786df1d4d67af63c18b8cd2c8ffb0234f010b593c0a6dbb88c3f2bb06 -C = 7f8a0b4cc9257537171e7e66eb1e4244 -P = fb382a57 +K = 997ca5f4f6041ef1e1341b271949cc2552dddf5dac280446ff6b176667bb2524 +C = eadb11a0144c6aa7a2a7806fb3facff4efac402e7c56bc17 +P = 885d7ac39b0ccaba2f COUNT = 74 -K = 3f944703d53f3cca378dc2a0083873b4c0344299fd6257ce3a0eb799f60e52de -C = b66c8019c089cfe8c10ae81b9cb276d3 -P = d3fe8ff0 +K = cefe0610ac8a3983c8898d7c6d06679671fce6999a560becd8a5382cc8625d59 +C = 54ab3ed1ac5b1a9daecb54567477ee913a5db68650056c56 +P = 1b7f6bb02e2fd9aada COUNT = 75 -K = dff90c7bf9bceda6a82cc88f36fa79d8d3d157772603e046ad47d8818ef0943c -C = 82f233878f1f8035eeda1d81994d9503 -FAIL +K = 0fff52f7d6bcda6439474c9fab82f3bb4fb1d8726164a4c5cfc76b6215b6220a +C = f518ac8ffdb2cd2d3a9d2dce3b1cc8cfdbc199e974405c6f +P = b4299c7fd7196010ce COUNT = 76 -K = 9bd38facfa27f965a8b34ef125ff40327c76c065d83182b20ad2d5223f905161 -C = 6b7816611bb81b5c2f2cc6778a32875a -P = bf43e454 +K = ba29f43c5b1f667a1b87972d7c7680dd28b89376daa3cc3e2d49fcec4f00570f +C = 3c1588f34f3a926482bf43b4dee261a1b517dd01644efc03 +FAIL COUNT = 77 -K = b6a238f5ffbc528cf876eb5554ec5eabb33174208287f5e3bf9c9089f085d0f8 -C = 860e59c329efaabef4041db97e52283d -P = 9fb82d28 +K = 26d0a401f47e3fe4f59d91b096e44c41c40520f00156cced47ec998163f70561 +C = 72d2411e30380891464ef8a987342d937155c6b373248870 +P = 820e572c189a3dae86 COUNT = 78 -K = 708b6b0fb8e9380853ccb7b291f063e0b088a4b371392eabe2d70993b13ddd4e -C = b5da1fc4799cbab021fbee6d1e5a3559 -P = f185be44 +K = d1ef7b5056f045e2779b45c44e7e8062c5d2cb7580bc6d4d2e0f83ef388c56d4 +C = 36310e478610e60a00fd7f870a91f59304b5c3f37460f79d +P = 35ed92ecfb539cef39 COUNT = 79 -K = c101772a355901681605dc6bf2434ed30254dd13c25bcc4a78704bd717b545de -C = 606199a4df9b0e1a84f7025425e5b637 -P = 27bb70b6 +K = f42a5a237a8c0bc6331c810577c3e3a4e2453439fffbab1b61c5397e8a131999 +C = 35cd149740c5cdf98ea36d9ad97dac2f75159ed8c53aa4f9 +P = 5335a088b422638415 COUNT = 80 -K = fa9404dc195938e395f96f7b74dd64efc499191eb75454680767bfc70f6d30df -C = fcc0debc46223fe7ed65bea7f356b806 -FAIL +K = 08187a44fc639129d28dde0006032e6b1c4606fd38ad3e822cf201ab8b539277 +C = f705982048e8043c248c75f39217c446ce1e9b8d4ce2269c +P = d2af4c43a721d838bd COUNT = 81 -K = 5976d1151cc699b471c422e42aeda9c2236522cf978b001094df6f2765ed5d14 -C = efe3d2685ad3a660ffcd0b49fe42593c -P = 6f621de8 +K = 301cd441719c6607f25a797a2f6024a78e322bd1cf4a3da440e8d4bf67cef4bb +C = 907e7f26c6b6f2b54880042cd835ed0b4a037ae5058fb3e1 +FAIL COUNT = 82 -K = 80b5cb19d1085854bfe82d884c38fe73238642de23c35fa3a29355eef7193a7a -C = 9e77a44d6af47e63b39adbb1d8e6b530 -P = fb180c63 +K = 5a086903e9a22000b2ec7b11733e17817024dcf0c60bdc786d04728cde3498b3 +C = 07ab1e6fc039a737eb074d6d6c1a8d39d7f678e9c45661f6 +P = eeb57a854f4a8a3967 COUNT = 83 -K = 580b5b4fb564133998644419d01fab8ed3c7d942017f9da2c3bf5429bf200605 -C = 0d5ac52527f17749366db901fb1ca412 -P = ca069d2c +K = dff0283edd9d3f0eae0edd5b36ce4f31c04ff89ceb1162fc734713d102d80e66 +C = cd340e1f2d58d1506acac67e6147b5d5d9e71b9fab42c505 +P = ef6dbbc201709b406d COUNT = 84 -K = 5ccb9863015a5f41aedd262d70b0d1664cd78cb2bc15a598e556cbf8d4c46972 -C = d8c469df17cb56ed06c2ebb993e9f1a3 -P = 89ba00a0 +K = 2b2efe00e36e9be8f8efb6452ca162cb8da4f0d6ffc095a5375d6ef314cdd8b1 +C = bb74695480ca785595d5f67a8eacff43f5983a2aea36d839 +P = b11a883d24e352bf81 COUNT = 85 -K = e48aa4677a0e560b02b2ca3ad74e7fbdcb338797a51db25dcc19947b7b1a5561 -C = 82ecf39ac4ad244e26b8bf8774f9d64d -P = 671e70e1 +K = 4d757312da325a24abd392d4cc6c666362a108e013221795f127feac8a844da2 +C = 2b71d29aa4a50bca45f9c4d2efbbe21e601bac10cd533477 +P = ce70a00cfc860b64e9 COUNT = 86 -K = c3ab1028b18c7b1f69b0a7d9e8cb24e022fcfd2de56734605bf0b1894be4ae6b -C = 195ebc5ff8c2102c8f3ac61958857c6a -FAIL +K = 465cd21abca18fa48ce2f364cf7fe600e766b3df13ff0b1f5c7d0ba54531e649 +C = 53927763aa43516fd2da2c4aa2ce4652ead4888d1724f706 +P = 3ac11b5bf9f2bcb51b COUNT = 87 -K = 6db80bcca01f3ae3b8889c60915a13db657ce20f29560557316298e89c383cfb -C = 526d9319bf3919241a73d05f98a48ac9 -P = eac163c1 +K = 66403afd3ea91ba9325b0b1ef6b39f923a6edb7a1df23108aa2f72e72be0594b +C = a95a6d0a7906567eb88fe8a2cca66c7493535d2279db5088 +FAIL COUNT = 88 -K = c5d19d70744b373391b3d19e10a4e048ed5c567c5923f981327c4cbfd391a5a4 -C = f20d271c6dab1c8a47d223727597d3c2 -P = dbe5df3d +K = 15603340ddb6ff3f5b4625c1aec3556829e61cfb8f0a7aa1437682ce98fe4590 +C = 5a8b53db05189cf2e7dbb23bdfda9fba2f8013ed220c7641 +P = 86a00c07a7dedd21ac COUNT = 89 -K = 42e8c2d4052ae12cf2c2effceeb5cee678cb3061ca699e8cc5e96e5352476683 -C = 3ccb6bc273fead866069ae3ba95347e2 -P = 2192c9a1 +K = a63165f6b731c6dc98d54da60f779b8392c7f217d3d18c5794918428a929261f +C = df7df07201984f5617ddbbbc6bbcdcc6fb54ee2938204324 +P = ad0c28588620e75b45 COUNT = 90 -K = 188f64d003b0fd1143459ea8642eb7412bc9351056089da85a430088b88fd958 -C = 1a9d2d3e07ed2a73fc947ab5ab5478a3 -FAIL +K = 7313ae8d7c58c4c50f31470464b6037a035d9234d9499c5d3f271b37b8453bef +C = 92538958bed0758b4107c28fe0da0083a076b3fb60615665 +P = 6c37a824b4a09157d1 COUNT = 91 -K = 565567738c9d196c1d9aa3a332f4db6024df4d0f189a6d3f38d2edc6b21b8745 -C = 3f9acbb02340e88a68709d110f48cc2c -P = a00c1f45 +K = 358306384fbbe89fdf25f2f7fbb3be1661841249374a0c891b8d69e9c6912030 +C = 4240784fe870fe8566846cda4c42a3d541369087dfcc5176 +FAIL COUNT = 92 -K = 36f621c7afdd9460106ae9961f285f8d014a34dc3eaa585ff557cc7755c2ff22 -C = b3e4f15803c8c96f382710b48234e1fe -P = 87c8cf68 +K = b60faeeef7b6365c73e6015a53dbd08213802a04aa460c58d6c5da53fc99586f +C = c75a8b3b282b9158901b4dbeb94c390cdf3a7ac61dcb0d5e +P = 3cfb6b8259eafb7c2c COUNT = 93 -K = fcfa7fb35d33b007b2027b3244bdef68993e147a96a382ea80c10749a21580bb -C = d91d2c03a08ac06478f0ee5546226fda -P = a69d8c06 +K = b41701491b600473299c23d5459888dcd07c06bd5ef9265d9e20296735aea3f3 +C = 3852a450ac6f07e31891006e6b171337be80cb15bba5a911 +P = 322ad4b37f95104779 COUNT = 94 -K = 83177e262a67c647ea5d2c1d7ec78574e6f53e6fc5214c5ba7eeb04d30cad7bf -C = bf439d31865b718333f7858ae91eeb4a -P = 3431c97d +K = 7d5a6e1bfe069f8993d39b68f70ad285d96ea1209ce53da7c968d14b02547666 +C = d5adaa8f5c3ec2e8ffd1619e35961fb8210fe0e1b94ef964 +P = c4c9afe7baf16cc5c6 COUNT = 95 -K = c0d1403a2a7d45376d947a96f87f3564e88306364f5ab6156992e8800b3766e3 -C = 749ad82470e1d616366f73983ba8e860 -P = 661b5fdf +K = d5c79a33cd871f37b8e146cc6454621bfe90ea1f2113c59749928dd0a80c8886 +C = 3bdae26d08c56ff0890ea1b443f8f6e859450b47b9cc673c +P = 57bf03ea684cdbe626 COUNT = 96 -K = 0c985d0c2c5c9c78a741e7b64da8c64a96acda6e508178ab8530ad4f3e2cf63c -C = 9431391c9ae048d346d84d04bf7b214f -FAIL +K = 7dcfdb3d52595d876db5decadd81de16f568fb0fc281691ce283086e00e138c3 +C = f78a990f50b69aa9c47c5ba3f14aedb8c957bd9b6b905e9e +P = 2a3318e9fa1d9daaf5 COUNT = 97 -K = d90d81236930a262bd97db8de7be076eb86394af932416c69317c5b1d331fd8b -C = 63d270d05ed128909d26f01523804dba -P = f7129124 +K = 9cd9ffcbc99780a6faffbf18923df7e4be435edf2d796ab826bc1fbb8c9c4baa +C = 1b952e427afc2b891477552ce207c66250e0a1a2140c8488 +FAIL COUNT = 98 -K = 7d3f6654bbb535ee5f9527a5ea95dc2aec789b1fa5d1266269b70b248dbca300 -C = 39f039cb2e64f535560517f578ab35a7 -P = 1b65b643 +K = 6ffd296a4a443002c86b7affdcd67b06840ad664b7be68712b92d6a8a8c485c5 +C = 6adfbc48ed9dc3890cac459de0dc1e7d3dc49696c073ff1e +P = 8886a4f167ebe693b6 COUNT = 99 -K = c2fb8c456a0d85d85dbe58d6a5ac5c49534d9e739c7a03eda721c3d92b3e48f5 -C = 85a83c88be419e5cab1e60c4b6ddb1e9 -P = 466e2dac +K = 010a15f7b5d2f0f65fb1ddccd79749b4481b5c584fb6ed660a09c6ee02c53544 +C = dcb39a6299db3fa8280bc57aea65b449403713af5c22a001 +P = 1f8edac08f426c1271 -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 8267e15d50c18cbc0fb39d6f3976405b38eb25d6b007eaf9384f69e03fed8765 -C = 0577eaf7126e6c3acfdf34d0e4c3bc0677530a756181c1bb -FAIL +K = 09ab4286a845c18bb481da91c39a58fd52ed78d54973fc41f25163a0c33f4727 +C = 0a180a84b01fc1e44b9f9301cc89af95de758219015abc86c3e48e764e7379246ae7209aaa4f889d +P = 4c1b6accb492c88b10a56a56eb9b6d6ed9797056a559fe3f0c7c0429a200af COUNT = 1 -K = df98a7911f5c5827b2ffbd8df90d1dded708913f60f05020f2b508421fb32501 -C = 65e6bcd9d6362da134e91df54e3829db273f1d131ac36016 -P = 4b2a97ef8853b41aa4446899 +K = 1c985bbdf1290b9daf43c8fafb886bc00197169d7f99b9af2d2a7c23a5983a84 +C = 453efe40ed13a64538aae93be94c7675c07eb88d83c24506dff121c5ad121fb9b89882a48cec4fc0 +P = 1ce7290b5e4fb90c7db606f80dad76d9f7af2324e7608adbee861557c39f58 COUNT = 2 -K = 669049529ee08631abfa5c101e729fe8476840e685728bd1b545a92323d7e246 -C = a6af2464615bc6ded82e90001a8c9b337818034bedcfe106 -P = 7f4578644f20098d2b7380fc +K = 8c35fb77766d04f48d5b52275c5c5f31f568078419e5c2335918965fbe53cedd +C = bacccb1714dbaa4908c2654aa8dbb1ddbddd8ab819429b026619fb1c0fa75a8247372b2feeab1e1d +FAIL COUNT = 3 -K = 9d2efe49b688b80a9ddd8d5bd387657c594e8bcdbc1efe4a8fec5b053be02c94 -C = bf56e1ef7b95f285b17906c02855b733c4a89fb4c2f730ed -P = 4acee6d6812fbe99085980cd +K = 0445b86d13b7b76c0089a63dec70c32fded9607af63714b7c3cc724f49c1c6e2 +C = 7f63167976e71e43b7b135c8cd12148f826f56e73f6fb6e7f6cefa23c34302ff374d44dd66b6bb01 +P = 7af8c3b32e61f8b5c027383a273927b8fd09b75692bd0b713ec8ecec0bdd2c COUNT = 4 -K = 05b567b369ce6665bc0f7a9981e79002cfb4c3a5e6778dddc54ab78617b2f6b0 -C = 4aa7937e73819d61dc723f3c442df2392b59684a4a469b7e -P = 1e25fac8b0bed534f9bdf03f +K = 2026def62f9a7fae4196846db5a2fa174b639ea7462c4d08089d05d2b04f2449 +C = 6f78df8082963e878318b31bba7c0c289d01f6b8282f726bb9f643025579c7fe0dfa872d307003ff +P = 290b2dcf3b54bd8eb5453f491c8f9f4cff4c963c05d164485c26da01c56a0c COUNT = 5 -K = 7752a72ca42b38a3589da92571aa613a4d89d68ab6066db5d8c3fd9333d6dcac -C = b4855d86621a26d5f2d7ab63e2f92d5039b083ec5402df60 -P = 455cbd098a1bb6d67b077d55 +K = 2a523018d1d48ce35d62aabd1c84e31b1477b530f709a47240b96621793f86c1 +C = 87c16968eeb36ad6581beb6be06e330b536db1c7bf0a79f05627ad781d821ee9e1cce489680242b4 +P = c9af263dfc74af65082bdcec80ff33b62894a486496f8787f89ab2a16a4d67 COUNT = 6 -K = c4cc25dd9cbf8a5e622bd76a918a21508814460b4f72de21c998923b3cc994e3 -C = c86fb290d26ced0fef065a38f2a2ff3fe6f25b2693e30229 +K = e3335277849dab5646d0b0b5f0f5afbc140c8ac2374cfb7729cb889f6f161fa0 +C = a9ce4bb6abb4ae03a9ccee348dc905bb839efb8785ce7195f4b3d8e4720ff004c3ec81d365ed1e3c FAIL COUNT = 7 -K = 58bb2ff010f17dd09a3b602d51eb5fe828ab38f388f0bac01a1c1fffe90bcb93 -C = 3eb6186c7bdf32d66998432ec499cd86065f3ff0f7a5b7ee -P = a18af80f5a706cd29cc396b8 +K = 5ffdfb79b073469448407e274c56f5576818ea725c61714709cd3b118cd183d1 +C = 63b10e8b2f134eba305d31de31b9a97af557b37a34ab745ae56a293011855d377ee60fc50df7842f +P = 0853e831300b1b44630389fb379310cada6a3c34bed401cd24b69ddd911fe0 COUNT = 8 -K = d29a55f5d2315210ccb7ce1e2440e9e3325542159ff4e693c1f38805c64eef2e -C = 22faf19d1739f063b18547cce3b113194500bcc7093388eb -P = a13d9960784f73ccfbd8217f +K = 8650ea17f8956654019d0ed8cf255b8661386d74d885e70f9d2338e02edef926 +C = 29ef4ce115e68ffbb8029d1927c6c00e4f7b0a0b5045e2f9b722519b6234826870b42e5b671af9af +P = 9559a39ef4d2f93736492f13e31564cb256b8ef156c0d0a4bfa05f9143d66f COUNT = 9 -K = 46614bb3f325c476c4adfb35a15bfe9821fac31396994551c46992731c05d8ac -C = 765784757d2397098d4f38b5922e3fd26b5b5643f8b0eef0 -P = 59c13423d3f925a7cdfb621e +K = 11c89e37ebf84994f9cbf82f1fe2235a85be36270e8eade02c201b5faeb1d2b2 +C = 25bc25910d7f4985ed031f7793775ca66d0e2fb1ca15ff0370c2ab92cfe631aabd377999b7c038d3 +P = fe1390119544bd639e9537af68d38f0baaeeadc4d242121e00457d0c88186d COUNT = 10 -K = 1fadf4a31d226ac5a091b767d7e87908fd2a4facff3eae79a8288460d90c8fc5 -C = 3e68102ee5c852ba84b6b067d0e0620fdd805a8b8adf0ae2 -P = 9f0daae55d30f32305d16af1 +K = bf5f284d342bf06972eb7462460e6d92ddd99fe48f4e4f5526d37f6d2d570ee6 +C = d2bcaa23b8d20b9deda5b27c2c3fd724e9fc34ab883e369aa8af2755afc2af8eff8ca5b14c50a4a8 +P = 665af30350877a8579e9760ef922c71c4a60763cc3de51f549a3bed7be9676 COUNT = 11 -K = 7aefbe871562e40a87b22e922afb1b4201348a4672ba55b44c02b54f70025b64 -C = 018fce4c194fff3771dd922d329cd2f231f61ec3cbf3ec67 -P = fe492738b2723cbbdde230a6 +K = c7bc0dc3cc41b31d06cc08fe04b76e362a053bd0aefb189d266a335c43bf600e +C = e1d65b0a04eac4dd520ff63e349806d456904e11e3afc685fcea87bb48a9f92a178264a6724d85db +P = 20f41ce21bdd0275227afe029a625a8fb13077d998291ecc1d4d01e28b0330 COUNT = 12 -K = e1fbc8c8d760c2ca2b95f9f823d6e6e0a90eae72138842db765b60aa76f85121 -C = b4de374cb82d128d45495a737d7c041b66e418b821ece2f3 -FAIL +K = 4e71549efe1b1dbd08f971f9c8442baadb8fb743b5c289f8621bf094a2ca2d56 +C = 536b4f8e7a0d30c7cf25f3b1fd798924a93e3ff42dd44a03a827db02dd8668921a959a6c13ade208 +P = 6bafb58647c47badcc53c6d55021b8997b5999cea7d84a54d222ccc26bdd1e COUNT = 13 -K = acd2785253e53cad17470d575902dd33cd0fe89580d7155921a2acbd6dfeac14 -C = f8d312c92f5eebffe55e83d0b9f257382357c35cb8d70329 -P = deb59e0437b04c49baa63473 +K = b7201247c764d0dfc11802f5011e915aaa9c3b43aeedb17a73381027e913b2b1 +C = 6172bf8d867f86a8e0643434af7c0b26ddc34dc2b7c723e72973ae379125a759da227f6cb13b0b4b +P = a0cd5c63dc0db18669c91f8f8a8d08aaadd39b19a20a675e9ba89cd36f9c2c COUNT = 14 -K = 06027eaa2cafcf67ea009247eebeda46e46b973777c794a07d8692f9fed5d71b -C = 6f87a01276f895b1815435a9926c4ddc57e696f587ba286f -P = 88f335409c26578d698955b7 +K = 169c6bf6f58616f0b1023fe46dcc4a5ecf11a520eeeb4945ff4cce38b5a9cc8d +C = 5dca216b589c95c6df1e0660feeb7a0741046f7a0e3aae9144dca60498bfd6c2e30f292bb1ae06d6 +FAIL COUNT = 15 -K = f8a999bc2fdf03d8c242f16c52fb670823c26df5c22472744454966f7cb1b797 -C = 99dcc3d1b6c1aa9b86087dce859bf952465cefdeb3238d05 -P = e4d31c6228bb4741de661524 +K = d980e2333a5ec61bfd78733b905957ee6eefeb0d25c31a6a85235239fb344342 +C = 65e472797e24e1149ba2dacc4e3e9389c31afa66c9369d7dd07ac13def600977687c9264678cb4f7 +P = 0115ed386c40f7e18fca303831690c9793d74820afc3249acddeed1932e2ca COUNT = 16 -K = 499ce42b4cecbfee212485b6736b5a83ea0c3dab3e40f416784bdf008880e3dc -C = 6b2ee05ef7cbb5bacee8ae340f9a6e7a95268ffce71f4ee6 +K = dfcaeeadabd622ded6fe68ea966876970f2b98c7470cea39f28cf019113daaa3 +C = dededd3a04750bf90ce02bacc46cec7a2cb0611c03554cad083537f7bc166e11a8a51511b0bb392f FAIL COUNT = 17 -K = eedb52d282ea758967c7b817b9034d38750c6d3bd06fd674d87d3e2a33f49f07 -C = cad0c44cdf8ea760fe7312983cb810cd718e5dabb0af4557 -P = 034f100cf5b5330d4cb4ad54 +K = cfbd2b25f65f6dae97ceb448e482a4b9798d890edf2eb2cfc0be5d8b621a4566 +C = c9566debb08dc21339499c2bee9dcc6ba0f90f7f7d9a798ac07b984a91d0cef1356192f5530f6a22 +P = 899ae4556d4c107fe545516ad9f07ce5bfe37aef61e006c145e9037fc53a8f COUNT = 18 -K = 8b0bcb47313d18f149e18e9cae15714c8ec4edc76e8f904b5d3849b033f3baa3 -C = ea49eab76b669880ba798c21543957d455492a96c4ec8683 -P = 289eb3af5a9e2282bccdbe2b +K = 78f4ae5fce1cf1dd41a4009e02d7d10ad0b6058d27c4f00cc116137e97fc6449 +C = 5a1d0c2419da09c6c2aa687e962c679e3bafa0534d019c29ad12e6e7b8936512a6660855cbdea0c9 +P = e36b7b121adb17aa59ef2ce29721e7689059fe8b142074215d69f850a6d4bb COUNT = 19 -K = 82bf5e646bbc7361d939cc5719e6584d467a1ebd1bffb55a9881ecc11a28e66b -C = 25c512ceaa5ee7bd2f266ccb8c1c3f862ab0682351854352 -P = 76bf63882b76ce0cfa54ed42 +K = f34b992a55a79da4731fa7314e6beb32489fcd44c1ad90d64e11c8d941bd8875 +C = 678ec7bb11cdddf83c9ac1bebf260f221abb6c4fcfed0f8610871c98bc49e5400405a6c4e1193aaf +P = 4409da613d4e242e6a274854e49a3103da227ef0453334fbe9d8a1892dc5bb COUNT = 20 -K = ee7e08beec51e0f140483341ccd58c5a6fa88baa99b6b0895f11f2bb0f16dee9 -C = 77e65ee23d01af59b05652889346de7a86057d67dce6838d -FAIL +K = 30e5343285c43ee41c120c9fb8989552b4e1f45c3c921180f48d5263a0b34e5d +C = fdb32ce9b9e0816bebd0939771e9637e232d9297d035f7cfa3286426b4426c3a0422961c74d5610e +P = cbdd3f63c5b60003485bb3a47648fd454ff05a265e6d9c2a29fe1752d16536 COUNT = 21 -K = 310f1190e17d61b04b09034b3584def82448ad9a37e34e3ee3dc64373aa7aa42 -C = f4540db484a044c11fccb36816b726e9ab07c3cf4af2c89e -P = 4d8604db7929a39333ba14c7 +K = 7358e314896f44e5f9663f7a252eb817b98ff5b01f909640d3793e522b74013c +C = 295fde7c3be98f07f85c88f6d660283d92c5a9d1c6398982ef44f4c66181e121459d5621033e9379 +FAIL COUNT = 22 -K = 83f6460002c3db66936f1eb548e83e18f28e8e4b5a3e93e86bc90b41183b4250 -C = e3b8a009fb4a979dc897e541955b2635144d426fc9e288b8 -P = cb94636d61e17cce85a6225c +K = f4cfb618f2de53d06f3a98a448ea81ec2f4e2bbb3d0bb325b83817fb47e83cf1 +C = 99c9fe91805fb67bed4fde661b93a430cbe1054e19b9211c4f7c5263c71a0057f860ff95963622b6 +P = 94e4ef18049aa21c1be0e8e51ac6709e81b7d967b0d2466b0d3b3084b38fb0 COUNT = 23 -K = 4f81776ee2e85dae00cc0e6b31f9913a8bd9359226498004195f852cdc525b4b -C = eebfbc9e61a98cec63612416976c883f3e61853b030b24f2 -P = 4f1aff38969a84f62505791e +K = 568262b1c4daac55164abb07e73eaff3c741043bb9eb2b81503d6ff584da0760 +C = e70714e2315d38e3c30ff9ca5503f65c8ec84de7e1dd8f348129375c69a83f0574cce3dd2e9afa47 +P = 350b92a46f6ddb956483fb67d003f03bb7141be828bfe1fb6510216a894e41 COUNT = 24 -K = bc425958c9c2f431386f5035a3ab2178aa20c9b3ee4315ac12e1d175e87fa6ec -C = 4af9f07b7fe90ecdc7bfac69d062639a2d8c3ec6a8d2c706 -P = b09b1d71480dacccb70f31f0 +K = d8af02a4d3838abf4236b6eab637d4253363b4d174b71ce72c61ae583097023b +C = b1cdedfb2dc12490cde8265af07b1e9b0e68a9eb11c01fda53e18b17df3c4956d9c2dbc06702ed94 +P = c9bb521a979b54ad4e51e6657e50d85c99d2750d237330e7dc7fcccf80cc2a COUNT = 25 -K = cf2bf138150e45609dfb7a0ae0c2ab235de7204891be8808a019dc5054ce6576 -C = d2d484aa2052be63a97c877fc6a3df19575c35c0cacec39b -FAIL +K = ac407c49c58d8be36a0f6aded6fcc7a30a58ee4300ea2ab450c6a7e53d279b0f +C = 8362dda59402d8ae3d677cdaa42a47c4777db60db29d86ad42d43c77343ee9cd9a44946e47028b1c +P = e768a98a2a75f63624439622618e16890f77383222b89f6b71b83975a4ae99 COUNT = 26 -K = 2fda2703fd5e4eaf2bd7223c715bac2637192880d038a1e0b6265b7cf24edf7c -C = 1c74f3cc9a97eb7e5ba5044a1a4009ac655e4266c6adb547 -P = 92578e8ec75889177692d182 +K = 7d796cff5931f23de3ac377bf921bce1565e917dfb5b65fee6ec4afbc3bb7335 +C = a8344d44b7b02eb48427b23bd5fd0c4e24f7bb64cbfc02d52d19f72c2a2aa10c11bf70f84ff4898f +P = ae87a4c6eed761edb37a098fedfa03f4cb38e024810cd0149a0474942d4a3d COUNT = 27 -K = a88f6ef8bb69a5262558128520489429eeef956e100492584dfdd0c74c346524 -C = b764d4081c428af4d441a28d02fa77e5b12e6432ea93d8dc -P = 9fb9daa6172c18207d27ca86 +K = 5d209b3afd34285fc9a586bc2091c54982fe5a6d43cedc62f395b9501997897e +C = 4c9f89aef603fb5c69866de987f2c75e260bb41b5b838095bc59267a77d56de8441ef3e31515b239 +FAIL COUNT = 28 -K = fd0b63a7681f879eb19f7c48376135aa5c992de4c3c19c1913131643adcd4846 -C = 7e02e14896ff1774a6cab9778172b97d078788ed0dd90466 -P = 7f849872dd4fc274f90a4e25 +K = bb946f140d39d16b709c8314b8b41b9f14545aa97597905931fad1b7b1d1f1a8 +C = 2e066bc3a01e9c8460604d54cfa3176956327ed4e6b2ec1c4940a6bfe4a27b16aedc474c2adf221b +P = 993ac0d36be557672bb9cee70041e73be298fe75f435b66462cbf17a35869b COUNT = 29 -K = c3af428bdb986dc1198fcb58da2993f762966ea4258f47e87502fdd4a688ed4f -C = 4272275d8471469f501541a7804a66b7a232af378afc4e33 -P = a3f5e7f3a6649b580c77dcbb +K = 46d140cb95564c389ec749cf96018f1c39ab3e81af22b2ba09ed72263525e02e +C = f82fa43824667e54feaca09a38cbf7120a879de1a805fbcd43ccc55379b4b471f0db05a2a81fde77 +P = 8d5179fd891d5a7294acec344a017ffa8924879538b63259bea9a089844078 COUNT = 30 -K = 26288ca276ba940d40c6fbbd6456120cadf5c7b2db16ff48471c4c47d6808d86 -C = c6210f060bf9001a48bb68f763a73e6dfda719b7025335d0 -P = 41ba243dc1fa6bd660f1b530 +K = e081a69538ba70bdcc5ed84608d086b89dac61b7bc9cfc791c3714d9858e4d2f +C = fc990d946e1f632c0a2045b4ac458127ecebbdded72703d5395cb9f70a85f0c9b89e5261b10241db +P = 4e6d9d3e2abe5c113f62ad9deb4d15d7a3e904e4a9573ab767343c6ae742f6 COUNT = 31 -K = 22460d7a958a35678a5436a8d6a786ee8b0bfec6513b9cc6ae14150eb4e3dcf0 -C = 7c896d6739042eb20358d3ae2d5e859c7e9f6ece0fa6b58e -P = cbb0a738226a85b58581745f +K = c6cf2b1060916352c6ac9a6a7b536e1258e6fb6eb50f2a5f833620e9bf7f9b90 +C = cc089954d8bcda9064a260f9b167519855c16856a3b49358e48959ef20c267af34ddcfb22cbd6db4 +P = 584bbe7f2b7f339da19aa3a17a5765e96f794308badb9f84a91e44f95ba3ca COUNT = 32 -K = 950c1771b3a1bd52000278a329ae0f57656b708d8df0be5d49a7ce020b7c2ac6 -C = bcf195c2cb01763f6d94566dee5e2ec5a485c034797b9adf +K = d16c9044d246d48d3338e4b86c8b2becbf5f3c607fa1f0a63e44b64817d77320 +C = ed38527e28219ea61ab2145930cf50a601bb1c296fcd2816c86d3df3a40766b8a34df8ba54ddde00 FAIL COUNT = 33 -K = ca9905236d19fe888fe2e2678adba5afc858d04e3a94628a1fc3d8d2f5a779cf -C = ced8491212ece6e339049de18ba73ee593182a3b44a072e1 -P = 558287b83000f9536e9813e7 +K = 1592ace45b8a922bc854d3aea6b4da5337b10f402e49cb6a196494c586d0f9fc +C = 2af6c5fc4f807af62e79de748058f91132d53a1ac7ac7c5b9975c113723ee98a03e6092626501d8e +P = 3ac4c0c10e4c6ba33473b4020d0e79a9939cd58c3fa6bf0e52e690968a3c01 COUNT = 34 -K = a3bbd106944167de678418025a3f29e39206fab0fdf2cf63e17b95855272be4b -C = 1decfd35ce8c0054001433372120c520f35dbe24759746e1 -P = 43355337134d961210dabb91 +K = b335f3c740b01e37b8e49d0876a4c61aa797d7dc666e903ffa2fe26accbc3560 +C = 74b9f50605b070e306e1e7a87e200fd761fceb0a4ed244891391cff49c6ca414e25672152db61ded +P = 631474d193c974ee167565cae63d43c3d3eb2d5e4cf35df2e97604ac44f904 COUNT = 35 -K = 2189e941eb0cf4ef1eab85d08f729b5b845cf8bc24aab4943203894809de766a -C = 63d0c2988032cbe44a79cc38ee935dd66aa91561fbab53a2 -P = 9b6b753fb0973d64440b3c3d +K = a6e41ad768a6a387963169722a2d7a5e4fdb75c42e04491d13a4f066e2164fb0 +C = 7bdbe1abf7a5a813d3cd1727a970147e361cde99ad5c362ff3ddfe9820c94331cb8e3a9db0719166 +P = 84d5f17c6955e16dfa4a524ba29ca20bbd96b46869c944cc300ddf2f015d77 COUNT = 36 -K = 65742235c393509b13af62370a015edae49f5c7f307994f2ffb49e4df4d72c1c -C = e4e7d375310cd7a4cd8f957803047bbfeb423c7bed0e3ba3 -P = 138ae3a1b8b5aa4f295db38b +K = b1be441d8e3156bd920a0f3156ac585c8025511d6bf4b9115c314ef2a7f40d64 +C = e8866d698b6655c8873469f92b10e6964c2c9e0eef13f4da4d4bf484f4bb7addfe58170403a505fd +P = 355c2876debd149112e7042d079b5399b7c1eedd95dfec9e1da12b9dacb381 COUNT = 37 -K = 361e7810b064b4f3f8af9db85d0a35dd0ddb2fcb8660e3239b56cdb4e17be0dd -C = 888eb0fb3937ca43b563b9dd13b805f01b9a56b016f2959d -P = d0d972ee742d0d53d37270dc +K = e233f5f76443374657910d6e8fb286e02e484cb13e730638cddfaf6934480abf +C = 66d7e802c7a9edab0288f8cd1e5ab847a479b9701571c76289108cee411e434d27c10ee468b7df89 +FAIL COUNT = 38 -K = e7e44231dda4579f5842bb836b688a63a919a6407ae6d8e375d04a6e76d07306 -C = 9466fdc9868193334aaf774fb260f3799113cdda03fb7257 -P = d14b1bd2e0347e3eb61dab8c +K = ae1ccea525b0b9714b57d1433658fa2bcaf4a9af8de67e5eb3583685a8a02f51 +C = f226e301ed84a8469fdfd918b7b63a1c76d87f6fcf4b91c705e6d79942b63ab4e6476d2ae76ca679 +P = cfe682216026376242d892e858aff7b64b98b33d6fe8ec1a50ab3485296fe6 COUNT = 39 -K = c82aa540e0bbc77a147634cc4b0a1831e8e30e6f71db53ad3143d0d56fb23b65 -C = 199afc22c30e94d5a4b72b16a39b9510f1f9772a3fa8580d -FAIL +K = 57d774fa4708c656eaa130af03c1a9dc7b3043f91c65ef64413acb7597693a69 +C = aee74e0615bb45c520fff7434a311998763ae44e91ede06d1e9895110494801650ed96b45b9981c4 +P = 1b0784d7f0dfea4d6c5ce003b1bce1774a010741b318978d72b1be564e7e62 COUNT = 40 -K = 8799d0c45467d87e6a2ec068dc8dcd22af3f50ef69b7abe3ebd68e02e0ff7a63 -C = a33b6fa5aed11222e6bab376a7aa38b13ef2046f1277be5e -P = 62c6d50c4696c7b9da0e7a76 +K = b14e439522dcbb029f3865de5af79adf8bc1f79437e7062716fac35954cda9f6 +C = 2e904d5302063440d987ef2b010aba85f01929ea799713b8a018cdde85816cf82df8d06245d13fc1 +P = e84fdfacf7f2ec04a64e0f91f4078c628ef718c7e7d4aab9c1baf285981d2e COUNT = 41 -K = b13cd6a5b4782d88c7328031c55981458cab6777875237e4b19f7b8bc236c661 -C = 24177526dfc604f646620069eb85da50324d5e1c29a2236c -P = 872d8aa6c0f9b195ac5221e2 +K = 80194781ad93971e580ca9fa42ff39c7c45f61cac515bb4fbd10bcf8f7cc314c +C = 351118a918b436b92cd966efe5fbbed0975bd7bd1881e3f16d1d86f67c476cbcdc2a8f6c7e3acf3f +P = 9c40ff5538d9e9f1cc4c3f01864243175a0dfad52c58ea0861959176666d90 COUNT = 42 -K = 44bdbd5f02768dc4e661360041785f507fc659f919a62a64bb250eed75105b26 -C = 5e9a5868dada00ad47c9eefb4727a030a7eb1011b9404e10 -P = ba3aa829999252f6cacface6 +K = 818dc916c616931d04643aaf117cd4135822a22e09c7542670dc959d8464d864 +C = 19694958117c6db1318dddf669824c9d496fd791838aac9fb7d09f070576f2a14d4f2beb20b7be2b +FAIL COUNT = 43 -K = 5619fbe09de3ff98f2de8a78e9be0377db3893f22115d29c4d3416417bffd027 -C = 890fd5104539f6e2cb00173b037f0210d85d81ea0d7a0112 -FAIL +K = b642aa33a462460829a5dabae85da9ec2e8b12ac2feea0ee7b1cc7d682dd4245 +C = 34050b5906bc5500949e07eb6e260dd31fe5dfbd062bf6e42154de3f7b4e76c9138cec0d2085fd0d +P = 9bc82a6039d3c9d6146bcaef4b24b0d8906846fa054d9fc3ca62d971ff1baa COUNT = 44 -K = cc4f1a5114f660e314999fe637e4c9e311311022ba8f8ce36268e9546dfd7858 -C = 91244423ca97f6173bc407099552bae37fdacde8ed303372 -P = 3b3f952b5264e791170e0641 +K = 4d17b60a833b2d852f8f2f0f531def7742abb52617857b7e8b430b3654f04b05 +C = 05a5ef0839edf50ca158b1a37408df3211612744859dff08fcbf307e6cfbd7c2d2ed51f229004093 +P = ec944977ce561650c7055d0b46b01bef291f2bea5f67def79f4c2b11402349 COUNT = 45 -K = 6e8ba2cc26cdbf4f9a62628c6058b92652a35dd4ed6a6d669e1b1e003d63330e -C = f7c1732b378026b8a9bec301fc82158e0b944b58ca7e7a5e -P = ee0748b5030558ecf0a17be8 +K = 36704084e0ea2a13a6bc903ac291503c6951b00ac7a3369767247f7aa9e47a0a +C = 19c6bce10d790bcb365a9457671226b6e5810ba5621d937a38875e6881273658f5ff1f309d626faf +P = cd48e297d55bb8b17ac9ba8d543a685955e12d34a14c3ff72fa54176c5f990 COUNT = 46 -K = 4da1e8bd0d3f895d439561cb3f7383d78894989198df59994c5425d64edd7afa -C = e115ec8520fe6fb608b35f954b5bf6644b4cef1516df236c -P = 11648c3b1da625e75423a6f2 +K = eb65a9c006377dea13328dd176bc2fd703dbda9929afab7a6c5be131c36df638 +C = 052994f99130c6f5c97ed78e7979f877123540397534b6eafe91b82d180d1c0e16d61780f660a141 +FAIL COUNT = 47 -K = bca90270e722b6961c44ac3c8be438a107dcb7ce2fda0b1c0817ed860332615d -C = db7c1af05cb5f86f64d5bd17d4aa6aa270c353eae04120f3 -P = 5cba2c6b4eac84582abd1e91 +K = 19c83523fe7a46dc74fbb5fb0c4723d418a0b0c51e785166d8e4ba5f1a5d9245 +C = 7baa10f24d7f6a0c1079624dc443278a0f8438c39278e874fd3eba9ca6a1f7a97d9b29f29ce204b6 +P = c8f8c152d111ef231f3673234f718e821956bb195fec579675d68ed785d180 COUNT = 48 -K = 8d783d27cb6e3f50b59c0a1e0e27c8bb40794158f89633397999d0115d3593c6 -C = cb0ae490835dbd1bba4cc8a830d3c10b290a1be868f08ae1 -FAIL +K = 25fa704cb67324160b7ce8fa17a0af007acd2341d0e98417a83a4df121673562 +C = d8fd92b91a4809ba3aba6e3f97d0259dc0c7baf76488624cb87a14503c666bce1f5762bb045259d1 +P = 4b2d9f4d837188a267ef753544206ce98223a02af1835a0f2bcbd017f65d42 COUNT = 49 -K = 74eb18d14b68aaf2e2c2ff7eb1035731bc13c7c1fb022833abe886410c66f005 -C = 00e8651ad635895a303288c0735f2ac2b7de3d600e01771b -P = c68bb5c2878492f7d04136a9 +K = b2788ca6c7dfad851e2eb1bbbd4a4226c370196bd0544b31adf793aeda69e953 +C = 461ded064f5977319832fc3768d2c5f782c50f0d1a39c140dea97658639aed3ace685861e44afa21 +P = bfcbc620a34cf913241f445da280c9dc8fa89f1fb8366dce1876898066a8b1 COUNT = 50 -K = 197b54f791785ead55868fec2258fb99be7e314bc1bf5c2873367d37e8564f85 -C = 85a6ffe52466d6833821f59acc0c735afc89af066775e804 -P = 72a5f0b351646d4b6a8f74eb +K = 6faaf0d5bda313a7cddc20c83a893b5ed3989b85075256838289ffb99aecce3b +C = 206d179c2cca7a433d75bc61d38c55bfca7dd8de605283639166a7fad987cc656f9a6bd968b31962 +FAIL COUNT = 51 -K = 4a9c36dadf3563cf00eed96537b66ecf1f9a75ab853b40c8fc30743c6fbe041e -C = 38ce6c201a063fedc54eb85a5a890455a845b93e0623fffd -FAIL +K = 8117d14074b5c7e9344c9b4214135c76b585bec672f2e054ecc8350d752d6323 +C = f399d66f37c6ee6bd695467d3864f9e250b76f587317d131439f2b8c5b34a3fa223155a639439c63 +P = f73ff887af81f88268bf0b0746c9666030ffb0bde021c8d9dd471aaed3aa59 COUNT = 52 -K = bcdf728eced79bfadff93123019c7dc06e4109d977886efaa5c678e133c2b4ac -C = aa09baf936daef0a76ae3b7747cac33e5bc0aa0dfa72a8fc -P = c58eaf21aaa1129d0cbdc3c7 +K = f89732cee8226735ee03020093d02ba1d1f658bd192532f89f14c4706752b50f +C = 784b3288625af3fd5b675c0bf72e08be1dded4cfeb1bfa007dde6cce875010e265ec6b0af91d6c84 +P = 9a5c3c6fbca7007e1ec9fa62f50c46af2186f5ab3b5e936ef9845ecd362a6d COUNT = 53 -K = 8bd3f3f5c954d40bf79eb6c3b3747e16f03d2695bc2e648d567f322f7174ac13 -C = abfc704d315fb231aec7d1adf149b36c8aa90efcc73c5e26 -P = dec6d78168be9505db90f570 +K = 19bba372b4e65257662bbd9c95abdcae73cbb3b336e85910f561c81b210bcd6f +C = c79bc2d72144d045d06ac34169befd251fdccb602a490921edef5fbe54e5a920656d32135434c8e5 +P = 1aa77cf347583901fa24ad28158cb25bbda64f0fb9b8632333d7790cd6b1a1 COUNT = 54 -K = 356d309219ba4c32d9d899ec9363c3f9be70d73187a482064826d467a19f07ec -C = a1bd29bceabf8d6d77d064f919b9891b477c4202bbb3b1e0 -P = 4b129d3aa3dd32502e1ca25b +K = 8fff5784dc41f5e0adc843adae98c2ce261b4dcb9d2cc0889fbff7b31419a3de +C = 9c7ca49b4741bc75cbc5f97749dbc209eb77220cd0a683d6d6e97a25511dd9a704ddf77ce74ae5e4 +P = 2ecb47b8144efd7b553054155814090edf3532dce47346831ad8c6ab5f8fc1 COUNT = 55 -K = fc3194310bf974f756bb3e239c98a790fe55708a12ca9dfd7a6abdc6e627536f -C = 0fa93535d955b010bfd51e356859aac28977e81b17598752 -P = 6831c93e5c99e16d43708270 +K = c6ac407de173aa4fe0dfe4b3a82bdd7f27720c483adacf57461ea79383feeb47 +C = 40ffd511f59c2d44916844d7003c4e0ef075f292567c11f82de6e69090c22d3413af89d5c32679c8 +P = 172b19e5d799fb749cd6af9087f1e9f16c8106b841c9e3fa64679560bf2026 COUNT = 56 -K = 6e1ed83eac2fdc8cbd80038dab641563742aa97f961bfe03e6c66ee335b957e5 -C = 3cb047d9b333aed2bae5991a07fa922733f32fd66ad51a99 -P = f8feaae532d660a32850ef50 +K = 9c2f01de02319ddedcd6193769a6e134ed2ef4b2e36b0edc1719fbd3bc3850b4 +C = e3f3b2ed794fb604a162911a7d8e8b44d7b9ba65834ed9cadf410e27fdbd11934ee1490205f4c2b6 +FAIL COUNT = 57 -K = 3600fad75705cf87e270247f5651632caf8b0ed8f86db799d5014092c74c0635 -C = e6a1eaa18190ec8cf90fdc7e5a0a8b413d77cc83b29d039a -FAIL +K = 082c6d78dd4d32d534d61d27440cdce27770e023711eaef16d5cd129035a0213 +C = dc06cc5b6e15b420b914c18c9cd545e8d932973c560155c2310613508c26a9a6e6d2963355995c49 +P = a1b8bf83a816db2698d697aea70634ba7877a516dff3997cc3e3d5adb79042 COUNT = 58 -K = a017ce6c971ebcdd56630d6a3fd7e2e9471aae5986ac7699bc7bcc85848eb6de -C = 1dadc14e4db110ce909a1493c0b09691d2974f33c34703b2 -P = 9e4d6d92c6ec507702e5d6d2 +K = 9700a844613caf56f04670c628778a553f7e20952c38b4924b1b923b0489e751 +C = b2ff1731fc97cddaba6e349e51cdeec2bf142f956f0b39b58bcd418fe26c4092346f181c08b47a00 +P = 80034cc8d9526b533a1925534b551a65643493b06089b377a7aaa086ffd24e COUNT = 59 -K = f1de341a5b3e3d46c14f5fd1e303677c09db5fda4830bd689c64c76fc3b68cf7 -C = 95f361db1d4584cb826fa407c90192415ba3e70d87f46160 -P = 4b66fa2d15d747e33e4ece55 +K = 2cbd13a605e876883da9ab158e2bf49ba0511825be2da77baa59579f02f5ecc5 +C = 7f75c0a6b55f2693529b5882043afa12f2ff7a7957a9b5a2610381b85399416817d81c7219a6b6a4 +P = dd95f26682534bf3f2aab22959786167dccceaed10da7e48d79fa8bc05494f COUNT = 60 -K = 8c02cb0214584b80ebf1086d54e9007aca9a6de72ec57bb62e700238ae00aee2 -C = 4e71f0192a29cf4ebcb180049f62555a7e828123bce44fab -P = f75ed59aeb4fd415523f0900 +K = c6de7c30d46e239d412d67f582f4693617674b48a979b011e29a78f119846ea9 +C = ce51b4ae0dede1cb5302dad3c58d3a6ff89e1459b9b365f5f972cd6e63553c92dea1bdcbfb4606d5 +P = 547b52be5e991d8c218970a90df96e8f9d925b28d4202c8ceacc04a6285227 COUNT = 61 -K = 06efcbe83923076241da2f4638d050a9f07037ccf845c83e7a35324766a350b1 -C = ffff6de64ae2d2558ebffcfb4065b414b4e76cdcdc1cfa34 -P = c588b48126e16fbe1f5048f5 +K = bf1f89a8fac36e75c2fd7d0388b43f44e7e3a3ce1565cd2da526f650ea923f22 +C = b57a301fe7ebf13aec1b191c0c4e78107736debe08cda06adc3482b0bab9d6fa746dedce385325e5 +P = 74e79037af822e411364492cf8c372c78f240c3920ed7d0951c5cc2af416dd COUNT = 62 -K = e01682a37c3f01055b13c608e7ccf3846024ef939c21c01eab2cffaf05c2f919 -C = 9dc7bcc457cb1feb08a3c56c3074d1f377dfe499da9e26fb -P = 2629901f1e6ab8a0d5368d87 +K = dad8d0057fc7e9c936ed12dec3566464a66850be33753964e594df63298d7d52 +C = 7a6ace289a56896b1f5b8c9cf686948d0774e7111b587066fdcefa08200377d12dd74582b53ecf00 +P = 6b1866638438534add76fa13e6971db7542d7290450bac473613f055472894 COUNT = 63 -K = c1aa1c46b8f020c330d347ba5e49ea135a29b774bc8a1219e958badf31723d21 -C = 8d20386eb776e1ca4e4ba578ac1d24865455de9fd1d705fa +K = 022c98241d594c5b652e4dac8c771019bb34a3600992dda959bcebee536354f9 +C = 9291f50c8b6565d46e1f419fd028120070833970a2c2cde039f89fba64d34105360fc3fe2acb21ac FAIL COUNT = 64 -K = 8eed9ecf5fbcbe3b8ca5c6ce8871fd5b943aaac72cba9ffbeea373de76284d91 -C = 71f49af4334009b5721fbb08ab0500442c78f935476a1299 -P = c5dfffd289dc3466a73004c2 +K = 71204b4443e6439c6f6dd13d7e2a2b4300551945b70f02e6ce436216cf534625 +C = a940646ef389e8da08deea8770bf13a6ea192747ffbe3fb703aeb8878b045a45ca08ad8b5572a76d +P = ad0608ca0ddbee82374f5ba8356c44947354856afbd5a9c5b718a7941852f5 COUNT = 65 -K = 644428e669832b1a7bb2cbc8629abe71758437f6c5a587aea083147808519588 -C = f395d09d4c7d602d0e8d154be4eb56a7b9cb78c83af757cf -P = 6f365497b675816b39c872f6 +K = 6ea6a7f09494b59a578ba775e5b3f8a922ebdff563a1a8a9fb2bc73c7b11012e +C = e85651d4e0ad849c554a300e73ceab48c9d7b42a4251e05e63218b660eaa98538c04c8ee623992fa +P = c8bddfd424009bd574f8125ec014e8ccddbb840541713ef5b4ada2e9df5b80 COUNT = 66 -K = 39f5becebb2d3ff5ddd429406dfc3fde2f919d24eabdbf5190d3d5109a14a49a -C = 3c5ac8081b3c2f9483451755c61e9e870d342034bbe0b701 -P = 0dfdfc7ae3c584e1452a06e9 +K = 15064088107dc067b6149ae71b0f9fb1bade18e29b8583f2f2a14bf42de1fa97 +C = 07e684d4a6e743315ea94f24c5eeeef7c627c68ed621fa926b8e96e3b93697d0ebe990471d03aff5 +P = 4ae8b35f7fade367029cdf84ccd7b53d7d61e67032678c9657b0bebaefcf44 COUNT = 67 -K = 04b2c55db673b76c984d35c26982508185cb469a69839dfdb04ce16ac2480ca5 -C = f3ab1663a2812f7de4040dac618eca1c23252ef88c821d07 -FAIL +K = c256d3af2be9f637a21fefd06c058b0c3014a03d13b367c94510f20feadf65c6 +C = 27c4e945d82f761333cc4862023bd6f438bfdce9d0212d71a50e2705d835b0e4d145db456b627871 +P = 58b81d7be3f1bd5d6546db7084b1f9d2b07c90d842c7ea46cc350cb7317a58 COUNT = 68 -K = 7e6cf87455413e10a64e7815b56f432d99ad1911578db8a777a6e25c7aa25b4a -C = bc4fa3c7cb704337c7996cc39132a3e08f2772a50845e1ef -P = 77c19a4fea083e1d030971b6 +K = 1cb24b990640f44987891b923314c3a191ddd215dcad2ad253a9259957c139e4 +C = aeb6c080d768d02b9c49778035e13334ecc791c638568aa3c9adb5427edfa31e28ec0d4c0d43335c +P = 6d2af6f1ea472945de36f6b294926d927302d0d3ffd2d46ae519421410d067 COUNT = 69 -K = 032f08090f2f0f7f00a3a90cdf58f762d037f386ad056bfa81d8d96e903c71ec -C = 2ddee8c1d07cbce05bb35642d126f45937df08498fa6b02f -P = 3f774c4197caeb089c000832 +K = eb65973f6699d1c45285f53ef8399f02b55f4e44560c0e465b587510ea19900a +C = 765ce3b46e018bb18fe36d5e34ab2ce67a5ebb04e2fe10b3c6eec83823514b4eb0cece0b0a4717ef +FAIL COUNT = 70 -K = c8d59ef0ee24a8b7acc88db35b795516641e07c676661881433f8dcd2e5f8411 -C = 70d2318944c1d1c4e75938dfb9bd0fa487c0ca2fd8f1d968 -P = 885d87df306d0eb0f5cb0959 +K = 64ff2dd2810b97bd107a6a3701c318aa342d7322ec825338ac0e2daa480fb144 +C = 20e945756a90dd5dfac901d777729b9670c6a7d12943a60763adfa6becd1bd7f7dc43676831ab45f +P = 72a77dd69c48ff8a962a5d73fe976633fa8b0bad15b910aa6327f1a0e9a3eb COUNT = 71 -K = 115fe1b214c347753d7eb22947d1af703ad17df0d18211b44b8ed85e48b66338 -C = 74e0b68ccbeea0553f14859adcd2cdb9ffd1df8ae5b037da -P = 30f0b30e8f6b299ccbf02485 +K = b7f0b7a67d4dc4d25d08be29f68d47e168fc3a4baf9e6bd9233b02e8903a2159 +C = 402f4ee94f72a2b39200da38a05c08153a4c18c0a4e5c29c1f45096a4780e53d4a8a171712e17568 +P = 748b654213d71f026b71ca28450010e6d37fa8346c899f8e74e378dbe41507 COUNT = 72 -K = 737de82ab206a345fbafa4b082c6919d9ddc87ba642362c14da3eb2756282952 -C = 9fbc588b39fa8a99c1804bcdaedca353e35d892cef275593 -P = 92ef92303b2a2295ec59ba45 +K = bb6f48e8869ff93a4062af9d96022b58cf183ea0c0feffc8e1fc99f32b669d7e +C = c97dbe9a3452a5fd37e060c48f901d9a20fe493e6f6b43e01e4965a9afdf617abad7fda741a78f84 +P = 5b00cec9229249da2d37f23f55eb645ec00719aa5dc8408d36c9775c8a8b74 COUNT = 73 -K = 99cab8ce337f9aa1f4282d94cd6f68ddbc0a4ef6259f9c3b4f19339bd8ffc7b7 -C = 5694b9f4717499cb75e7afd82c0cef062b4ee02b53fedbaa -FAIL +K = 2454fca54d5985d763bb30c330a205b34f9c4109edcf29390bb23b4b19f0e2df +C = 8fc2e422bb7bc615f882f6c4f1ba78f7983b1789db67a251a99c91a1beef42526ad5044128851985 +P = 7f6d2fd3ebf1ecbc7e1f68ae365c352bba35d3abecedf4dc1044e731e875fa COUNT = 74 -K = d462a6345f8987d02e23708e912699c6ee81d8d0c0a8f5de4b8249b56775273b -C = 915dbbb96de020259e0e153ccd1e797c047c4766171e41e0 -P = a2698aea2b461af3e16cc200 +K = 39407cf6ebea5b576e806d16c35aaaba21bfa0b2ae83013efed694b8680bdbbf +C = 93492a5a960d71e2057e15114dda6c8304a285a782f13d09df2f0342e8cacac896ceea8c568872a6 +FAIL COUNT = 75 -K = 37eca398fbeeabca62966d50d44464fd0f4757c8be1f3f1ddaee50857ef26a22 -C = 7a821470e2b4b2772767b8fa057a985a8cd397cca03aabf1 -P = 3e69469d6ed574b1a778b120 +K = 713251cb490647e71bb767e7feedd20439edc61f17b609c2ff8ab1b923a450ff +C = 8318ef7b586da31ce1a42074c7df6e9b6e12d129c727abf5476b2b44273c6bd10bef05cfb4899d6c +FAIL COUNT = 76 -K = 6271decfc27dffd4a311135810b5c8f63913c2d842e683e90c1f473ba7dc6fd8 -C = a3e4398fbe01a242a25b0cb5fd3dfb2be38e69593f6fda0e -P = fc10745e0849e9a204eaf7eb +K = ea26ff781976b0b77d8b89c01937a8d1265c47daaad660503f9187af7449081f +C = 629834d9904a9a511cfa040fd586f9e28b641703637458cc0fc78427a0c2326d1264d3fca58c2277 +P = 51c472875ab90d35e10c2987d539b4a3142886a5ab6a67d14c1d64c3508e46 COUNT = 77 -K = fa98e5183cb42e48e45a243d86b6be528e8495d3aea9a7d8dd10d6e64f3e5dae -C = 3e7fe2d6ce681844fbd9f1e9a98159e4f595696673ae74fb -P = 2dcdb286e27860b7d615351a +K = 40dbfa9bf907e38b06b6d4504607a75b55384999d34339358b7d4a07f88ce874 +C = 3a4882ec223e127c56e15be6016b865661bcb80ef996604e414cd2d7d141258cbb0b27c6e44ff02d +P = 54e8ee5c1bbeb115709edbd7e8c6acb4a5c51d73654e3e3db3b7337657b2df COUNT = 78 -K = 6dfd652282cfc27c99243b844e13bb57d4021ed01fd73e0ffae7a964020a1ee7 -C = 5328c1ca17cde4f30eeb9b7f43af63ee43890d3f46e1a845 -P = 0eb382210c8db55d3053dcb6 +K = 6961bfffe7d25a7f24f3f00210b3d7191e03461cfe6fd67c3bcd81573d3de814 +C = e9a74fb3b8b4650da57f1c81e691cc3c2e4cc7c794b97c6c35aa09ac179ef95b546447c24c1b7006 +P = 2a28148340bfed89f6ab1c7665497063e483e24f8cc24f217182ccca7d6232 COUNT = 79 -K = 1413a4422a84c9e7a1ed77202402594f9b75bc1bd9c5211207d4659f5d10674e -C = 126dd69dd0583c57376b60c0b33db31ba89e54e5a2192413 -FAIL +K = 31631fae7cced8f2a29a42d0413a63ef0f508c178b261007b89306574c9fccfd +C = 965fea29ddeceb2f72be9875489cab404c770cbd49d9c04bf5dcb5c0bebe01451d110ab1b6c1ab94 +P = b318a11d3e873179e98d8410a9c6ad9be9f1f09dea48c6a078da4c8b7b3916 COUNT = 80 -K = 83917c652a426d7dffaa7fd9c9fdcf6f9f10ec8712dff6851f93480e59ac26f6 -C = 7b625288247c3cc920271571768ff2cde3469b3621174f0e -P = a945853c34270fa599a7d4e9 +K = 70ffe3e076f218d1fc1d899574e0d25cfab10e4954cda974e9107e777a95ab86 +C = 1981b5921ed85716c1b2c821dcb7dee61a61829af0561cd693d332475f96b07a7d0ee4baecba161b +P = b5d3656b415646513466bd326060369b4fb427a443d7d44c6a9ae7a85ea5c2 COUNT = 81 -K = a7c1ba8fe58fe3a9c15b9372bdcdcae13cab6ce199befc6a7a1c75306cf574a8 -C = 3855b5578ceb15aebc1910b311e7fb54e493e01aecbfcf1c -P = a7cbc386750777b62803236a +K = 6fe220b037384c630e542d4f17c2fb23af76e6c3819b7dc9fdd0fdf71df99aeb +C = f309df5474e85285b2f7fbf852c88ff3c7bb311ba5ccc17ee319467434fb1fb5e45acd6be7fad55c +P = ad8a1b0af5e689501947b2248fe100e56f59589ce454f68737e5dfc5502fa1 COUNT = 82 -K = 4fce3ce79436abc18d86863fe5cef70893043339290fdfa501b1392cd2b7d8d0 -C = 7a2694d5a080dd850c85b0133e0b73a6e7f97acc48d1e87c -P = 1ec70b0ff681e99f346483aa +K = 70ee438b42fc10be796642520348e7b78f5c754c79e912e9315e906c455e3ada +C = 200a7fdadfda46740ba698d623d93f7ff86abcef1db55df18ff28d780468b42ab1c663b1c8a8db7c +P = a8c8eda687d1645ebcead6c59ec8a470fe0e45846dccb64aca01b7668fb507 COUNT = 83 -K = c50ebd3d2be336273e8cb94d8ecfa93c7dddf6330fd6e9f0b018d476a47650d5 -C = c68893b0a36c27b15971519c8b0c01ea650e625cd42be556 -FAIL +K = f61b18c13b816b09e9156cde290029684319e9379689485e03d79b2ef44c89ba +C = 4dcf549d3d99e514d0e5034203a2a0a58cc956e7c7c429bb23f3c4f8d97cbc6b5bf79dadc37e9078 +P = 6dfe0f8fc223270b2dd1d714f79eae7c3e99f3d8c8f476c00fc53836eba65d COUNT = 84 -K = c52caeb99ea24ae30d026f8dad509bac6b4a69ab82cb7712f4596208fea6d08b -C = ce7426c3b726338a956184db151a70f4ba4fa102262e4dc3 -P = 372c551df5b68dd682632ed2 +K = 33964965ef02b9f5ea4a4e0db235a5a0ea4d57edbb76a0fc4673b2b5ac047c87 +C = 5807c403ba0d3f17f7b6fa27d2fdaf8d9a40e60a2adfee3241b65f9de5e210b5bc083464f9b63423 +FAIL COUNT = 85 -K = 7b63347998f3fc03b3616e7e7bb4341ae0b35b18c7d5c97261c6c13ae6b707d3 -C = 75c7bbbf946128918dea18790bbeaa7cb0d2b0f2fd6b321a -P = b90ad4d8c14f79ee81d8719a +K = 4174bc87f6fe9e720c71b76fa08085f72bb2e49196245ae9de01c8785b729efa +C = b806a759e0af22b7795bf5866dc449b8c07d631a7aaa506c3e206ed1ad2a63859319ba46392dea0f +P = bdca1648edc1ec9237068d9c42bd0cf0204f62436e2181eb5ec1d4cab920e7 COUNT = 86 -K = c9e724e8b93b11656f6d8f49c7d3a2f65f8ea0d1074872e0be332e9d08149ed7 -C = 39302d6839878af6280750aaf425b733cd198a48ae6a33b0 -P = fd5ab29d2f41a3c2b67dd78b +K = e153b8cfc91406e6bee655a94219758c6909b0dc3301394b7036ee5d8ec934a0 +C = b3eeb7f288b8cedef247cb1e3c14fb2e1ba0da6878424ad1f7941b247c4c7ce040e7278c6a0a6e61 +P = 99b75b2fea807e3a73076a45e3399909b194eff90be9d4b04270143195ed2e COUNT = 87 -K = 23951aaa3317102dcc90bfef253611963763734a9a0378e0a519aea5dfda87c3 -C = c66dc60d8c5a4b0fcd304664e690847244cf54faec114d85 -P = acb0548e535d4f636bfff7e7 +K = fcf3e9e20e190bb697eca840e8cfe68d2aed093a451af12dd0b5e2c99069fb88 +C = 4d94d9ffddf31dd7f0157d1abba22cc1c38bc63cf360565e21b153e51d8b4d9cedffd5add5158cb0 +FAIL COUNT = 88 -K = 9ccb498a25942bf0c81ad5dbc5ef5df3807a17e7f0abd0428f65c9736332051d -C = 8afe32bc558c29a8311e41a87f0eda7c0b06cecedbb70ab4 -P = 601489099b062962ac1b28c5 +K = 69573a24ff3905021525c6afa8652cd965624e9dc234db6cf4931e1605baf72e +C = 8b39f54774139225a25133e53e144e54cc38536d1db8774d60ec5dd7929ee0e485481144bf328681 +P = f41de2a3d2323d7f2a138cb78484d737419b930e03c431dd740c70785655f6 COUNT = 89 -K = 6d654b74faba3684e29f9559b4fd6ae2ceed6eb01f384b4889e565eee8a3eafe -C = 1e7871c564975894ccf7e203558ecff89d5b08c730e249ef -FAIL +K = 9a327cfbdda475414b594f312ee52266df90c05e3ece68ce5be37a4c0c0db4c3 +C = 8e79de75bf93eb07bb5d6d3f29a25be8b561778becfef51f4c8927fff60ec67f8a7377160f11533a +P = 40d00aaab8381f9e7ab0c404b398650ec5440ad23acb0fa44f8d9dbea5b7b4 COUNT = 90 -K = 3cca128d739c45287d4e192ee4e8da6cc3a42a016121ab322b8c791278b871d2 -C = 52b4f7fd478109a2e9b46eb3bda2f37bdf471c1c40b7ed7f -P = 5843a7b575500095a1cd4e37 +K = 0503b49e7555775acd76f2f0ebfe63ea1c237248279a2b83a82b8706c567c35f +C = 7c7b889753d45b368cb588c910337e37f1ecb840d7647ee844f200ee4064f391594f0a441a025cd9 +P = 43c638508dd8dfea6205f78c957b21fa34204cf852476e0caeef30abafa158 COUNT = 91 -K = 5d821e544f4122171d07f88995bc03825bcb98c1459e2bb6376f194d520149f6 -C = 288ba7ce9a4cb97462db84ef8d5583ffb85292c498a943b1 -P = 75980dcff77dd528a470bcf6 +K = 7fc09204a67f631fcaebcafd83c4bfd5e593f2828d23af403dc47383876367f9 +C = 98ed11e4de8ff5e4a5834f0915ec1d90253f407d431be232cd516520f6f4ee1d4b51cd33cc38a8c8 +FAIL COUNT = 92 -K = 3b5f5425710fad9caadb515472a3372a0cb4020b3fcf1fed250d947aa9d68d5f -C = 68c59897e3994a3ef06e3a845f498f533df91e86fa8e9625 -P = 6a58e350ab4ddb15b6a41ec6 +K = ac48193c4ee201ac7104efd930ed6a5fd20543332faef5bb0ce4e6b0ea67db71 +C = c61283061d37234ae54f2cfeedabbf29b021081a3f463a91672c6d7f0a377260e9d3215633362f3a +P = 95b6233d8143200c1c2bf6cf27bec4e0ada242700cbb91adb74958edd8305f COUNT = 93 -K = b81bccee837686e82c7ba134b410f0be8d90a7dfd93b0b3b9d29bf42147f769e -C = 73fc7a9aec214edad179e311215c36b0b6aa1bf47f8cce3b -FAIL +K = 39a98f6510f074faaf31fe5540af976c19bd7c5231dc36d90a790ba825da39e6 +C = bf7edee90c2af974ea5c5748e8e72a07b646d6883bf31f017aba52de4b466a3aa3255226d380201c +P = 4b7f1e7316b454cf502a822b22b915919b8a98328e9db57c14c3f8249b3b56 COUNT = 94 -K = 91c21ce6a8f9f175b03db2270f241cf112932ccd24f8600da07a06cca628df05 -C = 20aa75939531d8988013bbbeb5f36d97a471780aa006a7d3 -P = 16234e492918106d7a0fc848 +K = e5d69451ef4f3a0c9d6eea0f72ba755b1abb6c8e1d50ad9eb4c3fb74bd20f20c +C = e8a1bb56e5c97558e78b5c809d4c9209c47b9188bdfbe617a3130afc4aae2c341a87f650462e1f70 +P = fa132b74a413388313aa7725193cefec9dfb46cfa305de2f9b5127e255840a COUNT = 95 -K = f29df907f3572c8869e2ff35dd1557605023772578a404000aa9fa72afd098f3 -C = d1d6efc50c8fd86aadb83e15ef113e6cca204623b02c06fc -P = f8971965d0aa6985bb1025e3 +K = 18acd16fb0e7b67ea1d5e0d9e1a4f32e132669d3ddc7d36411121edb2dcbc864 +C = 78142796b7665f1a83111cc654c828140b75972febd9ca86d906e5cc5df896ed5ff6fb4818f0881a +FAIL COUNT = 96 -K = 9c0d2e703f268206a6c2359348222d6f56453a090a530af8d921afde20e0a0d5 -C = 621a290c12f548efde8f38474cb1f9e01a43db98669ad1e6 -FAIL +K = 114b8919a2dea1e229a524f209cd88d4c5b6fef68e02ac4b197eaaf4a9a1dbf1 +C = 81fab0fa70a6f2398c5c1c031c557452de0607d570dd664b1eec73aa99156c370fa5f82da56edbfb +P = 14d4a39f2f6f7a9344bbd6582da682ffb908726a4ddd804b7d47ce67bae662 COUNT = 97 -K = bf7710effabe8d18926de16ff08517f14b3740ac33cfbe9427d3a85adab4310b -C = 24d76d0026feeecffac639a300038f83f41d7ee18acb0455 -P = 4abf344f0e56cf35bc107165 +K = 6f6c2d1d3fafdcba1c4e4153311ef5993488c48189edfefcccf1f68abfc3e96b +C = cab303bb7200c84d2028dbd03e99075631a07b4a0c7edb766ad293e64d1c7508351b4005369fcd30 +P = 383a39768b99966d1f540037297a59013cc1a2453c8e6615259f376f259021 COUNT = 98 -K = aae228c0f69d5d706a580bae71c7a793144d134ae2ecf7c378adfdc7c090448c -C = 1e7e52da3d67d89cc0d8a77ee0d8338c39d32208e8294bb6 -P = 59c7911a109ef64efecbf77c +K = eab11b90d43c8e73ff32631248ed1041fd86df2bbf6ba2db4beeea836811ffaf +C = 82f5fd0a7f44536ef18d44c3fcfe342f281a6c2629e4b7c7d0b4f4d6f46e19ca90debc655e05b35d +P = 726a319c13a1bba31c21434cca7c2cb714fe09ed6a2f0a69087aa327f5155b COUNT = 99 -K = 0a0220b06ffaf68fae5871aa00767c357774e86d9a4473a1fa150424b3391884 -C = e7380d4e1d555743de352bf1a4ea89d4951b9652d8fa8cdd -P = c4ff32f4f70576bf5203530c +K = 7868ed59e8f7f1ebc92779c254b660b91226210a13c82941b51f9301da54fc19 +C = 7f854b6ce7e9daadc1dfc793015cb28706bf3292e724b3c41b742eb1d9bdb25fbc9a6eb3eaa67ac0 +P = 2ce93a232269fe1059ca992ad8b707fe2e7233e5abb3de0d7ff7252a78c99d -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 1f05cb4c27e554dcd43d4089ad5b4f01820f17f78216b6ae09e95ac59610c8df -C = 9a2313312137b88bffa29a45cd6e748587d8838d377e27bbb6f0f3395a3d15164db3446483d8efe76557539c4baeaa2b1174b2ea8134801291aca4e6902079522ad85b872c71239e6b93da10e52b51436a9b382802b29a79e615d58b17ef066138c3ab4981c27b0d9f95774accbe4020 -P = 098efa953e441c7b8d3e36f5c1e7dc73666a5d7f4d8d79e61e9bed3b03a4216cbdce09102166c18f1f9292607c47972c603105f1a3255f143d0ef6d164352c70a4a692ad5daab366fa8566de4adf82c4c32574e835b20b45ce4a11b9dfae34e7e9bf4a2028 +K = 08f5c088acec18e6cf1f03a8f85d772e327e7fb07f8c2939eb554e84c42ab93d +C = dff30fd43647d4be54cf2dfd6187e2ddffb55267313f980fb09c833a9c2bfa558a95861711f0acb2a5c7e731ba22f24a9c4dfdd9e9b0216e9088f817a175b9835b0e17615687a20f68c067205626494cd04fbabc0b3eea7c0a4cd6236bc8b3e52e721dfc357fb8a3722bfcc4c690d8f63dbb864bb6e3a15805aea7270f8eb748deebaa2d066fcda11c2e67221f9a91d2c29a6c79ffae76aa80a2590b4f9e35f623fbf2f8ceb2a205493077556a186e25e5bd52dcff7bcc6909b37a66c1d1431be1b363bb40da25386eaaf5fcabc7be6422a04434a21d1d3105328e7c56770b9f59b03395e4138f5f06fc7e6b80dab87b08caa7bfffc45a095c15263efd3f06c651ded6f58074efc20620d704997fc84721a0a8e9e5b9f5cd330bbb156b31d9d1b1c260e4a24535f30404dc5b2dd6b35d916a1391b25a7d8790be09d85483ed1522074a2785812005bda10dd55acb245b3bd3d9bb777dd23f9b02538ba1a114ba53386d7ca4d9524b2f8a18e0ffb21580b560540bb2146f08f04974b90eb324547d56222df95f44bc6e5f183bef283e4816fb1b2933f9c7c6726a245a495e304d8318d0008c51b0be8090f8f668fbc3f31e073be4b9e97468f4dd8c798e9d682868df493db8a85738b58cfd005190f365849072577772672c6f82555c65046eb34e86fe61103327a063bacbbe33cea7eaa3d1de45471b7269e1b6b38608626e323447a3d5fe0599a6 +P = 8b68f66a3d2f59d419851b94d9a6f2f0e667f8125e11d463a6bc2cea46b12dcc40ce8018b204972c735fdd6d2d05b628f4905c6690f5ac5b1b51e12f3af2dc3ae9b9dab616f0a2a66a1ac197592fd5b15900547f32f54110b58d51a0340aa80e9eeb7b2e0eb97e80aa22ba918f2fe1c678c730ed5c3d8d24774f17d8ab6e01a06243d36e764df1dbb8af1faadbc55281f0242abd7a162c984fd0b05ab8b0bcaedffb2962024f009a8d7c9e71281c09f52ec0707ee3bbeb1ecb918be6ae3e9c1fabbcd3512af928db3ba6c109ff9e9839a616b2a53f092160a48222b84d53cd52490515ef93e1ebb33897263492ab8ec6fad2e633276ae367f76d7f926309478c0205d4f22506a451795dc98f5410d8f5d3e049cbedf381620861e7b4ae08f2d8a71abc1f230248cb636a2d7b4e7717ab2b7b5f2dc6e5b5a18e8043254208b50fd6f8929eaf974c48551233661ad67321b64d69245d536d9a8ca2a6a10966dddb9d2ce36641c9281c460ae524b077867258f638e6ac872cb5f5c6fb216b1ae60a9d0c5ea0dbcd060f255da26111175af4e9935df59ddade6a2a70cddff8cae6a98e4f3843c2dd59d09053b07b648a46f5de0eb21ebb192828279a386ea3eedf2cdc355d73d51111e8c1d522e059752bc56226a4225bcab713bfaaaec78167d7cfd33e913b26fda93ca7524aa8a8b17977c88ff9bc23ea810b4de59eac18d1523b COUNT = 1 -K = d5fe0592a4204545117af03463de8b35078875b0e070fd35bf6a49a7ca19683a -C = 28a840273874cd728b88743e928b1ebea48156f571adaf2e93a68d035dfa4c6b91a9d83a546c71919a5dcf74386794933258de839a16b511cbf124bce85f68e08720ba1a6359d27c1a10d7a401f5b070a62b757116f5972fae6ab0627f189e6154392cc0003362c8447695a45df8ae20 -P = 54ba8ea7461cc9cd83b9f066ee61928ae9cb5c19fea49d8f7495d583ad28c263e774fd1be8eb704925b133ef937a809573f9b4dc6428aaa33098b7a7647d2cc0d28bb521f1731a8f4cada5f21bcb755cace577e0f5be09c3b7daf723efc036fd2a609ad82e +K = 94c4d5d70f881e58e10e7246cf812d40e2be258adb2b6c13c6603fc7daf7e85a +C = 6c07b5ffd1b9be182413ef8eae4a6eac657108a46008a0d898727f2711e6fa0ca60fd1d51fad683b57d4202fa2b0eb88b856e08b07155439bdb03890cbb7e0f228172bf297a4e0917dadaa5e89a287bb9ba6441c852c5b0cff5084e6c425aaf866815b3fc45f5f7fb5d14b270343e6a30f402e11d62e433a0d84f65684b2df78d4e7758bc0bf81783316905cdc3c1150ec47f225c966f7f339b2538970eb3b8a2c13f95df1310d6e3b2a1f8aed19105846557d8f0018fc0f17146bf836b654dec98e9ad639c7e4b2f922b4396e82c690cdecb65f5e0ea282dd6262f34346ff9adbc8b2f361ddd4356f0feadf7c750fc0580c4e12c00ee049d06eed2242b14727ef4d58386dc8df279a7bf8131c3befaea2f059ab757826e5e381d49a2f11b8cbc2b0021af4da7a779e5df0083edeb54348cc36ce96a19a3d7ff5bd2f19d05fef6b200e76399a02a991111832173353bff4ce1859ff534ae13290dd176ba8e1384ed24d9702dbff127e15e5c66618f94680271732d19f64552ed03df76dc9d46c3cfdd53a1b253992fbcbea6db006f16e8dd92406f0090ad9100856c6b71f7767fcb895136416b374285efe1c6506941911a380e2bf74ffd0f67e853f9ac7b5df6666b177a2908fda9add0eb798f8ccc52801535b2bdf9507f3fb3b46915aa889d62ac5909040a1a28856105dfe2e10d5cfbb569c380551fc8bbe7d83dc87ef7a92faa3fff4b1e2c2 +P = 85693a16ae69d751cfa6799b95a6396de2eabe7e4da74d734691d992cba353a39f3b9615c1325db5b0563ce1a846bb0f0534a86130ce6657736b9a9b35b0f8d89dd1b3a295131d2f3f57f94deef9606dad76a377d0b24e632b3680e4d3338f3e4484609e8063e9ec621297f55802d7c347e8085ba6e514884b8fc1ae109409c5c3a5bddf4daf034d300e31eccba07a9380f5325666c4a3aa12d60b30ca272fe03534aabe78ba0452a7e4648ebfd4645675629676be6f122a54b6b810cf9cc0c68b7c61470a537a5a664ec24dbb3eb4f9fa8355cc7ae8fef27a0146df5ccc585d8c106a1eeb64ad4c701fd5a54ef18295b07e9e47f7f7dd2f67d38ed776a5f0b28843cc4bb5d7fdbea9cb0088dee849ae232e4e016d8cf3681971e8a45d6b25451538212b91f30e17580a8107a7a95587a06d22d615f5475a5f616fdf2fab79152f2643054d96ba88f50888eb0f2f1f154c6fff53dd44c3613269751dca4fa86f45d6b1af9ad0159685223889529609e7003c8f3cab491fd6c1a020305da8f94ec833d721d9fac7e575c2a1bc26eb4fb5010c35ffbd39b98d857f12584f4ab7de92aa6d7e7148a0120cc6b3f7ae47a291ba1cf55a28d38d3a30dfc3917d663458cf840385ca81cf70acce45a5cd509f8387d450bbdd6fa51830cf9a7387887c620b86809c55a3eb322ca784a51693f1054759804314ae86048f0d9c99650a5a12 COUNT = 2 -K = 734836514c993e9b2e558108233b0a72e7e8f9dd0e3838f79d3c6afd2a552f83 -C = 5f266a5ea0e6fa79ddcf6781b0b6ad8a8806e44fa51ad0652d8d0eb8a0478e9556ea850a9c0d2e9c3227013259d3730e193dbbce1f03207245fb3c6a11b6e6cba831d1e9ac204ea759d0daf27f4b50c60bc81bc6784fe8c86706b18585713bffecec5ab841bf586fd409875fe3dd48bf -P = 5bc342bf80231cb2c129ee48d93b681a0dd18002a7c1c4254f01a9b1be37fd90caaa483f246114d6c3d33f093a0f16d7ce512d38cf3110e39dc65064266a058d1e8256c1c0080ef7c489890d38d3ab3f4575361fd88d6590f6095c7ac53d5ad4cb9c9ab3b5 +K = d65338fd3771fd58c07b6b689577378939d439628529b92cd5625edd18afac76 +C = 1c429bf25c144a2cc649fbd60de5c26c31a0c352de99b34b86101c551994f082feffe1db8853de59b3e8593785eca100a71c5392f0c71eca9f411cbd87fc77ea1a96376dc13f6ad460a11e9cd5a829875a7b7dcd2ba4eaac08c5bb48ab5d4c338a6f8bc5e760739edcff2db116b5b1802e35f936d473db168edd12532a992bcc418a759cc9fd3f97f561623078af29d7ab489b7ec564ba981c188f11240dd9354c324f8d0cdf1c74252f0fc75e390e837b8be90a670f5803ee53eb75c3ce95b2853b2342e54f86dd9aeb308eb82ceb2bae7b3e0b364d17105eb61b3843f7206bdb6abb818efe0f0d3b1004e370191e8218cca14947aa8070f7c66fd0422b02ab4a1d94fa46197acd24e272c765667353e819588402feb85d7f00243521d0e7a9d9e70753d8b51d374ea9c8355536594bf05a6960ca7176a4b66086b055b099e315a23e042a7e0807316d7a11a657a6dc9043806e248a9af06570f710af65267d436a5fcb001104fe8a7c564afe075d85bc0a2ce3d33d8d93d5ab1e923f51d4ef26cbb6fd4a935a97cb115aed678e75d5d67fbfcd2362cb3d74ed6b9b9fb0cf82569a474a25e5aa39d22fe5cd301045203d9f93cf5c9e9e9451f1bf3566eec75fbd995cf8c640aa68fb04f5419344057fd1c0e655d750a68c523b0fab24cab03d7393ee3a5735039daed52895dfe7937f55d7ae9a8c0256e9d638a8598452f5329353a20c4bd9958c +P = 58b20979cba48a9dc95a8857f5bce433087ff93470fc62546e86e72dfaaf7b233ffe428802390c1db7cba00b1f23678aace4a16a237b41d26bcd83d471030929a34e8467f85eaef070b9b74a57f13e91b4e95a3c0b8dfea87d026196a10168c152c4ac42718989003b7e688ca43207034b674d3cbab6f57db6513f8883d27f2280c742896a62e7d0f3f20377e98a0688652d270887fdacb86daa086ffda17937e6d20e4a82667f80ac7749a889b0d748e906d653f569b86de2b42b5819ade9c92970d4caeeed8cd5759d56fd38205215bd8401b2a5a000990afe6c9bea8d091171e85ed83f45bb5b9a8d74cae897cc36f1eaf0122693990b1fb57d0025ad6d92c90885accb649368fe237c4cf017787609fb93c9ea5b413847a9fcf2d2ccb6283345a278619abf8dc351682928187bf92551a820939ec73928eb9930c48f7088ed0a367882f4a8b20d754c5f06bc82990da02227923eb8d1cb73c23793ea0d19bed4a9986f0d48d7835733d1ed3396ec3cf15e1854473b05535261251f4f0af8a0743b3298888bec2f7656493d05eb2d9b848e6802845fb9f7835b50d6a0f0e6cfdaf9b1afc6caa6573b3350256e6f23cc4681316705e33eb0a5f664b79be556cb1bbdd0208430cdc95a35f61facbe7ca2a9bd329e4a1fa42aab9bb02f6519a5672346a4cfac1b96a969317480dd995e339af888fc0e43692332d583fec6215d COUNT = 3 -K = d9d7cfd6a5525e2d3ff3d1ce07c32f2d21195a9caa8de2aef57a60b2a92f88d5 -C = a45d1f8e694c9de329023308e1252589b7d3845954fa8de13b6c658b97dd22c935f78c9fc8741ccc97cd4d2fa322948bce407c9baac5f5e542509a30469d23aab60915d5a85a237a999ab7ded63616988c6e2d0ff2c963e0ae4158b95d8ca8f452d5b1b99f84515b15210d0ce9c4e21f +K = 1726706350c11e6883955f24ea11ab247ce3b2ab54d05e67ad9770b5564483dd +C = b006f26a67d0e1e2cbeb5c23b6b300adc1526d1f17bbe964fe8237ae244878158e6b04cb488786b5258ac973c3a2eafd7fcf3a7ca6c825155659fbc53d112bc78b3a770cf059fdd5e68f2b4bfa36de3721231102e5041c947fba3d906bff39592ec3901a398da23035f1190e99b58659330cc2e856ee87ad4197dcc7d16e1f062275bced1ed5cd82163ae3e58da7368dc2aadac855385bd4fa0b8baadef608d0a5c27172d12b88c70b136eeccf37f36364361a990dc50815743cab1636e661bff04ca8345520c30b935a060b450526b1d6ac09170e5b0a327b88f42327b85c9a621d2ca745963c2815a2bfcf509d50b6058ed6e67f369b5608d2aa885238b67d1b8e0d83f9464aa473bf109350fcc02e360c2619236cbfbf895b607895530d8d3d2e41450750dad05b1c37ef15db7fb4707597ac252e8e58d4c1ab2713b427643d198164c908b5d8ff36e9700157284009c7b283633d8b27b378bb65eff8aa59b5fe5e6437a1d53a99c106c2c4d033d3d23950e313a10eb31d68524ae9f8e4f56437acf66db3e8f77407a15bbff4b393e5559908993146d93c673d2aeb7d4cb8fc8d0169de7ed6e2bbe6ce9958a0f5d201419e7acb17e47da827ba380d6b3ad3b5a8c2101c5fb501110c727169065f23297947f538ab3ec165d61edc1f6a9e1735e9b7fc06d4d3406cf8f9c6a68b196cf262324a986705fbc802cdd2e6b4ebcf68e6bb9e793ae644 FAIL COUNT = 4 -K = 75d2e460a30b61870d148c90d27af9176df626285841e3e82c3ce547a4a6803e -C = ba6ced7a430d002368465e1b90a81caa63974c85f18cdfcdbbfd2a810c44c9c60c37b046e9f279dbbaa7b1bb1dc2fa77c1225a37ecaab423303087763743227c25d80255efe87c96ade05ad3ea633a742895156ce6fc9c024f5c6c86e66f34b4164d34f153765e3c71f71f76a07dc9df -P = 1254d8b9a9ee8351bc728ea5714edde3e301751a11ca7a35ba564c17089be47ac99809eed70f2bef7c5f759b6eb86c60438728d7dfc531e914f42f6cf457d4e1c3211f0b3d1a3bc4ccd931ea12e4178d49b8027889220b9c82d5bf4b4fea577ac03e1e2c08 +K = 32e57ccfe7563dc0a20c14ee450837a33606c086ce1467fd7ec58467154338ab +C = 977d9c5f6861a69e13cd854299434e348cd0690b4d04e08e0598b47eea621bcd8a22838dc9c35a72c35fb1a6434718d02fd24cb4b3dd90b0430334a938a218467eeb4c373d446a539810bc3ce1e923b7c20d9f58ea931d4f964c79613bce67b268efc44bdb9bb00a68d60037949aec7a399493defb2a466e33d4831efd63ad1cb89e00b530626d2f0165975ddfc4cc5e0f968d3875de0f674b3a517df26480b02b6236ebb377118268cebb30ff1ddf0e280fe1bff61902a017e8decf60753c642f35faf0565303bfe651ec8f0193cf34d4af010c9925b8871f0f8c934a149d874a3b659f78ad148428aacaeab80b1b25dec8b0f7ce54406287bc802ac2c0cca3db4adcaa8400a8636ea339b62f5e94d5e32fd3d1183b374507a2af620ca1346dccc9f83a4fe855b1c0e91db9e7c532828d0944d9a81b553ebdf35e24119ed8164bd0260627ea011e93bc103f208c76498ddb8bca15fd05324da5473157feedd54592aacaee68852968eb54c69eb1ddf607917c57493ea380de0cc6ae304dc49cab80a31b8b456986dc367c70f144e52dd604c8d5edbce5de5efb30d9470bc883445b34fa4414f44bb94a64362a12b546665721fa6db82f0c947f015978412b2ce136c471c98b1f908315a16c83e9318e64508c7e179a4429195a9b1ccc211a1c1d4e4df15c5ebc7ab90926fcf7da03657159e440e93adea31ee35f72f2399f5fe2f8c560c8826e23 +P = 80de48ff805a88f3b359451bb6df61def9cb3551e64fdd3a3a70a3b6d238a69311a85bc5924e395ce92ef394b1e5dc301233e9a212f7fb86272c42ddf5f4857c38d0dd259dc1d663c0d729e033d9b0f7f01ab1f8f1b7192d40921ee0d4696a3e35663c5ffcff5ed167660bf6b4c00e619512a2e827be33c90eecc539e18acc8c76eb332b28b1cc502af571242342f63d155271da3211352128aa0af70c9ce78dfdf084a13049b7bb6f2bd10dd385b412d60bf1ccc9fae1208f39dc53db471a04d0dcc3703b4f7b95e72ea815b64a1499865a7ccc5b740999e76338e1b251c740d75274150a96def8760a08c5a8a6f58273b079c06ee09f79a976eaacc8a04c365bc61a786b496811121c386d274c413a2fbfae9464db6ea775233193395740fc9a5eca1a3820d33f6f7b38a83ccbacaac16479225e108acdf46ca35e573151963721b73b3e1c9a12effff0c3a622eb9f07bef7ae712c96ee3ba245597fb8d511698d6e819a967e0d1868c0c6055333b7c13a98cf63d6a5d87779a95345ca8b7e9e597ec588e96f8fc2a7f0a0b8f1543d9e362a911dfb1f03132a4e6af71b503c41814d6b684a26b8df00cdc657ae129a1f2a18cf4b78a3981de68296b1268609fe3ecb9928b90df4553be37319fc508096fa54b35e4822328569da60a6c660f30c61f02f4c5ab2527cf36cb7da8d7dade4c714ea3fc2da8f65b4199090e114dd COUNT = 5 -K = bf625152ab83e4bcdf9184b17ba4a257230c265180df9dbdef81cf7b8b85a3ef -C = 977d3eebc0bbd99a4a4af60595a6a15bfb6fa5b28161d97c06145f4c02b3ac420c3e8527e4a6b1e7060509b758a78de9954963db568fdc2c96027ab51c526c834270048c49cd6097fd88afc556f192f5badb622763187be932cc0780591edb57bc7c4fab01f0729bcfba5651ee0489ab -P = 5417fb0f3e1892dd459e4a9b723b23caa611841264ede00936451805be3f41cdead9392d230a062c9e2ba95404e20c0102de41a409a2fef82273b06960a43b7f05a58a33bee3f622c6ae44b4ee9d682c37c527324362ec1a33ecec38fc73319e94cfd0b074 +K = e3982db2032f2b4ce658fc44b76f5964c45cd31bf803708982ae599186fc3765 +C = 975e49a4b9a770957a1bb2be920a4f39b9cfd69ba46983d2473d631c08132b9bf61c44510b8aa8bd48c70a86276aa1149d8fdefad511d15d2e2037d9e920e640cb71a97663d19eb90d0b74d9764d03e17cda87ebec6e35ac2003cb75bf9192920d910188d78e2e664255fdf6c9190319d34adb858162ff0830f37fe1dd44003d3d5a1f9451949e368f46ad1977ce622daadf8483a1f60359992b9b366e8a81ffbe96cee45d3aef2fd0ad8c17cc34927af77a0d6d0c5deef3b4a25c82ec388667a493bb0599ac492b351246cbad6d283bf1820883afa48bd909eb7304b9fc5b7d960344309133aab7a85c49f7de396926f50bc83c95900cd049eac1b387aae7fcba5345496425f9216e1fd15c20da75fbb26da176149b40a701e15a7bacfe899e3ecc534ab8bc5b7bd081fb825b5f40fa57e363d7bce40020e73f638acfa097b89c50cb9edb0bd6d71d429b8003aa5dcb7d61792eb3bcac795954c625a104209b373c28cf02038c3318916edd2b818e6719ec154cfa56afb2f337d333069f915d0d35edd6c278fae23c4440c40be462a1dcab23758e4a7fbe8436493f58e890092ea71cb8bcf1336e9ee16b852ccc488f21682dc9f02bdf6c56fe8ad04d84a3c69d8d06dee3d126c0a75f142d0c90c256139acd4b719573e588b80b4540024a05a35044cf58d89673923a534c3816492e62379797cd6e6a7464da5eaaf11ee7b9c27b9b03d7b53c03 +P = 43d38ca132545b154995cff07082611cc47a6467a980654d2d1f1ccfb3bcd387e9d7ffa281b0e0b00dc8669207e0d8033e9e36613c98978f8644bb7e505fbf491dcefbe19589254c8abf859dd65cb94dfc99e7b9d3d1f0a31f21285963e1f7b45c7490a522ff887786f7940fb6192f5081ce7181944bdca5c5bfcf2589f9173a682b78fcdf971dd9f4e8529033e15cde560984dcf796914206973dcc13f8c9a24b25dd00c11166ec6ecf33c6ad9b487847abd7bd29b4f3b9c8dc93a6a5a31723dc03245884bfadc12b2fddcc82409d7b14660af808d4e8216157bb6ba03a319193ad4dacbd37ac884550962a4de26ae923f8d74f2f694fcd0aa74f2e809da4689aad9f2820684b3b423ec4a7da0ce4a1b599fc21bd2779653283b0ee81d7b0d9fd3f6d1e75bd71af9620630aa87b73f7b12e68ddbdfa02ae86ae06b0b1aee4a997d34f61b466348b92e36f83652763084a215c47dcf689df17e36b64bae3ca1a2cc22c837b5907236833c2c1e5f3ddb74165fb6f0633990122cbe4af8b5920b1bb6961cdb144ea8d7b245d0128ab76f4fc0189ba97385717e89e0f99c962ee8c2b6e55546a18be0ba3dbebf7e4140eed6aa3558c43115b65b6f6e8e8fb4b9cfbe0b6eac006603667b28cefb4dec037f33568a3c94d9e36539e91b3199d728521a9a6b82b96ff1c29dd1d10366d0510f1b9a9494cd104db2390530be3fb6abdb7 COUNT = 6 -K = 03c32f01cf0b14ec13a231c17c30f1b295db4934c1ce98f6b1f45ea393e96cdd -C = f29154cc4bf48dfa291b028d894e17ae1dce23a3433b195231f16bbe0beb4212474780e1a8de757e9cc919466ee55f49171d968150dc79324786aba3dca8ae98c3ee4d307b14e08f81ac3efb21810fd4127512ab445b37e106016d39d88a630bc235b49f96f74f12846bc250e85e48d0 -P = 92e63777d8b0ed5267c0816afe8632c1df7a8dd59b8353a224f25e76364cf56f3188a575f4ea6f425f1c85290aa90dfa766b4b37daceec5120db1f5d4218b145c01d1c0ea03e9a4418caa53cba596df7e012931b1da16200d39200d6b8ced763c7394ce525 +K = 2f9bd579d071c7260b40a338b5401a7efc52e558eb5a2a048db75640fcaa92fb +C = e70e406f39d497c142070c8d3fb6cc6d13569b62048ae51822f703f24f805889449a578d8ee4163dad20dfd59646b3b1dc375e8ae2a6a950ef2fba2b343a394ad7e509ed65e9e91f8f02ee8f9a6e262d802f7a7a9d402f4a0f1d2e1bcbe9e03a3ea9cba870e3545366f3ed8d6957d4fe78de85ffe644370785c9ea3d66b54d33e980f3e43bd0872dacb27db9cde91313a69f7ac773e7b6c515028dbd2a77b9f9fa23d3ee28a59c314eb605c34859c8e3f97956e100f9ba6e71d4c40945ab6ca41d92b28a03bbc4a17f285f363148292ffe0f2417f38283adcb637da24a605ba152e546abed6285d52e6401507ec44458bcfb0e54626e3f2700f73967259c0c1d654f287c4d3aff01f466e63a8efc6a072e8d45238110f62b8dbb698e22995991821204dcb46eb963392d1476cc9d9f71eb5fbbe9165e530843c3d0a28b1226868a6bfbb502bd36360f09615ddaa2ef4fbee311dd01a96685f08806e192574a1bdb8234f31db3c140a223b42e310dc5c3ef7fb9b364876181497a625a23ec3c6c9b6e500cce6eca3c541386286e73acd2c81c201ee3567aa8b345ef7dbf3cdd8caebaf32c1dfb848703899a7263be52a160f441eab318e25b78992473c527a04aad9792bb2de12d7efb3a81b0139e42e7f6b0663462666982f8c968078fe0cd1e69fb52fb8c3c81cc38f61a4adb0bb1ef89d8bbd04278cd95c3d2b45b69544956b8ccd08d4c8eed29 +P = 5dfa736069c5445c11f214f64ab0caf9b8675b50b3a322f710344b54da33531297e5a9bdc7f1c42d163e9ca0384a7269f4781a97edea947c4f151cbb0d8aac87a6d409b8d671fb926ab5e2b234a6d1d1e310c183b85e8eadf5c494a8dca9d0a083566f67868f3f3b00f910ff7694b1c767ff11af1ea6814071489ce16b54906e22df56914219289f2d290d7149317d2727743651b8416bf49e9da50813dc3eae34b01158d4c5dbddb5f76b1fbc925eb753cc50ab54edd39776450811bf5105639661cdecf23e502908735a5686e4a93b2bcf60b49e3b4695445863c3eea162175844a798da5dc6815890aea7b48891dafb64c4e6308e831c6942c1c870ced93d3ee360e3a18545686ebf070e966a51fa0768ff76967d16f85634c8e13087631135a35b0ef9516e42b4640c15b3954b39556fbb38f16f893399c8984e5fd6ad7eb45165d8940105e8a88c6ee3b31afcea6ff9afa821e8c10612f0398e6294b997ded652ff685f239d8b4bd977b945dad4b9e000edbbb0699a1eecf72c2346d40ee5a556193b0959693900d212fdac62149266349ecd3e1f26089d30fa05c9d052e1a311b0e40ff877c23a1924b20a04577d972ba866b3364f4b1f51dbb6f6dbaa9d6afd05f1f5e22a2a8826781c8e4c8b1e107ad5121b8de0435a18a3372a26e138d01551f89484beff691d782184843c452735d9344a57c39514e0dea8d8df46 COUNT = 7 -K = 63329401f0beedde7c3f8a0b7b1f4e9c2d8171241bcbbcc2c6b03ae7575b4a1a -C = 87bd65e779982b2f0d6b72f69a8e614c83cbc2ce4c84b2e32e32fe38047691decbbeebb1a8e1baa9a960d8253dddf1da5ce9044fb2953b4a2a8d5a9b1dd0795ed3808bf2fc8db5c5ae67cd583225df4fe748ca0e6456fa97dab400a4a63667fd09befc10242d61a43b1dc9acc7a25300 -P = c12fbd7c08592422a819057eefe3d69eb7b11ca52498d23c8d0c06f38a11d4f59ffa533b130af46df5924f75b872fc6d4a72b73a10c6798f73682938a82adc251e767f65c10c44e00d24b8e387fa1d0364afc603428eaa05dea38d66533b3b4f7ba25776b6 +K = 5a4bacf3f0ef2c607547d2560c78fac16cd4245087afbefe5ec6c786cbe2af4f +C = cfc47e06ea1443554c80c1c9c2b67f7e909fcbeca3bb9ffd329244c70941bd30854e22c67b6a0df0b1785affe4f12188d781a8e3437881f8917ceb6a60d1f85918f66341a5619a179276ca8a4c08544be3dfddea92fcddff89d06b1a78c8abe3a3581f968ff0810996ba314a9ba90073e4a76b2de183e5ed708107ededf062c29de10512125b32a92bd18bdfed16f2f635a092a8357a423af0f89d2b8b29fba5bc5ca330a8d09ae90dad8779f6bf21dfb387e71e74e9500788bf789efbd4a96bccf87c3e8f12792b1b98850b99b4f707e2aac1beae7a61ffbfaaa237b4dab1803dd86f3be0172b06e24e541c47e0cf405c38e349e3eaca8ccd772be0c7eb3c2ccad5cf585e8df6062c06e47837e2f452055a54a6efc122e071824b93a7e0ec2d1b283dc5cf109d88f3f401d845de7dc4adb637648e7fb7b982b71d26b58b849e46bd509deedae6aeab5d94521dc9ad4d54884ac1ce53174a3cbf293d5395d62c7175147b47a132fffa2ffe9813f7f9f5423d531c452dc012f2ff4ad2549aa286cc6aa9e4c0cb0890d991e5a61934e0bf34ebc51ef97df13f242ecb46162c1207ffd822ffa722bbb73807cb2b0dd3e2425a8333bbd4afcf3982f8593bbad245d981c0b31f34b4764b0a198555b819fd27fc2652e5a300ae0059227059809984b6942fc2a3b81313804c42c4a1fa304a10adae78a9f793ba03f008961b20ee24de4338610e7937c041 +FAIL COUNT = 8 -K = be022caf134a42b74ecd823430d86ae5049c7f3165714bfb5adc84e5ed54127a -C = 48b2f76b2495b57ffbff977f6d6971cd9df3c0b686eef89840b62491c1437ac69248dbc3472fdfb1ac042db677f632e8d209007a628f3ad84901ccbc0c6f9974bb7fe17bc75b08c00dfa62ac449eeb17f4604ce22e032e7480a646d24b02cd6afa35fb15a1198b0d82a66a062bb7993b -P = 29fa1aaab0daa65431849b9090a3fd5b9b547f155f902fd857efe59073734912b57df5aa291e5b23da6f3b6171a85539eed48d596bb3d9167fa530aaebb78a578e7a719415909e815642fb6a9f75bf8d61a370af46606e89c62db089cc00a1fbdf22a5c431 +K = 799dbc25a13b6b3585508dd8c9633ce1c6efe15db2f994dc923bdbcb4ea3af4b +C = e6da21cd278c9e312cf6c536e1b55f9d6a743d085d1e6bb304a3a013526ce4d4f2be7194dfff8f9db1483d579598f32957bd665fec3a1ea306e15b120c212a743cfae76af01e52d8342a8e1d85a571cbb3a8668f8d256f005cadbed47ae7478e8f167ea12079aa0b30925e0342c879e74389f23e893d4fdc35007fda6b772572792df59d7adba6b24e15139433183d1b4ef571a58ecd912e3ffcb9d7dfa35bf926ce372eca6cbf5bc84493df12033b26f73d2d659181f4b0277a2b3dbebef35f1a26fd4dd28de5771d37398dea733d3f02bc13deb289f68bc155a39d4a7cac76de722d2221471a7c3b35250da5b09d99cf076da145804b3f04598b4ad6887342a6f7132f919d90ecd2cfed19d2601f286b5f9d4fbbcc36e136f81eeebb12d06213c6e4f4a62931d98a3b5ac607a0f2d605c6a61927916b61188692554ce7a236630a741dae19e03613d0380e4db4eca063d1bfe2d8a7dd81e4706f925d832de21b468fc5e8770ed71f3c5477606a3b2e919e7ec0d8a8cf61fb0fbaaef8e3268d85e2de3f7617279d0ba2a757c19efdbe0a4905ce23aa0d20264e9ac02024e73d72f74a8698df304ade866f0e02b910c63e8d6e2b3f71152cb6a8a347f18f16417d0ef41471aa71a4ab384bce5afcb039da12ee72188f054f4e85731f0ffe4c20e8d03e470c258a3d3ccf44ae8a1c2d7fb8817ba68d895305d4662956172962887f54fbe4c1effe0e +P = 5695603ee261291c3c4c8e3e94c827d5a86b3ac65fa76dc31e723cc8d48984dd595d05ae805e74eecafcda15059987cd95953b3ef18616fcbdb1ba7ab1234b9c3670de12b24a1fbddc9d37210d765faa02655b3db1df504543c53f72ff948322ac74c72370ef73914d418e514ee5ac4f77bf6d785be20185069aa201e26adacb066aa0aa57537145579ce08d19472964dd2057ec65c30397a08df1cbf29d44779f199ed15f508b877db7023b5756b499fec42ea9984b242a428675bcdafa7db2c2017c238cd349185e330a4ca85ab25ea87d52eec0b661fb7e61296b5550ec2cf2101641fda970cc618b88b8b48bb36f376595c6b6c27bb9cfb105b662bf8d07d30dfca4b2a2488d3cc5c01da23abc5cfd12b937f9e44bbde9d968a90e54b2962bd9a8bf210a49346f28eb07c5af24e33aa3015c70cd28bab15a617f092349bbdc489406c103105d264dcab5cb26a502a5d988b4066cca91f76e56cdd76c03e1874b47d809680fa012c7e0140c1a2367f4b41d5c3be28978d6936171d657f9cfcbeb09dfaed5095f6440e861e5e22080748a79a943ce046289164fefe9630bbf089d44df9b4663988e39907b0c446cc80dc30246ab7e930478a15f57164c5d882a8bffb61c00fa8cc59b23b1cb6820b4d5395a0b97c3b268a791989a23e7b989d544e761c5c9ccdd7eb19a4363c4e89017c08ab95ffd9fdfa7a92d3efc1be6b0 COUNT = 9 -K = 3c0a2eb7812d33c23aeeb0bf037cc64cbdf6c64f3f9fb65f9d999e3107b55b02 -C = 6296211410f8c14e9989f7728bb95f0210782e1b8944bbeff23a45fc5496225144fb41829b3c87a7ff788cc50b3fdb3c7f95e4d54c02a7a097e86d4891a90cc5cd51ebe7f37d994a6a0b4946e6997d6fc7949ec831aa9ff9209f5937e2072c77840cbac804cb348b2d4db3153eef1eb8 -FAIL +K = 5c3e7671a61c87e3116165ef2d5c6f190dd7ab9cfdabd8ba79038967d5a7ef08 +C = d304cdef2ebd74f60aadcc4f8547ddebaa68790416563471a813967a1c2c0447b12150d2459a3545cad6f5c3645711e6c1dd41e88ff1ad5da0d42282e4de66a187516c3fff113fd65f111cc59b4134a3afc0e8b99bb3d0d9245ca5c051130ab88432664d34ad844778f0ab0942d53209129525f792436e7c8f85988b7b0881e43e4012498ebde8d1e0b033a6c86d20f2b71c59c46c1ba5e0fff2c6a3a1b6aadad219c970251b5a67f65de75fc3e88a47d528835ed2cad7e97bace14c26d2737ee0e30145a2a1a25356a59370e8a07623c0316c5ffd4aba3933f4589af3ceac5f5772a0f5067ff5320680fd0b89d043036c696fc10349611783888f6cda38e037acb37d4b99b4b5d359756de2af23381e2942e9c86b8340716c78326bb308253ef297eb919aaa45d73e1deba5a9c29246fcd47b23e29c576bba75faba1483141750e3311058c755744bdab7a36620f47e6d8f409a500e834aa1cccc76e5de3312414fec92f16d732375f6eda825e2cdff9a3b1aef57739e143aa47a9bc9f27a2b7882bf9b6995dc321bf6bb6aa016626cbb8af273223b7810168d84b3d104ab30a7817f3d48b3949c3606a217d66d4d32c071700f5506208f2c669e8aea712ba0f96b90febd03aea36c440ad229c8e82fbe12091fd1560ee61df153d82eafb2021b7ba21743e9a2db13040667bc0bbd1f1cacd36f16ce19acd86d66f42dedd9d7e888b7041a1641a9 +P = 6fc4c83df20e41c63f35fc9b63ed26b1341eed9ec0386d3db53ddecf9cf5a3b91379e6afe9ee12590415aab9f109a0a9d00e48ac3907c08506204f9525146aaa36a9de6c7245aa503239ec9c39cf25604e252bed1f1849c9d11a8caded7d43529869e131402e58cdefaed938ee14ab2b0f93731791fac3234a1350869509e6a58153c2accf18d7db1009512b94e5cd443f8790bf96f55d4edfed94d002587d34b5dc68a777fafd2307cda76e79eddf17855b707335ac0a0eedf758d78d961961b4c63c4b1c1d603acf4320ce30a8a882e536d5f41179fe5501dd28f468145760e09d04cf2ef48811a7f4421afebc750051a4f752f2d42f701019d19267accb83c8fc42a067028840e373ee2b4167a9ef6693b47a21059bfedce1a1f1340141a1d69e28434104153177e20df7a2390650c70a19fca1789a950ab16b167edc7c3f4067438bf7c90f6edfb406b2f0d12c7d8a9808d06ff7d5a5775a4ade9f35aaf407f8c6a9101064ab524a7cd4db14ad4ad0fb49606d58af8cdde6e34b5e7502fd45688d4a7fb32d0f13dd38f53a93d678406387e4f0cacb02250a46dc08609067145e6e15337253ef8b105fe443c2074c0ff1ec05cc0cbef46bfd012b4c50718ba191e7f95729301fd32596d90807017d7edcb3dc0ec2f4a6261c388835a2b094da918418ad46bd2d353018623608317d986e574653d7af970106a66fe2437cb5 COUNT = 10 -K = dbf44543f5ac5e4412f70659c50f1914ab846c2200372386df0b2a2c01905099 -C = 8dc364739a20685a4c170ce980626eea3d75390379dcf9e37f35565c9908a214bed58a9d203fc9b5e8717bac2c351f48990cf5ed8585acd6a71216862c0a2d2ffef4a06231605d39dc9af3d9b07f59ac87b71ef4f9b4edc624bd51ae5a80944afecfc520e93f384c144fd6f394eb6568 -P = 751b049f1dae79a04ed4b9086765350a528be39c156f0a1e56e3385bffc249239f7d9b758ad0832fa7ada27c99bba926f78bf24a2ccb60463ce71fe2de0d600511e76c4abcee9e26e641d56bf9c8adfef0da8ceed69940e01dee8d7e415d1486aaf1a7744d +K = 300647a84d64bb647fcbea060ec13211fa23a48470e9b6849c864ec9f756fc7f +C = a4ae7e5262c28f1e6de48c668bafbb4493de1c88cf130d19f14daa6c2a7138842df3a4d72aeb34070115d965c5cacb888434aa9ce562eb1bcb4d9ed402092b1ce568b73c5f123f46f7bd867e4c55913be5ec0d965a35420723d1a1b1be8d403e867f527a6046edac1e9b89ec10050ed6abf5988eeaea0de272df29240b7797845bdc44f2fa46cf0f3dfa9a790c90fec6b3ab8a12b3745d4c3a82689c2e756bf80c8e4886ce3a287f1992d5d13133378b426080cfe325f65baa0573f35af3c5cf8342dcd71a2b61d4e97f6a8701f6d39dc127f543dd86fa8c0fa22794bd68bc3c697a378908c830c665474b408e5cd5094d70f0f2c8c83dc18e69aa3c40db224e185825f6c39685efe84d8baab56501bff99692618008de65815a9b9c6608205cfc5248eb13bd62cdd756098d25f76c2e9190aa34fc4e53195a105f0e330af6f7f4d621d36e46e1b66111181175edb1eb2f7b3b90622e71604f04fecc28a97e6672d57b576cb47d7165301c416901f73597f8d4ed535981ebe8b5ec2c0125bdf05e32f246a422417e73e480ebce7e2e7a6e4b4579d5d3d54a6d9823bed95b74f08fb08359ad11477eede96ee95e8444e6e2072f16aecb805e36506db6a6838fd0f60c630a19c4d124d64d8ad390bd57f25a31dc95feb1cf9bc910669019cdcbdb9a11a730731921496448307aaa1b277c603d9b54c55e5c6c93efbdff2604a027888e9f9c5f83356a +P = 551f542e1ca62b7ff7535b8f60b348a6a32aed6044a3f50beda9ee99fa7c2cf2c192256b135e1d8f351ed23c54edfa68d52d5c5ea9e521d1a9e2365bc8d438af117af2911b0d3d34f127ab33299d4d6d87c89c74d87711fa0fc74b7cb6dd97044aed63da621725e0ae7851f6026129fce29d45d7257ff086b63f7f8b730ebe1557f42e2177eb34586bf0eb8a912522fad417e0af7e397b88b5fbce98cab3e08adf1b66916a5960136e1f8005bcd6e4349f2832998e10db1bf9b4d79f73d0690697134f9b65bab48acc7739d63ca2b8c0380d4ecb7fb39d586f3b618c329b88ba7e3e66268c2d2b8358622838fb8a6d78c76b235a2efdbc7b11a9fc26902931814d34a3596ffaf446675d85231aaaa78a3dfac1038eb95ff09a1fe69bb18ad8b70f3d00cb3f10238045b91e86a24e2e5c69b81617ec5d6d9081633c7ffe2c6f886950a44e8f353d920109ddd009943f1d4384c356a163f807bd5f7191cd0cee1a97f433cb269d277d87c012cd0e710c17a6bb9ec7d0644af18e69c58862ee8f5f456b29725a1baf6b863650fd0150743099b5d064e5031fc6ac240a6fd006b5d60f903afbab41a891236947346401d8be0966162e019af66f887325dc8e5acdc18121eb4a2689ef964dade5f4280a32d942f75265864cde1c63c8d04d67d1fd1a9472acacf659cff9cb1e169198909761effc89b2a19ae4209e57117e646cfb20 COUNT = 11 -K = f57d48e95adb7fb68cd658a381b8ccf16d57c48be9141b162286128a9034c73b -C = 55f309def4e71627858563b73c7334840f581cb46165fd3220633ed638ddad1041dcd28375773a31e002e69a76fe4a443851654a4ca9d789477b1a54b34f56d1706f3c160c29a76588b878910464f15f5e6850329b7444ea67fe9abb6b8fd5f2eb40ffe6375b4f5d21404f5ad874f8d6 -P = 000b08c974b5ae42db5628d4e7ae155ca7348d025f118c7da3d8cbac60665b600ca2b74c853c6d6b494152461d0e492c2a9807b06c343508705d8aabe5f6a70e5c21c93c902aee8c6175acf26906d1d04aab2f37ffcb601926d4886bd973b64a5df5a19c26 +K = 090bd5b23e5c346005a8bacdf1eaa1087c08d130051b77b7b71bfc50f6438d7d +C = ba8c501daaa62d13651ba10254e78e32ecf726db9191a3a347bb5d46b19a411a7380d3bda14baeed0ffb73da065fbbfe75a0951a1db5bb2ca0c43b90a9b787dc7d1fc38fd3211c4e9190e4eca39d88a01825a8ac6140136a31ac76a25696388d10ae14dcde49dd895634d71e897e65702aad3e7d4baa0a4c9cf9dac2c7a2b525341a015788a2fb9541df4dc64b6df8fafadd38e25707d7e4b1a0cb61b29551a3ab8955d324e61e336ba3768969cef6427a182aa1f87447605433247930bf320cbd94d0b0949a7ef937d401e93f31a525da0a4d2783f23c2d5af042f4a1dba49230d6c5c014a411f08e833b80a2dab272a18bab680ea7b6d46fffd3a6be57ff55bb29f8e6a354cdacda6e8ed4ad7898b2c2b2517e5649f751407025fc3cd4eca067e8be231828b99ae2c70eea726fd354a4f9c35c47fe0f67bbf4af7a1562a5fe1c0ace67c9309e5d13855ca3c2131164a2823e226076712044ed1119f4010cf303ce503623454a30a4780dff881cf380eddb36eae8b84fa73ef5c4ed63f9463aa3641f6db1999bdc08400205b2b7282b694f619a8dc83c042ad21874c9cce90b9116b226d3b5c9579fd76b817174ac97a64a27a4ad055e6a47be41ead055c425e0676ab66d9caec3769f6189939a28117254f0e57a50152e81851383ba04a7df8336fde8859e9f090e1d6967dbc125aae13ad8b6cd8d676deb182c05465a82d865b7c7edc0f43451 +P = 7b46f83a6ed33083fcd53d087bbfa40ffda518538c89559a2bc64e8eed7c1ddfd64ec3397d2cb1134569b3493cb20b8d7219239bee7cf845467ed1b5ba5e079d6e2cca28feeed7cc3991de4ca194eafae289a3f0edb94125631c9dbc8d92418d6460806e1afe2359307811686f0d07fda097479b930c8d253c35a5b79e56ae413fe9adf9acb781f0d7b74f5a8bbe6a9288402233ed485311c3a9df01ce54365a74a9b1cfe038f5ac7977646ac722b0eb5b63aaa9083727ef0cfa61647fa3a40a6198201bdfdb63d06834b002a12dfbe9ebc110c38f64d3a1eecd77cc32e745e981fe19dc3f9e69332397e8439f51495bb2bb46a1a3fbd874d77de966dee425fe7e7d24e654cb58a312e77874d24a56a2dcd2918fc6040291f7a872638c72ca0bba2ee02fccb2e6eeadebc9dc915c294b01e773c6e2ed24b10c906881839775ed8fb4efce87f825a11ee5333323d4e1ad9b521eedf37276412bfc5fc0351021ed078c7b59d2dec4a193e49d8cf435ecdcb5dd176fbae60b446d250d9430ed291c3a535c2fa11cd2519b1de02622a3f930012f6dedd14df1e892a199baf7482e43364ab5f3a2d870c43a5deaab0980e17cc84d5b858f4e4d33d7241116cab57ca521d5cb8c422c84adeb3e58f011f0e633b29c703921fcf540d6323ad711265934c0093e0b550b9810aad0e95f5af9d4ce369f87efa38f3d995c5edb40630a845d COUNT = 12 -K = 08d8ea994e5e78e4decb0d1230c6cacb5c6918cd3030cda778af5239a736f035 -C = 628a29e4a5845b68e293954e1a739194df57f25b16d7553a0af3a6c66f0c126f11c43133b521c998b439ca289732d44d8745e9619d595fb872aaac13d6c1e7a6f01ae06255448a0c3bb24f220d3acd354af302b4261ce05cf39844d359019c38005f5d53321fcab038f37b02b6ae5d47 -FAIL +K = fb1454b13146473818a417d12b3b07888e2b72383e453a0fe6ace18cf6916e44 +C = e131155e3cadaa949b1f70305b9906dbad3d8ec901785b0e56c1c43e758e17d1263e776a6cd5dc2eeb5553993cd30c39d2bb9c08f3166957b9ef904dc2fae11abf6111ea24e74184a8ffc3d422a7f6e226738283a10ceba08defe169ea46ecfd616b02c36925b05b96b2ccf36b97ff8793989f66bfb67030e7a015737d1491e89caec924f704eceb35c7787af11518e5660fffc0a6f2d3916e19407d2cc245dc128cb1a77a2f7a907d1e14a79ec535fd315c9ffeda859967fab05a505fa92e3ad3122c7c3a990bd2f60bd870587905c4b80cbadaa2ba8197f54673983a508bafa3a153eb20e159dad6bebe4229625fc915af692a6eb3325f55b98feef5739e3d87ac76f397168135502e2032ea8a24a09898389709d057db6e721a5d2eb10456a844dc3ef45470333cc018614b8156f2e92e97b48b1e5e1c401aa85e51254dae893c3fc9145adb52985f82c03cda474eec859716d7800632a9e5ba322e78f56c758d3e7152975d91bca9eb743b0155a080fd7302749107ec757ab3cdebe3dea34da6def52a4f6d61980c7162ba94bdf7edfa110478389a3ced10f5c6f0b79d354067ff5b6c5de43a291ef8a4594c674817457fe9f7b14767574ac0278c2b602620c1e96da1b2b92e52876d2146ad3e203b39922837f58d70a6cd35128cfd5675dbe8f80bddde1d2879fd12820cf18c30ef71a6e1c9bcd05200c2bff9573f1ae2256b57b9d8c5e7e0 +P = 3a12e9114d146265bda3c95a07938d465800ab953f8db9c8912207a12279490e40e42d77873ae93715a66ca2eeb4f0559f3c8969a4ee0bfc82e7297fd3cd471c9cd5efb4eedd848ee7ab13a509b009c5fdb2bdceb2dd73a27d20a9fccceca728ef3ebcf6b592c5aa703223c00333e22db625f78c62a80f41851978d391c174d313fc37e967500582ecdb0dddacffeb6cff157c2583f0b8931f9ccbd5dbc2155901e076d9aa47cde582b75b47d234fb1fa72d338e62698f569f4bb5f7e5b959079422fb81ce720e7da487f93756edebbfa8fb67bba3143193fde00e791ab4b9cb9838cfac26507bb832cd93edcf51de765d168d673a54b0ed1b91e2f53d9d586b866ce84856fe21b99f2c9ca26c5edefe06a67ccac7040412cfbfb82cb460bf989b8429e4a69a83d5705e8bda825b3c8e3c22107bb0807475e4b430c69cf076be39a5753961fedbef8c07f25a03a2a4932edd3f770e502662c88c4b55e76266ddb1db7887a3af0e146346fc68cbbb0422dcf0e24a88afa3b8a97e502f424ee9b1965ca88caeb75adbaab5af4e5b9d35641b4cfb53b61e64bd5c4bb199a369f02b289534d04ccaf8a5b9682b003937bed5929b8c7f56460e783fb866d738a59573063ead89edb3481081472149c8f8df6730782277ce0f4aa54dd9af05797f027d8e764e4c55c1b48e6d895507588c8afbb9cb49bfd34652876738427fbda2732f COUNT = 13 -K = c2e444b93a73426e4ee93abb0375331d9ac3c497ad7b3c6e4cbc5b784fcf3a11 -C = cfa349ec18dad369b511110b2c154c16be4eab5cf035e30a2a70ea0d5350070ffdb2bd22f646890090cb0786fa1f4da49fb166d5813ff1e747a2039e53cc2ec44453f8310998f8d6d725b9ce512ee6fc2c7d83da77b938717a3f749663e3fba2f8ef84070184addb904665896382b054 -P = fcd6b10da6eb2713d7b95bf3c3ac1e7c23e255ba8972e410db354f38ac6cd3657f3ab34290cab8d061d162d7d3257fda21c2b51e4057ecb4bbb3b5ad5a5bd0a6aa80c0fec085af06f727d343499766834c4261c3d3240d556a3c8260b1e905179a10d946cd +K = b373f80245dcb7eccdd6272aa4e1180ed1ac3e41286ecc0b499b8622e3cdca35 +C = 8caf661ea593c0aa5b991f039dfb684460fc1f6f6436308849237e2ee7790af9556ef7a87baa542a8202b1dbebfc8694c07be4a8c5ed1769dc5f83d9f7e58d577c92a9636411f44394d4cd1d88714b9bdb59f64a06032c77ab1d7c1980d298b5464a9996c44d8db6d690f5ea6bbeaa361b5a38b6864f165c17f477b8256de8fab8b57a091d3d54d703ac8437abb60dfc00ade3b6054c90a343fb0722d31f1b779b64beec361718dc30a472f38058e3ec6733c029be6fd434e504184c01474a06ad28cda006a3f0b15baa398f89c3ca85538844d4511fa0761e13e52de4006d6bd51416482f02150fc4f48fd8f4fc4e783a6b437b43479bd76240aa78f31f3afd7d19f8c6736acc776be9946e47ea80d3c40710b7630c932324b2353837ae49d125adee899456153a5768d38a2c25df2f1ae67f157f850ce5f830880d7df50ff142ed4cd8d0d8348f6ac960613ce2a1ebb495e6b397feb80e0b491107cb22dc8e36d7f0a157da70c52222a8c04a12c6c4e5db258943554f61103126705b6887fb970a95e3fd93434dd3224fdd4078dc4709e663979ca56a41b86d29b84fbceda3a0ee89b3448e86d5a905b65ad1edae84257aa289a97a5c198b1dad83ba0a3c69c616e0d3d24a93bb09b0af58c07c1ac6b40b8fef54a1cb258521c34df82d5f5a1570dfc3e41169fbcfbdd32d31a4bf6f768ebe6dabaa44f0e883c40599a6a92fc18dc0c7c67de94c +P = a3c13c6186ea3eb84e421fec0062acc09089182d60b1c309aadc75c9dbca8dfe79521a191155b666dfd517c847a84be86214ab550e1165a0b76dff035f5df6073b19d08141e6d013c4bcfd83b3964cf1ae53a86265ad198dac9bf52cc7c46916f4398ce0adc06ca084a7b0d64b07218095346f7654f128c20e64238bd429041d4d471eeb12cbca5108e5ff476aad99f7b73062af464e4c882b6770c2224a52f23c3491bdb566133bba8911e44332aad3fbf6e4709596cdacaf57c8d90a57228fe52167cf1ca9a793236727233ca5f1ebc5392130d21016fc0d99d834e51673e165be288160887efd7580cbfe1e0628ce529c7f17cd7eb5f449bdf4d10506a9d81296b798edd8d337f58b9acafbc3b05dc28a142a1b70b543e9eb3792d2d100f8dd505a30280081ba41b65c674694f2a0e55105574b3a013ef617a133e6bbe7ba4dfb8520f540f10a7d5fc6b3bdb85940e6ec1b23492ba2a0c9793e3865370b95ccfa25becd28947aa4128ff7d47fe6ffbe392ab099ad0ebcc5aa5ac773331467168c0d4a58769bf50d16e36209463da95a48b48023ec547e5f0526f405de5f132e8cda831b5e6a9e0ea21cabc8c90d547a32ed0093a915b68997fd50880f355e609611b094e3cc383853476596e0b783650f1b46e4fd4e3e52e2d4eef0fb8771b625d9dab6f924a4f4dc416b150ebe2e4b2e3bbac0b8628165d2535fbb352307 COUNT = 14 -K = 5fae0181534ad4c117cd7ba5b303c6edb2c4d267a457eb63f50a9bd1bc9a58e4 -C = cefa575cfaab5e842b03b345094017f26341df83fe25e22c41f39b5bfa3c833c77b6c0de883ef9f3679d6094df83e4d1641c53859ec365aa2552eb1c2a13af2546ee64c5d76882fdef0120602fc6337a26e474485d2aff1164ae05b6433d8c931f222b3130ab9920fe1046caf3003960 -P = 69cad157b77ce3d929ece2b7e4f90158bc1e7612f1484ebd54e223bb2608ec0c15d4f0da35dbb1ab2bcfdd821e4c31b0eb45a405b9e08a43284abf13a1fdcebec2972e0d796f358825b056ea592f8d0d0db93a904b2b67cc2a6f90b5be538ce75fa0e5057c +K = 647e343ba88b8b4795d06ff1440711de3dd5528ed85b809a0b92dc4a95a3f557 +C = 5beadbf37da1f946200a242ea8a6753069ba3d83d7060b4f523098a7bf15a89534ff23b206fc3c26a12043defbb160e21339bad8947f09760ee453e0359305cc8a88e93d8923e1496bf5f6e271d06fa329bf45ea54dc635557632ae4077a0becda98f38b388973e77f3d51ea8fd4333df48bbdaf62b0cd807551ae649beefa71f30e48cc8cb5f3c9729f30066d87ae9b9bb0b1c7910765bc32be7cdc24a8f0905f2940686e3adfdfda0cd135e0f50c7ac0db480e411be908608a90756d9f37880b9a87f9b79ad1add189b4115053682561f89a8bb9103915adea4ff6113860e018f3c988223b6d0e18c5edb361fb0b6476904196a0bff8be4884b05cce8297e5328005ce203e916db21d3c38bbca20042d6cb6b0afa79cf3beef3ce5cf2d62ef72aa3337aef025c04dcbcebb3da6efd43e64f60f519d03e60e24ac981bde3e97247dd2e8c04a9b293885f24c5c11130068ceee829790bbd92c6e8c4295cfc765e427a6c85dec6cb99fcd7316b9e0baffd0ee59e613fc571faf351ec4d4c9fc23d46c1096a2544b6f963b06ec18903bdfe44932a79219bdb5ede33cd77158f8a9c50097c4eb103c73fc8d53a724de8312409bdf8b800dbac3f2b65fa23415d0ee33b24f8ab3ff6b75521bf0f1457fc696f285d68f4a0a69d667e61b950de8bc71b8c9dab292d67de25c9073b6cb957d1e798f3b6c2c4aa6c01f1dec865841802899c854c12f11fdd5 +FAIL COUNT = 15 -K = f5e1a9ea6469068b53e1b693a928b97243789fb6cd8d3177eee605502622a7ae -C = 146431b71da909578b4250043b830e336e97841a7a9ef26162a47a7b0e72621d864bcc28d034199ccabbdd58292119561f42c54cbd5b53434e00d6532a49029000b585b3058e9d7727dd0dd5dbda17741620dd9a45da6845ab0fe0b8787b5bdf6478700f19a9843e90626806c04f3e79 -P = 498efc166baaded69cc0d45be9d626b18a33687d6126585cda3ab65bfa4f473a09a5bdfe11f687d08c3000511dcdc162491aaa0b4f3ed5003c2978f11487db32632959b6d8978175f0cc07c3694f9d3d9bdd32a6a352f9404318004bd981568646a8b53b72 +K = ca5c028d04d18fb7356d8856cfdc1c8ba16dcac72bcc9f70c3a0e29d0794642e +C = 41848d90e634720e77db7ced6754dc65926d14dc66a05c61e3e98c71011a85c86e9a17ee35dbdae0249ae3179ddb47803ce00389795535642c5b6f705a2034a23874b948eed93e137f5e82fff483bdbbbbbd3040481ef866be2fd7753d066d6e3ebf60587cf5c1a267b9affd88413634001926567890799aca3a5dbcff9ed89022d233fa5eb71dc1936d001139f65e8c2765c6d35cc1903d09057f85a212a0b1d4fd978dae3b8f3c55f513c3b8e193b1d8b9d82bd596b2a2814c9ee07e2895beff446775ce9984870786ea34e472da26e4e4b19dfb8bd7efa6b9c89a91dc33ee97e69804a45034938353b6ed63364e0cf66195b7f50763af5d73be91cbc6a3abd15b326b50f848bdf60ce3e9b2a0367b1eb5cfd786648558993ab73b15118ca454b6039599e4a3ab3fbaa4613a784ca469c7178efac31ad1cb17f14d8385ca118d3f4c3b3caae9a06af9a1d0a2152f37b590ee02b37563e28bddf297928764abf8634d75f67349efb32ac322534ec7be88f045fe09430639e4750a1194f9564c5921a3578def5e2f1a95198bd2738755f64a81130b04bb396ede5ffae0b884e401ee8422e8c0a27e283e0108f35ecc7b7e27eeda1def0bd7b044935bb98a536c1e83954248d49c868df232aceeb5c65f272f9e38f37b3a3bc11d4dabcfcdd6eb7a37bd099480ea11132704407230e22c990c1fd795c375db6c362a95ed2840c1458c1f8474c440cf +P = a2b5b96c9c2cf8fa2d48293da10a95b29909ed63c27912e035a732980ae37d3fd4df5f9e36b65f458777e3deea7545bcd97bc6d05301d0838b5dfeab2638a4f90ab49fb61a75ca19eef7e60fb7e1bf7e971125aa899c32f5f8bb5fa18f09ee20763c9010b6133c733970dfb9bde219d7a69cb3fd1ce9ada4c33b0d5ebd1ae3301ec51751afbd7ced691dfcf605bc0e9b3be09a6613d9a300971000eaafc7aa31b7f2c3369e7383c9060abdde1a9fa583fc9d42b0860b550e84c0dfa9562697c2e4715b14920d8bb113a0e86d47b26d36493ee2abc16e7399ebbdc7a41f03dd079b1ca22dff2c31861fc17cdd3d65099b6ac61a72e865bd66921e7ca73ab9b61620ca54ac93d5946ebbe19b89c28ce07977110a4958e4ebb7805fb37e28cb3cdef4aae7b5f768765453ca33e208c8dc0600ea97200271bc60398f041830ff720ec6182f7375b6a4b88724a02557330895593f3ecd7649efbc7e4c171dd29cbc3bf1c030511174c751881f919f9d9e87280480d3dd757d9c0b72a425a6fac278b4a2e702339b0d327f36e08f289b3c4593d89986c6c8f159f9260f69171d8e64a98a63448dc2f354ebd171c368d73243c09c1726d3661624781c93ed98b75824d5ca383d23f29bde71611346e637df1123a864047abcce99a3fa3c9998d0e6bc5ee5db3828723fd72b50f627dcbff88441fda4c113b01c7c8957f898bde2389287 COUNT = 16 -K = 4ba27898a2ceec40755d9ec747fca2aa966f2ded3255becb2c3a65fabd1d809d -C = 18792b2c0e027e1465cb9e5f5b2d0d5de5572727bbfc27c2574f4434db7e49f65c3cde12be2bd43116d58adcd346acd170b6c689fdefe2efa7fef2bc6e8a33314334644b8ad4ed3a14538ab23e876b9250aacf410d6f47ad136eaa984b58c8e8f351ee7929dc14bc37ea26d911ad45ed -P = d28557beca416da50cf9f484d6a4b180805b9b50c717cbd29bc35c4c492d051aa3356222cdf54764acf6d1f17b2c8b33920ae0938b7624dbb04a61e09a823c2a45913884e6ed2b30ed6ab4368ae913ad526ad89588db6d983f48137ca74945d143805b88e1 +K = fee61929c633752a017dec2cbc65f987da46a3adf0899fbf65b603f43c6207dd +C = d70c1971c4a653efbdcb1d7ec09bccbc472f0bb606a1e7c3427c0547cd2705741042cdebdca425e6e668ab6b9c4387ed4ff5dfdfb1282baebc28bd9971a96f11926e2fe187d050af9399056cfe39222be00877b89cdea314e23bcadf9adb3cf5db742379bf478409a97dffaadc702c055f78dfc05d5fa1565f552acf88618ca73d28dbb8bcd73617af5e47b0dd35fa9645e08c113e55665d3aa7fc19a144d861e1aef9895f8d08ecc3a3257a14b313b7efc1b81445a42ab343aed64037fa4bfde70d25127477e4503329a31d34b127af733c2ca492fed2eb849cf21677005d09edd86268db5570c13bba927800ae2643fa4a5f34464bc1e5e93e30522bca9b844ccc7cd0b8ebad733a886215b0996989ec92083c676fac840860b37edbc7a9b274a53095e3826e6453157165c3f3e2d845e2457be2f8f6834a78267280e44b6a3aabed9de0dac095c7f11142490d29793b24b28686c1188df18ad5f1e306e5905041fb32921177ae7f818e02275465a92850da0cf213aad325b1f5ca85e73da4ee28ff92ea6de054b5d07802acf080d0a82be871262540b4de88c6d602f25c83df6581984ca59304a3765d3c209c0701bbc5d0b9cc84974e7245733dd30816085bb8c7c234c63d2b44fcc9808f3793ea702ca82fbf3491460f5fbce468fbe99687cb0a2a8cbf09403b21de76fd47e3196168f571a1f612ff2e7967bd3e3441fcc4878bfa5a6d0039 +P = 93f539aa55fb7241478e27781620759f3934e5c75bb2e8b9aeea78cd641349ee1d45cba04448bbfcbdf69a238fc1f5f750a743282d886186a26aefd75b4d9fe6360f430358543d68e051941b9f49905e6de4a6f423f2016c0f0942219de46c9b1bf532d9b63fbe9afc18209ceb180cb2fb11d4ae66e83dae7dcfd352559d7f04c5c3fba9fb6aee6b4f57c303d922a48fb10a86e330dcd96e3de63965611b18ef2a3635f55b1e2b003381ea4b0a0c4878f9b8942f1af459c25827cf7272c42e9b987c902bce8bd3e466c4fe63d0abadf87c34ee1a690d1cf39c2416c3580a06b73b6fac1076f372abc6c3b762c804a926ca7b25c59851edd4ac80c2d75c1293ef54fad90c7df82455ed69353da949ccb02f1f52a530cb9af7d7507321a768b463ae28e9180220df98dd22d7e8366f6e69517c1b7ba9a0a1684c0c7b7a31b9dafc56a5167a00a0a2c4f8bc414fdca4da9aec0ee27e6651402b34ecad619af74d757c49f21cb4e8ed8a0c73c2c748247f1cbeba49e59ddfc3ac21d349892717802bc10fae0901d3f29b4384868ea0592bbef87378274cf37dfa0c90d1d5bf6d6ed2431b6f11b1bc7e1fb560b70ffbac09817ff333bf08ab30e9ebfcca56ad364e7abedd204e2c046c2cd5a7374daa1b7f8f00e58f4192179274d3670d26384670cf9432d837fec6568e97d0edefc1faa27f05bd28705fe8f174f9de6c40b0486d79 COUNT = 17 -K = 2e730b0e5d8e580f9be62c1d465d16d02b1f582627beb0576cba22ef8e8bd12b -C = 3911501d7db339e4ea2584cbff2615d8089a57b3fdc0b79a4198d74ba367e085ec48935c675f0e482a1c288c5c182a8bc83af5c8ae354366ef2f44ea69a899dab8e03165206afca528909b22b0f975fc523c280a5f147f3fe857f8dafe30cd9b35244266c873ff086a87f55b5248a191 -P = fc93017013dbc24c0aa4f9c5ea8f074cf5eec3285f76343da33a9818407c450e2c947f0949f40e5c6113a88060dc67fb4936afe5099152b90da374753a5cead3abd0aade0bbf780ba72b1521adba5c845fa3dea150ee04608d478931eb3dc8dfdf957e6812 +K = 985aa2214d4de97a4a5cf6cf6454be1301086c8980ba9975bbc2e1922dddb340 +C = c64a81c0d2f9990be55730ec3f12c339273d517960ad3a6b888200132c17bdda3ad2a2322463aca9a08a25e28f0b2d88d71934a6e85db67a1aefdda607843a4acc6c18bde7d19238b5dcd4ce6b8d07c881429ca6ae6c280878781c18aeae32f02b09a59706de614b62dc00a7bde7208ad82a31ba54dc2016bb1259ea1c095c2dcda753c1da366decc52b5bfb597ad1e93b66078e36fb7047bf986bdd062369ba079200686137121c8d52bebbbf4a53043e843b9022536367dcdd1e98d2ba3b3e08d7640bb1a33ec380d26b18cd21fe7a395d27460ec3d62f5be14bfe75579bf29b5c0f71b87392083d53dec7cf9214aff7a5c4a4fa986b38a1bc6cbe05f948a0fd9a194d6cd6170d81c57cf562f55602ee3ba191a3ad9de98fcded322e0c45718748b43af39158a296e254786f4f791b593f1e5f6afc04bd29af7300b39cfd4281c6bb8a0f1b24e6ef96db682a78a982f3310ff897e4769b43c404aa0abea0700c15a29a1d73c124eb37620b77474b5370c0e7698e9ef4b32c0d40ef7989dd101d83ca4a03a33aef9bd05451e25cc9de3ddf2c3fd3c75c678ed4bb3d2e6cc4bf857e14cb59ecda17db84ba43de7384d1a9d30bd9fea15b3c67d7d48bec77632357dbb790663514372216ead8966d066e04737ccd026e8c38f0e9e0739802cd30d45be1af2b88f460fa74b4f001ebf2e70d3527357e2e42fac066c2b5f30b6296163af871c9423d9a +P = 67af0e2386e9954c21bc4fcc80b1b88d976b1072a50909f314e9800a5b0e38992125a194c1ebe7b88c12c453b095bcee0b8be77e7a79302ccdbecbfd87be2a7f9d935ce40aaf57ce30f29f3e0e9f6cbbb7d724162b97ce4a5c2e37462ee825283d847a4e37b33b48f0086bc9d068cfcbdca5978045d341342f7ba8d8dd071cabfb035801860cedf2c96d6242f5715b9c6e2b0f06b26137165545b2acfb098682dcda68e08dcae41e75f69803e73d712a1ab80b3c0ca3275880028872571489ce775f20881c545502d8c88228551091b47933d1cea4fd03c494221d5296aba2c4db313e3aae410b5f1169de1b9486d89aed3140f24308227774ee8d311706a9d88272bfa462ba60a86d57945adb5f1cb86fd6e71854de8b5379aaac2c8fdaad88cc370adfabd9c075f5a2a5a88e9574e49827a855e8dfb8057744540465d497229b7d9315d95b7710f6be199215224755155e0f7a37708f22d64c1842f006de0722c766a17e0cbb401a12e31bdb8575bc98752e31f85b66370a7b7a24763fec8fad4fad1c4c085ea35c90a12e731775e6b0ab659b05bb9e794ee78e9c23d01f58639b92c32c6f0d7433a4496e82b6791a602a9a8df81d62a34b1c0e81fe84d8b995d9096fdf1306c82d3af8f73a59caf4670d29e28473817500698eb3997c2cd8550868845ef34e6e93a3b9d04f11428e938afa03b1176eb6262ef4f88f1eedb1 COUNT = 18 -K = a5aec83ab4318e481a6c357637dad21313ac541742d3fd1626cf07e48986f3cb -C = 7f373e7d07e2dd20bf6d7477fe99831b41a64547d754b00ee4971e68280e4c34309e2e7190780fda6f646dc85bfedd111b7e35cfb835f2631e36d74801f942f777ed131a4a852bec760dbb344c3087c40bb5698136415171204f9bd0edd10cef1409555cc0dd9361c7620ab1ea8c4fb8 -FAIL +K = a5fe0527a97631249a8b05b2a1e010f0a0ec6960a48cbccb0dc15625c6d5052d +C = dfaa23b4cb28b64817908b5be18b24134f6342cea19bd04f2cc315245b415569e3480279d9f36aa1904f0e417051aa002b2c3826178253ec163ba293d180a67860b397988f7194cf48b99d02ce02266fd4380ef78f456249fa654b449b03e45a52396023d7bb17ae5dd7249ec7f609351700a376e6d4bc55e7ad9d3c4273ed7268c6b1f9b40b103b2055073db6d35a3f6261d94674d7bc882bc02291335156845e50fc8767b3390a99da226d54b6c9e96a344e652beb6a251bc7a954fa82c73a6312e060a3882bc0084b01e48520848f72b8b96d8efe03c669039e5755012b4ba697d1057f1fa8488d41c1e68d2577f33264056fe3ac0afa1293a059d7759b4d12549027dd86dbe8b355ba0fd986d19be6649e666e426099fd285817e5b22c5e76263d3b587b1475825b92c4b9e14cf2b04987f5bc11433e3b67b8c60a6130cb6c1021ae619b19ee7a489f48407acd08fc4a5798ac7df3705e914f4735d02f2fd1f5e39e9db370a93e7a7b4f2337374af69c8aa9cc3f4567c2104dfa2bcc7452a4556d0224a565736c5f834fb6c29bf21c25be2aafa3d562c63ab7b4762aa55fb80d9d64247cc2468c708727274df6c7fe8121d32a0615a12444cab562d4383f2ea1ffd165b76c74c908d5230d41a86a763aebac79e5b8f52164238ad0c42d14cfe54f33194d8c2b0baab4e25efb445872746f6938a9ccd2ed2372357cb7a063e9a39ac6b17230f4 +P = a66dd3828b0b6f77755572b40ab414ac3b52e1c9f0177e4791aa8d7bc8af51a500b5e64e08a11d6cbd7772c38d36fab8400d18fc0fecf1f8edcbceedba55fbb82e5b69a37f5af62147304e9b51ab67168e9051122cb53fa5b74d9a9540ed18c65158cf3f061b51fcdd65a7145f7f0901aea15a1f30d624bc675d9cf65c3e841dd1ca5ff203bc4570f8b1d7a502259fbdfd64c68e43459e9621bdbe2edf10dea5cd1da20a228e78c35c45d0a985d00dc641b2d96aa5e095fde2c4a8ca8bdeac30963c845dc11e7e95bf1f8ef8b86dbe145028ee47405e3d57eae98a08092b3c587f60c957a95b7cc16146af789a8a3f0beca0a9799c92f54fa1aaeb3a5654f3b699f3b0ebce93e456a7bb424ba5aac06d9807384d8181b04997655c1c511064e3339b8291fa4b6b676bb93aaf3f0fe266c36e1251769794b07c9b1b9213e18b83792a1db550668d2a9aefcd276151b3324ad8c50506cb762c3055eb38d3a79720de522cfb41b6dd4ef031c4672b1bba7df2d0e2064ecd01384aa40b69b586fc506d19bd622eb8d291c9c385fcf83b9825e745b04e4fd040f8186d21c6f975475acac89c1d4e32dbfda8d0fdb656ef5c15f2a3bd1db95a93cbf039ded5fb9ff0a51b27f3dadc55843647ac7a72d33f7559ba8c94f2e2cb220cc9919b97afa76a99af82a96d3fd3730a2110de9e8c34d8d6d5300e341a0fd6b1149a3a367f2c7a2e COUNT = 19 -K = 85ce67eb76fb46803cbe7c2b5789fa2b25b0c9b075ee01c9687b06d18d5d0b53 -C = d962ad663ae801c27d2e33101eccd9feaf544664dfe618b9edbae9a5407de67bb839ba23d8dde2987e931ce6809f085b5728dd249995f519600d3b5d46fee288f79e72c12ffce9715ada8f795addb9a7e3afc1dfa30bc25ee037b6a793addd175106f2babd323b5a1e9d30c72c991ada -P = d8584867915700765370b1fee372087f6b0d663a246806b5c49f148bbfac725d79e0d272f0097176ccd2ef1f7620f5d020c11144017ecef8d64b7d32b3b635a48439661471baa3543b2d9fca7898f02908ef35a1799c1b9b8049914e30c6f25996d5bb52d5 +K = 189002827709bdeca810e16e0b3dca39bbf7aa589cfd84eeff8bb349f261c979 +C = c682bbcb6e1f38a4a7c5a05f16581e254c79184f9b16141c887a4895c566933dc3593fbf2cfe7c310ebd6f05a33593c5c755a60cf3eb7531be5d6a8c3ca80ea7fc6d344396361df0bfb1dbd581c3c4b27dd4142def39d03e0192fa7136ad42cf48071cb4aa763bc83a15f96af64ef05c46ca45440a6a5f481360d04b97f772b2d1fe1b067bfc22229629a50768bea5f145d027890ad2ef452f0d2169ca57b0a7b750277105a358f6499f39d1ab589a4b0713859098db1e9a3cfc61b31a253d64a276851f37e6aa81139db41912714468873aed018cd8eeb145139865dd9084b8e7db40adf07620dcd77081618203b2c4db10552de58384f9f46aebacb7eb62a835a9ee6390ce263bc2963513a469aea472654caffe0dc60496b948c81b5d474821c3f7ce54a3f28673329b38bc553e1bdd954740736d335007d2a1f63b1c8c4ee25f36b3293bcd36a4f396621923b83105294693e98e742e9243d84da24c0567c31cbf381fb6d5401ad017ee7231398cf05a99798f6d043a27983ab89fe1f9d773d4dfefe0f6f050a6211d983aafd82995da8fe1f16cdc8ac0edef76c40b82660283488a9e8aaa83cab9cc120d131aba8a7238a7e6c1b9e8d298b074a2f68555f9bbe7d91d0ca2295aea86c1126e42929fe0392296ee12f5e14591d5b3d05d11eddfa7fbbfc7b605d01d320b0b648b32c36c6e3335746d78c1b5f4b2b532979f2cae9143ee26ba7c +FAIL COUNT = 20 -K = c72c4e4c8c1b28e1b70c56201d2f81ee08d6e55f9d35203986557266f93b4f90 -C = 26055de552a73a1580e4e394a792aefeebe436158aa94bf4438726459bf1aa1985eadf101e60e6f51ea4884637f6afb548fd077dd0d506fdda9a546e8c1e60bc2de1fd18a402d68f7139c9689f1884eea1e5953d92cbddfc2af096a7aa4c89c1867f9dcc6ebb69b9e71792e489c814a9 -P = 45a1b7f42d2f1628ce7eb813f41eeb1a63abd9fda8df00f8ce7f0f99cc5b40216ccb64fa0b3f88f0cb7f538063e065aa21b93dc5466e47cb17109c4b46b564bed924cb5a1218fc605d07c4a5182e9ec3ad8fae6e6c203dc216a710bdc07ba83942a55f11a7 +K = beddaafd5de9cd1a9e38572fad1b12f663114611cd0310c46352185003dff785 +C = 180b893f3c368fa7555bd1164634b7e93d90a38738b2e62d9b5fccf41c9a3c537ed90259b9c84d7cc8136bdece2ce6dd39904592a7980eb80b8ca2e99f80732875f003992103b80745a8c43c918259c2ec99b2150d20a0cfd476a65e83590dc21cee14b2cf1f1288bad19d49d1a0153e0b66f7215b7802f16eeaae2f1c9c079c04550537a2e33f162f2fc27f4eaf827030e466771974562f155c7f67eff85f683a95a7119755efd5283102b5ad824748da1c8332b70a7abb33f8401f0b50513cc9980bd2e5f1d375a56c892cd1a9e28c1f27f857334774d8f4b0e57f0ff76f83d648ba7f57581f24f21854e7fb10cd5f2e643d8802227341850107f2ec04d4d4897b97e2b6a9ec1923039c9dfa06372fae513f072be3cc37b7eecda100a26fd3d64ec9b8d7018fcf0c227d868e73b53580bbb01cce15328af7da4412e8e57bfa4a3d9ce8dbda335c7035ca214241900660b6ac2ddb5d9b9576c8e6994e7de1663eb18d65339f534c2e50e32737d3eb008312af94ae28e5c1157aa4213d80262900fd6093525f9baa469ec87ad6e7e60d4aab39ffc137044cf5ab9f35c56d9de495aac0190db3961fa9de707ba50f307966a38951c1f28346178c7cfb6092785ee0074b99c4a902e7d4a01a3d8e6d64c22bd15802a6864c6b3b3acaf35803b5fedeb5f7d22fdb740dc8710e7818a63880f6a6475ef010eb4cbd8cfee5d532c646846db29816d980a8 +P = 661008d8bc35f049ea5052ad2830dbc29bd73023173386d6b9a204f292942c757b9cf15dca7397e8ea8c0aac0587726270a34ce5260dfe580e1623bdd38051822caa5c611b2cda6acccfde9e832280067b2c542a4b510c4b55ddaf2e9a00364a0a5478add9fe4de5ef974f309b8bd57ee9cb23fa4098ceb062394e5d03adb747c028d9b14f27cd1c4cde006546e25cb47805526fa49dddd857bd638308ee894e2bb8aead6106235d8858cfdde5dfd31742516603b4de7e1dcd979fd33ad73dfe1b37911b54299e20818846315c77fa2efeaf6151e28c7753e2bc08a9d574d4d4c3b90cf411ad411e79e680763a893e9e8208651142bf6792fec4de9ca4a17318399eba9fd7bd67acd08e5a76baa21717297f60f43fa2f315c6e4fdf92b45b6b50bedbfa5b1d5dfa4b31152952a1c0ecb003de42b83546cc7662c4e213932acbf1ccf4b1fb40690716169594885bb3f10bf7b6a00facd86c694efe9609410c6021d9c9d8e0d1dd903fae93a09333f760b0129d4c0bdae46e81e264c6a6db63678636f19cf1e826b3d0254b3b948968b3e5d498be9ea4850c884b82be7d1ff8ab6bfe4b9c6eae6a5cac9ed77dc60057456018e946d7b28220a5b0ab16e471d283a43f79958de89aa4ff4ab0a0e5dc4eab462b02e62d7d474949fb7f70cb87d2c67080db179e544ae6d47a16ede4117626d53ee133cf15cd1be164cd1146a714b3c COUNT = 21 -K = 3b2618aed7221c78a1b396771444d33bc4e896428bad68968a4e0093927a442d -C = f408e1de85e6078df99303bdbc0ba3864d0db02d792cf2d39d194bf86093d1392e7414f6ab2d03b0c89205b4aadfa3cf3e49bda67be8c82d8c2b6730140a554e9d7a906b3f1236e3ccf87887c8d146292e71e3eaf705fb66680841e91004d7e5718e6ba768a5f421427ec937a6f46a39 -P = 9d4f89e41df7e5195f24766ab4d1faafa2ee5a9008af519b824c8bfa3bd089745f321281482e78c178fdd6d126ebafa00e22d5c75b54e18739571d8a807560cf9108fc6cfbfe51ee7f4342e260abec353581c2da25026c21cb318da6b0954083904e318075 +K = 6b76f308d6e265a226ea791685b3694b8466e0c66a8762afcaa710a6c7e8a83c +C = a963a94cf4cf43d7085493aa3e7a0ba36b81d261daca2f44caf2496480f3bd3114a329d5ab45ee42dfbd42574451423f1e1c5a44aa73bff3654820cd5a0310164d79b72563eef996de7960ad3ede440312bed4f433d103259d85bc535bcb6a9a4b66a53321dee0834bc553fd3c097006a084e87538ad48b81c7cc706f0e2d83876433b49641009498d1aaec49986798926c70e66eda1652a4e85dae940528cc1f6358d39c4f7e5b8189aaf1cf9c26ef91fa2f31f25b900f6547149734d0bd43f1781b905373da37473bf8b7d29b3d3f1c6c1c9804fee90fef30ecca2a1d46bc2494c37a477e188efb811983c1e3abfe6f801b4c8cad72033c350f80adcbb60713c2c98d3ddbbdeb9e2812a42b606ec8f1642fe736a87857b83f5df2c59b81de0e7779cb4b7c22512624801ccfd7368a7e6caec8946840d01b9460f92bae7b338edb10baa11098983e2c8d22032810dfeacaf7f1bba99f18855af7907557f550a1ab89045c38e0296a133b16e81c41eac88ddfa2c4c7887b63d6814cb650432727312574cecb1a8dbe76b3d6b826733e6ab1a498ef48fdbad9afead51743c621b379ca45fe0d930c95da6a4ac15768ceb297f45a83f21b40e347aabece203b41eeb3fdee62fd8801b2ce4e0a6b7061bddf700e4882e7d901c00de27edf34d32ca79d9df59346feb12ea6b6dc688a6d04ee7519e0d2482dc8e9ab93a39d2c553b4d9257a574185bb6a +P = c54406e0e36a7ee484ace9c19f7096a9d0d4564c400446704688f982f6996444c373e0004b9ccf7aa79f0afd3768790544a9ee3eabc3788a116c69da5a0a800ddf4fd52d62e40e70a8515e9b97792e8f733c0148b83baac9092d6615fa234a0e9be56efc9dbbdc5a73d7b8ca110ddfdf05f54debd3504028bec8536d13f4f976c0936c59b6a195bef5ffcf320d8f9881b24766aaedad14a3e30acf87b8d58da0d5b3b4f196a1762d0cf264e8cc1f063b9ee5cef190e489d750c46be06f4d9de563f06e5eb67fafceb648a1a56897ab014d9e304f9ce4054205568328df1d512bd27795dc04c09a611972228a82bb672776b1040281ee63d9c25612e505ba9af417994d2d718166b4a20a8b9ac8d1025e32f03be84b81bbf2f071619872e3afda13564362f2f0a9a306c7cb340352f4b1399e3de62b447bb610abdb68fb0b602f5de9f116f6b5a0cda4cd81bf97c1add64a3b57d22393e1051bf405b91dab4bc1debcb8e2c163622f82a20c4d26b8924831d24ddb6ff3e9fe3f78c711721f4e152cb4a16bea9b26fa0513ba2c33be21b994a50602cc35cc53e84f1b506b034a04776e0cc83ef9547a6987ef59a512731c1fc9a92765bd8b1d42f398ba310f9c222e181957af7257ed22cee2b7657c0cfbe6ddf8431685047f60856415120267edd11fa059406ede337b7a5f6827a032fb35ffb15128411ac03e5b962166ee4001 COUNT = 22 -K = dd6bf4549808f51f99a5c91bfd784bf0e0c92696acb68f73f08ba48ff57970a4 -C = 9af8e9e6d519e4bc0d669137326b13bf589e807b46c13dd06fc831fd63e6a0b87e96f356748350760c9fbda634eea8320b35df4949bf63f5d50d7ae8102b955ee745bd3bcbd2294d49211ac85503b4cb15871ae877c3eea0da1a33a95cc1712a6cdba769a963c219f233325774ba33da -P = b8a7d395ee28fe080eedb11ac16ad6d650a51ea242edf5b215f77efee3296d62cbd8f02def14d02fab555ade23287c4cb1fcc1350049f7016136f51402e1e6f80a9153e719504bef5ef9e9b8ae7b491bc7c54c547ac9570ebfe3da7678501101f953c2d0a4 +K = 79010ea882bf2b2a504055ae3a138dcef93b8c6e4609a5305411c089810c6864 +C = 506d96d2edf78a670685e45e4e22b48d063c93a128fed9a889a276a42dda8bb312a057cf7a70b33a24a676ae7f16be3b2f6b2a98c6d1369d5d79e6a3bbff0848486a580fd692d644332abb8c7fbea0924b61fc4202bd5c00856ebc7c4482289f8ab8061cd665e0468f930a88a3eb14fa6492eea2272faaa637a58bb3c617871620fb252ee12f0199b603af9985f4c458fda9c9838539a8b7795fa503666a83665ec949de316665436f55dc03bb46db73c2bfaca519cbea9103b7e1b74fe81ef6069f670bff521acc3e53d344a57f6a78cb36e8261ea7c456d259003c47ddcb244365c07c4e069d342c3a332f8eaa1b0c5911f0726b0abb39b3cac6ed20ea368f7e07c50a8dfca2908a9079bd18278deb0b0fe9c464b4ff611746deef068ef3bb9df1ffe5caa97201bb396591a685f7ab5066c1748d5ac5f57947a42b4fee5a32c233f8fa52e8ebf7b73c816ba5dd3599ef1cd8235ebd167b8cba779453a27d6b0d9bc7ce5d2d2fcf9f5033f979175b50a60dd0a58fd3eaa94963aecb493075e59f00ae72594633fb91d19f30f083e061c5525daeba63d1b83df9dc7da2b238df6190c67a5e3c0e7c38093a0188322186b2e886c4253dfe9502e765a88867c8640a84787b01df6d5b0624dfa804ed240ecd38a7031c60dc495e339e2b064e29365b7b27ae762108129ff899853446029244c52f9bf7aa0d846feaa9a70927a60e29bcd2b7f5253fd7 +P = 1f84e62c0514cef7a43d46f842ec6d722f9b6467cf2c3c3b439eb92aa398c2096bd13ce7976071023bfcae104919a23074a3b54dfd37954b0c69b06fe824649af9f9baf3c7d53f757e6014e70804f7e461056c19848c95d3b4881d062b5903116466bb887eeb417cee6051f2ab61b5042397c8a15efb121c44f8b7f0b6c4c4366c8999548470c0d918a49445b0809de2399fa83d78633081d4477139f7337dbd3b348fba9a6f741d28fcc36568fa1b2ab514b69fade592acb4598195eeaaad47fcb09ea32fcedfb06f49bb6261321e51fc13c28758138bb1ee084aedd139cf1ce24d111bd89f3c067984a088209e7dce6c626a0c90fe8ed753d648769e7838e011706f248ed4dab9acde3aa706bb44755ef12f00e091b221e605c7d0ac6cfd506ce206ca848a68b4f3418689f918b325738a591ab6d5b25ff29ec3513a5efd1e31d35f998fb4512420f13f7bbb77eca365787c2f288717f3a5e27d725a81c1042c5466b5e8f34d8d3dac9f3d8c696c573ba19d4b59d45ee3fd6976a2667df59509fcbeca2b2e31b0f80931f35a315d2b39384258165476b3282b78ffde2ed5c7898927b1257fefc72037cac93a23655efe2b241b66f7295ddda7a9b8f228bfaa874b30316e2f973c97df42b1db4f88a96485189973a812c04bf89ff91e7b918c903caef44d9cca3b640bba9be3f565c9edc5052796b2e36d2bbed770dbb4347a COUNT = 23 -K = 3207ce7640c488d2c0ccfc394d7c4c90718162a2d10581ec562b04acdc47899e -C = 799cef2f5d34ada2bff8cc11cce8826ace554ec2038b8da01c7134bda6e23e3ce8acd88c023465422d59f6a714ac8af9c7f1db059dddd497b72795b8d37c7deec5420d4722eb21e650491c9559ea55ce24e93bd480b8ccddc54bade24269a007ff355455693e55e4eb013cc836d26c12 -P = 09b203c60449cc194449f0a08a80708b4e67e194b8041c75381e18c14d2d5c3752cca3bfbe9dea26020fed76e9e927c3483807075e4445db1080f27ac96614c9dace775bd5a94e8ade459fe9c9f72b2df5807c8e2aaf08d675eb89af41e8f97faced825066 +K = d5f104616bcca579bd37b4faf59dede8d2a01b2a4655fb0c6abcc54fe431d518 +C = 711e6b5fcdb00f7acffc6f46222532c9f5a739766557c2da0e1a12f905a8caa4e160a84542da839fe1658518cdf84711980a5dce874a9cdaca73a00ac9085e34fd9767b12cc54cea3452c76a59a1d1f9415a0c638f28500ad89f9b365a99586ef1603f9b1cdb55543ecb0d163569f37353821f002bb300c7e4dd94b06422b5644b5801d25c716bfbb43a3093bd26116553064f77fac1b41cd187a2fc6a908957af3ac4e16132a56c4393bbd34ce26d05641040b5f5124787c486f1acd2963cbdc54356245cc86053f4e2257eed65476d1ac3ee6674ccf7ff1ec011a441c70e7478c09a2a7dd16290be326e2bcbeb106e89bdce6a5e25b9f8f289181fbe9e2053fdb6b00bccfa525069af5387439a119daf35721bef0bd6a0b516a8eb244bcc2a5ef9039c2fc0f3df59a0bf805963e30494f3cbaf4d29f7e1c87c8379acac86b058ef4d9cf8de9e5cd0813b450737b94cb89e464062564e7a7dfb999ec597c87ee476838162f2befc42c256dfada55218c1e1c06260615eab3e77bca9e5b6292e72420f994b2277b3ffc2c0a7d9c7b7ee4a1447eae452e0aef0fb357b54a9bca4e1f1b2a26231c7e5053e0688413cda7cd0723f7199f8480acfbfc8905b3e1e5641dc3b7caced25e3f394c51780f673f82b74c87b206bcb0152e7ce9ad50f1fc312b2924c6b6ab2f9b36fd22b8f6fd55767aaa54b8ae996eb948c33483d920c572be3f9fcbfd2e6e1 +P = dbef4a3bdded46215e3f048b0d39c818027980a32fb4d9e6c9361621c46c4b50526015206b3b07c8ff3b381f97e11fb7c227e29f7b2e99dc98b24bd15c8ecefe4594b012fb1cb181e093107a76228e0bc9618a1805fedc141d79b749f40bfc79f1265c1e76567115a1e1a08afaea1a7586edff3986fed0c3ab1c2aff1aed6b6940f1015bceb6ecf2359adef2ab2660eaa505a45a08da0c31fbd9a13e694450ad4bd8b2ae9ead42d2c66984be4fcdce41d3f3e1773304fec5279cc29b937a5c30665aad93088d3efe9fc6a4ec09fc55df201522209c25cc0ce39606b38bd48cebe79b48fd3724538bd6f89933467640153603af699b459232768362672aec15fa0009b4e7c760d24abfe5c370def351c14909948a69822f29e70ef24778af82f996a6db075eff49ccd3116acecfd8ed34dcd4f52abef76701ea07b1a2701ebdf5323b73193de1adbb43a20253b5698aeb721b8608ded2b416927ae6619c3206172275302591f6d4b726efae897a9b1241b713be303885c6f9205320c1f48f58048c0a2e1b2432fa52fbad67604b75f259f4f9d7cefc2b520921437bca31ceddee8578ed7a6dfca5f991f3a5fb60fa322091e572e6c9c23fa5f4dd06ec40539adcbff7f7a368542c684ebccd6e041dd63b814a51ccb8bbbf6353668372144ee50babd6adef2358a9e459dd0d177cbd80c479363b43d24317e123e51fc1c177b046 COUNT = 24 -K = 678778a03e95353f943c33e7ebb4a55cdabe998d0718ed52a35c60843b22d2c4 -C = 37a21c6520d2cca1e5c4105002166fb6fd5d03db5deb854f95bc041ed40b575f20d191cdb88e783b4ed301bd369a4e99bbe1c666d96d08c8aec7c726afec245edcbfb8415e9c2fff3e0f16299ae170e35318eeccd342dee41de97527827eff27d35e1028f594d5908aca8c95ce0c0464 +K = 2ab16a6411b922ebc234f8e3a00c5cec65514d66fa92b46c3e6d6c53c65530bf +C = ff1b4ff03561895d57c400a18e431a1bf90ce54042a0823d252bf2e9507e666d2e88d0f81b4771fb8f02b4b7efef092465263514f48cb2cf79645e35783abc800cb66fe8c82705810f36e77b8d02260796f4471f006a8d475bbad593bceffee1d21f2d3478c2240df55c7b401462b78406b5cc5effa9d99e6029d92d2434cb85098c52cc52753181aed54f2e3a3fcd0a7203d6c47f31eb3ff88b9231a01b2afa2631b307c1da040dd3c23725c5be88f3759c1ec2de9254d218897b6ee58f49d13fbaa9b93363f0e08ae49f5094141229c2c6b1430bb225a7977d8b909114f3a65b4fbcfcf4e8102b69f3bb908311593262cfac83d8337c9c4f746c1d961a7cbb09694e0dc8a2895b85fb8741ad86b21632f903da4b912b13b10d845676bc65302cb6edbc88b8618ab8f8a8e87740495950d49c0548ed0347f95e32dbe1cb3439e24d3a12d54263fb710802704a5abf37222fd6b5ed485f13abf82c96670bea7a7211623c3b3f4c4b9bf0a39e39770aca3b86cf76eff32aac3f52c0fb31c3e538cf3c22fdeb346233e83727af0391f6027de2c710454c7571d38afea031dc9ec94eef7a4ec3233f85a0c999cc586b026c91aa752fbf0d8178d78b19791eead934c4f15885e93ff9db411b1696113bea77bd49380d565b94dd1018afa68e337cd51d44caa2ee4b12e73d15df8d9720fe3d09c265a36e35d2bb3d2289a06244842cb1497f551a7d5565 FAIL COUNT = 25 -K = 3b0c00682df977226047195585c0b459ffd2be17c3af35b1676d8e8ecf8d6e93 -C = a122ec97176c3043f6929aaa7fa55d79c482169c81bb91701a090837c8dff55052dbf0593d32dabfa73d2e1e0b987e0bd5e8e6f04d44b06df514da71dd9fe91ffa85b885700395a9ee3d910727efc5decc7ff12504165309cf55347f4d8ec3fa8851c870d0f5f514c9b77801d41c32cf -P = fe0567df1302f41fc538b65572137bb8c1d4ce4a17df4403819c81723698f075ee7aba93d71ebf958db90313c406c77d2ed05e841a13a879683a33845870b0b743226cd548bb3b41f58ca547d116f855004addec3742279418cd8fec31ad4e98ac0299a824 +K = d3e297733082ae4cad32906674ba8309692057650b0991e626dbbec3a25ec15f +C = 84faa04976c499c473d514d6299af39a55e445b68fd7292d116228f3c1e6f700583eb12088bc20e9bcae15eea610377422a8979a4daa9c3696a98d81289cef4de414e3b84ee11e4e7f663cd99fec4028c41729e5fdbda52cb0fb36b1bd1085f789b99e07478ee803c5d9b242fbd2010a0e391feb4ae37f4e49dd50950ac2bab3b90b0b60caeac0fe4895686c58096e012ccbc54180ddfb6c2e566212bcf54379cb3dc3876679a0aa90b4246b9562db7df94d22d120cd21fbdfef8461e0c657fe9a375c35fdc3128c8264316893193d92fd2c2430e5bd02e9d2825bc8f7b1dece31bc1468c242184111a40744d38bba2701d878abc4889573937a6eb4259bedc36232d428486627a90f6c937e9bdf50358fdedf7de01310d61ecedc3728e1effcbffd25e88d7ec8a9218ffb5a39ed3b5a3b675160acc72f554e6784f3911125852ea8bb736ed64f7144a17d6af4a277a8b5286f8e3a46c54d215d32add9a7b335515ba35e5d66bbaec9736f2bfeb25f28c80e4895b0d6f6bf9db1485052bbd1ec8e05460659b691dee8d918a89145e98f289e038938453e515445c5962a6a750dd03d60fd406f7688c447cac862a1a5bab7ae2990d49cb2ba1f4574a0d8a41d2be81d93d5d13635150c8fab5d6cd6611fb18d2faceeb9fb7bc5e5bef043d90b52ac568c88c829ae08aaa20958b5ec7579c3047f27cd382353b3ae719759ead21d0cd6534b9b79b137 +P = 0c784f66a058a5f1f3c0a00de90bcecaf3123c80c2d460c908849c1e7fdde0e3da11d10a1917103eebfc6ee18767874b53b09960a0c5362a7e17c7d4cf233911c2abe90ca895ebcf2cd1a887c2e792ab6fc94849725f6494b75b46b97ea010da2f60e9b5dd9a1160bf02ffcf3ebb75650e9d243df6e934c0112fdd5b39d4a271ff979c0253a6f9727fb351331076efe94b3350547fa217d270438b7fa9874fa949721b7f2b38ab2891250ab7c5fcf02e2e33a8e97e1b26f5b9dc4eacbe8243b032e2c7fd0d16deabc96cd3012418c08890acd99fa2ae5f38fa4f4776b0869ff64d60585ec76bbbd8abcb6019cf6f2dc69b595cdebb205204f52994f28a926ec6701e3bec35efebcfb4908b88a733c407b742a8d6f8b9b6551b7d83a333287b50ec339eb8a062e6c3ca705c8eedbb31b642cc46afb583921151213bfdb7f8f37f200ef8b7214c3078dc66c5781424505bd6ce70f4607aab1e8c2f46b9d18fccb1bbcbfa53e40bc7d614ee5de800ff140e3f81ed7acb8f8d2ff7f0dcf19ea982d7b04ca4273164abd9250b4393dc0e7ec96203f297a0ed5ba227a159bd0470a4644b41dceeb7d3b1c8a6b0eb5eea4259f146d541fa8d8e01d8fcc23d397ca3946f92460ef3db89ffc2c836077738d0cb29d9a890f0f0b01f5cb93b9a739b395fb6431c81ca5e5cc2aeef7c9b5a8356dd27813694e8f5f067de6f34a6b75e8cf240 COUNT = 26 -K = ea1ad0ea81d4aa3dd8bee7f387e2adf875af5404c787bae03cc130c1be1d6e1c -C = b5ea1305404435af679bedd8afb3e90db5503f535084a674ac4917d46059636089185ba3dc013e1cba939fcb021e34fc763aca0c6d219efb7b8b7ba13fa683c6fecedc2e87cc53b234d16f442829ce48e77b6a15409473ee52e928c6c415865eb4fe63b40f4c3fcd460a52ead6f99b15 -P = 12dc6c5f58c280b3eb8f0b19e76dc6d0c4942862bbb2b7c3e94f7e62a69f98b1b62b74e503088db3284352fac197c479296cda8e006b83e889b600b4b3c06ec8ad5d5e0b2e6c160cdbb9dbb62c40fc6f3f9ea3ab5313541446b86614dcbb94cbef8e6e1b5a +K = 82d18863c28848c9a73344313fd6aac88ccb5f3a123a0112214080fe9efd6e2a +C = 68b0a5fe585d971ab995446e754963dd5311c6dedcea31ad5d9ca22966d23328e61956afdeacd4d13f4561ed7eafd412a4b8d804af17548e6742f0db5c6aedf77726c1bab7720e5c84311aab94754e6e389e7846ad240d0f843218d7abf900a09d8f28fa15f40f36f85d06d037247c370511d67f96ad5709205e2ae19660ef183b2448da3ea173ba9b8aa1da10ac4df2ae5838e29b27dac8c189beea64db8c0664e2f9a55a0bb718c61d26e65b620fd73a23f7881de016188a8506ac6bb9a94773bf84554f75484aafde8edddeb821037bb22658a8953c8cfa29de23839af083419ef0b29bdf591380f3039b7c42a525d4a7d2374bbe697eb24dc7de844e4242c609c50c44ee996c6a4760a6047e6a8b26348e777e942c47ee5833be9af947631ed721522a2aae4c4e041e06ab7ea1d04968fee6c70a13e40c56f40445ae0db3f704f88a8c1ca33dc9bbc6b0aed1013c40e8da759e63ce773bd4f19507365e5e0d4c146249b6f8c27478e412a4445df92a879256ca3c1db54c81de0f023472bcaa5b114cd3a11015323ceaf120c4628579e0b65e631b52ffd31ec155e470d9bc1db186f8b50ca2988686c25817afd9fa0ebb424ad66a944bc61278c3cdc2b26cd4bc24779a75cfc5a8d69353f26bf885ff4c9e6f5868c1f5065cb5dc58cf519a2592827b777522a466e3a7e26cdcd74d29ebc80fc47e219638abddeb5ffedf39ecb217dd78a71734 +P = 0fc607801a5a4657a6be5b6d6fd392db6413fb0fb9c9ee17bdd46f0aa8110acced250e0e834fb1192082499a9680ec4ca628b5105a439c58b1a0ef280af8ec297599b1325fe4bbbd41190ad925e9013f296600f8844697fec7d2bd5672f093de80ab291eb92b4a6ccc0f2d688681e7318fc01a4b22a2512d0d65c0191cbf83060fd6217c5dae07e39f03030227532cc3d95cf341d4a14c2c0574f10ed8b4ace5e3b96d645143c96fda36671895a8fbce9a2ffe96711039791fe9e07d825309ac10f9286eefe8f0c8a5add33c25092fddf7a365bee1205262d72a0b81cfe5be4c253a95ebb0f0add24d9a999c709a902d0d438f8dcf484bfdbc9d983e201da4663a01353ce56f78e01dc6828d491c8e00e0daa2792724a787b89d278f00364b5f2313939f0626ed350ada788ba64fb4ae1fb58ebdb6f82e0050e0ad53bffdaa29aeafb802cbbbc5bdf519b58d1c9bf2547ab4ed308316c55e972bdd1de317327b9f18631e325b5b0f3eb9c017d3f89b9de84eb4dbaf838a70f436e56a498f8a3055a7597fc7b45ce3aaa8434469c151851f4605fe3e17d97662cf5ab811b8e2ca7355587a2cbc224b92d0a9ec9380418f62b30332ba6bcbc7ceee45d9a81d17841a48a955e03b774a8aa67a2de55850c505061d8ef5649300cc87a99ff5ec08c49bf12e0df407e9e4b88cc3efedf45708a2b9693f69329311ff6380c04656c27c COUNT = 27 -K = 569338291d6c624f855fd33148941898c353092c184c1945e13f9c9197105f8d -C = 81d6876c08c9e8744f542bf52bff7d3dfc43fd41d10c63e7507de2537f9b144f62491e79b219f95f17632e8322ec801e8ba0dd68f2ae30a9792ca68d236e79cf3ba4a3be31882f9b66bcb4c7224e03b2aee82716f4fe0ac90321c6610f47d5d8beff573c9b11ece7d97946fc37ac82d9 -P = 731b5402ed7dc46ecfa31a859c969e034c161ef54be4c8054f9e08e5246fb78ab5d19c62e24cf1b83c9bc4f6971d24e588531fe0d1b568b8a4c48136f0eec1eeedf0ebcdb8cec93d9d13dff5d7badb35ca0c3b92ad2e14503c3bbbbfc18a33f4cf6df6325c +K = 0c7d095473d128a26ce082c6b7caefa3785298edf493b3a7a74f393e4d4c3f59 +C = 47952364ac1196dd1440755a7b4a4d3401478fdb53fbd19c46edbe929fd1fab4a7e87c7b7ead3d56179adb152e42aa8506c2bba5462e7f333d5904008848d64057ff2ce2258bd655877f4e9fa7f0498153a246115bb1efd1467b990b7f47c4f5fbbc4446db93b8f99174fad6498885d3588e60e531eee298bd09a97a20b603a2c1a989478fa5a5dfacc748652dec6aa383884b552f9bf1eecd3bc22686566cd16f3c7503b9f7dd93ea8f532dbfdc1d83ad09810c299be666a616eab710a136aab268d652d43e52ede168e3e78d0226a23cdee2f4fe4c57959a446ace7fca1c874e77288f24e23a67afe13bd07ce13286a3d7d285d901dc4c27de0d1eacf79b9bb96a44e0483cac8ddd81ea19e4d18b62ba17023ed38f8a5484a7f11517a941e3652893e4fd82e2def455cad4dce1978610d989bdcd664edb34a5e84a215ce48fad73137972854a99fb656ea8677c813ecd4e3af1dc2e8c46afd7bc7ca64bec9758617fb67a989fe5f1f7d910364eff109fe3e2840f8ee4fbb4ce9a0c4e8e8242ec80a6540320c93bee4aaa4260c5d224c091d15fe6f16cd6bb694c093587605d77d627daa0075ab0321928c03a6025d3926b483e5fd5296ad203b5423567d5ce3a5b297f0bef1f3b05aad02ed827a3a0b8fec3ef77c87c3365e1776de63925231d4bf4033f6944accac168244e02607840a5f7cba2be7df3116f5e5ebcb1f030b90fd0afaca87d77 +FAIL COUNT = 28 -K = a6e9628661974ea7f3f4bbf776d1272b9f99f828d3db06bbae271f1c68a9b51b -C = 86df846634783eb21467d1c1a2f26243385b03fd380bfb526e53ac7fb1a3e248535c60ce4023b7d3e1a180570250cd613ef424100b4ff1c8de1305e636bcf023c9f7b2698d3626315238b83d2ba1a55864fe7b5522ba45ea55d4345b314ba962bf868b208dc3ef2a34c9354798c156bc -FAIL +K = 8bac07ec108370c9d656630c1d21a7b6a64bce5c9a9b1ec491e3d5e5bb36e7ab +C = effac3d9fc41af05489dd95cdfa24adf193bacdccf75ce6206db7b3c11542003fb39fe69fd610bd1e81a68db68cbd055b10f6b2aabf71669b91ac25b28c798361d21a54e3da6e3f195ae3baba6fe67e791b0bc39ea1e57f8cdf57e7542889db91246f46c7f1699b4c828753b7395844c6d187501bc5ea456b53da80ccaf4384365099698758721378e207a31b4fb6d9f315a1468a44f907d33aabc3492c3a2c02b1dd7f2d7b89718e2c353086411dae479e676b2747df2a6fbaf99a6df580a6e9dc287d92550d2b8161381212726041c07eb372122efe8563d46772ed5b8d9614e8bdba2ad60de4a8899e058db511ba8b12873a234a5d33a8ae491f3540fccd14673a1c66e99917eb49dae6ccd0545034177d02cfed2cfdc1ee82b59dff8e003c2eb53effd48c0add35ad533c10abff40e78ebe9f0aae8d571bbe642160390af86054287e807bba689ed71091560b85c0973c6e6273195adf453daf6f8031b88c6d074bc80dd9b9f3892230aaaaf23c8753a3235af3504f3438eeb346ac6a40dedbbec5731fbc784dae39f24a5f322ec3f90d41d1cc7fd968ccf739f70730fb65ccbca0aa4fbd6ed0e0686f45d8aee92b1f100600ea57984cdcfd599f13f38a10f40a1ad2822ace6c0d6ea76bdf22d07b5a240290c74b30b05f84abe1dc6af575115d1f5643e10a4a39f741d01f07ba79c4c2baf85d82df250ced96815d452742dc5535535934e4c +P = ab18ffbda18b624ce0ab3708edd14a50d569a38a6f2961c816b3cb146176a0c5ca451047201d3e0d21d907e237b647f7ace3fcbb2064a126f068190cefff1c3f65bbded983ca9f6411ffe5e5011fb9e49f2fc9926d3a5c685c5eb179e580dccc87fc2d17c8dd0ae08eb84f623e898da801e9f86a0231ea6dff30d5e14f45862c8805d7b41593c1ba2187c8b96665bbcba726eb5d19ac633adf9edc7ed0a04cf828ae6ca549c89d8b4183e27a557368039ff8e2538314f5cc2db36f9742ce45a5849b5666c683b058ef71ead454902dee0b7a4f59b1a95152d4c278b57c8c0a5e1d31a63e9c5578a218e5db2b2e2b96b27c93fd927f62fad190090db781d2abb10472d01355807be2acc7ba3297f0b78107932b487131e6eb7459956b63fe67af32ed0f53ff0f8061ef7e16aa96b38f49e031fc5acf75e0ec6f867abd106716f94eb899a4760051630eefacd41d3897fd3e89900f9b140d8fba886e270cdb9b3bf35a53a329ee674a8adaebd6c2c2366a177fe405f15944b23105cf7a12f45b0ef36c83ffbc3c18245ef6c4e87ccf3c91399f24452d7613819a335cdeacf8689f9974b5bb0764a5ba86fce9d4b9ed5a877fdfe7bcaaeae96e5b8c893b8aa7671fbe792e400bc8fd5ca6da372e9e44dfc11b18a3208591a41040fd4b57d1d4369cd10d1eec715e32dcfac5a4871376860f27d2e6746ae91d9c95edb916d0c1903b COUNT = 29 -K = 05d9cdf2b325aae41ef45b9bac16c60ba4cbae6565b15705d4783f5729a3dd80 -C = 46b29b4b500d84bc20666d5e15d1035c30323a8336e6ab810081bdb5aa87bb5330b1665902df0334e078991da35d7277f6b0d90270e12a8257f451ecedccd51b89141a2dc90a7a4aa4a46a5bbb2aff4faaa215a8ecb00f7033c969f36c5defc5ca9325ec77cac74a546bc72364a57c75 -P = cd04b465ebf80f02d56783b1893c8899017bd5e8865d0eb86f5ccd5d876ce9175841b0f6ad0c746927622ced5306596f86756abc165c48ec4dc0493ed3f9862aa2e2af9fe8044dbb331a1fdae5c2db46ad6d80163262b1b1f6dca078c698ee8c2889f2adf8 +K = 283845fb6fa9fda622b93c94ac81f47dce48a60c33fb5a3c830a6764b82e0d23 +C = c2e1a3a040174a209f00813ff7a39c86cb6110984eb898f60fc6ef361981798589033d5f2b9cc3363d5afa6dd60a698d8c58d329d23bdcbd1f23fb93317e85134d8dadcbe66ffb614dba3b9f21d6409e56b605cbf75ac1c115b6b1fa4889dad39985c2866be167102fb65b18486d26ec4cf3b54d141e3915978789cdeb39e95566438d8c7e96c429ffe6bfa80be5b582dc9f5facc9bc415a904a2beedf70d164cf8cca45f68631968abd0af49a3f83672d9213c0f54e940356e5a0e2b2109be71a49c3c51e9281b1896c512eb4b4f8390966df9e6649aff381ecb6a7fcfc919b4ff076217a33dbe8807efd0d34de1965441182cb2683b2abe90fd03f2a71ee13c361a60c2f2fa0a5cbc1fb3a044f9e83d2d2c5279aa548dde92a07e7a25335d41099294804f413008d70fed22c754fd48d9088137c84e08f9636cfbdcb1bf006acd8ac44894adb0c7fa26028856beef6abfec5405fc0f9a40fc381db4f118427f1c6ca8f7884ef6fdd446417dd2174ec142787407973578c7989e454c9f87b9b0c3c9dd740869c26e010a8584ececee48aa6841fb2771da688a068fcad352e7c32694608150d9ce1135489d074d871f8cc220aa75154d03a9586092221e7a80428a19460ef273be5008c6cbf82b0a806cde6dcf895d98b24620ae452f52765f549af3387d046116a89ad2e179def68afb115b9b196ece8fec32fe5f2db1f62460de3acb883dbfaf4 +P = 622e7f8ba2d9c1fd11643f84dc8c062897d79f326c042839f52961d46b43eb8ffb55d62be5f84ef6af00188b4b1e2369960a85e7c4a6de76e96ca59b17eb91e377fa761331468ad03899515f036b83af442d592cbdae951a5a23116776e8326b65a93daf6868a4822a6a070446494da7484cf47df9196012b17ae511591eaa87d7967ae5d40efd57bde6673a4d8e00decaa94b6e6595f840f8b432a13bf84bc81cdaed92e4272119b80c7e0db9a0147be53c9c0910c924672b9e5b6bc5c73a8069f7cb4333351274929e228dd649c1e199b47d794b4ee367783a92525aec342d0ccf29944d2f400278611a293ac2aacde048e19d592b9f74b4f7b04ada28b546ea8ad6d1f9aeb16e8650d7fb65764564af9faec2b65d132f09b8d6c41b8c4070aeabcbb11cf5228ed8a4e18cee5b65ce1713c5e54836206f6a4294013a9bb35f5cefb16a7b8762badeed975b528769307c852c71965bbccdbd622c2b0d33c2190eff0aea6ab5bfc8580f28822e0e17289f63f3e1b1270a6ed37f06acc3505a1e9c55b69b35b9660b28a9e20ff4cf86b78b53f4067053135e73451a619d9d4f7f00f3f5a2d69d3e79f1084507b04902a2b4f3d3064e795e9370794d5ecf3163b0c1fcfbde7e5471e8ee0c0f16e8bdef985aa1d26a0779645002106bae4fb19fff5300bf42078f46eb782d0cfd435ad49756a7178c0e6d0a9a6b2c359b614956c4 COUNT = 30 -K = 857d86bddbd995ac33c9f75993bb02e6b4519886684532c62a266bb52ad19b75 -C = 6b04c0408ab6d9aea3e46aa1c0bf03ec78e0b8e0498882ea832f6d9227b52be5aec0f38633e1159b57c5f560774416eb5a31207454dd8b704827ffa6c6ac537bf98756e6e3fe1346212a03829d96fabfb9003dd2777bf9da4de229d94102a9cd6bfb19f0a0695011f23600cecfcbc825 -FAIL +K = ef25e29458d4628d969b022ff78230d94ff177e6c345186045ec19f75e96e6fd +C = d1915e279574be58c808632c430c1c331b4718a908488648cda660de542a907e855a16ac666d7eab3b26d7afe934b98761e5f17d997d472502ecbc2f8948bdce8cfd52dcde0503243861a61bfd25b30c60c031624c8b1d700bddf6f5bd013a7ae62333ca3dce30252615390680c3936396ce6e5c375a33cd68348b4a1371a1c3c0cb3dd91f9e34e2eea9dbecc5f57519c8085eee169c000797a93cb99a0ee267cfa774fc0fad602ca4de5c33d5241bc2f62a71af0de7c8730f31c7a91aa1c708be87cc20787346e4dd9e0f230afe87231b3de20e82f6158cde59bf2c4ff8b0ba395bbf50edca85fa9b8539ea44b45d5564a53ac3bfdd531cb26308e228b99c22a3dd3c6c6a2af638f5c87bf083b988c9679783c273f01f78e06216218e52d9e6c5fe4207fba0dea2da616c14404d055a5924cca5bf31f3a6f64662b0a1601175c2c8b3f3f1c429820ab068f006284ac7811ef9f694050300b4d32d59545e1e61caec994d9ca4376891a4f9b4fc6b9ca851b0cf92a818818f0d42c29da35bb661b049e7b8cf289ab72d3989bac17e33bc417816b1e5c1e5f4f934e79d99ebde87e0c4c671bc28bbe9afc2fe1fd6985708d754e74bc81bb12d95f7db945a81c788a7c36c6af5bffffa789cfc50c53b61efb6e2b8d5de68d6b462f14c9956e2b2db6fab53109cc76045e9636695cd05e4a21e6d4a81d2e3008f70f3f2860ec1f2a3cf85eeb988a08ccf +P = f2e39d825a6c2038f357deab2a2e73eaaea6644c2f7883c66870b0f4ff57f98675b3bde58ccba8e9978b7b106a5670fb60773a9995d49c6855f70b2d0b6231f5e98bb58997c802943f79179571514eacce4714f1206c2f6679c3b2049cadae1e1e80e799f68eaae908c18cacd1cf9164f39a52f20803926ba17181ab28ced4d971b653d662d0935056d376f3cd110aaa583e873274f79e732e293446989dd25fe88a39c7e27189f3fdc58f55a07a0091463a26648c786a753bcbe5c84d9307ec18f7ffb525c0b212c444e41cf8a22d4989eb3c3b6952687cf711e7e2b4244f88bf54bb53af0e89649b2e8d42bd3de4c4f4b59c7400957ddf370d5dc16e9edd420b1f6321759a697f20075de835f645fef9c97e5956e515ac34b4263becc00cf4ccc6806bde681a45bbf1b33e324b71380b8aa566a7d79a7a19c77085cabce9deb6f6c494862bbfb871e8e1e0cba2d2d800c759811868346dfdd7c8b795fab49b9e9690e7831fffe41c6810903f3bd60ded842651155ea99a30339c066fdc79c94f1d888188da7e1f0a67ef451d1fb6b60a4a6ac91f81daf658899da6d9d5bb461ba3712c5597c240b5e42d5832494c2bde507916106ee73307ecb194b5db4ac9acd328974cdc81c8959ba84d04c5fba0fffa4e1b710a5f2a44be1f03d7da75ba16abef5fa5ef9b35d45bf7935442c912784b582e7fd6089013e6c0fbf9015d37 COUNT = 31 -K = 10eb9af51715092911ec1605bd6f44cd6967613628f814c7908430b76d011b28 -C = 5ed81188653d6dae7bbd3ba67d3b0c3fbce163474317e1cd3d7c2fcfb6d143ea614407056da59922b44759ca6e80cfdad4173c0777de815ad1ef7568e77ffcccaf7fe8dfdcd737ddde4daf472299a2cca2b2fd27b23057a02f86b07c3b9bbb650617dc47aaae8aeb9bb060bac0acb3e2 -P = 6e52e20ec6ec9f2444df26aa7b13a9e542db12f90788babd586e073c554ac9fd15f01616daed81ab7213fe510da968bc44fe2595618c41a50fc807871ef52d61dd2e1e563418a155a0ff9a1eab76c184f4f53cc7921d4b6ce7838d8bf421f32b54e0356505 +K = ab54ebd5d3304ed37e07f415ca542b3c82b8036ccabb8438d20a0923bd814dcc +C = 8b584fed69c78507fa9ca6df867d14e622d76113706034fed7b5d54dd5b1d30dc42feb14c6dc6df7ede7a1d000fdc829c444114cc2965e0861c434f6bbe3c59d9dfae1d1d5d753419f2df7ddf753578e2baa0c89d28a2d88b33e4734570b1e20050e19207c41b30d6093bdea092ea5a331759c92a3dec4fa3117bcce9d9c571aaa5834756a5596fb15b8c2b97e9dc60b285d3123e937ff1909fb74aff8f10e363df8c7b651aa5e6f382a81a6659b2286bc79a032c9e2ee02bc936ec4e96b7673e25906fdcd73d40feecc39546b2dc34e490345eef8b512234eb4cf911d4d253cd68ab472f28c0c126dccb1fa774deaabc7dc0978d506208eabf337758bcc1faffec6fe804ffc54699fbb27b4a48fe255d1ac8a95bd4f72455d864c02143d44f4bdb55e5073f2f211c567b2e3002f69231c6e3e14abb69e17494495d522a2012195a2a2a83cab2d562d9d60cf4a336b32a76a755ccc41648e700e7df8ce5ccc096cfc16ea15a56de2935e016d0b729f927300c614e98e011addbb95badf99140debd584036edd04fde86e338ccb2355b8b86530f285077b874acbe05d6436bb0c0eb266dffaf52206b971b5b2d451083f0b88b9ad53f3e01784d874ca43b4dfad88b2e479aeef9ca110339bffb232291a92917ae3d4480291849a1157866195b9a7243e904c017f50acb2f00a01d67d861854cbff7f98c78a4d9dba3be265332d7ea61f8e12e096d1 +P = f74afb2a9ee44bcc2c954857ae9a184e578fce7dd5b6e796cce3ecb20fe1ddc92892f68f805f3ccf85d30c5e7422a2ff89502b91e8ebbb96e22d4e921179cb712f0423f685dbce1f6db459c4fbc4c7b42f07e721a4b1f17c53385fcef82eee10d32424bffb29e91a06dee285dd0edad794f5036b570a2f64a761e30c714b813a96d4275dae991d5eae92df98f2d43107775111b2eb642ced3498fc01be4438426a31ba249854a06df6a51a8aa021a38aaa9be761df70e754138654a035c2bfa388b2e5b5de9598a88bfc3c72599cdf8ab43bd958eae0a47b50241f964dc0340370b4063c3116f48ed602fd51b6a561055ed46fa5970bc888b274163dea78d728c8a5d936a94f6b96b5cae14878009e04e9732f9446bc949dee862f7cee5ba5eddf31c365678b896cff2bc8d61e83e70896279e8cfe3a411ff37be010246f5ba81f86400c55d182fa65ea4f1f1f0ee8dfa4069f2bcb771e59c5fed1769780c3450a2940e7d4429fcf6a5a80d04c2893e25e48f5336e0e236d2c9548602ce65c256ee17ee3d9634d0afc8ef30eb866c1070980b7de053ad8381788b9c1d151e62eec577b5e0e2f3e4420f384a64330a2a5c425283911b800331e7d767f114c80c81b6933e7ca2779f97b2bf2103e6a148c0a0532f533aff20faf2c9fc4703fd5d327a7105643cb30f42297c47b48f0ef6ca89c6a79cc16d4b86163e8672054b32b COUNT = 32 -K = 2199317e6c92d344a80453d863363d99f757f2941931a25277b95cc18bf455b3 -C = 7b586e142c8e77de5c765c2651604240f53faee5e0fe4195681943693e29639ed18be0192841e97f36f90027793dc7ee7be9b4ff6f84a33b7c20842b0b90bd5af6657fd5d09d4cc8c0f1c0091383a7605e1cf0e252b2531ef8c74e7f157e79efb8bce4e537e0c64e6bace2fb19accc07 -P = e24fc4c37f004a7b363c012f397ff7f9e124a28ad9fce70291fdf2ae59ab5b357bfd6f706f5afa33c6e1dc079f8d06b72118d3fecb0a0c6a3cde335da76749ec54b3a81142abfcf622818bda534278ae346a31f4167f288f534291e51f1fd13e8aeb34fb68 +K = b1dba02becb334b3aba7b3b156869537c45c4ff252dc3dab540dbc42dcc08694 +C = 409005aa2f8286dec3608b2ce0b870bf1c9a682918c819561b6de2b0ba382bb49d638869fc361f6c2ffb752f2868129b094c2a3fa5efe5207fce30ca9081af985f60badf72c0c8bfec8f178541de3ee580403f1763c2d56e71f6b25ab6b3c24b5cb860d71966dc2e64fc5d47f5d1c94198df7ebaa0792a81fff9299dc99406afaf795a8099f8fa184e8c50f1c658f955eb2ed9110d5064677ce61b7e6d601dc1d86d38b716441d7d5f40a95daa28c284cc9a02a3a8d25bb311337a8f737766b0d6b9365dadedad38a3b928fd8cfe3d89b6ad122a164fe7fc0b0e3647c78cca167a7780e467cb756497bfa75fdb095d6aae92eb3d361a1736e34185baef2f15457544cf6f290225a0de27c2a385bbeb85a39d6871ebb821f5e97652ff4b780de17434ebdf0457bc684d342800c53805d4fe71709bc6ebec4b98fa1f995dd9ce9cdc175aaaa16fe708a88e22b83e33345fafb73b0728ef60980141d808adb64591dd31c5f86be0344875e5390fea2797428ae8cb898fbbd76551dacf98e21f5054b6dca905038aa44152de3a8e13faf26ca29dd831d39ced150c0674399f7f0a16a789fe6ea2b0ce883ddd5298b0bea003c4487c712f0c579896bc6ff8d435fea73927637cb526f57e6c963fdec4c02761a20a384b5dc6f9562477f96b7db3c868388e9976dffe5a2443818ab8a1157954c7cf2099aec7c851e3391131d6a11db32d9ebcc5b558750d +FAIL COUNT = 33 -K = 94d1929327ed5f277498d6ef796171ef0a3ca23e5f5671b005b45a8ff719d30a -C = 1eaed34c4c86030a9ac3fdce8c02d8955db9e952134001d3c0542047874ea9768102ceac195cc2d433a10e6f1ba71302472d5d480d462d7911c6bc4ca582d5e1b5360bb3d02732ed92be615b325b73c283f8079850b7bdd2eee2f2f7462fb8c6113129a93d14f1baffccd5053bfd37af -P = c04be82429552efc719a3e7f135d7a355e3772a61b7ca89a6b5053a991c4241b7f63ddbe395b8ea96f78ed19198225bb757a722524ed7b0bd3833fc37db799cdedadbb412f48ce7349ee3eb44e0482f3e2d91920d648c711bfcdc64367f1c3a7a62e4f62ca +K = 215797eda0983c85524658534732f8de485755c495e714e609b518f35c20e6d5 +C = dbc453c720889d25c6f94475767bb29ae04cb5bee924d3db68a0b00e5d9988c175ea56da1e82c0ac236631adfc93d93c7cbe9d1e4cf9ad0da2555a7352d78b36751df688343f208fe1892685a20efbfac73d4ef21657b3e36ba6a4d6fa150c0d4e0b9a67e235794286c19fc6cb66b60d73cf9c66e5cc3f33623b5838486fc4b0d3b898f35903a37261543fb3d2d6c1f7d2c7186c95d3ab887b1b4d3fdf00d85b2a4b10d1d9f2625bed3eb24fd94d2fdf28e49436cd14e06edeecae9d0853ad88bc036e8c24293f351973cb2cb0f8618762204c6984849e162060e498fd299e28649d28c3a989fc96a1dbf235eba4aa552067dc2e546dfc369699157b4314a6b0499f8ff03569f55edf827b43aa064af9f91a73a0b3a90f93c4080202e0a93614e655376e27952520f3fcdb979eb3f478885b1d0a71b9deea9258d006d68bb6840b1f44e127c3c144338833d0a9d3d65915fe5a40dce3175c887de43f265bba762a8616bdded2b9adc30fdfcf304a090f67463127d92d84ed4cb8cefe8610794cf0d67814744ffa8f303f7d151b7270162d1949523fad1c887b83562c5033e208364107b0529a7065ca4fbd661a90e41e5425590f2c72bb38b8ad57a443d34c6e9f62d10f23cc84fc06fa2772eb5d6ff08ceb3571c2106beec98bc61696e2d26420a4e9a25e71968fc279a31dbaff79e42d680d8789f26902c4c2ad8274a3b4262c021bd5f6cabf5e +P = d7f36d8c17cf5d350902371a7422ea1d0640455b400e6d2a2d63ff99c0c3106ac64cedc649b7a27721f1445867b20709f26a88d60d0489e7ee391ba59f90d688f678aac9a308933ff4dcd6da53513609107c1e0983fb8b9e30419a604cb7d82a1207c198f6b15bed0cd9fa501a68851bb7592cbfbc83d21eed64bb1040aa109f9c47e02d4aa0e21b2e69a02a05f1da0d346917ddf8d3a059cd4d5ff90b604e5e86a18a11d0b1617a9b7c0f5f0cb9903db1ba7ab4396120540f7c10b07c8318fa2997663d27e896637a33b8e3da2812128f63d83a62278df99f6ad8852317158db590b10ba2af36b75d1b8500d776db85a4d280ea2adc862047ce15621c82720f34459b0ab15cde1568e001e0056d52c556aa15af972aab06eaea9621e531b0cd21a77ce63746c52f2823b874050b17f62199d0d110d5c694fdd20a9844321eb1aff444a543efd79d99732c21558b24bacfec9fa78d2a816a68c7d6eaa0fd37716f434e4c0d46ec939f9cc94e0b9f4d6cc13f8227efc342561f9883d51e91de9168e91b2164ef1cf90550791c1ef92fe7d6eada37ec5055395d93949f746a02b5c5e7d9ded5ec5680a38736d30f9b5d8e36257ca9d5cf6fc007fead5afcc2469e04885650edc0baf7f91fb1a1fb3066724a0a68fc8aa788366ac6bd39fa5970a0d2a33e0d74f85755f730b1b9a22291d24c7b675058a57096d81823102dae4a2b COUNT = 34 -K = f767fe085e69ac0c6ea27e42d7c22856a535f6f807b7a06004ca742cb6f0314b -C = 087da45ba71b82ece326b9d8ddda1c1ea2e4578fdd6b5b917b3d5055658fd839125bb44f47ab1e3a31cd40466ef205ed4031aeae780e9ebc369ae05396e988ff2dc2bac54d12eba3117c515c4e1aec4a64682a79b362aec194f6a41532e8526ec0ce57314ab247e21aec41cddd81eb3a -P = 620e2a6d49819542250114c7c4790db800d7e0b5f5c84819a3fe5eb2e76f9f63d57c4128032ffca032d4c116b17a77808277bced8128eb0ad367013dbee40daaa5207aea4e6bfa38574891fee4125d1e059953dc636cd8f973dc8db9aab2ce6639365ffdc9 +K = 3c7433992e68cea0d1a430804b9a8fd1e51495ac23ad8656720b61022411d92d +C = 2750176bc23ea7fafe64240a4d7a998a6a67cb9f684f5fea443a7082f1bae8fe5a439450a4ab513714c1f6bcc3178cdb98994b15045f09c4a058e1c2646ef3c983e8e241d81eecbf961b5111db391f73549bdbcca7901af057b5e671b9dbe395a39a1d8b2d624a12b5edd2aba8726c45d89d39d517a44743d3b53d002a5166622ccceab97f3d7abefdb89f2be681faa47d341c06a9590f1d966b820116a644feeb715ee9b5bdad7de356be847a36478d2aa98dc03b8716a45cd99d728710a9b3583eaa03865d405ad2f157b9641ecb355d652a71d3a2931ab18285ab1d85fa2b0dee026ea85ee6cd62d2e19f30e1c33dbc5b798326e1c30ebe017c6e3d887a466f5bb017c7da9b1b3dc5e68bf07fe84cad9bf04d8421f54f235bd9a4063c527730c99aeadb4e799857ee75ca8d6c8f941dd71dc3b795eb88a1130823fce52bde13ba817dc5e5853f10def5425d97a8de4de84a22539f619234eacc5a77ab069be53085bcd1c33f41a00383feedca23e1d48eef1fc472850a80f52418fa8b8b2c750e979e89ce0dbb7f1349f7f3a58d16aaff2c328ef0b53f5138a8736a26cc2af1281005e88c479101b67167e9813fc61af48f4dde6c6a4f14c3f23ecc5771c538f61cc1a645bcf69b05a879135cd0a021b49319c9d2c22f799db4c13f1a4d2f3ebef611a656b4affb773c334f56c21ab0159bbdb8f9dab5b90451b4b6bee81cef457796b48cd044 +P = a45489175b8587a5fb18dd1ad784f69d274ec0ecbadbc8e48637b7cb5c0c5b5a7af90e0c9b2168381808044091591ace2852ea257d02140471d2d69bb4cf3be38f316f9de3900fc42b446d7af0683104336391e78611aa6a3ad88592a3d785c496de3eef4554e94d8b642ce33aaf5a52830398ecf14ef73f39c348a314f8bad5091a3ad8f5fcaab754a44431e79947b25db3a059f4db7a60fdaae3ae31d35cc864b65543e9c2454922b9b29c4fb25b6450e00a50ab8035c1c149a555190d9afd5d7d9c130ba8f7a9216c8e28c9d947bf25a19f4e34c5bb262b04b5128566f4084c70e38a547457817c0e07563c2a5c4281d4d40a46df5fdcc758509a2bfb59976980522e1aa67931f69ff7e33af474aaf05529af4fd1ae9e5a18f2ae4a36a3fc0ec9ef661a10e035b3ec7987172f4c9f2d098b762e0620ab49ebf5f649a2ee89e9f68ddacf60f67f60169dc31559846cd92de5b0990ef22a3abc2719e3f202b1ba20f97fec1a30a6352e70029cea9087b835c65d8eb86539a300297152cf5657d286f13c11f7aad04e023302c7c44534e68ae3eb7106ccd4c848b87030de99f1325e6e81bea1c3d74afd47b0969d5d15216d28cecba850d5f8c245a41538ed541bfefe6f167959f92a77dbcdb178966a0d6a08a6e18cd03deb076ad309e954a78be80df2a7bd3fbb0229466abb4cff8e476f5b8411863e8a6cc34c84c9f060e3 COUNT = 35 -K = e0e594c49818cc948b67450622493fb5a6dd292598257edd88bfbc7785157714 -C = 231553f68fb9503bdc4326d98d5da34ef81270b19f5b4be94825784e25cbce7949588128da89f879c06ee4ffa3b87abd2f442b0c7da813c8c4f65faea95313474886a47aa573709fe97ee5fc695bc2d4bc494521e5ed6b85ab349fe79f1f0a19c4448aabb7f32f5ed758bebfc09bdb2f -FAIL +K = 3b1ec0806d94468a53b58cc406796e8e84bf1db88daa69372435ca51812aee9c +C = bcf0c3a18db7d608f166fb56f269c6619ee00d55d91aec3e1f9adc5c8d563d708682120fd9c1a737c1280c01f5f4656de068904b55cb2727bbdd705e68399ad3221ab46c9eb45acfa04e4fa889df149254d73c92e587db2e8bc1685a691dbebd34b7b554cbd3f1a1b2a729ff148fdefbabeba748c9250564bfc15761bfac0b4b3980239bb1e6073cd07806075b14304f6b89fb28f0b7da77e7caee0e6a3874162dc6acbfb2ffe4f226c302e6aff254d550b33a68fb3ccb2bc79cfdf4a1dfff7886858d2f588bac18cf67057b0a9215257f4b5d8fc5ea57f40d90f6928cf4215fb6957c168ae72379bb85f2aae1f490246556990dc9d932475d7161f2ff2d1daaa142e15ba8cc22a69964026d145ff2566afda8229232fe07c5d6ca86d9180db4a69195e0e8c78d73fa9fbb8c2b25f5c8fe0a5964d78bbaccd04e94a1ce9752e6ec64469cd826b431e7d822dc6e395ae18ccf2c37d0aa423350e411eb48e4b36df5e81171b24e4cf48244f2178841d0b1641ad6ca7ed8472ee5777cca5e823941bc23eb7ddeb33f34084c72dda52234d9b464f438fa01d3bbe6cf47935e40a0e4e245859d2b7e92f7f6dd4fa22b92ef78dff5bf729a35ebe89cb0a5dbe722c84578d0092704438404bf67a516e27daaad2cb1c20b81ad4b38339473e9bda62a43fa9e62ed1ed4bb051efa7b1817c3e15eb7e49c9dfe6644310deca147719dbb56cb6245d6412a182a +P = dba029f522f69960d4f8d4353aeab4a7680358a669b62e42b3532e943ce9403a056e95f2fdf5dc1b946b9a3a9a0e4adabcad8e1be666152e6f8c9ac9693ea1d34ea9553a6f1c3f7e1771ecc79c7ead05ac6ea1911fa46ee8ba10fc2e93f247bf98a23de185506cad50ae4c31792ce93d9995dc0e5bd4c96d2051f7f82a9f8807087332f15038dc500301a02317fd03429e3a4dab5cff91cee6a1eb562926ac6af681f823e8e5901e6ed2829467cdf183c0612a1ae1b519888d361c46e808383abdcae364ae2627a39a103d1ac545fb279fc92ecccd070142c31fc30d9601955701c5b8e16cc95380e5d4ba4730a2c3cc56f0450112be63719d29cce900042897ec80097872da20499564f7bf6e9b62d66f4e7038c954dd9d934a01d1efe3bc01e6c0bb9f6c081b8212a370c41f96648a5719293716dc3c43cfe23e8d1ed23b2f7bfa1a1e922a84677264f2671b10ad365b2f955b00fb37a9ee3dabf8ffba07a5acc1e786a24fcbc5aa3a268bad04d71f90142c3d91594573d898195d079b0ae5fbbee2f3cb700b6c0c4f5296266755fb55cd13508d0182cfcf84328b508dfb485365abaa1caa72d00cc1e0dca2041572db72ef16412de3e19263428aa780cc4f8c32d21a5b04919b06880ab5ab535c88af04ac74d1c5611fabce197527f8b19e5974c0b9929c2908b79e4484399e411fef2f087a31af634a0787e85072b665a5 COUNT = 36 -K = f07e887be78ba8e5cca55f73c31324b10f32fd1958e9e47e4e0faaa2f182683d -C = 24765216532dfdf494857d6cae9d9121624ad39f373691dc6d329e6b851bbe9916dc3cc8ef6b034707e6ced466d8eba8fd95a4d3859308194146b3b9bc0c89c1558c54cd91b42a535cb0d903c450366f0ee2d42dd010dd67aeb65c1cd6fc88702b569eb8c695c13e083a8c75fbd11f30 -P = 83d658bd93607b7e67709a38657f943dd3b1a00852d4dc932c4446f550100fbe00c5a0caf38ba9074da6f757acc2f6c96f2aa08027b69fcf4a0cf7a34b73f903fa614380e82bede3942df5dc395d2a40388ffcf52f067e1fdec09f9aa5d4565e6db6087e82 +K = 1120d7428aaac28fe591906fc2210ff0d19e746e06e3258a82c3874ee616e110 +C = 325bdd81904a0ad667d32ec006d12aed6561b24886c8fee9942e6b970205b9638f22df4f912c269a536f0f442cd77bd76e263e14b18d9865d0b679db8df8f2fc8646601e289c0a9f3ce6a1109a5ebc3b965c0cf09e222212adab18f381867efd39c863de1754c7696956216ae8b8ae04df13301db839bfcd939c9914246b06f01d0fc9efa31249fe1678064f815d9a77875b6344325ffa3442a9275e79f55bf653b204fd1c45b9b11e43f847b7fb5edeb469f54d8915d1f7013977920a4d654ed61ff2af6035e4bc7a8d6a99cb15de3f51946832bc21ae476c42be534e45ef7eefc1847e125b3cd82105d9de02c27cb34a8d981a63fcc1cc61ffd3288eaf086cb88fb9d7c5a29fea4477a5a11acfcb4cf058927dcd43e5c82c84a7bafde67786806703c80af272c9c20e2b4df35572a76d10aebc6674a49acb374bda62271d2b2a6b48dc977aa9108f647bbcaf27c6104fb307b8bcbde08121ec6a6e27335b30bd0a9a57964b606a37f17594d52a5e7ad564866b664702ddce76edeb4327a77e02cec8f2e94027381e7497c86340bf89482cc050d2ac65a4216dceedbb893533d3a19d0070c0916169e23d80087b8ce6d5f8e19285c86a405843da99ed2cc1da4b0fad7efe5d0eb8f77baea6c0ff3be719dc4b2cea7b8eca0f19c49f4afcc8fedb86ca5ca34de6e4bfcdb162d8ed24e82075bb8413be994ccd55a9736bedaf0e335f4a793b6f6ba3 +P = a706e2c4f623083e9fe01fa66e5881d8e7be852a33d2f949bbde370faca387f64e573efbafe33bf5607dcf0c0a86e2d542d2649ed6d12cc9c44eaef3d741fd0ee3d00dd7ea497e9b05181443801c957bf45bc3b2f1ac845346e6be1fd47fc49122b2a56672d2c917c14a77f17bb004f12b5589803ad82a14c23276a5be7cde8c16a1e0bc7bf8f3acb1dc58abe21b0117548577ac3a156a37a32b479ec563c6fcb517d9a4a00a24530d978fffffd1a61ec1a7dbd6c95482c337e85a97b70de118af39be0a32402c6773cce7b41be41e936f2fdb78f92332de4e07be6ef49c121f6bf6d8be20490f7455131456fb244b37b6f9b48d24c535154896fe084c7a0adf4f3d1894b016371b87097e2f4a579ce81c65b63ca8daa6771baeb4fe8fb080e98de6216837093df1ea93362aa62b5c8cd944fbba66dbfa9b6b42888f773e2f2539a8727b2fa8797a66f37f496638cf2767812ed1ff231586e306b0593ade5ab010aa8237461ad240c234e59d2b7b93b50bab8a57e333d075b5989ad2e85d46f2a851cb6f6b09af9be0f8d509f3c33ce24ccdb15587735f116d45f407907b7b6ac21a82f4938c646c05a98e7da20eb9758e4fa2b1383c08f791af786d35ffa7960a6a248ad5de041fffea709efe656c7e5e8852bf48f3d1b4e4db19e55c989ebe339e4f08c4ab5d75d8ab3966b499b9c727052d95abf6c15803e3233e69e1eb3e COUNT = 37 -K = 898324b034757fe4db5c943bb87f7120dc9b1fec9862357b5f0215d6062ffba5 -C = ca0fb54c81536eba60031e3f5d101247139454fb0165b4de38a5b3d2cf34fa07266937693632b316d4e8c54443b173a70630846c667e1e4220a62c9a93652ca0e3af18ceb48bd86e9e7b7f755007486cc9fbbbc5d07ecfb8ad2e4dc719ca9aead29384efeb0f232dce3783274989e0c9 -P = 7b22e282aac141a72f44c9aca52d95562c51bf79891f5d55decafe00b6818d3f9e3f3f7dc010378995ab61338a895003032d33fa020317fed3f2051d24bf38edd01156244f4e5377d5ef4b2d29c2af1a7f456c8c9dfb1bfa5fefa17ae3651e4b26bcb1cb0f +K = 726b6bca365e0f4881e02c7ecda2f86bbf18d13740d4ad81131872b94d5dc119 +C = 455c67fbfa12c6237225327bb60b299d3b95a35908de550e73b15d52f87e31702b50b14c15e12932e23c0c0bd0cac66eb3bdfbfa3387e984eada41d60255dcabfeb339458cdcc4dc1bfff24253d634e05d6142816c8a5752eb597b3c3ce32571b7832e4c31d335b44dc8c9e8fad484522a7b57cb4aa0fa880018e565ab93cf63909ca80b8f2e51a49a37dc71fbb4ab69a06954b9999806d1094f3b8be941e83e6dd5feccb463fe0a8110b1a7a8ab3a193a9c655061200a4f7c374ab770b4e56cc1455012a4cc16f9bd1720e9004d21d88c539620facf8083f080d5d5a1383b460a8d691a5aa01f9ff9b0d015341902a72d2ff950ce07e8f6a914562a3332157fe7154f77f22606b6bd73a4edd0d91a61c0817da3947ee17ee71b73e868cbb79fe49cfb555bfee6c2db5ced854785b3490c970f85c86d4a75d4f5b08282ceb3f044d5b76de565f7329b71c33da9baab6a7e40f00f3fb9dc232f8b87b8f0f87e4b500e4b7e7f566ce775505a4cae397d1457b5d52351c6f8cf1f2ff38f65a4ae8b61de656dbf05c147857999a04c96753e5afebb8649373143d1ebacbb234a2da9b7c8d29678ded5ae2ac93f8d9f82356bd9d36d8ca4ca9bde5a79d1acc6232274503661800df608a264a925fd35e672ca9969257f727f4c7a7e028670277905f1b50afec9e81815be95833af3dbdc8d31cf9aaf885b30c407f12dcea6ce20b4884430e6a2a0a62961 +P = b444ba07ca98013d4b87d9a0fef9f052ec143ff851c436927e05509db2130e4c699de6592fb43fba86aac86724db75530491a57f5995fe5b2b2bf2f1f008144a09251cbbeae2a640d6ac905a475c5c9c84c42c77e9f4b2159220df45cdfebbcaa8a5b283435b998df4d1d24febb2c3ce015298baff85c84052a813d195d3ac163c7dcea90f4a0dac67b09f74cfe5d9415e0d337902d9bef6c7358878874c7cae6dc08bd62058750c0410564f018d5a6cda635bc826792bb21796e447947ac4a2fe5cfaff2654989ce58d84006fffa8528178b7efcd23e1145447d10c16443529df5b8383d7457083f317ecfe14c9d96ca238c51a15e62dbd3b93a2cf1acae05fa8789f1cb7d476df00113528965c6f1d1790df137973e7e385a3cbb3e6180c6460302ff2ff95a753e120d671ebed9644f38342a743ed46e59a26ad23fb3442da3ba1a41a7b3eea900a75a3c9fa59aa1f808e7adce81162bb080502e7dbd9bf2463c071194316c2f025fef87446afa42bce9019d744f0f49654e8e7d65cb898e0ff06c63afd384b06fbc92127be592131926b6817506e28b24ecb85c7a65462ffbd232743c9df2d1facf7b6657aed2958eedba7588c173926886efa23ff9eefe340cb2de96f6f94eea0334f818baf71d5d1a92304ce43d08923ca441d7dddb75d88483f644e8c12feb2268e0d5dc6c46ab1d5fc7ea6bc4286e7fd662770906c59 COUNT = 38 -K = b6c77d3b31e7bd49fff510f08721b7162979921a2fc4384752ac5ebfb1c4a813 -C = f5aa2f0c5e32ee8df559947057cb3333cbd1a66b46f4e7fe349a72ca615f57e060a8d334529a1e694bf5a5589b73c5e40ce197db5c7d72da7f2aad52c099b677bad6ab8c16ac7680007653b99a9ca363a745f203013ff992c38c0a405e70957c4642733ae1c869247d4f317ca2e49b44 -P = 5fbef3ccd1bd04055f44a4746f8830d67ba92ba223df72bd7a3acc83bba95e5a19ddba9abc5c4fd8e9f81799c2916f2980d97a8d2b9373a202b6cf6e03bc800bea7c045dda112cf417dc5363fd18f16458928ff41ab97e4dbb9bf998b646a50766e7e975d5 +K = 97e41c53f2eec616eb62c7b18c4ca1db6f0f14d9baf369dca1c938ce34268e28 +C = eb18be491693c14053ab177beafe0ff65be90558c2a051d3614825acee98335aa07e00b76cd48c0595dc3cd3284d5460c7b7811306531d14fad5d3ecf97f3b06c5c8027fb07b3e42f5a9963ec8fef116ed6afe33226e91f9a8542ce6b60554891285ecd07221edb6d4a2ca79ed6d6702b3de81084484e0aa61bbb79cf3ce269dbec902941590f0983dc4510267c9d235347120394ebde804da8f00e7611afa1f0dbcee6de1fbcf83fc7e3027b7a2f55e9f60990bf851848f81be3485afbe59fa37fd8f2847ba8d19c39b5d38a1d0f2c447926000648f988a499f413d6bc2c75ca41ea067da4ff7a9add491bd0efd716f93e3104f7bbe546753efbc33a0d2b497fd3f8f2b0854b378cf924ee474874bbe4538c3b3d697b12617a5d1d7f92d6bc5404c2308e6b0e855044357f29ce2002521e033504f6270e91586d40de8b0582e4497559021a73cdec42011d6f8629b1c408449bd66e62147f277b1cc81b73aa1114c6243715087c32d5c805d376ce83ace84dbd3951cb8111f121d6a24fe46c9fc8b3a1dd245b757ee0ed9d29829d929eb55e704d1e47ab28fd6eb8ed997ca578464c8eeea024be48450733ada3771bfc7b8ee100bbd0e2ca2036b29b36f19a9846d5403c736d96635067ffeb24fdf06d17a73a36c927a0401568c88f16d0e53f4d79269170f2b3216c34e5d96b9b4efb541b28d3a478525e5a11663125f35a2c1dd3d086cd92a60 +P = c52cf7dce13a719a402d26d2ee588762ebe873cb95de53782d19e7b5a372d458c678a0adcc2d393087e9d3c756064be370aaacf1d30de20546aef3ca85c50729f8a91e4f8ec15cacbad37194d5308e4272e4fd623e96de019e9e2846449dce5f42b84796263cc32517f0d3b9de2e6d90f2637ca79edec48020096c3d9fbdb4384fb240e613ae186aad2df9383f3e4b1c2ed64b331a3a157268ac3c86d29c936763534390b7f3d638f59442c812559e179f407fd7fe5d0bf280c74788fde6105b0ece4de01aabc86160870afbb045bbd366e3bb27ba65e0cecc63381724127f318644188c9ffaa4eacfebe889788c38fcda3a927de7dcfe81b943e61de7a5ca05fa5a26c7c576a4072e61e24867b3d81485f0548ed4777d7e324e902f36dddcef47ec2572e08f8f9bec56748c01cb6a4dc55eb0a6b3a9e18bbeaa2704f1a13ad3a1180ebabca083a5b36d274b2f7663679f7321c46b0b9e6123979a2ec603dd605aa0376086dd030f2d254c9f93f24d875e51fd04d0ffdd73691bcdb60f318bac848dbae17906428b4618ff9045917198a3e54a9e2745ffd32e3eeb93236aacc1be9672eaaf0bd00ad16fab54182eb1ee76147096691c47e84062fee2fa752a08fcdff6ac35f9d5b00aaea3cc6b280c57833384802bba00ca511baa53d083f0ad3426deec4c92c4ab5ac2e8a03ff3680df392c0e68b1d38beca79a363d1424bc1 COUNT = 39 -K = 828cd07059bbb73685ac30ea56842b7b9335c9aeb059beb0a55257c1eab1b813 -C = 9878dba57a70d4fc6fb5837de491f9fdd10b611e7624427ec5f09cbc45096552b78fe55110018a61c2b4baedeb95a12052b2c110636ec2ea3543086acd665eda781209b915b22ff6d763ad2e1b0945c8c830c7c3634f072f0b8b0c3c47a2bca20b6c08389e6bb4fa5d2cad5ae7df711c -P = 9815c8b254f1b80c00c17ed044356c4886ac5297a45cd2979bb37db9c57094523c21aa2027c1de32b1d8d72e3e74e389061bc5289db51000d4bda17563a6735ad69a6094a39752025f8a5d2c2e6b843c0a4eeabef647d821329515f9a66446a540154f3fad +K = fd4f2cf32fe378a873b3c224ab49d57a1692a620b8a10508f48185e462d45444 +C = 1aa83e5c9787c4dfc08e18d37034cfc4985fb3ffa19b0f142115e0a7b42a5db6836cff6a7a609e7476a01b149884c8e1b1fe02ef5684b5c6315538fd2170da480c96cf4d99c65902daed180809d72063f9aae05f7e59bda63a2a1d64277162757c0380773c823c58f5e4d59387ab92d2548d529bd06ba9298a66151f900b71f61c7371c0cdefdb00c3ac4df897acaf7ae648ca234b47acf919b2a21f910b0c80a1d7842f58b1f021ad426b5e30ff88d713b2de3200589e11560f2a3844adb4344ad0ff50d6ea83add8b7a43da13a1d00a925cc7705a4d35a9661e48dc72e6ec630431e933498c81f117794228b61384730a2da619a90cebd65150f60aae043ae194bb6b314cc72afbac95789dd5daaea54f0e5761e884cf9ec1045cc9db4a0c0fd7e4e2b000d723ec8ed580dc89d282b952d12f840dd2c734c7e3cbd4ef2ddbdf17029d40144be8872bde877be7903b4a524d4f99d45c01aad983cd7ab3c36807e059d16a2dab77b1ac875a093ca9737871757be21dcf865d831f701b5acb8cb93932373908f508a71342db3f94fd0d140f5a7d84946360f11982b48421eb3108f54585d4f72f82346f392b69923055565d1e80946c530610a36d93526be1b10b9f312290fe98c2334468f67341ef491666a0efe6155455cd3843a21243a185d2eb2f990cf72e1731af7c9a45d27160838d6a421b1bce873b4ea2e78fee30383e6692848a598992f +FAIL COUNT = 40 -K = 61846974a8df61b522121f8bae0fc3898d783b701494ef679ec7c0e5d1e31ef8 -C = f3a26bfd72f8b59786e7d8a9b7a1092e16047c91971219f6e69ed45fefae4df57a1d17295bff7cc1ea73ae725953e35bec382eb4d77c5078ba37d8848c883365150d56b02777d34405124c403b2dab90b78a21c5132dbbfba06bdbdc07d4660bbb2839d56e09f652a7ffb8be4b7cfda7 -P = 468c0bfa989ce1d3942a14f6352fcf35c31b320bc841b52c90a50e79cd988d962df243383ab003c72b2d94856a69563315d6826c6c31d0e63fe046e0ac5dc7a36153b16eb40bf41e510df137bcc0065fcc4f4cd75662892d5867bbc01006e47120006735a2 +K = a21c613b5e1c31c8ecc21ce6eaaab203d266e31164e99bef6445b63edacffc37 +C = 61b0707f4d0cf65758a9b7f7b10ee1303767806fce2a917a8c03fadafd85a2fff74cabe118dd1340ccea70a80b42f2f13e33a9330e609bf13ff2617c1d85625f16fb5b1e0d73227c3330ae794958dbf5b6e93358e45aead45564e5f760577a9a6e5eca33f8a6c47f754e83ada3a63eb572b832f8f52f85da0bf98d52024220483238a053d0223f07015a9230b6fe2d8450d4b1f3fdf2384225dd900744079c72e6aaa2a0979ca110fdd5991cb614c8793a2a6a3a2450fe667e701484cd48116a55c840f0e4d9e9e88bbb39dbc7d944e39ed643eb2ac5949980fa695878ddddd3d61f56be6baebb305d06d5397a9beafca28e85677ab22c25c35449ce2a2e6b4feb179ea913e89710d1a934a0c06a611783b07ab354785a24add738c2627a25c247a3f336f8df3a69b9956e70b5fb9c669e77381995bdfa53999c4ad89b4c49189129efcf544d98a08eac70f33dc0e59140db488925181ce29d88f9387b36046ce9949d674063b197d7d9eab26a1a6de1453821991a6fc9b77b7001a48b80c13ce3d8934c1f7bd57999b6162f6871fe50677753b73b18d123b6ca84ceb6f74c77b9753c3ac33b6910daf30932191a3c02171d7fe7536d5ae4b6bd4155798668edc1300ed5a0d9098bbab8cfab5d660016abfee4d5c36631bfc2d2dee371dfe7bbe9434eab8eb795ae374476b8b0f01b54885caff18f07dc16ad320e5e03721de39b3fa872714f2eb7 +P = cbb56a5b9e2cb24f0e6fc7bb85cfeb2544f4ab3dc61db66a3aca0ed52eef1d146b76f5f08c9cb16a7a5720cd6e575ed4258f4f8416e3f5a0104829b62a4ee94d5152707fa4b348880a255a36196f2dcfa99489b5091e50a070b9078f026695f4b06125292560465427b41b177824a0a29ec7c4041412711afa0dd69cb78024d7db0f6d758d66e44c4600945dbeeb1bc4ec23b96032bc84ea2e788ae92b95fdc8c4c35c3e662a4f6145db2c56e93800a754c22903fe3cea163150f5313262ed8c2e53f16b2005a1dce2804019a627d9178a1cab70900bee324552ea208b8775af66a73733796939b366929c4fe79133e9882a480447f46d4670fb799d03cc5a3adfb208398c7840d84ac26d1fea3d63074f360035344c50851a4bae980b8e7a5c14219ceb4329ac4f7432a079e8546d1aa515fa5515ab025cdf707cee4be393b0672c663c30f08334a0f45d89f78c36bea30393bf36fe2acdbc114508a745a3d64a66da94ff0c8864d760fed1d146e8afe27d7a25440e70b8569709693b9f2f4718bc4132a06a2c4a158c81247bf6d5c8704a4547aab89410c22c36b49820bc45723adeaf7423c98c30729c63edefe6b03d7e930ecd438d4b0cb552f65a15cb26c0a2e1153fffd66a9401d9f8a299e048e7ca7367cd5ed3afbb529e0ef2a92b2aa97716d0ecb5f9fd94c762729a8d0563afd5615c3da931d791599aa5b795422e COUNT = 41 -K = bf3029e5d3905e54f7eb1f38b2f583d2f2d98d523a7bc7db22ee6223242ac1f1 -C = 5f2a2008fbb7127629174d9099082765d7ddeabff9c0e48cba74186baecb9c8c10fa8a6c9d9109eda6c901f498b620a08ac990a640d83ee5f566bd4cdc4b6c7ba556663b62c5f59956441196f4c20756ea9c6f038ac60c2ae272f69585b330456d21651f7b757b1ce1b2436fb371d416 -P = cecaa6f13d33aeb21d1abde30e54b33e3db2f07e1594f7100c4fbcb5ffb3c5134daeecb7930b6386a0d40889113c687d852a8059e45fa5b121550bf1b5e0097509ded7a66bb6d0f0926bcd73ddc60e0811cd682cf6cdcf11c8509f36834a594814a1c07f31 +K = af49e1ce047a7df25af42605a080df28a5bf223d399c73bc82a94f1ff7940b3a +C = 570fd934da24f8f0be7474a6222fd24029339cf3dd0ccdd53d1a28e80db003aed301c65fef9194d87ab2acc523cb03dad0f768b3f28012722c2a89f21f35c7002ddf91156f462761f9375fc69b7246745758b8b8c45f21ea13c77c8fdbb53d83222da9f1e78398c266d8c9c61615cfbaac95966ca235b43eaaee04b88c9606f921cc1feecc67db9356f434c5bc68dfb95de63a00f8c01704c33980b437a6bbb8568bb67b7c786668f8e93cb37ebe140511011be26e8fe7a8322aafef9682d3f0ce55a2d4c475353fa4b2c6633d25a4ee3999452c75d4b7f321a90a686b6f085c7c7c78e90bd12163c4062a149224856c214da96d581bf57a362ebc0565ec4f96f023fe6b89abc5e4c73b68a10e17d14274dcfb51308e45c4703d29d3c20dc1ab12bbb4507db1b089ab105283a99c81832a1361d6cf31cf9d708831c04f8fa40770635c0632a20fb30a99f4f0b1e5e9bb61f6d1591caca088af310b62eb4a49b55d4d0e6a383a57c65db7b40926040eaedc5346e2b3034eef26aa8d7dd45bc44d4ead8345d3d49d1c59d2169e953b8e4f7905f427a02bc72963492658394fbdd24a38d1e89c32020411757c570a6bb374c816bffcb429f04f0a93d8fb839bad07afab0b6e418fdeca633d4baef5b0e26aad9bc9faf9ccc87f20473d1484e7c77a50cecd81fa20a202f2050931ae6778e866668c42307679855cad813f9bc78ea97d8af4cb966f10d6 +P = 8a418131b85976ccf11b729f510fed28f9fbdcdbff9c7641a86782551cd9555ffac7745db856a9e3589d91e74a5bfef36c7bebed5858b746467cbfb1f3712a15c92dde80a2491ee717339727eb20fe8aff33acb7992e33b04f668aea039af29882b3dcbc9a91f8fe45783fae12f05e0724a505cd7fb0a1dcdb00c76ccc871a8f1bc3885f84e70c181f8379c668825e46fb6067a60d2d6893a48841ce14ed5d8db4d16afb902c1431522918fd8e2aa0969519ccb8f6f8472e06b5b6bd764ebb05b9135bea771fb1ac47880bfbe09f35c229ea8627616205abb4b24d1dd0e52a6a1789f76241cabfb2a1e1a359c5a87e43a91b45ec8f0de93dd70d7600e43aae597f1fa45f89a3fe8495b5b864955734a4022f07f90108188e6ab140e57d823996fd87cb4c7daef703aaa33a1c4e8becf4f0d3f913fb2696c7b85c0194b367508d325ef602bab267e6f79bc78c3c922bf0f559f7564e3967e9b56a69c46afc63905da18b9c08d729bb05c4da266e134305336b49d3f8fbc03426e26f5bc5802669c69d72548ae1ce1b89f5c60078358708e23488eb935d49667b967221e359a47a35cdc3489ccacdcc5771a4666aabb40a185ced3c89128de84de4cbd4f3627a63a3f1292eff466727ad9125b18c293f3de338ebf4a68e478a7f1ae746a143c7f956497cc70628dffa2d9965f56b502f2582f08fed03f69bb468447873cd786356 COUNT = 42 -K = 8f53f8e9731be8fd70b0f38bed3bc8bc8282a85a99e7152a86e1dd08f7b521ac -C = c7f95c7e88727f57ed424ef6c49ac86d23409213a1265ba5ee7207981c859b99eb5e6830d1018b7a2d0c56a6f7bbd671fb32e76652a16383b8904eb8231f1c24ef444cd707e2c989fceaaa415ef56404edb40188240cb356cb75682f1d63a2ac29b1c120cafdbaa89a5dfe4137d422ae -P = 266d32199d236dc83faa189a767a52e4473d81830393e1e28ac280c14d62eb74f4aafd0f1525004fab06aac2665dd35198a652d9dcf953c309a7bc1c49de349b67e1c2ff0294c7132513b429d9b3087c99a599d4334a35c55c93ba350c16b69d944c33197e +K = 553d713b3437010c2c0ef0b5ba2a6c870cabc9e75363df62148249a9886616d5 +C = e0f63e6986919c82ce130e7b8c3d4d3a23d90fd42707d85bf8c21048960405f609f3f68c91b99a235e370735620740a14a53926a43b0a814ed08dd0fecfe8011fa6f65e96bab3f38e143c49a66bafe8967a4597520f97d7c6813f66bcd719d27bee2c143dcd4425c1f768ac71e2205cbfe5ae5819d6ae2e779dd25365e5199b8d738b3f30d6b90189cbb9019025c55ca7592ea118e2b7ee54d41a7ac8251b413556554494f9cafed704d96fbd05c9346c7da1f2a5ba91f72f278f46ae0d76c60074daf6b8f273a0c600191ad773e4ece92d1827690b793a7713746ccdf01e9c952a9cb1d5884315a34753070890d17d105c90b1ee35be23b375172fd398f983a30e2d755c2c93949cd11aa7c737848fe05fd2760e3b1e3b8526bbd513cda5d34920ca75a6fddf1100873afb4d35a86ecaa5590a280fe3d923f4c8068c3ae7d4b9c78b5aa576ae654398864a40326e5eddb5c0621a65344fa52727f503e4133846c13ce00319daccf0c37fd322812a8ba335a0fd51c19580a6abf63f27519602683958c5068dd2fcfb7b66dea8190dca1b1fb182dff4f70355f10b0e7823e8027046e01bb43a1f9e9d0efa35136a2e3484ba539e32530d62933659ee110ad2a3822a6ae69602ac867e77ea7dc61f1052eda27e0c5ac0303dd11fd007272f65bc03753144f6e5f30c848fecef650f1ee69e689ac56f7bbf4e382a8cc1798cff806a28b8126efc628f4 +FAIL COUNT = 43 -K = 3673e1eaa9955ae4e34f3d5716470fac93570952eecd0342a73f0ce185dba345 -C = f2de7b09ca24500ccc2686a53d897e7a9c3ba44c71a4e0d1f4a99658536df0c706d2af23beaebda82b8f2b547be51f0bfb98119fb81391623d605eb3a2e19ab3bf751df759cf79f29593ff2e97e634f0a220019fd3d270cc5bd7f10ba3cd5892ceff5afa91e89d116031f1b0f7e6ad32 -FAIL +K = caab372e4a669c4a431b9b9ab02a67ade3126dd982c3c11fe918a92dda74d326 +C = 11cd2aef229993faf1f7cddf86d5abbcf824d92a9d3ed4e9faa98b80c15870585c069e09dde76bed1ee8e06b8b1cb60310b403d759a5789153fb9ecdad64ba7a7b4b3b4331eeec2f37478e68cced75f6c3e1bb9bce1a8298fe57a556ec122530adaaea544cccfeb2181381959c63550bf2716ef15b0c11a9c3964c3042e4ec04f19ba3f566e8e421626107ce43b654afe1d7041803a0cf18045c3e323414561ca13d1a5232e4862e81c29dc34b6bf42cdac249991b1d439a2f46dbbd375b30122f61e66ecdc6896814e4c5aedbfb677f7240a5b1d9f79bf23d022f729c25abc325392fbc12ac81b1e7d34d79aebdb27639da0631490a114436f51078dc93c2ee26d2632e8b5d9831f9b42e9f71a90a65248c82856fb8448f981d93a60658b58ec7e4bd96fb59c6116ff8829bdfd7bf57d4e1f97bc20e3db184799be354d40da4975889db442089076dd02b0df6b920f004af4ac212b4aaca83a650036c7fdbc4a647a75d0204eec355e7e43a58cdd7fa4b09f37297ebdc0fdddb6fae07006db09ef8901163cb6ea3565a2a9d4cb7653a73d365f1a6d3127c8601fa4402bc7c630a9ba72ff8ca77c55684de6cbccd07dfe74bfba7dff940fd971558e2694391374366bc5f7e8667a6df79e3d4d6da56fe5b1f721763f8cec1ac47af3dbaa6776064e6b6f8b72d69b1b92acd31143b73adf8257c3517236d1e2ac30bed699fcb69b21e585b4dc47259 +P = 4da66ccdb2c2d3bdf090a17c409f7201ee14cd091434f2fdfa9e42162a988f5a1720d62a5254f975cc4928353c734f5ca91fe84982c8dc2df28b5587ec9a12da30ee5a0872d2bafdbebf187f51475c2b0a143833bbcce4370a605d046ca0e5789f935bb0dc86380b8aa4cb575e00c48707fba80b73c42d0e450bd4948dbf1667d8c078d1794e1dfb6558bb40ca14b3352e6adc3398ff44ead03e6e6d5d58cacf48bffeb589ef5146eaa560c031acf6aaf23844f00084b06f52f7ff4a36af5b9204540c851771e58756d138eceb8738e1ab8fbe652651b14dc027308f4a712196c45c3ea62bf25e68c24bc159c7ebffcbe9799f5df074e17d7958a8ae7186eb792a03abfd749df778dce11e1a954068506ccd073c777d9bb5541c104fa3f4229781818513a91c27b279556834b42826b42dcbafb0c40f9d0b0c67211a7a453782cd9cf9cc8c79b188f43e0efd823903c714093091d26d838c0bf23607a440f3f795393c200222f3c8d246c518a02a467b8d0fdb0eaa5084b4f675373609f925e7db1abe4f2680e545c8a4218ec0f7ce3d4cd6b1cd1c5c57a5e3f7049844c46d1b11039d9bfec9288000366afa1e83893a5f80ce228a27692cc7d46668f907a6fcb3ed58766f16042874f83339c86412bd56458c93382e3b420c8d212398dba7f42deeb360a88fbc9e0d084f051e0413e3aba768dc8b5ed5f4336332c654a5e02d COUNT = 44 -K = c488c1c2621893eb98bdaf5b204e1aaf5ef3545b6cb474e0fb5ab129bcb82c70 -C = 77831fd0e4c74bc6311e1205df281cb74803bbf1ffb1f23533228d9c3e8625e2e9e050d58a1fed3ba44286e87e02bf17e414b1086050c1d43e73f0c2d0140f99816c53c11b5358f9593d056642bbf89a428a59fdd9c50e90ba56719b54631f0f8e0dcdb463699ab3b67fbedca3ce5b72 -P = 2cfadd5cc010def06d763a84edbfe29b95c350b388ffa5bc7d6cfd848e6b441b4118d92eb316daee597a3f8f808c8f3b91d2ac61de96dfa178c5a8b2a258dab386f25aafba3b38912643cef79022cb35a6591ee0fe8087319faa0e5699132c17b662b1e2ec +K = a188ba70bbc7eb2343dff29ac8e21cb3c1c850a4c81db8d2d63a5fba1c59664e +C = d2396b2a64295eb1545b0df86cb26fac974acfbe7dc63f93d6f18281fa97119629c8813cf59006d36ea124ca23b375234a37dd73434bd2ca50ffdaf644828fb1836ea06fc9fa0474fa686d774ec9ab3926902d754ed0b4613e7fd463347e3be905c5eff268b72ed7e244c112492b0383b4d583093253e9fda6f95e1b2c47db860d412112c332a748ea8cd737e28d6c956cce3d5b3dec712308c102ce533216fb6e01f8afcd6c96587e7f9735284ada0956bb67995a0e8cd64f243bb3e5d46397fcc887895c08c3ae69e3d3612df9161ba20fb5c7d3d98a19392b4d0c50a4f1664f48d935240e250b6a34844f07154c11adf02c64797dc4c9fae25d78392313e9498cffa558256d4b8a6536e946eb3c9f588671c60e31013bfd2777dfac8e7b82f41ce99492976bb3235707b63a3251f01ad11f3154944684d6c72043d06d9ee9aab4d0526d2a5f653af3fccb567f20021e4dc2c9990db323a84fc808bf2a62c409ae294b9d50a4531a54f67542dbd7f64bc1fd5bf4f100ff33e6c4da7f932f1cf67120712589026661e794134c733e0edc18a1c06f86264d33da9128fa9240d52ef1539337a30eaee239be65068b70517106272e69fc433f259e25bfa38ee5e4a16bd20ef1f69dbdbe3576d567f2a3fbabd0ced56077258de64c2d2982b960cc4e4ddda09088de1db7d1e79135387d0b333edc8ce114695b0c28103ef0da2a54dfef23b0d129ec08 +P = 9e7464484d685a22ab82fccb0335a3e210f6e98295ddc4f43044f69438b949c38c10ef4894bec3257cdb7f2e4594d7bc83b9dafa479f184ee5a4ac33f9e67aedc7e9c908e21867164f2d9e5565bc4cc827b614037d24eb04fd5b73da2c7390d886ff73d39f7876de53c576e991250c892cff87d44a8890c5d86c346faca9ddf4cc43bb92de36c710de78700330c6ccaae5a0e6d0ae03033026e810336420253a8f9d007206136cb6d42538b07e92f27f975a27da107c5ad186e60393aa8c742dc18fb416033453b6b964e5565a4ec0789a007d74d4e368442e9a6aa64bff9ede9d374f297197ab946c19333abb4d87711c0df9db46af63b644460221afbb6a625b03921ced2e4aeec147640cb531af4f702d68bf7d118a77765edb6ad4b337a2bd5588ae64ab9b091b0e74d2a37d0db848576e235c30ecedff7ea8958699e2d723e665e5e847611b5b4dbfeb82e630d39eab6ab266c0ac01fed33054d48c809e6a1f7be58ce1ae9895e0c00d35d90f7b0dac89fe0b8c71236de17bcf6ad80f0914c0cf4766479c1b55e351a57ac57c4853eed0ff93d65eb1b095808ca333500899ac7ae165f2ca6b09c5f9cf46df68c2ca863b04b65aec862ec049f157a70c92ec8246d2d51d212b53814c0dd0c31a73231014927acc85e2759a267a378a08e32a40ed7e0b76ad470b1b31a8653d32cd55f5c28cc5d2db922782474cea6549ef COUNT = 45 -K = 988be043a452567877ff53da76f2d65f85a167db6ec033a1075bddd9c2d85610 -C = e232bbf0db81a21c47997ad99699732be12a5492a80c9144d59d6088e5d62d1f48578a118fc180ee08053f6c1170aae7a13fb081ab1c0c22692fe985b274151d96c938269bac819f1d45bc110767cfba0ffff35681551049fabc1e5fbf7377a635d5116983f36d9a8bea8fd3518ceb52 -P = e8e2d1639d6915bd402207fab92f3082e25229bb4d5d87647a586b558e727ffbd73eb53ca5fda0abd12fbb6f090a174a6d8e474a25442c84fcbecb385935101f31ecfb60002e5ce9daa640bffa6fec01ec34c6bce18b5e58395a28718e078c4e82e4c3d555 +K = dac764d8eb600f9e3351cd4932deafcc2b11ed5a339f0eb139632947606279fb +C = 0919690d527b5aab208510028974f21b37102be676289befb689f509b0a58ff585cff1bd47fcdef32d03e5ce2b857d8243dea871fac5508a41794d32c98f6e25341d0a0f7680522eb9ba6adc7d8ec288ac42ea6642a27bd68c6c27598a0f714238a6340964924af0d0c58ef48548423038eb05dfd2af3d43a82d2a8abd3ba997eef775635b073164155e41727616a85cd5cbed08e3943ecd6d25b57f37b1a4a3d921aac97219f65b20c9c14df6e6ee6b4ded497765ae8f37924f9e869fd7c236cacad77d5a074f0d530905f1be9c77047abb368f4636a0e86ea12dd3a64608d1c167fd06eeb7cef78bfd5959278f5d38f629a0fc8964ffe76f7e73e00dc0ff295d030481671cadc2f0dde7071906743000aef2aa2580eda311f28edf62b36ca41302ab8c7455ae7847109937eacb904f2c92a5c68503d527a2c51fd8d9374fc855f0d4a4eb241cf6e8b6d2fa9b9d6d57f888eb6780bc57fc4e69764c9b066a0680959acfcc465a881720e016e39e1d50a0c5ae04b8ccae22413a4430fc18d7d981f025253e14342ccec5f9cf4d540512bec0a1c341bbf939e780fe74b4b00b3263e23e9c23e81e3e06b79fb0e7af6c0788377d69863a772cd243ec0176d9cb5995e9d895d40e51920b5cf7b10d76df47cd866f53d2828b24e46c152857490c103c997efc48582bb44af57396d3303dbef425180e11494499976d76102d712594f8e42c5d5992eabe +P = b9f6471250b21f86c482edfbbcde98417455f88fe5e5ee818408eaa014dc2d6e877e91af5f5521c9efa8813fdbc2ca844193098f82a58d78b553f24a14a2b0e38236239e70fe7031f7050ecd85b56a31e8785892b5811847fe28e5a847013b7b262c5c19eddae22b6f2cb90a7d2c1585b1da1fc6f56a6754898ab92f2eaf7809aec5b767374added115fbc75c095b7c6777d05bed6694af886efaf3667ccb581342bde0413684020b1b9d5beb6efb83435f9b0f68a607b968af304abf28a5359ea39acfa261a655ca73130d1f82358f0d1b401ce61f6e0300aa97cf7925d8a1ec20c1e56db4e748f4341a146cd9e772ab712ab035476671e51cdeef9074825c62c04a9d6d64584550748ee51bb87041e027e229f8f510fe89a68897ac3652b614b197f345d6f51ef3844cef8f67b1891af56772edf8719415f3b9e7cb28ac5963d5d36aff0abb3255d285b33340d08d25b45b6f45bb758e838715277f007c72c234327cbcc2e77693d2d5e5efc1a4170a57c5dc14729b10ea235ae446168901018a62af6597521949e69342c2666aeee74e07b028e1dfc8956c245b9a4a16a63b162451d5b380a67df7f07eeb3cd4865078176ae74ae33c7fc3a7844aa2ba5e1441d945f7c9ccc0b9b8f59328818187804cfb594532727290f779273a0d04cc9cecb0dcfec24116048a0e6889f152c0f4fdbb54267c93c65b6d925cc807a6d07 COUNT = 46 -K = eca9b39a7aad6c61707c959961bfc6b0b7a11281f4d498bb9719cb9c799d1015 -C = a00473f75c1fdda3d1717436181c6bfe85fd1c05bfbabe44f357fb8eae17a8bdb8a6591b237502c0e3fb2e1ade856099e2d36f2cd025e9502c123fd2f21e47c449a497f389f9c05dba66b5950976f9ea44c0032705c63b96877df2d24d390fecbf30770d82b7b2361bb34695ef9e65cb -P = a9fee9fa18748bf7d47595dafd55330575b8c66707e922a2337567464c677dbcb4123bdfe2adb603c4a1b258ce5b1355e60dd116b50d9fc0da089f54d66e5ee31264fddd80b52ae1072d0b0ece52423c252f9c3c9f6b0f09819c8f3c177ee166a0b115f612 +K = 3034dd152bd4fb5b597fae79a467906cbb409159a7800ac8c20eeafb3f23713a +C = b32437f54742ccfba52eb531baf3ae3ba30dd98e03478144326c37719e1af56ba582740c0adb500a01149c24be72f66128ea3773b217bd95d8ebdf27fa3853c519b558201b29511a1773868db17ad1c2c55080e3a79d90a5416657ed3b0eab25de086f4663385d18d4ce7c9a854a3e7962ff37d9e20ec5a6bffa78035b17b8145b2ed27ae2c7c09e612e7035e577be7d49b1551ea2bcf08c2fbeea125c88af9e1c24ce0e76c17229f621b0a4b981701ed340b9d68930c63a95ea6837786cd97e66c6616b2d133214c380b104a2591450d66aa52fcedf930d34a61bc43aff86566e1fe19047733e3033ce04c44232719e0c112df7dcb349e2c29be0b2b726d895e62f75b1e27a971f7199b706cca23ff8f223b88a7d43372c45e0e6a25f704f01ddcf1772ffac4af369ad9162986bd31b9366e727313bdf6fda35b659e9690834f3793dbd5526d03316ec57464a477280b22986f2da86738594c68814d1e34ace04c2aa2555d6aed9c0249e2e2a332adfd70224848172c1cfffafa4e79a2b9f80384372f7206806839fd6aec26da2a591c9b7a0d930a558c207dce1666a86c4a250fdef3da9ccd71a9de3b3e7ce04604c2de3d0ad8ddc48a24c75fe4d520c693ebbcba48f80a8bfa8b5bdf3bc179982c25dbdf765608ea655297a455e447c6a786a45121ec6d60e0e9890e317e5475b0a271f9caad27a466c2c2b732cc83d80838bebcf97b49939ee +P = 57b2cddde942c8193dbce1362c2878c6dcaa65bacef94ae62780c55db02a75b6988e33ee054644046ad41fbf61c82d31e9b6f5693b401771ed8393b559ae08e99e320e51243f87fd73552c34c12ba70c4a1cee63256ad202c3da448ea84ade9503aab6ba9f45bc2bf1b6490b2a8e026b8a6675427e271ff2ec20b9d0d90b677553b5e33ae21a8628f4f7d45cdf3b1698e6652b2245adfa87c5a31d53f3b21f2ce7a6daccb0d045415efa5db60ddbe78a3e7e3ffb2e2911873ab0c228bb8fa4390d81eebfd3673f8afc53c9474080df76483433f49da9a5df52e458891cb6eb2dc0d93adb3da9273ab006e4445461cceca3e91f7103029b20295def6212a773e9242482c0ae2a0e32e3b9aa389c016c6fa74dbe530f774fccb08a67f95d9bb42a0433d6de327ac7a25abebd15abce8ee1cd8ced9e36c339e80ae6763d03c5049ad4fcc765fc68328f2dd6544053e13d9a5eb1626f3380aa3d63c68e570735e39cecfed33abf196714ce3db99c8cd3479a9fe0f35392c43c28cd2cc8d96e5af638d155bfa64c24fcfecdb4c957eb016913c92a871e743171db3cd27e07399eff45146ba663cfc981a36f5f5a9fb0e70bf709a8188f3024eac0a6c7865d9e55475efad36718838a10213ca4dfa30b7892ab90100896a1de4a62292c1f34980397211fad05ae4ce8d55d25f6d224c9f6802267a867ced7c7cac92663331c09665437 COUNT = 47 -K = 708076df991e71aaadf1f323552143fc726983ce89025b5b10c3c95256b38295 -C = 04259df411930176099e6c112722d8e9abace4ef7d706c8214004f20ab222cad38a7c9d7c30482c05bc6cf9be150cc8c51a89347e6f5725a7a01b4a2158f46d721859398cdd0b6c82b16ceef0084f4a497a340323c58cd83cd50c8a6226cc3b3b3454be7331b54c510e9d404dc385079 -P = 7f234185758294be3b38c2e3a402a5ef56101f6ef8ffb0efb34f125a88c41cfc391a6f0e048e00e821bd51143ab906d15a8da41392e81d1afc37752cc795f44e0f486d4e492cc776607587e622e2854b18c7f2bea284d9da5993fc48fb0ba060ec67bb1a51 +K = 67f267ed32a8e37ac3810db4cf8722b0aff643ae56326184e966676547819906 +C = c7d04d3c050463281848b13c769fe56a238ea9aaa2a3d8c48acffa936b2477c6dee0c004acf0cb3a67fd71d41403f8de79ee1faa557dd6430a2b34077a09a3eb885021c3daf52077b3d39c504adda0f3194ab789c03140b40597a0b4298936fb59877cdc6b97925cd5e914f8a82ee84171493f9fb3de398038e350900c664814e0457b2def89f57931f2582975f124662cd3318dd69ceb99d647aa5ffb390690c57068132bd6109e8a62071240682627e95e9bd94f127a63793743d50ece1988df43103c28e90a9a8c2714b8a63ff4714cfacc360bef53b8cd3f06a8f3425a6a44afdbc8b0c77d5e8d66005291d4115428198eb612f2631b04cb4a4be1c7dc73146b1992c5fe9a07ae66d8db995e9aeb9ad9de6ff9ae63cc1a44603bdd775ed298f6f637ac6c3d9310adba8f16412e0b29d7d3bc2723d127348ab43214174475ea62518b62b805ed433b89afc7ccc3af92cd9c4f5b9ad5fbfcf2e84b230408e2532878cf18c8f77504dac3bfeb86043b7c5d3c184e2f9779c943ebb8a0b19460e55154e900d4fbca1ea718ea5b739a45e8f21e8351d659c54849e96388657134e5e228efe4c03e058a8824d725ee41cf7e3f7ee407ba78c7b0188041a3268364660cb520c0554f64ea6386c63084eff6cfd06cb8ddbbe7caf1c09164cde39283167542d8424f0027c63daae4d486a44f85dbb042fd289fd6bab9b7b1b6a86af33f4936739af1519e +P = 27757f9771c99c2ebee72f89f0f808a5cf6a65730c8f669fe6e005a285b454208586131547295892c18aef17027ccef20a71bfec5d26e345b610430159b959713ab453a4281a22691465ee76034dc3ca88ae69f271eb495e13df8ddf9112ae5c923a829e6961120fc6abeab82beebb82616fb5ddc7e9695920c13899dc08d5311cc5d1b24508f59bcaa7dfd6112335376ea5df324752d8b49d46d6e79682bd8fc9e44ceddc02629449e2b16adc1971acf0467a728d9294d2375697a7d988514968545b19fb64d57199cf5d5d270cf367d226b2a533776fb798b29f3511bc127512cf42a5c493495095e69e92a88924b1c4d41118fa3fd7d509b0e7a114e39d3b11cf823e34f4aae965b2cf9b57f3fc9dcc30c1489d33e9bbc25595e28b095f569f8a8d26c6a4999f20406ba7cfd6481f691832bd6de2366bf9a226829be08702bbe571fcde1cbe71a563dc7b68037b1b24a83fbde62b2c0bfc328e3c2ae59a4324bad76373b89e91eabd06caa87da155eb67d380d41562f3030527eff68cc657fe8a4cd5526888ce2a96bf689f57cdfbd3fdd63f88d5ba5e45d269296f4d96344878f0f4a599d4f8ef93bef5e3134e43d19b37b944f162449b3c3b58ba6523ce7ff96b32845e4c324e013c85421d70c21dc6f6e3b3ab58e4702a2129d655da180f65bb19b6f1742b1d11818174badc98722091682a4a08d5a39f9f7482d17529 COUNT = 48 -K = ded5f7cd5c9f22de2832c8f1ce976ef93fe8d026f0af722898e121cbaee3657b -C = 8d3992eed182daf70fabc543a8ab9a65edc977002309b4146c1e2a3ce6979a966fc57ff1f019461415d06bff4810d417dc8d9f51bea3b79dec135a0ea66d3bcd7592c0162f6cf4485af89601d16fb97a7f616cddbe0ebf79f50c4875cf6ae66c761f7a43ce6d8f97c50d159bd5b1613b +K = 18fdeac553cd2ce123d036c99da7246f309417450e76375db339fc558670e84d +C = 696c184eb1ec71805c8840597fe2294c6559d059321b8a5b3e0e14e7751af4e08b297e5b51a725d03c3f23015f8f108581f98cedcb4e204c8c10645d5b1cb8733a7c4b3a1b6af05355aec9f9fb97886e145c37ac49059197b03b62cbd6b905f5aa52e07bdb2fd187118ded9b9d8a11f027ab96c0fc873d26989a737f593cd5c6df4c8126f65389f7a4d111c54681be91113e4b31e80a5bdf8a3030a88f4d0d9440dd21cf4bd3b69c27975e708aa46f974ce380eda109f7c731e24236176707a265ed35e10574d0e5629a4e48428514465ece8b42e845b6940596a2cde79d750d9ffbfc9f52f4275baca4a1dbfaba1dd36b377d3bc6f6886b8a39f4e66b5e10259858fc0e5950a94be01dc0bb8400c4bf7302c3314d4eeadd74e741cd8577fc4efb5eda9e3343abdd051f799651e919b6bada6fd5ffcc18cdae99741ce712ab4bf07b32e44c842eaf4027fcef7ff9c5833500476309fa0308cfc11b4fd228aaff8e3ef7715a301f43978e5a4117f68051348755f2985e07b3d3c05823b93dea18f2bba9dc3facb9a255f1d8f979deea8303e912b562b0957379609c3e0f19e82bf10bffe22884e6af39e1a99c9fece1afda744f6793f1578b79134ffe5b80da3222d9253c8ec6a791d4c398436582e664cb63ed48d2b16fde7f417a7dee89217e898f00a3dae934e69c11f0ab1cfd422cbf4a755daa36054529cb46744a1f08f6550044e1cf324a43 FAIL COUNT = 49 -K = f99a5ed71dcbb1e066349470b54e9af022edd6091e7ac562008963a647517856 -C = 38da4cb1adb0f197ca02ce96fa4dcda9ca853c04f82ddc3edabcc3ed5267397c657558d1590ff39277307542dc77858fbe3f164be0ca85d49d7174311d25193e37442b38ab272af0f9c4185520b8a0ec88c6522a56af516ab2aa265aa52e9a3a71d4783faad76e10dacb610d801d31a6 -P = cb203caee03085f49632454da4f55399ba3d37c5178875f69a3298d056110af61b0603e7ccde5cd9a35781477b196b972be9e709fc7aa0c51574808ae988d4ac2fcd3f323e564f88ef113da909d9e5bf07357dfbfbb00d4dd584b812ce9037b2d282bdc00f +K = 26cf11a550a8150d73ae8b023af2e19a030d2889beeaad2233b27b3b45578233 +C = 9fe3ebf7ae8093af2fdf9ae18d04dbefe5e6cadbe8ac5916f53a399621aa13d509a2b134d4ec754dfa132f3ff433e426f30097d58f6bdd79e4d5f86f6e54ac7ff335ad9181d005bc2141225683d87428d1e5a14193e3f3304c9bb541ecd1a7ddfd26bfd40db5cd8981acf7e6b4728d855f63f04a5460b8c2a425b82c0fda0f9f1fea14eb51e0ea222d570a65b5d94b5e16aad23f415b47cabaccc84ea73505c7b8ef3def4899d4d9a6894931eb9b30b6efa513cdb292588590273453c7fc63a375a4cff73b0232605ff1b65dd038f78ab75e5e7080078e733dc4293a035aee7c296194fb94aac1f4820f8fb07b96489872ade652efb61cbc23ae3efcc57e0c2446ea23a469a26faee603b9d4d35b2fc089d3edc390c655bf9de34711cf827b521adf96d48745e0ace27499f3bb4a6dc192df949c0a158b63bca56ee2b67166627b022a4e76d17f8be57ab893f7841832f547b7d3c2448af00ff78a5f0e83a7a550fcb66158d8743decc601068cbfb9621672623d160cd6580aa15b546c6775c9e7be706152bfa8b776a18620f6479518b2063b8b4bb8587158aced8f0de0935b29dafb380007eeae23d74dc6900b400f78435452c3d432429d9ed4e4fbae23e71c24073c5b6eab2b66c0f7d9a72eb570f3e57815ea5ed00a6204dbbe7df6c1957936133c815c6ef715fed88ccd3eb48ec088d805c47b3d43d8f80fed9778321f834632736637af77 +P = ae3d12f91e185271883d4febb5da405d190293c437bb2d716eba878f1833eda0d64e19796fac5bcd12f78e82373748748818bde5923fce7ae76cd25f1db3dd0637fece9e8204ac68da414378fd5f188fb5003731cbd26bbd1ea5f08ebd2b800d0dba9bc263f66bdad243c6f03c96118047138bbdc7e698d5f2ff9e7d6645106345fd720ed1f60b68789a9af500b8c34b01a112ce2393dd8e1d3b16aeb20acdeca5d5a44c1f6073bbf2efeb422f6399a51f8860ab3c10e1ab0c3586ef6f5fcd04e214fd42a53e233520b3519fda40be176724174a8a679130efc16cbde3687dccebb864fa8080f01ce8d40799c031cd587db7baaed430f9b19cc18b8820de64242c21dcd3d827ecac1870efe031981041da512cfdd05dc15573ece3cacbbc2402e47e98ad133b5dafa79918d4c6e8063197490a17b662622f2e77d5823e650e83eab2e8d0a8021fe36e7a4379649dacc88315b063ea365e50a6abc64fc7edaee9e9a113700d581bf4b809c1482ea6f60241f5f60cdf2352efa6bf77fd7d61ada9e3ead48f921a1da3ed9f05fa544863e977bdaef20b864609064693f6f6a0e088792f9c43d99fab8c785e73f4e35739fd4f8213afe95f825c39816255e9e89927edd3671681fd21306646435979f00fc92ec158249b358f79a2e19e377de7387b74ad89b0fbce59f011d19e746829cbae9ee63fdd0038d4e46a53b2513cc6cc17 COUNT = 50 -K = ee9e1b1d652a9ff7e4ef7c5ce8437895ef5ea1bc1a00453461cfb6722d2dc146 -C = 0f62d4a4df044b879f8b1d4b2747b1d9638a00550cafdc481e3d917b6e9ee36bed5fddab54022a8e56684f148583cb20309e7bd560e85a34b53dd95c70f4383a957e444c4a7e82ae6df0e99c04a8735bbb8065653708998ab1c1693986e673df35b577c1cfd0285195133d100a1bbc9f -FAIL +K = a36edda90641d81980cedae15526632904ec2f0fe2f063ef96e6cec99399cd01 +C = b9a750bfda9bea4fbf5ebc19b27d4da1de7a2d0a0ae58771ef7632f1bbfc5c0cc334ec83db532b18a926d1cde3d0fc2c59926e053724273a778a096736c4749db0f3a1d8705f88ed6c168343c0bab8dcc2d416de77466979d946e3d8ce196d304acde85fb54d0f866a7305daa555fcf4d17875c4546bd26b53808c5ae9aa808b0b4e673fa61a3e17c6f0254c81725c2b265e3d589295ee82691ebe26bc8a76d7e359eb11de32344126573e3a251a08242390483e2142190013441aa32fdd17d28a3e7b38642915325362b5ac766a5441692a019a7aa030f249c7845689c34c748779e72adfb0d67bf43337af708da38e8098c86611d2221d055b53c9541560a17c943f6c200b186650f0ff3187ffcccbaa02d440628e22842d893938f7acac336ee76415ccf619bfb3be13d434f3bfa4d65df48ebe6e3b31b68022555aa45c9a7990032d95b4959ffd62c4f63cb1a31da5243b6330553690db328872f254af7a4c83e8cdffee098175038e080f1d9e058137b340f21255f43a00d58b28fbb8b0e3401927163c69df9f670c8c20d29a874317a2faf6372fd23b61409dbcc9b6827df73cd8c2a820b5a0bf10c4b6e958f05c7acf58eb82277291f0ad663bf2e8bbcb5a248dcf44b7ccbe4544870c16433458ecb40ab11c7ec781b8e3200035a5efc0a0329bbbaddd6c3416a7ce9acd8d287fa247f8a0bf3726b07d1973a163b28e70a7469bcff76973 +P = d5dc41e07c3d2fbcbae8dfc8e90d3b11b81fffa9822db8707871c985e4ba8880a7a9703ea295e6f307f1b356400aaaa632d6bcf7444a18eb809b7d156fb5929e947e3176a6bce399bf0afed2cee8952283cfae9803041c1a40d22bada5613fa0f90ab1346d26318beb34b7782f44284f879e73d69bf153b330714295d7d993d916f399cac9a432a637fffbae2376fb1dc95d01bf382a90c01e505f4b539d527c229a6b649c8009c96c3f8bdf630db1f903256052c928b69f58be60fff2b426480af4f8100fd449c2cbb2d7e9dbaedfb966dc56fc18404bf566a3ac9bcb5a704040c6307225eda656e216f26930f57c8dd0639f241c8249d017a86ae3a842c54fa19a16317f0dc5ba60f09b53477f6c2431d0360ffad40e13326fa825e571034c07b30aad2733814ac9697fb4a0544e820838d09d6d2c9012a6fe190a0548dc44b8a3ad2292db39b7f1f85033d97ac3b986489fabd495e2e48e5c2e08d407e11f27e65f45bd3195d678e6a28237344b3de74f229db3a77025dd6f8380500c501d90a409598d96ff7143ecb994ecff7c86970be8bc86803ef710077da60e0186219743eae79760ea9d3000ca91661171a6540832114b6a0d13fd621b36eed3b8087c1c2e3eb40935cd8245804982d74969315deb30f986ab4d888f263464e9b1ecfa69391046c318e29fe904fa2b3dc4144c7d38e89922a57ac2b2af3285611a04 COUNT = 51 -K = ccbeb327f01110a0050e21e2134066a20bd557282f670ad5e13542f0f819d8c0 -C = 2dd9d357993b703528c79ffa5303a0beb0dbb38d960165fb0b0a27135c80210f7cb3ed59a68c95018df8af75c3b16e582474d7b376fcd5a86757b02e8d40dbbb88b5304dad40e58b41d723d69589485be3a281b69e071b7a39357a67cbf135b933ef37b7a4209ce84d58a9ce0adb7fa8 -P = ccf7957976f56574298a2cab565b34c8bece61ba465c7d64cf1bf9ccea083332c24cec3f1ae7e92c733fed492d0e2286236db7d688671dc625064c3e4778a33ca48a72eba26c178d1052328c4d46690f268d1c55fc9eb6fbd2763c54c3506db9dba37008a3 +K = a7f7115a4dd13886118763d84ec99ba4e0fef1ce337f845273fdffd6a72adc7b +C = d615bf7c689b273b8645fba403dfcba606f1cea26827016895314584778601526d93138a9843e4f08dfe1dd46c6b922e597045d0b671778082395c305cb4b9f138d9bf4364fced9b813f038d77206940dd8810df4ce1a0e37989a37d9759ee16fffc30b9c85f5b56acb168e688a12fd14524d7b7149c6ed13f5f7786612e24c68c8e1313722028488ea0bebe084ce748b9ea30cc62e2a8f8763e167591e0c63aa4fc1beae5c61d364f8ce040cb99d1e7b7b431ffefe70ee4aa8b25e644ce05f6f488662a9db25aa2a341e9f313616d12615d94f7120e8988d81ef32af563b9725fba16c6c85846b099e40beb6ac69f570b8449ec99878afc53382430ce6627e5133cf19ab8c758601cceb6dbcfd2e96340f2dca3685c3f07f75dee854ecafd844e960e2400f27c1032f5d37b4fdd29c1de8009ab5767f35e1c02260baf9793efb233d7ef761475fa67d3b44762a714da5c0e1ca9043b32405ee3f050dcfd3e5ef07947a1e349539149160743c437da265edb4143d3298ee57dd4d6190ac3c1519d9e7df5edc5b442c806534f6e5fafaa577cbf01600c852d0115aecb3d9f0d110c9b0f00c6b4597a186fd3405726a054f0b81873de436c0f0b5f5f82e3824b2c0c78832ba6f7425dfe630c09c7ab85f42f6ba2e29a20a10e338277cd24dac81f5ac279ed4104d241d62d55e12aec8c99542e4fc48d217204b907cb51585d29408b23a45cdab01a57 +P = b59ab820fd0b4aa0d1765ee19f84e2ea126cf22c90b9bff3add771bfa9bfc195edcded90bc3f83b93958d6305fd3a12c3f06f14df3cad442b304429ee1c3e575c37aab5aac876cbdccaf3e9bf5de4631abc8b70114ae49e686baad9566f5d466506c495f2cda1cf6c0177a5ea5711a525ada99cbab49075e30765eeb2b4a2899a3ba31ed0b7f1851898c2970e547143668cad34592520821f9279c657b637c65e326c2abda4849763774fa4c5a73e487269bf13518212a6ef35770ff9238676ed775d493821df8ba8fb5fa474e94b6e05efc26c95aafe74266d0eb503df6c162c922404aa0113104b3868c651050659b195ace09d1a381ed24609502e410cc40422f5428a50b26b363bd8d82d9fbf5a4521fd52aa5b865d3272ca983e572566abe7953f286a8dc7b148bad631fbd9c30a88c39cc9e27701bb3478eacf3d01c7b6cdd1401dcce24a5ba855ad29348b80a368c321eb1187c7ae73adb1cc0d89545cf10bfa326a2a79c45aff5ff82d54612f21676dae3eb1f3c51f29f3e5934c4fc3291080dfe831596be23e9bf7aa41b5504236610386234c64f7f8a41e61b2c15419d3ef7478e2f922890b3c3ceb2bfbac235179f61e0c367bea8b951ca399eca1b9162e57824f104514f91fbc579802507b05e4b23233f54fbae60dec8f3517a108a8e749046c538350e4bc59b947288ea471600016fbfc7696f7f8d64c2a3a6 COUNT = 52 -K = 52d060cfb48cd52a15533feb475eeff2c0c0e28f75caa4c887da5b480ce117bf -C = 58ec8ec1b13400590812439c40220ec4735bacbe200debafcf081c6c09e90a1c0fda3779be82ed2a98f7d5af5c6b2403adc23bbb600447f78e2efb8bfa802226ec3895b13ed31363fe73f903e7f9559a4c73a355909b849d8a0928e18d4c254f9b157bd4136d0436dd3b22d025248d05 -P = 159f0aa26fa13d092b01466f4d8d4e9ab19cc20e0852ba16e91e2bd29dea4dadd5c3bbed78488995a303e3e6879ac2e67452676d595f94f5e47e09728db707af22aa3064f0a44bd73c11a5035587045f7c7f2ee9cc6011725a97d5a535a20a46a4c1b28438 +K = 6454ddfd746a51b936125862c46a3533144bfc61a55aad55dee4b45711ef6eea +C = ac2e4e0a50c7c93738aee57d19ab9e84a6a5d165fa53c844860344f4ecfa2885a65390ccde9c0ff9029dd06e7aad0533822fb42a19b52fd2de7fca4d216618cc5b80445995e017cd707f14ff71a3c80a6fbcd98f25467d1674bb6146eeea8ed0ea569429c82b0853b9d7ef20cd1b8761502dad2c527140a38cedddc6eea479e22c435fdb90fcead80db9425f65f78e9f01681758866f49d8ebabe06ddad67f593cf375402589091eb86bd89c9c15fd8b73e4bcfaa7d517f04ebacd4f504ee813048260e29d78ef23c0f373d07e3fab1603552e47a421e493f8d7a3bd18533d219f2caa1b5d896b5ee1f0fc45c745786b0df6bda3fb96b3eccdb65f6cfc0badbe29b3b7cf59e9f47f42ee92861b42ac57f10f78914b6ba9453d31566328b24e6532ad3f3020351761d24b0bcb65167dc0f72f22496329252e7fcb628768ecd525e722993b5f404cd3facb15076536b64d2bb703fba75a241ddb9124842f97ded9b6ab705d858e6be37836cac2363cdaaba60cec98c2fabb6bc13c60fee6c2b501df7d2516b8fc1efc828118b4f63dcb8426dea087c0e87afc4918a22a39a8037a70924dbf1a9de9c3f7b1c5bda53309d28eeebccc7f10c4e2e7911311474c2594905236b1ffe22a81f582512c62a3bcf9fa213e061630473b7780d01e09060879f53f174a7d9f39d0ec6c0d74f09bea3f7ce6d10b712ed9c97384a1d7e05b2acfff849cb259737422 +FAIL COUNT = 53 -K = 8f5d60fe1cf573394a1f266fc9a461c817fcf610c642a68f41e970e50fdbc884 -C = 8727be809470c76561af787afe5fc2f0162e8de5bdda60d0875e32ff00973a25f5543c2092bdad54f56ed0fdd8c29e8199931dfb94084c319bb09a5bec3d26aa83e3916f40680e23dd80239396feb536952f18090d2d8e2869bdf9c58045fe002389990338d20f42c3faa83edb01ed31 -P = 1b0a1725a39eb3407eea3f4fd596f4b0ac0ff718e164621d4a35ebb2fb310230be54ccd2bdc40481f89110e58d468b82e2d8ea9cb3a5e3701133bf2accd96cd8e90bcb67619757f04b8e599ffd6481be17be96d1066900d858195436a44b35bade84fb2823 +K = 0d935794bf2eda9ac2d318a7a1a210f604088a51d49244505533f15a8d4f0391 +C = e3ffc1632fc83cbaa638d8f69f7f253d64fdea47a8ebed5c0d3280bbd2afc550534afdc1d0c5b499cb4c996e58d7dce098fcd62f5ee6433d52146510c36d7405538af921dd1c1d8097ee94de4c4567621d77ae20bc73cd2d39fdf2071cea62e861fe8e3bf2d9c1ee03843777418853ce0a50fa289fffb532c25ec0d767f33ce607b0b1667107ab80f2a796488568afabaf8776b6071860c034da6846aff593326c3ab812b9c44adc54ac1738b778ee84832aa1d23d93f36f6a7d0a8e1b71f95ea6875eeb60db69195620921105e32deb816a6c25a05e16f6c874b185507433264c78d0fd745dfcea60bcb32b15fdb42b800e2852e86c211e7c1e499d42798e77f951d8e3715c71c43854765c3f3e976c2cda4e1082961e434429d8e98725e164f309e7de3106b54b37893d26737567aedaa872b00108e86245acfc8f9ced7767ed6c878c0426bccb3206a0e7ec11f199ce220ce4a871d39e83de7fdc38af8eb32b247d75d25879e23cb0a32d520e2e43334b53941fe2e1fcc6c91d6f1b5b395bffcf8292ba1cedfae672f2d24a59897ab118f14b8972633268a721d40fc82084ea6b4990ca064b04f924f8ef07a56ebdda80e2a25c126c215e82dd4bff1c9fb01041247635fef27dde23149869bd708fd19abbbc3e426718f3f32ade7f24e76f97579d9bbe2300228564de04ae9b3ca1f55bf24d3f52ee1342f28ec20b6d0e7be4e1ff6ba350918d +P = 8001991768ce8c149e5b0adca0c7c6352364d429e1449c13025c36845785621a829af185114d185e444b052cdac5d20d372cad361d1fad55c5fce03a4f90b6f7b995a2a7cc50db7ae57e04f1cf8fa91d78f65ca35dfc028db70f1613195bb5bc29c10a004a7f44cd96c6e9401b4d6ffaf8e43ad6be078381a954e11b6b020cbff57ab3aab933d7751a499c9adb18458cff678dd9a27da53a2b30ca9681b91bbcc0b765fbadb3f5c1e59b1966fdb41b72f2d80f8ad01366f18cf86cc4604816922317bff0a60c0646abd894e904f165759d72b249e99453d802a95b132a543ca328c61275647ead40272f51ee85ee209eb15f8b3e58927fcf1ddfe531890380f8228611a5c2729a2996be6ebfaeb74333bb07dc0d91a0a4b65eff882c640665464be5b187cc32465f13d43732df034e3392108b3650b1884de34154779669b9a96ffc918176332879e0a8b5f683b3bdc27f038e408ca494f26df11956bcdf8203542b8df266f8ac3db1ed5294c1208bebc31069202b45bfcc6059f419e2f0fbce182ee2927b96ee7d486ed1c8edd3ad719be911ba66ce3be1139f733d032848c5013b45c46180732cafe84f2d875e2e5f7e1866ceac9ef8b540ff8c9fdd911d8ae98adb67076abffbcbe66a298fddb059b48ad3300f8907c639f42022cc11e76f4e18a3c3c92fda890e50f503456b585cfbe65ee4c3ef1af0f5f1102138483a15 COUNT = 54 -K = 0e075c3e00d29e0f13008cecca8093a6d3ed36f54b2d8f0dc1fc39574cdc5589 -C = 923df1dd89b1996a0b83b928449269324a87158197ae783d6ad1f08d6a8b81b2806140ed1c89929e6fac0495b1a6ab771ac0d4e11b984a163fbdb2e924dce852a06c9e5669d6fdc734da00cd31d5e5e8b0adba247d45c1f7d33089f9c06411a31691a48cee8651a00e9f8a41a0d93dff -P = 24a2522691a4803ed073aa6f827bfa9ecba14b01f4a246568fa8e4285347eeb263d6863ae90c93768f6cc9f69df37c570e42b5f2f40d913f1f7c5430c2be94612c9cbbf256e98fe53a3081e2207fc07dfe7772ca67ca08c31d9dbc3d818f01db4b3ea4a1c6 +K = d6e2360052acc5064136c4f070e881b257221205c7a35a9838f2a56f0165da84 +C = 2c7fdc7b45c3cbeaee0c3dc6b7622680a8d1e55299866a7d93857b0b36b4a58b27da782023d6eea98d3699784749db5f24b05338c7471b6ee894eb2300624bf71b71e65404d9a1fd9e0d66f5c9d1f2f795194cffbaab42e48333270f0f475371f1442fd77c75b55a555d116bd76282c7e0db6c92cdf7fcce467aef00c9f42bb43aa3c9ba4abb4568670e2be16285714a9b34f6ffb70e119c585c7dd78d7be7f9709b92f8a95702bed38bc24e5af80b6e1e4a4b7b6b9dee2a38f4a6b05c4edf1e3af21e276f17958c648e1bfc393863c25b9e25ef192b20dbda1da841baac0c15a7b4716f170394b99350293ec7ad14ead1dc201a653d622cb01ba44402d757d3105c05c0617efe77d1f1b15bda615c8b0211875eb0f2df559f9a444af97412aba02f1f891869933d7f7881a927ee64fda329d3518e89388987c3f4a6d80c13e6f231bd007ac1c08b6595f8fbfb07b9d7bdfea6342add5d8c4a3973a5e20ecec3e09d1aba4360ad3f2ddc8137901eac0b87dab9f187ed056d8a1c7dc501703eb9fd9130a710074a2940b07832182a56f95adc1ee83af98ad6749e86b672703524c82dfdd5b0933cb10294026f7cbf0aeec12a630192457c5dff7c2f387d16a2465b9f71eb04b505688ebb03b0f035079f3984dda650c560ce70c557b532f9d996ef8458e303a7baaeff851bf132ddea7da4ea4414fcf1f97da91a4479eb4c6e1495c83cde61fb1732 +P = e72e762c34deb42cfe5063c05e1cbc005eda65bb65d973257325bba005aa5427e729907d2b0bec5496fb1a8bb64a0a350881bb2c14a2d7f9740f083725dccf99d97ac7f7b75238f17e58179f56ec623e979e3dc41f607d5853d71f75e08b3f5a0625160152e8aaccb16b94cd10a08554662a8ff011230b3933630f29537d4c8bd2b750dc47122174043615a858d109701e02c3dcce01b4c281b5689ec68cb07b153aeb4033549229fcbf9d69f70895373ab33c1977ab1b2e941c35d9d41299f3cd55b632f14bd2b7edfddd4028466031f1638213fe17ae8af9abc0a9a554fcb86db371a502cf2a90a5c7039f44699520925bbad185057c79510ecd68440eb03eedbd6f2d9b2abe9f724426fb0ba7bc7b29e496d81aa12534d777f32005d1ba119a5674ab1c3760351fdfd871dc661a221bfc911b6dd8baa03b121559a02f3620a637d36d2e90114ce9a2e9c8397428277e95e7bdb0b9eb04ccaaf19f9d61a3c655e762f4d8343a69b87a1ca0545ed134c1619418b7b6565a176bff7c92dcb69648f9a5e3513fc3255cdbc5582b60f32500b637b1a60f3e36e129b135f1bbf682fff283aeb82f4d717c3ddce1de0e73c755fc9c365f26e25f4e3cafdadd80353ce7c981fd50a0a47d451a4d1abe43f3bb6b9650e072ab358ae21fe3485b681a1457291ba5f79fe2bff00a3eff753688a6b5a70fdbb7fa4da603a85e71817d8990 COUNT = 55 -K = 53b9fb6436bb4c32c21ac7c9f203551318ca8050e345e15a46cfe6489609339c -C = ca5aaa2d27d1c681fbe9bd42f2ee2345d37a368de383a7b1530f7d53dac25f0cbd0e12cd1a1bdb7da0976b80e75b4c9ee240263347e53d176f1a7e94f9e37439dfbead17d569d35d7ec274e6d1ab2970ac168971cd0685359bc058326ea7970b714c36ec46737f2eae11e28982872011 -FAIL +K = 8964ac1202cbd2291536b9157c688896b928dc28fe55901835a6b1575a73fe52 +C = b8a75dda5d164f64b0f8967413109fe4a25ab5561f29730a13237255a38e485d29f1373225226b37cc8d9e7353495000a6503d3e2cb6f8969dd10e2981ae80c68bb6c4aba1ecb93f8f8336fbbe2949526a0876574f17466e350fe818388d754d7f98d63441c2beedb11971946c8da936e47c58cfb601d9fe198bc3909f48f962ab40a6087e1938c038fd4c52f297772bafa86551f68a052c1e6f210ae81befb3b92142c6e32ca2f25535fd094daafcb2fa85810b63f2c0d14151a58e2c042d62e53cdfe8b1a19ccea2c203b345a1900855b41793f73297fd2d88e1e36e57c3319d8e97d7257e633f325587db7599ac7b162f50e3888b4b78d8fd95338bbfe7d9df27801cc285e0b763b9566849919ace62e58264a6e9268cd0de936a68a062c8f90f97cc4bc59339675d2ffbef8033a8c798dd57d4d3c68c89d6aeb10f6ea776ec4f477093a577ac5b7e2a04d1b85809fff4df871cef85890035106238ba4edae1b56e5aaaf2dc17e7b1969ab42fdaad527506cdabb35ace24dda3b3c2c4af2b62552649d4c21c88e494b2dfe8842f7fd2ba71f3bb2696a0fdae9e70a916c638f2e28b22c08b3b21cfbbffe1bd10adbecb6061cb16ddcc59e9007e933f58c1bb84785ec05cadecf6ae57a0824da62d976e091e4abb70e4d44f0855f105a7da6dec3c3d1ccd68f8a5de045856467ccea163a6ffee0e337da8e99b8cd15815b659ea816425d741c8d5 +P = 05ecdd0933a57beeca0aa5ea0ea838dfeb3c9d71cae8c5198314023faa558de57698e8da48520c7a86930a8a51d89d390c44086e22c26c5df0fe648d9768671cb624190cef9bb97104208ab4e83b5c069421166a6594ac7981ffb7fc13a8a6bc26e7767e989eb4e8f3ef147a4180909f4d8c841343e601a2f4fde5c43c813942e728d784b46ee65815d66a0cc9d0496e69545fa8c777186788051292a31e2a7881d8c4ba772f4d4a00e8ea183c84e1e0c956ad5fa8d422cb3bfb1097c6e94289946ef644603153e1aa517a80c4e332db1dfa176cb467b2cdff14fc7e9b75aa2236f91f1e22aea8c1e7facc73410f2bddc21382cdedc2170eae27157a3540fcf2045627712d1c0beda15b5d614c46e1a505a07fd85e3d20e9e76f441014f0027105298c843e31c4dc9c7752ebdd03c0a18569cbd2775964b58719092dd4477c79953e0f512730beb1e28544a47a021e9fe9a248ebedd7e1d1991454d4613732d6e8ce2a0b9b1e4d7e7009a9823af9408d28db78f710f598f64d4aeb9522ff8514a840f3a36ac3ae467a7ffe405ff1ccb66e9f9f33887e6bb190b0dd8ebb617b8c527fdae2d25ec7c7e75256191d1dd21ca2e9f808beb0204f7cccbe5af079b56d28857fac5a98fd452bbf57a020d77d1321c03210e6d013291cbd23dcaf0938a4e447fb914eb8830bbe98c5ebddabbebdcfeb85334fa293acd8c1d16ba7b15c95 COUNT = 56 -K = 95a87e92a4a6d4f86914e5d54fae78e26f6b9605cc0d11c9b135a2b4f3ddd70d -C = 06210587fdfadac27f6ee0bbe2d2479581680dda8987b5e694e3ef26231aea537c60fa4589a33e98f6d5f29fddc92abf7d24b8363ada43cab98685b60d9fe1f6178c5090cd4cc6a0970068b0c29d04e0635cbcb67c6d6e0163372a326986d8a9f5f9a9e7fcbd580da46711457224ad76 -P = beaed90b85244120fcadee71b97f090570958729148f7eae50646d6013204c12c3c17eefaab6f063e40c0d5a5c8563c3111e712d0176a78a49647ed45ea25ee31cdf50c3c8a44c23a9e306c290dd6f46988aaf89c600810de68965bb9b6becbbd3aac1d2af +K = e0f3349e7151cbe095a9c11003c453d6f5d8fc8b8e9d22b8750544208cad1caf +C = f02851666fe07f5255fe7532c1e8f01b3aa0776324026db45fa14e78bbf55ffb33b1eb00f07a7ecf58b122a0e82117413c7bcc910a6084188cd26c194cf21797aa7e3427ef4331da2293a5de64e7b721e5cc43b6177a855cc852cdf4657b6dc3cb04d51cc14b316856912bb194a7d7cc7513d20349b573fffbeaf6135e5b152e6996bae8b1a3cf7414284532060c636aa72c9a82ec0d9b5917b1b6d70e4c9603790bfc2d7ef87b9791b804461d8dc0145697f29578faef73db8652342992cb51a0441c88d1c4b6175b29c05b7f814feb935f475a7042d39514938843c7a8b76ceab1b15261eb5ce6439342f222a05adc43a218060a1c1df65a59ae62126dd210802d32ea171f59f6a2c062dbb4e8119d66017e1ff66a21a681f487e9b0a45a7dd08e5536db5d2ef2f47ece625f6ef41dfc04a2eec02885eaddcfcb869f16cd1925c7417dc4b7216fdca076cf45cf5be1227d2c434793408cff0d109993ab73adcc5d9c44407a232225eac144d4c67cc58353f572cc3854b3113ea3685830722e4717fc89377d75bfb2e12b7ab378d308c8eab3f90947072a458273628ccf27877490d98306974d9b6eaf3ae6965d6424de157e270e6c4a327a97590d997e2594dff27bc1486883afb9be6513d3b8dbb61edb70be624063ef6dfca9af23731b06bd8350dd849153dd203771d3c95a7a93bda0ea7d59852f068306c686cbc5cecb6515f491666c025e +P = 649bcfce56c98fb17d44b4ccdcd8756474c999147622fc1f66dbd40565ac451eb84ed151f25d1dc42361534deb7ca1eb86869359c3a29a6e91c622345b119196f5b31d84c194d867aacc2da2624efa2fc2ed5690ccb74d80e13b09584e8aa0deceb710d2bad082ed50ae344df475934155d8956ad5710fbc6f11cef69c7c0b5cdb17e47613f348790d8050662b674a48aebbdab772e825f8a90bac2c4edb8ce76a54e4def267a6b5429b1bec20f561499037060aaa687888ad51c8c063c5785d4f699158c410b106386aba9f236306cf8e474ef5cf916bc72b4b6bef4d2172f4ed961d26f6ec9fa452f311415f1ca31e0c8d5fa93e9e7b5045ea79efcedcfba538066e32a33a17f26848bd0fca79c0cf66492b98b5ef233aff14dd596df3d8ce746e193cf39b2a30856360532ec8b3906d247a93180e50afcf581b85f054c24b39ea5d7d35556950200e2764dde76bf05700e2028710869168c760c2ee7293f88525b0ad5e85cf4d2bdd82dfd312c2e6d9e1af3746ac802484ab75e5521c988ec05f90594360f8ba4bced6d9684a22134464d67f6eba6b048687f1802787422bc469a5554d95c255c30d251430d95404bd261f8b05291bd61d28b57f07029c7259c2c65f9691e2e235ecbf7b4a82e479cea155d0c1e4bb8e849b1a30fc056f28c5be4865eee77b90aab555deb9e1f849220e81aabdcd259ba8f0a00979d9bb22 COUNT = 57 -K = 47b5b0eb41ef13aced0e08d70641b71156d11018e020287a72bcd595a3305db6 -C = 919e9afc364dece0d90d7d8751b0fa5f7ec9d79b122293ea10aa27b522c8032476aa44979e5ffd7755098ee0e9c6c379893bdd40c9296e989b38680d25737c55de21b241f85640acdc91551942d0cb03ec1ef9f5900edcf9c554aa760f81e0f897ff1f2400c2d77fc190c03dd595141e -P = bc5de4a4684baf02ff9d2b47795990dbeb5bb1e7cce59b6387742cd6cda662efe413643818fa496e01177b00d445c44473d8d1abe318a63787df499ba0809b5649e40d0a34f44340c87d305872837c4d3534bc75c7b21e7870ea121ae8b478e2e44f023b87 +K = 98fecc6e6409ad2f6c9deec74bdd3b78b5ebcfaf6d5997b5cfda285f1fc9f968 +C = 65328c11f11281a3bb61f8020981186fd1ef99ef53819aea149785107cfc3ded9396008cfbceb8dfa82712832f89c47e723d49442b94897e696fdec328dec0fa667f83153c3aca05dc88f4c8f3438052c6bf8219daab7db893c9f249255f6111e5c1f18e1cd2ac1a51a62fb056614fdc3d1160fa2a8918e49150b612bcb0479cf3ad66b56d9aff027c3e7bc147e103545a6ee105030af37884fc05a3d0fcfa8e9736f6dd0f5c9edfd9a9d2d9ef028cd10b1c7341e745aea95cb2e31f2dc5c5b59c9d96d0922c2cdc6d41a0bba30d188b32c054901322ff9969ebe612cddd2fd0e1e6dfa6468c17f1af09a946db5eff1f283650a55b555bc022a643acb61b6c3a5fe9406726e62e62aed226b902b73d577f1afaaf971a1533f1db9b6039900c496e5faf5b85285367016e354af1c6b5d2a003c26d3798410b58d4058ce0a23bc6ab10f4ea727b2c0b692ab0b90fd6f254bc0df1ed745cd9c5e1ed8970acef15751a8dedb00eea03f3db2cdc79fd43572c2475562b47ed92ce48a374d19655b0efd394853b7343cb8df104abea83c6c3079288e66142d3ace5647e660e9e381beace787856fa2ef39bfffc0d1b346477de442f34d626394a836e2109f067067c13cf95a30aa5d0e65958795d7fcfd3430f2d4d8c78581407b236be466565f83925dc637697590c0de3eba2772517c4d370e64d9354087fffff4a9aaa9739a904c39ee0d92508c4467f +P = a938087a9cacbc8012d3f6d5e15cc1f4bdcfecfc06be3a6805b50b05fc4dfaea8cf209eacfe9763ca778f8030837964c8d5c437a867660bded9e0504faf15c39b295bb2ca0080a2058b2f89c13562abfc6a1c6e72f1f110e54a55bf374dbcdbafa81da0a3433ca7200bc4235c1a1fb2df5797992dddfdefaa9f25c47e5680305514a8a2daa6bda47a52f993160adb8ea37799819a766b16ce1618efd645ee22e1eb7abf3734a8661ccfb14a86d61d870e4b5d74aae0927b053c4350ed42f723b5c435f4784a60cde99736bd480a66c2292b22658b47e5253b14c017b08b5a4d60f5f7efc264dfe2144b796ddec1c4087facce1690b68ab82153ff7428841d1e2e9be0da8acbddb60c0a775839031c1dc92e034205e004780c2a39e6447efd4253fad9c6c1edf1537dfd55ec9d140b3ca933fc1b2b66dd3184d7e5a3e7f4eac857c7358e649cb1890f4e281b4ff3efe654b550e26fef60ff507d53d1a07cbaa7b42e195a7c4be5b36d7db6d7b9835fad8b21680efb0e8ca50ff21baa7649bd7c488763c581de996476e1273dbac370bb72c5e99d13ceba7201b394cb89c91a36d68a6b63ecd6b54717bf2175dcd852c5061e3bb2bc5e280bff22fae775240d5fdacbb9759cde47c6289eed9a08638f86c478eab9c3e3b78494cf56ec03a5add820557918db7ae9941727ddcd5eaed87add3cf224908ff0e51859eb1d75432c637 COUNT = 58 -K = 8e782aee3fde21e153ee637ecf81a118144fed4bb32f229082d3db7d934b18b3 -C = 19cc2d58ef646d1a4bf5eed7371f55c214263332aae297cc4aebc886eb2f5e092cb89921de694fb26d501f4fd96bd5b219581c493433aa490f7d99418e5c08513e817a1ebeed84091b482b7d2ce62e45a078e024008ebdfae82dab45c211ef8bd409a6df0f6dc6e1ccc4397648c3c761 -P = f4435880c2b20b0d2e18bee491ba69125c3571e905aa31c95c7f3d123be1ded4db68b83d35e930f500b5dd049fb162626f27491c9b75f297867bcd12ccee8e3964d1b997daf0bc815dfce7a8fc4eb08c0e51d7d9c630ba8e3fbc2db7f029669b2fe86826db +K = 60aa2e2c0e04310fb3c5d698d77572394eac594051e6863fcc2fbd3b91694c47 +C = ab469932b173f1784240ce9360a5b16351b457224ce15e3d6b9bfd4b96b849a1b05d40b7b5cde7dbfe5e3d2ba89cc06d43ab3d8a71e6b0b76a9d6c9fcfe7112b64dd2876b3ca3dbf54699d6eb29b2abf75726f524c13cc29d45714d68fc57e0c4fe9fc74c4ec30232250ff47df4b1dba9e6c5e82a3c43d60ed2198dab60caf578a246bc020f792129ac385e3aececdd06abb0f34c13c264233905d7fd6210f9292215ede1e0188494b53bbfc8b4c4d95a2d2c252e60d1436901b7aa0db506110404605926dc916c842c564dd577928ad0e1be0c6872a3500705180ab230244657a290855d649b8d05f977f5ff0d53fc10163c838dc07b9729182c1547f8dbacef559bbb2d5e3b4a2fab0482dacafce2895a64519a785d265e38e006407504ef88d2bb63c60d89fcfe2bf061041de0f94fb3502388be1950bea0ecdcb8f178e5ff2e2ebf83cbd5efced20f1ebbb090b752a2a003abf7d59ca2358aaacdd31fbeaf9ed6289b9e5272b9fef244de458177a03b38f92314523b1edd536bf0d19b1cf0f1716c9e761d4e25a0a23ddfb892c8abbf4469fa9c592f45e11082b75268c1fc626e9e856f35655dcd5edc9f8c7c18b0f5703c8e6bf4c6f8cc2ee5f70586a3c2f9f00d9ad0dc0ff82aa8cee54db4799f1875ec81927254a5fb8b2a15b853dccff2d74fadb0682fda88d7eeeba5a36ec4933756031ff5eae15572a0a3ae5e13e9acc95f15aed34bc +FAIL COUNT = 59 -K = 0c4df5003b9064d6712c6baa3f6b1ab45154cdc78cded244032a26d84aafd082 -C = 4028d27b18908bbc5aaedf7b0ed7499b016d9857e627e09bbbfe73062b96e38fc29f183fcd2310383c748d66e1d0ccd797e8efb1a094cedee75c15732a1789ead31eb0babc05b8f2f3583ae2f11808cdfad5b06acc4ea63f5d0089186d43cef877ee8fab1190cca1b0affd91742c4458 -P = 13f47232bbc500485ec7301d0967db305c3b4fe30b70806b1bd56781f7ec43dc4a3f1ffd46918582483d1c09f6fec7b8c3cd0043e44351314d2e0245d6976adc946197fb37daced9cc606ed4f6ac836ed1d4a4340a414aecd328943a978e64422a5a2d046a +K = c61cbc6fe12f70dbd7e17bb173aadb2617bf4c97da7602f0e76a9b54ededff31 +C = 04332eb75769ba283440d49902007dfe449be9b2da60c05b4e7b37e2138ccfccf624165933de34354f5a27908d3e5d5dfb1be47c5f418f54f84671e3a50e9d47f43c410e25b27373090f8629fda3b4c71a7c63ae9ced4f9ff5b252803339747c1ca95c7ed1015aadbcdad753f69418f716b970ccc15762770ec5ac0d7c9e91ee3de71a37519a1897cac08bf083cd9a96e6a851601407b33170971c075b2e36d8619b41864a3fca97ceaa615849b0589c72e7e28f2d698c0bb717108a0156704bee30f510f0a752d49ba74c1a9eee72a0b11dbc94860ce295aa556570827e39df8fd7fda022e75d022baabeeadf19bc7bc8f9f9e784934e92be5921e185e07b3b4c8d1018559c79eaae87c2b520390c0d8ba3aefa3efcf2127a411201c383c1d00e44d2d8a37ea33ce4e16b93016513b2454926b660f59a5249162d79ee75247bc3e479c78931c0ab3d9f1b3f75f71d35426fabe948c9b0728b9ab97140004dbdc44aa5efcabbf978f9009ec10d893a78b9f41abc5f7d6444fca872e5b9f5c2c78c6757029d2b6e9899cc6981a8d180e4f3e5d90d042317a011209d9498d06ad48c065f2b1e4c41d603bc771393375659755294e174753eb33560765db2d88e861e199dba16f412e29966834bea49a53b89708313e6c05d5551e0995e9f147f7f2dc257c619bab8705d7a5f8302fde2b5a63d9358208fa18782c08a95cfa504a21353e6a12c95cf26 +P = a1fdf064722a24958bce6e60b22b959ca1cc76d5c37dc59782667de83ac789bee8b5e4dc16030e84d985e70eeacfa52bb8fa3b2e4400fb17ee3dfde6846dd23ba91e0236cbf7ffa12abb99824507e190a399d9ab0dcb5a909ad340714b82c92cca93a8ad4c47879aeae894a62fb40201c1022fe577e2f481f6e7f9d9df79b11bedfd039c06a599ad851b009c40e21fa788119d6e07b20cbb07b3c2d98e504ba95c99171dcb82548b2088b49474a901b884ffb55c4b49ad051693fad75cf5c8494d63a44cf7a3d3e68a17be1567c078a44b8e0addbd247e7247795936d3a995c7077e2b8d4c9a425e957b781fb4d8bca44d3d0ba7fe798bb0a771c97aeb04bd8b15992b5964fea97da35c12632b6f42db898e8afbedcd36ea2334072b842976eda1254d6554dfd632206e29bbd0d42f59971235152834c72e05ebbaa27d3bf93ef4abe3a7a6bd95591d2f44a15cefee8c9010562e4d0054ce3c88c3c42a5cac08e610719b16378f180dba30eb216be6a96c1b031e1a879958e1e81cb50a81cb50205074de39f0b3f5c712127e6df87c097d9d86251196a2a69cef608dd9c22f2fdcfc4a3de07d05343cff34cfbd54dc8502684c3428144550e9faba298fd64bf519e28d4de1d124f8fd51106b12f50705f61e565e8a8152ca42a6fde370410726126191b5ae8ca1f347992d438d11a1bb02867260bfc16cb34611f33c511e9390 COUNT = 60 -K = 7812efb4b99367ab9fc31caac2293c01055998288eff29b672aeb7337cc9565a -C = 65c6449bbc41ae1807d42f1285b637ee4fd5a874a200631e976a9f7ca18b69ddc89b6c70a311eed4363d2ecda157a4dbf14b7a8adb8411b7d3a9efda8f23f4924ab933723a42eb5dcd0dcd502b35bf48fef249e8b774c78d089c9fff7dcf8d0b61d27628121d787b646b5a531d2e44c4 -P = 4fb93fca33f64b0b36a66b5cea5baa564cee6bb804bc48fdf5400fa3590d9020441facd7464fcfad0d19f20d6629d9a2e9e3a9209f91d3779d2cf50fe68948f801adad2b236fae9f88d9d8b1e723399d735af04383c99c729cfd52932f93b97b68c5466776 +K = 68a169c669d1582149d6019896fe7691f549f28d7db8d15113f4c2b4740452e5 +C = 592dc690b28f271b1d965b81b787e92e7fe292935ace9f8c980ef9480bbe6df47d858503ed97c23fb1469435bad553f680afa76476cf76abae05801aae83db1bc2ca2ad31504fda6255e7bc76bfd6e384f60088854257ba207d7a90943550843130da9f287851d8988988c5af7220c3cb5372a1b34ddc9c4784720ba41b538af4213f5df47e8bf8e46373f287b218be4439fa5596beeb20a37c32c422b631797d3f8a7c3b0d44e16eb33666ba6351db63f92affda2dd351672738b5d3fa82af8c884829d275c8b7b2014a79fbc10d3c4216d1802f4cd86d4b408ba38aa57b60f697554c048b689989d9a7f775249f65b7429db116de891660d4001a1cf1f8b9ed0b54e6a8a919e491905d1a88bab34c964c33a780757f4d45e5216e27fc1616d97c2bafca098382dac06b14f460ae32ac97ba5f9d4635b20f0157ee57b9f218638dfac055a1fe83556376d78e139a36d2624a200dd9aed71dc4efe3abb788752a17f234fe11c670b4d526f611a70385c226afa5ad3972e8c00ecb3116c56d6d830d2891f385443f6d581e49cd0c672133e7a8328b9b0ba8f5a540c2f4a8ef0b88bdb938b9f7777ed1e4f0ea543d4193a596b68f77d1bb745531ba4e3aa9f856a761999be213affe762c0f1c2a13d51e20f7fa7bdfb1aa58fcf768b1bb1851f741e7259dba8618af31b624f87973ca2b1d62f9c013d4656267ca0bf03991080f2e5b2e15b01db7ea0 +P = ebd6bc319a95029787f0523eb930a07334248c0fb455e0fc5b3f8fce90ea532c0f42ebe103959f87078b41542334bd162bd664d3f3a2a1e31b0680a3a5bd6c73b9e20db515871275a4f3b9a892c944509d3096f0167d660bd966ec9c51962e0329d525746eb8dd09cd119568d745719adde959179d5dc793038e8cefe9750d881ae09ba2bad85ce37a449876beb706c9927b105ab9fd5e402b659bc606a211c974d7318ca9aefaaac42318bd4d45c58476855e30eb17b96491f48ce21f1a8bf273fb771896a3b07dbb483d759aa5e58175a480349b5af7d77921542b4cff97e2102e8b716788c689606bf4636bc5c43891b1f248d7aa07ca1adcadecb675933c691441d96c2834300c30f22008ecce97a4a345b6ef776a1fd2243b04815703f9ec4a0ae61cb95f67ac02c139d353a0437509f304c53382f6a21bd02d6848ee92c6b8362455542cab4d24ac78b0d876ec0b7368646256341cb129e43c2154a1516a907a8058fb8911bd6545398c02aab2d28c0b728ac6532718a33a8117a421c642861fa71edc7430de27dbb1599b5c587c70f7567f0d416fe9eeca321d6836d7496e4ab88bc82c6df8705b04b590ad075edc2b7cef385b5f2a7b2dd09c3dd1c57e9008106aa1dcd075a3e735b771ddf5f46d3387b9677aaeee1ced4379ef00d46d14d46b70e45493cac100def0f1ff50a584f91352bae39a5f70632ff1058826 COUNT = 61 -K = af39899e126292c0c4b39f40835327bc0b07eb6f47a554ee8bd449301fcdfac8 -C = 57a9dd918740508e631bca54dfc769be742bb0dd1b0bf9b71d1a0a128c98303d67b5434246825f35382d6ba9dcf5b2a1e212a611cefe1db39977d5a13d3088c43d99e03108b46b85f062e4283de500f30cc913cf6e46a4b12d6d861f05a0ae84cbc7f148753a1633009314211a86d38c +K = 6f3b467d65a8b02855f6949acd350d78c01ef254b92e48be3f868629bd153f51 +C = 44b9af151e13c5bff68fad38d0897e760a623ee2b944657b37b8aa20ff4817af08141deec8ac331d4c5137d98ff55a329d43371d11cef292b647406f8ce14c6a7a39acc41113bbbea27149e21824314e9ea127ea7d544fa2c6ca675081abba46999aa9f8de158c66bf35604ba8302c2a027f523f8bef086ee3be6de8125b780f142068a48c1447b756077bf801bed68b492c841c7882ce292f949c7c39fafc4c15bc8b9f715ae08786a42206a2e10c9965d122e2cf61617012a2d30be1aa0e6099c6f7bd8837621dfb9c645613cc0c8825146a63a8ab23c03b68103bd11b1d3cf7a07231ab38499ca29bbc12954b0806a5b354ee5bc2816822f662c6efee04820ddeecbb07b3a16c321bc3933f61f4cdbd164f44debcbb02e0965da6082c03e6b94baa63b38543a366042f2ed2c0a6c149e1d8e2c4cc6473dc67af6c438dc5fa624e22fa7462a1252bf95c409586d6b67f1df1aafb003fa60205528c36c66f77c5c30834d3e8ae8a147d0004561d668205e173034cc61de8718995c7033c095f312ec17e768a5aa2909b48e8f0839673657934d54514cf2f6a545e044e61abbb429890d9cde07708aa52c8d6ef056b47ebc3033c11c895966433213133d8fa1cb123ccd585164638ddc6733a378359856e43f505c43eee592e6c64b17fb741a1479d34a41202a66f90d545b7c433c6219054fee765a40bd0522ddeaebe7457903ec0e58033cf387d FAIL COUNT = 62 -K = a8c3edfe1553715bc40264e6d74542ef03b7fd4417203f0d68367e1d6fa98020 -C = b70826d32e7bb7e426cb77ffd7d183dc784d6db99066bc709874aee493433bfe03c8c9c1f7a1427e8edac21819078d03ed77cce77d647115cbd61df16a5fb61ac41857688a83a9e2bf3d44a32fef90cc383007024281def08005e22ce181b5d108c91a0ac7722312732199c943315380 -P = 34dcadbd06c5be4f6dc5e7b5068f61115c322c12a927934616146594147c0a6adeb748b1a8a1410a5df85294b6daba9d9c09d489d79319a11bc0691ee75323aecaa23855e9c0524fb34e812df7823b837665cd70b65de44f943cd67306274447cdc68fe3f6 +K = b44bb8e06d7849ade4d849157a55d3848a623f1bc419caf7b7f9f2c94dc0e109 +C = c40a16a5bff495585689f801b48968beb0acb5b7abb06c4e6ec82fa4b766e9f03ae6241161d20d17354b08c6188f13dd5c899b23d969adb72f3fd376f3303b2b0f296d3780e800de82d73c4aa3480eceee0c4b3b4aa67ee9f79183a6d152f94b9c8f978dd43d6cde6fa4fdc4db1f22b266245dee437da8104415f140921f252a27d4c2b4de94ef7228adb4c5de2863e5ab6e9563b37cb5319457ed3844f7f53605d9cf18fc1e4d31fab58e976abdf64e86b52cd1e1d8333109d195d7684452f39927b8ea19eb872db6e9ddbc6bedcd67a6bce3a8e7c375e2f5d5a1ea3409465dea4d60d1785569ae43b4416209b1dbcdf2939bacded8f71c37d5e742588e759003766fac7459e5a2917769bc5f10a7e870dacfe27d36d39a518bfea998e35778f27461a55fb170e3fce0e181271863a69898583a34a64bbfb8f395a7a788b661c2958a4ed45e4d28f92e177376c14aaaa7846b2339e4b83851fdfd27a452a755d0e203fe0eaa726f651b24f28e1d39d5c906dc2474ef9951b9dcb8f0e63fc4520f84cf940cd30d5187aa66117bd279cc69b4a5236ba4b8c728cf0be669466fb467e505fa26f0486d2540228ec5c7a2e6b7648904ae40cb1ddea24ef0e8f110b01363ece9e7651c97985d7a149e23e6cfe6e50f29303e441532dc5dc09fd6949cd2383553aaf046d7e9569be42164550f199edf69f492430ff2d75740d58f18159a699ae2e97aea59 +P = 35bec33f18fbadc4ce5555c783563a2064742b8276576e2fb3452d5083dd0311c088f929a499e552fab10b41934795bcf931fb69ae08e1d8ecdcc5c0b5611cec7c72f1e2c3e36052ede3d7c40916aa3c8dd28701b85b79f28391934c386e2cdbe0414c2db0c08d020bae4af8d7b654d96f9e9d56d40593d03924a97d47d559044f1fd4fd6b5b1b1580f0a94171b5804a7c4556cb02fea6b052482db80840476261c0810dfbd688c63177755bcf1c990b15b7fb68251de7857f824a6a598a385364bfac5036b45c14034858d9287b8c6943e7a13ecc5583bd20df5a0e8e79efe02b7023482d74413a8ba57b6dad669010ec7cba3a4094d34938e395e2c928136f6b22b9744f94d24529b67db333ee82f0f0d5ffaaaa26e27b7aa1030beef14c5545f487b3fd222c51561e005a84500f712885cbaea63dde92ca16265e414ec71e6584b6eb6f80c6471b7f57e90e70b9b5397c7ce5d5d06aad17045ab674082d8290daf97b708a70cb74822e1b1ca60c543a10a95a312eeecc7a79eda2da875e01852840be9fd4d1cccd853cf63d7474ce1fce828329105ba03855fc74eabc48b572eb1aad5699d9a5e680d539265c53aeb770755b5c153b62e4e38d2c4b27730e906f994dc2d4ed121be370616facc521a13f4fe81b9bf16cdac491d64a01fdbc6f0b85f4e39738cf9ce6f6510df7eca97f5f09d0837d9f997a1303b22b5c510d COUNT = 63 -K = 9f22397ba6f9aa96d1b49cafc5c96f84a84360443ea58c3f8884a3f23588c26f -C = 085972089634576316b5d1b6cb1350a3807463f4b96d32df0500d37b4380c30a8ca0099935aded01faa5c003d996257c6cee24480816943788a7a5b6e20c791e9e6f7c52c343d1e58a66eae6047c03fcc8abc93c106ed08bfb43a76a1b164c6e174dae7892279b06e0fb3ccb9ced9049 -P = c0811c0839758fa531af91ee5bf5a62cbb108f040ad629c2c40b82a1b0e27fcf5d23c772612c914eef65be1b74d3e276e471bebfe4ca1475a74df4753bd882e761974a46d32a78af990cb05047ea8e62e6bc7f3978309064eccb8291dea8ee16738b5e46ce +K = d4ceb86693e895f42dab15aafb4259883280e314192fa3b02da8b50fa0b04465 +C = c4e030c418b936af33a72e4a608e10520f82bb9ddb2038143763d2b8655f2601dde167f97805ea1611b5322cef6dd40ed1d9e052a9167a4673727663a6b7d47c4a7b5406775e1ab07578dcbbfc7d0349e082d6af991f7c797b98e9da281721641c0b04fa87e4c6ec11d148fbbfa76012bcde63155de60fd9fcf7011e845a3cd793058c3af88c3a8b401bbeb50d2a907ce9bf1c36a8f348d42683db4fa679ffba9750e1181334b0d4d6d3da0d9044139b419749c1943cdb983ac4d16ec831973bcbea055374a84c61db30ec219c77a454a79b8942afe20361b42fd8b3700fce3264c127b3ab31b1195ce9177a4c5c21fd10b5c3b44ac0b46d98cd24c64ce8dc4d9d56be5a18739685974362ae8b41fe4b8c89f9da952293abf4c288e28e0715e0a58202d989109c6a74292e03244fbe0ba135a7fff531261b11ce6fe3f0adaa5017290ed16a0f0d30ddc5394a0775079609e67701d6597839f5f1d0167f01637509e121a63af4a48ac0329b9d9e87e88971553c4d40feae62d92b36ae2359833a8f542b51845095b0d83c0a3e37cd27ccf13438a20bd15311ef5a223edd51f762820f8be1325fb47bef0179b6bb375518d9be84d3fc9b9adf823f3851082f38df4b8a65c0cee46499b94caae049385301e01718bdb32afa1a7dc6dc76ff16451a3ba73d5e90585e425d07003bf17dac4ba8e0a60aac3f8e2c60db71d4334edba43d735e3ecd6762ce +P = 69f9fed8eb7a51aae9d2ee9132e4ca2c900d5de73c15672e0604270a8ae024e3cc415679de2172aff11cd3b7deed329a54243e17e278b8296a2311070b4c8699634e183294b3ddbeaaa650879b46a749f0dd771072c220d38895f4a2a1914f7249504f11d147190cbdc4d5006c338cc62f834ab3aad089c34db8c7246743c7c314f6f77b7724981f1905c60562dd42737ae4a4d11649ad3fc61b7747b076ce38be8f7a40c8b6c2abd8865f277ec68c104511bd4b69443c8419fc332e16402e0900781fc029c177f09ff04c4affd668ba24db1dfcc18cb6eb1ab1df386aa7bede8aaed2bae1f315b4a70d73f8ca7b7538b31be624c327f244686cd275ad4cba11aaafdb4933af12fa1f4edcb7918be23772cb1b8fb832c882112296e5507bd0fb270766922f2c6fc1c6c79698b784bf07cb3baaa2a186b88bf5e06e2dba228fcf5131e8fef8e2ced5b84a2edbe4f635768c13651e35b9366ad44f733516b87b1075d0d7c988d505e6da79e332b7fc2188fc2115ace8e5898bc1d92e76d90db89cb3e393412eb77fb69bdde2d75d0418d50f946142b17df5b865c52a1594d55ee2e043845c431a3a47de09bdce0167b3d5d8a29bb188fd484925b7332cc4add160077ed0b38b837de09881b245667aec7abf42fdc5d3d77148fe98a25e91e1d959e9bf19e56436b99f30324ec13b59348ff1233de1d14e9a886463fe4a6d6a9521 COUNT = 64 -K = 84b729582068da2e6bc256415a6e9481b3519f37d9dea31e2cb8c68c532e77f3 -C = 17537a66d41ab25b1d7a1b9309565b5f0cdaadf8868aeb02231af42496d9f3626242f1985483c21f4a23edf122d00c3ca7c904c0d2d53bf03d28c24ce12cd0d9674522bcf3476e280a2d5c12eb5f8dc0ff9693efee7c9674748486e7d1c6b4d62a1bc1aee3620d566e84164ca1c773f7 -P = a1e5299ad2d90ce692985bcab76051e7371211273b1eda23e6e8d0b8e0c5f1bcfade6d5724c949f6941185912183b1046db64d64b688c55ae9e3889ee7f13bb9d176b7bb43e464fd042b3f9813d2745014955916f82e0167bba37f6b2b56a9089dfba4fff4 +K = d2adae186f979e2b3d0e50ca4ba925406f493eacb60629a664e10bf788bbe8ad +C = b871ddfc71cdc52d01eeb8a8393ae0ca44410902b8ff0ca7ac2c678cde2b4bb7b6571d572e9f09e64fd97c5f229b47ac8cb093ea9a8d15ccb32fec529d487283ea8715c32fbb21316880c966079a84030ac5fcb2d816c66e5953aee225012126bf47c99486a5658cd19c75e1c90e9a8c5f7671735fad47e8840f33ec95dff81b95468d8ce2245cc69e404d0aad73890927675fae9e335373704b5393a22b97d4c9f0f29037e503a08f5865a4ae8f33e6eeff12f01609760bc0ce86409cd3fa802192b679bfc9bde06fc27497d0c2b33d9c55ab2131a7eb26d1422f3b6dccbefcf7fff915102bcbf9cda05bb90c1773f859effde40c54bc6eb260f2bb3785ee02a151189bab1e0e0cabb4cce38bac3fab2a5fb6444d75f0a57e264d202680b02bab21acfed9706a0805e701654a94e0d5f343e192aad6d200be1652ff41b9477086bece891713958bbaedaca64006bc274585263a2fcc6c46b3fbecf204d5248b76e70b5fa39f35b76dcd8fb18aacce87fa448fc84ba20f2ad460e083a6d27039728747f7098d18c516dd7ba69a592c88027c563dfb7ab530a33281d561422ce6126e700438d35904af526cd35fa923aadb3fedc19f781427b84e96a7400d9d4f641b3a2e80e80c9a7e00e4d3587370afc3d8ec26fe31c3bb9463102cef5e9d1ef5b3178be3d874c8f4a9d6866b846c682c7242a8e33089e444bf9445b08993b9bebaa9a1ee0de289 +P = 9864a2d3c803792d011af3aaf92ed0e55fcd7f947ce4cb9fc2fdf2431697d247f9f24711ebd6d635a8462e6427178e88dce380ac54c91db96cdc185aea237bdd82341a67501c46037ab0992d4d1e7acdfd317f6f0e285456c699cc96ad0b11546a0de29f229dce63b3d53ed738e4ccb1e4d11afee93a3ab92a652203d3e22ea0820d2db95315db3d23073b9e33f2caebba879ad2efb064610144b6f471ab2b38156833280af920d7e1aa8b5b408a4c56e659dc85776628ccc263a5415e5a1b86b21867e4c598df91669ec47c5faa10c54851f73d2558c32f37d4647edb0e13d4a5b599e1efd5d0bd8ffeb2475ddcdf43081183fc863578528a241c8ae720201425b02f55ea9fd0dcb9a59c5d214b543b6f28faabe2464644a897f38392acb562eb2797af7040b0d6cccd6a26a952c49574b612009090cbce7b03b4c0dec26af37a6c367154d70d532447ebe3d38704f134d92e57cf120c7bf96565c3ed18e57463bde9725a11dc4d7ccc22c8cf8a08cffa2b5df8de4381fcb82597502fe55c2449e00b5f17ec130d6e03d5d4a9655d554f61ab8655baeaa0fd1190dd532c3c9066811efd4c46017b98362e7e23add01d473bc4ba5b36c5cb5c82430ef97286187714092d4484fe7a1ea50585c5ad76c5df635cd405abdcfbd473849c2247ff9ea2e9e2e46212acac65c929d7535cfb7c863af9595caee4f341cdb193b4e53d37 COUNT = 65 -K = f4b634f6e22f7a50ebf7df8de6aa7c7a724f4d7ccfcf837128edb676be505509 -C = 3dd307e43ff179009ce5b8869d18a5973f2908b0ba50ad240ad8a4091a71769d8e6b1d54e533f53841640e1cf5abe7230861a2215f57d7eaeb1252ce9119b96ae8ee922cbe5ac695dee016390334297b90d1cca0b8055e9381942452a750d25e2829f62ff06ca81f2c78c5e8f0952aa5 -P = b026902143e544e51e77d82d8183dabfb5b6d9ba39d2e62c0a16084419c022e3ad5bba7aacb4b6d29c5d7cacf10077bff71c4271db32a1ddb3c05677446263e2b2eddb71b554a447cf04d14c999e3ac9024ffe835e273a2ee7ff1030aba33b11afec792632 +K = ae4849a4b3bfc7831d8649464f5b8290baa4c3b6911d2f7d80f923252ba25cf5 +C = 7d7575aeee0983edfb3e8065841228e4f7c401076f7abd4cdd49ce7e5b0bb68c83e56459f517189b8c4b53ccf1c445b7394e12380beeec6bab30466978dba61aa41f824f190b28de5bddb42665d3f4291427c13b0c8ab7e9198d4d53ff3fc10150281f9cc55503019ddb85c1c38d71a6aaa06cbe9200fa333d97c66cc3073e1ddde19831cf39900119847558ccba8e17c4d7c1ccaf7f0d819a82f64ab51f4f5aeb667e8f58fdba2242c8e2d3b04aff8bd1a0c5c8e0e8b1c0069ef80008fc6d3255c419cb274004722368d3fe812fbb319df5c981d7182028f040f2a53c029be849e7da91d3939de2f475ad431f11caed1d67b56bb5c297bdb0e85da6d2b8aaa53cfcaefbd6bfba3153783ac9a157f63ad7d2456495a3316f6f0732c96a2c1c3f2906141bb1d2c012727e9ce6e166ddf3b030f17ea53d4ec06d205a57ce9dae6ee43359d0789c7cd272cd7b422fe861dd46753bfef8a17da7a7db0ae46c10f371d0fd322326f7cba5f9fabdbe197a1b761e061cc97fffaea995f4d5400c34f17355809ea97bc53ea19f0dbe21a563acf3620ff4ae093879ba6d7f11c6dcccfa7df85f6e61a95802090dcc895f9ab3d460d2621d81d7a519fb2a1711687b40586f2a62b077cb90debffa1613bfc4eb8c757df6810716737db2d7c89e39737e95e041d36019c6fc7cc8a1b3bb447116128671462385717494056132fd4da8a1106a0ea7ef7a69312c60 +FAIL COUNT = 66 -K = 2edfdcd9aae47875f0b90076f3af635ca30f131cb1ce26366f27ccfefd382e63 -C = 8bcaf6142ae78e80c045c038f4ed55ab25ac024c909b8857e05bb061e4af6e48097944085613f444cc8d2c056a8cd6e376f0c55a3fd925f8c197e8818a81b46e86d9ccf1d040043ec4c0eda108b26a975495876e391a6bde7126d4d2157d58d191306479839392a4f02b807420520e01 -P = 146707c6934af1daf64481eaac2f5b856ebeaad112a84b223d7ba5600944fdc811d447ea60284504581350f2a825a09fd267eb9116174efd58c25f2c90d4acb9a7e987c387b9686ea9868ffc3b68564b0ac40f0e12b98de7f90356ad012ba22e8592a48aaa +K = d46bfc1c88c0fec9249b8e4ea94db30ef4f6b1a8209e631f7700895341b4f13e +C = 64f40d1fa233786f20e80a1ceece0bc8d88dc317b324025a18266ef7cd23c561504fa8203273b6ce2b2c8a0dae2b3da9b1d583c191f5e0d8bf553cdf91870b0053cbc9a06e70f66febb0bc5f1b780f53d42460b8a7232702be6ea0e2f5a44e5fdffac0a5c9d7de74ac3b987f88c54a99a473823e97fee4b510063d01356031ec8894b5a77a835df4dd980ba4dd92b326d96e8ce07677d0d1039663498552c62b42714a3f943daa5d7518306d8b9dee0ea17f464ac402a85b05806a68c343153b1185842e670306de905c25f7af54dc0e8fcb8ef65d5598f86e9082fe21e008cf363209cae00fa0f154837e258266125b32d806a37c6e6686add033ab26c9001aeabd612562ad386a6bd0fbde62a62c1aebd98c5c61e6bde34deaa3918e0b73d75db0b8b2e590c71401a4155f3f3cb10196df979c1702b5435ed675c50228417bf9c155e2e1bd639f52c1cbf1ab000ec221eda8a69919f71d01a1478501b938ed888944c29f9226d9b8a6e8eb98037dd58ef4b58f496446d8a8e13dfff202a8c3c9141cebcdba1afb12d632b5aae18dabccfaefe4d0d7717f7fa082a846bc74632a192b9d35c486ff8124bcc2d773698b00cb121831be63b5074450cb194149e9868c655e2cd79841f20d5bd8fcc706e9e5ee64e06b25b7e213320d9ff0418344e19a7d82027ae81fe551c3aaff926f5a526d735ff3666e75c0db0afa1e93e855bf37d011ccd35209 +P = 6a59d42d1f7ae3675919fb87643825037fc755017d4db77c7f1c6f5af5586875c58d1887972cd3f5b1f001ae075bc2804285ddeaa7af870b1f5eb15595e132ce471772e70767666d7302b25d194bf22c5fa787955fae714ff8907fe65a71bf09ea97f1e41619beffdf9bd90fdf3cc6b821c4e324e733d115741b3b152a6b26a608e72f05759c45cba75b4303ec8893530ebb57be0f2cddcf7815172fc254ac99cd65434320b7f7a90efcaf97f811f82e9be3db0b25ddc75ec99a0948e761f9e7ec6114a768bee5861df1be2b852db06fee9aa70e67a77f1e82c7c9a1cddba7ff4d120dfc1afd20a598fb3c2327ab4f660ca81d9781b3dd186f2cd9964c2db7ef03e4809123741fc14b0b355cc90a5c953adc10f6f42ceb917695f8aef079d9f3a67a9de2f7efa9e74e26410bf8a78c93c0489eed843cc5598c0a050b051929f47ff6aedd3fb103a5790f2482f7d3cd0d5adeb3275d7324fa7266e46e852d91f7ea482a70c9f7e5b2d5cf975b9315d9bbb53a06a8f091e0a73c8e2aeea663b661dd8ae24c1e3bd5ada5404e372df3e770d3d7b4fcb86cbd50c8b97b199ccadafd915019e91cc627dff4738767fc4d4273772f1874f756a21794bbc3b1f025abe8b662d35b7866e79eb077e0859947ff313291f92f6e1b3b620715aa2501dd9ab8bd18a6bdf66f473d888937924d36b2dd92cf16f3fd1d1f6d55ed5d57a94e9fe4 COUNT = 67 -K = dcaedcdb906f745d8c7044b03b23534f03b08ff34ee890d14f06a40ce08eb826 -C = 1b6b4ac0f724161bfff7bfe27c1e2e01e188c10af8813951f1ae915474f2bfffd4e448b25032c17d97275bfcf98b4028a2ae57e915d11687b5429bb83cd4484424ec726ced00d53d37bf39d1d619492bc0026f8da99df237e71f486d54907f5cfa958fb987ec7566952c48f495b69ba5 -P = ea4bc9474204d7d74e2967edd86ee52c4e444a9e6ac36bd5d9c0f0bb5fc45c2229cac047583357791b48eb78886883643b99ea22788add437e997e32364839ff65c94525693a3b3c2c33f3ce7d1065f1793fc0ff4428506ceac6114b8cd20944b34e8b273a +K = 9fb779ae2bafd366d1b98beadface03a16ac7341054c3dd9bc3ff47b747bd542 +C = 99d155ca1449f49cda1e0e9fe6ecc68db30fc45dd1285c9b587c3d0d3fa94fb6675849c28a2f0186518f9bdb77168ebbd3ede1119265be0605027b27c68b83ee7c09ae18c6abb70b8739b829485dd40c084ab41ddc60ce84379c90c05add5ace0fc5c783328582415ec82e7e85917adde7019d2f9d9861f6b2f0cf1c99c824ed326ba9702ceb1f1c88ec4d2a5b29ad34369a711edf670c973aed7e8eb5c445f61d99aa95a44086ec6771774185d1288b229bbb9e6ba0446c4811f82eacf137e89f4da4897b004fc8953d975856e2cdc3f9d169b43932ccea8bcc4b47c6cfd05774382cc00208aa681b05743a4f4480b678de84e90fa7abc019b5dc604c6a808c86b4ca45f432d5af14030969d661078a7e47e5ab378634b2cad5cd990c13a8888b984d3af4f3e21b17a047e931c535b79573e42979965cfa70c253e4acac4019e36c66dc64e97e2d69c1a7a181f935ffce6548bc2d60b58c95973705e0e9c51fe5f728a63554244acb1ed31703e43522be7f9479a8ca83b55e64ecd7c4883c5b27e1c57f3c1dbbe8526b2dbd312b09e2f9be9824a1863eda6d4a6e35a94388b526ecf94640eccd3f29125c4e7509e773143dd4370c683aa816dacbde77d45e9a775dfabf8397dc1d122764a98055436f3d511d28dded861227030580c68a2c595497118bfcea1a7a8ba2405b32beb591e6f89ec53935f9585d38a4cac5d0190bb8ef2116acd7a580 +P = 53b3c4d62c763242a194f9fde0251fbebe8d7df84f2687eeb7e3c422725dc3c7139128293d5df97a3151677b732f91bc16bcdd4b978c2f3d9cef01b95e5b5ed41fdb9de085e5ed7e5bde2ec6df0a6321d1dd60d2c4d9ba1eb5c07cae264d244f271762b9446869f554a007b8ce4cf2d9684ec1617a180d1da6209937089d0dee890fabd846f09c98a67fdb71a5db9d07e852558a2ee3b6a7389c99de562eb97a0d298cf172b33e0398a82b4da9772c87e9959b9974b83e476ab82d80177d0dca65bb8dd12356b622b648ca9fca179e2670eb99e8b4c06c4deb1e6d57b8863e64e10da0b2d231d87c4651ac1edd8eb5ad8e3c95338a0426abe81873ca18f058ce421348b03d588947f1c2a28f2d7d2e860ba71b570a1ba1b29fd900faf7d9c1c3ecd78583d3daf4b0c7340151f6bd2f3c13b352761317f0c95c34ea562478455a86ad65f718a6dab4fc035711e1b355941e78ead6763739c94d613e2f92d820eaebabc74729f5d044166a5ffcc6be4bb077db610a7cb41b8ca5691d9dafca65ddb26756e4e39c5d480bf5148772cc263a67e5df3349de23a6f7ab6470abdfcc434f016faba21a8f35724023a6857177994bd06d139f90e7a0a199bdb621732368cbecfea82246c99c22c5fa1f906afd845a4243dd33bf8a1437dca76a71d78af8e110b57a3fc6ebf8a5dbe04f6b75d51d307b5e18283edb995dfeadcca438aca5 COUNT = 68 -K = c1bf7fc5ed431684bfdbe3f1b7fcf0a562d6f4691b085e96ef8836e2e5f0a331 -C = 04455e45d7afcc79301ec52d142448183c7151b06e34b25a78313569932686053b93e87e49455830d1f93939d1ddf0a0a337b3c2f81899d1bbb050b467fae0dcceeaebe827cac952447b0b513d4a0120c46c6974cdd6600e010acf64515d4019962810ad9e8df36c55a4306ce2ae487a -P = 44a9d16c71ab34609b520ffd8223414f49532c7280b46fae80a357e9ef6ff076ce96b7b55ccc2f9c6e673d2a86b3c737f59f1d775fe2ed9338bedd814bf857b831d5457aa462bb32a68174d4fbb4b8ca9a0c8e524f4ee6e7810089cbf2a900d42d203c8a2e +K = 93fe050028c9fd5de55ce43e0740e5faa5497f8e975ea28a24ce989cfeb47bff +C = d88bb1f07ab72f6f348d03b635ba16f5ebe4d5941b0e85095ecce287efa1b9b849fabf9f9998864a820117080b57bdc2d551a16dacc13208e098f49cf53875f7ba23061c3e9996706c7d4a9f95d806138e62dbaa01998adce17383f7ef54641ae9705daab9cdd8d87a8f598ddb56121a7eee6d8a3d1c96b427a08fc19e3b5f16815f2de44a9bda989044e363803783ce6c379f111f93c5c8aabfbdacbcc8f9841e46fd0ef1a90abca25566e24f3ba3893aeb94aedc0480fd12e219748c99fb54fcd1f150827738a7c486a4c260c59c6952e9b2c7c786f759c11a5cf5140efe6cd5e3c35c763dae46b6e9b5f9558b621f33ef522ba0d0f6cd923ad96cf63409496a357ad04190485ace62740869320126ee9d37fd7f2907541cec1b6f94c942ebcad604b50e7163952a67dff3934925144513e21a030f2d9249324f09bf5828828b9a4145a94bcc3f2c72b0a67f6a1f9700c2f6765eb3a1d8e9e05a7253ba5bb0c1c7c709bcf14a1a6b5e93bd1d1c93fdcd663397d62f83881439128814ebe1cb28c1694ed559be284dfccc975371e3898f8218c74c2f453fa266e85e0490e1dd708596e2bbd8e6f14746a265acf654d3eb05512519f6bce07ccaa59a342ec9ccfb0c893fb4bd291408763c2966481d303ca9f31f49fcbea61329f1b5a38a54f439f18432d3bf024106e4af37a5a8fb33619d9c7cdc0f226bcdc7be61d8f1e7ad369fa12d671c3a07 +P = 08ab978b2f79e551b214542f58ae5a3e4601dfefa0fd6054cc10f2f2bcce888c19baf07a17bcb58339193e2130107b3653cddb02578a35c64b8e7deb6af49d629764622603ac4f1db974cad0ee6301199fc21e65ddded9294673a44ade90aff94d019ee7a9c9085ee05d1057f21549e7d2d26707745ed268833692289b1a83bd3c702cd547b18db2910c3174dfc77239a03354d116f73d9935d4c421fa9373234470bd306904248655a134dd4570c046e61cc16ba7609e107593815172460811b9773ec7789a5dd8f3aa5ecd9d7e204ef2a384a42832efca3db9a6a32641a9429560488a2c81b25172721be0ce087fea53488280322d5ccfce69ef2fb8e9cb96996ad9d2084b86d0fe6b7ba45d22da96df30099d84b58ceac13aff959cbbed035b86435695bbaf8bbc87d7a2278c752394288ad4b6e83772427023cf1fc7e9ad87b793a9a44d691a869042e06fedb2448e29d144f9312f732fab0e54514773528007d39892053afe77afaa72f2f2ee2a13e97fd0c5256ee135a81ce8c916d6a920c54538ddd8bffcb18bda177708c1f6b4ebfaaba8b8d3a54c7bdb8f951d9cbfcae6443f2596adc32d0251a9bb55f03eac501b2adff4d607e6909bcaafd2842c9df51d09751c1dd3a04c45ef33765d0b078939801e628d5966efbb1c51e6481d4c547956d6e2b6faeb1ef679aced8e1ee6c6b7d112e813ae289fa84e29803a51 COUNT = 69 -K = dd1f0739fb44607962f5ed9d14e38e7bc7a463468839d09c66d113f0ad4b71bd -C = df86675def2b4ab78325968cb0b271f3bcff3356b0b42fcd585784929a7e6585fe4d218c76142ad9627c8385dca1e3d704b02bd6bfeb1746037a136b756fc05d5f41389d52f912863ce50e71889ba061fcceac8983b9514cdc28c6cbaca68a7f86fcc3e4ff402c160caee830bcfae846 -FAIL +K = 341f965753821fe7679e29ec8a6dace0e9cfc831e1e3bc84da478f4b5cc89d9a +C = 5be5e97410d2997d4067add764638291e475f5992a974d5b099419f17668c57127d1f742141e73c739fbf80939a496bd8ba56a436c9119732e7a99e79d9d71765b19587bfc1e86b959435eff8a806fb4ebea2a8d66fdc13baa562a27a486f0d0287beb8fb36f9ed446aaf315f1c5e9fd46800c0dfd18ad0aba6fd0fd43cff58018dda68589341dcdfe72c89aae97df76784ed5f6b75fd798bbe4e17f86e02d27facf70cdb2dc8ef1fbbc299b43aca088ad396c209b033e71edd9355984ecc7e0889d236353fd9986bfbd04dd7d2c45d652ff2587cb40c9cd6481d1f4f3e4d94b40cfc3867dd5ba1ed6e9db0cc8421f4250805ff5be3df5ee72aaaa2c543135d2a47a11f035b5f8e575568ba2ba71f89dc4df548c4911e6606b4b99f5fd6fce441b980a38db6d78cb9d16bf693b565a54128ffbca5d9fae89a08d8eb3ad73ae63cdfd600b76ce9c53cabc73295d76dd2f47850c644a6f579d6c2f9cb2ec31e0052ee0e7ad4a736d66e02f9b45c8c15fe9bd044de6412b109f1aea775ba82533214e7b68e7d14e96a8da2418627cf1a739349914a5d088b112f58ade74c59865e5a653dccc81186d1b2a87da00044f629394e6e7765d2f9b8efa4c3b2a1da569945f989b03286a0e4d76df310efd9322ec7a1f65cef43e48d769787ce2d2e94f49271ec7dbd1143ed737a5fbc501dad68176cca52ae9db671e2ca3dec422031a3289deee3e16b1c138 +P = d88ea8da896e9a3fa00f433f5c659e457dee361ee80ee22d50f49bd9710cf1ba49eeadceed3d7fd74e4cf3e506d4d18a96660a6f295c202361996341790b1db5a2694624efcffcbcc9aaac879d996176d9602279ace50cd3dbbae2f2e42f4439b908866217b5337e2f864c1245928e335437a9bb291af0d370616969a175f76c95513a093590ad3484f5bf07f023a63d0bd2c0ef8b233e0f7c2cc855f8747c22716295113212252467e4c4c73efd06e853c3cdadf1b6fc5c797bf0310aa43a8a499f626521fec34f3e6673d7b2d6bbea694f8586a1bcc7613bfcf378783aa72886440b7fe506288d11fc8ebc663208d622e8fcd0b15946a7a2f2ced224133e2bf2e99e6fe740b3ede13203588a241a4e0641bfc1a4b910bd86b22c4159a5f678d3888ae179ecd8cc56f18be42fcdce8a712632168bf05bead6112dcafcc03a64649cee8810e17fe574e2296b207184ee7c0c9bb5d87d56d5989de9f50726a1b1cf265fc3ad0790063e22337d6b3911ffcd08ab18ee4b5111596c8974377f2fbbc184da8c3d194512590fd2bbf3f9cc65f67265149f2220148748441a36f6e2cd42487b363d5fdc7227dc722cf3a7d31fd537b05e38f10134f17bace22616f2ec00aec7bbe13691e1652db0ea818e2a265282d327346c9b4621e5c939e322695da211d3603b2d2654fbd4396bbdf27f7e1f9eb19b2d7ef37a0ef9dde76c11f2ea COUNT = 70 -K = 51024280fe311353751a463ba65bc2f8fec6a69e42b8339d56ef723563155db6 -C = 17a36ae24f4b27b2c9a0fc0f7c75b0179a67aa047c8be5f9a4c5a191673095c24186f0a4fd00df923f4f94e049d26ce3355fcd05ae81fabf902b1fb5fe801a2005440e2b8d5ab58649991649d749f7939d9720e8180880d3a45ffaf2ea22bd4124b558a305fab0b9f3f345c7cd8c4484 -P = 54f02fc74dcf6f02c6f05baf277a4f691ba2c4f7b7beaa4edfeef70c1a572126104a2fd769b2d86cb1b5ca027bb77103c1321bd5962a58952a2f990361296835865d65609b3795d7994e082fac1d1aabaf9130f1488287ad4d8b03a26b7ddcd38df2787683 +K = 708a943025b606f194c0b9f7eb7acd66f0b73e24fdf53f3b807eda8f888b3f47 +C = fad3d811644d476605637264abf3449f70a7a25f9938e42c9f2120f6738406b83253db632b33090678ef51c1af2f88f8bf379aad22627d44944f20b3946c72cf7bb7519e3cbb76da509062adaf4aa931d92b34d392cc2342566f170c54ef749a6e4c305a96ed15395015646be8715d791bbc72942bf83db281c315a425b35471e5ebc8e3a5ff664c3b47b7114ed778cd9a6736c9580e395dd68f3695a4336e9ae78dbab1398e0ce6f57152b9430cb2cf30560fc632249d170533cddbd70c11d6190902f3e6d4dcfbb2a1912dd23f6a3a71c3e13b6d2126e836238061d79f3e1b34679c4033ab14068f83e8df4d1b3b8baddc6fde40a57b464e9c60c85ea46855a63cbcd9d0ed33bea49ed27162aa16a0b6e04602b95e778c2cc1ca5d930e6f9497a19abb0c63730413e1d339552ca4b4152f89d4da834f17968a02ec6d59eb079d8b24fcc1f5cd919583fae956dd6bdd8e35bb5c4d581ed972675f5f9f771ed31e2470a67659753e3b8640281f9857e976cdc02edf1464c8978adaea0a76793d6e45feb983067099612a45859681ff26767e22e0348b878e3efc6ab4109eab95797402fbca333271d845ce632eab83cec406ab219c5871133115ed1587877e3a742cdcb7e112f677d08a97225569817f174145f05f3b0e9d683743db1c29909eefbe4f1ca9a4eea0b693de6746afa9f812c2cde21108a0f16d762cc39b4aa2d53c258cca3a9ace64 +P = 6edc1ab0ffcdfaa429927fe7738bedc0ad0fb3595923bf3faa8a7c1989f442310c2d9242d67f58078b51eae21c2e4e4ec82b8d3e80f2a9574f5f1dfe0ff9a504f33f3967016bc1954c36267e986b4fff4752d15e7a020ea187e3aefef61cd475bb3198c193b67fa325058df9b52bff899b75785036da938f22f6f7c8cd83ad068d9025fccda6b05b8fa2d3de95432ac5a78f50c084d891f18486fbedc747b6d6f332b28ebc2abef9f341ebbdd05e20915ee83d8c720fe1da9be9efaa13a37eae8472f43a162a23be6fc9b3f8227af2019405f76a3a25f9a7b68b569a715039cef30c0ab072f488dcdba8d8330dfc7e54f074cf93656ca9e94fbec6b184eb7042c767c9ed42418bd86c0b07584a9ba22325d5d62ca803a0f00eb7b143d480eb1c41112f912d6579427274407a6ccec86d6544a27838a5ef16b6a0048ef8577b86b21101c3dde6cc8d5a5b0cc507111d79afebe51f5036701175abecc675d1b27a5a7073ad533a0177c4ef403261696ecae65fbdb405002d68291f45f2abee165aa1f1dd4cc604d14c67ca91c2074bc2357b64d6a4f4d64621e1c03fa24add5400be2bc368d4aad6062237829d0127bc1f12e854b8c4a74cca7d09fa982fd0fe67f02ed952c9a38bfd429a94562b33fd7a4acb50d80d1922b913500e6b7be5c04e195accdc1b618e8c3a90631030702ceca1b37edc8d795bd967d8d5f2b0c8d289 COUNT = 71 -K = f2e2504c2b057a381c06f5519dd90ba2e1788a25962d39e5e1858998aef90e00 -C = e4c5fd41368c43de16470fd63c4b2bcee9d841471a4dd1b85d059b5954188b7488606abb82fc0dda44a474b6efdd52ef9694a94dbcb0c4ba608563a37a46293167dc4a9d7a6a782f0184428fda5a897fea757db523f26b2c3d86e3ab6a4ee821cd05852cc1f0a7c30920072b724bac5b -P = 9e034e3187839bed30171d031a366746744aac82d83607f3d446a5a7f34f7fda555a911189138e5c4ce1b7d8a3467659b30e0e476bcec6e779e4f8edacc9327828cbd85143504ba876d66652da07e39227d57ca94a997e8f28dbac24ffbc5bccca66ca8bd1 +K = 2d7e312a78b9d4961299ff8e7093f5b549ace2b5d7222ac1d6c43e1042e1410e +C = f4efc06b067b0556be12500b13f5e1ceb00ac12340e9816ef763d41cb46d7c385b76d7f8ec15ce3b02a1bf9f308999ba44c2ccc787ec49f3ab072eea3c1fde50112a365e387fdcac4fa4566bf518c119db95e1f1908ceec63d793fe60fef78106f6bfe78691c13a92872a4c1341ea81b2313f210ababbba8fcb403b8d418b386e631d18680fc5a55387edbaa1cf733b8120b5a081d3e6fe9737d1e12b85bb78a699ec259bfd32245506d32e5dba1867636559fb67818fc79dc3bc13a45bca716c991ea9bb943473ea72f36ba78cde5a0bdf72dacdaa9c705731313a3f743c7c21f9d7386998874dd27cabf20c8af6e197ec7068a63d67f9901142b6e5404d43cd84cb75a41ca6cc6dd82a641a25c14a07e2fc7eebc872d7c6de78c3d702226c8a6d21e6b3fd5c2ccb8d5c8b19dba37ba426a79283ccb8d9f5df0f7be5abbdd03aefe72370dfab30ef1e12d1385ca739033d071bc7af58cf7fe944ed65bc1107c6c2c8c415a58808f9c640004529f20448f60d3d742697147a6b995e69e1810e45c4b6d4cdfcc54c1722dd4e9784d0f7ae24176951840fe134ac52638bdb98604bfc9a1491e4804bdd6033dcad5ad944ed2d0780f528f2fbec07cec7d85ee44ab5ee6577bc60a947b1b64e27e65d2ea77e284eaba6672e081db4f9fcbc47b879ceba5623d62608c8a603682281f4adc5376be92c5eace762d2777a5b184d7075e47d50e26d37adda1 +P = ff80846cb669bc4a47542849bdd826514e84032b08a24425d60056c9885c925e4aa19dbafe1b5d321c1f77283fc6704cd836fb8ea1e11ed5640969655243fd85403572d14efa2a7211bae630c8b0ac5bbc317155c4e519bea4bb0666dae9dd981341b8261dcf858eb8cfdf8e6a94da1a687a35fa1df7a5b75901a27475959e3c35c659a077cc2d31b8bf432897ae8677665ff7ae19e6b1f37f0a08fc69fef1d35571da0ff7be73fec33d9823d82b708dbdbec390d22fcf5864d13e0c536106b708052f1529d73629b31685539a7a1b4aca9c1633f075d99733d801ca72fbc4df67acd64f75c76fb8e39f2bafdbe5afb5fb629e66347212a027fd2a85c8a9445c22a56ca2079a9d5281c71cf1bf2d9c5f397de3a1260ae3e1b0694b80d4056aead58c2fe167b86ce67b525e90e4c1a9c293d424c43cec77d0624792daff1d94e911d7c87e6adfc5360b5c21f60ab9ec97a8a3ddb5bf26b04680c9df5aa19124cafe0dffd1ca513195cf62d29149ea838360891acb281acc47d68eb17502b41cc818547b1276983def6be3557eb52f48b1bb2790d71f7cff7eee02a85e0dfdaf83dc9a36362f9190ca626dd81b9193c983984e00d3d9175580e898d5cf9a191e8f738eb420ac07e83ceed667a5c84d737020137735c2e18735ac2ebbb71f8fa9f27a574f5c4c8ed610d823f52689692cc193028f8f2ba81b2d708d07851b7f744d COUNT = 72 -K = 178a9b3a8e51c6fb045538809ce6a2774df6ce9f4b7fdbabf3641e5708456ac7 -C = 9baf84d28b00729d501905737c353fe0f549a566361adf1625ce2f355d91ed48595e1a1c4836ab2264be8a3a39da8e60b0526694f324cc5ef1f782406bb6b7057158efa287d8bd42d50de619787e70325540e855c3632c0f7c9ce70ab7ec33966c42a19d42beafecda6ee21c9136f41a -P = 61fdaf82f67db2f4c0dba8cc188e9a4c0a554d9df82aadb37f3a9f8ce6042f2ec7002f156f0e621a6f6ac1f04f4c8a28d56fa011c4c9ee12ed974d53b3a4b8797f0fd619b7fb13e532b4e61d73e69d43fea03d49aaadede33fed5100a4bba7819b34212073 +K = aaba27edec1f15fc2793f2446c398c5b87873a443b71d74bf56b4dd0b87d8cd1 +C = f339a0b7ff824b1bfbf0421db78ccc53abcf9b6cf4bf1bcdafe7e0b9abf2e9d73c5dba136f61ee7ca39c042b5ca828cca76197df6c0018b49f6d4981e9bea815ba22b1b99e27b0bd67f8eae10c987b81cc5dc822054f21962b566bcea4ea4586391671c1f274ff6486835b0c35c7d4f17922b9996b2e777097acacc49c20c3d13ae6ccb4290d6680afc67e6a8bdeeb7646620d15e1af40691f651880b2bfcef492bb8bbb7740f8d35dd475bf8f165d4f9d97a503bb2205b4d2860424883022cb4799fcaa0991636679c0c3b7563bcfe124781c75cec5e3fe8dd4d6ee0507ab03353e7231629f0d390969619c45d0155bbf27d3fd8ad1e34c2a635e6c0aa989409706b9ffe29574988bcb5857542496def1237f2695ef7a6ec091fc28e8b9e496551c1ef87f9766dd42384ff2cca7f753d00aac7c59c51dbdb432946047e1d6f93a9d88ec13e6bf72242ded6694090e31a628e25cdafbda907588466111738fb2d7cf4694c7676062e6971ed71637a7b684a542b496ac9575f9cde701fabf5cd4d78ccbb3d1bba01789c1378cb0fc9c5891abf777c1a3d0a40a884afe1c2faa260b9907c1d7022679a37c3a015c4e07e1d060baea9e0e0420c75929f33894b23f0e245537afb178fd692362529eee9aa2b2bf2655c9516c35bfc2f7e2eadb3aa16ccec1f01f36a63ab794d4d96328daed4a797e565bb7fa3dcde72b7251635cc876c90ec97d151c94 +FAIL COUNT = 73 -K = 501eaa9d2df1d1e318a78b6fcf78fac20bbdfec682267cd49eed603ad4d40b25 -C = dccd17e49fc7a29fd1f09c28a0e86de19b34a79bb27410b24cef0ef276dcba26790df16dd8ec24a854c0ad794e4c145cab6e6ae06efb2dc863eb82f977dff2c154a9d24083598f8b67ea291228ec94fd3dc78bfd4aa24744236cc7c0f5fc4fa04a0ccf94ae6f6aa363374f3aabd9622f -FAIL +K = 8feef523a25c889cad295b2bfb6dad4bb46848b1971ea5575dd40d90be9a92ac +C = 2facfd1fc82b5484ca59a6b621f5489dee9c4f1809e9cabd10cfb588b450596e6754b38d1694c9a670c9a14bb7458e40b9b95d5c45803def20e52f5ea003c8676dea7b852dd4a09a5b8e23d66b17f987c98138a50904d5f65cd1a15b8d3cc07205feeb582716832623fbcc94941c17a5009f25deebc6f0dd8b8010f8aba14df70e797e3e526e30a95cb4ffb7edbd22542ecb83e668e1a353c23f39c349d408c7acada2bb230d88f1883bfee9837918e25ad7d66e33cd71717ffa61dc23d3e6034c80cac16d56f08b077ee7c745722998f376a79406ffb02f1d87d3c131d90a2175848f5a284fa2791de28191a7cd287aa1639b9037a9d62f1ef7998ac173e2da6a7ceef013fb72cddade62392a8f66f0167fe9d94c5567f8f9f8ab7cb42bbde59219b77e63b3ffb1eb6cbc7c1421087889bd0b02e779b0caacd57c7e7c4194662f00c980537959755cdc57f45c4da76b025c4570e18317c6c442820f47c14b82fae7ff27203c7bb8462ed415c35adab8172ad381558f321dabf160d4b62960acd95dc8c01e2b15b06994feb8d0568ed044a9b2f768e0c69a3526ab8d9b142ec32e6f01763ddf9e844d5f6715d538bed421a30eb60489bd4d065752ea64135646d5036d46a7ecc158fed75e19575856af1bc1db0e9ec784451d029392b5e4a3b380179a6bae30b6c732da291b80bab3f66f1469712d8c523f93a45bd349b566164ad6e835b0c3e057 +P = 1b2628b23459f18c1d1e5dd41ff5d14690e0e744a6d04a4b453220d0b3a0b3a27202097a8790f94d25820c3e5cbdd047a3c859ee4b2550b917d333ba6c7d42b4115cb0b67eb36fde7ee8429d9d7dcc31e67029caf09b274e93755ea3929fca7eea626bc4dd74cfa136f8e22f3dea2c6394a4f95a05f9c14487747d69e3c76b542d15240d130b34ffc41828b4d6db3067b094c75f9f4e50426020ff426e5f1d249abc89351b9eedf2ae35fe8d65e47510a96019e4d89bd243354c89dac2450d95b7259abdcbdcc1bdbb354c96b4de7138d033330678668c02f7f46c4976f090378c06585577cf4563ff5b85f58e55078f86d0f7a9aa290d88103bb5ca07f9828768b888f68b08c44078ede080791a29bcf26ee74ff49ab8ff4f6d225c0193de349f4dc1e76c4e43b83da65539c047b8f5c40d0bdb8cda4b4b2b9710bd96862f1e50b78f4fc8c8b54e61af8670cd83e649dccbd6a2503142291312ec78d4193bb9c88c675a71e576e2003b268e747b690dbbc053821db66fa596739b9e3a3924800695bc6f48a3e83c86f0ad969a06913a7b5724a74631fa718ed8a495701d6f2e3e51989c26c9aa88334d7b8414cab21fc10471693a86a7dc51a4adb994fc1959fc1497cd98ec9b47062b2e95e69ef56eb0aadba6d6cbfd06ae2116e5ebc0aad063243cdb5ea1857bd817814f9fc20207d55071363e8d363e9d178ce1fc08019f COUNT = 74 -K = 6e457afc77b19f8b9371909b6edd04e70214591b058268bb036bf36daab45b79 -C = 7d3a9c267cf689aec35f1ff17b0a4574322d27661a92f7bd917a9957147f7a046e179e51c2b354962cb9a786a30d16c800cf819d0619b6afccc3c6f474abdc55b8cfd2dba1ae43db5a081ff00cf081b1fc33a2276e36afce4f520827885fba7767b2f45386aa6f7de81b5ae83128ef41 -P = d7961b37dcda471188726fd32121e19eba0ca3351d6343f56387992b095190657f30f38d7d5543d28ab5c96ba93d76c7ba4c6b24580f89fe9c5e1b9c61ba1ba221c61feb354480319adfd0406996a7dcfdb58e1ef55889206919c585921dfac4005c8785b5 +K = 1251235a8ad546b7993bca917c5b92b9907155c33343f4ea87f6d0eda1b4853e +C = 8ceb519be23e378765fad0c66e5d4fbf4b8b6bc8f5750ea5b4847c285b98ae90fae7836103b9ffc9e98ddcb550b82a49ed822cfa9921896cbd5359873d21ffd9e63f4da8cfe53b3db3eb1651560a1f88ec4d8102fc3fbfde042b63b47abf52d25aa819fb6a1247f8c5c763dcfafb9fec99df4c5819b8705ac949abd9a7c577f1b4ddeb31426039e47dda7624a20501b332f4fcd3be49ee0231f9327c4b0eeed70e88dd4d59d01134c86de1cbded847d21f27bf7431b03be4583fce748fedabf623cc12bd153374a753c323def5b63cee5039c0bd4c06c1e0b96c6bc4488b19defe905f70e032ce36117a9cd9ffe5bc2f70bc13dc622a7afd0ed49eaefcdd36059e66a74f2ec6e045f080fce5eab17d3c9a07a34a5e59ca41a626b7ab0508876a6cd1cae052c636e10117238070ea9db86576374d2c0d16495160c20927d8f597c5b527d3d9c946804441de043f6b3e498adbd3bcc3e2bfdfffc8f78727901abe537cfe02fef8d08dbaa6d1e6a804572267698a01c5abcdb533f526b157dcd2ac8e157297d2ffc445c7cf32bec16bf62f737fc4695124ab1398f5b707c34e56b133e0004fb0e919287e4c46ac865f834e6c39e42500dd621a1a3d8d1a6e889049d28dfa18fb1b9fb8aacac2b17e5166a2c4941f2b2c2aca25439f71dbf31905a343da1d7656e8c318f3340d53e52752d5639725887f272e7e0a4e59f624f194ecd6d2fa20117410cd +P = 78c317833ed5d5a93395b742b81192829e92870c7f9266f210ead169a5053c97d2c174ffbb2fbb8b7dd85d6496faef0e58995e4f4549d18b9c6fb15484811a8d6c8b8b5fd11c2eea9768df04976c5e90096ab02d01f33cd88b48562a0da7f651eb62489fa9bc28aca4e35ad7da1bcd43a2cbc05f12d659efd34d55797c60692474f951b02a3d4e4d07bc4c8aa30f1002bafc0ff290927c6bfd55dc53f13b7c22c191c355cd862f4f1236a18a4df61ae7382c467db2c75803b65c02ddeb45cef8cf2ed8bbbf8dba1041ee0960c778c1de1130502874a7fc7ed4d10452ee98d8e185d7eea45ec9dfa61ba28d4940482cb78788f6d1900780be5348d6616d6ba1bf3079b8efe13e8b708cf6ee3ef8a66550b07d3f7a4574ba01e04e474a36e0098db5ebc7bda859ce8f7bf3b3eda430411aa25763dfcdecd2f421b92f7e1c1537505ab6a9f7529d707a2499c77a8edbdf86db70846e61d6d2e813af2e6584c51b7f8b8875fa6ee170621b176df5ad3d243aa69674140cbe8a54abac52741ddfe57952a660b12654dedd7dff86f245fc2d09b42dd34e300e4b8509644c5ccb32dbf51c7e78c15a03f5bed4db22a3e50bd07463029f9da5b246de354b2b0cac669553d6ff19c8faf12cc0fe6f1a469ee959cf32fc0b938269b76cd5c26df0d0a770ca3fb68b6acf9fa5bc40c3ef07d4a4510b3e4c5e8571a09513c440e9ffccbac024 COUNT = 75 -K = 7a05e42fb622e796cf192aae6c89b4334a443fb7ef8b092fbede4ef0b8f9d6a8 -C = ea2d567e54a0fb34caf11f7a318bc6cab39d11ef3843e3faa8dbafba283e36ffe64398467a9aff84fdf6dd302dfc8c8a972a9106c55d94d3ba29dd27a9d3ef39feb56f65d088fce52baac1874077822392cfb6a98cfdaef0fb6116612367be210a5cea068dd2e797e5abe56831ae199f -P = 2f645b7720c07a234da4f4597dd5fc584d25b7898b08116e087ad54262609284216f363dc0a6d75433249aa4b2763fd6d32ff2ac6c5ec171fc486ad1d194b1cdf16e32adef1405a2887ed13994b6dfd8485a4b04390c30e4114d4e823559bf608f2c6d78b1 +K = fd87de8ff458c00a338ba8b9888241ac553f13befb47168c1bb5f51cb7766e25 +C = ad34b570c45f40b5dc836bdb661dc09fd0f00acb692e372f2f307476201f99cdb96ee4bfcb27232de82c81cfe5e7c40aa7f1d1251d34f2e3dc214d17cbd42080d22d65462b8053863b0535bace30b766c08d032034c7cda3c99aee6be31f80a8887995fc0170ffaeb00aa46c1bdd2eec845570ce10e4e0d92817ae6302370c8700f574b095a16865aac3aefe2b3451a4f9042aeeccf910cd0db9146b08adc3e903d443d75526a4a1d60cdcb1174c123cbb52188fd31651b002dbb802af520b1b573b772808382d65f871b352aae264ec38d3549d530be06ebcabe7e29d4531c4938bde6d8079449f3fef964ec7c29f7410ff2b433ec9ecdb6ed153599c159933e032fe2c0c1b6a27841d32157bb4d2b7961683e87feb822c0ca9a73defb6fee8bb273007b37ebfed1a7ba0298d20afd0d8fe2c0322549ee7099b0737bb7c4899b2e363707b1977d2346907796a6355ca4468f09a5c749164369f2be92b01afc67576948636af552871247cfc35c75157d80d2a3012d350eaf49bfd6a60a1fee85cb2fc7cea460f858bee120ea7304c496f14922575964cb2aa6fb8459147b996901505f5b744d89372f3234c9720059b67cf7e0953adcd7d6f3e9ab90966c351c4daecc5f20674e55bdd29439d4c90cea95111c1e6e966763010ef5570abfa1cf8af92cd4debe2022f22262c5a6bd8231f5d38c1d4c31985bebdb742f6fdaf6b481f4201b470a2f6 +P = 301c54535d828a0e153807b218f47d22d5279a44a49dec319fbdc5ea9f718f2d853abc84fa52d379cf99c449cd362d8c1b76c036749014b5893d1e32206966b3cceb1a6d5dccad3f05469d252a03c86d6e049264e1157c54db7117953c70337b3d6fedac186d1e28bc7b220f905a22d9832cf222b95753f5237f05a1d63ef4770df508cf43b42374d0d3387453ed4dda5b06ffbd26e0762034ec7559ba6f9bed7f1550c96151a8a8e0481025ff533141fb4f5e6d77a93db6773b2931c6daa5b3762f969aab0efcf21f66ae5f42d9148ee61962bde92cff088dff910491b5938cf20e89679f2ed46f71846d11cef88973410689b08ced643ce332c17f9716f22abcc17c72a114c723043aaefd5bb94c32fb7e557a8bff92eaf389bada5d5b8657f9be138176dd6657db021135a99c8afaa1bdb5d57242c0952060098fc9db32326d69d9379d75e717d66d3b6b33e3fafe7b6df9894a45a4cc50152ad8a880c1013d679112942c48e29b73f640b9a8a6bd5a5377ecee6c2702eefb7b8e498373e2a9acca9866a4cb4aa0e60adac83c96cd34ebc35f2b145597ce30dc3fa4257b68dcffd98f869ed8f1afaf5556a777317b71e71ebcff906e9708b3c940bf793cfdbcdcc9d25992fb722388a55cdcde5856a96b99b294373ad79cf4bead75bed7ea14fad05f2b6f2d999b89f0f7f0dfc55c23d3361f05a65e7a7da8211a50af95fa COUNT = 76 -K = 7f4b5166c31d63d478846ef10bbcc3323843ace442982fedaa0b89141abd058c -C = 8120377c47600893ca02b282d8fd7bbcaa48df41ff3fec6e74cab2f837164b967688b7e9a38b9fb7805561df7919abf5aee71ebd4c80f92475a6992dae7cb2d6c6e2e2d6a0f190e7b2959ee460c539845bf5b8725fa38c375b8d8dbb0402832670b2104d0121e50bfaead5facb100e01 -FAIL +K = 86cb5b69cc6d1528ed97f74accee20b9826930e345191ce1a03d04b157dc8ffb +C = 101e4336798a4ae919ce2ed50799f71be38ee7cba11aa38236b2a4c1e93fd9f49fd2a8c7d2dd70023d3015ecc4f51a50bf67808b58c14139f2113df89bd519669fc13e5c5719fa3e046521f2da3e6773b2cbdefeea512ef5835f9d68b9a8d913d09456a2f77913bf7aa71e1ed5854671c0186e1d60c0f70ac4ce9454b90cfe44ef4c124fde95b5bdc5dd44711772dc84c0910943a331ad11ba1ed876fecde31059dac22fb9cd5832b4e51c75d5267b58a50f2ccdeccc1ae17a032c5c815ddcbb107e1ef41516c1bd9f073d6fa5453fb3ec585766fa3558f297a670fcca19ea51317af36303462e553a886cd9b388f54620201599c994333634e60a903b67a06b401d0b125e296295327177cf8e2f6d9aaed4c1920d8fb6a3734817b910cc7dfabd17af143f3cdecc2da2011c7a262eef718fce157f2a4f50e87be7ad5a3d6f34418f39af4c62c333ea1ba4224078cfa17d96e8a927b2a8b9d4b86879a87757b8e80d47a668e58c0fbc81b24a19a515f540532d6dbd0d90830547625d262ff2ea9c6b3756ba3fdd3cf3e6202f526483a78e89bcfbb089b8fce0f64ff976d1585a305191b4f0de63ae32ce8bb9533796b463abcd4998a2ddfcd445f3c1c1007b892e83c3bf51f589d0f88d85a09e59808bd22d7960f06956b8cf0c9e122c8f06c6d9cde2ad27c36db7de3123925095a7a259e0f937c8c035ec2b7d2d3adc3385e836c178a57a2e5ce6 +P = a711fb10f5f5b79a04d659b6975811109580d37c8e07b33f254d85681f452b51d538ef1e14edc2093bdb7fd5e1e07a611034c595d0d2b49d644eeb0a98bcbf3dfe06255e9783bd90433c3ad252961e0e0d5a8d07b4321e1d2c9521b136907a054005e888503c24dfeb4db49e3e863b991fdc888398e2cfccb0d988af07109efd302c2a5fc03decad130a2507152663ef46004806b4829f85115fd014856b4239c3e4bbcbdbedf72ec7f9ad4efdd205131263f3c45c314f2bdf7970b543191364921ab60c65f352f1b39b7c123adcc038ad4caa4075f124dbef89a0638166c316e0fd1d76d55774c66a9e98c2bd0de60436ce2324db50329d85d7044e6f80362d1e54a9af0ce897fd1eb8d17a0de348823802849e2b4ac01ee0b0e6386795aa3d373fe8aa9370b8b0b89c8df997cd9e795e363dd363fd9e1a3ef06dcbbf39a5ebaee96bf908a49c771a1158e035d14f51fecd9c19c05faae39a14950f58db97f8b8460a0dd5fb4a832e3f10788ed54e9027c32aff4d09007ca36351f565054c73f752cbb6c0ccf288366f9f3ac9b16be471b7db34b6ead3d62c27d8be1e74169c73af499b0cc771fa04b89cd64d29f701ee445e87d85ce3b718797c3c2c68a0a5f30fadcd10b212f115e9abafbaadb0e9d36ab45ebd576891ff680b358328af58eeebde816be9f09cca22eb1531d67e4f2fd0edd88e7de9a27cadf289d1762902 COUNT = 77 -K = e8a1f169dfc418e9316ebc5c1dcfa1cedf3731da0bf529facb4d77770a97eb65 -C = 7d1a504c78e1b6dae123fc3b5eefd2e30389030928125f36c5f0fa4d12a11c8071bf4e86e11e6bd11b31c21f0e7b2e3f5d91ee0f81a2fb3f91d9e021829b7519fc6cdda7d29e919064e6a9e7965b49572990cb30749c31ada033dcf03f3fa6768148a452421cecdd047d26a50b21253f -P = acf400b14be871a3920121a467e121c0d87f44cb3a384322ada088bbde27fb865630e81b177ecf758a0b4dae225439307c4944fdeb684e04e1c5cda2ef6c5b75da4e3cfb8c9dc4f61d969d903dddf39a1f4b3cafd44f31275d0af1c4f51fa989df917bcc44 +K = f6675cc9e4d56e4b71e11d6edd9b59e28d1c9b004f4b3df3acc20a07bf4fe06c +C = dc66d303670f1473f147a3bc5a76ba1a1a9a25886eba81ed4a838132b1485d243f64c3e56080df79cc18ecb744cb27a691a6b62acda28ced1db7fc1a5395baf5f41cf13b3ca238544dfb46b3cc9c9317cf8a781a9d3491daa898c9a3f5e6be3e8ddb11cdf0c2618f4fa1570a402e9776c2757f6afce8ba1c2ccdad1fb97434ee9437626ce0289f55a25a882f62515a7e200ed7b0652011331030b0bafc3cc89b73e98babc33ad59d4c6c2b83d818d2119c26ec788ae8e3f42f1af0d3af52c7789373b0b7160cfff39680323adfed50af7a9410ab2d4371fa17f500af7bb66eb3a05569c98b7f4f21ff209c9502a05fe5ea42948965e3648b2ba9fc36ac12e4dbb8e98312b01c86716a26a680d68e7106a7771a9fd608f326adfe69e5f96e9aac68fc0e98201ce0a265facde878032b58aaa96012533c7bd8e98dae75fc5c3bdda18fc2e4265c1430079627065bcd3b059ca44747e51f569b5ab743bfccdc32c588ef0b02d1457c4a689c84a76f3b4977a3c665d5104234113d875521fe36e870885628f6a65e951ea02ca751c637ded87ec35d984bedd763a8e367da70dcbe736baf45ff7b7ff9d63aeae882062abaee2c44e92ed4a8ba0c07642239abf3fabd5cca26df48b97f2dd3b8bb4cf36361e36f95b07892c670a050e34a06d0d782a11842bc9ff5149d33851a096c97d01f9e397edd5e595a7f54c57ebc4c27e9afd37dc0cec5be0e4f89 +P = fdcf057f4f9e5e8526c92cf42d311e53b19fd31d467329baa11ea5832c1019d7657df885912bd757dae204eeca6f6382f9cd48056ba98fd62aa361af6fb20a636bde67833383c9f6597dfca805afc3a74d4c09afe78679be2a0252d5a6453e0dc98d39d28ef15d1fa3a4fa424b3da399c27746c1735b9832a66696b9f297d5e91a95658c0fbcd5f02ac8ffe8390066889684848cd625b5697ee68041394ed6f2c36673c6a408d7d7602d9c897c4ce1f3f0ab96a7cb691033a064d5d50c04a631cb267d2775044c73f05f5d1181db9925d7b69c88ca5c124b6bf03d83c35104c998e4ff1059882dd1e04c04c9e96ae9b5e48f9b3185aca21deb3aef1ac64b85bec8060613835d91348f6ebb36a9c12f8a96e247fc61a50386000cbafebb4e771317611a79be71c65f5ee2ede86dae1395bf5397c3ac4b63052eaf398863bbbe7c594fe92d960bdc0e06cc371ed8ecee83a38d3205a4f0de4e796249e3e27a557f747e89593af03bb65081634eed4747ddbdb35560f81d612d80b4f2b18b88e17e00cd2e3e8f1491f4fcb9bedb9cb7d2d9a8c290fc4cc589578fd2f67ae4bddcae13ab878b0d9fbc7d823e3d56245760c4d95b9ae226745992acbf9416fbbc42729662bbd690dbf1c1b0fab977263dc8ab0bdab58a070aa335c5e14173d341cbc70ec53a2ad7131fbf9a711db9aea0022b07a6ea544e29ef4312804e756ad100cf COUNT = 78 -K = 77922f7ac6ed13e23443681f9d550989a2641275dd65dd28011be29b644aa88e -C = b0cfb028eacd484a8be668707bcd55a6dfb35a77eeb92461940ab7f8c94ec3e648aa840c97a7c4575e7339279e5890d32daea70b3107cb0cfb5fe275bc2a6ba065c10909c78b447b858610243fbd9ef4f6fab82e240234bc221c5b8c27797f504d670294068853b2a5c89550b8745e84 -P = ea72f4eb5ed72fce1271f4d8164d3f3526864a0467743a15f32942776cea974ceda1475babc987704c889749f97446d495504702c80a8aca697fbba4f0cce268407d92a7ca3191ccabe99cb7709de9832985807d9ef1b6c619697ab6a403e1af64600e1cff +K = 025efe333a7cce64912be5a48ce1fc7ee5775ac621fcdcf04b20c2dd7140d33b +C = 96b14d026c8147c25aa02d4226727d591f40ab066bbd8e2a58ad925341b5c6ecf7844f426d1d5744e117c2f74ffc011ae0aeb58cb6fde0bcac08a61c792417e533e1cdc492f0c1d92191589cdde591b2002eb842dd66c9a6d83be3a1950ae2619a3bc78b034f85a7f498de9109533da4fd0ec8afd6e78f0f490ef685fd97dbb8d1d9860cb0059eac7c02bd45d8f18c3ce8c1c72d36fee87280dcf5bd0f1156a4c82a6a386292da63fa3a0354e2938c042535a6dc666c24e39fc8e0c9bd612d57bf042cebc70ea5cfea40c136d5c4eb4c621dcd0dce7253096d2866ca31ab03abc94bac20561116277341f658edfbe22efb9988732a747e914554af6e6a1dbca683dac13c53d4894f65d5b41cf2202bc60ec4a876671ea27ec870c387823bb71e59b4563f7934ab719743c935da2e66b8471de63cb7d4bd898d0dca2770851006e885695f930924e43e4c0b4643c692aaeec8d36f1313844ffca5861e81d1840b1108e0b630f0480ef8ac0df15e9dff786a138598bab0bf779e4155bcbb60bbe85fe1baa6aa594622be33638e8194308c738510a030ab8177de79fa36caf7b9ff4d88e9c39315d02b97de2521e13dcf7ecfce448c4821c8ca60a0410471a0f167b90b875d52e0fe26438bd0360010c0f785a30e5a3d2c9804341b715604886b72b4a19bd6790ac3e45605b3bb5bf9cebb4ce411672fca25987f93c0f20f82b2ad9c5d258b4c4d23c3 +FAIL COUNT = 79 -K = f34aa0a0b53fb7cb504440368259f185b31e9e9143dfeb3b9194e8640ae1dd8b -C = 1542fb698f3554ccd7684365f55a7975b55341904963cf3675697a957cd7e8ad929197456c5814fb2c17e9b168ed0d069e1ced36c06f41b44ce553676309cb74a875d7a14d2583bf9fe900e1287de3f7ccc802c96dcdd695984de8839a799f46562a65e7dfef088787d737353e0b9bbb -P = dc520bff81cb1e9f0cad64f8e7177ed9f67b562cd3a439e7a7f4e9a0bf108c855511724d5b99c7cf46973d7bc24513e51015e674cba911157861d5602987efb153332f39d9efc51086041afa4869ee068aa2087c0ea5f4e3f8a182998307689f69940fac0f +K = 4cf47bd4715da9ce1f41de65b4903f3fa7313c8282a4611702ca2ca52a47a1d5 +C = 2fa3b2995f05904e5592bfe805a0a1324bd3c352fcd923cf9adc30efc6ee42880f8117c334abbbfff70565e137bae055d6950af676fb5c13fedb01f573c9e2d7dd656d8d82e38ea5bfec0611713a828f790e4fb2b62ecc62da4b3f97efbfcd3d811845e2823a6202470506942e76c91e3d4c20d8ea65a558b328080e09b242838b9d2b18fa8d8403cff3b745a156e2c18c7955b424befd71298a9c5139eae5141bbd69dbc96b1db4c524e415e9843c5e8b8fec1edcef9cfa41437ffda855516b4758e8491bb1b41763452e648a752035f75f8d2892cf22756c6d9964200db86739aa557e4710226b8043b50f6da2d7658f97d26248efdb7ccbbf71b314efcd7f897d9d0cbed649663f5575bd4cea9ca9ff6d689ea482d0bbb77ada7d5d425a4b35650a4a7e7dc8523e8fa61c0d92ca1e7a70c552b5e9cbea7cbf0de7a311b327c48dcdd61f27f19028093da0a9cba373302e8e5232e69e1ae8d64ead2330a37803938cb9c41e48eb83165a11acdb7e05aa25d5c5adcf9eedb8128597480743bc385e70a85dbf7f9ecd78bfb9c7a0d81d732cfd8c3a2c67adf26b4229e1b8ea65cc4e6027edb75cea7d59579dd55c9fe5335620946283f1bea9535cf29d83ff457c21cbd7e418f164042c5962ded18cef46a49614ce13d94b5e763c708eeb48a51f5bda72fbf8b6b97d0f1a91c1a1b89e0cbb28fb3ef1fb7dd64beb5458e3a219a51eb34e247b2447 +P = 5d54aec894d95d0ada0c421eacaca3c9573e1108518263cc9b2e86c8634bd4ac15ee488910f108b100a7baf6dc45f43331d162ea283af39650f069bf6c937430cb91de6cde3250d9c722893531a66344698d294c6612e8e8b81c879e0d841ee0935ca726c4294f27ff36917056fa7dd3a31d56c373fcb18ca801d5457a5b3c330f3640186103ef4d38e95981bc30728a6665edcac37aee135b2e1fe1d7b77b87f42ac5551bc2aac858a50221afd701bbade4709e4bfd9b7c0599f2d18b0d3712a2a61a2a7af7dbe58a6c9b18738b2aae55083c2c427189a64640e0312ea68985d0e93257febf7b7d488f84022228bbed3843441960c93ede5b4248dc465588cc72ad7b5fb861fa5122838a6297ee5f4a1d39e9ed8265b37ab380beb65ee7053559f1c7ffdae9dc5243e2970ec5e06fed7f08ecbfa90a68ddb5d95fcec765b39ee392d396307d45e74cb885092c0f4790cdc35e4e575decb89800a0233ef0d091a08c551ccf5c7c2ff143eccf42399e5f50519cca01bfe9a60269fb8585ff676af68b8f65664135ff120ead6c95cdc141e8bf468e078d63287ca32528633a0d034b9f3c1c6b910ac1913ba7bc475ba335bbf9ca3293d0ea424766a6c51a7fe9a11df802eaa9f3301b105e79dd5f99cb65de62097ff6a3f0105b1cb8a7da1e753df7e1b17653a88dfc974066ce360f02cb1b97b681dd934457b2b40e5f88ae1fc5 COUNT = 80 -K = 446b0a809a6c8bca45fab6c32d575ca9227f94d42698d1e715edb3b652a47b4e -C = c788fbc298a61a992c011c4784352e4939714bf90c1bfaaa52a6e474d5a4f9b29262828d0b4682d2e9af728f2fa9cd8b9213c93c71dec0c45696e64fcd5b8b43119df2b151a81f8686e596a253878d998dc031845e126f501a3b7a5327ca73e9d6f9c0f728cf5bfe56fedd4f583e1e90 -P = 808c171c13a4818c08305d1a818c90497682ddd8e699b2339235ef0b482fdaf7f6ab60968499c09772b0ab13b66eb888c9b244313969a165f269ba45c0485e23689a0f34118fe3f1b789a3205d901afe536cf65b07e355cdbc006796e26aa001e69e6def13 +K = a27395261977d20ead2b2513386e078633f5c6be875f0f7038aa182a19998b7c +C = 4ce87621f1cdab03546df8079b0aa364f79c6864659aca08c0fe7828abd194318df0378255a4a6af20239c9d074299abd85cb32cafd3e9d71f7e95b2690c5562d51c9f6a89cdce2a9487b83cf5737977ecfad92c5de68f46cd54e50ac54ce1876a575e246d9547ddf70f42a90ddf77f4258a7540ef9ecbba64fa89376e4b2218a0fd9c1b59f388f0ea0b29a7593b8e78d79b3a070d671682ab438708123a358df7be49fcc46402870b8b40c8e583062c2fdfe13c8bd01b9911cb05a2ff3a3c12eef4afd9345cf3a3207c8a2802b0683d9f19ce55e5215fb1f747ccf03d692ba89d2db18a8a9a6a461c3baf261c410b961fcbf8ffda2702481117ce67a79e2060793406193e63e532f5244e5d3b58745987c82f8f5c4d187ce42824f486fdace3abd41bf98e4dd9763d66c23c1b012ba0a0104f26f784315fa4efe249b7c689752a0a1858d758c298b5bb18d10dcbcfdd2df5d62f9a815f40fcfb0bd0384e758b8845a2d675b239906a5794e9ecacedec06c0ce4fc1509182d8398c70742b004b1256a70e54c5cfc02e980d81ff74e36511032fe56f213ab2dfbaff768343450bbebaacc7106af43ba95d6a5d7683123d02900e37d5f587a7305505c93ccb080ca6a9d1f3e02de409ee58ea814d86d6211df53f4e60a7e7bfcf3cd5de0c97c57893fadf11f32633151d8891c78a517eebd8aeb317e6abe9ad2e53cb4b63e2c536d829e663b99b8404 +FAIL COUNT = 81 -K = f424b74ca1b3d6f5ccb291484a1c7d19fb00e5b956265da13283710d31d06920 -C = a01abf2fe8bf5d6adf03ffd6dddaae42c9d45c8073fc264bff3d542895fe279323dca6a9e07851cf29399b6e6e2caf18968f752e0fcc153219fc6952c5ee73565c0e3469ac8b21800c47de13d44b2085abf578faf0cd8676ecc21df03e453c800b22eafcefee576640ce92669c0fc290 -P = bb6d58260bd7caf8fe37c175c0442fb4f1c5caa6acae33718ddb5142c3ca708f7d1cf2f0fed5d0c7f50700867d751df9e1294eef5ef63f29743a14d553f98bfe9812cfc839ee41615a0e0380d248ed3e76d6e01c34554c0c9ff4615408a6c06fe345bf2733 +K = be7bb9f20e09e4477bc667b2664b6284793c447a8ff34d0570e507d2a0f760aa +C = f34c30ccdb2f35aa9679c243f4c3251ab307e510f73d7ace675add952cce6d51a93bb96e9053552a1eca5ef89e25a63e98636b3600d71604af01ee94870a14a5667d7722150ebdae5737be91c3a80693f61cb6f981720353ecfb9cdf5355093f86d0f6b5550efd57228503d524cf1349cfb86c268f2dbe656fd66fbc81a26e4ad61ef49c3b4e3ba1923ba6d0dff620b201d773eb4a3441ecd67362f6f9fdb6ffc61e0b0f1c3481770ed564cb1eae3bd184f731920299eebd7c6e1947155be09de15064bda59a9a7a593565dbf561f5ffa28783383c75cb749b802ed26131786f2a1d3076fa170bc543c352353331a014da6a45af87dd1b0b31808c2c8262d914223d2954f8319a29a28762dbb86cfaaedf894fdb84eb7c9590250d6266ecfd529095a535a0537ec79d1aade84487b969716f71b68de376144b5d646f02a16ac7b120eee24c322414a01ffd99797f7d310fc262ca6a8f1b479a7d33712d26a9cf0472de6b788a6d83db84a6bfb4b99cac425df09757253985ee8e16f48874157cb572657fb9f88f93387738c876f5b5970cee7a2dc5711dad7683e79d374d946bcaeb1b79c1f671a20fe4e4a0f83d64f3962628c5b16a9e109c2e4df1f73e9cddbb629cdf13fd329b69e78279170b5f5ff70f5f38c4bcfc5312146cebd2734bee5857bec082116d8abe8f2bc7c47355797030f2cd20cbbad128af3eb60a55f4fa4ff891ba380f8366 +P = 2b1107c9641a1be1ffdeb379f48d7adfa1ea85aa8c682239341389b65f6c5e196f3ef805c7e60ebb7f5ca0d99350553f8dd9814d67a3fbde607e39f97cb2699a203d6ac8d593bb3cd4edf6d76f347526da94d2981dc8596578db77e1afc24aaa3afd216db2a843617d79599eb04d446074c15879a47a4ed15d95ecd173fa400d0c16063c645400b79b4a9097675b9461fda62c4e98bf732aec62848939115484cff3a2018ab44675c1e22e0338203f602f20b5bac96036484bdc3301a3be86e2118664d48497f4e84a24a1bf68fd00764cfa0b3688b0d9dc1dd20bc1a51d84a63cf1af1c450d7ecd034c3319a02f58280a69f95e19387b7a1ba3a99c1fb59efad9348954a11014c8cfb4d1ff526e05c319a60e7e3856efa8a468bfd43ca7b1cc7ce6c50909764aa22b5a93d1425547eb1a636846b3785d337a5572ac2a7e2692f260934876d6122a33d3aecc6145811c046f7b2d9e902dba568ed994e1de8216d74cacbcba4cdbf17465a41b6d7841add19a2bb08583c52290b5f80231e856c847cb7aba691caa307c920c386da0c3686ead9b0eeaa085df5f55eb979a02ef88c23875dce91245cebd217b395e2ec448cf50db92797a8094113612bf3f0a663ec16db91d313e3988202f3aadd063da5d41178306572e643a1f891f81b2ed9d9ec7095ee866d1f61ff94cb0a374352ca9994f3ba4824e806db7a8effd23b6593e COUNT = 82 -K = 41c3492a834609c033c426a6031c2cb14a81ebdd11ffb0c6f96a76f4a17f6591 -C = c7a20992ced6cd6d1215566fe81a8b95edd8782972b5a23fe5f4dc7762b71585f50fec3dae509b24c1e3d3326fcc5d67c201e14627161955c2d22d26fe1b73173fc0a2034f3671df3d553392db52e353f7c2713dc32f22943ae92b9e886438286709d9d41feb2ac1bbb52a521997134b -P = a2b5d2bc9230e1b0177dd9a86a9317433614727102f3dc9a6548cdfb1d7d6abf1298458411a354f452b65a259a16c47f455cc8c104ce3d1a9c8e3472edb8bba77d35e36fbaded9228982fd5e90ec2f2136ecf25adc92d8cd9cf97217b9888ec46936b1a95d +K = 4520cf51a9b0d6d69f3aa7a324df699dfbe11c88f0ac10ee58c9581be8a9b05d +C = 6da1162540f7b18b93e7e5730ecd6373ef2e13ac748db149cee5ba749e53bc39c5c61f198618c0509c999f546f57ae590ebbf4457cee2486b7400aceea6e98b9a7c29fb603f06e38cca9c93c314bd01995d0f92e3616d773e6afb9db0204ca933f0044c9ed3c53fbf898e4ddf353fcc7a5f636d2ac56bb8c528d68f1bfee2be3433be22af473340a5f889f92619dca4ff08eb3c89c65202ca40f834e5d7c944c6c1dbf1781eb75e461f4fe53cd205502b5c7f5452d7f6c597e29a3676d0283ca8d26ac444319b8f3a56ad0f16ac297287fad283e871db41d3643de4751c3a5fa0ef156129b80f38a7f9869be7c39bc1286c9c213ca0b6469394041ea5f7c044f496d0d418c17d010a2e92b25f51e0bc7da38a6e62376bd7e31b601e3a2ca45345a14c1f03d912fae507e43557e3774f577489395fca1fc01ed8846695f576832c0170c7e38640d8ad9424191730b946610c2b5b154d45fb5e6825d287dd7216a9ff18d73d75b28914794a6a3ffd429ae44ca6658cd848408d25344a16826c374a92db8280fc2938e49e28404e822e039df06aa19c10cdd4b6cebdfc5c61d7fc0a3646fa5444c0cafbfa455095c26776031ce3f813a2d492245086220627849228fec1ce6f325af733d2555b614f5f77be498a8615e3e7bab3f4d50eff038b5779b976b48846ac1e4f7cda8653bf040a01dc83141c10860b9003ed5c26d93cf1361c7f890cbdeb3b7 +P = 7d3b2c9125a7df570f2466ec047ee7172d9b733f78015ab31ebe0b54c2f8047a027c9205d39ef4265f0c6c1cb646ba9a516a6ba37f31d935baa2c5c67cf0f94a6670584e93a057aad3c9ddf31000f1d6c26233f420f5a229fbd0984606fd906348defcda661c4cd92a15e2ab728a353fff910439f7c75e8c39e00013c98579957a56ad2cbbdb3b917f878cf3ca27e5bcebf365fd942385b8903d96f5dc78f2a1a5a2be280a218d17fae00b7e838235f589fed187a44ec274fd41f7bab3712235f7ca7a37fd123216ebba15546cbee958f82394a8b6c6453af3499d4e093df797e07462892dd597d95d09f71dbe9f5e4d9a3bb98b15d10d562c373794c75f09f92df1c14235ab6ec0957d4cda9ccc2e99d30f78f74da6a5f8e81a6fe26631ef43db149447a17f97347a5bbbb19d63bb04f26079a76bcef7edc0e21796e627de532595912eae3cdf530fba95b8136e479fdf9d5e5b0a404868fc6ee91ec19e64858649e7fb9562ae278bd64b1816824a5642823e223559bbe849f52494aa61294ad375099cd2bae890dfbea09fd2249d70d90aa3a1669329c0662ac1fe743162ed9b75e45f286ace8945082f2fdee7b425492fbf10def872ef1552595d8ba44d2587d95aae9a4f8284d58b080473d422b7907998a30ee0c9168b755a2c324296177a877420b5acac2f7c6800389440eefeb8ee26c1d93d3082d432c4669533a877 COUNT = 83 -K = 0a5be55a93c74120f188192ba1d16181842c5a41b0b6a679702250e1be9b8843 -C = a21954ef37ba934ae862c3d354f48344c3e4f4f035d5231135de400e99085c32881ccb916c66c5a4fea6230bd8b6463596e6f6aa1351302f711c01e6f7c98e4f3481c638e88a54357159c021ced35b56cfb4d233bef12c11e717f75a904633c700b8ab62d1d08e973c6b52dbefb4b937 -FAIL +K = 92bf5c48a57609528f9cce5fb4a69a6f45e6af2690b9cf901adf363f753859e1 +C = f308cefc9809192701934bb34d837c2935c955628ca503f8c93665d5cc99f19621fda5ab1ebaaee9949dac05959448f2c55dfc42be6d75406a05a03d9b7502f47f335947e16bf4bf01b0489f392b4ee157327ab4f1168f99b9df6965235d8020c2e7fb548936ec8e20e1c80421d998d1a08c43466da8b08d23096d52ebb40b45f43d35dbf653ed4fcf3f854932f0d22c0f117a0a1018e66ce9355eb2ed9c94fd6dd60457a13c7b1282f87e7090b9d4f511c3caefff07f406bab08142b478f7e7a52c4189dfab42931f495f74f9d1da5f491194d7f16d88677f779f9e71b427439b5869cb8f6da5a59ee5398579cbd2550a24ea2eb51fe5a13dd25b05826408254f202291bc4c4e22cc56fb483d16ae5bf3be8961d30d1126926daba5468869eca63db001996eee5643c7f2a71dad0f6743b2d8985fe48ed8e74f43180d2d21d678eeaa1c727adfe612cc226f53c453c398a493cea557b174b395976116781bd8ce6552cc8d50ea8278d15be408187ac3e7f5eee8e2352355f78b1262821e4d8f36873aaed09aa392d49b31524112e1c3b300188528e5ede80d59cc5e869dcb8c83fde3c5e8aa2dfb1ae760844c65beb63847b070dd0b0e0291fe5410e0784cc1192d6a6122011dd6ddcea3b27bcba811c94d5dbc246bd3ab66e041cd6f2b868b999eda0138f725dc7c59df7ede3082100b9aa5202aad0044690f67f0cf5c3a3d56ad6a8402d6f62c +P = f192cc535ce7d5f0bd4cceeea297aaaae4463e8fe264df2b219aa68d572dff73cbd6555545320d37f48bf6a21a4cca7436c528c05c3406e41f00e7bc2f35bc8c033df597b1720bd01911b00fbbbe31ad0bfc80478f41e724a53e8cacf3980bee487ae6089087ca5b198ee61d957daee88701dadffeda9c4f098aa7f9b69741c23203e96d800ff8c2f621f617619ca67c697466acc7130376dfd9acdce712aa4e0f2e675b03bd34c1c330b9f6a2fd06ce2af5904c885827c5b576829f98b26168027b45038cc88d551b3ca91caa004780867a555c2abd506220ee139448e47ecd4282611fc843c81482163a01b2be13d509fb0fc26e4cb4c9f82d4bf7980f267526ba0011625c3d70a681ec7928c079fd76d8f6991bedaf9a37f2af47dd03a75e7fecaec51ec0c43765478ab9f77676acfc2703be974e9c5492ed6175547d835b98b94c17ecb277bdd9ed8cec30997167bc1bf04cdffc629936e36df90c53aafc4553559b7e2d24e2fd57f0bc0a5497f364d50b8f1f27530abc91069807f72a490f32aea953ed2a1fabede8ae0596ff0bb76afe5dc9b1ccb65a65f2af6599bdb548c546b994c07d8125b40c1163685fb82628270abf4731090b58e12b47e81a1cebc21e281fbb5f459e02b8c342dfa805d83a5fb9f3fed495b9fd13dd522a0becfc074daef1c2ed47664a1f67412d1a319d371690266f00f602a67927695cc903 COUNT = 84 -K = 1ab4406a8ff9140e924316711a8edc9cf7f18fb84077d48f22f0bffd39d9e7f6 -C = 3fdffb1dfd6fc262ec9e499b7b7c77dc2778083cd716b320e01f7f7ff92f725897a605a7b13db6eba9700c513060946e8ca85b2a466712a07b6249ef42be69537ded3843db5e00ca58fc80d421c96f656d1af3625faf2151326459827b7e858b168f4fa40ae936d46b84fc5a7aff7b70 -P = 4d472cf0bfb6a611d0d61d56b91d399b292a98b0cfde65c84f8264d073433467bb0b8f3227e54968c93ab6c98574b7d61f89dcabb4abe529a6ba539eb9ffc29210bd37e64ec4e4aead15a9301750adb2fc5541868f49adf52680235c02dbff1b705d659c0a +K = 55fd374dd9d2c2c4285e71681fa52f6d32f9797491f22a3457a10f31b5a2cad4 +C = b091d3168e0343eb7dec246a9349d53cea574d62b5406bf9d3effb3261ed211b318d1687ba766937f6475ecd94c0d3a75a297f558eb52e4d0bbbd42baeb93ed93269187ccdad7691a91dbf0745ff3975911d58da316b2e0f94c3595c2b4cfcc4ca1f5c749cd197e715ed7c0879b58900ca678d9fd0913bcbb3bbacad998cc937dd17e154b68b291a99bd7f130c3068e64ddb57775552d262360edcd2e32f7eda5c6219125552ea2ba3ed205fe6a6c68b82f9212fd389b195bbaed0ae6c7f58bde140328ef38ec28ad9a385cc129936c17d3f7dda44f44e1e897ff613651234b221f2ab8aab9f00adf206a36fb2bf09275794171b06de84be0ec913dfd9332245bbbd38dfd008c9694bf5b81db315c184b8b095e203496340fc46f5da55017c6e7205972c2c5a08e2953310a041a2b3dbcde9a572047d3df324d5d240c46821fb76cd37b65dd2bbd5e27bbc12183813c02f19d36620d2ec4ea7a82773b7e5239e15679ce3fa82f6e2d2e0fdeded1f7d4ee4190c41d26ea46b22f032fb01a8e0541eb7754ae78075355893e0875a7def18d2604b27600cafb91f4dfa99589e06fd53b1f8cba20acf3c91ba4e754456a9ea56b6c55853621c40465adf8af68365af973ac3c7d0fdabd33f3eca6cfbde7216c00211ba71a9c42623a8dcf808b24c0c29751ec0759c5ec543f5af80fe6f10d5447f5752900aadb227a01ba3e657c3520e1d77203e00a1d1 +P = a91e2cd111ab2686b84e7584459341dca68627581611e2236c8a95e2442b11c1f14d60cedb0dfa6c8c7893067ad74afbf0df34e0b91e012f66a193d88d2e0bdc77fcf13ee050048bbd6545f0a2785d833a5c90eff5f78212de8c638003150551ab5b071f416ac08b2bdd72d3114a886aa74d1a546c8ec3ac84f303a3d252823a873fdc41107ecd5f9cb06c93606e23ff65c31ee8f7d4b75697e1b622eb68b2b23ac9e1e699c8e0408fd21a6c8fe6a022d4100054b10aebaa50f08eb5f1f241c7c2fd38632f8734db1f7a12a449acad9f9c2aece6a2555362f6c16ee3ab806dc163ca2eb03b34376e145c0c51f317242a39238eb1fb849790ccf4966b0942bc8ef70c6083f987370dbfa7b86dd1767be31a45538fe0f9eb3d6de8e5bfa4340b1a90e92ff5ce46f581f3f6fdecbba53b613dc7ddb078fed20559345f75b4e4adb3ddb7e18b16f87ebe31ef5189325b7b776d8d9b19e96d97d21c741c24e6cc97f1cf83f7b87029c13032a553446361300d0e68f11a59b3bd1173826a46ddf95d873e85382bb78338376926cd55c8b270dd52a0a7e6624b15eff084c057e3becb90e75af6c4fe4c78e849376dcd3037c3c1473b1e7cfe6d5f2b36e4185242c546ba8ebc4e564f4419f137c9040d3eb17cb758ce1a7f88d836a31edc259f9dabfa1440462b4dd1b871367307619a7c2fee1e8a168320a16adaf167c65d8422a4dd88 COUNT = 85 -K = ac3f9f8cb416a7fbf8cc08a64b473ddd07910095006f06194ac5dd3c31f5891b -C = 55b93456bb1cab33d3e30df131d275364b4d89617e8cebccdd7965eed204cbd5a915a19b85d7e20a78a0c35bf0eb75044fa2ab4f89e13b31ca3b72e025b43a915151cb6e3f58453a78b03fa89df1cdda46b34de70bb9a9dcd1d38a1ef91f2673c161e40a1db3e76f064168fb479287a1 -P = 0e89aee6577b1e887201e938ee770d82c91e84a527647548d62d14cb713d54340a3308a45588f9ff1dab3e8c3e0f2b9432059c2a1d51bb75a4a3e09d6a8115812492f402364402fc3345428aad80d9aefe9d6dd7fae0b0f418d198fc20f716bba24044ebd1 +K = 5514ae253f642f9f77baf732c42d094025a01b1f1c12827f67aae5387c88aadb +C = bbf3cc203f4902e81ff2bf1cead7d48deba8ee95ba971059fdf134a24b6bb0b1030fd49fb99ab4a20e056c6d61ff63fb91fa1510490bb90404b9e89b75816b1d65f0ea989f6c76fa9ee223d90dc4702eee578e19b2c345259031a2494e90a7426cecc71fc83c0987d4f9d3017a56bd6570ae5a64065ff5938680adab75ed34d49b746c391ccd45063f43aa53b48ef7803ae92b45d0ea533ea9b98fd31dd714fd1c4fbb0ad494c1f02b54e765ff6a63800655f3c8024195a6d812d13a47301d614dabfb2a403e7ed158367198467b0097a80b264d38f744030b3cf2d884354b297c43708dd9880cae20de2c200ebe96f2c12483932c281cedf23dcc34163be95d96c7b3e0c0d16b31361fea781f635eba81966a01f522d59e05e765132af40601b199150d3d159b59126e220d546eecc37e92199a8b0c48c827705e9fe003b612444659301bf1ef7b62983575ebdac3bbb366d014b1bb9689500a860b0285df6f31bdf47bcd1d51afd61111d79fca0e11c8dbc8f40afb498d19121956a189d96457bc178df15c1a420431031bec8793018231ab9b9916768665e2be1671af776f6b088cffb1a20b1a6324574b33d0130325bdd9d9810f982474ed4af4420155d2a5d590f4b34c14f496738ec89853c1ed73ca4cd502a61b23bcc631a0d27d9f722162f744daf4451a71b839d1719c7d7502ead2675275fd27b91d92928376378c9a697761f83c6ef5 +P = d137613bbcfbc61dec8bfe981c6a312ebbb11b6bf6b792fccc96904852da684ed572e8bce1126354a37136320ac579cea626938a91a8495730951623deadbd6a9925c3937c31f0288f5a330b6fd4b86fce8454d0d9ff7921f18b2c792aaa1c419c8bfd346b3cb146fa6955d48f4df06cde10212a036303e61d84f0d5d35301d11fee269b32af903c9fed70003ecca63ef89f8d5aa2479f04f5437b0b79d70a496fca3f9ab004bee851adc34d9c2d5bb6fa088c9406dd8ef488bcb042daf0b23dc8bb6cb51ec496feee4a535f7ee0da0cf410dad4da05ab416c35a90b406a9625355926532881c5cbc567d269ae1c1ea26485e1832a92b88ee047cbe80eba57284f9aa2bd01cfa5d46b618d6f55a495a0932f374729446055cdb69493fcb213a38b556461886247b4c30ccb266ef4aa70571caa86fa0628094a63b95b092ba71698cf1a92b544405a0da95e3f3f1eca7132cd13ad2d97a29072afc88db3298e8cdbaf1bc3718bc376775b20405420146d6ee7a7ea1b1b2deed3934cc8dbfd585ed024ee5a0bea604c0dcf4417192f5fe1d27b0b9379a286aa340bfa7fd8abd4252d1c2af2d634d2123ef99fc305244d9120adfbd07d9870eaa17aa3571d8f645be814434c51b3885a13499df9b29c00628668cc9bf15e3b401d99e74a732e41b22b071fa3125bacef81f4ea2df70bd05e3e36ae9f1c6a3327a31692fba67165d4 COUNT = 86 -K = 4eaac8c720f57ef50430ca112f024c21722b9bc1826867dc3a23762913cf6aff -C = bc5cec0cffcfe8f423127fb740c65dbb94cbd8f67fed7a01ab324dbfcbdd8a3df8b96c339961f4f91120be4793fc029428773ec8f3f0d7f6f3f68842903c3fc7b2b61f88337109664efb2fc104932f598f68dcd0a2ef3f8c49370613446e05a888effe4ec95c968813ba48b4c2f133de -P = 5abf12a9dafd2b3f8dbbe2ddf5f6a43382b4c617d90fd28e6b6b4e53ac1008aefc0e34558739f1b1c2e0e63b379dcc5cbf2859a846f8d355bb8cc03d780875077581a4a9dde7c0cb873d372bbe0b5e3f11091e650c2c92b51669f0d111534ee344cae2823b +K = 49827d9c07e2770cc18f8a964e2392f764eadc8cd1baab996d734b016f6b87f5 +C = c15a2f74a9cab9425b1e84e159057ec12fd2dc8208b028407aee0e9dd16b51c312367ae33e1211b25faa02be4fceae9399933a8d5dc45ef711db4023f803e06275f70f6cd94c14c7722d1f53f35dcc8c3075ce02b4c7b70a98c8189bba2e88665bc609ce8ab8425a8bc0af932b2709139fa85186a6a06260c0a612af0e8e1a53d11087d11913dfa9c766e9c0c9e120e30a89203d7a4e0acf312228db3500fe461cf12c31ba0e7d00656d5c050a41d6ee9547417c4cb7e2f89aaf393f380d5371194253c196b5ad95f212fc61e4095cc8d6bb71fc0ec12a11d1efba3ff1155a22f8c23e48ba1a0b38697f3546152cbd50ba19f5a09c428dc5a8f636b18e65d35d52a6a7ec6e2b6cedc66596ccb9ff7cf6ba4e4b2689d6aff08c6c51ca34f54573ab4c99b2d0489b301f0be5a99b154508090afd0cb754fb90f5bc68813db2b662e68500cb4ea600a60c8220f62867f7904686d9b5b37ebcb96fca4faf8afdb3bc7b787b0127a8821e7a96caeb8a917d1e2505b26d457d91aa057b996369e44ca98fee4e1776be684766cae4555c3a4321998a443e7b4fe1c0a189fb4a2b4ba890d382a27094d9c992051d1ed27354bbe12535e230cdc63c3b3d92e73e1feea63acaec1cf898f5e337104d84ac5b573f65ae3c43b7c006e8426a6f7e56ff5d03084c2daf99491f48b28adbc4a7ea2b9e4448a19ce27630eff9a39aea3704e68fcdfb848eaf4e9402ec +P = 5daaab87f81a321349bdf794f8b91f98c57491ad2cfe9e50b53e4322197bde6e09f5756e17004ac00226b42cffda9b90db5bbc307d45aa31ad275913ebf5ae858fb0734b3f9ce2ebcf9568087642039c1a7ef140616f22ae4cfb826b7604c893eebd92a460d5f6738b586a8b25e6514fe308168c96aa273d91495352a28baa0a0e934d5c1fd8ad507510469f5dd3ba058c44f6a1c934ddf30bda80682485975fcdf8f36d257c25ab6536a266d54bb24999e9dcdaaea96e227f601c11cf085e4b8a16a6c6168fd98f2950396b4f732f174599b05ef505ee4c2b76a072b9834787368c32fcc75eda3a5ced9a1d9f89c67de00a25e0a194756de18a3908aff04bac85f491cc0078e8d1e4faece1e73dcf2be518bdc3344d2be8759e8b374edd57cacfd3e10effa13748d0ca260077b1c8b1be7aa390c2a9a16b3f0c1540e611881896b4c2afb8c0e35b795a7c2239d08f4315071a7dadea053cbe72aa3b6bf7b9f95d4c110e54dfd0d944330153af9742f20880a79fef7845fa7c01401fe357b0763a60b7ef1c7f537275657ff3aa4061f60b4a1dbb26f51b3ede65f9e6d8ec8a3e8b0a96e2737f32edef49a991f90004db90afbe8b73f1cb157e2df2b1ac1a8328097774be3aa9db87bc08e5b0ea8fc5ff20e918bfd56477a8e15746913c5fe95efd971462f413bae5f53861912d934bb839f77a19481f936bbf5d71b20e2c7c07 COUNT = 87 -K = ebeee262b8c237ae34b6627aa9a396986f93eb37fd9e92cd2ec5b73c1021ef64 -C = 4b8411a2d3b7dd3d10df2833d655d55283cff82246cc686922f959e1c66cd9aff2bae08b4abadad27efbe064f5f723ac24da8797c99f9344631e92f694b0dfa3ce12201b1603d5da3f931290ba0fed4de4de65e7ec3b91825d221c91b64ba4b7339b640d0063ce6e15a80291180c9b1f -P = 0a3fdb48b9c78a83a63500e16d953daa26cc04ca55bfe60f6a268a862aef63a3d1607c78a73d1d8b955c180b71cb1b65d40ed13563227f59c97b7364fe8b39788757b5532535a697303a277ea081016c01818fb4dbe2a9e3957e424b054068006901e09a9d +K = 89f82c1372c7a0c2c4b099709116c1f93cfaaa8e4bd97ce033e80a124aa42924 +C = bf7a2ef943f195d2d0b93fc4646315ea27bddcb355ad886e1601c5c26a4381027aeb00c460879192ce5eee66e9e32c15b354ba1fcde640ef3f2dc750a32449b0a0ebfbaf8e30ef2ea482797240d21f5313a6b4431fc72efa3cac0777d9830045e1d57cc0cf5b96574eb4e86c72bdd34026e6d60a66b2cdfc38914553e7ec163514a51e0ceb8ec390e3638080512c87c7691aea590a339a01279372e19d6da2fb8fbc52c358e991c043bb7c18f9bc31c23e6cd9e5f1b2d8ff8385ef6380a2be12e25b43744ff5aee7c43ea64332ad6a5ab8241822f110c80a3bb2b8e6f5f6fb3603a840ca77c14951b8822a3b6179ff8cab31d38a0ca64b0df4780fbbc9fe90bd6f3e82ecc475d1281e1b7283dce8c6b460cd36c84569809da418406f56da6a5765ea33f2c41929c7b8373f00dfa48babae8a26bc50119d7a314b8d9aff225863298af9620e55d1a4969aa39ad86ac77ee098b928705ee48ff2831fc2aafee360eea2771e22361bd36e6bbc23e34b6eb91a8523f3362fb19bc69b90f40344fcb4e15b3e3b2c1702d6ae185092c9de6bc851b2a3e15c8ae81880cc5f03de9382070db74f1330b8bf181eb21542de4a5f2d5a99105b3cefa9db406c0a57a2b0f6414b8a1c0dbe32f5996e501ffcb97ca206642e28969c00100359a2af6ed7fb8d8b0f411379eb74688b2c108893c6b0b3cde12f10683b766bc4b754ac8d3b857374775b28ada375215a +P = b657b0d48f5e4521a31f354a99e050ce7696030ef75d0e9f5dd58869a6e0590c809cd30977ea79290ffe5ff2ed36dbd57d5cf23a74e13741dc6ee20fb71622232eaa5a1a333bd9e0a9a4ebac1da600e297af3e7f864a6da7d27f98207a046e25fdb00a4cf759ecfc46121baf73fd88d6c913de8edbe2de5332f3d912e1c933bee79f59b2d8de22e73016f1ab5fe08188177ff23543091bce2529e41ebc408d2fb67a651ea0430d09e3b87ec46c0d2bf3f200bebc2fb3f76176deb0df068743ba4099419498fe06e4f5be6e4c59a9228e40da781bda53bb1a1aa2d9aea2d6a4ef14efdc7601be79f26025dc8e24c2390e96a27df66f9e38654b83d91063bb8be2d23738b38bac6b556e6c0271fb0a9c31ff757a9292b76cfb0cdbab0acacbad326d81f46ea339273926628c2bfa5f941053a0da928ad2016d84c74618ebbada28380fd084c0f8a1b2e903d61e1a280e1962da30cf5dfe857494b1f1459cf56171ae105ca739a04f10786276aa2c2a4946801a681de91a98f08f8ed804ba405baa699b7ae88ce7e665a893b74cfdb5f98dbe5314621791c8bcff3795fb3ff047f7395504e67cba21141e52f032654b4aacd2680c297f5626d80f66ca6c8f494d376060cd62cdb10aa742f674b1c59c38761e2c11a7ff12cfab1fc83631a6821a4d120d3f4f6185b1c562099614e38edce8ab5d8a47d411436810c58b97cc51bee0 COUNT = 88 -K = 2771472142aa0f16e7132cdf0c56abeec57359c322be09d987c27c554fdd5cfe -C = 270639d163600c9633807c472f608e9ce035fc204badfc5e4ab10ce3b80c7878a6d8b672fe755dce217014bf9177c02c9cb65011eda8e3261e6e5a380e9b52c72e7664aea0c972e6f3f8d48182a29a68ffcddf0e88e158a714492e77dedd225b2e06a1c3b2472a108e38379b73bd925b -P = 2167aea625949b30a83069b31151d4b7b0815393301da49c97c30476ae4755692075c5be6e4c88efd5ec0f7bb616bab57aafaadf8d6682cefa9c03d9b0d174c6cdebf9766a40f3cadc01eadfaa4229449fc4f5ce95f1c83e2d2c09432a132f9db42d8af36d +K = ce2d2582ccc11dae5e04a99e5e7a2b1f886038435faba61be0bcf99da05e048a +C = 6fe0fb5623fb3b43be5a270415f2b222da33a44a7c999baee7c7f32076fbf5d6b6630e7b38aee10037ee2528592a64452ef2595a2766755e424bda1dcd628f3282361bf59adc3f05364e269a31b27123e0cfc3f59c06cbc1041f1e619858018b81edfd6693656e5b6afa987c7430c305f7c476d9916265fdb772b33fd30890e92b22fd387b99adbe5d8781bb5f21920c8513a6cc36ed93c42855a117b2c787d28fec90655f56ac5e45795f0ea587fefc69b77ef9b7613b98d2d37ec4c6f5b271615e5bdfce8d3a698387d04d790791bb4b953dc4e0feb442f821d6b72390f8dcf0186651fe3c268232cebcbe8e6628ac3cb7b24c5576d7f286d4ddbbeebe8e26298f80896374e7ec12ea75f8157864e608b78e5c3bb10ec18c39db1344c1f3d217d8576ff61374d1eeacb415eb8dd7d919286f7e65d7e42867a81c0cdc933cd7fd3ed3f9b5dba8558562c0b36614f0da941c46b13a688cf8f4a6daaff86bb3334bae2d754695d0a4f10aa0c4ce6e63739ee36b8afb7ce3bd752edaa43bcd50437d801f026127ce946cbdde3a155ebc7871be495a4286e5d51a2c505e85fa5e78aa64d6e21ad1e40ce26ac798ec1235f6b57a4e63873038d77aca723a045c689313505d03539856e9edc5a1ae932e76e97ce3519536f5416103c549844e34a7898be4aa2959ebb02338e0e128a23bb297a926794ab09f1cae3ceea79b7b7cbb4920bde65eebf50283 +FAIL COUNT = 89 -K = d48bd74647c9956b23619a96ef5a1909a577f05baf36c86c2fb06d395005fc70 -C = c3482ded386cb410214410d6c1fa4b7549707a3585a9208e4625fb403d8664c5d6fa2fac38d889deb2afda0757a8f0993d3025871e1cb36eaffd5685243161739c50302f941d3592ae4862ca3a50b325ddd81669605667d57148af7f8ddce518e61729bdd7f59baca246f58b933a216f -FAIL +K = 4a50876cfdd6bbd92d27fcb9f7b1fe33483486e5783d8c68afffd9b5c9957218 +C = c7439c2eb33ca1b2554086ac46f0cd888b592f66f834de27d2609eaa98c49dd71fec79b904a2460b69ad84b173e89270067b44ba5c71db964344bae5a6491036bdb0b60b9063304ec0b4e872c3a4bd75c856aad976caf7a8f0506066de919bbd2d0c53f393b0bdc122d1441e0c751f0890702dc48ee797ac567e8ab0a3f59c9b61bf45ee575f24dc9617619253073102df6185dc5cd7aa1d6b9a00858030c68f1855766f393f01b4cfd0b04109cea1472ce0793be5e019e681c60eac2b5aec56326c4bc8119e3a3279fadeb65f5c3ce7b6fbfe18aca03e07fa32db7d1ee9eb3adb9a136190dbcd298be83b31a9745f0fef46c1a7e4b29c42c6602291123c47deed58cbe6eeb1a9f253962e1f670c4f3a3bacfaff3f37acc3c2242c4655b1893478d79e8f9bd5c350df318d34c61b1a657596b21dda2ec472a41597fa092950f2c427b8447e7f4d3ecfc86dc110963be00fa890252f457892f21a9931043cc700a99752830e44211f19ef9e69a128c4dd11be1e988cf88d5a818585d27fd4a6473c582a7b2aaf5b4eb4c5c5a3cbc9de56db46e15317bcc37024531a8598921b33750150f2e02b0237104fe4854fa58af0d28d121ca54964fdb5344d7edfecc1776381fa793bca580d181cc38e23aea07bdaf78f2a0773b7ec24f32c7de5f9668a67447e6d9e35c865ae90b9acc44bcfc62c886653fda51e859a86cf90fca89d73729fdd5311cf6338 +P = 72a8f1d6aa56eec6cd4ffc04bf7d86878e40910c9a9fe8cbd7e2973ac3b308e6a0e8dd377cbea1e16ee0283c19867dc90f1552ea441817e1909659159a0432feb70e78b18b3cc27b75c5b56aa18ec7cdb548df7733ffeb9247bfd2fe967e1960acb146776ab2fa310d56985f238820d7f54d345584ce45b2f4bd6ab29a86835b534c477393c18d9fa2a583c59531fc8c77c2978a7a4abfc30df019b067b7602efa92ad1b93db556ad4c08c40f8b4d5382aefe997ef77b9da5e8bfee5b5b523f34cc725ed74f8ab8ced3642aaa74b32be8242dbc7cead68f059e7b4bf773f57c910e8571dbb03b1dedbd74bfdc54da1dd04d9f5c5307e49c201d0d6ffeb8b754b81b346e63251cf955a4485657e7b8b214088df23613369d96d8c7452649e9a0b6a7f6337d0737b6c45455db4ae2421b2dd10deaa9ce745bce42a7ec9a33b720d21e0a3530348e01f72f64080ebe8fe9765241c38ca426a96c20f09932835efdb73451b3a3aebd7a6616172c3944ce2caca695841f8194d63caf4249ad1788ef915d393e6dd71c1632772c9c53331cfc125702d32d77f0640952de0333fd6239f85f2b2f57c2e7967d75635e5bc45d2a50116e3a922e8ecb5701d57c27372feec2b9cbea1abc3079fea85278d93f87330582d13d5297955b90cdf2505dd46eedca703c09affc7f7c6af9ad797acf871b166ce06896754be548325078484031b6f COUNT = 90 -K = cba62cf05906a7fca64ed12e7fbbeee0f171e564ec65508b4355bb070d287094 -C = 6db7ba9861b07dd8423143d853ea623f5697ab17bf08dc0d6353c7c8395a6f7d25df0ce25ecc75dfcd37be070f68cd079f4b4d9d6c2776547b73c2e3f9d902059176f780d2798e1109fd927232d44822aef5ca4e6b37efb8c2df0a2464f011808ca8a4398ca0ca808cb1817445361b77 -P = f8eb3c5a6af1380f9a1b97a3fda958176991dbc3d578e5e1f36d90457316d32f41497aaeb47f4017bff335fa711c33c26596f805945e9ef1412a72b08006b5b7409d3431459aa1b8bf0738867b36729209a30ccc910937917859e64a5e7610f7e252f1fdd6 +K = a31332ad266adfa14846b2770beaf7dbb33f1e40110d2d37868885ecc9365b58 +C = 1a30cafc9926bb6e61a264bee862a56e609b0c83d12bad22402cee37a9a363c8915748e7b6d43d61c44853775af3561feccb0887c3fb08a05eb09b1ac10962fd4a474e335971973851ede7342677fff2b2a21221af6288b2e89319f09634d5d1fa6a695dce27a902ac36e89a355a09fd093b5ea6820ab83edd40d497d600a07018eab6f69571438cbc9bcaa6b3dd2b6d33ecfbe452b1cecfe3724e830b2972384a5ae73bf7a192d9b3697e75a75d7cbb55803e8d090a64ce0295cf3478512c9141b138b297e07220430c05b8fa48d636b2769e7861db24c957e67ffabd045dd0f7360428fa2bb30c48f892d246ddd1aa6903e5b9266d86cba144b4f35eb61949b98ad0686effbec1920093a793359b59c974000532600e5012164d5df7cb5990471f50c27fa08084443d0f736be64b88c6193d3b0a95e1c372ec8213df7abc3cd0f4f1306d3f904384968f9d5d6174e65cf2ca6c4959f4f9dda93a1feb96ac1ac6eb85878cd003e5dbe838b1d6f3ee7418d100d935c80aa8357d9293f7812df2bbbb1d2f758a2b0f6301c55f1b91db7e4bad4ae1ca401670c976726c9228df1c82723712d06c62ad1520c6b526db005d80889d4ab1a9ef1aeb13653c16be42ea3297775d3e528588670405c8326ddfaec84961fb26951f8e7b7e65f74df99b45e6c6ebb1947fea3a20d741e36b4808a729eb8c2bbe6d604b0e6c6dc1a10955ea672b346fae7bba8c +P = ca976fde70a7f768b9cca77efd5b6e968721088ffa294078ec8175a9fa9e9e522e6903b608a30e4a20c6f48f360f4cfcd736b27040cd5b25d642c2849b9f5bfbbbc1170261a104cac08d2a2bd8c3311990999048c3daa3c2354836bad3536421d1e910305b8a13856b214a38c730eb803a2e009ccdde2e36ef36a252c6796577d984a378239ae7b7a6d309bab17ba940fb5eec49a85688f611befb05a29e8ef7d846bd9e808d4522bab83277dadde9f84eeb1efcd4960690574c4ab80e3a58a8d5c53531a2144b6cf2fce3f3200fa7ce4a5c8f6b3ec369aa5302bf66886aa1dfbb71f629e54b73901e3c973556c37bdfaecf3513fe6bc9abcd775b20b86b425244aabc226fda92a78fb161c07d453fe513ecf3ee62b0c5dc4dbf9ba5bb6d5ea6ada54e321cdbded4e4c1a7f007c8cf7b8ea7c579eaa40681a379307e87461c4c68a50f5fc94f49398f252bc0edbf12c5a2e6ae0d09406a8d69aadf84f27b4b3dcc41e8d46e6d935bc75a9714ce74346cd1695f773cb26fa5105db80e8936c2e8e803f0b92c6eeee153717ec6af54f26dc8b9bed9f828f920e89c9f92ef46be7d50a39eac4fc8af341738b55aa86e8a993e491a07ad0a91734ca2d101c1be433cdde1eb21bb5e1e8be09f4154386bf18cf4a9b5cd9a136cec80aae4a869a2457ed4f125141dcee7640e7d4b5a9751a5aaf56d81a77bb622f14c0e14c6da5c7966 COUNT = 91 -K = c8a766ae4e9da67153adba325bde2fb1b7f75b508a948aa8a666e134daa9ca63 -C = 7e719ffd44f230061244bc0f6f7f9f418e5fb6a2b74ce59cbbe462f0434b679d66aafc68042500356aa33657760d32a6df40b08a84f036ffa9dc4d0143f119c9ecdabce221aed845eba1cc25df119661d261aa1dce8dda5435f8f1022599b5dacf7a792b7a9c4fdaa97f31181ec2f48d -P = 12a23a49304a6217b37cf08f0801200641d1a8cecf4d8f629b99c80babaacec041fb383cdeb0b7cb39d80944ba5e178f09367ab8d6ca3ce5fbb250b5d0e252950cddc5045443747c09521992588adfa32a2bbc7aed32260709809a13f66df0c0a0f47507e1 +K = bb78096660a94c3b6f4db659022e7e9d823e0a53588da0ecd90d14b50d17faa7 +C = 2f531382110f69e97063725c91e43c657be5c357c4ab4fd541b678566471b41b8256041457150413544f5f045f7e9f4bd124cabd5a5ae849ae59e3d7af78664843bd25367118260314f052eac605b8496f7a87ed8390639388a432a794dc3bcecdcb53f606d74317ec3672efeb1782948321d0bc85f564f83653d1cfa5573fb2731d4ec40d8b60bd7727cf4b1bd1241c860474005a8e62c580d6a6f13504df9b12fe561b2a32a61d257f82e54d40d05e24092481b9557c103b2226c2c1d611c6aab66c5df042cb75e20e7d0afed4f59153d1cc14eedcc628d2844729d029068c8f737bd7caeede200bcdba81a2682cd78f69921366d4093a18bcbc832048fb343781ecc6af2ac59a4c54cb617880a03a1dc54ff4bede51487e0d0be08a4e0b592e65d0fbce88f238b4a6848af94ec9a5c5bb79cec47f48fadd2b2cbb2ae5eea29c1c415cb15198e534a3e1d524b81cb790d02c01914228f0678c9a50c3745985ce85f7428ee7cd9733f4800b84149903fd1f1a60ded2583ba2b1ff64fe8fff7fab00441197d552421de8e40ea0cb82054a70d9bbea1d5a32f8364ab08a501e6dc9aca1529ae277d71f6dd96a1f077e04cacd3c255dc29f3d7010cc8c06c5feb6aa5bf530f8d02ed9772113616041f96b0ff19c0820ae74ac2f0a773df91340edb0cb6f016543e82f33ba8ec730f6520478f21ef62bc28c194e0f92feb4b0bca4117cbbb64d47f67b +P = babdaae00174c35b85a90f05d617a438747d97b1c584ca5b7645265108ec9310555ee00afe0a8b3473bfa86582c0b7821f70142336d2f24bc61cd2c1da1832cd39b067b86b4c86ce57d324705e40ca4b5b5d44792f38282dc740dff05446e624b1092c69c424dfc6b066640e050d9a456cefe6c1da6dabca862f0ea8626c2460f15541eff82583fae36f645f05ca6de7a1bea3b34d8446b966bf1d8f942bc8bcd79b7e655f241a5990794281e338e9228b65d9bceff0ce4b96512838fecabc4c500274bc6cf4cbbc3e219459f2bcc53579ac5779f244a9c3b33e8044889ef971021b277324783a4a068b94e0b2496bb2403f0b2a2d1091f2e5bd5f0a3e0cb3dea9d22d496101b20e24dda51eaa81fec76c2f6177ebed092c905929a33325dcf9702a7b5e0568ff8be499285eccb6f5d3fd09dfdb10a10c42e3c826504fbcf9f0404cd053449856a5b7172f2f56dc76860128ceeb262b25de10c1109110ffb1f01b970ffff5ff6dbceb7d8da9e348109835527c00f84896decc6373d748d916d66945eb73d624edff107ec20063d6180facf74131ac59f129a3141a07f3290bfc43f94737990d13a4aeacde21bf4bb1a296d45036acff5dd0c13dbbe70c8fb0a62d9a2b0aef3ba57b734da856faf01aa07525d6f98d18f9e40d7b00fe2813f018e61bf208318d2399065240a836a0181b9e396a2d782aec0d50e19c036d6b52cb COUNT = 92 -K = 45db14a510cd3b7b79e292fee9ee54e9b66ae2a0b1e706a295b1d63120f858e5 -C = 181842364449dcb042d899311fc5cd1409b011ac4d71853aab674d88d6e2fd655e9663d7bed58e3a4ba044dc1f2b4d9bf8c91b936f6157ad6807bc6eae9cceee7bb1551cbfca9620aad4764ecf91cb24327f1e6622a0dec895f7ba88cc109445b003026cc55eac8006eddbfa98635e0a -FAIL +K = e0428f045aa4e33f734e8b3593608107fd6a3a440dc64a4316abb7257135c374 +C = 3b3fdb967668280c36f650f654b6a2fa777e447230de8271eb8fbd2bf4c5a4405f0f6819bb493de184177bf6e5f980333a1d6df3d874df7e57daec0ce795c841c7b3d8a76bdf87a0765c488d008cd90fc1d3b07cff9da2679d64dc9dc8034e068ea07fefea1d6d9880b4831aad86702203557ebe45fcbec6d973b041ed2691c068a9e1d76a325d99d89f9239ff1444f482aaf41da5ba05f40e3ee2d91c4232fc8c5abd5d86d40aca74b09da404545631ef2689e2cf49b0d7ff17d48e0296a4dae6e1fd486e95d9aafd448176bbabd884b8405b7b24c14ede5560dc29ee08979d05aeba4cd8acc3289f5aeb8e8d8d7c3affa354eafda34c29ace495d8b344fd8be740ef398ad7d3146bae97d45cb60ba39ab4794844c7f44bbb0aedaf2b8144701266a914f340e8c2cd7027278f2505ca0f777bc7f180841ab616e553b7fb1bf8d0111461b935a4cd341d917752d4cb9445187d058251fb0b56ed1eb30f0ac6330fa9483c71e864dadf832c3d46744e8d8ed1b6d0553f50ffd744c38a183573332cc1d1fddb15c663c0ade946895a73280ff5184b491f8715f60a8805bd5c60ad5bde648091d68125ab55125f7dcdde836f29648af13b9fa4a72f154bf0a65c91181c0045d497d99ab196a81ca36d33cc6e8394606c2285ff54ccfff87b5dcb00fa637564895201ffa30da4c5b376c2ef9505ef4be1409484e328049832b32f6878a580584da6ed80 +P = 85cc50b708ca6020e629b4acf2f64087c97bee00fef26e776511a9ab0dc2821ccac839b75c93b747bec361e96b97adb0e2eea0ef83ab4b0503da34f774be90250a414db941f55394d95c11c51e483285e6abb8d7d1b44328402920f5ad48ac56d3745dd3e51e977a237d729046719be11df197f80b9b6504372d2b9d2d44ffa7eb762e945dc54423ffab04d34d0a2180d8d1a4951a93d4ead2124ca994f8086cda022eeee4c9ddfc0d8ef8c9438841464e5947a7856e427452022109abba35625061cbb10fbd98ee8a1eafb7741348d5ea2f00a96c5d78ba6f92d1bbc1763cc2fe4b7d0cb622ee6861fd391899f40995bcf24f7706e825091e4d66589c94d4ce5f04c3ca2104d1b76807c44b41818c16070c5dcbd753375ff7135288b45d3fdd0226fbfc99e053d797d5e42b65549596ec8cc12e9ebb1878b28c0223f5720317575de2432459091dec35613f0b31a8ef7c4422fa47740bf11eb21c1e60a2b9c85597bc13680e51d704d75d9ff1dc8e41e17329246c92cae93baae98f1b25bfd962a61fccd9ac3c79ff55690d3d8266b9912b34d1bec399159501bab7a2c8408fa56f4c4e9ceb0bce48f0eea6cd7c78aebfbc7f4df96b5415233cee4e6a7b415e5a7fe6df9b683f6eb673fa7ec7036a16e95d5f89f53537986010a733df6aa9ad01b0045d1a0546f202b2753be6d958422d83230fd91f8849d26b779844b5227b COUNT = 93 -K = fa1f2e8bf992984693dab8460734ee2418ae004490a8b7ad6f8420098f931ecd -C = 1633a2115cacb0b890bf80555d6cf5b49ac8463fe659cd96c6ae40add3f88978e4b9e7acfa36f5a6acba2a631e7257892e1b006787684fa3c67ad2f63e3b7f641c6c2a11718b335cce8a69efee1a3f9198d373d50ea6869e489f30d42231bb251d4af978bac4c80c46039b3567de4e73 -P = a9f45e02f962a6d774a1863490cb32204d2d38b85201c712efe41747fcc9e76bc7df98ef2314e4b2d9456c28bf1e699b752a2be32222840d0f34ed7b0dd3ac6c15e8d6a13b90d30be3d68b3cb867e30a1f99e91dd343034f9895142f768e0869cec4c4991e +K = 6abbf3d12ca0051b82471875013b6f543ae92a03d6818b21ff7db1421e610002 +C = e3a45eb41cd1726920a63129511afa88799a8faff3cd74ce9d00b46451f45fcc3d5cd9667d960f13c46c6d9f39a8a47dfe524bc756fec4f12faae240eac02f4bcf9a53b6729040431ca569b7f5d34d4f2dd35cc6f8700be7979d8a9d790d779e6fb0a3e26a48f399ab6035aba6325021aebaf83ddf67aa6dd8d7f10000d53d525f284ebd9227f3db63731ee64e42432d52325c5de0f77a90f52f90011fbe60303094fcad1e7b7855846e577f5566ab52bd1df94d6364caf6a5a1e2e9880ebef1490c7c4dad01f19223e80739b6a80fc147c7522a7c18acb4a9c9dd91d7bcf136cca368e0c4919e0ecaed9e99fdc8b96e8a2c8301bb506f9ad270776c820a3dc827e5a5e5885cbcb300994f815b41f2a934858091438c8685bb297cc951e161bc035a5101c1fe06337b406290c35ec82dc33ab1d1e2a81b962a08fb40ced9acac8a3f0ea3ce6c5903c4e9979f4f0ed14555f9f6c3b67d895fd84ce4e000ad3f4f070e3d6814136a4b0d8259afca11edc10ed9ec2abd6624e18cf1de303a9b0aa4b5c02c2e2ebafcf2f9b4fc98babb15e7ffb74a3b3f8192c88077ac3c1eec3b2f5aa2934e416abfad2d9efbbdef0c5163f0fb32638e8d9dc39ca8a36076eadf8322b5ca423601113ef08c098e80c4a3a562fdf926e51945be1b7fdc43636cf2fec62607ddd54f3e98bf6c8f800eaadbd46e4d1e8a27a21824a30e2b40244964e96172d2a85d7f75b9 +FAIL COUNT = 94 -K = 7126dc0ebf5ee56c6fa50d6f72ad143c45645bc033ae2617b2f6a3952fb588cb -C = 8754cc255c321e35b5213e87250285405266e7292a7bfe0081c0248266058b406c597acc5d7b9224f4ee2599c11e42a1acdc612f612b82f7921e3b5a35c8791cf93c4ceed142ec3eb617b94c4d718edeefd898158d4c162fb7dec2c299f1ce734b9ccc64f9fb2fb43f1e8ca3fddcc672 -P = aac897931a0d6fe677628291a9ffafeb615c4b8d34f7a638b1572b9704edb95bfd8447e8d7335adde6a9e04d869628b83881a26c4d61a62b8b258bbf56d508a7424a6bda4b5e23ca99948384090678650f5dad2a5d18f5b43d10d81dcac7c7a0a8a1ecda63 +K = 9b9676f1d82a7abf092b0f16012797c11cf1f6c933b29f5c4113ebfb57c227e8 +C = 12a338993a0bdabc95a4e19ab0879c4c023423c30c03462d5edf110c2cf7c14eef3f0c2fab664519f7a57e713c89335e3df9bd8273f2e754bb4d0ca05fe1775d0be9800d9f1e9ea923332007afae7e53960f10bb6e902b96b72e1c3fefdc0ff8b200b0c270553fbb9b779f769143d5888e726c86eacf2ae03f5adc908df63f351757e8c965e5daee384ccd1c6e056b63495280fbad6c5c6f312f93d154b9b365570aa7a552a18b27321bbe0a0605f6b65d1515cefdd27039e3b24689737d79c985ef15328ea5f9ead205e062948251d6f6d44e4c6f46075554e41391532a05691e8f09af798bbe491fdfde8a992479404fd7fe78581254ceb9a680005859963412b25adaf17838f1792246205f8c9c61a1d2d71051187c8054153cc9d9078caf811f137b6bb1f228f088facb95a3d35dce869a8deee4b86837d23e7f609e1cd51ebcaa737b8c4caf5c3a3e021a3b86821c5ea8646c024463879359edc346d81da01c37dca2679f1cc793271da635536d738f9a6c55992a0004195c0e7b5bcd20d6107d7138f269c0fb0c088245520970aa38d98791a33e6433d0d8f75e0a1d971f464a799a9d14d1871a5fe66f4a86112de881dad4a53322f67d119dfce6cd644558bfe1471736a6888ecc85161fdb86ff0a4fd63b1cabde0a497afdfa0cead3c95954a56a2df940208d585c60958485cba34e8ccf41fdd112a6dd96e10497f6316a24bc56a4e84f +P = 28dabe6b644d4eea59fc976955cdeb8774303ea79fe7484b6d0448d1abd7021345e317660b093fc14d5ac5ca2b6a30d7ab564e3e9daeb332ac84a7599000abdc72c9fbe216343f82bad77710548e525f1929aaee124d37825ca62f227e117af9ab1fa16446d17c1117ba03d8ca8ddbd33c2c36955683c682e9e15a1bcdfc12ee928bfb61ae09f516a37f28705ce438ca591addc661b7d7c2e4d862d1a46978d88384b8b597b9bf667a68d5c51efa014094246c9ec8fe30fc9a49d394b794208c23739d73aad79ac8ee3ca4bf08f77475ddf9eb2e31d06002eaeb6708e8f1421221d555c601b2593fb4137a5be8dffd8390d3953eda5f0a92573ff529e71cf5c5527001bdbe24b20007a593ce3a55fc2fd1400d2050705a3102a10fb08f4f38b30fc37ae5eb50fec67d349264b8bd4a33fc618bced8ab1430f6fb52736843844c336cee638a4296e93bef766ae23eb3809f37119845cbe59dbdf384b50e433a0f2291e85dedd99564adbd35412adc46f3933c6bd5685d93152ad6222b1a7df5dd73622e9b75ba16cc24f4eae3c54b704c6fa27d9b44a9f4674e942d8462e84782df8d92cd42bf00bc6a9f2aa575da6a26fc2d077b0535ac2fde8c5053523050f50173451433bad013abbe325e9fb847511d085f1fc7c78fdd81c9fcfee0a4a0ba231368ad553c55a963f121cd0ffd69e7317f9c296030c8df21d1483a19e5cdb5 COUNT = 95 -K = 1d178a47312850922010e4ac0194e79657d1f1e7556553bf3791ec5bb1e46af5 -C = 86fafedc89ab782b739206514d9857e4e3539042d3f49fbb049e10012bf9e8c64f854b20b57100ab406192ed3f54a902d386b811ac0dc94f3f4b5c4811cd70aa73866df65c4d4ffe6a1c16c799c755912e6b9a568a5d230c078b1a55a5a37b2d51b88cb6a90163a06b580b271347b9f0 -P = b0965e3db9de43a2fcbc0129e9d0bbb85190aaad3007ab9114780b0b759f0db85ded47aa53b12ebe59121e2d694222f29bd7057126d42cc2eb89731ebbeb74cbe2e67f59ce2225a0175c3893cc7e859de7bee7e71a56ad8d135e718e655482c4d9e22e1e9d +K = 5b2562a147f0eef5203f5715a01db328297897b764117e570affab51d5f9426f +C = 83e17f97be7d027f5ca4d34429bd3ccf87143a450fc0482b3a98044c4c03fa4b9c1b4031f477a606c240073b2382af35c21ccc75088bcfa5a8caf314e1b6f44cd8859e70680cac610d949050611d14a9f2835ab03c8f5a2d2eda3dcd0812c4c3193e841bb96625faaf5e889aa7c37234847ca05d635698f848e7e3c4fccedb8157ac7bcee13768fc83398bccd421da11862415ef3f8668d62b2e7334e98112678fca2bdc4da7961ee2d4a04c05496aeeb7fb0b9aa1f6114175f705cfc8de5c7d80cae6cb75e379d85a6953c057fd2870ffbe13409ba01841ec141f4fb5a51998da0dbee364079bc33c4d8e6c5542fcce00a76547b0bf7bdeacfe7e5634b6aae3e32520fe4b13bc1d5eb95cbae6424640149b067a85fa8e0317edfcc77b88cc3d1b04e86517903ab172ed409303816cf0a920e0d5dbb921a0f459f65ee3d53f87daa21ed8ae9e3b3afabc414b5d788f0528453e344116f877a47ea67871ba9b763e0a1be63e9335787afde75199a414b824fb69019f0ed8e053a47604a15e9b51a95119bcd6464b299d2589b4affc9bbd891799d7cac45b929b473248e20a5ce71b1f68d1eeb39410b8f512cc59ebec75f33a2ffd2932af533553755cf54aa810deb186a82868a2670c3bbb6300cbacd05bab6a0dc0d539233e8c96410dc529dec6b706c3e0b13921e58b5493df28ec8f385e59b77b221f921e23dcad45cbfe8c90edf274f3fbec73 +P = b0bc5d71e2ead4db99ae94d377a4b4a055c2f896d8cfe54e1ddbaa99e1e65407ff773a92fcac9fef18446e24a1f137cd231bc6bdabd0299bd2b8f320d5df7e05d9ae54ffb4fc34dceda841d7aadd57159971cf51d0ab35d4d50b501abfe04be77b40047a97eb9d17d7cd0e70d5a4f185f43ced00299ed2d78cea1dd8de0fd6e3d43a894442c297522c4ebf0daa3853415258255c23a874e7da547b7f618abd03fbe9d921ec19e63d969381e934b8976b62dc5f8537abc2d10350f80d1738ca09a10685b61d75b9662fe4d09127de98ab2898ef207e550be1257e67ffb55da67cf077d1bb469d1137b497c28156c612847eeef99182d85553a65ad896fccd52c5a4933d1481bacff28e72db71e8fcdf440aef3ddc2dd6ebb1cc90179b94e163bd5c8aed5ee1d3e63eac8b485c5508e284b661f41c155c7f5350d4d34c26b584cb4768921861032b7dc3df0716fa731b1813aabc7c2e7510168c06001c5726a109de760fdb839bbbdc39ee80377555596bc49808a90950096a720cca1cc13475cfaf76b7e54ff78d74bf02daf07adec51834da7de57c9b7ceaa627b8c713a649245649dc829144d3689548f4096de32ddd7921da0b1d8fde9232c9e2cd4340974a62a54c343baeb9575b44ba045f8e2a35046f0c3614821c2d0c379b311f4918375e5d267b11a568abb2942d03c3df3758f8ab914633b444e1d54446923864c3a8 COUNT = 96 -K = 784863d3b7660d772b85ce125365b95492f941cb16d9012d08b3f251e9055597 -C = 41710141142a61e56c9fc5f836169c9ea8611bd2a018972b26e05d0c7b36a9e60aacd1ef4e572dded09cdad214a48d43c6f993fbb93496d8b2af294123d121dfb4f03236234a3b4ad396202fd87bcc8fbb4ffa977f1bf0bd4c64455e50d1f61d99cf20a0d4743103b93b2c1091122279 -FAIL +K = 380ad52e488968a3bf6b2d0fe95a7cfb4a6b8774fa82818326e63529cd1d8e0a +C = 24fd21624ffe212185cbcd99360362043bd8360ff8d5a1b5aeb1581cda6861c45d9013c8f05e4e4ca4a33502586b5cc40b2fdb48419c38dd171c3871af1affcad739220db4e172b8a27f1dcd0a09a40a655c1f0e92a711dd37477c41abf142444480ef988d78be4fb517bbb02ef2cef4ea2c99edba361cf90f2967572802eb587afe46d501cee4c14f7dbb640fbc749f869bba4c15f2d37e9c599551f7890d2048a4ee892bb1421799e38c20b191b9a962c36456affbfd0b498098bdfd350704aa912f61c47a22b6ac81468eabd4d76ba25b06f4ad36f79ae7505e0e32a5c580f3b4ae41034ce064f195083045dbb2da62fd5f8aff73a51a91d0ea0e4ccb12ba965d79b0ab80c79486a2e978b0855f5e52cfdddc61dbe49f9fa85ab725d9a87bf1fec88f88c9069c3a261c27ac66d834570e9895f858ce51734b70fb5936ebd57eb0e37d24bae7d6f406e2662622e6e107042b86b06fbbaea14de75c124f207d3c9951876cf0ce485768811032f24efc49803fc4a57a821acb62bf1b265da54de91b42f0b77b1a1a8dd801b864d7ad1ee64206e3d5e1e204ce8afe20781547277c8f244b9aa10c5582bb01abd412e8fa0cbf235577aa970063f384ad8c4c1354e4ed8feb7f6ca7f48e003fc6b411b58062253744ea062ed09b56b977fe92083215356152e5ac4304ec60a8dcdaef719f1ecdca4539d5534c1f732b33fd31609267a2d2d1bf087d9b +P = bb31e1f67a2a8897ece04d5c2b4cc226e075c27500db0dbf54fbf6231101ffa4b68b59378abb01864630e9b1e41b3e0f70ae994ec83a0a96603bc31f8a6e7645ab13a2f5061fdeb62fc221a022c2b032d52ba8f91c898dd64631325fb53b88f3df31fa6b25feef02ddd457cc49ad73ee1f6039d55d58bb0d48a8a43722e5ffc62269961faf76233b579ccc8dc73406b4403d14cd49d4701aa25ea39ca101a3494549993118813d0f3683dd487c32cc748a0d9179a81bc4bd883a19f70da8be3cf8d4e5499ffb7061ca218aaae5752789951a1b91d64525c7d9858e0932bfd949e69bb60e4dfe7973a8c267f8e38e615a2aa6e7f9200963ed4a7afccbc36f9af8eb6245586796beab94e7841027753a6ddaa08ba79c6da63bc837301dab79ae91c898d027a8137e3f8565784d830382146f7a3560197b6278b7d094e2731cc97beb16e3ccb570f8cb9ecbba47bbe3b17535650679a49245cf4830c0ab5a18cfebb41a6ee680259881cf54733f4974240b45d8af6e9c3facdda50607b60896062c26a52df6570318fe2dfeca9db4a0ee6272a0a31cf2a860a610fcd7e6045b432cd982ebc484770b94f405e37ececda9515773415b0523bef4ffa7946b3644d9b957816e1ea14bb37eb8a03fddf13c04406950a4a230021bf51768575e1adf2489e519e5be2f53809b86f2ea1a7c8b162e391603054e948d276535f727cfc8dd81 COUNT = 97 -K = 2d97a7769716c87e0e6631cd3cc9087f6d5d7483c242936119e10a262cf99471 -C = aef3c2a6a58e42cd9b4b6fada600ab73550d7105185a99ff72a3dc792fd57048538ebcd4f35d7e6645170170b037830c3da28046dcc7211abf798b82c2e259c01b4462404dff26101e88c196aab9a824b5120643c7bd13a7737e26205d531ed2ab23b6ec6935ec2673bcac43d79e2254 -P = 1e6dc72b179d8484a4889188de4a0bf94219718e9aca7119f7ddfed622fc9fa65c27897040a575200a09ad2612a3486b4918a2706a7735805758091eab3c3b3fedffda30a7a6df846e01377242e0af84ae28023e1eb85ef939718ea7a0c1dee9d08cac5a76 +K = b18b4714fb05d815aa7bde94d35bad5481f67d246d29ce17f884df088436ba58 +C = 12e6da801ab97cca78247b32b0ee008094fa8a72f58ec576b26f84d8c1615a85268ae63a4485f11b1c04c3a14d3e92df55433b6013785e88eb9ea38cf64caf6328112a4cf867455170473573d1e6a2549fa4db40c59b44ff9196374ee96096e70860bb4c5c3ff7f8d10973d99b10d8493957d77e53a670b8acf1d8c37310dcca381146ff45c6c048d6d39ec5fe5d61b97f637afee2029a6bcc0929892e27eea5e3c7a72095b949f90dadb9a849100685abe427bba28f7db37014256444e6c918c657e5ea2de71535bd021a841bd58a36e88a634db1d96a4a9baaa8fab4b53aea75d8cda5b04ea0de480c4b5ed32ea1d9ca499c458f8264593b33904f40fac03514f1f377669ec48b013b6336ba743f3aac566e6c4875e1eed79c87b5c3b2f6c1460b537cdc85033d53d36fec7db923e05bf5a4055f7195c603b86798fca78ebb602fc97b4d26b4c75e4b65dbf20ab17c64b4563753d0ce5f12a741acd4e026cc71be65d4116a4139e4e3d76e21d024236cf9c8b395fa317b339993f415b9750dff70f6bb6506159c4f8ad051523c074f297fa1f680b465f5fc57350e2466ce76704a574d5b94370f6eb89d2fffeaaed3901a653ee840274fe2de190d3f8ea7e969a5347d8c65186f39e571ab7a6919166ddc16525846ef94589f9178977162b0421d8247609350ed32bb37fdadc38ea9d4e6b207ee00a8081899d62473fbbd8dc085037780c17a5a +FAIL COUNT = 98 -K = 677ed65028f11232f8a2543444771d2e023cb64186cea584ec3ab188126367b3 -C = db5e58e1864d531ab86e808a1cb4702110bebd83f987aeaebcd8a6d948bdd2d744927afe4bbb3cc36ff6db41ed9c69a7657c1bd89742efadea4fe059010b18b42c279f6d268fbac78861f41ffa6a4c1fcff58ffdf34c888a762f1cf177ab5117f14fd0a93dd560a40dd16103705cdbf9 -P = 4539e0c161c133f539c57132ef2c2e243efb62d295eac9022c2821e1862edb41316de9120ae6947f5dcb6fb4cb01fa4e2648d764c05845fc4f06e554c33086429bf42bdb876c0ee2540d7a227cc67a18762c9f6d6f7b3aec268923d5394cf45712cd5ebbec +K = 5b7bbfc064121123b4abe6369449c9fb633e76fd13849b987a2b8c5506e785a2 +C = e1dec07bf084e95adc0339d1a795dd4ec5b28385f85ae4e90fc3fd291b547580092c30ba30976bd6b96f99fea10a7773a436e5b5728acedda558d28ed5da4d9efd3ed4f000f1c7496834de5df3a6ec9b386cf00631ba6e9ccd38cd8876f4da18b53d0fa49489c47167d79e73eb4d09c880af03a96774a7ba992a56e22a9180b1d9d1f28ba5b5ac71add5c7097bb7aa1be8486b541c3ea10dc0e88f5d3d62cdaccf8b3690feb0e029dc2871ac84cbf0073e92e749e1d5f3b09846f19a37b7451366892ebe37350c2cc98ad292108744e6c87d991ae78e8069b98a98ad57262467a34570d607491c38c9bc4979ceb0a21f442d4cc9e38ba4b475b8c55d3fccb727728e647c65908d0309746507869e2fd10a886e7fb59039cb3af89a28cd681bb1da29cbefe15d389a67641673d04f7c1b57444f4336b259de8c3f4c1664c7899d925d47dd0b8e522a156a5b4a2c77e52bcd1d79a717ba5bc32b1750030bc201a7673449fe307fc52d435bb863896dc1eed0dc4ef4100016bf12cd69dd12a5cac83171ed1d4d5de0b58b8d8c346a612c3b1e3dde62012435d0fd121db550f357b320389ec0692706f2d6c6dcad55ead89244c9d79765e0ced3ed53f727805fe6f0ff07eff4b658fb15253c831227ad394bc3dcd3ffe89c711de1b4cf745547b71f77c7451aea39d1c89054fe39ced7431de447fab9b354133887c0e2f64f628fc3e9073c816a5b9cd6 +P = 1bf9fd1c4d6ae58505c4b5935cbb8154fd48a3db7ad2d6122e94774659e036c98cd9a5a029b619913ebf797af6daeda467547d6cb942a548cfb39a0443de95fc3c1e08f36a449215204fe7fdb5b381f2525468adc22acb2c052fcfbecac8ca369046465d2781dd48a5b5d843264bcf7fa647b2b1256d12fa778438a408bedb8410a62a0ae0a530cf94215af010f0651cb57e15d368781e57cfc7df6830e623092d48946467a2a21a046e778b69a7933b19802b76ef2814418f9eeb1d6edb81d470dc1e5d7cd334d51926119c110421e505552680d5ba84d889f815ab7c4d6cd20d83ac47fd18f54ad84d4a56496d99a8e244be83b0be6eeea82eb7eef0eb9fdcac2fe9f1d6d6b59c0a417a43cd146dc81af31e71007b282865e5f5a8e4b3953e58410991c8af80f073d6dd584275ae69ff377614839efe9a3131c1fa2d30c7d69a25c0b7f065f3041355b65b78b01453c92fba5d98bd50b870455f3ba3121c708389e7671060c60d9392c373c5194b3f06f7816d569a4a67283d6dc2e0761961a25b1c7c781ad08186b1039258e031527e7ee7d6ec2fe294d3d23002d96e4a40bf098b633c04c3ea3345de172d761730643a0eadf61c1f69807f9f46ef72df1f8e24cccf9b36b10365bbb71f10dcb1b5827832e4f8eaee089a6ac2d3234ac85ff7bd345afb6ae21ae9143776b4fbd53f7f72e1289c9857da025b76bdc46c1d0e COUNT = 99 -K = 4ce551f97f2ad00f2cfe69cdd20478e9d1529bc2df204c5f2af8094a65474cde -C = 145a42a183dc1fbb942c443d9839487545132d6293cf3458b71ce1e42ef18fd91727e7d6ede1b1f7c8ca59b5c75a22cf770114294d5bec124227a313d5419bcf59e5a74b1bf5463defaa23e50e02bec03aa14cfa9379cc1ad56fcc9833a9505e5a049cc7b2678e4f809d292780ddfe22 -P = 8073dd9955ec0da831ab2c5d230ac8e307ba1d8dc1ca4a6240a5b65098fe2d40cd69659bbbfb18b7a12783741347a519f478f9be253b9509f2f3877b2eb521f9098afde9e6e056a84e5768084b6cc593d94c7fad643426e4ac58328c711edad23dcfc19d9d +K = c620f64576324d37ca9da605d8f76470c3ee66540720e52607010a0a91f65a87 +C = b74cb40a5161b82b40ca81f682a99db182c7e9e751a2fccfbfb7f797bc1ff00401f3760654aeccb8c8e3e559d11470fd9837e789d3595b760e635a12b68aca9e3d435b7bec80051fb15593659c65440cf18b1d281a97784c97f22b4429592fb750635994cea7f26f84e641a7480cfa21ee7b09e3d2634816fa2647ba6432736eb467e852b560c8ce8a24b03909a1dfc0818f626b810d619f2df56bc0560d5c040479e920a3eb302a7f46620785d1362976ec128c60f3568721443d241feb59ac7030767192683af1aa2b523c49b96abdbcdd11b3a3c882d0721ba2a955770f9d938cafba740acec2e7847005cea658726025fbc24c2dc1fade5dd4e899a8627bae5be474090464e018e8bb64e197df4851f3b694ee8f78620e4d8ec2b3b525a644dfb99b5e383a38e4ea1bc5b0158ab82317c40af38815735702d128b6048f98c820b66ff3d93206591701621bdcea1f4f106f897247ed8109a8c9df4303b218dfdaccd1832c38f52f0db5f6c59aed0ea31b81c3a830d108d99be2c0cf836c11c724d39f7521e2719f9c36e9d03ad8a41a1b157954eeedf1e29e8135d5f29a2c764f726b3fce3502f950660501d6d3f1677626e0440eff84482e2309ef4365685d09c2236eed286540071414c00823e023b2dd4c228b5d2f752c874463a0169d765cdf68cb5a59a71b693681cfdfcb27d24a10d8584e700625d01bdf632b58a6a7f63d5eb5c90cef +P = 5b50909d845d1291342f82c12ba3ede57c3c88cc657141c15a567a306ac55f708959ec355f49fe89a83370d0ccd9a700d980a0c6e009169b7066ac0041e7c98201d670cb22a828cf8c1b981e136a87708400cdf207aa99544ef03e5abf074e068a1ecf303444110a29195bf0c23acc6e8f263114a5f6a36712b55a58b94dec9e19edf638a8e599cb45bcf6aaeb800dfccd619f0a58fae16e7fc02d1878973ae03c6c69dc363026c2f7350bb9d3de28492b5f00f2e789cf3c7a7dc7ad2fcbd3fdc6898f3a1cac0ddb89d5f701038651e0e8bbf1ee75131bbd40b0f55c8601b4be9a2406657c187c961c70e78fce8ac09c4bbc214920c5438e5143bd8f5b96e387df386591762f156a6a4b764b87e26f54c7d250c370a65c78d6236ddf143253988a39814dd207b7c96c2b6029feb3b50c6a049e3ab547169935e05692931d17299cdafc42b538845ad8b74cbafd3ad8b9beedd2096cf16f77461cf5ce4b91fd0dbba05385a09c8b39b8931e0cb7df7d3623031ae8b674e3cbb9ef1273c0fe86130c5c081f2fd2a398061cb5a73aa33a473f60886fa0edd0923621b87cb30261f40a3d1870530abc94cfcd9e8b03ae587e1203f5a87a00419a46b34fd8ebe8c3b50657b736fa3e210c4a717df27a19caacede1aef6d8590cc3c254ed10516dcc61e615a8efed014a4102c89b8a1b3e7622cf621c00831a5eb4edd240a91f4a9875 diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256_inv.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256_inv.txt index 91a9db5a9f15..4894d64a9772 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256_inv.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AD_256_inv.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AD with AES-256 inverse cipher function' information for SP800-38F -# Seed = a10e7135ef766d257d0fd7b2baf899d1efcf9cd7c0ca2ba95e016a5dad028a73f9fb68dd9ba808b018360ec7f91dcb5d7031be99aff4514c6b87adc6876e3053 -# Generated on Wed Dec 03 09:16:29 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AD with AES-256 inverse cipher function' information for test-files +# Seed = c4295712a64eafb6877d188e8b94dec247c1f6008a1ec34f86e45c621f017c81bf6eaa59affea49dde982810ee38c0826c31fd6f9c1b38f9a6cd47387066a56d +# Generated on Fri Apr 6 14:47:38 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 1650eafd8c3b36702ace7cfd2c2a6d80f5b94d20225bb13c77a96d785cfabb5f -C = 4dd15618c399fcf10dcbc8abc6049bc3 -P = 8c +K = 4c02c72f62b4e1e1e99f5b261752ab1967654b7b9a88eecf2865b3e0c1798fb8 +C = 4abf38040804263aa66a153350e65a66 +P = 75 COUNT = 1 -K = ddf1c3c87fb4872752860d298781fb1a5606dd95e8d6420c91022dd4f3d9c024 -C = a67ed33b35e147906d13421c4b99187b -P = 06 +K = 7e1077271d8c710f3fecb08d414d2992ba9c6c91be40ecbf9cf1112bd8e60fe5 +C = 60dfd5986b5c174d18b1fb2522c3d5d0 +FAIL COUNT = 2 -K = ada2289862e816e848837a6cabcc0394257db079fdf5b25c593add02d2f1a69f -C = 8d0e396fcdff59d47fd03bd2a27f502a -P = 22 +K = 96782c91a96e31df616204edfcbb26370afcd6cd7f1c6c77adff36c836b6ca89 +C = 0789723743227bfc95d4f5c8fef45803 +P = ba COUNT = 3 -K = 451ecc0ee4a5e8645f6bca3e1bdec93bc361418a817b95432011110d14f7c6f3 -C = eb3ec80ba18cbe0bad33e4ee23618e78 -FAIL +K = 3c649f67772868ad6ed839d820582ccf62e63e5e564888549948c02076b2dac2 +C = 3c3ea5f72427d2e45bfd84b6e5e9c2f5 +P = 3a COUNT = 4 -K = 00bd135044ef3c25de7cdf7aeb1f81ed97217e3a4794ae85aff7fe33a207aaba -C = c2b0c13e595fe6eaa4944cfd9e4a913d -P = 51 +K = 67340ef7ca64e781b037afb60aa02f40b0fe529698dfdd3d1e4d7b091c6cbb81 +C = fd36e58837bc5d4c045484701ff028f5 +P = 63 COUNT = 5 -K = a90daeeb59da1aecec7fa79583be41c64c12ae49f130e56ec68071c12b1dc25c -C = 43a5db9ee5bd28a7e07087198b33462d -P = 4a +K = 194acdb203d57c4b1280c3ee0d00bd6c583b84c54b91f3aeeda0b0acae6ea492 +C = 7df56828cc7d53673a7942deb679a883 +P = 77 COUNT = 6 -K = f75b444726d48e8e09387d6b9847784bac28329855ff071d7c38c927eee3a108 -C = c1ed563c0e1404af93b3850e17e64564 -P = d4 +K = a58b95d5c38230a767622b6e4aec6032b28b34f1c59e766f3f2c92cc8998cb5e +C = 77d4e3787e5821cfe4aad4ae293cdbb9 +P = 89 COUNT = 7 -K = ce3c489cee42a71e7063f4f8ed3ad25c17d51985dbf62d717697887327eeed58 -C = 89c6efdea4a0ce4e5446a18823fefd2f -FAIL +K = 6e4b957a3cd33be0436500eceae4a9572e94724e883a00e93d03abac9c44d933 +C = 12a36c639c28d46a213359d24c24dfdf +P = cd COUNT = 8 -K = b46fe8b994205ee092b1d39c5f550284945ef9f48f8e95aeaed8cc342b0d49c7 -C = e243e852316fdf0f1028017f37643ce4 -P = 12 +K = 91f4ed8a8f84582679c6577f23adf9a24e5eba182d3b986153a432ec2ac6e3f8 +C = bdc3b643ab6f239201230aac4e01c85f +FAIL COUNT = 9 -K = c02240848309b43b696476e68250624291ab5947468e6d08b2fb4cb5776ef8ed -C = 0582331cafdb376d6576eb9de0285e8a -P = c2 +K = 060b7b5aec0afa84d171217113feb11dfbd32f326f5cd45143bcb85607da2ff8 +C = eb57e4f232aa7748620ffe99456e7da3 +P = d7 COUNT = 10 -K = d481b681c61167a3ad6f5a738b2fa53c490e8c01a37118a450fd46ece7a3c047 -C = d7ff9139dc1c0b8e16c8fe8cac608c1a -P = ee +K = 408a32753345f3a20d31504e0395b081f5f64d7a146fb00fdd6fcee3c7e66c79 +C = d0a99b1fe32c6aef76780f77733a6927 +FAIL COUNT = 11 -K = de3effdaec35975c478da7ff5931ea16a6b166fee304ec224246579417bee55a -C = f6ab3c989408edc4e99ddf081c7739f9 -P = 45 +K = e93ca3227c0bf4741553d48b367abf79fb97b5749422af9b7b512203a472aeeb +C = efd07d4f08f2d6e50cd866925ffbdcb8 +P = 55 COUNT = 12 -K = da84f88f949ebfff9c0a90fd9b75097637ddae91cbe386321e5ebe935fd785ea -C = 8d55dbe65ce97f7cf52f9dd937dfdd89 -P = 54 +K = 63133efbfec3b25a66d2e97efdaad51c88f51e7b4617e7e1d2c579cd0455fc7b +C = f1e4d3b60f308125bcdf4954431c338f +P = 6e COUNT = 13 -K = e85ac8b97bba963efcbb6d5a7b69981cfff793d00ae7129dcdbab662327ce416 -C = 6ac9221bb2fe67c7322bf5fe785de9a7 -FAIL +K = 04d62a9e49babf8618214ad60d0ed409c38fc6bf9871f83538c7d048920365f5 +C = 40a0e7cf4eff16749f9e281f95167199 +P = 9b COUNT = 14 -K = e3893b85df1669189b317b352cba57a4599e0da0bec463dfb336914da2e86fe7 -C = 3c1765d51cf97b293c2f7e19b6a5a28c -P = ac +K = 8059b5e93626087b8d927e97dd511b4afb59aeaf879485268049c545aa648f48 +C = 1376b81ed672365739b444c572bd633c +P = 8d COUNT = 15 -K = 70c1f164c069d9463fdf5fb2544137c9b26661be81cf1d895e6554ece00c7d52 -C = 2f2be2e5cc61f41702dff138b58f557c -P = 0c +K = ac1a80ab1d8d79c7f0c1a11fe75dd778593350caed77a743bd49e124b6cbe908 +C = 996212a58d764ffaa5a877eb6a449deb +P = 20 COUNT = 16 -K = fcf1b9cdad8b2fd58c043ffc0f19370aff14f624ea3fcac0e6b47b1aa51ec5ce -C = fa05608ae778d44724b76c5174fc1fcb +K = 24c9d98f0e89442c867d1e15b73ac18d877c2f1802a8e156cb5e712bf71793de +C = 6eac3aaf8cea13b1a3fd8e9d6370da05 FAIL COUNT = 17 -K = cf71cc2fe6d1f53d39bd666df07419cfd94a4443f2e07794684bb5c2ed608574 -C = 2aedce1c8811d79e67e8090727917960 -P = 55 +K = 264706525db1a65dfc8806adb517b550f20c769a02fbbf6e6b8fe143bcdfa667 +C = 1d5ce37d838a505d22a8dd824e9182fd +P = 18 COUNT = 18 -K = a5f8d85ac05049b923d1af21c4bcfbe0fa5e817d1c752cff2781b282c51989c1 -C = fbb96aea7f1bce50040fbf27bb9e681b -P = a9 +K = db8c38a6c6761f571187023d7a89bfd8d284372a4a952f0f128a7d5c280bc5e8 +C = 25174019e90409d4c144207d1cad1e2c +P = 66 COUNT = 19 -K = e3afa379885b5614ccc37325c813100dae4fb88ded68034d9da28ef1c3d5a79c -C = 728aa2efb54cb848c0a4d61bd71b1e56 -P = 43 +K = 94ea814d0da73f5f654aabf25fda5c39978a986acc3d1318bc61e79b6ab60ed7 +C = 84140e2cb2f00e342ba839900262ce2d +P = 71 COUNT = 20 -K = 83444ef7fb4dcfe256c3f8efd3b8077531479eb20552945d4f787f807128006b -C = 8e28081e1fc68bcf12ca0186f9cd9ce4 -P = 81 +K = 12f8d0857f39cb5c42739cc268e781d24b860cfada9bb3e025a23638722ce8ad +C = 8edc804fca230d8d208625ebecdc87df +FAIL COUNT = 21 -K = 6c1a57e43d8f3edd86e531eb1f5e02d6b4aa6b9d53b4dcd654c86f80a74670ec -C = 46aeb781811f805567f3f344ea63a7df -FAIL +K = a747599e1aecad2d5c61dec277c59f0114b4a6094eb9da829c6061346585de0a +C = 7cbec8978a7cac4e0d0b2c18d1d009fc +P = 51 COUNT = 22 -K = f73f0b7209a87a6d8a62b1525887aef1c20242cf3211382ecae5993c4e545ccc -C = f775674b99cea412eb66535c9ef2f840 -P = cf +K = b585213f222844184bb718187c9528c7609dffc40f34759d6a2fd59657e3bf22 +C = e76f1f8db77be02d278e1fcd34e98202 +P = e3 COUNT = 23 -K = 71ade60fddfc686ac19492a19cc60279607e627aa34e7610077e1a87f2d02f7c -C = bbae3e2ce972ad7da476f4789fe1b79c -P = 88 +K = 2ca35b11c096e4464e50303e61ea1c763d7d774c421bd81ee3939015ace0f4e2 +C = a5db014ceb8c8800b75cd7c06de7f92a +P = 4b COUNT = 24 -K = 07b4af955df150123320eedb262b3a5e8b310892d7b126a6f00f8d36457be362 -C = ab7a96b515591a572bf82bf588cefa81 -P = 8d +K = 67bed0d0018e81260e78ed830be96b577323344f84a6011617b339aa4c576eaa +C = 365831b4b1ade9b621e399a4188635cf +P = da COUNT = 25 -K = c8afc3ca505c27e49bc46ac887c4bccda0bd6e23d1196a87962d50ea8e0e9424 -C = 6ffd2eb6ef9e155d55bf09b8ec54868f -FAIL +K = f2052a9ecf7b77e94c11d3ed3917c30408df639e4eb990b85b81d14d32743c92 +C = 05e37f5c23b3b8a5d6cf59617673f483 +P = 17 COUNT = 26 -K = 14a520200969167f45ca0a7cd51f2eeba4960f3745e931f3bf6ebed644f90204 -C = 5484033eff3566f69cd24675ca11218b -P = 5b +K = 6b875812054614b581a4d6bf1acf32d9b1aa3d7c2cc286ae9d1a318d34dd5c6d +C = 20878e9557212a253ec2d8038391a09a +P = fb COUNT = 27 -K = cbdcdd04fbe6ada1c06bf74dac48492fa2ff37347feb9dd1e0e04f10f84daf01 -C = 95eb0db0f16d2816a23c40957d59f16f -P = 5a +K = 0a22bfba9e78de528c279f1eda53e3964253b0ec34c50f50a44e71d2b6ec66a2 +C = 97ce13775a3d0c33c2db1e187d294eb5 +P = 12 COUNT = 28 -K = 07d4edb6187587f0e3e42bbdce6eccb6d4e1c953e9611ab7ce69ec32a5f569ff -C = b618ab70e74dfe4aae4eee8a8a44e81c -P = 3d +K = a67da5166d687843c11c026f80afcec391d49c04f163a910496b718303bec48c +C = fa7e216d6f6ec3b60069be50f4c0d231 +FAIL COUNT = 29 -K = 7f51d969a94dbbf5db8e38cfddbbd70a304da71ea5bb157f7bae4eaec12e2605 -C = 5d7a99b763a0c9abdb1ed74579efd0f5 -P = f6 +K = 519e17f6bd81c5fe487c96bc93ec96eb80e7114603b05f0c3f9c145b854d7db6 +C = 56eececc8398eb7a1d056c4e3e7388eb +P = 98 COUNT = 30 -K = 033044865443d2fffc600ee72253bd93230136a9bc914b8058099c2961abdcf7 -C = c9c4535112361329f78b0aec4ca6ab8e -P = 74 +K = 2767358b47cbfea00493864d9f741807c7ad9929463fea9a085993b25cf877b0 +C = 622726898cfa5b1947a267870fabbdfb +P = 25 COUNT = 31 -K = 2e88cd449c79d68229df90c01357293367ac55ab4b3e6fae5acb1ff3b1a2f4cf -C = 69a4dce89bd68839fad104e97868c83d -P = 19 +K = 0675b34781a6186a2f949935361fbb4d63a26ad7d72a35e64c050a5f96b2e3cf +C = 9e249fed1dd03728052edbe4f68dd1bb +P = 82 COUNT = 32 -K = aea9973b95bc568fc5168efbfea5e70176915ab4ad2cc172a107dd0625baa563 -C = 6f890bdbba3b369b43dda2f6e705f566 -P = 18 +K = 29aa8448e248f360f1f183ac0984cf28a76c931b865bb15abb5f98a92d13dd72 +C = 852e92bc09df1a46a016d06f21d02fb6 +P = 86 COUNT = 33 -K = 46fdfd4e8519357cc90be22eb1102c44acab7d7147c4817036784d8d0157434a -C = b32bf6031325b1c951bc1b44d7aab2f1 -P = b7 +K = 731db6e51458d41332379c174265fac017c164324fa1ff90a06ec01f78769f1f +C = 188c568040d843fd500cf064698204c9 +FAIL COUNT = 34 -K = 819ea3a653b1aeb9939c209b2fa24dd41951fcc8535d001cb7287507900ddd41 -C = 84bdc8f4f971320812c3397e22afa696 -FAIL +K = 6e3f1649098c1576ec03baf6c3a96f12fd23d4f70f4d1cf3794c65fc4d49a82e +C = 98e20eadd665b8481cd095b94e3fbce0 +P = 5b COUNT = 35 -K = 6dfce0c754d712b6d9b2a1302ec34753fa53de251d6a1342dee90e932efd56ad -C = 60fccfb31db0a38888e5d1d01817ac03 -FAIL +K = a3cc9844415cf01878e28ec7bd1ddbe116e861a03ad7210646de00436bb69975 +C = 20f37664b3d69b7bd559bb295ae4f3d4 +P = e0 COUNT = 36 -K = 2c1307df938f6658abcec0b1da36546e8024a5a28439af47c85299b7a4e78dfe -C = c679e703194ed383a8b55df42e677751 -P = 11 +K = 36944fb12f974a73bcdce71df47c36d27ea9dcc4cff9b219cc0bf1ca6188411c +C = c111978ee14bba88c38d7e3668608c0d +P = b4 COUNT = 37 -K = 4d53a7abea1bd461949bcf2b582c6feb9de6644d4071def1b4ba886ebe5c0dbf -C = 343c7e85a9245a3454800d4d23b80d41 -P = 3a +K = 649d0bb24883364502709261027d06110e8aba7fbcfb833153db0e70b32cdcd2 +C = 80a5b9e707477b1f339d48cc244b43eb +P = d1 COUNT = 38 -K = d90f85b4bfbf931fa2ffeadae747dc8d959367f89a62c364bfebb196bb4954cf -C = 858a6a8788a1e8690e50d0038b4bbd9d -P = 97 +K = f8a40f0b1ded52e97e1fafaac08a8330128b63a868964fa4595106df9903c585 +C = 3ec6dd964d05c8542f8895b962d855ba +P = 73 COUNT = 39 -K = 0e03f2465dea409ade7ead1a7ef6c8a9bd4880f83e3252f5152cebdeb545127e -C = 5cbea9e85b3165d8b56b02bd760cdc9a -P = fb +K = 2ca7d853d3ddbef767fc56af9def631dea25e7e75328011e3a91d5fb0ffe4972 +C = cd571aa5c8cbc9edece65c3f134f3188 +FAIL COUNT = 40 -K = b8d102865c1f0d71909570555fd02adafcfb6632729af4f6e0dcd90aae3a1064 -C = 6f6db49488fa8f32cc2c9a08638c41f8 -P = 25 +K = 7f2727625d0041a6516cc1c06c02b1dcce06773bf03893bce25a8137d6d1b375 +C = 8e1f0dad9993dc07e1f97725365ff140 +P = 66 COUNT = 41 -K = 74c70212719fd08bc550c65961f2b91c3d4994433fedd2173fc2add2c485a665 -C = e031855409912b6d062f6de8350a970b -P = 8b +K = df62243b0d95afe07e5160d1a95d1754decf748222deae54ee2f0896fa083006 +C = 360d008d629017cbc3bddff26dbdfe41 +P = 86 COUNT = 42 -K = d110aa8305b9bbc91b4ce8a1dfb71c1536ce8287101b8ea40a26b85487b6c53b -C = e752307f62cea3f731ab2b0e4ef08ca6 -P = 95 +K = 40555791843f5087af46a8340bca81ef441c59fb1c8a3515b11076c42628e818 +C = 6c7b29beabebc317bd66f5a6c9c5513d +P = 33 COUNT = 43 -K = 151744f3eeb719048a4a7e0523d462375a572fdbf3d8119591892537d85c660c -C = 3f12b136a4cb03c8c089179f6fd42a68 -FAIL +K = 65d855a5be9ff3fb2f4ae8f3112ccf366f972c362b6974cbe9588e8decc3034c +C = b7221ae0470e41d281ab5f765dd61795 +P = 5a COUNT = 44 -K = 35d8dd3c0c2f07cc3ffc0956960e601d383639304552fff8efe2b9be7c61d49a -C = fce9cff1a57b88716c1b76f528797832 -P = 8c +K = 888e6612ecbb6345e94d6cd1b8e1c54a4fafe1a16eb008ad5f504b58b719448c +C = a2cd1cd8f2e98518663e02247e6f5522 +FAIL COUNT = 45 -K = f7628a39282b93fbe331d4b6068b4318fa944c94803b67073e3be35635f2058e -C = 136d2c7a51ff7777ac056e135f62f06e -P = d3 +K = fd32ea695bb01d0a45a12f1c8345cbfec07306ad78a4d231e0a4f2d03965a3bc +C = 7dc5e9f5c7d72b7b6e90295699c44683 +P = 5f COUNT = 46 -K = 89e9955cb7e59f8f3581566ca40e2700d8d37fb15657e99b83affa8b8f1dd312 -C = 20b011127f12b093552af655c7bf1d5d -P = 5b +K = 7abd52bad2709126c5d7f5c47d49dce720c255219f8e272b5e558282b5f7fe68 +C = 1b721920e777433b2b5e6571cb79cba1 +P = 34 COUNT = 47 -K = 0e63aeb33cea2b11633cd26f0f618c79a0494cb2421a4986875d7a508f1e133d -C = 38c5330e3307cc62555892f0f7e23af8 -P = ef +K = 6bc4493de3fabed390eece9ab0a76d235dfe11157123ca7e30c4d47a1f2e735d +C = 64f71467b29b4aa5c53394db213daad1 +P = 5d COUNT = 48 -K = 3559e40099cf4ed317819033ab03b812d3c511809c229ced08dc228a68e1dde7 -C = 74655801fc07523da126e2d32af34cdd -P = fa +K = b7cf82d9818ecc935a945680c006cab4dc9a63ba2ce46751930e011719570042 +C = eeb45be5d1408aa640104c0004d653b3 +FAIL COUNT = 49 -K = d2fd723f65f409f4b3168d9b23d01839d53e450b1ffc55d136aab0d00a9fc678 -C = 68eb555e3055e90fae8d5aa83695fe63 -FAIL +K = 9e45a00013b61bc0624a433671ed9906463ecaf473543bac8d5d49c06776b7c4 +C = 1416a7f55404da416375587458c9beef +P = 11 COUNT = 50 -K = 3783fe7928ca6cd7d6b85fa09b49a40f43353f00d56330a619a75a253564d1da -C = 8993b74a1570bc641ea1337a73a12031 -FAIL +K = 1054d1b9976ecce1cb01aa82c500af20af2b59a538d792412398611436f28e85 +C = 70e739b1efee06f1fbd3e9b7516239b4 +P = e1 COUNT = 51 -K = 80d58d3abcd4c27f9d96ea33ae164637a9fac9e057a98e9508ed272eebe1696e -C = b8edf4b353caa1ec476b0d5afc212bf6 -P = 21 +K = d6208c6d85e813ca771fff909dea8b4a4c7439758b219782a87a2fec4ebfd029 +C = 3cf3de15e5a20f2d5843ea9fab4ecd7c +P = 3c COUNT = 52 -K = 3b96f7a8ff83209e957cb2264c82bc55c23383d1417b8c4c53d4b3af189a83d4 -C = fd4db88c13226986388ca6d8f164982b -P = 2d +K = ea8513253d180b705846a0541f00d9d0b3f511304e0039e7b188f07cc4cd06b3 +C = 083c487f5f422e24605f8e59e9733c5c +P = 15 COUNT = 53 -K = 7fa8af9c2f6d96a70f6aac0648375ce40683dc0cfa18db0c2cd29280894ca494 -C = 6ebcaa79a3706b5ea9b980cd0aad48c2 -P = 53 +K = f665ecb8233307c279a273fe9ea08354ffcc8bee29a8d04aaef9da149c999b11 +C = 3854f08ead2940091ef5bee8abca0157 +FAIL COUNT = 54 -K = 77e41874f6287c7674083b8c97b327438703c149077190d0c405bcfcf04e5dcf -C = 40c298eb1687e650642df89cab6509f8 -P = f4 +K = 4142d80aeb76f2ab7802a70fee637d26dbbc229288678454c127dea27abb3048 +C = 8f1cd34f414aa02bbdab68794ec93fe8 +P = 31 COUNT = 55 -K = 1ca9d5ac996567d2c8509095bfc0d645650febcfb560511b0d06080238d00ca9 -C = f6ca354f073494cd2c9b01e298037a46 -FAIL +K = d7db0b357d9d0ea3729515888c173bc854ea0261e647141d27b8e5f0ce590b7b +C = 087b32c0c66d67f651414603ed14d545 +P = 47 COUNT = 56 -K = 56127e4b5105fea736833d25fed65a4687fc088a9acd97c60e00287171a4468b -C = 072263a07de542c82c799a702ff2e140 -P = 4f +K = 66c45a927c27f97fdc5f6b91420d1eb6cedf0436fcd2c43000beef6f1b0cca04 +C = d4a619b5be8077fa5585794466a846f2 +P = f8 COUNT = 57 -K = fcbb74c353a8e2124aea457d2eae2a61311d6a0d254b346628412cd8bb5d5e9e -C = 1739ed17b836a77d8eb0a520d02a99e9 -P = f2 +K = 00cd6fda094e713aa707ebd3c3cba3149feb3215aad73106e6e4efd0021d5656 +C = f314bdea6de3057b63d729568f4a345e +P = 1e COUNT = 58 -K = cf5c3b3645aaf24a2b7f0f8496cee0690de25d9bcdeefd64642d42f558c402f7 -C = 26a0e85b9d4e92d5ebf87118ab5160bb -P = 0d +K = 63a18bd33cbc2a5ee8a5cea530df83010cebf28ef052306724ca89031cd219b8 +C = da3a92abe3b0d225fb520199d348c160 +P = d5 COUNT = 59 -K = de4d2f6e8bad843907bab1e5bc036074f9c0f3fcb7a06224d1b10c5b6cccd2c8 -C = c897e522ff066a69816f0b1c7ef5d521 -P = 66 +K = 08532469618fcd916e20b7ab676e50a5292a871039040e158ca2c0423ea4bcdd +C = b7dbe9ccb818fe20e642f4a2c3e9614a +FAIL COUNT = 60 -K = 9dc1f88208f3b43c8c77989a297b9a1c7afcaaba25ab4aa2ecd4df5d88bf1f72 -C = cd913f99d39fc78130eadc0c5e2703d4 -FAIL +K = a6ab89adb345e5cb0cc69793be3dc389cce5f6827e5086e61ccae4229a9525a2 +C = b156e5efd32de68a17abd4a9af1e369a +P = 43 COUNT = 61 -K = 8c4a716aeb272d2c620f8b6aa3464b320bceef94d8554221162a6bdd8b5a32c5 -C = 73a0bc94f79c6c3db4db6ba4e9b01333 -P = 41 +K = b7ee6c33e4f0e5bbf24ea1bf3ee05a7a5fd7242477be6fe1dac298189ad2f19b +C = 6166c3435c4d8ac0a8e5a65a8ee363e5 +P = dd COUNT = 62 -K = cf7afbabf3bc85bcd8a3d5499770e774f3fb99d63f658cb92825e6820c8b042e -C = 44229cc0cbec22fecbed6724103ea874 -P = ff +K = 2af9949a1638672cd28aed4696f28a01371fae15ea6f95df56266c5a084d4ff7 +C = 300ac550b3334ccc42f877522f6a683d +FAIL COUNT = 63 -K = 8a7d263736f3331fa63969befd5e67f8f19ee63da7fa27d0d22ece7a5ea6a9b7 -C = bc02b22ae578ae067e4fcd4da7d60dde -P = fc +K = 9aa63342038c67fce3afd71be8562d98f167ae4905ffa967f7d79e6e4a972e86 +C = 831b9b47e09fe97a3285512de84e9d60 +P = 3c COUNT = 64 -K = de6078fb1f43ba717ebb081d0e44a8b68d6c5d10e90bd584f53fa4390a074871 -C = 448fc52dc0e889ec90b30570141c5779 -P = 63 +K = 0d34e735a5519d4c89512bce541146880adeb4650c7e30f3e0c0ad3e9454103f +C = b92323525797ff421e8f05f2a67ef391 +P = bf COUNT = 65 -K = a88c401d31948b2616f77db7f11d0e6803958e9e70c2f7c8d1975b3cbe8322c1 -C = 111792b6d1fe4a5d9595f187073de759 -P = a4 +K = 9a19fc1dac903f03d494d4eb57e5eab02c6d16e5c7151dda7114bf2ab0475cff +C = 2bd6f46cb710bf6df39661ecdb2c6b1d +P = 45 COUNT = 66 -K = c69c0add916514f11c129084fd405091aad0c5a8831e5006bf0458cf0210bcfc -C = c0630fccaf73db2ac5a1ba6e0aac7b9f -P = 91 +K = 6988d59170753111ad5a960ee8e3f61ebfd2159e5c0ab898eab84fd0d250cd9d +C = ab109bc06c0eae526b0272c01c754e69 +FAIL COUNT = 67 -K = 63409c7dd54c2321e8f5fa4f7fef4d535033de79b30fe1ba0c52bfd737628454 -C = b9c4b63a217a7595c6ea33bd7a7d68ad -FAIL +K = e7fa1df7450dcbc85875c39267a1e47dfa300e76568b6db6c582f1fc3707b49c +C = d1e6dd972c0fea1fb645cadb7428cd10 +P = 3b COUNT = 68 -K = 2bd31204124faa515c7550801cb90fb1468eca7f7c0f4af8c25a01c0b214fbb0 -C = 13b72d7057fdadabe087ae88fe019217 -P = 71 +K = 59e3e2c252f504ad7494f749205673cb28fa05480e1056cd6d9dfa0e21bbbe35 +C = 434568a4352c4f256f9725ea4f38a397 +P = 5c COUNT = 69 -K = 9e4a472e64dc3c88038eacb2b47bbfed475c5d99629013294cdf540924a18c2c -C = d152db902cc9677aa7035d706f4b01d8 -P = eb +K = 198acb21706a8da3d1c3a2fa7964fe7ed78a12e3de0abbc23abb4a6778e070f8 +C = a6e73f7cbaf2ee702f9d82e9b6a1d2b0 +P = 62 COUNT = 70 -K = 9d4b1c00db56cd2f8478a85cb30adbf8dd29fa4283e903d450c4390ff8b754ce -C = 7030e9cab61354a8627c6d3640097c16 -P = 7f +K = 70ac23053d69ace45dc10714ef77991e8c4067d277ae09b3a69f3a45e8d28fe7 +C = 0f2d4410168b3678d4f4d8f1da03b86a +P = 48 COUNT = 71 -K = 93ed38fc0108d3b6690ba1513dc0a7d77b8ece6ea11b76dae5b7747e84204278 -C = 5593edcb4ac46181376ea6e9b8577212 -P = 49 +K = 22727a044971887e10d86269770b2e4fcf3f75eea59fcd613a48c8c3a89b7bb5 +C = 6f7910c62ffe07c0626ee67f964c1e21 +P = b9 COUNT = 72 -K = 34b59468e7eda29e21103fab67996ec2f4c1c470577ccb735a7deb5a1309477d -C = 0ab64d4763c25ce801ba91352c99857c -FAIL +K = 1af6427320609e5fac8909949c239bbcdfde6478cdb38cb674c7744e14f50a7a +C = 8784a5cd80cdec7f6be8e7835e3ca4cc +P = e4 COUNT = 73 -K = e5ed880cb5c1c789939ccc9eb05a6ffc9fd6229e1b16e9feba098a9c612479f0 -C = 762517345a7c49c00fcf70e0949d044c -P = 12 +K = 9d2aad97312b1d598488130a974eb81d19b936033c1b30d4230c875a61fa2993 +C = 146a3ad462eb3789bafe06c9fa4ea96b +P = 89 COUNT = 74 -K = b5421615f26a46d641ce0c250fb32de8d0124434bc33a5a3a3ed2c4fd2d56471 -C = bb7b62f633b1f4468aa01b0024a49742 -P = 6b +K = 1e6d89219919a09309973c52c40fd0c277d343ca4ac01f77f697f9834a38849a +C = 8aeb927c65d55e735827adc515963179 +FAIL COUNT = 75 -K = 792b24299e6ed7c53c3ee80f3c2735a00cf07da76fa437b7db9bedab1be87e64 -C = abb0633e7e06c42361699926d900f82d +K = 3386ad81742583ce488bb7bd355685ac7521c9e9f2264c3cc2349fc160e0b193 +C = e72419f819b72deae1ba7863a2b2e876 FAIL COUNT = 76 -K = 1fa4983bece01ca794dfb260549f4571c94fcb08e7faa22db6ea6068b4514a8d -C = 1255202ba06b9b3cce0659f89483c1ca -P = fb +K = 2672c4b97d82c85e23af670fd8fa7142144d2ad343fe5f25ba907378e524751c +C = 9e9cb67ea1d7ac39e75598d41cf208b5 +P = 2e COUNT = 77 -K = e0c1554d04e6ff3a0947cf1f93efd88ccecc6e1a346cd333626540618299da10 -C = e75712925550c92c9fcdca42382fe1b2 -P = 6d +K = 4ae29ea9f8af8eb96f1c0af74fc46e4a7712a550aec9e32da9c60dc2dd0d3a92 +C = 62d86ddc86e53cfd26078034856f6358 +P = 7f COUNT = 78 -K = cbcc68409dc66798438df3aa85ddbc5afb6a11fc237d03aa0df7066238df3b07 -C = a0867e2b11eb91937c127202136d9ae3 -P = c8 +K = 5a96486c7d9389e18c839b2796c7925b3a6abff5b1784e937f153a1c7bf47bbe +C = 9f8568bd6670fb880b7cde60308c7ef3 +P = 3a COUNT = 79 -K = 3cd0905705481c0ce9398077fbeed03d58581dd86a4373ad582e8647805da6f4 -C = 457a76f77b5757b36d1bc0651c535283 -P = 41 +K = 83c71c2542e06ee3c3611ca9c8dbbdf48c0b1ab2fe42e65a9cc8874c8f649628 +C = 9a93468866d532b955454b6bca5b741c +P = 1c COUNT = 80 -K = 06430bca74037a13576d48cad8ab6229cb1a952a0d56bd09bf9e91025c40fa54 -C = 7458c4b4346441c0b487d5a727ca9b14 -FAIL +K = 690604937aa18488fd8eba0c23de4c0a986ce4dc3eb24c35671f8fbd50628739 +C = e61ebb8b814bffd339ca36e2797f0f2f +P = 09 COUNT = 81 -K = eec6102236cc904210c920720f6b2432259dd4ed9e63bc3d709eaeb2e62d66f6 -C = 054c77c25aba2d608127935016838430 -P = 1e +K = 00e6bcf6b414b129d6c945b58d39161ca83bf171fa61079f2ca4e98d8b845d64 +C = 468692ace4d149755cfb42de9ad39c70 +P = d8 COUNT = 82 -K = 70988861c91afd76005e28bde9a225b682c59078e3603c702b9d60909442ffe4 -C = bba95ec22b51956373fa878362aec415 -P = 84 +K = ec441dc6f4af0f20a0404c6fb9abfd0308ecf2e505f247bd088d794d5382e7c9 +C = 2ab3694f190f9c5e923df0d893f54b04 +P = 67 COUNT = 83 -K = 04da1bd6ac5193a70fd39d088f71eccc1303173eac592ac0f473e2a7b57f710f -C = c740ca13aaed5147b8f321e6367da9bc -P = 16 +K = 243e6346e3a123040c9dd1329d53ffb15576b134777174a5c49224e7e2ab676a +C = cb606caca0d1fb0b19d80046aa56c3aa +FAIL COUNT = 84 -K = 9f27b039392929e4880c2ff490fbd6dfc1903fced0a19a7f3a6697a4b469e848 -C = a027041c0f85ed68877e05110e4a0637 -P = f4 +K = a2345867b3901d52a3ae2d44c355f2c97dce95eea6b69298baa19fdf2c219386 +C = ce58991cbd177dfda55c87d144991c9e +P = ef COUNT = 85 -K = 116b9f79598d28b78c07c153e1372195510b16d43eb20855c5e49e92580fa970 -C = 2199de8ccf15b21a427898bf2ceeba60 -P = 43 +K = 351f1c0200fd83ca2c3119f44e49fad8cbcd934be66cb40688809cc65d34cf3b +C = fd5d889a8bf0d427c0121c7a0cb2dc39 +P = 2b COUNT = 86 -K = 0f5750999cd177a8a6517553d29b0f1ec1b2abb7481d208607e4f5f89c6ca973 -C = 8329a8c6ece5dc2deb188837f5a3372a -P = ec +K = 12105c1c7d43fb44ef480b0c49d0ae1ff15f06b2db837f5590ab846816a79a25 +C = 6f7fd1d35d96c802029baa6eca55d8bd +FAIL COUNT = 87 -K = e2e956fc9b307a5d7313507ea8ece5c63e72a6904a66434882a38102b976fa94 -C = c220bb916211940f230bb5098b29e4f8 -FAIL +K = d0094a633c443b15262956a77f85bd837d62004679d8b8efaa171904fdcffde5 +C = 431261e4934dbd691716b1d578e96499 +P = 29 COUNT = 88 -K = 7f20ee9e29be48b74fe82f8630764b6fcf49a9a089426246bbb51839fe6a9e7b -C = 0a23db3628fe1440cc7a8eac944f2269 -P = 34 +K = 3cee9d9fba8f19dbc3f4e12abd6f10a0210f77f09ee0d6a59b62cd5f2a5ff671 +C = 50462ec1518963692464e42f44ab4f31 +P = 5a COUNT = 89 -K = 8178c14dce14ab407a4b3015364d9dc71015941d48eddf5d0528beb77c127293 -C = 889f9a17574644e2562cd242d4e60f3a -P = 81 +K = fe175a32b02ea17e3966a02103c86ea07b42054b3ee580781436ae0b268cd69d +C = c57266026ca710673fa7eda04dd841b2 +P = 73 COUNT = 90 -K = ff10f985b05f218397578f66ceaa9bfb4896a31869b0efe2aea0034493a109a5 -C = 07d28707ea178703c57b4f518e29bb6a -P = fc +K = 716d18540014df5e3ee7c85ab4904a7e8a34ceeb00b24648c737c525f1227756 +C = abc1aabfebe87a36cdfbf518901bbb38 +P = 33 COUNT = 91 -K = eb8e8ac37e1918133e09cf80b260da36e83ab34bec37e0173331d16878fd20d1 -C = efb7d5e64d3bab9f6f975e443a7a81b7 +K = c5cd6066a34681d2cfed45717ea21c396230c5805d2deb0ce430fc8a7a1d223d +C = 951986bf2d190cc0d317af197429552c FAIL COUNT = 92 -K = 7519dcd55bd2dc1b4afe6e3402fc09679141c1263eeee56f15af9c6662386da8 -C = 22fa675a9978bf18aaa31e84ebdd3c41 -P = c8 +K = ab5c36742c6371098e74423c81a4c602fe7f6812dcd2cfb48f04000727836aa7 +C = 215e37f710482274a4bb9aff2a5abd46 +P = cf COUNT = 93 -K = 371c00a1fc61f779838c7cfa85d013e98d1831549593d1d58175632513de59f0 -C = e257fd2353b4cfaeca96e5da06b8bb9b -P = a7 +K = dfe84aca3d5147069bb3873caade534bec11a1e7e19dac2d9f17afafa557c70a +C = 7ebfcd82d5a04a25240ebd20b7965525 +P = dc COUNT = 94 -K = 6585494c7c511ba53f3bc3fc068a50a56b5036281b012f28db4a7d7e806725c1 -C = 457cff334cf80438d7049dc3e7f09a2b -P = 1a +K = 0e896a3c8bb0b20071aaefad27429881bcd9f3e78fe8a5ed495f7c630b8dacbe +C = 70eafb07a9a1ceda30bd5ae6c114ea6a +P = bb COUNT = 95 -K = 449c31a04cb18c17dbcd77560a1747cd3bbdeed3de4bf34467f91c66bb0d16e7 -C = c4c668c136a24f80a03a027b29a0706d -P = 9f +K = 3a09b2fd7548abf2b7719c055da04395128c7dd72bab6101dd61f723a771b85c +C = e490f72a5a539954c846cb1e0e17100d +FAIL COUNT = 96 -K = f9515caeedffafacb19c6e4ffbe7d2cc258bb0469c2f830036d243995ff3c140 -C = 506558e8a6b9d26a6b55fa7d0bcaa514 -P = c1 +K = e7848300f42eb459f41472ccc62a8ac8cfa70486517cda8ccef1c40cc7b1b91e +C = c6f6429c6a86fbc1688791d24be3e5a0 +P = 27 COUNT = 97 -K = 32a5d295e6b10d44f010ccdec46763c54162cfce1eb64e4f9566b327e75c2bcf -C = bdcf89023c1c1fcb7c31676453a00f2e -P = 69 +K = a3c1a73f05ba2a9f381c75da4c3c0b698f11c4cf0edb0be18710e7cce11d8f6c +C = 92b45f7fcac5fe736c9dea163f14cc24 +P = e8 COUNT = 98 -K = 8da6f0e3cc95f485995ee39e63b61a98541cca58ed234a4c2069485e248dd0da -C = d0edbf6b15dda6e4fb62782af651f35a -P = b8 +K = 89cb2f5961016375ee86829bf88d5f1acfc6fe802ccc2476fcb0ae5e10da73ac +C = c07177607838468f34e191b45817cb07 +P = 60 COUNT = 99 -K = c05c683947f52a9223ef0735bb7707031e91a398235a6230abe25fa2fc2b7c08 -C = 8e1926245252b7f5b7d3142bc3155479 -FAIL +K = a927454146e2d8dea438fec3696d85c0cc3322ec980ec8b8cda5ff8f0bc248d7 +C = d9709c3d1aefbfd8c870abc5479b145e +P = 3b -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = 9facb5059a60411c98447b488e8c4f7f308db3a3ef2483d563b7624462fcb450 -C = 5d561ea509d0c6e00116a05467c5028039392afb6272382c -P = b279fb66e4c9a82091 +K = e8bd7564083203e817c9b21a540b8eb2f81d28e0b3f491a0b407af31aff1ad18 +C = 400883c4a39785b3a1e6307cdcb1b11f +FAIL COUNT = 1 -K = 7caf6395b14b72aff3b5597aedfd68526cfc73ed73fdcf94ef2dbfda0100f03d -C = 8d6f51e0b145347cce0fb2595beeebdc09792d4e7a1f84be -P = 5dff30c6b3fe08ae4c +K = 48658f36aa5e24621f86fa6db06487bd635b18ff87704431a1c42cd145115c51 +C = 6990b3b115563ef6a0884a110a393ee4 +P = 16700199665ff161 COUNT = 2 -K = 964de211c99b0d7efe3e4e7848226bc1f43c85184e95ef52a53b062b89525c84 -C = 1c9052a48be61b2891a429419ac40c0589263d5813167197 -P = f836117a6f02ec8dda +K = 8b009cb04ffcfea6c5c5d270ddd494d9d55ef7e19e45b3edaaf722aa63445bd4 +C = 49bd30b8c2c385142c5726fb747ad0d4 +P = 52dcdba357859a1c COUNT = 3 -K = 1ca8c72cf3908f84e4c3d37be2d667b369cc9d7db97c784cff014360a0b334b8 -C = ae52c79747e3782b7fd0d7fd48aff24ed5628fd4c2fbd840 -FAIL +K = 6365472f90f0c84f97b544a0aaa8bc879cec384d7c4da6580cee4e285c8d2928 +C = 3789f4b48231ecb8fab8e90b97c3c32c +P = 938119d558e0e17c COUNT = 4 -K = 8fccd3dcf11248f5efa9c2dff20ade32f897683abe4f4f6b5ce409e50451625d -C = a5f6e370f913c0916ef3a3724c53b7c869ee606eb7356d76 -P = e3db41a3baca915266 +K = 7dcfd23787a45e50313d4983aabbe11ac79d6ba01f8dbbcaca9e6ad875e115ac +C = 0483bdd7c3dc461f87507aa9c737e06a +P = 1704df763ef7e19f COUNT = 5 -K = 977c87f036e4b5d13dbcb0c7935257437d88aafc52119dd75b780d2eff8cee2d -C = 89145fc9c5eb1ad1edc41614dc2145a4e8a0dfe45b895115 -P = d7ef7b93cc50f688ed +K = 94c54344b6938c2911ca1d2771d47288fe3c36ab8b50603536ecd519d80c8d21 +C = f6bb92bad14f25199374dedd61dd51f8 +P = ae84e6cb11579883 COUNT = 6 -K = ee9c64f009c15e5b9b1219f0b7926c0464b02641b81af471b9b715039b5481a1 -C = 09fbdda4ce945ae0a5941a55b230459c6b9c2d1f2c1b5b9e +K = 301a77e2fdd8165d961aaaa3ca61e09063cdc07d1635a0134e86627072697bad +C = d14c964eb59ea6eb82a2d9f4d8d00a12 FAIL COUNT = 7 -K = d902bf4ab62a0443b50dd8d6bc54dde002e1692ed84ade7e0b651b335587e596 -C = 9a53eed6f8f8f8eaeb78c1d22e1e559008313395aaec390f -P = da5add4731832845fc +K = faac02b16b3e203d8dbe67fa731637e30aaba0ff951229107abab3115f137b9e +C = d9989a8b4046219c66ea29f5b37ea1b9 +P = 65690026bcc36719 COUNT = 8 -K = 0b1649e18f2b8f2ccd2b6068e15835e3119a5718081820768bf81e0444292c45 -C = 26a3023c56d6170d2d3bb159fd62e97897d95809f5c35de2 -P = 32def37d9bb244b41d +K = cd71d44405c1020716dc92afefad1ccb57a79b6364670bfd213fb892fbc71bc6 +C = dddc3b074c81fbd499e88db9a5cb408b +P = b0245d4fced71cfa COUNT = 9 -K = 2ed866a08c3c376189592ccdec9d08e0361f0315e3ed9442b80951bca0080086 -C = c455c005880291292c19fe007f12cf56022b376b20f0936e -P = be5c93c88d1650cc6d +K = 5fe6e3ba27554991c82e731cd6a3436890ba023a974e39b1c8fd93d56fe364d9 +C = a5a54ff82c43fd37954fb4cdefe9eede +P = a78e15fe043d228f COUNT = 10 -K = b246b6e04f2d9136d3d793869c4fabc7dfb23924a100b363cb24cbc02152d199 -C = 44c8866935a34745fd2aa3d1e62c8ae86a89564c0148589a -P = 7196e8799b16ca013d +K = 6790d176dac02076fc573c70f7b5d2126b8d812d769914b93ad2050c2758a791 +C = 866eaaaaf97cf9fbe495af801b6f68d0 +P = 6c3b29c6ebf4aaba COUNT = 11 -K = cc1f3e188906387b3f6219b07760ebe7808d5f7d2784f4290f96dacd52d3387e -C = 9f3594daa3d18269567b592ce2b71b417bb0b92a044d56f9 -P = 62a48f84de8d0edd80 +K = fc60acf65a54b2321e868ea7d513a6f8405cba7563e8764398a80e7bc57f9fd8 +C = 3599f72b72eaec72b889c545bd629f1d +P = 77dba3b465dc38b6 COUNT = 12 -K = ce4f63865efafd38af06c0991915ce0c2d2f326e09ecf0bccc6935f613e6ac85 -C = c8146ef934d1d93d0aa57ebd0181e31e3ec616abdbfccf15 -P = c8e2ed5138276f4aa3 +K = 56225affaefb455c740575a69eaff78b9d89cc1a96b1c2133e1030cecd8b3780 +C = d735756514b522832c9726fdbac504e6 +P = 529146d13f9bfebe COUNT = 13 -K = 07fe2e3474094814252616b839fed23a0f7a669e32a965a3e98f2fbd3a592e64 -C = ed4083918aa9dd1abc6ed1b079bf37209de725f1ce31f2f2 -P = c06c176df6d696ade8 +K = 8f067726ab3340d25ff02439f66dd3e42c99fda2e810104d5e7bd3d513a8515d +C = b774015067f91068f68295ae474ea63a +P = 99b7afebb0949448 COUNT = 14 -K = bfc992fcf73b5fe496a76b4f5435a01a61b9ac4a915fddfb7da9cfe95d5246d2 -C = dc71a93e556bf02926b60b35728f487347ba39e621169a2c +K = 98d2e481112c5eec33267c8f1504bea1e31f2a970ad681b0e1c38c7d6a07714d +C = 28e63512de99abd84253b5ba6df9c06e FAIL COUNT = 15 -K = eb87970f2206f73f3b4dc0214d8aca8a8e9507cff8b284722cd522a43a9ad358 -C = fe86cdbe8d31f41f0624ce0493cd35a36374a14a7dde12d2 -P = aaacf7c19d9c17f394 +K = 2edef3e26a789a2297e48c78c29e1723cdb063764777c4c2b99416f5d4685b73 +C = e841209182d7e776d1e77ca6149923e9 +P = 49b1963eae392ee0 COUNT = 16 -K = abb9387d40f5de57c8f4fcaefd800c0aeee28e495fbb85c84cb025c371e4f78b -C = 73cfb42215b70a04880b09fc81e7315ee991b163fd4e6476 +K = b3b2baf8fcc216b4b79bac8ca565d2238db436999ab058d16fc138a38577c24e +C = 122156483c479a67d4d3061b4e55df3a FAIL COUNT = 17 -K = d6faa2efed1271ebb7f0c4d3e275e695a507274d5abf9576de42739c499ce378 -C = ffd45e0b58581c5e069a6c6af5199f82ffda459e8aa8c5e5 -P = 2e8497a3328598b530 +K = eb657c622afa37f29b7af8bd42a1a8fc7287a3adca7077c45962391544c15389 +C = 0903f366d045ac183bc6f7c422bda11b +P = e6669eec04ca7e56 COUNT = 18 -K = dc474f339cdd7743023be7529771c3eb46c9c0375cd5ae396677ba467f5189ea -C = 60fdceb6a0828f7610db1fdc22d90bb53f0e10bb26fe353c -P = 385995aa5736f3f0a5 +K = 24942d1b0f0486431aacd80ca64f969cd5614c3d735861f738119a1746197824 +C = 29f390accf83d1224b2e55152db2223e +P = e64431ec341403e2 COUNT = 19 -K = 0905a0954cf8cbac5cdd27c12e1366f4dbb74a922e3fb557fe0c6d5e7783f6a5 -C = acc79f6abf13e4d0cb8cde694dd6538533a424eeb9363267 -P = 28b07e24c48de3d4b6 +K = 5208353cc4ce5d65861bee6519e96b320008be56a19a72b0dd2a534314861be5 +C = 998bb66c6e89767ee4578e5de9735f85 +P = 936b9f6f1375ef06 COUNT = 20 -K = f526d262da27325dc7cd5c0a32bf19fc935170ce3f2a22a0b752594c911dccc4 -C = 8775a33e52943e6a25f4696ffc2615a43293bc273e568e73 -P = 725b5a5f9364b2a342 +K = d7ea3808d859c119ac75da41f0eb1a869d55092cdd619ddca444ed35324b094b +C = b5a7d330492d6cabc485dd663b185836 +P = 0157c995b1294e2b COUNT = 21 -K = 44a6c9b01868dea906f08205f3d4fb25237de77de8fbf5a292732737852fc892 -C = eecbdf20ebf8414b08f2e41d8cafbda0f20cd92736da777d -P = ca5a9e12afd8f191c8 +K = c2e14d73cff5ff5db22a3145e104e2ff747107c71ec9c134bdf879ccae4c93d1 +C = f1cb9f90cbea1656e8d2634487b97a68 +P = b40bdd7c4d274b2a COUNT = 22 -K = 300dc11398627ebb088fc120e0e741802c71f0624521e2fdc255579c27a796ca -C = 62c52b82d94d2d7150b1d41fe8ee459735a21911925ee810 -P = 12268f008013e2b5f1 +K = 4dc9d02b5a2abcf2dffcd09e4db66d5cbb53e559e78eb6451ba89e2a4e8147c3 +C = 60f594d7388312eb59bba6bd93ec32f6 +P = fe9e898fb725a013 COUNT = 23 -K = f2d3ba57b5d83aaeb429a015ffae77fe646ee9ba0c1670db40c86973765766b9 -C = 348449cbbe806b3dcb15eb59213f39e496f5ca86b268b901 -FAIL +K = 970e254856b6b2a2995a1c1f5c40e434a13b3ea8892b46434def3c6c108e2d35 +C = f32697b63291de81a51bd6dbf7b0c412 +P = 05552739cc5b399a COUNT = 24 -K = 44b063dcd8b50e1752c72fa5423a318dfca276ea2589f3ae3a36f73ad3e04ba1 -C = abe5d8b23981b10682f0daf6ae8146879be1ea6fe865f5c6 -P = 816cbb2116e3befcd3 +K = 01bc6ff194978592c9035d5cf267831cbd63ab1b7b9d32181b3311bc27a768c4 +C = e5580ae9c1dedc4a65a00693679c28e7 +FAIL COUNT = 25 -K = 95328ff448e17d1c88f61edf8520bb8ae109eb8c9d3e7c127bc2c0a8d6befec3 -C = 08b1e799effa6046795d23ed003e9a0bddfde5e643e17c9d -P = 3d6233b1011520e2be +K = 93792045f8b902728cc1b5b49a77cfa80b46fc8142f4793a8db88952cf4b02b8 +C = 7a4b2fa20239f011967a9a39608dac43 +FAIL COUNT = 26 -K = 35d5f010248214469fe3fde0f8b01b92824a94a072a23faaf2f89d3203c0403a -C = bacc152b5fe85a5dba82c331daed464c95ec3f58e00993ab -P = fde5388a08c711b736 +K = a4a2322cf4a26d71ff8e4bb20b8faf6b99f8a528bc4767f6acba4a8a634a784c +C = d86411822b3ed13b946b49e7bbde4a34 +P = 49b1ab83dfa17fb0 COUNT = 27 -K = 97f5962d318600753dc2821a498c2ac87f1720114f533678a0f7708edc17fdb2 -C = 0aed548d6d1f3571808daf3dd10ccf1d90e3c53733cd2fc3 -P = 949cc1b9c357042be0 +K = cc0c598b1bbae7412625be56a753c525772d3e5d350be5a017ed8f4f5f970a54 +C = a465bd1d1fc7da6333649d63a395116c +P = c71ffa889feb2946 COUNT = 28 -K = 60480011cf043cb716260e6d482caed97c5e9cf1d866726472f98afe954d1673 -C = 30bca4a68b2d9f9cdc930eb08450167b4889ec8ffdabe9fa -P = 6635b6e77f3d949abd +K = 75e3324c3f6067d198aabbdb48973ba8fc777df96312090c1f6d5889c78ff88c +C = 4a1757045ddc4618ec3c455db1753ce8 +P = 5037f39b3276a715 COUNT = 29 -K = 53999ea4c1946f29574f785950103283ca47d2b3139118e927dacb7b218e11c5 -C = 071709f3a216343018538902ed1c9e7065161477e1458ba6 -FAIL +K = 9d9d71caedb0c50cbbb71a0839f165dd7e448052f9efcef4c3059fe7c839ef60 +C = d049f7a4b171380c8be6da03abfe95f5 +P = 728d0e9238078d57 COUNT = 30 -K = b0769492cfdc79c66f71c4410ef157259e3f74b33778a6380178b13fac2d5135 -C = 3914daab00443642907815f833ecd3e6a3633473402d93a9 -P = 4ed0a98873940ba3d3 +K = 7b376cbe8855a1ad067561e5384b9662d303f6496df5f8a67dd9699435eca7a5 +C = 3af39e65199d01d3cc25a4de3cfe4670 +P = 5bacb7411a174973 COUNT = 31 -K = f610f1e4fd66a69da5f2c67021eca5d94a8f6345571c4fa1c5349692a9c5f7f0 -C = 35dc3a677e3fefb7844c10e2186380d526fc5708493d0907 -P = 5bef3c6ce2efc4cd84 +K = f8543e90c38ae7ae539b14326ddc85f36f7c725f8c1760a9f1b052b2234e8895 +C = d409e8c6d29e0775917f6e3b1cd6a0d9 +P = 23fad86710456603 COUNT = 32 -K = 985c097dcb11f324c36f3ac55dd704274620ae250e3b7c6eec93f97e6342c863 -C = 02ea5697b486a2920b11482094de34a8181e3d21049fd074 -P = 54062982ad8d3e760d +K = b639c72ef44c09857a8d55db0c3ea777ef681d5d05d4557a7f0a8f10b839f17c +C = b659f8291c94dc8e78f8c3671273a929 +P = 6537776bd54df02c COUNT = 33 -K = 1bdeb82e847d3ba23c5a09aff7768a8944fba2753b23dc33bc1253884f574939 -C = 7d820caa41a0c3691210b04b60e4a34b9b78c4fe5942b6f0 -FAIL +K = 188b52ef62db1d4a35eb9322f3409570d2ed3eb959ffd0ee30e7ec9634804fcb +C = e660431c756f140e144f9de45c539c9b +P = 83d76bbdb88fe0ab COUNT = 34 -K = 63928b3768ec2ca287c5b75d2e79901b68465ecd2844145e8b5d28a4f8eab5f1 -C = 6b3b97c762da9ed0c438cbd3111f913524c614d8b0a9f5b8 -P = 517bfc34c014427377 +K = 112bca99fdc8d2d63bbb631b684b8030ef092a9002d27ec7683816f489a5a865 +C = 82bf6abb1e1e7cd50e6ba0d099eab2c1 +FAIL COUNT = 35 -K = 6308f07ca54c2c9fbc1f820b16bcac0371b0f7f3c948b60374b01c93765d5a7f -C = aff6c620ac4b47c81b9273d13adf78763d93269be75b42ce -P = 2862a3b1d2816f1fe2 +K = d9b38eca6049a2b0857fd841edb5b7a1c523d45c334ec30f3dbb86fe1daa54ba +C = 7fbc14de38a0a629773cef2fcf1acbb3 +P = d1f6cafabcb0f56c COUNT = 36 -K = 6606bf28bcd3d259ab56390520aceea159eb4bb76fff7eba2363a56584766770 -C = 706023080748444db04954b06dc978d445a715f25eb9ff9c -P = b5915fb08be326cf9f +K = 917adb077a931e68e4ca174c46e7a00a200f61cf8ce482bb955ed800a94d9444 +C = 4f5e2dacedb8aa5e809c3662bf19e727 +P = 39f63b033955e7cd COUNT = 37 -K = 96bc2ec7b09f4d5f8da3111a3b2af1bf351b764ee36ca7ac45ade7e2a3157607 -C = b13df6819769ad1a0618a2d2b0b1b2ff161b666a4f6dcf43 -P = 4288913669f8ee6376 +K = ee185bcfa8e699cb556d36ac66c13c0ecadf185ae5a6c3b2e06cee282d7dcba2 +C = 262eb54947f98b366709b8a6cc99213e +FAIL COUNT = 38 -K = f66b63a1afcd07865684a834363be48837fea35c975f4f494b83b2ce3e0f7109 -C = 32058df060a0d1347941002e38bae582f6e7b9ef961f60e0 -FAIL +K = 9b0762af2dfe5821a671d3fa79a6ba55f39f33768b88a769dfa4e866e9939095 +C = ec2c60ff6af76045af55ba7ba59a17d7 +P = 68398807e5b94c74 COUNT = 39 -K = c99ee85d80276e9362c3ecca0869864976e15bd3139786fd2457487945f20075 -C = fd406a1dc84c997d0d5c1f7ba3c430cc9977bef37370bfa7 -P = b8a2288e7dcaa19df2 +K = 83ee35384a8fd5d959a6b35b9a11ee192ea30d3264e70cf3d22d827a7e94786a +C = b85abfdce4fc3980b3da01b5319e499a +P = c7121376da49fbf1 COUNT = 40 -K = 8358c854ed8244743ae68af28fa312e3f0bd663f68373a15a55a604f437438e1 -C = 19f396c411f069c5cbf2d832a1cd8537fc18a96a37ec0290 +K = cecc0035cf0ba92defc2e051358cd34b4e0b139448874856399f06302aacb39a +C = 204c16f746820a0b2bb7ab4d31c68975 FAIL COUNT = 41 -K = 9c408451e497f8988e80a8c8653d91468a638cbbf41737d2cb43e53cbe4c8aba -C = d72b20181c10240904a6fdc687c244f14af74b595b6e0e26 -P = 388f6068daa163c264 +K = 266103c363d162ee785c1ab0843779b142011b58a5faa6db5146a44425df3eaf +C = 985c497ed9bf94d5f7f42d432b37d0fb +P = 765ca970ca645b2b COUNT = 42 -K = d55c79699b06d304d32a665575c4bb5b53432d70022f4524b6f4891792c62f35 -C = 8312a4cda0c2f2aeb2bffde56990e8502b39ce0f394d74f8 -P = 3e89cde202dbb589ef +K = 9b374999325c5cd415df9ab36208a0e632d00df4c1947ff9ee5b6a187896ae4a +C = bce840045ddf4ca7ae92ade1e49fb9ed +P = ccd5b18aaa0164f1 COUNT = 43 -K = 9704d5ab78b116c6e9620075b671e94bbdbf2f698f4fc112834e4f89cf6ec4a5 -C = 5b05486360bb13ddb832696a720373526163b0bc24a26951 -P = 44d29149bea708aad7 +K = 6a35c0ed6a76ab7c805f649337a22f0ac741cf987771db3d3c9da7af8df41353 +C = e1422235a67fa90542923e8c82bf108c +P = fd9350f0b4ce71e6 COUNT = 44 -K = b33429ddf60c5dde092845f034da25f14eb438dfc063114623084c677edc2333 -C = c58e73c56d176ded61535c20832c9367cbf416b3c1493349 -P = 7398e0aff32fe6ebc1 +K = 9edc47d8b90e7ad59dfeaa788de8df12a9587a861ddd86b02f473dd1ad9b1fee +C = f569cc6146a6a6b6325a331224e59a59 +P = 32a7ba806e444f53 COUNT = 45 -K = 713ce25c16628bf28abc6108476eb0f0b6582f2f0f9a26e9669911b82b7a7279 -C = ee87fb2555049d37daf47dd0ef2ff4a89518e3e16de84bec -FAIL +K = 9d1b2fa3d3a0927ff023d4b0561ea3ed46a72205c79d44b2f8a620c3607e7a77 +C = 36d5966f6598bbe8e7af20b41de3653b +P = 775f39081c27c1db COUNT = 46 -K = d5b17a9f2cb2a181ec2b6c47c95c001723aaa057a4cf49eef4fa45a0d6b55312 -C = 4451d8e322812c55650259be57fb4a00489343167e50c66d -P = 11b2848a0562abc399 +K = df98b1ab703977975e0cceb207cdccf33a110bfbcc39ba53e2a61e185b3c41c5 +C = d59b7428bea3b8905632e9911e25fd9b +P = 9b9d433985c40d89 COUNT = 47 -K = a1e6c9e093105d8188c531a89268dda6573c3f114190779088f071f09652bc50 -C = 0845e87ac290863575d03495b641a34a267a115739905409 -P = 156a3fa0fe645224dc +K = dc624963fbf0fe4ee8c2271c482fe9cbc667fbb54ca597eda779bded143878ee +C = 418cf29379c88eca989f0dba3c0e515d +P = 85c485a4b89f64fe COUNT = 48 -K = 29bba5200d3547b88550b3982c39e37f6c880e698e8cebdd5163d9a8ae4f4852 -C = 76a46a412f477c306e078a41dbfef4a2132b642087b3d568 -P = 6a399a3f5d64cae265 +K = f2d1ebff90727d75aee7b1091be4d39c593f67dd1fa5266eb51b9f108382055a +C = d9064d150dcf57cb6be1d4ef9f3796cc +FAIL COUNT = 49 -K = 999812b3b5d951ac76f21d7ae2a50cec4b405c7b387564dd1c7d94cb6f8d0d6b -C = b54bf1fb2c4c75a8c3d4376efdd04f55886cef37af06557e -P = 95de72fe2bdd696c66 +K = fdfb4fd5f11072acad8a6e08037bbdcae970458172e59d902fd58a4516acac5d +C = ec257ca6f4232e2488d68e82e0de6222 +P = 48420400e727d0d7 COUNT = 50 -K = fbba80c9b0dbac15348e01677c0d52f87d089b3df1588e792b6d25de96113ea8 -C = b31667ad581fba6b7070e86385a32e67144da2b4108aa394 -P = 1f661e669f9a84358b +K = 84aa0ec161e9bfb7af7dc10afbb3b0be78ddd4661ee4154beadbf673119576df +C = ca4923022746162b2df59f9da7b75325 +P = e9aa75b14a66987f COUNT = 51 -K = f629555a4542068b935214016b6fcedb43b30d1683106ad2d6c0bb32b4eba448 -C = e3b5f5082b5017849b35c2f02a65e26d63cb3770a732ca1a -FAIL +K = 57eb92a84820155c0cd450e832eeef53263cf96a2013d4fd4a1153552152d270 +C = d886c7aa5f3fbb7b4ed3bc55727dca21 +P = aa13cea715746bc6 COUNT = 52 -K = 17bd76e11f9d4b1e02610393ea0c257c2daef94e5c383b81e7795de337934eaf -C = 31a74eaeaa36ed96f890c580f4c17c00a8c89641a6554647 -P = 6a28afc2f603446370 +K = 5f497e13cdfa66278f963de02eb145d8079771003874511942ee1b23659fadf0 +C = 5e3d14538d14987716ac72b410be7158 +FAIL COUNT = 53 -K = 80624114cd03731498a981d41d7c9f17d103b7eb90dbae873df8168e6c5adb2e -C = 9321459e45c9d5ce2f3780cd3d7589cef5658da95052e8c8 -P = d2daad6e0678b47625 +K = 4b070c88beb58ac1ec92bd8487e662a3a13b4a543c09afdb7d25f5cef24bd0d0 +C = 2c0d618a86f843d821ce70156bc27143 +P = 580cd41884d973c6 COUNT = 54 -K = ad4b5e91b2ee4ab0557cc38f7d1ed9d8fe87fdf46fec7088a489f28a8e71a858 -C = 2cf7f6eb4ce50318ea276d5fa05a59ea37c147e578017091 -P = 4cef37d3ae819dfe81 +K = fab81c5607bc14dfd9150ea5a02fbaa2ed6d87b90c3c3046888ed603e26dc05a +C = a0b26d3e1eb18b3cdc50ce271b9b237e +P = afd6cf4847b59b89 COUNT = 55 -K = 804eca0a63eff549cf13a3c04795f41de14496f3936ab83535eabc1efa2146c5 -C = d76951cd35e605a108d47810ef954506be08cb3e8948c99d -FAIL +K = 6dbbc50a75e0c94354bb0dae18c83833f9d8f89177f8536644251b2eaf5d5de7 +C = fa932c05d315f7b62787fdfe8234093a +P = 24b815132ff1942d COUNT = 56 -K = e101d748b8d007b71c018182ebcf3116accb8155f60cae0cb547ca5a39b33f89 -C = 13a95b7aaf1d9330c1858243b7e53f588222f9fba32d4522 -P = 5687c0822bbb630be4 +K = 90764e7bad8d4c60cdf33652c034cc1052fc56a0743a13d3f21a48559b7f2d26 +C = b4b053de8cb56093054acb486cc1eafb +FAIL COUNT = 57 -K = cac619e640062d749698a1ce78ca5a728442201838d281fca8372b48300bdc7c -C = a6fe590d3c1058671390f7aa39d02ffc157da58b68f24834 -P = d343ad204e94a0328b +K = 99a600a64789e420655ef1d810f6d73f24389da5a9f9a51989ffec0619ede49b +C = 346adc849eb6b930b1aa9166e87d6001 +P = 9f98a60242204fa2 COUNT = 58 -K = 39f79f92c2feb08b9b08124dfb0799e235e044a46f4dbf1c6cc50423c497ff42 -C = 65489a3893b07898e2d644d5581dfcb1ba48e4c3a8090cd8 -P = 10b0163b0ebfc4aacb +K = e391f7ae407f4f187fa14c32c974124d385598e22e12011a3029d71646f3a3d5 +C = 99019e5d159735faaec3ba177187a076 +P = dbeba5a6b1df9a1d COUNT = 59 -K = 65e4c255541cd4d24855e5d7142a9e4dc6857df7acaf1c032ec7e747aecf9895 -C = c4912a9235a786b632f415a2fdc0528ecc008c484a3ddb9e -P = 94626ad283ef3beedb +K = 1cef6e88a3654a22e4a3fc37b5d3b9f540adf5daeec668daad62c874b22ede3c +C = fe753d185da7e3d3e2212357f9f0e819 +P = eab77cbdbbf22202 COUNT = 60 -K = e7658cd51a80ecdddfc7337916ddef0c9f1289dc06dd80e8c63104387c055962 -C = 85648449b83aea4ef2190311ad231bbc70579d8e1378e794 -FAIL +K = 80e2bc484ee0e526a0b6e6b99b11be30f7f00989b2cda72f70a96e84d9c7de57 +C = 562343ea1b994b4ea65d304c84ed42c1 +P = 25df6cf08da3cfdd COUNT = 61 -K = 91be237ac40847ae650a038bfdf20f6e01cd03b67e12ac214fce1f684a6005ea -C = a3d1b547028633fb4eb2698e308046a78142e2a371c833a2 -P = c512e8f6ec1fca1829 +K = dee91090b328d4378cfd8a9e37a43c663e4131fe44e5e9097b412389ec209ddf +C = 3ff8b4dbf5ec61d30223497a6a636555 +P = fcfb50f1775eb853 COUNT = 62 -K = b0f3d0f34e837a2c8e73195cf2d687adb01e7b044edde1923d52929519aa29d0 -C = a67ad8618e0225a80cacf5c4a03ae54f98083d0a7a90e00f -P = 57650817f5e9ef4e39 +K = 60644d96357a2ca254e92426d74e1c8b2db2ef681515206f208a0d9439145053 +C = 1b395a0b3900c2e91b8c64e828f4c2f2 +P = ae6155167ba93d34 COUNT = 63 -K = 1cd8928c47fccb0d8336ae4d9eaec879ef97ab2a7275be2a0babe02f1e813232 -C = 23e3858b0f87fd42141513700d028b6b2cead1aacebf77e7 -P = 0f09ce1a2633bf91af +K = 49f6d8d06540e6991561bb6b757ddb477a4e6d16ab8cf026faf9b5752eb376f4 +C = a7a76580f9180fcec95f0124f83e77f5 +FAIL COUNT = 64 -K = 68c7a47babdbd45953de55e91ccf10e9c50f653aad798dac42437ca1c740954d -C = ca9dceef1cd2607052adfcfc88f3cb027cb97aa72b995d1d -P = 95c52431c5c8930810 +K = ab5c8984949709d443d10322ae341fe04811082d7669341dea6609186a1163cb +C = b5182efadee9ab50c9ab79f402215ebe +P = 80f75672a6da8a60 COUNT = 65 -K = 1e206b7846615844b2c734908a56dd74e6547195db869585bea896aa544e8294 -C = b5553234c5afc2a4395c7724ace465cfe7721fe169e1d823 -P = 7792a98ab5ff451c0c +K = 7a4cf94544e58d591281b3768463db9815674fd7cb835c86bfa16d124dd46397 +C = 479931ed420201d6d2e2b77447759a5c +P = 56c3d9fd1858cfed COUNT = 66 -K = cfd153fba8cfd27a6086518c7ddb45685dbd405fde6cfdcc52eb3295fce26eb6 -C = 618b169804697216a3fd8441d4f09e2c175e6c6a034d7cc2 -P = 7c18367ef7b0ce93df +K = 3505d9e0d1714ced8059205e84d6fbc2c09978e000507bdb28c546f6d1ccb081 +C = 54e55992a6b888139ffa7a11beacfffd +P = 4cd7e0edf97d85e8 COUNT = 67 -K = b4274b5ac56c958c267550b0cd873c06c46f807c19df299eae3f4af186ecfa22 -C = 56f5fa2070c0cc35f88f3b5eb73022a348f51dcda27e99f2 -P = a91303b609e7effc5a +K = 7fc3217fce02eae6eaa77fcf5260d8b99a3a35a9fd7aa1fa0a03d821705ec80d +C = abb667fe2e9adac98bb7a0beadcd2d8f +FAIL COUNT = 68 -K = 4345283b2041e8ce90726b2376202ec42e74441158dd27ab66af5efc20456be5 -C = a0212ed2a3b1676c1a427fffa65b7f1e4801707b82934622 -FAIL +K = cc950b2a2c2061e114a9c7f1f576e9d934986af127929c03baefaa5180e12c55 +C = 46186b09bfc8f915f43b2893732f57d9 +P = 0c082a59e86b4106 COUNT = 69 -K = 03871db306cf706c417bb001ccd3176ce0cf4043dbaa67bb5c079edbf4dc1eeb -C = 8ed2afe410c8b9045534f6bb9f6b236a0b2ca5533773c6dd -P = 208162fc5f5564b0e1 +K = 7ce4df23e76e8a5fb55861c4723679fb6f42f0139b518f6dcaac49c5ed9f5e7b +C = 6634b7101cc3661ac4792d7437b1569d +P = 2fac1c228e41c323 COUNT = 70 -K = 6a990daf369a4e67a5c7dbdbc095dbca0fff776b7792ac17180e816e241b54a9 -C = b54c59dea4354844e7d23d4c41111a8fa8630e136dfde374 -P = bfe444befbdedea44b +K = 4fad9b2c0490bd19a2614d5119462f6ad8776314d61580cfd2e63388736cc69f +C = 031107d35e253b04c2a3fd0b222a5f20 +P = 1e750d5ef5c03271 COUNT = 71 -K = 5829991eb9ce1a7356bff15c99a90cb9aedeef795e0dbf69c80de7654b977783 -C = 9fadbe3589301efd4f0bacf7286b2b88095a498de65e8a64 -P = 34d4eb36c90cbfbd61 +K = adfee2bb39f4a64c20f61be575ba031e01b116ad1c750aaa5f801fa6259c2428 +C = 2f598b55267b934f5391c4bfc011da79 +FAIL COUNT = 72 -K = 1586b49d8d361248af1013b33c769b33ce86689d51204669397e6a63fb9d1537 -C = 8143be444c963dd27adf249bef17c4dae50fbada7f12abda -P = 91853b55f12fc27bfa +K = da2d2df9bc1097841b6fe6a8fe97246077773c25e8b8017f8209a9f5ba216506 +C = 02e13a54c289daa70cfc221104f524b4 +P = c2a1d3d078068017 COUNT = 73 -K = 3558b5aa5736d6be37d258ea39d8d19fe8fb6a45f6c1ff05eb9c5b80de5ac1c4 -C = 1c383ef6b500760f93f33c504ff81bde45179a5173564a01 -P = 91eab604f4646ba035 +K = 47bc8bf8f552a387ec434e7a856bf094555c7b99f3da5561fbfb7cdb0cfef050 +C = c3d2aeaa3dfe560cd98d03790b1268ef +P = c938ec14f85169c3 COUNT = 74 -K = 347ed4be812e961a680e4e1b7743db08b7b775737e669ccbe75a4c6675a1ee56 -C = 3dd5f416fe39b49109f4cdfee3024e6695f22c87f2bde082 -FAIL +K = eae891df384a97712cf3f7f88f9baf92b6099944e8136893a44c5e021103bcc9 +C = 6984b6ddc7a2106dc82a5f33c7070b37 +P = 4db1cc0bdcf4f52f COUNT = 75 -K = 7e9b6a1130a27ddf721c81033a5d500c8568c2d69754332dfff9e8f57f177965 -C = 0096f1627f6f83770be1ae22b86afb4e8c88bb357c7c7557 -FAIL +K = ed03a3c93ac85536f8e03419007b20bfcd72b9f9942aabcdd6aba289970bc4b1 +C = 28575c14ba0ffb700865a053fa4fa96f +P = 1dba71d2cf3603e6 COUNT = 76 -K = 34d96d0be9a391347c1450da0948cac522547741461ed7aedc4fa12b2f159987 -C = 98245b88d2c429803323526f2b5086d8d948c54a8a4c79d1 -P = 1c743a0ca939f94bf8 +K = e503b5404e629e5c43b087678e1a2e198e747cd914a20f37a107b23d989ec6b7 +C = dbeeec6be175d90b43f6c51ab9c00a91 +FAIL COUNT = 77 -K = dddd55dbc854b6b12ebb0747a1fb65d96444f73ed4806f2f57085b58bedf2414 -C = 2f75f7d298086ddab94bbc698dca273c8447e1d7dbf20937 -P = 7836eed9bfb6b099e4 +K = e4b49d9c84e7dfdad941563f615f8a5b7db411bae3a391d4713527e247250bb8 +C = c97ad6095ab453f9cd162f820a1194fe +P = 93f34dbef5dbe6b2 COUNT = 78 -K = fc78d09a8a014190ed5e9f715a750f0643b84c256a33a0ecb2c03dc80d77f8cc -C = 2ed3ed603648b453a462e995b0343ae3520bcecae4385d2b -P = 7f09e28fcf8bc3ce40 +K = d5ae5e36f7d13f65acb664076de68cb54d9e304fbe20a111460692fd05d70f91 +C = 88a3e1d4c9f5750f640da63c11624228 +P = 132e8b4a8a34c5c5 COUNT = 79 -K = f8d693ce1ab0e6c559f8479bac395d2a4a17fd7cdcea479c2836d0b0561c50a2 -C = b5086189b677e8bfebd6c72989929ace25e68aefb0b291b6 -P = fa536200959fd9bb79 +K = 0f8ae9f894a853b031fefcdfaabde7ca5461517709913a5a2284a9a505b7df77 +C = bde3374c2d580bd5568f17cf670fcb72 +P = 52c8314e366562e0 COUNT = 80 -K = 5eb303285722eb0c84f604f3a94d0b00d5cbc416b221365553d3bdcd3936a19d -C = bdbd8c5a31cdd8645df47d86ab17debb6875e1bf89a608e8 -FAIL +K = c45b3de4d57527561c3c7422d3c56b9ba1c23d9cd805b693c459a935749ec954 +C = 4d4c7408764419db16b69311bddaa059 +P = ce966e69fa3cde38 COUNT = 81 -K = ae814e6d45613bff04511b2eae13c11bf71dae3ba33bffcb6f8ca37f89910414 -C = ed9147749c833a5250506b808e2377c5c48b8d9774a5be50 -P = 3f32291f650690ccf2 +K = b1c44dfc4e861f2213aaca93a874e085558b244fd3fc2d898c790c83d02b8c36 +C = 2efc05fa21ceb724e46fae33f384d6bf +P = 1539815276484bf5 COUNT = 82 -K = 1cfd8a6f347b0ced0d861531cd31cc161b8e7091c0fd9c362ead0483db5ac865 -C = b6a3b3d97c42607520660c8f5f7f7b521d6b368f46b400a9 -P = a035e70ac1fdcac9e8 +K = bbf35cc7f167013e940a97cbe76dc5633b28030e225079de96e29ffb70ffb37f +C = 554b96bc509761c48b26aa9fca20464d +P = 3af4ef16967c1e3c COUNT = 83 -K = dd330988ab81a4e060bc59fe45c2e581b664e9a052af9b18f12cf75241425d0b -C = ed19b1bfb7e271175057e4300f65491ab639308f777eebc5 -P = 98631449ad1794a920 +K = 0883912c99b2b93f9b38be8c5369de494bbf85994d4d459d062fee2fc084dd94 +C = fea0fb23e2d2150801f426850eaea436 +FAIL COUNT = 84 -K = 4928c6122b1e474e33786bef7f88546a18cab1ea64bcd3c480755d853bfcf5ff -C = 3a62123ccc8d2cadd3a5436bf29bb52e40a79b974eb17926 -P = 87ec9e1a5c414c79bc +K = 76e68d49b36bfefbd6b18300de3d71a9811e5464469cd518b3b5b006f3a3f070 +C = 065890e3dd62f149d7fb9701ec02dad8 +P = 796745f6cf808729 COUNT = 85 -K = d1f9e63ea4c7751db3b270cfef40691463b510d40d092ff1c1d6f03b6df8b734 -C = 25a15686753097fd73eb3c97ffc1429e61e7a544898e5796 -P = fbc0b9c8db524e5d93 +K = b65d2b4a66cb003d3b05847e244d8cfc6f2ee16d4958b31421f703716b98ea22 +C = 0ba2b99adda88182f7deae8bc8bba68c +P = 1145af6d20c0ef72 COUNT = 86 -K = 0cee34e2d08c5741ff587a84a6965a0a6ce40d6bf7928c18f6a575e7953f4be8 -C = 77e8265bab03ae86c219676aac753c486827d078639e41ee -P = a4cc1d86830b9812f3 +K = d3a78d226f35a78034e4d1ed59fa812665d5c847bdc703b0f896962c131a77c9 +C = 4c4028f9a1c44c3a211737e70405ca3f +P = 43239e8816fc79cf COUNT = 87 -K = 5c9e0d12525e2f6910862d357c34fb5c85424ca2e748debb83b4969b2494a55d -C = fdd0347feb1b9f277c1c113a1910eccbd673497c0b2b3dd0 -P = ad60a5291559f5f484 +K = 471e6f5f7c98981c3ea96b7420467da972216f9ec137568dc57e897e99cd1e31 +C = fd16413d56acf40c226fe4867a7e7682 +P = 4be7faccf8facbac COUNT = 88 -K = 9e056f83ae38a585594ed4f4dc2f13dc2e62e492202cbd551969ef516d5e02e6 -C = f81a7c70c2c1242367c40c1b02e8d2008c921068f943aa14 -P = c8ea23e151227f5d98 +K = 4269605b7733117ced01d470d337ce10ea4087196c39f6e453a450a373186cc8 +C = fc3b4c8c8c4a1222fec211f3eabc9b7f +P = c532c36988ab3562 COUNT = 89 -K = 87957d1aee862c63310161ee1153818de744202bfe6ce70bbb6ec9456fdf3211 -C = bb7e1884bf0a78deae42c23e1d0d25e99c0e9cd2d4644b50 +K = e1acb261260f4721ab5d7519dee546c584e080205cfd783c1485cdca90fa0fe0 +C = 81fb39f919bdf2625f98b4ff9a8610bc FAIL COUNT = 90 -K = 83e5909d306dfae4512f47816c19ccc5d557e9198a02f704c57edbb39b374839 -C = d50e6ccc4de73649e1fee729d1f2c3ac2c5069f16761dab2 -P = 2517992e898002352f +K = c2ee2e4a93b4731e40468d4fd09c2c99a207bebda2e691ed013200d3cddb563c +C = 5b8c9954f62e465e10ddaf8345e9461e +P = 63c4316f23df2afc COUNT = 91 -K = 3046b21360ae524af341a088e9f1ec6ec7520ec40c95d837f5fccfba3bf38d90 -C = 5bbd7f8066a3dc1ac1200730757255f3125a22589d4c3104 -P = bb0e841e01a8b8b194 +K = 45391d65d68ae891d6c8b585334fb834fb8cfffd90b2c1e01827ce24359a7001 +C = 2ce70cb8354e63111fb085bda8ccbc88 +P = 6b4729b50a4ad16c COUNT = 92 -K = c54e566571b29027dd6dd0660a9c60f8be7c3edf93e1325df2278c8d96f6da01 -C = 151ed08ed3099bcfd0db55b3f0f6b9cca83799f16da5310b -FAIL +K = e02cff71df73af2dc0595b9b647b5a1885ecc69d5e7aa4d66789548abdc078ac +C = f02ce01d13d8e9ef064070a5bf256f6b +P = 283fa20475654952 COUNT = 93 -K = 43ed45ea34edfa216a1bbc4c7b8084d63cb334ad636bf679e49810cd104729ab -C = e7e4821a2cf83bb6f12e6165652110bb9b7eb535c1dcbf06 -P = c1a6365202436abcbe +K = 49c51ed54683d5647b4ec9f7ba7b53ef111658f1fb467018a4782e9c55985fa4 +C = 58bfec047dc336a3dd4f8306b812afaf +P = 8389b8380eeb4c8e COUNT = 94 -K = c414c0769a63a3392bdbd670bec39a397f21cf79c79279d899ce051d9f56d02d -C = bf221cf69a35c195b56f607c9eaf13db5c8a67aab0638de7 -P = 2910eb6b133eecbfe4 +K = 4db3ce2cf2dc18119b637c42a6544344ac3be36620a1de1827e894c4f26a5c9e +C = fe66574477fc5933d3e986006369b994 +FAIL COUNT = 95 -K = 648994f0093d6bffa69131608cf23938c494c20fe2747786bc89508214fc7984 -C = 223da694205beb2ff47cb39de9c374a6925f5d429f3db2d6 -P = 62aa26b631fd497eb6 +K = 478bf59897d89d25bb413384772b99b9e98ec3b6530962ca968f4e93a53b7680 +C = d910f6e167733afe88b31b38e077870f +FAIL COUNT = 96 -K = f84903a1372d3491747e15a32de99184f0e5b604db06b36664079802ab5fc726 -C = 287cd4fd8c907db56d908ea9c2da90adfc024a50774d04fe -P = 9f5bfe9166691b797d +K = d09ec318d833f05b78d20dfdfd20e1209de30b6e6ab15531b13bbb19c94626d4 +C = 83f9d2643d9cef5f28fc807913840566 +P = 713fc2acf07cfddf COUNT = 97 -K = 0f7930c70a3fedf97b7b9ae8418ce0754d3a24ad8c195d7bc0b0a6809f38b533 -C = 699bb99ed7c9996c0454e6ca4c38ed6691c203263e77f2ac -FAIL +K = d15573f0beb386674a821cddc12bc4c3b3eda09863751126de2745f4f721bc53 +C = cf429c94644f1c1c429c61089af3f3a4 +P = a9825b3ba9879239 COUNT = 98 -K = 1f66ab2c55c6840b17530119b73cfc16c9d91c49ad63c895f4e4db6870e16dd4 -C = 1342b1b53095d102c46fcb7c46a43f145340d75f2083e9d6 -P = 02af77522106864f82 +K = 1c8518f1cf429e53f18be42e50802780bff1e5e6af7d0fa9a03aecdc57f080d8 +C = 2b53bd28f1273a337014e13716c10506 +P = 81f19dbda7468e97 COUNT = 99 -K = 7ff56410179c7e3e4017471642072e9705e8854608591a5cb1d123c3a468c410 -C = 1fcae226d01cb187d4b096c5855ae9c144e833205c9d99d0 -P = d322fa23ee34e7728c +K = 2761252c800e9c4d921aca475f601991de019354e90b712e4e643175dac5e788 +C = 4a3e294ba986e7190b1b33863651379b +P = 57ccac6b2006799b -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = c14248aeb767413e6ace633d3907d7cc7e42c8027016ac03fde304eafd60e58b -C = 756d879502822ddb7343976ca4cb1cc6 -P = a015cc6c +K = e5e527216c3622f12e3fcefc61d94ae363bfa3db26128f0c1722176a6a823adb +C = b122a1bd297eb00c4a8f9fd287a1770d9c87fead62c97108 +P = 27457649e83038a011 COUNT = 1 -K = 7c4e7e7826b6d8ad177f5bd7e20704f722b1ba6d0740660e020888cbbca542cf -C = 9a7f2fa060c2222112444be97005891d +K = 3d4c1b2acd0297a59eda960b2f03d2c7c0f8578e2dd0b0005f09390369267a9d +C = a88d03138b7d5c001f2eb6f1cb585b28d2b56386071ea642 FAIL COUNT = 2 -K = 5b0652513eb757ef020ff04bb33f9618d8531a505b42cb6aaf9f243d0d592e4d -C = 0f10909d0a204dd28c017c49f0a87c91 -P = d3e9cf76 +K = 576a214708c83e3bce8d586792f75d06f2cf7094b4550e717e1c5e78e7b30bcf +C = 3c7563970b05bb92b66d3ddbe77da2f48ddb788c17f76fb2 +P = 68ec48cb27e844ff49 COUNT = 3 -K = 081eb65aacb158caeaba40ec9723444ba775cac6a75db398f13816e2d0e385b9 -C = df61901711a80d5264566f15301ac80f -P = 5a07c45a +K = 583adb7fe7879f12ef7322d885b4124377ebe2e18cd0771132e01955a0dc452f +C = dbf31fd04d6b6474b5dae76711a671be2a6d25a3e814262b +P = b9469ac2d542269802 COUNT = 4 -K = db5b4058712d8ac68840c6f8f73256c5f2acf115fd1c954fe993443d7977ab29 -C = f60b6f2fb96ce57502227fc46d33a8cc -P = ea90a590 +K = 6662a39d4f6f67d6350e15caded22e7207433c60e900e430cfd1c0277423d972 +C = 36c07b62ccdee81474a8c5feeeca4f38cc575466d2eef332 +P = 0650086700ee1a72d0 COUNT = 5 -K = b26cf092bc325aee6710d14dea6a1439bf1fc7462be97df1991c3f2790f0ae23 -C = 8ab212db48f89bd665fdec93cd0264b5 -P = 021f4c87 +K = 423163eb5243c874a3544c65fe86fe1df06b417f8bbe4225408dcecdf654e99c +C = 830eb0c000f6eea592e6fd0936f3dca55dde1baebfbd3b47 +P = 69b1b45ce2e9e3b642 COUNT = 6 -K = 62d84d21d98336964869ee91c07258901dd446ea8120d5e232cd1dd89bce0a76 -C = 96f16f61d65283edbf0fa972c83c5d4f -P = b6ffa428 +K = 42cc2b3fb36d69ddacff5ba8417a062a5aeed8edfba705bf8130b19d9e76f8eb +C = f9c724f543c9f2b10a3dca2b99e032076ad3e26a84f5bd6c +P = 315e2ce615c92aa8ff COUNT = 7 -K = ebb4d66ee552431b545b828259edaa76c15750e4d900e8d8865b47f6ff6e0b7f -C = 9c6c43e5f27c0a8d4ecd147a0145226f -P = d3c1b58c +K = 07702d07875f9ab74097110444d9ed507149ebf30c3a027d639690aa62244a82 +C = 4f0c1b5cd79c4f504c994d16d03b766ff20dd313444e5f34 +FAIL COUNT = 8 -K = 06ef57830912c33ec841f5bf67933f6b0bf889fd7b714dbd9508e0014558343d -C = 8cb636fb5d8dd2c3cf9e244bf0e81a79 -P = e89a99bf +K = 62b479f2c11fc881631c3878f4a0571900c77cc2bac77c6c28f491480b7a25de +C = a57867c3b6f6120ec7ea8ffa7d3b4bebe27dda8d4bd3010f +P = 4cacf956dcbeb647d6 COUNT = 9 -K = a2cf9651e749c97a30f5467e6dd1cdcc5245c24c5b1a9aadc13038b8f3bd2c45 -C = 28dc727f597208e631ecfdf17bdc2082 -FAIL +K = 2a1e7d09db1c639c3c8a34b7f6174d685b090e4b0a956702e7610217b891f055 +C = abd795844c94522dff96aa793fc103876ac8d6755ee65f7b +P = 731dbb14ff555680c4 COUNT = 10 -K = a28c65dada8568d47e8f678243a6c037113a7b0fba3da9857c35af929e03c01a -C = 073b6b34a22dea8ec7c66371cae9111c -P = 65727e36 +K = ad066c8c4252a2e4bd619eb9ae325f0b4943fe26a82aeb48394eb876278ce357 +C = 73b15ec51eaf033359345bbe5ae2112987ac4ca7f03baf7a +FAIL COUNT = 11 -K = ec35656ba9da656831412deaa7b84eb795333c55097e07f3c06981e37e588f6a -C = 4d71337c41eef1b4f08a07c2d7dd0a8e -P = db753400 +K = d2406351db94135980dac834a52587b01eae3d5e5c281fc1baafae2914be7c6e +C = c28e24e6607dc96841338d9c74260aa5ddf63bc0d2f605f8 +P = 44231cd1537081b6f6 COUNT = 12 -K = aad4593bf3ae076706348fa71f1de96cb56c6b113703fc3317320131ec698392 -C = b262a4b309899e70964c7ce73e6e3e0b -P = c314e93a +K = 0af8fd2d039d5447b51a324d6edb984d73a5ee7f2e93f3c84909e69d2314ecef +C = e42f6c77e413e042f60534b9e18f65a8fdb6ecca11801f35 +P = cda096a6815c935bd8 COUNT = 13 -K = 501d7490f46a2cba595b39882caa6a2927fe76cbe8366237b5179d669102f7eb -C = c190f1193c40e24e7b8cecf2e7cc7e1e -P = fd714183 +K = 85a29b1a0e967817e47eff76011be02b27bf1d3d3a08cf2bc1bcc18ffffaeb60 +C = dd5473bff7a3781176acb557d692f32667d88acbb36faaf6 +P = 9b60f0100115900df0 COUNT = 14 -K = 0da1e4eaace70d81cb0ac4659a9318123742d28498dabb0172eef34e40ec9054 -C = 871f8f9481c6d50545391792ba5310ee -FAIL +K = 52b87449032ce3b641952753106023b2f5df28fa988a17770b722c49a869ec7e +C = ab673c16602b9c79ce9ae2604c6f4582f8736d55b68d7059 +P = f7d66efcea6ab837f8 COUNT = 15 -K = 04109c4e620585dd1d905da5f191fe8865c99e92993863a4fd1e49575c695137 -C = 06a1801296209731420312ae80bacc4d -P = 41e3337d +K = 161fa2445fdb851936340e7302737ac271ff63896a5c00cbf9b034bf5ed13906 +C = 5ff91145e255b52c0315eda6a26cada38196dea53d382a15 +P = 71e191af87d811d0c0 COUNT = 16 -K = 14e45c49f49f945678480e814b72c83ba54899c93f483c1959be2ebe47fdf45b -C = a6774f3f4c85bfa74350df42bb9bf64a -P = 05e9b079 +K = 1b8155120b3e1a6f25fe5fcedd765ebcb4e3d1798990bf78ae96608c0281430f +C = 726ac175fbc9bb23d3e9ed5184cc8e26a384b360825f9b86 +P = 20b4c517b33b66ac45 COUNT = 17 -K = 6effd16be8fdd308c09703685fb3549a431efd3ea3d401784b39b2a57f07fd94 -C = e754450bd75c5814f7164957d23ecb07 -P = 3e920355 +K = 171d7e9905417f4fc75dace031d8c7e94c0866e4269cabd4a85428fd6bdaf0c9 +C = 650f127ff613f3d0b4659603aabde0791ce38a94e0d11cc5 +P = ae1d3a3ef1e2701a20 COUNT = 18 -K = 616c433cdb00cf8bb0eb6ffe2ef13aa0ff874633a94992e6cb8bab701b51fa31 -C = dc720b88d627f1c74b928d5640f40e05 -P = af83ed91 +K = 93fa3ff569aa0e896039018eb4e014bd50cd22bdeabc794e2d24d8ea78947e44 +C = 1af2e00b58fcd94711337a1392024f9d79f0083a23c80959 +FAIL COUNT = 19 -K = bb570b371898c1b4800659f658e5a53233af74596b37bd2d2769a3dd2d4aa4c6 -C = 024c76309b53b51534754792ef33cacc -FAIL +K = 568f52a3ee4a9c91a2cd8f10c87460ad9d3feb8673028ccfd70713480d28ca98 +C = 84d84fd6d048351d043cb59f99af485591b7d14645abf40f +P = 62548aadd24cda9246 COUNT = 20 -K = 40c231f8f6479edb7225d5ba6cfd80104b9145b3f7dcce9bc5fda510f67f24d4 -C = 4e35424a7ffc5aa26f3d4c1db15c2fa8 +K = 89672ce2303805ecdfd3f7a7cf73eddc57f8e8e8fd8a6235276a5e7eb8c8178f +C = bdd6f2dd20fca183b8575f03639a985bf71d948004a8f0cc FAIL COUNT = 21 -K = efb9b747487fce9e2d871da398341c02c5dc3a5fb49412de0da78d7fb7a67352 -C = cd574081f5bea586d31d198e3eb0def5 -P = 98fcae1c +K = 748a1bb94e14abd65d6693c5484d98d1fef7b24a0fa3c8f8a9505bb3841061a0 +C = f7fbabea505fae888e9900d17fb3ed751510f651ebd9eb7e +P = 983f471f69c993c705 COUNT = 22 -K = b158921026d6b805d73205a048b1caecb6c3086086d0d11ad88142a192aee2f7 -C = 492e66f6dfa5e4b41972e0d504e67223 -P = 95c51af4 +K = 001ebe959566dd4c9df6bec741a6f99d60401f6125044e9d2ab184dc05fada58 +C = 412b0a7da2c372754eb8c11f19d05cac3eb76590fee2a371 +P = 934e44e1d17ce5a924 COUNT = 23 -K = 9c6bac37ad0c1a256cd7e3ec4556a7bdbdbc8c48b1445069a58b56e2fc99a76e -C = 9fa6cc77846ab3991d30c177d1585ab9 -P = ab1ab5d1 +K = 8b71cb1ea99b70ee9b9c5150c43c07deec67f095be88850e269564512e49f433 +C = 671fd71d963fdf87816fcd3dfeaab0a2b84b2ad8ad22ca5d +P = ed50292c46df128470 COUNT = 24 -K = 585e35a1676a1de220632b250e8ffc5c207295b5c41dbb6d7f3ea4e6fd33bfe1 -C = ad742b7e145362e4e4bc49deb9890466 -P = 2ee94d0b +K = 3594853fa3628d283a28d900d2f7d54478d4cd49e380072309258eabb4f14bf4 +C = 43e41d5f492db87cbaa4d82cb66519dec3ea17d6b17dec20 +P = d18e1d367931917cc0 COUNT = 25 -K = 3a8483c8b8e08e2a63e8ccf8d5b722241e0a63e80249a59e6774cf9db8659a7f -C = e6e800cc6bbb9f13c16201bd3367c57f -P = dfcfc631 +K = 1ae51f4332a040a878d77e7daa8f8e0f7afb34dc24e37d263bcecfa9241cc2d8 +C = e7795aaf724c65edbcebef276901dd266be4cf9d61f6db42 +P = 7c1c5df1ee2ad787ae COUNT = 26 -K = 7146ab526555f03b031a61f682e4665a2a82b2de7bb60cdc18f680e2d72bf480 -C = 488e6133cebb107ded9689b4f08d441e -P = 8621492b +K = 2203b77e4a6d98a8ff984f05a029ad5afcca5517ee040e39a3f155f21c617377 +C = fb248e752dbc5ad401b2a6018c7fbb91e30621b322dee6d9 +FAIL COUNT = 27 -K = c4725cb687aa7e0eb3237647f4f91ac65f4430f79ad4d4581374b9e9be1bb265 -C = ea7aa62305f4f5a1337e2c0605db3f17 -P = ccaae197 +K = 031847de89a448cd0412e505f4d4481ec2be140f55b9a08d68338b34bfa3e255 +C = 8263d8c70c611b5d39bea81a2c4d27a1823528f523cc8031 +P = fc2eeb334d61181c07 COUNT = 28 -K = 8b523df9efefa5ee2271ac2b49db6370f64252de8cdb3b3f31f16e659e40a004 -C = c10241d802d90a623e58e552f20ffc6d -FAIL +K = 957684b6a00f1575c43dd38a9c0f8ed4d85a94ffc67c40ce8340ce9369edb050 +C = 3a2a74a3c914083585a09239411f4119fcc38bca583c9c83 +P = 97ab2b19cb84114072 COUNT = 29 -K = 750e19ba3d2c7e5a875fcd36e8dd4b814f58e26d3aa066fecc5497d2e9309c5d -C = 0ddd062cd1e2ca36944f34abafd1ce73 -P = 33ab39e9 +K = fce9122905dfb0a4d3fbf3b192186422690c9610978126a3799166c26032abd5 +C = 80667e986944bee9470dc1a989ba16537386e21ac3a13285 +P = 7c3a71d33b241fe319 COUNT = 30 -K = ed2a4ab40a4b563fa189e3a6e81b5ff07f80d0aaadf46f6f337392b4dd0818c9 -C = e2197a02c07eff36fea574895ba6f609 -FAIL +K = f034ab4264ff655fa64049c5fd04b2db884198f9263b31529118d022a6e7391e +C = fff9f9db9b7016f937367c99f8e0df750b157861c18baaf2 +P = e44dbf38149eb1105a COUNT = 31 -K = df5b3d607fa5d8d9c06123ae4b0af49cfd05e6888b1ab3e96ca3b28d27df0b2e -C = 8301717b8242c53f996c529ebd7d72ca -P = 1b2cfc57 +K = 5cbb73b986379e1e99d3f71e0f52eec6abfaca9e4d37f7a0f005f0225931044f +C = 85136698cc14b857113ce8e6a69bace5767bcd6c119b2f0e +FAIL COUNT = 32 -K = cba1f5336846c77cfcc521b9b340fdabdee1d82dff3b722fbc7dccd2cfd2c27a -C = b7358cb5c6ba38028d3fbde48c229cf3 -P = a74aba73 +K = ab195093c3a8753c01f86b9cb5d2804bf4907d8796377d19554f8b343812a984 +C = 7eab4ae013e886602e8dc802a28c3b9969339ebe8b954674 +P = ee795c2aabbfd760d1 COUNT = 33 -K = 76c63eb38e7ac3be3b7c2f52266e6de3bc823217e282f26433cfd77e47e408ea -C = 2e7e56d8ba5475155d222bca7c6a94ac -P = ad31e833 +K = 1d210aaad5650a1ac1741d5c559a315761fa1c65fc94e9479547fdfa3623a2e6 +C = 110ceffc973f274ebd6362bbc96189e3555a4899c3c73f02 +P = c7a312ddb1af9aa103 COUNT = 34 -K = 4a19bcd4d2b6d5f6d2c0dce3f572175035323fdbe6359570dfbe6de64fa21fb3 -C = a7ee15c91386c901c58f3f35a1820706 -P = 5d45fb26 +K = 7287700a448c3e1d2c7faae4ed50cf99f9c86b3976655418a45b3548baab5105 +C = 0593d454327dd7a37f799c2107963780b567691fd8a513e2 +P = d034251aaa5e3a1622 COUNT = 35 -K = fbcd7596cf356acb048911f7920c78c8ee94716ff0b9d868f67e8a5af5361595 -C = 87227ad0f123db484c20c5876a8772cb -P = 71100b4d +K = ce95f35d962e9a786573a860774605c0409a36371d7841a66b5066be70430039 +C = b0bc57f12410d1f87eb4249c6a244b6b395e289117d98d43 +P = da3cf914a1a3d262b8 COUNT = 36 -K = fdfe945a91cae5c2da51dd965acf384feb936ba0d4fd9b1fd66f734f6768f717 -C = d6bb1e615f74b65167018aa42bd7af22 -P = fcd7f8aa +K = 560f4982e7faab1bf1b2408577130ffe00bdaf751ec949bb4b2b5c2d4b8d2749 +C = 791fc942bdacc1afcdc82ea27c446f2670d5d820ea6b1c18 +FAIL COUNT = 37 -K = 62d04da826fe1c9096db26dcb9c6b3a7280a1fd25425ec7d3ec6b1ad78f0e494 -C = 0f11a7a90c24da0affe5085920026081 -P = 83ea62c5 +K = f5b056130c06b28def76dce5ee04c878fc026af37d6252f8bdcad77c05a70b68 +C = 97562038070f9024766bbb0684694724942f4f33f4fd2c92 +P = 1eb1e63c6d28636dcd COUNT = 38 -K = 4cb4a42ea97df9fc953476f9f2365365254071e0e5571171be935ed8caaf1074 -C = 57f7e4e5793fbd0a3c345dd80f9ac656 -FAIL +K = d23794e435cc102ca9ecca8942c1f7b9bc07268d996b143f724fe3153d4d329e +C = bead5234bf759a36dae1fdd59bcef87e568107a3a84e63eb +P = 03ac0c71d966017f85 COUNT = 39 -K = 828458887c9a7c26d14062b83f3faf09fe7aa935e5661ee464a15acafc2c75ca -C = d0b66049428d581be138badfe32d9461 -P = 4ef2d468 +K = 5f8dbfdae744fb54a87527cc556cca415ce1397cfdb85335c3c0afab8b9d4b08 +C = 672f67c7868ed2e53748a9a63d554227d6f3c7ca89289a86 +P = 04f82b8bc45b1de465 COUNT = 40 -K = 225b50a4f04ffe1e1c54b68975658382a66cd255ac73f8cc0150e168b8fb5b2f -C = e91ec9de01b6c732ed148ae4ec09023a -FAIL +K = d23abaf5ac3848a78948b6fb50bc03431e5768b3f04c79997deb93eb58f69dc6 +C = 3623bde3629c672501f70d65d7fa0dcd6dbbd0998db65c03 +P = 5c33be19842153c783 COUNT = 41 -K = d068df8e6eef4d9e66086be5375ea8d9343e512a6d3cdf73aa0fc1159c21b112 -C = 55b59a2de9d840f9cbb7a6ffbb662570 -P = b1d0e80d +K = 210038d349bd4afe7dfd1bd3babb572f05bcd4102fa08558f97c446fd84c6396 +C = 923b759676119a1bc5afbd4369c5980baf3726ef35fca826 +P = cddb0a70594c3c05b7 COUNT = 42 -K = 8c8befaade076947155add2ea096dc4c0dbab5dccbaef369bc85315805bf351f -C = 482929abf5f7fa239d5c3905ac505130 -P = 1324a07b +K = 28ac02b34be6b1636e20d1e758f57294f3cc5d15360988347ceb529767474a9d +C = ed7a3410157f68dff6b49e3a3a5fddd8290a1bc54f3bc29a +P = 25f43677c9aef09ea4 COUNT = 43 -K = 02d58a2396167015d11b65d2f442b7b72aa4af52e71009658db6d146caa64a74 -C = ad4a4214747bc5f80b2d3b337e7d60ea -P = d5f1b32d +K = fed3fb4a4ecdb387c9c2c09d8566e3659f59462f157787456a8bb111d8297294 +C = 6a6149cd6ba8b98c0b5af09d3aadf0740835a0b364f04659 +P = f8383b300a380514c5 COUNT = 44 -K = a7b24581429a340794d1fba6c860cfa17618888bb0c8459aea8449a452343d36 -C = ceb3c7d66748cffe64b54d6c59eca301 -P = 23aedb5c +K = 3899dbdbad2d79cd5e01284de2ba48bdfac0b600c9d5b056fd11b629bb25d98b +C = 9fc83786264efbd740e75bbf7dab4035e2049cb03e8a48ed +FAIL COUNT = 45 -K = 891891e49255656efa9b656336d3a49dec0a362a3963c3f6313d4a8e8c60ed54 -C = be6f54b8737edac4ed55b1a9ff2461e7 -FAIL +K = f7cb887b1c1e1eed7e6507285a08b7810ef1fece2a37ed96f9da21166311bbc0 +C = 60029083796f99c92d1b80eeacef68c95a989fc74e58b00f +P = 422315403727354024 COUNT = 46 -K = ad4d7c5303defc5e67ee533b96f43796c5d40b284b323a8167e4ea5274543af0 -C = 6bde112ecaa5b3d555cb1af2b5399f18 -P = 80b06044 +K = b15c0c04269afcaa6128ea475ff5ed0cad06792eae2aab406360dfd9f23c852e +C = f39b856712fc6c9791706e0cf18298574cd67d6df254f3ab +P = 924ab44843d572e790 COUNT = 47 -K = a62d89f5bd865ceb5e3d21efc408b9410ec7f41bf35d4bf4a8b343079e0e2fb7 -C = 93f8f87b88faf5361e0132b693232b0a -P = bc05aa84 +K = c1243cf3ddebe30ea8b7305d3245d685037457b202cd9037037a44440ce3316d +C = 65b455b67eb19a96d1112829bcbb4591d1bbf3a41834dc9c +P = 4ec1e9b9f72b78138b COUNT = 48 -K = ed54e029ecc4c7c95be2ef9a6816d93280d38df1763bd04f8bb403996a0e16a5 -C = 38aa41be2bf093478beac548ece6aa9d -P = dbe38fe8 +K = 8344ed6166f7887b6072ad7bdb850ab37d9db76e6e7621e825558401f4159869 +C = 4e2aac8cf95f3681b3a71016db86a96bd3c53bef7aa0180f +P = def4be9e5584cc0488 COUNT = 49 -K = fe80c147ecddf0d9328c1ab9000c503f6d218081a05962f4088a382575589701 -C = fe35a7c0117722b685379d5c2b9a181c -P = 27652a16 +K = b3d70f8136f78508866a9bc672b18d0cf5baedc2122cd23ed2f8ce475541783f +C = 1e66c34c542fa0e8933f369b3430e50a5b3b6b02a1c603d5 +FAIL COUNT = 50 -K = a5dd84ccbe6c541541a7ef7f66c826db2532509956604a600835f26314fa6521 -C = 65f5f349db218b6d75f17f5e99b21f06 -P = dc4c8b8a +K = 1ec0b4465fdedacdcfe42c5844a217187982de1fb44b0d8ed853598e2f8f4787 +C = 610fd4763a1d70d46fbbd9af0eabb8dd11b4e17e359ee496 +P = a63d166377e07d5a78 COUNT = 51 -K = fbbc68714fbe1a4c10f8167262f4753a2dc0371c040ffbdf40344c03dc03330e -C = 9257ee6b86cde1423aced11ef74c2569 -P = 97156a84 +K = 8de8bec04faddcf6567a36ce5815ebb037d2db6a3c4144e77a876fe6986ee5a2 +C = e2dd2938ca49054305d7e4f16fe54988867edecf30c09d51 +FAIL COUNT = 52 -K = 5b816572a04657ed555c1fb54d0644fafcf83e8267a046b7e00b4a5298605181 -C = 915cecaa5690db56143710521bb72d07 -FAIL +K = 68448c5c283b77af77b12cfdbea26bffc40c394b53aceefdfdcd24c1642852ff +C = be3f731ba6031e460a4d07e632ed8844a32d2da2f3d3c510 +P = 1da87902ae863664f0 COUNT = 53 -K = 13110d217446e8b41b82e808990e86a3c9b14067088f2c1b91cd1c1911904a3f -C = 3cdfb0567728309107764ad15348bde5 -P = 2ac39b6f +K = f610918a8269b4f71ce945c2ceeb42e09cf66a0091abf5628a6c542b51f574e0 +C = 65a9b2691e7a6207b23a1623b0c1846fb6f5a88707a05b62 +P = bd2e5ad10ffa1298d7 COUNT = 54 -K = 075ad424452728c3eacb8ef423585ca5ddf23d73b61af6b2a70bcd7471097756 -C = ff1605d2f524a82486cc3b344f7a6f80 -P = 305c1ffe +K = 061b83dbf5ee842a7a205ac6d01a40e62a116eb6c02ba3c140c933302e19c11d +C = 73488707c8659119153a979f6c817476ae6cb9aaeee93f5c +P = 46d708d3d7009394c6 COUNT = 55 -K = 8acf265d98f8353cb827ecce53db5a8c62182f0271d39d3cb90c6e5979e8cfbf -C = 88a28cac4a15b6db82ccaa2980ce1aa0 -P = 8bbd23cd +K = 9674ec9e72dd5e38036fb34bfd15f5f2e29513228838b514afc57178fe3fc97c +C = fd9cb7dc938fb020dfa06c6c050b0956843b9675145b0dea +P = 385af942507a098187 COUNT = 56 -K = a4be9c28937d8dcfbd30f2795157f1e2ccb25ce2e84bdc97f8d862110c12cc6f -C = 2764f94f2c8e1895bb6de78ba866c10f -FAIL +K = e41ba0b6cce6d209900ecc92195491d19d82ce5e89883a763650bed21a60b530 +C = 18cf2da169a595ba961368b6d25f7a7044f11471b0b5cdf1 +P = f0ec5b254e4c050374 COUNT = 57 -K = 5e67475cb693b8c4373756ac9545af8b348b9ee17c45a6259da37dfb83bda793 -C = 33e7bcdb5c55fce64e7c277e899cb741 -P = cfa79c81 +K = f51e4be6400bdc0ac1701b914617d0b8f3622e6bef01a08710bb79c9aa3251f5 +C = f74c986f23475ab6c6dbecf842acc0838ea2f8ff58469c4a +FAIL COUNT = 58 -K = e0fa2df4dfdc8597e2955990f7c872d462d9b10cbc82a252763e3be39797a67a -C = aa748f1a3b27ff8fd56e472b8d94d55e -P = 86e7339e +K = e8e6a59fca515807bb318aeb7757d761cde6950d78093baf109fcfdfb6b5fb5e +C = 7ca18140bd6c82bc5459339b2cb310b623e90f5ba35c3c5e +P = 5b09b5a142ee743ea2 COUNT = 59 -K = c9c7ab28fca2219fb16d4f82192cbb67357cbb25f44d3950834175a1de6c05b6 -C = 9cac0d3f30a2bd98bda5e54819828776 -P = dce17edb +K = 7597c3644a2ebdff8e3159e69e80c17152359eb9320f83462b5930cbc521fbad +C = daeca4abbfe4e165b2fc2f1096c238ec9f8bd81805184823 +P = 329bd91a7b5b691e6f COUNT = 60 -K = e85201ddf11df05b011a19b2231e462b86b451c074cbe914e2cc4ef8548300aa -C = c842b62e6eacc7b08518b9c4ccba00fa -P = 7725afd8 +K = 6483e7ddd7e229b1adf14db3b0fd470ae9f8ec1b8458a270d63a4b2fcc383741 +C = 55b0fe11524396d67f277d07e7c26aa8e20aee461bc88d92 +P = 30bf4cd941c8c31644 COUNT = 61 -K = 4808e7513de42a0af57268131d37be1d38be8f7f8f897b8b457c73acc4dedd6d -C = 4b5dfe0033b7fb3fe72de855cc50ff62 -P = 81765138 +K = 0d143ecdc221ff6a794f0bdff810e75a24306e93a3d9dccb09d4c2b9bc4e7d17 +C = 55f2ec7794959021b48333d162fa6651265bd52ee96cc740 +FAIL COUNT = 62 -K = 859bbdf685d942a146fe2d405d948a9cf7589cb8ad61b143120ecc9d720380ae -C = f3c778052e61ecc161866236d1bcc229 -FAIL +K = aa8b3755b3c8abddbd2afd4fdf55c192fe893186af8bf8d7406118153265ba37 +C = 49ce8f525e7db968433405430f0634690c36ca26a5975b3e +P = 8eadbbb30954ba927a COUNT = 63 -K = 609829ea59ecc9e3db91db9072eb7948823f82786fd002c79e06502a60b84e3e -C = 4cba00588c82987916dd4eec08123abb -P = 2ae3f242 +K = 48eb8df0bffce1bef0bdeb3208846de33d12f67e548410d76b7466e7b7ec6fc1 +C = cfe65a23bcfea20c30caac00068e89ea71856c574442c951 +P = 1d80d271d76842d95a COUNT = 64 -K = 6038603a41f588ebfc7a057940b0c808aa03cf9c6113dfb2ad443b65bcdc19a5 -C = 9db6d4df8c0993d550f465d1e13fff5b -P = 6978d096 +K = 40019583c5aa1e829f8225e7e4f2d9dc549522bb5dfb23b4237a0317caa9fc75 +C = 5b26559d4ef2e74b77eead4d0130e4c76435f1a2a0fa7037 +P = 5c7c771599ee91edee COUNT = 65 -K = d22e20070ef365b18fb7e8c08698076d268b7d0ab36bd6deb3c4b1fd606f18c4 -C = 3dd7ee77fe2c7d122379c12f53549cd7 -P = 0c3c0ba5 +K = d25ef2f1e1ae442f82c6703ac8d3b084697ad40e4495cc72eb686fb64bf05d9e +C = 3eb04cab85393bf8a45f578690e494e0f09ba26720e65c71 +P = 1b5359900539c7e371 COUNT = 66 -K = fed82bf3ccb55d56a86be2bdda11a909a5488bec575d23834b6b45fcdd644856 -C = 6474372d4961b8b607895c5d755ad366 -P = 71ab663a +K = ce38d8d7c645702b3f149dfdbf3a1c6f454063456ae6ed4a6c012f2b7b2ed482 +C = 473bf5d439019c2aae47bec9ef7bdb3d9588d923c863ec36 +P = 1da95f21d7468ee188 COUNT = 67 -K = 0341f22ef35908910aaebe699204483277d72873777d2278a531051fdf1f47e6 -C = 67a639b7d3eabb1488b0cabb6a71255f -P = d17714ee +K = c2fd543933da87d5850dde2efd4f2f8ed9d54c96bc9e5ef045eea81a8ac8d8b2 +C = a8290bd7bfc4404c3563511b668a9322a4263a8103c5bbb2 +P = 20972b35301b1098f6 COUNT = 68 -K = d97be64f4306d08ca880bcd0be336ba702a02e9cd5a06d3ff70ea1b28788bb75 -C = bf2c5d78d5783b809f6d0fd5a237685e +K = 9a2fc0e557f047686abae5b868d59381433be8ec133e764bd9354134170cbd6d +C = ce3b25f0a1a301f9b33ba3f71330762220cd4f399a8fd7de FAIL COUNT = 69 -K = 608eb78e075af464cf84347bc13cbea37bfc4d1076f7de3e8c26581ae5c7ed5a -C = 6313490db3faa63c1ebfe6c7150a03e4 -P = a71ce16a +K = 000f6eac1cb0e95052b76c2d07493d5cebaa126dd14123b3bb95bcd1a23e6643 +C = f871dfb2f6e168829b9489a1af9ccdfe8fd2fbdbe34c6b8f +P = 915277585060496502 COUNT = 70 -K = 78dd3e3c30abb4383276352c517d9a58463ced044df8e4e694e0334f21100263 -C = 78ae5c9fd11e8cf2ecab663a490adfef -P = 60c44163 +K = 6ca81f298d1bdbf2490c50e84d1ab26b90f8ed29386579c059dbf81db3043cb6 +C = 33104072a087a2c5dd5150b1953487ed0b988864b2480d78 +P = 86e0f51c3bac2c255d COUNT = 71 -K = 4857dd4f0c7567f8b2cac92922c41328c838b3781049fac2c67977576e9b13b0 -C = b1c1f15a53654be9fef57f9398ec4a62 -P = 4b58df56 +K = 5085ee8d5214152933c765596df8758b20fd0243b614be7749b9c83fd2350c60 +C = baff2969983f0e1e21e1ee09fcddb6dd9ae3c7505c732adb +P = b3cb7f56ad5aedd3da COUNT = 72 -K = 7738e9f5a43cbbfa8bab510302a1ab2ecec1bc37b8b66adade852f6682576556 -C = 14b37bb8c6802aff57b31fa649813c57 -P = cb7b5e41 +K = 8bb96a3f344beabb3344c9ab0bf14803d413ef09537a3e121672d07d1f7a2d41 +C = 4a1f3037a34d3035dba4a5a7d2157adaa4b03d8b556d8523 +FAIL COUNT = 73 -K = f55d2e7edaf2bc12d1fcaca73da3a0e40024ab1cfca21d21ff8a91573fd95ef1 -C = bac15e82052f557f7badc344f3c1af5a -FAIL +K = 148dcf584120b0684cb553e9243eace94321b7bdfed54ba45500f3cab521199e +C = bbe5a69fb13eb024bf0c5a00573cb2df5c4a3617399abd8f +P = 64ab8fe51114dfd35f COUNT = 74 -K = f268266c521b6cdddc281f4f34984cf1de83d8cd552fb953fd713e04212b43a3 -C = 52c0f35c760eb3a0fff250d1a6c249dd -P = d158f984 +K = bb789388cdca3015cb25f7d266cecc2c12b0a367b54b8f026e89939adbc63873 +C = cf186f9401b557e8bcbf01ca5fcec9203166fbc7c0ab74c2 +P = 922d7526f70f8fb6eb COUNT = 75 -K = 252b8bc8135bed1bd44e6d0b47c0e00094d7a0d7515a88098fe0739d743329e1 -C = 7588accd07067d41a22f9c059af4d396 -P = 8e8f24d7 +K = c2059262904a0f99f4e7fe7da9667853639ffdf9c7496860ed3eac9ae85fe146 +C = 09cb3a58c6dca29cb838591145e558170eec5500a532caf1 +FAIL COUNT = 76 -K = 211a49344cb5ce7fbd0d04d89e20db8723e131380cdf9274064bf143ebdb8706 -C = 6f83459cdf30c579cd80e431525a9b81 -FAIL +K = c3a2feefb76de331aa47c11c3ae52cc9f4e80f82acbfc5b79487be6cebc7f316 +C = a02fe909dfabf8e1c8d0045cfa284e210b5eb207575da4ec +P = 649d66760227c6de40 COUNT = 77 -K = 1ce96d0bacc4189d9df3072e5802ce7c2d64f1d69c069e5d607f3330919ab2b3 -C = 052ad9e3484e0f48791c5527daaf359b -P = a4346f46 +K = b62333ce3c6dc6dd2fe0703c54fe529f5897e93037402a423f9c8d9165b31cc8 +C = 9d138eec3c0306b3bc6c9f0971e7af4cf0a69dab8e818155 +P = 1cbbb5f7337b13747a COUNT = 78 -K = e06bd86d62f643e9b6fd126f72c8d51e813a8ab8a980e7a7d0a7afe1f6b85629 -C = 6aeb15a0ee0e41a842257189da31d88f -P = f860216e +K = 36f5f1d82445e49d2f9a922b43d053128cafbdcf2c0bc260ec9282cc9631094b +C = 4aefa1a26735515f0a0f6783b9b9e4332277b4bf4849fc64 +P = 7d195b60bcf64863d0 COUNT = 79 -K = 11c1b45bacd4c90fb1dd4ded64fcbfbe1210f011967ca96ea666af8223279002 -C = d07e2a86356ca9934699138f3a58fca8 -P = 36fac1ea +K = ef7b42ad188970fee5783e44442f83d25284c00758c53db079c932a75331fc09 +C = 84b4e64eedcab3a54e26762e04c74c63ff74ab898986be7e +P = 3252a13b0f073aa77f COUNT = 80 -K = f0389a957a165b051fa55f2fcc8f69d3c00f8fa196c8a18685807fe7aa03cdb5 -C = d1b69cbba7af586574be90d81da50bf3 -P = d9aa3ce3 +K = 3c6b6cb56323ef9103a7a2bb353bfca4131cec38e10c6d6d5e9bc12ad742b83f +C = 256ecd8470701d98c428a1d014b1e6099f1035b8df249b80 +FAIL COUNT = 81 -K = e554d75236c843880cc85ed26a5149f70f7b266d1e67c73270eea81975464e04 -C = 1545604689d63ea4d6e85e3c36aa33e4 -P = 53fd08dd +K = cff0fb4ccf8b38da5543c6f2d17e7bf28c7eff9d3cd1b2f260be16cb6106b9aa +C = 9bb887991ab7c181cf3ad0b4c2a04b1d35340e6e7646f0a9 +P = 8ab9422585cec8e42c COUNT = 82 -K = 20ba231734b49112f188b726b8c7e69e6a59fc2e1cc66900b72528906218d5fd -C = 1d6fb506b7152f3847664a3d0a325886 -P = e4ada43b +K = 1e339af2f55f5bc888cda47d680910fd585997363e06694b26329839a7023166 +C = 8217349689451bdde4c1438730c035db2b1716fa0d30d96e +P = 867593214b2a6e2ea4 COUNT = 83 -K = 6ede030831d2a091334d3cc85cd5826e9c9d0434ab3717e1e74d2686e9a47773 -C = 5082e0a933115f87755b0b9f2f64558b -P = 83b614ac +K = 5d839e8d6a8fccd6b0de777053006673e2d688561ca89efdf5d7fb7e10593938 +C = 8889e4258003abc3c1ea45e4dd29996f6796ecd79ef4a9b2 +P = 5d8ade1cbb14748a33 COUNT = 84 -K = 3a0ab699276ad44fe3db52983d783ad13b8b053bc9019fea833c712cece7106c -C = 9e6f52a0401b41a0d440334c5eaab5de -FAIL +K = 089710b3f86969dee9290ab4c96fc38627aba3365040560b79a4c73fa5c187b7 +C = a9e31b61417658f8eaac7111dea3adb6058b3ea961247479 +P = cd97459265c161bf8c COUNT = 85 -K = 673c15630ff7240d2ace9dc579a0bd2edbed43df24d260e90db82e0f6af2ad57 -C = 8b56c6c9eb46b003b94fbf6aa99996a6 -P = 9786363f +K = c87eae7b50b542a481b240892f4b1ede0fd86a30a41fbd059ac5c6ebb5a7a768 +C = 299a7e6eaa55c8ba55f9d079df682e9e57d391fa0bf866fb +P = 0f24d5748954674b85 COUNT = 86 -K = 9b8e8fdd832eb588c284fbc8debd5e56fe79080fbe866688be52782fe23e2da9 -C = f9598fdd5af11e0f01ef1d24c6341378 -P = 7205afb9 +K = 27ed56f82a20b8bba1c0e1636d0347fbc23412ffc1dc56e0d04726535e68302b +C = 6b818c043f1f234812c0aa8539157e45b3bfeac60408ebde +FAIL COUNT = 87 -K = 6af29d72498db69617962833437354794ff3f2be2cd5f331ab89b7341436b8f8 -C = f538d63954483dd567c6d4ecdd4c6261 -P = a4e98c06 +K = 974ed86c3f4ed33ac38e388403715634bd95167753fc36a9d0c7bbed6743f1fa +C = e1421f4929af6ea920ef97a22de5974183b41df48d145b46 +P = acb39a6b845058e0a8 COUNT = 88 -K = a6eafe1d5c411ccc489715cf9abdac7b196d80f0f2ef8b2fa0a3559b995f94cd -C = 77804997039c26568278421fbb57870f -P = 697275a4 +K = d15f7b782d49230da7dcbd130e65c057e4c4d241c031d51a803cfb61669fe91f +C = d5816e40be1b9a77013749d1c082a3c48ebcc87c2ad830f5 +P = 6bd7040b7b76ee73d8 COUNT = 89 -K = 15c7a6479e7316b3ed82561d6c9ea1dab54770a315d06db1fca1bef0917fda8f -C = eda573ee8d1ca9c1eae2529d680935f9 -FAIL +K = ee26cd75446680dfdd89a16ede3d1228b0f5f309b31ec0044526acaccf2b8582 +C = 698876cdb20321ea6d0caccbc9a45c16381f2e61fe8d5804 +P = b501f0e4e31a7499c3 COUNT = 90 -K = 7cb2249a6774c07b6b1b54dadc4205b382499e5b6d4d17af6b92038ce04ce674 -C = 08ad89d11865e658f6b07a270bfdca29 -P = bb554d5e +K = 1976af2bcd25dc7bb40a85979ab16c088a8d2e481768f3413819205f87af519d +C = 907b2de2c6e1d2de853719610a5428401d1018f5bd055623 +FAIL COUNT = 91 -K = 660e00692184e2e272778c98bc000397f4b23f46c63901399d7b50a9c8628f7a -C = fc9e12326702abc70077df4476961187 -FAIL +K = 6c262a21663ce9615b1d22650e2e0b41cdf38a0c8eb00c46e4719ee1ffb99105 +C = 33820b0ed626a841c1444fd5f0301330fcff2255977da372 +P = 408e9725eb119b5eb1 COUNT = 92 -K = 549303e9ce14bc52f2e7e320a42151d39ae048190a9557495c7fb9af4bb1ecf9 -C = 6358ea08468da54ba0f16b51e934e2b8 -P = f08b1f6c +K = b0c9a422ec9d450a241fd4a9608b9ce694b25b759c6541b8e67d14c4f208e0c3 +C = b7080086ea5cc24f2a62f756478467fb0afe0df8690a8a6a +P = 2b3a29f16404b885df COUNT = 93 -K = 4523d3a0eee156854cbf69c86cbcdc8a62330f91f58484d41e066604d929d231 -C = 5c7a5ecce6059d95ddec42a2ae3f46a3 -P = d47aaa63 +K = f727f300c574ebb91ffaba6a4f2d3ac3dd245bacc10727cec702c36f303b94b8 +C = 3420b622ecfb2c2fd086d1888bb5b89068bd38adee76038b +P = 6f82f5fdba452868a7 COUNT = 94 -K = c6e37131bbe8f3b3b85847f215a5395c5566cded0e631b8d26fa28217056c80a -C = 45ccfa968ba41b0d8747012ce12292fe -P = 70eed7ab +K = f2a4376a2c960a2f738d238dfa191f8178b5d8343d6ae0d53209da9531bb7778 +C = 563e6e9de686d69ccacbb179227ae08e902c638493df4b58 +P = 3b7952d7a1188fa9f2 COUNT = 95 -K = dfda63465826a6c4ff7606eb12828204d0aed87498c255011d82538d10b287b3 -C = d706369c8c317bb90d40880105730c4f -P = abb4cf51 +K = df93a1af9a4b850d4e655c325a50f10ecd1fdfb48ed6b2de84227f74a606d4eb +C = 1e59cc97487d2c4969c8131ed5c30c58bd2cdee48247f4f1 +P = 7e7792a89e82e62e87 COUNT = 96 -K = 2ca82849e1277beb517b54683c4b09f12f464b205a4cf6a3e84fb37579cabf67 -C = 1d47a4890bc23e7458da66564a940c5b -P = 2ddc4c50 +K = ae4c91358f106844073fe86548fd61801aa73ffbefd3eeed87ac20fae7adb3f1 +C = 482ac72a9471b6962c0c7823af753388acfdb4aed3bf2f44 +FAIL COUNT = 97 -K = 40a0e278e08bda5e00bc8f6995c47900c739ef4ad2778fa641ad48a1dad88c91 -C = 4c1ea36d18853ff0ff36501fb2991613 -P = d5fe47ee +K = 383f8e391c1cd8c7397241df97168002b1d74e2c7c9c449342a29984db9e4714 +C = 93fd1c62d34572faee632a9ced14dc3dbd6868f2d1d0311e +P = d54424d4173c4025e2 COUNT = 98 -K = 8cce1f147f8f7b27653ce12d3a5903eaa303787a610c5a46e26f1ec95e3b28c7 -C = 7b5f34f978db9536c8af0a43f7d46fd1 -P = a04e8de4 +K = ad4f41b8e1c84d1eaef711213380c999fd0463eba737d988160b2636a4da0d64 +C = a278b8d09aec290aaaab3ce4f4ec8bb1199a99dd3b0d435b +P = e135257e1fb10022f1 COUNT = 99 -K = ec48123d3efe63c19b82a6d283d57f70ccbd3b341afe8cf87e37ab8667259496 -C = 0b6d1e770969928e6e9293e742cdeebb -FAIL +K = 92e0e8036cc3917787100a07661f7e27bc9bea30326bb0599752587d8e6b1c18 +C = 7e3ebc61471e42977b4cf38be0a9d86af46fe71f6c6437b2 +P = 16d7af80d77dcea1af -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 44228c92a019bec2a1a36d34679b9e9d184e8f94a448d4390f7456ebc8c0cc8c -C = c7ce87d7153b9525574747f8ac4715acd6c0a333d116456c +K = 014932f8ce75a6454b49ca480b350c8f53a7c9d56a469430089923853eedd3bb +C = 5e4c6b7681be1f13a0dbca5345067803314dc47f8cfd3ffc0951720f4f681d270723fb8bb3f885e7 FAIL COUNT = 1 -K = 3ecee91305dc71b597ef48e82a671866b451538086b6995eeaab44d3ca8406c8 -C = 6b06ea2ad57df9d5486c96b62eb06eb4920c2a58a9b543db -P = d5e0b13196486da86390de14 +K = 6f3c651d3d74770f997ea12ef1dd41d607de0437d24004bc2e48af525b113413 +C = 56617a224df45c896707ff7f373c666aa9220614f2c8e9f5c141c9947e487877e6b51d307ed0ca54 +P = f0fa8cfef1e8fe83d8ece959df4ee73cd32506c40e41c31f96c4e4227e3cdf COUNT = 2 -K = a8ba52c0588d612f02c48e5dcc10d05c748a16be69eae2f31b8dd726738c233e -C = 35ffe52ba98e09693e49763ca92193048c71da02646173f8 -P = ca7f8a9d7fef948119df6d7e +K = ddec76efbee2a48d747bfb708e19d755de5ebba87bf7c538e774112e0f56b1c1 +C = 6dcbbf61cd815173a2123b49ff4c7cff745d769e8dd6035e44870f644456b21298ce8486749a11cd +P = a02f3479a234437d2e3cc9dbc66a939f1e2ee5b52d309a44c6b5ba3ce43c19 COUNT = 3 -K = 6463068fde4a8153f55a00bee2d6692257a02f9a4e955effa08441506142dbfb -C = 7f11ee985d40ed81b1a4c631d672858b56c23fca6d9c5384 -P = 821d0f29325a08f492c5a083 +K = c8e108bc011166fea3e742302dc273cfdd1c2795d237eb89b93599578bbfb1ed +C = 7d4a0658f1b2393b445b95000b103935385a451e92214063a9257436d80307d59f69c8f285c9dd63 +P = 67a7e48bedc3339641f230fc062d3ec9dcfc358bc0c66ad9a3e3295f40603a COUNT = 4 -K = 2f2aa841b236e787fc08a5fba2a184865769b7584a64376deb82459a3801c0bf -C = 98fc12668898f006d9680130fd3f830d0771513e1d9a396a -P = d5b732c9e0e39bf80da5d97b +K = 9cd316cc108ee8bbbb22a7a6104ffadc66820fdeb83ef3f541b15f994a0ade4c +C = 4437fb451b0fab4b9739ba50371b9a7110700a1d5c76b5a2453cf75ef7a095c2a64f4d3be7c569db +P = a2bd5ef1ccd38b2e703294880d6ad0fb37998854931ebdcfa1d6d676d01078 COUNT = 5 -K = bc5ee5286b62da6bdeaab52e248cc1b5bb98b77836a43aa166065a3a7a4e8d01 -C = cd7e07c5346a24320919ef3cb00fb1a73cf55f3b9969855b -FAIL +K = b8d13904950398fd583f831dbf5f59125d78fef64ac01f2342077bf9097b81e2 +C = 8287668ddcfe90f1e79bdedb3e9416fad5e5b1abd7f62b53af04973820b95c8211277ba982f8a5dd +P = 1de0df5727d251b3501195d8b2265586b3702ba8ad3e5ad7d2ac03ac4b9beb COUNT = 6 -K = 45883b452265f4e5d00277b9aefc2ae0d45b4aa63a06e672e66d0d34807b4ae4 -C = e30e59474867909375c6b6a188798a34545204155e74d2c8 -P = f0782f2eee782fbd7f98242e +K = d5e9ee7f9335829c0938b6301f12d3c9b67152797b83c4fed5f9446256fa0941 +C = e72041deecf848d948451a9d7f17915ff57eb8e75ecfb725607714288fafa57a6d7921f09a68488e +FAIL COUNT = 7 -K = 66d8e3b75e42ed453dfd93eb29addbe3a5ba8a0871deed4e0e703d005ad70b62 -C = e570c917b1b810661c0c0377247a606a78ceed01d9ffddb5 -P = e85258f0fc84b2c40617ed48 +K = 76af1cc92e85de32c2c475994b4b399ad40e4675483e7c56dd2cc6c3e0685498 +C = bb387287368d05ace8a7e01e67b06cbde74d3e57ee0a5048aea5a7a882e3b3352c91f1e6aaa79d3c +P = 313a20e0aebe8fed7c00dc85f45a816a3e44405354bb32006006ea6e38d03c COUNT = 8 -K = 00b7d2e235c7c02dc7eb1e8649b259e58f3b21c007ad33d994921cdd6e8c3e06 -C = 52a52f06f7662e87b5b279f0de0c33c79632f58cb28adab9 -P = 6bd100d57d77521f8da86df3 +K = ec091fbfacd840f331c237e00ee0f4e78b6007f6ca6671eae2e1984d8eeb1dd6 +C = 5eab031d59f51e1575bbf56238d797a279b36266331b6036d4586692a2c0ea1101cb8dc3801f021f +P = 0de9cdd97c28e627b1161904ee52f27d37fb0ddaec639ca48781a0601a11de COUNT = 9 -K = 03ecfa083467b34b3d6db4af605030b0ccf7c373133abe235afe5c5a71e867bd -C = de867ca913d390d9ff040153c2715a59e2037ad3d4bd9acb -P = 9e74fa65c4456db7c878f21d +K = b84dd644b2cd3a658de57bdc56015d04c5ec23a98ea1f5772526a6b98b195893 +C = 9ef52bdaacd92bb996a031af66dcc7fcbba389d0880121ff6623ebae964b8df9640009388b73da64 +P = 9b8aae65272d462b8ac54f6bcb6ee4d654798109f948c732dcf4022b7442c4 COUNT = 10 -K = 13ce9beaa0345d7604f7c2f7831503f8c4907b82d3b44f9dcaf1382245dca843 -C = da5ff6d2a785cbc88aede19362b5cdbb9c2c40916c5b0d1e -P = bf97df5695304ef40d5eb478 +K = 946eef79318c7e0a77e423205dece7072256d716cacc77bb350abf8ef754667c +C = aebfa0b674d5fd3cb8a37f4e58af46aa4ff67f41a736eb7531f703b018bc4bac9303dc779b599bd6 +P = a9beaa369d2a06e802dbb57de2f84cc486701ce459668a987fddb245e2f055 COUNT = 11 -K = 48ae3038ffca463641e165ca14365886352fbe3aeaf7a1920b78e32f99668fda -C = e06803573d1f18429127612c853c3faaac7b3c78321cb0aa -P = 126d9707f31709026437a0e4 +K = 1cc75eb0848bc00dceeba5e15f6bedecabba01e49b8e1e1c82090c425fbaa2ec +C = 364f8380008ed153ae8c59890cd56d35f6c104163112665348aba110c545a882bfb96ed39e4b844c +P = 3e729a68d2490c275ea6ce40630230b3efd6ac89277e32dd84fc6602fabaa9 COUNT = 12 -K = a0ff9c7a21acd5721e2b9763714495f0bbbce6ec90cf85be0b0eb1a77d24e1ed -C = 7fc89e2fd5dd4bc06fa8e155f1931c59537ecdd94e0a56b3 +K = c9ff449a5e136799c9ed4853505a01a01ac082252f5e0de170270753217213e5 +C = 0d39a9e49d26eb218b361445c8ecf7383afe07f3cdbb1831256e029cfc3012e5cbc52d369965b231 FAIL COUNT = 13 -K = f799f6242054753a6a299485e99d021c4a1bb4cb1c842469674f2b758db4a9f9 -C = b5ac2e0fa7decefabf5cbee7230bb0bb5f7a63b00c32fd68 -P = 9e3aa10d9591aae82bcf9618 +K = f2010bf51d7f31c8e72813cb225a219976ad18c11356bd506804a7d0d9577cfe +C = 6a63f05ae7add07939f2ad3bc069677c1c7f687460316d91cbd069e2ba01c3a98a952a8387e97a15 +P = 87ef3d6e61886dba844ab92a12542c700303c9416e694e447b6b6e31e2c502 COUNT = 14 -K = d240d34fe49b2e996c292f50e03048078b84dd1bc421b92f4c2a9b9ea9cc1b1e -C = 04b22a46352553005aa73e72c17aca84de5a2c0e35c62d51 -P = deb13ecef73e3083adcf7d02 +K = abc193763cf32a54c845907dbacabb50bfb6b5707071351d861eec78b306c479 +C = 931310aa4139b11343d34ce2bd4a973ddc528c1c561cabcafb0c3ec8edf544a9253dc77918230614 +P = f80d89f4716cd82c0656be7894e4c6acbfde99de252862d7481519ada1fa03 COUNT = 15 -K = 7df46da1667897697e65c017c1669172e1a02daeb48af8ac3718e07646c59f01 -C = 4787d35a3d98478804eec64cb0c95da0e73cc1889c0002ab -P = 5c5089259b0bf5967aa0afa1 +K = 4fb96311129e0e26bc0af8a792e17186a2fff407d3b9c69f05acf08fe64dac4d +C = fdd0af848ce16dd0149dade8f6f59d4da80311ea39671af0e92333b7ff90e130bae487babebffb0b +P = bfbd320c385f61c7c14627c53e2eb93405aec1a9a11a4641adcde1c1d3d132 COUNT = 16 -K = 124bebf1aa476fc1d69d43c2f4e6b179b5f549428429d5bc1b10517e1b7774ff -C = b043160f924293930afec390182257443a34c81e0e26adee -P = 36a8c266077b83face579e13 +K = 451a2c2b72dfa5100e020bea00e6af8ca8c596033e196fe3fa75966a1e20e732 +C = 367d91a0763c9e0644087e24bd76b0c82eb8116ce04990fed4fbc24c37e28836d1024be38f2cfa77 +FAIL COUNT = 17 -K = 8e8783d6eef2a8e7e8fe8261f0b2a2df96e6712d62acb28182abee8395623354 -C = 48b87b3b0e1b5b7c4b5e59afcb2af33e8e458daaa4e7cb54 -P = 5349dc463e631b9da27068f2 +K = d3e0908bd798102fa859c9588d15070f9acbb056f445cf2256f26b5f2e30cc51 +C = 480dc1754341f4b32209dee832bdad95427862238d65310904e8ec38b3b2d1459d9a42abc34b1164 +P = 9986f6deb0730148a61e1a5efe7ead4b7576abf29a931b4077889503e23305 COUNT = 18 -K = 5631c107d4793641f265a17f82ebe56c9b1fa1dbd7e2445e3eb94d6f6b3645c8 -C = a7826db91d3b07ba5a1a6a607cc2b0dc19dda2be152bf54f -P = b8b8879f9cf36920ead40274 +K = 02344b013dd0e8d3a180acd9882eee0c75c7de354cc394ae344b62201fea73b0 +C = 327553651b7e8755e030004d3ee40213d737763dc2d2b0c1e7a2dcc7222aa88a10384808d2af34bf +P = c57277d0492706996cc68cae918cd3a2db3a9189c36d8db36046c65c64173a COUNT = 19 -K = 7ea356bf0e105ee5db287c2d59d028ccd1fcbb874b46652498bb6a5cb1cef97a -C = 4bc1a3413ee8abcd5648ce8e43c605bfe5a2050ffe4ae23d -FAIL +K = c9a5dc175a456488991b4fe3783b823c9241d2cb34552ac7c4c425081a846300 +C = 1c2e9403bd3f1a395d750bcd946e0c89d24e58cabbcdb5d890762c0f670788d60fc5223ee1894d3a +P = 90356323598d94586025f4753cbade30d6cc13d6b4048493a4dbedcf6c08bf COUNT = 20 -K = 0b8da9615f201234492fa91532784620047e422da94e02066b99062a48c7d9d0 -C = ef1e9e3af64aaee4754f477ed9a324d81447bc072d8ef913 -P = be2a3439e0fe8125d4fe55ed +K = 8fe094a3634a252dfa849446ffda10d3e1355d216cc24b19400df626db275b5a +C = 96e3d0fa40219e82b796a295526b059bdb14b9f8d1fec772937179432179495f0f1396a181a55714 +FAIL COUNT = 21 -K = 4c8c0668e7459d94d0ceb887367495486052317cd7e7671e5fc222e28b084364 -C = 7e3c92d63b2024cbf7f11d2587f8a45fc9375c3b89068e33 -P = 4cee14c50e75d4981cd6f9e0 +K = b76f91b2988d398eaf7e85f9915e634afa06829b7fef245826deaf4652f0164a +C = 89a84876c624c7ae72334d4d47691bae61ec12c9ff3ca6a00325d7144cb556151a8b1a23bc4abcdd +P = 30bd239d1835de177b1e809ba4c055c4573459b7c10207666cebcb125f1d3e COUNT = 22 -K = 7aafc914fe9c3ac99e7a5e8ef803d7b228e692396a486a8e6bd287eb5bebf47c -C = 24a5723792582673ca99a49d7ba85d672ab4eb910f3219af -FAIL +K = 39b1a09fffe053f7edb7d77272d750646b66348b22a622c5ca667cd68f6e2a3b +C = 98762b723926c890186a3da885c19c4ceef412b02bd15ca6783c8fe9ccd8510b8b4bc8508ae6ef8b +P = 6e3b7593e28ab0b9cbc34a571ea3f06611a1a191f2a105d0dada75ec457015 COUNT = 23 -K = ac0b29e765ec4566033af71582e9c0e19f7a34a386873a346f2a59436c3b3930 -C = d30ebb4fca142b9feed1420144a76146bb074c901ab468d7 -P = 68f6023a78fb83c00b04064f +K = 271a0920ee5f52cc404f5833c011fb6aec906fc3d712dfe63de651cec4baafcf +C = b3d6fc00e539a1ba7db31d0301e472cdda85ec651f772559ee3bbf92f35a27a7bc517b8470986109 +P = c38e2d65f8ec37aa7a5555a4f5d80e9a9a2bf876ff60d4d65e67dd923890b2 COUNT = 24 -K = 10ac732b94ff9c1d0466235892a0973ab1e86c961c29997d24de8ad0ed98aa88 -C = c8cab882f26efae2fe59a13e7fedc9a740eab98d7330c014 -P = e42d088b59e5ba44c730dbfe +K = a99f4635f527e67aa577c31f20080ce011c6b62ee9f7c964b2e5792921710007 +C = 259149f558e7a3cab882aa9931fbf32b395e8bec30442458d293229818437bbf2592c432cd94c243 +P = 3a6e383016872dd9384a1bcdbc8b5a5a44b76bf00719ad9a7934ff5d30839d COUNT = 25 -K = fece332b8cf7cffaeef959ed53139e73d3a734c2db956689016e3ce0ee1c6851 -C = b67154df899bee8729168b2c81470b9f40c9f95dda2e3f11 -P = 32e3e5eef993fdf5e1f6ebb0 +K = c0f245941e10d6b21a9c12f8fbfb3942937bf532454d3a124b7b2a899b3bf9f2 +C = de0124a29a29bd8fbe1b8e9915108b601f1408bf681060e9e9011d9bc87dd391551143ce005012be +FAIL COUNT = 26 -K = 75c9086af0750022eb9b44cf1893a8eb3724c29613918a531e9403656b889e2b -C = 58bd8dcdd98d455ec914632f475c84d59918117670d10044 -P = 8c7cf79eb14665055bdc0f91 +K = e24eaeff5697875614e87989e815b90aa1ad2bdc3ab76038b20cc80b593fbbf6 +C = 3a8d84dcd22a058b1e90198950e5d675be2efe9f570f8cc2638f127ddc6e7fa3a41c828ca81724a3 +P = 4e9d36f7ecaf3332ac62d95f73bea1a024b6d0666829beba1860ece8782381 COUNT = 27 -K = 9e51030b8678305051f02f9731611240d5c1c6dd64e27b78fd881e186c1fbbb2 -C = a86e939228898f70f49e9f4b619fef8e4241359dde89bd14 -P = 389c428a5828c348eba8181d +K = 639c5c3d9172c9d3e0cd6106d742230dc14efbc088cb095e9130658eccd4033f +C = 349727b8939aa7d712c27aad5c951452b88f6d58dff3134f2152866e473539b76cf64bbf261fd65d +P = 0452d66aa01feff46facef4e26ebdbf485b4e586b1c80f5c5eb1de95dcbe3d COUNT = 28 -K = 189c5235392365a42bc144464d67378fbdca177da61dd6f823cd7ac663c54082 -C = 7ace5b0afbb21efc4b9065d311456e97bf2d3285b4a7f5fc -FAIL +K = d5f18c7dcc4e4e5e9318ee8dcda9afbaa2e51f4b0889976f7293e0f87fe10d41 +C = c94d3bef67da2216215392c221b738bf76401200596858153078151a7f581522df9d99352b948ca2 +P = 4ca10ba4a997a2207df2881efb4de872bcfe7072e6d7c81a35fd8cfde4a71f COUNT = 29 -K = e84618c575c30a12f2bbce9e9364b4341bb52baf5e3c1e7bae733015d77e17d5 -C = 3d1b7fd5a86d1fe208eea5e5df51c9e62e67d0a0d80b5074 -P = 86768a47f4384d60a9498838 +K = 315652f3dadefdf252a270417557dbd67020ecc9cb0654c23a57a0d72b1a061b +C = 75f694ba15986364d790568269e22b08131e92cae32859bffb7f4bbda708e72b76b90b64d320362f +P = aacff4c79e8a81138767e399b8abb61d2ca71f7c32c557ff39d96aa17fcea5 COUNT = 30 -K = d931897af5af4d8c9d29957fd7de2f9e58779191c8d0ceaae313ccc775316fe0 -C = dcc34880bf2ee46225a4b14f72615ec4e1111234be0af707 -P = 7d819b64cf74418fa3d60ba6 +K = 7f6fd118f3fdab067dc21f9678049e5b2fd84a937e06b65923402d5c148b5264 +C = 2bebc3245498e7f42dde6271db3e3564bfd621771e674fa5d23d2223152c6ba1e15a7d1547c90741 +P = 695dc0520b8b838fd3192492aa6d981871871a1e180d6f0ad86b6ad868c37d COUNT = 31 -K = 75d9a437e804c73ce983bc689a952b215258132dee21d14e774dab216b6da106 -C = 32d89fe759d0f931338ceb7703e95eed76caa8a5f459341a -P = 618afe1bff9298a0a644b599 +K = 131cb3f339033038c2368e57ac3c642072415713820d3f5f962d0cbed3651301 +C = 89047d5ce22c71c11c836f489063179b33c1f96425072c9aa959e00209e27bddf4cb21917219ebab +P = 8d19880e03b88b451aa81bd87cbfe009f93731c1a034d043cbd36a0a069f35 COUNT = 32 -K = db6f36e4d276f99999b0de964366542d6df9c6dbc46b4ea6df880163d40ca224 -C = 67fc267c06d080076d4978585ad3bcb01e0f81b1a3c0a995 -P = ed6672f347f4db2010349c4e +K = 165e32c0b58b467882f2cff9d40fe00dcde6743710fa508ec7c3e3a791059875 +C = 86b1a8acf507198288c6ae8cebcf4d9a65234d71386eaf4ef8c3c8c98881608805855a044ffe2d81 +FAIL COUNT = 33 -K = 6c06436191b1b01fb5e3c816283fdf977e6fdc6350770db69b99a9db15bb2e19 -C = 63f097ad60fc2aab2b384dce54018b2b048592d00eae51bb -P = 1ddcaf371a3b6c53315bf924 +K = 962fc90c8f7fc41d8e81c891b08669b8d6af20de4d88a56324626cf2d1e61312 +C = cd4f86ca351bd88920dc3509574c4dbcf566f2b820d822ff555721e8ceb83318658b6c9812ca2f1a +P = 64c9a56f5531e0afce310f13a012084de904c3bf383decd2c11afc88541a8c COUNT = 34 -K = 54f1f3b4379ec50b3d67dbf8317ae0227a1a2dc88135dfa4d9d3beadfa6a4d22 -C = 6c90bbfe486871ca1f62375159fea511873b5718b9976feb -FAIL +K = 6761e4afd43ccaf14ab386d14924819080513b512e00466de058bfa21331eceb +C = 6c074f2ad27157949953b03efb6e1b12b7615375266d488b7806ee8fd2003d3ac91ca9c54eae5141 +P = 1b562851b11255e7784e1da41ea1f880c372af860bec55bcdaca6f9ba680d3 COUNT = 35 -K = 7a20bf062523d0d415039599c84fc41a9cc2c73dd8c53f65143f49047a061dba -C = 000453394e82322c2153d124b1b366dab2f5de0a781197c1 -FAIL +K = 754cddae4e199d8d47935adcb5354652aaf5d1f441761c423b59e1982193d346 +C = 7a15ddc803969e7218efb8c45b6d6a286baa0be1c709dc5ac4bd9af366da1d9676ff8d2e0812965e +P = 5d78448e3dda4858a9055350f335c8d2dd211b9e369378f552cbe6170ab5e7 COUNT = 36 -K = d1f4aeb10c36918aa0f0924cf36512fac8180a4c716c5b80e320a945e790433e -C = 29d13351ea45dca92d364a7941702ccb9dda0df383f5b8a2 -P = 437cfb291aaee04861147820 +K = 169f5c6a120436acc6e27b84925ebed13cdd39ff8bc32086188e9442e6c86e51 +C = d8be94f85ebc5ee8a471c5d09bd4b12461502478dbb246e5ca8f590465d92bf6e4ddde23dce1b060 +P = 03767c2c52dd546baf9a2221fa8a3ddf5ff62a6200aa28744353696919ccc8 COUNT = 37 -K = 50203020e6e17c78268d65531ffbc6b7e5fda338d261cec999ed10b4c8503d0a -C = 68f10cd81fc1a69ba90124af58361f020ed8fa8c043fcfdd -P = d4999a445bd465285e8c8576 +K = 2de9730946dcf276fba4673c7fd5132c31fa474f435fac8f62cfe3a9d7f317a2 +C = f2123434ae8b199403479f55d4f8b81f99b0a7c040ad40e969b5b9227aa68fcc38d34cd2ea41723d +P = 022ab6ede4106976016cfe2d8f25712337c56de9e5d63c4d8539a38aaace4f COUNT = 38 -K = ef48136b0ae3457e44740cfa6b8d1853f1f1491992ab9a8c44b6ffa519323279 -C = ed44afd8d1fdec433ee831e91485ad0ade0e2ce4a39d4c10 -P = 6f56eb172e90612278330ce9 +K = 0bc3fe29794197ddcc9f48221a75ccb28b55cd99c5c6e7b60e41fd5467c72af2 +C = 684fa2e69a5e5a6c9ac44c0b679770998367d27dda2629668ed71a96140aa4f6fa070432fdcb2ba6 +P = dbf39c1f1b1104eaeec99703bcaef25043741f8ba6cc0cbeb6e29e57e11eb5 COUNT = 39 -K = fb0f7383e1c3e90e4d6a045822aad8007f8ea5923415426139e40abf50e32968 -C = 1bb186066268ddb811ff5c62eae7dd98f0ebf21bc5871c2a -P = 852988d900a535a6c0f696c8 +K = 86ea71454e72adfcfa4d2739cc36785e4abfba44e9d3847eec2507505930ac56 +C = cabfffee4a3d36a370b0e0628ad2c6b5bc4259e10ccebdb8e3c5a813d9bda047c6e825a1169d163c +FAIL COUNT = 40 -K = 1623aa5b36df612602c95c2653f25f3fd5ed7e734241a0c95f7bd734a4a86960 -C = 5451ab48fddff2ecfe14de6df949e11633e4b6e73108ccf7 -P = 848dae8bfc05506f03d5a187 +K = aa03f6d3270bbf11f55b6f94311af87deeff888425489d6bb91d27c507d79f34 +C = 888f61fb1a5b62941da72fda658187c78e4a26ca98be522007c8a30ddc6c2bbb01a67a44d46bb098 +P = b69be9a2e53bbe8a87b9db5a4f2235dff72661df9c729f8481dbcf9e6dcdb5 COUNT = 41 -K = f7134e98562e8f9a9fa5799ee26a61594058414873521ea14ae6d73b6e36f7f0 -C = c8150f75dcc89cedf5e4c23742a225ae6aba3c397e0556b7 -P = 8484138228ba0680846130aa +K = a5b2bad24d9a23343aa9e1cfe32f4edaa0911a0cc778024b1f8938e232e5fb6d +C = cd516d540550b2e91889f0816f5e78a9f0e1b9acef4bc8ecdcfd5fa80c877298b530c149bcc423d4 +P = 6975358ba11fbf183827dbcac45a3df9dde49503902fd9ac5ee268fd040906 COUNT = 42 -K = 8006c7bb4f6b9771331d8b48ea3b7c5862b05313e4fb3d5628a94a122dfd8a4d -C = 61486dd2657d3ae1c881033a44786c4569d8b12cd5bf0561 -P = 1c74b774910db5a562bdfa14 +K = 0dac8368660ce38020f20382313719fe36afa958cb5918f5586f89afe0dd8c18 +C = 0e4279d2fc10de382dbf99fbd5ea00d6993298cc64e870ece3361133757fc87761db5f308309b775 +P = 71f5c7c623bba80a7a503998272e6094476972f87c53a6d920a5676c774083 COUNT = 43 -K = 0186d95b9a480275929ff220fbed875fc10dd99efc4ba779f50f82dddb8d85cf -C = a3e999271aef15ba3ffa130c87876c788eea03fa3018184b +K = 54f318ce2cbff982839f014dce4cfb563d71fdc02b651c39b9d55dad750ecf3e +C = a5cd9382cd8b70edf9399cb5d6e901b89a0a9ca58ca87d7c7506a48621ec30815ace7d9ea24635e8 FAIL COUNT = 44 -K = 21dd9f28af0b12daac36dc8fa439675e4ba1480a2470108457faf320de73d92d -C = a9d4efd6e5868252b6b33e65794869354c1592dd69fec8a7 -P = fbc5143c408f8bcffa02c6ef +K = 4a7f543449648d10a00e1ad45b0dc555e35253f86687bdef8baade97a373b6c6 +C = b5099bffca1d454bf9d00a00ffbe184d13c2137a6fb4c6cc6197a5daf0547e52b7be1e9099d0ef5a +P = 86b10091a6f36507d9ddfa53cca9fec3cbcf9dc4b5401e707d9c5dc5593358 COUNT = 45 -K = 3bc6a5a43b278d97fbb500f8a2ba0f246228df35372d93ceb41fb23de175a688 -C = 6db9acf056d930420da9e06385f2ac4f7710a24e0750b93d -P = 09621464123efaf7c58fd470 +K = 292feedeaeeb4ba622fe85261c7612914d48b910d98229c4720d8fcfc3b6d097 +C = 9cd146813006ced515f6401133fa30df8b1040d48ea707df499ac44ac34156fd2942342019e3da4a +P = a94bdccf6900d1b3118299b068d4bf09f978609a0ec14d7cfa1e6e4f9eaea0 COUNT = 46 -K = b3405a175d0c99661ae61860606a499f691792cb07b156f5365bdeb355530128 -C = a461b47107a620537394d4b73a45c9a6401fad147685d5e4 -P = 8fd1c093ec91749212f2bf99 +K = d26d081530954ff9eea2b360d36f00b315bb457c4b36b6aca6d318631caa2e65 +C = 296c91a54c637ac82409fdec6ed8ec5f4c9d8a89828ac2575f38e9738358e4bd24f9b771a9078abe +P = ef8ef25df0ccf80ce71f3b2cad13c0b3dd5576c056da5a086d077fe479841c COUNT = 47 -K = 2fc776804878d2623cfc3dee93e9f8626e285384294df70b91e28f3a8925cf0e -C = 58ba84afabd31d074dd74f879937016695c2b0187d80afeb -P = 1782e9de3e6ea7738e204196 +K = e2b911c23c729033700dab0618b6086dd0fa81a6678dabc2810f8f2648a707ce +C = 4a40218f4a92a17be60bbd26d1532c69bf9ec864547c3676ac88fefdcbed9433223bac722a955e34 +P = 2de958345ef68af6d2a02c827b2463a85325d6707b59d06268deb9b6265275 COUNT = 48 -K = e05b146617c8d843b2e6aa2e738f5cfa0bf1613389bc03985f763b55dc3ae276 -C = 9bbd165d2a12c8193a4716ead101bc08518f10debdb73c84 +K = a0bbb95eb9223e108ab72b67406899c7c94263e52827b9d5df5468b425c6e73a +C = a5d78dc107927315c2528b3c06e3acbe2180437e123ce05d5a8fa999e6835aa2c806241913436d71 FAIL COUNT = 49 -K = 52fdc93b357c2128d2950f0dc35ac760526516f09a2b0e847705b82cbb4f22a5 -C = 2ed929cf466c15b8cb25c2fa5cc5240bf7a4ec25c6b9eebc -P = 4f0e77df4c741f6d5f44a02a +K = 555b023e7c5d3f518a4388ed5f2d35693d537413151185e7bd5150937ace6e5c +C = 7cfa59908480de9efb0b7154b784c36c3d465c314659c794209ee0347c4b2c56ea80b74625162fab +P = 77129847ccd48d1bf28136bef92f8fbf2d28c6f300d6635d7b8bded4900d16 COUNT = 50 -K = d9eae3dfda5dac79744680a1cdd3e3c487c272168d714aa829d6123b6c9ad40e -C = 4bef3fb36432b0f7ce40f198c2b8a19d57a7e6cc2bb87a0a -P = 197823d129a8c350c4d1c5c9 +K = f82824999acb7de6344b7c63f22e1ef36a90b4ffc14e5f3ca4d38dd033ecf77a +C = 5755a4ba42eb570dcd5cfafc19f2c060d8b530033f47f743bbc3c33a6f5932000f2d22520e2e6a14 +P = 32d0b9a747bbaf810c5ec3d66793859f22968e5726bfed8f3695a10acf395e COUNT = 51 -K = 8bdf8034a913b3bed634c7d4c1873f927cf3ac1fbea1ecf285cdedfcd59907d7 -C = b80a9cff928439b47e975781ef4ac466d79369a66147dccd +K = 1062ba0223b01d13db2eb5b360122aac6bd038ff04c28ff74531ddcfc5659660 +C = 53e516929ea9bd0586a816cd22c1040d89b3ec5a95f5a3bca9c161b1bed84e8eb4c400c74dcbc09d FAIL COUNT = 52 -K = acad2aeaeefbd5c1ac0c1a42c7cfc5e2bf031640a008f06c156824dc5d2e80f4 -C = c6a0ce765b301d55780fa8988c31da131bb58ab5be5b7988 -P = 8816b1beb634369c80ae81f0 +K = c91b742e7520610e852eea26287cff4551f38dd50f87805b0801a5a76d64876c +C = f15dc6f16ffe977c95f6cd5ce1faeb1efa982582100e195a1526642b135ee6d57eb41f7215dbf318 +P = 23c1a94bc605961d833363b6fd4eb409831d49a27338ed6e09a125c3d7da4c COUNT = 53 -K = 0aa22bdb9221fcd1908bf00b1762056838c4a5346512039dbb09d26a79547a54 -C = 0673112ce8364e347b34fd0dcc4e2cfe4387844b5ce6dbd4 -P = 3f450479d382071bbe2cff19 +K = d71629c42732763879be29583e4952f4081efeded1f5484fc227e395903cbbd3 +C = bba2408ceb8a4906f32cbc554437ad9bd11c73866b887b3cc114ced1dba0e265df1ae349845d8561 +P = 5c7065ea247bee4b8bd017e7882bb56fc4181c068aaf8d77f126afd415e823 COUNT = 54 -K = e9c98997aa368550ba2c6b14c1b37016e8738d9460c28aff12ef4f519da561f4 -C = 58a9d8276eeb7e1b522e8fb5521b045236df2fed2ec0ed1c -P = ad530991cc0d4a974af2c7ab +K = 396aea65462e682c1d4b28bab19ead13867dc953455cd72847e93fd6c66dd555 +C = d92b3461c9180dfd0e70192f58164be021587983dd7a4a4c9ca61f44890586f83ad71899188df588 +P = dc81a2a4916ad6eaef930ee079e140010c69a99446fa90487bce35a27a4d36 COUNT = 55 -K = bffaf6ec9539380f8c7d96231c25da32173e4eb0edc3e019fb73157ffc6ccfb3 -C = 863e9d5073af3bde42205d46e6024728de915eb74f3548e4 -FAIL +K = 78798c2260a0d4ea7be32e746ebd8b17e90c4278dc58020a6f12b89eb16306da +C = 65d504f1f83d34433f245cd85feafd9612b85733d7059d705e3f4a23f8147880fb94a6097e423507 +P = 863c89c635724cebc1654d608c07c9fd84b425052d3f8b635d31e78a53174a COUNT = 56 -K = 43f008ce406a2c5c5a19315dc11ba6e3477b6c5c61502d1d59448061d75758bd -C = ca87136a760314bd359fa3f01b78e7338c33f3208816b08e -P = 196ad35f80107692be62e03e +K = e38f9f198ce8d4f36de33e7c043bf511fa373a07ab75a954524fa09a635302ee +C = 73aed3bdba72253a18ed4a16b0a3f0dc8eb981e0c5ef5be260b244820284ae44090d48fbb218cab0 +P = 5ee0ca38693142e9fa7bc791f2436a97253716182eca785ff7776cfa17e779 COUNT = 57 -K = f9655a4822f8176da437a7aa8a7f464b7bcc56cb16c6ed4803fa44f54c135b55 -C = 71dbf048ae01d3c8e6d4869cb72a531b12e276a457bf853d -P = 4982ad52dbc31ba24ac5b9b2 +K = 9fa5cc36d190af819103a62986dffc85fd7a28f6fedb81b5e282a4452ddc11e7 +C = 4a9552e1c60d7041814c557b5c2c9c3d485461ee8d32f2879085a9224f3879e293a860871682fde7 +FAIL COUNT = 58 -K = 95fcd7cec1359d266d75dc4c28e51943ba9a179ff06151eb2abb18f321dff0bc -C = 17adbd4e2825f9a1edb8f1469dea591b28b4630c352a3172 -P = 145d0adc853b43938f6a5f04 +K = 4e1e5660846b07d62ae087bd1c49860b3dd04ee54ca2d34f192dbc1bfc354766 +C = 09e8904826775c6d93f6688ba01d5ad9a2ec7384083827c2cc248ddaf88180ca1e51c10e3be2eead +P = 7784c2e01932a49a352b5dbb27b8ca66861c9963d59bde3c912b8b197ed770 COUNT = 59 -K = 2db8a89a91383b0fadb361dcb2a14bad8244afc89af423d8d5e5ba09e3c2b503 -C = 56f9fe9f40a42f9c4f032ddd951f679994865f37fab84bab -P = a7c37c7d97e3ac718a785e54 +K = 090770976de6444b7c06ec76a7eaa12c5148771617cb4b260e17f091fbe8df84 +C = 23b3cfca37ff48ce136ff6ebda8f34dee4fadcf65c3429fef6ae68358803878229da09048b88f5ae +P = 836e8f9fb4b8612c96665b7318faa346edb59c28b958165a5899d0dd97f71d COUNT = 60 -K = d4b7dd8116b7fb886ba6f81003038512ce8fea4988c06be08e10e87cfb81869a -C = d2ebcd39ef7abaf2f89fe511db49d1f951fd559d3e91eb92 -P = d291f7da6bdb3a8ea6af3036 +K = 534161fa846740f2b37582f7d781920d525a5386cd9001c9c86706a3759990ae +C = ebff33ae50e06769003165177c0360b36a95c397208bffd61e2040df8c32bfc98a76e43e55907332 +P = cfa950b5e932d39f036a697e55a458f77af5cf34d9e2599831072fc06450c7 COUNT = 61 -K = 94ac7d8cc8dc35589387373e1808afa18e548636f8166815093ea9ad32a885ef -C = eec60aa76de233369cfa5ccd730d696761f50c8aa53c933c -P = 1ef6011fca85dfb57bd97657 +K = b8b49abd22f443cfd2f549fa31e3a7e825015e03e8cfd97833054b75b7fb6ba4 +C = ad3e8c19fb63ca802610a4371ae73d1f954e9e832f1fc8a25b12e14a749a73deb4d604a1aa63874f +P = a95670241fc83dd017c47490e716ba61bf9d15c67d64eaaf00279b4e6c1fb9 COUNT = 62 -K = 227646c68600035400ae4ea1bac597e58bbee00fa4539f34c78655e02faa3ec7 -C = 5bdf73558790be781e0e1e63938520a9b73087ae79d6b0d1 -FAIL +K = d99edb67718c56812c0258ecb27221fc8b27e1b128aef513cdd39c090e230776 +C = bca9f6e3f670601eb827249f5f7bae0b50fcb7e84d564acde0f31487f05ca87b97dd483711da7b9e +P = 9928dc13c8e0855fffbf3d59fca09b5c01e1ca8b53aa2e6c02fdecb1f3659f COUNT = 63 -K = 06fe110b3f0daf3d7c3ab6b9f56a21b611521ce25965007f446efeb5f9d6b38b -C = 44c02eff013883d95b6fbd8d45d3891ab5fa41b3929fa9e9 -P = 2756e0030ed7da5ac6ef3dc4 +K = c6c2d006b5508c6d5f96c5b3b15dbcb0bc728bb185e8a48ac77ca202511ee403 +C = 32bee9c6fb07ae8c8495fa779db619396c47fea1cea4c2fe7c956f3689bc594d082222c981fd83d9 +FAIL COUNT = 64 -K = 9be240ae96b40cadac5a154468dd35784c4b008abd3c5085a648839cf3260063 -C = 332ee9c97e1cd81700935541eaf28068c21d723e818eed97 -P = 7eba5b4440fd756987eda2ab +K = 3c42702ab460f4b0b8c4f4c026e82a8bc9965507a2e5f320f5210e7ae32545c1 +C = 32b93e0dfac9c25235adf6a6d1ccd48128aca5350c232b6c745374d1a748d7aec9eb3df112228285 +P = 4bebe7fb7fe69ed2d99f40da316f9167b70cb6cb8680dff56ffbd19845c1fd COUNT = 65 -K = 10da0b91b97c374eb7425ce17fffad8ca80e959dbf47e71b72f2c38d97fd3c0a -C = 9fab0b41ab00f9884a903f4d6ebbf4725658bdde115ec39d -P = 9d0e4030fcd12f7a5cd4c77e +K = 7b9f327f1d2b5e5aef62ea82f99b2c70b41281713170ec3703fb33bff4cef8c1 +C = 9b741798cdc2b8eba33ff4eecd60507ace89df3ffed72851b79b84c60680753920649d7e110ee4b2 +P = 1770970c6b56a5fd4fa9b629a15b56fda70d4a52cc006c381199a28c5e826f COUNT = 66 -K = 8d7e2f93b2df10228b7825614249e6ce38c29946f004cebd89f70166442621dc -C = de1ad00366fd4da73e87e5e83696206f37be26a5a80f604e -P = 6862a3298152e6640d00d9f3 +K = 61751a82a4903e9af71cd946923e0187d9b0dd06c567f43c4890007dcc19dd4a +C = 943c4f8e71027b76e7aba08638cddd0b90167bb29fed3363b2991544d25c9550bd4cecd553909c3b +P = c0f4322dae64131fc8ea3d56d976f504091df1cab2563cb757040a7da8e89f COUNT = 67 -K = 82094a823ebceeb762a39c791172fad107b0494613e759d6e75c0829d2cd2cf1 -C = ece39193ec3c27f29faed3b5a7f71a5802ab6cb58f691f78 -P = 2d82607dcd100a48947e8191 +K = 8b961cff70ab5f3976e6b895e5b991ab512ed2927a2d8e3aef5c090c3a9b7b05 +C = 0feda49197798ceb33ef530e63007a5d35befe108f88cccc365928d94588f0e3c24c08f8f7c28b8e +FAIL COUNT = 68 -K = f5242768f618a48f358d282a99bf67c836fff2728969878a35d7595fd204d6e2 -C = 508a4ead0478ddfc1b461630d13d6ade6aa3aab5bae3f7b7 -FAIL +K = b76dfbbbc02174287cf6eeccad6e7bf006f20b60f589c8ce8210007546a8051b +C = 537f6d5ef118b5405efff01feea7be703519cb4ea9f1ac7309712e87601bd1c66208bb55a0223b43 +P = 89c8a1c8f1e6ec64bb53959224d50b1e0834ab9678fb01bb0650c8ce86ad14 COUNT = 69 -K = a6dca16ebc70854490b841862c99df5c7b17e35a024a7fb4d3cf08014711f850 -C = 9486ff018d164174e795ee9b3113224cafc42ab86659c738 -P = 4e01b3b10181a224324efa69 +K = 7a9e29ff5412478df41159b392ddf5f3d90feda3213b9110a6b864db98861ca2 +C = dc8b23be7f345104c8d0799b441df4393ae50a8a00ff7cfa6c1aa46479804db2635d722b52cea157 +P = be7208c768f68a800e17b82869a31ca1b92e2e949bb2bde517a2a4dfb327af COUNT = 70 -K = 7d2e589d5e218a8b1d0214d98e67844297a9b7b50a63cd1120ae15ac52fd85df -C = f34eee78be8b27b1c36739306c31b9a5c479387df1dbe00b -P = f0e8f00a8614ce798b478268 +K = 3d2dd2ea8b0df3ca4fbfc659514ae9a8bf2c8337775a3fefa77c523694bb82e0 +C = a8c3c4084785b9e24d13921e3e3a348570079df065a9ed64228e2ab26f6fac9bfb2bb53e22584131 +P = 180fedb35a1f32373b86be5a8202d55c926118bc51d8e2245fcff21d7885c4 COUNT = 71 -K = cb26e7faa38d6a52a6716cd9e5374428994c4bc0556de11e824f015859376a90 -C = cae1bf1021d3503b2422f9bb9e695107e815ee08664e33af -P = ac87b81b2b8d466933e9da50 +K = 4c87d2ab6e00b4b90427118473abf69f385af3044ebbc3420cb863f90f4bfd58 +C = 15146b662bc2041035173c099a632ae89b5172adad2a4f3751efdc8fca764bc38c204cd0e8706e5c +P = 40dfc71b33c22ba34f04f528a0ebd3c5ffabfe91835d783199d56a16ebe1dc COUNT = 72 -K = f158019a921ad6653e69569c2a7504a833646b75e21ee64d5402a9aa9c2acc85 -C = bb34db5690c072e10bd0c6eb939bebe9b9afd154f6c906f7 -FAIL +K = 825a7cda2647022563c2cf2e514454e715cfb247f4c6d4a82e33b7f998651a52 +C = 4033bcbabe1925456c30067d05885cd0ed64588919f8b71d918b469bbb24282c4777db82b60e1dfc +P = b7be0af4f1d78797274d19466ab308b506730ec9081754ab08c7e518fdb4e6 COUNT = 73 -K = 13447adf8a76100c70f0553e8ddba018b4556ea0afaee307bcfa40619bee9007 -C = 541e8bbe3e61b298b621e9dbc1d3c98aee45abd78d50abc8 -P = 46cd9de114403b61492a8776 +K = 1f69c545dfca4dc94e407666b6d7a03ce7f818370ae0482641ae0c7e88ebff1d +C = 50ac27debeef337941f479f53d4fe7a01b8a8ed613f7f7830f75505fd856ab87287d17bbb1c5ed99 +FAIL COUNT = 74 -K = 260dcecd3932029bcda8d11093a37a7565b9e3aa359fa6b826bc4b1be7e0aa72 -C = 0570bc98fdc6616d2f8a93d0dbc8e16fda1178c7587bf2ef -P = 05a55fb2ccf923520353b7a5 +K = a6664419e818236927c8e60189f9eadcbc2d95f91a25c449201d273f26b1f620 +C = c1ca437a6a4684f116a243e2a83e7a9fd2724c13db6b62d2757cc9849df2608e89a76195d30790a6 +P = 14b1276b4bb834da24f8dcfdba48e4ff63f035241c2e7bb3319f7efd753bbe COUNT = 75 -K = ef40b0f69fcebdeddacdbfa22a3fb1a3dae51ac6c3b5f69ee3a11531e84481e3 -C = b845b69b956927ad699aac511da4eb040793fd753f9cabc4 -P = a623b25fba80efd207c4e69c +K = c32de49c3a2a0e8affac9c22d00b0c35c3345ac1ba57e0881caba8268d1ce158 +C = e22bbaa157dd80cc6eb316e12a8f74e433d8b2e52374217698ef53c8099fcd94f3e07ffb3a52887d +P = 9c31ceaf4b24ba93da1568aced6bd403e2bdf95943008322be67af27cf44a2 COUNT = 76 -K = fe4b0bba14c038df573ccb5e22f7ae3e165c2711e007a587900229b07c3f9a53 -C = 44e964df61946f526bfab0c5f8cbc36a0d6835672b764388 -P = 1975e320854e07340ada124b +K = 4a5e5d98951dade96553ba99854cdb9b3047f7b360dd7387daf03cff080ada71 +C = 6eb6c6a6a69abbcbe3b1affde5c19c32d68e56424b603bf8a17c26c1cac13e6a7645d918f0ec2ebb +P = edb217aaafaa96781780089779b2120f650fff7f161439c00ef70214c279b6 COUNT = 77 -K = b4a2202456a03ee9b22074f7873fda3b9c6fa4bd8565bf8d3e513b2803729acb -C = 67e3fdb7038a6a7f9a5c2a987699a700688c7c07b3cb248d -P = 63930915936271af175cd2af +K = 5780f259cc69b40db65b749fe1ae38277536091b26029fc5ad4073a72c19c494 +C = 709b1c19c383ec9e29e83939319128f148e035048404669d2fd049d396cf02f1fd8ba71b1b5afbcd +P = e338fc0f52f7a555c4984258c45bee5cd2e28e27d70d8162b6ed5a03bc5ab7 COUNT = 78 -K = 3aafba7bceec0677d98e24f9b40e903bc6656f893323d67658990748a73b8bbd -C = 5f779aff31e5471a590fa9f99faa38d26503370522e6393f -P = 54dd67af4c1e8a074740793f +K = 099a266229863fc97f3c5b6adf4c64a056ddeab299d704a04837b5be0b577114 +C = e80416966edb5713765f9368362bd9bb2e669fa843052a8b1658c36c84279d41070d4b6381871416 +P = 5603ae1d40f4f59691947251a987f788493114eebe34f72bf0c7890c7dba16 COUNT = 79 -K = 9a7d6240163f96bba1459396392edfa260b85c86d69fcdb5435073db75817647 -C = b3ad670484b3ee97bff0d9e549680b09358a281c0f6b2ca3 +K = 5d1c75f25aca94480e7c7fda6ec9628d438f57cf00067bd28b27213bb36e91ea +C = e5d54015551e8bc961031096c08c9ce6bb115e72ab395f2b3cbb6e79b576b9b3a484ffc3328c7df8 FAIL COUNT = 80 -K = a9aa9423625fd3410eba159596b37a6b59390f0ca905edfb6839764c3e0967d3 -C = 6901d10f107b794729d825da91117e823ce780ff74cf7b53 -P = 6829976a930022c3fb4e76b3 +K = 5d26ba9cbfc96f97f9c45cf6dea347ad02cafce8e5068f5e3caa48bd27226ce9 +C = 89e090a05186287930747ae5b6c1639eb197dc0e62a6c7a6e777c21dd4a28373fd92619ebbdabef1 +P = 4b0661db2a424bd59fe43589d9c8c265594124c99b93592f7a8c0b24a0dee1 COUNT = 81 -K = 7e5edba01cd46c5e9520cd9b9d863d3bc7a310f6cb0d07d168ee0cacfd79ba7a -C = b1f2f8a54464cd010f699c9dabd59b0ebc6da57028a6a069 -FAIL +K = 62c0cad51c04a9e1d5e869bbff302a591e884edaaeb99037a52b8fc7a8a78eee +C = bd88614702f71d5dc7831f63315f5f385868330e385a287c502bba1341462a147c8fae957c7af816 +P = 10b59670eb547c212d740cf5331a73ece93b5c4d3d3033f56261532f5795bf COUNT = 82 -K = a9a68021a001af96d23d6be0f21c11eab11147e7e4034c49b6331e9c6c57d756 -C = ac846aee98c0e53b4803508ae456fa1b0307af998731ade8 -P = 1008b90ecda9c55b748e83de +K = 096ac297a919ec34ac67bf51b1ff9b4e8e63bd400745ee0f035539c15e8660eb +C = d9715f8a1fa41bf02f3048465ee3c76b6a70494bcc478bcb2e6fefe256a56d0f80d4467d63c2dab1 +P = 7bce52bc3aa1f4cdab89a08f7ecda44d2b55ab8be52743815fc1e5d46e777a COUNT = 83 -K = f322ca5f0f94f75a401110af94589e2ab9b2e34c9037ae9af8798944e428cf65 -C = 321d1a51b3e82e8f42207428b782078085a7b6a8b46f1e8e -P = a9c5eae5c7820c36ffc89a8a +K = 019d042b0255ebf1b58777cd9c3246baedb3a696011ea95cd4fe1eb69b675ed8 +C = 8e21ebcf76ac52f19c80d23736430fe22b3f62ba5d0b8e339b194f2d4a31e82aeccd2a266a1e3798 +FAIL COUNT = 84 -K = cb024cc3bea72f215199e74d849171ad8ce87a23648902b8a5c7c5422fdc9449 -C = 411e6a3917f010d4008abc229a968d577e556a3d5dc340d5 -P = 2210d87ecbcf760a19997cab +K = c77b8f78c3dabfc79b9b51433b171c00edfecfc7c2b7eb7cd059a49f77df6cb8 +C = 1df0342d382c08eb662e4a909246f06be9b5564c619b44fdab2a66c94cd2573470b6d7f5f6baf290 +P = 0bc2280f5edc242790bc99917ec57b843a09f6d64f104dfd0b587a44e4de35 COUNT = 85 -K = b378b9a017c1113705774eecf66f6a00ef959c37ffb6b283a45c4b699a482b95 -C = 037216a75769f951258e93f5c5de5087dbc7341bb790d372 -P = 58756c8368cf35ed2bbd77a7 +K = 1f07105c10996d1e73d4e89e70ecc1b214a4bf71862bd5126ce1982115883bda +C = be5e387503b7f6c3b056faa7ab28dc5969cc049da28b295331275676899ce19fb7b787179baed019 +P = 22cd7715dbc799d4618c0d22f042051891224142f7e3d9a31ffc6f132c047b COUNT = 86 -K = bf9d3fd6ece5d3eb9ebe2925fd2831db3f9c315103fb3b49773095ef0e3a9b73 -C = e57606b798451bff6c0e5fce709b2d988f5b4a0051ead4b5 -FAIL +K = 938587727e111188922b54ff27fc0acc7ba6fd9a3a7c81465edd8850a3449873 +C = 9e644c33496ef748b8b7290e50445fae2c8019d5adc8fa23efd2f5f20e338f1421c9ee1ad6ba0997 +P = 463e9128b39803f4eb548bd4389f14536d358d75cafe75d2721e58ab397aab COUNT = 87 -K = 0011395ada16c1fea871d088b7a6b2d40c4e3a673f410ba22866cf80b7c4335c -C = 53b643ddb6442e01271adbf541a573a2d08adb28dca2d943 -P = 631890c07643a9c612083b2d +K = 89c0129ee0a43a52fd6304a134a404f539cd71ef87444f683ef2f48b3b8cc056 +C = 541e0eb55c248c539bd9d35559f41de2af1b00e7dc7d59dd022168c24169b8ada720b0d9ba811da1 +P = 39661419b0a326e9e6dc4d478a928b8a22026a16bd038d680c453208f7d48d COUNT = 88 -K = 5ad307222e556556e4b79e5b5cac98b84cbe22ea69549b2a38624354389627c3 -C = 3dbbbd6a1101c0c6a53f73224a9735a2116e43036b335bc7 -P = 5a65521d68f25f413643e440 +K = 6fb06bbb6255076296f2d2641e17ea4e0783386d976e028a976f87c3ee0e62b7 +C = aa9c20cb00daa3d5bc86c1bdb3d9c923eb325ec7c9a84e712e7584de2d92124b9cb42422f8336201 +P = 6c071719c17687c3be604ec5c94358e7e72103a833683367a815b5bd0f9669 COUNT = 89 -K = 049d5986ba7543bc887f68d61643f37e4432cf88575cd992f56c79b86c075169 -C = 214f3a99624870a70932e805241d79d2b0c318b5618e2a91 -P = dadcc216fb5a4e7bc6418d6e +K = b2b3196a19615a967ccb5ab68d97439cf7f70925b3f2a6f46ae5e3b90b6ac3af +C = 4acfa06e33f3c2761ec6739ff9737fc8572d0942cb2eb307291d761365ea12a5d95ae0a29f2b58fb +FAIL COUNT = 90 -K = 9496064975423a76b45f91a6179fbbbb88c4515d490960722575e0f2a2cb9480 -C = fd9900fd1c2c420860106ba78865d6374e6535511c8a3ed4 -P = f6f9fc5a53c8dd3b75f22da6 +K = ac14d2f5406aad32f980826f9912540f13183b27431965768446b0749a8c73d8 +C = a2deed7d6a90e38a653422e26fec70d73ad30b7ea7c1d5bfc56eb17b5133df385084faec5c02f045 +P = e5bd73511c99e54515f56a642005dbee9a378cbf9179c652ac41c538ddf43f COUNT = 91 -K = e5d259ea55fd6ba12f987875907ff69cba5e59c8f82e0e40128c466e3837492e -C = f54a884aff18976709da97564b0e4b517f35e291ba22d3b4 -FAIL +K = 53f3c059f156fdea5aaa462b1cc130d063a48b24fa905186f49f169ad74cc8e9 +C = 6825e115b322abe2444e0b404c12a81ae1b1b47838c0f2e03f13fb23878abe1dc8a072cea2400301 +P = 201ad01de0b83326d04f3fd8234d47f5e5d01776da9cbabb0d6bbecf000a38 COUNT = 92 -K = da05abd0ac8dc30c69f6c288f5ec69c2cba71adf5322bd6fe96c16969d63ee9f -C = 145adad271fd0c42f81fdcb42993b35f38d4f1aa33407410 -P = a4e50a305a7a6512595057b2 +K = 85383d291bd9232a2dafab888168805989c1a83e8474634df1e19824e63d2163 +C = 440aec087c575d12f3f3c4b617236623b007d712adc7ca412217938ecbfe89ee2e0f880465d8bfc6 +P = 85865df837947aea3dd86ed68cd8f8cfbc079caeae00a988c77c1c27311c1e COUNT = 93 -K = aff766a370ebd5e7e84e401a0ad0f131e17882276ced194b91785c8bfdd86fd4 -C = a40d95a661be5de0e3fa5d70fa9d77d07a3114c4cf78a590 -P = 0541f4e9d8804ab4c2e124e8 +K = 94a5c6db2a3df361fc4c242abad5b19c852183ef29ae5de23efceb47e0209e1a +C = 6d7f7309403c38127f18375db4261fdbd1ea72dfdf42ff3d44e1fe4a7dcc0a99bea3315bb0d2978c +FAIL COUNT = 94 -K = 6b93895baefbefbe6f30f1b72ee81d3d01b9d8b31748a36885d4dd2ddafc07d3 -C = 8fe4a09bdc6d07311af0f630fdb42566d7f68e9e75d0bbdc -P = 65977eb90f7d62cd864014e4 +K = f214924d3636d4b22234925cc5abb184c870c9c50d27d22a883a73e75943e415 +C = 52665d4e5e6eb0b4b564c317c13310fd05351e6b2fa2928e6b0ca74df4cffe5a675107cdc4ee65cc +P = 9bf814e02fb5b2ccfa1b8919ee76862d6a15c7d3a35eb79c8e5e872c152525 COUNT = 95 -K = 7bdc1d31bca793c10842757fd7eedde3d6bf6d8c5bfa58c904379f5e69b64715 -C = cda4c59bd737d91d281cc74628befdefae7df4072488a69c -P = 28f7e2ed5eddd20ce1e663c2 +K = 1e215a3cdf96f601d488e9bfb3c7f6ea276b859ded203400b12eb29266b8bf6d +C = 05e30cb00e3911f4fb4a8a5241f51ab6e67d08a5b9bd667a91721d29bb93514ee72adce9ee8a5665 +P = db29ee658b389f30a912aea24068d006a7f68dc74b5aa274c8d2ecccc0c770 COUNT = 96 -K = 1a41054e15289692500fbc57bee1a8d2377e041dbaace0c64886782e882c2bad -C = 74fa4eda632a05795658d3e8a28129f759dcf82aa6d22509 -P = 66c81e040e83c49a755b5ad8 +K = 7df415c54bf8b7671f856211e56bc93cb963ae90780d816230b6bc86b550053b +C = e709d83c96334f2944a815a6925fb6f42c9ef90fc01573f319dd77654bc585e5e34feea47f305549 +FAIL COUNT = 97 -K = ae30e8efc346bdc91b06495446b14863a816370a19de4f4c01cfcab5529885cf -C = 4b8681ae35ba3556b78486dff07269456111ddeed28ad5de -FAIL +K = 6ffc7221a1e70d62dcddd813bdb31b449570c37252a1b5e82419290f7ff5eac0 +C = 85320cdf466c2da48246500b87d55bed4b11b1b1d3123b102bad2a49c4edbf539a6b05dc2095c68c +P = d9e57a3409b88b090f48a0dbab72f10379e5a939a72f1a51edba5b22c477bd COUNT = 98 -K = f9c54b17743b438d9355ce1b26a69b55673402093e31fbf78a705b459a472867 -C = 506200d107b7e824c70c2e17d2e6e7e9eb204cd6a30a85d2 -P = 6dadf3ff1709e5d7bd2ccacd +K = b4b1a2a2e7c031f93df9ac7d67f4a4c9e2ffc9f8304cf38e3238b10e19e3753a +C = e7e43b92faec96943aac7c3824dae3ba7fac6aceaf3ef1cd0780c99b1961d2e5346a4b18ecda29d0 +P = 71234d9b48a6aed5d2700b9ddaad0f45fb95312cb2f006d75946972acedbea COUNT = 99 -K = 915a42055415bdbbf15f5fc7408eb5aa391821897f12d58b76eb700cc4302153 -C = e079163a08c26bdb2c38719430206fa3303106cb3990f3d8 -P = d94920ba7f3d3a6ae9a3e235 +K = afcb3d48c54223d862908996ea1501511d6fd7b435c240c0e2b102cdde6b2555 +C = dcec676e741a5f20b931617b5cea43d4fae1605d81f622cc9508cbb6cf9363f8687d8aed82727fdb +P = 1320f1840bc4bdcb76c4dc5fb4a97eae91853f313db5ffa7c653a4282e98ec -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 7d7f09db41291ad25f797cf86f3185e143bf25c955f51d12b525a37172d307a5 -C = bf1e848d266ad15a21107b3757c43458bd8222fcb08d536f41f8cd684c5d391b75e7bba91642c8514d3a229444f7d2db8d1cb3c0fe016e5a84b37636c962f6395049dd1ed32c85b1a0394c4bf84c1399359276658569cca6a5d29554abbfcce9dd257cebfa1b82177047b07dffc3da5f -P = dfa62d2f4a488498a4a11943829a18e3512230ffe35905c689326fd12d8a4fe2a386907b1d02744c82a16e68f3f6af803d12b610cf44c313b391a8aaf8a280c00e6a383aea680ad532857e9e2adba74ab66bf519112e16eecc554a4bf46ac81496bffa03a0 +K = b61f24989de86c311816a31b700399a7d8cde54a7e40472cb8b70e7669126464 +C = 893c3b413185cc725f86598a8609c8f6b28285598b69d8dfe8fc39aa8e94b588bc0cebe80aaab74352dda1c7294f95f61dddc0d96ab61643c70a44607f9467cd25d281cdf1e55a9df9da30a590f0ac9a3b99bfd696f21e4cf72cef08293be616900fb8b9eb79d711c0167e6805c43b805aa9b538c4c1303d164e4f03ba02285a3e8e06fbece2cbc224c5de8fdfaf3c940fef2f4b43b6d55b5d18c505d6489172798ffd05c7c00c08ca29e0ba3282b0f375c3970cc912d5eb704778f9dff80b590b8c620d6759cd61ed1efe93212bf6b819787577dd7331d669ea853292a6c698bab87c409dbc61c18009557832cfdf48d05725995e1fff76de9a278e8c2c56933794ba8b74008b34ce14f9f1f7f3ac071604335a974b83f8f6dd3198cda9cbda6465454465bc32317a374dae7bd712ef218e85078dfaba457fdd882ceae70b248485ad1c22e2b8deae87ed4b6629e83637fe52b5654f85d8be4d411488f76e0c0b57f9a89c74db403e1df4def1f1dda90fb48f90a8b72394197fc17b1f8a019a8c5354a78baaeb5a169e8124f00af244ed8c8a827325ddc59a6c2ace4498537123841d76640c591e9b8c08e9ea417c55831938433af90a323fca1ea0fc804357b34616619a87ebc2d1755034ce2433dd88bf457ce79173b61f53566e1cd526afdbc1da2825e4019b48a2401907b3e5e7859dcf457b8343d94723c88624f9272b776c5f19b4819059 +P = fcdce8167340d450f0a82aad8bab6eacd706afc8a3b0645f652910faf1fd63063b81dbc4bc2b940c03d09924431d02a5d8a7c259f3bd071666f649d5b404117a9a23bef21dbc5186fe967a7a61c7d79e4407b48124bfc85f7ac8191adc8f05d4b47f6b9bae7d5ab832e12d3450a15e09cdf5ffc2764bf8fd194d1f41efcb387cccab911eeb87e7daf46d873078c5b6099da8ec6cfd21dfd6737c057b650d89ed1dc55f29044a2d9fe68a0d852b930eda455fb94bb311f41cef7c895f561174ce9d4d00d8f84856a504997411012524291dc53ae7843bf7fc9b1f09d9c27f159d0a7792f37a378d25e5b30500a924933d8d34c3819e71b847bfd9d5f1d7dcc1ad6211f822421d718b508ff433e36d4af73fd546465a049427fe85654213ed526631ec912d96354d91260a602bce16d546596c6db02f11d54d88466de51a910d85d1c0de06ebcfce97162dc825613ea0e7a2d4c1b66a3ff5cd4d278287994177a08b9c63a72e0be91716112de4fd194af17c19cc86f98df77f9544b1ad9621dce5a349ce63df38eeb268c88bddf716f4ac9a0717d9ec8f10c3d98fe254435a00f19121d9b79011b725b39161f908132071d79236d4b45d04202d6700d800e8ff62734792d46e38096f0ff563705d63012f510653d1256eb9bf42b11b7ac3f2c470b2515254d896d0d35c656b5b8238e0000a5248c09b846db12c79013ae752cf37 COUNT = 1 -K = 472a2f4f20ff1ee70e7457d17085fc23a2ddb5bcfc069cb0adccde05d00aecab -C = c8080c71ecedd7b9b8ca6c0d25d884b9b6c206e3df401eca457d7e3d53c86922b5e8766e7709ae99ba5fedd0ffd944c3e0cbe008943270fd9fcd068c4a8d013ba52476e7f4133dd1eee8a48665721925b118200d504fc85df269940022d932e2b353b0fd360e739ef362517b44ae3aaf -P = 7698f7ea764e97e8e0103ad839f259cfaf3d5198d19f6ece71fb99131fa9e0a97e2583a0eca34a80ec1b2af81e4a23b00634bfa01f1bfae4bd9eef9274ddf06884181ce6b0eef80f6e4aee00cebf3d0d01d946b9be138764958906d1cb613a941ba8b3dd2a +K = 013522cbf553772853f70da66e269b15cc57da0a19de14aa9084307981ebc4c2 +C = 9802e781f1b0ce1b3ede3d2a9073ab378be91d82137e5e0c33c63b48beeeabc84d5e515d1d05ef11296b517971ecbec0e8f8afd05fadc766929e55363f8b38e7f66142b862aa089d7685833d45909ec1609b53744f808b4598e93d09b93d154f5bb1b5bdb7da673236e3b87563646ddb0cc93dc91e044716655e46a9aa120f9149b9c82b4fad2c5830c138fbb2470e2e2d8b87fd3018e06cb7fa282094e5eedb1cc90a3e9ee5b38c5dec67b9d11ee7ab6a471146137be4662a66e2b42bacf7a1f5dc307684a4e7a67589fb1e803065e877ba5f93fcc3d902cb040ef799ce7b4b11ee9f06076d1d8da2d8632aa2c28d70c09c8d2a4cd9fb9e8911b0bcaf1262cbe6ccf423cc167a0c6489489abd38184a98e325ab249eb4f676b4c1315ecec87ada89fb2d8c5a90cd6a7a5d4b5945a24cfcd5b5cfb8df6c162224f8d44bda6d4077a6d31a12b48fb8f38494212d267bdb4d633e3a78f1a1ac037e844d6b42d2b892478bc767e3ab4ff40c4bbe87db224aacb40a45ba336857cf2489db4b36283ab6b19d47637b2604765785f118f02051fba2f1ca492e72d44bbdaab250dc9001967acd2ef2c77e9ffd00e59c4430515eafce45d8b3c7381141305ab66500435d4e4e22e5b57a347efc67c2b9202e2d34babfec2616c6176a85524dbac92c9312c0fce0e1fd71078f149a1eceafadfe70846f22bd7c630e3fc9797227841b63402120a8c670235496 +P = 3dee364dab829fe7477ab7b02ba786b156b91ad49c25caabc54560413db40c72da72d9b91a064c6ca8888543161312632c648edbb0480b5ef5928c16643b8ec921f99b607e21f1efb1fc3c9ed16eff26c647a5d5b20902e3543f22cc717af210502f02eed869e74ef722ca327dc26342cf2627943546baff2bda7ca3006d61fd086bf10a8c5daea5914702be03052b2039a01289edded5f43573cbbcb5e449f358992fb9ecadea8f63345c293326950c56afbb0561e02bf14e74834dc3130e01c51a5f0a095f3c0a5327eb25405cbf5610a1ace57b9b2055040665d09b5bca737ff06cd93824846a4a6efaba9e8d4e7a6572371a886a05110d01d8fabb0f2d1e6f61be53e90c36adc1e8c0b3e8b052eed1486c4bdfa45a62534e04933ed74dff7d91ef4cb432ed7f9f2860606812f0015a4eb21c022f791e011de19f039babe97df3bf7abc510a00ad1e88f585d5b125fa19c8c3340a64c27f98c1d605682d22dba76349ab3b1333d16c1b3a5a2339e0174267222c7163c65422fa0d3d4fde602b003e059e375228c7234765554c83c539380e2cf760882cee3a2467b42e0bf9ec06ffb968d9e17006cb4ce833935d5d587cbcc2bf4c99acc45c202cb449ca0c900c083b0fe0c710a8665051329b408643cc5b36cdf0a29dc3227286cf2db3b3506c874a0e98eea9247c9047712176e84d7f367edc04314afdef23258e4c24a8 COUNT = 2 -K = e95f5a1d07812b8e0ba42126b3cdc93079499e9cdf3a0b25a4e4102aa658561c -C = af0f497d54ce802cc522c6568f2b99071ee228dac29560294d39831e0b33cb3fbf317b60c8e0a536c51d945f598ceb46fcd22ebda226fc6dcc604dcc8e74cf65f411b3225248c95b1e4fcd1533641db2e74664138103e17b4654823fa4560d9c650b1d993951f418d55ca58e65f5978c -P = 4986c8d3a1a8413f5010ae6a56d3bd8c75e7d385cb5262f0a82b1c3255db1d4079192814d5e6e94e2622db47927f7e682d93df37e141e08b6db418e70d2f910129f981a391b2a35b54a87fd5bf6b1b87480b8250735aa8009fc4823185d94024515e46279c +K = b8c953a3e4683f462511f252ec6a80e341f923a9922d2a8b38264fac2b9dcf52 +C = c95b675cdfc8f05bfa0d0c2c843da39f34aa5c9ed23a238feaca275aa09ac3db4728011bca7215504986345c982a0f4292459e817021cc4dd34059eb20b9eed73e158aedf2ccef9d430aaef105487f6d0c7cb07582dc7faca508f5006247f428ed202b306d51079801395c10ed1cd3fbca2a34c256f995d72f5a9af28135a713829141edec77f20d3a7f3053a9f9da9013c11cf26932c5786325705f6ccec6bbca179fda8de0b9ea9e2116a22bd612307c5a4837c76195383811687e3a2105aadb6958839d5917fe82839cb0138900135e4ccc53990e2ef5005e4c9e9d91caccdef6e31adfb44558b85c7290900bd472a0562129353e50f9973c7f60f9f4ae6fef145a575a9ed29ce1dd6124b0f40db0056ab3c2879ca2e647d247e4d0cfc9de187a0c1e7c65875be8933e0a9cf0caad23dc89378846b49ea4a268ef4904d28f9c60a4e9eb325f1419429809a8890e21aac4285b816987d9c6d907755ed7196d0e48f2bbd8a0323c511e89da068da7d5b99dd771a8c7e335fa857c47067c2272dbda6587dc98126f6ec0868d30b50e0cade06c8b2833a3568d70e953aead1dc9d08045d1ae40549399c11879d15751fb905430d366b244b35552001125a50c748c612f8a260f5361e9711e048fe4da319708e5c2553e7662ce49988ac09cebed38b3c092046e209309afd0736767ab5c7b710259333a7d904669ae71938b30aa6ce57ddc830ec4a7 +P = 03984ddc9555e2d57403553da0a8a00ab0d682bb25c258fd7e655aa2ee8236f807e316f8ea766aef5b60ff77a1ba59dd3f468148c6b48f5e2011b487b9f04e6c3f6c1431326c249682980a3692a57f0e3a9d6afd5d01f868385e41d2d179ca821456415586ced4300dea47abff71dff42e81e6b39a42043d5031176567acae674ec232dc724314391da38af743e17c4e93fbb11b4904a30c2aed08de75b73e923aebadd33e05c35cefde1f2ed9ab22101649a1d1cc15cfeebaca284b489c0af30367780b1f16d255284c2feffe9b027a5d83ca33f1ef0e37b456119fbfadd7bd56503a12f59fe0932e5e4826c5fd7b8d8d5d19ae6172efaeec9ab5ad33dee4c0c4fb5babca29d0b470bc1612845cf1a1276ec569aa4166cf6c0ea20ec176f43127991dc62be8677acb603702aef3fd6eb48bafe0488b9cbf5990f5ba4d4ed0bd395e8ffe6b5bc3dfe44e7b602b3cac3ee25826c11ad8aaa6ca536bc681536b26a46360a5db6794e50fc12b5ebe461dbe0708eb6e73fe19ed15559e986efea50a1723ddfc06c02ea49412def0ec6935fdaf9428576de39274cdf132ee76aca336efa24b945e622253f9beca544715fca743a654ef7e669879b74fa61dfb724ad3ae4a2d4fe6934928e73f2d1aa6f6f2e581829b54e8becb407d3a9866034e1e355c94bf79b6c5f3278bddb7bf63ca9bfd19de891ef3b943a6e4c68fa06b53379f COUNT = 3 -K = 33fcb26984a3bc644660d7582a1416521a2b513d5207fe712af29abe4f31336b -C = 3f07c633bc013e2a11aeab04b43854740ed0f6ae3550b7a555625d33f587f914f97c56beeac5e49e8f41494d2a5490b1a7a4f2a69c7d8c1ea15c98f76003f4396cdd9b2698abbbaca892a087acd536b17cc87aa9e324888479ca62a3bf5ed9ffc31bbb45bf5c49eb12201699ae8a5ede -P = a5b61ca526eb0ce55d0a8dfc5ea6824f1e92ee0118fe4b72a7ccbd2f9c10669bc5a366234e5012836b9268c370b606b5353fb475006eb64e5431118d3288cc2c1053e673ce29bebc2cb2a4362b85d764f5cef3fc345160691d8374a6c31811a72d005857fb +K = 8e58c681a643f597585a0a84490e35cf4ec22912647b3e80d7b82ecd1398f332 +C = d0f6010fc32601e37ecc9fe58d21bbb32bcc0a3aa267728ebb80ae7bcbd44d1c83894a2025be459a84a3155519378ca3c815217bb4168146494de8d0ffd03f07269b01793310c55222049b3f9dc59622a18b534197eddf3ae54a4f7672837d2830b21ff4cf5ca1ba446055df8d255095196bf0e9f1843d00882c7bfaecb5d77dafc18fa22cd4bd79ef995f2d6276e7702fa4574b90d126d3849d04d99a283b6084ee64ec5c6e589dc07d8800499e625bcdebd8f1a052211a1bded72dd5076e507c3afbdcf74b6f6b7fbd8ee14de7274dc0c5594ed820d56c455cb1e82fd7b202073bdc09f36024155cf38aadd2f41d5f39136fdc112e59667710c84e498ee31f4efe32664643d07502cf9a463d05f8f996cabb937cbcb17de0f2bbc0168bf796771e3a59221efbd4f1e23cc11099bdd0d690b652217a7c0b71ee2a12c0f190028af3fc92bbb4ea54d423238ef72a462d7bd23d64c88a48dd32bda069739e1bd85dd11631f18fc4cff4ad78d38bdf87d2d61a35874a387c7fae011fb8e5d5fa5167f4d1be4566f285b179c72b88aae06316f4a346082f8cf016a5b9c319b67e9b837d9260d38faca1d3cf929a4cdb704d7e31e577aa1822fdfbc4fd7eff05cdfdf8896e5879945c09487bedaf9aa04f5e13e8f8fa06c1caaa5a5f97b872293eb2bbbc05df4afc12ccd2918c8a4b22e6712d805c62d5eda2f88fa93e893a510cf182c83c9c89f1b9a4 +FAIL COUNT = 4 -K = 3087aee15648d875ad897737e249344551ce4c0c440bffd3ba24c2d9526fab43 -C = 3bd2ed155d996346a00f46475b1d1222a9cc83de00b15e77d346fe3b2b76f971ba622bc3d82963f1e404a4d559ad618a38136f6e1858c95672cf12cc08b31244889ca473f46301adc3c2e5c55e9e5de8eb8d541da78ea33555c50723615559f530ba7795fe6013d751a03ebc3b5afa33 -FAIL +K = 280cd7884de3243e319eacc5028ded2ddc2945e5f2e1958c30f4c56f93bdaa84 +C = 608735acd485da02fedcc1a817fcb9b363c0cf194488072d61d00940bd46670621ad01bba672d15afc7e7a6e2739f3a403b93917ca702b214a929a73a50c0cd5fa0ee514406107f93897b260a94009fffd912beb315ab6b2266cde64f00fc2c7a0064d20ceaa8fb02c4fefefa6e60cea71c96a40a95890d4f79530d76b97ca2d9f68c3bb3bd3b4c5bd9e93fb1dd622e355fc609dd331b2252731818ec50e959046195324fd9d5e0235a2ba4e029fa5418b2d1e488a6290243adc154daa497d39baa8b1ffc7d5ce7007c6ce0d8827e0c1394795b0175c8011106cf9a3c1e3bef3a330d3d11e0bc4ab6162d488331dd6d9f8f79940f90c765c408d5186c7579e5fc12e5eb13acfe31386d8d5be01490b14f1af35c32fd693ec92b976ad6f73a5333374e1f0059c3d1fc752ed149d71caf6f244fdc31a415a75b2eca1f099774e807e395876a5de8ea3ea983047eefaad2e49ab00f60ed8b110d11e4b39e9baae0e1347aa70a71df5b41f33a83574f0d4639dd9554ea36f52315928fc07acfd5731b9e598d9b1f1a54a032015a6343b72b83034910fc3e4ae1de094e54f1b5308f17f66946b42cb64630c2a8d86fbb77963a18e265779053f68a3a7107573f4f38548dc8e440964e351f27fac30bb81f19e98d9de603f306e1b9c75fbb5aaed03da32c203dc7d9a5fb9fe50bb49e705471df5e1bb0a183a603cd352030db1f3f118f943a049c2c9d875 +P = 408e6ce993f0a46bbc81adf5705b10fcfd3ba91a6a825142135e06312bea7e3d7197cee2b9455ea10b3454c535a2a84c22af9ae9c1c02c69610590e7bcf03771ebf7cbac1f88e4205ab59594996d483d0dd640fb4bd535e48d4a13b9ef6b8a66f1f01ad7a00663eeacd91acd22a08eb9973833a8f4ea5d933c1a97f104e2bea5ead21a7fce21306ca56a58ad0b532cb57f530773758d714f386267dd8bc5601e884e7194fa762868b96300a0ed9fdc810056023a1a0fca72b4a3c3b5d5af97ef327b12787421ef9566f3036894e22b91897630aca8d3a28651570be7031b71ab550a46ee2c8d243dab37c3fbae214316b6d4f423a425f8f71f0f9488652bbacc95fa56659e2a89c1bbcce9df7d29c5cb45617c6a9fb2d2e8870bc8db0fabe96d9bacd8eaf12f09dd21552921965fd1aff4deba91dae279b429f51a41ea8ef2f6ac323e690ebf24cd6e04636902282f5d00f27715604d89b21ee554f69b9dc513c6151e478bfc41d3a5a5b6b2c032372688a63f2db1b698ff11fa804d6e31f39f13e042433cc13f87cdacf37af83eabfdadfd6f7833751badd1f07935ccf48e7a015d001b0cf634ac3af39a2a150750bb16863091ce9565d2d5aa1a96bba651757308fd8f6acfdac793bc0c0ae137d3674a65ead736536b80e759196cd22cfddf73ad83de10199dcc5024faad054f5d35ad1c23a0bee1b91a3fa0ee3475bd8a1e COUNT = 5 -K = b324ebed82a398c0a6af48bfdca1778ad6cb4666b8ac4e621c5e310b03f38e82 -C = 7534b1bc0b7cc679a9c864ef8d6aa3c1d621d365454de5294c0331dc512f64501b7536526f985d6c74e0cccb6582f69afa0cf8561a6c5bb01055486c3336fa5891311e234b56b6e387f74681ace3ba54e3780578f7a80024c22b0fd8530647e7cc75d9a9e0e459181848daf3c96efbf7 -FAIL +K = 7fe13c0b4c8905390b633e0680893ecf394ca88211a21d95b8775e1a924ee50f +C = 52ba66a0ff4be0283d7502e2471604da279bf69189abb550f820ff68f2674db125b44bc9840bc63da456fdc0643ce3e85f9205abb713089d9755a5d27f22ac803b2a874c5226cf4525486095d6583937e396596ff8c00fa1a004ae2e9a6656e9708227b9b0a577eccc2f39b06aaf48160d3bbedaea43c52f8b3e68e3fb0cb11c107b87b2d844ce2975c25d9738ea0c38e866d1bf468749454d356dfe33f00e3d062643fe160c18f4adde797f6207f64d18afa24dc3e1c329f1b44c2cb514e7334055b31543be6baee82a2043a2344bdeca6649e0ea9330a39948127b1c014875ba2f4a2e4151f150c960abb9edab59cf76cf70bbdc366f683a6baf25dd053252617637f6e7645f08f988e7e16637f97be214058844c898ee71d5a2fb53b92dad0b71a2e1b776655570e1eca396512a19df8ce4c0692331bb68c3f4af3962316956a9f9d5f9dfb6c1730b22a504fdccbab4695e9caaa11033dbed329ece3c19c68185c59b8bb1da6b1824b274e2b998a9d37890e74327341fb7a0e13649a54c5f7a8b7391ef4b2e0a3113fc50e93c1cc4f9f5e9e6cfd26c02d4b3ec83fc8a765c2675fccc047208e3fdf07fa30bb26fa7a1f336fdb45dfcc3d4c44154b9f19c04458181ecd52562a25a000d6b71c10ec2451c5c81bf865c82965cb3137508fb7fb739c6c5e60275570bbce641e13ad51a0236d0f89e95202bd9d903a9c8692f05d1aa1564dd7c92fc +P = 738b3253724a2530cf048e2c2b0885210f02118f5166d1537b0176c6c0f344d03a795ae906ab8be503f7732e9690d3f617b5f1eafa98d2cf42a075e87c6ea7c03537ca5c6b85be4eeac1f580466f0600aa8805cf38d51a154aa816d2abd8981b0f8aebe4f280eadfcdf1379023a8139f672b2e1d8e135fe1d3d90c739593d396e6a23284888f51ce0ddde467e78b8fd7aa48dc763ad73ff3908704ff9b13dcae0712c308835b3f03bd090b1113d437af42db839384c2c4872792dd487f4144296346a3fa04866538180ac6617a3843a7e6191042d154daec792a218af6b1982e5b09b41e80177be29836856808fbd8a783ebb3c74543d816a941b93648c8d0e378dac7f1907d9c9238019a1c1ab12584a6df8e1046ff0f18cc52dd0ec5b7a979aff513b2fa01a0774b008c3842e7ceda0101c515cb23b7964e73017daf8188910055424a673bcdbd4d36fd1f7f4b5ea860f97be96b608cb899b24b2a83f0a4826acdf1cc85b739e0099fdd6399aef7db64b17cfda771aa38db0e01cbeb0991b83d929674fbf199fc1a9df673fbe475cfa165ccfc9162bbe9532c59eda078bedfb6d176fa850d136301c36d5358c9f16ff5cea27b235ab0c9de3f753484882c388c9018285462846f80f5b995fdc3e5e3f945237a0d6b16592545620dfd96baed17ecb895298ecc94932c2b0f30973f4bdb9804473048428da30ff25741b3e510 COUNT = 6 -K = 52d01d09499e58fe58d2c2991a1cfb5b924bde7fba9b72e8744d506d58f54553 -C = 48fa8fc72305e38c3a0fa66b5bde437f4d102a58a2eebe7607d568eabf23253ebc869095e699a53234f3ddc12e759b402759cf2fa823ce407a934142e83973b99c45d3351bffd210df0a82ed2257690c2b9dce3fad2582220c24fb6b23ced3739e8db2ebb413813ca7308d0e148eeb91 -P = 366df7e1e77ee8405c33ace5dd8512579d4e1cb4070850ea1bdf9904c320f14ccf5e9237731aa48f4d4091186a1c29c9a6cdf0c9a375c1c9d8c45707beb51995f5e569eeb67934cc98e70b46664aa60ed2f790b550b7c4ca744f7d58dffc0557515500ed89 +K = ec5261a6891585282e72a2c3af85b25fd67fe0266d9b04ed6648ea37eed5cab5 +C = 8db1635e9bf4ffe91b3cddc7e825597050399bcce3b5f42d06349fd2738f4644132df384bd3d8016b5c13560866028370972e05b3989f67365b11015b46f71d911a08eecc070a7da015eba04873cb7f2bfae4ba26f8a6fdcc03b4656836dbf8c97ceb13ff40b8c0f0a0dcc7b48c493714fcf128be269a6a76b6a419b1f34bfa0c6ba273805683fbb5ea6b658b5ab6c0309b685e136709460df98a84a036bf07d2d467418321b3985d042b0054b4cdaadc36e84c875e84d69780c50ce7efaa9dac0776443d7f2f1677434cb58083921f0b9cf5e429937fa51d20fcb835551d455d7e83812a388c3684cff29c394e0bf049f18a190f28513d77b1bec4589e3c65bcfb9cce89c00171e0a8bff6e3852da07dfc3dab936767b2f50ae37045e9019376fa778472ac413c51bc5ac458c8fdbb5fac86b23fe0b15e085c1fe6d9142ec5c3711e6010476128cded4f145e041f976b3090546b0239e81f8afb53dbac12ee6c92863e4ea04b3f3af98306ea44b3587a261bd780e23b7a7b1fadfed2ddd4f56ce188ebbd62a30ff258f61cf917759dbfbae7224bd09d097150d99885fc6aafdeb606d9f17b825046d834d654485547d8f07f15d1b131ee49039b3c592a3fec7b3d6c4b25473360b32c44fb6a93ef8237e810f386676bcb695748d40a7f1f655ca886ab781ae2d3052a6f7a3d96edfb3ae9d7c0b678129a06cd9c8d98f8268d7643792af5d54297f +P = 3c8245af7fd2afb9f9903dfefb4daf7ed366b85e6d0afda5977e732923e7b619c1f742a0c745a073412b7c4f9e125892646d8a85a09048410dee6fc06e2c31d135c84bdac2c0dba15654a86e9956d4896b5587fb198cfb7cc334d033ac0672db77a73d90caf1255008ef563dae9e5b424c956d9e5a9427a2161d8ccd0b8b47754db24dd505d4360e123d7fca8eb04032bd6df8e8a3937c38682520fcf38d6a3f41d998baa8271e6c7ab09fa88fdfb40d30b87476fc8a47ead272429eaa324dc123fa69ec5f4c4933c527392c299b7b5299edd2a4b48d9cd5f4b70d398860b1371116ff1998073cb939009af2f5544230e31ea86995f37bf2ed2e57a56c1dc1ff28f2c95a89201b4ecb9901977639da854f4803cd030ab4aca2cabd3efd4d9a749dbcb8cc8c2b03b40d11ed5490af2836bb8f2115eb9de0d9ed1ce5def5a2d2743e675fc833104bf2d1b7f81f5f8595ae186c19e66c2dbe89914aa162aac050d2af29f1c5b166c45bc2501e8b720ce46cf7f808bd567e532742e37147635b861cbe7a9192973fa26ebb5516cb65bf1b98286a58882ffb691d9d7b5d34d5527f1c20975c9c4e1538911a601e3b94fc1db0c748cb17add687fdb0d08f0b3f8c09b144d9fde0121004cfbd3dac0da8d4d317ae88fc208c6ad6083b1943a70e1637a268961fd78c6d1fd3084249d9ae2bfa98f91acd554a3e50a5c29fe67c132bdb3e COUNT = 7 -K = e216c992f952b66ff1ecb2a6e9dfa10a9cf9478a79c8c8af7d626f99a080cd84 -C = 19450c9924076bd2e29126488938211c4598b97e2635b99a1ebd174449a94ab1069fefa7f6ca1811e7472b5c15c90be53f598dee9c52aed179468d24c106d61e28034e380dff6467559b230340a4e8551c6658bc2e86ff036184511c2830c30525156baedd09e06450474ba3aaec0305 -P = 15e811f1daca37aaf98ca28d13dc801f9b0a4f63cf1c60f0a98806e0170be17760f26c881e5f424045b7a1c467c0ecb50937dd21a478fafd16bf23fd11e1d67e0c1641b7d20a302f77573c600ee8dc8c61e6a49be52fe634c884d9819f1130a9997a717b20 +K = edda9d931a6c0d05b844de69b92012a0c60e13aab2227f4f209f47023fbd1d8d +C = dcaf1b9d9357fb6fa98c3ca5681dd178b350d103c1b151f818467f4400726ba13ace66a99f5e3dd0d959e37f1f7f3c7de5490d24f83bd9f196815d7a918e58baedfaa493f3b1e354b04b8ebbbdbc96ad9d47942cd6aaf133882dae2ecae96ff9ecf7bf48fbf8489b9a2eeaa9b41e543998730ec9d7b1afc64fcb7ada7dd095a9a520504ed840b8589750f06fe654bb7ed8c75e9b129a3ca3af9d4b48a969905a1164873e65ba73539d459baa0bdb3ade2b816b14c99404742d94f8eb8d15b6f57455601934993adf5371bf544240611d8b98c2e8ec960341ce9aa23cdb16ff7a6f41b2d5fb71bf83b76d87144944bbcd4560fe8c72ae19fe0379a33f9e95c58645bc459506b01241d8f26b4e3c8a7a7b31c411e67aff9727d607fb86c6231751e272490daf4c5000d025131be963a6b7d0792351c2fb81efd22a8fa9d2c4bb51298b013be00341e93b097d377fa69ff09309d82a9685d2ea617c0cecc8188f8a3b64c55149eb28817e24a3d8ee2890b9389586199f1ab3b4d6eb637a134e233c9ce4ee560e40e19f13a98b47cfd16f01b25ce119d79332aac645d1b356c0d67ea1adee3b06d79b253015a09584e006b3198a30414b1fd8b85bfbd70a27c12977243b3339a30816adc6dda3f609be78e5366f9c0b374e508ff5d9d0263cf5dbf77313fa07358b5c21aa9a6bc5005c30d8be5f04ba39cb6a9051a5db5bb2a0091306e7e27c2a1d3558 +P = e451bef478c7cc0e7e5b86757b7acaf64cacdb5fd5bf159252cdf5d9970fc0a506914339e120ba2983fb7848b3a0df12a78b01748738f4338118ca69da3cb6611befc6a5604bcc3db2b36d38cac16b00e544af8d7e78ad4b683b5fc1d9ee65820ab7958c066d927d068ef337429fe7e3cb41b7e82ec6b2dfc4cddb2400ed98403eda7622d5038004ca803b7f91687a2d2aed195db647bf7fc1b868794db97f86cdb71c553e39f0a45cd926625db3bca1732eb9bff01453b27c7853cea1e157c931b3331be1690d81204a1895f98882da95dbc0ea14d86b23310a56ab97f692d56564c2bacfea9f1bcf3cb36ab811313232c0a137dcaf0028fa145fb43629f685d914102e87eba404d2186d751d01245dec9e2e53b3cfd22e89510dbcfd7fa1b37626b91a62b8624e7c6295121ea4ad5b3d83b2e6553e17b0259716168627476dc63cea040fa1a1df51151e822d0e9b40ac1e6a2eb4e7044acc2231a31723f6fe576d7ff57d89322923633106587524308340c277fadaad6385b107eac6bc651d3418c72ef45e56b708bcff4fd711cb42725817a28d3e8fcd850d55d53be245c6bc0ce42c6712c309c971790388803d0d92960e97024cb2dd5445de50c6e446208caf92c4216ae783fe9d5acc7e28e23d90ccbadf033c05547db62f3b6713e23dee410be0c36ae72b6ee44aee6725c8bb5d84d112f4c222154663aa8dbd7c9172 COUNT = 8 -K = 7975e6856024f8ee1fb934ffa12d47e08ef7000355823d0e2c0e2da4c87e688d -C = f5d554ce9546dad2ccf881229c6f4a8c9b88d4d741fc6da1bd5079e4e22fc28251d9ee7d9a3777b8d270ed6d831b3664f61117e31858338038c39a25cd489f45e3068253dc2e25f5f5e78e18df03c9e92c10d0ec8a2b384027e6df4adb756e11719ba728df47ee22398340461ca08f3f -P = 18c60f9e0a939ce471b1c92053112186dffb676790f5e43020a30f59ca2e8954a2816bf28066cce23f40f19d023a637716ad39e59872dd178bdb2fbbdf63fa874ce311fb79c5c9047082ce042f389b5af489de774ff2a3b2a9e1d813c18cb444446b64edd6 +K = 4bbcbe41c197bd4100e6477498a26064898dd75811e4b977dd43cb5383b294e6 +C = db7df1adcc0694615c6e23c929a271b029415eff90703098247fa52226f3495a991a45e814fd0eb33c1079fe0c7711f8b6162b6cd44d0d473a14c38b671337fb30b7f23871ae108f6eb861e2ed71791304365d02aca3b84e6859e6f2bba0d672f8d18af47f1fc371cdcd4974fa79fd581fe4a49c35575c98cfd60d0e8c8ae50b11ca41151b0e9fd3955a4c68b124cd8f42be7850cfffdbfce67181c851fcb016a9ec08dc637f1729c3a82eadb22568a4c060c0523fb2430f77c6acddb309b3c042cddee659ce8d710a29c284b07ca224381a5a406ab21f04920a8a03794a44ce0f51f88d7b7939c4938954aa8d9aeb0d318166fc1d2083fcd7c79553897bdf1c555367168081cf86b8509337f69aef09a0407891ac1eaa397029b3c08dd7970377b0b68d6ee750b09071e1b9d48998acdd162ed241efff70f66b7bb505185e875472c32821fbabd50fc39a1e1556090da73a3220c44874c37b043728e7e9cd6889613f5c2d601ba8b18607370ee286197e459ed34af3c77fe5c6d49fafcdb71f93f32bf07c745cf69042ecace9982bca486ae74825a922ffc4521188031b1b0cf3c6faac87fe4c5e77b3556c70b8fc315d40a3fdcaa5d0932cdc4bc5385c08e01365e7567b60f497df2137e958c554644affd9fa73f0e462d90a0dca9a20297624ac8a50ff7c7089204d11912e15d990223067b2cb1f117bed918491d4d5b5a82629567809bcf2e9 +P = f6f29287129277c9923f73197d49b39ee5adff55757e1b5f2e89fa890ebad2476b93342995b6a8ab1048e01bf586ac0dd4d100c095c8d71700616ca67887e5e44d0857542181f6d83127e54ce85e507ab5a0652aab30e426b6b9bba102c87019e70b9fa40151be617a12a104a3ed4099b04df706dd801720cbe5f4a0c6173e80e4072201a79a3429f93d9197d63a7797445ece9e51a764b1924db4b16a58b2b8722673f98ce357fb0e70af45cb7ad6562f591ba6921f27b53423fdbac8de8dab5ee0f09f5097863ef59d807379bc942027f10d7d0be6a0714ad3092359c8c783f21505ba69ac8553fbdfd42cfc261d48fb3ae16ef4f763e2a36ae813f6fc9339a4dce7a346cf2e143f894b8a0d6617b28321f2933332542d5cc0b203023484c36d06aaa10141949cacb7a2d04f697b3a7331bc816250a2b77904da54de2f8ef9795d69bd0639e118a7a63d5a9788c142a072176ad7f41b12b9870490fdb91eedd807e9a8d818155d0bd3382436c4bfe13f2000e41db853ba05a3b11c5d61b9ca725988b8d6a99b65307c9b31727156d1a52ea2a89acbf65a84215e331ff51549e9701c95bb80aa18625f43e687dd7106f769d7773e62910c1fc93579d5f6478b30baaa05948b7c554ee87eda3f8e19fb9dd03c94537e9b798872e7c8b3c608e6499a3fa837781850302958d62dea937df58ab71cbe35226e26fe7e69e150905d COUNT = 9 -K = 094da4814b7755d2bd85b037d84c15f42b85c9b429c19a7a3e51faccccc4422c -C = b50b4d9de9712052ac936a85036e07411b1c6ab6a729a005094f91a2c38a98a093385c08c949156ad1a0fa6da65fce935c7a42fd630061874198c62dfa3656d0307c8630466ef7f79f35c303a72d3943ccce491eb707f1ac2c219c24a6c6a467b05a404b96011d9221fd518a4c61d625 -P = 8a8b1a1c129be88db49cc9534f6d8073c2974f1dfe35ac8db64e2c983537ba52716ac8129167eae1ec44772f769827d35ecef46ba8c1331a7b6ac704ec8100d4f2d7ccd83be166445a13234ced1a707c46533968731adcbbef5c31d78b9252b9f2d7c2f621 +K = bc5e98fd41db0958e4514c5ffc62b8c546fee6a215edc526fe575ddfa5b8d95b +C = 189e56dfe072c124dd3d7187c1dec475ab012cc81fd8d411b2bcfbaa8e2de518f05e8d7fa78a5efc550281c42ea963a822dfac1b12a68e40b48d7a3f9af91b1cc272c75d6acb771c346d2b2a25bf867dca10646a62b5f8e7b99defdcfc7e9b2c8fb42a2056edda4500dcf5a5a1d49bc65c11b35f704dbb22a34e53708ad09933046510b7babf3ab202b320bde80cf0d2ba10c189c1f5317c8edec3339bbaec7f777b290616f9fb814ae07123293d4197342fdc4d470108e3b8ab73879a2b306fe85638312390cd6cd6c25421cae9713ff5c96a45dd0aa9b8832f6765e4f693aae6f6a43cfb1f041f972f5f89d030934a0e0453a2918451dd280d781250ad43c180c59112b743d91498727ed55db93466dcca4915d5c3263946e4afb682650e73217cf15901a11cbe408eb9096bc3e0c462f2cc846f67045153165ec71484bd9a4cdb31b78826d8ba6a7bd9f63d6eb80cde17d25630cd30baee95d383c1509cdde6ac86b05b9238e5b89c8604528c9e5ec68fba55c06d71cf427871bb0584253367b301bec11ac59ac9ce980ca0a5a1b6dd11574fab3e676de8e62f87c1027abb030ac2188d6a0037b019ef8bafdfde4dc70e06be41adceae976ec70ba806245748a3ef488693d2dc7bcdab28f67e3d232edf3d10a0c1514eac47f0735da660a978a22060ccbb2e8236c93df3fba91a03ed600f771d6f3547701e77fb1a49eedd40f54c1493145ed8 +FAIL COUNT = 10 -K = 90fd011a8ce10223568a082cc46e0557744fc30d3ce57259ff016f4a7df085a8 -C = 91e3a18cdb4aee2d763884b959981799551002bcf9f66300f7165525d2b7a306196ca72b411feb46cf8a8880903174e73baa3f4a967000d737b937eb3cf4ca0cfde0261ef3bf9b2626ecc60a1724a91b48c76968add8af9dcb30c0139fe636b1f629e4cfebf6195ba7daeff9ccf16329 -P = 7a0adaf5e87921f7a26abd2db56b068cfdd519e491b5b06d51c7ccec981593cf4a490d83392bba82bf0dae05e5ecd615b8d4acac3f0763a1584fe100858b3379b18311d089000dfc30a3fc4b27ec797a0a017f2a375b836038e7dc23b5b3039a1630f7aff1 +K = a7f5c46c4f0b7772428a52729158f696a6cd5993d3dfaf8175b26c078a446604 +C = 62172006e65338d2a705d1bdc3a5eaacc8e1650a59737bfc01b6ec4b889961cfefd9b26bd42519b33c8a6f6a890a4bec909c81161c84be9cd6941d759546833f6469e68befb5148fdfcfccc6c1981ce6020186c7560cd4d09e825ac56da1782c233f3691366da157dc21db2e63d47bc8681065b01f4e482f6b2d8043ac95bef8cb188352f646207dd9d34791e8ba4b6dd6931e05b5b4ac920b0394c451f0f8f57556fafc02189de6d56f3fe76121d5f265f6635aacc379f6d41ebcd28382423fc22e8cc563157c91f6c8047fd9f2bfe55ace1f5a3e0f21a0d7e3b3ea1f81c2298037cf5b694ad1522ac745cbb22da14cb35cd550d2271c45c4b6466fa017038d98cd54c9c6f12b284c5588d9e1b49228896c30c11d3e7393d12646dba2dd9d5441e1c0f1e1a4413a63ef5471f10ac5260bd6a07a230ed70b419719acb0acf8c87d9f20bef81ddfdeac87f4f0fe3097195465dd427e9e48cc772875fff9a59a00e680f9749ca2d1141b953ba0c7b9ed0e49f0d34e117ecf07391bd4beacb8775c5c90a676d41436942dad093b2e5eb0a1876364b4ca3bf5cfaf9b4fd73d1c8a7d9596e467d36bc5ae4b6e56906829f325ccd879613df74f2bf98f93d48b72d79a350ac766d1520d5f41386a0199aa6a89ee7a98bf94bee1381abb1cc67ecc3d1136c1311ed4aee406505284c93839dc1d5503b1efa27abb95d03d84e5833cd25f42d73eac32130b5a +P = a913c42c079570f4e4da93aee07c10a405b3acb55c7711031176ed04c0119e2cb7c873d9f0349708e356260a90cf3beb347ff8041a38bf1c91d8425926fdf2313d9d376fda27203162cf9428c6ccef0ced4347b66fab4bb9fa4d6c14e946424c03a7ae3a792370a958d8a92ce13d687d92979f44b2a90bbdbbcc13c7e166e1517a96bbd494dd4f9f7751b0a751052570037928459ee8cfd893da2bb13258242eba1f1eaa6991f1b8c86005dd0e54a5d16b0903882373ab07f74de5cc7a834b9adac31299d590e9114e1dedb2d47325c10a1a71378b9725dbf62ac58b8b2d2e78ce4e3dba5b0e639e8a447860355cc583647d55141f93c8010558000b9d0a40e02412512abb5a76e309bd78c6737b490e5d548ce6639897fa623b09f6d1238fe0e37f56df5b7de034274e787531e4f149d8f988b884a6dfabb07c74457da8b8921e42ae8ef46d2ea2c92161596c596c9d977b00be5c1e1abc50dfaf1df38aa9f7066d53dd33e550fded4026ef4014e06566c3aa15735da24a15906c74b6473d0f1841d2b33d7ca07a5a2e9ec70332d92b326259c0892014987c54b9eeabc933dd85cbd0f57360203b7b9c56e4256ba66299bf116e93a04a300255633073667c5e3e305405ace14007e9879beddb7a6c4fd1ef0e4cbd6d320327b30b33e0943f6d53757970f872844de2138ff998f30fcaf1753606bec8290900cf4e78949d29f1 COUNT = 11 -K = c691d31d20a12291c847abf4cdb0be5fe70640423e9f481862b06abfdb100c9b -C = 3974766356f982114d0d088c03a6e6f96adf82c0c9858c843d1413234947dd968a1a365f3ff7c6967f74eadac77f4f33b957fa32a5239ae258c46ba3b39dafbd179c073b42cffc09f1f1f1ae61840193c829510ab11e9609984a76b5e0d9969ca45afe7e453233ee666a866149e8e553 -P = ffda69206a36ac69e12a6edfd6727258e86fed738e08f1db07851e7335bb55c3319d4a858db6427e7b4ea4e9a580d7f1f91c74ca0a2e5324c26dca71223e68915fd6287079161592e33928c1ff6c72e92fa94de735d01f5191db4263ab381d4629559e9b08 +K = 57ab45d5085ef85eb9e58a824ee7e60f6580d169602ded01d5baf6b1f65a52f6 +C = 923577c1775ae54d5d4121dc5744777503a46accbf431d7dd0ca257b43d46c83e405dd340c3c7576ab4f5df5471b120f6f1c18ee3d7b52c6100481b763f99e1202fd36ea05b33c44ed3129bd4d43c1b41778dcbff266389aa965c26b759ca9453bcaa5766250c3d634f8d8a0964368b5f89a6c6402576682e9da95dab380752bda8dd67675b77bcf4a4ab3269db08dcf0ecc4409958bcba60b549b415b42def4baa0244e284b3620c7e973f145d187affcf155d12f1810a70421e6a4d7f782b350a1aa13ece26a779ca0182fe5bcd79a9db31d05ec3f12718f766cf80fda7cfcbd7cd525d36362c9876f4b3bc606edb58e4a2fcf08f5240f4f3c1d35fdd3e191d065f111a09fcfecbe1150d35a2528b47fc97971415c3ed5a471bd28ee2090956eae798ae6a329fa258dbdd038323dc540068ff88125b09f5bcd857b72783cb9d8d8a243adcbf24a8d9b5ded6a585a6f879771e5f3a2ece958f60acad82ccd16dc6e6995140e99c426b7d67ddb786b39efd7278724032784b2ec7128e065e070ed05ae7ac0e9869cddf17a9327c9c1065bd00a58767be55e514c3a9f0cb3a04e7f675c5b0f606253cbeb90e66ef004c381be3f2c6c15ea4068008f31d58735745eca7be41bb8c84245a19940287a3529681a629193f7defb016a0dad4eae19197106755ca06c50e96d4b9fa1cdd8914f81a6c28178313df6f53cafce0d361f8332c8991ed357cdd6 +P = ac3fb816d088bb07d659eec67a814b8c6de3d69888a92ae483e59811446e36a983debcf757e57c97b87462d3f1729ce9a6bad0290ea3d951f20734329273c988d6ea1ce84dd7f4284bfab4e0fab5602b107056b196ccc33a4c24bc65844cf69e121c73fa1243ee6e4969cce75cca7bd7b29dcb965c47ff73bbbe78e49b563a7493984fc5140c86e81807f40787ad24c32acc2040e3a7d411a71e20004e19c6fb899e9a80260c15148f23e956dc4dd76191e440d5b7620da3f6b6fcea8d1e820d69d1bfaf8024759eccf5ffd5407a2866e42e87addeb6512245fea77e315af0f49de94b89161965cfd0850679b9bcd436e6743f9a504f3d1c79d5e4ff4bbf7f2e49755dea5a8b997c3e3f31aec9d8714723da896599eea7e5b7c41dc5ec675d9f9c7ea3f1ceb85c337f29232d214ac2c37ee60581f0d4fbe9bb55d92203a6c19c108328cf8ff60bf84d77e2c2d30340cdb100816b482b91ac97a1c8fb5d52b5354dea5eb2e5eef178623e9c5a32aa26deb1c5e7db88489e2113f1cc43e6ebea9d38451d6d5d6cf42bcc7c7a9bb020d451a0a2ec49cfc60cf5ed267406da5dd027440955bf514b5425d3974e0027b573824cafaa52dcdacd2dcd78a085a8a958de043c2924c9199c098add4a1464fde4c6c4fae415dc08d7cf48cb2b4b646071896c10a9963144a1a525664064222d784fb45e64edbf629d20c5f1734fba804dc6 COUNT = 12 -K = 4da25175463963370539a02a63b0978fb76d10d4b08d37713b6c979cd57a9b28 -C = e932a7b42f28fd96250f8df09fd1ad6875b77fab7b6064d5220985ae85e205199c13b42f5267e737efaa52805cebcf978765daf6048dc8eb092d1bc82247a2f16db8517210bd72220300853871dae10be23963d21894b0694728b17127c4476017e3033a655785ec87c69cf1d6a5b867 -P = 5b5e91b1caa35a20d44d0313b2e5ec065f38163a55dbc5ea63dd47adc1d9a7f416b59c4f2100e6b8874083fde4c5abb7b94dbac818080c64b10e8c5e02e7124d751d478bdb312aaf928caeec4a0f4ae8f04894f61b01b16c2a40c058173e302d97eb9add05 +K = e4eb14c89cd1ee586a732b993baa2469d0e28aab00ec2cf443530f79b3d0532f +C = 26431dddf692f5848f252b77d9c63628197e72a78730234fb3cfc0ec8ab18d55a221d448fb8eebec01d91ca2a459002a75017871fa3a6f421340e5b613db6f0a7286c17cc6a21f069c20202fd6893d133c1cce357b6b95c0c52313099731581814bc983fb1cf9f8ddac5bcc47d3515bcbd47c748db5429275942288040af1466a3dd350835258c01824fa0dce519cf6b93883e6395ad8671c581b9358e2941185b956bf27cb604467a997e74123e374ab970bed04b6c51e22b67ba4d7ced1df1f14ba6a08b18974f4bd14f46f270a75cba34278f86e696624f79beefc56bef30f5cfe5f5ed0ba7f5a76deb1a5283f848401bc36e3124e4a35f6019119e284636eedd969daf8af25b933b010891169a821eb19baad18794e4f632d1bc3f749356091fbbc7f8b587f450042ff2e9bcb2e889beb9701631478fa13d08ef2230e0ab9711a77a38e8adce35af1c63f81b1d27d2b5ed7e7912813f4565f755da35de97f532f021ab08ee7a0e739a77b00f007100c26e0e6281f9048082ecf14560506288dc696df0ba63980c6974cc771f559cd0bec5dd36407efe64b82fdfc59da5ac2e942d6eeb4df0953bcced5aa46f05dc003647aebda69e91d863a8aed4638fae736fc269d8c4e2a6f5b4f604615bf6414f229e9c63315de22b41eed93e466930a042bc76a94f69ce471068f5296c6894f817e3526383cfeebf07249c432646535f455b74df3a1287 +FAIL COUNT = 13 -K = a1698872845fc36459289fe2d8fc334df88055d4f9e1b72c4a7c20697c4e7b07 -C = 85f428946a7d02741aff57a9172175bfad2eacff96ff92d02f99fe25edfdc0ea8ecf076df19486c74498dcec57f47f9073eed35aa9ded544dbe31edd38732c6399aa99502ef0411db34fbc5c829e41c05af6b56bb12541bc7befe8f71d95ac50fcda02f0a988e9954952699b7859345e -P = b187cf0b24a2de08ac5917873341b1b803199553f98081759c9b05d1665ca4ef53ae3ceed38cd7f43d85a1171a8b8107fa4a4c6d31c296eb21170fb869d643d539537f4c8e7632176933630b7a25f070ffe5436684b4177072763f957910716b4721c788bd +K = 54021c01b1b52a59cf6f29f1112f275ce8374364ba623ff55c1c0db7a0c3f0e6 +C = 59db9679ca3cc3043d1dcb209b13a5491c508ab0eb205a5bbd55297ff5044ed632353d07ce4b84c9e6375c604456ea4b83fb9fb321b69e142b8d5ab1a73e47ecb6140133cdfce68572253ffa019db2c491e35051eebba5804b221a0c6d48d6f8627cc3497a91c6edc68af3d35bebe04532b9077a00cfb2f1a76cdef483a0676b5191a8121ae8417e17d4850a6199e51454b97aaff2b900cc184e9e7d5ae555a2d46d54776fe24b8d68ea5c97a68a5acfaf42e83136d538c47052674586b955c8c7eba779031e8b2fdf8afcc9767479a870b05d952ac56088591835ef0b041538fd2724aae59d8a195e65f55219d17e017d8b98317c0d8561fcd57cd3ff4830a8f8834f736419a9c7eab9f3bf0b64696b3ef416a564150d309faa904c1ae2414e8af6c2b3de1e247b44ba7ea8c9092c88885dbd0800df703396dcbc95f78e67dec068dd71284e134a31abb42721564f37ebd95eddc0b19f2b630fd45cf0800ac5709efa89e85b2e08d234f1a433680b7729fda97ea88b0307a2d7c8ff4fbeb14e6f17ad886a69fd2e31308863d184e2f906ffdc0ba1ad4c9691877304b282e3e7ca7b7d809226027f96c3a3dd49afd3ca29635d480cc40e0561264193eccb1b06738d1d6c0f97498e9232d3b5fc58700411b67747ba4a2f40dbf4c2ec309b7464fa5ed3473018d64dbcfcb14d7107d8d4d655a479272c5d59a4a2af0f3d75c7f417db08cec3fb7a91 +P = 61bfb6925900862bc9c29e2346c5bcddc4b28f1293a27f963c6cb78dc635bd3c622021a54a2d82291cf1bbee3204887202fe381826746607ac8ea0aec214fe96821132e17041832d0740d2c412ba1a0c54f6d4b748f9ebbe2b2b8f471aa535769252fad6d92d6b66f252c6c78d9cec74c58c89f595a5d01612ea59217283b5feee6ae68acd2a5edc8e1be3a72b613723bc85d78475c12f814798da1848b76dae96283f7cb0527bdbbe599d95de6548582fb021d611919f2810e8a9085e3e26c94e0efa0530d8ec309ed0102294b010c21aaa6f619a41e55a9805ea076e8ed50c0a212c6544b32a5ce8f81868757e7fbc86db9c418fd9088766bd9ce5a5d62c14d258496cf9646985c8ec3b57b6b74e8ea096566d0b1a863ab1c0f486bce6f515152b8ba6e97c8723445b2ddd1ffc08e75521f14993ef5115159beee3cce568bae904660282809399a05dea73132f913b7f07d2c9bc3795136336e9ce2f6b2186e0f43ad3942eb70f34f7a31139326655239dad3926173abbf0794c46c7191b78ddc1a244017bf461de638cd467a883b0bbd468be121f15674144e80b600c20b16d8969f4a0cbfe0286c12b290750a0b4d27d8905308f74c8d2cef7d31fc690a849b77a2c10edb44cc5b3d3a0766a81fabeaf8c68704720c2e8d2b2e0ba0a19cf5125cb4e50a80d38659bbea03592b8184c0cd7d317a60e98befbf8e44703adb5 COUNT = 14 -K = e6b3fce1df1230d8e74272253f5eafb1ab0b26f8625a2831c4fcaf9c57e2c727 -C = fc6ced00b201152541f8b23f5404f55f759eab430c6301e79c1e0ee65cd9e6daafbc05cb86f3569659c1d939828175771472e4ec948398377a4d59754c377df6ab0142d36ec893d5d2d643038b83c961e59ad74e55c8b62ab996ee0a2de4aac61c5dd5a3362a8c580052140c215ffaa7 -FAIL +K = 9b6565fb8b296a83cdf246c93f5b0f5062049749d03a1f7a4a6d86296a5e382f +C = 51c8b36330b76085df1c6a9fa90d2f630708086691a14335ecb546c81fde7be71f62aa36ef862129b44669ffd7f6cadd10a929d344b4523f3bf0655b801e374010221ea664b2c7c3a8ea6440fd2cfbc226d213672259b3dc5f808447d4d50d820cfd4e411ec03233c49d26fd5e804fe4a230232d09c4aa5ebda195c42677fd423719500aaeb458f1c6b2216bbc817abd5b0fd6ce3495b6c889b11ccdd809f19b06cef2e98d6f7c904f1b4529c76ab197d70366e1f732432e49b57db8f5c8aeb683ad3743c0244b0934a49c7fd07ca016707fc4143b20cc6c4c8d5f0f12ae3ec029ddefb0f22660acd50b473a34e83c4593a0fbcb28b99029f6f1b4c995e6871d11ec4118092944977ae7bf56c23d1114e190dd75bc1c3a05c2dd24d98178a2f22f4a0de8308fd6e7ab74b6b659e6031e7d8148ebe2c5805a86c80baf9c90f060dd4370ba3d3c04736813cf352c6570730af88faca2f0738c5c7042259ee350c8956a10043189699bf3a12c3754d278e9537b9e9f2b0072b6097c0c7b87f4ef00524a563c22484ecd4eb3444d04c8a1e239ed9efc07ff6dee601c47b028f94daba296dae2a0d76862e72af16aed34a3b6bee8a9f4838aa00b869c107976545f4156700e51468fbfed10b000419dc7859b6c30a39c2ec6eb9136f741c3556e12f87883c3f9baa32bf984020c557ca6649d634d7451fe633319d4027f67ca9aa8a1d55c4feb80c2b03e +P = 91b4d74dc609dc1e6340049bcb0f9256c70d88909bd2b058e24688f3b94a499a0c741f197c22ace03fdd4c48bfdcba20028dbc2644b69994878602008efef940a5d31d6f1642510ad642ae363abec1a8ecbf9a2ef8e5b928481fef18385e4e1c9eb7aff8f29ceada2dc1474194845dbe3afabbed2e72a491d6285c6ee1c42bb9034130dd25b1eb689c2a3686ff94ef7a9f010ab0562ac4587e076011df933be3f7be69928e98fa58092b162d009d2832deeeebf175b1bd9001f14371f63da9cd3b4b5de1902329b0b2547b6124053ff16e6b71498c276e6a78ee8f8e313cd3f846b29de373261adff3a06de3da53f027fce04bc88d053677547c0944dd847747d1b2ced9ee011d43b0bdd58f282dd096edfe21ab9a8b35c66a9c1548d3b912af52fc023d330e0e216d3ad088cf272d2d79b6656e13d0f35cdc20ac2f705473b551b4d7681f2e9f7ab6ec11b831bca4c2e19ebb6e0dd0dec14ad70437a6c0a03ea292f4a24e1c2bcbbbad1fe083dbe4b3cfd4d59bdef1610fac9a80db1b9f244bac95977e41085a48befb1c55589f2866cf025c5681506454abcba4a81112f9883485787ce0f95364ed344b113435a76e3c9d4681a382ca3f77945e245f42bcb0d9015d18ce42f52a3da19e86439d4c0184fa0dd860c443c7fb750d1e093bf7e1d3885bb115d4751c54bb5904292b10e80660f3cb6c72228d72a65ecdf833155f COUNT = 15 -K = ebe33ba537057d8f764e0248bfdb747497e489e3d3016c75e01a078fd8762e8c -C = 0033289528e1159d6ac14df8b4a6894826fdc3157a77b1b5fa8f50651934accbe0f925d3fee2b2987d939bd49a2d79edc137a690d9c2deeabc239ed51f5426bad28dfe0d5fca880384785c9ec6b5122ee73257b1d373480112a50a028380793b79e9bef15a0fb5c1c98d52b4124a9765 -P = aa10aeded60cc1041dba05c8b558e08769b5319326922376952d5a54eea257da79a50be3d99b91d170db275fc3708282a891ba6686bc2032c49aa130a2b3e61a29b330c63721bb2a1d5d718cd98f7691c0a2c05eb92598f0e7c430ccb811c988c7eb2bda4e +K = a9b53d700ae13c4de8187524f197b1031b24b66e83410e0c5028f59494fe7968 +C = 53ccf0f068ca7bcd63014fef660cd888328ba71570609930d10d998f40c744f2af487564ff96139d6889232c9a2921103d7b7bad4751549b78a244e70e67d4e989c35647ade6caf14f42c9dcbc4570db4ddf16fc9c802ae7c040dc53a5c92a131f8e8d2802d3d542d3aa6e451b762b5ee833f9f652965a77ded23a6f8185b8fea23c086a6655f217f86c0a1b850fc3003f07fcf4044feb1f16dc430bcb137a094486f040788e4d91e4197690541931110e98b0fa737ccfd8209725ac04a55c69f960956853cbcfe0e47b70a8f65aafb122e1caf0947dfd6a24bb4689a39336fd4c5726e8caacf98d5cbfcc08ff7b566ad56ed32d950e6a2fad13eb6cab5a9d129da46596b46f955d519740fb529590f45a09448b5beb45dfd01aae23bc22c016b4de29f6f3f8e52f897f508df8759176d7b927ba1f298619d161c2afdaef667155654eafeb1177551a22c58efe31792e0aed9eabf302043e000313f961456b74e4031194c4f97ea3a81f7a0b6be0a02baa4850565d9be3b9ec56d7103cec64053a3a127eef44dc813292ce1abfadcd6b90658f1dd02e611302accd0d38cc6c670b1c884fa313a91b34d9547fb93930efc6040614fd8456b6cce4d8a34d27c62bb0309bdbc961b099afd6e1e74a379aaf3a8f791821f591c298e7d88034cc0a95af0d43f76392d356ede54757c64463e5f5dee0ae96e36e37ce3af4d78300008519771ceb61c0b26b +P = 8fdc01b7a085a12684d67cbecca04bc6ae8fe7ada4b1617e91317a601169c427f8969872fb97dd6da8d3070f734850df97f7617e47df3e89ee782c7fce1f2b5231c5364f79533a7f8d7a63800e328b059ee9bfeb5b78238049e1a92145ec657fbf30a7ee27e6ce5f611f23b639b2f75e7a82862b0e061cd32e0884486ae300bfa62d29189b8f610934cb13c03ade73185e8f6db983a45daeddfbe34c012d4132fca96ec8260c9c3230476f8345677e020f04b849f229cc40d34f677f3e2e415a52dbfd94ce6a10013c2ecfe81505dd2554935351fa81aa1920a57d9e630d9649c2714e228dcbeb5c2b45bdf6b2f83c01cf739340d5364eab95c7b17cc9d7182643af7682b378caab4c2329f36b12c703151dbe4c2c7e843618338d700689a5fcd9d440ea7b830ec365a8813c895ffe87ca44d4f803dbf140f538e29286d8307d5c2f0b472d6fe52b5e95c1925d185749f2a9de08b6de0c30ae740ea8d7c654ce936298869ce8d9b22c51cad97f686f9d0a0ddfac83622e78896e453a1a04e9d34b0e527f9267457d29a4aed475f22e274cb2eac4c256435b292dd4c123ba8849defd880cb0b5682c249c2f1249f9babd7bc240769faff797a17fef19fd0334d50ab69c27740204f48de93e33516cd4c0e495915d2391a2c70b14ccce0456a0bda09589c631a647b42e7c1449efa0dd2e75a26fb1118210a281f6566853de364a COUNT = 16 -K = 1dc6d702bd39d2434133b1ef0439faab6dce3394ce11f591ad1a459383020284 -C = 74feb1e9ea7f2ca77026411dc76e55ed12cd13447b319beda8f1bf1aef15baa98665f8ecfcd36435254a5ce4b78552ec7741395772c8e58cdbb535b00120835308184465997f05ac707d79f73fed6f1cfaf65e1fe328b4b252f337ac6839dd8dd42476dd8ed87b27c6e6252fd9995214 -P = 2fd94083c73da37c8ba9c04423e9d9dc40087c1c1b9555713add22c5199cd9dcbe46c7dc41ab83855f77168340745b61b8e7057007da61ae3725b9ebcb9d70336a354ae7b02e9777c86b868bc7f469cfa84d2eb663686408b95de5690a2274006a6bd59fa5 +K = 1d861d29d36177fac9423d617f7791ff8af6fa65354b95cff9313238236fd418 +C = dda944ac34f3c004907c67be1d8a2b3dba5326becba599089a20efcac44598718622323bb1d3f4b1b1c975ee9fe724cbad17196af25cb88a4906295e4f371066f0fd88cad171eb52e86e7ca63b3386c3363bcc062be8fb73cf50efc09da71c412b443feb4e5248b91bc5000675785a3d12a8095ac86f5f35fd5e62b9cb2c723cd71df985363e86de30c81b7d77d1e8f9bad87b9e00ca169743085a570b13539f7ee216809a89ebb58a7708af6644cc0f84ac5f024b568658322c29fbd0e3f7db08194630ffa89870e4545ef912acff6e6cca4125473449534bfb3b9818354b0e2591b969c70bd0cd6121151dd10a5eec01688ddb7d0a3fa07e01b78a48887c1496e80f897d557e3078e24918c564c7482080a5fa8abdd2f930f49a9a9aa697f3e05681ae11860ed23881725e7681b0cca202dab82964e09363e581118fdf204184e1e04559e2325870b50387995c5e511f123fc7768b29022ee948a014e447fdb151442824692eb0ced3258bed3cc1086f13122c6702529344dd960093333adb287cd2f6455377e6647a108b06486309a7e7ecd9ad168ebaf2c5a44a61424ef3319ec888592dc2653e14f845d0431180248192e7666f9e49ac3607e4433b85a4a8e2fc62d58165bc54ce254e010a8892ca90e5bc3c9201b5be23259ce70b3c019d2f6dfd3e9996bf979d7a746b54608ad512aa49e7912d6c653d094d22e5579bb017b42e4dabf109 +P = e90827c38e1b260c8edc850df24af68c1007b2640595d95ecde06720fcb05600034345279b0daf3544a1b49b91ccafa20ecc5cc30c87590c4a450737a2ef45fe9288e2e75a355ffec26f7446a128f02fdfe3d2c6f226b9d543f810b376565c495945d005e0059934d6e0128c9986f108895828fc71c0cdd23519566fa16d28e9af82b946cc8d650bd881749b2bd0113a5eaa6868b130968de5df97138dfde7678d082e5b48ad5bf66dfcb62f46517947df6365d143b71840e223626d83c97a264d61b1e022350911cfd443d94f40167dc3b26d103599b694ce9948f9d9a0da897f8a1b0e0ae81eda99a5bfd8ff200937cff5fc6a55fe9c8f54ef346a1e6214a323d628610f9e15228e73d8537e97d00a12d558627856889de0408328cf49423083e1347dfffb1b0403c2414fa23e3b10ef3199fc8ce2acb6b9ac8b36a8caa8b4c4b34aac5b039a79fdfd9be303b4f68111cb7c3e56e62736c10925b02153e3162ae8ec0604258c9371908ba2f7ac8de4d9d2f1b770e1a364c5e1dde7aa831f9efb282e1ef27231ba59ccec006059ae8b005bfaa03df8a8dfec00f7175db7eaefc45cedecb7af9b7b0e6a238558b0c9f75a10b96cb4e06fc70f5119abd10e99ec3bc97f98706d755070a2d14a4fbf6f448dd1c1abcbd50239634eaa5c17f7de1ee8db2f6a201f654f578495e74b5d3e953bcdea076275f35c9be2b9526985494a COUNT = 17 -K = 6392dc4d06244c0f81b4c488db5faee2d4406fc53fbf10ae8d1949eb2268f75d -C = b0f1a02bc7100aa08c009ea07414d0b920f54d69925d0a9c8875512bd32d02a7d5b5a059b380b46d7c1dff3b3a2032387049271b2d1bbde570311aaef79337b179617936048f42708db47115c93e98b920f836f9bb622b2f650b26b680eeb8429169d3465faab187779a29df56c5fbc4 -P = 18b85c7480958d8567d04275caf5e0be79e2ed170ece5d11e6b5d98376fd6518e7e36e0960f7777b016990ce30a63ef977cd029519442e93b0e997cfdc12f1ef1bd0944f9296b3215d8c6b9a484e906330d0e32a3bd67d824ab364037b1ca2d1ba51407722 +K = 16323313e90ee046b8de5e1488f120cf5e8ddf9b5f99a77fada1edea07c00649 +C = b3b7cfe2c407306902e2d39125c73c56f4f79c19c53731833018d7ab828991fa935f9eb7d59ca4c2964f9b4af09ab5fa0f8106736972ab77d7a819f7f6f3c356b5af812f00d8e08541a3d9d99d2654bee2fa35b2b58daa26315b0e703acef38c7f8871b2ae1c1098f0b0ea0df42b616972677c1c74eefcc186366b534ddc24adcb9711f0afea0bce0872d13501766961902d00536a4c696711c98118ef2debc1a7451e1b997f896150fde75b75d139c599691a5705a644b3acdae785be9c78fe75c5b99b7bd0adbc90927e2931be079cdb3340ee0db8c315f06b06654003ba157efe49b14704910c2b5c1dec8d22a35394eae644854e1b9e7e7b63409bade1649a7f8e025bc5d3ebcc7ab04b4cfb0e8dc7e2459127f77da13d0b8f948db913dc167b04c1c0c2a97805c728c0f9749a0bc1d0566aad3126b54dea1409b351f7b0bd5d9e5f4eae9ce6c7745fa3483f291d1b0fb53ffe9f7fb9484afeab04bf9f90b1572b6132e3f01d2da7899dbf3d8c2c6242f7ac311dcdeec26077b17ad0f5931d07e2299457e574730b22da23a5a82daf8ca7803e22050626e5fcd1672cba47b4be45c9405c7f9c4b0fc0bc0cfbf06a95fdf17b66ae287acff0f20d90897b11624ae67513e43c24bbdbcb7b94b5b625f693fa184d43d0659bfc5f5c17b3bf7db8eb7923af474e0d33720b22f86ddbd34ffed615956078c0f2889e91cba7198f31634dfc3675e550 +P = de5102e933cbc66722978ece2da3774826765cffddd91ee15066b371c6b6cad2fca888fa8212c64604b59793b4010f10836b9ba8840c993090fbe8f7691b55a7818f9fd4ce59598f872407b376f1d2ef83d8d7a23f2b7aaeec919b54cc24fb6be7dd663074bc6b45815e8f6c655f91f93ddd2689927fe1cfec62e79691af59263387e2e164e852b5a11bb5f8d857bcad784b341d1be8b65c921a1c5610b68ca2b862f4f6699454b05992e3dccb9e5c06627700de740b14319f3135a91026ba4fbf341477b9dd0e26ddecb7fa5cf64de8591ce8cc3ed27f1abd843146220b9c5e30445b2630e0f5a02de447e7a9ecde4274ba3f328ce8e6111189930825a7cc244eb246f50888c51881530fca5c3ba91436929029eb4f6d0fdb0c5b629a5fc0905121945921de04b158f8192ded1e28a6751c1b29f8e04ab6b0b705ed39bdafe5f39bad11a096afb00288f568354b962ff15bd7d64cda650765003bf79b655b02254e092e8a9e962ccfed91825bd0537920be8207e60f7fcb1037f6ad29294bd464f0ebb9c7e7509990b3f0aa34726037e8829fb4ea707badf8f5e23909a07536682389d3f2e9c5e09f167417b6d76f3101bf15a494ddf0f2fe9ac6d0cf620755bf7dbf4af82674e0782a90df2edfa85954b6b098cd3e25383a64d2f263c4091b9878a52a14074a30c0514bdb0368eebc816f99b6a46e946ab476af4b5c120205 COUNT = 18 -K = d6c9c844a710f31c4fe5dd5a60bdf8e1ed6c37b64748a469c5e022afb9c400f7 -C = d584d1ace1f376599e65c77d1fc37a26e9422d005511ed1ed6bd36aed3888b6f95b547d15a39250392dc95910ae2c3ec7c549afb52efbe73f80ac236b7016b5cd156448086ba19d9a2f8450d1f3aac7fc47ef4d6e105cf01121c26b5d5288eae1e444744f5e9af8c2091e4e2213b9f0d -P = ea6a34306bf04ea30fffa68d4e5e778b42bddca50215fc810932e4bc60c98ff1708de945793a5c641cbebe05a2d7dcb1d07c61a1fc8aace812af948cd2b7b553e3ddbf1526eea4bd2fc0bee757f1195090c7f90551a6f354b37e5d99ad16e261094062e7bd +K = 811b8dd9c9a2d389b7b2bfe97a1f5eba19fce20151ce49a1338dc47b9f452e17 +C = bb3973a56f4b347b5877ab498d6fbfc9904edc333a2bf8ac5b3a24481a87307e94fdda697c1a171940e0ac834bc936d3486d6fc4ac039acdb068db2a64446ae00f8f2e9d9c72f60545a7004efa2a7cdce6e5c9262dd8e1c77837e4580cd47b7eca2ba494bd5a9d5c5a8d88855a8d16d048fbf922cff3438f6460e18068b2199635ba688bc684c6f10f93e631a2868666a69fa7333f23ee413cd2ef55a2229b7561e756b628172fd748f2bc203605d93e75190db314ed849d7b21bc94e8a8a7488d0c8e3263799d645a4b168f5318d189b8c7f87c9ff4afcacfc08be6bb2ce414878a54f41f8d9dbde0e729dde08b25d026a9b0e0271a51adf49b8884fd8fe0356e7bd89e3a576911942c14a6934c130e5cf7def254d81c3efcb0ad893a6f06399a085b28531ea5920384468e7b365c8cc0985fec847288382e286dc95616cca608d2e40b07d9bf67cae98cdd0436e14ee24ea200b274453c838d37da1f8268b16b91a554173af2005821b63c03470ffe0731d20b15d520fa708b8adac7308095e1c8e2d90a351375687af67a83dae3ac8ab3da6d353450d84f02c07fa9bd694f838e7340cb6c3b2fb1a160326c8c58a62b13afe6520637f4a2c7b965810c40984cdb5d9b8776a4af045970f6430c2f5c1882c0bc40a50fb74180f666e508e0183b10eac5fe4b1db3492b9ba9ea627a2935171de2f10815e0a98a45ef024a40a31a94dc9784abe3b3 +FAIL COUNT = 19 -K = f14cb6267479c90263495011780bf671ee3b5005de0421d0f354cd01db61035d -C = 41f2b4b777f0d68aaacbb0be24954e5d87a81187e53ac4e0c252e3ce1339510b0ea24ba6ba880c3603d20e7f43a5fa8b26d342d91f7c897ce7044cdcfb222af2223d83236914e71f772b4f1adfbd127464ac4bf108ac1fcd7af6eb14e98397f409a013f7db1855f3d79c3cde0ac5fd99 -FAIL +K = 8865d7a069962c58fb794c2de7d9f09cf7e77d484b35f07c221d1d685dfac31e +C = 5dbe54b826bcf2207442620a77f4785b0260974f06ecfcdf5e8167540db4851e09494833d95f940bc2833b86721ff92c8b3d75412ec5ddc901247b28d2da80ac20f9c5245e5d7692f56eee80e60a78c825baa881fa4974f883311a05a47d6d1777a581e2bf059a59d6b6802d9965bb1a4fc054b124198a0177f050b0a0038d7aa97598b055398aed3d3bef064de386730a39ebe8902b37077519be2b9f181f75fc14931c60636bd1e46748e96834b8335596aa4c349f13bdece714308b5a4c297490b50aa80aca90d3f55c8fd3db7a1f78e9362d0e15cbac0ed462ae243ab2554cbd2897d43f2b9bb6feb5f14dad541b6ce83d4ea10bb5c4f4c2dcb7c320b5438f6a99658688b1edf140cc2b5c584ece347733663f8fa9c969e92ee9294bcd332ee4b3a0850daa194562dbba16edd0d953962380934cc066aec54b90c64de16cf631259988e3d2149c559525d22403b754a1747430b38b6bbab238927df2f46a8800abacd9a88a4db43715460c1fd372dc81e27567c13d5d7f6a9e38d4e7f8e99076ba171f0fe0da7f520b5b5b556fc49bcb7237f27622637aadd5209f5365959925578846d5e259d0b11d521eb40696b449df9ac234d027567a73a6d90eb52b3797856dbb5a047b9aa33893bfffaff95b733317e45b136713e4983c33607fd6eda4ada9f43951a36cbcc953b71a8c953d7c81ef2b2dfe23104015acef3991ed0e07a2fe23867ed4 +P = 8f1c9cded5f1324b857e01b40d04a935621039a96a73a9ffef92fc48db37409a46ff36cd3c64fb5bd978ae4885507d5fbe3653980c677096daa998648e0f09d92fa39ac906f1de89374b7d35a8fcf29105d2d95d1b6a0177e5c1244d31fd5a22bc80c95afeb52ea01512567493efe0af5dbac47f1f8b49f805708710728a3f6d068e5b46fbb5e8b0abe5d64228a3c70e310f45e3303b977ef5b48cae917edc0c3b870fa5c4b385385879e994a7594ad921db34a17cfbff3b25b2701dd5549522120d70fd20b91161d9e8480d665e5330dd99c2bdfa8a968eccc83044a821d5726dc10e0c612caf5f47d88994124c586512a7b46c574a14cb62cf167c79d58283e0c3df9b1c9c9b8b761d8694a5b82fe26437c5edf50a36885993ea9c20c57b176ddcda83fe6adb85624cf500ea576d05b29a4795469af669fa40513464fe8deb89e92d0c5645d1a0b8cacb9c1636e1db54100fb4e401f8c4b883c25bd1277f671b5449cace5d53bc8a405dd36baf2fc50d214735ab5c939a2253df36352b7cb1185ec0511a9edb677927709764d4c4f392925e9bef4f21ab50a17e8fae3f918be635c034c66e143dba86caaa9ba6aef208e3dfc4d1525452c964a5bad6faf11920d461d6aac0b68d12a415c5b41c55e1ea4dbc131b22bd372117ddf889672719bc29993705df5034ad38f4ca3b647ea32bd37a306fe466b3a51880114805227e COUNT = 20 -K = b7136dd17049fa5938d7255b82d224f15a613949e9186b9ea932da829d336a1e -C = 66314ea26ee3babb26896e87ffaa21826cae9e3777131ce1ed956ac4cd04de86659083431e8f771d74fa687cbfd831f9fca951f3c2d033ed38313ca41f8dd63cc842c0487aeb2435b002efe84fd2d3f2d9ea48b5df6f7728c43e0c852b6e1fd4dadd39cba515121942c02c0e2f619417 -P = 49253eef8992c7fccf4dee108c4946a4a9237445bb738704875525631fc2dd47141d06cad7ac3c4fa4e70c6211aa47e5bd29ec1bb484f785873edcbadb7969818dd0cc96981c52d7af745822e3cd878c5aa39fd7a28fb87e91bdeadf3fcc75e203dfece49e +K = e5057f89268944f585254d775982127adc20942773cbb4e4cbd4185286a11645 +C = 0b594d4cf1e7b095ee7e41f018d2b28669a5019429ec6ac50568843bad34b59ac607e29c70a5f2eb2f3400c4e8924d4308e81d18488636021113aaf1e544103fd44802b43c35af058a7335553e48bdad6628614b7a3db10c85a18089b5f05b1e1754a69a2658432aa03f0e8c358edaa829c6212e4995ef6d3bb3f793234283180e7f7a9b62c785ccfa0b92cb3a876e7e556ff954196389534d4e866d258218a899bf043d0b466fc88407188efb8cc176dadf9ee7ea5512b3b974e03d8735c1ee2d0a4feff5f664838e04012e3469bb94260fdd5487ac25fa52a91e60049e586a2661dca0ce15a932b0bb726f00ed9d6b396ab8de6e41775e861181c966f4089862c166307ef6fa8e6cd3fd0760f4303a9bc6250d6e28332548dfedab451b31dc67b74976f3bfa0ff872c0fb4ebad4509589cd5497a36d3aa7a964b7c0d4bee85fa7a0ba105a0b3de2bf6187e1f271fbc707628a8a9a70b516d775e0fb8864032cf88844f20b75ec7f0d77f7385025ed0d5e57fdcd79cb6d827f6203c18eef953a2a2d58b5d54b6e222a280cb85bdf6c65150868b4010d5ea52d88dc09c1ebeb7a7e974c8e6accafbfe3a85f1b419b45dfd207e8038cdbbf3e5bf02abb4ab5a4d6ff46dc980477c03bb367344822fc56c098fb2e484c27080ea4747fdd874fe904d9fb4b86f7e03eb0f8fe3c795c8b1f392498b1693a6a8dbba0b57691fd9eb0b77e1a3da2f758452 +P = ecf8f842e7e7214b1b3c51525026517b5d13cf9c602747d2242edb62bd3d303492d4c814ee5a1e2602540c5439693c5f7aa78ffecc2d79e0416eaee4c2892200aa21fa8a52e881d12b80eadab74d66654ea5c044d147abb635444c5c19e5b38aeaa3ca66944af2f9dca8be97eee2f7ddc15c283f2844bf8ade71831851b39ddbba8c3ecb0503587a91eae745c353806204aab22d4b1d75411655dc59c605a0851aef51eb363968a9b09a814acf2198551f12ddac79dca0993357991fda5e33cb005bc8b937660ba2079e0ed7ec292be8f5366a48069c54ddb74f4343bb9225ceb427c761200c006d997087fae3cf778b44785b7479d2e76121741cc51937b8eb490f22df72e25ba829ebaa690509f4b36e75d23cfc5d696f7cf415f845f12d1d1cd89e849b86d3f030fef066d83111786d45b64faebe29a0c50f3dd74f39dd1a7ffe35960f28b16d4cb41d833436e568602e9efc50968b0de4279b0cbd7173d7c3a70f41a77f6ca5463e051119d0d45bfb70cb926af628de473f47dd28f907e30e2b04eba2f751d99218e36a7ace3b082a0ce7156c083804c1887a42e3128b0faae6de3a7912ea218ac179ad13e2cc288583f4550c6a9672426f236b025bb99a32735acad2e7228b7ad773a895d8cbcdc6a128871c4b30395ef6b99dd190cb64f6373c9d1751aaf098ba76163f116367adae6d1948256c0a8f5e776c293fba79 COUNT = 21 -K = e53fc18c622f5bdec6b5d5f9e14925fc2b4836d01263754d295f6695502d16a5 -C = cdde2a12fe899e3bdb8e0a24f1bd90b30abfe07d1efee82b84a3fe36bc1a56f04e6953cd8444d09ba8fe6650f7d68a5da71c6f99cbbffc89918485d49425bd183cd24e33ceba640c5bd35317a458361b5d653ff083b7ae0b5d54733466df053b4392bfc305fb4f98e50f120d9b550777 -P = ecbb167bda0a83bb654bfcb5e158a26e93595bc568689d605f2601474185ecdadd0dda92c118d22bf6193d512a7af4bb90434d6da8a05b00913d157df26f4b6e1aa57573dea30d86c451971f22de755934b6c9a70c548841ee50c07dd0dc9fdbe950f96172 +K = ad05e9c7581b0f4aab3f8171d76a4da62064f179bc05d10b1e81ffa85237f40a +C = 1df52c755bf83f7f72a205a34953d02de77a379b69424f333cdeb2cc12cbce7b4733b6859f48bed6da1280b98e436516123a060c1315aa2dca8430636026b36c78a0b67431ccfa8b2121081ddde8f792062092440ae6b517799a5c55fa07ebd97c33f52e73f5654882fdb70dcbde203e0cc7bbb979a3b89b82dea5322de75f28d78bd630895f7afd74c4275d76107220b7dfabce77826117c4334b437b896b8ec3f52fb0c0ba9f7c6c6c85ae92e115e742deeb8be684dc479420d94f8e0145c19bac877033aa690771431e8b1f5f44133ce189ab0ef803683a4865c427f7692b5db8c9cd809b7156fe86c75ca02d25b6c73e25efa217a7b9bed7b1a170fa5d3f01b2667b11c12f4073300f5603cb8d467747c020ee1e72b85828a55478054ad1993f9baa9f7ac0dada4a71dfd3fe5b89d82070fc2861164795b07db138eba824faabef9a967b3ead1dbfa73d5dba8a046ea8521980df42c0cb6d68c53e5e6e2657ee8028b9bf47a6d30035f1acb0c5d519518eab17f85642c14600442c70753fcfe29d0bca84fa23f0e0be558350b26b5d33e194b4959fff4c80e86f9666763984d1527f4d1b72a4606d1e85f01e9784979560bb25b0b7c564c9fe2a67bde992c01fc0960faf487852c263c70030321adfccd076f15329a8c7b112397a90e1ff0a3a092765fb6ac382e4f2aca7d65c4162a01c6cf8d1f5984d85b6e9953552442f6d0c932b803170 +P = 64c70478c415b1d76bf0f014d677b794ae071fa2b0db8754b526410f152c444e22d89575dae6f00e21d338b59528029d433b3e382ab1f32135929a2b65645beb2d042a6e9c22661a8b586df252364c66bff804e5bc7f9b0b55fd86895b5f94e390542d51b6ba38e59100f9ec49c947c70dfe705faab8abb2f1100dc256f7d44c4e8f1d76698c0921050068afc17b56ab8b69f93585bd84d501296f31da940f1d67e50bda0cae7890911f0db673bd05cc49bda2431efc064ab93af8725ace0372050cdd1fbf8d2e5de8efbba8aca3ccbcd05c1b511ae2b34cd304788194cdc8a909d4e9220b861d7349f3fbf58838799efd8c3dbf798d29291ca32b259c646456a44a64aa1f91f0597866f07cf901a327347f840a39c8744b05eece6c2adc979f897ae2abed36b82a5c60cad7d198463b0d2bfce059a61409fd2a5e9a842b61a22cbfd2d4ac4229728341e75981eac983d5e4a74d3d7c734aa69c5923b528febea271c78342aedf6c856a497ede674e6d40580972235674dbb81bbd192231a79d4969ef9bd0da3ca3f27e16edd4773a257758fab2f7a5909246951a0a0bd6c2e4e3b1fa0fae13404153446928da50b0a661ce8be0aba4d723622400b97e8efc8843af62c24deb9b0520bb225c44030583410302f61fb093e78bc3ccd556ebd8bac6442224423ee4ddeb18927339513a819ffe698c21027135059e428e234c827c COUNT = 22 -K = 2b47c9b0a133e439258abc3a56ec65ec3a748970bcd7a17303fae424b2dea815 -C = 7f8be4b79ee4383cfc946dbfec109f15219b5b481c2b82536af47668292adea924d53b9252192ebbae348b6251fe7c7f0b734e7c17de66d04ad4f7829bafc54d709e8bdddd138648b4baafbf2bb2924689b94d81325cda9902b64980407680ed0eb17bb90c4cbb6dc7dac202ebe33487 -P = 9479f37c2ff0708ec7bc27238658eecc2a949d9395288f29108179bdd3d7038146f6b183118c200297dd2cc01491c79284474dfeee849e9fd5558b8865677be803a84fcfdd6a51f48349934aeeac27d5cefc922aa616771be055cdeca7441aca37f573c11d +K = 85df613864414ec0eea2c5655422688cab45b25b2ad20d4c094c778e3ce969d0 +C = 0297511f31c2bac4831b4424e53455307d2b9cd62098ce3489b54e3c3fbf1161789d369c8ecb078ddc3d97f2223554ee0b27d1ca76e2ce656cb7ccaaa400bb8460f735c42f83bc16fa21c417ea371644962f19da30f2f81aa1c533d12d7fca205c0794fac9e907fb5547a4f4b71e565a9d373df5393ca30476bf319650173b9225515c7cc086fe787cc5dd81c0f80dd365b42139c1d04eeee735507ebfc7f33e63ecfcc86871300443d513e3b6143f93c92451aacd3c1a6d66fd9dc961d393565fa8de72486f9b5347df47d78d9fcbb0cb0f4294c8f185971b5439e9970ea93f68ece0471750c51f5ee4635a782eff0f962936357adeef28a39ce6455482868b29dba225b21ab389aef68cf307e61e4cd0ce3eab2e34f6435bc697c2e39e51f9bd36d1a12bf84b25efb1e11083c4ef540e58ecac21c3610a65f3c0495674af962afd21cbb4b9bf219238487056bd58aed128183e1b8db5e7c1d0ecccd5f29e4d771d3459b0da0dce15d00251b7e6d55479cb6bccfc6d71207b3b5a6d3e668105cdaddc38b97da0d1a8677ffc21126882168aa390db41e012a4315063966f6d2f70b6571262ef3135cd48dab9b45af507d4772d0451fdb1498281c8bde14619bcc59dfc37f7dcb476ffec44f44db62dbb77fc9ee0144dee42b1b9d52ca5399d8dce674540253cdc49e0628bbc42ca9ae92b241bd636256a8c75cfd79dbed9e09deca12079f87119f0 +P = 9239138e0085fc1d3498a5694ccf9b067d5ce46d54639a17658109b656b21ba52ed4d3fb2684bcc8ca4c3674bb3474fcdac4a5cbec55e841fa2051878bbae0d0f505c6602da63826ad6322a928e05c02ab5fce3ba3f80ad91d64ca3f416510ddca0d4eb10aca101b9a51ce7e87f5da0d7bd49a9f5c37f8c6c560f8522e9be53b7ccad726795ce447f68a1b1057fe93df5eabb0c259b6582841e7149e0f322e25c1abd0c7187048c7c25eb9a0ba73a75ee332434b1cfa021745abb58450899f62b9a2e5592ea3064597d31f178696ba1466c7d41da67e459057ec51d80474e1c87dd73b26c7b443d5184d0428e45b0a4f9c6a89fec66fb41f91ab44403b59326b58055c0e7235f99ed6038092fd8ac0d829e3fffd5d753eb62779c07a2655c178ebda428d778e1bf99242cf71ff7d6c8a850ccbd8a98b9c62b0b9f6832989c0913a6e1a1750afcb154774f87fedeec18de99e95e8a9ed4f5333eced96e4b5b5e640dc6bd48d58e52f88b38c1c43e2c31dd80bf049e506fb574ec7b51859e53c30e153752e878079ef2f458782a13ea7075c10e12ed420f883c1482927709d45ecf7003feff49e2036579d42095b51a20d73fd91b39a561fcfbdaca874dc90a39b5392de16fe3c1e557875e3bce07386f0a2ba0611aa03ab5456cfaad15f2ed8c9a79eb84c8ff7106e7b752854afc8ca4fa07344c0cc9ee95ff00574ca2c6c744e COUNT = 23 -K = 4134066a895b9a9bc976fa513adf37bf9134ccf8abae91fd8c72a48eb24732a5 -C = 5b2c76a3880a68085a83214bfb577aa2b4e0192b7f4a01440cc86777b7dc2dd2904b413544908c23bbc8b0ba1a7358913e8f9c19437bf0de031af87a23117f6bc3dd854aa888c980865ab0e9bc2731cab66aa13a84141c29efde5620f278f456c57cf7144ea82e6d510b315256950614 -FAIL +K = a174ff211ee391347b33f7b049eb9bb9eb1b11697050fdd1de76509a78e3e3a4 +C = d4205d90e17c2314e3d8c0b84ae5026cf57d7baea6e0aaaa4cc9bba0206fbe79d2dbad636993eebdc28d4ed180b02c23558b77bf6917ed4536951f3db6360a3f61462161cdd9e1d16106511f87dd4af4b0856b5f8f79e0e54f88a92cf1db42784b6e80ff9bfc385a47e4e134c052a636977ea2bfbe8a85dfab6b50b8a8538ecd450433986cfead0aef61096a531b7e6d2eb6e944213870a0322fe717f15faf6eaef0ce9fcb25920da83a4b8fd7d77840adf9ef57fe30c33ca9ee94e1e8ce20a26b41e5685c7ad3c2ba6908b247a5e55e430707ec4db4987ff4460b9481f0506a9447ffd8205d6d1a4fe95b040525d5f2803d67906ba9c1d37da69e8959ba48ff156819f3d307bd2a138a16b832dbfe815bdcee471050274702a4ad6e262cf93bc3f044e0ee65846f544bdcc178e62b689b97fb5de2b49a33869df0b199280e94d658af9a3270622f4b168f7019eefc6893db3bf01480b7958bedd6137665c2c200e3f45940bba9eef974d661202150a15f5fc2275f07999cc1282084286d55c81f8534c74ecf0c7f20b43203e714d65e1ff20edd805550da3eec6f25becac36122578c031a211e61a0cf1c800038a4c9ca18bfde96a1f0b143bc42b0bd68adeacf5c050cd3d5491bb6b80fa7596052938b4a98a73e2c6356dabbfc220be9409544f5baa8ce0e10154b22436fed549c40248bba49f19ade5731517ce294e17bd3eada4bd131e0f2d6 +P = 92c4581c7c93ad9ce565c7a416e6c37826dde75324ae5e6d376d4517151ee021d2fcb54b5e12102e69085b9d7918861100aec55398b3e1bcf58407c70429b6c98243d52922665b44dee87657fe935c4f2c669935ece41a0c2e5c6ba2741976c882a55f7c9d0f9c3f539db6e3243c7010815a3b2a77c4546c3dd76e6ade62fea2f5f70457a32205aa250a619ba006404e91d0b4b5d850033c006a031b354adff09ed0024746847ddcfb520aa394a131ad728c9ba3a7efc351a88a8813f9e47ae96c7e843b4c134550e2932cbaedbfe700650d9ee0a234b3303d2ec769b510340fd47a3e2943a89bbe38b9f3b54df55bad56bafd984c1fc8b3621b4ad6243b2ab3f3f050511fcc971a67c1817582992c14c50b4f22ca3054571a869d9a5fe2502ebfd9ed645411bee4e66de53c7b3350b74c2984452ab36aa8bcaa44a10b55d8fc351fcd2cec2fbfe8fcdac870eb2ceddd6500bf9f6d8a7fd9b12766c2e70e08a9c8f1f1f50fff14069a763944ede97510aef668f4d8b655626a4717041b9fda8bf8296a30d695b670af85fd76bf86ca73f6dc8763314b72b8c9e7f3c3730e819c76c5c36d1e11fc79e7500ca28d100d4bdd5a25935ab8367306f46d033773c806852515c6d2802076968faae034705ede1512ee179253cda9742ea492d92fe9fb351886f46b2b322155dd25048939e90a2ee0e4d9d35c8165a0a93d6e49b64a73 COUNT = 24 -K = 52c57c51dd1aaf0d62c802a3f806e3a937e9863b7c6a24b5a5bcb19927035474 -C = dea4901fe6729f49d8d2d64d89b1175b49fad259f8c8eb2129beb44debc2440c2e41e0912174a32f699ec4bcc93fc15190f82912901263f25676e42ae0938d5f1f5db75b8c4ec0fb7ebdb858396c208d17b312f7ec2826ff61f310fcd627d51dc8d2eeeb64279563b7891a41dc123f5a -P = af1730c61fe7999bc947c86aaa1d3a1a33ad31b373dcfa82c28e33b6f6527cb2fd7811b90034bdff2660a67332dec95306f2bb329918982797e9b525d9b456deec9ff51483ceb4c0d2664b7c6a5c9830d622a5182468f7c05cb31efbeda266f9bd57fc32e5 +K = c7f37dad70aafb8359123bbeba3238116e98ee80d78ef21184565cb712535f17 +C = 8d3303192392f7bf9ecf99dddcfd12c40b96402dbc2a64e9251300af99dbb3cb31996d7b7749dc0ee93e93a4229b907b3471e80246fd9032a81f8751b18581291d9091f78b36e1988e90816d1e4841cf64394539c69abcb5fe4df11c64550ff1bece28409eae9c70287272d56947566f8f6a9805123ac31f071877d2dc12c5e89ea5c6885a51084bb70c9874e35650d74aa798e75e3291a63fe1adace69424cd9ed163d73a78403ab5c3f80c44af0645f411c59e7b16afb62989eda334c297db7a46371cf72ed55a932aae07835f00d76d784d030171a70e8a2318db11e4920e8e9ee6872403fb17fc72c26cd381e5cc84a2b9643ec8d35a5b741e33407a26a5821ff60677196caad1eefe7efc98e23048d43e4bd6f7e2106b5cc62b92daa575cbb91c194d915587aed5366948bf62b024e10b9c57125006425e450cda94a2a4ffbb4fa9a8f551deb3d0d8498d909353abcbc69dda1c7d10a4bded46298bacab25887f9dfb8e7cfc142860308a712832add1d7dfcaf80d87413c88b9dc0a19db92c8f3b4f7e01bc61cbecb3f618cef39e32434fac13392dfe5151e50631c4e7a1d2f785395c9d02b032da3c748f745da6720e82f28121d4d68d2f6d82319f3a8bb0a62f6dfcfa04f99bec9f4eeec477d1304196670ca127327a4246108266457353580476a22ab34998cb1d5243c3ecb2b47e0dea9c1200c2628748869763df6ea0d1b5d48bb8c11 +FAIL COUNT = 25 -K = 35348eb900976f885db2f3fdba5475cf4e4e6384dd49d4920adeb34770e8fdeb -C = 5ecab708a772c5b95a982c1cbec7688ffc9e48a13009305149bd55ec4b4080cfef405baeeeb21a8945cd0cbab532cecf51557de834a68ff1a61b2a7272ad9dc19daacb11f1b0719163cb236a768c60d1c913d4f2803a38a98d14e9d8e6179a57675c20a5f999a7ffbbbcc73d9057e878 -P = e7867cb3b9a063873b06a0a557bae27343e1163d6b68571bf0a96de2183fb8e5a02946c50df8566f71ac5863ef68b858a03ba9a76ca4df36969e4ecdc4341f0043686764808197c83f43f8052656c8aff8d04f56e17098a101577e0c924c155399ceb8376d +K = 38f57492f293fc3d9833c031503f641ec4578c7f5e3b7a508b9249384ea37461 +C = 8d91d2fea8750b879eb089c1507e7fa3698796e2489d7009ce376cfa6c2ccc7643702b80fa484d56eb7d30bf3ea0f7fdc4b2ce4e072a80cbd14c43c5714988b112df2e0f1317954368c0a74f6a21d779482002b979c767c91c55dbfc5ea649d1c421148a7443a61aa3770c006bc0c4a756b413510b8cb775a417cd9bc55ea7cbb6940a1ba573561d07284cc2f7157bd2ad1b24cca3c8ffaacf00ca1e75006c5e0597c259cbc32c70320c094aea79e93b167e57ea4c3662dd72663e8a08512fb4fddc9c279ad78dd38dd6531be134227ab5e7b510159fdaac82144abc3bf4b7a1dc2b1ec0b057799473c68848813d81927af66e5fd4e0bc3837e847373a95532430fe3deed23585b1379cb55de316b988a1c588894cdabf3d1e5bdf6ee9099eaf61aa1c0ab7114fbcc48f983661cbadd6653564f7267eaf93e6aeffb7d5f41f464e10430bdd08f7ecedcffd6f0e5ac8b74326aacab0982a41a36029e98270955c4fb1edb48c0c3a5bda046a96fe3e060808396d517cfb4606bafeaf377c3730fab7221d7a445a077e5e61f2764bf5194cf5f2bb19f313cea98a672b9fb319f1e16fee19291c0b32813a6d0efa77db644278418abc3afe6937229a50a0fe043e3953565c516f6d804d6de678bb7ad2881a47933f1cd7319c483c2aa78139abd1d3edc586dbbc200e53573ab9dc968b167fd96136671d7644d730fcd3a95c8498c1d30226f0fed183cc +P = 53c6d4cc03da2fa1e05fd87b2b37b02c27ec603f1cfa599582e220183c8be9bb04d743431b75d12887eaa7fa91c8ef99f144dfb6727304283d526ec3e26f43cfd56dbf238f01f55843586c6a58238b3e00775439ef13d7fa968002f8f424fa9569802ef9838b110b51d5f503424adb8d221b8d0fb3bc1cfba6705416187931f9a897d7c80b110308433ff75000f39ce0b3c2883de6a5bf440fa4a6bf83f0cb70b04ba6be2c74672966d1b3c30b776783905292c8506015d86404e78183b417d1f04365d63e8b5a5870624c52a0eb546cde5dacf7752e7a5f5e7ccd78570ecf19eced321c779061ff90c02e7f596153b26037fb9f47de6123b2fa7176d846d404b4b9d93e7740d88a103f14ffdb97816c23523b772904a427e406d56b900d03d48363eebab131e77683e715e44134ee83ef53418bc6d7575585a9ea969c0cd71612fcd0579f87cffcbf029b0c9e23651d8c4af7dcc0263dae35330eb9c70d17912668fe1231a9bfd36a40e6423a2ec05a29965aa73d6d1e2433e0728879b9bb92e53c4498f4d4e6fb3149e2a1b9eed637c968029e4ed0204270296221e5ee21520ae30ba5085125f679795f5fd3fc955b5268d4820f3e8ce0656d319a24f93761cea56d511bd65557db861836abb02bee569e54d1372d48ae71a7db2c8f6db472e369c48722d48cc11ca0e6aa5f0d1552ff85ad00b14c48928ac9697392b47447 COUNT = 26 -K = f2dd30eb4e9d338970d54b7e789a8da4dcdeeb683c40e68f9d2d7ce9a0eeef0a -C = 15257fc0cc18e6cb69b9d329465fa99bbcc7d89a32a5d6d3ce518cb30197fce2e9f7593cc635e68cb59baa0b8630bac522bc4d57284a2eabc74488629c4ff3f9eaafb940d69c7ade579f802512fe3a78aca5fee45fd313a15769eafe151d37bbcda52275957754c94a180a798e08803b -FAIL +K = a43106e27c1694cba2b689f55f49ffe2fc94229ecc56481c63c74c25f1e0d69a +C = b7601850345fdd8a31e64ad4c2d40206e97698d4957b5a3f7bc5d05f3a0a02b8798ac400871512a8d205eaca39996938cd00f84e35c6cc854bb6480f545d2e51047502eea87dc17a908373ad193c54cc5cf5c2c3f291aada4e35616e58cf09bec85a245671cfaf7096cfbb3b19cc458655dedc4e8d711845b0b4699fab9f3c2cb6480c4e843d16453be4deb026b141c74a48b7953a86a5c26692c4c6e9994cf917fb51d4243a155fc5a693553804fb36479c8cf370ef366b5a62f1f81cb81f70c4e04f101909ddf7e0a94f2ec30d87711466e04755f992a948d8cb3dde5faaf28983afbdceb4ce1de9ee703f8ae21dc77534af5ba8ae69008b095dd57a5f84d74bb50b2c5d9d0cb7c426542cc736d9564c6100b9e93208375786fc201719366423a2cc35a7b08044dcf969566cfcc8265ecdb10e454256ec6f263d6df734b3d3fd3e81e3e0470b0d14c073bc0678db48db57e0ef3294581fb3bcee6e1e4cca1bdfafd1c5439a7de4a28fdbdc8ba7a3486b94669bd5ecb16b5742429644855821669827a16c3897d8c4da3af470ad98767b23511b4b8345706365d9c878bb3e038f2fba7c2edeecfa272e88b2453d0695b21cbbca2b94f507ed323599bc1972cfe2c51ff61c88ce6117fca3e6673531885692ca0a57cf4a22d3195d23bae0e02fbc36d38eae611d447fd53e59d78c8de1f1a8e518d1d11adc0b84ec600bce2975577087acd8a85111 +P = b4c01e2b15500b539f134d254bdb3d9141d3d9e637a28c6c508e43243daa69ab21d916d187ffe80ecec882ccb91b8d5115d9eca275211fe11db6ce44a6222ba7451738f0b14560a074461ae12439887f291a947852fb9085cca07850aeca895ba4b3f29108e65494fa1d6e28b1398610bf40b90027f20380a985e156328eff209a89b27ca8d0871883fff1125d41733410359bd2127a763ea312355740f8aa4fa7fd2fd16739c84de4c54fe646c5319bf880daa2dbe77288c0e3f64a1e2d9f04db3c95ecfdc6795bd51efec849c75e5a610dfc8e49c8a7eef4f25bbc9e13124a44490b9159b84c44b8df5751454628487bd45d91e648e645d6ebe3b01e4a29d1a4970592c1b84a67775e72546ab77b4afa16c8ca7f09d4c1cad4511286b9e458a16f34efc95bd9207fbaac537a5b01d0c8e5842e79ca8325a4534c4b4ffad4baa39a084aec0e3650526c0e9436b0e5c2b06c61702eaaf9188680a26b79383df987e5fe1cea42eb91b83fef12b392c53ca7ccedce472eb7cabac72439b6f4b9512eb8f88898888f82dd71c81c99d1d6e41bda786b4d9139da57adc5ab879d3ba5ed1ebde77c6a49ffcf95b7fe93ad856862cecb65e92e4c4178993d67e14c51fdf7ba1a033daf32ca004062ea66ad6da314274e3acbbdb4e7e8cb91794c118cac31fb4cd62cb0f4aac2cf49a3fa544d9969300b51141f2d6f348cb6be9a2615f2 COUNT = 27 -K = 695bcfd110fccc2ab93baff288f882e7b1b0bd0a1a786a314c8f431dbe4188a9 -C = 3b8767b52fe02fbf0ac9c456ebd5563a171f7a7a5c1f69208b9b2a53f351a9e60a75f388d984a737d4582ebe616aaf2fabacc5d117951a941e7ef2a60056c95cc5c80e9608887e32285aaf2b2f4ec78f25793d7c21ad0a25c4ee4972802aafd18c4aecfb5529c0b4f12a4bb2d822ff1b -P = d452f4be7260bf2989800ba9075b81ea4d0f039dcb4dfd296d001057277daf8513c29231d791e8d81c1bc65128f35c671a3697aae806540e13f23552d42b796ef9ad9802bb4151c39c636ee58c9d3c24f2b4f82f36a65441ce7c6cf58a97766a8d93097d84 +K = 2412748bd3149b746413c8a236c94639f4e82e28704b6050464bab8a734b6e08 +C = 17470d0eef784d62a36c0002fb0479d8c28485c1ae8604ddabdbfccf963cc4d6a9d6585ef60eb8c16f2bc2198f772a26100768dbc630f59fc1c92e4ee4c9be1ad1c3c2d0ead00a7f6abc6d82a618faa3d16c2bc19c84cfdb9000534c5af76a3d618b533db0d63e5e5ae64786b6091bc59d4f75058518177217c2f7f1a2d22caabf095fe996b7bf7b5251daecb400cd6df73d85fcff7b12150143fe7fb04233fd8a471a3cabed0b5ebc3892ff2412ac489af484d0fb94430e9c263e8363c0a02be6159e394712617dfdc0de506beeb8f629b6b96c195f03db306be6e84bd870404e84c923ecd65580125400ce06e4d0cf3ef706c72165c2285394ca670f1ded011d2a1390e41fabb80a2357cc78319e6d77bece93491ae15bebce6051349dd9b03aeb3f14b252bc1ee722673587a67813a40132efad931b181682191f79387f3294ef09876960d97575f020cb612a3fc056656768ab4898661eab95cf8139b7c8643515f3d58359cb68dce0750884966d2778d2075d8e4c4cf76f609f743ee64cb85490340a8c67d447969689473d3e81dd52ab72b17db069aec52ad2d8f4ab6bf2bfb01196f4fa55d7616e76573a7d7fe63ea77d9d5b0e9fc1e19844415b1f26cbe522a124b7e8f385ee1a9a02e3c60f19744443c6113456d35ed1dcc8e2f34c7b3c8c5542b891369d18dc3bc15314b032c26db887e29bf6ae5bf90129c292c411d7b93e9fb925c5 +P = 1acdd1ffae2eaf7ca3b1f7c84b207263615900236e79854ea7da64ce0901dbee364ec1c7496b5ad7867860922ce7570a0a78a8b0b881fde61a31fe865f21097cf73693a39537843887a9dc2564947252c39a2949f810b3cd3df8e9ca67e094f053e9bff37e76ad3d904c8f26f99125d4cc35167f5df5ef9abfee9dc5f6fe18f98ed909e8d79489b84b0fd75971008fb4def0cdcc72fca9eafdc64a8cf5ecca6a854ee81ba6dfe7c2747e44a04d128048bd7cf6bb19917079b782b68c0bb3c442163ba205000e53251f24ceac002a24034bbeec4fd6d881185e4141142454802e55a901119c82c11c12f828b6612a3b8f1fc8f9ede93045e103d59524ca24dd45b8d1f8a567200a79b00cabaa8fb4251cf745299c9856e8fa5312e3db96899b938db5ff256bb2e87ba291642660a77abc7e4971915b7f4cf10c2c4a8ebe6fd6915f0c018e33bc708ddf6f384a718d1981d1108323e40652729f426c65023e02b5453650af6e01fda2853b81cde04e2fa01f7a3fed9e8beefd3432886062f70b00732e155a04f8931b47ee5be6953089d01f4cd4a5500cd0d45e22879aa9ba4c094847e5bef59692de5639ad810461b75abfb39345ea996733fe15a9f566cfd909809bf59773f29b72de9910b87c527b3be4bcbfd26c7962a9947684da23481c0c1f292673d40797b4fea23d3f2be40ed0652c0f153b250484fee42aaf7c2a3857 COUNT = 28 -K = 583804374d116bd5f05a5e854ca1aa7d6a2d3e010a2c0a4381cb800dafecb20e -C = ee18dc0e903d28690df2273c10c4a6825cc64496779ea85a08bb748f4c05710f34aab08d6d188d25b9e163de652c33c9026d7e1e7d3739897ad8a9e3544751bebd2ffee7c1bff27fae5a92cb25d6f27bdb675f4666c8b0d93283a8969c2d17f8bdadd3813fd1d25354f6c114efa6313c -P = d60dba712e3e976159989a0fbac4889e94c6e76aac17879e8accfc60be42d1bc65530996fd2facdf170cc6b9af4af398f1ee47d9a5a765499cc3cd52a8f5799320a49cd903f9bc4dd8e967ac6b6c7f01059585e58e6cfc53c56cb6ee6658d872d74d9ffb1d +K = e7b56275864b41fa5bbc429257d6f539a7f6f8b262441b014525399f9f216d75 +C = 922466bade8f883ffc201e4d24e660bb7ec14ea9d1bf6ef80462c1e1d77e61a47359367a65f58e9439a086c96d6158e25eabda2adfa7badeb39780450f241ef8813092fbb4873132a24d27afc437128255b525bc04c769a05396704717fb7a934948c682bceaa0058bcdbeaa46f795b652686bbc97934cfc96c1b29d9b6f0ca790b6387a7e8d625afd3f638b38f3bef02fd871ff8f67ab0f51f3534c06222752b732d6450a757f89342a588f0c48081405c4ff7a862419ed078c448fabbc221b33f95a1c09c87b3a9dbc58ca56b109196f7f9e8572662aacf2d595ff8bc624b86ca8e8cbc098d82388233b178c763c20bbf3fe949fbb38745402ada63fc4777353d86ce2c202ecbf9fb8656b61d51d2608a806dfabd612debcc8cd65d617c35be574cdad6b6812018a07b3b7bb3e64e225eeb76d0f7c53524e7b21520adcf28049551be5e3250d81e3baa2dd854e783316ca713abb7c2060e39c5e04447e02f017bbf6140f249ce075fcdaa5f3de04bfdcbe21b11c6b5aca8efe4df51ae05e6e5f232b62d2479d45eb81eed347669d06e4e861aba88ae9f906c70759b612c1c5d79a7fdd44d702cee4dd9bb84a7e9641c4a79b633415b0dd7061ff5304e3dfef7ba77f71ce52cf36f4e9f0dbdd4e10559666bc6cab71a9d5e7a9da61fdb1812fc2524a47a322452a08ca4f103506bc1477a459405a7100c5d6cb303a705e1b3dcea9eac19f1cf863 +FAIL COUNT = 29 -K = b82e277ae353917a72d8bfa7026f38d4d79ede5a1a9e2a99925b101777f91e3e -C = ba0209c103b5b7b486d0c8477948de1b8419ef72a0e2c15519389eb881c726cb63bdbd6c8d0d6f791d6e36ab4203a57c34997e7e4e1abab711e809f928e7887ac224528263cac3d9dddf454eea480c2fb045f0744c1f2b72a8d1482a0b2b5da029158f42135a71d039290e797a698f1c -P = f7a6ec8140070b7da599a6980669c7f0c677d583f248646b34577ddc6aa3a0490a72107104ad1bac842b010bcc704dd46e753fe09d8a3d5becd8c733d070526caa7d74c5492709810443464869444e1bbd40e6fb99befb5195cce037e9219b87b5e66911c7 +K = c2c5c7378356a94156a139832b176c5d9df0cc457460cf231db33f405b23a3fd +C = 2c6d90986de4c509642d81cf0b6cf758a5b0918859373d3e4cc74e9d54479d514f5162740c2fae6247d9cd06b531f95d7a8b840710479b0b2d1c0ecf014e30d044e602ea8ae617775617bd2e212d8c68f422c924f5a1452f40fc28d94dbca4550227cfdd079e938dcead7568138cf16f60b61586fb87d8731789a1558a36307176a64d93011227f2d9d788a4aa84558238406e3326e5b1907fa594b7868b4711210c20d039253b3618ebad2f049a39c64667503d1ed5967dd30d973d07524a9d511d76d25ef52d5e4805c978628d35aff973a2ac137299c7fa687cf457d9011e75504f954762d179a7c7e3f187caa16d1504613825277cb05e2596a8f386bb23940892cc184a5b6ff7119976dc3b511931b72d20809df317b98017fd56fbbcffa9ae7de0f2cc8788a65c3e09c574e9bc3b84fff7a34b1f0ba34213d3f1835c2a80501c51dff8c76a3d393b7ece903d58cba2a64cfe60445598f6bc44b29f3da38d4ee7dc7a36090e637f11e10704b1806be5de5502c545ecb23c37e34309db6e7c95455e1e8f7fa5984d5866798538b257ad9ae6974cb4335327c2fc099801d4d2b2bf1e5ee84203663857a9f22fe1621662695850f3408ea2c3496bb9f76540a984d2423a51a74d081a5680d2388dec24c794d471b2e8eec748762426ed99d0f122bddc848d51d722e1267ee7fcec88916d0e8fd0334e85f77da9a3a0578a8d3d2d62e46a09599b +P = d0d5bbec20ad405f4f822ac415248c30132e19960ef0a555637d70c9086cbcc816c21437df87207d2056157e507b6e7858d61428a1d09a2d10091c9e8fd1232c95f4cdc47228f87adbde0ef6f6b449fab304de19d1b7114e2b2bbb2f22f7b82af85b9bf7c2659d8dac2c1725b832cc5b4b7c2182af9f4865d64d19aa3be38f812156fe6c3151b9cc8712d12ace7a0730aa2c61fbde1e62fca5f4175e6ee6015ba23c45f14cfa343b375622e433166f2a34507eba0786c5582cbe89641f0e42873c61d8985111477c77a3b84c5348630d5c466e94076b16aef81b02fe8c624fb59ddfe467343f0cb0a20b52c9fc94f989ad98b6ff72f20dcd85bd4c146f6bb1801ef3378c5a2298394fc701fc672f1ebbe667f3d71e4da839c84925ab4a2aff463a304e58f552d2f5ba85472575481eaa630640b96798b828ef051d0acd30f0a43d4fcff9f88d254c468d416498437c19cb2b2b70b778e8113fb8175aeebd31764db545987dd234706fe589f1a513416cd0e3a2d18381bea4d0a3c95898d054e0f0284424f23c17c82c2d389c5a92a9387f235b12ae47ffd85abf612271ef142c17c9db9d6a24878a8ffb3b5dc1a2d93fd438e0d2c615a555bdf0b64e19005092cf942d1abcb17b28cb10793dae645ff25f7a94fa0852370180b80760436b4758ba91f660500ca0bbb32c3751a65bc2e7e51e95d7ef1f381f5220e0610722085d COUNT = 30 -K = 6d7290e9e99cb6a03d992f133f12fd048493d7f3f61f2c995448c36bf6041d0b -C = 3af138a751356c6302493a68e4e566fbe89b52b7e21107e3bd722187444af05bb6c67c3b49cb19eeb0694c094abac299a73d21706487181bc58decfea53a116e417d2e90659de14429634c62156e6a7947ef5e7376380550adc313d265ac3385dde3875e5562a5583397de44005b934a -P = 131a4716d278366c6fdb2d677df0b493117803983370c4d078bbdd65508782214049ae52a3c76867c225d3c2dd5136bf9861bfda63d4a29b757d520e715a2e108c50c599f81eb93c4176ddb84ec3a3fd1ce5ce27c30e3f74c516bd05e3de63bf94601b6aae +K = 876a85525c4a31611b73f59d39db07e1fa07f5aa10e5c97f69fe1bd0b7e71325 +C = dd7f0004ba4d5622787d657d75a5425f1f2439cbdb09113514eddcea5fb68ca7eb35090ef0f023b9028c6f284292e27ccfb24dea24d4fc4b4af370e867d05fdecfd1faa671b1c4c5b63e9d8d5deb0296af5a12c66a4d3efa666d2544f31ba3eee6637dbf22692940357b8da497b5af71dba9e79680d942f3b29082dae3d0bbf377c850d71195d4510ba4cac0370f89c97d0cdaff935e8883c44d278995779197d5a537e538db90f8bc4fa4eec27201737f2babbf2ef8551169f48c59840da15779edfd3e3ad379b73c84a4b92b277c3c559ebddd52a793c24300b2446d4758a43f61bf22c078cd1f6836d9513381f170672a1020eb20fa9d2765b30ffecd6be3330e304d1e0c4e24ac26b94f47143c289b1c37bb47a2fe4595aab619ed915b68297eec6b40efd6a15d3cf68de4173fb2c1782615708cf16f41f1675392a371e6dc80816355625bd1973725a3d098d22473883b330d8e9047d46df66bdb84543d3e211ccba3a14f0dcbaa3250db6f7ebfbcef7f0c7b7e4ea0d21126a636626025aa11e446e4ca0dcb28b38b6dbbb436452be44449f346c0908e87d3cabf78a8a0fa83eacc2b8bb8890c4c5a73da289431a564ae3c73570d61729efb8473aa29513a95115cebb0b6212f209a8c38d6d4305d5dac4c8d617512c4e134afdeb163a0fed25b16caab25dda69fb13d7a16f9a179a45c3e8beb24686ef69a3673c39aef109d3e7e2143b223 +FAIL COUNT = 31 -K = 2ea356e8d8330e35b6f7e17a847901e0428aacf30e7d8cebcef90c4933a48f59 -C = 6c4f1549edaeeaa1e654f5994c83bf276a3d4faaf78708b41c11e64f2c6f5546cc20f71125df508f26678a96f17408ee92c174a82fe30285adc3b2ab9427dc65301994602949af953f0847d9920d4e560963f151fc3cec99da45ac3277c79ba1f204ccf5ed8216708a55f4730ad55a22 -FAIL +K = fa5ceb8cd6a0e0e7ecd6d9284d6bc3ee82d4a6a47e5a52ab7a62a2afe26ef589 +C = 174da804c3f3536a48e272519c8791b528737f6f6c90906823fe6cefbe150fa71c326a6d47d068a2432e1bed2e36499a833c81d39f5bbfbf19cc9a1faf48d910cfd88d9a1d169dd40258618895948fda385e3b9b5991b96f7e1271c75da220e2d24355052457c68b71dba0e912372ff3897fb23617cada7483ba306e7119ef493d81a936d70010151e845ecb02a0e5c8fc3762418abd4a10665c8df8e0ef81df9f6777c931b8eaa8bb8b696a5fc4ceff3fb569b317178e7bc6000a64cf77e95d3bb689dd87d413618b264a711c4454de6a97a024b01f2fa328ba1b12ef74199779fd4337e702d69d301c1128d8a9ea3fe425d7479e83f9922d6acb79761684a919c498b1c510aa3d1e78da3f45c1320de64cf875206a103f4352fbdaa842acdf29ffb1de39ab2b04be4c20444d9f9d8b9d343b23f45f84c083c5bb71a153edd593a6ccdddf305ce2fb528b7833406e0a32d96e5fb3b7e2547d3887081897e66c189b37ddab035a3593001de135251bd2f235edda91e310b6856bf8fc1aa7233ef27b3dd359d1e95c60ed4e317f2cf1e7527ce253ab5f657b00bd242bd2700be7cef75efb571f3c00db2d8020957c1272ca2b25e51867f0dfb155a7ac3394e4ec17da2d7c591a31e38e62b458982f2d1d3354ce0b118ba60b70a5b35432e316a46178b8a4cdb7a846babb5043781137e381573a2346fa1820e6366b3db3b32294d2bc2fd88f8bbeef +P = b0eaea78cb9566d5550fe48b1c2c4d6fee338ca0c2031fafcd851f4a2226d92c8fc199570bc51f3c4914525c05954e6ba4c7cdbaed8ad6b62ba9317490a447f90f6d27b7e4502b25132132a6c64b7b4720fde777dd5e7e70656ddc3afbb5105063b277916266a5168b7e8c173ccd31c83c018c6e38450fef99815da5c28241cb3de8fe47d03e7704442931fd0518e93b163618944dbdea260bf57227c4b006ac89f7e7b1a9b4cbb47f6c7988e35dee55916b45aaf39a2ccb28fd339fd826462a396cf00c3bdd5d1633246331075ac8c38bf3be6eee5103f612031dfde5493d4313ff5f666e460baf7a7708bcf3b7e183ff758dbaac7b47ed67ee30e47e5d3020027aa5fc40e41d832edf7a628a3ff0dde0004f181c81f8cb91f37462ed418a63f0db570c368e75f9c04d878b752f295115a5938829a4990c19202e3ff0919688e795003d8b2e95e676cb6bfc74d2d0575ba32c942a9d3ee09b7c168ce88800a5e1b16933bd668e53992e3f8e244d32d8f51474433875dff6b17e561a639555b61863d21ac4fa9cf5b120d138a126bfb4a744fdc5ebe292c271911a312f8ef1c58caf8766fe8ddfb4f6380788a10f0b1a5cfdf7e81b303a090ffccb510c89d42dc61d6f6cf7fdb8c4001df02eb166f073c4e992bfcfe586b28cd8e34feca01bbff944dd3f4cf0fb384e9d3f2edd2d8474900f055266be3d4de000d3572189672b COUNT = 32 -K = b57f61964dbe758c3b7265f0d985be4f9739fe77f90d0ec815394e3613bc8a3e -C = 6e09dae69dc0e6a82b6264408bf1f11ceb2cd6a760937e57902b521b70695025c2476e502c09ab9d210d6de9264c1a5acd86ace78d8d38c2e2eb0aad52064dfff2b4e1b5818622efbb42a6873e4e53d5a96fd3c232a6af40db23d097d704f2549aa27ae8416c0a600880a504b9f9c551 -P = fe5864c9fee68eaa1a10a6a503cb5be4f8de78dcf1aadea4f995a1d256104559b05a8d034a5c1d242c1ce9d66f590bbc90ab7d2aa48cad0aa851a1b815b031ee25ad3e397e10d36bee2c16f087ba6de52e46cce06aceab92761fb99920d513ea1eec0692e8 +K = 81b936be3d8943eb64ba0cd627a26e08ac36f250896da32d7dc0fa71f542079a +C = 45ed8dad052f77e0a215fbe7d2ffa8deefabab1f499d393ef6f79bd1b5a2bb14ea09ad2b682949b380c9021721218cff845cef4b0b22d20d06c4428a1428002b74f63685fc1cfc6b5b2120fb8fd99e56346d9f694f3eb9632194fe96adbb510e5f124edd6300ecb87bc7d22caf22264fbfcfa44a097cb341ecf82e06565b7d06b1579e6cd3e9561edf9143922cd6a57a8cf501118f1cde168ab11b8544f1b7887b7019dfd87223e9a6d9b525615a04c8d42e62419b1a3c492df8339e1c3980a6e8f55e21ed0aecfaa5727cf6f73fe4bbd015ce36f6c40332e9b6a80869f8b35151edaa592b3e9e33730d610f247f6d9c39b774bf2947d74f9a7ceb561106e849a80a34129330efc6935e4d6822e4ad44b5cb2e5f40d64374412af47299ce041df25c55099b39ea430798d4c70fdcfac497256032078d3627a524c779c9e119ae8600f20122d87407d5a13e154827d599ea31709e8830f029b1746e0f16e9d3b677c13f29897fb24e5f88977c90f3e3aeefe4d9c1d39354a6512185ec2cc34c9792c1c84d84cf77c70ee79576ca18c26c1fa186b3912dccd080786a4e388c5618d08618bc2d2baf53285919e7d227bd030c03f9c8b71f392d42569942a2a95b033992f89e9ae98c8c09431facd584b9cbeb1599c0eb16c1ee36127efcf6aaa0d78b89d5342ed50cda590249e9d08f7627f6cdcbc265af29fac5c9107b8b004e5145ea61f848ff13e2 +P = 76326ce5a27be5f8b29597b2d6a28378c1fc54ee41631c65c785b0e8008a1326e35df38d39f54129005bff7faeb6953dd10bf7337c7d3165b5b1d750224a62cb50f198a6cec30ed1425bcf20b5ee06e68528f715a981a40a9eb8b8919186d8214c704fd974b7a78331604b907dbd5d7288e870c65e7d9baae90e768c5f22db3adbc435baef03df9dd8a5a73423368bb5bc709f728e5325eaf0db7b5436fb98b6ee0bbd207d11a033ddffc1b4d9ee58b40c9ecf8e631139f967a66ef3d8234477aa67330274032b1fc44ebb99368ea75667bf2e6ae00875fcc4e2dfdf22a65cde0f800c4b8e54b0300655f97b7a6e613082c38c47b5e0a254fcf6967dce7ca9ae5b9f3477efe661937a9e9721fd68285e2d821ffdb46ba4f363ad5d14cd743295bfab51d9dd8d8f18f025a677e1e9069f1390adfb1c84e90d842598061aae37aebc495faa32af4ecb558bc27d15d12d14cb31d15f9f008182259a03617fea4d5489492ba276be86a22cc36ced02bcf375f17aa3451e90445e38529a919a2566f8eca29dd0dfa7034c8dfcc2c702d066603a125d28a58d2da0e90d2065a05cc5e5b48b261b6261889e468d49929f8a9c728851f494a1286768fc0aabf8106018ed13019bfa566cfb8c295ecb1698312b4b905cf7173a5e4179124001c5978bdc1e75e712b5ee79ace2bb01c133a6cbbd5469223ab438fa3d225d9d64fffb0d6930 COUNT = 33 -K = c42df4c8a073ce43d41573d6f6c8707a594a94eaf66443470199a357fbd2e33c -C = f0aa1c006513f3cfd9869f0b58ba4362e0083206c5b4effde6dc4273db2cc40716099a42f290198363555b804805dd20a3093c82347610d5e7d18af2eab6f0612c5b74edf58e25dbda4314362a70160fc8a3ea8f90e7156663b75782150add53c8f89de158f8b285b72aef79c5dadacc -P = 4207e28b8704b95fa1860a85867b284e1bb558906f2f65dd80081211b419ec0e6ee5986f9d627e335486b932c2d45e5a2b12cc0f604a7643cf71d2a22086410b014653ec57680e30dc2c75f20637f92f29baa66c3bb616c7f99e44342abcd42cd87fdaa656 +K = b9935c23ea78fe59c94875f0c4affccb1c0ce15b1fef60c799e8d972a1f19827 +C = de4d3a89887461a343f7d4b2e1d8ff7f264d0344bbf450b437f4040d8b562400438cc1d94b8fb76a4fae0094eb11138d6913567399a39f1fa9b67467330b3946e112c31cf8ab9775c84ce646a92674fb5c5417695bc4802ba3302a508bc62f4a169e170a7756850215c9c72429a928c7f25e1f0b82d415c0836eaf10a21880da0318a8031efaca2f51b5cedd3884a08d74c3e55fd78fc1d453a868d256f616128f0706bd6bb79721c16fced04d521c55915205294de981617bf9f3e3a0027ac44e87db7af97ccdb07141cac67f9bc00213135c160e150ccaca29993405ffd30ceb6aac49cf0290171f05ea4466d59984451c3f47bb760e683c771382b0115f150e0c0516eae81dced2f7d2f7b9044579b9130ef834178d4fa357c10c086a0cd742fbf6bd006ddbcba19b3a8cc2eaf4cccf388c67da0c8ff52edb9265e4740c4c8f252be28d610c9e18d5efb3985bc207c61ba68be2ec3eb2ff405d2b0c30d278b49c1fe899e140ab325779c67aa8e04aad6e32cea9371fff7d80312212a2c36cb1f8af082b7f0936e68fa3554927cef40631877247673609d43aa82e7333ad4f967f4201e1aadba33a82e3615b3d0a2b47bb4e7a6bd4fc2245988f3708ee71fd03933973cf4df79e403d715a44fea81bbb8bd8f71bc7665e7e70d7bc3b9420e6e4e5372c3eef7e81d930f9ae8b8c77eab49b8aa4cae957819c2d32d42bfb0cc875ccd684b98ee5d0 +P = 3eaf8ceafcdf5412d96f8ef1b79595e99edcc8d1e019bac7912522fb911703f5298c0844369c34c435b7b3510b59f3c694d7d1cbef13f914735d066bcce64fb836209bd57ad9f1a5cf95c416ede19b64912c9c592bcd36cd8aedc7ba6b5a1afd354a3b074212d11be02c9a95f165abf4167f14958400f89742f8b2755fc71573e25538f8fe65147e30ba07a1bb42aed0b16efca43ccf507e755a80b27b0dd3aba42acb92af4857a26ecc9de0f54b7719812c03eb35aa371b8a0c93b2f0fca9f877343a6a770f5032faf84285c3ec6986910866a1ac5c0cdf8bf9ed3e1011f06e43a657d635ac1e40c1c9d2acfa42e36ccbdd8aaae9e2b049181522e5791e1c2126ac02900fd86f15ac1244dfb1cb0ca2ad1f6d7c2d95596076b76afe910ee5a27c690d653dd4488fcb9302c2a6f3cfb402e47e929156c1390334f410ae345423fa5eac6b09521e76ee11ae2923916b0569399358be00398a6f20e0971865f6f862f75255492337f59bb5e768047ffa70e311deb3bc556e19962ca63bcb50617ae41d03873d38fce9a4d06b89e0825c3d4ec6110c8eeaeff4849e3a44cf4da8141ac5f70cd71294bf4827fba64ac37e52a63e953bd6671b36cae27e933ee26fa6b715d380c0176a976e884e634b55f64603efaa0e5a40d8a5ef0ef540356c0f41765a1701cba3694a5bf00bfaad36a8eab2557067b2fc86cfa50f68d2a89c249a COUNT = 34 -K = cca2b06b6b1be040c25ff2107c66debfd2f10a7d8987eb2148fe13f3facda38b -C = f6614872d4a8028738a5fd4b2c9214acbfc363f72c88dd0e871a8059f2388ec220d49a5c4b7ab7df03b1e9aa6560a0923a24bf2c24bb8638c71462806cdcbc725834742610951877c310e6c85743063786340e9e22ab1983eea8bc5e7aec1e60c03baa8151fe5cdb031a34e48564c1be -P = e329b17166bf94ba647bfd195e0eaa1b96081afdf92822fc714a0409d9f8d71aeb9dd28520926f45da1da94752ae3e491484e3c8775230ea6e727ab4551a7401170318b7f6d7c76a95e1c0c9d8a6511814ff59a8e64ad092745dbfa8cc802e07416ff968e5 +K = 842de863b3895aa6278263cb0c6cd973afeb7a3dec40806d1e8430f178fb1636 +C = d8f0b1749b6ffcb4fe8895d07f0b9c96354e67fc0fa02477ee43cc748abe92c952b1c4227c6c2abeadfa3dba3302c67d684cafd87bdb7f65cd0d02c0a34eb8468a784f5658e96508493302aa59542f0ebec18adc30dd98a4d505dd7fb24bfd15a9d59e3dfa58bff820c3253b55a8fd643cf367ba23ad2793529f92e254598d4ccfaefce7b045b77dd5dc58f134fe95e16f354116a7369ac86a9fc6744bb43dfc5588ac31216cfdb34aa89a62fe11c3b56da9241d9ccb3c2d81f9fed3987c9442b3ffc7ff629c340b9414502e85d210ab8e38323fbf29c981a81f66234cb92db22b11c1468b01be7d49c805c52e002136e8137495673a62aaeb92bc723e004a635b2971f727b2264663c141411badd98b16a349615b4c22d73a5949e1830a11deda984f59d882507f1ef455d5913d733a27891f9ff97a3d34838afa4bdb53b6de06265714af318a31f17a90d68c0a242497e758790d762805478a9d6e2bb8c647f2253d791ce84a83d019e6694e1d694438f3bd6e0275d8a2924b92c0eb369c763b651d8021a986bda4b12df2e513e1d5dfd8d70e98a03972f76d1c31039a1d75688eeae4f528fc96a3d2976c631176a6fddfcd9b17f2450e0cf2a19f973fd6bd8872b66f4e5ca96513a2ac47f2f02fa7a1b5688084f5683daffa59ebfae2642b1bb9b524475b4fa55bf0b5598b07e43dedae8ac5f11343c89713953ffc5b89f87bca1dc61f08621d +P = f324e1607fc442b0e663791e43f375f2c7524050d8382e489c510d6e3c7f244949f56f37905f92e9a174770a865b4c520a93349b9dc8bf54e4c53066e48714723d6044753b53805f98fdf464dbab6d37bdf44b70e3140955b012823b10d2004d7a097771b642e9434a9874bda530f49beccbeeeee4aeca7cbd6dcf15964f86cc9680a75050ac1d515e9232274599b44448e73c163a9e17d0a5c7e689f9b42cb562e1857429318b3ab5eb83cefa21f27aa03086eb93d3d8afa4b44e9f1d2a735307bd1f8eb9242958acb6929ad8f1b4545004722da7d8185eb04e7f17135540740619727ce33a77dd5612d39f454a5fddf2b4d04953062edd0a5e0fb4408f9e9ba0436b70cad8d62ffb2c9e4e249a76d3ede8de36f7e88a8750f6145edeee9fc5b4752c5a6dbb0b47ebe4c6ed81c5a49aceb8164ee49e24c2e873dbf550f04a831d7d2ca0855a1c83769d1e1927fdb6714ff4274b3c1d28a523e20b517053aff1912768967abe361aeda6e44c044b8500a4c06ccbea9da4f7dab9c4ab0d0b42fa6c47a715ea73dc795eed8bd294a85f39496e95fd5ca136e29068aae3ba29659550b41edaca97a5ddda664f56383e982e2f6b4c9d216cc34c1ce3c507ab00ff7439f245117d0f055c262e83f11c9aef863e5fe3af81df265c85321594e5fa3f81b380d584d2ef2b32c4c29c218e472c636d3d272c3b6aae23898507df02869a67 COUNT = 35 -K = 9a563822d4e80d583395badec7cdb18870ee0a63ee256bcf4b58af109e7226d6 -C = 6b4197bc5844659cfdd6b2f6472e1b22715fb59fdfd4f95a16a6bde5c61b409a23bc4a312cad1ed244c3e15a2c9b52eae4a01ab4f0357a4634ff03aa1722d1e4487204fb1057fce0b3e6a76c83ee5a74a5bcaeaa3580e4e034bc55d72d1ab79c56cbf3f32823073ad6fcbed30e3451a8 -P = b41ce7c5dbfc6ca04547ecd26ddbb40527ba385b0e417684627606a08e0871d0472b90edac17498d5cf0b541fda5693783994218ba25010134cfec8ab3b61789ef03d9a3be68e142b10d293ee5d67e175135d8ed0d6447592c52ab89e9cb7e85e404d888f9 +K = 0a69b2de0f26db1623076396e1c93a76b0837606d18a3777a1000bce4cff79e6 +C = f69f518bacf083bdb8a248531b74172966f9f0d17102c509970f29284e2094f1da75be9f5fe7f3cd57f537e6cf866a44743e704cfbb9b9a53b9b2ec1b5bee43e4acc11fc07eb46ffbce7b5c0ef169a1b1a1a3028854f4afaab2f5043f2051154683c5b3d97f883dfe9257fadc741dff62b31749977e0d9c33c73f69fe12c695fc3533c410c43615df63230c4f203aabd0283a0c3ca334848e645a067acd67ca72469e89f5ed7d2b303df7917b406709afd45488f4284ce5bd705a15c4510a2684bb5c2a0c88d27108411b31c24310cb1171fbea88afe01c4830e37974ed09c91aec3dc7df414e2d44079df8f189e44c1ffb55e281a11cbbdbc9994e58c06a8e6424ce0c6ce6407925cffe563d1ae96765692458243a889f1d2811a9b11cd9aa6cb04ae3d94c74957723e574eeedaa38b7d1409f3c7b6489800d6e25c95bd1903403a6e505365359f8a4b6a15fe1b9304b1d0e624f16e16d3187c178b8a8e1b792c3105a7baa75c2efb125dbfd766285506a7bcb9e2d0cd916a9f1208858c1ff4575e46a1de15b1b6035459ff762c93c4da43841c21a74f938caca667f7712836248d303d25d7f56b4fb85656ceb14ff238a229110270ac5754091796d7b97c65fec5569b14ac7bee5a954d313049d2e665534621810d984fb78ae95456e09916472b4985279aa4697bf9087c757e35020f4a6cc66f6e24ffe9354b8382bef620e45c2bb41ec60b52 +FAIL COUNT = 36 -K = 788a1921f85464e0e57d41e1788182f3886340b9347577988fcc1971f169826a -C = db2d25cdc8a2dca757442f54c1e7c6bfd1b21b1a9cad2387c20671307521ddbbb10c86c0cc604f18efdc9461b088cbfb137cc27880b8d31ec3e9044b98aa3a664011b603117fd45cb8fa5382903ba8423dd588930c029cba0de059576364d712ea0d325377661fb37557c24664e97bdd -P = 00a22f585046f66c5fa12e16bb0d75e46108b5a494f70718fe794efa565eb68432120a9b540efa53c5d6ecb3d456a4d613ef4a786e1c631122c94b3acfd9356af91a6812587822fc40e3b2ce87bcd4d1065cef5f89ab959c1a2211821aa85830a3fb266e73 +K = 8947b3b7382d8bea6d659651705c584496b5139414b75c639aaadabc538b9b5d +C = aedb1ab6674c03d4f2c0e0e49b997ce4fc99b35a410faaddf736297382b9af668a38aa1e4aca6b581c3d9d28d6dca4946cce4ef5b2b8c96d9d4f9d6b37b1b5ef9e16f96d9b296625aed09f14ba67cbafaf50cca98cb4d25027d1fccefc3d5f3831a359d743bf9682b3b2cc2690332296c5686b804e6450e57eedb6a40b8e6488b7836f0619e13f3b53f2b31ab82d4e6a7669919d7a04acff94987845a25b5f03aba183759623ab753db66a032bfe4e5642fdf288c47158dcf3841dff0a94a2e1f2cd3fc55a23a5e22d92dfca177ba460fb37f66dc55d5a2196f31136d906ded60c55fd9dd3749a3833879211eb4d1795c02c552542e6c977a55244d5cb783a0f031836c69f61c1054295466fa9be2b75fb00629fb37fd5e1e4277b09a195fc9d4af45f61e7c2abf09dd4f890ba98ca3a1d3604fde4e906d2106da36704c393def651582e5af42bbfe85a328c0845be516e235a7ce2cad41aa5b2e12152c34ac94fb07f71d67edb2387a621466e510e09ddf42df1cff3deeffc862855d10c13b413c07d93d63b4045f7bcd3c7b089a862706c596197da79820a8065d016332e79744ec802a97d216ddc5a2a62015636a9a4f152eca315504c291356ef55f039eb42cb6e03c265ad7e692de4cbe0a58a315d7ca20920bd239c47dae25cb4116a373884d2ff2e4499c6833ff0bcb1f80a959649b2760b7c07154add0eb559ba6692e18e44744c8ab48e +P = 8e89221f42f994be1f0e90c48e141ba0de7be0bac9fd09abf79d9c128068b6ed750d699919a9bb694f8573181c55681b75223160a40bafb6fd52bb247dafb0d24e21969b1127fd95b07bdbaccf4e52c8c64c87470542ae78b9ddda45f773bf5c0bd028aa9690b5e0122974decd38c155ef0de6b551074f2e58f2f287f1c7eaecb17c99283390960e595086d257e2cd64380eccb8c5f4ea895901564af44a3d41467de04c6f5b052987faf327b91ae5256041588c9ffeb1b477244b542aeafb181defa94ca1f1c59d66b92457e36383081b6c544e9556ad1aaf907d2040ad9d1176bde41df7146159aa6a42875a0779831d715bfe67d0c788f775b7589e582eb93afef9d94957a6e42c5426ed81cd6c65fd20221831a9de7da808aeff2a2275010c8304eaf000cba7e3871fef4fe0fed17a47d7a68c6ecd8215de263a2882bda8a7ede3b615b3610e5d0b58360e73247e90fd417cc2bcb34d4f0bf03af6f773834ccc09d1d03ba923dc1f7179226dd75239f3fad80a01c523f6e63f2ba99d7e175a998a5d60b3b34ac28dc20102cb59f9249529a3a576ad892b47dfabbef8f38501a064f8b14b990ffc06bca1b03e689f5cd9bb6306fbdfe6e3a7944395209b8f0a6b3da9b229d67db38d64b25d6ccfe18844f779b2d29e798739b78adec02e5ef7b9ebbe5726341bf813ecc51b9ec9fd47503db0a6e643ef104b3e194576d779 COUNT = 37 -K = 861427fecba17f2023ec43a76d8afc53f74fdcec240c93a7460633e401db585d -C = 2309de7922d445591fa098d4701dbd3a35efcf5a717791b0910970a0971d648614831de4b3512628697dca5f25969a05e55294fce9eba97219383acc23c9416f436bba7408b8ddc086dc6254c021d27939b1caf055e0c4f45db08579c7d2c431442a52746201f43f5659e7a383ea41d8 -P = adc2d0e347f1c51bfc70e261e7c8a1e1d00712744581e4a2fc97a135145734907dcf738e1be1d3610dc58b0c68e269f3379447deae03baab94338709a90648d6744eda9696b391fe4e169f5c9794dbb293c4053e5ff3618390759e0e2b07e45185211c41d1 +K = a5ee790942377ef9aee3673b6369a3188a0c5c35fef300848304731e5d6d547d +C = bf4d1d8f434c83ab9e13aa00ee6d35d47b9e5e550c759a3cdb85e98327d5ce6cb9cf0c2da539ad9875a9cff9e6df1e7c48596e6b3825f26f32fdc3f74de95c1abab11f41b1544aa25e8085acf9755d394e6e3b8ff626b54f3b24449f59f0c866de9827734a389738d34c6bf8e1afb2f63e92d83988b95a19e18037b8e11099f33b0ac34fc702784fc4f916f757524028d1b2673b8756f178150f115afeb64e024812731854395f9f13dd82176fec5234cb84c79664089d0030216d5bf625b85c551db8d3628195fcb324e95b022669c5a1359354182c3be9b4d33dae0fdf17dfeded539e9e6bd609c488e1662d4f5c29774df387740026f9356e44d572f328a09f586cafe4f6849351ee5a4a12c5166542ee8122c368dc000ce795f674fa4cfb624a0f7cd41452b49757e87dc02a31574a73a09c2ee48a95043f92e52f7cba77f81021b23c4db6c4a4db9f5d786fd798429f52d4597eb2735bc8987313f512b5e3f3e53150ab805cb0bcb70718ee03a17a8fe9e9f36b57a164fbad35d4c82ee0e50d544b9a3454f0a13a0ed3cf2fc512b924b5905c3bcbb8a5e3d476e9dfbad9a67aef4584d53bae8821404c6f23f954c48936012684b7fc773e9e2a85b7db976d5ac159c0a49dba118a9073f77f59df439c29c645eb92ba544924cb4f878620951893b7cdb36f052a47e1e77d54d650b0732dadebb5f57ff55bb54a1d97dcfafbbc4f94a90d0dad +P = fad58a466ce98fbfaa30d0e3102bcd089605bb212cddde1d8cf8a732db1e0d273d75ae115cb4e2bfa4fdafe617426dbcf8329424b2b78588b5e166931ad7ab9c2abb0150d0e8bf0a8d27af4b8b5784dfc0c203e670c46e292a9e96ecf9497981cc6890dd898c9b3a11b21c83aaaa859d284fd9dfeaf31938323dbc7c6e76964684c4193b2c3844daafb09d5cda723fe69f6d870bb2fcb8630433816ea740f07318703507e457bcb5c862895e62365de90daa2e2938debd131efee4cad5ffa1e1bdd27d270ffba25a0d5333cbfba4458a32d8b026cfb04f034082de8e62cec4dd5e5666120318d139a89e0584abc58f1e566e2951c62f8686cce19efa6b5668d8c68865b278883dcc2c0d1efcc0267f94f49a1b7921c348791688dc1ded463c2a8d4d88abdbce3f554a935440c0773524275ebf5af5ee8ae96c1600f5e69eaf97bb9418ce7e53ed49df99a78d4a140c94eba0b7a66bb9a73d368fde98ada9505993a28c5df650b01a034d11edb660950949cdbeebed18ff86a438dac63cf1b90a49ffdf36734cc48f7d30dc2ff0b4b327654f55e9d377891dba09cd6cdc9b0b76a453cf9af8ac1b65d034063b264ab656207a78fe1c0a54f7b063991af4db7e3426ddf29291536754530982efb42e1299b1e49c87046fb919f509b20b4c157b86fba64dbd6ae8cd84f40d4512c5442415c2989f2f9d9950e750a941d8e7ebff7d COUNT = 38 -K = 1959b6003f3f0fd0414009cc41930f5c571fe0f4a5866bd7f23f413a99bec445 -C = 00aaf4849b55552c6ffd3cdd9464e5bff7a122067f637a860fad128317a5414745445cea569609825336727324d2003a85afad65f67f05d5375f7ed993d14decff098a6dc01e7b7feba0e0f2b873d2ebdb55b241bb5e6a0316ad1c2071088600540482abc89de3c83526eb039e27686e -P = 8007821ac4db44bd4af36f9a65e08dd57b83c4136123503a79164da74d2655e4543eed854179e64ebeca4f35c47f9d13e12991dce2dc1db5d44dbebf1b26820d5a436043f08f1c23d1524a14d1a8e8c6c1c057656892df84cf54d307a97dbf2e66f2572e06 +K = faa977558642030cf4a472122b6c07218c031077fffe95cda7e8cfd7b07bee1b +C = 8d488c9b3321f3794cedcbd5b878aea4f5a52bf527b9f1110c5382021c384c0997e9b74a2dbeff42e448d4db2e159506907c1840fffd4ef67b71c9f9b22d27efee8e57b0045ea575f69dd80872574b6d3f7a4eb10a81ee01a3858a89e1afdce4c6aa2cd86a272600d7929dc07fec8948fcb2865239e72e051742e4ca8dbe715f73c9cd097efc192b0db3cd9ea77e42ecf76d54110d123088e2bad60f3ed459e472a97985a7b6e072752b3f82b03e7f81f6a11598b653b5eae8d1a2cdd51379d5e6fcfbb9bb98de228e67a20fbdf2307aba81b2866094b336a8f805f5286472cf66b5347b77bca4cd335c42bff8a8fd17d6f2df772a1a23eaeab63f792431b7a86752c9f6fb86cc0394794e7b7b154fc3f2ecda27bd74ac3bb04b3f11f4b69403fa4962213dbefd5c2bf930462b0bf6f849634ec4cbe206cfe0b7fae1cfdd96ea79781185b94ec1708228da828038f6f27e9d0ddd08241be0226ed510520b20c2a0d48d6ae43595109154698949b1500a888f4ebcbb5ad9ae69707acfc0a4a8738930e7b728d00cd54e89ec9155d54e35014018694b84cf26549c65f24d144e438cd57747e0b3b7343591342f90b2960e3b979a5178d6b205294dd48d7ab2f9b5a78b5bf3107686dd77cff08df1f150b93f33d9747016c3c291ec21ec1bb2469cd89d3b251009fd5fb003b200e6ef9b792649ecd6eca859d157a892278b1971c47595478a6b872c6a +P = cad7e515f7e5b6461579c8e6527be36d5d28ad1ddea72bfd51839fb6e2b3611053c12a1aa8fabe9df9d5e3e944bd1df78d17e14d431efc0e54ee1cf99eae767b4c3ba955c504635a3da3816d5de7a493a5cc71422434df85e36cc6a7d05c7fe0a2c0dccc4bf43366fcd6d628e1ba42815ff437a9f1d9e06df61f85bf52f712f341443f5de1542245a6ca5a953a1d811f27c371d791384c8b682cd93d0eaff3229ad05ee26f40e0e3d081844cdcb4ad6507c89f8cbaa0ffcad049438a68064e70c294b46cfbffdde5b842ca0f1092c7255ceff4f7536be52f1634220351e7690e0ed000ae62f45bac64ba74b3ebce8a0533bd96199c403cb6c016d40cdae980ac21b3823496d265b9a40f51dbd948ba95240e3ae02c88b0b6ba91f6209aa9f1c53814b32ecfaba5d5394bc2138c2cb9d40fedb95fda6bd4bb6280d15728dc36fdef8119d916a03bf0d6f8224280e5afa7e09d0e4567078cf900c3e4ac653947944a274cb540d6a2cd3cd8774c0fca65fdb138d5dd1eec15ff94cd0431af25e7daadd54ba619105a1adb8384ab5a29438feb326f77a5b6f7be69f420644b3b24cef752f4614d0f086ebe6ee828f543b6f971e7e80eade99f2fc051e2268b1c999959fdc8a0eb35c24a6c7c7c0bbfc88dd0739ae7a259f36e9e0bb160e979b6706d3ca0ddec6ffbac0621ac58b5de25c177f27d9f29a870e6b5abac7b33b43f6e93 COUNT = 39 -K = 5c5599204e3336273642687bdd2dd06259138fb8221e44061d634f86a4e9e491 -C = 4965702ac4f7ee9a1c606f76cd6d4b6fe0d849c45534bc8e45c743baf8db8a24e6a04bdda5ed76834391c52a365aade26ace0b062f868eafff1c8a65a959074bfbd838844aedc38f5970961117ccbbce120b69569a8df37c39b1883f9cc7904c14dd553b5d670f4abaf6402bcec6997c -FAIL +K = fb57fd09d87bbd1d3436474550d802813a6112c8fbf0d521ba2391d38ca22162 +C = b87875c106438261228ca6c3cefd9ee89aa238d89e0a4108f1f0b67f8222450c720d08ab8c8b7b158d9b33404818a8cfd9d5ef7c89ec54ca8d5b8e7a5309269b9af090f734b34c98ce842907733097995b7bd8c167be8db8092b7d1068ca6367e2003e71ebd05ca71479132baafffd2734d7c60a61337ec194a538783e3d8993a17ef582a66f82f93fdacc6fe101b51f0de107610e9a46b203497461adbf45da3155ae6c8f975d2e5cc22b2916f25ab9a586cee232e7ed4ab947f24278e086f78fb836519cbc99e843615f2c758e82808315d75edca9db2a38b343bdf05a65962314115f00f3c5b0cbfc11c841b21a51eccad1f927352d0f7308afcd96297b7cf8ef6208265d871453a180e8c67488ab08224ccd2ec7f0e51855d227c8c36c1fd3febfe6511e624014f3a48b5fd2ab1393d5808b4b2d5b22362026430596e5473fd0a83ae67c89f65ae7b47749b8acaf05ded36e8ff4285fc5c8aac784bb0de57fc72a1ac9c1227bf8e6c02919245be2c442ec88fef36df1052b91be04bfdc2cb5beacf9f910b7c62bef329aa0fbbd690cd9cd845d40298542fadd4f34e835fb2413c4dd3940ca5d8982f8156591422d4da003fb9a817b067ca7bfed40ca4de5f16bd884317c2ee136d248a51bcd422d6e0ae980a47e18d4ddc4f8524746a8806474c4735770acf387eb81f577cacd24012a364edc1ccf4d734cfc8a9fe3a4845b15e3aadaeebaba +P = e1ec253908fe1e5e6c22b447300c75126c3ffe5105831136e4c8bc5d767e27590c86135752a2ac67820c2ca6a27d375c71dc12d1a3f4c7b7cf8194c428549431e0186c873290b494c59b4ec04a71b8639928ee1819f8fdb457f2b0b571a19abefb044f77cc176b0f59f6a6df309d9769bd7fee8b60151cb6d8326c7c8fc8c055e0388d80f0ace17c85b4213a2bc64895ab697e5f1b1e3beb6b849580b98ffdb1be622e8591f90a69df171debc3dee6fdf73c92c2648100b710ffa07416ba9e9d5aa7581771de55c65b78796abe4460952ae918c00d40558e4c86e24221ea2fd0e33920a6be5e70b32774b31af08bb2766cbea0ecdb35e7102fd2c0a1ac67cb1c6301ae6a594057a8cda87db5fd5216bcaf95b3bcb88d1480971d8a51c4366e4e901019e71b34fa71dc1b3d61e78a33fd87922ebf09a1e8d755e87c521dfde254da1d68a3c7691bf4617acb8191dcad44962eda03f5747451ec90b856427b64fdaf733d1876d9eefb109941bd9fd0136132afe331c255d32a6725b608042990ae7835cd009affddef222639434cf511e78384226f8cb1f7b8af9851a25526c8041aa910163f692221a1be238bf638a9c60cfc2e93d5a4cc254e297e37481a861b9159bad75f56041a4fd7c9999060fde3797659c14dbcf83769c29caa1017e482a4d671d4656ca61f296dab0f0140774018845bd1492e05ad514b0001c5c21fa3 COUNT = 40 -K = 16078ca1436f526c812e89a15aceb1e6fbb659568c5088c0db3b884b55bc2fa9 -C = e77c36a8a80ac6852277304c1c5eb6ae3f7aea3ba9d8e952d8cce26ef35d313f3200d97d6159b05f11916b7ad2bb66c45c8e1a06d312d9197c79bfbc2b2ba3484d6979a5ea3f106079c01b785acaf2f902d6f58e3d78e04002575314b4ba8aa15fe5fe32be1c27392879cfcaee059ca6 -P = aa89177f9a307ac046e9f60ef0d4bd6d2a304b19ef90fed6691a31d8b81782a692b93dae1d9cdee54ad82820d6b6b188cfce181795beec55bfe318062379d5a84f77756802d32732d1765b7a17ebc915bb0f4abd08e23bf73861edf7ec7314a6f151387354 +K = 05fbe76172e85f6f5298594766200f9e7e24033d54615f0621f26b280f4c4ace +C = 5841e337ae5c81475c20e2b973567e4b4e5de58936cfb9c3163898f8abb4ea994f3eea64615a540aca4a524db0f02b0227bc8a01e161bdbe0ae1a584a5df437eb978603e6bca5154fb1205c9802b191b247201f77827a38f7ba100218793de8c751fdc099c892fd2d21f2cd138f80646f7e06769e14460c9c0ef5570d665bbbafb96f0b94e1b5ff4827c1968dff7045097899429f94379521c881b5608af41e9f266c1fbd32b66927164d1ea08b7a3d589e32b3dfebfb5c3be5e05a956a84990a389fcd558bfa329ed50e0a3f675d1eac9a3bb0af0edac96b84f6c1ea4ddbaaef80d5c0cbdf74d6939841b2b56006de9c1b299e227fcbf693d5c0fffdec8af87d76c6fd1a1d7324186109182f068c0b78ad19913d0ce7d7bc4fbaa4242ff4b1dca1be81c7b7431a99c850a5b9fedd7ce7aab49b4e5e39aaff593248f71ab7049655ec4f51734bf17292999fdc53c4b8cb7a8e3bbfbebea746bc55b8c6aa8023a4339c271f60bcf590500a205007fa33ac571380e744a662510a5fcfe64350b339619faacb947c7d7adf881eb65ec967b949b8370c17cadc02f0a1dff035ae9da2b6c52eb091f057a9441ffe5915872b60d15c4bc636b3ddb66225ab950bcb7fe6bb54e1781d0865fa5c1780d9f69daf6d5aaf01a5f777f4fa8d219b952d67aadc4c90925851a56c35c9097d72a868f16d9be6dc849eab1b1aae0d398a607af3ba96121ce1f59f47b +P = 9d24c05470b727fa324dad582f0f6c21f7bcd3b1ff87b67d0a7b205698100c19a11d676295a9ca7b85249ba524a6d6f8be6d531a3fd994ac32909ee71486cc0b073a7391f50ca0fa46bd15b3be25d4ad7c52225c0c2b060fffe3ae614a8ad83bcdcfda1d2bff86dd9d6b12d18f4fa5faf8ec973cbb0c621506df4ca3398c6f9687f87c84dd6c4f473664acef42ed389156623269a3c7fe021c7a514f67f74ed39edbbc892358cdc30142fb12df18dcb09344b67a3c49e58aaf4cdc7253b1c19478663e563b4fe49c5bcfacc70117728abf730aefaea6a1b3f9e5356ed2ef6977e05ff213af97fdc1813898761c6b4f6a666fa5454c3199ec185073ec3c04ecf5c9253e9685c82b69e0becab790cf5f1f1473f81a34eb0c38652e80647e794bf392b9913808f4339392be6fb84400f029636d7284e3b0c8ea0bea4b1170bf10e4546f4d1b69fda1c0382d9193b647a2bd4fe92190e48dfa8586532433f9cd15ea60b2e99e9bbfcb7fa30cbbfa0973c793e7e91dd4b937bce10f73361e35a55835876c26de639117b976f90725a6299086ab6cb405d0053447640505ecc50d526e16a9a02f909783edb792cd5c6edb4fc4c66932546dc787ba502c307b2075c340d162543c4a0ee4a34c6a2e95366e749947a2ef2f5f6d650667618db9b3379e80d36c934f2930e5d4c2752d2efe8701926c0fdca3a64bffccc1f481b58f266c8a COUNT = 41 -K = 19ee517eb3810530edc2d52d2d508c085a3e7a4e1e4f4c46e1ec01ae9275857c -C = b4d6057fa573e2e59e0012b381338bce43a4055cd8639baf5f38722317588c31c6b2cb9064579f50f024ac22692300d363d93c765af56a2a6b1d24bcf4c3517f6c5b837acb31da81630608209ef11623f686ac8c729a39d0ee3aadd91ef448bc8d37582945dd7ed765de1e1933a36eaa -P = a4448bcd13b384610b0d5da33c080f4f9dd99567ae2f9b04e6d281454c9d6c800df69438b49a8fd80102345e68db4fd5e27917079e1e289272aa875a7f743b8eef3b68f2affb1d03714e0acc25e3a7e339fea85f4208a9bede2916682a09a92e0c08bc328c +K = b8a744ac6212cd541d7279319b1122ed086bdde6a548832253ab63b1f649af47 +C = 83a7895e0f9df8a06da84e6aac47c6a226d74ced015b0715952271303f70bc0d449f73fc8076dbe024943516dd391d7b2a680e5767e0104d5e37122c9a927590c3c9161a0ecea294c5dbeedf1ef00dba7a778b5bd786194f139635cafe81314cd61c47cd88b94cd29949f605742ec3d1624170246b4551d7cdd1493530b74253b6d0b81f7939ba5d9e7dd07749f96877211984ea66913f4be9d4efe480fd545b60b40ea8d8a94a8f5eb460f3dab6da54832562c1081c6f7398b2c77507027ea892c774f30333980eab480697c62c4fbbf31978ad0168c69fcc5c439d81881f4f3b289b1d131f0354ae856f49c9bed9f07b5c9ed326be37737440efc4a4b51f903cd29b84af8a5f4180f63b90994224f4dc76c3d691812e924d84a41b8fe51939a360be32135188a3eeef49ae977a742c7c84f5bb6718ad905c47f1c4495b4d177e8490a288097ec0430156ec01ed2d9b6cd637463081cf134e302a06db5ab4e747b42cddd43d3c850ad3ecb150aab60a9789a10c1c4a45125a411c908e9062bee17fac22f34c0c51704e9e9a4a6555bf80382ee8f606f619d050377ca3c4732cf80bd646599ded8699c577dd8c61c37ce49c76f79f04ea44279868ff04502f430234c5b5a32e16629048cc6aece1434dfbf2b90a2b86bf30c35b510387e0128c3b58272efd415e09f7996a6e42f8940be1c9cdc76a1e07fd98fe8b4eccd11359790ed820f443a3a1 +P = 2501a0179c7b77753956ce765c124633293ce6ff7b352103b3433440c5dd3eb6ff9beb5791679fcafa7db8250badd68487c1f712d6e7d1ec3300ea592189447434e7f600bd33a836603863e74f363363f6d72cc42c864f7121e487576a9eeef1249dd377bbf540cdef35b234c973ac0b5115a13ab73b66964189dd2247f5f727b0983202fb94ba38f27fdb87916a44373818104f0a8e9961ab4ee237742ddea333e943004c585945b8809c034237081911a03dbe3479dec0670e90df0fdb26e4546a30313b89a6b49f06ede01fa31e5a9a37a5c49dc0944a5d473e00409a5afd33f8962867859f1a34124974fc27915a2e8f46072d7713c9da5240af06ff8e430b594251e06a7e004728e9be102a4b8012bfecb2a3eaeb5910f56e39752633a2954e6902e89656b876e5f8510e1971720ebab2b3e6d2373f089919f8272ac93fb19bc750cf0cc0588bcd074a053bdfbfaaab0639be6308cccc233e86d65344d621dec4095849c0abad65e5ba5081b5dacd6934dfedf4b3e1772aadbe5dc94287aecacbf56826e1273c48b0f5360b469d7bc7dd6c21240558e83d46e634ee666cde51e7faa6a9a66181fdee26d604d3f6760adc904919d5f73ebec7f8493e38fe5a84c3cf819e7650e590a2c2a402afc452915653be3a455404401cd16edd7b96e5394539869d72f0a9f4942e45e2e114a0f231d718811dfcb33f159b8cdd2e5e COUNT = 42 -K = 98472951f82a3b97676106784b5bc945087e2aac844b0fa9012060faef8a4b3f -C = 9500d5eff4d6bb29b4022d0729d53bd2945f7ce24d1da5fbc806be800c8d93fd970d52a7625e4e0f95693537432e990bcb5a17a1018148a4becc362b2edb3c4a7a10a9fcfd1e038dff9dbcc2b9fb3edd99cb6ab5fd3acb743331f35880fc03b5a87044e3ff9f25d2e80e13137b55347e -P = f1c6f36398b3e5a316272d088fb8e215e95c004cb224e4ce477b4dffd61dc73e3890373901a77bf02b7bdb4246e58d6fcd1fedc9b02bd48389712a3e2db69415ad8b5777d7626653fcfe87e632ef70caecad3d270424d3214b50b7dd4cbc60fe99aa62c428 +K = 030976448523766bf6ef4c2968ae2899b25744edc0d3b568854aeda3151a28ef +C = 177940a6a47db538b7c223b972623abbba825772772e2c9d072c8ea99c5ec8981e07c8074bd6a508236935ea5a88e76cb88032035dde55f875ab1a331df14fd636923c8ffea22d1e04bd88a8e729c4ca39f73b3e4f8efc10dbd5feb2ed6d6db338b52ea3b9b5c936dc7153f107b4b0485852b6c43eb5e0c4244270f01f5b1187f4b05d5c44b72ac2181b714a04cb10779c7ba23de2f2fc9475f8bf987dd4e2bbb7ca498918ac94907d27e91fd97786baf7e997bb8885d89ed361cae2b1c6cff5eb9f1049db645a9c85d12650caafa5c1e9ac289c25dbf54b4b16461493a9c84574f098be90d934a4c92bbfb3a3f2073e94f5599352dc758b747385fe997f0ce11387530bb7180cc947dd30be006b22cd189398a5379b8df4325eda90892540cc52f2e51fa9a882c693abdef75a083e4056153facf7ef394562025ce9fb6d4a720e0b9be5128d9734e323ce0c0e50c317e377d6252cdb5dab37e078d29d4b1b35e977be701637c7747f009a65fcfd379c7b4490007c82630e33b12e3dc8b2d9c7b193d7c13d242fe2a3575222875ac287ad0083bd37c78d28fde870d5856765089a09b5d14c3918effb4ccac36c41a2004b98b536f5055bc6d7f22ccbd7ea1d3f2a5097a5c10bf91e6284cca55ceb19f66b714b1296c80238e9f45193d599c9d9b955110de376dffbd858c1b6ba117af0177fa36162d48a0ad727cb9f971d463215ce6fa9ecfa998d +P = 60b6c7c2e9bdbf1f0d6a4c51ba89089a8a6669ff88c34418d645ddd5dbed18db41cb7fd7745f029e505edd7cd843e2194298ff872fabc70d7fc79b8edfc5d736cb4f7e225dfe8fabc8f0e73f602338aa4862846f309d2a03cf3b6d2a8efbb40fb36224af8093612621ff202e9550bccfdfc6e3adcab63a9d5f197c39d5ec9fadb6b0d73cc39bb84ca5f6ac810017db8da2e7dae26f6db7a5ff5d7bf3eb2474ade76f105fc748a413ab233bf9ca99981ddda6fe7aece5ef35ebe9de163fcf1297aecab013abbbd5007e3231d60a608d60f10d6b9409837e6423a7f3b90f70673ea1a4b219a51fbffa26c9eb266bcb451a98c2ddb1ea4d33bcc78795b49e7638382f2d6539d18c839e72e187895d2161daa2f71022a74168ef1522d517490f004ed34675cae617f940c81bbef224ed2d9528f7abf389f46a36cbe36dea928187d547e4e86c917284319e14698a6cab8ee1687968fb995d49c47f513b527353483215bd2fe0cfb6af6840598d1064118e1b3f5a524bb7e8358aef8a5a48e483022f724f53e58d9bdd0256c8437967cbb3a26406e8d5628f35703b4510a87d8600ee4242f74fbbe648ad2de273849bdf3337a90d7a3f5cd9d7cc1b363dbdc34a99d79137775c70eab26fced86e9afd0f0462980d4241af5e10307dab003e97cdc900ac666a65c35a887762a73aa9aa1277e455e6d9294f8e58d0bdac31adbd315409 COUNT = 43 -K = 1af11c9926d2e34d9fc44c13d0388570499f82025035c6437e2d53159fb6ea6f -C = b9df93e25187e480ab06df3b45fb57b4d5a1aa05b4d3e73367ccadc7ef6b8ea2c1783de9e9f8e3da790169647ede92944da207ad6b712c11b584ac8cd1e13336ffe3e351e68f9cccae5e67fdd147bc662f2880b1968a954f8dadb0d742297df38d73cf4a8204087564c656cf63842321 -P = e437fa599ede079cb8aa9785e4cbc1eb3e83e0362b287a75dd8b19abdbde91f4dd21479c22bf8400f694feca31b51a0d190af8930f66d64c9d3944b3957a3efad96403c021876b7eed3fdab795f53aecfb6126febd482591096f20ac26f83ffcc959ed5ba0 +K = 449bce76d0c2153813f959294de5d7fed4715aa9e48d19347aa10ab8983a3283 +C = 9c80cf5de4ec946566766c6b5cf18bb852bd929266fa0e32b2549bfcbd4d7875dabc3c3f5ae4704636d624ac763f6bfb10e2baeeb3fcf49ac72594f2f6b09773b61c94fbd2e50494308d45764c8425e5bbeefd8227b4bda2092f16ac373d0929dab2a596b9096f4e3e98acf5eefc05fb2f5b5275e3a75c1ba95f2e7fffb4deb1f5df2a5951ef5e286fcc40d6112fe98c2fa164cae1efeddb07d556dcf38e5f41f05764c64f6b42bea8dfe43d77342fa77900c7e713d8e4eb2a8c47ec937a0a72a8691886a68895cf0cb86fc787fa2d5dbb93c9cf17723c7a1510487d6654640a0fe39f51593b4a5468dba1a24b8c5fbf1b762340c1ded6c4410d035255d760f9fa08346a4b1da2e2fb202a671549e9112a33c98aee23b47a11266ede36f507a7fc58d3d4be656262fbdedb5c46d936f6214b977b7a94bd42c210cad2ac8ca3fa9ed9d4c2b35460f8ef88146e7ae83afc936d3b849f137c85e70ba59fec4588c9087e612259d277a140a862d2590a10afadd29d6e221a818bfd93e89ba6657bf58ebfd00748c9945296b745cc63d17d91ac0e241e23b1b11b13c52a7e66b05ca1b091d0af804290c473774a8f4863077207da1b5300f658e83ca8dbad9dfb1a2eb6ff8eceddeffadf7bcf0468517420649bdfd7d73035cdf8e9ee934760c1079d360ecff711009f728b2c9b63f9cfdfbbd25590aa5b25633914c2a8db33e50b364a16fbf478269304 +FAIL COUNT = 44 -K = bff96d854d377e1417fe0c88f3e4c9603e173c332d044129445c1162cc44b926 -C = 9d0c106c90ab30688b8fc3cebba57d8868443468b86995925276835aaa514525bfe45c2f6eb4a0ddfd9282d588b27031f6356031c8ff9a7b7f4c52f6b55b17a99e66a234c57efa00eb4d73ed8802cef873021b58cf8348651329ddb3b689188e5456acd4a123bf49dd107644a9585421 -FAIL +K = ae4966fef8750c8de9a3352df9d9e88830158dfc950d14e47084a68b56a5e284 +C = 18d66acc08bccb1c771ba0dbe7ae31ad266a0f9be4bbb1fe46d219b15a5baa467a439ef83bd4939af5dea4e7f390127844af1a7762cd7c7305ac125e35d1e62d8305e100b6e8dce1f8b0be526cf2c2fa73ce8053bf35c186871ab42f760ade4531a82aab98f5a6a4dfbf05ed1785e75329044a5c06e84be479fe6f323a9de38ff1f69b20711953a50caa114f4b75d0cc1d6dd9e5ed2b6715acf7bad2e5baa4d019a3aabf9865234f68b572d1bc4afa89256e347604e6d56b698b714c8955a46d105015dfd1629cfa8500e16bcdb4ec07d6c3a7d149091e30ffd49970f189530fa38e5780aab8beaaedf60bfa6fbf2f9df0690aa56b78244b353d18033b3c10aa972586c211315d021238f52be91f0f3a70755d075e12aea266ebaae74f1c080e54a234e97be034431401b0d73006e7412a559667da0b3788901c17def750734558e9a1e5ec389ca7be7afafb8cd43b67d4925a89d1c6765888973cda97bc02d6ae5c7f095fb1949a7791f5c85f3e41815729e48e78253f6b5225a93f1ad828870fe56b85e05ad83ab3bd5b5a321da7eb92f9dad970667981fea022f843e3dd338e4f2cd87a20454707ad2957d0e003bd2f32214b3ab5be9924a26a9a0e8d07ba5f11ea1da39c1a57cdb682e4f6939ad2d11e2196a4cf63963dd8d622c015e0c5a196566229f144d2e2ad26d281c9c79519f3473fa22d7272e89dc4ad9a0fc3e604ed15cd21cc2505 +P = bd63ca550815bfbf4d3647c197d029fa1da7df17386057112e54ca09b5a9e9cbb246cd2df98cb615c891c234827c6373bd8a0270639a41536ed24bcdf5564f99f17bacff00835882bc3d594f17de51300135b58c09fb2883d04c5679c4dfb77684ed1326e09a5ba599e6910f20cd8b09ab4a1b78a6c0c58d3e0d1970df9b376c3755ab574ae0c0c1a69927ea7f44f568fbe9b2d4d34dcafca4a9ec1ca328206655b40ddc319dcbc4256fdbc5dc0a1768a429940d7ef8df16fed4a9ebc3e454183e998c8309d09ff7f796ce3f55c02e6507fed3c0dda629408e26e76e393b8ed6741cf298b2caa0bcc8ca19b2a2b63e1bed89971a63f8d7082ff7d079f7c431ca9beb63becce05469d098b888d8ed2709fc80872bed3275f73e54ebb30be21267ac721af531ace0179f30df629d5ddc4f900d9038fb4bdda6972aeb559cd80060b196cff4d70eb015f92baac69b51e9b88ad552a5ade3d555aba0c84927d9d10bd0b8313283ca30e8cdc5db145998ae9e21e668eb7a7642d44a4ee4d4a1211bc4afbd4cc3ecf2d98339294163db86b8111fbb3316c90ff54a729e0e16c6f80e53a9c2e273d5eca98aa24ae3764cd3914432d0993691a12d3310a17969f8b64c209df94ed575599a5ac4947f1d936c6bcbdad0d687a99f18e5e9f55a64e1752d37bf90fc5e655829746ea9158456dfdb61383e8fe7fe757ba00e5e4ea9013eaf86 COUNT = 45 -K = b27153b1f0bb36445c860f556da5ca40f6d6ace8f67b4ea94680005bfd44fe38 -C = 8311d938d6d191a562f4bbc9f5c915ba9102e3759d2a529a325aa836998818d6b0c5677811cab6c5632e92dc6521786f83b876fa7c88804a0aaa1ee896206c1bda89524505cf03a358841eb5b0469293b417bfc386dbace0a54b3e746191d6e2d1f4684f3f2cc46fe0a1e401edfd67f3 -FAIL +K = 2c562faac0b02a618e027764c1b77c668f941a585b7dc72f3d8e1d493ec01b09 +C = 5a819c77966cbcff936193ad5dd19bb7c609e0d1b92c7432819c7d96ae6645bf6566dbb29a454ec587c7c93ba7a3d7b455f2926e119b246fcd3e38611328e5797624713d726aff1a56c4115764ef9118ad9688802c162fe56f5928df6c4d5d38181bb6c9a2a98816d42f88b966bff40a8dc17b7d5e57f0178b7eeb9553626e1cda46334292c178717086bd7f9930af8ea4a3f7a7ec798fab28ad6600e159c5fdf800f3ec4a50597fe74139fbb6ba95b161416b646b28cb82292557ae891498ee240863b1eb0cda6deabf3c1678f3a6fcce38ff2f58a07f4dc2c0e47b84ccd07603188fd28b56ca7139de37973b9e07a75b6c1967b6e32314626bde8d950ec317d394eef77d6238c334c15ccd5e042b77a0477e07b9c84186164ee8fbe538bf06bfdf437f607216bc9beb6a2e87e8c80106b9d359aedb6a9835f891f455cbd4785e9159e42a62e573306b113d0ffd2f7c0218e0ccea4dbdff32ba6607d8f1f96cad4486a114ff4f942eba1504ff39907f50415b583bed26c83382d4ed395a06ffee14d82898406afc57c792c8821531b335231dff35fbb8bf0e796ec700d28811f14895913034e19e63c06bc5f8c6194ab1c2f29f3104b0fb55fcf2ff4f461b6c6db2c627632edea98dfb22e698164ee35e971b2716d610312ba1cd1d563238a582c2b104573ca511fd290a40e98bf185ed6b43b089fa008bed2d4294d6b3710912838bd1ca8b58af +P = 73a6ac3abfa95d27f3a023750093d07b7f76ec133264c080200eddfbc26b869d1d245c527f3c84eff8eaf71363056070560ea776dbd99fc16e050d8c6d778a13a0b09a425a0ba47548909ff0af3846df37ddf0171400cdadabcfce1d23eabb4112224bbb61e6ef814b80630987f02ded1b2d3bc2da9f0fd34f0d9d4b70913bc935d22870667737041d5230ef68b61eb52c2aaf5ab9aadd10f0f4058563faf92ed6461ffb542a9a4960159609ad5397d29a5434bef74bf6d0f7db4979e6e761ff1d5fd7329221e06fd6c6b9b4506d110bc51529d5038433693310740d35856bef8e7874f11de3f71781389a43d21237ab7fdc35c58ef8c28abd20f77797f96d778cf82d3712a6fc1be0b257df5b250f3ecb6cc8f7e8f31564f862a373d6ef62276bcd6803a624937ccbf438d05dfcc763564c74afde59257e623abc73365028ea13a86af929c7e0be0e99c7ca956e2dad98c3db5ccb84b052a42e2922f30fd1cd1866e92043b4037f29d7948173d8609207520fb7b5ac71b415279e0791712f763d5a578c21334d62075cc73c4273fc7d322faca6e4e8ddcedaf7e04558484a99ed3cb89e396032cbf51c69af0c922f3d7b3f0637654644188b337a33e5f1fee2752b9ea3433b0f995a38f14e3fc87863376e53215fcfe6fdfa095153efa023eca3c5aafda1c2563a335b66400e1287eea91610fae721cad2ef3fd4663a7219db COUNT = 46 -K = b53d5e089b9f35af74bfec502c7889d2c562bf5d466b21fd4b677cd388a42267 -C = 6d47db5fe3a98ccbcd8cc7dccf119100136ee1efd6453cc34ac099eda10741cc15f20e2fdf4528ee3f5c1502a2bd61c908c49dc616893cf474aa4c77150a7fa6c1c376cc998ad4edde025bf29a4026d4286014c31bf0465656578b4ea42d3a12cdbfad82ece4749e042a36b0844e1d7c -P = 9120c9a76a374e4939dcbedb272fa404c0dbcaef986ff186b7539d2fb2c9a8ea14adc7243f3469ab1144124716dd01244cfa8d761a2fe391327e0d9ac98ca2a181a21f3abe9275e4c54331da0ed9dfbc7847ec0a2028f558921be757eb795101fca869d5c8 +K = 923024383b53902e347375ea474cd19cb5f837ca93cbe6bd5d99b5658317bfc6 +C = f064aa56fadedf78945d350495106b8256d0f9c6c2a0af2c9cb128ba8ba51454974fdd176dd158711d1ea5131de185be88fdb524b391b87e47215b08b87b25042225be859f8cefdb584ce38c88a0de319ccc923937d457d4946d2b6d504b1968ecfbebec74eee29aa6aed1abb10f294f7a33197dd82225f4012b2b57baa6c5f1713aa62a1b60d78a6009608025d499345c94a9a8dc0ad618f2ad98a197df99d9ccffc597e458a35cb4d4fef86f7b1756a8c46180a555b3adef27b316b1bb96ef9d7280ce7da785bd57646a2d5652067e6618df6a7135b5de30b8a717e57c8f6cf037ccf16bda4dac815473398ca617fe0c854e7ef5837d5f9dcbaa687a1523ee2f7d29a856be0f390178c58dbd10d249ee60df6676393b7b02ce921bfcf112487a9058b5753f4aabb8f36a1b84bfc3b0c7d9b467b356464863036819ae1526c7e0bd701f8fa6348d80b3f7218f66bb841ce2f77fb228855b603382213bfeb16cc5aa79e96282307f85f7670c34cad539a9164a2a42efb222d0bee92b283328d0fa97c52ea7ab217725aa97f1ce474349576eb7060f1ccf402882993c6aeb8e3fe476125ab2030e66d4a571f08af69e1a32e526dee169b657ffe464e1e73625f5fcb22e91c3429e8cf4f4fd7a7e0f1f821cc34e4deec8a380b861493508659efdcc7399d66b3f30fd20e7b31aa20ae1f28f11e3fb5a610dab736f1b2117b9c3972b5a3da391c06501 +P = 7d6d406509320909d6aa23c879f8d51de6e896173922583f58d3b56d2cfec2b554c4cba6c28c9de9fe2a2e8cdf412c66d4f7372a994b458bf9d70a8f625b229017e80d50612bbfdf37e736fe73399e02282df98023742e2f11b094f4e16dbb92b6b1ff83c7639296b71b50b7c8d460aab9436f6ec422e9cefb6d8f428029ae2f89101fa92d59960d6b5595902404428ac876c10fe23828e1e6ae6718ec7312637be7a511f7ee5f375d424f233b83fd5c80c7119462cbde8c70b314802c5791c3e44e5ab2773f6397a4109cdebada930fcf42213903da6ca43a4c6be5f0bb9f054cd7e928940cbe43d216e90b386dc38fbebd70cf6e443373f0c4ba60b13d71d72ff16289eb66da0b66f938f0d8f56e2a9a3a13515109dedad7f83a7eb9fd3718534a4880930629655cd5ce5a9e4fc1c8541864212d358e49dd2991340cce43c0fef54e8f260c74b9b8398c65c02b076011b625f84b500141f079d371ab8d50b0fce5471475048c50b4b39b0a62cd996c80a8a93814623390fac81d435f59cf89ddc4282f14b723f1b59848dbac1e7a5ede81cfdacffd66d96cc7b4f78344212e26b45bf8fd2b32c1c83e937cc0a6c8923e6743491a7ea8b3115e9cdec806a700b1f7e03e4bbf35c2e33912ad0304b77c78c54137187e301d9735d17ed06bb79fcd930e9d4ed6dd0de2fbe8e027c15c995b917e3b8fc159a2c483bf4805718a04 COUNT = 47 -K = d0aca518636d5f71cb7bf5833d98f8913b1dd5cf154eaa8aa1606f7da600426c -C = 5f0e29b73512bf280582d27f8afca82eaa398e5eef69a1e503c25212c45c9e8e540108b40d60dba3d86332ee0ee75d5455f947a15a85f757e4e99c5d0e1b8219e61be26d90f1a5e6dd48368019d8e6f50e3d63884b0c2d6e287cbbdb13b550e6afd211c548cacfc1ab208d212dfc32f9 -P = ed2787bcad3d65ac02148c70da98af595c86eb2c0d974bfdac31de08766dac0748495562b528709500344e6a23a76ac2bd9ea166a07e8e1b4e50a3fd91b90ec68f3ae4f09b3a37f6089cf7bc82bac7e0f9768f46f3f898ba5a4732c114ba00a1159b6bff68 +K = fdc3e49773bd472ac82a971d4edaada1c4a01ac1ee9d9e903090b55b635aa161 +C = b112f18c84750fc4f4b892c1c93e2e8d473df87155f7877eb71183c07e6968a50203d53747c7203161959b394c8771e4bf16263bcd0321d9ef67e2e4dad498665e05671b951356ab527ea7436344ea6a19f0722d952d11dc608966d446bd22f1fa722083883d466c2f3ba3a05930031e700a6ee4f6c08e12b3744efedc149f0ea9b7d832389d159c15507bb235b9abf33e09b7eaddf4fc7027505c349fe26f30f5368f47c497ef022391c339630ec365e47ff8b2a59804eafa83c02d24abbce49d42b7d82202614a6fad25f20c51c373aef45bcd1823cbc99567f6cfc5121d919a54b8f060a38e4f4700b4a8b60d0f1432e39be2e425c55ca8074c48447e745d6d1a9657ceea70fae366928149dc9a55b2aef0170ed7a19561286b23ac06f6e43dc9f84961b86a9189bfbf54bde1c5a2f3a08e04467e97619c34fcb536dfd3dc1d4ffc574ed66da09f1ba5ca6fdbdf33733c7ae6fa1ab47d3f0687465a15be98ebe5486e8e9b8a9449ab93ceb7129af8e7816d269876e2e0c09003c13e085bb6cb56eed36f03c3eb5c082679534b987d915dd0094e14eaae97eaee93c1d13e2b5c4cc2667a596cef7ac19178b6172e960c81bd2a918dbb109ad57f3c507f93b9dded330e5e744eff8dde880e29c3e7eeb42fd974a7790fd5d48495ab3a425c81621f259509b92376b09556915ec885a19c805e55475e8547692fedeb941b91b19d1288857196b461 +P = 971a5248011db3e51256bffe632654cad4c671cd958b0ec772b32fbcca50d2d37493724ef6599affb15215e84b7fa2fcc47d6205a9a2b962be2e61fc825c681bc1536930f0bf7e0727cf83bf6ca548f4ccca1014bcbc5ca79d547a01f737878735472b41cd07dced4ab45772d4d60452f6c7410a70578796a7933bbd243239054095ab613e1c7ea82de141128487976af85086875aa7c13cae3f3e2b5bd886b307638974dff2d2fdfb72d28fd05147a21fdb64af1723ec5a320b16a097b0c09d94696369c8600bdd0ef31da9b2edba4304c0ee9c06e8c59b0bd40d32eb6c964fc8016cfa6c387c048f9dc072ff22b4fb7da8e3e298656605b3e0ceae3726fd58c0e0477fd3ad5f4e0184937556b52884628290e01888fc4108ace2774fe4f5209738decc252fa1d1352882dbb253aba544bc4b759f7fc485f69e80f5969563d43a2181401c3a9a91da2309fc624be99606b2bd99fd6bc99cb2edc454158f8927d95b5aac4ae9f7b3123f9cfde2c46c1e65f1d62d82ee9d4a2db82ce12ba516124064483e75e4e82e8b37f38dc8ca84be7405438f4425fb9a00eefac177cf864920a28a3328a2083cf6fd52a3d9d4b9eefd616cb9ef67eb4c7077e35cb24c83437e55cfe2f7e33e778eb70c5d9cee513d754e2fbc968d2ab4936c09bca3e80f2aed5672376cb2a15ef605d04ebcf2adf24a04a830769135d8e5239549f7e6162d COUNT = 48 -K = 225530a8493e5b0a7d6eb158677f9a385156377dd990fbd0bf9b3f3382cbdfee -C = 1f96d03a5bc910824d8a34ef82a364e6b2ab8d4245432ef1e3b3e84af423f52311a438470cab1860504a024e4c6d0bfe0c8d2ed42d4a12c8ce97775930063e1a8c27d9b07e687131782068466e9bedfc1884dcc9dfdbd337dab09db96a629ea7ef8f4533ab11a020e0b51310e4e3a7eb -P = c4ba881b1d4dab3d8ddbc1cf620fd840e5539f9f9aca0f0f6ebe7d9e085588b0f01ebf5881d3d542a3f33724a19599c337a5e1325526e12b3a2e9bd38f8d9f69b79cc43b9b81b7a4c1321fa23d582fc8f06054ddf51b8544cfda05fd534ba9e24a1048405f +K = 54d5696b1794b7f4c06bb6298d790c9579a244a5b53a5fe52d054fb8aa81d875 +C = 986d953fdf0fbc6b88133c87889a159c4ae47243900a8c725c744d08471f3a09edaaed4276a1b314ce04e53d4c3948e140fff0a20b392aa8c814313f0defbf31add74b30008e721a71a1f9c28413831ac782398559a6a30248eb78e378ab163935aaffbc9d5baafd44499928f84acf63d91c5bb3d436542a062fb287958013926ec481f99ce1d00235d2392a4d646d37f52b55f50ca1d267db92ad8c4da23634c279f91230ffbef893155c9a17b7dff623e8ee018de542607169f21283d4e60e29bfec784405baf87b4d32c2187f119c1fdbca30dbbb64dd5117979b9bdb8c6f951c5dcd723d2f6e01d07b093aacb3d4119744b79f8c2fa81cd34e15b644a1b282a1e530a2e4a14db92fe5611b382e50bdeefb2edd4050d0bc335661e029d806930049a3408800bd58dc4846526d7b20cee3217fe8b6cc852cf99221828476feaf3056ed5dfca7ac1d4a0e2b807a290bbd8cf3cecf9ff26a2366b58131deea762b26a0b85baac1cb07ec74fbacefac77ed40fe3cd17708de616c47bea9b556c1cf62a4b881a727ada93c0c62a37eac8aa06cc9624059580676f37785ff93be0c551216fbb1aeed6c784dfb75aca2567256c5232a3b53dd6531ce65e7430dc6b0a09035a899959cb2525ba098bcc0ddfd92cbe7144ebfb9927ea6649a79015e3573c57fac10ffc44d077940bf925607ea6c2d8d8d96cc4e5aaa5a15940fb4af3f39a2f386ad37d4d5 +FAIL COUNT = 49 -K = 0917e4ee4be201d31d0bd24bc86aad0b361cceabcddeed21834672b321beca17 -C = 2ff335e8c32076b80d08e2acaca191637551385913673c555157b67b110efeb137b46f3a48c7bd9680bc6c7e5f6121af5933e91ffabac0c99c86fc44d75051cb2c0b18ed626175e3f8d9ae47a5203c92e0546a05ccb4abf56405cfa26e43cc43dc8249cb3c3cc213395f974281cc89ed -P = 04a71cad656eadde7d0ca786db9c7567b9b6df3b48678443f21f11413af1187cc23a7c1c1be353c5d01d7b6bc7e7272a03288babd86cf5be7b7c797217aa44cc5ad34e4689cb6605faea1633e6338bc0503cc4f33faa25eef9d200ebeb7237133536e18a58 +K = 37b24924cd61538dd7fb803d3995c4f4ad9d3e12fee2bd05c5edb410085b65b0 +C = af5b8029489e1c5353a5eb4297e971946181a01bd36d2a3589374a9c86be56c4f223e56152c0615a479980d055816bdcf1be3261dedb79128a5dc33dfece52f3329fabf99758062b3d43ee607b9f2743b0b05176f2afb163da155a92b75b3db803ca864154b37f3e54c0f6cd912e2216913384ff55c247f186291f0b2d934447f13174522f41f0b96b7eace6e67ecdc32317e6793ec23fddb22a069d356fe3b9369256c543bbba16844d5a3ef32b44509b9b71fed02c923f0828d0e32620c5e45dcb3a690811b80d9b8f19dca0c21063c1536d522ae1f67bd90a44eb5d943b55fb427ba7e830494e50a43b90caf552b32327b3192e0c835dbbd4116718c6a76ddfc7cf442e2ca433c9b0bf70e93a9be487845f781f6171410c7242ec97a3b1442b9624b7f96366f73dfb1f7a9deb02c7462f4d965e6969dad4c4bba85586156c78f4f39b9eb7e2efd96fbb7d3ec8dd1b8b6f47a704fc466ff05ed2c9dc94f5367ba661611f0673273587ca8e8dd5b0e55724f780a575aab2b8e980979e2ea372d9d75f3aec4e12a20c4a4f3a26e6d06676697c701e90c8945de655a24787e8d0dffb4bd1ef254fcec158848cb42401b6d5882fe746f539df04271f8f142c1ca6efb54dea086615ab18a8f8576b0fd4ccc6d7156de94ca006915239395da8b805872b0450fa840ec6ee2eb2f2167f5cd957dbcde2cdc5eec55957143395696ad2a438cc1da1ce6137 +P = 8c554158737d2ff711b18be91a4485d00a4c7ed06dcfa2f4f26a3ec9dbfb8daae8f9afce6a4117c9fb65d35a299a860c4a090aaccbecf1e08b38c27e9395e23f16a0932bf2158dd3019322b94af9b934983f6bb375f41ad00fba7f0ad6221e875bdcbb67b369b0b370b20102130cc309116396b58aacf8ef208b6f63aa895ba7e7427e6e6c91f9e79b2fba112b995704ca92db42aaedfa1300575c205c045ed1fe8e2f2ea4b9dd2f6144aabcd5b62fe1d26a3c7e3c0f004a0147bcbcdcbb4ad697abae21e0c68951568a05213fefb96a9e30d6631dd9b0b6043ef29b0c4895bf46cf608bb9bcb6b3ac6f2dbd277945fb21dbba1c9f91da883e1d1c5912b32dc28e8b9aac2370d43ae744488c4f67ec85cf474df23792ed1d4c8dc542a5bf81158104811c37b54c44e7dd6c97a27de8f0012aa1e47b049ea085a81f32dd3a77229847af63d1b2870ecc2e88f2eb5efcb43ea1d73357c23814a50914bf2b695b8451e729a33c09df5ec2d0db5692d78f7016d9922bfd87f8e93df653a7d920ba88421e4a3e9fedd562a072824685fc0421bdf864aeb24eb77192c82b91630c638c1e7d4c8fee4e4e47edc35a1b5a3ac9f727f04938f932d13e77decbf34c1a888232def427ae37ea9ee94b9dfe7a461f04bcdbeb7cd4ec8d818999def0fc344215959fd32baca73c8b999777ef4755405c15b862148db6809add9d95c6412de37d COUNT = 50 -K = 5c646d980755e82bcc32df5f82e613ddc02c738c809a60feabec675d96fcf1b7 -C = 640ead6a24c70467440ec29625fe30dcef0d86d2f1023bcdf8d5920ff036f18dc05ed4fbfc1f70315396614156bde4eeef1e0706753ded471fa9b54a941cd1ed4582b49304886eadef99ee207f050d7dd09de382f9bc91d1ac70a8a366c2098de7809144f50d8083264908eb6738bfd7 +K = 82aaf9df0c755c31876d60dcdf725e86846ff0a90955b15884387aeffc1c9c74 +C = f886f5bfc9620e1b494e6b77c67d35b6f18093a5ab0a1f91d937845cd93e8c82e9433131959895adfe0d0deb4fa7a2b28f012c70fe8f3e0edfdccfdc6b398cbb6820513cf9aa8ce7a7e5a4be273216576bb320389462df37547b5018a68496797bd5d958eadb03bfeb36875ae6c3f706b35fa7d1544e4e9312f852ace60b344ebb0a21f3cb25e5c613c7a39ca2dadd90aee478b954be183327d7630b8b4c4dd23707654536ede2d7ac3e51bbb32b0bbbcc2f2d412245877b163dbbcc8f8933644ffe9ed611798b10b12a866f7c279d26c159b3af798bf8e6b4b5fe2ad6b90c95d22d5f0cb2e14c44f7ea01393b15b90b865926b85487f49e45c9bd530aebff46e1be77a6d86c5aae291b6151b424acff6085c9c838bc2579781f07f014b39baaf4e316a846b6f97a17977fd531d49efbb86767170c204df215304e41982aba70ecb2056e847587398710039a971fa33ea2b2b8b71e72e0f568be4a408510f9a36a49fc25f4f815deb3a788d584d7ae2d65c72940dc7a5d0e4398763c1e826edf8a8f5bb73efa0fcc1591142a53583a901a103a422d26ab5745bf75a983cabcd7c291238a4b6e9e036b928789796a30202e9666b4127e4cfc6fe0b533026fe5559096a8fbeef76a198e795076dfb934abe57cfbfce52ad90be6e891867a688310aca8aa2e429648095ec7c241e23ad11970d9a2dd390e9fec027f234c228ddcd99f64e1152eee9e61 FAIL COUNT = 51 -K = 11b6dfa928af0bd2dca927b862a94be314eb323258da2f305f975f76cf3b8c22 -C = 8ddafebb92104885d5e5a8ab77af1e06b9d13e5106e7015d2403d4b77cd36cdafe78b7bd0ca812672279126f4ffa49c52e89e7c4a2c383fa55403a8f80a0b6a9d78780602ee02bedfd274b9f5322bb0fc1f29e11e3819b8716575124fead72cac0301dd7bca98e0e9a430e74c9b53b9e -P = bf5eaaa782695f107565014bec131fef95852153cee7858002bc7203242e9e055b602b116f623f197dcb6d460da8f27669499446d4cc690ed1b433747122b48e78bea197a3b2f3f01ebab5768e6051182e4391a80a011f1ffbcdec2292508802827eae80e8 +K = c1df1e7f583cab57cb8039844e051e0aac508c904b0cd3faf8b69936acbaa283 +C = 8a69506a0a1f6b84ada918f1873caba1f3398465e2282e4897fc58a7ff16f64a9a0407dcdc0a4973f223081b9ffaaf5144451b444ea032ef777b668fe5f350c0e80f3483d03a5341fb07434c350c476fc91f3216f1f4fcbe2c2013b94450e1b4ebc2528365797b1b1d5e525421d34f4c5175f8298d656e73f7add8fa25da014a461578909496865ca411ba8daa2cd0c8a72b784a5edbd60be9393f2a5afd398f6459e0058ebde6eedc6b88a901fe60abefc8d50ed722aead12c1214c79c5962b398adf219e583a1953328bd1617e4644d9bfe27448a82ff63ada3f4f3d08383125d8086a0bf04d0ee1ab1ef897e7d92ceb84067a63a7f101aeb70d68f8c43c2913278f743b6152130f500ffaba6d72f35b10bc7382a273cdfb329975bc6d70d10464b87dda9a2579fc2b216311507236fbb43738e250c01c37e4fca137c3c7e6d4aa9a3d6dd95b5981cc8f0094a6b87d5e7d545cac5aecfeb915efa3fde59c70025b7a6204365f104c9b5749313abfa6bf6225309f7c21ef8995edc818eaf14a09d31d10503613fc72bab4ca7344187636b6d0cabd1a90681a46370c2ba21a9c361bb4f39e6e5b7a1ed791cce27087919e4d4730b7fcfed5f867423298d5aefad28b44e35e6c6e9dbe1e199a4c34260251d2f80a8919edc287ce6936be8d91d2ed2e7989d516e2a90ecf19a07a72b640b5d19b50bf0d41fba870b74550a966fe6bb260d355d34eea +P = 21c765a3dbd26e08eea349339eab8eb16d5fc62df432def4cd76f1e533731bd717f852ce424ee430fdbbec446512aa4cb1d2ef4ed503755a2d96073b4ba9268935eeaa9401349d0bc3581fcd1b25597782d59a3002b10e6bbf09c66c5053265216926978d3a35231193b94a244f9f28ccf5d33977e2c00c1762027d621cc6b97497e645cb3379001cd6b44e282d4594871c169d14fba65057fbf99ecf5da023dfbd9c275b7f23e3a4c773fec302b26b0b1ceb049efb76afcc33acd3881ced638ba037eec8ed9336666b4f5c899a9c12d31fd6b59165f3eceb908055962ee768bb32b8d69968f245934c49cf66c653a1b2303fc0b7bff98e8b8cd94778f3e5b58966ada8a0f816e9b5b740b5c8a019ede7a9e90c90706c98f0750af8e7043fc661007ca822f096b68c4151ca972871123313c0e039086220870d1a383b6d47e96171444520709e86f532bab2e29d04322c13e612711c59e4dc5d9a83f1b0f40bb40d7f3a40077151b63da412e1b526322fdc4ef89efcbc556fc17d437d6f413dfcf6e75677fb9c383321253a9807f51ad088d0a9b8640fe2f58e82b0894ef6b489c8028c2ff98a4affbbcafcebe70ec6cf642e99b17f32d7a74654aae5a1fdf7cb50c1c6ed56c59010fdefe4d2f4818c5f11542e0f0865192a32b71f27ad9a8b422bd65457aeb5cf91be0ddaef30d15a3bbbf4a74c88fba8a9f389d819ac95ca8 COUNT = 52 -K = 1817c6eab1e1ca5a8d3083df5a511af3e611f65d04d97118914e64c9b3dc2607 -C = 9aaa1e7f124c11f293cf0fe23bd31948a192685804e0a259af932267df7aff10d307c101faa0f1194f3d65ad64d548bca9eeeb623772b669b10dfb4955a53e73e3e88fb33b38aeb62f4576cad96a9d76930bd54499331e4fb6e3e10723a4b916bdfa44ea799c21cfc7afd2eb9351be81 -P = 7b1eba0f9109140da4b4c669f8ec6ed3329ac771b6927c64a5eedbdc45400c7b803a10f736e1978a059bf529a452bc3d129da7f17be8ca08afe0285b56d80718c7b990d32f860bc7f359d6f5bc9946ed3dea1598d3e6448fb6c6dc63de9ba6f2b9648130b6 +K = 9f2b0a2aee78938c1355c58e10447e255e2b20180082994f2d2e466f23dfe9e6 +C = f709b56dc9fcb350f356cf3530879a29dffe87d72502a61e5b22c55c2bfd3878fb2c453365c64ba921681ba17e66d379fb0dfe93e55304a5d71f9340f5ad79557b0da58364ae98240a86ce99b8fea1f70d80cb5570e3177779157f18827e6fe52e83ba805cf670f9a1e3a0eac4cb17048a243eb6f1e22cce307c469dbf6ca9f402f485fd40ec459aca7350629711ab30d92ddfa809ccac43c550def901ce4724db5516af54389a4edb9eb4a1732ddf30197b4319ea8d29091c8eab37504db00d52ddb5d651980bcc233a85fce9d6bde979a3cf41818cb29f18add5a5496645b4abfdb48cba180078414f77c358f96a7aa3e65fb1b9d2c2f1ef1b8fb314f11e2db8eebc933f6f17ae86c0c3b18e0fb3e862d3453957b7073f0057f486ab733cf768e11da29128297f073d22351b0f0239f98e5979d9657489aeb37742e7ddab7eef4e684fcc7b55c81cbcd7d74aa0731dea013bebebf25700f9ac4864869a9672f853a9a6203ad03cee36c269c6def6aab73175ee95152b4c83d41d9ba10bc2e261fd07b4c582ae2838a291a95177a7bcdec1c885a9de7ced1360c53e37017e656bb80d0028e4968490b93ed7d54d5181914eb789e48f9b8e1b5c640c508a06767b0413c6361f0bdb9cd7eaf2e006bc0e04a05c552464e62a78b9aaff96233a3b70ae2c8ac26fcea4cc222d2b9bb74ed0aaab1ff0b1770a4d4bf52a68d20fbd5f5d02e83d27ae1822 +P = c60bdbeab890a49a56ad202f3e65eadafb62aa2d0bf885803f4ed7fb68d2daa83cee36a0bfa231061ebaf1d78694abae1dd65b114c65979adaabe368de1882d74d2b2dd4a62a11a745d1aa1e8b4add5ea766aa77b618384d397a553d62daf4c3b05f0195aa7858943a29b280836a5f6407d8ba881c602e9b8c88ca2b32dbaad07c377f6c1c4cf190618ec931cc4579f55ec81f6ef9c3a7e61cc7cf24cf12ecce9138f0e462531017dbe4421a7edee96731e32662ee784ea488129f2caeac02a7515702ee8c48f165b96cbff2c5e18eac5249e7f0d2a4610714f52848a0375ecf827097aa2b5c00b95dddb754b35853cf9b4317aabd78c1c3c8e620bf8a0319e6c59a7425a7569d24300c95fafe46f65121fc80c8b147463f5c69ef180f9da17bfc805f7ca5fffe5d3eb7d5395e727c02a9adb8e9d74dfed2a330062870875072b0d1db73b1bf22acf9726bfc3135f763c7ad90aa016d7f1fc6679dc07b5805fedd3112f779c74a8d47edf018d8e20e85a8089709ec112310be62103f648c2ebf741f033a67b97fb587e0315950d941dca27f134c5bdebc8b4c8b3b4b4dc3942b958a08d7be05322b23ae9d409cda6b0e108ba5d8a6d70d5fce6c9ef9a9816c0294083582a05ea5e16ff879b1db7d0b3bc156ba9ed6be1d85d26f98ac9048a50ea91a24b0b09ca8cb1e0cb8cc45eb0f9500f86baac288885e87d6ef26d057f34f COUNT = 53 -K = 48023d4e14ce04becd8988147688d48f6dfef2b19767350ed202df4c0f261eb0 -C = d5994707b05f066c8a74a7a33ce829d4f72c6ed821373c2ab47349c772759ca185f32f41e935b8b8c22c578a51f71f455ce8200678b233ab17cca716e41e70101231c66f5bc58169b2c448c86d2651956b4fb4f1a521ded6eb17344374fe9d0144a7ec13328f0ff18f97c2a2cd1adab7 -P = 8da239d5a140fa0c1f5554c22ce5a05072220091b939c7f45b5179b9234c7673d9e7754d1f75d3ec45f55673f3a2aa6689746279887b9be4a029c26d86bf78086fa4267ba00c2d6d95b07fe05feee3178f8a77316d97746b2c0175562d3d0cb9400bb548da +K = f21da8acf8fc6fb457ea3dccba51c33d966fde958e07fa98e0e1ac9f5f5734f1 +C = 1513ff45f56e286181113da4a38144c75c1c574a17f4a1c65b60b0593a654bd77051e12fbaff7831286ff60d9705ab18eb3a25ddc5292e20c068e6166ace766efa9d9bc79f2338f07b35b1bec2da2a6d11c76c157a30964e3cb6c2942a09b8c8ff8a11efbb6c8e491d5c42f2631c6a33bbb4a5850b34172c395c2f84a65a673cae6db0214659ab99dad38540d6ce5fa90df3b2916c4a60472be18b5daf6c887f0606ac296e90e22a6b665bf6be74fab63c0a2c49e30d209f7eb3a54ef9e1226abbb50e851c29ffd3c52500fb48b58c36045cd5d20e5c0074cda085cd1abce05a4524afc00c7926b131b7ad1a0c4a6d565de325263829822b3d16a1681e37204787d27474cf85cb0f7c6b4eced39df5997bbafa20b85c6f7caad771bd4db7e6a77d62ff077af65830f0ddc34e13c8e116419d693f93fba72525339d0e120223c29c4b35774dfe3f71e3c0e34eb7ee05f9f27be1b2fa41eb3fb48f41e3ae60a49fea290a8133ec7b15592acaebd41cdf2954110f710ab72ef089f443f2e3fc3017831f388c8750e15c1109bdd2454c8174c83218002d8a47e701a704ef88b39e021326b8501bd7f7386e860a3736e1541396e7ae7653c218226201db7bfdccf6477ac28739dd95ba81db61284720cec705d30259489ee9df9630135454de333faa32aae633145adfbb7f25988572e9a558e1ed421cc791ad6c620933a9b70df01a3dc80750911b8d53 +P = 54aba2a03e8ed084ec3d5068f26f06400abd608fd05c506935cffaf5928247e06c06dc9ed30a3b0d9819c267a4fc473839e99fb4aff1ad44ecf15256a22ba6338564082419bab7c41d8801ace20f349912e21ad6a8dbeba30736647c015ff127a0538051ba6a6678e919df2ebe379644fd06b364633d83a792a40b04e9bbb1fbd8d16d22b9cf5eb0baa804ad53c7c9cc081db74ef7a3a1c91203fcf0db3f68354db6c02fed1e60e2177f72891c8ffa2eb17ef804a61c54f77cc9a14d896ba57f883a07cd1d9000082626084152d0c9908d6868c33a86506ddc0b9aeb6c389ea17a151b8a25222448caea3fdfa9d8f0ffda1a2efeaea1381222ce2775d31ff0409d50823ec23351ea66ba7504ccf2f56c628f35023b12dd34797c969cd4bf79f9ba960437310a28e3904c3e99eeeec8ea8e4dbe6bf428c7d75a1b628d7b33cb8743896d7378b55c9e4147ae64335fbffd3ba2fe1736ee120e36b8e47090093de75eb461d932d0cad31def3c0f29c630a1da4bda12885a3ef67f26b75ede79d0ef0f2b8ca620a433f6411cb725fa03f7835516c1f26addd808bfe92fb6aa3f9729f847fa706cf3b4a1995f6ce155d739414f7123bad8d307b59b4adb2c6cf3d4a1ce26ad1a3385e5be549fab88d8d9904972cc493d885f9983d0cdfca4437debe9fd4ed650650b74b282fe2440174eb1e2c1603b3eea472a539c88bac808bbbc1d COUNT = 54 -K = fb50dc85ab9ca81fa719b6fa58a3d6e02c41e85a92ca9c761ed6282334db4dfd -C = 9023ff97c5d4aa6679997f15118c34a8a74d6730c6b0062486a650b292f7606c7891019a21a884a5a5ed0c36ab56e4f1a4867fd043b1118828a249ae36aff0795ec5a748597a97f65abc88e39896ad09b3e148c8e36098b52e82db4e09d8d37135462a103f0e7771f43748251dfa9a76 -P = b7cbf704a687e9e0bce18eb54e6de5530f2ee6f0558607c75dc112b40316a9cb4987abb37a917c6acad929ff972bb12021f9497630513c3bce2008c77df5ae28423e22216534a26ad326dc0ee3745e9a3be2b3da1f1fbc23472655ad43351d50a82142c1fa +K = aab6b8af7eeb2244ed1b9416238f88679d8b8388610d3b0b96ec087a51e25a08 +C = d9fa27d361a5d5ce2179945ce20d59db20d4a0dc95c453cba3b624884db19ccb03cdd234693bdb3df47f178044bea02a071279e90b2ee8701e271ed69c4f7b0f947a64b523bb5b1d135ef3672a007154c5a03c8cac3a6aaaabddea0f3b5929c45e806e4e6730d6ca4bb63025078abdf25066b2a7a4eecba168862f736e5e522c88fc9a428c7e00458698796c07836dee2592df5c2a7b0f86116db1e85d7fe05723442e45d66bab48977f711be5e371b8466c064f962024ff5ae67c886e166b179edafece44c72844a22df5429afd6c6af4589a2b56a3caea3cf8a14fb0e13d59eb046fe978392b52baf2d1eedb8e0a540c886647e7f1831fac021e239a31ad292144757a64f38a34bd96151243de73a077717e12d1179f7c99081d9c3c2e1b86c2643cdbf4bed01bc1b3a2880c0985dbfb9237616a443e73d407b62166b7afe4840c1e5f4a37ee7a590c980a35e1ff2a01ab7f83f4e0446223db018a84397bb689c7ac52cb2f028c93f2ffa04c3cc62a27a5f12cd72d48ee04c0fd1282df1fe8b0af50a338da5d596100aa8fd6884cfae69f6bfaa41da35dcaeef663d924d1de5f96b4eb665401fd7d74f7e483a742bb34760163776951401d152c46fee93a7eaaf9fa6df215275db913cfb0ddbcbe30dade8c726ff72a77e062288033dc0873ff7096d5678b9080768ee71f999cda676f0396ad5f2ceffa874c9cfb81a45f54b38bcf74b604a2d7 +P = 4f78e218f72e2dfcfd33610e14c41af75d9fbb2a444b35a18c62231ec797fba80d77897d76e501d60932c360c16a7c80846c76289056039e21884a3322d00d7cca32aeeb402feea8c4dd9bc2b605e707a5cbb15e32ada11866fe721200e9ec5176a10cf77fb1537c803940d5259b1420105b09a6317c925f64bd4473210e88b42adbc528e627b58e7f2aac01a3d97029e4d54f1f7382cc8256a059a2fd50fc5a13ee4a29efae029f62dc910469cc368620888dcb1542bb5da3e7939e78223ecf5ec349e97ba1b75b2410ac040486f7a431672c4bcdf1933ba2285cba176df43c01a788f4289e0831fd84daef98c729083d4b39490a3c2c359ee1755a93ad439c1d2cd40ce7032a8f95bf9a80bf631c166b180a6215d4d693e0d1e0ebcded0545ffa3930802fe4e65c4f4b4df70b40d096461d3fb9bd9f4f73b1553283644c8f01ff744e2ecba86cacea933b5c67dfb6e67c16ef3052e6e69bbaef85e6c96b737d922a126c6078ae11f138c863f622ea7e0aa2b5c8c611a02349674067dbe71039048c88a813ce884ab4f667291c988449093d19827d9f1e306b5719ed78d473d43cff3533c9f0cdbdcd8491510b949c72431af841e859ccb4b52e7f67563a20c60f83221c2d5ac081ebd3bdc0c39011b1b4d97117247718fd69e24ba980ed5347ca3342419d158ce8bee257a87189214e7239cfd2867be3d4291c6c8815c1306 COUNT = 55 -K = 5c79747e66363d1db8412aa3ce205dcd2fe02a64d67140f6161c44b24ac19414 -C = 5bd376259b7cbf45b6e0d3e84263c6bfc9b905818321c14d4e0e16f938c42d4598d6b47f6b55d20d823e19644976f3fce399412aeca7b466ed7ed7c4857f31ced63e5022b5c03dd5d3acfc6f71b882cbad73b8349692975a5477f97970d6101b62a62fb8112f85b1d8497a828efe3e25 +K = 772087d12df548c5bb844a7124991aab550870ee804a7fe79cc311c943bb1ca4 +C = 6072a47d23cc9efda9a28af81ecde387115ab2a3d317a943cd2d3cae5e524067e2ad679a0fb3453e6eb6f679c78ee18ce072aa15c3d08fae5634a452a1dd909d0be930302fd0ea4ad3358ed4addfcd162840485868a9e61b02b7919d2b08511fdeaeaf3012b798e22432dd44df9c55481ea89b2f5de3b49a08b69ecbadf5cea84bdc9db072e53f49fe791cfa139881dd2e7f84d5982b92a93acbd7ece9ab8b49ac3d87864875221f14d9076bf48916a21561406790b5c51e8bc5dc53828b3fb51442cc4b528c9b8ee1045d1817a65e523779ac69fe43535b2280e414a9b9077433d17523de03ec0587f7b067ccd6fcc2e6ebcef4d6d751ebbee4c67cbe528f2714a5205273bec0e7761260a4465e70029d536458555f4a93e79d507b8aaa09fb171d7b6fd09a8082f1b00279c9a2082e4875a76ffdcb514a75acc56a348a9092a7d88be207b8e1c22999d3d7160d764944d84459e3e49716c8ae86111710923222bc40d6a350ef0fc5fcb2b040007a564c91621a72041b2e8780f83d9c2713c2044e51279895405195e93923c82ea6a1f78624c48cd0210d4464a20d7c31f9b589bbb8af416cf3fe70a35506a4bcc90abc5e2b68aa6d86a9d006a9879dd46b5ef30691fb4fb4a9b6ce704d1e37d8b268d24cacb3db2ec1816d7ba4236a7e4b1c2b9ce9ffe805d8ecc2c218507a971027a112f566be5cf482bf0fb0eca46d7b713d4aff0190295cb7 FAIL COUNT = 56 -K = 4713aa84e7794d4fe009fa3b818b2a303588591cd4d03c1013dbf240077cd2cb -C = 420b8986b796bf34fddcfeb760ac54ccb0caa7ed13b001953543ca450905b698522eb082649db5f616716a5a6b81082e80d098a30d20345d84724d782037b361f6f844d2872f6757a33936a8822a4f845e8ee91915251aa6f56430f282558909b5775d32ba38157e60542803312f8cd7 -P = 44eb23dc1af29e35bfa7e1b62466302bc1b745180427bab602f81e3ade18a0e9ef65d019d598e79c112b2d810d8b96d180c6ad52152ae9bd6dbf602a35f5909eb0553b96c6f8bd25c1ef385b2dd6a367003d9328e7e792000be668d01cf702b7d5f54a72c6 +K = fcd0ea22207abd53ff610f275c937c66f708c86695e7d93a4c8579a660e1483f +C = cdfa4adc46a46bed3afbac3b5773319791dc769376265afad97cb241a5c93fb155c64641a495107788cd3daeeaae0bcfb75ba5b6a28c2ed8e5247a9ba1ecb5061019be7c9037072836c15fda3ab920bc1a62b55d6f8e0e0767c66b39e9b02681934cb9872921674994c6f94a292f06bd32ff1321325fef132a7da95034d0570fcded48be00d2e518cb743e94da8e3009572efe32e471f0876ef67281502cc56206cacfc18064b09e33678a04c1852cbca1cd2b16fb955a37a5acfbb4f984baa01a4985f4bbd5ea96f325e5ff89d13f4349b0e6ad66c14b44a5147e4ba49d03089b571325325d0d5739c09ab0e44739753bf3b88fed19a3818b45dc86b0acadff4d11feb0005c1c120e54a97de4f75dd8a2d1ad306aaba6e2dc2f456914c99cc6e314ec17cd25f9d24ae53fbabac061ea6b359fee8be145904c3ed7ce1b4d5bb4e40949ca8a0e9746624fe6dc841b335973a246121c438b4c07940f9c1d6139a84ef27d9afe622f4a9698c6dae0e6f92dd33eb6eb61b8dc74286916e9bc8c565b7501a5bf18398ef6c14542b26c4a3524e5a58df7eb5fdf2b844e04e86618b0ed207ae9175c068bee575780a78002178c13e57e65574b6ae80a7fafd4660adb660481af27fb2dee0671dd284953fab03067f2ea969325d59c76461cd974e27d9dc74b36c9e7bd0f242a34a8ee78e08e80782e71d3e2b5d28f718063e4ce831067caadd9bb6f23bc33 +P = 721c835f61f77f9c88f3a2edd51a99305a7c0f91e6ec3fdfc91d83eef8699e3adc465367d7a064fb26c1790c68a59e9691ff7f49ca548f8177d8e7563b3564fbc2091795c55ce9ad56a7b886c89abb6c7922fdcc63e2d84b38f8948b97878e2a7bb496bdeacb01ee86260e5c4db159c173fdbed7d4023142bc49820527e5e220ec9b69e551b437567ddfc20ee9f246cab4dfc84029bf8b3d0b754f3219b479d6b06b0dab5a4f3d966a579581fd2dfd81dba975070b3a0282d394f0927a5adb7e3aed287e4b4fb55387d57528b37f74bcfb1f857a798e39687e4187282a5ffec8afe45f50ea774d7d42a7a84cb9c18d0e186877046ac9d072ede9a6ea250dd68025e51040d87cfcd7e398f5667161cbe687f8ef8c83d67c5d8d1128848699b5152f1baba308f353972654bc558eace822e59656b893a22b714c7efe27b965438cb9dcb57915fd0760d20c52cc0dd4623a709cbca22cc9929850559f53fa699093390d102c8a7c94473db2b07fda06ceaca1c2d981614121cc71e38aecaad19932d5f3b9055da20acc46cbe20b8d3801293957699d513f863af69faa1f8defee8fed5f021148a5115aecd7a1478ae88734cd2ee81c05d85071b5c8cbaa2777dcbae8dd2a93d5be6e581726fd80ca770cbffe3df89eebbdbe10c4edbb0bb3209b4f5cddd987451794f3cd450765b6e823c139f35f3a9c25adea21a7e22f2f20b5b7 COUNT = 57 -K = 5131a6e44140f58baff8dfc25aeaa46909954f1885f651ff3a9408ff8c554bce -C = aefdcbc129a9b40462011dfb5b09a5e7826c9b9f97d8984d9fe45c31a30c54c7f332b517096b12db6329f360330c333ed1a0d44d3889c67d2f73e95cf5ac52bb7ec5e445630e816a8da140644fcc0602d387386a09962d4e6001eecc7f3ef4ceec9b717e6978d0f3af0c10b876eee5b5 -P = 444a710aa2b1281cef19ad4292b3de2d1a50674e642c3cca4f6f20490d48d26a6b73a0dcd73b6eb286debc1f1385a34cb4abd2d62e2f9836c38556cf9e07b20758206682c3fabc15b00eaa6dc08bbd3348dfb86e9aa68b497f9a2a69b674cc913107d8e122 +K = 125950b7a9c2285197dc14a545429391f0527413903ebd481096dc49201c3094 +C = 91ce51db30268b34e63a7d98480b7d31aa22b545dd5b9de80a9d6ae5d709c2ae22be0df042b20b742536413d7aa9121b19de25d6a9e89a0f8f8274bbd2391ea71784e606d0c4fab5b81b145eb5e5ff77fa69332ef252290cc150c04500de725b70883b56fc3a2b4dca5b2964fd376a1a7dbf763ac5b29cdee5474531e5ab1cfdb99dae32a7c7ebfc93506c194e6d0aab4cdf05bf8747b2ddab18d942abd70e89b4dc2ad0617992ab6861ed2c8bc77db4b15f52caf87aa1412cb1a9aee8c0469e6b08600c4d8773affaf13001f5c7a85c6adf4ac24b421c75741ccc20dfaed33b66bb77ac0b6680a62c8df9fbafd3d7ec1d4561e26b8c57d3fe98ecd2c75ffa55a4a50329a09aad6705de2e1d8907a2d2cc74546279303b9750da320916f4c623b135076048e2b12c39569e5492196fe98844fcb9ffb0325e1d7d76dfe9e3c9919f5b025814615de0d51f6abd1477aef90d50a66337aa294ce6d6c3390e55ed74b94055ce7d663d4efd8bd5b35557f07eeb1106fb92cb0faef78478defd870ebe9afa20c914a327f297b01277856fb8a9de039251fec83cb753f2dd2492bd51ddf60228a869f077b3a6177dd9ca459e4476b1886961f2f4710c8329ac908a37c3530f7caad5c4e796a0f2f544b91a0c910f78883e472926ba755a251a70ff3b53b0d03780d863913c0c2cacdcd187d5a55a1ce02637a0c7d879341773f4f16b8f4b55a3243cbbfb27 +P = 52c7ef32098a2e3062457828c0f764be97ce91d93b13d34ee73cf6fd35e1de8d6998dbf34341d5b58be7f9aa93005e00ece136c2b08a4ec51e3d9497241c446df745e480daeeba3864d3d5aea0de31259b4a7ba80df21ff0cf9ad0b288c2f398c2a9b061596e12cbc8416636cadc21887743c0ccf485a785f6556add35bff7415b976ace966d9f49db35ce178dbcc68bec99e055afa4ea6bcfa4072eae482193a95b08d114b8f812ecc35abb6704c13b0159bb06f0e7ae42fba05ba34208fc85a44ead5904da48b81612e0bf60b4acb35773ee4f372524b9561306849cd940d21a04f4d1c30cc58b935ab31b69dbe73c968d6cf2889006cf7bdf1bcfe664d6346b7f9093cd0dfc250a76cb1c82e217c8a31c89fadf4fade639c4d0c6718aa4d0ccc4f97744d2214908b04dbb7a1d49cceb52e333c3bac320e9d95e6512e3bc2ee4340ef3684aa0cf43adcc33ab29a2a3580d82339f655e3b9f0abd17b99623a9e1db6aa87231fc59790a66afa6990cd5a0047a09e1fea45531be83817446ff4f987f44bb008c39c1b62a4083e6b555b48a6a956a612239abf09cc576dee23ab3fce246f17cc62c5b2817b2cbd0efd3e3a9e4e7ddd174760ab7bf1ab1545e730472281efb115cafa3cc734ad257a40d79e2fbfb54ffc932e8badf4bc2ae5bc5681c33a69bbeb94d608f219bcff22d01fc28cd76a5156074d845bfe3f822ec52e4 COUNT = 58 -K = 4190af7c0e78be7839c80740cfba86988dd36aaf83f0cbd2ab58674582bd02c5 -C = fb230f2e41b86dd98d428266572a822d10d13effed2e6956d12c045bf82780a4c3b1e13f3ac42e5216a8afb6d1a5bc110e87964d024592d87adcfbfb6a9fd5f50e9e03bd802916b94fbe54357a480e8bb46703e8fef43122d874f62b667c1a8716ed391f20382f2ca86fe79c1e1d197a -P = d3658cf65c0012a716cd74cfdc5e59fd9d211b2c71d0dc85774f6fa7ccbf39de87a22f3435ced39ea1d37d4169687b09b7886610cdc7e1c2e4b93daa8d0a041b60edf7b1d70ac6af433a5179aa277e429ded71453894438ee8fe29f31a8b5916982e8e38d6 +K = c6267d4bcec25a0725d887f66819fee44b2777ec0eb6c3a705748121fe82540e +C = d796b01616bd693a70ea9ab1ddb739cd175800f3ec10f65ba893aac5decc6c9b60a93fa5fe91d345c610dbeabdc4c793b4cbab737c99cc1504d763e239d40409391397979a35d7f7b5a279860253e42a9160f12478f20116a7f41703c1fe9c628d14f9b9594c1da6f9ec172f34e9755f7e5f59468738fafec2b739f3f46c9d3d813b9b7493d0748423c0f238c3eac9bc8839230c1f6a66fa6b8cc4d9c855099ab79dab150649501fd6a8cffd2e869b2969ae2e0dd186a68f4ce180cea09bb0afeb70a871b597eeecc79b7d2928df3a6c5a25e6c001df6da2b727e6b14723163c9f53a98d7b2a92486f507704075c9c22b52d8ecd1abddc72de460a6db30772a6639719fe57df82babb624f38530aa88ef61983b47825f857c626233d68bab920c6ac9a65f8512bd6a9f38932f3467448d0986ded8b3f0297ce962f474c0ff267b947ae7ce5df717a4cd23c4b3b60975e7c2088fa529a5f44cee2543b6c8e7bd8c9f5fcb17d638fdf0e649a58eff9c7b003a49c6ad1b1cdbbf9233c45b4ee8c538e84768248b34a4d458d7df953371fe208155f67f0955ac4c8d2eafa2374c0e3f32663981bfe4b5051d9d30e2cdbb64002ad9067c8ab6218669ec8ce50d92837535789d235952473bdca8790fcd351d0b5b72f497c5c15b71bd6e9670d3a7b0201cdb5cd963f2337a55d2d5c253a60f2b0db9f1c0adac9f48365af86fb9a690d17f91a42890302df +P = 1f542e94452966f5398978dbbd7c1dc5d9680a789fa23e2afea8620a704f924c08787b64def1f8706c157adbf1456d68268d693dbc6ef83900aa2badba8bb7bdeff8ad5f2f9d95275dfb8447df0f0762ef3e2d7ab6ff0385cac29bc1b8ce72ee3d50a3abeec931f54f6c493a39bb38984e3200966d2e91648bc161a1ee1758a9b42fccae102ba3ae0d32bda8bddacb985556faa0787f96ab23e9dec90146850320ac37e42902054ecbdf909c098467c91f23f55780e23ca746928e2c51ae50c535f47a5b742d049e7a7bf1d61274c043399fd4bd250db30b24532a856597435fc838801abdd3fea830123318e634bcd471838d0140546ee4b7c79a0e0b2a211fd11b9661c4b5dfedb8dc558305619f089fcf4c2c9f52bce0caa52c949866160a35eefc5471403c8eb5663fc81ecdf97b13ff49a76304da3982a29aeeecdf686b89471915c53d5be4ff6877b01bd1142bce540a2655365a9e786334cb457de387b4c26b992316887eb837e4220fcdc54ee225459cce5250875951aa7cd07b88639f4fb0e64acddc63220bdcffe71f287120c6467210e7e6f19ce224f26a33c0ade2910ae60d433b177c667393fdc782cbe4fa2e30312c89bb81544b61c5df503a3a7ad0816be069f058c4d28cbcaf3a90611a67f9928ddec55c0d1a82ec7aaf26448ba1e8e29e3b50c1edbdafee863725b3d23f4e11720131b682455d5b6f283e COUNT = 59 -K = 9981886b08900d0dae2b54d960a16568f79c108c2b1a1bcac95d96a374823200 -C = a3680de9e6fb89016a77899d4f53d9cde605a61c572dfa06c94bc7c0598331d4003f9b6a9ffc6a029449537d752cfa494450e9a81553fb4f5e80625ecad704cd2057df8def5d269e7a3d03689420b5251c48aa93f3bb099c2a7e3a3b2d8318c6c7bd13ec243753f231e046d4b0302a30 -P = e6d18d74a955ef741101a1c1c4bb45f90dd57f6f3d1e788545d6bd49dd376dfa63ce3a04db9dcd448d9ed04693a9daed42fff146e668ea84842f26e783e491ec0f1ca99b6f508226de9fed8d23c8c372e3662c18addf1c91f12bd87c8ebbd98d6a7acee83e +K = 5a8e892fc36ca349ac918e2ca9be95fa1bc203c2d0452728dddc862e814d9301 +C = 8f4405a6096bae8af3ed0ac13016f3231f484c3b5add86356b5ad5bd1863e45ec9b4392ff2948f1c0ab125e360c3d5ad294d2ff71b860e3d60713a72213c4514588fe33414114a0c3a2315992a5a89d84cbbf3226822b53d801f64c41c6af6ff617b6ca32fc889f68d33d7199474a7f5d42abd8ef1eb88e937cc2b9104859cd3c7f4adccbe030bcb6a79f3abc7c5cc1bd3b92f28fa269eea00e5ba6db8022e903cb0817020190ec11d3f5bc07fb91a3cb36535d893220823b0088adfb5c43c6d66ae0fc9736733fbdf1e9fe6f8a7259756e30b2972043148a41b48a97be70d59816ee7f9a7aa194771a86f2694507825f4f5bd83e147b24d5b94c970847bd024f29469c26885627f39c891ae04b68bb35e6f9a50401fa8879895bf5342bbfd38ba2f2e4b5dc0c10b5883264cefee86c4e2508b1934659d550049cb7aeb93e037a271da7d55e3b950513c7c5c1a8c00f6c20859539d017ab16f412c4ee1733fb862a4979f321c9fb94d53ed061bac83ac7db27f1cada3755e471b7728cb307f3ee07f5dad66ece4fa208af797b8a6336845692de538edd1a6184f2c1323a998c7bec5900dccdefffed63ad54b9ba37d8034473184a93bfa4872dabbd4b8b52cb2a8b8ad5bd7a8fd06c88debbc09933cc481607bb0b6c211441b1c7cf188af24118fb28f8a0edfbdce51ee05c5b3115e61e88fb72e075b1d0c8e5309f5e8462aedc8f87a392feb4636 +P = 8ab322387b2f32f116a16496e71e688dec8bd481bffe786eae9e55bf0a8fc7cac0ce8d496faa9c6dabe50e4654e720b8a5e1bde79d36207a950d5acace158788b831f9d2010b34228b086f5f071872af7ee4b9762bd2477962a30062a937fd73ffd0a09904fb3411f7a86ca1f5b9a63a85d28358b85d2bcff9d80d85a2d471846f491411a2029529a259de4bbe3ed6518c83ced7f84c06155c5145edfdc4594655f3f15d455fb945f63f9f12bb200ef991e9342354cd47fd7646b6691adf5ee348e283a483e29529fe9f8794413a389659e4cea8c6f63b2bdea63663924832ed0ce99fd12c6ae9eb29d9ee873cbbcfb0b40c6055025f247b8d92ac37ef9bed65ac5b49959aea37a5d73ce6020109b4ce05c3ff624afa18f86946a28aeedf652c417d81c541e07abbd7beed79b987cef4e3fa174709f1375cd0418734c15ab1a851137e23a8b5651118a88e1bb63d105ec9c0aec2a354ce177e690ad1d7ade117a8bc1571d38ed969e569c36655468a72b3daee891a1b89785a18dda04a001c9a83f54ad43751686fc72c7897b8019cbdc5af08167d8a4064a4a9fef8016a6c3ef6d836e28a84cacb7770727d93c720692c3d0bd5677a2cf60cd357c3f23c108514b3926327ded535e6a90a6118960475b79a0721336514247b0e4bb6db9a3f7bacf54490b639bf0e60d2083c2926071aff1a7440a21fafe73ee3b6523cd195cf COUNT = 60 -K = e87366c1ea0aa895d4e5649bc4ab3a95abed04bf8a062f1216b728656cdba1ff -C = cd6a8e899f3cb4abb378634f6eab2b84c16396f2b94cf84e09e65066f381c87d11838e5e157fad67c2cae6bdb8ed31ec70e86379b0adc81952610db84b3dcdb479fbd6d5347b36956ad95369ca5157a0949f4be8b66a884ef8fad06eb4df5e71d2d39f7b36d60f23cf0f61b6a58aa822 -P = 39ee8bc86350afce10ca478bc20e45b519a5f5f4833e042415b34684360e531b77305e74f2f5bc29167086026707bedcb4d8df18a77b24ae640c8c7bd2cac8a3acd7bd6772628b76d2f48c0e8f904868ac9167805d3ab327143289501781147149186b5497 +K = d1837ea5e14a0f55a066de90cac6df4dba4f2fdfd5adb45c723413b89fe20abf +C = 397969b0c42d60020e8e422f0577507f7d35a4d7661575fba08e3d3f4b09c497742d1a0193d6d9e45a6fb4d6ebed05c85d97e3c9509936aa6308a87ecd2ad44a97dd0f2b53acc9690b418ad94e44362668fdc1e75e408b3b8182c96b449852c2a3c932b6e7d56494acfb1d353055664b5979ceeaef8ea27f826ae5220bb3360bc8753bc395f3a0806a97ba54b5e0d5c9cc3a1a9968f0bcd02a5b1c13d469bcb86e84149d5ce26ea7aa130ad40d36c5ce8955df4cfd942d184d331adea6415043920dbf7862be13219af4a16849101565fe969cd03778853a05e71f38715a4aebc432785419d96805c03d9a70d02fe8264411f14ccbad1f9781938e5f77812a1d1cf9e93d7995ceaebabae8f3d683cd0de6d2208ba807c52b0c70c9d3284e39ed1eedf41b97b7e79015e5328e8a7b3cf05c3ddfccec419811316e9f6dc9e2571c291f8a17452a9eeb8c534c3a23f2c80ec00ec272022d31fca28187c6318e488e91f1a11cd460e866876bb4469661d2e42f8dafd62e0c7d107916a13231806e0d36a095283478c43faac68873a76d7d189c748304ac02a169c64c595c226f1bcb73473aa0ff4b5362ad620585dbbfa09ba68bb17e604ac0afc3cd869545fa8b8774d4429042ab6edaca8edba9648f491738813fc62f9872727ccbed14ed55076d634fa69c39fda801b4445232f72d36372b2327792dedc0984afb58958f4c5d75aa5994b8a7cdebe0 +P = 189828dbe33e49c60c5a56775bce2a2470afd9bdb7660fb89ba5af6be89f7f3a2e1d4b6163f5e326f3bb025154b363bada557fb9640306977739d389e42ca934dd41c8b76314288b56f46e923d73426b8a8c6bd33093813a19705a88c9aef4b71e4efc8b77f4da7181678d5e0ebc2fc1338bc2952fad1dce563c6fc07c6b32c79b20c346f621a729bc1fbe5e469e1a6a67db321d090a276a8f03b95dc67a4f235c5f90efd845a6a8944d7912d820f6c40d38804a877fc2585f491977d1d7056680b61ec525036948f6cf8efb1707413d2c0eb4126ae54eef10e27d8afccdef77d7fb7838bd6985a03c23c181b7bda883e903bd62190d200f35a441c3816e132fe11d408d5ad283866e8626b85055f0441b0d3438ae680648f11a7001b08f8c905076565da5c1d96aaf3660862e92aa6183b17aa17d5a4bc1835901ab17d97fd9336b1038cdef552324b7e5db116788aca443b668c73711268a19a85b763da41822c2c1c7108a6210a811de4e7642627144fede41119b914f1070e8e6d9858be9261f33ff67f458c258c5dc0869674935cadcacfb60ab6cc2cdcd9377057a797c2889e934c70c5725ee832ffd535c1d84a2d5fdd5d9f7fe6f1730c20b23c62ba2b336907d97340191ffecadf31aba09886c59e788e2831040a1e567e31f8a566cf00a8b3a2644956fd5e0bd123376efaa00d197cbb682e5605d461ed2d3dbffb4 COUNT = 61 -K = 3d0c63a975d8dbfe917d9f1a0180b601fda6e09f4cc19edbbfa888b4a25f658d -C = d943a2fcdb1905d78466cca25e0289c9947132c4d6ad6662313a215447692732479cadee2efc075d1f41b0d0acbba7fa45ae758b3db21ca3df3419345da9b8ef9d04de8934793d957e98a9b73a851ec37bdc7485b80259f0351290d63a3b3ab5d40fab274b33462403d23eebe9404537 +K = fd918e8cb429c2a379503d9afda755c377179e2bc98ef6095c901daaf4f0accf +C = 591bed5db168e1b37262ef46dccdb63b5e931f3ed140284ddfdd7bc705c415afdee1381b072377a4d5bb8f160a1cb9ee47c209804757dab2dd5440d5f5c567feaf141ab5963b8260e4df22253be737f80d0a39e7813046e98187397dc6ddbc20be96fd751cd730668d488092d93af54303fb2a53973847d06dd04f222c60a9238e39c4e6cc6cad9b0dfb87c6dd193b6f81ee791e5ce05d29847f8973ffda21e06c0650329d020b6bbc9a15f8da89e6479834f58a03c6d77af7e7c55301aee075a043dfcdce2122ebf683c9aa0ae077f0cd65d18ae20ecd62709b61742efecf0829af8654e64dcdc144b93f4a18d26505c5db40df92b7c3ce1dc605a1131f305353c8a9baee54acdd549c13bbe4da4022c99eb276c882da5cd91dad6acedb71121d0cd2872316b9409c9f1f3b127f658449b5195a7dd3ff844e14bcfac31633ce648f2c93d123e87a8090d471e1b335a8a36fa61ee338ebf8fb4123a4fbd5ea6145c6b6019f0e6183b44343b218bcae369f02fff923606d745f2d44982631d09725453ca3244ddf0dd8507c8502a8dbb736d691738738e4484ae84aecd107a2f63ecd56dfa063759cd1b1305947b4711db32a42457c63262589b22e30d632173386651ba02336afbff952136d9175447741fb9400232f437ef1a2dcde813da173f00d74468948822a7da483e3b2aacd0ebd1efb5f58f244e300d95b1ed56665e958494822737c01b5 FAIL COUNT = 62 -K = bf3bd133f7755a553e560c2ac826f597f4556106f47d99f15288264b56a1b212 -C = 3b64f423020b854e40cb375133f95369ee64dc1d04963beae8d22507c49ab2332d4c5e7bab8c2d855251724f4ff4f01dd153799662184d7d3d5308935f6c4053d1aa47fb04f7bbf41b773c2da9b3ba3ffe2ccde40eb411be58bfccbd9059a62e395aab69675732e2efe6231306cc2c95 -P = 73964cc27a9cfd37146c2439c99eddb77c9a1a29ceee428d29413372c869df48fad6680a44ffe27be7aeba412c17cba3926b5b754700f58c5f62165de5b3de3c0c6240ef32686f15d3ee3abaea630ab7d6176d7c080d96a4dd2b8596389aea2a5e919eee75 +K = 0b102b60532e4be7bf1f6f85ec1c0f6246134f222b04231cfc509473f247fd72 +C = 52ac0537cc157d65a34167fd195e93229dddbec97f085cd5dbb87d080da380d068548f900cf1dedc7fb010ee2e51e421db1c4cd1d16abe7d1f749c4e34d09305009ace837c195ca82e715014283675bf799ec9285dc00d85f3dcb0d46dd3f3885d731f9ef03d6988ebd64a51f8e38a37a3368d8332ea40035c36be380af46d185a8ee0beaa33331b7f57b6765905f1054d49e4a33b7142eddcde9dfaa028f5a84b80377d7851ee275ef092f2ea4961af729cf9914945fcefa36c6e0917be0951958088107abac1dff45e07190ce7826dd2013ec5755fea264d9ec0d18751fa8692addb64bb0fb511ab15ad968d45eb5aab1e6e10f0e8d21fa9c1e3e9196956c141d0cf947e9d62c0be3ae45198506906ebcdab6bfd95806888b909652da060a36298513ea0279bfcaf74e2388cdf2529b03ec43d84a857610ab671dffd6ef1468d12c55f70f7e4a79c6a50f82a6210b97040c9240aea5eb0b5af79ad822c37c45e2f3443f83a664e14940d1802816d869adb415a858cd060187f4aacf0ec7fbd3e5de3b57b250e8278b260f6df0f14dc3f8695b4ae46878033831ee93bb2be29f03a75bed3da044f6155b11748ab2af3c83aee984c66e1fc255e028c0ee52ec6237594c530380ac1046288be5a1783d418b3d423f562a93faf0dacdc4fdf827ca7e32967456966bbf51a8782590c3d2f1a41bb6fdfaa9620a29582751abdc40a5c6a2b5376f86a9d +P = 211f2edbb55c59382e861892610e6c812b3c2e9150f5cfaf99b35ba8f2594b40168379c8cf21b8c17dbb4b4df2321e86e674dff972f1924ef42ea403a1a1f296f155e59b0e9875fbc0faf7f41246921523f062cb6fed4da8fbef525438215c7243655586769ec55c93d66cd2e8c6bfaaced4cf3c60b568d6e0e8defb2ea4d45ab1903277b8b9a096623f897db1c05a51da7a9791459e3bab7f31eed6f0ee2121f505e9099adcdea6a9cff56564780e1948efbb8bfcb44c8f6f704c35a8fd50423e98e407feeec953811f2e20d70470fac37668b189979bd988b8d82f93beaa6978e8a90b8e624f2474b50076e44e67acb3134a621ec16d1659ddd5038fbc7a29cbde5f78e4c398f9310b8e94f89f60615b92574cd3e66ff119c1ac3195e30440c5f2d4035f2c972a01aa9b52bfe3f7b23b8ed0d8d9a00542324fd16cd5bbc77d23b513d0a77734d3f8193075f42eaddf47f182a02b6ce07afa4f90c5262fe71d375f251fd10802d555efb2c3b70ad57dae9bc37cbf6b9c54ea1776397ab427daaabc8eae6af45a77e0b107016d9413bf2bb6d99a16db7f39791587a66098314eef6e77edb3da6f303e35722de9737c010686b217fdce34084a527747cbe51dfdefe5464021317f807fb7899bb37f0169b44765c5c1b3849f9bc44b21a011aedce4889bb288c7ccecaa689dcc7330446054bb930c25056643270214f0398cee23 COUNT = 63 -K = 9ca8ea7d09f3445aa26dc12751f2c9f1f386913abbc799296ea39ae3e80c78f9 -C = 42a9896106337ca50ad08402fb417e4afe4e9ead5b62b44525d08ca5eb0875747b60859061382c47efcfb2bc2e9956322cf96038c47e0c5d26df86f436924b0b0de00ab9991a460f2aeec4d74d2ebe7bbb7e20dcd31b7edf23127185ba01fada7b6e2b2c7b2d582b77e3206d66c3fd6e -P = 2fe57efedd4c175236bdc94307eb2fbd9a07a24109487a73c54a2f74f26f22c555640edba3c39bcea2b69119ddee3c740c63f4b4d6c9cb99aa4945674e5551e0f1d651795f13299a732c101dc363ea9088dc75e57680d31275c4b461c5ed743331fedbf574 +K = 5ce9d053c717df861be71aa0df2431e5f3f74ada258e3ac3b6a0397082bd0fc7 +C = ce72f6452e9964849db7b2f8dd8b0a87ad098528f0a05d42f18e5bc33f2a4ea980f54c75bfb33c76c85af67ca28da7f3f37982ad9d1f5525622a687b0bffaa12895dc50cece514bdf4b48836caecffaedb9ededdb6c82e07a295295582f146e7468931540fb739f17208bb4e33e592a2d44854e21bb833f3170eb5c79a80cb1a9dadfdd8d6d46c9947fe0d8257bdcfcd2014bbce119832929ff1bf3b5b83fb29ef0724a039b0a10e3b3d74bee556bb831dde439d525aaeb0d6ed0a32f736100472a2fcf912b8cd83873d5aeacff2ffd662c20c654854ba136ef75a84108c79eb7da4cdde52ab4e6b6a4f0aee29b2668b801604621f78c52bfbb197757037c46f1c1d8b0924bbe96d4fd707e79849a42b0b33ca09df72ce04011ea106926237f06b2735f83f3cdc2055cfc3e86908b9f5a4f07c56fb8c76e2246a7dcf7d9bd070415fd9f3cd7ac62d2936e7588d69e1f963b3de3355081682c5c5ff018f5ee51288cd726442ecf34d5cb29369f9b444e792a184daedc3aa16fd3bff7c8449ab37ac23d8ebd1284f15d8b0998b5e86257d917e6b23d0ee4b936f04d46e07cec9c6920126635b569de19e9112575eb534fdff6f9ad23ff8ecd26287a0626c14318b3b85c0ea5cf69aacc27d00ee291cc22e0152fa11f4d6017ebb19d932875259ffc2e114d39b53a95f977c8e6683f85b60961a5b13df6853ba6b092f5eaab7e1c39d0beba6b202480b +P = 74a6b26324758599dad094161a11dcc6203a249eb2f9e104949cb999081533ebfc0cfb07a0fbec0b91ddfcd890531fbf043f53bdf05261ba0ebc8725e842e60f424359f3e5369815fb9825b0442e6fffcbbe7569de46330de75d384a813cf589d977f6cd6c4248118e159206503e1924e2d319fd557ac8fe737c871c8b194e315893d0190664827d2e561a2c7a3f847f65bdbd163e28df01e3cf5f51e0e21c5b84f207f5e671bff44060ee203c9979389a05844b73ab490580d4d89723c385127f9b7386d835972ee91dd62244cf7cb5edb02c80cf415d708755767a85846a8447845723a3318beb40a55ab371a742e0cbd43529c6d4bee339d40f44cd4eae7a0ca4ffdbf83755550f5ac361988c1f065ea9d0cdc26c6e6f18cb35ad3a6204bc4925c5590a16ed40556d5b5f652f335e47f75be08909c4fdf2eb6c8886d6ccb8c72d9eeabc1489a6559324f0c85966700f0589295125dd378836adaab5a97667ff1b74e377303c0ed123ec672b7e08a0bd1cc45acb2a06e2c0fb1469c3a17cd40c6698520490753808086f7b27fe658e9d9a2fd15e439c006a7000c5bd125677e0c815c7424822577d47289afaa8c0db13f7afa74f9966551d882729b534d593df585cfe292e356c205d01c87cd4ea6c68a35190c04a7a56dca11496796de55a121f82a85e46815f1a8d6b7f49e8cb49de1424561f153f984e39bfac494f9998 COUNT = 64 -K = 5eac8e95b4dc92fa20366d2c3fb52a722a162ec993a865b302f0dd754ea9e7ff -C = 62c08945983466b756d8365cf04a44452c78cb601a4589d9945b2acd20e5ac43d8a0f6014f15898e98255c30d0ea429ed75c158295071e198a70228bba7b5e402468c5452ec28d4f525a62564dc05a0536d2e9ad51249c323a89addaee4028cce3599564c596b9ab8de9d54dde547f57 -P = ccb998faabd0b0befb8bc75f36af52ca49c70c4c22268fb1f852af503728fc8e736ecb5851a6e65a5d42eb9dbba430033445daa06641add92bad53090237a3cad5f17387d75c99a2d80e09cd10541cdc1617606839c78b720a5bf17377d7eb5d7930ccbf41 +K = f4e93058a7823e7f1f132243f637dbc518ad2bbfd34a704d16d3fa852ec6b8d6 +C = 84ecf8535c615b0881a6e3330cc2e85df14306e5ed460986759af1f56c054c08b6789c029bbdb7fda5a84a96b8fe9ad776c3a43b3131ba22f8b1eb4abe4bdbb4e652f801c82889f82e2d014ae2f83be04b66384f1f646a2ac959eb95acb8bc3655b64682b73af89049386c19c79ad625f1ac9e042daaf01e5eeacfb554d42e90cfc048b0df83bb8dcc9dd8212f1de66f7ceddbe1db6cbb4ddbd444b5972227713131b70d6e6bc4bc33e7717a90731f480574326813ec6e0a73bc750885f5a8b906cb66949ab71de056156ac16e15d41d6357f347a8a3dc9ddff730079a614f6432cca590126055c37ee3d613979dcfdd4f315cc696b9fa52bf68dafff90f55f332c4cf87f5ec9c6acd37851defbbb3d4dbea540dac452a40d3f4b9886a94bcdb5c6a6e3aa91e7d9f89fb1942190d6854640f5d06bbe2e26f57e2eef3d8c01ca70a5f1bda458c74a1d237ac771bd3f419e912c8ce7703e095a403701b939bd19deca7dc59405ad54940213c7f7316173cdbb17f3ed9e9c1200c75bc1c66dcd41e805bde056391325d0b0b44d27a65dfc90c41c8024f37dbad7828a1c0f1016f3c1f9dc54c2ab7e9234fcf9008d4535d919e17ab6a3c4f3db27c25a27ea6ddbceb6aec605a5ad524ea55e161afcf91e83661e2883a429bf1cc8b62a29aaf3d8c5a8c9539c81849ad0f186c4656c390f26505db38ff2a2ffef8700193622af15b3f48fa384aa9fcb8fb +P = 2ff3ff3b793575e77c5624c6f77b648e7c27a90f8662f44d208edfce842a3820b8440bf2cd1870c5453b0f6f5e1bddaeb0f58e9b65c545ef41593dfaf32ffc1a192606a92adbffb4b467a53c9b32aaa2ead7f930370b138774012108c70d41e1804f49d77c614f811237fc792ca540d10459012c2320e286abb1c134b5fc2822f5ec8e78fe07ede88bcceb18fa4ca5bc63c34e43280e5ee2bbfe15376678fcfeff8c586a7701f84a317aab602fbcb453773653d95c065898836fefb7385e259dec4eb2e78b244410207819bdc62d98c931dc82bdbfe677fc0ccbb9f87342f300a42dbcfcb33c74901ac703fa61392928cb3b9e4666a2674cd7aed509a6613000e82ffdae01f41e881c4af9d83a78c8103c3894d66e0e06669303669c128ab29f725b517023f79d78039b6bf1a87404f69238ddb514f5472e40e23269894a192aa83d2361e37fc25ab7dc89f6659431f114c5546ff47b1f3d415f6ef16545f3ee9f2009ba7065a97064e8e8456b934a16318e7d03e527f7631b577b239f15947ff45337cff7d3dab155231583a8768e9379412e519d95a4ffaea689fd61cd02b326ff0a9f49bbbc5a49c37e30d3fca4786439edb5820223c34544c1a85d664acda20e29cbdcb733bda8d62578b256ba51d67fb7054e449282022133607663ff39cd2f49e7ff58c5d0da8d15502a2228b6ad546e58affc0defccc272d143484423 COUNT = 65 -K = 444c0c253764753507106ce20c122af7d2657ad6f261ff4c5e573390e4852709 -C = 09305cfa1f42856d2fae7acf2635b160e523b723dabf45d912961caaa595cb838e24f81411aa23f081f9a043050d820d349fe89966c66d236f301ec7352b7dd73750f61e45363bd7549ecf5d1ff6454c8f8714e38e89dd8c5e152b2464ff0b43f43d99f7c6bf3cdfd0b6f706233e9e39 -FAIL +K = 5342e2ca07c9e92e2e0f253ed93486391a4565d69416ed730c9394feaa9214e8 +C = dce7378f5cdd2dad1533de631bd18b7347e14a20bb28a1a73dd2d35c272753fbb24ad01f4540a8feb8502b1e66bb3dcde0789470c891425e9451a8a4d26b17e5b8ccd0cbe824d539b068089b0136999b3842cf00281c17a2a7ecf4cdc8ac4c1221a8ba4a6c8c61a0e2d59d0cc9f407c3394e87f08e8ad11f6274f6f504a2bb75219da2f67041cac706d8d2ad2eb11cc691810b86347a05555925a4c9dfb435ca40b6a3457809e81498b2d029847779ddf44ce7908eef5d06a8a6ec1597d8637c1c5c8bfd9cb769088da21c1d98b55ef84e684b57d8ca3625700981e53ffdbf7c12833dab2d353e8cd3516523530a732320bea8decdbd75d6df845f5512fb4586fb57c2966342f6ecadb9c5d721443a1ecf46f11a558767fde8d19a3f7c9541a0cf0a5bf19ee425dca7f6e455c6970b134dad77b483f616d1af59add78bf6195030afcc1e3ffad389eae34a525cfc63760205f4dccff282ff14485eb17afc1f58506b4acecdedc61fb89507cd6ba627841a2dff989c29792590d978c2a93d501e431340f72ead6e0e77c97c5ce064cd3fdf7de8bfb64fb856e4694a3f97aa4a665c37cb1bde106224e8470be4bec2cdbe407eaa2875056743f2995bd09f32b4ba12670d2a0da87320d428778dc549c46ebd2e1a360c7a76bd4a7ee6461ba490e66cce5c0149c9f507fae3a9cb8f8f1913a14e01c24c50e3cfb933a31c1df23c6a7985119a41fa23f7 +P = a6ccd8366733f1ecb7dff5ca84c6c0bdb091934ec9b8ba42862cd55abc6182ae939d427e822fb9e9a6527b644fde2b8c4c4433217ace9e78c4db0239dd04d8ce741ad56b635c4c8dfa204005a4552259cc8976826dce1982196c55b677aea157d67b454a48f296714374264b05f691997961b38d4e9c670a12303fdbcae0dc99645cf976920cb953bea2d5c23ac18d992431990ad691513a5614b4c437d471977a0b9f200d2750ec23d9fda27bb448616bcbe985451286a77cf5292e29cea5a8b0d73c78f54a2cf52780f129b3751dcedf84fb7a728b5f54918cd949a51e924da620db345b4198ccfc0f4f846a3f3c108cf00a4cdfd383efa87a4a9883b9bfd03de243007a28f76110423136baa5d1ee1bbc2fc3eb56795fa00838c19cf21105ba939c4302fdb71c4bf74bd80bcc060dc0a072459c5710f28898b955258646e8f0155da7294870d20c48ecd768cffddcf1b7ebcc83ce41d298c86e6de3ced2418a9f0489a8f86d21c9b36f1431843c524443551500ca4b332be83d255b96da792813e9e664cf3bd5bef1de7dbf69e6eefe2a37bd242a65bd15f302fc65745fe6fda18be02ec9141b62876130fe841e2d6d2657322377e256ebb3fc04687c5710693297cc2321cdc24cbb0cd82718c7d67e6ec54aea2c7f5e383f266e56abe4c0334581e508d5319e530b551e6f05d9a069f369a3c3248f8e0fca3d1f8920bed8 COUNT = 66 -K = 43310882b94fc0abb6d3964f366c6f1cc3db9565c9a1b207a328f586431d9f78 -C = 0d26e9ba5a525f56c3dbd5548ed6ea8727b1972ff581170e279aeaabeba6b9516db04be82ee5b57077bfb9f1bed105ff43308757eeac51f065cceaeddc2c5888d413d34fba8820062df8e67afb1413cbf02ac7ae8c43b6c1db3d49ba0597777f3f7abe5657650ed1a0f3557c82e50350 -P = 68d719113e027b255fe3b074b8c2b4ac20bd7ab74fb0910c82251c64fd5cb97cc1cb22abb7ee855bcac9e567b8e5d586466dcb0ef5831cf77dcb98b801956995f90f2cf28dfdc0b648c53064c655d93446dd6c825601ede149406c7bcd42cc31ea906d7e3c +K = 0a1c8baeb8f43f1a2d47fc6efc8a7b699a6e5f12e057c83b1231022d88a1dc31 +C = 3107965e126ed49b38b0ac8d81c25c9bd195c749b5f875a76fa7a7e37cd4b4b9244cb8d9319545e96f6f6536b991cd76d4540d7c9502b075e1b6554c41eba3c59ec87b9a047fe8d7b621a730e4e7d0b9e1608177236d7216a8853dd0a483c07efc1fd2dc873fa80c99fc43c61e375f515f3fb684870fdee66d5bfa642e0e4c57a55c3dd34dcb09889d0555f5856ec5392ce547ac49596c267d73030d3ed7c83dbe70eeaa0d3fd496d627819a7c4e6ae94316a07dece5f9dc745decd51dee4f13c9fcb5852e4009e549a717271dfbdb944dcec13fab7c8558878c1c90ed6f173a68595d9ccf5a99a5f80aa3d99f5462282fdecf8d015f365fc96758d9b45c89c414556b916116ad56227fe442cf86361718e7bebece09159562946da01a7ac641dc6a4f415094f559628fb11abc3dc2a292c94457cdd48479d18660cfa39833ac4d81d13aacced2c1ca70383579be030c3c881cb93264971f4c0db8e9209b1c90b9debf223e94d678f2fb6a35d7a102691f47b1c1f0fb4ea8431d2cf97cd9edffdf7536e26ca56a9e5d550b80d573ce619bbea7000deeb0d611cabb5ddce0900bdd2cc1e94ef828f6c0cdb49b7b1ce935b48e265b33df957446f1a3f87a9efb50ca77b3471980dbd0506f0e2924350e52f168f0e240e14cd1b0fd8d5081e64a171ffe8d7f7b99b8882aa5f3fae6a1e846980684f936e65a97c5c560b292a28102c27d0a9fbe9a47f7 +P = a3ea4d554942e38c159563093a9ed188bccb155b7018a3b0e3900346fd521422885ef3c19439acc296a165a3c576510c53081a273f653a1cc19305e2ec31946d5703f070a128e98405c09c185b769dc14c2b27eeb0d5569b7e2ef7bbb344f523c50cbb1683d7c647933bb841fa497928171c36ed7f3939e26236cf9d996f9baeb985ab1d85da32e1d00b63b614821b69b382adeb9901e28d371c9f7ae7f57ff8771ee68cbe7aa8e2df5d43865c23b645b18789dfeb7bca673161257e9a557166de525b8278e350ea86b8e4e34be2544b7a8a8c304009d4d28992c6932a0ea17c3170641a39a926a9417f5fa95332e491f6c6eaa9e3fc8e726ca7bcc87c7f8bdef5024aa0703788c7ff76d0ebec201543ac0a53c941650bec886dde623bb070b23e4d27768578c4339f97a1cb5256f21f782cd336670229326bbe2ce663933b025559e9a68df3d2f402ac353572a7c97ca027f86dd452b11140bc17f6672442f90f1d07b917a28318fe3a66532cad79ed738fa7ebf9542d9a497ccae9ba7823bc298a0bbfe23f3645aff738dabd65bd47a0f48f82827cf1b318c21549d34e90fbe689f6d8d88d5e12d51fe2cf4ae3cf4a5bc22f52338c55a6fbd8f02cfb9f77408c09c85427343a871079163d2114395b23ef0a0abfd03084e7603bb80145f9cb6138c3b8a3029cc84a88eeb648e9e6d214623f7b97b3228947d5ecc662b5a104 COUNT = 67 -K = 9a26c04d56394c7046895b87ed66de4d488dea4acbb8b6981e886eb6d35f40e9 -C = 0c19ffc005edd0033a962795ce045aa228400fe07b54c610a390df938b296a2f5d15d8261eee0d412ce3501c8ab9cb731e353ada29ededbfda36438121ffbc0d33c0e26e4b084f277bc6d3d3c02c3051c71251da386930c6e594ddcc17d4637ec1e9dd6f25710aea196083e5d0fd648b -P = bfeeca6713b0443a21f5bf7209c14d2ac577476af1ba8ef0eecea757ede83900c759bf0dec3576270d34ea31c868ebc684c1ed80cc482a6596de75b2268c3fe7edc211455df5229fb1b5e00ee37d9005c8344b7bbb21e3776bb03804276af126a649a44eff +K = 2222838ac2804383b0a796719d6a5b2b70f4c6bf33454959363ef6ddedb7f47c +C = 233e3d585d43dfe46e6ef442d6965a81df722d92aca281ba26c1e1e60b2cf2a4ea1a09cfd472cb608a4610e6914a2c9abe07454cfe7b9c0223de8366ac72ab1b70ed11cbd9906d5dd90b7727c6c88466a35e995e4ec955f458f53bdfd3e38cc135e4f35a68c21abf5eab66e8f60fb8af9bb221625ad0aae6781268750dbd47b2b23ed639ef6e1f311aafcc10546f3b82a6488ee75dd1bb5b0e04e1ccda7105e5ef2f5cbe53604ad06544fc065d04a13d670fe088af489a453389a0cff201030da3f93a202d8e0c6939a86ef00b10fad39157300c93523100e626b4cc85cfda6574c323fc6e919029d91c8ee4d81818fe0655eedfe72a872485f61d9ccd2c2d4c797cc45a4f0b13aabd5db03d950dfc1badc7f6319d82d888cd935dd2245bc9ec76808f85efe08d8da59a9dca1828cae8776f77b3637c4dd22be5881ce18241c62b6ad88db46e067ee4f9c9a2f2171c73d0f89156cfdbef9907d968433f2ccaddf89211bebd330d495815005bcdcd1a5f0f407399a59c09b3283d09d2410ef79776ab6c39899d50b6a3d6fedc0f03c1113f9592e25abe10482e1afb57ae496f97e4dfd0900159de76ec16570f3b04d8d832b2fb18f4ce1fc2a077e52c79a94077f89d9553aa0d60bf2c87b8aa43a4b1c4240bbcfa76ea69fc88c3c5f71c7ad9ce95a030e0e43623f24c3b3c8cc1d06fbafb4c6cbb3273de39a72db4ee3370e58ba7c67077b67ce543 +P = 464311b8b6315a56f6eda1b5418b9c0b8678d20e0ed3ba166b505598fb6fe4e629f59858030d68410553794b293e0ff2ab576a315523513b124709a26a6f82f0f98c788b0c2cd16ec08015175593d3c4ec7c9f4b1586eebb45694bf2ddeef1a42674a2dba34ea0d1c2f7f60154f2d8c1bbe4994d9ee88801e69e7eafbe3c0d423e401b55fce153923eb6c13c388c7e0654f5fed649a7de0e67f8819e1b7e1eb4aaca76b67d0d100353dac59171cb6c14b93a61bcbd0a288f8808f6aa9d34eb25ab34d3dcac4a6632a34d5366ea72b4fe178adaac1b5e015539b111b99cf1c02c30baf8c56fd8881f38eca04bfbd8bf9d9356a9956b28212ba8fcbc50ce57b690da7bccb2073f1e6a62e603aa446a293bf1ecfdb58f4e676b50a4fbf0070ea5edf61b5c7f9ba563fab8e91263403dcdd5fcc82c60fd1e78fd5be92fb8f866d56bf8ea85c86591cf2601b6e2be384ae15b3a3786a4b6a01cbd4741f4231dcfc2b0cf1297640456abf55149f5fe0aa16b1ec7bd4995fd55386cf99ac420c185463c0765cf232b545f0a5b4292f0170ca7a43f94290cbadd841eb02f895760640020735220ae79fab4d98e1f8ebaf64c7649e230164ee2c84b469bb602d691a7d236d967df31c044c742ff2ec4356b75c22938b6f891642db2133e21f9beddba3a28018aa6c3d938725b279a07bd3ae68cb43713d866d2b4e578662ccfe4546f8d6a COUNT = 68 -K = fc4126a4126c291b49e3b66c30f46bba56f7aecd670e70b9b24b7dd1bbd3d382 -C = 682ad5ecc19824c7a3e2d0a30010b4a3805f895448448e2caf06ae924488527019819702f0c50e454708b49a1349e0f12268a335c8b2162d0727682a69d28c0e4ec1c7be8f2a02ac8bb44777e53f9e7e432ea7d55adbb56868c8d4aeba1d5dcacd1bbf651d0429f04cc8f6bb61c57ffe -P = 10e9aeb378270cb6c4e9e97821916961ffdf37b6d83053c388fe7f3d1e34f15bb8481bb34b10baa269960ea73272096ba07e8321caa2bf4b7ce174581cb8a9ed6a6ad21b6479e571ab05ee89936cd555fd27053cc0eed91ef91b4bcd129676562478084637 +K = 1668653c6385959910b68c590a13cd0503cd8d6eda8c4da97cde921041723da0 +C = 57a67ecc4465f67e3e9b4520665d0e7f92e68cb0f786124d21611c6abbc7cefdcea53d56a08a4534e7f330be7e9e56c2e0a057171267108e27871c0c87957bebcd64c9872ac9a9b6fff4b9aa0d942a3bceb354c7fe24a320f8f6cd7baf9b92fdd9f21ae4b76ebf4b1ce878926c15b216e276cc37bd84d9b344d4f854560cb1551871842cdd5f4fc96018114d130836456003e1f5f5da40fb1e88489d1cd6356a19eabddaf3d4839c7ccb4272d9a4065c457d84fab671ab3a2fcf133a5691e404d58b382fb10d8ea23c16bc0604fd28973acdbc9e78483d5469f3daf06135672eb895f63d1170da5bbe63b108560c8228104d322ce0fb51e51c50d27e4560480797e39c88987d86692fe1dccc9c9dd0c1c46b437f79940634ea2ec054dec9988bcc379350e70692a1bf6467184970f71ef63ebd056932e55ed27efa5134afe8438fc2b070dd12287685d23812873d5ac4f163265c478133635f8438787ee53eb03a5052e7ab9f4fe39705eb541e6f28d9e85154fe8a62b65e5909737e77d36ceff5c01595a88abcd04ae346dab5507bee3f66c484499e437b8346748361aff9a384aefde8da9e88dd74d84bda0b580cbb575a91334310a24fec424cddd6e42f7c4f72579ff26fd8d6f52713c415473c51fff6e4e557e99d8a59e26cc5f72fcb06a1c82b68ba23e1642a69be581342e00da11079d439da059f37c3425ea11ed0b328879fedc48fb237 +P = e3482031c15f3225c172d2fedae25a3af8e8e8477e2a686f865af9fa6aa56e11ec538e1156a4caff820cea5348ccedd46f568a033a0af596218c375f392ad86ce114a8cf276b72ac98a8813fb00185c2336c923ad302480e772fc8b6931319c5e85c7c94ac3eb1d403d3293b918bb40d79045582f78462893b64151b049a50d29700b8e60d1300b0d8626972d1db5848feee007971d989b801b74291e7978bd3826ff6dd79d27cdc82b088762bd3e2dd68590bf2d4cbcc5f60a39ad35b2b0c5cbb8a506e42edff529e8880ef19ec548100bcd4e70ef94ef981d558bc468c6ff177e9aa5845362d5999d36649d43ea2c5b3a62a1c6e44940693f4b7105df6a216aac0f0bba22591f58c495aba1d9e743444cf67890f955ab5e7e81f956b342b879a57aefd73c8ebd341e8eeafa952a9c00339a2f3985c07e5ad9736e45f372b6d6e58f3c9494274e5ae211cabfb6cca8792d684700cd0339c350a428e176b673a88057137817b4c95dbada528a6e207dbf911640254ad52e8861a8fe7c6548d6f2b13bccdc910cd40e6863aa881a3948713251dbb991e91202f8d733ab65de3216696fb5e96fd24912cf6ca7fd85037c00c63499bb43c86a05bacee1e9a468a3fdc6fe2771f8c46bbc611f3d8fcc93f19dec2de62a568330b75948a5b1ccbb6ef8dfefbd4972b2403f5deff8ed086caf083395da2bb4a481866e3487720cb0778 COUNT = 69 -K = 3f953195600a675e0d1a377f6f02e34e7c0ed20cc12f17c69b8044d1dc0daa70 -C = ee1be410b80609a46d283bfa79c691dd41259d2b1e6c2fe750b17dac08f80da698f8559a399a1b06941a7adde4332be6385e013c17a4dbdb0c99c9c0341c3f73f02c3f4e0032bc9c35cca1d75b38417a295311ede78b5bdbc9beb01d9cf19b28c497890581cbae5d1d8d27e701ec2bca -P = b80caca6aadcbb7e7dcdac4e8fbfef2b108cf0c00b9b9e170641bb90046446556c21ca262d9cc2f10af2bdc399cb3ff7f87bb597d8080deee798e26759ed6ba8810bfe74cc41268773d98168658773139b66a01928d2825a892a52ab2544c52c6051054ebf +K = 01365357a6cd33be17244d4079d2019362e5e491d42fb32094a1681485c2f9fe +C = 646f2a8c4172b3f0d440563ac0c43f347fc056c858b52e649095570d7219dcb8dece7d6dba5a97efab2344a237182ebefe0259c47a1b3add36372403323803d7633fc5d0e5ad61209ff49cdbdb9345e61b9c6d27f530db45dd1afab0482c03bbd28455fd1f77c5b41e5a155303f5beb3cd085fe0d5d72850a479e1562ab1fdcecf23239c963f24ff76c48cacd86ac83846bb04a10dba49b874852e532e5c1e9d5b4bb147fa4f2f125b42c813b7b968e4947f301a307f8cb8d3171348023e033b6c9879423b820021e35f9f3e0e911fde108308701a247b056a1d059b0f64b284b9866604adbbbd5658f9cdbabeaccc7efc55f605799dcb6a7ccf9f4c7859e33d7d983dffc7ffd8e9330894d8a829b2f4172a71557c5c9d265d73643af22c4554414f93b68c6861168c4d0307caca30aebe79c0cea6ddc326c518c7f5ee1fb33960e73ae877964fa1a0c29a3398e81f25b5222795dc960937c868d69747b2564e40f56c06dcb9c44ec8b280ae3a99545edbc8f72e8f64df8db3bba037b3b7b1cd20f69abf543cc74cc53977d62813df91c6e44d8d480cf25ff7166bb3f14b5097ba4acc66e0efe555c16820cefd867ae3b07e4c203312e93d969df06abbaabf2cc11f194a2467f4f10b71871e1abdb32daa01bea7dc0a42a7bedb2725a7dd8ddf813899a10898a27fe60e17c337955548cdd8404e2c8304345fc29ff3fac7e5060d09254c62dcef03 +FAIL COUNT = 70 -K = 1028b0b1845dfd203ab38e99b6d64ee2caa250227abda6bad7727e652155a0d9 -C = 969446a3a4e147f426d2c5626e4db92d21b4fae9f30bc4a6685dd8d9c3b8b2b7099ad9ec056b90a8366d504f507d1f0545b2fdcb0c6ca1a4ad7c1a29da09a2122fc07bc4527aefce5bb86187aaa8e53e261ce2b09c0e2d5398f83e7dc66238365a7284313c1f0af3e6fd9ec967461474 -FAIL +K = 466e33e811e5ba39a8ee98382087e49f3c4aa9ca0a7ea7c233cb35962f94c545 +C = 106b607d1611719ca6041098a5626c6c08ae55d38e23e206aec93b7bd5c166bd707fbca06987f9a06767dca2c5e2a4f06181632feae42dddb63727d35baf99c98974040ca7c6e41671e1101554f02e7b13dde71353c8597943dd19257e51288e6f1b4c7da5698f276872c338ed250a99951108806e1915ab324168dd852d000e4da4fd64a09c218cc3e1575be06c7b83c300a9ff435ef3304c99978f33b236be9be81b0f13ccaf7ba579ebdf0859bba6935173dd16296b6d89b5dea4a8d14301fff9207429334b6d094874dc5d76918ca321972ad9a05c9eb996dff5856ccda06f7f379889ccd4fd20a4df425a7eb02d46165535a7ac9744b0ae682dfb4946c57c04c3fea34a48b3cb6f49f08b4af4f02ea10f5c0922fb7c37722717ee18668924782bef0cc82c52550f2da50e13af2392ca26cf4f2f2b45102e5c4923bf90e037e6998a8036349263f575ae9c87ae2b77edd95be66df1c6c4768be1ebb086a3ccfdd95f2d89f4859eb13f8bb30ee1ce0aabe0a07678709631bd315faebc01de6e5f88ea08dc1ab600c4d35e35ec53d587b96a4a433bc76e0b1aeaf1955cb80b56e02f929ce1b6fe8e26b8ac99abf69611de531b49188ebd8da182d900963401be63a21611e785c81a682de555847c8a96ad8c4d48d26f96f57fc3c7dba8c7dbc18623f9deea8aa4b24ffdc5c391fe99e8248545705b1cedf5ce10d0482e0f4523d7ef2b1c93b735 +P = 132a85a598f4ca58b2a0a8db812c08203a7cf59b447866a16bad1452344ab11239a8a1215381067c68e6f5a942e4fcda64b4d54156e7640176a33e1c491e5cb1b3518659c23574bcaebb404bd7839cc8496db4c1902fa9beda11aa00040a25ccccaa379d09f2098a7d1876e12a240e0a7fd1392bdcd1f97a006b44dd423d97faa0dc88e5495412836d53b2cc0503b61fcf714487fddd804cc90075afedd325a4d06e41bc36be56791d6a95b5c65b24aaf8edc221d7ab04ffc644823b061fb63af984fc0f605b095d8c39e13f8e50f0e8d73087ea3d4f4ac2add060f53d556f575cc4ec2fd79997ecf0bba7ed9fe4bbe86c0689ac884626512a5283c249565f20a5a27f07e0041bf8555cbf9f81ce712b4512cce3fbafc5aebac59c37de2df17ab811cc6055fe8942248509aff3edee359f3b4bc964b6761b73a02628185e08939a254d19dcd2a47980ccaf4a8c0815d98a094a9da5b5aa7696803935886464d8fdecf6be8455cedc26e4dd026d2ae8748cfd29fe3d3fd9175aa3d1242deb25b422a6e8d284c3633d6f2bfd5d1cfc6688ad15844ff0c62455bf2a555c84c209a1056d6c56b694e52146eac3b2f46c392dbaa0cc84b09a013046d4c0befad5e16e243dde8c65451679486705eff402e7e639b54f7191a06cc6d58e502fe3046e65e95ba1c2da18d2c440a03e5bf02bb4d7369c6879e56c431d80db42e752914caf COUNT = 71 -K = 926a8b86234515a2228859b9a0911787e43f2bc7914cb5993a1dc0cef317ddf1 -C = 48cdd886237aded7fa2ca4ec8535984f636f29f52bb824fa2cd84a910c96ae8da06f5014e501fbe475b013e548395f367157d6dea6279811120a49c745857bdbeff3eb3b2379286dc059e4ba26a80e56580e99a676f19cc25d45d4009eddfd387a271ab83344df4ef4efc46557580fdb -P = f607209930553961fe948bd36752ff77c702a323abac2a9d4c04deea129fc9db3b0c58a2d01d242c20215af5a6abd50c928ed92acce462fe9679dd8997aae20a500e7611c1c753304c9082df3f19e63a3ca62db0ecea67e9e147527c9e857f0c3afd32dbd5 +K = 4bf2c669c73653d4047266c1b0f5d661fd58046c02954aff8f8a9069783ce2fb +C = 4c6ea7ce21caff58327e1c26066367a91dc607fb1b6e6498208c58935f1b8621f14b1ba362d8e84cbc19b4913e3c75a752a5d90ff72817ccc869502547bc1cf4a5d90a5ad552270d94ac14769afb48c8db837dc027f7fed2e5301de278a72c7191f81a66cb7d300afbb49adfe28709d0c3c2958dc5d3c31962c5586f7f3080d15aa02be923e6633689fa9fe0d122184a8642fe8f0670cdc0c83d2d38fa29157b494ff9b31fbcbca73a26b8a3b99bf3b6a5a4716f7059cd1c071a3317926fe7bbef6140368d8cd80438f2f9ca44a318e9fca57e0d21e2e6e7286a310349d896814963840c35a95278e227a72899a6229d1ea0ad4d68f39dba713913a1d59d21080dd841b857c7a983165dc596cef5dc99f30b6488f10915b024877126f29eb6459059408105e069812745d464df2c5ef392daaebd413dc7f711efe9f2008b011803e36bd668384067621d67fa2fe334a97b85bfcceef1bc0adf550f24a714b3f602c06daef71b52ec35b2a25cd005462071c6134bed7ec5e5d13050385af7f3d6e3b5110427dd98aba8d17faaa5ffea619c1943786470aac3ba9e9843a841d6605214e0aa8462c745af21c74ae106c49fa549cbf9cce8749128ec22fc5294a01fd670fa5a3b28e5a1766edba6a6f82a1d454de7646a76f5afe2c250ab50085aa831ea0b70a3de9032bb75ee7bef5a2579549f9c98a14b3ccf3c3da93ea30db1753921e709f1002ca2 +P = fb607811dbe040df29d8ad399897ee77345ae7bbc7e38ff22be96f3215d889d00ca94d002bd507d3a375da7cdb100e84d8b24e7cad53b0234b21eb2b6971f1c1607da6e2a2668018b237ed0e52cbe4d03f4e27e5fb4212de10d1bb49b407214d60ce0d1aadc94c77c1b543eef67bcda85281e39a652623f18434de305517979703e91c33cf4734b5304f2409d1fc0ff05fab9b86486b8a8b137b0b6b46710d856b5eee659a91b826fb00b24e6106a781b2cb76cab7c54e2cb904fb28eb30a88353ff2e69d29f25223520c0222b818155df79ab05b0d31bead0d455e13b1041e6a4847df26372f0adc919414719a3ea05ff5f51aeebd1eea45c94a799bc7a14524859f07462219230542ce7733912c8239fcdce36ad406272db2282c788804ce008467fc0b1d6cac03437de2c42d6e2a11e288800def9de44e7dcf00aa9e19b02d33de4a3aaa00bae26b4820fb54493184be6b22c704c9bd157a67a73d74bf3205e1e05d13ca91c03dc525f1c3123e81ab7dd625c06e1fdee807ff884ceb21fc731124ff682c3b4099f81864f8ad64e92cf3e9b1816a4c7e5dd61254feabcec78364ce513e696f770aba2f309f36c1295d39ff8ac26b2f6df0738d83b4609fb8150919bee4b841ab0da3b1bcd67d3d11e1c3329930d3a80ff45619fd0950cd8773ef6249cfb4046b3bd26c92f6934e61f8af16d7b877e3a7a9d8245389a66f9cb COUNT = 72 -K = 2838e2b146575bcad7db108d26ca233c2fc3f1de089041b4511dda4eb38174b4 -C = eeab748c6341404ef60ed5cc660ccf3218592bce275bc4d96404c8808717bd7f0396df8f481dd9c6909160d9112293d8e47ab8ff2034fe61073059b94e9d6b196283159bf09a2f1dd6e6e70bc78b988d95605a9dfcd118ab4ce77f205c9ad3b8b01c83963d06b04820dc8d6ffde3c611 -P = a18e8ce1c966135dc692496816c7f182638c1b99f9469feef018e6f49c1e0136130beb695b03d2c84d9523267572cbad8d82ca209463e984cef11ec5ed99571edc9534bee73307b0eaea76e01babe0568b8a1b18e6fe6a7e76dbe35359734bf8a3cabc8b78 +K = fda60f7fbcf455bf4f210a7ba707d3a0f629d3de68881c0d4a4111b255907dde +C = 2697326b748a8c8b43bb2371e270e14dd6094130b9c80f50d56aec8737f936cf84ed70d6ccd45b1e9bc747a35e4785f6806292761a05e5f845b0300e32955e4ffba47871ddbcf8f3f95942ce659a73c38a66786492f7f57270414de6ab76c3cf67c74d8b79f942ac7b7a299078326e6ab1957706ae5ede18aeff59396af7c0aa938e899585a927af7bc29665f182445c7323744d06b940ae4421ce90a99587fc978ddec63fd1b81ddf8258e0ac4e2b985a9433f89ec163ccebe56ed5f634a385c359986633505b990c8e54a98d53c17249f3c8f04c1dabb2f17ff05ae9928d4804a0a4d095f4dc8c65d0310e2f3eafcad36a8934ff9d4bf27c7d6fff83c53ae28d8665a3a380c4c7c4cd49ea579efc3b23b24c1e4c0c724e73d9f2c000be537fdbe23be5356143b4319e06d960aae4dca23b64c431e73a5c17009bf92fa4e7b6c03e6d934df320e96072201862812211df30c6b7f9e15f6053b14c2bb40591dbba5c43638dd6cdc664d8d619ddc065d8d63f910daace64636e35792d4385f906e345d3058ba8ddd37c5fc4ec8ce927eee725b807baba4310d9bc7989aa7b1cda49fe79cecdf9ac7628d0ee1d824eff3b8454e7ef92f45ebb9b02eed1dea3f08a947d6775d2380edc94bbfd142bd6a6735fcb69137a7b52c901ecd28539989e0690ef6e06f2a8c5af41e05eec89fb512e27b4068cf5356412aa91b4128218b06681b8ea22478e38ff +P = dccea0e622cecb0d3bf4c713951a8f4509a17934a9bffe9d28b166d2c0bdcca8065348ad46448ce9b90819b33567ac8372091fe9cd7dbef0d64aa6c1e0069e44b6d437b629941cc90732d4c2fa9a43c1e38b5896bd46a61f604216e231e52c08faf2d9941beb503a4a24f9657e91e7552a2ef74866098b277ec9dae09038aec0a43e5161055550c8dc64917076d6c59072e34a8c91192924788c6b13779daec25fb6b60e8c8dde5e35bae426e31cbb91de3c62648231695f20356fcc6e81adbc4488806e9de73b36fbf782dafa592383a9c5adcbb44973bdfbfb6b462479efda1539a2636ab349e7be4671beefa6953f23f3a5a7bf90013701538d4d8536c5d3da1cd09327064131c7d48ff76941b38d3b3131460489ae20515ab65c1a7995ace2d8e8e0d7368a9ea2fe4924e0c8f6ee72fb09e1f7b3c17a646ce85d0a34bf195d2bab67f669b71f2f7d795c02bdb177dd0fd88a942dab7bb28831cf398a07a6b7c67837a2c9b9f37b9535bcff1acdee703974265995231b97cec74170e24092202fc2627a1bc85b1cbb9c086238e9d83be06de6124c6970e3620325093f3b5d326e3355263b429793e9a0c831ad2f76fde5dbf37aee8901d59c2f3d6bede4518aa45a5ba6de3b9cdf0cab415ec97d8353dac94deb0070a9d09861f2737f5e10bbc96a73601ffe0e0cad5a777b9be8d8c5f5a7c51c4e8cea03f8a9687143289b COUNT = 73 -K = 60753a1acec0f0addf3f4f86cc42ec55cf78c17e2a8dd13348012e2266db3c0c -C = 7207800a087b29b1f3911a092d5b87274646bd4188a19a8c62d038fe9c9503c23b85b0860f565c1b8c89490a2420d5db7e7c6f20d4e572ccdf742b0257614164a5fbeb60eee3ceaddd98c8b520397d4e540e0dea2fc0d287a0f6823e0c008b3def7493e0e6663bb8290269c4c4104d0b -P = 157a32090ed021a1b9f3957b953d41611f8c7725e7ed4e8031d89054ec2c64db9cf9601fddfc92e4a9a60c84ad368a8a600ad9c4d2a9f5f3295e2d0f2e7da5da5e028b32d784337b6e227c188bb2f777259a5d8e328437af31250530e9aa0af1363e85096e +K = 7003cebfd0072f32656a7038a71de80371e8186da54ea6ecfda5d18699a5377c +C = 36677f60a6629c7449f9ca77bafeaa7e7df083fc393e0c22820e5438ea1cf9592b2e7cfa275cf2aaa169c4f6793c5e927ae351f09a678bc2043fbfc54edb998ce7a06abd2292d811f7079d9e23c84737a247e313e1d287b715e24cafb6a57635e22221a1f97421043d51e6078e8d742953f94a57bd51b6e826b1961f6ae09984bfbfd7452ff1bff439196d16e45434fc6ca0cdc4478abd4cd763ee68a083a5b95ad33d1e9590e55499247ccf140fee69ceb8b7279189e3729b2b4de0aa7b58a998bd9b9040b6481554988d6c3e1704ea2d80511818931ceddb3f3aba8eff114b9f603cad9d3c49ddeab2d5d1f2d8b265aa33f094267c5d6b82d6eb44ca14837d9fbb9f175f31fa02296f0b849ecd4e6fc16140b5ebf4ffeb23deadf65a9dcb38c6b360920c6cc057859fe9d8f22a6c9a9b69cdf01a922c737228be5851812b526800a99eacbe14acb16fb6d21689aa36b7acb6532e3b1e3436e24c576f544ee79823889f2f3901442e5e87ad71b6ce49c141a7c5c09a975fde5eff777217926245f3cc10a6b2399685c1774b71f5d99a0218717d5d2dad44bbe130e4022d5bc608e58e0288eca366bcfec2edcd5a02675d96ff47d5a770ea02416beb73caa807d99142cfbf34027fb5ae07f3b542cfac59d4fcacaa56407d904f4b1662fba6fd2859ddcae510cb1c0240365deb839cccd7410dc59d0d4962942ad0bce769168c4ca95c1c3048a9a8 +FAIL COUNT = 74 -K = 976b4f98c8fc02a63d89c811054aa203d3a3e406b2c6d3542a811e71cd7b9824 -C = 38f19705ddc2dc1574054e5c88ab883daff9c1304952a05eaab2c941b3e32a213920472d9d91ca2e6fef1b8fe9a059fb5d4e90d5e756f5f47811cde8a25868e7dbd47f5873334e65df8dacacb15948ccfb1ad8d2f502380c39dbe0a1d2d410b9f2109db28c103d1fa4f1873aa4290874 -P = 5bf4335a9e584bc0a3b7ea529fbda03165f7adffcdd0e8dea4bdb26bda67f46a5fdaf5f871106e728bcbe9612620f8543ea6245783661929b06afa7d90d5cf906cf51188834ff3c46d6a0ba66cf6db8298d83d517ee1f8c9ab57f2f2887d1c36e44753e8d6 +K = d4635bdaa721996ded7ab41293dfed0548227d7f96cacb54176f3083b5f93156 +C = f96026ff894f0f2e9394b166396514f9ee270122b7105bb52305689a1c0d87799cb67889c48b88ef9c4482c36c92aa297afbd52d804f2d4ab5066368a15ee27594ee25ed5edff8efae0241de9476c711dfe5b28781c22af7db21448db3ef35c0f8a3c5136057e74ab4e4dec454dd22d91b1b7d6167004fc506595fa1b04926da25fbe2c77493b2bd6a1aab04712a75120f35f77d40d45f1bf90052ae5e9765fdbc4cb9d06adb6b72a15e85c08df70557c92a41c0f2030b36e6b7180746a2d5becb9e3aa129264936dbde104f61ae130ed0ed18dd67c5e20951044c4bcea58e05ab7cdec2c7ef94fcf64a40f78bbe0bb00b5ecca3a6262fb63f055df0527baca035a23776269e5cfb5b9504d0db26884a5444b92d75682a25193746f69dcb2a0a8dc477e72c2f5ef1818271b9067b7360f27778ad988037a430e41c2cacf8397551da94464c0e55517d5bf1d9114e8a3ba828fb6c83ed5a053a418b4c05bc393bb0be839c203f1056af8c79b03f8dea34bf233842d0488afa8c95310570b3b9823ec4026c97dff1fe844fdd3e493f0c35e2eb24cdbaf8edb7b79cc0110e4a9b35b5f9c23076bb9ba7ad4662b1508f285e54bdf500601152934661b78c80113d353da6ecad19976982e5d7b5c3ea45ca0cc2baa8b1931e6ccf9a15579bd2aae60aa17e89df6f1fb083c2dae56be15a745d15fba06ed2f2a75489d681fa056adbaadfee36c3101f6348 +P = 5b48b09e0330812b74ebfc86c5a2ef739384a1e068b0c460ce8f8555a4a25b9b9c5acb5ec841cf298da0344605e91174a54f0e5d897b3db8bc09dff36c6b4a320752700cce2831c5fa7ba8207864efa35c8ed1a2a3822974bab077f494d5e14e8ecef45e43e986142872a6b4b0a271bec101d28119457695e2680d94c6f099a308ffbd1d2ed55744cbf85fcaf4149483e509df3dba8a4aa2b8ccc5a4fcee17b54b9db8fb30a0378b50b90e591e97e3b0b60f96965d633ba87d5fac5048f3a5aac67a4533ee8f4984341403367b8c9cbff701a46aca57252a7000aa7a66567d9bd844a3463e137ef2a2f52505eb5e25fd96bb88d9cb9a4371ee9f85a066c0cfe27af6a2471ecbac61786634001da6e3e439662d69110d988d35075b890c8c63fcb46327a5496c299f3583dec95890e29b3062f982cf91eabccd67d4babce1cd21fe7e691c34961764aef126c2cd5bd46e5b34665f62a8002811f1486c6bd570ef6869a644c439805b7e1d8877999effe741c5465cde391ed70513ddc8ef7b20a55cd3c6270aa8c8ff50b2f2db33e375f15fcf11743241b10b114b989308291fcbc8d20cfa148c49e23fdb0d7b423baa7629954658eb67720de8fd68d4b1a9071da7632944fd7a827effd7137f0732cb167b70ad2cc5e88efa8d55cf744d364a2df749612b1e61730bd917c8d4cfe5310b6d3bef2dbd04ce755b57fae0b0c54fb0 COUNT = 75 -K = 3f58481b86b29852c2315a9d71a67ab1c58a8e9c1847ce2bdc257a3d7393d63a -C = c672925ac85757396813891281f0b7672bc7fd92d6aa1684e2437f916ea1a4bcace3115ba967ecda4ec6b5a7decb942ba15caec35c9d1d19f2559a03182efb63f79f3b9150e8afd78e09f01cef0ae3773e77dde701812f370ce096994dccf2c78b55caad3e741703db8e717f4c8056dd -P = ae3dcfc021e58b27da519c63bcfebf4002a8771659391ca84c5e7c67edf3cfef3d947f72af941af55176c447fc9bd6d2946cd0c5833e0b1b3d39082c5470ab1327efb1fe5a0251f21b5c64cca7c3210d04277f322e7b059bb641bb82bcae78034213cb2b27 +K = e1e05e2e04585352d8300abbfab24fdc97a21763a197bd9aed137badf06322f4 +C = 0098dc7993c56f56ed1f37383d3d64dbc04907eafb897976fb17d94d90b0232878d89bf7e2086bd4c4b32d3a17ce3701ecbf07de8b9da0f214d185974db6d0fc0ccb2071a3452e287b7a3dd55d297b8fecc77fa795798a59b733bf1f02f6f38a725b61e29d8c0a0cee466de74413c3c151bbcb3619a7b07cfc4bf47256bc4dab2cd70cef75c765cbd4bd831d5f5a9690b052bf90248a71366dc0a745a21fee62a0a293ac5b61beef8a5d9e7575dd403b766ca07556900ae9944be5619ffcaaa6cf3cbe07bee0568463495c99a7d6a66b528972936f764d54da9df0330e109400c64823b3fe596c36cc717c8f54f6522563c2431eba28fe9b82de72036cbf72e24556e7899712f84bb715d496d292ee2c2e23ff41fe9b49109a0b5e6225e13a497332235a9bd0e725d2cb7e15f5012213cb86f6386c379e510410a2a71dfbd938636205578bddbbdeb9ab91fc39440d6e82fbe071ba3c30166f2befdc00a79cf4def31376b1fa58476f15a6759ddba7b331fa0d423d11c501b72f74d3bb020dfa09e4377c4c6b2400809dcbcb5ef5b662e3d05a7e7e9f9fe48a7623199888463efcee20f1182df6cbe999224c9984db9d4f97d38df443c9bd70cae2517521145bed7962c3c0047bec1bd87821406ad12e159f659ba81d432e95ac4423590571ddff3accd4355eb14526af0cb30e5fb1881cbdc8bba6d15ab5db657acdb1ca5053d2058bf65d646742 +P = bed0ef5c448b98c527020b2cffca852f8cd6b0a39a4139ba0813a1e57ea16fe6b7616f4db73f167f8216f82e53d0126968832955e861599e2ebf85c77902cf54a401f559105aeeb5865b641f98cc521032e3ceed5b634fdeb31ef9dde92bc9c7ef6cf57c398f71cdf300ef61683362ea082540976986e302587685eb9c61de44e1b2c8a3d721bf4143c4f383cef12d4e89d857539b5d0af0f39a2489094aa7046b5b29cf676760bfbb2b30849c0d7822845ca63cd2e22dd6a371989fe66b864a655bb5ab02a9562827eaefea73d71ea9e141cd6ec64e6c71d54f2d69df8f7ab73796ba5744e2d16427e7db0a6abd2a0010d5f7e2afa0817a06b482e49c78728fa8ba7cdbc3587c0e7fc02f891291c9c66dc1f0a1deb8afd66d45c2a297bc72b94e41f58a9f5a9da61d9bf5feb7a503a206dd3c82ca2f8e122f5b8e73fba831b9beb24c5ae3670c8f76e9b7d30002478404349a90fb1bf96cb4db1fa981730c34c144d45136477a770b8b8d34f3d2322073553ab68b30c2511a014b4217101a2d2a29607ab8f709ffd7447d705728290d47e9524287111f0625067f458442f78a001ced6a275d4dd390fc3aa4c36df422acdf6338c6ceb8c90c9bf121582f0fdfafa203ba8ea22d940f5cb927013806c4cf1e6c7af58cab4bfb11c76b348b9d2627fe22a07d01faa97000479ca13bc93635c709872968cea6e5882fc8a70b2e99 COUNT = 76 -K = ddb935b49d77cbace67e691b5c26353594deb071ab5bb29ddbe530ed2dacd805 -C = 1b75cd87b184e661b8530377b86b889d6c648f54e8db79f2303ef4b49942943466a7a8c0ae9dd4699450cb2348db11b6a3b507c7e270cf8e0bd5ddfe1a0d5c526fbf035384ffec95fa6cec2e0226e260ffe548f92dd86e98c58779f2b52259b80583b2d10a5aec223d58bff0e553b45d -P = d6f144a9d3edb327f5f17948eeac629eded99740b579661d6d40bd26b03b572245d3a2954d14c060e3f4d3963cb1ab522b11baa65d69f4ff9559e05493096d1fea99a4e6b5d71ea51af476e8ddd03a2503ab96c061521b90b040c61714597132684cd992f0 +K = 3eb9ea88b82dbadce37d6fd5c87d7efc6e51949c4c76d109e2b4bd81bc863d88 +C = 34ad113db5ee37ed71070908b3b1983cf620e8348414260f0f30cce454e1336102b0c55a773fdc6aad75bec65b0fc7872ad1315b0ec2a569a462b6427dc8901ea17a9ed66770813f18563a7e8977136ee5611e8d6d29108b423ba77e6d89d158cee817521894c667ffaa47d3cc5b89a8426c04175dae8ec218f30d361eff07969559a4777d311b2d6433a9a65321e924400f274f7e7d65f061fabc03a8239165409115839b02f0702403609c1be6544a9abb930d7fc5c951b15bf9fd9cbe7dffbe8eb3aae39b944d4f49c063d3e48888919d931a9ed9b818bfc65ef1624018a091fca829c4da0f405fe72a215448860de35326e296bcadf2d4f2420c8b3a41a6f24949ff6d540ee3ad738c884fbf382436d161d4e7a73ea79348d63cf35ed89e8c4c93d220af5abcc5896e01b711133a475f6217429b255f74f32b49d9675299688e4b9948c1dacbfe2eeb2ceda4b6fde7a114144a7d614e1803f2d5a216cc96ed80a11e693693bd8af0cfd1725827823e023ac58fe7bacc5cdf8db5ce0440a2e790a198e8b3fc25e13ddcc668445e40a36d9e61fb8aab12f0ffe256edea638131e6af710e2f9fc8e5755ee25a1e09d7266684ea6b456f201d8322dc10e5f6fc1685088eb5f73f22d77dcdeda9566f07a291a37019c78c0ffb89ec978cf5ecde02c647880e956bade7cec075170d9b609e20dfbe79186ec380de4108cd24048d29c3fdb7c9e56205 +FAIL COUNT = 77 -K = fbb21dedc107319b6584d20a30eac760b534bb879879e596e1795797d997781c -C = baddab625410d4bf798f33446c3dfd82266b767af989d44ff585c459829a7254f300bb39f15533c4e8265c3e90b34fa50b8b1589639a9f213cfdcdcefc5f036d8ada3519f52b6384d208efa3dc4be8b6e37be6083df301e28babbb18b1d0a8591b055655f76434f0411280797e4ea623 -P = ed8f915847dfc4279d3b6ce72001ed661f866f29515fa5ada4d04c86cab5a6ec14356b8e9ddd8e66a338322da9a0783a0967f7b9851cd526cb061444a78ed807e57aa25c9e9d1181143c82a5786ef84e9a9e62946d9c967ee30ec2c94714ad028f05f5bdac +K = c2c864dc779be4e2acf30a01c5467647eb8322e630a358c4f1c824f3099bc715 +C = bf9d3c482e9356907a34241e27d66cf7a4315a8223594927220613f5760555671c54c8bc9dc367b5b00dc944dc9bccfbe326edd0f78ae4b429c43cf8cd1496fe1015401e0315809f44e281be6cd425be4b6e5b0fe304bf2948562a4b6a6a1e4b5eef11fab582d6bbd91cb116fe50bd157dac8322868fd46972e752e5afe0c6239463cd1f7f065738565fac7e61702a88cdb263f85705a42ac9612e131e5b7eab6b08a4c18b5a4d8a7b3bc6682226f0f110ebd1ecc24ed09a6948fee216f0166c87617ae40f46992acc06ef036e377e362f6e76b67532cfdd2ced253804e1d9148e55f4616dec1a66f1e54362e44a4b84239798ce52c37ef2d7478b4e05ed79b33e583e1c9f6cf91ab949a9e225b28d89d37467c14b329b3af2ae5094dd0614a0aa212686e81622f0aa5dfcaf2ad8dda8413d9ad4672285653086aff9d82f71f9b2d2a28a122a338a18e78e10ec66564cd15b94ae0675c75b1f017021337514690abc77b4eda2013292585acce0bd58fb2f6829b513fb261d78ba74d96f8005e206e4e6d43d35ed68417ba6bd7f837dc602f0e152aecf9b595c30c8777c6693089bf3fb20f1bf0284c437953c07bb4955c327c22d03c2b70ef4b991743a272cc9f954f8e2fd0c1977ef15640d89574e7efe6940017fa3daee82359bb2477b738d90c0e4bb1dbc04d0973910b0ff0f94957fd65346c25809e8df33283e131f7ee9e7c757b86d383f6a +P = 46353c5153fbeb9d43b2638e80c81a2bee5db64bbe4a652f277336ed6c5c9946cf0a9e3dfbb4ebbf4854d4024a0d111c9ee29a42da5d4ebd3811a73e4c6673f80c2ea7b5cf1eae4f350eb8449cc32f9ab96d3e17cea5614f1c8039a9f5195ff049d6996f9d7258a333de504e609e94313afbeeaad4a2b53cb4a01f01677236e2c0bac8290e7e823c8bae1f7a8f7a8a4266030063c50b91a86c34ef87ff13994753e9f7694489225738476c37bc4f19e2d591f86a94cf66d66356901a4b22e6a272a76c841e30c647b41d9f962195d4b0245f11fb9aa8e1a35f6622574a0f650917397b78135cae9d2355fafcbba5967389d6eb6694335d11ccf5d8d0f079b8732628f4e44866f2f7ef4eb6295d572fcdb2caedfd8b3574cb28cf056e42f9b84bf1612e66d386b964f71b0da9d21fbca7082a2a132ef7e4ab26d4e19596bdf475f46e27d34af69b1ec986b1e0956ea55bfa827ade466721ce272d5b722ae34103ea48808efc6f71f3be354f74bfa44a0acd71e39c5916f8962983ac76373a26ed0fecfab508e48c893a74a6378b2e86bf033ad0b2b2302b3c72ffe4a06ae33b677844e77421f80fa0052d067832174906fdba38c483d089b2608856117ed9c92071311352504507dab6ecb157c74cd1da1b78b45f6ecb44f767cb3137320aeb389a088331e3b5efe73e0840c38317beddde0855c5e7065323140a9c0934bfbcff COUNT = 78 -K = 5954f848f848689b836f0c0257d6389bacd1b02202e72ec1714621e283122455 -C = 99cb6fccf4cfdf9e5d83b0043ff73c9dd3a9f009ac113314afdf694b7d559b3236b24ec3f3b864666e5500539d8665252caef4f7ea8944a2b9bc7fd1a2a540c4c8f7f6d45b92dc3e735281ba688d420e1b7d67331083aa4055b8bda8793964665adfa685a823f65d59634efd3c3f3560 -P = 5ece97949b20fbe8fd1973dab7dac834b70f542a1acdd55db3898481160c78c2848447f0712499a1aafaf931597a2285906afce963ae8b676454125364f5393adc5fadf0b8341c212a77c362b451e86009d80f1be7aa8a83054b3a4653d464baa1201d926f +K = 8355de3fcf6c01a8b3f70469ea4540b008adf4355c54de30b432ae60ac7b74ac +C = babf1a8bc1d3a1537718307abd2963ca61f1bb09739fb90c843006677d6721fcd7f6fd4464e1f8e24c42bc562980f15349586e73013806068eb319a459de6905f1e5b69fd3bfb57acf9e9defe06e4cd50a234d1aa00dadcc09900ce2689b095c22f7a82460558d0e469c929234b0b848db5e2358aa5948bc9abaf1e42d21ca4bd1b50c7a5c702c48a38af630cc7fa61e9f3cc3f81b7589acf04a3b3b7b1168269fa334bd54a7327e4302d7812f3bb83af78f6d0f1e85e5b9e890b78476eaea475c076313aaee70673a72563fd8de2a639f5c3660b8785de1cf637e78481372fbd4931be940896447dadcc61c84c268360149419e7ff2a7f32b2ab23ac1cdff747570b672c619710ed731ddfa63b07fd08329eb3314f999ced7de87e2b049edf3dfc7c3a09c8673aeed6069f2bd02244783a491fae21e89336b0ec36fc55d24ecbc892c234f9a20be3c486b14df91368a2475d7c329e0b6e4658b531c44aa32458df6bf53453f2d6d41cdaa74177bc1761aab67a6b4b5b797593df5de19ad830a4d5fb32cb7f64c645b9974ae6dc74d225ccfca5c7ef5e47901b8a1df6de638dd8d8f8ffbbc0591e7a0896880ad20c7c9d04401794014a196b37cdeae516c609561f81cbe94702296a0388163bbae621855b6bf4514310f4f72b15c9995e3ac288cc9f06d822897d11cbe4e18ef4eed65c838db44c84a2a489e0e349a903bc6770db9180c92fe9983 +P = ece59bf1b7b440db977c804df27168b40e5f020e63ad99368aae863a727993d591c73276fee248f55cf8c46531797dca24740b706369bb47fb98389950c5e6e111225ac1519b10999b2e4e2b11041452f14517dfe62096eb95d495bba6426bd152d9e0f3fc7d434a7891d0a2714d6bac84c8abb54a5319fbaa4a0ac700a9241f522e435d8e753c0811adf23e5df9b5e30fa9c5db87bc0befdfa78a1c1b312aa26a2055b3c85573d34cbee32a9a65464928474cd92f6f7ee4abc2ed0c91e0b30c61257f9846bac0f577953efe1c3e09096f5d9fdcd932dee1015d92cf49b6d391e8de9520a5d4a7ea6ca4f36596977720396946e3008777eda57ed5c3a03bdeb410d653496705e23855f5b4aed0ef4026734dec16659e70c31f3c668cc3682e539ba2184264cd6692a13a2204c516b42351b77026b6655326745797b9b04fca09563aa3ce1cb9058a808dafb8ad1c5436c00757eb44686024d5290c4462e364433f86d3aafd1339f2ccf1d8802c86ac1442e46720ed7353752dffcb18bdc11bf51b0b6289972a5a682e05cd88eedba83b9410cd569380964370f05e777da9b64ce85f25803723636b3c99df63cb684b3e197a907724fe7d6b613b4007fe24d219c0f0520e7e5aef76edc1ba3f1a59e14fed8f7fb6f02249914cdc1f08c24b27bce63341091747f133042a2edce58923d6e4a8c83eb5c3433cc231e805aeca5297 COUNT = 79 -K = 593b1d777441724b198f92e1dd7d8c4ca496fc832de57c055adac1239d0fe88f -C = e16415fdaa620832e57e0d9c98ef71bc5fe5a0be4cd442b2b0f414159c5f8255d53e6d6cfca63189e59f1ae461977f77dac269ea0b6da2dff97a18d6103a761d48f637e2710fdf64a0d6b39007e4a239efe2bcd9bb7e38d1f72835d6db5f06e5942a0ff17c0f691c3c492e392e97c787 -FAIL +K = 383362ec62d540d1a1ac3c9a69f82daa8c4ac7e133c5d0ce40e173e94d856c59 +C = e78020d4b954aa00b4685c1b9d9bf64a6c3fae3bc8b9a3415ee1f6606ac9fadf2c7a834ae0cad5a3a0c1f825d6f461c0041cddf18f2bc19903a0ab940baa10ed9e3e2e6ae1020014fb3c69baf2a1168a61d6a3c6ba5507e88aa87545b4d509072c6c54572ed44cece0097db129ed0dc85d91146f090da1bf5223f750274eff3c03a013dd50f2d9eedd77ac9997e259350f9e9ac74e39f7e5347f4668a9a3209dacb3b8097e6190efd0434a2722389c5039730a848ebbdb77100a5ef260173366552010ca293917a9095307c02ba1fabe5926cfe667047feedf6feff9ec15e2553ac07e3853272cf1fffccbde192adc32ed9a7517f95a393e0c4ff0d59dc1dc49f55d6c14f1e794eed1b5c03b3c3206cfcd3fa9a0a1c7e0fe2b422d38fff58027254880e47ec03ee890929e59e3d2305bb09f63186d2dfe205168ff17533cb5f42b9fd651a37836d01f1727eff8951777ce28818544c8abf17425f35f80a67c644a189524428c71dc652985e5f260039aef2870ddf6818c3b9c31fcff0e8cdb678ccfb164808f6b442d9066b2bb1b16ebeac27ad3060054a390f274310ab614b6fdbe7b816703441293f25611cadc6048d9f384ccddd63aa01011f01e53ca791a3b28971ef3a91af2e2e186baeabd18371d9ad3c484c70b9ccbac946ab8d64550c9b4eddffadd11d2b1c706cdc71acc5abdb8fcae9e21990d91ad4ff9f356fe7d52ca661e69a5ff54 +P = 02ab192d76e0159342b08058895e40fc09c77440478adcc194a68afdbc4649e7ebf019c232e4f18758a0fc894da6acfdf813eadc549bcc4d63c529429282be65a467c9399412519e676dc15d9cc8d7e9007b25342395786b257952627ea2aa6d4f4d03303553a0a45d2c85313c19bffb9f5814f9b26737cf97a4018890fef3c7fe533b0e15b679f2680fcf42ce9b1fad7e26bdcba185adb92119c173b9ddc246faad807dc7be31d2da62ffbf8eada78dbdc618ef3ad400b4f8e1226809d33df7e667de4bb87799a76fba61192b00ce9cc587c5d4cd21ce0090d62be768b33666c5b725a8a3e537a7397fc2f0357863c2a5117953fc97677840144ab0295b162bf2477721c811439655d6030e223ee516012971a7a41b3a2ca73e8a932d0937bd879edb50b0354a1376a4bfbf456a4d3e4f0fdb0529a17e146d31557711dbfc0cda51326c2fc3e1e5da54cb35837eb156bddb5a7011da5f1bca9fae280e20d6746809d007150396b799c871b169ea4ed2cd3a49c073519f657b10d1dd015ce7cfe1f03245495db3a163a2ba50d2f7c0996743cb7be4f52dd4c8d9bcd535c588be34cce563bbc349f6158c6d7155c3015dcae147b16218d988ef512680cab0ca1d500a469d646a96411c55ff027b550bf3ee72028d0b3e94b38c728cd1b0ef1e92e14f366564d134ced23802137df05855b988d07bccdd527a65841f935d6f4c5f COUNT = 80 -K = f0d9cfca1b300df049b527df7ef99bcbccfd5bb8aaecf3824a27354371e63948 -C = 89e3f9fbe0f27889293dfab46735609eeebb247b04327084f09fb3f4fc0edc49dde20ce5b4e5b731e4a9b14a63c136be15077b6cdf3a38369d0245ac6067afb2f93b14dc9f50c5f772c6cfa2920adcb919a506557fa71b1d9c4edbc5efe9f8e77d65346ab7284da38fdfe27644b00913 -P = 56b7b6dce428424505cb57a821184f2c8bcb86a9e08990408b29d60b5249b115d2a31132ed24b5935e73df64b9385ea942f27d4d8d910a2b4736b7ad446d43598cc5da8cbb1fbb746bf1a09d5043a2c6336f20a5bdf0006f48c02e257d0ea385b7a3166cb5 +K = 0883d75f663b241d308b434d963741f60cb220275767120f635aae27405e39f8 +C = 21ab1201d8085539df8467e2732c3d0b3223ea4ea7dd188cc819e656b2a981b3991c91d3aa603a1969f949d2fa623cccdfa382e2cd752e05a71a8f7d87afd8fdf68e44ef5102d386d72473df5cb21f8f769333e218b375ff731c91f4b7fd1918e6899addb3d1feed8b4824a60a43083b0c318563be1d282d5374a07ef3cfc18a827964bfe6cd572c9cbeb2e44345d6d028c1c4d216c28a832a6f9ddf16224d2c1acff3d588ede30d56eecaf5fd4f7fc5b10263d2da58b2a03f6d70638f376d8f226f6e52bf9ccdb6c6ceee746f15c745054252e1d1b249093ee7d3357e05abefb3cf53d75635a349214ca6107456209acec3e3e11a0bf061e1cd205bcc449b2a40394668fcdda778347d8bac71ab739a9f9f81b3dc32222a816c1e00b56a416165ed0838f71e0334d338b11f14a9f5cfe01f56f7b4509672414dfc97da43650084e2127dbe53f7067ec85f0254ee7850e3f60f5530dc847d0f23c0a63bd1c513c318c41c44f01537280c86f25763c9548cce65cab431187f75035210356ad80a8c4c1278ec6f3aaff24e33d1929dc1452309f79dd3a96eefb99d4a2fa618062f4152bac77a4fe5bfc5399e176e414ad318f28029cfb6c5f275513b7c996dd63797a4a3f05d38c4270d1dc701e2b07786c9dff6ab09f26a97f8907ae712402f337b86b083a1e02246cf0eba7c0f99ffe42c2384d5425c09adf5402c5d6ec65b75915484db63e75968 +P = 29681da0d8abd1b47cbdb532fb9bf6f9a8b0d86ad63731444db73df2b3f3f27e8ca47d63378bbbdfb2feb8a750b9f4e490e4f10070beadd19823afba9ce81eb93639039709ee9f67949d838d5e5f92d9ecf860437f47c461c5b10c1aa682d8922a7a732e4db583743c774fe25416b957e18099f21f574de07815c7368448a8d67db05a6eb5c6e976040ab39b5f01b3fc09c73c75e7df1553b328c84b695335193d47d0547164ef02d54d8a939259576582f9c3d8e606d7097c904e4ed363b59a1311446669e521927a83d19e6e8f4053e4961f03ff740d59c4f048ba16aabe30651d74e9266b810f9db1aada974eec435c0e4578edd3d228eef7d5340e97e6a8166314ce00271cd197a05b75a4675c5e3bc34c9233945622634148d21e535e86f8da7991d2f37ff101ae96770b5fe2b820a663f22088fe195eb578882cf7aba758418d1ed281c4305db9c46d3076556310e50c7e84fce1b532240884c43907680416bda3a5273ca5366b149b952b2c5688256aa26d125dfe51d86e13a97c0498c72a5c98184401e877d5c50ab4800d3996a356922cf5da950b07fb8734aa4d1df3a65de0f1f8b0f05e9b392dbab4101179cd7651b3300e15d9dc0a78d726326eab926456726ab94b4ccb5445129c085da5df2ba726f7caa6d037d4b083bf3af62f830c45caa5b481e8fd34fe47d03bf6404d135d08a44a73a4a36bc894faf5d5 COUNT = 81 -K = 5eee1b0b2a943273457852cca37ff5f9b24185ab93b76bee923785837fde1080 -C = cec15c333362f4c77498b0dfdd6f5ef015fd6020ce0d976b58a2df2c99a79ca9890e540ffc72e4638c74c91ada07d04b577be0c283e4a4dd11a74678ae7c7c849cf4f5430d731b56fe674c162e2392cefdb524cee65951bdd6ca0a3c65b47874d4afb801289820fe29bbf19c473d9332 -P = 3f595206c8274cc574440ce2db59591b10a27488cc3961dcabd7cff9ece368316988aa78d3ce5a606c4cdd33d1735f248ce14f9c287265fd8791988b18537733ca1acd7c07374a444046cf1b45b682a051d7ff3a161258b345d33380466620969d8ce54fd0 +K = f97632c8f9fd8823e418cdc0bd507915ff5559adcaaa319ac6a768c7d2ea9399 +C = 6d89e4d9109643cb0c0bcfb62673f6ca4b408bc7f619f3d67a93a67543f14fda691e27138924ad74d304b79b9398c32baa133a753fe6d3d3ffae40e96618205248b4c5598b784981d7f0f29fcc3307d81f8e28f9c00ed72e54d57ba985187efc3ea31dffd65b0564f31ce33e71293c60c6b4651c35812a9c407ee2e3ab4b455c128b4e0646a684c78efd8844dcc764a3794de083d29e7c58e86f40ef0d6cab92c0fbcb400d84ecffaba0e056913f289374067ac82b684d77b274b6639b314103abdf71e118b7bee129467341c77ab6d7b3cb55e624d63e93f85f3ecbe8013c753a6cd5299e5ff314338c9708a7d2266de83aa786a5148405b3f2a6d7f9cea6e1e204895b196fe403bbb8416657f97d12c44712dcb9eafcb1ae6e6900d433b1133d459b972c952e53b210c1604c41788adee01e645342fe9dfc7671436eed6752cbc11ea3f462e73d2df34366a9564ec200db7c38e9910397c255a20de46ae62eb66fd3a0c98586edb0b0a656cd9b483c3400c0590bfb240cc2c52d079f4bfe35b12cfed57726b88d6e38aa5a7a618ebae2bb5c622e54f554f531ad6ed1ec8878d842b84680ccec679339c287c514fae2dc5998f5cc833e9a45f8cbeaabd3f135056f6105bf166ae1a8051007d4d1630624cc09b5a87fa5cff3a56b058e42549132dde5125f685a5c0eb99f6e98b133b1653d3c6106bea1347bf462c29521bff2c5b1a80a3475e993 +P = 63225cd29d2d673430c8204db10e9a8d00f4d3afacf58f7d7b8f56850b8e3f2e11ed7d82ae57cc6c8899f60a1c0bc4db9c52e645389182467f6613455add2a75d362b61e074fcd4ff5a3f2406d40db7366275fa42c6500694c1e334d4c4dfc3338976795a29587c8a86dfbdd49c472f1d0344a6136e8fdca21e8a37d3eb76617177106938be34309bb71a6408c80f58728ea74e77fde5559f8d730400d329800d7659e3c4c4382c176c859142071f6adf29464f7918f7c68671c26755aea6b3aebec59450400744efe76b1ae84ece086a901d4ca18561b233751ae8fe5cca9800231f2b67a5709321e9d4e650f7c04ad2e4503792f6b57cad3f3a1c95dc5c7dce090c9a132001528807a5955089630442125052c4d9b82e341cf318c06e88e78e35f264d7e9b794f07fbfecb474a2af55cc53b854facc0166e75d52792453f8bf73bd0b5ef8a550cd84ce03477eb733f8ba8668a5cc87bbebae8907cd446fd6e1cd69254d4e3254f6ab0c07496c1d5d60da48cf396e45cdb89519bb08e467c2d6fb3f2606991765f52249cf601f4c08f01c8b7f60b3b8bb4d5a13296790bd9faff3a7411a323c79214490746ba3277d3843515dafe9644ac0c90a8c6b2395b7e97eb8c33e938a3709c2cc981bf40bbc448d59c88fb85527a2a00a32bf41223f6c9d800097b43d9991d0b3a9e6ccf325529f38d313e4da838ca69fe5e25069d5c COUNT = 82 -K = 1bc2fb32cbd9e5368fbad138c178304f1a9637cd943fb1f5c229d3b811f9058d -C = 11deadc2d24103b68ce228ed4a366e2af8d99da9d2175057afc45d0c3546076881a735c284fc5413b7c8870ab352dedf6b74ab3138225d5d207f07333c4fd8492ae015bfd468323dc10bf735a35cef812a15da1dc05dbadcc890411e84d24c9ae67e2263339cd970c3cace2eb2a9a78d -P = 4221cf4b68f5b6a4203faff8580d42c66867f9e9d7a3713fe09c95a291233b1737e467c253e1ed66828956638f55147fe08eb27ff515935f1073b44b6c0159ee63fbd0d1a3d0fcfb4904aa31ec49980d87da63e35884e93bc6dc66405bddea4dc1b078d60f +K = ac3a07e744ccc2a9f92ff0747544609066fe0951440d489ad12a19ab60c97c07 +C = 927f8bb70b1cac3cc7e03825fe3d5a532ad25bfbc2a756a3226b589d9f4ed8813d7bfc9e4871071c44ad5428db62bc775249c626a75f7b4e49a928218b148641b843dba3b08ecfbe50327ed29c2e0e5dfb122d85c39040bd3ba3f9e886f9b566cfc82004e1c970ee05e58a70f22ddc3d2e18bd01d1aced2bb0d047bb3f83b1fe73ed08bb03aef6083c585df1c4505d80985b4354c161d2eea31ee2dfcc3ee64359939e5e485560a2e0d9171eb143dabb5c1e411b76da95885b8e1fbae76d2267cfeb9aa0edb3b95a33e9b58c9ee755fd995c57c0030bf921cd3d8eda0680eac7ebb8ee5462a1ad9ab2143a479a38657ff2a183736fe66d3c1fde63ca65a2fdcde645f3c4c7863c788d85e3780652a8b36dc0e7ba8ba0f0905396f8bb4d48da5e762d9516c53dca66258688fefa461706f3222db1b609068be2a2392db99927ffc3357aa266bc887919cae660847a1da0deecc6a0ca2258cdf3e3643f1a9da655104cf4b45841683529cddae6d179185ad650c7e5fab5e96fe2ffd2980bc03d948cc799e1fcbd620fee5c55ee0a4d10a6fcec8f59495fa9d742394e5ac14a1f61c8f63343b87c419d44e437f80c16cbf3cf89cd7609f61f274013ff9f0a6934d7f3ddf0cfb370fa1e5f9ec190090307526e47399055334604cd5b6c32afaea046bbf9bbe6e57b5c54a73cd4a28dd6de141e67a4f8bda684a7dbadebc6c8742955fb6b6010718b44c8 +P = b65bb8e1fa235d11c087cf546ea3930f975c7ac74aa0b9cad0b0b933466a5e4296165ba741388721ddd924f385c1ffe512864a02e85cd61201e21c9634eba3bbe20e2defb148b94a00d547793d4e58b278bd770feffc81fed72691e0bb017458901c774f97f1e71c863b7a2280637d615d701bc071327701b913a3dba66ca392a8ae936606a96a52ccd4a773d835b2bf3c719a93571402c1dd1f889eab3e1297c923886dd008562bcf31498c064443c935993fd4028ec262cc21d2ba596b520c269f7033a4f5c683019355b12f2829f3ee9e132c35ee55bbb48b30686bc8fa8d010a722fe7b4605060ab18db0ae73d60556913118adca4b7da9b2c655cb1df607f3ff911385a004bc3a6b8d6d1e044b3e65d301e611f3d318519cd4d6ddaeaca24c7a411d3ea25fc19a679a82654fbda8700a7316d1fcb5c99ab75172230fbbdee9653d725a39f2baf623d7d90cebec813a05d5cd4322c0e9c9d6acc3ffb4f970efb03851a1924e3e84f8ffa72c5401f8b28b5ba2e0779c23ce2a4a71ccec44ff2633d072e5c22c2c7f1caeb2f08daa0628d6bbef5cf22ab39e40c53545ad564efeaa63dc482bb839bd14914c3a57f35645d74c6ffb1268b80e0fbfd7754f36bcb683de787efcbeca4538ae065dae78c47b9b0fcffb9fdb048eff96283d598a2b96e7c59645f1accbba1bab1911d94ee95118ef9e15f193bcc41aaa5b740165e COUNT = 83 -K = 17ea1e55ba4f4c0d0e2f9f798155a701b91f1a2187d35cdf71ed49d4270fa521 -C = 042c2e5a7b952c99ee6fecd1f77ba4f400c417ab93f13323a812a2b20e2d90bcb280ac157f92de73892d3f0caa23d1e188ffd26e00d6def108de113e69d6a16361e2a03d18e806a26caf77e65036402bb730b214d27555bd809f6efd723da523df03f75d2725e3337cb8978c3ad1eeb4 -P = a534151f07b5a3c3523b387dd050ae5964b04dd8ebe2d8998fc9287e5c47904020752731848003bfa9707b09980864b38cd5b851bb2efd5af71fdeb78da29c4f99b9f87243e586783ad15346979d216d2b92fe271dce2997776660fd17b807cea6a7d7f9c0 +K = 13609997053e3ba4a8df00ceee3930f6bcb0ba6c5466e84e17e1a82db188c660 +C = bd3737341a329e10e7be1a557ca0929bc15e3929bb4a5e13ce2ff9251b06ae70062824a66f675df5878d7e63af6f88603a1375a053327d1e7f05c9e6f1f8db04b3b299579a7cf89352e212e070588bc490861c2d3468471cd942164bae7ab540ec505ca23a729bb3396221488e6a14e90103625ef1101793d82a2df882df54674ce9fde53349fa3de0b68e120b6b7c14985ebc89415bbe4d805b8b204d686492eef627dd3de558b544e913f7ffd3bebd0c1050951645fadf99f3e14ce89495d0808090132b0c35185c61e6e134d89b4b40e818dc82252f53c8f8942d19aa10ec203ba6d8d9df77e8fb0eda4cde72d27d93b5da05d5ad6eb085c5e18d07d16bf949d98cba6064a2ddea09d6b8b390aa6cd87846cc03edb234c6e3e1dd4fdde6f6feebea990856c3a2cec3cbee41e30abc71806c39ebef211f443ed63b5a5261388c7b60d395a85fda0c370adf9afc0def0a18bd2e43bd32c7a8611eed5b5005451f03536526aecc6bbae2cd01ac784a2a25b35507a904dbcae2afc273b2001a00e7945a6aa3461cf7eb17df6b4e498d2dbc3d96b08273f636345c41770b786a3468caa6c128234f0f634934fa416f0687d04e52c6c1442083120a06c784e6a82fa44ff4a436979deabcc8fc2036c88a69890c7ae2c406e7a4b14054fc6500df0484df7579888f6d8a2d08aa751ececd09f96cc5e4c76c9269a12457351b6620b87175e0a055e08976 +FAIL COUNT = 84 -K = b3961ef95f538817b980dd255304e57c28d4d77fdb5ce977992839d207bd67e3 -C = 22477293f643c5cebf7893ee56572dc2420fc218738533da0c9e21868dc59d76456e1208c4cb2cdac92cbcde0819261ed99ef8edcf944ee7ca048197bf696ca5f3423230a59dfea089787d2284ae77b7283169c83f27d7bbf4f286dd09125de9f535a9e844eb98164697c8cf0a3433e5 -FAIL +K = 085a2b70a6a90e2256031dffeae5ab57de46b6d27554f691288604e33e3d5b6e +C = 7fd26dcb69e019a541bb7760c08c1bb9efb6ba0526193f8073eadf20b347a0eb65cede130a299669e6b0d7d26d6f482dc3f04fe4fa94dd089176edcbd6650f009180c7dbbc36c98f558fec31201db7dfa615b4ff083897a543de33ac4121eb4693a8194f6100c4cd408a10cd128179c7468916e216305adf3d40e7705d925bf330f59459f6512b3f49aa465a6eee46d797b2eca061e73cd9357255605b1b77cf9a27ba53d304ec283a44113d90bb6302bcd365512c4ec8d319220289b1437090220cd73d4b2d8ff2c9fddd4519ae1f84284346101d39af139442308911e9b3b26bc4c6453dbd7e4b301fe3a09192308391bfd1001e800f2169f8c61fc30b9a2d389429009f3bbe5075e03c7b94f7c5bb10334205bedd2111701ce9e61ad3808eacec95894c8e846ef3913fd31a4bc38b7ae99aa4a6bd0f3e4ee0a6275550fd3986e44c6786f14316f949780b3bdad54805d09a95b5245e39882fe09bf0cdeaa0b5ab200fcabdf8fbd50cd248e1bf67704cb4f8983d27dfd83dc1c9671c97c9dc0461c2864ddf8a7de05d4c64d52edabc4f06162abf0d747fb7fe6939a0b7d27e0eaf61880ffdac402a6183e8478f4b37534aefd1fd8d9c35e3f2bb6606fe5026e7ad8544012f5e469868c29faf464b17632c6efba639c3ebf8c1a6c1e7ff180fefe185e9a31befbe5c23dd6702e716a7333c0c2bf8755eb69afc1cd702c9291a1f07c923f0d0c838 +P = 3f5e5ddcec002844bc7f65f45869941d826a2d05e916455fb7140587e7d9bbcaed74ee473f64e1189bc4d542cc264bde7e50e1a4006a01f85717e6b15dbe51224a83f3a93a0bd7ded373ae654471dc2027a17f3edea893c38ef2efa83687905d531746fd33729656b995007f331b6a9fb7a88268c9a938f630830d49c419e13fcc05913138156d278d4ef3dc955965df61f607bed65bef412bf03ffea5bb2b3c3f5e817ae1e5dd99095b7aa5a14bf708c22ee96dc2378added61b9cd780e3015aaca517bf14bf91dbdf9bb357df12551f38c9507f9ce6f837bda20d068d598c8f7b6d0c2b92a444389e861c0fadb6a9d11040e31a3c95d16ef89ab6ef89373438ff2bc2ae337cdcf8e9ff3837be1409ff459a563c8352cc80c0ca0b032e8f787c543dfb7fa448bda18db5231d6c981516f5d835777796554c23fa25d4635040cf2b17f49655a6cdd7975933934fd20bc1b685baec671be5b02e30e9a208c9c341db2899a40ebd980c67d173e54d59f827e4a5956df4f784086b0a93f6da4d01d86978bd8461db5a59d0ce777547917d7f9fa5ae8f95678afb76d07bbdd7605283abe7ebae5a0225b36b2662ab26e558df4630b97079b77cad3c0148c26bf39edb6aaef3f76c3d140f17e4da4dd490cac269e45f7b8d9c17c8a7d3c43fb1990e084cff5c3b4ea6ed0540bf23307c94c6894740caf7dcb54f042ccf85018ccecf5 COUNT = 85 -K = 8b1199686ef4ce519da88069ca5dd01a6a0f094c490e62f1ca3202878c79697f -C = ab333fc1499e445921016b996401121f44d5d44b2712f94d95776940632304a40ebb2fd2ba938a26804827cd42d987aa5750e60951a111edde377b8626a8d4180737f3e632b183dd7739d08f84bac8b6681725df63b71517c076936527199a540b5c451647ecdbc2705f3b40a98b40b0 -P = 1015c43736d4b87d24c7cd185e1a0007972af324b10d5cac50d8a9393e4a06d44cfce0ec8f9126ad2554c2cbbd08d42305ece90a918e6e546396b287b307f1a4b32fc0b6bac1f7848bde5584f0a6c3cb710b6237f40730b0cd25effdb6b1ac6d53eea97419 +K = bfa231879a4aea51e4991189a408b809046050835c58e6f3d802e919cdca9ced +C = 8c593c0453c3de13da33032c7da8d507aa6bc1faac10252c04719ccf45cf88a88c9c9e904aed909bb2cf1554b85e556ec64b5e561ee4ca62df695aa8c9e86a173cca9d704b49ab11e41c23a2891eca9b5b54fde4b15f25bbdabbba725a8393fef7e1bb5257fef646035e1665a3be062a3cc5933406c093621301f457b911181c8175d2d43e486d02c4fae9b243e42cc75e4fa1cd88a4b6ce09ea1406e9813b26f3d1e993477f43d058805d2a206c57a5283448831bc5d0d177dda94dadb5d95891cf633fc1b6e82c889de3f6a1d0352f04e4bab3b702395d2e6d3d99337a2f84313872f2b67656c0df3e234dc53a45cd4019afb4ab4932595803a7ce92127e4c69ed0da600fb5d97aadf288cf6e84299e8b4a20548c83ec1eb5b1285e71bdde00752ee4c0082f9c1c99f35de5e825735d3253eee2213fccfdba79824130d98ef94842027457457288ddd1a6b84855729315a81b91ba1f4d3b5e61f64384701c3b7ed999e7554f86dc4c4dd621bfa58e177c9f0af278b8180b0016b6d6983529e57290b9daa05ecdfea58b28f08f2028df724ea63be5ad1659c15bd4fe67821c99d76cffa0f0cc1aaa3849f04cf5f5216f340512b5ecda25751a58e5413deb71e1933c83939904330ff440fc363034060ed81754c0197c75c1111e17eae94a88dacfdcbf6245d062bbf2dca7dba3a06a0d9854188db48ea6a3318777c4dc390531db0cd7f8396e91d +P = d13c6af654775f5ffa18df5c5cec9d060d152a099c2f1f402375eca7b555a6775baa747b76a1bf0bc3989aa81f2a1a0940e62925f0a07030434ea5b41f4e9c04d29c10f00c276599fdf1352219c05c312ccbf9bbeba13125df8c082535440f3343f01b872d4fcf536c1c811804f975656f2934e992d2d9599620f867b45c9579367e4397baaa7c1c04526a75e8ee3c775a9a555e5833a13fbac9f3f0f8433649667d6f7967ebe8c90a130bfa27b11a46764e832e771f28b3f6fd032ad6420dd73801ffc1b3ff510dd0768bb2e4e7bbab0d2ad944a20f52b181bcb67ab6ef9578762988d301ac7beb94ee37ae9fc73d01c2fe3bd8cb53a669601362eb361dae94bbc8a6d1c125e6ddb54a7586c2e54bc698f682ae2074bcb1a0ea59f39fab15a5e09446c09056a9eadbc06f33e7dac80661ccc2ad09c384d38abf75dffaf294710954754cc37347b0c02cf0251e1e2ae271f5f7076ccf1509e77f934b51f08dbf98a19c6bc26174962deb7fb5d34c191b1b2dc06c7c7e464fc8eaaedc47221d593da2084043cc48ea12cffeb53e81411c89ab8bbb324a1977cecf2a0310261faf2c498f98c9119c858ba6acc1a730077198c900d908ab607814053daa148f40d240ebd5c38dc361fb92e944b1f170807d2d29f5aea9f78c32c83ce3f5fc15c4a63ae517b8b7e5be341035869aaf51c978ebeeff686736380cccfafbfafdbdc80a COUNT = 86 -K = c2b861c4ab060609c29286397f69f09ab5b7da2eed1638d5ffab16e076e69dda -C = 224b3c2ee7afd0fd68181cc53fa4ae86905895ededd0ded83cff80fb735edac1c291d861cb4d5d64e5311a9ada391784e13e57e223beb7673f6816a2e051df38a74105dfad3d897e6eb995f6a87bf353397dad92f928d417eec23e428728bdeadbe1e06e29974ac43266acad7cc24d61 -FAIL +K = d30c099dd4117fbde51615c9f1993dfdb8b0a9ab63765bc2fcedb6de8bf957a9 +C = 09a45d9e99f2da6cd014a017dafffecdd2568fba061707c6941fb547c4cac7d532afe745f0212eeefa984e5340b4d3625cc19140ffcd23262a8048df639eed8dd018d9d4a024a85f933c188123a1d75c6bad7f85d608c03b82749fcae5a6fb649229bab4c6a10c2b00ebd629912887b8f1cbfeb3d3297b8a1150df1a1d62894aaff343fc71de171eb9845779a87260be79b07ce4726c43ed5343160cd83ddaf35cc8e666663e0e3844b67b12b3712edffb8a874aa9185aca2f2a48a2d299dfaf6c997a516e002c9b85a2da2ec3a58115c128878829b121074d956278bd89168669cc567dd6bed5d854880544a782759592260c0fab6de0711bdc7fa7fd1c66a752a8dc9552e5da541790647cd761d53bd96956d8c7bd06a48486a808e4e1f145ba8a2fab7d35f4ea66526eb76eeae7c96ccf0495f060e2232ae55fed556b3bd482acdfae2bd7b9123ee4ce61af02f3b7abe7d9a5ca6b84a505a9bedfb7dae54931835bcb9d038fbf6a1d94f12f38b457f2fb656fdb49cf89f04752de8cd4c3acdcc3c3259f4380669ebbeb0fc8d73224620e3a3763c77f9e591ffe25ca8b9bf72409e8014126775874dad140e16b9934c71b13f354140806d825d591e971837a4d2cdf84c47afc10e104099940b5bde0da14f77cc6f7b0234b3e39f90029c3b7f1b522831b361eec33f96b3af8bdc23df38ec31ef023061e9b08dd34ea9db1eefa308fa4fab8ff9d +P = 61da55b6dff31ac4c6656858b23980bed1f5999e4fd0504c18dd8af11f9eb41f110ae7336e4cc4e35b3bb4ab779a79f61b241bf5b3c403e99711a28ff385fe132b67ce12df5728a52468b15e5d1a1766ebb25d6fb94cbf08d74cad2a9791e8a311c6c499db4d70316408b36014a18b576a8328a09437cb697a9400c50765f5d1d18f1344e6e9a120c0a4bc89f73e8f1deac1a61945bde848ae6682d7d85af78b3fc1d1466aab33b3c1fc2c17cab3ad4a7165bfa5caa17f4005d1d7a2d132b3f3bf9d0e69da33b042ab1b7943ca8651af2901449320b52b8779a2434dee77d2f78c7e71ad3e31a3ebd6f23ecbfd9664d1774bf972fab88ef7dbf1914b3aeecccb84aeb9b88b6ad96c87176c5239c3edf4ddd5920ce138198cd53f13717286e568c297bb41267c6a60179152615924ae2b29734e281a080b07d75acf87bed9858a84ad6060a6a34d20ce4bb4324be20075008fc7876404cda168d6cde194cee383790ae7ac39c8e579d9ef6e59eb9abb7eae43a0c93739637915274e33c780fc0963ad7d493813bc5178e8403cd6c1177e85c28a84165f73362705f8372df701cdad8df4e0791214770ed1ff62b240bb764461a3569346d0f7006edd6a06ba6ed77b5885ea56c28b80ed27e054a1ac736670592192c7f55e96c444bbee6e28626774e3fe2d2868e9fed69c49a28de36f094f4cdfde06fabf8af1dac7dcbce07b35 COUNT = 87 -K = ecb2011a8b12bdfa565d6b2301b4b86f0b8d2aac6876ce158d0b17b4fa678615 -C = 2612748742430ca598f0b53055235e0c191fb8e27df395e346521670258493f59be6bd5f4b76f3ae9b702b1267a53ff0077e99e1a15da5422b59e98972866deda7767764ffb20b7a0e54765e70464cd54271e9eadaf96cbb44a761e5b9d9d1c7d6ae4d2963b0767213f6bce02671c351 -P = a6df3f8713e4723a15e0bdccaf9b68ecbf1e7d5b8e45a8c7cb9d108fcd2057ad2244c88eae0ca9554e8d4c884fc37f352399a8dc00c7bcb89450529f0d8746eb5a549476102fe99b4c995307022afb3740028be40b1f15845b9268abba58e91f1f7e6915c2 +K = ef7ee01c79aeb7a666f3e2be107babf7ab034fd00ebddd67a63d0e3b4dad0c99 +C = 8f833ffe22f11857e98f1359ab8fcc243fe44b664081c3d3d677288d48b519d4b65ec7fe537c168783ef70753a43d36c84a2824bcb848a6f5d06a3611b096935baf57b698cd083694603904958b3033525eaeb0d1b95a1b5dfdaa023e1d01b6b6b5623fc3cdc144d1f989cecae9e3a7fb41160f903636615100fb77b4074d8dd5b1a4ce9c6f3012a1950963355105bb25cf5051090419113bb0270d3e6cd295016b462bb9001922d5b9c012558a5511037f193b7b0bf3fbae7883024edeae095d50e2644ab90a4e731b32441a47f38fb6958163362ba53b72ca61e72546ec072579216add0172049e08bbdc2b78f36f58f830f7aa798ff9bae374055b365299d555f01d83e921a07dbdd13a2dae726cd6ebdc94351c482c9f831951ac51cf6d627c6f6815c654d24176abc3554b8bff44f97f6cc8f376e7860b637e54a83bdc29bd4d7d33e5920384cbbe8da13550530a0b1953a7e86621f19ffe5e5eb13d94853a3acefdb1c1f9054f5c1b3a3f7fcbc79c010dd93f8b308c425fc6c3d6d01c37718ad379895ddb729a68254d41727bcc222c0ca9ca919816c19ace09462983fafcc8621017d979e124503d6402d1d152cae12ec32ba12e0a7cedfb168e037da903b4b72aeb5a3ad8095e38259dc29f33b9f78d76a680eb62736614e0453c11448a01296d99d6106fbf9eb51318831262e020f24ef86f1944436ec94897f9a789e1073dcd58214e0 +P = be4bcf855a21c9d8bdc4663f3ffc3cee33e11c8d00b0c087f2139bdb5f4548523997b889d41acbb89c7154b8ae3cd7f0d684a08ab91cf53bd8552dc2c17518d8ed3182ca63b9f4e36a4915e60c7ec787e416d70a8b88bb99e93fdd894e6fb83079c2a890ccbf8e0bcd81fc10d4c8921fd47522c5c14246c9da302b2b35146a9f8f9988a5e1409f972053f7d815be07959de81953a17cb3913126aad19340c342b05cf8434ff0c403a58617b8e794bdb7c758648b1ab4da6dd102f63f965513cfa815346ecd943ce2a0ec4038c3ddc0a765ed847d59e1796456f161dba013845d3712422c9493a26832941331e9cdd8909d29c639e74a3841e370f0e3a770a1ab007ba1fbcdf40913d8a2da17a9c980fcffdc8e5db42e50ffa1a864229b9713da9c98dcd447268befc545655de05f5ab1170395e49f09b6b4874cdf9108e0c863cc65d6c6810a09506ddf09c71b1917b72c8ed46614f1de7597bbca2c5c11eb28d2c757421f861ba41d1107b33f09f030d3c1feafbc5857ee0f951b5bb24c9125f5785b62cb2e95f460f8edf2bf320a5b9868b14a49a964373e4eb7788fded72a77454ba0adf9dbd7875381aa70a0ade036675f8fd6ae6dec6759dba6cb390cf27e4aba43b5df70ccb78b3689aa6c9b788f8c26d8b3dc310944ecc90baec793bcffbdcd9c75cc9b14c2997c5784096b0c9d6e21dadfcac9be37b84770b32a4f7e COUNT = 88 -K = 9cc6a8b281460287096ea2be1a691990815e73b4d1ae4573e17773dc80adc3f3 -C = 88aaa93663fb5d8acafca37b68c1316b50f13a1bd1b80e7d4696afef3e670506a25b483251499615dd917a19a1eb4f35c78417a678e6d2b5112f3ad6abea054ff1740339533c2279c6de06352dfbe82c11345c74971ac981ccaf2225506ad967b5fa882b18494fa145fd2e3ee087cae4 -P = a1caf58d54c1fc1149ad11a93f466a9a37f555b5fbc110132baa6e1fcc9d6d5e8d42ec73b4a700fe0fed2ca4d09e4956ec1477f7de0f2a7282b8ce145504132bf1f2967f52f22e481bdbff3db27307a018515123983ec3b73ce74e1c1398c7dd86e90b5392 +K = 7e0616430d90aedbb09c852e8b541b448857c53025d9446e5da82708ea05a3c9 +C = 9d121e5569bc6b04d42ead806b06dccdc658168a6212a8fccf4ea767fa334af96aeecfe12959349748beb6554b0b7cb2f034d007b0a7f7de1b19de1fe544244ee8f1254e2456e23ec88bbf8b10411f836ffe4fdcd41c802d5b13e8de1b49c2b1bbddcac44193d3909b2dcb106a3cd5346ba3d15840c33249b61645f91aff2b7b80811d234c26e1d4ccc429b4760a73081bd633df09dc2f8b8aefceb00474d64980829f9faef867f8cc9ac00c6510f3a7566033a6b72c00f8b5dc1642771902291453ecf22d5bb21cec446f3e428cdb65dd93124e0972530e3432530e9066057c270068f881c2d387e8c40fc26802858efefaeb2154a2b839d047a50a2e098ef44632ff84bdcac0afb982f56580daa6852930865a13c734cfd879b121b6cb0a6ff3ea979386a624e08b1f9c3772078ccc4effa8e011233c1703441dba7c0ea2136f578e3fded57bd3541da291b87e1ffec80de898ff9629da3b3c111a5899e25969f10c7aa2866eef3902ab47039a9932d16833a4bd31fa807cdb43cdfea1241c2dc988dcb3d035998cf03fd6cc0f1cc7f0971b272f5ff11f190c25f4ac92fbc7335517027724a5849c3fa7b1f8fc4224f92ca15f8983dbc57c896293810dfa2dd74b3c3834c5f43c2dbc2292ba7b227bfcf973f794398b37c1e27dfbd883797898b97db865ba9de1611870543859f427999e413e6a5fefbcc7baa728cd299642e8bf5b2d049f4edd +P = a8f8b2dc9f61603faea3747766c5cd70adfa484d6b220a2d978c1d4958330da01e00387a24b20963f323fac9b89967bf881d12d9a5bfc299b89cfa297d3e794d723a6da744da1bdebcabdb065e824888ff67223fc1ae9480fa5745a458bb934f515af1804701285688d548e993282d182364de8671d799a29c4d317447a30354afb3889de1d2f0ca87c90bb035aee5e4ab03e1813c096bfe24a8a944fc31754317c73c0cfa9bb39a5861854fdb5e1f88db9003436ea82a7af0253e376df42049d7fe5b0f8c6c1e214bfeb5966f4707cfe1acd4252276d4d75f43c91b0d3b5efb02e49b55b5045c4ba4bad270729d103856c30464edc92db2e50aa308cd22fe601aaf7ccfe5ef2f95a90731d05aa6c7c2869c61e469ea0abd6522030d1c6058c688f6ad5c70c78ccb2bfc4f1c221418bad43c65d448d7e59bb19944dc2c0165b33a946abc25df4ef27c7c5335aed686f22cc90ab8e18fe2a15fed91bb3efaa0de351bac2254734855316ce3d1f4ca3f0edefd9492b13401b6f6d4455fc07e1a5f709352c6cf1b4631ec62704ba8cc1a967fff2f1ee8af744a1094ebcd711f636c91f19237c4efa8df0cee9140db377e70dc40ab9a418a5eb3aa976a3cda56da70391d26dbb8ccad13a165f319980f75fea76bc948baf351563591a5ccae1b31f51fa3c45250fbb49689899e4376c874d7f8964d64e792978757a1faf7b70a103c COUNT = 89 -K = e4988264390bca3a396011ef48e7b18fcec1c99c612ba85d8421db6ca19bb91d -C = d1ac8a4ad29b88a0ea26ebe31d156b962253e16e5b2ac94476295b9d6712d1bcc317fbcf4dcb30acd8ba0af82a80c345eeff184a9cc0fe283555bfabdfe2cdb81b40e07a45a3862e76e79cc7a0d4baa8472f5a792b82decafe0989c9d5d0a1a23aac06dbf6d95c0e671b15fbc44375b4 -P = 4e237bf76853cd07c20ee82a845eb7d2c36d79bd52bda2e0e6803992694d747d7a7b48700c9b3a35e2c34c05e5e1e004f2ee87eb4d075ca1123d52ef86ada2285d7cb183565127c963c25df1ba6c6fa9fc9423ec93dd2cdd5de5926c0fa8f4d21ed6722275 +K = 36c88b01ed441b3924f48fe7cb3720da081cd227f3dd7d8214ff861bcf86bc11 +C = 8c4a3aaa08644022b043ab27d3f494ea2ae6f525933c1bf752dee70dfe0b7e8412d41efb76fc9a3caea748f7c019ff05309f80e187df86f403fb9ab839f1c0ad62c72e1daedb8a5e5414117fc76acb18fbe762d82ce102270d88a2efeb1c533e864e507fe98cc6c2d488d02079c6ae8f296b2d55726373871482dcdda410b1f7bed609ce2a244cf23c935090d0dde80b4d3c053d34eba47b82f255e2e36106f99b905cbadce3f3e6091d0d4249b90077edfc6888f7d6fce8fc76bec0dbbacbaf9a4175adc1eb5343edb522cf1ebe42e60efd4fab96d0f3caae60cfa13908fd75d2fe85a762754e9c82d378c3c251b4428363be4b8fb6f20cc0237e96454c4d2baa1b98e505bcd8856cf411d66721ae9b53422cd2769f101f72e83f0ae586499287b5432868f6604dde2f69ec457e3ad552d675a265b904fc8d049b3224d6fd6ad60b1c1ba623b235a43e758248e40e66b05b994f0a25e879ae230574c8107176c9337ff5807610dcce42d397459693980ae4783ad3a1b5ae045587b5aaaabbe986c8f3a9f825a80f532b9cb8fab23aae614f53df61f024d6a8b4893bae1c03b910d59f62779e632370f28e7661660baeb4a76a113f86bb5162ddfefaddc66e3025d0784251d08b01fd64712263053adbca512ba27362194122f53e742f9ffa9fb04c82a440f9ce89f1f90a5189d74b2d3a9084f8d4a3bd34a4e43d24053d08d140280a70aa0f3efb +FAIL COUNT = 90 -K = 8310738e6494f28503c5b6c9786c202cd9ef9bb46a19b7931078b52a51c6ac80 -C = 23c9a06eddb298360973b03d16887efddf4e54358e0db4826af87194a61e79a5340f7c3a2d5dc542eff3a0578ff6dffd046beb13536d9a22b5dfdeccb0b0313b8b1a9fee761f22f54e0af0322e27f124390aff01472bffceac1193ff4a3f1a7d4f029f9da2ad7c185d30130086d70e01 -P = b8a34a2621d6326493a191e12dd4260487d2bd35cf8bdb9abb219efeb43255f73732ba4d7b96700837c45c15df3c2fc5f7ad500939e1e7e91f681ca07ad6738c076835c42bab7fc5a1ad49031909fea4a96d3fb235567f394b943e176c10ee4f58f1b46fdf +K = d195e98d54e96203f974eb446eae901f23a1c2af3868f1a1107f4c4c2683a48e +C = 85c79e7466a491f0f44a055ebefd7d381dcf5dab287eb3357aeb9966712f84b8980f2b49b7aaed6a5e47302974fba92fb7a24100eed2091e2b2311fb0ded87a2445cfe95dc40d58151056b8514caa6c4d7da5500da842018f57ea546eec4943350452561ef98e397cb03cc0ce435ae9265b91f87aa50e04a39b3e0780a2f64f9043869d7a50e4218f46ed6e429db168371332f6339f55252d5e0369fa2e83c24fe6612296330f4c08d462a434302ca2cadafacf2c9ac4c6b8ea9ec7de8e309a126bae724eade052081a32021abe3d1bf8ce0f5fda7965f43c18ec33a06044661e3bdb6c6d14a497bcfe6339e712c1fa405ab90102c0b5a0dff4c78ef53fcafcddad4a3d34a59547f28a64508bbe65de5befe9cb898702faba98390054cf1ab985c633cd6bd2ffd35d3e6ff91056aa3a03ee6d7b3eb25e37b48051fac448f49b954289233eba4b971c98e6f4855350c8888ee2d82d6736b1fa405e50441802203435271aa6fd02f36f0574da7dc392991df6e67331d7ecda90b4d6564e72d060c3432af39d20f20f403ded88179d4713aa7923b2c74b361b88f33b12d952b5a39825ae82107dfc558a59bf75b3c7b4421d065afdfc51b28940b1b91f732df7736106deefe914e60ddab665e909c697878390ccc7e164b17679fb3742bf44dbf400d5664d54f5ccc48674b3946ca70541e18a070f5248d3e1d55ef442ffa39b1052cd4c156de8cd33b +P = 6a9811e3ce1cd143a619abf83eb4264310d11f317bd88277f8f3896cb2a3b7605f3f5db8576b1c4f466145d24dfa3800a76ab46bbba0bcd13dccd22aae19b40a48993679e5b11e92205ba61cf84f4ffa30712ab63cc132a62f5218cc87189694fe4482158c012dc1fdda12b3417a57c6f39d79ba07c7369012e46f9527ae348e5005d6983ae7cb83ac276b6ab4947fa2cde37d7e71bb3cd8e54660a9f54cdfdd0582eb885393ffc6a1deb54ae21872335c3fa25f035371c8394596d84da3df4cc0cb8108589e4508ee72053bfb0fef609ac51247ef9f7667b4c3f93348a5d0c6e92620663173cf21fe38db43c11e0451659af1071ecde925ef5832e4d72ad5c89f65455c46aab0667c6966da7f7d391f8c2cba03c69f0a3d5a158b506e35a0b1ae6d3b4f4d4c50581f3b2220fb370205e202f24e62872ab170ec013fbcd7653ca3aa14afcb55c2ab3d7f0b92ba7de0ab8fb1d560ca1d9ed5e2bf6c5a2b9fbcfadeb2b9f29214495147fd34a87551c60d83e6da1a87078213e7db7a51cc1b221347209fa80e823e78ca3a85fbbe642dc3f089c9fd6b6fab0e39ce75251153bcd81370d5294b629118ffdd8ceff58071b0bd59cf1ca3fe0ef9f31017120efcd281c428229f74adf311a612f2643c405bb36a0e9eddf8926542cf84ec4acb1e055641776197c8396e232d3504c206528ca432c1ba5da79ffa8ffeec8d4017b4d173 COUNT = 91 -K = 984a5501b65271bd228a81da6111fa249fb6ac8424385b680aa90f61e8b0402d -C = 9c979e03ffeadd8b696bde6a6c27ab1caf69e4ead40aa5b3ee327c0fd9c6b5598dd6e4ac0e601f208599b60243498f9cf479a19b1d7f295f3b34abde64071f50fda610dfca27634d3cc517d19dbaefae05e6f7aa3b17beb7260227727ac6b5924e686529c74988cad7ad5f867b0d33fb -P = 3dfa72ef480da1a4dceeb22fb94fc720d1143992c0e56a1fa5144f1a4a95b536f4dd4fdd14c1bc578e4fcadff60a6077bb49d18beb52c13556e55e11af2b2fb3aade499837f4b19c26fecae0902f95fad31df7946b0cb5d664e124520519ec79762d5c01f5 +K = 7869bedc40f2755b58cacbcc89230e99f15cea089a09e0147f3709005a10324f +C = 4e5cda1b81d4d5592e8721fd138459c6b0197dbf6c81e9abeb9aa90d9dfc33ce5d791c87392afa4789300890a3c3d115074ab6e853a23a27b2b5908de821aabbd9fa85fbdf7c7791e7985db24f70ead7c0658ac48c31b2a3673b97e5476adc5a58e2cd05daa0c3970be5800c7160bd5cb4de17e682236ee9fe2f3bd42edb9e24230ae9dcb5951545dae77b0e6cc0a3c095683356589004d702b3094f493349095e6ab3bd2d1f84021a64e74fddf11e70f6f1f7b2fa05f262eb049b0b65b213bfd727ce644da15e1b6f1015d4f42a0f099a66e08e9bf2a39f95c7b6d537e4f1c874c85465b6c484bf4b7e67b60ec5390ee14e0a322154e621d6013660eba4f125910e64169277282e40be8a2f55783c0e54ae06e02bb1f525aeb482f56b3f6450f1aa2467c2488e54265bb92bd81b42b812f488ac6603cd275e43e26b457be4a93161a2887b1f2dfb03ad3e6db32ae28bef240188dcc56db44b063a8aeb0a7fa152c13444c01e8ec112ca16fe419a0acbc75bf782400af480f6a0ec1766d6087fced52e53ac8cec7be0cdd90d120ba12e3a89038bbc58ec6512ebaada15ed3daa7b4947f9c17dd45d80e4dab29512f42425cc2738627bb4195c36c83e5388aacd60bc1843167469202a2d7f661a89a3926f35b6489830d12b26ca90c4c8cabf66f3da673f3d72a2ba146e23cc099b83f0aac95b077130c107ad64db5e6f2cefe5fdfd2eb569aa46b8 +P = 784a71b5e27cf242abac851d7568f2ab4cda81e8b095da2f465b9beee1ae4a96acead4ac80bb5954a54e87948c60b9b9e532151b9eff6ac7d85dc53cfb60d14ec5a383fdbac78a2a5629ff4059a447adef51fa9a22e71e2cee93c3a10522610725877dc31b6124f4d6c6931b04a7dae974ab5791dbd16181bbe35a78cd3ba6a48f357c05e8b78fe17e95cd5410038f6fcc578d343d1931b8edb101fa2c2ca5346853f8c8292aa1bd778184e1e5c1dc07dc346addb616cc1914f7d0bd4df751c4db53d707f4fe683f00b60e6da45727bbeb67c2047e907cc27588c06a3b260b6fbed49dfdf115f772aa74d393694364e13238455506f29ab72dabf68a1d0c041a4a42e2eb3ffd919004d7c1c8e694a261f11857f9f9526afaa2bcbc4c9437b8a5df693d99692c36f7bedc9adb3e2c86f77d859808ada466530a82050fbfef5cfa210ed2a3c04186e9c4eec5ebe6f7312bdeda85086bdcb33d297a9e8b69cefad09e5578cb37c32bd7d04acdb4b0a40a02222ea67271ec640b1ef9ce0e8dda4e762030d26df245102c120d6290b5e5b4d02b6164cf20c954f5f2e04695ed607fd84f4b8aa5270c5e65f139479138aef61752e028b67b45b092f9b476126ad20b4a5db554323973cfe37ebb6d1da91ecda91397a292d7f11b7a0a785dd66ada0502151fc1bb4dad1a4bae23cff380af06bd0509353222cb2ff8d7a4701262771d65 COUNT = 92 -K = 8549c4441f5b3d83aa8c24ce0ea0f3b1d3d9a14947b64311766dbe2b908c0cc2 -C = d2b883b2cb0cbc0e224f5409bfe3498cba60e2d6cf6d4fed79dc9885a833cfdc50cf94cc313b42742d84bc79f261e943210c2ed8ffc65a4b8e195bafe570b244b6bb93a50fa1bf191e8c5478b0acbe2fd93d39daf7a4356ad1fad1e8e40aa758cddb9078e9719d9c12b211353244d520 -P = 9ed289f4c035db9dc3da4152bd3692fdd94248cb8a5f7c22fd2ee65c3330572a9acf97e2f9ce02abfcc224fe65d97283e65cf1a4ff4b9e55190bc0ec41901fdc9108eb18f8b26c3d978855dba340462dfba7d7c057700ebe659793cf01af23203373914b6c +K = 145263ae8f6fbbd675bb73c7efaa665a1eb5a35bb6587509d39b83854a07dba0 +C = cbf69d95fc489d724cba0c9eeb3d521670d925a6169f52814e88953f2110a052798916836f1ef95bd438a2c070ac2dea48758b3e40180ebf5722cf5ca8ff954045a0b533c5e9dab77b5cc1a46465d158db62395c4dc36ba0840f1f4c511550f766248f6f7440232f42579973d91d84d1d396fb6ee374f4798c2eda50fb65a82f82051954788bcfbbbcf1449d267aeb7cb351c4e9f92d146ea4e0ba70e5c0c84f35fe4fa6c4ba256d819e34c2c2dd3e4fbd5f529b15cb6c6e2feb52684602b4ca988490320d60c8ef247fa6bc743aba5424a3bb196c6c696d9612050e59051921ea8aeae7cae2ae12006f512c5289c8a5ff6016ee24f6976ba8fb2fe641e5d6d6006aeb87aea4fcc8812f3929e53df384ad29cdd4e16f84f6a2b91fc2227a9f29530728d604cd7be44747de6b9cddba0328232166c5b0c0720212739550e39fe0db79437e4f210340535fc3bea849c6109fe01aafd37c498a59bcf8614300fdad5ba2ed823daeeb916effc26f868f4809bafc2a63d7edfbce324526967225a03e977b1afcb5198c01078e60759f3c2112be76c8ffd280a9ffe5f03d0603e31b295f5a95723261e640f422dde6de9418e7163d7261510c194b0740b4eaa90cb38fdb8ee2bf967028a3a4b3b08e40dc44ae7fc448d8b4fbae7903b2d3cd25d2b03f7e6462bbe8f708b919e99e9cdee8e65bc3ec29149b6851532d7b989969c57799112a4809c5bd89aa +FAIL COUNT = 93 -K = a87aae7c40388b25f3338dff09ea0ca8d4622bf74f2f34b486a0c81852aa03fb -C = 29c6d5ef0c08e06a3474bcbf039a21461df4121b2b5934a7381f3bdfd57fe91e4e47add9151f7e8c6e78aecbee940dab333973da857cb2aa3a2ed7403b432c136c15bbe3628e606d7640af58cabac6a86f65cce95a68e5f9566d0b98e982e3a8f0a68e5946206bad6a782027b13973bc -FAIL +K = dc43ad2e39871fe1855bc3ff3ed0c6f27ca793cb8278a6a850ba1d3f81427034 +C = 7ddd600e734153430524157ad56f6a5232a0738f9b575a80235e8867167fce87b73574263c2acc5d9ad048e842984598794563f9bf5cd6f7533b1b84130055271e8d694c6249b17e73e3b856afd860b2582853d3c2a1fa8f61af86fac39ba7794d81739a0e5b6a200f8a7b093d83c581624d8fc17ed959d2773aa736456b9f153f4ec2fc21196340f8c66401b6492b791355aa6ec161686150045302d19e112e1683474ce4df68642f6b5a41e8f78f518fb60353f096b04cf6f2ad02a4e6bbc310bb3290be5f27333c9b6819296adca4ae4eaca5048c897e5b2e87316c43a86731c877e3fb0c0329398412265628c97833cd1b1f2b33f62246d48af4f5be1b79784e7e9f43d70509a9f8c6c52cde8a1e52871b366bc7a7c586bb714d20adb7eac9c5edf06cbf9327dea286f0f4c3cf1da755b820ffce697cc88a0a458dcb73c021a299b90828ec94394d35023d449f614d63914acaf06ee70ab220bf4c3aa713018393c027d2ddef95224ea8efa5130e791cec6b03592e47fa2dd5676af46cdbde4719d22ed776f049f3791705b9216ecb57ee25c98b6591fe6af64b047580b5c4a1db285fba0ffb093dc73ea0601c245d42a9794fbc113971809d9b5e4ffe63eeb5dbfce79339db36c872a15d2e0693defd2a5d81dee602a5380e142720bbfe87c910849827b7b04f18b64414ecc73f3b97d9a973506bccc9cc114f3cd36b38e47ad5b50f7bc52e +P = 7ef0da3fd2e3d378110fef1336733d63f4dda2507141076e034107e9fe3da960271ddde6522e90794657fbf2af12cac0f3995301e5b70ebb7337bae96effeb7933ac45583801418a781734ddb97c045ca6fc0bca8cde99ed79fba3e5f21de60039b8cbf3a19ba10c4b5945e359970ac07def281404742867a520faba88b68edfce4feecedaf71d9441bd7abf24d3091955778b6c9176af48d29ea3a9b77fbc9463455857b3f7a021e0133d316be15876db12e6abd37d35463d975a7b55c70a40bf9c4706a6ae71f51796300b3a2f91c5154dcdf2fd512812a10887221b1c07e667e3b77473b8af70382cf9b0d762f602403cd9a217eab2e12eac8ec06115c034a56e239d5a35c8cd43657a8635c73c0e3eda1f0400b3d86757b362148c6eb8924f68d5849d2c4531f456f7f0a785b619eb1031e62788956a6bccf057c2ac0f0bc21c052412a3b84b2943e745195e03e7cbc4e30d9fca119df4a7c376d08a634625219edb861342ebf6cabb87cd81553c2076bb82101326866ce1c2854e75513bf21714285c98e1561200df87b22f22da035612cb941916c19afb87fbf9741374d683ac108d785dc0a4ae1ba52f560f83c555838f98e4a23fe544f9cbc885a0aac0153cef39acd83fb21b32985a449d456ac65ed91e643d99448b3bc12d4da19c461394f3bbfcd41d04b8c57192f767b23c6e86712b1d6ba79e3609dba2809d4f COUNT = 94 -K = 10605bf92aac12c73e74af859127ce117d61642db4d0de2315fce6246d290a00 -C = c797fe989f17944a3d769cd7fc298410f4dcd1628f37a7a9614b71a467ac1db56864cf88587a908d33773674c3db37fc9063a0e11e4c9ed8dc84cff04b7a21807e22bcbf55e2ea57f44960345bee966cd8fd72b0c0fffd261e4918246db7182a36656550e6ad5524484fb23efb2e1bc0 -P = 649f9426c2f81d00e5d7166105750b6f0d2c8945c3872428f21a1565e63d6137f785abb5b27329f2aaa2319f79105f58e5545dc1f69c1be46162c63e8eff0f4e64f6ffe1efc0490cbf292f58151a7de114e19817fd91f16df27acb293f15569181b02107f1 +K = 98d58ec80f45572b58565df1cac6bc07a90edd0ef9bb7c738bc5719b44c32a84 +C = d6e52af6817654e83bd3ec553303cc67b3428ad36f219b259a57e9997882d2120ca0c695d05d9f48b63ddfcc07184d5b60bf7a5f2e43e4ba05845fc7024097e7c854efa3b7e219d56416fd830f7a54767c7a175e98afc77516892e1e1d426fcfe4a63f897651aee72fbcee2a63ba1d014713925a01d72ca96cf734c5cd5b843abfbe7a3bbc5f7d5ee1ffcaad5a2d0c2f514fb58b75ce8de7e92db8318b7b2154d809ef5956bfc47d41850564153a677bfedc20f6b04dc4bbd76ebe4927dd06330b5ff4428f840251102d802a13517ea93b1d566eb51e0226634fbdf2cc3dae26e94823a5cb0c1ccf6dce6d25d39da3f07fd94330fbd36e8ab58eaf26bba63c89bb66133b00be83f79be11dfd0cfa55606b1ebeec1f4fcc4d400097cc3a5cf1d9fe4d8f079dd41994b842a8f4e06fbce572d26950feb72c414c9af0cf5dff717e8c59301edb832e04e0cb8baf2c855c52958f241f12b3fdb7ed88162b8b79248ea79b7a0e6b4d7553bc55ede11b540f5f1e9eb72915b381590f396fe36506ea57727c2302d0f031b580393089732673f95cb17d9ed3d04e5a83b862509eae1760534bc7bf6b6065e3b281e45d929f9f515733cae156434d2371177271cc26a3c87b7641befdd2794a5e361f1b75e0f7666f96e859602ee786ac0fa517a3dacd379535ba7fab0f1516dd0e9f258a31d99ba807ed1864d2ec5d14092c0073b6fe69999464b8451afd3d +P = 122d0e5734f81d97fbcb5bb1ca8fef7a20c9ebea8a64e3772fbd65c01aa761dd53bd04e26c4d4ffa4aff10f53a899b1bf1475c4e5320d1be03fdb5e7cab5a61e63630971198dbe0705edc1bb1019276efacf8dc48f5f686c2eb29fc8f614bd718d706c46aaebd1a333e96166ecb1f36a336adc75cc8635bb3e237e1a9ed1d9a28c3ae7218ecfa6db3b9ffbf41caa39c769de9981743b5dbb572f9fa385eef44d1e704a9cc0d2ab5c9babb73ca1d6b6e19e38bec937d823ab741d681a548193e5b86b11c86c899da04f361e3cb70733551fd74f1c838b0f019117aea35d7ea6d2fe9647db4b49a55ef53df1583d90856e3582825714a177190665e0aab8479927e811fef670a3f2f066b9de2660d3ec8ec7816eabb0a212848e7e88585c38470049ca60823589d62f5b5dd311b6f9f77b5906936ae5ab1c734656947cb8007a9d2563b006f288c0c128b4410d00dfa7666818d0288c8b6bda8e09ba82230aba87cca653ec5054720d09200c742b94bddc4c6516f9de09e58f9f55aae4f648c5371ed935eb3c2f1b4632d827d1f6a36f4b1cb24038c3904609694f3d56772a9abad7ba696ead6884098cfda872a36eb9446a56b764c1e0e6206a1ac72a1579af7912761589ea72e9f39df9170164da4bcb0ff1fa18eab481fe1471c04de162f9aa7abbaa79c9847ce0b369a7b7be277a9dd3c6dfb9b1ae2d076c4be8b4761e7681 COUNT = 95 -K = 8af29ca1e03d1f49caae85a553da8565cefac5caa31e97ab1fd74e1f631b0591 -C = 4d649bb09743236a3f75f42e5f090a849f75c546e910c89a89751992d652d4cba3198f25e36d66be0f69a3dee78ef863361ef286b6f896a8c1f05743a48a8367ac870bab6be89964a3f579266fd6ebc991dc967417b557a521e4ee101671f79b3188b8e3dcdf2723ac311da79e53292f -P = fb025114ed74a3c1b257c0be89fc7ba3d308e25d11496c4ccdf378e6bbc5e97fe81832de8d3a7f4f51378200dace62e0ec437b7b6ac7661ac8b8b5c0d7926aeda1ca21af064cdf2abfae689a238ab1dbbe29f93a3dbc9534794ee36a5bd3f3b19246ec0a31 +K = 4ba5a35b8740e313e67b979c8585a0f486d97602e1bcc5d2db20283707097e2b +C = f0fadf7fe16e55122437b177c8d5b83e32c13c94a7c3b525177ab257c77ed7aacd2e67a7f41012d9eb8908396d1770c2a9bc22353590ace504a833441fb5d1c013875dfd5feda4274f8761142217b07b065283b5452c44ba17e17009a27890acb346e916fa48dc22fd1c6dfb9acf16eab3fd0e71313017fdf0188657d55b68189e2dba1b33084db7ad4d41fda80636254628137d24e7db8b4d63ea4628f8aee62e845c9d545ddeda669335a16499dd186d8ea8256f98c6ada3eb85d4ec4dcec6a7923a815f076bf31c5f31a77d7a83f969c0a9d1c37ebab479cf92042aa77ba9fc614ed9dad60b6654270ed78ae6eb4cce711359f6b147aa08a86fc072b4ba165701d0775791edd7a0f522441283c168f22be41d75781939ce70a5f941bbac64edbd931eb9dcaa5e89d92a852e0265ff6c98c71e3b85a181cdf1ffd3029935aaedbc35a3851e7859b293a8127898d6594f7a20d8cc2533938bf973f96adc305346ec432f5f18fa6337f5e1ada48abed489e84dee00e594c85c696c8c1b48448772906e7cae87d2d04fcce41bc41e0ffd723d5470b0183a3296d7dafd266ce016a7ec5ad465d2ac8d6efffcbaa2f809a6759dab04e3f1b0f5b621231f641d64386019c688370c23781ffc1125d1a14c1a0749ad3445e9b688ebfd25760c541f37c9c9fa1a0f6de51e03362a63675734b96c7ce05125f658433b20cefac7646f641631ee5abfe86a34 +P = 80d5a8d2ccca06a23dc9511356d0ac9bd64734658cbbfb70b460ed27a99ae55bccf3b7ebca0a3d16601990efb397ae09bd45f06938520ba578f762059926b9fda273d6157152c62d2586a948d2001c9f8c3411cc12f4f0a0c01552383555f5d3b15bcd8a0807fce71b83a0bc8ee1a7e7db01f5d36d7e2af9857b9a0d81eb305f9e983ee6b04503ef117785f81b689f1ac8ea7de1fca53be515b8eb3be5cec8f0866c71db849175f1b9f5bd6b19d4afb1ec9cd1b2965aa00ef14fd4ba634c72cbf87b0fdad0c2164c269fde2212abc4291fb22de5d3f92a614c400999f284a43cf427dc6821f4a4630bf7cb08aed9b980c7ab5f96612728b470644318ab8d774ca3092307818d12def23f92d1f4ff4e5aa468f4d3a2a929745ae44f2482d433bb4b6b619a7d422417c66891b31381979eb570679e3b8b9dbb8ab835e2bf279edafe8c9670e68cff8e7254398535ba47f93d65627b7087fa708f05a769a7433d2ea6821af4483e683c380983b796e8be881efed33cad1b4f6446eaaa264800edbe862b9080fcca9b5c6c2c7415c31c35aeeaaaebefa7c81668595477c07dc484b4d512f4a52f1e110bc0ea3ab35a4de25bb6e69dda6b21f9bcac5480423507c679d7865fb707b84463b61f809d2254751f53ec63bc7554b88446525253760b3114c6e8f840860b30293168f42dc25fc2a6b9c016a189e86bd2eeeb75aa093c3af4 COUNT = 96 -K = 84eba473cf5a42165bc84ff20fc42849ab0dddf5e1ad6eac4671ba6cd5f34dc8 -C = 65c658fadf80c5b360f34e7e7031237af8f1a61d381d56d47d53af14989e6583c8834ac2a9c89fe0efea6e6769193b50592b97ca7d5e0ef30b410f5c4b4b3de570ad76cb65a14f4ad75e0cf128fe55a6b2584f3c70d42d214e9083ff1ed2de042f21c3b75f43b5dc2b3094dd8fdc2b22 -P = 761cc9226b57f5cc29189dc89e968d7cf9c2f4fbfd3b67376f99808203ae9e4b044510f500ab2a9e22a16825317293252fcfa1c852b4f21b13cab60ab708432bcf597e6d865c8ef55c24b2c8779fe23f05864e479d36b057558899ec69cd90a9a795ce1854 +K = 331fbcd292c4d594a1e2d43dc4f449d7f7202b3d513f32615da6e9838792e03e +C = f6cd4cd1ac6ed0ee5552b9b7bd2aff9924e6abc526e54e98fbb7068ee1e9f3ed5e87d1c9b9a50225793ec42288fc00c93a3b0927a5866681cd8e96bc5d777bd1d29d88e19f2d966038b487e12f92cec30ef1e2ef434e2155f0e8456584ac7d0da96ee264702444ea08965c2c490c6797bae736fb92ef4d734cb0f77590224571f143832b116e94f670648cf303b167c04f5f1973178aca858369fc2c4e82281f3d9915442c546663c9ee9a8e85235cd0115a3f237c1f2da164fc2e91cd44bfe145f15fbf2cbbe326890c72437642979e215fae785cc33c892d0e995e09512534c39a670d19e9ca7dbd4cd74d01a97386853bbd2c2649228fc2afe81139a11e0fa90d92e50def9eb82fd673dabaa9b61eaeecb230d261138c511a8c81a082643fc28a5365086744a6802d4f9f352112cd9ec9da720c737b70cfe843ff2091287605b7f54587067001366c7516e48cfb9c123d0d7a48ab5859d9b66d3f135e06fef75fe43dc4ec690f85535831e25c2a912f3d4bf6b646bedd6031751c749ee7cbaefc3bb070b536d43da582bacfbd87d3ebb1ea79f8fe488b8851bbb53671197036ef24ca9fb7bd8248cc61f7b4103f67ab166cbe12dee28990739f3f7dc08b547d0ade1f75ced3d68f88769c0edf519e80d5fde0d4fd8606867900945590a934f5f214495a1f941e9c671518d20984c9b80ec4718cdb82fc9004a7a1eb088fad77af1862432853cf +FAIL COUNT = 97 -K = cb77dea138a4c82b39df1f036900ffdf9a8f99588c1c93cda192fd1a7f5e2030 -C = 33cf1b683352e920960862197f04e52c95e5398944bc81e21ee9b25afa8716068a76625fd45ea1bfc146e0c9e7687080ba8aaf436831a8b9ad70b7dbeb50de56814f87da0df3e0850d251b5284fc2451b47fa630f70b9e407a3a00cf8d1426ae8f176ebc3d4f7a07e625d0367e9fbba6 -P = df839c53ce5a0465a5c2e36e41b32d121203fb6bba06f71613ec1dc1365eeedccb1da95a15b3757d89ded475b0f45b654d5677895959b5922440838acb5d016d859fc933e9e9507452565ec053de3625ea270f983e5b949b8b04ff8cc3593fd5e1b138837c +K = af4359776192ae3f5e34f7c832b83ce21bc86eb97626809845be008ff20ef422 +C = e33aae35b4c8d3f9cd9e80d66a423bacbd75f1dccf8d4d4972dc5fbb10aa55cddf1ca063498f265e7fbc13f67c6d7515dc82eeadbd883dcf91676ddd8b017af9bbc34a98a64edec6cb13061ee801fd102f2cb6d5028fa6f21b7aa2eb025b8cb30c34dc31c75dfc93315911cb15273af6c482f9cf3329c22f651bf4fc6fbe81cb763cc73363181e8ae714ee3f32ff6c2c1f99d9ec8fbda5f469c230c6bebaefc920d8d9dd6b3b0a825cd6b94c6bb7551174a6930110ddf718581370fc4285e5543f128316ad21194568be1168179c861bd7fb5ff872816ae87e74f2257a4afc1b7dcd2bcc68febfb7ece62ab3b704a748e4a1a2f21cf566fd0279faba9463bc5d42a84fddbbaf4c7b24cfe7a4a3281d9b111037018cd88fa672bfabad6a80487b7e986a86c2e99d815f868455a59169f6829a84bd7776faa422cf3ab70108ca9460aeb538727f29f85c5061c4edc89c8fabbc642c7d6c8e474bb41ec45a2827d361503eb6759c208f97639c1d7d660766f8804a1eb13dd9b801a991a51511191e52efcb3dc04d9649610f536e0669a7d640409f24c6fa144f5d442e0c4b6127805ac33c911dce5204df9506722f1efc78ba9ac54d99d6202289c22eb09a0d44d545f99a62ae7ec9d273cec88139f1df9d7a95b6c8786817f382e8664bc464e622fffd0d0ce8a2904eef97cc8b10d85090ead8f6bbcec22607d0f01e2b62b812f55db08367d20fd78d +P = d7d81df9e58dbe99aaa92a16da71ac0ba5ac782652e6292144d0c599319adcfc3f2ee0c2fe19bb26b93d6577619b5dbdbe2946ff9a661f5758d503a746995ed3c4c7e6c5dba6dd9da572947c44dd443a4f2ee7a00e626bd46a2e4bd95b649a548bc90da91d6230ffe3be36bbdeee0bcfbef72c809aec1d79ee0cf6944299f1d58cfe8f4e162e2827568a0c4462341bbe7dd342b2dcf955f76c138c403a2d4d814794e1427f6b9021d73ef21e22b8b8b3f82f302ec8872ab005b66f3b84a721f5ea45199634beb34b876f1a34347c494812d08d09164ae9907020c51e9a2d9d65fcc75229d24980080b7ff7f871b80b451d594385144321a2db860e10a5206bf1aff94c8462f2d75e0321d899c483b4420fb6c34c69cd80ba73d17ed934facd0f09190b9080489e225939589414e9ad275d56643ed7911eed1eb04c2bdab60a2c8d16efe11f88d8895186fda9500c7d687dd633238266ce8cf8698c36f0fd3a19fbd5032bbecfe01a2bbaa840d7028a70c07daacfabe18e74c7e54d1a2c865e7bed56254b0013615929e34a37a502cf5bed1cad077ea8a7e916a7bb3d6ade33e01a15a5e1ffbd3767223aa21c20df768b3112c2b34208300ac5a2622e7019a28bbaf37d50535e125e17f9bd5944cb06a571374c744ce741cb9518bf5405eb5625baf2de814147482622e628ba8027bede3d37644f2e9cde956df4b888d2aadf54 COUNT = 98 -K = ec314f0f40d9073620200598a9a29d17776425acc124316926ffb831e8b3c822 -C = 234d299e36311174fb05f4af816035c819d418a8c240252f0465602dfce90a0f21f2a3e84ae1e808acc6477abf9bfb893f33a726073f0eb89f609ebac5d0bb77c88213b8da15bbf3a54c4dc89702e046c041813694904b486494172e69d6b8b5dd54fb99661ddfcbb1a07b2a4130dc8e -P = d8d344f569161abc5291038c85863e4e079eca0d733ed7413ba53ff64b5ea751a4f4091cbd88f1ca35feea1b3b617542f038d104db97f11ecae748b31c672a094bd70e94d35ce28295e5a03b22af5effe15f8812ec09ee0b7ba8b0d7717603f16080b10946 +K = d9a6bbdc1578d1d521c30b88b78c98b26b81142f274e134e0270f399cea7d294 +C = 3fdd9da7b9ae037b2449b1106373c105eef216854f6e20ee6b4b96e6b3617fe75e82d68ccab0f780d623d8084ccce3cd6a52f3109ca3a7932340a81521c2b238664b16986797a101352fb95c4d1360a110c02f08da0676453ade8e7229110974be0ea340caddbcbbf94b98b7635888d2b9f206c3ad46fbd0b914a6a5e8cddd18822b9c63eb05351c4d079ecc6263a64ffac864a8fd71c591c032bcf17aea4cfb12eb5be95a8e7f941613497565508ca2759c1b1d60288523abb72e9675410ea0a59b054e01a89342b9c2f91ae4adcdcc10c8fec11d229c8369944e0475114a5ef8895bf2dbd617b2a526ef663382fba505a2b3f34cfc4bb0ad95fc19e5cf4cb265ad8c3f9e22561e559abd52df5335733f2d51728f271e0a0273abbc9baa1b56821bb92be9fa0b6e754368b8c1a25a47f448d3290dfcee1fc509e75fe63746ec22a7a35fd8cc35eee7b109824791f7df4a58f72c0d536ad58ca879b5bf55ade7c560a8247920269f95a9e228d876d96a1d5a8e3e833bedb70295c89d76a4ad672b50ccf39cdb35e13aa5de02962fb91e6cfd68c9fafd6b89657c6645f83bc0babf5870e1f011387aeb0d76bbfe09834d7c8a533b381e323836c2b954dcaab006206afa99ff65ce8e288390b91aed6536387fb9fb561cc0940b6a1991e4c3aa22aeee468d8cf2a83f8ea22b8f269aeb101930e4dd8caa2941e8089889f534c506889cc84a40c5a13e +P = 51120646e5c73232fb7af4581835e6ba5116bc06a634cb9d836f251667da42923aaecdb5a286fe727d63be6d4f2df1a1413903cb54a937445b2a6c00be50e32cc8fd54f443bcc05d4085006799c5cac3eb138f74c894aaaea5425a04d965a545c9860c652aba25712f55eece77158fbd274234f45914ef7f69c5f3daca686026bd275551cb5613bb47b984b21b8444fa5f69eb2d632444629a01dd5691ca62a46b265765262ddda25c5fab5fd20b24bd02fd3f2fd35fc520ccf58e4fd87f773959fa8baa078cb4ad4e104d05ea581069bfab83f7f86a0f8479047c6d9e84d56e919a6f51a9257cf63f2d5d2114d62fd52630d94fc4e617298e0a8007486f07b6d02060c09b30138de2e6d2f0de2ea67ba5f1f39bd7c9f609565ce3ba6674878f9bf87ecb84a0eb6418576d5b9500b8cc58379b1c6636bd3c90f4abba3e4806edfabf8beaf5b55ea219b5ff99afa07aeb553af35034d0987417e8b21ae3fa4fdbcc2664ea34432907c698a9c996566aedd6276a29eaabbb7f7536fd2228d5e8ad281e9e29811a8e2f2ff857feaa204fda1834fc2a9027b0ffc62de7260608a59dbc575896a1bcba955d1c5642b40972697ae9b6b1be34bb9fedaf1e92ede5ea50cd487f2f8802c4d622973e572a1e21411809ead84cd81607d53f39c9209d6aa56b292abb19a7f37376ab584dfcd94761fa3031c6d6db1a6a1b450d7ca9f4f3a0 COUNT = 99 -K = 1b92e161bbff2c7ef4d7b48767d1df9f08a8c2b7ea66cb8b77d38a30b433e485 -C = e389847cf04cf1aec3227c1f5622c41780035aa119632fb9cd5002012f87cd8015acdfddc82b10b1dc0b7f176acc196b85d6237e1d45ca77f72d157c01d74cc1f0e60c372d85e8876e22ecf89ea60480bc1150612d60004ea661f3960bf3faad6083b2772aec64bf1cfc5f7a1218832f -FAIL +K = 11fbf6f27fdb0c6617f7422138e3a1e7bb76cc5726186cfd7725e08a967069e6 +C = 87a53ea6409431b9415b8076a7b0fd3cfd1c55fcfc1f35ba9de57820d0d232b425f53ae19ef19ad9ab56b4d0ed82715284d304cd26c88ad37b058b830153f8b71ce99dcd7fc92b212ba1ee0830c809a91f9da156ba901c1c4d6c0d3370208356fa833be3e13c19dfa1d5d997b5b28a7ebe7562494f39a4b3b32d138f21f65cd5fbffb7f122dd7231fa758a1d352b28fd23bf2625b325020771eb2937a7061f3a0900d2e1b452fa7adcb4f89b15d5072dd1e8bd190dfb07efdc5886ec5689f12da12d7e5b86010cbdcca37562a73ecf66ad32bb92583a370018dd80de58560d10c6cb0946a414678875e550cda34cd2b0bbc728fea192dab0b560cd8593b019fb2b0bd9c9ed3e56912125fc304af190974e543abbc37d31cae9e72dc9629a62911f100ea83b4fb3a1914f1a8493fd5b3c01f2aa0b89df8b761c12032d5fee34ff4798107a1d8b0ad69afd2fc672cad304140cf576a158a26f1e51fe7ee66862b8496b4a2d59bdf735c3f02331940c62a21c2e0d9e410e9a0223ce611551e20d05f099f907b2c1a7dcba1058b303a96967a8d7df5c41d2718fe357225c392464df3926137d07d210fa614f44d400d8f7105c9a6f1240154bd9d2637964c6f83dbde93695d8a153ad9ffc04b0846ce58541104126fb0595b40dacfa8cf14c4aa5aadd58f0ad6be6afefc5fa30be35ac0792d1b22e51244d3a1ce3ca02b92069e0ad06eb4d7850ba180f +P = 9112e057b053a66e2f0903a6d8e0f02a72f5744c3a8b57f40cb68c118861be10e0935870e30428751907e478803dd8285e27a63f8d167dc8261ccb35019fddc1c58e446e66cc527f880a2df5319409b20c78e8b06d5c7bf75cd3d6e806baf82b3acf5cd20ccf77a40506287256456068520c83ab877aab5925f4c9c7fe916325b69ff6a97ac0bdf89668882bc1513713189a8a920125c00624e03b82da923f783df2ec7dc3092f4be63960f8cb62439071bae982785c0b9fe6b4344fec1711b1d7dbae4c48384d11faebbfdb1e07b3bbf2fb765cdd96c287f634da5d1350d7caa56a554ae92cd766a4f88a9e2ac49548f42c10bcbcc86848f0144e783b5e3869b457b2e4031a350d9734377c0504a55f68d3fb06dfee703d9a32273cbef467043ab95cf4eea9fb9672130faf6e69573a871291ff1bb17530ea4b018e3ecc2a0568317c9b5d2f859b8e594d19a5f11c1fb43758c3228c507b4e744b856990c6890b8b9af53a4ad81798f460f5590404a3192a36e72a5aa09fef2877bfdcdced8ada04930a5ca6b8a01bcf9ff112e15ea78ab97df533befff9521b0e0d4698119ed8d310feb6c46071d784978f157128a3b3224b455e1c3357f19d7f5db96332a1ca4f51199db1e49ea253459d80103ec8a15ab66596097524993321faf4d47525b4d154ac44254bd44ef11eb760f3989f5ffef9e2fb19aa859a8b11b2150ddb95 diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128.txt index 9021338cfd88..58c8b59ab7ca 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AE with AES-128 cipher function' information for SP800-38F -# Seed = 7649a19d7e4f3a1338b26e4fa54c830af5b5d91478b8666e1d25484fb56ab12e26d5815f092327dd77c9fd1f24cbd694fd7c7b218103f13418242d2e282f4ca5 -# Generated on Wed Dec 03 09:15:35 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AE with AES-128 cipher function' information for test-files +# Seed = 7c0f161159cc9e338308ddc59a655450a030832b3d4576c568d63725d57b020073aee9c77d9fec34eab358b83bf5aae4fb52803343bc03d472283edbebbcf75c +# Generated on Fri Apr 6 14:46:12 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = c829337542fb399c3fd6207b30e9c006 -P = a4 -C = 8999772907c799cfbc9d0453cb540d35 +K = 6decf10a1caf8e3b80c7a4be8c9c84e8 +P = 49 +C = 01a7d657fc4a5b216f261cca4d052c2b COUNT = 1 -K = 99de3730b5f782771564875763a7087d -P = 68 -C = 9f64c73ed5f27f6e859dbf59f7163545 +K = 7efb9b3964de316e7245c86186d98b5f +P = 3e +C = 116a4054c13b7feade9c22aa57b3caed COUNT = 2 -K = 2e584afa4bbc22b31f89653f0561af5a -P = a4 -C = 3713d3d494236ca035e22ec00746977d +K = 450634cc21c640d43b87522bd3bce777 +P = 0f +C = b70244c23cd916d0e586183894a1309f COUNT = 3 -K = 61ea57a014c50fa45409d74c75414d0c -P = 46 -C = a2423790c133d3e92ec3dfee0e312c9a +K = d060e5faa705b6c600ecfcd5252bbfba +P = 3d +C = 28ccc6da03cd79b78c7207946fcee402 COUNT = 4 -K = ee46c01e14850edf31247f45eaeda225 -P = aa -C = d883eea3c91b818ecca1859ce20d411f +K = b0186aea11ebb7d93e9560823052ffc2 +P = 13 +C = cd2d1313cac1579651300932242a1fe0 COUNT = 5 -K = 4a8e0311636fbe06ca28a5698be87607 -P = dd -C = 5598af0fce339453322fb425d7d5c98e +K = 87dd8c611f6e8d91f039936c12cfbcea +P = e3 +C = 0080e903e4a1ccf61fa69bff172701f5 COUNT = 6 -K = bfccf871fcdb7ffccaf8b2391843d649 -P = 64 -C = b1cbf2ab722be446ec2d9d504f8aa4c3 +K = 4cda2846dcdd126ed9cb4dd2e5c13264 +P = 88 +C = 62c2c7ca941cb7d67ea5569b7987561b COUNT = 7 -K = e1665ad5f647c5bf96c6a50373dd142c -P = a6 -C = f87b77e6ced885d484848a52d9cf4b62 +K = 3e652f7be21869ed84a2327f02c98307 +P = 8e +C = b955176617fa23b36c1a8e6ad6e84bb2 COUNT = 8 -K = e5a5a39eebf61dd6957d4a1d24ffc121 -P = 3f -C = f2cd145cf799c1fa285b06e0824c568e +K = 0fe5ce4e808cb11d89900b48cb8a2bbd +P = 41 +C = cae10232a8329f2bd8e3d40ab009999a COUNT = 9 -K = 2adff754538107078c5773f034a18631 -P = 49 -C = e3cdb75e9bd7a7b8c2d69663b85e2969 +K = 14d559e3ec707daaf5b079ae1cd3ddd2 +P = cc +C = 112124b9b2e0efc778332763fa2189a9 COUNT = 10 -K = c376409c1c8c9a0e7c0c4a24aa39c239 -P = b2 -C = c6f2e31bb908dd4ef4477df6bbcc3532 +K = f8530d31bfb11288de74a5981d04dc0e +P = 9a +C = 8954071a0020daf94df5c8e30cb24e62 COUNT = 11 -K = de90580c95c5a3f01166032ab2b327d8 -P = 78 -C = a9cb3b296a753a21cead5c2b97c281c3 +K = 83a6de5f1a1485b110d3b3e7b5627c3a +P = 36 +C = edc201d024590946ef2116c405a63244 COUNT = 12 -K = 3ec922fb22f4d24ff66ce8d25f0a444b -P = 23 -C = 7ac47c7a88ad8b8647609424962b44c7 +K = c501cc596b50d9928ad01354ed464995 +P = b9 +C = 9c9f408ec8fe22d5dfcf873cd6d2c461 COUNT = 13 -K = 51dba0899e9595f1786544bef03b944a -P = 63 -C = bfb9de50bd80ab0de005b6eeb9dc5c8d +K = e1e1293007e9198e042a727f1c9958b4 +P = cf +C = bee01785146d737fe2686d9c0f4c2f78 COUNT = 14 -K = b37848fe5d21b92c8739e00b2189cb92 -P = ff -C = 7ae69dd0a6a30f78538a91c13d535b78 +K = d87beb20d8de476c16c9bd6e7628e7ab +P = b4 +C = 2cf42cff8baa11212ddf7d0641a7bc76 COUNT = 15 -K = 7460b87ae01c18d9e2586e35ff7faaca -P = d7 -C = 3c0c7be4ecbb42c3768cd35a2b386df0 +K = 5aef9d4a7a02901a9462234c664308b3 +P = 3a +C = e5c926a19379750d503d8c13d868ed17 COUNT = 16 -K = cc68be03c27141adda8c32a55ad874bf -P = 4e -C = 7794ab730ca4cee266d69c1e92cbac5c +K = 37c602018a2adb8c191d79a5c91f0c33 +P = 1c +C = 577092de871795ded678524778924d93 COUNT = 17 -K = 5154e7586a78b768d0c2f0e659d5f3a9 -P = 1a -C = c5c5ad31f4a5dfb0711b0ef10177662e +K = a4cba1a29bec5a33438078bba0d3c7d2 +P = d4 +C = d63c580ffb28deefc03c1dc968a18078 COUNT = 18 -K = 4350c26dd43916c62aeccb711411a199 -P = e1 -C = 1b3f4c27f28a3141c17d6cccf4e64176 +K = 1e75f6026306745e2c4e307300814030 +P = a0 +C = 43add676f3572ba221e1e0e080311dab COUNT = 19 -K = d792b21c7e74acc4a50feeb47408f99a -P = 79 -C = 2b7ff6f3517f6fe14329d9ee2bd62eeb +K = 57097b32d3bab970bb96cc21895741b0 +P = a7 +C = f7c2c511f61837f87af2f60fe0435d58 COUNT = 20 -K = c4332ac6238a569f6edf79944861d8c5 -P = ed -C = d31a62ffa412ca660002342f002435ce +K = 9f4d6ab173469f67f47913236d3b6948 +P = 5e +C = 1c0025ed204fe48b93a0a0118df2ffab COUNT = 21 -K = be7d4e136b80fe1957d09202856b2e25 -P = 9b -C = 1ee7a3bb25625093c36835fca471880c +K = 6158ed22f140a1dca022854699a954fa +P = 02 +C = e273fb7bf69f0c5960572e7de2438b82 COUNT = 22 -K = 98f9dd71f923b6eaece3543bb49fa3ae -P = e1 -C = 03c4e41ecf517a376cd24650aa170701 +K = 2b681b129225f3531b525b3cd5a90143 +P = db +C = dce1713b0e32b884253aab7341dd5b53 COUNT = 23 -K = c30cfe83f10b95abcfa989c23888a085 -P = 83 -C = f233bca6ae93211b8cfeedcb8f7a0873 +K = 8afaa858e0caf9b512ad2df707bbd482 +P = 8b +C = cead7a8ab64adb19b398ec974843e175 COUNT = 24 -K = 32e8fb4f7790a97c360cf7147ef8c697 -P = 83 -C = c7518791cd423f4c3660fd1a64ce8d86 +K = cd9954fdad837445e8e42c44b001ffab +P = b3 +C = 610c8ab9f66eddbf40a7b5c500ab6ef3 COUNT = 25 -K = 743df09e3b75f4e642ed4ea17cd2ce2d -P = bc -C = 4565667699413b2d321c164a7b897d79 +K = 484661a0dc24b40457b28808b8f1dc04 +P = 2c +C = e05ff40975286c927e7d7b6ba46b62cd COUNT = 26 -K = 1990ce6c7857a97078267199324e52b1 -P = ec -C = 35872413cb61388dd125bc878cd22185 +K = 1f19c6a2d6eb6bc676581dc27f36e508 +P = f2 +C = f8954a5b5b7a80532c9156129d6993e8 COUNT = 27 -K = 6fae80553fab3f9bfaad0074ef28f71c -P = 6c -C = 51cf2fd411023218263a91eea279e248 +K = d00d62eff1bfb1351ac208a53fbf46f3 +P = 92 +C = 4b42edf6e83587152d5eed4f8b2c2e9d COUNT = 28 -K = 968562227217af483314fd7ca8b19ef0 -P = 25 -C = 09beeac0a222a003c741c2a1ae00adce +K = 05be6e00075bd30ddab38c943eb53c19 +P = 0e +C = c32ed7293f56bd34cec152bb1fce50a5 COUNT = 29 -K = 6fabc33acf515339856a45162b709312 -P = 66 -C = c44996358a69bb7c0d3b56b5167adb3e +K = d023e07a2a5ed3b9768181002afbc994 +P = dc +C = 4438c327f422bf050b16756ad441852a COUNT = 30 -K = 1700abc36cd46e52ab4b8db4bc3d1cdd -P = b6 -C = eac2ce6fe30d2b3516c345240746f1dc +K = 461b38570914d797577a8e35d3f6fa2d +P = 69 +C = 30f376535e63718a03a88a70a780a074 COUNT = 31 -K = dd8623483affa727e11a56dcf8e9e606 -P = 2f -C = f7f2cb209c91d7fa81252aa2206957e8 +K = 355d708c44180a833b3c437ef8a6cb58 +P = 18 +C = 361d8fcb03a50ebb3d1691a3d3ee9bc9 COUNT = 32 -K = 746d566f8e368180f976589d34710611 -P = 0b -C = 59b8861f7f2b983b8ee7a7a0c7fda0a6 +K = 653c0318cf7f0edd743d462edc4e06a6 +P = 34 +C = 16311d32ce5671f431687476b138d03b COUNT = 33 -K = 2861e12eb4e62b09121bd1f4a2c2d043 -P = a2 -C = c0ea9c3246d162b17c49ab9df31622a4 +K = 152d4c5a4066fb20990455683a117d56 +P = b1 +C = 67c4b54e04778450cff2e2f5b5d04162 COUNT = 34 -K = 385959a85527c96b96d59ff5fe6448ef -P = 2a -C = fcb82aa110343cd1ac05bd21619a8b24 +K = 4edc9122379e041c8231ccf4037966ad +P = 1b +C = 8e766680d3066bbe6d64513facb1052e COUNT = 35 -K = 692f04f751388edf92e0743bba8457f0 -P = b6 -C = fdd23b11c21cd53856c8732f8a3e5a42 +K = 422a2518251783aa71fc06308e0c058e +P = 20 +C = a048123e1be8fad99864646fb9411055 COUNT = 36 -K = cf2d5802be59d014a8264cc1bcd0edfb -P = e8 -C = ef2c09f5924b53dc82fd5467d5a24383 +K = 5f26ed278e3ca5a281b8944feb6fc8a2 +P = 80 +C = 1add077c541e1ed69005f87a9f73080a COUNT = 37 -K = 3c451be32bf040ddc9b20b6ded2a13c7 -P = f6 -C = 0915e347ed01e414b8bb62d12f99e539 +K = 023e78f3d092e160fe1d6427e94188d2 +P = 37 +C = 11008c34de1c54c66fff65c056c2ba83 COUNT = 38 -K = 8b8b8b321e44386f3d176fb5a9fa8f49 -P = 0e -C = 3af2e141907a7b7235a1ce762770b040 +K = 163e67d96e609f0d0f07c0f8b11a6185 +P = 91 +C = 986b804a15f24655dbb9dd2ee2d2b027 COUNT = 39 -K = 6a0fc6476c53ce71b5046e5f05bdac64 -P = c6 -C = 643b0b15fc353af53f036cb650295ce0 +K = b5db30462e3d377fde23402c8c7eb833 +P = f0 +C = 7811f62eddd4578cc7ccea0b606bb56a COUNT = 40 -K = ab66017f8d74be762aae98ad2ef16194 -P = ca -C = c61a635f6c4d72ffd274f19b306f5819 +K = f9988d4b497cbdba279157cf9b949144 +P = 2f +C = abb269d7436a846b909a8b13162d467a COUNT = 41 -K = 3f40c1b2d1b3d595f658c390e64b24f6 -P = 2d -C = 74f53a74f2eca04b2cf60636cc4cee06 +K = 1379e608732eb9bcfc8128736cfa3142 +P = ee +C = 3f24da4ce7cfc44a0bdc96d976ccbd78 COUNT = 42 -K = 0574093d6db219a240bbead811b15211 -P = 61 -C = fb6f36570ff5b5f4ce558b0e5421a044 +K = 42faae21e10fb2aa624e4a673ed8faa0 +P = 0c +C = a7023a6ba0da9f9b4256ff6d5a4134bc COUNT = 43 -K = 6a2c8472d1eeaeba3a5e54878bfc3f52 -P = a4 -C = 22bce8bc85c58b4f7e7de7e846c4f48e +K = d098830a627ab2f9b3dd3584ff5b36e9 +P = 49 +C = 0a78516dc38b22811bf6afaf0b25f351 COUNT = 44 -K = a381121be9630c3a44994f2aa1fe9a9b -P = 6d -C = 04064427c3206dbd7d6ea2d65398f8f5 +K = 3618d54c373d66e3bf1082a96a39dec2 +P = ce +C = 3c61588c35f9835f3e80b545ffe744b8 COUNT = 45 -K = ead012d07882f7366e7825e5f0c3f2d2 -P = 6e -C = 7c2890a5993b5249efc37a2946ce04a7 +K = d5457811263fb187fdf7e4aab03f310d +P = 1e +C = ea79eb8d5138ed5b84b23430bee5690e COUNT = 46 -K = de7b8dfcb37aa483282b977c34425186 -P = 58 -C = 9e3643b191c1a887352902002db3295b +K = 41ee51a5400eea5443f21b0a150b54fb +P = 5f +C = 684b523f031f3ae85903bb5ddf081b5f COUNT = 47 -K = ece340a0b6594dda373cb7807756b5d0 -P = bb -C = bc976c7eb009fa5653be5d07e12a7018 +K = 7c0b8232d0fa3159478694c81cb8f5a4 +P = 2d +C = 88467a2d780195628edb702516e825bb COUNT = 48 -K = e2e31cb5d6bc3a087580ef9bd39b990c -P = 56 -C = a923c2b2c4d9c9513f630e32d7de7957 +K = 52babf3a1fe008b7accdd6198f61a9a2 +P = a0 +C = ac327935b26a5618d78a81fccf2d95bb COUNT = 49 -K = 88a488b49f9d0094dab283d81b3ce6fb -P = c1 -C = ad32a5f30c08c9b2a4ec9853f98ffa81 +K = 3b5fe01b392900b1e52208b4bac188a6 +P = 1e +C = 3ba7b78956e431bad978114005b8674a COUNT = 50 -K = 51024eab8800cf22fc8366b3ccc52044 -P = cd -C = 65cd970042269bee9fc784e05db6bcfc +K = ad8825eec8973860ff64421c1edcc37f +P = b7 +C = 0f3d55447d0ceda3f952fdc3fa000164 COUNT = 51 -K = 00a045beac5458fc53bf97dd4ba34b19 -P = 06 -C = 6b3e8ef65d4f00f262cf05b2070ac47c +K = f3d080220fac109b2328a6df0a1906a1 +P = 43 +C = 908877dfd18d2e07e920028c8dc68b8f COUNT = 52 -K = b605e30301e6070bf612721c72ed0c70 -P = 74 -C = 94cc8a236a6a8b7adc5bf1c872bf983b +K = f4896dcffdbe39fabd7a3beb1afd0fa2 +P = 46 +C = 2900baae96f09cd08bf749e561dbe8d9 COUNT = 53 -K = 0851ef7067111fc17dc6f930d7460c30 -P = f0 -C = cae57865280ddb62e65a2df8ebfcc316 +K = e6e882e9fac4340741a57e7a7a6e51a3 +P = 18 +C = 0adc8a07e1d18687328b2a09019523ee COUNT = 54 -K = 3fbe765fc39115a9ea8150ea745f2504 -P = 96 -C = e2ab18888501e87e16f35c4a3e76aefa +K = 51a54ccad76400123858c0eec6638ba9 +P = 91 +C = d3d473d437aac154b873bccca9ce2507 COUNT = 55 -K = 50d3c4d1ab1110cc56a9649864781fc2 -P = 00 -C = 16c4d477b77319a23feb88c2ab80e0b6 +K = b29b63e323dacf95720e0f05cfc983e8 +P = 89 +C = 7058ca56db21e547bb1065bcef428276 COUNT = 56 -K = b5e6d0bf3fdd7c0f75cd2637e359a206 -P = c4 -C = f1c93ad8e8f670fd7fbbabcdb9bbb414 +K = 2339e83711a540c0e59c23b2c17328f0 +P = d0 +C = 83bb586ef95cc01ec260245f682b5a90 COUNT = 57 -K = a274c56716e772c6f2e2bbb5534f002c -P = ce -C = b139f803775a8e307e9857dd79438e65 +K = 3cff15a65df8a4626acbc321f0a5529d +P = d3 +C = f0facadc8da010a6607d87d065444b3a COUNT = 58 -K = 1ecbe248351e91572bedd8248e68ec41 -P = fc -C = 5dcedd729a31628d59fb4dcade49e908 +K = 2a7ff770f28ddb0a9a32b386d78e99b8 +P = 9e +C = c13e7cfd53fceba9d8409ffee6ee31db COUNT = 59 -K = 2fc3701dfc44b631af901a839843a663 -P = c9 -C = 1ac29ead637cb21da235ec7bc7475251 +K = 7fb262e0f1ce399bbbe791d7dad76b59 +P = 22 +C = 24abd7392ea6299fb127416f6a2d0f93 COUNT = 60 -K = 110250cd9266a2539ecf003593adaabc -P = d6 -C = cbdb56a1d297bc8c3512e620e118aa7a +K = c4f043a6606df07065ea3e93625d39c9 +P = fa +C = 1aa060e97f61ad7ba9f27171c6adae2b COUNT = 61 -K = 4e505aff11a7bd94297b7f7417b1b35d -P = 59 -C = ba853d477b9308a20c9d97640bcb0fad +K = 14cb2ac5ff3a170707367bd1dd3f21d5 +P = 1f +C = 7e24daec1120757908e38ebd31869a38 COUNT = 62 -K = 60cc1c6f1be2499b5ad134417ae74436 -P = 80 -C = 586b82d4d95776dafdb82d070cc76dd8 +K = 75aee479ce7a558d2c2cc9d4241873bc +P = 96 +C = 0662c6e2c20ae8d327f935f7136e041b COUNT = 63 -K = 94fc991168cf388e926027a80772161e -P = 89 -C = 0f220f80dddb1a3049c3883dd84a3070 +K = add11bacb177d05aff372916523d49ec +P = b4 +C = 9102b210e33e0e12d55fbe0d40805751 COUNT = 64 -K = e28fd06afe1b7cba2c15c26d9ed7f622 -P = 1d -C = 25c569d08f7bd1bd8fa1367fa98087d9 +K = df1e3940b7afdda4865a621d9ae20273 +P = 1a +C = 7ad2ad33fd6242b6ba47d4444cccde40 COUNT = 65 -K = b5e0b73eddef5a58450b8f72d3b24157 -P = 76 -C = 6d4f48af07375c6be94850e431e79afb +K = 19d32a881d24e559f645fb8425f66a09 +P = ab +C = 1e47d12dffcfd6702832ec66288c344d COUNT = 66 -K = 5d169f36fd895b25fba6589b07d54a5d -P = 87 -C = 61e6549ca574a09d6115769125345fa9 +K = eac98aa7817b12780b53fa5054081952 +P = 69 +C = e49a357aef382a94af0c715596b1ed14 COUNT = 67 -K = 6c308883aeb242541b3a1c27be735941 -P = a3 -C = 2adc8e95232daeda1a4424c0cdd4a4ca +K = d0e8639d536606a44e5ae1bd2f7073fa +P = 60 +C = 419ee8ca698c272d54723c1c88d6894b COUNT = 68 -K = eafd0b71b85c657247163048d96af24d -P = 61 -C = c514abea0b62d27091a8f8e5111e8ed3 +K = f661e91dc8c51520f10b359dd39991d8 +P = 44 +C = 94f1d5d91bdb91d1db3bfa5c5a235c00 COUNT = 69 -K = 246f5b769221512b07188a9120d65936 -P = 3c -C = eab2eeea5695e0bdc01d9357e688071f +K = 24d82ad1734ef92f8a8837b21f5a0b62 +P = d2 +C = 5a7bcd52a5501ed704456f40f5e584c1 COUNT = 70 -K = 16d0c50291804820561eae01d83fcf47 -P = e4 -C = 895062a19b043a845eede892bd8eb334 +K = a18b12b91e5aa458eacea2a48df9b0ee +P = f2 +C = 900274af9f8e54abb9f231e3de13f866 COUNT = 71 -K = 902c59508c9cce8afabdd4a6bf00b2d4 -P = 6e -C = acd066faecd5b65a9d3bc5bbf7a09226 +K = f6d319f7cfba156a4013038ab7227ea1 +P = b6 +C = 3b68298db7bf0ebb9aef59636eaf5be0 COUNT = 72 -K = 4f8866678a7bbd7b871d69c3eb55a642 -P = 7e -C = d52ae473dd154eebb85136d7a3cfbbb4 +K = 1990207d0f5e46c128881b55d47d869b +P = 88 +C = 27618aa4b25e325533285a2f34983566 COUNT = 73 -K = 097c3bb9d44cf1e42c12d0766bdd3a7c -P = 77 -C = 72a218dbb81e5d6c38d53fa0b39dfc60 +K = 2ccc767ad8ad294032bfd948a089a775 +P = 7b +C = fc0cdbf4a84717e5ef77b88ebd17a2ee COUNT = 74 -K = cc9cef251f655936ed02463ec8bde315 -P = 54 -C = e4fd796e6796cfbe44d4d7bd7e28a1bd +K = 458cdc63af06b6f36f0490856bd697ba +P = 09 +C = 054ead08eb69cb969d049e83edced70d COUNT = 75 -K = 3e8a9ea0a1e7283ba3069de30d3f76af -P = 90 -C = 080a51afd659ca2c51648fd250233eb8 +K = 0bb47d7154549c8dd2c235e12091ad5b +P = a7 +C = d98a76527dc8462515dde5bf731cd51e COUNT = 76 -K = e9c3bac67299648bae39407a1a7d7d40 -P = 3e -C = 9e20415ef44ff7087ba4ea46f4f1faa9 +K = 3796d9712ee39472d6f80930e6051fc4 +P = 53 +C = fcc05f5905c67df822df365535ada202 COUNT = 77 -K = 9ea042714c372a5a9edba8c936400f13 -P = 7a -C = 4c241bf85939f64a9b3f916b8cef940a +K = 3f3dc2f657c77cb67943b60a384d271c +P = 02 +C = 1df5aa85ec4c3659634fa21c823ae5d2 COUNT = 78 -K = 34de15cb0a83ead697ded1230d3e2770 -P = 7a -C = 0d2a41f6e46473f7e8b1ae5ac0bead0c +K = 8e08247a1b9582b2fb9cf23a7c28ab26 +P = 3e +C = 5623c9ffcb32429d28bd2aff332d19ec COUNT = 79 -K = 57d18343ccf84275bba15932e7a3c946 -P = b2 -C = bd535227f9ec98dc92f15bcafeafe0f8 +K = 639b2d83c82ebf828a9c36214376affa +P = 4c +C = 3b622ad4cfee883b390b14a121d687db COUNT = 80 -K = 0dd8c3b0580c0e67acf904db593a738d -P = 76 -C = c2884ac4a9aa0d3390f5331bf3800b4b +K = d3789865cfec6f6772156e0276764a7f +P = a8 +C = 298b7784b1151b1a466df0d98d2c3c3f COUNT = 81 -K = 67bacd5e06f0c51f651d3d5c390ff203 -P = 95 -C = b38e9fe484b2922f7fd5fb8b1b85d203 +K = 28074896c262c2885d5f6e9c10255179 +P = 93 +C = 2005547a47190275aedb2059170f5452 COUNT = 82 -K = 37eae4ff6f9e3d34fcdeb5805ec85142 -P = 27 -C = faa51bc5a76e25d1d57c797dfb801c25 +K = 875220ea324550285b5eae0fe1a3ab1b +P = c8 +C = 300fba87abcd508b25b8d57bd92585c1 COUNT = 83 -K = d13370d76b528bbb713f23f2b17b7262 -P = 48 -C = 7f638e1e4b1cee1b03e3b81d28aa2e62 +K = 5c0a53be7548ef78ec2e9f3aecf65e99 +P = 6b +C = 1124110728351ec55a5f0afdb7206f48 COUNT = 84 -K = 4a226651eb8fc1655be28e584ed1b79d -P = 16 -C = fb11d7a4b7ca6b7d2b1fcf3fd06c0108 +K = 9eae83187184175807a2e81b032c477c +P = 22 +C = 79a8edcd2002b8adc2e838800be3b942 COUNT = 85 -K = ac3627eb85ee7382294669eb0be9bd94 -P = f5 -C = 454589810ade125c2842ce4f496c88ee +K = 6c56767d09c44b9b0a36415a21fa6240 +P = ae +C = 7526dc5fbee115783bd12b81ee3ab755 COUNT = 86 -K = 5724a843b412b5a27ca771db2c3c4a16 -P = 0a -C = b677af5739410c904043630d64e81629 +K = fd726bdcc7cb10a47d99537430902ec5 +P = 5a +C = 501748faddb4596e1bc7b1493393d800 COUNT = 87 -K = 5214aafc5039d5b8de36b12c5e09878a -P = 20 -C = 476a0ddc78dc069106e5ce0d85a3ffde +K = fc163c021e2ab54ada7a271f91f10188 +P = 67 +C = 5a590a8353db956e0afedfbdb912f004 COUNT = 88 -K = 1e7c943d4dfd6f207c7fb04e7a34fed4 -P = ee -C = 79fa98903b0050a94d7043a123db9813 +K = a8a5bdc86ff081aa020e87af2e1c05c5 +P = 4b +C = 11c6faeb9bcf174df1a46634c5dae8d5 COUNT = 89 -K = a6948a9275c229a57fc7a9bb6dd65fc5 -P = 52 -C = 58f4b17114053e335d66cb44ad8c836d +K = ccc6e506d731223e1da1cf77df969579 +P = fc +C = 0480a2c1ac5ee125224094daa57fda49 COUNT = 90 -K = 878fb429eb42373c27a08f75697ca1db -P = 69 -C = 30c58722960098d5c8fe7b1a1a32049f +K = 2a9ca8b85ece3a01fa2af4dd2fa33675 +P = 1d +C = 6d5376be76e2a962f86a3b1217e646b2 COUNT = 91 -K = 2d659efad20e931162a3c4ad0122b301 -P = 72 -C = b9aa794dd6e80ff4a221a7453049692a +K = 8389d038b3e4e9c7634797e99bac5f0f +P = 9d +C = c32a3025db7e21eed5ad1fe45ac1ba39 COUNT = 92 -K = acbfe29f3a439ae7626110564ecedabf -P = 4f -C = 72e15726173ef9abe7375ae43de61840 +K = 587eff904217e763aeae1c428cf59afb +P = 7e +C = ef03a4b893308fe909f14bea1fb2fc55 COUNT = 93 -K = af22263330525e52f235e65b9fe144b5 -P = 21 -C = a6276e117cebc682ae3798a251741d84 +K = 951d0e1564730d59af720b236174209e +P = 18 +C = 0e65a730c90f22f16314676b50e90e30 COUNT = 94 -K = 78ccc601ad99613999fdb9f57df9ae88 -P = ce -C = e968e63e9ddc51aed9a9d8cbb50a021b +K = 534675af8cd3e97431a10527f5da24ee +P = f4 +C = 00360bad4ff49e5b696d7284b49c2f03 COUNT = 95 -K = 059d1051ecc0ca9fad9af5635cd00431 -P = 17 -C = 85d2f6ce16eea7c34c6ba5ee17723f2f +K = 32eb9bfa1358c8991ab3eb5468630776 +P = 15 +C = 3c0d310603fde69adb44335963b657b3 COUNT = 96 -K = e99d3f8c7d845622c85e1f568da18c88 -P = 20 -C = ec79c7e137dffa489a3c486c71f98b24 +K = f8638d47ec8197dea63277fbebe306e2 +P = 5a +C = d2219a6c2658099cf890a8dd01299295 COUNT = 97 -K = a78e54772260ab0dcfde85c7f27ea291 -P = 8f -C = df812ff8b89318ec8d57ed97f5682b03 +K = d489623f728595a963f93b8d67671197 +P = e1 +C = 0eb5c9653efedc2f1bbd87ce6f3590b0 COUNT = 98 -K = 6c86f08ffe62a14a4e0499b0cde5f5b7 -P = cd -C = ef4d8a3d2828760ac3393bd8cf6f005e +K = 1f52cb17761b0b461b1d5292448bfa44 +P = e2 +C = 6532d1e82f4362586ab7724cd5cbb795 COUNT = 99 -K = 42c0094d7c5a61d80d42130ec3acfb73 -P = 4d -C = 590bf83cfbbdcd04d25e6d6bf71d0c33 +K = 1314388c802bcd309d67d924d36f8fa4 +P = 13 +C = c5db0b1413af5dd375bb92693e265e70 -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = 6a245260e4fb9cecfda70efe8fa60279 -P = 6a27dcbefdc1404516 -C = 36f20123efda2830593e096d7dd3a32877bfb6f45b8b5ada +K = a8e06da625a65b25cf5030826830b661 +P = 43acff293120dd5d +C = b6f967616dd8d772e9fea295a456dba7 COUNT = 1 -K = 52e58ff006c0f99f2cf487ec96885404 -P = 9c4ec0e94615d176b5 -C = bccbe3eebb473f009c0bcf0d700cf27b230d1677bd474a0f +K = 45c770fc267175072d70a38269c54685 +P = cc5fb15a17795c34 +C = 78ffa3f03b65c55b812f355730af71ac COUNT = 2 -K = 30966dcadaa96242007f50626b6f6d1c -P = 9026ec82c3cf8a7655 -C = 92896ece5da011d60f826ac9a61d5c8b61a2baa3509fdeb1 +K = c06d2c3d30444af3a2553e8e7b3a4f9f +P = 0e117433de4d6989 +C = f742cfa5233c5a439682d628f213f540 COUNT = 3 -K = b92a35529d04594eeadbc2cb19787f55 -P = 6d4249cb338254ad43 -C = 7481c2b606bab1172c19a150cff9c55a2625368616c782d4 +K = 9d6643ee1a9d4f59c154783b8c5f22a4 +P = 60f35f59883b27ee +C = a7f02b09bae710e7836c19a2f2781a0a COUNT = 4 -K = 1ed076d6359f068e8947714fb75b93ad -P = 26345f06c2d1423bd6 -C = f4de2ada02abc2d8c220e86d5a683c330475b971f2494eed +K = 00d74993fd2ecafdddfd1c053424de56 +P = 338a1b396fff1d96 +C = 21b8d53c643c547042a7ebc316492a07 COUNT = 5 -K = 4dd2ddb9c6d22445e7b1c9777f1a0dd9 -P = 59c326317f6ca24477 -C = c9ade88d135ea7e9e8eae9423f8e5ba829a7dd4dafab24cb +K = 663ee3d40628059fe01a9766d5c1c31f +P = 1c6ccd67438f20de +C = c2717ed6e51bb4314388cd26464f4d18 COUNT = 6 -K = e3126660629f061da406bdaebaf5b0b8 -P = f7ebb781e75e220285 -C = a68cc7f585970843c8814388ec27944670fae15a2386537e +K = 54bb9d418bd77aec04bf1a6c306b174d +P = 22fbeec2b47e7a55 +C = 88d1e89367f8991b169057f9f9eb80e9 COUNT = 7 -K = 88d47c110ea469a29f0b5f97188311dd -P = c993ff17e8a97761b9 -C = d92baa694acab84eaad88d390963ba161fa3ed345d5083a9 +K = 06efe92f9d436f199ada375b2ea5bc24 +P = c5c0f130a8d44908 +C = 4fa221cc884b881a31c673d472cd1141 COUNT = 8 -K = cd931d7df5cedc5b126138cf0dad93e4 -P = 5d3e9f84383ab9824e -C = fc1108475afcd352e60a61f7c15e220f7e838b5b9facc146 +K = 37805ca328aa2f86897e3b703591f8a6 +P = 5a00bac3be68e0ca +C = d7f34ab195e3dd758a02f2fcfde24d53 COUNT = 9 -K = f3ea4deb2efd66ef92d36e7363aa8d39 -P = 82a85b35ad2bc1726b -C = d4dfdf8d2f6f8cc1657639e3bfa8a446dd443641c8dd9b04 +K = 5935f0bff6e5d5ca00842fdefadc85c1 +P = 956e8632989bad68 +C = 688003809d13cfefd8868bb812f6c981 COUNT = 10 -K = a489a504eea9c38fc8ad1b37cf5368c8 -P = 25e3636e91eb6b8dfe -C = 351fff543944e4d7085bb1b6fd54fde73ed56b412b7ffa2f +K = 770cd6f643b8841b26faf13b0d7a4d2d +P = 04e529ffcba388da +C = 373a8fe17709376b3723822590f2d776 COUNT = 11 -K = 70dbe4777dfbe849a973a47e4482d8b0 -P = e058c9e69172f1810d -C = 7dd4a6c6487cd4c8912ef8611eb88cee5536b18995b73efc +K = 620b3856d0bf061fe8f153cc366edd0c +P = dc512fe65480549c +C = b48b2d285779089b6bf3a3cd8f17418f COUNT = 12 -K = d8f06651783981ba5cfe7d653fad8e3b -P = 7d7692ffd73169ba7f -C = 3741449c85de93773fb71c967d8d8d784cf7c6255d3ee54a +K = 52e7fb96c48c4d0810eec0b9bea1887e +P = c6da7f3e8aeb4dd8 +C = 2a53cdc1dda24227034bd22095d98d23 COUNT = 13 -K = 8a5af1a10c218dce0c2fb443125a8a19 -P = d74f5ee8062a781814 -C = 73f61519672b9c9961f15135252a01ccd19126a5968c2975 +K = 7a496ba17ac8b42a71378d41cbf3f92d +P = 5fb3e836dd9cb8a5 +C = 0055a2b2d6b3656b8f6ecfbfb534ebb8 COUNT = 14 -K = fef2cdd3e7c49ee79e4d453502ff5b0d -P = 2110f66f110e9ae117 -C = f91a517b3168a1f7580c6521c50654be01d7ffcd31963645 +K = c1db0343da1fd656fbb7eee8d1f1fe72 +P = cd4707a49792c1f8 +C = 1d69f09b6f018350aa0fd7fa88362294 COUNT = 15 -K = dfafea8be70d1cc993b972668cc0f971 -P = 40829242a3bc7245d6 -C = 68d4e7e2b86c29e81f62d69db8bf5a17ddccbcd5fc32e481 +K = 07dc85ce35d5bdf33ff87f801935cce2 +P = 75d400c5872d98a0 +C = 34c0cc83b9f23187fae8cdf6d9f7e7b1 COUNT = 16 -K = e56e027f10d9c83e5b80a5dc4aab611c -P = 92894712577dd08838 -C = 4ee1fbfac67968204d40cbf0dd190080dd024e964e6cbcb0 +K = 280563ebe815191cbcc9da17647edf83 +P = 4c418ac34e9cdf89 +C = 95a7a4089588df384bb06c39155d0294 COUNT = 17 -K = c8123baf1d97672a147c14d2b08669fd -P = 91e23151cda9f938d0 -C = 72ca12a9a7d63556d80cb8561691cdcb1dc8151a9d993b56 +K = 3321a32dec0c6f44762e054e9ef2544b +P = f42870b302ceee99 +C = d670f5d8843d4c293665e6c025bda5e2 COUNT = 18 -K = 82dd27e87abfc7d8ee68891b4edd5551 -P = 82ceb452549a8a0ff3 -C = 2c86e8af85ace311865c013140442035543d5a8f2f73a937 +K = f497b49df32348ad56ca9b1b9242ee85 +P = fe61d3b1b88abf61 +C = e876e58d2cdce48ac8ec3c61f925d28e COUNT = 19 -K = e69a0d0dc64e2bf67a8927fd13c41f54 -P = 7e17eed02069325d8d -C = 6f3353436648160f95ec47b5817f7104822e2ae51a5d721a +K = fc35ca2b8a2de74c2a971b5e0b01fcfd +P = cb4d37ee822c3542 +C = 323682016e961cdc5cfc857eccf04fe2 COUNT = 20 -K = 7522153dd1f737cb5304c74f25e1661e -P = 0a828f0a286da8d83b -C = bd23aabd453547e81390bc6c72f680d5d3431600c702bb8f +K = 1bfafa05586302481c587bd234b56908 +P = 2a3487e3eb2f9e74 +C = 93dd3380a7b99b0f9222bc36a85d2b18 COUNT = 21 -K = 1ccd2b8b476d5c2e0c55ed0aaba1685d -P = 09bcfd218c3e25d8a8 -C = f6882ff324f19d91c09e07582c8615220b0ee058d34c1c61 +K = 333c236d47fd2d0f6f9860e76ba8a465 +P = ce644babc2c4e62f +C = cfbd28eb8873cfdc5675af025b21522c COUNT = 22 -K = 36efac572c2c6ab68c024892bf72f1c3 -P = 5c7b012adf1b1b806d -C = 255db8e19c96625481e047c6233911dc1cdaa0d09b01741c +K = 016dc21fa5180768fb1803cdb0e6b164 +P = 67031550fe45d419 +C = e3dbb153c8e870cfe0e2b91540e7332a COUNT = 23 -K = 0297f8844539d45a950b6a96e6b64a62 -P = e1e1fabf23cedb5a40 -C = 4681218104016bffaf6c3bf7d8324112aa85a784ec9b696e +K = 38c5fa176a9737bd4c31b05f65ea0981 +P = 33d3e2f41c7162a2 +C = 954f403999f15cfa48eebd952d51f6af COUNT = 24 -K = 3e3437edf7d1d11df4b71200a2c92268 -P = 839ff0d1e2fd51e545 -C = c367e6d9da3f9f744416e7a95eb92e938c8579d572a2d236 +K = fc57860a530c2fdfe2a590098fcba575 +P = d26b45d0bb2dc611 +C = 238552dfdc9e6a44181e43593023650d COUNT = 25 -K = fc97be90b67a9e12379262a3b745f009 -P = 0b5f802594352f5203 -C = ad79bc5eec9f8bb5aac681cc756a0edf604d049da8669cbc +K = e5cf56423cb84004f1d312893f02d614 +P = 8985b2001ede6706 +C = e929127ebc46c1d8dff17052f11f035b COUNT = 26 -K = ede86d69734c9f4012eecc3f9a60f81a -P = bb30055a8b77b2d5be -C = 3aca8a4d8ffd52fd5a45884654cb90cd78b040ee069c7d07 +K = 124a907fdd8d98709db656cb1894bc2d +P = 7225cf28ebf80624 +C = afa702f3116c55a4c4ae73b1aed80943 COUNT = 27 -K = f0a4b8ed39c7c38bdc9d08794914d36b -P = db0dddd8eda10d2fce -C = 0852d106f4ac72be00276895f25ea3df7a18102ccc0e5474 +K = 9ed0fa586f6b369eb35da85eeffd3cc3 +P = 2b741d3a046e79b6 +C = 011d3ec9024dc067d8ec4554687bd745 COUNT = 28 -K = dc1238fd0af8d496a328f2c0b3cfdb39 -P = 761f2100fb81889a48 -C = 13a356951798a00da35b8e928ee8bd0da0321bac48141734 +K = 41bca41fb0b8f41d5bc9c4680a2f64ef +P = 8dbdf93e49dc0506 +C = 5aee1b14ff36ca9c7dff6f1c505d2438 COUNT = 29 -K = 361bccd80665b2dfe057c057bd0ad7ab -P = 6825951ae121544562 -C = 99ab7accbde4bc252e6eff7b21a25d5f578c5ff915544f65 +K = 56851608ee63342f2978ac6aae26bab1 +P = 6631d366b5345a46 +C = 90fd3117b8461dad76d277102b7e6596 COUNT = 30 -K = 1d88a3a4fc4ff2e3e48858a9d237a09f -P = d0e1551de5aeac3613 -C = 4f7d0a1b84285c5538469dba4900ebb7e06ae5bd3271a4af +K = c11bb4082167a2cda860c87f1a632505 +P = 50ab044bb4de942b +C = 9c5ecc63e489d5e5023b1101346c98eb COUNT = 31 -K = 952920f9a46be3f79a6e396b5b919a6e -P = e764a5acf132951a09 -C = a2d6a07162b277574b9d997a2ce78cc24c6e5b85cbba6adf +K = 5a32ba634550456366872aceb75ab987 +P = 591e04c0fb5e0f85 +C = a506c4e6a196ef3741d29959926518a2 COUNT = 32 -K = efe712f3840dd1254840512c5dabd85b -P = 07df0f83d0bb62a2df -C = 89d84f326c295d71111807549e94b2028b059bfa22cefdc4 +K = c6299c2872c0870b48a3457dfd03cd5e +P = ac6ba654441746aa +C = 973769b587e7406870c07dd7405fbb54 COUNT = 33 -K = e9534872e694a8c8f3ddd817f8301d48 -P = 7d42535cc83fc48cf7 -C = 5e85e203f0aab81fa0bb36133efea1b506d1bbd919fe89ef +K = 9e685162b60c432311b2aacdac2f487e +P = 38bd545e03ec6167 +C = 200bfb244f4a04ad7b74bf98c78525c1 COUNT = 34 -K = 3394178473527bf4c316e5760ea06f57 -P = a8aa8f861b8c0a47bd -C = c22099f1c071bb55cf8d0c0f3be47bad340175ab661bc3f6 +K = 06e124a643a94c46a91446d79e8610b2 +P = 33c3189d03d1ed1a +C = b82ae3da84695a2cfad40704027315e0 COUNT = 35 -K = 91fc086c3f0af09162036a6c4121755f -P = 6dcf36636d111c8250 -C = f5853852dbeec19173755634869040ac517abb01b9c2a446 +K = 6a27e63e50dd338090e17fad6a33d33b +P = 7c944ba57b39c9f5 +C = e7c8247d79127f746ab0cf4761b6c991 COUNT = 36 -K = 646cb6874774cfd1664092c9033ecc42 -P = 3787f7697d92872566 -C = a202c53e466cc28f9e201a07bfa1ad4bdc2ea743827d3f25 +K = ce8eab2253be5ff06b9cfc247376e432 +P = eb9f733472edf097 +C = 630f19a1dae6a991bae7b968675003a7 COUNT = 37 -K = 1d8d8b8ec6abdac353180f6e6d824c67 -P = adf5a7cb39edfb75a2 -C = 305480a4946258887061ae6f8b8ad755d093cb6d08b00edb +K = 729e2e99440e194a1b096d4f733f290b +P = afe63f195ab7b5f3 +C = b79845a8d0a9649597b58ece25e3fd9f COUNT = 38 -K = b6656dcf8f57c51e9c1f01614e13b731 -P = ccc4d4d7909ca890f0 -C = cc64bce24abb7f5f662400107ac87ff0380c500b799f85d2 +K = 6c155891361381ddbf3c1f331ba54b02 +P = 441d38c0af9f710e +C = deab714de07092d4ed6d097c8a05a4de COUNT = 39 -K = 678849d5c22557a1b6ffb434dcbcf89a -P = 4b6ef75e4a7ca59c0e -C = 2e62ed891ad09a289a95491028214866da142ae43075a39a +K = bee0fa6cfe5df87e4c476982714d11b0 +P = 6b9376e3b0c7403b +C = e3f1659e1fecd4605acfe11531afea0a COUNT = 40 -K = cdfcb601d06c0db300481f811f87f7ec -P = 1b6b584b4fb0bc29ba -C = cf92e32a5636ae30751bde44dbe8fd31d819c21c5906c5ea +K = fcff3b85476c4eb48b4ed0d354e27233 +P = be5b9cb1ad2c9309 +C = 4e098a35a7492e128a51f8de046df21f COUNT = 41 -K = 02d409612c6ebb0646097ac466cf26d2 -P = ed70b3e8a481a953c0 -C = ace1af9812d8b68eee1703721fa6e16ccfbb08a5c224953c +K = 6f349d42ae17ab2d0494e8678d67dd1c +P = 7e441c3e3ba4bca3 +C = e949e6da49c54229a9182212ef8c5392 COUNT = 42 -K = f459184ed2180191b1fbb43999dad803 -P = d90b5629c020b56016 -C = 56fc386d55a4565a0c29f44715fd8d29438c705ef3c8a97a +K = d98fda21abb36f1ed6ee27022a8b433a +P = 0d5f4cbf9d99894a +C = 3556bbc6bbc8779cf459be8d7fdd5346 COUNT = 43 -K = 603fe70d4a47bcd18e831bb3254bc401 -P = c55a4be26efdbfe14d -C = 2e1084e813824e949d99b5bd97122cf345fcbbedae30f678 +K = 5df72057fb77a038ec11fbbc4fb05df6 +P = bb688569e24f376b +C = 2b7331803e137c923753e07c7605d31c COUNT = 44 -K = 2350c4f2e29ae0cabf39d91b177b57b1 -P = 78699ab4158eef24d8 -C = a42258e58e412b76a51931bbd37d581d7d4e5dd0374cb4a3 +K = fb80107ffcb6d317500caaaf1bbe1636 +P = 2fb712418f4a1ff0 +C = ddcffcf25ccfce1cd224050d630cc1c5 COUNT = 45 -K = 3655cb72d365bf462cd391cbf1ce9dda -P = 00d6f08a5ec1f40ea0 -C = 618d8d3ea05b927e3ba909c2bfd0be7f46baf48dc7c388bc +K = 02402df0674f33268fe8f3ae102aed4f +P = d5ee7a599c679ca1 +C = 5e93d3716dc2cdc706d9c8e1acf0252a COUNT = 46 -K = a8f4dc3453104dcf3c8c9864001d9f28 -P = 0029bd1d1d18d21026 -C = 896643a2d6094a9d1600c8c866855292621243a8bfa83ebf +K = dc56dc25a0601aa042d18145d3bc4ca5 +P = 6668d980afbb2564 +C = 4d84a238b637c225190239d4691f98f9 COUNT = 47 -K = 46b83c9eefc25224086b4e42fbb6f984 -P = 7b48f5b4a979d91d45 -C = 3259c0f650a03ce86a413b2f4294c4c6199de53bbc52e057 +K = d4854f6f6542014cd3d3fee4ea24a073 +P = 1839097798b2ff22 +C = 1c9e56ae164d20fd063751d9c24aa106 COUNT = 48 -K = 8d6efaed37f004bfe79b2e9b30194cd5 -P = 6e18761d0321db3c97 -C = 6134783c15caf0015a901b7ac1e609e33761dbee62e7abd4 +K = 911dad740e4d3d840febf748424ea4c3 +P = 43f4d1dc2794af4d +C = 63d4852df9e42a4d302738355fa375cc COUNT = 49 -K = 388de0c0cae45b33b7577a55dbf78c70 -P = a23bc2001ddddf34b5 -C = 9198f4cb9ba3af7a3d96b5b732ad6299c6dcd61013a6e114 +K = 68d164c166c55545fe55ffa7c01ff30d +P = b77ab5812cd6f22f +C = a1112990021f7ae0f7688c04ea268a81 COUNT = 50 -K = 6a413411988fb4c145a8a09d28105732 -P = 0d1f3e56d49efc5cfb -C = b4e86f6e05f69a6559c9e59ce61a3f9abd42f8f7aa607142 +K = c0756b6749171ca7ff8934bbabb562c9 +P = f92c2023f8cf7cfd +C = a4b5271c2faab0fd7f0fd47d2e5a85fa COUNT = 51 -K = 97636a7b8c5fd2af1c3fd2f37240aafd -P = 41d8bc04745314cb10 -C = 9ba2091db74a3efb60e6035ae03f3644ced3e682d96b2348 +K = 75dc21dbc7561bd6b88e39c0c4c13b2b +P = 0762e46321bbcec1 +C = fbffaa2a0307401d2d5f4123ecceebcf COUNT = 52 -K = df8c25781c88fcfe4fcf9d217e410413 -P = 74fa93da3da7b96ffd -C = 943652fb15c661bc883e5e9b68eb55f012fdf1ddd7d79796 +K = 0a45ff4976a8098e8779530e4f2bc805 +P = 203c4371b3a4f88d +C = 39075095c221dce268b6fbc906b9481f COUNT = 53 -K = 934782f6cad15c7d634ac13f2dba10cb -P = 10d071e7a6b59f4e37 -C = 68f5c4dbe4a4e9d90e1fc8621af705a0167ac4599af512d6 +K = 469094c5a49671e3d6a47d66f6bbf8e0 +P = 030060ebd9d99d12 +C = f12e603a7121eb1ef851e7c40abcc400 COUNT = 54 -K = d7982ec6315d30e9db4c2e71419e75c2 -P = eef30196b98e0b7046 -C = d7169e7f868b6055a50bd7b7739cf0d92240980d0414b0de +K = e7d567669f402f5fd328094aaca510c7 +P = 4411131956aa55cc +C = b0a602d311315d4bba45ccf53e9804ca COUNT = 55 -K = a1c4079ef2c0378c06d2203225c88add -P = 97f7bd3fb8c08444a0 -C = 4b1ac7ce976541542dd9a896bce79c1b89fb9fd030780ffe +K = 7d37c183de78c972ec96f6b9ef7c3f18 +P = 96d81bcba47e145a +C = 4ebca3197f70012537679d90ced22352 COUNT = 56 -K = 100fd6a000c7d192c103887eedf79100 -P = 742f498283d5d69247 -C = 498ebcd22b6ea733002cbd02f2ad41f1c5067935d21b409c +K = 130794706e2745e4efd19b0d86879a58 +P = 1933a07b6e2bea87 +C = f879c0ea308a13a1ea30edd638b7a875 COUNT = 57 -K = f8aeaa11a3b7d8507f12dcd65341796a -P = 56f846012624a46958 -C = 7b054849135b525e461a6312345d13b5ce53c5bbc3003954 +K = cc91c62aabc6c5c7d5070d9dc28b76cb +P = ba81cca7b470b131 +C = 90594df4640a1584a819d7ac91803359 COUNT = 58 -K = 8a773fd22868ce165b64b7ce57b1b13c -P = 77c3b7948199e5c7fc -C = 94b1bbc38e30f5ad13b50a4cdae15789a4179f577e55f8da +K = 5eee7f0f554dc2cfbcd9c365609bf191 +P = b1e64832a2cf1bc0 +C = 6056fb31d3d112515b198721cd5bfdb0 COUNT = 59 -K = 34f9a69f03f12c51a2dd67f53f9b305e -P = bf1e536560b1cff799 -C = e5b683df52635777987a5ae4272cac13fa989c1476eb6320 +K = 76d2f7018a3cbe2fd1b0671d52e1510f +P = f0a6868447c5beef +C = fdc940947d46e37b2096807baaa6515e COUNT = 60 -K = d8425e3061a614d9789d520c7977b3d5 -P = 5deca307b1bc8c9ce8 -C = a6285209ab269c74481a621c35c1db7175fa81648ef9132d +K = 84b1971b0dd929bef3955b5e603204e2 +P = 41ce953c04f96617 +C = 7e489a2c367c4d507c1ee2e873befbae COUNT = 61 -K = afb36236b7584d7529182eaa366b2572 -P = bbce30b3c7b3e3a14f -C = 03774a18c88c606efff8649a50b51f54e92022d59c9f1905 +K = c3c7fcb958cc204e43da13ddcb532175 +P = 98ddf8fb81955b73 +C = dbb5dafdf0693e4f1bb8340970a5e47b COUNT = 62 -K = 11b0cdc8b12089a24a3f254676a6806c -P = c10a21ab24234e039d -C = 8053578d5d140a80c90da5d7fe2cc413d44bc0d7043b7dff +K = d4548c8601bb1e73e192aebfcf17c501 +P = f75e83f3398bcacd +C = ce1dcae0a9a3fcf903da771d01804a7a COUNT = 63 -K = 7e114ba1e911656adb20182be81042ee -P = d5be81e04c96b71e42 -C = 94e0b48a450558a8cb807e7eeaae056b2320aa34312ea721 +K = ccb594e107717133f1cd2fdd1d7d3929 +P = 793f9c6bd4d2bd77 +C = ae106b0c3338626abb8029e4d1d303d9 COUNT = 64 -K = 8e673a7ee8a78547b432510e0007d316 -P = 5bf594f609daed2b94 -C = 369f0ae40d0c1c86d0e3a1b2e3b3dfdcce7769b0694e510e +K = c4b3ec975fbddf3ce3e5da17f6e4f345 +P = b5e14508c63eeb28 +C = 6d41117baaa3bbc882e3f73709a9d21c COUNT = 65 -K = c0c72240e86650d207d4ce1013e1060d -P = 37d9cd8557c21fd01b -C = c3df5b6cb578144349fcdf51e940858e9a69124384ecb7bf +K = 25adf69c9d6b17fb467d1b977c130c3b +P = f5c8370fe299bcff +C = 526cb85f60f81b2a268a5a0bef6ac5aa COUNT = 66 -K = bd953132127a9489da541e95f06fec43 -P = 609bcc44953ad511fe -C = d6ffecedc0a5d53df84fd1eaa237b73a25f6c3740cc491ce +K = fc86f23e96ad283c8b4c2c270dd5f153 +P = 81354425e7a91f66 +C = 8f9dba5593041c4c4d9e7e21cddd7c56 COUNT = 67 -K = e892b49d18fca5f63e707b6ff99e2db8 -P = 2e7f666c6c08533efc -C = 8a72712b5a8c2c964f7718e36ecb0ac85f6025d00df4ad27 +K = 9f2917d04f987bebaf1377426d94bd33 +P = 9c725a5c059e88af +C = a128446e9b9ce2fdf10fa970ed631b86 COUNT = 68 -K = 4917c5b21d3a8ef1893eb080d3768439 -P = 7a098df30ccbc16466 -C = aeb53cd44ba07709699dd2d6820730bb84ffd3156651125f +K = ec74726955fdf6bd9a48597e6ae6e9ac +P = bed2610b7728cc8a +C = 18b4b5976fbfaee0c1a14fe2eb46e5f2 COUNT = 69 -K = f938e4e8588b0fbdf4108d282eaedbae -P = de8f69b3581c278042 -C = 56798268dc2b80e2833ca0140c8e1fd6e2aeccc71f6c2418 +K = 80b30093bdd393ba385bdb5dbef3d0f9 +P = d603bbe43c5c4561 +C = c9707b31bea8f51fb51c3b65c6f12de4 COUNT = 70 -K = 8c3b1cb5794be664ae5788666c49c28d -P = 2cb76bf3ec69c1d1b5 -C = fb966c6c355d7cc44f6fb487b4a6bb6cf0282554b30b62e6 +K = 7fbbc36f3b67ff7c73c01c516971ad97 +P = 49745f29c88e68e8 +C = 0d0ce85d8f0917f47b259048067df5b7 COUNT = 71 -K = 33215c5ed15ba9ec81d2bc35f823d965 -P = 353e7bcba88396dd44 -C = 7ea455c6a3ee8084f627de98b85959669f9f40ad927e7735 +K = b588d737e6df5bcf01a92106f9951073 +P = a356fbeb6052cd24 +C = f3ea46bd8bb996185526b9162e1f379a COUNT = 72 -K = e3d31104259e02bd1a8fe1878d21f5c8 -P = e5ac0c74d121275061 -C = d43d0c52ba71d1db867da0e34721781278aeb42e1b430b43 +K = cbfd77718d1a7dc144404d899c7c6fee +P = 72c3ff7ac8625d62 +C = 3d3ccd1f69add1b4aeaf8eeaffa9edbe COUNT = 73 -K = 38d90d924032ac215f11eac05d4f53e2 -P = 69421824da88f35d1f -C = fc978e5c73321c358f52088531021a040733cef065fa36f0 +K = 77857ecccde5af8ec9717aca835ba268 +P = 1bb2aa2467e0a3d7 +C = 3036513c21f7d520ef9df2d6110f0858 COUNT = 74 -K = 83e7b8a99f479b9c5fec9fe75927a50a -P = c39017b441b953e332 -C = 48b8e70b9d17f0d7cab33b9145438bac5f3631eb6bc1b590 +K = 28fed5231581ca758b819c0c172ca597 +P = 7774016a737c166f +C = 777a2c9de46d012510cbfaf3732aae45 COUNT = 75 -K = 56ef69aee4728cef9483c7b93506adba -P = aa0cbcff3ab0f5b871 -C = cdba57ac942d702ff8ba672a1d22372e3deb227a55f42320 +K = f1ea9df9fcac25a4643fae4a62831c24 +P = f01e28fc7f0840cb +C = 64b8c991e15b35620e7ef945d502d75d COUNT = 76 -K = f96853e6d87ab2892e5e193a889cae39 -P = 315f5292665a3ec9c6 -C = d21e9ec9e9553a40f803a5ea019c6509708214ce10816c14 +K = 551830e76efe0556db5f35174e1cccad +P = 54c2283244c6e187 +C = be0b29783f6d537f738ed0ba5d5464d2 COUNT = 77 -K = dd04ed5a20246f751537bf4b373665f1 -P = d9d105cfbe81757f3f -C = 06817b73162df9b74ade112aa28b7b70733a9a16c0274e12 +K = d32bfe325767519371d781200d544e1d +P = 2614c731a4cac5cc +C = ac698c42872b916f849dc0c07ae1b159 COUNT = 78 -K = 032798e1cb52f1b4007e884bbdd74174 -P = 9c9d06cd1fb0f2bd8a -C = 1c7a060390e56159477cfb33aaf207981363094fdbe3aaa1 +K = 85a78d0dbbe009b5e2a17d1af0361e13 +P = 34b0743f13729f7a +C = e97cf644555cc3e1803f66f6e5358e64 COUNT = 79 -K = 6c2b6da76b5fc506220285b1e5242383 -P = 7eba5f53dcf8191c3f -C = afe6197b516fb3b0fd75707bfa55327ff697c86782f213a9 +K = b9518a5e1593af88c9a3330cffb293ac +P = 6960117f7c1e04fc +C = 753b2344d6f1d3ae8a3224c7ba882703 COUNT = 80 -K = 8776514cae5f1b12459b7a99d40bb73c -P = 67a8c58688f773f8f5 -C = 0f84238f8e99e69f35716cce1ef2fce806e33450cd469c76 +K = 8bd839351a193f846e30b86a88139493 +P = 13acb4c2df3b9e64 +C = 0a51345f2cbb8a408f65e81cb611ed66 COUNT = 81 -K = 5db105a71adc4d17ce046d373d346d49 -P = 12036c049cd30aec26 -C = faea95020fe609597ff0a00a789abc88af4ffe9201f6e10b +K = a603a0b68ebecb4580a02d4e564f4b69 +P = 96c745d88e7ae810 +C = 6a4aeb7d68df061efb44401c6b180cef COUNT = 82 -K = 63a5f44de226bb52da4e2b327acc4b61 -P = 50b3a5daef67303fda -C = 20ca0fc8a8fa6a2d10e23eb9b2f89744aa6781c91c009c66 +K = 19b9f505a1b0d2b6e49f0aa3ee12d563 +P = 595b8183043456ab +C = f08a3fe8a80188a4ccea12d19514bd7c COUNT = 83 -K = 930a74c5326a957cf79c326a7a888799 -P = be1cb306ddfb189255 -C = 94e7337f671774a2cec78507e11d8a08eebcd332b3d19985 +K = b73d026ae7ad9a82304c4e88730b96a6 +P = 233e075c07266a41 +C = 1751b043115afbbbe96511f01e276a81 COUNT = 84 -K = 33a189a1e1e68015ec4ac1793a99dbfb -P = 6807cedac64e6ce9d1 -C = 3619aa7141eb1137f6573e747b5660c7fba1e453ffafdb48 +K = 5f06efe30be51c7f88cc99750245fe5b +P = f9906ccb2a13a0a1 +C = 5b6aa2e15cd544af1a63b5b35ec6c1ad COUNT = 85 -K = 85312078c97a56115bfb999627b4b2be -P = 749dd486920d55c4df -C = 6f9fbd5b4476e9b9509e5633fb19ee5a0bea9806b46f9730 +K = 60492a4562eb00f6ffa728c3321804e4 +P = 8ea55d39b67335fa +C = 7cb0bd322fd56194cda8941f58b4775b COUNT = 86 -K = 222a7c7138f59728b863b480c4eaac12 -P = e795466d2dc5a20512 -C = 9ea8c69a57c242dec66d407283cf49d76031b197d703a89f +K = 5b87d73be8fe3defdc359a452de3079c +P = 84f91fcd2ae2841b +C = d6aeefc851125345d6d4b0695ed66cc2 COUNT = 87 -K = b96b7942b608fb7165f3243692e97444 -P = d5f2fdc3f8c0c06e39 -C = a0788fe415f74ab47b21a953b5c38558a358e1b683c18e05 +K = 622cc0e57d4bbce13419630371fa4fb7 +P = e58b9b5b33b89f61 +C = 919f9c5b85422b3fcb30251d46c824af COUNT = 88 -K = d1097c395b2780635f51ea8f81b042bb -P = ad82581260dca0198a -C = bb9cc8a56501a95e724862d0ac76ea72fec41e08e9f817ed +K = b7e297dbc325de86f4a2b578d401cc41 +P = 31d43d7802cd44fc +C = e64fe4172f0fe833f3f9a87fbe2c51a3 COUNT = 89 -K = be2fd54641595d7743d7a58911aff3cf -P = b5f55b5238040ab086 -C = 155cf80188c8768fd83ce4eabd598e82f56f09eb97956ace +K = d98c09b8a3520fad9fee3455ad808e2b +P = 18a5d9fc3b9aefd2 +C = 60c94dc7b59e52be87e24302ebba20b2 COUNT = 90 -K = 9f6f1c38e59ce9c64b65d395c6a8ade8 -P = d5f6916a3f0f81512a -C = cf700499c8edbb981b34f34f20bfb5fcb287eada282edb08 +K = 385cc6edc25484dcec775158ad4b3326 +P = 88f6f70ac9da0a22 +C = 95890ccbb6d34e16350078c0ff024399 COUNT = 91 -K = b08430cc224297fdfedab7312be8678c -P = 466e56068fc8e54d05 -C = 5e3f6540f8994cc927ba400424d850f6ce5d08d787fb23af +K = 10f1b09811cda087851766a8c2f3c7eb +P = c2266913a2b3b880 +C = 5d9b3f38c5738dc84da54a3849686aa4 COUNT = 92 -K = bb1d66fb7448bd2cff2321755a0f57d9 -P = c8a16e6a660b03de29 -C = acbcc30917e6ffb1e3608f2635ac4377f5d4865de1b6bffe +K = f48bbc73b23f6754a8039a3920a2e237 +P = de907d7260da8a68 +C = 4ab7b7116591216b6628b13a70efaf52 COUNT = 93 -K = d9bffbf205cc188362bd040e94e4547f -P = aa49953faa442d1855 -C = 4c315bbbc8ad9c041fe1b5d7b5566ffcdd05f46c6a3938ba +K = b6762f9b0847c8fa31119ddbc41534ab +P = 9c07af12b1b8f1d3 +C = 00e83a440d2cd4c5fc452bd3b273fb88 COUNT = 94 -K = 572129e079704d974126f4194866e7d0 -P = 9f96ac4425dcee9d6e -C = 15c1e6f3b21f08ea7f75337e75084eee71e230fdaa610145 +K = 9199a42fb62c6890f580440a8bf5af14 +P = d08287c8d47700b9 +C = b5bb9b579cefbbe601b4d6f7309231e8 COUNT = 95 -K = 1045bc737e8e6e73eff3d19938a8ab2e -P = 1c9111aae4c4de958d -C = b7c54bfaf6881001cc4b8959894ef374cefe4c4f8096e0a0 +K = a95c1c63a75fbdbc8f8996e1256c8be9 +P = b0e2e4db31f86eaa +C = 853cef051bf7d5325b0bc1b480e81dbd COUNT = 96 -K = d393b886f8cf711e80559d5d961a8b84 -P = ae415cddc9b9a7b86e -C = ff32fca1cca9dc19768ce90debbfa09a4f37ffd1d5c7edf2 +K = ed698e2e1868ea54110880ba6a8cf405 +P = 337c3869a16e2a80 +C = d22ad3229edd8bdff8c621b3dfc0a1f2 COUNT = 97 -K = 787d51176b800ba6b6d79bb2ab38bec9 -P = 2ce6d6ac154f1a75d5 -C = 2486cf4bc73f25edc24db1e57477468f2f5f83ca678de984 +K = 14fcc68d927270795f8751dd6e2de4ca +P = 61f43c0805674098 +C = 2d89e33d3b71d89400abc856acad3535 COUNT = 98 -K = c937bbf52cdac3f2fa80a8435da4324b -P = df98a68964de98440e -C = 8f4d42581244fce46880f1a9b596ae9528f725b4207b416d +K = 043509717b8ef3de653c0f7c400a9e44 +P = 2d50fdb09d271a3f +C = cbd07481dfeedf11d73a5dcf93124a14 COUNT = 99 -K = 6c50e53c644595be976ea9e43096bae0 -P = fca53b62991da51660 -C = 4230bb5eec787dd5893d8502c5b8e53348df8d63d2c27d85 +K = 12e00304d8d76e670f4bc5deb4c2eb02 +P = 257d02cd3afcaeb0 +C = d9ad5f02eb1ae64f6e2da532d0e65ba4 -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = ac6bcb48738043d3870bab5a342b2941 -P = f0c5e46a -C = 161deba10bcca42a99a6369deede76da +K = 7865e20f3c21659ab4690b629cdf3cc4 +P = bd6843d420378dc896 +C = 41eca956d4aa047eb5cf4efe659661e74db6f8c564e23500 COUNT = 1 -K = f6c1ccd26f80c50d03ef8cae816e3459 -P = 347dee06 -C = 17320398c4d4088647c55aeed31c8758 +K = 853e2bac0f1e629867acea0d2b3c087e +P = 49575527bc59530fbe +C = b43781062eb0317eb2dec6329f2d64de1c33d85570d57db6 COUNT = 2 -K = 3c982b040e4bd6751f54036689e698f6 -P = 37d9baef -C = 36f285eee49caa7aef3fbe1c47f3fbbc +K = 7a37c5e450b9544d9c3d84d690bd845d +P = 4ae34d00709b1e3aea +C = eeeb4a4e9243dfd207e309b81ca45c6b7c8f9fe6796dbc7a COUNT = 3 -K = 985b6ec8e8d593c41b1053010e9be978 -P = 5df5f735 -C = 3723647851d06de9acdc4c04139de916 +K = 6d29751a8a0031adc11b0f4cc678e880 +P = 6ad2a1834482ba46ef +C = 8be5f0adaa1b9f0d903506d099733c88f6db63389e3e7d73 COUNT = 4 -K = adf4687e95de005814b91b9722426764 -P = 72a8aa84 -C = 4508b4e5c34a59406753798b67da25fa +K = 6139d0bf6f39beef17c563ef4a7bc89d +P = efc23245085ba70dc4 +C = 8f0ba3f70790e135b5b722fa7e8cb8d8791aacbab3b593ec COUNT = 5 -K = 21ebf08e167735d4fb5a546f443d4e8d -P = cabd105c -C = 05696ff2dc004109ced14c31bc16b240 +K = e85684dd0c570b12b347dc665dfa6162 +P = 4a9e53588b896d5568 +C = 6ebc8c2545a092642401c4923bf83aa29718e7725175b828 COUNT = 6 -K = 55a31bbe674a985164499c23db0857cc -P = c2069ad5 -C = 8811b19b94cecf90c06de7f90efd0f8c +K = d64714b476dfadf5533a7713da80cece +P = 3e0b42f6b287cd94f8 +C = 24329179d8f466ee1cdf3ec46ac6d5e02bc8c62f2fc17806 COUNT = 7 -K = 50773c8acf8f940b7e8a834079a48dbf -P = 918ff865 -C = 880762d565343ed973330c31197d76e9 +K = 4c1559103e65cec97f71a8f14b7d585d +P = 0e174c6bd230065689 +C = 5618d54547ba048666d12884e5af176a6012b01008660dab COUNT = 8 -K = f272d575e3e5d5616ac34b67d948cae7 -P = 9aed69a5 -C = c1ab625807b2574261b461f5844d27b5 +K = cafdb7e823e803008609cb16b1b8d0c2 +P = 18610ffa6132860185 +C = 03a4c3e8bb24b5d4d5f7eaae2fe9dbcd6ee6028fc0cb44d3 COUNT = 9 -K = ce33c3ae0dd9d34890b38bc227965a62 -P = 4b99050d -C = 399665d0c91e35e5e809d26730896c48 +K = 1d7c1f90d2594ce7039a3c450161efd4 +P = 367db3f9c2346948e3 +C = 62f7dbf5d2203e45688735ca47109a7907e1898a3c2618c8 COUNT = 10 -K = 91ffcd3e83baf6bcc9c0acb64b20d62e -P = a4c068d8 -C = 4c7da809503d8a1d1e37eb254c68c6cd +K = ee4c3c962565035e905367b0df5f1826 +P = 3e30a7ee8e8b11723b +C = 63eac0aa3b5a41ca9b72fec0babde9d013fcdd61eff89b1e COUNT = 11 -K = decd64fc4b9903b41b7c9fd0ed750686 -P = 30584164 -C = 3c8f49c7463fb31b17154bf15404434e +K = 344bfc96e8527fc81c40d46cacc59533 +P = c76e95c42085e18771 +C = 82fe457dacdc2761b68f8c2388cf17b383d6c955ca4d3d45 COUNT = 12 -K = 6e01744bebd078fff4b2fa1ea5664859 -P = 09a9c3b5 -C = 188351da63664a6e1640f9b5a1c0c319 +K = 66e09e79a51698067fb639cf4652781f +P = 6285ef2096ff2119a7 +C = a616c62b33bc2304d0a076f4406dbc086de8736f374bc6f1 COUNT = 13 -K = 02cd148d8ac47e9ebfda9c2b4b8a9e1e -P = 6d2edd2e -C = 61594c57c62303356d778aa4de4e0d66 +K = ddd25a0f640f1e405f327c82b2225076 +P = 16309ba7e6716b9f76 +C = 7e5820d9ca3f90d0b38c917c8c6bf8e4377e2b9717a1acb0 COUNT = 14 -K = 7b1ad980d2db009efd0383b6fa32c3c0 -P = 01a3aaa2 -C = 52ea6ff01938b3820453db0bfc342c14 +K = 961dd9db0d02e3141d9f098fbb8d172b +P = e6718e1c6a34989aa3 +C = ad5817f2d7ca4fa92a6f23a048ce8eebde03ef1341e1d3f2 COUNT = 15 -K = b70999f6684cfa4b63c873d6276e16b3 -P = 871cfc10 -C = df502e3c005913106bd1747e02c5b156 +K = a25148d23490e685badba0d2aa79835e +P = 115443d7c594cce947 +C = 7a14dbe46915c27755f0c61b96e5b1c1eb9db20a7d610d02 COUNT = 16 -K = 98f533dd55bb00263bd1d38e705f1e4b -P = 12a57db3 -C = 9c82f7ce938daf07d307cef225fe01b9 +K = 022bec3bfcd486378f365d1e48a39809 +P = 858998e58ee343ac76 +C = c422c88657463e7c853acb02f209dcc7653c3e16da5b7968 COUNT = 17 -K = 17c4bc44e13448110552cd596e60bd1b -P = b5c38628 -C = 8b48bea90027cf73d5608990ff945086 +K = 656882173f72f0e5c2011d1e6420798f +P = c944813db2b120c966 +C = 01098f3aa2ff59f838129c43e585e8ec5f0fe6026520ff97 COUNT = 18 -K = d7c1c1e3782dbdf823694d6b4c2de112 -P = 9a39c347 -C = 17127152b3c2edfc368aaf6879218d62 +K = b5c283750da848a1b16592a746878d2f +P = 05a4f9bc20c56bab55 +C = d984659a892f196f8e044e6fceb47072f748854f1589927e COUNT = 19 -K = a2fc3229e59b2d4d51a02cabf2aa7a20 -P = bed9a708 -C = d8aa3b7495e3344a9c376d2b69c4d633 +K = 0a928f3ea8b148848c0370e632ab8504 +P = ddf24a0888a13aeed3 +C = 3481b944af7ea6b7a2323b8d633da0ce20a17c335841b709 COUNT = 20 -K = 32afc902bde63fa14d44b60a2cf34380 -P = 9817be8b -C = 66349864a5a81ec71557f69ca1880c02 +K = d1b69c14fa8ad77e35e77cfcdc2fbdfc +P = 4928709e08f21df0b0 +C = 9458d563f301d2efaf00ebd55794c370f4775e6da8ce6d65 COUNT = 21 -K = d7d9395d285ddc55cb8434f751f1761d -P = 6b48fcd2 -C = 5c456ef92de0a9019d57b0098aa2d220 +K = 938103ccccd3508ee94a2130733d21d0 +P = edd410d8202a0bcd44 +C = 50654d12ed314528de82319da2fa3ad27ee80ae99ef778e5 COUNT = 22 -K = 128e69ab71bfb2d5c7ad2fee50fab561 -P = c2166944 -C = 2aaf627ba6321d155a1ccb961e94c139 +K = d7eb1b3ed326c1ae62502ef3d07769a9 +P = 81ae15f3611e190007 +C = 8ff2328e4891dba7ac01f03f86406d7e0c87e4776321b3d7 COUNT = 23 -K = f5bb3f44f245dcce649c73aa35a946ae -P = f2f657e9 -C = 0e47821f5a120c249d29b1a7c922f6a8 +K = c39d5638e7d07df0bf286e156b0f9928 +P = 879178d459ca0862b1 +C = adfbb8ee276c4c45dc1172af577c62a5311795162d90fd6a COUNT = 24 -K = f353d75ff983e42bd74bc49bb1baad05 -P = 75e18354 -C = f05dfec2147b05d7b84179138f89451a +K = 5a6cd757cb346b1e314c8c5cc0e5640a +P = c51bfa75805d6644a0 +C = 3e7bef7269eb7423b68a56f38ce90f86b1ead0a08e446018 COUNT = 25 -K = 9476dd49e81fc459c89d2763f17b742e -P = ebe9f201 -C = 59c2fb5a01c0246722b736688d563fd5 +K = 760416cbce42c99a9d79aaf33ba7ee34 +P = ad57e5886d4c198fb7 +C = 9f390eaea5816c1edae7dea7336a03bdbee5795a89be560e COUNT = 26 -K = fba5beaae6b2d20f11ee8f332e9989b1 -P = ca2ad814 -C = 7de0cf7ff04c4fd78a34345feb163490 +K = 20e7927770462c5ac0af7bcf8b1591e8 +P = c37c30f7fb6875bbbf +C = 02b5a098cd2f114a23da4772b0cbaceefce404b79f0c209f COUNT = 27 -K = c0830f79b29af5ad543ec8c9c75d3705 -P = e70b930b -C = 0c80595f37da929940617a32dd28bf54 +K = 52f998105b6f3f396f5d4ef04697bbee +P = 9aad40cd2a8871add7 +C = 281255dc01e9c936f995b0b5a7303c8a9130f800ca8e4f3e COUNT = 28 -K = 217407d5d3695290a3a8fef871b8e617 -P = a2b65d69 -C = c79ee9fc7a1884f0873255e84191d1a5 +K = 79f17c39540f12638f1a8d65c0415b5b +P = 1241dfea3be2eb7ec5 +C = f960eb3fad1cd55fdd6ee3b4ed4485954a71081780a7089c COUNT = 29 -K = 126c0bd90c79ec1b232a4f82f3d781b5 -P = 7214b725 -C = b0da8a94eb0bdf3156befd3dd9e61aec +K = abc1bd030f7d48ab5d0f1f21e61062c0 +P = d819a8d89c67910796 +C = 642c9b50a14c9cb66a41ca4e4b431b8e86942d8c42e2e2d6 COUNT = 30 -K = bca3ab7ffad9d188a4f4af301564fa03 -P = 524e11f8 -C = dcfa97dc8b4afbed17f2a9643cfcc03c +K = 526e03858032842938addab14cdd8fb1 +P = 5393c4ec8784475f14 +C = ee4de13e219de2cedcbd30d7b0a2db67d5b4e3c1c223d212 COUNT = 31 -K = e174b1dce407fe39ad735ecfd66e0f19 -P = 2ac2f180 -C = 5f5ecdd03269fb4390e4698f4f0e0bc2 +K = 71acbfd0091dc95e1962f5aec71c8239 +P = 9cb17d40e2da21e405 +C = bc4a3f08bd7a4f36e025d84a801494423e187a5cc4681aeb COUNT = 32 -K = 13a6dc6be92d2c5af06ce49000bf8451 -P = cd018521 -C = 63252f49bf4d0e9645fdf5822fdde341 +K = aee503025a6027dc28b4979f67094099 +P = f72ca9e53f6d570eac +C = 3ad7e8d6277b5038995311ba7e8ffa14db321d54b49b4d84 COUNT = 33 -K = 6da4e86b305d1e572a98b0e3dc37417f -P = 95dee29f -C = c89cc66d542fa998e12f8714bb2fbcd2 +K = 6ac58250ab6fe2b9f730730c0199f666 +P = ea3cb89f3fecbbf9e0 +C = 98bd6fe912f70fc995ec825f82edbeef70fc3de0c0b10022 COUNT = 34 -K = 4ec2c8d5eca82600b78a5b27cdd64961 -P = 892db858 -C = bc72bb4b4cc354cb96f9d931b0140b53 +K = c0ad44db82feada658f71e99540c0a85 +P = f89482e5a8259561f6 +C = a1a1bf753749d733231d8ae423c371c37376ae862a9f1b76 COUNT = 35 -K = 248aca6717eacca917d495bd0042f962 -P = 57aa798b -C = e58250179c68d3e4ff3000bdeb5ea499 +K = bcc39e534a51653a313c6972b55db517 +P = 034ccad7c190e10cdf +C = 499c72ca4bb9c65cbb6b578d1575d5a35287ce341b1677e0 COUNT = 36 -K = 0d20a4cb4076e1878a2e7a75afd11446 -P = d281e95a -C = 7d93244addf8ea3770182c8df495cd6d +K = 3bdd35ffc07bc816576c48d0c5849fe2 +P = 8162ca45d2626257d9 +C = d4d0a99097e3df8d373a7a37be81fffb341ae4151d6f679e COUNT = 37 -K = 8c4e4cc45d9925767428e09af8f4db62 -P = 52130c9f -C = 838b0d6fa2d19f0fbb7cd9c0a6065018 +K = 4985356b560856df2284386ec2e5e566 +P = a5b3126db75bc661f1 +C = 80461c89e6a6d0136b5b1334895cc4f6167e733426421aba COUNT = 38 -K = b0d63e7bfbf042cf2e16b4d570149896 -P = f42403e3 -C = 07b580d51c27e210cbecdcb3f83569e5 +K = c0f2163a2ad505704127980dc7a0f152 +P = d5f13aec13b52033e8 +C = bdd2486481dab002d07f470b550f529cee28f5825f23a8bb COUNT = 39 -K = 7a4dfc129682bbaa097438531926dd95 -P = b707fac5 -C = 9900e52ac18a5bc90195cf0b88571352 +K = 652f219ea6b4a9f72bcf6c9ddd8e0b84 +P = c7fd4a8047c47bc8b0 +C = afbcfbeb13a60fc651f8ed297dfc8a8080955b41a24d9e51 COUNT = 40 -K = 658af1b3588ad0a9230938d270e5b296 -P = a7760686 -C = 65ef356bd9638756a1ff52c86397ee34 +K = d3745dee83b921b6d4e3f430fd98a451 +P = 280e58473b67049573 +C = d080c81f76ba2cb295ab019c4de3191b8a9c08b37e6d424b COUNT = 41 -K = 23cff5afefc879d4140bd65610671cb7 -P = 48d5589a -C = 51bd41b858ce018eca299f08afa930fc +K = 3e7822d2fd28e275e9f469a659442487 +P = 090b5c979d845e9dac +C = ef3bc3c2d2e74c6c0c053e6769cf0e9299c8b2331f24ade9 COUNT = 42 -K = 9925179d8dd91e92c0775b1384704896 -P = 26c89ed8 -C = 5b24f3f10484759c28b64528acc78b51 +K = bebd09129493249d00af238910577556 +P = 6db82237ef942207da +C = b3bef75b145456331e2d597e4502c0f9b7d779724eaf9f3e COUNT = 43 -K = ba4179faac7bea2504363be87e1a5a7a -P = 80a840ca -C = 3e6db70e76797477684e189b1ea1ffc8 +K = 1a85c0553bd311fb0dc65d0ad3eb63a7 +P = f5c73f877118d4481f +C = a19c145577793cb3275b720d4f3e0ffaa986e3e94d8c91ec COUNT = 44 -K = 0699a852d279fe6108831120e1d444a5 -P = 8e39a19d -C = ca701774953e78a2957b3d8b54abb292 +K = 4d1c7c1d873e9cea309a36be39d94bd6 +P = 0dc5684bc34cd36e49 +C = a2fed50746c8decdafa9e349303428dd4559b0a0e8b25563 COUNT = 45 -K = 438026069e203fd84169ca6920db4419 -P = 71523b97 -C = 7ffc7b44b63c531e2b5dcb82a4d04ab6 +K = 18a8148b40c8e5676abec817ff26c977 +P = d942900c1392ddbd62 +C = a696013585302cc474dbe9af247ba7e5c7e494e1301c7461 COUNT = 46 -K = 8aee5023f07e64f1dd49caaa92fa6887 -P = f4238ba3 -C = 92cfb19ede1c55d488e43cfd45c4807b +K = af5d7ebf3aa95357566c33d160dc4e94 +P = 1557253380b6c43a58 +C = 6a914abbd24a4aebf72d8c24e4420031359676d338c6a4b0 COUNT = 47 -K = 892c856b08ec92e2f6953f63e8a5974a -P = e6867249 -C = c30af3448675f64b73cbf7d45c9e322a +K = ba6c43f484d9301ff083da5a68b110da +P = 7dd19c18a2887f304a +C = 543f06eaf509a3ee2066591512bd96dd0bea2e64a1258a24 COUNT = 48 -K = 30985dc48eb36f258968f17ca139e10b -P = f2540541 -C = a5caab6e1a296ffb0415c2361b175e40 +K = 04d628766c312bfdfd622aaf115ec1c7 +P = a0adb3c5b09e4b5a70 +C = 9b7d3c884d6c7a14c517b6bad7561d2a53bdb064ac1721e7 COUNT = 49 -K = 9bf5fde2487e2c7305f6e2de257ecd59 -P = b2b25b51 -C = c7dbc286220b3c72d5363c797a8e92e2 +K = 36ac7c65e2e1c288f0cabd7482151567 +P = 0cca006a46b2a39e44 +C = 148f7d7e69e991c8fe5962de8881c989ebe4c17dc1576d8d COUNT = 50 -K = b3c219569a8b51dc62befd516c4c1d0a -P = 8b9adcb3 -C = d48492e3a555d7223d854c96713e5c09 +K = 05c5fef9c009b1787679c2ba4a568930 +P = 47652be6eb05cdaa2e +C = a72a693c9fd615fe75de47d82bbc044c5c7b81a35dd53e14 COUNT = 51 -K = 12e6333765976222b9a271700736e513 -P = 839ff297 -C = 0eace57cd44f940b8a44825fb9f4d8dc +K = 2ac0b4d04a26be6859817c1ae6cb4b23 +P = 514e7c513463d40062 +C = ddb7d9bd009689b081614ace0a0d6b6cad681d3d4aedae03 COUNT = 52 -K = a4a00044673b1dfce4932c603706b456 -P = 13c88439 -C = 758c33e460e25ea278ce638eb791991f +K = 9834faa37cb833aed6acf9512029e51c +P = 9edc558aa6ec7c79e7 +C = cf71551baca10a49c777657665f7fa403d8dd1678fc28130 COUNT = 53 -K = 45af5bdb23cad58e083449eb6950b3a9 -P = e5bafaf6 -C = dd747d061e9a4bef518ce731900bbf20 +K = 5aad81e984978f643a46ab58135ec869 +P = 0e21a55d360d3cf3fb +C = 0a249de8385046faed876f1a77b6c1c3b913950aa88f7299 COUNT = 54 -K = 20c12b8dc977af8f07d2f20677b8cf0b -P = 5bbaf967 -C = 9e101b5dd53120b512dfcee14c465a9e +K = ac4818f5042f065cb7af46bd797e026a +P = e2ef7887db4d86abfc +C = ac1972e3c88ee236edf718ec816cec071b80a17a148847aa COUNT = 55 -K = 1977bf55ffba537f4091a1dbee8001f7 -P = fe320e6f -C = 1c808021c9086bc1e72e154a2702dc61 +K = adc17eeaafcb5fbc815d75e1dcfd0c19 +P = f0fc90914800fb6230 +C = 897ee931477ffaa81481a7b6352c5862712636bf1f046a07 COUNT = 56 -K = 2b9c1acfab2675105b7a094f1910e947 -P = c5ff2ee9 -C = a1eec3eba2ef00cd2bf5785d37ca2acb +K = 821f45eac62d56a24ed3ced33a2a251b +P = b355087821621a6e73 +C = eb07c1931681416175f675dab91ebc5145340d7f2b5c2d2a COUNT = 57 -K = efb4ab3d25938843932448e2f308273b -P = 4a219f34 -C = d9d64cb095d44c95a3df04c7837cc8d0 +K = 8d8632cd35921fcf207930312180c812 +P = abdb0fbdace86d0299 +C = 2028619ff135704a586670379b48cf19963a96855e6e6ed2 COUNT = 58 -K = c1674ab863f43de49fbd5f6918a2abf2 -P = 786e977d -C = eb9a2b86a9cec89a21afde07ed7eb244 +K = c81b9ecba3565334d6ee0e86019f825b +P = 082de1525c0c05916d +C = 46760f30ff86a23929c9915b86495bccea173f8714eeb0a9 COUNT = 59 -K = 8dd5039fe9b3ac825f94dd81022c1120 -P = 3fd84181 -C = fc3494950b2fd114ea71251e8832e263 +K = f3af1e01266eee0f06a2ba4c2c22b5fb +P = 0ca2c8d3a51cb5a8b1 +C = 8a89cea6f170b25d9f67e44ec27b7d2bffa6e61503855bfe COUNT = 60 -K = 660c2c702e3e0587882c2e5cb28de4a8 -P = ab851481 -C = 2c58d39c47b6d1459ccb069949395995 +K = adce6d575365bfec13f90986ba2b1260 +P = 31d13a5bf3765f527e +C = 72f09b122e0911a5c26de445d13193ba543d5acfdc9ff308 COUNT = 61 -K = c97f3fd7fb3a776eef2dcac7466ab62a -P = a7274e2b -C = 267fb47242aa9ffd0dd997654968c001 +K = ebe01ad4d464809d011db0e58493a937 +P = 3f963870171e502bfd +C = 939e1bc055042e33023f84fa3f321c9692c77417e2364386 COUNT = 62 -K = 17c2ae3703993a3be1a5a3c589a2b7d7 -P = 632d2316 -C = 8094559f9a1e6485bbb9cd1f70dc4a94 +K = b8e65a5356ce53960c3ae8a9a220d605 +P = 656a6bc04962ab256f +C = add53392ce7c632158fdf79c6d8f48fac1d26f4636423740 COUNT = 63 -K = 404106e23ba7bd0de9dee7468eb5540d -P = 5786b22b -C = 0fa53b4728404a05323dd1d9e4dbb71e +K = 4355df55d6073b082b43de5d425fef09 +P = 3b849bd5ebc7ea62b4 +C = 47076d2139e55635f5e8a8a8ef25e09c97b4a10e97e218fb COUNT = 64 -K = 1194cc14f26a8692c7cc7a9a5a316c0f -P = 349ee890 -C = acbf62eb3f188e524c7d1d26438e3058 +K = 26a4a437a43e3be5163ef245b77fcbc2 +P = 99a40bcdd13f3a6234 +C = 24b926b8c5867f09333f2966ad7206c4624f6293c7fec371 COUNT = 65 -K = ddf3d96feb205606f58fad2adf131582 -P = 8e949d21 -C = 61df3d76661dcb932936a659bc72d3c3 +K = a21aadc1d58a229e13f6830c76c77481 +P = 23266c06f576b2a09c +C = cdd31a12a901102296af42cb30d150e4b5f3b388f5144746 COUNT = 66 -K = 745f9f66fb340b880d33fbe158569035 -P = 87b92ff3 -C = 2bdf1d4ccfc21c52be6bd98171286b3c +K = 4dceed4dca492b468a031258779319c4 +P = 34f4561585cf9af861 +C = 34158a4a9ab9b8300cd334d7ec1b4885de33757a2397a332 COUNT = 67 -K = 0477a2ccdc06d792efaaf93df10afcb3 -P = f8346a8d -C = 26a5e70c857f4c595f22ff431fbfebf7 +K = 158900b85413c8db249eac6415054ebc +P = 2dceeca4b7b2a97659 +C = d29eb9eb3f515fa730699901acbed63b55eb7261ce7b5cc0 COUNT = 68 -K = afe3e971b869902fcd9dc8204d164601 -P = 9a714ba8 -C = 87f62928c2cbd9ab040c8ff3dd70259a +K = 37938afe984df17958d9e8c5d95255af +P = b8d0be0e98066469f6 +C = 330f046ccd12e9fca6e58fccbd457764f7638319b7a0c871 COUNT = 69 -K = 1d2cea708ba3a12afbcd4398816caed9 -P = f72e8d48 -C = 64a91956b145bcd84dbf588107c9d81b +K = af9f0a111b961b1bb7ca4f5274420c5f +P = 744bbdc120b337d416 +C = e13e69f2571b0fc3618bcb83fe73313f3256c9f05f073a64 COUNT = 70 -K = 3cba201524704239c343bc931610c010 -P = 6c8cfac4 -C = 598d857b0630f931f23f3459a3e7873a +K = a668d768388eeb80a0c6225b1fea55ef +P = 19bbb6dae7de888697 +C = d36d17e04daac15ab9a9f7ec5ae70058b5869dfcc98c83ea COUNT = 71 -K = 32fe9c51d9a64a92bd330eca77ddfe85 -P = e181c04d -C = cc43dc8ca276b630c0bb1287075ee7ac +K = 500b2cffd6e7f442fb00ee54442a56de +P = 427fa92643b51df3eb +C = d6fb918a9b66a4c319f2ee9d07e84b083eaa34e38fbd15f4 COUNT = 72 -K = df320e365b95e094fa68da250f68c90a -P = 4d7873e5 -C = 7cc0dcf6f6004abe839e9e4a8f2889f5 +K = ff165d19cdecf580c175e3166263afe5 +P = 81c8f8cc06f58c41aa +C = ecafedbc5d8b8e708d9fde9833428dbb97b81c373e335909 COUNT = 73 -K = 2a1c5facc4641aa8d1c5564969791988 -P = 3a7d2e2b -C = 52055fa4a8b583060f1c24b112cdaebe +K = eb8162d3050eb5f5f3cffd7fb8ebc62d +P = da6cb7372745c64820 +C = 6d079ba9446d164f2fefcae41bbd3d5b2dcf0730eaff2f93 COUNT = 74 -K = 94a9bf4a2510eb542db46d70de91b940 -P = 651063c9 -C = 7c077cb8b37930b72f53f1c34989643a +K = 5b83d07b2c11b5a93c450a46dbd7e0f9 +P = ad36418457af94539c +C = 8e7865f6a1215672ccaf764ae63fbed5a603c5fab6b77556 COUNT = 75 -K = d71a2868ace804f1535a0f757dcb4cc4 -P = 485caf05 -C = e3829fdbf5cd6e090d87f3ad4fb310fc +K = 8ac67412f221d5a6586f00186c14c059 +P = e89f323d9dde7e157e +C = 6c333edb07382ac88f47a0460fa159de7ee0c1a5a6f678cd COUNT = 76 -K = bceb195d6166ce33297b73a1e018aa0e -P = 98638fb6 -C = fbe8104f4e615b6cd7dddd2a63dd3b3e +K = 2eb6b60cb257672c5ded3d3ea35a513f +P = a73d50c3f54c0f1580 +C = a203e133290f7f9a67d299f69025fe07a34750b111441afa COUNT = 77 -K = 971cc91a981e28ab1e4cda3211b52bcc -P = 430ebc23 -C = a03bc7199ee5d4487b91cf42a33773b1 +K = efe1159032e7d6101248fcb2d8ccd860 +P = 8b0ba5bb41cce5ed24 +C = 9065b673eb337e821ccc669c2cda93a15da32dbd9be0320b COUNT = 78 -K = bc818f84c15cde92ea92b06ec065ea74 -P = d0c08de0 -C = f4701332731ea04e27f1921f0360c5d0 +K = dabf7527a6c3370e09c4bdd33785c506 +P = 41632ad275c7ccfc64 +C = 541a2cae58fbc269fea17b73aac20f95eae0616139f073a1 COUNT = 79 -K = a0754da4a3d5d739b2a447783ae8cccb -P = f3053700 -C = f6bc5be3d1746882b4a521c9b4f44469 +K = 44d1673f0f250c870f0238d22db9db93 +P = 9bb3f8499de1ee1bc6 +C = 092070684978ad5f5c6a8659dad93748b079b6410f70a78d COUNT = 80 -K = 8078a3d8bebbf0c73e7017b133e5df4f -P = efc7878e -C = 276d7795035bbd1fefb109efa4812631 +K = 586f4d7f8215f2a9fcc37b69f18b11d7 +P = be53588ad6eaa3aa62 +C = 3db98ec09ec12d621a5d5d320225c177688b5ac8d93846f7 COUNT = 81 -K = 3cacb174a66949dcddaf04d9267aba2f -P = abdbc639 -C = 57cfea16cc79158cbd78d23fb30a925e +K = b6ffb807864df56005ebc200e8fe4b98 +P = eddf9c8aba18e40008 +C = 7b5c33c99812fcfe79d1143c92bfa6de7fb148c5c658b304 COUNT = 82 -K = 750fce8299569b818b5cb1c368cdeaf4 -P = a496d2a7 -C = 6e8201d4b3c335e0a741f1ba4cefddbd +K = 32b49d503a05d7c19e1c14d460bdec33 +P = 5c357dc2a748d922cc +C = 9d807c456e36ceaadb25e7b20b4f9dd90cb56dfc5d4773b8 COUNT = 83 -K = c877c72e26020c4204832504fa8f9f0f -P = fde4f9a5 -C = d0422bd7d5682ae8bafa37ee38e9cbeb +K = ad085b39423cc413ceca8f9161b04632 +P = 5465479a5e19436c47 +C = e8bc9c8f40bf7fa97baaabc34a5e7bcd72a67d9f376c320c COUNT = 84 -K = d17b7fca29a1c90383efcfcd2f784b23 -P = 944dbb7d -C = 827e1fdc2d739f459b6d8624185ba25f +K = 7e1e28b634d377707bde1e579585934e +P = ba3d8cd047797d4e26 +C = c80010d2244c16dbed9c1ea00657bdb2726e7ae8ddf4fcd0 COUNT = 85 -K = bd57e676e9391b82759eff465db28aaf -P = 9efedbb4 -C = bf86097bfdcf395dd6842f70865fd07c +K = e0b1c95110627d1c80ce4dbe28e765ea +P = 6e2dbd5596cfee6295 +C = d606fc8ef55f0b088ca8df7b78c5bb2fa7a748d28f4264f2 COUNT = 86 -K = 109a70b1b952ef64d08fff038bc014d7 -P = 1a4a931b -C = 81bb90bdebfc9fb43e35082f3c55f054 +K = a3df5df0c6701d9bbf414b632669f8d8 +P = 3d6e86d2ded29e1bbf +C = 5b79d9a227f53aaca55301247176328044a03a6328da273a COUNT = 87 -K = 103e78f08c58fab886659dec63dc4cc1 -P = ab7eb8f7 -C = f7c69f1691dea962244dc28964c350b2 +K = 5bc84b09d2dab9706034e45198ad4cf1 +P = 704de47314f0e42d60 +C = 585ef629c8bf420d9b8de46a3cb1252f3cbed30a4ec55e84 COUNT = 88 -K = 57a3655ee2f11b188098592b776d21cf -P = da6a6233 -C = c289848cfb6122f78886a7583fc3ea5a +K = 9d5e32ce8bd5cce59bac4bf4edf3d4d0 +P = 4e3cd7a9d82547ea00 +C = c2f05596ab68c4eaed29412fa95db6b9b25dd0ed1eb25e3f COUNT = 89 -K = ddf876fbfa187e42f2fc689024221a30 -P = 66605b7c -C = dd06b6593cbc04841ca1de647f51f428 +K = f40ddb0164d86648f4a7ac64c73ae1f7 +P = 8d6a5833113ff43ccd +C = cd9e599bdabba158cd22ebf7530df1a9731d010c2386d885 COUNT = 90 -K = d0300b891ce742e15316efe2381a3242 -P = 87419240 -C = 19204bcdd1038e5f8bfe4d154c83ad0b +K = 002785ab0d08294687ea8c61f2e9200b +P = 30264ec89dc39c536f +C = 3115d806c7cb049735ca5a6e0e4768944297ba3037ad835e COUNT = 91 -K = d8cb2d6f3f4c9fe7376ed47d8aef04d6 -P = 2e0243d6 -C = cb9d9c11e3b674dff9782c3f82775b3c +K = 4360c6f0f249f81729accfa26c72bde6 +P = 6f67a53d98555df1a6 +C = 676e300916710bff371e8f54dd797eb30cf4bb37c28de42b COUNT = 92 -K = 86583d78d3753a1c64d67803d570bbd7 -P = 352278b9 -C = 0a208ef58d7a133ee01b39eb8ee6a2df +K = 5ce51366180aad5c8c0a05323b9cd3ad +P = 42060f09f847bc5287 +C = 425dc3a1b776c9b30988957fe6c0c6238f10750934c88ca0 COUNT = 93 -K = 7f6a2323f3dee591ead21af9293fcb0d -P = d07d2992 -C = d998bed4039ab3f476c05005f8bb76c2 +K = dd8d98378336828a8cf48cabf3817a47 +P = 653005c1540d9e1e21 +C = 60c36f029f4c72328547d9a1155c01a3b4f9b26e4a24d4e9 COUNT = 94 -K = b995873506a7531743c9c1a1424577ec -P = 9a0c8dfd -C = 01b2cae9419be79e0072e67e953ad9c2 +K = 0bfe6c55dc3769f536f52ab1c3e520a6 +P = 2d801e98cef311bfa2 +C = 5232b12aa9d4dc95631f5c29589384c0e78c941a5378ff2b COUNT = 95 -K = a5876753e9eaf6de0c12f0bf3834026e -P = 24c0bd45 -C = ee62843d72171401b3b12b1230966cd1 +K = 565e0f927c2801d9467417a7741c2209 +P = 68e6a70bca008f26d5 +C = 262267260b3e0f102571e100cd3846a38b4fa28446518f87 COUNT = 96 -K = 13baf9f9a5f2b3aec73a1e68e831ecb4 -P = 825f9e43 -C = a87aa8b051d1d39b32f96b95e15473fc +K = 814be02d65ac5217c9634155836743b7 +P = a5638e0cfa607c74e2 +C = 59e48151eef4d62ec6be8b18886fd985af47d6d5d4594632 COUNT = 97 -K = d7591df18a60d2ccb388584fa3c49474 -P = 96679a15 -C = f0198a874288e890892d4a30c3cec556 +K = 4d13c983ddb398978c855a40feac5d8c +P = 71367c30d534d8cc5c +C = 94d578c1dbe2669ce8400506c0e745135b1bca2b20c1dc8c COUNT = 98 -K = 4705507ec74764a583f46b0f5c34c93d -P = 428881ae -C = ff657dee788a15e0064743e566ba69e3 +K = 253a038c508ad1c8ed174a424b0ca0c8 +P = 270a2dd23d6cf82d42 +C = e1ada346dd78bdbbbb2c9d1915664c8964f335ecf6cb6b80 COUNT = 99 -K = b9a65eef78a7b7186c272a6d17f518e3 -P = c3b4deeb -C = 99e85ec46da92b5057333979d0aef6f8 +K = 6446d79d60ce85feb9039d77e75452a8 +P = 852f72f1faf9f1d155 +C = 2865593190770605d668d75ca47ca6a9bf1e5bf6ef04e474 -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = bb0dfdeaffdbcc4020d511c5d771540d -P = 7b6fadb8380dcc1d8433c59e -C = ff60b2bc4c8804e6546e82cb0f366f29f9d0d0b08a43b2a9 +K = be96dc195ec034d616486ed70e97fe83 +P = 85b5437b6335ebba7635903a4493d12a77d9357a9e0dbc013456d85f1d3201 +C = 974769b3a7b4d5d32985f87fddf9990631e5610fbfb278387b58b1f48e05c77d2fb7575c5169eb0e COUNT = 1 -K = 77164dbda4996e87da53c7c41210867f -P = e23307af066632f7f9db8eb9 -C = 8b376bfd07228cc9d7c720023a77bed9a41e1198f8e6935f +K = c03db3cc1416dcd1c069a195a8d77e3d +P = 46f87f58cdda4200f53d99ce2e49bdb76212511fe0cd4d0b5f37a27d45a288 +C = 57e3b6699c6e817759a69492bb7e2cd00160d2ebef9bf4d4eb16fbf798f1340f6df6558a4fb84cd0 COUNT = 2 -K = ac302d53a71e419426e67d95303de57d -P = d23680b083e782b262dc2f64 -C = 65ca723d21f48bdadfa495a8a56ace76e71dcdb0ba55fe43 +K = 02a92285d0baa874ac94f6648988d44f +P = 6ac78aff505805e3145fac44eaeb6ac92945ca12d9bc0b6fee8b1e5b983f37 +C = 18b251cf54d2a51ac903af2fd008f6aa2b1bf491fa2e0458dba272866821e98ad037eae4af654811 COUNT = 3 -K = 733509e0b8e81b47dfc5d3ffb1f2bed7 -P = a6554904d6bdbebaeb1aec8a -C = 1cf59c46f499486faec71e7aa48f6ba998a003cd96510f11 +K = 6b05a200e7a89ed097692a5ffeaba3f2 +P = c1fecfdf4b7846475460017d0aa703f034b41da99f9b9d1208d4ff26d2405c +C = 6603379c55a442eb7ac4488174a92ece87c9a6fecbe613a82e0caef96cd7da8e9a4509d62115cb5b COUNT = 4 -K = 1477409b15e87ae248ccfe3be2adff6c -P = 99fb0cb5df48602cb3f457d7 -C = 0478022fcd8502560802ebaaa372eaea041ba17b8ab4c0a5 +K = 22e901dc67eeba1c8898813e522d7153 +P = 46991eef5e13d70af791f8dbf907318e9cbbdca60c4516d45b8bf522670e71 +C = eab22d8d130e4399944e7cbcd95d89adfbcd853e4ab600ffc964b5bbe913f2e2b39745a19d158958 COUNT = 5 -K = da0f0b61860984c098fe02be8e092d38 -P = 843545093b5c680cbbd61af5 -C = 159c4eac33c8332dbca43ecd187a3137204af9be67daade4 +K = 9c4024433ef6b6006656b08cac24c5d2 +P = 09f83d9791b139a1adf6b112be6b5624a1df7d64a08d716e81e7c258c775e9 +C = 4fd8b1fc121893312b42ec5727ab7f1295801709777dc5686dbfc6e20fab4fcb007380b9fd1b3d7a COUNT = 6 -K = e0624310d42a0c72d8495b9c0e338957 -P = 7d9d8a27fad0446edde18500 -C = 3f39031dbd5779fe1e29ce54a32927302992df0144a9fbcd +K = 551abc3d33a1c23ca1edbd9804c71c34 +P = d1a962d0d0fb31fe06432b40f14177e09058fb61a9394755208b02c80e7fa6 +C = 4f4e5cc27e00a34995a136ec9c929f7c889b44e538dd563ff9fc1dbdae9f86000dbbd9411c5aaad9 COUNT = 7 -K = 637a7780fb10defaf80e649491ea9ca9 -P = d9ab117cc0f9fb261e6cfd9a -C = 7e49a2121127466b5c94538b125e607c387302c0643718d0 +K = ab83daffc43c30bd1645a830b49468f4 +P = d0b872086cd8d8f16cdf8520fce254907707b8c7ca98e9bf11ef037231c1ed +C = 4e8b4c80ab88785b5f7c2a37db1edf310c9579337d523f7f8940ff737cb114a8dd9f571fdffc8afb COUNT = 8 -K = 3501c37b3ba8ae597e0265df588af731 -P = b9220ab2d2c2f121001938f3 -C = 4e909de71e1117c3a086510d9edbf900dcd89e00531f27eb +K = ff426c9e0c623c5b60005a8739535e9e +P = 41f6f6a757887576ae5375bcc2fc41aa6649774efca068851d272e87c267de +C = 9805496c89005f00b342207bacb3af32b276299ba4371b186cb0d0e7482a536843b782779b2bc1d5 COUNT = 9 -K = 91f44178a595ab3a353cfc1da63ec797 -P = 58e6e093b1391ba9e0ea3dbd -C = 4964a77e70a28b5a33eba879dda8b7aff33c6b0505646d6e +K = 6ce69f6e644c167b8a39bc810bec3182 +P = 7e24b71a3b020b905bf1aa72d5a09b8a07e802caa86b8c9da2d5463d01c140 +C = b03baa7eff124dee0e5d93990ce84abe1f0db05b05e4ecad70df1415ae80ff1d2c5ea18478cec1b3 COUNT = 10 -K = f4f73bba35ec975289bc50ef1913b5b1 -P = 28403a973c8bf866802a2860 -C = b046bbc3e43a93b0ec0b68ee2e6a2a04e70d53c801bb6360 +K = 68163dd0f849c7ee783057748ae801eb +P = 4d9ace0e2ce4dc379aae1194d2646f345a5e511691bc9ae411df73e194a418 +C = a8c442589357555627aa4108a2b79654d200529f4c74b89a7a83685bf238a58a977d73187c16662c COUNT = 11 -K = ced2c6af3ca058a0ef82686d4f4f924a -P = 763f818a120eac46e25ed7ce -C = 245e88e17bd4db7e3f6b9bf306d3115d5886958aca4f01b3 +K = 819a2e4d26b28d463e8c770dd40b95ca +P = 5dda09051b11014dea2b7178989767b93b14ac460e7d3b01b71ef5514005ee +C = b3c42c525494521f3cbd3c68a3c54a85a13c248f0b0c3e7a6207bc118032af7bba932d3c31737c94 COUNT = 12 -K = d805a9b182e33bfcafacc36e3bbcc6b0 -P = 9993dfe4fca1a49aa8975364 -C = 2e05f593928082556db57b087da09cf0d3bb9ffd8db80860 +K = 6f4f77c8016b8e1ea31a16ba0424d0b5 +P = 7d3f455ef75bfe59901fceff0dc0d1e4164311d2ca32b39e36ba09171e9ab8 +C = ef96956455650e1557c0a4843947d97cf6e0c6875a57fd61f554ca63c6c2165011dd5423660a0082 COUNT = 13 -K = 19efaf12615c94007854e3830765bc8a -P = 2d23062d4c7a17fb8bf0f3ef -C = 7833d1f704536dcb9c6d726cfd1f12b42103034788e2b176 +K = 627c41e9a124d9809a80444346f6f187 +P = b4d009ce5c5048c7461423ed19dea5fe7a6340758b0b9c99c35c0ee212dc3d +C = e5eba81e5e31ce346649926ead9c1d26b44d04ebf1e88d440df1bd41b2e8eaf299e24f7e73496e86 COUNT = 14 -K = aece8a949a81f44c41fe5022629bed62 -P = 91481cde78ed890f3b0a3fd4 -C = 86ba17fcfd13bbdcd76879f524a9b18eb28c54bf4609a13b +K = 8d4ce5cf79d08a27f96f6b766c974443 +P = 50670dcc13c8e9f679afc73c1dd09ee0329f57943e227763fe376bc96b5e29 +C = 0bdc7df62ad1540e544550d99313dff0b2e704a7d09b44d9db637b284d0605f044f56d593bed1489 COUNT = 15 -K = 133f2b401d27020fcbafc5ae23250049 -P = 55a63c5f6fe4162108f58db9 -C = dd91284bf9b7592cc4bdbce434812fa4d10b0b1d42885979 +K = 1d6558ad72b6e7272fd315475e548e21 +P = bda7ef953cf82c2c2a9249505b82d336f6bd9d80e1f77e631ba77c43ab433f +C = abaa5b4f88a1a3d2d3f2f4cb177512af430a88d769095534ab286b9183926e86719a0d6069ae71b6 COUNT = 16 -K = 5fb4619e750119a1ce60470f29536e15 -P = ddebb3d59641ec0ccfb37d59 -C = 35597554fc5616dbc538e24a6dae5e498991049a42b68745 +K = e0d7dcf84854f81a89a9f9b3e5f78df7 +P = c1d1924427af48ed591bc862e3dcc0d479c804b849f7e78bf77df2abb64c26 +C = 8f284a7b9e1cd80074424311d32759da7bb8fa1eec12c28ab227dd1e83a4786ed4367f6da2445ac2 COUNT = 17 -K = 84f11f49e4e2cc6d0c51110b56c68c03 -P = d0664e3e9826f803ff6b6b95 -C = cdc0d84f022bfa0d594ef2ac5cdf96e1b9dcb6ab9565c789 +K = 578194282241c072370b669ca8988959 +P = 897eb78a61fc6bd0d18a4d799242096a31572af590fa539c4d1e0063d0af26 +C = f364f564a83b48f0a985da96d53b73457f85faf968835a837541a9fadfdb2411d0f791f1300bd037 COUNT = 18 -K = 27538dfbe97c6416fb93d316c8f759e6 -P = 0778bf6929744393fec1e7f8 -C = 8bcdf527be052a46d54008686438059b5418d0eeb8643d74 +K = 486db2291aee2b01bfd8ada56d71110e +P = f54ca9e77cf082879c1cbdd861167053bee2c2f13a8c9d9c98c26dbb04c110 +C = 8adad0074a88eaec92d70f67f97ab420895858566f092062999b6d73f336fc7529597402c5542008 COUNT = 19 -K = 63670ed68f8fabb8cb9cd7df56f84d9c -P = ef99878f1a7b71b473caac88 -C = 5b4be32197e2b3ac44a47af4bd731b7a97a043da8eb7a374 +K = 0fb67f58650e197bd11f17a1b20afd70 +P = 81b4deadfd1326c6458899c370cab9fb7bfd453b98cbc318bca17c1d4d56ba +C = 48f7ce044e5d5446e75804548e5ee6a5a44d150aa5c23b2030d0b6e1693e239e14a04f783c3fe4c8 COUNT = 20 -K = 6dba5a6b3edf8a49a882df7e1ac7b2e4 -P = a34c0114c8d085349f8a4b03 -C = 41d20fb63773b07798ae2643aac8df8c06d960663f1bbbc9 +K = ad2db8709591be9ed6995c1b70b43770 +P = 9261747faef08e9f7c1561a56600c6adbe6166668a5cd105c5e2c87c9ee0a7 +C = 0b1a14da47c0a04d11c8bc5aa6ae76a90863413c19e5e3b70614d95002ca95b9f5ed0007de5f0210 COUNT = 21 -K = da28bede7fab6bb0a86bfd0ac9fa65ea -P = 3a08d3ff317af9e906e30869 -C = 0b7b5ac7a199e23a208e7daaa6d5528afa44766fbba5f98f +K = f2853347b544e77cab0446e87f937f65 +P = 07211b6c09e615bbd831dfe9db7d33da0e4e523e91f35aa7011e969665e20b +C = 3aba1783b0ddd5dbe1f64eb41c3862dfbbad7045bbd1c6b51187ec558070cd68f566b636369b2738 COUNT = 22 -K = 11628c390c1c61ba91a8a63706c52d3c -P = cabb12dea75ff6ab7e9a2e69 -C = 52cd47324f97e707dd688da4156363a6ba983192e29872d0 +K = 22ca98ff29a9e19ef44df00a27733d14 +P = 1dc0fb91600c962847633bd6266878eaf8b28a6bb878ff6509d2c744f08653 +C = a2f374a1e4d17298777d3a27a139c17f730cf83348247400e035ffae2c2deb6bebe8f02d188f75a4 COUNT = 23 -K = c0d35117e975893e0f2f505617a3a3cb -P = 88728f12d0a5e5f67a477e21 -C = d7a6876e3e47ddce8ff830c27896e457ef9a1dccce71b38b +K = cd9cc24acf3e041e32f619daff774dc5 +P = e22257926a082c61cb5feb9521cc342ba4134eeae2ed4de49d0df9886c6581 +C = bde6ab88d60f608b50af2af424bcf03cca6420f1169085b9bcddc34ec71ab14c4c2302c8befe7a36 COUNT = 24 -K = 4be0c85b413779d6e566fddb8604c7d2 -P = 416cdfd986c157a288192818 -C = 90f974b33e61a42c5308ad906aae931d7a53e1ca4b879f29 +K = ce40ba7c8be708843913b7fe350a660a +P = 6d7491b2c5897cc38839880beb0401c05766b73caea49a798d2fe538e01eab +C = b11a105ee471466a996da95d1b8f86c188e49816e156082f3061a749ba808c6a27aaca3eff7c4614 COUNT = 25 -K = bd05fc2cb2a9e521691958a6dd7fed91 -P = 242db14ddc1a31da7db8cc2c -C = 5d6997dbee1bf4d685f41f6bcaa0f616c82cccd302643e39 +K = 9a458a57c5ef448018a26b99ad10f840 +P = 152d84b202de6a96f43f31350f54cfab594eaf97b30698c04f9ee95fd2ea10 +C = a6fa8764bcc584872a559a6cb63741de009ff7d7e0bc54e7b24193733d7f40be75532989d686de83 COUNT = 26 -K = fcb2bbaffd02015476658cfa6ac62cb3 -P = 8d396079e0a15d8adbb6083b -C = 6507ef1bd1427c41834f3348e08873c99b012f30a2ec5d74 +K = 7c1b0aff8857394301044cfc075882e1 +P = 4d7d4cb09a38af05f405aeeca2e50e2eab122831242d41a3f7d3b2c48a9475 +C = d3118e0d0723debf69766baefd344f1cb108fa1a72600aa1c62aeee61e9a5bb79384a50f2e253b29 COUNT = 27 -K = 1a2b6572ed626e8e4414fb1afd3bdc5f -P = 1c2bbfb4fa54732753469db3 -C = ddc06c5b45b3a3af8a675c9373c55e104912b72ed424599c +K = 2b8bd9bcb5613876eb62370f6afa7daa +P = bfeb71e9f34a67dd6540efed120e1d06d909f955b2a7960f1020dae6d36a36 +C = e947ecc9e7bf5f9a556e2c7d3731212bb394d7ae5d360e782e4b5703b48e32668581b5f09a3c0e2d COUNT = 28 -K = 2aa1d0407338808bcba14539bd655017 -P = 45bbce201fefa58054a21fef -C = 9bc079bf9a702d9d0db82f5de0c82de0b07f30f66d9f1379 +K = fd5229eb2acdb18c0250916685ed583a +P = efe588716e337e9b23c17698ebfa490fcda0bdd301aefc1441bdaaf4362c7a +C = 939be9f58ad067acae8c44baa80627e5ae50a29f9153ca74f450be1055f2f89b95a57567c9b6b64f COUNT = 29 -K = c2fb4d41f55234bb64e95cd11b0f67f0 -P = 2b8fd2d3c7ff641db4c0439d -C = 66dca9ac441903496cd63a03569cf1d61b301116983f47ab +K = db205a5d57a9430fd566429053e8726c +P = d2d84ecd7ee756b956de7926692eafe67a27f223efd0bfaaacb3bb05021e7e +C = 6359a9b6c093eb309bda3f41d6ce785a87a5116be8d5d19194561eef0f38b744ec6de2fccef537fe COUNT = 30 -K = 4605960487aa674e546a20c651d1b707 -P = 8d701132a36e126bce265b29 -C = 94cb818c15735d478738696a62763ad960b891cd0d1a1bb8 +K = 2342a489fbd8d32867c0b8893a8b7117 +P = cf025698e4b5e03457c24e3c3b74e1b94d42e1b40d3734203af122cc3c54f3 +C = 6b9110cb1fc9413ff1425c07346146bec1f29ed9e79852b7e7404f50e810c5e43863eba64b1bb42d COUNT = 31 -K = 6ac80d4ccfd7fa637abb728a6b34a246 -P = 8c23694eedbfe5d279dbe3e6 -C = afa4ae4667b30abd59668f7198949c7ddb017804b16c2257 +K = 2aeea3e287285b016e819de56c9c81bb +P = 0a65538010bc34289ab2080626f29471c4dd2a84f1c37ead5018e53675de2e +C = 26292b1cfe99a845f004ad1bbf7632cc6686d91be1cd2a79ff71934a5885e2a538fe7e49e4cf692e COUNT = 32 -K = 24a4abf211951583e016a4b6f5bea4b2 -P = a7259e8746382a35a8dde523 -C = d16823f5922f28c9417f7d28a52282ee138ac8d09f133aa7 +K = 865193ba9d3550cc3b49dc5e88b787e2 +P = 3ef31f5630619496ad86aab1e97ac151ee8d8ad73031b4afdfbec504055fba +C = bf7477b6f481e1f538a94cc8001230c9498f742be969cd6e35d8bdb7a66ca91d0da281e6e27cab6c COUNT = 33 -K = 880b042a6462f44038528800390642e7 -P = d3a5d190dfe589b701f0a532 -C = 14ce148123fe921272dd648efbc8de3c94227081d7aaa891 +K = ab5aef42904a3e743ad3e84b8b389d02 +P = 80ba89c4221c95478693a0f30e240694e49748e17913d04294ff80e91930d0 +C = 781ca650f3c00c8a6e8a94903f289a68fdae909507acac17a7208751f9219089913625a9b6de1edb COUNT = 34 -K = e65aea230c84627b11b220178e14cd4d -P = 708e61b2caa169b46ab4dd27 -C = f232ff5006a8bf4119d5ee7d5f0c19dc22ce856467474ba5 +K = 435b92e90d516166e3695cf411db6e56 +P = 7d63dfe0eef64e47a848d696e5864cd557fc18a163401b0b2320967e6815f7 +C = eba564dafaac9c2690d21bf8184fcf5b4415b2ac9f63cc472ada64cb1a385f8b18749baca7668ef3 COUNT = 35 -K = 5527a38b7e5e8c1a16ba5d5e5c603888 -P = d9905dcbe58065741569ccd9 -C = 300a90dcccccca9a5b8cf599752870059346574a7fd7bf3b +K = e6fcc125d4b9ffb2a16a3a8e9628c317 +P = 9997a829691143047bff0f45a0451e755acc635e772a608cb7c116c73bf23f +C = fceae8502de7101b01b4b47d67cb455934f6f7a480ea5971b023c63a7b28ee7c6596bf6173280f88 COUNT = 36 -K = 4a8a73d5b1ace21048f21660ba6bb153 -P = d11e634bbf6fa8f572d541e6 -C = 579a259f5810327e0d68681aca6958ed55faec7f32955448 +K = 2ca4803815ff24166df6d0ef5d130139 +P = 2059eb5c4f158eeda5c34d9d693ce2bf06daee803ae23d67815b73c7f1986b +C = 4cef7bd1be732b3f895c207b7496d5147afce31cefaa03f31e95a1cc389d8e53d533be60c3f22cd7 COUNT = 37 -K = 3c809fbc7039b0d0e64fbb959eef9323 -P = dbd68a22110fec1bd5ea3857 -C = eaeca1c4bb5681c2a1ee8c347c625b2ab3d89de77c5efe33 +K = 102b0de6291e493c71e3ecea6582a04a +P = b57156a37211d9c27e11283a970873d3ecbea6bfaa25f90c9725715051b855 +C = a891dd9bc42cc10761fb92cf0b47d1d03b5643f1363f160fee7bfb97bff530353f7dae08ca63f8a6 COUNT = 38 -K = 0973d64e875de6323876afd87e1b688a -P = 7ad5109f761153363c25669a -C = c813139279fdb7aa6d12b725848bb02a5d86175bc00bbe13 +K = de2c210b8161a4f17137988474590a6c +P = affd411124c3ded87b45b9ae8fb1bfaad5089411a31d12c7c0c6ac5478d948 +C = 3f9bdc0f0ab59b286734532ee100afb02f63491f76ef3e426828cf90159b9c77da5858fa6799d663 COUNT = 39 -K = 5b2b94b8433b5ae6be804541a30ddd48 -P = e1be83c2eb5444926298390a -C = 0a5d319b942e12d835c53a9c442e152bd4fe48967e548cf2 +K = 0d6764141138c8b414c13f78745ffae0 +P = 3fbef8d26adafd1c18486ae162ceb865ad7425926c014ff107df51cdaeb581 +C = fc6960021addfa8cfb10102e7eabc125292a7116940cf190ebe40004185aa75f17682891cd8b0a74 COUNT = 40 -K = eaa92c2917a937215945838736d98abd -P = ff695e6e673411b240b5c83b -C = 07d42932e6369196f8449ad5bd6d98339c3b0a6177c47ead +K = 71a357fafa06e566e381890e79c0868a +P = 10acc7242721921484454dbe437ea6a28607a326701836b1e990c1a96daf32 +C = c1d24201fff3f23a1b963dc9b812a625189f986cd8786a01e5fdd2892603c349d7118b0bfaa0eaa9 COUNT = 41 -K = 6e195605cf1e9543967a50d311aa9446 -P = 956d8abcafaca047d4642412 -C = 1ba858adac56b8601b67d8b979a95c95ecb6f96292b3d776 +K = 31bfd58754ea2885ba6c59a030dfac00 +P = a58b450968d2399d3728fd239c0ff3207d4c75171f6b89afad690cef5603be +C = cb749bde4c6c3d6d28ae425c78d6714c2ca988e3ca1c87e86d8a26ca1497e5d7219837d0b6ce2f17 COUNT = 42 -K = 743a868e110e809bb29039ea82a282a6 -P = 8c5634617b15b1179833efe0 -C = 0724f4c0ad7283f7f29af294a30b98d00fb09f5d7d7b4e8a +K = f686ccf0b94418dfa4d9ef5db826144e +P = 8dc0f8a9de5f8de23360a35fd70a672bcb3f520981496bf59dd3f665c156b7 +C = 0eb94605f74b07e8c8a999ebff322c537ba345921244f734e7c99fe572cad50750ddac9ae5e72035 COUNT = 43 -K = 9486bee58aba2ca9f40ad4a452ae5054 -P = 1e5558c59e495bee048505d8 -C = a99e237bd9d18900d544a7c0301e75f536cc3b5025e01cb1 +K = bf262c86cacdff5d80f29b49e9faeba9 +P = c0ddbc20a1e65a2f47f63c43f26a23d518d7a356b05b6b105dc67208dfab3d +C = 4b898338de867d8028a7c307df4801e673b46ac9ab93756793c3daa03aec9faa05cc8b7f7d6fa15b COUNT = 44 -K = 48dd7b287524e7b5acb1a6adb38b8313 -P = 094597ed855dc792cd7db58b -C = 2a7a2d5ce36541be3efd1b3c788f87636af071ca74706ee3 +K = f65b897ade17d19d54732ba691ba89ee +P = 649e5221a437fda3d40ef6538b0c0fd814627687c89d563d5a3032106149d0 +C = 5f14d2cbc6fd74d900b8e19611ec0e9e497a569dbfb29766c684f2a1ebd5a7b72e448c9d0483c4de COUNT = 45 -K = 716af164b721c4c4979c998741b1ad27 -P = d57bd32fe15f1568d26019dc -C = f79d8574ec63517ca01eaa4ea9e2e83a6b2fb4b17bf56957 +K = d1c3941ec6240dbf4cfe1b4d2606349b +P = 27e5f0c1ae0213e201b141c49fd2361777ddde6b0a391342f12982c4243181 +C = 3a71ed6360c0b9c1fac6bab9c9994a595d79de699be30dea66e1001f0e2f792062e3e7c92f2f1948 COUNT = 46 -K = bdcd44a18cc6a16dbd2172070cf7dcf3 -P = f4ced0706ffb0180214a0967 -C = 83fe844f31328c9985fbfc585bce115046611170b58f942b +K = fee62e4f7f72b77d6c5a3648f6c4af19 +P = 29210e4ffc01c8b1afc096182a0af1599e9aaab5bd18e1d5b4fbb9121ae364 +C = 88fd2c948845443877f451f69ac773fd149d7f6facfa57aecb55a66ca07e659b773d4181cf47d865 COUNT = 47 -K = 1fd00da7419feffaf473790e9483f240 -P = 5ce8334b5bdd294d8165f65d -C = 41c5287e84d042eeb3a42ec7d25571bf2999d32f6f4cf4de +K = 7ca32a3f6b2632fad3a8a03392cf903d +P = 099aed76d7caac8ad6a6018999d96d644b6ae1af7101e5a24c3d3f83ecccff +C = 20a8fb4e0744b310a93e1960b2f3e1329746221cf76a0f8fbeb3f6f8d614dd22722c4b956cdd3690 COUNT = 48 -K = 1bd00d85e04e7b8cff00da99facee99a -P = 51af08f53700534a090ae446 -C = 214e48666f0dc36c624451b609d05f854e4a05d470084810 +K = f46b723d5076865d3475ee2288ecd57a +P = bf0d0e7285b57ccd719ed70191517e1c8fbdb697016856c3673d3c68d05881 +C = 502b96de05ae162a7387684ccabf126c36c76df590eee4c722d57d695e56413c62a1714ded409bc5 COUNT = 49 -K = 793d64f77d0152f245ac3da6e86dc0b0 -P = 02e0ff368b52bc402244f1b2 -C = 677c459212825a009a2f38abbb0955cb085034940e72fbb1 +K = 887a3d6516b5a3685a555ccab1af2c84 +P = 1f169f94e4ac21ca837075213bee5cb533014071112e8a45cf0e7562e78b3d +C = a11d3a1e3e3153bf76b36da1f854540d890f57f762471f8557356ed7721ed4397dccb2d3a9c16d31 COUNT = 50 -K = bdb8592e1dcaf72e56f91374a6066a43 -P = d93033a05d23847e57b8d43b -C = 6a8a4c1201b1c3e354c4d64c5cd43822c1c737331966ad1f +K = 04896150cd44b88887e54858d3cac46d +P = 45c3f3e96b1e2a688b6ed6c718167933acdf99c4c9b08ed3b3d80f81d82e68 +C = 5e1f39c2d745e878bff0006c1620caaa2f8037ddf6283ed4fe882909066c67b02d746bbdd6bfa0d6 COUNT = 51 -K = cc48d4548062f290dbb821d639b8403b -P = d28305bd33442bf99ba750a7 -C = daa8777f6775c395c741c7adac98bca10ee7f2059f9fbea1 +K = 1662add62a0f74a3326beb3d74d559d1 +P = 28178da428af2aedcca3e5703afc5aa124d7ec3e6b27de655bc50b092d8b68 +C = 68026e96583d1c25e8a00d8733f32574cc33d2956eb11e4cdcb6630d4b91c82158afb4996c1afce2 COUNT = 52 -K = ab8affcddcda04c043c0ef1841d50afd -P = cd1b731950c65ae418af4ac0 -C = 6428cdb0d7999956bddb5a1ee3afcd1df1be589deab7605e +K = 29822af0d7bda204d73da01b96533e96 +P = b10484858c6bca4d79ce15890381522c819c5b6e57e42f47053c17cd45de2d +C = 2a6ef11c47f5ff09b2dd004aea0e5817052f293cd8c053d46e6c666f9e1e6042f5bde3118f0a340d COUNT = 53 -K = 0bf191072b987c0225c4600a2db4ca4a -P = e0c015057e92ce58e8a2f39d -C = 8924012b1c041dc97e1d0b50176774c69263fc78b97459a8 +K = f378385bfa41176ef22cef688ce91290 +P = 338aeee86104b5eb9c75525370ce44b1b0f299ecdf5c68e12ce10ee651a28f +C = 06e123503763e83587fe6e171bf5d7cc4f74119814f02e00dc8de013c3125609473b0bea46a38d7c COUNT = 54 -K = d483842c1d28e64bd4bd0735deeaa2c5 -P = e49c7c65834e10684144923d -C = 36a25206a0d178ad00082a8d61b75b895b55d74146556abf +K = ed35cd79f88632240b5e764d9598db5c +P = 240f73b6affdb5aee6e6d330eb9d961ce0a0662066828ccd5051a569258e4e +C = 7eb6fd2cdc54baf676eb855b5527ce4e32ab421419bd4ad1337b3ffded0b43ac6767e86d9c56bf35 COUNT = 55 -K = a9ff418d61c87e94aa833e32da58855b -P = b6e90367135ddfae19976c3c -C = 8f7defc138393923525419697a3e23120104ee5cfeb8b819 +K = f59967acef7b15f0d18fa39c3ad7494b +P = 9fe69ccdfd976d5d920963cbaf347b058afcb2bfeac76def007a05c68bc282 +C = 33d657668a8ead829ca66268b6c2942623cab8851424213039ec059e94f17e9285f6fa3d65a7b9c8 COUNT = 56 -K = d0067dc961e3efdc6165b826a0e85e9f -P = 455e7e2b307dd1e942615b41 -C = 4fdc139b9dbe36a43174d547e3a21a5cdb32d9ce1a497a81 +K = 6b4981feb4f58e475c22d519563e4049 +P = 1e2b192d2da1d170acbd3f107e20d5071cf0dfd9219d7bc17b4db219b9f18e +C = d9d4654ee5c46ed359468e3ac063618714b42e3cb1c8e8b30c89c366f934e3a2a94154b0524103b6 COUNT = 57 -K = 38cca56205e9a0020d909a265de00722 -P = c1b071214403b075e671f0d9 -C = a45c5a52a0282e6d6db4ca76e78d7584788c52bf56f5d659 +K = 68d2c92396944cceb308ff62b51a033b +P = 1a89dfeeee5cc6ca0587fef4d1fadfcc733c9f11c89afa47ad661063a4444e +C = ee3d5011fccd73e5fcef6379a64f53e7bbc781bb857b1c350fc80f47602e16ff72cf9d4d38a66d62 COUNT = 58 -K = d5364fc83b9c2befae5a982b953ba992 -P = ec3081f1d9c4f3a13b179e57 -C = 395a294714024f0ef3d4bd00b41ed53f1baee2528a26244c +K = 4f822b244aba34e206eabd21a8c4625e +P = 898d0698735d39bc876a8ba593a7d36ecafb36abce334793d3b30f196c5f15 +C = 3cb034ad74e2fa08e3f1f801da236dfb735a8f531e39dc7ab6a9cd2ccfb289dfc46cc385053c86a8 COUNT = 59 -K = 2596144a06329813937b1b3091331c88 -P = 62899eda9f3a207044642ad1 -C = 5fc5cc46e27f268effe276266c36e9d3292b86971675c123 +K = 7b28ad9a3db2531df8537bf58028a0e9 +P = d39ccbbe2f32c7697e2c8f61a7e9e748219ff9ed300b889832c86ff316af4d +C = d97b4b3d3df492cf845e0b841fb5ddca3e149b5d46db917c55a82ca06d690355e1591891f5cd3437 COUNT = 60 -K = d6fda99f3bf9f75cf3b15dc7b1106e41 -P = afae6e6bcd747d4726856b16 -C = 92cf721365e51f5799047f1f03cc0e48850a5498e1f72d34 +K = 7588b45a8c790df9f1cc2f6e79f919f5 +P = 4040f651ab52af5b6284489b13024db301ccd9644625d42d6ad18d3e1c0879 +C = 14c5eb2148eeb7cf7e692f773717fcea1e1dd9f9496448341cd2ee2a3f0412acf6a04a60a9c94f86 COUNT = 61 -K = 0f5f2af7aa3e777f5b91ad21ddf5145e -P = 82f373dc2ae63c2a17e236b4 -C = 765897b81cdcb7d93bd78878f42806cd8f458244a3d8b30a +K = 74705de6860856a529e8c239be8172b3 +P = 153340cd2ed74fe02fbf3d86a47c058b95482c4724abf0976d973ecf949d87 +C = 70aa7a6a2408f6610fa824c0d0e2ca6630ce633d4c3bf57a38b4a3be29f6e18ae01cdf5d0f6309e5 COUNT = 62 -K = ea2b5fce9b5847ee58540c6272c6140b -P = cde0398e22fdc1b9de1f0319 -C = ddb61af4d56e180822d9a3478b9079c90bc0b35f1cbbbc74 +K = dbc2ee6b1ec54ab43d4b62e7915f037d +P = c4510577d8048fe61cd3fe564415fbc96d1312e745f1250339a6c3ab636f8b +C = 3c87af87d70b08a924b37ea7e579aa24dd9a56baeccbc7ddd66e391d319a1e22dd087829913e6dd2 COUNT = 63 -K = 5adc77f6dc560ea4ca0189e58a5f571b -P = 42c9be5655162ee6ce91ecf7 -C = 9ad5677f89e668011109e709d4e738b1fe4c0a0be8a99902 +K = afbd032bc8cf33985c2e3af7099715b6 +P = 61098923cd104539934976628f88b05e02c15e66b924fa0ab090a2fa1f4fbb +C = 4dca55109b3abbd64dc40a54bdb17e94c5eb7ad8ba16c31ca50573f8537e249044c973ef85ff8cab COUNT = 64 -K = 7baea8091b3bf58e1590f3d7ae2b504f -P = a34a19bf5de16254d57181f8 -C = 1f20bd1dffc115b2faeea516adb48998df417d6c0313866c +K = fbe63be2657779c17be17932cc7905d3 +P = 7f2d1d0eed6f0d30aaed6540898daf180367388a8cbd2a58f50466785219f2 +C = 4aa4ddb101562a5deca61cdfbc3ef337b0864f92f5b886e946b7859744262d3741ef208d0581346b COUNT = 65 -K = 5c1200b65a593ae221e5a8780e5a4e23 -P = b5ba59b4f84d1f58fbd1be41 -C = 480cd8de9a36a699ef1d2377df09692b38574b28a432025a +K = b2b131b3dfde2d5295d4b58acab4137c +P = 7d6e2fe9f4c8bbe825f455e793e8f2d388e94753108acb9650e9844b0a4e1c +C = 139f5f814110aaae85ad7c866ba55587d1156d53a15a33307217c3819a4be810e91a7011a912bff5 COUNT = 66 -K = 35022a4ec35848ca3b21dfe90c6512ff -P = 977af5733e63387028c35b1f -C = 4d0fd6961580d082dd5cf190748466b201fbb6f903d59c25 +K = bf24230e0aeff47f667dccb3088c4da7 +P = 1eee914c8fe6bff039e49f6aba854c6ab11cb0274fad2fd0802a8dd9ad2981 +C = 3086a643ef3c381b1cf1b2c8efa0107b9bbb3e4f507298829587922d5868ec7d02c1de219c40cc8c COUNT = 67 -K = f83b1d19a61ec23fb0fe8160e2ef58d0 -P = 90d9ba205f3997d79caa14f1 -C = ba4b1a19911d0e4aaad4c235c0414f7a307d2e72e3d0c196 +K = fd2bc320a4003c2d32dc29c57b50e936 +P = 90a19a5d27bce4dcac8eb20771ea5f907014871b47645173cc1ea09ff9cbf3 +C = 79e7b8d52b4259c28aacd2847878a81be3234631e1800213f6ac1485e018b9dc2683db6db65e195f COUNT = 68 -K = 2efb3692ca5d110406b2f9d85ed1a1ee -P = 873273ad02ce621f83932db1 -C = f48e42614386cb0ea0fd19a8a9fb98328cf3f25fdea41781 +K = ad927fb23fdbab58d6f4061108bc28c4 +P = 26b14dda75a89f5198c728261556939f703caef3c4109f343707581ed57ba9 +C = d75bfa5c2a2c5de2fc7f0c626c61b024aefd2fbd444ae4d404371177dcb841f6f4b9ac5191ffe7ce COUNT = 69 -K = 59214263dea3a95c89966d5832875558 -P = 125d2c72826d3c5078070c57 -C = d11cc02d94d57090bbcc15f29fb32dba323502be98c634d2 +K = abe38a3b8bcb149e44f93a16f2f7e5d5 +P = 4e77600607aba7726b5285a22e90f4eaa50abf91463d4e26e8ba539203f57a +C = 7f2c6c56627e912dbfe6ecd5937ec7cf9aff15b0d81937d7ac3f3df36238551f230a0e1cbe9eb1c3 COUNT = 70 -K = b775aededc27ffd7ee2d6a07a31332e1 -P = 83e3ca82218de1aedb29020f -C = 5a52a6e962a3ba5bf789db3ebffa73922b37afa951c47335 +K = 808591821482b512b1e01c0db3ad9f2d +P = 1d609c9f23cb1a4ea9bdb816f6093665b9c27202443e02ee31162f858f93cc +C = c11be64fb9e7da0aaf8d65314e7d4b965c529e09b994086b7de157f3de19f56cb522295df437d638 COUNT = 71 -K = 9ed6eab0dfcd05648c17fab4a754e2a6 -P = c0cc137c32b501cfd21137b3 -C = b840d04930fcde680068924d77fc6b325e52bb53598137e1 +K = 28ee08a663a6863c4651001ac100f7fe +P = d6d02c7d48d8f6affa6c4fc901bd2206d969fe3abcdf50fe18fa215826de99 +C = 3982138e9e6bc7915080d80ef2c40b76c3967718e049db84e9b043bc580e363f97edb6322d83910b COUNT = 72 -K = f668583fd31808b6ea3396b13d89718d -P = 698de20965172d7c82280e87 -C = 39118dafb049a63a9e3cc59ff765277adf45c3e872bf050a +K = 0b7f1efa0d785ee254edbc33bbf5c9fc +P = d24257ab781d8233c9ea3c3e8948424234fbd77eb9f2c77d8191c6c6450c28 +C = 4733a2c2cc64787eef8478507bdd77054b5a5dbd794d6d0c7e2dd6804a2f890d6699614dee56cb6e COUNT = 73 -K = ecd16efe9ba1f1e3f8b22c1c9f5d294e -P = 1de063dfac4e8005ac8b2031 -C = a6a47a3d7824aa80806156dd786cc2f43ee034cdfc8d0326 +K = 69e52e100e1942c8d6569372bd3dcf8a +P = a515985d3b0f7460a07a960f6d023a6f7170130f883fe7c780deada3113484 +C = b5d6bb3027fa75817360cdd3a8f6792c849047c1d796cf4dcaa30ff5992f9e470dc94a0cfb05b314 COUNT = 74 -K = 7f26c3e77b4627f74490537c01d63e18 -P = 97d44b4d0f5a1e6f53c7af7d -C = 38002ddf18f8ecb9910ca8fb57e276e3c355d7aa6f9899fe +K = bb0e15f68e6a51af5d70400806fc7958 +P = 5948ee48d06ece247628f7ab518047b3884b7ab417aa63a66374a4742b304e +C = 81ce0ac62df88eb74f251f6855cb8803f1a5f8c54ce5b31866d5d28dc34dd0979f1933167059d70a COUNT = 75 -K = 443c77b777635f556c8b87235bfecdd2 -P = ab2907b6edf8cac403da9ccb -C = a3ff12efc8e272b6dcdd405a9fd48542b3b4877a27b7d086 +K = 9029b6ae223c66055fd9ec7fc736680f +P = 4d349c7e7d80951e76ac6d5c83723865fe64db7de48cf8762ba666d2d1421d +C = 9a39af1b372a948fed9a307a43e383790a96dcd377b2620d6e298970e9bc2bfda1fc5344e7e2556a COUNT = 76 -K = fe6cf5ca6be5cdc7eb88a2c56053a03d -P = 1e2a607029fe5fa35329ab70 -C = 96fc49c741dc9a7d9c043cd570e1fcfe80a2c6f9cbb50436 +K = 25e4816b378f500451de2fa9a5d1797f +P = ecbd6690719640a72861213deb65dfb06fcd550cab57cac63957d60723e1eb +C = de8d26f93c264b2310a2be22ef39ef9db985ad627a83baa08278b36dac0f709b1195ccd7ade009be COUNT = 77 -K = af2b70cc033e45f35c6469eac498dec6 -P = 6e6e213a128662fb6cd29d7d -C = 0b0a79b71c42661e4e7b8b5e7e911338d01887e6b361364b +K = 06fe57d1bff290ec0e85227fc30c67ef +P = 4a893a9770dc151b0d0d46bc0877b7646c3519bd90c3547057f99bfbe5f9f6 +C = af4e30013def403090d91da8391ff785f5044414b28b28ac36c1a3e9b08a539f27d9cb391eb4bad5 COUNT = 78 -K = 7e7361c965dd48232c01f6f793a4d451 -P = 62821229653880fef0a56825 -C = a410343d0042a8109fadc4b2fc9eb639de710c847d6c5c3f +K = e907123506a088363f016b1ea7d4932a +P = d49906792f24d74970d42fd2d399685f1213d71721fd853522a14e1ae24cc6 +C = ed39cd80ee57b8e99debba296f0cd1d3190e55c2887a8380fa7a5f4246f5af3e82f1ec84931b9a01 COUNT = 79 -K = edf1b7f7bc784e0987b3da4e9075687d -P = bc9064a08f4818eb05d96ee1 -C = 308020962107d6c6fc3a6480d48ca7b25e9ea8640505d57e +K = e6feb95b78b66b41876dee468e342779 +P = a31166ea448acf661312f12f779ee8da3a88884d3a9728a94c2947d43711cb +C = ffdf4c547ed65a50f9a2e7f7d001f6a7b026d352dbee76a92de33159298ad89c689dca51124b1165 COUNT = 80 -K = f436071e1c9a3157fbde0ad51e34bd97 -P = 3090ecec704d32e7fc579be1 -C = 068ed2b7e3830f108688cc1e201e715c6d185aef3c489cfc +K = bf66f2136fe3d7787164b9099ffe4da0 +P = 960cc921629b39c706ec7bf526908c1860e17fea930c4ef2e9630df6a79131 +C = a14e7ce5b004af89c9b4942f1e0285d043bce4f61f06c5ba9207ededeaa8cb7da1232fc8e2c0ce90 COUNT = 81 -K = 5c33764ca376a17276f4bee8b0353772 -P = 1ab4dd6325e05f9e07936ba0 -C = 3fb84a471f4abf249e15ad4e0223f10a1d22e37cf34af74c +K = 006e6deec9f9b6da613b4d057986cf39 +P = 7575e13cfff2242dd220dc6a0bcf073a06ca27351b5affc70c45dd591ba5f7 +C = 603a28dd6f83213d12674e012e77c76434ac58dedc2a0256d21ac8541e936cbd8bbc0c5afa3ea691 COUNT = 82 -K = f418e1a295e5332fcdeb25fa12c2e89e -P = 9a34e55869b875f27abcd80e -C = 56f17c6c7c74de0be6e87fb8d5d8fddfdba48260b3580652 +K = 2da6483ece729c73dfdd0253bd1d630c +P = 84f642603342723a5ae98cb22a332ca94273a06e6d26a3cfd026c4a12a6bd9 +C = 93e02c782b746da4fbb3981d2cfc75acb667354e5721605191e9c825d029cb16e85d7ac8b96116ce COUNT = 83 -K = 3f3d04e1d85c4ef40aad10488dbb8c14 -P = 9029330caaebf40e4ea6b188 -C = b972be12f35e3515038818017a4eb7f15f957f34da517674 +K = 20656eb45873431509868aba3e6af362 +P = 710865883bf677e5387981cd2009e108730ae0f7168c41d764155fbf9500f0 +C = 1b28ceacd3bfc5c9d7046e22c79be86a01954ddd95da745f610ed31eb0d6d44a1d2b1fd1f46b9879 COUNT = 84 -K = 1062feabd38589ccf5344e81905adcd3 -P = c24f5ec38ec36c7b10703011 -C = 23229a8f19ad20eccbf53c20a009315c77dc5c994a2c750a +K = c0289393207bf3b356008ad4e51cc40b +P = c84264da0588969aad47b57e67a1be57066ba6186d394b5efca315f95c87c2 +C = 9c4364b5e85e16bc3b2cedf2a12ce2577a2070ef49bee8c6b1d69fadca3204d35384e86a0e3ce98b COUNT = 85 -K = 56185efb0c3767526b97d3142a5c9a56 -P = d8c8186387f5b4800e18fb76 -C = b6cdb26281e8d40a099ed13074721c4a0e55ba460e2d174a +K = 6b002ff4e8bcfdc4f998bf247a508cb3 +P = b2bfa7e0d38f326e0d569942a04dc0c964b18bfc600fc86bbb70b856cb35d7 +C = b3e039f4b2d4188aad603c7be82df6cf03541499ea0cb78aea244d6a84c54f15bfa66fa726ced190 COUNT = 86 -K = 683b19774014a9ad0e6f87d0bb18a2a0 -P = a7cf99884a7217dac1d3a3b2 -C = 136791ce9e9dec38582c754bcbdd0d658a768725db5dce06 +K = 3d04ec7821ab4875557e2f11785a7ccf +P = d45a2a5d3fb0603ed15a9ca9ecf0813f669d14f812b7823c34e485ec74a00d +C = 23e372abfc70b89070622caaef85352ca83f5289570ebca621630c85cf1efc560c7b1d19756e9912 COUNT = 87 -K = 784c39bb6562e1aa26feabae560aa377 -P = 4a1b0e34b3e556d0e33155d8 -C = 0ad84223e2109e3041d160878e3b099aa1b97be9e899ad76 +K = 1d7a0cfa666c78cdee594e3a84b78edb +P = 51bf206c681e11f350f0c2a48af629cbfe1886efc2a76bacae5f92e1806a31 +C = 7aa5222d41e34790fb9e8a0f9c0d3dc6d6cb5216a18c2d5287745995d96406d818821ff0b6998bef COUNT = 88 -K = c4921b929697a801462d03bff8b690e9 -P = 4b7288654614fcce551dc3ab -C = c0b0452de8597c2d8bab49ead26798e5604a7247821d0510 +K = 99936d228824b713f8347b4da586d81a +P = 1a94f108d73ee5a125253917c3355a08fa85d323b2db7962e8f67e2bd54c23 +C = 5e4a6b8c34251fb4383f7277f71d269f9a44c755268773fd64f71f96ec97d68862dae6283506164c COUNT = 89 -K = f3b2b88f700ecbba094bd15972254b87 -P = 4fb142bed7e4979f80c7570a -C = 0aa22d959e868783a95384c04ef8abff03f77c6958ddbc4c +K = 4be5f43809bcd2f7e4abd3e83753e256 +P = 2054b019d5bafb672276baae45f461b6533ee74c4920bf886638d0f24e87d5 +C = 114a98b6cdbcefc7ada725884e3a2d2170cf6552ed48cebb732e18a50a14b778b34fa8cda359d649 COUNT = 90 -K = 9dc3ab1d9120eefb37cdac6bc4779d5e -P = d45425ff31c56227e1d35b31 -C = c02ddf02a7ac17974dbc0defad6f8b835efc7a52c72cd14a +K = 0d118ed8c3ac54f297103feebbb217a9 +P = d0546d42f16db6400e9acf1f3a266700fae88d833e7914f2404595b16872a4 +C = 21d22eb01f2fd94d52b695153a5ea29611c209e2f70396a69377edca3d01dc6d78b62125e3b1861b COUNT = 91 -K = e44ad1dc655883deb07ca77b1861a092 -P = b814dd3b4102133919da7957 -C = c0431debd573bd2f83ddedb5982fe1ad6811fc86837ff065 +K = 74869aa199e94bb08b5f2150b2e7bca7 +P = fdfde5256bbb3c8d13985a11b45dbb32ec0ba89c1cd4c5684537a5b88307a8 +C = 890bbaf13e9b37b9248139824950a669c0efe1606abe767bd742e3bd523a0e16a80f735688d4f1da COUNT = 92 -K = 992d1ba9d36d1fac15a0c22ff77410f5 -P = 16b2393c3630ca12220eab89 -C = cdbf0b7f2365aab82972fdd3ff4ee98f4995fdfcf8f27959 +K = df0ba3be5df279e0490f25197fb900f3 +P = 2154a0ffdb25f556ad034d056acd708c4deaa3ac280087f0a8a7e29df31a5e +C = e1de2b564cf37c39e41edbba37ff384a456330b640b9f0458ca49acb5c05d5c58260d0e1b2277b75 COUNT = 93 -K = abe6dbe3b5553679a19d8ae71a512f54 -P = 0eb4370882d9113ca0c51e46 -C = 7246f30cb092aabdfa0c6db8957f50ba2e1627be4207be60 +K = 06d73ee129d8cfb390d6bb9213f05811 +P = 53297e43b0a5d1fd94b96211c5da906ac5978ec9f53713889fb79d41a2a39b +C = a88aff87e6f61576721609262655a1555f07db115538f50302f42e7336217d7b2a27908ba0bf5519 COUNT = 94 -K = 446386ac1fe92ec99b977e520c7e3db7 -P = b5af2a98868b83905b86c8b4 -C = 4357720823e82774962706307f5b8c78a93654f1cdb439a6 +K = 118f5ec76d1d12521508e90820e6a11e +P = 0647f06c688fc0605274385a16627bad93876831224e40bc0455654c483de8 +C = a9d4d7abcf9b3e476f0d2c7b7c46d3dec1ea31d84e10529a387d1c262e8b4bb88ecc8ad7b08b42f1 COUNT = 95 -K = 13cedc6fa386bfa0c62ab6a9207a4288 -P = 99cd6f08626f10e9ec079795 -C = 0f67d460f9a3d15e9100780181eb8d194fc21b2f49d02cee +K = 2415bf6ce4558f180b1974492d1c14f0 +P = c85c1fe34cde1a7200579b9774d0eee28f20535352b9409fb4183bd031f26a +C = fab818c1dc2deb0b2c4b4d9047680264dca9125c03cd6787b9157effcd59aa593e6d6f23159d13ea COUNT = 96 -K = c9ec2ea6c155bcafbc1656b30f2745c5 -P = cd019f58aaf3461583e0938d -C = bed4f6db03e7c3b1a17af8c91522d8345edf2aa851dfe949 +K = 45aeed4442f2889b6b0b466bc36e8084 +P = d897b9883fada0b729167d2a479f7003413b7cc029a9dda54ad80c4358f037 +C = 11525ce7839af6e2dc3a5db82be7f3706eca1d67ea315486d5347c546de488556494d7029535a86e COUNT = 97 -K = 51e9ad6397ebfc2119cf073d7ac98578 -P = db82913086f73c7e79387bd3 -C = 1cf7997a458d4eae8b0396d3fc27a8d52b0a1977db646963 +K = 5298cc947b823298537f0067b2036332 +P = 88d9489555760e874688ced72ce69baa943fd537112c2407b22579934a5bd1 +C = a398299bcb7ab7e001c2457bc2d57d208c347e546bd34a7deb31f217ab735e422b5020cbca4ae9ef COUNT = 98 -K = 14826f4ced05ffce6e7a34f9d36aa0ab -P = afaf1c8e62e26548daeb5d74 -C = 8bb12f3e5353f97309161ab4a83a3420dd2ca472fead6614 +K = bea3a05f31e3e8d8ae986480cbc11a4e +P = 2eb55b53a7e426011fac92c9ceb004324271f61ef739aa7e44f1b8916345e8 +C = 9fbce181f4b06d6f53fce407f2601e7ee83bf1afc02394385beb486e9d29f18f23e5d6d019e50d1a COUNT = 99 -K = 29ac1a83155f639fd939734265254f52 -P = f3aad490af3d2ce6e29a7ef4 -C = 4d22705e366f1c2faa42f0eee76fbb1b9cac1674f6be3c53 +K = 248e482745165030cc8db824b7b85d8d +P = 78936106c05f8537bb2e368eeb1ce1f97ecc8584ff56783f6629ca42d3fd4f +C = 7b637e17acad607c2a8f993fcfe5e1eca7fb298c5e92a07f0230e47a4c71b1be94021adec47836bf -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = fd92a93dae317942e957ea011e402b33 -P = 4676cfd78e1fc5f2987aabcd18e2e0c44087286ce0d48ea695d82f8d818473efe78c79a4e71ee10a21738fbdd3a3f01bd3983a19f1152e2fe7b5395fe2c719dde835d1c4ad0527782931941d76a373e1e2c166afb1c542238df28e07dfb336d3b5353b06b2 -C = 4f10277f8688885629662c4881f57493c377caaeafe3d27fc518530773003df96e4c8b37b86ac974e28a8aae8bb5a98e9b98ff079b0bdd41bffbd67836af6c3b8b1c2f2464b9255dab52d7723535f38cbe6a9592568ba78e9f3cef8bf791f6ecfd58c6aca83ff2dcc8a805451de6f17a +K = 0e54956a24c7d4a343f90269fb18a17f +P = 817ddabdc5d215eee233adff97e92193c6beec52a71340477f70243a794ce954af51e356c9940e4ab198f0e68c543355f65ad179cb2d60dd369eaeb9ed141fb18c9e4054ac7fdc83506896990a4d20833d2d6e9a34938796ee67c9d7d23058544a4a35f2954103ce443a95a7e785602075ca0a73da37899e4568106bb2dbf1f901377d4d3380c70fa5175ebc550481ac6f15986a4407fde5c23ff317e37544c0a25f87117506597db5bb79850c86247b73a5d0090417d63e4c257ea0220c2c04db07a34f0ab7954e1dfa2007a1466795c4d0c2aa09ca3986c028185b43a466526594afc9c891c263a7c608304bc1957c9873f544dc71e6f847c48d32026ed03b2333825452ee7e12a50e1cd7d678319264c65f78001996d37fae7f9861fbd21cb506c2f8a3b0ee53c7debe17111b6e3f78a5c5677857b082c2c4943dfd1edf6337fea98a44fc25928361156ef38d865948b979cf6f4b46bd2119f12f0891cef7fc9d0638fd105fc05f9968d16948d1cb820751e82e44cb68e99d4f072ffd1577da6c0631b5827bec7e1b9ec72d18b74cf5f233e85013c1668ceb5d7a1f5e0f016b0ff726a0a9d41e2cea8e14a2f56492b14606d3fafd8ac141335f39f90d56863735628e8f17be90e100ef0785f3cd57db8b9d89a6b2189dc2ea00c285d2657983f8bd7883c215477e67a55556401f1d8b27d4e0d541c7fb7ace370c2e428884 +C = 876f3e53ba9cf4f6a521ac198bc813d0ede0f862ab6082e3e0a06ad82b4f279582f7c43bb63574608446bc2a05f401a68f74086cf2776b4b3df6b3679c2edfb91c024db54c6831e0752ae6f86c7596462de905ee0be908c1b9d043ecafe2ad1cbddb904e18ebc9b7a107031be3a87059516a3d1257812d9c801b0b9f21539e70c47150c128d87c5e58fa6e4371aedde69c7b5cd16b73ac422676328131f3ac48c602bb6e0741805aad9d23b33b3523b86cf0588cdf9dc6c4d5f9fa43d88ca17976eaf48fb37a41a598266da04144373df5631cc5126341c200a0c8499b29ae96e6e6e6c2bdf8d8903da62bf8ddae970569b695240e77f8ac5b191da5034008b6ef21936858e69bac372bbafd8794f6b03711503c1875528a9348681844edb199a0664d740f0f0b1f866c4248c80fe8b5700a3c4134cdddb17676e0cd37d6d81831a0f4adfba071bb0935502480eccd48b28be5954ea6c7d873b51b8bd2b709c5b6132ed31296510915073c18f7012f0eff6a9aad5340a19fd5e372d35260b718d9e4807b1954c24e6a4fd48e4dbb8f395474e99ab577367d2ab5ccaa18c947331047dc3986e213a878b41089aa221019dad4191a4feefd095f8606c2700a46d71cbb13efb6957df925ec26071c04d04d5a94e138e5fc5d1f059236aad76208077dcc607b1dd2086f9c04e33f955822b457eecd68bd5f24836ecedbac675e6ed93d8a787cb57ad68e COUNT = 1 -K = 3d6a4bcbab035f49e04f3a7cbf905d4f -P = eeb8607353176b158aa2f3a055ee142cc7fd35af65234786f0fdd3dca21971110f81d2fd728f5ab7cd953a61042c40c9c1904189782ae3adc535fd6320bacce7e6092aefad3c8f67298579b5e0c45e6b876a77aa141de78d6ecb6dab00a71d88added511e3 -C = 63b3d31ec9694c99d3e11a5024405399322d836b46d926d85ebdd942a2c8af214db119eec14d33635236ffb00d4d31ce4c466c0e57db91edc7ca670f70beae6d0ddd32ad4041f8a726703b06e5e248f5a305a46e6afaf4075eaa9e4333d2f6a3b3ef7837d90bf9df7b9d38e048b0d556 +K = 6b8ba9cc9b31068ba175abfcc60c1338 +P = 8af887c58dfbc38ee0423eefcc0e032dcc79dd116638ca65ad75dca2a2459f13934dbe61a62cb26d8bbddbabf9bf52bbe137ef1d3e30eacf0fe456ec808d6798dc29fe54fa1f784aa3c11cf39405009581d3f1d596843813a6685e503fac8535e0c06ecca8561b6a1f22c578eefb691912be2e1667946101ae8c3501e6c66eb17e14f2608c9ce6fbab4a1597ed49ccb3930b1060f98c97d8dc4ce81e35279c4d30d1bf86c9b919a3ce4f0109e77929e58c4c3aeb5de1ec5e0afa38ae896df9121c72c255141f2f5c9a51be5072547cf8a3b067404e62f9615a02479cf8c202e7feb2e258314e0ebe62878a5c4ecd4e9df7dab2e1fa9a7b532c2169acedb7998d5cd8a7118848ce7ee9fb2f68e28c2b279ddc064db70ad73c6dbe10c5e1c56a709c1407f93a727cce1075103a4009ae2f7731b7d71756eee119b828ef4ed61eff164935532a94fa8fe62dc2e22cf20f168ae65f4b6785286c253f365f29453a479dc2824b8bdabd962da3b76ae9c8a720155e158fe389c8cc7fa6ad522c951b5c236bf964b5b1bfb098a39835759b95404b72b17f7dbcda936177ae059269f41ecdac81a49f5bbfd2e801392a043ef06873550a67fcbc039f0b5d30ce490baa979dbbaf9e53d45d7e2dff26b2f7e6628ded694217a39f454b288e7906b79faf4a407a7d207646f93096a157f0d1dca05a7f92e318fc1ff62ce2de7f129b187053 +C = aea19443d7f8ad7d4501c1ecadc6b5e3f1c23c29eca608905f9cabdd46e34a55e1f7ac8308e75c903675982bda99173a2ba57d2ccf2e01a02589f89dfd4b3c7fd229ec91c9d0c46ea5dee3c048cd4611bfeadc9bf26daa1e02cb72e222cf3dab120dd1e8c2dd9bd58bbefa5d14526abd1e8d2170a6ba8283c243ec2fd5ef07030b1ef5f69f9620e4b17a3639341005887b9ffc793533594703e5dcae67bd0ce7a3c98ca65815a4d067f27e6e66d6636cebb789732566a52ac3970e14c37310dc2fcee0e739a16291029fd2b4d534e30445474b26711a8b3e1ee3cc88b09e8b1745b6cc0f067624ecb232db750b01fe5457fdea77b251b10fe95d3eeedb083bdf109c41dba26cc9654f787bf95735ff07070b175cea8b62302e6087b91a0415474605691099f1a9e2b626c4b3bb7aeb8ead9922bc3617cb427c669b88be5f98aea7edb8b0063bec80af4c081f89778d7c7242ddae88e8d3aff1f80e575e1aab4a5d115bc27636fd14d19bc59433f697635ecd870d17e7f5b004dee4001cddc34ab6e377eeb3fb08e9476970765105d93e4558fe3d4fc6fe053aab9c6cf032f1116e70c2d65f7c8cdeb6ad63ac4291f93d467ebbb29ead265c05ac684d20a6bef09b71830f717e08bcb4f9d3773bec928f66eeb64dc451e958e357ebbfef5a342df28707ac4b8e3e8c854e8d691cb92e87c0d57558e44cd754424865c229c9e1abb28e003b6819400b COUNT = 2 -K = aa37e113caa1d04d9a2cdd84e06834c8 -P = d20c7fa2f775c63760fb9ef22ddf903bd111687f88d4472a4cee1fb31fb1ef060b35521c4251303dd676b44c32c6f472cb59c907d1640917b3af0ebc9dbb333639786d05e63e4ff188202fa42ecabef930de152404a27d1e986c028bbc461ae2c1e9188299 -C = f4dd030732c3b82a3afaae79f0bd81b24466c128ff4a82e235e178a949d4e9f4d08e24f68728800c66fdf93ad444f9c33beeb9ef1be066ee8ffd5c2560ee490b367d834b22f587c0fb993fc24bf1f715f505f0542a52639590d492df20da4318ecf47c8b6b9e8d44583703d397778a9f +K = 5f0f2428ad83ea04642d8f90e31f00ad +P = 05f65580a602fc839c5372778bc495219ab159935acf3caed10958ca0e135cbc44a896aa84b1f6b05d65ac45f5930029a223977ca46c7717809e80d8eb91e7ccbc525e69ca0a85d3e45b2f9bcf0c86980b7f9f9eb20e9b558479aa8c814e6113635a9b8b0e264055da68198303ae91683eb8ed3351dea3b8280a504d163e1cf284834e3641a26868e23fcf460d279d3577115d8c4cf0f54374df26ddfbf0c1df5bf71fe509231177ac531514ed878d3ef44a03685dee906ab394bfb69cb56ff973f19fb466ce550ae7b03008feca7046bae160ad47f28c9004da68e594bcd7f9ca8674a645c50768b5ee0ec2088f66602a429f95492e09dc567c11083eb18da97d85968a86f6ad05054f4a9c4bcd57ece2511bdb38afd78084b0a088112b81b993a4d37674d97e8081795ee055d9c37d2907d859be201e73580ebd439620918e7c4b42243f43a59b475095205c40a1d37c0f87a5df19450ccd5f274f186b0f45f7bc153d30ce3c873d7bba5dea5a8bd348b2f0b4f25461927642a2991c3c4bc3ad34d09c104322bf27e8eaa0ca99c0dd47a3c4c618af02599192e362e75de53db336a68b223567bcddcd7feecde0aba91a1eac0ce6327d3c9c5be36698494b2b67ec0efd36b744d794f521bee251b31dd29852a94e6b95f143a53f93f85ec8c2e86e1026ec949aaf97fc9b8d728c13e1deab628e9624ca966992efae61dcd6e5 +C = efa9d549d0e975789a6c84b99991c98cf20db4de6789be6f9f7ae109e322a6f04a1a1c1fe582e4242a5e2f2b390827d7e52f1bd97a4e745920dda69a25fe93fa5de82c09dce8a2593106667820dfa1f55c8a1152ee02ed0c607ab986e5209859cbb36baf90ca63285c3128fdceb18e5145b9d3efe6bc7b8bac7837637ce5553d634b13fa3888201112248bc31e0785f2dbae1a8eaa7f4ebc0b00d21242f03acd4e4b0f4ad5e9bb1e25301a331a4b5535c1253b9ccc7800cb2e80602ec9ef858865a39e0ba28006da93f9c26c1fb9ee8258dfcd7e79f02ab0d9c2df9ade309fa6c604fcbeb38641b2968ff96349bcc34927cc479c30153125f7ad07068e5a4ffaba903d27488c94bfb694d8277251061a7dcc5b5fbf47ea88065ea1df007cbd4c1bdbc2e3609d53bf99bf2c7de8ef457fd7b85882210fb52c5093415dd2b37084b75f83d2a05a669867143fd95705f241fa794526bc65c5f6422410da4783340497bc54852125e3da579bfabc9ba98ec398487444b3da454f40d8b59d384cdd3454ad77f38d4ce657d10b4708dd4ecb0fcc3238aca57258e082e8cb86d802b9722388284f232811ec35b49ebba151d5b0771feeb6120d8bee8d55fa9c4de45d8f950752b3b9c6526fc4fa8fdd02c645fb053cef8293437111c85b07e98b3b38ccd3de93cd6fd08fdfb8a3a94b619f9acd226be3bd3ff906f14b1dda93cccae783c04ed545db685bf0 COUNT = 3 -K = 9936472ae8ab92d5bb37faa478b41f32 -P = 6da6ec8219ca705268f838fcd662384e02bd7254058726698eb03d929be84361f3ad3987946ba2a98fdbe3ab2270a3ea8b1945505dc08c84db6af3678ca8d8423f23a08f104dbbde10d6c65ec9b126910cc7b128fd24539c4c974688cae781cc39829dfc11 -C = 659066121dfad71c0880b6ccee0e4fc794e0c12167b4e09586361859b24c0cf7274a447076684d36abb9f999d9a9a38039536f7b0ce1e8dcde8fb3aeaeee38754d8fe6108e473a20ab63105a4b1429313d6c4ff5223b97e2dbb1c6b863be042a85f6450033b6abffd754875b40c1907e +K = 9b5c2e4a9e53d3e5f5670af2440439db +P = c4c726199cc27b81c90ee59f1f44420abad2a4fe0f24647952116ec46f364a3dad1b48ba5bc6c48c056e34764ed4b4a2da04e7e45ff477df8364ee9f116c82dcff7e9ae2db6a7722f2261b6cee1ef7cc66820184988e002886a6b636264e7704383543817e119ba3582d42aa00aa78dcf84d0ac92ff69f09046f89e7b608143699f9fda37b07d3e2949e935bba230e0a42c2d41d285042feaa480bcc1ef8236d615f449107fad97b5be514ae39d586b98ed45cc39784c30a3a256d62336002b1f7f6cedc3e5418d6f444bacd74d7bc89b3ec65c52191b4a2f3b3c7b682f254e6e909c5dcbc11d5def56792f5d2183e5e7119f268b0395e7f4f25b8574bc921da8419af30113bd35b11c21debb979fb698752264595777be7665419052cf3265117bce96b61f27da4072f828bd9315ef25a9ab9eb4f5319907cdbce6104054c8563a997cf477523478e6d23527f91997dd43ebaf629003530de4b8406bdbfae49c0d97920b745c78a665c438ff064d24803382f79fcc2e24265adaf707394b832685def125b69b1787719aaf92e518645ac22dd94d0dcb03f052c87954854d177e2caa6ab5d9cf3dc4ed4ceca90d2fa0b235efd1b7d17ba9758987d127b11204047f22e75158720feec549f29b67a8158e577325e178d6b757770d56a30b85d12ab5fb164a07a5f613b53d075c44cd3c1e3a311515aeed2427f70b3bc018dd796 +C = 09540dbbe97e983a3420ec1ef7d1195f9cd32acc93e9f31d07e68dd9d963f32bb23565a37d97e857e5e40eae27946ef83a4da10ec29ea001fbe892133a4814b04aa3ebabfa295a19429c7e6b263293d07a48f5b2beea2930aabe6268aec00a8fbcf9f4865d4658905413a0f17bb08bbc6466f8d3e1744d9ffe6132f94ce79bec4ffea05785525eb5e071ecf30081281df58f1b5295842967a486ee262a7c366978140bcb8562abf1a417c7b1ffe07b1748978408cfae4beec8290b312f15d3223fa7447f5a89e52ddfdc4f79cf1d9fe4ecad3e674e98136c457e36748da001970cceed0c61d2ea5f9ee5f9660ad561b9fb808be3d4455fe76ae9778a49526c8461f99dc2c271ff9aa389d3e6a546a82d15967a82e8ec9b64cdf25fb73afccd7cc2fde8d07ef4a1345976970997facd5be16566c7761d23f4a31909a5a31bce35e33596a861e426fb56d9ea13e5f6219aceda2450434e04c454ec8569ef9076856cb48f36618e690a710dfe8717526001c3be7eccb671dbb4430289924ae975a30b6fc7079f8c9cbc8a268f5defc03d94d5bae0474987b7ebd4c9e29eec9080e8d85776c570089fcd235372518dc38e481f8a5edc2105bb4191cd81a19e51c60252a18b3058ac1ff9368af59a2caf82a06357764fb3721287bd28204d77dc2eadb0913cabff7cd63c73488e92c818341563476e69a50fbb781f151e02f2df4a9fe05c8419a3393d67 COUNT = 4 -K = 4270b40aa35dc11c55716de97cc0a1e1 -P = f8e7db354d020a8101f3b8fbfa2c16e0a2f1600300d95aaa9b74b57f937cb786e65d668a6f225bc6f8112e9a0ac36c1a5f8abda87293fe4d9965b0085afa9abe101d648e9b59a9f29153e0eb7f1a099f59fe176fa3eccf0db5fde8b85c76b8e6f6d492f67d -C = 362e43b8c0ab14efd127de8ccef0f6d6abbb3f96d3afe2799f5423c5ba8e1edae64ee3662a7405a53202caf3e29cef6592506e0a1d908095c5a165db9c6a31bbee184935e518707453e3b1facb81a3f6de697fe44ffd771cc24b738319b66ae086e5c78bec1c957348516569813223fe +K = f2713273ad5b7add10d2b8d8b61d2f68 +P = 1c189d6d34b57c699dd8c79e30457c6735f3697aa6825e14257906e18413580727d676b6e667cd58e0a47b738abfd91144952940de60b161b0dd261d68af12573820f4f172b32d7c032ed7db3715fc6ceb92ec2d614a2005ea1aed14cc5015de143aaf6dc2db406e0fd31976562250e80eb79140bfc8d14fc79bea4159d66e1013704b474b0b1377220741dc55cecde0eed4e0931e58025e7fb672117a8288587cc91b1a41fb4d1e9e4a7ff59fdb814dbd9521dc148abfe16ab62fa45a3dc361cffb422482f4fd93466320a11d9a5438959947ba51d7761b2a3bb9e0b843ea6a71cba54a96bd14de8360ac8f16ece773d7bfb25df63c1aa67a7bcb587f618f2425bf9aa018eba5aebc2911b9fb6276e48d72dc74836a290fad0f5c545934f1231ed57c6944a464905fb08685e815ecddc8dbe4eeec1355f414fd2ce975c0dbe29bf4369e05c1582cfd9a7ddb7659247a0f6db38ba165f1f46a472760bcd2609ffc8bff49c6f54698063fa81305696f7ce25c95b237c6a4fecb3e48167060f556359609b73e738c5c3021d0e5bc62ed31a2a27f43dc417c0041f8a2402fa7bf76c72e2b290c060efd93ef65d0a893314b03c098a6674d0137f12eba3ebb63b3e65fd0aac89847bf9573d9eff0b1283843bd4edd6d459de6d559e48633d964dccd8b9fb5142596430b2373f9448606f9286157e810dd0f6a72843b0cb28ab452d7 +C = dbeedfe9aede047a07402d23b1b349a3e75490d3c404240c872470aa4f6b5a1723b6a0e455a8961fd25f88a9329b4fdc7d8e6bb2b3d7403bd65418f94b933467d882c1aaca702a47e7bf44916ce5eed0647250d572686c8a8c9f9437f2ceb13b361aef929d428c35cd4cf1d8970d98e75c46b4825c871003eceac2412adb6681f0b8a1d6d6bd7eb41c6e58ebe6909ab061d5e832f7580dce89eccb4ea2546204e895ccb54429fe388b0d9173922e08625d43f0a10743ad76230fa458b0971028b18e0f04f3c1049012a8bbc2f93934e0b51b943efd2fa4a14fdb795a1f21302529653583edcfa3c613ada2bf69a93e5a29a20a6f9d9df7891e3b438be4f9f714806cd57afcabc0d5f5753af804d885ca1ae23bb5fd2593fa361e92e7d12eea0805453056022256410369dab0e2e8d2d4c9ffda1d7df8ba5ee19c5bf62133d1ca9a713fa45157d327bc4e1d8e7a105012036939a5d5ae15a5fe8ef989c8323129b8b4e43402bb4f60f35483685893e9ea0b0dc4a8238148d0220cd9bdd7dc42590cc303f706cd81cc5f6ce761ffdc570c62cf734cfffe0ec7be17c7ae3ab34c65f1a53267b03de4da3a5f921cf01b068c4098c7594a3051bb03940cb6c5bac2aa04f95bd30bd15ccc9edb8e29091047de011ee9591cc4c83244750dceb8c2eedda797965c1243521c19228eb2d799775dd83ceab5aae082cfa743d58544b61b7104f3d10f632994a4 COUNT = 5 -K = 3c6de7a6ba1725b8fd793e8530fb8285 -P = 9b0bcc2a4ef2c942cc0a48fa63994bb3d5f987ed306d81749a4c364c01175770446bfab29ad05338ae5500961124872d6beacb8ae8c2eef2dbab862ee263eb2b9e6197712d29d8eb8a56364f9c1c3e1b5bfd31ec96249b1bb58d60d6eb088cea46bef5d3df -C = 0937ee2dd556a7a918aa683a51b23580782c354dff231b778a2480d6ea0445e66a6f39f058de6f97d58866212bd83ad60a1d4a257ba313359536c95c2867d822d73c6894d742fe716949657eb1a35e9fabf05747becc238d025012e57089f787255ce9ad69b6d36fefb07bb8940f225e +K = 8967c8058742169ab39d2d528130df80 +P = cbe7ac6c232b327f7d9154acf334891398fa0a1ea64a4f15243f488ecc784749fec41fab7a447e2a2cc75a44fb548a46a46e51f4c245f64901f3acbf18f468a28367c51060c34762c8a88780044761579846557f285c97bcb9c966aa08d4cf352c26d8a2f308803393155437b91776ee74941da9db39ef64d9ac9261f2c7fb6349e52111a7c146d5a4ef6d5d00717ac93338fea5ff0c90cdefe0d66b039045330877d8596de4c35987ce70f660aa8777276eed1b128002dffd90ce03224d505950eb2c73f5e958df92ee1cd8dee667bbb8cc71f87e4ce880585f004160c798ff2cc195b09921c73951332bd437840bbadcd10730272d46b3f23963a7c0396275407bb8041a6e5ceed4d1dc2a65a70d4843660cc039ce94a4ce96573811d2b8be00e91dec7486484ccb050dfd6e319001ba8b8fef48b03d17902cb91792dc420c79e823616cc79af4e738dc077519015c734c1be0150921657f3139e59ba4ad8e75e0f7b51806a96b7249709faac3cdcd53bfed8f0326d19000ebc1ae05a43e96c1fa02f2cfadefaf871250aff6eade8ce8d4b8d5a686d553e8a66d96412f2f189fb724e67c8acdb229501414e45c430a9533d211a217eae0030ff10db12a399567e94c900ce839157ebee1f4f876675794cb3642ace55fbdb261f1369807f284f4e6f8a2c8330eed88e18b8ff564fb754b96f8c85d28dc7a0b18805ecc3ddffc +C = d29eb0bc54c43081030a3e1169f243eac73f1d0fb2b2f983fb25755684df4331a1932b02e237502c1b73a8d744619f521457b72fcd7401973ec48ee915054e5e12577ef1212d0e642c9dc7341cdaffd344dc480eaf9f29019355b07de2f05897cb91b00b4c53714609dea69f18c7c93429b73373311e0c4a45e2f2b3a6bd393b69f90a4125eb635a794563a68e092cc66730d236909cce6585d34f47a10c2968f161ed79c16c18a6c093c1fc455eb502770ee436dd48c091a4cefeaf449c5b27f2fd2f9150a601bccf8a37cda65b25917728ce3f1f12f55a51d9110c16132bde100b6479eb8a1ae670a9ca396f18a2ff19fb5543dbd3b189e51ba5f12516129071c997044df747f4ed70616e784bfb948a63211b224dfdfc5b9116b869fc5313c761d55c759a6e275e9ac53e83a5386e2cfa50f6c1b541cf752da800ff991ff896b79b9e691d67e96fffd166a06f0c300b7d9bb552f5ec7df6eea384751632ed9357df5a5a9fda931568930fedb0536f5491d4067a3951dc72903d1ca2f5f1b713e24cce5347b056e2f8829d34143032f53edb81a765d2ab3e6cbe12536cd85ac3230fea546ee50d991e13c562bea3d694d3990b1783a373a59fe12cfdb74fa0275e367d76bdef698dd33c30afadbbf0fe0dd7ddf288aec7a397e263a5d537df9f606f5c126565c06ed5e0bd6753d3eaf5002b472a1d7f4d7df7d9a8fe8aa2c595ecef8cfb3da3e7 COUNT = 6 -K = d0d980e6fb28cec45d8649d39297ff03 -P = a065a6113dd19461e191d28522b0f7ff5e40590535d59bd5dd7444d84b97a2db1a3f5fcefa18bfe441b697d9a6f60ee442b4a8c0e1da91e9fb143dbc053c451bb9630a9037137905bbf0897977604cf569b4acf35bb80c100df7e61e99ac015162227a3936 -C = 00b80e652407e161706336b8f99e2d27c5583a4e78c056744b61a81182a8e4d975073b46332a0085a398634cc3c76849e84620e3da4fcb9653f3e91e3e81b7790f90c369020ef73d226cceebd94b9ab23b9d65da6fab7ab708b94bcf927033b4a13bea4a6ae2c75c29bb2bcc1ee66a76 +K = 3eceadf2949dcbcec781481b18250cda +P = b50a4a2ed4a4924e73b2179970fc1ea449aa59f4b23b7d215477fe60bfb6dd15014b9fbce6ce348ff478289e11bfaad00cd6f1cf1d220842184412ab5c3a63a67d22d077c2e4c5fe1276c8a80335f9cf3badc0b0c06961d418c39cc66e1786e97d1c7622c7a88975650679c5ece30a70e5c919b03125802699bc5e8c01205d9bdf403b8cc6dd4d6a40ccb15f1b503b2b0f2136fc589893d427841f4fd025a466b1cbd91c3fde74d63decc75b474d8e7b2642df08cf0851d5f6020a1a2ccdfdb0b47e6c5fa27cf945bbf33e8cacd6780bc23c34c89af57ce678394081db723807be67cca18582eb07355e9228dcd60b9bd4f91b21ccc07dd8767d5c41a7ad42ee74721572bb7c686eecf25b719348e9088cc00d4cf98b6f4c700ad6171ced1598dd8cfca64437b0936036f5aa5685825c5a3e814f19cc508b756d0ddc92de7dce887a17ed85382c48d7261bea8554486eafd51466e2a1a985f8dd36d0e23fcb37903322c4a2eff4e01b214465416dcc99b0474ba31f0ba82f7ea05dffe3b4961e91a7b03753fd2217b91f787b28b627ed47b1bf86a50e5cb95a56d879cab049ac425898f09c7db1abfdae2e07352e73d97975719d13fa2843daad9c73368cd939a51792996200149d7d9ad6bbcfe4fd9ff78efffdcefa955b2510735d31580e5e4e1022b23510aadf424c6a74256d1f229927d688d23d34d654bffafb0ef23266 +C = c19b637795caa640c9fe095840123363762e4afd2771e42421f9e52b8f9d07244d340616f9ae6b49501f048ac14f8467963da3cf9d7f5a992fe1da48a97420d861f6f751429096ca8b2936a9783f3c68d26926cecb16b299faba1c014ad8db44aa4953f54745f74bac8d56f1bd41c804c92ebf86e975170d4d00b0efe28da3bff042f14c4d19de40639e8d2154bc45c98dfcfc126cc164921cb860cc6f487604237e1e5aebb3568426a84e4ce0f23a999b6bc1c0c7cc9bd00cc2b207dd4ee08745b1b4947ee465e860759eb78bd032cfd39a4aae9797caafbb3a44b51bc32250d79fac45c04da7b574258a05004267ced0f2b2cf2b43b33519521c821a098b56b3d1758f7381d87dbd4d4135fd2c289df42e50d3733a8612bea1e594f1454453d23109dafc83989c62c63c6a0ce67bd0f79500ab13023ef96226075f8e574d41d572ced0143ebce5c5334b5e66af63ec4b5d688eeaf96aec00044601e0c7a8231ad138a60079c3f6501c3f158dd6c513f89f566b0c234d970306261b6f2be58261cc8f01a317a963b5c5646683f3713b0a5e8dd686b6f6935f258432d65a705c2c96e92c04b0d9d9183f76dff8582a1821e7f862043092653e2760e6fd7707a2e4686e16998e4fab0657fe667a577ed3f1f2f803c5f3e7ed379b51c046882b11a4e5000ba9b97ccf74726908f05283ab0543330d33e2510eeffc0fdde6db340b25db73d2c251bd48 COUNT = 7 -K = 0ab3cdbf05a97780f63291f3a30e4434 -P = 7765544d5a383e01144cacef1d1c6f686cdaac01cdb24d396f949153e77ffeb9b4173642699126caf87e2cf613fbabca29cb190fb98c7e5a40d8f5f88af92f23ddbbb69ec72352d8cc421a7e1e872191b73f349fad1555713470d3e0fcb4532d9c3fb3513e -C = 37c905d1a2fbdd1b18a84c206546bc2bfe88f8bbb341c599d41ce2f2f1c6bf61cff8bf65af310f59f3e4368877274479149228eba3d554401de591d110a05467bbc001aa309e971cafbb3f03525ba68beea965e651425809f348fc0243618c4c1e51cd6de09f001e737d4cff64039c12 +K = ac206f7efe5184ac578eaf340d286b24 +P = 52079e52c23a874214777a89be342144bb2725c54cf366b5eeef770f00965fb08c81ddd950647c2f7112b885dbab3dc13406effdc5183af51d8aa63fca1addc6df055ad82ca014161aad585c18ef91bfb864bec16ecdeda371de0e85d2f1eaaf77a7895e89a5b7c4b4067318a56388f311cba1aa10131f59e88c7fa84167ccf34214fa49eb8c3ac3231536bb67423f74867a2740c0588f560e6a6eae89e698ab2402cbd1a02481a9f963f074114685c2109b8f27de52247d03cf1aa7c1bad1dad5a803ed26f5f586f927fc2b65d35af2879149e537b6bd30554e14e1c5b0f102980c7f18384cd366fc4d26179398623dc06ecc2b8ce77799a1996f55dcef2e355c18af8878d13638e885ae6e7d08225285dfa0a73dfdee4c362b06f9f0de08668e5a73798d20a11f98db1e7acb285d658ac05b21f44ad64e2399b4b76f42d19b09c9e46af4b43d554473714f48653b58925b96a947fe6d4d2300ef52dda2affa7a93858faec92f78f5c744031bb81ea8ac133b922a6ecb95eb976e7bf6dd0238a54dda5d0e84605698acab69a688ce60e12548ba9df2987d0b5306032da5600a704a5d58b307fe5f4b315a26956d911d8b12b64d80937c8066138071fc665cab1918dec642485f9d576e66abbe84688ba5a8266b2db4abfb221918bbb238c2003d2e5ff752cdc656cc69b48cf91d8d4466953b68a7645d4b52f642d263575623 +C = eee37d4d2d41bbee5bda5dd447dec0c6699ecc3421cdbc8e5b272e8969efa71de64d70e6c197f54ec213167fcc54c2e0ab77ef9f3adeaafd9073b8432842e78983d7865ed407e78db3a6427fcb926c097570204a75b6052ecfae159b646c45a0f31353a051f0409ec4f29ca27ec52fa8bfe7aa8af31d60a73e2ee92708828738a3f97b229b8959e73cfb4f04171eba6a77398058c8f4931214b59828f61867718cbb3f5096a1c43f8592c3e8bc3167c744b99b43d7c129f4753a99e7f020ca85740c4364d94113fc1e8837af0733f0d66de762568aab68c0fa91bdd940e0e60366fef48a2aa3f7ca81e00b9bca3309336197d15fb04c02dc3a561902acb9c1557f10971f3b821be5cd91871566a2197d9a2d2aa8d19ffdc02675074e515ee640299e0f0c0a165d9cc8d028c60d20e069f1fdc3bcb185469df33236003c1615555ddb99b87df56465769efbea2f6362786ccf4284f0d445fb1591ee47b7a0d13fcd681f7c815e980ef5128436ae96f89b3c3120d74a619c8425e0190e81732e8cf7c101c347f812328f34df75c57e0359888ccdf3a0cd708890f2908b6a95fd23314e1479cceed0cb74803acc8931e64d042c74b13453e52c3113515ef18ede72dce2bc5d5fa75b2ccd1307479b217f241fd1f2d1195022c645d0d47b43d091bf03d01b9e3d2d0ca491a62c81318be1961a5e14e9fcba9950ff93aba9f1dfbc6989c14b7df5876021 COUNT = 8 -K = f2193d3c71870a086923396503f45826 -P = 55d29e529b2057072628212530754f61d3646d2f1e3a05d72b25954a11c192d9c6603c67c10eeeba8bbc557674cb3ea2944e6e2bded711a2cfa44c7e5d96b4aa436048c7a2a8afc322eaa55d780aed7949a75f94eff45f4b9c0934b620d2f32b41a4926098 -C = 5f939626f8254454c0cad8302a81ec7239136caf14993c4f4509d56a1cce375dd25debd41b5cf6131e7eaebab32f215cad0c3cece5fab38333b938f774766856ca2b92f9bb9efbd7f715f58edf2313243c4a94f1d7d68cf87f1115be218ee8461f7218d484feab5bc6f291328012e032 +K = 8bd87bf33478cd70f8a3ab7d870ed70a +P = c03a7471862e143d50e2bb440927585567c2924aa93b5f8db4a0b3acf5e28f390578a35220e6c5fbb745b31f817a951aa6392396fa7a3b6d436a8dcc07ba985c32cf84a6296ea7b1aa18e0a3e82b57c9dc268d545035922b7c3a4160f052a8e48c821fb786526d4cbbb45f24be6fc79820fe93e2ef433e803e5308c1f3baeb909cb682518e1e5e73eae9fbf6cff40af98649b59e306872635cf41f10111e949c102d1aae83f16d989a735266cbe76065c3e9fdd0eaf4b575f0cdbeb97d2c5ab9318f507483b1a2a0e1a91d33994f8dccd34a0f452ee88ff5b9c5682f2d458ead8af925bfbbd75ed97d1be5ead1d4838da756e45031529ac39e98099564b619ab6417796bd852a835a353c0488325957c185dca698ee9e1fb982f7456dea77797029f4f7aab898d35ed66242db3c8c87377481db7722ffa51c0ac0a9db627a4336c51a5c8791f6a57d66ddbdd12428ae28f434b57695d2f8a8d0456e8c84d76c86611c167f68e4e8548ff1fddbdcd8d567d0ee31f11ce78a6cc9d6c391ccb76d2034e2e2bc9cc529ef65d7665ae23ff3617cb64f98d61ffe835c704c03694027b1a50b76347b47c18d33ef93963da4b7c42472b6f78e9dd95b5a082a90d9821196733e2588649142a81af3ada36fbb0b12bf77b94cfc5be40b8611bdcd410caf6040109390d1bd6b307f13b9f32956ac358057f7e7390464c9cc87a734c318c7a +C = 2dfd0de786e64bf2f7ab2b74fa5624f0d13acefc6978bbbd83d9744573fbdc2a784de1e40c9101fc104301c925d98bd2e1d2e684c3ce84aace231088f7a7062d2761b46b0606b9023399b87abab9fc766111401249839e4e16fc868502261c6c68e4828b8b29dd7344a8a2e134ce8576822608d62059e3633256f809818bb0d9111c051d76e4c4e01cb9ad36279e546e198dd335ad9801610c714ef26b1c7ee65b4603f5571c4f99c9cb7f9d117f488ec1d27b952c20a8a72ac19dd366f4e5f899f00112a33b40463b4eeed86d9447da4e7f06bb2693b3f3a7e6fa315eb8e3ed2f56d2deea2eef7904721cecbb0f4695dcf271adae6ef665059441af645ca1e9dc670e67a6c1ece97f86016435ea20067e4a1657c4e399f75dfc1733e87068fafef1bf223c56c109c2845193075fc257ed6e85707e279d4ef338e54deb9c20dd895efddd9198fe7fcd9a429f59260c789033100578e47a17ba3f75514f5996896d55dc37363078cc09249e6a727dd207f01dac18f38add41e343074f8e76edeba62e19d5a81941563f1760692b031cfcedf1685dc8f7e425325223e7d72d64a2e3cc4c3f24f501be8a12b0f928f40582f80683d881982215b3b1d4479a37d498f13fc8db0d6445d1278ebe13baf79f10563f48ecba3e633dd9f2804101e7b3ce2b6b7be166a34e447bd15b4119194bb6a03ecdc801a15f5bcf78e1f8c776bf80570d5e5883a01702 COUNT = 9 -K = f94fc3680097740d582517c5a020e784 -P = 694e41cf70082035c5d41edcd1bc6ea1502bed18c0679caee13bff83483a6bb28b1187c80cd8dff04e052fbe741816b041d5c0612761afd1a6bd0b3e49f22e75daa409ea63b855811077c94193ab2baa78bfa776f9fcfe5628a061bc4168e6a670b7943c28 -C = ea254f381ff24d4b818a84286e887aaf3449f186109a18f32322706a016b5d33a27635792a1b3b9267d880c40db3d168939b717b53ff2b6f2466a8702c657896436038d24110a22f007df347cfba598bd38f454500beb674bf805e5baaeb3c59dfd5b35b70882825b966070d863a3ed1 +K = 3cdbd53587bdad5b8480f14b62fba646 +P = 1e66496a9cf6a7bbd39292b5e2a1ead71207246ca57b3359ca0b33408fcf4b089a4c46c3e8092e6582373ef966f074a9770317d8041ad315fc213c4842d2e5aa5bba20ab52d9e64a5f01a096e56bc7e581a32c0889b4664a4ad3e8921e8f81a4270ab8fe7015e1415f5a960d512d3888ac860f7ba273faca668b94c9e8f7adb810bbe20ea24b1a37364da3823c4965c47c94acc69f98c63b6dbda44d4d2f14d242b8bd02bca91d119263e601842db5bde5104bc5b85197d1c82db8fdd564361884600601c11df14fe1f09008ebd0c9812413c657db6784c1c5e4821f03e5d87f7b80e8fedd3254f6606a16fbf2e08d08ff6f0defa157e8794070cf5db6913db1c8863dd2212019013186b44b18dfd9186e71b8345a08a4c5948e54ea75d998cd8e5a3402ed05a02b3744731ccbe730748bb4a59e591adc01cdcfa6390849001f08348734399d96ebe4d6c8cbe00fff84ec4bee7a23cb85f37355c5f504804711bddb2def6819b24c88fe648865f3261ab4c0d92284fde0c7e3bb2e2a4c70f2639b38a495ce96fdf6c401065e2e45b057e57a69cb0958a44373a399fd4e910a7c04a24b3bbe772b644fe7ec4a82812db66ce14929efca9f0e1cad661a5f8ad10d1473001125476bfa703fe64ba5aa884191a67e42e74734c1c0797c640c66323504bf3eab8ab5498de49d806ba0100d4b55d3d3a110665240a8bf67f7ed78c601 +C = 53e01edbdcbc2924e9f7ef6d83af8c0ba69f9d1aa59c5f1bed84566f038222d3088115fee5089176fc65243ce893d8515b08a65a6e5302d4579aa3f107e9f0352a3300fa105e63877ed9357bc45ae2720b467a7e56f58570b9c4d78d121fadbd8f2a758a14ef9486e76b6dd8860bd8a9d7e2bdfb040c8347fe977e586b3bdeef5971be80ac3d023c077fd74c3a440ccab1d3daeb0207c18614ca1ee064eeef315617a72d5a8bf62f98aa7e98221fb7753a6fa9fb025fc841e41df868efb2fb181163aa36c84f222cce13a8cdfd575622e24edbae547f244ee1d2024cd0d0e80413197d717d6de1678b3be6ef4f287487feb52c2f2bf48ba4d196b8312096e1661fbc99628eb2d1548cc0789fac3b9b69a535eaa1dd727a5ba48b0c0f62098e15d23f2657d25735c53a230abcd90486d13b7b905f0c5234e791f06bca47c8c2b613847c0e6b1f83fd676f3886266f11d5a59246bb56290f95252c3701118ff8a021f69c9df9f508058fc23bb6b0154185aff3b4c6d9c158ff1d43e2ee77d6413a262869f498445cf1b846246ab46153b49ff171fb31f082530c55443aabbb988f8f8ab2b3ad064d1c6795281c8d0b39a5b3e524e7db3798b2e35331037c9f18219a80f1721f96a99d4d85128184ff7a672b1c25a6d74588d8cff7dc6d20f46fc3e4db36ba059d83bd9c04fa6f63974b898c6f5fcfa983c72eab1ab7af463807266d0744bbc2d6229b COUNT = 10 -K = 381e578433c8b8064f8a88ca026bb584 -P = f600beb14490db8b4f78a6b48714695137d96c77b1cef3c5f79b59c8647adf06b55d0c6eb1a3cda056a279e0053d0649abc2b064e5ea53c41118775b0fea37273bd981cb3462a4f1eb7a7f66f8141672e84816da8a1882355096772e87ef15a420f70bf476 -C = d95c0e4e00588b13160ec52deab5333900fc56e0a4b359ffdc31bd4ec78b2b964dfc992ed4b7c0e6f821662360c01c6f8b2fa85d262826f3ed4c363e4e8f4206e27c5b3344852cdcdf77828775c48b7b6d68657c5d12e8568c279a07b8de8893c5d877af566e35c2b0380d5ea5530011 +K = d15fe410a85c2cbe9761d7a9aecdf8fe +P = a01c8d7e80155719bed27619ec25945663706bb0e4fa028d78933c2cd5b1813ca876e8893ad1e7c8689865c231c23c88a7f27f5484ad45e396884e3c914fde5d31344ece3230bb2e9777da03f40565fb3cafc36d1f7d138365e235160aabdedfc63fe95c6bf56632bfd55364196bef9a2f99554f6feef34143a7a85e167fa2190042640ba52c3a8ed269ce438f18ee2cb334e57abad349b2e89339321a96d11036f6f2b854b06603bd1947ebe9a22950431a386fcb6d16e1296d18ca2f90502e320fe51dbfc0fc1016efad86057ff0556774cfcc8d91bb7be70377ea3bf137e4f3a5317c6d26c2326cbc7887eaf5c38a16723d661faa7bc4af8c94d349c20426bd16ebc4f8ebc5779726de4f0024483f9bd9c76de4d543c1547507e0ddae7114506746ddc649bb96cb7b6d5a2a8c05cb57c02f636d9be65f7a76148403e01e9c61ea3ebcdb7b915d00dbda755569e64c02760057a87ca58a799a5794f35f19b1ba20e04e059676a50b78e9b5a6fd2f2d335c17cc9dde5cd7b306e2d833ea81ea904b51dcf7649fc53724232b0591a8c85e8c83d4dbcdff2be40d2e3d9b8375f119e82134c9ac9e9de9e4ad152a245492f82723a570cec8788033b1e841fd06b715cc2dcebb8ab783ec8276af967d133c26e942d79127f6fdbfeb7b9f7c9c1a742f436be0539361e0e145a47df8bc84cbd77733fe4ce08ee1f720ec26b274ab8b +C = 364f86e726a5d1964349bacdb8571c96627c186e244e66b5854550a94de71059b8792db6654724581ba89329009a44dfc2a89465dfb53e7989013052619fd5e7d98d287792201d5c836607423cbce483693e841d080259e333b60358d3ffcfd5fe77fed230845130c8615df41352a549df993665d59480884fafdd3beae6a16d1af0a77e15ef3497cbe1f58935d4874d7df3e9e68d5a1390f67d5abb5a02debdd0a2fbfbd249259d008737f28fa4e1f997922936b9a0d85e5272a1c0b5edca9d9e226e39cf0d5ab97dac74ae2dcda7d01a1223c775945c9251889f98ba2308be5432466450c63db351faaef0023b5dea74f6ce8cec327e3a3daa20d19e76a715256d5b65f16bf8c89591d8eab04189aca6e95dc02e96f05640cea6c402496b0264a4f6904546e783465565937e7af609effc4ae056eac6bb51b41c17a844e63ccc637d22838a78e16b51cbdc513c0a839f142d6b40518e5a4ee823f372903212eac1719813d0042a43859284307e7e850e9739e9e90157a9a03b0fadfa860e010c3acf397fc97d857a4bc5a4fe2f3b1b0b61f7608d2ef2f79c93244b391c470ada8eb8dbbd040dd25aadc3db94032ce217e72405b4b0a9d685f62171e65ee47fc468686a05cfe9e3c73750b4bbd312d02dfec0699787e7c33607daa6a715545742949cdd9ef12c598f04320a67117bd0af82e71fe6f667e9b9477709417b41215f7c76b965f4307b COUNT = 11 -K = 75862d4eae74490c7dc96f878bb89be3 -P = f066a247c8417dbbe3bf5fcc4155b77f38daa5a57c931e1618f1acd2c79e6591e6e90f66f4269daf99e27225bfbc414c1549eebb57ccfe514d1d45bcc8cab9557d02a10fe078cc17086f93775a78b6986efaf626579e689cf881fa979e8d1ee3826777d52b -C = 3a218639cb9a4ba6e2c02b315b8dd89e53bf6a6e03586c584c8693806da316b9fd3d15f044f262bf1ca2722c0a90f4870eae8d3bfce1cbdac55a1f11cf4b14ba925f02ad3eca25b839de79bb737e6b33e22e6ee4f2b5239fae5d625b4324d0a2bfad7af9ea2eede797536bc115967166 +K = f390f45e43e5cbb018f5af9b7d4f8f0f +P = 554bb9022c0646cd9b33115266960519c9f9b60760a8856f92a4c07282e21d76df3a78a5cae44f40a39edd9d32a7fa8ebe55e828ffa704d817eb7147cfccbea703bc28e99f2824ceef24a3833df9e9d3e29a045111b3d33e78c70e0997d3e91b81ad5ec8bc4adaac56b77b27548323d7d9cce42c76116d56bce263225364a3d51237e796c013412750600c6cde641443733bf713b98958e8d9ff7abac510717ce897b9ed08b69825d5e26f0acf35cd3daa497d5a621e84c912501f3e9fcb1717695278f0c5a711429ed52bee35f2276910586f99de281e13458dcfc6d6af7e87a6bd606ded9471e28257ba2512518565eb4cebfaedb4580b52843ece6b2d9fa45e11eb8e1793e90d9c9b9f474009a0d54ff71f0695bb0afcdf7f6e81c73a10556f526a6564587a3c82680f0bd93b28fb27a88c67d7749f26cbff37c39f409f71accefd287be4d73afefcda4dc8567ece0a1532d5010e6de2bbea66c6f805aa0a7df6bdeb82ee56931f3cf0f9f9fb7b974348a1f9383ed65af959a02a3aaf54aed77c0e2f78f2db6790ce256f93c78d6c573598069a518930e00be464eba4a7415a54c8945e8a0aacc8e26315d6f61fbf35bc8dcf97d0525e6a751f0f4565b56ef1aef1bb0112b157d9eb691b7ff7b6016d9cfc85071b8995d6657e21713a5de6f16ef68d57be2bef028cd0ab8e0b1c781529f0f0b4aeb4743116c04e2edbce9a +C = d05ebb93e0294444419ae88c66d8664b995b56c82556b2c972c3dad4c0b405c79041bfc66ce6c2d8ca2a03b583a00eea7833b294b6ea3b5a9e378b1f1065502a4fe3080d481e04ee58fdf21d7656e3283478fca0f067fb4db6e195b9841a04140ccbaf29324c384d54ac6566b0faefa275eda7d95053531828b675a4ae60d8beee4f1a50e832405a4a4917b8f36136e536e722d6992281f3254369b4024bd14e333d50cac5f1e73a66bc72e953f433028d03b4c24d8d02764621c16f9d05f01f1ce53489f6bb576267a9bf4c414f05fde1b56040858b66bcb603e7cbd7bc62c7c1a2544ec9391b7e018c952d502956ce81da3eebc712c60be2b0bea48fbcd84891e377cbe830994adbbc1da1e93edd575c605be0071373361dda96a701b0e7d10efda4bf032b0cbe2ff03cb2a86417f7a50fe988a73489b6d35986dc4d0d293e6054838a50c08e9f69a7b1130a9b346d6846be2a3ee5d1c02ed4487c82fbd2a16e8dc726ef47f858c690a229a6186b5a811da72e285c0375bc5b95cac9df821c8d30827f51de24be3f0f345c32b2ff7b94a8586c5be8f47545cf0764596e977e6dd522949df42e815cccb300d3d1b07a87dacba4e274cac3c0347952f64d8e27d07716e5ecf03711e8e1f1b4cf2556234ecbeff41a9e07b71f4e9753e26d0a0d1b1302e52a7d8950110806bee3a72f180823edcb6cd78370aea99811b7d3576bae7260f606aba19d COUNT = 12 -K = 0f540ddbd1a8ef87aea856777eb602c7 -P = 892ac34d1b9f6440086093472dbeccc958cff2333ff73429e42d464e75b0abac4f8ab1d6dfac1cea4a6217c33d1c3ac4b4918758aeca646d4ff7ca351e053a1ef7d71c2be86c7876a17e086a9d014d6017367c577abc9d6916cd6d07e22bdbaa0e7fc7a6e7 -C = 98884ca6eedf43dbeeff6c80f1a69a6a3751e10a569a3c8da742fa44010f7c173101ada92de3dc3ef7a336d00dc971da3d6a3d7fa48062d6dd69d67cabe206c3b09235206b4d799fe669bb58628eb0d57d39ea1703109becff8b2035901216cadf727f687beaa8a6dbec8b85fff2338c +K = cbdd51af9ede46434ee85e536a17f1ed +P = 59da9a7b5caf46d8636798acfcae92c4474c58b8a3baeea908421751004e00a578904c6d2e345b1338451a90dceef65658be7ff13090a279088076dcb2d47092e40eb98f0ca4c40880b4e09d6db056b09d1042db06077f2e8975f35606af44d39074dfde07c9b1b1644dbbafbd52ca8eff7fde6b15df667ac529580003eb6b4d262ab59758920970762cb04053759fb78074ea3724765a4c30ce1cf83c6dbb4bf21e30edc034f38c7200543e6aae027a7658fdde03e442ff9a485af172051d0f45724b94864b8856072bb4f79d5652ec0fd155011d6a365affe60b4dfc54f1fcbe421fec1c129251e00313ca7b88ed012ba2a34b9a701eece121bf64c15e80331f23672169695903ad62b72dfc399f4aa8a5571de4ae3a92d78c595f4b05f248d102c27a1709f2d139d3a355b94afa9a8f64aa27c32d164fcce40386103178bf5dc3aa0ff5cf1b7af423d4b1564cd9946691a210052fb09cb68a7d98d38e904040971465237669687f41c7c37d03144ee533bb037d45c8220c97eb215b87e8c248284ee4e14ce1d55283dace3aadf57c98f9981fca142564adfac5d23bbbc9e1c6a5951e9c471532a8d5f0dce2d115930b57c52c5a83c291eab3130596cfdb4eab0dc5bd448e840b92645b308a663645412f5022587f40b31aa0745c1882ce0549866f9ba30e1b844cdba0f854993c14b10266e1e120fdc27eb9fb4b6b6935bc +C = f92dd638815596fef7d632786d93b04cb0e54894913206c0f2e708c115e074368b4a9a8a655f5395bb8fcb2b201b87d195c468159d5ba4d612aa5a2a37c843b22f25ad538f7f44b4a6fcbf21d4ac61bb7d7bac69352997214ef6e799325e95f887693e80bf3fcf63ae70ab8090a4d2a4fa4226abd57cadb4d42c6c818354a41527ab32c619481058707fb503ac8d3f7b8dc3048df12542906dcee2bdb1b8980706bf183fe653283ff2b1b1eed2f900047f7672934a26ac6eae55e60cf140358efb1e03b5ca28672ae23c210d7fd62261d7607f302c80b933d81215cf62ae5d04c2c13e8087837833c55497e017873f3cf0e01b05c26d4802fd652f49613c811f98bccbfee1b362a43c038ef4f95b917a4f6fb6887a5cda17e9fcf1d73fa6911f5e26714cb35bac3aba9a5a574f8ace11398d636a8805ad7b8105582a959177610bce5b8d367d50fa147e4af740dfb4b27ca61891bc93d80c8a1514d47a9ec069bd2cdeb9a08afd0bccbde99ca10827601ca0ec836d764ce06da0157faa2032bd75d8afe1caec359781bf17f2918103ea01e91d1f2dc7283761d4681acd3fa29d73ceab021dcefa1b52eaf435f967eb23013e1fe394bb0b35b0bd90cd944b26a0282fb611548b53e716a8153509e2ad3a0b827b4e7a6dd4d264f9882ddb7965258a873edb7659b4a3a2ac078ea585a9a850540bf4b181d2c7d2ec59d368c6c93c336ac8099d087e1f COUNT = 13 -K = c4a2f3bbc0782fffd5d6a9f1b5bbbeed -P = aa9e77ef3cf13555d5bae627c81c3817f16ed4839770d3fa8a021edb08c2b74aa65ac25913cb27c6768216e49948d1e4cf15ea4a25738f11776ec3cea3b34a58b351d9af40f8ac205f5d46b449df2020b1474ca6fe30bc900eedc90b4e24502b8ae5c8eb1c -C = 1a823c5970db0b5fc9686bdf83289514f6b6d2e45df58c6072fbccc5b10859acd4f272fca471c743083f8a408c09cb2d5fe3df4dedaf8bc61391908d28a57181da45d8a7e707da5165419abe2eaf71264f0e78a3e2266a965b25e9614764828103a567a145d1f43b2f6c6d0d7bc47ea9 +K = 97401bdbb4875cda99fdb58d2ba1fbf1 +P = 1a700cea8f2c0e184c14dd6ea4d5bbe0c34ba7b6e1cc12fe659df916bfb2dffe06e90ecf5cd69e30cc33f83da31963cf5b33871e1445af0d22715b7e3cf9677094a598c16b1c97db515076b51d3a86448599416825b44e520297c7388fcab57b75247cec5824396596408daf75e2dac814288740640ae50bb4832eb4430bf8a16a96fadbea475fa1445882f9a326b031987a01eb60c4ca609d7c9578bd782fa886015564903816f89148c2adb615b84745956f91bf645d56f9068fd64741b98d7cbb5a90222a80346c4f72c7d283e7cda61455f5a5dfeb8da66a180be815f7dd6df2737a505762d257a6e4d979cb6726944539a0bfc756c363acb6bc1cdcce2459ae7b5e531f138065bca26f5e0f4186245bc086195244955655447843dfe58aa60c07500e3e6df101aa82bde9e50aeefab264f635e7e1a686c3f0994cbad377c28b6f2a3a63ed8a2ddb6a9575e40f1630fd363bee75687122f6508e7842156f6ad85a8202a38c41906150a9215715e3313e8e7974dc60b1a7207147c26a1aa5ca1c372625ffa92b3f8cc71cc0810901b3a043c2c9e667b26fb82f0547d0afe4d6740f68bf9c36857bc4e2fe755e09358a6a6454304e8336da34be22279eef2a55a280243268efb26f6148ce57f248d601ecb908a8bc2c425da98429ffcf7ae9070e838014419b807a93f861cccd45c9df07ff2aee165c1c354a8f86ef2390e5 +C = 1f10a1f32d8aac4169cc6bad92914d91a07811a61f0c591368975065f9329bf36d396c4df4d0c88aa06d50530de6b0f8a95f5faadb903e52998e7e1519e1f9934188be3e7cb518ee209036a2bb2e5cc147766c9df7f0ef819ea665d4bfe85c897523ef54c036b7fae7dbd60899ecaa1f9fa77f7a60796b68f0f105d22838a7856ba260d39fdf5528d5b3d3fb8ed1cbe2cdd5153b43257eabcfcbc382d93ce7649439ab4338fbf32e4c89273b522ceff989f939c4cabf66589de1083878a1014ce6ce409655f308b97b1d72fcd55378eea1a7ec813c8513e9ac13016d3a09988cfde915667542bfd38b8f49dd7eff87efbbf027c7057c06c474d68528324f73a0c3b7346bd8f3ef54c98e67a5ad43af71290c219ba648a5b132f086ee4fdcd9ef07dc342075e3b68a62a4cbaa426f1b6eb6e5aeda8b6a2da533162b459031f38a49ad5ed4a0cd231ba176382383c4d3940776bc72dcf273b062f52d84a487e42173529fda4bb03d6702cb6d951cbe460a010e2d967a4ecae6008bbfa66e5c59315cc1a8a30b069fcfdad0aaad031e889157a30f830c8d5586a7589bce6fc5c4007c475e27ca62e8b715324a8ad8a6e60dfd622bf3f273f888e8298a41e3e961c257885596135cf10d30dfb76a99b7773d094ebab1d56d6c1eeac0e8c15537499211072ff7fae690f84844a7efa6bb36db104148e87c16e00486508674971f31981f595277daa71f09 COUNT = 14 -K = 06a5b31c62e53aac327a31119f7932fd -P = f0d3265c7d8f80d8121ecd11f4656c11b156a5ff9b94b15f4f4967a1e7801c9704704790903fe5b0ea34bb826aa733299e62a53be263fad9d6c18f049c604fcdd72614643eba92fe599775969ca15df59a064e1f310114101b7363491a4bd549bba923a8dd -C = 6bcb816733087b14fabbac8de1dc9e717a7253a6c28b5f1b709438791710bd2fa5102f2c5f732cea20e43631e57390862c8673eb65f74acf2ae85d1f92a1ce91bd0d4e97ff5ffca565ec58b296ce10f33324e823d5e56626c1b0a42b3bfaa6cdf97cfeb886884ae03f1fd0d8b19d966a +K = 7783c240396cb672330def376130040d +P = 2ff711e1f5cb9ae0347d68497b4566e2526177254137bd99ccd0e3a6a977e80902d11f8c024adac00d4eb62dcedb06bb07ae194b85f045285705153467dc191be6ec09dec9855a7e929b8e0bc12f70a2e2f21d300415c6e5045cc2dfd2cc33464073d8beb92270a5c1ae6b9af71dd97ed1d0f37818ffe153d5a444394341ab879aa509316f2cfed07b7a7983d42f3305527adfc4d9a557923f5fa8ec02136369982eb88bf5a61e432048cdd4cce0e12abb4f692afcb9a320b144a169232e13a2fa0b4d9720b8e0a934afa014391548363fc4fa289bc4919d3d5ceca11a10f64fc1a33ae8cfc84db1bf93a554c5e79a94249329dad9fc30f8186d36c915ce71e9ec966daf662454d7519d9df9046fcf53c2c46f9b9dcc27b368cbd853c1c52b0612ba005ec3d3a086d594a706efe555366acc60fd98a60ba9d555f7e9fc6707eb87b92577f0b1e4067a340341772c45bfcbbac9a682a858530f747fbd39e22dd44ee554d68c239160d6d6feb1ee5cfb05333f8897b98b207881d2b8c1a008efa190ea570810874be985526bf4ff9c4df9ebd94d3b232c9e75349b27c8f9410a054e4ff2db1936e7f65ddb900b4db6dd17bdd51c7e1734d2f93e5e94b1cf8b2c203e50b8ae180f4c1357236f1101817870ba9681fb6a9678b966d4c05727db062ae0c5d1631a0c4e6c6618fc4d6d1a549428c249caf3c1c985befcc61ce7361a81 +C = 59ba123643538e2809916adbb7e4403ef04bdcd1c220b1e19971697a78ba1d6f2301c53ae09898ce17fb02654cbd9adf132f96696f45c865f14471608722e9cfebbd6996c7c083fbd61bdf344d51f6fa0e2b20bc15a39fb65bba9d558c00bc6bb0ae3de660231d7115f0a2de84832ca515dc2d93dfa7ed7bde3e46600fa5b620caa0992d4dcb8bfdcd467ff6096544b443f464e92328619d68baaf857a761079f5854757742757036dc6ac13a5a3e2c97094c51a8e39115becabf0ad9bb0da13e5d34832426dc8b6b7185f1b952e5af84459746149da0715ead4e11f2098cc080db221869033da1261d726df97892da57b802428f65ea8a21c29cb35f324430365db715f3b679f1f4d93ee83bb55fa5c040e8300da1a78f3f5774890fb052fcab492e84f9e3d8dab5e52b3a1ca12ef7a555f00ad27c7e3527501ce8aafe3893cbececf8f6d2aeead16b37cf5899e3a4948bbd00e70e156d451bbb62baaa4f446f9096638b7a6af040b3aafafc0d6b91c69daeb0b3ca7d2a3c83599756664eee18c0d8cdae2955471ec62f86f6e1514f42c15810e32b7d3d0a69abf6b5d05537889ef92a9c0f7adb096a8b0fa34d781f589b47f1bb96a40ed65212cdd091a0d033b4abc90c62046cd80f0411a411e7554443cf9425f525a56250bb48126ce00f1e51e98213a6700e3aaa5825bbc867e6b48a9869ba39eb211898923f41de914e2f9eab4d0b93a3fdc COUNT = 15 -K = 6fd061d4e69039e7debf64457e9c38b8 -P = 39cff1bc12e5ea8e2d071da00627b233f80801849cc2d25a12dcc9dbadb16a3a66cce51cacb20b3a401a3ad849505e06a5fde495be42faa100598f3840e2109262c22feca306932342ab8fca15c9caaabee7b974089a39df009fde3b1476d108d53e36f900 -C = 6eb071c3178249916a0c7c9a965c5e545a737734ead9f64685534f4c8cdb6c4096fc0dd2b57138097c0c42a31387d34485704ffa0437eca752e7be1010a71d8f0bc2de6213d43e7cbd9514db41a183bca44f44293258929adf955a873aec4c554c4f9a4a80de8f2e3b6169a1d3424be3 +K = 2168eefda5b2dea830b23561766abf1f +P = 91b565b26310ffa588e7365bf8af935c1eb9ed516dea29f82fa1611197499ed64110b41a9e102dc1766a35efa36906871a42ca86b836357f3171109548686b9b75bf38a717080233330cda4ca2c465d44502203ac75cc351c477762dd3932607fc591cffa3aa9eff0510619c3cf79ed72aeb1e4bac4767e4044e4e90cf50f9649d70a4abdba37f1e8d0a49441c0489847afa8fc19f2d6ee9984158c604ff6a6099d8c9f3190dd70746780851730cf81bebf459d707a373171f39e633332905cb4f0e4d8e96b4bf02f674ddbaf2ae78d0140529c43d5287a35256b92298db6d58ce02bf5f7a7094879ab490cc7255fcb59141bae77a8fb0ea2f72af65d1098698d3d8ec1e7f38a255c5f058fef3331efa2dec0a06af12cb6f64ce16dc2e6c9575ce4cb8e8fd70d330a67a02319a6f5a4c62253084aeb688d219b5ae821c62b15e3c8a3d2166cac3ff0205fc08f5f9eccf6c45af523a3710f923a4d962dda68f66ee11aad2b4416bb6f934a8ad49cba70f34e1ce900c5d3c7988aaab730170dfc3fe27ca6c32ca0aedf2a81dbd2d64feeed9f0bebe1e3dea5dfcf48f8d5e2b11837fb4529be553d516209f1c31b2903b818817128e206674f0f6325c1e757bdaa83192a8bd110f2b9df24eff7c312f65d8186e6a7036a2e0e5607cf64c38b9bc6975c483c786900d80f5e26dfe870d275d7c08087d7b70b32262014a1a0fe7a34a +C = 20b987a7ee078f7fd9ea8edbfb16364e7943198f720d5938a65fd3bc1a70c9a8058e331c6f8beed204af6b362409a5448b1bcac35b476da3899a78f5fa3f62ce32ae8b60854d515d0d1afcb14cc31c9b55b32daec3099e1d9b9db96ec0a131ff0e0d4d2966566a409372bd1ca69a4642a974fbc157d0c09422bfa1469f339655c01f76096d35bad92491a7fb3550e4edc858b34730d852618d5de6b5818c41ef87db11f2c5e8681f59f35a9b51932dfebdc621af91b05d595727c47f6f222f6d8e5cee9991c61f31f70bcfb5832386ef1d30d2d1445e770d124490a5760f0efe2ca3d222492ba6ffeabfcbd70101a46bccebeff80d97161a5b3a58d25c6b1e2514287ab14f41c567f4a5d50814bee7863e3abce7182cebbd43b52ad1a2e16266a6a27ee9cfe58dab50affbc9ff77987dcb3961c76e4d7be51b3e56d96d4885a0ebfd63d9e54f5fb980a2b37a9b2c0f9b9f08a0e78eb9dc44cb153861fb07dd131824621f07c418c63b7904b942682c291b786ec4322ff84de9819a0890df66f14f40f57c8bccfb7c89bbbf0723cedcbc048f94bfe6b6dccf88739315bc9f653617d6a622873fcff71141ea28833e320afd59341d14f6640919c4e07779d48c8c080559db47591c66a666aee0591b8fdbd051ae2989efed62e865b291028143ff05ac67b50fea3af3f3f02e9c88fa0640d1814f775f8443e96ada4d70d5817c9c64e22c75d7ec1b43 COUNT = 16 -K = 337b86e021d7b4527516b55f1cec7f8c -P = 6bed44e8bc2424b84869374ca7c720ef35c3406aa2e5c650e3a5e16d9146007898bc5c4cccfb6101e68c89ab733ee5d3bf0704fdcb75717c066af27394cc12da84f9f8770c531825114ce30ebd8aaf938aa224c683c8b927198b0f6823d627c8b29437aedd -C = 3331fb026264df902d19e6fdd5498c10d5b1242e10e1c359b8255efd387b3376c78c817b9beaf1a1dd50ed7c88e51f4e97e9ac6ee7f63eacaeaddba98b3f69519e181257f7cf99949df19b81e01562849acd7150a634eccb620fe64f228c51a67fc64edd4d2bde6dd09281f199c4ce0a +K = 90cbddf17a466ceb32f8bb2adeada1ed +P = f109e8eeaea763206a3de66a58bccd458015c9d5eda4f6d9e5bd4fe03d9b3028c46242a42652dc5f8a2e2e7b09897623e54da69fd9a0a518abdf1043bfac1f43fd01be84a5629b3398d3c202ee9bc025f33aab0d56d5aa0dc82f910cb2df378df2fbc94f85fb8a667938370a62400169b386820ba417906211f5e2973e7f6683422db14891545d61cd21d066172f4c8352e03ef68c8d3faec3977c22727ec452b56735f021d8a46a048968eba4d82cc596342ef4025636c0b2d5ecbc1a178a3e0c65111d1abd9e44a6274b524e434da51f6575e71719461dc257cce78e0d5ed80ac0001816bd37d4cd6475a7b9990331b339ca42643f322836fd2f4b26416c8c057d6f1d2f8dfd3023ceae56fd1032cb755765a0aab76ea832d61ad43e2cd0ee4023852533d4a08a2a103e152df472f8499926422844295aeabb39fe8901cd9e17537a0c87b1aaa892387056cb02ad6cf40148a9fe4b233a2768415d0b0644b59aa4a3786a8211114b87ab91d15d13ae5a47a664a406a27bddf9e5a2576a122ead84d88d383e8d47756a03c7abedfda3f7e7ee75cd711bc1afdd74c088a2a329a0ec5519f1cb6b2f8db105ce06643b0e4c0ef115af39c982996ba6bf0d8d996e542c5f27e3dc1bbbe3eac00685355679d8483eb5afdb0c28ac653859b80ec292084e8b75eafedd5b9a465edbae4bc36f78934e86df0a13c89f4a3ac767840832 +C = a8c2465e9ed04eec8826651111538f71a634365581c310ae05205dbe5fb672eb79f492bb206d1c085526e83550d6491a8731bbd0a39f847dee94a7f0e1ddeeb217f35d2e723a2567286a0e6bd576b73dbea8d0d7b1f828d4cbcd9913931c3fb4bd91f329cef760ba1b5913c0bc1dac8e4b4773c8e855533858fabb26c74a7e3fc5c08c631c6c2639490720000032310ea17d3e44f110f418393ab31bcd0b2e570d926b880ab0e67695a81e04b00ce1dfecec6147e8e409aaa902e0d18a4613c19ba0e8f52db628065c5eb3f2f43303a363836cbf3b4f3596abe7ac4dd5ef86c179f2ea3a932851e5e79aadd86ba02fdfb9f94be73b413536880e16915c4f7a7a9505087881fa1dfa668141dfcaae021fb95609f6cc6cf1028550bcd0037140b3dd53287740635cb238521accce22ad760b408c0c4751fce87ce230554875d2ae041e261764c033c297e89712bac402fef05ad35ddf9a562c3372cb98f6a8a23784159b354ae8028d774656947f46cdb44fb81ffa78f1be500a5e244d6b71f306468c27a840d449e58b6f62f94197178042f5b8c7f3459f49f1d4e926ebfda3557db0b1863c4685324fa7703feda28aa93ccc11acec8bd96e246effc6af4d1f83687945203e35fc6d46efb7a4bee3272086c1659128ce81a505772b737f2e47d403afea49500346d957efdd7aadc056bb71e3068519ac96bf129bd1e3c4b16b474efc3ee636e8f62e COUNT = 17 -K = bec53c335ae79559c99556ba9cc0394f -P = e09084577d968f4294ca0ee982422cc334fc30a4e508bad158c2c2c39760efcb407d4b1f0ffa2151302ad5dfd68905883ff2c33ba126330e3719222e6a2d56c422bada077d99d8092348f1110f9f9cbe07b63eaa1eb99740274176d92af2bcc539a0d29e69 -C = 911f169b6d6ae93ad382bee91313c22a6e0ec476f810b3a3e6ce7073ce0530e0b5a7ba6184c7759eeca94622d9206418d399bb4bd6126b2a789e711ecd1ef4267b2a62d3bb9b706da87f8b8ab3960ed12a3c88011ac4c11324c0474db4b56ab8f1631140094c883249dd5ff7d9763773 +K = 16b9d9f70e43cd796af5ab6094033672 +P = c67d976e9c15607cfe1e71a82544cf9976fb7d1fb4ca4f10ed6f11141878209fb48a2dee69ab487c680129b57f7e0abdc03d0674a38c1c4067cf6a6d889b8bd60e9f2f53a657ee7d792369c28b9c62d6017549654bcc1fb9f051f0bab5281e208edf6be4601632714101bda9548840c824293a058e1d40611944f6829a1de810bed1f560e24851d6e1e8192246b41317ca7a5475dfc34f496f1b975ab4634298b580ba76f11619b83bffb91bbc945fd7ee00fe841f6c798547d7e42cb28949eb74ea43c58a0b58821a71fe991a04c8cf5a26ea9c43d7af5126ad79c856cebaf6b6fdaa9e780628270fa7b114e25cb6a632fc754b5e33af6a63d6d3dc3f4cde2751275ecab70724e58d662dbac779ab8b05f8289cb5ff4327bb3c0fef4f4ea981a0dc785b132018de2e7991de143c1473d866c33f2ff27b4eb24752c75d4ccc597c3c0dfbf15fa4ff72280e8ce1bd829aacb8f515bc7eff3bedfc13fd15599e1d7fd23b4afded014342f805f59fc127e460bfb571538e9079f4da0237fa5b8808ba16365837781cf5c174c523e1c5e74c53d9c58a681e43aca675465177d03913d4d4ed921e522599e909f7eb404e4abacbd0eb3f004d6e171d38923f6d08da2a9f197a9c0bd669e329715ec0350df98a58735cdcb20f0c97de56b066edadbdfa3e176cdceccb87821188692c1868f823c02a420348a7f4469635d0d7b9a5c40c +C = ee2eae6b5f7627747d0a714852727f2f34343b672fae393ed0230faeb74c22a6dcd13cff47fb8f9796ec3efea866e43f7ff59038417d200894d8bf73c82ab340c7388af9dcedebfb00d0769fb85951be688d2060a2505bdd025760477f337099b359b1fa732d5a02edd5282d60804b67bb7492812458a987e168f49b1ce1bbd3eaea7e42faef6fde7593626ce4470df02e5969dd6540d73b67fe651db9a654d4c0b90b037215810ec60a0978dc50e13a08d8f647dbc1b0a9b1d2fd1051854e59e042e6464124c0b1c7b3d0790ff8c1d2ce7e413f32eefb7ee9fad71bb89fa4844d303057713d882ccd75d04cb327fa103bfb7d0cf19a6ffb74fc3e73137cdb6399c0aaeab4194eb0f8c26291c46e42a1c2b3d23cf4a0e1bba2c2ce9257d633789a69198715241bae0bd1930184f6eb99a24aaab713af4509c0e9a8a3cc1cddf3cdd365b9b11b71d71401352303f76d8a976eab5d71313a90edcf32505a25cec5bf01f9a31cf986869487567cfe7573eed08cb5e522a6498a53dc2d145c573af15e14c2e69d33c7d431de1d802558c4dae0a58f76dcfc61d43f80471c7247cc80b85fdcf9266324e987a5fab5a074835fa6646eea98f1278914cc96bfcb619f3c7efb49382e44e0daa5ea2d391b4371f6f5dc8005c6961df21c8ff76cd40d1914a6183c419ec0cd29cc8040ec2761d6f72b75f2f6f9dc45efa8a6a52eb60f52ef6f9bd01d6c534411 COUNT = 18 -K = 1c0418271950f2b4b42e8a8b357511a5 -P = 0a9ec396456fabd594977f39713d78b7af7bd63e53be804343cbd7019bb6404750413adaacf9b707e02b60b063658db2608e10e46a08eb099ecfe9f5adbaf1c024ce23bf722f3670fbe70bbf92997b0399d905e6db8a0f3fe6aa877e6cd2e68aa4944dcf23 -C = 25005c6d2332a0e6eabdc8be07063d8a54d12dee6fd22aced9634242a1d501ce70b3855a37747f50074add320aefee27db962800fa9fe45d292a8b85bbb92498f99c41e38abec6343a28e843ff6ac6d588b36be082874f01e9df6b06682feb65de1306a62f10510dcc05f081784d365b +K = d6a02aeeda22e9ae76176e4db0001a0a +P = 5fbdb719553b220c23707b14daf07b6ff4711bea19b7476d1e2d1bea486667c61221147216bb9a037df5e1c23228cfcdd781e6e96475efced159c742658dc77c02f695b7d8e87bcf6aeb76c8e387b7e7588992644ea260239717570d81c00e9fbf9a22bdaba7f6f86319964f68f1cfc309408082b65e98abb0c2e0db25c8af9254cc4e5c4dac7c8b9b733321d459c4b4f7a12326d490a3e4f4d70fa9f03a2e043808e18aa437c040f12fab25b06402e960c7042837c546b9f81ae26f4138028c0d64ba7d4fbbd44c400404ae8be7019a9bc61b1c5b304439b04eaa0bfd11fb4ee747a1960ecb85e94b297142d8770198070e2edf9559c5982b57bcd1682a83d979b2f3effa07d690a8f2c62c9adeebf9df0e8050a046f4ba52124f483066b79e66028874eb3e3bc00eaf1869e0039dd64850405ef101fc86a24a45a6cb5022a0565cdb2cc26ca136a6dbe1c6ef70ecfdc27e9cb8ee735aa0f31146388bd88a06764acc04444e7e2270ee06bbc7f766407e6b5445042c9ce315ac3e89bca3cc42af378f822d41be7d378c33bc310fab89362c1232086a22a105c08f0077a165501973b6e80bd9e9c6baf4f5eb69d2ed3b8640ef6b6ec41d71244cef55b451d5227df85a96824bdbd4e08af25b32e43eec358bb88664a4a5e9189a2090559e446594d39b054e614843832b0562320e5de9183bdb78382bda8b3f53a6a45a93b028 +C = 7eb2ea0bb0c6aa5a65863be753a6c7d6e85d69b7e13420d0839b879b26ae1604b64105a10698cfc7808d0d6f5b67c21f0db9a44b5a23d05aa637c9588cee858ed108129d9ecab84dd61d675fbbcfd56c936c487c4f3be9eabbc439827d8885edb23751bc8a53dcdaebc99b5fe6060b66d476249f71287f57976dea8446d34fa071fb60d2876a5223e06195f1945d2ec6a122e4927fa5cf633c55aa824472b6ff5a0832f1ff950643b898341ce5561fcf51256cd258a3399364b1a6d791f501a13df925bcc85999d6feb0cde2a1267d7325e0ff135f98b4d65b4a45b7d579b6b2e6c8c5550d005d0b6f20edbe65b681f6be0fd13a15f3cb4417cece8a9916dd2a3a56ec1cafb762c2dcf73417d7540d6a2177928cb8a49ac4cbc2e9e0c47eb358ee1163441d29ecfb1f10385d63fb7b9ea566edfbc9635a26cdd8bb0946ea4483bc7b5ea0a1a4a8a86fe3fb9764772e1d91733fac47152e9ac1c56a0a017756f8276698bc29b423bbd22400da2d11e48acd258ffbffd793aec03bec79ce31355f60b0cbe78e746550b8ae68d43e0ac0e5fc1462a034a5f3cee88fd94b6c997e9a22afbd34e9c130fce77ad3d3afabd2d3d1d5e3e769d836f2352b262615a90e94b95d6a21c97c91759b106554620a1c084c7c85a92c45cac3196390d85f00400291b32628f298ae7fe1b00284cb63bba22528eadf0cf0951a9616f02f3b958df07aa2650cf39ce85a COUNT = 19 -K = ee3ad324dbe48e9510a252d29d2b2c3a -P = 910705d920e6823b641647f0a757e9d7b99d2dbd81e933ff9fd40fc2eceec5ed9ee7c2b34d1e020fb7143330cfde0d268781115ed6891927c5d3a1c2f7103b8f886735cde05cea6d9db8f829648d5411b84759e3268f8e8757112c797accaebe4ab4f35bed -C = fed9551799d12a26b3327c9d1220448f11c7fe54df8f9964009c22f3d4d2be96bcd97a66cf93709064e85bc2b70c160912dc6f6fadd360cb70692481237922ea413c92274b82055ce56ea21dbde7e8516245e070e432f4aad2768158691d1c65bc0e83db9a5fbc6c1aaa135c2fadcda9 +K = 50b9d14e958545ffe1906896e8076caa +P = 5409330feb6ceb7ab08ee16443c4b2af76f1b19a20104e17e83c9b94b566ccc88506092e3b7203ea5abc6cdfbea08842299f7f83101ed3cde38b2483e1f50f7d6f8f85e13fc528ff8723f6f1ee8228cdd1013a5ac78c755865809cd44a06eae2b149a3c2acfaefa185f697014aacdecd688297bd55a66697f3deb3efd48607419e3da32a883fcc1ed4208beacc4d6a0b91fcc07eb0784983b632039f4b4368ebd5635e603c540c828f614fd4b68eee3ac995d9de7c971cd688970e3b8abfcbe4a5efd01b883c360ed4f9d401a9adb4a4bba51d6c40d688e326d9f48477e906bdca65389e0ecb7b226212815885cdc0107dc5e2fbf13479d5cb3317b60e4edbfb32b8c17363c7ea86d0235121cd8890dd151f21086b9c2e4c43195e825a2297e8ba41a87eaed39e0c6cceb344c9e7921fa188dd28ee9a029cf8f326e16518b0ec5bd88a293726c9e2279e96e85bf3859a883c05ea2420183d10173682f177438f6c971cd3271cc1f0c6eea5307f699a390298512882a5ce6995cc16aca392712e39ce741eea689e29feb0f557d4244583ee48d77b513cd4ec09c4e2b2524693d73f46a8d3480761e229730646d94adaa22fcb3702cdcb283a172836373ff20023ce31c1d33dc420a4975f650ea68ec0c5a38f32a2d8469706d9f4ea70e08dd65cf20a072d7b226766725bad2e6140eb4b5860faa90178c7a5b6101debddbb817b +C = 9bdc531ff847798996bd56f7659f6e5c788d1ce3ef7f4217b207e280f83bac5a0c704e614140d360bea44b2925de6dd8305e26f2ae0b99ca7cb0d0618c7e6e0fd37b239618784caf17a6cec462d5e25d3ef952496d7ded5bffa2d72e52c00010e5ee459b41146097a22dbb8f8afe2c134470e54ab976507a446a90efe02d48ceece81df3d4043995721838d465663f762828d8b1ae89be7b658d6e3f671744e814fba89a37db72d714f6751306005b5312385f3b5b2c3250319606d442c4ddfb4df3878d66665b9791bb339dd566916c5f4ba01766238e34e57e21f486a6e6620370240bb91cb8c796e2162aa07b23b64009f9d7204aaa75b11c686812d592c925a12b039190c9a3e0d260319e7e7dc4451584c9e38e5f3fba425bb44efc61ef1c8347b09b9c78b9d398d608c0fd4d9c6657ef24b47e40b6907e563cdbae4aa011b47ff3b6cc4928aabdcb1857febb345cb3817e43d18051249d8ef90b75c0e2fbc38ebc9f2bd89f0a3ca4ade06f37b4f51bc6bae5b22ad33d8131cf2b459ac7f87f23e85349e0baf85f42a1b1ac33b89c96e6fa182e862b00d93083f04b6e6322603cda5ca0abfe7dd739a8390959961347cf67b7a4340cbac4ff090a385edd0f971c85f68f9fe0fe78c58e9e19acdccb566f93e0000cf48621aadf6f9c8191f8a9e5d2efc51f921aac6df3ce4ca72da62f5d4070a85814924fb01de31d90f0978b60de1b1e9143 COUNT = 20 -K = a5c3d6a0483590e4afe1c4818f806b48 -P = 8461859d2ca504aa31653923ca5f062d30412421a4efcc4c30c965160a5831c33121409b84cd7c7c6eca11599e7aaa4ebff2051f8ea48fc748ce2bc7211ea9b8a51dd5867d476f56416272d9b7d35b45ea7c969383b5046d7f8701c49e1acce34e5c3bffe7 -C = 0f190af09ad70235b46f0d62aa9f0a470834f2422a753bcb17cc5a926e238a3160d3376e818de311e07c94452e9d825e649ebdcb7f17df85cd700cba657131ae8ea16a62ed14838555a7d7b261df87627536f10f24fa458539e890a4eaacbbbc6ecb417ed05e0d8f498946c7a1192711 +K = 80d24922aa4d610dce323d841326c7e7 +P = e2ea18cf0c370a851941cff89fcf7321d3b77cf35eeb995f7aa489e4e35c9c6b46e0d65f4ba2221bae45f9c13d6385ae559535d187ded90a5a1ca1f3acf08336f64c2bce5d9d30270a3dc9d46f98b5a0104703bc1d22b3d4ac933e0193f8baac7c96b891b6e948f2d9fd9102bf6a9c31b1569e43b17215d711ca300eed88e4d96a15808b193c26fb617b32cacb96ab1ac14468fc51a3c225bc3f430b869fc05edc2b9e646026dd76a2277158de23f4bfaea4758768eca3bd03dfc5943dfdb145fbf8310da4152fc2e1d295dbdcb8d3d14e6f172d012d7c253cb7924f86bce3981eb36b00d346a52530a56fe0c8f3ba7f10490dc0656be26a36d417af845084a2a9ec69cd1cbb930f68e49d1fc75d86ea43a7f6b3d2a7b577f9203097a982772a371e1c6eade937c97a88d6ba9bf166dfc0084e2854e0d2a81d4301d83bb55cb41983c4aef47b6e983f7faca495ab94a8639851f6aafa0e3aca4bbee933ceb85e59d45e70f1dae9af91d2fcec397005260a724df854ba8fd924500f06415d6346d96f8f2ff6978aca1c329e8f645cec60b83889c53e270e39ec0862462928c04c5e7bf515e1f873d93ea23f7cfcd365eb75681619066f1029dc1f836dab4b76e3bb8e5c5e2fb2e29330da90b37697b9558d167d3e9e6b93e0c73425532262ef15d64564a17e5d31ff531af8ea514f23069ae1dc26411db0dccda67bf29ba306a1 +C = 44ce2d35cb1c29b82b7a411d362d698569938da7902426f190e9e13e85f5a6d412b14719dcea9ae8d1a1b1b461afb2882d606f218f5af1efa433ea2bdee7c7bbcb30e4bf60a94daa081bc44c1dbe7adc6e2d2530a979e8501a84c6f2ddbe3fa9a6922ebfa9ef7ebcb5a117483474269b3a37281272abb540255474ab4ec7f2ed9cc76b2f7a199ac950eb7663b870ff313eef1ee86fb1d3a0cf0b17a16a07f86eea2026c77be6905a49ab28da52a70410d86e88a1841f2c3acd9a5090bc40be42acbbc7b3acc9064bfa080a3c0e81078376c44a12ea266f22d9a546c99954f964ac523d79ba4ae6eacc95852512d366f791366e76b2bdca502235fbf995b25b3dc3527aa41ae11b05cda91ccb043dfe61d56d3504d70c67481a40f18c59d6cae9e6ffb94a97021d23c61b9fa9d6e15147719313afc76e4d0c75214fcda513c9a76e0b7c3acf0bdceb28d69608f2a41e42e3de8490df620e579d280c3deb788a3186ee08d20ee6b7634bf31fb604026e1683eea538062033713c43a17fcbeacb03f5d2e880111fd9909040732cb18b207c2bc93a93fdcfdaf2c21f5bd3c87c3611a02a7137caa814729013e6f4f9fe5c79abb35d6bde94ada53440072b2976d07cbb64593b3594c1ce0ceec50c9f36e89250c4a20070f7f81895de572c4ab58dc89c95a42b5c98e387ef502522788b2c45f33fb7e1e8bbafb762f4891d5167cdc74b30da5af8084fae COUNT = 21 -K = 46ec9a0387764c05af6325d7e7b0b28f -P = 6f1a4443654afc68dd15ea50d3bec8c9fd9ae2f4b31babc06e9684ec9ecc476b397710965392f4f716f967a2815f6908f31708e32c839c76f9a528c63c5057c213c649620b1b07187ae14d4e1b614d7ffda9781e6dad7080cb2705fa581559ee5243b62740 -C = 8c4310fb3c5df89705b1fe1098fa98deb7a4c1fe926d2e050ce37b882e575ced56795dea6c68f11eff32afdf59c3bfd0a73fc5e350120d404c8f2c70c4172a350a9df6103924311cee832892568e5fa70c95f78953c2f3307e9827f6dd230cd37b469b8edd608bc6e4ce64deb20669f6 +K = 73e6bfe4c7e7525c050a71e66bb7b881 +P = d02e4c904b8e1b606f85a598d69c0c57d78a34f8f283b0f1aed7f2562c8177ae30514c14383a8e76acdf9322534545bac1d17bb6355c16881d539709bfda13af429ebe4132957bf26668cd4d6def3e77994f8bbc2cf6f1643a667fe731b04d22107b764fbc7831016b616ae442f16ea27ccca29e344fb614fd2f656590fad2bd982f43c39e728004bc727f19daa86c079f48343bee7ce9940d9087496a18580caf5d28d84c6ccb2d8309dd1e784682feb7b401523ada23180eab82738ea2a05a046fed98b25a16d75ee0eef3431a3092fdf9fdd88770b2a004ab4d1e1d0599461f18ce66ddc72eb1634665a9ef90e086eda7f660c45a94555ae22dfa864983a182f2a0ba341e079ae10943fe12b0e33d31def4055d54413554a43a8cf947267ce6f8227ed64dfda64d706f71bb301574d0e220828abe51fc5764089ef6d9925d3d6abd1d72c2e683207717b96a8c568e64e07745322c03ffd8367d258a5c324a8ed8ba8c5bd2993db9caf0effe714f493e12d5f7e504d6c40557070679c256624d5552ae2f65af3d774f851c1c9998895a93db8e81c3bcefc1d7fcc949bbcde1cf4cc242e0f4513fe8b0e6affbdb07af05ab9d23d64f1a56543fb2be0c54661cc189d1ff0f46b4a86820e4584d875884e6bfd64830699d29f72b22bc39c134fe590da807fb32be91892274249c27e672b1e2f2aa7cfccd0750b055b543f2e12a +C = 122580e544e85fd684adb1b2eff01d045a618524a2f8b34755e6473f8c4975bf89431fcc542e0d68ac2daca615ee69867445e15d2d824366d3e13d7d9e8693e2e4bb90e34f727b0f45bfd9919e524bbcc15d1c5c7d78f91fd3c5f946b5c411b989cbc307565642bd1f8f0b34a931ec9b3da39b1b89d16e2c46c07356ed007f3c00d6d67bc786c876b83f310ef0268fe1d17499a2fb64c4b240b39e9237e044bfc2a1e3145eaee0d29a0c8bdaa991de6af7bdbf788e3a34c842668f50b6f812020daff22335ee4f083b04d6069163f22e374fa3caf7d2547cb2a73ffc5502a70d76932e74e82d11f3bb1fcb55592fdc59b63c25431ba54597ca2e9ece02bf35d99d2d90e082a96c6d58773069605aaa90994f638193a37e098da981eafe741f9b25ec1252a6c3d12eb026361c6b72f4476edd00ebd57fb54e2e0152b7299ab3f77952d46606d5191d7f3d089261dd819ddec7bf5da82bb8bacb250cfe95b3d3c384ead1bb33a031cab31908647e467f7d772e33b51f1a64311b561a642afd3dd65c4ab661bb5480937b5688cec962a727658f394027ee15bb0190cf7fe234d59956cda0b80e4260f6fbe105064a92f268bb56b679d0b1cb0b46623a46151a58b12872d525d3bdd6987ced85dc6bafea0f50eda8088d8ceda368b0ea85d306770b1db7fcd46f91f367b6639f392d8b808dc2fb0858589273dc38d7259f6f2df1c49beba21089162701 COUNT = 22 -K = 9bb8dce511bc3df55d4b4b93841defc8 -P = 675e918c67c163482553f2b01e09ddee1110720189effd28f83596e438def1c50dea696ca64394f3fc67bbbada7c2ca84a9f01910950c90a641b340ca18e5b0c0c88a506c129f85a2462f8a6636ce1b3f3fbac3d54c735710e402cd6085d62b74123e10b81 -C = 6b3111e7c9941fcd55872b11e984b22a45acc57f1f85a7168e5878b126bb4239d8013c3b3eca0b5544d04c5fa323d97dfbd92992220133863d24dd4ba799f1e19175e6930384b3253412430a485ea6e0586d607b4e5ccdab24bf36ecce5a8c1e048a622d06402691be421f9a3460cf58 +K = 6e49bc9717f2437f10a6d9c22a4fe9aa +P = 76e57d60bfb8a872a5f25d3fb4cbad03579d7eb20cd5c0d141c4b45db8fdbc9b1062febf29726e2b0e4bf90a9a370a804556bd5e5287b1e7e30542ce97a9b7069654b60de7eece491766271609bae49104ae08cbeb54f690a47b922081ba5675e7ed5a96fc5d2a61b3114b9a18c337a4600a7327fc3db58c6705605c5cf39601bf0d79f7b0b9e97f17ce2d0331db47253ddf16cb06190820b7072416036888b22d9bb8a8d2c00318bc70871550295c1609e67d7a00891c9fc7a9b3e47fc62270cbe08c9842211b9f6278b7d6810ecad4b1566631bd838600fcfcb0a3310cbd8f5f5f4ff471818d268c6115aadf380eb77e97441e95ba5fd23395422c9d5578f7269972d776947e365173fdd58693ca30f367e6992812d3ff33a428127b61853393a21dbc73eb831b6b35c1160efcbf4a700cbb5d7e6c5ace22f604cda847100d04c6f0c8f6da79089ea882eadefb7b06e1555c263e6521397edd754bf66d353a60410fe2d2f97d6fda724298fef8c8bd3164895391b2e56d8c9e717471e55fe67dd550e0d5dc08fe721cbdd548f7030c53a6a7a901e4b9c99bb85631ef04e89e204216d968b0ea3d4ef4fa7b1393cdb1dc77786b6bbeba3af2cf1104df3c0d8709d258d6e527419d170f81373e007c98d63b7743d65f479268ba97366201f1d804365282515fdb00ee588454b288ab672f9aaf4063dbc316b6683ca8b65badc0 +C = 11741e62603477ff47097e1643b751517af296d7ae9aeab78abb8032ae57706ecbcd4d40b9333bc8866017815e93589d5c98aab00a0ce2cdb4a7894301dac12a98baad98fb2fc7bbbe85d3590b848b8cd230c9b269a83b1278af978cadfc2ff2ae66cc19dd4f473037852bf60d711847fe9590957998b01416d14c5ac5abef4701c60b3dc8568952bafa3cc57c4b6dcbef95ecb4316b54a8afbaadf2a2e37861f465cbfb65dc7bf49be364d9f9d270face6ec7e4b5f28ddd7bd110fd0c15e1b2d3d8a194798ef18bd367395aae0ee376236e3fadaead90ce0e40dead8d038ab7fcf0cfa87e019060bca2ae13a28f0f82e2d1435f164cb3fc34c7ffb9e9e853ebc4a12c8af5479aba70f542da4cdd29a8090e2f3e4c8ae25117f65e1050cac011175c35a80d7601a5575af47b94af72aa490d9e3b7f6ad888daf021bfd134b347a8d0592b4861fe1e2510b3fec83a464a478234529040f7d133914cfe746cd2c5c2f52ac006585e353594e93f6591e67bc87049615c503b79bd95ddfd139424d88080d9a4f5ad8049b7cd58c733ea42bdd08d71ca18534a34dbd94c8e6b945e0712e8e81925404a7597148245f02b272f92bc408058a7a46c242f70198e4baafa37fca51b3b442b543bb347581bb6320cadb472fdbd87323e116e4ecf47d0e84f879ae6c14b356f6cbd2f4d5f19dff01e6b083b9c786a38f0664e8ff1e298a2b5a3677f022f9a50e8 COUNT = 23 -K = 5767cfd4063c1c9d16994214e605fbb0 -P = 82e97f137ec95f888bcf91c35bbf578ed9e295cd4f76f577f016c1f8fb6dfca2d4b2bc906b10a0689346494d803eea069339dd7cb8346df8877dccc491d3f121c17a054a1cfffa6bd34ba0f67335a98a25d6f6a28eb44b8046c578860d4a62683927e1cdba -C = fbfeda6b4cbaf3d45cdc0ec2d1af6dca4c6bd09179902db74f9ab965d858a6b747f2cf88bbfc368dcc39e79f72f52a77c82caa955147d982d4f4cacb608994ea7ff44be43d34e6a04464e9ff65dfa535996a8a7fdc11cb9e04b4e6cb66c2c05c4746157ae521d19c37df6a7f41b37a1e +K = c5d770727b23e81de3f4804e65e0e40f +P = 3f3aac4a856520e0dda20786e27a22e275f0315d4897896efd2f1dc45f5e0d62639afbbfd7b947f83d01cb92bccfa30f92d35c7c9947fc4c6c35818e4893bfb396742b98b3bb662b544086f822c418e3b13702fc0dbe6912d6fa715a5aee4cbe6045ebea1f3a335685bbfa6cbab9bcde3cf786975208a5f75956bb0c555d750bf0ec2487328cd74ff50efc029b0169b689348b59dc6fb908c4e31b7c1e8a879b7bc60981312dfc82d90045e63092681f865488d9a6a1fadd263895b362383f04c5222c3a874be8c23bee6b2e64bc1ba2ef69ac77ed8a046dd8d59848524efeb8353b6921a1c6bb69fd41342993903a485fba5931afc34dba5ea9b1d60ed64b217e503d53f8a5a06c195fc01c10177ebe0b6e5d8895cc7fa269dda2deed2e1c5fb52829d973f125aacab18a714a0ff8521d08fc50902fddac957af4da5c050bc6ad7d828de01b8e51a2cd727884a155eac4a7c9d24da4e90e7437cddb82180d4f5e1ed7bdb6445b4197e1235048e1cd6bf7796403222aefc237fe91a6a4b35ab7dde9c50376784b439f157427e26f84901fd801e84b06c7e1ef6c5b2ed21429eef2d3b8556ad933c8a002a2a1c786ee8ed45e0c93555fa971b36fe53c1cd432715fc79717e8cd5814b3cb761d9fc639632299ee961851a07787a7e475316ff51b51892b9b79be75a03e77cd7c476ba8ba6479e5c57f5432788d5eb8f181033dc4 +C = 1627629fb2bee2e5a4930df2e399780d22d4f7b0089b58fd29cdd4f75ad69a0a47604d8e114206adcc9f01e916788947219472d7782477b63f5e5e99374bb4556cd9e2700aedddbf903988c08dc90d7ae61412d338c6f31a39a7fa9bbf5b84f034f2e342af1fddc3dba40beb35779b008e1ef16d18a977aa7ae6e528540e4d15228351087d7271262e207ea1b242cf9d05810c53f6835f268505df6beca0b19d0ad8f98882b75ebd3f09497639f90c516c3eed4800d0dbc2205844bdd35671098c70c520c514e2181551c8a0dfefa31b603ec2f64f4cd84a6ecaeb4c4d84a28dac5afafba0c92742801f47e53ca5627982c7306188a1b5e318bfe1e2937f43498bf2f62c0bada9732e31a75c0ac475727b2e193c19544cbd2e4f0b52ea0ac15d358205d0afd5b098b2b8dd602a0dba3200117c24e6cde246f64f0753fdd2b0b8189a80d096d4d77e11961cc1605f5afe5885b6e9ca6e1a82a467eb2f6664821b1a307bdd96c821ccb1cbea322a627c4a8442fcd033eda578578c4d272e6e7e853213a9c08ae9e7a7724d5cb9df74e225209797a03fcf3e46de9dc00d4c4f4f21bd85b95ed9f6b082017500f62ea932103826df1593b1eaee2ad0bb27a86b28f0df08c9469a2667e9148b3aab7f09c499cf3ff5a364883529f9735e3a4dbf96d0e176a9b47acbd2c66ad870a6d6e72c304dd77bf1c1f2bb4354dca2beeca38e8557d3738faeac1aa3 COUNT = 24 -K = ca6aeb210ba0a0de9ce53e89d89deae1 -P = 13d9a977624c9487a47f1d6fb1bf023124424457ff9b7269044811d2d23743474c312625fc0a1a7bc464261142db13e0a141606601847560acde39436c8be498fcf33e75121da3b60831d2a1156d2f6f78035ed96f79932de1f185ecc9330292713d356512 -C = 610e3325626be50b3313a3d40c21af844d73b84670d0ad026d3f1288bc360c7012c356a3464a05c87adc7f974117d8a92e4df7ced11325e64bf58404dc90f167a6e0d8116fa70cad3bf8d294f2cbd44400e0093637d9d4dd8acf458acaca8a24b1a576b8033885e4386e22bb9cd7c4ec +K = b86a1235efca5e00a8ee33dcfe61f8df +P = e96c4e51a7c425dd599a7f25f0f06acb1899edfd3db81dd2c93fb6e3fbd23446f0db516553213824b7fd910ea2690456bef3efb8b67321464d1f954e1431fdd2679c875841a57aa7ee9769c89e807a6ccc36a2332d63450f66f840e8e2b537fae18d7d9ebaad48bbab4f244975432dfba5a9fd8156f4110f6c4ff7c405d3d46c6f70f654b359e95d72dc3688218b9d3363646e6167816218b5e2d8aa323a8c11c2cd0933e67824d01f25ed7acc92eb2fa668ff42476436d472ba602fc3a1c5a20cae1d5384f9f78de8ca1cc74dc4f415c5c430243901a83a6a701aaf8534e920dc04c3ebf161ca2997dd661827e50946e4225d6bde10dd448a4c17363a4a0718cc2ca442c9c939e119b87c2da04935655763cc5ffdfa8742657b516587bd5100d23efa2a0dbd6d996f7370552c665de843ddc2d7b6cea8d7d934323847836b320899d3318c9f72c0365ba086c7ee2e6b5376e0d280170379d3c62651fb00269733c26ca4c5ecdb58b1e24d15777eab6e269a426524536db6357ad7b29bbb6f58d30aad65ec231c76db30cd43aa91a7d9b50e0acb1eb5fa387f1c45ed72968aecb428edac5315a4d854350109a96a0789f0977ac107fa9096c91a17ce79a94a529b50a1a6bf0ff40290b03d8cf21d1549be6ddc38e106385f16da1ec5e327f4d9f909e9e75878f7296e85477730df4231c326ebc5b3b2be791eefcea1cd7b472c +C = ceedf1f03b5ec88d75f01ca5f3b40a7876f6d451246b0401395aed3841fa66c82d95ddbe8bd8afa06742528442be3ee8d2785850cbf74713cecedf44098da56e57ae7008a1ed2d0af73296aa8f4ef8cbedd3bb0c82c5bcfa427d285b6219a059233c4aca897c9fbc45b1c13d0e65b58b9b9eea90621d2af4014f5b21c9106d2a05120dd4a3075400bb77befb91004ff2965e9c61b57fcfc8e94fad572d1590425d5b139bbe0e112bab50a11f80382e06351d92b86407f01601fd3010468b989a60e91fb62c6df7d9dea8bd24c93fce7426a94198569e7124ac114c6b4c705a2f12e41eb6a6688230c807350eaaec5e4dc7199e0b42ed2500a642993e749f9abc5ac801330520945781cee2a50560ba0d154004ad437bb0ae17a2de1d0f6b2b96082cb931a23e0e098d3a6b46ea6e4c574ca1f4809e59a5ee541fe09e1f61a37b5eae0b151c33316b13bd2edf60f31b08d960a2e7e2059866ebaed12ff5f40fe041bc8eac9583084522c95f49f7ccc11f8bcea283a22c6d0066ed0a1bc7a8a15da670ebee78af22fa906f4bcdd01ba214adb62ca7532bdf3752e407706319c9f4c3b86580bbce2115564f89c165d4c73dcddc39a470a95e21a3e635ca00314a1cfd3bb077c5995a17ebdd3bcf277931db08d04e0a4f65a31fdbbba471566b6b72d26a0118190c716b4084ca898bdf20296999c5c924c1487ed4d388b713535f026093defd229e3a4a COUNT = 25 -K = 06fcf24b9354941ee9fd5afc191d40cb -P = ccb64358d510beb6de31c73a5bdadd5c1735b2050c381d99d1f9dc158e7a2650947623eb4ea8a8e4c1c52b4e802255afc6c01a3476761b3aec65eaf2949b779bcab5443cdfedf127a2a0a9231c7c8e9ff0737ed77e5d11e0489339fb0d0c72fd7cafc8510f -C = 8f798a2cdc7e9afff49f07ed9af9711de8b9c6d3b96a442285591ed173238a62629db0cfa5cfa3031c8980c1d2e7e5ac5c24c5a95f3652d72b46d894e33687955999a118770dce191f94573ebdf7045d9e82b46121751b32a3dfc327b410ddc794c81b9862438af1251c835d5e1e00ad +K = 1942cdd3e94e46aa1277abb001e56200 +P = 96c5c7b02e2d213d0b7cdd55f4b42d55617f49fb290a70b67c467f1c1ef28555798adcd34133cefded279952b7b7891df9d4b24b7d82e20c50455d7e49725dc6d81f6f1e464edbbc10815e08b28c364f4f7be86e7001109c1efe5fc21379331f63fc3dd77ead3fb0bdb6024e6edc87427094531a7770ef624249d33794dd39ddfc241c47eabf083b0f842425b295e93f264d2a2f10f60657108cfdd9ecca1f9e51e523ff45dc241392c9b9378388ef43b02eeb82c9a209e8f23331908e20e6ef8834232ec67269b954afec7fc5fece853b5aac547271bb87a99c5586765515f1af127a869b92a34ed3c268a3df1af96bca1633b72c2ba1164ac40aa31e93e947c616fad450593c3e14388c369aaabc4bb2b277be6c9c9971614bba4c34cb98773f3bb2bcfabf879264d18bc70bf34e78f5b7fc7f94e7b4399db44cfa353a04460119ae399f0684ff82a59126942b3db9d67fd2898680e61971575c4c806f76ba98b50d288523b25d7d512baa33f1ba67aaf9d65333c16a1415ea6d75403706b7523401024c40d7a0590216570b9be043c24719fe00eb618773e58cc6d46c9818b700d5e224f96f97a5fdfd2d670cfdc1cd137551c9db47df873392a20b867e3f9d12fd696a541304f4cb0bed9c5137e2a899f637413f83fa4dc3a18cbafc8e36e2dcd06638738550f4985c60a537b0267f846a43d156bafa29029c0079f62b3b +C = ddcdbd15de229347dd128cc6e876ffd9deadf7857adb503932a1e038996a69184d7dc1aee506b1c725080acc7a01e8ea994be51b43ae4d7ee6d6b8898e43354ad11c265a008e9e428bba8650cb324ba3edbd54777d607fee32d2625bab35b12ccca15a2a49a2785aeeca9eea9c9ba99fe3a3935e262b509f448199baa07976d7798732c59b254b18d0e5c45d0939dc8067656a008b17dffd603f9392af7c2ce19e048772014728e749869a7a34180a95f2ff6d89a314c90c2149e2769e3c9e91e038afe5408a9ae5513c4dd2810048a3e8727c60b58dd59acb77a3f88549846f68681e9f507e91de0d1d29c8dae5671572a5df98bc004e89e9c9ed0b46f58442cf3e1203cfc3788f6d0c57889594df179aaf7be966b695205b3f058b1813dd29be17310e5c091b653935a942bb00ed244a503dc3956c6b95da71688d3bb2783e225f796ad0836d9a741a2df419586208cd514578975538f7d04c25ef3692aa349d0a7593ca1a92b0bb032340b2dd0d1958f2d116e35b8500274d402fa47d7754327bd85851ccc3e6a50f480c9c33e09f1a78c8c90014d91bc0b768b1ede31e36eb52926259a0458eec88ee3ebe8fb0049fb49de95932fec4da00df01c63cbc010c6165af35fc1e15f58f32757748e41577e2406b042f6f2b8d67d5e52124c5d9e9191dabdfb1b1b21b09b11ba796f711be014a903766d2b7e78803a69f48a2249eae12636a4e2c88 COUNT = 26 -K = 48602348e539700a493eb89c5b36a265 -P = 64835eec796224a63d84200f3b3859d4103c30444874fac8c10dd9e54b10f7e26f76d13fc86c6e08524675aea6ffffe972c6d44cfa94744db0e84b24210861b05e7abe642ea2b6d122c0c89927afa6cf164b087988c444f23c4d402ad05d733e40bfd09191 -C = baab2ce625c639cbd71cb34c2f57f647e16086d160a47f65a0649647d91053a1ee456890ef8d65b5270b2b893ff49f96db231068d335da2844d06721856d3d6ec1ee99970b4442f8fd7456ef4b8a08caf5f64fe913820e27f6caecec93d4c8806129163817624e3e3f10758ca31762d9 +K = 30f9110ae3626df3746c8c2d43d64d73 +P = 810154ba39ba2af3b016a7b21b326438a02caebd11ab37cfe053e70cee6ef8a58877c7c677fbb2b12cc4a0743070656d8f9f32ac3a4fb3e4ea00dd7e33be9a49009efc7f5164c60ebfa38330accd8aaeec5c24943dd58d60ceaa74cec399f8ddc95f3cc200698cd529766aa6c07395465fb9c5a477e41aa1b84918bf975d61e6938d10802942eb6305a8a2d9ca6913d6bf8c061977cc0937cd90eb1db3424d1ba2c44cc495a8e8e9e07cc053bf38d4180e4f13af81e0e1d4d3f8e2593b6e95853b0cd78bc0a7d9fddb9056059f3317458605899f878369a33495a53b2da059bc8305703adecc4aed998181a6d9b58a63f74c2e0e81fbd5a7291c1c2aca38ba78936514869612736205a8807f741ea440182c1e6425d7869deaa6f6eb76166ec3454ce1a2802fd9c5b595b578fc5a0fcf2532b6fa318fdb6393abccb3566cfa57f145a8798006597123cd38b17f9dff284204bfb7f4983e7b71e9725988b11090cf8d3b7a0183797b25f3581afa85d28523831b222faa66ba8f9e87477270bf4de2f0f0dec63c10bc2c9485d3380bcef95b0adf238651790e48dba270311e9ded98b0e813f466556a64441b75edd120218544df319af744335ee8516531d3cc39c76e0500fba458a69a56f863f0681f5b6cbf60111183c69e45f998ff300ea35fc0d5d26494e0d720aea1bc09bce007f1214a5d78a7579f2ad0bee7db6c94450e +C = 8fa8f43e5ec6a7a4e49c827d928a8021879d0489072a9d06661cd4e521c5de4d2e90be056e37cac3c58f5f24349f5e1af32f8a4532a133aff39487611a7828fa22c51335fd9b9ebe40bdafc7a81cbcde741c63573f8e14e7647ebece3847047dd579c9ede72b6c382b6b0979462e6d2080083c5b01e966262c149ff6fa017e617010f2a23e39ad8bd4aab7ca587d72e7e17d2aa2712aabce4f371d4aa0700783cdf9f4a4cf52dbaf92e4af81bdf07f4a401e9b509bd842c7e998708f405c6fe473dadef9f6fc3b1bb4c03dca62bbd07ae6aa63ef94a2f034ace9d4b8dac5a7f6bee071aff21317e14e914a21ee982a0235612f0a52fd06beff8c886dc398b402b7526c327723007623adb395ae5a4e1c8f73a76123b841aed27eb2c225e2036afeacdf333f48d1d6fada915b9edb7ba0e4ac3cfc163ec9046d559b32d6cfd46faff8878cc17ad57f6aa56f0c5b40b0df9060d5cfc5435b01319a5213e7bbd4dfdb8baad340f4b0917c27964fc958de46cbe757f889fd817caaa3d8c0ccef57c4991d95f85be8d6c6e816801dd9eca0c8b36868db0fdd59e17d99202fb4ca62ac106ef2279f75b22e51e64da492d6ac8a413655b17fa7766507f4ae7615327c5fec799db0fa25c6be236ce61733b0fb06ffdff62f6384d4563bc0de36dbceb14677aed1cee5b5a800431a37087a8621a11ecda0e305704fcb060b9e98f9baad3aa4f355981f4ad80e COUNT = 27 -K = b0280e8aedae03a75168dd9f222657ac -P = 9dbbac9d53e6ffb6d887d3bbc4a73728284e46e191f6fe0986376cf5582e4f0b78403f2271657a19c8effa8514b024e35cb8a403b0b271d370d21155fc18391325c227ac9d3d0cbb3b0e7a89c89ae5d50a01737d10c1c2d842913eff07ff139ea15e631f53 -C = 82a016fbf72749ab1f50dd535e30d2eacfab4dd3ad299556384faed26e8165db0f213b66e2e01f246ae748294a83bdb5790b3c1ac0a7c3cce305b6bfa9ccea06fa164109752c8327ae8a16019c06cfc60090669b93da5aa9e6f1cf4150ab17f6734f646a71bf17f5d154d677a231e0e6 +K = d0d47897f5de34b29645de20d392c67a +P = bc03e602116ff30163e85c3ccd57a31db648ac2bf37c3c1e42fd9f1a1144b33b211233714395bf3b5adeed118f7c8554a9b6ebe6cd45eb8478917630ef2cb4720506558036b7125cc5309d75116188da24f78bbb4a9be240c8dd6ac671adeeaa58375414fc733fffee95fef493258cd92dbe7f4c1ccb53e39d766d895aac2386ee816e7b79385d0a1800354d050ad8b6cb8b46d854feab5ce579492185000eb2d8a2713c3e75f3c4d93038dcea7d9a1b7b0d4c21037f4f3adfcef329c0a9db72b5ed09c21abb03dcd568df132e790f22c205adb84d023828fcf567354ebb666ffb1fca307e0054a3307aaf0ff344f6e07abfcc03d889719d8ead8926846997f2a7dc183dacc3a856c49c8dafa070352dd3c09d70136ea2d7390595231edc6a6d35be160fb8e6302a6636cb48ba363e1c72ede3b9415a796b83e25c3b7445bab549cf4a64bd62dcb22b6eba742ad8655eac5b0b852c98f1e5104c0be0f5ab0adab555c13c82e8783b18085e87441efbe1249c7d7b83fa2ed05f47f9b3fcd78d0e52a516db8786f7d6cf258a924c10338be42161a5dd896e70b303a0f178494a59fb19e408983553e1d0d0fd624aa1fe8c9185c0f590f2e760cbdee0f1b7e4a42b781dd652e51199b8ebce85c129b9bdcc2368a885ff5dfa4d5bd64324823e16220a92ca4bd22df2122eaee4525897156e6035f540e7d627115436500a5971dc3e +C = e1dd00a9558086df73cbea19e6ac9ae0ff898a836d5b03d2594e4741aeccd43132bbcdddeb2dd7e0a81f3a431af32d426e7daa818c323e0498adddcd6b6ad652831e9f0fb33d9e959764ab703d5ae048127989767f3e3aca87efcfa3110c1211aff559edbd74c17dfa73b013519dcd19c8cd9a277d83f1e3fb3d2ac8e7c0068039a02f8263dda0bdbeb1c1fd10c4726bb0295354e319df9d763b2615a7819399484a82fe44c37b0e83772c95cfe201fe313b82cf4dd3a85d3825606f745457b6db8b7e7c45e6ea8c0ec3010cbd20acd3da0ca8fb82c8457eb73c25ef8d135ff440dc5ca66925ebf2b378089431c4e973a37507c7b990b4aec58f28f22bcb44412994a96ce175c698f26d892c83d88b53bb980b1a6a0705322dc58eea45f5ab9ef88649e50f3a9e04b9d7004da31d5b21e8e7409bf63010f6b5f92e02872bd094eb99f55510eaf2ff974b1c518a35831a6ec73898b6ad5c3e8e82b29f198720f918cbfb3369b4e0800dab93d3cc7bb11e61704500b05bb97f52f649ae768206b6c890e71644358fc3833226b6e84aab5df5253709552019f9970754a3a0c213716b46d07328721db69883d0e263214da82d6eea0fda0ce996e80db31eb7f103535fa9ca639a540ad64d1c0f196809c0a5f72794119f63cfb11607e491979970476f0df6f4d156f86b61b6eb167dd59f6f473b339549022e853390de8f6f94d8a51098fc1ade095457 COUNT = 28 -K = c3735ee088f0857af9ee3233d0d2ec77 -P = c549becce0c57c3fd6a916c1f8c6122d668718be87a73c9b46ff0328752e71179bd38a13f90ca373ecdb840e5ce6d5ddbc77dfbb6c8b1f986d1fd3dd734a4558c25f14adb30c6f606327f67fa46181f455ad640ee597c875022ee2cf6ae54f26312ec24d3c -C = 85d8caaca0560fdb0b69a4b5c5f8dd6b982125c1a57815aaa712e21fe42c69b7a2ce3aacd6298e8ebe9aaf3da38012dc5338778dc0489daa16bcb46281ca71037ed388688d737d51ad3327408725ca15680c1444643afdccb8b0fcce9a9b1677051ff0d2d4b6d4bf61ef681c5944cd75 +K = 6925372e6f4142e8bad235a6bdbd90ea +P = 0d50ec354746e0f8507131114b60ed8f231505065d0dd5c09884be0cf6be8e66b5928b873a1a92c21b255537e6b65e290ffdeca85ea85930daa6133059d2a57d88a66191207e8cc559bd399234477732f36df7a9cc5b3a8989bc8a5a253c1bb8321bd7cde9c1769cb66a1dafb2b98b9a25f8439effe78d89edc84ee57652dee4aef1373a4202a2f28bc5919d7f49896ee2734cdbd46d8caa14a82762e1680d70dfb1fec4a1849ce7933ab82f4ccc9edbe7452b002a2e943831bd6728f50bf50f2c4f789742132aa849d841eb57876fa74abbc114dd2682eb444a2f07d3d03f6da832f2f927ebd5e52d6fa3086e4a43d604a01b5d6c8d1427af130986d8b42dc227286800bd57d27e44b9f84bb6365ef8a62fabffc42ec54d30bacf3c51efa2aad881093e59422a988c0f7a982dd3f86759b9da51f8cb683d85a2017191fb1052ca5dcac9276c51801393c6bb732e6373df5189a6fef2c3533a645f01de002cbb6c86c246dcfff0cf7614b20dc117702c43e58f266bcd079abe680b0f7f7d6148092c0559e20ebd5b0bfe8f54c14e88a806cc6cfd40220d9729557b006da636de19252ac77a94844bc05bd3ef69e2c3d4e3f9914afe9cf2bea732ff84f77fbd0aa09238d5e5cdd2179656c4fbbeabdc87397f50f99d7cee53b4b91dbe6295c34261faa4b81c1bffa6e4bd4272925c320cfa3761c3def4e77a4d94766a04a8642a +C = 3e5e8a6b9f4506713d848dcd1f27b71d8dc24d7d00d61348a7924e33b46b8eb2f88a273e8b636c2d97058052664f41a3184a7cc3051d3cdffe4d61b5ef8f4d80093944ec73169971286f5c4f0167419eaf21d3458fa8a6b7c1ee037b5c08f815443f1e4a0216b7d189e5564d815422273902cd7a2789590639ccadf86a0ea81dff2c4b0d9fe6e847ae73cc0584951baba105cf570bcdded1f2332b29e247a9161a6f7b329bfa2630b831f6fa26aef3d747c32e1efe7788e80a753367a0d1244e4ab73e531850f95cf2d46e661923a51318049871b4d3d703972c2b5ffcd961f094b5238276997fb995c946634abd2dd9f5ce4e6406c8484cac0c0e1aa5be19d2833e80a286bc2e4afbddcc4445bc678dc8a063706919d0d20d2bd2a3ee1f6c201cb480f0046ec5d0a535a6b8958048303be0e45757e92d4ebc1b42c6ef7121e0859fe709c16e4615bfee27d007ff5605b04b673297cd5f7a1f2ba45a09940f955c3a0adbff64f7d8cbc79947ce4214f07f4766da6fbe64fdfb317e430f7e0eb9492d77ffe35e6f85921e9e31057633d9a18dbf1b085a0bf59b33eadc4b1180320c86023589bc0e2b50de5b0fa9f9fdc75c3e1fcc322124492efebb98adcefc92e2ab17e0c8a84d13a60e4c663db000e5bf81908e0dc474cc026908f6461377eb583c0ba511c395b09f0be2261355eddeddbb960459dc204df3353447cb8c2ce809982731b1d59c79 COUNT = 29 -K = 854d84c0cd421164d0d87d2e9772ad2f -P = 5c39cc3cd987af9c404c5a6f6db9ac08177262be118ec888d50b4548b954bb2bbe0d7e006fbeba334cea5d55692cf56b3131cc22636f69928cb8918270101321e58b2bf44a3a824e8ced4ac36713adce9bc863d38c4e203e3a0b804992f6f0da4e14993217 -C = bc00cbd6af1e424b8bd664ec8860968fdfebf04d9b7266787c41c6674735a52fd336bd926a790f9a34cbe5b88e1cf9d47a48b0345231c33b216e5137336d05da63ae66ceaae52a66dfa77cb8c7b6052240e71dc4bb938bb61e111bfcca9b71d13216729a0e8989e4c54cc93fa509926b +K = 095f2ce0aeb7eb7147f9a78f4c6b156d +P = f2787471249a76860032c75150fcda8306d0bc7da1f87d7c26cf276e0f2e9e1b7a4930d9bd26775d853fc6ebcb6180098feb183846c08cb3a5460bc9bf460aaa1f7aba72e44124fa649b25124d399a705428f9748a81c9feffed745082a14824e494ee467137b55ad54d9c52611076446893cb9641a7d5386cc510f2f806fbb5c9e8e2e3489179a6d935a6f9ec041e3e4d445e3730fe418b4d881c651cf3fb91946da974a46090cb40d1e6b0264ff5a1d73d99ecbe91749adec2b3522803c9bee3688097553d0edfdafbc9e3ec58561fc12c005368e5a40a83ba84848f9d020ca209690c0029e997a1fe356af0c462a1946fae40cbf9e8e1ae8dc4f1542520deaec013e1844c18961b5c11a1553de3cd4c6bc275aaac52d4470f3a87ded7e2000892b115346bc6f0b449824fd47cb78c2519502fb7450ddcdeac2b579917eaa1ff6c63d653c700adced42e514b326eb506cf551ad911be5ba6b13c9b44c780eba6202dde9760ec68a8d62ba2c6aad9560e12b064b51dc953c0ad68a9c814a1712c258a670f64830d04645633f8c398ded0436c66dd3bcf999a97128c59903de0fd528b9610f479af0cb0e2476b18553a2920da88cecc2a3c2daa4bbed02f992a154c25e4faf549c3e44d74966ad6f280e73109f87a155a97862c8a9c43e48ad3808a7f46394dfd6256ff08fd8e2251e602d3a1c4dbcd5d12831337809017f917 +C = 0b3b04c63a3ab5b638089400c70fc5a6ffcd44bd47706a94b6476bb2c57fc66db94536fc378a03ff692c94319910442c88c1b2486b0f69dd627cdc091621ac81e95cea57db178c65e1f1d41628ab13b0d7600250ebea0d6445c58d5a001389ae64521b4cad67d8a362eb43e96ab619a5314ddb9d6a1bc4088a6e3e3c80c165a4360b86a08dc1f67c77bda1b23d949e5e7eb76dd0a1640b99c7c20d46cfff4e23aa86dd81d55541081d0ecda931d6bff658615c3f1715ed4b969d43fdb21425d5cd186faa81c5549453f9ec1f4b7a21d7654013d1b232b0e5f8d6895c667698915612ee63480ad7db681f5ec2c3cf126845dec5e7be103e5342a07722f96e389411f32f5a3a341a305d9b61951f56dcf57918d57efa4a35db7e96f4f7242ee7fe1a624c50f6bf54e4867105f46b0e17595ed4303505b347fc044155b9e00556edc22e9ff67fb248e061934392ce4a2866d922241c4fc2f1c69e117b5252da0e5d54a61f433c9f171dd455666df2fabd5d7bc027616cebe05391a72700b79e256e1abd8c4f84c0f2936764820f786c3566304cb606a8d08c29c8ec66097462d867b91bb9350257a84ed739c3594fe0e4c4df85c30bfa2d25553d35e7ffe175baae3962786d595dcdc6a17c348d08479a09e0f44dbd0a709571ae51a4d06debeae9279bf46376b228f8868ef83342f1f86224555be8288f644a74db2f2ed62f53e9fbdbed531dda7084 COUNT = 30 -K = c8d52da726b3dcac5e309cc00a0de694 -P = 9f25b65ea57d407a59737e47906405ecc0a201d419177ea3f94a2798161bd34865e8dd624c959280bac899685302614012cd58ca0a64cfe6435d2f1756b9bd1d579df1b0b80de3db8060d0a978079d6dd13324eee21d099a3a73158cdae30e9aa419ac89fc -C = d2e6048b1d259c4a883843f952ddfcf4660473a5c9c34e111e26a492b5b7f194067694f0656f7d827f90a61768df36b7f5ae0b1ca6f0022b38bdbf3334c0470c5f75016e08f915fe22836459a7a452f02c250438b650a8fe1de2b3e775f9e975b49df567505db8e2d8c4594fc2191733 +K = d599c240fce543280c321bee1671684d +P = cd096cdd66bcc63b04031ecceda9dbf1dd56e01d981de7847494e659aa5d47f48c23425650a512890ce28d715525195355db9520e0306a4f41e5cae361cfba015fb3103172cdee8ebf1e33590224d7df5200f8046d0fa508c1c164b7e640ee6836d7b586bfc9114b6922459543cd8b94efa06fd47788185c477629e3c7da4b2715cd128cd5b0c15e9e0e151867b5ef317fb6922444ccfefc096aeeffee1dcc4d1855d5495066a5f471cde1752a046c1ad8b4ea1bdd8a99748b57b7ed0d6ab5f334f7173d86b16f5e1be1e126cd5df3592d080036d6356305f871b2975f1f39f34659d82ca46a156106a6cc7380e6dba18eb4ffc8eba11b0c5cfca10ea1b650bdc47eb85d244dbd993c89d4acad7fe7148643befd30fdac6ff96d77c7a5bd616249367e3d33ee341494ff700cf8b496373f18102e91dd99c225fc59f00bfecdad9520d4916a854ae8052689fc8332bdb52eda34d092133c3cc4cac02d2923a36c4d265bce2f50a8d07f40be58542018502bab10a771fad69366210b14512c9cce3e7981f7c4efcb6646b267921e5e661293fd20a88f3d797d5cde7ff64f2cd2ccfd489c77790cb15f156877b858fcbc3b3640036e9bfd052044007630c7224e5aff8b045d17d94c3b11cb0c7e9d10be985884fa92250fd5fdb498fd8742af629bc6cce91bcb7fc233c1a10d252c6727fec767612ca1cc579db4a0fb77f82839bf +C = 4c339d99571835e58151d1d925eb198ad105fe68b8fb8e8c471742a9a941849c4364e9aceed2619f2caa41456519589b9fda19c7f1f0605409d24dd028d825607b4c794755a47ecd46bca6e975d223df2d3adb3ce3843f427d1cfcdc1bc598b70e8a75450424fa06dc9a57e4ca39bab6f329295fc7bf7abacd2ad3e46d84c6ed0abbab8346fc2e82e6db332cad299a0d95026b621da8660fa3cce1cb063ba37c428d0d82b622e844300b77f6a6e5806c26b0806d3741933da76568135930fd61b8358df82a1f5167527bd724915831f97da80492de5f3e63dd1d4d966d00187af226ba651e174ab8ec6615f1d206538261a49f6965dc36acffe91f06fc72979b0a5e150664ca662618ca7d9184637a9d09aa73e9f3ea8fc8a593c189a042c37a37238327adef89fe141eb36d0e617222ceea9326874ae1dc09f4df872aa6f8d6e5bcce76b89ce4db9be0a3ef25614787849451a31e98593c6a914df370306417ed30af85029bbd0eb083c20f99b8191635bfa842fa5941161e1cda71deff8e77d9728ab34157808f1a78a769d58a3ffb0b983ac74d9772cbe72d4b11d47d70562c824a4507b0a358c087b2ff40786d1d661a9a0c1bf363397c6357ca21fc6cdaeb77f8349de1fa75b2579f4622bee7b003b9238b3c4316ed46f265d70158272bc635fda8e102548a8f8b6aa116d7591270bbd377a6d7d5d53730f809fb995e081b018b3579c7a12c COUNT = 31 -K = 8bd304da60ab3656393920f45e933299 -P = ac2f4fca5bf9d6df1ce191489a730223ae0c5c37ea0a74cadbb073415213a3269339a5e4f6cbcbfb6bd9178f03583107a096d7b2f6a1f89e34d655e173ac55b8eb736b155fb38e2d39d42830b209ee94300d7c83f06be98b86a6d9944aa7446be0ac47abc0 -C = 287c25c38bc213bd7d95e5ab4ee038e7aabe9e139dfcc12fb0ab14961cfa1ad386325ab53dac7a472b722af4293ff78fa4c9906d4383cc269891833559d753576abbf3b1ef80cb3da84222c9a5262bb390649252104505b96e64b61b338d8f6f625f6d825c19df1d456ba1541cb28d23 +K = e4aae010c852b74c7cfc615e8bd48b2b +P = 23f48c483fb29e02f1d1b943cfaa085729518d60b658dc6f93e0bfe2822f70974fd9fee8e4c4815486248f0ff431e13bd839b6c721fe3122ec86b0d3d2bec337872a8b5d69917eeb0ae20be53793edad5634fe4c8c1088cb850000b50ef108f760897272bf1342ac7bab3bedefb1ccd4afaa03cb3c67c81b2373516dda577f7109dc5c51cfe27fc1c2f1b0d56931af14ebe746858a902df7f455ff124dfb741cac80afa1f6692d4c79bb06c9678279e6b5450f8dca9a1897d11827188c3e04c0872d315535f6980a5b7aaa62a2b372d9f992b0cd8dd00683f4b77db1b743130aca2916551bb298171b790ada0e213b6775a490b0ff10f3bfdadee0c52bc0ce08501def07026a63b0078e7f5eaf45af39e4f755a51feaca4f0fdc4ebd2d7bddaf23fcff3f48f4fcdae57b1ce509155391328b53392523c4d2bbc3d06ff5b200f54697fc8f7d2ee695018dd71e7c18e93651eb1812f76bce18304b4c6eb5e0a74359cfbcc53f8a1f1eca08baea035718b1c6ef0b1efee5c66f8510d0da6f0a30836f8e441d73193fa701ba564f478e4f1b215ac59ce0d1a6b7904ddd27adc0a8436a6c931f2ceb920ae3704e4e018058885357de4e49b2ae0d1c0e2600da879cba9b2575f6d77f24978e9d86cd6882790e3f7507299ba604a8ec8c6941f04a6ce95d1358ca10011d8e6df034bcd96551ea32e366f957b6bf2216ac69e25e6a2fbd +C = 50924d5f8be8d67328a895543ee904fc49732ff164ecd7933b6fe4125edc55cd22383b6c1e9d3a220b60633a54ab61cc6e8d27c1eeefbcf1f5e7a92014b0875bb387515329977a0e87b24a38cc7cb9a8fbd5668b231eb6bab928b75e87156908ff1bf6a7a034e0aa897ed50f1b78c883021c1df969169ddc94cbe43219ed8418dfb045cb6e082942986fdafd8c6e91fe069ddd29c648b0f5e370cf3b0aeba31888367e416a33ad1216bb59f272090548d934d432bc8bc331e7252d9fb676067ac56a866f14add5dda5de19e4d8ee0e7c0ebf79b225a82dd4a6a7f5a62cf10a9793496f523b548b3bb92ee4959d080e97ff33a8f1e1777081be8d55419fb220fdc55abca7cb7b68c9c5798e6bcabd1ceddb1a614b784f44be773ece6f24bc00e27e72f26d0be77b07089640f34fb8592178a403ff2364374ed89918164cd5c9294bc5ca05858e77e8e5ab0d4e11e8a899437866d891ad9ca6240d56747c9c1746c70733a60cb31b6cc2d6cd89639ef80ceab988f2da9bc495f5a5ca042d89841a8e989df769394db25d03f94d9ebdc57dbf366c6dfc7ccefb09623a7caeeaa3e01174aee9d1b6685cf063f246982804442f8ecfa16c75bbb57fe774fbeb628b5f15474ce0ba5e0c8a09f636ab11a7db5ad2fd66d43ebd1b9081cc46a76860194700958f3c6c367db756f5eceb7d5f76abc9315a8071bff82a42deefecdc8af14c8cee2a8c5db59cd7 COUNT = 32 -K = 506f502effd5a3c12e48f050eab7b0b3 -P = 1d4daecdb375607d2443c02aac98dffd054cf5f0eafe1b1d469bdf10bb2d244416cc6e7185c444773590168fd2441beda1b41bc9eea5945edc1f0ecf7fdbfb879760e6a4e3272c00a3fc18c49c3f04b631e169097a41d35f914959cc14cee13cb998b66865 -C = 1a6c65ec2dfd168c0e6e3111efa782831a6f5c11a4df81523ab5ef00516154c7dc113dbc87d2043bb59a348c3fe654e31ed72ccffbd58f56efca7c22083d5a1385844ee7768400a3ebf654699ca3097bbeec4c9455e64226c9bcf57aeae15800d5b38dcd3a8a0c5da00a4ef4c41688d4 +K = b9dd3f599b6084447ed5ca9ce6202e54 +P = 5971c81a659e26b3071ba5eeb8387be36020e127010a2f97aa829e250cd070140258c7363af98e0eb1b79ee1aec27c804b407795fe538fc076e03f447d1a7db4dbb8acf8a03f55d825fcbe6ebaec4b25d31e9505131857765525fa8b883e96b18999ad4f66fdff1fef499ed03c35fea9e13aa4c5841da36cf63579723d835cd0dfbee09a3318eae3a41b676a5e1637e2cc653a46d0828f3a57b1e8148d25370be45685b1810282e2ae0336e46fafec957726e471e811143bb6f65e7a77e1f586d92fe9be39f81a399c801006c480dc3486c18c98ec3734dbf9a21f087eef61eb2742028c637f5dccd5f574f468f076e8b229c0c4ad23dc27b8fe1d58572a27530bea8ff7a311db7d528b6d6280926975d8f3b3aad7a82eb7385f6ecfe4060b4817cf397ba7a79a64c697befe0b5e5d79ff556b1cccb9dd2dcc496a53a695374f3832ad92959a3d7a91a73b6d3dcd6ca10679746d7103d1c5bf771e9d0ca8eadf6e4017d4f4a8e8e5d9284a3a73049e5795117c5fe400d20bc99c323901b2db8a9897e4f19a3a3375e1ef7f91a9ca64209af2b72e9c36a403d7234fa134bd1ebd257dbd43e3bbe12c080453499bf4e997583787166b24f5e97dd7c073eadb2aaeff9fe3df99f16415726416110c81bef7bdf8735244d98f56268db6936dc470b30877285824465b049f3c9292ae5092c65860af6e5c2a523292a26f644e7e5282 +C = fa84c74975d43419d9aadfae0f5905bf9a0df8b25cfafe3afc48ef3212067fba72b2718f0c766c4a99d59b182d8d9fc6c08a448a0b359e06a1d7af24092af1d4272ae092c324458b4563992d204b5a014b8a93e8bf0608e75697561da955dc4a6aa92c50088103bfaa216ae1a3af1a8b15f51af6a3a560fb3bcbfedeeba6b2257c96ab4c838301423f5700430b21fc61064f94bf51f5bd1ded5133a83f0120bd0ceb3f43d8ae3c24d3864f6c530d0a53041fa07704f5401baba0862427dd3ccd7d4b524bb2ea4846fa51ca936da9f224d7edfd527ef3098a6daa9433c06d8d99f3c9f0861b65ba8cd7ad12be074d7202caa15980eb7bb45930ffb1eac9444a5d19bdc3ebfc0a0ab7d2489a4163fa705b2e981be4800729eb074c493ef9e0f3323f85a2b60f9ded30963468ecb362a695867f6a6ec9684e32ca60f2ff976a5c28a16133c27e7ca0ae32fe79ed9003aedc42ee8dde19f0147391aab8aaeb19c94350fda44be6f59374b6b0e82520bf71688469b447372201d9adfb6e30155139bbcec369f5b0b7dfc35184b3b9bc1ba08ff41e0e4caf02819f7f744fe0b0bb7e681352a4b5349b9eac94d5f84d89b4d5db6e1d5b2bca0f6d8622f916ff329057363eb34af591bf588ae0e574871f4ed6087bca01e2497c7215060b6a4c705fd721695900dca92996adf65bf5032baae1440ba1c3e30ed8e9a489a36b7b2e42f7fa70de9c65d4cbdc35 COUNT = 33 -K = fd0c2833aea3a4b526e715d6ba982eb4 -P = 95455b127c4d0314f85c5d1906c9a28c45c4bb9e9dbb27522fbad80a3e072f1772f602ebcca3dc4cc5ea44e66b3c1aa6abf79975f4dd2efc696d1cc727921ddd128d2c2ce22acda43bfcc8ee122ee0b0dbfb38c799f932663cd9d714dcee6368617efc06dc -C = 77406b853e080be17db8a168171129b9a6ee2a5c217ec0c6658a4d7c23aa2596e2dd4d0e97bd6634bbe54a75331c8a85251f562e44b389669bded497ec291e8f6b88209e2d92f6b2eca1427b92184ba37f20b843cfc83c92596c1f4d935a9ad9b410008ba914a69257dfa6879b58b3ca +K = 1b1715237e1c18accdd3314f16acf177 +P = f1bb8c5055f9d77d9e9e91e7fd1bfedaea23e4f75625a73ebb55f7cd2ce4638b25bf48d973e2148b0b1e4944e7652fb4de0e1a2e7da64b5cb6bcea8318ff702f1f1b36da3870012391ee65422e0489fbc7c5be27130aa9b60d92e73fb0e1da3bdfe587d5aad2894601b9075a1788e98b7a48531c2b6dcf0a489982b7b6604c5039dfaa31e01e5b9372d9c60839644db48cd57867d27df59bfbdcc53db86fcd902a6ca6480fb45037eb71136f0a7335a44ef6a45f620f4a1cc6abdbd809ce1585cd628871d44b1c09b1e22c725c59997423084085a6ef290e328e49f290faf2a2be00973e987deb2354f223bcd69dcd75e07859e79aa8358bcc4e19751295ccbef4e6792a7aa7515b4094d1925f830bab8e87e7263292d7f1df1c5bf99e3fdcb7e607c4800fb89ae12d12683ac6426f63c4e944cfb2970c20cca2217b10d053cb3cd0a661a52924b9f536784a9868266bac5316793da0d4753934aa36e8507b42acaa8f126806d55207171365a02646a1244d90755a7b698bb5e886db1c4be9b7740b15377cab555d564881803a4469f8fdc745a3f5a29ed298591de6f08a145cd7c71dc3c7aef2cee88e4c14e1244626580abdc371c3bc0d9c474e0d928ed2129c8b17444d42daff49d715d374d600eca143c382f5175d87cb467baec793d46417dc206d3e487d9b356da345d108ea58ef982566007a1366af604787d456f07a +C = 4b9b2fee0064c7f7334b9db479934a23d550c1842323a38b57f543d2989f5f144464fc4d39943dd1cd5d7c676badd5bd4fc1ca93fbe8705c0b3d39becc77f3baf2fd95316c353bcd977e60519c2431e60cea3c0d3c174c3b71a0f990ced52d752180cb3a126f4057fd9dd8ed9579cdb30d594813310e9e38df3007d0d27f621bea019d471ff68479a9042f0a583df16b5b4abf1e3d62e371129bcac88e2fd37edf423cd264d42e0f1a2e60f524641602679d614e4ccb21f62650c28a4790783909eeaa43a15894c152b92de7d6cd5caa8a810db270e01533d4229a48e4c8b9817e2e1a7926941978b9914a4026c0c9f038a0578b0bc18066793a365d89c8a46fa81b243b4672792c7f9511ec8c6130ba710379ed00dfeb464e832f1654d16f232b9b06026e0bbe89ffeed5ba82f1b752078c78f903f444d263db713bf02ed0bf6599b7a87e9bb971e8032557ef39d06bacba1b4af499d55f4908ee03c8af1ecd808eecb66ff1a4665b31dcff34b8b090f727273afb2562991f306944bade37e06c42405977b276908dfe9bc30dfebd697b62ae7a93ecdb5a46599b45e62311594bad90f28952389ff0565a2add783f8d26e637420cec3a72eddc934a208e8fe91a919515b7ea79029d2ad0af40c7252de088dab82417936b263a9e4951de447baed8d63d0bd247d0d0916062e2127b5fd50c624289829e7c33879d4015f0cb651acd5210f4aa38ad COUNT = 34 -K = ace6091548aed3e4b082f4790ec4b7b5 -P = 93fae7fb8a8cef310197ea4f93e4e797972ecafd460c58592b799804f1644a8f520ba0268418ac23c80d9c018686947acae42356611c4961e8cc14ff26c743c73cdd37320cb892104a449d81cffb1b0d60b24186e4e8c6e3c15dbcbf224c0f80110b926394 -C = e0577d0ebb506b7a7d4bebab5fc9e7c06f01433350508ad7c1aa02130e874de54d73de7574676e09e504e35957c55e3d4c12f8b818dab4f6e1d1ba495a21facf6e5b109a5f8fc75a433322e14ced93948b7f6e49d09cd37d8cfa09c7f8e9c59c42e6350ba85d36b8908bb7e0e004480e +K = 17a5cb43484f3cd38f0b4d729fe5d09a +P = 6d2a2fea0eaeec8f97bd56ac6ab8449efc6d22d9161ca1d27154b548e63f7f0e8d452504d0bc4462b27ff0c1b8a0d002249a0ffae5c9b8875dd690bf3b3df52e14fbbdc3a1d86464a0f1ff7c451d0cbad75c0aa7ff62cc2ce45a5312f2d000a8911737c7eb3f79f804a74583b5f1a69dfba5ba86cc03fe41ba5c8711e662dc0a48ade8057b65b6bcc5e8db9d79cf2092c7206338344d1fd9586428b884cdc02940a34bc753df7970a5957595c1af8f41760e381cac3af5f23342ea0676a40619c7143e5f347ca29d1cdc92206f479344f1656d6a5aad74a38d826056fe68197c61c1c66c01a902ae966f9afdd7be21f0e5d7d10231a7710f95c05444b03d6aacda408b7d1fdf650e437ac45449d88eeb717fa1c14e0fd7552a625c08728233cc119078938723bb90889ce4dcac8236e8a33c09f4299829327a2d199fa48d40093c2646db5c3fa680e1e3c38b41c9b0bb0296a7217a9ab74c19642f523dd21a7e1cf2a208fca07a8843c4c0321751a5f1901ba0cd30c83699a3116ac584b4f7b8219752c8cb02f7db67ae3b2ad1a3da415a680f27963fb712ef78fa82b31bedf9c3d4d97758e95ddba62e4b2e89d755f1c6b40114f99e16767a7d6213fe18259d71f2c939bf7cec475501b365c4cbcd5120a05c0987a3c0625bb192876e0ed9a9342c94c7b91eaa8cf3aba3c27cfca6691dffd6139c6cb43b3d2ed41d8bba01fe +C = b61663ceab5c02eedb3de77d6a54abd3870f98680b57540759485524f8ea19ec8d2afb8dfabdd7081ed6d5df4ff51ba631d939e704f8bad990c04589ef023dadfa6555b39c8cf74163368bbe5fc766e0a565dca83895b820b2f2efdf2e8ca96b8c215ea4232153b63d14126c839f768afbf25a466d45df1b5677b35be84978be3b75c119b106baa1c1cc8a8495dcd76399b3dd21824c5c343e616da0577d9c2410760a67f558d0c60a9772c1f43d033400dc3cb2c4c53b17ea2dad16296dcea66b5c20ea2b39170d7fbec832696122e5c29980c2bdfaf3b1d5de8499dbb06c228661e342692f00d97a07648cdfe0d216a6245aa903dd6957c94ffe01cd79fee1ca00de740126e29c560fbc5f6af8ca78a37384d3ac191ca1a25fb3675bfc4d1ee1a531b59bb94e0b5654b864fd5a38f4159d091204d6224ec464fdea913a0471ae6d562e7c1adb9012a6512881398128cc860d69e7bad74baf39c8daedb276ab94bc7f2a3ed7190e3d6e065035098f3883a4e72b6bf7039a76e251b3e430a4d10e25ceaea64d775ff580344b8e41b4e4ff73fc7abe193a6380373969573bb9ec90d13b2831c68430bc76d0666a1a586cdb97e7a3833d26a549764822e974c9174767b2493e6ecb65cc10950a3b16456135dba7c425fface63a523d85921a7e499f4cc06f46260fe18e322af09c2b4b01b44caf43250d5a6c7bf158d918f8ced4afd84c7eac724f83 COUNT = 35 -K = 33845bde56571dd7dd14cf555155c481 -P = 613f53305233aac3cbc00c2fda9a59a911d6aef2bc8bd69f23c330c4c4eed2378e8a714b4b9b586ae80debea64c02518abfe9dbb3ad2244d0fcc406e29c435d76c4d2e760e31d684444822eb3352925573b2b560a6ff90d557522360f7a52be45569b19c43 -C = 2cd03aaf5f66001a33f6da4a50873ed21a8bad3559a3df46592e13a9d544a819847e34f36044236955b5b70e90734eaab95f644179727cef2532b8f047d21b0985aa4d1c88787705c1e6ef8b5739a5fc4d0028b77c081a9c30fb8766546145e29bca94b593c5436ebacd5065d1416fce +K = 0d43189903a105be2c47484853bb3b39 +P = 906c91ebcc6e255af3212e9a2d10670e52670477acd35184098e527e9aa7a46f9ff7f65506412cbc107988107298d81f176982d5578296010a9903111234885b53271975fcc1e6bf40b806cd98db0c51449b2032cd75d2b1071cf712300358fce927e9d7a05963d61171a2387810409458ac437468863541f743ae10c66ab280eb46f8d0bfc0d069849d34c4e4042ff3c07f2984ef0428ba0320ddb075ebe8903816c601c0c7c4fda6c9376f157258af3d7c93ae3c05abdbc0710deb52f64119969614cb4601e15a985303a07df2884dd2c38ded471cc3b55d52df95cf7d1b81b6fd5f19caafb86811abf72b44e0e60f1dceac6c69856b8d1dcb95213ae3b1342c64cd56dc7520a41e88f44bda062c8fe0bbec7aa38472f10752647b1de66aeeec78357643742deb4f69984f5e9e88fecc1dac1aef88228af4441073d873c59c7850852454bb881d3ced1c0d2067d10e714a9fd73340fb09a2f99e03f5b9b68df498c8dc9629fea0b6df117364b68da3a3b80598fd2f37c2308bdf73162abb950926539742a16893bb7eda8c4530eae379b18906423e2a7e6d730b17b4da56b5b70b7248c1123d5dbaed3efda62d1c88bbc7381b405e495eff9085cba21886795508e08278fe9cd560718b0d6cd257f7e8245f0fe5b5495d6d2377430b72247f36bc4da1ab62f6e07b9dfcb727f3c11e85e290059f36c040eaf69308b1985951 +C = b6ba2194477b0381160a05e0d277e0e61d8350bbcb7887a1220e2538209af5372f52c0b6f48a1dc4595aa1762e48a40bfb49d766d670079b5f1f240adc1c87e5e1b9153c6b9bc9995980e405424723acbb146d52265f1c9ed04d22e83a6cce18108931fe4bc89223fbe6c825bfa01dbc0de67f370c05da1418d89612c025c294e762225473e12c4ddc72c2d47cf99ed162e928d4c766eca97cb9ef6bcc26fa109fe417fa311bb3aa0ca3541a75e9ba81eed30f8929711e23813c6cc4f6e9438995e30954cd02292036cd4f881f9c6dd3cc16a0c2e865336cd985f1069470d2df25f31f23b8c6b47119f6053ff615a0ac16de906db6d11288bbea93495f2a22273fd3d53242e6172723d8cf34ebb22fcc6637a237344a1ddb3f551d6b95ce3386bddf16ec23c19b0aca43cb9508aa363892ca1d09a526f414ac90c57dc5c575ca57ee54b474f7ad0cce22287981bf046ec8f10c5f65aead86a1b8053039491763467673e453eadb837360d55873ba424e5afe785fbd32ae28d9d61f957e86633b18423a5e688e3cc3672dcce3239108d1ae61cb84f7ebff614ac860fe984aa9a1bab12988fc53b679becccf0ee90ded943fa34ec26af2390528b4d660eb08b24195f6b5ef8d0f64e90464707ff42dbbadb729e9b7a8fe628c01642d1f6567d595a57f893a134ecc17befcccf10781647762f926ae01872fb96cd6ec6a6f44ad017ea1d9ee5370fec6 COUNT = 36 -K = be86ff67d6e67248a2963d05c865cfa3 -P = a314be47ad52fa870eedc2b96c941086db74871ea23a0bdab8835399a540320c3be82c3b883f408e806d103d00ca12cf3f523eb6aec048f16bea4203d1b7abd05b7028a0baabdde8a9f1d2d79cad09ced099ba8f21c76d09ec87086bd615bd08d3fa27b285 -C = e90ccbcdbdf097ec8138515741a7f87af9135a168aaf5ab7b20f747695b0e721e5ae55d36169ae888e0eb661ae3b0122352a0fd298b012dbbabe3cfd4a498d77d9899cb586e3abcad6855eab29a8234fd0fe1d2bf48f5559640ebf01d6866019ed3189e20859c66f04c43baabc8accd0 +K = 75fcfb661b157caca61020330281154b +P = f4f3319ab05111160a249ce71faf79d0544264b1cf851cc0d7c2d47f2108d1558cec394c529ea1bc5527eae501b44af44423ffec4ef4be782426822eb217a4f9aba23aff87b62e9faaa5d3dc7e9aca54a5acd05a76a7ce96da37cb1eb805d1dbe29fea8ed746834b0293c025aed60f3fe493cca7b8e536afdeb374c8a395732ea1eb877b1652b9d008a3ecb6f2384fb4645825e2aad52edfb4abdfb5ce8accb45466c9cffa7b0ecffe491861e735aaa58d7454f4d89de70e6cbb646b240c24e135834b9d2dce59e0251d8c4f006d1b7971177095d7ce49bedeb737cd4013b54fb551e246a3e3e0bf3ae9898962b3eded4fb5b09b18bc86061465a7f0b38ebf7e4d0f3a5a0cec095a3fcaa68ae1738f27940778b368b88045db5e10ad4cdf6a9dd606f9880f835c255cb083b6a8b61f8b3dc2bb96403693efcae7f5438a4f420bd4604273ed3be0095d255cf0eb025ec9e45c7bf0cca2a8814351eaa0178dab8c2941c280993b045ca6f6d04fbcb5482d535d983a37f2d28e6acf4a9c1defd7277b30ef929d9f76fbd4b574d67f0ab72e9b1be00e3f126e7eabb6784833b441f2b4b5d7abe80efe04bfd6c6ccb1d6d1e0979b22774d1ea321dba17727b69a6a28f677d934b1704e9720e7a512bc46195731b9c41a471e5615ab6cdc017b5d3a2a1b173b5a63adae31bd9df2af49b308d3929f0e7b8cd8311645a589d6e4e5b5d6 +C = 764624d2774565d7b5b0841302cf6339404b421eaf872463fffe0fff9542d2725458a00d424b925dc96b4efa39df33b879c38fd84b33390582ca8f1833d4ad27450d8406bbe3a585b10cb1ddd22c9e6d821a7e182c750eb6657e051292b02a7ab07cd84918e42d15b8ec7b2f7e3ae3a99e0d62f0811563570b623c41c1d61371db6c2dffddab6fcc6b8e16d3a4063c690a4f3ec7170085c6693210290a281504cceb5b02aa3e9e79104cb30185295a19fcfefc27954229b564a1712ffd6f5cde581488b3285aca73012a690ffcd8eb7b84445ba83032b07ef341aab8618d3002d68fb3de9f32acc3703e55177dc4251bba0dbb0136ce0ce35cf6c16c12ba238b21465909cd4968845d7dda0dc576e7e72003c397ed5d05135ab4d795b88ce5210d72ccfb0e8eaec17ce79283b0649b9f88508a45c82da2e3bd719d99b58a580172a6da8b81cf8f9d8e10f509dac6b29cc04a426f6dbd32005a8677cabf9a215277690f0998cbb52fd9870273cce546913d064d5fbc6750a83bf7cc1c77ba2b97add60f9bd21d3fe3fb9791a5e189a873526fc059a407491807384c8ee0e019ab0d3688d01791c46c1a2fb08092ff354432e521b388cb7e71b7f980d6bb4561c92f79c34c565789868b311f82a584c9d38a121163bf8a2e9fb72ae945bbb37d4d16cc86b1cd90105a481d293e01c6198889133538e70634b16d5a227b8c008a4a58617e81e0ff476c COUNT = 37 -K = d8e565dd6075e9146df798534bf34e03 -P = f7092690ac8af8f21e2749fc112b41acd004e7e1a16fc014b4a85c895dd593de3bcf9bf3e6ba8f9623ad68e3b36614ede4bbcd80cc46b50b19d3f2ebc6c65c422c71e5e1577ffebc2d76a2d0c265c4c1314b303f15798ad5a2005a2e1d8f2a414a0026b131 -C = 711807039044ee2c085e80db279addf9c9cc928640e942c878e178d513520acf9c9c68750255fb7d555952b488160dca9ef3d24b0945cc990646f77712aa795f4a0c80a910e13aa764667c4a8fb7ff0e895eb31d1e6caa6f64afbe4000fc85716d398dd5bb557baf1120a5a4a3ea243c +K = 0ae2d10b285bd9e236e718bf2a2ffb97 +P = 9daed1c6757543680ab7a54fcdccf41cbc3a673e2f4b0141c99b64542d338fe000771e30bc1ff66a85aa91c026129f8cd695b62eb808de78be2f3e12ca3c626cffb1e5a75ccf9a61df8c7a8b470c7e44bdbd8c8561c7b4891e6faa9ef37be0ebaf37dfcdec382c958f183341f49347b6e4501713d2c5c5483be04ec26bb0c3d6f42c96d8e1724bb0469b932b83cef246485a344f554db9984a25350cadbfb9c70c422f2fb86cb6316ee90f14bd82759a1f2327ccbaa775419688a5bc2488a6f77db67e9b7a3a4dd230d032785e9ce27ae549fd0eb6506d5c6bc0f879a2870239c036bf351557b9bd980796c347cf77706f0417359d78e2a5047a4feb5ff15bcf886fdc19e90a180470542324d41c68d7a6ee6aae5c9ab98e14c74b40ac2394c5116517e7daf7f7a35fee533c17e8beb3a5ef51a7381e52b39b21eed04ea73893eded6c9eab25f87a11d32c2a01705caf848eb348aa58d1c239ef1ee1e9005953a5cda0fe54337d18f3150ed1f805518b4713a9af1e7598f9918b66f32dd5c903bee03c240a7181c3f69cd3dd473b45db5eb65e4e6dc7164018b42fc0dce820566b347614feceab804efe1326c0daf2c22bf97efa80fc81ec0510340a74df2bf0243373fb76e41861baa9b77e1ab133505491971442f669c5eb0ce2280c164d01fbc3588717023e99d67b675dcc7989d07b65f11c8ffe3c51b1978639c19ce9ab +C = 5e38ea5d3d09520cf707dee713c7a83e17a844ea84b070b5c73fdf013c6c36a492f48fb01fe6911b145110482a8cec34332835d2c1704e0283d3c94d416d9e20da21f5d8f486742f2cc54fbb444f4316a0e783c7676f16734598f4b0dd97a66cd1fe4a654c604d00a5cbc0d06d6bbe97bdc50b8a04a523dad5f3905c043ee18ee975e5e73b3667836ebdfdf0d14c07edd8a41aa3b3464ccde8642a419591869d38fa2eaf38edcd2f064b273d4d6f51e180e1e43ab106a8c8f60de82b811ec40d9197cb56e914959afbc8f7cfc2000ae557b08cec68dcdf3b2419d2d92bc183d5dfa8a5c3a05b3ed74d1f6f77d585168753cb69dd19756acdc9deb258942ec3f8e0a38b07f800f6f832bb5711f8a33402e6015c00d8a017957ab4b749339c5e7277f856d22512145885bb60ec8d8bf15f357e4ff7111ed03f1a5ac17806e788f6964ed1707532643852ffbd9ae02b6d7a908b766ad7da6a1b95b5be70f614b788041f2c4c331c70d5a12760976b3c92fa762ca690dd4081c565b0eaa65f8f45fec2b5bbe265c04facc7ec5a587667ce4dccf98768fd6749ab2a7be65932c68bf64d8e639f7baaa13814f4a0bd474eccb420f8823505a86be71abd772b2b1f793f037453f1e6292363eba924e412f93c19f9b3705422c5d961a4e566cad0598dfa4412c51205390fec7224a148cad4459c1f2513cfaeb6be7ae2373829843c9532edb0e1e200daf4a5 COUNT = 38 -K = 2b6fb8c16d02c3d96f843f5b4ef62a49 -P = fe38eb72993db408b0540dd759826ad8af3f0fe7bfa00c42a89fb2ba1383c0288fe6f616c09bf764049072071cd229f2feaa6dec1276807ce5659bed99a584d2e54af9990181a1ca31344950360ed1cc47b7fc080d508bd9347987a125de434156e9c00ab4 -C = bbe1612eafa3f8a16955a5e713cc764904a9020ba9380b44e89197537ae0bd9e44ffe1f2d8dc8893cb1dd9aa24bbebb8b70154111fdace54146a90ccb026dceb3f30891c893bc395d8a88ea2d18a7e5d571e5073d8ee316fd69d09004ccca6761018fa207be7089ba2fe34164bcd1de6 +K = bb77e8083903ff0f09f5055b17c906e2 +P = afc07201b94849d011abb8672d885f728cca925452785a255ee4f47708964d94f85468b44b94f145d742bf2214b08207660d8b45740a7d01e474c9d2a9da866147d6c6771d4c1264aaa0dc138c8f37f94e3acbcc02934ec6085beebad4bc3cc0c1308fdcb2b940736d436abf6c5059dc246f17ded294473fd3e1d0be86e160cc65443dc887ea78b174619ae216a9473507325d441438a7fdb8e96ef24fe03efac645fa6cbc181346b994ef9598b6d1175541e9d6b217cf55e6466b7fc0e0a08029980c06c4d8cbe09d6441b2c6b96740376d29e6109c0a19c9e6eb298ff1d70e25e88c9d34c10ad0e2e7e3f554c17f847f1eba9ed0cc877fa9345f6a6990c87430cbaa9d4b0bcc6a3eb42d9557ec417f60f6135956d19374eee24b4aefedff8e0e3943491402047cb95bc0e701d7dbf67c8a5f3b7f02d48319fcb291637decdd2c599477e12d2f164835c2eb4a2f046a7fe3abae809633033026df45c67674b499e9dded134bb16d9fec65125fd563eaa1a7947c6a38b1389ec206fc3b9e3eaeea14af9688e4144580d570c4e8601b8d0b56b5f0386513fd2616c873fb02bde3f4c977163a7adf525260d936b80bd7988aa888ba1be3fc083dea15e765d5c878a87370d6b3cbd2382489c7237b5a772f006eddd5707bd98be6ecc1030e6b97278e4f191ac31e8aea40e3da6fa224f5dac4f21972660d1d997c282fbfd4aac7e2 +C = 2e17dadd1dc25e8bf9d1c33ee9f84572a31c484bbb2ea220b71c814dce1bdcd06fcea41535224065903663cb612451c47f0ee7cf7f29b5bf41f6b2ca2480974d0a031d7c1a55e2873a5a004f5e88773cb722e2d5a612955b5d0049f9366dbbc0bf4be2c742b38747c0fa58e718a3c0a0d57cfb684a5768577fe6884dc2f2d06e4282396be995d7df17bdf2ee8c2c549af7020f6192214796941056a6b704acad97e15ab9ee1033224cba806ae71c8b7f249b1f9c8382851786b4b638b24817cadb8e103bc7bb83e874f77228ea2d9696a28ff9f5e531b608df2b851a291ef2826ab984634c194e085d3e804750e8dbe0f23027aaaa463acfa3940a0ac540b0f3d035b1f57756ef4351fc301a6337df29ef4a7956a020dfb6d43e69d1de909255ce2eaa7572e6203e55d63ecc22e9cfdf4a2db2d86d8ef21699bbdd57974a57848162f9df6f229b6d3d0c21abdeb8e33c19a7152f505a79a25865fc8dd2e14149cb2330038c4efd18a1ddb9ef4c5246e831807d808de927908a18e75aa9d62dae39a0266d30ec6be596323c3441b23683662e29f230016ce4e4b040fd3b18b844da9cfc5cf18bb75f458263016d06230deb2f9d42072338dbdfb09c88869505609e98ebe3c22e32aeff4ac3543018ef818d9c87f72125af7918c2148ec10ff508ad8df956fc472c5254c338e1b0ca1ad8dc1019c350f9720b0cf42d95588eb1c8c453924e46fd7314 COUNT = 39 -K = 04dc64d16d25f45935c5a30d4e70efb0 -P = bf03965fbb60e3de2d9335abebff7c894ae4648acf426f84b6b53fdb251fbbd951e8c92340d48d959d12cbe6e10ff374be62dbb59ea4e74adc277628cb880b413c8226da77ceff83715f3e080f6fba487801873ef267aa8007f20bbb3b7397aa9c1c7179f8 -C = 0090c26ff9f0da17c845d231726764175b70d230807106e495ee5d67b77dcca244df5eda0035798bf31e08208a37e7124342c32e7d44471d39095377ab6e6c7ada4271791fd998a571e08df8e89ab3c3679d1d5de729da472e8e64e03c74f87f8e1ee147e1415cdb788e7d518da940bb +K = e925b32a698ca471c3b82bfae3a422d2 +P = c7c7f98b11a73ccbb632a7c9cfa083ca19fbe497e34a77e0d5b1139f4bd96f5230faa2655a7c3334e202959151cc36b8b7a5e3118d88b91fed114ca44e2be52d6a8e0cc71f51b3f7937733693b990fc7cce28fc558171dfe6a501cd3a730e02dda4b09325f1d9b7b4f6d990885ea44f4b54ce914aec9cbedce9b8b786c1e9a2c53b902528a5ba903cc5a36e3261e94f9e1339fa548fe6be0dbd8a329ad200520c04573e86f71da291520d99c2f767d62279c4e801b28cd45efdf206a5b0dedf46b27a02cdc26ac324edcab45f4a309a623345a53e14d8a8e8db10051cb6941b6c27a5196baf4fc22f34c248bbe4a00af2dc74f6f23b81e99bc6bd89f2c1775b670c0a2b07c2c89cdea6b39a7486f089d699973fd3b3c2d8deabbf37e9785b9743f05754a172e036e0c5ea7a942aa2936fcb007e1c0cd13e9110c6bdbffd0a24fd5bd35b787bb269be3c8f0e45b33509c5343bf69e7ff0543e3ed768d6c4167c0b43b8227cb99a6070f07d979d431a9cda96d43c2590a3b9a995b7a224d5d4387d7984b48c4e1af9ea7e6248f7dbaf121029b1db5c0b8b293fd89ef0de092fe78eec1fe4f095d26283470e0f523b5f71e285dccb43e87a6c632ec43f56cd222850aad572d1b30016b1347f51af1c84d23097deb9ca8f8e86d5a68f7a80f24247221efe143cec52ec5148a52f83d3e8fb03dbb4ca4791cbb36a0e90da2852dc95d +C = 368b085e4cc5729e1c4225ff400094c2f22007f63288eedfef9286eaab8b08544a9e7c9339960aac8ac6dd7c5dc3a1d5c7326e7697822d9e4d1f9b0f4da390d8e2a11f9285d9abadc8f1fcd9969f16c8985a962f3bc9501a8b7afb7a95a16fb9364ac26d1d4d8fc82cbda54062bd8c1793855367e91487494268c26f638d6388f52009afc03a1947a0e6cebad4bd8a5b0fe49954e9de7aff7433fbd4b8389777a33962026880836186d39b9db3a87398b766b1081b7a1d21d7e44813e5f268ec56a4f9858970f4aae87c14e3dbf9501944a3727651b78b93ccfb8627237f26a665dd955d0682f3ae1e1211e7614314e7ba29a52cd0e49eb13173c4816b19403dfc68e07979ddf8993337511d7584b941a17140fb1ea495e05421ca1f3831e911470610727ac5b6438746503dc943f10a4e8875b89811dca88fe602eb2eac17e40ae7ff1b55f2023cc56d30378e9442752fce2392fdd0cd5451bf8ea64c5d558ae9fb1af2110f214e20da51bc36ac79ba35aabb5a5014aae72a0c7f71ba4ad72f0777355285a9184932850ac25f63e0cdb960c17b9afa96fa224918d03d1c23f757a4e1060de147133d745a3b25c64d6aece74baa94f9bdae58c239be5d91436e9afb7ce53d5d5d14f8d6be51546b396f7d81ba3e682bc1a6d4f4b23087bd0005e3797660b51f01abed6483587fb90c3ae144f8c2259392913f4066f6d280854dc2be2a090ce97fe0 COUNT = 40 -K = 66dd6440f09bcd57bc229c7cd9a4bfaa -P = 2b59d61ec3ab67ae7ba06babb8e867c2bb12473713844ffd188982f6b105395a8aeee06bd64521fc375d3ed98f94d36e3ef18320b9f5dbc03afe2a672485854ac54989f7995e2e7def31ff04ab07a4457058f33bc3090ae4c2ce29d5c7e5dfd7940a362a18 -C = 68fb0d23887d19d38332c1fe13ecee35282c6b7cd1d597e201a8fcce6f04b862d013aeaf1ed238d31b41876e4db8f1b80caa760979bf3e3fafda2caf451134974f3008b9d57ace36c666cf08a184a618c3ecdc4017d4a46d81f4913ef077bf3aa2dc96d54cf9f59a781161dcc64fc2a9 +K = bb7fc9dcae79e3df184d274233b6bb9b +P = cf6ff15a3b92cbad2cd60c9af6cb28cd37ad9c88f7b075b9fd2f049236c6442ae411d1b88171e5fdbf2b0eb1a73dba4aa2b9b61f958eb98ffb562261a8baed28645faef0ec4e9a760cebd707757573897ee4c4464fd50a7a3cbfd4b12b795b6b923fd02c1168534fac22b5ec9c045247d493c94373bad1073f004fb31e8491c1851df1d2a63c3a45ed3705032d95f602415a1c63d19f96f3a50b9e6b9c02144c02a720e8d38730c15ace697445689727a6dad152f30a285fc19ae545f13e126f4e194a94da375d658fea34efc176ba9d9ae5d91ad068006e8c01dbfe43b95d40cc8b73cc0272a945dcb4033026b38b6cbf11e3f13e33bc8d0faa7d9eb8a3e7553e314d1975e6dc81245cbfb69babfbfb9580d2a4223a908752809b366b45db4bc832d8b39850166ce759c54ea9fe48e0682c97aa284838ffd3ba29dfeadbd851054a22b0907283e47c18775473d47d8c3dd2f961a436b65b52fcd9b8cda6711e1877ee3ef3688d19f7e99af299e78002481f285842cecee91a74fa4e2724d97eaae9a07575edd173db5be3fac2dde4620053ad5cf72ed7c24849b7627387a72357735d6ca37836ba5d5757d33e18e96a8ff7e49431c0b278f9f2ef7115cfab4922243d2c4aa00c5e5f36cac90707f269e1ab7818dda55742528180aa3ffe9ef30beaab7249e9653ff376879269fdf7d1e41f6ada391121b53940a8b4ca3ae9c6 +C = e459d20dd65010928662e6696b3a9fa47fdb2c109495a75e31dd0f6b48d358d3cb04d6b34e2d90249d13c4774ff5b233867f388e5682bac7cf2e8e33b3ca0ab2e4566f80751ab89e5db1a9a1b79b32045e12f34b0de819ced669b4061285e7e2aeddcce5b7ba0b0b1012f87b79263358a54e51590fc91615bace3db0461053e4a8100b4c3296754c88d98f9d2767e5e2d4bbd3c5cecf2941ad92dab7d264e03725508b56190810f1effaed521b8aa6f5b19eb413fdadf62c02a16aff2d6bff6586ea5edd766998dc93845dec9d28717686afe332a7871ec1dceb275dc1aeb657ba0e07a9204f783be75a5a6edd5b7b12f43221481cfc0a82a61784eda344d522e8741fff6f1857d62fda2852d68a77a93a6cd7cff8c17c8b54d91ade301a0b180c1eca974565a0497fc2d5b224b23b2e694d1dbe642b36b8547b471894f706bd5c1a1ae5027395aac539ceb20f6add5e995835e2f641694fe1ead8f28ed99875e4b9d3bb8df31459d8375d43048e3f639b7d38695b93858cdf86d8869d34aed662da386441ea7bed37d60fc13aa9a62fd6620140ca9d0f8da7f5034d2b54ebc28c89aa4df1d5e909f7be2db2a01f157814c49788456a54487db62e5778c45cbec1ae61ddd35af22d6a90e8202b3dd1ed82a448cf16086f829b429c43994f1a3c893b6b50fdbd56d137b0876e7747f425101ae6e20d3b0f94afb368999eb74c2b371261499f4b42e0 COUNT = 41 -K = 431bb89b2a0de13464e0f32a6dcb3627 -P = 84dbb181ec0fa49bace3345e91af1f9293946bc2fb54d1b466a931a93e1d7e8eafb67ebb78005f7a243baf680f0e3b49116921f170b20117179e40e96a985e8139ca17d9ae6d01745a0e4dad2249bf8107e70636124e8f333cecf32d6b0436cb363e78ca7d -C = 6d05d9df44368d74444d5e6a8c9a7d46fc234df6674389c35b5cf0fbe404412b847fe3d99e834647650e617199add4a901b1d9432978b7f29804adfc604d58c7c3b7705ff68ddadf667b71e40f5bd3467b4c28af4b88299ce0be69d7b36c978f3629670d7e24bd8f324b22cb3421a0c7 +K = 6b98b857e9daa00b592eb939450aa849 +P = 824e49e9f2208d90073f14c595caeace96ee2c8fd09e55940411f281cdb909111a419749d98b27cac3c1f7f4fa73d1df001c01abe7775920cd1ee2bba715fc712a98e01ea163699651afa32184cbc44358b9e3bb48f7ff8ff9c78245aab7af6abdaa892858a074a044b01d60febb27170b0eb07f88febe0bf378b7d62e0c1ed71eaffddee2a25ec42f33719186c97a40ad457b14e3fb9d5fecd6ca98acd10004a33eb0124f26ddbefa7763ac10864b02ac311f012f3bb14b3b970a386dd49affae05423da23565a9c9f7552c6189a637787be3bcf3771f9d1328b8c3af400d0490220c3a1e79d941359be6b05804a3c734f62eb83cdb5b01ac418ac9aef6fb8a2b3f611ca9e7b88052b9076c899b50e330dea91aee157cf9d16f3df8d715719ddd8591b0b116e00c49f006821695401c4111e0a4ad96dff7fde2fed3a1fa4ab80a99b6b67a3f3935ab0b0c2507c73ea569c7586bec282d617af835560a7375d049a1c0c1d0dc76d24ddb9de52a76af02c0de7c8be706da6b673ff3e9dc5fd78a440e29a7b6155b115c5073819c97f70a2aa12d981160bf11f19fcc9ddb477df60e0c6bb9f945f7d73ba8f71f9c117e8a01ba27562d3b310af3bb7ca52a7400becd06c1c438dabdbcc570242455c1b8b16dd6360b6437205468f751b469b045cc05ec42d71a607746fa7d91e3daed3ff320c3ee6b3bf5b50b09633a93edc3595b +C = 3fd1607d18acd990d9be756d21d1b7b165b0d870be5c12d845ad9b8ac424c1de9a6bbb158ffbeaed5c9d8d1775f899d77ac63452abadf1f9e885428a597ed821ea90ac034c872bb29f20370842b581d1a5b7de268383448a8235961d6e48ffe4ba1d128ebe81dee69b1cacb235bb0dd2a64634dbc14eb2f02acb387c62cc834e29b76769310466fed3f6f5630d8d5d937fed55c0ea69935a6de676cb251681bb60dd5b6f0ca9637cd7dc8fd57517d2a503a503e03570e9183d071cf9816bd8bd06195ab21769a067b5c6284af0712ab550b823c8f73e157cc0a8adc623713b2b15d24f4305602fe1549e6ed1782d1f928d2dc4608fadaaa5aa1ed071950f690baea972bf6d48d77246174e5742c1e68388cadabd0a45469b5dbf58beb1392e9cb3e089f1a598db4d9371d0fe5d9a73c20118dfb168b34ad3b6288e3eaf4ac5b280f5bf34f6e91e64f60f0d0ed4688de1fda77613aed64cf11abbd702369989fb417e5e5dde4fd805fae23ff5c77bdb4cd597930d46acda7a23fc3cd8b169b23ce6c6f870af8a6647d0d73c832a41f5e9ee224e96b0c16a49b519930dca6840b011dbbac66b41d943fccc3f2209e4a56ac9897a6fdc5aa3ec0b1b9e2e205959e9c247d0af748eb54ebf83e67ac26c0bb9bba8b33d7545d0dbe2f4351d805f05aaa36b43b5180a25b64a22213a3d1d34efa530ea310b015dded8ec7d9a8bbe172e2a7ce7854945dbe2 COUNT = 42 -K = 79e5faa429cea8c374ec55f1a7747877 -P = fb3361f1abf21519c66f3b9488537bb9c1abd8065f64eaaf8a94b4b27b783d72878404fb8f3ac51e716e21052ccf7dc08c671046482c6c6a4a2518e9b0e9811af44eaaee4de6b2c19403204854707e7b33101f251f14c14c3e80b48ccf5b0ce16e754ae1ba -C = ad8c6c5546613747b222afb44c6a4abe4989f00d9202e692f71ca5ec9de1a74cdd51072f3cab90a3744cf0e1a8536da393deaf12aa528204475d20eca119d32bb36e25c4cf04791015c4002ab1b0cf4519be997ace5858f14cb6e820443836268b4b7644dbdc6da47072227d3531a087 +K = d796bc6f623a6bb132e79b8c49413baa +P = 8460f934a7d735dcc8475200aafac99978c372237141cc02356f6a172408adb34743ab4aeda025021135d031cd65b1efaa2de202b0d24996ba070a0f27c5c0af1b6f3077ef73a61346b2ad8faad464b68bcfaa44af22f9427563e9205a9fd41228c8313a1588a985df70ab7ab0c609da558b20ba748c4a528248a8d35f2cb21a083c4e5d2f63585c9cf7fc2319f9b959e32bff16a576e695ec6ecf1125efe22a9a3874e9f117b69a4472802ccbae5fd5533ffc01da4fb0177e2cac17041c2396c2883de3f262dd836114000c83ad90c736df9b6f14eb7c00c3b34a665331bc1a022b4d1c03b3f8990872ec8e5fb9366f2d9676c745edc0dced78f382c5c578ded260687b3f7ae8dabcdec4aa62a8d47b65ea19514520d9755d5ca2f2ffc409892b2023e9fb7cf1c26e7e76d81a4f20d2da3ea7c00eb21bec64e95f5eb88e7aacbf6fe40e874d89b3623f258de53a554074784e2511857f1c7247096c01fb6553e343e1231fee3ebbc78f9114539f65ef1a6f4f0262762db8a0fdafa805b8062ed484ed22c09eed8d0b54ff07d58d2ac0e0c12bc1297774aa4ec0abddcf0e7fb57636a19f611d9238a2f1d515209fcd7ad83c23560fc09d60c910889c5a80205b985acfaf8e4450403f8d1516a1631602cf179cd0c5b6ace96f27ba433b75ca42ae41628c92dbe2a186aff27e6090614eedcd6e110ae07f807ca1818d446ff10e +C = ef32d4edb438a5257b94fcbd17a3ed59b537512874a04a09b16de02962165557f2352a88022a6bb19f1e151090d74db010927571946db610d4c811f324031037b95c70ce1755e76191a038db2bc3afe7fe3002a9db1f32452411a11c2ba714ea9d004c3138a1591916e108b4aa76056b980c621cfc48101e01e3bfc3ddaa4eaba787106712032bd26c264533964c1275e899c6277ce5f4c354850ff6f604fbacb68436da208fa2537c02ccf82e535568b03b423a59912fd12a541768861ad21b3faeeec1981d1265a8a5210f5e94d4c4a3a47bd99546ac06a21e2245fb6fd1529041e3ca7d88afe07d79b3150920ad1a74f7df3dd305ce2b3021b925bc271ed5e48372e1821a469f58512a6a3d8897d4bbe552d2e234a02edfa2d5c684a4f7d068a26f0544081373a79a9bdea2be131b1a2a9afbc966f13027647b477013b632220803eb5a53b8ddc31b50f3e503fef94bb99ca69801df96a9136661d9bea1c291b8d92a99e07ca5ef932efda5e785309cd432649bf635a9c3bb96a8818977c669ed5162d905d5b9fdb945d630d74e040292dde0b7b37cc81116d6611e4cbb5c6469fa82d8d4153884251615d61f834e97ac06a3635f0e8a1a89072ff199964ea311ca427571f2f27c5badbf4b695b623e62c7dfe0dc9448ece991929af03c57bd876a47cac7da2104935f204e52a5c0618d27870b61df74c8950fcc9d8eb4463d75d0a6888a9aab COUNT = 43 -K = 1c2c30def73546c308cf4f7c627318e3 -P = a02fcd3e75bf29f230b24dd3ff48f942e63539f867ce8bc164bfb184a44202f666474e8e2f251fefe28b3c2fd703cba87be1906e51596af5dfc434f195bed71415fae57250a3c6114805b96405361f63472ad3563aba8a43ff54163f2ec052224834c12aff -C = d3f5943f5e72f9d83a83e29028d6617e19717dab0d16da2e6156d0305bdb270339430e0bb4123e5e10324e796dc01f9fa5489d05e5c2a15e8daf4c34e34f8d7281127bc7c783a7af75dafa316250855b52da52eee686c012dbcb303469c1d69881339a1ba20cc5aa03a0cd8633f11c38 +K = c1b82721aa444f820f477c6078dd760c +P = 97b99402603043aba3b4f6f7e9666067113c6d0ef599c3cc36b8aa18f11780262e8ceb5c1e491fbb1aaef3f84b9d473d9dee15f6cf8ce97b771e3011ec0dda9c7e0c1e82b6fc90874e50ab37804d421b1250faa7047612096b600e4ec0aff3960e4b5ac87774f6678e81e6f268f9d59535e9dca157e7f6cae7f4ba5358a47e7994f6e45e88792e26ffeb4c8310ff17b54c73cd8b1a7d979d8f14145e3564760c5c6cc7f6aa0cf471dcc68d3c0c8323090042129dcef1e53afc88d048244d5f78e7acb226c3edda04c72d6858453b10f0336b3c87b2ebd4998101d2f77a40594487dd793938339c5d15e3658b6380c76fd5206885ac608ba9ebd52520a9ee5a940c5159de7a7ac5a3b36d61dc33055660acdb5af0c493d40a6db363ed95422103e80d5070974706824488b37afb3d2c6c04b22f9e1b3b3c014eda08a758ce804010e4f128fabde72cd82b51d9d2afa414c1498657e69cb6cd69013cfc560b2dd5989a8a86551fd3e077f05041920b47b52c2cb44aa66d87b2d75acd0ef2abe678298a6a1a3764cbcd99895e3ad2f343865eb615088bbaba45a0d0a302608732778573be96a33bb3ae997b0c92bbbfb47dafcf3880719d46c965f56bfc8474c9a4356bf0637a57343f5c05d5358e07c14643264f55871a59474edf6b81027c69f9955b4350fb042e5dcfc1745c7007de80db4f7e1a0a1b62d6724cd155bcb5da19 +C = c0033e6d38a14ec2de98897e7d9db023b5af935b05daa837b5b0e23c47d0a8bd5f031c9fa6d0f69819b2a667597968bb7c606b7412b58563181fea03eb53f40f6a78f3b9e0bbec9e06936503b5754e0cf66469fde286af03b1e05fe551d40a2af90b64dee679cfc8e1e53c1faaae177cac4763cfc556bacc3dd55770c10e38472efad05320087556c0960c57342ff84f6d671617285b982ddb610aed825790c44e472595c870e422d4bd6ecc532aa6379b2ea3347a4bbfd27af134d61f80a352dbc1eba2a5a226b4cddba34e772f65747eae99da728c41bc2070e91a99368e120ecf8685e06775f1dd2fbbbe920361a8fd27a5906f710a9d571299d33fdc5a417441c4bdfc2aaf2c77bfec7af89ff78f239f2e38645a266ab1deacbdb14ee04b16e22fa0c1103b61b2334954c8c18e1e2773389d5a7d0e8bfc6b05620cf6abb5a82db9050b4e8da4784ccd6adbf7ed58390b8e19c37585a0c33a1145a495276fbf21fcdb101aa58cc1a175f9ef661eba948c8f1b8263faf676486b4c4173dc31220deee5a1febabd8f850ccc63ae756229bc35276ca67d680f2a4fbf226dd879ef1e0c005eba40deaff3b32216eaa396bc1d374d4ce5f30887540becfa4181d4b5495b5a47df0a0bbca9551b6ee9342623a6020fb52cbeca4d4e00941e2de3eba04f6ac13ed012bc4eafe774d44c349eecf0d183dd8431e0e6b415bce47eda3e6520b2c0d6512359 COUNT = 44 -K = 78a25ee193d1799ba857d1633287be05 -P = d9344b6c4363af27ccf8907a22f6308cf368565fd38d9ed2ebe80b868c865a32bdaa91e8195e228a6ef2049a8aa72833f30491c436831b1b6f49e91bb1eb8c8ec4e232e09550920b5928105d734a5ef87ac08f889c9b4cab70eccc88c5223244a298f00f5d -C = 1317ee5d299c0b024b21ae8c0f8c37a4e14b0f808d0b51379c73711ec7de4a4c953cdfbabf96d15627193e54bbe5b9e00a54a44975c37796e8fd88de844dffcae4f8a8354626729e8c3fba9b19496d99f4d3f798084284c1c704328e301e6531131bc75782bf62379d855ef73e86c415 +K = f7148fa7e563869cff7999502f1a5674 +P = 2fdf4f1df4e1eb441733b2b92f983c909133c8d6b098e7b6075949106a7431b1d9cbeaba5bb0555e92d9a693ace74f4e4d963d2444cae53ea12ebe43d1fbe946213a9918ba120c9752c3fd5c0ae558a760e000ec5b1395ea5406058ef0c77d6dc07bbdc81b8bdea912cf58ec2702c3a157f8443a8b76a875dcff9f34d498debab811df691f4893964f02526606abbe651a399c025abb25ba78d194e05e740ba317b21402ffd934ae6e91f77e57dad8a8654a04f1fa87892dd6b6de800e2bb5429f08dc9efe85cbc115650e374f6450b1fd89571c3ee38d890c0ed1a01c20c5029f77309b9f271903d16338386f24ffdcd08ad20d31c2b44459671a534e8e83ad8afafe64e6bc6e154d971d2a1f2430e88ae2bfe56d9d34070e98aba7d5dce3fb344ee0a73ce34a660d4270d9140e55fb82a8be3e997558b969d642ae1e39b268b097a24001dfff820f1024bf8409b3f6b917627be027fb4303df82f25797fc8c2bdca36c82aad9de09c226ff79d07d4d290473c6a009c5f1629be6c1840b46094c4a02771db89790594215689051942cbf2ef944b4ffef763aa91355ec12b2afec0564fff120e69d88faa8962b5c70b0246c8c7208fe311d247d0b38a418f908e71217fdc302c042962a20c3cf6f79278bd0e056c7f392156d9c0bdb993d06aaa3d2e9e0382ce79f4be6789825989b25b53321ebd9af3b9ff823684588b6e216 +C = 14bdb13f69c7f52e5ba427e81da0d0bc1da9ffc7f4f80e4c50ca9cfe3bcc4b902ab5bb80534c133ae373aab1f7bda4c71996a66e267e4965c77b596849571b9c263ac247cab086d49dc67758ff66c7d3fbd228c9325c7db3db8ccebeebca79ccff3da54cea6f89f9a46c87e5b6bf35fd87f2a032c0a421bec1b65dc8f7301e827c1a0759ffb2fd28411ee0a4468316c3d407ce3db2e53ee9bc4ff223d42cd0e8731532454851c65c688c1475514f7782ffd361b10a7b898039086bf70dbf0d8f5575e1196513503558513b6320008bcef2a1c2af18e276fdf7e8acef9fd58b05838476ec363bfc601638b6451e7d66f0a125570a97e07fe8bdccb601b020bab97c9a8756499a60ee6e20b88ce77d19a6d0d16f5d835eeab254d034da83c04e48a124699af1a063a3fbeab0054b1bf79cc1e0638fda7348b8f2c255484abe35bfd9a4c1451ac9ce828c4fd09b4990f70011faee844c037dbbc4cf7309ecf7b8b32d5287160772103540c2bf1d39db044061f15efafc9fa8807be7da93be77735d0894e822b67024e9809c1d42123cc1d5a354b1a992cd9164fc885eb58d12d2a4a3c0fc9ccaf2bd818e28fe7de1926592200f62885890ae2da67ca51aa6e23c29a66768b920411ac35c25413c228721a679c4c704f0897d9d8c8cf2676ff5673ae33ac71757e25e6d78c4bbf445f885f179c9d027133ddda1e2ffde5a579d28cea7b98d45cd43905f COUNT = 45 -K = 0b70ebc6ec4bb7be210cf37bff29487f -P = 3748fbbe2474478f8b34732feb9d3972709816d4c5f1ee0be53b751f02a824bff49409d888bb0b9526b98b653afe57b40d62b8d69feb3b3a833c5a2c6ab2ef3c681a71caa3e51cf3218df48ae69e9ec5ce2dbc5e7175e07b5606e06da09ea4d6a68b4b66e0 -C = 9fda204169cd07b474393bf19b5975ef781a2cd70b07effc42949bd2f36df96650e6be08537413222326861f0724826ef404bcad5a1d21bd96d633429059570bb726539122199ab58fa71ec63d1a96e7bbfaa51e494ab9b7b1480db14015562b13a7d63237617419900dcda7180185c7 +K = a37e43e7142476ecf899b7bcea82aad1 +P = cda403237d3784b3d6f167566952bce01f7d5766b0a131183de1f3471df0f0a25d5ae73306269b83c16090545046dc17e25f67fef9fab8567b02f3af5b949191c88d419853c28cab216df955546721760f8a93a8baff48d7cc1d614c1172a9c4e0e82e5311033a785f6467c0a192d5293c548070ee08f04eb00d96a2a623c2eef74010baf0af9645c3b0778e5c9a2b41c62ee4c5b08fa0970f756c1ae8ae6223b4769e65e25b19532cf3935e0e9ff06ed04154bf1e7edf2202430bfce774a112d49a2f03105a97200e4e25f63c755a777ff4f7ab4f874bbc3edffd78b8291cf177dbd508e45c9a5249a5012a34a8d66cfc6d16d93d96b71879186fb9fe3dabb05bf279b23b16fde69d2d1e712f5ba546693c0c484d7542e650b77edbe88cc09f8ebf72c06a3100d27862ef35f9089546d29c5bd88076a1c8a570e4e108a5d59334dc03c608d9218a0c1e63f1cfefec198f75ffb0d1e0f784abf6b6457db000823f014414c9ff62821b88fa500ff68d5b97d2f32b9445018529ffa6d92d77f8058cb0acdc3716b0d6d6c2bd71c0b9aaeded30e6a30fd8ebfc4b63494186aace73beca2c93777062ac893cb81154d4bea91969d6cf7a187fd0080bc7f8326846fc377a1df63ff4d6d7e215f4940b1d14baae7b1bdc4c63e28addcc9187c7fc741dffa45ce91e989d5c438829f755e06ea6682620ba15eb90f8afbfabb4b2154f34 +C = 30f06082ea9b7370e313f1b01752c15199a271a9e402e9c6301d75b113248b695f799369776f10a96453ab258ed5a03b9ffabe8d0fdbe711d51ef0978fceaada6cdfe2cd37247fc01df7540191fa2b0b96a581717ff19c4ba0a66d83a8266ac75ead3528091d68cf2ec6820e0b82c98dfc30e366de30fcd4d4241fc2484dc0cbb14ecec3da4d4260c64539d75a7e4a55a2cf9a3b0a210e143e4690c9cdc936df9c85e863eafdb4399e42052c9af5e2e3bb66759d387f28d9e7a54887a198df0b021bc28de55f60527d25ce6447d3f2c88ce2b62b1c6f3cd77366d55be10a964b35a6f8575569d48334e1ea290c924aad03dffc0b576561e8701666156debf8dde2f5fa219e501c3f07b92018b897601152a241768130ca013421057dee02926f419cf66de5dff95bd681fee75993c551e44f40d78e9b6a73a610097500c07ee5f7efbf2f9fe1ab41e3a84c9fbcf865e9f073f7bd4a1a981d4acef8f8e03da054a73ba6523373ea7e5a8edcca503e4b0d760b9cabaae7a3d561ebb75006049aa07155548ccf413c62658c91b2fbac48f1f4096072d125a96dc39eff0414108b7ba5a6226b4e580cf1dfb7416f10ca6d4a5f90fcb1e3968772b8a9b537487e263b9bc09856f2c005c601077453a8dcd46f3a5cf4fc0b0d226b1642c05c4956153b2d910ade5f7f6da9a039d96aaca117b054623fc3b74cf54e80ee15c321551c4d84c3d05941cc2bfc COUNT = 46 -K = d79ec8f19f393af69fcc56997171ae20 -P = c8ed8e67b67e97c09cac42aec646519fe5926f73e3c208fb46f36c3cc160d3ca8a34578eb8dcf34f1a6b3676966f65eda0cf933c266676db169476b84589045a4f634b6c0d72fa846c9a09c5f62cec6791b9a357a8b86600daad7d8bfc2e7fdd4f0e7a0dca -C = 2abd3e82ce6295aaaa38c0e4effecb9d5944063ee492089d4f162a64729ced0e9b28b3a7ae48733da05ec3e765dd1f4e8d6d22bc41a6620a6dd955a7721349d2855a9eeda56430f24ac6198079415cddadf979125a2b8a90a91aa8e75cc76f749b0a9071285f9551ac6291551bbc2564 +K = ee1d7ae4619199466a6c268fabe4c2ab +P = a084bb040e0ebb71713ad7168597d8ba59fb10cde7c82a54fbb7f5783b576639feca41bd1b390f9ee7f89a24467ab6b8cc35f2b6960c5df6460cd05e2e83449dd70773e0626fd074d49681bfe1f621ef8617bb6015a2e0b9d42f84b2a11881f887d05058939704e361d0f1be8d79e3831587ac93513c5c0eb5b651f277244a99d74bf0c4af3d121aeef2443f502ad775fc41f533539060252cf6fd763ddb663b60350999a1b367cf4cb06f48d11c1e4b96b34a8a70986a21bf51b06f4a6d531999b2cbc327be304570af5bb1f6cb4b409cc379d741d2e22519f64caa300a0b0d8a35fab6f2a2844a6de8c014ebd8cb46dfe2d560bec0623aa6a0e23483c8e744d39bc9e8f71237e33696ad5260994670a4009cb03e8ab4c6ab90ba85be6241388ccf3fbf8fd7c70f2d94adff374e401360458102f2c72452ca279852ac7947960ed4c4cafdda87b277c88c35121005832fa3ba3aee591ca5f48f099970b3705ae24a64144c3a87c58e2ebdbfb6403d5242aab63ed50d2f525a38198d6b164707d6be48c6a36d0717a2c207d2f9249a668281f104bd8587f7b4748a687dafccf1116b999b58f3ecdb3fdb646cb851d20f99952998f15cf7842c3b5f74be809fd3c8b3f12390ca8f3de31fe6094e2d23a748ddff5c53b78ec7b2b0c43b8a7332af8b9d9ab16f0e766402a745ed4fe29b4bd67a03413dffc8fc032b605d7716fdb5 +C = 412d82eedcbf43cc36133d1b1dd5425c12c394fbb8ac0a73a28fe751f0ba9fb25bfdc6995b551a4e5fce1c05799923f1656c8cb86255471f12ef924067b266a9eb0a24985d704aa93fef74ea70fe461be7a38981354d838c4ee3840d6f89f6ed5410b9d283a271da788f1203413be865fdc2160414dabcd0357286e59092420ca23412711ceda1a545b30f4e98589b6a7b48ced918534e99d1bfc6124f7c1a65508d13aa5d6b7c8cf699ed931bcf99fdd97808f87dbcc10e82e985b242d0c1facbe77dae9bf3cdd0535fe1e2572e32d5593385f6703772043ad02e7a760f7c40165ca3da741447e5bc7dc0e288340212bb47973e8a93abce0334c49679dbab3119d591a7c707c89119f4c51a5118e662f95235aa6e598fb8f206c0c74a2e4dc2826109d1b84bbd3c9d8813e6ae47476eec394815a0c3e2cce4b8ad6fbff6ee8922c60617a8a285ed66845b3d280504e53e08e993845d58d10f92d892b6043c679e730b5e2e6c22e3f47fbd72cd7de930d7da03a09e42f1ba11e0a63c89b4a42542e58a1b8e7d66104f8b257ea6461800ab25c161dc909103df7bc4a341a3eeddbe5ec397983cb2ca654f44b2289fa6b023296c9e68d1ab5d07c2ae1f6b26ab25c5f90f882b69fbf547b1286e536ff28cb5e0e407a72448512749cb30a306b56beaf650c041da0ceba912e563e49faf7bd61f8c6018a6c81004fa26acf8237b6d11227d9296293ee0 COUNT = 47 -K = 852cd059f343f9e8f0a3eed185c370a5 -P = a28de0ec3a9ff7054ae04fa497482b8f438ca4888102f1b8db6984f6df5b27cb467c9f350cfeb3c91be48e8a9070ee371656e861b8a299eb3507d16d280df575cf52b67bd4c4a71cb40bd6eac7d28d5191b7d232d716cf3fd4e294cec079148ed911e2d132 -C = 15eb92d84e518825972ea0ca23e7444e8ab8e38f4fd14b92e428fbb75b3d9910787be3b983769556b51fbc735d666708318164632f17ebd4d09aa2755ec60cf4abf21bf669492168f1e541b03697f6c45de2117e99ee84acef8e30fec0e694fc090fb59d0981632b09a842757fe473fe +K = cedfea0253a5bd8341d7a828e0de078d +P = 9b2168775f807233dc77c04c13b850e8283be081be760ae551dc6b38380c6e6dec0575f73ebad6dcf4906a9dd925796cc40271d6814bdb97a1cbcf942d8bed45edda292e58cf0835a082a2a86d8e0a3acf25abd8c44c4bc408bc2084caf405ff770a61867a8aeaf526506298bddedbe0ffc73de3a671bbcdd052951e29453e96d12a5faa7132653a3cc9e71e1c2f31c27a1bebd351b9f9ec1a0712d8872b4f8adc13f20a336160c87c5e7876959736f78a008df96351d1a822d5a2e313ca9e89a0513a045e524e598b2e097f22959b620e8171a610a05ddb21467872c9b5636218476b9173488bf73686511891964cf462e22c7ff841893d1994b97cb72756d25294519c20c6eb7e94b862b58e1066c7705587de78a36aaa4aca2727496ba62feb5be0bcdb2c6c965c051c550f067168cdff79014c1b23661b999b578955476fc32c9b54bb4e692417e76f508e37ab5ab63c78009231a1dd1ea28dbe317b8888c11d24917d75f7b4842fb2c11905b30c270428e9790b58a7f5dba06de2a1c0203835389ef64cca7f5a5db79508e60e086f22fea6f484e654152cc7475e6ae4c6e6357232d925448f4984f97acb6b69fa345af686667297431f6f382852406600ffd265573515b0c8bc23a3caf85fe1ae100163eb1d815ac960e93e1b6578d6ecab3613c7d0eb40ed6043df348afd7acc2da4be4a925c963cb99dfeefba83cb87 +C = e5fd4668347ac8fefa285913206e0c78e7f326f358632ddf5ea4192dfd1c00aca171ac7913b0e00a3b88b82918b5c7748408cce28ea903f66602da189e3dd78961a90444f87e1efa6cd2627ebd4b9613b5558cdfc59c6667ebc04db7d54f9f26d01b54c4712774712ad017e65f76335cb0cb8982c54966fdb4f2869b99c10d681bd112bc0010859a256eea3a8e1137c67106bc14bcc159ee1e386ec4b0042bbfcc9bc2f029d61ee943ab05fcceb42502f76c4745b91aad67f2b7f13d41581be4133e2a2742f6bdd5d64130179088573144220f46e4ef4ee365927ce63bb19aa41a403c9b41569a005b615d4614bf5981f503fd5e3a0c2acd294d308596a5749339a617aa7cb351dc5c82cf2dd1d7e384af7daf4b716c8d23c95a79a8d46640a66c97c3e4a3d28a32e8b797e9f12fdecceb3ff553464a2a42a4fc47cf420402622087ac948510a41844c24533dc53304b9293da35d62d6d3f0b5f1d204f3754b4e21613e74d203c6267f290b609dd66b0ccfe1a9b106adddc9c2951e20eb95c68378ef40f19ef24f3596ec005703fc9164e13e8d1380e97f2ef429e95a558b27843af579273763e7a19758df952628d6834c204ba4d7ebb1090525ba05b890c2703213f53dfa8accb4584416fb9464e2a90317df93dd36ff49bb7db0cf3ba17a9116e29c2c826015e14dd13aa62146cfac0d6e0fb78c6b87c8c6f22008d14056e2442bf94bc611afa COUNT = 48 -K = 810393521fd86991a8ab481a35b8ffff -P = 48114dc0cf2b3c4d000025bc5fae898cb6e50728dbf68d53658b5e89374b5819018e2824f2a912dfc2223232d684db5399432bf94ba6912c7a31368ccb340abd32faf5a689b239297fe7929b1ec3c57e08879a97a746d201be134219f906a0660dd5234c2d -C = 6ac2c0bc77b5b7fd532d717430c52ec4ac7bff6eabd72d287f479792123e61d2cfca2a6f4cdfdf73fe88fc1ef0e9ca8b103d70347517ca0f505dbc83a0ea4b5964fb95853704b5933c6d9bb95939a002f6be179828a91419bc70283a78771fa48d9c91289e877dc2b5fe76fb646dcb40 +K = dc8831ed9f569db15c2c0bc46b0a8ece +P = 0652f8a90041d3af7bfdc382bee6b20d51074a0416af364f1a75f5e0d204ac326bd182012d4d03a0d77d6a6e098bdcdf93b8666f7b6e4dbe86bce31455867e85692bb7b9e81d9de0f4e822bb4ac4924b787c2454d844a5bab049d130fd1d6cf7c3341bd477f2bb04abf2c1617bec1efb13dfc7c3e5e3e45033e7e69fea88bcf51bf4822d556afde582ecfbc655026221401acf0a2626e333eef678ebe211b351a0acb6d77338da516964d2f7ff8e37855d30deb066cf032fcacc3d72bdcb9bf381199cd5d1c5a8af725fea36ba307d2aa2b69b79252cdc72b25607eec9294cbc6c0e591a626a08f61fd93e9ba496ce8f2018fcd1de0228eb48e58debc7cc34aedbe2f13ed9393cac478bae25109173ed445edd218e7adc42bc50c5bf8b88167c9242942f9b72b654cba63ec3dd0f91819be21f12d7a6d02095d6074bbeb02f0d1abb2c52779ba9c92c2bee8b8d7ef9cca4e5857735af2f5f0b6ec357e4f5107efd03da5b51d8a1d1d7bf5108dca2a83e7e858d3cfb0940044034d98744e8df4c3c8c1108e5ee7993c47016c18eb67d7dd90b4816028c96ee03d89508b65d858e3d233d70282ddef6aba59c8b6bef760d009c81344a6e45652c861be94291bae30d6e4c72008dd9aebd67cf6012ba441237484c11210e8198eb476898f941a0a560958eef37176b492ad5166b924ba6f694338d336fc666bcb7f00358f2e2d863 +C = f05e8aa9f2ae147c0b9fd0acca02603322404332a73767407280271a617b78d89337ace6041f1a6fa0bfd1be4cacd34de53c4ce65917f72d43b481981009a250e7a8f3e7a422401d4f1ac7893d3c2d6dc030ea19adcfa498cd81a842f7e62eaf1bf2cb46bd2215a3b9d84be777a27583050986c805409f45e3e232c953aac99c4c0adcd51538f84629cc806192832a81952d113eaa6b82e2ee2a6013b25590ae22c5d0bb0372680bfae16fabe305dc0af6b45a04558c770504fb559a07dc6f49c59f8e8c40a088f32d52f150407d09eff5c8190e5c26830038f59e655cc8c405a19a5cace78e41b3b2643799371776bd1f307dfff2fc67d3fb69ed3f602844cf40ddea369af254b77a38ae0f474c4b0ebe7d6a64b1be5f6ff019a9b3adfc1e122872d10a384303f6f4ec80bfa533c6ad9273a687a632b3720feb305945a14189c64a20cd188f465e600810402b5d1a635e69233b0f065acf75f93e4ad2a32bae00f4ba891f09ea74c5a095dee6f3f8b86a3029605b0761f05643abd79cee5a0bd27d9b6548e03f371c59b5f2e6ac823e40601f6ca98e15e1daea2435b2add773be58bca49a06eec6bf00bfc2d9ea92906e9ddc8fa41394449d187a6559788c4a3b06f7d5f6d477f0cf386bf1599c90ee20bc831f5230d08aca980819416c472f5b6ea9e24cc437048f493c07a2cca8c2cebe427469b6302a7adccb06307f08482c6ff35aecdc423d COUNT = 49 -K = a942eaeb6141b1dc0dddc3471b16be7c -P = 24b6df78d536f378ccbe42f4eeb6cb4aba2f5043cabb68f0d616cf773fe24321babe3bbea69ec4680d1534e606fccdae334bf2a6c9a38057ca128e21eff35235b09e2eab2aaca7499eb5eef4fa42ac284afbe733ad64886d2b53b7f431621b95eb4dcc54df -C = 49b8ec43871ab5a8ccfc9a33398c8710feaa8538ff93f23315901e6c5180831deb6637eafd6ef2462ed696a2f91a9a5fc4c958644e2dfbda95d0ad547b81c9112804588ab7ace78b9fa760cbf6e3dc06e894175758c3f309dd27ee90c0edd5bfb784c9dd32404a78666e867c81cab19d +K = eff8f0c5af451db51e490ccd60ed2637 +P = 22df54836f73ab5945223a97504c97f47f082cf5ccfbac681280f0da20d975e3a71e28ac23a47d27e06a18e33d4db1625623eb5d893568bcbe367d2bacdd134268420858312aee31acca2bc33abd7cee4e227c46cd46fff34bf50756fc71653201327f0e21dfd5fa22955bfee6aee9a48cc7bece25bed36ddba02dec7466c0e2cd450eca5f31b3b93c496eaf370218717009fafa00f3718cf633cedb8e714efae4fab7ea14292e6ca579a04d67ff1f3e8787c9e09d56d3e073d8b946e7713c3e7a0bef94485a9aba69ba258a8e461d7816f7ec37e79c3429ba4addc7a7c4c8d987b554073b9af3b83e54220d61b66af3d8d918ddb9dab8e3c3f701b76237ece363e6f2dafcbc2fc154686699991d1f48868f7bf38dfa85990f861b41c1a42eaae5efb7a7e895a830ff1888077c5239c814b7419d72e1923791ebeedbdd354be05d7ca947766b9f716bf0f60bc1b9bf6428efa9df2281c3e85e47c9f1c57de911ec634950d1e8daba172dbbd0a0b4a2140caf9d46440baa3bbee4cb888fcc63cbb5cf744617b9ef4ae7f9598f4ea40680087c38e9f422941765976969bc035f6aa4d7467dc8cdb3d17f48e4b1f7033cc3e7d88ff6709bd1e2a03a4679ad9d1754cdaf118c1b536d9ecf5f2847536670cb0f8528b29b00df6da94e1334661f500cec5230f11dbb5cf95115fdb2ac5a504b669828fd5d11c5d45e207007c6310481 +C = 98abeaaade5c5b32c0a3adf4513445483d846951e2fb88adfe8726b10b9efc13755e4c7c5ec1bf226262da344cb567c6a8889632bd34c816276ae63b9448dc7d528f81193d3d637eb2c44bfe5c821ca4f2f773b81aaf764fa6cde941e344c7aa2bfd07dde91f4a4c2e3bb7a22e46f6c2e7c3b97b009ad381888784f90eaace9ae7e09d16520107bca8dff127bdbc8ff2908ea748ef07c5535047ff28ebc86578e6b886cfed09bee810466fe3425d2c21f5eb7becf5b6512a925c0e74e5b3e1bbae734bb31b3d908aac4edf46830c8cbc86d7a28946e742554f7c004e8e5fe613c6762e1b66c7af9431189d2162e2622e73e841cc0c80eb300b5e5557c7f34a60cb085dc8489ba40ff9161c3419d0ae129f765f9df5b3a7dc5b5052351a0cbf71a7fce874d010555a05d88a1a8922e48fcadb9b347cfb51a32a46abfebbac294dec4d72b67174588e59142dc2da22ff9f8f80a03e81b1111eb483df33c4d7fa0b661ca5917d90a867742492e67f1fe0fb69cde402a6c25911246d513e0b5ec69fd0ed1c1ba9b757253c05260b626a7039f9c2b9cf01514c1783cf43ccf3cbb4948dbf3d16106f640f99b104dc804e81a0889c54454897afcac304b09f9e47c94e9ae0aa3bdb67dffb981b379eb3afcf1f6833c9935970fce2f1ebed5148029847c82f58a4970f669daedc3f88ea976e3a16d1756f1667515bf9e69463559b5bf511d0e991a8b9c967 COUNT = 50 -K = 85a3b359ec00269ee25bb3f1707bb8bf -P = fed644b8d46018aeff64570c9f4095dd9efccfe0dbf677c9b0bc2bc69479b03f76973bf6ef4bfbf27457191821a1485c61de020e6c1651f74c07e5c996db9ba6d320e577280126d7492d985a9375371648324da1bf4cedc3c550cb824c552284b7d490429a -C = 8c8fc1d9c5c905280ed491be377d3b5b1363d89f82dffafd2f4b365d74ae2c117c09d03c91a8f584010dff4e2499a8215c1725de3cb2ada805bd9f32ce7f31be6c8a6ac807de21cab02ee2384f2f5a26b316a5da76dac29d145baa138cd5a34afb84017d0ad5cb48ebaff57ae4c6485f +K = 77ac8ca64e802791741f6825c181df3a +P = f6efdaaed153ed408770d5546bb209d554bb3878c61acf0c43c3cd038e0f4d94c709eb439dd8dfb4823ea22193630b6b0440c2d806ef2f77e656b6bd4986c6d9463594283954add64bc5928e2e8c8d219fc4e5b3b32e9dd46525633b47fd6034803c97b769dc96cd36908bebd4335e117fe5a0d2de6adb6da1493e26823dca8ca2d2a2a863d19074d16d8869de50e94cf0f36723b6bae7ea7881ca7d0f6561cf994518d32956a2d329841d2c6f3e37b8e27758c925b156081a24af3feea0766984f60d89a189871f9f11be6f4045e3637cae40970310802c98d5ea8cb89c0d00859e61b9a72c7e3be35d9bbd07285e2888d2b59673f22a3a4e77f9e6cd01ab8912f0150962d775d6832a3c6d85dbe01b53063b6be65cac07ef3dc797a987005db527fecdb0bc65d1ac8ff15cd69a484fae26eb9d52d41830625b0725fec0c3d0d722ac207c2f90a9ee70df8dd54e60fdd5f68425d2e30b36cd00c9f3f15b98ba27497eb7c7f50a8f18338c3df498715ba661e24838b9d22f67d32f20b510a8932d9d0d69af8afdf5d91709320636db9070dfa29cb10a6f6f9179871ed95f9cc3ea9ae824aa20ab912849f69e602dbc70a93c9a0f11e9d4ca3370ba92c19f78dbe2b262a0c38199bb533004adb12985ee3ef738edeea45eae211f4b03d8b8e340e0412dfbfe1736608fb1afc413f90a45080aaefe263572365cae9aa133b5cf9f +C = 8ed9efd15c5edd77061ff97fbd2dea5a10737493c651306e173983a98cefa9817b2fed1e9aa2f762e0d79a35467abd9d37367e6d6b184263c993e7372105cc7deafddb291558f1971716b3032d308bb7a5333b193d9fdea0d3c705f8603665ac9a236c7a28c684326c3901e331f83dd8217c7f4147c4427162064a247aac747d4f14c624a010eeb755b64613e071831a923999f71f338645a523fe93968fbd339ebc1af552d3a66d90ce891a0b1596333d51c2ccad100cf6bd1983abe5271beee823b9bd069df628aa89d9d72627373d02b2613422f57997a428c992f324c534d0c6e19354283a20c98afdc4c1f319cb4534cc911d14e002481eba7fe9bef56ff1f09181d84478355a83df11054b40c1497d5d8a41b202444ad689c440c4483a6a2662c7c33271fb5dc57f3bf6d81228a3cafa9aaa2cd922187229ec7ed4bb3cdcb6390d68792ef31bc9ddfb1795dbe4d82f94b060514976d6ef282701bdb1a7254e4746332fcff5086422e2a6a285384f03ebb4c951072b27345d8e5176d1b0b4a55098b63da4c23cbe7c1b5c2c7525dc8166c064790c8476a462925fed99d7e98e28eb14e5c4aca4db109af707a2cb584786c70f119a58d6de836829425e4ff3a99ab09b779b9ac200754770f98f50ef59b58b7bf00f5478ac92d588c7522569e0e3f4d7be81f07ccba326df2c4008c0526cf468adecc823ebb18881df0ae6beaf4dcae3b0a316 COUNT = 51 -K = 6d5943b8780a8c12a7d9e650a3fdd93b -P = 0cd453ae7cffe4bc01d6300fa91a58c474c7c33015d91fd473dd6ba4c7ffb4994238f74d8966f9b9e4aa6d0c520cfc3164789fa9b9e09ba15ccc9285bb5139133d21e216c6b7963bd82d51391cae8ec7ed9ee42b6d3c97a48f7695741db7681be5f5a0d445 -C = d352d07a10f114609f355fa65c5e0a22d636a1579d36ae55426c1edf0402ae3723eb2953af5ac20fe628d33ee6fd375f00402199326bcd484f895e8fb2105836aa4155e7ccc414ee02024f9b6d996de51b55815309a0c416b50a283776fae44b5b18d0c9965878e9d23ed2803f071ebe +K = 56cf88b659f915b5610d5dbd146bdde0 +P = 95e756eb91af9e2c64599ae15c8c7eb6301e1639230b221903b0a38b6e04e38abe48b738dd2839a95c879cbca8a7de5c8c406ef40b5dc09b93f0adb808e79894fe8663653cf7378022ce4fdb0b3726198a7a247176e023d4c2732a4e525fe44eefecc3aa083d89b4b51ba075c767e0b88a346b09ea4bbd2188e605c1feb541b3d7368c721e5a63ee638aafd44b5a1ba78ce7d8b507e2d7ebf67654a35dfd3935adb933eee71155334bbda68074794670bbea6ec4c158ab23d865c03123608684a93ff8be9484151457f82797008fae3f6a429f073cb6f0b31204f88438016e7bac342b0d3fff49beb9fe336d73ecd6959e366b5a0cf59626c2a9d2106db728ff48e561ccc9a7515a6477724755d4250007c93c8c680ae177901a9ab63f5788b3ef1137438766cfacb269e8e706c02acc9181f2fcc527aedd400131f26702dfdadf8a198edf00f0e4412bd6a4052a8fcb295dafd8718a111d72fae7fefea90a683289c2e519c4bc4c1497bca8a37d3af085e075859b684ba6d093a3a1b7e0028b9bc582a357cd92272fd241aed62e06b3b186f7f747d73d33e8bf3d4c9a5208534145337d6afe2d8f3f31510ed8c3829a837982006e1ca729a94d09e9527eece5db061049a4ec95cbf533f8759e27adaa0a5a02b8b66bba4a7bd0ef725176044f7fb7a01945a858aa0c02ae233fc9a433046b384682a0fb8e45827487adc7f5f9 +C = ea9f312a59f4c17a98b2ea8b62155c74eb77334751403181ec996fecb9fe4d578938df07c553597253d59cdac7eb3591fb5fe87b3c9f44820b9e75311eed1578831dfec32a07409c39960d0e3c9328ebfb259baf4783bc847585d70ee066225168f4dd0a554b0ddabf7fc262c92976e8c5e51b1460702a415c791d6f13908a1bc1b47aa86d52d7038f6c3e1ee4c17bc32f2b723a342dcc09163af5ee645018768ad54e8f423863e13cef346f33ef205b5c137d4373b2d7ce4611fe518de85f7c2938a30e818e8296ecda92c62fb86dcda88e9b1dce2ee8a09790ae5560fe240d3a6d327c798d8d97916e978d0baeca157d53c21e7966c361c17dc007a80f80065414841e072a1894f673b2d51885b58da108db26a20fa98d307765cd17dc1d44c9b3b8f1447998f089268dbb8b7490045db3e8edacc70a892a2a338b49de0cae24cdbcbb54c86fd761689278424740ea87b28be9ac39fb01782ea5e8966db35bbaaef7a1a0078e19741f515ae7217431c1b87f56b6a4a60e78fb1297a5d48ecc3e3cb61d6878c58fe42192f00de42cffc8501f92ee23d3b6507a977f17898caf1c4da42cd999f81895bc6a3b789dfafb3221db9e06b4b67c40b5ca59ad9538c0d119d9c55677a91159115352d8ac7976763341de6b8bbd25e885fc2764af8a7a43bdf8cc9800e5fe235304226c7fb9c8ba3eb3e0ee3f4932909847a5385765166dd28c88b65bb664 COUNT = 52 -K = 9329b34b56b91ba540e5ab4b5df44d05 -P = 4a98563a0223f6a3536ae08a4e7cefb5c1b18ee4f7776b82bd7e872174d16999f75c0b1a7e58be5c114f9edec8170025c8e660043d5db821b023e6c7b8d0615caf3ac8de557a7a4fa836c75c8f2ff8305275722d5e0a5c72baa1a72df6a5e41af8b680715b -C = c7b29c8ada9472b46946c207167388bbc5a60e006bc5cfd256753bd08826421985bb32ab258562deb7392aeb5b1d765a3d83a5c25441bc8c9adfb1226424c4fe6e38739413fc24ed0ca73bd9b1d7e3e2dafb05eb23d46d328488a535dfa0202c7aa427c63dc140e11bd0c6dc32f4fbca +K = 2eee8c097f9915ea8b19ff44322a3a28 +P = fce293d0899eb332ad2e99ce25e30ab7983f83b86bac86da3934c6e65fc5ea74e62e19e04569d59256d98cd6378e85d1e2701a21da79a63b2bad8c9b32169deedf27edc32c3550c8240980898353c34ab1030a19a3c7d38c141be7e6f7c519656ea087e1c349b12d9dc89fa4b09f2008bcab46735e1babc78ebf105764487665d63bc978d403a1260f2ef7bb485e254efdb1401660e48d122ba712ec17a26d550f070baf6b8fec62e08cd4e912c290def0d5d2d7eb8d2957b9f106cd8e302ad9aa2322e9b0303e446ba381f312d75d18ea0ef46ffa9ba41c9489f54bfa448ecfa4ec1d7fe3adbee57167036e38ea8e5ee828f389aa1fb3a6a645cbd70c8cbf8f3d95050fed2ddb727910143b50347ec18b7eb06fdd449995ffee8e027cdd31dd234b947ef4108e917c55262d01c6262eaf0ca07214f686c577e66299d85c71f607b1a12d77c1bc112062bb5c9276be8f88f8b2ce27f3bab75fa5db8924e8a09aad6695c55af023932dc5e161a31612cfcbe669e8042d4116a9dbf8609f667b6c674f97817f53160fb544100fac541ba21748b71cb59d6ba5b18eafa620c6d478ea09e965a08a3344d9d12cac3dd18de59872434446ce450a9ea57cc43ce410054d50ef638fa2c523d2f0916ad9a634f8174f00b76bd58e8b017ab5273d926e7417fa8cf8f4cf13b75df56112c4b86b4b7fc8024b4c5a37f633196b07aafa7047 +C = 755797b2213c8061fd0a68a17bed3ce81b24bfd0af36abd5e016ed0c8c34f509e4191eafe37da1faa128a95a0c7ab0f92abd0554d70e52ebd41cadd4c43f3b05a994d8b96d8fe439bf97d3b0a898a288d0ceef26470df76b7edd3fd9a56d04710161704d4bb21e09464e4f96cb92e853f5c2357e02a2c0d2472ec4d4db0d11f67c1aaa970980f9bf0b7b19035182398b81b00a185e223ae11efb077371483796890af492a8f52d46a007822d570954ab0bbcedf8e8b6b936bee278d571baf0cb4f38a26d98b57536c646744c30c2a11255032f4b914cf774b8bffd9271d25d57729cb90191311334724e0d8aebee4b8460096ee185821750af7d9c941bd54b7cc779d4559974201ffe0d1bce35969d4ba73ed8c533e6bce8528fcd93441f69e537c812d6a4400eec0ba3114ec73cd48010502181f206137231d807885d8fb794a943999a8f5a532d762060d98dca7066d1a06e6162efb331d0d26620d29f9244eaba53fb711f822cf3d43d576f34c0dd246a2f5138d400ff88854916ae48625ea596a22f7dcda65e4969f4fb9fc16f6170f6cbedf2a3df61a954b2a120a7902da72cd24934790909de060a150d247e67d040770938f5b7770733b338714ce0a22d21f65bfab06e18fdc9b3627934c2aef720b60f0a9bd6c543f79c7074fc5b55701e23a908048cc61fc800191df42a1b3168aad84d85f639e2470cb01b4cbba3b823bc615f23312e COUNT = 53 -K = ce3712fbd70e95ee501d7a8b9facafa4 -P = 83fdb1a7495cb14ea7e1968bcf5a858014723c47e51311e1f9bf5748d054a1a45cc0908f859c60d2697734f390253259fb053da5291d0eb6ea7c8006e85ff0757c8c02d97d261a02dc7b6d3e844cc5da8cde1536bbe6e1feb698f1807aa19b9694d5b262c7 -C = 7111a42d306e3800e67d4b14e642f7c652cb695da25cc4feeb85bfe0cbe6fa10892866df945bee4597f6e3b9d60ab168a09decb0d03f9fc18739c63aa1282f3870779ac571ec8b6ebf718558da6fcf16ab9c7ffcca0f8eb289255399f774e79d0f5487004fb9b1194724d270f4a800ff +K = 4d4328c15a19f59afcb0663b2b19015e +P = ab46f834a1625dac952acc48c0d1b8533e885f288896d32d878d0de930350d4bf9c1b862dcea85a44a57c1e0ffb2b69bcec04b6d47010ac5ae460292650b5f87cd5fef965fd1f6a59e02adb69970f68f27db7b80adfc4752bbf2d5aa554ad6e7db8b3132a0f3287683e4fc8b8b15f9d4d63706c35c602c6a3bc48ed73a38232f2c8a7c4abd3b5f8167b08712bdbed500fc94b15ae9025930c43190003f2475574dcda0047cfc7913cca0987b0f94851524c0bdc8c3e2b9d014b708e3ab1b6e1ad0f5c6b573864bbaa47bc99f89a5b3e12d9dfcb25279c675ece482d230212d6439f915e21b57ce089bc0f3d31c6ce9c2461daa50deb04fc8ab68795b762cce8d63c6d3f56b75086267998fea9164e1a2e2eff2afdacbf5dbf5826c7a50ba681547af6890a46eaffd270ba01e677df23ded9fa5008da68eb740a5cdb3ab0886b63e5db807a6dea8ea187e257b38a96da5ac40541d6c719a3c84c7f3fdc17bb5cf6b0ad3509e0747952bfded0697f7b8c126af7a2286006122a7952f06aa1f39de5bf5d9efa5776bcecbae589478571724784c1171007bae4060eb2063311047dbb17701621e3d4b51d06e78d0dd752f046fbd4b7eab0f1a9109fa8a3bf1184fea7816b7f41a7588a8d906d3042ada113d4e2c1108f7a912ec14942d351435141ac5b1a84f24da58b9470d6cd889141782485df27d6bdfd9818fd6c4868377f4b9 +C = 483deb4348d8f1b3b41fbc24d24b9e7e7cee0ce1079b2792f39370d1c0b61c2a6c44ec85c7b79621ced6c43fb56a6d2b2fb39801fb4a4be5475d9f666ffe4b9bfe062c599c7262b525e9f62dba3bc51b3fc96d6e64a0b4b18eca7f63555051aa33ebdec8de64308972c7b4e41a4de38fea859d8bd2d6cace3bd54ace7d384379002986201f50bbc6e1ebda78266b669fbbfd084820fb326bcc2a57b8cce23f762ec6e5bf889e7a5f1e68e0189336f095cdcb4769d492fccb1f72a73817a0d5c2ced5b815993e162121da9e88896198575d79eb0ec1ec6b08128e2a5c13c803c60eefd5aad5157ed3b13e7b4b510756f6852670f379f40aacf0c927c8fa608213c8918ede65cb777a1a067e53c102825863726583d1ead68e9f97de763010ed6154e055f8f55d7b1735e154f39902499fa1ff361d9de2ce5f566c48063e6197921fc8b815b6e9f6981157457d659f8d9dda0dbe1027c41f1055f283a7416edaa616109cc9cf1f626b14034503e9c7069164c8d5074aabb828eb6eeaeabb5d883be34ea5c93bf5b26e1b41c79053dca8d722c13b2a214f57457e1763f83753e2f86f1e62032ca07f35635137b16357a495ea3e95a4f0b1306e8b8af2a798f16672714ebce8a38af52c37d50be1c63461770a8b274f7c60a1ce4ac10e115adcbc3aa2e9743a1bb7fa19c297df33c06dca2311c60c795c10431695a11b248b556f5a5e10857fc5aca86a COUNT = 54 -K = 35223c3ca9e3fb245f3b69f205d1b2d4 -P = 7da36abe319c48cd31f326ed1e4119d07cf8b98ceecd5acd90478db469ee36a3dfaa338590c5798a1544e82abba9fcaf67f619479ac6e97b14fb929e531d35fc59b698330b0b71a750492990c2e5f4e30279eb2797469fbe5bab403bae9ca128e4d8905fbe -C = 29a0322b69d5b9c54c78a812394c623db86a1efdb64ee5164b744f5229ac36370f9dc0da9e6873de53a2b917d869b48ca2ae21de61a2540a20aab0a367d6ae7a909636ae47b558de964d61da90dffc657aa92fe210af69dc650f027b1d6c60019dc4d15ed72da1faf32fb0e7dcc3ec2d +K = f29a1623831c9bb88ede33efc570a5e0 +P = be24166cb93e690c5a59317e16018131f2b549aacadf7bbfb79265b7f959ee2e9471d35e90eab6f7768d9109d158de9576c9377e8af88109f1b3735038a67ce2754850dde2c694598f04d8d820cd0de5b4f450f615135a3d87284565cd5401e7bd49ce171b3743757f924380984b5941a7f5b7b2ae74e98ba879036f6994b71de15a18c982bd78092295a6e94ffc6895890e6bc9b80fbc011617256394163ef8b025d24ea82ed8cfbd000b91d2e46d4591a825fac01a9ef4371f49ee86eda2b3b775710fdb57de228900d21667e8808adb7b1a8e89e3942e4fd1131fb3a798aae8835675ecfcba7b9827ca7b56d25ed24445c3b0504454aba8b6970ad62e2d4b1d99915cde772451c4a01c1bce70f6db5106c86e7dccb65746be9a8de1f12b7926b0c86be6902f0e42bccc8087d898425cb473eac5eb7ed30758e66118c899c2dc3f6a17856541013ae41c2e200a510edac525b41b5cf41a8b9db72b3c02ef0b27baf17ee03b1981212ff3d2f9ed7898704a2d28545cf622393b78c266eb489c5556bd1bbd2172e92337f81cac835a0a0b0b313f4c9e2c5be7af3b237858a4384d8caa6971e29bb7311bf3be2c97ea84aa245828bd923b354de79106e662c442ad1de17572fa3ead852c9dd557cae622a19c51d4e927a28195dd20fb2c6a45a707316d2266adc756072b7b531307c0e8aa12381e54ae8d5429b9a251765d780d +C = a7953b808158104a17510f7712e37d95719a577ed1a134e9ed6c5b3742a1a3a1f998c560a998f449f4097b66c3e8548094bfd58977e4dbe9f36f73ca8c3147e7d74d330003a875ee63ba8323133623bf5deef8dea10699a26bac6ef1b43f63a71715f61b99482385e7c455c5fc05af1c2713226cda43fad5b9006b32c8adf7b970c27c41c7c1dc4e4584a15425aae380aac40f0df08f672bd056146aa0c370752bf5cc707c1fc9dac01825b63dc989d8396d96f79943f150c3bed51fd6ad460d4c460b50fc38b97889425744ae8c358ddd7d28ce88dffd2b4dee00f820a877e5baed00b05e3b100e72ca178a65c6fb0b7aa0b132557d81a697ab1c5a2e93b64291441bd9811f5574aebac37c868478dc9e9a43023a52edaa9f8ea54df82a961fda1ab258d3dc03cb490b2ee23b074a353c519a2e0b024211143f2f40e325aec03de2a0bb49516cca360503a7c4f272a31adc70deb84294e5e49f63ccbcfe7e7d02e9525a67fd610619f94adbb185539aa0b2fcf1f90449ba7abef165abbb92855e7d95cf07b34d2b16488cfae388a7fde95ab809d7023cc54254013bb26482627d720df6300462ea4e143a58d3f7438269c3e06c66e8edb72d0d46b5e017bd0001ade01eb2895dab3cbbe550393da1a2ef9493c70448d60817c6ef776f48672b05c4f9fa108030f3addbd73be0be6ad55ea741b6847d92b71d98c5717b163aef8f8fd1a2cdf52fe8 COUNT = 55 -K = cfc81ed23ff66fae21b650496884267e -P = 515cb7039daf91d89ae4e50d22f4da6b20eeaa082c6a05f3596a6b50f72268bc96c20cfa856f1e1c348c22941a21402fcbf8bf1dc3e3738558e5030f7dd9f139dfef6bb5e37e6a64ee6cbb8e74d17caf42076315b3a6b6ffb021b5c292adc86a750f9211b0 -C = 95da4a9d3719a01821668c75bbb3f9abeb77ac18d4bab51ae3c1e35cea0e5401018a14f8ae5483b5534a29ddf4fcdc454c152eecbed8ba003a5f14ac5cd0612241670f4199d0cbc8476f5012919a425101644c797eb9c5c966edf7ac1246c4eb1eccb72f7e0e2dc3235f96aeb7c6d033 +K = b363d35a513f5761522dc2e802bfd42d +P = f0059194b98463b4d085db6383d2598f7f7299b9c17ee35434b60435bbb697573ab4cfb0b539db940a64ba95e9fce2c26a4c849e2d7c3bfc2a7ea6ddbcef5fbd3e79117850c96d29705642ee38dfb7839ef9057c36c4479e4f272df71f3a74b59e50377d4aab28a2ffe5a820dd46264b754cc887df81e29af8575a2335d9c51b46b3fd169209f78bd308707f6b79741d53b0521aa073fabcc30c07741f688606ecfbbcde2631485e3572c765710e4fcca2aadf0a08715f91538b3c70ccbedb4ecc95268b570c629cac04606dd4669b647ed9f3bfcff1513ec7a07c141cb3898a63f86bad20a75811c61d7cef0fc48dc091be6bc194fe97c6b383c8e39ca7cb4bd58066860087a59410ca8599dfaaa7e8d1d4cca732731549ca6a209dfa3b0cf6aab621b157e9f3f5a0360d61d12bc0249ed90cf6b2a85193572e0f1d97842215911e425e2df2916707e50ba4e2fe86571f51ecf4e18c321abea2dc29e715fe6323474097aa855e28e9fa72e938e964dc3d7a45d2bb57e21d8fb04b20c5f41a42d922f224147457a8a4150c1d1470fa6a5592dc106e558d444b63b0feda892d3c7161d41a5f3467b21c07696d7fd9fcf96553b6731d8bb86636ce17d8b3538508a4ca08c9d84ea73ec6dd4e248c17f289ec7a109f2f238e14e0e781c84099b1965e232aee1d6682e234c8c78a3f37644b9ccb1a1be57c2cf1b388c539e17b1f0a +C = 87deb4c692ba3fd1827c1c3b16b277c531af0e2462f7f40585f53cfa838f963227f49ba091e6f263348d189544d107c6581202b9108c9e4808dfb39872c9e51faf206952ac23a82c0bb6382d45bb667aca4cce8dd74e2c4d85b81b4d88e35b6e07b9564e7e69698c7ffb3185bee989a4bbbdd6a9935e46be91a956fd53b796743c786d1f740fe2444489241fd604312a21b91fd7d088b3762d80c1f115378f0cc2879d95e632af622fdcbb4ab0b36a3b283fb7161fb842bf5551804340c435bed6cd5c10715057537a55b91b47c926101eb5a0ff64890eb6216632566cbce22ee9ecec0833a72ff5ef9afc4a70a9132059d1eb19f64d1979a408d88c089a1937c4ed60e91517b00621428840dd77f82ccaf7efa9829be169aeda265bc4d8b69c98473bcf2d73a18b41a5c8b010b09e5ad2cb6a1adb9e2682555c3a353941d0811f0b4e8299b43fc2da7347fe313e4918dcd0d89fcdd55d00a736daca360f906c1ac9d70c6f6d6e76bd2b5ef8f6a6a8b4f52233c245cbd4619386e444aa94b65d2583060601b334b9ca71ae356e954405c76a036cb8f4fdd08817fbbd115707e259d85cbc170a81bad6d68f3aa6da268018618089d3aef8778a13c8c36cd4376a009961597e4cc749995a3b62ec5f9670a1550051a657398a6b2969b93ae9402ea9d16b85cb943716086e239c93c633b82d598dd7b68b59e7ec6d74d459a5f5b66faf20a2f143c482 COUNT = 56 -K = 29fbf3f566c01e316ecc4792b8725e0f -P = 41423844304f6d5993df18220b683fc0806d155af32373dd8db8c850e3096e5ada7200390a4525518a03f17eec2af8e1e35cdf1f6f3fb03b7d5e0776adfc044ffb10236723bd1b576a6cc6e5ca20f16dd822b7fea983868440e951acea9af2264602904b0e -C = d0544d7c5757a1a9139b3fdc50455cd92d4a15bdb62e5270b45f7957a73c07792f33175cc48582352e38392b9f2e7466aa19e25b11ed9dcc49bd01e6c8577e143d33f1297159be3db4482be6b253767cd2b6fb615dfd3f80bd59b4f50c4d0a6cb18029b1df0fe4c0e10f1caa1c33c979 +K = 13eaa9d09980c2d14ceae452cd82313a +P = 9a7a44adabfb101b59518dc659e735cc6677ae88502941aa8a6776e05da7f670f3ab1c6828162de52603faa3b7d4342b6df523eec621dfffadc747deb765d41308e1b08c17602b7e77f81c24683973d8fbdb300bd32b6964891d503263e671522fe786544e211584b59bb4529909cf6974938dd8fc1ab8826469d874586f859b8a97734331353981340ec0321134d266d97ee363552a75eb1b4ae3cf208913085cf830a95292172cbe60cb8e4eecbd652b290a29fee7cf2acd1f44a438c6af8c22f17b47c9ac628f12161e251a22ae163e55f6b57012b2667fed092362afb83b62b2bd7df88f4267ebe3321c8b3ba25836727089be3c76c7238b6c1e5b83f03ce5dd8cfeeee089708d89384c43683fc4b4a6aad9b16c9e88f4e46b95f1e7d1a2d9141802ed4636ee0cb0de75033fdc7b5507a1e6b5784336b2d6adb372df6744fc9c2c2d8a50dd9b9ae6ec18455d7bfff897375522182bd7354528f9987ec1e80be55f7992488176f239921386ae78e18ff66612790c0d6d93ce5392b2d3a0581987141fd216ffd6941a51ecf29a1ab6e034a745c012da3bba19f7608685b712f7abef80659bdbca61e439a49cc4a8b9e7b8d0529477e3e723ce9b8d6f8c3150a48036d4bdc95bcd973279648c60e577509bb9e4f4f78eec408eab87fd8306d27e462e491fc1057e1e926cc0ea8d5f5f124a6b957ceb42f3f7e0ad6da0e454ef +C = ebe64986734331587e5df902066d03cf3e6ceaee11e8ff33b51d74f5e61b0155b9918c7477aae2fbd3af12de7c12b1b7411cfe4df683d813493ac102a93444dd4c5eb8bb32c8274acef809f1295029fd440a7582818b889c356180868bd12a14cc5f53d45db364eb5aa1384a36528670e949f397de40a769e33008ca57e3963f570a737346cd95481833b0c699bdedf9d10b5631a520bb490d8bb819462374607189ce0cd245b6004b93b5906fd7cce046dc13ae50d026bc1f1f5e104d7962012a78b91ce848b6ab92cd20b0c7fcf4272834af1baf0b74f7170d921ca84ed9ad2964bdeeee8729e0c841107ecb4ccf57d5b5cf4dc0870008ecc2dfa2b5f419599bb9114187f6d0aea0ed8378393975acdadb09498833c978dd6942c375f8f5d149262664ae1d1c880bb9b834459401c8d78d5ab008c5f41d798e7994ea9c562f29bd70ab162df83a5d19e67ceea20b28e6e59d4679633e25196a2ef874d4a5b7dffaf410f3592ebdf837f83868a706f4e0aa28df41e25cdb9a2a0b6374c46873e6137a961b7e920744f2f2315e81d5d63911483edb26ae84c59c7ea493c09a621a4842f0d6406891ed99162b0a32021a597f229f6173f088a88b81616f778915b182d633418cd6eeab7e1eef3152af257b4d99c63aaf862d8f5f3abfc1fa2dc0ee670bb8deb991e2bdfb84b2cbd6806aada386ac4bd6536ca431527436694ec962dd97117964ebd4 COUNT = 57 -K = 3f50a4ae50b11b9d32d07967eee9a3ed -P = 6b0b699648a715025ed608ff43b8ee2935715330c8001d9a57be6e202961c5ee055d9d1f805911a0289cd1a560965b0c56e6a15be64f9b6ddd7101ca6b3b80f779228652655c27fc4d8de490ced03266730d9b60a451778be1e95bd4d910f8690b86700d48 -C = 76609a07ef40e67e81e6c3e47bc37cc7399ebeb2b85aed16d8519d3ca3777b411c371d34805550b4f7c69c2eb7787bc96e393310a9e8b4fe6e3eee7ff1b431b7919d22ac2012026808dee758af25bb5597517075344a44e069582b7e74e01f2a12202fa3a96445ca23a34394be0ec52a +K = ede7e689b71a33a63f26132f56e82492 +P = 779944bcd4baecfbc5de4964fb509d8f66267798e18d458efc75fc7c21e296e3bab53184bad4bd97fa1c3a55c0ea2dd4f73514ceb27474bbd73c151c6b919ccde2ea3896b2611a72cddc621253b2b23c5b2513e15a4a76874144cab63453f7ccfdd8f3b84a413ba5c5adbea8e1f6a0a97859acdf8deedc7e6b3534572ce3512e5715f8949181280f4de115e9d0de8bd83feb1beaf6682136290416af28a7d7bd27ca6e38f6643fc426972782a1661430a93d452b63bebf41db899ba0a4aceaef636f918fc45175d831248f9f5d78c2d90ac4bc013f6a9fed0b11363b4275bbd3020be08e5051325d9c8ea6fab030f0ac7c26859895ba41be458ae4317b395ef00c4de3ff9e02a059ab043dbba34f096bdbe81dc83ae805fcd910465f1ea26d172b57ce93323cf314a40f3fefdd1a679178e8fa778ca1c343a74bd071ce43dbc5e67a2a27e97d17bb7b8e4653a277666669ed074e89c18f20c073c37658661a2f96cb577f08233d6c5a73f060eb6e401717eff542cfac4a3a6e47f0359123c8ebe4396992bfad01eaf58ef29a89e37b10229582e2126530f886b5083647ee5357cf84b7d7b92c35e6d1bd90eed46e155f7eafd26f2c617b3791d5e44bd14ae025137d70a20bdd064f9c6ff4ba8a0bf771ade15091fdfaecac230d16c058a224185fc1206fce41e38718e3d0ba295c1e955521498c71417bc1cdd6046e65b48003 +C = 081ddcc4cc4585aa2a0d0c03ff3f770ff64f53acee54021cfe26663f38697b242757b4c46ba2e3c978a1bad5b46b5aff2398e310d373ba4d6408af196956c0f7cf408644ec878bcc745999b6f86d92cb4502e24b00af76a3297348d2ace2286033dc6bd0136acfd6135bac9314aeaa63c8b6d96135cfb532cdc29fb4d5b722c6a4f3a88d70379175329ed9a6fa3bb5ea2f81b4102aef93952efc9744382b6b000906dd5060caf815a1b4892fb53d9075b7e057bcb86f7fa0752ce243529b8196886c5f895c6ecde0b292de206e822245d5a001e97d97a13aa3a13d1b8ef41f4aea9c1ab6f75a942c6a7402cf883d6c5ba12a486eb8406d024db29ab3e38e218c37c5586382c9d0eebc7727cc0f7e8040601ccb513170bb1a7c4e29fb42d7f5cacca3dc98cdb08611d1a25e0fbd45dd3a4d7d5afebe4196d0da74dd4fce2a78fe7c0a9a0e01aa01f367fd9341b97808024f93961f6114dbacc9f7f3379ca8e392a61dd2f54f555d247649edc4539aa6f29f08b075f7374a04c5f1d21be9aaec7c14676518e9c4aacb68b202804c79afd018c79825eff6bda39dc72d1c35d21201fc381b4018cd741c5df47238ded20daed717a280a1326e017a5382deada20931b06bf27e080a9c5cd5caf5b9bb492e8f4e0b36fa3517501192c63b203f27558d4e441edb9508f07447d72edd5d77ecd2c8809bfd46c3d9f01dcfcfec911e4f1f07ebe4fd3c1942e3 COUNT = 58 -K = cac060243752d34c65e17883d1c4b83b -P = 3f0ce837673591f26eecc6d0c355de36c8365d0cb47cbb2046079c7d53d6b65427cf87238990d843d512ac724e6a954efcf85bfaaf28eac69aba65f7fcf9d66ec5aa92eb111216cf856d3f8aacdfc20d58cb16fd5493bda09badc795b30ebbc01b3691ccc3 -C = 93e43f1bf04c82b80ccc6d268dd028120fdde62e79f784768486d149628480d18f597031f3a8ddab8b5e0058f4a62bb3ea26b0a14b9d2f2202ce05287a4a28803fc4b2dff98303779fc9ffbc11d7004f1765cdf1d772563fa6809a36a9ce90106bda105352d30a361293d20b2fbf3f37 +K = 3de64dec7ec68cc493940d9daa50bfb2 +P = da7211e81619bb09e3a120b2a55d1de709a8b6fa35c158588fd71ca677a79756df3fcc5ec406782640d309fe78880bac18230aacd096eb11f62ef3207feef34bcf3482c75b070acb37337b5a4fc2b05ffc3ec2fcf2e1c318350fec1287bcb92dff055a6b78c5be88e9bc74c2c7bd2afcc57de8ad6a4f505f10041ae64d92644d47e20ed0cdef1eac7cd1dde076d0e736ed4cadaf0870ae13ddd7317f0b53840df3fd96c9f9c7698b0cb6b37b746ada33504977d6eae450b57bb3149648d2b77d3cebcadabde3745eb83e90367dc7da760642d60c8f30e559436ab3cfa40e51a0bcb53389ebb71b2b92987496b84d40b49e25a0b74a8b6288b223a49488976dbdaa7540cdf4ee2bbe9a6eb8c349881e0bbd9a65fb7799ccda84669f705edfcee4dfd8a16b557708b32ce9b135246c2aa94c7f975e75697d43367e93d9bef0b21c26dededea131c10a579f964cffb4a22da5803a60147144f1d04cbf7828ca30f17dcfbcbbc7658289d07099a9cfd35bb165e62bb368fd53c51128034297cc3bba4c87176a15520b844ce119dd1aa403af96fd6d5d5f8c5f32e2536a7b8f2f4f9c797e0a257ace6e14d295c48b62035e16630e9afec879c1a796aed52503826aafa2a3d8ad19ccebc617ef9ab221c441e265cc7efb13257187fdc91eac50a01d4717601a13b6d570d6c1af9f9a19f48874f0e5d057a3e2c3db92f90989c02d1e4b +C = d43b0c413fefee55c2e8ca975ce7f5abefa9d48f2fea57420275de444dcca55dbb4e40b3c1cf0aac0a6dbf7b6f0071a8b1abbcf9c626a2fe0006ac1fa81e50e1a3a755187f1204de44c63d6a0b3bdafb423432bd0ba69c22599efb44adbacefbbff149bb3d95cadb4dbf2f45adfcf51e77a397deb2bb606e4d119f8c34e386f6012b7b780aacf2bd22b0d37253f205e063047294917017a8244878e58c0263e38f59badc682d620fbba9a7f9ef35790078b61efd79de376789edf7a5548b0a8be8fc7b397a2d92af21683e76dfb050c88fd8f64eb569cf0ca6c13367ef8bceae80d5576cc13b058b89c317bd89deed27bdf89fb1ce8733ecff414f832e6ae4c5488b7cd22898d81d70dfa98657cd6ac82201b0cdabb4f690a1089d98795145293cd9a10319e1db3314303ad5f7ab4cbd59bdb73e080b0343f7599fae68a3b52d8faa5968625420d9708f59405e42e069c6fe6978b7b5381c953b98006a307422294aa03b1578d716e663667d77ebfde2cba3c370abdb276ff8011134f03138432e01f434411c1989b18540d2080c7ef2ecbe71764e514bc4b66b3d8ffd2d53ab98f9c8f9f155f3c0d5b635bda3e8c56a2a4e004580f29d75399556e823a546d5375efea73a3fc139f70d3b33abb8f9fa59106f2270b7499caf73d564508d41ff855d747cf94b0ab0f78f9e90469fb3902f7297b28f1d822ffc699d5877d2167041f40d3b5279f53b COUNT = 59 -K = 802e64f6bbaca448e5ea456f167c27a5 -P = c7df4a307850f8184f691ccdf46368058ae3c35bb0a891e623a30e5aa0c678e85c14def3f2d9715cd69f489f54d3b1f421467077ad8a3549f0d8eb40d0e7c06bffcc9eed0075a4a7fbac7beabe226b37933700e4b32bc93b99a5de34444b8a5c5adc34e1e7 -C = e27fa895607843024f927cf28cfe87be861fc3f688a4bf608598fd72f27c11c534dd92ae47a05b565b8011d2af5a5b7c57d6b88e9de402872de71e841372272e835cd259a9e782b476c217093293de738dca186c40abeabbb642b76912ec989d4134611bc182fd2ae506f53309205455 +K = 899c6bfa0588db4e621168d3a9b0fc45 +P = d3be63e807a7d7e28097263722b88550b3aefe644d96e4257b00452ba861a477d65f6a3be86b830282d3a68c17cd2ab2e2fa4280b1ad0be02bbdd37c58c7799254d2a69aaa217a5afef1241312f26de68f4634bc68538cc759b4bbbd1ee03a02e3b6e03c705b40c81b531b3f5452de54f45cb2b59388d3c84a78c9c5b1fddaaedee4da1b7500ced65771ae445430667477b73b2041d082e209b1b52fb8a3455bbcaf99454d422d9c32055a77ecca4f8a205d3319a57f1bb9b37d20e0245c6efabc8cb4308ff6b73d2124cef9a9475b8caab72654e96c51931c44defd6c62f46a3785fa95bbb3453a0488c240a71906af186c1415d41fbeffb5bd1f3cef2ed43feb33309a46be9bff03245f82e4728be86ba5d5ee05e5daf68c5b4988dd41eb2191d3bbaa2acd2a28cc0a0df3ff824457c575e83d7f6985f0afc9e56f6acbc25425d5274d3d552ba08cbcceea33bfa3d1a0c2af09805307145226d24643eec1103f63bdc565be1df4442422a10dd880afdb9fc08e021d0f75161237b705aabd3674745b81b06617bce0c2e34accce2eb9ec19e9effbd6157865e02d7c9f4982022233e38beb6be587cc49ec051e9480f62128f5b6d7878bd29639f5413ec3017ef3fe6f43fadd34e4cfd6ab11925f906214d64e494eb9754b53ae7151d851236161504940e4cffb8519204c28d471320b57893c959778f01ee46d84595d927a45 +C = 99f6d29a2d3de240c431cdef98a00f0fae951d06e0a5d2ce9ebfc4f44344b541d37c8e7428b417c7242b94a1c57e8d2d88382ce84724bf173c07926d560722ac5d3619746ba8a9f6e8a7b5d99b67f4f8023b55824bc3b0bfa59c3c95688026d3f99d72aecdbc9632dc54dbc2687e09bbdda3d421eb435d1bf21c1b370c635da0610d6eb1c7364065fcac781c41eeaaeffbc98e5f621d2554de0f37c8de3048a349deab29dfad28ab9820364e944c0b95ff138973244bf2299aa3a4ac02e21ec6ada5a9439004a14e7b57dfa725f2f41340262bbdd136205490f87ba1a650799a4af53c7936b7c52b24679749515a0e857115444ab1b0a3b03a39b5c643e22b7369033f89905a11c2ac26c7ecfea3530d185e909af234a788274691eff452147f67ba4f914bfddf37c296dd2aa58e179cd413b411eb5f7cee3c853435db1af1cf97f10ea7aeeec9d939f1dc747850d227e515f7793130742bdfe572e98ea47849cbff2ed8fa35f0c30abb5693f7dbfc2de98adc5737b9b4b50be2afabaab9664b31085321a70be71dfe1d9754fe61daeb5be2265019c28ef3c137ba6917c209ccc151094c6a63d0044f4f6d63997022065c581e90c11e1d909582079c1a29816ecfa2791104de2706788cc07b331d084957a66438abff2ce8c81e17bd6c8563f329c7d98aca8d6ad681d1f652bee5c2933e2baf09606e008879f1d7f67f67fd1deb9a3b588aa9274b COUNT = 60 -K = 7a5732d178fc37d8be632877cbff35bd -P = 7d91175be00ef8d66ed416f9eda4f89a77afec262be44ebf9ba518aef3bcf67c8ce7efd1ce77c398ac0fa67a7c00c9def5d71ba9d19ff91f6e771c016672e36b38c28d938dfc87ba9d5d14544067fac650232f8304096b91b3650e45e80b477a910705ed8c -C = f20a98e64e7e9444824b610fa53e097846fd1a495bb512d7a56620e42e9ed6f329c10d14a17c41d34a075d4b021ccdfea337273d3f7cc83448c667f52db65caa8ced3ebd8801fbc73ea9cd4a713938f242129ebfb304485477d265ba6480b56781b2e8fd7a4dfa0f528a4c80707843ea +K = 03612325c0148b33217c8e781df1c643 +P = 2e0943c6bd3516b987d119e77e9f39b98946578271c9a04504a37793e55f50ac6143030028af3ff4833a132f4650987f6918f0030696d03f69f709600f337caf998eb61c3200e7abc0c72fadab1a371082e8a87015cf7749a2753bfc463820f45a3ee56f7eb77f386a42e1df34d02f599e91268f8f0d4f85fd4009d1ceafcf9de2bc66cad757e66d2a9386657414474b107252be80178fd9e6d753d0a885167c2d7b55155c027f503d1582d3e7db53929252e04683b9036cf7aff90aea1dd846037d4b5274d5a4dd7ecde8458eefcd9ddfefc7a79cecace8a664a7548de00af7b003a2e7f814cc090197bdb40b119f7f95a6fe48baf1ad7a70ba8edc619aebc7c6802970ab17f7b38feeaa3b855e667aaf008a460ffe2dd300a5f927e02eed6abd18cd1e467f9f5f9f5aa7b9621d74e6c00a4116691756e2d34b6c8d580c654049315f28bcfb4b8a14c30562bb3c9566c26331c88983352ba344f99089915e1292a1dd67e27e8655375df03e580d33f09b9cddda6c949cd1a3adda49b2ae01a140d6ded150fce17dd9073f14d1973e92ab83893b927ab73257ef24ea45dcd70825f62ed09721a3bd06814ee10f1fb1bc5bc94e8d362d1730ae232de4a3fe132bc6cc62bc73a8e966553f8d50ebfc04ba677f2521fa6e8b32c1913648d932c6ea8a4c901b3614e83d1fd9d3afa00e80e1e20a19eef29512d291912799ed018e78 +C = f71fc972bb1242f340202b3edf14eb2cf583f593170a3785842b04e6cefdc527948abfc1af1eb642af2563499a6eca55c12bb94f9c53e0bbd2c08087651e8f048014abf14829cc648c6eab5897f2185ffc47d6d7963c9b3b2fbbfaa57b5ec28963a3015b9c6a7f713bceeae519551ee14158fea67b3793a1a4884fb9bc003cad38ff004386f9e42a4a11723c89a036adc3c24e8cd829335ee4414cd64b699e06bb78e581127d0a161a509f9416bafd0aa478ae86dd2e039b3828b45b82ff9b50f95d24ac128903882d385b39d76b8732168f28e965849151a066f915e6ad39cc3d4aa40971758b825e8192de2b2b812c928d636bb9fd43aa40dc3b90572ca31da01c7c824b1a906774cee3a5197ff5b26751831dbd89015b1cf026c9670f04de63011584f571103e2857f4404012f76bcdfc2f6cbb0bbc6b808e657631d3b6829e854ce2867f11120857fd881bbf2177eb51eda963c6bffe5c5b8a1fd1f8fe3023b5b4a1b6895ae2486c763b561d01b214f32d53e7cc70c2f762bbd4efda66b4cd57cd26a158c3f6cb3350ed6ba0b6a6467e434e525be8e10dfda3ff1b0846a24e6f90535bb57e075ac2233f6132b9168d0eec169df777aa0dda73099406b814eaaa6fdeada9c71759aa0d6329eddd569eac07e2908e94de734acb501201fddfbb8cf150ee8f15a401b64b2444bc0b34bd6b572be3f744ee2a0cb6df01764c47929b6fc9cfef4e26 COUNT = 61 -K = 1e9729328ec919484553ea0a7eb7db56 -P = b5f01790736655960fa2915750d6fae9a3d111059ecd6e9111dd019cb1d1b07b520798984e8ecf581e9a52daca05a31faea8f69bd73a1945a3eafa1f8537e79886c4c26caf227fe62b030861a3fd86bdc9aae6d6eaea42d2b776a7f4fa60ddce241f8e7ae2 -C = 5d8850b88c5c1da9269eebbeffc5e081d93e9dc26d2812b2cd32ea7f0cecfe5913e2b174aa467dc63c1d3232ce9e7af57c309c127c40023f922e8a5b2c60f19ffaece265781901c6d52e352db44b894fdbf277e0054cb2654c5047baef35c59bd9a8e848e0a2abdeab4f86e231f16a1a +K = d528fda3ec72257d261cced633633558 +P = 284a3c67ff2629b9d8b7a589b161258ed56420fea510fb9c34e1295e01b53e8dbc5595e8e3b5f38ff97cd72a2f1d84ee1f6d3cf2e49d9fa41ca76aa587870778be7c5ffac994db04eb432af8b942431edb9229e0f111801e85fc025f9f412a4172e5e590ca844d0cab6dcf53073052ff8c89c868d200f7eaf1adb99f9d67a3feab2a195e32c76c916929ab2211d0bb41f7245ea9fb2b4821d39656f25f56f627f97604d91bf5f98df1e7cff09a37c2b53fa026233d806b9a4fcc00292e593258bb11e3d115fe546599b5dda17fa7011e3586d558f0abad2eaa990fe86a460e75b3f630caaaea2561553ae096bd1c724ce11735146fcb9f2dcddb5f86136d8ddadb822c0b6a63ae548b3b22c4fb808497c0c2ade9028ffa5124ad0b6d58d9035173ae4e97d37b63fb51acc7f330af87a974034f66de21c93cf4e817fca87550df6b5da3010b8858a152af63be95487c137f4b586e0601fcd6fe49f7b86b74174f29b8694c6727533c06a289678291ec8eaaa2e251b76a6132b9ab3342b540bc27a926da16128c5bd1e51422027e91afe4cd9ff14d8753cbc3eca9a8ec9fb5c20d45c8b380c3c277b2a7c8ecca8da2d462a4cfa8fcde875167361619d2a3c6041a59545774dcc626ee10a405d94c75b294586d736d982204ab323ef121cfff5fe2bd0fac62952118b4de92e11300d52eb310a88c5a2afa8cae3db7765bd4ab1e5c +C = f48ea2ec23cef9bddf098ecb4e44efd8b263e44760ac6dd2657299675a69e77f671c3508aec02834d73c72f74ec85fc012d42b4bcb3b9c6a76482b56908de08792686610866511e47c35c34375a266c59bab407c8ac6eab5bb08cd80cc7974d20f9350ed6d2ebdbedc23aa5ca0d997832731d56153046b4cff863cef6e28c4509538eed842c784addf2b50c3dd1c30c25aa29a0d48b69bdd390f163059799edeefb16431cd8ec6eef74448fa1e07a6cc81af05d38da67f2949c94c45e1af0bf1bc536c6465817819b0e1a8c24ab198a43f924d1b8ccdc2d4dffc059c4581015e06d9ab63403d1cf79f89a459f4cc6cc1ceb0c1f5acabd8d10c12ef5336a87e17f269cb0b69149a89d9055bfb8e24868d1bfa5f02990e9a96db6d0baf1132dc3d973f6e5c126190711311e30b6464fbccca74deb626bb6b9b56dc8e3abfc57fb0627d87e6b41e32ecea2508e37e66a00f1ee10ac7cf8e56bfc3b821f89047595702feca75abba2971ae026f63fa7424e771910701cc28c7bddff8f30a6ee36f16047f68c075615f5d166636bfca96f3b4837ea978b22405eae5da1bce376061155527d2f3a8a0c353ad3dea3555fa4f0afd6346ff0ab7d9ebacbe8edf231b097c7019ff3615b30e96e4d61e18e2a2001b673b3e463f9a4b520df69d895e5bd5571a36bf47ef2862a642fdbfda17d6a6156cc1954d989d84545e44f7585a7b10035d62f2f5b0007b2c COUNT = 62 -K = feaddd36c6cb29ba10779596f063b40b -P = aea62c1f41db5a72e8e5f31514c92c4ce70f820c4a218f38519899aa4dc63e092a57d36ca27a9609e645b5712cc1f71dbf8017b3417a5bb7066a80b07a2a54b3573950cf01fff8fd9776571cba809a852ef09603b62a40cb622cd6f11aa3c61aca7c0a9dd8 -C = 8d91d796112b041052fd9aaf008717f15a7f72a07d8379f9cc575b5419d2a81ef17ae669f4aa42b4f711705dbcce25d3684f8dc0f4d8e28aa7114010f8f6af0cef7402c07a971059bbb41d123d9c957ba45a668bdb7636b19818cdad4c1dcc3ac15b6bc0feff1a193cb864d1e0ded71e +K = d10605fe3f6510772831d3c3a3db1209 +P = 355ec1f82744420b2f773566e336ea8464c770e9201b4e1324f1d60d77cb763e81efa1ac1bcd8cce8410cc1b01fff3055c2da8a7a88c452d1e8aedc88b5faafb5749eadfbe8314c61466e3456dd2a168f3d9ac2bb0f62be2f178f147eaff90ca68269028469ce2395df6550d56c4f16563701afd190f3940be18d80eec7cf6be74c244c1e02f71d6dec98954104934bf8a80453c1430787b7bb18fcb81f89abca5301d5eaf3c8f3347028691e954d301f5f7b8d5e50833111cc618e1aa2d8fe607be292bfc2e91c998311ff53863d5e0f1c1f26e4ec41e015684133c866a72e26ba950f98ddb7c77af374df69b68deda641f2a3d2425fb294a9ee4c9d58a537794afa69a9af78d6c1e7b052492cf1e66dac3ddabddf52508e046f87e951ac579b97818763c62741593274321812688beb6a37197066f48a32bd3686c5a69ca6766757add28a4eaa846e02110933e15c1419fd7058405fcec0ba3deafb8a29ef496d668f58f303bc6f1ec04a06680c97148c99de26bdc938b25feee003d9a43129f551fac2b191e43f745c4e1bdd2a1bc6a60ec66ce00a82ba24cd7eff0d5e8f1a7a7ef396847f592acd257a9ca0a402265b9b0b226611db4de9e680e8146f590783dc20cdd13b0bedcb11b95b3ab08befdc66455926f7b0287e7e0531354f3d68425ae661408f3b4e07556e80e47201d31605b0e416ba83673088dbd6a64a5f3 +C = 5262832b812cc4d40728678cce56c99ecdf6254fc815fca96072b4cd36e58d7ae4cc26a2516160db0a0ab8e5b9d4e37c1a27b394104dfdbe6d5aa10dfc3f83e2b81b81bbe51a36bae430561bcf425482d78631ff1aeb3826a2597f2b49877c4d937ec53ddf90d6ea7a613090aef934837dee78d0115ee1f4b46b870fc016ebaea0a7b5cdc257f0a1d467ba3eb4b17855dd64cb264d666d91d0a63d6efd83d015b1e9900ab82bf05544f83ec3e1e5328afe11d17f0fcc38c022d236f85bc173f430c99a0f57c675ae1d06599371c43d7ccb62353e8a2c499671768c9e769fac1b8c56407ebd1c0f94fd3688f80daf4013322a34659b39b04b957180a119a9575748bf456fb49cec1cdd66248fab59b9fa5daa83c08e97d454e64bdbf9abaf2267c32eda9064c0c3efda03739e17bcaca30ab3ba6f00f21263f448dcfa122c3293826a9f499a4b95e80c1e8bca75328a939129357d6273a5f485c6403e09b7f7ec2d7bd4f691a6cf29b3c8b77db3907f3d34ad33867f98e7d26c93ce2820790c56e35947328ad8f6cfd74ca5166c8cd1d97158421d5bf70ae42f99b34a3cc755161d24ac92e508915789e546a23faea955c8a793249cff7e2d9aefe802da2210afbbba3360afcab3d9a0236159a01035c3c8b7a1627cea1166b681f118c5e10cc32127626bc144e8c93ed7ef5b2c42d5df910347536b2ed7e8af787c3702bed14ed73f8e0df4195274 COUNT = 63 -K = 8434263446a676ec6693b1a5cadebd70 -P = c03868cbea244982ca5eff0f416463242039bf864548adbc5427d560700488d305a051650405edc3f652f3a7f41a684456559d8adce36e6e807a92b4de5ceafa73d66b692c8715f64dd67fe137260fc4503c8096177cdf4d5688ebfb9d9bc869caf96878e1 -C = fd50b68720360cc1f058f0154a49a84d66c5b9932b7b952154ed4351e5b86e321061e3ff60f82b334ab1fa74e5d11ac82e37a6ef3fffac681ea447b416e57e351c9309f868cc5634de2fcc0187546ce77f188a75a8b3845e5530f235176e2f46d4e48136c16bbb8e2235a8b9f102e3ae +K = 2892e3472cb99fd74f5cb1ec57d8eda0 +P = fec938555dee418698dff8fae6cd20e3d63cb8ddc502ceaf66fe1b2fe28d5fcc377086c1630a7ba253340cbc679522c8fcc59853786d5c6c1ea94d011cd0404bfc1aae290c00bef2ad41bc5b76dbb2ba28a21de0ebb851ebe0817037ea5da0baa97c742bf6e00e901e632a697118bbf1dd6881322e5dfa4d87e3636092ddc995528ce93509530e440e9740f77b24a6231e8e42a9f957bb2a9113e2bd989bbeb4aae402a053eba6646b310783d1ebcf4cc1917536188423bbc0839273f099dd2e17c2299ae60f3085b6290a937aae05a778e27ba3ea012069fb40a83ebaa25a9d25a21dc2f1ec8c84b1f1aa306216a5b229ac0a00e8cf4ea3f73f22e1e8f66f47cc77369311aa7965280124cbdc59a486e3ce5fd52bfe2f9b2dd76db28a4ea1e7072a919c0eeeb1b5daffca6b3484d9643ec9e3b30ed5941ee7cd262073f62b369b0f026fcfbcab67d25ebf61e0f59828bc340fa8a9e7d354537086aa3415f6bb8b37e0b59d8921d77696f382231bef626400fae5f4a6dc35d3953e399a7b4bda5ec5153524becd44a367ddb14185b78dd7a694fdbe320a2230832f59cc9741b866b58696ee1a3ef10a2b5f4e4b53e7bb49a38a8d022d9692e33ff8d0c6b262b9d55657ae8fca8c89b0f2bb3e8e756f1a2da1521dd64f4cce696e86b43c730c37f81117b3549b0c41df1cb23d98e0f55b6ead9ea7adefb8f167bb27a583e06085 +C = 31e09f5a50f7a7866c1a720cc919b37bcd735abac47848ca9dd62a00df70ad64224cfe5de4c9d4b45b8373086aebe510be2bcbdebee780dba3fc8d10de3ae270c08cf43a22f475325523c57d560d681eeed4072760db2cff0a3f4a533fc697bbc83d6c8a7b6b5b84642290b20cf09feb364cb7efe4bba02937e12cb197ace881e5a2425472b8a8c4eaad254a76c74dc9bfc2ab757ad0ab1980962be0dfb3be857f06fc9e124058bb1e82fb7cea41e23482e636acaaf41ab3bd768ba37670ac1c065f729f829f5a5a5475f35fa4b959c751a3bc4e5c14803cff36e9a25012f92605448404767565a0bfc26f97f910ae382d3aa9e34c64d5402618d2eb90bc4b4f21629a5af15b203ce4687ca14ee814a582704685022bb40e5d3a7715ab513de28e343dd82443fbcddc5fa8c6995ed5dbdb24de2ab2d796667ab86281e7191f8d71336d562d79b652f48b705b446acf81a2a4755bd73bbaa20fd03efd5304392d296e58c9e721f3b34f3ac6a84fecc200597bfcc683833e4ef757a4ddc87116746528975817fc321088f1a60292666e98616e4b333e7873c47cca56f44bfcc2b36e802aebfc419780b980b29b84cfd074dec867ae3a087ea7a58bd9b181ebbd5f919e882f9d1061e96f70d081b5fb2e75cf5c31f68607b44f8204eadb7673de17ae66d6f2b9acaf791aab87bbfc5e7899158d38fe279d34513b9264ea3c45a0e4bab4ca764c89bd31 COUNT = 64 -K = bacb07b89911b2bdbdccb96a9c1b40d5 -P = 83fc7ffe9c502d4850b1f10391eb48c409c3fd6db8b05c382a126a323dcf92225faabf92a5cadccc4f2495f4c672185a8e85ba1ff0df8ef17bb8fcf6534c7ba284df461916b87d04f398cf9aea23f4d8076ebe6a3429d4cc57aaedd187095847cfce2e7e78 -C = 0a59aa27c27bff9fc52703cf2320e57e6ee976ee05a00e129fc8876b8c2aecb728caa54cd8deffb877f5e398c492becae63f51dfff5287eec70e9fc9d35d6013a8ee7da183aba9f148c731482363c668400843cd9499af12b19d9e643bb84ab76f8c2b495b151c9908db76a2e2944a2b +K = ce283250b8f04a49ff576d4642070dcf +P = 65417769ffdac3c5e1f0e32a63be1c10b189e434ce8300102a2b8307cbb60f6b3b7a38ed8457324195910390f34f7fd98a4c3a120f0eb22ccec0d4bb76d220e649f993bf79b478a0225a4817eeafd2326ec7e7c373e53071fd7dea2ac61bd848ee2c07d7294ecd38ed9cbb4ca48e6724337ba861e597f4172c626cffec7514f6f7d211eff541c420f1273e69b368ca07a4ae9ccce42ef3bd66855b62d757154f32f2626d3e3d01c1bbd3ed15a0d7465c591bc304b53093d1131fd6760dcc5bae60eb334dd3913afd7e4d6e90105f2bb54eebc99a4f7ba22a05eb71b097c6b44b2abaf7ef0f29f058a7d366d60f3a45efd3ffef3dc8efa324a2d1ae941c9051e8b434ce2513ea535a0d6dfc8fe1fe099fc5486a154fcb8162978c319e4a58e99b31ddffcef0de384bbef0ad04e8c10832571682c72042042079c144389490cb49d6e2ad8ca60291dbb2f16b52c97bfcd97af439339a512f649e3cb9347b891652ae67d7a8f49db03fd431e4bf71b3ba4b59348e95955114b31fbe2377b78117794c9617fd2743dbf1bc91ade8ee1590d273617d9b246c3fedffde50af41cf56ae344248b5640486a492afc7633eac585ea39f4117a47c0302258b72def0a2ccfe334970f85c7adaa4b743702c08f0975ca07b43a20c57ed50cd96f52845b0389b0f96db7fdaf43d1f2d9db098c31d1fbe7eb9da1700c2540c8ef8a0b80078cbbd +C = bb11ab31ca52ada96da5c3fef0639852142abc087312102dd01b710e940447ca51c3b867c42035c514261378bf2c54580aa9c97c939c7510e364a67960d5f2165062a79fc6e91354094b823625967929ceab4bee28b1c673a53e40ab5f0610614588502b387028c3e2b2ade6b9b90275601b7272cf432da1082e2dd8659a0b0de4498e89bedfa77abee1f788c616068b7a1fe1fdfea2cb5f4fd4c9f3082366f18b2f43ee0e00e2d474e536a527c8f8010098134c0241b77349259a6aa1fc20cbab341ff7bc0fde85f1940eab2f48396a525b3503a0fa77a858641a73d43a91197e61e04b83f77ef73bd811e8551778571eb1b879c041d99e18f3efa71ccdc2486922bce21e8d91eae601bcf7d5d4e37b655d20fed8638b32554615f87942f9f68da447e40accf5090ea02a5021dc84478e2f2ce251d59c296318d2cc4771f02495ab95c13375e86290b2a501eebfc02d91e59c3a7913252cd7856ca6fdcfc327a0dfc5c74f61e56aff6a3c3807a773c6079e6d764117587ccce7cf807919729c3b77ef5523140b923f44a1e6ab4121a3d2d8234e081f0366bc80c85b5aad0e67acda64c42ac8a70459e472f39cb6d1ceb922c75079d809843c7e4db3cdcd9db5410a4c03fd26cedd65451d2b9f0dfbcc50bb7ffe3c0c1141e10b00c72209e0fb2c2a06bc9b5d9e354e1b9142b163c4555e9bd5000a3e48d78424af8adafacff1a9578dcc474824ee COUNT = 65 -K = b97f4ed7747ad3bc4f995e7777f10cfe -P = 8c0568195bba329b94b957e2bba4bd34da63c3ecd98daa87755af8f85721a9480d50fa6e0aa9ae0d3367271b747a83ea7f69a04735d7aa7592e253be37ea01c461b37f84732de2491fd0157df10756c0d8199dd89ad14e2fcecb1a853d76e42d984767d44f -C = 2996e20c82bba6c8b4b90886fb89a4ec28ddd1470c5743c688ef0cf0230607b101516f92454c1d7b35edc1e24e645e9fe75a98f3e6596620038728c2cce5e5ad3fe1ced8193163b66f037b5a9988b25968a775e8c9b78589ffe2e7a618c4643a3aa544d97c82033843fe072bd8522297 +K = 20ea7f993a9cb26a73df66448d94f3a4 +P = 9c83eb1efcfb8708cf542136707b831df36e7f5797afb40ab4b7b4da7d0f71bcac4bcd1f3777ff2d6dafd6560b7b4a038f4a2fde216c87399668c8eb220b4c5ea1406a259c363f95c214714b5d74e39ecf2f870e0fe9b8c242ec1673ccae6979f597512554ac57cbe10dea5922fcf85dc588f2c550200c86621884c9a23bc6e0b5ad0fe70ed9ba9eb38792920aca80de9314560d22904530e2026efb7b77694206ecedb36c9e07430e6d0972f14c0759998da347c43dbd24475a7049c18dafc3b1675b9bc882dd217d88323b1cf9ca6530d72c26c44053b547451c3be26ffbf7a33140e3bf1c1aedfc7f43fb5d95a068bf21d8c48801408600314c1bf9a19e74e18a160943fbb0f23b1b0bac66be623a9c406bdcb36b34d4a2e212ac0b5bc12528c008203d496d67481fbd92d8c4caf30c6d7b82f9ab88772b1740cf617eedbe525a6378a27df8a33a3b4315fd9331ca019b67d531a6573904f6e3219e1f969b78a23f841a81f337049a784ff3278bcd0cd3ff2650d4539d23a73ef063da26b34f5ac81e672d3a93a28fff132a6294c0890afd76378b5a4c2be30990787b482281b8fdf26883551e8a20b6935e02b21402bc5b47be649f7f2333012b3f208bd367aaa64d3a7cf219aeb0b2294cf93340e56f2900fd0b60870a2b8e1645f4d6170818af809238630a2402d77c601cd0f97432cfe68e423b18753fb02991fb4260 +C = 7b3402b6c39070eb3c0d2803034dd19ab552d20941ab2dd673bc34111af99428893dc150747e047bc6fb442826bfb240844b25fecf58f82c0ee7e77f3cb68dcdc50bebc0ca5946da12d3669e88232d411e38d539c156e8dc4984393c4f143e26df70576c7fa64ea042be2215a45535269f1481d94e76c49968e685aee8e04126a8f4a1580c52d2fb697eae1212a3e61e694bbe922e004fd5a1291e5cc14548dcbcd014b5990d86c84ec8e148680406ac3097ae072369bddfbb31235ff91609f2e662d3859dd343cc2e22a0cfd509b9f41c9216f3742824a5d4cf2ec4fc1dae32a7a85be9ec7f6799c9fa83acccb8b725428437eef9d655e44b89bc57f3ccf7ab220af2fef6a620edaee94f2d5783d41ab6489e2a1c53d16ff23b93e1eab9d04963be90aeb5431d5d6c3e2cdba3274661135dc9872e962ee770097ab58970582b1e90652138da3b592dd7efbb8fa8a6de01710e93c94e2c6f4c0fc8d031598a519c25a908566fe2d97857c92a654dac5803e5de64271f4387e693cad736008590d6ad2e365964f0b78d32dedb984cec39aa5160c6f8c31332dffe85c30ef2c809517d8e4edf2eb8ee7043252bcea8f1f985d6324f4c6858aedb0d3fdbaeabae57638e82f52375631cc75a103c0bb359429054b1b41725489a80138031ca7fd8cfaa0b6aad6b247dce0891b4e082e186f5a0e02cdb6f36bd07c07f6d8f9abca78559eec8d6c9d9e377 COUNT = 66 -K = 7f34b627ad05a258a1ad0410739f96a2 -P = c66a3edd3207d64158366d98769b3248a336273e882cd21daf1f46b73032d5f5d32c1069cc49cf0d71e740f7d36affecb2b9baeb33220a99790e7952909a34f164cf1fa75b4811cc27ec8b98943d1aed24f79291de25c597e84c9e40b332d0de130359ea96 -C = 51bef3beead561cf20a30b562ff06c61db9f5b7243c8c313b9d31b9f33e21f10935538786705b5649ddd0420fe40f0b2eb1946a453616a5793dd523a3c66f14d69a41a0b22d97f62596e8d6cac98c7c4208c1d4a3a77ed3c1d24c4ea1f307adbcff1f52380c3ee1dfa2081332f5df15c +K = 271b09c7af8ebf83b38bc13396b97f01 +P = 255cd7eea51f036c2dca47402e5a61c1a16d8999a17c2633454113b8873178fe23deeb9f278932690e275a5ff252bb4745af8a7ad9b3ea7436adcc531e5f330d8932c1f8fe0906f391c9f77ab3d693a356a0fc142a3bb2f93e4f56ccc638510afaa5e41a3d733ecada8866b765d5aa3241e2c973023d8cfb13d41430bdfa554e4dd207c54124f835ba3dfad552a95385e841ef0938b2291f62c310a5d8dfeca26982d8e25fe30a879be31cb98e1f59db4b42614e636359a55484c7c5fa56d3c9110e20ae4f698bad049990fe69b1f4e2e482dd96d6b31922aae846a944aadd28bc9e500f4562098f5809d3df9ec31a6276a36d7eb2610f836fb685da477d40ee20a0877c40c6fd215a46b232bcf6c605090691292614e3a6a400cd38e1bc85fc38708f2734602de5e32bee895f0a46044f50b7fd0549cd7b9199b2d1ab9a795e0ecc379ccd7863d0c124f7c240c1aa8efb7836d005272292f42461581685a2bfa7fc1314fc65888dcd26555bfae6d1f0880e9893ebbc8c478752ad9223f3b829e9e71175699d76e7fac6021fe691224742723fae7ea2ba21da0758d7474dd297302d27cc0c123d81ed80d2f6e789ebe0783d414e449f6268c8a92b23bd2c766a48d794e13b4f938a6cf22faf90039e8ec4f4440cc97d5f6813a6b6b63e08bb615ecb542209ce08e32a8b72ca0e1996a2d111962327a7fc3055499abdcc2b0791 +C = 0e052a5be8e3ddf4201cd82398e93db520c66a4704e5548ac29f110a59116eef436f9580e84e89a9d8a6b2e99771475341d2fb9c04b87549450d149c329ec8a5abd3c9a84c839f970aecebf9494e9d9118778c4f0bc7012c17ee79cc1b166971990abce8906cc65fb2cf4cf89996fde00616f3536d10b84ed2be01fea36ee3b51f3404b8e573eedd5d4d941a972789984a8633850e84d7f88ff586362b281a0ae06269f5bdbaf95f86f70c4e33386353ce6c416eaa1444b080537ccf01da68ef4520e23303ba94a7eb85cc6caa35ed83d21dc6c3f3ddf3f6f52956a5496382570933fce28e2d6546ead5ab273625e44aeb420b71b5d699a724ad7119031d511054921682fe39aad5fd833e1aea7568752e8ba21131d553fafa3151324c1e0657fa2c48da753a402eee01d3ea0f33a822c15affa77c199471f17723c165d9d6f301c10ec21a105b23e9ba27db814d6e271f29658271bd0d79a65836bdaf210e47116d5e8fd9a9db8741c6ba9ef89a3a41a904185d10c203f1f330bb8c1e6874cb70febce566633acce36478ac95b9dcaf081811925092a0dd3f95503a24ebc5a1d7104d16b5c6012a3ae81b7d0a03f907985884ed5ea067594bfe6a5976da6713523c268284a4153d80af4517b9fc762e515a80a8cdb99732370edc9b865b0f84cb50a84514e8e24d11609b159e623c56b3eba88e9a6fd1dfc6ce479fe6c190134ae9ec5d9cb52775 COUNT = 67 -K = 405b5552986bb42ce7a7c4db6eaceca9 -P = 40a6e72743e1e1ebf50aecba4c420b8eea5aa023880ab168f36bc739c25e2d1701ac8e4f418dae467f197b083932a9415ff930c44a36ae853baaba167ecbeab05f4dcd5ab6e62ba18934ecd24c070c2a537a41e044f2bafa673ef26e55788567e70933c9aa -C = ac0fccef585a3af6d66aa100fbd147436cc45f110be110e7d1ab51fcd98873d9841ec0de514bc5cae2c7b3f5beb4efc579c84b65761e8c5560f6d4428acecf495efb64b6000c9f4512ad90808cb864f024bbfb0a8c3e258b34da7d10a3313de063640108a1a9c74615cacaafa0697ac6 +K = 7bb1c9f2506a7dd36619e977a1cafb58 +P = 1650d529aa76aea0b1799e308ec4e62dd5645d3df282e4f668175636490b2992f04a9605411e6bba2ef2dcaaf0fefe145e7518c48848fdf6921260ccb490601eb56228c4760a95d6dd916ca18a0e3dee28ad0f91bf9d4c80f74e0d206f9af8476e280201bd59fc58f88f6ca202509416172b0a02ee375720a29beced2f88299cbfed13848b137de8a036aa86bba87cc3896f035a6353e071ad2954fc688f920e315ca436a5977604881c952f7ddaf0916e29dc729b1d2e26d8ba1eb3b442fbf671efc5703fc69bf980392cbe2c2e30491b67be5631bc971be2dbbf59cae688c7c510ee08981845d02028c7c6dcf7575309eb4c25390ed58d909fb122f4117b81d70cff004e3606215e7c52ab2bd3724d0e30958fc3380b37e0379e96f24b0670bd018dfd63f4d7771e7c060ff98a81b01fdd7ebf1a592a0ffc41839ef09bea09ac4988d65b66b835db8fd9208b9b638b7c192371699fbaef2ad6cc1ce9e331eb43d642c87afaf4ab72b332c58988edeecdfb074a57afe6417af50cbc2aa98cfc20dda913b3e3f4adcc99307ac5346886db8b57ce2875d975f2980ca8780efe4c1aaceb18674b895760d70ea6aaef3f86994ca0b137a286071b3c13c21575952d2b1d91fde9f5b14ee25ca7dbdb5bf26c1a57ed72e6443621e13cc37da0bfd8f578a88deb6ef8925a4e0a6584a879be68a4f1979f6aee0e3608b97fc90260f4c6 +C = e27e79175a614d67633b080dd5b48303c5a5c813a9ddde5c405b3491c11bc0bb2b529088d6c4eee74422a0f4b24bfe7382fd2f629038c078aa053f931e8b34f005d3b522ce2f9a529c20a774b7e900a5bfb9d2de89233275c72080bba397f688bf9828e71afc1edc81d2b7462fe3b9a25fe07dedcba1ef798e680a0f2a7867b7df11dd2d3f96e6d0486733caf35ffa4c3fcb7b3dea38646c523321d2270395c7ceacc5ab1fe9ff6654e4835d903df4812885e180c591a796bac657c58faa00524f3d46f8a8c208b00c71bd057f7785fc62faa347b4de231f228ab6c3e385d7866ca9804490276326a78b67eb03211d5f3af39a68f3ed659c5e77a228389e9cc1cc63e774e0a4d6c9ee45c1119ff1ee70d1212ee2d1f2c279b6f4f1fbb5aa1c2434783cb2100d01d97b00ca9f7bf296b3d35d6eb07907084ae2ba924f16794ac6510c0906ac93aab140d8114f5077983402f476114d462ae1442f29481ce20c0fd053135e88b86f2e19ff27e4a64b59efd5b6d7ea99883456e2a63e81ffe8d204dab47aae08d3bbd21b8c9637540b4022414a450c04eec11cecb28c2af10b68079667c544e85d772638d96045aff8c455b53d5ee96ffcc18fecfeb812a99ce1d0b62e1fc1ef969441428f9e0300dafdb101e20a9063b2479a91d9f7640cb24bb2bf5b3806be555421eef14f9de3e10aed6f52f24c96a6c68621d5cbe56313cc25f0c58a7e373352ac COUNT = 68 -K = c53684132e00abec42f4fbc2af7671b7 -P = 2cba4d5cbb05e33cd96da6bb4a86ebbc959a36f56c53656789b3970e2524c31481177ad810b5b9c5ed53acfb4f9fdb7fa3c238523d1d7de82c88eb9395baeae2ac0ebcf6c80833b2fcd6fb7a6b59384b6804c75c4101515c5a73e28fd7de6b515e70e07b9a -C = f55c814ffdd5c41590b436aa903cbddf8d87437b9a994bd3b1b1aed0dfd1a232609ca06a939549099628093250a04a5cff1d3353b658bcfb211ac5ceb99102b03e1a11ad8e3f3feea9b2aea6a4d3bc26efe7945393da722533050abeb31f9930ca45b0b159ea3fe01f2f2ef17a1e45ea +K = 3a40291d5b32a832a1b6b76530f1f585 +P = bf132cb011301492155a2b746c92a9978a214a5f3fc8b64f0da99ec963ad240141c862dd0199b5834050825d91f1550998199b3215c1ba00e569bd20807d78165561cfffbe0bc41125be39d7a4ac6e381779de5e2b8f3017a7e3c3ad5bc72d997b3c00221c36473805a5accee2aa702e0eca0597d81ceefc36162650c582979d076d16ec55ee32ab0734cbf85ad9e12e7e3293b42222f1c951015f514a92ac65de018ddabfffb74d9652a3af75595793d56ec440ad827d3aaa6631662280053061931a74fc6bdbdfb61ea689b4dac48932a9c53491bc0488de761019d597c89f5eb425c06af7ce7d05e61a1c5a618713b60d72005c778e8260c8223bd467b1e3da4104722bbca81977db47fbb7c5e646bf74b2a98a92357e903e1356819c49b8a49febb909cdbcf400641cb2d8634ba4e31690ed6effb24b4b6b2eeb95293a0420476a1c2eb84eba615d20d5d0b34eb4af6b8aa7a51a15af9c578be39baee35569a1c66f25d4aa5dabf8440b222b037bf3873f96c3104b2b720dc5f196236c8834799b9a9b210a6fc933c087ea71d5b65d484eaee7fc97a8566a407b6f10a25905bb9bd6d8bb793fdf56d094fbf8b45a31f58f8fe8619defb3f16ac5538a4d389a857042ca775b24205488ec985a05469a604c23208e6cdeafc9b60c83c9e937e85d84c1e25f7bfee04f5bb18e293ad28154901a825a0810795ddceff47bd7bd +C = 33f7dde15f32cf719db090a6c4fd9c47487a196fa5e844a3e419a17844dad7bcdacadd0edb736aaeb73deb0193d6d079a7a5887f8d69b2c5efd890aa5b79196b4c8cfe87fafae4d2e120ae97b187e421625e7883086087e3be0d16908aa53a41fa71e3bd252e2c78ac31253a5ed6d4099b45f0bee9c6c2abcc947e7b0530b56fa62b958d2fe2b9482a2ffbc8370b75b5f2de6557c13862ebc0e3f87f61fc3256f24bd0dc1479fe04814a1cb53711fef4d2da95bd6fc54f011d3954660365c18e48868079147e8725e73dad15e1e8328573d868406c7aa9036e6b34a93c0f6ea4f5582bcbf71e7c55dbe61aa0f20249f9a79664d053e8d46ab24be6a16784b182267f5fee0f4f8c7eafe6ae67b044e9eae4f50af3083aeca80af0619e2526f3e8b7388c1a27f223f64e0d137858477ba2f81e9e68981fbb024d46968f96f4acc39c1819a3a344e564a5571495c8d18d2b3ec7f8c6175fb7e1d72bbfb03069f2839a02c99ec8d178221bd5b88969f8d1dc672aa8707272ccd48c027845cdeab6f8615d8a208ede1025fa7962359e98020b8a403f24aa776ba19471e04388bedd301b28a278a8e31dc6a7afbd17c8208256603eecf713122c727d877256fb04c95dfdf28b69ab470f59b133e6cc34ef123738a7c8a3149dbf8b099c2c4f1d5451114a83ddc965c5a357cac2852916686d0a123e8c721e94ca828d39020a1e5c40924ac06eaa7e0f7b10 COUNT = 69 -K = a73cf872256e069dcdeb28c1535adcd4 -P = 3128e2752faa51b786701a1ec9f3055a3eba961d3ac3b40065836f95e6ff83da41fc3663b8c22a59ba9ac428da7cd57a4d467887f6eac3b5dba5f34384ccc534f641a8009c16a9e0168fadadc1fc35e48441b7316b4d6232b0898026914835bc35687183c3 -C = 96eef3552ac2400fe80ff5310e9c9033aed45a5033a3995e594d6db9976d367d762607ee7f3d2544b4548d27b0ccca4491888b244b034120c3cf71d65b6ac3eae55ee4dc49a63e5ae9ea965d114c09b78372c11681aea6dca99a8a22d04af7c8d133c68236b17848edf0f8705e2c314b +K = de7456741c9d6d9e5b850acf50dadc3b +P = 40053ed7e2b8cf0b2e93170c7ede08db79cae9942c2eed3cf2fa9af8ff943727046bff95b42b17fae7ed019b705703340a2c121472c0fd74b69c1ba246b7fe4ebc22e03deffb890198cd3ab359e94f956c19accc91fa2e4e4cd9a880067418101bfdbade2ab58d3b66d225c44494fa7951236dda8377632eb0d62aad1fc6df92094c144d785b9ba1bd6f892f334eee547f4065e3a6f6c19ba38f75e7a9967c9d6844d154795e6625fc2d44e1e152b09656c133b9d5e39099b77658c37056d64d4edbea160d5ea0579d10c48ca8e4f67fc0ac25aa07cbfee17455a4f3fa985d93a0237c0932c9e21109f0a23261dc39cbbc671a675015146b62a3a420b94da74d98642a1b89df3ebdee40a2a661e79b16fe6ba3eb5a9f2c2e6e7f2b47a4acc4c6bb86ff218b00ec6503f698174a459b1a15092adef08e68204e8191a463fb617aca780c2f160520dd60dc32d4389ee32f9322794017bde7041dce95bda4534f1c724f783eb1515797830b4d7ec536a03760b437c8ecfc2aff943b4edc45fde01fb3861ac8308f606816ebfef3144e2727ba05b38f469ae8ce0ac517f454a0f4e15fac6945a5c2433c30898d299971d0ab863effe1ba0215609e79f3fb94ecb50e08a6a33228ac028debd68228a8e0f1c8ffcc1b41439e1a4778b81670c28d166f555521e279de841cb61ba3fa67e4192fc5160b50e08d91901393f4a313679d61 +C = edf420cfede3aa727d27f177b3629893dd8e5f9551fc81247b669f23ebfa542035e2267c90d721192d511745e5c4c7e91cb05c844bb9f25fb1b04b0e4ecd14c0048e4e612e80ff6973c0595da7b664e46bd4a60ae640687f93fb768db6f0c23506208288b11f55584d4c750a1b402cd4e3eb6b387bd3b054b6251802bb36dc2826473e46b52b7fc91331ce5a2aea11d1e15f886195854b41a03fb51e4a889ea22658ccf9d56fed4ec581b2408aee55ac72d04dccd24e518b953ce1fb71f628fb8973955dc55cc18ec6bb9d9e9881386f7bf80dddea8c870c5b3f0527db1c70009ee7c77af2a8cb1552975b555f8649139cbd1dc93457d0c686c34190b64882ec237021cbd1818bb676949e170dc84e51607cf4b6e73b70c398a091d7435af1fd8f921f8f2756d7e0ccc095f3b6d39a199e6f699fca5db7fbb3756ba0ca4b9079a68ab4403e5e5187252779d7e621222c341fe4c275cd13f0e73e0d4f4c875d745c3ae607ebc07a409abd017f61019cf499bc09fa1222fa0b06b6944f943742e2dd5ca22784df8b6d5cfb1ac8c8b394cc2ab08a8c5a9d262a693ee1868bc09595743091085ef4e45aa301b10a72ee34cfb97825add9c3c7eb3c12a223c7ff20c37128dce286fe7d99151f204402cbeaf7f5a7f3410aa31221eb1c9a9272106508a902187f995f04a9f68f05f85c67834a73b6f36344eae0c15e2850ccdb7f3395e040892a200bcd52 COUNT = 70 -K = c2b98b00b679f54ba945df26372ea3c9 -P = 623088b0e6b981e61965d76adf303f22d3e8264ade24c8fc946c68ff45007ed64b818e0c300b11a5b44f69a4fb7daf05d5db7d449b500c116eb7706a6d25e5c20033e8ce33416b0df957fcfaad2a2b520b93b4c43d269d3f4641d2042c8b4c338c48b213b3 -C = 191b0c22c86c1e06974e88d2ba8ea75e4c7411bf4ceeca3ae7c1ef036651afe67a8e63414ff8ef1f62a36ea2cd397411045438bc3e8e6bc1948f7085312cf53807e5baa4c95ca23cc74375fecb31e69a13a1a92acdbc31ffa602d820629ae48444b9310aa1b10cce6a66752db1a470af +K = 32a0ff090589f277762aa7b5d9b5b865 +P = 35eaf67d7b16e2cd08ddee2a5e1154ab9c55ad9e5128e181dd215ab0da280a4f751e88dcee1b4471894c53ad05d15d8a51cd5adb088e62e34dc9e0d95ac21c450f3aabbf281dfc8fc9c93056f4e5f12bb1372f691e2bfc88405b2cdbee9952603ac8c4efe6549d8fc697e5bc0f2d2464540adc33b74e37705379354be770d2108c74f9fd7059e90c271e4d34f51f72cf761f54d5b1e3b0360cfbbfd96a4b5cef6e65a26f40e24fcfe43d55c4e0c29065e4f51a85b08e0494b58cf5e370f6006f842b5b7bd10454470bb05b769c812b848a433bcd1541600753e468bbec9088a4c9618a123f94bdb8c6830de6d5c6eb86259f48b351f8149d4e305c8245c155c438ff1adce064da39ba765b74195d3b3067cc707c01f67fbc72133d96b2dbf14504b67f3f8c788d842916e57a9bc27767b9a2c8f59900a5468b75178efd864b67e434c066987bcabedc493a2450e9cbab5cacf5b3da1db7278a57ba1379f337a00eca30edb164b40703b87d4e495fa73d5089840817ab392eb4eada39e86371d3e83038526522f0f384a02fc637cb976c4a21cb436899eb59ba6cbf08a09f9412b72d3916fcb6b462ddd4c2bcd737a025a022e45021f3b77cf2e1786d305674d1e4df06b11d529a659b969d200ab43a00c4a96c54d8a7f1127cd56775d5ccf39404b5e3b24972ee74a15fc9acb001c30452a03601c79903ef2427114313e69281 +C = 2ca4b932a97671face0067a6ab1bde70c2dc6aeed9eda9419125b1d9315a9d7c4bb9b7ff89950f45677bd7160977c77c23de3e4e1799c988b280170c77b1950859a62bb7c0edc9460c1e94f5419b1dcbbe4bf154f5522cbc6000f5353cc4eee71ac6bbf4d506ba04bf565d09fbb4d51e8744522a5f927f5a99d64d4a067e7f653e181bc9ab053c1261f00767f6e9091fa8ecbcbbed8043b0fe236267853fb1925a4b0dc801e1f2b77d2d0453401de2a9e6eed42a4ff99ec01d1837e24db24363b17a1ef8a9b19ac61a28dc2c2824ed46581915ef0728cc720b3a5299f143b02b955bf7b3611c42588b89ca9d09cbdfc9092d5870f3ccc8db3e30d6cc5a4e3b04a57e1bc9897e8ef41de9260363a6719fa8cad266d270ec14bf09752afe9618a880e706e1d9a864adba391f520e47233517ab834e90d4f1bbcc8d81b143c4139b3ad9207e8e12184078bcd217fb7bf471048ca41fc4a18ffd1309bdc5ed1e4c3cc240c2099973d2cdb08ef9f9f5e2ca4bbabb9c7e3e5dbb33b377ab0afc53158a76c83a708e7729a0304b6be84c3ef561aeb815c407e81727708ffc5184db70a440d861a2d6b34bb39225b6fdd8f4f4f768dc2ab3ded545bc8e34a6752b0ae367dade97a328efb16f633eeb34508349f9552130c1108bd749a1869eba78144ce6fbea04f886514e34ac4756d05f0954676c59e82aa6e7db847e6ba21812734fcdcbdcfa7b1b3acaf8 COUNT = 71 -K = 900bf867910c497870523589d257b233 -P = 13a9351f7eaa2baf6f9a3622fc87cc4937cdb69b0ba0cc8a49e2acec6de3e3421540146a6856eddbf883ca9ceb30a146ea44f07c197f1cdede1570f77b6cc0b6ce517b5bb4f8bcd80f2111f0d6bd22601ff1e4c2d22c7381ec84316e5f151f2cf807816289 -C = e6c06e7215fedfd99531ee962340592409ffe00d88e19185feaad224bc074d9c3713ef8129641f906af39c6fd787907cb9ddca8da32aa355dba9843567a3f83407f078b93612480e381d33a9e5c15d4d519c59e874c641445fe795bc874c8d6247d73ff166bf4fbb246e3e0a1b12b476 +K = 8f86ea3fa69a3f6a37f608823dd3781a +P = 04d5bb7feafdf778cb15c613c3e8ef0ef34f4a0bdfe2539102a6292883561ff29086e0ad7fa471e0c3a319c65ad6dfc8ffaa2881581fbabe4845119d10cccbbe96fd51a9aab0bc16dd5f2529c0826e21679b5fe338036a51ccf2c8fc5077de6249c7ea387aa022e7ab2a0ed7cac224d2595aca5b78719c0d3aba09c77959f4b8f34a323e0faaeae64f489ba68b56df2dea0730a64420d82a3e0dd19fb0b942f83adfbaba1011364a96689e5671516a8283713852895a8398a62af6e22f2681c504968b524a582b57c4dd968614a6c3c7a62c853f05ba600dca1c18200faccbff8639a6c862deac173e155cb64919513775ad737cda3ac51b758ba6514a40be5773a5ab3bd375b98bfd63767b1570d724d745fbb0a8d82ae1ce604c6682ca3b0f95d3518d1351a26ace150b5fba8b31b5fd7693b854e7ee77ec958e19f367d647c95db4a90592b5cb0bbdbaceab7b9419484908563e720daea6e73442d922fab6d24e00c763fc17afcc2fbb35aa6478d9feef69b4efe442975e0a89091b76796f4ee625f0c3c9ff5f0864a829c18446fb24d3fa911a700531f87bcba40af23b7d6af462c5e53f2174ea6260f7f1aaac976aa7f4a98b0a8de5c630d07adcde6866e52013a7cf4f0dda2fc8030ac4e0af17e70af9e3e7059a12c060741f37775c71017395328ce0caf4fe0b577bf93d25fe5c68d4c710d17c3531b16578f590c840 +C = 00aa8596a3d3e16789b2e167b8b16bc3844c653b970dbdffe9dad32abe0e2cd7008abe6abfe3ce8c135a90c220c56a7f3730d0e679786f2e7f9cdc9491ef4ddaa4f3d74cf008b7b9e16e65dbb7e2bff2c8c876c98bce097206e2ad93e11f811f2b58b61d849a8fec08f149736e4f0c3e4392724fe8a042ec607e0b954e6498c7114b6a3ca42777287d2c05319726f0d8fba7244ac17ffaf61454b19820bf3f07c32ebff87b79e869694acd5744ad550afeaa0c6997d58f87921482135b6b85c755099e7c15ce41bfd9365e694f648a801e1b78936c29608263d57accf6ab20b932bc60dd2c31375daf40f69ba1890ea2ffa1b3008e7827bf2c8ae2dee90511f344f39dc14a818c965d9abd9955549e1bbfc1c9c412ff8e7546b5955523b4a6502eeaa55b13e8bad00c550d9b578153e1ee8c06fa83863d11c1f40ee2c54135005f5d6ec2621db3a5f09abb13ea7b10a73fe6d48cde2ac6c37ae20861d9f84ae875ff1e7ea040263aa6a073eec8ea6eef8cee2705230484336acbd09f1e102c29d5d948d3a7089085490652ada60ff237f602fdfd3192b27256b82856b0e182d14fd380823898cf9572ed7283b852df652e5e56360ee5041fc6d5c09e3546a729f478ad5bfb75fd4a34fa55caeb5c4037310c962183a6c2057bdd320f057277b5938b132b723593658cd8e1f5fa0a8452a98d1b2e6496be0abe9d0e69d8fc6dcb831abc38a0179503 COUNT = 72 -K = 5b14ee6f9d0c7bb177394b9839efdee2 -P = 819ee8f30aab089c0e3f4be04f5668e47daa240558a3bed540a9b8726477e85f67e088d66a78c76e86bd7a932391eae96443d407e30a740670f5a8f7e31e34b57fd9738f8a8ecbbc543fa5918c7e71b1243ed71847430de1ba59247ce028f95d516aabb308 -C = 312ecc476bfefff741b2e4818e0b94492bfa1c75c11a52bf4f8659fac41c4dabdf0b611a39fec711ab6f6a79197d744f529f83be451b577b713437324248e67959fb26bf0768c7a767c430a0c8d7023550b8a6d16ffcd3f28aff5703d28701b433043df6d16452036b899f8c9d5211ec +K = f197d3ab83fd742599292bc62117ba3c +P = 5bc43c06c94158a32b6c215acd2ebdeee5f1b5e55d5dcd019fc4d2be055b575d075fa509aaba01a9a3df15436222f155452c734430e3373950a345c630ccfbb5ede209954cfe7f3d0f61015187e088972f1659e255d5b86dc9471efed6e1da3469657d2bd443f6bfc3cb222ebcd52cddc86dc566ba23e28ef43d295ca104fde8e78093b6e775b4d84955d76bb1073e9e19a3d357dac7a733560652a0f11eccfcbf7be2dca86768a35ddc330088a73531ccb296afb5eed40e7e03c310446843d20a3516a1dd43cd99f6cb06bbf6d9c026e27c522258a5bd272b23833a0bbf092609ca6b3b3da712cf41583db04878ede8db7bb91cfe3f10a6d1c01fdf12013224c9da656c46cca6e846825d397b4700a3f385712d8987b0cfbd55d1e1894bb42fedb6f7f985c909dd53cfbfd64b998890ae3e973227aa942526ed4efe3937bb5bca516ca42f15f2266bfcbe6ce44e615adfcedc48697ebf457743a39c90649b1dc38890ca7969dab00f36b3798ca371b5f7cf5c362a5c81f88482d2445e264505874bd42a392e3c7f165332a58678263ea0205fa31141c777f9185af3ae0230c9e9902804730f79aa9599fa98e7df5091aadc3aa056b48909f094db5befad1f73157c9aa22192afef90962b425a7918deb41777e179cc9d787d6e67a77df85b5209c12914beb06b358cdd9c24108e173fd2b5c75e22b6b7409aa87c0388afe559 +C = 7aeda382d0953a296f3866502e37abad7a347321d5c86c83a0696aa818155d1bd69472c30bac5fb494750a31ca3d2c24952f3c0ef874e8b3a546f505a27d156c06cb233751d63ab3a2f0e258031ab3fa6459d285adde65c9b6045b3015bff3c6e6221952b01d5d2f0a306e8417a045fcce91a3abdb7b66a4ef1c66c7df3b39becd7f89a961611ea4c8850648e10438bd8fff054925599e13195c667351fc7cf180a78891811e7f060922c5d92a436128ce4008d6fbb2fb628000cc8ba9cbab2383a8a7bf85fcef683ed2f1a94d339ae7a420244100e7a10b53bd5afa5b4166fd4893d3c278eb57eb1df6b8ba73c100e6f193b18b6414260d123892d0442c043a47b952ed05b5b4b70edd41d9778fbda3a39af1ab431dd509b4c54731fa049ed99743310ee2f36c4cf3666a109b146836b62680f4f279efe88c9e42cf4352147e28b67feee3e76dbecd539642fded0af31b4004af738fff07360c704f30bce6a0a85a05367dbea5f36b8dcdec24c1d1545b3194d8fb64f91ff8cb87bceec2e00fe0d85ddef801522d047174afaa429c7a43f94a45a6ce255a650f0981454013c91f4b33affb8faa48ef7f2da95d917779639741de57cd2f0345174449f951882cc8559504bf5aa178652e9d7a87a7af0658f17b213f05f895f3ed9acfe7d8c74b2a34c7521e127bfe8b5574b52add0bededb32a399934e6041cffb2b82235277e7f239b7f2f18a6f5 COUNT = 73 -K = 310a0ded9c8ee20945ca1e461a7bc3f8 -P = d33f59bcccba0c7fd66f44fa0c14bbc74d3f6f4f68cdf230a06325c3ca7f04043d438ae94a306db55d5707358daa2893ef738aae4537f39632b050b610fd7b16e1bae1d075d4236c8d2215e72ad7afe9b33202732714c548454f44f305e3d1bf1c88872163 -C = f2d4845c7b662ce1a95d7c4d6921df08f0971a11ff67d8963a85c66e710b2847ebe3b4826e287997bb291650eb8df732e0dd755c841937f417aec57b115a0808faa686c8ce2942be3ec18f3e344ab234e0e79d14a6d34e9e0a81d88cf88535dc653c12105e83ddab80f0a3974fd2447a +K = 5fe4b39c9574ae02e7fd4596fcdab738 +P = d2c280636b8435a74950e4fcc96998f97a344123db3c8d924c451a6321c133a4ccde169137ba7f152ab659c675af374e8b44c62ee614edc96eee58638762c2b7ee6279acb1a63efcf2137d07e871fe03e4e5cae081a0de5997e115be7b2f780a7f8b16191f96b7a64917277f60e4cd00a04d0fe58c79107e1fa702813f097f0340c248842c1699009d024dd4f63b38e28d1d8540032765781df976b089dab1889f8a13fe6292555082337602c5060dd997c51ada69747625e2d61a32c85c0e2af09a36b7f5958de78eefdfa2bfaeae6f1fb3377e71aaf40341927e4c0556994708609da85404b44962ac4a1d6fb814c421f4a41cb4a8600cbd7ed318396c4099961e8e69d8c9c0a6d2d170d535dc7e2f8c0c26e996bb6234d3d5465a06904753ffabdbb124385c2e0d629c4c547dc8907571373c95bed516e5f94d48d75a1261ff7f28ffe56834bc7bc7c6403bae19bb7154b29f25a00f4e4bbe6e658a19879004f819f49cb716fdcda026d03bd560695245d8fcc2dfcd76acc24d7bf9b652d3c3a739218633ac4f8d80a35e91fbc7f246dd03eeb51e2d04359378c25239b033b9cad590c42747b4b749400a00dc001ba698af6560bdc9009c29e46cbce69b1a601fb57c629713b027d9f280db9db7f571521714ea9bcdb3a78d3e1eb881a45b1458df22229cc8a33466869fd835d78ce7377601b6cffcdbcf5dc8fc84846f2f +C = 83a7ae848a00fe03a248de76656a89810ad00031ceeae83255df0086dde9b9b29ebf5f1916703b9bb07a9ab73ded3224c6b2939c1dfe380dc527c24e74b87ce4e1f29fff045870d4c5b30d102b0adce567aaea46db5ddec4fe4c08c363262a682a53fe377c71a5849aa5a91ca5807db853c01430b1a4cc236c628bc4029e5a988e2b6e37e43a174c0b6a12dc5a2fe682d63752dcde9de04522df44a087a19f80373a63e066ba2051f43f272fb782bbf7939a39fc422bb19beb9b2e5d5290d42ece558b81b296d35bc01200b96c743122bfc74ce9f4a990593467e7158e4816bc74559d641caa7318f801a3dfc34825a66bdd27634fac3635d839c06acfa2d4d14fef4bceb117ef5076d2fe68b138b580ff909e1247bfefc80f3b694afd36baceecf064ac547f76fe0e4ed9b7d48726761d431ab77aa28d787a1273b580717a763a957fccb235f6e6bfdd592c787ab3017af7880871b6522b349b94aaf5d87079f5b479ac9f606f7ad9479e3ef817bdf91b8905851b26f6641ae2dc0af2f4bd085af34e2610bea9d2c43a43c14f74bcaa52baa189d46aaed8b1a170ea941d3f584751ebd7cba8903cd87087603d1e0be8112caea4cfc2d0afb473d58142f1be4ec4efbed7a275f519f65812c9b25ddc9d61f528be2768c62bdbca311cc20e54df50fcca5f5b58459743709c2933f8bb1c4b6e954ea1156740832bedc833740201f65c57ffe29667b0 COUNT = 74 -K = 2e5119b43845d6e51a242dacc3356400 -P = 208e2069920e0908012f600112093da39e5217fe880230876e0046019415315946e78dceac6f609f0b35ee64c8f87b6fa73a6fd5386af4cea8967ddf49d7238bc742327f9f34eb905ffd49bced89b2c8aa1027e819b023caa056f71c53be38d3ead148d34c -C = 8415ac02edfc3d71c65b5da6b466c96a2c1871ace82661bce7713a2cad0534b60751bcbf665ffade74ff7408eb3e47426b1fa88a8104425c624c1c2bebe5aeee4eaceeeed4d1b8e4926dc1cffdf46c207e42e5537fa5ef27ddcd3b3c29b3780bacb517c6d1e2124b5dcc02265c965c29 +K = c5afb5ab1080a4e951a0badbd0a7a9d8 +P = 98fcc88dbd89e78e55df6a85f4a4f15832cc63f78254b2cf3062ec7f589174aaf51916765b9f85fd63d5ce25b932d80c77a2acef0bd374025829c4ca32b0368b0bc6c93cf4d81b64416880a80a47ce432a8fa11830cf6535d7a0c4c9802e6f27bde1f84e6848647b0d7acaea63f79c4b9a8d4a384c5110bf44193d9ddb45d7b894b94ec2b70851c0553a7de9ff66b4f418c83d6e72ffd07a4dfd8932e18248dacc5de36b25b567082c085361ec4e0a21beca77ce056fea2fd3eed10dbba2caaa1fb32f202ff5e7ec358f81df08e132aff965262de18a8d6e3948a9231f1b56243eac62898709a0b74edb3e21af074587cdee60d82e776160978c94743995ebf41c653eb16f6c82422334fd9f6e2b4744d00e1fb570b1819eee6c2654a997b88bed43db0449bdd2fcc1bde34a7880ee0778b5fe3dfb9b0d1801181be19e287530bbdd716efec2e268e0349aeb1303c7d0f07ea1dffc9a686c051b0333bcf23c451dfffff78e04c3aabf92c3aaf857106699e9538489eeb55e3c0dd3a1e79a49ab68938c6ce5916bb313797ada814f60476834b172458d0b39182780a51b523343be8408d8d3cc7579699b397f7a9c7d4ecafb14682825294e2f0246b9fe2141866dbe94b6a0c47b22757c94f0330a3aab8fc4f6fcf767893beb44f6ca87112e61f3831473e168cc4f68d16f88282a820c3f3a51e32c7840766ac7c6b2703574f1 +C = 16238ed5af8b1f7ddcd1d07caae03df9adc426873530eec18c73208393f766c49859b3f835fa44d5ddecbab2647ac00e82f04349d2230e7fbfbba0d7265f9da9cbc4037a15ae639f286fd24c4bd1b65b246753028ac1f3bd60aafe541056e06b9a3005b632645cdbd2e89bc90cac73e3f900c9faccdfe202b811844e78ff7d6a69b778fb0fa7a89ee47471dc5104d899b70c76134bbda9ea8a65a766f321e8af7cd86832d3f7ce006cd9fe145f0988a6281231a8cc1401bb97f90a8b977856bd6eab08f3b2eb20686caefcb4af00c0b1e43f96065e79b05a691c27b514406156b8657db90b60d56297600194a0ba0878ed05fdbdb07f8da224e5f14b7cdfe035ee279ef0a0e9dbb66d1e80ab3dec151ec476ed72ec3785b272e3a06c5d4f23ad94fee54338dcc29202704c68b5593ea82c543287d2b53a57392d32d07b481f5f399f1c3cb052cffdc2583ffe4f6cc7349a8cc56c6d7a1a31feaec55af210644baf4af2c95d0cc68bf6720467eb1ad0b1485be1a55df469204c105b47ff3f21f742e365764c7891c521b76d3424dc814c2aeaf41cdd4a5d910a821a48d9ee0824a51ae669809d566adad1e3b8a7f2196c3de8da2352f144cf64151603f8cb74c9e76a6d30380f3cdcc1aa25a4c494089d554b102fd9d16a55e97d497c13bf3f3fe2fc97a796b0fdc8e2e57ce2229f3ade56e0b989206e17b536b22d99efb79845be0536ad552afae0 COUNT = 75 -K = 4c073e8a21e0272d8798254f16f1c39c -P = 1a607e14286e1289bc5f5fd985741c1918a9d2156c9edb59884aa65b1458b13ce38fe8d21b1f77869350ac377dba3baecd404b09dbefe8aa2eee78aecef6efa3fa71da0c52cdc0cb752584f8989848585e66be26b38389b345ab2e3b34e3b244a042fb15bd -C = f9dac04e4e7464d67c1e1935573e7943e9edfd464a90523f237a1fa68f25f18c956d86467fedb9c146d0eb9eb690e12b42194bca3a92dabbe5cc6f9f678a9237e755869b6ba348c936a7da252f820bcdbb359bc938bc4f9810def3c0f73b4b4cfd74af569fe3b14adcca0525718cf2a4 +K = c0139d24b781df08ff50ca295fcd3cce +P = 427d99cfe1a162ba2d94f9549cb3c71a7ae4f340cf38f48205ea5c22e1b0ae638dd604f101dc492dbfb695e1138d31379ba0c516fbeff47a86ffedcac2c9e67e181f15ae3e4bd1aaf87d6f79167397161a9d65acf4be48e1e8520df3eaeaf6ff69e58ef43cff3eaa4698674b4b7046985fc2a4c0025e867ee6e4a611523aa98d290115867f6a9d8324c67202beac60b57c68c4964468998c1df7b34578d3c0b94592d01da4585ff0c3c82d7ed4e2ecc5e1225856290174751bf73175e21044f7a57b9944526e32f9e24a0e457d6eb9a55402070fef05cb8a2b67e9a08b007e182f56a117b41f34bdf0f99d84269a6a92858404abe7af676d4c5d3c02e628b374e6fb681c57257422fb11b8430dfc669ad698ba0480c60315f7c2d359d5677145404649f7d34e24fcec129730e33ad0ed876e1244535f512077c4b979f598ff03e558bbe17b2c3ea05902a5f6080a67afc50ba67c3122d5fb01f129b18260ab6e6093173cc47dc1d65b40c47d8063b01e2278ec5c0ae6802a4284a132cab0c88db033b518f922185d095d52d2e06c48b383319568b32a2f75859d6ea08ac690f4fffc76e3b5f5ab3c0d19ec8a7184d9d5be1fa16d9e3d79f72e6bd82cc4af0b4e1c85e97ac4f04bbb0e6cde8741eba6d3a899003a7848c8551914aa68064eaf6015bf88a5c555346d6dcbd0565211cc01468446926198063dfa35fbe101fcf549 +C = dd848a5f98e286bc801a00f91c8592a3801247575fc7e98d4df1481c5634d864de1e9e44ef584dfe3f96004b7edb720569f192b3862da836ab8f528d28f8e7324fd2e574426378354685a10877c53ef9de863213fe7c81092ea27aab6352513a6906cfae963fa81bf82f6e798d6aab7e9328269208a4c5dc6d3cd429a1cbcfccff1e84f05a666050645e7e80681c23e828eaad6e6758d7cc5a406ef1ed33b1f343ae130fae63d6d0b67379c0f4fa79f5764b912c4fd40c9ab13dffb255e7d5dd6ff1b0a38ace207018dcb6f4cf9b01634fff47716dd9eb9e9e5e8caea0df357ffc3269ab2284dd18a1730baac2f8dddd62ecc2900b83440955d9c3beea2664d3ff0183394dff835255242ca3f95664200a1b04c2b98a965a0cccf26332f32716322fb0adb3907f96714ce661404ed5444e709bceb271cef5fccab940f6705fdb67197acac71b42618f01e1ad4d2cb4f37ae2f07346a2497785763da9fb3ad000c29751e96dbe185e1eacd3d5ca1a956c2fe34b42c2dd679ca2e992076c64270a19d1c49fd0baec2918c822acf85dc0fe329b73f1b618a853c5f555b6c942c7e1e88cbae7a18f373bb249448448d2a3ccd357ae68c8aec79c40fee131f5d5b88ddd81df478413f7c8db6a9fcb67050136e8272a814c9f4b72ed07a8a4cbc5afae6ff528e551e9d20f782830249fb034645542aa378e134cee227ffba90d95e6d09595d4da5c9083d2 COUNT = 76 -K = c9266e1e765931142b23057b8ceff2cc -P = 0dac865b89f06d1eb1626e4ca0b1a84ced545b617bb074b0b0f4cce5d0b134ecda00486a0978d50a8ebf01f98e95278f1e84ee3ce202440484d8200ab1cc5b02706659d6e5417f9ac19282fea2ae9715ab34eacf0efc58b8015e64513f0ba34b4fbdcc1b26 -C = 196c5a2c9d6e2fba21f4ff2fb719b04300116eac27d43b7064d6a3ee4714e846739558141ca80afe2f62508259f798ac23bd281b31bedfe0e17b8c0579923c1fd4628d1ac197ab0103f70440453b008e1b5422bcd8e5e035f72f20805d8df8068a38c20337e3268d1ab5b206ff6f9fd0 +K = 121cf545b74cf7d517ab110c4638634b +P = c338b76ae44851827926017e1aeb7c1f0064a2e474a3d15502bf613aa6561ae84cae9641046e6be2f5f97084ca2542e223ba5c952779174fcbfdcbae042e9ed4e75f8b83162fd3b7f59447d72721c6bf41f0effb172eb625bf535b5d6a1ce15db3c8eaed4fb71f715e603bac86510968f519ceeb6d0d34aed23d29c57104a9ec4480ed8d496d97023cbfdfac30a73e8a57a7925cbb20a060ba1c92093f24f33a5a2fdab13399f3ecd32b4b390ade8c8bf3f15956d6861dff10dc1e88cad15e17c1ad23f1dd8e130de7e5d44be138dd58044ab96648bea11ecc5759d8f0126d9534472e44371af000f6a94533b5acb5a31ce1a50bc0b8ab7765895b68c7794d268e1395b3e1e5faaacd6439aff0ecd05b6d23c35dd252c0ff5bd51c5d8038db3e85b3ad72f84bbc02cc7e31bda885b860f4b8a930acc7c6ed9d389a02150613c63bf114e8335f67b6b7cf353342c9245cb230928daea23f7e5d90e30e77f5e40dd028c0bef4f31a260b5232a4d957f5e178c64b7105a70cc9d778efe6073249596ba25688754e60c45e6a0de316bdd6777b9198c872753a4a46cac3e0739fc37a85e91520d4c58232ddf8c9a387003b2475926b013c4250df96d3c68e83e29452bd7de5291ad1aacfce4a16793c53f01e8d12a330e707a0e2b1029436f0cdd1dccf8973399878e99595f13d5101ebe118e285d4ea73abd4c6a305408d674922e4 +C = 281ee4471edac3ddfaa9ef9fc8cdac58e2773e2c7deb25824d2f349a2acfb11d711a2a6931cc6f9cb77c299273a757a3e5d292fe28c06af3dbd67bb5c967adcdb38c9a20248572c0643233e570b11b0cc22206507f61fd182e50eae3c85e9c22b9e8618040c3c7e212060b9a4dfdb9a588412d4b374693be0428d6a5124b0d6995ac2193153d7c82d9ea2e9f73f63df6ac92e6efbf67c1c84393a5d6c5c1f4affc1018ab53bd5496240f8a3586fbc0dddca979799ebac4c896ba9058c9e6df07eddd45c6afcf08b2194e997dc5b41a50e271fb7766a9996ce96a468573e6654f17e871e68398844118da5ae012ba7c0d71e71bede8c615489ee9f790efaf42d4d9635d863ae21ecf0aa2f3825dc5c1faea54386f14f078e1e35fb49d860219f4f45261e65f38e56e3a18fb2832a7080533f41b8b6b8610ae68d4ed87fd6782e39a87771f483b85e830015034b1f87b3a51b67a0e114e625c71f90893d5334467514cc87e1673c97df9e36b7d48658660c23e07248801151803ed79e0db69550395b63f7b748d41ff61d3b365778173f9bcaf2ba375b364ef89679a1a0175ea5b1c2e9def443a9782a8a703d0bcf0a10f19873b98365d71f48b3b19158255d540b1216738483f3607522bd2f53bdfb127ddea783e6c426814812f22b313f2fda9636887da1d7b6f9b9d932f3d20506fb6dc214bce65bde876c3d65d3b0ddd192afe54c5029f6e8078 COUNT = 77 -K = d10fbe38f4dd7d5ab78af60e48cabfb7 -P = 104bedb90cd07e83f8cd5151a8aa0e946411fda132fb306799620fa8be66d0cdddcbda23603f1b18ff80f9667af3c61a397e4bd3b97cabb7352627b18d609ef31688c33a69496315b7b484ed30f58f7da99865600ad0c386198c59c6974101aa069936cfd0 -C = 65135001ba0ad4bb1772148d53f6d5783ec1c7d12e6ba0f10a9a47acf0caf1c012430ef916d7f5139121cfe4df1f322fda9061baff75a0c2f2b828e5f293e12f2734a424ee9305211df047459905ac5aea9a046b6c585f1afd2b9e3c7c241d5ad8d37c1cf917aa9b15f3878c98ce1601 +K = d32d26fa479bb78e9c16864f715dfddb +P = cdc7f2cf1d3d10202c060438b79f2e956bde6b3be6d75da96016b5f766f2cb00abc25b8d570556f9e9a3fc143be7a766aa9f3870e97bfbeb7d8fe51d6b999a5acc97eb77e0ca1c3d6026d15a89580292d28e13fe9e7890bc251c03d50818019e0cb18c38f384e2750e24741b3755a87aaa2ffd216ad9e668c96680da72baf77333018d4e00584801cfeed3d0dadde403739f9a854c07f193111fc839c16c2767886c10f6ea5bbfbe3762a9ea81d2acc1963c210dc801534e12db0ce8dda2c80378dbc2692d5b92d3901d95b1947e73399cc8d33c2bda5b639828f4633110024d280e39dc96601f2a317ae18a0199390097a010d4c7ad276a38620e9c89a524301864de075cea9ad68837f2c3e4cc62631edc314e6cc5c4c0ae8b7d06585583b28204c548bdd9130470c04a5b32c1119c2e157f0444d90d78be56e9528f6509e25a4c70f3530285e27bda079ef95928f923d1320b6d6df410f58529d1667c6a5bfa56338876b9415613978490c2bc92e6dd2aa0375a413378c54ff5f1df2fd314813cdd477a23baa1268d6a4b3fad473e94df088696c508adfb4fed9ff1eeff061cd433abfeed859f2343f8a43900d4cba2de9bb5ffd0617b77ff3c95975825f822542aa5cbcee8246ee01fcfd2e87c568d76414c3a5694e312bdb012909df103e1e4dae15bc8ed64495c66b3a308f3071f1343604913e9546fdb42cb125a36d5 +C = 754c5a958983430627a524f710e3e4ddf39a61fd53e2796d68b113cba34c442a221d5370a0c9b837e29e235a8b90aa1aec0e6b457b8a5440663b55a169b8a2281aa2c66602c42f2d0ce6c48e42e73f1e0adaeb661770063cfe4733cbf51c6d86b8bced378903975ffbd7029a00af0c75e18599bb48ec0d7201c2f0a20eb1fda88ee41ca5c24a226b8a8cc2204269f8ac684893b7fee8c8865400b30e7139e9aced1ae19890963c09bb614caf65a7b960645d384383d1d00f2fef53c5846633efef8903ff140a39adc3ee9d95ca7a5e40231d4d794aba19aa80fa8ba1e96a73556e99ff0cd1cdbe3cffe110c7807b6104fd0905ca8a94959eea9308717962b657304323dbd7d24491ccd797916d9ba6e945895cb2d0afb0c61413891c0b7dd8f46608247ebaec19148d9447357b8541f83320570cc9418fcbc3a7a91471ed3780e82f1492f0d86b3b284fd30a9b9ef5a583cbf888d5d0141cd21467eaa6c7a19a000f4525ea9eac016c85c02f0c165ab7fa3151e1fa467b858ced9329260e1fbace6fbf2efcb3b3a4b1da40f8408e5ff921da30576720d6907a55ff6409a0fd3921c004fca51336da3dd4a9d760640a6f32079afdf7b7ebd460ed034173f9dfc78e1bfb3a9ede0d67fdef3b1d5e302d4e7f922602f34170aed3371e390dea7ace07b571969c607c6c6faf90896090108faf2c1404ea2786b42ff757db91e1e42499210423a7e335d5 COUNT = 78 -K = 29bb47eb8935cf518548f69a5f13ec93 -P = 4a350bd4588d5488e7f55523efca9ee2e38445bcaad2588025dc80884f9b2cf96f36f47bb07ef7219507f24f0f20b912c0b2cc3feb7f2ceb6e334ba9d5ab7486bea3f5313c3cc18df57593fa7b1d857b9893bd74e8ea39d31ef9b354b9004fd7d74610eb6c -C = 37082e0f719790a482788607a8185de4c9b02413c136336f4fe12886ed077568b6b5fe5b6c15db8a2ccbe4cd9cc3446d25942bdd33aefd2dcfb00822a42029c51e6aa59ba88e1386764a666318ece27e68e30da012545ae562e8a20b647c1c1073777e77fe7984e099426e130d43e6c6 +K = f55ad0b48af94d3463cc60fccb977040 +P = 0dc7b0b0751c7fe692801bc00f183ec1cf061a24596e27d919ae83a2b1254f00b4d435dbacab0c346ed2fc4c56964731d8cff7488723799f87a5bbe9471c12e6b5a7e8ac50d0a4a17de02f9d4b230568d22581e88b03643c5b79c500e9f76f45fefdc564d6dcaca3aa13f19fc521d27f2ffd9ed8253c9b0456d9a065b314d76cde4a850bbad1f3b2248853f248d59c4d43f73eab5e4e360304c4481518d8fb214e1be926061da7c7a9567d5cf326acd6db39b060a9fb8cd3d32a0aaa061e990edb2dd8ac7290a314860820e4c794c96ee121b6170a9b10bc6872d4c228a5eea8cd56e59f0f954b1bb44a779638f6eee9b4f14e45126a66d9b66973e61787ecf170aaf876194b6b763f1138877869dcf053839370f278a7e03f14611a3f793d9a084c0205d2448b2e6aea97875301e54ff11dc3f57d0e3523546ed27d8859546a71fe770ccea3c624eccd12c6a38abc835c279d0fd51924fdc01ea0ce7f5bba946d0859ac6bb05dc40348d876942aa62ecda617e6a9ffc50595e87a6c43dc7afd2a70ccb52036747ff7eddb36a622188784c4bc1aec66c72cd56443770967cbfca7efae7869123213fd53cedf5c9ea494d04cd60e65f4014e95f34a7cd75dc3e4c4f8c0141353d25fdaa5870160c214bd871749fb0c9a33a21b4ef330bb3e88f32186c1f3fd0a761bfeb3fb4d844ee178b41525c887d69b89fb1a4737dbf93752 +C = 5ce0abaaab2641e21a675f73251ec2bd0004d200d0925dd99e6a206211885752ec778d41b954d5150c8d82d318b22b1414bded0b3b4f617eb307312c048faaf9cf5dc5535c6bbc206787c264034b32bbd919220a304c57fea2f4e2da8de89a8e36074d3b3dbd422c84946fa4b396f86fc7c447ad40c0487e71e319411b74bd887fa343d8b8afde54966ed207a9d6dac949af6348447c3dbc075d82ac1c09498631fce2c55c8cd96d485dcdf4c81f58032dd68ae17e824c96fc008a1c94c689af61eddab0f4526782ae28b08ec66424b184be8d2cc7fde7240a213a1b457054d3a423598acc0c2489164ddaefb497f61bb3345158325a4a678f0451df162da23db34a947940082846e4f35acf681d2df7cc43b13cd6f24103a1b697142d85731a25728a53e90d58bfefe4c690b0c3c4c1b444a0776494387ca10135ff543f95c842ca4ed4ff27c0a0370a4c5f13a74bc989c6d702a66b1cdd294756a1b994372312061ed3de4c9919abe34f62f1b428b1b9ab45726b7247eeec0d14ef4571e25b233d0d0101b63306dadff91c3b747e7ffcbc811cf66c2b5f96626e1adc9c97f3e3d6cad8e99180848356f1a8eca8003540c30f6591d9b8a134ce6a6d567702bbff905dfd65507f04651f6f4a645c621bcf17fdbbaa4969275ded401c01b22f61b0b8eb8bee25f0613814b68a6e937d6d5d53d4c443940dc7f8838a5376ab7fedf5de327e62a5ac16 COUNT = 79 -K = 30af42f09531de2efafbb301ccd65c89 -P = 1e7cd47b216644aadd4201c12041ec182d403c71c66735421412b6c4569621c7dc533577e5ba7612840cc0a98dd8abca9a44f566ad0f7db17a9132613161bbaed317b8da326e989540d6e673de9d5a3bc0c49bf7fa62d0a44ffd392431a226ce1dc2a12065 -C = a76c8f72a32aa59c276f43cfcd9bf6a7e90a85bcfcd1f242629cf0df36c7af3f0b9596f07b18b0f6b2059a139eb6ec465c57b24a3074fe1b5aa294074de69b9009e3b7f9d4da49ef10d273d2cffefc3905f8f001b3b62d99bfb481c6f78162f0c691292d06349250c36b53e31fd781cc +K = ac9337af84486d16b7e0b45cb1ba847b +P = 1f5e060515273dfc86c38e5e2ad299a87ad3c1a502cf6755e9b10d085e663be304eb8c4c77c858d5944d62afde4a0585117de86159b86b9078f4c6573defc84c652cbe766f2585f30dccd5b78aee746cac1f4d349a0d9124bca2b31bd050ebd51871ab410466248b83fcf4ba77cb82d2e46cef75fbf1f96b03616f7d267a7e6b6019b0028349feee8b1c7725810316177a045aec1574e852d15ce8eacb026c7e4a74eee1c4610a87ec4a2089a24e33484bc04b4d98d679177b23f1fad017250ef90d6570cbca18f8615d3d23ebd37b811a733a4ee2722a95fb097363c3ddeef5e5346a5fe6d04cd8384963770d5f21d871e58b432b54d34caef74eba349b1da50a8d4c8b40dcd072a1cbf3bbe6aff7ee0c72dde6ca710036206ac494692c1ffbe45e0e617dbbd29be1986b79815109525a39cd459ff708da75280333d86586c9067085f17b2bd152159bcb2ab73b375e10d5481fd7aa56a77669b52855c1b35b9c685ae04040fe5c56770f22e1295ea342086d28a81dd0c5532b89f55964217dea8dba341cf8374462e1146da34c8454561fe9addfbca945f1c701d809c903c5f6169450f3509703cf374e26394f279854eab481fc71db574e8cb846eac6cac077eda9ada9a9338fb06d8f28853025b1d6a55ba0bcac616c32e6f28750aec75c30312697eb088e17f233cd12c806b4f8bbb0041aefe9fe938ceeb31399138212 +C = d1851d17db7909bf584a31847021d97153936a9c14cb0eaa111ca061adc3677094a2d814aeb48a8abe0b19526975ec2af776c1421a33f082fc2bfa33c25caeba600986f35cd3e77e705294f546531869ae23a3f249cf8ea7f2f62e42c4d31b1d24c2ce68b087e827165b71d9438dd8fc76a41572f03bc79e5dc312c050e0ce4cfedfd4dd29e312c57d753d6996fbef6d3f9802962aec58ef0bdecb1d914b29254ef0fd694713b19e81f3b4ca5149abb3df7c02d06f270b57b0f76069c5af2abb45e05e2b500d566d43c91db08b968aa39f2055cf42c36cc61e82d132ff870823a8012b5b5edc4c260796b79377f01fa7c6fe19a48803e50d0dccc403d3ca127ef51ad2435d9c3c7ec70fdccb77f4f986dcb43c55d7ae4c4f980324a300a7964355618829a949808e3054ea4fbd91262ecc5e4b0123c8e8db848072f5e4ed68c32f78c30e54ac2d1ab49d5d06736374f69eea8ca0f3374f451b05faa07c81c110ca561b7c844e6bc66c06a474bb506dd99fa6dd22c52cdc4d642a58fbffb08483956a4829724029d80212b1410fa99037cc65b83dea8791c119b7f495394ec9f8c49c12bac8b95d0baac4273a0930158d704c3829638f05d5dac7661e5ee9651bf33d73c76ab389af0c0b75dc0011a5f6c05cbb444a53d242ceace7ea34842b15762e6b0d1cd178c3933e02d7ba724bd16b7c0ccc4c5763a710892cedcbe29e33085e15273386ac8c COUNT = 80 -K = 37d253a55599c0d1b877aaf30869d19d -P = 87854b1e671aaf2d03cfbd2afb82f520e18de3fe92770e235bcc1c640454a421eb60e7a5c801651f625336e2a80533607a6efde1b542f3811be6d17bac30d28e35b1ce1898c09484b18e74857e8878bf4fb8a63a0f4faa48fd6801490e7b089a027db76909 -C = 3573d51b0fece48bdeb661e8a2d012151dfc28206ed69c250cd52b8b861e683425ad6948ff8654619f3b15f36ce51799b91b0a399c05260e91e92c92913091d1fc0c152f4949d746e755a80d93f715d64f6b3a92e148d8b3fc3906371ff8674cb060cae133908af13b94c14ddb6f01f7 +K = cb9927258829c1412cb9d18e44555a48 +P = 3db27b0cbd9c88c09d6305e62f3c4155039f011770d4d3f30a2379c38a62293c15e33f4535237f13dc3ade130eaf8527415eb65f0df5100592e5aa10b5ea4b28ad9182237953eaaa3721f9044071f02533e4f890e8e0be67870161bbf0a06b288b5748c0cc7de7a4a2b39dd6b20f40204aba1d7d53d7df2c25f38a1d56b6d86fe943fc2afdf8fa475c9229662849f75be0dbc0250e382ece527e56ec0ba8d22b0f06bfe5c62a15c75c0ddfcf6bc259066866e7794c5f3b269224aad171cf403f444019d051c02c79aa4f93161da66b17ec13e56fe3852e35d8dc1b59a782579fe054af9357bbec3f09e14e1b590f72427bae92f782289e245b8827df8045a3d3c63a74bac326b3ee11920bc6754d6f44e51907f086f0eeb805483d40365e45814a65558ff8e60ea7b2d2ce4f58093341fffb9ca138c83043f0a7c759a54cb2bb16f4b9c41aabfe805663abdf52e510779382961e8aa8c252564935f14fd692e459180cad7b8f9e4f5d628629f269820f880c40fc94505dd6e16f685df410641964ad1ca75202f4db6a63674505644382d14e00a6ac0cbf551bb9b87c14213842bbea6e7908d7a78350a98e563a3a5034aa5e6fb967d4a3f5705ad54ff89babb9c3862b1323856ae425f116eac02b5609a06fcdfe45f3f8f8052644864c2d537b659f56cc5495ea80d4ae423bb50990c3432eb4150542f1187d9b2f76997ce0b3 +C = 48f9e836e6ca326431191926c16dcaaad968390ee0b167b7b5c7e8679f856b4ebb5bde252598583c80385243be6afe6e6005bd5137f6fd0b781248afc364ed2186ad8140413e87523a7cec48d843a01c4a4827527a418e30dcc6dccdbeb8b6917c6f31ce6af69abcf855d244691fce05e8397db9ae503861f2c8497b92a42c1ff34449e63fc40a3e74ae3908b3e5e69a2f0797f3ec0b731722bb2831a66925e6d214110bab309be75222b309aca5f3a2e5334306023fbd33da1d19ff36d676af8c837ae1986682aca8b7ce0a39f9916fe3ff884ce5a04dcef864a0f02bcb4d5986b7e8ad29b7d24c1e182a9aedef3f661b3ce3ada72bad113cfa4ab666c4082698a992e444ae19745f852c1b566e5dee4dd40af6a773b1cbec664f10143781b97ece8145ba03f770fec88b4a1223c99bbb1091845ad23c7ed7dcec2294409b7d491ff952b404e449a059c954be93171fdc579f01e242c9874c6151d884b6e3e2abbc616e2aefe7e278b8d2af8cb2f24814ff3b43671f1264e06254d065e81cbd78a436955434cb3735e5102cb4d8d1194387cf4afd8d963b2e637938581574f45084dca80ea0766a872c2791880724d6d23c4a3731a58fc72e0338e2af4a0b6c7230141f5acf064ebbb8fe9d85e66e56bf84a1442d1d1cece3d21d8ce4d3ab1ba22722b841d5e3a5ead148d9ed61fd9ec02867c8d99d9a1de30e306467682cd847aa2717ec047fef COUNT = 81 -K = fa7761a544ba2ec798b2f1e8c7678557 -P = 0cede184da19a9436772ad4067ea3aee1f85a84a263a28151c746e0f994945da670edf7725de80086feab820d5fb17c5316d4be785db44367d0a8599ba714a0a13f5683373095ad3787c0ecfcb2d77ab07fb663184573c5879240338f22974c13b23817411 -C = 2aee3e21358e84aacf31fe6327a0573d28f0d3dc180390ffa2147ae6e0e169138e639ec4b566b5f94bf99ceeafc9f6975601fe2771fa06fc530055886e2b7b3058ebb50f9194c5ca02ff0c9b8e7fcfe6544965c3ebd64c384b0bc16c8d3e2627f0f316472bb2a690a2f11a9af4c9c0b5 +K = 8fb0cdd4033cb2330f7d6f7289777012 +P = bc8c5a629b5ec3706c7860eb52c6543425a3b0de04c0fdc7a8a3fcdaefdc3eb22378b5935fdd321a8b1206a4dc90c624cdff23ae4ba44426f6005b4661441eac6d6e8db86b08ad14d4ea8f212b8fe5b960c0ae6fffca65561534bf56e86887f00df5575e51c9e802e3fd79267c329dca576cee2b7cb06d489fae42f82a49488e977d5fdf34f21da183bb1930facd9db31a1dba443127b248b1d737bf8d50f3ad49f656d7103432aa37cc7738da9f2e51736937c6b097b247ad88316b777b2c4d57292c79f2cd90195d360ada2332d49d1fdb147ba2ae8f9bded2446939209a7d49a7a1563a15193bbc5bb0bf42224f6565dbb81a3837252118c9b9181836c02443ee470aebe6be19d6b5297c9a3e6aa9e40ca631580132e2a6ceb28503776a7c9b93a4e9fa058e47bb567a333238a412f12231bf9ecef6b3889cb38802d09752edcbd654729d0ad7794076444040000b8b24da454d67a59598e400e412dae6d8d5e2b817d5f4b5da730844f96da4cf57a1c147ab7c17d0ad8948823f23129b10905b4ed2ea8bd622afd30ab263f724d112714c199fb518408f8695794f3433384296bc82dbcec9c64bc1187544a8ae5daa49c4e8b35227067c6e7b85e35e111355e17e66c58e4f977611c927909954f70d1cecaa24f0dbea926c0e662cb12639b6d9598b1994907ed834a520270a78b516e2dbe47507062551129e2373fe5242 +C = 88bac381133b7bc5d5f8998b66a82e7f05ad4794c1d4aefa917ee3f732400249b6b2bbd5df44fb6b6be57803ecfe4c8b7793a8899f084598fd15b93787667890ee32acf6d25169e72f6f1ac5f1d2b873b29ad8d936599d5d101cad812d7b703c295cefe50661097a54031f560dbf7293e041c26a5d2bb932dbfd3ac696358378b3de973decfbd9c09ac715642a091d58c967075484b1f94210856aad276b7d6e298eabe516018d91576aa7ee19993e0ea399e111dec7f5cf426b2b9a3f1c728b630c294c4ba075af362025f96d2152a11fcddde30740def1e2fb88b257578d53a4380c55d10f5586ce71e1544770e08b5ca025d7e6a77141f3b2a16e830d9f784ccbe27e44e03b9752d4a011cbce71c1237229a39ef7051a6f217317a83b04dbbe280227867c91d13e7a8af463644b6434dc4c636839433d097d59e2291d94d364daeb4cf162197731c02969abf81da7f6a622194231178ff28e80eb990c65ee881b9729362fcbf69ab8f79f0cb142a10f1b876f4d964e6065db1cb23062ee730126b47aeb0c1124acc3949d7270cb120406834a2d8058a5e8a55d465ef738766128a4bcab135771eab54e9bd1f04e1474fd0837ff030fcfd2896720d0018ba75d9a7f25ea8a8ff91419e01cc0a57ecd6aad03d5996a3ec7f01f2b17855e49a81b8f6af269fcd8dad9846ab4942fd5fd4048cb8370fc54037510c8cb6a8af166ca9d5d40f341701f COUNT = 82 -K = f796e86625bd37b085290df3a361eead -P = fe7f17600b2df82f9c5b31720557f3560eb5a8499c53d64ce372fb8d144273a823d6fb1ab081fa4c070ba0ed8d49161c7aa6c9f1201e73e61a4dcd90f385015562d20b32ffd17a24e44c6c7ad05983e61fb5b17c69d95e118343ecc1441871986e38b87ae0 -C = 9e4e28606bb61bf45eb8d48c6983d34dccf3c2787ea745dd2b3a46ad067e10108afb2df2e4028c2a8950dbe1abc20119544daffab50aafa7947c62972ed8a01a176376b1a1ff7f2c9b114182feeae47830e4f404371fbefa41a8f3b9bae7bcaeeb95c8b3539e3dd34749c3b54847caee +K = 6d6384c340a88ec26df5c82daffa8754 +P = f06fc5529ffe860fbde230272686d364be10c029a8f4fbabdf80512b67cf3b820dbd893189004114acde55dbf73b5e87ca7ced8460220906ebcdeeb9caacd69c14608bdd768d23750bcc357ce2708fe4f06f454e462a93e5da580eb938e7c3a6cdcc2375f80d0f7ebde5a3f9458fb766a332e040510e14ce319b7e26c55278ee2242d14470d9c86261aeadad6d7dac26bc810bc90941efd0b6e88818045cc7d0319784a9144d3d665eb6c899882dd13ed9565fd5c3a85d0709ff22c0f2a959986a39cded38b996b682430d0fc7efd6c84d35de1a089b48ea311d9a680e7964f67e713bbe087298a76dd4df7b1b120a7544fc83744480841e49f928f9886fe4d351f2a927a178ef005aa2915698a1f1beb15f48f0228c13b3d7aa878712bafeb00c011894f3e017c778c24b2304dbc14b23717846af92aab76c0ebe2b69132daa3ddccdcd54ace104cdd6d7ba8912b8043ff8a05376d926e42ae7e09c23a70cb44b455ebd8f80e91076a3e2534a74cb2162eaaca2e784d871017da8d971c4d0eb9b9270cf9c9c2b397c691b9c88691b1a97e53a99db4776bff4c7487e5dda0b350eb0188040929c75c4f15f4c9884f215b4b007db5f5ece9c6f99b8b17a068009b75a3bb21d4bbe64845df575349fe316073403421d3fb95a8a139715eb23cb01ee69d05d41781501b56c24ef6deebb1cd5222ffd3fa3fb1bb20c0aed02647781 +C = 9027326a403c8086a3f14ee232b6b048078d55d9c89c88f4ce2e9f1e3288e9fbcaaf918c103150f4698390d4b5a206583822a8b0605f34aa71ca1071244b06e5469661b5e134df6219ccb7df1c78d6b95bbf9e8ba0fc05983ce68acd4b1d728e0442644feb9fcc74925149e1de9269596652a87e7c309e0196167829b3f0b0f6508b6c7355da2f05b1d879a10d3d49bef0d0c2499c9fb21d1e54bc078f857e6395ff99254c97d52c49f43aac0d56e7966f4e24db04ee3fd9ddcdae6c9aef380715e3e12830961df0f0eaecf08565e04c7f20e05a564632fc6f40d6a16fb9d3496313ad6414335bd39d849a923789ad6204dde0e979a7709587c0be64d594473d02849b5c768409920c7e9a7939d1111d2839ab57b12d10fd9c70e1cf4c01adf21c642cb2b8344923916f5c2887dc2c4cf811379efa5fb698da5542c506d2a0e700af7caff2a1446c836015218c9f3284b064f02d365315f7eb04a5fe1f1002f8f28e69b1ecc8288a626323e6068c6699784e3d4fc2892813b2728ad82518ab99eee458f64d4f648cd63e31de737c580fc70bb344e2c4eb4078268925a3573cdb2f2e80275ef1968be81175ec9c344a4410b806c3b21577a907801db24f6d1d3aa1ab1398eb65f1ccaa5f465c9dc92b958809d07f3ebc2df9500cc6599257af120763bce7e262fbed8dc3984915bc2a1eb1702f02deaf37f3a9f7546717855e422ee52d4e8929167e COUNT = 83 -K = e46d10631afb1f4fc8c911572cd7686d -P = dba340702db4eb12e113fedacad7a38f6723cefa4571a31afa4a718ab7c23f29491f772f8ed13c6e14d20b37216c10d81e64d236548e63f737c3f024f606d308e918721b72ac3b24601c50255e8415f8878724001edf7dc426b6972591aa4233e4e5e76bb2 -C = ccde07f1f81c2905fd2980f9e27092df36e0b2756703ef03e19d0121506407fd341550aa1c567203312374a93db34320f441d748e6f55651ed10df291c384a87b1767fb2ad79c063a7393c443f3673867092674f56563626ac1d20476a732b5875771e0414fb1467903dfb347a317cad +K = 9df1c3e504457cdb80eed8e88af22ab7 +P = 3e0df1c92402c26cc2c774a45a03cf266ddb9d32be25ebee798bcf5b1e2f57db87e64ff327f4d6b256b404a9b2cb7a2613e722d4c75a2f211e30156d1201ff3cc0270dbbfe6ae75052d400bb3be02a4d6b9430d89880a78b1c4d329700f7296af049115b5907aa5d07736f845e0de91bba2b4dd23d49bb06ab38a6eff0cdbece29bad5534a6375eab41f62b3da59e2a960172c723507e0fcbb931de1840db97031225030d7cdedc40dd71a43ced9444e9350aa389f598316f3cfd987f4c00424a353cc19447753d009f03935699ce7f65970ef2da960dd4d4397108092e69d65a330204ac236323c9d33f745321426f90fed4ad48c2ccd9814f4eda05508bdf4835db1d94fc2f60c95cd38ab1143ba643a3c57355c823a88c0831d0f79aa256609c65216b91ab42a0327b44b994f44b9713f4bb5b2c2196f7739f1431e41980fda00e0d08b2632ba222f6fae475aa09e92f856918fee9a3fc38d5df2bc067943f6382a215c2b0431804658c3b5fb53f55f0e8f1b9378c20f95cc5e7462c3584d4818e29f8e6cd524114f814042ae2f4b75fce25410bf0f52a5815c0b0c07394de4324cb0f8f7494d77277108b2f21cdd5e1ce6814be065789919426c8955503385a82ae6c7a4491ebfb9d6d952aed58a0aa7eaaeff4f99cc6f55afc739932f4398691c398649217e5e6abbf0412580aacb90e8ad38fb402b622c2f8d349d3714 +C = 592db27b643933f9e9f5e7d02d2d035cac72234ba4a098c2ae9dde9e1328e70e3eb5dfbbec9ff532a23392507d5fa96deb83e89cbc66f20490c8163c2bb83530c6507c8c7c2f2a1eacdf46001ea234406f86100f267b3b04b0d528b4a161a69ba74960fe629549b558e4fda6235f4a5e16baf00cad583de10924abc295ce42b384842b0d25c813d964ec9923bc6868058b17e9948a78536bf1e795330f48e574e13de7e0ec17ebb1fb2618aec9e622ea505ebfecad62ac8571143e2a36ff29d101bb02da371258e4acaf1b6fd2e886eafaf7a6b2185600930e4862e630123c3384fce8c06c2eeec5647fc69aa315d355c5b0a5b4791269c9dbfc8f76582a66f06c68679898e093f59c1a4b2d30181da28948aa32dbadb5b830998a2d3e9b115a63c04092b994da221a8fa818ecd4b166160bc49382cf476a2b6d7194752404688268a9a6808997f14dbd9ebada8effa9446ffab885523055884eb728e1b02ff200bbe7044ad9f09c789fd5f6b4361c5063c2fa41a9eb8be3f3c4b0d656b1fd47749d4980bfdd66860d2bc4c1ca3d55d5ea8dc03b3e4ba3a7d8e53303affba96efa7c4e53f1990b485890c6183a7d02e3505177acf5d88a7b2ef9f6e7801a122316dba703e4449fa4461d7a005d9ab42af30c57a00b61127ac489ad6d8a776ec7765f2d6c3b3abca170ecb557657af30ae01771f358a621f28502bf0acb9ece9afb2665b2cb30adcf COUNT = 84 -K = 06a2a8118564ed7099b0cc399bd911cc -P = 6084fc29d6a374bca0c524446e4eef6e9780f9797c4acac9b6b9ae3fa9dfa8e3319148778f6527eb67fd527098ec770596669cc3ad8ca4d462b890cf940ad0e9e95e4457014eb91771c655ac828c9d0bbaf1a3e3bcb2648ebb13bafcdf8249648549ef359f -C = 6fc39fa0549cc1f8b9c7d6dd3e766821b9ac98d5281ad1aab3792e6d6d6070b174fdf936ae238ca2ce279b43da95510734f1a2662417bfb58c1664da145c0eeae979a0b41015e57ab3ffa0c87743594b33b6d5af84f13bd0252f1d313794159026bf09cbb23dacbf396101957ddf46d1 +K = c182427ba2371f87988373c2dfc019e9 +P = cef9bcf9229c389362934cc8016c02f6ffa5ca7bb4569b2933bf585367489c164f697f63b5a7d8624ff3f4f869ee0b2df59c169232bac80ef015c222d0a8d139ec801e3726d5a9204e98cc75020c76e883233e0726b76f50472c49ca6f3fd1ce40eda6b21a2e643ef036e06bd92edbe500a79c9a5170fabc443699feead7e05ed8eab0d61e3353bab425b6e721bf0ef186d22631aa1e8c7ef1b5e8e4fc80c10623bf344eb545bd68d323f38c96fb0a9f4626925e794d498aa481263b1e4518f9c99d3fe365fc9e32e371f998e8506b375042376175f6fa3a22d5f571a8a5cddcc089c2f02459bd3d66f5eb51c4ea70b6c23f85b451d14ce19c9a2b9b998b30ff66ca11d2755ea85798c04481cdaed7f9a1039e28bf597bda80416e8fdbcfd3366a05deb5b56777e7673db432f5891e396c28c999772254d9092a0437d2e63d23750cfcdd1614012aff1715997a8f7c56b0222535300a6ff69debdcc89c74a9f96c22d90da949ad41212fd8b5058e08406c1131834efea8e3b164b9087a21dd71c48c86714f820fa816d72039d0daea0cc172f4f73525f70d0d03e2654d469ae3dbfe82cee4daaffc91531e84b61ef973c0e0b773bd413155d85f58193cbaef7db1fb18f890b8613c3226491abe85b5eafa8872076b07940ed73bf6aa78d727972f3bdedbc9ade020cbc88074ed7ede18ab0b0e61f2436bbd3cadca31e074a1d9 +C = 77974281038b068e673ab325987afed4a77d03887629ed3ca493673793fd546125f60388bd7f0a8827ec8112a6beaf9b25af3035b5a903f0b46e27a280bebbda2f6caba68b258b5692f49609d88bbfd8da93f25692bf5a5b8450b2e4793d04ec617eb5391bb0d82cb8121c265a53cab0e361777ea7ba4486f5b4d9f0ceca3d710b55e24079328b636a99923f36a86bac438e756adfa0adff0a6af088feb4a1b4ebcf3f1c9c10b89dfe2a851bfba2e5342c5ef1b666c9cc14e05a0d8c7d59fba8abf8db9321a9edfe0332f5e582213e17dd0fa4313803a4d52dcb1f9b9c3f433ee11f154b8a6cbb46c29a83fe2de91dfce0ee3f36d9560a2910bf4e2723046f4ed8947fce1e62b217787a4f18e0eebb8b89d480b113b4166e2c0591362c783ea86701c65a9b5e1b47f8bceb291a145bb05254c0eb355632b72ecf47d2e6d008a6e7a880c7473a4d75bc302ce0ef75ca5ffbaaba3172dda74d85fc4ee62cd015442ff1599053a2b54c11e4db9644b084b67bc0177a0296d725ffd63fd27c363d2e6280b5aac6ebcc77a5a5ebc074bcd09dab04feb7ad7c2430d273e955a0d4e8f48c12503bd3158c51fd6cf0398c520ed0aa8cd13ebff5389d69867f12ea512ad320af8edebbd1ea0561e0f9cd8302dffcf6a6c0f1d6e979ae87399e8beee6501704e146151b0a9ab29ec293a87d6dd4d401cdd3c16a4d7ebfe3e95743febb88545992cef6b09a22b2 COUNT = 85 -K = 48a0812b80d7a0d34649f96c29a60fc3 -P = b847c7131f404a1bf802a5f783919abc99e97f7f29aa4405de8b41887cc91cb07c33d00a9308d497791e95d927cebbd0e10458c365c254402a06e4e0792e6a9531b2b05520c44171179b0abf3890010f77275fe339b4b4d6665a1a2da0a53ce59475bfc14c -C = 140d85b77137958d441f8dc88be20394d4dba535544d0c9fb0576f2f050e3b6c8569aa5b249aada37e671b8690510b3e77986f0b45c16ec80a5a4afc3bf6683c2f412b6115c44755d3b748f9064d6dcaac73884b5ee91cdb1ca940c1fdd70a732439ffec0721d06abcd7f6815c3088d6 +K = 5f2ad2ecf53b8ae01d30e43b362aa4dd +P = cfcbda2631d8941751f2275a4de6a8e37304a78249da39da91721d66213acf0e17224609ed9a9b81717d488aa39adbba116ff9a6e4aabc255364dd882c3f0c372ee5cfe9344da4f91a027dc1195cb8f8dd2a2a8c7be51946f9f02ebf7489f073174dd275dbb82bb781673444ea800bf256a5ba8a746d1d160ca4342a7c630652ab2909d133308246e762016fcc60d3bd5f97056e9bff6aec1cd2664db75d735df1e8bb079f670c7b43daa23a0c2cb88d34c0e2349cb1f5b9f539a47432946696f3a99673fbac61eca6d84d33098a6b574834a23ce599b3b8da0daa797dec2d505b42699fc2558c5f78351c58e150a7885d0b275e819d2c4f3c86ea971a08e3b8faa1d5da72d4dad6b3e04c6474e5ce85adc6689faaace38317872843034ee26f95efa917a4c3f1b9a81b6114cd7bca8ee12f1c2dd680739222642f9f599568f1cd2c458b38318f8c76236f401309cd0a5542e7334d982fe29a7d31d89150dd14229473fd82176e6820f58af656b62345c5391caeb4250700f531beaec817c93b64e998b750621c342b93d13503a072bda1a36fec14663b0201e269bbf9d13418b747086b25986bcfd92b2de716b9eb933f684e120810666b66975d6c383c55dadfdafafb02103c681d8375bdd11f97d08ca61b0b2b938648b980e44db9672a93a0a59ee3359d22df577df566b82df6f8200a9d74351d714bee9be3fd31747240 +C = 6b7e80e535720af930146537cd63082a93f804c26b45deeb20f98aa66ebd61666e114fe8acafb3f82daaf8f47e0c6eb503f3cad5e399d995059e9f4b7a22c951a4aa039ebe2a0d3dcd455370178804f0d4a4cef137fb2242a8f6f2ad821bbefe01c18dfee923e007bd90fd8e4ff9f4a80d0b38253fb116ae95eca2adb6e33a9c785c4a6e12b453e01aab2f9090a3294756b6f5cf5f46483af743e3e4f4a4b9198c37d771560dfab8722bfc24e7a50e78d15cbe726aad9183dc0537aa9fa0f4c56879d291a59ca750768af13f77232c3a020b9c1f9e1365f4e28b923976dc4480d121db159e3c88b5f84e212adf1471dd93797220c0a5e6f129da7cd71949a691ec5b66a7e9eee67fd61866e77e7b2e702fe119093625022af1e4672a8cc55c721a8339298d86953a2c632b9eff8765c6e42311c534fef31bc90b08edc0a8b0d6611235b752fb22512c1893b59ff236af0bfcb0eaafeab6d2973df47fb67df36a8043481fd9b03cc3f0db455ae321ecaf1c969484cdc5aa650e39cc4ebb5e46814782f31ac7f562c75813cbe3fc203bf40bed922e83665f40b546a5f121bc4d509db6f9d8608c473dba4eb5dd5405f2e731d702083553630bfb0da518f4c3844d63a75408444c53358f89ec89d560e302a0666388635b666536085edd53f554ccc327d6ebfa29d9255d8ba5d1f47513e3d0116b5e805250b9544ecf4bed54d9b79542f353ee75b621 COUNT = 86 -K = 90b7dd829053cb130b1a34a886f19f03 -P = 74300a9f0bcae02364837576b9c86734b47b767f0a1c758ad952b683f14b5ee99b74d30c7d300051ad0bdb5a07283443c8fa8e5353fa4df9d9a3b3d05942849015cd67a74c8ae62eecdcfa90629294a4595689c4b0f16222812e15d71bafb17bee974dd5f6 -C = 6195fb1567597292d74ad4562708097905bab94a7753fb7ea2414cdb73ecb860531ea5b6ea2ebd529d2c22588a6685e8e83cd618b48936de0c334591dd6dcf56ab03988ad1b1f224611b14d1ad84a87fc1b000b75b854306a794805e263d65315e729e2feaf94586ad79bf6208cc066f +K = 87de46dfb74ef6dd754ff3ab76dcebbe +P = 235c7d63a9134b8cd09f23b3f6a272412ad9480901e93deda6ce6c5da041a8efbc69032780344be59a45a0d5d3de7fbb37bb47f7f6941293f8abf720c5590e50a6f649447e8b0709cbf61bab53e0294c266bf0398e1a2a80f7705af83637ab2990c36ef4a57e78e582171856b11048c4b88156fdc7922521c280a09e4ae4729fd66154ec1d921496cfa159907c3051f3f57db9df9e32565bd9219ae474b1c9198ca9eeabb8ae2950a4a911ae77b18f5646e4069cdfd03d45c782acc311d23c05b96fe6d9ca4eccadd3dbb32df3530c731178c082c6c0a6ab1ea887763e5818db2e34590a54fd8f66a6762bad27273ca887965185b3852839f0f87233d98a1d6db3e4f47d0347076ecccd6bbdac02b924a4223234effca758f071c706ae963513208c41c63bfb4e412e047e7344a10a484ded89b9c3ec43dff5299d7fa1b4087c3df8cf78d50dc117c7d8f9921d88f0df2227e224bd69ca1d173e85108ff77937d669ca60c9d2dd7bdaf76d159fb422bad6e56de2243c20496733ca3049ae042d70060206cad459153e323f15b65d4b70038e832020505b114e2a6de757b349787edc62ced7575272545a95725f5081aa0f78a927235e4b5c9c39860a3f08eb8f2ca3e14bac91518b16b1f0691e1d88b93eeff0e9fd071ad5640a64b4bf8038ee98a2bfa757fbac2a50e67a6c1a8dcf48d31b0a69fb728d0aff1c085d178f8426 +C = c73bbece7bd224e81c094756eb9a0435e39c89324e3bd81d1d31f1898c46378682fb1d989cee2e57c0e05685b11d837f14a90984d2a23d98bc6bdd27bba36cdafd0ae28c02111293c992025faa44b199adb699cbaed96f4ec81df1232f4c26aad78ea09dd22db76697426204ebbede8ada9cbbb569f63738629c0c172ca596f3c844c7cb1eff7cba3cf24677cf4197634650ce0a832c72ad58b832b14629b219343230a259adbc6939c58208d89282af270454aade5dc266486114425051469bd91cbfe4be380f0c3356051ffc6691a098eed56ccd42babae0c3b431be6fb0bb508cc122c0200078104ef9817fb215c585be2691ac49038310c9ae5b66ff96c0f489ff350ee72f085090a9660391dd527a35f322742df0768efed06eb22e14e29b9a9e02d3b45053a12bf78912d3fb99871b9883a8cb4b0d794e6e4d22b20c212f6a860808c97dad62b0f739967934b6c143b1b604e0d9560da016279f45ee3a3c48c2c4ccea2e85147534c26a30ef4615284a7cb7d804cf8d82c1ba84906d1b9a54a3bc5ec505062c3a2b8d9a9d29da668d4e2779e2e19639ebe402fa59e183cd6a8bb3db1153fb93e948fbe478d2a41220c2f9bf3903865b63a52c008a0dceb87ee1420e76d32ca38e272600c796ab62fe17d2cf4989323600e27cb780ecf9e51015ce5b77d8a9f69f5797086dc5195fc2e371a426fdfa05bd0a5f440f64682b86797309bddefe COUNT = 87 -K = 5605e681b63df646cb95684c4dfb3e56 -P = cb8b5a962307eb528f33dfc06e5e783b8acefd141a9d586b1e712fb40d699184fdeb336b023562d76ac43eda5f86307acebad2600af5b0e336ff070d5903391af3a236a5d6c5febc299e526db37f96366c016e2a2f459a9f092862bcdc55b413ab82edc708 -C = efa1b2efb5553543d8f5852900876bb03366f88fd77efa05c14ec984d94f82560f40cb453f981936002939df3a0761cf088393d0acf2526701ee1570fad40f0b040baba7392d0cabe70d90f8f6fa16ed48626c5cc2801059c264ee71390d29750e7bc4e3be031180264303a0565c803f +K = 6190ca28b9f4a8057d88b249474f344e +P = de5a7f573a623cc9b98c192bbd8017937b35265d6bf37a1a68917802c1e0792f4c9ac434889c36e1442d6aaf4eaa72bcdc4f44ccaf6c197cac91e5b4df4af458c68b050774664dd015357a4acdcbab7a81431fff37475086b3dd84928fec64632bd85dad220fb2d95ee917014e07b4077194e09a9281de269f51cebab71a69f0adab902632fd9e078815c3a1351d30f0d099851045c3959f89ad7089d9570ad23da244f2d9c4d8d32a7f114adf30b8fc2b3eb7b7812b93df4033ec03639f4e1b3843cdfc68b26968c0ea567c2de2226cebc5044c52899e9954241512df8620916efc74674a3d2e3e7d9ec835c5483744a1f64c781af17b6428d1d5cd2c2f75c361cd261370495e27eff0b0c520181e4b09654c36dd9a9be1d4bfe2fc7dc43c2801c78ac2b0d88b3ff746172923dc917135768a262f0b2afdcd9ab681f6345251caa485c309c84989404e2ddb0e96fceb4e78eef6ccaa36779c17ff03e3909abb76f1d49249f39af0b19d9055948893f2b57bb8dc446c163da4e8a16cc27507b50e52e163691fe9e90dea423a617dba009f0956e5689b4655d8968b784557c5ce25c4b7d4787abb9e13584e34509d2a6a239d1a279c7a0803ceca4a6147b0efb1cda067eb5701a46bfe0e98a0c85c490c65cdf9bdd920a499dde7257085ca5fa395b50270b639718b591988e811a00e2516d47d68aa542423ef8f069f2c15dd48 +C = 3793e074dc05cd4e47d80f680bff16b0ef1db9b3647cb536ef1a9995c7f1058b6a7e50ed9f6b60517831dcf2d917e8caf6b7ed311eea4db9f5de8dcdde6f7c6813504f01ab579c68b0f3612fb14bd641971399f3f99532a243e6cb67ddbc244d6f0a42c6dd6aa648a652dd1506a85770bfe2b33aa83ebe8abca39a0ac7e69e239d7682e83278ba453188960f5d06e2bf24c3ad081a6e296f7585e389308b3c87e2bde745b02939c6af7822802eb8a2f96c39d593ce73fcf2b3c0b84f01e6d421e8ff70fcf19eee8e40fe704bc3a3fe1924371f5ad81171c1e2dd413c5cc48c33fe7fef888f23331295cc15fad9700a87ac8ca479aa20427902cad53184d25bf5494bf1d53b56b7361fbe5b584b1f4647b68c801919d33c7630d7776dac0bd4b77397d3bad7cb561f4be8cc21d464fb8ef5cd4d96bc2cd589e767f8e1a6fd4700cf092b5dec70353f1e666734035ab6735d8633661027e0b4e580d9039858fc25a48e0b09fa5a99b25133fa6c325bac1db578760369995a89e7030a7effae28e233b9575f618b56f353f0341da4c490c340a492c6b675f047c3a33321f62f838735d177975970de677d4f40628c7fcd8f361d0c8f9fd0a2599d7e5d950b97c877b4790326e63cde544eecbc03afd1efbad16127f93b967094728f8104d1045705538f5789411111fc2a8404c551d86a346e8c34ef454dac203ec50fab8d7fca7aa48b276cab06f31a COUNT = 88 -K = aded4b28fd386b52300ebbf1719cf116 -P = b40689e660c7fa778c3e0ed0082856a0f52a269d16d99a36489293be125eae4b0750a3f885e045cf873bdd86e85d329b92e980d1399c98bd04dc0a269cee32a2b8ad0876f03af5b0f15363f550e481e8fb7f6db232762beb468ca580a3c0060eef237a0ab4 -C = 36986be653470cca9168ce0ba9e8d763efd4455c77bfd5c0b0d0e8096fbe8cdd219856e23f3ce783d64eee264a81365b945e4e48783bd3b837f78967277e9a4a5d39845682203fd7c19a023310de811c9f9418dcbb2f69103e1cde9b681013f2988ead7ce721b9b8febac94a3800cbab +K = d1d29e5f50ab8529869f4ea420b42b84 +P = 84633b64f2dfecfc4ac6e8def417a0bcef9c4dfa19eb4ce44e7db87093e85a82d372bfc93bb3f46520874da2f19e5dff544a40a30e15c384570444ea3cbe6100828224f68930e79b96c1ca8357e03d3dcf8f7b82db78f73881c7fbee1b7479dfa231b8a8220cabe1cb56ec5fba829d93e98ea837ad914d2e822faa59fa01c3fa96d31a710f31e1343d3d50149da789d1c2099e1e1f3afdaf303aea91c5f949fe8c055652e86831184c1fb252d3d500dc95a331a651100c8d6629ec461a9bfecebf97673862b7bf7c67db0db4bb86718358b490bbfe789edab8b6198cdd0822328884a7acbd19df3b24a9562fdd177ddc3952a6f128e3fb2df5784402392f6ebeab446cce020370f8b0e1a3f394c322b271f11374e7bb3d286a7dc496a22f526b112f07e450cced5d2efb47fff3ad643d43e8e4a98a1e2674923923a2551b7126fe5f61a4050b21589d1f3437b028bce70e24ab7277b02c743593997f0c884b02f8a11d64caa45f009a82c5a37a89d9422494e147e761297e54c06f71a7c53b4dfe45ab325c4c8503574bb8d3f94c14202e623c79c718785cb83a857bf005490c89dc490c38246e548f8374e780bbe3c6eb07dbd658a28f76b96436975314d9b9608630619f848f81ff7856cd1224da4a250fd43227f69351b58795f4b152698caad17290f3cc24cf64a53bf26f0c13f31fd0a9db668e04a570aa37df5e48ef0c +C = 4f1ab75074de264360b34839b97ca6ed0faa4958f923e34a3d07b7e64b6f9bb0f4a15df9be2891410b12542eab886fd72c187842a2a48fc45d5f9ec3ae77ff0dc7a510af8dc5276ed6eec20f14b25c6f1e869e6fc3a107982decc967f4525e0389490be5659a37c21a196e18f343ef666737053e963076c8b4b8b8b7b6218b197f8b56c879d2ae7039623c2ae47b7254919fcfc5e4c2fcd62a4cd2df5c6f6b727ac867ac43a6bd77ffb654318527e9523909f39f2d21b9ad020fe9fce842db98e9360e9fc84a252c0ef0873f28ad6f80edc1e64bfe68cc4c8c5d1552d8c6b222a05ad64bd17540779c2d6b7633c1e4e8e7abd3795fdb9e9e479ce3bf38306d9924ff27bc71b679e000a9a69000b3e5fe85da1624d559b708653e53f37fa5ff01020a4861043282fb748e821dfc15ac082df0457f6b7085b421f6cec179ba342129715adc348a6b1e00e535e04c2ddaa60adf2960f3b41d3aac2150efb2dd21e15aa8744d1d056009fbc7aa2bf1a44556470a35e8a2ac93a3002112c98dc2691f6f156c482fb41623972e0d9080eec7863c5c0ff31fce2dda0910e62462abb629d9e3f402798d129e9aeaa7087d99036d7a8ee1fd5db847b42eb48f8b84c18212128d5d695f65889472fa6ebd92797e41493564f6d6492b710fccebb8ab7018fb6b110a4b63e9652eb86d195eb73b9d99dcf6ca2d777fd7d5be0a3debd9aaf891bef86a9ad459bbaa COUNT = 89 -K = 0572f897b8e12264bc5f5b263a5974c6 -P = b0e2acf216c0a5c84d9d71c64152b7d5d8f75c95d7645f5fd59fb884e8e748ca640093d1b12d47a8aa5b9e0db69a008c606e91292b8b665375d464a40a1bdcf8792f316046a996362e3cc1f8b43969b349da1c8d1f24a44b90df222b8fa864976e87d4ba98 -C = 995a415523cc6e20e3e0354c334aaec5f22ffe2f630fd8f157b5a028c9d3cf9202a1d4a5a17bec2a2f806f81dd56e419246a974f5721810af9b7231678d71c2c788bb080cb845e34a68bbc6cd28da8e2b5d4bdb76a5ed01135c3471d89bbcde3126b48655f37233acac921d9cd3d5ec1 +K = 187f58055427d8bebfcb842e7cc4efcf +P = fc60a6f646b976d2b316f49fb32fc7eb5d3443bdeab30f8fb1f96cdaa238435893c36dbe814f141489dac8ec40de741cae300599e00e08d852e9f542deff92316fcd6c404dbb3b5fdcd5e6bee7e7a902ec5b4bb0e1b1049ed21205700fb050de17937e5fece5629d583cb742d5d6f1c0afa4c2a0c4c40fead95ef5ac5feb18871b5031530f9d49b098da2c04ed398b9c662d4e871ff086704830ff215c04be2b2bd28fc178763f40c50dfdaec972ecef3c61ab97ce3c97fe7fe88c706188d4d886efaf80be01952012b793ca3f1b2910b7125b61ed1f6ce3cccfa0bb31687657453b5c461cb38e33b5a547533823e8d0ffb218d3db2e7f7fc44768f47bddb18f59069001236e9ae9c4e70a3b5c11cbf9820e80be4d1a588b7b33307ed2c2e11af03b479e2dc4cbc09f9f4cd51ac45cff08c21becfcabef36829efd00664f97a25fb60838eb60660342fd90b9b470e14b19db8ede301873380faad685f12c2da72c2a4b28ea3d421d6cdd47e8e3188b9a2eeae15c910c1e2dff32960cd3cc5915b0546d0dc7cf79049eadb4c11c5dbc527500ab27a38b8f9ad71bcb364462e7b306655ab85b7a8eea47ee303e10540ec9539a822a5b3847a4fea141ce54d94b257f6a04ce61a19f6f24c52be593fa39d1da3755736ab1b1e7d1db9043986849d24bb1d53e78951184ab7c8160ad86714d75c4ef54528c0b42ef378e35f0d5b741 +C = 0d53d03e2304ee33d5bdf8d0c41b04e26f1b7e4c01eb6d87cdc691bc784d2c1b7cbf14590d2fe53af3c3b7cb581ca3192fed9d34bd70f58d8b0a6fd80d01cf5cdf1a8f5b57819c261b6ecf2cc71352af7c47bb76ac30611f858289d8a4129db7cd39d364fa09c1e3bbc103dfe5703448c7fc3a18153f84ae76984bb7a4784cf1d3c6451d7edddba263a28d280fbfb72082b8c8e56e747b86dc0ba6453f2dbfb706b86d25965b339b19b432f630ac1a9c1508403420856efe776d278c23a63df37983b4997af055e167573179277e2e8bfd66b8c84a1fe2f4be6015249ec2c9aa14845cf0165c200db4ba164a2f4d711cbd024f95dc290d4451ddd8527e5b8e5aa005f6b298cb27a6d740bbb609b5d37eb7d804bc7910dadf16df7457849c97ee72eedc42e341a5ca6809a48d0debec67e86a37cdedcf5ab63b865579bff83c288a6d47e04cb1c5d5e8f52f79d12f80470043dbcafacfb168c8fe81c5c02da20d1ce51aacc4986d9f97bfe90284228ce2a885fecad053676af23ea2ce9c9f802dc54698f6b43cb8a45fb2f720873e56a362faacc32502d72bb2d2554e753d849f504e778064c6dae3ebd856d54fdcd26e656e6b63bf86482b1084684d8c4713bf58b0fa54e139d32754060f0ee40178fda64380693e64d1f2244f1e64e2ac90e127be4703c604432cce90092bfce8b79c8a1cb5b8d8c3b3c99d120a42ed2b527a317ff69271499eb1 COUNT = 90 -K = dc27c19e03b1a7782f9b7fb48e672fac -P = 121609ade76df73edd77f0715b364bb62fbf6797cd839d9d6de0a3f24e92c4caa319c5d980227e15f3468fdeae1f69a1a29318030a713e8caf4a9b87083f43dad60d565d3ab814b1b821df2ceb9110b5a4d98135c17fd1dc055d6ffc3754a5014f97169fd0 -C = 18620ae97f94763208b7705e93a0c10ca334e886a5c02eebed7e974c78f4d75e5e9c2ca918f9a94820401958270810514ba6c87675f461193c0be68a6c3ea95669d199fc6716e458b31aa7919b50642ea9dc17e0755b411043a8849b1c07275ca76292d2c9dc9d2dbcb20a33913acbcd +K = 1d3bac884e6caee3660e4de41a8b09ca +P = 1553591f4c9e66edf2ff4e5fb91e53252666798ad7a3ebce81c7e60f1999587cac993d024340a5ff81e23de7177ca3304d4e98cdf8df1dc155dde01eb723c371e012e42147ced9f1e7e4b6023d26c88d924ad1caaadba90db3001dea44bceb9c773116b6354a27837bb9e9a83cf3d76d28bfdfb6de9b06e798b181d874d8a449f2a514b9ed30472f59250fe48e31090a7e0b415f7d2e68368ac91eb45954ac5a48010a5dc632a6deed74388896225c40c69b1eec8238affd3ca5c737e44277b47c59ab9e802e07b537eba759f245463e988ec9b5f900f26706ffc400acb60f6e300f4ee047e7b4ae74dc09991d4b7df0bf80815cff541d82d19ec5a2efcec15d2480c233ba21e1199c565065d9c545d4b016c3c603a6700ecb937ebdc75ebd52bcd8fe65d985e52ed9c8d57f279d4b22cad2612c733c4c96d262cfd3d2c0fafb7cbe268d90f241d1c3104527afb2858101205c40ce6ca4f4a65c931aa310e738435a33ae079ffa5f99bdae13b53e68dd7b3fb52d385207d27711539c50867fdff59634b5041fa620e9ac6ddba5bd50083d9dff313a24e02fb0b35d2fe4e829c9c6dc8c102a66266af635530bf227e0355cdc8779ba583cc76374abdfd3b77999a5004694a4e523df8d027e87d6efd0c5d78f18fb66653752515399eca0fe36e20b35a34633467756aeee1e2ebd4e2f523006eec6559ff1dfff85ea2c6bc66a43 +C = 9e4f1a0c15e96ca4410e63e6c430e0d82e0af236c0992c96aa48beb4175a61a660cf408c39d23a5103d704d96de02d64736748273881e67cd954601bd4679391abc724aa666e843c8d6b64848698550fb7bfe6e77dd8d176f53c23cf2610243750ffef63556594df7f38efe591b60c77801cbbafd54d63d3923c6516b2ca229315e3896d21481eeb81e5793bc3b75919dd75c6a0ef69bb3b0fcd7f86c21e0be42e0f11056cb4b94c93b381c6bc7f569a70b9893ab9664e7cd2a9e08239b7d32d92308c711455d51a8af22d5f5ab0907f1bc5fe56fe010ac29c42b416b6ae8fe9e61d8fa84e6967237b626b1aa7a8482c262d538db802161dacd17dc4882a99a0863ae2d2e8ce6474e76d505f150694687540d0861c03e36a1157a092635261978950782ed93f8e6f5dd3166cdaf63bec475f5e19240074e0b37094240252b1c1bb72ae2cd58be9bbbe02afc2987c40830380857df17f341bd4bb59136d6bc5772b688ec821252630a447ad1c508429a1047464db8596b24ebf61f5afb9470d1994b0f42ec0e5159cbb14548cb740de5b77fd41b0bd7a5bcea6af78bdd47e9732f1d4a95084edacf31a77821f0bdf768ca6a9fb283a2074c073aabdc206f4d8e4fd5e6161281611f3db0d1a67b1340bb4633acdb6559e8293274a3229c242985d3c425645ed52f31dc3bfb7bc91579c8cae9f491addf3e2b490871a9b9a41737691bcb4a2871c94d6 COUNT = 91 -K = d7a519156848a37506cf7d7a5cd1a11a -P = 60d8cce608a821552bdd4bdca87a8e061be76afe6edef2056ed77ccf13d25fca058dabf5e5c356c0677e0c30785423cd1d77eb22a38697df97659fe0888d5035ba745de0d61cca8c4e51ee0130cfac851dd083ea5ecdb781108ec5993096ad46ccf82db1c8 -C = 0bb2f66a1b18847792ac84b087a95d4fb1a79143bdf41487649f366a77053f9479a0001bc3b6a895436425554a31079473260a5120a77ead27c5f06e216f7c294330cb906b5fd0157ffb170deabfbbc45d34d4412769cda0a8ab11920bbcdbe7c2ab38209234f25954d07c3505ad8ba0 +K = ee477fb33973f3578cc70c923bf94027 +P = 2f85e332710da7a59e9296f63d3d371607913caa52668d42b0c0614b09f45834197bb611dcc6df9d367a868ddfb2ec20b09de8902321a41dd05e1c19116f4687ad8025907ae5c92588d6914d2ee8074c62ce79869289391ddec03feff49c129becc1b5e8200e42f074d07ccd329482d26c8f0ef5d5a31c900d004a569dbcc6d17d6784253f7a3e227b786740655b8b4fb634a92f8687f093da990cb4893f5a365c99fddfaa746d568fcddcff814a1c130f2703dc216ea708b9dc411d72ae63007f0f0e3cd4fc201a313d8482361fc2e43f88267329352605b43402622f32f615d52281d89f00f4ccd568f75935dd2904e855d4573b17d24ab75d6053876e1cd8482031b3480b8f9c2cf19998bb793fa0153c14a8aac847b5a3e9ee124f26a1797f0b8c3a35078a329b70bfc8ea6909d522f206c845be47cc1bd42a781290686d34205068341628d7a3435e31a49dda2ac3984d501f123fec8283048432d0c1611aef7a4b0c70fa3252717cbfa27e78172060928bc49191ad8ec602bd738f1857c51c20bf46b366b16ea82cd4a68612d711e4784ec2e1664ac6985607cece7a7a5957ce12e7731c83f8f0ed01145851d39e1e8ee6ad58cac5510d5936143a821bd9939d3d4cdb2641d7e7a53123d5113bf36f4ab84c0d2314adfede1f7e5ee6a0fdfbc32ec82fd593dea52695c25674578053bff5faced8115ef5b9ac89998a93 +C = c5a753ab54d4c0b33b579722b44fc42119d1b4ee70592231e5048ee8d90818e3669c7a2a988077dff171117853f47bafb1bc457c7550d5b72686e69a11482acbcde311367997b12e94b8ab861657abcc7da51549f211a3ab69d4118d13bb2693b7ccb40a7344c6bb87a06b47d29be311ba8f3b551d22b0f535c5bbeccc8237bced26ab4c346d03b62710236db87492e33c9e76bdf2a18f0d4b9088cb2c487ae5c106afa414d3d7f9a48917a8aa3ecbe2027787ddeee558b31c5031bf71ceda4164a609d0eb1dad19248ea85c8c5b4c17bc5f8c5323f1cddf6b17085e52371f65367ed6c00d2f9862732186dc552f390a3e52ecf0e98e9c3d7739c99e201cda38a4b9c08e430a9142c40e26fe94d54e17df84877077315fbf2cc2f73bb1759029b2e7f609a245fde204a322a2b05f68f233d025e06721b53486cc2426cf631aa758a6981486784df8b11ea8c3c69b1c80b8f1d77e39c828c5d58ec61c48a39a0331e2bd76a421a383fc6e6a43d596f7ed48f3e8670d4a9ab81e78ace366917541618488a8a5baa110db2df9ee08dd34eedeaaa6344fc62346384b58fe237e45f39e7134169cca9513a04c1d04531c3c1c523693658bec81efdb74589614466ba983e3defc410041696ec5e4b95f86bcee93d08335eb2436cbc3799aea0e4ff69013849997c357ef4912ca0295b83f80780155ce055d3aae356cb4a7e80ec5a6e51538ba19d08585fd COUNT = 92 -K = 282a7374ce336b7a09b9b44eae7f5e2f -P = 0219ea959af6ffb8fea85a1b89a32d19597ea81ba8c88bef08c54e357aa6a8e22237a1470b869fc204eccd36b2a9f1e2c1f50443dc5019b661e67d3787bff55c0a68e993b75274f70d2be123881cb91e24b3e9906b6b689830a2e7c90ebaae5bf0ef30a66a -C = b385c71fe82ac6c70dc81f3eee037c471440816aac239cb56a46213dcec8350a7994b53478e0548b5750836efccb5c0bf04ee0a8486c4e45f8e38383c26ea4f526feb4dadf61229dfb74db71f1c11b5adb36e4d6f0c63e8f87bc8af5ecb5560e2197a1d3980146052d42fe4ef1aaea26 +K = 8a00d21ef7ae72dec9790cdf59309b2c +P = d1f0948d52bca69a2a7abf2b7f1c8cf084a0b3b08be42e19fc66cc7b4af1e676a8e56f29706f3c069f09ea966103c6838bdf46d36fba194c5d68d00c14fb8e1278dbc65396eba4735af6ad1155b985877b3d26757c49d5960d300e1d9a9a3bd13a0e14dfc2e557c55af43285cd2fcca163225484921afef2eb5a25740453320369144fd73507d6dd07cbfc3832684a478eea3139c175695cef3b4a5c654b0b609e2a20291f8c8d1a10d7cb894ca9f8471cbd52275e45cf6cf45be0ba799ebb38d0c84ef0373c6cd38c6f4f9de1246afe53dea6f4745e814b3fde0a03e712babf2dae1f2bb11089a8f44a591218781f66944e196cd22e2b3a26864790c771bbb10b31fc9719d89ab2284b295159b04c1ad47eacdeaf5f8576b1ee40defded6dc19f73407d2f24fd6730b1521fd6033321514d8d5cb80df0c22583cb2eec766b14dec02d31df85c0c1a5bf7fe6ba381d3d5757b0d907d13a46310ac74535c6a5425d9b514398dab61d968f0382c91bf5384ea9ed04f0158907ff2b9528bf90cd591d16006507605773f304953fdbe91396da7d9ae09b87b79bf2faac19f9c7adbf6ad15ad07c1b48496ad95287256a2b0b55aab676eae90c7ae5fd77c378282157056e075a5acb7cbd6eaee3ee7889485a6008403a46d4b5a06c3395f4a948cf48b0e519c313d6038ae5a688dca9bcc5fe8938128d89924d46c4afa61cd3df5f4e +C = 420c3822ec99f4bf0ebf1af0f5fcf92f49eaa3a125166c8884a76f46c616095657abb9fb32242305611553888aad9ad7d07cccc0e8023193dcdb307f26dc29b9fb98e1b1c7299899590833a7697bbd1f460c91fdb3625e54a9cead4909e79c7093f777525b63efa5dd0b2441c3c8c0db5a4818523f05ddaeb9af6682912e3f34dd8581137e901ad4f6795fc0d49077749115e3058c43365aa49e6901589d00ef9c83455816b53afbcdafe89cdd419de4211604dd7d7a8a0aac6d51eefc5524ba7e2b355b987f0c362acaa22e476357565a932663f9a08c29df264d4c9138856904e9f5d9d9317c27197fe21dc5cbbf6ea5c2b3c36c78017668fbe37346faccd87d87d94a81634fdef0df130876c9f1fb5640168578a2a3f12d761e73d6e7f246cf16b8831a7947e4d2c2053405cb4f47bf59bc6b531be18d018eb9be81e4ae351c78dfad63dd3a351e3a6e67b1e0b92a3fae9e7c432a63017a31c89ab920bc12ee1fede3de0f8b52abb6dcb58e1506c97d9f6769435de4e60a0afbc39621e8c0aca5d195ce0be4739de8daa6195e299b62daf75914c8f76c66ad844768afa71b9b53245a3632ea9d7a95d0a549a3bb4049c0627aee4ecae2cdda9277de10f56d692030af40b7f13ee50a88221dff3aad6fc54531a40b9c9aee4bbe3a40d72bd2494ecfabfba875bbbe28df3e43e25f0d0454f669c6f6bbe55c564ff643eafd65f708e61602c13624 COUNT = 93 -K = 8c0fa5e7184cf353b52125aed8d25cf9 -P = 2c500732a79515b814b128fe4f964ac2afe82067a78d06a28ba48975fbd7318059209f62450e35dc83c7856c3634349d77bcbb788a7c6c104861229c390ffe296ea0787ff458879094ce7e99509baca5083bee8500447d80d3a8a18b392c3f6cba9abf31f0 -C = b500a4c68345939fababcfcec9c0908cf473c85feebcda217c3aa171485e5da3036d43ec13ca3d210052fd266a30e8dadf0c73f1562116e9ca65b4d9005c6ed736e398f89d097d67d2cf6563c8c3de6b422979535070378c029e8be8f07b7c336265a176aef5aba318e0bb4610475bc6 +K = d44f8a6a16aa43118429182cd6dda28f +P = 03425f915d0847b24adfc5a0cdd5779fcf482acfcbf7ae428f9e7257e4ff4d2912159aa2bbb9207872f21745f9e043ff4aaf9f117232dc47c8cb0c9fb37faf3aa276ea3d8ea6b83a1ff3c4f2ebe759999308f41d7552636fb8646ebcc955d56c51bac0100080f41a8d5effc53d3a3e7b7aeaf38f84e16960e3a77bbe538fbbff4abae85e9346d93be40067d1661aa99a5fe9b6da8b6cd90b660c518fcde191f71720a99b1d17c52f762e76a977a174c6611432e7542aac1b221e3736762557f5b0ccb8626d4019c05b09cd6b8fec368b9eda9134ef834846bb07504b24b76a44834c47eca71ccf28aac31f1401887dea1eb5084579ff6abc0d11ba1d195e6b963c5a683052ea48c27a675b0720aacfc3898adafe570551d700bb8815f531f661efed2525458f8a55fd655095512706a56f9bb88d6c6e8228e906ea1f5227deda47ef3cecf48f05e308950d2e173c850f6330abe6d212c19b379b8cf4cebb5c195c90be8ba7dae5b9393a5fdb24173e7097080e14868b9ead129733d37ccb9ce59dda6dcb0ef9e0693dd4c4f4908d0dedc5071d753472e0099083c0e0fb90d4920f9e7e918365e8ea346e7ed1c28ba835d4a5a3ac60c0769a938f2de1b06d8c4df19829f3d3ae9f777b19a0405f44643f8c47ae6e15f8e5e08c709fee2a02b8bcc005dc3fed521495cedc57e3f949a3e38ed5581773866ede193bf47991dd1bc7 +C = 330d6a6f0d2b05b47e52605e3e36529355815712bdf9643b02b15da5364ba495ebf67124024e893c16eedc2fe7173bb877ce34690732bb259665d0d91d64706997b466e4fe934bdd58265647e7e6aa0e92dfc4be8db85b465d2e0d8cb07f0de4b52bb95f92eac6c28671edb2329f3bcb60886adf18e61ad8aa6cfb10f0aeee277d3e170f9ea27cf08b680dca1caf4c72b3c5290a4faa64c358093f6564ff54c86bb873a8f992b0c54a300ceaa289d101f4025dc2edf699e3709eb4db0d0a85cae852a6eb86de23388e079f2a06605b3eb76c863a78cfe1e6b67f85b980bbf99299bc09b0cfade2ab717386aba5ac15ae510d715c1c9155de79b4a2117e4c2102e40c9bf5b7f33692be3429df410baa207955e1c5842c887dcbce6901bd38b81be9556ba9d676c0e8b36c27a0c177fdb1cd687dd758d065f687866d952e3fb5ec7851fa3e1f07e70ad2ca7289fb4435bbabde23eafe2e49fc57caa3c99aaee77f339a45b7381654af9a6bda0080ad7325382321d596b91a2c3ee1fd3881ec67a88a1cb403b0191526d784ec5dce2e686d4c64cd07ce29cc8dd4ca3d0d935def9e116b2bbb3bb5c04500efb3aa2cd5133a1a1da7991017dcb73ff8d38b4b7e4c53c314e3c960c04a03e317308b425b5d2812c2452878fc8d387bfaf9c30477bdd6afcf95e6e83824e03fcd6962fa9d9b1c18d897f8adae3516a7ed07cdd5cc7b7cf07da64cd2b974bb COUNT = 94 -K = 7cef5b18a37efa5f1e176914d2fc636d -P = 93b6ebdbc35f490446135deb4c28cea54f7bbb14b8dfbcefda0f49dba06536096435d15658d397bff0764081e39f2120587e4bbcf14dc7462344c952e6e81c57853251bbf11191950a668af85e85bcd2c3f50fe04da8dea61da0d141430ab958e7e065508b -C = bc43bd69ed7ca39dc8ff61631705db3f5deebecaaab91234cafe8e5d8c603ee527d26af7fd9aa4d30991f93c7514f8d2beacc784b1dc9379deb9dd375d7f581f5a627f39f0b4db8893366a1aaf6e72d7e653aa80419824fa28b1e9d69040942b37dbdc54c227b535f43cb2f81d4811d6 +K = d07fff416de039511764ca5a9928e80a +P = 0d25db1de42af03ed338c0614a53c937419832f42c7e64311b0afbf40edca8dad9ad0a883b9917f235e40d542bf4d7e7404cd05f9520de3533dcd63d150623b970f94789917d606230d81be869f79171717b2f4d0cb428b8fe65d78bafef428adf4e0172e3f5b04d56941ab349888e8b1ef69a3677d1160f8c280bf98285c1eccefc19fc5f2b138da514ad17acaed88bbd168d05cc45777b4fa92135cf9dd4365b0ea3533179cfe9f362df72c78ee4f9f7882dfeff512eb1f22bd000220a4bb2e91250e2da56da270cc6ca8ca8fc13f2ff6b957bd93c183e888054418c22ed04c3d18b223f1031a3499c0d9c10301f2446ee321d07820f13c58e1c61f081c8a1fb7388b8889191fb36f642c63c35510a561d3bf557281fd36c29d5cd2bae453e1297393db416a6feadefe03a50a10c184a9bffc5c14d40c717b6b53d6ef52b2871c8db517b0d479235af12d4c2493644a45a107c268511093d9d995eafc451298230e37aa4059b240d2bab2149c104d18f3f1b80555e839cc57db528d246bc65e03932250acaa6abe49cf86eda090b30ece4850fd4ab4440f674cb00509a970029947f4b1d2eee54208e713f2b7e2202b5d50ff33c59bab1b3c0dcc2e3290b9487a4e862a52738b3f8e5c4d766e4ea5c656e122db374ecf3c91332e6bd271fbdde2a91b84ebf5ed71743b4fea28bd76407319f958ef50150a8536325e09bca94 +C = c653aa0eb8be4934c2ea26003680a3f2d380022f46290e5130cfd24fd6a2c2de44cd63dd19f9586430521ce655eb74c8acf1e4e870200765f6d73ae41af9105010245f6cc0b3a8d82f433e00ddd35c9e08742d7af1ec307a85b7d5d45471abb54b188676d45546215a6d03789f2375ab9e5d7630913196b620d66b35644eda8e216d3cce17bb76bf340a1e2225986f730885406be2d0f69a0cc3d5365526b0feae7eb2ab684c61a19d5d401195a212d6dbc24d498e24d4f92cd8b49487f2259da8e5b45f7a4bd4f61a92c13be177ed9aa69413db91bd5fb03e5d11360d1dbfeee969cff2bd3caca3e25d0f28f0e35c60a57d359b431398130e6da92729ab8828ac418ab736e5a82632baada860720e376ee52065ce3f8990300276945776e548681ba1a8b73e289c261dee66e3a601bc115c381020e3c997ba8123a7b17daaa055d1bb412ff78e1cf6a5ac499163bf30a8f7f4a6db991366c02afa92183a0e36c9631085e1bb38eec71efa5bee3dc8684327bd6ba9710cef73b3fbc67534a1b5ebc56a7a9c6501b434cb589291e09e955c09da45d6cf2727e914b6ef1ea7255b2957d29105e3b18a53d3db18ac5d621c7341e0fd6736fd967b34d7aa8a9d6ebc738d9cb3635fef88d2190235876633c1bf5d1d3783022eac30f273e1eb1d8787aee1a63f310e4e5d7dfcfea67c1b3b6337845bba8b95beee280b0a8931fa8e59c81d449006bacf07 COUNT = 95 -K = 7747b0ff5d6274f84c9784424c789731 -P = f0401df2c63c49c9aac1bff886b7a7d1fe9b2f6f0cd7501b8c458d2d198f6ce795d35b174b66efba814df247033444ad3ebb3ac26ff6d874adb9435423e942102004a1722081fff7a40986f4da2c3ca2d121d51478efe7c2dc16809bf96f1b40cdb47c3be9 -C = 86080380369e6b09e5b43d211795f3d577b1ea25ba432c3ceaf5984b495213049d14826793012341be539ea4f58a23674268f2c35364a77b2cbed79681bcedbab892550953bd2c617d8aa3d93c90770e83ecd50bbb55d46b0ef9075dcfc8bda2696f116fd32e4ca25235b701f4d913cf +K = 63569c38bba32f8b5e026c7fd33f8271 +P = 03d010a15b49fbce2fe7ed7eb2979f3b01a251ff243a4e72a32cb08dd3f9350f36ee731a2344d2f1496cf9d458366052069a0200973fd84c78047cd59bcea715f0717f0793508c0ebb6dcd668d48f31154170f8e816851b0687c822c3399eb0fd82f643321579fe5c086df6229975438af7bea62e38a1ec121470d686133c0281d04626e05874d568c92511bfb9a1cd1907d7a3d115e0e0d1bcb2f4200dbf8e1dfe41d7314a9752518f6f934fb87e419757c0448dcc5f2aa62f6cc57058d12873087a1222cf0a6d7826f2077ae501777e8616b56d3c396c0d82cd4f57f4ef56a5fcfad520996cfc7577c03de4db73634730356647babe0737b7c1b3fe34a07776be6adcee2a515f8fbc6190ab5d62eeef6b1ba174c72ca94fed0013485f67028e5f2c908fb0e5b1794c1cca7219e00ca50e5c477d4d70f844da36e0f28667a23e98fa56f20cdba2007e0fe935da0237c042c17d6159b4771317b08da247c3fbf65192c90d7762e38b04e557fac8366e614eaaa9028f8a841858d2468a0ab7080e3da73527745a90cbd04ee97e799d9c357bb94735606566bd5a8e2cdb815953271744109769a2856823e1129f15c74c18e6a7e134001e6410f16aaeaae78adb01f95be292981fa1449d7753a1ca592656adb0fb7358cd14291e43d6a68545ecde81386ce24fe887b27c347c861fcfaea66a670a44db949640adfe7049f7f8d15 +C = 024af86ee271bf75811046e19ff93731b8961f39133238b7a7e72de361d9afb25136822fef4acf14cacc3cd00aada8a8f7f0e8c1168e77bc634607736381228d2a8807ead0005840d0c3f2126bb52df00554beedc3d87f90b21949ad41564e1989a8316c8893c9d721850ba2261b9ba0b8205b7a93502acdec15caea418744a5cd6c69c9fbd96a616b424d8ae144cc98ba848c94028263465482178a0ac716b01e333071d21d6f59cc0d4c728e5ec2f8e9fb397cd75c508285c63efd1a49bd81944ff141a2a9aec24e85f05f568231988608a3ddd215a918f46ab42c1be68af6074708a626f426c68f5c7f7812e9eb3b68f6278230c6c4f23b6514e159dbce4e22423fdc98dc11eeeb00599581004017182c6c1f0b0f8b01d9587099ad94022493da0823ff6471b2ce58f72dc8b018ab1b66fd112ed9c03f3966d3d375a99175a94e4f824169a943b531779724674518239c86eebd5b4400e6c0482ba62bc083b900cf2198b16c3c4270fd64472695e56154056708cdcc3604ed093c6eca6f621fc1a51949353f60efc488d1a9f32feaa8b0d646fa843dcdf7fa9e26fd0717ed77f1e65e3a7a28a3aa2f086fa3fb34c562333c281d30136254cbb4310863137d09920b83a048543e8ba5476f78de499933e5f388508d5004c7d70ddfd505ad917442ae1118718febc3271a82aebc5d1dbb3591c3fa77090a4d616ad6692b08450ce1b3590973819b COUNT = 96 -K = 061eecd073753ca93ccdaf54628cb05e -P = 7c07f1bca47c0d35b37f52a56c633357035fe8705885f83c0f43f8a5c33327e17502b7892bf7de70b17ebf620ef84986a52092c4ccad0ed18828521ad2a6cfbdee1c3f8003281767a5617624a127014f81253f0f92f409ba3c8502bcdd6fcf9eabbdb818fe -C = b5fbc9f36d739338170fe4bec9d4c52c7f1e63fd63e4c1e1b7d67b77a14c1de8ed31c1dfdb1c0c860cdcf1695d728775fe12a2a9a697009f89799f5e0666c5a23c30fae92f078a737852f44f68bb638d8c1e86c214c3215aba9c4d9d8884f496af79c97a176700780a367bc46d55e7d0 +K = 10d054765d469802f192ace33e75fc2b +P = 675d8ead9454328545ffddd2af9e079519d5a5941eb2fa6b746365fa3053f2314ace8575dbc3fb30e74a8b44e58ac23bcb49cccb1072ab5f2970b350774ce1fbb3e5da771b5182c63c4abc39736fd8ec6d7687c40cb3c067475d74bc3375a77ae7d9f6cc26873c956400475296495a35138dea352645fa96505c60eea0d7cf7b62f597b6036f160cf040414489f9dddcc57808c97504b025f84491af597b9137f7ddc5d48ecc36a1f826c99f6c357d2800fb413afe8df7324be2c525f60937d61a07b9138785aa47e247f7c94d4a19906916a2bf8e3d6107edc4f4e97aac830b845474556dcbc9a834f186b3b7e4d400b3c17c41cb8b04da7a375735fb2dd6ae57666a08087b4d494b5fd61ec643572b2510ce2185720b11e7bc1abc0789b523bab88bdb4a5ff7d5c145faf57608fc18b99070b735d713f1c3ca56620b21f0efd6ad64eb8b2949756ca0421224cfc7037cf0942132c5257b7004071f8c0218a1e70bf100d836ccf39a4baad6e0e5bd64c6d0b76faae454cd68473a5e6667b260c872eb5afa3b301808be53c43cd5c2ff7b3f21d95a55314219cca53e4d9498352bbaaf92c110589431fb2897711dc689c698322b8b0ad533eb59a0d8a519d92c6739833a3037c97b5bebc47e837fb33033bb7b5b38a2979513e73ec51543d1fa68444253a5e84ffca3b15d63c410d6934a3b0d9c36a5400d03e3d3f6170cb1bf +C = 6dc97573b6353f61e8a272b4a48fb11e98c86a7715f48334ea7594e95247714e3134961ec258dd7110d320d37b34635312634f2f45486ab8ae641687aa48420e97bb9c7c9e78ee3ab68fc5f9210d82ee31d804369fa8ced9affaf8fbf3b2d592f2f447013ce67df99799aa87e8d44a2f7c54aa3f58aa3a4027cfc3b6954fb2344b82a34efdd9e0213cc2beb63758f1502e5ff4b31f6187f591c220fef37fdb49a2bb67898c2df1b24f6a685eebc63b601f4337d14491cc82e58746aae8edc21b5def9a2c6a88391f8be89ce4fde450e4077e816e8cb27371c479659f5aa3ae9096c0eae489d06ac71b8a0e90f06e6bb051aea3afbda4205319c811438c457972939da42ecb7e0657e1bdb223394ef8d5ecae9e98bdbd138e1a10604adc5a47ce6d3783cbba30629ebcfd84a0adcceaeda5dedba1aa73394bf5a1b1a80c55c4eb124822854e833b3518f17f95a1f8a0ac7d9b370298c21b33e6e61067a3df680747b8f414dfb21b4ed8e5b822b1079688832de347839bf3d7d089be75656d0140b17d9a1d2e9f8b6f1699228bc26cbf5394c30fa52d9a5653522a777b0eb33d5536264368c7f46a148fbafc1c7dd9d1dd071a96e54f14d4bbb6c2023a9470e472574feada7a3fd217d4cc1c0561638a8c5573b995e6facc0d3c30fea3103a55708a782d31b43b16d50262fc9566ed43fe51407833151e163929a7e75b3d69b8bf1545d586e6361abd COUNT = 97 -K = 1fe1ccd0f453b0d2543288f0422aad4c -P = 097c09b577a7e73359db9dee575c8e2980bc1c288e65a28b97638e6849bb814605e9b77db5596d405a030d77175c75503eeb15d966c4d198304b200075520a7997ee7f60983ee9ce1039e4329e6048ac36ea8b36c4ceab50e72af0bab47c3cdd4f1c088ed0 -C = 9d8dfe05173ce952da893bc3a14de41a5719d65bbeb0a834c4723dbd1b84f6a1c75ec0028b8e92324fcaf770465dbe9d44aae256a1aabbec30974e61017ffc2fc5da6815458416818182b921908db2ff3e9273e8e79bb26441f359aa91e982ea65c3aa4beca5ac6488897f8d49a1e853 +K = 6d9fea065bc7ea25bda96dddf95f3c43 +P = 0520ece03c949793d06e5dddbe48620f01e84338193e06a60c5e451e267a457fe4277b7f17e18090b0115dffaee1843ead1e9dc9e2f2090a671e81403aa0a59866e43db24287648a67579b42c6a714e29a72d75f52f0abca873ab3ce2ea32c57ece1a94434ec13746ba73425ce1209cc965258c5d7ddab8285a8ed3fb9e024f42ef73fff85a9f4b9f6c8dbd20a3c7721fd4b15504345049b54dd8ee774f91cd34c20f229ea0d4388e488afd45b460ab87ffd72d464a507472c73f485eaa48b10bdb3364b4dc5baad692e54c15961a2340c147b395f86b56230aea960820c7b3632521d53a504191d2106ffcdf878f1a6e1c3672d2a71b600add554d35f5d4c12557a781b98969944a719f7c01954e17f325a30ecfe77146bf2c529eb03bf4ddfcd9a365137c20e0316540f1d3718aa8b613b7601859f74a1847cd760ac94d32a9a8b6150d9ddc624a671102e01f43e6ccadd99f0a142d70c9d0a8c7510e613acf16a75c8bdbfc055752c07e2edc517a98af5045d3eaf5554efd9e1c4d0fd5c3d5ebf7b03c0936fe62bc985550d2b7c32927a0591d3abe3187576c8751dc9b0c303bb8b0c62e18f0adca6d4ae98154c7f0375e12985ce64fcb96e29467dc73b1aac66772a6199de73872ded2ed3b2c38c0c66a630a2d8ca37fa988d2ce7af5416bdc0e63df5459de3e9e0ab918a864db76e494f04d8499eb6390833096329933c +C = d722d8ee2f575625d7d663042b4ef96a1543cbc9ad595bb08b0433cd88b711e31786f4af695f8893a9ae980a6c177cadd64e863ace4d669ae9edd9b9ecb157f50677e403cc4d38bfb41dc10ce350aa03b6c90429131894ef9f060ca2d6935502b45043243d30e318de1d3d04b36012d62342502c2406978bb1626028c0f0083a7fc6af062704470e82630585d2f623e9d96cb7a4e69d3261e741250d69a1f8b41b1cce3c1797bffc401b2e37b62447e11c09748671ef559b7886b8d3cdbfa3f5ae6216f9db57739338e18eb6a0b77968ebde6a1a243b721da36200059df38036c34000c135b0a5519ae51547cfba071cf013b3b567fcc7898595809edae77517afbaab0413826ad00af43602372aeb03f0fbd5e5db79385b759b99bf6d10fd0d2756aee3d84e2b599650a3202f13eb11dd9cc338ad8eec011f1cf90cd63015be7dd31f85c544f9ddcc75bf032ccc23fc795fa8ff3c615b9070fba70f750a85ccfdb7302c5b2154297a8941f32c227bb7b4f93ce1a1666055c167c240a20580f91bf5aeed92f0b8fab73f814b6068193dcd3c80c0b9ba8865a6f1c2fad4a67f33166c2740fcd2e4e372e4783ae91355d8e1fe8888e5a6d43435352e4677605d1f3b346921ae1eaabe44643623bafbd5175c482a659166ef609f39b1c21fda90e962fa7c8389c9d6adb2861d3dceeaee7f7d005154dd40d6493f15f643ca03f67891f25199f33562a9 COUNT = 98 -K = c5a89587f478293923cc1aacaae87b61 -P = 27b4a0048103877945f277efcba56a1462e977cd611a5562adb3b738c7ce5d99a6e457d634a5a7ac52b6fe58468f3cb6acc70ddcc84c88b64cd01b0e7b143a3ebcafb961219f27e6a998d0a9f836355f741ab9cdac62098c54d4a39d936bd36c1e149b4b8b -C = aa17d9740d5f44a338c2edb8978db951358981ca778bf1d1519b2e9ff36247677f5c1665efd80278008fc0eda0a511c7464162f43dc963bbfa30c8cf84fbc14d1e3abfcd833a802852d32eec8f6ad995f933d948949be1fb341d0610ce86d6baa97979cd659b0cfa29b44ac665d1518e +K = 679ae619d0969d0a0bc4b4577b07f8a7 +P = a7d1b9d32999da990ae06216b550228224ebe99090b93311b93b5520f450bb21a660bb45c3998a928d08eaf0cc731cb876f4d115541071ec35d05e0b79b4327cab49dc2c48ae15a67242dfad2da70b00839e2507a1625a33496e518748516f0038fa647f9ab5c98f7a190ab724b11a0b9b4d5e50aa9e7c9c3bc82d2c08d3cca949a20e9f29809fa248e65871496f8598475d88432013d1994e235bf405de45c3250168338e31a255a773ad4a453e22449aae8bc81bf93600b1ca7cf6df796d8396fd54aa1f0c33033be96054e4d175fd6f9af67f123c41da7468b22dfd00f9c17e598ad92a9bdf4d6a56c60645e7033620e4ae43aeb346f09be55a51a7b86f96f4790b51536acbf410c539e2c4b51415199e93b826c6aa887a857f8204953ce86149cc8a9be79d32f6a17fc1d0c480e4f4f41535e41eb8f29d55d98e7ef2615dd127496965c018e7db5272ced158c89c37a29af3e42fc0b33a0fabd4154168fedcddc2433d9f84254d1efdf58540da22a63323b67f559f23a93cb9245eafa79f91b439f32b849286cf1f95415bc03fb2185a76e6484291a65b6908ba87ea83ec4f8ed0a971d59d600ba16baa89e233213cc8d0b8c1fbc75c8a56ba949b7c03be4da96483475c78e86693ed44e2c1ee4f149271e37f6f842753af505ccf140c2d40ae51efe1d65c98246582daac911ba753010536db083f0897c7f83a3018d117 +C = 941d260afd29a51263235e29a11627d2c8f07cd3ee3f39b8cd42312618f7b7bc0394dedc12abf72311705d43ef9cd9fce31e8a8d6b7aa3a763dc872028604c279ca4acb6ecf1e28584d6e892af8b3921d72861749d182d71cea8bab2ccbc980fc74f652ad97abc2349ebd93dfc88357fe0071fbc25475e57c67c40fc19dcfe4a2d823f5332c7e939d65aca77a92981a3b963cf8844a73e022b341428fbb0525611e4c05b4c9afe495982063afe0642993454868417cecef2e0fc8a0103dffb7e88331b78be04490a4d855473f65624ffb5a4ed3c75e0128562305bbe1626b764b868036dbb10496f49e232938caaa5ba34b338c9b2ecdf5656e71cdf8c840d3bb3dcdb1512d21cc205f07cb677df10895b9990e13dd6d8545b144b4da81a327d83eebf3d832e7dcdef03471b1b2bb0f91785b29c3d3411f0f2bb2bc59e1271cd6161658fd291ab40def4b651be117c5e5b6f27f9dfd944785c4fbe7aae137a2dd9ad3fa08a1104a2fcaebd07c63fe72b668e0f101f1ad7dca0b16403b2d3b35fbaf0f8e97403e026d6b8a46a0045be55150a0bb1c4e3680379bd3692e42cbcdf61d78303921dbff928d9147eaf4504fb857f7b3d2d92c7fff55c4c94a44335ecea6e50b8c17e4ccf42ebc167b5784dc6f51b2dcdf7e710415a1e4d0237bf0e3bf8000f9288fdb9c2f4c7cd4c71a2d526a70fbdf866fefb94f19e581905076f2626d0161a89905b48 COUNT = 99 -K = 432d01363b6b2b9daf3ec05b25858213 -P = d1daa81734a822c9d67381dc9fe7f3463d5eaf02224c00a8fd18205f19431813fd6ffecc85112363098aafca466067a4a9a4d9c8600a98f80b0cf2148f1f90d476cf596592cb94f1d676ad388f2e61b1e01dce178f79390f702dc429e7c9d20d41aaec3c2e -C = 0912668aea911309d831607bb402c10de030015f0cb78395b9b417483bfd431070c4371fbc064376740f9e9073aedb58466978abbc2194f2b2fd01db29f7839dbb1506185906262132855e24c55caa984c4897ed244a5a775c38314c5c5838167e53e4956539dae898689b6e187b4027 +K = 76f37eac56a4830945102ea2548daf4a +P = 236fe4754222b8d365ff2c86e5d5e7a37704361b9dde550d6f7d9efc19b0ff2171db8b7979e404d9a80fdf57c122108d83d09b9479d0c6c210587c0c6e5efc8356e50dcd4f87e25518ee8d3fe72d4b357b4329c009cf1a838d2e022c97dfe9cff9b55df5262bbab5f48cc5f7a51e59e1ab4ab08463dbb7b43c3fe65372d2453bba96c245803df76f104246e01a5bc31053827c784fee50d0111423704985f1db8dad03aa9105e76cc509557055d20f34d78c7245d8003521cae7a74d5a9de9db947f3669f41bc0581c6c27fc3aa6b90ede76a5449a5359eca187d418ee4949ffc415543fab451eb71b3b92e43450a943683bdb5bb16b06b12ef356e061206078c8c4d69b0ce945ee8cd6d5008400c4460f74e3a1f26d9e89034a190cabf98b84c0cc35d4540ce41a5abd628179ec2d087b82f4d3582cfd432a0cfcbb0684c6512ff4900979e3f28f3ff4218a101817883a2de60f35262b6f82173242d06a01cff339abe314d8a7c1ed80e721947420a5e5e5adf71d2b39abb0e31b2bfb1f4ef9bc9cb60f2930b48a654612f49a2d52537cd966eb9ac8f23d32dc10167c2ba21e8d3ffcc91f0e2aef73f7583a30c2d1417a4e94f30fb1f4626e95a63943a68fc615e122b39aeb6be5b8b55580c78e6449ad09ba86d5dde97c4ab9853fa0f98edc675d23e192cbc96f0d678c7e3f6de0292a26d939aa97ae98b44c3b16f53c55f1 +C = ef9c70fdbdab68d16246bbf93088cae29efa85cb4c5b00b4e6743e9cbd7d714229ef9f072d42f441ac66eb2ec1e71bec35c2555b2ea961403ac9d0fa8b3a06b3a0f897afea0e7317caf82033e2de04bf6cdb5269a5d3cbeecc2e89148d75dfadc31430c1b66cc285347eff43e8c91c6b245fcbb65cc33b599c623b1823c79af39b0bb98440595157a90fe045cbcd6fd2c240869eb01d867d0eea7cc08deb081ce488e767c1fb441020db9416e0887e323dc7cb12cf26a5c6be4a9abbc99c207a02836f11f32441c5cd8c1e298a0deb142f2c6eecead290fbe67edc1de748dc56317cb7084781f29f44df282171062a4723d2a9d189ddb7fb048a56a48e607cfccacc7b3f351acc9b6d97607412a8e3d0d58ae40d6e8c9989284cc42712113411f5c7d0b19e7184418d33c4f70742316a49566aec1b7de8d0514dca97111d571f40828b3ab097a708311be10847db08bac4e69949d89e8d02369ec13cb06a5d9ccdfd2afdfe291e5d56b5149ba7e55236925eaf322fbc50e942289cbec6b66db924aa0107a69002208e282b4314ad20d60b67c80a4632a630e014867a23fb96f13aa5da5ddb3480e269d7b607ccc6e832bc1f83bd6e4553118def549693afc3b9b60038d65956769cb74bb09892348fcf1daf5563e6592e11b48d6b34914b1f6ccaf26b46f2717e284ffcc27e8c574f8b8b9690bb66c25d7c5281ac36b75e2ab3a96b253c0008cbdf diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128_inv.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128_inv.txt index e04cacb5f4eb..89bb5a3d4622 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128_inv.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_128_inv.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AE with AES-128 inverse cipher function' information for SP800-38F -# Seed = 1181b12b1bd48930f76d8b1ece307eb237f96be13b81f004b831272cb619f6c226c948ac99600fac0f0a6e26b29037190d6eec21047868feb7a7d4ab2d651dcc -# Generated on Wed Dec 03 09:15:46 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AE with AES-128 inverse cipher function' information for test-files +# Seed = e251960024950f166fa025316c848c8f28a2a0d71dcb57f53cfb46540a131e0ca5faf12e98d3d18b11a9c647080890887e8c848d02bea40a30113b9c1ce2d249 +# Generated on Fri Apr 6 14:46:28 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 73d539850c2630959e05c3776cc0e41d -P = cf -C = c290b8b68eb7fe20a130f22e194f9d2a +K = 1c321a356b0ee25e30de2d618c1facbe +P = 42 +C = 3ddf22da3080a1a5252574c76f833790 COUNT = 1 -K = f1f0fab6df15e31722f8a92152052363 -P = 1d -C = 8526dbc177cc5cc2815268b69acfa32b +K = 0a03d2dbd7d775ef0a483bc2bd7251b8 +P = af +C = c92b4f1aec05b24faba027a159c1dc09 COUNT = 2 -K = 12b553d9968bb5c4974d64d288150a12 -P = a4 -C = 490d33c4c8c3400854881ce18157912b +K = 24c25d79c8e113a10c86ccb6324aaeee +P = 32 +C = ab22bf2bd12d4918527023bf16977ba6 COUNT = 3 -K = 448ccc86ca4e21bce5de5b429969adc5 -P = 87 -C = 53e55e49f70590b48beca6452cee429e +K = 8d3023e4577cd8d663470f896a1385cc +P = fb +C = 25bf354b5d778ec8c98dde2716b06be1 COUNT = 4 -K = 763835b205a08043544d16ea67d8a6df -P = 93 -C = abb451c35da9aac11f59ef0898837173 +K = ee9150c6218557f4c9b6cc1dd24d3b4e +P = 71 +C = a533dbc604fa6419494783eaec665b34 COUNT = 5 -K = 364a7981734d619a2fc4d5733945840a -P = d2 -C = 863734009cd4919c34377ba7da256886 +K = b4aa5b3139590ee75308fead8b837909 +P = 92 +C = d63261708955fa80180fcd9af86477fa COUNT = 6 -K = 2a82ae7332f2a76fa1af87337bed2858 -P = fd -C = 1887fa3f0069fc9d56d291e39576300b +K = a67338de008715e018c2627c4cd87496 +P = da +C = b67f106582e76b13409f1cb4110ab741 COUNT = 7 -K = 2dd7a52701c7fde5d9700830904feeff -P = 90 -C = 2208f4fc88026e7165cc0b299092e652 +K = a24f4477cd35ac457998a91283ac0dbf +P = bc +C = 8511f65902f57a2398bf36a33a05c6cc COUNT = 8 -K = a85338412ae631a69336a7c3456c2c9b -P = ff -C = 802b9897483b5d60e16cd558bc6543a9 +K = 5cda2806fdbaad02382c7bbf14a9f09a +P = 51 +C = e4ea77688097768f2010f09a9b7f71ee COUNT = 9 -K = 79c3919cb67d198aeceb918f20ceaf49 -P = 3b -C = 0ceb9ff858298209e99807c9b8d41073 +K = 7e2d895ea92e08f31452270f21d6d2c3 +P = 63 +C = 23546bc2275883b6dd6b78e648b9de0c COUNT = 10 -K = 55c6b95b3513318f7e3c74477b850610 -P = 40 -C = cdbe8efef61527e96e76af2818a30ced +K = 7a8a5f1f0bb0c4a703435a00c81a751e +P = 7d +C = d000009bdb7372754e4e0467551ba853 COUNT = 11 -K = 0b1345be51d7e09be33dfe50225d32af -P = 21 -C = 7b399c7710720ff137f085c7a365e0be +K = 8f43fc3a9f9817a18e3754e01607c4af +P = 72 +C = 0aa21dabaff38f1d66292a4e76bf4a56 COUNT = 12 -K = b351ad6960a6d1d88fd98360d8aea39b -P = 12 -C = 59e5d9b27a7f1e1880b677eb9fe56d0a +K = fdcf3a5d81c51738e650a9efb2d6e07e +P = 19 +C = b8741d7ea3ed2dc07e6cc5a511cd488d COUNT = 13 -K = 051273030188c08fdefe365793eebe16 -P = b4 -C = 54fcab67fb5a0e2d46ac175660bd7b97 +K = b5ecb8af03dbfb715e81efad6c1801c1 +P = f8 +C = 063e554821941d625f3da6ee3e9dd1cf COUNT = 14 -K = 63d99393806f8b61674e39b3b2f5263e -P = 68 -C = 357c1fa7645984274b1e80497bfb056a +K = d19165d10e8b1d85b79cdb8fd92b66a7 +P = 6e +C = 6b801d992e1995e1d69f6a4192052a15 COUNT = 15 -K = 1b11269c045409a657df6afca0c3f594 -P = 31 -C = f31830582532cf5f751052878fd0e107 +K = 70ded88ecdcfaf8b20b4ddce36a7075e +P = 57 +C = 796d476d58f08f54116983b3e6a4a996 COUNT = 16 -K = 51b0d62cad3df5501a3108bb6e977562 -P = f5 -C = acaa9714778e4e365bc0c0adb40ee3ec +K = 290bacca301970433a89963a740c09bc +P = 7d +C = 7c7ddb1f2b8fcb285b4a83cdd54e7c18 COUNT = 17 -K = c7958d49e9b2f7f382f1feeccf415a4b -P = 0b -C = f04b4423396a455e0e971485f9bdf109 +K = 24b3a3e120957b55e4a6a1ad240f9dfc +P = 3f +C = b56a3c22a9aed5b521b091f7c2a483de COUNT = 18 -K = e9f26e5c04ec585bfb4548f0a7385793 -P = a2 -C = e8830d6cd725db706b2e2f2d6239b978 +K = 32a0563fb5f4495f4e09e82777fa5899 +P = 35 +C = e921b348cf908614803fe2c16a512c12 COUNT = 19 -K = 196069fbb5f30b742f3e352516e9baa9 -P = ca -C = 30cd475cf06123086716ced01a2f147c +K = 0fde2e216ccccebaa63fe28a6be10c99 +P = dd +C = 96fb7c6b19e378cdc7864dca3a4c185b COUNT = 20 -K = 7a1942f5632c88ae2d90d186dec8f32d -P = f0 -C = 8a264678616f0e0badfcefffc5deb93e +K = dbe1cc2b16eab727d58260732279b898 +P = 96 +C = 26faf0de14295372932f832dc9d1968f COUNT = 21 -K = 84a06a217fe481f33b0c473a3b1180d0 -P = b1 -C = 18d328d154d832314d94581bb563d09d +K = 73e62b09a567e2f4a5e93b96c0320f85 +P = 11 +C = ef139a658fcedec14fa72e2cb6c68ea9 COUNT = 22 -K = a02dfd0c865407bf1babdf19378c0b5a -P = e8 -C = 37c10cdfc6febff2e83585e67e434f00 +K = 982cd7fa6e7216dd9e49845ae47ce773 +P = 47 +C = 74e16541f979228aa96ee2c6064af3b2 COUNT = 23 -K = 445ce65ce7322d5768974f0e3ac7cb83 -P = 61 -C = 24fb85aede4e74021de8bb632401d290 +K = df04510de3a098392e694e20918a6f68 +P = 6f +C = 08aa3c6cea92f07d0cf12837d83e50da COUNT = 24 -K = 22d4ba0e112c1bdc99b51514ba1155e2 -P = 33 -C = b94d965c36a263a3ef95254cc05aee76 +K = c5aad594a3c518ad23756b66d37a4f85 +P = ab +C = 076bc9b7cc8acd8c3df6a5d254c2adaa COUNT = 25 -K = 9ad285a999d209d1cf80eff989119c18 -P = ba -C = 2573fa0e62446cadc3c60b17886ae860 +K = 40548bf4976bf6314631a681c6aa3aca +P = 86 +C = f00f90b058eca4ced8e9c1d1a5bf9f32 COUNT = 26 -K = 36f7c4e18f746419a741f210f1100c33 -P = d9 -C = 31b219b664520694510ce0220e881a60 +K = 37a55fa1cf95c2e92e287c9ea98ce74c +P = 13 +C = 2ba77a1934443edf13cc3e1a99b2b97e COUNT = 27 -K = 96b5389de4302d9f10b2af987b5bd95b -P = 54 -C = 2594edf95a0c56f01664201e9c0184cf +K = 93c34f7c3ec3b9c2d16aaa317b0bd18a +P = d8 +C = 61812de47b657f30a22338f04c3bb78c COUNT = 28 -K = e5fada0c964f05028d761cdd742ce741 -P = d9 -C = 6f48f0fd4c39de7ee86f074cf5e19dd4 +K = 73db32dfcc2a9b2d806fe750648d63d8 +P = 4f +C = a98af83b40ec57c525384b350aca9c58 COUNT = 29 -K = 40534ba1db4786233f1bdd78cb90aeb3 -P = e8 -C = aa10a81a043cac5c33c3e0794a8062d2 +K = af2fc2d4e9a59bab14c112cf664a8349 +P = d6 +C = 83a5a518cb808356fc3504b00d390ec7 COUNT = 30 -K = 80cfee01422f44b1abbbd35018bcfd80 -P = 92 -C = 64f24c96c7528da577a2cfec2a00747f +K = 8421c2b016a30987c4fc02c4bb45c07f +P = 5f +C = fc10f41ba4feab3bf1c697eb11e1719e COUNT = 31 -K = 14a5a08ebe11a0e8c5473c0539a5541e -P = d9 -C = 18e2673622be9ced2f99873adbf33473 +K = 026fcd59baae9d79d0e10367c41617e0 +P = a9 +C = 7b6225ccd83a888e8012259f6982c156 COUNT = 32 -K = 56c8420a1cc2cc9c5a466128f9322050 -P = 7a -C = bad562248c6d510d29e47540ed582ebb +K = b744da52a1901225ab1dd9cfa734f742 +P = c6 +C = 3882410f9e01f2406da61ce8195ee5a6 COUNT = 33 -K = a486baaee9f55392a9e63b4aeee0fa0d -P = f7 -C = 6fec4b2ccfaae5be3abbb5c77e0a0641 +K = 2e53cbc0e7e7c6d4066ee48d615d6e4e +P = fe +C = 953ffe93d6239bd3b206c339cc48d1ac COUNT = 34 -K = 67b88b76704b15dba458c97d38e1855d -P = 5c -C = a65f3328622375395f9845f12b43962d +K = a208c56391f59a7c6028c8c9d44cff03 +P = 25 +C = 21df0097b3d36dc6930b2097d417c5a9 COUNT = 35 -K = dfe267d092e202f23db7e59297e0d943 +K = 628b33ba32e23be1ed6965d4e7ed5fbf P = 1a -C = 9a9ce83455d83be09a6a4ce255a09827 +C = e78a0607069a89bfd185518fae5712c4 COUNT = 36 -K = b52dd4544f50ae5cdfd12b3a90ac8f79 -P = df -C = 6de4b967401cd873065647bb2736d215 +K = 20bee4bc763325b472016c100c37dc92 +P = 24 +C = e8e2233d0feda67a116956e88ea6ffa4 COUNT = 37 -K = 90a957b148814355bbec5380a45566f4 -P = f6 -C = a4f654d83091252b399bb91c8b3b1627 +K = 34aef6ccdee9005393c0328fe86f35d8 +P = 29 +C = d0f32c596325347dcd1e6e0048cbdc40 COUNT = 38 -K = 186c59a0fd6ad2d58a56565a95022f02 -P = 04 -C = f31c74bd6d270c4c58d51a89b1d991d7 +K = 0ab8c99f3b85fbe6c93a1491da2e5846 +P = b0 +C = 52cb4924b3fda3c7f72d4260bb671b1a COUNT = 39 -K = 74a3420f74085be77a49af3603dab480 -P = 7e -C = 21a24f51e9dc09ed6d578e3790524c5d +K = c54929c85b23a9ce6d1cd3764558c3ed +P = fb +C = 7a7124a3355ff54abb8520db1e7ffe81 COUNT = 40 -K = 586b7a2bb7e4751bfa983f90f2e9cbe4 -P = f0 -C = bd392d27733d43716418c812663c8c35 +K = b99af39114c3b8a53b068a523a95363d +P = 41 +C = 7ddfa1c050c646dfaa3f72410bf4bf63 COUNT = 41 -K = 0572d24a0ddfb37ebf04b52caf76a34c -P = 2c -C = d80c0ca1a1ad1219deed85303b84f66e +K = 0391e65cc360234c493595985a8883a5 +P = 07 +C = 4d59a4f4f92a1b78fe7a2c3d9bc7a2ff COUNT = 42 -K = 01ca43e105c428cefc42c8e5cab13142 -P = 1d -C = cd619b5f6800c6516c5c580d3d0021b9 +K = d6b20eb1de897769efafce1a1fd5a2e9 +P = 90 +C = aadb3ba011564d69aec0394a1b679280 COUNT = 43 -K = c8afd7a5509ce0f7a04be4e33509d3b4 -P = 07 -C = e00a62153f11160e0d6fff897452c330 +K = 6ba2e2f1def9d38c7762a88cf2a49a98 +P = f9 +C = cf6e53ff80907b1e5767dee0db0684bd COUNT = 44 -K = 02122cb1b53f611ec678763bfe0ffeec -P = 2d -C = d136c970a2c071ba6e616f87c56e2289 +K = a66e9736a2a5e823d1d907356def68a3 +P = e0 +C = 64faec9b4db26dd7c52bcad2352190c5 COUNT = 45 -K = f5612e1e53470876b974e06fcd8e6332 -P = 7c -C = 9aa434d87834badf8d12cb2659e0bfcf +K = 9cd7ec39398fc43812aa883216fe6ebc +P = 68 +C = e64974bd8b7d13b73d401dd3d4151160 COUNT = 46 -K = 66686f70482f583ca9142b63650df0b6 -P = 40 -C = 870ebd755221e00f7a006b21ad6faced +K = 16ce280f3c7c91f43eacc76fa58d2612 +P = 36 +C = 53043b9d5fe1f813ee5e4fa73e47ad88 COUNT = 47 -K = b8f8fc400bf21d7504d3149a9bb659e0 -P = fb -C = a8b3e6b6e035cd6e3a791e0c5ae18aa8 +K = 9d948aff0a0abadecb2374c2bbc6758e +P = 50 +C = 931284da62eee8883ec3b03c797e7197 COUNT = 48 -K = a68aacd4f86185b900f3e25a773da229 -P = 25 -C = 15f6acd286f62bb595c7335959386b05 +K = 25c0e5da210edc75baa928cd26db19d5 +P = 62 +C = 3720d6f4994e79075214ecb47403b5b2 COUNT = 49 -K = 6aa4143c962586f0a3b6d3410c7ed634 -P = 73 -C = ab1d4136f591c5a19e1cfcd81225b727 +K = 7aa1946bf40dc47d54a4f426dd7a4853 +P = 29 +C = 6750ab91e25f91cd506352fa8a1cffd2 COUNT = 50 -K = 85580aaa330c62afab5b244315a3242c -P = 51 -C = 993bda398521451938e4035c65d71450 +K = 81cad9b1d7d7df7b21e6eda7cd591091 +P = 3b +C = 8dc0e3ad0dc0ba233b0b883f2e3e3bd1 COUNT = 51 -K = 92e16a36cd1ff13e021556bbf2aec509 -P = 16 -C = 3d313d00863559c6c325935f8cf13e6d +K = dd1f5af710f25ce53ffc8c2153a6f1ae +P = 2d +C = c4172b911974d698af294726eb1a2469 COUNT = 52 -K = 6ebf2b075fa789c3e0f6a776584a1593 -P = ae -C = 36ac90124e95159d6a519570d385b92a +K = 000991f667fd620d158c68a00a3b178f +P = eb +C = b1c7d4fe212b0be92642a719ed4100da COUNT = 53 -K = c44c73d9e5f81ed0ecd4c876cb6ae95a -P = e9 -C = 594eb41ac782b945024e171bf9a8be29 +K = 4e9cb46bdcc85ce0dd0b17f01a50c01e +P = 30 +C = 90bf3ca5d11257ea5d70d082fdb97541 COUNT = 54 -K = a17a24bfb73fc93feb40a9b7ace76efa -P = be -C = b5d3665fb74f8b24b2cfe43ea089171e +K = 4c3cedff80e34218ae5b42e0990a2328 +P = d6 +C = 738900a9d2bd7db175775281470862a8 COUNT = 55 -K = 6359a9131755861ec17c67024dc5b20d -P = 90 -C = 7a84e4c8a6a57032101494486d1fea83 +K = bf48ca5f794c63ac59196234c693def9 +P = 0f +C = b673be7a18081a47ccec69929d14bb0a COUNT = 56 -K = ea204ef57f6c7d1e6e48f14a1e755a76 -P = 5a -C = afdd0712f5330cdb875876c958c1e676 +K = 3ff452f374059c8ab09b675cb327bdbb +P = 05 +C = 74fd289277a74a55074e6b1b04f6c5fa COUNT = 57 -K = cad3eafba91fb1f1e57f0d0069b3079e -P = 4d -C = a8f9f09add6f255b53154b8da6687da9 +K = 7eff40511b46a60101d5dd55c3b756d5 +P = f9 +C = 06372439df2c56de482783cfe947c0bd COUNT = 58 -K = 7dde34ac139c76c3c8e4ae51fdad20d4 -P = bf -C = c12c2c067202f834f277a985ca352e68 +K = f98612f6c684b4d4c93167c36f899867 +P = 9f +C = a8df3931bd47104bd8113c70d6a6dec4 COUNT = 59 -K = c426c9f7588a3cf0e0e92927d0ab4f74 -P = be -C = bc872413ea4cfbe3ab652dd72e16393a +K = 40a5a2f7d79b17d284560e87cfd983da +P = d4 +C = cd0925579335159f96aed1b58c75c190 COUNT = 60 -K = 41d654f67c93ff6a61129f636e7f877c -P = 9d -C = 1366c817ab779578dedbf7a65479ee90 +K = ec01fea5d892c3d2c96e101183bcb07f +P = 75 +C = 6fb0a060c2d19147a491545cb8c15994 COUNT = 61 -K = e6f1faac6a974718aeafda490d2de87e -P = c4 -C = 8f1d6fb102cae1daff344710a1050dd8 +K = b8e046a6390ed48a86c9dc2e5a47bbca +P = f4 +C = 6687137b700c988d8021e4ac1587280c COUNT = 62 -K = eb63ce6e76833ea88646bac06663af4a -P = 09 -C = e3ae16b0a2f76a26c26e852dd0085c98 +K = e5b55fcaed545918016fecb2dd4c823e +P = 35 +C = 427f9ac8470da3e3426fd02bdb17b101 COUNT = 63 -K = 43203bcef96b67c1b0a4cac78125de2d -P = 79 -C = 0799c9a3be2cdc054818b0da233e868c +K = 2692b28ce79f2ed9d206fe4117e952b1 +P = 94 +C = 8611d21133c18f9e65f5c66f80a82563 COUNT = 64 -K = 3e31a2a6dc03fd09a0c2f7d2ba0a19d1 -P = 21 -C = 6097d8eedc8c480503d65a3280416aef +K = c84a49812f39f17cead51b6079cfcc23 +P = cb +C = ccde96bfcf98bb099805faf94ca99560 COUNT = 65 -K = c616ca686b7e53daa97e5d8dc14159b2 -P = 30 -C = e39512b2c9e664488d27768152a82d13 +K = e44bf85a33d808318259e23d2faf8e7f +P = e5 +C = 05c9bbe3ded6ab5e6c380f3365a7d787 COUNT = 66 -K = b2c0d4c296fb0b11064dd275da3beb95 -P = 91 -C = ecf7d4e9b310c7ddd104eab3d352027a +K = 011bb1b213bb2319f70e63c8729cd73a +P = a4 +C = db31edea85132265957b5410e961a361 COUNT = 67 -K = e8ebfdd04cbdea951df8a61cdbf8e7a5 -P = d5 -C = 13890a26c78d03de4389946927aa7ecc +K = 7052226f7bf45d94636c65cb4ee44a48 +P = 10 +C = 1a62cf31db5dc861b243ea1781a8fd04 COUNT = 68 -K = da5ffd4c92ae6e37d5a83e7f5a19fc47 -P = 8a -C = 558af6a3f3f8f12201f11d4b1443046b +K = 3a3db72af51cece1a27f30d99130b177 +P = d5 +C = 086f2dcf16ecacc093f8eeb02ecc5ad1 COUNT = 69 -K = 7eb5f5d3d6e4cfb79c7a94e2d1e84915 -P = 5d -C = 3c4fbe66714da5d8cea66b5e25ae5878 +K = 42796db1339c2e940216cc2bab028869 +P = 99 +C = 433ac62bbb406b2ea0aa6fb90194714d COUNT = 70 -K = b52ab6970002911129ec40fa4461617b -P = 83 -C = f907d07cc35d530f850a0a5d0bfd3020 +K = baded70a4f88c73b89ce0094dadd74f4 +P = 1e +C = aa6d3af2e81a0c313e7d215b8c0d2d00 COUNT = 71 -K = 4e27702e69d3877a0f035a5eed8606e7 -P = 10 -C = 122c0321393df6b7061af120ff593388 +K = 6ba872cfe39c26f1c18f6541eec0216e +P = 26 +C = ee917f2fbf40182fbdd7e0e7d03060a0 COUNT = 72 -K = e50b574a91e50fa4b4814fbd7d0ca7ab -P = e7 -C = 7270fc4b5650aab2e43e9ee2a4c47652 +K = cf795d524659eaf71a2c31513f6abf60 +P = 70 +C = a63a9412d053330ae561b15e9784fa61 COUNT = 73 -K = 3bf2aefed090b3e96dddbad1aa2ff5b5 -P = 4c -C = 360dab0cb6a9a38f7db20de8caafdf0c +K = 2205cfa7b763914c96960a9d520e00f6 +P = 2e +C = 74a6edf3aaaffa006a9f674d530a2064 COUNT = 74 -K = a32b2312e81b0c29195d412b3b67fcea -P = 88 -C = ba3ded910126b8a2101a902baaeb777a +K = ba7cbe8e05df1bb7383f2344aa88bb6e +P = 4c +C = 244495caa03ad7203a8e9dea4c9aa30b COUNT = 75 -K = 5d4f62dd4d365cc972c8b922ce5d84b5 -P = 7e -C = 0d4deaadb7ef52b355e344c15c814444 +K = fba6ef15d8c2d3c81bb9062bfd678604 +P = fa +C = ae66bd749e77a9cbf52bcafb4b55843b COUNT = 76 -K = e9ce9c069dae01fb69dca360dfcf5c87 -P = 5b -C = 6bb5b0d3da43e9f29896ce9347b3970c +K = e248b2164df6ec2bebd81692ff19e143 +P = e5 +C = 0afce4016810b2ce26ce018fbdbfb254 COUNT = 77 -K = e4e25db50436204cf8e853ff10363edd -P = b2 -C = 1f37befdc1d461041831b3035bef699d +K = a32c90fedac3999c5ae1912fd63e1ba0 +P = 51 +C = 024055e889c74fe25bd61b21c081a104 COUNT = 78 -K = 4c78278ea0d7de890d6eb909c09ebe8a -P = 3c -C = 05cfd644d0c0d265a1ad876a5ada8ee3 +K = a58974aef9fd0f08c3c0a27eb029827b +P = 0a +C = 444e8316a0539486a439e3e002b9cafb COUNT = 79 -K = 85606080784a7bd923c70e238617d3f0 -P = 81 -C = 744938d15fadeb389d6563943df3a7a0 +K = 2c563366f95015fe15227b515cc62ca6 +P = 1f +C = 25d73fbefd86c3f8533f9e4275b41acb COUNT = 80 -K = f749efefe9a0a7dd815fd5096cdd6c30 -P = 04 -C = 48ca17cbd7eb61aa943e10246aafea47 +K = 7a48f63766f247bd255ab5fa6b34ab5e +P = df +C = 9a60133fd813c795c7a6300567043ea5 COUNT = 81 -K = f6a5000222d41d3c36fe815dddb93efc -P = 6c -C = 687ab6f32a36267537e94277d5729686 +K = 86af5605b0d1969a6ff4670ff2408a0b +P = 49 +C = 23cbf1c6190d8245549ebc688678722e COUNT = 82 -K = 4eb93c551f4ac385b2d1fad724f417a5 -P = bb -C = c687ea476ba8023f728cf91d92de771b +K = 11528164424ea9646f5e28d6771faaaf +P = 6f +C = fb36d80b1c00cac6780afe749b472e43 COUNT = 83 -K = 4a669682dca2a09830014d23a3a7ac48 -P = 31 -C = 5ced7138120fbdf7f8a3496f1ad872fc +K = f8eb3781ce034a4c125519646c3822f9 +P = a5 +C = d3ff20e42267b8d6ce4d6949fb7a5a8c COUNT = 84 -K = 651138d579e62b4de531f28e9accf5d8 -P = 3b -C = e64902060351c5bde8a7c5360c9f59d1 +K = e97e6cf576f03389a3924eebee40a1eb +P = 7c +C = 6420c8523d49c1056f0d897ff8c14632 COUNT = 85 -K = f452cd460b7be3dff9bfa6acd7f39147 -P = 7f -C = e7e86f3cccee612525f38dbcb271fbc1 +K = 3fdf1c25a39fdaee2f2450ec36a7762b +P = 6b +C = 970b2e331f58ac83ce474d53cf47c977 COUNT = 86 -K = 13f73f7b18f3df9cb14073746b7c5567 -P = f3 -C = e91bb22a20c518854a1d1a7a76dd824a +K = ccc51f3bca52d61c97751260798dd36e +P = 3f +C = 42ed587e8424b118c36a356ce24e3376 COUNT = 87 -K = 026888437f4e8d9a842a979d79cc38fa -P = c4 -C = 06a5ffa84bf5cc80f456a6a653b371ce +K = e08ca74a99de07fda5ae1b7ed3b5c04b +P = dd +C = 9132bd9af108b6fba6e61d180f2aaaca COUNT = 88 -K = 3bd0e37cfe5cfaaf48511a60f7be6b78 -P = 8c -C = 596883b40809e2bff619c502e0eaab61 +K = 1339978d3461798e8620767122b99eab +P = f8 +C = e61dbdd9728b0edb3ddbab2b7ffe5850 COUNT = 89 -K = edf86116c0dce280f3912a069aca6a65 -P = d7 -C = 238bceff2670303f4df8fc70bee24457 +K = 8437b3feb024005486d012b56bc6e612 +P = d8 +C = 6f5fba5968ec3d4d120eb44d83847a91 COUNT = 90 -K = 215b4c72f925683abab74b0d46bc97d7 -P = 6d -C = 7f92ab908dcc86471536f68e3937bdc3 +K = 50fd414b5631644d7040379571f826fa +P = f4 +C = 2e83354602afc9a7929b9d5618c86687 COUNT = 91 -K = 663949f4a7d0e1ae41892639dd527c81 -P = 3f -C = 1007667160f0b370bcd731cd5b83dd92 +K = 3005fc45bc0203e0e245dca44bd13aaf +P = 5e +C = 7a8fd75b08f4c1e4eebef397a152e936 COUNT = 92 -K = 5b680b039f9e9763bc2a837829fe3f5c -P = 67 -C = 8233e2d2ba8bdd3523b7f4e94274288c +K = 9ac1dbdda2f5ab4785c3fe66f65a4166 +P = 15 +C = 93e4a92b81e195f18265386cafed8914 COUNT = 93 -K = d926354f0130234df6d082fed3816e99 -P = 30 -C = 67be0a10ce05e02b3521f5a50e821fb7 +K = 30eb1c4b1d34a8dcb20446b25b50038d +P = 86 +C = e0c5117d96cb1ba2b4a540068d885ae7 COUNT = 94 -K = 7e65217a539b7bbcdafb035e648042f8 -P = 8c -C = 4ad1fb49c144dabfe944155337bc6b7c +K = fca6df9c1602e8efa5e7c7b84f4c1dba +P = b4 +C = 1382e11d49574856c5495f2d220ea182 COUNT = 95 -K = 7fcf64bea2523c3e0c5fcd460d992e71 -P = 85 -C = be17dbe3f9c7a595899fe501116f8036 +K = 8dbfec908f8f751b0739588ff4337bde +P = 2d +C = eb57bf29d90837bb0ba3ccaf1f7a563f COUNT = 96 -K = 445b7019fdecf950c707b5d69bface4e -P = 21 -C = 2ec3f740ac59ec8497aba01fdd2c2c02 +K = c9693c8cd3cc499493adcd58b8d9fe34 +P = 12 +C = 2d79e6f410f63d4f09e5eaafd4f23d67 COUNT = 97 -K = acce1c576a8120d9b6f719e0483bb0aa -P = be -C = e2594fdc487c0a5608135fa32bf6a73e +K = a48bf58e2564c8659bc5da13304f81c0 +P = da +C = 1c47189985308056be67ce5d9bef3408 COUNT = 98 -K = c4824936d3a9f41a6caaf651cbafec90 -P = 6c -C = 83f0a90cfdf62fc818ebcb8e8cb666e4 +K = 355d63f6614012fc085d995fa3ec3d90 +P = b1 +C = 392606034063cb98b1900fee53f38104 COUNT = 99 -K = 29b1faf242d11202d1f4e6efeadb7eaa -P = bd -C = 43812f01810c6bf0c23c520fd0fff1d0 +K = ae50deac56e17f8c5d7c6bc55b942ecc +P = 4a +C = 2bdeb1cd087f403dea64733f0cad4e3f -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = e6b09ab6de9265f9120d869bf7d3dcc2 -P = db607b512dd52818d4 -C = b2e512031672b12c807f7cd62bfbaaa7ecd2a6dd6b791db8 +K = 0fcbf7e788abc00195ee65a00361bb1f +P = 9dae4abcf8ea5a47 +C = ce2b00125266ba28c266ea4ad4b23d01 COUNT = 1 -K = b34190b42c8e141e871cb836f4642723 -P = 4e3700865bbd4a65cf -C = 3a0048e1e98e57c635c41ff20089d30757fcaa5ab107d049 +K = 7ac6c8da37d65e4f39a1fde06f15fac3 +P = 8712944d07bc9d93 +C = 9272046a8501705aa8cb49681fe9529a COUNT = 2 -K = 061ae9b2863cfcf94c6ab4a82958baf2 -P = b6282020ceb6a43108 -C = 1f051ced4c07b8c9bd246a62320c0d56bcac6880d5d69c2f +K = c861ff5e4ae103e7e973d64d148a79a2 +P = b5b475fcba5ee9f3 +C = a20dc11526c66985c820217303f2631a COUNT = 3 -K = abc92131fb4a243dba944fe0f03f1df1 -P = 7fe44c6caf549f12a2 -C = 67f3fad3dbdd59fb7169da0b05a6394eba76f320597a9bf6 +K = 4814700759550315eb2ca8b00f5af2c8 +P = ac01eef74ee3aad1 +C = 40b5a9045eebcbb8f1ba43da5aa2a524 COUNT = 4 -K = f9af6737865d2faab5b498668f5fd6ea -P = 57015ebad2e722fec9 -C = 4f5ad8b6fa40dae7fc4f159bee2c53e86037be7056232fd9 +K = 7ae44b6a6e21a4e22f0d3c75d6454a7c +P = 313702f16d484853 +C = 9e653c7674f82c4d5706d46ddc9852e2 COUNT = 5 -K = 126d9a7b43fb67ba3d6c97665225f653 -P = 96ee31def817af2ed4 -C = 1953ba4d1d0aef79d1913498b5e761070e9fc7a7fede3d62 +K = cf5093e8be1cb64120e52a78009f88c9 +P = 4d8cfbe1022ef671 +C = f1b13f5e53907c04944a1f9f39c6b59f COUNT = 6 -K = dcf3f0d173cb3ee83bfbcd0164719d74 -P = 14eb0c315e53ae5c65 -C = 12038dacb23d45077b4df47de317585c60cd820219e580ba +K = 7cb3382c4f3894491769eb8bcc317ae1 +P = 135d10aa1b7cc108 +C = 895e532e53873aace70c9d87e2235b1f COUNT = 7 -K = 8e8cf133ce1a9352ef67bf27412da7a8 -P = f95e34fe9dc74437df -C = 2cb1a33b4a86f80ae8cb2de21df6b32132fc6f170af258ec +K = 6db3939215d6db9b1b270f668764a099 +P = 90cd90501190d248 +C = 4c190e056e53b44821f4930855730ee4 COUNT = 8 -K = 25a015e26e4a4e9d7669d0635ebcde38 -P = dbdda0dbe2d4348bbb -C = 757f234aae2ff8b82a2449a0a2479c6ceeab337b6df05980 +K = 7fa386d277c0ed27e4607338f42a2f9a +P = ef177e14c9e61543 +C = 943bef0e7c4961fd6d28442ca1ab84ef COUNT = 9 -K = f37988abead30e920bd9039af44bc205 -P = b6581fba461576ba68 -C = 0e43573663bb624fb6603ddab382358cf56ea44c5fcca316 +K = 0490f0fb559cdad23b52253d9eebcd59 +P = b890cffa7f9d5746 +C = 3d8bf512c31a2b5658e5be4c3b38c747 COUNT = 10 -K = b89e6c98731ecd7f420d308eb0eee77a -P = 15b714fd00552868d5 -C = dccf9655eb15478076112e54276bf5a3773c4d01ff58a0c9 +K = b87f586d49f4ae7635269238980c54df +P = 71a470aa046033ea +C = d79cad810beec10958e5ac0acea6cc41 COUNT = 11 -K = b04911a95e54dfa864cd21128ec05341 -P = 74f6e36d45c759651b -C = c0e66128ac5fb96ab837d0144a84e529a028fe1f07989759 +K = 9d97dc8de2b7eaa241d6d534824b9c46 +P = 724ea42ef822fc6f +C = 6738330bc5190fa0abe8404108ef9014 COUNT = 12 -K = cb3d7df3eefb9f92f4777ec960e8cad6 -P = 1ad7ef27890efef527 -C = cc556f08c624c7d7ebef8384c4f9df82e82438e6c7cba74f +K = f9a4147743d18b09d4ae2ba54b3758b9 +P = a1541c09c2cf8e9e +C = c1713be4c7b154f33c2434ca3b7d7ed9 COUNT = 13 -K = d4579b41ed734e8a1cb32478ee485fab -P = 54237c82b54067b107 -C = 44ae37bbb8b14316eb932ebc4be90ae926000ca84ee86b3f +K = 034e8ec1ed75c1fd10b5265d3907f35c +P = 5c51c0a6dee53670 +C = 9d47c27e8033e36d35f90383450ee9db COUNT = 14 -K = f0f99b02c61534ec208387a0da83a9ec -P = dd4ef61df7ff335ce2 -C = 72c4bdf27bba001e236ae2b7e9d1e19d5d57a947598fd32d +K = 17d6375010ef2565efeda8c95f75c50b +P = b2f9cf47d5c29cbb +C = 8da3cb6878e3a1e2a5aa6569fd1db55c COUNT = 15 -K = beefcfd4861b80c3c7bc9b428c47f323 -P = 0418f1521639dbac4a -C = e71afdb371876051cc6b72bbfe57f81fe777ac682ea0edfb +K = 836f8f7f0ccb174f063d567025864c3b +P = c72a8cbe0301ac87 +C = afc260fe4ec27af0f93de9e31421f5b6 COUNT = 16 -K = 854d30271a51f8f2726b998622dd6757 -P = 9364c1afc4459c9ba0 -C = abe0a4fa6f1e22276bd77a872ed888a335f5a1df357b6800 +K = 9e6438ace15eccb225b0fa82e7372e65 +P = 3f966c7b945eab03 +C = 66ecc7de009ee7756d6b319d2d57c713 COUNT = 17 -K = 5a9148b5e674d9752ab71873f974cb29 -P = 713069fc175aeed814 -C = 7f69f501c15f1efa9b918ade74fbe7f1a900470e2833f040 +K = 879daf0c7a852809aa1466c58d736f39 +P = 1785dd4e5b4d10c0 +C = 33fb4c892a90f8fa1f62fe9f184d9937 COUNT = 18 -K = d8390b6133b034edd90d19d40f756d7d -P = 2b31444ae2b0049e5e -C = 824101d1133e49f191113c37db6123e180ad2f72c64535a9 +K = d76bceb92078fef2d87433f46e810605 +P = 0d138bb15d3e69de +C = 93f55dd1caf20bdb80dd87e5ae73d69b COUNT = 19 -K = 176dd555a3c16aacf6cdd48a514c2f64 -P = d4786f1f5e9df85a9c -C = 42c13b13f2dec57a48e7f0782d9a8e0bd14cdae2a0ac8c45 +K = 6036235cd3fd26c8cf7be1424e67ffd5 +P = 9f8f0efd62ca5a9d +C = 98d9e8c1db57799be9541609ca5e9d0e COUNT = 20 -K = 2bd3d2bcd5969c372f9eafbfd0b458fb -P = 90753f6a6e8fc7bc3f -C = 0cf43abf6c8343350e9524e43f93561c18dc64be8c393a1a +K = 1ebea453a40f12d70f8763fb9d11e82d +P = bd1ffab6ca1dff5c +C = 1bedd5283329710c691f60f1e62ac862 COUNT = 21 -K = f64b2f6f8f97ea88f1c46562c9cd8f72 -P = 1122e92752f85aaaf1 -C = 723b11be1372fd4a267e58e5bede323f34fa4a2a619f74da +K = 71101d47677fdc0240e7aa61fbf7aea8 +P = e775935c5aac4ecd +C = 58ea94244e164837c18892c490ba10d5 COUNT = 22 -K = f2d8873a0cad0750a0afbab770d1efcc -P = df37aea0480ba344a9 -C = df9b475a47a8e6723a33bee0a6fcaaeb1dd1e7d4d61c04d7 +K = 6e43b72ce3b6726822189f64a7afdb14 +P = 539097c5316728c2 +C = 03107e99d1680833b18b060782ac5189 COUNT = 23 -K = 3b89ac96b79de13a31abb1bdd42b9493 -P = 6a2a7d29cbd5d9ee30 -C = ea7bd26022f918f1faf6af500562f9e967ad0cdf947b53a5 +K = bf909f62ab7395ef39d3d6949e05b0d5 +P = e50cce48f8565a68 +C = e24bd0248e1adae66bdf06cb58864eac COUNT = 24 -K = 597cfba75ca7527b460bc2480154bea6 -P = e1d75eeb9b685b1240 -C = 29504d218fe9b5e3a42007844dac81d6be09951bec5c602c +K = 27477bb069e7670ea799023110fdeff9 +P = 1ad5096764252fa7 +C = 6c0e6e27fe99ad697291d8a123af838f COUNT = 25 -K = 27dc0364f25a7de32c4f70e6f5c8bcea -P = f142c0348d1f8912e9 -C = e633088187d6c1c5cd853a2592ae620d9c8ce1becd23a0da +K = 42ef9bd45cd6c7d28bcc0499e147a9bc +P = d2e64b8a11074a09 +C = 7029ac397dae102090b1217573e464c8 COUNT = 26 -K = 062440787195d15621fa9d4e33c7c721 -P = cc3675e814fa7a915e -C = b086aaf13954831a18d2b6c484e82f40d780cee5f0abed55 +K = 1fc4d7af5118052baca0e049937d7ca3 +P = 278a5713a8e2c01c +C = d95da3023ec58b0d3fb68895dfd8426e COUNT = 27 -K = 39136bb71194e5134e361615bcd7a96c -P = 7703e21e1589d6d899 -C = bc10c43804329ab77d5a7790479d530eddc75fd4abccfc2d +K = 338c991db182d7dbaf4b31bd1b84508d +P = a59fd69228e2b002 +C = 13b878785e939410b68021c9cd2f3e3c COUNT = 28 -K = 7462b7f8c0cfb84eb34ee3ee947f26cb -P = 4bbbdec49023718fe1 -C = 1f985cbee2f76958fd42138caffe60b3049c3a800ac7cdc6 +K = 693d6fdb1052770041d01012d0565af6 +P = f5e87a369aba5a35 +C = b22b206640af90ed50da2631804acc09 COUNT = 29 -K = b97f52ea6e87520f60d1827a43663018 -P = 248ce2816cb2e4c20b -C = ad038d0968a312dcc7623cf751daac10861dc69afdcdcec7 +K = 90f93079e71ff8748ee13313ec1b840b +P = 687cdccc334521c8 +C = 87cc0d564276d136e7ef514e514c0c5c COUNT = 30 -K = e09e9a2b2f4dcf7416f027135e6e6abc -P = 3bcf1ec505cc8c6a3e -C = a2b1b1a825658fefd194a85ff53bb9bbccd8585a616e576e +K = 3cf1dc4d9aa753ac18cbcbe23e995611 +P = 1b57ab05cb9f5d8c +C = 3c6277c3874dc31bad2710c4b9400ed8 COUNT = 31 -K = 0e7407b64d64f40cf967899736830fbb -P = 2f651188586b4eb3b7 -C = 4d933947708befff196d5b2cf31b2b00e70fb91fb97e8d1e +K = 085130945bff7b8c26f803e08d130f4c +P = 8829201336bd42da +C = ae492faa4519da5400057342910d7f31 COUNT = 32 -K = 2b43ce391b43dc1e792e040649249df7 -P = 371fd1187b5e1053be -C = e58279bd7cfb20380066d4f46c64fa04660709c5c005576d +K = 782e731aa0c40f3827bd943fba838a0d +P = 972d707a97532810 +C = 8e4af59cc3abdfba3aebbc6b30ddb63a COUNT = 33 -K = 67cd5cfef4f2a4d0053690717ea0f0f9 -P = 0d8a6857d71d2080cf -C = 8a92c401cf856821347d92eca100a00a46b5b12b05644da8 +K = 80dc90894a012947fe87c990a0c7bbd8 +P = f7daeeda04789d4b +C = 645cc01e8c4b728cc54d54fec2bc3db7 COUNT = 34 -K = 7f7b257cc1e4f5432b28777483439bc7 -P = 981bc121b7d209b471 -C = 56d9374e455e5085175a00324a79eed7c0c8d4d697a601c6 +K = 3888a76a37026f723904472532e362a1 +P = f0cec2e2d59ed77b +C = 8dc43d8c54de6c4e66cc85f418a769d7 COUNT = 35 -K = f0f99b3de8ee30e90542495112b24ec6 -P = 2ed3d719b21aa1fca5 -C = 310afef58b94a0fc2f73e845d6b9f2dff9f4c7cd7846f6e0 +K = 9df28044e81e64623a12093f28306437 +P = 25644317a9e2c950 +C = 35e586409779fc090b14bae0068d7dc5 COUNT = 36 -K = 66997313f07eaee45373d8020e6fe0b9 -P = 667b2d81242dd89fa2 -C = 78fdefb5f0e47caf93730dab49e854f39546f4f179cbae73 +K = a50f28ce03c7186563346f5912b86983 +P = f9f241011a6a653f +C = 20b3ad54407c97b9038b4b5f99f0b56f COUNT = 37 -K = fa2ae650ffdccef6ecd15f728b2c390f -P = 6bb45261d582430380 -C = 1b251ad8acc7fcd6ece254f6cdaf578e82c9bbe610f2679e +K = 3cdf44d0fde4ca7b065ba908b46c75fc +P = 5d37940155729a24 +C = 739753db46e891edee30fbd6c5ead284 COUNT = 38 -K = 3732a3b97a34136e6edd3191de6004bd -P = 064e4eac54fd3301dd -C = 82647a9f9926d4905b0b155e9148f133252271f8b9e96536 +K = dc923c7fac0746779075e7acf52950ef +P = 46fe52f2ec9b1230 +C = 2b5b669f9362081886dc0ef38f00e5b4 COUNT = 39 -K = 35d34206827d216fb3934274cb10b1da -P = 2a24a4d441cb7f1718 -C = 56e069aa89be1962ea544f83801521dc72b5facff2242fdf +K = 0c2d9023d1569fa9b6b00de408df22e4 +P = 20cfe8847f57b6ef +C = 180be9eb76c705f4d420f80bbdff826c COUNT = 40 -K = f38a8b42fc14e6969a5ac125f1c3a773 -P = 5b0ac1c621399c7a5e -C = af810b25512a13fed49998920212ef6e62d5553012e04c3b +K = 3f3e045e9c39cdbf7ded782ccfebfc97 +P = 94e8bad48938bc21 +C = 3bc15a6e1b883571088df547b8004bb8 COUNT = 41 -K = 5eb134888bf638e625d87c10d6242235 -P = bc123aaf40475a3220 -C = 577afa6bfbc0e6b1de6e93cfa15a0cb7ddc26ee06751da89 +K = 01fe09fb9448fb28a02871d3955d096a +P = e825bf8e693e96b6 +C = 4a468de468787212f98aa205d01f776c COUNT = 42 -K = 94d5eae6dc69aefb60281cde32e0c2b0 -P = 4b22c85b78611ff91a -C = 4495a52d6a5af25849879c88ac67c00ba494e765ca7f1c3d +K = 16713b598ce6ede7c393424627c7a07e +P = b7464d298c823162 +C = 4dbd22228ad27b538325dd90c418971d COUNT = 43 -K = c58a1cd42f5505e3810499cb7ad50516 -P = f8dacc8967e09dfad6 -C = e0ec01fe4406dfb46719798b81043e613e3a5d8c50fae7bf +K = e589d02023f30e505c77f385ac5c1b5f +P = d8821f59f0be898e +C = a72194c173b6a52699d36c0b1d19f33c COUNT = 44 -K = b6c31f92ebb4818da4a6065d15b64340 -P = 06147026afa705d2c3 -C = 5d013bec5409ce0c7837e3322cb3e91ee8f20b6753ac100c +K = 1215714bf9e9dccb2b2f051fbe9a8c5c +P = dac5df14ea63303b +C = d972e45da9df01e00d4bd874348f8732 COUNT = 45 -K = 344a73bf2678c769a9624957dea00611 -P = 278706ddb6a0c9e195 -C = 5e558c9c70e9716ae966bdf5f44449d015007603eb973d6c +K = 737a12e5c465b4a1f6f5f30fa5ac7cdd +P = 9d9f972fd98fdfea +C = 5403a11017b2a731b9d974cf78651790 COUNT = 46 -K = 0e6ffe262783ddabaa79a7429d068236 -P = 361f33b8396c9366d2 -C = 6ee7ccaa0a549884c868bdc3128169b1a599f1a2dbe2ac8a +K = 6ea2172f39ec9e2cd3c74835a88dd8ac +P = bfaccee2f86ed667 +C = 6b472dc638000ad8b5d833af9c847771 COUNT = 47 -K = 8e7c3537cb3534780a0e2add24422f24 -P = 51e05c4f2aafd3dc9f -C = 9439a32b4d6104dceac134ea1091ab579c7d34b540c35ccf +K = 12be3a4b1df55fcaf7f0f03cc080db2f +P = e7c2572a8858ea48 +C = 17b7f06fca86d500c682de90c1cc095e COUNT = 48 -K = cb80e280248cfa84377d5dc21bb8c2d3 -P = cfa7daf6071abe5978 -C = 6b333a6a30b62239201fd1aaa1872dbc71260cb80107d4b0 +K = 818123da3d93b73bc6f92202f0e83a46 +P = a8e220a9050df074 +C = c67181cc5bd39e976a7aadc9b2ed66f8 COUNT = 49 -K = f1900a2c5cb1ce803796aaf320219242 -P = 65671e74d7a69784f3 -C = 11fba8d14c7b529347f05f9eec157d585bf5e19deb67810a +K = 7c0111244013805dda7bc8582a6a95b4 +P = a35a65f4becf7ded +C = 387f33dd2754a8caca0db32aef4de87d COUNT = 50 -K = 7ab16be2774697abb4491477340d7c03 -P = 901504e389574d6c12 -C = 1d7c1512d09b086ca4e9a0f28b990921f69ef27d33f054b1 +K = 0f7cd74d6d7fcbdd406a89c1fe9d3f39 +P = d7ac1a5cb59882d4 +C = 11dab0dc43cc3a371edad33e3ad008e3 COUNT = 51 -K = 31dd358efb9c0846f47d34cd73fd0efa -P = 87e2a5f57394a3c4cc -C = a5dc9b69da9b4b1354c816d519ee8b3dd99a882c3ac83b15 +K = 31f22bccb48c5e54bf34ada366422d83 +P = 0f4427c1083cc42a +C = b786e51a1b3b1381974715caa0c97da4 COUNT = 52 -K = b58b0243e08c5211f6389529c773d7ce -P = fddd9ac8091d69acb7 -C = 04f4c384013f9672ed41355fe26c5741e144c0be1bcf845c +K = 7dd4cd1788aa210cf02cef76de85bfd7 +P = e3683cdb76642a2c +C = 1c2b0f35f7267147d84122c10ffcf110 COUNT = 53 -K = 1819170c07c94129b777d718c1cea3d7 -P = 8d22b63788b8cbc99c -C = 54a28d027c6b80e53d7d23f6fcca275e5fc3c2509bbeaf9c +K = 4a4fdaa5566ffe862c4e6c265f07ac4d +P = de5dd3c6b2de77bc +C = cfc72802fa0e6306fff9217d13479f59 COUNT = 54 -K = e2f30b2e30f1206928539c0953e8c176 -P = 6a523944bde172a1d7 -C = ab71aa16a27d992635740eb8d829996718ba4b9ce3225952 +K = deea42b1e9e8151e87184661b9dbad27 +P = 55918c125fe4e705 +C = 793755482def22aca9ce0f0278a12f25 COUNT = 55 -K = 2d61a00fa5d439f546369e2e324ad9b0 -P = 20882ff30839271ebc -C = aeeb4f08fac5439ed53830c94aae21a082768ccb634f40fd +K = 640fadb29a09be1fc6d12d8934f38ae2 +P = cf16509952d3f0af +C = 9111b13cd9f131fdbc05302bf843f935 COUNT = 56 -K = d0009d610b3f3104a552ede64f5b1389 -P = 6852cb73407bb198a4 -C = 602180800b18f350a32785df207f980b8affa74f8a1a34cd +K = d810c9dd3cfa3a22d3647c024877fc94 +P = 5bc31e9084e95a9b +C = fa766acde0e8b3c0aaecd428429d6104 COUNT = 57 -K = e101c9a18997c25a75776a71ca778a38 -P = ec8483c8998ef2da35 -C = d9a447f375e54a4644112e841242fbbc901ad3d5ba8c4817 +K = 6c3ab0f68c9d821d071345fbd43420f9 +P = 5e5c524484b05056 +C = 46c776729f0f32022c46c133f8571cf2 COUNT = 58 -K = 3c67982375dfb28685a288e0afd9581d -P = 139b8885ce21f61467 -C = 944b0e2ecb19adb9d230decedd64c781f495118f99ad6687 +K = 1c4557195944925faa90c812ec188de7 +P = 78061627335e811b +C = b74e7ab62fab2857efc06067945bfa5f COUNT = 59 -K = eca3108812024f5b2691667fff5a678f -P = bd6bf9db51ebdb4e36 -C = fa10187c4a01979d08e1d782baa27eb0bfeba4e720d65779 +K = 6044a574750b1e38e8fca63d49d4ddc6 +P = 191272c505b83e18 +C = fb43b989582bfa6b6369c3d3e7baa227 COUNT = 60 -K = 4737390e5b6dea7c6d3d3a06364ad88d -P = 6ad547442a6c3d9e94 -C = 5c3e63014f0ae1a8e87ec85a713cd758610e7b7a7f914ee8 +K = b44c17bf20a3b60d29a35feedcdbc1e5 +P = 2fc4e509763fbf3e +C = efdef8f134dc3f155911feb55e684ca2 COUNT = 61 -K = 2239ceda8b9e1f4286e1277a9b2c479c -P = facc5aebb3315811bb -C = c9c34372bb4f949c805020ac0abfb54d212fc9189577695a +K = a2304ba5c62e501f4de3c564290587d3 +P = 355639e69ac7511c +C = 78149895b2351a245f13554aec0b47c7 COUNT = 62 -K = d5114f6221bb8ec3d7144d1e5395bec0 -P = 7bed932185082d1a72 -C = 2a048a81401448110830a7c0b091441a3727f0c8b890bd9e +K = 20e9f92df222d0a89ba74347759a097c +P = f6d18252a3ced657 +C = 4cb9df2e88be1eb9609cafcbd95e1df8 COUNT = 63 -K = 345e941d0b17677a01596c9eb92b144f -P = 78a003f4d2edfacb92 -C = 5d16968f8fdd009161d55c4e3f8ed13f0b0ee74a5b73107e +K = e66732ab36a2e26ed9b88ada422db48e +P = 77527c7bddb0c38d +C = a979253bc413e32ac642311c008d0a36 COUNT = 64 -K = c4b2914b7936f374d36a3ea23c23d0f9 -P = 47d237aac6794a87b4 -C = a76deb99ac409ff1ce7b072ce60c68c05e6dca5d9f65119f +K = 331280bb66f8a7e04e0787010c646129 +P = 008e8cb1e41d60de +C = 81a742ce28437516782238bfd3e14123 COUNT = 65 -K = 66a5f7412370d4a77f6a32764c899a36 -P = ad76754e5ddfa251ff -C = ff92476750a2cc715ab0baca523ed75f90c00be1b85ea540 +K = 7c583ba0558efd07d499d9ba4468937e +P = e0c7287bacfc7fb9 +C = 109d6b2a4136245f77bc8951678f7325 COUNT = 66 -K = 5016871036c49ecb46dc7a3fdff88986 -P = 91e9aae5e1f02b0190 -C = 5b8ea86ae4f65a7476528c0933f64a04d2b6233106580784 +K = 99667450ea2a54bfc9f9dc62e2298ffa +P = 8383c93ccd5fe379 +C = f114d1baeaf357ba2a13a0b81221078c COUNT = 67 -K = 983fc51a64f7df5d4d311e0a11b37d60 -P = 7a335eafac2d564b1e -C = 3722c6d454f438676ad9f76963fb7799d0b01158c3a76841 +K = 9c1940048d847e93b456f76a06d756a1 +P = 35b13343a3708d16 +C = ee2e1596f54d729fce75ca4ef76bdd29 COUNT = 68 -K = 602cb9017c5d288eb660a06e40d7cc79 -P = 284b8c948a161dd161 -C = 61e7401ff37fdab033af8dd6982b4f14e73e16ea16e27d7f +K = cb7b08a5e4d5afe3788c3d9447ee6555 +P = 239b9eb8075716bb +C = f5da3feffb27079b51c201b8fa17b84c COUNT = 69 -K = c11b3cba51806a4c8094f639e22f1a64 -P = acb1f40f470b6a3a57 -C = bd0a6b0822639455f1d0f885e63df1fc62ffbc2f6949c5d8 +K = e75fa313537ad8f2cbbdcb9d229af4cd +P = af3f1cf415e9ef94 +C = 97c30054237a259a53fa7b5d954702ea COUNT = 70 -K = ed4d233c348a35db241badab5c7cd6e5 -P = f002b7cf59a4d72732 -C = 8ab4fa5e06f8fa76e5525402815c4fff2d2753e74a8e33c0 +K = db7d072157aadf492eab2cfdde0909a5 +P = 09c06dbbf831adbc +C = 3eb5e5b93de656ef0686b956a35dd0e5 COUNT = 71 -K = 342a0241d71220085143b5365e0cfd2e -P = 6ff6181fe76a403f4b -C = 64529651268283ae0e2496f215d826985bd1f20f5881090a +K = 6253f06b473d04d68142d5fa39b94b28 +P = d11abff988f81d57 +C = 0e2548f1eed19f11e657cc0eb078b3bb COUNT = 72 -K = b4a646799961fa6bcac8b436c63d789f -P = a7715ad0cde4c2bb11 -C = fce37bbc5759000919d2df2937e1d171c4d4da08a6b832ed +K = 7225a360f332e28d0913d317d307b2a3 +P = 4c868e777753939f +C = c12bec2f78aedd76d31c102d069d6361 COUNT = 73 -K = 2da7cb125a89813c35dbbf642a894fea -P = 325357c3607ceeff46 -C = 3f3e8e109549391a4dbe189c390788da7e74b251757ad694 +K = f600c738bd985c03aa85d536bae1f4d7 +P = 48cc7b9b57a799f7 +C = da1d68f9a2a071db60a143e75c27d5fa COUNT = 74 -K = bcdfeb811d80509f06ab8949110c636d -P = d75df2c58efcb9e763 -C = fb448fbed3345d59a3f56c4acd84a87fefbffccc79a77f25 +K = 7cf7d2252516627dfceddb7357143f93 +P = cdf4b3a3a71ab7c0 +C = 3f9e82eed5dff3cac1f12f62ae2210a1 COUNT = 75 -K = fda6d64e11bdce304695b97911b04f54 -P = fc237bbd2227b3cdd4 -C = a2e648dca9d5aaaa6af9cf3de5bebf1e013e6a93ed921f49 +K = 724e3db41d0dd6e3fb681ee3b14092f1 +P = e3660744a0610a81 +C = 32cb7c9a1b3ad283eff6919df166eb61 COUNT = 76 -K = 0d663384248a590dfd2a3156e25b688d -P = 8bcc13a27b1d4cd4a6 -C = c1e9bfe9a7a4d752b99c4d8f8032635e4837602ac17a9039 +K = 62fade45c48a5c5134d572d21c0f45e6 +P = e8b7d4da6649b65f +C = 2469c2ffc465b0cf31a4b485ee66e83b COUNT = 77 -K = fba7d9f000d14272b55d9dca1ed45378 -P = dcfb9084d1a5aa34fd -C = 34841e0ef16814006ea84b2b16334167627f32f6aebd3fd4 +K = 3cfb995cb79bb29acf5be3751bf34655 +P = dc81868b9149139b +C = 78634a55255b86c5825200a6e8c08ab1 COUNT = 78 -K = 47d4564cfc39e5e9e5bb117572ca5eb0 -P = 178a8710c0ad25feaf -C = 9883689cfc3da4bb990b1c7657469c5a3c617996d9466813 +K = a7652a9c2ad91b5ce229060c8411fbe2 +P = 060c892482f72835 +C = 7169c4ece1efb2ee3b5d9ab063466093 COUNT = 79 -K = d3c0896c1131c60e5de5bc72c6ae7879 -P = accd74505a0097d32c -C = 1e16481e181936853e43a1312215723363d10e7b505fe917 +K = fd1803763935ae5a460028f8ddd4bf97 +P = cee2b7083db282d8 +C = c78404335129278d3c39d727377fbfa8 COUNT = 80 -K = 2e7e70e77b93a1897c2b2f89ba5183e4 -P = a5a1b1cded3867b1f8 -C = 7a0833e7e5ae2fd627e6e398b1131c19b7a1581bca920a06 +K = be91597ccde58cee21bf13181ee94603 +P = 3903d00da3cfb82a +C = 2c6f209c4d404c7c179aba48258d168c COUNT = 81 -K = 9f3e04b233a83c8640896c163f46df36 -P = 48fa905bd8c8a185cd -C = 51843a6172b14fe16d58e9fe2b13258505e0e64b40f922fc +K = e95c7da5fdd78ee33fd8a8bc2a7d218e +P = dad3a1371c467dd2 +C = f3607fc6f88637b2c705f2b136eb19f5 COUNT = 82 -K = 96485d17ccfa1f4b11434bfe02116caa -P = 26f2653fcf080c84a9 -C = a1b5cf8448135cacc4b259c219194eb1dbe4da6c6de866d2 +K = 72b49be18a4cf8e6a85dfb283b9ed35d +P = 9712679a70295b35 +C = 980d54333f95f8579dbfb752867e7f1f COUNT = 83 -K = 3fdbe6b1dd2638f89a1673f6b926e661 -P = 9cdde4c6ce039c4e12 -C = 68a7f95b4fbf44a7272be37a6423e992995487999aced2bd +K = 89634cf7bf838e477c87b16fc4fe62c4 +P = b2295ed68ba815af +C = 278d976978fa410e1136256b64f2a17f COUNT = 84 -K = d276e61891c8fa9427457bfb5333243f -P = a075377f5b40ec561d -C = 025a9393439a081c60f76a563e7bb962a668596c19f9b92b +K = d136b2421dad24c1355b2bfa14056441 +P = b854261df9acaad5 +C = 1e6dce2ca1752c56dae3a86af526aa00 COUNT = 85 -K = c24d0261259db52409ff742ea9059279 -P = 59ebf5db00400dc2f9 -C = 57e49e6eba8044314d03556c29ce94b32c5fd4b529110a61 +K = 913495a9fab42679ad998038ac18bbba +P = 05f6acc5b13732b8 +C = 68dfd6015b9c0a874734fd3c7dbde5f9 COUNT = 86 -K = ef22993cdd5527ad4ec7fdc1abd2e5c2 -P = 343f24025fe16a6cbc -C = f6d9aea6c25fe3c27433a343c31c799c6bf7e882d730eb29 +K = 8fbcd5ce12acd8a74bc223eed08f36c2 +P = 5e7c476420589b04 +C = 0fd93998fb4653b716050c8e7e7a928f COUNT = 87 -K = 07f3fa98063c80b7f8d6bd97a3386d5a -P = 287fb4996d7dfe4a3f -C = 4758e07ec3cec696c2f12c9ad76698dfe7919b8cdf6d3d08 +K = 06c19ce5cb786bd4e5b3e66b2d627d59 +P = eeaa631831551d86 +C = 2c0317605edcc2126dc75c483c0f67df COUNT = 88 -K = cea9624181d887b35ff2a423a50fe8e6 -P = e639d3700c7086ea61 -C = a54a747effd00786df3ca1340b28c78f30d1df45d3371c40 +K = fea5a387685cfbad25d274bf3dde2151 +P = c25143cbae67ed10 +C = daeaba71027c8044e30d240688fd418c COUNT = 89 -K = 795c9daa70e36bd59728ac4b708cc31e -P = d6230e869e560af02a -C = c3d5154ea3b202daf1adeb6720fc9df068a4ca34c92693e6 +K = 679a5784f20bd2b4b16268d2eee8a1dc +P = 5587f64bf0994483 +C = 8b378683acf43355d2acff897d87d343 COUNT = 90 -K = df34d20c983e98ecccaa1782818d7c5f -P = 40fe35d4b3e4b4ae6f -C = 9ad09da03d402b1fe5b201af10349f878b7f6bd4563c0780 +K = 934a2f62164fb0bf2044d11ca9a57f86 +P = d1d480c42e17fcc0 +C = 476f57205a7a3dfd7da901439c11c61e COUNT = 91 -K = 1fecd3a8e93d5d5a8bf9fb4d658ae08d -P = 150fff67b406d04d9f -C = 6bca1d29c66961f52cc5f903030789fce0e5abc42c54bb76 +K = fc1fa483bf9108ccc6e74439f1b137a2 +P = 04fc2a540586760f +C = 1d257d0940bb7b04400336b1c4a4d1b0 COUNT = 92 -K = 8c365883614e4ef8c47018521358fd81 -P = d9916f967ab4716fb5 -C = 3e6ac07703d7423c6e2c546416d826136176b1bed8d948f4 +K = 1bc62fc6b43992135934735d5cc70d7b +P = 4b8a55e5a61e05b8 +C = 92e2199995adc6aa0638585706a472b1 COUNT = 93 -K = 997625df8589f01463cfafe76f0224de -P = 57fccf8d76e47b9a79 -C = df2dc119e0fefb21c93fea08b69d46810b9f46ef23fbf345 +K = 2619fdd8c61e01e2019144804eca2238 +P = 529411d216c49a23 +C = 2cae7ec15267a650136163dc1b839dea COUNT = 94 -K = c68e9cb8b52ffafae4b0179ab5405a97 -P = ef75b2833d0add4593 -C = 6a19caee72a944f79f24beac66bf9026f70100757d147a60 +K = c27b7fed162db10e2ade0965ebaa89cf +P = 0b0caaa53f7ab13f +C = 0ac41277fd0cf4861df04d889d2cf60d COUNT = 95 -K = 9a903163711238a1e21204caec983cff -P = 0b6fef94c9e2189ace -C = 2f5216876347f1372d853a2a1b572bf452b3db681f5e043c +K = 81c4d45826ea6ee80db32961269c4159 +P = 901ee15c6a07b436 +C = 2ecb4ad7eb73bc0af80bd6c9dd8c58e4 COUNT = 96 -K = d35561482fdfeaf14bf4f7f3092fa840 -P = bcd35e7ec6a97e342c -C = e5d561ad45d41d583bb9f91332e98ff41d2e52aff0d27333 +K = d6a0efa2b5df37225515c33f1928f33a +P = 423f22ca37c6c0a6 +C = caadfc5cdb63254d061d16115572799a COUNT = 97 -K = 9d6bd77f15913c26e46090377ab45821 -P = c7c452986924f80d45 -C = eb419a1541a6bd8b21bac3b6c76b3146436e4b388aad737b +K = 5243adb944b182d5f8d41eec54fff3bd +P = 1553e950b70f06b7 +C = 0be52e59289b639afc64fd66bf98e65f COUNT = 98 -K = 5ab8143c3bb401235be669f1b71f914f -P = 1872a6183b9400c1ec -C = 739e6b414e82f8a3f41574aa689173be8b212efcefc4ea5a +K = 1bd0c105858e5347e9f2dae620d7231d +P = a47a134507ce225b +C = 80e1d5c1f2532e5f099d8391fa4bb7a5 COUNT = 99 -K = 7fb19f0c9d158e17e52db916caac4fa0 -P = 086beef12cbaa1e885 -C = 578ad8ad420f3c5ebb167128b38b6edc54ad72ef893a67b9 +K = f68450d08c895f6d0c3b0779269d178a +P = 304619c53ea6d7d6 +C = d5a7867a4b5068771615b80409c9be10 -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = 98a9f538121784023beba57a711dde31 -P = abcc12cf -C = 88b79f39d3611e2fa619544cc05dcc54 +K = 372944e8422884ab2217d317973e16ed +P = f0d4d305f4bbb153b7 +C = 82a216a29e55ea0476eddb2f34e4cb29d21e587b9faab791 COUNT = 1 -K = 611db0a5ee5297436fc6cbfc86072dc4 -P = 12bd00d3 -C = 9f64bbe4cad80a51b20aab9bb46871f2 +K = 349cea40cfeb35fd919de7b38d1b3269 +P = 4872b00a543e373e7b +C = 5da6f07d55c10c113f2d96ab292076162a6a11e48e294ec3 COUNT = 2 -K = b4c2c91b76dddc40bf38930d98225364 -P = c0e092ba -C = 70fad33e626b63662d433a32292c2a7f +K = e47f0dede45dd87b1a7864ea84a13414 +P = ab72f1d0660fe75215 +C = c97f7fde5cae3a075e8a14f81a5c1dfc9aa0897831ebb50e COUNT = 3 -K = 0984055ac4dc0ff93e5a475c4b3e22bf -P = 650f6e1d -C = c45c182b3389d44c809b8c226bad5bc7 +K = 3ba9b29b0d20bbd878de73ef8ccb6af2 +P = 19e9f4a9aa4f33591b +C = ae2880a9416d5f0843110708a18345e29fbd25de8b2fd54e COUNT = 4 -K = ab8ebbdf0f5fcf204acb246bc8a4be10 -P = 0b23d49c -C = 1689046015ebc4bd3c228bfc6bdb3ce2 +K = 6b72c2a3de15e16222753d0e320221a4 +P = 613b92f490c6a87c98 +C = e53c269f999385cb349567e65b852b77d466390503d0cf08 COUNT = 5 -K = 9ec9ca1a6073f691b0f41023b7638936 -P = a557cfc8 -C = 3d03b121260b73e5b64ef3ec7643ede2 +K = 4c0ebba3429453e68d03836b345f31df +P = a59213d49e54d8652a +C = de48d7f0261fe18bbeca3ce63c7385023daa4faa0951261a COUNT = 6 -K = 987c610585d8e4c8b4cd313178693980 -P = 2be2b2a3 -C = 58dcaed1e1b6e322516f18684da2ff94 +K = 6439e33e6fb90957d0cbb4dc6b8fc39d +P = 8458a83e55ad6c22f6 +C = afd41c6bc2a8012f364566b12650fb5c9f6fcedce2f10c18 COUNT = 7 -K = 145a453715489104b355bfc0d8b6f8a2 -P = 3fe8a113 -C = a638f534fead32b3884c60fa9a4f514a +K = f39cb5254a04c0d6655bf8a6e4f77409 +P = 5e83b52c1ea2854a44 +C = 2679c47f0e20c795c91b6e483ee673b891e8826e87a0efc7 COUNT = 8 -K = 1217f6fec9b07c460e045bf5a876539f -P = 630eab3e -C = 75e4a240bf72403e3a4a2b6f889b6ce9 +K = 1b5071f6b86ab23a634171f5118e4303 +P = 66a7b414aa6342c92b +C = 7b2d7c49a4b760d28fc9a4ed94155dbdd3c1ca1b3e086fce COUNT = 9 -K = 66d150e7e1225d95592e83cf5baf52e4 -P = 00ec537a -C = 79f7ebc6b43c7cf1f9097d01dbe7e4dd +K = ec0e65a462ab079b0fedfa07cfa34db3 +P = 8fe3351a161773ab94 +C = e3f1571d9301556dbf638f44a501e67bbc9f2ea3e02cfdec COUNT = 10 -K = 677904494fe57c164121ba09d13f10b5 -P = 12027bec -C = b345a80bd6673d3bc4e2ff8acca3705c +K = 81c2cd93aff19bc0d27b912180e7cf68 +P = 366edfa2fa42d0e65c +C = 6a97050fbddbc906bea5a0c7dd601d89c258dd6d34e3e78f COUNT = 11 -K = eddc8f4064a963795652dfb257291356 -P = f05e9516 -C = f714672a3323008b5fa23d3efeca308c +K = 917fad0a32c6b42630678ce31f7f6902 +P = 6c8af0ffbfb706d2b9 +C = e654f13917a5254b9864f55017f21532a18c078ce1f3e748 COUNT = 12 -K = 8b03d899d70c6da7dc2089a6cf35fd02 -P = fc3375f1 -C = f447684692573464ea2106738d17f760 +K = 1ea5e71563faf6f2cd3b4351cf92e974 +P = 712bcb3c2f2b040aa5 +C = 52dffb99b8b955dd975a0a0fe23a9d1eae292a77e027c876 COUNT = 13 -K = 222f3ccd3c18a25bed927a471d5e115c -P = 05a74c26 -C = 9b959bf2c089b435bb6868a8a70987e9 +K = ace5be65f5a709d5a3a67be65b9f398a +P = 4b0307e516efef200c +C = 9b2a7c6d85182fd5d5557226e162fb6cd717fd1e739c9e7e COUNT = 14 -K = 8c0cbff86559b98fea2895a753419c1d -P = 00a1f7e3 -C = 9e22fb7c323d29b940ec667c1aca056f +K = 8ebb7f39995c93139cefaa00dfa0af0b +P = f419c8dc1687ad3b6f +C = acebf92fb3a7385e69aff3e1fb33bcf0bad00c9532f20d9b COUNT = 15 -K = 842bd2c04411838eedc790cb07d9d724 -P = 8c80a46d -C = 9ed48af00e964d8ec40c13cfb12132f8 +K = 6e414c2f9349deaf05dad1e82c22192b +P = 7f14ebaac373cef622 +C = a2633d972e8905e4733fdd693fe28380890cf453c913ff5a COUNT = 16 -K = be8ff8ab0ebcb35c173123898d9638fa -P = 6913bbd6 -C = 553dd2e426230b7c78257bf5e91f71d0 +K = 054e48944b7f65c4c820564d26da7895 +P = ab566b6b9d599fa5d4 +C = a67e59d89d36482f976ece6fe50a99a2baeaa19cf006664a COUNT = 17 -K = d823792e9af6302f87ff2619e1af89d2 -P = 0dc8c714 -C = bf9cc0ac555681382b68370609eb6cfa +K = 582169dc8c27cf17f789ad77dd943f49 +P = 18cef5459bc8d51eba +C = 0554c81a2f11b99be55943c0ff4529e270dda1b18ba8aaad COUNT = 18 -K = 5e5dfaa00c50c4c682c2fc2d1f4de759 -P = aa586223 -C = 0baa9072be811ef9eaefe5f2a068f237 +K = 1df87b314e5669f07d59f8af9d4ef439 +P = 4832c61a4e0f3ab1fb +C = 2dee92eceb17b107c4ddb679581fe40780f5e28fb7186e0b COUNT = 19 -K = 474db0ac62bd3d06c808bc8db4aa7e0e -P = f60de76a -C = 1f39ddd98a082721f40aa50b9f67865a +K = 648de2db96023d5e008f403888b95b4e +P = df1972d64a92c51a1c +C = 76d3e476b94365dd93736285a1bf4ed33db15657fb60a06b COUNT = 20 -K = 6ade109605f921cf6046e37cc787a14d -P = 140fea48 -C = c1999d0d855f92a323af28be215f0f66 +K = 1106f4936f671173145c3e9fe0f01f18 +P = e65a792252e8688235 +C = 53d864a773327415fb7c66cc675506dc338ecf1071e82699 COUNT = 21 -K = 7a9b2688489164b9892040453fdfcc99 -P = 556d7467 -C = 21536da4bf81eaf3f86379b3f1e3618e +K = c2eb68c415816d528e84511cdb238250 +P = 388d2ca38d96c68c52 +C = 29ffaa7196520635bf9fe3970885c0cfeed68695eefecfa4 COUNT = 22 -K = 8dc773788aeede9af5e896a21d6c1600 -P = 0a8ee812 -C = 9f0e4e6bb9e2e88fdd697231aca2995b +K = 89f3102e451fdf6d853e83e02a7ca7d3 +P = 9076efca703857ea9c +C = 5dd0d083c6f0e6dd89cc36ef41d0169941f7c9360afb1d2c COUNT = 23 -K = 395c031c755f36b56740809b4375b249 -P = 58b3e3ce -C = 7993b48a213c64011cc3b7744e2d6aa5 +K = e60ac52ae3e05c451411eb9150331ead +P = 337e835b18f46f5f8e +C = 4176cbe53990f8e1b9684b7ee7be818df6758297ff2c1664 COUNT = 24 -K = ba9e0d19e6c11a10995387298e9cc744 -P = 60188055 -C = 9b5dc7890d2b67d5fead0c295ce19ba5 +K = 72731ed2780b40c146f81fc3bcae1d2c +P = c80a7af37bf23d63ad +C = 232498f8f4d2c1e798a2ea8920a5a6210ade65db4f96bd31 COUNT = 25 -K = f9e004c8ca29f708c501ec07265fa786 -P = 594e1dd5 -C = b7f5cd616b7582eefdb01400c97badb5 +K = 1409ba4b438b13a3fd4a1528e08847a0 +P = fefb5ecd586561a9b4 +C = af92014b891f3d3813c56922dc28be82653cfecaeb8de9ca COUNT = 26 -K = b0ae1e86034a119d502501c0bb3ca7c2 -P = 121760f6 -C = 2b85f9d270cb4f4cba1117fa4d6ad245 +K = 26e972bcade75749a75211e092983a94 +P = e6e0084cf526cd9837 +C = 7481c1256a2704d9055fdf8a7baceb7fce54ac4916502146 COUNT = 27 -K = 1f36a28fc4bc592ba1d9ff58cd6c21c4 -P = f4015513 -C = 557944a2b3ceea6df8686e25b584e755 +K = 75de1017d11f16860c2723a2aaa38e7d +P = d9e23a4ed2fd35280a +C = 3f2c18b6063e70089fd06f7d6f2a21dce7e434ebe5200d3d COUNT = 28 -K = e9bc34b4a7ff2082ee1d227271e73404 -P = 9717bb54 -C = d3a9af71e9c99421ff42eef027441240 +K = 285905c4733cc71b0cee80611a9b8e04 +P = 7477e3f5ad2537f99d +C = 414666903bd10b07c3715462c6f0046d47ac4dd50731fad7 COUNT = 29 -K = 4ed607d95282f477974995229fb4c4ae -P = fe24fdfd -C = 5485e55e835be16eb140f286152de8a6 +K = d97835c4fbdd62790e4e2939c6b33730 +P = 56b4210817b68cca92 +C = 5be3c4981a00706bd182ff2bac37c50539885e64087a394e COUNT = 30 -K = c666e35a2631446a2774d56c61276db9 -P = ca5e0bb9 -C = 02ece4f93883623eb1e23764a76d3d0c +K = 86356fd52ca4c31d865b6b165ae9a803 +P = 8c8a99ebe629283c52 +C = 5e816b3a0bbd844eea000c9a9a45377942ef5a45ed87736a COUNT = 31 -K = 1ad06a9ba6adc7842e9f0dbdb2b35d0b -P = 9dc21769 -C = 2301807c78fc90de8b51ecdd5cee06ea +K = 4212f40f423e88c19d21c7264f00742d +P = 68074e8ad31f81e98a +C = 089ade59a272ae522b8577ef5f6d81d2d98ec9b5af522083 COUNT = 32 -K = 0c9d8b0fbd9008c6d66c758d85f23fa2 -P = d5ebb1cf -C = ceabb95c3d0c28d93802cbb49252f363 +K = 58b89872d4cda8eaf62282fdb3e1db1f +P = 28e5f40212fff92794 +C = 59d042cae4f7ec4feaf257c6dcd854eace6c8775fc2065c7 COUNT = 33 -K = fb6df6836afd89eaf7c83a1519446c62 -P = 6c9e5cfa -C = 7da220ec00715e15ff098c05e32cb4f0 +K = a360365f76b74e04a54f5be015b499f6 +P = a412595c4330c4db46 +C = c41e0d138548f4cb2e8a81387d2ad26de29424f4e8b6b726 COUNT = 34 -K = 7fcfb2830f2af69a5503029fa0bc656d -P = 5d41208e -C = f6803188695dc1dd33dd2efa467b29d8 +K = ec702405dc29215a62b59e52fe1f30f7 +P = a3ba5a487697510a68 +C = 11544b81272a7375fb2031fa51b40b0975fc6de314c8d95a COUNT = 35 -K = fa14dfd20fc923cf9aaf65f4361d74b4 -P = a38abce4 -C = dd6ccd91086a2bfe06bf06bad5b55ce2 +K = 80c15a9ed7e91916cd2a752b14bc1777 +P = 8651703cddb70ac7de +C = 59fbad0bb1f068694e6fd77b9d4d99fbe8e9f0bb6d9bef43 COUNT = 36 -K = 1c629ac4b0d98c0fbf10cabddf7d2bd4 -P = d593a773 -C = e5d3d2ba246b3d1d6a18d1ded3e55bf4 +K = c42fcbcc971b0b1004a5d39c18f1e67b +P = 7cfb349e25c0d31a4d +C = 88169ad6a6eb25aa5bea070dd5143e3d82518cd92afc6fe5 COUNT = 37 -K = ba2929299cee0cd78809cd0f8431e167 -P = 2292cc81 -C = 95210fab22d2a3af80ce9d95a1f87a93 +K = 4de3d0d228d0e33a48b3aa311f506c21 +P = 3d531905170520f839 +C = 3517e4faadfdc348248b9cea14aec3dbfb4262f5bcf516c3 COUNT = 38 -K = 561596460d905518067b5c6230583e15 -P = 7c02e033 -C = f5524b6f24c82011a4dad86514a5e05a +K = 26c59f0686604449477306c44fa571d5 +P = 71adafd623b6b74b10 +C = 1e0c8ace14799eabd879adaf3bd41610bb8a031d263f2040 COUNT = 39 -K = 9e264882c1c17d7e0cf6124f538d8c14 -P = b177778e -C = 7be39af772a6835b325040e2187f54c2 +K = 5ae26056fe59b38c2817e4ceaeadbe0b +P = 7284e900ac65d3550a +C = 8528ec264a3433c68241e0718e757de14bc44db7d215154d COUNT = 40 -K = e44f2e7cfac85062c41426fe3dea724d -P = d86ba8f6 -C = 088839fad46ffbe1f3f1012c018a64cf +K = eaf9f3fcf5d54939cc9eaeb512e29644 +P = 19f72dee6d8c48e04d +C = f6681bf65f6d0baa5110852c6077bbaa39ca50b9a5bbd9ea COUNT = 41 -K = 5576e01422b54e96ea3006414ea6b433 -P = 708317df -C = caadd7c9df619800ae8fd85c3c254e3d +K = 54a2828c96bfacf47498d6d84b581382 +P = 017ed3e5428f3ae2c1 +C = e5705a4f58527c672f2424702fe0ab9683bb98bf4090598b COUNT = 42 -K = c2839a546dcd4dbef3dc9f159f755f3e -P = 9dabe784 -C = 5403fb386a6e808ba09809ff910cd158 +K = fe70e27957f070876f9329d1079d7cc0 +P = 9f08ed5dc992242bb8 +C = 9101f00e8b2a4d7e7cc61adb66c6094ee34359fe73f37e26 COUNT = 43 -K = 623d50c1738624808b7d604fdfafc9f5 -P = 77d931bf -C = 7b8a25ccbad2e023f46e49cf52e9af1c +K = 3fedf4bf20c463969a44ce02ea3d0617 +P = a3be07e337bc935699 +C = 8eaea2487a7b9aab311e01fed91027288d24ea221ed912fc COUNT = 44 -K = 21eac7cab55401bd5dfb5c48b4f2ae4c -P = b060dd3b -C = 354771b0ea04c5b535249b43588980b2 +K = 3fb5edfa7711876f26baa7058f256c21 +P = 157687e50d1cbdc4cb +C = 7afcdb80e58d8a52936d3c5a702e6b9e8dd8b6b9eb4a82c5 COUNT = 45 -K = a438f25d364151cac1f13798fdb16990 -P = 804743b9 -C = f11e03652227b4499d2d7337fcdd909f +K = 3d6e5edc569c56c6c87ab7f819e59a1a +P = 4fb002bc2255e72f36 +C = 905a3f69a150f7e4468dc5be30ce72b1931e7d5bfe094d19 COUNT = 46 -K = bb9c9f506623fe1fcc81f5358858e944 -P = 92582dba -C = 7f99bade2e2f47cbd8341dff9ed4a9c5 +K = 262d16193ec91fe66df8b2310115d8b7 +P = 038e276e4d323f4f36 +C = d2283d0d2eecbd19487fcb33afee5cc3f7adc86245abb5f5 COUNT = 47 -K = 463210aafe9a1988fe5484ceba961921 -P = 04f11a31 -C = 9bc1c3f3fdee3cf97a30fb6cd7ddb638 +K = 5c28a0f3e3a26951e0be4900fe31e34d +P = e057f610967ac2668d +C = 2f59e1e2195a33a8b8afd37465179c3bd081c4c4802a1342 COUNT = 48 -K = 9a9019d847a2daf45845cde8d77b2e7f -P = 9e752b37 -C = 28684036414cc10bb48326a0f8aba13b +K = e1d6c140bbbd57bf64a9e04e1a11a07e +P = f0ba850bcf4b993978 +C = a5675adb4d93992afa58d4ef64c37cea2fbca185b4eb12ef COUNT = 49 -K = f730b918528e01f06989bc4627159644 -P = 88a9d9cc -C = 3dae49004742665ebcd82e0fffe64933 +K = 07402f943187e94d1f747f7ece9984a9 +P = c436a76b444072b5c3 +C = 2752ae4310b365955eb6153aad0d079bbc252bd2d822d12e COUNT = 50 -K = e8fbeab944448fcd7d01ad4ae9387cbb -P = 93e31ec7 -C = fade0bd8c52d32b7274e4716c774c353 +K = 89cc7be578039d9f8474a4c3a65c201a +P = 408975499a8bb71f1c +C = ded6bfc1667bbb3e67dc54025f765ba02e86a6b2d730e3bb COUNT = 51 -K = 006af5b5d68852979de95f5b6814647d -P = 7ae28671 -C = 01222942bdd20e8d6f9b427d72a68ce2 +K = 197c5f1abf1938ec26b3ebe9ee2223c7 +P = 92a72d191f76123054 +C = 1e53baf06a56d061258349e09a3fefd0f891e52f79285fc4 COUNT = 52 -K = a55c35cd4d81be30ff0b9ac29faf256b -P = 51034e2f -C = 30485abed9beea7277570265234e327d +K = a6f9ea9dfdc6ab327d081b26f2902386 +P = de764581a8a299d44a +C = 76fc5f78bfacf0ea8a40f1b56f44adec7d2742d3521f3785 COUNT = 53 -K = 3d40a7e70d755e66af626caf714b82f7 -P = ad7321ef -C = 22fb9348e1e71245123150328fec5aff +K = 83317849398b138001e10c7f51274f7e +P = 110b7b7d1459f13ba0 +C = a9deea53f062727a9dccb0709d23748df81800ead458e58c COUNT = 54 -K = e3589737230fa5b97644b3f59bea21cf -P = 5be6b9dc -C = 438f4bc6aca072be8be1d93cd9af3619 +K = d2c1299b41ec94ebcd7aebb55e9662e7 +P = 8fddea1de2b90094cc +C = 0df3a2b3bee0d74c29e4a2b3d420fb8ca5441990fed3a26f COUNT = 55 -K = cb7b691b4ab0face4d164fe36028aa4d -P = e469a584 -C = 88e5a814e28fa81f3620e1c0c759a345 +K = b27fd58b5c58f8a562ac6b93b772d50e +P = b703f0e7dcec4279ce +C = 04b34c43332c3d9135b6cb477bd9de2f7f02de713579635b COUNT = 56 -K = 10de859b0afc86c1594a64a770830b7b -P = 5d1c67f1 -C = 5badd0bf027eca0627f9f9d837a711af +K = 0a1a927bc83eb9d38d4b6f9e86b87542 +P = 0ce4184dc399d05ce8 +C = a73902e33cda005522f3d37dd109a7a565bfbb1fde56a1ba COUNT = 57 -K = a9e4a54d7b1a82e66dac4cc5bebbadab -P = 5acb5753 -C = 07b13493e22ad37cf189c5d87f633e82 +K = 6f388c89f1f9015fe63b639e5ee7b066 +P = 77fd0b2b2a42fc22e3 +C = 97e5252ce2e467a60f5eec5a14b9a595c20f0d03be7ded6b COUNT = 58 -K = fdf0937d3b39f6bbedaa6931434fb4f5 -P = ef0b4bc6 -C = ff4e2c4a785577f85f8d5363dde1e4b1 +K = db309ef442f797a32a9b0e80b54bf331 +P = 831d8c52af2684a1f4 +C = 6a867c0550fe7f5d5681d5729fa8253368888dbf00de194c COUNT = 59 -K = 7e0bdc704ba39aa31a31fa28664fca89 -P = 78e2e03e -C = b2432add4746f32e08cbfa2b90f43122 +K = fdb723f790cd7b562067fdd16cd0b666 +P = 5d9964c0c10c36e64b +C = 947b4c7f45c8dac417f7cfb4a968f45e221c94c7fe254353 COUNT = 60 -K = aa1e289893688f05a4cbd6e34d00090c -P = 518e65a1 -C = 9d3ba434b3d8897dc3c9353b771bc7c8 +K = 894109d4dc28f863bd521e957883af2b +P = ee3d419b4631325c16 +C = 5d166c70f20c6a5104175ed188674f1545e1f47463306e0e COUNT = 61 -K = df0938b202728a136ea4fce8c2cd61fc -P = 1b33fc38 -C = 04b91e29ca72c25a9acb7057cec78373 +K = b531844fcd740a16331dd7b9672c148e +P = 4156202a53e5eaa7ad +C = 3456064f7bd4db8b81e79ea014da5daa77c6125b6291bcb4 COUNT = 62 -K = d42b2477a612de857330b66d783d3776 -P = 910f6e51 -C = 5e881684d5176eef839886cd65f09bb4 +K = 886e8887b405424e53fdf63a3f969cfe +P = a8f2d6e05b1e699d8e +C = 277fb718553a13492d750d868b1fc6dfab6ea9419dbb1bd4 COUNT = 63 -K = 97e815fcf95af4dacdd1ca31affc9653 -P = 6c840be8 -C = 2540f254385769eddce40aac586786c1 +K = 6b929ea26c4fed66a5f16e7fa63c87de +P = d7db5906dd8c1375e3 +C = 68655209e021194c38524ebce73c4a7117b2a83ce873caf0 COUNT = 64 -K = 498c192f1d5a967f38aa842b0e813811 -P = d1f5445a -C = 4714527a861629577b44ce867cf7aa50 +K = 5119d0eebd9ae5411998e097f5d034c3 +P = facc191f35dd742073 +C = 1c013834993d3afd3865975016b3f6248edabfef0e6898a0 COUNT = 65 -K = d0e1b13c881b3309c459c6e5b8895a09 -P = ed01aefd -C = c138453e0939cf9fb7d6ae0352be531e +K = 2d949b7cb184605886587fcd0ac82c0b +P = 34ed7661a32fdee8c6 +C = 907785fafa5dcd9de4b966c08516c3182de129700469a310 COUNT = 66 -K = 4316e35a5ca548d96b63f5bc9d977a68 -P = b6cf4497 -C = 0bdd56c1269e9be55c20897449686f23 +K = 834ca1a08d32003355e9e5fb0e771f45 +P = 2aa697f25fe07ea6ef +C = 887780e71c74f230969d025c4de40d7269783e6665b3d5c0 COUNT = 67 -K = dc89263f1cbd33247719d0c5205e9d9f -P = b68430a3 -C = 3e26682febc1569f8d0120874d964daa +K = 632e86f707028cb4a29b42b8031fdb7f +P = 8ae603750a847fea6b +C = 23c011ac260c4404917ba896543fe49f96a21dd24913cb10 COUNT = 68 -K = e46038b1b747b00f126f49a58f1c3df1 -P = 93d19558 -C = 3d0c9f5cb323456ef91d4989dabd8ceb +K = 8cd2ae7166a576fac31b1b388d499410 +P = c11300c52d0bc58239 +C = f02c23aa6208d9c518dca1d25bad317c68520752c5a15384 COUNT = 69 -K = 3c504f1e065c18314cf159eaa3a1cdf2 -P = c8994dfc -C = e0205dd9d350e679d8189cb77356c983 +K = 8479ff5debfa7fdad4dee959a484daa8 +P = 960ad95888b2c5b3b9 +C = 80435238762eaadb8f162d299d6b9f4a5408f055c8a83716 COUNT = 70 -K = 73f858f2fc5265434f01b78121dc50fb -P = 81fcd1f6 -C = 9c5bb4df2aea594e9c78afff070077a6 +K = db901ae9a64cc7e688ef09513e9dc88b +P = fd67561f1082f2ca92 +C = fbe3c8fe94d205f74a091ffe2796f4396123c4111fea8401 COUNT = 71 -K = 62f6b1804f3a4ca02a060450834a39c5 -P = f0f91194 -C = 8929c8437cb9c31587139984c37251af +K = cf0b3fd1ea62bcb7a92ada996e82408c +P = 2a1e446e2dba89001d +C = 85ec6f260c32939828c7c90a481c2b0d90ad06c6c31ca25c COUNT = 72 -K = ce745ffbf959b12208748dc56b7384e4 -P = 87e66778 -C = 862a090b9db13aca137c0671643a75be +K = d444fbe11d4733e49de224491fa7e2e7 +P = 1161c4a43e9ca16a2a +C = 86ebb82b7f5b8d96449de4317f564c177389d3514c757175 COUNT = 73 -K = 26c9b5c4ba0c6352b1d9fdb19d449e9d -P = e244f47a -C = 333ad762e3c3c1dc43dabb0dfc4168d4 +K = ade7b3c6d621fb3596b7f76aeae777bb +P = 71c700fc1bb06a4f95 +C = e65b86210e74159eb07013c09ed858c2ce864f1fb68efe95 COUNT = 74 -K = 61787382001042683a8e6e687d69e477 -P = 77b5f8dd -C = 7672be990d358c504af3f543aa62b203 +K = 639a81436cc1d574e1c630a0b32677ff +P = 1d6f94267cdfc23b3a +C = 0930e8672346f615ebbc10d02d33afe0bc123b3840c07bf2 COUNT = 75 -K = 2ad5be2de7e74246b63ce859ec3e5902 -P = b4be28ad -C = 1647d12f3ef46a9fa0b06bdb56560de3 +K = 3a3c71e48839519ba36a798733abd450 +P = aeade1ea686e77387d +C = 3b980da25af82d7a46953c6b2053f66ac08d9201b2236ddc COUNT = 76 -K = 38b6cd9610c08579b43aa93588287344 -P = 0d50b4ab -C = 5927004b15b744809f62435749337f2b +K = a7286fb82213e1410592105f933043cd +P = e5622b07708efa954f +C = 52e83a5d555f9cc35a13555eefa66a896f9fbba5a0da891c COUNT = 77 -K = 2b4fe9e5e93d616c86fe827db8b35414 -P = 325b6fce -C = c56b472e0503187948eda014150efbbe +K = 6dec3b2d5ce9833c626b01765a0bec11 +P = dff4a78f7d50e82668 +C = a299e896c15e7676150d6e232ce1b7137512018d2970fe46 COUNT = 78 -K = c911e2505edad298dbb1d3958f381873 -P = 835dfa77 -C = bd047c9fc1738b39259ee067e5a72890 +K = 0a1b21302a1381401d886d4ddb12d66c +P = 32959623a602f15824 +C = 0612fbad354497da38bb59f81ab90701707f02af88c67cb4 COUNT = 79 -K = cdc80aead8db4a70e8db6267107a3ced -P = 1f0707bb -C = e8834b981b52d53e519414d0a8aa8ce5 +K = f9b1284a6087928c7c87428c574dbd8c +P = 893d081ce1087a3ce8 +C = bf20bb73e171233238f55acf0e636a82664fecf227ee1f1a COUNT = 80 -K = 2dd4212e57d99fd07cb99ae062ef461e -P = 3cf1bc21 -C = 14cae94b523e74df929d54f50575b051 +K = 3b5cd8c3033041f190be363db53828ec +P = 42ca36a1a4fa9090cf +C = c87e4339547229309f222a9c7d2719e7329c56516bb6c7c8 COUNT = 81 -K = af2232499822aee3c759b2ed7600c811 -P = acc56540 -C = 2bb24e1884d980d377d035433860abcb +K = 8fc45cb694e882569274b464beea87eb +P = ef8264f1dda1da5cb7 +C = 44bf1b956403fcccade87142e015b0fd0f1d4f222af3e984 COUNT = 82 -K = 435d0af7a4f96e69f761e84ee95f8874 -P = 981d7804 -C = 6346bcdb7a31a4720fe28bd1bfdcdd39 +K = be62e60ba4fcbd0b53c87c5e1c4dabc4 +P = ca6fb8d3d0586de361 +C = 7426910545da387b84d9de80985faf9ff3930e00c28a0249 COUNT = 83 -K = 0d7cc4330e0d1360450331e52959e9ec -P = 483e6aa7 -C = cf100db12025a869be0fbb8f4896cd1c +K = 2a48771e23315c72d38b475948000ae0 +P = bb2cc919f583723414 +C = 678739279c190f74cf0edfc93bcaddaae6db529faf3a9643 COUNT = 84 -K = edf60b598d1c99839cb40e0194384283 -P = 343cf6dc -C = 82b4e0b7ecdd18a285ef62844b6f86f1 +K = fa2b6614013af0ed287450922f489763 +P = a8d53ba80ba229d9f6 +C = 0c395b0a9fa0c52886baf3b0e5248aeb36fa134491f11bc6 COUNT = 85 -K = 507a7d41563f5e9355cd43da9b704cbf -P = 4d805416 -C = f4ac0ae510725b377b265776048023cb +K = d16f0fe9e13a447bd2ea15316b08331c +P = 1469ab6da26708a339 +C = 696aaa835ea200c39f8fbe21ed3b9f5ad3a957acde6ef1e5 COUNT = 86 -K = 83e68e49017f66498b882f33e4270f3f -P = 8eb5294b -C = 6d12b67932ba9f07f62ed53f86f085e5 +K = bfa5b2c29420a10506ea5d0e9a1a887f +P = 094838262e36103222 +C = c225ce101d31450b8c8a621df6042b1deb3f0e952a205d95 COUNT = 87 -K = 8a562fc3d9a4dbf70eaf75ec8e43cc47 -P = 0f1e810e -C = df393eedba3db5bfdca76c2c62da5431 +K = 1c6a8ceb4a9ee6a9683a578a3435cd13 +P = 5447698de29aea0d68 +C = 29dbee34224feda4740138c0fa361c91b7da9beab61b1103 COUNT = 88 -K = 0c32f4fe672e5a76a81006ecd5144887 -P = 02c03f11 -C = 2e644fc7e7265e06730493fd9da9942f +K = e9cd310a5a991a5f89875fb4b31fadc4 +P = 59c4d956ec7becaf51 +C = 000ec854065d01e65143b08250175bf23097b566f4fa8644 COUNT = 89 -K = 581404de644fec2d449a6ef99b9e5914 -P = b7d4fe08 -C = 29fc6a50c1228e5edd05c5768023435f +K = b170ec4e6cf2f7947f4e69cbbeeca732 +P = df91dad1d737c64cab +C = 7633137ac8dff7e9cc5bdd2b7944159221c89660f02c2c50 COUNT = 90 -K = e3d9a2ac0d6d7dd165ba4d701a2414a0 -P = f9e1adfe -C = 65198c8a80789d9f7e413af5d3fc0e68 +K = c9e05eaef6762f90078a36ced2633752 +P = 991d84c83d2dd20a65 +C = 947d350821610093f8a329c08946ca42102eb4116cd5bc6f COUNT = 91 -K = c8bc1f9a6a8466317311079dc934a726 -P = 16fa1b32 -C = b1cd6cb22bc0c049566e74aa37e20c1e +K = 52023256518ce267bdd34852cc5b76ec +P = 645abd0435918a3c11 +C = 04db50d36abe19e5b0f707c6822fd957e96d698da098bd24 COUNT = 92 -K = a29431dc306706456bc8c2df78cf9b23 -P = b93520c2 -C = 3e691ce69d20b18ea7556f6900d003d1 +K = 3862ec40b47d74587cebdc40ec29a9f1 +P = d2d7880a5a1061e195 +C = 119b48d7d75ff529116e814703525d2287827f4422a3163e COUNT = 93 -K = 67dd36d5469b983ee45cd2d85b327f5d -P = 78c3a3ae -C = 5c355223552d90e0afb253d3d3219efe +K = fdec8d4feb80ad4eeebf1edbb3d9bf09 +P = f78a7533e8785b14f4 +C = 2cd4b77a9404f781a606e2f44c4d1d473428c654d7f906a8 COUNT = 94 -K = d5008b8995086e90cc62d6a790eabb92 -P = 6e2bb9de -C = 9d8e152ccac5414efb597c66e8966951 +K = d7ff6cf24e5095b3bafc7b953bfc8bc3 +P = 29f28d87147cdd0027 +C = 1eb78fd7d555cd26864e71715ca9f61e1d6bf007a689d6b4 COUNT = 95 -K = 74eb48714292ffb84859189ce4489564 -P = 2d592271 -C = 299f44fd687dd6708ca64aa6cc726275 +K = e73bbef2a81960547067534ebd91789e +P = 187021f0030bd96cb6 +C = ad8999e03cd1efd07db430639f07004b91e2422821b49aeb COUNT = 96 -K = d10aca9d73017114c1b953a1f7900265 -P = ef07fb39 -C = 281a0c75a6220e1de1f833415f5f0360 +K = 5110268ab87953207e14a7c5f72ca785 +P = 8b0657874c8b2fce6c +C = 5b3ae2e3f4e49a78a3ca7152bbf883bb19330b7221ae26d1 COUNT = 97 -K = 1d890458837b55912a75b32800b29423 -P = b6ea12b5 -C = ab2d717aae720aed21f9678e99366344 +K = 877a411774a43c7c488c63c76991b4be +P = e2a34f94175637275c +C = 38b645f2f396af7fd7c1ea58a3ba966c2063b9d2db8b127f COUNT = 98 -K = d8a55ffa7792839679eb3bc3920c968f -P = 442a52d7 -C = 23dbde654c4b5a5c2c786317dba7120a +K = 5ac21b98cad12efcf09242b04ed32739 +P = b5ae653959f534ac2f +C = ee2c7f7bce7c0852fc8022545b08d059049cdb15959389ec COUNT = 99 -K = 4d1fc70d8cb0d966226d2669e99de96c -P = 2018d112 -C = 9186556ccb84c65f28dd4e20d8bbcd61 +K = 7078af5f9c2c75f32390f52fabe95d46 +P = 4e57633d226bb0380c +C = e6570b300c5d97ebfdff98880c50e1fb278f978bd657fb7b -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 0cf874392e953d6b640e3476dcf7ce29 -P = 8484fe0ccef93186e1b458e6 -C = 50c092417c83a136b9c87ac1a2acde64504d5e4b63edc8c4 +K = 5e4012fb2832ebe158393b1056a0ff60 +P = 2cbb5adff80a5dba53c0c99ed5c1290cdb27a9aaa6547b4c2eeb4f998ab69d +C = 16c227a9b948d040006b7d5f6b2757183a451ef60f1fe99c114bb1cc4cb36e4e90913943394b777c COUNT = 1 -K = 0f79eb5710df933d06ade6c9175b2a61 -P = 2e2ac926f682dfc135aa6cfd -C = 5aec3d74ba60a2910361535c92feb47f23ad462a3db6e2e2 +K = e96ca413eab4b4823f355687363cf5ba +P = 9a872ae0e043e203bfa7b5e6fe5b12a27eaa772290352ba5f08dc2a2416fe5 +C = 80c8d0725ff49dcf744e2fcea8a7ec7435f094f83e87f33ed15bb85f641bfb2cc01e8fd4478a27e3 COUNT = 2 -K = 3dc82986e586ccdc5a7712134bdab646 -P = 8bf83205b9758095bda60c3c -C = d4a1a13ebe868ce899acb9739cf135b74334297c32264bc8 +K = 075f254587564708ff445bfcb7de725f +P = 66207ca9c60e60c96b710a8ff4d25cae4acf7f371bce2501c46bc5b178c241 +C = 6c5b31d6a324662a1fae82b36e13a037c0578e5f560a3ad490836049161a1316c162012e2adfee58 COUNT = 3 -K = 8bda9c5145f3d166ccd958a49fd44972 -P = 63de054927f2df325e35336d -C = 0a7bb9ca8ef3e0fc7d0562ec7fc4f393154bbcde2bf0aa1e +K = 9751072a274f77b3f04e114ea418237b +P = dc16473847a6c799fe50f1ed9bc779db5c3163cdfb2e7e16b3707d945c5519 +C = 7ffa611c92220b5e4a0eff5f0672ec335dedff22207433932a02119531919a8a44e46f4c52936225 COUNT = 4 -K = 91585d99f2a4e3bf22007f56cc0b34f6 -P = 1473e273c386d2b0393cbd02 -C = 2b3971ce21861cce1233d81840c866836f0ce3e49633d09c +K = f88c0da8001ac984c198f2bba865e65d +P = 4c266927b98a8e1c7443de9179ee4c8936a82b95504a9667c54807fe774870 +C = 269c98798b46470de589bc3f9d08189ab51cce0b8af9f54afdf2fd4e0399eb74558c0066643b9ed6 COUNT = 5 -K = 46868fc117dacd7971b874b183f8c08e -P = 0bbb8eac7fb37b0fccec6b01 -C = 4a62abeeb870c13f10e616bb165e82d3f4389314916a1954 +K = 79d93c7b105d53bcd809628534230386 +P = bb2f1218047b1b3cd7b817ee8c72afbb4ea538d2eacfbc32efafea4fbbd33e +C = c81666ea86ea909b7e122eb11851f5f0ea2b6210b45b47fd7dbd50b23e80d93e2b81ef29e3f39592 COUNT = 6 -K = 5f3c7de0583cb05344eaf06fc369374f -P = 08bd63da919e665445162624 -C = 1b186692071eb03de358bb2fcca3124343e015f3c45c3b89 +K = a2ff045c527b867240e42ca346b1f783 +P = 0a934574522ff431824dc4a47cf9c67657c8bc482662687f56921972f9c6e4 +C = a659018ce7787612624e1715bf4a58b1b4c622a8d5dca3b79f5adea00bd93f43c94af89b729c826d COUNT = 7 -K = a1d3ce07158b51571232ff475f7de285 -P = c4c297465cea6ec1609b3299 -C = fe47348e69689d9bab9a6cd3646156808aa256a67a1d637b +K = c2131fb3731fb7eef9b4b39656e88008 +P = 2d894a44b7757cc46479dd8c68f105da67cde1d860ea224dab98ea4581b4da +C = 232e8a082791b099bc5fc7b9d08e76ba4b86ec5a56bd58a5f429083a309f6d51912ac8d56dadaac6 COUNT = 8 -K = 814f8de0e8fef1079cd7502541793083 -P = bc490b50cbd2af809856887b -C = f697106e54bcb9390f17fe146312159b0b7460b3efc64799 +K = d01ec44f40636639610b41c261e564c1 +P = b8acd066ad7c7b0e5734a09f32f0ff83e31d63a2cc6a81f4d17ecd1b7edd1f +C = 7e2af7de26b5fc40da436fc1468c557637254a7d6507d7361934559940227fb42ceb8eb713c6727b COUNT = 9 -K = 5cf033a257501774fc03ef3760e71d89 -P = 61bece4fb4b42f59f3419749 -C = 4494a06711922e34cfd5df35bdcf8055bc0cf3eda5e3be64 +K = 44456e2cf1ada98e72e9fc4b4030047a +P = 297568c1977d7eb9949edefef0ed918ef59ec22359418ea140b1818163a370 +C = da4b48fa5d822c0adc89bfb8a482bcfcf6ebeedb5b0e898dcb2d6113e62cf04d1b72e9caac029e85 COUNT = 10 -K = 5f723d0caa6114b186743d5fa93d34e8 -P = a4d37c95307d592f5d1d3750 -C = 0919dd69977f010ced6d2f125e4ce07b16047b6b52e3400b +K = dd6b75068d8099594f000748b0b7d5da +P = 63be8461d77ce25ab11c8cd86e06c791d7d7bbc20f50cc9f711827088a5763 +C = 29c8b6343992db6da5406efa5c6b9181bcdbc3de445f70384f010613908f656991d5dfc9394d8e99 COUNT = 11 -K = 74185d6cb9ee078cd8fd2a92071c9470 -P = 92a7e1e33e3da32b5e96f0b4 -C = a21ca68f40eb03c6c38e806faa283ee75e5e9b49db394284 +K = da0ceba4f339b6d990be7aafd5212d2a +P = c9e1351c82eff2f4a60a839e52666ffa56481c46e0a56c9264c5f358d26aaa +C = 1c9e7a1a47e20db77ee57ff758c8aff4e099b4b2e1393332572cadec05e31759f59a716a17799f23 COUNT = 12 -K = f3fd9836dfff45581f8d5e7a6e99b20b -P = 0c68215b40b961dacd71d944 -C = ed54fdeadadf1c4a575ca38cd271e9828b7ca795daa97d5c +K = dcd4456d75fa3c83ccbdd1f81342d551 +P = db37501cd0b32dff6c3715e59980d378fbe60165d4122f157a013a520e4039 +C = e0848c25c4befd0c2c77d5b98da870de999efa0bba1d74a44f2d51a2884660fa236772458315b2af COUNT = 13 -K = 8274dbe09255c157558ad24cf6157e4f -P = 756cb43a7a01a60f6a8efa2b -C = 9229c46d4168952bf8fb6bdfc100d74d67966c2f271289de +K = 42b52259d4f1485caeb396d8cb9cbc13 +P = 6b29bb333e2168cd66529db74c573b79f54763f40256a795608ac7c7778e5f +C = c2ee3a007678d76fd6d41da752fd6540a92971d011d9f445581c22ee00935c91931cfa0e1fc9a189 COUNT = 14 -K = cf1f830e49a2a0446ce621330303165b -P = e2b82ed94f31533a7384cfd9 -C = 36e76e4c7239ecd3f1789b4a213775852d21b146281f159e +K = 23b98a76eace81ae108c2d86d6fa0311 +P = 76ddf7ff65d17224264f7908677b641a3bad9241ee9be506a5db28e2a3ad40 +C = 41fad3d5f30ca395e5fa4677065f506126908b8694959c1ed6e77432c762e4ce7a50ca0aeec7dd6c COUNT = 15 -K = 492a43fbb6a015965c14602d11cf0685 -P = 509e609a5429ad920410f84c -C = da958c241e9cdda87930e0d4e26e5c50546baf6964dd6193 +K = 4ae952e0cb9e455828373cbf59033ad2 +P = c0eefb8f3ddb497c57f71f8da7c3f3aacdc9529e26fbba50bc93411159fac3 +C = f6acab917133277deb9683fedfec191c2a3261d560d71ef05072c2b87bb009ed89608ab36dedba83 COUNT = 16 -K = 133ea441a507973562380f5593cce7b0 -P = 3249634cfa4c0d283483a1a1 -C = 532d2e09390f7b5f13e540bffd5b1a6dd7b663d41d8170fb +K = 84e0448b414dce766d5fb9b20fb83a43 +P = 213089fc3f4495c15d96a1a7e5bb4821fe9e077d46271bfca68710f9a60b95 +C = 82ad5798db32a15830d59e46333dea295bda02f3503bb369e7293eb31a1690bee7ccad6a11be71db COUNT = 17 -K = 0fa9b1f8f3135cdcd7b78cc65a7acdf8 -P = 34d86cf04976b2e48f3ef19d -C = 24ba30595d1bc6fc0dc20f59f6997ae21aecf3337020b6b3 +K = acd23ca6ca57a2ccf71a7ab763915359 +P = 71a009ab75eea0fb546a1e82171431f515a12cc707b27f33e3e6a9d065abf4 +C = 0eb6296df38e31f506e763d9390253075662372856d35a84e3d2bd7018decaf63193163594e3c0bd COUNT = 18 -K = a45f39a1747040dafc8dd693416e4d17 -P = 4a48b0ef399408897654d410 -C = 3e91c3c0668d0b464fd7066a58e1e6e94fc4a35ffd9fb773 +K = b557d07caaeb669d94fea22122031b4b +P = 599d50376b363ff589c16810ff972ae68a0003483781e43c99c7530b660f16 +C = 4d23ee20f3fa7e533575065620318cf2712296e62f1285dfe3646abf792780c0d21662a827d33482 COUNT = 19 -K = 71ef2076ef4674a7a4670dac63507fb7 -P = d8c55861f412829c57f5d8c7 -C = 777a3c3abcff0d8f745ddbd1b0b83a93a599bc42cc5bd71d +K = 73a0afb13db4f245ed966e168e9ce3cd +P = 4e7b9824338bd7dbfd468c00e85a523d480a05a278d5402e6f2134afc4be37 +C = e804d9fcfc6c06526432eda1965c7ec7266a27397594f034455c8c8e72517545d71a1986b591b70f COUNT = 20 -K = 81b8878a710a6e81a57e43d6fdc3ad2c -P = 504078fa732957d0610831d9 -C = 3340b424b6bec31d997e1f9fbbdd1afc23c1151af3fedbb9 +K = c556311891a20f0828b5fe859ad1f96e +P = 2cfa885bfdba18a66603d7bf26ed4162b75a24cdbdf0be0185156bdf40e689 +C = a321c91dd8122213dcd6b34c3e8cf1ba32450ad69286a1928f4dbfb6fac94463857af37bd713a28a COUNT = 21 -K = 3a399036a1ab17b7a9e3d1ac54d9f8cd -P = 0dad02b25b94dd10735ea432 -C = 2e6ee90131e276dfca922bda18a12801cce22894c56c1c49 +K = a9d9b1a9cffcea2e8321415ba6d84a78 +P = dcd517b41c220a63a45f0e8d1eb3601e8591544534e9342c8075a2dfd58862 +C = fdd3c0086112de91a57b7b55af9db6f63efc1ae90087cf557c8cec80d635d2c45c89f3282e3ce4cf COUNT = 22 -K = ace19b9a97d0d18b910c09f4aadc45f3 -P = ac073dc07b8c1f107dfcd92b -C = 24cca271f7851065b39dd1ae050ea9292fabd300475bd2d1 +K = 16c8005a52b21ff68405b6dc07e1143f +P = 796d93179d0a8650af6031deb8b1e5a305abcfe7403648a9888a058c28df6f +C = 6cf44afaa2a8ac0fbbf7d546b0f7db81e11f115d9d128393cae85a7d21500bfb6e6d255b5a7dd712 COUNT = 23 -K = 04f6c9062d26f42955330bc6d9036e8a -P = 5adeaed93c4ec3a422ff6298 -C = 0b066aede3b201bfb56efca7dd54896a219376b897195a54 +K = f16e0b86926f3dc2ae03a8abfc3b73cb +P = 8c7626175da8574b0246710cbdf3b6f6d7df0f9394ce8265ac1aeea5e147df +C = bfd962c5e2944808ca63d0933dafbf51cdeefff477cb47b5a49403f1cd83af9bb61f2b94a809201c COUNT = 24 -K = 6e0bc7edbbd423321cd7876fd134e9f8 -P = c74c25278173a65fe6f750b0 -C = 7b250bade161519bf0fc8d1a47de1214ccfad51fd8d695f9 +K = 792985309a09a1781518547a52d3b36c +P = 2ab5c86c602b849a1e9d27b8a535f9996bc2500a1fd7954cf1f2f6c465a91a +C = 5bd3820a988015407e790623c8dc645a2255743d43479a9a40c9fb89659932ef89a138f484dab535 COUNT = 25 -K = 1409809840a5740bf9d823e6335ae8bc -P = 333246134402219730b8d2a8 -C = 26f560fa56336abbaf8f7d3d17af4280749eea83b259e8e6 +K = e091d8928976e80f5683422385dc4608 +P = 0f11ea56a8900b1c8cabd6387a9586a00f530fbf422cc875d4be3d60d58786 +C = 090826b9353f26c5fbe49d3cf77dc003d6b13a61cc94084dd89b5c65a2fc4705a9b807b990cfea03 COUNT = 26 -K = 6b10cebe738643e838cddbf64e36d6ad -P = 22b89b0a94ffe5a13bae33a2 -C = 3502f965592623586213676d81e6cb47504f9fff7aaab407 +K = a264cd88840a70ae3551ff7490d9bbb6 +P = 6e05e93cf2378cbdd9c8a89e8e9883658a1234bee40c77307fd8d379f3168e +C = dc6679cc08c429fe8963c77bc9a5b7cd948857982519835ac16a4190a07f17da80f2f292d878828b COUNT = 27 -K = cb58e8a483e591f0c9c12b166fee3bb0 -P = bbab8f5fb68b944fddc7c26f -C = 81d9a0166989019e02d77d1827e5f3bfe18dee4fae93d1e5 +K = 35ce52ace8992d0037225ad94dfa0f4b +P = 96269bbf70a1c7bc2dc08d7728f8f45b743553f248c61e15f57036d55a94c1 +C = 81317c724e26027583d2e815131f1726159af150c2053dfbad77ef5847b70a37f5d911e233831cf5 COUNT = 28 -K = 6dc265395336e2f45714b1fe76a0eb98 -P = 61e049e4f973723811809126 -C = f7f43fb6f0b5bd36ed4affb005da7e226d37537ed3090ad1 +K = e7b8497436965f50907b4af48f7a27fd +P = 90368c1679f091fd914fbb4964ff189955bb5d38956da92eee6158e18ca3de +C = 1910d8f04313881319a661bd8cd0290f3d552c0816020b3c80762c14b6b09db020fef74e1cd64f61 COUNT = 29 -K = 377369c3a387c57da6f36fbea4c91c26 -P = 02f92f6d99a03091ac004481 -C = a73eab3e1930765b2c645a8d336bb294d0ef1a7d86abba5d +K = dfa80f794ad8b786109323674a76901d +P = 54c7f746ca7032519454edab2c37c560f82e191b1418191472cda53f19bc56 +C = 08212f19975e70777b3f08aad5271901b93aeeb60164dd86eb32b0d43927a95e7ac0c08cdf4808fc COUNT = 30 -K = a5b51c0de2e5028ecc8e1c698217bd9f -P = 9fdf1cd93ff89628828b458e -C = ca967db6926110f203a07426c7df03fae96fc4417a413627 +K = ae81b785671ee2f902d4b55e20478b49 +P = 8e90b121327d32eb8ba6555a93fb6d98fda6f81b39d6c48eda477dd508b4f8 +C = c30431e5f19aa4d7404fb6135c78f8abe6fc06a741ce21c247ce04b507afdc7745a4c6ce17494c0c COUNT = 31 -K = dfe47bf944f835d00df421763ca2507c -P = 03c2fd1257ee7cc8fcc286b3 -C = d255830105217041b872641acf51b2807c8446fd90ec89c3 +K = caf2e99c142dc0b645766c1f4ff313a5 +P = 8cce0f4041845f6ae036435bb8acdcbdac0bb4349ae0a984e867900196fa19 +C = efc1752e6feb6c15d6e98923401a6e0ddb1548ab52904b69c76b6a17a31ce13e6536827715cf0ff3 COUNT = 32 -K = e8e186d0f26495154970e107d2b05ad9 -P = 848520a058e5dee3cc4d6339 -C = 92ca7edb79b6b65f59b95c46d1fb6d54a592c731296a7c4a +K = 1afe3417ee481bbe94c3532148c9bb06 +P = 87f1c16f8bc993d7983b0b61c9a7b73db1ac0b75477ae8c6b29a8f56cf4794 +C = aad3a584632723a7497e021ce22e1ea1d64424be2cdd9cf66084f9f9001c645ea34ffbb8236e55f3 COUNT = 33 -K = e83317e40cb57858951dce173bac74dc -P = e346ee713f8e4914dd91b9f3 -C = d9af7ba5c7c6d55cb563955e956e0bf651ee97c92cf86f43 +K = 6d616e7a1819ab1fb26af99d0d72459a +P = bbae092c0ee9bbb38705240665f0085aceead6efc7986b8fc9794a80a4eac6 +C = d6f406036718f5a400bb285188f83b1d5a7f194279133e4cd253b5a8cef9a381b7960be14a5d3ff1 COUNT = 34 -K = bbddec223acf37bad383b5cb4de88727 -P = 13f5ac2d389a17e0106c1a6e -C = 2b7629bc5a17be7f32c945a84d0009532d484a2f6a221938 +K = 170861095e48d523f693fbbe76c5a389 +P = 1d92dabc9526b019124e48134f93aa8188d9d0777f4230de3f71fcac2925a5 +C = aef44e5294302b307c96a34386046adb675519d5632a31573039a99cfda8794815ebe329d7c9a53c COUNT = 35 -K = 1c13d77981875f67796abf13cf203eb7 -P = 35321494c9a9c4a67a2844d7 -C = 0914c689315fa68520d88dcdc01e0c0baeed9d62be7e56b4 +K = 866bec06aea324a2230fdf5debc1dd78 +P = 3d843c8fe136e045efed1088fb42f35bfc490b1597b946eef3ab2151b6971c +C = 09b1b07e6c2e966d6b966fdc1779f0811c150b878009f0bf03e83da25101adf7285d80498924147d COUNT = 36 -K = ce4288d16b893bbd7d5e3282f5581c5d -P = 0d77db3fd2bbaba2e903bccf -C = b5dfeaca18ff3aa1161a2a5cd3a165f15ab4ab781af7a1d8 +K = d0d87590d45a3d9d5b5539c717195a6d +P = 25f9e355dd15ed5bfc66210ed0aadbbd6cff60751576133f78423b3995e506 +C = 71c54dd74321d08981ce455c76df47ba7c024c4c3ce4fc4853e10664ccddc6474a02b2305ee3f309 COUNT = 37 -K = 68196d3725be85d44236493c18663409 -P = 64ade7126f861ad846356291 -C = 132025daa7555c8ef26bf4b12ab717b1469872fcfb2eb460 +K = 73293011e141a6c606ff699466f5e06e +P = a75aee539472fcd13081e3707925db04fd9d1dc8a486c34abc3bb2fe79aaf8 +C = a4bebcdebb09cf598c97582c72f0c590f91d7f75d4d326f79d5e8a684cba38058059b27a12ae932c COUNT = 38 -K = fffa8037eb64ed3dd1c33c4bbd12d69a -P = 4987499fa7fe5e330708520b -C = cceee74a65a592b1b0d2b4806c5265cabc722f4a99491845 +K = 3af63de048d73de3d904a901012add71 +P = 4560871b09f195d6925eb030e2de6a2ffcfc11972d070232bfb33a297c456a +C = 413fd2afb134be64c9b5a8d1281303f872bc82b3edfef3ead8b1673e05bd256b12f3f6f4ee804083 COUNT = 39 -K = aa7a54bfe736d6d98366188efa5499ae -P = 1cf62ff6797aa22c0bdf17be -C = 4f40c6661e1807f7b2415340bb32edb414f84482484d1a0b +K = ade0f97579834acf79053ec7cf942449 +P = 07099c8034d8ff1305f701f38a87fb01e1a9e346e3044aaff3fc30d68c1399 +C = b2b027fda72bec569384631abacde0830f9a2a59eab411d5495a8c9ad1114567649135b0c18cc67a COUNT = 40 -K = 9949a40141da6848560529e2f3baa904 -P = 74d8e3f0ba35c1beb5cd9326 -C = 93c232c19c51093f7e384a0372dde7ae4267391ad4e1d234 +K = f4076ac0c2686c646a881d12376f8238 +P = 7766609bc4ae03927d409952f09bddba678c57a0f0dc9ecd9eacd37479483d +C = 76f756046da43af68834c9f5c8fea0286b149b1df8c0709650544198aead7a6a630e1bde8109d4f0 COUNT = 41 -K = 2886394ecee7168f986e1214e6594767 -P = 3c94f563843348acf32a3ed8 -C = 6491270f2aad8a0b4a115aec84ce3af61d9a066e10ed1cb2 +K = d00e853c2b19f1e1b3e119e7d6de0662 +P = 83d0093204f3ab81e65cd0e8bb36dcfe5c36104c38a77d59c4d24288aa2ff2 +C = 9055fec6c6974bcd6d50d175045d3e8c0745200c4cfce359d9c4cbbf728e9d2d2e8c663a4df4afe0 COUNT = 42 -K = 61e26987b38ed252acbd2677e381c6d3 -P = e34f2fd97eef67b156865a46 -C = 91b29261fa8797df6c92a8560a370c8855b68f875246eee3 +K = 34ade82eb786cb47867dca2a17972176 +P = 64b673ea6a7c77269d96689022ce352b90cae6434cb126d12850699b3837fc +C = 40ada5adb8eec41c8aeeeb007dcee1428467f3c2ecfcaa05c6448d3ab3af91e836150f45cb5b1c1a COUNT = 43 -K = eea773a3fd9c24858fb4c0b7103d09d1 -P = 84e1109009c2ce53717e9d7a -C = 2154847788e40ed0e2d94d54ca351ae6be60adcb59cf25de +K = d1ca99a9a0e56d0f4c9aeb8ddcd0764e +P = 31078cae77c26f1c44a75021a990940b77131638878590858087307fe51198 +C = 6c90565e12f08042bf254df1f53836af1e83db93fd8da8e9e3adbebd92083af92796e69515e5e7a4 COUNT = 44 -K = 494ddde514ff476d949a8beb0ae04811 -P = b5a865648985744800685d56 -C = a02f9f9894861d7287de8f7a583a9af0f3e98a58d52fe05f +K = 411e3c0b6e15fec5528edb7ea877c070 +P = c9fc2d333ba2004c85b803806d19e1b4061e8bfe79a3ad9c5206802030a7ab +C = 4db2c17f03773e7311d32209902516920fb1664757b229d81b4f6070ccb22ab8fd55dd4ddb2e8621 COUNT = 45 -K = eb04b64ae4741b058d8ef9bdc56e8ac5 -P = 06886e2d8c4e483394a10566 -C = 44961498a2114e2cb432c0654dd14f7c594b1fe071fe5cb1 +K = dd27252f237a8b23d7baa7016f8e7496 +P = 2c94065e3781aedd47176ced4f65c20b8ae9c1838af3793a4247772d723c89 +C = 7f480ed5e0f811e4977cb5f21cfcfb6c070cc740f7ba7221412bdc8ba900c5bb95fc781313d1e44e COUNT = 46 -K = d1a2e8f56891a9ba5630ab7de4b7a9b3 -P = 99625f5a20cac1ecfc8d4fbc -C = c124e026fdf2617975a181c4fcfa119ae95ad0b2c53b8829 +K = 461034bd004592e9051345a1da1b3532 +P = 53b66852fd1d4b8a199d1a159af0701a42976a5e83d52432edef1fc5d059ff +C = dd53167223b918056b2d10827e06c9de56b984b8c6f106ca15dba53523b17def5da33fd98fd3b355 COUNT = 47 -K = dd923dc865d48d52c768a8914effe3be -P = 8b53700a3fbc576f6b35dc23 -C = 92c9063b0fe4fbe86c0337c5024b0b5b0bc54619a831de3f +K = 3378c135dbb032ccbe293dd62aa47bf1 +P = c0ed10440022380711731e9cefc9eaefe18c1f468a2ace546a92da1d987112 +C = 49f9e619d3bd6678b31ec0be1590347aa57fe85ba15716cc47436fd6ad595c9892c969bb8d42c810 COUNT = 48 -K = f6f14a1205d6d9f554dc08fd9f1d7136 -P = 7590b4e5c588dd5ae8a3deb8 -C = 859401a94a4447d7a07d6c497df785fa6121e7d794108390 +K = 6cc08c6a9c693eeb2cf79be672c3c78a +P = b7290cf4f8c9ad16c1146ac04ecaec9153aee24dd4a2bc896dbf1e142fec7e +C = e5e228034e27a85ab30c4f3e06a41e39fb0232106cff49d036881e465e78ae3726cfa406cb823080 COUNT = 49 -K = 28cd2bb524126c28a640e2c8a595e3d9 -P = b0e4588323d2a9b7ebb29eec -C = a3caf6109bd2da46b522f5c0cea6d99c735bd165659f9fa7 +K = 3ab8d1f891bc45e16e1f3b91725b198d +P = 0a3c0dc62d8dd59387f8d47f8e831142c54280c5f17f2f5e2075ef72cd802b +C = 9e2937c3a131edb8cb9b7bf8e3ff976f3f2901845bbc922ef9a3e48079108c32d7bfcc27a34d99ec COUNT = 50 -K = 2587ab039645e6b9df8a68f3f0caa7b4 -P = 070ce531d0062ba4499b345b -C = 419fe2a578438e117069c59e598a908dd794f1b7452028e1 +K = 921441f72088e60e32246a5c63852b1b +P = 8981260f1fb6703bfe4cefd57fe29e7f8b06071d551e2edce51816145a570d +C = 3eb06bec67ae753dd2ab3509c21d58c988e63c509ba1f528d745a31673c91e6e78229dc72b58c90d COUNT = 51 -K = e08111e5559275dc18c7e14e7ed54aad -P = 3412255ba62fd59048ba0081 -C = ed6d420ea03b3397dc4479f31e775af7c0720bf196f1d7e9 +K = 091ba7d6322ef38ec108ee1486af8b95 +P = de1d4ce99dbb642a0df780105fc5add6a10b714ca2c1ff47d23de893f2e211 +C = f7cef0c6a12bd652b70377c3cfa5b4a28f70ac8b7bd0b2af4796675698a6605ba8afc40d7b7322f5 COUNT = 52 -K = b284b7158b21128e3e0ee7622a871423 -P = ba3a676e87f50c9e0a4c8cdd -C = 009f3d47dd87421d48e8cac48e93f55588f722261c56c521 +K = 79cd8287509a45841f5cc1cd33adc9d6 +P = 3d175e3af8abf8c85be403155938a2e7b8f73ef5efae4caf8e6f06fbcdb4e7 +C = 45c50d7a7e10da458b1ce37c8545fb56676d3189130305abeca536ecb399f5d48c0a746508e400ef COUNT = 53 -K = 23ea14ecb8eb5e7fcf337a7a4015f012 -P = 7f04ef3f883f4dfc89067d8f -C = 50a2b981524c70da8a4c7e905bf67ec94177b65cf76b1cba +K = 7f2829ad7f5f265de01a2cc25cb1258c +P = 04dea094498fb37d296a5a1025727685520662ae6919fd03c2e02a5bb2f03b +C = 45558bbeea3d375f70629b120c73be184e830970eb1d7497b0abfdbf48e837a7025f7783e47b283e COUNT = 54 -K = 0d4d5a3cba2ca4aff7fd29772ccf966b -P = c33ce9f4ff4b824bb0e04051 -C = 9d78579bbc0411c675789921b4fa4ab7adde79bac6679528 +K = b3a88dbcefaf771cde54e8c75d6dc84f +P = 27817fd921961006d7bded065f5c80ed486b2ca1c245b49a81707ac98f5cdc +C = 745dbb6e6c35b186756e3f4d9a5c666e25a4bd02d20bab8f7d21df9ffbdafa9544978c48f1d1c991 COUNT = 55 -K = 60f231dc0fb7f035c94782bfb272c906 -P = a5db804d083f12c3ac7a460e -C = f03952684ad12c642aad192dc1bbe3865fca52227ff9502f +K = 9b5ea569ff3d24288e7f9eb63639b026 +P = d1e8bb93ff945892d440a3dd1df78abccb3ceaff4465135138e2d2013177c2 +C = 91cb8b2e8b43dcd4941383a87c50e6b1f2e7aeb31bde47bb988d8d4ae686025493b53ee5c350b306 COUNT = 56 -K = 0eb4c0f097da9d6afe51f44baa72dc92 -P = 0709ec443c4a74f3e2f3f3da -C = 100377ee0c658d9a2edc199bb612988b50bae60ec4daa83b +K = db9384f23618b1e46acd1c97f3a38a2a +P = 9daf665214abd6579432f4ab6a94cc51d06a5d1507ed8fa91cf54d97e895ed +C = 8277d80c197dc269f9e7aa34484828ca18082a4b309ded2d98fbc15118ef0501d707fe7c098406e5 COUNT = 57 -K = a1311e46818f5d607d4989c04160b348 -P = 389b5b80b5cc4d45674ce6c7 -C = 1df2d406f63920d44bbfdf8986f70d9c4f5128fc97ed76d3 +K = f7966c5755183bcf070863b80a17b38a +P = 9cc10cbbe3efcc3ac8701e88b2322841604a49f531a1732fd1aadc1159d9d4 +C = 264d488d4c17aabb07e89ca3e3cf2b4ed73b2fc125260900790bd93389f5bc7df53db1e03b8751b2 COUNT = 58 -K = e5bcb75fed1c2b83f591bfba29d3d2e7 -P = 727da69676d75d444f739781 -C = 48f53fa4ed317d04e28b86df6ea9a8e3c1166da491a95c16 +K = 2cce5a4ca86618f54f26595b43a71c1f +P = 3c050b2f53e61677c1435595863d0d38898ec13e8436339f3149b68b4e4269 +C = 747a6cc76ab7ca6661c0db1bc7e7ec2b847a082cb5ec03d99348e2aa0daf4d3999309659a920943b COUNT = 59 -K = 278552c7074ef26e6a0fb225acf7b675 -P = 95d813403e341a017ba6b900 -C = da1841de7c6eb39fc513258efc6935b99f36ffa59758d75f +K = 318f311f654db4d65b5711d0dcc8575a +P = fe6b6135e12f9be9c1a828273a044b7f40256c0c3accac6476055e35be32a6 +C = 21f804d829a0959a1bfc88c6f2d2a830ff5dc9e40a2362bf43fe888340166ae392452ebeedcf5c08 COUNT = 60 -K = 303cde7b373d8beb071c8b7b546b2e88 -P = 4128c228a7ddc15546099b60 -C = 99f2a824999850eeb04196d8c5860d6e90110185a3a86a9b +K = c0c0c41f34dc0f8b1f3883b30674dce1 +P = 4eb1a916e5961fd9f3cb844bc3556ffe4cbb9b14a06189230573a7444d292c +C = f9c5e397b57758c816fda087ad4c030677f1974c360a25f6222338c1562ebcfc935f8c23e24fa4d7 COUNT = 61 -K = fa0af87be8cef77afdadbd14b583fb82 -P = fee45666e54b5a00f6dc20f9 -C = 5d3c5b5cc5da17053ba6d76ff937f6ab71b29418689dd1ac +K = e0ef08a5eade8ee8eef86666eea9f84d +P = 6c6063e8f90a79b58baed2aa331211f0aa039e6b10dd2c52902f50df848776 +C = ed8bf95fddee06109e73961669986c25c3dbe0b6d2b9a414249c2ac8bb318046ede9f4c1a9322911 COUNT = 62 -K = 626d03bc3b083972659610ed1028a343 -P = d79bd90ec27b6c27d3ed2b0e -C = 7cbc58dbc1d3b707de794e128e4af86529d8295e2e0853d6 +K = b9d3600e8e71ea2ffbc5173ff471f5ff +P = 2023266d9ee31ccd3e77f3ddb03335efc749600130794708aa1db353e69d40 +C = ae6b2f80ec7555c83fac43bb07aaa9f58d6f9f87a22833312baf3c42f1300ca43ebb589120cf3c07 COUNT = 63 -K = 495fb8bea574b81e39fdc3a09b362f20 -P = 5e2b3a76e055d6439eea5b96 -C = bc3626fa08b81d6604e3d51ca84e7cd793d49d5cd307ab67 +K = 01c4959676104b749d3dad0af5fabf89 +P = 1bc455f7b937ed6157a61ae8e861856188b453cfa001b2703198ffaba40d14 +C = 06959f66a6646eef85d3a7b4f8660960db62a95e2ba00c6b774d722221c12f080eb75d81d356f1ce COUNT = 64 -K = 92e34bec40d20c66b45774338b3c9f44 -P = 7a3592061d6e1f6cd2ba688d -C = 96623dc55eb3bc51ebbe91c3c4947dc5ade4e578a744c530 +K = 51c7ce4efad6803e7d1229e3c246ea1b +P = 4f3b423d462c13cdb511acb8e9db62577c7d281abb8370461d75d7f5353b3d +C = e9d90b5e2b0cad80e46c67f498b16e462bd6acbd83775df6fd772d07d15aac2e95f5e3b53cce8a0b COUNT = 65 -K = 259feb623b93bb3ff0ab849a5a6a277b -P = cc4a08c464bdc033c23b6921 -C = 3b4ed6c9bee53988bb932d3662796c66bca4700388123b40 +K = 9f3e721bf167fa9fb46050823b095a09 +P = f747204f8181e480f2d776cb15d97f9d18b60202932a452f91cefd3e7e576e +C = 0b4662b28fd616ed48c721eefd84420a5dde4db8a34ee7fc53477e1ec12b620140b26b503481cf5a COUNT = 66 -K = 49f0d314f79dfb2de3da7cfc141fbc68 -P = 0951ad9840465dc5a341f417 -C = 7afcd63802a8b76ff5646cfb81ab715627492bcd421fecbd +K = 54fe11c84bb8d3651ce9e9eb2efe0ba1 +P = 3548c86fab67730957ede5edb5005f07be6d46f282c0d1e7463ca81079450a +C = 774ee2b3dd69cdacd7465d700827677dc58f2ecbbb04384d608895149d5ce4522a1395485b0b1a88 COUNT = 67 -K = 910b8838f4bb7aac81146c435f87930b -P = 2c149224f22fc62f4dec2d9b -C = 39fdaabc13ad15d1266f7d0f439a06420f2a3593454f8e6f +K = 0f233ad9bc9ac7e630fcd2742d3b6c77 +P = dc58af5fb7db62d9f65f878832a10615ad755278c798a1e1ccfe200d798091 +C = 208e7a44a909312510dfbca35e23a57c7b39999f05a9cf1a0cb188521b89e92f9a0ed70bc3114625 COUNT = 68 -K = e61fb11dbaa18cacebb8576d8a308856 -P = d82f953a8c62b970f33e7ce8 -C = 6528c0f2dcd6ced4f1214834d9e48c5fb062918146ba3395 +K = fc5e27a0ad9dc055039b5f52a76e5199 +P = 65b7540e9d94c05eed1514fe158252bb7490611a98f2186760dead317b43c4 +C = 97674fbf91d3a6b8690fbb58a00182ece884d6f1692d34fdee787d1987b6fc0d8b3bbb28f269ecea COUNT = 69 -K = 7a7f3acdf7de5b38042cd096c913f58c -P = edbbb4a923a9492a6108706b -C = 00f0a7936debf7c1aa2578d5769550937639f2822a752291 +K = 178bb951e7381db5a703db3a36b40262 +P = 4e677f3ff226e6f826e3909c383ff69ba82161c5e50ccaa4722afd807f0e25 +C = ce8c601897f99433d669510cdba698cb2bebacb2dfdb784d913967e28a28ff2b942b8bd5503ff2db COUNT = 70 -K = 27d6ca31552dcd3381194438b8916d7c -P = d771d3ce2069a3a542cbe859 -C = 18ff2ee307bba1a9378367eb193701d575061c5cbd21eb2a +K = bf9348c218d7706a362bf2e09a9c8893 +P = fb6eca0ba184e09ff47fe8b8f4e547034457f1fe120891e42bb486067b857f +C = 608c23b6e0409caa0fa1676ff6bcef62379f1b84d9de1a125f383ba2ce16f3ee1cf30975feb0e090 COUNT = 71 -K = 59a588b36cd0c4f627f697cf8781143e -P = d11dfc30fdf294cc392b0920 -C = 5e679db9515eb5d187517ac1d4850ba971e6c74476f31f95 +K = 96f4fb11ca21a5a97fc9a8b2d8a7ab45 +P = 65a086988b2781056daaf1e9e85722d05afbc301823e8066239a7a56a3dbae +C = e32b2b2357d2c7ee3ec4649562d9e1ccacf7696e52aee3f3e4954b12692efabb66995e9bbf061e05 COUNT = 72 -K = 82c710662655a86437b4d06a7602a14d -P = f68887e63fff20fffce39817 -C = 26b3f6dfb1103a8bfb93f91b66d333636683a9f64c9c7c01 +K = b66f7e9f572e1b2349cf4a83ec825ef8 +P = 6072b5a7865ab48ecd242d754a640bf2820662d4c161b458777abe1fc33e5b +C = 9f11a3be6f25fdef36bb803bd3b2628e4398d63274553496e8fc1041ec533a67b5c3e2139ed1c736 COUNT = 73 -K = bd51058f6f350eb555cf880a5cdbc603 -P = 4a114c6c9bc6a3b1984bd003 -C = 63d5199f4949e6ec2ca5f745f181200605b087d5a67819d7 +K = 59feeb57bf2d7afbb973a8856d23fd86 +P = ddf3b6ba57c2e7b760edc3abf82b480a6963b042372e49f1de78ef4e86770e +C = 0f9f1d7dc910dbb37bf2efd580f7eea6150d77560432968330b0c2ef9182c9ee383a39dded410990 COUNT = 74 -K = 53e6143d512f516ec1db699bd0c467da -P = 9b59e52df7a3d07acd549e73 -C = 86a35bf4cd85a6741173d3fd102a19f91dd97937379e7eb6 +K = e1cb827908eb812474fe3bcfcc5937fb +P = 2b545bb39018ac6ce38c87d56cb969619468f3e1bceba0617cc384e0167954 +C = 783d15b4e73b7ea7fc629a904cf782286a75b7b750fa7f9b4a4faaf589a2d051517abbbaab483451 COUNT = 75 -K = 9699eb0d0f0cfba30789778cbfe46d64 -P = c2738c2f715af0b15f3e8b78 -C = cf46a14fbb3dfbcea891d7440580861286649ea3de7686e4 +K = 2f5f1384e9781183da04f90809e88fc2 +P = 708f6b082fe86b124e29c0720f029d7c70e8beda5d218d50896ef9e5c2418f +C = 180fff1c3d38cc8b9d76965a21a221fa553d1153113d79a59d89fae9b8e674bf8d3a94b447431ea9 COUNT = 76 -K = 0718b8b9f4cd46acb7dff3f06a95758c -P = e3e38cedce57635d9102c1fe -C = 92cf31c457903210d324e8ad2f9dfcc547248f275dc8984c +K = d96724216434c06903925d348ad508ee +P = 4049435ebd02beadf739381d1a56ab3339a2529fa2ceac76a440207eee06b0 +C = 8a09186946d759a80f76b6a2a3f595c82016a8d7c2461646a9873fafb64707c6846f5bdf677aa479 COUNT = 77 -K = 9ecfbb352e47d02e31435f9333656f1f -P = e283fa0c4779e0c550939922 -C = 48d8dc19685f76172f8094075a24bb867a410160a655e34c +K = a21b844fb8214e5439da139890393b2d +P = 9a8998d9f1ed5a094a2522649fa029e5ab42bf56c9444f68700829509b7780 +C = 0c2e3df2b8f6add5abc68f54e7c5a5fffd520123e049f36c9210e09b67d499b5b578e6a58c772a41 COUNT = 78 -K = 7b0eaeba967291522d8f9cc3428a23ec -P = 8fd9fc2b3f22b909d7a9df40 -C = 55bc3ff29d35982879db75cd9f4c6414f5d71a4e1e96c356 +K = 4b5d1896ed298e0e8b25838ef7a54d84 +P = 02d3ca544fac49d56fa51a506be635248606ac0dfb2ec1ddc05ddffd59c4a1 +C = caf342f94c1be394e4fd107b483dbfe6a0e62d09548f3070095b9bd099cb2c5de6f16b9d1752d829 COUNT = 79 -K = ebc38375779b4ba68b4898dca94e1b6b -P = 80d7c1572c788efb400f1914 -C = 8e4e75e024a35172de6eb99556c9ea06c837aeb848c701a0 +K = c4a7927036c60f8b486d5fcea7e98d89 +P = 6a93c32b4b96c75c23cf52e5b9f6b24846191e4e1219e8f9e383ab405d3b4c +C = 291adcf5a954196e5fad234015c7a9257927ce148bcd9edbb7f3c4eb05773f5c298485cc788d9fbc COUNT = 80 -K = 219737e5b2178ca3033ae9df62a1da52 -P = 3fdcbcb1e8fe8a336d43b7f7 -C = c3b285f33396a0e4f0c421e690f517b24c7d528cceccd1d7 +K = a744525218a59f702c4a59b5eedd5a7b +P = db3de19d4c76b9152c8d4fc8abf9aae03765da762a4ed3b23dc16d5e3a3439 +C = 9209ad8c5f0522521b60ff4f6ec29f12d5c62d30b9d8b95546131036f7ff6477c8beddbdf39ac5b3 COUNT = 81 -K = 9a3934a6f05551095efcf0b2268083f4 -P = 798c68ef60f678771698836c -C = eb18a25682fe4314d77dd0e6824831474bd92950d30ac374 +K = 7a55cb0a7e765b11c252c0c6fb0e67b4 +P = a18e022e2e7be0e1801b90a545d8235c0837e30a2e0842d19ff5650bd9fd07 +C = 6c7111b52e8181c7c8c68a0ba83e992c0a56e8716856493063354b62c1c3a1f587f8021f09a8f956 COUNT = 82 -K = b3f8ad1e3425826efb21c5d0bcead7eb -P = 1bf523f3c023cef4d7f1ef53 -C = 57793ea2eeb0b28fbe5fd39726029e6aa36b95da1aa38290 +K = ae66eb18fb8ee136a53ceee7c1a5a164 +P = 8d6b737976ba4778188daaed72d785cc36efcb0031aa410b43862a16f7c2f8 +C = 1afdc07f1160aaa1f1ace12f877cdfb7f8de80e02adff7604079f4ff1444cffd5eb66efce25bc77f COUNT = 83 -K = 97a122d5f8e102587f4d9654922e8504 -P = cdad334759921db94e1e4e89 -C = 0fe4ccc8af57ad33e55061475fb6812da46b09e664360bb5 +K = 64f0d89c5dcd212596217404a9c61a15 +P = a7911dcc0c630061165c2f1df09f9d94168fe79c96beabce0198a287c2fb8d +C = a556d675c3dba2e2c32add15bba8533db49ae3dc1785255a75c3b6dbb97176efc1bcacde19026ee3 COUNT = 84 -K = 8475e58ac2aed3c318546905c754f698 -P = 79a3eee4d24d97d708d6744e -C = 5fa0a4eb5436c80c5a3e8e404004b30151ffd7f7a7a6890f +K = d5e85dd9fe7099b51e7b78fcbba46266 +P = cceed83142c4d7733acf2c2ef320851d78283043bee5fcafcfa473c7e6d9c1 +C = 183923474546220d18b08bc390bc2f244091a483a26e4ee7f29f91bcfa62b8091656d6350a3a8414 COUNT = 85 -K = 307234a309249500cd3b9331d7a57ea5 -P = 11353725692f5fc8c560152c -C = cc23eea8169e75666ad105737a28aca9821f4e0d17c91b96 +K = 8999f32c7ed7ab4c6b789c0933462697 +P = f68f6cfbf3c61cf5236f21080cd5d06eb2b77d85a3b58d6f53dd60ffa02fed +C = 5f46652ac08c39bf2db9a12ef8749a4c229d506252288531093381b4e9d00f9e23a17b65735a463d COUNT = 86 -K = 5dda3d95b54501124db37560856ab57d -P = bd207e4a38405f75e238a499 -C = 4dc64ac85b1612fd14f7c46e913b17c883599d1bc09a1d16 +K = 8a35bf748b95608857fa373aba0e09cd +P = b742c920b0a92d07ff427fe2505520fc0ebd3acd189551b75b5e486c7f4340 +C = de144345f9898ff01cc85c82cdb94d18b61db8dd372be4e46fb8cc938917d3d7fc4bd52593075c52 COUNT = 87 -K = 3ef3b75412edf314171cc07929424eab -P = a4334aa47497be00b6d0a3ee -C = 62e9961026461b4bda03f63316e9128b8640aff811d0513e +K = b37916d3f63e9c09ecdab9bfd2960e87 +P = 169ea89c488b835578ad226038f17cedda18262ac25607a286b5c57f4ab4fe +C = 1835e921f9a25b3da0ac9f9fd2ff63fd7e19b57fb005bded8a9c69850149b69d4ea0f2cc41eb9cd7 COUNT = 88 -K = 35522217a17796b68402b67b6036b30e -P = ef5e3e5f28132c5edea281ea -C = e9d452d9cef0dd8fd84b023f7c2da52290d9f562af6fcb08 +K = c216219a294e1eb89efcd17436528e19 +P = 0cef4161afbfa1ad3e4f595ab9ab231a2d098990a5707edb284f15c70b8dbb +C = a32c1b1835630cf37b8fcad85a604401ad33a221a62fa79948ebc59da4707d37a6117813d81b8604 COUNT = 89 -K = 3a5e288ef800eda4ea1ab3414d73a253 -P = 70c6cc72e285ec1df4b7b587 -C = 437693a50210cd2098a5e22cc859609ca1b0a8a0e8ada634 +K = cb8dd6f1775f70a960a7d662a0a27e62 +P = 75db92f953507a40fe7ed5f0ba6166471088744e53cd6d8b2c1d2e4628c764 +C = 603c2f13200be56af5f5128064a67718e297dc564797faa66ef4e0ea072560c2e6e2e465a20b7b90 COUNT = 90 -K = 9bfa3f0d2a7dd9b28ec6badea88ee61c -P = 0ea6fe3a52f172ae1e7d449b -C = ef3f5467e50c16637c5fb8c63a5d031b01cdafb9eea5f623 +K = 9789cf2c2d58c45a39cc5105658b4333 +P = a81375fc5d6016df76c086077968378d7f1bc18cf319608f697fc88f6c1796 +C = 27c145b0e164cb454e1ebc6d5f6d30cdde4e8f8a812293dc2830b7620f52e44137a2214973769aa2 COUNT = 91 -K = 9283cfbf917467b0120ebb58b1388abd -P = bd571b78659834edb75e59e9 -C = 1ee3cb174887b1b91b7dd50749e2b8b358afc4947baf3415 +K = c90c894ad67460ffb03d961b15f40fb9 +P = e0ce252cd1ffb28fd9548f0e81f6b489de8ff7d5fca0f0f2ca0438b9c30fae +C = 37a733f99c60ffa120d7f3fffb72f833739531fa79c220b9e0d8f08bb6f5d299e5d429268dfdbd58 COUNT = 92 -K = d04095c352d5ca94dd8d6e31b5503596 -P = f702975c40760510cd680da8 -C = a74c07bf43500ae956e7f9f2df04834554e7059c74771c94 +K = 738c65b9f00d41dd53194a4139e331c3 +P = bfe2a0a4d52dbc2d619c6443c3b12ee340c125865824e881ad33815f599319 +C = 7c24a78fb1f05486a65749f9cb989e43329229261c793a1c0bd0a880b22a02c0da238b8732f7651a COUNT = 93 -K = 2403b85bc243616c93933ea61d3eabe1 -P = e56e65882be4e444ac4738cd -C = 5dc9958660e15f9eb25ff1e3272ef930bd2a7272771afd5b +K = 6f240b8840a6dbac6b9a23a1f2658c27 +P = 6800a4f9ae7185e652eac53c1adfe7b3aa014ee15d1968dca5118852504ba4 +C = a4fcacd93199b2df438a21adc300e6dc7aa6c0fd891cb1f6cd2f1b645f40d362f14c73e2d95cd411 COUNT = 94 -K = cb010c937d968d9689dbaca1ce669389 -P = 472af611d5a0deb57851f60d -C = f6e65add245a9ac24f27f60dbc8224f43c43449a6a11c2bf +K = bcfea2e9f3212638eeadced52b8468a7 +P = 2839b3fb607008f18a333591128f762794aa33d27298fe0f5ec1ac5ee29c14 +C = 3bc87c2f46797a492119a32f38cfe912c09dfec3783ec5ba9ee450be1afc7bfbc0994e1b7b2cd853 COUNT = 95 -K = dce4340ecfff255dfe93bebbb8bedd2e -P = bb953d64604547007cf8761d -C = f21b4ac8bc0529456484dd121a0d68da43d8f4d6b5f18ae2 +K = 50a8fc971f1478f6594b3a3ada1c5a8b +P = 5c4c5cc8685e27a309c0360f3473fc06cc549355101c77203bf3a4f82b46b3 +C = a7bbfb2d44f920ece746455178eb9cd3c5526162edb6e1048ebbdf6dae7c03b240d35e98f5196369 COUNT = 96 -K = e2c1e51220c18d2a3efe72b6a6157ce0 -P = 1706253aef67b41088039903 -C = 13c6edf59658f69a4607395d3e6673694639e4fa599bb510 +K = 87192a4fca920b3a05c8abe081caff47 +P = 3a07a748a7e5f3a6ae2fff468a00b678fd495e8a0f4ce57ee404550cb31341 +C = 8328245100b5f4d2188263693d4dbd86bddb985ac8308a7cf9f6f4dcb290501e19ba16a6a32253c7 COUNT = 97 -K = 0434b26aad7b037da82e37ff1266fc10 -P = 59a82050e4a7cf54f07aaefe -C = bb2db02edb03df488454b648580d336e03085fbc82e5f7db +K = c52711ef4d93b1124d2532669b62650d +P = 458fa64f0f5b673d561ddfdbc82744e3878459f37731d9cade3ff954a226dd +C = d295a15e8032c86b4ad57b36875660c6e00361a362362b83bbe7e41d8f9cd13ee61e7c665503917f COUNT = 98 -K = 2657cf4afe541b2aac89aaa072cf49aa -P = ac217e42568ae158a64e22d0 -C = a5aabec527abd9ce07bb340132f49e05b9c9971474aa10cd +K = b186b32267c3fb32815781f7a46ee8ef +P = 7a05ae1a6a9aba3fb98aa4a34d873c754e2c580d7cea5f6cb9c349c718eac0 +C = e18090a72b9eac8a40c91d20bece87c162d2ba8ff67b3736e6c3f9af5dd1c134da959c3a9ee41312 COUNT = 99 -K = 3a5f061717668dcc2697e2ca22a13b41 -P = 64be32aa6e9e7d0b35bf7274 -C = 330027911cfaf5f5b1c82da480a1211db98c4e0aa7ba13f0 +K = 47136352ce99c6c4a5c7ff8e42d47d89 +P = 892ba898a617e26a7bf71d007543e92382a4ef93af23c962196d4cedc35a5f +C = 9258f134dc9bae890ff4db528f9e8975d748abe06a1b963be2e4b33e7fc6d37001037c447e002415 -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 3cf2e59a0eafba684f4da0528a5abaf3 -P = 427a8f05c0887d9722fa4f9b51af52d4e888a4e04340164a6fba384c0b01569fc2611b1e8efdc92de226370fd0cc3f3ae3a17f3816bde235d3987634c2f83541773573d0ca5b98c3bc829dea54ac5d6b113ca52223b9a9930aa954593ed76a84f6b9d2b5c0 -C = f6400aebd8b4946adfafe1ca47326baafd8ee005a5c3d01cfaf7fad7505e7fb66d197c029dc56c5fe2f4b544b9625a8ecfbc66b443a0ce6810a091a944ae27a1745a5fab26dcd49591fae169b8b638ebddd8ec07fa69ede5e3f75714cadb72e27136320f5d7962d8d4cd2550934ed6fe +K = 391a50d637769389454ba5da0d0e8a31 +P = 660c103fc670e5daccf622c5ae7694dcdc2d1c336d6a8d8cd38c507966ff6dde66ccb8fcdea5715161fe39e3a208b2588e451faa42e23cdbee2e5b2c2b9b0fe4b6db4de3d7579429ca3ea895fe4029c71bea01ac92400cadd628922c4804d45f6cbe1ece0a34db587a2ffba753fa754003d8943cfe614339e469a937a73452b2cb9c032b0d8bd1ca302a07353200cefc635fe4fe2ec7332de7948d5b574b5874e410b06c8689e45ba52a10e5832c7d7b2f687f790db9aad66f79149c1adc3dcc370f9d6b8e25b1b2552e515ce1497a4aec0fa35a1a15fa7c780bfcfb5bdfe534c5cfce4df20b02d7d3d632509195085f031ac5e26d8b229b524630369bcc9be822229405110a38671f7ef326b8f73acb559763d1a9c461876652e900d9d767f7ff5f2c5d9621d4f141410c9177855dd2f0a5cbf8035b16b652c8cedc398987ac56da33d7061aaa21aecfcc68264d17a160a60fab6f92e8b0d10ab99b3a25d1f23cc51de7e774a63b0bf0a6f5862c232abbe0089f4412f0f0d92e40ed75d11b49c1ab2fa759fcebc612a3bf4596db706f1ba429f11109f232d2efb069382eef976135d48421f9152a48384eb26419ac3a667cfcb84ffa3806401d674a6d42ba768f968f7eee9fdfaca521f7ef8a4301c1558182096ca3150783765da354d2da2559960168da5b1114e63e48bfb944b809437f151101bca1e54987d121623b6e42 +C = d2acf53ce5603bc0487d6a3d6403441e684eb21de3d9921ef8fb3dc77c8842cf4b033bedd7b0e042a8ebf66d868fcadee2fcbd5e1431f36a8d3d73cc3ba582a28bedc6924255c4e5d958919c5db021e9ae5286fc8abccbe04b1d20d3a21654811810ebcbffa48c7a48cb0c52fa7317a797f022333be64d0f4d95c1a12993d50c96ee5b5d7efaf6579a232ee7e85b3544d27bf66d92994026e16276da3a14e6d981db73fbde0bd6079e2d1061e355679210abf54bef3becd0578a5b7db854813edd14f05fdda8ddf7265350a9f417849a04665d96b20c94b9eb66cf7e5772f1cef5067dcf64bec7c66b721773bb7aa5fb07862b7c770c0c7f9db702be06b53de44821ff255692a961ee298c43694272becee71aa3a63b0241ff18e43df1a16229e518a6f40a04ee751794ce38605478082f2d85af1948774edb75744ae90214d891b4ff1867dc9a113d0639ada71e1959f3931399e4b2c50c5bfffeb07d51d0e0de7b2dd96bc1a758c523ce136335ddb39c11e092cc31b5a821266f6f6b9922d5e3c579d56d9f5b633212b2dbdd7d027e3c923bc137116f4796f3464aa68ed64b4256f59be9b2c4ab7437ff944097dc6a025c312474f082cd8b6f2f9143aa05f45abf1f56c6c8561f8ac5a6ca323c2cf0d5194e396a1b6ed1579a2d07b08d076bd9c1f53ae80d16e3b8db1e9ca2d7f26052642ef419f53e96c2d945e0eb5a28f0ec20a0ff7d599e86 COUNT = 1 -K = 0475c590af7f13b5945f7bfe0c1fd93e -P = bfd89f47ad0bdd303d4973e51e122ee1bb2c7cb56adefb9df858b9633c982d9c6a5e5ee3c570598a4fcc9e8053e4da369e0bb19e05e365231a80092214dedd000f5216849be43ff2a9b8ac6e1a8578691a83d8c2b65c65d753be7075a1035566621154301c -C = a10025f7cff8b1eaf3a1d9a950150ae82202cb72575852de0aecaea669652c8303fe2019e69d0b1d9a46b583e6b135787239ad6c0ae1a7db15885b491e0e205cbfc34e06b95a9645f6b122e99ef6def62a283de77991668cb077cbb6e2495e34c824cfcb23c8ce8f683c387c93f5d9ca +K = 5101dbc96b9a3cab550f5a39ebb14a01 +P = 11f1b8cc0701b84bf6b382ee403558635a0ce8a3299db981e5ab424e23a3e1a165db95a2784d3a22cb57509fa7364a327678c0746d298b93a102fde97a2f0c2a87638e09a368bd99e194e53fcd52d7cd56ad17b66ca6bd6856715b292c673fa13b7c8f31109f22ba5b85e32fbd8d3b8cae8b8bf525d3ea6fdb94c9e1acf552a343276d1fd8e5f8df6471c55be047d0c7731112d38b10edb21183a528a1214c443c958b61deadd17963f6d813898eafc0729ba692571d40fdbecc6a5afebd55a00ce84a99a226c0bcc097f07db44c90579b61fd3d76a6845988a320df2902af35d3e711944d146e30d0dc79d26e434d81e3440ef3666088c197f49ebace2c15a21bc22666dc1569fbad8b2138a4c578469dad408020d127df6303b2b54419a67576d4316fe7e59eec69712469dcd14853274dc217ae659a968ae25993e64ea1980dcc00fae10d0db03c6a6a1b37eb127d44bbb541afeb31d2e4f3dc63c87e6d5f799919617fae68baa17a2a0bd252c41f4ccd06545743523d2b04803902fdfbfabcf1cb959fd4ff863cac955a1bd02da4dccc1d2884c65d1287b240b7ae54d12e2530b4251d44e14ff861efab6ad2a419cd8d187e8fd7f6eb0a2ab0f373cbb76aef9a01d14039aef69ecdca46006919d7e83d2a778ab50ca774d9dfc06e6383c8c93dd43eac0bc14a6da27e29f583a6f4ed3a392bbe35238fb46827c489810ef6 +C = 74f5c3f262d5977f0ef7caca2fd6fe856ba3d1fc3703a96495d4ff54d91e5f745481ed2c844b71f3a8b9a97a7dff5748c2e8ce5c9c9d2794949fc1e2e13c392ffddc397540920848e65d50c11aa25ed49678cd026ecba7a79637429944000fc4524967a2540e65554a2f4100b7dfc0824c8f9cead3babfb28b62f0437cb6e66ee8f5b2c77ea0232aff3bcf3191067e392412e6b80c254832f1638b41c0434fe9c94f1c1a16338e71bc281496040860fdcc71aa109d35d93b70779611f782c01632119da7e3760645ce42de7f2d1bc074bed1987ecb3ab8283ad9aabafffbaf292067de87928a10838720bf6005f78f0fd4cb56f1c16de5397727d92eae382c639d1338c7133497d2e67eda9c8acebaededff20c7eb66e5cab84a00788064918e28968286bf140fb292788751ad36feb1850eb510b1fad94bfe3327a65f7901275c127e40132327f98049dab92e2eb77e3a3448ef9277f913e7320f8da9e33ca2203f94dde79eb71d3f3dfdd9dc4ace8d7eae571fc445836f62a93de8848bc4702426ea273ebbc2352f3210e89ef5240afb2b2aadc75c3f086e10020a41d69dc1cceb2bcd479a52a4985ac542984b7ef11e49177f3eaf6285d8a63d9254aa396d64a6855819e5bfe5c62775f298858b52595fd37e88dbf54969dc9853ee94381b62d0c6a48c98f457cf2993cb8f1f3c29da65c0af5657e525f8a2e95c1390d9a0a2225d29cc90aa48 COUNT = 2 -K = 5e19811a545f0af7b6f6f73f7175d26f -P = b547ba92d8f7bfbd45062e0af045e0f42bc8354f3a9e1f11a808a121ad1bf948ba7ba8052fe33b1a613cc61d3e740d824b119ff633a34330de381941b3d859f35782d7681fcb3f8a5c884ea2e193568425a385d2e4d44a717571bc176dd482d93bacbf21c7 -C = 8d50e74d7f4c143d734930901e2c40053c9e87b2634f72247bdeeb524ec46da701948f8558da1800f4057e6818c6dcb949e45f17c0021410e18f2a5ddc20af12fc2aaacf406a5864cf351e489cc9106121c9c369f300a2cfc3b9ae48f67396a97fe2828c0a68ac4dfade06c37035a647 +K = 5baf057f7d4384bd79b0df804d01d96b +P = 8fe97430f110eca84ebc10f56d18755aa3de33b5984c864edb19d476575eeef331924c192b202bef74c6f473c791e52d6ad800e8140b9b6f1a5f0e94261ee5348bcddcaf3c2a5b3e9d50c4a06049adafb48c7dd1fa8b64c0720e3e0d80c7ef2193394795d8032a0f3d70747188096f429fd1089ecc614dec6293c67ff4380c9852cbec661da8989afd06cb29906a023815e1972bebf294ac8186cf1db1aa99f0fc7945f5d14350b4e9a6e6139c831b75f192e83cf80f24ff5837ef036af63d8b085eebcfc157f34aaa40ac7705c970177fd5f7fdba75e867c19d7938c80b6fd93e8d698c5482991923d16b3e576528b624b76c52edd135958730f29bbb872db5130d4ce9efddb3d63a0e21d143efb6b1f540ac74a45d8b086f38413ee384b6fe8c56874e15683ed79ac7eda0a5b3b1badd6e678996cdfadbabc9edeaee903f40fb84ba1ab272baf2350bf6f98b729f72dc6fee8c7f12441e6bdbb0960fa5d70440b5d0a7fb73f1bb6999c3663a4fec41836f44b29b9ab29e598753d2c56f994b539a9446823f8758163827102668c11e2b1e7fc9c8bca0d97d06af0fb309c9d4a2a8ba5e100ef70cfb02eaed665751195d1b51b8936717ce682c523b2222a4d33821daeec1d7f715517f5f99dff4fa5ba2498207514a6f153225096bf34998c2f93d5a5dd2ed4d1ee1aac40be27261e767cc1e055855b892dc5e9770eda6f91d +C = 72736b89c35dc26edaad7a558e2461b04c6f0c71c01aec337e744759f7edcce9580ad5dba6a582323061faf136c8d6c9102b739c13fde725f48c204644470a66aa00c6ac035b8fc85301876dba3f6ed8a4eedab1cd39b01815d884c8e5de53ef1cba02fcb3c1744d52db6fe229a5bfa246462ef129b5c1bb899c3de74a96d37d83b870568dde72afe4a10eb82a5ce4ee4858a6eeedae09bb76c6a7ca45e8dbcd1d107744a775428c8f383387225ef484708b87291d6dca88f0eed8d61c5760a148f2fa1eed38276a35b6a8187225b9bec0d993161ffbfd82da304a01eff64f88e63ddf8a38acdccaeb425269c69ffbe445483dcf75bb38c0810d4d33b27b3a34d1f1990d5338059267aa183bd3a7072be8e5e610a7878194c1a5700263e7da2bbfd35029a73583292962e959395717d832a152d36c7f4ef2018204e363a6d3c8e98bb11a75d42d8cbb0a36645b38c84266a9703f2e4e9fc78f932bb838f444b26e52727c38b2f23bfd0fb088854aa9d62926f7f0ae0c30a004d62ce60b88c231eed3bc462aa3c79816a04ff89719e745800bbb0de093d5669b1d9fceaa35588000b0ea15dd481835a7c3f3c56c3dcd3266a66c8e7edd212028ce2ac62a51c98d8fa71c69ba0ec0c91649c7a1d24400f97786488510331cec6c274e3156aa6247a0f0c836ac5b6565d30c5240f307f240f168ffa50cf6cee44dcaa72bba2176029984c69f36f753ae COUNT = 3 -K = ba56093d96294afaa7243858ea92a5cc -P = 028f58a917c7fa135777964513138610d6faa6183cedcecbd213dd1da4bd4a3b54bd4f4f5fce55947c1077b2463969650a209734894fc8e67779f868b82118c8663f8208addd6477d3d6fab4e07c8298572be3e7e74bc6c290c885b17ecd25bf7f6cca3c96 -C = 346aab260a9ac0bed654449a6528b69ebafd12cd7fe7bca50b887602b503f757f72f795b07325eedfecd8cda6bf5c2fd8ed8a146877618664d4d08d79f8350606f5feba6a5d3a2f3f09de9e212891650bccacfab3a3419c0fb46090a02d598675944cb8a8132c40019164fdde8011f6d +K = 2403ff15ba9860a7740781426993ad2e +P = 6d5923a20fc56abfa16d973f226d0a098ea1295fbd80e0385b7efad779eac1f3994dfe0586eecef54b139cfbc9e97c2f909a75453620ab0b1d05f974179f6bd29c081e3cecaefa1a97d986f40fab8363950ffe49c387e07938799ef9f869bb69dd0d7dd5d5cbcab26c206ba4a8f5673fee6800c5e85d5ffeef59951f8d5a9e7863467b7568417b06ea2b9f8e90ee660b87dc2dbc8b7a7d3a9cfd58a0f3d6ce9212ee8b8a118383f6b8ebb2e98a1c944f25bc1f70297599fbd3a0805b454a4aef09a2ece2bf27f81f7ca80eb3535b30ead4d1e0421f127c668b41386046e1b702da95dfec115521adbe580c41949175eaccdf7c9a7e15db491cc8273b7cb0a519d234991a1029f441344ccd665c8d90cd854a5b0ba392c1df3e073d888c2e37f09de573248a05e6a41b1cd887e18942517bfd01598fd91d70b38e33c5e5de33484e31e10e2aa31794ca2adaf205c4c0c061b55d7169cfba6306bd1017293e2225ab17d5ff37deb780fc64f95a18d236faf87e28427a07612e0fdc15d119ad471ff8d5231fccbbe883cc46eb9e0b3d5cf4bca8ee28ae07e08be825aa6b96b63180daf524d0b76fcf8e72e11d39e46019666763bb280570876f9769fb654fada09a13888c805c9517afd65c8a4fb9e4c7ad2f0e4f37dbe782c083df69e4dc7162269d7112dc9168a75d5b0222b9b50761db01ef3874ec67e6d87571a748058a3a01 +C = 7cc0000a7c0603ff97a40f505b3ef6756eee30858fd258f84999c2440ef0a89e7fa18df9480dd3880dfe96f32605fe08abf99c81f248fbf5dfdff5c69a532476e550c9f63af9a7e1a591ab999b99e6a6263c0d60d96828a57bf56b29f43c77921a63ecda5bb9faf2bf9e9d85a17ad8ab4211275ad1d1b0619f2b3154dfe77d2480b734a2b5e83aa23b2e8e23db730f13f0376ab291bd3b5206c5c79cb1a96af91a9d494d0e4dcaa324acfc36c835a29beff8064060e4075ab13ee7b340fb395aecd4a2146e8ee61dd9d41e8c08a2a6d4b9abd7e12ea8a6accc39c30025e930303e0b2508d589ecf65768d774e77d0536378fcedac5e6b026a9a4043bf03692e021dc2b85e0f2e796e5da61afd9d43f647b64f2eb1872398196dabb3902c195d8c1868e2727fe48889181a77a4c69d2078c168726e01be129b7a89dba639cf0b19ef02184d9223f77b285b3c31aaf5a1d6331182743ed7131325d471d3bfc4bd9ee6b490409c691f569c7c732af7efc0a41e201286d24dea9c72b03d7cdffe295070f192647a61e23b9cb53e378ac0db5c4ec7d1c64c5c12b76b0cc9148d5ae4fbe1fc2dad248a29632e7d0e12e5016eeb9ecb50e451f3db0072d35fae8a9002b4234895e65840aca316d70a3cdbc78659cf2181098cd65928bac4afa6823987eb315c94821e3c1e5d01b25d944b291d126f09142acee6519fd03361b06c02247a4d9fafa3949135c COUNT = 4 -K = 6b739f64612cf1e67f9e594643354c49 -P = c60c3e9ebd8b9b71a18047ece82290888cf99f541bbfe68cf65b8048fe4a3f70764c4b2f8766b5762a3166265f0f60066837565f218f0db5230f1269bddcad7ad4628603aa5abfca4952e1f5e248b1ab925871f934ae89b8a979bc6ab6f8b5f6ecef71ab18 -C = ea893b0f86023295e8d09b81472d24f60fb577830880f623e333d2300291ab8e707974e86e0b002275636584b89c52eeade9152a4ac029199bc783dcc19038be47c5e79be9d6c20957257f78e179bced38e6f0ceea728fc133364fad7093f75d0334ed1d8c7bc9c75cf64215d4de6fe2 +K = 2ca6d2d5f8123cbd529a0d16311592ca +P = 5bcbbf5e148c5770727c08b14a83d76a4c42c6cc9b3ec0de45ed2c3735a9e56898cd6985956600e259ce4c1ab4dc606cdbd6e5429c66c036bdfda8a274cba8968566c1d1eb790b431ca0c42a2bd9b98d5ad1c5fe52bd264599db0bf7a670a190b21d7da314ffe83cf703603aa9c9eb010fbf260da0de3bbd51ee782e5c5bf8e5ae8f4df5f09b9c665b0c1dd48d77cb26687b8800b2872d5286084f7764b65d442aae649c67dc6df4081c87d6bcf5c21a21fe0315a3ab6e977936d5c908a28b65e35e256a5de38b2261cb2765aa7086983f6b14b3f768e47b0180241ee26b50a9b1d9b22b471d34488a0e255b48e6c41ddc5d83a6f3018a8dce77c825a3a9b24f6c43f4ec12f362c2f432ed5d0a81b8ebde8801f2852df373a3dec874dada5a6195c7f8cab26e97446a84a46384222aeaeb04ebd7a0593999d7a5d0224e5308f09205ec121cf89d6909cbaaab2d498c1e287a4a61406eda85a556e4e7b935570d1aae1cd545324acec403c48b6151a32a1d9c5448e68437ae5b9f5ebca3c37fd9cb61183d7773989dcf96f537c1834ebfb5cb5155e13c9d93c1a170a416238c00a9c92734588a57e92cb7b66b7a441c6a21d3785692b23daeaf9da0fcafb1dc9e0c836f3f7f1741f934e2863a20d29a93c2cd759d344485ae3d21f3246dc6c99e06d647623a39722b37e330a34646b7f62c2dc5db3b087b43263d01f232a663d6 +C = 889cc53f921ed6b16a6f7c6d73e30c37c8af4611e12967b950ddb26323d52cf47545de65517aca93250f10f19c766139e57086f33fb3b1d06293fc4c07349e321facbed5b7729bdf5299f35f73a03a53d114a45f541225a4204756d010ff58be252bd9a0fc09878097d6533e3370dcb85695ccc1e7052e2280530f38e18069dac75df247bd32965bce0880bd8158fb9d639a3f4295be02ab413a08c058d0aa7c90336f1a717ab164fa9e2c077c12c8133d1689c7057ab27d76331ade2fba31dcb4583a3478c25164b61e72c8a7c72e8c012bea893ac435e639de9e610dd9eb862de68b1174518cbc193d42fb81648d4609a37103ea56af0ef13bc8c8ea02ecfd0e7dee93d4c08911582c13c3b012daecbcd8375e3d36bf89b07089f1d30b2e7b65b1aeec09b36e62ec90740fca492687989d249771b67082114feb414631ec96a17d9d6b4f564d40ee3605f05789767ae810ffb9ba8ae2cf1a0ef0964b2f0727cfe984219732f9377ee90ad5f85926e4ce5dfee3620345fbdf3c05f3e56e060e8c57adf53f139da86ba606f7b1f31d8f4bbd44ca76596a1ca2bc19bd78e04c65fcf1e97ff89852378240c52e0a57445ca6a062e36e7e451cc67944485cae3bff6f62ee3b258505fe61205675fa5f8252c47549a222d6485924c9ebe20407742662995fe7f00536465c19f26f61ed132bd7ebb23519aa1565f2c4305eb649b948d39253bb3f64d1fc COUNT = 5 -K = fb47da7801f8e8b6b74ca102f8b4d097 -P = bf103534fa949401b7bed33b56f04d1e0bfe4b5b790956f1af96d42d2a91663071c1f02a11ad7a099206f4209bd8cb900a470ad1861ba9311ea6f89df8eb804bb2240e821938ca07834c088863c1656f39b0339d92595eef4d3762f5206d15a149f932f89c -C = 3e5e5a06842fc69f1d9a5d90d52cba6e45538c5d3a0aec10a9e9c987304fbdcd58d088dff979dd2986d1c6401fe1384c65adf68e84fc5ad64b6c9a7ce0cfc0b4bf266d2532e2abc497a75d4b942b7bb3396b09ed253deca5679ab59f4644676512974d805df371e27146d23c48598a52 +K = 4c22ab784a3a48f8dc0478e58e5b58f6 +P = 18b1e562243563aa1b5bb35b543a10e1d9cff4b9fc7f8bae1babc1fb90d7f749a9bab8ff4bed604fb3548632b77d7f03a3ab3dbc828b8cffc041f61353fe557a1cc1d1b4ef1f815b269de7177edb96a010f929487919e66ba504830a1329432cefbe3a3e1e89ecc2830074b8815bca964123e311a5bbfebf014400eec4c495202429b794e724f34e7cd8d736a38d45f1cb26bbf15d25a5fb63bf93f2b81069f547c3178258202b0129b937b90c31f1d59b92a793ec8357957a16a6dae1b617121b39c5210e787f5c7e71a7901329d8b78f9ceb5b20769d2b3f06c749dee3d777ad97f148beaee4a217a90a917d36ac5878e6a15555ea8522ca136fee3dea4fccacc51a7bf11f66665e277f1abe5da6d27bd8a0ea240cbf4be1bd6c85f32e37d94284a7175dfe2dd8e00a57353c08eeb4dd99f95e73aa7ec8f6759e3efbf0a9aefae4dfd196e32ce7d070b8864cf6bd02cd0ac3fc1e499bb9982e366c9e7f9ac5e3069d9cf6d25e3b77c9e1490f70f4b024222baba4ab1582164d87fadc224876bfb45d9333d2ed00975396fb420dedea01f6712319e37854d75ab81e04e6b43f158a9b0101e5f80fd2b6e0cab87f2479a2ba6bf1918ce01b10de672ea2bbc24b750730e845dde13d782b9f8751c1b05d5984f5191ade8b4f770c66b84bec743b0621bcb33d228de8eacbab2e39f9032fa8db127b11603a81fd10c83ea243be8f +C = 05ad321c5ca2fd6cf87491050d47bdb4a86a1abb28b7dc76287f23214c1170cb7fe2994607be932ff9b335b4134f37c1eb1802f87bfa169293496504909f1d5b74ecc412f5a3170e057577bdcb05ca1d35c343f3aa392541dfc44d3aadea31fc37d42003c139386bfec79e667425edb4ef5ec4d78582228e3829b597fecc933a9c1f6b3cdddda350a66f01d15286b43ee50d1ac499f3958f84615077e14ac93d6fec18c1e285566bfa4310e9919b1f1198c463bab661cafdf6a32f594008a5bb702a04aa956e72601ef6ab0b7107b352a9606b45afed6da5bb69af4971746faf59456405cd2cec084a9b61bf87a125765d7e66ec74a0239dd104272858e0bdf6c82a67cd7a7e0044001853bc8cd36d0cb89282f1e8ea25d44745111fb102e5b8e020a309bbfa79ed780412e44b73ab2323e572cbe9b934a68097b7fa47903b3f80d77bb7ba2a44a6e8b279b8e736e15bc86e43b0614027c6311e263433466845ec2a3be86dc26601207b6464124ddfd3e33770922e57c62b6a6d7c3809f3897b4af5e5b3c380832b6b11a0119f76b5540bdcd43348ededaaa1eefb8e5475a469cde3fdec3ad530026f93ce7e9fc9da39699aee4a74069a609d7bda243564490f3b9dbed14ccc06f7094812496e3242eee2feb4d8de44f77fd7866c83f009f0b7ef353f05a5d16f826d8782ab3e5ce1685d2ed1fd5a7c25552270c4073d26b24ed62b61ac5659d1b1 COUNT = 6 -K = 67a67be53461d5ab6270df47e9ff8767 -P = 8330f1118877470a3b2685a0de46a1dbf3005ac4c39d432997046edb0127a19f0534be9cd912b9da419530b67e144b147cb8325e601321151f15e7c36ccfedc932870913ac652b6a90209c9689cb2682e4aaebd126ff73b8ab8231f71f32fcc7f5bc1855d2 -C = 010a1e0c7d4488537a8c7ad8f55231463b25e97bccef14c290546fa59c957747bc49fe47bb6821ac9edf05efa9d0f7049b4bf178cb2e3cf878ba88656017b4dd46b0e9daa0b863b36bf9c78beb1f4b7f0fff07ba80064e79c02af7ce0f3ce379f61bb138a399a8a0bbea30ee662e164f +K = 5b2965a16d2e5eec9a12ab52abcae0b6 +P = df4317309305181076a63fa5df0d1c5ef205de8f01a91c0d5bd2292559e3611f6ac09b6881fd4ac48ce3abcb557560df392e1c3d16723b7e9f52c35e9a10b7e2f545ca2ff7c6a508174de127ed35e42faf6641048e9c2a09f6370ec0f3fbb862a893ca5e5133e02ca3d132da30fcbfcf6ee301647a4cb2158e6d5513d5d9a57bb061f2ea778467b1779a494d1d3a2c9d20d1f18037eb65d9db3accf1f65544f7eecf7569dd54a3c57a4e05425760ea06f2947a9e1729a4486186ba525e26cb6bc20ff9e5b128da760c85403c539085306af3f525b8d0cb41488c8e0a2c10f089b3d33d658f4def2923fdd7b660c44131d3c8c60f18b1631d378ca48e59dc6747b59b3056f8bc5a7d97b9ec78d15d03d87a4b33d4b08f2975a407dce930e8c27da98332a31238340de0cbe0deafbe6267f3556a2ea4845d4b114953712c261e51a0ec0e6d87c061f8d3e9c6061667afd46b28a7c08ba9992ed45b1292aa6ae25aa2cebd1c65161f1502b2b8d307fec50722edfa2e46914f8f62add7baece67139079f7a7e3ee9853370ecc0f4eb264bee169519c5ee723b285478c4b5f7c32dc7bd48d00a10cfb5e001ab421c714f062c97d25826063af5b5dfa51768cb9b786941a236f914af6f4091c5c371395a24e2cbb9adfbf488ea3b982bb3a3b69947b7205a8bc9f23e28b161b65e6021689faf0a33eb1ac4956466bc5629080be9b04a +C = 00d9a48ed629417c00dfd6abe1d12ea1f586f09e5eeae6f701da62fa571aaf154d33663c326a37815605e2b634a529cd44a332733d2fd5b80237e358f7a14afbf8734ba3ce5874747276a8321ca1953f91bb21bdc021f00a5ed4223ecffe98068ac535e98b5ccf1c8f52a9967257d6f77327e6490518c34da0e8acf64d8a7517e160401eb9a11834914efecac90ffe9b02ab50a414800d1cc68fa26c1d7e864943d0d55139a3ec4674b49b0bfc6f5cfb5968ecc90599881c34ca89961aa5847ef21838d256c965b471975644152194887597ac1dfe3d3815824f87bd7f82dc3d49586ba09339a88dee8e32fff98b72437938ec0c49752b87122fc8f6fd1c2e5746c6c99cb93cc7bdd590189caf2cef0f1d24458d686cc6e5c04df8a2207648e161f3f3e7da37ac8faf02d9b3f55be3da4322052ec24d754e47febbc7b6b63fd9b4af9d4faecb1de0100812c344309fdf8f2482a7a89a172368f945febd65afe9a9f1dec7af0f007b0be936500c38d3d4344bfb1f250653ecf38da4e603c003b414d2fd91697e5006579720443bf9891942ba25564206227775e4e044b67769b22db8dfe74f02860a5d2d2a4aca2760f5f5ec4555ed430d98b03e5a23715748c05b523410f953698b622bce888c13a8041a7f48eea191106c7ed7e5576231d1c26fffebe86ecbe7e975a7d6ce77c97d3c116ea5ff81aa37cdc77066f17cd94808e10b579b9def686e COUNT = 7 -K = 1dc25e3170a55aa883eba838250d337f -P = bf318ce3a2f80d4c12ff1b4fbb1b2a16fe16faae2144951318337ada6eadb3b2a6325fe28eb5f21f68d65a6dc2f5cf0ea4e00bf2bd3164cc85cde6542f542e16bbb055d76faffaeb0ed05131d3639d73165cef330c05950ee2628313a228b12659a5b25d09 -C = 81ff06625830f787321bd473f8f098d7c0981f3c3444469a3384fe8417055be0b080d1ccae247cb4505af1e2f90fdbf4855e5a88062cbce66bcc2b593e496ec0b62109d31a83032b98147416fedbc23a7435c9ea862a8cd614d892319111bb88a6a5dd3f304813d93b6235347e59892c +K = bb7cb504fd61038cf527e279959bc390 +P = 2de613c04b4b409da3f90eefd3a838a3ef864dcbdbba1ea8a42f44edc638b9b1593c644a44fde20eb49b399791bc9313169a323a2e5bf2e3054298a6695403c095461ec35fabe049452e7478f82e0aee11d2b0b3e60a6bf2e10f4d9d8fdd127566278a8f9e3234ea98a7bc3783527838eac4598976fa6b5a05817dce4ab9dda6324a5b0ee8785feec2afbd99e5810904ef546f4fcb38b63a5cd9db28da8303090442d014c1b60dac0f9009ad473cd004850768714321147a9d72bf71cc805f27e27a66a57eec81a7af98e2083da4bf585232f16e5525d326e6f31e4b552e7b304ccdbbef04f7ba2eb15c1b5dcd82ed5fcec2e09384b0d8b7058370d9a3647baf160db3d1232041ed239e8dbae91b7931cb7c5afb3a7f68f62ebc9754eb9e13b333a7f14189f54409372864e96fe7b4f483404a8ab55b62a42ee094685bdadcd9bdccbddd6067ac8066e04fb1df39b883d7267542489be4052c8ef2dac33293eeab0343649209d315b0f56097750305a34457fee6d5801d179204b0843b44e56b369c02f5027e43f0b0f35f48880787b5a0f3ff595bc71bd496d63e5e0b29a57265291c1580bdcf134e23ce71a1f8209711bfe24b2e25566a363280217cce1dc14dd7e9cde3f85bdb2885fc4193241e990a735eace91e00a87d8710c5ac33bfdd2744fb5af58079fd3d9c56b39428a91d1b9e0bd6f777f9a15437c8513f6b3226 +C = 9f0ee1e2cdb141bc571e79b96d135428e27e165e37852e8e56639cecb4f8d447f2f6e77b09ba4cb307dd5bc963006efbcbda1ae8473a424261a616ddc71c862fd374b053f9fb1bc29f3281830a21789e45c43e92ed85f690ec1d76d0fcd39746d250c7aef7bf9408c230386e80357f3cd150b203a12c25f19e97d238cc965ba534d1d155a70ff14772527a3d1847e659d966dd073923d2fa71ed3dea040fa611679611ff3122f628993a4027c6c9913e002969355bd97647dae530e34f648e5836a42238832bbaed2a81c4e6734fe9f2fe96e13d660f00c14dba7c76d9bfac1a3edd148968047454a2b848ec064030245df94b9a309ce7616800b6f80fca14ddb2bc274e358565597134d7c8e3ab6b48a48f5f953766848d45ddd4b11d71768ced181936e189995b999a1af1f3577f4d677e590a32b5d19f15f56bdcf5718f23d14f5a4259d5cbf3613f329a549b5255df57e9ea6b76d8d217a59f7c51e1204fddd24bb3fb35b7573c4ea31128a59ba7fa05c2a262e02234b970ac8e1a8520172a5a2f080780807076377eaaae546d495bff80e1bcf80f8fb3cd1900b51b11814d5aefc4b03f2dbc09e53e60250fd014c78ed31e8278bd36b5c89146688e26f8c9fca52448fab093dab38012f192a79d0322e62e7aee39ba1752b1e7797665c483ee647e7602053a993e581ee4103bbb01b935e8c7c887a4401df843c72451f43f29b13de1bc76d6 COUNT = 8 -K = d85660cdfc2e07eada2bc3672f3dee1c -P = 0829b35c8032ad861228b672cc2c892f11c9a92ad36d46e80a18b08362c310dbbf70718cac0dc681152460dfdf8b334f16d671b3335ca519f4bb8f97c03302f756fc63a993a1546cb581ff2c420c3450ba5317275c81816aafcd7899169d9b9d23a88c2883 -C = 46f83b1d304804c9b77a38c5e2fbccac24e71a18513e653a8c4ba68b87779ab1182e94797a484a8030d0af7d55567a15705e5cc23509c19a3102a79087ed71a6cda7a515fd2b4fea21cdc7ba5c600914357783295bf4a1fdd61f1df3f8b3438126149189857b11d5c47f5f2bc85127c8 +K = 5514c5786a769882dd1d8212865b535d +P = ddb57b5c4d0a72253ab841c64f42dd282853b26cf7e1213ab355a06c2c154666f5e9ffa068a871a46d1081fbf063b6e3cde95d23f1d78da9d07761d74eaafc2af4d7cd606aa23a0fc80e8536cec48c6b91aee0921986ebec24e31e0f034a69cd99c37a875ffdb52b80c4a8712fd9e8afbf57f7617837a248a0b3bb8738b9321bbe742026311f29d191565d3a5f0bf591e4dc89ca1e89508749c7f0949cc0d45c58f9616d1a30a5b202344962fbf7558125a8372bd8cf0bb5e94b074bcd9e40c57b1a85d6b8ac474ccbc1c3ae7b3e0b0e3c9d0b4d820e1fa093fbfb8a1dc303c4485f78dc9e9413b30d928b8b17ea562f60d73e7aca7df3e799b932008fe2ff755621c99cb195864d1984c1148928ed97e2661502b66c6ace95e3a056378e7f4629c2431cab5660947aa977d68951ac8fd3619b3d49ff9ea684cfd53a673ec4205e808f25f8f4073406b47b88248908f6865ef995beffaf7da4d23e7a5084b638db19893c2491122438bfaaf05326e5b21614787b84b80d9c840f0a2f0bab744a62608d4a892d74473253b2a3f03edda2dd57aadc26d6ddb3fb1293095d9d5e8bc6aec90fc2630147f2e9ffb46dd448b1aa8c0dfb4d7e84555ea440c24fb7d4908d6cd4a3fceb4b3996fb3e925cf36f5e31382ae72aaedd0306eb38c3089ccf21373fe1c40a648e45f30110c9c8e305fe6a094d7178e23160fb89e7b98222e9ad +C = 4831413ba6558e6db87bdad36b4f67586437cb8b5c15679be7511e62cadb7d6ee7be3e87206704d0663fe569b08396b338003f7f36f6326565d999ba95aa0846d7c0d9c46c316d1280ced3dea3f3eafc775163e146ad8c6ffdf118066b4aa88db664909aeeb9bfe8f56878ce3fc9d90353d48fa7949f0bdc67c6e9685dcf52f0c756bed0231a939639da9b883ca35657dda5affbe58448833122f01153ca6a2a840f15236c30440f67243bd078ee85588d50853533eb857f6941b26b67c3732a896ceae947b6a8f970a31b475d177c9a399e3326ff129aa4bd8734ac39b4ac2571e6069cca29d7049bb367af424fbede4eabb61e7b5ac291ff9e74b9b393bccf2540e00dac10273b6572316e0a63086a410bbbb6b2bf56d1e9a17166563dc10d1e203ae80a9f72675259ae3d9cc157a9cf786147ea44ec699ec379933aa4370b7255264ea2108078871ef72291759f8ea09ecd82406c3bde186a0481a1a2de2846d4c37ac7afd9fd134b1e481ffa3f118681aa8ffc453176726fa39cacafbb43d45d3add888de2eb068f6588b93dc1e52d390380fae6e6c82ae66b6ff51d6465797662c01f9a4ccff77bcfbfded78a7adab9aee1efe6a1199734b33f579a7eb4c7fe9ef552797d1912d303f61b531ff80852df841b013334a986fb56b26cfb132dd39aa3d91b1a6cff153f1e845f2b2173bb3d01231708269df35640d68b218f8374c4c52cd71a37 COUNT = 9 -K = 129962edef3f1a50fa9f3f7b7114e1c7 -P = 70cbbd055547d3933474884c70b4e05d841904f1a1358967d4841da2c688e0a52dacccd48f58d680f44a35c088694f98c5664a93f308be77fb4d7363eb1b3579e36bf13f91cd300f2687dc5edf5f5332b9468828327540f7ed9f54c3831ad0fb4008ab010f -C = 26e19220eb93764421ec061b2f5efdc13bf26bff0d8ec54185a31dcd6053411c04ec5d6c0d1ab3e609ed6d3ad5eeacabcebe76c163c525d9f362b3cb85dafcbead4430ebfd10f5787086f54c60077ad56cae182b51314c6dd63082fbb31c9f1112dc6410176071ff93056fbc769fc7e8 +K = 072a491603e996e2d72d7a3fc20fb196 +P = af6e5f9ed6451080b3711be07dad3a36118a501b3515cb0b74e5e3b820855224b501f06a74ebe162385d0f4e3e59829ac6a3260f930f8a8496e79b5134172f42d6f34c545fb6a2697f1727c34cca1dfc4e6e85a9e344d900cf96ee405e12566278eaa9ae6b66105edcda339d63b3284c41b8e83df26b3713fd6d33edd2062a92f0951c73b32f1552f030f97fae20fb4687d2b33a331b0fc8e692758824e866209ed0f69e1437b4ded125368486d853ccc71605c33116ee5de3c82db7788211c1ec3192a4eb0a34b0daf1d31aa4d3cd6c5f1a44574b6f38d2400dc109d8d25595179855fc0b7477c945b5d91c7bd4c96902694ac011a30d71a9cf3185e6157104cd46154fc90ee7ec707aa57897cc0b1d2f2eed047221f2e9381deff28f32e085ab2990babcdd59f35aa0cdc828555d021ca0974cb1d6dc29a614d4c32c948b2cffb39db30f0beafe1529a38f5065363acb83125ff0833fda7ed72bda61b1f04d5cb04d5bfe5cccb53837ddc52515fddd9087c2faead8bd00e9db042b3add0daa0ea7ebee85c761796dc6437b379b542753f237ca0adba0be55283e717e1fc6260af2ab951e2064f2f9e34df7b3588a4f12333de0c5ed5dcd2406f33bd1193e36f81d85fba89b8ce1678320172a0e72f53830cf39fb7b5e56962d3e11c194aa62ac5cf0db91ea8f2e7eea1a5776b9b2fbfa2c9469fa0798dfa0e926aeb77a4bbc +C = 73cab96256edf69d18fe8bbf7eef0e811a2c2dc6b579041eeb7f9bfeb05848e40dedde90bdee12327ca346bff022752a24902d1116f8ebb55e7dd6c61ea6205f9fe831d70314246a032d481a1950e8b2cf6e3da2e1b08006ce3eede7f556a69d1e1ead830bc8afdd4ff3f273a108228f0970257294d9980175a998ca4186498e82fe472b87b672b43064b0c94313ef72fa1e20de896cb2e4e135a4f01af0bc6961de8964a0ef971fd0566be69377ae44206bf58e388358fc2babb69aaa6afb41be1f61b5dc9bb90b93778cc546a6450d3314a4ef7420bf1f1ecf510d666efcc1ad22f0aac89e48229399c3c1e9a23113ec0821852cdce25197b6791a45d0e6f1c45c008e87b8f9f22b65a435dfb92aa06652382b25a73fd5f0868092e3e9824ab116dabb640c6fe870b7cc1b857efc93e7fedbab3b65c31cc4c459b4d9f2db3d8fea4ba9a075582751809854adf3f754a6735709e74c0ade84f716243297df3116ff9a6dea06ac8c8ecc665ffcc1e0d743cd0fb518cb9d0ddb472ab4e71fb3d814ea95d0a0b49e4d182021f4d792ac6537ef0fcc7d29faa361827fa638e1fd4481d37ea41478a8cb076f114918f1c474db55268304cd7b9d6bb55d0664ec1d5941f9ea8ac7b04c5c92fe673ef6f7f66a87cbf93a284f8f4826a9fd05dae12717ac06fb3e37b6d8485ab75a95d2a87acdb720fda780dcfe11de109b0a987c1bbd2c6186780db9814d COUNT = 10 -K = 94b4cffb8b0ce9034238d9d087566542 -P = 4a37ab3174450eeea1b9caecf095a3f762447f65ecfffb57c88cc4f750beb3aa8430920a126ad3be324d1bd0035b7fc0dfbd9fc0ea9473dc3c21f4dc9e1ab21b93f89731d31ddfa4796d97b4c6d18f2d6e624a6fe10f040234e351b569f3cd1883c19f358b -C = 5dff2789d51efe949bfa39b1efca2f92a255a14660ba661f241edf656f9a5d981120a29f21d66aa9c7e2f6cd0c24e166134debb26e51e96efc136341f8c911bd2e74538c9ac67e45f900176cf0d735062d8da3fdccc65c4eea2cc376631ffa6b454c7da397a0ea653322c539ec6f8ded +K = 2b6f7d04b17393da4b1288db1d7a462d +P = d0ad8eedc76212eb8445384617c898667c2bcbe3687404cbc476aafbe459bfcc5c534552961fc49ac9e6bed1b8948d07f4fcaa0c1d32e865d3a26f918c5ab875e28f74f62d0f6b423d7547296cf51838061ed12f69cdc21159a499d4870596c1abde27d7e5e2376b7c529bdca89ef8bd606b9e90bd5997d373ae3a7d7f4b402158fe51089d5b37497bb5679b94565b31ce3f79180269764ab39d03140eb1f209c3854f2a641b773428dd1794998e29904fda6c4112d529b862321d5c13da2588785a48dbb203011e7720fe33cb4ffa8749e9fe747711d93c87f5a61a52045f5b9eebda72b44b4e18359968c838b6f1944a574a1069e29231711490cb9ece829850eb2ac69989148eb107b62a0143812376094dab693fb062f778764ab41d3197551ca7376914c6dace0a3780092ac34af3030b4f2bd5430bfcd3fe6861896d0d378826fa7801b5aa8634a17f3d362eccc4da66686d081bc1853a808cd131194e34dd48863531cbb00eb3e269d98438f5d75eb1f5c41dec30a4390206a571792918cce186d285e09e3b8ac173e35a179aa2c6491685ba56db9a10dcffe00e4b4b00a3f3addc5c45710f37966bea0832c349f733c9a96ecd41accf95d727c57da99e7dad1ae413b9b2924b7247b23f3c7d6f6a30ebca0f43714b63d012f2b3154a6b4c2f097a584e4f9e2e6813a3507b70bbb1b131f76907ba23eb733ffcd6a7f9 +C = 14a2c6bd05e1777f8d0c17e4ad19895e15db070588512b848abc2ac410caa77f889e0090413b4a6e136f26d1e370071ffa37edd820bc1682df052b25055abd535bce488189aa30c905640e04f3562cc658ffd9d7147c90ff04ac3fbf7d094824dbabed9d9df8345eeb3da264dc507f83b9c9f6ac1a0683b3fd6df0bd108420b93fa82b9bb9ce2af0e10c434d4cd03cc9e84242d3e699dc876f52f98f994030b471a70879be36951219ddd6412cc1730691ebdb61756d296fce3d709970a90896f12de099b695e61ba74f0f1f9d79bb828d766f831a3a6c79fe3a86ad1c7b3599d04cecc9fa0f7bc47ed264342a7cba03202602da196fa9c79b910a03e75c34a002f4a9903f09f52453480b4ce280357faf2102ef010744667186d687670317be0e4dab4886022adf05c7ca54f3c38b77cce8e4c37c328c5b9e80763f06d8cca634ade19a8efebaa71caf93142229f8795d586a179447c66e5e5fe8030fd331a2965978032e17e2229475c0a1f8d4af9a100ee95106304e00f09c8691f1311165815c7e3ebead28c6569700515a2d20db69fda05339dfb4d224f027cf075bd7d9017c7bbe0d54cbe291beab6702cf8089edb30fd939b30a9e8d1b0cac2a1cc484a582b2bd81c20dd60d9d51b83c60b5bc77ea49b05cd6fc06793177fee9f48798ec58554277cfe2153324b8f626a4b83df1392855101832038324327063c61901aee1c37b6c4c4289 COUNT = 11 -K = 1cb5bbf6f6a6ba7f59a1a80448217200 -P = f6bc2af1e17dfef69351921b4a7382e89f838db0afcb09183d2e5873d2158f6c570f06ac0fb2e6fda8e195e92f6c5e61a67d9a02786afdcb69ac3ded7e39ae5f37aaf83350972109a27d00b1327b7c79937b89259fb2ba40c3bc8568e55f4b3e9bf6a6e914 -C = 32c8d34bdc02d659db9f94800505ca9f18f6fcd0a668d3d914f6383de089f7ee11d688972f81a9a5ca7db81ff5de72bd8553db2bcc0789b6d58df1356c187b8e246e7843b0994221bf916ae4f4d7a5a00d98f01c9a532980567cfd9216509b560de018617e12f5ca2da8432384dedac0 +K = d2441a080ef1907c8db8aeae5f255867 +P = 05eff4c685dff9b2ad897fddd0a4f6922adca42ca6304c6556575c62c8c059060a9808bef4dd19a8af1302b82d46263fe9fdcb9923e5a63b9f5400cddc6e5422c906607657a3ed4d8b9bec2a52df6400c3d1cd1cce7dd643f579222888d5782286ca53978997c86438b6c9c0f46edd1478dd633af72760a0c10c6e0f4953a34ef6514c362254532430f9c52033d3772d6dca7605f80304637802628e26af4db70a499dacc0bde5f16b9478e3ec7c648450567e0b31e453e7e9323b208edbade7eb34c096752992092b30dc0e14450dae4efae432f2dda17f60ae6872da5a88a695aa894d0d7e339e175ef0b34a898106ead56137ec505c14c2601068a332ba5cd8053cde5602088e800291f3921d80211f15fe5e97a18242bb6bebe233e30fbbd93a21da5ca9147efc44f3489598f9c24c016d6a7e17341ae497b30d56c95478ea95a6541fe55cdbaffe34d3d6c3d4f7a6bd760db39907b37d292a3daed39903106a7cded4065553f5b7552175fba850ea58475aeef0d9fcee1e6be45e3804437b862f69556569249e85a57a93113cc5e39fdef89bcb60fb79b306daa3fe9cded6dddb9254b40da574013c7ef6c7cb0512caa7f0d8a368b54ab3a76888586d8c93047c76de0a9e0e769b8264a65d4edd8a35abafd942ec6e83400547ce186a5440550b8a874fb728dd00d9403dc011b82c8654bc38ea69af29475a24211eded1 +C = a9d0da904d25d7c1a75181245a12ff755bcf8e0f0b210d58b0d68f9fadd0ecca2cf2bebf84a9f1e2a9672a731356b1a475f38219c757de7f49270fd11ff2c6724897a033916a95b4fa6b2a009200ad7b4de35ffd938b7eb1a32dacf449d16e629387acb03e2766ecc716ab68f7962660714b597cb82ca416dfca6b285bd123708fc21f135587ac874c31d514fab97066af85a6771414361fc0085ab5b37b5fdda2aceb149e09c81b0342929ad1a57696c371bdef726ff540ddd4d853838b04c1618af1f23e7bd76c5828522f4d2945158e77496184222447a0b50415b8250a0ec45b2fa5af163a26ed0c5a09c5a9ca6681b486944f27f581bba8f7c2376d699d6d417528bbf1a1723dab799214fdf159f921a7469de346d195e5a2bffad09973e20069cc438df46893c8293e3a7bd924d0006d656748056826e379c0c4922153347cde84a9205f6c298760d9d47945cdaa6256173b5c099df2da2148d74b601c685425ee4992c4cf9f5baaab77068f9694c8d257d3f1d810c5681f9c9f2b2cb88a39c02c401e8f773575d4d5323e0232a9b227cf3c015fd905aa3dcb6ea534324613462e668ba2e925a102fa5aa4b92f0b39f01ba9ffffadee70757bf21df580e78e69d3c579f8712a17f74c7dc6b23f44af3256fd4b5aa2ec402d2ba9d7a6ec02f31ae4218a7662282b2966f9633a45e078b080167254516fa8d06d4481630392692ed5fb3f47fd COUNT = 12 -K = 3a155e16ef239e29efc42cf943e33d96 -P = 61a628b68617309ae86e7c462136cfb8783d5277dc55784723cc8440ff98595bf3fae818b908bef945c4fe616b6f109b5c7fef2718e9e2e46c2f62705cd078b81d846b337b7f1ef132e4558aa47a4567f0c2ba9acaedcde366d50c862f307180d6ae052186 -C = 92737f5e5cda0e2a11c35da17a8f785163ec4af5d64a16f1ca1d8d1cfa0461ada9d31c99f4cc259ef7dc593c66a76efa77d22cfa2e56d8f528a31cebf444454d3a525b089c7d480e77773bfedd701a442069843a68ca698c6db8c01fb5f6d842f262bda48c9f3504a51746c97ac41301 +K = b1b017fa19861ee8c8f8b5d96119bf03 +P = 3a4c48f998d057695360c39fdbf77c2a8101b5e1513ee5f13a50e014cc967fc8b58f418b2525c135546b8f50a8731c43249fe271b8b3e36c45e86ff0bf5c18df9d8f0c84644cc0d4deb1a607e3ce355e6957db7b67a5220dfc432a4830619b499bda94c452a6e27a2fe26ca833bc3d0ba866f5973eb8e696bfd5b0c0459615814b53bbb33646bf9e6970ce572cff50ac83bf56eba32e2b64807f9474f7e5d69ed6ae4632dd50358b866ccb7350137d29e344855dac989a7277c0387cf9c9f26009311932e9caa5f3ee97388fb4f02e9d4e535c2621e09faae42051da9e2a6aea54f17bdbe1298e6361b84b9e0a09372b416d8387b94558fd86a5b717153e1f5161df59f3c7ab0c0704361f9e0476c900b319db92378c6981186b61b02bbff4502cdb6ebde215b768146bc7429fe3d3adbf03b11b8b2b5aab4fd2cc6935ecd1a9319fb19ac14219d248c2ea2df026830ab5a0e0a9beb0887ff8d1504787f0f6c8b3e1d707fb887d9c6c8dce1305145c31be9b356408123d538d79409827f7802f8ffb75ac7f44a8065b8676369c1e2537c2d03177d2b2813391bfe9992ccad73ea9532f41029f26b476ab2b78a86d41c48503b905538f4f4a0c7d578284689705ecf8f5a82aa7267007f87b71b6628a6872fe92eedc5663f347e7338fa4492156296d2198856ce8fdb2a61d9a1532a8ae0ac123b321a353b12188bceb17d37f72 +C = 0ea057bcbdb677da1bc52f7e986563fd496469c2e0eb74886b420df87e794e5b4d3d7a53928feb5d3b806f0939f05b1a3226710482a6e42804e80ba778366178b6564947c2a91a486c96bfb2578d4d918f40df3bc962f98f8a195202c75280d269784f69f76b97a15715d9a84d5ea9fe80e8f54a994258b613d21e88dd02ac3d5bd53d2c42c8a89bc25195817beff958ed7b2ef0d89afa3b49717cc85deb10f546767ac7dc0f6c8cdb31dd0a70847923649597000beb9546e2425399098aa531a6a3a57a890c1b4047b5400235a2e5eea8d9b3113f0b110c074faa16ccd12fd95ef842de2069c7547c8e250a6c5acfed1fd3d8a1f825da77d3afb1acced080c7c0870301508cc42cf4af4a653a858452981e476a745e9c80a51d81e69b762bc723d3f1c8973e34130d90cca8f20f5877446bf0a80dcf1deb75f08f43b5fc69e1f0504727befe9b6d99d1bff451868b9c150c792cecf159a4fa5eef23dad1cd67c8f87a56e1755dbbd82267aaca568cc3089cf0beef29ebe093409f2a4ed366ff030419ac8d412b968b8c81d00be98b3144a45d843d6f7ae2e3a338c2d02f06fffb870e3f12b3e783706d6bebe2fcf390db24e70254404d5dbc4dd70ba00eeefd28c435a0a18f8fa7f27f8922f0b4098880989a1fc817f8f4211459390bd9b71b14d1f066fa1ae3a1d7efddc9c93c76dbde8f02f245243f559130c321c15a6a46668d1bd9e6360c1f COUNT = 13 -K = 76f73501fbb7276dc40207382c1a177b -P = 1310b764c422cee4ccb9ff5446ed74510f1671e9cd27962aa3045b37a52fb211f801f6048e4ff945b6e377ae7e2a6437fe3ac0cebb4cef60e7cff4da32b268dea2bdf1f0142cef5ee7ca76c4dc866279f74e2a344e6d088333014af103821e0163d5a21ea0 -C = 95bf548af8aa988bbc382e76858edefb993d6e980cf76ee61208823901438d22c562060be1526a866dbbbd1090a696f13bf4a85dd5ed7ca571e017ad19fb520748a2a266fbb882829a348453be39722b9782944eba6ab58d70e6600a8b77cb1dd9f1ab7983b698301b020ae1ae2873ad +K = 8a7aaf5a24522240f1fbe67bee5f8930 +P = 904125a665cdbfed75b746d27408e9a6c08e2b86fcf22afbe553a86973658ba4757eb7083aea98e763a6ea93ca56ed158ceebf55a8b03b546ca5ebf236b30d9629bccf20e7f9697f123fb479be4af6b5585fc29bb486f988a2f996a7caec699d532c2c321267394f5798f06951ed79b08a2fa5307c0608eb6fd5eba2429c8bd22642e0327d91f25a8037f73278dc2f279475002397f419c008e7b24984b58aa671c31a81d55e08bf0d370c831a343a728f71d0ce3dac66032de6fe5075f5c31180a8ae2d8e365358c45daf9c1b5a71651f1b5920b8589ec3f387bc88d885e6b533629aa21e78203b5ac13d81a6042fd15cc4cf4433c9700e625bf1f00e9a770ac22c8f1b77f576b36f772329c822463483b076a8313c12a8f1de96cbd5eed0f62557f514c2efe1190fcd0ba15e658ae917835b77e374f6e771fc202572da1142898abec90971dc8796ecd0a897cea636a4e33011587700adcbd41ee0e005653539d2ee48b07c30a2623f4f2d5d68ec9e7585ca09937f8be2c4452071203a815b0cbd2010a3a726ea729654d05815cfbaaecb1a09feb9a4a911065359cce508f4b46a8931f134ed5f2bd17bc2cb1a4009ecc5835e784f458b36618961c70d8c5b94294c3b3291cc0a8c1ffc79b160689d5ae4c98f9e32b1bc4ba85cbe0acb824ad1b6e5e2af220742e6c610c3427d6fecb9e5b05cb61f6edef85c3e1460c1c442 +C = acd071c1b67bc72d3bf0f334cc1654c3ffafc1dc6d48b933d31cbeccb2eabbc427975f24205254c2cbab156b0797299e7dd3b6d1e807fdc6ded9deb5ff89efc1d9bc57e20d25ff5ace3d612d282cecb9f81c144059b237af1304ead0d1f22f896245fd8df0f616a08b0e73dc20c1d6628659b447a356939fcf5ff472bd61c06e53c43703e06f0479d287e5998e3e77a97428baa945fcc3efe9617d0688a7525396b870b90888080050bd100e5372e7a9d13a42e78400b4cca5584b4c5adcc01802fd993318bbc81919caa4824779969bac569ff26b464e311b63b218c0f65c55ec1525940c67ce005dea8066040adde7035fa4f504086288db97fa0be798a027a68c8df3b90ace3bfbc3e83e3a6b27469862301920e41571f36dbccfaf6b805ba8f6accb1fea21a73123376ec391f2d0ba4fe5dfee7b5639c32477f070c035f93e38a8d44b980fbc7d51e6a22a2f01646f9196dd7d622d90c7dc009603a16fdbd5ed5433150cf98c1f2d683b02877f1db308baf10402c12024f9a76d39d56d7b0e544540518a68fe12369827fcd0ccd2d5ca1e66ef2a68fc852a73bb3a4ed182db6700ee45a1ca80e874df5deb0015ba845f2dde6ae0b71dbfc2c16d07d5c83baa3f7ba0c40eb2669553a476ab179421b66abc36147e06d85aa51db509c74828541d90ee8fad9d9b44d846fc400896af6757b9e1c68efb048a46af03fb2d61b5947980289e342b1d COUNT = 14 -K = 76df022e44a89ecb605c4416b4fc01fc -P = b80e308b0eb34109d91f9e529a9ef9ca5b848f3bf13460cc0ee8ada7837e9d0ed37769ef04b2c8d2452b7578d2c6bf69539bf4507c43e6832bc45e9fb7de1f889868cefa5d0d812239c83042d6b987c482afaa94c565acfb18de61925925b71e8d9413336f -C = 81809ac1f1be3af8c35f299ae0fcbbc0dceaad68c4445342430c5462690c54110d02e053fa8ed6bbbb92877ab24b208290cb9036eb452b8acab23c7db128d10d10cf8ad63e7d08fcf6204b948dbe2164da2a43ed15cb5a4231bef4d5c34e79ce7423c88476d28a8c24916192e95d7cd9 +K = 821485966fa02a9262a1e495a1e9cecd +P = 7f12bdc1551afef4936e8ad5e685b3d4111e17037649e8f0e0b22268c4c79aacfc4c21db21b3b8af8ff29755abd57d43d5fe432eba89e79eee523746ecea3ab4338bd89e213266b1e4528ebb9b52d30e96cd53ad82f9b2a730abf2df24ad7dc14e526f4b09f3e933dad519be3c33426963026445afa3727930e85ac7cbb797d5b04e6784f30ef96a0fcc69133a046df270285b44b5209e3a96a876307f5a58122b2e497e6242767e60a51aefe544d0347261c50c7dfd28f9bf933a3041783c70f311b12d4941e977b381ffbd6aaf5aab8f27d6cdc261195578091e9475c0e6b5d6404ebf644e6c361bfd6da1b9cf83d13c861f0cbfb82d4d0d82f4bb6e89864a0d7e7e0a982e65e779b687fdc0e4c96b08e36574e48fa0806a3649164d3ed6b1fd4da031b49cfa4d8e769e290035b6dd309addca0746821e3e56119187e77d30dcc6d44aa7a91a7155e1940012bb744a84199be48ed83fc6fac7fde0219c51dd0b730c04ddd2e78269cf17b2e121700b90627cc6f9076c67330e5ca641d7f65afbf97138b7fe3800082cfd92bce7b216edcc700532379eff9bb2aa9cde9d3d4da0a92fb1022d26578c16f910e8b100a7249a61855f8e2299314f0ed991d2b9f8e03c4b0decbc1e88de4bd47daa6ef8f1a51ea597e24591a551119f4675c22285f8a7589b84bad182cc53da9df3f209ac77ee0cf5554893d587c562cf5998f9c6 +C = 8b7473ad383b647b323628ddb4283f6d89982e1820562374336673f82ab99dbef16c26d85691f242939f4edb624ce969a69a5a26e14c4ef998015e1e09e431626373cd09c8067f8ff1a57a67b6c5f4d229207e088d760c5c3cc92c108188bb5d27276ea642a41442fd73db88af03f4e94984bc1de19cdac103ebb1b277e55e50391a5f8a9b6af4fd1e33f5c4c9adfd41a9ed3fc983a0d1976276abc1c3f5cb05459f78a5f7ecc55b9404200df9e5377a2864786da3f770a741bc7a1bc3676070f258ce3abea98a7f35d4c937f2824d1465c27674ed1b71d6edfc70d7705fcf4e34f5089bc3eef810d9af399eafc978208354a7f4ec0d2b096e9f7634ed9089bf7670d761d603d16eaa2edb749ab2d3e62cdeefdbce84a8febc8489b8d23dea5597ae48f59fa2e16d5bf51081a70c5384ce42264e72392fbd422dba148ac651eb8129b172acaeaddca8cc79ebc5fb517154789b5238f53ef24678a87eb5f480b337d693f86c8c5329915a645e6fc9e891bbd3cc3cf9fb9cffef078f8ba7513176d5a846f5511c8c890272e1066045522b51dab33968a5985f988cd5cdb0029bbd718eeb6adec94a60d17d88854ff6c331aee0fe8fcebc529667e1fd0f90a63be6fd479fa092f77dfeea8b086d67f5892f7841ca358aa69612beb7cd78cb379583d2f366917b0cffbeab7bf794f56010582e73540a9b7b91ad5e3c8f33d7235b6ec3f8f4521f6d716a COUNT = 15 -K = ed72d2ed097908e5b18c85f93da14cf3 -P = 97fb12403732b68daf59f55f47af5ecf27b12fcc895675b2cdc62b95eae8aeb3f51f2779410ef2dcbdba119ebb916b62d9e92ce45c37b053eb314fb36a6a0e76dd8922b3cfe468d32a28896fc3ee1e1c6a80560f8622121e87d74e64a442081133474ee470 -C = 460be0312740bd02bf674505b6e7af506d09f8cb149fa19f68b2c03603800cb73717ebcc57a6358a4b356cf7078adfefac11cf10fb98b84157714547e6a297b3168299236993b57b65bf67e927a57a2bd76acc128f33d364504a40c546edbc1cdb06419352e521ca212ae77d9f898425 +K = 23b4eaab08eb326720c2ec95ad7ea752 +P = 5bc39657d44a04c08769fab295c9f8f7ff81d1141a9de87789ea935f6443c58e3f7fb14c2ce834d8191eace87951b0a5aeb47e1522fcf5ad7a2dfb6cb7d7e053d2f28a98f069b7f43b99740c913db1177882a35b2372de45b316e0963470f27e3ea5b27ccb920f94988454838745fe25d7eb9e4714c6294291e6f94d6832887f0c1521a2527a10993abdc322a3dc441477c6ed2f0c5267a8d7c7c5cefd89f4ba84988d7c7a58526bc91a56822b7a67fbf781d424141aaf0a3e1ce6a90e73e65b969d79ec56d54ba6acf8b9e2ec61f98c1c09398bf44d3b306a44d3f7726fc69528cc34beb8b9a715712b5d1631af47026d78a47b866802cec0c474c9dd1cf8e89e60594170840b3d7920ee42fe010d79dd09a225230b3722dd590c2a7c3f3ce842bcd2d599a5af48aa264f871a224f1bf10eed8c5956e748e869eae601badeac60eb48a78143dbacbc215992c9b2d63ceb07b3fc94bb03f450f667d1a95c55232fe73da6aded245b1fc2ddea8ec23bab9155483b2cdcfca25787e4dc2c684a1a136c5d5d789080b592817ed5d548f268d8f3fa9fac33ee55a72f466a9f15b4662c2976c2689e64ffd979b30bba2508a40e5196be0871f452f24a70274f9e54d7a6968c38daa805ad96f22f9e8139f2056e60ac84006b30099782b7dfc6def8f6954b45409a17f8b18fea42190577ba596b29258b89581972b87505bdeafe9271 +C = 4a13d6847a994f8fc6b84d7a9bf2ff8a0a35251749b3f1d4dfcf434dd8c29a58c1a0a36f90839c8f0203dac4b97c929b4acdc2cbd47044a8698c791a54108be3356ce642d2c319491a9fddf23acdd9ce5874f42dcd64c702f910935b67efa447b7b1e4f97be26d3061b258c9123e11b6349e472f2a9c7144665598bcf1ae1d239f647fdb1254edca901f691b8066bd3d7e489b273acbc2f91b7e71b15c04dd006393b8b0463212fbae6936c54f11ddc7216799d7512bbae091323403a4215f5393b3285b8ac8962b4e87d439bb5e7db5e8880fb172cbfe5f171d8efb4b9115cb2220028fa2b6830a3bce907d149ba6b8b78aab328cc7ed434fe58c215161e0683acd829165c133114ed066657512d5731098ed3868213143450329a603bef18bd6ce8c601f0deab998490779f54cbb4cd2182a61afa1748f33b269e73dfcb9b9de6ba2cb645c5c16d2701b6576d1582d04894386cea583654cfc9f3bbeafd54d487b06b3c842cb6a6ba7e9da60715b2b0da3e05806af79f12183a50f2d3628002cdf1985b48cc9974533e754495e696f5743b7842e1cd034e5118cef8df4c03ed6f396db8fb91c1f9e7bd55f607c203ca28e827b736a254980d21b529f31eba2a64285c73a2f91763d7baeba4bfeaef1b5c91bf7ba960f4cdc7555999f547aff4ad1ab5dc93e3b6b090baa8e284acb4ee4204fd7f096efa6b189699adbc716e636d6e9f1a6177559 COUNT = 16 -K = cf447738d4f279c81029e1af058e3ea8 -P = f57eb3ae03215da80dca3718fd5288c2689f455a5da460faf278106a36e21eee607ab0f4c39808e3e2a302b6abcba1121c82730fa2391064525744da27d30b05a8a7f40793200fe9dba71c98b320df6c10f4543d5628003c1abc7f2e01d3ea2206e899f6ea -C = a3a9f74510d5df65bce9a2e21e04693e9b7dd84594a79044f41849973f2ea36cd72d2daa0df0ba83afe37f2a0d4b0f52bd40b62f09ce76f49c8e3e5d80b15dd5a292c66a2b84d205d3b9b3af87fe45fe556a781d2575304f9dd4cfe75b7800b306e7df5518a391dc7de6f38533072f72 +K = 08827412e2810d809ebbcb33dfe0cc3d +P = 4180f5ec24aa4e56a87a7f88bc51bbdc1977e79bb0e2f47e6345a73cc6a609c5d0a191aedcb9944b6933aa209eb2f75f1b861c4852de5756de06d8878fdd40cf1c370b9e234d646b7568d90a922c9356c3d010d80ed9159cecf6c2943a390b602bb1c7ca237c285280ae595ce87c152c3980093b8b556977fed8ee33990048a32f97e0675c3cc0546bd4af542e0b08788d5275a1c928f982655702969c0f0c244f35821fe884665a0a050f3607a9b513ad3f35300133cef669d3c6a3c5ab434a82c5581c3f1659c0de2851400df2bba4c01e6c7705a0e5f6c24cf5665e67d5344e03acc5e8470a303894f30d49b0c3c1cd79049d334d7be07e83a4b09550a5538b301904c3c6144ec6b5fcfd3c356936216d868af1f5063800f08eccba6a6115f965fa810b81b356e27216efe4fc35bc9bd15eee813d4be59762c4045f58df90311eeca6f646010176219de7b8471ac16cb5290060ca25405e81e616f982ed6e614151c851be22c6d8d8066163596745293a30bc4de9843531fa8a1587e4a4858a91f3f2a3300106efd6b20077f808b1d0ba6ce996e5277920b4630b2fa6f20bccfb63762cf6e1613a8105aaae1f3b8c73fb70d48ec67738cbfc054061e1f6f54cd1f56c173093b392663ac2b698c5aa84338895f874b23d8ee404793404d1a6c61a9c37e516690cb41fad1bb213fc5d9f48680f794b6b3032e6b5daa9a90a53 +C = 1ddd444fed766d2e7bc14d603d13b777caaa79c2c7846bb5f042c87a56b174496f254969c8467798033175ab1036a2c213b9d912f2537cef6d99e77703d83ffdf625216ce7226a358e6598e6f5f11633a18b5fdf102ef0d3c4e092c51a7d91eb98adf99233db90eceda0309a85d19fbca999da681b0d479c1ebc441dacbc0cfbf2a352178b706a5d7b93cfead0fd801f75596273c3fa8574a15b2b68c6cfa8c301ae86237eca760df9711edf56a307a1c666f0fa57249cf36e1ba84e4af5e678265a2ef40f4831188434a10107eb14f5e445f8d999bf806188e61d7fb30f8257359dc4f3bdbc3e3733fc15847d217ecb72bb5a220b7030d70526cf42df34c77fe0ad9bf94c4a5f085b42c99319a81e601b6218ca2e31ee0e219ebdd5cce0212adbc97faf71cd25d8fc9cbfc568ee42a88a1c0fa49f4e07089a49b0d4c2aeeee9dc7e38d5275cddb18ae06da4e36b7d7511b9fc80c9f9575768dde419dacdf6582aec377a5e1dce54283f2fd4d9968e1bf2f4a7f52401d768b12e2f81ca687147ef4c992ab97d10e2eda433f807eaff6a4092b73b4fa52fde64c8fa7860764ac2eecfe926dcf28298f5360c230df2c56f6b107ca4aef563f2a4fc956384c9f45f8d10fadc0350f309d83ef81f85ce1dcc0b2b4268ce16b31a593a46b0299b657bcba483ad8321a2a8c19a3099a574c3ddfd02e3579ae0733fec12f64eee36341cc2999b26d106e775 COUNT = 17 -K = da353db16540e77709992571856884a5 -P = 04326a492332c506865a85f76a7ffb60467c40bf1551ca0618bda360600c2fcbbf0104cdbf272083cb7cb1d86e1bfcd7a06652ec3ebf145b274f7e65a7cf8f1f35231d77193b6946bd72adbec0b5f5e9eb3209c62f5ce63a2fdff5a887994970fa916ff305 -C = 421f415194bd3808a7726ab95f430b38dfce26e03e8754901beb95f14c28162d07b8db16975b1fc4a7609653ce78a2542a07f2840c4f9588130a44c132ebf3d0d06b376662bc15c173a1ef034b51fee8529016d56f58d6c1db4e16f833a436c097ca8d002120de3a834a779065b79177 +K = 8f8e0377a30f6de2ccb1fe2e9554f4df +P = 4f0ed3fd56fc91db51a3e244950ce2198816d8419a1370931e45e684985d98963f84e491c179204ad302078e28cf699e4df84e878477515b6e94cc17e2440ff2bba6410c7d15d5bef0df72ff2bbdb569b694fd9db4d2c7dcda5ebe4cc3e3d6d36e3bddd11c771d80e0f2b08ce4d60230ffcda4934f5c08d80ede5e06345aec25eaa17ae2ba17a00760a0a9cf76cf33467ca6b129728a88389a31dbef62f628d4df7eedb74c19b7a41891d7c86db1952e1d24bbc96c3b6c4dbb0d5e061a1b1382bb0996b21305157a99d1fd93d92a51b96d56009fe835b308a9353d1b9d42e5646a97bd818ed60500793b9049886315cf3c3fcabd013b153ed7eb787a9e4b0da13b3c0856cdfdab9241a72dda64279cc6ca4ab96273dab5bf7a51db8b0a0e178bb1c841faa7ee71e843081cddcf4bf586e368212eb7149183a6779b730ed5096d9f465342109b78390be09e08c3aa279c6761724b523f3de29ebcc3d4ad963f3258394dc88ea1697aefb4bc86a02a4f582180be907e182e09ec387833c6ab5303bacf8fda726ea8ef7208e5181bf895e3fb5317a76d41696e93cf7f50c9df67423ffd74b5f4a2eea39a8d1c7dc3fc237f146167dc80234d8fc026e3ee10799967dab4991b7c24d1605cd08d34380500828931eda68c5bcce38f4e876349524d6bf78274e365bde6e7fff2a021666bb62d68d01a45c821b2efbca091f37802543a +C = e78378c120d9ec198e66275cd7b5a3d4132f50f86f47e4322e3a48b208b56bb39e62d31617a399b7cf9cf4baf68baee608126903d868b47f6a09c3d0a61183f3d9bb48491b849f3eabf1cf7839780dbd91b7f4b52beb599239f875efd28ebe666140de9b6824f0a4f1d633aa848b0c74f815e0ae2fbbd402c108c5cb5266b85a0c159878813fe80c5b40558bf618493a54c44634c16484d63957d8593b8e906637c13fad3beedecc15ba05497401d1db16bc385a593af8ccdc1bec0e41eb0caf91fb4c4d9361cbf701028a85ae6c43e513e567742e038092034d1b9725d6a994bd3661764b8bbb58b7b0d632b720a0a494fa8ffa59fc4fd63a57d6dad010c70030e0fea0934c6470a60ce23d6a00d7c0f41fc1d2ffa57a8e10aa05b2df0422089e34df0e23cb6faefbea4cab0a6af5196b1a4dab7ff7f96e5da17a4d19781d39545365e482fdf40e7110461b9e8d30f93c3c0c867c7e90cce4f5b7d512d85cdc6ce2b1f1a3b31e794f310d73f0f1bbfb1231d40e83b0f7a9cdee49d401ace418464aaf4f62172829e797fecdace8ba65e15c56fc7014b6394d039b86d531023776723dca81063d339506f31f422a8b08e42c97c729ad1b6675db5322cab96500c316de3a518f21476fdf2a2856f2aca556ef31ee9feeb1041d706200f0d2de59843fa544d4f04b1fc9b5032b00d76bca50a3aeb69db3521e04ec12bcff8265719e1bfd585b881e42 COUNT = 18 -K = 9b5c8e542d42b734224ed0d9bb43ff28 -P = b4cc38ca1e5b9b744fc0fb8729094c96f2ff76b11867dc57395d4ec668db84ede8345adf47a3fcf331bfb222c9d8fa0a0730615ecd0c427543d479fcf5776e4e002aec10d4956f23c7efea7c0820a9b16bcdf153764ab5a7968d389f0148d3fb5560150a19 -C = 8dfbf65f7212f8820ef5d48fa1b7facbfb8a1a1978c9bb6862603b31518e6744a9d37665e29dc0295a0d8bc4fbc149e25f63c27b0170dc475b9797d57e2c34c56406f240795ef2e30b998e2cc294577610d25e741a5910d05a3bd7f65a93be779f7d5d574ff8cda530e5e7b4ca5f7fe6 +K = 6fcb980a5aae48dd4106b9077ad830ce +P = 86cb80e70cfa81cd3af9b1458b79e8487b4c89b604338bb56a935d1191a38337b97e41609dc73a4da3fd59945bec8b1624bc7ec85f26ded73e0daad8ca1b38e2069b99921083cb242284568686fe5f1e6d95188e38c558bda8676f89db1bc68ff2bd0dabfa2f7c183a6a2a00bb8adade5830b849df1eef183be7c47895818b5eea0885841c985cc4b58e16f876f590a807626e25b2ab08059a691ab1486e5605bb90d28e165a4489c177d8888554e59e3abf768e16d4985743ffd889a7d06bbf06c5e81f66c44dd6b1462695d2ab0d0d4d918e12e8a3545a04fe81c26d235be83bee2e0f01c069e64a6bdf10ee189ee3104dea600335a44de99be216bb96f7a4da8a58e7e6e1bfbcc3b2cf737c79abfcbbb1a34c5478934169f019d3e76ea76717ba20b4b40393b8d5d0afaf20e4c182637d48080b623d3b162f0f3fcdd3bc25bfc3a04cf7521536f0801ab42e1269c7d4f38843d5e8652350339f07fa342dd1317796e795204881dbe43322685a95e251b5faff120f5fd8680c6f9dbfcd0ccaa4be9847643132ebd599dc01fbca30bf2d40e129001f033a2353767f17a4da5885ec06e3c7c8fd8470fe2feadab96643b7354c8f48b35eaf0b1fbf80b340794f3e6f91555001351a2c9e4e1b938303088a5fa1c927005e53b47ae2a42cbd331c0efcf0d7e751e33525a97f39408c868462d4e7570410b9a83064232b6b02e0f3 +C = 6a0b3d2dc7cbe51af03fb87a0f960c3b492870e7ce4348929ac4acc533b7c1cba3701fbcd1a148aa3682d1a9b7cd0b0a305fe54cf074a1ab8a8d3ae4339c0bbefccaaf0348e60b43cd6c22185d1c5d7816b097ef993b558de103ee998997c45862745f4b634023cabd15a93f030c4e9bb7b729ed5c0c22edbe28a221fd6280916e9621adda080f26128c1192284051663cd1eec80b5a25dc1901621de2e134c580c007bbcf97c2b29e1568bdcab7b8bc570199e6efa2dc2497222893b0f599842c34c6a7e9653ce3021b27092a01fbdab4ad70ff0e7481c94716cb6ef408472a44ae258d23019f082cf542f3e1dfcc9dfc55e4bdf064827efb3f206a501226a27799249d001a133a3a307e66f61498df864d9d8beaac5c53673aa9b8eb0b99fb8dc24403fbb85812e5db4725248fc70e311d041969790fd6185fd381f45978a8b158a862c038b5ecc92952be600b4f5396d8fb7bfc9c51ad91a9ba904029c87887874832871be860f01e2a27b629b83da616a1b47bdf2a21515b8c35a63f4c29552244a8f65ed93faceee03e9e37ae00990a93a15b1c76ba138a88eecf509e6e2ca152ef679615dd91053f8d1cbe40e4606fe41719c0bbc002c9afc29a451d1c97753217b4202b6d747c101d45e47525de7426cb09a84cd6a5267857f67136960b684b2c1e3cd6a7034e535f96e463fe91333af850a5486aecd9dc0198fdd7206f9072421f51c8f7 COUNT = 19 -K = 8b54f9f0ef22946bfa20af66e739773d -P = 03353848e15348107eba632964e600b664861b3100c46c5c3ca8dd686a8e1761864ad8671003004caeb7fd30ee261bb844a2f47dd1a51d798ab4ec73942ab3f8eab8baa795ee58e193e627ac95ef7a9071c5603ec8605355ff39096508bf29029bdbfe2cef -C = 9686519c3cde5703bd9315fd702f7af444b9a6d21f8bb01f833a5ce6a3180b079e4286c196777e24af1f0fc474f2b0564efae497b47015839469d2834484af6c4b8f56b9f84a137bc11efdb99dcbb908b68813d8a1d89513d01b2bb259d836746c291c30ad8d952c525e48cf32829094 +K = cb044a9a48489ae49c0376de49441230 +P = 7ca17aa07c2a64f1328f8a029bcb0f6e22864dbdad850c2655617fbf25d4b71286f2f9306c5c1777cb03dc32190133286c9ddc916badad945a466d3eb19fa1d74bee7791c51218df2143bad3ba136ea9d3e1ee0df249bad7890312b1907be82acdd581a2d0e3b03eafffb4bb5a3e3055377efa5d1864616c525c4b610b06506da5f9339a8cb423195a260c08f002177afa2944c3fe4591437d3b124a041ad112b0709d4be246106b6cc2263941ec19bd89db66191d1b19fc3dfbd37669d58a95e335b32a004ed6f6e69a7b9a50af889cf64edde6e3e4e8119b2f5323b9dc6779e73ed3f915f83aacbee8548862f43a8087afe26e87d24f4a2d01e6bef28cdc76b78eee052782c98defe74c751fdb711e568f3e0ea62d6529b8387cb107daca4e430e46ef92279bc79e43880160c58cbc9e9c788947cf776179d2383fe65d8eddf7e1871d4b6a2e14580e685693e5f343350ffd6679f84493af53e34b431c55977abf58767e75945ec3965972815569fffb39f7b5411825f589851b6f926dafaf65005acf13aa0739d93b68ef0786eed04095145cba2192b45d9cf76ec634786463f3b3316aeed4032b253dbf2fbaafa192cfeef17a56d8296c9ad9a3d236728f2a4440e8c7e555b8740c36107ce22e95e89b5b57278e6cfe1c944e36b4a2ddafa397e635b5a40a24ab68b7504c1e848fe83e6cf26dc1ac4cd2386b852cec3e24 +C = 57ec0d7b631c7efa830f076167404130e6a03eff20be4a021dd7324e2523b67d03f377777211caa74ed99977f2067dd63acb7c11ebf6e1a4ece365098c1b581e60f2f5c03441c4c741e37e1a84097f526c24e43b70328790a13668370130335a717829d5c11b8faddb8d47582d7df60ecf3283ef8faedff745254ed40ba0d6c23e75acfa07ad31349028485edabefb8303ff9592144bf672094dc616154baa32fe9fd644812be7555cd936ed59a0f345927a0696708bbb4e63882ed17004fdc5dd7659ac6dfa4e08081d1d1b0d7002f592edbba443fec3ee2cf07eca3113011e261b3d60aa16b216f1457a10a430dd155ad8d279d7c837e173abec16164564a1a923be4dfd8c08ec8a970949fc1a3d244c14afbce736ee0a984f96a6c6f902d85f0043dc01d6dfb54c0a04ff7dbfcedb7df5e2874042663753f1048e8502cd8d507cba4282cb89623283f3fa767279d3ba00399d4ed3db9fd707a3141742d688babaa9177c4f9809e1aa3f3f2ed1a9e257d50fd3e0b19a07ddf92e282524ffe9ac06014e4ebe6f6c50252fc816f07ecc7b0f07b067b7a98b833ed12f3abbe2158de6c6faae3d1fdd32f2426c35e08845c5b417d440b0cd577af435bc3a894ce734a09f9350e1cb13c648ea5b83e375a7c33e56857bead59f80a0bf5f6577f44bb926131651c96e44c628735743278e26eb6e5438237b2e1770a716f2164fc1b0897cd9d1ee0cb1a4 COUNT = 20 -K = 8f08c6c55f555ba807c6978191fa140e -P = aff3a221be196ff4956686f48da35eba008fd310b9d79f5342dabeae08969251932cc01e13256f3597993cab38089b49c5707b3baacfb252c9c2ad8a7a66b10f4172cbc5c29a77f5e5032c6be2968c7921ba06fbc2f83bfccb43167bd15c9f976e297e4136 -C = 60f4082729760837fa9b5a5a67cccc25fc365881f687cd822ab7147a56cba1f24577c520f45fba7e1159217e3c11cc440190a54d7f1f41a662dcb74fbb3878d643b9fb96170b9459167d2d382ae0363c6b087a2f629dda811ea89ea66f0cf15d1fac64b3aedd15354617491e0845081a +K = 7d14bcb4a357a610c4b90474dafab7c3 +P = 2e0a4bd739d821f9f89fb124e2274a9ec67f692789304f2f34f88c95453e14add41ca35c5cc208119998da36742614022a7a0d4ba2f9fd1d153c889640227ce37c0ed3ee6a5adc0b39ba7822868ed99e784701591a76cefb0fddd3ba00eaa12805cae5e57018fa00315162a783912b8158743009d3372f258e87380e558d79ff9cc2e8309185a0f7e6cbea6b6bc13932768bfe6488cc56ad99d9a689d19cc01cb5928645a2034a3b64686d4540cc96f0026e48d4799a37cad394ea4ebbbef36cb555e4cd722bbe0ccabfdf338aed30eac56a9e35b3f95136a4440921f103c9cfe95e2efcd5454fd80ccb9b45fc7228245843180403878596537f174b17bed732076b9aae037b9f682adfbc5c872c87f3dfd6329e3381e1f349503dd3bc38e93616442ed17fd69b2131ef8da3709b6954459533c30c99b93880e164a2bdf5cbcdb14db8685644dd4d5a2b6c585e64b3431e6bf1b3e6184d21c40460e7fddd21a64aab40f127580ec70d9714e94672e4ea50deba36835639aada61c826f5104835f7c6a66955c04899a52aa1b66131e0c473c1c39da2f84ae0ccbd3d31c5c5d2613d833debb8f776683b1620e4aa338921a1cfd9b0519a1fe7d824749a08021ebe51e1e8c905abada65e8ca4cec703d9ea24df975f1be20107f090004211739614618456b98ef8677d8ec7e1ea9744744dd890abc8fd60f2394dc40ddfde9e7895 +C = ba94027f210c13271390670e61433bf156d42196bb2fc5062af4372475ba5787a698cc5880944ade3feba8bb437c4f7ca23eb90b0c9ba4a2f863826e89d7a64827da30e20ca0c78ff36562dfdf7e80d5a37ffdb51b622b0fa5a6ad0bfe64ba115f319fc18b3a3790f14a6fa9711c2b3af5ac49124340cb18bbc2cd9bfb6c74b216812611da2087b1cd8db36e7aca0d33ad6910672d8a15cd52a455d4aa24fbe2fc762803a43d34e9aec1cc2bbad8cca5313ca8c0de713365f902692c9634fea495355885a5edbdc9fc69ca85832ad855e1b02d97e8f47184d5deb7672c0e860c872625c9a368e126216895e92d83b33936f71ae923fb0a79ad94a8f35645b434a7aec3cdbb1eaf051901548b394c994e5043cd037c3027d771dceaa80708c004a7c32a49ff075e9dad341f6fe00951793a04b1acd0b9a5e0935532aa63f90a9310d864b2a9be8ca0722506b8293b5b71998277b48657fb3054bd3d4b58a6c13c030fa628e3d7626ace5e504f0e998ede1a80e32d74688d339b8d5c4136441b2eed8c85917e82f2b35a613831bce0cf34881c198ad36894299c3cb1f443eadce411b84ac48624a49d5769e567c102ea87850d91d4f6c7c04c042f3649fa413025cbcaf27c4a6eb366c2eda90e6386b24ba85ca4c2e5e8c3db85adcb7992e9328aca9358c04ac03b5b2c7e7c4952bee216391faa7f994c6577d696460e4e2977f1067fb3cca6398b04 COUNT = 21 -K = c2be526614ff1a567ecd4e5b2f79d24f -P = aea5ac4559917e5d603b482ed2616ef097a8be7a200179bcb2662f5d6a0e61522e3f349e214f49f447eeeaa3d184881fd66da0c8dcd75290fda7180a6e34f748bb71ce2792fa8952dc3a8584c8bdddf8905a42365e278d1d5b6d6025eb880bf6db3b4c3869 -C = 9ca3e76064a49bd3c5b03a153408be158574bb89ed8b388fa885a5cfb70dfb7772252739e5bce03e92626ec43ed4eaa617032129095c148baaee764e7c7db0fe6f6d39fa29573ed83f7445ae00443f5e6ad011e98d078af8a3b5970965a4ba71cb6610bdb08933e13f4ad25f8eda0fb0 +K = 029c9e3332600b06b256d4c3df569f45 +P = 814ed558d13d1cde6fb2a91f25a5067ef159dfed92796cf5f926748b329bf8ca67ab5a84d3418205984d10249cd2e391d544fb58029ff212b548d37134e2882bc99ff504be4ae892047e79c65e7a603a8c4221c2efe2b9dc0e7540f0c76f40dac50c0b04af5572598c58392167b91544528441723231377da1558c90124ab876cdd4d411b09d81ecce0a29908f212510e12f3d285faeb627ffd9775ef743f196eda0d27372c234376c6a9e49c55728946ba481e31a6ced7ad7e7339a1aa96e62492dbb0f024c278991d3dfc7e410d12f6ab02e5e1461d1416b6046197980321aa2e0d8033a1404b41a329e6d99899ac2b14a9b51ff44846d69f27b58eeffa1479b5cc112d3d34bd7813b30bd4f4e67f836a237cd9775f78c7dd6a56ccb441914f25135d478cd52a0425cfb0be7b0428788450ec8be56fc57a04408fb70368ee64d94da2a3a5b51e8061a923ff413de66b51d64a7825a74df6252d6dd3e64b913ac523dfd87f632046919c77d55eb8b13d19864acd18e92bb487b421b70bbee7cf0f9f8d4c27ae6984f31985a58afc85945f13975873a71ec2d11f92c60849dd019ce2d569dc95630a80b4d0b27891ac1caeb821bfdb236f981a8e95fc8d807a22cd2290506a3702e5643c685a36fcf990c5ffe519b839927dd0eda0b67409894177954c462f87ced62048010accbaf1e422e92fbefde1291850456476eea6191 +C = 60b3c17b908bed1f2ce6a806414baf1f2a23b0eed2b84e2395bcff6860cd9d89b69a2827980bf5b306c4f37ddfa7f51578e280708d42c18916dfdf154efcf0e4fcc06ee7141e153f00257a25b4acf967bc63c6d9d8bd1231c46d7ecad1cdeb6fd46084224b11cee81983e43bc2568ce3c8f5e4952d0c429fe49f3fb957e6e89ff7930aed87b5d326e6970e13912b98fd0de71e312e225dcbb6531f39923ff7e6655c668f34b531a8cbca581188125ebc03e237d5db6fffccabc546b0df2465e3336557a1b818947cb9c7f0943c841f0d3ba1076a53b8320a2d30ef11e270ad7ceae1273d3050ef6a4dd1fbf14e1f11e12fd30a71d36489120571be7d650e31931cc78f4dfc999df3e441627b1ba4d7dc34c362ba03f32b66a773f03c2d9a4565557980fe317ac59d939f7850e888f003c10efa78d4047f4ab8b22b029df13a17150a4f9132c62ff462e8078e39c8da7070ec2a12e69442b718d468c4c5369ea9a2736bc76989de9d29a22fd91a90dd0e5c8f4f9c97f063d1226007c2b76ffec5b723877b725f981e589a24288387c31a0a24a5577493474e227429c83034e7d00fb0f3698b761f169262ea3f5afd123fb1e33aaa4ece1e719ec8da5ece0e2e1be092b80bf4bbcd4924580a7694140b1196ab864b62c7e24ec9f2caccc172f4ad3be63cb835b296e11fbdc8db6168ddae5d3b65e8057c52e9865af36134f343ceb860fb74611b8af8 COUNT = 22 -K = f25403436b26e6325ad9e8222ad6f952 -P = ea921e9f369bb60aa7984ee1c385832c2ec2cbfc409c5c55f91fd0cbde85f5ac448e496596aba1766b62297d3686cd220470dfa5dcfa416f502ff1211b729aaee4491a070aeab8995d813492e76d09c1810728d3c7d8664d1a21f9873f765b6f428b7edc22 -C = 2e9aabe95eccce2f2391d7cacfdb4a255033387c5756406bd5deafba1707d331e7788c8cccf7502500fe5d683dd5421371eda4cc618bb30f402125105642c673b979fa87a2044e3fcc3161873a47ec8c6d0dba8e016a7b15aea8d222e93c64cdb44d7b417ff5dc6818e3d47e9188fde1 +K = 47774e89b9a1b2cae4e1cebed4d6924f +P = 4bc8877ce6e6a684e204dfe66eb75e7f85f47d5779a9c6deb2de63f7d68078afe04fcacad75acc210bfed9070084a98cdeca1856897e6a523013116f93fe3993133ad8742ff2cbb5599336ea6ce5b234c6f7e57e71649a89d397e26426b62de1c9357365d34a8950bb2c60fa2e3ae74913fe1f531cdb79a92cba89af68b83c8ced96ae61d59b100e1338cdf14c997dfb9d5b867b99b8b7ce8110d0c8d83ccb85c0991f4abd4eed7a8778a3fb0da94058600b8f41eda1461a912daa05079d166a8632ae5c7528c3d5109e3e72d594ff2a71ea59c07d25c81384fbe97809dba0ba3b8ce05c1417a4ba64d3f7d65afa159f2ab4895cd2549c78251ef49d0c4b130d9401e41775c78007997ee19d7061fa35c35888a07fdfa9dc82ae92e0d45c06c6e8670fe1e8d64f6db7238bd58bdabdca24d7e6c3882a0a0e4c5ac23aa3f740739d9193c0422cf836e7a1cae19ae9153b3095a18c6a09c053b4719f206fd5c086a9a6cb88661211da4804695203e8a0a7fc119e9bbda49a1476116fc213a63346517ab3bd218ea6e85ac2419c3f9c07288fac9a249f3d5cb566057ae729d43ed6d21ba6975227d18a9a0b7231978f914448147ae8d29672e2c686051b7c8a96aab7f58293d98195828cbd0e283b9ab9f3e9c5b5672c2cffc27ddf4dcb4b1f4731887b01045e83520a61c42839a13218eb1e9803c24ad722e50eb8ff79b83f7587 +C = 26c6551e8bbed6cdefb17454900250da21e90a5afd305345d57becc9d9c1684cf7b223a69312423605258134f0be53eea517455387b5cf72b191a6acf166544c2f22b63a0fcc211aa209b2f8f2973275ddcce9d83205dec53a5060bba9220fd946fd5204bd3542a21db1bd88656a7ac577f2315f0649caac5c09dc389be2fb168d49d1a7810e078c37b7687fccac25d35f71b9dfc651de4d8a750eea05d31e436c5109660e564e623a677c03af7c0c3dafb040022796ceb016d74ad1377f5c79f551d94a1be519b5be238f1a12187b484d0b407aadf4edd9260755b3ce0a63d73d8e90e0cacf9b7d90def6693459f6c2914e872128e2fb4825157ad6a80f0fea94db731c6579b95bc55ad9b4757792bd64b098c4b2e3459050d80ee3a573ade81250a5a31535b8336a442437ec3afa5e8c28d09065945d7753b197a38a2350e533cc95ad29777c6f56f88c32d5614c1aff8f7bda8dafdf211a9120cfeb6e9d633fe50a5d3d2df69a2b908a13e36b567f9979aebecc37871ecb7d55768c1e67786e00869f79268e209fe43dec6d45e3c257a0a8c4b6ad9cfc13653ac0afc04c062f94b31731f7d1b953189588a62f94c8f5a65fff3bc0b0d7fc282b7c2e79711ecc9122979dbcce6f3bc7b9a0177fd5ebabb622c53f3f0e8408cd8697d6c35e3151a619de4cfe28e4831f71b55435035b701be2404109533e806c7a8b2e9014a82a3b733de7dad733 COUNT = 23 -K = cd3298c979411c724fa4f8090addd155 -P = 093e3f8f32d4ee46097ab35964754d72c3f1557a738ac3f7520d14ac25323fe25d2cb833b3744b956f8426009b9dde4abe057d2e8bbc22adc3176839722e741322679d4e10d1cead832ef07bbd4e37df02a1744f924f0826dcae7ad48f0fc3ce944c4e7919 -C = 0808bcc825c97c9e2ea5e994d5c9633990221005d4f7d86bf8b7a02be82d46afb17cbb07173c4a3c45b06a5c78397e5000a496c73d01802be893102285cc1bca7b30bd358eea96ec7033d823d8fd8e39869e7d3dca6f682f522d1d2bb50dd701353fc75bec4263c0394bcabdd2ab5ecd +K = 0ad3563f4998cec1e8f87677209571e6 +P = 61907215ca4ff7e5c0ed7de539ca0b9038b865b3c812eebf9962b370be44fdb084891324d838df9481b042e31c986d94672efeacea0b558def8587db93c3fd0c631067aadb28a4356cb31618b014a2bda7931ec05b0b2800c07e67682672f89a6f3cd0e577f55140a0d96ce673c57581a75d632edd4c09fa32afb63481b84f7575f61d4653b65b8fea75c0531433bba153015469e09355e4b5da8bc342ab8525eb5ed25d94fc5593c682c1abe425af2bd5c02788e137b56e5bbe82e8568c806e55c95cf7771381e7d52f4bd36080714b3410498c7197dcccc4e20c4e5d8e75fbc4f32a19866c9ffe1cc3fa50ae7561b3f5e21353c3b8279af000fd440936eb7507abfb75ede6dfb23664b51386b7b362859918c44a6547de65ff612502daca01dbeb60d88487bc2ba2355f1b4fd7297f2ffa783d649425a242f4319fcd5847590411aa4083e0bacdf8aa7f8318cf4d3ee75e9f8120c6715dd3ae28d2292047aa3292629123885ee5a780c461b75aa65d85787ccf1fe1dcb32da1cd38127fb6cc5b3391724973796b265fffbb3add4653b45bfa30c02e5c341204c861413a91d6970b0c8ff657ceaa23a613e47ef70c6d39ada0402d8b1f0c45ca8fbb6ff2ac05e075b8085bf4eb0cd0b2975cc890c12f48e67bb6a434e32ac7daef3a00bffab3d265af7f8d46e4a130d8f453a4418d44a6299b634ce8f199caaaabe141d0aded +C = 20f5d0ec83a8aadcc4b4715cbca0e1b17eb264344c87d25a359f020f503aa9b168a99ce2c538b40b37badd817db4fc1d807ea458d69abd2cdac1eda22c84f232a2353da5b7d342b8ff85a765a13393d6cf4b3895008c7c407aaf381c99f2480ff5914ec2437d9e42a8f40c280e5d9f3b9c6d62da348be5616e3debcf993c217a898a9a0487c2de6595ae5ff48ed08598d49dbab3d4e336f3391fabcc08934a9c65c9afdde8d59d69b9d067a43898789aff6deae28a86c9321496ba8ff39335cbc521141baf42cb23e1fc35cff31e3caa17b142d4a0a0b954c9fb5f90b9c00fa471e152fadfd6c7ce29d63583acb0b261fae34908e3a674d554f295a5c3c0e7b1488f2cf46d1f6937416fa289a52e3b20ff159808152e6054f8ada048369c5c58aefaff6fb01ce58290e9cdbc2d3880b229351d6cca5edda6a01f1d2b7bad0ba745fd3b6b48a50d9e627358564b7eaa8d4a33b57647639d5962e7db6da0cf1684adf0449f79ec4efaafee709e48788faabc54f219c3818dfbb60bf40feeb6d4e3cd80dcc59d6b5e9b1ba083926d8d991bfd0010045618d9cad1f3d84d146507aac5be3f1c73b5b146422d39035f81d52f43effae4ed97deb6e3052e1a3dc3e67710e5af183fc7e4091b44a9bf93659149afabaae495595f7cee58c5d291f61b17bcda5050e9687b634c088d66b02eadd50c26fe3589029109a3e07d77f364c5029d52dfc840603ba1 COUNT = 24 -K = 10a034d3ab567ac2944569fc1b9f59d1 -P = 9cd787a870a224743b43c63e51daabb9fb6f82f2a2d8ea8eae09cc71ce32487f4f9e9c89ef6d1f943d92e01e5fdbfc3d64d875313c28a2162e1eae9b3c5fcb5a93b911c1b847e185c42bbfef32ad4787a0ee6ebba119c1992998bfdcda42b89cded4b3b9d9 -C = e687280d5c4e01252bcd70e106b2b2f465e2e11de0a41e880d6b7b8b2c3549cfd45056fde8b72fa5c137d2313e0a6b1d0b5730157b3b7a8bc081eff63529ff7825e4303b5713de1c86a42e5f421f767dfd70a62df54d1fd1d10f97232c508b8d67ebc4ee05afb22445de702aec02d794 +K = 801a16628326a90fb7a8599ee005314e +P = b858dc2324c55427a054c8ea866308ed77d70758462806936bb69120c0cd3fb6802370d30d9beca79956a032661fe7bd40ec3c5d7de107038bbace7fe603dc6f2ea7044501d85c8cdad9c628b172aeb5bab2b4cb3dcbc8e3d3cb9ba373ced0e2fcdf14d6d22aed18baef726ec6061b7a22e3f49a1c6dc12200e2f85591caefb0650df28b5adf96eea1d8d9be35e2758617e5f5aef8667a08978424c8a686e15af4b5119563411ed70d7e77904a641ad4cedc34eac5c298329e7cf064696117e923e48c237d0703ca5a74f8cbba5fe934aa0bcdc69552df3e643881a6fa9120b55e05af3bf9942485f1f30627e9ba69def09cb8dd80156029bc538f443bf05058fb396480762ffb7251879899aca496f5e7a9f5d7a02bac2c2846e2d6c0c0eb9646b03e57fbc5ac6dba5e8bb68e9e2f2241cb920a54d1da8ec7d7d677d8022358f2d02e4d71a6c0b5b71a3c290a340b30b0ab640bc206eb2115e544a5dc8088f1eaff8e0c6380ef2b7b79cac679d04687da0a6238c39da98361ef6d2a7f9555048a4474642335a6a892f93c83bfcd8d5ac889bdaa2ad9f7c886b8f40b164b2a856c523b731d3fb1ba91463bd6e7e17cd761c6292484107b7232bf059c886b0083ef252c8095d51ace7835f8af45ab69b596cbd5139bb5b0f44ed4cb250fdc584bc1113a4060ff9b819dc04a741dc99075bbd53a35e622d03f7d1ded5aa753bd5b +C = 8ae8ae019f76e4b8aec16b2111b419e47895d8021d8f6e2d5c9f118509041d568b07d36e86373be44c3abba0a88262cc1b570fba21659a294a88f27b35ab71f2277e5444eecd14e3ca8c21b26fda0342d3315be8a0297224fe4977201d864ea46773049ea9f0fd3e17a2d362f941dc0e2bd45629504a640ac52b5d5ddbb80d6eb9aa165d35d13ef83cf5c60338b41ee11355c5c7ee540e7e0548338fce4d14158e295afb90c7548f7af1e1c14748ed0dbf88d5f2fabdec51a188983ca2acdf4584501701b58310519d75a6e2c81532acbd8542c8d4dd699099976d71d05cba31b867341cfa9cfa2a8dedc92aff320065d3c627f7a88f213f49744d8c9dea3e34db3b37c524f758101150f7feaf6024307ee1341337c7455a54d1fe8501696531672fff960d631f2fef048aed7331a323524033fe0d7295d2bb55789e20d0211b9a4a075c304f486f7770b6657d2cd890f2b2fb1a541c9767cf068101a7f6e842c0e0cb2c89e0733ad8a1f68fac4f5ab9b2d46d85dee33d6befecc3d9a51cefc931b0704df221712223489fd24d81af2875b5f5d2995e4471f0647597452b23aea9d8cc184408c58664eb26671b911bc2d383af54ff415182bf799c7ec81d3d322c7f62c320e26b4307569452320b923e6f192543432459e1621633ae16ea7f059781f3c0e22efd90655ecd95a670f6c3acc129b1d34eca916cbe089ccc593507bdacdc09fff4af1f COUNT = 25 -K = abdc0e9df1f24c01297d86a82da5fe04 -P = eb99c774695fa6878b63169bcaa09840c4a2121fd6774f46e2f8a20549e725c643b8d84740170dadf16b8bfd781aea6a5f0fb082e5e8bddf6a3efea800ffbbdefdd207529749147695a06c3600c29aae0421e71b68329046958a2efbe010e212e11f8cd573 -C = c391d8ef80476ac2146ce4f8400907bb80a1d0f87d04a4f14d68d06103409b0fbe68e799e41db136e353adc99fd287cbe7636a468e8682bdc1aea3f1153b552eb0e9c1c3a1ad2254af00bab4749e908c9e26c257f72734a455accb3e9d3531317965c83f978088020cb2c6d5112aeaa2 +K = c507bb431e226ab367650726d4527464 +P = 56eef786a90915588b1114c91d693ae0fc2a5dca1a7d9a349931ca24728f0cff9c8edea88946a4b3dc957fe27f96e6692741d164119a3681707e79b1cda79e09a45310ac4ba1474879e4eeed9f01d9192850d556e3505f570b8baa1065979195b2955b35509e334b2ac31c513958d8f9781c5eb8e750e2135e7aece50c1d6f076bd5de1dad7f2df060e653a588a9781b46186387f3b35b2521842062528c8510e9ced1f8bdb84aff4b59dc6f1b08f32b38e39a8d985221256d257bafc5b982393b6a55b07ea080c61a7d15e4e6dd3abfe41811634710c4a15bccf1e0dc24b73afe8fd8a4b29a9590bde5208153bbc85bb0ecf215f29b58f27cb80cf311dcfdff4c90a7bb0c6beb070dce00b5fc23815c60c6530c4d0a85f0a8e463a34fb8268b1cb7afad599ae926c1dd9c3d61d93ea06b17d832f21903627679b1b9bfd74de978368affa82b86e0c87fa8b8a1d439078bc834f8f096715a44663e6bbbbfaafb1e259509169eeb7c6978a7326c225106f8ec89a9181e4e69c11e884dd8f1c9805e8a1ec5e9b5f8074238629883374862686c0222ac2fb13575a523496c49c1c05aabddb7f81dfc2399ad22ace7bc8f89eaae66aed4b3ffd4288aa8888fbaeb007b2c69ee7e29eb88342b5e26c013c993bb25449ce2c1736fb4e36624d6db04ed65daa98b5611fc7570435930ceca2930aac00374159b55c57ca892f274a9ee0d +C = f5cb447a51c0f2d6adb4a450e42b972ddc508c616017ea9715141791a3cb7ac6f369a9d7547140d58f0dfcb838ab9919b96a2b8717e8aafcb2e5246a802f938ba06d7e5b5bb32ff02e2724a2d48815893657c66b80138cf38b89940674814f5c2d398c40bbd5c0ac64885a9fb0e6196d0092e9390cc4ff8dfc7dd793ef69bd6f2052bf4b554c98ce3ff660fe60440f82528358c5421ffa38197bf879831b135e88a32f3d5323266aa7daa64b4b35bba342e029cd2ba19ba5f8801827d32a0e72d1375d21233d7d9aabb4836bd0d09c6e843df3902268c61bf8ea394c0b85c18cd49c1e2bd4e8e52e65c9cb1155289cdf2eee5b74fcc75a7137b3f3520e04722e39f01f8821876d1c6f0bc48ecd96a5df18bf595fbd33c986fb5d3e885e062c35bb4ec6357855c126af153c27d3cce50ec448991e2621fa2f4de01e228d05f04b6487c8b350aa1e091cd48d36deaaafecd31c02b90d73a60fc88b4107d4aa06408494470f64bdb1809954acea62a04250cd9fcac3225349a01204a26696601c901524022dbf8aa11bdc4a8690940f52c561e5d56c8b9f219e8d45fa267cd6ab2e264fe3a237644940db93532e11dd18607444a373d91f7eb2bceb6d76263ffb08dee61a33fed1a08aecd90378cc0bad512f562492b2e7f117bee0be720ce64875de94bcdb6ac968d7d6dae62770941ab8e85070b904c6b89c549c45d9d04fdbdcfef90da43a932327 COUNT = 26 -K = 8effd300ffc0e00f78d072c0bbfcab9f -P = f2f51681d7e1d28f90df1956686a9151eb913fd32f95c5e1654449fbb60f6acb0389098d3b01c806e00ee20bfca9457ea0ec5c41d367b45966f620dbb8da741d72d0043850c4113fcf7285fac527fe15cc173265c7eaed488955403e4d02afb3b7cfc5a03d -C = e87f571f0adaee63a50635a538777e191409e8b3a1404e842b3e8802a40e7784a9f04a5d2c0def0812e2767e0639063515f71c32832991f17c6d2d90cf25bd03d74928123809c18f97915a6c43c1359d2012eab40be2fe4b8ca8770f3da08c946851079b6eafb9dc58ba239f3ab19a4f +K = 16bc63abeb54ad8a18e2212d907055ab +P = 4b48851e002d4a69502803088d15ceb781a920f8fc805035b066aa7fe39deb3d3c1c43269328a09ef298bc9daff25216df747492e37c7a62e48bfc9358872a5974d30cbbac4150973e0599f59d12dfcbe58a659eb3859a6585d00e3fd78b64ec0421e2b51213c9cc0135d1bd6dfa4efa7492098d3dd8f0a8fb7019566c79d88ef675b4d33e213dc9cdea27baa664d7f820f691f9517dd49863874865348695622694e45c8f29a9d0174161ddca63e5ef6f05d0fa6cbc83b1b11450b78a40e32b5c0ac5c57ff41949ac8d7e213e0ef6856b726a077f55616bb6b98a3baf1de3a53a264dbca6b691dd23368cda164c1cd2eab8aa055c6053483148784e6fc0ad79ae09e880552d9c9f9f1ea5d4a8312fe78117069e30181a7da909fe0f45b571c5d8708399f693717048e807f49d0bd9ce77637a12c4ea0260adcf77d2799f3f4f19efcfc8c3c264ca4d3f844ee8c3f3c29f93f3e1b9c077f6f894a1ebe4b79816ec91a930fad4841a086fe00837b300f08120e7c9209a93c6eebfb77849ea037a16098aecac7e60bd3224097b5ffaaa1c8cf447bb092840a046eb1f850b9874935ee9e612bf3f58ffd448be170f87e31e9e65859cbd4ddb47ba0c40ae7edc3365f862c3854a7664b927de17861c86276b23c6e10e5ac9afb1ec888c263c766f6602fcd3c9c0b958c6ef3192bf5114c0f5867154568fc015a7565aa25135a01f95 +C = a927236d81a6d2dd4ad1da33ccb78f604386c6190bc57fc318eac99aa711aec26e637804c647a63941bbd0f27c9ed7f57740e745696ada2a4a5e00e447f7f03a96ef296be54598b779f406f0ac2f308f0b2aa7deeb4c63133d1c671ece549c9437a9d7b5fb899778613b7375fe3ac179287ec68cdb79e649e20c68527d5b7b0f9269b9c40202d051b7833c6bedeb7d8273763e2c351126a4e99d55fa4d56d53064e5c440b4a8412cc94743221a2b733ebba0284a1391191331e023bd5da3b2701d40033d78f1d83ddbc6782da1e19fcc6c3f9c7b25252d98e8c204343b035bf5fe4f4645c2776efd374d29b7f1963a83ac4caf04525353bf14b13aa4216df6268ae2e66f013d51a6f04e7c497674aaaf26e06da0d600c6218a22de54a252bffc6117897b689a1c0612f75a46b1b7ee22b0c726a79be2fc8d3d07c755617c9c2ebecd58958327e6d8b1f7e9b9606da60795234f5a5c01ddd25b1e78e1cfc6ccbb9515abc9baf461bb6c99c0b28af8b8b5b0ecd2ac23a2862697648e9026750a6a5853a1f78af7540053073c9cc10d45f6f872734f148344e6866e331e55d11c9caa0fc2fb6b0eb7378a40dc8cc75bd58f401c26a1d261a2dd6d84003a32b6ef46904a992ad283e5d7ffad51bd1d02d921f8fd183d420428342fa0660a9b019a59052fe37b4a5e52cc07f844026f297dad4ce0c8c86e71ef38f0c5b38a898ae237c92684c07519d2bb COUNT = 27 -K = 4fbe139818535206ae1c9ac2a59b47cf -P = 8c5a7d20b1524260b3aa4cf8fbdbbf373d300962d72e7b8da894850471b054a52b75079840d3b9684463d94bbac5e088427a0f78451c01894124e5fac505e9d27b8bc5b0bd2f4a1d9dd87de1bbf84367b3df095f29106f863e8ba24e0f3af2a20434a33d7a -C = 3758d91db52a2ea1d046c5876d911b71aa5b5e2e7c817408fd2bfa9df361d91e73cc8a554386f55a63b3e1aa5bd26763abf5f7984f33cef21df044a3c198246b660de5ca0269398f392a93bee562408c0623242558edd5a38cfd535d8d9eaf68be499df4100a3aca44d8f8bcacc9560f +K = 5e84207ec459593888799a14e4e1f2f0 +P = 49a50000f1bc289393df3efa27835ef4918c5c92abea77ed028a1e9c3d21dcc68cdd2243ba7632a0001772f21c14c540e841799eefeb7231957c55321506c5b5ff8ed6a7842251500b9dccde792d7ae1a37d632624bef4038755343b34896cbf1da831593ab290157d33f1ef9984ef8f37cb73f3bf00e9c1246fd66f8decfd43ec0b6d075270a8eae85a75c6641f656d6a693d135d79764baa2ac87e8dded672882618259f711ffaf059211482164b16bcb0b3f08c248c3681d5b879cd887b4e682dc3ebcbc05bc20e33ef0da8f606bb9129b7159b05a62de83b5bb6eed43f1bfe869548eb303543c36c8c019ac77d1c5f0fbbdf4722cffd651eca801cebbb33cea8f77b2374b2215670f8a4875d2a5ad0ad79f817cec27867a3c64fdaaeb99d4bd8f8c0ad49aa66bfb27660d244d8995cf9e76766d72f4933d9c4c3c40efa2c442c0ddbaca3ba0041b1b5ffbe9672412b6021cf3df7f08edd6d7cff16165cc9495c6446e8e19763e624e5f55badc62022b7ba44bc1ecd93b287be3a260efe3bd3609f299b8128455daa2b87ff6ace5b055d64219161889d6eafd48fcf47a88d5b88d72ddb4d83b8c9c7048dd26844d713419b64fd0b97418b78090ab683f769648154481507ec0b75653d20303925019fdfa57425ad4ab206dba08ebdf5f522720356a4cbe3fc072aa7a41bdbb114b75184b1e990165823395e940a43587fe3 +C = 33f5588dabf9797c1b4c14315783af814a87f78c501ff52523f98a5b96e2fdddac111f44adc8f72716c6fcd3d7a70e92706137ee0df3caa234c82e77455a8be99567acd71deb5653a1ce2efef3ac11e03ddfd7bf3f8261b1fe7af5f3c2adfb73c7593f7885a97c35f17b643f6c4dd9efeb1ef24c7a0d3aff4530b95972db2a9684297c629a18da74eb1189a9d232629e70878ff0e206e244474abfb22e441185f4a7777fd196d2c15edc43c8ce73d92048452de87dc1bc192448fdbd92e500fb444a95f821d993ed06762a1e20788874dd02b898e307338e26ec1ba44efe53f8e1983734d86b7c150debc2090d87f94847583b11c51ffa36b7e4200194cdeb4bd125c4233efcce8546cc14637e6811289e086a2fe1a6b354d16d9219d6b6f2c0f62e776ccf8366ee2803ffdf660d3dffec45f2f1050b5277abdd7356112df0d037f6beb9f8ab6bb2d8097c13ef5012ec13c689db75af35c3b4810d5c886e3926f9624d79b9570f99686d0bef739c58984b24c5044c62fbf3df992312b6c5f2d003b10a6faf74a526bfdcbbe454f0a4c264b119ebadbcb5bd576de7d1e99d7a047b74fffc3019a12f209476cc9788bd294c15c147150f4b94cf9d29a3d19995ec619f5f1d41bae49208be021d6a9f44b5103327586153ead7fa47998da69a8e28a14064618fc746a6265976fe786dfe603c3d6da373bb828125cf6be29487efab7d72ec29aae19d60 COUNT = 28 -K = 3139dc22f440c8e442adf78453776596 -P = 3b938d5e35828d66fd252fa36a80027680a7681218cad26a464e57178047bd890b800ed741f43a7b6f6e4ed6b892ab836eee779f5e6b1ce50c23375d279adc27c013376a5ed47cf752952763031ed2d99974aca04bea3574f5c9ac0f8a5596e6404c2aa1da -C = 9e501aca9e556cef0a61ebbab95d9f4e54f56612f2dbbd4ca401bc22b8efb596cee3052da97e7523f4c5f6dbe07fdbd2c75225f73f0c4c176b8b63a0f55143c4b97abe0eac5a8038b346920e76e613bcc096a6b016ec5b96a0a3d84fd3c1ab3804fbbde2a666c168e490ee417dd61bec +K = 3b4e1521ed72544620d52913ab72619f +P = f42c39c696f4a6afa8f6c2272b900cf0190075bd7236832563f0a46ae1f7e5031e0fb21b087c8b52bf9f74d63c81f1740a77652fe71a69019c0306e77d6186ec0ca38b1b3c13e37dc6b51e27e0becee77fad25e62f078432f5fc2b162d3116a821f5fa8e8ebd958f27d59c2c83a6a3a42f1debeefbc89f0bc5415b710aab0e2ad418d202ad172dc90e6ab92b6631fac540d4d787c8f7c257cea5ab57c694f5fb8cb92e67b875254221b3586c1441e85c99739e79ebbec46d75990373925f67f005cd19f998e097869a3e6c9ba4bd2f07f41435701121bd6e5c9718f9fdad60e918f65a43d8fee5e07e7aea20b652898d07169458e5a9977eaeb85e028a6e765284b76e850cea2203688d084fb0623e25b750a7b5e395863e5b95f58494b990fdcb94bbdda97f03c83faa9a6218f58d42b9930a46ae928f4efbe527f4d9107e9d382f2ff0c4516dcbded1de3d01c4a3f957a83274168db831d963fbeebeab237750f01d81b0337c2b50291b1a8ac6706fdb2c86cc4c8d3a96b0fcb3ff17b577c5566c568c6e214f9a0866fc3b821b585d52956d53ba39662fd9e395eee0c075970797840f26205d0f463963dce1c986b6882cd04bd660761f68d560aa16c7059a6f4f213207dff7d9d9ff80aad92276ca84d13c329461bdce8ed1d9714825cdad5fe8474d7b76fa2d1cd19e8ba1aee867a8bbbcf7ec68d92bd33c2648e0bd7ea5 +C = fe1a163d9b2255edb57ea4a07d20405fed29106f845ca73bcb8d36f09611465c49492e5341d67222588deb9da7104feacb2598281708efffd10bc7f95564b66504732078b12cc11a4826b4714651682efd33f36bd837e7176187fc0d705bbe04192661da3a476adecc26c82a14828a2887565adfcbf3f49ca467176ce2aa260a2eeba99c14727229b49ebd01cf1e0a1d22dedb37e63645ae4fe699ac2b7627aecf8a4365d54b4b8b6eda6639445a60f07552c59e316eb2b4da4520253e600976a626428c8824d9444530bd75d1a2403a13e9d09098b8762ba05c486f425df6e58457f7734a27413cf1bf1ff0372599327a3741d04e5fdccbf9abdab5239dcc194755ceeacaa4f384cd5b56579d8357f4b3d1dc53b5870d80064c153b742c03b8a3c0fbaf1bfc2d5829e9a5d7816e69d89f16d2ccdb97190671d7f1308b6c5ebd8ed0a0f96b9f54d5cf2a7ead8b1a31eb53ba59cc840d861b9a0164239aaae969ad0955ef8f9e6980c8e8fb52889bf969a464bd706d486363738f4392917463ec4e247fec7fedd28d8bc2c3d633586f6a9e679826dc3715e4d6fa3c2da2414358cffd44afa06e9c1d9387e0279eea7f16584ae59553c743e97a0302684c4c39c7885a71115a8dc25c0a4d5bac5a2dfb73a15fe0b31363233c8cbfbfd179eaca23510a56e738911bd89830d76de8d49e2fcdceb1fef6f1da58e0afc193ddf2a8e259615a7a0294c0d2 COUNT = 29 -K = b03801fc36a01d46988bbcbc143356f9 -P = 8d482f9b513a9614edca74ac762de2886891ed16fa25db9ebbef32ba22083279c6a5d9f6bb15146a8f69e30fca0cfe85e85f52f36e1f25eaa090c153c44005d1a2d98d3a0bce556b174b5be93758e9264b52ddee0a5e6083c26cb73b43b007dff405e16d8a -C = 1602e29fb204c66115fea8e84078c9a7ba58683056b1f5731f15730dbc17ff28af162391cf59d004ca273de7d9703d05192428e80217929dafa568b13e79ed13bbae571889dcf037ad6f6dc4be3f6151c4bea7ce02fd3f81e9cd43680caee513490b23c879dbfee39e0eed5c27e6ff64 +K = 3e75b80bfff6d92fd3f450b5517920c8 +P = 5f73bccd7ecc339471d4dd5cf49c7843552c0221406867f5d15b905e63a2817ac24879d4f7359a556f7315cab0220d742915cf13dc36f93d86717fcfb8da6b85c1784e2823cdad08c871c22578982c8b68cf22a862db515c474eab76b9cb2d5dfd04a739d22507cec649e41aafad3ac5c3827feadcb9c32ea9d92f09589f3e7d250dc418e3c51d2becc06f3fcbf0dd5ea322ecd4727f20a177188e0ec86edeb4c2bce788a6bf3acd4218d922f76a4f2f6403fc081c2fa3100747bdde5ad7ade73ef3313bcad5fd3fd163dca017b341fb9ec926a33deb700800254a1ec74da9de291760bacaaf4d85797f92869e8b499f19198d5846d0bf9d379ed86126f857cddb5ed11612742f5fa19a5f866d47774a42933caf1e1729f34b8c6e5a679cdb631483a8de2bffbace6f494284f3467003cca6c7f8267dc83a52c42f1ac5d27c95e84e57b3e72c201e4d897c1d0222bea31f27c3b3a3336994aab3784b2b7af6ad4c4bb189689f9d631770e8244e735a908b591ea503897cb4a9e179c0aa882570dba4a23a33b6a73a17ebc25137f64a36d96d9d910d55f98a455bc025688aae162b1f778a10a30d3519b668ce7267ebaa9813e2cc3a7bd33b7defda1476854bb193df9b6550e105d3a84e5cfdc473c59b10a6a5cd3d32e888bb3b6f4b2ae7bb9fb8efab4ceda46d8f8e4ecd61d38de75af334d10e0cebdc03cfa0af55bfd38853 +C = abf84bf71f867fe1e341cebb11fda0c65cbc5bf5c1ce2e0add8cb4716d14259d486dc2d62ff3c89b952ffbdc8ee6717c2decbeca5407f33cd5a2d470ec783017792bdc95e9cc090be61185af50d82e5645e2ac01702f809edeafc79944f94a4ffb3567c29c0f3322d56d195d5795a9ea5d31998f6c6e9db00f3068e82420eafc574e6099d30213092b39ecb2706b07c6a7d74b412d04ba5101f29b88c385d80b7b18d9f244d09e5c7df8aa3439c1935d7c1198e7c8785cc02a359e47aa6a6270a1cc78de7c722eacbfd34834b2edaa5f938555e2f2b6a113838ae3d0698bae61b9ab4c0c11860c814ec1c789b9d9f76a12154a467dade9c52580cdd2e3f9cf4b221347b1bcd290b20059a0efbd946169f78009531e1fd54c517ddec275d82c3d16e16e000a29272bc5ea49dac1a1724846c1c1a34eb104c028a7ec25d5440acbe52b634260816e871d7d3704315541db1d254eb351ff09b98f09507f18fb3c68b760edbf6ea761f467d86d90a8425ca533b753a2bc2c65f45195b2c12e75b8744703b94b78d85fdf534ff10473e57c69065eed86c15a0663bf816f44cd2cae86b140397411e53f587344083d4fd8938ca4d0e319c413687e036df4e2812d82e5c19f12f8bc3df86d06bb04e648c6eb1081391561e95ed3ef7c11c0ccced85a8777f78b72b144fe19431d05c472950cb46433621c8267112e6a25ab52ff0907404627dc0562bb40ae COUNT = 30 -K = 83bac2c90f81b80a8d17cea3ffb5f750 -P = 38e2420b3b3b3776a37aa05a1dfbdd3e67e2fc550221790715b07c2766a2e5217abe26a27c86e5c11e0dbe3e7918f807cc6831a8ab28f441c279878757d990a1b3bde86deff4689a4ba484aec1dcba3d2d6715294bfbe745056620383df3393dacc9cfb758 -C = ea0561473e1f22b3534761d4f3574964d8f2d26b9ec1edc03fa9d07186ba3ea19f622c6e0a0081ed9125104b6819b7d55839ecc96eb8c986f1c79e03408c991145c7bc0acf26758bf33be3821d6b6c9f428ecbc338b524b6512cfffc4e3cb8437bc9ed46db4675f80fcbc8feb4fe9bdd +K = 47ab98838e08a0b6b9fc3105dc81dc6e +P = 3d73124f2ac56e2b084bee0727d991845c893785ebb01f76bf579e26f10b28d463c53d8d13d32f37c0bf96f875210de64287200ac84019be648d837d5bde799f7356acfb09e8e18f4de46ad7be35b449b0cd572eda1602b03f7304d4f100d3499127056102bad94f78f7a3f449857d5fb221461bfb8ea3ee91581ef3e38ec03263a5e85c5fe0540be316b859dc13215cbbcfd02e2aba55b14586d9b88775ca8b2574873984d653036c779a6ddc3c68125a0985834d6f3f347b2d5217105fd5332089b4f85a1071cd013006ae86edca6a8777a8d035707934f178466b0cae9f25f018c578cee1fd07f9f52da29f3087d1434da1d37bd2f6add0963b2f67c621e59af12c3a5669e07c7fd3c5983dcbc8d653c8e3c6990a8f07e7adc2be141057943437e4b8a07df8b742a64c5ea68450777b9591d398269d22aab8d84470f9917fbda87459eb65621d0bcf84889962efc97a93b92a9b6aedc2fd5cf7af9df78310ddf5d61144e70d7eee99ed6554e5c15559837e448f325e3a64c485b576bad1c5c946f94853da9ee51d70cb7727b9804c6c5d280a0d3dd85fb47f96b5e4ac37e57aa8c5e995a27814ff26c9114bf11e4a56840c3408f6cb443a2ce9ff57f6316701c581752479b4c2bd71c199d1932939002035e62f501c02e1fad10aabd97ef41b0058eefaede686b59df36b1c4f49b8ffb6795f134ac7ab69a8bb212fb60750 +C = eb275f08af6f13b96c39b0bb827c72d948273557378d7fdb9da10ec8734a767e629e342f9730af57e0be5e59f299f9b3116c063d864c242952b3d13f40d051896f755b54f4724842ad8ac327745507822d255627acdc8829c75d2326c2263a40a445087b2f503bf2a1bb6797dd20ca58dfd2b2335087fe17a37a78378f258ac231d1b196931c57c6e3fa3e3d38c6fcf9947fe7363d8141fc1da4e352359ebce45013583dd28d385e501e8a196f95b7ec0a1c9ee62a76608308c56e7559481908a42b3d0ca66e18a3d133bfd9a47ae16c35102a2f034fc2aa3f451b2a047a491107e93525d9886882ca8f69be6df8128fc8734978117c18825b06535120db89b9e1b210d52bbd17a0dbe5de545e85cc95ba95713ca61977a09eb747eca6883792409af39744a73ec26b37b848150ce7ab48a3cc7ce5bacbf2b63cd5ec706550ed9e30c8ca85be3b0c15238b3bf23d2a3a868d027f2119e5ee3c2ae537156c3807d08f64432ae67672a34c9da75a3b35191994fc26a5416f39f3c6b5ac47b1e49854dfec6cb6c138930096b7e33f143f107b356865026471c8d130a59b4ca8d6d80fcb539f9da701f8eccca2a65a02db9513b060316c6c649722b19751b0b6ba701442cb4634a8203365e30a7c0a7050c20418ce327ba36149b36afbce068bc5daf4946a58cbb540953ede748ff0ea263d2bd81a6a63d017485555cf8480402c1102d68ee4cf3a567a COUNT = 31 -K = a13977c835de5f98ff32a1397b15aa34 -P = ebfff0cbcf566751cd6f8175afd7b6aa7423ebc432cc2a4562ea2fc6dbfcc1d1e006cde0c53e53b8699101c62f635f3dcf4740d68cd74e94160ec719948f178abdff4a398edb20e06750dd511c3371f62be497a42ff8de2d4820da17f8d3c029a0a0f9b4dd -C = 90f8db81e5ec2a5836250bdad59e0b66d4eb0c7992cd8b956b64e49876e076d1edaa6dfa660b1d6112b37926b077dd655f27bcceda5bd610b1a2bc56c3e730054cc300b176b4fac7d71916bbe2d95b348463dc1a55937ea03c837476a17a738e60ca9c51ab933ac2a7eba87113c447c2 +K = 6bb66c4d8b4ec18e2db67037c066844d +P = dce1bb3b06b12e519d6537fe7a9efa33d6668fa5f45a34e08d3240e1b1f5d6063136ee30eb855cea2f2a5954137a7b6ce9212df870a5b58230a92d0ec6c9455161bc3fe9fa0d95177d28211efd307608e67cc2ce498e86eb94935de77c287fdda3b7ec32c49eb2e62b7986f06bfbd4bfdae23ea3859c14d438b394d2f45c1279aadc040d38a453a2ff81e932693e433d7b22362faee745c168082fe5d4523a431921a91ff9b4d9e76c13c88ce6dc448c9b9b97ac252cc850c6afab13d1924b4827fe0289385c42039b0845ab5f703426483b9cb3840e9ea977deba510b725f49a46c045cb17f9a0023c88e7b3d6dad341bdfa48148e143f3f737a8bf49cc77c705a08afb88a09ea585faad6212e7f9d715f51104beacbcb470d2dac2bc96f6f1523b541ee45349b76aaf6f50ee66f434da71b5f3b2355517c62e28b8a7cf0ddb4ec80136e830169b8344348d4dd16c5e3071bccbf27cb637f83d5296f367017795d58fbd73022b935dcd5b132f0ee56b5038e5c9fb677660c4a6a75ce7d0f1251cf867ade1217090f3cc142a076b5d54494d1d11b533e60ad370d6e77615535ea417da3150250976ee46b6d2f14977aa8f3e18eb29237b866bc7da5d2fadcfd46a14d2d4d0fe54b9271e7d13172905fecb3f3efff0d51973689640ad8a95d4615a13434615a281ee2947f7caf28948a61e2ea0b1e7a8e1c9577fec8b894144c1 +C = 68df7f47d84f4eaa4c84cd532842b2c7d349246ff071b8d71aa65efc81f8f2caae5db848c4395c8f0978d19c0530ba27e7268552b8ab4bec44bf4ce19af9d58596071d9c4a46a6d0a288dce53db9aee1c4b9156b52627702ac626dd64de3f5fdb83fd1c91c14ca8219872690b3a7f6993cb4349de356f8c976601f9ce4156492e6d771d026d336686559601394f28c82379d0dc53cf4e753d2c8329a4e1c461bba64e57b5bcb56d231ae6c11432fc3406a3676f5b40567c4d8539866261cde8a7efb409549db70c7064efb7abb63101775e88280c0c1e511f3de7d6ba2bb803c57b6d21359de61f86c8ffae7a66280d99094e657170f10a49dd57ff9a6cf3e36ac2e2f2a604df87564d1baa34ff65790daa08fd9943df4a1dfbbf98d5b6153ca984ca5e6b180b4befe8c1db763837129485e6b65b806bca057188bb4f302df956bcc32d151e0ceda440189ba46789cb487a9b11b907b7929ab984b86c31fa3500c57a543be21f8e7d54fe6ce8b77a6670b5a4cfefc7893cfc98ded9bc463b829eabc06f05c1a4bd6af81ecfd8ab976e9016512e8f7774f1c0e766b0783beeae8eea791cc8e06aab7c48c2941ff4f1f9de4ee003d88e808218f70955fc1b25987e68929c58f56277dffe9d57f519ad8771deb6c291ff1b858f806a5121a9dfec134750cc172144de00053ecbd4ca80cef0acd2acae5b06811ed783425bdb4a67356ccc89b64d6bfab COUNT = 32 -K = 828cba37859903059fe2c2b2e3731d32 -P = 67a17e47a22813889ea65d362eb05f552091183984bb1152529ce00ee62611364270c8d9ef885e181b1c2538d026d815c4fad6da4ee4eca291e993b5f0cd5156e8e863a97894aaac7adb406ca666d8aa3f3effe6f3e66a7aa9db45ba9ddd80ad60b2d26e7d -C = 775902439e748e6fab42b3c56dd39e1fec9834a65f224d0d6aca1767de8135278f39133e6ca7ee9daeda8430950dcfe8ff76f5483e2aa045bd3135114d13e479579806aa7de687b9945d8555f9334af526f3746145935b8b0917e03d1cedbb06d6e4d6b698c2340c559b7d8362c6e739 +K = 877b26fe10647aed46143f87dadbbca7 +P = fdc0784927e3dd6014172290b0426cfd904b4e3a6ac8e623836908a417300a43a8ced17b144e739d3b81725c9d5ef4653cd165adacfde6afed55a2cdb9ffa0ecedbf299ee5f6b94297273d848bd392bc2d8d7f7f62f0e374c7694b2a4ca073fc3ce410fba55ab720fc1233cb460220472545148208fc70f266ce605bbf8d1745e19688e62b05c7a11c4daeb88592dba388a93649c5508dd16f572d5e5602504cf69a2818724a26671dbbe112f3456331e3f91a54452b8bba5c3a36762cbd8a856a4a1ae9f659b17166ae0bff7727a92ecf1c5cdf5334b5dd603963ff9c7cee7109c1447be485e2776f15d46d59735d1dfb7a1dfec1ae73db27c9750335506f5d5a71d2d52bad0a1a7a1c2ac3b71dd36a091af0e2ab8f7fa9838a76519de3e321c462987ca2705dea6d088eee35c29a61f69997d5870857fd4afd3ac9903363441b7449f292517d763eb808b3942c9e012f2126ec1869a41c8b960caa4126a3b783dc689a6d107733227e3546d27f61cb707c6d43d4a632033a7f6b19be15a5da31f449390078a6ade5658d35ec6afc03902f57b9b641cccac61cd3471a8d5ca975b4199a81b3bc4dc78d9b1582860c98e861ebc97d5b25f1e9158325e527491bf160e1bcee2d9427bcfff6b230dd4442aede44e4307c2f47c63408c7276f4dfeb238041f0950261751fa1ab15d05f6bd1f4cc4580fa86958bae55d3e960b307f +C = 463bdae13d83ffa1e3a414b13641b0cb9488043eeda6347a9c0d3a38807812f47456bb5857ac9f77fe2d5e856bafcb28846ec0d4027dfdeb0efc58ac87148ebb95e4349f62e58d916fd6bc532d591e6b77d08d1e4d3499e5820932e38480e78c579b4ee124034f3e9ea2fea6f4a353ef5623fa31a8724ad5442fdf567a84b4e585522cb90e88579c558f69fe9aefcb84b381c635a98bd6523886006b4155d6860a12feb444305868544814af2a2b4b6a2ac7c4527ee872336fdd7ceceece8a676548841de35072f5c5ac71875e54be3db2fb979ee16582ddd546421236e9e35518bc4bd646ce6bd2427286fbcc9f976c14e9db110d2f76bceaac2318282f54cda76b197b2c147c68c8db3b8b7c7688d125fda51ddf05d835f23087c005fae152e469ffeaf3f11e8b81d3b04bb919597c38ee6b79c3f36e089780ffaa709d8dbdb5b8e2e2f466062e96a4a4c001da10522b5c57e2914b9241055b178dfcd0727d040802c426282bcb72c1a796532f1a670eade590aec38a009278bef3f9cce648fa9791a11dd28ae569d37445f6562b1a5947daace57ac965d5090cbba1dd32fbdc20ccc17788986664b606d550fc8a3390bab4b54dbd449f9ef843b92884dc233a80a1f44cf7039d8236ebb7ef04656a985264da31ec30036e48e97c539571e98852dbb0bc98e5ca008ae448eb6b6ff8a71e1da3ac50baa25399084ce9672ca61e755b70324ab9f7 COUNT = 33 -K = 9e229148e1fda60cb33d83e7e7ab7aa8 -P = 5e1fbbf9e73a5e50c0b20ad0cc7b4af9db29e01ad12d1b8315023cfc8b5248e982760983377be3594643257a443d6b45aa69ee043c48d1faa66fec3c38e97e6306f872522d197a13efd0bc05c4eb5a37be737ab411f45af4f3a3c75440fa28b6348933225e -C = 994774c08368ad52bd69c862b52e4fc12fe381c5f92e1a55fcb9d268c5c81de32aa5b5ff6f82a2ef6c87039a13c3bc7bcc5ab44fe02f9eefc96b96ca57cffb8066214e2b8734c343cce13830e4bb850184d5aef79c66788c4779b376ee9b46146acba820a0c815f9dc7d2a42205c342a +K = 7f468b01a14052cd1a1323d3cbd8f105 +P = 9ed2be23b9acdc34e6a5e3cc63e782bae659dae1fc5afd87bbc71147b11a078fd5e65d3135ade25c084782179dc5981b6c511491621ab9240ae5e4ab939d5e37d6e86a71ff9be0c62bc75ce2a88dee2434aa799d14c8919f5748fd8c1aaac06771f0183e8df4e4804b1fbba5a11c6004d38d4a6cddc1d0c4ab1ebb1370e7a4be8b2982c1ea0e639b1e9b12c5d117d0a18e4a0b2561f0bfd5476c07c372092265cef55ad65e7c18eea085c8553555fd7c35fb04433380f1fe266f3b5c0add63204f930e0b4a63caf8b5facc6a63556c420f458acabbc9c64550d5f8d850506c9c808beb4f7c0cb47e8a7c20ca18ff9e40f8f7e2d83e7cfbf4dab6d4c3ca6727189ad362e3dec69a95a1168d998c58fee525a97c38170a407a5d2d690b7804d609d92c867f00db1a37fcc23fea1ad7bae7ace7e88567c4a4efd28debfa94524a0d842bbd0dd12aae28714e8565b312258b8284107213757a13878847d906c307d0cb8b975e13afd8362eceb955d6f7fb4242b3f1a368385d28cf960b78316a794437c77cb93fe415c5fe6c66732e06b81f5114bb2692b118517091f5795006b9626ff3a597b0949357c6c58468501925029bc4f578844a960645e335b36f350c60510338f4ca62e871ecc47812b645cb450817ed620117e9ffa73a84247d8e533cacda971e7aa569a5155b5ea1782f5ce50a656de811ba6d4d9fbee815212f27ce +C = e93fb670fe091834cc134405982c53bdd3b783749de6114040d57c84639d14bf13fb64c65f5ce2a9746a410efad00b98ef5de00f1ad81542a5f1f839aa255b73e81e7937236dcf05e8f9f053c31189fc6a9ddbf12b8c87b0415889db08afde69ade4f0e55244a32de570a2d3e77c1b104f8ac5179c2712e171e8c4e11ee6db2a810c57226e7cde77c34c5851d030f3067347ab612fd021634aeb68e0208b599697eaf83e5e05efc1cd8f9cb47ece1d7200932680c3d4b95038584c0d115bf3fd7619f24ffd2d6d13a8431502c3e9dfaa5b43dee6a2aca565e60f2d3566816b9a46117ef5f62dd9974b173e94c50fb56e81c3cec0a2d31c3f510f438430d38e5366e64d8bbc46b07869846f6b8d37597a14db2b6b7575b7741efc28f4133846a3f2f24877eb295d22ad1e2657d9ada72da262735ba5a59415ff8add6b9db12e4a511233057a88c5c1f835ec49f050a849d8beea4947c3d38704ff131e1034ee4d9dcf798d593cea413e6f4e9b041f365ca1421bad0743d1a2109e5c683690f32643561ff97808dfa686a143ece9abe7f95f83caab0fcb0bda6809e3d43eb7a442184213f1d79416a112c001115b3a9736bd391dd86798652c30e4dd404b7444566ad0bc47b940f4dc8568a006c08872f440dcdf1dc2023e1a1fb4d5f32610e12e5baf2e33f8f4a4c561122173f593d96067bfc075e9ddd1acc5793316189bbbfa4d20093af2197562 COUNT = 34 -K = 4d70f6ed102fb8682d7ac02bec6ef3ce -P = 2234522f495388b3e1c020d54207ede64ccf603ddc77eeeb058bf5fdb6f1fed190cdbe450136cbffca4ae3cae78c34d13e090faa42f9a91d01cd594a56a0af9479a0ce9b97bf5d2948cb6b0563f6e5128322200b7b4f6a2b22db8518a1359bbf6e620a6b00 -C = 340c4a32c189fbe579d949aef74756e03cbc40c9ed326d10e4280533ab8a4ed3c20e15dcd970a298ef49cd5d1a7b06f9e291b84b72d365d0025b2a5fc119cccd53c2047cbbd5408cf851d5959d58ddc0652177a07059e3e7d4f94b8298571ace8da2743c1e90045e7d2c755742bfad29 +K = 4da349491167411396c9868728a8d8e4 +P = b36be90ab6de61db99d698eb249c332347bc1b495a3e8e696d8d84935cbb42126a366c653f19357679ef56ec43d8550c8f59324f64753fcc245c3a446fb79e967930537a84fcf5cf2f64f13a7f1121cf67826ab5d1e11e6061fa78297018cc736d8b30fa82c7ee9624ae1cddd2eeaba9995d2aea1207b83cfd384b46cdf605c0589fedb652a051ccc1ed959b4f2fbb0a8a6885d4d19c77cfdb2493cc9210125580e0abcbf7dc568f0ee24d8ca42161b6b067e7527940ce5b0b835427ea6615cd124de7bb5fabc6888991ba80c52e575245455343c08e876b2d58cc9402faf405102a92daa76e2716c69795ccf6960b078efd83368f11760e98fd36376f80719a9ce81b8ce46147c217bbd0ddea43c240da4e43f4d333d5a39edc94fbeb8111ed4e11d1382302d9d9a633922737842dd889739b926e59c791933a31183a061d65d632090fbe20fdd2829866ee7a4ba546b155e2060eb02f76213f269cecba89c4aac9e5e6e9c2212f1da62693305f6ab6b711651bdb0709cd2e3ecf49fe8b2a25fa42f42f3896ff7fbf9e7dce790037be1eda05fd2155764f51209e84801057bf1e6d82069934d52eef9685684777c954eeb951272ac8683c6bcc6c84fac4c57348cab8299c20cfab9dd70e8275ebb116b99f01ff9668ab48a23a17d002d45450e5315c922ed24adf282db64fd2bfe6c46ec6cd70a7148e49774fdaf793343e8d +C = da7971ab81dbf62ff15555859f0681576b86ae0efc8212669f9cff6b39b2eac38442b435175b7e1d725f5da684bf5305f2c79aabaa81c6ea366c11e284b335a7a4be276fa833f6a5037282a8f3a3c045d38a04f4379e62cb99500a2fd9698bccad390d0bc97f3954085caf809c26b37f6d983a283031bf443dee5b17d232eadbccc789e9c6d6e403406803d1c2d4527df12bc484f4a8152517fc345a0244b0f3c8b9080b619703d55fb63d2a791ff5cc30a6f1e724134dd8568bff935af8d56015001d56541cd0b890e85552d8df44c3da120b6dee2e10e5140daeeea381bde25b1433442355d4c616e909962966620a39e91da5faf7d11fe702a5b189cf60c35959b951a04f76080caa867a5f3dd8d88581fb7eed9cb8f15144af565caf85817bdc29afd639b78ae3c382f47f5827cb3b4ef143845b246be88a0c850fc76cb895fba30776ca6943582fdf85b967f39b4d3cfa2aeb718fcfce6ca0ff98e0ae6a42a53fd4812665e87e863ba8ec22cd84d402f0e9092c9ffb8c28a494723317b72e19e2bdc69bf1c37a1ea1bd6d022e4496f03c790f89442428159ec8fca179ab44c5225c44c2706e96e0c10e2ead5d4d7db0c18000c87c5ecb6205d448f45cd398b0ac2e8fe88d81e9b3d5c58a0c11f118769d60b0f20b60247e736c2b79b7e08723d8e4f2585225f6c56912281df6cb1b79dee1b880aad0e74daba80fe07e54c3ee9975024c3350 COUNT = 35 -K = 8f3f55e5f28ca3edd1923183bf37278d -P = 23343a377bd7d7e63ab1cf7dec289013b935017af2ad4fb6d003cecb923ee49db52edd8ec073efb0132bf8437e855f159667b855f636812b6fc3b34d99fd08288701113e89538e09cf30bc5d81e460b0997848b74889a6ff8a28e62882e896b27c0278b35d -C = 688de25f27c7ab4c05ce54afa1b70eb7d53303fca3d93ecb89ec0745bc2184c9a1b88165cad94538f7443958a6a71c456cf9d113c6cddeb106ae5bae454f91ebecd85db8b7679f68bcb6a66ebd808e8b46b5f2777d97cdaa75b282003092d1c9e65237a1cd8f67b6880c3215209516b8 +K = 89341d01c1b3f50ee63314816da822cf +P = 33ed1840bea88eaf378370fd8ecdb7516dc5956eade7e2ca02a323599fb00a86e2202aa44cc2b856150c6686590c9f870f8d8e266eaadd70ced3cfb412c1d0c36961e068a3c2be922c94539a22f176af62342b3ca5063f23e8351cef981da05ceb2759861b92a6859b4492dac9be019599798093d91b432bf5b9e7cc93cc61ae0ee48b695a1daaa9885755e542c0e820d001948e5cdfd4dfff7cf0c4251586368f1add010dbef943105a7876632146a8d10037392e1102a4656eae6ce4886295475d213c1c3f3fa7fa4c5fb444caba3739d6263538a838c27efa6ce6ca2af86fd170b5272a5be4392fa739a2570c81cd01bb99ae56ce535fe3fb42961d8ec500f004a6c9344f1b9b686a544d087072308326a74fc6c0228d5dcbe3589daf1e56b9e7dc38706df135345390c84396a2ad70446e3566985c1047154e3383e085fabf7cca360524afdbbccb6b920df55a5af2f2a28118b77dac38166243d4bdcb0cda5eca18db5c485a99df1e7a7e2cd301eb4d12c3ece0fe83f30a23ed2e77ff4ebd2a880ebabf0370202ef0e1cc1c127800091b5e3aba6096e15e8b84f3f8423bde5f88cbf91b2d3697b0e1b1d397bb498efe961c89dde75ed0da0b2a8063aa0ef098362e40fa2666971e2257dc48daa9ebdef1a2bcf6d54faa3c4d898ea7ec9c65e0be6f049a8a76d8cd117438774467c69411a0f7a36e88c452e899af362f6f +C = 25c35543b191847c65c80433462533b86e5375ff3dcb0ed942b77b53816aa06e92bd760cd97394e4bd95d72990509aa946b24f0895d1a1ebbc2db11338389de950676ded02029e1e72b8ebdb169d3aeb2377cf195893a6dc0a77619045c1556b29d03ec32e8c5373f19b9a1fbdff91f3e5482341bd79841b1452517f2ecd5f13877d66f99159c3af04041806c41c6158cd5bb241a77ac3d57749cc2c739708a9cb26bc3fe23e0df6dd64fd9c483ff98c7e57c05a978cbd03503d04c0f37e7a40824fba9e7bb64f78c93006b0b83241175d7e44d6ea7cbcf44e0e0d4f79b24a4ae54efe08cb6bab9655428501112ca1b6c0123ffe999482689580a2c557bdc56e84d7c4a86a08fc74b378570c21d02d7285e3da1ca1f13993d7952bf71bcd1daf9d100ce3c518eeb68f41a340e616ebf5a236755afcfe8e3b80c76e2df9b4ab696849a6c568c5a65c3079ae823eb7a51619099d6f625008f82ae06701c33edb2c48861859b22c8980f77582ca8415f2d9e3c0b2b4cc0d48625f19e2da3cf6d76ac90e7ade5baee943a6f1ee781ea2b433b124b56733a4be62e82bfc94f02f075eb201ffb941e2db8f0510ddb9a3dab4844ad5610825ce3c34d465e51733624aeaf2931dc77da8f2ecbac2f1efcf8044e32870e2bdca123b8674a2d264633cb29b9213d2976df48e0e7d9f1bcc20591430d389ca1a883abc38562838ddd15f2a43b143de2aa9f5da5c COUNT = 36 -K = a64c38b78505a45125bc503c5d9c40df -P = f83a30686681d39a10aa66fcf19f1a98b084602fe5a8362c48d51f8c5dbd4211848e09a0569d3b288ea85217656e7f85001e46ea7d2d07698ae0f12773c56d8741040ca1ffd023346b82472b069b72a514f5541e296badad4576f6897e16e9344f55179525 -C = f03bb94508501e3e090e574a1e2e7257ee4a665e2d4ed93e87791827bfe1cbdf264c2ad9f22a2c54ac262c8e2959e3ce0f5ec092f97bb386fb978fce15439faa91211ad889da8d1f0c23bb64ccbf714ba896c716fea3ed5ad1f215984919e77a63cddc6d5746bee140ed5a61e084c6ff +K = 328791eba1b5bd888887c6ddcb65b6ee +P = 46535ce6e6aa45e0d40818e6ae128494074d864e7354f97bf2c6415a834094b85b0e2efd53efafdd34887d862763c08448b7470590efef4f5ada837f964105d0058ba0006fe19ba3a27fd8db7a01222957aa388afffb9dc67015a5b62641ab583df2e191969fda1d6a23f1a32ab26c5deacc3d6cf7eb8749bc5a553284292fa2ec148e92cbdf5f118c4aa5a5162ebc43884e68891c357afed38c2435a95b90539a5d43ab389c16be7540362509873c0ac93b3595454e2b93633e9b9682baeea76fb537ed7a68bba64626f66f6779f70356c8f1ce63149987b0d04f7b813ec420354fd7483216d1ed62eb5713751f98d5b2e915d22c9a02acd070fe572978a4650aa0ae243c8c3ff8c94a5465854770dd26c21cae3d852776cf9cce6cdbb2fc40190c286ae8e419a3392a28384e4384c398bdaa6c2a683a446e6baaffb9909a7abcef1ec0470ae5e61cda5380526b066b61d698758d9e25a49f5e96dac2ad98a7eb6bf25c08fad80491092b1c76a439bd8d93ffd2d992b809ce708852c70893f8defd526714a3daacb4035fbddba3087ca33539eb46472b2ed4cf5658166f37a83423825a8c464b2f1a4cda54bd691eccd4090d0ba66463b57458a7577be3864e66f759d7d0fdccc84393820ad1fbb36ac5efb8a807a3f0f6e5c1e9ebfcf3dc13b4f27019632cf7b3077315b2fbe499eca5cc0a1bca71de7c3af330dbe7e2822a +C = 0d55f4cf4794a8c2d2041d13f6c65e96ac2e9af2019e631c3139b0128cc948e40866a0bd06c8e7b23c3a4dd5a07989c07c8a55fef9dc1fea406455f3307ef6e81ed6cf5fce67435a22798995d3afde51db93066277bb0612b94bc759d45e0d1977135f59c072f612e3fb712bfd651dbc58ef26ef396592eb1ed326cb9e57db032549b572441e520cb2e8c3206813113fa9b512ed87906836469cdf263e2db0e076955b6e8da1215455b149621e7c45815e619e2cf3dd05f9fc0ba45b2e1881dcc016606dd9816016dd23d7827fe4af7e27881de51b82a3a8106d857eb21456748be3982ef769d724ae99fe5f1b5ef3b681d6f00f37857088d417dab46ed59f64cd181203ef93aa0d7fb49007104700098f83cd5be8174124a3c98954b11c54275465f9dc1331e1a545c816636e6bddb0d084c719f9ce38c9cba70f118f0324ba9f3e40f6c3cee30cd29227c2f0f151ed18a26a3f1700b3a88dff5e5a25a2ae1b2c12f4abc03214d654172623f5c6c5ca3f9ac96356f5dce4d419b7460d7db24e72b9c4999620388e1d83b79a593a347090e952a9dc522f588b467839d9a334e2b556dec8b9b695a57b51cf12651ed68308a5071887ba29dcf81cde786d7853bcba103429599e2519b6cd052b73bf039a380883037eaa7ccd7276e438eaa325f4c79f6384e99b48ea3eb34f0f74ba0ea1e5edd3f76ad398379c3b1d9a73a3c28cdd9fd2c4a17b1dfa COUNT = 37 -K = 65950c217e91eadf183c530179bca3ad -P = 39e633fa1fb63c74dfeba5157402cc677148e38b658cbe7ce08544be7eba322e197a9a2e640ceba55ded5664ce6539dd44859600b64468a3a58b8e59f37539f1f91cad021b0d75c4683cb8a11c051bca6f7243817ce4d809e48d5e80d1c2b3c3d3bf7be65a -C = 1809bdfda698ae0db1d121321a6508db2016266a1065844c92b6b9a42dfcc14a628e271e39a88969e8830949e4de923cff2c95f8710c085fb08fa983345669fc0360a3454b8c37cf668b300fa822aba1a883619c0c377a29c608a1adbf819944a312c5b7c7cea79519ec729372cbd0c0 +K = 5bff1472288f5bdf1ef95260bcc30d31 +P = c56aad8ea94e6f4b3e8e58f3a5d1f6887b6b77dd3120db901c1f2ea1f1c4dd7118fa2d8b38de3a2a070621990630d9be1b7d73c358f5aaf7bd89045804dbd6cb17300fd192382fba730430760b5b419399dc643d4df6730dd3287d1a983d9e5a249e3058f55bdcec65d0242a0c036c0b7d446d7c4227263c4048a0efece25c4c2282e1b46f2d367eed9d3b78d4ac61581f56724bae163da3d6e0bf55d6aff43081b613395e2ea28ca24e0965db7be0786bf692aa067f66e7c62b5dcf5e7d6cceec5572525cf9616f24b0ef0e7b51fcf9b2d2ae4b4f77aa8d1b3e7d9d785643c87af8c44a0419cb5f042a1a974f88da27f04f8a07e5a790788d19aa8af31ad89c4d521949c7919751491d5cc475553fdaa4c7cbc51af9b63c6b69d9c888fccdc573d7702a6dbaaadf4ab790e743057dc19d84b06a35f53f6b85b4e8ed4adebd7e13355b9b8ab0ef4948dbf2626dbed955af6ddd38e118a54763d3c3b63719c9fd15745dd3a1448b4fec68fdd201c272265ae5614b37943cb7d38b5981620d01ef0b4d161640cdcda67121f6635db286c64e578bb0f6adcbb3bc63092cf88d20973689168ef7c0ff6e3b9e7d7a562f895c74af6ae862b07edee43a7d0c964ea8f45e772f64a1177fc529deb8a2f99e6230e0ee634881f2ea7ff221922fee1f6d750ff1456403fba1424e1432fcd86cfdb26b1777933e64b66cf5797326e130b796 +C = bd577c88f27ec3a94401807e9a9c97c6170773631d077eb0d6cecde19ecdc5dcf2fc2474122aa8290397ed889577004d33bf8bef559e34be4e838b9cf154b53ea752f7d5f5d627be38b300d94d2bcf5cdb50199589c5696fe0feed57c3354022f8b54634204a911dd7655f7a26c0f0524e91746c65b591ed6e3838b0bd6171dbcf4c165a92f1609911aec23ec464912ee9ee3ea33f57e166576dbac9830eff99fbe4382959d85365970ec3c4e721e3215ef43c7e9c584d3c723ecacf7dfb88bf2eba85e867f636872e5433368138156b1e0a423c5a4c32f2acafd22b82d11e8f590a5e29ec8a8b10e87805cd0603fd1e7134fb2961a3131cbc87197af095a78268963ee425d72c4d6b0988ec794e0d303633bbd9ef10e4859bfa61ae45d9c2f135c678642b37f8f2b74c6ed6787cfc249bb89ee1a3f6c19aacd1cf034a2a2bd48e3714ac0cb6fa97df972fb0884c37c5efac056080e8a0edb349f486ed07b127b3608f2f35aeaecd7918a866ab26967296ad7a62ad224a08e7fa93b5bcc10f9ff7e430dd422847f405a58815f2766ddef11e20e0a86ce608415c967805b3d479b46b50f7ee39fb579b0530e77ca8d477d842a02251e3a67c16562d0d8d7ea6de103d5dfb10ce81daf2224d1ed7eb4a5a7326f50e9ca5a6c8b110127859c6952477fc6fa4cdf774f7aacc4c5e12bcfb654df48c947089bdabe18cf7786ccbd7eb54579148d59c884e COUNT = 38 -K = a4e242573bdc251c1fd1af606846d725 -P = 5954ae472882e67cce3ee5efef14cd1805a3430c0f0ec9b2997b2d2c55a50fc6c4bac023811f5838d835565b3a1e2960a4f2619abbd205f60c1e0dc9fbb482c909bebf33fc329b31c67167868885c6fbf0a83b8272b2cefe5369fc415e74685aee9b4b4cb4 -C = 034cbe74cf5a4e5a2fdb247de3e31319f451f96d1bb0157575b6a23005efad275765ca00a787e0e795710c2883cdc3a93c6442d40073dd277e9b412242cbd30037c3a42ff068d79cb29a44c1924e65540ff10ab977eb48f73d7aa87b51d09348ba3de3f92bafce0dddd2807d4af42867 +K = 426aa6b6d756a22114a2cd5cd41c2a30 +P = 4f4e43be63bde58222874b1c1872464b7ebe29d16805f0d53fa37ce2cdcf1a80d83422c5067173e97c336870b21d9f8f6f5e8eb7ee68e9abdceadd920bfe8e6b02d7472e22b5beca3dbe453c239a5b057007aac418e3605e145ebb0d55c56ca4aaa1ce3a1c3e98d4cb645aa1a22e6a93171bfbde5dc9286bd98c61a799007befa57f46cf1a92b67f2411beaeaee077d64899d52df16b431a80a362a97a61bb5ec574d75cd6689eb40ca7f48da214a2a85ed482e034254599a77195ef74b8d0afb7c0cfe780cb39d7534559a3c8f513dbbb432ebc3891a073c399cea73337fecb43c93b040725e9c43f5b83b2d34a2f42bcf8a4776ade60d84c1fafe76735ed1440155e1922fc8d498469ae8287ca973d32d5e51d9a48fe49472fc918b02707267c45ce3f265ed3c324eee87683389e2d9557b354860750a8e62bb28fc89b04cb7caf3008dbc0de837299a3beff545c6c91c697525fdbb7bcec5ded2c57682af9e9a102d38e8c8b88b1fde0caa350f598f31d2eaca4f75d9b1bf3ae9a12a1e6e4b468caac9c918efc1a1114b89651dec46862b12e61b16efed5a4e434cafc33b8e8d4d1c40bf3c2762a3c873fd3bfb62160945375c51028f20089bc03b433721ba3371650f9010fb289dd0ca6e3fe089b0dff4a441ed43d4463b8e1063d60c37829526af30203a0b82a3caf8472a9203287fa41507994bb691d65864a1ffaa904 +C = e6acf80b3666ff9429c1d294b1540be59049c2bf517ce3a71ad9a2f4fa34176e26bce33072c75fd81a90a6ef912b5d7ccda73f8b057c86709c8fa8e179cb6f27f82ca8796432cbb98495505582d950c274184f5ce10554f97c2b64bdef7be8598cee2b998251b872ca8f80a94d226bb1992782ab9c670c0c09de73ec9520e5347abc59d527e2a0369d874d6859303230e1517fb98fc047bbbec3a44e4be16be665be383110f665fe9540062a12c472159aaba923ee0f68fff6d3aa7189366d2c402e315f86b5d9a9f6cf70c6575e9a57b8d88ce9bc75bedf7df06eeee73573556444099e2177862d3ad312cf08a12b0bebdc61f4538dd97f9e5732079af02ea3265131ebcb1750b316a35056c324fdb8b0f337d110b3f5309b7d8ae75a3453f63c8a1e6595e0b70d3ca0544a25b60b01e6c673a17b8a4c9437e08cdc5329b955f1bba8ebd84bd067815b1df8c7e6125cd7783c24225af32f692db91d9568c1b6fcd9846748eea170dc3f7cf4d9fa07a4de6b398ebde6b9a36fd3c724e312ea957064bbc8d38382804205c792f314ebff173857e19de01a1c6d9b25dbe2b6830c69a4c290906687684793df1edd6f3b634c44b414bb351e6bdd69d49fcb8268aa8782d84d89b95ac7fcc74ffe6ac60071d4bfd73df1d44b32aad3767b3a22c2e04e8441a8bdbd91bcedf8a75606fa458cb904b62fe08834b47fd8bf8d850a5ea0cb458e055236991a COUNT = 39 -K = 9b871c92b26ec1f02c5ffa1f5eff07bf -P = 1e81c8d40f8bccf58a09242c59e7a3f0c26a5a8d0c0c15a37f546b8c2e67513e6d4c62a61ba568e7bd49c01562d0b98adaf97ae4bcb6e989598f0449bff44377b93fa4ee0455426496b66d0b1b4069b0c63e27830d7af212b36d91687a1712dc7e56aff304 -C = 1a2ac6cd0027966e844c2fbd8daa5a19e1b088e30edcd4877ff5056583d86e6fdc3a2adf1d660bb870d142d72e6a0fef5e8f389bf3bfab0914726ffc1251fa820aa8be172a0170781e70578bc665bf31cf19a950cb3c8e46140e4d5e834d2f6ff6e0bc4518f15d8e1bdd6e6d90080a49 +K = 5a75d2b6d0f74450775b4ac35d33fceb +P = 7d9525445fa51d36e29a890cd964c8b11605860221c8bbdf0740f5c9ff65edad2a9afeb99851bb3e3466799faa20aeb938f027c06d335ca9bcc7854c8541951dc97eaa19b5fafac7ef5bfaba8e26ea9fa94c38d1ce8fc7a85c6968ae9133bfcee50a3823c433f39df51ccb090380dbd4652230ec9d292de21ad762e1688588094141714b220ccb38561966d0a5cdac8b22ffc8af8f13287c6a25ff1e5e29160c23b5eeea13e59803b0af69df888f32b5eedb83a61730539aa8c28ea4c2e7648280534996c51cb84fe9251f602f1f731a9516f0dab33b36df4e4a2383a42485a461d6454f236ff2e3987d6dcddcef48585736b80c6bb2a026007caff19050b82e6f2c57e876d129215c7f7a8210c6c70ccf278381d3b08d80a132a8745235bc53a7b2257f602982dc4f4a498842f336fdc1f22d81bee795143b9fb1795249c27996041c8769605c551b11c4b9493c0afd4a541a2c8688c08e860c179676593b76b6a3c5cec863a1f03d9ff69fd0538478d32d0825c88c9802fce252a3bfa77eef11ca3c4af10763d1e2ae8b50ed4740e7a3fb2ca5d93a84b39327928fd32c0063f8a318623914e42fcc0d0e1cceb1a148c16b055df53a492d9fb66f71a32884d46de0e00fad165305c87205b4fd5cfb9efa8f00f980d31d41e0a80ac33c23304f54449b2bfb70fe10bae9fb41350957ca0f0907d9a93e2001b74ab229d09640a1 +C = 9f0d604766017b506f2673bdb4e07f4ff69e7d551b3ca37892b60811a4e8d5342ee9beb30c359cd96a756a18d414b6b93c996570a7e6c0707d06611fd512adfc90250a6b210fc79e471555a3a5c880956fca36eca9c3a117e3418d1804b568ab633fd0a42b086c53922947f42c50f7df6921aca6128b23479ad2fe1f3c69e880001a53a0ccf249a11659e52d6843f0fc4e307e9300d114681a6c4500201af74ea38d6f76452866dc168b0b1122c3b5c0c0cd2a4ee0254f75542c9ac9488920881a496fa1227ab6a77af8b16a433c46292d9dcdf7e25cdc47f11ff7419c403fa3923156d5dc8396d764f73c4ea839add29a09e60a430c12a9e15f463b998b867601d6a62013cf7409a7f1b664719fc5596a6fbeacb7066e906f9dfacad37ca76d045f88fca9eeac1d5b9c94f13503c13a3319bc92e9d411caaecf47f6a104118dc0c16cbab749cc1c91c5a42a7d40733c73d73ce5e6ddcf5a0e012e2adf1abc754c3a14e5a05cd85fe6ca160927a9c65e42601874889b7f59f658b5fe17cb290e9b9098ad2fbb4eeb83ae9ddde372a7f48c66d56da75228b0378c1ea15a88ff8ca9fea99281c21725064f50abe0e7f9bd06e0e99e7c93694d3499388041c01f4adef6cb8972eb4d012d52fd42df80ef185f64b9b4dd58307926003a49a5bfbe9717cab9de762eb05a98ad4f997fcbdd6ba2974aea3a197662c13bf0f280d5d7e0e178f8d34d2e552e COUNT = 40 -K = 557012bc16bdffe00c7be3fb390c6903 -P = c8672b1a86e7d55c75fcfb2439edf486c87bbc138108c25a672bb26381476cc817cf9ee4699a5c423ce8de4683af113c448590eeb9bdff4649028d29692f0e987d78431958dea4b7961fbaf8f8b4b1c46e445ac27746c80e7e59a2a87497d85eca4f36f5fb -C = 57211519fe876fc1d39d18b05f9b3bdfd82ce38f942daa1b8c2d2b6f68d34a1523b8bffecaf1e5293ed239a04a77b17ed3293df8b8189bcec079333de623146e25a008730c3d30ad0a4996c6d23e087d95195e5bac5edd811bd5be7a4a4cc97c902d8ecb15b43c0e308d4c6f52e834e7 +K = 8652eaea00daeb7a46189883a534d86e +P = ad54ecd8239a8d7134a87c594b7beafe2960523e6a44e65fd27c7158ea188016e0e6cd4f25d3c1e3fccbaab71a74be12993e357fbccf048c74975993e1c9b4979ffd991387a2848182d6bf8330f1bf6b361c5c5f4e536789cdd1fd2d4643914e236cdb2a1802487aff84a4f41e3b6ba4ae8dbd797685faa614886645359d6ce36bb876df1c8920d8cf165fec05b6951b551dc0c1e14e77f27192273771fd17f62b720a3cd4961e35cc97bb6c9359713c6a2e9241c48b412636df8d1101d5933fdaaa70e2cb1fe1d1353e09bc9dc0002acadd3e12216ae104a421a8f98caf1ddb1a467fe3dffd43b57ef222a21832935a888e2b7c3d04782d684ee4b227e36288d3aa8d71a7930de2be14c65d1003d6bce3856dfa58cab4e5b054c09adee45b27ee15ec07a9790f3ec1c0db1926f3d9c8b2a491ac1cc2f9d0c93101cba088c78523cf7f72362c65995737d004f51faef2c846c14880ae26216b5e66295f64cf75ff0c2f7daef06c8fae7136c9ffc3a471096a4312acb484a27bbee856183c5f75bda0dde1ab406cc0212f1ebb508c86020db1c13f7bc44fae3aaed52c7f73109f065ad15933c9662036b1302de749947c791a39daf0f2eb4666b1baeee9656585cb0e2033531625346b38609e1227773cd9579b41c40e20072207dc0794e0636e6b96e03937d6b731457b862db2aeda816de9bbc7fd8e9b2b3b19737fd7151b99 +C = dd2d98647b535b77cc1fa5d804f23b43971278bbb1a762d01c768635599ed9d0aa862786cea4d726469ce7e07907df9d6ffbded0931ba297f752323ab94ea89ad6f8e55be510d913637dc2016af703cddef082d1c19f6e1b3421ef66f63af788b09888691d7093f1eae2497f3fae40f88d1652c5a25efa2aabc9d1fc8aafaddf26112bbbff5221b105154fad4ec86908f92515e6515b5fd483d08da7932503da2741d6b8fc2a23fe87a4476156cb566d8c49ab5857b83763e3c7a7f73d20d0f1288273922b89ac49e5c03b9de680ba6954956bfedaf75c4022d3ad97f9b30cb0a79ce9c9e726c5cb2ea8b0878c75a9615d409d4305f3ebbf3934588d901f40f0ab57984d808a8fadfe47d16d4fda889cb1ee86aff097d1d11fccd7b70f4225f42324699fd899c403b5707e97d0737562402efb6038051d15b42f50c9828e7bd880024297d5ca8e683b2c749a75f3104f17a18ca26045e039b493329dfc3425193d06794146ab959210c89df4ef91e46437283a54205e351e9dc3d780adbd17a43d1805bf48c233bc8b0ecdb2b33383f10114c29ea5a0f3064f77d85a772c9129ccd20241558631dab138ecb640b65cae388e5995f9eed4075245cd7443b7a0bc63f8793c5f67aee2580ce3bfd748f0e45bc59a2e23b530f26f2259de63b6598b67d1931e8d4128f0eef56f47339ae6c02b67a5098d836430ae356f548233e23ecb55ed5ac8c061ee COUNT = 41 -K = 174fa9f43962b3723d995b036b2724ac -P = 9868641e3f3169c5b81235d96208f473c47c1fd4c65448e165642a8dbe48000849d89023ec43cdd474894dd87c33ada87140c7b9a6561f4e45c806f6447ee14b6ea33509c3723de47f2fa67828aa48f80f494395abefdf1b87efea0b4d27c2fcb5c3ff6df0 -C = a0281a038a1096a1db2a36cec617299eb14a7f4b246c0fa59a63f3b74b0b1f95f9ae58877fff10aebff9e588fb2b878bc2e0cfd0ac513135d7e82ecd0ea6fb30d480a3c5f8ee970d9d41309942499605d4f2d6c883b232ea235fd856a89c6dd95b2aacb0fec9d35878c1f3a2b9265066 +K = e544c322e688a1cff8751c0ccbf40327 +P = 84c4ced28eb87027c172a03f643ec44a9d80e7af2304c727fe088ec57f58b60ef4cd0e49675d55d4fe94f306bf8eebc39e9f0c505ba4e1471521a1c8085416cc179cca22784b28726e1182e1590aeb1a6af063098260aa81d3ec4f8fe15cfb720b5cae260cc20bd67dcb4222bfab01a5e8ae44563ef2a6abb07dbf137b0d21af74700e0b1f5db594d96543da2a6c864cee226c780ad693f23c2701d7838cd7017200cfa7aad5146fe107776ddf973760cdf91b2bee129da58203f04e698a3156cc98b0f7439f1ef654351be5e2111ee09c1e428f2c84aaa0960f07619c7bf584c3e42d55a7f1db4d849ea16259c2cd64c8ef36cc7cab49a7d2f783510824b5dba4726da48cbabdaa3bb6007129a3783179b1190f2848b86c4809d862fcec0b292291a6f69082941ab4613ff38806cb1334d1e9adaeaf167d5ecea032d3ffb0cb6414bb119b55ad25b8da8d8e5c4c7ee04d032bb84b46457893ff048d97d30f390dffbcada8fec6f0c8ce8bda5181c9a58b71d64f0a1c720035f1ef2d81d480674e5362df782b5b2539a32840e55a4740539c6d2b36bb777bddda5cbd23f7fcacb8c6bbc532613b89f770ccdf85faf0bf4098221c79edbf85809a25d2c2bb191b60abecd689a95769ec06011779ab1de1e3890c388f296094a9129eeaac2a8c06c11ff4d1175ee8576fa75e25c2a9cbd46ab3876436d42ce4d2b0a7cfc6d7eff8 +C = 6e94f45dbc1797dd62722389f04814c1d12754033c758eb77078729326be93b00718fcde0e3165b62c532b7e9ef2808ea8a7b1880a8a4c3255176de078552a267d9e3c769051b4581fb2844a85613660241aaa7da914fc34cf04501645c3de7a26dc392e5894c549129bcec85dc26a16db823212151210bd6376c26d610c5728bf0305b954b2fe3dd4c5579397861cde0dd013eae716d0a4364e8220e939b7a28d43142d9af2501cf2359d97bf1be8b2903babe616f2c2c51110c16243dccb5c6937a2bdb3e8e69989550366b59d8f860ce20d380410ca2b75cc5eb0af7c233cd8447606f2db3712bb30f2a4d83be80b886e3d848edd534a5b0f3cc27f4c84ec47efec0124f708423c69b4f465d3852ecff9aa92facf9b6195f4448eecfcc9237beb14347eab8d66b6068088160c0f6e73071e8897c0519da7897e176b3b7c0a0f7c13f9e30195f92c3521e945c8e8a2d8666c2ea64d9f81485d6016012cb16bcca98b7e9f17fd8403c5d211fb673f910f929019e26277d2cca389b7a2ea2dc4b3a0769546c9eb79926f57e6a4f6839191c7be5594aec2415ff839e01246c362134f594951117025152eb3d6655d1161a58ad95944c6e3459b250f494335bc0a0c16583418692013de214cf2a9beb8698afc366975ad32ffd8f7b5a937a5394b6140992a898bf131916060be2ce5f0194221f3e051e8cdfd2d6be8ae71b8477b2506acc79a5aa623 COUNT = 42 -K = 66cb248c44b120e82de6d1535ffa8ad9 -P = 7983239025f37157e85c34fe7c6e3a3b98fbcb6cf0266530307fc98e7185bd54c4ef914b2357d5680c7ba0d50a3cc8ef93167d0417368cc3624a2ae1680b4cae75ddcf3512a5f74a599e6bd48969192cfb75f29c291ca8c0f534817690a8443738352f453e -C = eab648e9113cb2c61b5dd04520037cbd960d6ce2dd1f5259d926aad91306d95f0db47aecd40040ac8812f938be9dd4213b78cedf121eda69eaac490d7826306ec47f752f94df2e481f9140b8b3fb11dc3b4336b2ab37a596962940ef8dc1f4d4a7fa3874ade3bfb863618bd4f7089280 +K = a380e5bd794f22859dc7ecc233ed85a3 +P = 1e7e2f46bdd4a8668bd292b3b4fcea9dea2fd6b99def2780f4b6596a49952d4f3e5582cec70cd8b6b949bf9ca381994432e698253128f3a0323f6cc0ea08ff9d2af3906783fc856b987a23a96b2344f5c1a65a8969cf9a0102fdde77445207f90e537117881d4edb8269306f1d1fc4175508b72d74df1238721fca9ebc790141e1284906299e3694e0f12355cfdb03c37a0b6f5d871d39d1d7cbdd3abbd31734b39c8b179b3d6493af3cf03917de5e188eee644c93afe95fec2a2e309c49bfa175d5413cf040e40c52a79afaf8673d35ac9285154819373bd9bb4ea5c53e89fdce779b01dcf24e5e7dd0364aa27b217fbb48430dff1370aeffa592e477b85ea02b080e114f84b564044130cfea76d065c7a61db6606febc59477a110b45abfe33239fde88b62bbae9bcce2767de6dcf0e3b49cc1dc64541b00088cd7f7fc537e22bd07cd2d4d51a9f0f03565dd4f347b3dd5f7b01c63aa35bcd6a9e630266074149ce48d60ec7bf1dbb391e6c844a944f18db37bc446c2842944516105abbefb830922d6abfc65625b7060bfc406381e24f35a16deb47a0b191f8d87f21bf0683839d407d57ea83b17eb630695049f319eb8c3470b85d14cbf213b29af31f48c20aa00defa1e2b83c76be623e9515fa5f2d5658b878e6b6c2d442499323978975222a06caa45f5101f9e3c72bc66c139067e5822d14d9c9088a56dbabe59e187 +C = e7534c793985ecb31c5114350118475e2c698ea7c32bb42568f8589736001c66bb9632bffee3fd289d379db65bc8dae39a4edd48aa521846200f24534f38bd746b3c56b895039b2c35416ac41aade7bd1ba6c891fa8cd5648d496f49592d78800393a465d75309ad00d15f05bc2e4aa143326f86fe652aabe92a981bdbe0f0909cd65f56a5f3eaa47c6d7258a4d4db3ccbd692d43aa0ca01897f011c2336a46df84b57029e6672518c6d68c1b27b09b1328a28f3cfb1f2f31c20cd3119485061d23e3e823425c66a33dd9e8c3538328762cd7a6f7d1541d124e606a1341c72080e82e58f3e18ec189e72cd381c78809adb991abad5484e517ff6bed4d5c36ebc728bb0be7abdbf17f07d3d870f49151e15b5ced4af3114e650ee75f718feffc63f0193abc6074716adfab9e05e4edb9e50cbb1ec6b110cc7fb4131e79c5680efab7137598827ce63ecc1985d43f0710e157925c2b762046cc0b6391b504ad80ea12dad7a9f139330f2145cad63abdb10fa7de018426e286ca534f887d7801232373de3bbd39794006f44b561e79d7582bc0fad638be0f49bed25e6e2ca494da0ff84b4d9623022443ffebc90220792be194641b75b52612063ff66e60f3a26a8f73f96da63c2dc1d8af27d69b9984b9eee6a83d68e488b3f9dbd411fad7b43e737070ff9f75fefc6ff83a63e023de265a1bc43ff949c9b406bcbccccf198e0a6db6a11268830c182 COUNT = 43 -K = 41d34cd510e36e3965d0d0ad8ed7796c -P = 0d4e58fd681603555ff454ab8bedc24ff8149412d568138a4a77d6d8bc6e4318d558cb736df7af4a70ffb4d2ad9bcae2743a9d91c4a4bfc6825884468ddbbda92eb6d2a26b3c30f73ada824d836968786e65d6ca34450086c25ceef73b8307f397a403bd74 -C = 91055bedcf2d6769fb32667e43034d307c1344f641b55266176ac5e52b594a0ea0b2166a873f828c197fa0bd759705a3a18a4956a7fd16dc8da4e5acdc6c057c787616aa91e696bbb77cb89b18f1980b99d4d4147ed23e549b1a457761f4c04710a1f2e5538f0424640f820a368a5ad2 +K = 2f860e956beec0c080f5ed40be9c93d5 +P = 17b9dedec1704d0559f2dd563bd51205de18abc89f868468de5be094f4341bcae122850565f9cfa97c172950ce2c1a917da9bce9882914acd6b6a3002bffb0ec62411b71bb872f738a12dff3dc71d38a210733aebc0290b819de8f1e0996370d6eab8f473822aa374d27a8daf702218928c3584fe644072a10aa9fe51fd29ef3b0a39baf78da43fbdf58ffbaa3a78eb55fbf6ae01816c6f1f06c8d90f5463f70aba4c03c0a774bb82f283e76dbe00c1798f6f60907b69c78b76e6a3cca7200459d27f8290561e0d65e324e012d083ab57892f73e729816973aa713736039545f73af120608ca1b6fe835d50c758507484836248d228c6af3a8ed07aaaae358edfe68041796f717dad96f9bab6c3f0c6ff1c7186828e62a8e996ab0c4b78b21e297ac520bb1fdb9fef0c7d6d2f2bbb8f80b261bcbd14960812716e4e9498d940f11e1ea031ec0caaaeecad49e4b2867793133fc2ddf38cea33e3459f14ded829948c96389762dc8593a90a1d79622eacf15f7c5dee1ccd25ea9bcb2d66668690f71c65e60ea09c17fe0a596236570a1f0da3f9805c2479022d03dfd18dff8b4a5c66036d4a6f316866e24cb806fb8b4daf770cd4ae9d8c8370f594ad34971a837e799c4af153fb2c004c554db4eeb6742e7cbefc9343d4f9a0b37aa446945e150e9f348de78c66db97a8467a76ed20675ea74af89095d34c4bb6cbfdcc640f295 +C = 52481eb296aa25a9070df7c0550f3bc36c271c6f299333f881873ff3b2418dd8e588c63363436c76071c4fa26c06b63465b59db57f705abf6dedfb6b26683533fc3de738fc94491201bb05ece28b406c8213bed4c9428e32886b997fdc739fac2bea688e59d544d2af5e9a0af51e903dd0af86a41b6fc3c06679908830ed4958aff5e5c0fac136ba52be35a89c9c4e778558f904563a1b18ee3cc374459574a511fd6af88d51d7583221466e54023df0e34095c56bf62a9ba4c8ad20abd86b68b60cf177acfa982becb496b5a7b3e5be2beacb06aa78d1246961c614a9363befa19cd53470bb9632d256d759556b3f7399b0acbec90adc6267082366aa0460c1b84aa2414d04611bca7d4e029bd580637ea873d7a80622272526f39ce2f48ec51ddd20e24c4ece4b637cd4d93974f5169edc751823e6a56e5a248b752d3fb8a71e09a4d282ca36f9a66dc0296766c32d658773a64a6da44b0f937d619cbd4bcc8fe2f93cd51f98cafe79bb13be3bed74dfe165f458e6f4c523314ff55b950978f6777b593e23845a2d0db0dd5538e3e99be0020263be9f51c8b938a5b90acad0ac0ccb5f64fb9e0fb7d2e28acf5d95940b28fb64706aaf0615f26b2ae250de9ce88064fdf6b768845bcb8e5306dbc3d360d97169b9ee4443b338dbeb698c16e4b2c374a4154c38b66862409aa06b0b1657bc489029ff568bfb240e0c6282abc96f9ac15a9c929ff1 COUNT = 44 -K = b73e2851e66ed98b778338afa6f1b886 -P = b4b86a200ccc19e352a5a95294ce13e88812cd6ad07fb500d8800652e8d29ecda491218e35a3dcdfb0431d2afc769ce089ce88ec54594c3c891fe539a8d93d862819b080373d2647adeb0033bf982ac5a3fd98a649d3e455cd3803615ca8e9f2a9c15537dd -C = 73c5ca39b7a340e7b2135f89ee759faed4c0753ae3d9de0907908d7e32210ef72664413a275ae0a08727aa3d92e2de92acc22ad82bea864cc9007c0f724638672b74df133656e6be2355e27b829aa4d09c1f486dd352ff40a1be35dfab1baac0234293a8e5c353916aef5fc7ad6f420f +K = b7a368345bdf440815e397333875c9c6 +P = 187f8a0f756ef7ff794ea8f1ef63151ee8c61b9a45cb2e6e4d7869f26576e585f5b0f73682d74930a45994ca3113eba510f93b6d6473cdde6ac24065b68875f7ca812ad0cc9fc94f476184ddf62e6e19a05d3ccefd65ee67ea11d123b014e9903160e5d75122ea96422c888c36ecf22d0dcc39bce1f0e1d5f84430338b73bc056ae5df766a192ebfc505dc3eaaa6d3d99f265ef1e438ec83dfcf84ee0206d974bea1fb1a75c456d40ff727b099efca89211537f5ed02d9e321930ee06a4de83e488f5414092e1bf2dc7a0585fdcb9fad5faa51118e19318f05db7e581cb0d13666ae51e00309cd3f037c46bc7b5515cfd5a0af586968fa47681f3037ea358ad3468bda00e4feab160a92712ed4cd2b76e976f198a0d519fa72d65e797a807fa4c97585d48e809f4f26cb67c18cb050562b70c54905f195483eacb26e4cc14642d91a9e1cb9b359fdc4a6ab3c63185dd9d4daab79ebc0d3b420f5e98b9bab7489e9dc0f27242ec887f25ed179ef720c3168f35409bcdd02f047c24454394d3a3b8fba04e4dda97afe37273a0e22c581d2fb701934b401ab392bb631bb058aeb692cecfb248375bd517b30abb430fc5b21a8050ccfa453d9bd1795c4e759046fedbb2e21dbd099951f7b538211cc7e9a3022dcd42729d6ada0e395151d55ab3a75ef6a9bd4aa8c0213ad66af8c4ad935a36fbccfcb8a6dd2f821d4e6e851d71c54 +C = 1b5200d7006318e9600dafdc0b5d2e8e7bd5699fad5b6ff8d7eb1830b2fa2a4484e3c6c245c31dbf11488513e803fab48847da1570f71f119347709b64423d5d28d5c50ef9268113613d26bc1b083851cb5ca3fd727a2ec0f1ee0ec1bac137530845babc2c1cfabc40e9455000beb503399316e2bb32b505e55a55b96f5a5bca232d8f62fb3c7fb03b066d7f44e26adebe391a316a50f8125188099cc3084c4dc7a739168fdd091372a8c715a0072478b55e88cd1eec7384d83172c7aaf5d68a45b1bccb1c3af525fa159607685770c7697f49e697aac6fb959f999593ce53e10c2dc8d6a1ec2fa155fb369ffe6ec0e18d5b820fe1f6fed87839768d8808ffe54e9eaa25c435dbfcc14563aa77a35ec3d37a1b235ca4d5292c486aa79bd850a34d7bb2f6cabb446fa3f023c53313eca7e07d17fa5e165b4873920dcaa2772c383e25c42f25242ce66110b292f965528aa3af3db6b41e6966f18d1c8fb57a324f3c11f616711b1b40510e1c966aeff64d8750351870f04d988d125a50fda93bb08c49d2df89487076e619a2f28d75880a3fb54b6e4f5fbceda564e0cb92f91d107f52a103b1b0813b301656c265087495422cccafe14c5325a1d6a6b9596aeb2e8c901c35e29c4a78c1afe2f8d59f8b98c3070329eb0af630c1ba8c750482e3c868eeb54248bec94c755b9b3110df529a0808e46e6f403a228a487a26004f1a263f76c6b8508c9689 COUNT = 45 -K = c66067a868b577ddada5a7501b01b245 -P = 1612bbd4ae4f58c10d6d77ab660793a76c623f42d89e1128bb8ebfbb2e633239c3ba5825cc0ed9b10df0864f027acf58ef136fa5bfd9efa4bc81bb3fd822b2e247097c376e1f7c0c0fb5360419850d84aed82c4f002d9c079eb6563cdeb77dfe2715146bf8 -C = 3b7f27ff940ff24e7d5a1559dc3ef863803d9d871e134daf2e4a2b6d1cf438925cb82cd7c57ac0b3300ec0b2cc8612eb4e9465dbe6d883f310ade70dea5fcc0fcadf7ffdc821af007a154573a457e0e6b1199abcfeb98d5163fcd1292f0bdc113e2804b91e3d053fc0db6569a1b72253 +K = d10d42402eafcd8c2231dc4deb1a263c +P = 118074a9457b046a0a5b9dd7380eec3f9f7e80da090db0ad1a1147ddfd108a367f29b422c9218eaf3d362a556c2aec47d21750c4a0ce4df550ea1fa81ae7f04274dd391d1b73f7468cac8343bbdbdd80c0d950020e420a52c0a01c02996fccd8f7b4dee98c65ca4fcc5c15a62253248b324f6bae48964a67ebdc8bc27920705d6656a291d37433144dbb3111334d2ab32c9b3cc4216ea58f9b8146059b7750cfdb74510aa7377b4a675ddca44d098707273e8cf2a3bbe28f0da55912114fffa858939b7070d87a40c565390c302ad8c135abe1b3587718691f350fbacbb447022bfa829136c33abb2ff8ed6c5181d6869250c3921fce3ad4202be926a9460154d4fe4276117ed57debb2dc32c5c48ae9bd6c3e30464ff1b5e43e247f2c0e20e682812b175d9ba80058db704950167fae1c3bcf4b6e00af7912caf06a23972074289d876bce03be357998621d4078223fc7c000c16935fe478b9c1494d12e5a64d54e26d024105a3d1b36a593268e76c64e6451f1ee0ec25ec80fea22a21ed98d21ba251f08441b596398b62ba0000491181547dec6e90eaa9f9b840027dbc54fb91d657d3405a5c6a85928719898762ed84ce08fa1cb3c36d64b7b3a6694bab758a034749b976adf056348ba7f811dbd384b7eac16feedc5ccd6b8c952a1caae6cf0481ee97393511ec354b40d8c8ca3335398b487bfe1ec4503c3fb823fe178 +C = f6cc0d320af42f2c77e7dcad2fbf20cc47fa0615b3b4546a0760402f283098a2229223c33a61a65ed4f27dfc0d0b5bae59e0151c87c3332a181cd9c3e8a316c89435780170fb25af10ea52ecec835ba4f9a8b13a824b2b948c32e0974548004eaeadef23bbe389dab19e6dacb54d59854d1e66ecafa5f76e1bed6a74350fd8ca95d4ceb8869194453e30424bbf9b62a9e3e2a5fab808088434543695332e52b6ac0824434ef14d755a8fb743c65cc466f0f8e61fa5cfdb98d10c39fe3c9d9b03fe69e9591ca79bed474245f1b8541ef6f405894944ab3df30e0de585ad3174fcf150dd6923bcda52b1f28859a26ca47c9ea1431f03939f7d96077f14fd31495de597d2fdd548cfeadf4826fdbe5086c2e86a9f546cc10d77c3d9ab1a5cf5de07ced9a01cddccab39b65c4951f390a211d842571cb5f394a7f78e4aca4a6900ef8a9091ade7844709f35962e238808e6af3cff5f393bb5b3fb07e85395d6b30db5752ee468ac1939da31ffb8d6cfbee59a0dfa3cad6814c2ed6aa1c5a083be3bc05703a1b1d50adc5c4305e6a95b8733c1252e1098773219caf80cd06d4f79023c10ceb10258bd8e9e3fce276b2e11c828e194ecee96a8351c198cfa271502fbdb9a00c4a2450d8c8223ee732030c64ce77b2146ef9f49a525cc1d49c67ebd8cfacd92a1305633e73a02f3c85ba67f06c4a703af47ab74160834df4ecde78218f016456de08809512 COUNT = 46 -K = d7e81bbc389d82282b50c9227aa7214e -P = 6775fa4d69be4237ed023e304533dbc4125c776f937912f6be408dca692c4e214fdd4d242c63b25e17681379eea2b89f08480d6fd051ea8ea2d7cd64add8bd63b9d51628920ac5d22148324322c9964f76317ee1d7270d05481bd119ec0def98a6cf15b612 -C = 707439f33085eed541dd1e51e47e883a3543e6d73f8f7ca6e8f9c0e5ee1874ee3ad6e5a9af5238216f41d41bb7484b3d0043be63f9467b61e47f8acdb86da04de6a99cd169b0b85ec03b4ad41866656c4103d285315217303d731b3f380fbb8e261be0a4aed02a8787157e10915c6da1 +K = a9da98004a8870ac2452f82f2ba8693b +P = 8ed94c7ffa3a30f84f288af738dca3a6a50463c62dfb26ae5903f3a140f7447a3a1a5ead33fbbac108ce90a317fb3b2cf429c86d41350d0a249f7e85dc1394de5728b4c026795d7470cb50d36aa73822d8bd5146f2782d4c093358a0438653fb699634a807a3060b09991fe76474a2c138a9f3946facfc67bfd9c5625af44f84894c63fb32a277a85b1a07597f9639621d15dad61b9c1c54935d4ca63814cfc4384f8d21ce5c8723d20d4f88d2b707be39cf9794fce648b432c3e6ec85765c5e20befa0622eb190d70d7072691815c10f20b7e4bfda06ed82939f32f230903626eba5b8037281c63b4a8994df0c82c9d2093082486c8600903bde303f356ed7c9b3589f4313c75995dc405b99828eeb82c68316e3861dc703dfb79a29015d02002d1b82287f217193503c933e7c07aa9850fff806701542e687965c848c7d10e3be0600abf19a520add64d6939668b8205f30dd6f0c3499e141c4d30c562cfa6874252b85b276d1e56e6f2078b5cc2099edd756178bd4926e84ae7df4992205019b7f6d073fbc9353a0bbf154aede9efd6e6faa485c674164d0ed46a24d41a44c912175f70302b761301fec1773601783a38eba72b062a22c6fa8a2c5645e836df2acc322001d1abe27542adfc9afa108e502440317d53b78201cfa63cde09e139f4b25493210515730a787d3498d41ce115f961f558fd9e025bb3f0abfc5598 +C = dfd107661381abbe15ae8d54219289c77794b36340721d835e596787c12ce10e30748165aa0be8a5340af667b1646cd02772828b93ac746771a393ac1fbca1ae8a6b8ba8c460722fd1be3e691e14e863352073a2d239498a28ef50f7de6261e81175da7a4a8cee3101dd0edace9e6f9fc0e79c758f34e32b1ce1067cf1cc7347b84b980fe798bcab4f22553a6acbcdd6490214bf9e685bc8d7415fd81d1fcbf564f63c834c470de301f1d736bfe8cee81cb416e084c15ad2008b10bfdb7f68e71b8fa0d16b97d1fb1f2590d96314a8332715e611e8ee3c044f7acd506db8d3d291d8d01bd4ab024f587faf39ff18dd0b6ed51cb3200c218a2592e1f776dba60caca0c242e623ad6c5bae33f67c4b271ea1fbf3ef029e2013f5770e256eda44c525b769853615adf53e0a9183ee3f5a9de2fe5de9bb49ae7d4eb68d25587dab5789872376e030ae66999c2933195593edf0b2c3984c36bad1dd524d9b44df8138f816b42198ccc013a01fe54def32634e73f0d7b76ae544a6f929059f2dd6bc4c16b6b6a8fd3ee1b34b431a977da6dfd9527ad5c792c14d9b0741cbca40d0c84fd5ccb616576dda6d5fa1b10f17f0c5894a77eab224e39874f37ca428add08852cd98b7696413d91af479a5ba75421ac8b9842d24ec30f23321c6db40258d80890e4f4162184e53b309ae4507c823c7ae74b0efcd2acb934a1b49c5c7837d3ac25c4babdc30b7de1c COUNT = 47 -K = 70d8fbfcfd6e144658c84e11318a3909 -P = 9ded1b623447ebcf29d9dd373b168d115c9ba97672aba3b72c95f3350d8c3ccae5eab920fcfa07d5fbac231c9f714f241df330e210c9beeb44a6815e42535440aeae91b4bd7e73044f55ee73b1f82954fb9fcee862027ec0b6394f795614f7e0844a15f568 -C = 7916bbd621399fb52361bf4b3378a2cc58d90a9d206c8eb826a4fe6d88a405ab5238c6e3f8c4a9a6b81e4a48c28ba5fb956be39f2f1658aaff03c081235ca7ce27bddaa8830d3e8480eb8dcb4cf740d8cd69b2b6a9b722b9e18617f7a307ae06bd1bb664cfc7c42a9fc7c91bc9c5f156 +K = b4e94a31e83f7c95b3fe886a593012d8 +P = 67df3990aee1fbbd4eb6c154d22e4142d20298bb7b0b347a51d233277a03f83a11ccba6ca4f0f6085471471efcb99ccdb3bb13c0ac678f90601097ac969000c806996a051ffbe8145e0649206ec7d2c7df0579749944cfc806bed1f2bdad09886e6abaadf519e7f22385323b41786d1111d0ef3ee7c7a8e159037e9e919de55c4dd5f91e550eff1db67906d81f9c928c332a6581eb7c4a7d620ebe82e4ba80abcd8da7781a043068de57befb2d43f3c4b65c781938bc9cd84e4235a64e5c761c1831e8186bd1e6ad741df3cdba41cae917af73c6a6bb5fb2b77cd9fb5b2131fc47e478ae2620522229746295abab8092497097f8cb90b96617c3612e469b2f4b3ab930f78601a9bab7769ffc6bb4b9c0b27d1a3df9f428bf5b4a225442adda96c5bbd3f2caca36b4c85a526706fcb2d08539c6bc60bd7fc1fc4f6aa5227ed4c56bfb2e63dee625c82a51078db18dbd854de15a2b15c9733261fbfe30257ce890e0cd69b8496e692b1c512bea0f73e8a0cb9c265d7b23df0a800a8dcf39a015e2285ba70a4ed8ea1810c51870c03fac2d6173a7e82812942162b990e7dbc02974a28574935634332087da53c6c840d042bef4543b5c2f05f83d25e55c8b8d2379ceb30ccc789f7c82e4e93541c3fc44e94481cbb716b95f5efa2d7c8627e3ec3ef259e2b543ee2ae19bc1cf1bca97cd1b9146308708aa43e7a56044a5f696dc71 +C = 9c52c370731e244d7b45cc763cdabc7e5faefccb155180e01253b900a50faa75a2ed4d48ec856d3817a0959a89f7a2d224d2b6a1fde9ef67ef6a6dc81aaa13ff7122b204d1223071523cace5cf2e10bc7442143932d4df1be14148bf4f8f24dd54b57b52df0f4e450e8f6dbb14f112e03adc5a0147fd6c9c760ee24d3b79b8b5e5d8bbc8a15fbb4f1575303c8fa4e3668f8b20daa71b3062f7b2357000098b0b76ec8cc04abee619d65359f8b462f97d9d472c2f373f7327e8e69328869ceb6ba9e2bb222a968b22b6781e15c05a6563d28c5f69354bbaf22db45fd66333173ef7fcff61e55891f7d34d5e195c716e0a23436db3af7942cf1502428dec9a83d4ee8d86d30b778ebae471daf258309453219c445a0f2984ae727f68f965036e13c46a6105dcc48956187c6f3d6c1db0e9b0c3bcac79fcb321cb7b738d92e1149edde21178892291fb6f30a6a2961c6b3d66c74a275f2d548a90d9254decc316e3168af6e6b752786065dea1f88922bac971adc468f4be25910569f745c16021aa15dbc85f35a3289d8e99d08988163856397c648c156d2e1b3311648675b31f80230336475aaa6fb9b1d3e0ff0669ab4763aeefa238cd7b4c876bb9504a1e798fbe65d2afcc467f363fae937126e43bf4dfe5fa480205b80761879168b4366a32ab630d504d69932d4aa122ff5a0aa78613f9213a3965642d0fc3304fa311a41651ee6f0391f40948 COUNT = 48 -K = fefa7f4e3d4863b91bdcc9650a36b3f7 -P = 24ab90a4c7ca4a19284d45c1ca22197a8c8deb6d324a7d40b2c7a5ba7d2a70c1cccf9730dfda169ad283d59d26524619ec8b6de252000c38a21c475299b8f93d8ec08d41ad5b4cbc09acdc28c75b5aa372993bb52eb0518cde716364f4654322cc3424ef86 -C = 78e8c997ae5156b2a6a527a588455869b543fe3ce8c5d9e438d9ec19ccdc041697386445ea7b8db97d297d4943fb9245c62d583f108c92860a33c46461d610b5ca94258d7c6713efc989aefb664d7e69d8a0d4b2214736dfd8c0a30272d10b8a6c4d38006d7654c2866c93a36e2c1e89 +K = 7a9787f89826d21b6565b91de7230ed3 +P = 267f24192de7c608a4e780cfb65e1490e37ee918f09a7b97818d44ac9852697f13a9afe283ed7f7eddf54e993819e2fada707d41841003b2fc07f92c56860993fa242807b4de925f8c507a9829160168f1679c4ea280fb906e00b60cfa55a7226468e038227fe43badcc3fa0d597565cfdc3b52f60801140a3c934707e9929c9cf75c5c060100cff630eeed0819bcb77a9a418f64391a4a202ffc7919b0409366cfa125e17a08fdd017158d818a60a31d7773a0a0efcf929d736e33f721ee32b80002da48703fe3a5d1832219dbe4f57eb9c30abb66d8ffc1931d0f7c9719dc130c87c38cdd0735f295c973a666fae87e7c115d866aeabeb0b73eea14690884f9520f71497836979ba7df0470e8fceb08b91690ad17fce23b667ebf2cffdcfe320442897a1e5d721992f76ff53af6694c7b3bbb695e37daf71bb8f41b01ab5a680e28694bdfb755b3b2fc5bca6bde368071d794cb26dc7c11864ed87cfa2d5c925c7757605e0ac4a14d6b5ab0c6acf64fe43551cffd7c422d844e927af7118574a48968ae9896decc72f2067d916ae365caa0f83f2e7f6c563502c7761b23d8181d1a94c240ea54a387ab29351bef1bffd7eedca3d89f9798c680762f3fbf96e3a63bdde7f19bb78e9c93b381794a80f01c261c32b4c7f91dfaecff368db14a918a58e88bb5d1a329c1880b27d1695b9fa68ae22c24c9a10496e9b8ab8228f9a +C = 03d7ce833492eb1e0422365fecd5f333d035ce6cbf1e7e6508a912a91d269adc96595cd5d44be5f6cb8555103c8674c30324ef26e6c910181c91638f00fdce47d6991ae879b19300dbeba911deebd793ebf286a543bb1ee2cb78d62f427aa2dac678d352586c7b0588539e1ae6b4453646ed31134cebc6944d71a115367bc37303b729a8cad572e56a048c23b7b5f6c58c72d7595ee0289fa49760ae160f9dafd88617a056d07c855fcec5f98ae07a1f4d4cb61ebe1d75d979dff5b9217c7ccc37094f9123f484a4903c0bb4fe6f77ee32056a799cfc577e9530e124cf41c6a632d41a81730c50f17061c6f8ebc5a406c4ea897b0e15004431201d2984cf9b05765ee7ef9e9e52a7fc15f176144d24a35780492df728ca620bbafa551fe25a739a0971d0c6d53126a388336e528287ca6fe05eba7fc4474c4ee610ce6b4c099ba0fd7e495d449336d8a595f90270450b1967032bc02a8fe734740140f4b513a51fc9ba20318f5830df566fa5b87ec477a0d39cb51a4195f326c3c73563bffda756d4ac115f27cbdd9aefc78641825f9e218fc3c25ddfece6de99613200cce0a70df350a0a130b0a9e7d49f69d0ebd31d72db8fa5d4aaedc369959f3ae9c86c2b2090825de19a30f03c724a847054112577215d021dc1a509da266c74d7d0bb9258111dc82eb146ca9dfa8ecf069722c0f2c82ac0f84a986d927265cd9824df09f06cd8f2b3a73a7f COUNT = 49 -K = d3b6069515f908ff3768f75b9b8b3333 -P = 692132311925b3b413f6813a62fdc069f5eeefe81e4f2f0417a8f9c3fdc0c1d8f1c21dbba6f6eb30fbdec8baf1454a249009b02a50afb43c46ee292f944ee62c12388bd6fe5792032c7c9f0a52eb1189714916766952b19f8dc55f7dcd18a82a8ec40726be -C = 92d578385ba9480e427aac22a64ed89effd1978f7ccb75ee327bc63f3941fbf46eff64a66c6eeb912ea446f18a55f3ffe8b073e3e84ee7b8bdd283702fb4714bc669ac27f9bc84d5e815b54359bdc3856a09bd10018576d9c7909e7c118bd6d53e3be49035fb2b1a2bc4acd4d17c024c +K = 09f7483629993da5e80fdbb232e44508 +P = 25a645a4ce1ef94108b43143d1cc450c37ebb1796abd27f76479e12f7a94e3f2fcb63467cc33c6792368c2b07cc9db53af8acfe1d12040eb75d78c35f765498775272cfdb20023c1ef2352d85b81a8caf1740b6ad283bda507712f842faedfd7b9a19a0f52f55e9291596ac2932a1c2c2d4a7576678fd3cd44e4a0d9cf9669097f59a6afeb650eb339cbc1b3fc80c80d3e730d1bc13307891929ed1b168adbc8a9b22fb89cf052f8f06af651d357da99d041fa2ae96b765c79257cae05ebb1c75d12427dc73a3c91c0315b94c7d047b486a4281de46636aad2efe99402d10d93b9accabd3e68d136b266fbf5ec7398daa8e5cb71c8a053613e464296ce714b12c2ce4904a581ef9e05adb8155f6889a893bd5fdaa24f8d50b6b2d2e23cbf6283e5458ae676a1d1ea5939b28072ae5b96f8ebb7b069645bad47024d1d1a24d221e91e0894719aec21d46a29983a93f8e3e3e17598cb117f8a8d074d4f51bc372fdcf77e8ed9e9a7fd0e12fad2b9e5cc888ddbf8703c7077aac5a594391086bf0e99ba2916ce52deed5133cf6e4f930bb234fdbd4e5d098e940c13d9d44cf31c044297e29c277ef550d770864e27569db27b0e835a1063f3bda49ff06e0aac8a56d103cbcb42a958ceea6d35339c21cffca34523d463a6db36d1f99bcabdc84d03d9af6999738c7dcc4d74d6aa78c19b9bdbdd4c04bfc0de59019715f65ed27106 +C = d94f110d5b9098a5cf3c555b92ccca6252cc49608d0a23d91d6743f464aaea7fa4a2c56bb331cbea7eba6bd3a820942ccb66f9bfd2f88747fbc3eb21b4f0c5fdfb985216c7d617b1baa62cc039b7312d0133f72c6593149dca700538722c7a8336ae1d43920fff1fc2a727b42405a932f05ac4abfcf3f9b0b4fc938947df8544b8b62291dad3fe2641b71c9cf52478de0e6058d29bb9f70da125f51a0a0052a0200e78e8bbfeff28a3126704f8603423f9b17b636d0506473e9bcfcca05da776b1e6ab0cd71db26d9242c519f02b10f8e0b4e864d5ca5f58f22b5e84cbba7a2f214d951ab6c89d8789f9d02fe55e95be378df5240db067b0a600695279d2e2ce145a3e0975507a177a2c78f743c08b5a071c72543d399457cbd315d9c16ca19c8489a93cd7326b438e7ad5986cdf8839d8ac20f630a896e65a6de961a98795ca06217436a96cff435d9ed55067e4daf451eb03ffb2d7e38e6561d51f3398eaab219068f7866de5afc5a4f2c5c53fb118009a10ea0788908edc4fe8761d56f2f7315ec7ac05fee548bf014f49c62d088fde60514bf971f4bb1223407e7240097c6b05ad4c772dea66477c8eff9d2486937e512aa41a0dbe6ec0bf6c126e4daf20d81f8369a4834688e4d1d15b5ed211a3acc9cc1b1f36c821fef010bab901afcaf5b7cd78799d9b5e6b1acd710ee7ac4e974edffecb4eb56486dc1712430a10950071feac84334925 COUNT = 50 -K = 2e9ae2dc22b780fa53cdcec19801ab74 -P = a952f41bf9bda3d03f8b8908841765657a48a1f92e6eefc7d0b2ebf84450dab13b6bae8b8e2e82a7f11a65725911940fb83df2a712a24e8fdf4c25611a322cd13000441248bb412228a9ba0c00cc7c660fd22b1c29513695139bcef2d6f08e62fb0bb5b453 -C = 96d4968655a8a44097f427128c7fbe5cd5e7d84beeff0a3227ed261f5ecce6a420f76cb55d4693a307f9c0e8b3d4419baafadb5f32422ea653f9b1a6fac2bb1fca51eb577b04081a51bc56f77f8345efe0a255ffd80f4e687e9a187a23b82dbcd2af2471a793f6d414b3db6c7816c8dc +K = e81bf1871b856bd63dfa8f01ed929ac9 +P = 14a45b0b15f6729853d7ca4444c97100211e5139e0c8fb0c76302f4afbc823fa4d194ffd8728ddc0b5a8df23462feb5dafa7b1713b550b6c27124ada24a8e9478f37d531b4eb667f99efa68c1331a0c972f545d598d528849f44f4ac87610a72eccafb77be63e9a5fcc2022564a1388c0e8b7496efd16981f817c324dff42e490c0c11fe57ff2dcdb7396fc78196ac9f908c4ba997db89b8150f74c2696c6913c797f522ac466c3b3a868cd4a31c9810bbb7594bfd502de8584c16ef0eebbe34e6f48f5f6af68db77e42f17da66dd8a348652c86cc6a23a53e818135aee329a2335ca658dee111566347d91f4e186632a58a55b841156708b6777f5ebaad6aa8ce7d8cea15425e5b13f0dc74be63ad555f0adb28e513df2b510135b3ed3b9d87b4aae575f32ae6b95236cbcb6e47a7260d00e04945008b963d4fddb5139845928f0d72596697fb8d7f538efc52d056e872e8bb28caef06f0c25c7b4d98d05876585da2dfa378537fc4c4349344c60421fbe3c81adf09cebeffe21dbabcd4f754834852bc6d4c9866f8fa524ec3c0bb1b6db4c22725b1816552da580a28e603ea27f03481ed2a97691fd923ceb9d11cadae6efe0183f2e973bf5ce0ddc9fca5ca50db6addd7fb2fd519683aca0cf111eaacfe5cf470039f256fd8c9e8c4300f41fede2001bb05cc3694b1ceb2078ecc8eb73a47cdb2a20ab2676aa5dd35326dbd +C = a9bb0b22dd540eb75e63c5ab88d3caeb7b5e3b2913dd8b55d8c74681b1b806c57d80e47ff3ccad0a03c2ba357b239d941aeb0733dfbf2ba40f99550f60f8566d5135051fb1a8b95bc1e1939ec307499d427e88ca2013a993fe4d9dc75aaae7ca3036f8f8d0b8b9bc6ffd463c51a2ff44ee7590f14ee66f1bd797badc1e5ea3f449bb73d2625806abc9462784d89690ed543c2ef60fc4afd6002102f3524a35ecef8043e8ef2382f49139e81b0487033561886bf22ed8268c63b61c1b15fd9275bd64eb4603ee00a1cdc367ad773bbff2e427051a5140f6e6947b5c06c64cfa08da7cc8a550914d6fd9bd30bc6d276ceafe79b50ce7320cf9d0bac496a87828fdb7f28b7657fb1feea056763bcec1fafe08f6d2a02b8f755c61cd92676b9002faf44c5f1afe3235d1e943f45f71eb1faea3d919a6a3a44af8482f6d8a029b7a94b421cae92973f0e84609e302699cd84319f61483cc762c07f27d808d6262529f19dc1bfb4f78755f9caf16ebda749abe1e45a5be3bd0bd6e78d455bdbb4c175de2a36b54faa135ec9a31f1d23867d0949eb101a5eb7ebe699133b33dd0ecc4708cbff4f7522a109b47a2ff77797556043e3a9bf87afdf1db0c2b4159dec4ab0ec1a797f71356121902f0e6bd4a4e42f37903a57d337564d7f348db9c65e9a113470b9dd6e019a1820262a2200fb42f8b8509d6b2f6af2abb34f6acf207149735cc3870d7f5f93cc9 COUNT = 51 -K = 421627a5e352ccf7481cf6f873da43dd -P = 4236c384a0ae17b3ed30c60e1c5b960402d2c442ddf7ea8eada2455e15ce7d89c0446a4a12c44b62d68ed045e7f0f0da95b6ae47fb451a15f65e317356bd8258803fcf10dab3797f7be3a29aeeb264a831b9261b2f6aa9e74ae188ec07605035e4311b54a1 -C = d6761171ccbceb483788778f0543576f0b8096a62dc3af5c5d271a62baa4e3476f1da662f3e56a60da29ad56dd68223ea2e656f2f17c75f2a018e6c2c4916683692235edb01144a7c79a9396a54e710cb3c9f72342f50ad402c536a836421d81d4472a134549f3cc47fcc673cddbec4e +K = 92370e38c550e7ec7736846517ef4d71 +P = e7cdc890aa86a68fb8295dd8bee1a3e0fedde46a2a0816f9df4ea38345f6f14dda94f2a1f699367619c5880a897a971fa831b51774190f1b43719fddf50d9a8d91108b9fafaad4ebe6025031d478c9e4ac397342c3fca65d272fca8dcd50af85b0a5b14b1823288e7d888d284b2511962d081dc11f39c32f328cf504611bb9466411d5fae6adcc608588b41dbdfeea8993d124038637c88b2a197aa83477e3b87ecb8bc47136898dd024cd863c0d9bb377c8763f7d7ef4f94fce8d83f9f81b1f5e6a4fc73f8c50f4a005008a8540a8c189f4ffa8cf3b86b8437c2d8904c2ac29305aac98230d5b4d7bacb7076ab8a8d39fd0be7b6cfabe225f2a2f48bb6f0226bc11b1c0798ececc3537cd6957691ed8403261d1b7683984886c7f35541656d204ad0eb66a7d2125ff7a1c1c6bf254ac2f709d6c725bfa2ee569356d79b5e0970e3eeb67fbb3b2321c295b82e9d8840f04f5aed896b1758e07a63b38adc71aca0203243eaf170416e78369d2998d990cebdd1b1c824e47914dfd990f2086792e5b83a30bf8e16cd3f92b2d16669c999c6440e9a30c42bb9a47369e4152016e9084287857cc380f3ce83425720d2bd7f8d29c37e9f9834847a39da237464320aea1b60ebd3db0672605f0f7be9bc6fe62c63633d1921537011dbb2208a5eea77767d9cc497bf81efafa1835c27d0a1a359aa95ba8f7bc19d5807ab415842bef17 +C = 910d73741ea3cf569dd90c33b38c70e13b248b72b7aa41fd707af6ba9677c1a3ab3a1226e9cca744753d744a261b0700a477cad0e7f51a469875f1927500942d91681b56a21d535339b2eb68b3a1d69388e20b5e0e83818333291f34054d2ee4f374515747313e75f8745e307c8491ac628da97885ba3f6ee550048a85c5c130120fd1d0e53f3abd0f54d1cfc4dcb17df438ea876100d3ae96d419d2437d892e35bd3e896dd732723afd23298db6e23d296cbe049128c88a64c3e96aaf85fddb466600892d34d2e86fb391f651a842bbc7da629b774e51514306e2ab9d3ab47408f34e7757cd2c300aa21ff6828af64176566c85b978f1bfb3d443be647eac7715b33e11db312f0f1ec0f18d87d053146108747ceaf5acdd9b640cc56fbdb5189bc701f9eaeff6351453bf45ce677555d127e7288f763b61f7de27edeed9ede8d57af3003b6ecf73e242fe5aba91c9d9c7687217580f4a0bf6dccdb7cd2bea6f13263c2ca44bb530050802704a0afebd511d903acc33d4bc24cd5072a35ad85e7b253f23b58799a7c6e3e8b50a99dd55d5991f669f465ea9fe07be6f21e13c260f9db94fa593b5236241cf9adcbe564036588caddf030072837b63f2c114437d51809a9e62bf14fdd8c9148345c9f97b7ec1d879915bf19e2ee2fd56bad507a6501e4a16da88f867c65b61b19b5b49e298a82e6916fb7d2edeea9b600f0144b2d483640b1de36e2c COUNT = 52 -K = e73cc79646e6654f0ece6f648605b893 -P = ea53fdf834517a0feb68a7b337faad1557726b5c25cc9f777eba489329e234c5c69a1e49d2c76454b592e4b8eb5f7ae18aeaf1c640b02ba6f5d8512daf5fa98f9543099364f42019e33c91609c0adce0704974971d13929e6bafa89f210007165c3f3fb78b -C = cc795e04e6bfacb0fa3eed941b0f24c210bb22d46befbff42894f59e1680fc8f5b98f93a994b1dfd5318738b855c80968e9af760dfab0c6bcddbd717840e3fb713a30233b5cbd55e71c3c4c1eb9f139ad7253edad173d288a936c9245338b773f21657aab273144e0d2e0b4df68216fa +K = ab38720a2bd7a6cb2d85c6c12c39ed7f +P = fcff2951e3ee55924ea434d9caac4851edcb81ecc90b4351aecfb53ee3105890e46438ed5e32bf195fec1d95131a3f991ab44dc9ae617c8c74cb26ef1db6013c34ec84a98be1417e1f66501c91ab37111dbed2915763b976e8367dffb099fd506923a2035636f55e378509be598b349d6edd08d1c29e78a7c799e49e63bda01804112fca8daf558e204bb2a05af3a80853e7f31199c4414c2d632341bee8b2c35650579f955932ab0d9728d807d5f7cb546d692dc5569ba360eaa220e7f2d15a5f785b5579fc1e7fe4116c46653efce6a7898df83b425e8dc516d5b29199b047a3b6df6d585b66775abc8b0e686cc9b1a7effdd0db6822cebcf5a88d03418433f65cc538e04c5d3092d07cc39426e750cbc5b759496b6d9fe7c07aaa981a0b6d80cf0f22ae7b9449d9a077724b75acbd63e09ff9b50b6e10ad874feb47608842444838e4ca3a451d5209bd50ac9ca5662314e8070d23bbb7c1eaffb0f14de8d25effecca3aa6fe8c8a8ab5640a162de889d721917def11eca1a11ebab51611cbb98bf165c9ed2245ef28567fe2643e2e082bab4ddef871e7f2c10ff40df72107b084302b8e06dddf7a9a475e65ba3358f03b418cf9624906ffb9b65b523e3dc43fffb517268dd52ebe55e918c90a5d4960af307a3baf7069a3a4f76f9568a56b39377a57fa68abda59aba360340b131c9af5e6ac9a94aa4a25a8c7a13e70d3cc +C = f360eb495295acba7f5fb18ff61cad12d414071dcc4b2dba54158b2a78124b13d4b704d2c2a7d06b07f53c0799d1388284a333eb16b9ca184fefbcd51b3bd543f99c877650cd84b7aa974841e24fafe6e142c1c1e5aba00382ea2e175542eb655c1ce53788c493ba92fcf5298306eae1f58b2afc07721ba445be2c0bf99b03bdf8a66caba4a7a5e4c13115bdf13d2e7b2576463532ec9ff91ab64a3776a837cb117ec70c065e89570363c901974cc0274a8f2180716ef716e9c3af08f0ff373a842a9b9f1549069adaff878a9695af27e06495778279b1db4aadb6378be00d167b40c4129b539372a84c62689082db7b70b3fb9bd525e1a5998678e299f9075e08198a1fd406511f3ee51f6b45e63aeeee27efa467324c6249f6092f2af0366989a3ec3dd15643e64a307e5d2dff0b9561d05d27074fa7e8d0a762464f4d63b2e25871fccc30353fdaa06c3048989e76dc6a3988d0d8f491cb6b04dbb3520b1e5bfd9c7bbf255ba44c90dcc9e351b8d77519db5f2446f65f41cbb205f78a4f34758248649330589644360bd16f81131cc79363383bc8bf5c5410584371638a6ca423e190fa31bcc80481984a2e2b39fe0e9fd072823307dcd45e9342608b54a790a9ec04fe9b13297f38fb74f857fcb0469aba4c8d1fda89d496ad8b9752fd2afb406368b3bb4b04abe4b8e65f04052278ee87027c9d62109beb6a36ff8db4e91ec05e954750de4a COUNT = 53 -K = 1a63f4b36af97cfdbda54f97f3d4fa6d -P = 1ec7f286b6272747cbb3fdde2d7d58f87650cc481fbeed4c250c2fc83552c520b0c8b29ce9abcb16d882042d4107e3c62f825601d01cdb95df1a4f1844d1f1494cd896909d421cefeac07e259919dcee0aaf53aff926c59e14f6116e81e7cccce84037f72c -C = 9bf0b41397fea8d5932ffae4e86919089fb38fcfaf1964ea93252888e5448620b20e94138a9a8a835e77c3b382a5366ddb203318b3902eed1186de7545c1cdf6bc5ba55459ec74c03df68d1f96ecac3ab0178fa844c7898549a73087e782ba5c342de888f5f3547631d532d5d66151b9 +K = 16d6a18a02f0808c3d6307c11c3e02ef +P = 0d79699f85aefc79c011a845aa343f0aa015b3033ef33c2f415a890d42b3f5292d57738899768b7c7220a807022b746704093da3499929edfcce1a74c2c69cff869652e829fd3d07329e0ad34ff450bbd18c18e850a229b5f989fdbac633a1c4a14d81ad6f00d5f554f0305b9943d24f6c57031f3630fd4d54081382f23013c7a738aeee2e156ce293b3d5722faff72aa2509ac8e8d2d65054a23b5091d394c7bd1374cd699df7efd627ee09ab57bdadb6b7739f8f0fc51079454e3e988fb62e3b0e27b042e99d36ec2e9a1fe9bc27ede73a6905bee9f6ad38e074de3e7da7b3c66cf413ee3a70e6d78dd93530f3821a60f931f3aed716e6aac995892c4c28fffedb028481715afbe21484db003dfe8240e960319c3d4b4d6d4e7c66e33227c10bea8efb56a6ae0b2384f9190f5a51814f106d9fd9a1fa703213320d0f9b41e55fd267ed3aab47947393756d4b9435b7dd86531c9b6e8c87a92afae8faff1ce45ff89cb9b123b7e2ffdcf0a53a6fe0eb6e5958055f294afa7ae05279c4f8e8ea8eacdf36a3eaa36e693c6369b8497de2c1df40cd54dbd27f4d8ec39a509698a942bfc1c2e4e854c61862de1b04292d7fb06ee5ec5021e1a44600cd026a3490ae5801f94d1a17850242a0868a927d78551a9f10d943866be29165df247d22f85a9556892e2f56052a922d1ed46e79b7cb8a04ed3b0c55d4dc6ff9d9a1acb2febf +C = 7c9ca191e7b801802fe0a17d9210ea1f25e5591463cb03a5aef31c1bfc42cda8f7ac6d0616ab1042ae30d1a04822e3603c1e1e52427aa2f109c347717c06701bee2a354bcc0531f5c3225053cfaee600700b4a7147ebbd5969b36ea296f6300774d1091074054410d910122ba21147345150c2911075440055f2a8e24e7b7b9df4583c90410aad38b6ad8e8187b0834bff762a00f21bb2a0e642b4dad1033553161a4eab0e735fbdfa7c91aef5e1cb9cad01fa4525b02fbb5e3ee0e2ce7f4e0b8b6cc5505dd27ec1d98dd7a0bb23798754943d77562dcba610f3a98a86dbbc7d3a2a59494f7a9e77eb7b2dfb21d1021badf1c7ef04985fc9ac5609427ef248dbb46fdbd51be0fa5d1817647ff8e74e23fb1ffcfd10d83f145aaadbca9b7d8425e2d61a212553d949da0cf9c2d876df1e12658f3d0f3068309dda08d2a05b5348d8d68075164dc3e2f027c66b094c7d5310ad4d7ae3464874846be11a6a0e0ef270c5fc15d7acc446816b8323f6c170a36898b7a234f8cbb9a07d38fb96483defa055c8efc23ce1d93134a0a3a9c04a442eddedc2128d9a99f469bfa919131ffecafb76dd4644fdb2bea74537854a8f5da489e3a34a490b98f005d2fb260cd79d5c68ae0cbc2c289549d1914a5e2da00c28b871e4d82e5ed17ed9a18e88d1f45c67c685659c150fb1e84c626c5718a5db56ba09d6c89c72cf5860185d8f6e314280522cea989b68ce COUNT = 54 -K = c85dd132d23912b02be3f0734aa24e14 -P = 1db0a75f25b9cdef0280d74adb681ee802be71ca088bf1f258e4d8692e8c55899eed496445e9c8edb2fea4becdfb3b33c1fcd672e43966a6f1b8692b8ab7a58e75886c2b42a985fb87f4a26883ee8335ec2edb5f869948d10add93cbe02149e33392905222 -C = 9afe84ec4b2f3f9cc0dccdb795d8bff48c22090e51a7095ba6abe31d0e8597aa1a256322b294c2997e25b40288f97057f0daf597273e837a8c1f3a07f2b729996b91f8bd912c187670d466bbbbcbdbc6ee3f71bc8772cd02534eda11e2e1276f99736ebe7f76036d9131e06a2b2b3256 +K = 69bc98b994b0daddd98c8eb708d95435 +P = f9a1ff0da45436e2b1b5be2b791a890e5fd274bd8205d820469404fea3b58b6148da7a500f1ab50773445985285dbed3971cb85ca135762e32c53a45f57591198be1b1dceb5ce7244e611298799ca11ea3656d06974cf267033166be46392233afd5a0c3a95ed18371dffbdc4646fc4aa03009e1a8dc7bc0e8d79ce54dc864a33c0528b514c3c1c05f480a312e04adc9d84679cac6d5efaa38ac2c7dcf9893641df7da6a02c8e8c34fe231c682a7e3563e64de45e0b071c2a34a65bf0c04abb3aa6b869641542e6615a61770086a88d653fea0a4101c4566721c04ce782f44c7f5a06ce5f694b841e2c28f5357f757d3c89be624d0c03a620ae65278c2f7d72cb7741f0370c49cf96dd39a0694e2b91c68123b68a804d350936573a30d8687886b4b6c4e2b0240a786805aab2bf42e91ad09a62d16afa02d85f50ca58be2c3c7a9b2ec0b16f9fcdb5e1118e6a31afc7bc861180997b3957be87242f49c32b87013c38278ff576a9af9bd1c07360ab5d5b818726534a29df27ed92faa25728e2089710f11cd660fd8dfd0391ba7016e962a2e2524a76276554260336634bea99b3113a439e7482dfa90765f64509e63ec10fe0da119a7f6bbdec646081e0896d129f7e43534d1001fbf54168fd25d52eb046d9a6e79376ee7e9bbe6ea199048b23bcdb8de75e2ffb99a60d425a4c99b577a7eab7e9c8fd1e1c6216007de62d782 +C = a8599f62181738c0187c6fd31b47e0fe2519a31fa9d66866b33654ea33dedc1cfb1a27084fc377c262ac7fb23fc223d055bd26c43dcb9ba6bead5547afebf8e704e1e14e4ead10c60c908886cfb1a9ea841dda5f512f70ce318d5481e12a11199a72e4b5524705448d13066122e2cc920e08ef53b8566114e17cf9ce0f31e331184e2314d876284ce25a2afd4c871a1dde02f0b74431880c6e5ff064d01ee7fa378da490f9c193cb055955fc28818ec66cf2ec7fa18743e2e7cf78db01d014d879e0aee842da20d7c09462f2e19179e058ba42a228526d5471af92708ccdb87452ae42d49ffb1e85b104ab8a616be280e1ac1991e86fa8d5dff29d2e889b602fe4ad74305639537726c33c737eeea0c2613dea1796f450cd75de46a776a88f36d10aebac4779eedf96e33c05b67f11451ea4c8a605fd2827f1acbd0a370a784837a626f50287f111891a965749f495206457ccc7eaecbb1e754f43763cf2dcf9cbf3091bdda3ded8dfcfc4ed64efedd0589d55d91df73434f801e3cb2df5d345cdff25406b89729caf98c20cc642d2824aa0adf59d7e26fdab5c256e3f7f3db9b5dce70bf86d5ed4633263e73b0140419dca24bfcc48481b1995a4fdcbe5b10497cce379bdeec0497bd8f7646de548a69e77190400aebc736deecbab1031ef664f2cf842dc89478029ae76ec15edb7e7d50242d1130cd54cc841e5e9c2f0aecd2220193042b767cc COUNT = 55 -K = 4775b11abc57a5fab7255d9c5ab72bfa -P = 0e56a310d35baa8a76a90920a0586af82f2c11e54fcbe9585c8cea3524b16f41ff568fe6654ba8491e295f27e9f1577f68bac5ea04e9e0a27ffd9f52d829a2ac3eec1ca77aaea5ad3ab1202f1c600fd5e4ba79f0db97ad5e966df18019106c3e585174efcc -C = e0ebd2cba111521476136db62daf8505d5c53c36756145555bffebc8aef9b12e6b67675b1703b9a4c3a7a86e3cae7da8ff64bd84b4f37d59056a2f28b69d53a482b54ce6b30c01c615c0d1bea820e9b4a3b0ce106315e5cdfc9b3ea7391b48bf8132bb68eb916d5fc60717795f413c1e +K = 4275ae9152f4bb3da1bf7f0829109e88 +P = c448d5b87b6c9f8db909a6fc370ccc0549da8f0c1fa2847b214662ef0845df55bd2ea051eb12cfef2e6bfee05f1beaf2f263bd12e48286574a3aae3e0d058f0915c2319e029ebb3962cb19264e9ed0bf554decdcc41d325dcefee0ad0cf2cc8d182525e27e83387448a084348bb862a45fcbfd4874275c3cc6840da1d8469338fac47d5656b954996d987450a54da88c46d2fd2cd2139b1a267fce16e725a0af00f4bb24da0631bb410fca45c63c644655c11b5f6492677a03eeee19518907fe557309d5d9fa6714c2e8dd44a883963fff107dd556ed609b4d87186c16fcfe44e5428c4ad4c7b2e6dcdef5e81b6cd84940ba84323164cda39f00d0b962254ef0435c0fa9cfee5e9a955f0866422ca523ebcd6c6e74a28e6737d1a72cd9f27d6371babd6a434342149442df2dccceefcee3ac10765320f3a7bd23384b74cb0f3ce6abbaaeb2a8fe8cdbf2a223ca1e2641c804fc668f902e4390d866d91584e4bcb16d50c0c3e09aee451200f4a354008f2443b5db70383b210a49b127915e567f90238edac553cfa7be2e756bd103540016ba083643b617f45a2fc2b9eeb6a35352a70709941dbbad588f00e3429c4180aa38935e091161a67c0892beed091a0314d6ef78f8053cdcccdd0188d699515d9deb631805f63f67e2ed3e088a541c75510845fe6e559c27e639b74aa8c2b7c1a52ea5b0bcaa4eae6e527056b55c932d +C = 8dfe63070282ad9e7b85657dd0acf9233f0b7f4c24989b8ee1df7b8883f7a9bb11b0f813ff00b76dc9b47a7c6da411acee28a097743fbfc08c9080954d3bac83cc58eade12dbe96a577be510ce212dd8b1271d3b563a58b30417f891fbbc711348ad9333d0a565b2a72fc65dfd62028c34496d4cdad6601d5fac73375db1292d94364a26b5fe0a5aa4e9826c5284fedde35d1ebc796f253979a37d5fb41c8762134c4fda89c5d397b12f6178b4764d773bcdd31d045641fb8c8e681ffde0bde2530a8b614ee137921a8472f54c0ffa276d3081203c066625f3a71086c63dc938684c6cd2fcd8680405840b73a50313ba525294fa1c893c4e47381ac939d3517bc7a4da1f8ddb10198ce4f9526871a11eb81087ce656a26994daa3ab5d2a23bef93e084d38e2e12b2ceee4d0bf7ac5c5987681d23ac0994efb70dc0a007c0d284c1c8c7c77c180a19b52b09d4ee536f5fcb305ba5def2a78b27b74c76aeedd98b109e2e9f404b572eca5cfa549903579394796b0dca2b8a36f7c7d03dd8219f29b147237d0aa93c76213dd1a1d1e733e5e2227bce27df62ac1f809da5e551f2077beba2b6a80bcf361eea3107c3e8d25a98c233b577b1770bea8f8ba57bcb5eb3af678cb0908ea6f977c00692465c39281cb953a03ab27cb3075d2fc15250cd29617a02281f1e70ec7cdb813e60606a7441df615e0d7228d0f6dfec03ddd0a74ebb6f937bd9660f6f COUNT = 56 -K = 64dcd38fe5307412e8ad1d76984e3e24 -P = 24910d6164ac9880a3da67a96e00d4aa7b347fcc0293cd1fc527a1f907f423a9a30765b537b617cb2acd91559a03683d41d1373745e72769ce5d591a66a3105f1b9f280cc2586b7d354a46484aa06be8f47fe08d9e2036f01804b1288cdf58c1b3c83a7c41 -C = 419c28ebd216bd7987f2926e4642469540b184a68b8c347b4f7a29eaafe2b32ada2f9569953d12a7b8bce878f680e2124d355f39619b317590935e826b2b8bea05ef3cae0d018534f7ee029113001ce37d0bab4d1c84dfc5a08c5663e7b3d3e2f021bec28359cb7643961637a6f9a712 +K = fc3911c13c52533a583c28f5b6f06936 +P = 6a12d21ebb5b52a17a3e5cbfe0e74ed2d5cd3e048d66103d9b8388717b49c04e5f770eb1ca4fd37514d50ceca0ccc82e3a032e1ce2d7b036687f46ad80ab8aef94f59a9ed008cbc7614dbdadf232af830fbe589fc12a8a13728bfd2df15ae6730b751c5a2db1573ff68e2494ed25ae9fe8c85d35c81427f6a6c44f31b97a5ac712f5e1ccbee5a4a275dbce5dac47734ade70a50e4fe1337f2d0f2589b5705f661c123bef035928e33cf2ada7bae1fda4d9cf8d39559bbacf148cd4618526f371a2056495b1332fd157c25f163222620f43660e51e15f4f5ecb6f5eeaf82f241135f5fdb6e9cd0ffa13361192f923d54d2954498f436ebdc781b4d66306b1f0d58fad58c22d04938f6b0e71d3f0bf3782d3bb116994a913a4189a16f9acdc23bf79f0921c0330c349cdca919e0a90146fdd68d8cac2c9d17558e4dccbc271769e16af74ad15e2d191b7ac1ace2b71c28c448f86c7be32eb210d07cbc9ac1d4e5b4f4d6e8a0825802e81711361a2d19e5cb7c6994bebd605aef3f838720ac79494cac90acb7265bd544b5105603c4d2aa765891f3a2ceb6a249854c827b55c4fc3002389f60ed3badc4b965321cce43403385ddfd8766df03ff33002dad414377ee8e52695a6434b816c62ef7ad9bc73214ff27ff24862fa126bcf2189e30fcb69e4cb14f7ba146ba7852a32de922b3f4944e52287cb00635c1a27ac4bc5d75a76 +C = 33b5d5abde1c6585154b4c6b4605ca84ec23844e665ca042a5da54921a62a5fb853ebdb80ffae7288f750c4d50de124a626e3e681e1f226d2997c0637f58b4f889e4e7d71539e8e7f746cb837ce8cec97751db2ce1247d476f60a6410d7b1fb7bcf9bfa280b938e9121de508ab983c02de007fe28993b6e42a6f710f89fd8622a4ebd760051eb32e46a11d5fb2a30e589444c4380373e9d15882c78e9191eb2af4a17b4496bc272f088e2a39655c077886a542ff38d7d86ec39bee07dff0571d6a6523771c62616fd9618ff9114fe377f6d26acb2f8ab056aa42924d4cb32ab413779473eb11f24b779aea97b894a3bda62b98e395c6ceca1091ec1e7a8dc1c95c6f07b2c46506b29fb7d631cb44f39c115f5034136f4aacfb5a3b77bae8d4cd23715f8a6ec4ff0dd0f12a38aed2d2041e475864ff080cf89a13c94ac95a7a4787bd6949bb4398b92c05546b778ce63e35673f5e66d77c59edb01e778a6b7d0ccb0453aa3f6c43ed632e234a472a1e0fa893da5e8fe6ffbb4cec20c9c3a4ac5b9d1ddb335b55d7690174fc391a841e7ec21c4650d82142c2dbc6de51e8cf3c240abaf213d7a2b0b3d20ae5fd8d8e022b48071901224bc444f6ec002529f0406b814441d7b1f4a0674b765d87e2d361ef2d91495b28605cb3d38c98c19ffe42356e763f0beffaaa246a9068480e808fde9f7a65fbdc9c4f55037783ad756793ff5af053f3b0a33f25 COUNT = 57 -K = b9e45b23fa7ec835018c86488a1f383f -P = 509b82099bc9d82b25ba487334a6248aa01f33ddf41144d59fd7c9695ac58213c5151115b45ad124d41cee715e1d81a2f457707c36a91b19908c8ab6c6b4e55ad7540ab312203bd47253ed74096d881d252c1a9b44cf86f3e8d654cccc6070cab4f5fb19a2 -C = c22cf109752dce6671524eeacab2a94720929b8b465fbe9ef7a843142b83445a025d0849b610a354de1485631c00f114e36fa52e881b4b6480ada51541f4e7a8ff48b661a0517f05adaaa25a8de2a419a53b5fea32a1245e4ebcd7c252c97c368284db0b645fb3b79eec9fa67e54dd92 +K = f31de226d0d0775099386961dc4bf5d9 +P = b55bef80ec8478a4fbef4121fa7263e1ecca36183c4ccb073b9b28a1af5173f7aede7f301e7d1cba3298ad5392f280a360b2f156439db7e314026545e77f1df2379695188ab3d4231b0538257d5f5961586aa717fd4df7003f3feaad4b6a8a71d7680b63050181eacb3020280c0053926ec2c02b6d2af4afad6d70e4c3d96fe81a2fe07c71c55e8f33e301d5cea99d89ae3e1101582b3cafcf93d01b3caac5abf62989a07908659a728c76c05e45ae0f43626d5b3dafc2baa5ed9bafe3ef8aafdca5f44c8615c0a11c8b567d2491472b5432d6b3784d314e9a329d55feb0983d696d2d1d6945e151bfe952fc0f19f05738c6a78121b2f0996ceeea7a3805231d5695e63f797c25fc2b573aa3dbf11432579a8fbf49ab611ffe7f43d694b020958fad32be9169d47e9ec6879bdbfedc3ed051bc2df1bd7f04ba79caa6bdb49b130b590168f4a979f3fb3c3989c1d46c6be948691d75f5fc92162f0b39a5961b7ced54387a716ef8e5c5e37867c5493e3f305faaf98a1531eb9187da580bed9f0f74d051a8e513c2ddb382b8b0d9596cbf75b9584020a5663cf3f3ba1785be4486c12fcff66c1c4e40a5c143f1a889d9b42605d2b1e3a45cf25fbda3c265c40f33ec6ae454f75e870965870feedd797d57c30de9998bb8bd7053487d287821fc4194e989145c86273f5d1dc101707c8a465e1492eeafe9b317533d6a0b8dead502 +C = a37a46092ab352715bb6295e728a3062095edf1ff579d5f7fc641686353422b67dd83ed0d4593c5f9e1fbfe6c12bcb4b623f37e5c38e54aee565fbf89ee4a0e7bcf4d9209e811c16b6b2e6073464968c5a44f1a346f0dcf59579d42dff96c84c64aa91d5b7786e2345c44001497fb9ab5a3e7c067a605c7749e62cd42080f9d28a20935e9609804c1a514c9997d044f8c3b7da2e797a4ef95ac1b57018646f25c033ba9dc14e5c26aaf250d898113ffc7a6a9c59e96c0016fa0545c2279dee3960da81d2df99b24318d617f9763b9afe02b0cb78cc672b649879632884bf39fca70a922078385d72ba41f57930b73e7aca0c41760b95015c13e0185e9ba0bc8437a0d875a43f71a93ac0f42518b1f1c842f13bb57f95aac145b241b6a21d5ec05ac78f59ff33d8aa7f4db1777ae046fb78bacad92a08023cc8421600ec4a2c41f900ed61352480823d27668b616ce05e0f891d9f5c26ab2cc468564e8cd75f35a7216a522a91a86f68d3c1334bdda2658443305a248a6932d7a2462d1f9c19f55b6cff09e57910ce7a7d54c5f70161acad96e264dfe692e1b0b3f5d32fa207cffd278315a75b391e6cacb2bcaa674caa484f18494991ff7eba9ca41ffbb0dbc4ebb9f3fd5978d75c7894cc2957b432fda2adebf8b87dd59db56afbb7673f18f127cf679dc7c38a2b5586b2c7892bba6392eadedb60fe9e99ca021736b4bda7dfc323290600f62e06 COUNT = 58 -K = c4c95bf3de6015c96621d0a6ff58db71 -P = 935ac1d38f05684a4a529de6cda3c6bcf6d328e0cb13d61029ee4a050a39fb3c3d0382d900ca8091de238d15dc3368cd5a9a3b74c26fbbf87d00d4818e5256c9cf2d6eda126de6e200deb7fca6da78b1274aa208469bd4b65b46b852d7f0c70310423e7933 -C = 38af3ac8226fcc55ecea36442232119326ea88651e5d56fed1ead3a1761034d20e4d73ec78cc632f485684335bf81ec4f5e3bcdfb6a3ac897f9bac1b8d7e3229f35b9cb678823b7e6f358e5d289ece4c8ddf16515da4d33229dd3c973f952e020f96f6ed896dba976926c5da4ea36478 +K = 2c400e3ae0bd3a53d87cbed6999395e6 +P = 51785a71d05008b63b6c54cc67f935c2041da29ba353604ed08a0944c220f179ce4fdcb820921632ceea4f1d82eb6a8d74fc85f89e7dabc6b595787b7c1b759f4381e2d7bb69bd788256c8ece6d2cddfc500834204864c6bfb381f2504a06904881610f931b46e193d7c7300f6390bc216da62d86da677deca6e6aa79ba1e91ce9341a5ed1a618d882a7b510b25ca74fb82639db84c64920263ba7ee467ac0cdd2b054723466a4000217cbf787d856727f9da3d35a1252511e2f7cd1c7b7cd95b9ca404982f053552f29539e56dd63ebdf805e9b76862d8c656698bd1ab5f3dd4ca5a6697822b2676e5b0e41a145a0ad37ce54e988c5cf1343ec333a8a54b17e066042bf7060b4d3bd22510ac45bd64500a6e368e01dd4586807e46c89bc29ca132b81e733f98f88f3472a10c9b5bf3b6428d8494725aa86af32a5d2d64494b9282ce450360bda179c50c6ae3ed69a2fc512d3377f7f325d64e0f056ae912206bc77d34e438133549855746b8ffee082e9c883eee7e9f47de80cb2fe77978f3f9d6361cbca2c59a6c930bc7faf640d053056c87f19d3f555431ec71a1cdafdab9cbeb73b3ef883166659650dca0bb8981aec0f3f45e7d170d924301bd849d31a29425bcab5e9f371f29bd6820564169ea3a4e5faedfa7242eee66b6806a4d25336070950765d5468cbceba154f51880f07ae3b1db670359cec0b2e9ca64622f4 +C = c0f68fe293ba4f72b88bd9dc57eb7fd786a90ba727e3ac8949a377255e15d4e2f11ee0c631afc073f5bc8ebd72da1cb004cfcdb7c012e5e89fcc7529bce6f556dcef35d4457135ed941d78e3002b3a1fa413e37ad4d157a8d9822ba9f89af400c9b7d71f9be8bb373de80afe161539fc1d0bbc95a65bd23fc592fff47ab3c0cf1bfdb8df9ed5807cf5ad0acaeeabe3347738456cf24cd1771f6052908fb956ad94147ea5e0cbe53a925762d0c7ce58ee2baf0ff0450e7e6adcd806bf1917ce233330d119ad06722bd15ee0b60af6a8fa2a512a19e29b75b2a15cc0db36b289918bcb029e76f65733d8120ed989bccfd7dfe5eb58809287ad9bcaceed1f5b5ce8f8671727c9c01913d051729d67f43cac3db8b72c2408b0d590a156a75fd73ed1c5dbfcdbb9d812c950e81a9d8491ff0544f3f2a811c71377ef2919596b237c6830ce1fcc75c3b15ca06bb101e1eb274a8b008e7a500371b0070599d46ee1d554a317803d0893101051493de853086170a5d5d614043dbfe645b8b8f7a61eb96b42cbf5cc18dba30e4ec82a6919730223ebf0fc829912a3cfc3a1fd26aa0fbba843a4c180039984e5864e2490846faa339ceb54e43f3092702e088a108f9813e4e81aa292fca119594fdbad6323a11e25e94fd97477a05de54ef74efd461f912b6e2f127b74f00be3c221ff9ae6bdd561e3253611d29e16cfecf6237e43c36795dfd9c9725bb2fcd1 COUNT = 59 -K = 6bae7b25e25938e877ef9989f7b15228 -P = b36931846ef49fb62e93fb7890ec2cc289f7de95e9d14017eca8e445eff06c4b8a726c5addd57cd312c454416a9ea1a803b91c8e3f3bb2e4d80c465b3b48a1da5945d6ea50c91a079cbdf88a9203b51adab86d0747251370fda716ed8eff8c36260582f3dd -C = d9e8900bf60e7c29bd704ad350a4bfa6e24d8f5bf78532955ff4a8ec1e68e7831a329842e1042b9ec0d81e418c8f617ddceaead0f5ba4933198cfc9a9a357d3c557edff9ef758522599fd41652252ea80ebbd1b591e8322569c777342bf0eb6c10a48c35ec559135445c0e6edced14ec +K = d8da28a4a55ca3a7306dd2ccc82f7e0f +P = 0057758dde3e94edc43c473cae7e725410b787e3ee28311f9a80e55d12def9adbe99e07936950dbbb6051d2317b899cb812e4ee7bafbdb79e07de2d01a496ec37113cfe87cd2f40b70a278600072104b67c97d1739a5348b0424670bec82810df04c6b95e78f8e833c9fd8482ecd987b2173ec7a469d61df628c6ffdcea2894ab753cd2b5ae6c1726551bc21dbe9ae630a65ab896ed32683f6591421acaed0d3063b7307d677abf461ceab2824bf8bb2781181d9f49db8016ff0ec4844e67f199a0b0bff52d7916fc8e1c3f10c9e4ad28445792887ecab0f84c88097402872a66945c5206cda39e37afdf8f653e7ad65e8fa0213250ae935f097499eec52e4349bad49b99077dd40e24c4a91d68e4dd59fb66f152545eeb0617bc0f695a1dc0aead45ec8a130051804038c06a77e39103e87e7d6d9bba232019152698181e7d3f0cc74f3905a10249556c8cdcb31e0cc21d29a9e37c84fca89d38e34c57be5210b5ccfcd0dbf0bd51d7fd0c67462d0198e24f950dfac8df85badeae9f38105b4f56a883fce4ff08ea7cc9e133fb7019ce7731f2fffc6d7586dd09240dbefa656a2f707134fda4eeccc2a771b9ac536070dca8bf29b802e06a6b8a04cd7ff1e7bd91d872cc70a978384f7ef278d864cca11b4cb8a7d309001626be4dba07cf1de65826efb36ada9beeefea634e8cb691ede5a7f8583f52a87a4f415ef306a3522 +C = 482dad88657527400f8ab18b98abb5a004a25ba511a80f6a996c0f32a0f5c737ad05c3dde9f892395fadb07cae2b24772ca8718b6ae75d80fab0f3fde8b27da57714284713c702fef604faf103434c67be25fe072181351a653e00a12fe7bb223887ad43e51335055478b18bbdde2ebb322e6467a0173986dd9229bb7fc4c2d9300ad4640c2f8908b4de464e849e6cd66a4d63692c03e432beed8fe4a2e7cdfe28ba4e161db768e0bf21f63a73ae480de22d2cce103bb38b6390fd12328eb3ed441320482336bcb97559bff11a1df2b561c43083fb8dc0f15174813ec9313e7859e014ba678f318e7a9baedb5ffa55ebc426b6e749032c548da2d66b757d70e4d77fd00219725c3d9b3c03d9c7e274e4c560dc72671170e8b64c7308c815133a00572e09b22395b9f1d46934be14330e2a31c8d303ed3e48ea3478a01291e624e0d8174f6f6e5fcc6204fdbdbd959e401258215aa6ee406cf8aa2f4436603734741d496b4402a763cdd0f02f44167fd3383f5bede5abc792b4dd2b785813160be98193e223a95e5355c1d5216f8491848296239bd3aa01618365e9cb2698794afcb8a743d1dc10aa5027f4175456d109232602f05099ff86b3eb2629f5fc0b49d9887f72302e36038c47a02105fcd155176ff1723fa05e7166fd89658dd791125130dc7b7f3b7cbf88393ce672487b3525388c054543c492b5a9199db8407369bf848b082c56be96 COUNT = 60 -K = b0c431cc4494497003e8351beb06ef54 -P = a687d9d00bac52d1ea5b6e9ace44e92eb9f35ea5eb1fa3b418dc7af30dc8b24369fb0caefcedd2dc649433b911efa5085769f8026c92658f327639e95bbcf257af215ec1ee9b78c452347d0c7597e225cd2a7f9f65752eddb5628679049fc2a7696044125c -C = b94901bdf10fc4d35a730d4cd221822d38425eca89ac344cd820db83d958591f8fa5c4f6861f248604a1273513f14d6e81d17ed73a9612e08e2ef275eb9b10f04d5b9ae9f99169fc1cb6f95677575f53f95e03ddccab9fa2ee9e3e1d31e4e1cc7489fe7f8efb4cdf9e3255acfc22e30a +K = e2d84eeac7774afd639b9753f882f71f +P = 695f2c84b21acc4f5ae0780dbe5e6d3a6f31be15d6dd93a2e896afe421598bff3c9a635d6fb6cb3a51a594205868dcf05f135743c07d5714c3d9ae9fda082c73aefa2e50bd75514af2c927aec0811392604b2f2de2f33d2454a8a41fc8808d06554a564d4e5c8ea4b2e6fdc3be4ce1566e04717f495fba8337375ad543dcafca9331253e89eed5ff936233b51446c39a94cf195bae1bf7fb95f8e7947c915f864937888f05f8168cd0573542f0409b665a3e03651ef2272623293e835d318e2488b1c992e56f9b69f817dd2e9efe1ef1d79fb0fd11f438b08d30eb206698d2ef562fd356020366ec2128b4071933a0981eeb325da331547e6ff211d3d217c37aa761a866ac65e743b020e72027143f6f55b532d61c3ac5dd1bdc32946a8df6987e009ab87626096d073e455c1cdbba8a4164d6303c5104515efc3d1477d32d6f18e5030e684790ede5f2df22e67f3efaa5055af4500e2d41de1325a60fb8ec08dd9e2d8b27f970283ff3da702dc28ca04934eee3f34acd45bff940567df69b4519f5fb8bdd69e0a4a503a363bd0be8898dad0d7a5b13d7cee15e0af780977a398d1fa018508ed283523bcebe2599a8b9e85258dda1c63d1f2e6f555afa44f977ebdec9cc7b8907cc54b9a383afb8119e44a989a1d103aab38b29fe2120e007fc31a7260c8ca16ef2ecaf2fddd2b20c08489aaaab5c47f2bed17ca461b1d7b49b +C = 61c08761ab4e63f900a9163a18ec51663a49af771f21fb7b4f7b6a73b4460a7bb5a8d3146d34ed248c4ccae233c707be564109232b76b0d67f5e598ab4f204c35887da3801a388ab44c02c48255d2111680c259e2a6c2f17fae371dcb23d2fe1a1726b04ebb198de13636964128801e4feb83c5d1428a47358b34c300501524d94f120b85f278cbf6b945a687a3ac448541cb9e38367c0ff81473c3526e3c2546963975dd928fc9e07b4470f13fe0bce69c1265dcbbed14380fbf512cbf9695f694d459517bd6919f00a8568d6a69f4c3bc4cd8da26b1b05182795618c98f1037e4512ad27862cc199ba1a2c071b46101c54d0d510d113525e8f02f2fdfb4c8e4613b06a1be3084a552d531dc2dca772330e3d5da2c550e0d2b3dcd1a1636029f176112205405cece2747443e6cb32aa1896087b94f272f2b057da1f7b8285e39c119561ad4b05c14addcf214dd40a2f09a61be1bf997e7a84866e56b1982132e680d22643c461e86eeba36609ef37240257903c602e22ad2a9f4e04ec9eaab09e22cb23266219fc4796720824b595bccb4da415f88847078dde88668391f880d20299b9df425e9e9875c9af2afe502e8c8c4460bb3904f40eedcbb1d1746f1627299c489eb3b0436f0c0fe3b63984f469785925bd915d3e960d9891be56b7cf9acb6484d474b37d55bbd6ec607c540a21831eea23393f2a6cc78aade0352860e9ebfa676a10e504 COUNT = 61 -K = fd743215c2d0fe6845a240b28a40d415 -P = eb11a8f6b35862f8cf35b033c4e7a73b73bf23e6f9038f032073bf9e37c1f75761f6e8a39c747321dc35ae989530cdfaeefa73685da3abb45f5f3438749f705cdabf2f2b6ce580e32f69d758fbfc85f5223b7c3ad39e5b3d2f8e9325219b1dd7d0a08b1755 -C = e4c3493ce757f811fa323c7f7bb7137ddaed64072ffc05239d5c959361585c20b40b99f17b6b58d7ec39a0b386882705118392de764d0c6280bb56dc25db903530e0a3aa5c4cace5b178152fa104db3832e2e7badc23654e655833dcdafd56ea1276d0c1b9c38ff1750a5dc66043480e +K = 5ac20ace254dd5b8c54864d0c6d11dda +P = eca1f9a03f925e431e9cef0625601893eee78509183073256784b10d7bf99066c278aa418921913d22d85d29dc3ca18609d338f882d58d842d2ecf3f6793f0556319bc606c6613b253bf800fbd437f961096cc9373033238972d4a62557c79ccbe2ecaf80f0844d299839085af0d6e23856ed2d77e8a0839f2e6849e4b3182b81f6c22137bc70b194eb7e393b575d10f41d64e520e45a60d683d56d269a8f84c861a1fa5435c834e290af7600ae725dd2ad540112de351b5850bbb187205898d4973a0b440b0b52f368e1cd834de70b3eb213f66fc2b61bcfbf2cd7c259c22018af04505467ac79675b8656f5e3bfd4207aa796e9ff04765cd90607945b44f71fba6a1938f4fb190cb16ac0fad007fb1a3cbfaa0cf34115b081f026af5e453a0a2196126133f49441b35f8eefba7b399ad76c51839e3979175bd53ff6f55e646e1e20fcb1c8ca29c6f333b9312e735efd3116ad72ed1838da3cf993de94d4b3bdad97a84485dcdd884d9e264ed909aa03cdfbae287f6f2b8f8d8d88566ddb04b8b9b679c6e11eebe118fb77204ddb19dfc667f2026ad0b276e502e12f235b84d680bfbd0bac9265232db4d2f8384e6d5ed941bdf81d2e70a44477c7922a5d6836653d04fa0e9efaa3cb00171b932408058752e97f14162a1d7ba1b97d3eae53776bfe5747715d6853c15b6a1e5df648439db9b291462cd9cc23519846fb5fef2 +C = b33606666d4a2beaad761391b505a7763974e04e78fe17787de7db2adcaf920d51c2414085b17828783ae9a2cf939f02e32feef379d576b88508c8abbc5900224f40ac78c7a3361346ff4df583b277a719f3ad0a3593220a3fd850b7ca1913f85567684250da494f4cba91c67d5694e6d9104f50b2cb9332746d1752c784d34c94fbca98be00a106b9ac314a640729c873459671f32055b1815c284c69562ac905209f32cecc6f439776512aa580ca420e449e207ec8ea81a5e1711f1477ded9fd2e24ba103598367e90e97744517a56c463fdaf27153410fbd47a376ed3206a410a29b958efdd41780c055d9bb8f4364d5a5475f3706ab900b64ed1fed3621cecdfa0592e1aa51e85e285bd23a6d9473d6a389eed364f6c68c52a94257507be1b5e7ab63f3d662406989d42f97d777899db2aaf56c155865a39fb0ddf658c3ba21742e1a97628dfb6e55936d506fc7c90e586e0bf47ed12f9f683d91bc9d8f78d1f4d40374e07a0568da65b619cf17bf66be160e6d7e7788651bd094f1b92c6dd9bf2ff072205d4c89bf94c71aca359067c6f7e0f00fb0f8ad7a265870f4b3cd37f0b88939b33284994f1481ffea716dafd3c59b91e99ffe6a264e8457de4a762f22eb3273e03fe9092d15bed9007d6272a5bf644ffd86b9c68d21c5370772ec867cabcde7d71dd249a7450681d4f92398dbbd0b79b7d431864e452a1777dcab799abe6d4c17316 COUNT = 62 -K = df4b663caa1447b552529e25e17fa710 -P = e2bdbe97a5ac3f74a429c62c08c4bc2763a5dd0642556ac59910b1292356d4eafcbca8dea7dfdf64377bab798b5223c181db8a32e56f12f77587cc5461d0a5ae8c4921aeb332a91778aa5f97b61f3ff94c6d1eab88a07f82d6b044fcd6a26ba44901ef1e4a -C = 2eb422555586e3d455cdb9b23b8234adcad9b67717ca605a429a8a42820cb01b458512af5517c2ed7de404092c5dc2a448e54ff5b0a472f9954800eb8d37c3753136ca65063db8fea7a046a01a2b0d867c34826e51364797c931dde582176b7dd6b4a57d9e958f00286dbe2db6203a20 +K = 0a2b2e1256e2abe4678018ba0c317520 +P = cfe7a8b64081fda31db85b2b91dcccaff92ca3e08b735ef1fb3e6a6cafa751463c7d638df484846498ec90544d9a920c8ae72ae155b9870d0449ba01b224b0415db84ebaa6b59d7f12eae48e7f0f4956eb9b21e528cf46876fee97224018416ed229c192c09550e7c826a664c6860966ee9dc59da613164c9e7d79d19b522995357cb2752b9f2f873967e849913231dc1b3cb564804ffb05854802d00b5505b4b54808a9d3fb1b95073dd697c297be0f486b1776b29683ebd0135a3e7d923e6e5bfbd89fafac1f85a2e7a68e001fa15976e56edc2fb99261f8177e46b0e1efef9847d3291fced1eac0c2292be67daef90921b4d3ce9c6500c608e7bd2d2d2a3dda1fe93c885d97c580db25838602e0237859d9b7afa16b473d3bdf317064c9546cd1b0b57b2c40852d19db23cf25783af8db2b37ea23eda9fd56536fd792693b97ce02030103ebd55ecaf83a6ee747de77fe01510d38f54f54ec1bcb65f9b48e71bda1067ce56ffdfe29b2b3ccb0669599223ca6cbff48df1da9ececa681b6c09a361437fb991dda6c02a18a8f1561bcf6b83d601f94770177a5f69309cd963c7cbcd4f4dabf6baab9411f27b5fcaf0a862d477be0804d406f0342656ee771c8b85f6715f770321375e543e695cdd445846178471b3a11d02e6cbe14efca09c5e4111af5698c9380e36645224d590baa2e4871589b62704f02b8e68c7662110f +C = 872549c145fce0f15f36c5d15e54afead908e1fbe8aea204f456e9617f0e6a5d5d1365b0fa70628e9da1ca36bdf9917b00697b022e3c32d56f2b3ff7ab49231294c7ead5a71f88980fffd83d2ca444e784cf0122169931bba45358325db32a4cb6aacbe6e2732774ed4196c2a712a07d33c898b5b9376575fc7ea36ce770bedb17bd07af4f9b8ca16c69bacac7cbe3555bff0863c8037a4678143a62f67e9425ea5029ba86f2eb5b34d6036607dc3446be8a998c4eb5e81843dcca9277ac129c6427800033435b04901d3b3ca86339a4a20dd7a4a6800709cfb6affee57851e81840e803c05223b6685989848794b16e1969b72c5acd74e7f6a6072184af56a1e61cdb5291f59983448b7ec9161d0dcb99d38c3ac2983f082e7d0423af6fa3aaccf7b70076c4ecd4c76b3e0bd600f0267b8901524ce4a26b2f91d894ce400223536f1151fe42a55d73ecd3d0f4f6025eb680ef77e1b313d9566f72132774a81bd9fec0cfe58b60580e99a45d34168188e8d49bb35968733ba50d2c68a53d30a452d50450cff315ae4e4bf6724a6e5f562930b737dfe948ed2b176b9e3c08e79052cfcbfa2565771c24462b2dfe1cdffd906816b0602860c4ac57e4628ed1cb6d3fe5ed93443f068c103014bc609160db16a1c02d3fd9e8fa4bf3e651e9f764583bf4b25c7e98a815fe3e0b178040cffddb1aa235ce6c4acfa3f68074408172a32f9bd68d6791970e COUNT = 63 -K = 5c14814ebb2cff668daaa50ca33aa7de -P = e72748cf6978a204489bf76ed0580a5c13c5f81006588bd7a41be6a9dd45618f9547e3e0f432284448d9e20bcd132fec70f0063135624e74bb98321b5baec86fb406a0feeb4e962db140f4e1d249024df7b6b30a669bb21039211c946f3cc6c9b2742df9b5 -C = ede496be384942ed6ebcee0af2aa75b2ac44f9809ecf48ef1662167ef730ed418465b08d5fe3ebe7c382da70f2c3dd45c225cb2a28fea6cea2f8832d1d30c768163d163ba89af08b242201573eca0437503a4ee4da0c933dfc06a7ead2bc051e3508dfbe32d533d96371c5cd712fbb07 +K = b318e64bdb94fe2e7ff59d42e0f09fae +P = 11d53f6eb280a9b8500050c1fb86420056429e277ee1309150992e7a8c016c25608c12514ee9e0bd33982e8a70e119a7b11aa06629265b83be9a2c801cfaf72e23725754efc7180f4e6ee593b267ae8b96448bbb94491f49bfa5b1cbe4a2c94dd742233fcf77980053d6acc0c0f6efd7e119ca3ba4e7dd8a9331bc3075c185e8dcb477c1d04b7c14f37180e1be7e512f71c75f6a4b6a544c61e26442f85c6294f91a9a1f12714e781d3b30da5c709c24aa816046318b09445307b4708e638c20a7bef254f98053fafe5541f33c6fcefdd7c9d7abbba2f9c262a1b8c8e05b22444dee2344179e0c5d32ea490420723dcbe98328af94f7fab6076d099053cc2d54e55fd7383fcd2ec5a2fddb07e1fb0a603e3c899fd6485b9a86b2d153b8e57d8f1319779ee01b84dc4950914289651fc0085fe54d8ec1677977d28c2901c0f9dc64c16b529e5c0d8e5961c154103ccb7bcd13463341247590cc8be9e779548868f84fb55225cf3992ccc1b8a97450deaa532dc5e1ae4438cb20088486f0582daab6aea528ae6bb3bbf87a81d5a5c26e3117c29fc6f8e72abfe2acb1d30ef45eabd93f1169d5ef87397d35831c76d7027465b2b4393f2a5e5a67282db497d7a64b30b8c9d2b6575e8af19bcef26aa87cb25b4316a1ae006fb44dd79d2017120e405770c3e4e673d62bf5f253e9cd72c30f1783cb95021e8142ceb5143971bc078d +C = 7a85e8c8e68739b02a15ffea39ec20db8cbd71c8f1a6042518f362ac93f97cfb7c28625e18150962d27db967a9f54241352adb32ccbe591ecb9919acd21b0b0e7c2d3aa1e7caa11b1d605aae1e99bebb6cc3eee0fafbd59598e63b0e35bac02159192c8b02ef5715f707b163dc127faf68a556b46f2c2c31d73a50c04855332acea30e103fe00d0b4aa89aa49ada2992b67dd7ce582ee8c4ce6ab914ec0b2608b05f22c3600d9baac249cfb666640ce6e7a9d0f67bfe3c1e9211bb09d45e06292f8767fd80d3ed12e17a6e3c9ccd8f4a377bf41a63977225bf1d0d102c1d63b92b5db4abf32008a60c4666499f720ec0b2b5e5da5becd57efff953e6859bf8920dcde1fe1667fe7413830aae8b2a4a96cef464380e153be60ebc57f24a202d16e87ef055eb0288d97e45103cc4a9d39266c25e0c4bec690dfd8b77d76cac59705ec644d4c462bcbf9ba85e9f6c5bb1f109bbb10e38a12c3fd5eaf59e67271236f462861a665ae4ae1fb7f8bfce3f99dbad50be71afa23d7819889892ceebd65ade1c453bb90cd972812cef94e8355ab48428aad405951d58efb2a425296bad95bbe9eee54a1325cca3d027b0104a92ee2deb78ad4fd7b56992888e4cdc7de876561dfff327194b38e3d0289f5fdf706fa7c8822000dbf2481b41788f4a11a027ea38331f95e906db6751b46e696ceacd3391668fe40b6be4b0222e90162a73dd74042d9877a33019 COUNT = 64 -K = 32ab1d97614e267d9b5a07c7305f36a6 -P = 9a9ec49f1efe1970302a708ef7f0e5e7e9a27820ee75b6d3e3d989879283fa5a77b1941e4e96aa61cb5752772a45c1bdda0ad97548c45a7de9be22aedd62f58e13a79b2c2e11a805cadf30de22881aa43600e8b673d0f43ce1447976cca110b2efcc300b31 -C = 726b1d54c197e95534346bdff39310808b4b3b04cb18452aad767c2367f06cc8b290298fd10050c705a26ada44ea79782174efdc465da8b90759ef241ff06d69d60ec0d468dc6bef65bf2011df59e2c570ced0b9c93a47de4e0780f10322a13a70c8d804fe3c692b4ae109c9e60cd41f +K = 2cceaf1bc4c34e36ea0220d34b67c87a +P = 1a07dc09430e16ff69d9a0109cf9010cb2d0d4a0e6aa90edbb3c255ef93375f62b28f8c935c4623c60b25151d8ef1e8884c534b65770ddbb2e7532169dc3f2338f130aa64ad7943f9ff6e460188ea8959dfe1ed747bf73d1d0b7b3497d1dacfea97de0214417fe0a5940380f00d200cb3e0a687b0d67bf5c14ed288d9db982969f1b9852b58c6632aa5d4dd1de866ceb810d6f2ca44f0d3afacab1b89209ea5e4be2eee9f6f820b9db766df7582e0bb256027b15c9c7e4f111b3df0d8bbdbbae2daa6edfd3d81fb0b3ee0e8d4dbf43f3fdddf36265e6ada1ebf73a4cc90f27e001c69b38c8db877fbb394944a02371a69ed908aa48fa6be128ed680e8f556ba9d6eb4e03b4a59f3aafb73ab0420e4d4d6cb2a5eafc312a0f558ccc7a61962456a559fe703715bbf5b33aee9a1bd23cd49d1ed9e149a453be27313ca9d2ecb8a638c385c021a065e7db09fa8c80005343d99c847e3d76ef091bd226b309b5090eca959e312f60aa610c843ceb87b4bd52babf4b6a8691e13ce0f3ee84ed3fb0d31b04570d2066d7a3ddd66a010df10b100d00bae008f4370553d8d08308e88e13010da73da4e3f2398f046e61c5848c948886da14c8add1b2b55f8d33ecff09283a44c57ab4284f4992b9adcfa3b448dfa5bae0011df5f3f149e387e3eaabc29003695b05d48b4c7864a2c247e18acf65564d2452ff9e5af389b2b4389fd1c249 +C = c2c5881c4ec0ff8b0e5e723ff3db9ea56b1c33e932c620d3c4d84e1ddae04d9492afef78f8d948eaefd7974d04fa70c274eb87fdb5514fa66df0808ed0acf1998c68e0d690e4c96836abab987f3519f3a123e7edb49e1ff08b4ff4150ef3445f3589bb18b073bb45c1e8d4827a427a97c0209a74afe4207d74bdb14aaf5823dcdc5435d8b7df568d65a04aa7d65c23b2f1a78cf5788d356f4a494dfd8ef7dd5c05c789515f661428a1dfede7b2bf36c6cbaff70475a731d9f2376c21d4dcc7836378f8da7a7d47f2ec626ca7d2b23e76fcb9c987d1f5387ea6a5dd480a98137f10d574601511a985316858576af755cdb6c9dab00c6a405342b023e52e81d36b636919f21df60b9d6c55d96b068ee8a68d137ac9b8ccf53b10f52920ed44b818e2b884fb3304c76ca1e3f850f753c3e1a20d31cd7e3cedfbaa574dde0f8dd5d6b6bb520e656d97214f5806949fa14c28bdbf492d8a4559dcd9ce2a43872a718083e5642db2414734475cc34a234ad1f026b12f8fee5a19f45b2fb7df1eb61880e1843935cdaf7e9c4750f5c19e9bc3d9ff80fb44b1eb0bee70c795c1a7b33a86966fbdaf34360d84edddfe58de2fd436cb47b7a109609a85dbf254d062e8b31a26a3978bf7baaea6a5c49470f4021af8711a5f4c7b81041e5fd50805db94209c9a3f2754c935ce5112e60c6e6970c7e3ed7cf3ebfbbe0377dfdde2e2b48d036bf7d6c64d5ec4601f COUNT = 65 -K = db99ce0647d3f6f436cd749a3e980f56 -P = 46103b226dfcdd8765e6e1ab263561b329a4471ef6e03f0e93905a43b5a9edfbc24e2cd5cf90a91ae8c8534f182001602951322a887125a9485db271d1c538b7e5304a9f98d05d92a81cc72c2acb4e7678e5145be3625b3accbeec2b26f464204b1afa4e6e -C = 7c31a08cdf6f06b37aef500dfb0c296571a6cd8a6d4ec974ef122ca416d8d14398ca594f7f02a3423551f890f3681cc7c07fcfa65f275fe3e58bd4921bf203a6368b8e7bf4275be2191bb5f0f876c580c898c8a100cc4dc60f079a5bc021650cb7f259659030db948a58d261d52dfd54 +K = a313f90f0a43e93a68f893d737f6aa44 +P = af245bb9906866da8147c87bbfa861482c87463b5ead22104db65bef3f02aa8f32aaf077e33a868bd32da134ce195de677bce72631829cb1288710d3cddd1019dbd954227bd8d967c34343d80464b4b3e1e1191301de2f83344607cb906fe592c137f16c620a5b8f7a05bf1aa95c2e61f05a918017ca07cd141953e20fb62f8fa51e98f095bc90af63e691156bda466bfc1826e01a6fc63fe838812841a864c5d4140072bc0f559a2e91693dca4a621ccac96cedae02c88c970b1e167931d212753279d0c65faaeeef7c6a8673eca84ecd5114b2bc9a6c6bdf86751cd7c29ee53dca2c7ac7fa20828a1632ebb04a39a90fcffbe1bda80d5ad5ff8756f3954d2dc09c2c9f64ae033b2527c412a6165e9975fd82cd58770c255bfcc2b8919de537cad31e3a2b87c562cb53b1f6cf521d2ddb72718e2f00c40b59c8d1a036cb24ade3e7a3de49f35ec5d4eeaf24f35d381320947d9fd3eda5935f74bd9a8130005a3ad033f27d61f8707ec00571d202c42f4bac994dd6e5fe234ac1aa3165b9aa2dc13cb233d47340810b6c83b7825d61d6376fc286a700dd6652325412c8d5b253dc623cf8258277c3ef74bf9166dff425c049796044b8199bcad75dc789515a77699545d27562db61d8368c2644cad2359f9298b4b553946e431ba53f53c2470b280ca14bc00cdb8f621b147029a708fb1df2af304b12161134fc0b1d40b24c40 +C = 6f63b7b2491cbb715f3f1e98b5b543d012e8948e15c739a4ea1a9f5126db26f00a4d35cb9a0d53d2a83025b24fc88668191171ed333e160f48de55b423d8e0f21ec2d002c86b8c96471a7434212615acbdc4224c937bbc4f9dbfd197b72df0d86e83735bb992c242a8d17dbb1f51721e7f1d7f5fff607f7ef3a7af4615e1962a91dbbeadc77fc5f7c6fce81b67de788bd7c478eb2089350193d41bb45af22eaf5f915d447c2e8544bc48308b116761dcaa510206e6caff762b1dff196463388e43eab2da89a5069b913f4d0136e17f525de746e66d068595dcf8ee9f07c3f8b0a80403268f957cc2098e6a976c2d8d304222954bd9225513109ca0d56aa0c9a7d5cd4d9ea43ad8141f69eaa2220041e3db4f9c188fccf21badb7324467544557c1c2f8b5941e812972a7d43ae57d60f486517613f34b579c4c8cb4debf74661452ddcbd160f29edb042473fa55e3135c1ea05ca0881e830b2c959a880c78dc7f19ff588438e5c9bc31b73d0a962cf3d4bda757c2c7e0dbe1b25680b75c849db653027f8726a35aaa2f8bb13d01068551f0bd5c2aa79ccea955737a0f2a364423c11125b300860e16c33c0118b45f87038b1adc12d030cbb95d9ec14da1fe86bd436237f9eb0cf4e60eb392d592dbcd420e3d3e00cb71899ae1d6356cad894273b03a02baf257fdec074f67ee71941c445ecb1cc67d1ac6a3a349717fa10959c4d3129a01637be757 COUNT = 66 -K = 4e26347ef7570b6d06576850d14bdb63 -P = f3b2f69d9d51a96c51d061c96d57005948d4839e6e07f31b3f874e7c4640c546e96fceabdca06c1875160c504381a203b0e9f616b05d1276dd9dc43acc52d6ceff458d17cbbb63a8f0886a21bb4a32189d5ecf750be2fb960790df765b6d21414486f18eab -C = c8982a4b6d9728a33fb7b936a19692c9b53405527793dbe85615d84c55ff84503a21f5d8649ed99ea6be6d11d4635fb48376ef210e285c46c16fa1b39d73cbfc20208a3bbe7cfe79375f7caee30816a23db3df39ea517dd720af6c7d241dab920b68b5438ef3cfba07a58052b41dddba +K = ba79c599f414db47b95af1aa9c80b5a9 +P = fa49b984d950aeb54153055702e49c4b49e7950f7d75b3ce0eb92390b96383e9cb9abb34e0fc9af7feee5fba5b555209bcc1e268e7ff9e10646b04f3a08439b3350e570ab21cf8032ec409b44524d82e88bc2f70d755748bf08b9433a731350ea4d39e35d4db74a3c45e64ee8c4709663cf760a0cfc9894d2f800b24cc31e365c21418ce62d8db5a04618a20bed1ca1ad89f7d6756e89a632cc7c18d1ccd9a22263de03252b504ac8c6a17b62d8c8780544f524ec59503dc51fe38a4d1207f7d56777d8aa8acf7c9d0c2e68cd9b7a9f31f7fa2365d10c4b18aecf1499122510546bce40b24c0c3f0aae7c9ff8cf2e27075bdf452857956924aea01e8a43e4d3ce46f97dd221e516b765270182fae02d4e1b5ac906ad7d68a0023ef5ac63eb58180b06fda8cf2e66f0f1aae23cf8c95a807a2001e4e4c8b7b7f3e01e245f7259e5b4b200e61872b32d6fffd10b9b01034f27f1bcfe70a7ef7454a1f8fbfaff8c9696f00c45775fd993a4953b60d6bbc7ccc0589044653c173e333c39c1a07670aff489d3e28e99771eb947b22332c98801f7c283319e49a5230d98a03ee6da13eab6e94fa991e9d7461680c7ac0951b5a47feef6e6fe5b076bb0df1d17f22d0004cd2876a384124055d935b9612df28f8e5426150cfbe68f6280220e4acec4819c1ceaae89b14359f55b7db15b41cf4f66c916338b00082a8f63692c49abdcf3a +C = 7995ef8e23212091bac9c33b3c61e5935bbb738512d10757d81a18b64171a54ce96fb62e94ff03b5c3f9d0ed065d7833548ce523160933429d02e169bb320ed95bd1808e8085af78b8b1c901b4c0344ae2e2bf5e497b097f1b32d4380969701e6dba16879b641bd0c559be9b8f7a008ded3150e254c5cabf5c79bc88df7411e6c02948d3e2c52acf45b57050b19f7b028ebaf605bf58ff990604e737fca5cff5747fa82a8d10d6d0ae56257fc8f141d1d6752f98f9e06cf65f44c87153cf4a5c3f7ee70885a3ea9b632a9fe8fcd40979b3d338622636757c977458c6ee0a6f820889dc607b2c10c24e47acde72a2ced0ba373425de8704a3828fed5ad10d2667ea2bd21c6b863d12b41ef3f6b84333556a605e396de911a0ad4ec8a1c80a888216073181b16f79ee851531fdef58237492732952c30deeb3382aa9a7fc00f4665dc37a927ee4e1e493881230cabe4357e38ab9fbae09f5ac980f114a28dd2ba97f088236c0d3c8ca5413ebb9025846edc6d5ccd112525cf367246790d27ca104a623418d75cb8bf429d4f6caf81a1448294164012422a20c4a8fcacbdd2e9306a9f65295061cc271d18a734a973f842a64ec047029feffe8c65aa256951fe70aaceaff74e93f6ddcb419225146416bf4b52a4146f853447a2a26f91b3b2ce11d8d36874b32fd36f530c716ba0ed03ad779a59cbbc708c3e283a607409ec4d0b254d4d4b1ddb23f87 COUNT = 67 -K = de2ada3cabf8b13c46379c4b26e7b9d4 -P = f27a617a10004913fb8bb31ae9fd949b6aba651726e6360f7b49cb92562a8a4d1ecfcf47affd25e5d16060924a8a56a3d86b709e3a87c63df5ca70fbd0344880ae8bc659d93c12f8cf6e82265028a61c93e9575c3c1234d1685020eca865c78fe710dcaaa1 -C = 965c27eb39c01d9296c59c4cd49dde49100b5781f919bb0e04e0be25edaa7e629f947caeaec4a0eed50b1b02ef121bb92b6de6e42450f45295925870f04e567df337707e53255b5b0901d1422429c758c87d2e350d7ae6d8ff3ff0153e2c792ec8c86c390646e7cc5c68bc07b5ca4af5 +K = 8ce5a49ec15d0321e64e7e48e8a59871 +P = dea31263e48be879b19df4af5b50d323f5ecf6c1658b597babd1891864832cf19a84db8badd2c0473ef67a2ca08751b1ba5de082563d3b728514e12a09a09824a55a5d5b3b0df867cfc25d9f0ff32c5fdc3e4cda7e8ff919227c6d70cbb806778e07c09e90f1be08c200372277fbb19db5d8151b55e529aba4fc140540bff62195713f912cfdc9d1277702fb560f2ecaf3f775f3a4aa7061291b5f2636528b1d678d1e2b34dfc4d7bb0965eed4c580dc6b201019c6be6064e406f6e4b6d19eeb95c3a14f90b1f63f9a0718eb6949c60cd95c8f9efc80eda4316dc3d299ede042f2ac5a36df77ca534d309df47fdec3f3d56af3cffb59d7c75812afe8b5d8434fbc93d69ab396dc89b71aec8bc2c0c9e2514b33d114064de6c7805c91a67f99761630a473103826ffda06734765ac79444b0a936015c39a89e564e664122c872eb71bc4394a53c0682f3ab5dbf548a6107865fc96ce701649603cf3e16efca0a7bf2400130f01b6f3e7274d22fe1e7dec40dc043c982896caa9c3465537701fbc6fbb18f81f1f54c51fc9f346d80f5d91f0851a724bfb3faf17f435c0d18529a05a84009010189b0117e8d060da5183bfc5c5f79919f4ab029efffe7394d01c8cbbaab3902d2eb9e6384c47df58043470438b94560040b83807f404c80e23e90c3d926a4d72692e316f0f5c7af581656c0158d35152793a46c3210173197ea137 +C = 1b9b6dc758dfe25fa93b762921174b4b19f471852172ecbe5588311ff82bd7e7bfb80dfe7055dd98b2a6c520bffae7d88a47ec3903dff8ec67e200c4601615c52e14fb22622a57c7223279467691235f6272b3872ab7c632acc33a479d09331b4a388265c055ea69fd803c881f099199e498fb237dc5051e19b689956b99692e95f4292306a2366f8b32879aa2021c6b67d6afeb18b1ea2cf4ae0167b0232968684ed44ee82f5117a267794575c75acf02a0c46ca5ce6b9953d6e5bf208415177e2ac2ba4a9fea73b56768cbc50a360b6f0e0cedb31a99e5474fd199a2a7252eea7360fa1abfc419dc7bf94e070a2a1954c0470533671e789c6e8396053e66f516607a861fd25707316e98697cb7b5e48eb8025f6ce1fc06e0969302b71dd5cd227a3f3aa9b009f0edca574c1c2fd257a26d85b0b518b2bad554367eac8ad349ea1003e2d2bdc91e24b376e77b85d36d90d3cf7e1aad0f1a055ce3555997f23da75084bee21ac2a91e9cc4a9c246e4268d93cd74f7b84b0924c6347ad7487c97da3bef6f663f84fc8cd4783e8974a4979ae62edb9600edf63892fe69c9366e128e9aad1b4d10b211330788b8024c5aed3d13c65745fe55c165f6a555a8471f1b0adeafbaa4893ca7835093935595ec17563ed1db48e07924a2a3279239a1d8001d4b51abe907249e728789486a2b6fe1c4728a987bdff755613ab4534dbf2593de7a0485882ff5c7 COUNT = 68 -K = 2002649d8084647c55c2ad8c73f54447 -P = 2a78b69986d2d0f9ba974b312eef99192f22e2f088776c068ca3f32e74d9274caec8e45d29a9fb9bac23ba9129d6802c155efd35ffae5c32fb58b6cd577ff43f423a1b6d02c84ab2d9e3b6cb1c47073e37231a63ef6469f7be64aa120c4c43dbea70b7725e -C = 79d23b87bed4bf2efe61011c485a9d4a3721e4615ae66105233f161d9eb0e637fd3fdb86a93dc8a92bb0855c16412ab6d25e0f03a64a209517e1aecdc648538e417bbb19e0349a594a722319e32ffaf655cf533897103ffc724ee304572137b42eb37f3a41b33a1e4885086050950070 +K = 2b17342956b723fd3fa428aca23c8415 +P = 812701f42cdf32796a1ce6c59481faccc1e317b36dc1a0249019bd670f10e760aea02796f14b559b7aefdfd8b10d7e7a3dbecdfd173102e8170b4422a10f502f0be98f6f3f9e11ff818d4dd78da4ca44b078f43996fe5caf5d813de5f192165909c87fbaac99a16cff728473824881f7e856c1dd5987382e22c7bd8bced4ccd2b9b4de934726d4877ff406cd9284af9667b197866b943627a79c4bbc1c0139746137f092ed7364449d4eb610ae25a6ba1ebab95d34dc3a1fd502ff7af83970f1cce3824805be27eaeb4870c52a121984bb26814cee57e42504652cc3b3905f0ea5d500c8aaa8cfbdfea2ba0cac4235432162239947ca530698719313d352d1787f3e06b82c93bed4e02d423d9f293d8cd826e7d7b588eec51272d1310120b138ca87f58c162b06ed59ee4d532e018c8a754642fb4a6d58c58c8eb4c6071d6f93b6ad8f631d43ddd4048ebf7790ad7270286f1782aaad90426b7f1eff4f3aa8b6277e8f4fc8a2b7ad1a96a2c198c8fd447c8c4007b8f82a212adac2271e72c2e143f130aec747907485a76b45975a3c1ba72ae43cb4ffd124f91073d605a5d23a7172ed2a2f8ba1cb622cc29fa9406cf11b0848ea0e1f44a3a780b03c2b6afc33ff33d8fb9f5e58a4d510b2905ffd86862706d4124467667d1e640a7946c65c82bf7010fff80816346e6c363401dbb20b248fcfd02a1917b5d3f5b8b1d69d9bab +C = 1c868335abb8b10ad8f59af7f6d3b233fe9b7e101d91c5c8a5a56d9e4af995847b80433bd8ef3f73a68b53ef407a04405b6cc6e76977c0b72306f1a4ec755fde5b560d49409e1075c7508a523f55e7fc70eef8ca3f81c97ad5e06d57edbb3863e22910b7fd0feba5516cf888dc069844761d7a2a9d104f9b3befa6b4dc1617dd6a91e87af6e97e4f0caa56285a5afee6d747c5acb5e3c57bb8710e9487d6bde2054ad8d0888dedd9025ae874a499d5a50336d0230719bb4fb2e256dcfa6c51f82807ae74f6605b199f5ce5677ba2cbf1e3d3e9a844f4d5edd219a2548fe3fd00ce006524f2ca6a7899d706323f66e37c7fea87b99f6ed83404c9569af381f275fa2371f3a0e4f4cd84d7f71fe06a9c7b7886d40eae588600d8f7a082496ed42634085e852b3935d51f7572a0ef15d475a849429ff844a1dcfb929604915101834b4b5589128585b4c94d8bd67382941bfeab81f46e7cde861f54f8ea24d03f27ed4a89040ba7cfbf6555036e76c531ae02ad7a2b176acf751267b85e0f811563167f0262d13e8ddb324726a64a92f3bc42926f6be30b59fddcd1bbc0082a2563bcc360d1d6a71e2ee4c3c1f968dea767e68ac48f14d130392b57d8f657f1e854901ebd4fc2b705ab7003e1fe4f7da64ae24307b986bb6e4e7a6f26f90fcdc82281f11820c899db45af1493efcf588d5fb5afb313f42ceedba06b18e2a25eb94c1acc63d2639e6bf2 COUNT = 69 -K = df42fa6ecad1c2b8a88bde430edbaa70 -P = 68fed627a201572df6d38a6b9af861a910a74258e3ac7fe418f27c6925401ca59f75f1a6b80d1b1cfce6377108067a8f26ef0b211df76caf25346deb8a7b418929d0b3780b29f803008ee0a4fbbb9358cc9163c6d52cd685fa35e86fc6ec633cde0219c264 -C = f3b64a8ac6c7f8c7f491b666dfaea363756a9046a2fa190b900424f3d86ff718d667137807f8b68db97e61a6eac2d9350b1bcc48656d1e708d5cf7e5bb7ecd2bb032eafb78964f57d081093d9240833e828168570678bcf8f3caecd21d5a91daa311b4829a451e2069b9f13573182778 +K = 18da089157dd4170d36ed6de79825a73 +P = 287925a9566455f79a20a1973bcb7ae2edc3d01307f7b9df05f71f5df702086252fb5d4c02651cc81ab74973b47a6e4a7fa12a27409d42053eb9a1113cf1a69aceba31a3fe222dc127bc7b745fb1f9e70186a67d852fb1aefc41b897f048399602dfea95bfb23de2253552d1a607040b104977ac6b5c667de591040d650533941312f84220a6cb65c680555317d65dadc9674a19743742863314ddb955e0205972c190d600738cf9081dfee45454ef4dc6ad1980f4723c1e561e55f85a241679ce36bb47be00514fed44467f7ed5e2e8a62a008b4cb09c31ec6b42ac1457cd9607e333b40f25ff4658695490aef1842fa930a79c327c2afee2135ff31afb5643c87529c3d0391fb9336ed2234852057e814e0a0d7a2690b4f089e9f22f3988225bc113df1055318854b2f51b20a8f8245895b1144415ad79cecbe0a5b3f80c48332e1ac6c9a1053e2efe83b568f339b428390e7d76a11510600e65362f2533d5b3e9367790ca32138816b4773c101381d301360e013df62b13491620e72b68f20b93b24a555271e6d73ba2b7c65da59f188d22db68217887979d804c99c5a4c13289abcd87cd0121cea56d4bc24b0395c02f68ccf84a503d2395eb481d0fa9bab8950b2eab85f64f64add27680998a7be2add513c1b9f6dfbef9030e72a7b3ed94cde351f58bda255f15eb53c017a14fcd0a5d67075eb2209a2b4a2e76cefea5 +C = 7d610dae5d3231a677aab96b288715bbbe018b400f73d0695a1872815e93105156e92d7b17d66bd4fb2535ddd5eacdb10767fee6df290e0c5b219f35d84424a88da8fa4b2d43bdff492d0814ceac8673c0b6bc72e62d3d821e480fd0f8ca6f3eb00d25ec218be9abf27b9225e6e47ae5ba604936ccda8f1779e5f40f4764dfbbea6bc492c3987f47284e1d76b4684ff14eff31ee4bf8cf3e807cc2d43a8033aa4ee408d69f6a79266a90d7e4c6b739d98ebc1db40eeea37fb67b8893392c8b797430561c49bcca782a56153ef7a7bebd742f8784982ca1fb61774e1307b74cb02624a1e2ea6a8375c3d0aa69485aa70ae4cd0fc818840895d365877da7033e8d6fba609946de3547c1e495c9f1056aaec10db68f00a604b417334f4639db46ad3bf2367eb924abcbef57dbb46d4133553aafe4f6e9eab26244374315f6d2c315c38233d4db982ac720894105d421bb69d930bd05fd1866c6e848bfd32d6041d5beaadfabba44689b1dea44cb5a0516c02e240c404fd9aac3b1f80bd39ea157e600ca8e0cdb50fc6fbf0db1a4754c108b0e0804332eb9a7403cf18a2dffd62cf38184c73ee1eec41024bde558077c3558c0650373a8943af32f48be7dc092aac4b4e763320201bac68c9b8631538ed37b7455f0487a0d14a51ffd92ebe55ee44f48335b435464312e99b4e8c039c67352e70f771e49771e7eea3a8da75eed641fb594272801d88401 COUNT = 70 -K = 970d4279e34ecd89171c9a0cfa570795 -P = f72c4ed41ea25fb5c429d11e7933100666d96bd26dbd05e19ee677cc8dbc6020556b56a80a4a3f7c65133c2570fdb0c13db6f5856a6b0fab42bf45b9597b2465baff89a33dad73bbf7650601d358fa4f25f6b404f3e0d7ac08940c62d4edb5a1085c819edc -C = eae716a8cc3b164ab27547a045332f257030c990a32e699d04a25061068504b5cd232f6cfd280c09ff1b8be2932e3270ce968c1a57abca6dcc31b6964bb25ab3995d9a592c9578825b87003cd93a95cb37abde739241a1af2524800fa232cf919b96cf7a59413c8e253fe562edaf69b4 +K = 9f537e49740d7e909b79323fdcf536cd +P = f6bdea55b982218a2feccaab1dd99a1d08538b3a8222415e4300729b890026b77e413507f765dd91cb547ebd788e76fba260c48d41c812c11ff54a9003872833f0bc8dad6f7a7c0e7b8f814b52627d0ceb2953d6399383d1ee1e2adce7aec3c45f99f4c002671c0626c25857dfd25a6a82fcae062f76e3a403ea9dc5bd202e5391a9100336fd77d7f5fbe5c196e3501ab1e0da5890e8e4aa1e1917fedfd03aa1929c3ede1a254ff3726a3b8bafa6c036221dc9a1ce5225c224080763fd795431087aef9f7006ee7e36275863aa5a8a22ed7584589b25167069590a704cf9501c274998cb814ebce3be1deba4eacb51842f0ee6aaa964c3b8308c9694d4b9d1c4d4d2236fe82c645a04ef4471ae8ec7b70f0da6fbdbf6aadfa61514ff5074d57d83a231f0e305660abcc3974a259694bf366de35a1b927dfa15b97a8b14a843127d1bb257b69395c67e736c0e3ad798aeb92bc74bd549e79511575fe390bc4fdd5b45cfb527a0d08c5d7efe70cccd289c085034971b9cc5254538233ff46530fab47a664d3cbc6b6e9aa015cafa6f63c2f08254415ead076800d1b0fde5653b662f8007c66be32f4531d56e8946e0c2a6eed8837d919be214d0ec4429802c3ae12d9f7f282f4f66b5376d6e2189d19a3f20dc5f36098234d5a69217722cadee3613790e5ee91b90a7ce577aa9a0a6d82b59a98131ad59b67ff27035bc9d2bbfef +C = b89aab7954e0aa69fbc503365c55e32341a06206eb544ee816ea281b6158126ec1f426a2b2ecb25d65c58389f4430e49989b05baaa0afaa8af0bd76ce0a3ceb9123359ffc39dca3bb3a81c1a0a8f1e3a30321dd31b40d8c801be2c52b077e0c2e25d361f233e8f09deb4151b0b6408628e974278e2bb75fc550add561a7aa1b68a4f4455c04a199e23093d9d3f817252bcc23ae5dfce4b245023755468d4d4c1d146d2654eb4f105d3cbd3ca99495d65b023684a46494bf9e1809faa394080c1a4b6ff4911b62533ed35ec41f4ead08c5467d043035f28698dceee8265f08e4c732fe72f5177d764493dfe04703201d01fff5eea0a0a9c343c50bdc9bc2549dc1238cd8ea4afdc1013e7c8cb76ec53ecbd56975470fd7445906b7651d33bca321e09b6bac90795d643ea158c82da3bd2af112abc6547e53e3738e06927ebf62fd895547bfb68a5d97333dea2bba6ccf10f101398a4f51e938c09aae0ecc69cefde97d3120d3ad413bf7cd107a46bc04e20e506401d4d41a00e03bedb908f103e0f8ad97ef9f7b633257debd20a877200c921f5767956f20ac2de704949adaccc11d8e4631c688259745128738a286752a4c318904d37eadfb6b302c4d8611529e66e2dee7dc0accbd8cd295072886025e761919a8d467bb87328aae7a514905b142053d77616e060b6c8b2329445a23747d5568bf4f52e3c0a3fb7fe98f79e381ea0034fd00e6bc5 COUNT = 71 -K = 69dfa967c31ab74485f837504b344c4e -P = d33779987c13448bfbebf1fe96d8d48ce12a8df9163a354dbf1576fd326e55e063380c12306ad7735618b3a74e3dc1b6f013093cdb4a4be2ec7444da03e1bb6642b05018761c9d006e1c43422a524e0037554a9e05e7b3b0b660f3de9a31eb8854d4ed60c9 -C = 6ec94e1ef11db8f50fe5cd38973cf5b590ccd54691fb4f893f9c1f91908cd3facd1b80b4f801fa2c7098cbdfa32a05a0da06843f60eea6589072875239cfac1d779f751b84adf9b6dbbb6d571114a062c9193b51559eaa1393101ae3cb41af1d847ccce273bd29dcce93dc2bf5bed3c8 +K = 38d9b22d411fb8741677c9467bc8832b +P = de05d9862242766f1384e1b1e7a921201e4c513066e6bda0229cc8f701555b762fb23ae0dd561a22ae3ab4c37f0dcd548d89217316ea5da017cdbc282ae9887db4672824968c8283bdf47ec70ba4ad8f071eeec5246d5ea63aec7a43e2d01bbe6f8e4ff06a8633254619ccd2df7d4a8555fbb96a365cf361259d36ea8c988396fe686487a3fe9abd70749b05eb2cc5662d311c7334d7ed00ea3f6215bb973f2e6dcc43653ca94ee29036098f01b68f1f01006a33c4a50e31f7782e5d366f0d3d0d70fc5bdadd562c335a40564c0731d254658ba109e1a6336c0ad3b785b8f14e823ab7506281ff20151b240c1dd6f79c8a05d4d57348667662de077c1f9c87a588531643932d15b6cedfe7006ffcee80212872f7dd817e613d27e11ea24b34966b6502c48cccfbca9bc3719e0eb8e8f0f3cac48971850029b58cf43ef804765cf5f0fd59ef41854e4417a91f256801c6ed38eacf2c18bd5ad76641a4f814caa713a1a9a337574944ad03c8600229f27397fe08c5c64ee9db079a1c3694c65ede4b6fd0f8027bde35798a2e77e997e6c581130d1b72af1d6c4e78bef3ab88fa7c122ab2d82a74107b99263e66f9e1c448a39a4a544c42f02a05a65f36cb9f4363d28fe051f9a2abcd4963a4ba9e009ca15ac4dc9741eceeb7cdcf2d0b8bc3095ecafb0d5d9f31e9473e32f012810b35e02544bb49d78a53ffd98d202762397f14 +C = 7cd1da963bf05e6d6d1fa1537680bc4c17c6000a0f0250d8c62f8ec95d9b391b0df731603bbd10da218eb6abbd1b3427c9429d484642839e87b996f2f0badd6014703c775e77e7dec2c2d9158f7eb2ae7b134a37b4cfe7a43c10e301c6e2b70c0ef76c82006aaa8767fdd17c6d3d88dcbe6f9a47b6108d45a47eb1d19a7309ff7d9df12f6fe2fb48a8113f8442586ec023d5de6b0cdfc4956b1b65763852d103cbb831bf8391b65c5681e7638ba166278306260820156a81e2ec4fc292c29326b02dd11fa0ba174fd7e2daed636b96c461532762af67c094de4344aebfae7aaca78ca921ccf861bfd14f6e54a93dda0832a37cf817b963942f00a88d74d37ba0abed1ab09c72aa92082905635d1f040669d8e4d93abcbb8a2f9f099d3ca46f3313dc2b23fed137e90a77d88dcbd890bcca4ac396d81faa47df80b83ae7ae8d141fd2ec710f133a3c44b5050f0970d28a9913d81dff582b67dadbf1f42c6db3e2d38aabb1994669e0f3eeea9ecc085024511fb2e39db92922e9be11776c865e3a24523404acb46920a4c02d573a62de7505640af043cd15b55dfb88d8a9e16c5876d8edb6fe13d7b577d7219c38d8977a16b1b06f761f52e2e5939f122ae66327aabb33efa7d18eb6ffec432cc9aab4090e671ebf67898432f0c7b5d561d0986c50e5503efa0dc0d4b78863fff8faf84646a04067070b8fa4436d9134c057fb29c681779a68dd92a2 COUNT = 72 -K = c466133a0c33bbd6dd487cf44977025d -P = 9d0231b4c504f17ef957ba4f405dfcc8702058d6d2f28283d52219d0be6150712233de497150033b621612004c042ce83cf7dc816137a4c584f6e98c24f2a27f2ac7e2132c257ef302c9951ccdc228723376f52edb51c4432393c78a49e05dfa9ef5be8372 -C = ef8f53964e1bde368dd46160b630f123eba68a8918a7ab6c034a7f746b2e1a1f0b93d686f6845964c6f1d6844b1e25a9dc2d0c6b302d4da2d6d123439d84d164f4d0b1dff9e52696827512523a9aa92de183d2a189026a7d3bf619c8e2f3c165293ecac301545f31b9183184b256fcf8 +K = 09f96292d41b6a1c183ac65dac66079e +P = 05ef3c8ed09d694f229f1acf2d23dd193f6e104714ef9d5da5eb98397bd4a8b64cb6425f8cf7508d4d869ce72f0d377fd307be0418edf37f612503b1df7247c3599dfdf6055cf83176b85d1f7bd2dca2521430d09b3a498b72ef2c6c8d14fd106bd049c141b6ad055ad1f4cd078708a18db7a886c34a1851b7e9921e3bc0c2cc596447726c2dbea7a07312e57799ae92d19de34e365de4b0e706acacdf6d43807fbc1c24ffb54bf6b30b6090ba951b4ad8db0a9d306a2c9c3615acf89e39377e82a9a69cf9251228a52566535fd088636e3870497f7186640a79991e86e4202725d570bb47f559a654c7ec3c21a81e64e6264db92b3505b92328b6208d96a65205a85c71b8fea39132617f57839336a4b7e4fc5e3db09d79b1c92b96b96cfafbbb9055f5baf56dac4ccdaacbccd946fac0dad0ad7e83636cf540657eed6c71e7684845138c011a14747059dadefdddd26cd0b4b5fcb1cf175f8d770016576c3e7c1b96642177722bd71ea61931ad99bd25a4089cb72579b1b1e5646c1a88b0481a619462055073daeabf15a539b17528fca6e6dfb7057442b00c04152f4d01653db26ff539c8142b063a326567bd7286ae92f5db00a22124f3809935bc463587223b5a66a8c7aa316cb9ffd7939748031f7f6f6ebf5f158622e0e8d765699be2d67ad892d6611395617d4ab0c617d62ccf06542678835465f0780e4ff432baaf +C = 20689d7f52d7a9b0f34c7b9fba16d1af62980fe2db84b1fd72be3791288091bfd310eee220b18247dac06657107d5410e6dad71e6a3f84dbb7dc5d4de350c6f896ae0bb3c51c41d6d4e887b9f98e7991402a3ff67f1a45afc066ed2acc91c806884f59ff0e1d23be34caefdd6d60aa4a8e7c20224ff995e692db64ce812bbf2555226275e5c8ec0709b68e17d4b0f2afd1b260d2d7f87f9aa477c79ec5856ae9de928a525af1f51d322bc03bbd44d0cfbf38207fbbff8473f69fc1a01c008eb678516149aa042a94a4912214e2e47c3cbc4b194c8f2c734efc34ebb1df4ec73722eae9b4694c8ce08a0acd3c6c841dca6dec772b9fa11d1dfa548d182da24281ce39804385f2153b501ce75a39ac19603b7a105aa94e5a539f81f25889c1d07d4091d54f81634a9fbe3f4577596ecd1301a8414ef273471a0ed1ba148619dfdbe473f50b0f2e8fb073131edc7d41ff487b60f29657ffca9168bfabb791b1c452c290ae4d3e0501c14e4092869ce0d8b527e7b81fab21d2df201515d664254b896c405d1546dabd0659ba39e32472d302da3c301472535d60d4ee405d24d9978e8947507b453e2c66080a14d950c31faa11b4550c8690e60e63e82214833095f5ae8f8e353cc7505f57cd6f8b775d958ba38fa8a4e8442a14fa5dad0b2d66200a0c18f954d0c9158e8347714a7ef1ec43d4418a73bcb225f960bb99678ee1597aad1056d564783ea5 COUNT = 73 -K = 9cafe109ca9b73af463dd12fb7759f9a -P = ffe559b024d74168dcebb83d3963528de1bb2ae35dd7cf5707b634a9757f06c821d3301630ad701622cc687f0995a907e2c490188e8ef3a166000e991cb52ce37223ad32f8cc01794eaa405e815e9936121e8a6cc5377364ca7616432d175b758950560aeb -C = f41913c3189ba248f52ef22adc096e78dac53c9f32a2ad25c5e99f46441275ababfb3c57c6d30d07eb52eb3fe6f2910d501817523f11293f773c70956a554b9900a7faedaf00c1701ba62c6943885ed938b0fa9b7dcfaaabb645ed3b84bcf81a196d0c2c11bbae0189b60bc8f1c7326a +K = 36baeacf612d9e325e196533e7a2445a +P = cc6d46a211560232ff533b8deb0d2312afe4b74419a21d7e278e3d9ea5c66e6056df85a38f0bb6794dd76dbae5ef826629a738e67d7a9058f3d62d22d71b71f2605d20d80872db5734ec01f10d8c2b24a7d90817b105cc260c8a8217cfe7806643204d4bbcb4c9bf47a032b4f7938ae501ea278ee327177c97ff690c54fdfe8aad0b1526a60e8a32ea537ab0c70b29fa9759a2b28ad0f17fa1d2bb67a423cb74a3f9924a46e38244704695d160d60de70c008c86a4ad6b225aa8c8b59fbd1750dec263fc7d2418efc12734d3a4e34dcf6285ecad73a4268f5ff52e0e7e0b802eee90f7ccdb53419021fe611b5de31b8d4a3df76be6c6be98ff9ff94c10879d7ff338aeaeb686a3bb4bd4d5b6b5fd23b28f228426f57b9c5f2524dd9e3d9a08435726b8b9d7a2841bffee4a06704beb4364a391f26e00edc4cd8c4aa3017ba58042035fa4ff0a66eb64b19b3d4034427b669080016a4fa0fcf5bb21c338a1e906ef7e87340cc61dfbb71b0753032a73deb299b72d4ab6d1175b3a15b34334b43e61afb05ee91b3f82bbce2e56f8eb1c2993ab82883d3004109db1d617afe4a3f6ab01eb90779aa8e019bd78393003195b9cc6c9fae4ea69f70be82daff69d9dc0d45a7ec48910ec0202c6c4a44f454de3b72ba4d1d9806372ae1d5d6da0e7f95f0f4fcdb6f3f7f4728fdd14a8a65995360d3b3976d4247187b4be556ce856cbe3 +C = 771940a0788c8ba29a74ea03a2d31a0a493b02abbd430e9303fbc081866d821b3ff862b0fa17da6bdb0e20442d240c29ee9fa9ee803cff5ab590d7ee4665aac5984d12fd9d1d9d23f8988b1c9ce7561cf8db66a1707346f2a5de75986a3aa4a0cea0f250a94e5518e6440253089c29d673309cada19554d789ff4d4ec5696ec50e2b2688f8c5c114a72d279e58f1642a690b717f456d0ba043bd8cac0cafc7045292b9b92b0dcda3359c72475a340ad6a36d456e4de1ff943d2496e3a57e1417699eadd03db419af7d3a6a5c8678605c556e310585701935f72c210697851875c6f0f6df67216b203e26660d154233cb56b449d90eff33bbc65c59a21631ec81e0827e14e07b1def6f3340bac92bcbfcdbffe99eb0b2a167fb24201af6d5e955d8ef69cf4d2a347142300518a920d9a693603d2c7ef518dffcb5682f6f615c9fd7ac2c3da00e19856865d28096370ee5ae1d451a15195a002855cd00ee2638ea9dc7df6d81f9c45b51a6eb543b1f3b11a58ecac636c084b04fc5e6899e2fbb3c9248098496815724146ec5350e5c3114b668aa9f8be725f3911cb96264b974a2c46b507b61c855caa1a6138df5256907c2abe7702d20affba127b086f0f9fbbf7fd402ba7fd48d1887a1a2175928636a6ba5e6e4f79fbda32f330ab8f2333f95bd655f9e33963fdd2a39c0b6826ee6472d2d72823d24151ed57844772a8e230059dc4ecbbceca82f COUNT = 74 -K = 73867ae9d8fd994924cae2c99fa4c44f -P = 7d5c4b9906f1031852c2c94490c75edfb5020f67cd3304a8ed8ed0ae4893906c19332913555dea8b2fde36c92826df39715f67304ee69a527a7941e23b95548e148171a22fb2c1a2d6d308528bdcbf4f1203bdf5207fb7362f9c43fb3a74b8ad25344252ea -C = c799690d524b4487f957075210ab9acd479907131de6de2995e4db019aab50af6277343c36be873102491aca6281df57ff1478c64e1ef382096d5d98beb31b0cff7002c3158d861439f7ac444e690717598d6e0d1d712b146a2198f233a568fda68a8cf6a26bd7362aa07a597d82ea25 +K = ca2a4fb93a7fcf89d060e2432aba358d +P = b0c5709bf750a8c21ba8c9c986624a8e912603949b101a293751f1eddf3aa0afff0cd0db3e7c942b28ab84a2ac5dd3316d3c382b0b80a416bda6e0066e6edaa44ecfc879a2eac7443393173bddb25983f59f066dd965a1f8261c1020fe728b0c45121585185c8657c420e9a7394eee91c11283bf57f46bdc637548fec89824fc38ae05c073184a29c319b9c90af3e2541949e40bd9d2758a2861ba541c203bdf8f8d33a4aff4f0a73f7d4e84dc41bdefa6c09545985c155bc85ec06fdd5b485c2ec4a6dc7db0e358e2ec372d8bd31852c8fefb9905596c04f00834f1373d4526275c4d1c0ac3ddbd874228b846a31ced7aa88bb48b5c124be3cedb73cd3913dd789cba3e15b8e95b937eda901fc6d550cbc654194bcf148f0b39f56235f1b175538a76da8a1f7caf3a53aa58a1c33dd47bff4664309097f2f86f81e3347a9057d94d4573f8ed40cdb0a95d19ddd4d58077fb5273c351085df6654db0528e1caa2239547c37ebdc6bf42fc4b2c3ccbd0d92d49ad6a1de0efb984f7a4de3934313914cb529d761420b38bd44e908d7180a42a158021154806bfcd62c9c21e6a166fb722964bc5994050c260dfc1b52aefed7976d207454b7d0bd25a4b19f4a5fd029a859032cecf28eff1b845e110c1bfccf427ab4184e9928ea393d4845376bdc88e6635bbecaaf75200c66a3727f8fd8ebcf224e5f649c9a45c6db20dce4587a +C = e6b3ba8a00b816b1e88148aedeb90dd3fdff6c7b893b4df5d65e57afbdd3c523138c5c577d52537ac0d01dec227042b1394732bc83f20c697e5bb2f37d7d984bed842e0f76cb80e1589e13d6a921cc63a5ed9e1dd6100e8bacdeed981ab011c3898c9d697787feebe539d5d1a07d240a52f90364003b1659b5e9f7f7cc1e2e92b23937b4f94df3c08d76460a4c8d9f39ed9b0bd694ac77802723cd987959b066d6f9d0c7687e8477dff799dbec31bf4a4ae8663df898ff252a0d8da4fb6286d064f5c3114eb5adee9555124d829c3fcd49e3f7549d5218a3b90abc0ec590613e92b6ba9c2a2cb8910fff1b0e7e4493ede87e4aaa8b2021b63a90c0a2f7bd14883f29e48d00c031d0b1e6886377ad09b93dfe47e759b9045e5543b471c7eea8257bf3974239927d4b06caeb86cc3eeb410017660dd7ffe77c73bd3e247cd8e606b4dd1fc59f24b26fe694761cf0ed7ef241d7f870314cdf1efe429d0a4c1644547e28c2b51b0042193fb191e4ac55373a8fd1cd4584881230540598fc5ca3f2b429cf9fd069fe73813840e6568dd095dcd16d1d69ae4661ba8f050d65eb262dae7a6624ffd4a95b6b81d1e3c8c90c0eff45e18866213e282003f9e310ae6735dd1ff7ac9dd487b188680f9c94bcd234ca15455d1ae2feae77c69c514d69ea4c41e240197862791d15732bf6576bac162db9e8f1155fdea37942a8945292890c0cd70021ef4ccf535c COUNT = 75 -K = 8b3c0d9ce89297d92cb5b5555e6d09f3 -P = 067952d222148d9fb4d6fc8423eb978d12dd0d1a7dd911632a1ea3c2fa7b5752ffbcc4e1d34afa8c631c07ab4985d4937ee30c2b368274d3f1da8fa0f6d7e54a65b9e69be1e7ce9d790a8801242a1116322b3aec662dc108f48073f509c0274ac6870412ac -C = 7199723470202dfdfd9a5c0878c1520c12474210ee1cc34b7a853b417ec427ed2782f4c22b3db916ecbd38ad9dc3919c4567245336fa0fe67aa3449214d5947ba7c3c12d823166c063475ec9183db694c8ba8456e5b18d3d78afe0316f162a1b2b5b0e726bf518465c72c91c74970059 +K = a471e326e321404ce3920befafb93910 +P = 816521d7c1a2d5e6ec02ea3b5d16821edcb7918ac247aad3dd40fb7397ad190be3e7c2d969c908b12a70d9cdb81a9bc6423aec2484027f673c66fd53d11868b5d7b19747f31a973ce3d36d3853999dab4023f84d56cf0f07cdc8084bb4946b86af68c5759bf6243a5fa5eeb8014ad9a7a01f3ab661b960132a5abb5ec1fc11cacc31f7f8db030c7314e72ca4fc745367da1cbdedaf3b4aa108c38fad479c00bee4b300433819fd68d34eda92e93fa4f900fb9872c87d5ba538061f1306164d923f134052905158ea9abb61719f4bab74984be06d7d9ee4dd787d4b1374f827c73c6a5693963ed573cf7d56542008a4e4411cb2ec2950cd239c32647b0260d207a5ff6954d62c087ed41428d2b83f6b3cac660009177a0e5b608661f49d00a7f66c6cc148338baecb62c40f9d85ed9b7b609797502ecf8b6cc465bc1bbfc90ef4a5e7d87df1b2fce9c432690a36d0c025edd30fd5e8ccc13a48903082a681f56525453bbcc23c8a8dc781363d1ca610e19ae6b96733d57be0418ff8a1496e998a8460965b0bc7aaeb97e82c68c23a2dc8b7b5135790417440513f1a6c60dda79215819d4f62c93d73bc8c862ba0e675717d97f88da324757b13780bb2dcdcc153b349a03b508d82bcb3fd74421c68aa4d50d611118fbbe4faeb3825c5472dae327c698f86412259b35c70a1d9e9f80d40e4e540fdf1af740fe59577bb582b431a +C = 1f0a80e49c585c5842c37b5dea005d96777f7a1e58596d16e6a081821e054a30e95c58827de2e71e4fa853043d8bfe46b68db2ccd908903900f4cc1c45d165fd7f9e33e39dfd2902c86e6f24620b1b13822e101b5fc8abf0f889231db9c825dec4ed4b1dd0ce32c495ee7d7cb60757f9d7cccee0ea0e8c42a3ebd83582e2d87debabacc86bcdd82f1fa36044d212054533a9181ca1990aed5584ad5b8a39e768e9140d915e99bafd94e073ecd8e72a907779e2c10787e46d541f1ba92cf46ea3d5e3acb7b3b932cf962924f9597a819f062d15467fe7bdddd3058d4930dd8b0d68fb538cc0bb6a247eb09a734bd77932a0e58541f0c2d9bc5922eacee55e74d0c72917a499f0013b707daa423631802f18350e11224ef9e499f127fa4010068113dde30f8c6f4853e94f1c1ce9b78313ffa1c0a32a2ddc5c59e9ce982329c12e911bd0581c014a313d44cf1047655c664c9d9fea7c188b136225f4c2ead534368ecf4ac97ef3554c00509d0578511b7cf9bc9e224a999f388d1c8e67db63f39906868e5ecd00a18f9ffc50406ded6e9d13dcfef052cd1831b59616fa3eade10ceaeb52e6de47fd1ac77d9c51b0f073247117d6748021f5a9ad3ce6a9b97f2dfd28d41e921d22642e2f75bc224bfcb10a235bd673472a4f6f673a60c8c48bb77f18f713005ffc9cfc96d64cbedff52a49323ddd8eec2a4d3e9d5d971123bf317e2ee110674dd9b259 COUNT = 76 -K = 921551d6ae3dc991aa6d021714b11f7b -P = 1591d0ff6ee6633dd8eff0d6925d83482f76a4a615b286f5d03e88f95726141a54d7d5d9b5e9fe9b0d19e1838ce98cb2bdac7f7af0baa7d57b6e0a42fd435c634db9c959bb09922c8b3388129e0974bc8574d547920286267c125a821e2afb6df2044efa04 -C = 5fa4b9f8ed4916ec17e888244cdf717a395165eae5884b5946001241b0a5e7d0b2bc7e96b5eadef0491ff6efa084ef8aff0432d719913f47141bc3b9eb686f97d9a9a442bafd821cb9b72a8909e3fb17bafe1481746b01d811dc5642bc105abcc81b202b2a80b5abef246ed4ca81c734 +K = 855a366549f964f7a4379075f7ec1001 +P = eab2543b479715b20a30f88f91d7f5895f42aac4f598df75fa56f18a6fb673cc608e921664b2f6da945cd96946b1d8796ad01076ba1054d828210ea237640e29f6c568fa69449427a5ca667de12fb8b33d83ca904fc291b3a410ac7afb5b37b330d19ce2a1b6fe0285bcbf4bc254e6afb87ec5fe49a3ad9b689a1d3f25cd503b8b39486b455d8567596376ecdce7d5110404efeaaea296879bcdebd7cd959234126809bada501c3e7adf6c1b2d845deee1880415d87f410d5a21a3654e3331acb6d3dad35d3d0485377dafd17ad2675cc775f815c7c9f1cc2cf2dd9306fedc1f21e9cbd8d63d5b05be330689fd59c8bb0f0432083f63b7b0dcd377cd144d5ae876cb70f08907e35e9c6973e50647db3735220537537f5703309b5f6df3683308748244e9ec812ec56de51d26cbd5f15992071265323836f44eb54c835aad27945fc5b90452d5b2e55f457d53503c36f78b3ca9fdba0c6988bebdf3aee44fa4c5e04827e20cd550e2313ef35df787c769cdb077e6c3f99c1c671ba773b5df5c5745ab77f89f36d50113e4d3209fdaf6fd9f2fe6362b672c3a0505b50b658c5f15a724e684c0f977c25f4297c1f9515ee60d03993d633b5f061f5f9d7c60c0b28daef5f83fd1e2087b64648f186f635c074a047c6fd3bd47639fa81d061c229134c6f269c7bc892d3bc578f8908ad7b42b6981b55193edc5160b15c33498d664cd +C = 0be86e2e920c9050887fcb1ad192b00e6c9c7dba4782a43f2d2952f2f72eade48dad15441a0bdcc83f2fc40d1891022d1bdacaf025567705e66a4c5577edc6b3970b2d7ab573436a077201029ec8a500d0bffad76a2543bd23c4e96c865bdaf3c14377d305418fe80e6db347ef55655364055121d11374c103e6c4328bc398d595936f972a52c00b4920a2138be0219a4477630fb96efbabb3a4675ed4efe17c72597402c5c1def48fb20fc936893da0fbdfe8e8d14cb814a145522f59bbc64123f45f06681f30c957ddb0dc685353a020786138077e0e648030a8fa4b270ae41b257f23a43d4f9db4c2cd391c6b009ed94198bed4d4f79092644fc8bb11cccbb8b4e68be6ab74df8c99556bc3407b789cc0483a435a08f88a7e2f454e3688351054dd481ebcf21c6093634b88a04f274e903ca1f987462d89c537cb2be555ab0ecd27d1b0f8af7cd437270e35cb04573bc3c0ebb1cca30d05a9f06d1bb9f29bd131986cd24a4bd391ebc44d3747a91737c8283fc10170cdbbb405565c9ae061f0c80c094c83e5c8457019388cddd9ba93cb8437aa5b6e46d7eb55cfe0570176f658560784945ee1af8a8f09c489e4f940a1b07532477562dd91de33755ec1c58d58f959fee081b5dc9f67186d3b605178892fd805773ed5e50f48172259e33a0cf2d69983a4237d17db61ba448d83f3c9e20f421b696bd72821d55d18bceabd982b97ec224ce1b2 COUNT = 77 -K = 8d315143642022d066ea000380e964eb -P = ee98d02c034614530c2644773c9b1771344b0c0552e648bd92a365e75cb13fe8fa84670d51ac3bab29c8e6432240557fe55c998455a0c40ad7249d8c2184ec4f60c9192a59cd81ee122ab486f7f0f98d97267b9b69e6f5892fca1622c92b8098e3c65b747d -C = 21766c8250a04668b0caeb2c5d93d9f169ca5046ccee4ae4850fd5fab1f86105ed721060307e41a55fa99b63c4b9cd5aa84468dc773ca45cba4f2bd5b5ba01bc12389d05db75dbef904e654aa386850e1bf0d53c2bc5adefe81f2347109bca873b7bb811399001d5ddc85441cfbe5ed3 +K = f3ff3e697ddf0fd9fa6ba49cb0208dd3 +P = ffb9566a78ebbfdd9ceddbc0dffd2f318b46e93dad78fc1323359a0051f84a5afd5cfc3dfab1020167e2830bc81baf9d4d1bd647d0f3ac39086c56dd0d1cd7bfe0d9047f801ccaf54abad348da2430ce51cb223a762e17e90c8e3a89ecf8456856730996eb1fac93a1c58fb7315259029cd5ab6bd853eb01f2662284f585d68a00546846ca747a48f66952f9ae71398ffd37dd237cfe6eeb894a006a058fba408dae482eff9e4f5fcc769d77edf7b0c609f338e3bb6d8b6c5bbcda0385a5a4ed3a8e6e4c50013f9728a229059d0ffd45758ee2224a1df0ca94945f7e46abaabb060562dd90deb4e63e6adb00cde67d6820dd807445b3ab79fd122a2d72f15b65ff0e0f763dc2bc6f669cfcb541a5c3e11620eca22927409553d9aedb3bcf27ffcc8f639d12262bf2a8231462d3c3f1213d1c79d92ba26c2ab114e535ab34a93c0a763beefc77969d3be81d567c1b6e94a073ab8c64178e852e9fc9ab8e0c9131fe09444be97e404626889415efc4385cb9f04b96e758d398585cb6df205415ca899db70ff7e8a0ec957a01edbfd358ede9401574599dfc215d71af43d2ea7884e5e2e8bb9bcb6769dd1cca8dee1db59390c4833333ae7fc66fb6986f03f039e549d1adedb36e48a52b4423e56f976acfbb81fc047dc61fe1410d8a420e824b25dba529e249e8f9a9d30e7fff6f09b400c6f9b36a7072abcfaa1b47eee862aab7 +C = fa980af8041c7df3d842129fc967e6589bbadb2056cc1eaf9e01291fded3e634f84402cb9ac9ee12b598abdf0fdeb65d8a34e9b18d9df76ed0e27ddeac6a9a9340d23cd3f7bc03fda809eef27de914722b32432ed8cd091e6c133d57e9251626f652cbc5b0024ff6b0481e8641bce97df9163c39cd2af8b3c923485178045cbe2942f05779e77baef11e910491b53fd473506a205dd5db68651d76520b4d63910a17ae682c04784d5829bb627ad0ccefcd2a025b3f8acb51089c8fb3e82c59705713ca556d3d7ee0dfa0cdf06dce50e1186364caa8056e11ddaf9f96387d0b43b63ce545f582acf38c1a574b94ad25ef55270902faa5cadd819d6272c5eb11c2d9c13741478358ef25eb0b9883352c9f1a0149bcd7f04c026a2c53cc752ee1639237a1f8a134455fcdfde72099e4f6da933f70786cccc8118d0c14ea0bcb432039b95a9ebbc800191625450efee53620625861fb9554d7757e0d9e65ffb57f69a78ad3eeb69443c351aa38af58887bbeb0d15934151319cddbc51a46f0c7fbe5bb875b8fe4e52e28dfff9a376a06e9c3e341ac88621f16012474d5104e0c84db660ad728a77dbe23cdd061f290e2b38cdb751b3ac2d43d10e55fbd742bde1622947e7b485d98fd45dfda445ddc11c156ae760458a6f686698a87324742ed9226b910b1762aad19a0200c4a92b72da2df60bd04477ce42d2365e905c3120543b34e6b0287a9db5e97 COUNT = 78 -K = fd96119df0178666e9670bc9da4db43b -P = 3688576f39c672f14dd6bac3a6ea854551bc40231e7c9412e5fe194ee5d5072b34db493abade3a85c510d034301ad2e14e915b38264f845f22717f85c295722cf16a1d913f0cd37e17e5d58b16330bf752fa11593ec97967d9007925c0c7eefb8ca333d01f -C = 504c83bb75333975379fbb580fe1fbb749aa340ba08d7c0f06eea2e144133970f00f6fa1cc283c31543c9eac767a93352f53b6b12e27f962b5411722bb71a00e4e3c5f9bee3deaf341d41c3f077a4510a47d84ad6086e58332a82d1bd0736c30bd6e68fda65c8768786b00a5528fdd2e +K = f6badbf446b2eca314077682eaa8f224 +P = 123b9fd252b1be312dd814f26083db00fe6ac665a7bb04b33886466ae7b881d6b54d61787d222e5a7a2982bf01e8d013b8664c18097ed26f8deaa8c194ddb81ecbb5a17910c30e35686f320b2b37054553c2c50f98e4b38daad97cd762cdac2e55adce040d33a1b0786f40723871e62deda50dfd435ef32f01aba5599301493462f9f72aff6e441619c4f47e887c95e5b74fad98a1225fafbfcc1894e6eab78fe2ff550a4df8d615b3cd4dd6dec4cd4be28d8a2563a20269a42f81ffe4d957edfbc676b74f25012e8e0866c12a18d5a5babb583dee9b60997996aa066aa59c62d3769585dd202c6b7395b645959f3d199783f40103334009cd94d958ea24a52a43d8f1bd59d15b0c1f1815ee4f037f067aea531e42db6a9b60365cf73dcd75a10027240b7eb68ccd022beac3eae6d270aea613cae12d9233c354d1603b3989e8763dcca1e4173b5a57433f77a225664eaf55857b0c3ed0673335442d7b0ca74212d6933850a089d48e4a5249df6b4390f58a45beb7910a260548b342e56be3444c0255a11208d0123357f3eca8565513562e833cbd47f4733d0f0a7e10fef147e1b31c40c83c67062a60a4fd04d2aa88993d29701a86e597048f73a3722dfbe58a40715be7f1b95f159405f7626ddf40215ec601a2d188185f1174b536e64aa25e6e55458ed5e90530bd0d09acc94faa8b2a929a4317dc4757faba05f423907e +C = 09579ea3061439e3e4659dadaaa20ba5207f4b82cf24850e91b8f53814552b50af11e8c4bd477c6996bce2c7ddbed0497cc10d5067eddfe4434136f1efe56447592cd64ee64128278f98b37f948d4c0cfde5c8a971a6d52360257fed3a6ad23a0aee8e2747c1ed7ad93eb740d8f778824c673c43ae3ee1fedb365c6dd88467452b42d7aa91252fc5514202d32816521eeef9ef12913b866da5c5a1333ebcc0f6d977ef758db8ea2ed22493aa233ea72058d2296ec86e0bb1d3f51ac7dc7f09adbc4a1f9d754936a2a23e36ab048e736ef3237a31f30b43ef6f099a9a7cba4c1cda39a9f3979331c4321f1a1f9a270ab886054451c3f2f1e18205fc4b747c3db8cd225fe7c5d696c806f980e3c94c9f5017388074159ee15f6fec8d6c3ec50d3e96e3344a5e906a12e6a8eb4b5290b7b10473439d19702b1d9921f62b7454779da0d21e47b6c2de162f8294d4ce756d669978f139a6b3f7707ccc1bdad171897b8f2e68a09a35df4d564bf474acb508ef21e6a32627e76737aa6732053cf926b5c38f96a44a3044b1654b2f543f60e37711502e6c4ce958767a8a3f7dce875177ee93c5a4501f390e26f516c7418b23bc74b6947ad3f798c97ff319e301c53a52458e8f2301376ae92bffe4854a27b91fc563b03daca8b48c59246bf7f8c53c4ca2c5205d78367d827b67f3a3a53c148bb497938277ad1a5d9b7a3ca1ce0dc25b42a5acb3aea8675b COUNT = 79 -K = 06c0f8619e8fe6364854c9ef9f4e90cc -P = 195aed6b6d9a09780d9ec83a9d8e8977ca06da39bdda8910d54e3ba95d728ad89fc4653c460c440fa2aade393a9b398b4a3089de7b692303444d566a35d5f9672cd4ed13a69c823e3f28a978da737402cc7f93fa8caeb3044896cf5892e4f9a15ff99242f5 -C = b384d1ec3c9bcde450d9ee17cad6470c9729a46ca780ee293a3dc3aa03795d81ebd761ed229b418e08d5d848032448269594917574e1b1be7d060ce72f6723c8b83d4e4458bc79a6ecafcc03f4e93ff0e3ba77bc4c7fb97a876a32b04a7f18cde8d3501cbc0650855987802db9e9459a +K = 5f9408e3918645aad8d136618bde4307 +P = c726fd09ad374c5cc67b9668c321ff5f688c864cc9cbffe1589dcdaa156adfe04937bd1fa233faef4a5cd7b45d21cc0eb82b19ba3eda627d9814eb821aeca916ecb21febcffaec55a81ba5a53eb36cba1d2f5a22f7080ff5e5b63170f15b81ca929cd094fb10234cacdc61f667e35eb82f04186f14413ceedd9f3bc7558cd76ed666bc205f9e6bb1f24130eaeef0fba573d1d9831492510c1eec543e685e4b59d64f8201a78a56505631812f6f43e6627a879692dce571842691c9bcde3f05de8a0abc07e38ae69b9c1a0070804ac9c8764f6896b5ad34edd9592b3125f4ee8c541cec186c7cb9771250fb2912604b71e0254ffc2ec9fe640ee6a240ec09c86729bb9672a00fd2f692ed2b8c4ae0b846dace0bf3f3c32c4928bcab7cbec0bf649b60f2cf6059a46b8e90d570a8b517422f851e3d6a24471ab5af5ae00bcb7623a554af62c17c4b7c9a26e28441e1ddc69504293e24a0e8a782f6e018074442379ec3d6c963a77379016327b4c08f60e9004372e9af2f78d2c13e9418d5b5007e40a2415e86725ee03a778a61120dfd500765cd4a31fd91305b904f4e6e38b83bf8f063ba40a14d1df65e32eb949a4ef05b0bbef7b02bbc29f7a4a6bd8b788e9fbb5c36a59f1fb406433afd0f17b9d1eaba8fcf4259260d89b724d6e7b6db6e0bcb164d83e758ccf0e6b629f28adb1a2ab64535f64b79363948b9acae5824eb6b +C = 07b185f132c4797e3c33877ae4bfb0548be67221bdd78023060bd6f788b041ecbc6f1c97fdb0c38a2fdba9bfaf8ae6e9b4233935a84e4cb4f5ec512e02bb5a4e280f63fc017b7b41668976a6227b00b8922c9daa27fdcc62efde7a6bcc086ba8ad8117fbbe78952a2a9ebcb7323010096a24cfef94333a9c154c5baaa680d265cc1fba8e966258ce802c6201de8656ae9dce79dc1236216633f63b1855f41ea9d50286434c8138114daf70fcf864fcdd11659e2c577e5d94d9486724f5d54d68615e4648200e0e9061f7fe9608853be5d0404c8bb3c8150a79e09600b4b519417d70e2fe22cdec795ee52443198546ef7c172a70a654ca3a7b76d92b625a11edf9b85fc3ef4d0f95fd5daaf68faf2c0f1c7f8809160536859497d05215e41d7bb14306624cad600c99afb46e204ca5f88dbe3af50b58dc834f26f19c4d78d9092a0808ef23a1dcf4c3a592767d7989650b1504c2f9ea2482d42f2cd559b5094292cb7ec8840f322c84a040767a9f5445c3b97c319f06ccc4a349e3672b77de3471dabe393117f2699d173ff84896d0ea43f86c2c4e14dc5a1c94ee0979d452cdca6b29a30516b2a27a99a82002f7dbf627501c25e3ae23e0f9c63eef552c9a8159432c76ac79646fe846c2ad11920d6310f95b43b9bdb1f2f17c6af68371ee5e5e56794e3d201778f23ab675f626175d8f4f24fa7da9fcca30482e2c481408f5541afcae1fc8f3ba COUNT = 80 -K = 12a525033d2b40ef32ac76c42e27b7d1 -P = 134bc0f14c164d8d2dd7b26d329b99b1a7b17d04f2e31f4ce8ce88c8ad7d076e751d05af2bec51b87a9c32f9a591e142e2e847180ac9cf650be682ad67be13051d5d538fbf9869a8dc72b4aaf12ddd946ae3d0080eb073b503ed4e90d7488c838fbcba3f15 -C = 1df62b54999ebe37a384a74f8fc25763efc06fbcfe66c85a09310ef3f72980a4730b7618da51d6f1db8115040e7b717d05531deb79fa28c6a145868801c7936de5236563485ac22fd339e2739f68615e1e21a1378560f6ce033cdf0f41a30d1bd1331ef179a2cd18f3cfca6cf5ebca86 +K = 0a93fbd942cb5ee05bc9cdf287f38d33 +P = b4f3f118b5edc1be6cf7699d00082f5caebc978d76c242dc5185463aa3d01d381d692aad267b81933edc1be27463279190a5f0b34705f0e0a0dfa1b643027bd194e907119353051de817d5425b7e300de9c8e7da96af570375fb5ba64b13bb8f9405b7cea0c46122e3ec0a880a20eb075ce8497831c0e27083f02eb3fb27a27871362b3b362ecc28fdb575d5317b6e14cea523b0d1e2fc6f1d21a2ab2bea5836c2d4ed91624696a31b1f626b2900952c48e702795fc29d257ebd62536890b799cea4bee873594e42138df48aad6af2772c0bf0fae5be63e37a6ce4cfe1022901aa3208c410fd2e7d80f7a7cc5201270ecc01361e9cff122ad720315ffbb0985c7e831c6ba887babdccc8401b9173df8d7e7be1262a35ebc694577d5eb2e0a1e344919f597a551ebbda187a78049ebbf23915acb881181016de15d0313e2ea3303a66e3a094ee521dc98de91b5c31aa6732619ef537fd67b18ed8cdd5a2423cca1b9928a8ab96f405d752308997f0dc606efe3948da3bd26cb4b3624f347f66cff45ec1c0cf04a8db6c58afc7e638eee4f366e9057862f9518aeee3f5750b5507e934cd3572201aa53bb8b978f867a871117bafe259f1abf2a43b9ea4c13c4574315ece6d4e81c1025afdd9d5487d84c06b8d9c24a31a242dc362840135def66dc5898efc060c901cdb29ed94a631908c81bad4ef2d09ab51b2bf082276cc7555 +C = 379db6f99fb49f3c7115eaef56a3b3ce6be38eaf16ee6db0f42134bfc4536eef06525a4758e59f2012b8c7443bb3b88bfd6053c2fa1135f86763a56345e55cd4cd835a52caccd3fe7b8d99cbef0806e6d19c0b6d22605ae942dac83fd5b3c2df92f2d9b2e4c89a0175e76c2dc43d93ec227ae258aec7adab68c236ce6e30e41a7befbbc10bdab8843e7fc03f561f01b1b0979c6722b26e9dd7d65ca9e0040be1c6bf324be1acd2f79bf90ebc198bf9934d3958a59fc51f7d09c715f1eeda9e11d90aea23d5eb65a3b61c2e57023456dfec3670665f658f99fa132bbac33b9d0d54f8c3e5b89273d69bdba560be973cadc0524d7dbf7ca22ec324e94b8a3500836bbe08cbd7327041cea38031b607fa180be6a6fa303d30b50059e7c3212f19cc0c302d9fba7f4fe2624e2785e78561be08b5a5a98225cfc1fb27e555ea69a9bbe08cfa38021dc07a854517aa1cfe320ae47d7a1299ce0a5a9fd632ae9d60392669a409caed760e8505ed74e3d71df502fadab6e4453302fa5937aafcc776e3b67d84fc55f2b0df5e2507ae7177487afa2b682658a8956528e1e6b4d5177c89eb6193b101f3724ef4ecef7d018035f4b0f04e5132513118b685f8698d46ef3c3f92f0a609481ce8336e1b748927d5f930adacd2e5ad85a1e83aabd5f4564d27bcb8e1e920586068eacaff36f9a1a52866b04985f363820d8d1b61434c0789c0054faba677bc0723ae COUNT = 81 -K = cf867c37894db4e4e59b6e80cdc68226 -P = 7093edcc6bfd41a56c1734047908e7d7b16e383f03e7fc1bdeb9c72e73e8589bcde99279f57bfc343f6d5fb853a1d63623d9564edd9e4366f42948a2e608e9aebef91bd7286ce4937ac63ba0cb452087802fd2d96d0c4b0b3c9446f22ac9d668aebb8422d5 -C = 00348e8f28c53241e2a44526b0ff2313e48d2ea75341d694e06afdbc0e53f87398e7ff2f71d42c4d7f06574c7008752e06af458f59f81fea64587d3a9f6f4d7ab7a192e77a51cc4b064da1d7c428b99fb5801d7457398cc85509e54de9e170c84c81cd1557e8bf159e4a0bb84f575a37 +K = d2180738850bef57bb06964ca6e761bd +P = 6171a2c08af90d7c0e64c003e6a9f49b6054b06ad44312ffd2ed32eb158867a904f67289e0aa526071216fdab06c31e9794c8cedf3bc4b6cad8a4a816f833b64eb7f7200b662f8419114131ff9424ba1b308e5d7781a917146fadcc098add3104e6075792ca513ccc41f9fd08fb9bf755d98920e3da67c47a75841d355abaf968d3d60153d6f48844a558dc6a07e9eac41605b1671933a198817bc2defcd35305a33212c7c9576d0a525605d0b09e4c662276a5411402207cb91095255d2734f9c5f79ed9980f65d302d9a901d5c4bdbc2aa8b6df68f686912b67f43bf7cd8b549f1abafa19d29249cdd9301d70a2f492d2917e9ac8cbb5e11eeb28552e45526125318a7890efd5102d6d9f05a58870e7fa08212144467210f777794a7c7b6dfe5b9e88736e3dbe410b539831839c61a3df219c2c1622ac17aa02115d0910b1ef5371409ab320865c7397c25cf435a673fe051728137dd6eff57ad8d4d2195cb07408b9104910aba21fb563bd7995abd5adec7aadfa3b0cc371a116239837dd751a5c202aaf1f4d7a93f1fa8a50b93e1d7f4b3654ef4ae2e807bb01aaddb2869ffc155553b19f93f66ac287bbefc513f9019ca8b04857d885812e883ab365d33459d59afce8967f6b10a9e9b7b34c20b5587a2a4d96727f281a6a9f9f971eecb99d6786970d70a18383c36230ae20be10c2fe7fca0c8822d3957d5a6ddfdc039 +C = b6913f4834c78aec988bdab2d03c20c25525e22ebf4d8a2e1ad7b73c6a70bbf470918a1733b8a5fdb29ee8fec374ee4c9f06a8192fce302e7be27b145dd04dc785a8ecc33675975eefe2455b9b8fc866235aa61c7099f23f5497e02ab4e1d1b9d54b95888c629000ba981adbaf2dd285287a46ae6b5d9660a9c3bac11fd70774c2df809e684ca6b2771fa49aeb4027909e43b019518fc86a8892272e19f6207e8cabf473ed8bc53da5d5e81e0cbf49da2846c0a36b2398426c0b1f13968e0e212a310190ce717709587b2f0599552d3c4e82781782d466b706a6b237e2e492e3ac60a5ebb263150fb5578634d11f8b313fe9aea5f707794d8078f3bfaf04130facb259b1cfa958ef8e2b4f742363a134719e0c38338dc96166efad04dfc743e10cfe7549203021bd5fe242da200d1cf101177d1805eb7cb1f75aa201bdc101ad5b0e7d01215da63854576f2ccd83da6b1ec3396a9bb8790ed6ea8e6481ed44334196ecf0a2daa42c1157c27922083a21192d3b9c2a4f34a1dc06088e61b5c414f0923f86f9d6810a26b49aa566ee0a3c6a6637201da23b3694552b4a204a6b6dc6a55448e7fadb1248581f62a8ddc42ed55103008fa2a1b78a900c71016c0c6e2572120c08b4e2d8139dfe6982a492b10d4b0710e4dcc1d78f1a0b24c9da4f2b3a0f6adb9a324eb6bdea95ebba6f4cea1fa6cedc77cf82fb69c405f509ae927432410d8412291c4b COUNT = 82 -K = 5c5a8a3f6eb3b42938bac915599d1162 -P = 083073f736dfdd788bf716a14b0e034e39ac23655017fe59d6281d412478c597bc3e9e4af4b18b2d98535791e338e8f22e7959af4bc127afcf780a45d590ac89970d33406d69d139e0a28824533da24eb3cd6f377ef083be55328a857bd758cf6a66c34b33 -C = 2302ada306600bc6ab17efe442edbb5833467cda3fb9c7500f4c44beabe10e6cc721c0e38d6513b8d6624fd84c3023eb774ce6f7a87bf23e1325bf2798b14dd18cee9e99c0323fde0edfb077584f6339b6d2e91f3815465ea1b502428bc1497280cfbff6c4e3b5b525a905f3ba2568cc +K = 6dd0954a7abff4fe432dafc21bbd4ce3 +P = 5945e10e5ff56038375c22e749ae1e56ecd2227337da838ca9fe0b3ee52c7a45e92ee0459acc3fcf2013aa6f3fe54db1faecf323b47dbd5022d5c0f0f331a4047bdef4711be2cfff76309f5c6902fa5754f581d978630878c754af2762bd3d3f52aa0010cf9604f9bda7421bbe7b0493d84d8954e37303de8da7059b0283bdef30a13a63abf66556066f964da41b07f73a97d369b4689689bd3984d4663f4faa03251784d42d87eca0c3d48ef4a689791c7c928379559ddf82cd7431d25c72a3a45a9f96a30266c06ec3474660ddd3c9482ef2d2d7f5b35c4e6e8b44f42913de07790feb6205bc79dcd9e04c5f7408883ee1f03102e34396293704744bb585da6d9adbd5d511a78c0b24d2bc69c02d794845258e489c9f65ccb54053e7d0f3b9ded4dd25d7325395d8c1b5f711f13d7be8e4d8268cc5c676ac2df0858ccaeaa78e8beb4aac991698004259ed43aed8acbc89b1f9a8c0842904de5ebfefb0ed0fcb75bd1b1cda23b7405ea493ea67eb36264ea042c31b4a6c99302ce72ae7243b78bff756725e3b59c18e9affdd7ab666bd5b55d0f0ecfb492a8878b2cd4c7843a0a92b576d2d57c26b8d99e9076b468f0d9a91645ffba00296d60ae81a42a025302c4053f48c34deace2bbac9f80069cff1c4e5c212d5f42f9dac676fd7d8d830d33459f60fcd65387e147f06db4fdea4e92f7ba5a68e8819b11f3b7417d6cb1 +C = 8134c435188db063ea7b1e57ca308aa9df6b12e7b964ecb8ef85ed01468e0fc25ad3eac6f7e9dfcca5cf14f1a954839a3568d788ad7aff3d661f2683d3778d9214a3cf0f10856cf87a370150c53d2b0ed7329c8bff3c6ea048d2037fb5670d496c545f4543ae46504d29cc89a1a9018e8334f1a9ef26c02f547440f73974c3bee98431781ef29955c285785ade3ebbcbeb64d4007a395eee7a14ccfb5e3a4db89ee4e8cc66e36c533c6b3e4ed582eaa21d2cf1353ea4bca7dabec9eb1ad122dd149a80499fe69dd65580444f365dea74d8585bbf214625e0b8a29aa1f1ca78a2a4637fd9c517d17710342eb9b96fbec24665641d8da79efb6887af2e2d54ce4bb03c791e0ec8b93c5b9207f149f47290298bba33566fd2fb7b3a78dd6d9c1553c43d61355a95062902f655fa4c18ecbcc0633b20bf72e4ac6470ec713f441d9b73babd403d0b52ce534c2977f26016b0f15429a2a17e4cef705398a821274182db3d2de8732c527b31e76e65025438c14c80af029d3b19530b7ed0232504b9c9c92eb26296f05692cceece8633b48762388b7241dde6632be86d3801dac03d186c2ae2ed051bb32b0ff4883654b4b37b7b1f6edf2a0871aa6d8ade41455293d0a3b5f24af706c11e890f9103de932e88d757a0d496ad54aa68bf14bdb41c479fd92d05d9b4c7504eac8157507058d293939939f22d49e4b0f5baa454fa695ac50a162dd1b70a09ea COUNT = 83 -K = 768e0fbd0143e3c2b2b2066efe4baea2 -P = 3b3a515e84a8a8f499e4da8160e343f0da64a363d16a277b2b55bb6c60d2e90f915a9308f84d823ee53affc6923420661a8f182fc257a89b7e799a8b704582453b04f5d810a836ada293ff364264030744ae2fbe0e62f122e295abb9d0844da32cfe72d4fd -C = ecb521bad06e07eb8eb225b3e929ca8295d51d419aba32fe77f9696566a1c8e5df666c55a43746bce4231aae5a4eaacc4bf701b77413b5947086d48b873123147064855056fddc7a2c6b428d8ebce90e8fb781acaf58aef4cbef4d0ba284466e62e3e502b38699981dc1299f233ee3a7 +K = 8d0a291ac5dda1c17da70ef2daf0a15f +P = 630b882b943c59e67fc753800e1193400585511ff1dd704eef96f88117bd020a4e89216deb7ee2b8a8fd290b97d415045f9ef7245f2ed1af9aa46fb8ce1dc5a4cf0d8e7bee5188dca1ca0d804dbed002161f421a3ff99f078d95efedb7c9e09a01e1068b3b88526f9857a5df56c7bf4ce4546739a026c80bba7c8da43d5e14e7bf5f8ec7f7d58128e10e7ae70a2aa98d7f7dc3eebfe77f906701b00ff0c6aab4d8ddb6ade9614f9f0fd85ac6cd2c02e3f20709f8c7eba4d46a3c065e8401c30f9b31a02b353429d2c394bcb6493146efd5860128a0cc6fbe86a8313a765fc6e508acdb7d987bddeb6c4584192f3ed513ec5f2b4386b3ea58a9b3cc9fd43ae939cc768eaedf1e4035c785eb75331c5d8c7a8d9324e468a49d1489703fc8534c38beeb56ac308ecc13c583232b20bbe3593d10e8e2f0c2b9c3e44572ba5dda5563af42385d4f00aeaeffd35f2c8119da43418993ff84bfeaefdd0e1007a2b17ead77ea1a01f6ea55e86fedf494bcb92d8e46ca16b2ab9f7eac4c314efc619061def1d52b75e0f6dd602aac29a71f49c3c0aff9c3b8c76a8f5e6dd8471baf0cbc664daf51c4ed574d70ca43cce91b988b04c9cdd1699a8068a01628c31fceb366a611f5273a43f41aef6a50f67feb79beedfad757d33a45c7d725a0078929efca25c407929f59343a73db756d683c9b5a8326b531baf17b0c33cc2de20bed12a6ca +C = 704745057c376cc49b033cd913cfb621f46c27868366b9eb9c22352ee73db64588e29b890fb8da9fad96ae297aeb8a1eeed3a7708e6ed4c882cfb51c0cad1700a43694ac9494f215b63d18d8cdf49e059aff09fe6acda05b2a716b0bc67ef87d6c32da4d32ad6335ca4fead20dfc2490b335ae2cbda17f565253f2e7f560ea175ba1fb472c70ca6fc655225c06420caf79024611cfbeefd120e3f455cfcfbe900ea298f691a2297696a89744e6fd4e4f8de45c97526c435856987fe17f36ef5e0e33d7bf24a6fbb1ce63aa5138796483f86abd9f1fd373094df41cb7dbab760c50a45310b078d1cdb425beeda70479e160d36912bff308b80f9991836265e9032a6214a394ff7fbe27fbc92ad3475c60b441109dd75a8f77ab4d3ce5dd2728290a5b905802e441a2bc8192a4a2f11266ef91c9d9c5e66bc1b3febf9441f1ae5b44cd9566ce64816b0b72fe0705933cc3faeb715ce200517ca52710547c218e969ad09ebaa407f30c06e3e6397789dc61af84dd535810cba0e6fac926e86a608f650138ee2fab1254ec66bd944a57eff65ee0df6f8ab00ff9c4a511f87fee4d39ef87f1b625a5fbc7bcc371374bf540d7eb4d72e1cba0923affef2e1e6e0f564ef07e7c15758456df1bd5bdeecef217b41e10029e407475affe1c335ef3478667ae37e6ea570a448814325db414dfebf8827a143cad94e5c2ed2207c7b8e873543a2457aba8f6bd04 COUNT = 84 -K = 86b14f292f62d9913feecacf04c81325 -P = d4dd576bba66a58f82211c2c5c41139e36f0bee01caed41dbe1e3f27a2bab3707613b8921c8cbb43b5cea2f09a91fb14ae731d5887e9ba992235e76c5dccf76e64156f12c16b524eb97b3f43d60750907928484d2291a8b918e7ae8fce093d19575277b53c -C = 766210bc5c352ddb2ba20c3be2c84f4ea57753068875db8f3b65bf561ea19b2ed83743580515497490bcddd49ff9c4d1f80d24fc7eda4bfd38ef4df15ada7035bfd63964969ae1c547144943c795db12b811434be929fe400afa55469b2652a6e593253eb82bd24a949fc24f009c5df5 +K = 9a15921e7f4f484e8572f2cda64fb5d7 +P = 5614b4f4697c306b3203bf5476786265a0d1bfd4cc867f04905806d47c80316bd3971f8af3a9fff9f832cd8804dbda5fdba9eee514c4eeb2ab44293adfd7033a4108b277e75a3dde3f6e1afce5f86a860231782947562697de992c75393ea63668e4f7e54e2a5f2024862aca983af5bf7cdb7495158e3ceb4bf4b3edaece9f003cf12acfe2954c5da73aebef70f5cbbfea02fa00ec9e6499b67135aff2d65e7f109dfdf636a458385f8277431f38f59fc8cd1e72aed482b4ef3fb2ef7cb24c9d0de04f9ed4d3a3492ae46a68869800d892d3144f1d7bce0b6d3ae57788f449f356f0b1dce0e5a9e222089691c302a86146f8882697860ea07445c6cdc5139b4bb5ff9ea05385788ab5b8bc3efa92e15682c9632835bf5d513680630ed9f6c79328717cbd111c02234e9791c758ea5e23eb4d3456b65484d17df9b3b9858f5543f04323fc49a93260ba34b2eaa884b8f81a453478901a3a4fc6a86bed83be1da1235a42f4a25ead44bcaffdb5534ffb0e4565f13a46f8ea06ed1519c4d4d755f20ad817029ac6273c55a52f9b1415cb3a877367046a336d00af59f98221f5f08252f0373d9fa4f97d26d39dd4ff0d19014406a986f65433dbd71083d4e0b82515a6c5ace96b5882401a86eb7546c755cb17523d649d187ff95b8d47d0c423eb311549607b5d5852080b5f51eff7cb5d689a7ed82a0c38f442f2fba9cefa980c10 +C = 09aadbc6920db771dcaa32a3526cbfb4b51bb3a9050451d0e5928dd83667495e921c126d7b20d9a138bf0cd8cb3e13b3d973bc4073a67d9119b69c9e09a74bf4cd999af5235b352995f0b7c23c98f04a2efe803775f868a858eb21d640231d0c4e38b91b3875e768e2e5f9b3568d9f39f9eb7a6300acd320d10255eb95774a79a63d05711e520bddb04f31bbde0906e716fa83421ff3bf8f5707716764c352193cfd7193995f0820d8476635460c78b6838ffc4a5e5324eeafbd6acec144bda28029ffc60166c02299b9695064d1539437dbd5c24d05b62a204aedfc76379c5672eb92a2da2afa5ee491875ef3b46a01741c18c7013bf7db44fa7a4c181c236973ef757474141844817e1a982535339264dd79e75546bcee2cf136707e30b6b1bb9d55c5856658b87333cc29c2829719e248bdeb18aaa7834bde99c683920085bbaa47647bf8b5d20530bcc7592ad3656935a7ae6013556fa31ecdcc18858001c1c5e6b5c782b9e274d7aa7c5aff529ce8d62ddb29433cfb55cb22ac21f85d06ad289fdbe5a007bafbd2d7491b413778b5d09b6b95362e211eea85edcbe1fa9e2a35f91189337c1b96e5fd1fa38c5110e51c673ec619b49c39c9e0681d2e8b24ce0d1c771bad0550c01ab41f8d8f1ab23bbc6f2956499a085907158514cc4b11050d68a6da8a7a124c3c2645b0fd3f867364aee426fcb767afb15621cf5fa00c7be0b9a4e77e4bb3 COUNT = 85 -K = ee7af9aba68643eccc707a2ceb0a3dc7 -P = dad95669f8d63a3ba9e7c46668b31e47d960fa04f055553a5f181fed419600143b1e7aaac2ac54b9d1bd9adcc5d6d97b881d2f109582b09bf810ac822b6ed59edc1ea870190a415a7964d9999088780b237f74556172a39b7de1bc9d9bb4c286652fab4b8e -C = 8cb955dc17b405f477e6e8058a17ef325dcb5ebcdf60db4abdf139a0cbeaf725a63851f51c7e5d4e4dd729aac55bede21b9c23a02dafe356a3370514b3606e1c21eb4ddaa79e4a62c7bcc01f792d97721486a791accda90e85197509e6598317eb2ec607907b283dd72e738aa41f1351 +K = 9210be95967f07bcb032aac0efa219ea +P = d05424f2d68b45fd3d8dc232e451b63001000c7dca17dacf765b8a4e958d13b3137e3dc791f858727891568fe10be7be010b360a59fec620fc6d88db1a0f12da2706fa5cce4e24f7a617f05203160bc5135a0d0dda102a0e12ff21aaea782ae453c097d5107c533145a042768be54db80bd7036dd54fb8ce889c22b756abf3e2400c7670cd4baf3d19d26db1e3ebf06ed667afa2ab7e73f074241830e1ee33e249ed0853d611e28c55a36e495aeb70bc6deec08a3fe836085a2551a6f9f84fb9a19495e38d6bf01771440862bb4e7e0c754385556a2861820f5c73790353b13280131b29d0350fb4dc464e2f1e34e3479f1941bc04a071874cd4ccba40f765a92e9be521d366bf6d63e2c61be24cb5c169dfa30f6a98058b31be3e5b228eb43a9496eeb33056dc3ddddc9aee8ac3bdeddc114d1f97352c2da3d3c90714de280ec80110d2015c85ae0ac6a10f90093ffaa0cd82f0d9e6bd679ae7e49d9ec2f3c400338aecb5b4b48763f255188031ff40420c19ab3fb5edc612975aa85fbbde0af5898a0fe22c89b6bc6a417a62be0812a746bebc22539b7ba85382655b924e95f7e60988e98e77e78cfaba361251e8eaf1e530801201a2d43b0314965c653636ac36dfd86112fbc08f75c5141c91ebe82788d7d187f73be2278c492f6c50945fd0ae1ed53c01a3efc8b8f690f8931b7d403304d4cb0b0dcaff42cef0ccc4b2c6 +C = a4485b46c05f05d7dec60acdc0b83f501d0d6434f7e7232f2f7980c026f97108ca3341c544c8a9c05f5f9e1c6874e36ef404f98a1921b7bcf36941dd79e3a55874a752e8a9f279bd4209ae85d827ef33ad942a23288dedba2f6152699b452dca9282a12c21d89f4c67f69ce01b36a245f7637e0de5e5b6d9cacad7742e50d8f473544f9c27a02c12572bbd64b306593221b7c8f94600154ac9b933c960471aa29221384adfe30d91b18cb2285d1531080018e971e004a97d72ae98e74eb06af96c6b0ec40a3674846de0e0584148de1a1b2a0cfd3a00eec1689cca5c9c79e99b9bc9e4ead60f75cb7f3a5133f7ee7fe7aea78309dabac616ae77041e78d19035d74e56c8f23a2e1d456fb1c7533021f54e9473f9a17043f595433efe412bc8e11d576347f880d6e25aedacc7812dfe6a3b6d0e6ae8ea83ea1b7c899e025cb01cae2a88e4fcd54449b7a26886492c29afe1e2255c1e9255994c2431ee3016e56b0c93e1fa226aa54fa6b8c1f4b728cd9bda1b03666da8cbad154c400f506538c4547a4e9b6e1fbf5f48d0d6341ce4ca9ae67ff4d6c4dc9680f268b761bcfdd2d9f4768fa8308619d6efe9e5724ca987fd39d61a9b0bdc4605393ea714038f36341375307204d3fd2454c251baf2df12729f2764cd8b4d747e4333e88e7e6c41a9334d0ca8476ed12449aedc93be7c54145da03343a8937304edab981aa623afb2ea28d88afc15ec05 COUNT = 86 -K = cd5a65a7f3ff3814d4a24a89a0ec226c -P = 1f5b6343a1b748f5d1ec0d70721708daf43e8e3ee8ceddada3ee00b6dad18940326a0ac64ba143800883f524af17a8823b27daf7dd121602e1312ab12981d265e69fdac7cfffbe9ba734b237bcb8a6e29679e63add8d4c154196b98e734579596ce41e65f4 -C = e15bf6bc99222d79a42b46d1e4c9f9abaeeba5d766e33ad40e3b5ca46b6a7dcafedeaccef8c86b2de0efd0e5662e67c93f390231484c9ad610bb33b5ea825a72ceceecfc73c9ddb080ea5244a31bcaff7d7f54f31561afca28145d774fa62241ccaab82cbfde83b19cd9def13e0e007c +K = 5c1f927f30b2dcd869337cde7fadbe3e +P = 3387f97bba2e824f18f4848e0c96862841dd5297b0d753a487580c1789656f46a3127e35f44faa7c603776e3d858c4637441ae86fe1644835a89b90524d161834ce93d043e8d7079f621850626d0f990ba7154e93941e47ee1290c444d6bc58d8c6b643665c992d93eb6e88659592741d049599dd840a07789de5799ba92a6fc254bd3bb5a5321a5fdac945da244e4f61be702e291cf31699ab453efee7ea28a7a732b3fc547589ea3c0718b2cb59cdb6ea0703bda0b09047aa458ae3354cafb8d12ddbfb30573b90eddcfaca881fa8dc87d4a28d23c2aaeac30af92fe99e75fa8cf573c31df6106e4ae7346dcfded389dc957c152f1be0b56dd62a607bf735f7bcb82f69b3c6bd90782a59f04b167bd5a5206ec18437d721a3149fb7ecbe7d8604536a8aef04ba9891cbfd61b242092ceaec9717971ebf3bc61d2d92cc19be850512e30b55ab14815f8f8a2651d704c5c181f67c126f8ec4a87683be8c9efb7c794450ba93b7151f189fcc6b5163da8ac7d992f09ab7c4985e84598c7a6be1b7dfa9e33d8d2f4090ff2a6df5282b35e620fd3bd0d9cec66452c7dd7cc50b3d0031f498dce12cd96789eb58e50ae6c4359663e6d52f21bd002748c3ccaa28b08642e420e687bee364ff5f565b4081a718e3918ba492f7cc3ecb731d394daf5c32fa01c2ae19fe714a6cf9ed2de92b03326994e192e9b0a78430661910263b4a9 +C = 133ecd341ea4bd3b792035308b15f24ad566c570939611d052af92b5bd44542e94d43d5e893a9f31e8448f16ee7a6f328750c42a8f2b9c86e67783d5c13dff3c96d7834bdeb6614c37c470991c4f195b241ed7749690080d4f00bc7f50aa2b673f5057272c97c765e22fd51d25af62f019e726721cf472412d82cfbd96d5a40d257b0d9ecafe2e686e5f7530cfbe62cac90b5cc4656914fe6d27c46b8cfe32f074d9f5eb0402502f32a9d3b9a79b0370c7016a26d66caf9d69683a1a9ad6f07bb4ab03ba271b9d01da4a466b7709c1ced41f3f2b76db59e1eef4d4b622c59bb6a985c51ee16e3c1a945f34ebb8a12fef5f3d96c77cd5180e97d8c0dc489c882a4680c7023d30e1c320206c0d5969ae89adf03859416fa01caa9aa41db4b8c74e75cb69cc469c366d6a8da387ec014745cf69f510b958274e4950f1e2c149a18d87c820f100d9701fa3cef929c31ee8bdc651e7d81c85891ba604f05158bb01ec14ed24fe3e2af9eeb1ee4a0518f5407f79ee4a8488c622fe804065e66a8e8b4ca59bc05c11385226080dd10bdbf570fb8030f8e1f192e7fb8740f5fd954cde235953349b29a4236929f71e852c464330e56f41aa0af3e8ebeacb454a9f8e6e8e7579a5e1a11b0213d9632973734652831ff403b4d5f53a55a70affb4a80fb160e22a25235baa0f1b091b807f2331fc3f476f34f0e373fe6c27964c55b97b29ea558496f2e6e0efed COUNT = 87 -K = 48e228318c2cf5e6f98c687cc74b803b -P = 358a5e7f17f58d7861d4d3cc93177d64e398318092f35256769ea849f402747bbbc98aa9766c7fc5c19940c8f560460a67dbfcd94e5ed6b51f34f866280eecd4f09cd2ec70ec609877dde2a713975143767d4522473b5655aaf5d520835f3975f023c17b8d -C = f509bf9cd8e57a0bedbcaac5aabc62994c139fc412f0d72ecf553411099fa4415b101dabdf28b64dabb53f1a936098fd18174b599ef72368a013d12e5eb41f4f1a5630596379295c35156143fa0cad623d3d94cc45fdaa5da09556a493fa7dc437b28d787e862fc9cb055e90bcfce149 +K = 3b2e34942383dc7e077cecac39c2fa88 +P = 68f8c94ee61a6df6d64717b07f25947aaaf337ac1afdcff39f1e84cbcfce6cbfc040c0f4e5b555cd9d64e0b7e2172e2a2eb3a8c633fd998f10da9e0d4d996568a285a87620fd21379906e461697a4bebc39fbfae85d55209716dfed0033b09889edf0cb199045a183b58d63cf480dad4ff7eb702cb0de41d042713e81a48e08059834aa02499eadee1fc46362947b32afebd84fd25eb7d1a10a67cf3ad268b79173ac4bd8c35c9627943a68d8298169928d5b5987382c44beed8daee4e5a4e63335d69237548ed28e1c23ebe36f26fed9b3127f9e47deffd16815fca4974b81518327098fcb57df53733d2b39722122b6ffe0854ec2d28d956e0099506498fb68d4f3470ca7f781f9d96c5712fff82dcfcbfa6f76ac80e1c68e7783aaece0d13c9a9640be8775a1b3739300a60ba9ffbd7a4c0836f76c0e58de37ec9dd8509ef7b2e7409d978261c6856c0f508127cb17a9a87d3cad5a033652f24fac649e06afa7def2a5e7a421e997c4a7e8641780ecc3e964cb2ef582bcb6599a79b3a157b10f3aac957ce7af393505ef03049ee0b8fb72016643d0c756b628f61e2a51520184cec44c4e778222ed8b65cb80489d103952ddf7250c21f59ca2918f43a1aab214fe03f72838b4cf42e68859b34bc6a14c823cabe9b64aec950bbf4f810d56b2bedaf623ff7dd3cf1a9ea19d94627db43cb84f5bceb9cd1f54a4b757d242aec +C = 19062a5566da9669e74a203e8d6cd52ab72756f47d157355760111b212c05bb69a8a56f87d403ef69c0a8e5040e7225be6199f7a02c38d7d789f0c22d30ccae694ad7ce548f243476efbe158bf6b7d8f68d31dec95eafe2da13db2185e6b3186ee620e3ac0404b809df42f6ac4787970b3ffdf1507560b42155f174fde420244dca217f3456b66ff81c4dfb3786dde63158a847b46097737f7e5caafd786977f3349881769209518b3d91fe012079e6c9137f8ce116be84c4e2413eb376f4a0006c11cf5f43dacec6d4ee0b3f8d04bf8166bfaa390b780da55d73f6761ea4691b96cc159143c99f4cd72b9fdfad3d1f801275392ad83654b6a905ffaba08aee5f3612df03b6c753325a3cd7444dc7450b287995df9846d90ac2050b3dfaafd5542f32b936da8feb58032265298a63588c97f59ae79732ca0b70e6353236cc606db78efc8506e8ae80945b879a89b5b5b97fcfbadf402855e9b6c72ff1c7821bb9a580fbd1be562b1f9f218ea37a44afd4ff560b1f6aac472aa1c6bc422d26d7a5de7b78d5ed247fe5dd44e372e8b6676101f1eeda74f6f923967eb5ee5fb4990796d8cf3d548a85354bc194bf20b1c269c006a6f2b7bb59dbeb4a6963a70f1b17b057dc3c58fbb91d4533dd0648f6edb906b775a25f181cb72fc1a492ed93a41f4bed3f0270943e7665f364ffa27bc1d3cf713244514409590ba26ffe6268d81fc10c716f445eb4e COUNT = 88 -K = 5f563ea94856c344d066f7dc41fc782c -P = 351a31013af9eafb2f4572cb3764ab13e81b997613d11833fc84049ab6eb1ce1e0e3d63745240e160dde0709dc4e0c60f1152337b1b38dd5facedba76ae606a9555a640e16a53877d93a11a43d97582dcee0476567d92b247e04448d61a46ff3713fdac802 -C = d06be87b2d4f2186fb6f851b507d8ee5545f56c7cb9843da741b17f40317109a3d84ae9a3b57acb5624c28bd6db1cc8d6d398550671ac6505c38c0d90f5a3e3a8776de7d297dbe81892ab869262fd5ed546b8701bcd2a5945213a53b78828138d50b99b9b78cbdb123b8039b9d6ef77b +K = 2b5c139cab381964b8f424596043f443 +P = 51c8c807e5fd7f15c23183dcb29d818a33bfba3d4716c249d84f4bc881231a524a200d9f51f15b6af2ef058a3d4c6d991a644e4f572522266c1d29ece1185d3f7f5e3183bc4dd552e2ac8c1a54c8411b1a2ec3f9e0c502348bb4817e2d294633fe2c2969d0c1b719fa3449b7bd2d6643e7b4cd6286fed24afb4aa18a62354659e1eb84cb16495e352fc9401bd726d58207cb3b8ad5a4bba29620f1940200ef3eb9acba32aadb7a0883d31218a9d3bfe45d94d7dc455595b0f3de69fc3487732642614b7e3d84b0399ed949fcf66892d686196317eb1ef4d9fae12f4a033ebfe409d6cf142facf73325b17e98c2c10e0c8daae3ef08571f8e6dbea4676a7a731b22272eacae221d2eb90e0640afa10deefe66c99dad558a27849b539767b44cb5130b21949b728c45af503d8bb01c2f9ffa92046e9f3a641b5da3920a5c974c637559091e9cc932ee1cbee28082f5c030efbd418335524bc8ea00af517c41a7ed7e85735d0f8d3c1b2ca4d9024638ebfe6d3de86a37b1827653f8b02798a627ad7b4e0b0250944f570b99afaaff0c27e1e6b9dc07fb561dd87f5c3f64a3ea7660913f7259dafcb39a3754c890acdb736c0a5422cec120b01a607f27b0ff1d79320dea1fa4e56de173be18e1f657d6e8382ca9778f3a0df5b834fc134789f897240734e6cd98b882b05f8d1e6bc94dd7e76f50957207f7459279f1148c4d559518 +C = f32f1098f5609e07cae4c0de58f6630a2421e226eaf92f6fa951a35a061d9cae1d0bcd61dcf616834060e202e42e171773389b6dbac8ea62ad930b79fcbb804018bdce308f6df69de4c05a07ef98b95f50ee13159cbb8937ae31a6dc4d70206e1295b48be68dc62ec9d66a440cd2c27284da2c2fe059508125e22614bac0921fdef0f611dcfcff81db162ea0fcdb3aa665f48e5cae03839c491ca2317faac2a61b4cfaf9d978330249cc75d2b3e45f8277ac96a9353e4863a87aa82024945880a4148361dd95b3353102892ba59528eddec98ec8abdb2aecc35422c5a32c46a21bbbb9563615ef7914d829a1ec55d5290f58ee707c0c026af114999e5ecb34f36a390d553d13014243c79787b312b0297cb00093aee3a10153ad5918dd87b17f77960d931af187c178e48778d2f7db6546c1ffa0fec60746a9e0d63a69df7e9d0f17bb490561053795972547404a33b42bc27353e1ec03594415a16ee7bdbaba5c344ac2d360ab3048aabf8118a37f118247274da2cb449112891f08b5d2fe823c1953e8efe22b7e48e9698280c74439513c5d1478321683b0254e3accc9679852da50a8c042e66b86b4a6a25705673206c032d7a5b1cc8d6401943ce8c6057c5f159cc9cbae8654583c05d72d665b10b65c06c761844aeaed436dd75f83e5e04e47767404674c3fc4e64b341a7aaefaac2d518e3e1519b0c62f932d97cd4e19749567b88d66de1d COUNT = 89 -K = 7389c26881dc0deb852131e9cd8bcb00 -P = e357dae5985d73dbc312cb905c14ee3933bd713f919966d93a15d2458bd2a2c571fd7b36c3b3b3e8fc859f232524e9a9943262fd8a032aa53f9fd811d38c1c51f22da0cd5dab447c9d2ab00c7b3d5cf098147d38b1418c8656512771188d73c394a0b140a0 -C = a36f89bcb520ccc6a366580343498c10378ebb0a5e0323eaf2c1a6442c3b6a42c99534dba688d78733efe226a032ecbc0c0bd9ef0303eaa0830a13ff214a4329b65ce6ec6410c8e29b4b0ff5a3e649156806a9ef697ea5e7d924e7cc01de68ba3e06246fe2754d3cc0e8a26efab28d6f +K = 0c52a359bd3aaa03eb50f9d4130c4f09 +P = 6aa3876d686bac3449548ee908aaf62c92241c02db8e96013e03bcd114f66273568980dc04a3decfbee5df1a1122d58b0102e609a3293ff53780fedd1987d08ceb40715fb86855e56b90ab4810c871c90617068cb843b0dfbf1d1439a4c16e826c4bc6fbe30284ea529756823f011305d04ba793b2f50c4338be58fb5b77c92f54bb3a65a52572c6e1775017a016c0478daba645a226beaab9159d0a8ef0579fd0052ba0ced514247727c009c8d4dc8f99c7ce4ed2046eb6bf70da9024eb04579440ace2b48dc3e5c0262b507574a131e2323ffe6235aa2bd42b4cf0171b1ac96362e782f199e5f7a2148f5711ba80b7352077082a02436dabe31e798ff7b3639d11c4315113b99508a43e71036b9319360e4441c36aa596a1e35759b9b231803bddae6ee077a93a10198a64774c92c8457969f917f3d1c51e812d48e73c7ed45433d1f368f1e73d8e3860230b4d1e0bd76fa54fc023165d3d7b9defe8cb1e00a6bc45bcbae57f6e67a7b1ff75611f5728b9d4e9e8ee5bbdfb8d59787109089c284e4880d22101497042e04eb1fc302143a09d20117bff8072c17100082dc4ed0d50ecf1617cfb2d4203ca581b4989a8cd5cbc2d27fda69726f8190675daea27539b90a4663aebdc88704f96e3af3ce803440c35e768b2e732861dea622ded088fd61d0f6d00820b3a7f012cd85e2f11217693b2e9593b3ca95cdcf0c694ce1f +C = f5e756ffc8c846841211fc5b0cd5b50cfaadcfc2b8f0d7976ca3c5b8767f1502585c2ead4df1d20dabc2b45cf47a260048183bcb7501e289b2fc46397b00643bf4e5f3e27766ac83f81feaf130b72321f7b67cc0f40caa94fa9d429372a3f7eadd63e5e94ea49ed64f27f596a27ab294a140da36a67cd8a2136b164f6c1da8be59cc8b02c412d26d811467d108046da2492e616857a653b02fe5abcc7207e227165600e19aeb984b4f2ffa58cf5e05dc9ff4e193881255085d02e77dc66209b42cb2d74fd34fbdd1d518b984ae20ad11cbf2398584fefb2b5b8b3a5529acaa52f369e4f85bc6205157c231347e5a57fdd70cd072b501c758ca1cc9a501ecb06813522fb88175b22a618fb939e2d04ea086a1fc5a7daee673ed703ce9126cde754f363123495191d45b251276c8d54b383192ce5203631be3b4528c536dddda7a6f9b1671a9b9fe24416c3954563b9cf1fa1e72289998f6f3cb4fa55550ef6fc99f939fed39aeca565e14a6b9a8eb1be937bac65d42d70975564f7c410dad9a68a13fdc2289fcd17892a71f4cc06258114d4104172858358a3e69652684af096b5bec505d38c1c0157b04e2618b5bc65714b23ca2dcdb6f92f3c0dd11288b8e7b12447b2a12b332f9cb445548d434176225767e611f9741bb809bc3d37967efc142d854e9a448d4763549630b6f23690d8c12ded920b16a76f1c46dbcb9dc053cd8c8612cea866155 COUNT = 90 -K = 3bdcf6359feefc8f9f7e551c1508ac5d -P = e82653e9f2278a9303eb984c38a55f99bd2ff8a2cf20ae390061a43fa8aa8aab4602762180935d5777e91c9855d4d4500915b830059d32ef392ec0efb15a3dd8640656d19147787350e4d483e138f24fe3db46beba48ffe1c159fd92058454c9aa8eaf8cfd -C = 6030f5c06095f2967f5d0cdd57d9ceaa765402058f6f73617a0a76f873c45fae70c38cfbd092981f27b92bea441477869fc64b4dbcf9609a5c815501690fcf31ea5b9447a0a75f5be40f5121b13495d218905d0b6000140b8a580a5bf99f88d18269a71643cc4bcc11ec38d3d47aad97 +K = f9a56ed5d97990a2536ba4606d7106a0 +P = fb4c2829b52a83ef8cc4e5444d84ff326051398051fc77308de53288959b89ab8267ab9bc1a4f84a2c8e0260f82720fbcc1198a9e2b95745ee6922c8ab4d0a1404a76d8aeb0fb07dddf3fd69d4fd69c10de7668496ad425adbae49c2aa622615414d1ace6c8d22a9c60cad01753b782cfaf581385797692492422891d2ed046f7cfa363a453dff972509f6a44445afb346e9ca9d0ddb6db193ed211bf30b36d7c1057a737f773565c90f314aa65d073b2d76c591621cd05ad41209f143ea057f4bd29b8ebd92f18abe846b838d8108ec396d2f219c9a6014cbd3a95830bf35a217a71d82913560c6353cab54f812c5ed1a9c1035b7d0177d03902525ca8fa1460d17629d5712e710e4ed23cca61a05bfd6a2a540c25f01a5229693df76e8a7f95c02cf1924914aca6c99f6438ff3743e6331cef2f870714025208bc7f770d90cc8d503f172564d408ae82a816cc65ab29a1a574ac53ea24867d32c3bb645986267b61f0bd3d0d47bb5b85100f8ecc2d5e9c251980302a1ae63010e39b33ba8da4654bf211f9a23268693218db70a7e5626b4041f2e091fcc68ebf44caf015473850d7b423dbc6094574c7d5d8f24861a85f6cfa8abe51b0bd76027a2e184ecd12c4abf5b60126983c2eed9a34fc195da2672d834021efa6fc57d38535a1fbcc2beda938fb6cb47c627b5c343e026429403dd210abf7bfa30639dbc55e3433982 +C = 2d8c407e862f799f985e7098209f992a5bd60e5256a2b1440464cd617d05a6cc73b04d7804c1eed993f30f1aa7b991cbc935360843f6f6204ae063f82c367e96417f6c11a329f11b6eaecc8578d2f53e0cdb6bdffb87246c5e619d7d23c1467a523d7c2d1bd1562f184ddd958a0820b724697c58a9451e6cc3947198dd78e3dc91a712a6b65c3fbec5942956a7a0b8a335ee52aba890132e4bd39c765c650f11405eb1eaf91e3e6b335f4aaeb0e45d20fa051f79fea6a992bbda0a3118e0137db270f2ff0b3c0b0010de07b4cb5901f88599e36eb44f455e3aa2c22f8b967f94cdb5bd98cba636b6f770c55517975a511039b5dce06a549802272dcca9d0e7700d6d5fdcdfae3eee8b1144b68d86a790fccb54f7bb7f75ee2b89b0f0dea5dff79562821df1cfc73fa64ca1306e6f09477ef52c694b2636f6003ae61614a81ca14bfc615f59177dfb7e3b344fae46be42ffbb1bf1aa65e20dce6720a3654b2a391f94a5ac399e750daadfe116ef4b0cd29401c0ba9b0fe2eacd4b55bce442a2b13f14382d5e8561bc40890be5a85cd2ef2d5e5eb40514c3d24a882196d37263d7aa168d4db9051eb9be41733fba27209e1d9bcc58bce6030e49ba9aa8022a55f1c559dd567cb080106a95147bb3891b69ef8e9800ddfeb971cf409a6d170dffae1c393e8931260555abfacfdbd197e9990c65a30db1691a3413b9cf40db75be9494ba5a187c5ab354 COUNT = 91 -K = 3067ecc82e9e4639ca81f8d457f73a60 -P = f420f129a9e3467bc8dd0c0c57f228e4aef322629aa2e6cfd423015563d9826875eed17f09ab3886fca0a8511bd6777c528e470bf36110c3c1159e39c49b77d23d5119c9eba8684d327e14fb5f6845666dbb77e950000ea3264fbcccacd4a398ac817540c9 -C = fba8da29945e9c9b0e57adeeba097174dd4c4a58c9333d4466a908ebc7ac335eb7c251e6d73a1d9ebca7216f4f78c0ade5f04b5251134b6e3ae92a1ef7b89a7f6c047f5f18b10a7b4422f0125ba4a3697153a05a966f0f65b69fbd17ed37ae7973c2c6ab3087ddfb58d083c9651c10ab +K = 14798d6fdc4ad64917b90c6ddc58df04 +P = b5c1ed378e3bdfef43ea04f18a5fab0561413e59a8c9d158352b192f3f7a65b957a595b6a7e812ab2059bff247fdafaabcc78f6678d7b79107ccb4e2301fc4a7eadae370d601c815ad4ff4778c6e2e7b820129defc25f113031246660d01b375eb6598e10baf72605eb884871cbbcb7bdd774947d3c6f79ef2a2ef010e3c08cdfc7b94d7d035ca879e1821a78f431bdfaa81253b113393d8d29a3b99dc5b24ea6a8b237fe2bda60613403b8b2f1ee3936952d6336fe531066d3ee9fb0251ba25c51a136a3b6a949f123fca76df42d75a0e1c576f644312219d5ea69f870d8137b2a8dbb4ffeaeecfcb1ae918f477a201454b99c50bf0c7c5c2e53200a7c9eff4c1960a613324ac3b4958d94a53f4daf2be75f32d7a293f1715ad3960cc8b116b3fe738833dc028da0b585892406099e22af12499750b198b26cd23bbe978771b1444ff8bdf026fccb4f84c16cebdc8292e5f02e39c9f20cb38065198f32980e523599e96861ef9ab43e87ea944461a199421068a89003d64296be5cef0ed06a98ba22fde07a5f41bac95cc0d9f95dbd00c43fd80c0f698967403d1f2c4c15491099e2a5920823c28b473014957e5b65f6655caac8f5a68b464b043f9aede794be994994bad7567858131257330e96488e327846becf8c0fbc662f3b9422f2c56432d77f59cf30021a9361b4a1e370b4fd53eb95960ab275400ea8ef18ea97f41 +C = 9c727e354dd9a7e41ce8b8cdc6b14b9e0e2d2f64d1ca65bfd9e35f730440627cd686e675c0a51619e9cd2a755a3d44571a88f2439d4f0d3528d1187af3e2c4895f75e1cce131e56b8fce15105f8ed8c17cb98784f8371870305bd125de2ea15eb8c75c8104fc9da720185e98085c788531eae49aa47cbc7d7a98261c33887cac555e20647afd285d80fa04c04bc904f6f1f8a82b6eaba83bf995ca57cc6b23375860b7a0e6abd33e6c6cd2fbfd253c65460a9b250cc9f813fd475670686d97eb86e0e1579bb449037d67dd0250f7681d252aef8e272c8fcd0e302586bcd7c73981b094a672c1d68546f92cfd0e91e29156342e1e16e2a6fbf00e0011729e77b1900b5640c71d4314c20b98788d850c3729ee0020ca369caf8db8b4406fa060e536ddfe92862a99dae873f69718e5e6aa3f960ddcc25a4b4b36e92204ebd84a98d442ab29cafeb2814636c34f2d262ed5bfc9a3ca503f9fcdb7e3adbe710b7a4c3aa1be52b406b24d21a391c412b8954d0e5a124e669af32bfcbd4e6dd8eb32cd664cf831f2972dda18f47b68185a42278e5a793ba9eef2c1f01fec0a261eaf49023b9ed40d06a6d7cdbf99d98e41a4819128eb9b806eee6cd473d6e4bf27f259925ecdb54604669c348b825c974803f42bcbeba8c36037312cee5e817215c00b1b43394c10f10ed51a37a6d6b8dd64049cbd4fef4694fb7420c5c25659b5dab4e50b06c6c869cf11 COUNT = 92 -K = 77c33b97fbf56dbde73882c3874896c3 -P = 61f17664736ac9e5830a9887376ae98a97ef2510b02459cc3034f2dafaecfe3663fe36a034c381947b34da7100f275cedcd7f728082ac485c841754c1fc8480337d427837a045a601fade6249ace48cd068244bcb58f4263c903c16b51f68e278fb75431e1 -C = 1a70e147ab9c7740896adb4384bf8607c9f16f1e1d5a8a81cbaa4bb9b4c2e0bcad9df3ce573ecbdb06da10a8db7442485f8bde0769db5569073ca4cfc00450f46c1408ac30484fce812451096cbfbcfbfa1ec408ca29bd790b7f76e9b9b0e6e6fbe5dbf97c800f7998995e1017e5f0e6 +K = 78f0cb44c129df7d52b455c2c5397593 +P = e8e3ad03ce0fc667094c2d1fd59a3992087708545f5e3f9c0563e697b5cbe8c201096e02c29ed151ce65810771a24e839c728d8930fa83a3151aa4354974514aa74d340e850f8ebbe0dfea3140e496bace27c56d073e5bb52b3d07db4537ebdd19d639a18ff457704fd979c2ee9fdd45d07dbce85442c07d74af0397cf3bcb3ae2d63f8f94c9ce76d5b99ea4a38a4ea6ff897df24a5669fa3f2d6a9429280d25892e13432c5224fb020f45e14e06835cd7d5313066bcc4d6af8596f39fc7b3a662241f0e4fa9df207ab3abe8c85eca29d548b756c24e8d16afe1cfa3841fac6cc31c7d7589fc9e671d19511fd6f759378e5a12af8bcfaaf502d1e59238a3d5883eda7ae0a82d981ed86bb4f4a5b6b3014d3ef547203334aab1a1ece3c7af4b7f862a024c63793ef6e81f3485589ffc0eba1fae18fb5668ce4ccb5884e775a53b433d00cbc7cfbba213dc746b89fd745dc4db3cbe35b8b7de58a076a928791a536ccfde40b8e27b0e28842f2163c6af78bf45557208ceb968b7752bc7cccd8ae04efc1abe44444fe97034839e4be7daeb491335bd5f6fa6b99d43513fbdb56df90b166053b99d1476d9e4695af823e17b1c9a519c0ece3b8f4affa23b088ea921c554f7da976c1328e06c60540cb53d05a67ca2fbac9dc3ef85e5d4641ded73beea85023e8648721e2522ec5c36349b88c8d0ddf3e186780f46d23139ba938f78 +C = 3679fa3bfd9455f87d82afebf80c90079390ae60d5ae46b1b3c1d2db0b4126d68d2cf9cb399affc788ce2f7f7570e992e44ef75101ddba398f79fc230688a87f753f7227e78ea4c0be2f85ed0918465d8c673b1600d496f8c56e076d56c80b4868e4b2f7626471713b63abf5cbff434bc8f075500f9fcaf0730d9d80f7145f7ee6b7b6e49ead78a3d75782fe2fe150f24849abc0359328e2ee94f2e3052bf7eead1d7da6a3e471b60d855eea76ec87e1d2c4e8955b0b9531870a3e3309e4592860fd72a8ee71fe2586f032b42164611843b0eae4b97e6605632bf9bbefd2c150c345299ec16215821800b4caf9ac5460d14bb925bc6d9a4ede4a4bc6aefbc18cf094601ca0e57f8f90f2d7f37dd19f92aeea91d76ca38ce2305995856732824ec406c840378f006df1e41a0982a6062abe64ee79b79c68b2b7805ae8ead013f7c0e9a8c3f15d8fa79e894061dfe803abdb2221108ab0067b6762d9aca26442766517f7a9b0b96c934d5dcb6dffb54b7dd77d52617b6dfb5af164d71964ea7dd63c6b3bc30304ec726bc788cf9d342776c084f0a007d96acdf866d8379b246298cac5520bbe741fa33c2565bfb54a3592df98e6eb12291e9db1e84ccd433fc21840fea665439a83109e06bc180bde9dea915669ec7c7bd5dad394294a5de24f44b811fb7e82964e75d4e9955bfe28b1f3c63c1b7528659802d1045e4721193d022f11fcb42c5ba5ed COUNT = 93 -K = 7c5d78da9fe93bc6705f40dab2acad16 -P = eff80dba0d141f400df303da7dfec10889823342b219cadef0a7b8c41d457e51e51056732833f74bad91c697725731fc30fbe29cbef2a7b8ec0559995e4f59665e8f5dfd6d22549e710d3e6fb9ba1eaedb0bb56b876917b09f585da4397037d3c5dbbf653a -C = 8fdb78712101ca0a97f5eef70b73996f7250a940df8c8c31d83bd0d5fd20632306785b99c02be8cba75153b9099f6cc614d7a17ad5c63d83ed4ee3dfdf5fe68b1d4d0911d461ee69c44ea72361a3a53e7f9fb6d0bb758e7f9d048790abc076f0f2e68efdcec5572cd444b3f1a7231756 +K = 360ea5cd1de6065c3a77d202abcc7728 +P = b0c9f2329052b10ee9f942c5e90787d695a0c0b33d1613a19b209c447dd672f5279126bb660d13cca156587389614347cbc137bc9746e813f027a24c0aa039fbf6dc6ebf55a92f7e2c1eccfdad9358c4e5144d39e6753555c7b0472fd01b9251e4cf497f6fc26244ca93d39e269e2d09ae28128bed70768fe703725e9b05157e22166383c8e177335782856f7a10981e1124b5bcf33df6136e9615399c80633d2df5d40871546fe255ef02da170df9cfe14d2916976f64a4a3485b7f49f13f5a1f7f3726e1713e48176267938203c609a84fbd68efe7f101ba82650bbe5dea3a8e6622c9626639215576c797d0ac267a2c7bb1a22a8a24a13f8b9c530badfc2402ae050832e9fc46b7be7edcc4772fb01113910241e9780c1033b142d040ff5598dcaccfe9287e1b70d42f86336cd43bc724bac7bc69e6068f48680858a297579586b1d14367b16c80e811c8ce5d489becbe777482a9635b79935c2eb05781fc3f438f9dcc55e730bc5ca145ef0a8258a82610e79d269a21ee57cb687d594a5560f2deabb0d0060a95fed3a5d59fe9c9020c627374acd592766f4a1d93e8a6583e7565cbda256679d8dd442c119399bc19ab5a81df0929e21a79c41fa186cdfcb02d0b1b9f396f1d8698bc822db58425f4e1073c9f87f9b022f00a999268b95296dbb3e466e2657227b354a6c281c46ec4624cb0e8e763b992c671269bba477e +C = 5dfe890488028199d5086ada569c7ed011f0160f8dbf500bc8015305b730e84c31a8d4ef22044097f9b42887967df8d3132d1806f8a622ea2d48dc1a186f933617d6a8242473ef446a8fb297c15999daf44a309c5d4f8b4201b080928620cf5ad044eb98e9a6b5b8fef8f42c8a6313552f88838e5e19ea3150599d579c8e6aa57981611be8113dc98945ba37dd9e161e8c1e64d0509921d06feef9fc63e8aad6f85e5091c51ec53e3670f181200b32a9c09a0ef943996e753a8854d2475d3437d0ff755b65a9fbfcaf9e1e5822747611785695234ef874fb405d18fba9d869ff550f4b9054ef19909014382e976f0780a05eecef3b1d9f27dcf713b73d4a927ec4cf0f37b4161a57adc85f72344380211e3f3f4143a62f85852209c373068559ae7f2c42b4b1f7a09807c8033371a853e2d49a6271b866ccff4f1fc90f6048057ac8b329cf7e2e3bb7b29532aee05d14792bd03a9f3743ad4381a3855d4d4e5937c5d638159db348748bc92ceb59a144966018f5cde3ca6724092b61d42eac319a8a8976f63214b7ffcc04ea93c557afaf064530a08c4f7572ea48e618bfa0af4f31b18455ed29b34a6877fb785884147590b4d755a4527216106fec66ca4295c4b5ccfa80eb93dcc4ba42abfea3310e64efba87924adf322f9b98c5d8e9ea7bd6c4a030e833e01ea374016fbd17c897ae59d8b2e78c4f97a7082d9cdddf90b5a04a4e61abfb318f COUNT = 94 -K = 87cd36183e37a30b8ba0123370076fea -P = 931be785ba2627b5fbc7135951ac8981104d4afe101f5e5aad620c89dd1afc16092ec0b90c3aa3be2e178f6d6cee52989a96355e9ca62029d05edb2014d807fb945a461f90babfe940dfaa69be86083d0d9bec3e2d5daf3ab1432353bb8d490e6adab818ec -C = 91b813a45c0581b8e7ea46708749c3bcb2dd4c935dc75ae83e09c774b9d8de157d30cdef208ca330c7de6eb1a87131e3c1ead746dd9459096feeccb3e65e622b0262cf47586be7a88e950a1426086cb423d4f57bef204c9ef55c568879fba110c30a1c50968a847963e1c14d5aae8633 +K = 4ae588c572f9c78c3766fbcfe8371802 +P = 6ba339debb77d071bf2038196bbab8c206b1326eb0a231c6a1dc2db68ce624ef605079a0964006add32a2a8af1d309691580dbd3d995fa81b72397df8a854981ced072c001ac8bc872e08cfd4e726c0f151fc08b929171fcd4df1aa6795a8b77f20f3dbaeec19f720a81633ee90b9eac65b68c87c783a508caf6c3bb58193bc57f0814c1f4fa41f0241c268c0e09321450673413348b94b8d6ec9eafb229974ca675fc5d995040f71d90b57ed54c25fc523a530c0bfeedb79e0517488dc0baa015f11305cb39eb76e2f57aa3d9a73dcd34a145f4a713b3a05e80241b4cff8ec83a9107ba8b7df71017d87c6a0ab0ccb787dcbd8a3007cd4dfb9fdd0cae5f7d351bd3234bf2d415b70c4a18bdca705f4735135722d4a661eea430c8030461937b0a03edb647c584754daf2733480d00b44395baf37e13f5d74f5603067e28ef94de904f2151618882c84edde13b4e44bd1716fa0cb593387f1e03750d65cdefb753d7f6a493cff14fd31b376bba42dc817df15f061f33318543b6e6f7172759fa904ad29d2888324583d1b7aba6cb6a012462990795a894dd19976b84ecd15d1be4a19bae464fc4cb895bac0ecb77a9a1cbf62b9366bf9ae3a2d17e5e1d7dcb7a3a7faf4025e57c8aaf5270061d3462e0cc0da4310ce85ae4a9584cbbc8c2f907949859f9d8eff6574746dd2ab094c0a6cbbe8d542c205706b047bf0d3c88ea15 +C = 497fae4cbbe9e2b55c4e928e96764d320c45f4af7d2f264efa4151ed8be6815651c83c8627f6d7d913df75304534dd225f62afffaf71cd7b6df1b624dfdcf86f1432785620c8cd3c81a60614a715cbfea5f6e36d7712a5fdd8b5a0df0aedbbfd2193df3f7684a92de793cfa89daaaef6abc65d8f0cb2c8d56fea881bdeaeb2a7f89ffe7016bb98e847755e6e12f35e6bb9c0ae2d44cbcaff28d359e22a17508cc3e8a1bf8347a423049321b9c1d0bab13906346a8f6887fe554f781432dca53dade0ae4d5ad190e589ad9dcc463a7622ffc736832cd3ec5f37fae82ae36adb8f94c6f15560815346fb1ff0a318b50a4839ca75900a11512eb62c7044181ef2cdd1aee06de8e589f979f8e4c683cf50c3333b55f6cdb0f214bd6e413e142ba36a595e902e719c528c10d38e4132fe1ece024dbc6deaa215a889a8f3780f02ab8e54bb33dcc71ddaedfa2f9cebbfb7fbebb23fefa8ae984f751a44779b76025b82fc7b02243c5a6923c9bf0f1c928495b72142d1fd92295df91fc302e09cb8f381c741b17ae9e72f2b8f7c238c96e18ff4bf43438bc00a38ea0d173b89e4ee90f47ca0dda412762992b7da5e4aa2b3825c894180f256d081ebf5ac55d059b37f839b65f779ab87acd62ec55713d9b2a668c5499436bb1f4354b56641e6c32503dcd10877aec7354a21d930bd0a26088bb412695ba6926d00e19401bac70f020aa9346001c876aafcf2 COUNT = 95 -K = a96d57339d39752e3f0b8c79e60ffb43 -P = 2096488d469c09c0a8d20e1b621ae84cde875b60c9b91c6c9589c955d66d75ac539aaa13d1c7c556667c46fe5d8b2ecf7bafe26be87d4a0f2531db23e74a1bc259482bade029b7ea81c068d410def1614d2125d1ae1c862d9f1ff3e271b6ca993738b6be56 -C = 27948f95b7f7773ea376a5864c985be63652ff32d688deac41a15f4a8b53d7e67796000e612c28ba9d37f86c0260ba23671d604eda571207cf4d356ae37a190ef31200d63f6a9c77ed290e9c81955c0a96771a980439a8391d6f10dbd4427f1f0678cac5275fab5cd52334e9873e8c00 +K = 18958cdec86855592862271d36f7a450 +P = b884be832828fe978438dc0d9d43ff91197462f4f2bc853d57501a0177da82a0fa025bb965689d46d9947a83861d062eeffaaed1a59607bf69f93598574783878337c3dff41ab1cede9f968bd5452c4b02b73082480da6fe53394868cc84527c144b8f4abfe9c85e22d114124b97deaaaf3818186918370d2f636a81b9c4a20f3d39d2a5336fa3e3cd585469376464eba2a8c39e893e4e8fed90c6305285d6e936dbff4b670efbf053946481226f1f5b147c82a6a938239397184ef44bf64746acfba90b6be1791e200932279c6917c703dc7186483c7e1e9020bb6b63f51d046b5fd6d4627e6469624f55265465c9b88c1a12b7dee527a62dcd1873d5fbc14f5bac397558217732fb715bff7e7a00437a00b964ec48afee654965ed561a23a146c0f0d1b266b9a1d5a54a928ccd15431a0bc6aa4268c0d43563501f0f48af92ec769a78de9bfd7c12019978c5ce054b7704bfc1bc8d966cb5e5449c505e25243ba556f9571d64b1a1fde57a90e451d9d34379ce925ad010e5bfb97fd753ca615d61bc083d84b56d223a45ad2f66bfd74a1dbf8f4836b099c40b83edb498fa867d3433eae47677f8815d39b46f14dbe7ed799fb764990050853eb4cd141f45e6b87108a0ef4189b0d996127b02d0e7d48794955fcb44a4cfedab5ee30674c56df139d5c61bdc48f3b886c830e8252b8d18e076ed3c6cbd52b785e43de4c963e9 +C = 1fbbb7e92d14e21fe42bd11c746c4a8ef755599af57ac46a6a8214d09351aa391e9f4e1cb17321e6a31237af744464b08d0bd7e8cd4c0b1b77858a61e8634ff2ae7579faf99cd010d43056d927fab3bb38fc96e4b84b61102d5cb6ece3b2a2a5e59e8dadd537f1e4bbe1b4ca094afc78072e6a9e45392b9eb7a7dd34afd07087251099d1a8c2dd13abad9dd50159766027e08ca662af30dc8144572d6f052126e11f9604837c1800b09b0e94f68c73d3c69568413046760fb3405b73fa79008a9da75f229b2b8d316446fd86c9f7ab086fbe26d3b67b023f90a937ced670976f07ad58859dd53dab5bd7dcffd7144ba4bedaf53f0713b9c785e7fea8e4464e04013989183c56fb148dc7a50f522e355835cbe0da9fc9cbe8fdc35dd3aea2cfb17ac3065e6ae65eea47072e1b2d231ea80769f0916b2ad7e20126f99afd742e5ea80d22376dc301c812fd6a23652bf1832453842822052dc32a0da454d11f61e3ea8546f626484bef96857803270cae7e151c9f7c647560c576d45bf1b5a3a1f7e5bd6b0b2dd46207c94db9bebf4f1bffab3d53289e7b3de392ed16081b6a3c6ba53b0bcdb4f9473912d2dd8fdd299c01a70816e1b62a73ad416940ffdf598bfbd91d4cf8a72dcfc4e94314b12af098e160ed3b966f8bf09664c72426135bac8dafe55f9bcfe3f5dc77e6ccca6aaa8bf3873bd9d847edae78edbba2002563063e5d7ff1c2229eff5e COUNT = 96 -K = 8e9273de4f0465e3743fae54737c6953 -P = 5eefd52e48d1f83b549067e920122d0c37716a6a5713bb774ce199890c2f6463680edc889f6747fa5f58c3c58b6bcae9f6abce6bcb7157945826c67c33cd5117eb4fd542183683418879506747a51c7a20d8444124524183dd49318ba056d9ff27148edf1c -C = 4d74367d84220b2682c44d89856b9dba84e2c54a01742bc4960b5473fe74e7891397d48e775b76ca1255cc56fe5a49ead0122e6944e9cc99bcec49fac7c49f07aac9e7539884c7da5701925bd55ea83940fa5a654521b5391dc5f8733035ad596ecc5b31ad4667e3941d008df5a6e0a5 +K = 458b0182a4e5351e99624aecd66173ae +P = d92639cd6dab7153baeb2a7ec650701b58fa99c4299c07d2ea4d9c6e3d487a04732db9c93372f2d997229874dfad0be150ffeb65b30933ef7d3e7d11b5c11f5d2c9cdb98088d0120b04e2be489fd0ef65a4372b643654b31443db3352b988a6863ce44f77d2c0585b287a2c0ac81bda612a6c88e5813cc9e0027a8739648f908e78bc7ea2df10b15f279cf2aa1159dee634b98a78677622f96c7d6c565d12d5bcb20c2cd3cffb41ee6b04657c75a08af7298390302d07233e73b02d6f38cafd76ba4dacb7a61f6a38db509483ad45c1fbe935b37db458d1d7cf2ab852669cc1c97f87422f424b8a30a25fcc6fe437a7e6b77489408c5889f425569f728779576814341881b3bd0acc777207bf4bc68ea739f1c6f0e7d459d5b0d1db6bd1019c50e80f9a501e6ba2d269d30d4afd3e4ee8d17345da8a872091b6270bf46365e616f24de1f0cddaf6b2ef3ffab451d557b41d07bcc648b2080ab417c29325110f5f11be146a069713b6a1a7f930fc95bf70642be31f7ba104a0ebae2e822f2162477197d947b415d1df7a2daa36c053d21604ea7af6db337aa4bf9c1f31992a34f81c4a48ed47d6e5a23e023d51e1d2f74f833eb79df5849a0a06a9e9ed61eea51f3c5676844f3d2d86613fe5712cd24a2e4bb1bab2654e3e0c0655a3874693a3d30dc1193f8dd59060028f8685020f3f161879c2e2657ed7d8c9566602f82e0ed +C = ba3c9ff53603c432b31fe0842cf9dcca330402e3884ad45dab73c0776405987acf397e36ba93e91c515d19269b147035ae13608518310600cfad6aaf9707748003a22562999a4041e7aad76cad4f29761a0e3a891a39114f8198579e0a390ad78b9dd7a1daf990e2aa5aa4dc2f1eef505cd53a3999800feab870b3d7c789095124721a440371e1981e2ca25e94813a4468f87b6daab8d45a7c756387fe0ff323d7e1ae307e830121f713b484278f785521590a58a7fe4b66187072f364449a56e67f935af3990f0bf1a56dfd8ba9b02bf3173cfb67ffb238155a6b4d26314ca0e706b2c65695e5d808546309a7c7b1dc49acf32cb54f239a57c290845f230daf8a48ac51630cbbe8a59a7e5e548b0fae831424f5047ae45fe12ed0fecfae5c8d06dd1a7be0c470342e5b00448386b14dd84ea0a39937047d5411808dfd0cf18456f6a058efc73776045c0c159fc1838c7559efd2a24b989eec184b2164976e0fcb9c7a2f6fc98cde3e231c01dd4da3d53b5dcc4111ef0f0a97be19af31551f13d324f537c22797b423e16da6909e9018ac74fd72271a18b7212707d4c34915bd4a27e05d185f9d034ec72da71d3b5c4fc2a363e77c598987ac16180ad341ca47bddf5e714eb1191f3c8f4e98645d02c4cd67ad74158a2ae78a6c23da77d84a7d77882b6f8636a5f6f9f980c85b3e0d1ed52dd5faa1d358a166ec06d3875fb58bb3d3279c6c20d7db COUNT = 97 -K = 5556763669f13bb1b0753b5c5c36181d -P = 26fa6f24fb8ac7dc8b574fe5f3ce3be0a62f5ed803669d1c4dadf555b38f0417cfbf91db2aebaec74d31de79f605e27c76764f9ef03df8b28fcbd334e6318ba936006cbae2eeabbf846715bc0050989d5def65821f84c5e4a6f8a6eedf638ae0efc7d90b8a -C = 69a80cff5895f21b4901f4be8c3d934d7e0943b6742b05eef00b1fb425f3f399a7dfe1e3379c6d60ea90b33cf960e841ec4e002258ad1e57de65dd30576bdfffd67d5d48714c03db38470a5c68cc8dba20faf7cb25f405270efa45645265af9ad3259531a29f8b252b1111fb06e1c93d +K = 3b9b57f0ea9ccde1199535900a041d3c +P = 65e0fce8db05e6e9b7d6659dfdac72f6ced3c1f8ac15248f028fe9452623ac5b83b8f85356d36a6dcff7da301b53aa887225ad3b904e36a647696a41f8d2b05fc565e425434a10cff93b837c7d41885728e3f740735177e4be340ced8b76d689d590fe9c1606d39620f0d673c8973cb425cf087a233f73d5c4b7ba35ce35b5aa19a991bfe238b284eeb463874090f736836b879b6745f20056a05b335363013f9bc86af2f4dcb9f0fb822a72c240e998e78d7fefd9fd5c7b714b18cdab3cc2e6833091ec1f82964f91320dffd531072d6eb7df74c8a003029fcffc2a6dd732c53f9e0ee33da5c221dbca59c60de44cabf360fc9ac15cca4430548a64c791e2322b8377bab0b9d147fbd4967dd9db601d54453c56b18dcb30ceb4df6e174c0cb90450fd5072c0f6cc71a3fa1f525b996ac4727dc65b25722a7db7322f00ae6dfe1cb02bf0dfc8deb7591061631903f9e67964ff4188bf6ce28b7533a637ec3d3a5a5fb4e6c2d227f65213cdad32435613b6534ba786ebc04191ce1fbeddd2ee7d2ee1c6935fc81047991e9964ac9313dbf03370abde1e00632546c304a2bdbc6e5df728a550ec3f6931cc28bdd1621db47a94c66ab5e3b9adfd0ecab288e6032f1ea97f334ca1c8ff2bb26b1abb76da02169ed598760eb982700b31c43ad195e9c8312291a81a342082efcdd1c760c3a49080cf2a9b2bfbd865bc9964b93f6bff +C = 0f694c83a8e4096553b460569ebca0e6dee5be9204e1a6ca11242a722fb21db19b5aa08747e51e275c01dedb2162847f142ff7505095f91ef4ccee8aee19d5e07483178817f26c2184a4803eb42b081a673008563e211f5620e9d582dd915e831e89ca02797a17484c68a6a1f83aa909014cf7d741ef30afe9a61736e2942cb703959a7e3f0493b75830cbce4b7e435fae61b6afea4a3b55accb91ad728519adef52a551fb86e05ad7706ca20b8fa960d6753d148975450bfe462d5e3bc20ae06f70356483a889833397086a7c2e8df154d744f606d77d0c9d2906e3184cb47c403e19e71513901f707174709699d6a694633bd214bc52c77a84e9e9001cfe730cd02c2e694678a17f12292f82a318eb490381e0bc144448000ce77d261f83b60b944ee4d6401426831021e6ff40163ce56e57bab532d0344b2b10ad7c4bc52aa1afff88d6d91835f66c781fa4a24c89132ac1bb447a1a95eb5496c576bc8531f309e0b53cb0c0a2144b6bbe90c36207a1f3d59f5ff44da8ffb052c68847aa6a320a9d271d653173ab1d63b0d6eda9402cdad3ea89ab89ea8017f32f6dd13fd5986c32aff3334c36a986faf809708b07883e8b156613b62575b61bfe3f97fc2645c59a7422361bc75d864c04fa3616f09f9fb44ec78e7958e9d4ed077d081675f834af592210a4462a1a6517f5cbd7653a4ba7e58c41c0451fc568a1a228b448a5c6e63168c5fd74 COUNT = 98 -K = 232c0db28e31c3c8527718d87b2f393b -P = ce917a7e8091fec79f1c5768c8e3c52d0425c5e5bf1880ad77a589ae313fb03bc65f68c44d195c34eada7c1c4ab9413b6704eb493922587b48b5ba3bfd6e4ab262ae9619393c5f92d57ca732893a16dd231d4b8ff5d4c541b68408d07935a0073db08382b5 -C = 93722e793c351e8aa0095fcc868e38b0167ece7d32fe508cd0b0d9d7b259ce91450107cfa2459328aafe26798aaf1cdb933cc582ce0206a6b1c864c6d58fdd862c82d16449e840d2b75925a67bf44e8a64f394c4146db2285b0d52641322e18284c0342552a5a7d774e0b5f8b7696c2a +K = 249309c43328889717f9c0ede82e7a86 +P = 6826486997b4cc6cfc9e2fd7cadb4b0b5d4efdeb55c9e1c37606a0074ca09266604fce4b19d35bd68b5c88664002e252c245f275738cfbdf26cd2f121e24a77be3c54531f4157da29c6b22e67932051631e22fcfe68c7c6500b1857fd77bebbff9cdf9c87a939d207459ad4daede273d924078ee0a6805d1d73563491a4c3c5d62217f9899dd077d7757d2a7c5b70003fb7bac0fef8fc45dbefb3a5068b059623202eaf5ff992d8da496edfeae4d58e76aee25244ceb6bd9e3b7d982103595787c72301eb2abee6fded44c918054374012ff888a8b5561e38d35d5b1d9e3d6f7e43614297d7a659b7feb7e865228639d2a8f0f1608d8de246eec83a2377e383efc9359dc6fa10953610ce6973418d1f404e0a9ffea372456997d39969e2f8d93fa278e982968848a69c2ed70c323a151e52d06c642772a9e9337a83eebea7323723a6ee2784412c5cc5cd633fc78d2b481afab31a4f78f3d96216af5e96a47daeea7065978bdbe0366741f44d201a94eeee47b857245782602e130e33f74bfa85c59b29379c6aeb08865d278bae5201838e7e778fa0ec3778ad21dd62edebca15dfe781f6589502f15066ab5d18d09af1956e163eae54a4897ad1f89b9382a75438a35e03b3a5b635cab84871ef0ff726d716e32bb55ce9e24dff41a5562507c6a794a3b730acf79017d3ca29e411b3f6db1ec9f65515842c354bce19381f2f1 +C = 1dcaf618046e32b134ffa4f2c58cf1b0b1a1e09abbccd76ed78c1e439ee9fad252d2b6a97841a82adb6a2bdcaad33bd1d581bf9c95be72251e8572128f793ca7c0ee00af1d8fe74cea41fb6f494d1ad8e79c706343d7b88a757c3ea68427f9cd46130598c8328f6c3d9114c9bdae966fafcdf2f84ad40a099a4587c9976b06e89e4596cf2aed26d7ec07ce2a625234b3fec286ef1f455a13d3872b5122df3f331f4ba7952dbedcb6e564b12b3194e68fa87d8f9aa376f0f23439afa12c6d3deca0e1d97a66f60cb5d7ca86471b8cc209b87c0df54f11555609ae5291b4286fda565fd4dd314fbd20f9a9ecd65f2d424b772bcb7e5212c1b5e362ba1c0f4039b7d6651d8eedd16b66a771eee337507884a017422926ac714d7d833f1fbd28565877615d40d971011b52ba40aedc93bd532f35781fa647dc2db781b6213b9c0bb3aa8b107470da33a163b25aef3ce8736f047ed9d1b22fa7d860e7c19785e8a8ac77160d433a83d8fcdd338b925fc9aa8a4f4cfc8d438aba61707bea5a5d901098c3fae6720910991ece94ef6034741bc3cba8445d9d9a0d4c0f20f36625b5a8607fe94515a77e462db310f46da56ce4949d4e5c8e9908a7b2946737a4985f0286ca22cbda6f29c41c9ebc8f436f28e1c5ac8f7ccbcdb7ee24c9cebde8cde79a84e88b760bb8e73e20df3a17a2ff0165f2611d37457d13d4fb873cd44d361cfe8cf354a28a43e8a917 COUNT = 99 -K = 897c98b577b6974ea25569edbbebf414 -P = 82d7becc3fc82e7f4b3872140393515b226fa5bf45dceb8466819538bede6b875b885ddeab1eada2282a89b3fec2311e8668b001cb64d74e97419d96f4cd1e17be6d41156d739a91db875e4c23695a6d6d1dcc0486187a120a62e2aa65e6569fceabeb63e6 -C = f0489507a20b18f1940dfe4c1bfd0dc487b9c9cef24b508295e3aa15cd19fc0371ba8ff86930e67b2ca584ea623289ab668381cf98c43a64cebd3bbec5d0e66c7118588a55e0aa65c38ab927abe72eef578abe1087305ce5ea8a8ebb497d104bc176293f95f6c599cd72aef60a4e6abd +K = 97af29cb247a23a09d31f9ed4b3313cc +P = 18ef215ec88a52d077a87b22e7954d93d87635a19ab98b9f03a864693f434ca2e859ca39380f4d8b2996902c58b2c85c7bbc5a39e36b4de5c519b0555098d871cf83108ccb48c6d886f809c3e82082aba0b642bc0b5eb0560779931d0e0705f06fab2a085ac15995744051e3de0f06a288e7aea126f9a05c0c92e3294dd83980f397c227bc006596de3baf5c10c71a19620c3d44d29882e32eea2b6e339998d575b95c685e8d15c94b50fb8ddbd0c84ea46511c1449281a9638a901bd0f037630f0ce5954707ce5d74d0e4e05edca58847f2fc0aefee9f227d98c8d45367bbb2c30e5f084efc77bf62cc5bbe3296d7988c5264fc0ea581859b2ba1bbafe80c663259a158523db1fc828c904aa6a7d5b2d9aa36f4f8e47670c97b6db0926506da9c10f356399a5a1cfc3f8e4961c96912e7ccab44065ec365f22fb55afc362da507a27d92028a144dc943f26e1fb3c11cec01b2a503c99b586b81270a12ed98b53068a9da16d3ec50ea4ae3168debe8faa060bb54168afea453b598a8bbc8effb0918c09502ca0aea6117553f1d2b3dd7b27c1f6ff2c3fa261edaf50df4bdb26a9d31d0ec4ee04b6b83eacd60d65b9faa3ff108c398a63a6a01c2aa52e56950bceda32ee92e3f69dc7540e89e35b32aebccb151feb353ae2c65f41936b755ad1671d3c03002c0bb27b0f32552053caeffcf8c9fa7f10eaaca7734b122237cb24d +C = 2cbaf83d200be961af1bffceef9a2646a6fc0f21054e639df9ac5f3c25bb44dd76179702c2ad1e7aa47b9b73b5ced6470b9a7de0547a2c826780fb822c54d7cdcd4e3a69119a5ca59596a206ca4327de3e0adf3fc89f3731d84627b59e14d0ebb74d45c0cad503f83f8a8f2908b57c9981a419d232dfbfa3a027cd58123774b4ec5991e7495bc1ccd23699bb31e4e6b951fcce02203f386a21288ded6a843d83db9660a4aa3f5f8e806b9acc93f94f11f10e77532104aee10c1f9b68fe4cc26d95432c6a7b133f72bd032cf3d839c5e2474fd4e2f0f08657fef5a41b013f46fbf2cf4c0a2fa5c9e611f0b13d23a7d1f7b4a38c6e2ee13d54e2a0405a3a3e99183cc5d6e2c3802a0bd16ccd698f2596aaf8224fe79299405e217028cc7f72c492503b049e1304837d97454a68abb5ea29947101b903f2e1441eca121d2469772b28de994ce2fea57208d2051fe7d439107ab3dbf19688dc2b2be29f3d30992a0ce25bfa63755015f99eedf1940babc4b0e8e1cfebc249161f12efcb592a4713c807ebc416b87d8ca7b3a2e19959c8e4b1971032e50b70f516535980014a6c8b51e76b58a6ab8d17fc86df4ebe379959cdd54f65fdc654ad96a22ee4a2556ef875bbd1b0ff2ca7c2721a3095e4a9c966691daa213de7db99564e23401c47485b8bcf1daaad671946a849fb0c0be1406d61fe8c0a2f06f3f6810df311f6651551d8ce37e8090375c5e5 diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192.txt index 4812952234bf..85ddf73be922 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AE with AES-192 cipher function' information for SP800-38F -# Seed = 1d7d221dbbb3e5e664f50e4d7be92c57ab161e29040705e2525c6d97f45a4f6a09cf2fb549a6270968a952b3fa96b85674549193f113df5e6f3b93e479ba06b7 -# Generated on Wed Dec 03 09:15:39 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AE with AES-192 cipher function' information for test-files +# Seed = 53e6efb88e19e2c4673b904fba46083ffad160bbdf1a7ef0ecef378dab8e5d6381941809e25560d778271aa2cd31a4316d0638d45da117d0a682c25c7459951e +# Generated on Fri Apr 6 14:46:17 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 7e2e47f35f2dbada22f1f00881b31cded4d82c2f86b74fcb -P = b0 -C = ede089e95f4299a2bc1c3fa0e256e927 +K = 9ca11078baebc1597a68ce2fe3fc79a201626575252b8860 +P = 76 +C = 866bc0ae30e290bb20a0dab31a6e7165 COUNT = 1 -K = 05e068a76c0948f3311d7c641fc432186530f10c9dbffdb2 -P = 02 -C = 109b5e515334e89db6adb9c9fcfff79a +K = 39542e1cdc57fc35a2cc0a702d710ba5dcd6e6b7ff6aeab6 +P = 87 +C = 599ad0226bb37aa24222b5e76ff5c1f1 COUNT = 2 -K = c5314ec3e395d487f6883467597984c95434939a5085a57d -P = 0e -C = 8561083e3dfec8eafedf3f6d2bb1282f +K = d3007dccb3ecfb9836ff9f44f32fe0ec02de2ecd6d9714ba +P = 34 +C = a9687301a8a85d6b5ffa3b255f37f2cf COUNT = 3 -K = ffec51a7f112cf694f0657befe1a0928f5f0fdfe53088e8d -P = 3a -C = 331e8b0eecf5ce2910ed8ea8789bf67c +K = 959b4595778d7b860e08fcb5e24b11f118fd5d67089f2ea4 +P = 65 +C = 1cf986a0fb2208977c37a4c3830eba72 COUNT = 4 -K = e99836080351d0afe4c181629aab7b3e67def1405d63c89b -P = 8c -C = 93c23c9e26b92ced56adacb18a750127 +K = 958ef47eef6b008120fd44d0133de45da9cd2d98dcc6f780 +P = a4 +C = c4c2b6bf416d2c9c5b8fa07cb6a75309 COUNT = 5 -K = 01d4ac2a8d738f8838cd372e54381dad85fdbfece5178cd8 -P = 4e -C = ce1b094aa8cc6675709fe23c460f68af +K = a3194756fa23e8b52491a56da6485c2599b16ce670469d39 +P = 8b +C = 5866976b249cb780f11ea0c3154792c0 COUNT = 6 -K = 0c5c1e36941df8d5c15482743a0cc2dae0a81a07cef9787a -P = 8c -C = 26cbc8178a9dcaa1a98db0e080a93914 +K = a8ee487decb64afd74d4d39c08dfe8adb0fbd48e24054bc6 +P = d1 +C = 241c92eb091753de2361ce4700141cf9 COUNT = 7 -K = 1c7ea63bfc4396a926bb4e007becebd14b5b748a0c2e4302 -P = 4e -C = b86e70f0e3ec4db5bb25e496a0246fed +K = 84a664e9d7fd946c2eabc92ef6f93aa773dab80e38ec4c73 +P = 3c +C = 4fe441f83be059ab7fdfff4508d09635 COUNT = 8 -K = 707b681bf3ce0aa2e9c01f990b5818817bfb7e2660717318 -P = e1 -C = bff53bef152c037d454da9bf1f0f2bc9 +K = e37b2afe0810dcf89801e3b891f3d76c10cd491f23564e18 +P = 21 +C = 146cf6d185d32ac1a0d02b42f2351f5b COUNT = 9 -K = 87ca2e8f1d0054fd45370559dbb8617da6fb2df823099abf -P = 23 -C = 3a1500866297322c8e7be2c974bf56bd +K = 715b0ee0ed59c0297e67b9b23049b6b7cded916bd33c60c3 +P = 7e +C = d9382ee66e501556903f233d78cd3191 COUNT = 10 -K = d09a4e505f0ec12dfdb8492536c995a23499d5728c4880b2 -P = a5 -C = a5641530083a5d5dc83ab9804f20d3cd +K = 1203c491aaf374c1fd79e8766f6a1273a1cad7770c02a5b1 +P = b5 +C = 3b9166546a6e370786ea8b79e0fe368d COUNT = 11 -K = 7d7a5fedf322e313f64a2929a92f58db1afdd7ae6da2cb26 -P = 98 -C = 437677976628edbe3bf72c7b52b9c31c +K = 3809ba28ee09784e848e65508b499e45f1225245e677fe56 +P = 01 +C = cfb9a41d7e35c70d67bf09fd647c913a COUNT = 12 -K = 11e3279074969f40b05e3529a4c17e53b2fef7b11cb8819d -P = ec -C = e2bb613737856fb8c3feac22fc2a8751 +K = 650af720561ac05b7a683d56e11551e8f246c9635f3b83dd +P = 8b +C = 6d20d92cc2aa5002bfabb636164b2e0f COUNT = 13 -K = 25c49c58dc324bee114b596a659cbff159a054a40215e196 -P = 15 -C = 98e59fa36c97097320558b4a8bf9263c +K = 88f5796566434c0f497add3395953e0fabe26b7e7b0ff51f +P = 44 +C = 533bb145ccfb028d6f3bebfe59ff148e COUNT = 14 -K = 5f5de0ca90fff2a87f661deaf7d22eca5d25ad8e52d11377 -P = fb -C = fa8a18048547d58a2ff974d6a91fd8c3 +K = 1cefdf6454732d4165ed8714b5c166a00001bebc6dfa1974 +P = 96 +C = 3f28260c94a15562ca9db84d83befe9e COUNT = 15 -K = da7fedb555bcbb42764382560469d595f1cd3e752f862441 -P = 83 -C = a3bb4c76c578238772a0defb4645fd7b +K = 516989ebdaae5da3d36ee35cce125984932ec9d637f6fd39 +P = 48 +C = a012200a167b939b022d59a197e28b68 COUNT = 16 -K = 4d9dc195754e63b95ac773f61610794dda8e93414c76eb5a -P = 90 -C = f76fe8ef10132c1a60daeeab1ecae576 +K = 5a12d63d92433df70d56d6806f59d81ee88dbfa86fef9a8b +P = c7 +C = 9c12f6b76cc2318a1cd0ccceed86cbfb COUNT = 17 -K = 0992cca1e3ca2cb98077bc0303f6d5f58d41494a6c690901 -P = 25 -C = 320c62455349ed49a2aeecd64ab32b7b +K = 7c5f4ac91e1e1c775b69521b8cd55181247acf7b18a08517 +P = 65 +C = e507b2e7354cc82ee1aff79a43673b63 COUNT = 18 -K = 91fbf8cb22fe23568df42046bd539baaa6c85cab8857b180 -P = 53 -C = 19a9e6cc1703cb4940e615d954a4ce78 +K = ed13a67d4094d2e3adb51b34d1d45abb0c9ea4310f2e5f9c +P = 17 +C = 6fcb04460d821d3cfc34d30a587583fa COUNT = 19 -K = 16310bd548c6b6bf4b9226dc1723fee158882abc4ee1861a -P = 67 -C = a8dc9ff72a7d3394379a2b05c3320283 +K = 298a1b497ae0708a0659d03e00ac0d53552beeda50133448 +P = de +C = 2b172f810d838f46345b2bd8004f40aa COUNT = 20 -K = a6923dff75c041c770813fd73bed5115afb5d7a6577fc782 -P = a0 -C = 91edec89e2ebe5c1e13b60ca4d9c5ebd +K = 743e26e6b9d48aec3f4cd966927ba482b3512e7c25de903b +P = a1 +C = a29a19a49f34b79f1bf907f15c6e12c4 COUNT = 21 -K = e8f7386d971b0cbe9b21e7f7bb6d40ccc85a02f0ae6552a7 -P = 8f -C = 91e66613e26f6e24c62156aa553a5d2f +K = 57cb1ba364b5d87cb9a54cd05a528ba0e4f0a2c4940bcd31 +P = a7 +C = d6a85d3a4fd0a20310a7d8ba4437bc9a COUNT = 22 -K = c575c557b2956debda3c8c868ddec563af4b8b5234e6ad41 -P = 12 -C = 8f864d1c009fb6310e4adcab416d34d0 +K = a8f6d08095b2fd7598bbe0741369d5a574764ba88699e192 +P = 2b +C = af6886e5a9f692b4dddb54419329d6ea COUNT = 23 -K = 63ea6f36bcd37ff4a61a78137eb78c614e277013885c981f -P = 76 -C = a97422b5c1527f0928a1f0222a8b1632 +K = acf1cda6e9cca0b693bf81c1fe91c406a67838a1fb523727 +P = ca +C = e68e16c26a54d526a8925f89c1dc6a47 COUNT = 24 -K = c47b1882323c3bb49cea184a00c9e5503329f097beff65f5 -P = 99 -C = 0387d91ca850861e27cb334d3698ddf7 +K = 2fc5b34a4e06cad26a0dea1e65f8681547c3f3ac195b5293 +P = 96 +C = 9d2f8e8488d874a8908c3417d861e4f3 COUNT = 25 -K = 2cd0bd5a03bb38e371aaf5e549044e42819a20ae51a2c2a7 -P = c6 -C = acb34cd8d3f685ba9978a7a0965b7aa6 +K = 0bd2833188e641cef512d8db3f14c7479676bec63a254878 +P = bc +C = 0d8be9b2da1698c9526dd46d0c5250bc COUNT = 26 -K = 0a53946826f6eba6d3c58e74146f7f320e595246eab569b4 -P = a8 -C = dc85c75e6d3f1a5c006c56b4c711e4f4 +K = e677f59d04b21d12ba9b5b56ea48e073951298afecb42aed +P = 85 +C = b3cb3df8eb03f0be67c4a5cf74551ad5 COUNT = 27 -K = 72d2551434738bdca1331f7434e3fe2ccea7193562885533 -P = cd -C = 1d02fd4061ddaff12321afaf1acd10cb +K = 5a62ede14316320f9444bb14f7cf792b059ee4c512764cc4 +P = b4 +C = f9f44550572888e83e77ef5e05339b51 COUNT = 28 -K = 2929fea511f95199ebb67716c8b677b06faa7946cee958ef -P = d7 -C = 8359164b2213f008cef6020a48ad8c73 +K = 7a3bf2303392228b69db48df09c3a5ca598dbb780a04e5e6 +P = 0d +C = 54dc3e86be908fab082b0c7ac6d741e1 COUNT = 29 -K = 7eed2e519be84b6d64a176b7e6ac59f19cf9ff8c084ffeba -P = 94 -C = d3eadc2d86d82ad43d8519f72b74903b +K = 8e5bb03d329a17dea4a39e03c17f30fbf48cf639cc133b88 +P = fc +C = 8bd1db87c702053fb6e082bffb89cae8 COUNT = 30 -K = 91774e74076e15e92114fb0490895a200587d7855431b192 -P = 8b -C = 3bc5be8046e50b194e3d107e79cfbec2 +K = d4f3510a1c9cf6eeaa12cfb726e8101f96494d29befbcbe3 +P = 79 +C = 34571f809daddc8f7df9b139cfaac8bb COUNT = 31 -K = 0c6068b0bcec4d284ee163ac1be14e059c6c5e757756c409 -P = 35 -C = 7d3a1a813e3c65e924d5f3c5f83a3e37 +K = 1776161b561ffc6abb115bbc7a0a3a3bb5c5256e58b11a00 +P = 8a +C = 389865e5bdc6b362d1805aa4c602a343 COUNT = 32 -K = 25f8c39748a7fa3669445506a4f125ce350942b3eec7e20c -P = fb -C = 6d594524dcb9e7fa1fe61f0da8256530 +K = 5b1a58cab67676e438311663192b49750e2d4f7e5b927d2a +P = 23 +C = e3a7267312567a052ea693b2c83bcb9c COUNT = 33 -K = d98c2440d8fe1fd1a4a6eb863f2a61d8c6932a1598be869f -P = 34 -C = 0110d545de9da1ad7863d7164db3b91c +K = 8cdedcbae08dc0615e5f482b56288347c2af4f0b9571f2bf +P = 3c +C = 30db44a8e56b91e584c329edac149c60 COUNT = 34 -K = b9df0dff4b23dccd73cfe25fb2b53655f39e1a8d33c4fbcb -P = 51 -C = 967a7d39bfc32147d8c3ec5054a7a6c4 +K = d409b623bd0b4d8c62daaa5f0ab1496d31390e403f04304c +P = 2b +C = 386f888259ce2086754babbf203dcbff COUNT = 35 -K = 1cebde0f6f4cc9c565263a210a89e255a1df4db73da7f069 -P = ae -C = 480dc1ef7aaada0a59e708229fb35fec +K = a6539910d3ea12615463a571ffba2aa96e70ad214cd1b3f2 +P = 6d +C = 94b1262d11a637e04b179c31c8a5ef0b COUNT = 36 -K = 7a5b30d85797ff6e1047385db72d7f41d727d54ff10f08dd -P = aa -C = dbdc1b8362affc7da183671af2e7944f +K = 21718a16b6f16f5391c0e5381c68f6969d86fed014a34b96 +P = a8 +C = 608d136747d83b343effc1ab87c3ba7b COUNT = 37 -K = db436f5dd9dc74483ea8293c633a61298c35c76a884c51a5 -P = cc -C = 140c46dc455b6fa2fe654086a9aed09e +K = 3419c5a42c657ba28e7204887a323bfe2cdf2ba5179b6de7 +P = 0d +C = efaf200422772659c4f70d93343d1016 COUNT = 38 -K = 71ee29e443d1535185515b6d8daa94b649556bca2df14f7d -P = dc -C = b08574c0307314f30013c89ab8cb3855 +K = ddf91ab30d022565f98cc1a76617e1cf3f73a9acaf535bd6 +P = 1c +C = aaf2348c604f0000f8957e37fa41e03d COUNT = 39 -K = b7f11d227a4da923b7645adaf77d0c6a85c36792f9736d12 -P = 2c -C = 2d076053175f64d94dbdc11316277fe4 +K = 7e626a495288c03ee2915a62dcd5559e287e6608a90f2466 +P = 58 +C = 04a918febd262f47f9f415e680e16ef3 COUNT = 40 -K = 8533471d15110ae3a87fd677e2a921c4146b1923df42396e -P = e2 -C = c25962e46229f47147c0e70a3ba41483 +K = 1d3839770c447aabc4b8a729fa36145dbf9d16f146b19212 +P = 04 +C = 648743571b87ab31fb30d61aff1fbcad COUNT = 41 -K = 068536ffeed3eb69c136cf283d279a82c8002d91a546607b -P = 33 -C = 04c30a6edbb7f513523986ff0f1dbf08 +K = 016b24bba0692e2fa240f434583757127bc18914f0ef35f6 +P = 3e +C = 6c9cd00f086c8ded51572953a864a057 COUNT = 42 -K = 9f8f8b4db4ed6f752173d98a572bd3b5a20b4a68fe4a61cb -P = 08 -C = 4601cb3e50ea7c4cd598ec43a3e64429 +K = d48b3c2c1ed7e61c5b8baea1000696cd53d8024830e0a4ea +P = 80 +C = 87a00914cd797861393abef030b8f76a COUNT = 43 -K = d545471f83563bf80232cf3bcf0d847bfb39dfa2f49151c7 -P = 67 -C = 193efcd56c67eb229c9ae07d2026f24d +K = d8aa9157e33accab2849b226387d203f56bfa1782fd10f08 +P = 31 +C = 8f970590d34e9ea13bdad2edb7cc9183 COUNT = 44 -K = 330e2dd4c2b4b285facf6433ed119f17b22f9cf93d9dc5fa -P = 5d -C = c19d9ee8633aef040d5b8fd0b8499d08 +K = 1e2eb6c85fbeda43a625f92e5ec890f9303e819f57c7539d +P = b4 +C = 70ff62357a491c2d032fcb80cd46f068 COUNT = 45 -K = 3eb330cf90be94848de1ac04a4761b5d280973738e8dee27 -P = 88 -C = 1314a247bce931eccdd2f57f021bca19 +K = 1b8d7b79db27c0d751b5ffbcfb94114e6472a2281770c695 +P = 00 +C = 7dceb2f612a72679daf26bbe957f4916 COUNT = 46 -K = f71b0b2b7e079cd27398aedb45dbe53390d128b01614cebd -P = d9 -C = 41d4665b46f1ce334f895e04cce9de09 +K = 1adc4e3cad6977665166ecd31d9a773e9e0f60620ca8eb0e +P = cb +C = 5e0b78e439653404c943dd6291884231 COUNT = 47 -K = da6d8fad644e8c7ce0e383a2f5f423e4b095ae62992c18cb -P = ed -C = eb42f89285bed83fbb7478851167a2c0 +K = 35d0999d2e39aa9204a22a5eb00b9b9e0aca6abca4262837 +P = 95 +C = 20e1a559b4a01062a4bd47a29020cfd3 COUNT = 48 -K = d1225dd328cf9e82f7f2adee999a62ae0e8ad63cb767113f -P = 39 -C = 3d9c798b1bdd9846913e0bc2bb4d2e0a +K = d05303d7e2732376e9a1faa9a33056681fe8c849fc84ec6e +P = 8e +C = 16bc99884d895dd7bc55a476049c0332 COUNT = 49 -K = 2e0a474d51fb60511566f6005b81e69fc27d7f0711c430d0 -P = 94 -C = cdff1ac0d5304fb2709be2d29e6c9654 +K = 6ffd1f6086a334e02f31102a54f1b687068c995aff49ea44 +P = 02 +C = 3428627796f55c6d2039e79af41fd853 COUNT = 50 -K = b5637cab589c231c44a9d4009abe0965ca57e637a2daec31 -P = 4a -C = 1e61cf51e6cdc0be6fe843e6f2c6ca78 +K = c1d1dcbbcd170282de419db80da367ab676e1b368af9e61c +P = 7d +C = 51fd8a09b9f915098e7cc8e68ace8c03 COUNT = 51 -K = 37daee1bd47fe3e5a204c5fddb1359d0afba9840fe4dfacd -P = b3 -C = 8c01813492fd10308881f5f674d5c369 +K = ad59ca73856bbc742840cd4915c97b31ed5109d8584da276 +P = 20 +C = ca65723567d387bbb9b0699697d8c661 COUNT = 52 -K = c2d66d9333d31adfc69027caa559a7e48703b1c7cb561d23 -P = 3f -C = b6348540b79b895b16d3e58a1fe86a62 +K = 7c4b587c7cde8336a9f5dea0bd28c17f1eb6f5e39ce6bf3f +P = 21 +C = a81761af90e5f1d6b47f802f8d423819 COUNT = 53 -K = 86faab90f88a9e8c0f9bec61daa5b3e9fa4c8f6b3ee3819f -P = c9 -C = 400c8a721b44b549841512751b48349f +K = 7bb1ea10a3f8d2913c5647bec9b7e01e15af540cff2bea75 +P = a6 +C = eb913dcb2b7193fbdc9fc6608638ba4f COUNT = 54 -K = 8fced24a95758f9902acea08fe8b4620cefb840dee23e651 -P = 5c -C = 0cedbdd383bddd7249cb0c37c08d9c8d +K = d43036c177d503c00e50fb8150d1cf54cc7fdd5ccda42005 +P = 41 +C = fb65554048ad531d743056edcaf3d286 COUNT = 55 -K = 20d3d3cb1668dc93b9a91e90c81a3addfccbbb20b0415ea4 -P = 20 -C = f7b84cf24b2bea4e6fefe400c0ef2116 +K = 807b3449143035e50db579ed2727147a46f267d67b95dc3e +P = d3 +C = 7aa30e7f2286be49d739d46afb238ade COUNT = 56 -K = cfffa6f7e9f606e6fc77f015e3cd3a8733f6fd86becc7f4e -P = de -C = 83c6581e009ab6da48a135b7b3ae66ef +K = 7f98b673b60028a71f2abe15e0b789061c5df3c03a4951ef +P = fa +C = 6ad4cc212950663b6167e6bc3535c39c COUNT = 57 -K = 74defa2b91930a0bca135f711417170b979e67419532f568 -P = 96 -C = 3e40bf9aaf13c8ab163e2288a68a0aa9 +K = cb361204c92afa8c479d16e00410de95037bd1e27c79318b +P = 58 +C = 621e17773940148ead550258b0139107 COUNT = 58 -K = 2bc3242a95d8a5d7c114640f523a000f4f5252f90d08b8bc -P = ef -C = aab45b7ca30744f729ed7518c4fcf8bc +K = 973a4ed341e48929cab31c60bf0fea1cb7f41972201c9785 +P = 83 +C = 87bd490728110d3611da610f9e569bbb COUNT = 59 -K = 3c455baebd50e434253948e8bd4901d9be5a0e72bdd7ff9a -P = c5 -C = b10486d96dc49eff054f829483485d88 +K = db032319ed24b3be81b11273d1db7d25c9adc2caa16346fc +P = d9 +C = 3f24fee3a3fbe255c205a8076df7d7ab COUNT = 60 -K = 8d6a60a667af2be96e8e452f12dfe0ad07b2f304bf9cef23 -P = 02 -C = 582bc19943d3aa23eb0f9dffa2725e8d +K = c719ce944ed41cd6ae311af8fda553e8bd530a686bc8df30 +P = 44 +C = 1735d88ed03a0bb2afd01c62b01215ba COUNT = 61 -K = b278e8b508290dbd1bd7880cd14f473f73e945e62156e30e -P = e8 -C = aaffda7019b80de7f62757a5f9951465 +K = 05c32cd070384a172d6b2c284c8a4f4658503daa5d323ea3 +P = f1 +C = 5735e9c381de3495c09d8f2382d8b1b5 COUNT = 62 -K = b7a006b0b005308b41f1d1ef86eb51fd162b2a3dd8e6be76 -P = 24 -C = 801d2b0b08bc511745bc3c61f0f31665 +K = fc42b55ce583581e1da33541db630d3994c9d6aa84d2ccb5 +P = ac +C = 8ec9705e6803a2a79cce2c912110053c COUNT = 63 -K = 35f26bc26fffd3013f719fe72bd94f34e591d6fa648de1e7 -P = 13 -C = d1f1fd553c72f2c62bca75ad5e097146 +K = 8fa6a63e5f0ac632540f0a9497922e94446396f7404a75fa +P = 7b +C = 55a414491fe53abe5af3a88a573a67ca COUNT = 64 -K = 73d6a7ea68968e63c43e672b3311a13801afa86ebd101621 -P = eb -C = 9c325a7d758115a4c322af38b1ef2180 +K = b69fdb8e8e93608f3f96e29031e238260a45630d7761b9c2 +P = c4 +C = 16bcae85e4df79070496b667556a85b0 COUNT = 65 -K = 7e0742040be04d4cb78e5452b99418a4666bfe1dbd58cb1f -P = 1d -C = 0093c86156a88c02ba715f2e819f329e +K = 69aa08f92aa2161d99bd6940e8e4ec12adc94449c8817d70 +P = 76 +C = 48dcc92a62eb2b40ccf77f2251274f8b COUNT = 66 -K = b5c3f66550fa3e81ca8fbb05faf0cda6a0e704e0c518dda1 -P = a8 -C = 13dcf71e2fbacab85977c3ef4543cf84 +K = c661fcea0f58c3d5da1de7d6824a427bf4ba3c23508c4361 +P = bb +C = 86a96928e996ba6fc94a5b2add458b6f COUNT = 67 -K = 26ad14f7c42e22328df0781bf5bfc543cf85a928105a47a0 -P = 8f -C = 7bcba25493c97deff13a79df29f75ff3 +K = d50da02562cecd518f348fe938fbb322b12be9b5c25478df +P = 08 +C = da1936ce6ddbbed698b036d769c8b7ab COUNT = 68 -K = cd7e74146b0f86a08d092cce8521422dc6c54932955d393b -P = 4b -C = 1dde57a65c09d143e578d4197406f08b +K = 45dc26b731b8a306cb0a24f4801f3632d82c04dcba307cba +P = d2 +C = d8004cb0d97ae27829fb323d947d2b57 COUNT = 69 -K = fb58e395adf4cdacfae3fcfd8374f67dadc3e2aae82fa99b -P = ea -C = c4c3c69c214f75bb0dce86bc13721c40 +K = bfe5b08683fe8722a76d0222d1efc1470a304f5498ed7fc9 +P = 2a +C = 32b0130738674c96d2490f9653877af3 COUNT = 70 -K = 3e47c45a96c9f85a154e2369d62895d26c1a300792e66225 -P = f5 -C = 4f9d1d410a0330091bd0d17d22c0d117 +K = 517eab3ee6e72b9524262176e22b5ca1c720ee9d793b34b2 +P = f7 +C = 7abb2482fdaa37e0f72db5b551f0242d COUNT = 71 -K = 864fccd4ab3ff5d574a27bcde94e6b78fe20386b9bfb3126 -P = 20 -C = 1ff0a8e94d2a027ec6e6f2cc1400a541 +K = b898c1f5c11e9207b6777af0e1fff287daf19b2e784f63e4 +P = 06 +C = 125e2c2eb41c000ae8dcf09965ddeadc COUNT = 72 -K = 501a27fb5f7b144718054cb2378c7e74617ed1b574e259c7 -P = c3 -C = 00b88951d444a2946d4a413d3177e8c8 +K = c200cf50a69753f160ccd7c1f40d5df6804afcfec22328ec +P = 39 +C = 284edf3233dc989980efaa997acf8255 COUNT = 73 -K = a73fdaf24dc6c733e32c74bc3a026a6b39014973287119d2 -P = 9b -C = 8a0eae648e9ab605d028547bdce23df2 +K = eb9d4b748426d58c0d0ed53a06ee08309b277583c239a80a +P = 33 +C = ebf682a23080e3926c26c53726237bc6 COUNT = 74 -K = f80adbf497a2b6a414224f5a70075f5b69270678324faa10 -P = 16 -C = 09f0e9126d4843bcbd877d73eba81184 +K = 933625d448c9513af4f2937923c836dd1841a8e9a0b1edeb +P = ef +C = 299ecef52d11bca17cb0c66d38062ac8 COUNT = 75 -K = f8f7f058fab1949ae82c46a724416ca559c35122a4d0ee87 -P = b4 -C = c3ebc630abb24e294275b51a21681c2e +K = 2f76b902a660ac4615f36a00ba7d76d7c8445d9cae03c88a +P = 0e +C = d87ce0f4a03680f0073b6441e501b86f COUNT = 76 -K = 058becd6846a3ae30c4d3669e9536ad95959f7a63b5cf6b7 -P = f9 -C = 1a5cd8863c78670061615e6500352671 +K = 6db286cd88256f15b1c9c7c07ff33b77b7c0893423d2eaec +P = 38 +C = 9f373296972e1cc525070995868dadfe COUNT = 77 -K = 1bfd9475303002d5cb956bcb621f0093af99973e4904b9e9 -P = cc -C = fcda6bbc001f6c4906ef4515da63b816 +K = c90b4fe8cb17cd0890b50d9083609e4a8affae1b26dcfae5 +P = 2b +C = 4b8b0721a7298024c00665dfd845b712 COUNT = 78 -K = 5693cf96a04885dd7eb59a14caf44914a8863f7e7254b993 -P = d9 -C = d20a0db6c73dc1c4eca4b8a985e5a735 +K = 925eb6105cad32c5963c9dd3143ffddea2461a8d2cd75c5e +P = 8e +C = 3b8ce46f9fcf5515781f704cc38e636f COUNT = 79 -K = 9cbe26290b2290dba86a17a935cd26405cfa091a498146f1 -P = a7 -C = fd429cfec567163f35e2a020c66d651d +K = aa290a1055d316c1da0ccc2e4c6115d783892501295d9001 +P = 70 +C = d14a4c039b5532bb17e7837cfaa7c6af COUNT = 80 -K = cf7d8930e9b32d5d6b49fc03dbcfcd719861096e78b68a0e -P = 43 -C = 5fd028163f1f4cf7ecab5ec94e762bd7 +K = 3edcbf349ddd0b70fdd4efc4f7edb8f3c99a2aec5f7b290d +P = 12 +C = 86e5af60843d6fd1a216de76a9c15003 COUNT = 81 -K = 4610278a1523b2171984809b1465297fbdcd1cfafbda9bad -P = 27 -C = db742bf770914e78e5255c773f1f7d92 +K = d165c8803d66e8ec1be8b296d9c42da51736a126c2bce942 +P = fa +C = ffa63eca9e248e440dd97377944b6cc0 COUNT = 82 -K = 96fc304f5c8fee01385df4d3b3cf3ec93a139fe5854ead08 -P = b9 -C = f66ee81f4b590093a182c74a636fbc84 +K = 75a86101c913b13ff391c8b9a8ae4a31caa74b84145cf1ac +P = 1d +C = 6d8e1f2b89cda8acac480713328451d3 COUNT = 83 -K = 42e0c964fadbac5358122c495e5fd4fa83a1a1a858a85f1e -P = 96 -C = c28487794e0615106aadeb83ac7f3889 +K = 92ee1588e8884f52fb649d6ca32acfa5716a48e46c35c587 +P = 9b +C = 41984df33ca4ea20ba039cf0f38fe910 COUNT = 84 -K = 0cf7835f6e4841813a77b87933607522fbadb765eab42e32 -P = 91 -C = 3f2dc40d4937190eaef330b98517e94e +K = 0815d508bd4d34195899a5a51faf974e40e7306e6403b94a +P = d0 +C = 78c9b34c4d8cd97644afce31983a929e COUNT = 85 -K = c56a10d0f0eff59607c236ea4c7fc7295dbdd094da38fffe -P = a9 -C = ac6e6e97ff96b3da77b8c236614bfbde +K = e8be60d6c61942b358a2f251a667adfc999e02e6e891a1a5 +P = a7 +C = df8cecba3f16a230fcc683d0e6bbb610 COUNT = 86 -K = d233cf6145ea7a97245abbd04415c74dcff34eb2feaa4399 -P = 0c -C = 1cb66dd416e5318c5f38e50ac0f91b4b +K = 99fc5d6f4e53ae19d2d9803beff761c5b99561b9cf225205 +P = f3 +C = 6ed1c73469081392e851245e8732caea COUNT = 87 -K = ee6a51386f3efd1e4ce77e72499d0597370c876281d6c348 -P = d0 -C = cab108c7b5b46e9956292ffa4fead3e2 +K = c1a07ca9b32a5aafd24cb8ad472a73e585627bc0c6d2cdff +P = 6c +C = c90d42318a14fdfd0d7df1a841becd91 COUNT = 88 -K = f647f8b12d6abcec5fe13071e64f3d357f98629a519c8a4a -P = eb -C = 4565220317e532cc0c21db5e4a27bba6 +K = 4a9038ce66ac96907cff4be5475195e4b0eebba8b934698d +P = 9a +C = 4d8bd9332cf66973141c0e15dc3b2547 COUNT = 89 -K = 551eb0eb2ee78f1bb18e9025d85ad2757ed6390b3900e371 -P = 40 -C = 8c93a79d12ff70a938d0caf04b84a3f7 +K = 06609e109a50aa4adb7da8134b164d5d7edd34092f6edcee +P = b5 +C = 054d742375eb38bffbb8dd62615c011e COUNT = 90 -K = 979e4079a6a7464c50b31677bfc90362a3fd1b78bb85b76b -P = 15 -C = 9fb6c5f52be3a0a3741e291f8976aa46 +K = 16448ae0afea5643c5602e46349a863d03515bcb696cf5ea +P = e2 +C = e8be32037e02150ec2bf4b526deced48 COUNT = 91 -K = e1dd6d3e368d8c53cefb4ea476e67ad17d12d593f4be8820 -P = f8 -C = 058736908f859450a457fd8d47cec4d9 +K = 8375a9c823f3912035f8289dc2e03875e8a20b1e6f76fcec +P = 29 +C = 09645d4f4fe36aca91f81ede844c8369 COUNT = 92 -K = 8a1113e983d4e8620f6ca809a293b19df578624939f7a796 -P = 13 -C = f7f494f417a5f6f291c4474e6b0dc0d6 +K = abba517ce612efd686fd7e52d159d9ddb57f70a2b2b3e965 +P = c6 +C = 821c7445da90a7f0065095eec7dbcbbe COUNT = 93 -K = adf827cc88d0ca026767b1594388a701b91bcf6f26e4673c -P = ec -C = 1fb2adabc7e160c0519562d4a2f00eb4 +K = 788521d9d1cadccd6a142c2cdcbec98d3a6292b1cc4b476e +P = 6c +C = e59b0a3a4cd5b47588e9d7e4714ef8c5 COUNT = 94 -K = 2ea4d83b9c9b0d801c37e09db6f4611b102825832108797c -P = c2 -C = ff90aefcf43fa69086618696994527c6 +K = 9f4c7f0fbc1286f452cecfdd385ce50c5a0c30ed4738bc99 +P = d9 +C = d2b749c2dde6dd540859b070448e1b8f COUNT = 95 -K = 366b31095124810108da08c5fdc8d6c3650364b10867494d -P = 19 -C = 24de649a1d30e8d3d8a6cc7b53d2967e +K = 9fa09105ebf4a4cb3788eae6ee6993b0fa0e78f0455bcf8f +P = 2c +C = 75291df7863343de2edba07810f04f53 COUNT = 96 -K = 6af9b9cc0c4c163cd849c4809ce6d944e39a4cb040914d4f -P = 03 -C = 2791c7adb9bf648f646e69037894857a +K = 86f3494962b019e737a16327ed83e50f2f6aad2a739d6cf8 +P = 9c +C = 66d0135b124c023047956a398bc6e8f0 COUNT = 97 -K = 5a0787327055c07894823825f20cc78ab167e71e1b4e18ef -P = 2c -C = cf360ce1968585003997127863713d15 +K = a6ff76ec1dce2b6b04459c939b9b2c11307bac46a83ec2be +P = 32 +C = ddce5d3a1326565b4a6bb4591750627d COUNT = 98 -K = 898ed49143720b5da4ca43b34696f05805b6277e0f0087e9 -P = fa -C = 691494a2248e6fe90b983bce0ade3127 +K = 78ff11cf9b538a10fa56678a2dad671ee10ce4f7edd8eb60 +P = 2d +C = 678c2e70c240e430de321459a985fb81 COUNT = 99 -K = 5f27d0711916f80af270079627e11e6ce0fe813cc503cc37 -P = 17 -C = f4c1b2e5f6beac2e157337d510248f04 +K = 98a40477fd237b8e9619f56f3247b3d03a99a9845256752a +P = 80 +C = 0134afd0d2d84e7f29c1822d80412475 -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = 484f45d03aeb902fa905260c7106b990dd556390b5d71346 -P = d842953706185a1fd7 -C = 3b16d3575ca9b6cc951ead800f153be96b362833c926b8fd +K = c5029804d28341ca267c9e73afc5f963b14bb604708b43f2 +P = e6eb18a3e969ab5c +C = 15b98046b2a3a49b9c0831c476fc34fb COUNT = 1 -K = dc4d1f7a33173ea02e01246012932f3510a2c74013c089af -P = 570e7868847ac18b2a -C = 133cdd6f63fd573f5188ef46a01bbaef08c6faa40a903ab3 +K = 9a3fe78973398acf648e745987d5520726dae27e79202b69 +P = f154e14efa836250 +C = e017a7fa42aaf304d64fb4776734f791 COUNT = 2 -K = ca45ebee396f164b796756aa1695a7f1d4928b07f17cb76f -P = 42b74f1b59ad983c05 -C = 72214131a2bafe5f102499f8cd816ed90f54d33adde53783 +K = 4dfeab8171449d40c247c0ca6d915639a78cabc017b09687 +P = b5e5ca64487457f0 +C = a61f60b276d3d66ecce68091a515d5b9 COUNT = 3 -K = aaa7fd5c48e2a1d163a2ae89e0079e85167b03fd7510eec4 -P = 2d22de683158dd39f8 -C = ad243c6084657485a5e5c8c65b6b516d2b8f9925fdd1767d +K = fd9548c59935d45b007d2ed3c631a2e21e40d13bc4b0be8c +P = 5d1252e21faa6d0e +C = ee6840dbac913c025432cb0160eb524d COUNT = 4 -K = c4cd17421b8690bc5ab901569e6fee991be09b3b35c73900 -P = e5091f243b543eff0d -C = 93a52306a9814bec52112d44b64d980ef30110a8d77ea2a7 +K = 4de9e913c56eea8de968d673703e13add4fbc900e8991533 +P = 09369052fcebd5e0 +C = 61db9724a9fc2043a9e4cdd278f006f9 COUNT = 5 -K = dfcc3d048a6fc30a92d8da34a90f2bd7862582085058150d -P = c21b34c6193b72bff4 -C = 0703fda7f79091402c1ea374fc4c4cbf051bf6cfce30d8dc +K = 02dfb6662e0c1b95d34aaba7eb6c1fdd41c52b89213d5b18 +P = 27361c34c2601fe6 +C = 089f835f3210734aa1a2282c6ff30ef9 COUNT = 6 -K = 8f7c7412f3514a976c61e8046f28eb830cac1ef2d657e950 -P = 44269d199307b4115e -C = 1587cc1b7e082cc98e99f76f6abfa6153042e7b0bca8b8c7 +K = 11f7014f3b6cfc0c0d691c72a5ed994360b1cb9f452daf71 +P = c74ed8667390f083 +C = fb9eace8ef299ac7a0545a7defa39e58 COUNT = 7 -K = afd46de4a274d7e0e127fd7cd00ae1fb64b8d30505b3a911 -P = 4921d56b5a81bd60c7 -C = dd74d64061104bab4836c9e273ce2e56327dcf54a2456667 +K = 269ff279b5711464af9f1725a5f42a2b0971caf185940559 +P = bd91c792cebe591f +C = 6be83455a1faa519a8dfe7dff257f97c COUNT = 8 -K = e457bd1b06db0d919a2f80f880e640703d63feaaadcbc4a9 -P = acf09c7d8e9cf24900 -C = 5958006b1224393b10e2c18ecc8ea01d88d7c94dacae1f7b +K = 1c7b6fb870a8f176b5f9176325aad34a14d6770709f7948b +P = 0209cda7a53043af +C = bd8d06b49f928084d71aeaecd476b97c COUNT = 9 -K = 891c9ff930cd997d443df8f9ea899fe111a606b0b5b8bd28 -P = 28f0c0ca3e3ab2da81 -C = 4d5804561e23b9f31d02f972786fdb3d0cb84f4b8f601a88 +K = db7b4c51047f3e4d9b4df43267d446c7bb68d239f0b0f886 +P = 4ac479fb0ad35685 +C = a86250a24a2982c5ac2fc97dbf33355f COUNT = 10 -K = c8e1997a62c0ddf824e630769d2c71217fb0d06bf05fc24e -P = 13caed5e1db1741a42 -C = b33c3267b310b400db408713656c1e4700ca8fdc75b37e80 +K = f8fbaa96a726f7df24ffcacb39b076c593031140c1e211a0 +P = 78603c3378035c08 +C = 4471135a72f50ad7c58877768fb98769 COUNT = 11 -K = 324ece33de4517d511ef5cbe411f9d8729bafb1f6d68aeba -P = 7c20554ed8da0c3879 -C = 8ec0ec1cc9b0614cab09c0d23732eebc35d66eeedcee7fbc +K = 592ccf186eee16db251379d179ceec8e17244c3d3ab574fa +P = a1e2c16410979df0 +C = 65af8f051d6768d4a6a384a315cf9037 COUNT = 12 -K = 2f85e7c8735f59255ee4472ab38b224687c9e822e1860dc6 -P = cebe66a642e7e8e123 -C = c01c9eea9486b6842fd9f929de2e35c3c28da2532375ddf3 +K = 38dddb4223ea270cfb8aaab096040e27a9fcb839f3d3af21 +P = 4428a3f587689fcc +C = 4ecfec5cc3b1d36c0512016d71f92548 COUNT = 13 -K = 0c9a2e292ddaaed58b8497b3f8e6b440a8e0381008004734 -P = e52152cde33b481ed7 -C = 129d46910b496045922b0d1874006b428b59123b3dfc7395 +K = 8afe784f86c92ab2794260c256dfb09912d3f0dcf4d25d1d +P = efaef9e61275c01b +C = 77d7b7d30a0331a2f5c7b469fcd3079b COUNT = 14 -K = ae84d447659c193ebe2680f612a0b5f21a65f6fa9774d5fd -P = 508c3455bd72083745 -C = 96299dfe610c3555950b6222dbaf400eda6747cc98fe843c +K = 2def1892c2fb9c259f87341de0ff1cd0272f557b1543db3d +P = 685fb00f4396da49 +C = 4d8a250ad2d65febecf6782043dbcea5 COUNT = 15 -K = 53015a1c2163e581711f94f6e3f1f3d056362ba561b4e492 -P = 51c0ad21f70db5129a -C = 97cd35383d335c42f8dea1c756e1c8fc6ea4509132e4d2bf +K = b41f38232c130f1e49fa7ff4be8e6dad6779a4b4e9563188 +P = 3641f21b2dcb7f94 +C = 1a47318887e9ca33fc1d0c9d41d1341f COUNT = 16 -K = 8bab6d0108f1420fe80caa247102aa5be37dd2640e1d3ff3 -P = e02bedf93d4bc4669f -C = 098121973fd3cee3d48dfe93c333cc82e776d521e44c071c +K = 828aafdce4ab4efc6a4faed9366d68b60df2e52cddd03564 +P = 406042df73b6d991 +C = 5952d3b7d4b49092bfe646998a1275e6 COUNT = 17 -K = da6bd883174015dc24ce7181ac6be05b92bbb1ac4a074c4b -P = 7714cf9ff0456f710b -C = 8bab891761ff3427ff5f7c8987e9bb1c16b7d001d6cc2e82 +K = a6eba631402736395882bd72e52cdbac0a2cd3b05192bf11 +P = d8e525f4dada6f6c +C = 9a253198a2affa3cfdfd57243aa8709a COUNT = 18 -K = 9a93664d2410bcc42e779a7b8b5b78c1361f83f32d17f5d4 -P = 16be713e7aaafbd975 -C = f909802b4382f12e40b769e9831feb1d955dc9cd0c6ec301 +K = 390ee08513030abf0c4dae57fa780f3e892dfcdb3bb91fa7 +P = a00f2ef163915e03 +C = c82dbdf390e3a4b94dd78f948081c44e COUNT = 19 -K = f090dc27b8f3304464bedf74bfb03de65bcb5846da789686 -P = f80303d071443e5d10 -C = 317449aab972d68fa6e5acbe9869e8b26862b643e7462223 +K = 2d49597b88116e0aefbd6f3e13cadb83964e794595af6bae +P = 25696fb1c7f09534 +C = 84deb36f6c4a5bb4fa0965ac3761ec63 COUNT = 20 -K = f7aa9e47e59a9fe5c9d27cfe8a04ea7705e5bbe9e4f4b213 -P = bb54cfc127103574d8 -C = 2b2bfee37a5dbfa7431ac5e20f5a9cac9c74f975dc05c231 +K = 76d23ccd0f8b5f9e281d82437def0e3b12773962ccb45f26 +P = 33ca481400e093fd +C = ad2f4274dab8b28c5618b7a185b7aa53 COUNT = 21 -K = 7f1a1fe7428fcfef90c317ae22f0b7748ffdb6c845e70e49 -P = e4c00b3fa225fc965d -C = 616b85d394fc5b8e829c9244ece25211c52d879c154dd391 +K = 610c44b34b323d158c5a16293b7a7eddef642f35b01677f2 +P = 580171f906d35fb1 +C = d3a42557bc40420ba508229406f461b4 COUNT = 22 -K = 9afc991df8c297c5c84ad6ac4785368e879387e2babc2861 -P = e8e3c7134ae1c4f5ae -C = 2c70b7228c7ab47c0c55981a64a892d837bb986c9d9a6d5f +K = fd8e7897ccee012d31d804b2433102c4f05e8632a8cc47f2 +P = 0885128e932a8aab +C = 8f0746f1d76173c7b1b8809bc86136f7 COUNT = 23 -K = 134a4d97037c0354719eb99096eab4d6f791fda2152176c3 -P = 0861571bf55bb43b91 -C = 22b1e8a5a555dc0629e76d9fd77ab7a3ef9712c2c03c6a57 +K = e5a403762bd354960cf36737097e7c97012b948230f8ed03 +P = 4b8da9f702158f53 +C = 2423da6862dad31efa487767565eeef4 COUNT = 24 -K = 10f66430fef7cb3c18677c9f5584ce8fb77033532d9b5941 -P = fbc0ab2c61113278a3 -C = b91178b26da7d19f559cd35473f25d892c74442f98a05cf6 +K = 6ff99eb350f46cc2aa288078f6a8e39cc2b4061802122c17 +P = 5492f82b79b2b120 +C = c0887c16c2829f5f50870e0d6b94ecf1 COUNT = 25 -K = ca2cae56b249108964d2a86774aaa9d92112b3ca44e70bd7 -P = 7f93faa412891ebc30 -C = 64c5fece8b56dadab5b0a11a9622fc0aa75a3ba48144cba3 +K = 98e6b4a4c262ffed5fa9ecabe037df40f08d9eea43b7ce61 +P = bc0e1f4870cec8a8 +C = b6a279768e0e3ed7c39628786cdc3dad COUNT = 26 -K = fb682cd2dcd1797a2b6ea8e45f1fd331e9b69c438406dcd6 -P = a4ea5e3eb41d8c24ab -C = f70826f834916a017460b4e7b87318a32619286a68799afc +K = 5e022e1d5e22356842b424e26cbdedf20ecb6c1db9f4ae11 +P = ffb09ae074b9459f +C = 59b145cb9c70677ead2e42e95139c255 COUNT = 27 -K = 0461430209422f7f34a3f4d77e9d4dc2f3de1909975bb1aa -P = d4f09a7a8e8135b42d -C = abf0ebf88cca2d8a2ff3fcfec19528b46f6d0998c441edde +K = 61b452876958adb4d2e1e6c627b527f22d5a57b243e8948a +P = 3e78d0a45219ec9c +C = 74534ac42ccecb9c584056f34848d03c COUNT = 28 -K = 84a071f8ae9c59549fbb065c941b93252c519aa40e8ba76d -P = 9321f087533396a65d -C = df6b302db1b60a4980e3280477ed6ebb3156bc73ff6fd6bd +K = 46dd44393bffa770743324e777b5d5db4e11cf878c4a542c +P = 7390f9162caf267a +C = 1a716f40655a5f5868a1f199abcecc2a COUNT = 29 -K = 506655c49302362a126b95d33c15ad4f39324c67457ca812 -P = af57efcf2d028cb3b6 -C = c19f11a01a0e4f65a5c99ae7b9ace2b2974894cb559b194d +K = 923c3f2ac14222400946908a40896fd3207bec200977ad11 +P = 95e19b78e30bb320 +C = 61ff09ef4b229d1659e1ef3ff82485d9 COUNT = 30 -K = 1fb833e48f55f92a1cc57981ebf9a2d00633020282b8ba3e -P = a5d132b6def75485ec -C = 2506b2b6bc537636c5f16caf902cd4cf9364a3fe1e8bfd1a +K = 05569972a62ff3f45beb53352d026c6813de68a60f172057 +P = 922c4b1ce4352d6a +C = e47677db6d8205d5667fde6573ffe5c5 COUNT = 31 -K = 724ff404b6920b26d2989407a2a9c56c8da468328312575f -P = 6ea9397c53efdfbf7b -C = c41e3b593991421e5435f2541eb4fb8b7aec69c49305d417 +K = bd92cc6da5ffedd0b3f1744c1b054386c6f7ed14ec701add +P = e18c22e1e0a155cf +C = e62ba6ae3f514c9f8751f208c41bfa36 COUNT = 32 -K = caa08a3f454a861c87aa02c2aedde53c5be2b64d061e2c4f -P = cedebd3de2d2233b41 -C = 5173f02c4001149d6b60b88b090e7e99a531d6a8f27be6ee +K = be0f01dbace00dacb10a82766e773a4c045b06ac9c9e190f +P = ef604283ed09fe8f +C = 3f59277555e58c4c93f3be8a285112d3 COUNT = 33 -K = aabebf4d43d315764c3f7f646a4b09d6bf4b86c3a10879a3 -P = 26e78c4cd57a8d1a48 -C = a2511eeecaeb8c4b29aac0b595b2c372a9a16bc6c35e06f7 +K = d7acee70d8c6a9e6270822dd9e85811f07052b4be52dfe31 +P = 89b5f6ac5244c9fd +C = cd115b15ee4928e66b90582bc14ea4ed COUNT = 34 -K = 90ef30d825afa538b2171f6b0dc87e7d9b39f7b93d6fb64e -P = b662e94b575f2c4b18 -C = 3a0f5cf70f054f0440cef59e78a32f7de6a8038864816a76 +K = 48896553c89cdcfa01ae57aa050fc2865ffb0faede692b65 +P = b76161667abf1cc4 +C = 11532eb589914e133c7df23aba751698 COUNT = 35 -K = c8dc976308ad1457fb134fba78fabdcad4e7573e6c4b0942 -P = 30e0eb1a525dcb439d -C = 580a5bf30016a17bbaaafe0160dbb92e6b52d7d51863ddfc +K = cf949ef25855371e4442f6143027fae9d172ce78d2f2ddd1 +P = 17718eefc1821eec +C = e13b3e5db5e632f5c9486d9b04421181 COUNT = 36 -K = bb1d608ec138841c953b61065c7e71da889be169a0ea7da9 -P = af898a2823b9bab252 -C = 21d336380fe2dd3774e208dc90258d4e74db2297980e8b91 +K = 5679169f335c8eb3442e1993b068de5a9f5ddd715378d37a +P = c0341c2924b35d80 +C = ca4e3492524a4acb7437dba4270238ee COUNT = 37 -K = 2955b1e820750af73c5c3feebd19e9e5566274c44475a368 -P = 3855c5b5f17f473b67 -C = 8c6e11087c9529063a878f8e83745da0c5afbd0900b4b89a +K = 0d1980f37ef31b7ce8387c7927bd28a8d60e27612bef7524 +P = ab65cd33302a1a61 +C = ffbf0ca18e0a0bba74afafce53e3b657 COUNT = 38 -K = bcd073e7a8e3d7507af295fbfb27ad6fdc262989be1bf9fb -P = b8fa391424f90a437f -C = 03585c95aa091651bf214ec2014149307880f7d73ea6ed54 +K = 723bd9613207e5a315f55252ba6c49a08a788d29ba9289ff +P = c047a263e44c7925 +C = 8ae6cb39c617a9b6f2af29776f1cab2e COUNT = 39 -K = 1664aaf90b7db1e03ce5210c05f8df809d8a627973616b68 -P = 87da4fee8f5438d3e4 -C = 7c38e7e8d3e195edef655ca1eda86217971048a28e750a12 +K = 726b137d51e4de4b3078b9ca2e1c71252733cf297335aae5 +P = 87349d0789dc3f2e +C = 6aaa6ad81350186f23c6b047812f4a0c COUNT = 40 -K = 29a53403e36b1122253c141176408b842a8633875af5c6c8 -P = fb194ae4f52b2e67a9 -C = c23a3856c3188db93e99fd5337773c696e7789d1c0286aba +K = 58b9871f8f7e588b6d17628aa5a3bb52af5d83f0a68a3a85 +P = bbe60ff619db1c5f +C = ceaa794cd9ad27a05df6990f3581a80a COUNT = 41 -K = f07e31b3556cee9db3a9c2ef134c9445d4a2c75bc224afc0 -P = 2723694c62ff45e443 -C = b98bafe0843a662060d4b66314b75ab3cd37d0e16f82df33 +K = b9bb2ae349a7f0e698ccb1f5515757d74d9e05d562439998 +P = 98f26b75515fe8c0 +C = 68b88b86c3602ff128b5657c36949f1e COUNT = 42 -K = b5aa1941b79fa7d4e1ff5a30dec5143cc255d107986084ca -P = d1311f3c57c87569fa -C = 66d732c341fc874866f90280cc60a451719b64adbb2c0968 +K = b5715e8b9133943f40a4447aec61e4dabebac8792d70db5f +P = 915a704ecc81f114 +C = bdeaf64aac4b2662ba1b8621fd09d394 COUNT = 43 -K = 02648d3e0a566b3a9d5273524a2c1c406c536ce81596d35c -P = a31eec5247de416937 -C = 50b0c469f81c37d7ae4f271f13e8fd6546f362175d760895 +K = 5662aa3b59f834dd948867016ff656df30a4b2492ae109bf +P = 6bb92626027b4dc0 +C = 8fbbf212314eb83840cc81926fd309bb COUNT = 44 -K = dd98a41b65dc5ebb859009730c00e1e3e4a7825fb5eb7d9f -P = 947504190ea404ce08 -C = f07916112cee1c719bd4cc54c3f0e2acee3f9dbcc40911a7 +K = 89007216cb7923f396a41d0a07f2d1de9852969601b11d91 +P = 20aadc31f9c306f2 +C = 56366e9878ef1aac3a4de42ac7f2aa73 COUNT = 45 -K = e4c60c5f3590859417557fbca56ec142d8e601e0dea8c732 -P = 467125e3da549eafa5 -C = a8634bfebc778628fb512b0d2a756d8ca1d61ad8ba67d5d8 +K = fd190100db1bdde5ac31ce69bee65ef7504c068bbd909e46 +P = a6ead9117b603a69 +C = 9459caae6f69cca430d465d9490208c0 COUNT = 46 -K = 6ef7585bf7b7ced164716ef780cff192c42408574978d6c4 -P = 4412b5fb0fe046bd0e -C = 25d16d204cb08c3667339183b4a1123536b4a4dfd085438f +K = 740e86cef6351ef533c72bca13a8b7bfedba1c4259f08f3a +P = 7dd37f9e5aeb0c57 +C = 4db534735d32f4ccc23b6bf7af58c769 COUNT = 47 -K = 39f7488ce5fe67ab3780150019c04ab27052a6fd802da58a -P = 2b93d19fdf9d78d773 -C = b9f3356725d777fcd5953dc1cbd6271d19bfad5ea90f851e +K = f7956be435d38067bc9641732d93c9258f775b3bfd2b557e +P = deffc42edd0bc3d8 +C = 1554e7b0f84d50e9da639f74c921d637 COUNT = 48 -K = b44b2b8de6b58d75cf27944f916a8d4167e11efc5ae9f58f -P = 55da86bddc4ae335ab -C = e6ebf5dd617e0f93c887adcddf0b5d0e72f80f366012c120 +K = 7ca4bcf171348cbed95050d5da578f7a76a78d184cad6d9a +P = 664c3738444f2176 +C = daa2c48848407ec75b41b930e3dbf75c COUNT = 49 -K = f43c6e38b6777b8a77eba38ae9c029f1893c2961ec31c4e7 -P = c01ed728aba976acad -C = e4b19e741d80cddaf1ed8337c67d34286d795ced83adeedd +K = 067489217959a55e40e870eee2b3d00f1da1d3e1efa80d98 +P = 0e316180a8a92066 +C = 59e4accfe695564025e26df33b6c4a1a COUNT = 50 -K = fd5975594152fc0612cb83ea2cb2f516cf39d1a5061903d3 -P = ca42e442134e54742a -C = 9433cfe68694132066ed2cd6bc1297e74c867c5a85cfa3c3 +K = 5e8490bea51bf8f15619b5ae7fe0be1ad84a40af37b13062 +P = f230d3b29a7ef492 +C = b1ee5e9743f14289537d9410ed863cf9 COUNT = 51 -K = f0b97a70d332bdb3ab1f4778b83feda4b686507bd978e6bc -P = ff300e271e86e5edab -C = 07e46da56c93b76aada877164c5375cb985da42b82ff9524 +K = 7f8baa4702378c0626d5e262675e2891eb5abb13603eb5fb +P = 3e0ed9d0e3bef76b +C = 82ff1a359b58d2b56a445113911caab3 COUNT = 52 -K = 6e2c70dcbefdb096ecbcd002e1b60ef9e26257845df02623 -P = bcedfd5b6a6e4f137d -C = 647a48e812eb77ce298f04e891ac213c9b263d6802cc435e +K = db500d1b235a870a206107b3d6bbad2e34b5faa986656504 +P = c3cfa17b2fffd3db +C = f5e87e2751540cf198eaa2f292e47101 COUNT = 53 -K = 6974273600fba0bd5d584c09fcbeefdfe3d38ea9ae59b83c -P = ab61d7b82736c2c7c5 -C = c24e2b9af9d596011ccdc214bbde5656839cb86ff4673fb2 +K = afa880ceb8d7a82c59e11eed083b2c8f8096a371ec737db1 +P = b53bb258b6e02017 +C = da18a04e5f26cc482f883cc78ae24030 COUNT = 54 -K = 317e4e68edb9576425d2e9f34fc5ffb95aa637a8c78430dd -P = d216a2f06e81318cb8 -C = 20c8e183ed3d88c73dc53700a3cccdec360047cd4bae55a3 +K = 9163b3c978cb3b25bbeaf9932ed621cc0a1630e690d31b8e +P = 40060769a43b0e49 +C = 52c34a217812119e92a1e9fb08ab9c29 COUNT = 55 -K = 1aaa6210a162b0d36c0853a8b276791e585da97be5f82fba -P = f39cc949ee64c64cdc -C = 2d581f3d14cab2ac85268239c6a25e9a334ff6a9c34215a8 +K = 5d25cd0b967388cfd2a68100acf3ef9ab4b65d00ff657157 +P = 671cc10dab86adf8 +C = 102cb418e1da02971097947296249a97 COUNT = 56 -K = c82f674d86e189a200556fa6f081d0abfb9545e875c77f02 -P = 2aeb6283e7e7b71eba -C = 2129083e6bc75cdf2bc8fb563ba2b7091c46f6aed887711f +K = 25e267b1e31b07dca05818cad93a9f63d278e14a4e79cc36 +P = ccf969285eb0db22 +C = 107cf5198b7b1c506aef5eecb200662c COUNT = 57 -K = fa85003f1cef7e6643685e752813d05ad2837d9770924e63 -P = 9d67367737c4f23596 -C = f8e6a8feb63f9095d4f4d600e6c42f7611d42514800d4418 +K = 1abb29747b386145ffe3451f7b793ba2ee57df061a7bc22b +P = 7cba90eae0fd424a +C = cd546a427bb52905ff5561dcdd73a7b1 COUNT = 58 -K = 4d00d0c3622c527eced03a77622f9e259cb24f3314a2809a -P = 34ca5a4101d837eb3a -C = 09a9bf6bf0fe7c9790355de442d68b301b92ff18d2f07089 +K = acce0329974b56170057f9b0a8531db19c15e80623206781 +P = bb45f9da1d8b10b1 +C = 202dfc1337e5f27f8484fb8d13f7375b COUNT = 59 -K = 86bacc548f55431b8deba78919ad1bd55891c96b276376d1 -P = b236f5e0e9425d9866 -C = 80903df23345f2d8d3472185400559be03c928117530cd8e +K = be4198a110d6289519fb7305524ff6646d9ab279accb6b81 +P = 9e0fca0f3e8a1c1d +C = e42884c0c857e31f183849e21dfe98df COUNT = 60 -K = 8bc8d056ab289fdbfe977fa34a10440814b3789430bb4dcc -P = 0360da02843523a640 -C = 99e5a1e9130b5b8bb28e52d25a76176cdcdba903282a21cc +K = 38aa518f8d1322a5fcc842260c48b9f65167ca75dea53522 +P = c1a98e990766e483 +C = a3edc6402e2b8c4e00ef3275e29b7610 COUNT = 61 -K = 97f9a0ba51e9ca7313ddd66132981d374372fb4715682033 -P = e62ba29dc53a700199 -C = 4732350d5bd22475869f78316c88c2557e50a11835394995 +K = 78340cb4cf977c6e1bac190da4faf5849c859edfd23e7c20 +P = c5424f3d72bd538e +C = 90d647461b11a65652d7a5f32e784932 COUNT = 62 -K = 47e7fa1f8a7a6dffc8c7a95272c6ea24dbc85bdb637e67da -P = 41e6b141968834956e -C = 6bacc0201bcf9d71d1b2fa46dc815cdf0f2ddb60a1dcd788 +K = 916edbab89312920e0c11777f2aeea41f000250c4f5c7c0c +P = f8ca83138e75236f +C = e1022b0adeb5b9aef194872d1c6a7307 COUNT = 63 -K = 3201b11c1c982e3c737de1a5a7443e8d8a7e39020e6ec93b -P = d0bda5021aa822c719 -C = 2cd1bc036cedf652e0e3fdcfcf0f09926b5645994da0326e +K = e8addbf8d57ef8bf794698a22214d127f21af8a844b000e6 +P = 7fe2f9c0a4e896fd +C = d6723f17982d295bff28ca697a0b8cdd COUNT = 64 -K = fb2713a95a970cf482215fa5777f46975b6fa5ad89746a44 -P = e8e014bfdac8e05d90 -C = 4ba71cfeb2ea401b72bd34b93536cf1dddb6a8e6f0541416 +K = b1ae07e52bbafc4e41cb386cf8f4152e7877c1602cd57b6b +P = 05aeb5bc5160843c +C = a711f7a358ef9e7bd6f6e982b05c6f9b COUNT = 65 -K = 98f0a2874aab6af4008ac5f532477ffa17760b7d506e7476 -P = f2a6d43182670de576 -C = fdeccca29f2d6f464bbccf19392dcb91baabbc55a8352530 +K = 78e0d6b28181bcd00d949fbd276ea02a01f009121b0c473c +P = a1f09e24f594bc0d +C = a849bf7c821f01e48b16c311d621958f COUNT = 66 -K = 5078a35c8ab0b1a7a5a73f5a677486a241695ff49081e790 -P = 154604b7cd5190e36d -C = 8dbf084b7595b60effda78ed4f490fea4d00f22d674706e8 +K = a011765c7d59b457e4b5dbf8fe5e63ece96ce7dfb88dd5f4 +P = 57163fd30388c1ff +C = 1b15965060d33e0435698302b9cc432e COUNT = 67 -K = f3538fb567df2af97566711a76cfdb1d3ba6741e39871aa3 -P = 9628f9d9c8a29420af -C = bbe81b5310ff06c03f97bf641b6406f1085d0b618a804658 +K = 9aeff8a6af87748e41bdbfc88ce7d95b32fd26fd46e67c96 +P = 52d1bb1a8bdb45ea +C = e02c85b860d628bba7da568bb83497a7 COUNT = 68 -K = ec37a8a29efad7c5b044e493e40f26ebae19587f3b087398 -P = 29c2b71ac4e7f15362 -C = 47c1db8258346b7ccb17d9ff7f42529b6183420dc4ce8083 +K = 5cd7419585357ac17a86097ef85af9a7bfcaad4035542ec6 +P = bc8d6a180691088a +C = 2fbb39e1745dd1dd082ce81e56b89c3c COUNT = 69 -K = 51c998c35447926d89782f20c5e0600e6a7e9548bdcbc46c -P = 7f821405cbc4886507 -C = d94431a0faf3c93a9a6a7f0308adfc55bc68fba205c7977e +K = 280fe1409c6e460c94e6b03f50a0debcd037a48a4d319607 +P = 70d714c4ff806d2d +C = b987ebd87110cb8a9003b5f5a897732f COUNT = 70 -K = fc34d2382ed6d89f982b4fb93eab019064a3d449c7f799c7 -P = 6cb648ec78ba72f079 -C = 1b7b3b715cd73101c22a060c0caaf4d2cab134ff198494f9 +K = 34ce3116f08eb2a303c22108dfaa57d971e73d4b09e73aac +P = b35cc8f593070593 +C = ea5c9154af8506d1541c5653abe71680 COUNT = 71 -K = c4266c68a32180206fa3dc8d9ab2392c4531061e9de59d16 -P = ecb7719856ca3f8868 -C = a101c8ba24430a0bddb054a273b0d8f18ecffd7e5339ed01 +K = 3aaaed11da30969e019df3a7692954149952828e07a9473d +P = 1ae39047296861c4 +C = 0870b60992f6a05aab633b04a229919f COUNT = 72 -K = 022a2bb60c1fdf07c335fc09ba90250ecc7efc52153abc44 -P = 9570271f4ea73f1bf6 -C = ec3d45ec4b9bbba82d5c2b9318020855465400bb1f6e5259 +K = dbc8003f21c037c409661dd7579cfe745688d013003dbb42 +P = cc586cacb96c74f0 +C = 9b845dd41c0245e5c1eddd65eac28b28 COUNT = 73 -K = 69565ebc2e098473180c69a2526ab6529c613a62eb4beef0 -P = bf072b73a01a42ba59 -C = 5664a57d6a084622509dd1ea847b5512ca06078803394beb +K = 5c9d87591314ff3844adcd754fb76038cda32cbffe837188 +P = 1a4dc4da61cf02df +C = 7da63a8ca03efda494a3d6d30316e39a COUNT = 74 -K = f55de253c93294fe9b960db958b49b10b62e655d29b932bd -P = 8a19f0591aec984b2a -C = e6e004625a3ebc93a41b0cec622f19871f2bf955baa2a5cd +K = 6f4feb824ece4a166b0187f5631d8bc00bc168aeca58089e +P = 67990b0322f1240d +C = 9e8beabad22e40341c92cbaf241df5fd COUNT = 75 -K = e2d7f7589b97b5e61097b5e18ef945e6216aa6ccf8050349 -P = d6e80f2fa1de0056e4 -C = 06f587a5cdaba7abfc84a83f3441ac7eb86c984557417b46 +K = e0cdc73f2195eaae1c2f62ee03f541cecc12398906ae975d +P = cb539866fa2f49a9 +C = f0d68f106187c98f8f32cda592093b6b COUNT = 76 -K = e8502c756632450584d24227cedc3f8c86db18c350bea3e4 -P = 61cc67a9c9b657c099 -C = 1c7debd0a509a303e52967fa12310d5e14305c1e4c00fc81 +K = 06c50008b12410a8fae81f145f2778513e920f84aacb3024 +P = 904eb2966a154fe3 +C = 3f6a67a1ce0974b6cd3ea1e3b0516b9f COUNT = 77 -K = 4680e4f9d9c3bfc8406421491da699c22df8d94bd2bc8563 -P = 85db3356a7e8dd3ebf -C = fd896554974c6c61a1f55154e9115b13966da80339ac88f3 +K = b8ee537a6d1c2eadb9f1f425b440f4ed2af2c86de5c2b9a9 +P = 205aed6ee5ba3c15 +C = a6dc7c4e34e86539498d967d223dd21a COUNT = 78 -K = 4013faaa1cc8556ad693e632d5b53e357328f9e3df902897 -P = 1eda8da80d5ff7bcf9 -C = 7c9e7f86281f84502ffcddca59c93115f5a2a4e41c92c005 +K = cd3b5a3011d514c4fc842c28161dc63f005430de870d4338 +P = c83e9d2650bffabd +C = 4540826bcdba3da30ffe4c732f5c5b5e COUNT = 79 -K = 81a51f85adc5070eb82e4ca7198ec858880387b785365058 -P = 2b2f36a212ca5a1087 -C = 12c3c6e175e22739b5e3cdf00d8c45c5ce350504900d3108 +K = 3e90a0b0c538c3537ecfc3282f83a7032f13a655c78d9d36 +P = 5450d5c373552ba2 +C = 0b2db2833f20742913c33e47425b191c COUNT = 80 -K = fdff0bb5c8d6152edc97ea0daf737154f5fe65e9d6c9eeb8 -P = f22588952eed0aa2b5 -C = 8333bb4c76a03299f0966e537bef0df9fa9f34ae53496796 +K = aab67408b15c4f7b8f10581933e731b74cc9d1592c9de6b1 +P = 8d177089648437e2 +C = c8389f3de54f3e3e54511ddf8cbdd21e COUNT = 81 -K = 0c0c19e22f2ed6d121111e89494815681ab30c3b6281c44c -P = 69cb8ff0335b2cb8b6 -C = beea2d9e05b2bed690c280845310342320c0744431addea4 +K = c829a1df6fd66a6e294512d9b25b4e071132f959367608c2 +P = fd3816e8e0d5827b +C = 86905313103af0c29433572e8f397e7e COUNT = 82 -K = c836001dc77cfc71a26bf72cf000d498d7501b4919c37790 -P = 0f2df6d955d99478ce -C = a6d7ad3c3a3996b92dd3a8271b55606ca01a566613f101be +K = c8920abd99db64b3a7c74bb81601726232f4ac5adcbca26a +P = 886432310d8440f4 +C = aa01a48283c3780b1039ff1a39b59e1f COUNT = 83 -K = 66598f95eb13ab42b04f66a9dfd49985f92fc768d2c8eb8e -P = c84c775c68a83ab972 -C = deb4efc15f25c3a3c4706c712fec619de9bba7234a8a0b16 +K = b561b758c947041eb6449a8a8f340c749cc1f41b0ab99cb4 +P = e25e097738bfb929 +C = 0839918e4d2ce9bec31939068b89962d COUNT = 84 -K = 49d47c74a167b57beb94e6d2bc387b401d172b828a7aad3e -P = 88f864862fafa172e5 -C = 29f84e858cb3c44018cda82b7d4354824c834c8d5a681542 +K = 3f4fdc96364aa7d4bd77bc553a84ab16c349cf309c4d4077 +P = b3a2cdfd319b7488 +C = 2a42332af38aa17d38253ed71d057324 COUNT = 85 -K = 9fd66ea8280fbe0513ac44e9c7326557da5b63620a9194b5 -P = 36fbdc4f0a9bc29e29 -C = 13f53bb7d814871a1b60794d8f2035cd84b4d578c10195d9 +K = 69ff3f5fcee1baa341539619a0fd405f09a9080c28c50f09 +P = bb7b661644dca0bb +C = 5a83dd1f26c495832dcf8352534ef9a1 COUNT = 86 -K = f6dbf4b04ad17ff756669421a534166f89c28fa5871e99b0 -P = 1711ec8efe1041f4c4 -C = a740436a0d71b5b3b75ee30f7636822b1a0b5b2f2de34cc2 +K = 2e5bfe6168be568bbb1665846ae53d21b6d060860358b30b +P = 5c779e713901a2a1 +C = 1d59ec255b6e00c81c118101b63c2984 COUNT = 87 -K = 2acff692a2a47a5ce78df805a15aa0756d4dadf3c044e16b -P = b40aa0eaea145ef291 -C = 217f8b6bf7719a77e8b3309d4d610ce45f0d24b89b0fa53e +K = a78b3d6c28ace84a710b1d4ea681ab99ba658f33bac60ab5 +P = 07c145e57290881c +C = f200fa80a32e5e5ad0abcf146abe0168 COUNT = 88 -K = cf5b1e4334029476f576d7637b86147c71468fcb95fc348f -P = 6d82185cc6cfaf9e63 -C = 02711ba24d40b57c716b2aaab0d0f174534fa242dc88da21 +K = f67692dea57fbd8ad5a8af6fa6c6c5267b00f6c05fed0cb3 +P = 67d711fc50c78fd1 +C = e5203ca824eedae279c9d22ca564faa6 COUNT = 89 -K = ce414df65d85dac5114099a33c95e0ef2f197524b343a264 -P = c89de773d49d057544 -C = a8f041cbccadbf9577025e250119135e3a4aee77e81f2173 +K = ffac3ffffe550a15ff5f8018f8dcab2ee7dd615b0d1fc1c1 +P = f2a65b210811a99a +C = a7ae808964f2e03cbc671d3730a6c9a0 COUNT = 90 -K = 42f61923290418e438d8c009830cc16b5476a95e0889c8ac -P = ab2a1ef106d84a1166 -C = e5bd0826f0b4f9377dca224354e24244e1c86cd6a167b8c9 +K = c6b4b6eebd8f18320f5f66b733fee38dad5e383d95954d57 +P = f1b14e74a5d0872e +C = b12e52626bbf883e0d4a1a1c44ae6c12 COUNT = 91 -K = 88e8262550aa8e793e38dbeb4f188842a9b7fe08a13575ec -P = b884f43407ae5a5769 -C = 831a68e5e8a7a9eb07dd56c04b26f11760f86b9e2769e079 +K = 8dec2b86122991b5a7d703d8a4eeec65bf6fc8ed360eb552 +P = 5a631a5d979baa07 +C = 2f2e3d6a2fc6751bcb0bb65647a0cbe4 COUNT = 92 -K = d8f38cc0654ca8405a9b5a58cdb590cc9ba0a1546100c63a -P = e15e2152918ba4f475 -C = bca89c0f4e44e66846551b84d073713cb6c2bfc0e770e862 +K = 88d31c5336b51aa469266249965c09888d5c7dc2bfea0612 +P = 39fa7e0c3416473d +C = 2f6f3a48a53213cef1e20ed8bece6bf8 COUNT = 93 -K = 553b7aac9519b83e6bd081480d8e1b59f829cdcc8b63a224 -P = dca091df83bd3297de -C = f8fbb5ef7dc8e1355b017cf9ad636f1549ca580c12a05af2 +K = bc722cd514ad9d675bbd89b13032faab6599dc5e48a23f7f +P = a338f32041afd587 +C = b3caf54a40eb2ca9acc1faee217c9a54 COUNT = 94 -K = 217d844cb5eb32406bee0ab5738364f1cd7068fdb429fde3 -P = 602d6e00ea92d71702 -C = 071c42064e94a1e0557e92ca2130f476da0205f3657a1a4a +K = edc2bcaa2dc29831cee819021448fd47e362a21a4134a8cd +P = f8508d95a1e15b48 +C = bc8faeb8c6054952e27c59fbc567464a COUNT = 95 -K = b51458bc56f01f3f1c09f83792a79442be430e0a8056a7a4 -P = 6fc22bf9cbab310e20 -C = 22e00e9ecca4e0c8f790c8e0b40ab05cb7d52db24131f98a +K = 8a47aa81442649d00cb2d971de336b1e2db546e76c393e4a +P = d966fb21ecd57442 +C = fe4ad5150e1a8d159b96f085a021ba5e COUNT = 96 -K = 1e559c321ab4bfa55dc01b859d8fe0b419817474b4357d75 -P = ffd4be7d3b0de2b40a -C = f874562b08f5db0d7c91f13c452574bf2aea944bf1da16b5 +K = 66c1a30b7c138ed42fec83553928686618cec36a6ec25c61 +P = f3617dfdf30eb049 +C = 0f1a87c0d9abacabc78a6e6597e250b9 COUNT = 97 -K = 65d3b2e59cca54d11094f2bb549ac04caae999ec37418c1f -P = 6cd1f3638fe98ef560 -C = 279377a3917cd6814485202a3b6385264b8ada249ba1b15e +K = 59cdcbae68e3681fc0544b6528fc3f07ab8f4b1f958d9244 +P = 5eafd80fe182a4d6 +C = 6e9d676b41f83e0b74d72fa46a953673 COUNT = 98 -K = 05f5546ca35ba227d43e70c2ff8afd055397f0dedfee6fa7 -P = 2f10bd5247148c15bc -C = 4c05484b6e46a180b74d060eb45c827017ba07b689a458c0 +K = e3510637ebdb3ea62aaee7f5914f9facc081ae71c12962ca +P = 16fe7d066cff9684 +C = 0bf86ab1e4389f49678c7df280072364 COUNT = 99 -K = f4e7971ac2d69b62465b265fe56b4e00cfb1f4fba1a20e5f -P = 3934731532d577798c -C = 08356e7014c426fbe601c4ea16547e165e6acca56db28a1b +K = 40c0701b987ed87740f202327cf8a8ae059420cb38e09f7e +P = 068fca4f4f6d8c96 +C = ea6c767a0ffa46c99853eabd736b8e0d -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = ef3b14115888da0367bf9b0f98c5ef4850ac9c447be7dce6 -P = b25ba82a -C = e3f111748173ee2dd8ec29c116cef2b1 +K = 9464f1af6aabad076661328bcfd15777da16a288a2660009 +P = 431527c3a644c106bb +C = d9b257b400d808a0b0386af3be9154fc7f2fb2d7edc06201 COUNT = 1 -K = 2bd7a0a32719097f24dbf0e283dbdfa6b1a56ce79b94054a -P = e770c7cc -C = d2cacd7f66c3c1044a2ff3f6dfad1647 +K = d2caeec2846c64c233d304f3f9191abcb763f44d7a21d510 +P = 34c73ade15edf2e82a +C = d790599e8752452f1160a1b7651ab26765b1a736000559ea COUNT = 2 -K = e5dae522b10ec07e0dcf70e75965c154fd930a48beca4d1c -P = 336cd662 -C = c2aa7490b2b0ae7687abf12d401c0ec5 +K = 0dbdf82373ab7acc339fa12cd1f8f44d80ae69751e57ddc6 +P = 35a4727f601f949e32 +C = 586a395123c2cd46e9cb11005996571b0b0ec989f83123bf COUNT = 3 -K = dc5f68c3e88356160d214be921a3bc8678ba73a0127cc3f6 -P = 66034b8c -C = 0153807d3f283650c85b27714848de09 +K = efd20d76b2d694042dac6ed7b88777a61ce0535db4b958bc +P = d7635dbb696e105830 +C = 6ba0c4fa920f0a05d4b988ba2a340e51f967cc0183ca24b4 COUNT = 4 -K = 2e7f1fa69d9331daa271c0f2f7f555bcfa6d1c6abcd066d2 -P = 34580a42 -C = e0ce724a9461e9a4564f753142e7586e +K = f8e73772f2f77211e9462c95969bfda8544e1b9e7b230ea7 +P = a3de375a9af61093cd +C = d620d75bc192441ea1ebd57dc3ed03e90e0092060b8f86ef COUNT = 5 -K = 9368eb8e11610f434407cfaabdaeafbcabc8eb161aa62667 -P = e7ff3d9b -C = 150e57f18037f16b30cf58822e8d7ab3 +K = 5a4fe6d31867c41abcf9127c21aa139929a309baf5089532 +P = e98b0ee0b9fe8a8707 +C = 3ad99780dc1048af65f77a92615b919f56153d7a279a5819 COUNT = 6 -K = 782fff5e308c09e1e4bd4df18f541b9277085fac9fc7e7b2 -P = 3e36bf78 -C = 569e8bd50f22d51e90df8655109bbe60 +K = dbff84b73e659f45cfe6e8906ff54b4073a1aae5d93ff498 +P = 334fa12e01b2648538 +C = d7c49e7d8c24e45c8e1b179fc95a93751833d002979a0437 COUNT = 7 -K = b4828499a9cf502c9ba03073734417ebab057865048e8ac4 -P = 6afe6412 -C = 006523e3be69be9778d31ca2b1b63a01 +K = 942f03376f5ba557b7e7a2e06a2f0b6de8f487c02779b4d1 +P = 7123ad5f27cee77766 +C = cab40b669fba5e8b23a09baab4965dc8d233a48ed9fcd040 COUNT = 8 -K = ed23819e03ea2f2faf6fa56fc89cd443a2a209ae430885cf -P = 166f481e -C = 3daa897b91870b45560202097c42b2a3 +K = 013202e83a4fe68b6bcadcdd48acc0be95173f743fba31ae +P = 6991f81920f503d28f +C = f77b551b3ec123cc53813f9995650243f8616473fcbd1b27 COUNT = 9 -K = 7381f055050e7723a79d426c80d2043197c2a8d51016ef2c -P = 69cc521d -C = 32e6459e7e686cccff6b8add3029ed78 +K = 4156aba0ca65cd2266e27584e7d5507488068d37377954d5 +P = 85b664d431ec4ac492 +C = e5a283b1451515ca38bb9b98e8bd73d4564436e44748c4b9 COUNT = 10 -K = 491db911af1b221338049352b5ed6f43e9ca982bf4b7b994 -P = db724a30 -C = 4dd6d8b1123074f3a905ef81b7324fbb +K = 8addb4403a17d342e1584b1039f2f618c8ffa28e3673ccd3 +P = 81ce121092fd24c4dd +C = ff4522a918c977eeb5f719125b8c38722e145d3c2e2444ec COUNT = 11 -K = 31a0cfc230d44002d0d5414274dc69200fae142bbc0a8b89 -P = f29aeb56 -C = 5923946c4eef5d4e0aa1e282a79e712d +K = 0e5b1f0264a7f65bd198cb0b7d35d1a42c89d9d376a56601 +P = ea8108a5b128c1b622 +C = 01add302728598d9c22e5587e72c6929a63925a2ab59c791 COUNT = 12 -K = 7a466a5afdd42f940acdf1da430007113569686f3c682bdb -P = 167132aa -C = 50c2be9e8bed960255154d75fddf8f46 +K = 1544efa4169ba24ba94b092a9fb7f39343421a291bc76df7 +P = b11be975c5a73a81b4 +C = 4fddb9b3be9276f19f4dbf545de70c327b990a133d0acd16 COUNT = 13 -K = 97431e6bf8a55ae07f8120dd88ed380aba87af3ae1e91235 -P = dbaa6abc -C = 195864b55c3048e60145513789b4dd62 +K = ff5b74968e6119149ff2c532f3c10be412ed12c64d0858f3 +P = cf3861d6393607a715 +C = ea40b3865b877d302fa08d677cd3f635c6745e5f8c5aa9b4 COUNT = 14 -K = b274ead1bc9c7d84256c31a704c290462bdb77d810d2f906 -P = 5362634c -C = 33eb24a60459aa98aeb34c15280100fa +K = d9dd9da3de015b1d278b1899b95665ce52d1720a7593e0bf +P = bf6caddac472d01517 +C = 311e83c3f2eae33174e424a7b83cefd34c98a9109f1ad764 COUNT = 15 -K = 5c4c954bdda50a1f68818dd4322dca96943b5ba88fb55850 -P = 02d4d1d8 -C = 2f055a1daf5d298e6227b55faf09ad27 +K = ed6d622e5400692e6519e37f7ab7634da00ced95135cf987 +P = cf373e68f45ea4cd9a +C = ed3e311b7abd457e114b44b5f9d55aa714c175f086ba3642 COUNT = 16 -K = 6f34d6e258df50fcdc7d4643cfedd548ecc0078b13b89824 -P = f77e44f9 -C = 482ebc8b0592adcdcda29df1594a4374 +K = 8b62f966d63e82847196c3c6579d7dc62ccf65e5a0bdd57b +P = 0f1daa58503f8a4665 +C = ed501f539a8c68fe65f16f91893c0347c574c29448a89e29 COUNT = 17 -K = c4084bd2276b64b8815153e44d3f66af2ed2aa4cf4f8cdac -P = ccce2297 -C = 45725b87782a3af9113a51ade9f25a72 +K = ee2f8096309349fdb203c98b396f0889b531751c6d4deb68 +P = 8d3fa67919d14784b7 +C = 63939fff130b6cf314d479bc27d66fafb59cf70bd2938012 COUNT = 18 -K = 3855d7715f62fdb29a249376be832cfcc61843fa32f78343 -P = 40267853 -C = bdd48cc7ae9b5d0734d7c2c5bf232f7b +K = e839d36a53d96d39a8ba8f2c432cf373bd22130be0b6c179 +P = 8fe378f89ff0926f80 +C = 2ca749e27536e954b7164001ed338608598c528989069483 COUNT = 19 -K = 4e30e56b95ea0931bfdd51445b320ede5d0fa4cc37bb677a -P = 6d59bcf9 -C = 2bbe26e37f3ed942b6bcf399930d7105 +K = 4c664c473f083bb88d76af542fae4efbd6ec4fb3971f3b4d +P = 2c2d7ba03718c59506 +C = 7efd8e0e87f09f14fd47025742ee6c37833789d3de13673f COUNT = 20 -K = 1c74b3ce78ad5ea0ed67c034b53f111da20c595fbd15e59c -P = b525f60f -C = b0513841167c9ed9bfe113aafde11f48 +K = e7f854b0b5b63e5b3db23eaf73dc6594b692f1215eabdfbd +P = 3c2cf95173b993b67f +C = e7d00d6e514c4f9f16a1dbb1a2ff0a149b32fdb493824d70 COUNT = 21 -K = 33ff589bc278094af3340845dd63c7bd055df1a8c71cdc2b -P = 6d840939 -C = 496e67390b9266be0ff19dcf50b332fc +K = f6d982fa270c60804d40c11641cbb627e6e7b7b9fa02a65a +P = e2350014a1da20a8e3 +C = b9b93e4b7bb80b7a315d33c77edd16aa0a899d11a7fbe91c COUNT = 22 -K = f7dcd1556cec19a9877d056835f5e08e1f48dee38295444d -P = 227f0a70 -C = bcc140fecbb18ab8d148e01614d5d4e9 +K = 557dbf10f52e40f7aa56c9dd37ee170e2abf1cf634ddbbb8 +P = e103d26d216b101404 +C = 6cda045966c2da1c82a76d5554a8b0e0b8bdce5d9a25663a COUNT = 23 -K = 5879d57ebe6f9317996519b34cc5eb0467d4c00501435f90 -P = 46264778 -C = a3238f3f11f7cd08d1a3904de092d735 +K = dd020b429f8ec98349ff9d583317733a0fed2dd67d927ef3 +P = da1951d736a3e29372 +C = c51e1e77d4aed1e7a1107830e3952edefbc29768df877350 COUNT = 24 -K = 31d3921761b527c0695d980a63d3d8b2cecbc6ca695c3373 -P = 32f35226 -C = 9886a08eb9ea40025bd91bc7522db73b +K = 24e3105f7ce1104ce7a1b4556e95eb5a9f886e9d141874c2 +P = 56c30607d204e50200 +C = 91e7f7321d9d5c17a935bdbe32528284e2272aef94d75497 COUNT = 25 -K = 82d72cb956ed7bcdfd2e47b715dbf2fa6dc86bc2f3299663 -P = e60a5aec -C = 91a71f64c4bf2d601dba66172d680cb5 +K = 37756da8c49724d16eae4d7051fe16a54fb90908686e938c +P = 06456757cc08ef829f +C = 8f6ce4c39a7190c2527da9530763c7e82bbbdb00831d8394 COUNT = 26 -K = f2d4625d2800b30a2fb8a40eca9836ab28c2de3a6e50c445 -P = 70b66ffa -C = e1d9a00602614523684da8f2dfcad861 +K = abd7d299a8a80841a93250de8c3409bbafde3c0f5b8794a8 +P = 5062c6bd358ef402c5 +C = d89fcf9d3fc4bfe632ded62f7cdb2841c35f3a887d713f7f COUNT = 27 -K = 85727f472cb7ce053dec92aaf248368ba9d381e8be5bf6b1 -P = bd3bc705 -C = c39efe18b083ef62abe427dc4e4c25d5 +K = 054838619586f7535aa8a762f1b9c8578eee8ed5d13c3279 +P = 58b28009259f0df2ca +C = c7073eea05f3845240d818438044b5e023ba7e4c634f0ccf COUNT = 28 -K = d2507bc4b25364c5efbd477dccb655941f953343f336b820 -P = 95503c97 -C = 71781075e1854b36e4675fde25dd872e +K = 00e5b30fe404f11818c91ff4b30603b0a27d52e22076942e +P = 199339a5202540d2ef +C = 853669f92235703918fc6c1ac5a0e950d706536a89cc5bce COUNT = 29 -K = e0c96c9b2924f591a39cd4be9ea70fb97ae1ba40e580484c -P = 0b534c6e -C = df0061ab3bf470afd532ee0fdc2ea3c9 +K = 54623753e5e66e2b06be910bd5a7112cb4ceb3f33d0bab06 +P = c38eb6be6ce6459573 +C = 4249be290619b777b1e6ceb306af00d38d1ba6ccee6f7eab COUNT = 30 -K = b6bb78dc51a888e381293002a2a4ab1bf3abe6ac9da969d8 -P = a9f0175c -C = e92d677d4338ac6adbfc62918a0ae500 +K = 840521716d1feb8821a54de5d474f97a17cc416f2c7374c6 +P = 8ac744354be3357a82 +C = c359518e3c0aeb63af6d0d3c29c00893837754c7d9fdcf81 COUNT = 31 -K = 2e1dff471d951a1365a7c498a31598c6fee2281ffce5be2d -P = 751dc221 -C = eec13e2b47e246603e2c4c0c8dc6143c +K = bc8fe1e8c79e95406ed7faa0345164de39adcc1dd4fc4b6c +P = e6dfea58100cd4ed75 +C = cafc5550aa7a493de96e89554ae857290c9500c309731422 COUNT = 32 -K = 1247e6cfdef4ab82aa23494ca27b557dbefcbdabc39ff643 -P = 855c7d1e -C = 2cf5d5f60bb6ed5dc0e94590228af87b +K = 41d0d84d38f39638e3065a609fc7b6ab9fa4b7bd1e041be1 +P = fec8722f0cb9ddeb53 +C = 2dd953341783706bbc3a782e7f4cdae7f1b32065db19bcca COUNT = 33 -K = 28cd612c1523d856a34928d7c3653b00f1075445b4fa79e3 -P = 496f50a4 -C = cd4fc75d32602234e4d9ab5f70d7872e +K = 3cf006c36f2e40f7526613669cedb594dbc8b930f9b69d41 +P = ad30de964ddf76c9c4 +C = 1e645cbf6a3cdcf8f4b1a0522b15bb20b2ef72645762c4c2 COUNT = 34 -K = c20ca7a045e2034dd274a7afb0c7b03b2d2194f9ac5f80c9 -P = 6c6a9c23 -C = c8ad929f13f9ff6d9ef4bc622e8ae1de +K = 6a593fef51c11940f2535bd5b18015632086f3bd888479c5 +P = 3dc5f6d2327ea4c328 +C = 614421e3e94179e4ecaa6a0b76857901745f5249c685668e COUNT = 35 -K = 962eb384b82f709ac3a68dd60ec707ffd1e815341c24d9b1 -P = 17fa45b0 -C = 6af0700dfe386cbaf61ba6fb7ac8c41b +K = 3a757e3e708d575e10e4e96cfd822c0f5e06106cc87ab319 +P = 1c7964d91c1504089c +C = 0846ab36ed55b9f59cc057c1228cc9c115b6640c590c8531 COUNT = 36 -K = 5fe78870ed31644cdbdd94c26ec9c2781107793d33728e49 -P = 5ebd79a3 -C = b8c97afc8ebc27eb7aae0677917a45dc +K = df4f24e18763746d2c5b0618b1ea2757c401b2a7ef2b9ad9 +P = b44fd25189aad61e98 +C = 9506394b4c673e2131d9be6c82665eaa4584f3fc0e263324 COUNT = 37 -K = 2f2f446baff2def7d5bbabd82e44987771540635b66f1f1c -P = 8118200b -C = c39ea776fe32ae6a93b36f3908b76f58 +K = 4b1cf67ce05663f95840af1f400973d80011095ff67d4e97 +P = e8c39374c8f035888b +C = ea10100a8ef519d96b8bd357b4a0945ed83d69aa74a51abf COUNT = 38 -K = 0aaf0e6b1e5d292e94b77994652862047c3086b9d89b5d23 -P = 85801f1c -C = d434efa6c40ac63efaeda90b0ea60b41 +K = 905df64929e08737f72d648f8f7f7beb529624f54e2a1a12 +P = 123bb2288e51800db8 +C = 28d7265cc90f384e6f1d1605e2d58c21da2ece9dffede514 COUNT = 39 -K = 0b7bc81545f5037a6779c4908076d40569e2e10ebe454b94 -P = 264d8e73 -C = 5ce83980f5354978601c5c5f6bcb50c4 +K = 846d39ab0fe533dc2be6d245a64f3dfda91b8dabc5b6d3c9 +P = 1a8c32626537d61134 +C = 06ae9e4c9de9f89139bda165846034f93650bc793935d69b COUNT = 40 -K = 3cdc2f0ef08c05790ab6928e12f63c8d8118b2295f8a3eee -P = 67ed060e -C = fcfc3aa807cde9961c640573c47cae3f +K = 2ebce08bf0378a96d784898dca375525ff01df30e6b853b6 +P = 98141b4ac30c1c77ff +C = 2e4bbe0b575c9eac5b288d45bbae0be8c708b867cdd07f2d COUNT = 41 -K = 1b140483abddcfe9def303cd85912fda2e4d5a267d92bb5c -P = 32c8df7c -C = 588f73a79fb114fad05c084545c54446 +K = c94f9a8310f12b1feda4671769991f33cd9e602647660bcd +P = 65bf1dc17d01cb8f15 +C = 5becfe68631e1368667e52252b70daec7881a21d85f62b95 COUNT = 42 -K = 991c78226509c196766b6512c81623ba2df89f1af35408f1 -P = 57b25d75 -C = b70bb459623b7719c4eff4b5cd1b1688 +K = 45fc993a6b3452f17037fb8b6d32b46a34a0183fe503fc09 +P = 6116e50dd74e5a5b96 +C = d4dd1b126d2db3c5597b2577cc55ffe42172f73bdbdfdad1 COUNT = 43 -K = eb1ba1146b04f0b4aa3192a8299355ddbce0601d96ebec81 -P = c3d77c80 -C = 272a04a54e53006e65866ef23421d8e5 +K = 9e58b06e5696db4b7b49cb4f41a3c12b971e602f198b0371 +P = ae3186ea4b3b921910 +C = f9fb81fa0f623da8c3a04a394c9d31980968225402f8a58e COUNT = 44 -K = 7f20281a74180b83d02bda2159c9a031f9453e3d57d353ed -P = 4d6098ab -C = 35fd8719f7f51851ad18202fc69b9e21 +K = 83222085cbfff16367e5499cdc9c7c5cfc24ad6173c32a63 +P = 50060c13db03fa736a +C = e4f500530ecb530e7d4d0ceef8a78dd34f68e7f2c8a3e304 COUNT = 45 -K = ce15d6be1dd5696d1f67b82b94cbcad37cb96843dbb594dd -P = a6b81729 -C = 296e3f3dabb4cd4245adae696b1fa2a2 +K = eec164fb30671832ab1660decf71e15c4b924f7f9402bb99 +P = 110106ea6911b0c4ec +C = fe0b5dce6cda0f939f5bd504e45c93d8f2a922e0aeac4f25 COUNT = 46 -K = 86c85e9c6202e11af5f7abfae7b80e20848f5cd2b8f77b66 -P = 144a2e87 -C = 41a8644e83bc927f9c29c1e299f8fcc4 +K = 5234ce5086baf63579842740c66d9d10724ec0a445170597 +P = 281a8a816c2a612136 +C = 84a4af6d89e3d23e2141a35d9a617e2a424659b55a13e157 COUNT = 47 -K = 3466bc2dfb80edd8af29a80468249cc55c0bbe1c99c1552c -P = 3e2bbdeb -C = 2ac7733a251b42e938513c538ffe71c1 +K = 1dbb6cac98f0541e7f22263656625386b3ad15f26d6a0200 +P = 644aa54bd8448e9209 +C = 1e2447704f741fea8f10d7549bc3eabb7ccddca3f30d2613 COUNT = 48 -K = ea2114bad3a0421f286699e5edbf566b4067e518bfbc51cf -P = 01819629 -C = 2298326392ff26797e00df44e41fdc19 +K = 4105c64d8c94ddc538dfa1102458fdc4662e364ef43e6a84 +P = 89f25e5f8f7e7094fa +C = bbfe3deb556853ef850448c228c11734416d5e2b6777dd68 COUNT = 49 -K = c1be7e848941b32e5b718d1283b137906fc5277af535bb16 -P = 6294badd -C = 4e0d73d2e17fb9872fb5b3d1cff548ad +K = 17de272cb04f6b604e201374f49f5791e4f26c120517b74f +P = 563965acd6d316700a +C = ad75e05fadbfe509a70b780416705335bf0b8f49a221f575 COUNT = 50 -K = b6d6dc11a06d2cd5ecc18d54a989a153e1e583154f7a8215 -P = 967198e4 -C = 231fb1714eb48b3e1ef2c7d1feef2f0a +K = ccc25ffebb6b96841635662050267fe86eaf3ecbdee6a74b +P = 13ea6b19e3108cce0f +C = f572ea74e5430a1d38cbfc1ef65b60bf875653e5e21e617c COUNT = 51 -K = e379e05670fe80a3fcc269b06a2d561a8c73a6a581c40b23 -P = 97242829 -C = 01c32d33f68425c77db41d93641b0b5b +K = cdeafb1048a5078ed6a7d1578c9f9b9ac561e51efe9d23c6 +P = 86d238afbf302d77f2 +C = d8029eec187c977970884ed31c913a160a5b3f00e6c15a45 COUNT = 52 -K = ae1323222ad227b834e9ef3331f1d6070a98f658d07ff2f5 -P = 7629fe19 -C = e87c075f2eab3066ded92bfdf94f9ef6 +K = 50a70a9bd49e0bc25ad92e6913296d5cc6fa94eea734bd1e +P = 06eeb4eebb0685a08d +C = dd7b132e96dd513a72f86d4215f88c606455ec56d0b67468 COUNT = 53 -K = 391f0fdc849e55e53c9037602d07abaa5e64050d483bfdfb -P = 24144099 -C = 3550787ba22f0aed3c00cf98bdb3eada +K = 290a494c69bb2c8b3c3fc2c30481a444848fc374d4279034 +P = 74ff069976385c6cbe +C = 64ebf479b70d708e38baeeb7eafb12b7fe0e302186412ff1 COUNT = 54 -K = 19c42b9a0c0e153f7833fbc0ac4f6bbf61cffe5d936c7a17 -P = d9fd23ee -C = ce2b071d0090c09069b243d53a2d3575 +K = fc298f325869269654f82974c5ed1c5dfd1fba837240add9 +P = afbe96ac4e10e64b02 +C = 5375a845b24dfd59e6c2ed79d220ae44c59228779db949c9 COUNT = 55 -K = ee4dbf820bc23d9557dcee2b608c66902b50260d02809671 -P = ba606864 -C = c07aa9a5861f42a2071ed9212cd7b71f +K = c5a8606762f1a60d3f13f681f1c118ca1000d075796b09bc +P = 96bba846b96e0cad43 +C = db119d1712fe2cac9b775673e06f5b965837d2ea122d14e9 COUNT = 56 -K = d7e73cb22d54ee33cbf7530f877d7f828fe8a2e1b94a5423 -P = c71c0a32 -C = ab55fee86754a5de49b7b25e7b91df48 +K = b19760175ebdf092beecadfc1e2d63211e46449e14c97387 +P = 59bc542cccbc70e065 +C = f846e2719e4c0a56ce652ae0e495125969c52520b5399976 COUNT = 57 -K = ead555352e2c09db4e88ad2eb6bad94969c287795657d355 -P = 14c6bbf3 -C = f701a4a4f2f0fa08f596136079b06ae4 +K = 06016b27129d33a2b06a4157d1c3f0e1596b7cb7eb394563 +P = 05fd6d7e38efd4135b +C = d137accaa52a4e826a7dcec0d9529146fa16ac6743d900b6 COUNT = 58 -K = 40d182a1e7571b2e4bbcad83e62f73ee6d88cd00e578a697 -P = abe5ebeb -C = 8d3a125c42e1902c82c13a16159caf65 +K = 1dc1bd1b0e2a0ff6161336fb69fe130e3067efd1ae88a656 +P = 175ef5ab127f37813a +C = 6790da91a778ed4a6c26b3b867338f2c3335866535043b2e COUNT = 59 -K = d3b010cabe8c32519cb0ce5ea287d561ae699f884d0bb2ec -P = 00ac55ea -C = 29e387802fad06c0b5380417ee5115b6 +K = afa506e5d21711fcbebc176783f73cf083f15d27fb2573f8 +P = fe86f38cabf6da5ede +C = 12050d210f3bbe7dc17e964e9eb076d76d3bca0cccd618b4 COUNT = 60 -K = 78ece05146b1e73ba17f0189bf767d7165e3793f0b817174 -P = f6a6cbff -C = c5ef89de4bb7ffb4b489fedd2864ce89 +K = 1fb033241909852a67494fbd651e9e0dfb9f811cad566cac +P = c1fd3d5f70d380d056 +C = 6515738412d26ea80a37690a401a3100d8a7bdfa0e0b426a COUNT = 61 -K = 3e2fe1595888e6b75036e23524f9b0573624a87244379f61 -P = 4e629f7d -C = ab4a523983d1707073f7abb9230749aa +K = c383e9f6241b117421cf2be4c5e34852139892c08f2e0050 +P = c40e3ed6008d9c9376 +C = b4e38a946fade30092af01239bd3a9a2864550c5ce16ff7a COUNT = 62 -K = 52771e8f14852c2266424b82283b15b645bfb5a33bdf4fdd -P = fadf66b6 -C = 12f8d1168a94bcf34648b17ecc0b72d8 +K = 85f4b1bb2c74e3af922d365277731526dca560b7dd5ffbb6 +P = 70a175e085adfdd055 +C = 1c3b42f69b229e8f2147f47735ebc7152fbbe6bd1e915d44 COUNT = 63 -K = 7510ceb288ab5d7797500338401801a822361efa64450ba3 -P = c6e6cc9b -C = b0c81b7ea70bfd916aa0d2cf7bc37183 +K = 95d11a674542bb97525d64127bf35bdd76e81eff7d00cf80 +P = f58e389586b042eae9 +C = 36959d368a552b3840993be68cc839de959b94a7c72da4c5 COUNT = 64 -K = 07f301df0062113d69c5ce78973fb85f9b9f6471ca39c153 -P = a8e253f7 -C = 6595b12e8e809f7dac40da15bbe06751 +K = c391fd635a692e8176c4fa7a0f67a3b159952c6d45fde4df +P = dc8b0db7b31c746a7b +C = b850acd784b75e4061cab962a6459ea48f4778a46fdeb5a7 COUNT = 65 -K = f8641035f658390ceb3efe218c19dab34a3ee8c4a935d431 -P = 74324385 -C = c3cd45d7bdbb7b3edcb17dcfd2f383b5 +K = 1bec826e6d0c8da3e93682e99601402ebb94ffb84a69d79f +P = c1a885f94dc5dc225e +C = 0775b65b076c7c58ca49ff4d9a8a0b31dac53cf5b56ca282 COUNT = 66 -K = 8c6c00a859b5780d0b3e9024b045c79c265531e8cc5201da -P = adb13282 -C = f97a80eafd261931892eb2e56c078e2b +K = d207e57959fa4bf507db00c73cbafc593291a368f599f4c6 +P = 2e8467759a2d3717e5 +C = c85eb2bc9409fb26fd52264892bc4aaeac54c7fe17467641 COUNT = 67 -K = af548d531357da045d4213fc436432892e402ee7b62ea90a -P = 5acc10f1 -C = d84eaf19f558511139295316d657e75c +K = 788a353eaa4fb0abd63a0c2a75e21439bb1491049e5a4ec0 +P = 92dd5d2e7fcb0d054a +C = b476f8750ee68ea098c48b256b9dc335c95a8a6150484c5b COUNT = 68 -K = be595cd9b6a958c1df3715fe0caddc8d49b33aaa0d84df3f -P = 800c9b50 -C = 7cc11395736bd77241c84b6b842efc6f +K = 892fbdae39e87395c1a4da5d5ab9c27c25c27dc173a97a6e +P = e9138166d818b756dc +C = d894ee78ad878c24ea3b5291626156123c935b5bb18a9125 COUNT = 69 -K = 7c4d7987c7f9808fce1affde0fce8b62626ffd7a805433ac -P = 9f8cadf4 -C = 24b3c276c5a1ba5a8b0e2247f579a52b +K = 927d81cb794c65dcd1abc81117694452b66eaf25af4dbae9 +P = 5d1ef188816daed565 +C = b6e846d64dac25596f46e6c31f443c72a9a613a9d0811fd7 COUNT = 70 -K = 840cb7c7020aee24054a8dc9e55b396e04b0d2093088f757 -P = 334ca2f4 -C = b36c0ad3181528c8162c24f0a95fb63b +K = 3c6c121ecfc874aeb23f3fc387c9d8cac058e8c94bbccd09 +P = be474c5b29ec19629d +C = 944a6b139b3a5760c17d1f14a3a9392c0f4e6c3b44e8f2d0 COUNT = 71 -K = a7fa8bd73610668fec15e85af0f4e6510aa973091879c6de -P = bba9b940 -C = 7da9821392a31ab19e8561763cc4cd79 +K = 7fd03d769ad9b4c126e8d089830ae67b10485108f9f44f99 +P = 19ab1e69475cd234d7 +C = 6c7792f8c77bd2dfca95a668d4bdfb6f762cdcf712f82e75 COUNT = 72 -K = ad50bd28eed86b8166ddf409b9eeaed23d1eb75c55f565cd -P = 111a48cd -C = 0b4a34f707ac810418093b0b8f61e649 +K = 85231e38392da4c88328dfee64619db63c5d18968769a800 +P = fe53a2c5521a21798b +C = 2d4a55417119d87876f54e782d8b896c06c71561726cd554 COUNT = 73 -K = e1131927128d90b19cbc603e6c07979e0d40bc000f1697dd -P = e5a1842c -C = f22a43769033ebf539319979ff794496 +K = 3b7150e81a4d4172a105b1e6dafc21cab10949816f012b25 +P = d9f7b6f7083407bf42 +C = 6c1d41007c5007749710bab62a5ef99e5cbd4165368148e6 COUNT = 74 -K = af223ddb89c1324e99d90a1baacaa060327769b251b84007 -P = bda0d1ae -C = b63aaecf81464e8237e0693556086aea +K = dcd66527597daa63010259349dc69ab61933b1e5e90dbae9 +P = a200280e6b83be2fea +C = 88237cbf07a266b6e37c089eda2ea4394d57c88b8e3cd1e0 COUNT = 75 -K = e16dababbf3068bb9407923846140a3861348ee4642c62c4 -P = 388a7b74 -C = 682150bbe5046bb07b2bf02d7c8c74e6 +K = f28db95d6e3eb6e70a3b2d8525026f99ebe2bdecb846a9e3 +P = 969056c33475ad5c10 +C = fe21fe6c7d21b4170901a7b678351ca481dbe7170a928ecd COUNT = 76 -K = 2ac4f960d677a3c50f4d59190e4c6858184da22deeacff06 -P = 6b6d599f -C = 1919762356b4342ff7f54ac31970d8e7 +K = e4a4d1a6d21f1486f58c6193e4f6144a86cd7f72eedc77ea +P = c4c93ca34435bdee54 +C = bd3046286e0f7a5f848d31205a1b6b9e12402f00b1a62c19 COUNT = 77 -K = d3d9e12e9559cdda45445f92b8fa62796b66b9592760b992 -P = e99dcc87 -C = f3008be95c2be835b6d52f72077d23e4 +K = 9ddd59c11698241188cbecc6508b77e02e4db2739c146bce +P = 05526582cae9ce6d56 +C = 24c5ac8985427825b5c4237335896f57284732e89487d480 COUNT = 78 -K = 656f963f2218877ab003480c583423435a64850d0ace72a7 -P = 0368e85e -C = d988d305c8dff9cbc3d7f96d0e1f6b13 +K = 1269528fbbedd5f0a95ca9dccf7d49c2e17b2013098d167b +P = 55b47ab1a0c5826715 +C = dbe27801034f1d074c165c1f4886307775280fa78bd53659 COUNT = 79 -K = f4cbb32e6ef8b80b1c5ec7a5db01d6e813ee430e5655ba25 -P = 5980ee01 -C = 48f058b028c6510a77dd99da120354f0 +K = 4a487253d2fdd1c33f5e2fd87cd9f90ff45d26181867d6cb +P = d024ec98ac0c764cd3 +C = dbed16a35de0b4ef800239d2a455af75e1892886f462f15d COUNT = 80 -K = a4a50ed3e0d4a5aedc02de10ef1af8afffac5c2615412c2e -P = 0f2c4c07 -C = 377e75e68c2c2122b43e1abc99216dee +K = 9c582eab1da8097b62b98d5924df5f290ad08bf2283942fa +P = c9b94aa890d54517ff +C = 08098ec5171e116709ebc16767bff1a351f4ee5b49df752b COUNT = 81 -K = ca5a96d7570289b9a7bac6472e2eb4a51f39cb63b784dc88 -P = b12d4a63 -C = 8945763f201ba2ebc15c9caa618a34bc +K = 9c201f722dedda437fd94ce9f02ebc1f6681a4ef190fcb99 +P = 06d495cacf038e23b7 +C = 20f8c06450212842cc3a686a36b6cbf5fe91fd3b66e9f589 COUNT = 82 -K = 252c4b1127f148748e24e3cbabf021ee0e3b1d3e0b51e756 -P = 9435a303 -C = 41b236a5dc0ab2879b76487012c11600 +K = acbbb92428af56084830a55bb719924af524d8cb6b4236d2 +P = bdb85607fde339e9d8 +C = bc8b356db9e2b6951278d88b71bd8dc9146aa512dd16c71e COUNT = 83 -K = ba86d69d56ac8e3cba5837b8a3cd43b2aa26b24b2afcbc7d -P = 69f7d370 -C = 4745093ae3d0ef6268cf78a3450f20d3 +K = d43c11ee43df286e58a4fc9ab10b5a9d54b00d8f36277f40 +P = 899e46d32859c23fe7 +C = 170dcdcec89666cd5f03b43aebee02dfc66897460d5c314b COUNT = 84 -K = 0207c10d7688d3233974042ff4066e43edc3127b41f641ad -P = 56a8d17a -C = 7ec1a137bfb9266752df31e668f9f6f9 +K = b2be4f154b8447fcd26e869888008b346dd15dd5f0e6254c +P = c904984208008ff6bf +C = c0939a41395d08b2e63e1c8cbf9b479260d559e3e8c3d999 COUNT = 85 -K = 426bf5f927066b7f98cafbecff8b6c38c45399a553bffda3 -P = 46ef4c4e -C = 0df803816f45e671419a93712ceedc7a +K = 4557ac61844503b50d35da9030a37dc93472c43205e58799 +P = 19e4325658b96b5e30 +C = f8ad2697e233c964e16986c4d3c634898ac413893bc94385 COUNT = 86 -K = 0a1523efc56966f5ed8a3b737892472b7238e245ee155ba4 -P = 88599470 -C = 62b517064f650aad05f9e37a541c1dd8 +K = 95ee1549d7ada3d3156f55f35f7ae1af2c724e0c20d107fd +P = 5706a4677aaff266d2 +C = b9b14affa6f6d78c5b0fa7d2c4bed1ea1b5942355fe225dc COUNT = 87 -K = 28906e7bdcee0e04c114ad3e5f80c9ef16e8152e902c76c6 -P = 7a4f5b25 -C = 2a41750b44b353f1c3c3c137b2981336 +K = 0fa9374f9af74027f22fe175f09219c6c0ebef9ed98475c1 +P = 9ecb3eeefc6822cf10 +C = e1c1570aacfad9c0a1e6b47a3e3d94534d280567b042dc3f COUNT = 88 -K = 588a12ad760ec2306b11847914e14175afd737d5df8fa48c -P = 1ef68a97 -C = ec72c15ef2ac6c1a947e243f248a8768 +K = 05637423993f6123f0ac0593d9a156cc4449528dcacfcdf7 +P = 2bdcf2547772fb2668 +C = 5bb0565abcdff86067272c8329f67ab4c487df5429671389 COUNT = 89 -K = 4fa7aead7b33c7af9f69da811cb80c4b88aacb17bab8bacc -P = a539c81a -C = ba2050f95bdda178772656b2b03e63cc +K = df57026bd18fb8a384093dcfef98153816cd4f5414e99226 +P = aaf8713fd5c1d01899 +C = 069c4ad6a85e7e18f09e471b39eace7ce7e7a41ce0bea131 COUNT = 90 -K = baba6ede981659393d3cdd0f9891888110eaa83db9bc7367 -P = c5b106f3 -C = f6e4ec630263ce92386dc1e838b3934b +K = bfebe45750b379bc8a1170a25f947e0a856407dfe8ec5524 +P = 4927298d42bccf0932 +C = d888cc87c85a8a83e184402f612ca9bc4433a78048f3d677 COUNT = 91 -K = 411028b44c80a42a6a6fe9e9efb4a07c397de252e9d5bf4e -P = 9e01e1cd -C = d14f2692bb743d9d33cec519b0252b24 +K = c3ede9a05b7035f2120d89eb5ea28f3b56616b2f3e7b9aa9 +P = a5c5afe8dda4ef1f19 +C = 604165bfeb8d49417c3d915482f152c865cb623103fa0161 COUNT = 92 -K = 544656fb469db727c573e4f58f133c8386be6dec40fb4351 -P = 39e776ad -C = aa6ba4d08eade1e7615d2e5908cfe6a2 +K = 83629d1acdf410ed8737a16de4d8ba214ce080f2a4708f5c +P = f517ec06ca53232cae +C = d861d28e95b0240fa5da82bc5704034c8c5d8f699f31eb47 COUNT = 93 -K = d87402e50ff4a1b5002e65d3aac7192cc35ea8207f6ca80e -P = a1c72914 -C = d3129469a5c8b52248409d72d99558ea +K = d12f8f90b60cecc904c29b57152edc162f7b254180b01fc8 +P = 7af8285ae31bb98619 +C = ffb12679a4eff61ba7a036bf73874a5fca18a234be355be5 COUNT = 94 -K = 2a07bf1f5bc531d3b09b702ab1e7c43b079d36c620e56ee6 -P = 464c6146 -C = 28252d5c6008e5f2d3fa4f3659d83dc1 +K = cb46ca7ceb6b8162f7d31afb2f69aa46e625735ba50b42b7 +P = b83454c310338f064d +C = 285aa53ad7ad004700e4f53fe601f1331b199ca9b29f4f0a COUNT = 95 -K = d943bbad57135c21310b04df155a9dc83bdb34ba6f45c63b -P = 96650fd0 -C = fb951a8ac4c1a53ff8eb8155a6cde198 +K = afd663a55a0e93153705f509eed11056113590714802eba9 +P = e27de39b941077a111 +C = c4d4bb6728288f9cbbef3ff0c5865feb0c42c9becf82779a COUNT = 96 -K = b15f6895ba462d314ac4636012113df90b22d99fcfdb8662 -P = 0a01ee7a -C = 9fdfe6155b88f0617eeeaf9134790190 +K = b331ea9329681c043b1f7a0a53647a30f50b18dc2223041e +P = 7bd25e96fe149bbbe6 +C = f08c0f87e9fd93c349996b73f17290caac320e44d77328b1 COUNT = 97 -K = 57fc5496c64dfe10db9892f9c5297ff48cb7b0c729533194 -P = bf66ada5 -C = 2a65046683820272af880db31363e5d8 +K = e37009d27984457baa96e6cf4070fcc09a3a92d44565102d +P = ce4af6dbbcb7e3fb9c +C = a670aa8dc435dab73e30ff657fb8052e8f90577e9f665557 COUNT = 98 -K = db2f0349f5b1ca8bbe85aa366a677f99ef62cdb80650b943 -P = 54177054 -C = e083825dc248e34ddd9080648218a4f0 +K = 3e01a68d37abb6dd743a054a1e042d9921766f6e53f26772 +P = c2e63de6cf14931f1e +C = 713fcbac3ceb85040c1f658b88e3c2234bc1948908d31ecf COUNT = 99 -K = 8f530ab5e4ea3943c22c67f5b0c124b210236c67f9fedaa2 -P = c1c102b2 -C = d1a4a2fd371125025b6d6840670148f4 +K = f1e003d90b25b1ac5639635c75d1a1610d46c44029ac3633 +P = 57da90a9e25940f57b +C = cdcd325ff98e1fa1ece37bdf19466a6cfbb95d6f06a584dd -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = d10a45c51f69a957e8dfd93c728d8c95b0ae20ad6cc1dd83 -P = 18e16b785fbc1013004570be -C = 73a959aae43f8aca827f1d4ccda284ef6ba6eb617e5eb0b9 +K = a354ccd6dd97cf40bed840f8137e0cf2e91c00e592104765 +P = 22ccc034c5345550f5bc0114f2951f0fe439ec3ecd8ac1fea8889dd12bfb8e +C = f018e7c8d6dcdbd20606502b2667439d9049a9a2d5c960af8e9251466d6ff8923fb82432b299f1a4 COUNT = 1 -K = 0e057bdb960fe84596fa534b67af1ea44f100126a6d48d10 -P = 2cd1622065b97d5619401075 -C = a344168da6aeb3c163848695ab8f88250cbf5ebb4cd08cae +K = b3168d29a19eba9dd1cb28c52f538cf8c349d63e2097c30c +P = fcb63a3504a7a5e027cf02750e9a5095ec70bccca32f1ce098b91d40fab357 +C = 42d0ffb60e37a6040f1e796cf7706bb8e84bd2b5d6852c64bc4d622d7f281edf6c1e66c259ce5dfe COUNT = 2 -K = 332909244b9f6e616e4ed7770c81e86e9703148394865931 -P = 7dfbb70ba1195ad56ca97e74 -C = d62e392856edfe1b0299d2a8e30f8660b8381c5fdeb46886 +K = df419ca84650ef28a1c5d1cb47917e4480a3aca4bd29dd5e +P = 3d84df372bc0b854c058441e952738ec79474b673c94e32dc78d23745fb5e7 +C = 497e966414475938204c3b3d606d5160461c54dfdfe903b6624208d7cfc90bb403f384bfd54d1ed2 COUNT = 3 -K = fa1a7a4d453d1a2573c222da27b6502a89b677a0c85121c3 -P = 0c75bcb06aa4ab09b3cf85cf -C = 2c302d922b4c59574332113ff3b9494af970eb366f54c883 +K = 63141ad6ebfc723919bd0a6b48145ca5418724f31d37b1b7 +P = 77f965d607540a406cfc31e7aaae91e8b62c579115742f6fe993e1ac567138 +C = c9f42d9b36f50754f3880ebbca66f115811ef4f223ee5ca0550510daec6f1a21ede484cbf5bc1531 COUNT = 4 -K = fec39c0fbdea0bfecfe1cfaf12674a235d1db8b6da8b61a4 -P = dd0520c24cb78dc8ed16e33f -C = 14d5336aae22ff951871f149f0636d4110dac1888c09b442 +K = 5f8f1e9c583f08e2e5be48c4110a41f6e5888b014a6edb44 +P = facf3fc1807cc6dce0b23801083ed799ef22369bd52ae9050ae79aa7021b7c +C = 5608eda3befd2cb52a50da2d72371e93652ebb120526b2ab8e791b4795026f21d1b545fe702f30c7 COUNT = 5 -K = f1a801581f05544f9a123af972574f156c37510e15c22c1b -P = 6e0cc67c2273d65d17acd24c -C = b2ccf5f55541b49a4edf22632407a2e99f3e0873f59af2c0 +K = bb3e0c5eb4815b513229c4fe24c3fc8ae930bcd6c40e40c8 +P = b0cc1605929a061b2fae1799e0f3ad973227e057603aa77d0249a5e7f3ba75 +C = 2db0be0c5279f0279a687b4baa26979703c1a8a93d443a85c86686eed1278dcff4ad651802589829 COUNT = 6 -K = 69e35104cd573c5c88997ae7d82082d7fb96c47a4ffd644f -P = 563066346d13d8ad5d5b8def -C = 26d0b823822d108fb9050d3729cde5e22fb2ffaed94965a2 +K = 174569dcecf5fc421b622d72c3c8fb2ff8324871da6ba5a9 +P = ed06e36846afab5c20f293b775c2268038a36ab827fe2f51b5305249ed58a9 +C = 6124f929e57b1507ed053ccbbd2fbf96a955fd9d4a679772f821a53f5cbc86ae9251927e2bf83ab8 COUNT = 7 -K = e80de22ca06a49cefd22b2947994d746280302ec9fdca5bc -P = 313928f72ac9587463d4ff07 -C = 27ebb1b3f542a3d93c348a93fd877d7974304f882c295122 +K = a18aa45e59a1a17d9c89dddee540d795010f180159ee5ca3 +P = 29ed77b0f75316756f23a9a391dd79ca7f1d1ec198668e101b4a1a228481f5 +C = 90e19d5712c670ca553e6d14ad2d73455062e64c722ccf2de4246f5ba49b4758d2c8c760812de33a COUNT = 8 -K = 4b44885916c1aaed3b96a24e68a6221f2b3db73b4d4fe177 -P = 118f397e68784514803ffbae -C = ab432ba45ecb99ef63ca39d1fb7bebb385db30b498e713d7 +K = 9da97031717fc042ac298c68c7e3e146224303775894a453 +P = b72bd126de301a215642469f3f29384a268575949f84e1e9e457dc5c35ee7f +C = f6c7b6778bb1cba2ffbab71bf386a044491d18f31e5d64c740149543aed24a6729ae8cb36437db88 COUNT = 9 -K = 0ca328fafee9ca91c0db4ff2e94ae46af1516c7357538336 -P = 9225a951da574c2a714578d5 -C = 14a5446e535c11af985864fd7f72b4b75c6b3a9bd0f5416b +K = e6a8833e409fb367fdf229085dd42aef1a0fc857efd14730 +P = 884a2231f7e44bf42c7772dfa5c88993a99981e3b8bbd54d71867de648fcb3 +C = 0aacba1cec1024fd78a946e44920f8061451d2d2607a0aec283b4ea6a4ee5fafc7c219ee47d12069 COUNT = 10 -K = eab4059692c44ea7a2236a495cc7062af90bd1aef63ebd77 -P = b51b0144675dc89b357ceebc -C = 63c24d6c837552f2f86c6854eeda9c0d6251120fecd8c680 +K = 3fde0754a45db5c68424ad817c3ac36d0673acdd7f9de461 +P = 9502307c8abad422ec89f18874295a3420b96ab60f9d323b9c7771e1f138d6 +C = d85c2bfd94a26867324aeedb729a35c7c280351cbeaefad88ec056316231c4d0b79c4a570095cc77 COUNT = 11 -K = 245332557d5af9c96af3a7784ad0fa8a813e9cde863aaf4a -P = 75e29c23fc72737798ce6615 -C = 3eb3cdee3df2091b9965896ff466dcbbc070b3002905280c +K = cedf82f9da7352721671a4f8a002a26a281a6633d8e1ef95 +P = b1ba45f92bd0d66bbe622f63eea9bb4d8c75e5781bd886c14e527979d0da87 +C = 3c3aa557612366faed80a3ab929b4b7374ef6fda34a0c113781c8ba136397a273b3ee75217b04d7b COUNT = 12 -K = f4eda4e35b3ea992827806570bc5243709cc1f8066600901 -P = 0ed5b522c4902811698e63e3 -C = 1ba50ed94a676f08acebf1368c30921f37a4d6836a301422 +K = 5714b79c0c8c76680bda4be6ff711771641f4acd77a4af94 +P = 4a0ee700a8feb8d27963f2ca2a87d223dcc2d68041e5e07dc596bb23c77c38 +C = d30eb97eb8e2af16e1a6ce176ecafb9d5a52a5a866797d93cb63de8f724f0b5fa0e3bc322287c8d3 COUNT = 13 -K = 7d28376668857a79114da3988228056d6408e81dff7028c9 -P = c348e5f7da1e5c7ca4a4b57a -C = e40f3f73132298b0f7b52d55c024043387b687b75c2e7a48 +K = f625f86eafa2fb0dff4e261a2743883da8ae2495ec137acb +P = 97f5d183482e27b6d2025583a303b661a47870c1bda3a274005639b1ed7cd9 +C = 152e1a0b93f4b4adff4068a634c79864a5d616ce90815b6908ffe2bbee5e5a2915416921b44408a7 COUNT = 14 -K = d9011cadd96e87569b2bad2eaed99d96f87336917a08dea9 -P = dd1018c2d563cbb677aa938d -C = dc16ecb484e7f6739b7ce34627372c955d4e14a51c4214ff +K = 48122e898db270f9b854237310bd18fa285a41781461b3c2 +P = 0dd1e5f30496bc0cfb69e38f683adcfff53200cd8478bc480178f4d098c423 +C = 118f24b56d2404892a65aa0d008f35aa726ff058909569ab075fce69e332859b7cb30f87ab462224 COUNT = 15 -K = d7085d6855a6006e486171a6a0607f6a385b2b9b140eb3e3 -P = e520fe39ddc0a226655a8a2d -C = 610c9eee9977fb1ab58b0b8b728fe04c494d1d57a9bc6a0f +K = e6e750872588b4f320dd5534d43401daa260cf1e5cef6d3d +P = 51d2070622ea411fcb47d8ceb1aac07acd88f546474876711a3d695579aba6 +C = 5f240912c1cd86dff35acff1fbb7e5b7a19b648e21e3ce187dd68a943d449c23516d5eb755b5038e COUNT = 16 -K = 3b977b755aba3e0bb9d91c59cc1537f8ed290a7b0273b73a -P = f0dfc92d8a357b7b928c5d08 -C = 1351584e39e5713904abdf23af239dc7eb2082d24a682383 +K = 44a9f112ff9f46deae8470f7319be962b37a08bd9bec7d0e +P = 36fe24ee817a84feee712982a95e1f31e527755c44d30c0a986a870c623986 +C = f97fd1b28fac841306b999d458cbcc0ca31fe655fdd2f2cf0af9818b365cf5e5422a57a0c10bedf7 COUNT = 17 -K = 5952df11f031a1e5fb4ab20223d4131c0b5e81b922c0c2b2 -P = 920088a1fea66491336d7824 -C = 72f603905248e18f20fa1eee67f0d7de63bf55739fe617cf +K = 52964c033de509e8e6f2b48a482fe52ed79a9a7726252e2f +P = 5222bc0e73a68b9c94aa0e90fe5303fb560e4caf0086a0dde2974f24179106 +C = b05c42aa0588abebf8aff1d97a47f44e0cc6655aad2ed34cff93e3baf1b70905725770579b782c7d COUNT = 18 -K = c4148d243e8b1e4d5cef9282cb98ef46b60ed109979af5b5 -P = 63854dc2c0bfd5fede2da9ef -C = 5a94b318d153362c646c5110c0544334c64bdfcd8d28f2d2 +K = 9bebdc839c9aad70abc47b46ac351400d69a1a229eb840cc +P = 80fe8a5bd3d4034a9ddf6def9b344b9366e53ab4b07731e8de9373a0d2e421 +C = 769708b23a4248a857af1c1408c19ad30c94987cff2a2d23ef5575ada28dd2dedf8fc45e5772a67e COUNT = 19 -K = 7eecf3a1a506b7c9581dd468fb81bcc346e50b0ee81fd319 -P = 93c54aae07797a1fbb032611 -C = dc8aab5d3e6ea5d6b0ab979e39a18ecfb24c4b6446ef7e67 +K = 1075684b8cb257e805319c746d23ab947aea0a94667b4d6b +P = 60f698704c8a4999b60502cd3f0d09a28fc3c9957a0f123c75f46d5f85fca5 +C = 0d013513792764cff77fccf22df2acf1c2f9ed6d1212cd647abf67a84bbb4a9acfd28c50c3aad296 COUNT = 20 -K = 5796118f0c534154cc5df5e0e002db59d664bb5efe3a075f -P = 56a86930c3e7fe4e7f6884d5 -C = f1aa5b78b4559ba718bd5c7d47400bc33d569e352f2cca26 +K = a03ffb070ad9aa5670e196e3e67ec0e66cfc12737ef6741a +P = 7f40d12630763bba36c5ba32ffa68a2e8b2f4c9ae8d25bd9c993d81e72622f +C = 0f77671ab303f1ab400bc6c559eabda360629321511c76e9eda685a03ddaa111e1ada13424240f4e COUNT = 21 -K = 64c96dd0890ce7eda8b6a06ab4e834f8f952991880ceb126 -P = e369f9aabe3f247c75e43682 -C = 5c79f81cf34b3b2e9e9ab7d23d489163cd4bfe4bd9dcb144 +K = 254d331b59405ce3631d0aea45fb8c2aca437a16806dcbde +P = 638694c7b192a3542b9e82fe6e3ecdaa35d276f64b0ad346c3a44e03b28e4b +C = 89354e24e6861dd1ee7110a45ac99731e44e9e15b3ad448927814079694c6d8afdce4ee3d63b0d97 COUNT = 22 -K = f32343715e8b617c4582d14b5aad08ba7016eb4b10c7f792 -P = 6c16de8a4a5644cdc7495147 -C = e1332162b1657c2d85bf653a657bc11a6cf10673cd2b0fcf +K = 97979ef0ae1c06aba76e3fdc2bf2c686bff724066e9a9efd +P = 56917acec790404c8f2d7c25a92e5f49d430ae7df8268e194437c141a654a6 +C = 5311496e57115eb97e1a303fa81accf306322dbf2928492a1f9883201a2fc46a07113f735b60aefc COUNT = 23 -K = 265b871951ebe44dfd70cc949c9f3421af9773d41a208224 -P = 59aaec0d80bc57a29dfa3cfc -C = a72b965fbbff24fa49c16dedffe0c9307ef95e5edcef54ba +K = a302b745a182d2adc3388b14b62d143bad683f5d4a400c20 +P = 6f59e3c9812e3eaad71e4572f0ed8abe57b3f8ac3a7e1d3a66288dd6287b91 +C = 4f8e94ac9aba36cdb28de59bad8af217fdfd9e4d7058f33fed75370b8ffa2fb69901241c00fa6cb5 COUNT = 24 -K = 0ff2f604fa653738e4024975a177560c6736d471a62a20e6 -P = e009f4a3ea78c81c519d5731 -C = 73f654e07e55b32b82c0ef50dea404acbb9aedcb395bc94b +K = eb33098370edde95c42c1ca3ad526a3d4a0f553879790a5b +P = dfcc8ebe37926cd3f7156fbd0ad666e94d6e97b72d69bfd15db380cf25bef7 +C = a0266e50dabb5ecb82f02728a52e1142cafe8ac0d1906cae71cf15c886514de4626a73f28857846f COUNT = 25 -K = c6b51d6c0ba8e2911b2ffe1bc476632cbbea11eaa5c24f30 -P = 80df50620643a64ea3c37e16 -C = 43d1a132454e6c7a0707228a78c663215a6ba81f18c6a813 +K = 99e6657c2fdeca34a291fa6cc6051fedb8684f535dc304db +P = 6c7ded0a3e1b5df5f123920b3f3c8fee96c2690398813fe254b4320428ed38 +C = 2e670846418767ee0af907c52e88a72411a35f65cb401c1edda964e7c28416a3fff6d75d61844a54 COUNT = 26 -K = 3a2969f4ecb9ed07abed30ecb256f15df2880e5619a3e9a3 -P = c6dbbe232a0c38d0ae4e50b2 -C = 94a76cbab59e5a27bae8ce2d58f20b5b8bb7e56e6c98d8c8 +K = cfb615054f8519c2b87ae65f93fa932697080cc60931efc5 +P = a0df136998871946960a58605beaef5b9ad78e62dc6ec861fba880884f88f3 +C = b71a39b1008cc9e140a679e9e12f6ac41772ebec3db6f975a6cc5c821f3ad00135d26e1dead4e48c COUNT = 27 -K = 564a5392466b1ed2a95e51018d9f4fd833103e4dcb336764 -P = 5456832e35c58c87fd026a15 -C = ecd5385a366d3f8c675b89b243d772278024f8120bb88032 +K = 935952e967a8653c511133ff807afc6a813b61e3b15448e5 +P = 81bee1283f5d825e3e29083ae45c8682dcd3290ad75b223bb659867b9cfe85 +C = b0f6a188ad4b356213298840dfc8511d7053113a3622e0083e40920bca214beabe88f849e3d579e7 COUNT = 28 -K = 08ad0f370b28fae3269cde464404c55440830862c42bd652 -P = 293e3ecf8e0ded68def7fd89 -C = 309be1c1428ff30308b4f6096129b5819567818409431c83 +K = cb5b1bb4554a06b93f873ae6990447bdc3cf62cfdbf7dfda +P = c946c2be7ffef70c6dba3a7db9ffdd8e27622c94d1540c69e0ab46d8fc95c4 +C = e1e711f99158616b21e818c8446561335ece945e3002c33ed47ccbe6efba0f71ef32574fc8c018a7 COUNT = 29 -K = 9297fdeb0e7213fc7adff51968ed59a4473f9b8d8f516912 -P = a576c8543e2deb0a3c4c72ec -C = 302c68b87b8dc34683fde4a78a5992fbaf03a06acdbbcfe3 +K = ffac79d60e32a8990a899f2d48dac451946529b7577d4ddb +P = b166f7f4df856243e1a3c3cf9cf71180bb6f16aae4a315aa5b7bbb899bbd70 +C = 0d222bd4a17f6738a949813c19cdc6a3d0cef76430afab2315bb1b84bfc9e453a61fdc82d821511f COUNT = 30 -K = 05ff4f5f7d2658452dd605be3a1743885465299bb6e35dab -P = e90f48d5ba0d80e3b7b24430 -C = 0ff922f40d748c92b27dfcbeea20c4ed0aa6bd7ba9b3d051 +K = cd4b7209e2836bbcf51f12d2dcc9aaa27b80a6ddc0f9034e +P = b715c2fe2c789bf8bb543f1ed8cb1e4afc214715936b77adf7d9b62be71fb4 +C = d83bbc654ec82c666a6dc6531e60650a2b718c20501b6ca0f443f508830691a9afa3ca6dacedde62 COUNT = 31 -K = a15689e399bdc62e631f7782d0e7f35aa86f3714b8eff273 -P = 29955564a2d43c045eb6776e -C = fd5e41943da573bcaedc1bf1e268dd6a9fd310f439202a66 +K = 568ece1f7881b610517159c130a042677cd061f2b2813c8f +P = d9961af01193d946a58a4bdd8778dab086edff0bdc621323e877882fb1fd66 +C = ed255a1130315460394ab849f17c9ebe955b83418d02c7f24d4d7094e34dc3b5fcf79c5e643ab428 COUNT = 32 -K = 304472095ddb41df80284ceb6f5b7ef44d9a6fe96520e864 -P = 52ad2be29bef0108beca0814 -C = 11cc7cdc1999699f3bab1509f016326bb5bcb0728f2a1adf +K = 6b7820a5ac6d2cd03b7dae5add68f4460919f3e1ab92ef4d +P = 1695e373c4ffbe5da1cda5d1e560454ce176d08b54f94e0701eb785e0417d1 +C = 45855d309a5b8b34c6a7465dd4d57356eb18e835eead577a77eb0fb85840a21a97f9a2d302a0823a COUNT = 33 -K = 86fe3079dd2e3a311b4114d7ed784b2ea468686609f36df9 -P = 3c6ab5c6414d23014696b950 -C = 966a12693e5988061e602bd9b5cc43794d5a5a69b2ea8115 +K = a455bd92cb760ece87c07e95d59462fff2d61f3d906bb8e2 +P = 7f1042bdfb8834eb5e11bb088316e7489afb29ad0d64bce39bfcdae373286b +C = 989122e17f3a04cf7fae13e3310585b240d645802271900f513fc458677c941d48f4e3c5d8e41e33 COUNT = 34 -K = 3c581bfb0a54fd95f1e9a6197301dca9ffd5d52c328f0d6c -P = 53e09bde87c9d721a5f2e988 -C = 4dcc9f1ccd0310f96a7b6b9db44392c59cb644bb560d56e7 +K = 8ed8088c1eaaf40cf607706b7fba3a5f5534a07184414859 +P = c8e97553239fb9adb7af0a8f7e207e163d2bd7292a502b2e0a998108718b4e +C = 323ef2cffd75266a438588bd691f1dad1642f67d4ab51dd9f87a696f6fdab8d10e93b0ef689c62a5 COUNT = 35 -K = ff4ceeb08e7a658b4e77e6adfc2627425259a88da8adc4c4 -P = 3adf0468f78e50c3e0b622ff -C = 76b937b75e1be2915d5768ec25b8791951f04ca0459772f4 +K = 3f1f563d1765d4f2dc305c9676ea466fde35d8255a4d7007 +P = 3f28fb0c99da4119619c24b5697a7e7fd0da725473c6c6f80ba7ae55b70cf6 +C = 03507160fdb3f56d406dbaf419f1f4fea946f8491370ffae1de07020221443ba40b4faec84ce3d13 COUNT = 36 -K = 41c00609279e3a6683c766c9c18ce71a923db0547325f6e1 -P = c307055d11c892783e9937f8 -C = 15b2f3fd20c0ebe2148c9df9a155ff854737ab0e98151797 +K = e92e02f9a52ece430c1aea677d1a751b9611d806f004cdda +P = 61e5015b8ebb9f101b42644189cd310b614027d4292e69da768ff5b4fd2d84 +C = 7d7f68159a9a14734c97bcec27eda1d4f0f52c7c866bf283c8a61f238c5f56fbb894fdf649c8f3a3 COUNT = 37 -K = c9824ada385fcee9536bd6e991eb5dae7bb85b246e573f49 -P = 2273447e023d26423facdabc -C = be43f2733a062c5ad1b31c4fe850626e87dcc20b4c2f652b +K = c0cca8995c44ecadeff7750b0f886c74d4a02733d1ad6895 +P = 59f14c1b5d4b1bed63d49fd2fc30655314b10becf6cfa0464c3c07c6f24f94 +C = 66cda8955b6ef0eb3641a4360706a1b9c34bb405d653b3f71158ae0ec87e683fbe01456af2fc630a COUNT = 38 -K = ffb3630bcf9240e417e40516ae35d019d790b5e55501a564 -P = 09cacc81dc1f00c1a03aaa0e -C = 1620045d36aaf0bcf2398532866b5fd961432eb4c4de1a13 +K = 13b41472d211715269a60fc694842f311f7fb57cc319bdb9 +P = ac7c5ef92882b9aa9412e2b79f4e48d1427bffc8830616d2ab83c754f4f6ae +C = b3c17a351c640436b5cc3839e55e21800ba5ff9c775291d8cdedf30b05c630a7b0ef5d2bce52a18e COUNT = 39 -K = e12a9a487582df14bc8bf355b47f4e26a5a77c2edf3d1ba0 -P = ac8291b0c1bb1856fb168abf -C = 2f5e55f88cd36c687396d6e135447e4497b09e8031bb9fdf +K = 596b1a7cc2e5d09c220a6d146b7b7ea253a5d6731e292d0e +P = 35f16ea2db580f572702065ca675441e24ad80ee6c138de02c08b92814e59a +C = 615978c40490b55dc0ae87f4613ed2f502157e4c6788d58137c15a316acf1b42cda657b1a9462e5b COUNT = 40 -K = e97c7a7bc84a0fc3077c12fe1ef55cebe2db3bcdf43d65cf -P = e109c7c03e2cab4bfe3aef70 -C = e62b59cdff5c4dc2f7211b1bd0dbc6a1fbe1cd50ba69726c +K = a6d69c543a4a4d17f7474c9b4f94c530eddbef19ae3f60be +P = 71541cfd1ccf9109ed44a06f958e0753f5809b10bf75f25b42df8463bda907 +C = 160fb00e928b0277ca1efbb0ad9e962b380701a9d28ee23a6bed7c6e0b765f37a8e5e9e28ef9f877 COUNT = 41 -K = 1b43258b00e0af9da7d239e185943a1cbd28c0019d0abe88 -P = 3412f21b8d3f2e4436c421b3 -C = 66fc35c18b8da2e61e2efcc9e29237500195f1269675a170 +K = bf2e13b9dc2d3cede63a14832b58385db6feec014c5ec761 +P = c19aa18febc989653fe207b75f550e78c6f9938b4d7bd11ad5bf4b7abc02a7 +C = 9345971531bde0472147352810bc002551a13ba14126dd3de79a740282fa4ea1b99f2db8f53cfcd4 COUNT = 42 -K = 50864f67ae490c58e34fd3f2bbe9f8868e8eaa9188a52cf9 -P = a60174bc968b3df9e68e8fb7 -C = f4ef04ac3a7bf04d73c94228378a07d1477eb26717980c3e +K = f9a70f70a0e3c586dfff4c5a263dfcd521afae3ee7ce72be +P = 9512b10efc9f89a48cdc23d6ab164cbe0072961325a50ad28f41fe886a7b6f +C = fb20e8c8021b80d676e4809d7b6486b0586be6ad2fc0f2920f901ea77fd25e5983fbb492c0eec0c7 COUNT = 43 -K = fe3721b6eadb7a9c2904dc05c269ceaff8c3f28a166b6b8c -P = 052f992761d5313c0159cddf -C = 9ac8b5e0c966efe6bda48a88c0431e5c7c13537b8eb0a667 +K = aa6404413fce9cf55db7de481e5cf27c57ba2db55beeb910 +P = 71deb78856caf083b0957a3b8f1a0995dd6f65d5e33748ed75c9872cb1b458 +C = 2ef983a18196dd4fa7173f2c43b56da8acd033da39371f80049b57d978db99a94c26bdf85022f192 COUNT = 44 -K = b90d1ab2ef6b29d85b487902a35f7227118d958f77bf3001 -P = 2b2a63fc2240e617e0adf5f6 -C = f9aa76a5507116a5d4e6d6c994c9efe74ca3c8278099fadc +K = f1102b35c88932b54b32d829c3ec2ef44a3a5804ef5638d4 +P = 5c653aad176bc2428b85d9b5bc4fbfc467430ee8c05925981ad190a2648a70 +C = 3cb1f39f62a1b204425ba54189f2c8d81125b0a7088b24e36d4c5880bdbf7f2cd1d7c4fa9752bebe COUNT = 45 -K = bae5d943af503ef786495a21024a3ffb94e14da58dd224a4 -P = 7311112d73ce04c9f05e7f18 -C = 40271e2be6a02277a2e9548d2570e927a4745cce1cf48dd0 +K = af5e0503b7f3ff96a601241bd3b26c931cdfc294a831f58a +P = c4bff64757a6c8bdc35e1e7d20a261ee4a9baae9554a0b0e4bbca2a701218b +C = 915ae108baf66fdd19cafe42dfc72f565a8b8627f4c2f8de1076a7734586c81e127ee5870b1ca373 COUNT = 46 -K = 49afe0b8b55a8f11d169ddb8bd2d8e0a1a64cdc25ba6620b -P = 2a3bb93f535140824e3fb825 -C = 67e37e5326e2088dff953caddc2161166a5c5cc6ab68ab0c +K = b0c837962d1e12a154cc2a244d9fe330b1d7014fbf9490db +P = 25b44af019cf1a2ac3488ceab5815313c75474c4868aca7e5feacfcd652d7b +C = b46bbefa57f248c099c5c47c89a1b1ae867139613f904af654a58f769a6028508d9595cd6063d1d1 COUNT = 47 -K = b71cf23c6553014e5d62668648ac7f8df27ae9cfad9d78ca -P = d9a1ed0d5aea03d58f9ecb19 -C = 1af4ba2090850378b579ba9b1f7ccbdd89ff4b8edb20fa92 +K = b7b8eb34e3c0aa74a84904b84df59e101b5cfacccfccd2b2 +P = 737b4840720e7c76a85d4c94814a7d834fa0a904a04a871433a9f872a08bb0 +C = 2aad954c98a4bd332014f79042340fafb837b0828478bae3c2a0e1a8a111d8008dab2931d0113a76 COUNT = 48 -K = 8bffa7546d24eac92cc853ce9dcd291f4970fdf20d58e345 -P = 496e0cb44342284ae1e1420f -C = 3f1cfa3c0dead93cccb7b06fb7662f979d6ca6094fdec428 +K = 1e4dacdac535fbd3d6d384e30c32d0e737b633efc021d3ff +P = 9461935b3b218b019f76baa9cc6f7a9c71d5cc363ce29799a2a91c2d9cbb4f +C = dc6f09695d85c2737be73718aa44c2f4d477043c6d18eb554f9600992c4cceb15250ac6f39a57522 COUNT = 49 -K = 2db5a3da649b34cad871ccd9a07ce23da854e14dbe34f78f -P = f1e54f452b2f15fe76f38380 -C = 664cca5e7973a8b15f0783398d96a08166de505aed637920 +K = b34a26158b8b626cca60cddac846565c170e92dcdcda3e74 +P = 52906834187ea59d43caeb3f7b58011120f2a82c6acfda81021ae3898a441c +C = 27980fb158ef1b1c15752bc461e0bbfaff0edf68867b8f46db514979319806c4cb8b7ecc66040346 COUNT = 50 -K = 0ff8de708c4aa30ae5457025a3f43f004b24cf7468037ad8 -P = 45578fe4c798508aed9b2011 -C = 486a41d81159bd317e58a37f515b9373576e48122c872b57 +K = 1e8978a3089ff877dc64acaf4c46c0cc6c7c3b515ecbeee6 +P = 0a529c7759863f155330af9cb97555831600dd3bdafedc66e0485548c3b228 +C = 4bc3e34d3f2f661ae30e8850f2924c60f29f67e0f32a88dcaa70dff29aba67950bd202cace8b1792 COUNT = 51 -K = 7411d70e6bcecff3954447824913e15d851c7c64c1b33731 -P = 328c3fa09072ba0a55458f8e -C = c0631b72a31a9fd4891e9be029a32b778d895636582b9593 +K = c3c87657fa0fd583a60c3a523a7202eeed981b58bb03c2c7 +P = 04502c213a8f65d18f8d3cfbd3ea84ef441d6b059a488700718a507f2c8217 +C = 74d7ef2227d9b0eba1ae4be2e058fc76f59a6466146e75bd7a55a648775fc24a01c06bb364567b8b COUNT = 52 -K = 28be6d9ff8f8ab50fd583a6289d7df95fe6ed2dd68b0b8ff -P = 23bc829f7b9109e6c6790840 -C = d0030fb88ce04c7f290328862dfa93a055385583a0a239e1 +K = a0300d7cd8710d068dc24c510af7a34f8429a6cf02c5ba69 +P = eddd448bb0a83e833e2ff10423dfa2be0aee852bfb691f1e6021f1845cd9aa +C = a8cd5b7b923639c7eb3049fef947c24d9a90087cc455ce581c75ef361cb21d3726aa9e36ad57576a COUNT = 53 -K = bae46dad51ac54530c9458a0274854ddc60fa04dd951e50d -P = cf848d0fd8c74033dfb5e8c7 -C = 0f43407989a13b04cc89107905b900213bff6d98a19bd22b +K = 7f757446b4882b267a19f8a176c8b2c232ab87a326f6f171 +P = 431caef8b95e7b3cd2d692c4ebf7f288d124a011055cd9dcaf27a2027658d8 +C = 5fb554f5791fe74ddfc97b88619d04baa39baa29f54a0db54bdf34f01a1209cc3f296551ef4412e8 COUNT = 54 -K = fb74198aea4b855b8104c71e4cc5980b1de15d83bd25f50b -P = 200119f09f4d149f93535794 -C = 7b05c4befcbf351d0ac7eb7e4ca363fd53f2805bb5db2b12 +K = 4e8f30a55cb019dbd7e059919c285dbecbb5aa5dc3dd43dd +P = a2b2452f7570c75ff94ad35a41598742628f2fa36a1984cdb1785f919b805a +C = cb4f62027f52419700140ab0beda85d2197e4ade2c9416d22728d56af11abc4ef0fa20ee2c901964 COUNT = 55 -K = 220bbefcda1c2665bc97df9f66bee48d3a8533774b5192f9 -P = 13bba5fcb07e44575a5c6493 -C = 4a4aa46b3aa6eaa6dc0846fb596d2d655fb9abb01a986671 +K = 5bb101273ad0323d09bb5824735eb229aaea7c35153f11f2 +P = 175e5b4971bd45278c402c9b387c7467b98efb145ce8d28f1a89ccd2c973e8 +C = 8084aa5c1025484a4997167a21e12a7f1083df7094ee9190485abd2324b557365e53eec8c1848ed0 COUNT = 56 -K = e0c4014be06e38b4f9a1772c5beeb15cdacd333d391bc8a2 -P = fd14e36ffc2756d2756ae7a4 -C = 89a4d9f66cc3c79f9845bf2c1bc718e9c186e6cbeece6576 +K = 5d387b87c9c8b102b9e3ffc683c38ea1d4f03e470a151b56 +P = e7dfa6b54fae965572c995470d30b8e56890515bf656b177d0a1ad7056142b +C = a1e1394137a91b2b5cc3b28b78387d3d9e6f48bf511eb3dbff4a81e5ab0717ce01615de8dc3a46a9 COUNT = 57 -K = fd79b302e63af4ed302621230e6eac48d634f1958099aaf3 -P = 0af08e5bda64da0d870751c5 -C = 210bb21529a6ca4dda90ebc88c2cd52197dda3da26278b95 +K = 614879e4fa154b6bf1675c30735a87ab55536fc13de3570b +P = 99094ebab73816942f08739de80b5c27a397f1ce9aa8352a4216ab9b61f825 +C = da13aaad33a08bbd2ab2a3ba025ea342f4a592e3176c64695573f13aee3603f796ce6bf4b245693a COUNT = 58 -K = 5e43742f5d9abae0f511ddef4e2d1ca05b04ef5637a6a54a -P = 787f21d35805c16688803c76 -C = 55858bd9746171ececa01a179e58d634cfa644a220b4ada1 +K = 429c747b086646e3bdc865048cdb9f10c09c8962fd30e8f8 +P = 0240587af52e700d666cad921c75af2eacb2e3cd8750ab8fd4db4b66eba699 +C = e6e1c4ba6039ef5880886f67187695f9044f92bd7ca48db5d33d0d121ea89f460ef39190c80fcd9d COUNT = 59 -K = 9f5b9e00044d6a806b0961f9ca8df5813301c0df9e4afaf0 -P = 76533eeda308b14c14cfe090 -C = 1dea1e7ac2b0f801424eb2d28d595d59eb455fac482038c2 +K = 86bce05548521ebe130f8eb8a8f2a830d3131d0ab4297c43 +P = 55eece5ba89ddce8e51e6e5c39a938f1757005b3bbbc3de1ed300ac0388a48 +C = f6d96c345f8ac9cee5106d510977571bb58a066ac61d3a03274becea26e690248e2bfb5f60003a7b COUNT = 60 -K = 5e7c0e3f422471cb64afdb0dbf75d60e609ab46f8713863f -P = bc61aeed2a7c76b9852b9ac5 -C = da8be132fecfe8aef05f7f38670b274cabf923be243b9cd4 +K = 158deaec26ed23b3daa544f491b422a7136dfa8130d627e8 +P = cec48586cef19d039d40cabe083682aa509da637e56548adb23e49482dfc74 +C = 40a7e5cae43cff31f12b800e775088c82338122d9c5c2ee201fd7bf38b759fb32d782d7d4436c024 COUNT = 61 -K = 6f37ed2f9b279bf2d499efad651a783c9abfdac19d83cf2a -P = 8d3055f21c7e28a6591706f9 -C = 849ca7f1e4f7e4fb5763882471cbe2dcae9b17594e461dcc +K = 3603d566943391147d3ed44d2e83090a5173343d5fd90386 +P = 9e8a5492ab2153ad3451a9e63d79b9890bc93d3dda5190671317d8a7b25494 +C = ef8b0db59d48975f7c2b02ddeafafd48186a60eadd1c4465227ddef3105c21c16ac9b647b398c890 COUNT = 62 -K = 6258f9421ad1620031e68f700130401297b4773e0b669749 -P = 8f4ab1408b591bb6754ca4c6 -C = 2af6f6c41a4b9bb5106afa48279585ee97d80f7adee98d7a +K = 91f1ba3b53c4d820404ab967635be05e416305faf9fad2b4 +P = 33c9331650ddc4bdc383755440ff457257a2cdc6c1495c58f15acab1fc55f1 +C = 8f36b4094cf5f3749cfe28e8ec65a221b1c8bf7a6f7bcc8bc95516afbe2754e7f6d93a4af55085b6 COUNT = 63 -K = 62dd89d0fbbcded1140c0b080488ee569af80915e838023c -P = 90a909be97e4722d940b14d4 -C = 807041cff7c718bd5eb8d56b85592cdfb303de6ae374acbc +K = 699edcdab933eed767f869d96cf8ff215992bf4e50966d70 +P = a1fcfad8891d2fd59f167e16a8773be57d0369f1a6b9ca3ff25566af5a8eae +C = 9cb68f21edaa96562826703a29901212804e078a387cb546eed98cb67ac9000ccfa43906fc5a8bd3 COUNT = 64 -K = 869ab8c9137d917d2957ef44816d014d53b6456162c0d900 -P = 20e0d5f802aebdd0a080c681 -C = 336c62c4525dd71aed820d1820b79c447af97b6d8c37f13c +K = dc26d69c5a6df55b8f2acd3a66be1be20417600b44aedf09 +P = c99a8ec940d7c18042d6a2daa374a3755ecc4d5c2c18d3ce8811683eec6dad +C = 13d744c2bc962c6a9e9cc785f8e645824bcc0f0671b53ba4926db73a1b948de565aa02461c9cdfe0 COUNT = 65 -K = ab6363f5da6e8ee07c377088a16205b8428d98cc91ecdefa -P = 36a5ad63c4211d93e684921f -C = 3bc28432a2c9971262cad1fc32ac683a91baf58ef45d64fd +K = 969eec3f2cb6bfe9e4b6005970cbdb5fecfd2a673e684e39 +P = a21495f5c1fc82bae7eb6a802f7295cd6388553649c67c83aa20f6a8b8767c +C = 5626d35b5b326416ef8bf7b0a1960ea52fdcc118915c0a284d98c1767c865523b214afc55a198753 COUNT = 66 -K = 44766f05fdd4213643e27bdd05e97f104ffefe5f995e79e3 -P = 0b26fcf28f7ba6b122518494 -C = 8929daa6268d85b281f1e03399f698e8f2f08ca1ee6fd8d9 +K = 780d549da1da4177b0a862812f7a77bfd231d01416803eef +P = 3bc70b4752e95df04a4c832df5255a43c4b958243abeef612a20411261afbb +C = 4c7122368594e8a63fda4d8f75386d6432584974673fd4442dc2b6769159550ba156f0da78b96504 COUNT = 67 -K = 2ea5ef7df84c8c460924ef6bb720446101f8ed2e80e19cc7 -P = 2aad77e30697a04bb4ada90e -C = 6e90b7e3d1d58cd32bfc69f059f51c9efbf5cdb51d536387 +K = d713091b97777fa4c489690b7e5e1a409160ac0b3bfa1f1e +P = a22c1b311629491edffd4482430cb3d34d37ca9678c8b3adddef99415f60ff +C = 97c7f7e2fd23bb0e0a47d80b9823ad6d21546e4d938e1bd14ad2d43974dc9a208b0a335954a734a7 COUNT = 68 -K = 10a1a1129242762763ed5dc7e5328e0758f994f3c496cd86 -P = 1e983f1e5dc60e39b348348a -C = f3b7754d7c40b2f6755ce0bace9a2d33e3dcdb7ab6233e54 +K = cb631c7438644a21a717cc89b5842acd01179db92712ff11 +P = 6901eb6009b2b1e6f221d55610db44789d03307a1f48ddb37aa9839b2cf94d +C = 497043d552cb76dd4bca65b6a34dabcee7fa4582f525d14f88fa9e3f14a5c01e464ca0792387b605 COUNT = 69 -K = f9575b5a980a950459dc8be362b334be3e7cbf9ca4b36c69 -P = 78e52e483c385fa98f45cecc -C = 1a29bd03e5a9fd55aa2ca5e4336d69b9e47d3f6b4688cbf8 +K = 2009e58ddbea026a008a39595639bf2c22b2d7fed88cb4c5 +P = 93887d9bf829447ea0dbe622434721abc78a09e57d42539da533f37c6452bf +C = 7567e2e4cf8b6f83dfc8179cc87e4d1c38bcbc1dbf3e08546ca23285dd5c0bb97e9366c156a45e5b COUNT = 70 -K = 5aeb55f21059be939663ca1e59482c49bad5c40585e219dd -P = 220658bafb09099cc806fecf -C = 879bddd439166fddb5ee3c57cbbee03263077c8b47561c8d +K = 6dfa301eb8ea8b32fa1c3db208a3ddd2cda552983cc46fd4 +P = 44a2693603161ca18c77442f37033ee1040f8e38ebd04bd1c4d65c0be95073 +C = 7a24f437b237afaecf078d83dadfab9b0861b0d5d7c6c3a1179ed96ed0beda0bb7e936e81b602437 COUNT = 71 -K = 7aff942838f66cb869b3e4b0fb9459fd7c0e7df58fe7b762 -P = ea71c2e48c010ca6fc54bf19 -C = e687cf0d19f6bd2587087f694c02530d4ccacbdc644fa50b +K = a9fbd5c0f6652ed6601f7309b4b5d58a31e60570fba2c89a +P = 41652f0413ec88a75f9f057e7922c5d2e3624346a2ce395450540df11edc57 +C = 5695d769df33c2e935753fdc0c7a47bf1630e304ed7640c2aa6e3bfcac5ddf9bf93d2e095200c086 COUNT = 72 -K = 4243403ea1a6e76e15e2f62b95208259f4c1113133e8dd3e -P = d44887743cecc1b2de820fce -C = 2c676edc00267ca5cc59fce1ac63ccfe4ca132f5dcbb3c72 +K = 3e64107f0a3dad274bce45ab6aabdd88ad942bbea53e7b72 +P = 29e4db7d04611433e2b298b4dc76b2215184caa867062249398fc93b2cff76 +C = 4dba081508dee42b6890daafa6b59ba450b65b1e57cfa96ecd0f2ffe9c9abfa4f057becacc26c7a3 COUNT = 73 -K = ee2bab48b8c2e375324062d7b68db5bd37d2a171d530f5f2 -P = 6ae692d565d68addfaba05e1 -C = a7cac0032d4376b80510152abb6d84fa26d29d4ba6f92613 +K = 92d65840699fa5ce7b181ada99880bdbc8bbba885bd6d7d2 +P = 5796951f0278c0532e616af2f8e98e67cb82a2f8c4f17a075ee2e009a2e917 +C = 33ea79331c5bf8a96caeadac8e163ca66c4624af8809aeb057141873f076d571e6d8af504f61fbd8 COUNT = 74 -K = 4a2d4e816af968f6201ceeb74dac1c1bda8bd690bd74bc83 -P = 27b79f7b480ac6b1e7a22134 -C = 1be6457af72cc3cba9509cfd2efb689ffe4e6729583b9791 +K = 535b70d724a055368cb9b92c7b48a743ac9ad3bb876252b3 +P = 00341d52cd8d173a83a2e499401044c53d5e948db658b7ce4db8d7a3645751 +C = f6b81156c0939cdc71a42fa3a9723044148edfb68260537eec53523858c088ef6b469787e89195f1 COUNT = 75 -K = 9821ef5681d5a231cc6acf6e81c75b5d7bb590ce17111337 -P = 84062ea61cd3489cc1845e4b -C = 07933a746aff5031a8549c43aff5249297a0c756a1529f4d +K = e4dc5e4f900b4e30241b83f9589ec2d60390201e2f3d0c19 +P = 8bf192e228e1ac733d1e96387f9311dec75344d4328e58f62e89aa2866bd23 +C = ddf1ad80a280980087bbc861b3d31a6ef153f9fd02bd628afd55bab48ae1b2f4cd5c4a474df5f05e COUNT = 76 -K = 18df58b5662bf1e0361cdcd84073ca41b3886279c2fee78b -P = 22dad663c0e85aba198e5656 -C = 6d8deaa455c2301a8c881230fb33ddb397f6007698ef675a +K = 1defaa901865b8fb00ed75f0a54575984a26c94bbe13e7c6 +P = 17c7e47e997c19a36af8595426f1309c3f7521deac25fe020b82221771c76e +C = 4a8875c3c3b55c66e5e73357a6a704a0ae5ce223b9562c06b0b8ed4fd0dc46f71464b51bd44b4e5b COUNT = 77 -K = 699cc9629350987e974d400b8bf68a8888f4fbf675dc8cf8 -P = 0cec693da7344c3b776cabcd -C = e2972424578407bc9db4cf08ac4dfae56c81e05a4047ccae +K = 6b8717e066cf8adede2a277de9c7a482ab33aeffcee9e57c +P = de96c069d79afde0d155b35a108ac157470a47f2231cd750e1709bcab83721 +C = eb9b9af5c17b66f360f4acbc6f253c5e4641a84b953ac31ab6cc503d22d42c0b875cb9a5133b1f4f COUNT = 78 -K = bbd695096f5ae69a96432ef6fd96a481909fc7e1c51cb5bd -P = 8d2b3bae7a8702436d2ceef3 -C = f82f55f1336d8889e73c4c34b195c0640cbe7307589b2d2a +K = 755139f065418bb8f52e2b3ee75437e0e035e3533fb36a79 +P = 274c008fcd24ead3ee16360401455cead1fde7aca8804dd00b37d8e99976f5 +C = a57533004726c7fd495fd60743023d56cc50b4b95ff80d5ab226fd71760c9250b9fb178d577b8cf7 COUNT = 79 -K = 3979aba5ac10a646aa5f264d64721de60867c4208c38b35e -P = 9100b0aef7285492307a7ece -C = 7e2e7791023eabc7c0cf6bf0f26d8c647122b0727c8a79b7 +K = 40229ca4c8e6e08d2085279184e17be2f6b8b31a3a7f446d +P = ce9da3da46ade1797804c45a619096c5621ee62bffa05db61e7094d12f6511 +C = ded4646ea21f89390631230ac7e89750c0ade7e97ca292dc7c4b593e93b10378cc7a2c7440688526 COUNT = 80 -K = 93bf0a396233c804ae16d403b5647703269428dba28906f1 -P = c66e152978fca4616fcdab38 -C = 044d68e660b5ee63cc3b55b89b416b310f49bc94f8c8b7fd +K = 649a8342189d34a663017bb9bd5d8c85c6c1b74e16c399a7 +P = 94f82f06f00516a6dafa16cdc7e6ea4216afcbf0002b415ce58fc44d73beb4 +C = 69c6ac0efc7456dba9af28eeaec1969319420d242a5a1d9881cfff180b7450a54d2fe0a188f2e083 COUNT = 81 -K = 8334c4d8ea9c89d8919837dfe4dde8608217c3e772ea17e2 -P = a8e4f68e570f7a53481f2d19 -C = 63014825db85a0843d2ea3ef76a0f3334e3e666a7c6079c4 +K = 8691e8d29d633ebcaa2e22e4923a23fcf1ad1669e9e52119 +P = 390caf3ff014d339d352c5210d5bf84597b3065b956c5952ae5c10d7dd992d +C = d1cabfa0b5a4f271aef7196dd276db2f7d80040e0c621fc292740f36a2f8497b4a713c4c0340cd51 COUNT = 82 -K = b53552d58ae1df5b3ad63ed84f9e1c3cc2e922780394eda2 -P = a8e7d914f84db8767738ce93 -C = 34003af6129b33e9becb8b9f2da8607fb69215ed0d9ac652 +K = 2ae55362aeb315b86c0047f9585c7dd5255fcf7d9e21e5fb +P = bc55e4a52aa9dd0006785a9b245aefbe57d4e51f9b36f8a0e2a290e5e7c07a +C = 201807b188a8f91597b692b0eb6ac1d9a542f784159e6d52c8b7a27aae24e6db1c816c51ab26b533 COUNT = 83 -K = 62d9f61c02f0028117f6917b9c85675aaa07087ccb051732 -P = 8fc60af7df10f3892d84c37f -C = 70dc09d68291e3a7a3bab06c484694cf73bb274456d3eb6e +K = 043f199a42d5eed9282115be6c942939256eeabb477ce090 +P = 566088d7b2c6c1c2de9f58a887f5cc710a3f5af4b58bb7fc6b23480e6e0743 +C = 48c4c4b9be4b784b4cf68eeface73e07dfebcef92b3f9b044c8ac44f5a9b0763925fe0928f9ae328 COUNT = 84 -K = 75e5efd03f49107fa061ef9a4df3ec229db35fb2d4d64c3d -P = 3dd682016711c1d9bd39f144 -C = 9ca5830c0edc876b8df6d4477bd7009c1165d72dc2a2300c +K = e6f71f7ee3551d9bd4718e1ed3826c9e9ebef38078b942e2 +P = ace6ad866bfed0d3ea68b3cdc9697580cfc1d3b11ce8fcdfbbbc90c591bb74 +C = 907fcb4578ae6b0271470774b5bbb78b19e3c7db314b2400a379b79193b099a3ca072a7b5d5c15a1 COUNT = 85 -K = 95f0200b9379af8096b9a1207f32eb9c744b351ec231c379 -P = 185344cabe3346db2e27f400 -C = 3322592ad2747487c5a18dd7accdf2e81e8041c578f5665b +K = 5edb2e1db850eebe8453b569ed0930c188b8aa7c27e6b292 +P = 9ff6472ffa2e2d4235c1fd4ddaf859896b9d8ba4a9655904a8c34f6e95d10f +C = 2e72bcbfc38722c641a185a171a3f0ca6ac6356982412fd074ceeeb2f222dc6112de71dbeebb469a COUNT = 86 -K = fdef46423ec489c8353df9f7651ea1653ce4a090c77f47e6 -P = 6b8e040e32194a57b9981834 -C = 189f77375dde2fbfd8dc067db63be936e098f0cbeb8d2c4f +K = a7a8e45914910a54987e9f8dfb68579bfba91b91e8f26e67 +P = 3b8de0c284b284d9f75b9f52181bd50cc62bbdaff4557cc78a202597cc5d49 +C = 45da5bddf574da4b7acca983cc067bbd47967d9a83e1f27d76ed93f2b5bf11fddc125b39a811f578 COUNT = 87 -K = 2f6872d995b690faa43a6ba054a9f5ef7f6aec198ec8cf5e -P = bc48d518cabacc416dfd51e4 -C = fdb583c4ea012f62afdf3201ee3f892e5a5a9a46615ecec3 +K = 966a85bc3ccdd4e7bbe7d5038da76f36b843d858a5a17c04 +P = e5a86eca1b783e6e6b43a5738e337565f896e55eaca7dc50051443e7be9c41 +C = e69436f42082b0fe32b53961c2bcceae19c71b385658aa7ae0b5c8cc4ca1d8fd9cdf1453eba5c5c0 COUNT = 88 -K = b3973df9a60199fe00f8a394c65bc923fb6ccb6a44500ea3 -P = e8f53ee2321213ebf30ba8b5 -C = 571e838ee8b1e46fc8117e37bd8abe5e22dfaaba7c4781a0 +K = 53d667e833326008ef2e03de82e2832c54fdac0334d9db6a +P = 6de7fe0641da964567054d032117c4a96c1e4c664f319ca00ad65521e553f8 +C = b7d63fc2ecd5c7843562aadbf9dbca90694c8585a7244c69e013c60d3436a5b6101f56bcb5f4e219 COUNT = 89 -K = d95d46ee41e179dabaa9355241daf8f4e1c3019038e76543 -P = 26c74462a43cdab436b76777 -C = 4017d7cd131f1bcffa4fb0c2fde91affa9237dd51ac9bfc8 +K = 75298a7162309fc1b92a74f0c424420566d44ae969dd4371 +P = f412bb3cb5571f8b1a0f30f124357a4b545b6da1749c11fb08bac57f88f2c2 +C = 7d1973dbcdaabbdc2d2981913597908c4243c0a2b5213cb3e952f1673821c3721660315adccb706c COUNT = 90 -K = 8623f704bdb19b333763781bd6229f5b873e615377aae038 -P = f8d32e67276675f5490dc988 -C = 921fd6f7f1730b8042b1e2558c66c36e0145656c3c153a88 +K = 05a4aa41ba47b4e8f428e98e57ac6f1cd5a43f9b90aa921e +P = 0ce83ebbf72c27f40146f915d2d10d833d401adbad66c2b9e7b4b65aa29cf2 +C = 4603f86c0c6344de60bca32df59e982e32751756cfda66ecebf04ad5827a5f3971df017b0d85263b COUNT = 91 -K = fb018accfe49f44b79b313aff974ea4635bb43d8fbce6b63 -P = 644d0c284b60c9a819f3c965 -C = e15c7880a5617148e9922c9f5cc5b4f8d884c5f8550a157d +K = 27cb66eca32ba59d4e2398a358dc7e574ce9efc71b60362d +P = 9cf717459eb5f3e565053412c8be2eddaed6e8d46154b8a09b6c7983506460 +C = 65ad89da62d3ea17a983057ff9a6ee41fc26351c9d5c36f7f378cafdf04bba8eea47203e5137af8d COUNT = 92 -K = ff828dc7670992331b3dff19b18bf28e41c7372ecaf8d92f -P = ecc52e7375f6730adc9039e2 -C = b06d7050a0215de2dd68442326f947eca599c53422e2312b +K = cd7aef5cc65a902b30b681700bde2b5b695bd7098980672d +P = 8304d6d006ed90238d04535c126f21c232dd323c10c7d2b5d72479d6dc7ab3 +C = 407773afe6a0d21e4fce6d1a607171b81a03bc75a158eb49b9703bc80c072ca839369ae87d2b90fd COUNT = 93 -K = 225c55314f9c0cbef6877313ade514f437f356f3a2a8aed4 -P = ca3f414a61416761bbf84103 -C = 7c305ba992f9d7ddf8cc793adc97595989e7b45b565f679d +K = daedcf65d269a918f4a6e6741d7e3fa27c46978a1e0f676f +P = de9fa1c24d90a1c0957969f794ecd64b9053e0d8c60d63118816c573fc7ab8 +C = 67ff4393d2662e36b17dcdb82cf226f468f53817151e22ac975558be0796542684fd1d5f8a60e679 COUNT = 94 -K = b05ab223f2d2ab300ac7bbc8a22a8d8c70baf57b379d6cd1 -P = 10636240e907d16b5ea5c464 -C = ff3655f5f1ad5517e30bf455243dbf58308d796042a8d5a8 +K = f86adbb46f9956a48fcfa1c50beacf63fb78250c9ab96206 +P = e0e7134a2747397d582dcae3077abd64c38b309eb1e9c5701a1c173ec24561 +C = 345d80a4410ec589a577fdeb4b8ed7a0d76d5fc5137b225e6164a67c3bcf101b79dbaaf04a0e513d COUNT = 95 -K = 80fb3dec45e261ac842c9546c764bc1ac0496641beb9c37a -P = cbd642e3309127c0ff42b3e0 -C = 0c482b70cb8b3bf8ff1e75922857acead07e14a9f47d3a33 +K = 5e32f27eba94cea422025866b1a4348998d93ea1ad26435a +P = 188cb994a895445e5b1af0cc3543e5e220cc6295decbf40d7869d06e8c7a85 +C = 8f7dd940404a451a390ea2e1c6b0a85add5ad972e2ed8d131c92f85879880e569ec9d3973f06954c COUNT = 96 -K = 74b452abb20fdab4544c1d3b485ed0a7ee5a93b60b955924 -P = e58d1ead932515fc60a80707 -C = 61cd9e9466b4a2e97db86077df38ad13fc1517e29e243256 +K = 591c412de21a8f8a11ee6cfb24d886570f15c4628d2c8f88 +P = 54e16dc40cf3290cfc51dcca842627227ed00d6e03b001cc4fcab1c9f74116 +C = d9fd648e935c339bbe4c6e80f5f03499ce313a41024ab06cb54c0b3f0b42a68df8cb01626e508cd0 COUNT = 97 -K = bdddacfbf52f60182afed37b45e61777056f142292e58383 -P = c833812f6642bc1fb7196425 -C = 05141bed19a88346da86e9f5ed3723743e1abf38dc5ee016 +K = 1867279768a683ffc9dc98c792f499ad566e679c75eee6f0 +P = 4fc1bf8bf43b175f71b2aadd05cc95ffcfd77d3c5f7fbed44fbeda6cf78065 +C = 2c9b8b8437558546e4f13acbc7c6eba372fa65127f750225fb6af958db11a911ccd1fbe4dc423b84 COUNT = 98 -K = be28b11f8c78f6102d8137cb09d796840af09410406095d9 -P = 9f714636537c08c8f27b3309 -C = 8162d389e0a510c62af18980a8c9545d08f83f470c334065 +K = d436340fe390640a7c1899c108c4845c2cbc4ec21f3b4a60 +P = 3eb606f94f109b1ce0647f6cfdae994e61dbce1c9467ceae20b18a55f99533 +C = 8439538738ac28bb01b23d41d7b23d551065abd3ed47e06df29b78e68af3726f0f7b5595f73bbdf2 COUNT = 99 -K = 287e01aeb9aa246aa74d02121f5a915d467e91dacc61c656 -P = 75413b2763ef499a5582faf0 -C = 5a76776bf0c31776e29c901a6ccbc21b4cb8577ff1838a2a +K = a558dafeb3378b97880e323536a7b87d51b2f0e7a9cdef7e +P = 2dba1d73520f1454b0ea9c0a088158c39bf6ba88606ba1f9b7fcba7f143f27 +C = c91b0b4638eb07855535761c85cfe3f7dd06251e9c03de8e7460198c194fb9a68e8ec96a29b1172b -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 06fc7669d68b8c2b0e35046b01a552914eebbb8cbb226783 -P = fd92ce9170ced693442cac0711dfc35efd46a2f79896ea045c359a006c1eeae6d80e340295ecfee20882d57928a941e9a06ebf657f02305622e6d176e8255a7802e56f7c3a20139aff4fd931ba33aa20009a10de3e16ce84f6fa171dbb0ca8ab6ab792d7b8 -C = 38df4caf214a4eddbcff7992e3d52d19e95cd24c3ad1f9cf54dbf556c7ad326871178afef39832d0694bde16a81e374845c7934dd1aaeb38d40c3d05b80d0425bc4da8b14121383b2869c96a9a348efd6ba5aae2bc7de8d19f7d8da1e12704b07ed4d8fa4db148a0a22c8a9e3e475bba +K = d92388950b0897b05a5e202beb152af1bb540bdd41a62874 +P = 4175c44328c0e518e58d6055757a2a0a727d224a39ca0fd04c50ba2500f82520ded19d3d9d7802c07e2991046e4e33eb5306c6e9f6c4e981c9505f5ce46f4431748f81b94862e35ce311e46fb6b17c4954b57e3d3ebfef45967c94ac6275e239d8cf7ec42dca87dc40d395e0b4c9895c81a5c1b3c56752d9eb28b843042ec20c9aedcc272953d4754097ffcef1eccc2e6dc65224518327bfc904435e57efc06836ae0cb824b4d516a9ecd4bf8d122bf6632f083e25aa6fe5c5005197b2cfaff409ce38fca64d19d771d60514262e72a82b12fbf1b91eef8fae23b503adcd13b1f74715994c8b88264b00a6b0800fbef5324ebd4939465fe3e9a7d1dc0ea05068c4ca4f87efa4fc679aa49666c115795184ad3393a54cc4ee67c9da90567ec468cdda03cfb3688e54441069d18ac7a9b2cc0b599bafde21737b772887f9795cb2c2b6005ad56e6133f51cd9b643a3ddfdb4426d518004e954c0f91a7ca07fc872c8e16230ea75cc4ffa3d6a9d6b22f0fad8254d62ca21c869de2c5726b066bc4d0c2dff4b23bcc0462bc70c52951ae293e65c8b8f01e5c45c845df93e2c648f7e422a6ba907b626e75a2e625d897f66c0a7ac5296e38e2718daab1eee40eb16b40de8c1a287f1ca8313bd7e51656366a3e8669d0cd3c31080abebc490d4071e0ef2577b33ce201de8bca5f17055a4e52ccb7f2cf45d407ab24937a503d3fa34e0 +C = 081ac30799def6457449300b5dc0f0920d8a0e4646ae4999fb27ca6fa9928ea422cd69d3010232b8c63ed9278ab74ba54260180dfd848dadde3eaad1e612f4057a633e3f6bc202adca87e9502ec15ec15bde9603848f7202aa66efacfd1eca538949b30ae453118864a9d3cd90fa458a7025d50ff8fb553150675bd35fea2f233e2ed1960236609174f6681ca0307d903998ddf20fda64451660b637c2f79d576000aa8980d61b61f1ca90c70b3c5011980cd541c50ffcb254c26f260d58995ac4bef96b71be9e6348630b26ac07612b94dac5d28a69a89923ef5b76d6629f71521e48a17818ffc43fbe01467b7f367251edc90b8d2021fde076266414925daa64992a099d6dfcc1272b91a9ecaa3207926a2203b51830a397ff8098a47bdb14e0fd762f7f87bd2477d680c3ce4cc3c3d46a3c43f95c55c8593a7040fa1bddfbd3439130be672f96e813bd499e0a09b7f574e0ae0b263a42d2378e355542cd780b21191e0b14bcb4f21cd0893bad60ecbd192260df069bb0bd64c1b824f9264a9ccecfe7f379595bb748922689f269ec4d107a0aa7fae76df81e10f74e9385fad11f8eccaab601a9d8d169203b7f4994f1226187b594fc737a3356ffb4234c974f381f464483e5a5a3ae6a35fa4758ba2e21cfcc9d51c9b0728b174a3373895b2920e903ea12eb35222742c2056c762afb38764e0f02545f389413e5969ebaf919e2bb6c72976db1 COUNT = 1 -K = a8e6706447a4b80922f830c68e7ab914ac6023d0848c1d70 -P = 2cf9915c16e8f4f004087038c31911254f559b6fc31f0884e14f6b5714069b10c1d65216b1019f17a6bddd76ed837e2a6061146026902f0928c9cd5673c7914b6fc13232542de94f22495653ee65c91d5bde82e429543e7d469c8eab0840d562d42db01958 -C = a0b01cf62fdb7f8cb85956861e664f2dc873644ced5a74152fff4c72120afd88c9448553cfb8c012b752ec91e7997c14fc0d017a897cacec3e607d5559e36f29acd844a595d6d399dc81b9712adf846ca08e5ef72473d7914b2e688ac6a27de6f243c6e7219236054c71bc538d40dfeb +K = a85b4359ebd240012ec749459bc928eaa52c84e887ababb9 +P = 9db71e2a2d40f6fcc1b8311167ae13fb101bdf7b5c4e078373c0c3cb3f3a3ca39a91a6985d3fdd48d93f2b5a09b2a69350da2846ce6a37d018dda95ddac93a92fda7b7c3bb6518dd78f367f70e34e0bf19dbba46fd13d3f3e0a1776350f27138c64b177aa39c54dc06184b320016b6305c2dea19fa6da634cd613d5a4f71bc045f555a1ccee39b8f1ab90840b5bae555932e08719bf38f72bc1057875e8c077a70629f46be91281b977ed6f2a71171a7cbaf8e0566e55da6220a85a7655758de3b372144ef76d0337d3133004c0db096b2c41f524f95706247a331d08a6ff72b425395fee8e1ad308ccfe5b0525c40803e529db72063731fe1644891bdc0d5961397006e1f5d6521ad4e5aee3544da101fd3cf6bcf879220a612b7016e5eefe7369f136086e8f5109ae83e8687519f2008406d20992b64ba1d27b436ea5db1fd734340f3b2279e026a96e3f9c5c7b99553e35ada9e1d7d708a73774718f9b7073c0889a298f212d47ff5960e04743070338f99b11687396da2120b8f132535c0911b04505c0e6c32590c82bf59486fadfbdc0f16a224b2f52082eb66201f041d64b34809e5e91cda89d80d78fe1e15862bcf84f65a301ae68d097c9be09f3411c11cf83225733dbc9306ad2630eb7994a0d112ba83dc542966414137fd008fbb7995f649edf844fe5ee86b94acade1a04f42dae21928b9b0cdde8cc66095772d +C = 72880f9f173f0ef4d99e3ae71f6f3b94f66a08aaa22be1d206faf431718c1a29bd0a574b1a28b69f0e64d56d3e43617dc73506a939b7de9005ef0ee3f02b9265e91a32aaec58b7ab990f39774f6769c9be9ced3339f6bf0159055abe237c4c755613a6c03271abea3bc89527f284a3e1557ae26b3910b779a77a128e773d11d7d641479d02f4888c989cbb8d928da0136b965531730a3c0c32404351f4c2390d996dff58985ed1d4f4021a5d6ccedf4555066a826a04055cdf8c9c44bdae26619390b3e22b064f86b28382094a3e299d55ab335ade601699e85f19d6f6f12407caf84ad47f03d75198691f1a9b2aa9ed95e508d8551b19601418922f3289fc1efc3abb1ebc2f4886dfe325cddfe25dd908e5aef8ad197ce2703e692b9c46a12201fa71ebc2e323ff8926ecc059ffeeacc0446d3f28496f17f1b4ad6504e4e24188862e25f3dfc36adc7f79920d88e6c53269cc4e5dbbebbba1a2347154683c840d178476ae11d6ce574c26b8b895957b8623807e8831b87b5639aeb415adf1bbef394046deb3bbe91a5c17f2f67131ae5f696352a488e3bed40df025e0a0846e0037847350fe8ae3cf73141d0ec550d82b89c05bbff7337bfe846411d3f0bd012e4de2fe5b83c7210214c0404b40e08abdd3f4bc441f9b6e1efdaa4ac13b85d139f670a6060a1ba8d2528bcd19f241d9ee5077d20c120f2b484c67c9c598b1b209824c3b8aec2b7b COUNT = 2 -K = 8f06e1dfc85d1c2f14c4dfa80dbe5802a3030ad391807e72 -P = d9b47d425486ab3b01ab50a1e417a75465f205f580e2ecebb20a56646f4909ef132cf85aaed8cdeb40e02d24def9651deb4bd4be135ad816c638e54834d34b27de60b99d10a8714df95fb70774330acf04ad1dbf05814d6d72a8b237a39344822771b182e8 -C = 8464cda49d2677399f5b32e42dd728158f82b850be0d9c13b5501323d08b16840404ba899b308d443725d099a5e3e5b1e8f5b5eee81dabcd2c8ee409016e6ee80c8e78869809cd656c58a2553d951dd94cf28123dc702c48fb7c2faa938d34fec6ced5676251fe456f26d39f0d672105 +K = 055d0211b814a54e4910fad59a29efc7fd294bcb6a1e3282 +P = cf0979036bc53ea94da1b50d397c1dc95924bb4428f89de4b4c52ad6687cd256353c33e42fd7e00ed583cd77790bd26d8a333df376ea1074db6a1aa1bc2e700ed9b3670bf341e37f543d10ebb4210195ba11af16318e1263bc6657c0a6daee845fe8009ea75f5eefb95ceeb446ae111d593287ffc56773029fca5e7be9d941d7762bb9db7966053d9271184e72f8cf4e53a52d481834b74c00e1782685e2263e8e89c9a283de308a299cdeba00c25d9324a29878a4a0a2477e1edc326277b8048d950dbb7f4f41c899bdab63e730774f3f3cacb8f619cc49b9e788e29216e5e44f86337c4630d96679b5110b9f8ba55fbded02e470a969ef873d7ba5d0c0365f5885b46f37a19739a7977ed5a8f9803419b5fd496234d670a67fa93b24683372d86a0ed73c7decbda3a2efef09f4bd7340a719c3386cc2e2de1be7206429bef3a3a28cb4c1b1def377b3335862adea31973c5deb61e788139192787c5ac0f1679b60c0aaf7e524bd47a15f96b1564325c7fbf74b36a3a1817a9823d972fad821a91563ee8adad20b7d6b41b1dc3a3a078e6f9d13efe48d27ca2aebf7b5a9199fc947e976208a3338f553494d04b7fe49d5c96db1fd2d37fe2002558a3a5d1911106eea8c015c76f37637c8dcd4ab57a7f4ec37e17926822b75541885daa77edff9a6c342ff7d0c82c1d8669d35a78135bee359e317e24fb73f8eb69b0a2767e2 +C = a3e93c95f4b4fb4f3030f9e8334398f25c0439871885bbbbd8abb6d6653fcecb708df339c4b843f31ad7b0a7e60c3a3dac963f1ed4cd874d909e1afafbcaa7b4ab18396235ea76c35fcd0ba75ae6ab506c6df62a312564329cbb162cfa39be6ed5debbcd5d3b12cd11afac8d23a50c9380b945bc80e7fb7fba89da323bc2b38c7c9c7d121c8f81d779025e83436639f621b73f156bc453601c8a08a6a443fc734e93d02d79196144f48d09519b06fb7f542d49196f89e06f4786e662a429aeda82c352a76cb946ab52d15751f9d34b4795813041fb9086c8e5843f620d2a55594a18f599635b36acff11fdc8088d1c7be1de5678c2f4a8529c3b31412c1d603b6038b6afcff4e3d511c3025ee6dbf82acc1410f7f79fc888bdad675c8544efc669f9ffacf4adfef9cb2b182322050b37211b2a52afd1846000bd1fb2995f32d307cf61a4b7d346a92c8fafe612c3ec8ee3488074c3b4eefba70cc9f78d5985f83fe8fcb2209863a13af4f669fe87e20d823e4d39a29fb507e1ac29ebebf68dbfab1257e50e4233fca046fef36f19cd4aae651cfb3ff2ca69c385c4afabda54714052a783da8f014f725f46cbd24b042bf4c7b32e397ab07dafd43fdb8419f2a3a2c499711819890ac477aa999e3fb89112f49aa9d81fa299124cc3ba690928ccbd086f0926d1db1dba4fbd205b67e38e876c7e49b668d92dc056aafaf5acb021e2cd9ba44f96fec3 COUNT = 3 -K = b7035d7c76fb0d22c7d1b38942a37a3307d84cb872095f06 -P = dae5de8f3dd4a1ea862016cbeac50899a7c3b49b6c31a33193b1cb1e9514b61e36ade64c83df40840573134e33b010491775cf4c2818df33deb3da0dce311e4faede56c0885d10094e572068dee04f17092a99014227f932091d5bc8624b2e10b97f02aa7b -C = 7079661df3e258adb3826df4060cd69952970761958fa306a797d2d26aef02d1278c686bed1017316da928a6ab703e25cbce56b6b5bfb0851ca683abe2b617b725a07fd3e8851d0630252e9771f864cca23255f89589edf672a5d5feb1bb018ddc1c70b0e5e9d6ec854f41a38a130695 +K = a54c5538e64577e1f68124c5d30bdfb906adb225b2105b58 +P = a3f7354e6218a8aa15d588a1dc0f537e5a854cd189f107188cac045ec852a7fc151cc9d58c698f39a83c2aa229bb9c3712942421d97908f725f88cb56668bfd1af8b8a19c1db23d33d14785ed08d4f623d43e0dc331ae17baa67c14c41bed1187d691acec07991a2fc3627eebf7395c32cfcd3dcda1aceadfda767b9e9d7c4a96344e5f029a3ff59870660164ed87eb8af2257f66265f901116b57e516e4a2eba510e459c81d2ab7eb0b65fb1b1ff50a393c8c6280e2cf80b9a6f6709fed08113bab951c368d90c537fbda2481ba78a1cb4f9a57231368336e658839b1fefec886e6be7e3b57471406cfe754b8936c8be76fa5d3e0e7e36fddb4e65c773d8afac1f46131296c2b81a34dfc7674b4a87a4f287ee9ad673aadadce8e16a887fc4d7f71d6b7088d807eee2de62f460ef348e67f51d5c6e50e55ee68738a770d9fbe6572ca48b7d7df2c2da98c914a80991ff15a23fc555f70d1adda184b26154d06bb812ba56d36e8239b0b9e3bf28f392f06281df2b339f393948bfcee157206681030b78d412426b973e5ced2d9bda1dead32fb9379fdce2a70a8fda9ea5fa31627f2a638b0b90d4a4248669b4dd815f9e2c9d495c21925c2244fac30a75a37142fca4ef83974b5e5a42e29ba84989b5bf7f95456b25b72f6097f5f99bd1229d7c8fef3fb31b0d8f5a1a5ddbdda3ac05a79a61460147957b230ca52775416d12e +C = e2cf8f9888ce4bf857f237c1efa4978229ff34b8d587245a82bf35d9bea7a7b4efd1799ef078aa51fcb7110ea6d76eecff8ae3512379053fb31bea932e052467854fec5f4f0d47a698189c9f8c13891c972c3b4704fc16da8855f9590666deec9fba8324bcee8c9242eabe260913507bea8cb14936b2f5710a1b609057b0ff659569a9f837491c678e785d9bc2b7d2e7073c2a0f63d329428d76336edb197028c23c8170cee9ee4c0dda26a3c6eb468be6a027bd006a3bd755650957a283c9fb674d9d5fb020a4dfd5fed083eac0dad70b8a352fc818b0c70ee46de36a49057cd736e43829a9affc6e99a46545251fad3f4f0b7bdc22a35e203e679e1e0b9f2688c509887a70e71ba52b98b88cfe3da581fc6f1c24196c83b5dd8b85f487f51de3b5cd209c8f1e5ac3d3c0dd184b83595553dc8bd645ffeefa1325767b9c7be466a9784270a15381330fc30e31f2d3ad8b284d372b5aeaf1b7766b0c8942b79931cf87753185c424ce2569be2faea4078b14f35b2c90fa754c78781c07c5523b5b8e8e5cd3b4acb86734022b2f67a4a74b58e91aa1aea73e5a1b4c036b6bb6a8f90472eac20d12d3d53e7fe0862cb587fce5f720337d558384343d3819731f4283dde35f1da493e45cf3ec4f000629d2cc69471b8600d181acbd2213fedbf0c165b890dc92b1583ccc910fc077005a02a7b9fb55b27d5eb681d0a2e6a79cb0f24da3fce528a03dfc COUNT = 4 -K = b837d1c2151422c4ee8e2967ca22098a963c73ef547e7b61 -P = e9905a584b1e66eda00caea43bef18dea46453023a2e5d07617bbfc6e4d75dd6b231002796b29b1a9d8afb045a98fdcae91de933b00974fdf6f2f7a8ec966a126fe1bab2d3f85bd8077cbd853914d5546ca098d7e37617b768e4143cdb0cd971a63ca45116 -C = 86c5639970e79e6f38fa1e89e0a668ac0d36e2844ef86c9ed8f3f66e48be086f010896282da86998a3236f8cf4c54b4944a9724208388dc25b92773799b861903633bd238fc0c15ae139cd88ea640b498a4cb66e434a597efe9db07225d907e7b2fad2d54ea323a4aea2bc4cffec8acb +K = abafe2dd4a8055304df3c9822390c5c8a764dc4dbd66e264 +P = 49a61e3b54e0ce9645b12ed092f538c840e52d6054158db8c75d25ca76e37c1ddb6aa2b26e6a6155162441de6a39184b8d8dc7536641c49d21ab7c12a8017564f611747d4b832578431a37d959464b8cc00b3a50cff2163f73fc3f96d1c1d28d6e7be0873a797c78453432213fa0c49dc23e0572b315fc83b74555eb37acf23d2f233fe9ebc6cf0223cc717adde5d6e75a22e3256c2e16f70bee5debd87ba150410452ffbe1711f4b06c946d78859ea283cf834c85c9c2528576caac7254643e94052764161cbaca362b38be0f23411df70dd8c7db2fba454a476aab93e70f4eaea55aef158f9aadc6052b0f930fb2122c96a490c97fda995d3104e0271e6fb991a6ccf65e573d08a0d196f984e3eb4028c5a38a530b97e6feb43564c1016ee9573e5280539f58b422a95026e172584d4fb77ee3019ace0a8e4fd65d1cfc0bae6369f0479ee8612d63fb06bc11a7a47526bba3cb1f53e68c610f19ebe53b7ff78d0940986a505b2bf14d22801ade2e834b08c3958f8a29f60b21b2c3fa929ec140bed3e8590358b0e5b4d4421b00ff805f74e0fe0c3751190d0d07c4d3f949caea6d032e4b08f116288b500b5ef6fe7bdf11e22dfcedcee38209ddf910484736b7da34c958d1edbee7985a434cb36af399189449579ad58546362584bd9800273961256d12630732954bbfef1947305e33657107bf8cc1952bb4f9f3670fc085 +C = 26c2c48f3c0646cc7229eee3a397e9581b8a1c69a5c5b11a22ac33427b45c8e2876ec4b2f848253f62fc85b674752764d41c6d1b4d26b82519c2627eb7bf22d012901ea2e532056de99ebad85ce8a2ce6d393ac980f248a0a24973aec5e66401875896e282c9e25c2ddda45a6ad1b09003a595c9bcdc62462c480a324a398c1a21b07ec6c232ea43483930e68769efa708e2d7d7d1f5bd5f4c5943c9e3cd99dd324573bf4c9172a63b92ef081a9fc411d9a156e61a83674d73f1d7bc045c9bc350c900b17e1bc1a175fa0001a1cc7718382bf094bed541e1c464f1eb6497fadc93e53cb9a825033d0aa57a1723fc6fb0a698f78f8b7501faef70bdaa4bfb3095e7ca8a7c99f574760c9d6fac053117bdb923dfb36bc7b7c352c16d581667dab090768add6c76bdeedf4bfe362b1620036fd9a1ef9728feb3a74ea6f855cdf6529c95bb85de70158a0dbab59a50962d995a83d2b35b75106b460d4dbe565c2cd6fc749039e7b4f24636abc81aeed9ebcc6dff9ef2c6cfbf9e44b0a781220e6b65da85fc91f339d3a1af485c7eb1a0e0a452003f924c7f58afc831341c12978c88f63e8654003b78476f6462731c58b43bd7506fa2453c9ef0b2d369a5b7f13c3561e8045ef3deb4d9733c79e5f6fc61d5a36c155f31ec72bdf29c463b9fbec889d15549b7cf49b376fadb355a0836db0486d06c5d2b0f4cad2177726c1df15749b8a16817219db85a COUNT = 5 -K = ef435e6053fcefb6a509ead119566155dbfcfc283a0f55e7 -P = 86500f6f594a32a8f9a71823a0fdd93cb2077853b89bcff028873864bc07c7822a0fa6fe55ed44b2cb438e0ad59efdd007a8d4655a3d30a75b750dd22be9a51d55ac0d86f735c3dabdc91a99159be50ce408df6a0b830493a07c147abe68a5218b1411bb39 -C = 2d61e639d420d6562dd1a25783949fec243ba65e73121228895b5b8231d2b7c7a516bae6c6e1fe9ad8e30bad19ab185b04459dea81603fae9fcc3985d00a54ab62fe3b3e32a2e5af1373067e35dc099a6534843677865c8c8ac236df222b9e9eb9723e8bcb01741111373fb12a933cc5 +K = 0325bbad3d420e64c2869c6b1d03ad200cf83251d08ecd61 +P = 7ae289d5ea0da2bc85c47bc1dda61e41e75c42665c3ff0b1090e0973323cdc6d12705e920a6f968bcf194a17ec4c2692e66a8a9bdd1c631bd7598d68eb30744c64a1885a5992eda6d6a10642ef9dfdb3302638f9544433698ad1ce2447ce868f7d4ad21c5902c8ee4fcfbb09ce8e000c8fd2a6ef4082207a233ea804f8d5591f5706de24086ef09f0ed1b55eb8560db575301c75ba9d8d568f2e3897feb125dc48d632ffc50590bf90f03d508b2ef2b58e1e90ae2bbf5f2649a8993c5066ac32e7b3bf3eeb3311c48c6fd6788d7d7398bdde7823436fe0037ed93b6e11cc2c6b9b09bed3fa5704503d3a8140eb5170d78b7d993bb15e102c6b4962297595ce2a1c399580448031596ebbcaf69f5b62b0c081e566c85476c8d9f2908b8642f813e05e74035a527e868b5185e7d99f8f9f67694ff98f874644b9349cfa8492422cabdf41e1df23172f5121c93d4f1c80c87a652545d0357084fe59bf7ed015358bc3cdac654273f2b88dc82f6a4907c392fc089ca5f1348728266657743f503e5f732d744fe71cf2ab6576ac1faf3263500611281db7b1b95b887428c9e9037dd0e29cbaa2b1f42ab9d66dfa43f8aaee14753138a1297d2b61e44d457b896203073f057c73486d7c51a040e2a5b509e04da640b59d461ed0e03b95f3c2056d9a800f0a89de49954d00af58206abeb818333132823405603a06848a38bb368a3a24 +C = 0dc49b9f1242f31dc796ae72f3ae1f45dc06cb0d03ae21b33b2a8324aecf779739aa4117804dd26f525ec3240bfb6c457759a121005cb7819fcf075c86324c565b64106a9df5645e3aae1ba5ac0084be54e6e07cbe1757239b2a95d5a1d58dfed639abf52a0b67102bac136600e95daa57368dc404ae342f9f22790aa4d96aa9d4cff71e732bf6df4258d5961826f324fd80ecc75d555c8554ff0c87fe40640be56f9b67ba718c8d22504397968193f2c9f62b45f6856f980911cc4f2c25396ab635510b03f77891005e348ff3aa83cdaa0431f62e6f2a182f9478079a9a2caa493a19144867d0568458d128d8b0c3ea1ebb49bd6afa4298236a1aea1a31516484239f5519cee67031f9817dcb0e2a8b6ab48be7fd0c999b1f282a0813d0a585c95a2ffb5d6d06df3b8c3d0f83f2b924a283536cceb19076bffac25a7a9478ca79027f702ea94ca39beced985e1203dde8d3c0c22c7a51c93e23ae047279e1c5991a76ef45ff9b8456deba4d8b2f65c3cdd088231f115e497de4acf6b7b210db3fda08e307fe86b34019834ba2af713bd436d15ce9a40c4ee57f768e8675944ade4e8d96f2250c4e8b8308802f23b2b5643063a7386fdd7ad8fe9f849eda808bbf98000be95da085454d499d51f575e88a7b41e4b6be9a98beeec645de569f29d4b280f35284c131c967d30f01eb6e107fee271fd9a84288f9438a4ee2c43e6fc875a067adf01f7f COUNT = 6 -K = c1f4e60ac3a05b50e3d0c1742a18800f5162f33897f72e20 -P = fa1029a116b9f0b748dcd1f8da8962c256e2bc55c3d6643c2bd15dde178c2c258e4c679d34a47d071889d3685572efcc771d16a1b51cf7f5fe30f4d6ebb0f90157a962a305a0025d39901cdff9411429c0c03f31f2e3eb8e3b36ce73b1e9257f3a4b52c8c2 -C = c57ecc5191211bd797b8278bd157273ef864de03b5bd588e7fe4bfcf768ea92f67de5e6a07da20aaf63268d939c98743cc527e306bf02a8712cd3567e81a98a11a044299a956b5a2649d2ec808dc197910ac85c7264439103978e5c579d7bdb5cc45ff9b9a57165d9a32c891d0508879 +K = 050f54a19e06034ec3f470674643d14773136feb8d2acee3 +P = 99adb6c1a04e7cce21d5b50f55953f7b032a423b1d3297cdef75cda02ef56dedc9042ced69511cb45dee507fde6782afb48f8ef1b00b6171dc3dd52a5a7eab39ead35928a12a10cc8e15e03c5d79fb50b8b819c8bd6ec46da9209d1d70fab4f0b02e12175ae6da912f8ace93d3c3b2cb5052800a5ffa05843c9cbd72832b80fca83d0b89326b8358fe640c0062c3088ed504227920847b8da986b060c5587cdd89ffc7f4655ca81c0e7433b669bbddca8608587606e718d4d064bd1503a3fe0ef1750dfcae0b3184e1dd8783ce843c0046d268f68680936f787e1159a135f19e54acbad14da7448c945c1bc943b6dc0efe2c1cbafff95e810df135b8a7be89ca98cda745a0a6b6c3887a9b0c7a176bdf0d9cbb16b822457e83d666a5098c22778ebccccf4ee424a76f42e3310ffcb356f40643652087ed3c03c63a24a5983e43deeef7e014da46b28d6c876d5133ade035a64225f00b1a99ac59245d7fcbaaf472e87f1f4dddbb76fee29061ff4b81b280f85460961e4a58f3e41f0cac5ae21a1a947bb65e15b5a1abc9e618e333587b22cd5bcd4bc4341c47cc7a422416be984e91a1e3678f478d5a1827e7cbd7679614d2e8e8befe1e60efd19c0bcc10330b5e1e0e517b499c51a0c61d7eb3c2afa981d5e50af5bfba1b939ce16debc7bcfc786d4e12303b9aab5ea26ee1e8f9e8e294d105818bad0aee2de0d23b6313b9c4 +C = 41709389a571e996db25eca9c8800a69992597839949e3b2261a8de7eac0c8a5bf4dba16d6721ffdde388c63079d06d5a9c1aaa3dbfa9b3d4a5286a1980c3e5a65256cbea20d80aba11c658afb4ba7dfec0fd968bb27ed5fabbecfb6b8b27e44fa5f36a33f36d158cbf94ccd91ef475c04b39069e517ce91111c2baadc5877159b46bf8c2c38182b1abd5424fbc0925e32be6079710d6cdfeb3dd58b1c122d665342b16694594722fe382c7cc63de0e2967c0a393de08c06603cd199a6910be5a31bc6b5da48dd50dba202999cb6086ca5696ca29bfc2bc58656f06322fef5da25f138afeb99225630f601602d8efa00edf99975415e736e1073650b2bd99b2f41c7e7d04e9d41fb39176ef5c6ff6ab6681aad8d91259e2bf441ddf536f5d9fa6ba5786350800965542396a2458d38d249e65eb73eb0a98ccd759f9a3d269cc9ee68135379861feae4eb539d058c010348ea7e916155c34c6f85dbf1899309f027e850472f08567a5d1b8d15eb482605dcf735866b958fffe822d8654763a3d1721b21290d8c2983072ff805b73de70a031a0a6c01595cffab159c94203aa83db9a6a06807806634bdd5f2c73f1e4d7f2d539c9fff5cdeed078225a2fec8768fbae5441642eaed5ea5ff0b29c81bd46bfa9797dd40364b73c6996bae05b8d5b50bbfe4c33e99dd9ce341ba7dd9d420b136bec82c9e6dc67f26df95f8a2251265da95e8b80d2599ef COUNT = 7 -K = b683b31f334583081e974fc0946f54763b8e27b3ad5c9b2d -P = 81ad90fead980d3409534148081b5fe8ce53f97ef37edcda74566d067e9a79b6c68a3d05ea053cff5a4c3d1e225a06f20a861775343d5466069a42acb1bdb87adff17e8021c62902e4fa39eb9824e05f444e515ab946236fb3a911d327f3aa7ef4046a4605 -C = d248f66dcfd8d21a091e4f8432e313fddf22fe3a73c3ddc7dc4d54a3c7c7dfd485c335a1cf6cc4d62453d7676c163dc92da8eff6216d799202bfc2c4ca5b03f3d9bb62166bbc8cb8d8839fac57d90346ff7c03068d5df46082fc73bca7043cee8bdd4f9189869b3908a1a8b3f9c043e4 +K = af70bad7a56a57717549a23eaea6e85aa732d554e4cde6ef +P = ef6d2562023056ec8f81702d267de81dc796499ddb500fe1d66f5c652087fdbfc6849021e3fb0b0aabda7879fc863db9041b14fa741f1af922d8e6f1d19addec0468f203f624f4296755bf26d196a061cda7f876b2f2ebb4b083510e9790f9cbd7a9bcdab1b024b5bed7e87dbf022fc1f8a6460a46ac4edf8121c9c927f03e7c1798be6bf6e403a3da92a8289fc5fac408e94832256438ceb58e6f7cd4ef549749c1b9e5423d675a8dcc4fb52f017ba899584a0719f1ba4eefc6eeea772741eb7ab6104d0769f9a6fb6a1b7ab2309615803a2dd4f545265d0eb35ba754715a21176a1cb2a6f6978e36251378b53435b1ab7fbacb25caa1841c73cfc4f790d8d324d459686457d48f21efe651fc76be1228dc06a7896bb561198a4235c7e343b817c9caaa6bd69b85b3ffbf4bdec263115d9c5838dd80a5f646a7ac7afdf3b3844f110401ec37e8068f48d1aed67a148f68a1cee00d032347337627a038bdb08925f2326db1973d1f52a1cec788e96228a0cf58800d60f79c33ff4b498e26a93273a7f5d6c45883557e302d11135e8d5e1d0f2438e7d5fbfda5afed796fd357bf2332795a4b6e5adc2868c1dbfa50eb71ef2cc2ff555437c9ae1edd9731fc7bca9369be510775055eeb140ae2ffebd37aed216faf037e6c9c0c3c0bebe95aab42483668899a8a40a6cf515650dcb3bbf7a35c0a1ed7daf607b6bd1692d468ad9a +C = 3a8a7dd47836711505a0082c348a8b9398766f2e402679262989a054d7a350fb15649ee63ea2918fcb95e77bfdce5d59d5c85c5fbc509379c4b7c323bc81bd6da25352bf95ee5328fc7542520e980216d67edda76b9a5798c2ecf931e4ad61b03be93728a19e18d449421a680b8a240c15b7774a1dcb0cf4dc21dc124958462f51c9cee03d1b9371ebcf2d6f9e8b7af1b3d5057e9a61beb7abaea71879cc214c1c9b04d852acb7e5c62f2f796f0d73abcf5541e700161abeb0995faaba310a3b645477cd69097153e0ca5916a2f6965ebb06b49edff836377db1753ab3e6ad21cbb7df03e2b2ad65e2b2e1e732f5860d8c50ff2daee6a8f7de8e8e9a75a0edb167700dac0bd401e8c5cfd23b24ad2fb81c343be8e31c395007f8f8e33f5c05d58bf8d8cf9451c021b0fb105913e9415bd539ad248b0a39cd18602c9166981c1d311db23534f863ad5ea4c2092a50edd5f2f2fe27f76c04a7b6345550dcf230673a567ddf726b16f641555f3b3fdb5991728ce42c2bd4e5ca029e4a53d3949017ba2695f2a4ed0f90da1dec4d3e06732e0e907991dcbc2c06d25a16a85c625b0e2f4eca89b41adef864a27d6d78eaa32207fd5b8ab991461a352b0bf7c9ca0c952317231565ebaf4122dc2c6f9ff9a02149cc32cbce948a5a9aab825068928d14da62320f8fa7bd06be274db19dc5dd241a5c2995d440a2a2cab04f2ff027e6138d88da8bc0b438c7 COUNT = 8 -K = 24d5e6109e889db0b1c119ae91a39e5df2820219e62d94a5 -P = d79f4b75343b7d8d8a0822763fddd0b6f0455d11cfc52e4f1a26614a77fe7ecd8482e7992a10204bb6590bd776c49661a99d83e1702b11e7de0798360099e60e0aae9f0389f6fd0a9dd96357ef7015d9a0ac70350b540d4106b8f308a4dcb27b0b25949ff5 -C = 942db78901368f6782b4417157915098b6fd4b5c0117b6bf146727c60a1300fc239f855ad8f50112ad5095b917729b270e9a27be2cf4d54e1e3a98534861720c0667550085ce7abacdff7cb5f26c7288cecc5fcd098481ae92e9a65c16c151c11d93830d433dd4363e4d5aa5a2ecdcca +K = aeab4dceacad8c55f28858b9ecb641ff4bf71c4b57cbd59a +P = 102285aadf37575093d003d5b898f2f991385474fe24732810a089e203effdf0bf6775ab2c1914722a6146e73907c403f79ebe446e226f86d82c150795adcc7973e8daa63504d1d882c3fd7fe12097f7b3ddd591a7c32ac14cc18aadf0e392a001e6bb93d60d61fd896dd924acba2f5022598a303a1b3887219627bd9f29389985f521bd8dc44ead83d8b37a3be02f4385c06d1910f198d0b0b20c100279044e8c31ea565a09b2c1954ccb1de800fde48d0400b8f08cca9360413b608b56a6e87a921caac7fb269c2e3a0d27396d00c47140ee4ca1717461c9e2902a772f44d663f0fbf996aff9177ec8486819d752c62a741389c50dc9724b31fd1ee788bc6d988a1dceb630f85d64d672c70bf7f027a6aa391b4c9888bce31a2db401e44ec8569314b5a651ffae614565821b413d5b02d3e7a155cc8c5f951b9617f83244fe45e1138b4f72ea830f4e9b7468075de9310b63b745d061ed69020cd57f736eca4cf86cd290ee6c5b797668afdc8690fe39c59c799c9f1a1b5e21c2f3eb59bd0eb47748f02f2ab8ad819e4164c322dbac8a1430255883ea964b415be8e4ad6c332674dd2e42686f7e30e5352931f7525931eb7e427d70d0b5102b51850d3ac936c385dacd8add8b91785b461791f8db858a3f6812d107932a86500d02e22ba8213ff81a1a8d0a502223d50e6c8ec3b719aeccba1c98798abe455310a3fb2d8d18 +C = bc557028a8133636e10fa5dd84e546e3f653bcd6736993e6a286bd54cd04584f18c8c6e1ddb092b46ae16022842c43be65b21af58ac90e29cb89013310e1c10ad1d56dfda783c5049d2f26b87ea1d942e4c629a576b454189b08646a46fe8af7e8dfa28cd47aceaee2c82d83217c0ad0a19ec1b2b627f8c1b1797621f129cd93f466c79e24edc1a28d9abe7085a3211d21fb6e0a2fecbfbac83dcb2161b60e3be161f5337bc14ba0ae1d88ca5e8be0e303c731376663bb028828509b7a864a77e62f8e9b792dc36fdd1ae29db9130e4856585305fab568330273dcba3b15cb73110ce947c6a3d81b8a4f649946b6f6d9271dfb82eb15be82710e0b47ad4bdc6926b676d0a572e8242ee929dbbf184d78eabdbe97ffbfa5adacf43d8a3f788042d5aa49383ca458dd058795175417e8c57fcd4fbc7d138ab7cff85115f205fdfd1cf99872d8a86dcd04e5c1da633fc02fd57717b204698364b7394f765d110c104beb5560c36da9d682f5284e2b5f62401a9a8e5f33b0d1033d59a9f21be1b0ce9f484415a25d3266249ef00179c1939cb755cc8a73995a666f6c01c9a9ea87d16b06d9eff99c29e20d9f03f1b19b268b8b4db210ddcd82abfcec309f3d9f52b30aae511c5b453bb184024fe8a45cae7b15282763111ff1974747d7c04e463ec5818871942b59a237aff7725415486d63c8515291c1215e485c0c5ab8733561c20e38a9cd0281dc34 COUNT = 9 -K = 8881b5aaabaf74b43f79d9c562b41a84db86e077304be0b7 -P = ca8a27b4e2e277bfe81184a86c64317848d7dac05d57c84b755060d82df80d4e7ccdda37731331b8531e8d42854c3ff69deed7a0e0d1d0d3c9177489282d71cf6638f9ed04e2b7be42e4f6da3ab5d3e43caf36050f966441e332cf92d64418c1306a8ee0ee -C = 99ae32fbe68fe1bfbcb2b725543ffcfc6b439e0299b2317afa6043cdad307f8f911d716586ecd0cc9d9482eafbb83a7bacf0f94aaf92c499c53c59264a6cb1ccb0c52a2f3aaf9278c72011da39888f2c1d89fd954d3fa4453a6153bc34f501bea5bf576ea62a8e1b63be8235f5fde39b +K = 5a4ff10cdac48a722965241ac05979d610885e1b3870dc19 +P = 80d04dd4b2892eb4df212d71296e6ec4dd9ba61d7f85a5f40435278c611936e025711a426bdbefb83f6100dd0183212217c46609b7625eb9a6ac5e7cd5b1d15c16f04762cb29430d9692d19d46e9b90ec33137f10c7d47dc4b5a35d73429cac7a4f7ee71ed02fe6561d3c0ed64d5bd7537f91ff7a1971510b31cf864c21a6e101fa1e42ffe193d1f121aa9b70693431ce3b4f478d08be025821ef547db100f7d0ab0967f40f4f04a8d1de8930f90ee4d338439b31c6f4d75a67a4e2cb8f46ec44e20533db1f613d9a75afb5a548e6d389449655a0adde66db021d2cfaa5f53a8391f513a52114a13fd69125fd2d3efe6045d54cf2f7ef8d19b6afc31fdd6195d3244e70fe9605fcfc8ecbcb554cd702ee373500d84145c750ded9080bf47e71e56df84568b12a3ea2a42f7eb111c8fab7ac009aae72adb0575f16e4a72a5d1afe3e7fa270965988be1c79d3609635713ba1eac2644521554df4a0450ae117438584eacb383f844467b024e9bac60f972abe97016c281ded298ea87f900c38c0f30c4a8e22d027954bff75fd9d24d09de230c3c0c1a2b263def744765786b211f624c580c25b68876156261e891157d964f00602bd1d6cc6fa50bac0151d969486e52f9792046f0ecb1ec43f7b08507739ef59fe77f9660858b8fad8735c81457a8460659383342de9103eeca0fb1f75fe71713a03c24d26d9854649263e4a9c6 +C = fe601654b6571b496c831b87b945d7549ae112f3d104d55c68c0448b7442b5bc972774d17d6004d5356c246a6d16b406086f8412177a83bb14e3119dd11cea886b5ec8b724f660cd7b184f447129003041b3dd4cc93be870362c88a5543744696c6ddf2ef7a0de80b3b963feb49291461ea509b8d35239df4a83d3eead629e44e40f872a007acb872d51610c7f5a610888469089be8c854512ad4cec71fc5952cb8a7331d48a73b1de94bd35124569f50f6e4b7f7572cc052de6fe41ea7df9ffc12590b0c583547106988e9d82eac1921769234fe2d265b084f0c19dcaa8c33a389f80cf48e3dc85ffa059d3c288419db07ca0b0b64c6307aadc0b4e3bc5f378dd55920e97097e1f3ea1f85ab1e2181a4b23b94aeeab9251876f86ba3f6bdf58f0e3c81ab55ef0872c5faeb62425bad42534a4828184232c31249eb48b5996bcf4b93f671486c3e5cc00d03a15e36f4b74b823a3a333c9d2523d5152cea1f8e8375f16dbfafea5af9ea9663cbbcd287f220436e107955360eda118a4294348e7bdbe176afe479ae22efa43fe5e58ed21f92b84c4736ab94f754f6e6dafc23c961dcc1a00fe15a348d8e37986380f2ebcf69a80969521fa7c80f50e6c0fefba098d3b6c7607a55d55c07dc6bfbe7d36d9402e5c5ae075086162697fb742284b8e439c964907d2fcdfc74d7c31e93d9aff4bc721bb8beb27839f6470771ba346e0e9f1b000df64adda COUNT = 10 -K = f97337195a808ab9e89a9e5133b45f8e38def767a3d16638 -P = 10e734ce13df2342f95d44d1f06fb57902114094fe25adbc6ef190035033c5acfedf08d920b4fb6b616b177ff13ce7c15e600109b8de8b443cbd721f6ae50a02e801298da09da43b9e7aa67e2f31e0e8915d5bacfe87da256f89bbcc70dabba589eaee38c9 -C = c0cdcf19b91c8cbeeae5b16fd1b4870ef47ca19c5678994ccb37676d4312491aec49cba0a99794390e6b326ee4a9f3a7727099ed0b5c7af9ab75a9752b3957cdac7ad3dbfbcf3781d41eb756b21ec3b9a5ea0e8942f59f1bb4c83274f92800208807263c2f13a5a96c5cd9817133c72f +K = eb46c502e2e353e648c321b9dc0736d108ed335292c7d883 +P = 1572a3e97adf7c41cca029f7ccb1f78a30665707e65e55ff5a8d1862843e9011134fb3ebc3ecf98995c7b45e34356c0d04d8abd8d5b05f4ec199dc4ed6d53399b2cd3fbe692810264438c22f004f7df439cbf56304c82b3d2836042030f24b3babf8fb3fdabbc3639aacd0c193fc0aba4a71484054e651835feeead4d2461796e14bfff52e911e673a6c45578daea02d4d54e992453aa6bc57035c5be70795a56894664964064e2bf3b2112a15a87d4aa0d7bae3141a9816e37c28e4d70948c0e822171e6fd1e5c221efafc646b6a250f086a3c7981f5a02457134dd19ebc8efda48ca458a0f1be78cbcbd3273832a33d73eb1a6806214a8f9fbace2ef4484f18536db49c60030c719742cb73ab8bffac257c6ada5af9b477912aef8ef7f7e929275c9f560b0da120d13610dfdd54ada38047fcff7b6c27a17f6a882670cc3c742a3c6f1d2309ee81a322f430c12f0b89d214cef494656880c852ae01cb9042e217a5d3f5d7e8824ac54444a642248133e937c8d0fa9c57744a7fdf75c7b3c2db628c227d6aea7705d15d3ae3aed7f01b9457f91211325bf78a4f308f92d6de8117b4f2799e6fe8062904399987b2c42374e8180694038acb78b3b82ec6b1a5ed6afe3c1a0237153024b0954edc513f2b60d1159cb0de853e391dad220be409578c233d1824b1a1ec7d2d950b4438cca7a68cc9b81a83b0994cd8f249d5ca47b +C = 2740735ea58e80c12fc4d142466c53df666cb32fd8e2448ed240c474e7f717df0ea1da0f770e0c5b36143fd11dcfa311f7cbae46af14dc480543d65b4483c2897ca4e11b96b2f0dfb74b4961becbae84791185ee589046a20aafcee29809ea6aa841f3a822265b3559c5f6039ab44ace0b5228d5167af696658a64ab4b33ce4a010f1f5a63d9ee5162669ca3ea7fffc78379b49130403f051c26bd34b60c4b547cf0c839cebc2292305c303d1edc1d5240ef75409912d916e6beffa24d9843cafc613e84707004022d3ece7bde251646021c8d289bcec0a6a7a5e413c0265807bfce161df32492cc90def7b8d3201cb2d0853633dc0887969014a6d7472f17db42a1bcf50d707486778c7eeb0e14b9af7e9cdeebd4cbadc8e4488d8975f603e0f0b08373c2357d631d37f330ecc7e365ac653fd9e7fbeda3aeed2467ce1ead67ca452946e9d8a14d90fc16d9045714b80320cc5567283762d45a553d350d46ed60fd60657410a41412a212ac6e9dad9a7cbb70f7b371a87a1a05ad15c67ae2d60616b6bc59b3ad71d4d837cd073eb04edf71e3355d05b571cb238b427539dadae7b68371e60ee40996bbb7eac392d51c700317517e10d6d27fe2ca7ecf914a8d6b7c8e1f52499dc2d070bd0cee66c53fc4d6f256a87bccf1c713deb5b41ea47705fe8a8f8f193065fe823d52c56a9ffc20ce8614bf2085919e383d14b25dc245e9c40c66d236de6e COUNT = 11 -K = 71ac10f7fddb9b5c2ce658b2f85297743ef0f711dbc0b659 -P = 160cde5dd7d9f00fb88b2e9d5aa66c5e2069673e66dca36e8b5e2184534e17982361f212c437921137c799f8a850460a0a5ff16f4ad5e05fe9cbd21ace56aa9870976858b38c52efd490891772b9cf3f19476759f32218c6e23a0ec4b93063d9914951af23 -C = 7b970e3f69092cc467acfb7dfbb04c2f8674f2ed15b8333fc9ae63b8ca930e409cc2be7a9e3a36e63997520c25a3111d43165bd31c497c62e4361af2d80e7de9957b55533081512725e1afb985fb081ceb93be036bdf90453f9260a06c2db6731092757ea81b2d5a7776b6ec2669c9af +K = 8986ab62e24646fb486ff5bc2d345919bd3bb27f14144435 +P = e2b06f9b86878d60de5c33eb1ae7f24d0ddc61fd18588dcbad2adf9fdd5ae45a96990be1e72907ec830d14f02a67d1c58b77a42adccc9797a1ccaf5375f30ef8ed87038c622d853a22cd7f59bbc845a201b34d516f7f9c3196d8334bb8fbc0d303be7a05532f4c2f2e98be5add0613fe29129ec6b03ab2de8dceae5d9531e46f55763d052107583821fb1b8c807867822bac55aa8c04afd87379e29f29f6992e4deffc92396847767d39a650dae1bf44df2e841fd42d185f4c9b5a13d153eb05c42dbdb3650d6130d7b8758d4dfc10a6a33a4ce7456f6b199f1b77dad44ad88f5b057739c7921aca619e0069f8939d0c5173618b01a1638de77ccb9f3e039e7e972536572ef9e1fa89990743f0d629858836670d87181b490e34e35f375a4b177c57509e6038d828392f166ab7a4f186509dcc54b317713a0ce1e3cbad6aaf3dd2b985881dcae154792a7443c6706ca191e6bce42faa19976006c4bb6faca61fe7a44c12d63e904cc1ad178deef0b580d9299603c4a50dbe95d7b52ada28f942a9f8d5855eeb0e2452369420ef49d59265f573a6ab5dbd7bc95c34bb81a00b55e0712428d82bd3d18c868d926bb859414eb9906f5225d1a9d9d64d5919195f8b0c424f8fa75cc80fbaa5e5daa9ebdd4a1c64f081be5416e85ca2c231dd16a1043a3ec55309be6337ddff3ad89ecb21b7af7bec80903036c57032fa1b7b76d857 +C = 2a923cab36565b7297f606580b6b0d2f621c432b0c82c831e733ae31bac7f5ffc35712c5d0207f1c539b2b3ab8566a609f9631bfefb0e499b11be7f66bbba9d36d942abe081a253036223933ea43a6833a3efe02f4a264741387fe5f561a8f51c0c9673a6a1046d676f03396940b968498b093a0d5e12c254a18b6703bd04a30e1dbc52f6a8702983b45bbd97ce0e1178d779aa1a0c3559207183e9ec4d3051941bcb9304ccffe04d00b4d09d4bc88debbf1b00d042a193632a47f4040a698431d29013eb0c101b0e2e4702859a6ba413e56a0818cf33e2b664c0e6398773a848545c53ab827c706104aba5efc9648d7ffe05497963e99ac85dbb16264faa60eb69df7e44c87c81ba9a95c6b830c583ae10075cd4b30e7ec53806267605dafceccc524c3f9edc349291ad558e1e6c84ebca930d537c840e29fa43e6174a92120b7ce9d6a986ca94bab350c403379a02db1962004d23ae422279cdf44c42a64328d3fb98573dbe4e1d5ee0b1ff30e2ebf56c984d42ab3bf0fc0161801bc049c68ee8f856cff5d2b5b8276d3ac6251ef49598a3cc2c7c6b108913950a70ab0aef8de271d50841b61ef83319cf4a76604b1081daf4b1aaccb9c8a1315f9821ad08c6c7b458bf30282baaa1b1d4502ec50bd860d4770a864b8be037c5aeab313cf352fcc2492014c090d8e097f4217c03fe9a4cee5ab295e4cde4f02328d6be5b5d57f7a8c468b735056 COUNT = 12 -K = 7ed230fef63b3fe022a6d2b9c460a7ab39e9f4a0f25be4c3 -P = 0607f6d67a4edb13726437d81ab9b2f865a97acfcd356755cd3412dc23a3fb42601c8783064cebea5e1cacbd569d9906edc65a9795c45f3a26db1ffb1c9886308c30a7f9c7214f3da6ef4efdc1cf96d9d71eea89395f2f783f1de153fe32cebcbb2f35add6 -C = 850cbe06ce1e04d519b615c9ba8a65fd77762f23787e546cd4d5a23d5f8ea44df7a4c017c594ad72cdbf2ed177d2a248f054277ee2e422da1ceada2572b6600a3cfcffcc0ae2e6c34928de7e2084f50788f2581aa1ed87bb860efbb268279d0a67520e82b3f7299cbd0d21d67158f125 +K = e868b6b661c91ba2a2ea306cd76a29ca290b6ffae1ec7f57 +P = a30e843428f0d4418822644454f261534585bad6c7fe80905d7261c137abc7a297e0caa8f6f4a04dda7e42f2428e477bb32ede9ef92f8af4a088ff2279dc2c54ae6e59ef638a994ba57a277831ba89326473957d33a15eb1361356344a801606e7b4b7b0f6d5a3e8864c42003e66a3cbe301e233497baea025ee030aabaf1f6678b0b6e3ae5f7913f372f781fa7e5c891a733099e0be8d6d8fc9471db821b5c26a1f75b1c596064cdefd3c3291645c3736ee848433e50e614062e46bfc84606aff50f7cee78fbc6c8fd41a460e6aac2d5c939f841e06214baf89f00e49d1a5c0bf4a504c50e2b5e89311b6075beea957cc7e2dc6a53f7ff34a3ffce354294bbef2c0d068979736728211b5909dcdb791b6ac080b77118e1fe20ac8accccd94a498c753675c77b257559f09f565866abe16f73c8f20fb3b496c1c98a6c6e9ebadeec67178f096c6103c13d404c7d3243b0b0e17984b510edbab0f922bb2bcf68b5c27c801824191f1bd77e57b0700a2cf02321419a99b75ba5d3c76b479dc03f0b209dfff25920c31db89f608e29ce55c5bb1ad7b8a23ebb447c88f798c5ecfd0fdb7bfba495057f4d6ec2551c819e36aeed9d2eb88c86fd54216f0e03914f7cbd724b763a9169dba3cf82823052a1a83d35e7383694feb07aee6f4a9e1caad0775cef4d2cecd4d8925f17b7da47823b7e4786bc0a03023749c1c765dff7acb14 +C = 0495a02aa7cdeba441b909727147104ae6763e04a3d387260f918e4ac11245e4cae7c1a71e7727848a673fe467c5a448a4731bbb4b008bf267c203ccdb5a48a36903fdeb56c5757be8fe5ec4ac1bafaf017a95872edaca7867508cfe39a9084fc75ce7bd5dcd0bb9d84f8bc943b30f6d681918bbebd9af0dc18a1fd5d676596eabae48c063e5c5fa4fe08419abd9ea487e1356a79712b4d66ce442f8a4a5e2d6732faa353b691f53c216269ccf6ce61effdf5e3b47ddefce4a5d8b29acc7cb3af8d59d2544da661a48019ab19e3a3be9c589ae2bfd3cb10e9047a038696a49bc3dc00e43e8be7f84782691620e33c3b9185e2d489a2b222139e6fa2e1949785279a30098d22c1447c10d718c999a091e77b6e0568083f4714cd0df73b72c2026c50d25be20f397ab3efdeb675a875e71de0e38b1359ef980f30d865d58e11731891270d79a98b64c3c198fd2d43b1d56bac524745ac5cfc78cd6784364d1a5dffd08f18fe5b6999601e59eb2b0cf53a8be74a56888071c5f4dcbb45aa51b0cea2961e5b90d847fef983f4bdf2a3faf2a4418e74ae11b517bcffc18feb32d95ae7cf70826c0a56ce2830f9d66c3bc851b361625242963aea9342bdd79fc2a8f86a338912aae5790e71711001583999a1ea0a79a2b4aea16b3ca2b536057e345ce864896819555e1735d032d503952617330f5fc1df99b6b78d715a954290faa415236c55511ce3684 COUNT = 13 -K = ad1bc3e36eefc8784910bb905a420546382c5c1dba3de2f5 -P = 5417392ccc36feb22c1793c2c8665447948d6516bb870354dcfdcaecf272caedddeeac6227dec7adc33b62f57e1b2740f934e4b046138615252ea6611ea5f66b4ba0252e7a8ae066ce97cb29043237e5a20399f6edb58f967e8a0f04b9a5ed2a407054d137 -C = 9299bddb19e4b22abc301b56e9d11e0c3c37727545f8b9e39691ffae41d2d76c32b2fe4b4b1b376c6567a4df804fffc1aa74114af166dc964818de77bccc27204c05551d3e73061b6c76d11342d2e0ac9e6e92864c3f4f14aa5b0c132e70598f105b06185a7ebc9a8472e0861a1b3164 +K = c83a7418b509b46ad65b22f05746e57a83f9c8a603d9dc78 +P = ea2a4cc1b368cc39619e7b45306820950aaf3be7a0d0c2d0a1ead038882cac40cf04274e742cd832c3824b23fb64dbc6f5f6f99a07ae1d914e03cb22051d412838a402bfab34b29a83a2904dadb62a7c997c704b9e2b7dbeabe0ad4a636d3e5fe88f7ad1c41ff6bfca48837d4ce2db787b701526efd94a0f3ca203abb7b0ced9adf4015a808a00709f8c5f94e49e8fae54b8ad686f0b96f169a17a1899a08079f968704c0268c7269dd385d7e4e1609824a3a637110cf422fb9eeb5a6a6906e249c5ca29500351199f2f5133609c70a64d7586978526d2d8b25a065a469d3ef64a6fbee13391cf3ff58f0abc875ca204da1900a928752930c446655fa8149b7a02af4b9c02a440819c2dd1e36f3a2f902408f1f67dda36f497d3e9e1f6c7be4ecb5941f19d1eedc66e611afeba60531c30b4136e1538d2699ec800a68e2f5c64b4767c2a443d263b632d2e473e17f9807389f45a06007eed35dfc861691ee93d32b19b262b66201ed5570aba7feced8c05bda8be84497c53fb9c1b40fe386b6b40e0791b9ee8c411fc40c832c85e365f5a63dcf9c3d5bd1fdf34a73d90adf304d7772419cf95088e709e43a9eddbf64b501e87843315df13745da0fcb02f029491a06b2c14b724887b114d2d4a7b9c86b28004b57f9f5b9318b29fd60da848c28e2739f38ed4478e3c0a19fba3984f0897a7abcd1284e1e940e7e5db3ac478f6 +C = 630c8a65ee6aafba0d4edc43fe0bf885355b720f4487bd61c21c79d7057f3608a4e88e63c5fe95659ad4c2b9593860727a03a0bf2ea4f7734d0c31bff1d6e7dbd79b466f9b82fe1ebdc033a37574cb5ce263d0d69cbfa7cf3b07c89be21e9e8f2863459819b2cbebf22c44da8a2bde49361c2b946cce1114cf66da0e173b288a8fc1fbe40f32a21e57791c04752658612a53cbaed9314012b7322d6206b4ac0fdb086e44835bdf5357320adf28feaa0a9ecc4a48cf5ca604d8a1b560eb0d8ded573f1a7841809a172362a3d3f9d14228582d8b6c8bdc7fe6cc54a44003c3a437466bf17ccfb35a9dfe8ef0fa80ddb853154168fa1d4d69a8be9e73a03c826ed7c4048d91a9c7c7e3361080f4ded65bc2f386e309f6d518d2920b86748d56e85bb9aaeec0ff2b474952e2aee761bcb29045271171f77e6877d5573f9ad9ee4374f6939250850865e6a3d4a970723df11255e36d6e104d9334e05bfb23b5dc28f1515c59179e1f403c1afbe91ef1688126c6631e471ad263f2086024b1833d6b58c149ecf022afa1ac2b8b743896c3cbb197cb214eff28ee4243a4e3b2400bd7f7865a0eee0e0f2d88fef04fc4f0afcffd5142089f4f5aa009d76ac4000422fbf2084f802ee665e628bbb1b45db4f192dbb5055b8b144da685dbe36e79913494ec7942ad3228cee1aa39a7544bb7087eca334e315062ff31a05339eb0f2969b2c7c6b6cdf42b1796cc COUNT = 14 -K = 6798cddfd2dc2c7d6cc36cd84550a02ada6a502b5d78f086 -P = a0f84b8fa3f620524fbf447edc3b853a9b8512656012fc1fe75c0f6c3f1a9eda9e59ed2b711201030b867077fb1af79a06ec75173ee2a27f1cc7e6da13ddbe550ccea84341bb0e49ea4cddd3121e0843e64320a7d3139c8e77cf5a38079a49bd84dd17a9cf -C = 5c1cc445af905b49c2fa1c7aa7e7643bbd4090b031d35f62821dcbf5085afd3273afb821370c8509f55bb3a754d95fbdd4ccfcf28a3ce903a9bddb77fced5420dbfbcb62f5e74757122bf20841a6fb60a4ecf1056b53a8ced4618316c3e4fa99319602d5d0050958801aff27d1b3711e +K = 2967939f87de530327c274c1a9c640f538bf9d6b7c021e3b +P = 1d2802d68e1d5343e4c73881423d77c6460102adf8bf81c94b221f9b4ec7d258508146aa642900c070d66ad7b0e973a924cede2114e7dcfe29279fa9039f03593cbc3c4a887a350f9366a355a545298ad87c6b8d5e4fc64584199bb4339fa0e595e819de901abcefc342e452169d3833f882e26d32c027b73d58852500cb2664428d55e6439423f2a1066b4ded22f0ef43d4817dc6af848975a4ed91f7a410e211cc268394835e6bc428b1c450d6fef51174bea8632f5b369f56b54a0fbef62745687e66e2f82f5f37f171ab8d377cccf0a46c45b5b29e7ff73603b0e9091ee1d80edbe41db48ec1eef41999518a5119741bfc5bebab2baf42394c801cf082e3645e1109b604b1040d89ef06f43ee13d7724d8bd51e7ae57df1011a5e78aa2d31cb31946efd043da221d65c0b979c47d9e7f2b3ed5c2f652aea0be86e37af8be4a7f4da0bb3a5c9b66b03920218c868afc5a7afc4a4de8b57fd75b61e831176418b80000b84c7e7242ceb3cf16d04bcf41a781d1d821e7f616ea0489b87cfd2cc6c838775438f25bb54c750a6939fbcaf8e3da8b873797d087d8fc5192e8a08f8dbd596906a76e3c594cf6f7f4aaf237d706c83778fd02306c2dd3600313727b6ca1b75e9ea33853c38a33da02115e95ab9427d77ee6a559dbcf34939ce596c0bffc8e0fb8d7e4a9fbfc5f0b131c53bc008f035ddcc0aa293c7334358e32aa76 +C = 646cee38e7448e0e8dabd596b6bf041b2b92e5c2c1c1efddd09cfd76cf6b6c1abc299f59471aaadf07d02381a372f873f5b03b67a83c91f7d15d2e29fe1f52535577d12d0f5382cba084d2d0e8f5a3cdb2428741b836e2d520e1fa42ab0eafb9ac6c3d45e7fca48af39192a36420d73aa33a8a176e7d7c79b21e2db2402a73fd34c15474788844f1f951da6f48087335f72dabd612fe5bea4cc068301eca2aecadf314ea93dfc105b416f5e201a7206488184ec7f1f31371b54097882e762c5b7f214e4b71d6d11b91c932c50c2b3703a873691c2cdef3457c1474bd88cfa5322643e3ef909b7c7fbf121011d119ae9e812e3af8354e9e28476083be6e5c33ab30161707dda4bce047168e8b633c0ca9c1a6f24810ca5cd046e885d87d10eb40c3d5dfba1f44a438b23df5cb8da29dfefb151b8b8cede8e7630f23c7d321bfb91b51651c142837d5737d8f5b505448ba950f9f06a8f92e2f127a71b3b39c348a21239833e148e406d3a6f232c69fa9c9ec0ba7ad54a68a5ac804d244c40dae7f5e58e00d1e82fe56ce69ea6c92e3f9c8fd145f870e6d00c9514a09a2908032785690c037a7a6c916ad570b41d2f2467d785ea7c0898106cad481e79f1a48695b3f859c2db1cfc4255f13316284b6c0feb0a5f7765a06ca8db4e00d9833662ec2a18639d61671952f553fb640501b86fb597b30d782b0b30353f62d67de8148eff4155ecd672d75b9 COUNT = 15 -K = db38d681b092828a9d6d3c8afe81a3a9870fcc8fa6b7cd4b -P = 6e390541cdd3b70fc38afef7cecaf4e68d6aa240640626fff08cec1a75eb7ba06e66f819fd0ad8a0b6fbad746a8156be696eec93f1555dc9c13796069eee3dfc7153a278dc0c57e6079c98b3372ae97838a389ccf972f54831aaef575c07ff6a1b4c6b6163 -C = acabee2cddd1765966deeedb234eac92a203fbd27fb4befd91f60ce43d7f9557294db017f499a0a57826cab99b66fff0902035257fefd71897cf225c789ca21d5d7c459a3bc3e6bfb30a914f99956dfd75deb240cac8e833a08667406977dac72b01a8cf5711c8c8dabf0f96781a2b13 +K = 15e97b4b62c9035674196d515a7117f8e53f95b2721a2a6e +P = 5d78d517a1289af6e6e89ecaa4e1403e8e547fde3d27637a0f39cee88e80778b21fe10dc41e62b68e3aba3594ea619800c9c6efa793f3572d343ea5e5a475aeeb15d3d4bb212ad950382e67b5a09fb7eaa57496a94bba3e33fc9da35278431290c3925eeffb2cf1b8968d8b75b98c79004bea279862b9f76d9491b4f8f5de42486cd2dd7935a12208e56282fd340bfa7034e343d8dd81fb5d936a1364ea9cd07d34fd6ebc161ff54cd1c1b949aaef42acc2ac393dd3d1b65a7b3c8eea25fdd7a7d415d988af159cb748c21c4e37ed8850bfaa0b60e7bcef12fee0be9b57f1b3e362097c780d9e5b4fb5025c987aa5a348d74cbd4b3daf21fc2fd2f515ecc59e14c6e159b852859e49c2674dc7ba5aa289d445464bc185dbe88a010970b1da6f1af7612f9edd7fd4d51caff3ad6282478252a3cba4cc52b1ebd1a42bfd145d2e01c76e44adefdb10db01fc04bfd705f6259cb3d385acb3a71c1897cd4237130f77bfb2abadb9cb34ba001962da3c76ef83374702943878ceb8cde93020dc2108c1d3d7084d30f765053176e09bf5826186b384064430eb52cd25859e6bbd50d7c51be1b0db8b37bec2f6daaf38e41ebb1c3f7505d5651860e82a6d61e43871bc3fbca2e8de7f5167cee54aed006061fb2816069d0331fa8b7f144bbad57fb5fe29e9a4614d73c709984b23c412a7aab81ec022d0efb96d04a88c66bd5072be1e4 +C = 1aa236548d39451c722d0ef29a90466eed8f4cdfcde1430bbded806cae15490a318429191557fcbaa356d3ae377d4835e7a0c1f50e3ac1b34c8f88e1bc8a122e1bc9118080a8b1be766a0e88ee57e59cb5c4c0b17b8ec0b26ee288aa3498886ca714474af0c8c742b97d082d628ad7b2458b87249147d61f7d41cb2a8324f6eb45a48b01720bda14a1294d5f84096d48f45723b1ca8ef98beabd56fd956f993ac32fa2ab2adec3a47545b8afc49bc7512afd288c07598fea08de595f9160fb1ea94b3fd11d9924a0a0c492338ac73d21d79a0461e08e27abf16f56914f21b1774be65689a713d6f59927660a70fc187f776875596cdcd5ccc905e96e3d911d7ea72d5fc8222fb5bb684a90bb6b1baa4fe182e56ce0cbecd711efffa124ffbe0879bf41b64e2443e6a86d2e5e72d12c6f84e3a2260d6ffcd1a33067603adb57d950ad1973daee5a08647bb47f81adf5de9835070ee75418a81933907d0a3b0c525e5964c225240742e1e69f1d61ebb450cfe8b4fee8e487a8fa0ffb8a536dad71682201f778dfdbf14d06616ccb47dfdcb317e9024671908ffceab9425f7f306863efb50469bb9dfe4c16fdb119d781a4874d5a84ca6fe9f9186066dc904a7994ee73a7a00f55fa62af8cee94a81bb0bfae6231925854a2d336e43765562c69841837ca97b3ee4f14a96b2d59ce8410d0339ef0fa4278412ce9a9127ee903f7bc9a2e6dff351354f2 COUNT = 16 -K = ab53be46e3670dbbe37bf07cd9d2a1413550f067f178a09a -P = 86bca093caf1f534129810c6e6ffc8a12da902b5cf86250fe3d9c3cef4413793309817ececbca22cb1c1fd2286e47a49a155645110f81f4ab3b28e1f4165e7a06594812d36e1070dd35abfe5973b3f151b29c86f20c8f8e9dc4cefb2169fa51f7f79da2b23 -C = 1c61777119467943a06b410c8b1b0cf3587ca3214d6d6a7b71acdb63557b0dbe164a745a4ba1ca8924e9612f747b5a2e0b7758e0cdf1482665aae47888412e407fd23656d60c19ed139dde7486316302c6788d0cd11ad731b899cc401248bb7b7fa455e9a9627c20e2a03d62598d3567 +K = 38a4c922fbaaefedd37e31e4823eb88ae1a7731faf323f4b +P = 855ca09d575014b1b2d9e9485563750a97f013f69dedfb87f3c5d270d4c86d3ce3aa0c2b4862c90db4744183f17b56a48325a612e1ef5e29c64e689fcd606a0f0a303b37ff9756162a1b38aa09120750c1f58b96fe797b6928377fb3e57278e111e28000d18198b2aae5ac9a0ac34b990a6f520955dee9b8ce2a18fc447fb6f313b899915741a7474339b7ceb83750069a6beb60615b8c7b5ecc51d057ea5743b1e4193182cc57714b45bbbc088b65b680f54944cd5b825a2fb8b2e3b3fc2856c4296b024d5ca6016d9796226f1ece0df7e41a27b443c09e698a49a7b4a8e51843e368040e63552a0b61e0be335d8b06debfef51e58c0c74dc5c29dd909b32850a93cba6259542baeed6bed928b2c0e9c06ab056ba6f5771eaa446d8cb3dc7a15979745f0b64e43b6811d381b281f4ff4b9407fa45df234540c809a9e717153585e1f9b7b231e2e30c7e8338b7a6da9f5e860c3aeb9e32ad552375326ad5eaf96f5b3a5d382517c52274f85568320561b7410519a5a6186cac7e98e78aecb4b412cf022d0af14ea2b1e73bd54504ec3cda3df42b00625bfa9564218fa0569fa9ad768d7a578a972a124fcf1d941415f6e8332884f74cd98ee87aaad2efc1d6a3cec3f45fb22cad79e0409a5c92ca8ffb33e326b71ae1741a6b5426518de22e66551c21b6e4356ce02637138f57e5d662da5f79be8279ffbdca8dae3b89680ff5 +C = f140f97b3944a3fa4da0b820d2c8bbc399af4bd6dd2ed7a2f3096ac33b5695f74204e22f279ac061091eec11d3dd590ef1ddeebb46f7799ac53d0f5fd41cf1d2b583855f3b06904a371f513591a83477b900becca99e59216b3a70701b59043832a6f7552f9819d789cddcf4bd5a25d239da59eac819d744fac6b4c4937b0f0e1463de08a38de9ce86acc2d03edfd45ef068c8ba3c5e2df1f74788234f44bb2a217d2cfe540c199757a7dafbc72023b47f294699255c6a78d1ded2df7dbcd9267554bbeff713a04a36a9bee6d189c21d15af0d42e735fa2b2eb6e92e27b84ac078d26182e65b1609b8c6edddf6bcfc04a213831ba7d3b14310a7adae4983b592f7e8960d01388cd3a41aa9efb34d3400e67eab5d4d4c1f3a292643c17596c8c7ea3aecb2ea599cbf442b035514329bb9a5acce334819d5927778145deabbfe129db34c06ee69d15cff8f2f72033387fdf90cf4626ce2ce242a92e932b659e61322e1d14ba9c043c242f9d07a107da6714f1e4ab17c62512765c2c5da013898194df108f0d694722caa19916f44cf0932103c0b2dd7a7593b6c6a660b554cf7f792100fe94c56da33259113271a1778c220ca9af7b6a4036e87b3725f1fb9f3ab8b5b0152b6d232e482c3b28a69ad95998dfa0be7a613ff3e89f8c86fbbb37a99bc52e3f1c94a9b9ff5c691e4548ba0844e30da141e41942688f97c3c83e435da2cdf656b17d1c8c5 COUNT = 17 -K = baea495c5c650568fa794a56c90b06fc2611ecb5d44503f5 -P = 5760d6d1efabec4b1b279ab4eabfac89f14edf39f822d6ee6a96cff27d2d13bc37335d7d42e7389ba579985b4342e5a62f00aef576a7aa81233b014851028bed5e81297bd920b1fd12ffc09b30bfc77578d6cafc54a8feb1baf597e851f328afccb391e90f -C = e74c56be71c00f7962e07306c720b39c09759194b295936dc2bfae3706526cb6b32b5e510b9f3fed1dc14a2dde81d4dbe22d5852b0bb5ed789d3e44da08dc4f59286a2cda1e57e963f21dc809c192ef7e071468357ae843882579101fc77295244d7873f6e0983a435b1c31c19468e9a +K = 954b1e48fe71de7d6f6f49d34649ef56ea81c132771e3eef +P = 0ec23cd7ea40cb1d9f2b9734d92e72a70da9b373c4e2e0f009cb9bb36540d7c12e7f0e80487f0682605421ef49ae782b261ec851c7d84cdc31a4c136e7d26298e6d7830f903b22bd4c5422b7eeaf6290be0c092e53c7c4e9a1943a02ea7feda9e9baeaf83aa29ce2634bbaf9f3b8a35b2630014ab3abd8783fbffc8db3d013cc4ae46a688678fa8c7f427c7a859bc64ac63320b101a02cbfe8f3ca636b639fd12965677f9ed84505c9ff7429289ded06116829a74349ef04792c4049b590eeac2c354eae875f1de2f50f59edecbfb18ae1a621d7c1a3c96ec2b2c809ebff095fae4bee023cb17f5b17c38b770a265b674396282e2462eef23161ee04fd67eb50efad5af41cd380a204e989d0e921e4ff4e1db8cca797aa0fac5509eb243e6d7d9050b6986a5bf681099728d62a2c3e249f11d44a8c938b9a70f8bbf72d4c6fd7719fb19f28cd87bd0a242aede26603616ea7a50a46ffb4205363ed97def1caee35c7f9b369f16b2eb03d0a188a6448532dc724daec264743066195ddba44d62279ac7df2406bd8f630f17699cd0713a7cc6c85df6af8a26b7bac6d9a8351fe3b897d6aa60cd7e3c25fc17cad88dd7d4d6623a40bd947e58cea29c0e8f98aa6c09889af19e3abd6f57d7150917b1b967c83749dfab094773d0d8a12975954197ddaa3cf4dae2b4a5aa5663ed3a93a3546736d4a1fd2ea4fc0feeddc38a4abd5d5 +C = 52f20b014d48726966a1dee452021901d2e62e57169d974b60874403e115a0fe7d3e5ed19ded3b5d608c7121fecb23b843c37e264f31cdd240b4c820a75645a44861f5058c6f826366a0d271260db1b949aaed5d72e7bc96f9563275889dc8ba2d5468dcd1c5c37bd38587b676c2a024b398e7397a1ca7071f910eaf0657c2d920a817f3c1c22cd0a6fac4b6951d4f2898b69eb64c02a500fac7f069f73e4b1a4e168f7007bcb365ff1d2019d3ee49dd8f21ab49e782df91f8b8d5f2b248d25cc6bc79ffa7f847f7eea82835daee1eddf047a1cda4269cf0ace313e3c2aca0ab4058c4d14b5a6bf37fb0b28a2e44ce07d1213eda2b3ac2d2aff92eae7700fffcd49214d8b8e09deae1f00c06e84f97102fb37aaa734f4cce5cbed67e530133f15a67a8bb79112cf5a4373b427d74ddbdab473bdbb17cd33c7459a1fbc03730a0379c6c9a9ac45bd76494ee293e35a2e6caf9506f6d979a279f67aa4d1083c61fe00286f304fdb4fcebc49bc98812ac1007f9a1d8e409d00019daa0544aac75f76e924d8c99923f88b99e55e67e71fe6402ddc21825a88548cf5aa445d70a10fe2b8d1ff9d7e8f00dc7bf6f8aa45b534f62a76ec49c4bf3cbba00596791769792a1def70911c077f8bc186213ca9a23abcdb280d948a9d2c0f682965352a9005478f893db92739976363de5171a22a2a1699e3f6a17887d01b2babe8710cd5c1221700788808615d5 COUNT = 18 -K = 23abd70c8566084bff2ad2000131a83d4bbcd65e12cc1885 -P = 05ceef21285b7381a25762ca3e3ba10877e8ab76d3a1520677f83aac1624cd19a0909ffa4db7abcbc9521debf984d9d6c9dde3a27929f4dfb7e3d2e0dcfaa34a0f530fbefa6d02f44b3664bc1909148678638ab055f016a1ea2ef1995f4aebfdfac6d746e8 -C = c9d53aea65644fca34ffa61e89e8c3736d2a0570852b8e6eb28e9b376e5480e736aafc6ff0c6674e131c5f8c5b83a4f932d2c956ee88ba4f67ee1f314b11bb15fa525ab5c3254003cbc25de31ef7972506abe1e710d99a76ee58696c805c917de2d7d1716906c545baa80f1f31caadff +K = cdb0d459f3cb36592e0b44bfae9e1beb112a0381c5cd0f96 +P = a774e025d1fb3a7ba2ff5a7c857a99be4cd3f5e12e679de5e8950f3a05762f7cccd2035824f87e9dffcd5466c37d69a0992034442078d24df7cbb58161795844141ed31dff85d40574e36819d5751433622a645ae04105a1ff83a551e6776a357fe1bb499b9a06ee25c90d32d0eb04405a2b613e7a0fc9d60031ed80ed27cfdc8c41b817b4df1b5612927bc65408a19ddc95e6ceb38091f2f51194bc09ee79f7037b0f4afd8b32236ba05c2ac671077f87c998f22b77329c3998d05cce02bc6f1fc6bfb47f06b15a88984050a928bbb0f03b3384784854e86bee1dc9ae2b8c526c2bc875f34421fc8121c281e962240bdfffd04285cf11631a2c0b3085c5523c9415d03b757c9d164e8d9d98f0c40113b2870cf34efddcd472d4b83a52d2dd19e1f3c4dc3bd5a13cc0f2fb9952d409b871079c003f99fa85272600ebb3b912c8d308050a8d5e3f6b061558341d9af7b901588e70c3142940e81636b0f8091bd8a31538afc000199d2df6ca1499b8a3859747588264e69c76f580d6d469298d61313dfad7010ce41209213dec5e0a4daf037afc9ca682f0a66c15fc7d4519d352c8c56978bd4148224d52a9956f5a1ab15264c5aaf62850c8c3a2c4f15b7e89c9f48a489692f071a9efc5e668dca5340c4b9a110dece88fd1206e9b2a6d0940df841f0e5372b861d890ff17df53d6f7c6b3b0ba215889bf9e53b055de3c1eb825 +C = 9bb8adddf1a891abd871df8b2ea878d15ec9fba1096b1524a58d5bf72b2e58288971636932c5577dba3a2173c6c43e25663171dcdafed7ededbb5ca3f40563485e95b762eb211fcd0f53e0dbf5fbdb67dc92638fc8ad36031e3ab53e6c90f9be5fe0c27b220d518c6e0eabccf33df5c13c5991099760c2502d7e8b0466cd5d87d024de5920cbf02d5edf1f78a110e55cbb52259af976b5cf08b6c5e80dd596c43c4a986883159623a6c77eb193ee5d13af0403cac3387937d7f089121ac29e56474c41369854e6e2b0e6a1b93823c2fdbf3865a9b1c7a0761c2793f25ab8d0203a11e0aad385e77b8f3753b2a63416f8027fca68811e218cac006c8fb907ee3338e4fbf2f0262987145448b68a63cbbb3761c86536df610e2f74f93de2241548cabb7c397fff72d67e0bf315fbe4df5e4e120e302fef55d58df1d6240fbfa23a2139003ecc36945950fd8fc225a257af9fc5a30796509e0edd208eec1ed18c0201632f2ce423c6661cb1a4ec786344815e3d1b6717ce0daf6cc057df549ec06ade6a9ea9148691a2fc125410fa8a8cf5b37aa12d7bbc7fb99b949f6f0cd9102764be5b9b9ca30aa8aaf3b2ad66a5d11f5eb56a1daf6c954d02d3ce6d3bc46cd7230ced37cc6267320724572fddf3e388d7a0a9329f06ede6af51c3c1b5bb64bddfdfaa5562edeb2fa73ccd8cd068f40409754a662d203fc28bc129243aaf3c0c5fd5b81351946fff COUNT = 19 -K = ec7a6abd7f0fc59aa1b10f6d3287f50ac396dde96c237d53 -P = 07ab8630bda07217efb09659bbcc143e2babe4f6dc3f1dff3d44c5a91dfdc36febca4c922ae38cff43d94b84583eae8b3d63dbe9604e1a691f71020bab3d8d60a7c3abcd9eeff9a37492cdb9bab48d89f22387ac83be86efbea1f90121e4d514c4c3e0f762 -C = 87b489dcdb683794b9a23f51e47d70faad034b545764500351069e86c76aaf2f302dce3b8be24941079d7d2d24bc192643ace322294996066e30836bfa558374d7d497c87be457184c53c5259005620c4bdfa3e1263118cdb0c07b37947a6a99f5425bca9a0e71db715fb41737196ed3 +K = 9eccfe0526bdec3408de03ba813530d42b1676b77a1434eb +P = df1297b2da54ce0ab4b7912bea12a395a2f72c5cdf4440c2909afe598f6aecd1d7249edc2e39e11a677033436fbe5e988677f92ddfd182c90ad436672f6089384433348f79df7b50e6680bce8e98ca3e1cc23fd21a163a9533ec61797879ee2997d39507c785d1f704282a80a12b8c5f34feca54e7cbfbd83cd07f6af3157409752da25c656999f8162822c1309c7d319c72bb66fa5ad09bea7e03f2b5e3e851a84380396adccc1acdd26e21dc5df1a60204767677651ced85e09111257e6cf5effda1c559cb1625aae622362be1efd9e98c813df732921f2b7e702d903e705c2fb428a135dd46a0d2e2e3fd9c303a52b137b19bcbda91d16a0fc56a5d46ac7e7c32959a6874d2357db8ba58e89ffa77b2ee550dc89bd85ac28a8233490d42719ec524c8cc6ee3970f701d6603fd3b0a934874e02313bd51d1ea956daa05bcfce297718f39548edd0c413f485d78cc8d7649e531800429a10799b0961fa5a40e2bb92e0373035edcd38d743290c72f19005508a42b6536e2eeb44857f09aaf0a80951191e1233721aa1adc25856ffd74a128b5fb47a09e36f569eacd2c6289c9378a8a23f048eb6c5e0d008bed96ac36966dc1aa56b68470abdf51cdce7e31b22c471e44f6d087304cf147686a91aa7fc75eff9ea50203bb48ae7da2275b5784dc655e4fb8d508002de75b0054d3baeb97abb208ece80d45eca2978e645452dc +C = fdcf02ea3c2136711f766e9065eb01fe16a0fbb136b15a3ac5e7b151fc7d62629aef191279949637f097e9f0c4148663aa3d745e73e39e43491d17054340f678beba34f311846727fe893096e53a79303fa8248853f5b5c0e65039554455d62dc7ff0dff6ab896ada0155b3bc8240d659a9c51ace72a9d488cb34bf1d0c4b13d2cbc4a338f481ff435dcc90682e1a6ff29837d35068a18613e3787942dc85c15c4da905c71c4301b5ecdd28eb94e6e6650cdb9569bee6dc813a63d3917d0d380c7e8a4826a2c3154e7fcab4a7070f4e80f459e49b1f9a200bf8033de92679f60a81d98e9543893d7f93d01a6581cf57874e968825e30e1d89847f427bc3037dc0929277b649db36179111b7a520211ec7a9d031c3f4b3324f20ef46ad9a9f1bd248153bfaa961dc287af95d89f356b140d22527f15aeaf28640c63f02b9cbe6b951128f988a5b7f6b1f13bcb052c0234994b1dc7e137bec920fdb337a33144eef2027f5eccc5ddecb26d4c32d95ec27630dbb7dff2ac8a7773f41ad6dc78a94e15edcf2d5a906ffc18d5185c89e790e8aca860176b227cc43c7292d6ca936312bc992d4bc510208a7cec936dfa3a950e0dac75954f9bc4eb0a861dd179058f98b35e8ba26954d42033330164713e57c07419d22f1b59b23fb4f811a62bb197f557fcdc1f5c43ec82b3c379f9cf519ea0825ca6323c1d49b3960feb0ee2b475c8b1b5e76db5d6cbda COUNT = 20 -K = fdb9b69e8a04ba7b3e92cb86324124a14389aec800755552 -P = e7b2288ab52f3e9d7713736675f4d19fc1266d17824235450693c0017ca824a12f267769573ae527fbc9cd32e2493e809c0d0cdf70fd38cd4566f7e941629ee16935b4dd214689d40c4cb5fe521089071c12d35fcf391a86a935d97f2abf8da7c1b7d52af9 -C = 2fb1620c4a81cb557a18da1620dd29b9d16340b92da1cc821687e9084dbd28d62b05fa12e997d14e431a1ea5280bfd18f37347ee1bc9b432ee53c7fc87972ca9e0e85ae4b133f5dfa39e4e800090f405a2983a0df2363595dca7442efe9a8ee99e68cd08e8f24e3ff3db987b9ee4a393 +K = fa6e6d1831505f92b3981a51a2b6053dc08af0a9219d5807 +P = f7324523413be666082e66fce9ac2361cfa8caae7410e2ce6bf5dff03732148aa54c8ab790be37d30fbf4cedb5ef490aa1b09f5424c6fbdf306baa38fbf4dcbe1755245fafa4dbeda51c8021ef989456a88443251c13444eb153ef8c6255e035d84980e8ab3068310aca2f2f7c4585df23fd3394a5fe2d3b78c5aea66289b7ad56095f236c1a009226d0a2d40e1f3641fbc31b3def2238a7a1114349c1758fca402ee8213029ee9f552b30383eef75981f0a773c9c718a4196d9a2015106e1afbca2010de7535a44e0a0f84c5419c78b652b9c6a4a91986ebf471258563a948ff11b7f4ae527271c98bb7cc3a350e4ff3c765b8f944a91845ddb504703370692c29299aceb276f6a4331688af3849dadf508642ea01c7a1237379affa3b1fc1736667d937b181a494dc2f48bed7ef280b4868f1542d590b093637a367ba1909ff74d3f6b94258f4cea3d92dec8f39baa9383d44b2ea29847967fd3ae23829bc41247655312d4d3d4ef5f0cec5a2aed09994ad64fdc1ab6f8bee781459fdcac18217e90814045f48c7533e77b6fe41097c142ab2d8dcde70bead287bffcffbc7268afca77fe3f63b73aa5420c5f950866340bb011aa4362b7da39a7c6f45e4bff408d896b72a49e1fedc48deaf75402b896010d891f5762c27c7d452cdd5ce8e51738c842fc11713f168b9c4e7bfa4e89edaaed5460670545caed32da5c913d26 +C = 40ea5eaf33e064f0d3f354b178ac1d1387d0c1ae28825aedd36ac9c76ddf2afd451a2e78eb39ef3036f2001d7e803a80571eeaf42fb99f1098ff723ed752cb8b4b33538d2704e3ba7f04da5f6eaaa32d553991335acded30e2da10a40bfbc1f970464bb635badc25a625497f5cad937cc281274c12b607a2f3d4d357cc5b044b3a3a23a3ca2ee395e90e568aba67b46b75b0e1945a2df460996711514f941afd817ec43fd1f3a7ef8f2a6fa60b9228e9ad002b9f2c75d5212b61c4adba547fab4eec41da79b05ff09d92724acd73b5a0ac01156dc340bd7be9a7af9b9352212990254f96da465aeda4cb0545a71a52a9422560357573090bcc59bfbd48e9f51a7299bb0263d883624ea476f79d75a76b8705511097a81a3120c0ac391f8bb70e4b233f31006734f909c4d95f93492db1f0962794ca5162cb0dd97acb681f14db6e64809800b20710e99a7ef382b96b09817cb664a44a5090906d1e71e1913bf9f3b4e51fd0ecf1c1e53e684700c84aadb0cbb35bdc320c368a167169c8d6041fac0a641c8a63d825db72053c44f89d117411eb5f87e52ec7ae8f636c8d1415df79a65e348b095eb494f58f2b5009e75daa65ad31214c4840aa3e0e0aec31ef7634bdcc449e0f07c347b078d55f164982f19cef68c04b0857c5d5d0e0e06d04dfb66353bae03851328c4289f919395d9cc4e6cdcc435092ae8861218c521300c7c35b4cdc2f377298 COUNT = 21 -K = 0a7cd4924cea93ea244dcead6296ea024f9bce9cdd3aa57f -P = 8c071f7cb63e50faaf82c5a4db486e826f9cb2111af20854c89456318948e903e6732d2092cc6552426f32f718660283eb633d78b0e11caefe74274de68cab0449a297d259885212f94ba41e748a748c27dc3b90fbc697fced6e0de50c194b989d22988fb0 -C = e8044cbe630a9cc228c129abec23a876edaf7593982849addbefce5df39a99e118054850db3ee3a82c0038aa15db9790bc3285313c01de25cc2baea60b248fa5d1dc24adfee077753ff6ddb67d3e0002f8bbc308913f25b0e7db77607f97024cc36fed7174083bfc541611bbc6d90fb6 +K = 54b6f24f27462d1cf039e9234269f85c57440e3ecfa66dc6 +P = 8511132d3b364daefbc1695c9e2b61c4c93605ed6d601f7277109294bad1b83d8dd2c2cdbec20fd7dd40f9e6c9cb688b71d6d9d76a2fe8d96e59c192e9d21010b76d176692cabe82ce1ad04a4b3e0ae76569f81ee0f9e2dd54e16b6138ec837b454a159df9ab9d0dc97dfd8a29f17da7205c5266133918c22677e5dbadf8f8a703164fc697b543f8a168d966589721b65accff6d14caad02fc6cf477542839b1b47889a54f20fff98cc477f2f7b077d160ea48fe92b67add13d9296aa6b24de45a1d6f8189b46e93a05db74b8bd5729af90ad71035338549d446ab1d122ebf20bddf44f8224879648a65697b5c388307eb77255a3436e2e560ca5568a8defbb0c3ef44ee71935408e601828d4c8ad3d5db17bfce2654de1e880da62020a1789e50f9af520f1df7287de2bd6d6121c8f7132fba79bfc0ec8ad5b2e2af99603da4dbfadebe124525080d44897b43e08071a858812df6c02eb403363f94b883bf091cb555a406e5e98cef11aa6b9df7ad902f229d2165f513b1836aa171df1c7676d5a7b864541384647e9017092128eea1c9f660b900352b612395330cb20c8b483f072c41c5126b21c272337e1a41e285b10501f5a23174c2b0982f646adb079ef8ea1127e39d6a3bc3ba45d998133aa3d9e6eaed90e54f4719088ddd8297a43f43df49f4046a38729168f2ef0f0a50c3e754d54269dc12ec583d542fdc951d1d +C = 1c8b0a38845dddd0c098543f1c9c6aa271c89b9e83aba9109ead8521401f35876d4ae8d57902783525b3872bc8db8f2be7e66d5209f36ceba0f431c9ee7b03fb1f6e46ee507740313cce38bb634c5b888b30b32d14448d0861629deaa52128e49bccac8c8210824c6ff6acb96810a7ec2370ecd16ab71fe07e2b9eb3fa6e61280ab7dee4a277a308408d55882db083df14413e1f94662057012b92c7541b01052ac418799bfe8bd392b28f08841e4321b6b1d546214153bcf8497e25c636be48ee94c2e6c4c0b747e97832ea57728621d55866b1d166c46cb3843da307503eac9c083c6901989343498967af27ef5ef99c1791471d990f7136da9dc69e0e2501b0fe39e1fb391ea0efd29bb2ac669ba3ad5ecf2f9b331104d72ba2ed3ff1586ab43d9d3a458804fccec27986bed2959ec5a61862df5376baabc1c36e76dd3b6fe04a394d314f4a26c76ed4c1a8d59be7031d5cdbdb1729729d85aef9392f0dd1da19963fb3d72d8799aea37702d5fa53a3081008ecdbd6d9c18b1a39cc5951da751ec8b69f74becc19f63575f58f2e22c67e517ad268128a47023b7078657d7b2130e334a8063b9958aba2d10dec1ef9ce9527b7e189799ba8ee2aa7365b00e8419ef2fe86470fbcc688c2eafa14ceaf19cae7651e77ce20855d21b75386b6100ed0789b4c0deea6f69b60c609660973eec1b078389bd0c6810785413c56162dacd87f58777397a7 COUNT = 22 -K = 685fe7b247c54bacf7f5698937596449e4173c11ca9bddce -P = 6736279fdfee321ee9e4931939c91739fb851c029a639fa9635f07eb133a3cc91b47e589efebbdd1fff65d7ed4d06988d3f728ca88584aa3ce63940e7d8c51317f7d02e9fa96637e0c7987c6bebffdfd563ec4711f7cbbbfa2e28a043064e68926f8847d65 -C = bfdf8538f2c122880ee11193cabc5e89f1f507d76b0cb96d2348b7740d8306385cceab46787f96572bc4bed2d0cebdaef9278e7335e2c91245c35e0412c5ba64bff35d714bc4635d07b8807d5287e661b29fba5d68636d849aa3eade40c49c62dea8e51e40dcf84e61cd7eea42f10204 +K = f3bab6670caed083448face508d70fce6641a8a66ab96903 +P = 2b9c2f6cd5849188a9ef69f69efed4a1f70758c1aa1c2598713c51a5b0e42e61ecc6f146d0341ff9400fdf8a657d88d009fc391869f6dfa2971d63138540d430bc4f76dcbb756f94c7801321b13b4a9bbe0ba865ede4a71d0db35be071c454099938aabbf44c34ca1404e40391536e3d7a17fbae2dbc083fda11f2067b63928a93911f99c64f988a708b69492aa31ce699f9e0507dc64e58721529322cab54ca98a00877278b28adb9b6f0abd2d06de3cdf8d15fbc0e3a62cb2e9f811d4a717d393e0e16a0daa17f86df25df09adae956c2b89da050c212b29bc025e9e4822a722f67feffe6fbbe05aa62d750344fae53bf7de1f04299f329d785348b044694a19def6ded3ede8f89e486668e26a1a51d8977653d0690d0c4e91d31e42c805270e2f778e3dd5590a355747d3559386d559388a78da4d4ce5e7e5a9d4296087ed55a117333f2c03ef640e4dd5b2087639f1d2cc2acf8ab8afe72045beecc57a1f10b7d0286804670c274401085c8d55e2de7cf65bf815101a9c9a1ba5edea627b35f11af40976b7a815c6e0701bd60136804f07daaba78bdee8e00179edc649dda2edde74a00ccf630f24f3d1a6cf414c75a153f810fbadd03c3c19ca6fb3457efd887f41b7990b0e786ea70d15e7aa888ca2dcd09c07fcb18a32b0f7ec4c18f3b6b25aa875c3fd1cbe1c80d902abe860a1b41b9180a64a0d11a1960ec860d4b7 +C = 9fe77b30275365a9ac514af14332861c8d0f0b09b27ae9169b0b74eb934bba9c8b6ad3d922fac78f69b1bd0aeb23c14bdb440bda2b157173ff2c92a92c1db8fb2bb9b2db7f81aa6911c9f522219825945fd46553fc763772894ff9b3d01ff4c74f7f5b97416a053277c20ca2f867389d4e037ba68f6cb085329825fc1eb155610031514b02b6a4c23a625ccd7c9e108c46fc33450ef333e24e7a5c376a26db78d4d4d436f2e30ede5d0db7960c2e86bbdd81db2381aad30e74b8c7604cbf594d038df7ae89e177607ae97833daa090604869a473ddefb1ee12442276afca09c649d1fe9ce6ee49824b5d57f68e53392db1b0597320bbeefb5e2c3d61bd9659e7dfcd511e42c1f2b76e8c77bea0dca49477692206b1bf1beed9be0d308e7c989c760657da54c4643220f9ec105a046cc76fa666d4776adb808ae0271e734b688e9e3c33d5c8280fe9623d22d06182c57d318a185ea6e1024e6b7877f3e220311dfef112992199bb65eb18aea315e397a8e9e6a4d92b396823dd7012f93ab5409697dc9ad7b799b3de7619e3c7aa1bb7244bcfe7d858324b9c5e56e6d0c0565991cf96c080383bae10f46e51e1a1c10af833cef052e80d809f9273ade1e0362600bb59244e55d1d88dac8ce7ca5538530fa28c5c3d3c8e89b7c1841e748196efe5054f6ddc4fe1dbc9930e3aae51c66eb6bf5e3db8d5904d948296075980f11b049f910e9f8902f779 COUNT = 23 -K = dd76d1e3208474e7d28bba3020ba696e46f7a46291bb959d -P = c35cd50446b17b68dc16280bfb4016dc6b16c6515ddf3302b958b0e213431b5d00884ff12f98dcf8120ba8d03d644bbd0481d817d83311d2217592a1a4d496ca672fa5ccc6a53f309cea305412494d881cfe0c954b515c2c3fe76c3fc0cf11749487b77cb1 -C = dca05f6105f1f6a73c7f1afb4045c29bcc69463783a0cccea939c890dbf3c423c04db60c8763bb7747d94128f07d5f37955ebfc0bef6bf50df5c39a3dcea8a474ea30d80d706513aac7612b4afcc52a9575237b1b4d60646850442b0c29ddac83c89e2c2a650e10c61c0bc2ef74e47a9 +K = bd2ee1a99a956cf3fd0e463925578e3328d0f9c32c534449 +P = eb2ce22ad34944cd8cc31641737593af4974ff66aa099a3aef6d41b64c0ce1a2dc1b98f56113e6cb149e400874dab98ae8dcf30ce5bb37c5e1c8732d563295b107563d526b3e8deea7ee3583fe8ef4a09ef52ad8ce8170186df2b723e756585d84e91bc585a1702eca72f5211b81d59847276244fa110dbc3f021906c9985ce33a119bdc1ac2768b7b47bfd6126b5c54979c839c0a819370af8817f0f261c2e2b71ebeeb393158d48bd9bdce002f1c9e79fb1f533cd66c16a839642b7a803d662ca55bf151db66bc38b7e25dda47ba908d9f9ae8ffd405a1e8499a693274c8b565f91664a7ede1d9ee3650bb4b620e00f4925c261152fb765e518a90e89a1609aa8a7e0ca5e023f4cbd9f5464da2355cab7dd8713c88bd35c43ae100c8391ae9b77a986bf740a46531e7daf75e41d421155b8d18ea50584091f2f0c4d8c1d789f8016acb3b2bd60312312a14be82d9a68489a7aef1c6ede1b93561948fcc168f0b0fffcd12295643cc8766d6db29839f0da3e1ef006f6a823d8b610d11d33e592afc4708a668a25b27397ca4820c729f80d52194649f7fd1fe6d370dbf1cbcea22963b38c5a942bc09ad1f5285c28a17b1e4b048fa2dcb7653465a709acfbc86b8791966dfc1b149f2785e8ba08b70c3126ba2520d86ad05b09a93bf7e55864966711497d29c68d97f559edabce7473b70879f8869f4e33cfde409a37636bbf9 +C = ff738ee9be4abe3dc8ef3a9e3170355bcc8e77d1e7108fbe07524b6914da4fa2d24074909788f92782868379936b07d7fc438d78db90044e9cc7f17b10b0f8196782fd8cf5eea0f935808456c2b76987f77e4337c12dd8dcb9f8864fef6a467afa133c37609e6cbbe0417ecd1dc812a90981a1426d67a1ac195c7151acc1e8c2dc80d0837e5c117786e4bc7c35b08f0e0e63f29fdc7eb2dfdc9506a070f7e02b3bb8e689f1917ee64dcc693938e5cee37f69ac7b74eea4f61e93d75622191ee20f09edb949451b45ac4ecdffb291dbd46103cbaf1ec89676e82ca9aa1e70117e75e518943540d17e2f70520162c044f9c9ec2278ee7049297bc8932bf5f3bbd2f336ac8834d91a82aa22fba836984b619021c05e9068a29c15fe40611327834c5909f8eb6babcbf758c51e60510eadd372592ebf4ef84cbe3c6940c4ae211314a0ed4dc3b7c2b629a8fccfad59549f7bc7373e2f032c4763d622f540c90af83614a115280c51d94f2b28ea0b4956771aca742fa127fd2f11a873fd2f91d3849aeca978576446e5ca2e3bae8c06b81a7753b1b5c31e2b9483b324a912fff7f18c76e649e4000c53db73c378c37c6293c7c42988feb331e7a82642f6da774e87638ec34487dc26269f90e0497edd925a6a2c7aedb68ba412c265c290b80c30507cd59f9689042d1679b652f15857b985ecfc141c3c67180c1ca84afeeac0ee58c030072b6e2b186e9a COUNT = 24 -K = 0a1d452a7f0ab910300737bf02b1c763d6d5c86d4e08db2e -P = 94704e5a42c61ba5ee9c70ff48d45936972376193a16e2f0d463180d88aebb5583383cdbf9b7b9f1c860c7e9e14e85b003c44fa927e5a96c7646c70cc45a916f0045c3a3d1cd60811f204bbdc306fded42cb5c93eabe6663244321894b1dd50001fbe5432e -C = c58ee93037381d7ac9c62dfeb7ebc05f8690ad588826a8389bfc6156eff2c0b38ac45d911976a4ae623be4b6d4e12dd2481f1fcbd5768240d19005d05e3d0efc96e9c1a7c3f74907d9bcf34a47ec9d6cfba9928edeb911261884ad295054c66029b187f38fa0294184a6677514a523e8 +K = 8f460821f028112cca6e54772f00a926bbc35f725ec69f0b +P = fe380ab47d9040ee6070f21f715331379f926ea5cc3fd67e5b526dbc601e4a343f5fbf2ea13b9afb46158cd5f74c90f10569b42115e371c8d15df817c072d4383a20dec922776594a3a63e461ef70786c5ca68fa6d8f26e81ea66205ad8d3ec3426d419a71ebccd10079eff49f8dea7cf2f36396213a04ddbcdecb48074244e675a671b12bdc6255df5f5e0429ea92ef4d741840210b0846ad0aec6de61356fdc434542ca9ee3221f3ab4e97695f336199779b0ad0cca2bc07d8eca088b9b66ac8b469998b8beb00f146364398b26a3a99509cc427a5f9ef4fcbcd88ef1f9ed76e6cdd20591675d432bda5126f81f9687de47980e4c26d4e11dd912ea3cbcd1ad4ed6cd1b115fa9a9ce94957185b3b47a316fefa5bf3787e7e867e782af234e96873f6610295908da0da4f0ddb0f68a0d9851b3e2c9b57d2c3e24d77707339c5761755e22e79ec55fffccb1b45dd5aecd8ad80b2ee762681208c3ec97d89ed3e38423dee7b519b23ccc2af8b53a214fb5fa65655295a09ce35a096becc5f4270961a420376b55d5c5c4edd1ea8fae53542f7ce821b4247dac95e127a0dc0ce976ba937734b1dd591aad77810504c073fb7f1a6f7334eca8a7e3dfa420ee856e09ddde92741b2d41a17bfd11a5560059313d0414224a7716a4ad169bb23624b4b8cc583cd0b2c926082ba5962cd1cd76058f2f555c2f8e72c586cc6f8d358b676 +C = f31074f529dd6d64225d51da3ceb4682b42fdf2a2d41ae612e958416b237f25f2c0bdcfa901194612c149d5de86976372f489f46e9e63da136faadc92d519a49f188216fba2561d07b46c3edba7f50d749fffbe70efabf8427e546d26ddfccf6832f918a9606156b56d20f7db9874cf46dcec2a0abfe169ea0bb400b3e6ef08ed9d2af7d55391351326e248dc8ff99f2b7dd365272c1d689df0a4c33113de65e0f81ee853872385ab657366de73b2712de5eed214e5a3b76e7690db12754c989e76fc3cc5f60ba761d6472e4e497a1bcbf6c7af7f4d87fbbe68deaff88d0167c88a0fb1fb1553086dfcd344ed7b28360c18ae6b6711b7cac30796c5cf2a8a06ce4984f4172e969cca386b41b178972ad8b54c4e8cbb074932abbe480da6884c7070efbf7c7fc30b0712a6f6f775f7f4ec0321e1897f127511213dd2dfcaad987dad3a2a0bb15887fb49543983810a097ab98024b14340dc4849c1b46d83ce77e721c16f84953344c937b3b5f024ad85580b3b16b9023828865d96a5b663769965dc1044272c85bc39d5b6c8ad8c71b941e38cbbe7aba89b19b878149096542310ce4a1058a00f86af5e92e679b55decfac9b53ea449fe56158d8ca1724cac3f99222453a2bedd7c3e376e368b26978ae6b9c93296daabdf78e0c92e8ee76843cf8efa07b00ba2829c49f2149d2457d6b0cd28ff84e3fb3a52e955a220d49ad62f37ab6a681366b16 COUNT = 25 -K = 6c10afaa0d4b1efeffead190c150bdf20a2da60632261cf8 -P = ca9069c5cb5e26a5bd7d79d27841849948e25326d62c42124a5d8d8a43240e96aa6796d71d64773ce203139c0d63da08be5dde592dc3066f3605b70e8a9b04441236249fd5f0a8bfe214c968fc8c0c4651c345941f7e5d4711711c84b13b1e9351d3361e44 -C = 2960f24830cc7852172ca13c5a917ec432eaf6047a0ae722e3e583950a0c2fb1e4eda97981024d6f423edef420335c82b2f81d5c9ceac88d247f0ac3b2ed917505e6beea4a6779da5e5f1120e647b8657f0e7bd398c16395f99992b032133785a9928032eb54042af4dfe7770348128a +K = b28f521c5576898b598a122d775055ad37cb7ea3313942f8 +P = 96f6201992655e400494c6880d0a594fe21534ab4c74a4f45c5e325f94d40c6889ebbaabed8edcaca7c99f341ae073c060868ac0c51f17af5e852116de6bdd1281e8a20d9d09c4067b6b8baf763fcacc44f382513a1c5c45e78f1291e8ae641eb901fd59a70ca28f65e0a61819cc68074cbe243ecb120b1ea5124bbe6f52bb7297ac0621311aac5ea8b8d0de8d9ed3ce8c8fd52e8159818b2633debb24d5fd46ef1b175bfb410a7df3a7d04a9002031435a8b723d52770579bc8db4b4eb5b972c04cd389d3628dd21db609b70e8c849bf0f291ff950325a357ec65f5dea74185c7d6b34f8532a2137a6806237c80e79d544874c7cbd8953306cfa2aa8bde0f9119fcc900cffc8ff217d77837ccf472d357c1b06209a2447117b5810baa8418bfa72bcec6f47cb8deb0d09a845af618c04054b113ffeb4776e22988716ed173674655bf9a96b7f6c5e8fedef77485da6914435236f5574d6aa9b499b83f514ca8d59cd05b40bfecd2f6996bc60101387f6a1cdbbb76be084f9e5c35adee38a455793713532b5bdaed46cf1844d0cc0fef83134203b6f3b50a8de92c0773eef731085ecd8ab230ea1436698d17c6b2d501a6551017fcf6d7400420db0132f5936d9bafa72ae968660ac03c1746be39d66c31f0ee1f30f5cb1ec3ae681b923303326354294dca98bb4f28b43866250e3c459c9d2e599df164d6bece36e0c72aec9f +C = 30cb8b054c23a8828588f9d44a566f7c9c15826a757089a2c0ab3037887b1dcc86e8f23f630db1a381ec3a1985ef46db0883af7ddc9b181bce8c49fa5190119511a2f944bc8c186d24c274f1bb7556e848be8f7924aa9ab9a0b2afa326caf28ab2650950e137b1e766a7f1432659e191a9c54b1f818e5da55baf1fcb7229186a25e7201f0a3c5cef24e1f9f7e1e02ec2e073c6b36e63c732edc369a8c64df1dd5303ff65ccb2abd82b4c853b063ae650fe19560067d1cc50cacde3ede582deda93b31df100fdf19be0f3826541df07a52a8039527342bc16354b61e41e9e52f02f3d37ceca460e170a8a3478e0f776b8ccf6af6d96b109cd540b4f62908bfc88091708a6c826445f97d2b9ff6ce963b13bcd58925df18eabbb7171baa1d50b27928afd423dc4c6f83cc1276208065ada9bb23ae7c491c81e223448d73a0eab36f21d1863a5bdfcdbdaaad4c0b77757b922b3d6899430217a0d8c54030cc76b18d65535ca88386df1d6fb6872d678ad4ab95034e1682fa93ae232b6621f5cbcf1b338532ccb855d5c07a0098027d56e6ff3d96dfa4cbdde9ddd84fb82c2c42baadb6c128d18ae9bad6211c09cc47106433b948f21008021c14684c2b215a0036d468f42833f68591085e88c8d768aa96b7a4cdc6b9b54b0a9178f7e0915f359a76d878a4bb54411b8ca90de52b6f010cda153060874927066706dc4d6c2ae3d5494482ffb260f59ec COUNT = 26 -K = 62f842ed2e11385daa00d51ed4f73bb5dff3c48d62c11936 -P = 59634b2dc975c723c2eefd91b84bd94f6fee11714e057a54f79ade9f6dabcd3b8cb82259667654d0e8fb63e70380141b178d4ee213994b23cf4fba07e92f5b661468d4134c97d3301368fbdfb5858d2b9a94f5d4c114385c4f1b75ea3bca0c60a0efdf8e44 -C = 68a43701a143cbd205496dc234ccbe0a84349b1ea682f225f99dfce259a5d5dda4ec4af88ba039d76a692de2e2a6b77fcbc8fcb398e5b52a22c998942558ef15c0579d2cfd4914316ad6703683ee7121166981e76eb9d44f3188c413deddcf029aa7a5d441894eeeef2e17539e7f9a83 +K = 68661e032ad3244d88f8b135d0c85b2f9d3110da81116ddb +P = 63b3e9ca28b7fa18d144e60f433b5cc345c481d8ffabe37901ad905e9cd233ad0590838d4352b9c56d0462faf20baa90cb31fe139d022811fb71b751ebe67792bb82f7d6d624a8acd50bfef9ce2ec0afef41b35518a7b545053eaf01f740586483dfa5bab88ee6bbc1134f5cbf4ca9521066b5ba2f69c13af9449e9c7bb52f3f426288d5eb564175052841f10b656ff459453c05a04a38588e6caf1c613e128cc1c919fd564aeb8aea61ea729a99de8c68e6180264da90a4314bce7c128a5682f10dd26322219006ee6367fdbfe29439900f3b8284759445d1ea23ebb3d59509ef3f6bf1ea606b46f00dbf0841dcc62e0009713dc97b45b2d3d88a68ec4bb42054441976e00aeb94131e92f81466c067a3ff02045550f23e6b3d561b784dcad488dacac3ec5d74cb1f9ede626840f961b5c767f8dd074aff046f12b577f1467f44a4c23f744a2354afa133265573e1d0decf5418c38282ea82d9b097a9825afb20710b3c9230282a425194730a8f77c8fd3c78a749182cbf5f242bbda33c363495b55d2039a522798787f9293aeddb65089bddb0329942c3293b3bc106f7f827cd97d7aec7fd0542923aaff57535c93c0e191f2e6b7d5cd2d88b17749a19f354651b6820abdd21fb78256d152906424f888f8fcdd17d0f26be0879e1d92b1f47b547a8749d901de8e581b6e082169aa098c553d06112724388a19ec9d0a2fc96 +C = d588bd91301cd0768c077bcb8cd80b980d872792a694871910d79dda9f83c112103c6ac2d9f8b14704f6ac83ea8a409179e784d66b4a85739287394f5dc89bd87dc48eedcb64b45ada313fafef2f0e670c1102f229ebae8daece1037487ac9159abce78faaefd9ac24fd72ed2ffd889bdfed31120800e2fdf80976024ad9eb8f92a93c08c727f70b65b341f0a71686587d3da783d8c1e5d6d3841dcb3886ebf0a66910b6f4b997ef1c17a95e7a31bf76e5ccd38b5ba3d5674226cc9b0fa1f8da3e3a4ae10ea99ac80c529ede05ecf658f7f63c35e6b2bb790bd2947b7aae2fe7ecb901fb2a43eebf18ca71594e431e0649c1edb63824eca38e5eea2c5a1e02bf2d61ffab73b8513df84c689102114fd4493402e093b4244e10885867e5a506cf9a18237837d46d7ea03b0d76ca29a0d450db05e0ff2124ab0e865bea1be582b6fa1c0f96d99dbd0f2b0bdc60f641384d4fb0c4159e2930b75e80562de0f7c78fdba0a81d79ec0d8ffb8fa6b334f5ef5bb5d60f1c6027e0bce58ca63c979ca443ffcce81a1a0c9e155569e0d4488e2fd687357e0b5c77f89889b473798796139f05ef0a9cb4cf72d513e489ee6081f3d30a2ca8d18f2edc96f2a094a3b24f1b0d5c2b02e75f6f2acbcd5a7d8025d121bccd63ae220019d7a8b459e8c0b0b9cf54ab4809071861ba816a39468eb5d8cd16f2a5f1574a7ce174aa1b73b8fcc809a12f144bb729e1c27a COUNT = 27 -K = 82870658243472e9576e31a8d9006ebd6f45206743c319ed -P = 4c9fd9be995c19c5d053886216940eb39afe3bebfc32ba3134fb739ff71f2785be4d87535f056cb061825e6245dbf4844abe8045b4a894df3db2a41fb30469c8e2a9ce211b76ae551d6786c5835f969ad9cc70e48bc43ef76ba9c6b37fb26345756564fa04 -C = 3d1c1142d7794431fa26ecb13073eddc3a9af284b7f92d1dab5087f2cdba01d8b2c76c3b550ef1acf742d9fd6e626116017fe8f908a35fa7029e6f9b1d6052bbd35911de7bec1fdaf3da93a1a4e8325f5934704c7cf7ba56ef5c5faff9f09e425f6b9447017b7697b7c76acb9d322f5c +K = d71a441bbae9f7d1d86a85bd8df54ffd0eb2ec0305e49ade +P = 87421430d64b34dee15b5c2c02e70f0b2772721f615d49ccadeafba78476905230b299bf4b556421e0eac2d6cc44e9383da8ed14305f5b252ee45a4d5f313595e64e672d8103be49a1510c15f05a39bcc6902df01566707419de7aa137d9738833affab422c5f9167240d347a302f92fde4c81a257752738de3a066d8264adf6f34f6aaba15a0a464722805f71375905c08821627cb7b45e7a7115c50cb7434b42be95d01d0f01ec1c30c7548787cf48ee631ca911786d96d845d3bde2fac6a54cff2441df1f79fe95c8bf3d4045ca509006cddaecd334c1a2aa2d8505d16ebb80dcf15f2c5f1ce095ac852744f86e5052a56699a11b8b91747251830d1f80949d226dcc7559821b8cd827b9a49daf59d96dc757f8ed9ebf6bf8ca48711cd384012832e4bea7ac4c0813d287b14614a5ef74838b2e1fbe925b7b2fe884296cb3c9700ac365bf64f99ebb4e618e9cfc8b33708cfafa7ee59ff31a1d075c09410780f8264d3000e80d574305bc8f04a8c5effa403c407cf58ce2baa341230333a31cece9c7a54fcfc407031982d888b683038b365c8b2fffbc4fc69d3f398c97e8f5abed34b000199b945d2b4b458b742b7b8f0a010ea867f2f6ffcfb97b4e2a14e7c682659c7bbf6bb8d4668ab03df847e37d67922bd5f97146bd5b52b3e60bb869f5a0516ccf0c35091089eccbcaeecbd2119e72f34660a974327be666ae47a6 +C = c5dee4ab7aae777fe176d13dc6bebac4bb912031ec9cb5b07f822abf8a1dca51a988d32e790c2b24445a350169d0f187d1a29373dec1db63596fd4f8b8b7248a02e81216d4b0992b0dd4cc920bb9bb06d7554cc7b888046e01f5a6d0ffbd632a8dec8f57b84c3a203ea2684d3e537736ebca7f6362863d2c36178360c68bfdad597241f45f5b6d3f0f81915c1d1ee61df0ba9c64c37761cf2d18071c45bdc83d18b1de1e9f8763ca4967eb9713aeddf5c2bb2131eb378d554f976c36f1068bd916a7d9384b68f4df316de9c495a8f6e5cd7f5f5aef69db16c266714b0a0dc21a44ee07dcf93fb2388b1f865a81e8e45c1758cbdb2f02addedca66624e3ef73ec0b06c21a9baad9f54f8f98a9b6fd58568893d3908b864a6c23f565ec0cd270974298f0caab14d89a7957ed02738beec930aa6090ad7a6d93e756cd7d7c016858c5d5babd2033ba2ca2856dbfb61d97bc0463269eaed854c721bd14fbd51a877e570b7fdef4c1eceedeee963138468412cc5c3e148c8ce048f03e3f632421c3388ba9c0a7d1383613b773facb1117376cbaab1d0bd8f5016e2fbd0a1736c532eca6a471fc7ed74010de91e589e397b0d0f9ef30086aebb334ead99e6da2f6b4b6327c4a3639dc9f06162cc906ee2df89efc5710dfc84fc4c33c5383b237984ee3a8d99da5d37024192bdcdf77ce7d31043b4876bea8488cf1e6510303a015e747ca66ae1fccf605a3 COUNT = 28 -K = d92350aaac3cb7a5e45ab5bddd23becc0dd1d20de2930257 -P = 4ce89090985f643d1f16a558d340022b672ff761d10ff89150dde235bc0373bb2806459de221a28f01c6958c289c1489e31f85eec6447157d2ab3f7f6fe34b13cd044b2da10063df5cd835275bb8fc29d24b340c6ca124147a67812777c5c8f48c1225b991 -C = 496bcaeea2c03c9e90d9c57894aa6f566a9e25155ef0b63b1569617cc00b5a5bf21d94d75b885230b9c48f6282e2db4cc733a13c9861af6196db6bee80b409e63ca61c13bc5282de7075f73ee26bd169fa745ee41a4300c182d4f84648ee6de2c1b22043e7e3a9b8df52479f01be8110 +K = 312655f5e70957c82864371a605cd75d900003c4aba9a84b +P = 6e920e79a567654a33059ea7078f869aa5762d9fb0f44a79103bc5b4cf11d2b4a8ba9ae49290db5a87d1d7ee40b668809a3588d269c4faf04c96295163480339f25bcf322843a6d49c4bee3c7cf0e2303d32c65dd13aece258a77a40a8b459ab10a41b32f40084c21ac8102d7a1036f9e1675d00ec11ab8fb55c9ea8df4befa2ef683b7a33ac8bba5c5049897cbe5d71bfea233e116071a5c01249aabe5f3b5b0381818e48edb9465e0b37035e5c45d857fd14017bbe2752dd31e2c85e4bd38f3206cb26ed899c1bcff7f83fa01db80c840ca8f3a51fec631623e0284bfe7322419a0beb2990c90c426503ba3b1467254a5785ec702640f5081cb5f0d40e047656d6c963d05051cf1f748dceaf065e72e4076ef3f21d29574a3d0b97b424dd34f28c548eb33321691ec63b401e34377d0959bf92c6ae969439f254fce0f607b3c08869983296c53e4be3f715e0b1573fcff79ac6be5c7acd0292ee4db99b605e046338328afe6b45d19ee5c8f029ff4daed02db65e23b735229f99115631cfd9b23b157919f123ca156a29fb383d0bf769ab40847ce21c0d74c93a0e3161ff23aa6a628b988a7b50d9f54bb73fa1c756cd9a71d2b8dec608d2859e7e5bc956a5fb0dc93bfe1a706f046ab9a7978434a3d2a5b7d7eddf5e19b3b8225041a1ab6473b0d82ccbc3c3dd9e1254d2254d4018a25874e99cd1e150ee68d33c3eb311ff +C = f3ca2a00ab8181b4108e0f2c50f81624df4dc7c75de5fb42353125eaa2e409a351192a53fc6473da0778f0c64bb4fa4a3857f01bf1a7559045ee556cd8da70b35825bae692fa9186f3ac3f7ff2940a6a0338b4106c3f578c33007c84e9ba7db144ff922c5489e7a3477496754ffa3d943dbb2609613af24d14dd8f221a171334fa3292d497414f58206cf533ebf15aff8ce8859da363b0b0c17896ba41073b57717ed58a0743857607504493294cd188cde17e136cd3135bd438b9879f6f888f8dde68a04fbf27beaeea99e80914bdfc789835fd731c01cbebc3bdd0089991406e804362562143ea8eaa90d8bb7392330998b9c71e3d0c4ec98d397549acb3131857be468294da483f7eae766f53400410a18c20d0687adfb336556dad044e27dfdf38c93c3e79f6b1de19551beb297a744cd8b875ff350d8caa25b6e6d193c3799adc57165a169ab9bf415f1dc1e85a96a21493e12d6240503d35ec0bee9318b9acbc981ee6ec15b172a661899bf014a3a1cf9e89775e3cefeb1366a905f9f2733a63eb15e5c69f0d22aa60c7ba929fc8c4446d30df8dcc15bfc178d475e058d557293d20ecdb1849a6723f220ee0850da35036a08f52e4438a74d1cb307aa65411616c7e284d3d231a036b34d27d8cda8a5db83bd6f6d23e23a577ebddd0a527c7e315918535b7823ef494ae99a9585438faf5f38eceb44b528ab97a5f75c7b9392f03657c0bfb COUNT = 29 -K = ee1da7b28593e80381db4d5dd782ea01820aebd5c491448b -P = aa022c261daf8c78c1fcb86a11981ee9a74582fb6491871d6a498d2915eb79de1809cc712b6382dcb71e4c7f191386e42af61b88357021cee349210471535c2a97007759598cd0c90d5f7a022ca018f5993a986e40f69167b33be8dc2e24d830b677957c75 -C = e4fe71d432b8c99b7f03017c200545cb9743da098373bcdf6defb55cc61cb9a9a5cdac8363d8ce701b295bb9755308fc0625a829d39169242e59997c9668e435f362172ace73ecbe4b7788033fc1f8a5f2608af1b3b7eeecadb34d74db4b7d7d6512219b1c364819ad409489de82c47c +K = 6870e6618e35548079c133161e3e7f9fdd8a4a60cf2826d6 +P = f3fd758683362695029d4715752c05b381070a73e9c6d9f9136e2f76e498fce003a511bb61087176f30d2c6fd1350119a61e030b1eb31a64e81b0460a8a70f8a628ddb06b5d5544c285b1636c9117e13a96ea30772105480b83df82ecaefb0546154dbe7563389a3c51373ca5245b6ae64de2584ba99e1703a5cd75653fa21d10ecad0dec30e55fcf841155bfb3704a0af7bafdcbb4a692681fd16db010cbd807d49c32150296f0a330450795d0d8f41e4a60af9083502d7cfef0cad91f97605a05f0d25268e5cdbb1179f98672c8e1783deee4f101ee9f320a7c88c8c299b6dc3d2009f316d9dbb4b358f391f7d37ff5067adbe421114c1f8695d0c8e7a4b0cbdc84bf7aa356e7ec4a639d1c463c00e68e59d6fa776db50ee5ad6b177a6ed1a7a246cf19eda55c7026e50d4f8fb4a5b488f2663cd96e42573f1683f9fc05bb3a88d7640fd19fa76533e27c96df072f81ffb2c674180585932942b3bdbeb8948283a7c58e0740dbb341e9667a728a69bb11f7171ea1203ccad9812763d683bfba73ea1a5ffd6409044c83898177d429fe0d073bd0c5856391f39372a1081dfd5e99c3893e3ac8dcd93151ed9ac5cfb7916372506d2cd965dcec6cdbdcc43766dd050892206f0f7f905dbf6373d25beaad5027184e6f8736c9104b2d7880136210ea3fb861ba613616415d144eb96ab03de8e2c689c29a0116ce6259245efb8f9 +C = 4e267495a45618e39591806baf7555efd404bfb68cb6c2d9ed5b44268f88840206f66148dabcae9f13d4039082c9e0d66f87de50a75f71c3d58c8500cbda2b402b100555969e6f9f81f0c48716c00c448a8548ae0abbe3799611f3eea2b7d714cfa4077d037017f7a5fa079c11f90be83e9c8a87423c831392fecd0307b0250b4fc407051ae971bf8fa972d08ebf4f5cf2a6d0c399a1bc86d7e76f6b07e5e711157f4ff3bae2c5d4df241ceb181e0c9f6313b84a99c0c8a80a627dc5733bc0ab8035b5da613f4b57a343ebc5f5ea3c243cb05825c31b5c33af8485fe47fb247213562e3d0ae3966933aa51bcc1be588ab9051e4c01f8eb60a905c08654dbbee4ddecf97ee66a4373315381ada85bdedd2e860d72c7132a5f7eec1c85e076749bb5d91bba2ecb66b6096ee0c4dced1d2b14811c3b93e637d7e80cfbd6416af0d773c461aa68a438080936d95acc727170ffcce9cd875f706a5bcffa141586039eb539387ba0d74bf133d87fe88da4129fc70b2c3ab4a92792eb63e5cfe314c204fd8e9c3d6df1e0e42036fdfcf903af2e62e647dfc06b5f94d27461a34e409393bd36000dbe3556c84d9d29099e2f4265bc829021f2364b4ff24e86432a7f8c1eb216fc2a6182fb28e8afe37f23533c41fb92434ae8a47621b161c43d4a0c9a730ca646b196c57bf0d623002b1b31245cd5fcb98bfcaf2a1ede3a64e335914671df0698a19c73d53a COUNT = 30 -K = c62309637dab4d9ce1eb3fefb9b7fd9a283b5d03946e606d -P = adedfb4cf012cef18fd7870ccad659437f63e0e788ffce7928974283dcf0101e901706b98f8ac898ab69c90545e40c646e61ed16fc4a69806bbb3ab26466a2795295a5e77553f91377e33541168bbfeda41d76cea8061eb5edf474bcb4c21db85407b15f00 -C = c935744d13c9b733d430bd6644cd55161b13dbabc05f65a87b6204c4128a8beed77d57ef010548e8bc9b72fe851aab5f20836ea7ad67f4813b7192aa068e39c46afd2854da811b7a665adfbd43d2a6c17be9444ea66feec8096242465e74dd32ca52f9c25afd9014b170f6c07a22dbc1 +K = c2104fdbaae257391c374c0d7984cd5793c52a18fd22e1f0 +P = 699b39401cd6875374abb59e370606a01b5e64b118f471842d0895177a94241c2d820a4b6f024bc001aaa1fc3bc3b8ccc853677f51c04492a364d2a72fb8eee14343a7cc43ca81e1d53de849af9997e5dd36cec5968ac42c0c36d5a6a2407b58992a144e531140a6723048498173d393e7ed663db72a84468c1d87831fa2a59c2fdc58a9ab60fb4067ff7292738bb0ca036964a74488fc0853cf9ffde665d1de3b276726748a1e21a39007c62a8a34ddc4ccef9a03b80bc693dbc12dc3e6a5d110140a87500d52bb0c22f33addd95885f96efbf9823acd3c18140815828e7d3a3cbc95d26f91b97d9d9d60875c18dd63f4c17178aea13e5058284c88a1a64c4a4878d6c5c3fa137451c03c1525385957c8406e301623dec0bedd4c0d28ca76f44f406e2ed6f4f47a64392501deb3d7416b17ce93982b115aae6ce6a87ae4612d4f045144f283a2f6272907eeae3d36a401df273c40f762bcbffe57d26fc43573235711ff3b6d96713cb795871295cf74b02b1fca5e4beb0fb9076447cb5a849e3aa497d6f99e1f4070d558ab76e3677a0bbfb23c58c7859e8bf637622620d421069b1f4c50c0e9ac96437a515a97519756ba8b7e368e003b5d8a81ec56c50a85cb68fb20f2feb46a4966e35ed65e444547c1a007f135623be9527e874b46741c8a8efe696d4935adbcea95d3309a64ef16fa6d57e13a8bd7491981f3ba4fd671 +C = 638e635888e16c9c6c67e42e37a039dbbd4607725dd3568f49dc49bf8b44dff7445cafa16cd2d2066749a48b5a4b7e1fa5ef1c048d233c1fabcf453a71ae67eada9f5ed3e95de49dc60c1ebeecfb8c2dbf6f6bd50f4060a093e892c224a6754c582548c01122f2e6fcc546d8583999ad898e9be9df00eeed685a397b0dab77de8013ead3370c06068c59cf1c6d38fa84f1a47995d524d9f71dd71eea3a6e6610cba33ade6f4888c71740f22e4b85d07f1500debfd72398270ab0eb5df2246a37be4fc4151007e8ecedbec4dbbadaa6f2e632cd0cbe2046a7ba95b327070b4d9cede1214415eb226369c3a116b05c1af00e1b76c1eb272910de591bc244c15d2a1df31be06e3b9a281e64f877fb016e031201a34946902383b0e3ef9ab6246cd59fd8a309fc00aff9e933e417e468632f713ce64c84a394ab6455b83a57d27cd4a57c4413fb2c83d83fc952e8e15bd800b68d77182d6ae825489ad65b05ed2b6cb59f2751eb402b28fd0d010d1ae8be3c175a7cd858a99d3bc3a5fa0a4ec986fd55fde69a447cb052811ba1b6518e808581dcb785e246414484687caa53b161ab2e3c777e74896324b073c73dd222c9c1bbd1c294733a7929f0bcfb64cdbc989e0d789c84bcfd61868eed82e3d3fc06f8c5fb3b67bc55d29f43e6634a09992ea87d939ef2455b7a944df2cd627c2117f417597cf8300038dc6a7a59fd04ea8cf956eafa7219a1efc4 COUNT = 31 -K = d08565136a2c8b267fb4f640078a3ddc7087a1173350c100 -P = ad10ee3b55ae53f9ccbfe24b98a9d5864e01931441b1b388ecac35a8b51e9c2ded6da2f0d05920ddd94e75a5f7380949c92a8d9ef5867499da98071b2f2bf1e4ecff82020384f7b70688337971ea968b0a6e66b5e236c4ec9f662d0c0c3ea8a62198e05592 -C = ccf270f418c7b53d34dabc1c429d73bef1ca73a9bf04fbc96cceba7b4f1faf1a20431fd6f65ca8b0066fb2936bb12ee9cc4bbb749fbc6284c395cdbbf3208bde84a08d3a12f63055461ae6f32eac62b926cd1f5f424d4d410aace02067bc76294613fbbd05896916d4e7707a1d8ace1f +K = 9574d6708cbac9ac3439e836559e05690c65f8fbf8c9ff96 +P = 526f166ae17392114061fc8d8e1a3b8f6a6a11deae365b656914d6676f8cc229ff49859c7271059e6caab1a80bcc05fed8ea34fd1635c393eea2a32897aa9fbb853919ba6165ee59de70ea2f230fe13d3718ab45a341cc92f2244da640b38bbbd64cd0d1332b27d48d1f1f179b0e19b7c7758ddd65dbedc40c972f985c54964bc7870365130461f39022fa107a66c0ab1a2836b43b77fe7335d6db3170594ebc27e3d0f98c75190744af6847440e7e16789bdd463afedfbae0b05f08951f7f04f1ce5e0e998096e55a1d6ee2400bda4aaf7b91cad275f8355a343773cc08c181b9507f836107bb37f583d77885bf27affa6da737d6ba62a0ecb4fe9de452897ef3f395102f19f767846059c839aef1de72099317996c01a09e49e076f5954ede6024be2822e3dcb332af0316b8cdc70a40971d8559c6ab17ecd2eef02a84f29c099cb87a9c966fe396dc302ef80dd4e90e5091fb000d2f5aa3de272de2daad405fcfc79673d873aa1d329400c4073e6b6de864e2b4f4ea99b4e29e4c58d179db20a96094cf09878bfaa04da22daff430a2c225d4f2e0b68cc0dc5a46a07d3f8ff3267a1a579d0fd060f3b9d8024b339ee9831392dc51e67de4a8cca43bf49ec71fe8e07de804d2db1b4b9c6870841f4c015f831d949b4214de611a2ae99d78cca38ea936f093315bf5a5bf18e81bcdf475817010f8b584e4a93e1dfff82e9dab +C = 7b6dd4a051ed13934856a89a4a78ab44db182187668adff4c293698d52a662dc1408630796b1761db88064c3a8dbdda07441dbb7e1f8a9fa7e476cec7a0315a6108b178969a2c92fe7c43dfe8bc9f94e8c62e1aa6e784f383c4099f5cd1a81affe21c27f678113b3a3433a6841d025545474913f714e5ce40116050e0e45ffa42e8adc27c10992150967fa0fe93ccabb5e37c84021a517ac1be65998d14ed4b205ab7ebf0e90f37539ce3750ea9b069284e3ea70a7aad8a3c78fe343e6ef17e22f9d08a35deef9fbcce222e0189f49c94eaeda8a9fe4343a8ab5e23b9412b623d7053727c8fc159f5e06efb092bf9f58b03c3bd23c360a5e1d4e2565545cc2530dcae71d5c704f6b183b4ee7a3bfcdf1ed9d6654bdb4a2467b856ec927c95fd886f7637c764c4e4f5a02804db388ba65e13785804bbd8a3011e714a95311f361cb08cf2b3ea4fff205587f0774f0199d245a7469b04d81d1fa4be6175844329a3bad9feca75329bb5e663ccf727b50954066547459568a99a18a2134ea78f6e47736817cbd46aae7d63d61b42ded0ea19acdc2a6be29fbf1133b539247f1e0e242841ba531441891c7c0018be4a3f0095333a3e0a4f147a9958c0e1c0038b8efa80d3acb7f8b507611476bb4f293d4ea054a6b1d3de9afb40f0d35ca4ef7be804e7587353b83da9774843a8643bdd18348c579863d613f5d1489dca9ae6fd2089a761fe234779898 COUNT = 32 -K = de32f2abc5a0140b0e94ca4e6595f48e4ce107ddadb8003b -P = 284657e40b75bba5c9433849b9ce09eea278d239626418063621022e6a4e1327c63e92d2ec1183174ab71e8ec1e76729c50667ac51ec16ccd9cf6dec59fb17df7a995e73788d062a2fba6eff6eb8aba7a0980950db6e1d9a72dc745f2b8f42f6b8afc5ad2a -C = 3fb96923bc21bf3996a2327b551bb14d57706013a9f828c0052fe9cab6d13e688397fa3393b67a062f89f296273ede4ce2cd9f0c738708f7314183af1c1978497fdf4f01e8b6b042d7e58c0a71bbc1feceae020777d1a9b7a76270cfb624404bddc5e12b5584becd4043f0e212b22fdc +K = b859b675532dc8a390dac3761cf288a46d0a826f3a13308a +P = dbec5b0cf80ea8357d28ab721118da624db42eed2cdc1357203b6d71ab4bbde92d9a2f66eaec05287b588ff54028711c4cba451832b9bc4b4fd07b6dd88b6501ee80d75d36224916a3a667eddb159cd16f4d56618376cd80367e276256a4195169e268f79e21e294298cf5df0451845d73cfa82608868dbe657f2446c83d095dbad1fb030a6a11a20107b419dae374959fbf4c6ac530415b0db6b05c107e5c06134ce33a8ff20c1a3e4401d6aa1411a53a5bfce40636f8dbf3aa60bf922906fb4d218ca82dd93dee9eca0ffa276db5158c98f0e2d6cc1c4741ccafcc19bb0988a574754b2b484495d4c6a774bbe0b5337164547b7a33b05834790d14e8577f7651f1951043e215b75e8911fd000eb2ed12dfe5604f377933c56794bbe04a1eed6b04023550cf9ec16779cfa31e3d1e52e705aca828fbab2140c3d3615e1fb453e68ce3d488a9fbd363b484997c4a3ec1207c61ffab07741235ef4c73fe04688787c8edbe68d413c7b691a0ed54daf3de28e8a1d5eebfa4da00add28c156e23085853da1b41520da8be878d87f376c0bd9e7097a7643c8dbfb1016ed75fd10e613a2cf30cafd1e3cecb8c558fefd3b4e9f2ff92ffa3c3b40b2a64a9179efa85ce3c473f9e61c685484aa60eb7a92678a8608ae415c0d9fd77b5923dd340d4f3f591bc7a39043b094cfcf5748db9baf8baf2def435ae2b3f52121539d563672e4a +C = 85243aa7175cb91f415d0362d07d70973160e02fa1eade9fe8dffb39ba8911852fce43ef9dd06e7c47c882509157a2529a785de503d40da63b2c0e82663794441054ee826c21f9d7b23ed808751fe1aa0ddee69bcaf4b51afc9231fed8e7b5d945189a27648a10df1f236c2aa305ffd1187b811e2555a0f74f92ead246bb99d41b363a5a1c031bd2517db0e6213a1ef3259f398d4dcd58866e811fd14593ac362d5cbf2a27716d44ed99a7616e799e05a0166ece07f9bc23f144ede1213768562daa0ade8a7be995261526729824af10b2857a4718e347f18b999c02b78e147729b38ce9b0ce45ca0824fa8784f53bd70cb8a52163fbc12158ae9c2325fb3cc6c647531af0fca6dca453690f030c744edfb556a4f4283f39e2c66fa13e4256db136b51c3892c206b22fda0cd8c9fc6cf6f3266bd2b6b95f1702fdef0524239ad29ae994dd558e744c17dec2ff71d21954719a75f867181b91b346da79d1ed04fd420220e77a35bbbff9310985d49208489da921f50cc6d0954844b1fa9bb547df202ce11d6461f087766412c6967fff9b74d00fcef578fa2ee8c76f5e436114a5cb7702eb8389d7b42dd72c88a8aefb8e031e06ed6c5e0a14ee1f5106349a77f353c3e61fc90405e6bd528df98694c7cc8a06ec953e29dab8a1133fb67ec8eeb43fe65fe5ff6a73921c09c27ab53a2cdd07040fe9d2d4e76848c3b3e3f7b8d4ef212e12fd10fc5c0 COUNT = 33 -K = 97b2c86fe013d5223196bc7c49bf89c87b018584a6256598 -P = 6a7f03c97f3441aedf5d0e515e7a07ee45d71d1e1d3de87c55735736dd6ec27e1916e4926e8b9555a02eab229ea9cb81a5a637ed73bae98a05c85477c6cc8dca2d3a8e769726dcb59719f0dad99aa3cfaf10c87350d6820162529bae5da82946c0114b93d7 -C = 4d5297f45703e5f94f5175c063fc08855b7277b651ebee3f074ebc38c15aab65a098c93269f20fb261587c0c3b682c21d18ad67af61aeffcaf803e47497358f8de1c8eb0908b4f7f4518c9d3b224fd37eb891b47d0077e607c837d50d9787bf7265b8951880df56d49c982cb52b96aad +K = ba1e88f8be15e97bd7b26d149664d9e63a492ae8cf20ddcf +P = 0bf957c4df84c71ca42ec29a48f0ad5c414b4025813f47d4652678819d1662b083d74e38580ccc133155b9bbb8165740f38db579fe78ec3d723a11be600839fc401e78fb7698c7d493262fe6a3486407a23f09ea5fe647ddb272c1c7e98811b3484fa6fc118020f9e9e74c0e56cfd7972b03e822f822e9c3f891aaa8b70d3f6d771c57359898fc13c61c6966aaadcef2aaaa328a754f85833eeed6353137ea0359c721dc30e02db5477ca46c911214b699914d6a21d7ce6c59b3909bfaa083f38455a825b77ddce885276ba8f029a6b6b80ee458f9928e5c01b37f23d8b73149b21e888da7dd0292183c96501f77e52f27adf3f80bf6201c7b913e09e71af11d7790f538ebc0abcbd2ba5da8daade614a9eb04c4f991cd3f4d48b5f019907f35bdd745afa5f6aa0c281593e66124771114c668dcd62ccb2d98e7883ea44f122d6b41edf3a3f58a6dc4df738aee7fd27283ec24771b529ffdb33342a05c24dd46a8cf533fa4518eff2fa3681f241c5a8ed1f9b5c1d56302ad392974e0394d0040854ec6295a752428d60f1c21566e3b60f591ae5c7fdb59e1f6b161725fd66c0e7cdadad550026f92400c81e514d8a01ba71888e9e425e5fd12f5932e3483c4610415700d0e26a7e57c2c54dbee6b73b1e4a20607da4cd9b1a6f24b16668be3795b8d40d6415296ec65b252e0cdca6f513a3b5c67612167ebcdc535186c2c487b +C = d588428e9e9a1893b9b4d07e15f9ce9fd349d831459e6b5e4d2842ead0910c36105af6ccd3ebd045adf2dc977ba19fbcd393b06266b58b00a63f9d526241ab9ea5a75da7287b9cd35795eb64b6605f2a110b5e29add9e703cc4ef3cfbc337b10f681d1d13bff5f0bb6698df19234d59351a3d5ecb735e46544a184539ee23233518676e1e5ccaf5b44efaf80d4f960ce9505bebb4f7aa41dc7793a24100d6591a3cd9ba0d3e2d1e4d823412bc9d3f18ff7ec403081e8962295deeac2db2de552a54c3dd1b15fc258e9f799e9127e3ffb1d6b99bb28ee9f2d54c276d7d5f32955383aa3a93d51fe70fa10fbeb1fb21c7c45a7fe30e02d0d9b821864a7b3d7b4ce6473315b23508f117fabf8a77c6696f79460c7a6093f69d030ab7253158a273483843bb5b36a80837d8180b901345bbdd7e076caa829c08e0d14bdce1a527e794808410e075afdc81c224f626b3f0da56f12299980c9541c9f3886d663eb2600008f02ea53dd60d2ca29a4f9ef67f94a0245a5e96a0d82ea1309db1ffc12decd0238dc5987eb3e2763851636d6b941b6331fb5fd48477c2e0806152d5d1f93146e0a399dcff5d93b498f9ae20b5b839de3e95e2f08ce13f981f322f47fe861fcc25d73b3658b998f8319987268994e629c96ebd2ef0cda1591280795562db76d10c102eba3c881ced43e5b6fc9bf53b36128bd8d52c1befa5fe14f2c3f3187ab42c259c5bd9ebcfd COUNT = 34 -K = 612903381091ba332215831ea52a5d53be50e5e8e12da435 -P = 1c9e949237547dc5a2a5b57d8640d54b2481b7c4a3771ec3293ceaf093aaef021427f2692406018b7f3ef0527a9b15ad838e002ca5b59f59a28f3e5d0a9816d1d2b18356ca051a589b80c8b30deae48c6946e5fcab34d26e050b4e209fe87bfce9d0db9c6b -C = e1306b54bd6ef4bae6ee3e17f062cf0ab97d5511bfc8860e99e21fcd6f991414aed4f9e0c82f7665ad0b7860316d107dc78875107a3e07e94cc138b56828146e94008d2154800ff21fad144ba65c9c066365f4231281de5dce26dcd8ef4a1f25e212d6ca03f008e6c19fbe9b9e0d6b38 +K = 6fc0ff0520070b5b126dd8012232936a5852f5b9d6d20884 +P = 4e59631e6fa32cda8f0dc1a29b5a296216aa4cdc43b79c552774928057c36ed19ef60f1f8c97feacd495df197ceb4f10fb8f88656b9acebde8513b949fe102d81583f6420bcbd0a2a8e0136027cf3faae6b7af029109db85276109b988fea4841f53c3f923bb463904b20023cb7a369be1d6fe4620b7286970f9e0de23e777f09abe7c751ddd17ae643d37a567ee8e8f693fdfd73a5e44852882bca849e105cab0951adaacaf4aff9a1bd23488301c00b5b6383d4524b5c4153d134cae0152016b94e88752ce5cc49eb7361c4466ccc2521f66a8813e9a641cb5b15c5c5b00f517d8f71eb824e2754aad1c4082aa0e2b98f01b03b5338c88578806d2f11126437863a57cf1eff166fb07bf2fca08987c04e2285af011834c1966006e5eb95383891b2b71f356302a3cf3cdc9a4df94d9f613553caf033fa87a3509799f67db41dc83d8639343debf8c03ace1104fe796b6f22836e21ccc93b6764f81eb70d4f6d32c9587d67193871543531a19c106e647768f25e3653f6e95775fa43f43ff88fbd5d0503a7f4220753d0b622cf77944516c7a0571ce273414607aea7fa05efa9930288f64e33488e49dfcdcb42965b1dd2564f53fc2d8b5dcb56265b3ba5c2f51ed35bab1487543a9831ab34578c8ea165d9c31bdc8c214cdb5518c0eecfee58115ed91b7323d0074fc1fc965ffe384e560764bf3442740c3fc3ecd0e2814ce +C = 81ae4c5b45d91b4cc97edb0f1a90bdaf364542b433d03e4a80c29fba23ad4f7e3282ee219b2c3f75426394bd2d9b75f333000a8cbaf8d394af55c5b889464beeadf589fbebf33e5ca4e816c75716c73312f162d97932235f1c5fb8c833336c633828a5e3d2f71822d6d72936d8f68eab6bec4f17976c17d505bdef23c494bc6db43b4407784ff090824866cfca8a5b381fb1174ae18c70f7900594b6ac1dcac5e1a7b27241c1486e64593fa7e45b30da050c2026dcae7b0b3d1ff0ff99896b59b958f8117a77d5313f036cc8698964f715e1b0f35a71449ca75ff7a431cbf63409b6e83a19412f07e1e2195d2ef62d7a54642bf54a2a0de0753528756d1470a3a42ac3f21f0239fb08e69ca98f777ab8877fc1c2863b1c3c6a53907963f6f449df6deae104466b5bbf3859fc0d4bdaeb3f4def926293e4b2542c928c78fcc82b58072e21cbf0b4d7b9eaacbc4937d946868da68b9f99fee9a90dc3dd61d0266e542066cc405cfc19773794c19880fc9e433c0ff674e0494e475213f68f2c0437267f91a1743c5202c94d3fd04044ea17e1c3d8eb2c6d273816f198aca5c029a9e1352c5130d3bf873fa448427df48908eb9151e92b2c1e8d276313549858bff8d3daf2ea0bac78a6414a75940828a46883c21b3c6590fbb061808573732c785fca9a24e5c2f7090674d7dfdcc1e44c1ede2947eaa5856d82af7eefc016b3ae5c8831b2651e87ffe6 COUNT = 35 -K = a40924712deb22ddf5ca08f6b420e5f591f8c0b5dd52d837 -P = afa03a12ea08412c2d43bf4195bc1e9b2750e30f45e2716a5b1bd8dff39a8357afefea1cef8816931b9511677bbf78c4022676cae9423db3488da8883146b78437fd27b548864a4b2bd1e69e9db3c04df4a9f07dde86056935dd26612781f6ca70b986048c -C = 75e6967929b519d96d335d912b20b3465cdee55fc454adc00b2b78419a53aa202b681e9e5bc0518a0ae75b21f5b2687f9e96c36d2bf33d8e7947b138ebbeedebd11b5598ef6a24dc61b380b62fa79a237c5f62c74fe85192dee3b6f94b97b27f9faf64f7c570017d7993fb0f5f8fba74 +K = ac707018b82a8d1f0dcb5fc11ccaf04b808572f4a1185c9d +P = 04aa37bfb4d683ca2eec7717ed580d46e28b47da50013d63c9acf17529919b0d9b7ec9472a1de2d954604c345adce942a48d8856bc7e7c287d86c2667be912c353259762ad682a891ace8a94bef1e278ae616efa961b0d9d5c144f58cf5a42e6d100af5a910b7dc6e38bfda21191e319a017bf6d3efaab98c6fb9fb956f5e21eb073e1a9aca3a63bd1e58e8c8905720c356498ce07000024da321ee46a8ee4b8edb6e66c76d5e65f1d5c07584ceb4066b4b1d568ac2eb81da7afde6e5f540686e5ffd8e3cc4737c8077e06ada725659c9f618c83f530155891c92d4a584a479b1707a94d607f542b42171840a7e45970c24c446ab652fbb3f0c9b8d00b0777b0df9f681674219e22e16ec68414b704863b56093806c8247bb05c6de78c9fb8ca8565e53d1d9de59761b5d271e477660312eeec6520676825da78ec4b03e66aa9eba94a55731c543e16917bd227c16fa9e6cae65792d2e9f2a8fac47449a86a84617efabd87b3e22966e367e06bc20d6eaf7b215484785b4808a81e7e29db94538ac32d240083d14514b15d6f76070381fef5267ee79adb4eb3da6243ac6851dd5b08c80cd8512c18e22b945cf8c48b3ec6dbf83139a7acdf7479261e72474981ea060eb1c2196329ba5dff6e562c329bdffd6cd8de7d320af5ad9a2c439c9a385ba62fdb6ea1e622099ee8eedcafb71942d92038276d6554e1b9f74f9e2d1f20 +C = 31616ee30669c695df33084f40cc8b96c30eee0666c952ca590c36bddd1ff7e7df131f4dedf95f45e8df8575c1a9c2b6332c7a9fb34fabdb28c9b86e9830ddb041ff5532b2c98a32eb78d9ccfcb57501fbbcb0c3e6a1b0173701ac61487c4c39412c00497b796f1ed21a0b4ebcf14b38484679e38160ca9c5a78c15a5d9a87348110f7ed14a96e90b445a892af3078b0befa7b02a2b94202f5b91bc4920c2e70d7f49ecc57a1f4de6586ea679b6177272099f56fee9201d0d7751ebcddb61b2e42e93da80d37967f5d7c8d16f56f4526d46351916ddb441152b6066bfda4aafa3664fc67d591045ff3ab0a2f341f73dba8c0544097be07d0bd9b38d9debe18c3d23c463af8785628f6ec45e8ed7b366d2e0db6898cdd931cf8728b6853cf74826b70efd6ea7373b9b9012ba3a5feaed2a69fce9a904c2d9223e86d4b17be0843d9a02b794cfe968dab81fd012a623c9357433b7787622bad6fded1ea77f8dbc14cb27253ac56eb7f49b0d55e79c24cf809008f7497cb073c0cad50854025cef8d13243f08d6cbafce0efbb2707be5bb0d7c408eaadd5155e5dc23eab946fcd31b881029491cab42951d2b7c351cb6ba2d6a73c75891d4769c96b49df6bda04ab0d9ed62f264f41710f8b743ada9c835fb339f2db9524724072e11048f693ddb1761cbe26f92700612f1b1de9e9b99a25c2aa4339d6ebc0d05ed3de429913bfdcc6adef0f6d69903e COUNT = 36 -K = 4723042949e86aed1179c1a9f5aa7eb36e5221faeae7cb26 -P = ce71d189b4964761f450fdae3b33b71a81e89e176a6107340c006ab76228c6ab5b678c3a7a3eea75c4dc30a14c0451501f4864c8771b897f3f863c7487e100a5ba6329dc5f00a17c67b56616ac19e719024ab71a7449a030fa8fdff2dc67c93e702f91fd88 -C = bd575303222095435a2761f7ce8560ad6bed44f4c6e00486374d759f73586c42ca9fdba6db0071b18a49677622c31b2cc94f3de726d314451ca89fa65ccaa7fe625afa73f4c502e970205ad7b90c9443cdc89a176cae744142633bb47b65e85bb0b3b0a69ecc288910fb1ed2f712aea3 +K = e86032c3d9cd680cb9d31ea51d83bbc1e373c6a524f0637f +P = 98b67d09f73ec3abdeca51e5835c5d217e5853d6a043eedcbb2a08c8ea9c08165d044d5e0da868564f1f5a6a19626e8d51ceea4816a4532f9e31203ffcadacf14f8eac17fa34e6124798778d3cad324dffcf8759239449d2fcbe15c76a19264c78b154c3e01823b17a05f3f27d22d064819039b88ecf46e201a10ecd8db41dd5a74c520a17aabf90cbceb431421947ba9b772d61e3aafd626ed350952e3e458416f29cc7b7f2844fcb24b2c3335af17fe3ebb798b1ddeabfd96eada0320e047236cb8db214cf9f3ab53a9753154910fff395269af31f8bd1ace464fdf881e1df1ecdafa0904474c336442d14b9ede73b49fdadccefbab7b27cd1325f5b6bbcdf0b6846253789b77318c35ba58bc261e2e9aef0cb7f73b238031a5e8799a615692c2e3cce7c0bff5ec60c0a7772abe0ab6f4cc7604c2615417d66a9f6378dfb63014a16a44d32e5ed582a6b8452591a9826972564f51636b5d49bc9ade29eb9c7c216b679f85bd4a7bbef04e8f5363fe43ba903af6306c3eb9d216a19ea2d05551fde8c00b0c6f971d6ec8682cd52502c881dce4284e0d0669fa803bf426d6914b722f9e22d86a0e4bddc6302cec01f54ed0541ecd7ea73941b675a84ffae8ec09383f11be9cbba08c0e3881b15c8fd41ba6dda64d0c08ef2883038e20b35f70fbfe1ea1fc963c71f47de46e5511b72735edba9265e4042b6a1e000bad13b61be +C = 630781bfea2ccabad1db3f93a4cd273fd72fb76cbe59b02591d1524c251fb4db416a0f823e166cf0dbec7f71a3e19606f2d700005479f2a3ad7b37f795f618353d78f9cf76cc96c88b468834f537dc261e9b80e5e8a800336b4e30617d5797f18170fa47d5c5a1b1e03314bd1f4f69c8b442cd791bfed2b18f3d931e70dd7f33a644c1451217d96fc5dc4398c882466bb712fa4be11e1cfd58308f01009210f3122a28c837baca3e2863ed30fd0fdcdb1931b2f00b8f910a23a9e15a0d461a55c0e73db9ad74d7a61d807742b1c963689ca0aa02b3f82577e4ba583e8e8eaa2e6d08d3e63bef4f49040a0f40cc03ec0eaffbbc19e03a1d23ec79bf548e3eac369e96b0f0cc74768855203de73d3ca0cf24caa4ae87febab6ea1333e8feac75f1ff36d8944830212d813c83672c37a1a10ee99d1295d44bbcb2bf6bc44a7281294bda74d22a0a9a17717720fe4312854e2d5409518e5cf9a9b2caac7838c969589844d20c7dbdb441dabba85867d558b35b27e57b8237d3212f97926e381010e4e0011f0aae6d97010236fe1184f55651aa1dce60eddcff7bbe5c05ecbd7677062ff08fbf754af10c824abf361de504023661a3a74bf8ab5d7718edf73f32890bb328626c062120dce07ddae20d9a76cd4b15246b6feeb370b59c798c5e613f71bc84be7ea6a531247875f8da02512173916316dc21aa71003f6258f358b509c7c6a9852e6279f48a COUNT = 37 -K = a80da7d39201d1eb7a37ad5598a60abd35a9e8dad6d2cdb5 -P = 5155edb67d1e7e22818d5e3b5b5227ce6d3b0c6458790c9b4fa15c9bcbb89e55f93411d448b7ed4b60742986e1486220dcd6892ad2b574b53ff052a7f3eb396a3a442d7e0c51a8e836da985b2252e1edbc9180d7275540fc13b2badeb01d061fd7876f614c -C = 387bcf1056db7c44bbf0d9a210e47f95bc271fee04fb3c28deb1a99dcbaad850143c0b5ba12bfe71c6cbd2caadf4eb7381e385ccac85f13ffd21802c77b75dd30322a7967b2fb4bd03aef1f5861ed7e10d8883e3e7f38bb3ac7f2a00d00e780a71e8a29a338c709bf0d8443ae4a5fff2 +K = 0fa713ab83a3a05706a249ec2726b57d0e28e8ccd678f528 +P = 5845456230a4cca216ba44d8dc1a148501bd2031890d7a38887ef9a5f583c59a0ac07e62aa2e865e614da76e0d3395b4e38953251a3bfd2d56174da1cc40c688b772a81a456ac17145be7fbc3e8951b172c5ab840a4ce3afa3eb01b5796391e2d542c490f6fcb686ba323f2053e78a457e1a2c5be4c9d8d1283a48bd8318ae660e4915a7088b221abb79d32752ceb833fa096c88daf4f761b3284fafe4ec226e03836ce9e07e2903332333c182c8215da7046d574de4d74672a5fa81f0552bc6b8d2a0b7e96421661c0f33b9f47432d85c973e5b0e19b95ddc2324fd0f65f866b589f30378b2ad543dc7ff503031c64df71d1b136c69e0a525eb6d25c1c07f0a66878719aea3c958113916c0c4623de98e1a05ab140ff3fe945afd62b5861d2fea324f18cc241365ed150980f98507fc1fb02bf04ec5b6c801509bdebdbeddb9be564803eb1aa9a6e26ea07fdf07cbe62ac2fe2a97879d03e143778c799d0e5e42b9a7625c725c485417a45b8b4e39d0b9c2b6096a5a39e6d6a7e4666515897358bb16b02c239efdb2740f4573a75b934b109f7815caabdfc9d7a693a2bda96682fcc3383a05ce0b6ce8d748f13b85c71fa97829b97527da0c11aed902c2cc580c4b797513633b41f27b8b9a5a9e8ad0b7b8282dd40cc4bfdb36ecc205c14056a3aefab83ee1dfdbe7a2ec54a62216117e384f2cbbf797e428140f0c3686fe49 +C = acbefdcb4cecaabebf31fa947a610cab1dd1bf68fd4e70002bf6934dab2ec7547bd5aea0d2ff1a86d2b99c3c97a49c6c7ae5169421c49dbb90359cd6bdcbb3c2ee8d92aba841d6479abf614f49edd501f8079513e711d3bed62a65337deea1a7106061db77b18100da5b4f2a42259ea3548cd0c496667bb17fbaa3d16cc3c37e750832dc87b016a3e14a7448420e0532168d63765d9801bc35fde0511c65bde637f7144459d1ecc3ee09837ea59615301d3271567a9a0bde292090bb6d51b924d07b4af4260ef026f45d621c7b05d443bb9a921dd41fc9e79341786824c67f5d99ae9e23f33c9c7344ae5f30e07b2169213c66720866be4b56bdf3d6270c2334951baf2d01b3674417b1e17721d40ee3e164c385cdf38d3d11d52bcf3e01ce871a565f826ec6471753300c7409fb5d5393cfdd65c6f3d2de7f8725a110ef82d63cd5d8489bf065573711242909bf7eaaa577fe280d2bd15157079fcc9507c9be54ebc359fd86506d519043b3c4a231173149cca6d071cfdc77145993f40b63f7e924d08712f248676ab0b6685f8b97e4642ca8a4be577c23df8ab2f88ae7ea95c780b9dbe0e65b81fdcffb74835f3b260dcca4955b1492d189734632de85186584f5a77e7047463621615cb233b746d70b60c7fb5e4566ef4ad6ee59d27af7bf4074a024e4bbfa3e238d26b1730889d211810141d02d5dd1e34710a01d5526d2cb02aff36b50980f COUNT = 38 -K = 3e8176f1fd75507ea0688df5746838bad9bccd697ab5a1ef -P = 9d42258e42094ebe0763e880e98cb1db4161762f0a005a9bc962ef2d2e0c2552f84e78df82ad11167d437ccd6590c0298d8dbb1233f630a946fe3e052f8261ad35c90923b0eb5567b2b33290386284a4fde89d2b0c162550285557975e8e562d11139d8d2a -C = a1dca9adf55216b104fd85e377af92801ea88ea5c4d667701ca10c1e1fcf56acb384d1c63e90c58aa58b2e550cd4375ec47918e2bd97bbea3f47f788abb47b2ed3e236e090faa537533b2c3fc2bed543225d881ba167baeaedd6e0c1ddc839c6f1be0ceda69ec6fa6c684cc9e2859469 +K = ccab7e4b48450dc416fe1db0ef73e30df98724b985882f1b +P = b0591bc74cdd6c9b11b60c313faa22d9d1bab80f36c418b6466d7c8888e3edb23cc56de23b3df3326ed2934a4a513b648d613dc8bc597915c92608fdfa9ca68f3e894d3f9d0e4ecd5694093d6a9b7b8f1d58adb3d265db99fd9c3628d60e36fda4dbb729f91483b17396422a9128b1348064053473657e72a8a14ff00ac2dafac2e6f076c82a813c061cb251386096f2a53cb35f8234598c147f7b16266920b4d52727c35cf30c784f80b50cb0fcb87d33504614411f63ed3a62c84bd8100e5b3a89628932e44a6e35e25ee735b80c45a6f2d2fb9a7570559981551c56e16a95a5df1bc2e2693dc91a556552b7ac641ade543e3a1f8a7546ab7f28b739268125361891915b72dd6e0675feb1500a27739a9ccee134f88f068ea9e60d68a4bf156c6fa5698bef7b568ef54e5b85c9282a94bd7855df3ff06f64a8faa8a6cd351c9b87ebc45c0d6228093958c9e35424e21e6c55a5f0d01d1f52a70f11d10aef297660f5875bd023c316b04fa7294b2e7484f8a3af3b75cecd92b9443d80e6cee59184622ec0563148541535037de97bc6002769ff1d816d7636a1e216fcbe38a485666a26c1b23203bbd8cc33bfbca975afa060dc8b92d1b8e609e4b23ad4fd02a50f434a9832e1a3cb7c86b32daac7d3f206b88e904bc0fb328a7b7f566caa9bffa385137837cb92f36e663cf72783c3cb4a483f6c98b92ccbbc0fe223263df5 +C = 2c5b63604313bbca9cc9b7bc0aacd80ee25a097bb50157b852dcb73ce8a2f9060224355553fda800854b245208c00c8a7fbd7dd53ce3a9561bbbc387ece2fa7e2e1ac9db08988b4baec23f260dd1d0e20f02ba1f24d59445a9ef21563e1f49e58a6d907cf582ab938c56300751bf2b26566e0ef1d15e25e9fb10b52c4fcfdf6ef46d5ad9572a8bd921f2c46db39b26a8557eb2a43aed14700a8c7afaa7668326f4a0f548f61b8c21fab28136431b6657c40b5aaf6cdcfc665482896098780f14a16608f099cc761b21755a7206407645717586f8446b8f24157d6c41edb86e6bc68b64b2f129685fdfda7c494709c9aac567c9cb750b4845adf1680fffb7534fc619e25ae23e07c08a81ae2372a90919e09588faba614c117e0e418c396ad57c933ed9e08af934cd4c21f9fb2f2ad6869d60ecb6b33e391d51f3db3dab4b95a7c3d746cbc252b3a93dc748b41aea3915551e4f0093fb323164e67b565653d81543df7c1cda0135af504ff57176ad1064d740ea348ffa3cc1769c1c3b281c83085a5cd1e45e0277539b4496e5932bb3812a018027dd2a12da6c66330b806734d6a7b412fe563dad6b7bb97add46f52b85c00799fbf26db97d667db1d561aafc1d8a2c8e0afe3aba76c5dc839b4b992fb22534f19615de9c226f9031f8f180fda69b0905bc5a372d026223898158b0bff00e2df68919dfb25bff279ec7e997d6bf48811758a468c5e0 COUNT = 39 -K = be3f88290310f4c8109bca093224851127bda7439c9da1c1 -P = 77b214b9fba9fded07f8b5b069e488702768095dc0245f8df9e96dab8dfb62539f78b2a248b057fd1821900daae768eb382f7e9aacd728fc06adebe39219263f5a0a7ddbba0b58f2bbe61a1cf52e81bbc01d5c6b55fc587856a11e786ac32137d5658f8260 -C = 57a4af3a6e7a466e6ca13d4e7bf5f90528846a4d53ccd9318946aae8f4e395cad6fdca545e38dcd3278334f6d2031ffd2418dac7ab6cf88f67403c5f9f2aa1189c47faa7182a77719b160ff3ab91a9d7d9d92938ea7ad8ef4ce95734001c1e6d8969421c7076e14af94833e9b69443e5 +K = 3c072fed8bf892f9e8f35a859190d0c83a9570d3143cfe78 +P = 765b137845b48846537bb564dba23b65303b00a50008c948329b9af694301aa2fbbcef1ea3a05ad83f1e32f8e3d8deccdae57f3a4dadc9217186d5acd16b9592b843dbe1d696e4cbe5510898bee6ef1eb3df5585418d6568cb7b4f780688961e541d573633bd4053e948cac776751e3020646fda07a3d690f1998a9a6c3b12d9b55424f6f7e590ff9094f82addb6ac370385a81b3db4f1c46399184f68947aaca096fe32dc702d1551a7e896353b67baf900aead7e83096ddaee4b453e56cc173e6fb0c79fb2f90e04386ae94d4f388ddb532d981ae7bd08665003f0bb74b6d27f02c5a8ca32c8a9bfebd30dc10ad55f26c92d3c673b710b898c2d8bc7ce45b20d138e3faef2d3b62dfcfdbb529184d1ca84fac2773e65ca8c38cb59bdaec65a4278bbd566e00abf9e11318ea49d8488cab5395d8323f256c691f61104095b4f2c7fc0cc8fceb265ab8f233c9aaf7c49b9f05f0d488237c7029e55386b0665b2e78f4d1ad258f0e7e26e9227b2b085e264edf7ed0ab70d8ca4df346e39017db7357d2cb5655f7a68632b178800cc17297748d575db844d64d533f7a2b0a1a107322dce2945476667043a1e35f00e50e6cfa2481228887393f3173ab17a7523a721ec13fa00e65f7309177a367c7550ffd585280b3ba33831a6625e40fc2ae013f8b2b2e259c788a1a7a29e046c41d0892300a344e968d52f8ed2a726012c4829 +C = 6cec98dc88818e3cc226701ae4697f2d28aec9040ad2e33cb827200d27b8b5d0e92276855818d85b98bdeb883feb27d1223058e8a165bd7cd8278753301e093ae5101956bc42b158c7b7245f128a8b53ad2c550afbd7c0a280c6b882c020abb6920abd8a220423aa37ee6c9a2b112acd430a5433e49538fc2ff9a728d34f1ca75daca04c1e48bdfa2ef089cb2b4509cd22062bc8399eebc70c0f6af6cd8cb3f33c55dbbc8be7afca5d8d0071c925ff3cec5be6670a16f6e9a6d97de8d5843fc6b1afeecff0cbe391e586df4eba4a51d84fd44b170169995eb392ba8936256c86832593ca09682936b71a5d405acd3ef56fd14a909947cd03352c2615783cc063fb68fc97739bebbe24785f40aca368dbf6c438b16cca9fdc2a024c03d12bd6e187d948dafd0979211689d8424e19f4ecdf55005363a9fb6e47a008e9f90b8121c992d7a806be3f763fe4e31f9572b9c212d95582b986dde9c4516c9aef31aeac210f6165f6ceac433b3a214992217b50023da6838b254cbefcc1d453be1b180d78ecbcc57af0f4b16ae9f3af3216e8db2a6c9e203925eeb700dd398e9ccc3dec9df3d8ce5210587f34aeea2f489a5d1728bac7d237121babbdcd6b704d8d0fb7050930f7012f2fa5d228b4bf38aecc43d8e69b66bbe93cfcafa2196c92bec55b8c36afde0526a2bcc4cb55767bcba183ee29f8d95e321f2d074a86052b71c9d32b341f865eac2e4e COUNT = 40 -K = ec07457e78062bdf057f5f32be0cbd09e4937a3c256bafa5 -P = f50904f634de486a33a7ea4c3b591b4c36613b19f746cf91afd1577eb9a2b03fd748a2d0cb6f96395d482a1e3a96e63ee6c3e0e6b69c1c31135edb60c5f6cfc7d6d27f720d67bd9e0ab1d798bde362cc636ff53e9e75d811030ec36783baf6ca1dac2f248e -C = 99050d5cd4abdc5fb187f117f35234b89f4e42973a9cdec9dccbaee7a76e53f9de21ccad36ad5e250f1e1f1a228ea1be0c204c25a764df4fce7a9bcd7a5160c8b4cc1abcf8f48450e518e40683cefee30a455ef5ba50981f6d9ad3d6b3cb556670eaf486c7a1bd53221e5d9975016e8d +K = 4133faf1b3139809526d59e2f6b472308193938034a43479 +P = f4f72382c8dba363111f05d918196d109d4cca0915f8ec724b6b15ed48c3d87470bfc783fd3342852a7608481286127ec0991c2fe343dd0543f31440365eff92918538a01f51e017ad23c1fc824f1d301dab88e74a7e9c53d658e532a6d9aede7c04edb6fed6de5aa2362e8efe41fcf0b04efdf2236abb7038ca26ba5afbcffd5817bc55956cfdd3dc9a015999b2ccfabd15ac19a37e8c33c2d13cb84a34bdb8a6752175a854382725626f54a045c8ca9ef26fc2fdc62178ea45737ca54ec21fbc4e6643dc4c31d3c0b6253267a3edc038f079a42190d835fd9658d3dd69dc614722269e6d22fa605f9558ef2c96949ec36e70e9705a1f8c2dd91cb6a205cec8fb3aa068ec169abc31698db45b16c6e95514ca94f6fc340b4454d79f17d59abd2b179c9f4e638af687f36aa14755fe65419d3303c7719bcdd0d275708df457ccbb6776a685e6f7fb0c2e780e083de628b58a0d6696406b62d11c2cc6e2da6792ed87cae2f2ca446c9634c3cb978d5995b08a42239c7ec0396a769a7c56f3faa8766d8572d3df3fcf3af532c634f698081ffcc77b2df71f8d0761eca003a14bdff91119c0201216ef5ee88fded10dd9af01f8247f367bb9bc2ef5a77be218fc6b70a76ff6f0eb456050972e74db8ab81c31f5d826df3cd54232424ac6466178cb395aa941fd7a8a0a74796267fad5ffad1cafb8e0b5b3143d578312929adecd5c +C = 4db71a36835a448454dfc947ed0b8045a7d9a07551b5a55ba3a44bbcd86fb99cf3a82670b293faee9995bfa943e71b59392deb4ca572b2cdd26c08e92fafabb06aeda785c076c089ee1c48fda0ed6ed60b4e31ecfe83ffdf4a6b8a908f3ac44181115773e65095a88dc82b5c5fd5eb6c3de9c1985fea0bb85bd399411833110730b9afdfda5182b34d778f246c7e78daad80d8ce8f6b7cf80a098589135c150da08d816a9ca074248d32a5e235f83ed9087fcbd75cc844665f2bd790ab16fc3a75712b0ab976a7d04f9e262057ef56459b49a98a5efd01955bb5a37cc89293600d5fce4d106b875027813eaeae929a3552d56fb21941f86da05b71c078937f20d22787f350f0a2fe29f0759da87cf60bd72b12d2dc4a94465c9861e40e55494cd3f1700d2be85225370742a4c91dc09a4e4e3d8121719e3a4b585eea9b73b706d66042e68061270a303f191c5db0810e6af605e64c044ffab9ee7d12f8ed86d5ebe0b043cb83432e9e22889e1a09c41d7ba14309453792dbcf6bcdf7a34df4ca1c0f407456c8913980a810a03b6f5c0bb95ae827798936926bc4bf7f785bce323e6bd281f875c6af688c80b4dca586326ddcd95da2fd2c152e1bddd6da0b94569e0ad7f7f1217471fa449d7eb7074a77c7984d3b46881e34638f3ee846220f1349428909f5f17611c74c354933280a48aa0787386eb049589d8baf0bbfe54f6de53e35b0b2072872 COUNT = 41 -K = 72d578d15fd26a28ecb6701cec3cedbc08141289e95c7a5a -P = b1fdf8706c756544de0c8dc8e68e0feb31418678ba276528381be5d4b8ea683a72ea9ee37259a4822484662c1ae1c01af4a4f3c1e4c60f93e30cbe8422019a0bf4c1b8c54d4c8d6650d18c1a49a9a7f318d450771f61c08b3b654378e7df94a826f612c74e -C = d4e813e865fdda181bb8eed28ce30865226ecd9364041fee5ad800364b69f0262928d6e725180badf160f7b0f24a21437a20b8a91124083c287b8ca7783ccad0c5cdd6cfbc270596df444dea6b38d9e524927ac8cd53e08993f960b6a169179de69d2cafd78e558178319478936717d7 +K = 6ef0595ce501ac61403993d96ef7d2f51b507956bcb4c27c +P = c30335e9e2465a593a225d676c263bb644c409ded7b31573e0c0cbbe8387cab4de79ac07a3069b2878c37ecec3a0c9cfaaf1ccf83f99a2af35df3aeec0426bce6914713af8123aea7bcf2ba7f3b5caa6e32540204e92cf8f08f4c385e6d90d672fb1a7ed1135b9e397e54a27fcef0c87ee55254e77a88cf5c81fef2181fd21641d3dd4f6ce22cca8eb250e0ff57ab645c3564cdf2aa70b48f55f5250c94995fd37c412efd5cae8164cf9f027cd3f0c94dbcaa1322ed88f5b7135959cf9678eb5a5f9543e48dd61429085cfd19e8c27fca2db3a4b830798c65425dcad3205ba14d4c90af621a141bf6a27eb768779f0cdfaff3f6dccff33aea0409045cd467bc29588829e23a54ebfb687c341b430ec8c2dbaa310f4af28773581494f6292575d01c763cc744feb028717dae8723d34221399835700b89991a7e2febf236ea0c69936df528de75f544f82639ca9f833df791bf0e3cf02a6b2f9ce4483a9c10dd27393c8a623071ead30ce0a4a2ab658523ed27062f820929cb4be2b511402f71e3ab5fbbdf100e6634aeb20888b3541a5d8aff8c7a6e6962a5ace35d1f0d072cfd94d72eb41c70081f4b392d932cc186bd075eedd0bba6a7ca2f3a752ef3f8ab2158268ac41eecdbd0283ff03f6031c84688594ede2188a5e5ba12171e3935002d3a33cf64eb33052b3cc5b817e94d585bebd0ddf0b8f813dca4a73378f2f9693 +C = f4896696511d6acba5bb9388daa75d9bb19e555dbc9b45adbfca8967ec522ba29aea4273766ffd305b6338036b959554127d77b8d39a12589219a471e0487e1db306b74a2f17040d1f0981f48ee32c4dae4699c8a77d1b8333ca81eb3d6e36df58da7eb6c04f76397895c0b39f1a61abf46070d935e5ce70742534b48a64d186db74f1cb0568aa17b500c6a428449777e9edcf08fb5a0d5e3c85df93ba0b41261fd02485798943fef052c95e003da5e93ee804f876d254d413dd1e3647e8a0fbdeff5c99fac272e04cfa08df91fa0cf010d3db0c936a16947a444fe8af0e134b066f291e2ce5b18007d1ef359630da144b431d90dccbf8bedd65509e223865cb6b1f2f67ddbcc1ddd01f87b262fc3a9c08044015f8a51e11b1f13ed8346e762884ebc03e7413759046e91f401b1427ae8671916c8fba6c794e63efba9a3426f7debc957382e53044ac15cb6a454296e4b605f09c74da05518735c2d98cd1ff83677ea83efd69888c8b44ae9581c3730cf696b7556b6007dfa14ffc2052d6a0fe1863e18a9ae0254c3c22bb36f100966b8421e43b3705f908b5ad9610b85189f3a77fce4732f9cf41e65d4a64a48b285b4ddb6e85192c7446fb31b915f9c5229354f80919b130d42037ab346658634539c41153cedf9fe7e5298b379085b40d397be05d635b01e055f58109b36acdc5b0b72912799231cf693c468113ed5ea214c436d7f0fbe715dd COUNT = 42 -K = fd3f1df430cb3b0fa4cb954d0aeb2f2e4e5520a70d0c3b20 -P = 9ef3f555ce19a8fbfcac8374f4b7c5525b0efcc309beaff96c328f3193e52903e452f68d7b6d50563126e1776e688af98d61a21899e70b1376ec0e97b21c26211a5f5ab9817491ca0cc1338b3c171be51d34761859b7ea7fca5d576b80984bff002494007d -C = 25c6759a3746f9a2bebc98988efbb98c238925e0269eb07ef84a3c32d12ec32316f0610848eda971a7c6dc8bf9702c4761cef43200b253a5170809ee8d3402fca5773f3306cb63dc30ac2f827322b6e8aa3f72897eb80de6f3595a52f22902ef211b97fdf898a620e87aecd6bfcfc320 +K = 0cd5b52cfe559bdde96315510312fa3f20676c8a9c7f7565 +P = 9707855773b7336bcf473cebe510b17fba4751a1a6378da70afe75fd396a13cdc34106bc45667cd725486adc5dd21d9edfc28d5240ba66be839262f3c175030e2c1d3a05f088e830b6685eca3c26338197ee0bcf0af533a6f82a40058afa5f5164e1919dfebfa2c0d3300c1627474155357283f1eb83a6629617d93aaf0a9471f015c1806783051fbce784c6e6b5c02a8a39af9c93e479052faed7efa62d03d1b6c5bea9ce895d847628f0ce8eafd29fd0472605de50df286ada14af165300259d55a04a52fa10e23b211eafe4f8c81061f405d7a84a697daf53b87fa360ebc3da32411792e6ae15b696be5676a13b13e4585ccdf2699e969ee4d59a5ba1a5dcaedb19954773ae18fc9ecccc5bcfbbb44a3a35b189c9953ec582cab0b4972444e0e312ff4193cb3cf26f388d4306753a3772bffb196a3c95ff3e6b4e55794a72d22c92abe492ddfa1537499d26e5b94be1dbb69d70f840fc5aabf77cc94d1d4ddd1e340a3f7e5844040da7e7a8e6c210c46fc30d689b842f7b3bb0ffa5a253d005af730c10806bffe68209b268ec0ecba7a97f032c94363ab16829782c598c4d5050d60a7d73df72a0390b62f7bc31d379c369c437d3c92319d6e0f16748222822b383129ef59df3e136317526dd7dc0f93f3d017ff5d6f26ff0605769adc125a5860148c5501461b62ece638f5e065c81a228ae8e12eac7e36066952915affc +C = de8dfd0c675c80f3ef29685ba6a4de953155edf760fd1f27069216e7f090649e26a2a97cbdc2b404e9b7a8c12e18ebbfe4f3198129227eab5335f4c21a455dbe5a4af8ccfa2c18b040b1faee3200188b2541443068e56482dd891dc7dfefc46afbc2ed748048d697cf86eb2b3c4fe068095bbd68523ed4ad2039239c5f4684a8f07e49d83f562db3012363d4625f598dba155e8ab164f18fe9d1dd45047e0fc354e0d8b12fbd8add59c76700a279f2844632a4376e7af7cf444e6202b598c52d642d524a13c3e4b5babd741c649a4179d4a2f167ce3209eb52399b929b1252c6e6698b2880e0b253ac43afe8f904ce8f9178934491f023f1811a1a6039b5e83de8401c511fc33ab23cb7d6164f961b34381ec115ebb121d0da70d4ea2c57b4eee5bd8ed5ee1590f95c43f59033355d1f55fc640a174bd328be344beb3f95704c4cc5a76b497ee2134b2f05f4943b6260f572086881f1a79158bdc197bb9f599064afd4517689353303bd8ba37befa888f03dfea382ec379c4372bbfa57281a134576441dffcc901d63a1bacbd60651622db847883dfef0bbfa356344d8ee3632dc23ec52457f3a79d8b3f2c3464fc429c9d3b5a4e42c03b832d2ad676fddf01e7c54a45043ecbdb8926544d4c89b6cc6865efe4a3ba69ff2d3d39f5de6c5bb25aef386764c991250b6353474ca7ea083246fdd1d13d0f9ff6cddea319e473b21941f5e4ffc4095fb COUNT = 43 -K = 13cc5d8d199c2d907c22e84cae2fac7592e41ed9e03ed6e6 -P = e26e409c43ac74b5cfbd1a89b5e9bf300733336b6e283353d44b5a20b722091b7d2b29296bb73a33ef7cb60f23585a88d5e3fd757acd7cba031136a5aa4dcec2ed4e09b400aa6c90686ec9885774a7ce565a02498a8ce4136bbbb8978a4d4273cafad647a5 -C = f0af87f0b3525ef06e66dad1e33b96deb7c6d55c0bbd18231311b932cc96f202e5c8f4356005132926677dfbbc25c9c5213712821fd724b58c3270fc9034b2dacc2b9f5a52922b923db62f24b24ad328209eda162cc88b9d68562d9426af82a73d61feb899d64486c766aec0413aee3f +K = 552c5be758575b55342371df294028d2e15630e20d9f075c +P = c141a3e3749b515c380cc20555154f5854ce435158d70406daea002d10bf9c0efcdf4799e6c9f04924d5e052dc1e3dfadc5bf4999a431a8370d3a98420daaecdef0268c85de3fb5c47179c3b6eff1cbe758d9fea0323ba63443aea017ec156a01649fb7167d4cd72154c5a355364f5fa3c174c63251255d7a63adc145835f74672ad15162b48ad9cd792a3d9c253630854ef1e67fa83ad878cd4b26483cace77cc7862597cb7932b5207721f46011d6a75b2c91fa7284be6c4a0438672d6f0364bb84b414a959e335dea91b7576c45db975a5f47de76723d3856fe75bbc0298343726d99eaeb63f1c94aa850db6687b5c9104187b695ba557a2abef21a8ec083c045c8ce221879d0d886ebe738b089c9c1bb6bd5d54e08fe6e2b6773513eb21fba51d3aed5ce0cdb72897940963c81dd39e01d97b3b4e865452a5e21738d6d9840bd463797fbf754be5883d055021f993c7688cbbf7eafa29f60bd3684c7f198600a40014c552c9e557589760fdfa63117d97d4e3501d3a89945467610c07b958097410632cda13506d605ee68f95970690e092bfd6cb097469fa1e38166e02175090fd7bfc41e91c3df5ef94ee7197e9e153007cd6a6e718f1e0fa3072528c61b8ad9c38e7c1e789935b066f06a0a12d4d017e35a84bc757bc3c5109c0ed096b8a3c46c769aaea7a130862cb4a5a25ba825fd250a39fe93834363abdda6290d +C = c83fda45bcf776420a0f17968dc6968aee8a9ef99a612a66557dc68cd25d3b0b9ea866f13944d50e26bd2f109670dad97e749697c4dbb793a328f06aa2ea91b15b3d61f53f73c3c1c242a419d59fce5ced4a56e6fc6d710a5cf73914200f014d8c7eee72153684fdcaee2a72b87be4435593e0ed2c6f28e60f0a6f0332ae737cc3c00bbfcd3556ff042934e60853568c72147cca77863b39fde67d88dbb6137ac9b3a3690e5551ea1bfcdc6e06d128f8bb5170086628cbc10e7e80dce949779773b069af7e1ea33a425cfc092d1990cadbdec522ab2720622e2151f9db5c679a40f8759bcbce699a6fdd6f71909ed9edb27159b2a2c571a75446c28b6e3062d69fe6ca1e3cf82c699885ee26579549fb9eda7d20b275db807161b65bfcc56d352ab1d6da34b36d9194642a44dc42bd6ea8df99c735befb3edcaffe516874aeb4192a4be131352e4793ea7d758b57bd902b3c3a2f478b60f811fd8a43b41c030efb588424107b33723aace20a365d094fa39d48d6b0af15c4a87831cebef1e8c3d5948c23e56e4526618574857640f0a7379954f404d9a9c73b30cbbae393b6487e4ddb60716617e4708613b3d3c99808ec845825bd56b5f8dac2ac070d2bb3a77c60c1ceba06554df1f75f00239970c6d1a32e27e19f4e466d9cc007d4589deea26cd2d500b88179f505d3a8039a7ceb3cb826cf1bb4efaae1c55d8c64bfd72118b9f8619b1cbbfe COUNT = 44 -K = 847693f4f12fec0d4113d1963a064dd56957bdea467d367f -P = b1524c7cb8acea8e3a5c9acbd5a8b8e3e436fd471e04dbcc7fe9ee8df55ebb38c5d37f4e01fc317ceeb14eb102118b0ac54404118c326274d42a64d948f68d675ea26646bae4c04a630b6b340990bcdc2de351957a28b42afc0bedac0b515167c591b47962 -C = 9fa350067cff393e65a89828f3ad43b834fb7a9eb0170541742189780aa0e48afac0b2d644db7025ce9033cff86b5544c24c1bbe5c6b48ac49cd431efdffd65f61baf82a6439157aa4b494c88394b2208ec658f0fa0c35e9631f9eb1fc59182c928e7b8e3875d4003e51f509fc520de9 +K = f40d53ad2293270e51e0402e8da97fe98572834fbbe1a4b8 +P = 03e2053cb80b824118e3b4a7e8a6f462a9d7951bd5916697abd9693bd079f5074a40feebcaa7605d80205369c660d78aaafaaa8e0547b8c184388732c43572ed65ccf6c63ce7e4abfd2e77e1ce533c7ab7b2a537696bcdc100d491a3bd1c054b78b1c8a28ee5c16276c4f54df6ead0fc77786b2df17201eeb75a0a7c0c80eeb594766456527692974baed6e8e5f95c9fa141d2760f1e48b11a75dec110448e8b5968cfb3133abd837cdc630a5e5ff3c296701a4d68fa1eed1569edcd6ae0295d92aec89b4f804dd9812a8e2dfc5f83a123d8f86581b82a817286c95b746a769839e1c9ef50f4c80d2a2c8b8878705953756597cea3bc7d89f0b23b3c13976307c0725e927306c5ded0cecc4b1fbf69cf4ba4e056c40b3d3f168e6cfb5ca6c86ba66e15cfd5f1e837b5f6649931f96a758ba1aab378f30aabef8bcf6ad61469f0ccc16eb57c0642b75d0f1288dccc96bb8308b435443b3987684d7ab897c6eaa270dea695a11b9d22a98392e90da0e6a72d86f1e3f6b3d8cd22a3ee35e528abd236232e7d8891f724d8385025f443e8244be245e5b6c98d115e9277d4c434af29d8cd10dd6cfab6499ac29e76cfe996389c348b3cb4053c4436f96bc78cf9518375f58ff35f8d45dede604b0ac913358401f4115be5499ab1e167ceeef1ec091377099a0f5db7604be3c4bcfc92be41f6b003a6d23a93f474fc3fda3bdb7f0e88 +C = 5c9138b9c4c25ac49e4091691185ee26b64d806356d0bfa624db9ea1759f8f317c74c4294483f845444d640188dc863080e679a2aa39ad8ac4c0677b8d2d8e83373a0efc0632261e350308f9813b800a0037f050bb17dd9ca4c071d8932c40dc063f678f9dc0aa3013322138ee8810d8948a7892df768903e200a71a21eaf6edbaa3aebe7ed2683c96a11e468f4cc84f430681bc238f2048570763cffbec9702ca83fe7e27093cde30e177fb65f3933b0b73fc5e98dbc8e5c18f2b8aba1b26a21b10ef7575a0098f0e497807f12b911cbfde7c9482ad6f078605f028acc8d9a46257ee19f7c3fd1775732779fba891c9e31cc255faebc9ed32c5a459450c615b885d99a6e04837123cf9999150db04aef2b1e21cc6065ee5874fdd05fde8c5a35a469739480b1be185c50fb18ba7e7b0ee212b1deadbc15f9eb790b11dd36c483a67faf403785a4fd9a52285237501e440c0b1c3bf43207147ed8cc8185aa2087cbbd3d37252825d8f0481d22973c8ec0d61537a541a49a1f151065ecaeaa83e4c4ddfcda3a8bf34b1620e3ad6c80dd24f2a5069551a9e3ae19f7c7ed4c6b5a46f5120e643c487d2d1bb5dcfe902ef3fff6e5e4f80fc5ed111097cb661ac05501566998e6b6f90269d142011283e17c2886ac38b763abfc7072c24e605856ac0e7a7a61719534942f4827b7fbe6cfa4b0fde607d879944715dc65f3888915d5e2b7c2456c4ca852b COUNT = 45 -K = 5b69d34743d6221184ae98d70f4ffd80ad0f24b0112d8a76 -P = a4470b5c2874e17819863c1aa64b94dba2f358c3b73aaf6c949d1d4e5c8981576aa43e1af41940711cf252b8245e1c500ee2ccbd09e8e719787f5c85bd0fcd0aa699249ff6fd4f0816f8b14347bc556eaaabcae035712f7893fa6c5588eafd64fc49b4c586 -C = 6f812bc0a36aa93fe485728ea02921a7be09fbac13ea9cb3ca89796829bed647f12301ee056d7462e59f02c1b7658a8f346ae03343fa8a77718b53e25a7463a52e7f95d386d740ba41cc01acd0e32165b1293ed2028636b227e10d18dea6c52b4c8d58b67d8bfeefd735bac5158c99e5 +K = 645e68880d404ada56cdb6a4f9d590d6aaa93b8b5d6c49f1 +P = 71307f50b236be3fbc749b463ec49fe55fae7ff5ae8249ea839ddcdd42f4de2809f918a9f8dfce56ceeea2cdcd826b7079e2997e9ab829c56863f8c85f20fbf300d3bbc0f4b067f5457f035c4323e32a0f63516ddc2d735d90bd07b4740b6583a6076ee0013f582a9a30a75e4f77a7132194545563601c986d473bae47d4d544dc4d31552e3bf2fc7a5f1d7dc01e372b4af8dadb5564e8f610a06047c0f896001f65ae2f6bad145e8fe99b78c5f4484fa40a9378eb9125f14ffc0588538beb82c108a6bedaa285358aa15449e234e0e96b5c8762a5a0a1f38fd137b17fc519cf7485273aa26f29a9891b17a5994055cbf98dd81daa70e5496b9907754b3fa1f75cc2100e5163da590dff5425ea544cf04d4f8be43f3174c56c26aa248206c3e63a0a1a72008bfbc3ffd0a2e4680e2c7ecc6a292a998d31cb94066fb935df7dbac747b9b97782a3c3ba1e47d48099f8beacc26710e9809254f71a3397e156ab6f2096c0203a0b867abc93f48d9000d579c3b270ace9cb9f0701f2263f22b39320676c1036e256a322e41510388d167bfbb71671c773808749d98ef11024fdd81e74488a11123bb107b92de7f2f6de2dd1c90d0fc2a61b6d3e19036c8e8c723c6f827a7e90422e95cc3e5c5bbfa8a77efb00ff7b0506d85e81770bca2c9145041d13f5647263eadfedcf5ed9d44a5ad2f0e614405562fbfa6fcc52b3832091a657 +C = cba6196fdcdb0b1e671a5dd1a11560aa1050569d01c34fa1269c2f93f7a5bd8f7d0d0150745a51d4d3333230b41ee61efb075dbd32c5b78543df3faad3d29c28942a08d2c0b507845fc599d4b8beb85af788e0611c973421091ad61743e0c8c41ea517e7bd3da62041de9cd027c82bfc324eb83dfa7eb5a9b90ed8fd883a7b2aeac740a945ad1615091ed7a945795db7bbbb0ceee0ba43caa99528b643dc3c08e043d469d9369fd16670cdfdb1e1528c0e2f904365bedaa5f8ab9b9e8967e628d89d471c2f9911d40aef63f6b841a1b1812e20fbb1a1f80d6d8f8f02f85c10c67890d84dc53026c5a6bcdb7302ab53e8d95c46ce8d493726a858ca1f7c656bed70ea0b2ecbde824380d7a518413adf37b7a8c6d775f91d853419d7bed14d14b7422f16589a424255693ba1fd47d253d64861ca9ebf74d1a6e4307b0f607192de6b6c8cfec2c99a857a2207c8dd8784c3d6d846539a260dd4964b2ab7ac6b301a82fc299782c6265e42ae2e844645623783682b84d85c76e5bafa8717f5554e40d430ef2e2471669f3b8a231d63e42a68f032417ad33df3199797b86c3516d6f696beff7d3a5224c661b34f92e0e27cbe64fae4a91019040dd41ad8d4b10db69b1ac3de17341e66fd4255f344fb287a6fad745f0ccbf25ecb848c4bfb0e9bfa4fa06de960eaece3bf8abb36f5bab4772475928e6459cc560c042e35664b2e62d29d694452af3c6d64 COUNT = 46 -K = 65ed441b8bdbb2d7cf6089b420d296b4642d70cf06612b55 -P = 264f5cabeb9b904268d1f7984c096834d81bbdaddf955a1031ec7e3197ddf4bbdbf148d9791370af8c1da79b552716478f0243a0d8cfbc331a3badd207573d91d129a186a453031375fcddfda50018498b62a863e50e1b8c9dcb974f3b59c67aa61f2d23d0 -C = c03b62fc0d4f2df4d12aadd3eff05364eb76d53e7fe05e7c4316850577b4121a26113d5abf37ce57e22c8035a408a97b3949615a6481135fa48b566ba5ac3f14debcec154229916a3e981fe1a120e65e87c546f134f4335259fb595e180c5dbaa255838785f12b583c07f9a4976a1240 +K = a6e7898e8db7d349e28ad87921e94115d206a19026ddcd50 +P = 4c1351513373389a50d2d1136bca2d31c577edaaaddaf3a9ebc74e541a43106c2e51034b5d67480e0ff1eef93ca343c074988ae85f9c278cdba34ef90ef09900f8c1053c709b2705e485fc89c56be42d66b842a37f0d4ad23b8e8d45d072d2cc0fdc601ddb9fde0a0ef38e0bbea81f623136c0b241a113fe5c01725fe4ff1ea4c3cba22641541356666f4ed05ee52fb9a75db846eafd01faa078107479652cae30cb93aa5d7710c60f669c03b083dcc7a54ef67bed25efcb332f69e10dc2f40f110016082d38b38a4c16540fd82d0769ca9f3e2f3ed9f9fcdafa824b822c2b75ee7ad387f2fd6529bf09b60d21a15b53a46250da946959236df150185662ddcab537054dd1b0e63c95f3f967cb2bd7eed91420eefd4fb259f2194ab1f6c25bc29064d2a578e15a34a8a8aa7212d7505c15eececd92e320a6960de294ad6be096da637ae2adc3423e536cd6f10f45bf5cf85eeae15b3ae758221d733262add8119ad7a6180f27cc2f7bcffd710c9af6dc3df11023bbbe8ad4343adb12995a8a58a40a1eb3c3b29d59f9e9a98247c0b37d592b2a2055009c310d7b2c14ba441454aff70501a30293f609f7cad3d95984f83f286af0a29f289a92b2f2aa806336236799329ca432b7ddb77a3500a0d9e6ea09adb55b485c45e313ec9379aa54a75fad6a1a7b8ee864bd2bf03383f382eaccf3b3a9caa9b1465e56a6dd68a206c704 +C = ca0ee258474c058b49a32b5bcf628f9476ab415253e4b3f7cc9992ed44218b7cf015466812acfc90ce78165e19bb561e82bed0593c0dcef3d10f852d513d9ba9169be18d112df3342488bf58b046318474ddeda601a032e96d2e6f7f6679a02771ae4da2c645e53705a2e9faeed206c1ab5a3e3faccda0954856a522ce7d4618c5c4fe066d22b76cb48a20413f30fa9e036d85d025e9bd52cbac7d1e89730b9c634fac089caa494457cc7b67fb2a67265f59493e0047333f9321747389ea4004a60cb039b146899c2a3951443d6a98b6f6e545f1224f0bf6d35979074c8148fd5289b315031efcd883a840bca4a33b2a6192b2dd99443c2bb3ed0897b5122c878e14634dac02101c99558bd4fdf75d53c6e0d7f968a6fd93752c5fd6da61cbcf1d9618b3e0b037728d25bb09b082dcd0be664edbb8f496501b11b93522078ddb0e6ad2b60beca3624256724830bd02325d69725da5dd5d817fdc8e327b134f1f161fc2a1c91ce988d1017716d7065245c4bd90d2c56fbc7617e3170e9e2be592193382bbcdde8ede41ce01aae32e57461d16c43adafe46722fa18a24fff3b46caadc2af5c6eb06086e29c698152b1ec61261067d0429690365f71729072f26a7db92844b72f6a38b30ca446d51c545638ac391113485812036ad6889cbbbe41dcd2c5ec383c008e2111045fc4b752bd5521d986e2111ae63a407bdef0896f65165c403d5269c6fe7 COUNT = 47 -K = 0bce8453eb2e9076e13c9dd8f17ca0703975e2de186a945f -P = a62ded01ac1ad4380162417087d425ada1232da520611d60f4cfad6ca18ae7af28d2b8b99a3da26aad792904d59df2e04a05a3d0fab4f3884b9c9083b3e47d7bead7e6aacff78295c9d9ba498f183337ea99168dd936f8220e67ec0fab54d5186ca5c9c0b4 -C = 705b0fcc72b5d7e360651f0e4bb5d75dbacdeaae8b96380d90e98e712fd9bb9fcc672bd04b53160f10f8546a2e7b004b3f80d38f7346bfd08cc6b60135f34f15a1f1aec9e2fd3de816751f16d7cfa88e30b2ade2edb83011bf930cfa0117927d5b68af1360d33cd8bc87d6d0d26afeba +K = 33d4efdc5e5f8b51503117cea26fe25084ab53443b18403c +P = bbfa259c75af40243db49403456c1c732d4e45c3aa89a3a51fdbdb25dab62d29fca7436d7eac4c71a7bd4fb7c940775e2a5c666b258d621f023fe9531c5d9c5eb38a0fb54ccd0f4c53683089e2012149778567025abebef00c8e6089860b759e54aabb7668cfbfd6d2ffdcab9b94c9f603ad9a20dabd5bb2fa7b4ae6000b33447c8c3ef75a9ae4d514d89e02d1ce4816695a4cc6b778b12c7d12bbe0ab2f28704a06bd57b5acb8f7f84c913d3bb8588308dde877e628d96e95fcbfc52cd05d90fd82a60a55d099af08bd220518800be726c974fc10bbbc7c0204a0ff447d3d7fe601de4347f38c07a6149e30d0d8e6bf2b455de6d4c858d11ff16be8cd98c996ce4bf97f77b84c9079b61a4969e1524eb3d379818b42b35079f03502ba1225d8eb12e409b01478134ed6092ab73c84cba069177a78a9533721d5c466828c0e9eedebde99f7d21678071843b9023ce32fec684b29bd0e30d4c4c6d97449d5e6d7455e38a307f99dea46230116f965a00d6842d8917b2f263988a2db937eb4bfac20f18a372c67404a05dfab9bef8a46f59ae6d470e32e1220045872d8790d4fb566abe9a9aa2589f250d489620d9d5d03bbb7c58c635b33a67d052b1d834203907844e90c6756bab120687430b01fe6b36055288d304ebf0ceb41ac4dd439bf2b653f2b3e3a46839c6c1fa7e7c90bddbe89aa8b653599fc6dfc9593f5738e72f4 +C = 1b50258e0e02d7626719d691faa8ee627f0bfce57e9fbe427e1c8286821479da0d72d842a1a7b25c783271807005eec63f916dbe483dac9124f86126463ecffbef1fd21fde06918bf5fb27c40112b466a0983f66d3be0f8490b4ea2480c4dae2696a8fd145e28c86f7d7370bc8ca478fabcdb4a9fe569b9cb21f9e13e912555ee55d651a79afb8fb61c40af51f0fde22c50abb5c3ee87ca4b362616ffd4c5108686391f1e38c9ca82b931cfdb814ad8062c03c4f355677d8f32ad2faecc8348150b1555ab5b1fb99daec02cc9cd46dd10568d42d068f61b648649bb07b6c74e4371c786a7ae4d6d739dabd40d10dc576666806198cc1eb96d0dd4bfafaefe50659dbab83b88bcff006f4d82069a94fee111948dc4a4eb6f72eddc3f22a41571d8c5f2c30c4994b5562c3a00597ea539b7a2eb26f4abe3f1c1b70b69edede691a51f284cfc2cca138bf3c86572d53246d4042c426defa3021408f0702893f1d35294886440d9a852aca63bcda77c5a4e9634975a8299596a7416f24f82155f95b453b60bf6232168c0fa816cda1a5d6c34e20a86c4c0479a45003247d965fc875adb58cb0f32997bc21f2201395e53313a10086a532630b673c7768c048032091492e80bb8664d0aafd032c57c040b1e88900fc6886b95f0c5e3a65501809a6b1b61b8810e4b26cf39995d79e9aac3cdf54190f59a80e49a7bf7205e163074842d8157cabb0c7beae COUNT = 48 -K = 15f419d8fdd682daeb2a36709d5337febb8805a8ba89e67e -P = 4ab45014ca09564777d759c2fab9b358624b07ec3edd70a27637c91d1c946b0f5ba933d7976e6511969993c92d44c23b088a4218a887c52fb3013c2288c0063a6769a74691c5f458681f2b8f33f707a1ab1849d9913d3bd3c9f9939c5dd461c6c6a7f7f1e1 -C = daf7a87ca7ca5c0627d35bd05f0ccff483656894dd3381192d55afd7953dfdb7e09c0309b768bbd0e8d840629ea5b51e73667316a29fd57457cf3251432446ad1debb047a56cddb52f71834818220d7dfc5ff5f977ff89eddc5d837207d05b84ea93c0ae22b014b4f9a7b29ce2853c2c +K = 74646a684629a3c6a2d107af2b1fd914a977b97188e917a4 +P = 437892e742fd7bb7ffc5e7d9c144cfaebc756b935ab2e8f9cdf878a43687aa73fdba719c3de8facd66a7f161916b084f8c01c334e864203e0960813ce95583f0f77f7c04e32cc5f824c15f13d472b4b702f58634b048097fd3c3d1cfb2207774762760d1ee6a45cd67062210b70f4a684868386686ba6300d9e3e4b494bf05a631c8cfc7c7f173317d15bb68458a33524b79c47d0681f49d48811d118fa95c460350468d4f94b3681353f9163decbf5600edf912249c42d7a5c8721cf138f32b95c74cd41fac99bd80c15143704b534e5b8f6e693a6288e003e3f57dc1cc602201c1514a0f2581cd45bbfd04b9f74afe4c013803ec78c5d7b2de3547d4b7db823260fd6c8f39ce0aa29704344ddc9f2483fdef55f3bb9b621803c73429d6a18a5868c9b8d4fd0fdca59fc0cb64d3ee206d4dc515fb66f3bb9d6efd6db417d6316f1cceef7205c6334ef370960b7cc3603e70a0cf313c1d46d758b5e999ea3a621cf50c817b96ffc3a67bc4c36e2d2a379bdf1334a34304dbf2952f93457266782e39191f6856317a1f36bc0d827342388a462bba8ac871cfcde8548cd2ef6eb4492ffdcd0f86ce91233ba6003cef7315de1dc0c62385e59128904677d84d03f21a1bfd774be48ccf889d67f81590f96650664a4a7d4d2677e7b13fb710c31b0b55e56bd09b836c57bdf654b72f837ac07312db54c751a046757ed8270283bd34 +C = f78faa6174ed0f2c67e60687067addc86deb98eb34c688396f6ea7ef088e14db1c1353bed1b06aa17a57f13ed35abd8e729dae430f31ef22fe8f951aed280db01d1f0d7e4bf659c43b48240176f313b2092dfea10f8dea5ba9f12676b651efa204e226bfde125163ac88a085ac3eac47df2beb279df311217a621c88393f0917840defd03fe0454350ac05ae5ff9230b2928b602f2f7a3c1373b2fdb202da84e35339265937e563edd5b59969e1149bd48255c723780e0439a9d826c004fda60cab40047c2d7adaef7ccfdcb4a896e3354cb03050e85092038a5570b8f76374489abc63851ff346bd549032515b6fc0e05c86f598139efa9a63bff8fa53fd716a8ce4f35c8cc268383ccff44df40ad9b26488fb184cbf6674f844472e6d579925242024430b5a437ee7b104ac4bf74f7c90b00b00f23d771a370c94b8f374e2c60d74c45c4fa973e1a14a32826453cd51857ad5edf42b6a7390e56b6aee43c35f5c3ca5c17557d6c440f8b31853283a7dd59ef62a3948ce05ca148cbf2492cc9eb4d2cabd30f8a982d4f63243c7024c530a0368ec7e5c8df03acfc6333d8ca61c375df8f6621f0a2f5e9160ce8b6f3c4745272c06b77e6ab5fa533b8a816c480647ab2e31449722be8af046d9b17c367a50d7358f72485f0c647e29d28108c266663994557a807b8729425708ecbff86102ab61335ee52b5dab6230212d7dddf71c7428baa95a54c COUNT = 49 -K = fad043be91d847ec8153d871235abe3b9b5d053e43ec2b5a -P = 2e56eb6fe1cc532f2c639f0fff9775e2c80960fc5834b47c1ff82a719f8237be53a35a463bcbd7b7cb2cc9e534b8d122c6475db30aae5e711aff1097e76b7f0b936c0c48e6a3a67b907bd153f8e5b1f6a436646836f1ede9d95ec90732c644e6806bede3aa -C = aea635552b0dec4cc02d4c16c8f39cd9d0298c497e030a8e890963a3817137227e08c144f50dd13eb011f9439348b12d4cd4bee9030e0460eff6e65b0ff88d0081ae40e8599937318dfab3460c4dfe136e66857112f2feaf8370b4372f6321b19d9f4392d8eed92694a4023f92478b86 +K = bf737b2a9ed132c5c5f4012063564a4c53ee31d45f2bb59a +P = 16e26cf5e913f13e68d495758d45ace50c3a28b252a7fa30326526abe617c06c78f16a149dd09062fb41bd29a1e9c76e4f4bed55b735dfb9b3ce41c482ab9f33f2fda9cc4e694220ad7b90200973220bee7afb10fa12dd03b3f7341c50d9cf1fbbb824ae6062bfbeb06e02ac24f9ab927b4d2e8c4391027102c0c85b9fc92ab2f751c63b01089420439de09522d4702ab0c1073366419ff4d71bbc3d8ba68f460c25e9357eef8d740a671aada16fc9a770a25a411812ed08a421a3e3a1cf75547227abaa9dd4ed0c31c9848514d2f2a77ea1cc377a1dde92380d9a7b56f5a3ee74ddb4a68eec9e53127d725bc959680defc9646fd929af3b0b2232d16db082249ba0f264c333f86333d396c40ca13fe07747e698c762faa4169e41dd3bfa4a7c3e69f27071e765ad5e137412977d575ebef435cec850992f9c6eed0170d365763c1158d058517938fc77ce011cf1b1f72b087a4b3a78c3ef52fc682c38c87e3c384606af0713ffb89b44c4c2eb04d2f6956043a88eca0b0e3000bedf76212947089c05b55898d4c9848a9729fd563836391d1fe35ad9ba3cf3856d77417943920c4a3b6cd3c80d6e43f6e5d5c55d574519adb32e5c7428972e51359975e2614ac489b417bb681c4cfeaa6a1b638f60d47727c046c5ef50f4383335bb5b38117e6c64f6cfa8fa95ae1e38022297f65db62b184cc15d3bbb6ca5b8dde8253d2292 +C = 7b748107357cf513b3fe8906533f3addb8e485abd6c0804e487cdd3b339b20adfc9c0eb89763d753528c2da04fb0439a9e14f856cd7d3ad4aad9ee6750f3705018467b4411822f62bcd85d92aa5e08ddb3f4cb33bb855e1f01820db01ffeca29a734da437b7098de3c022cba095ebf25060a350e553ecdcea527b8a7946dc83e26fad140a7bb078c671f0e641264b6f46bee1879c6c4ce31755233e993000831b1e48d422f41358b4f6c6a48f6cdf2770faf90f8d246161334510beae41659b6f3174ca3632e40aec4a1a01773390434497fcc6e55c214fbc0c6f25c47304244f655688e0d4be76055a2066ce11ee34189bc5bcab61913e769fbadf5780ab9c2fb346936b0c3fa1f075de502919fbe3e0a67ebc722cad0d1884421a9a178552fcf2061bb8da6b8993ff53e9ee8b2e9da84c5c914a7689f236b0618b7a237ab82c7076135109ac5a1ca0cbf8feac72e68eef73b7b9709e3d5ad905be6da62bb4b4665918c9a1738c9eaca52610f75aa879406b095254a0ac22aac381a6a7d1e9ceb0f25e482be65ce86b0f1ef0d5bd90e9a01673dd0fabd0863722548f000bf195f8d08e44fc852651bace4a7c19c1cd02244d906ad52ed48be4b7c83a8baff10c367d507068db2e6c5f42f3ae1aaabeabf8c3e809e9ae032a30a91c2cf65d9c7e1ebfae84fe01aaaafb565bec009b904fc59c24207206128b80b060fa6880ce38bf5fcc8c115fa76 COUNT = 50 -K = 07db3ae86ed808153eb66656b6843a1c3e12cabfd2522e05 -P = 60fd460625b196787c12026272e6f5f3b4813ad9025833baa253666fc152d658d64a1be63995c2a004f9c8f43d70ed3896e8e3b006bbfbaddd57035b90124b0fc8e172d27189279daf9f3f57b73a28243205001ce3aaf09f70355661fadbef8eed1e935fee -C = 94f9c8147bc4c2bc6c4ae5023ec8257158936afa46b3b42065b5e5dd635f8da608b7bad9618e9870eec63046e64d95d6d53522180daffd70a5657d992c12750148fd7c606bc25322ddc8c426415835f5e9a90fef49ca9c5c6f924ce766145c80cc7596889e608aff5079f6d677783b14 +K = fd64465faed70ff07ed5d146fe3aef7e5123b2601767de5c +P = 0889bc4cb2855a1f3f75fd6caadd4de6e35b4d3b3136beec0143f643ba8233f2b10e21dc8de3d2a5b0efd35a7091347d12df9670fa4cdb1c39dbd55a2c87e6765ec2dff57096ff0d71354598dda9acf70694c3114968f3eef35d21c4d579e81da88d230cedf348c63d678e969dd597e9a32e80c8d0c892ca6fb1f37552343e8ecb934fbe661597dca92dc445e8fee2492e69136e5a49aa42e86bc5b45cdaca0aeecaad9bb1f183c62355bb75d8234326e2ed773b18a8755ee2825bf41102a90ef83c746a4a1a2785ee3391e1d219a42b021cb024fe28112a1fc22e2c3fe5d07818e0634d30ebc16573f654827b9d4d312d026729d4d2a8c3f0993c9651b4e887a00ef5fa432da2c50e712469ee8edd0016d5d309299234c726edd829f23ba4b254af9ee171e1ebaff5faec0386ffd0b732b5396790d4099bf3f05036965433ddd9489ff3181ff38cb0f1a1e4ae65963b25afa617c53eb522be83fcc84acee98f6e2f1ce7c893181f4aefe6b7f781d2f4a4d23341e4af342ab9ec4b6a9f1872214157e95fd5120d5d4ed83099e89bc3515ab23f229814f6f69000434e49d41e9ee97470abed103d0ffe3cb8c17a42ab4ada9b756952d81af39e9c87dbbd7fe63b5fa749e65147172bb20613fe450c5749a073443fc59d16fd07d6f10dfca54d940c3646f4a398978a65efa471f2d5cd9a6f9ff3579144a76412aad982425ff7fb +C = 5c954009845c2248299cfcbe80d44baaf26612483cee5ecc9cc7f03eb5ca9449f2f8f57d35f819198b2461f175cbedb6f743400e163a5d451705015446baf29311a89dc0f53d14c3efe106834ef1659dff103d19c8d7642a5db8e2bd5ada4366c2a668c3d2e8c2f4aeddc936027530b169fceb9d56b102a2fd4ad95d8fa0c7608e3c73d6f37670e4ad5847db9171c9d6e335e84dba55f4c0d549677ba5884115154f393f9f147c65a96134ab9f1b83980b8db1c5ec386717526f26c50fd24b8c73d325f0417154d167be9341f8fa030571c6447196b2736fdf836abed9219ba7f48b928898e18f7e23676869fe417241fa0a22661fc85d96c0bab8e2fe601bd413f227e7e02ba1af2af863769cbca2d6582e61e8971d579664387fe7650e126f56dd2a93f249f79cd8f583b65f9f7ae5f66e7f21c8e418adf54ff755c587f54fef9824c3ca7f6965759d81c15d124d5e32703cb4911f906d28f8c7008adf2f098af952973b042630646a380f4614b748b6cca56fdd0fdcf0626da8f2b594a434f843f0b331255ffc1ed5ef090274dc03b12fdc130e3fb1e75cf3ba30f1ddcc4f1b66aa43e2296f50dc8179f1eefc419c3873dfd2e1d439256ed6b34098512f58140c361c69f8114742ec1c90e931fe0e2fcc0f913a8a58e1cf104ace6ddf60dcdc0d2b9dc79eb3ddde98c0c8071019c2ec9cb05b101610501a99151d70b611320aa25243b5f6403f COUNT = 51 -K = 063d2a49d9000ae81cd8a7b87dad3780b261d3d6ed60d80e -P = 997a7889249ce1e1ee7eeee980b1975275a8d4ee6ef7779107a5b5d961759ecfa88a9bdbf2eb1dad593d963b26ed6f3d18235cde3ddecee281cea46c066b5e80f0b74bc158514d770975864b75fde78b70f632b0f37c1e473f21bb070948f37bec7a74ff40 -C = 872b80623419b95fe6d831f63ff1a3c224cc483478085ccd33000d7c59e9efce1f1f0aa6dbca39d19ff9e7e62c16aaba6fc16f906ca866f20cb5af15eb4650239b54ac2b5a0cfbdcd24bb80c7790cfa8f597b2dd7d32e412f4fdf92cbe29fc44a42c8a7c6ceb8e6033a5703980a158cf +K = 4ce3413a7e1f2c8249806ef325d469158902f25cf6dd1e28 +P = e5e4c01be80c209ff644f6026bb749c7ad5d9b3ec424420670735534c749dc5b095d74e7abe8985d6ff90d6efad92c16f57b72bb8a4f66268eab97591c49e9fb78e8abeb0d48ec7e905c659dc7551cc1994d87cb3b38fd0d232c71113a4e6965afe0edcbc300d47fe7f699af27cb0e927ff379d6b4f0ab4be8b12aeccf85b3f2d44cfb146d2add94665c627363572367a8aeeec285497cf437f53ab9b05291cc90fed642ba15c08ca70e7d8173166296d79f84b4b39f45a44a4cbbd9315d262b1585f767ef28427d70221280137b3cf49ae947731a808538c080500fb9e1658a294cb931a0a400d08b5fdb6b184bc819db7bd9364650196f5a9772e72fed637d4c2fc735eada492c8bd2bf31b10a3bb826367c8b9713f6a11b6ed047548dee39e001774db697f2a9c7a84d705e83ee14512a74c6cdd4392ea6378ed3e414d4f7f0261976f4a481867b77d81f4c3e1f1eb5ca094664a07145c9d30d30857e41d587482e76320fc542b7a99ff4620b9a928b99556489380e938215a3aa4ab87c80dfde12b01a5ec7abdfb6beb9e98e5fa5efebd36627c4cdc99adb8eae58ef01062e291f051cc8b6b4043d98609910879e68f89f7b7d74153470d0c53f7e4c58583c68d9cc129986d04d1f062c3c87f4251c3cfc9438446a0775cbb15cd3db73d311f90da19a95b9767064ae1b67d63cb35e74b33ebc121c7b01cf0275ef0cafdd +C = 45cfb1a2d15bb41526088f8f1b07de582ccbeb2ff1c57eb37278f6684662af6ddfc085007973c1c2bec125d41eb0d1a69abe7fb086c42883a0738e9c5ab5b579fa4028de9c6487c77b93ffbb53889e3b2ce90dc9df18e7c3b8c3503d667c5833dbdb73b1f07250304f5803c52ddc7856cdc7025fcbd17630251d6cc786aedf94c88071a1c5be2501dc01dd9e0ed2a2cebe15e9e1f6286cb652d692a6ceeadd1ee09393b18a2c296d45bfda4d5ed9fb1707d1199465a04887bdf8f9bbe8a4c7bf8bcc7aed426eed0fb523a5bb4e804b71b3646ede2ce4c4d005462b70d378e22277ec7d25b8ff052b042ba515a4f1e728135f46f092dfb69fa502dfbaec471a3a40f704530a40339ba41dead99be9d0feda7aaa55228535c29dd15426f5d6fa1063461d79fdc8bdbead4bfe0af17cbe974086b585d1360aad16a0e1cb62882f87f2aedb332f905b0254e0c3a422e450001d243bb6ccf3087c2fe50520384ac01f87ac58d525da65ab4d00a8c5371f5c10a8f0927cfd05afdf5146ac83a1c9b1fd9a7149bc0ff4fde5754e23a7fc6420f834377e451391c609380bacbec9cace73a771b0220530d1b5ad4f26e28f694a6e1622aa23b9ae07aac3b00f926c47321d933bc840cdb6f7f7e37ad4d2711aed324c858224fcef54fa649cebea027c216d67a014bb85e99fa2615008c0c9fb162cef2560c9fdc52944556d6511e0eaa363283bddc8e4432772 COUNT = 52 -K = 122f733872a1fdf146710b2eb185d22323529f1c586734af -P = 38195308a310c293f18d210be9b91822428275f2d78fd1dbbfd2fe91a5194b5795cbd5506cff20849ff62b0d74a743c2544efe4927759b5f478f2c27a0142b7555d2e4362dd50ca4dadff0fefc4e84df3a44cd694435b0c122d1e74efd91497a1bcf7fbb25 -C = 6a9acc24ed24c4c178e3e7cead1c8eaff5de812abd1672751b4ebb9f95fae1288f8607e578448398e1331c1297254097cb03a9c226027a4e8b4ef9a9cf1aac9f0cca40b6dad7ea5fc103ab1b133cbfd7bfc604dc4d946e15448311a494c31e4b25a8ab3d1f9c7483535f497311d26c9c +K = 1a2310a12fcff694c75f5dbb364a218adb6b172986012186 +P = 55ce8ac804bee80a2dcf506435863685a99e399dc34893725fb732f1a830b77a0b76857fc7dc5e1015359d2c9fa1958d61d3cfc6bcc88d5bd7d639a90524720aa2213c58c113580e10478e31dfd8ca365951a66580dcf042b199c8e8849437ac99e1987844377b6f056edd70c910386986cbd30e309f652b114a53fd7bfcf73453d226f17d00f3366a64d3d4034e3dd2b5acfd03f35e7e2f0f03e67420695e6daa312a23085a3bbc60251a82fb6b2d5b6ce50b000771056e02f8f7bbc57d50fb1e60cc508978135f5a8f29abf14e8ffc80b0e3153c9077018f4cfedaaad0c1363efb4e3533312ed5448e9509e02a0aefc76956fa95d22cd436e616e95ef6940b2ad3ccbf67c80ae0ea50f6446f961f591768c13c6fa8ccf562b3915bfb5f8fc782aeadaf996f1792b1878d784bc9a7f50a2fe01e9dd7188645814aa542fd8421ff7d9bc71a91f99e827d68f7c1e90e50e3a5e72478b57035a6c29438db950da1f092dde97f6fdd019185f655486f92e6e50ccb2c6a2cae60d5bdc6ca51b9e1bd42294bc4a44f973371281483c7ac5cf62f543ee8cd872eabf1b9e2d2ff8ea8b0f91613c27d99ab2ff9e160783a3fbc2acfa22af8c483c39d053ba6b826b18fa1dc3b943b4b9b3ae119a4bf50bffef3f8313e156fb0b9f6508086a295eea9075f1b7cfca56576500c8cffcc2b648c42ea05f7d37c2ac049cebd22ca48f7fce7f8 +C = de6875a38ad77b61341c153fc93b308b8f8e3f59e4a70dba11669c907e4f7db286b8b8331a79e9548a3c46c3b21b6c14030e523da504431de5d4ec5885d7c0469302866945ae6ee75a76ac11e11c38be4a8b498a4195c6962e495bb6f9ec1b7fd2ca374a8fa9aaa8dbe970ab710e3ae44eb9245cbb7e8d71c2d64ccca1c50789e3aaa747c0351a0eb55c16d2bd1a99548efeb5ccaaec8a0a14c7b8bca50d845ce5f5c3d552500fcad61d30ff51e8fd0b1c2e7aace51112a3892614c1562cfb1ef5f6481ef09c72b665b827460942e80b69c2705b02588fc7e79e2af0cdf7d451525a55797a8d576574c7b377a50829aea13dd948cd8336412f17a67a20da518f691ddd86ece0930da46fdf268a4debb2c0e2bf8a013b808ad36e5398c71cac43223e1c5a22a7bc3c26d1f03de8609fc7b47ee8ecffa0af179986831f5723f69a861583f998c9eff907b356755592cc16aebbb16cf20c5ff7d267f28b3daf834a532d406a0a9ca15b0eeed3ca34b6001a197431ddb874069fbcac84278ebec0c19cbe9406b7b46ccbb73237347e1baad1c6851ff990dff393a994d946cdd0cbc78f2063440bedfc5132640c86c94ded351a83fec06eb940128e0151f8eebb1b5e0de35eff75deb2ecd7be74d86cf452f35d9c48615c7e961bc335b8c60d1580ca33bf59ad6ce632b8a792ba978ee3f9d14ba615d410e009d61d59ae40630ab1e0e2e4b9982be790a9 COUNT = 53 -K = 664df4004b6f991e9f743f02fb5d87ff3b760bc3650f6e76 -P = 4b412faaf1d8ae19d3ba5206ef818ab806f731f1aa0fe285cbc494a14d9b001cb552bd4e62f2f5bb0432fdfd77dbb1194ea7f57f84542a375fe3629eb94d4de94dde413ae4e786eb21414c20b745f46d8d3b03069490df61955e8ef9ef01447e1cccff1181 -C = e0fcb057367976ff8f929b1eab4d4f31c49f597ee8c49c431d712ec9733c8b7435764d3827d10b4f5b1d221b4e9a8ce0a10eafd20aec85c69e6bb1a451832d89c12c2cec30a3a52077359a654ebe2f343368c01c6110adc10c4c966335121d21d196582d8dbb167ea3a00750e3d99bef +K = 98de42cb364956420a8490bc5d71c088a26f77036d79ca4d +P = ae43f2d9494e7fe248f6502ed872978a3ddce5685e2652d3efac00abba686bda3b9a8476fd4ef47e7e3bb791151621d5161b4e46fcf19ee1a8460b7d5458be5ccf1a1a7e8b44e87a2279dd0b38a29ca4ef3ed247666326a385a4771b24f8fc5b9b484dc41f42c372bb000edb611c550d30fa5f881f5e13898240a12ce547aa52606b712fa48157f40c23b091a1a3d5cf19f2b23d51300d04e446473dd61c2828aa376fdec6bce9fb96b8a004f09d08c73261c32eb2dba7ea381efa03bb8604daf3142a9c3d303c76bcb264d915c5a3b6292af6eef463e18236d139dc77f4196814ff82ef5f9b3caf97bbd8930111c641d42142da9b142dd462970cb5bc275c8bee157802cc00f58e3758e8fba3017038ce5d4ea2ee0729dd01e65f6623c100a9eb79ae4d742ff41cc2e9238b9e51d225361437a36ffef1ec85c695bc98b913c17d3e67c41c6dfae63901c898300de40ddf32c1dd00d0cad011312827961f130ecbf0c21212dd133e293ff4090cf66ac4bac0829dd8081b7bb6d31502d5a944346885681c0d3509474b178f3246f18841d77e35b71ad0faadd86b14559e90868218557c2724edc7e85f9db72a15bbb4037269fd9c4377f8acd78dc7d5830870469e2a19cc150a5c152e867fe150f046ee090716d035489859a517d5b49e2093c147c3f982057741a3382287e2ae019ebd13ba0e26ace3d24d4fe3f2cfa5214ccb +C = fc26f160c4abdb997e92dd5ee5b9d1050a87a9f8b9516f07cbd9ea9222f3454ffaf0d9836a70f740313a87d5563e857f2a2ac42770c135439a4d5ad32bd0c39ca2ff5ff38aff4915c4894b3a91369f63c84bd3d3e827c45c1dac5dd887fd3f9dec38231161d20472770233df8c1959b636ada060192ec4e899d3819d08eea9525ff895ebcba39c05689cd7a4c304e340b629c0dcc41230203048d365dbb00e11390f69c3bf9a8593886e1cdcfc13060b166ac5c4b65577971161656fddf5d18d929d0f9a0bebbd02d9087a05d90ad142029d7a7e5098497b02fa7d62981ecc4cb243983ba4f725e3864ee69f696893bd558064ea82d6e93456133111844b149536e93d4502acc5d051f1024e7b1450fdba66ace74b55355fe2cd4445b7a8f69787345a08ebe1d9ff6aefa71277c12d85dfd20f89df3bf0de2e6a67df858cb7176e1e762db087742aaeafaa77fd124f6aeb914383448101ca915a913ffce67006864457e3f32798b486f5c4a5ca52f36a966882f202e4fd35bd190674e0f7d69ed39d744078298f2b9d7b475f43f4b7b0155c08ee51bcea5a98337412197b9bf656e94c1f01fdd97ddcc318201eb363d3ef3bb9b06cb6a20381d7e39cee43eb2963d6f1dd49e001c43ca281dbed7500f5c82370cc228d209f7cd87795f5c129ae22e524940134c02ba1f0f9420f92a1fab243f140a0514673d4421519c05cfca7d42e09a5b7dcf5ab COUNT = 54 -K = 40cebf30a23ca3756eb28fd9284de030b7c239d31f1c9942 -P = c44e2ba86cb1c0f7c0424c314df52cffdc528bd8294d70b55aea5ea3a8b3250d2cbb5611fc485850501191e238bb10ef03aa274e4403fc1344632da844abd90964eb61f9f2fcd45fea48c1dca95a86acc9e33d5606de743fc6ffb9cf527ecf606fddadefc5 -C = f6163a89796c4cc0394d82cf2d31e87e108a23373dc2efdbff57f276722d0561fbfa8e2c040a64af98982574cd76e390028ef0c26b4a6ca3be65b5f86bd80cd0634b089e9db0ce7b67d0cbf534580fb8f67ee72cd4b0f335aac25e91894cbfe3d4aa03279dc224c6373cad22ceb1d346 +K = cf1d06ec001beeacf4dc85c5bc19a0acb0e94337239b0207 +P = e7ba35572c8de10b04de687893f484049ad87ec7660c226947b9a2a5a8e2ce5650266a8cd4197e5f88181bfe1197b09ef90db6a4655992913e26209ba09067ce799d222fe69ef2593b0e390d7c23600cbcb754b96a5f96248b0f63a8640566c49979e0234d1d8afdd1c078454659b91841c18a42573f8653f4d7b4245abbcc898bccf2b8df41d32ff4f67c370fce1bd6604c6ea85dd1e81cf1367314d7b92284cc1b358987f53bdead7e73deb854ce5d237a088009ed9411e1369d84d95996e78d8346f8ce908f2cb9bedc798e75be2b8b632d2db4b1ea6c9eb0f4ae4c175b392cf8a58b53ff9ccba7709079227a53a9115879dc0938d2bad7b4727449d893557be137297e00b5bfa37165a4823473458f7c95717b6e0dd19e06d29e60be5877fb883e83932e038f1fc4642e9a77f816165aad2fa4f47c1aad00dbdae8954b2e460a2af17f1cdb81a41ba3f5367764adafba3b31c454ad400d7cec0ec7ddc70ec3af965592cfabafdf6642d14feda2d70b8212862a05e17c1ed6a6bc8cb06da2b49c977f62c8839ba6e7bbf58336c2f56eeadb12d31116d1b465e27518813273b0eb312575b83bae69767ce2c75f9fbfc45e33b5458a60a9ac8daca103f7f28ab9ae43b018be41d85d9aaf6065b7bdfa2b3c6e08d9fce64ae1e8afe7bfd7e459d7cd92db35c1a47c8f1b7ea868ced3e8f96a0fef9d467502e649caba668e2bb1 +C = 3f85e7abd1c41eb129ad9801a6c7a47203b3daeeb2a59268d2f9001636a826877e5b2b652ed9f6f153f70026b8481ad542736ccb3dee42695fc2da36b953ea63c265af56c2f5c3d43b331d2cf261edfdd4ea119f258bfdf42c157e9b952f5cd83d667f8d74baa3014b4de1b3a7056d8ab75fd5e04ebd50e6321e079dc63ef38d2d99499fa2a9efbd0b91c2a5e1ceba0edcd3e5eab9f41b71e399ae8ffa492e66b06f3bb18172e73062d6b95e7e4dcda2ddf5c9b5ec2bcf602ed148736a4c5f379d27c8baf82ec5f13c565913ce5767604d9fdd48cc726c766b5e536d8e1956c9b6374345a869a64c08cc9a9abf68119ab6261e3c97b9f7ee9f7fd242a0fb362b2343a642dae4413c23c4f4a005ddab64a6358286122f831275f3038f8eb170e6ef44f04f4a259f96b4bf832c199a6b847d45fbc409098aadf1f0a8572e9b5b69d92c5259999b9770797b3e21089f6ba5a0b143799a6f426b01ec93618c62019a6ce106a43978f5a7ba628ea0c38f8ade3b27cc9fcc5f50f4da56c2a1851a6b741217b6e6b729b5651608bae896be4e3d3069ee34a58d555cc1f63041eb20ce86c39a37cbbb8cabb315dac9256b93d1fd919e794531181cab4a5dc6bea6e774d793d20124d60949c0a4d0508734b789c0cccd81fd2bee7fd0cf8b1b320b70dd74b07eb1135d49a2dc9c109cc4a0efc6a16e7177bdf98f263eb4ff395e9c87cb0cdd3a94fec6bf1872 COUNT = 55 -K = 19704d8979680f2eea06060f8687fd66406213a72889bda2 -P = 24b8646c1f68938c428af1f0c4e3dcdb96d43a250f38798b8709a7d6ea19048280459d5c966fc26bf390bd42ee25e90c004c362d671806ec087e2dc13ae40c05f78cc1daf7210548a3366efe1c946a3327671e6961694e0c28eb5436b3e6fa3796c46b4553 -C = ec2c0e4a92c4eb624e5c8cf2cd8dcc2f1da59eb20dd8e6d54035287ef2fc304cdcb3f365073cedbdf49e5f72c8959488d0ae98e7082f0255084b817239fea9e84faef164a375f74977c87991fcb1bb7b75bb95d8cbdcfb0a4f0b315ff165cd669372154343796d66c2c63060f03ebcf3 +K = a8acb9c10d448aa5bbe4829bbdf3653767a75cbec9bca6b2 +P = e7c6d2b676af9030ee7aeda5773c057f418bae550a4e6bec0b38750a0bd2336388eb1e664ea3633cc8271ae56d2ef5ec6594675291118eb83c0083412f161e438404b5c769c5b4feccbfc8ed2f1795f6e6dc7e6b318a5af138c41342b9c7066b825e5629ef0b9cfa967980c63214a3cc6ec134a6dcdaf2cee97361f611cf5b56d1ee7c660ace1ad812c96e59f0e5c28c69c170adafd83959b14ad6b1410e26feb8a783c98a6e5a3a0b0dadb6083787bf946640b6b0d0ed5593f5c6214bdc035e2eaddc47eaa2b43c1188809b8a5f7365ae01ba9340727bde002cd04cd838f1fa55d501f85166f3e3f5a190f21d95c9985a5f7a52d12fdffc2721327ae0ad7eeecbf3d242da3f45fbf1fdd352fe156f7dbb62950543e28aabf240548e999add8b4e21954d823ea9e839ddd4e927f0215fdf69e72c7416beb24ae874a7132432da89029a884206478c59c5af024335e2018722d76f5d8fdc7eaf556f1264fc0e93a91e1fcc4ca49294ea1f19ba0e51472445958529ce42457fe99ca74a724bd030e31d126a6de6af51c7ca77f65f318cee23f6fc6282ce51779c7c6c34a1b329516ec597168eec3c8967ef90128b432c4f5bfa0052f8a6cf62d546cf0c4b74f5206e6f268de9ca7734aa2de17667c927c415d6abc9efcf73954d51cbac91634c03e9930e5a4ff282773e132c17b3fba259f227ea6129ff11773cae3cee80f76394 +C = 00907cae28aba666d34163bbe33ad484e77237f16dcee972ea92bc93689b42c400d0558b4dd2d2779ed8651f54332ecc7e84fd05c2403e1f48587c3d8d3cd4b018850d1d5d533eb35eb2138743b693ed812fe187567162e33e9f9c4ada1ee5f4b55997f977109f0d75c57b2bf1de62637f62830072ee3ccec5246511cee12c7878c5b41eb2577e8204b0657a8f38b506d824bdb589f22cc60ba33ab5db19677d4b70ce1287b4998d19038b5f26877030e1cccf99d62bc082989480876ee4a992de9eaee1a8d6a2205f2b995201dd068000c204c41f56fd59adfcee8a86210d5c913e9fbaef786bbcb13a9a4bcda02f2770319fcb575d65b55b3c508b71487ccda8b68cbcd3f5235941a89c131ffd3eb3ad8115d49a1bfb3c2c5a8f587ffbd4dde044f843685c48e25f71acc2af4e62b58aed2d4e96326537d552740a5b972e6b58f32575497c39f674e0271dfa1d3c83972c814d2e05bea2de0349c8b2fe285c4648921667cf1f4dde9ffe05d67d4ca1182faf05442553078acfbbd5e824696f3585a6e939bfd02336f23102fbbf2a8ef5208cf6a87a9cc5bdc496aac21de671d3f0d53d3accdf50abbb9556548d87d8d839492708b88847e6e4e4e76a0c87a31a225dc73536148257d93a4b9531c2d55cf570b82e0ffc364c6a07e86208e126a1deeff4fbbaedb6176a9ac7ff307afcdc828b96999a4331eef85f403e3d55b0ba11f9e418f1a45a COUNT = 56 -K = c8c5408eee2352cfe370ccfebe178cf8de5085608c7fafdf -P = 289e57d0d0a53cb45f8524f181376012dea86cc2aa87c150854f6e9696114131e42cc4d316ccabfb0d24b63aed346dd414595e2ee34575ea0fc7dc2e92e870dff5622373ff2ee0ff0b0bbbb084c589733002cc9946a234c8552b207b28c0653734a5027cdc -C = aa92024b1c915f037118544d6e0b613218d1dc155d2fac983fe4492b17dacbd68e85e88d0620793f815f70ffefff0dd0ec0df03d3d6618b0560b488070276cbdd8dc8ab03add4b309425e27dc0133422c7d46048c366ef6a3e78e67f82163c0c822f5fa2b4fea73683468b52c3ae74eb +K = 964dafc97110a8f817fc6604d1c090fd630842beaf2fafc8 +P = cb5f220cc08ab60a332e0329814ebaede7cd49d9bc3d0a3aca98146eab4542291969d4227e6192ba104cd8c1bbb842e4b85b994edd367e377df030922e8c499edf46077b6ae4bd77875179db56e7d00469c8670c0178dc74eac7d3c1d65a053a86b2e9cd90123a2828dde6b541ed86347634aa1d9cf671d3203a394c17c13ffb3cd33740e791a300d57ff4bec8ec5812431eb5eff423c798f4337b797d8683ab18ead3df4efd85fdf125b562fad769103c3ab71f306c8bb75e9cd822718a7cd7939fbdc08a8d86193af9280b14bb1b80a998c35733af802625bad0bb41dc5ae9e05f453e056f1fbebfc8ddda802449159037978ada6581f94c34fdefaeb344b1c9f76d5432fbc83ad86aaac6eab1c2ce6eda0800f2af142ba8455b029e6c99db2bccf4bfd59ec9809b620437391cd7177696e5e31ff86cafcfe7da75c9d98dc395831c23ddec1d2ba1981fcc10910433bf5d6c9c5ea36dd08e4c880d151fe6b743768268b88ebc5f257fb641c1c3fa1817add07ee00984a63a5418044ccef12a0d8e4fac8ddc1deeee2881f96a672532b0deefda1f9367fc03d7db473bd1ae9f6e82433a6b98d1380147b5717658731406076439abdc1672ea95a2e5dc73db49c5d344793d4f21a9b6d0cc6389dfa7c885360dd27c3d48037991f3279d20e8e6849b56d509fc14863d9bc008b37ddf08911bd553b7088dc9aa8a50e732411348 +C = aac2fb0d7367ba9f5ae5c8812c30fec0f999df36c1a95f86c67a37951593197038dec2586701cb442e95e90343a0fb3f66187a37e7700babf8013682893ca03797f9d9ee78d388332f2054431610a79f370f367ee21e8bce2a6c198e05aac1c4931192dc8c9d4e03bd6c293ea8e560e54d1faeae7b087eef4ca65ce66b01e9525957b9b44f14be40fc8e51da97d09d5fc58b376d262a9e6ca9d47e398fab996a354ed093b6bbba4979299da2d095c12bcb3ecf311c8c210233377816cf91d062e4ead6d32c62ca4594634ab602caae19fa13262d2eae35b8e6cf58d24c24be54375b1f5b7893b12b5312f01312a4434ce49648836b7ddf88007e0bb6aa5bebe1be77fca19a90f7ae4b28487cef70600c18ef68a1b33faf7ba36ebc310b8c3ead604b5bf296be96cb153d68011301f8918da4f2e2c4f12d54a4390f13ffd3c148ba9b06c534be710579e0bd49933fa591ea35a94fb370c9b50d14392904cfdc8452f0bc06979218d8417c6a425b06eb5def482b1e7412e9f83ea6d7a627193f85d0f22c77fbb049bb6e5eca550945bd6ccc1618de3a91ad7ce19b83db90ae65087aa80642af3db4d49244abbc42f95cbb493525aa940e267420dbc1120832d66a17a1787b94e5fee392e62d4e0a768d7a094ab99f62b1f2a74211d8f0896fa40f4268717d4ceee7d45f8acb166a360796e8351d75b22d0bc25910a1972d7fcef1fe4fa0518eb873a1 COUNT = 57 -K = 534c5ee7f7a1e814ea3867ce6bf6da2f007c5789e5ce0ff9 -P = 97e0ddc80b020255b6199775e4c0102684e0aa83c5aa8ea98faa1d83423da4bf9ad8b62776b834fcc336009aa49fa6d1af513b489cb655b364f2bee5c80c627c60dfd773bb9a940541844943cb7cea1269ab8cbe1cad9fdf9a894b58407739f99312107375 -C = 428cbc8102e3accfcd7d837bf89f453bf0f61faade5394c0c2d2cbf38bc3a1708643a17519557554e0d7e1bd24ee589f2583bc3a53b54b717a0102ec02788126214e3d6514cd3f2be846c08523e28df9e86798859630f96b1a347363a39682080659ebcdf233f9f251a8ff9c0c70a42a +K = 6570b783efb130e9b417f7266c20661044e2a993a48c1801 +P = 72edb750dca26eb77a60f84d97b91ee42609a5aca3fce6fc818c17db9d6d9981a18dd7ca2837e6e42e9052281845a97dc1bcfc1f7209acba1feecf2dd0e7caf7f6e2ecf2329e60bc7aeabdb1fe75d67ac8c05193ec0b7c173e329a4bef85821424f157b6659a1b77da61335bd7b4776b94f582fd961c8af8724e9eb7f76c7c610c97ca5cb9a5b3398ed16e8d65314d28e6e539e52fdee98c0a96c81300a7d0da3fffe4be18df3723d3b650369e1f150542070718c9ca51428ec477e8b9ada3c443f985fc25786fd69a5d0c3c160d2400638027f40baa21144fa3bdb1c2ea6f3950ffad59271f035334a8edeb5a82bbf7b2fae738f2276cd203d09f3dac0d3568e9197ee88200fbc51499942a7d628bd0f5e8a983cb736c380c2fb1b63d32429d36d5e401cf43e228a8d317d1cd2d3c284da83991ae6d4539f10ce982bc1fd7ab4eb6a86053f2e3db8733e1e7f0385f9c18c51ad805c9cc32d4c0c16ce33de65d3bd88f300056663ed7247b22d750bb4a3fc466816c7709b1b74cb9738d90ff87741fc53982580e98b48f1054f296508bb5c276f3640c17673245b23c320964f9b57ea894fb32344e99944c6ad76d48abe15299cf3e55850a934dfe43d77d47c371189c0e57c50099b452567c7eeef83e0c038310f5a1830a35300e9a9cd2e26aa36e2c2a88ab5e3a9b0ec0e321ce61412eb179359426e7d84d2ce9186038581a +C = a37888ed34d640f282c588c81a3c69454c0f90dd150e2d12444ca9f7a8764c568db144e1f6a6b085ccc7f37e0ed7d811e15114dc736a81239a85559319f8130e967c1c4ac0cc477e93fd801a3e8e999401d5b24c1f019ca5bf5c8f9a070f4282c1958de87a8fa90616fcbfe4853d93978c10fccc8fa5ac42c63a59d6dc5e7fe31e7756cf8873157c7f005bc789f31b29b6a127baa7a5dde4be1c7cad06851b2240535e5c8f3691f46e2c0709eb4e4b59eca8e2b04ce257d9f39d4d734bf7b1d77e54bc6f39f15a39e0c0706682fbc2c8efd14ad7d57738cd57917e218cd00e0e5f0abb9a6f01feed91878f60c93f57269604927a7568bc5b3d1468ca051007aaa3cf0448bcf733e5d06a56843759a0d24962036dde8c02489eb27032a60780a9938e768230199f86fa3e585212d9b6aad9348d8ac27839edcfd1f1226398611ed71f592fa314edf665cbd0f1ea7c33f24a660f6b07a0035f1b7efa640a3a3de350b001ee1a769c212d888033efb4c5131390fb9e0cdca952eb6f259e4cd924d93961ad2e9284620ac6191e9d2877ed70d40da2d54c218729a9589c6926f7cf5f87010a9a2cbb32074761836a472c6acef15b9dd51d46716fd82112c7ef5db9bfd3ae0d54f0cc8611416fa90beaa290cbb2047a5964165b30c8b50a161961fea9917d0b8136d7d366c088d5358a7e6708dbf9347e8385c9e4e9cb6e01a68c9bfb84f8b8cf83489da8 COUNT = 58 -K = 1f3cf87f615131e4eea7fe2604d7a8dd1ba5cf9354b68962 -P = c065bda7a70164aaa7e5543cc192f7adf057d5c18e713713541ae1db2a59f58d818f8e2497c7b4731c97cd55d7168298bda6ff94423ffa1daea6e27730e50c85b6949a4e0ad673b563af1d0d51086060eef2a99c9f5dbf54f77f21e195c3d8c9fdd61e9f5f -C = ecfc4b2f28bb93ea9c1f44f3b10ee38ac1645afad8d6a81d22a34c4c8ce0f45bdfeaf0bfd3cb3b60b56550ffffae7cedba5bd3c24cddc9e661c7a16652ab6375a0bddbdfeb0f9f7ff1b1c8321a3df811fd4167040670413af0de310315d14ab6b8b7684451904d3188ef2247a53c56ba +K = a5be784d69c4b513fbfac19d86fd2c36dd803277cc2915e6 +P = e10293f1cbd866dca908d3baa6258ce8206ce704a257b2c16e9f47e6f947d2e0012f09b9cea37eaebb26af221d90f0785cb5c41646d6ca5f54224b9430d85b8c8c5ef4cfaa6e967300045e48b0c22e113b09227c9ff2a0f05ab8c9bcec7b5a54138a4196ed4da3a292441080418d37ffbff39b9fca0f79f665a57c431b6d0803985023ebdd2aa2a701acdc805d00dc01c429c5c80ce48ef2c1082f7bc222c84eefdd83a50e140873cc27003a38af036115353679ae041f0883451893c99bda854d6fd937f93535e6bfdcc0889fd4069a4558c2ca4b592f71f69c3377f2f5e6be883cfbe0ba763d54fa226e5d8dc0a6f5dd03b0841f42d060606120c32564c4e3ef81f9a0274b59cf9d40db65927d39fa38dfb383f9072e03c27d4add39a0c26e971b075c4193d8fa6fe93f6c8183aefc5b0df0b5ac7e92be6b95038eb978b2550b967898d66b70b4a15b97100dfb1ec0dba9152dd20915ff8c451f7c9464115c8e19ab45a2d4ec980e26731efe10970a54cab3555bfbab80731dd596b2bcea40de79874d120f2acf4a10598580b23971fa6193ee3d71d9cf7e5500377f25f9ac3ae5cbfa2b8a97efd19be3c816095da4e2a167825f6dfca0e44867cc96d12aaac6805e404b55bf6c3e881244ce67798a96e7ec731cf339f4fbb78f03d109d38b2a1e6c9a7f8edb14f292b8cb470b19f3cbfedf702203927b9054396fc730bac9 +C = 4b76f611e248397d5abfecb1da85090a3110e44663ed4622af426c5ba0d3587e6afb6547c357a28f5039d14b9c53dccf29f6540401890e01a923e2cfc4f6013cc2c3aaa4774816c352c17b8c79c8140abf8466bd9b900ed66503fdd0c12632e71260995e501a688dad3dfd13dba5d01d6a87bb0b29c0f84c6c5aa80479409d8c0422332d2299cd7b17bee675bb59e6e7a69be33f455073776087caf79e07d1633090c84ca401749e574a29b4826dd94c19736e9caf1d021d5b978784a0237e2f97ad0bcf750ffa3e449e637e5ca12261de084b140903d902266ed75577575f2a8334e9c2dba9dbf8154a52414ccd7e48883ccf285f4e007173bf40d24155b095bcf50193134f13fe97495a060a06a81d2a464418c59ae3ab9fb284cdf685f18d61c0805991f208da215c051bf09684dc2c1725ac95677c801ac81ede002e613eabbb5637147be446f24f1f685a9476fa205cce46a00e9d181f059ac939c53b727381d5ee504adc9804f6454928e0ba3b3c22c010a1c34bfc5822f778807e1d54f4de784bd7719bf6cc314e9db22f06d7d9cd3f2a0a0b5e9e3da01eff1883a1ae04903ae51b88dc90d51364da2d14c7b3e37f9d8e83aad2ef76db7dca9f2fb05775b0e6dd97c56d922d530d5279cdc82b72bc2ae2423242bc6eb9eeb7753fbb2b30518cd20a612ba4682e4d9e22f1310e8ed083cd15993fee459732f744b218863d6257ceb5f2d21e COUNT = 59 -K = 624d09f6497682a46aefb633163b6d5cc1d2e9f724068ec6 -P = 557c0c37ab11d3d7ba0f8dcede8ec5062a128dc691dcb3e318ccc1f0fbb48ef656ed71dd318e8e8563a677976d718d9428f4ae835b0f4cb2fabe5dcde458f068cc85d4f77395c7b2ad4a3d6555b82dabd08dac9e296265274e7b56637867812a05e5e0405d -C = e4fa9d7271e5f4e1580a8574cdd9c6c567f503a5952ec0d63d44adfc6a6794264f2beab23d7fb432a70e4c1034f180dfb734f24561c0973679d032850d3932cc37bb2735ee58b1fe38020f059df77c80052581cf3e47ffc16912543cac4f7262179d65783c09612722afa1f36b4c8460 +K = 604c92875bfe56dd49a9491ec23cf7c3eefe8c7d925dbdb1 +P = 780833d40469ad613fa002e5d9052b8b2b9e92520d8f6ccfb73e503411415f4354faf6281cfcb6f999852d6a6e289b72ab6f5cbc4408c971fdb7265d6281cdf643ec89fa79f05a52d9a99c329bb0fc5a1780d53c9fc3070ad0dace83d6e2002a318e46e9e43457b432e049ea273b76a6842f1a2d7b0abf0a7e365f20636d1ef2b323dcd19ae4178a0ea9db46e414ad32d38948b4a2fb3ab55ce1dc9a72b28267134dd59d9e99262f928e12ba44c15609bb737895affe9c627ff05baa5a1896ab0f2338cf09150803e5717a6e0d7a36f10778533ee45e5321097a8709ace8917d2799177129c5b19806c39d398972a20a49b904608ebeda1b180aef68f37a0f6a9e4ffeb35b33bf272b21fe3419a1043db85660adb13acbe328088650de9e5addc245ab15740547727fd4c1a59d38a94365813bd93412c1f352e50b69cc3e5f7ab390ce5149d996b6cef7f545f4b97ad9cea8064bd35c2b77bb84004cada23f6bc15d3ccad5db620a8a7b3c6306a7b857f5b64abedb6249404bd74435e090ee8cc52260bc46d1ae2a473a3713e6cd1f240fc9a4cee11040642271b058c2d0b8216802a76f1e8aedbf52cba155d2a6ed9e25602272d365aca992f8778e4e0b75fe8636574a462bf41ef37167ebe5cccb32b9d865e8c03176c8982dfbf935b57aec8de0805f456cc2bbe87e6c5d374bbe877173c3ca3b6d42c12f78f7cb5e053745 +C = b0861d97de2cd72e47fa41bda9d16bd1d8bbd84960f395aac6f2d6a9182bb619c691bc93a34e1837e271161b95c64120ef84cbccada15c62b3ade445a53da1a3b0d0b8c90e174b37555963bca4600fa832ab55c47b60be7af1149cce95666f85ac2f53b3fcf26b2689ce95e6bf1300f25f07f179898ff9ac50faaa673caf53c43e365724dbd3837258bc646d0509be6d7926ad4ec48c1274921b1fc72cd8b1ba892a58b95c0a667628c246702cc203c4dcb9dee90d5fcc28e6d51cd12b7933555eb8bd61fb57966bc1868b9347044d8a08389e0ad3bbb766672ce9c20b6890a13ed218aea8e78f590dd8118901e7a17ea0c0bb231863019a7cfbe5360b144c9719fbef5f34a8c1517b814dd1a9cfe45bfa8dae3bfa705ab860b5abc09422cbeeff5fba3382fb26647a2ddac8387965f97542cef4336bfdc60f5332bb793874391a0123e7a58904091948e5071c6c407b79926d24d76907a532b66c17b499634421880aba2c393ca28cabab84ad128be31951ba564850cf6f55e31848f746c269223bd7ac80c3d2e2d08048552967c79920f8f8bbdfd6c9eafcf9186ce7e79ba5b7561d624171d0caa8d24f4e052bf8628352c94cf778f8112d37e6d3b7082469b440e40f4b48e60b453eeb89184f277b29e3c3b5b43cac74bb30bf3193f49c4084b6f8cb1ff17e7865e33f3050b1ca4ee3ff26584e48402cfde440e1591566bf480f327e0b9a9be2 COUNT = 60 -K = b3ac6e972b2988e9879eb9e0cc52a7a531b3c2f30e488e00 -P = 8d45d5869edd9c48574c6ab9c5c55af13302c311459449e9cd37823680e70ede0692da32b0390d8dc04435348007fe0f8ec7e361f4144a47297e97147556089eaa82be3c62346e5022e74163ad6f559956f7e610b59c1f86dbe5f1b5188ec3ed41c6ef76dc -C = ec6f782f7ec697456a81cbbff464e328192e931ed0323ffb5f7b68a93b7b1995f51f9239c06528daae9f83db47bc3782d2753aafa248b0d07d2fd33b58170a827f37e899a685f5b2fb9bfec8552742b1a1d02e727b129750e17603f8892efc2d8162897ff600cca9b1057d3a118a8bcd +K = 4b833426c882943f90520e2fe53d752d23ec880eb78fc765 +P = 106d4c308b18d1d863d51b88bd18104d1b93f8ec2045fca6dcd815baca8d6a41310956d5b81c15febfb4b829f3c44532d474d5b54822c52ef1707020f7359363b0053dc350b7ef50fee6ccf3a82b2bbdbf0cd5417836a0299529657b7a919b6ca1b0cfb6e9fc68809870c7be82dfffdb8baff0644f46286fe0525801020a0161bd5c8ccb5ad7d0da41140df21843c31c1d8209041f953fc641835d3f7c205c7cfdf193a536a87ec9190de2a6c5e7ea2c46b2c220edfa2bfd7b35af5a85c2eaf0adc85a84fcbc9b6e7b3bb283c94b118be7cf47aab15743a6ba0767b92361bc1df866645db11a8203a4c98cfd0408274e77328a0f4af18459194831b0ebc12df665c7fe03e4ca583ce9062594d7cfc865c8ebaa2da4d37c2b8426335352d94bc607ed1a881516d037a48d955b3a3d2fbb3e4e499f39a5149f4937dbc7af9883f7c37580627ef24d53308f272b7704afdf00818819d1238702b76b3d5559374a9c005828e8564e330be8ed22e2232ffc956faac691d4ceff69f9688e985a9a8ca5aa15cda7be49af64822f3d844e3b971d88439bb3c15e5546bb06091ddedb8c3da4ad1f035634d3231ccdce84b886e8fb22198cb0f51438aa69c27bc8fe51f6597f3c79b0473077a7c758f8e05fc58b0605d1083cfde81257d834c19a083f06116b147d3b9f641ecd5fc24e0f92849a3c9dcdf49190529fac26806e6322f26eec +C = 93a1edfe1e4b881c8aead192df8006d8020de6d3e2e38947e1dc98920f317794c78e657f7bc8dc4de256bb8e37cd28d78bf687cc306a370d3f9e74bd0595611f1641b4bf19557badac8fbab8bb5ce07cb1879f2f18d0546ad175d46b0dc834597e92585c69d853c536b14d6aa6c2de3b9a0ea0a49ca459972331e83313d89e9231b0d70b1ca763a47e3cbb2870ca958b693b1c07e41d8cb670be2df88547c63d503fd4c4c99ecfdc5ed56076a3713cf960bd0ed7de4e55bf19c625ecef2726f9cbb3b4ef6d45e9d95bd2a153ae318b0409a0db79059b8ee39bdc97126f8f786904e435595e9309e4ae7b3f423cd10ad37791da9c4848711939cf9247f97462ec49225121d98d792397817abaa72477b81ee17238d5cdb75699cad4e626dfb13d6a8bb5b972ca9b06f1827d174990ac5c3be9518089264300a7571072ea2bee756a6269b8bf269f1dfe5f51e8cdd89fa9f693ee971a26e6cde81e5811fbc73f406b1b6bcc6c7bd4ca44626bb2a282d7f7e79c6f1d5745ef5bf1979581918b738dcbbb0cc20d588080f21e35a6a1b414f1c02bc4009dba28bd3d8d72ddb3bfdf687b83fdba77bf9bcaae2626e07d3c1d61b263aae3bccc4baf52af1af86b76f94091829d349c4851a7c8d48b0409f4c871aee68da67765a3fdcfeab14d508077ea332fb01ac8d89556ef29dcb3ca95e07d910889ef77046ac028fde40f54c02d3ffe3820025ab54368 COUNT = 61 -K = 4938fefa69f49b05c4cbde7883ec66197f5d3e491e833577 -P = c6268ec79263472b074201cdc91d7bebe871019fadad21c03196d811f8574ac151e5245b3ddb55518471f1d644ee8fa3c7641532c082ad9844c5ad49921d76afaf33784bb58160df743bdf9a4a9b8d8274efce0f8b2aac3df842800039f87069c937069d96 -C = 7e86470bb494e5e34de3f7998e0e78a6a3aaab38aab272c0e355b25df8e9a1871b0aa02cf66257bbc3f7379cf74df0f2691569d90dfd8f408fc6440e85530ec692f14aa6234bbe41d1b1aecf0c25d434bdebf40ed0e34a75b607d7558830ec953f6b3766d3b84241dbd12d4fedf58eff +K = 57179b694a676e91dfc862771623eea7faa8aa678dde88ba +P = c59936afeece659b68e4ac41ebd47b6c388bbbf7998ec981e3e10ad96deeb2263605b5a56669f93be726db7bffd774c518b4b9ce706b6d39ca31950d615ab51ebbc1ca0e5fc03d64e1af4d2217340f1d8e0cb7dd78121c969e10059d9d4907252b8310e67d7469dd882b74de42eb52b5aaca5346831a7617bb1d1b80ff7c0ae6bb11f9bdc8922ea351e0e25a64dc55a1eaaab209bd29df96870a5a8111d64ccac47bab11f13a98b531ccbdf25eb0445ec4fab3a38879c8b2fa5f68f44a7b3e28ae168d621325522de97198767ba805c7ffeec0a3aa67d9cfe9a865cf68023302b816e7e5cc205d6e52edbb1af196707324dde037b034fd138074a87f81db1653aa07ad6faf156e14019bcf6505f5d2650749125373bae0a3f265935ff868c6b119e6d78afdf267ef3fafccaed0745026d34bf78a1e4f1ccfd77cc144e07a98f3ebbd50fb2491873c002928dad143e52adb55380466e5694b3c25f68ba3a1443c61a9a038ef7fea2ef25fe9e0d1f68c550142eebb8b225ab2926d346e0f5b6a2e1437cf61ffd1c9515c993707fa976497d5a387f651dcb8ef6f1a7953efc94a2bd2b31260095c6ef7c4c267889bcae563aaf1c4cbade34ec0e79c7766b74723ae5798671796c33e060a3fecf7631e41e08348773a840bcca7b93f1af2809f0511c88f8a4471669abc32c3e82bb028b8912df2e5c26bcb7084d3c41bb6ebfc6e25 +C = f207a17f1043201a081ee556d7849acf616742c04f9ed99783666a7c60ded2dfe6d4b6203e8fe96072383e3b973ce12e626b3fbfc6784ce572259d6c1b5767ef81fbdaef31c3040e11aa324e8aa7f9759a4016557145a3eee132f8915b9d2b80105d4d9af412d1e8bf7e6a407d8b9d22c22a6d9a0bf96b1d37bc002fa32956e159ca1ec8a76464dffc52d4c55b8bfa3b62a4df49e2a90061c25659ce53055472501ae887fbbf26a7cef15b7ad34d7cfc7b8b52ea3612d3e71ed008fe41f9c3baff97305136467b9036f9c2f91d83b70473d3e21df393b09ab458a9b77bf7116f7bd7e86bcd4ffaa32273174d8e352fdc14477900b4d726266a740e00e4b00b94834945fbc2b0aee3a5d62720628ea3401749fc7640e8242135a3a7e9bfe60818ea1a9f6b3ff31d63bd948cdd9c0cd8c45ff1676c690303912f1b15fb89bc138acb25a2b029a6c537f6a61f9ac1e4e755d5927c622bcb8cdcf383f1bd03e95c0eaaad010a68a4c96a6122ad4ae1278fdfc5c9da42e8ae29213a37020d04e1709b3a5dbbb0b73be07c83887d286232b4cec4eaefb91b11b9681aff3f3372ca0c58372d5d374fcac5c3b27dd917ca30e521ed91ed49f40eef1ecb489d3fdb46333680144098e42f9a82512a9f814750a28cec18bc30f59b4f18cb0d04a7e08b62ddb27f2fcccffb64a48d2203afae8239e147f6846f43ae468e56fd044190f48df6151f1378d5dca069 COUNT = 62 -K = 0fa5f4dc83c0e108ebb72c6060c9d665bd103e3e4943d315 -P = 16caee2e317e12c4e9a431d55fdf165aa5a2ba07e04d21921fd7693907536ac403bde96f130de0f8e1fdaf7a6ee763d7a4ec6a0bf9fa9613d1912bcb64b1bf66874979784feaef18538f7bc3d4102d934ab787cf36aa94e768dad619b67922222d76915320 -C = 4f95e70ee39cf51406a9a2efa377c365274ca7d03e80350d62e6158a8e0a296d131f2a8fd8c80b915f50d9fcab7e0f70c3be757ea13ed1996b889e9f16cc463c4b557b33f51a504a7b27855bbb86b2325bc4ca788f9a612ba842989528c066752980da6cccb9f9b86dfb3f273d2f19b9 +K = a95841406d7d4b430542c2eb2eaac76132d5b27489775512 +P = 8d779ed672020f4adaebd57926ad6c4d87965c0ee4a3ca42f23adac8e51ed3af5d1063276aa44bea73aae650a93ffcc5f33be6215edaa64567a02cce10c17b4a8094f8910a6d63e2d5f0aedd9e7decae2b58d0302d59e925a5650c9ccfd1dcc8df614b564a596bb15248aae3470489c3b9bff71222d8b0afa2b7afeaa434e9a7716777c4697196825295a7637f8b3187cde4723e2f4a898dec08ba3e61befa8fe65a7c5dba447e477a74e4cef00afc8d8f15f9d5b7dd4ae56590d8e021ff5f6db564bbebfb62f049bd44975c3c79c4720ca4b4104bef134308ac9ea70ad44062631c5a0eafa991537cc9d5548cda188d2947f9a60f908c6a49b70ffcc2a60c9afad6cd38a6c64592fbaccefebfbb08c1239f6509f26e9993e2f3f1e46a460c71b528afe1964c80a4dfc547679c3fc5c2dbcda94e09e864bdeaeb1cd141a388f0869181dca8179660052a93f219eb8cd6275f80ed600e92f29b41e409e3700b9ea037665828c8c3c5411167e1845b5264702d9ed0d4236831d3bf556e3d639bf3874895a2d7547154ff8f8b28c54a45c8d2c339a0a45b86c68567d3f0cb3fb1027e6ded2edf1296854c3a76921bed0ffe9e1d77a05317ab1d721dcb3ac491de609c61263822bb0a9cbd8cfcc97f5bd4361d865bb6c4d1e25cdb7a4724a1f800d1f94b62ed2b3646522d32147b326da3c25136db2d1008dd2edb847cd247978927 +C = def5054d71de0429665932ba82388b48c78111eb062544fff9f6871ca527b1fa3772ee19b1aef49da76e2a28762af77e98342971e2bf5efacb74a6a49146345b4e83f03d3c0a5d9351116e45eb4a534fa4f375302a4c5fc372996eea2ae8c9b47a436295e7ed09177eea8702677c174f6dc555d3377805c88abc966a24aae84893826d436476d2c8ef19995203e698b24c22b5d051dc9c07377c5ac37a1daf959dcca2f5cca2df3fec6cd5a56789bd7bacd2cd4410c214e338aefa435dbf00271c557ef70ddfcc9a6b26cf1cce815c6a113bfea8b16f31ff52997001a5f7d1c443a5bd529a2193f4a12eae9672f173a3b445edfa59616e4ab97b5bab0ecb8777791406b16220969386feafd1c6a44021adde06e4d8c020316f5f3141d487cec75b968757a7cc47f9c7e2dfc48110b45422d605ee3179ad5a60295213c2ae413fbb16fd33ed7a7ca3c16d609bfc530f5e3f8df5e94efe394b5f13ee5f54aad8ffe323bf7027e855f4c4dee18268555c039aa098c1313bcfb79c4b2f1b714a3f5ff954b04b1481d1b26d1962afdcbb370631ceb864aaad76b714f74434b972f2df873726f0d766c54610e40eedfe54a97754bc4aa11807dc3fb8b9020bd7aac1169f52df13fb16d37337fda246e45efd891d4431258a49d9089aebaadf2712bfac938f5659395eec69392e855f93a68cef0c1ab4a00e7fbb5cdf906edb60dd3aaac4ec4b7fce6c15e6 COUNT = 63 -K = 51ba9e7eba1ba84c774a09aa1578a47e0a7e09bf07f9d63f -P = 7f1f891301b17f22c573698041d864942c72797ce41523e7ee2d3b9f6fdafa8c6d853a6bc1e69a5bbe1bf80b310a722d7b80ae7ce20b7285e1c215c23b63f56f4eaf461b208c6464be90fb28f66ecedcaf4109ee813356a8a5a8993887125c0834c82f8862 -C = 10549c4a6e360d9cb2fcd86086c5eeafc769897cbb1189de446f9c819213f9d5bc97720ff57eee702197a242c47d565efe7fb1a0abd8fe1d580717c8dae4b894f35d89edc2d28e65f5a9d4fd7da9d4697f5fd48178e5458ebf3ea5f88b757ff143ac2fad2b10337cf0c9ecc35706ab16 +K = 84883ff1a7c4100bb9c524afc733e3440174a985705783e0 +P = 163b437544d42d6ddb2a477d6c83492d724be43d9651f103e0eb832cf51e55eef2d335f0741787711fd7640513c78f578b2dafd023d9a6c503c61eeab27e1da92977f0fac0935e6a8311795365090aa125abffebc7590734a08abaf537f1d4673525e1a8fd928cf6a739fa59c1ecf6b0aa69fd93e43e3eb4161d367d427cf56b25bba2b42d0ab72bbcd54093450572b54b5e5b64a110308ff122625d5e95705dca777196117f4a849dcacebbb209ef412817bd595c277fcc91a113897ad304f3b6a9c5f8e92d5d32e7366db51829530348d773dd45bba6dda3b227de077c37069777ae8a3970b2bc199069b1f93285197c381dccaa2decd55d112512e076ab370558fb97ced6d0882300342609b5d8a9676f30ac9c1702834e0da5d2bf8919ffcaa37aa3e2f86feffd6832b0d07b06056244de0afcb9b8c4835418f252a2bf3bc3120873eb659211e9191c625be37b4c1312f29ee4186736133668ef3171ef8c3d246c39b4279c7285d0ce4d5ef130476e8fc00aa80b85503bda9b9020d6e2fa35d29a9fe0cd8600ea07a795e2445e8b1f640eca894bf12bc48ef5ff6f0913836ed220f38e71ad27a61f39570d17701b5902a4f61549b562f99290a0284b72ff09b32aacb54e3765e532cce2af5d59c3c5988288796bfd9a71fd623c72b3cfc8464c9c257bc9d33c48fcd009f55c9d191f76653178432ffe1ad34ce5cc9b1698 +C = d1a2f523e912babe4d24f87c5bbb592c57c9bf4d840ff2014e285a06c52e00f5e3f2951cd02ddf9619b9035df675937c42fbf97d792b8025184abe31739e618e0ae5c5f66c0ade38a7566a46275beff5a5eac6b083bef2dec5e2286380294a681ac42cfae8d31e8f2bb538f5d86127dcdf4a796db4f5cd0b1e39eb9777beac013225cc2e5511d621682ecf6aba44a55e0919b29fa4ad0d82ffa153b5c77d19b400d3bdc79ac22460f83d28ba514c9d039330c0506d5caad1d0f8a6c49323d4c33798b9c34ea737ee1b6c2a2f870338a253b5e052e079fe4bfdc55b47bd2f39696ce3862a4f935b28bdf9d73cb79bba60c122f2b28e61b1dacf6b41ddb016fcc415a1cc34ecf609e686a85b8ac1dec681641784306dc25f5723335950b0147c563801e72ab58e2b2be7c13dbc56ea420aac65fed7b2d510f6b05c78790837a5e84404aa02b6fb8b960f2c414b759288c627e38fd13c6a0fe5c279adf46f75acf52e11bdf881626f68347251c5cb3ba74d330e14127def5a990196d31434256223973eb64e8ef746d61479c6cf70629eb242b85d4dc503f3e21d048fd3cbc8751a3ba3eb42c7ebf23c8d61e177546f172c4f05cdc80ddba10c6b6c97edf13510928c012d89c7463876ee81a92325d27cc0d51c85ed26ed88145676fd6b48138932cdf8a2f397d5f013f3aa20600e03f45e6bd06867fa17e6504926c554b9adcb8bc970537dbd6728fa COUNT = 64 -K = bd8c4921bf89d3cbb4cfe51810e61b07784cb27869672b14 -P = ec03008445af89973b9e39b4184fc9b5b7a17a7d5b254bf50cc56742e0d574f26b1bbac050880b28f9b981c3ee0d8753835b093d64e1d689215a6ef8a5d9b56b92db0c28c7cb91c6a1ca583b0a7dd94b2698158bb56d10b6f7ed5d58ad5d7421f3ed0d0a59 -C = 4fae25e92f178e005317ee37137a40308d5f1e5c140bda6d885d09c5adfd45577bb6b3abb81f09bb15954fe1a7bb97fae6a268eb593a3478bea06d7ec0ac4502cf63aa6035b98267954c38782b803f0a3c1cb455d56e19a713a3ed0cc2a4513100b07884b3989647074e6e602dcd9b76 +K = ae787ea53e272f023fe0f30958f1d8e9c80c70fc38b1bb85 +P = 3ff10fca50167ba1edd9a64448bc3ff7d7c9318733bc8844e5e31f69eb212f5b3b857870d7e643ec2635523ccbe5e6a06b72c75ea996356fee968553f683fbb88d8d119648aa68c825d975519271dc40b2f6c5a246f27eb73687bb44ef3eb5ab5c24b0b7fcab0be340a0c15aa292c018a7b0a49aa9d9702e3d7a682951f93d70d99321ad98d639d5004f6c39ee1617e41308807a83d9dedac34b66972d30c582b64c43c5de724d1eff4c048464af917515cd231e763685312cec67a4fedf301b7726f416e52c421f2b1d2910889e7d3f81386bd80fe4c5b14e2d10e9a225ebf99cf89bdf3fee60a1defe2c0bf12703169622598750eae6a80a510d3bc4d71e03d10eb125966267101f02229d460b8f6edb48b05c8f98f3e8d6774caeca89ec6123441f5f593169ac33c332ff2212b82cc5faac76b1db385a3c6df48c503b61c85e48e7a3268b4916c92f7f8cdb5c2494b57596ce4f0c3c2d580cdfd02ff3001ae081e4d1dd61570bc413f1bf2a15bc4e324c3a7357d5440536689ace16e98c6bfe5085182046193a48c795a2a19194c84ad7ef8c8586df017add63aa1ae62f3d530aac6e98c7fa370a6c9bc57a10db8cb12c46484f8df4f48c2e4c808d99992bf652873f44f5dab14065e10928e03849e30af89e1e5584090c3a75c173157a1b226a89bc435e8f297870500f639da199d50a7bbdf743318b3996e90102b9a656 +C = cb268230d8110a4f1e96e25d515f4d38b1e3d35dfa8fc5ff4c245d42ef7d3e4625cb59b14314f99f108e2907d4b9932db2857b6f9a7e493bb38473de1cdf9df42471357a61b52bbdc73a5d5c88eaf948b6a547721620f8d2b5de24d59ca828508c9c8920b5559340d271b36421ed1231b5bb733efa4b6781938808791034785d851f9a9b7aefa8e38f984b20c40d4b37fc4e27b8388318632f956b8b3b55d4fa75e9c49abd5d043a7129338e91a6ac7a3353e1a42ea6d570c3b1e82d25c6cdd11379809def3aa79b44f3268fa1d57e8cec647b807f16396569127715b9b07bdf3f5db3edaee3bcbf848fe60c1782a0e2e35b1bbdd526803909ed3a8f1106b94e386a490f68e3943b67353b0dd15bd302d82cf5ea24b30cee0bd9c2a38f6ed114507a3b6bdd706f19aac8a0375638081d6992692326e76520b4033ff018ca365210c0aaf9a64089ce8f3b2d832496a02f222a86212a1429e53d54f02df4b9a8971ef47ca9953680c97734ccbc27340175977e21f414964551b66727cefc9ced4c176348a135f8ec30d13de5241328db0f74f7bb9c7648864084d1415cbe4855c6adc97a8f48e3958d1051c1551860b9797da5195edcf9874f2b2a48973aca8ba633daf811cce3dff061331c2bfd770c896b810e894803fb7ff7231ae13947973b44383e71213293919e901baae0f09540f3c5186873f910a59d76131c9a6d393105b981e9b8b34893 COUNT = 65 -K = 5efa532fc5e2fbb149ca5b680254d19b5f3c00aed5d113e0 -P = 29f27912107f28755dfcb007f8c0cf12f159c0659f2a04a1fbcf45023fd59ca938dba2066833cadfd4063621706654f0e96e8ec03c5d35aa4734a96ab46928c041a6e0b6c3cb44b4e16a9160e6101c0729373d9fd3347c0f961e5355641cbc8d1b77b536a2 -C = fa20c593703295b7667b17be6527bb4e019b6e13c7a3afdc883b0f288d98fc2e643d68faebeacb52fb24c4c0b0e48ff1b8b92a32a240aba3b9b7493f8812b62518f310e16dd86771981018c62498cd2e82e930f96a76d25f2d85772052e850b448dcdd309f1c3c604a315d4337dac88a +K = 4b91eebee0fd2c5476e1cf25abcc19ee4964bd17386e5ca5 +P = 61e69a0264c7c0e0140f8d950ad6005d2256e5ef1e712acbca4d1c00d6d6d1aa46a8d67a83ed0b8e30551c90c4cb9b47ed32100d3bf88a5e66b93078d4cb889e6c4098d8a49191751cda4b476b53e44afd534caf8490a4233a39b081442178c2712f60c265a8ba8d566a3b7fd7fa4e659072d392fde9a8117112cdbf5df9f4d2e8e29c01fb494d57930c51522e71c432e01120666495ff7abd853d12f064e7dcbf3da8717d81c29d3678d20e15787ba294c1b7b28f44c7ba9a0c947df01ab2b3726eb0b4fea28282ae9d3ed09fbd3e33d8d94713d823ff6aa4d9b76f02169b3f44eebbf9945b8ede7b52c256ba55ff9cb0938cae020bca0c3c6e2dd8106fe0388d062492804d774806c867e7298f5badb279c7a5f287643ca947616237fb9dd6b7747b27b0da3f232cc94f85816e83a193e96b330c5fd71eb64b1aa066dca546075870d6ec2364325bc73fdf63603a376a585c2c0c8d24f1d0a65e764e4d8921136bc51eabf8f3c43ae3ad86b8c58a4215429e58d6258164e19c7032bcc17cd23bc88418e37d77d99e8c39b5cb020e52d1d38b48bb7c7c1385a047197a49dc5edfd44932983e5a889374015d1f4e1d2c18312f303d1f77694da1f7b14d7ef91e396ded8c744f6720bfcf989301bcb2cb4b64027ecacf83446239aa6c9627231e0b282fddb8d1339412137febe108b0aae088a718900ad1bba6102db8f8992be1 +C = fdedac7732b517dc07030d12a30c1d7663ed5e50ed56e085cccf2f202dd2196ae78ef7e3a06e4337658aa820dc1ce30dd986cf789203e7ebbe08861cedbc36c2f491c06d3ae326664e15a2cdce111b5dffca032270cc9d70ce6e05bdd407eec1d27c89b43a1deb1efea5c04698b3150748fd09d21e4b6498a2fe4fd8ffa2b2737e6219f1e50ea792b1afd3b22b8827bc7a56e5f5ec58d2dc74b8750c1445fa5d5902bd0526a497975577aed2568f438eb31ff25829e3f061f1a66cc4a5de02ba8e370c6aedf79d3b71947cf45f1d8ad2d8c91cc5161dace70c3037ba82b0d820e5abb1f24b08b70daabe15434ba943c13aa353eb21fba0863e9be3b2e2e20bc0daca136ad117049741aa1f79fbdfff22b774337c94c35eed3b3263d2024ddb0eecab40cd4c717086026cbe1080f6f4a54cde314e06ea86f98aef9add80502f3fd3f0fae1c572452b97ddd5ccb8ed881bf33d7c6250017206323afe5f06ab7689990dd9811cecb15a3a4792b3f768cab0576df032af57877ac171943eeeae15ce6a1bd52be59b09662973c06d621be84e599f3e7bc288c733784edaa27ffbeb2e94cb1d131ded30765493405bf2f47a2dc71253d867862a240f576849515fa937cc4e6b570ee01bd7140a00541da693421b8e236c83f2c295c6cdb2498188017eecefc247042b3fe69c710933bab00111e9d00012f11e7b8fafc6f8f3eef15213d4acc408cda05a5a COUNT = 66 -K = 43adc73cb64bcb957f86a572bac5897dcaeae47f9f6637f3 -P = 3c35df6e0a729b72a3f94ef95def7440a21c7f02128b388af812701a370ba52668a8a5e3ea9b4d1da20418a466890045b5d08e9d3655550ed52915e78bf193c8633583ad9a1db072b5d14d564d8faca3e89ef9aec4bf3db9aa37341c48b869cca77b81a5c9 -C = 636564693ce4f257d0da58c963fe604d11015178b14303cc14d783ac3ab49dbddb89ac15e3f250c792d389c18a3fd881ca46d71dea0a88dfd5945c479c1a57efca558d2fce3ebb18d0ec2dc813b824e69464666e10e092db728d4ede8780cd81f32411d70af5217c18fa53495d87dd80 +K = d7b2517cf66467b88407509ad27bf819da1eb1733a38c58e +P = 3aaa985a8366d6e81dfc6146f95f8f8d8e6bcdad2ba2710e7ead3c02ad08b5f841842e3a9f445bd54e312453c648ce33f8060b6b63f119b7e86e3a37abcb3538283a37f0e4feb8426cb37e15bb1fe6f06b545b3f6c498f8f19f877e2477c13a733633321eef996a783e65e9154a99f96efaff7a329088cbfa83cea25b1cd004571090a0244a3c8979a91d428470ab434c16170dedbe1cc2093be04c116e4b39b46938e024fab0acfe396d335bb992b22b9814f13764e6096f0c1efe95d007ade78b83d085b4a2b61c72accae32dbdab7ea458e75e517f5b40aa9daa897e54180148ea49b4ceba3cbc4a04e2c190d2cf1e8d82c2cba14a3fc909176e4d1dc5070f79af7f659114e114f52a773384adee318b64279b5789a63d46e06c9d89269e44a8d13e0e56dcb1d3f04e173c52199c996ac6700ece884a27863df8824b5cf5a9315432d2e697f934cf3ee9e786331ce714c2e53600116f422db280043f02d0ce7e572548f8e6cf734a5d778ddb09a153c91c326af09803e2ac997fbdcbb08cdf0db807da65e47b54bc1abb7522939c9fc41857e54b575646d78a06feadb8c1f2bffb89a73fef8b555c56c36bc4efeb07073bf5f28e37325dcf9c342d6e345c2b3bd00cab3e74b95bd31c83f87f762e14df93c7b4ac465588ef3c0a9d2a595a18c75795323308a6468e7d7c216eb94d9f2f97aea0e87f9b49c17f60cd6be0246 +C = b74e6b222fae311a3e36d62925d4b1e8adb6622b13649713de3d6aa8bae1c4f1d1e5f01f943e97fee4f9a2203af0fbc12e15ab69a6f1a44782a5a072ef870f6bd07422f67cac5127626bad72d2d857719d454917f6f79ac920a0eccbe2a38726b14c24fa5a16df6048bd8831d89e2f026b3e179791338a9fde86fcf240bd4d7553b76f770ca603f994d6e46da50c027aa548918cdcb8128ccf62589ba0463ff8cb692e5205b7d4c1e39be1463f88be16c01fc45ec8acc3000e92fed7e4fd76a5ac158de1c2b947c8584b9ede8a7f0fd1d6a3a46abfde437d96cfa1bccd540a086ccdb6599139c8ab628a88114ff002ab030e81ffc4f547c9bcb9b3fbed1e4a74507b0d01f4e3958c20968b4e9a6b368e08f7b6f10f3839877a5b45003bf2bd70a14e6b3f4e5bb22056dda826710b8e895c0e9c0de4f26da94d7582979ca7722e82c166cc597e6c8fd3031c2bae7599130225993ac353a98eb29e874012dacee1d0fd7cca267c288452ae24cf7a6124d6f3f93dfa89a8a48376d2a770f89be6da98889bdcef9e45c75f461078bd2245c98c210276861eb7b0f7b3f821b41c9cd9802acb319c5f280d2d5b8f396963a73c3501c572ad41cf95d991f7e59e7e325eca75683baedfc5cfa5d23b899a57e138fee2c4837ea055ecfbfc8f34d779e1900a3dcb3b7adc50501c6628bf30da782bfe4d3e12db892a5a33453ae0be44b483064c52dcf9792faf COUNT = 67 -K = f8387d420cd8d4b6ea565674eb70a41142b23ec18aa95a24 -P = 36600db3ef57f2ba91e1e0c8e2bcd3b48298cde3fadf242367b7d3a3b6cafce38cfdd0770d8a49aa3beee7ab63b47ccf65b69f511d1870c14e32384ce1a1598ea699e2ad7d9130f50bffaa32403bc3566d95d04f2dd237ea7ec96c99a4f25caffb983e9e6b -C = 316839998899be3d72797e6aabf1aed5b6c61fd56c8b248175a806fed82f3904e56cd287e97f166dfdb67825f26f3981272f9f77c79144a1681f7b1027524f59fff76201c890bd0493d0a9898f7461c5855b412728069d03a6cf3e42ecc598d07bdc1a6462a52e333e72cdd06bfe4479 +K = 9918b730ea1012eb30ec12445e81a62fa91cd986aa2eb6b8 +P = 2283885fba04cb53d07297d60f9e06b6725fa399eff5ef530968331b7eb28fb45e30dcb962571b2f154fa493d031b463900be12bf1977f7ab60727d3a58bb9b66e0dadb516530e1b756f2e7c1e3c694a72f2b0f30d2e4fd597cd4ea73198b6775f603dc27f412e76f25338a510f3d794f75027eeb4e20edd5d7eca48c00ad0a7c5f32f63b5a0d7b47f0bd78213e46f82c10431bcd3d4e94333b97cfd37166a4cf0fc24e8f1455286337b184be4414913e6a5f86328c09c626a60d1791fea4538490a3012442365ce5698caa0a5d45ed30423338ed76598e7568cf55451c4b8d92524253fd9edec1fc813024ec22e42bb4b1b53f58145010081fde7a9734412ce71996694cbb6a73333e00777568c9065ad68ff42a3f010f35eef94d04e63427bed48fd1690bbb1fef8ef42f5c074ba2807db07809aee562463a9a82c3da81c04ff5e2196d0ebb5e4574a68079bd512cfd3a9e157dcc81e5261ea9b525b74a2f37250b99407778c0af5d6c5aae71b7c056b3827266aff635de39ca8bf771244b051cb72437c90f205eef6cd1a0b4434dd418ba693bba385671108d16c5c60745bc5eff792ac4180956ba322fdc2ea4f714a19d28170d65b36b483dbe352b5d19bcc34df4038e2811f72a6eeeea08bf8ff79b24502e7984389209726d298c8b292f4a485d51e95f88c21b5888d153165363e0c09afbf103619344a8f17d1e9bc60 +C = bd511709e7cb383a8f0c36a1ccc997a8d1676f46ca9977cfa855f62eae3cbd9bb9b36296e43c5def13f0c5fa0b50243bac94dbf4edcefd4001b4a438d64c30e34fdcd0cbdc5fa8bbcccbb63f007e6d43e367af2c903c34d8ba86c2f92277568053691b686e60db74632f1420827f41e772d6342a489a8ddb8f910d8ef4861d2c69e0362cc1f4ae076a9a79247dc05278ced99e8dfa3914990c2d75a662a64f7b4d94575e602738ebf2f2897510a782df01a3ec16a79c5005bcdbb897227ee99dbcfa3d4a0284f716231b399fa6543944493df611056275b3556674f6983dbc119886ea1e4619442f9a4e2147d8ce33e67fe9c1f78110cd45670bdec5785405238c62f9b3fb84f5ba0f208acdf5e938758cbaee00559f19cc34b2bc0db761a974d1a9cf51086d0604a28b83d1965d00b16e0224327298e10e94ba8bf597c947a72de814a06f9f404daf9e984c6c6fe961f02082cbbc9e68b80ffd9c0f33057f4f0ff24b8f673ce48b4f0d96417c4fe7703579d90447bb668ecf0437f1d9143623893a938438ac803450c835cc7f969b5a71ff858a7139f1103b2801cd1fa351765ee085649da8e96693ba38686fa4fe2e106c5442cdcdc43f965600fe55fc0c0e91a0b45f5a4c81fcce0c9041d8bf357ca80a7ac0edf45588f66fdc01e8d16b0890bba03b1653864e87b62a164a598bce7b30425137cc79acf2467c5f3af50c39594469aac4814199 COUNT = 68 -K = 10dcd7a957c100d259dd9b667a4175d71de073c2bfddf1ed -P = cc89f117c81bbc7171b9ba27ecf7d2e681cae4dfc4a447f2fd1e56e964accb2ccb967bc9bba35b8326a42352fc172dea094873224c236a7ea0b7d5100a1bb379671ab610e397edbe1b4912bf9e3b3b603a9fb0e74b078949cc794723d2a316981ecab81678 -C = e74474f315180635803b6868244bebd56051360c8b60a9e8d2ceffe71ae2d126eaf5190d5806d31ea68fc85962a414431abf85659c60ebb3e592f18753f42a16f276bb0b51ca9049da1a751e7af642108454ae74fa23a918112476435f50edff16a634e7f1e41cbc2c2c7b1570927d63 +K = 19c1cf9c879ee5d1a81880b136b9c600dd729b1c76b178de +P = 3ddaa0f2e00e991ad4744d3101460e595ed7cfd715c59423f61f4c5b6f2d9b653264a64647a148196cc6b0f3bc3eb869530542ac53354f351f3e7a542166aa82fc3c76699b44d07d889745fd1fca0cf0fe29226b2148c56ac559ce381338a2dc62f22e9d74da1c7f10b6a25b1270da6baa6e63d02137b22a87c26e0b290f31f4e921043078f31a644482419a049130c691747e0b6b0cd6f1f2b6aa03cc859c191d4877cd7ae34dd9aa10ccf53f67e26701c7ab61b9653bd78c703c230fd7dc6bd1ad21a4d0a71c488f37e2ba6c4d4811f16d11557bc2732a0038e2e2f68099d2c51c0bfdc65753f9694869d1f70e519f1e4e3bb46fb97412f88ac34cf102455bd2d64f7465abe08835b48b90701d06ab5efda6023b08d74f44bd1ff3d088897abe6e4c0fe36e9dc3b3e8efd3ad51854e97df5f7d97b5d59bd3f68c60a10ae38d44453fb4392b4825bf026bf47139cd00833a77790304fce81dc24a00dadf93a62b76612c5b6f75a959151d74dec6ccec89a997082fc30f46a02f20bb3dbf7edd973a3d1aa00cfb92d5985804d9de8e415e3e7a7f116baa34ebb5ed69c20528d5e6c67f7a5c309e1607e1be96733a96c35b668393dfd7ca1f4b127cadf338fa5c48eeb5b609ed4a1e2620cc6d4ecc0c23c0824b2d6a8faa95b6d9da64d5e54154020dd151c3c112d8dc272fe33079c4bcb739fbd67bff736da83912e3cb76a562 +C = a49341e7a4bf50a9604c93bcc2888edea68105e6e587d450d167064deb2edc12f1079033dd1d4d34705b5afdca40efd4f7dbc64d394bac9ae5e188a07dc9a2dd91cc6990947ef515d87124bd936ca9f4a3ad2e9f8bd9dab97946167ab6c8e632e698d6af61ee5b0598bce0573efe76380004bb7621dd26a7817232c7dcbc625a5d8ce04222437ff2e274ea194588077554922de0769a8522b80b1a8f675b2dba31d79a70a09706b41fd926cabe36336be968325801165818b74fdb1a8c34668b36857cebc7ac20ccd50e0f847d7a289226b99c596a5527a78550272f1eb2157d5821b23bbb4ddfb2e8649c872a601ec12a9109217a4a5983117299f9d287db112ab53023d73e69ba85aac45a34cd09f461c88df8ef0ae34b969a6751fbc2f30289087f74ad55504fbcf5aebcefd330d61784a592bf62bd11f1e32b25bbfbb3ab17585be63c11352118e49a6027d3ab80fcdfdc76617d1e95b5aaf89d99e2978124083571106227c4f129435497eb2bdd9d70b26b0436aada22040904866aa07f829a079cc8464f2118db150897f1388987fe3d9991954c7046ad8f667437262480ba2d34f0a3a5afaa77427edc1a1d0eae279909f9f8354f457d69234c5e3ada669fbea23f314cf1331fd81df84774b59a88936ae9c6a1de710b56d57246f8f70e977b4c8375b89bd824af9a99af9e8f0d149d8962a723f4212acf3414d4d5037d7428b84f902e6d COUNT = 69 -K = 74eb079d87a9de5f17cba2b06d7a9d3be9394adfff75fe64 -P = c5ad14ad63738840e22afa760635e6ec0f9bdf1625507af60aaca02e9cccf92e5a591d17381552887e150c380634edcb9ee247ffced64b0d0175a56515f182bacac3b1cdfc7063d3eae5dee68c1cab493c9232a6551f31ff2b6ffbb26a8e092393923e3f53 -C = 1eadd99762d5b950da0eeb26bbc3df89a0a813fb8b7bac5148e2f78455011c5bd8dfd2651eacdd6dc5c685c98c2ae034a5f0c3688a9ef0e9b22b41088001276f655e1bc0655b0bc98a7f0bdcf536db6488b1a38fb7776d4f8a154dea29a1e9c1d40e2df9d63bc0e025faa58eb1a02049 +K = a19d2e084db71778c0251f7c1b56ce8dcd54d9658f3d56c3 +P = 2d27e137d5e6976ff1d9606ef5deebb91746f997932540affc91a661b589ff3d9a2fca68f932a590f5fc8b57325ce0c22c8cf509151ca74834fb680f9828a07d2e442a8e8e537eb93a1cdb8d32c1d60773cfc4696a9f871c6637928af2894063822e350295ac9e8575b74c33908d22c9cccac22b06f3573d6154c9eccf4cdabdd80e9daa5e4320ff0348ff569419581e537a3074df30229589b58717d8345546807d95e08ebf8c20c700294ab567e23d2ae2ece4a4e1baa1989fdba179fd6d14336dd0c2c0cfeb699a7203ab92d6541ac5990da6cdbd954e6a74ae22b7da77e99e6b344552bdc7cdf259bc4c4214461c5ffc8651d0406ddfc7f2859d6cc88355ba6b8ef2e300013549c1cdd1ddbe1f0f7e7537a064b880d17f4b465d7e5cc081e96b1e140f05ff25f08374bf68ab10f04a17a37b00170b5faf98ab2fef10d78dc423e06e041baa07a9353f5e78c81d5e1fb30216b13e7c8bd8b236c50ab06d831d1d057349adf687319c1c8fab3043ac6b37a2618d2aa3e6c6ef962824abdb913881c1952a3c64d283b62d0c922646edb3fe4f9c3b44a1f2c828e93288504d208d87327702b102ef11011a273db231d056070dc2252287fa0cf0e25c88f6b1d64bdc54e6a1ef1a968f50c11d9f49f9624b851d05b327e6e715e5fa60225c4c7987f51d3f2367336dfa80199c06ae4313c6a70bf7e50c25df0144b1e46969829b +C = b122c8e660367ad70853d75c71af0d331435e881e2b0b7a1df418d4a6dce840591cd879a5288fa13e0482ad541e9189607958844efc7e86950474f1a5ded0cdedbed14537fe956663383ce0c854e5aa90fd836e6157618ca8004d62c95a04b977f35ab94e515c59e683de6b753dce709c10b6eb922a179bee29d7f2b4e3270c0a0466fc38d67e0bdbfdb09fcb387ee46e58a4e10d36186b1983b28832683403bef9823017a678f7d3ca21958d1c1769a87095f6cc7e5c293ab195ad6a9a5acac3cdc77dcd9309ce5c6a66dde0d805c22c17aa8618cf73d42f30586b0deda6995ef3aeae4f521d8bfba9245266e19f04336ba54fd50f75fa998a90a2994d91906c218c246a074d2f1dd6b4d0cfb15e1f1b6249b962b63456f8415a6214a22e609583108a89e931e303881db6a99f5f86c07e9798c9443110d51933a39d63cb5d5a51f46717cf4325a302603182dd940cd308f8af0eea7d7103d9704e4578935cb782eccd010243a24846ac535f6321049be6ccee077adf011385c5d0f36b588a70317c4fdf3885942f36aa58a5249665d392bc730bf08f8c026171950765d0152212811ed79d962ad89f051ce0443f1d33005c913a93c2ae816719836445f9e4fe14a4437214a8b9c79e5b0152dfb3f9dad6da358112ae0d176b16d5c4dba0c14c7c7e13cbb611c2a58eff89262093e66898962d88c51a248e63fc14d1d0e7d60899f4ad5abd78dac COUNT = 70 -K = fb5531e26d70e87debd55889c84f1051763dd7d6ca0e51c5 -P = e0b0e0dda99a89badb77c057b80df31efa1817d338f53ecb52a96c92ad73f3cab0a25230e305a7394a0781467e67c7620f18bce2a55c7b527a41092c2f52949a08d0edd109444d76ad9579741f20dc91c19d4bf4b6e429860ab40e6ca0b5d20cbbab7dd6ce -C = 1a00aa84ff22bbcd3621cbf0e1b732163781d3ee52e52571137e9ca41c895b070691c616ae2be84418a41eb8a831929c7046ac01925ced0ef9813d6e182fe6050cb7ff8aa9ba2aa168d1604074c867c977474fa83893de4ea097fde888a3b5d90632fa8af90390771466a46c7239b796 +K = 015badaaa7f2773a9b8181eced02b6d26c598b8a6942a3a3 +P = d292d877900c18d4f24c3e1c3cf2b47febf0eb422f96d70ab332194dab46e5c1a035853d772ea60a0d469e431f27400d6cfa6057bb888d713bdff340b492f9685863473314ad1843450335db7a848a496fb95d863d0e322f784abc6483ee5e911aaf3ae1ba96b57a348f5f0c923e3dbd3975d3ad69aa1cd3ea9eb157f994ec40da45e4211bf64abc4ddd03b83cc546b30151852b6a8e11d04cb18e38040b71309f2da93a6b1e47a7a0907262268852a50e91a9d2cd5910db8a4afcb1e212967865cbf1ab456e3068e5c8c42854b3c2c521ffb45468e3942a0dc005317f8303af6ae83a3c8bff91b626dff5c0e487e4b6a082f8f786db21a57017c0eff9f9e626ba28d5286c6870ba9bfc86116703166fa1651924439d55ec8dd8ca5207e3c1283f6b7dbbe81afe013f70dbbf60ffeef93d386ca7be4061bc0799184079d3a0f903b5a5281b26dd4977b154ccb2611d11187362c562563a6a17a480e5b61e9d9d76632fd3d9e5a8f219ad8a7547a45bf91985a3c2703a9cc67a1ce6eb3617e2d53a22b13359ef02a8f8215a029239c5b678851a627eea334de007adbcef49675665f15a862c8553c80ff927a588128effd5611a6985254f4132b399a420967144d33746c1f158b88883a4a25fdae44f9c5eedd6f1720ce67763b4f0a757c5aef6ab598112eb8225d2e2acdceaa8b93e0670fcca91bd061ccd6249f30f136bccee +C = 8e79183130e0b4520685dfd2f629ba957b53cbc8da141984cb1ed0dcbb06b7ec9698fa804977ae9b05bf1e03c7536b049aff35a1e85af72253f7b2df1cc845c9af87f22ab947c5a2730f595dd7fdc68cb6d64038555192d74c691376570ae730ddf69ab6ecd9e48bfd2b57a001b9758b5c5c64cd02114adc85274b19e0eb8432c88caf9ab0f624dab9805b1aa2298e843ed824a2635322b5cd2d09e98cf7ee5bc2c8dd38305e2b281f6a31626a5d74d88b56e559a1118b860a2e5a53cba9f53d7efa3259695ebf0f1cda91c9b87b2f073ab16ff60917cbc49930c847b2e6c8e3c8f4083b8cec55b23a681df0448ae63f38d756448706808cdae4432ca9d0849dd4fe69d4a6c8b0a4ab90af0f91bf6f6e88532420a5e156a7e673f9e580055fa059fd77c9de6aab08bae19a9072ab133d7e520ef90ebd554724b5a1db77d91ceea6fcf3f2be613090ca1d9ce7723dd4b53cbe1b2fe1077e2e258e754b61aa8b8accc291c33bb992b018699a5ace2a47c20b97b9587c7aa347f818c42ff39d678d61bb7d30d5ee032293638c06638e54eaff666c4434fe814d360482a3c2ea04a857d129f6887c87b5e8b2dc9dc0089c08540240931bc0bd6c5d705012093845a099c60301a52fc5d809cef6611de2fc2e69f1eaf0f6502c70f827d13e9c5c69bd40ec8741ed28b8590b620793d78df5986d4edcdb8385db5f082e7b081738c7f4f8f535606aba7d31 COUNT = 71 -K = 82b5a764b4aa90e1cbd07a7a54a2e5052e2694c8a70f9a5a -P = ae91392d1f0f74f7e0489e4c95a3fa81faa0381ca5a0dc81c6af1d1ce16e1d9490f101f1bc3562a8a2704c3e36658179cc985d829acd92efbaa16a1258ec332f2a29b430d90f5cbe54c1d6549375139e8aa80237cf07b828f3e0200f81758ffa2800a99966 -C = d4b9e612b5d33b98138eeb34fd08595f4fa9aac7c9c80adaa001620ba549f30f763e7c8add3723cfb55704483fd5176c4715da12a9eeef84ce560bff8c4d93b4bb75a1afa53f8e5bbdaf94c0a977a539eb1aa60175c19c71cde68e3c1a213d786b70c3183430e06cdda71ed043114f21 +K = ef9ea9bd73a3b47d6cf6e7d38ad4fda9d78302eaf3aa4d74 +P = 624391ffaa0a1fe115706e3ade04d1ade2bf57735161ae64f43fda5c13246459471f1a295d15ad4ce94e353f94cb1afcf14bace905571d791d59645254af36ced1fe0edae3bd6a22acb54da986509bebb5dfddf4009e140e633d9d580a1294087479b685989456404eaaa734afd163e8f4ff8614917adef5aee74251b0999e40a548d9b8c1eebe7faac16d9bb5936cf6621fa87b6bc0cb87fb1de952abe36fd6b4f19a3db98a87e5b94d2ce3be359cf965b91befe8acad1f11c7d695f7103f22acef849448b46cce247e1e825c6c511aca011cb70fea2bbbb2dca085509322400a6d6a563008e3957460075582ae3acabd9a7156fae66cc6101557af950eee5f456d3bcee63471be39e478fdca40100a9e2f15bc3dd7cbdd087ddc3f1e295200371f9b43a285c6021aef77a3dc63cfa614424906f114e3bc7395c6c8849b95e6e1c4d8fa7178a7caa81361e0a40165581a1e73a52dd4bfbe61d2c6f1aab335deb8515e6cb42f408fce99c8e32b93fa3b51d1606afdb2fb3fbe0383a52715105224039da8425e401a7788ab0845094e623e4ecbc32bc31b1d0fda2a7350c2dec4490f22d0edd3af07be666749667289fe0ddb141d8fa4f4fbf04ab9ec72663d32961e31251350f3ede736801a14ff82bff1679c39238b9d27da2acdd0f6d1630719ff0adda407b34a374d601120b6f4d886a0d3bb355e86931a886bacba77c8e0 +C = 63dd3333d1f4845458b391dd2ae065dbd00bfa7de8e55295fd5af9acc3a39043a97837879def76bcadb1ed19605877dfeac84d779da0bebb7756b1b9fd4754b91d95d472178a359e65c2b41609b89d6c33624370636adf4678b474c6be88a739bdcf9ab90a6b736b6dc4a20a694c0808ae29d645f6e35aad233a65bc8aeb9476c29b553eb35feafce33092a2c3a959f7dcdd501a43caa98bec7ef55fc764d266444d3cde81b865e9d62c7d72da6b843f34979c9dd71851592553adbb7e4e1bc16ce5b158ab73c667c755d3e7e9bfd9a4a01c9681337e286353ff42da9c98883a0017063f823fce68d26759a35cb3ce04c651ebd3e3ee2deb67d994c8e31d541313794c707efec7374abaee1c548d55c7a727b7e0f5b2881fa060dd4a5dece204d225e726a1a9ce87a7c7d2d9df6dd1ecbb0e7fbe8e04e70cc26ff9d415ee6fd50ddca1772ada1876f53b6dcecd518224cf03fab9f7b3b251f4ce64d63340bfb4550ca7313b9f0857ecc3a7f47501130daefb654081d493069cc6c92205f6797e492c6627a6634be46a550f7e80c2a43df9445d867ad5f83532d2bdb0d460f23d881de7204284017ae34c6071d386688eb225d9cc00aafb0fdd658825dbd3db44d1c3b8b0be2f45f8721a2fe7593f08a30ec281ec8226cb8a06d22807016f9c315725396cd969e37909642ac7c8a5b95b43e86bd9f6376b8c0ddafb9f06e299b9a9f18304fcfbe4e8 COUNT = 72 -K = e09b50528b026322f7bde549d4df6f8ba15c6a63f1bbced1 -P = 96aaf15d225c7055831d3b76483b34c910d097d51a854b1dae12db88cc1b07fd6c2d0d2736a83b6d4bba84c58e0a0720bb6195275f207c74f2b98fda3e1ba583e05ff639ce8f2189e006d3aa3cb4e270b3e99d392d99b0dd17e41a5dd95cd7387f962df1f5 -C = 195ef7b61d56b6e0abfb251fa703afc10a9a24e01208cd0fb42e5bc36090437fd1a7704588925d6b063e852b30bfa694432b7898b79441825627c4416e5bc0b852ea3a96ae6fa6a083a7fd11ee77558fb1e189ed5c041693091df7b736e31feef64775d7082d8a530566f94b672b8852 +K = 38b4b3da31f39507263c75218488cf53f27c498ad3816fc6 +P = 2b87a0640f93bf0be63729dd5eee1938d5016ce168f877935d6f29245ea3b55b5779ac0dd9f98a847ee30fa58491e651cb1236cd8c1d7ed24cccc0f05f769ff7eef710ec136dc264e449bf602e8ec9e933f83c968dc10a1e2542fde8cce94efd87c97b1602cfc954f4334ade1afe1b401f153510131b42992381c54dcb41b54e4283b7a7fe3e0a280b3ab9df69d7c8b5bbc552d17f3d6497a5d004c8aa86dd093d724d79bbc51bf23341a78518f90594907416ee86c4d9757ff0a002408a15e1805cd0aa79c979a3f6c387f9341df884b25b54bbb079b0f731bd82a01062c474298d656d717bea9b3d0b27792dab88f94937f1cc3ec62cb960efffb0fd3b749bca5994bdf2d1f252a4a818a9f9bb9d04f59506790335297df1589304f95fed914b90db7205e566c125ff40aea3647bafe8b4a28f2d1cbc407aa8c875b33af1f744cc523eedff3716266b6b7494b09c59272ddb5e872382d28e0409be82a0c08e0ac7a3d5e3cb5bd702c5ea471b5d0bb6b84543b2daa35da7c9cd04c7af078a0427788687505d2908bf12f554ea02497ea3e5de8deb9c8a64d5ed2b84d912eb781d65a3b7657426e0ee85b732edc3701f8c99dd1335ba05939306b2ea23f2bfa5b5525a31e5de1475a147abe6a5defa54a7e2e5555d7c91c66e30ef81801053cf18329e31f7231e202d0e60d6f266660c10e375c83a2b1648400b2594ef5cfcf1 +C = e6d8f0f9080f614c4088ea7b9ed12c65e6ebe1b85068b99cb80edcdf7c0267b82c0f7427fb7e3b5da2858b37beb2603f0e1fdf97f68d774706213cdc8b3b7bf266bb16f89d1327afbd2635e26eae570039cd5103a5505edf93ad642e7703c19da8f7c5dfa2dd1601a54312c43ecedf2ca91205359572dc1f74fbb5f59f8344ba798eb7b7b26661c53d089a79fd4ea8a057435c0d59f4b4487210543b7213366de59c33d1fe1b111db2bf4e50f26b5805239c7b45555b826c0c780be03ce5bc61bd9310c5cb7aa8012e740da2481b99eeb21356a953e6e2490edf195b2934592fbc907a28b081dd92a2552a5434b8ab7b067ffcd7b4ea9e1c76db29a37b97fa77cde4e20f2c3b90733567ea82f1e2aa9b74c9cf080d1e8d22b72364f89e7ebabdb8bd153c589d1f85f2a8049b4980f465b0e76153a4224d08b5f2217d45a90fcaa9624d0361e479a43e58ce42f9b51798e1b65d9018913629e6b6116835e2cf50c426e03339e8b6e9dd72f8ff5fc8c848a1f7041774a22086b7352a6094e49bbf0458398a0faf74ff9a3552cde53fb399563d3dc95a709f5f3ec882457fe53e7ba39cda667af11cd3c6b284183930c104da9adf20d74ee2f8a5b1efbdf69c46a46965415aa17c307cb5d2dbb9c64a7882a474cf41d8e34e1928982533bcff039b06f2483a611e1261e66d45e9048beb371913dac87c1f1827f80cea3adf1ab364d7b02f9bb6509f33 COUNT = 73 -K = 1391278d7ad439d380f969df2733e37318a921b0745ad175 -P = d089eb16df02bcd4a3a6395d4b2436b23cc6712cf172b7a52b7d7f4c4f91f95ffa017afcf33aae8f6148fcfd63fe083cab8c2aa245b66f04b32ebbda7105b9f4477ce8e7330e61086701c76068f869b06253d9a19d15a55ce29495459995f5c9e82eb1c40d -C = 138465140ef18abd8d070e873f728f519ae1d0d53a7146a9f53e48aeb89d03b6836ae42fc9eada6a56af7085d3529434fd973c4e8c4af70930c5f4b4dabb1913c03823a07a5359dc8b9f3ea488974302f41381abcc0d5a16915cc82a2d7d49bff371389a2eef9b5ebb33e93370294d69 +K = a2133ea72cd0ba12af55ae354255af72ec4856ebf7938a9f +P = f12b84b0e8e7c259b8f214e5f18d2fbab097f66296277e9a73b2f0b701c6233fe9d58d55a93cfcdef43298cd8b83fdcdc5f1c4e94ecc2876dff25921019f1db3b54e5c344b213db9839076e4ae164937cd998bf03acb092e3528c8d59367e43def1e6bff89f9bd329641eee6b72728f748afe12ae27b48c33e22e475c37dd9e963d2d1f475d499603a41c04ec18329f52d440eee02b04fee47fa582ba6b5979d118978c4e1850901d1aa09079318ccf2c7391a6b77207d2b070f85b3243a354d8effdb02a4f6eb60168b6fc55fef07473fa28879281fe4c1a5f52e1a61339ea47fa819b9aab52aa504f70287261d40d955200ab4129967a577f7456c5582f72b1e92b0a65721c72bd5923e1e9f8ee8a48f83e4b00d3ee88aaa6c978d0b348a3674c4caab8d4de60d1e27068de4828951bb972690db8d1ece99ffc3b7693554ad36c9c0c186cc61fc56428af3eef02950d73e57540b5b57d4922dae09bf53e83056c8c0ffa5f470fa927e29950cfd28c59edddb84287a5d3c1eecf5f46b9480507f108e6f8376a208b9ff464f6cd9801cc76093122e0f3b2cdebd523619f85a997029ede1781095bb0680dee8e057448bf65aa60a19b28c1187260693ec7a9d03118f19c37bed60fd3a64dc580b8aced194fb6391ce8a07d5520d7fcf8c40cb0b1dbde77ff4efecdbb9defc72e09084c19a0dc365f67e80eda9b53f159867844f +C = f3a0c3ee1b9cc764bb9ddc2306c6031d80ecbfa074982639a79187e996464383aa9246b93c009e58aeb5e3cab8db3471d1878e57497ddac40e436d96b42a7d39ce81b4d5190faa01f1c083138579465888d72185e14f5d63752eab433174647b582c70ee7192f6349b68ce6230b945461243fda1eb2b159c030d9cbdbc1dda262166afdd3bbf37328cfbded170fcb9ab948cf473d52a54ee2bda931dc92aebe53b950e0efdcd3d0d5e6a2ac8b4100292867774380e8e8e23cb72fa59c9508b27bbdf796f96f7a4286f882cd38f52e68ed79e62a153e7e3d0b64fbe53b6bfcd85d1b62b1df2515d65a03c28ae1b1129fd061220b44b8aa7469319e271036ee002cfdb583da8d419b63e58339d5a846d03ee866f787cd6ce19e00bd9148ed7b9863d602b933c69c6aaa33cfd91bd30accfc2f9b26e440b735f0406d96414db6cf906a221f6e1b08d617b9e12ff86723aa5056afca6359b32fcd5f9bbf10f6fdfaae426931996a179bdec0210dd285a938ebc5032a2e036ea7e3b6cc577c7868a5959a80aeb0344d4140c04c3963753f1a1ccbe5612072b35f526cf1ab4e40a10e36cb5b3005359fd341ce0c9b1445997424ee689d05ceab56cf5b917246fbe85ea0378b257d9dd86b79189f46f2067674a7da1c28b27ce69b25adbac8716a6e55a9b65bd63f57b00112bbeb5aa86f8c33c47f7c8ef5b62b00672d60af25b371d7b53fd04a3fec16a25 COUNT = 74 -K = 4b442672af07436631cbea3f07b91c564dc26951ac9951e6 -P = ffa20859824b141954d8d797e49bb950b7284f6da100aecd450c31e52c8fc3e3b6f3dbeaa445a3b9a6f324da3167370055695777617ee637ac07801e79c7146d4b809b10db44d2335ebb7df489f0f7abf282646dbae07367404dcf2e0524b9bd9e501be536 -C = 2b6b2de0cfed7deb77ef9c5032fc32744a442aef230030ffcdbb12c96ceafc3da4107a1f82cfa5245a77719c3d455b10e426101ebee72a5dc6d5007defccbb1adbc807badb6a72406afa0066fad18feef00a3014e6e698c5940714e3c29ac976a5b9b3eda831766c36c4f47d0a064216 +K = 035e14bacfc11bf4e7f06ae4dcf3327f7a92dd10915f37e9 +P = 642b8b42976ad30a9e036481c11add9927efa1f8d95045e06a568976b7c4a75253005730c318cfb248d99853e37259fcd77cfc701428639bf716934025fb2f0b9d5aa97316d262ec177c6a38bc46290d998230f14625184dfc2f037db0ce58751fd9d8ff073a82d12be629a866577b6ea7cdd9e6ffb95cc6f3bdc1f8b88ad34e083f059ed19942ae3c3f455e5b3c9fb12f7bad6c6c59284ed1c1c6437d69d72fde2b2978af05e75eb5c10747f8f4a097bc15d9d213c976df7db7715ecc53bdfb9258284fe9ef19deffe3e2f3558dccd2f43394e0fb99618870eaf414d117b3d8dbd650cb0844f7812f53fd7f1b1f02533cbff11486d0f0d497a47f0b7c93920063c977c37cdbc671b5784538319608528593bfab693c9da88fbfccf3006b85a8f3fcd8de2b04b926d322d34538e647412b5ebd7f09840b67dfcfab01a416e07f458f6336009f6842ad6e194637feca4582bb41fd90268ab5eed7b2eb8b32f101e6f5bf477405ea8be478c6ae4d766626033968cb217fc25c8db6fa8cdda59110bedde2729b856b7585ab52edd6bdafaffc7cd59f91ac34864402ebe50d85e98f5f435c3970fbc9c681866d2233755d8bee6295215b8dc81f3b70aef06e69f39c27aa0bb598ebb457cf4d60c4bc391e3ff6ec0902b45ebc452a7d447af083f2089a1a70d97d31a21d6e786e95fa828205a2c892d4ed6f0909cdb10b5d17923983 +C = c07cb47c97f141300bbef26a579eab4589846deaa8669d05fe6b4d8882a0bca60aeee9a785dd7e3be4a65c3bf20c7f2f42acb9076d98d8de0263df50b627ee9b74500e413d9ddc75acbf5f0efd792a39701ba8122d1be15cb0f2c7348e46a9cc43c8d89a16abcf33ed4240e866368bf2a1d61bf276a904279bc2325dc3e999f9a08068cabae4dbf3cd41abe5be954d40bed663dbaa4a380507fd6440f13fcc0f8a221f9b04fce7f1fcc1133e906376162b4263434808fc663299e73a89a1c1fe2547199a18df65d6776247b396032a3c4e7039fc4ca12091a915e43d1e2aa846360e33bd3c5f17e7c3a76f6447ec0e2dff158c6023fad0cf187330f94e7d9b16c034bc535759ef79a608ef4f61661149ea822e108c6bdc49e2c9086c5493229ca42590c7171039ee469778ca28b0275bf421baed789990611ce5cffba660778f3a109ab8ff64e9828be41529ea2acd19ebf32ac525e6a57428216ab6e0be38f53c5f57a083d9d8b28415506f29d7cbe0431e920c3b710072dd5ca477f4baf0ccf76eabcff01303df985dbb432fdbeaffa8b71d64f9a26fc61f0150f1ba6e02f41ef7dad67ea8eafd0448dc5834ab1d3c7a71d3178dbddeba48b781baff60d3f28a9cd0d420b2c83ef7226170d76656042ebaabe66c03ee92d3117f68e3629ed93cf34a5f66c3f9a1501d9c8edc0c85a8e5162d1d67750038fd225d93f1ff59a37764d6b9af33d46e COUNT = 75 -K = 740b2608e81f4f3ad93de45f13cb3c5bb26eac35d2b05ba0 -P = 0fd03e79f0822dfa90914328cb08d3a18712672ed3a541c01747af3ec2bb0d66a52aa77a02c2cd136f079625cacc5dab1f1d3cf2cfc530c75f6bac33539148571938127a35cbd7678dbfbee09c725822056c30f487ceab45f93583204fdff46319e26991fd -C = 843748cf4f0994d3cdaddcab120506b015a1dad9a4d7fea0235fbec0a758b176eedb93d908618ae4644eaf499f3210b22ab2f5e5816129469e01d556065c22a6d626a6f3ac891a58fc3aebc510136bc1dfac1caa9c5e7b10991495eba3909c631ca8e7377483da93996e870e66716438 +K = 3eed80b5f0ef74d04d1334f9f4df1fae44640bfc8533bdd4 +P = 70b4c1faf0843fea02c5ad0aadd81bffd019658e1d3b810ccb377d905c59895eae2dc5d25cde4760b33354f419dfad61f0bd9b7e1a432767fd839d0fc9a05c260ea805db38e0d1feacfe62a50698fde005a6b00402e06bfda35c7b65de616ea6bbf9af385bdcc628dc50fbd1c0c872e514e9968f0878933762478ce27b740933b7157da6000601b36060fd635dd6309129100a739a46450d7782cd9d24d66c6acde7a1a116f877075e44b424da59d9c96cdc5e0eee888bbe41a958d02526ad476a2a533dab319c7858598112431a6e1c8682a76d1e5ef75c880cfc71fed0e70c0e4fc3b273c18570e875c82a90365fff847da78e38622076f64e8e31be7de1efb6370c1fe91d4a708185860f2d04b9637566dc2f07e9c59266272069b5e41c0554baf5147368df6585d578798bfb3c51c66df95e6fd64528275504a8be54bb9e6fdf7427d649f8f73f7405f64e97936dbc3becc80cda0ce9ae4a4837f7f8ac2ae5b89a4e95df66ff28dc7554d5da3e8c6f382e260b87cfca50e496d603d548a10d8c916e4c1c6831032c305ebfcba82ecafa4282e133dcb3b2eae1e151e9500d158f0416e56c3079637ee5a27f425c40b273706ceb9ab09c18a821e22250cf49715443770a38014c6cbfc07ef99e6a9a876a7178247fce1b46080e8fae77d5c8b2c02cf58737dfd9ff5430528625a11ce1c7b1444221e48ef713d3d114f95450 +C = bd7dbb78101efc0b29f1618db6ed5d44547b88b55ad77499e6816539f4979fbf76355db2ad2503636116798e62d0c51afb73b9d305dee7f53cc3c73a7aed6a475f9438cdcb317f5fb62122cdd67d61babb1501351ef279e96a16cb9271d035c95936f70ef5f7b00d9e4aedeaeb688c71a1f1ff6e8b485687b139c67e32fcb944acaa79dc3879a26157cd03e35904342fcb8053f634e4fcd53c00f5b1a2fa139aad52540d43fd90ac61990570bee06dc46047b2e2ae7244b8574739c08abed7318ff21175fc0801704c590f48a94ff37a62be37912cd17b0d16b0ce74f2a39f23c4b3ea8d9969a931b5220a49777dda9ea7c60dcb2ce3171407b356e9de6d2e7802e970a2e0dec5da078e1b807bc747d6f4a8f5aab4af4ed7b7f42fd743b9f0031bafb458b63713fc53ce684adfaeb335b573b69bc1dac36797cca4f90f1daad1fd0874399910471bbe3a69e171621d9809bff5ee5e2c0f1c9f7c977f67b15838323e8183df30d49656b516fbd062542dd8a79d5e0e03edb060e9302f2f9f3b64097d09d569c0e939a4c6125e1c942e9060529272e01bc4df206bfa2ab3b2ff4d0ee845d2fa8ef690f003f3d4cd3780ab89a8ce7cd21712b971f38a8f5395788585aec04fdc1d7c0ed33af1c18ecc0c75c59c498425771722c13e987f9491bda355b66f5da1fe2efa8c5d4299a58e58895b719832154537a49371bda06179867db79d25d0d3f94e56 COUNT = 76 -K = 77f49e7d9709a97b1a5ef61e5a6497a634ae15fedb9735e7 -P = 44d49146611d25bbcbf124fa7c014b4a94f6ed1b069f08d525d6d31ba14b99a3f2ba314afb3d275be8ecfc332c197072a3e3819ed40c43c36978da4c722c28e2da084aecc0d3cd649abfbccb642273432a79555e22d478c1a4dea5a05e78309638e53c8b92 -C = 88ea9a43f0af69ba7a4f64e6e07ab522adb2b65547208992add6621109da6346064b0d8c4cbac398d8e7f1bcd4160e871205844728d035beacf14831082b87c0e602c87d8ff00353f4cd61f319ba72da9077447d115de4f65985f15444d5766710027f52e7d1961c024f644013bba42d +K = 639eb264cca4e81be6878719d8f7a96e8d21f24f779f82ad +P = 19152e9f5fe23b567118f0e84bbecea12618a7a7fed28449480332d40eacdf5442e303ece807e238fc5d412a012952e60420dbb9fc3d9c6fd491ce081da8d03a5f33d32eb58d60ae363d496f56dc524a4c0aa8bddc1133a65d7f2c371d82e2c458f6a1805a7cd5455b08a38d5c869c5490447e2b16d5527db14c86b1a40d0e80ee5c733b7e5fa60224a6c0d994c3ab670d9c1ffc1061426cdd725ec2aba4aa72095ceab1c1793e75674e489a2a3f7177db2294b74192cf367b6390b494c9fd4d075a42c6de803439e1a00de9debef71cc15c528136066d5bbb49e6695cb35536e3f2d8e0827dec3858cffdc790b2592f35749c12e40d2586dafe16146fa31fd2bbff65fac858880909a5a8a4c86a65e84f9db6cfb9c69dc113e05043cdc29d6563974d53c52cfa5daabdc2bb307377aa42e489d4e6fc5c596386be5c967a0eebd4a95dccad8d01176e1ac15b495014880f1156605ec6d82e19ebfcc254da6d25996980f391929384423810e4d5b82cff7ec6f1e45bf8c93cf4e612f53885978e72c23cd99da282733bd087826c88a356f3460186f0de24bf784a809764ff31ccbdc21628e0c7cef4bbf1280f5c380dedc47d6d1c47ab2fa3e41614d4923d5fdfe6c0564416938f4b6b2bb4a88d0e9eb9f28d13fd56428e42b0c8c8a5a94477ef305fcc62f3a23f9540f086c956de663c0b1434afffaba9da43bf9d1cb82e4353 +C = 7e26b039d4a584cd4c70499441e9fa932cd46cb151f54ad46d166472e1044e9dbad792d095050196f935b46f03e2f995961d5c4402be2278c7c0c061379e9ec8416f81836fdb6b614803dd21ceb2450defc26744348fbe86f9bc0a0b6c44125a538436127011da514e2af4b187a0e004bfd27f1d5c3eb9485559ca6a54acba7121258b43f54b4571f5789368ead97324104edb98fdcd597076fe1ca32ce0f7b60b58043c22175149502b46636ac11223d243b20d3705dc6a78c12b6dc136fee3200bf455bba2bb19857c9517698c03d5eaadbc15659983c6d521b5cfcc231d5d9f56a496de604f62d1f8656423b539e3a70c1c1c766b7986c51a667fcc5bd58c29a94a3d3cee2fae95e67f11c6553fc0b09b957b40b9f9924279ee99a08209efc29e42fc378d50dca15a1c3679e7b585dd30c0df68bbfe78945e16a1641f2f6a8d19adf0cde5b740f18a005f3c89a694408bbb1652151d041f2a0bcc1eca9c8992ae8bc4178f44a3c3c22398d261f9df4171fbb82d09ad609667e93c334b44e56506790267d42497032a4ceae5f242ef6a77dbc1df2e4fe6639aa0c647051d2e163280f82a627f922b7fb80cfdc8158455a82c53f995a17cd4a75cd2d1c84a2e680595dabfef5112fd0a2cc0bf9033b434c493c9b65fe5de9668b63f8aa7f4058c31e836c242b54b065c58604a839776fae40cba5532dfee19c1a0fd46f0f94927d52c9b06f041a4 COUNT = 77 -K = 02bebfb59950ba071cb651aa98f9521ed0ff4b54e79a40aa -P = bd5e2fbbe41eaec56d66c4623d6fee0f3618c391cb2096f38d78aee9014210295f8696cf4ddca296f7eae000d3d3c39fbb560a9eb33d3123943677e2b01045757bd5842e05637ba7cc2a177f31ad73d2c1dbca0ba5a3efe5cf0ff7648f1bbf319c5fbb5d8e -C = 870932f52739c16877f4810f896fc6f9196ff556555dcd73742e9b9d52c19d3b032a7990e7b6ed2b876d5743febe7101c23b3aba388a9a596015acdc33d43cfc106606cb346c389cbaf239a27e25e44c9627e82216ef8fe56ac8539edb54b8280c375dac711d4008d67df9474b236780 +K = 5aa5391bb8c836b699bb539a2767dfff859136f2cd792f68 +P = a56ec92653c3df1b352c7e341ea496f06665dcf9a5831c45099779bc3cf1891b0f01f4b9efa0a51b04b93003c3b16e53bf4e20e97047bb3b97747150fd6ad8c33d9ab3a2b854a0e50d6ce5999936bf742f09731f45f3f4cb093f917b192f8d69842faf7ca8b21158b7c69d30e4248292baf6bff26c960b493fda92d2fb5f65326425d86e0421d710511334ea4960b427874e14978c03918a161bb520748fd8d3f8c7e97b00f168dd957a0e8a659b133a42de9ee4b05e36e1fea383d07ccf8bc361fb8f3e859966ad81f5772720b47e935880d5c9e5ad36c6a2a6b2540fab3d724b633ba93e97a9ede511e62d4065f20b091d5eb6d73523411930515abcbaa54fbb224f80f3e0f1c0e8f5d12d6cc8d7e958ce1a60bdb68e64ffe3129db361c028c8eaa719da014685dae6655a6ead8dbf47167ef709669233cc336959c3b94729f0f265e21ac2cee55dc9a5a4eb31722fb7343abbd7a8f7241c26e88e717cde3c0aac8f2a308686c240d15568722288bad1f19a2408c536cd6625e9d4fc3db00c5a61494fd371167984f2c18fdc2e5f43c15642b7f53a2cef801e76ec223239567a7ac5652a479c513d184b5a404b0e9208b67ae3ef13ab93f3443223bea9d80dc67c8b216c0928edb249ada850df94328690dc7ec15db3c62889bb803cc2b86eb7828af0aee4edea90da27f1dd0700baf9b965d7457f14099203b4190a9c4121 +C = ed54c0f69351d21d27f95f562a6f1ee791c6da97667f6b70f5da4714c6c17c7f3a562244bdf9e528c2a9f4a463eab5890b8409aee5d473c52df3f50611af1a34503b07255eea7e3319dc0c07d7c3133e0f4b5409b0c5b85555d6f9aaee2d8c03a3228aed215a28edac0239c1bbe0efcd50bbb2760aea3061cf1e3410fd2c2cc2b5c797a65842c0c57f4d0375233198971d797fc18b5cf5b0b0298abf54a11caaf4db9125cdecc8d174a87a4a825fd416ce4d21b776f484daf3979fbc9a0110dd23ded592f9602f45d9458f7c1b867c48243398d6ab8276fc27382edfe63507847c9aecb94fbe2b354e9621ce27afab63679a33a8867778458f74d88f6d635d8b56b11f318e3f9aa3a260611ec34c698c147f680fa16ee0338bd3cff31faca18339ea967cb2396fa0c76f4c1ffb7b805d776572200fe457f4dbce8b29b632a1baa20d5a14c17edf3ae17c61fd97af212de0044abe9f8b003eb4568df613a0d7bfbc32a9b9419824d098f381cc1ed296349c4c87b17f11f2294418e5b3886e0e81ab2607ad9cf2cdb6f1ba578a28a9b2da4d6f0343cf7b8aa625bb8880ea399bc27d94c2699285760cca6de356ada8da4bb9455e5efe73c9003a92a964e9e348bfc6c3a0cb0e0788147bf45487f9026aced6bac2980e95a167d59a99649b7d52e75590c7dc4df64fb1df1bc2aaefba9fc748acacc6c4e2bdf6bbc8bef7973d4877981341a87bd88ae7 COUNT = 78 -K = 801459dca84499ddcc78b9f5d35f95526a2b82b8841cc829 -P = c4633239dd2e430f36026dfbf682ed2f6d4eb2b33a64325cc2051f2d4066a8f32cd39bc7858a269e35af9bfa7a4daa500fd1e67608f951931f155c2cbcfb0cdc7f93793912be255bf27c56448082b5f7ec17128ec3cc01afd65abd3cefdf38f04860ac735c -C = 269cdaf1fb5f3280f1ebd2e6424935cf6178d34e0e43bed7fc1724810ab66b3dd20452d189febde2f14616952c2a5b685229c75963ae5f8ea86266360ac6be98e665c0ccf899dfa724b3c21f99857d163e447c87a875b865b11649fb30cba69aff69c60d0fc72aa8420e8a610fe49965 +K = 4f2d6143f28bb314d545c16bc754f0ba3471ad2a993796eb +P = da5fbcb52cb30c9297fd7becb97be65374a0804087c6203bb3049363e33d33c64b4c48740b956219397771f38bf9e116145e0346c6130288cc1713d5d1d7953858d600708d61030ad94f1b35f4f03b6b047310f3e9b690fadf8a551bbc59d4271dc6997dd15dd41fbeba327b9ee31aa7fd82bd6493dad32667fb3eac6f6a1c0a2de12d05d513711c210f8520e5f9cff32e1f3c007f3c4bc87a95191b409f902136f94ed7089a77261e0f6f41bcc8ae7a4e3d5fce7d76c46dcf4ba7e1869f3cf158703675f589b2aeaff55239850d049daef0115cb224c32fbd85b21a1385368414c1d714afcd867f007d9fbb985a7750a09f2d5aceed386176514d0976e47fee6d3e0e16503e095559155baf8fa34cf29e17641eb08e8fa875f0e5ee488c1d12aaf6f47341666f1fc46f069b032f3b023b4b7bb51edc6f212d9713229aefcd0fb54473b432b20441ec9426a63300eb4af133eeadd9972c315718bec6fd802a7343d974ca598d4c7036d538b683a5e5eca3038fe4f6ec25440c7410851f834b530cda0e36cacd144f2bd0b5a94beb2ef7ca7dce5039ec47d71c51a5d6c9cdd591de1397e8a0b392e830df47c687874e07adba35c5e46ee3d90d605551e679164d5dd514f9d2c289e58ad8c110dcf9911e0ce45e8bf3dd303291fdf3c1fcabd52f2142fde57a3689afc1b4a027d20f8bce06dd198e881b5b53f055b2d50560ceb1 +C = 25e7aba6d06b158218ea091e0da9bffa2320725af2f806577824792682ecc690b457c0ff52b0ad5941df1bfc3015978cfbb4bdd0037a6843b6f063aa1e5de463f0deb48571efe8b2d95c4a85573f2b9464d6db9f330cfe82e354461285a881d42c149ae68867d9b0b559c4c1925d1fa1fe981aad1c996608772f3fc96509a815b4be54229d678c8079f111fbe61b7a379f01b59d46dc899d2ec28747b93abb744fd3745ee6fd27931e5647c6a983c6d163bc09fd08d65955ae547a58b59cd23808016366f07fa651ea6c08ab8a1e99d458ea041731094aec484dc05951bb7fdfd23751a9870db9da7163080dde1fd87f8707d8b834302f8c79e2dce1d2798297f41766ad4cad9174f6907e0127d86dee3c2b30e84555910c8ddf559e6f4c4b6b5664c9de6e8023994f543e5ef1ef2e9d8384fdb1654ed9482682307909d3e1ac6b8439124bd173739cdcc14f700d60f57b418e278a2997922ed7676575783325614667103aab2b4f7c81a30c85574143131940eb4c545977b9dfc7c1261a7acc7a7d4ddce97b86664802dc9d902e4c013ee490e4dfb095a24d03c76d559996e4b64cff6746def279cbe591d9f9481a86e9d56b964d27df570ba31f308198cf75624a7b356f3489f87c60bf5a4bd8be4ebe2eca8e876588f28539616c8e6a259550defe80cc356e4155a7b89ea05efa129adfaf78f1dcbe302ce40c3718ead691fd9cf72a598bc232 COUNT = 79 -K = d1200a4cd90975b1beebd051b393c32fba4d65de162d87aa -P = a438c482a03158df5c22ad9900b85c2ce5027543c46ab7b73833466bd69b40699449df7b9402c9d75343031ab2b96e5804c3725c7c267a4274b19ddf62650d5043850aeb7a0f58d4ea1768c12626a8af46e80034ed2725f46ae841f237f7186ab72ffe35d8 -C = fce9402085f44c75e758bcce76544c17d0fdaa9e052d1777d77a1e5785a9645f173de67e63964d2ed38289c3c54ea4e4e4ec0678aa96f2654e6fd6e2c5ae874b63cfadf37a472b0a07ce7e2e4d87b12ff35fb29eb9f054a07b5f89ff76294787ad9ffa2c7a983a9e0956a5b296c7826e +K = ca0d27eabafaff39e32019372a27573ca230710f1333b571 +P = 63d3acab16afd0c1b2006240d58f61bb2d205cc1a4e152daa9c4b9be2c101234c324965aa01b752529238efddece7719b2a9c683fd9b98c8393460597511ddba71f3197074d91ace4bf79bcfb0653d7e0440fc053672b5ec5f24b8be8f467d6aff6ed607fb75e549c85f3df462aa3f21168bd67fae61d7ef2420cbb232ed2b7a954bace1b1ffc0200e6fa3101cef718c570659d2380af7d539f3d0867c8a07858bd261cc9bd735fc70adac38f1a7d11631d043dbf22ac90af5a4fa7cd88b4203c55c1bc39745d3627b1fdcb79f727c4e2e19aa29db4159895cc109cd4b4a37e539ab3df69ac925f0cc8cfb205512326e2a5e72f7a89ddce9c675c31d9e1c9596e176e9a27e49790f01b8ba3bebd9117c25546b2e9d337be33de69174c1c0e81469ce95be403125581cb0b3465911b0d4edf49125095ace05c2985031abfa94fedb71f165cd1c00a1b560fb68bda4d0ed647e25f1ea2409bd2872974d916a519c794e133cbed9ec046b70b1d9e3a0496ce865f7843a488a7b8e053940b72bbf3733ed81b12a3461407bcf4c3c2cda50fb081e4c2b3d1bb60aa1afc80bfb5be8dd83e705cf4a81bab917ce386f7378e5df25b9d202b5fa63c4452376d2493591f2f005f5ef2292041ca6a6e86d0b1b291fcf55d4f0c1b68e46b4c6cf92957aea5bb1e76d7fd494bcdecaf07d32841ef04f907e332ffb4cca0746b2aa9559709e5e +C = 696fa40c7ea0fe4ce58e05aaee8ad54f71ad7995de3f238cbdaeb8992794cc4f07363774e645b5c0e329be470d5fdf1510447a33fa34b5ec42d2f7d3527f1b80e8d7dcd071d6995dae4e7f2708bc48c3a456474f469610d324e707f8edbf95fe0e1880dfaa01d545ca78be7958d786a4a230ed7c632cfe1eb27e5c04589bf1fe407f43ec477c0aa2229d5cd9a407063b3cc4b09db15e4c08ce764e3481a3151cdf5841456cefcff5976b62959fc283db7e5997d2874ed4acb51fd8aa4c5582806199ca877e7285fa9d28d4e340c85aed5aa44292f57ef33e564c32700b346ea33b7f2459122964dc351fa958f3057c9ccaad6b61d46d71c7edcca10c7789b30f59660ff6e0f6b19b5eda52484734bea4613a2d3be38ed251405e5ff58fd3c4d3ada42275678581886ac24bc23825f7229fb5fc66f066f5267ae61e610ad2158be28ae11ef650eab61b0014b10026052f95a1f3a46e5bef3f5c2216c611e3f6fd0776daef1831555c1b70ea249930224b9e5ec9d27494f750bb388aa60140bf6746ca59762c4a3ee9aac8b171d4dc263ed0ad59afe4a5bcd4c58efc479a6e79f77d68c09c3324407a61dedfe7899a847b0c36cbf441b7a967a696d203031a01e9bc226150295f27ba6bf19fc92f63f4c0a1d05ab4a0cc3aeae02da3c8f733544db88b27ceaab8e5125cc4ecfe0755edfc138151f0a814054d53bd95703b8c17bd80ccd91aa2b963db COUNT = 80 -K = 74086b95d6c901714343b809eae50b84a91dcf63853ce644 -P = 45980661dc90be8271abff7e392de90af857180324dfe287815042d165b9c83c8579273f5f64f509c12c480d9c11c2c07e3ee91d37573c2038978514cb45aa62434a251d3ed6f72019dd515f7e5e52e353bcee17ecda6a204ecb25c4a4cfcd7960c7d1ad94 -C = 261288308a80c11e37298c1c231c699304df3751f9ce8eb90a4b7c2c5ac215ee97a2152a5a4090c34480828df567a2a738671e27d1380e3ffbbd3ff01535a4fc2480169f7e8bdc84a05e71e8e7822a28f98cfd8ee81e75e6138c864a383ae4fe3b97c58d4b87fb633b56fea86263b3ae +K = c12a0c706cc9b9ec283a6922820d64b38177a747b3414a34 +P = 16fa2c265ea34c0f677a8fe2ca60a8df90b04e5e1fe1d32c04b8c91108b21835c4a4844c033e759179478822288ee559f6eb5efc8fcfc0fde3e79f7010c666697dd2ba2e9f1ffb4b70926faf45ecd409a8c29ef195d3e0f71abf9bfac58dd20add295e1732b64bd96499320770c845edfd015a29824aa525fb2caa3011b5cccf0b1ceec103ab6afd184639291e83d16cb9241d10d0e88ec306cac218403bbc6ea25fe4c55db360b5aa3affc1e3140bc07656d81680d3ac455f7608c6f521bebd9a52c6d80e4e0449333b9840fbda18862f78eb66bf44724d6906ba2adcdeff23c27a3f754fa259574887285db8fb40cc5f1c16a777e82450469c73de6b2fd19d4aa35fde3a489907b0a77a98d034506284cab458ec2d258326f0081863dbf1c7739cfe7bc70f073d3ca3c20427870969e224b34983bea5de6dbd9b36f88730aa6d6640ee1e6ba33b6671c547930f3cbb56b1d044887f646b72000977776ed2d74afdd5af99ae9df268f2caa16a7445d95634033f44bb53a4cf8cf25c98d7544bdce3c8d0d0fc0b0bf516ea8b7964e9fa781d8accab765fccc229f6c8ee0cadb7f979f7ac58c37d0b85b47c9af2fcd115eda270d88291bb15fbf3e2f395e7b15d48e8c9cbde5df799142173f7e67e12c71c98285d5677bad2dcfc28eb44416c04b4d9e9af32fd1d873b86e49f27c85893cbb17d4f84826b88a09606f7e2c7e338 +C = 7d5af6f5f716c5731c3bcd433946a3cfa458bee57d7b80d9e46067e594b0920c72499f96e414ae8d3b996ee52dd7d58729b245995644b1054fe87403c792d7d5829fb6e917c9f6b7f79054bcf5b1d93ee1ce847ff81e0c6ee84eaf6f6cb5a470962ede0750c085576373eacbeb30b85e9c5f38d095b029d3c15a5df5c3483824e7ee2cd5c26496978a27a8f19dbb21b616ab66b2e786b465026bf6ee925a042078b6c1e1536e4f428377ef08f6047951336e5b798498f1f06a6b9ca306d6373cb54a733cedec9c19cab8fa518f8a1d889b6b56155ec99a7808f4f89e268f37ae4329a80cbd244ccd1d68d2100e102e005cae6e605c1260d2e1b7ebbe39371ae097adaec6ecda8f3376f3d8ccbaca5dd11c267829091cf5836f44ab00cd7320a262ee80f883785bbdf5c6cd6e67eb1c7fab52ad34c927ec67737be048fa55fa5ae42b2f441792d6735b338fc172c313f672ca0eeec1970f2182ef0b90f4884dfdad514451f37b28700050f07d99432c97d48042f4e8adc82669e5f047fa334ce863baf91b521f78486b1a7ef756d19e8945abdaa7a7cd03fc4c7f29ec77ca6c602dd1a84780188933d4c1e169ca83313cb034df0361639b3c1fec71a72672323f94b23be78f7f16a99002ba005e6f5e5d700d9127329a43b3cb4d4a589e2aab67bd28b7d0c7afeef7f7d40f8331da0e6ac66b8e3dd9d886203ad69c0588124c4a2510d493bdbf2e69 COUNT = 81 -K = 596c3e4adad89d7d69f8514081007801319fc5c50111cccc -P = 22c9980dccb2712e3462ff80d5bb34e816d265ddb930cdf71b04942fe7a36aebb1c4571db41fb7536f5d364e6bc4de70abd99e628f3c6a1ee5bbc45171ea3f1790c78c5cfccb249f8822e2742ba04704295ad94662120e27660418765859de8208144ba48b -C = 558b7af5dde8d140973df581599cc4627a1d0f5cac5fd7b50d30bda6f89f7015cf4ed7f1da9621bbf21460e7f487bf6d3c64b7503b394dcaead62173a23d404b217e1444822f668ea613e91beaeb13ff2b6cc63d76654d0cbafab9a59bfaa7e203f63b2460d0be37e4fd4c37f769dfdd +K = 87ab3f02c4bf9a68f4303efdf55838467f40d53fbaefa98c +P = a82b291ebe75eeac5d24dd78b0e8d45ce5ad99590102d129c422f53f8f5c568b9a77b90e930659d54635ad0a16ffcd432af4aa125242dae9f7af9e656936742a43d7e6d5e418a9b0ac97ba154f937ca13e8c0514735b2211cc2ce43294e0c5274307eeb33b0779806125f84cd9e1862bdeb49feebd6528a42caa3d7fba3791e6814661c41c088f0144eb11b209246ccab7d888d2be117926b0bc6cc65c4fba46681c2abf9a831d3b1d845418bad1244806c02e5e6fa8ccd36a04034a65c058d6b1781c4f237b3f51864fe90971c2d7437cd6344c784f1015d8599c33a1f0f762fe15ac7a86ebe3b3b9d841037def238ef07cafe702f810aa40189e4a852714a1d95551fef00f9c1c444eb90134a24bf3748a9ce6f88199d49ea5c23134f130618d7929fc8853c3dd9668ecb45924ef654e28d7afbd7531e3eabfab40e01966cda085ad41f1508267ceef2834334b87914c190850d76fed48423d03f147d9508dc1d77823266381a3f2b59d5a7164e774a53797ee83260366909bc5a1c4aee7aae6ef3c351363dd218585390064a48fb534bfedf4d3f2582315f5a85a6fa373e9d5acc2cf28113fd97c9a7970df275dde9582bc35ce76984602bf8aadf2fb68598307167c88925dae67f17e3c35e4b5d5dcb6d4b6b9572b0a68084f8cd5036ec9ace3451c2f013407d8ed8f5e83b26d442de5bc849943c91aef5450d389472521 +C = 4617f0376865d9142dd3cb55388f06f135b3fddddc14e772e27c8b558b9ef49e6a45d9a3945c9f269a3c8b437d72ddfa7a1dd10a7892f1e232aa2112939a35a79a214d8a17d1b3fadeb56c868850161fff018198eb10e165695ddf682c8e6cceabb098488602f13f3fed29c6e5a39402b61bc14ee695d7e1b870b75609ab99a8666942bc40a1d5b22be27b8009dbac62547ab98329ae901c91175038fecc8dabe7bf44507ac45aaa3b227491e0c189e537f2e8e469aa3c920b7b7b69ddda8e61978d7f2dcb842d39e95760161a05961afa7b6f764e76485544f733d47059d280567d15def5f5a091df7497b679b51dad8acb3769a704bf5b1f804d66695dc4977fbd0bbb2869cd012aeedc71cea89f5acaf5211e22f3e6d4c535290caa5b1fb8c398484e85fd6aeec596d42f403d30d4e827817ffcc4df6ffba65718fb93b3b7907baf0201b7989ac16a66262028c0dc31f9f026085bb5aa9af72f1ed9b4f9e18d3ad4a8f4528512794bf53e8cdb4f91cc32c925aefc7e5cfddb585cc99c9302096b1ed87dbd042f209295bced0870107a36f6e4f0ab2d8230f355ad95dc84d2e206e6a7b6a78f8f965e548bfdd5892bbc159f29f8c47dd99ef288ce93915528070c483481060f38fa81352fc5349636c5881ea0d0a35c92407181e9c1ee6c8794a3b83235480463460c9c4fd8ed078be0d29b8865a51e5d232c4452fd20223cf7a4c41181f98ba2 COUNT = 82 -K = 46057b0e1c03729fa9f8fc6f7ebd978f66edc041c03c3158 -P = 03c180d452958f8a798d0cf16bf1ae2c30540bfcbf9b4952442e7e8bd53bbf3051f6e654e5dc449c5153cff082c46136a801bc97128c127f359e2e51681f8db4fae7fe9ab98f68c653e58e9adc8ac0c6cb4e0611202db15cdcd8b4e59a156a643170c89579 -C = 3f591f95af30a0bd75adf2fbbcb4de3b936b8e39f3c5f8d3a505b37bb3f35d9dc1fc4b1b8dd055c94d5d7cfd2d1b9573387d5b6f66198a067e2642f8333c8fda753640e82d609883615a8b5f328910aa1b21d7528858e5e69ce4a827aadc2b96ae0aa6a274d5b547babb4e6c128efae5 +K = 1b0100a0945eb00f0b1e5c0b9df62e0a01147519b0d4a7e8 +P = ab2cb28d3d154830f9e627dc0f05f5dbba845381d8086cbbb7671d77cc1173da4c23af1d6f5a17a60cf133e22afba791c383aefd9995ba5bfe754616f94a52263e92b824941a03e11356613de50c16931fc2e0db4b64c98a0a0fe76e5a91392c3947a4c176c9104671acd0a2c2384933f07f08ba3518ad844e74e464ac30ac8228b8f69bcf30f99e85856c57bef47744eff759c44df2e9e9a286257ad6cdf4497b9837c0ab787f0013f26a948db2ffc48227a78ee62e44eb2bf2fd19ccfd93a8b06ccc69be814a107390f540eab8354341ba72130b67bf5ae2236862cbf652ca96ac54b2e53f34923fd324a443432841eeac45bf3819723cfcab14e578ca768783c48bc25f77b612b02b8bced1ebcf32d58b0130d6c4418cf66254af946fd7aa1a7dbe8d1c22b645d4566b7a971b9a319adf6791600e24570f4e4ca0ab002617b70efa94b9a4077a3c057277641b4eef793e60c8a792debbc8e05ddbd3ff21609c354cdaad4d29ab4384c5e1c2bd842fe8d0e0b7d2383dc1369412f72c8cac61a6df59623fb1343e3fb4d09b7233dd535c1e97d4daab9069d961b267a67f63982ecc101e572195136bbc95451848e7375132063310cb584d2d6c070d5d88a2607e87067735151d1f36815969d55732a3b64cd5adff46d50c17a5a18a160045e6ee7758e6d709489da9647b653e8b3b58a1a6f45affe0701edd44f55071b9504e +C = cb691c733811131050cc6262c33f3b0c3d85cf43a50a87631b6ab64e22ebf719ebe5944260879f71c22ae2f8d18945f2e4cc0307d4083d26791e617e50d84cdb72c3c85fb8d88e84c21c62b13f4523c9afa5d825bf53d9ce19c5279b406c3388330a473e27bd4e6b3d3a4b3f0bbd37394d0e2e0bae95fafef67dbbc5c10ca9863527543a495d32e2e022806586d7ed786501c0364f2d4808b516e50a9527007cd9355675953e64100d959147072f8d34553653cab9116cf6632fe6949155288fd8ee7cf417b7b131bfca8b213f2f45c4a2ee811bab4348d12f1010f6d01d7dca77722a518ae5f045bbd4574d7843bc21dceb1f383ef4419406987b2dfde973b0f4ede2fc48b1ed9627b0fefcd96fd277b0ea7703feffda6ff702056f9a233183d21d213ee8be4b14af2879cb12f5a3aef2f0776bffbc765221f6b7a9affbaba6c45d4a831574c818c6040b511786b1b0a2c63a6803cdead7dd038da0a083f4b555523bb74c052153d554658b06cbf612d01b9c870fbd228cac1d0396774f5c884056f46fda7870e49a635d602bc18af7e8ec3fca0e3ed042d40fa1ea5c5b2da1875ddaa64a184778883c5af83a55880478842aa091ceacb9f590e9e9b8a75e0eb928df1591b5b10d5586c1ac9b4eb6db402c21a3e3e6e2b306bdbc8e0a5ddb51aa23b39894579147fc816a5f718b5129dd9de2b374d4decacce546be36eb4db2b07c49639a5a4b43 COUNT = 83 -K = 39eea73c1e06744db47dcbe2f8d3b70c41e68416c54d9a37 -P = 3cd7a55a441c26b8ec22b7cc07db8d71484a627a3200e9cd1fd71d82235e3d6880ee53fe6d614c69491187c6bba8512e1caff715c40137d0384f50accbc24d5f4011cb3fbe424fd8f3393ead9193b7c621f3837b8f714bdbba49c1df0682e7f6ee74ee04d1 -C = cb62cbdae683c823b189dc903e68ca874ae10a6c879adf45496c23ef5b343ee16217ae2d7e6697c12ea09f822bf01b8cabf5fbbb77e08a928eea9f08da928b5edf170559159d3030a40273ea85ab9023ad7189d74758596a3872e96f956f74ffdc178a9cbf5d565d8e6da2df23598c49 +K = d8e7c7e3a9f72dbf6eaa83dcc612220968b299561750a171 +P = 52e34d6a7432c33bb883b32a3ec19e1d6844850ef0124c4f0e8692aeb06ee47104557aedd4df2903f8ce5c050525af43307be8dd0fc55e3d0e6de27c1600e93baca46f64ec0214d3487c5ed51444942983d7a82b84fef3d06dbe325fd78d908180db1978a797f912c01a2e52dba964a89d15c88ca7869f759ae1fb68079e4430bea0ac99bf26258f38494d1893380db650a00b849f6da14649788093fe3e9b45f28db2430eb9e40fbccd020c8672509aabf876c9ef5a3e0dc10e8d9d603344b0ddd1a15adcfb51c4207cd3dcc1a1521377c9316079238da5906349620308acc9a8f14ec932827e6737863c2d05622d4eddd1e8a30bc443619c049af6f631a13063ae37376e494a096cffe772832fd7e819348c9557311eda54f9af5ea6e051f350eb4c70ea3a2b4a22f7e66c558f4e9341830b70ef003a9aa22b0669b5c87686efd9d1191ecef1b81b00b845243b41000a8cca0767117f6975dadb97155211175604d6ff70d4ef92eef444aa36ba2504340cddea37519e00528aff628aa7b74b676b1d0e336dc840bafcdc32645acd6ea9ae00d9904c400050c7050696766b737ca4a004156ae26bb53dac8201ec0326cdc817391c6e13d672fad8dabd8c01e5441070c4ac1e9f4e5b9433dcfd08389fd54fb79a5674b2e47fa44ccdba4964e4c10eeb0ce8037a8fd35abb7b657682999140d71c5d1b72c3b2ee127dc02f9884 +C = 01d0e8a806a67525873f2eba2b30c4855be94764780cbe5c6d455d53b09439217bb1652f47aece40c071972e0b015ef05ee24cdda31eaf6351491be27ffa088309d7d676a640c2a095df280b20d1b9fc2b3c9e318c01c3344b6591e1fc6859ff822fe75c3164451045c67a70e44f8cee119be04dd3ece2e9a2d534caa310fd4046ac46db4cfad680b8aa442955af0fc902649ecf7605c037f2c1e5ce8abbebfdcb3ad1cb58b2019c0bef89836c5e449e4c2ee7c672f914e1b6482694d1756fd173ef74a8977225faff162ddf140cdfc721cb3401f030a342ccfc30246d0284f3499c329e5f1d4b4f2d4dcdc840f4e6880e66cb4aa7c278f0040ecdff7f04e5717a04716b6aadd32797cbf42b9e71a828bb9ddf82e3de9e09330e37dcdfeda9651f8a2c9b7def8c39534fc4344eeb25b951813dec440568f7014402c8e17acdf268d26544a680ec2fface98f2e93e224a8f3e848808dc70c3137eaad665f0b69468d43ca322e61602a98a357ed588218809370d528ee2575a261e133b4809fca10587890629cb5fcb85eb485785d81215a5941bbe9dd835e3872266505bb35abb292bf754bcc625c2a81c2de2d83a7cd2ec0d78565cd629afca6d871d8c1a733207e710a3693f9034a94e88819f3473b5ea24f744ccafd8c03faf984aed5d09514ae388dffe477955939e7073aa4ee9ef7b97995e5496288c25d18d5fa58979c7c250758c24a43803 COUNT = 84 -K = f165c99fe0ad7c82130053d5cf6ab6f430d5cdd4165fed7e -P = ebc22ebbe2a55d4cfac4c9052085e4a32a3a4a417f8ca65ec713632e81c470c8830b12172a401b2cb5fd09223c2c0daaa52039e811f1493a1a3b38b3ddf9c10b4a724ce968610de7783b31d542004b2c206c008850641e7549913e424dbbe429d4cc50199d -C = f70816cdab6edf5709b05b1050f87eaf0c581f1854b59ca7376012550ee082ebd25f6b46b83a8ad062409d42d91d5bbd645ccf8173f8e833cd4f5147bcae5672b0802aaac8512df316f8ffd6158e45cfa3e1ae5a89cd2148c1890af3878d4e441aca2f8a129fe750654144c74bb0fc7f +K = 6cc3bb8daa7c025795cc7effbbc5b8ff96edc87e4bd12481 +P = b302ca6d2fb33f62b39ef97c183352fa71c01465da8e1c6f06583089fa6bfaf1542ac57529a7a49feb913502abcfafbf9764bcef2e86a5a346795fb529e4f62d1dbc52eb80fcddb5171934e96596b2af0434fabe284c184920bee774a02d052c601545597b86872b0f2e92c7d3c726a6c0a61abe27af5ea95e8565444a79c4717afdf870e67386c10cba3d2c0cccfd8bae68372414fb3227eef19a9b4588ed21cde556e0f37156a357173609e28720255699b89b063c00360c1506b13f1392e839cd122f8f834d808f4efbaf3448b22964a23eced4ba560ffcc039a30cb6bae45fcd21af5003f9b0c14630f8d379e96f7276d8ab7894518bed71caf11c114d3abcea1069eb027a6f47fd9b0e4f0faac53716bf135320ef959b7c3f11882383c0c81d39668f4d8d75253c20e7ad9c177a969b08cbdfe774294c1822e635492280440c5840441072684204fb864810b4e9ac5dc569324328ca0426c5420271adce389aec1e8ceee466b75174cdcdce302c08f6ef638ccd4411b39920fe23bfb0cb142939f1be0f4db267864d1e2b54ccc241ac67dc13f99bc41d4509247b089c1fb562f9d8cbd53becc13d59d3f885e3692e6cde40ae21c373e849877810f97811ff15c3398a7ac6c9571099590d9548b08a17d8d2bbdb74d051229058661f02865298870b2b6eb275064e80c902ac39d44213e7a473f68d19d9ff89af353d9060 +C = f991840d49caea4956f3bfea7534320a3ea05a86a3544c273860df69bbd2bc9b46da8130dd8b19b7dd5807419866ce57f0f755a9599366a581505757463c1cc339025b96a249a608c2c50e73920da400983360052846182838cd15dbf4c1ad6c67883b177545c1f6aacc6e5708bf5576e76aac9645f7b1f272e2dddde48056305238159491060f449c94203d3fdedeb2b504d17f38b9a638313557b3c77f4a059b835ef251cf630c6eb33cf1fe955f558aefbe1f1c000538b987e0253c18f846a69764dfafa02ade5e1ee56a3bdc4c80b5f622908edee3f4ea844c54f1179c46c4bf039f060e6f968424a44b344adab7183bc38a2d3917631a965115181a76f4d615662a13bcb7e83bb3aa20233dcfdfcb82114cbb3e661da32ae96a30aa9fd947897e3d567c490354500876ae8d428e01e7328362fbc55dac5559eb3c22d61a7f3875c26aecbfb3e7199841e09f8c6c894085fb2d6cbbed67cad5a3473e8658165008e375d82f87dfc24b38ff5136bdd879127d3083269da3fc5a2d9c0f16199124ddcdbf483b33a6068c76e5ee7da89f5f868e1b1ed9f3cbe6655a92fa09787969775404095841960dfc02a37f24958d52bcbb2941660ca08022163c9544572bc2022258f0b5535eeb3a580e18049614c5705f930c1d04804d7e851658d41cb17eab5103f8e44cc2ab782d03bf6e550c9ed695041115d3f4dcdb3169697361448936a7bbdb9157 COUNT = 85 -K = f71fa2cba7ba23bdd8fa0695b96d3c85e126c6af8f6c1a09 -P = 87d75c5b50ecb20c7ee4f221aed24576ae14a52e2aa36b00168a340866a2320542e0aef110a5500328ce9ca4843b25553e81b848763695d751f9aeb4e9e1c44c06d2ac3012a00a5f4a920dda7a1db1820f11a3e5dd4810cdff521184e3484cd9d5e5c35549 -C = 515af3b2b37be887e4292af3229b8ebaf09c03b7161ca1327da370581dbc7039ed5478fe5f67a10253b0f049b037edcb7ccc1b69188101b468833f6f6942d1abde5da643827b0bdcc05cc87906f80b8627ea260c914956f48afeac8abf63628d75fb6f5bc2dafe98cff1fc4b8d271925 +K = a6e3c3c3055b45135f5563b40aca026b38a3228d30302b1b +P = f5258b2e6cd24115974a0e1dffb3560b299f4522a3963060a9c4204e221b4aeee4d663305c023176cf80f5b22ee99afe46b1d855ac158b9b97e43e0c2c2ae382927ba8af13f946cbb1cd8d8c63de23e02e53ce9cd8b2e1de38957149f54a2bf82702fff41a7964e47157a5e20c1df303e643e70d06f7503ad1e435b288cd5990c71838bb51adcc6e1652c65327213cca4c2dbc6c5cf078c860b9279a82398bb2209d6e5f2218357e084551ba6ed986d4aaa18ee148a8870c877f5349a6e5111311aee55a8883f5d3aa19df3b9fe6132de2badef9d51eee4367f1679a710f11cbbf1f42177525f987c5ab92fc32feb520b6b403cd78a39f4f0e1b0b2f4c6067bb96bc1fe3f7faecb013e7baf8661fa360c1756781aa4071cd5512906dd8e07cf8fab66c46dc062f10a3faa2bc10d9277bd785d0bef1f20cf13aa95c5578fdaf5b7d3ce1a3c9cfcd35e1f63e243b449d4a48e3287545e9cfa84a35027b9e5811285b76aff5689d25b0bfdaa29ae940acd563ad103851118772efab38fe01ae8002235ac5794681996b88be054dd264788576b41d76082c9c0b4b55a6ad1e6f214979bb6497437dc79bccdb7b0350c61002c191f87fc9e25b4285ded474b93e6f8248df14ff5643f4105587f9b96678c0c12f93cc139e74db0ffd1f78566574ba147e583ac1358d6f63ceace420a6beeb7a6517261a0011b67c6cc256963b7a17e8 +C = 589a3064e8bc8bb315746b3e06056fbab217ebfe83e94a589aae50f85bf5becad2a8e74bcebf5f781aa991aebd57ddf0dc9b73212e3511b8482664b95191c56c71cb284e741d78fb5f3911ecdfa18bded7b1c92821ec8b0febf5283459f5c950c09537e955b067b6e3a03fb7d0668544d301ac888202d3bd4e0cf2c81de97b9fdd7b242a73ea75314e03e1bb5eb7bc5df15ba5f0a5c85eb98a482c1c4517845f749fff8da5cf5f951f8c111053a9e261051b099a8ce56b5ba66425bd4509f62279a6c687433859ab9fd69ce22b9be2a31d145c3640ab04dbd524592f7d505a5fe55efab92789cff2020f1cb1fe07b2eb9f6271d4f0f014993629bc362d5bd235b3ddbf038c0ec2ba768a5149539c20b4ad03ffb9fc484f3d0acf426490e2f842706170fd4a1c4084bc9eb1230bb001ff8a54687f509d7cfee587ccc6afaa8556fb2d2608e75e2ea8b889db7ee25cccc54f9ec5d5155b1407ff8d69294c609477728fa46251abd041db6c8ef4717d63c87929d9e1f27ac1f059b1ae89285e07595a4b8d7c249c650625d34b07134343195e05b24128124b352bb9449a89dd5c4cec08ad9cb3858fb611bf4b4c637a734776b99dcfe81cba57b15ebf0ed111d9430a0dfdfd74cb0dc71edcaec8f9a26c51ab46e617cd2189dd21096ad078b0d48fdeed77f0900b64bf09098ad2cbb0bfc74fd8a390456b178cbada3974dec2fefa1aeec003ae623b96 COUNT = 86 -K = f837859dbdf4cad27e465af95a7f8bb17cdbb138cf2263a5 -P = 2892f43b8691947f2e479f312bc9486fd52df8fba06742417ac661ca1cdcaa81bddd00da31de78e4587ba2c15d86e012e669583f6e3cadca61651c762cb626ba3a7129fe61c9d20aff6646a25ea1d7b71f2cdabbd2d7cbf048d52d94544daf9488f14dfaed -C = 37deef7a5d5c1df22c509164bb3425258170e9101d8cbd41ac9e9a8c688c530b98b6851282d0b5c48930135ef53250dfb77efb79ddea173a2f9e1026c963c3aede065921e2183e9b2784cc5ccb70935ecd2911700b204322d4fbbb02f2c4e1eeccbf9fe2c1b8d1fb1054b5b339309138 +K = b56501f64fb8ba83a986bb47d4e36d8e4f36db55a4bcf7c5 +P = f14427663ffeee98a3b4ade46ee2c5022fb9591b1ff8cb2f9b590073acd1d39c305287723c0fafc407d4538a68905446cf4690de8c95083fe25759e4a4271740abc46cfd173ffd427f40342f11c32aed9914bc8b29cf4e8ef4faa199a7b055e630bf4fa344621213c06917f73ae3715b8465a99c33bda74750786f571cb43243a496ddba9db4708f860c99ddf2fb3b8873a88be46c4f5e49ddd048e428112e6f5ffc1e62752b308fc78cda9955027410f0d8ebc2c4e6c7ff4a596356ec6cee32acdf041d4550074669bf0ae0157d7726c45b59f301ea031ffd5f4fce59c6c022c5f7de5c04748a1ddd2e2a16fb6879e4035c5a106ae77a008dd8625ea461de2b4b4f36c4783c16a96162bb8be00f8b8898933ea2be2874612153677deacab5cabd080390b9242357b765a7789bee2c7026ebe9adef0050594f467b93d71a61f36491379e6c2c6471fd5c7a39dcb1a435e42911c118f1e53b2a1d429b1bcd77adbe4f201c11a36fdd26b4bfbf7bd4f93e3430a81a1965909adc142543c4cea18ffee90dffbf5d4f9b6685392014066085a310a974db09f4017503f33e4078ed7b4685fd642e3cc315aca3da64750f89803047270c109753afafb738ce032fd75355fb93edc9c1b7830e20d322282f06be1214481f464ede4989c17d330cc6ecce0eba7373676999fbd594f04e6332b45edb183dabaed1344fd9249fabc41dc2a0 +C = d33cdf1c6566912310f61622c2a5fe87178458e7c00d7f1fedc3bc1eff4274361656ede2188477a44acaf66bb08ddaf3e55574e6374579fd8a0c723b74bb3aa6eff7a51a5e35467788d7d7295b93a083a3ab4b222d2d00307fb1d8c0a5420db40edc8abefd61b7fd8b335109579b30cebe80f1eca32fca9ee39f5cc8f0b5224803e2081dcd1d9e3b432f683e47b9f5760888db3ffd0d3d28c5c59e4bd38da25b07fe11075c6553faca5d348767a54a387fc2e3a07900f886c361da9de62bca933ff29acfd33a1d6f2b8b5a365308ce5774918cf0448c25f5d64b696517d1fcbb56ee86d2d0e6962f8c6af95a70c6bfc6c3ac1f182ec0b9e37e1c19765722516ef4af885463872e1f9ce8ced16b6f8a6f0498320528a890c4f6cc2f1ba2ff74df501c620f0ca379e8f6dbedcba38906be0bfc360c22e9005c27344fe7b41799ce2ea7694dfd0ec5dd2169f4013f553630f412ab894b87b9eacdc55891660b7cd9e3c70d5e1921714650932a578c1f66f0f235093d8075459c91aa6c39858dcfd2fe3d81e796a6422d36d1e991265fba3e165c186a3f1380ec7014d50bc952ac88cae9839326ff3f6b6af7c4becccd4faf78848b3d4ff65e9f132b21dd23f73f6c07353d7a523f0fa289f981799234df8774036d06872b8acaf0bfdf666cd3f4e5688aad127c79868160ad57c1c6e7d28110585d064e3865638e220f40f6a92e723fd5df0b9fa15848 COUNT = 87 -K = 8b54faf38264a2250cbf9ecb1e04af8c508d5fac1ca7d7ef -P = 8a008714191f1fafaa324a365712a6bf1030dffe2dab2aaa468d516b1ad2e1644706fe09c29462cc2dfd2ba38fd0053fe75ade9595c6110215ed1039213dc657c7ce7baceaec6917a8061e512ff5f747119d4355764243531ea2da1594bd99675c24d2d391 -C = 1055df6a945827a43c801da75535248810bc8226daa6dd629f0a66207723cc96abecea2dacadcfecad7635a68f6698628c012c7807999077fa641c69bf2316388e0e405a60a4929988d500d8a6756384619aad539d837202832b015e2d2c7a8a62be8d7dc4d96308b81ba36e815f458c +K = 67b24543d6705f07d8685ee56029d2bee48c5ce53b8ad6ef +P = 6cf07114fd137d81ba0d4a284e15045c67d97994c137f67bc19a19a55763d9aeea932ae6df77c06d7f7828aef1646e616414e206eae9e8f6a781f8445e42bb77e60eb41face894b7f41b8657bd1bd0788192dbc2b7eac2700bfe054046e8e355c23d68bf4fd007601aa700c5a266c1ba24d0ba833e4dc1a9c204a2371de60dfd6f0049cac2d0a58dbe72211964199e2319599abee6fb0b52070e9d063a4514ad058ab2006a90facad71885b15978539aabf38bb4cdbc989af4bdb068d46e5ccb19ef3c1bcffc1d61d992030a190ee2ba0f8d30770d32d753328eed750f9dfef6c2615c52f3690227642ef51644a45e4d0c7cde4e6e6e81b2b861bfcaf8833e95802e62474f35afe7cfc83642b3acfeacaddd082c49b78eb6adb95c79fd00810e23c7c9e1e460595afd42f81cd00a1a39cf94fd5d1bf24418fedecd75201061edb08f1a8c56861c69944d5d67d4a60bfae696546a26069a6a06743ee1908e54961e4b883e478fad964d7cdfdbbca6bd220379c84d0e913f7846193c9bd899ecfa7abd8f28c7d533a63214debabcec34df9881d7f0d6fbd7a20ab84b4b74cab466c302ad251c5239438642be7ade86ad0dc493e97723c1cbbdb7fcf0ae10d6a8105c6c65d673e99811887eafde7f7c742cd0dc4ceb6921c58222bf1ab393b4998bb1649092ec214f909b3be654b4c8fd197102276b30f482efc7328a05dd5fa1bf +C = e55430826e01bcc728904be9225542f8b4f64d9c31d730ccd20c3921f9c72d3d4ac56e051abaf388f168b877929503eaa446c461e32c0408bc6715ee6bcabee3c122d2df2ce6b99c3395660dcd0522ae9c7614a7ec874100987724b894de292d8fc466e62bec3cf3b39ff0f5fc9736f5df4e534cf45fe63d028b11515653cdb21c1e63c92e3a721b7438f1f033774ed439dcbb9f680ec99a6690e4767fc0aee111a683be166cb0ec7f9ff7d83fc9135124d41f9b6c747586a43eaaa5c8a7b055135a27238a320396727daebaf35c9e594efcab57b0e98a91b9c8e63e49366175ef89484a9fdb589be100e8f7abf50db1f690241efb2cd126f44387f0047c67f83e32bd097b65f8fc8e95aec9a52d51160bc8ce1100fd7b601bf63806ef20b4ad3f49e2ca25169cb8349d9b09db209537afdc229d072bba47cf1a3f36c2170c390f89d458f05ff9f4e4d76c4d63736a994e98bea737c6474ab3a36b87316874060c0b1f315ee9465839b01964f86d96faf2b0362646d4d34b6bf02b0d6ef58efb720ee1519a3ec564379133d4c9832d18c848f98bbaa69ca04b78515a8d60223f3cfd8fe57be83deccc23290c7ae99ef3c0d55ec37daaedb0d99562ef9bcfd6a694288763471fccafa0b9ce4e0c6684c9945cb570894feaa6e0d21dcddfb9a683ff467ca31ba716ce7a7f3a5b5ab592b03b0af50b8acc94be8a86e6c22fa60d9bd49ae2ff50209f2d COUNT = 88 -K = 89ca828232092aa5af0bbd9884880c866f5e98f6bf6506dd -P = 6760ac4810f138bce8c22c0b5fd35ac49e8f54c1b737492151a075b8f7c5638ee43fe13fc60dece858c97e221b401b6c0252188058b3bfa19818940396bf2b06ae0e8847c810082ae84be75d377e09f8d6556ef1de129fcb59e5f96a6bbecab0a6f13461d7 -C = 235bf10201864050892c3286780cd71a8cf918d7e18118d20a41d7e2896749b23fa8b5a8ec1dce3b1b735786c72014f43e397a67022dda7fb146a7b4904ec4ea9a4f3f79cdd29e944da8e96d3ef8e3ebd08d2f420145dedbf5fcbd2255a941880339398319036cad8ba160860c2a2ac5 +K = 92b3f694dbf975b4c3dbb517c9c6e03f6adc181f63889793 +P = ba75ba7a2bcd877d31cef3bdfbf23328beb0a4d4cfe9dae6dca1ce34049d9409265200939de29b02b3a942d7af482dc2ab6ffb4de1b5a976e8fb090ed8c680a2fae7f2ba0e2ef70edb7ef631a36d78d4a016ea689e51ef158baa4fe4edc6eef61bd785e64264db29c4afe08e0bbd08ce4952a255d63b848b249391853a084c3814b917fc7a6169b87a5e981d981d2419d2a12873e6d20aebc23fc0b5756d51ceaf51249b7068ac4db3805abf3ee9158331eb152dc69400951d723e1707fcb0e7f53fa6285fcf6869a84afc3e686242ff3c048e155462a852157a004c34dc55b6a0512e41bb81de10f180385099d44ff1a10362055ff0abc3b4e0e10c0114284057c9f21e4e2ef8570f13e81fea3b5cb434a21e38da77654580e8132b1a4fc7bfbd2c769ca4c71f48e859c6da7b96438a4dfd28cc87c66873b398a598f8a9c3f7fe50071db3427e7587068a7c00cf319bc57df216d34cce04c0d7db35b29c3ed8cf17bb323240005515fbe1ea0ec56049d1846fbb4da33c4859af7eb726d792d7c8d7d9d43a70f0a0c6f5cc7af935756bcc0882f7b0e6d4e44bf87a166df08ab5ded67a2089f9a63197dbfcf3194390d55fc972b53ef56f429a8a01dba37082b3f47c926b9b124e1f1c4466f0e02181b5da87fad5899bddb481f4fc32a68738b8e638030d9e0dd196998ba3d9dba5497898f677d8001250769b4ca43b5d2f8024 +C = 8e9f5c464fa257338f40ae0a87e623c398f629545a615d42f9fa7934d2535fe9177f399d47c9922bc90b1e654737fd4ca357017b370a4863909e8ecd413d252091734461429f915b83fdec559b504192c407e8702e798bc0c33b626bb8e8110d7c55d0143814055a35a3f8aae7eebfd85f8aab81c8a0c50c19ceefb66b52ca7981bf9c5d03a164a657bfab56e549c7fb12ea004b9e0efb9c9c514eb14b6d7f03ac100993b082da8450de5d9429d072afe0468412377dba752bdf1c4bdce4f05de0bb1e68c07aa0c7ba6be9cea9197994d363c5f2e294616375e9fb68e284d581043035945832898e0da41aec609de32511d6b2e5d058a9958cfe19d41c4ab3efff270d18593657e3c1d82c4fa685a8599e9fee3de0e694d4d3e1e96d9b63a73dedf5bb48e36aaf8b2e8ae7a191c6ee435924ef2a929d7d95e3ed1c565ab8a958c5e6e8a0097d2ac393e81d465ea9236e93b96571fa64538ec898e8efc6cf6847d0353638f05236ba21f31baac037da866b472453f54c850e39f82f60c70e1bee3d22b54410f7503205182f97fa0ed64e4f42a770952b2fd1ea00b362be4e65ff68f549cc84c823cdaedb2cd4a6e7d0f0eac380c57c6603a4727ad0867ac054d083026185fb4642b267e238cf59f5aff8c21a7dff351225178ef68aafbe962ccd5df1149b8402508c24956ca4bb1bca029f92f873824909983e447e733803459296a3a8c196e9159d COUNT = 89 -K = 8fe394610217ce6c1db6824778990174a6293d49f1f4b79c -P = b4abfa35cdcb8f43bbb37dad26a5271c67b2a3192589b74ef446fe562482c1f92a95fd0272a2ef61b1924f2e470a21443c7718bb3c6254ac8047adbfab84f4eb56586742fb887c0f5222c68ed974b98f4ab7083fd7d2cefbb54dfa828ff27a30ce2b9f417a -C = 7880b24d7a7af28e0045d8588e4982547793fdc6e0b159ce45d9ff5f99212541116c6eedea463d903ec220faa4703dede1b3173978993079e9af3ab939aff604b230b3b7ddfea68a4ae38c6ee0edb1357cec73bb63cf87eb7716e8b2d088a58b39b33ee33fae87c2e19c3bef08686e82 +K = b6453cc89b16e85182b68c92881ac54f77c5db99167c235b +P = 352c6a8ae5daa6e856c970f8625bac0f48301084c883d81a9e98f96197c4674e79a3de142bd68aa0077a9d8141fabccc3673272470dacdca5cbecd5c0ad1b0e8daac08e088561e99c0d4ece77e003a064aa1702c89653b8b2e63213ab3f4b3b73b323b74d199167a3d9ac55fa4efa9719fbd8c305639c846194a5c65a0bf25fe4563cac2c213eb9288837a14869da2de9756d676ece75252f4d3e102dfb627d1e9600989abae3e80064484445c74dcba8e7c99bccbaea8286a50b90cb123845ff21af0abfea32331ca5541bac290e2d936e525cb3925083eb0073f119c4d7b3b9667a2f25bef3ae66648a575eaf3517a2d25d1b353cd5d3b18e8f478a0ef7af306485fedceb08e9ee0a959b343f3057975119cbbceacac55fca09fb59d2e8c7c07594bf976dc8940a82026007ae4a694da2e46abf396dcf0ab785c5771750e78e79848c38386b80d29a570cb2f4e94dd74327634b2649c787b4a7abbe491dc0e36525a07e0cf0deec8bb67129054f4d9b8c28203442c1913b245ec33eef83d3d163bd985a447cf14e65e4654e3a7c18d721d1a36c56e77a32e4c641b4f86bab3ac5fcace347491ce9c83df184bbfadf6caaf19b8d332dad908f1cb6212ef7b0b0d2d606253659fac2f0b88b4a7c734d912efbbc000e43b977f979327dfa5f0c45d96db13af0ddb30414a17e03ce7d1fc17d6540b556702bc897e442adbc86215 +C = cc00520191ff0f89501cff3bb6fa4ce7c785738e53e0a35019d3575d2cd698d8c4be408e6668331364443aabda138b7c5a529a1e8d098551bca73ffbc6d4f54c871cb3a38b0eae308be37d2ab593508ef9fa2a320a3f9b64c871a962d42ae2066a7d26a7f9811caf37bf27ab614912deb2a17454f549f3e52c685bd18766950530a95f3bdeb3095e4b938d052211daa9d1033bc5982df96e24ac82594eaa877ab6f905ccbc9a185a98a6a779449f62898982a10c29b7aaedc165558a584a3de98f1a847dec5afbc789c614fcc33a2be410617a653d1e20af1d3f191e2d71c64dd7cefad35d5956a3b984106409bde9bf4db76e6babd00b43a25fd5f3107370e7e2654a30a21262fae5eddccc88e7a4d078040db67b65fa82bcb26fea6146f73380b3115c71ed5dd5b2e4225bede7786a7737ff62c29e38d99ea59bfc5392289f70ab8995e5d415ab524a768be7c3a4c259303f8087fac305b60aab090117d33b48f48fb50a20427ce9d5d4b626b44c385b912e0dadea5dd3a68fd0a4e2573a91c0d7b6fbb724e8d8387f3bcd0078a88d0a9b061793253b9d01616b9e5293b4641917cbf7075ff16c121146199decc93c645afc4e735ecf60971c2dc3f8ae5c38615d5e17343ad7c513bcb181a27d5b1e41053c6562549c43f8b5839a9ef915a6b53344a81f7a9a878441cb8c0ab72a90035f8c20a99e5a15b1e76aecb11a006d95e01aaf1e5864f1 COUNT = 90 -K = 33ab11b96a857e06ce455231c056edaff77c35f142851b08 -P = 5104e1dc600e0d06d64d2e042fced40165c689b4f864323fe7cb3fca1c0ee5d176f2b1b6f88533bcd6fb3165837db7fc3cd5548d7e1e48cc4258952f6d21f1707319e003463a5c01cdf2dd1ac4c1a5a5e478649e67291cc572b232401f93850426ca66e34d -C = cec624309c5948cb3953fc2f0334b37b03188129dd8adde14ac00ee5a4579ac4cbb69bd7eff4a22d0ae0a8626d7bcba4c1a2b36d764fd2bdfeedb2d1ee202f204847393990664609189b5e02d9fdfbcbd1a5222a941e75fdb0f94f153930a1a3a675e585b440bc1e0bb92d19e726c89e +K = 2dd7ebcfc986392cfeefba53d3727733b43d01296e03673f +P = ad6fea7876d8df03d98352181b250cb964eb500719b7914d1c1296a9791b3289d413c4d12d18af143b8befd866ddb610bd08bdcf58c3a1eb86c0ec0ccaef44dc6a7d17016e8ba34046e9d926055f0c5c8126d6fc814ee157e5d1fce3721eff1e24a460a443955662007e63549060ba378c9b627bc0fe2e3f17279ea0f031ba41f135388e020716c526bca31fbec0fea166a80c0118e4887bf915a63c06e50bf10c0ceb86ec1a0185216ebf62c07f65afedcd281ccfe00d1781574f40ad8ba4f14f5dd142c8f23b5bb15f19b25fc32e9631bb0bbf6d0d9dd028a2232f4fd2b3b11b3bdbef7b9589adcbdf6a819b485311ec1e39e5824458659a4dba8c609bb05f707e3c76bd27ad293bc9f79ffefbb0c59fd44d6844f71cd063e455c52a671cfe3a8ec748c739d8a578a81e017efc9646154649b5f1c8434a8bb3c2ca94ba41341ab1cddb0a0058e12cfd68095894dd8a0d4b2f32d8fe8d1a03cb3ea33849f7f29879f6ffc9c21fd10ce0409107eb55f839f4d532879da99a3b0d698324d5de244eb1d5547dcf93a35dbf30aa8c5d9d29e5e1f7da6cb7558bd40d2028e9b68bcb52e531f5e52ecd2959dbeacbff7273c9f7c4909f632f6acb7d0d68f884afbc1d5a170f5c2c5aa8b03a3dc95672b5872a69030ea7930653e29f224db19aded193d3218238cee9a77b6697aa71a566077e975f144e2736b2e14abc8e10260173fe +C = 3dce97e743d710e60063de13763e80c1a141c77468e178e03e8763667e579336efed2dcc25b6c77d6d3ce5c8610feeaed968f198f3d47a17f3a09656a9cb482be99a239b9aaf0f681ea96d23ee0ee745cecf167839d3b70b9001d721aee93532594315ba5e162c87e952256451573b99f57798af355363499873b02969bc072c062b9e69fbe3df9945ff0cbad3436a3fcbe6ad73fd5cdde56c24f75e3ccdddde0d8544e465dcf816e36a3ee3549194b447683b73177d3d6e4880c03ee26c523a7d7551b26cddef53d553fc003e7d532613b238ed47af818ae2dd11e709d8b491f68f358219dd27e2ed303d493ef0c24d72697382032629c76ca6d6e95bb2cc5994310a3d03441feaccf892dbee576757fed62a92da7c7286ef3cbb725fe246b55cc29fd1cdbc4284e7d70fc9a16f23b7992dffeabe0d1319a8f79193ef0cfcc1742db17357223fee7dfee908ddc329982b30d00bdd0df21de41459265e6a2e443e830aace7ecec9511204e3afb088a5bd15c460774fe4c931f28dbe9c3ad912e46805440cdcab4754fff643edc0a7cc2ca2dda9779fcb559e72a9e09fd7520e3723b923726f6a551086cc132bd752b038f98a9c3d587884d07af1268eb2bf296ebe9911a27a478a00f6dc148ed9001aed175d29b38b28ac5c8a41667bbf214eca1d2cc6111036fc396bcbaabcc04a6da9640fb0927b72326ede07052bdfc003b40d16d2be29680f1 COUNT = 91 -K = 04ad67409ade76cb1b8b8f8566a4238abb16355c93a60326 -P = 1aeb554f6fa4d53b998ef3abae898eb2c8348f9887067587669e79b9d7c2a6ffc1db3cc85ad52671a043430114f88eab7c39181ff5c9d9dcf7791db4341509d0695c432178c63f0f84488aa85244ff5d35958c1da60a83cc88e5a90222f664d5f75fc0aca1 -C = b6dc948fbbcca1dd7386597ad839e5eddabd9e29e6789c4942ae7fd557eeff775a93cfe45f4e3412fec3b8f52367f730a002e86c05df13c95324b9e997b7c4ec3d23d2304cf7a946a8515fd75e0833e1120b7a68f820f2f65c22a6de30c04ed9c5462a3ee8209ff5787d7a48019e6802 +K = 445d0faf17bed869833707004f6e9598e3cedec09ae11ab3 +P = 217f81a846e39257429479020c08ba807bb6bc282b9d35c54a0d06eb824cd81bd7da254e77faefc217a07c9025a649af929fc5096f7517a04db361a8e7c450f4a0b420c483a58afa72f3690afa12e6946eda0efecba6695922a789de8472994e87c6346cf23e09f38a59354bd03378be4e4b6f6904dd5e56896287f7ade5539a7c96e1e80952b8891f229379c82bb8537e500289ff0050732e7e34de8870a460f2ed813eee9b23e3f55ac6cb56e14582419d179e2c58ac3219139f6b923fc9f7830ad2e8aa01e4c8253a7e5272a2073f071262c98c06a24da36f045a85894883c95504869b391a70a0499aa2ca0af9e8f538d9292a1af28de982f68814cba3a4ebeb812e4a8d29ee0a7ec23e1ed0f54f2cbc40e7ef1ede8b4f702c8dd49e73c1e255cc89b46ab19fbdd7758278106d9454865c4d9783edcf698869a2fe173c68a22d5897da83192af32c8ce461018aef38ddca4cb04e09e560f4be32c0487e1600195aab210f8b60bb08d59d935e19e2b9849964eedd20dc976e2ad94356c36760d37a6224dbf5df28756a7875b55373a1cc718fb891ffa02663666109b6e6973ae7aed90d5cfb96d3f889657e7c31cd63b15efb49bd436ddee07fa5195bdb4f8875e6c049f16675081515f51f107483356e9b27f4d0ee2337ca8b6a795cc6bf47ccca9a08b1dc955dac29432ce71c7d3fb76ee987af31e3c48fc68200124e92 +C = 8a2fc60e9639ff0a75d0e2ae277252906a3c89c46bee015e30d18feac3babfce7d6964b302dd848fba2bb9e8566993934d0b02c878446f83829fe7da4a1f8b70c1ae544e94addd3f6f9766dd16e42ee1c5707097ba622c27966953ba771c6ee34b9f4e73ccef6aa1776cb2e0db5a44fa7ead91d1869dbe0b19647496369aee118b5269773d620d5651275e63b664ac7bae6244d3b5c9b1f681051b4a853f9aeded163dbd3f1cacf43a9298539b8141167efe4d068016cf7a89d71856cf71ae96276cb5069d68e7e8c9ffe20ae13bd9b4f87d4c41783143220105816c5dcf603c487dadd6e19d186a24632cec46bd6cf31a2c54fe1a9da61aec9ac8f7d0d70c9b01e70fce1daf14768eebafb9df5a2c918ac280aefe70f06ed73e91473085721f4e676d26f94705d3985125b6ce3428b9c2bd0cb84d0c7628bff422811562616114802f7ad516b957c28c6fb72b6d1baf86bca49bbce746e6228f536dccffc87c4bb32661e8189dfc2dd7730d47ea70773769ca61d0d0654e94c95fe26d8b2cb47dbcd5d9a9798d4dff4a0d301a746e11f4fea8021d95b6a28db0903449c4cb623054a26478e4350ab6ad015a849e3a4d6a9fa6421cc91c0184e3a3b48782a06edd0645c535031b2c2b8569a244d5a6d7c3ac88664d68700d9e5108f4fa5c7ac491d69c682f216b06f77707e39ed22548114c86249ba966cd6b7859cecefc5a683dbf075c7bb41090 COUNT = 92 -K = 3cbb7339f0a9bc382f792bda80ecb8e36b5516dbfc8ea3a8 -P = 842f3ca93274b5d179a1fc5e74efb330adea2d78050f5344534eed2d191ca5ae677e81bf1b3bcb67cc2cf76ed97e52196286638654ab7dd6b10eca1ff1ef10b4ffd3076150d7c5e2493abc0fa8a868719713e8f8326993c6f491345ce59adf1ec7d25e3e1d -C = 5ff4549629a1b2ac1edda41da511f9d164125293a896a8993efa586497b3280f414727369f927d7775b0f285cdd7518ea9a568749d9000ea2bdfabe7300379fa27e86527652d6a97660a80e796107c7731f0d526c26efa8111b0ad5232a7740e2078892f8eda7d766f90a321cc06f63b +K = 7bbdbc7826ff43bc51a567d7d9bdbf8c885e3486a00005b8 +P = f7025ca9575ad590615c437e9d4cff99eb77f26892acb3c2d1c710cc052418692bdfaf3dc967b7af724955d0029eb58cd3aed5d734eecb09bd9465d695a71203c093389578e18d5d9e61e474360094235c0ed376be69bf4fda78faf527e5a5c2b6afd1b214ec055b4f72e7f148703672ae4107526058a00a835ab681a6deddd77188f82117ea4aaec6f7baf1b49788dbbdf71f0017c2b13fcc8d9bab76bebf3b9c5046d4a1fb43f41b487a4f08a4d0b3fe41fe5ad233c6ccf200c7c38746f18b242b5000bc66e5d8631e0ae281e9f0542ac2b165b5f87c2783edd72f606f8b9e9b79440d69568b65c325208c3821078d4f706a666892bca942254e423f3b5c3b72cee7cb41b88723f626f014f69bd3e0c3dddb50604efa359097b800718919f99ba11ba8832374d02c07dacbe81328cfd8b34071441483302e5a5aec3eb8621c018d17a43a893e3a4cf83bb9f5eb7d3e5f6a3eff7335e8b3900a769e236f42bce518568ae5871b48987b37efc636f8ea1747222cc14d4edd3b82f39aa89269cc3fb49fe01828253334ce848398d48d5f6656aa9a1ed70434c7099afbbac39feb682d798afbed486d23b859598b239056163897700f0c4750ecb3af0c109edf82aa0dd3a3e5708723597bd8dfbf901c73defb19adbcd490a7114ee989a62759decb2f279472f6eb83f73ccef115bf9d0126b24d2cc822b262186c91d55f2e13f6 +C = 14d485fc1e4b51276d1a5b7e63326f5e56a281efac33658d3d50debef11459d67003b442a6f2307b76436af05eb6daf1b4fe07af75cc3f5031e355fbe3431a016f1ebb1da227a487994fda67bf3873f4acbfc37411a5319ffc1c7c608385237495487d8214f1393dbb7da8b1390a27a174fa50e204c4c2b958807986a28b42aa1a8b941dc21c2eae43f26e2bff57751fd0fd2496054c217fadb7d56c329acc6cfbb224cc2642a88d4c70f75c0f33eff65be678b26fbfe574a28bed32d6470c5bad00d8ee174ec5ea0dfb1932db54a5d4a2aa77a951c1438c89e33a95fed89bc152f4311bd83aaff1e5561d2314a69cf4a0c95ab7b7865764d0675e8edcf6469ff53fa4b1e8cf0fd0548ecb357f64019359b6ecbbecb7608b4681b039b28c2f379b57c602c808b82d26a516fb1356b62071e61b09393f15955e614337b2ad6ec9a79e15a2ff2aa49b0ff1381617991a3003e7db25609d9da52e93cd1b89782dfee4aec3e28944db41073dfedf9396e832216368e5cf3147083aff909e193ed2497b8bbab840ddd3561fad32e6d68b6b26a8264c9996ad3290e824fd088aab26914a05e80067f281b2225587cf805cadde0acc63b4e8a627b01547b9a6a55edfda7ffed5f28592a4e4b6bf5e566882fd3f20a452d33e6aae79eda46279bd6ce4d84d0a888920020e4d2c8ff7c4ebe724b74c2c5c2680c026e055359a08ffd6fd0f0a45657e18214c82 COUNT = 93 -K = d7f7a0a5e68c6edb793693c4a2afb7a8a37f7b03fbc54888 -P = dc4b2879b6a514443d9331be4af9cfd5c922cb8065b97e7b9e9bc0eb8d114f95b8a3956d36e77e595a494ef417c6f2d99e5f7ece9338ab1a24f562fcc3046ba166412d9bc59896dabd327d3b88cbfea4b1228ce5583eca90033ce28e83a7f3b2c4794407c1 -C = d3fe67d7468779bcef2dc9a69a0ca126918936f41ef8e55bec94ffa8496ae62c8796dced018879c676688662b5c7c067199b9b0031d82497cda29b0ff4c04065d3236077525a185ef04a2de2a5baa63ae87315104debf8223afc671012aaf12d93d3610003e30aeafed9a3b8ac6ac190 +K = 8502e816f1778af6d8a0a06e3a5d0bbcc9a48b178ef98d01 +P = 02bfb02b9afe64b0c71165008ab9c9a1f8adcf53dcefe119a25506112b1335cb55a26e6e57400b232faf1fb3aee717cd52a784be3b6a8bb9aa36b17f0b574d1b51d2f32fd97fdcaa4e8f551a46248ddd5175e48701edd5282914b0eac30a5c2c9a439b87a449a0516ee848e229914810bbb9a3abe55acded74a3f84ac374c63d6f1c5930eb0c3d06bdff596631b33056e69ec333c6e8e013a3063e284a5367363ede77090d6b514247e3cbf6011b5bbfc00a2012ef026414f842502aa211afb9cf9250e0014ab62d61a2aa42fd24eb6c7832685162b27f858e214d6eca07180fdf1fd5e5c682d9541ef8498092058031dcdac5f69d71be5599639a07a10b34f3faf924ef36a4028e91908fbb255b7e963d307e790d803adef744d70385ae3f9f9c93056091e2e093702a3dc16652360ffee1d23e0532f86bdfe7902aba534f3fbfd137ec3385be08e2eb15044d98dffed97d6171753ef17b16fff941d05f64f74d82b887c3c29c853036612822c8da8e4abb7f5a5e046749c7e1424c53f37920f540be929437da75155bcc5806728b502a1302601abc3e4b102815c93cf9e7c7d99c3a3242b948b0ec629552fe5e66af8398e16f16f6066253213db1173e7dd0195e3d4780867b7b2205dcceacc849efd5e469ee0d36f1c85d85c794f83ebf53410f86fa7ce3040185cb8532e2425e6f81d422710c00b1cad64626388a6e5cfb +C = e672a06dfbf9624acb7e6b318d4cf2b7c1d996d13b0d8e543cae90c08aeaa1b073133848a9899a039fabb127fcc1e68ccd2d0f74500071b494f1dbd2627fe8f071ee7cb5c0725e3bf34d4dab27f8b4371a8464dacfd0e51d7fe577af6b9c99be18c2ce3038369721cdce4f335b2ce064abab35ee7f6f863b363e7d0998870b75e26b5c9706f98baa0425541419b4cb6bae1b117f22da7e2aabf6b1271744b8881441505311c5a6d57ecf7d7eed53deff7661abef2770729af8c261cea8c19c0ac5177d6ff9f542e4425f6f66d921fb297560f9d4a800a37e0e8f283ae94a50c0005d1f1981d6bb15b07732548c652d2a0d764d26d058b880028ff8b85abe08374cd8c1ee06b6d1806c3a1664a25f18c9635abf89050d7ca1644e1dff4088d363b03bbcbe0ee475f0b1b549c40117fe087f87d396d7b3f2e7de01e942b755a4fd903723181a2b0994452d53d580dc729006f2c251bb473f38d8c3412737392c16883b84d6941003ab99f9f255eb389074817a586e3682d60bb257eaa196c04bff64395ad6f3ddcbd280a5a1f678732211e2213807d3e4f5be3b29584752e0d5cb07831c1091cb80b372c3fb1f7b5639787c5ac00ca058640b9ddc9e65b1e3965f318d31bd3ecff2c3a9523c6cb4742d9b9da7bdb871af8b9e0eaf10f581e41982049891df168ba55e3dce49d9ab6c5f48febc37358527b8beb5a528dc596e19de22c8620d494b1a45 COUNT = 94 -K = ad73a694ef6a20477211e830fd464a42e7d464b82653f41d -P = 75a826bf1d0eba5f1a74fd7ff1fe27f51b3cf36f08ed764379b84ec5eb03b8aae1877073dda9d8662d167a3cec838c89550407428fd8fc4c81b41855edd6dddc281183d194024d68cc974480556e866d3b14dbf93763044ccc6da6082866c506ae5386c17e -C = 4636ee6384a7e02a698d43c05e79b6cae3884114ed97d4fdd053ca63aea180547701f7efbfb87268513afe0ef223843820a99a488c81b62b46c07ef7f7206b8bbc731931ac872471ad890be0c0107b9ff036a6de24f01f820856756b2f6724ab5ba98c456870d7926aec43315e284a3d +K = 062d3b312b87658d7b10f8946ca2d4c4d79c3a47cb32d566 +P = 2b03705b55370e68680d6812ab426c9260fd99119f0aea4090f0c072c3da50d2f51c4e81c6aa017d5679b6e9d435180843ec9faf365556327b0e8c1906482600107bd5bb790b86d90209426bc347d234a1a6cc39bf71b9ee317e9cdffca73c4bf164de9bb4d8d470becd8e7321663126848b65314866aa787d9a1708263c9bada09e86f786c2ced5d69fcc2676ff1bc656bb8b5dc5e5e44188974b99da20792b0eb2ba15208c91a30de245c8ffb15b393f347bcfb775f0ded9f3f6424b00bba07e576701baeb54ad2ca2054c0ced3bae778300ce9f2ad273bf2448c94e9b780f3a3f049d06fa2eae74fe535a45d0d8e1b62bc99777e09030255dd23e405c6fab3c82883674762e6aa383ad9fb062e206a70d942fe5f71d55db49c5199c7682c16b68bafd0d83b9f2e490d36031e5c87124954238b3b67dfb9c8599589b69ddd51f6d34b400272db4954a79efa09de23651424f9a5638d0250b81dfd504c7a5fd0ee9146605f9e511b8d95d3f0288b689eb86ad3a1afe7f3f328318064369eab5b5774121847a9e1d39ff8197449a6f93e70d9c3795a81eae8719fd6df63eb2e35b8013e57e774c8461c3b312e0b347f69e643687cccda005b13c8e6b6f454cac75c5cd3898b75aae0a395145d95663b8d79a1dbc1c93024ff8d33f08ba5ee32735ff89b67189edb0b438327491ca5d749359d6ea41376484723a499d65f195c3 +C = 0d679ca12f7142549c40790260dfd04d8337cb50dac5ddcb3b7f3cb761b8abf0fe5745d37399723c7bb2d2c13bfae86a9cf70e71ee5cac0e342e0972a7c441fccdaa256631356153fdea499faa78f7969bf783460b0ac2b40e34dd8052854e2d64edbe1a1992c8b524de33ec04b2f21f011d0d0d917ac55e1598337975282740a1d33a7976c236e766d388dc250f804193aa8c5c8f766f97b2f7a16c205a10dbdb6bb5dc572544c6d947c2b35029d1af6fba2d49cae947475ac2cc909930e6431c248d5ac8bed448cac5498109bcb3dc8857500a5e0318d87df3c4597ca6da9aef7171f70d92f08c88eadce53b947ead0d25555a14aa9da8504672febb39d099419279ac6fde6ab95461f6a26084d8ebf1806068b3c850679592095bfecfafd9043e2608be907991401a5d31b3859f3cb0812fe7c40a5aacc0fed051d71f38757ea76607cba9eef250dd7010274567664cac5e2750b8b4774ea6e565897648351328e38895a8780a1904efe86ae6f5d132744987abf54c94aef5e55aadff07b41f28ac219c3c3ffa69555ac67fe1cbf2b0ca91e038f5675aacc71ee1452ddbd56e39da7a05577568647645d2b16f48de2429b9fc9d5bf84854d5e126b8edfc0929aa6d52fa55145793fba9d9e16b45a3c4c8bf1afea509479bdff611329400ccd77c0af4a30e78ac793e872c02191bd4a18342bb1dff2f566b57e5d03725c844ad8ebed637c19a81 COUNT = 95 -K = 1aa1746d7618e7c4112f2d907e3f394dbc33515e1ebe5c64 -P = 0bcd9d0cfa01c5fba7e57cc17b698ae293f9ded4159efe6c6ad68fc84645269e505f7f6ef86e87ddd8f63ff3c55913bae8707219e3587f0fc9f6e713803f9f13599f7fd51d53d080a7dbbcee26921d83dda0bf7c0808359bf984bc9c2a40f2e7c806ca002f -C = f94df10a0b584c106a945ac097d0ca12456b7fa1eb5f33f34abc9019e618e11156ee51bb0bb8b65cbf9af6cfa6c30d9cc8e29029d753a0f986e447e49abfc9d2012014e5e880aea163da95993d5b309e1e2b6e27ff8403fc7b33c21ac934f19f89b3e120d0d619d25931736babd0936e +K = c0f24a1f930810d6cf62144e919b71e0c83d94bf5f54fa8c +P = d46949611918e553592cba5b3f07187ddd5f9652b276e1a2fb547fb9bf0f6a0535f288206dc433a961ab7b4da09b609547fd8189b0b292636be01090427cdfad12b04353e24332e2f4248977d68ee31979421b36487d6135aa99244a0febfa68f292f47885d8463613fcb47bc97753b2c245f7ff14723c013680afdc217a064f863c49a4b0434896e8f2b00e9464f4e514d199dd620d68f13b141e5d9e023bc7836781f54c5819e4929f7afb17d79c9cbef77f6ddba0acb4902df72521c7b1b17c6a44455d779a47a3aa79083561bccee06b1e8f30bd322cc858b424698f37b2d3c0934d49d9d7eb143ebe9d938fc33d1e91d7b5481c6ac409c0b43c1277822a6c7faf7dfa02bbbf37481a365765223d335504b1e6972de51771b2a7ae5409c7cebbbfe446b98c8c8acd52243e6f524d4b63b315f23dc53624b5ca917417e87fd162d1e9853bac0d7d99157dbf2bf2897c81682e99b6272b47ed2c0f60466ad74672cb2e931e406dab1e820a5d4a1741a7eda2037ee6f835d832f0c0f443298e72055ab861ba260041ff8f1de120efd962b5ae04a169f580f03219c08cc7bdd2d7ce4fabcf300dd9705d2157c13644000061249261780e433693e8ddb7e4215426c4d459c4837730c2e4f427b6cc71fa5866e3fd5b5cb7e3da2e681b17831e63336ae8a5e5a2bba4238d889aed0742098ff896f417271e4d8ac07cac4568e3e9 +C = 8101fa5af8bb614f042987154906607fd1e26105c34ca9cc122cacc899bc443a4dd70c9367fa3a1574cf73db30cb857182b5502b9f8888a4ae680905b60ee10825fb60feffbf0aa9564306deaa20b703fff3a530007121618f412fd839d5b42bfdd7cdb17e7b74958752ee83b37a554db8ac6ec30a1863733c80f8cdfecf78da6c05a979a6722a8a8e176e580d7147d438ca7af93db39fb11f3167f9c0182f2b051758165945a212ef7d807bc74e616c9f4d62f93c7cacb2b3147053ec8ccb58690a9d787d0a919ea2d8877eae1776a4ea7e98e2a4d5e92e3eb3fa0ae540ac9b3be3e2fe8dc5582b58ef84fdbdaecd68d83f94e50692dbf465711e34dac7aae3642fb611cddfc0c31e3bf5b7cd139d062213f7e6a403217cc84fe578219cfa168296f121134ab8a41f063aab626a0b2a7885826c261eb93daa6596b34d2a7089ca34c26c477fc68a10b48c832c03348cf52e5f46d3d52881ad082afc54141d3a08968291aef7e64481c9b0a8190e67326fbc2e2efbe6b2a561f89bfb4ed1aee8f4e8490f542dc5b6e5db04b85da2635e5424d717a522d0888dde55b03851854c004bd9882115763e89f6dc350e92feaa35086744eb7008988931839da235102a766713b442e3d513bfeea7e5d5cc35a9820bada360a7cefb6a0cd007855624e3c7259b1099cda550d63b40eb707112b4796d59f2b0a6a4ad37c736c32fbda4fad96a362411f12724 COUNT = 96 -K = 652a4f7589d96098bad6a81cdfbbe499060be7346e3054d3 -P = a3a5fa2ee48d7e4f390d8ab00557472ad2c904e1c17174ac8724d87b4f0f96ebbe85126f9743fbdb670db74006d54965363a5dbe9da8c2e59ca55a5a0d8f6adf1011886fe6abb8ee1b12c055886c6ebfa40f0932c92a4568dbf914c971f688becd82520658 -C = 03f148b5b3b12adb4f30e11c160f3edb57518522162a6034b6bf19fe8e2cb02c42e2ce14cdc61fd1f9f072f32d0cebd1a180aec3c6d2bac982ee42551b5e5fa05ba363d9c8e2135cdaa6d8fd5ca1d78c0147ba525063954993795d4d5f6d01420bc81ae30779064b8bae4d336bb805cd +K = 29273499840d9198ae1c0c641179a6d68f7dc73c9689d448 +P = 9c6121255a59c0e6ab45b3d98958b3d5277b2b734a0a279052dc1b2cfeeab8c12c29804af440668d1c52c4b1701b84b4c839ead3d45d178a41199eb02c488ed6c491d1a6c1e94a52027a07b349ceffd2d5535d27e7d868c028b00ba48498424aec9accafddd70ba805a3224249e0057cca75d0eef2cb495a6834d3f94d5290359266948c06b5f61ebb3e834b6158ff36c9a2e5b966804ff64aa037af5037020c4eef403baaa634d7fd41ccc59951eea6e35b2f96ab463f846d032f057ba17e6fc75d32e12df6ea3ca7ce85e7352af77ba310f076145d9b3a36714dfff608c1eeb8a0a54b0e6abc1757e1663620ce9be4111764f76aec37374647c97cb8ede7496a412a57f095912e3c8c2cc63cc1dc179a1e926e5dc53f97d8b8dcc5ad3246e3f43f526a773da2ceb13c9bc43ec31eef54bb388d59ebfaa1ba8c8667c8e38e817fa1e1f2f8285ebd5b0b549114ec71e9646813e9d2676a38cbb6e0982806267b6b5fd7abc04cccdc37a55207f70c74ac4acc8b6d53cae24a3cfa547340ccd687acb38c0512d39725be5a877e2c8900e2b8c8785092fe892681f56111ac2245c71d3e7d99ad8b837652213e7c9e8d3a29f65256921b249613f713d45f2a19abe62e7949a2ddf1f480363beebbffc8ba136de700610f94cddb07884fca4bb6303fa7a57e40289a0457317afd00b7bf3b5f0c0483c9038888211f68c46f955bab09 +C = dbe56df879174bf8272849b6c252f11bf0664fd9fa9c753fe2dd30c2e87af0bc89ef807566081872bbc2ccf46c55d05d33d3a93b0a2e32e53a4ddf7a9f890e3ddcab39d362d2f4e16e81b4429ef9d3e7dddea87b3b3347ba975023a33366a8955882d8bdc395ad446fb457c310a94c30f4f7928d0247a217062689abddc713fba6d0b784d3e09eef10c8551fa217552a2a3a563524ddeef8e03d4fdc83d54986d5f77caa649eef54f9b12b092e419c381b305a8879426a28c73648ad7b8c504dc31d2f2c849d8959dc20dee46014326b607497b7d5a699e5f77943ce718027b5c9f37b329dc3e72e1814fc4e3d39949f92ab6d1e1e78b03d1d3c64e58a51a141cb839002d4036058502c2edfada0079f2d6adbc35cd3f4722b49b368ec9e68856fbf86d90e6a1a62d79a21257999eb65a7304fa0147f563a2387061b4f9c72b6bd6630de387d27d77c32f9e50eef47583934bfb64a9b9eb137c447018a3e9b11d2489037b66382060968cf7e1e745ea07cbc8d520dcd6ed7d7ce5f0a0323d91bfa95a753cccc7e23d730f5902e2d944e3f715a3b1d3b839bb3193b983cc7decc0db5893d8276f041f774c2a904c1147c3d1399d4a8d9372a649e9f1d36ef349d00baca9e1bab735e5d6787fa7be6d705a8cd8934c3838ec3d2fcc73546adb12bbdb74145d401e91d492cf30319ca0c507901be1deabe5a42dfccffe19b42574b279672e90feaf8f6 COUNT = 97 -K = 3cc41deb193aa86e563fd875089b0c4fe3ac09f14d5ad435 -P = 6f23c81a0e93be8c0b0543ede5d2f38cc662908b8add49fa3791667345056cf18552b767bb0626fe9f6b6d004216e7da5952e71f6309464759cca7f3a609ad2623c4e7411a01cea4ab87e7c8c461536a080abf2a803c01d1363e32ae844bbf4c211f751ad4 -C = f37794176162aa5d24223b0a4431ef66fa235e3af01a9681af06693b7e410b7b90efe04af491ab31b4c58d5fc01a66c5276c385f8ad640f3520fd84a548159e2877e6da348dffde9c3224b0b2b67758a00830d8b31d2d0cc0d60b00c2441077deea09d16e00a4e6df49e9a7a5716059b +K = 7244c552701428ec4f84e0fe6ec0c212024b19a81e2c2e73 +P = 8c1db9caf066ca816b68bbef23c13b3ba2931985ed0bc4b7916dae25ce9733f5f2837078d16beccafa7529f78731a0f39b5414f4b40d4433f12204fb29377f1e5309ba3af23a04afe4868acd1b9d930a39d9db1905dbeb7889a9f5684748f8a2ca77943fdacaddad8c9c4ccd30a372192b9d12bf894203b3e81bd06170b587a2c25e0fa3a7a62a5b7d300765f26b1bbbed81dce45b716f836bc86464f36b0661dbe8f2fa3200644c566b2f4a0189d2b22efbe3e5b9f568a2b229fc48aa92db72111a9d380a3f6e5816a5254199a01ee23b4052a67eb29f011628396b2ec9d070222f24f17b3b3a822311bc50d8a4d6235451ad11653e5a406e0916d8a3c8bd805d618366bc9c27d506a282d142740c78d139d6a3d88b2ff8399b632c3c03bb68663b0c44c23ba6a2409dce94b14ef44b325af76bf552e4df58dbb341fa8cc8fd2c10a6766f441f0f5092db6bd372f1c0208d5d9d2fa44f728ffb4b2d6ed2748563b973506b1fefb6549618f7d69a2d331506df6adf980224eca30eb0e379c0e7677142681d524849a451e318c879c9b70e560b40b319c776fd6987c2f77bbb629f5252b1a57b9fbacc5fb5305cde8dfcfa9ecbe0fdaeb69705c73c63035453eb254e4f95b9773868e6150b6853b86d85646a68ec014f2387b6191be4b90968de468a59c52481a5864439c26221d1de645c1ff7ca8085f882e1d6a68413395592 +C = 55d10410cbab13ba9e63da655d970a6a5d6f3bea599843ce580a1059e5d43a41ab8b36c81885d34fd17ce4415ca7d698d61cc2f6626abceeafac13e3c138d6c4c85876e20e44f75a25e36c1986b917bc247f90658b106fff328164cc16119fd626de95acdf686f09b3c812fc148dd4671cc4f1571ea839ddb9c296d28b398516a3d492d9a645be5b69e7b82f9eacf7fef86bb354ee8043ba5df2f7649e5ab31d258ad849f97931d86495087ca24f349c85f5a8548a473f5b7e2cccc75965291ebc205206eeae2b9a5345cf57a71e164a675a20a5bdcb9898c1abae3588ba2706a0ab53b8068d1df1b65726858591ca6171d67ee40c6a4d081726306ec6f0c033af0451fa0b0b825164ad83d6875b1b3ca3d2e93e227b5e7ec9afd7a60c097f0eee9de3813961b3082dbdc33170cbc042a3805bc64867e949bca14f6a4dfa595644bf021a48a4f375258570a43c5a0d4eb505153ce8c4a89f94311b8fa56b1c82330f5a12483d9e3beb58aafe641b03f932e66cfeb9f8e0797394d1145412af9a10cacd05d0f9703cd1e09ca714d59e27775d574a50003e1728184d9c7f6ca0f5e0167de434da6cdc03a0d025c6daac7c76462541449b3da68b12de42d3acabc24a81f0638b18199872a5d6771cc4c94591d8c0e03ee05b8f137850241aa336b9d7e4e329323b4ce862c8766212521566998e85db63584a86d709ae7cea16f7e681fea12ba4e890a5 COUNT = 98 -K = 146fa7091913f4c2b35b36a6e1659d62724fba9a1f5d9225 -P = 79f97905597693781e92e5da0bcc8ab052499ef208a982cf5774c21c17c08ee2af1a17e06d85e0e948d35e0d57a55952cd4730c9101adbaf45dc7fb0ec34bcb5df94df401e86f69c3d5e5b9eb5d46e9cba29c992bbb6bb9954841542389bbc201ef6e5ef25 -C = 7a2af12d1f7b8b2144a91ef242e80aae8556da0dd6e0301884162b64ea871c116dcf994f5ae3a9b7794f4810ba131a3394408f04dd12d4b7c0f654416eecff1fa839974db2cd2656bf2ee59c3a91ca9e8ba0f5e57608c376223ae283f895125bf8fcf16e7c5f85f4f26d2ad42ebee413 +K = 9610076230c48323f4f72606172d0ec3eadc56f1f2adb09e +P = 4d9d595529895be632749f244a51c01c096a3f752c8ccf63fba3a85da897cea25d76243488d75089ee19e36bbde54fd4152cbaaf05e3d8f1ba9e479b72d9f9f20d90f69f7b77d99a0895062674f4d590bca1355d4e8c63ec5b83843d1aab9ad94bd8bd20a7afb92b880e7d4a6939dc3eb4d70e2fc7eb7f08f12ac116138f0301330762664890c19a73154be577ca3c17c1e34e9db1d8df5750660b85c36e14b3e18838f9814c018b195cf4d1a4c2597e2dabd78ec1092b7d021b8c61994edf11c573cb229ba75c125e2ffe8beeda77a539ef90c92f5574d743c37bf057571e91f2b8667fea15b50dac64da89a5b1b1933c3e88c2b656aa0f835a25a53e508bc6df2227e4c7f61dd6967da2e4e794d3f5e8576de6a57a07a1fd984b4835deb6b3a816402f92a7392a4cfacdfacd2443ea8e61cfc7e525a09fabe31f6996bf7b8f33799d2ee1ae33f56713f26a9c9a4357daff39a3d12c2cf921d6a8f42d4550e320001fe36e6723cdc056d1960590c0ee183fbbf6bd7a0461d00f9427115dd72ea47af4d1971d906c21c22bf02417fb15cea71a23db1c8f8b79f81f45c275db99dd8d009c6e19ab7810bf0670bffc8d4c54b5540f2a50b94db40458908be9c2e08e8d0af34e70e6e234593f7aa15eb977c990449f4ad0c22add4a098174ead35a11f467e61f5ed65e6f7f87f030f3e4686d466c435e8e79d7a6fef85251b134c4 +C = 06238fe98c3e61a14b1c1b7f6557d601be2d933f5a55f016b37f6832e6fb9d0aeeb5afd5d3664ff701e75727dcf004a448fc431ec9208fb58aae6e8da40fdae3a73ac9808aa4919ab235be3d5d2db99778e9635076b0470762f9356897bc259d897a3572d44c3d55a1d00031761f3a6e2021edc4b5e82bb52c0b5b183c41978d133759bda7d97861f005c4241b5e54d68b64658cf74d34f37b48f7f247cb91baa65b5c9164e36c1db570cf563eeb9ad977f830c9da30d21912fc04b7b49622c80a06d8bef02e01d8fb9345f2e041fc68cc3eff911de57cf5e74bebb0a433f08cb0c5e9515257651e53fc377149fc988b5240891d409e08d377628519a7719fcda388f354423d73701173bfa53abcb42d9cd9dbfa2c8bf81cf423fd9fc812184d62aa0c232ee32400a0341de9713eccc8033aae2cbd4229bf9ae35fd100037b211b136af3a186d6d101d03ff2f5fc3a4bcc57a2eb773716df77ced76b6c3316af11d56572051c137b49c63df94b2b91e45b851ae10aec1004bc2b09f3db9f84f3ba5f2f43620b975b14ac03785ecad5da0b17ba4773f404f9644ad4e78fa499cda55c975e10cfa2f59a8a4d3b4e74fdd843f24d3c89c06e7785f179999802c0986961ca0b2b660141633a5ba9b7bb6871d33ccdf088eb519fa197942610139c0e909aad3c73c63449ce4bf94f198f4dd7daf6edc8bbef81afa3af2b98bac1a3e52b10bf2675a02e57 COUNT = 99 -K = 04a01043d5f022fab18e22f68ddcde79284c62defd91a0bb -P = 036f8e899c9298d51d8b00c52066695d9d9b7666e3d2d9a7809a674a340adca79b64dd116934f3858d31020b41738a722bea09faad3fe4ca9731624619b392bc78582548b6308fc5d31c758884e25f568978bd85929253d4498fefdc8b4dffcea40c7dd4a9 -C = 374fd78ce9d30e592baef040a18408feac3a13c3de0aad6aaea303870091eb9948b428e9854093796a9b9f5a184985790a34cc8f434a419322a11ed73d1422062168ead3949ea581a9cc58db8db186d7b161447e160de8644c2c926276ee4222801513404b5ee3380451c402787de3f7 +K = 8b190ea5cab54000d037fda56859521f0af545bdc80b8ac3 +P = 0cdb4f843aa332077bf9b52340343085191e0e72e4f6a520ff7e561406902e188ae09fb451a087d9862279a96c4ee8b599a4c4c15e450cecf8df6f0ae879fd5c359bba26dcb308dd3e700e0511f01a72b7e525ddceaf06b1b311c8f22da10fec9a9555f78e5ebcb6015175cc6e6ed9f79d3f5e637bbdba2642c0c63ff66b3f711c1d3e9e39dd588209d1131eabb910f2cd4561ff0611397a74837d5009aecbb6901d8228039627f42c3372bbd7a57797db563c8ae5a1809c6d71b7a36875529544da375ab2cd48ea8931b2a905f84c3a4513c6ddb05a37ed7a9efed062c75f25435f4ade509864555408798be3886dde1fc3c3897622e1d63821b4238348cf331aca9379608f9f5fdf907dd72f25c7d1e8671b5db4217315c23d72a7bab12e1156d18d4b3d3263aef1e1e11603de7c958dfc60f989f38dd994c064d5128677740f3ab65ca8d42f6c40b779b669a27ef3ce91baf040b0674a34cc6fb23a75c944ce63bf359aea107eac0823b25b94b640d24c31fef796f3485ca316e91a2175eecbbb6be3dc947b8eeb2d502c3442e995046d959ea78206f18aeeafd844dac654aa0d92e03756ade850537d58bba15ca760fee9156fcac540cf85de7cb7ecb47a7bfb17bf8f98d39cee83e0caeebde4b8985cd0035419c727599d9e07ea807eaba08eb21a5644c7ced157d07d2b2766495788267b77eb2c71af2c49406529d5a3 +C = 05a9711e3248192d0513f859cac33f5cd036a30ab1390d9e50849ea4ccab2d015eb352174440bff2bf6ca06c27267b05d867ae907be30a9d4df51c2af192ae17101edfe9d776e22341289daa30b0539ee2066e05691f18ebed41b2fcdfcec22f6c0108565e24228096a7bd98982fb45761c8bb9b7155303beab7488f1341e87f9549fecd41a71e3ca7c93f8374275852da1a8d1c5ade015507a2044353e9a598280779dec798d047c22284e0968367ef9decc66cd8ebc8a340adb4c679602c869c02a53090feb2353aeca6507a6aee7a5ddb409476ea8255c722a4d151a97253180ffafeee6fad2d40da285d188d68f4d1c1ec9d925f976d43143bc35caa306fc7178b2ddc8c9342c31c385fff69f600dac1b3ad6c590655047b6371dd9cff8eadd480b0305e03b35ad90a3a75671abf2ad73d5b75851e4413f608b1e6df083540042c67e7c54c6760971ad022975c90f42454f38dea0bfc7d8b01691a74f0f29f9e0133a1484682c96ab7c0b4d347394d69fff364327eaa7af8d71e72ca8176cefff901fcef6f960a63b0b6304f59ee9fb62f628b5e6d3783068c2f6203982188de009373eb0c8422a5f0d4201e31876414ca84a398d68bdd9cda50ac663a3e05abc8698113d6ce6fe3538e785e96ea148732018812b1f62e80848a88a65f7dca04aab3f9f9b8968d0ae8f299974af036676eb21617f143bda55dbe92921001f17ccf655de53586 diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192_inv.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192_inv.txt index 18c244ba3201..d89b2fb1d1d1 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192_inv.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_192_inv.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AE with AES-192 inverse cipher function' information for SP800-38F -# Seed = 95ae182584c9f163ee759aa00c25424a66601d9eb5cbc13b5ecb254dc60d71b2d1763d9bd3b2f35668b637f71c4c36b85e386de95ed52ad3e780fbaa2f594ae9 -# Generated on Wed Dec 03 09:15:50 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AE with AES-192 inverse cipher function' information for test-files +# Seed = c6ff74cf8cbc0ec5083ef59c8bce05df1a5865da8c45846adeff7ce02e0991510414d8c28fc34a67e6f06bf243384c86b4082cef595f9768d598fcd75aecf15a +# Generated on Fri Apr 6 14:46:34 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 5d1ba9e1cc803f713965fd0812d84bea74d78cfb397a855e -P = e7 -C = 20c5477f76020faacbf6d86b8818c205 +K = e35799c3290d182bbd9a4f635a80481edaac1b1a150ba89f +P = a0 +C = 2e235525a9e9d0de3be292d6612f0418 COUNT = 1 -K = 18f668d369ec3e713fe25bfb5435362a635c713cea130cbd -P = 87 -C = c33022ad48e4d6078367dafdd6b262b7 +K = b925a2179ecb182245e933194053b0e10399b5588a7adff4 +P = fc +C = 9e22700207ebea77237b475a864db0d5 COUNT = 2 -K = cfcd2a7e7348ee1d93dfbf6ac6f1cd7a2c1677020a461ec7 -P = 40 -C = d2db72d247e11bef180c1ffadabd576b +K = fbec5f3f5843ef565c41e6b5fe88e7193b805f9b7865f981 +P = d4 +C = e224517c0cfdf921923f23b07b0920d9 COUNT = 3 -K = fe54a6559eb3ff180c198208ea704e0ae25ef9fb5cb23d9b -P = 8a -C = 117d880a4de4e5d904a15e2f292adb5e +K = f763cb89ed70bdf5697ed013ed3c0e47d3d3dcf3e0bed8a6 +P = 50 +C = f8836e54ac2edc93196ef7c46c006612 COUNT = 4 -K = 93080a10a6d1a376ded6ddb9f181d2e3d3a9f829d5a078bc -P = 05 -C = 9b01e7e0c63eb9c8e6309f1d080fae7f +K = 82368054332737a80c14fdc88bf41aa7af530f018e9ab862 +P = de +C = 14f9fc2a4242a45b4fdb37a2b98f7036 COUNT = 5 -K = ad360faf8833f103bf47a197ce11b49ad5b5ba6a00af1dc0 -P = 51 -C = 4631a8d484ffe5dc745a6c82128320ef +K = d633edbb9dae2b0091f115df5f005458e5783557902d4d98 +P = 33 +C = 48f9b0d9541b8920cb62dad5673648e5 COUNT = 6 -K = 354b3506c9ef06139f57d65476dbf5b78ccbe1764c5012a9 -P = 7e -C = 90d7c487eb1818d31a3c62883e0c4f22 +K = e0b0abbec3799b1b181f031bfeb63da5bb9e1b357a6b5b26 +P = 62 +C = 157d2d7608ab6bf3d0fcdf3f23a98575 COUNT = 7 -K = e4c1212dc5843b9502c6fc602cad21cfa47cbd8272b58cd9 -P = 61 -C = e1e1227b4a6c4d4547e837f1bfee9ed0 +K = 5eccde72822419dd961be6984ff5098e3eb5e0d9ccf8b56c +P = 4f +C = 59be896210efc16d4e6678973c15e9dc COUNT = 8 -K = d359f4a3c994d6ac44ab360bc4be531a56e8e7cb0292ad81 -P = 1a -C = d002561efb5b82bef31d0d58abb00c04 +K = 49e1ce60984dab8106d3997667483e98dd3ee76a21a1a70e +P = 24 +C = 415c2cad2d2e1359bcda58ab271ea0cd COUNT = 9 -K = 3431c6ba00f9eb8c2429a8c042a10656df46241a76f94694 -P = 76 -C = c69d8b2552a3ad2b02680c55a52ba0c2 +K = f05d5912adb221eb269eb4e135e619fdb84d6c71e3bcde32 +P = 3d +C = bdc93dfca3cb11af3d5e59f2516e33af COUNT = 10 -K = b4dae55abafc152a644e3fdcc2565c8ce43e0a4f100627ef -P = a0 -C = 3f75280337f41e916b30838523e1baf6 +K = e0cb92caa1a7f5823e0128f301785910a15a81124fa80192 +P = 0b +C = 0e22b7f111bd97db0259655822e984ec COUNT = 11 -K = df957672739e9140416894397b825833b83d88ae4aca4cf8 -P = 31 -C = b3008cdd0d845cca9c63da0bb531d82f +K = d2872deca35c0f505ace7107a1c5897db0d9974e5d90f6d9 +P = e2 +C = 8f718857a09dac08e272743e826599f4 COUNT = 12 -K = 7e2ac8e62d1071fd12064e29aeecddb623c32b36ab315749 -P = 71 -C = ff3f953b219890635a5812b285433762 +K = 6aabba25578c4272e3f18ce71dbb11416bc14ba8a9003150 +P = 83 +C = a3cd7c865bcfc72c8c9faab5ec400464 COUNT = 13 -K = 17fedaa8f5c8c841765377bfbebf7b7c58f62ba7a109d471 -P = c5 -C = 18c45e52d8542c135575267bff5b8414 +K = 6311203007675824dffaa54b149a3edd8761d26a63e9e622 +P = e4 +C = 484dd36da6bdf1f3e7910a468396ef75 COUNT = 14 -K = 2f26d86c3c8ff2160bf8e0acc5ab0c77dee39260a235caf4 -P = 0f -C = e8f994f908e6a8f10f3c7887739b7a6e +K = f78151c877b88b7fb337076d3dbe5a17669e669c662040f0 +P = a1 +C = 5983a6928f154047f13a199ce8937fd9 COUNT = 15 -K = 26f14cbf4836b8e1414953334e87d9ade77908d2ecd6dbb1 -P = 8f -C = 794ba9eb31be4e67f40f072771dbd35c +K = 08dd235337d2a04a254343f43c930243eac8887f490a0b62 +P = 78 +C = 71e5dcf9b63ea64e8488e77d911ced7d COUNT = 16 -K = fcdbe4ab6eb48a7834d62990e4f46bea2ae22b941a50b3fe -P = 03 -C = 74049f0c22f614d215f6726f25e9780a +K = 2ca074434a0aaef65f52bac5b02f7ab7a2d47fc9cd9c7f95 +P = 49 +C = b7645d6ec938bacffe8a242d504f53b2 COUNT = 17 -K = 797a9de0b0a65ffcd9171ffb5058ad925c924d9feeec8076 -P = 20 -C = 820af8d13824d0e9ee2ad3c0e37414ef +K = 6e0e583150d8f4af4be84f6eb81d229a824896e715fff03d +P = 06 +C = 4e6cf12b7da65195690c46ed6e8108bd COUNT = 18 -K = cd03751bc41ef8c6991fbf04957bbcd71ff00ecff89cc6ed -P = 00 -C = 70c0730c3551b8b2b31ecbffd75ba093 +K = fe2b98a2748e775b12d556bd2df0f532a10c8ae21bbaac43 +P = eb +C = c43e4593ed87d9335da17e75cd30c188 COUNT = 19 -K = 7b36e7e40bf4a8052d20cf0b0285a654d9e634b421473542 -P = 2b -C = db47aff01fa319f68231dee35f92bc59 +K = 43a5c50567b9e303d8da7e979387bc75ba48af881a525967 +P = 9c +C = a04f191a111fdeee7a6c4636d6fec97d COUNT = 20 -K = a3df94a83bbb8cf7c2c629497f03508c096c2441c35e07ab -P = e6 -C = 6ed4edf951c313abf8193f71a5c5f45c +K = 3bebf45e55f053f396aa2ae535acbcfd194b65bc5f726784 +P = 7f +C = 09ef6a1cf5087b82172513d8855dd39d COUNT = 21 -K = 4ee4a1fbc014cb918b8c06990237d674cb778c95928839f1 -P = 97 -C = c2ef0718edf7a46fd54c6b34f9e7d911 +K = 7f7c8bae21f4ead2e1d80991add5f49c097d5d437ef226b2 +P = 3a +C = 942e0a9fc81c687022f0bfcbb9b581de COUNT = 22 -K = 1e1b1bccf5245298bf8f5fc69fc0b259c5fc4ad8132e8508 -P = fa -C = ca2ceb06599bde3981770de8af8eb5b9 +K = b62c64ce2b6a4673c6a55ae09f24dfa888b392dee08d6b38 +P = d4 +C = 0b58a4d18deeba4ff59cbf5b38c00cc6 COUNT = 23 -K = 65ffd08e7edf9809b37ded728804d533222a5955c3637cd5 -P = 3f -C = dbaaee6314904472ba8089c61d3ace0d +K = da23376c425550634dc6886b8af1baf3326d519a7ef7d605 +P = 43 +C = 4116276bd159de65c0380fcb8de8b4ee COUNT = 24 -K = bca46aa2a313ba59fb3564bc0d665db9fe56856be7524adc -P = aa -C = 6095b8730305fbb85710de5f5a87fcd4 +K = 3b051adddc6411d2982a4c1d40f52b12308548e3f2c25104 +P = 5f +C = 47a176bafa5bed939fb68187f4c6abe7 COUNT = 25 -K = 14310ac45fa022618a9a7eab1477ed041bcc03abc72b2e6c -P = 93 -C = 1f6794ccebf0ed781017ef8659eaf51e +K = 32b87b14b9dbd5729d4bcb1a8ff895eee9a23b873a851bc2 +P = 56 +C = e19c14bf290343c33cadef7f0faf0e4a COUNT = 26 -K = 9b184d54958359fa8944e6fa6d02d483842503c116453314 -P = 7b -C = 918b71c8759bcb29c6e15b61a1eda040 +K = 06882dd96ead94735322362a227db28708c79b79116c01d4 +P = ab +C = c556a5f8ccfde5a37365593b88f24af9 COUNT = 27 -K = 3884c6b4427eac237aeceecb7c5c0c49a0b0344ec2d134dc -P = 21 -C = c22fafe4eecc3cf86214c3ae55ffcc27 +K = d38865dbb63b757be7c964eb224f66848ba810cbd910ea0d +P = c5 +C = d760ba2dec2e42ee420d410f97232ca9 COUNT = 28 -K = 28226e13da7bd7490a7f966ccfd83a0a641148c527242f3b -P = 40 -C = 3fe6739abf47d218037e07cb6716ffee +K = be9c81ea3a1809a50451b6d651c4ab9ee03dfea90440f925 +P = 5e +C = 0c39f7c5c13539551cd331baf3f2a092 COUNT = 29 -K = f2705e2b2b9f47187ee40c815c98ae68178566a3ac6fe4c7 -P = 10 -C = 1bdb14541af326587272dd764f8b24e6 +K = ffb919adb6d8bea8f3bb2e745f0965fe05d24d87abbd335d +P = 15 +C = f653aa4a17e0e44dac95a29eeec5949c COUNT = 30 -K = 45f54a2337771912affed0b971c1ea5cc336c92abd233b3f -P = ab -C = aab2f24bbf0def8d1a91310a8a27858f +K = 710a1b4ec9b996a05b3769856c69a1e1938aeee967467c4e +P = fa +C = 139f30989102efc53926cc94788f3c8a COUNT = 31 -K = c4fb23a9dde80d49461865f534dcc0d7a98595a90473c8be -P = 4b -C = 5b3446abe5f9c0e7a09968b7221f9c0b +K = 1816db6a8b13f03de262aa98456c3891031c1cecf508e911 +P = 94 +C = 580bc51defa311e0576abc146ebd9dbf COUNT = 32 -K = a21edf8bf96bcbb3555912523dd3a66f308a39b3e1d1d1af -P = ca -C = e6ff8907c2e2ee785b57202a5b2bc4d9 +K = aac6b926e722c6ac0329aec91e36012954627bbdcccc57d4 +P = 95 +C = 3501c8c4a2a9d0e3fc27c8236aca7a6c COUNT = 33 -K = c78f3951f755219bbab19a91040d1d4bfbe42dfd9d40702a -P = ba -C = 227ba658ef564ee3247c9d9ea55f7171 +K = ac432680326d74dd3ed7d0e46be9c997bab17f24cea4c085 +P = 4f +C = 35a71f10a0ac5b58bf0f472704d3412f COUNT = 34 -K = 8ffce8a78bc34b71fa120e46b470a55b0af2755ac3a7f524 -P = e9 -C = 583af3fb1191354fad65403c49dfc50e +K = 79ed741ddb18e99b6d829ba3dc5d2d5a440a90edf7b66fff +P = 18 +C = c5452573861794ff54eeb10cd0da3436 COUNT = 35 -K = 6e04a6bbd3752b80d7e12b0f3bbdd104b88b91d5d3f1d0da -P = c6 -C = 1b1ddfccf429ff1e4a5a85f7f9e819e0 +K = 746bf48ad61e6c6050c06f5f583d3933bcc891927a61695d +P = e7 +C = ad197a60acf4e199c06087b9c221e357 COUNT = 36 -K = b8c1895ab62b02ce7cfcce5815d038165269ed5b83f8834a -P = 89 -C = b2056f1d94be66748cfea84cd3425bc0 +K = 29614da33e68994cf9ae93e47db267071d908daa02c5cc82 +P = 94 +C = da355cf8b3df86918c8be6fe5d1f85b9 COUNT = 37 -K = 0381b7d50ca08846207056bc17475a1ef61da7898369ed66 -P = a8 -C = a9049af2aa630df3365acc32449f11f6 +K = dedbcbe93cdc067358548c3a73970a96cefb8e545019fa8f +P = 7c +C = dd7fde8b5b112999cf8eb38166c136a5 COUNT = 38 -K = 661cc2fc4ad59da9a59ce78282cab3495ca5b493ab296d3a -P = 25 -C = bc34cdc59144b29edc5d3a50f3b028b0 +K = eb5fee0b523b06075eaa79e4d2768180a96c318d0882cab4 +P = c5 +C = b10953edf12edfebb187259b14e9199b COUNT = 39 -K = d7669da16a222ce15b65558999378000a3c8dacdd717213d -P = 09 -C = f92e48e007eccf0f614bee922ae36421 +K = 9df809d57dd1fe152ddf362efc50515832dc5aa0d60a440f +P = 61 +C = c61880029f6191d71afbcc9a74a80e08 COUNT = 40 -K = 42c95e713dca7476074b9e69232011376580954db97337cb -P = 6b -C = 8a9376a94f9085e554e505b6b2488b6a +K = 326ea7971b7ec382f0394bf10d4d41a05e45806e7304ffe1 +P = 39 +C = 25ca278976abe8c7bc3ad8e8b4c05ea8 COUNT = 41 -K = 1cbbbe2bba9b7a856e7636324d32d432d5f1e364ee48d8cb -P = 28 -C = 528ccfdf37471ab51f8fb252c03f7218 +K = a0c1bc77d97b61faebdc0884b5b2a6c143694a7470df597a +P = c4 +C = 7bf208c70f73f0b8e534393c9084d27a COUNT = 42 -K = 009cefee883218ba90ace1035049cb14de45e797573b805c -P = 2e -C = c022bd10d8b5b89cbdd5efa56f380baf +K = 8e66b89def2b7774e20d7335425470a769eb1fd05898a405 +P = 01 +C = 6c2f6f723ec1a9d35779068c244864a3 COUNT = 43 -K = 673ce94375093070d7c84d9a12ddfb2496cd7bdc700dcd1a -P = f0 -C = 08a93ecd00b9b01ec062b9a751d2de9e +K = 95d4ef390f6d8a79fdc8d0ffe55fa59fd73bca264a05c8e7 +P = 3c +C = 80bd36ff27035834746f36592c43bbd9 COUNT = 44 -K = f535717ed284d7ed712b9873425e330e5a5c259497261e37 -P = d5 -C = dfc0a937ca07aaae10478b03f34998c8 +K = 8c2e800a03b49f0a8db0f80150e7d674679758c77b8cdf80 +P = 85 +C = f59dae9ddb6ae6ad812e46d4c9c07e9e COUNT = 45 -K = 92dc0822b198800c84f43c9044d1e4b6a0e6df70d3743611 -P = c7 -C = 8b7e035433bc655d3ce1131d5fd39606 +K = efa407a2fb69b657804d7269f4af04d3110b99d9c9c3ac89 +P = 5e +C = dbe4c89f47fa02200eb2fafe0be6d346 COUNT = 46 -K = f4d78ccfe44e2a911d5c5aad6a42d5980772a9f140333801 -P = c5 -C = ffb983049f073db49d08170163cefb18 +K = 70df83199fb165e9fea8841d28d0c3a71c796f3b35489a62 +P = 28 +C = 542f88ace5a8a56a607b557cc2f34f3a COUNT = 47 -K = e97edba82d77bbb551327bc3f6e9893a4885d97a28dd8ec8 -P = c8 -C = f2f8ce232370bca178e140e3eed1eb7f +K = 5b843f1655b4d1d397d881fb8b2077583d1d0225372b1932 +P = 57 +C = eaedf5e62cc835e631a249005b6264c0 COUNT = 48 -K = 040641acbbae5ecea6f41d0bc05588dcfbc74011632557e6 -P = b1 -C = a35d093bca00326af72fa848fd32fd78 +K = 665d8000113940d1c11c7c2e4dd76be331a0415350781986 +P = 8c +C = 88db7180288f95fcc51283b38a1b5ce4 COUNT = 49 -K = 89adcef83e63267d12e21917585d5d62b88141b92450043e -P = 91 -C = 31e0ed1a7f09bfa6263ea7ef6f445c7f +K = 36cb6d5903df7aba3a4f54dd2c2e492b43d0dac366f53807 +P = f7 +C = 20c39e60bdc094db17e71c962cf55adf COUNT = 50 -K = a6ac0fa080ebad361ae4f75843ca2fe85d2a5c4ef8abcb24 -P = 36 -C = fe6bd4aea8c5197952eaf63882c10659 +K = dc0fdf6ff90b548b75230a0104f19f6b1bc8050e169da5b0 +P = e8 +C = f0c2bb6b62de81bde27cc50ac5079e69 COUNT = 51 -K = e73215d5010b71b8e44650eb82aa7302ab602daa50e52a40 -P = 0f -C = 4fe813705b2c6809fded0bd438c819ae +K = 7f687ea76dd2de5372586c7998ba31a8212d45d4d8a78bea +P = 80 +C = 00cf8ebb95945cc7cde48e4ecdfe4d74 COUNT = 52 -K = cf3937ead3e3e05377a77f77a780a4ceac0938404af87bf4 -P = 24 -C = e5eb18cdea504900993dd6947f27099f +K = 27d19ec4b1171f9d8791ef1eddcb0ce9a3d959826909564c +P = b8 +C = 7b6525527caa15d97e91ec06f6ed02e6 COUNT = 53 -K = f0497c6e1fb9c359367261c4628b29501c3f1a8dfd243fc7 -P = 31 -C = d0a0d8aaa156fc2d7044b2e4febd10d9 +K = b5c0b032a91b8d48cf7c7c9e668eb0c55a68cee40bb21450 +P = cd +C = b4d729d818dff03f642c37bc94d99e2c COUNT = 54 -K = d4da175cf580d7ce8954700db8b8914505a4b5abe2d97888 -P = 42 -C = d3396a406f09210c04549fbb042e33f4 +K = 1919146f9940264f930117e909d89c4e4bfa88579971303b +P = 06 +C = f37d770d86261a3fc207ed3b765f3604 COUNT = 55 -K = 07a50a1f72f0fe86d774a52ef9e102697131a64824c8d2ca -P = 4e -C = 19c2368f425584e23580b7ae4bd8c6e7 +K = eb2a1180ee5e98c33a321849ec18bf98249aa99ecd2e62f1 +P = db +C = 76c05307d80d00c4eda088ff32fe631e COUNT = 56 -K = a790b26f1269a147e26c6bf56a73aaf1df910f78afe2b287 -P = d6 -C = 5a5b1eaf49d469285cef35a533226c11 +K = 5b11ad366dc5cfa92fa7fe1c33e886ca437ad60d13a53874 +P = 25 +C = ac76ea0f22763645a0b110d63f411130 COUNT = 57 -K = bb37623c3b77e58f09c09303046e533e79a0365719cc669b -P = 8b -C = 29930ec28f59d2ced18d41024bdd203a +K = 22fbd7dc690e6400e83c09ecfcba6b7799e16051828d45f5 +P = a9 +C = 2dbdfcd223f3526ea3b2b1b147e372a1 COUNT = 58 -K = 386be0d3ad31ad98009c80682f15d1e055648e9c742979b1 -P = 20 -C = df1ea0e865f6a64bee03bd08e4ee6f26 +K = 31916b92d02551e64c0079d64d67b2a742a3af6dc390f8f8 +P = c5 +C = 5c78f1688218c7aca67a4ddaf8ce6532 COUNT = 59 -K = 976082b795842069c2eb46b4bc9a9b2fde8d36461256a888 -P = 52 -C = da628a7b329009d4b773ca6cc313952b +K = d31cc56cf97759acb8dfdd18825d8e25db4c64721ed53d19 +P = 29 +C = d479ade1bb8d7f219dfcc7d2d88ca6a0 COUNT = 60 -K = b6f2e974def6d30e32b03a7f491c1394d1fa59eaecef1838 -P = 4d -C = f737bb47417362f645f035847bf406ad +K = 20608c5592be9cf12b9854991aba7318fc15bbc294ad1bd7 +P = 76 +C = 43476943c67d5993f2e99b7ad8f32c22 COUNT = 61 -K = 8b9b6c84969ea6576c04a98fdb3c9539ce9042568c4c298e -P = 1d -C = b344cf5c4963a6bbb674c61ec725d66a +K = cebd475ee3ec340b7a1efc39aff8092ca536a47f59128be1 +P = b8 +C = ee8e7b3cc14617bd9deb821fc2f5c96c COUNT = 62 -K = f2d80ff219c57413de1bdf2bc3c40aa8a9410e17dee2e626 -P = fb -C = c8354a72940199b35a7d54ce5e2dbeeb +K = 1fde591f6ab74642c542097c00620e43e23f80dcd716d6ce +P = 20 +C = de09ff083ad8b315f38e5e97638de6a4 COUNT = 63 -K = f5c0b5e1bdcddfa0cd1e36efd2c42a18c2d767d52ba7c665 -P = 1f -C = aafe7d1eb3a75a8d925b5b7398b1d4ef +K = 5b7cf198026cd710f650436e3fc1078715f1032b1d242abe +P = 23 +C = 2f1fc2f2847a9ebe90bab91de19de4c8 COUNT = 64 -K = e1b35583bc2d59a7a8373b24acfa3ac7a70c5f3ad21e02e0 -P = d5 -C = 0e36912f20b0a7bdfb83276b5c28e0f5 +K = d85f8579d36aeb2973959e32e5d37e4b8592a763832ca58d +P = 5a +C = f92dec831539f521a35aab251e93d860 COUNT = 65 -K = 9d83225dc16aea5bc531c81963c62c9381239c27ea89c3ee -P = 44 -C = 453f7cd6faee900ad3fb063da43820c8 +K = 61901b156bfa975612e46db06b404c9a664ff67d86e9fefe +P = f5 +C = aa66fbe29a8c26da9fc982e7ca542dd1 COUNT = 66 -K = 21973a79fc8f9cd061506f30626f1711148037b0542292db -P = b9 -C = b81bf7a507d0ced0cef19ff6a1059183 +K = 12b998605414fb01a130db3d9fec4564f17ee3dedc86e425 +P = fc +C = 044c1673d9fdcb584e07236e69efad6f COUNT = 67 -K = e92e78f94358b760cc13189f9ab69130146cda02741b7838 -P = 0c -C = 7b37a926141fcfad983f3209b1b57243 +K = 565fdd408b2c5e15df9046e88e9584aa5104e1309c5c2e63 +P = 72 +C = c341b67085134eb7ebf78c7fe765cc97 COUNT = 68 -K = c440cf67906c06ea56f86b3ad886998ba48f28137a1da6d5 -P = 84 -C = 9e726af2a7185d5c30c37b4b72b0c274 +K = 8210a70101063ad45ea5ddf7021ac383e806ab6f30e2d8c1 +P = 80 +C = 589b528e802eb360b46b95f0b103599b COUNT = 69 -K = 3f2fdcd19c547440c283996dfb54ca7490c993cc4159c559 -P = 38 -C = d0de7cd64501cb2efda262a491a1a8de +K = a7fe230fd939bd8217907b46ca0e9a964f56879bf6d848d2 +P = 30 +C = 01d01bb34070bb8ef4febde26ec8cd28 COUNT = 70 -K = cd7e2849637742d73286e1ca59bf242cde70a80ce4f86e5c -P = 41 -C = 46bb2cd3ec587f8015ead92f7c7af617 +K = 7edc8b3b50d0cdc4116a7da9a5b8e658d4ac9ffc16a14e62 +P = 83 +C = 1747e9f4662ad4c3df8cb18bfc830ec6 COUNT = 71 -K = 5ce536fccf89e7075f96b5e2af8ac130c033c80e8ee45ca0 -P = e9 -C = ae587542360188c2173fbd3b2bb9ace2 +K = da919d418fc2d8c2a44f550f0133fb4f5e28ffb3edeac67b +P = 9b +C = 4e2c68f87b22e2ae8f6b5def836fccaa COUNT = 72 -K = e186b544149995224b1f4830baca0aad50831dd0d3174e20 -P = d9 -C = 9566e1c1fa34bd913b3487dcd5dc2ec6 +K = 26f623a67895bc5e2b49f77c8f01d97eacf502225df12704 +P = ca +C = c60af53c5a50fe7b6b2c0c2c5c2cf357 COUNT = 73 -K = 852b3dac9d3a969db91f6fde8fa4d24826a131dc5a106ff0 -P = 2f -C = 6de0ad1e90401b2521e6d0a28a53face +K = 07f1ae84e4f36997225e8038df6f058e61a9e97b02aee746 +P = 5f +C = 54aafaf45c26372ad262581fcb826696 COUNT = 74 -K = 860957bd073a1daa30adb5bfb84156650fff496f313efacc -P = da -C = 094f3456bfcc32683298f077e579b982 +K = 0b543db468f2ebbbe5ee58fc81b06ed783c4caaa5b22a207 +P = 91 +C = 5e66bf0fb7eeb2760e29139c995cdcc3 COUNT = 75 -K = 6d3b97931a0805789fd6efce53aee4dc471738a36ec8ed04 -P = b2 -C = b6edb66ba5c80eb0caa587dc78ac8165 +K = c65090b325c1976dc3f5b8e56939fb2f2d4b126aefb24eb0 +P = 40 +C = 7eb57cac067b13e54341c8687c04052e COUNT = 76 -K = 38734449974d49e15e8bb9d7f1c188f7f4cda4a5d78e8cb5 -P = a6 -C = 3585525ecf6cc9cb0a1cea44a34f6ecb +K = e8b93f05a3998604fc2c833a845ba1226c9cf8ad8ca1a975 +P = d9 +C = 66522a489383240873a140cdf28e403b COUNT = 77 -K = ef79b63078f5988cf36bd392f10948eb496485efe8eebdd8 -P = f6 -C = 5ef3ca68e535dfd867a06e6c8803de37 +K = 37799bf65c6ced6041e67d9cdf3783c6d0c1f376312aab07 +P = e6 +C = b00ebb549100fc917a2adb385f20173e COUNT = 78 -K = 9b0462805c6c9fd9bd7452108f6bb542f832c8fcae5a1d74 -P = 5e -C = 39c4400f4b3204b24bade0ec3181a98d +K = bfa9fef796822ead95d2953711b92cdb62406c059a2d849d +P = 5a +C = 0c107154f34f821fd68da3eba4a5318f COUNT = 79 -K = e0c4878dc636a391967f722abf79a57d56e5fa417ed7c092 -P = 46 -C = 420db83b9e1e0f4dc9ac171ed63307cc +K = 34101871a4c7189b1fd8d95dda9bef2c5de7c598e8dd5e02 +P = 14 +C = 500f2e4dbf89a3cdafbc50ba91043144 COUNT = 80 -K = 4c4892777b4ac64550267b838b10089c1f37140e98a66b60 -P = 64 -C = 00033772aff6888e32cc340e9e1e48af +K = 418ca0efd306c5c0b124039edfc2a82c5bcbd8aaaa77ea5b +P = 5d +C = 55facda6e3e9fce85144f5aa00b5aaf9 COUNT = 81 -K = 1364901c9513f26037e3d0b86f057b1d6216a7ad36fedeaa -P = b2 -C = da10bf7a6666ce925fedbe33d8610773 +K = 9ff0afb0aaa462b1cf81b24236e7c11f93da514ab4442ac2 +P = e7 +C = d9a69ca895ba3849e15cb198f843a6d1 COUNT = 82 -K = 7c6182224daad1a08bbe05909d158cbff1c343603c668da1 -P = 11 -C = 00429272d4ef6969c612e79c759640ee +K = b3e81626fae1620414c4203e88f71ac8bb6410b873a35524 +P = e1 +C = da76522bbf8908b397221ffaca6a401d COUNT = 83 -K = a0f72eec64bbd4f96b929b9d8ab715a5d0c92d5102b7315a -P = 34 -C = 6e23589095cd628ddc0c6b66741af41a +K = ba4296b0cdc454545d359fd0b6c66f2f2893a8b7bc4f658e +P = d5 +C = cc73937b4b7af3c8fb62e1275c0f222b COUNT = 84 -K = 88654c0c5cda83e65d4e0d1f2ffc89cd16fce08edc3db2eb -P = 7c -C = 047d9fbde694eff74d99ddb77eb2bab1 +K = 2bbf35d335f8d06d264671a3eb3afbef0da2667d75ca9d46 +P = 53 +C = 5f6e86903f214772b8cf4b6579386954 COUNT = 85 -K = e9f134641552e30e70f70660f987d5943e0a96ce639fdf78 -P = 75 -C = a428f0c4e1b5bcc8d62fbeb9e798d0ea +K = 414381076a32231d07e42fb8436c6ba4a2c3871622639310 +P = 8e +C = 852fb0458d010627a18bbed7483982fb COUNT = 86 -K = b898789e3cabab423ba8791681bf82f76dcf99a55392e834 -P = 87 -C = 703fd805b22359388148ab4697708816 +K = bd79b9fc5ce0df1a1d02df0bdd86fc7283886f4855fdb8dc +P = e4 +C = a98b6a0e28a27a2488558501517c72bd COUNT = 87 -K = b9f306a06c624998b15122cb32bbb4b6b91ac7fc56474134 -P = 44 -C = 718344348554c088b2c68cb51e48ae8d +K = 3315e341e5a32da00a0adf957de90330a4f5fa7c5ec336d9 +P = ea +C = fc07ee765e8b9ddc62c83c690550510c COUNT = 88 -K = 5cca3e9c484232737fee0692d90d77e9ccfa966280faa843 -P = a1 -C = f4bc305606135e21cff6d34728d9b1ef +K = 37986f24cc4dced9f0d6ca02b8d0917f0decad3e7cbe9aa1 +P = 0c +C = b7aca9f897211f91033ce91fbc6fcc35 COUNT = 89 -K = 3fa6052f63a3a65c839587d4fc8f7954e601b4b245710d79 -P = 21 -C = b23f3d391d81a86005705476a85bddc6 +K = ecf938415bae2bcc3944e77e02a6ab5893e313124b1d84dd +P = a5 +C = 8d95ba64c7eb5c25920b55f2d35b017a COUNT = 90 -K = cdb993f6c180dd85de91e349f7e84635267d71d82168e724 -P = 7b -C = ef06d22ad4f6f494ef31cd1e108511ed +K = ab7511b5d9fce9e2a01c9aef7cb175c5f7af78353599ca28 +P = d0 +C = 86de9335f3dbab5dcea998e92116d63f COUNT = 91 -K = 8141daff0603a533661ce4b14c486946f94fc661cf65a54a -P = 55 -C = cec7ffc37a41d275446a390eb6c2e7d1 +K = ac8d025e7449577ff3bce91db8161134f55f3888cda09412 +P = f2 +C = b7715ee977d5dfcc6e7df9f642e7dce3 COUNT = 92 -K = 17681ce041c8796c4f3db9ddd5b92c7f4c422e2288c4bfe4 -P = 29 -C = b943cfa6776dba6cd15c8e473cf8de25 +K = cd4c20183797e28dd6410c237c9eca642af8ab4e5d79aa69 +P = 6f +C = 82f424717f83c590f6335029e9dd8771 COUNT = 93 -K = 4b7c1c4e5fae58192b93438a078628c79fe34d4afb4f36f7 -P = 05 -C = ea6cba2e29de789b333860996e7890f3 +K = 364584cbab912127eb20ccc14078bee141fa5962d7f3d241 +P = 3d +C = 9b07bf00802031539600758fbdf2d029 COUNT = 94 -K = 3f502a456384f784919b819aac232ef71b51cb0b0e979812 -P = fa -C = 78e01b5c36e11f872eb2936c9f38104d +K = b5085bf3649b1d47618252ec15b71aef95eb2b389e71112c +P = 27 +C = c526b014cf6105a7e40de7e04a366cae COUNT = 95 -K = 902c989fdd5bae7a66fd103e4905a591b4278b74bd68811a -P = 97 -C = a6fdc66bd7a7abef6b04d50b4cc4601e +K = 28e25ed98763ab8fb12619ac416be59e28ac20e5dc2fd866 +P = f7 +C = 5056583482a5a284afad7ef517144184 COUNT = 96 -K = 8983ad41f52dd96adb2a299d7f1b33dcfebc2ec2ed095c00 -P = 0e -C = 8dd3035781f68d8bbb18135d9eb84860 +K = 219a0ba6be6f35e277cc7d02b6bce5ff520059c607f6b716 +P = 16 +C = 496e90d2e66568a7c3221093e0bcc61e COUNT = 97 -K = 36309fcedf6f59db37030957355676a66c839dce14d478b6 -P = f5 -C = 485e92bafd2602e16d2bf121e28c8b80 +K = 79ed291e91f08f0490c8dd260619613ef7acf8e1977f0d65 +P = b5 +C = 8d944665fd58d34fd8177b7086c63e63 COUNT = 98 -K = 868e1245459ba8f2fee5d2a02b72cccb0b4dcfea008eb95b -P = e9 -C = 3491f7a895eac0c2fec0bd318b6fe992 +K = a15388b9cc73c35bbb27aa1289f8401d4370bf540a3181d8 +P = c0 +C = 80512f363b1beee28fb276b3f8f71c53 COUNT = 99 -K = 95dd52e96f71b21f87381a5b2d6039f3fb698486e7228da3 -P = fd -C = b531f17b5e24c1f37ba07d8891c7acea +K = faa6f48c1975b749947af93c6611f1e358e0985a9105b33c +P = b8 +C = d8caaf3e1d4538ca818471ba988c173f -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = 1b9a8346774872d8060ede94a0e2007c941c261c2a0cb250 -P = 37ae31a9320842d246 -C = 870c035c08fc1254e4cfc62adfa2418284f90683f19c593d +K = 89fe5e4c72414bc926e457461d05a68f9db95ae41cd771b0 +P = 93049c1e04582f58 +C = 89d623994a2caf93b2244b9338222854 COUNT = 1 -K = df06fa4e968e6e072d49460ac35fc2e4bcd9df4d5c5c4b6e -P = 1ce45eadca9ee58702 -C = ed9b73ac30ee58c561afe1642cb052c2f0da001151dcfd27 +K = b2a3f7d6e9afc0ee82bc819a6261f3dfe06633bda4d6ef5e +P = 19858453cde35994 +C = 965e24bef2e01ee5507904e8234b04ab COUNT = 2 -K = d9ee278ab3360a76c4a6e235fde20571c795000103fb8907 -P = eb7b4a1dabde290aab -C = 758504ca0763b90fb34165b00ed73995e7d907a235a61b0d +K = 769aad8dcb7d2e2d7a1d07d3a6330c5bb1b3c910bf750c05 +P = c796e98609cac5e9 +C = 3c6f6041b054f72ccdd8a4c5cff6ea9f COUNT = 3 -K = dbb2c749b262e37ef55b50169b04520782548de5bfc6f20d -P = 88839c2c9b4e907450 -C = 12d991963f3a5a9c0781f050520678bc1cc0326ecb011f52 +K = 90c2d889b6d9b575eda35f9c9b86bee171da86b3bf9acc93 +P = 60d3e6fa7d8536db +C = 97f1b9bd74eac488e59644c61b9e43f5 COUNT = 4 -K = c8c1d135cad7c7474b27aff400ddf6c08997bf39fb646161 -P = 4454ac5a8bf1d609c6 -C = 0a7b7acd0a71cb7e51dcd9da41ed6e637b34c63138a08f3e +K = ac6852c5cb7a60d09b508934d3bf0be74a89fbc5aae1ca18 +P = ed9c4d1145e463d8 +C = 1eb0137f32ea3b7f12db5b5310cb6948 COUNT = 5 -K = 6b6c13676447800eaad075ff3a3a35448b6663f1e53b27d0 -P = 6efbfd378c45f62f83 -C = 04db3bb29174e39a1fab00074a6593a5c56035e18d88643a +K = 37d90293706e0343bfaee44d153da24b5a2c539afbeec3ad +P = d2bd7fb472d91671 +C = 7c0803b19ae166d4fb0f116edf55786f COUNT = 6 -K = de64af9cf1371fa3a4c968371e78a1bb9399b4761a795f56 -P = c772b2c4c29b1c939e -C = 68393847aea70f5de0a0c1aea73bcbe003ec9ed92cba4221 +K = 81d13a442e133d62706aa4bf710619522fc8ab41bbb4e923 +P = e1af431ace0463e0 +C = a9dd4aff21b70fd24f799f1be47858b6 COUNT = 7 -K = 9448adbdca1712a1ed605ce4d479a51b0abc7d74e31b0a15 -P = 4c08a0c510bd94a172 -C = d29199670540fa58bbcf6910db341b3b3639f88ca34ce284 +K = 86900a2bcab398b409b8ff06798f560c135575d288543a66 +P = aca53bbae991af93 +C = 95a6d5d88ed69cf8285a566f7c5a4452 COUNT = 8 -K = 44cdaae442903629a96004facbd860fff3673546fe41ee4e -P = b481594024d74bdd0d -C = cc8f3be62f1005ab79019d4c3ed101df0bca13275ead0eaf +K = a5e47d48f7d91c00f9bfbfb8174c39765cdfc07dc33b2822 +P = c64730e9aeb42756 +C = 79c88e9824900c02df08577409a88b29 COUNT = 9 -K = 12c87fc55fdc4fcd7deb09477e801fd074ccdc5d6f8341df -P = 35fa671f0d585a4d3c -C = 105121ca29d1cb852f88776388afe91c48e0623422b6532b +K = ce300a231cb5b63b46633828810db52b63687922ae83685d +P = 09683870aeec81e9 +C = 23cfe480966e7547e5fe6fe9322411fe COUNT = 10 -K = c7824b8ba6814d59a5b5f3c23f17ef937eb5b5b7c0e07ffc -P = d89e20fc98aaf318d4 -C = ac4a42e408c58ed3786c0155064aef4daea3179e477de1a8 +K = ea490169f5702cd854e9ca89cebb59428e1a40ff3b67cdea +P = 4f1b46da3274e985 +C = bde078c6a1ad82598e76c0ec65cd7523 COUNT = 11 -K = 9fa9a85cce58e16c9ef60de1e081f3c62f83400af56afe65 -P = 74d377328d4f0ae5e2 -C = fbd9a9e0a355d076dcb5f81cdf8a97a647ecb74074c361ac +K = e07e76a1f0148e6f86d44e42bed312de3005d8c56c3449b7 +P = 607097876ab655b1 +C = 1ee31910b182e651b3bda01389c1d8cf COUNT = 12 -K = 2f4ec13798f0307551a1d6b93dafd5a00e38f899ba0c399f -P = f35dc99a8174a43c53 -C = d706af7d8449e0b4dc19351a4f9a63148514f1e678774e53 +K = 704074fe03dfbc612c216aad4dc52b5cbcf5b7d7d30e4257 +P = cbdae405b6f66575 +C = 22d46ac9710dff47d9337a90e4e1c1be COUNT = 13 -K = f160c13f7529474a8ab2351bc658f53e987e806f98c610e9 -P = 939625a5db3a1a50a4 -C = b5d52a47312e47a09c242ab61822273792b078476ea70a2f +K = e1c931e1e0a2a3aee5e10dbdff4ac9d93a7b19b1d4af4085 +P = 0b5073ac8f1112ef +C = 18193ba2f2c34857e3065e4ba668ab30 COUNT = 14 -K = cb61b4e503e6b9befc355ad66ee43d2a3f68be00b2864a2f -P = e8353939836bb11805 -C = 6736554c7c14a776e6e575e2fcdeaedabe36fd065e093d3d +K = 3aa996d92377d3b2ee0d9fdf486461bebb67a5be86938690 +P = a8d9bfe7802ec3ba +C = 578c907a7916edd55a53e23c771e0aa6 COUNT = 15 -K = 2cd3816637ddd2a41b0ddbe635e9bafcf38c4bec6b015c44 -P = 822753be083be0eb46 -C = 7a62302c2b7a18a13a2442927f4d52095bd2c0fc25f8b1d7 +K = 6085eea87183ceaa7432e29cc037ea74c8aa333767339960 +P = 0eda4fa2943e1146 +C = b609ada50afe3f8b39a98770a6381c7c COUNT = 16 -K = c49107b56882c35b19acaadb7574dd9df69762ead49b6c01 -P = e31fc954f1cfc2f249 -C = 769ac42734e93275754716f5098fd662f3fe2235e937b5b8 +K = a0180bc9501943245521c5e0a8834bfc5eac0de65ab434dc +P = 0ca99c8a70b698d1 +C = cf7d439b45ff64a797517c8a0a6a33fd COUNT = 17 -K = 965b2c0cccd503cf39dcb31ff86f014629d14f5faad55b5e -P = 8827b62744cc1c6587 -C = 248bb3fb22fec85ee42b3929750ba5d7b0d9ef1349fa1ee2 +K = 7eac5a040da438e0df8c34596295dfc1e9d062a4d77a22eb +P = 5442a5db980ee999 +C = 207aa4c6d80a3b77b55f9b89bcc1e1ea COUNT = 18 -K = 84e4307200d1dc024eae628e8e57b172d618c43963e0443e -P = cc3a7c679fe1accf2f -C = e8c6f218d577bb2e0c907e446093fcc43708e0b73800950b +K = 9e20279522d308926ef59bd982d77ee40f6380902e0bcc9b +P = 7042339e288f4eb1 +C = 905e21321296a3fb055c7c9ea16ea291 COUNT = 19 -K = 022fb6c997bdc8350fa9f602436d717b15c86e0beb0eb5e5 -P = 7b354226358968f57d -C = b2840c8670d04aa5139e18bbf1c02306249bc7cae123d250 +K = 442c601e94d3377f4682b6a7cc6b367d6a05b25c2733f76d +P = 3a286f54d2bd1477 +C = 6f22fef33326b957c4d10523b3d43c75 COUNT = 20 -K = 11eabd50ae3dc8b0243157a692612fb96b5ceb38c095d63c -P = e859b931bfad6bf6f6 -C = d5abb9e35d6d98ef0135c7d37df99ae0bde7e254d9bff47c +K = 9de0e76f188c3e5711c15ce5cb36aa97fde6facc77502f97 +P = d9e3bddca3b488c6 +C = ee1ef92b6dbff392449a3c01178e6388 COUNT = 21 -K = ed809274488eaaebb4750aaa6d3523711294f206666ebee9 -P = c4bc813757ee23d978 -C = a1e531fb7c5f7e6caba707b280e6a89b3d7a315ee6ae369e +K = 65163976b5a06f39b70f26594cd6bff27f9978db069ab617 +P = 28ffccc93ca7a7d0 +C = 4bcd9492694b99389f651dc9e6db0e86 COUNT = 22 -K = 22e97314ad8483c52206d774e998147ae7b52d88489d9a18 -P = b350eafa2968541a96 -C = fa0880835ee85b5b0944046080853954f9e7a33ce6c2f306 +K = d9525256218ad0337c98ce7a2627d0fc6fb176e144cff108 +P = 5685b31f3fa13cf5 +C = 86afd58a27aa5ceb35ce237c696750a2 COUNT = 23 -K = ac72e271e4173b280d5a18ca9a648e8ac3f0148b1befe581 -P = f4646137d8f17ef33c -C = 6859ef464cdb308859e1c8e0d76a2c005cec95bba26dbf04 +K = 6c97c7f8f5c682931c3d9c4705641b9c2cbc298ce68b2925 +P = d6adc9fd6dac38f9 +C = ab913b42639dd600aaf26253c06d1744 COUNT = 24 -K = 7c20fe27f643b99fae8e34dcc49cc9691c9c16371f2bf01d -P = 1ba81f0fc1d5011b81 -C = a05fc5ff9f1d0e3dc371bcbc891f4a4d250d8ffeeff53eec +K = e5dbede76dd54a86e504f755e9d5e38c5d01e81fbecafc45 +P = 8e2f53aa59bfda9c +C = e66473f7e68b8d7edb4ad652fcd77fb5 COUNT = 25 -K = f39a5a41f2bd743045d72ab2e7a1e9bab2a7805dbc1f8c24 -P = 4e7619e1a8667f7418 -C = 5cb788c197d44646add9f6df230fa5d7449e6a306f2857eb +K = 9fee08c996357f6b1bbb9e3584ddb3d520b442c213647687 +P = 33c2d5268b194ff3 +C = 7b6a524ebde78a6cd94ad00b62ff871b COUNT = 26 -K = c16405742daac4bebf3e57ab0a3d9ce1d554de2dce441497 -P = ea4f41f44b1add4ffa -C = 32f10c898f96a3e6154937ea00784662ec8bf62912cf1710 +K = b0fa4fb49083278280197695236c824ea5225c204d1ed00b +P = d01cddde3c63e427 +C = 362db0940ebbc8e22ea023931af24bc0 COUNT = 27 -K = 6860da713ffddf78213c8172fa9243cd9ea255408059fe9d -P = a31cd8f7924093f92b -C = cb35790a576117ddf9295f032c402be20baa904fbb1dbb21 +K = 85b3fb8b61b2d05a9ea7685b7fe223dee28976321bce8e6a +P = 3df57c6512314d88 +C = d5c2ffb28fe8d71c28e122992655ab61 COUNT = 28 -K = cd7828e1bfbbbd07eb8135bb4f6831b91d0d78cae021e899 -P = 70fd84f559c79c45e7 -C = 11df078531df5117af275121dc832eff31d85f80838e3bff +K = 1d15c795426e42e0617f178c6cca1efaf93c787e96c72fe3 +P = 7682314f1bf41c71 +C = 79a553d6ba171c9592e2fbbdd7215e59 COUNT = 29 -K = 266fb2f198c4a9948b117266cd3cb46eba6636e48d676dfc -P = 0ef94d4e789ab5d1f9 -C = ba252a93593eed201285ad4828e6cc70d055e2ae23c5b7d2 +K = 503fc9790a7c7b188c42b5bd0cb24e08f310121e64c417a9 +P = 62e8e23c1481899d +C = cae142bcdd4e783fb5dd0f49340a1aaf COUNT = 30 -K = 00c8c985f9d9c97855ff1aeeb6066fe748487aad7667623f -P = 8f8ff9141c9c739cbb -C = 194cf14adf67e94fcc7f02d293a73b98c1d16644053c051b +K = ef36c4eb55ef1ab8a31d3babc1304b3ab55d47974aa505ca +P = 8b1c5d31fd78056c +C = bc85ec64bc4b308f6707a0115b4c535d COUNT = 31 -K = 9ba839700407e038944d8aae7b9e8f97175263a2755f9b05 -P = 94e85dab77264eee43 -C = 4923ffd5be21630ee51fbd29808128c4445443074763f70c +K = 1abc2643a4d7733db4fac0710eb8ae32ef85395cbcdf6875 +P = b59b83c0a66db800 +C = e76b08bc1874d45c9d75ec9cb343e588 COUNT = 32 -K = 503296c8ce9a217b448c4bdb5b8753394a509a28f30bd86b -P = b865996a28f403d8cc -C = ac0316b8923b9f0f2cb9084b29211f1bc7df5a36e79a121c +K = 7cdec106aa6845df6995c127d616558091948a029269f946 +P = a6e56fd7d5ce9786 +C = cddbecbec79c7bde2bd90b7a5972259b COUNT = 33 -K = ca38fe4248bc71d718f17ecbdf80958a303d2e24fe0a35d6 -P = 895f3377b4c6a0f9a1 -C = 8477838f859d73d9cbede49c27fdf9bb91b7a36dcf3d4ef1 +K = 293ad6ae63af6064d38ef7c833c540b607f8e6777f23aac5 +P = 2b1100de113a92d0 +C = e57e7768227815c2c4496ad10b1e9f02 COUNT = 34 -K = 770310b0667a2fe314684b382b5c3fedeefeacdc004d7914 -P = 2052d632788cd4f2e2 -C = 66bd5aba97893adea649a1834d61885a8d07a2ccff8d0bf1 +K = e6b6a810c65e8040a73857a51229baa3b2349abb316d5afe +P = 9f27bae892f62b70 +C = 25311e86c674c2c6895607f17b044fdb COUNT = 35 -K = 6d1b2da29c605bf30206c86e41b339c1efc66a669175ef40 -P = 4980c32fd1594b5dfb -C = 869838b22bce885fc18ebcfb1fec9b0d0fc7e4ffedc5da8d +K = 1481f1247a3125c6bffaadac7e2a36200ffd5fd280ebfeb6 +P = 279e9640bcc25d0a +C = 94f2e19333c7c567004706acbf0a916d COUNT = 36 -K = af2faeb0bd328addf433c92a4b91b505876cf24798b04baa -P = 26406982d617e6091f -C = b19907a8f3a1211046e0f14989d46f81b44fe3a95efe3237 +K = 6ff7fe9ef827139740b2f19470cea879a840fb15860cf4a4 +P = 770b2b21a1f53ed9 +C = 81c7d53bd5f42311d1481c8d53d0819d COUNT = 37 -K = 898321afdc396dbfb4ae9790db51832c55b89b7555332ab2 -P = 9ba416425bd023e86b -C = 5639ff0e9dc64ba8876dbb0758d20214630a05d256ed8a83 +K = 739209e969a2b34665ab1f32792b3bd1bded668ef0ffde27 +P = 0214421589f1bb5d +C = e016eb0a631c070ebc7bc8f7c9944135 COUNT = 38 -K = 29619c73af8d319db46f0b1090ba2b52ff68c2b2db33480f -P = ff9640d8d3962f1702 -C = 7988a755397f353e8977cd2be122331be61e66d66571697a +K = 319b9769b9efb5d49b36eae00e4fac31aaa7af1792a89180 +P = 1d8f43a7f5dd5619 +C = 09f685ac780e7a83992ea32428271999 COUNT = 39 -K = 2621e7b57c2de3e1b6485df57ba202a343b192add085736b -P = 5fdcdc2bd71d5a0490 -C = 6f6fded56a2d68c901fd47148704e1deb8d05e6a5f02e58c +K = af8709fe2403a0e1417f17126fd671944f2ce6eb67660ca4 +P = 09b338cb23b91108 +C = 86f748c42026360be7d9fa58700591f9 COUNT = 40 -K = 847772941f10326e4a017eaf217159e7b6a2f90966c11b68 -P = 595d562b3fea241beb -C = e2e91941fc343dfb57d102d01c11d7a019d8c0f033a51a27 +K = 4782152c87da1ac3ebfc2012869cecb6b683d3af84aff408 +P = 1ea2a6bc848052b5 +C = 280ac1ac2d3a1111c4ab9e5f481c7972 COUNT = 41 -K = 94dfa90ed41f747c7cb96efe1c734a16681e2f39d486fbd5 -P = e240e7f365183e2182 -C = 5145cec98712e1333d57c23886677dc89e6ca8edc61b890d +K = 3f97817dcffd65f7b58d13437b5744a35996ba6f6c0a1055 +P = f813e43f52092631 +C = 48230a921738a33bac97e3912056c015 COUNT = 42 -K = 73159cbf1305b2bbbd7f9497ea927b504f1ef575888b2042 -P = 28f962e2b4c669a11b -C = ebbf70e40781ae0b7c89bed30c03f617b9ad6519db09186b +K = ce507cd506fd6c0497a5e7f2b109a6e5778026cd04030ac6 +P = 091d0ff0ec9309fc +C = ae45a4f7d27b2938af66218a1f1bc485 COUNT = 43 -K = 27447e214fba0126c3c50742df21c1db47edfb804b7e7b2e -P = 64cc3579ec3d16acaa -C = 093211d740fcf4f86907109efa7823177c1eed85adffd73d +K = 6b17e1b15c1a681a83f69515bcb1cbb8f48f565f320b6fa7 +P = 2abba026e3957ac0 +C = ba09f7c2d3d8638a1a28cc1dd66721cc COUNT = 44 -K = 43b8a460882ece832ec0d1cd929313287a02505d346ad626 -P = e5afd7569afb79b1f1 -C = 7904c88f9ecfc479ba2f34ec067e59cdf69a3a205de0e5fe +K = 88e9ee267cc4d73f494a3dd8ab096d5a014ab669cba9859e +P = 948bbebd4f17e0a5 +C = 0d2a01f29e1248d7429dc7a53f26739c COUNT = 45 -K = 5889cadd849b14696d97330662605097eb9137bfdb3b8680 -P = c96b5917d4109293ef -C = b97987c79539fa530f4c3f7bc397cdd901ecd99d117ba6e7 +K = c0ea9c3d13657cb6c23a152520a55f4153bc930a23d7acd5 +P = f90fddba3342b0eb +C = 074bc94c5fe169bd426ec65be9be5735 COUNT = 46 -K = 6c693a7a3d629ce53a89f2fdd528c79478d4c206dd179ad8 -P = 7a877c51deb030eb00 -C = de61774d7c50fe73aea89f0c98ffb61457319160860098c5 +K = 311ab605d30c4ce58d33bfa06059c55bab735ba6582da9fa +P = 24249692f2b31600 +C = b9573470249da8c69f14ffd2b181b3be COUNT = 47 -K = da585b94b5a2ce014939257392322347babb7ff66f1e00ec -P = a020516d48a0331b43 -C = f82f5b31ab60e03a99eb5d101d4d8404f031a8673eaf40cb +K = c96cb3332fd376907c7fb2a46cb290fd58134dede4b2ac16 +P = fa9ea04e9548d27a +C = cd44b91e062b0b741cf5d77da6a49b15 COUNT = 48 -K = 4e72cc680af65cfd97e1d9b2042fc9ade46a11a0e9c8b9fb -P = 4019844311d457704e -C = 9e6868f7cbd75958cae95dcb2a4a99cac71c77a8c2389c11 +K = a73bcda02a4d292659b26b233f287a810cf16a99fa72a441 +P = 589ce1d5242f63f3 +C = bc55ae8423908d56dbcdbc85fb828b4b COUNT = 49 -K = 1536d03165f9a2bb8522a59315970d46a189c4b50a9207f4 -P = 1ac63ffe16f0d13365 -C = 96d66063d1a042e009d87159cc55f60e2226708331afdf44 +K = bba5c6fc00032349cfa24834f1ad4740d70b2b648a03e556 +P = e780c2a3553b8dd3 +C = 7b9ba3d85321e3b8eb7797d4b59b703a COUNT = 50 -K = 1ee22f8f1b33686c8661743863be1c5af7164b4a866db145 -P = f7317fda64181a730b -C = 446b87d3b5e8568f70301a0c2193424681eb0d1c9b76ec9e +K = da370c7cde6ee157a6d661b2cf2298fd7df57bf973c4e2d3 +P = a0638a8980f19dbf +C = 7d6120babe0722dbd0f6e529b7e29845 COUNT = 51 -K = 571b0f006a08e8e63ef99ce6c6c19114028e3ed4ab9b4593 -P = 49a037e67ae3df8a9b -C = eafa574f8ae7e1d01f282390e62f511a8f2c06d0d2855aca +K = 89fd5de3f0306276b83777b3bcd1152558c96bdd3e865082 +P = 88ca2d02757c7728 +C = 039b5a463ccd7d57f3fbbaff14526042 COUNT = 52 -K = 8760f199b55c3022f210302207653bbd7ae28d51f28459d8 -P = 75f7a46a6ce4c4c567 -C = a0c9c42f17740c920cb9b7da073a5e28a4d83f95cb9cb05c +K = 3ca41c5044187ca5f3f0a7c6635454327603ae1e03e4ee83 +P = 70366f6f41151d3b +C = f6c1d4a5e666f020346a1bc64032aaa9 COUNT = 53 -K = 2793326369e2f1402d0fec3bc1b63245cbb824ea140fdb7e -P = 470b8aa41313f3f098 -C = c665fb568947f0b58201c7a1009c54ea2b08d3b0096a1c51 +K = 39062760aee3d759ac3bd89aacea7d12c930897829deb023 +P = 75bb342f2dfa19ce +C = e5680881ce0f9eb4216f242b4d336253 COUNT = 54 -K = a1a2835c50756a6889e3d81bfc1160df99191f101e96240d -P = 4bd684d125a442f748 -C = b5731737e3fa2b669afcf22460feacbeeaa31e5ae29ae78e +K = 8e19341cdd7b02c0f5e89b614c45f79ff764a5685fb1f4d9 +P = 27c3ccee2134ff9b +C = d130b7b51b81ae2218af7813223e8cf2 COUNT = 55 -K = 94f27f6c62b819b1cf8df42ecd9f95f925257c0186b7994e -P = c067f368c1bf2ba43a -C = 5ee713425098843ec90373ae75167152c22b9c30d1683531 +K = 758b38c25e8258635d7ae433235ff00521cb1d04c267074f +P = 2663b94ae82afefd +C = cde630354478ed119b1381509f7a84c4 COUNT = 56 -K = c7bf0472b7b1f3641c3a9bf6d9a9b02cb7662078da89da97 -P = ddb8afce2a4906774a -C = c27051e4f24fdd82fffee57fd02aff9bb4c6a2334051b979 +K = 547c0e957e678e64ad40278a020f730adc56c5b8d28ed29d +P = 38c9f0be9159dc80 +C = 13f4be78d677749d0790ee656ba508b2 COUNT = 57 -K = f904a27c1c5223aaa7e7251c4d85f05e0272667f919fb96d -P = c27364da416ed35e80 -C = 405e666132ba925c04151c10eebe98649fd0201264d96d9d +K = a65cdd5ffb5f024cf02d7b5a7293071d5a1d1b1e0a67c736 +P = 7f929f3b6a132f59 +C = b05e663d2722dbaaaba48c49c4014606 COUNT = 58 -K = f3230a783cd209ccbe38d22a123520051f14af2848212b50 -P = 0d3405cf8f7bf4c512 -C = 219f5eae95337e933dc3c1e05cbf5d6c7461e0271e6cd104 +K = c207abfa7945e3254a7029c43dc37307f094be0bcb8145d1 +P = eda36bb8eecdd560 +C = 1110ff05ec803dc5d2a624ffcb0b23da COUNT = 59 -K = 7a30dc3a65a0e23f68c0e1854f07bbd5928209c25f096761 -P = 9b6a0fcb60494ae919 -C = 37c218d91fc8333bf948f26fc084c74a3f7551e18fe5ed95 +K = ffa9b5868ba2892e7a705fc36df18660005dc47111178e58 +P = 5aa67d229ddc705c +C = b14afc508136f42fa27f21f9295cbe41 COUNT = 60 -K = e377406f27538b5c2ab4dce794984360115ef544a9883d2b -P = 2c2abdac9db35286ef -C = 8a38ed3b2759822a9dfe528255b29bde44c8f846dcaf839c +K = 52fe3b452a252f659acbc8619615c7540882b939119c6814 +P = 7ff290291489b868 +C = ec7a5a3191189cf346674e3e4ca4c3bf COUNT = 61 -K = 1946e17bfdbbd8bdb4b67a6ee2ac7c9789935a105ebbcb25 -P = a078ece9e4ca945849 -C = d7a668eb1392bc6cb2ac69526d4713daa06d24e72e246bc5 +K = d6d603fc2bf9b52e7f64135ee506451367f9c9456c4cd123 +P = cd5790f2e0c5ed10 +C = 57cc15a2e2b28c17bb08c3cf5d94d4a7 COUNT = 62 -K = c331235d27ba2a995223292788ed5a9262617e9c9f5aff3a -P = b683a4e28e847bc40b -C = 1c8b89630171cac400e3834653968289b4ed390c4838290a +K = 1956eccda9deeb63175b0a9296229033b1ca47e27e85ad80 +P = 9fe61fd16523728f +C = d7d95145874c96180a814daa2c3d03f7 COUNT = 63 -K = cbfa38ea412fcd0a0c6fb4ff6f01736faa2a335f818d4b04 -P = 57800c670c38489cf8 -C = 2b2692a356bcbc85533f397e4fceb9e1c2a83c281b7f1e7c +K = fe2d178b64805d91b50695b1c5b1654fd6b62a0facf4e13e +P = 1c99bf5327e81ad2 +C = 74658c6da80eef44aa13da886b8c4bb6 COUNT = 64 -K = 6d1f18972e234b3c7aaaf9de14151503a38c422cb3a413f5 -P = 22e1680184f0481264 -C = 131f73abcbca1ed7fda604989278b7025aa51be08c9e7e5c +K = 4639f5ca3e90dbcd6bc42dfda00ef4b9e88097cb10277a38 +P = db492e3e5011dfb9 +C = 2ab882e03faf446b7c3dd693b8c2ca7c COUNT = 65 -K = b2f6d02dbf4761c7a27b1081bea7ceddbb8c15b70c2e1196 -P = db4784580ab1af143e -C = cb277bc6f7f70fbe450a602ab880353bbcd80e354e906c1e +K = a1228eea3b90f9724ed76336b93891b33e5303fcc48761a0 +P = dc99efd820590572 +C = 0f2331ff16017e5b9711d38dc3977807 COUNT = 66 -K = e609d8724817d69e86a2568958a9ed27b61572ff8715108c -P = a402b7fd081c340020 -C = 0cc08ad69f6994b3144d56186f4f0aafb5b6c7cc4beb18b1 +K = a2ea13b51ac6f673b82707b7834a87ddfa9bf9767426ead2 +P = b10c90cdf168d0b0 +C = 981d61611a0afe189faf8840ed2c7196 COUNT = 67 -K = b7f599995a913c8e06b2b877b78a736c7d9017c62d7e399c -P = 41336cda96e82593ff -C = b274b8b3c7a2d2f63d7b652d14466058a6247e0ac203900d +K = 92b29d32e549426014e64dae14d59ee94b0e198313f0dec0 +P = 65f1358e2b04e24c +C = ba2ca2929e4a34166a1c74824f6adb58 COUNT = 68 -K = 4a0b27eaa7c4592b037ad8b0236dfec8915585b7ddf8b3e6 -P = 32735e18c90e8365f9 -C = 9e750da235b848562deac5e6b77f20a3b90aa3cb4e0e8a6a +K = e60f824845e5eb8d2dede297881fb5c3ebb89d8a4fe0fa84 +P = 84b1839c34007999 +C = b4fb652eddc05bcaca59f559521a8d9c COUNT = 69 -K = 121b3cf9678c462e28bc6a16f4aefb98738d8cf0a5adeb9e -P = 6bb40d0bfc8f1fd173 -C = ebec8f6a7abae116569e458c3cd37495eee2653c76576b9b +K = 932de865f3bae24e22ed7f92664f62064d047e4537e69cb0 +P = c87d2b57f225f054 +C = 20707d8858caa93d78020e7e4a6f98ad COUNT = 70 -K = 76652ab29939e8f3f516845fd2dae8396896799d3ea46915 -P = eafd86eea197b568dd -C = 6ddb4bd77a0fa5efeb42b94c7a00b5b7bcbf91dfd1b82434 +K = fb2100087d2d46cf807f52af93da985d91d398ab41c3390c +P = c1e7b690c68d1f3c +C = 577621ec57532d46551ba63cdcb6ee98 COUNT = 71 -K = 096808b5be22c468d65f0a96fb2d630723f9de91b0a83b66 -P = db19e324a9a456bc27 -C = af55f3fb5f2a34e3330f4e2e83ae95a58b3fbc054e2ed959 +K = 37dc85d69ff3105513495ab92aa46b30a971ac6c4ea9f2f5 +P = d6b71bcad77c2b00 +C = c5bcad729828fd63362714f18043e45c COUNT = 72 -K = 31abdf7fe74475b53b44b22e2d482b6d5f52aa7b4219bc7f -P = 3e9c907896b6b9372c -C = 0afc880b4bf9129d3ab79720c2b082737107d64b403d12d0 +K = 9d5fe8720bb5c15bc08515608b9736d64ff0f93ae132644e +P = e8b4f97f797985e2 +C = a850d5f34da4a49d716dd28d4a87e633 COUNT = 73 -K = 452e51775b7f13cfdae773a24c2eb4126f1ee91cac4069ce -P = 245ef5a5937409d75f -C = 1358ffc9f565dbefa45a8d095b12c10597fecccb6e29974c +K = da5ba46b609c0d472f1859d63b01a48ba5d0d9fa6a9f0106 +P = c1921a22dfed8077 +C = 7f4d9647373c6f3a6a95ae20b895b025 COUNT = 74 -K = 6741ceeced462a74f4cfbad36afe38b423d50d55653b59dd -P = a8c1b968438674db94 -C = c4c3ea94b6d8fab5cc08703511843ce4d32179152fe915ed +K = 799be022a56f00b0c20bbbd4aeb5f57353d658563466083b +P = 7f326499c5f6192a +C = d72f0780da2c86235b7b300c36d21b09 COUNT = 75 -K = 11f86a76332b41a88f30873ca2b8035eb6a4f3127f785222 -P = dd40c768b3f52c118a -C = 1bd26651969cfcdad35df5c1fdf8a729f2c91272336cee1b +K = af766111f60e0a7d29e5939f0b20f33f6c2eddaf7b3cfa88 +P = f6c03645ffb6275d +C = 4b3bfa415036d7bbb0c04f1efe942f82 COUNT = 76 -K = d22e47bd3c75527a75c8a1c4e53bec14723e3959a018650a -P = f1c49a5dd3867ebfac -C = b56ee9594e7b19ce4b2e4674dc3f7ac62e524d8fd00d708b +K = d30ad7ceccc9b56a0f26e1e94d1676777d6bd124017a6308 +P = aecde6aa6ff1f1e9 +C = 016d034c211d311cfec11e7a1e9e0668 COUNT = 77 -K = 2abcff474c6be55e59093a2a15d7f236089465f920c7ab90 -P = 2987eaa811ba2bc4e5 -C = ebc6f7cce517bf851e6174bbf86d51e40b51bc2b8e5599f5 +K = 80f47f0f3792920a927b9167bc35720f65e9f7a1cbcff026 +P = dee0f7d297948630 +C = 955026d35b5e406d2dc59aa0308ed736 COUNT = 78 -K = ef0c9c7531041fdb856be6c47706f122e76cac0b8157725d -P = 8eede3246f5bb34b20 -C = 3de151b70feb21f92ce7c46b50a8fc8b52c1435572664fdf +K = a4135cb2f3ab97f8583a08c0de45e719f8a7a30dc7c551e9 +P = 471f3d2702fe22ca +C = 975077ca03a1054f463f1455fe429cd0 COUNT = 79 -K = 94e975a79e8bc855aa033a665369b08de3414e0684752a27 -P = 15a6072ee8e72df57f -C = 59f8b72b894c5a5c0cff53a20701c1421dc9f3c49ef2df7c +K = 68de65ad0334896c22038794faeb25afea9415a9c6f483ad +P = eacc5f65ba4a3f03 +C = 3b1a6c180215b836e2a9a9a6254fc35e COUNT = 80 -K = f4417b453740e85c33d3917676bac0b6ed07923a8a43315c -P = e5864aca76e0579d90 -C = c26b9e1c1b3b4e73012ed6996c8b7fec8af65e5aeed433db +K = 0cb2eb19348e13374c15ce3cb8e177275b224b21df45fdb4 +P = 342a324b6cb99c4b +C = 62fcc07f77172359f48cbe2708c1b000 COUNT = 81 -K = 81f9347a677af1d660627c351d244e810f0ced6b679ec1c9 -P = 6125ab7511ab5fa284 -C = 11fbbb14f47420f9f279a6348d4955215ee2db25a195ab15 +K = ed54babae6366fa8b762e713e49bd0693eb9a12e8f360f78 +P = de0f9afe88c572c0 +C = 7c6b36fc33b875e8637641add6504635 COUNT = 82 -K = 40ebbc98d4d90f1181a6f88b0dc3f97df7dc169523a1a429 -P = 56c1d792c63a51a383 -C = 4570a269066a3c14c0681d44bcea2c1cb2114fa67f213bfd +K = a83abbe995fc68131a804e46b1d49296a10a90fd4cd7c01a +P = 3bb795964ab952b7 +C = b24f00df4393855896f1d99f2eedd2cc COUNT = 83 -K = f1ec13f72ef78bd8493f021aef64446611a12355c61231d1 -P = ba21c7251fe80843d3 -C = ae45a9b93721d89d70859397460d0fb7bdc754b5ff682688 +K = 226439700002497fe059c2a4008dd1c9ade39258f8a2765c +P = 647dcc077f6a8770 +C = be8ea2ac57b269b35565ad16682d079b COUNT = 84 -K = 9aeff1a5be3094e8704255f5453b96b26c1732e1151b0269 -P = ee86424a006e0d3bc6 -C = 7832f108a0e16c51aabd9a5599b6e9c02fbda4d65a21c079 +K = 27ece8353f3c59e83e7d544863fdfc090b78e01856941675 +P = e2857a7d5c9847a5 +C = 7d888f2c8d2c0a5d7fd206bde4b794f6 COUNT = 85 -K = f66d682f6b2280a7eb650c158cf648cc6223120970589da1 -P = c1ee708a662cf0cb00 -C = 5b066b9ae10ab61a51f2f7d609f0d901cecd44684db309dd +K = bd1e477b8ff3ee2575ed1b7fe6ce46284aee204576e6a663 +P = 8ffceec1af70b00a +C = a21debc056ed006af40143caf95213e8 COUNT = 86 -K = 2706ad6b523e6f687a2a110962861558737e211942db854a -P = a1ee7473ac02383b8e -C = 1d6812105f6520194bff3f70c1f96ed5b8f048d0d0f2554e +K = 897a6626763bd0d238b52ffdb94272016ff3b9e8a6833971 +P = 223bfee640af9b2d +C = d88fce3992b0c505144d8648c6080155 COUNT = 87 -K = 9877124d285d8522d32a14b6739f25946dddab1c8a702175 -P = 0592b8d76de304009c -C = a8830a980c70bfba69f30b1c7c7270316c400f6a7617d1e8 +K = 7febd31b12929ff13de7d940d4b85136aea5c41fe68e7737 +P = 9af411b82ea2cb7c +C = 1239c555e8a9aa5b51e5b83923c6b08c COUNT = 88 -K = 2166c1db2645c8e47503fb7382f7e0a9131bcd2bda3f34f9 -P = b9ef9aa34a79447b88 -C = 5511c19740dd9d4ddc87e8a7a386a597179518f7f77887dc +K = 8cbff16d28ccc229e693c28504444c97bad6d66ba9d902e8 +P = 1c7c033412ba6b76 +C = f0b94618e7316320a12b4190f7ff2156 COUNT = 89 -K = 81313baa510f13ec43e8c94b1f6b055790664f6bbc96f960 -P = c949f4a7622887aeda -C = 9628114b01e92136bc7c6d75eeded19d009ec20ad8800e3a +K = f03da57bcfc8c0a6a95470e411e6b50b850499cf26e1b182 +P = 95b8f390ee6d1dad +C = c46088a7dae53b6ac5efdc5f940857eb COUNT = 90 -K = e1fed73d04a3903872bfb42c6d829cb5753628a0ff29f81d -P = 011505cb64c6055379 -C = 9719604fcdff775d3ea33e831d270dcdee09fedf9ec84848 +K = 79c59c9cbc99a246787ab8fcaba7bff3f4f492dab01d88f4 +P = dbfabe3c1c37f87d +C = fc2064dd598e69df7b74d863df6b2efd COUNT = 91 -K = cb3a81baee4a84a1a6bb9a1ef0f41936104c54d035aecae5 -P = 18fe5cefca534816c1 -C = 483e0bc9d177c281d5414e0df4b9687943f45dfdc451e00c +K = 358e4065816e2a824b2b6a2185d14ba72959bd6be82e6dc9 +P = 92df31fe54634c34 +C = 5269b87b7859465acc397aa7e159d5ff COUNT = 92 -K = 82570a4a1405af8d723cce29ff164018bf7977917c9ec6ca -P = 51a7e97dc1c3f3a2bd -C = 952ed41421e9a54d1a5d3eb03a09e9e9cb88bc4a536f272a +K = 6b6af5496fece76447a92f16285dcb5a920b410ae18d1c83 +P = fc853603c12a390e +C = edfbd356a43d7a3c1c3e032e1f344b8f COUNT = 93 -K = 42f97cca2998f1309ebebfdbfb7c23b2178860a7960cff08 -P = 707cae408ca7e1f4c3 -C = b5024457d90192491c32c8372759696d62b20271b933980c +K = a9f9155c520661289586cf92057bc11674e8918be3ead99d +P = dc5c00a27510ff38 +C = c8788158430b46ebada911cec89e39a9 COUNT = 94 -K = 900d0ccfde34899344c7f59319f00e68d21bada88d6ee592 -P = fbba01b271fa86c6ed -C = 2ea71148264eef9f672355bf14cd98c4b63aebe3fe72daec +K = 19720da8addb805f8f35b91abaab96feef2c2bba2ffd0eac +P = 97e2b4377037b5a4 +C = 7aaea6eb0feab3a6c0a212e0ce2d9add COUNT = 95 -K = 8d4814f2709f660b7a9864373c08dac23eb2dd4c9c195d2f -P = 5c02fa0d40c3c2e688 -C = 98d2bfebc896595987f76d0a8a1e9ca4efbd662b9717a1f2 +K = 1f877a6e3529c572ca51d97c8c253aef6d5ddf1fee271572 +P = de0dbb5b32b86088 +C = 86ca3c297d1c532d3fc05407905a1c16 COUNT = 96 -K = e149d64f82a61e1efa953ed1cabee65c28e6fa163f15e42c -P = 45dd11f52d42bbe158 -C = 26c7273cba435215a716f3f4f1577c9775a5c7e74d8c4ff0 +K = 80830a5edc403d8e0d4da076d4021c71fb3adb2bdefcabe7 +P = d47aa51086241164 +C = 8996b0134e223a6860ba82c7a22f890d COUNT = 97 -K = e9a4250494b99af1aa4eac998bae1a3b7bcc0c5a56e11423 -P = 939341e72c7ab00186 -C = f261c54227d076dea78eb42021873505c4d3a11fa67e464b +K = 59a95587f7e831f0ecc5404ecee0d5daa46fb19e02902bf3 +P = 3f2b61f4c31a48c7 +C = f89ce3a0fd7b3a162c741b20420eeb0b COUNT = 98 -K = 1421d4f6d4a2ee088ecdd208119c891414a84ee77c92f2d3 -P = 2236562cf1e354e0ac -C = 77fc04fbcae25236f3970b0af6af6c41962790b9478c9e87 +K = 24ab51c9d766ccc6dfcff8f1dca14d479cd4e5ab2f1d8827 +P = f41bb529a071096f +C = 02b0d62b9a3eed746e1d8f72d509f2da COUNT = 99 -K = 319c394f01214051d03842ae959270b3428ee7bc19a2a722 -P = d30b796c764b6fa3c5 -C = 3c91094263a2acf50ce980f74a6bfe791206965f12ddc753 +K = 00b9f046f59ff90a12b5948c0c992065a0dcc5be7568cee9 +P = 01bcabab79d678ef +C = e39f0c97f39398f89fd91438c328fbfc -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = 658c442df5813d7b9fc978d0ce6e20256aaa2d9e752f7091 -P = 1097b1f1 -C = 617c459be15ee7219a361a670620e4b4 +K = fe3fe235bb36dcf03f01cbf32cc98a3abf10ab3d608d3b30 +P = 1d2b7fc29991bafaf7 +C = c11afb3c0de263dfb9b672a5f81fe0b9acfe9c407691f332 COUNT = 1 -K = 4229e55fc36cb10e890138e87846ab8422f5cd0d9e686b07 -P = b25b9f5b -C = 5c6fe4ee8f35b8e4d65e9d043e80d3a1 +K = daa9b28cfc1c1b2f798aa707040a09d6e3b692a59dc11dd3 +P = 14ae916d37efbd23f9 +C = c1075b1361a6f4398541966c042fb542176200a832e04827 COUNT = 2 -K = f7e5333a9e4c4e766f9b67ba5520bcec66f45c9f820e794e -P = 54861a0a -C = e5fdf172d8fb2872f5bae79422bafc38 +K = 41ea31e51869071c73e1c964ef7e969ec8b7c8c791cf8adf +P = 2f7928fcb9b0c32f14 +C = 17bf99121f1bf9c24e2b4d0c805151593999a19f86a9c437 COUNT = 3 -K = c71cb900071dbc462264790551f744f78537051988e58ff2 -P = 2e694a0d -C = 5eacbd19379955e4eb82b3d268f9b509 +K = 1ccec53b00e3bc9fe62de66b20f8d2969cbbbe3937c529f8 +P = 83bd34f5486dbf5a11 +C = b1d7d57baecd150b32625d9ba1b5a2c3e4633e2bb8518e0f COUNT = 4 -K = 6297c43865442466a01e73f2c32fa9cb4fb95d56d220f0fb -P = f2c925b8 -C = 47883ae2794fb8f1b852c67405be3657 +K = eb8b4b86262cf038f2ccf453c977b386064f329279e797ed +P = ab8818181bab2b2f5e +C = dce2aec3539073af6e6207365811830836ca18f27dcbcbf1 COUNT = 5 -K = a2608cafd90d339be6c3d2763676f34486034e633bc4ea46 -P = 3c56dda8 -C = 45f0609405e26b3b7add93323e5ad5ae +K = e82916af0518c497978a2bb429be325944654a0db5f0bf1e +P = 9b85fc29bc85435415 +C = 6ca01402815741f92446ee101c4129fe9085c08c21ae4bd1 COUNT = 6 -K = a47384672e022cc47df93dd44c097115830298b9e3ddb9bd -P = bb0a9c56 -C = 415b8c4dc467202a0ac5e4c73452f107 +K = 0430165bc7acd341a6269b6ddeb0fd19976e9fcf239a9285 +P = f2bb91036898b5f7b3 +C = 1e52af163278175177deed43f3e8e2f769bc57de6f7d643b COUNT = 7 -K = 3f6c4f717ead8f0be860d5c4baba4a8c7323f4721ffc20ae -P = 65cf019f -C = 68eb2b8461f30a3534a8fda9353ddb51 +K = 78ea42a8565c2409fce74d800d210703babd7572fe98c528 +P = 60bfff22f2f4912fea +C = a152a7c085a2d1126a757190ea7d13d59237ab4944555357 COUNT = 8 -K = fa0e51e4ff09a624db9b8522c4a727bb95da707e481ad0e9 -P = 4503d048 -C = 4c34fc9236388297a1ce6e83a0e008ef +K = 019e7be3b7b57ee289b7ad3905787add524e733415413564 +P = 9733601f6c217b818a +C = 0e8e0cc434a26b160e6252f9125791f81c4b56fcc4d0eb84 COUNT = 9 -K = dac540a7007634d06ce4fd0edf442e6e77d266a265e62d43 -P = 7b8b84a5 -C = 4edd300afb511949708159d93e253839 +K = 82052f5fe11def60d2cb14ed0523dee223bd0316d2e75928 +P = 27ffe35edcf99bee36 +C = 1011818675ea37f3c04459540114838279d632e7b63ffe8f COUNT = 10 -K = bdb970ed331f01e4f5f2b1e7f836f170293cca31b0226905 -P = f301ffd3 -C = 8a3b5aa6201b3eb88454246a4b678e2f +K = c25af942cd096a0f22b5b8479917a115ab4f4352dc6544bc +P = de175f196defd98766 +C = 19b254f5727690ad5d76bf5c1dfec3c8718a6bf4ca06e33e COUNT = 11 -K = 25579dfe7cda9735b1ea5e269438baf4ea808687a82407c5 -P = bb2dd367 -C = 7ceab10b1959c4c51f13b2a9fd35419d +K = acf415c3db2d1565b15813c321c67027a82e9ff271c9b566 +P = 39cc3be8bf9bbb7698 +C = b347bce46b011612cb45b9e7f6bc2e34be5b35e076971869 COUNT = 12 -K = dfea7c4b225f426ddef6643487e033e2ff9e8ba88d572f35 -P = cb8ce792 -C = 43b2fffe112733a132a43c39447df22a +K = 20c8f5342752735b80695d334cd35c197aec24bfca3bd2c9 +P = 3c9051cfb782c4317d +C = 2a442b66326beadb41f539b418a4ba24028f49ab2d307056 COUNT = 13 -K = 99ba5efca80e338ac7502467846860ac961daae85060eb3b -P = c7ceefe2 -C = 0d104c1dc396c28bf8d1102913c4c351 +K = 572cefd806f7a8ed0437ab2b9055655448fdef758965ec31 +P = 3c6d7247c702441ac5 +C = ddcee4f6280ea3716acfe4c25a4bb2f96ef290900c79bb3d COUNT = 14 -K = 2d00d302150f770d7726cdc288c19a2a25d4423bc00abf06 -P = f80f4367 -C = 626c8e8bfd2b46e96a631aa4bb703293 +K = 2f8d7abea8011489db54887d0d0cd9c082ebcf5ecfbc9d9a +P = 8d4747eb24e5bd9fca +C = deabb18e68a075b0dbd37ded350bb887df60741231246d0a COUNT = 15 -K = 1d48d4905c2aac6de65142ceef3d2a65f8cb19542d69b5cb -P = 65b523ad -C = 0e8523106d9a1509e201783820bc0ee8 +K = 5f26b8aebebe7a1887b79fe82c8746602341ae7cc224d2a5 +P = 498616199c3c904ed4 +C = be62ef045f4c20d3b57aef622b0c0f87095f8779e0d61434 COUNT = 16 -K = 2bea5981348ac11ff06183290c8a68dc8fc2e28f2fb4104c -P = 8254441d -C = fa12fb700f1d56b4af05a4b4f436f7f6 +K = 988c937ebb9b5e99657a5a8ad44beef273550a49771604af +P = 258923d08e01efeefe +C = 15b3526939acebf9a336e997510dbae8beb12e26173a27d6 COUNT = 17 -K = 35d1cfd5cbf5968b0d689d75bad88ab379941d6fdf48987d -P = 31e2e315 -C = a20241035312b4d9f89207868b45936d +K = 43d88ff4fcd20c88df762333e5ddcb101f4b24013f53cddd +P = 257ca4607131a5b85d +C = fcbf5d7e542681277325a8e3d854e4f2af09c8df936e6ba0 COUNT = 18 -K = b7a870815490cb16aacde37eef690640764b00959289b060 -P = cdd0046f -C = ac7c2d08d44403aab13ca3d6dda9299b +K = bedbdaa7284495c729d641e61cf031abbd87cbed8d9b14fd +P = 78d3aca72106f4814d +C = d8f47ae5d651d715f515243cb4068fcfc127a580c1008cbb COUNT = 19 -K = 94a2f9edf52e07ec8a8ca5fdfb36156090e072169fe86071 -P = 0e588cbf -C = 575fddf3b037c20c79f2095e22514a18 +K = 8f025574cd936df18dddf1cf8a5c56e742ac3b5339cd68e8 +P = 00a314b09ad0301697 +C = 00ff6f280ecd8551feb690105b28177b12f6688d83934af0 COUNT = 20 -K = 8532e55c2f0c1929e76203ae325f059214c7b86b4e67d6d5 -P = c0121715 -C = 148e024bcf1d3c8930adfb977fc557b4 +K = 2f73394fa3f1cdb4736af2ccad5850fde2a7b4e2f5a3dbed +P = c7d59ec4e5140fb0ad +C = 58d2edb229e0f313139a6243e2e0cf9673a59faeca45f7a2 COUNT = 21 -K = cc572beecb9a96e203c4ae7f144f20a2b2e091d3413a494d -P = b8eb9d50 -C = c56e3845cdf6097e9d57f90596247870 +K = a31ed8f84f4a22c440f590422241175f0151c73b8fd45551 +P = 59cc1530d772fa8bce +C = abd7b0e2b126c94bef0df5acd9a67b036939faf95862b9bd COUNT = 22 -K = 444a792135725e38344172a5183b59d835b07503d20e4cdc -P = b89adeea -C = 9e029b7a3136cfdae74c8a3bdcd82efe +K = 64793ed682084a1b91dcb26bc1fc8f56df39b1a5e8b91a76 +P = 7f351b48ebbd4a133d +C = 899ae744e383008d7273592906e36892d770e89d5ace1057 COUNT = 23 -K = d1802c26171f111ef24a356db320b2aa6d8278cab1bc0469 -P = f19ed93a -C = 2cb69d565ad3e921679d1c08dbb07ed4 +K = 0de9c16af71697d625091392a1fe9cd3c518d8e8ce23b8f6 +P = 60020ca91421471f91 +C = b95c1c8e2f5bb86cfed90cc88482c56444e362c454d57808 COUNT = 24 -K = a1420bcd3493bdf7ec46a65728d283f1ebfec8a32b79a80f -P = 5040b336 -C = b7a022817d32f33d7768c2aad2767948 +K = 8ca4ea93b0a5fd8ed169f4850f2b2e08d5dba6f1ad944e14 +P = 20b314c5646fa33d67 +C = 725efa4ed55a23b5d0a2554b117a813c80f6d942e477f59f COUNT = 25 -K = 4ac824f41538457e5db20d629fdb905bc299cf46ba9533f5 -P = 94ed88d3 -C = 6b2fb3159558fd7e03a8001f3654a52b +K = e267661657a02079eb248df6a76ed09b31a6c59398a68396 +P = 3f2c38c3d310bafc72 +C = 90485dc5cfad747a6dcad2ad673ebd17926daceff9929ea4 COUNT = 26 -K = 4dabb40d556216ef675aa60477fee5bb07378b47cce646d7 -P = c5901b81 -C = 11c5a3a30760d64b1d380ae1b2d72850 +K = f73272a0fa560fa59c03b2261e4b129f8731590295fa7346 +P = 9620d882f4b5111fe4 +C = 298db735781be787537c68807748a4395724ab76ae683c60 COUNT = 27 -K = 75fbcffc7e723bd19adeea6b79407dc080361e15458145ef -P = dfb13d08 -C = 8e1a1e6871da575c9bcbca0c5b1917bd +K = 9b8bb5f1209ca3ac1310db254606999ad5a26fb55c00edbe +P = ec39f8678b868d9f46 +C = bf2f8aaa7b71173fb091d06cea9d1f80ceafec6025fcaf2e COUNT = 28 -K = ef485c50112275ece61c08eec4e86d4fa3f8269e3feaf003 -P = f1abd855 -C = 25f6da9ff418954e432e5d402e7fb3e9 +K = 94ca64de54d868cab1ecf05544e9071b50f8e178b13151a8 +P = d61477f583a61a56b6 +C = 4260e9446788a3b0c1bf9884d5a7ae2ce701e55b8e43d285 COUNT = 29 -K = 7b4b07470768c9332506d7afe9382c8fb2cb884b1511fe91 -P = bb3fb11a -C = 32ec0ceb1b80169220550de141d67af4 +K = 79140cf57eb410233871ccb1ed14e3983cdffa30f818044d +P = ebd9fe6ff37b697bd7 +C = f89d5e28eed1c502760a628aafca1d999911ba5ba8a35a6e COUNT = 30 -K = 061ad51e37700859a02f005378e4dba529c2ea5c64d3df14 -P = 3d553e6c -C = 5d73df22909b3f1bd5f7f1fbafb98242 +K = 3a1cebac7045e5d1a22ec73cbe572b0f200eb0e32eaf5b18 +P = 83499230a26d2c1c83 +C = 816e7a4eba87491138349071d2dfc525ed643a7fe57e7371 COUNT = 31 -K = 1ea725238aa6e9df3b2d58db1533dbcdded32cea4d279788 -P = b9de29f0 -C = 5d965549151cd63be398c5dd5aa46a03 +K = 81aa834ccef9b93ed884e214f07e732243511860525906ad +P = f3edd05f5c3cf83a13 +C = e90213a7664dc718a5b09ede6793bb11482a14ac4454dde7 COUNT = 32 -K = 0633b140146963bc7197d5aff8bc900613c8a5923fb46b3e -P = e0aca474 -C = f03c75c2e64d8885b6492267b0a48991 +K = 6444b1d9591fe6400b1258621a9295f103d0db0723444e00 +P = 9471a964ff716f5a93 +C = ee125ea78926d7d0c40ec07acde01a4cf25dccb5daa5c8c0 COUNT = 33 -K = fd987cec8601486e987c3d66308fd3db45016b1c81cd0ce1 -P = 4874362d -C = 492acbe783180c688dcb7f92dd22c980 +K = 8f4660721c92fc3b4cfc880fbd8bf279ed30ec52bafb7784 +P = 7fd6023cecdb86106f +C = 823607a3b6a1edbe15873ede5f3e46c7006de282d8ed2453 COUNT = 34 -K = c63c136eee6c8229c7a66ecd6ff21d22bd686fd8d0495b72 -P = adeba23b -C = ade8bae0f5c508ff2d9b2661f0b46ff0 +K = 871afe64810c2437c4b31266add2d39187709d3e1eca8c16 +P = d995e225eda4ea01e4 +C = beda5c7bb9a4350555beb22b3812aabb4f9d0135999f6f42 COUNT = 35 -K = 28611dea7ad3e089e835418e8a8df760624324b25a26733d -P = 29b73bee -C = 62034285ab7a0d657398c1171f7ff657 +K = 037e42c0d56ff31eb698c0e2dc7bc746d37885ef64b67491 +P = f974746aa38f3d8139 +C = 70ddfeb5fa769adcfd5ae7c3fc60fe85cb631839e15d5b2f COUNT = 36 -K = 611de4f132c66a82100a73a6b9e03f6850561f479950e3d8 -P = af7e4338 -C = e454b08a09783cb17844a437de6e83d7 +K = 7cdd534db2b82330520e4cf710511b60041418c30ff5a167 +P = 73adbe833f484aa7a6 +C = 98e5db9530785d494f47528e904a6efb44a83f4f78d38086 COUNT = 37 -K = 25fcb87a5c1a5c5dc0b1d291c25ffea433bf3960e9ca5bad -P = 54b5cb8f -C = fde854bc44697e3e9fd8f9ec883a635a +K = 71c5342a025e60e121c2c768a635b01c988b7ff17f12cf36 +P = 3d64fc935767f391a1 +C = bc10fdd1a8eccc50fd513cfe96c3f058d828dd61be80fbd5 COUNT = 38 -K = f29fa98e32dcbe3cf6f8306fd92323db4241837cb2d53e1b -P = ac149873 -C = 71fc58e1cc185e0df014f4b9ede44997 +K = 2c556d8a910db692f211c100536f47a8c513772b1d2b9d66 +P = 933c6d73b4edb6ec66 +C = c9a97324de4426c5e1a2a1d86148299c0c0db3cfdb689621 COUNT = 39 -K = 3663fad6faf76e2048fe0096c5c0880ed349e48bd1da0b3c -P = 7b7c7176 -C = e453dd1d1769d355ccae688a2b321815 +K = 4b2c22f28b62155c1b28319afda19ff12cc0a34fc08b477d +P = ff6c488031a5fb8fc5 +C = 2b5f33c5e48e62def2f5401acacf48f4b96ec8c5aa04042b COUNT = 40 -K = bd14d2e60f2ad71a111b29b14e37c09931e36c69a27dadb0 -P = 4eadf41c -C = 51af6f4ad5d3f20a3f2fe7dd9f227ed3 +K = 99b1e9c72b983b9c300270bf5128348ca198615be3a37644 +P = 1b75a03ff0aee37552 +C = 270ad58e4f3bd682fed7029826d9145ebcf10ca0fae54e6d COUNT = 41 -K = 29402fe2080c1f5b8d3fa9e3ad3f7d3095750d36eb4f42de -P = 8db6430d -C = fdadeab724d6a67880c8f6c7ecdba47c +K = 415304222a8a32e651747f9cb8297e91c305f1d4c6d2f34d +P = 059152413d1bf1226b +C = f8a6cc170f4c3b17cd66cf86d0788e15eb8673d6386ac25a COUNT = 42 -K = 48537ac5d4a1afe7e47c036ccb19726145fb11a210deda03 -P = e38365cb -C = 7bb4aab8f78ec17b83ca4e3e89b597a7 +K = 207a427e82ec38f986d29c7a437c9a574ba679f7fdf331c9 +P = a2c339eac8efd241d5 +C = dc965db05bc6e5120894190596dcc12ad394516d7abfd4c1 COUNT = 43 -K = 0e97a0ea45813401b8cfee39e3505b9e92ab39c518b6004d -P = e4e0808c -C = 9d2f626d1050c23909acc8e00bacfac3 +K = 81715d1cf33e4afc580d63a827f95d0f2bdf5c6c842419dc +P = 2af92bb60476f7c0f1 +C = 7049e5ebe2a99137d8e771c051fe202a79f42511f9ebe347 COUNT = 44 -K = 6d57e9e289a2654dda58696f85524bb1473057c26815a5dc -P = 3df27e49 -C = 76c7fe7789c365e07e7fd45fb11c686d +K = 7bfa1b228ba6b84769a1523c4506e9297a80c58742a8ae01 +P = ae45c4b309e1892fd5 +C = cf2772701f286f679f75b3a3489579299dc2e0c95d33bdf5 COUNT = 45 -K = 6d5d3671f56318dc749efc5be7c1a5e353b2b210b013f615 -P = 3451d398 -C = fc5818496394ca0593d5ca7a76b94a96 +K = 44db0c817c33a5ecd54a78562720c8a9628b8157e0b686d3 +P = c4493ffa7190832780 +C = e59b6f50bf0f5c35e8b4ade854c03ed48b11e40cd5419649 COUNT = 46 -K = f126451699b22898921eeb114c9f924d68a7df7c82db9cfd -P = b44f3025 -C = 0fec038f8bea63c21189f36ba8ce954b +K = 0019360108674c1ee6032392f61c9a2ee197c2fb94e8e5d6 +P = 3b5afceb90b50c2de2 +C = 8369749bea80b75711ee8977f4bda74628e01656b92a7dc8 COUNT = 47 -K = 06fb87309ece6892263ad17c14091ec68f2cc95c7251f096 -P = 531987e3 -C = d6e9b15645f032ecc7670f2508e008e5 +K = b24faa9eb76a70e778537f6e13d95c96cea52fb5a24f7d55 +P = 9f804863fabb92984f +C = c130d550d9c6c1564dcb07e5358c7ddb236a5134cc120200 COUNT = 48 -K = ea97044a7b655c66b8f53f9ceca2188ed0144d84809dcc34 -P = 6b5079ab -C = 44b9b704db0a0d1b987856f07b3b4863 +K = 4459b1a861f42fe8d998d1f5e15c539b9598cef675233c8f +P = e9f956438f565e1084 +C = 9ee82348dfbe2a715bfd19ee99217507b968cf262a9cf801 COUNT = 49 -K = 12e8a39fd155b2a57808894608c3c75290b1695b5945f748 -P = 6d9f442a -C = 48ff69874111dd78006f6b109d02d8a5 +K = 0f37cb1ece090c17e529247e1ee915f687a4dde1340f45dc +P = 088250c1cf3c1f32c1 +C = 821602611a67ac3426d674b9d8c8eb30e7f1bd033364973d COUNT = 50 -K = 8a3346c6926e4d25ec8ca4ea22b13f89b5103bfb421738d6 -P = b654f127 -C = 154a171993bd559464ca410f6855a9ac +K = 7f22daadbd47bfea84675290556c330402701d3b41a0c6f4 +P = 29a0f490f0312ac985 +C = 95042deb938acc0705038f91a25db90251291f0bbf1a6dc2 COUNT = 51 -K = de760c9113ac4b6589dc2f69e58ec88caf8054d2649feef2 -P = d8d56264 -C = f5d471661b1281e8d22fb17e0cf57dd5 +K = 4cd219d638f6b8b26dbf7f8380e0dc23edfdd8e34740181e +P = 17a6a216ec89b09f20 +C = 042a91bfab480ac4d2feda82a68f8ab4cafcdbe06b34844d COUNT = 52 -K = 923610f41596e106f87448d861faca0ba9ae0626ee68f42c -P = 64a2d70c -C = 44e1dbd0f646ea482ff6e17b4cb44678 +K = f4c79615b6ba58caf7edbfce57de68f0cae70c9fe21ed4fd +P = a01f23353c9d468a18 +C = 52ec2950db413fcaed2e4b5dc04846481845dfeebe996393 COUNT = 53 -K = 7cb5ea273b8cdd2b34ea57e8fc47b018ae73ea6d6be73104 -P = 18994159 -C = 50da79b75ebe84bba19dedbe3c0e5b5c +K = 9f1c39c15cfc0ab1d5109ac774848164dc3103f71302f3d0 +P = 9abb982b8641222565 +C = 4106c17cc01f1f42fe883fc7137d4e3107a1a53ab49b11cc COUNT = 54 -K = 06d1e0c706370de89b02b78daaea28f40e6c8caa46bdc74c -P = 7f60e898 -C = 33fd804e903e882d3d0e5b7e2155aad8 +K = d5679278fc67fe3e335c1a0eecfaf1a08b2dc4b9626b9adc +P = e59f17b25fbc896940 +C = aa41aa1006fea690b82e9832ef45b335f66bb9e2b7539461 COUNT = 55 -K = 48c36318566cf0df29d8a40b238b13db799015cfe32be3e2 -P = 7415ec05 -C = 216cf620ab39bf106c0d7e6b01d8eefc +K = a00198a3b353c7b478ddc3b8911c18d21185e22b807d7e00 +P = 6b6662d6a8ba57b5cf +C = 0ddff5dc48f141fdd52a3d9fd204fa9a38320b0f1be6a367 COUNT = 56 -K = 845649b0b6f23d7886758c1ff4a6e553a0ce94cd821944fa -P = eaeba296 -C = 90baa726d5a30318a35abe503d427b12 +K = dca71d8f4028487695435ac45ec636015d8689721b5e1d89 +P = 312bde21a169045fff +C = cbc0a4a8c142224ac7c5d28539c5a969332d29a81fd323ed COUNT = 57 -K = 7acfa89cd506ffef3fcb404a9e1c8648a2969971ef3bc0e5 -P = 8d28937c -C = ac8bdcee26316ee7d8eaaf637ebed418 +K = 69aa8944572b9fc78652ad4ed042b69cb47c97d5866b2825 +P = bf73c7e38b7540a2d9 +C = b2cf1c1e8e4d8149463ce15f63950e4c5b2bf3aa85afcfbf COUNT = 58 -K = 47305a44652df6c297cb266981dc3bba1da63eaf4ddb57ed -P = 78947825 -C = c364fbea0e6bd5e88caa87fb088d57ed +K = 2e7d3cb4a370bd4db6c62984070078b0bd230738c379330c +P = 1675a5334ab6605125 +C = 3c751d48f9c5cc4680a351e49f98c1cdf3c97bffca5ff6ec COUNT = 59 -K = ae3fedf94b313a85441b9b20eb459e1d48f914bf2ea8fb04 -P = 9770b98f -C = aefb60599e36c0ed7348c4dac555f104 +K = 693fbfdaa03e26fbf2b2dcf3c1ed3eb3ba5000d47468ff6e +P = 4eb9c0b44d965b48c3 +C = 2188c885839095f98e7b334ad1cf04a5ce67198d526415f7 COUNT = 60 -K = b199a10ead1b113a8e1042975dde2fc3a44a7fac31fdca0d -P = 3065462c -C = 31819a5cf9cac529e609e4163c6a6b8b +K = 7049314eac092ebdf8c6cec00b8a9f255e26c6bc4d956a63 +P = b5915123392529f617 +C = d1ec8d50223442bb3e0501a3901bada466a844929500310c COUNT = 61 -K = 9e906cfea6e102ae8e344728442472356b9b02c234c40a8e -P = 6397c516 -C = f3ed4e5efa53772cf8bf72188df9e20f +K = 5b6e7cf218288e0ca0d36f7487c149a681c8649b3d5a5786 +P = cf5b4dfaf371327dae +C = ac981ac797bdcb623aa6db5b8bf07214398163bb37b9eda0 COUNT = 62 -K = 863c93ddeaaa863a7f4ac826d9efbe1aa93e18dfdf82f748 -P = 1224feaa -C = f7fe091f1bda5f5ca3113d46a75842bd +K = 83f22a12b6fb00348fe1f0efb67b9ccaf47de4cc6c2cd761 +P = ef00980ea7736e25e4 +C = 35274c55072e3182be30552e96badbfed2a4319e0060d1e9 COUNT = 63 -K = ae1c2d006292e0b57d98dd2d645f15e590ccf86b764edd99 -P = 69bba545 -C = fef220f2ead60643c4d18dcc866d11b0 +K = e5d5325e5a3f89cccbe8da1ae3ae941ac0fda07c5c566edd +P = 76809e18a7aae601b1 +C = c4a55e86222510286a6c8f57abe09346fea212888237353f COUNT = 64 -K = d9ebee4930919790278b66412449a83aa3d14ae22b7bc959 -P = 5f46beca -C = 7e20edc2d6a4ef21c6239c71a1134836 +K = 5fc017b081913ecce70d9f73466e5e709ae55c016975199b +P = cf242f1f716a844af8 +C = a77f70740f5f853917bb6e9b31297d4a15523d33f9c519e1 COUNT = 65 -K = 0294fbdea3274aa793270da85b230a601cf28383d71b567e -P = 4e183f70 -C = 14e76b4fbe0c36b2eea6004b2d2d207e +K = 9ec6f4f6081095d6e5bb6e00eb8af88080c06b1585ac7f0d +P = 78b1e775ec1b1239bf +C = 57fea4f8f2a97508d9af09c859aeca19b4eb5f6a3c441d1c COUNT = 66 -K = d83dd041add5e098cb3cf1f5c966acc39b0f711d5f011ef5 -P = 47407e2a -C = 3222bc402c522c10a08904bd17345d04 +K = c062085f85287ff5ff09f1ca96f3976d25cc4c1e69bd3618 +P = 94b991e871e7bb2cc7 +C = 2685a2e2495812f019c2cf466b2624f1b6978637ed2ae872 COUNT = 67 -K = 7d163ef6333fa73a70cae2630dc0f62a27d035f6b6c89e15 -P = 63e6df74 -C = 58eda56bc78d33e319d70273f8e04b63 +K = 946051f38769529810d7b3b0b9e0fb6a8a9ce372ef6abef9 +P = a0c673a49700cc4247 +C = 8d84e2588a57c7e7c4bd780a28709065c9c549c93f712afa COUNT = 68 -K = 77500b7e97578fb963a27f62bd6c7c657647288faf3a0166 -P = 1c194436 -C = 5b8d1b75d654841d2b8f29b2f2e93235 +K = 688922a8262e41e2bdf5f10ae7a94dc44e51d0c15121fad9 +P = a200fbae66b36c3ed9 +C = c763bd18083a092d8b2ed45bc38e9145dc6228d0d836cc9d COUNT = 69 -K = 37411f8b1fe7bec450a71fe7f0b7e89914b6f84426cdcc06 -P = c44671ac -C = 89079c419bc86517dcb5cc3d3728b77a +K = b36d1fe3c1cc744fc4833bc7ad0f580ec1c0a868651cbea9 +P = 41e86b7c97d21ddec5 +C = bc530c987b52294b8d8fad03608ea58b2ed9cbef5f92a903 COUNT = 70 -K = 7d2e8921444f36bd34ef6d0e4a7c34fefb175e1951bd896e -P = 43409a38 -C = 2aa08f84d32fc93838c44753b3c325f6 +K = b6348c0b678b740503952de1303ed6acb044533562007644 +P = 49745e0f5a11f5df65 +C = 6080e6673a6fc03ff6f0296b0d532dd488d4af8b4b02f91c COUNT = 71 -K = d111602dd462ae3df38e8ccbd849bf1e6c9835644c161f2f -P = 1bfe9093 -C = da755ca183964ab387852bd543d72487 +K = c1b811379ad33838b674a315ae3918f81a8fa700c82dbc8a +P = 679bf4d1117f884066 +C = 951e4523969833983d9eb36d110a6be99efc924966d9ab9c COUNT = 72 -K = 0d1a8e1eb8f5390ab87c0a440e4a4c8de895d60190a269bb -P = a0649bce -C = 74375c5026270f87c0f78fa60e90a83d +K = 5d93368f91b6cf6f0c3b27f6830316466a2b50f8dc4f66f0 +P = 812301780185ba5531 +C = d20ce07e8ccbff3fcef409db220cee1725bb8cf68b52a254 COUNT = 73 -K = 061343edf571a4e40d31c94e19cff89fca0a1f2ebcbb162b -P = 0e52cc9b -C = d565cd4ab3cad98ea4d17ec42a175a30 +K = f4f021a4e0ef15a7e72d751c6bcbe6361dac5022623ad092 +P = 4531aa5bbc4733097a +C = c9afd2821396cf0c6dc5d2fc365e84241e2d09b5494d0110 COUNT = 74 -K = 8699ef09045196ffe70e24a9584fd15e57967c45df66ba07 -P = befa3738 -C = 95209c9c765010f7bce71874769a1390 +K = df874fc148532fac915323a0a400dd26ddd12386762862b3 +P = 05b87a567ce5b6645f +C = 44b92d6f434fced8447bb4dd9d25334a005c18e98ecc186c COUNT = 75 -K = 7d04bacc911b4e213513b5c8b9ad7ff21787ae36c7df570c -P = 70a1ee56 -C = e510c716ad5e7edef0328d0a0ff19047 +K = 1b0813c9269266cdd2173a09dab749fe8d06469e5cf2ed9a +P = 1dffb9242c47647afd +C = a26adbeaac5e22706100841593e8fd362f8c3375ef1a78f0 COUNT = 76 -K = 59ff01e5146eb13a0ce8ccf7b213ac6d2469b8892be2e174 -P = 6bf7eb78 -C = 02f8015fedb08c304c46591c3f9351c2 +K = 80b4cc2164e70f17a97bcd14f711703afbb4fd0b2d418d5c +P = e4a50573d8204a4b19 +C = 3599ca62464a15c98783660605e4c37dd7af5997a6567f26 COUNT = 77 -K = 77dd176e7654dd1340dfb4178fef9d6b843b85df2c9193d9 -P = c9cb360e -C = 652213556274f2b7852a01e39ef034be +K = 9edc82814fef2c1b46dbec8a141195e335ffd51e237425d0 +P = 8d3451e39928686ccf +C = 5bab7ef33c7f8a3e7ea7022befb6b40a4fcdee44e6f11994 COUNT = 78 -K = e447e03cfcd991ad67c68bf418e1bb7e7166dde582735ce1 -P = 06ab9ae6 -C = fe04ea09f4571ed4f304025b206c2e96 +K = 9181ce637124132d3a53d8437f4807a034690fe2ac979970 +P = 995a8cf9ea6768f51f +C = e8d591d959a4c1017fded8e7de289dfc76d5d4eeee70616e COUNT = 79 -K = f2d2a890cdf4fcd249b897e06d7e2227b21e7eac6ad5da92 -P = b2668866 -C = 1e448e22bdca768959c3bbe86bae2dfa +K = 793b0e8a69a0f29ec1e2ae6372a6257622c617108c1565ab +P = 5c7ecda27ce04dfe5b +C = 4e15a5dcd51a3c3af97ac88d7e5c475e5cfc731c3cc6ae00 COUNT = 80 -K = 0d2c079945272b3062a765cc14c62acabaa50f21bfb18ab7 -P = d9306b9f -C = 2dcd92d7bbcc7b9826ace2ed1b6691e0 +K = 4146ef6bb34e6770de9984cca190bcf4f28e01668c065bba +P = e312855a2c0919a095 +C = a23d90cf3ada1a472e87811cd507efc0c6d14e25575106c6 COUNT = 81 -K = 13fc0f68213d8125ba6fb7a04da334e8982102448f558aae -P = bbf16b93 -C = 68d14e403bac1bcea4ec40bb54f8b5de +K = b8b95ba5c748d5cd6b3263cd06f2dfb87945b545a8e14254 +P = 1b0bdd398d40402680 +C = 9f8146d07a6485cd1a652e0e4e79588332a23e530952a997 COUNT = 82 -K = 06041f4c829ec19360c8dc6b0c29c6318761eaa5b50c08f1 -P = 488f85a2 -C = 2e385f49992fb5b511a3c2fa3f989d3d +K = 2df3321b90670484cda33975447968f750b5bc8bf674eb2a +P = 41e8870e724eb60e52 +C = b022dc7ce452a3ecef6cb3d319bca3c519321a6e90bac710 COUNT = 83 -K = 1a4bf5e3980c7f4282a3c62e23f65c2c87f4498ae9fe1594 -P = 363d91b4 -C = 59591043d169eea6638f9ced7bbb2a2d +K = 6c285c55576959aff41d69de11696e87fcb958e3bc136f6e +P = 0ebbd2471ac05bde89 +C = 20344b3864cff28633e3cd9a10fcdf24f9b37387e85cee48 COUNT = 84 -K = c675b515a35b4fdaffb95cfd752c71cb93581d37c8fabccc -P = 43eb7ab1 -C = ceda2d896365e2e7ebfd8487dcf1d232 +K = e4abf5388564838db12afc012e7e2ecfbe18c1d112442228 +P = cd860ff0c7f27f8b25 +C = 6d7bbdf0f460705b2eafe9d62ec627bebc4dc5d41b92f9ae COUNT = 85 -K = ae68c22216c72c898e57a3d48fd0198cb7c4606a35f68570 -P = f82cc8c4 -C = a5444f42affd1a5b00539fe4a15f4948 +K = add507e7eac28737ce8391a6cae9867ad1cb3c2c4b75d662 +P = d79ab1fd4a048de58d +C = 3b6220be2b060cf78e563b1fac8f56c32f9dcdf520db0863 COUNT = 86 -K = 88b1b9b3dfeea8ab6bbae6c0d6a5d6cee1d60c270b95e7d7 -P = efde7465 -C = 08cd6b5b8ff1a4eb6426397203137330 +K = 0846d06cb5d52a2c7ab7c044bbb6e4abe716247357fa097b +P = f5803e51baf29ecf8e +C = 3d9c464e336348fab9f2e261f69b1ff8a29a9e8f319a68ff COUNT = 87 -K = 4b4b93c37c121defe4f6d7f9f2a643a17933abda18922a27 -P = 2e190777 -C = abc009c50b96cb978efd95757f01c8f5 +K = fdde4bb15c8ed626b4d9dc19803e0368ac778c7059d9afd2 +P = e201f64bb916b2c736 +C = 3a114070eb123dafbc9812451761ce89f26123f88bc35df2 COUNT = 88 -K = e3ec40fba99ee2705c98817955b5e32b09c07f2ba8f1f15f -P = 515ed312 -C = ac71f4bb71caaadfcb19a8596cd934cd +K = 2ec349526c7d21e9d8bb2ac1379dc95224995d73d7e298ad +P = 2ab0afcbdbe3ab02d2 +C = 9e4e3166977b05738c8b0b49937e447e126d8060f717fb43 COUNT = 89 -K = 48a6be6da8edc92cd3e1621e979601b6a219fdd1944035e3 -P = e4bf72b3 -C = d4c2782eed983083a7215a67b3a6c210 +K = 30af4d70231dc2fb55bbe7bba359b3fc3a1addf81cf7eb07 +P = ea2cab9015ef7620f5 +C = 4da0347ef8fcbaff435a1a54f22bcd3f8588ac086755f532 COUNT = 90 -K = ad783c084abd1d1075142d8435b67148ae02d9f74ae0f565 -P = ed602981 -C = 92c83df9bb090aa21ad4c0b873b05fbb +K = 3173e030c263eeda0714e3b6308b00a19a130ed625a97954 +P = 7954f37765ca222d61 +C = b10a046c5354d0a22cbb24e969d40f0fd2661db830f03938 COUNT = 91 -K = da9607689206ca8996ccd552b788a1cf5400dcae71e8acde -P = 0b474a8b -C = 483ddbfebc7963ff55b34e44e049716c +K = 74954d942396de6b581c2e6408fa51582ed77edf2b09006f +P = 10eeee053ef4a348e4 +C = 4b0b9cea9969d959ac96c152eff10db1a24f77c94f9de1c7 COUNT = 92 -K = e30a67ae59a37f339404d2007b65fed7fc43e217bff2ee60 -P = c9327974 -C = 6607324e249e967cb756db2cd4ba2cdb +K = 642433dc7e026bbdc62451904c791135715c7111ee51d11f +P = fe620759017d6eafc7 +C = f729a1f392343efefeb67f7698de2a234b0125598fb966d8 COUNT = 93 -K = 6ab271d3e08e482d2d12c4f2ad76f8c455b76e6bb6d00a63 -P = 4bffe8fd -C = 0fa156e3063d47e886733a847d010497 +K = 1581d5f000da5cf206f87112963460afbb336524d36cf665 +P = de43cb5e45621e5f55 +C = be91c6e87786a37ad7d8b48a4b7dd5e9310e2d0825ab076a COUNT = 94 -K = d680aa436ffb82a54a771204fbf428aec867ee0166adcdaf -P = 2a993608 -C = e897189dd5a2133d2397a7735039ba9a +K = a7253f2eaebab07a938427807ed76101a2e485f267963578 +P = b1c21d89a15397b4aa +C = ad95c1af10c5d067c7ff01f961f86ab9f4a6bdac1a0176fa COUNT = 95 -K = 916e19b2b6ef00c285dbc889325213b38f5661812ba0f998 -P = 3a87961f -C = 0bc25b7a93e8180783e0c892049f6f06 +K = 7cb7241b45a28f4ddd85183dbbf4b3a8f16e858d8ca9b706 +P = a65b98c5956d2f3da7 +C = 56821194bb226febde1a2300ddd2ed437c6a27a4824ef1ca COUNT = 96 -K = 21b870a232d8f8b8106fe3e25dc1a80296738e15a7faaf75 -P = 4c8d7dc7 -C = 663b4ec4925711a56dd1478f04a5595f +K = 84bbdd0da25a3fd00916c24a2d13c2cbee63d97469f3e97a +P = 3fb66cd68ac1797ad6 +C = 7372dcd5763c6b45a10f8e1eab4e3862812ee6bbcfab5131 COUNT = 97 -K = b5a8ace6e9a7b89e41eb95ab1243703ea1a32399303d6213 -P = b421ad60 -C = 6e5421294b091586ec32ac0882f57591 +K = a12b4706781518df2b9afd171c54dbc2fc7712ac229fd4f5 +P = 01197338fc564f0a99 +C = 14d82ccab4e2933121c8ee159a80e2bf486de9351ecbece5 COUNT = 98 -K = 50a133dfd7304656ac499622fcf1594e28186f6fb80ab6d2 -P = 45961e6a -C = 1fa160e5b71460e4276dc721a56c2880 +K = 0d9a96c740762c72e4c6006dd282bd098324152c5b9c6295 +P = 46c1f314550f9b89fa +C = c6b7341e7475a0a09c87a4f391240df845b40e5d8b342ce1 COUNT = 99 -K = 9e07d9b9f0b87b4885916de626546362486c07e9d6041b5a -P = fcd0b781 -C = 979684913931b58f63e68a5950cd4c55 +K = ee8071b2691f20256a0676f9c256ad17a2e1b7f99f7cc654 +P = 90dea439535f3e28c5 +C = 29be0cdbcf96f8bf558cbd527a823d27f3f55495b1b4cd42 -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 9381c82ab7d49e5239262fbac827848857890752caf85bfe -P = b19ce2ed61c7af62565a94b7 -C = 5adaeb321d1d86126a361ec1d3b52694d46c70434ef1528e +K = 5d2a839cc1abb440115937d26cca9d7c98f0de5e06bdf819 +P = 95f2108abf3a09510748361f0d361b9632b9e6ab95f51deff2821ca1faee7e +C = 6ba114e0b965190c7c3b7d28f58b369e5f02342d193a0106671175812b1507df7f2e47d3bbaf60d9 COUNT = 1 -K = 5653255d8d0929edf7f7e6761951f18beb01596118cb9939 -P = fa539cc2f122729740270a68 -C = b8b980c5fd31a0487d9b997e29e597a038f927aa388681ad +K = 2f8827d2313263599b20ef4cee0111a3df329c55fee25597 +P = a18025f3976053412e8e801f6f8b6142a84bed2ad7576d4e32c9a6b715db5c +C = c9a11c214038d9b164871f93f96c8082774750671a11f6b7d56345ae4173486c841fad9fdb666639 COUNT = 2 -K = fea153598d9d7986950b7cbde961b617639f179d4eff56dc -P = 68c84cb00e0ede8509b91668 -C = b117e8c43dd0e26d257585f82fadc05f95fc80ef0676d048 +K = cb0ee0f0d325497ce6abd2e531673076212197d0d465087d +P = 42d7a03fc5f3bfab6f0c8c4a90ac8776e6a0ad428359e826ec437930b2a153 +C = 021a9d61390f487837a6de0c1fd181b940a6d952611894e7166bc69a5f995a061ffb435599af71f9 COUNT = 3 -K = 99cfd9740881568cf720fb8756f4817fbe937cfd65d4ac27 -P = 666ca4bd12a425bacd8f2f60 -C = e8a863d57bea20257f0328c7bdc39df41b508dac5d48df90 +K = 75a1e9259febf4c4cba2d57caf46b22f6bf07e9dd0cb39a3 +P = 837959a64a1cf0f46a6a73a2c938c89370db5ad62a6fa7c3030dc50f35c034 +C = 6094576fecb9ac90565911b30d07818c5a0fe7301ed618094a6f78714d30448b19c71f19bd402b76 COUNT = 4 -K = 8313e54c1d253d333c5a0fb15b8e8267389c72a6c50f0cfc -P = 69c2895ea8c49a4de5954747 -C = cae4b764709850928446aa85e30ea82439d98f93309215f8 +K = 83a545808194ff160bbddae963e461aa895eca6c162fc70a +P = d4755ee99b36aeb4364a3a0c76ade5763068a207db26879f517b3b8e9742f6 +C = a2e8b08565a13cc0806cb0fe3776ef8d8cbf62b5b73ad3b9f16b1b16631cb49444c57125f3780de5 COUNT = 5 -K = 76c0e0e5650b1262492d6e17b7bb62e4f19af7b30cc8a401 -P = 209b2fabf72ffdc73b211ecc -C = 4c2829dd89766c7e617861145b7c54b396f198a0e3199b48 +K = 4e05fbfa6d12e23a66c65b6626c0d95722b9304e77b2eff5 +P = 2fe0262c8b92bc2ea77d45cfb1162d2701840dd7d9a82bbf5529ed960702e1 +C = 1c8415a7070a00764438324ae9671632494a4240ed5da04fbf8ae97a4e95acfd24fe7ccf0c45b58a COUNT = 6 -K = ed54f7497863fc57bf7742575bf069d787b07b3639ed4e42 -P = 791e8fe5d4f462e181c936a4 -C = 91c445cf717c1269392ab094e2ea308bd6e12d1c72a75e0a +K = 8691002f77ee8bdeb673e25d1cdd317b7fc5f1f70bfb13ec +P = 5664613bfc1152323e6d0bec437ef76aca229cb52dba5bc880abd6082f4d8b +C = e5035b7a1bed961d758fb460145f81d7f9a5e42def8b84708f7c8bc5f58803d495b7415765b73238 COUNT = 7 -K = d7ff8bdf04e1c7454dd879bce48c25578333d5a06c44c273 -P = a43c7b000e9a6d72212a4687 -C = 1bf14eb3728281802c1a049dde22eade55057d32545741ce +K = c10874314f75de9cc1ec6900b0647826e57120ac8381bd17 +P = 776f6e000ee2dacbff6ba053e29cb1df3a54b43761d835ff9a80c20b6ea773 +C = bc295beef25ed115c230858d71e2e6d104a0f14d3aa01a401de9dfc5764ac526eda7c283782b8dab COUNT = 8 -K = c1b985bf5a7e789e74bd586a6fb0f286c71b92c28e6e4314 -P = d25e74b67aee081603808d54 -C = bfdfa03e68e7f38aea4875d38191cfb7a8157a0c92e6b2e4 +K = b2b9c88e47c202c685ab0c47e68db87ae248d131ef100e1b +P = 9cb10c62df763230fc949cf3f5e8c72b0631a2907c270f33328012ea6e112f +C = 6e14be1366ff93ba5e12011b71c8e38548fcc901959bda0ae9d1d86a577b135948ba821847f40b0c COUNT = 9 -K = d8f98b73ff8eca90c8322670302e911ac98f298f691ab448 -P = 6f8e1e8dc6098c9e0e579a61 -C = 80a63c4c20d2d8859eb268ef26d1513f5fd350f90ce064cc +K = 272dca8ddfcca21b5479730f5d3278fc1af752a4be343ae4 +P = e46652e808f8ad3a7f4b631b3fd155a8bc5bcfd2e724fcc2d9eb7a7b79cfb4 +C = 29e2fe5b1dde0eff5f99dbdd84beec48686b6d88dbfeef98fabac4a7d8e05178873c380b0bc85eac COUNT = 10 -K = bbbedad417d8d34271adf9ab40ecf0b20948e01d7cee30a7 -P = 0bf7a90a740c7e0b5d06ae05 -C = 3f042768e33dea3d906e9f53289c0e44ddb107f9be804c9a +K = 4c6e14b75eec95399ed7b58ec293c66b954765f99d5060ad +P = 442cfdb8360a70a6b06858d775c8397c1bae738b76c13fdd1bc6afa2c26853 +C = b678d307e9827589e67c35fd6fd5f7d1239cb61b1aef0f8e9c4859350b042db2596dc7b34d5fe8f1 COUNT = 11 -K = 8ef23e6e59764ae2850be144c555c6b44a1c7b9892dcf6d5 -P = b937b1a0727d6283d5ea91b9 -C = 1f2d37339136425a6e4bbae5aa97d75e3f0bded6cc868c57 +K = 4d7ede283902cbbd19b3980ef095b18d603cf7f4643a5fda +P = 01ae3a5d5449dfb8946de1e98daec36c85952727950f9e962ce55a2708047f +C = 62490e71be1e6d08d77244ee13d967911a7d04f3c60aebaabe32c9b1d28434ac34f4c294bb023550 COUNT = 12 -K = 40deb81562c12c7470bff08bfafd665de604fe1b21dd7f6b -P = 61bae03f5eb946ad227e9959 -C = b00a946a4312461ec21f3fd07e77c77ceb681e7c38645ac3 +K = b550ab3dbc2d4f0a57555972e0706bf77fc459b7edebef2f +P = 73d9b67117bdc1702c29b83627e032bd2d1f26f1af7882d51eeb71b35e1ba7 +C = d877a2ec05745c684dadbed383d24b95e182e2c40dde21146677f1f2f6974665f64c9363f334c3c2 COUNT = 13 -K = a763a1b8f9eb96fa473a5f1f28fc22c601fa8b93188874b5 -P = fac6b20b6a88a16100ff6b66 -C = 7cb51f8cb295171b9c31b07726c1b5fc99eb6d1e2bea48c2 +K = c7efc333fa0a616e7b62a59cf01a60efa8dc263258de9f72 +P = 3efc2e01563200b8ca6c28ab3c30036b1038f743cb0efef5ff1162b4204b18 +C = 415fe2139a13201eb63fbeafa7483fcbea2c35ab552ca8368975fa4160f8a7ba6458de180b5a9c75 COUNT = 14 -K = fb6402796563ca0bb6f4a33bee728aafd9de51ef76cbb401 -P = 8748c63e7f82ee0dfca126bb -C = 22d169453370a2ea704b615865a87db3e2a985f452f80904 +K = 78683eb483420336d2274e6fcaf1d3ee293850ec87f3b2c0 +P = 0d5b95922f96049741e2475297379e63698ab8ed923affbbf2fecf26ae5061 +C = ce598d52c44196f54cc17f0382a9aa22408838849769d62ffcd7949f1cecf1f59974a85ab7c5bba2 COUNT = 15 -K = 4fd0b3334eb6442663a56af13846898f29a5261ba122585c -P = e02a421087595b91cfa32bc2 -C = a4e0853ee85c8d15131c8d0dbd78a2194615d9d22fd714ab +K = 9ec27c14e957c3da330457836c96e83829078e5eafaf8508 +P = 9631c5b45027573957320347eabef6c1e1cb0eccb62a1525e00f995cbd683d +C = d787f0499a4a1e395a47f1d81978ac7c57c0f141f2db980e429d6400eaf0f11fba3a819f0f41e404 COUNT = 16 -K = 88686cc7796afbfa15b17ac444108a20ebdb6d80b62fe82d -P = 024b9477da8e2f3dadd8efe5 -C = 956cd0e2381c60b49847ef1c42929e089565f48ced220ac6 +K = 8b50da1c2118db3fc9bd1bd82b6b798cfd0e194ef66f12b6 +P = 2f87e75b2851aea73262e35b4fba0c1abf2241cbf2470f7a442318168e044a +C = 6691adedd040436e59b692454b28edc11c68fc9e3d14b630540e94bf243a7c82bee6244278059951 COUNT = 17 -K = d336f938c78766627bd328691a3585cc7660d46300e5daa7 -P = bda831516c5d92e548410d57 -C = 6aa7f5389f769ca4dd519d56c3b3ca4c584b3bb9ef216a6e +K = 9afe1017596809ecebb31f481315ea4ed0b3429f7848bf09 +P = 6f07f8f4174de003cda2f926fd4cb79ae6241f77a8e632a4e5281ac2a05f89 +C = 311803d4c253880156236c2ba5957d5cac92bc9a36eb95f169b958a3939aecfc57f3ea242740c02b COUNT = 18 -K = 98d85dbdb5b19d1ad2e5e8d48ac66ed2ce01b74e38acbb5c -P = b3a8493438c52573e93ae64e -C = b96f51e18b075138f716856cef85b3e2906b23a98dfb3a43 +K = 32962fdffaf13b1ac76261a1ef5ec564e9564e1a7a2e34d3 +P = dfe4fdf920cbad2668bb2de0bc939d3c940130cc4cf8339dd6fe2c378f9b1c +C = 80ddce298917f6bd750c0c9e1fea97326d87ba1b67f56f8a15619233eb391b29f255897348fd7cfe COUNT = 19 -K = e02d349bf0aa0d8762f3b08810a5c4eb262e9a5a454c8abb -P = 511c8be89a5eb6e0c45a799e -C = e903fcbcc84b1ae56e5cd8efcae00312a3f358e1d5f02af6 +K = a8883e1ac6c43a7278ee242d590c66b3809c9c923568aba6 +P = 2d648305c24234c81b0eb1b96172c4d87eda7b78c8fa05c5c7813c8e67b9c2 +C = 3c5a8089b7c10d3664f495e36cdf28d035a33eb23fb335a238c662e8f7b785223f0c7145410e8c0c COUNT = 20 -K = 892e00a485d4b9c033a6825b2c46c22891bda4d11680ad8a -P = 4568ef393fb15c78257d4989 -C = c82e6408f5c36328b5794e0b13db918a6bdfde1c008c1548 +K = fa18e86d169e0ebb0bf5341fd3119fc0ff8218e1dea2f523 +P = f4c04fa0c3df83b785db92625d5f5419da0704cf8d9ccceb84db8120e6c4af +C = 749b16a0c6e7d7938631df1b948483cfc3292e1628248082655f738719364b50793631428ccac2c8 COUNT = 21 -K = 8c1edf0ab12bf6981d6b8c94490c7bae4b494c5d1f79f91c -P = d36789cbaf5f1bfff886a473 -C = 6dd03a10a38b69ff3a26bb5c2d3a7fadbb87dc806368f0ce +K = 874f733773ff0f9c80ded8552a8036c13f51d5dad16d2d2f +P = 9b8ec29935a72a4214317aaa07e9e3ba142356ada11be3d13bae0618c1bfa9 +C = 7324bfd7e2a84c5aa6c3d2d131ca2e6941392a409d95632d0d323135def10e7294faa4ab81e796a1 COUNT = 22 -K = 19e3d38e563d1c903ffdaac7126a99ec0619f191e8743126 -P = 9cdfeabd1252b76b06c83d9e -C = 7b65cdc2266f2d084308e969f3068bab499173d269fb3e56 +K = 8c9657498eb37192b5bf51718165ca03104423c03895c10d +P = 612e983401469d4af323b4db8b5c5cbd873ade4af196156216fae60e9a6c81 +C = c55ca1282d016230d22f82dc3a5d68a624a5e37a06e1bc245a14ae9e2c71c44752d0e3165b6dd69a COUNT = 23 -K = fc033bda196a833119ea11666d5647392db4a0130d510288 -P = 7422d93d8b67a80f6bd8a737 -C = 4dfae9352922fb7442eee0f2b82111186e32a4385c5bddda +K = bc3da6f6f1c2f77f8a735f7ecc90d8ef77b6efbf07e20bea +P = ee8afba07f868429adea979b2a643162ee8b25b1adb05a0aa95282f8c86bf8 +C = 369f400ec019d378613d085d7f4eef02592b635618294d06c5e6a20b5f172c7d84a1b7b037762720 COUNT = 24 -K = 72101420f16790083a1df88661084d41ef4fdf56eb9c0c25 -P = d248f197094f711b9416b7cc -C = 34f44efd0f8dc7288c3c2378b0f803989079895fed44e431 +K = 3a9f07e8db3c4067a2510a287fc762749132551e60d2eebe +P = 6f5d8eff80d9fc941a905b22c5ade1773456fb2dadb3f2b8a8acb5e5d1c8fb +C = 0b66927df11dc0f9a2dd4132c778dcb79b22f65d4a6580ef32f3d7773d17ba6f9e3e1c00e4ae9a1f COUNT = 25 -K = 76f15a1f23f20cb8e0b7ef7df5a8c211a8085d07f59361b3 -P = 15e9a6988b92490af2a9261d -C = e55b829b94a0ce53088e7f1389a5eb2b6a418f718cf225cf +K = 9f44a2bcc57119bdad9b19c5038b52d817fb2c073f958f80 +P = eb93ac8be59083c1b758a52269a7dc658152637de6cad37ad519bb457fb7fd +C = aa7f04599bf19d43fc6a8d76f474e6365c015879066fe4233707eb3958fef081ed0bf826131e7858 COUNT = 26 -K = 36608ab4af8bed96ef277b3c2fe3fcb0ce0413dccf59a5f4 -P = 74aba476f0175f7e3aad5d52 -C = 893a15cfbe0955c9b335b1456a373459a8e1d48e97e3ea97 +K = 862c22fbba1e05a0220150745bd16963dc5df903622ce9f6 +P = e843b0f0ccacc696e69836b5cf62d3ec112355a6a7b7aa4d1888a02483acb1 +C = f597ed83831552e5139f559d3ccefaf39dafd7b7900f8565a8fecd504de98fb92a8d974715346aff COUNT = 27 -K = 4a2342fe1fa98d18ac46eb4e7c47588db24364f2701a49f2 -P = 0c8520698d53051746668882 -C = 71f7db27b7bea14d521b5b6fb93b795492484a4c19adccc4 +K = ba7e2ba9328e6ddd52ca845ef4f8814b7492f8a0238c0611 +P = 51edcc7ab76f165913de3b2aa373c976c28f883217a530aa31c82ec82c4ffb +C = 4103577d8c98d613bcbe4a30f37a08b2d447cdc096bd44ad5f5c5635351c2ab82f1259942f88b74c COUNT = 28 -K = 3a5a12bf217dda3941b562c407761791e3a6e8b16755794c -P = 067e9bf6583e7d56e65d2dec -C = 984e8029e856735449cef58dfb6d4fd5b6cd6d6e976f2a4c +K = 007aee0a04033827e58ab2574c0cc6ac5f2e5238a11c8698 +P = c679889a67b2848ea0eefad99b1bb14ecfe3f69fa329898921e27be253ecb0 +C = 6a713a99d5ef3c6f5cb9653482e6649c065496b1132fc8f99ffd754ed5a007daccf4b099948bbba7 COUNT = 29 -K = 4d418f17fa40117de513337bd095120107da7bbc5ac2dc8a -P = fdab3fd76f7aeaae07fd889c -C = 699686a17e86d0886798ebd8816e007307bbdc751ee2ed47 +K = d8621b895cdece8513f70d81f0a0422b39b54c81627ebc7c +P = 96e950cfe4b2611641e9874cc884e61b6dc25c767745843ffafe4fbd902458 +C = 7341dc96c9a67e1b6a2146466138becfc0d48824c573c025887e734e0216079c4858a0617c5a5a41 COUNT = 30 -K = b7f58207bd0a9a3fbf7e6e32dc40951dd7f2cc4f53bb1eff -P = 2b9bc2e667f44d06126367a6 -C = 7b2798ff1540e48398c2586c077e8015bcaf5747d97318a9 +K = 5933c5a5dec6b531bc9ca158b39ebbe2a65a55b1d3952392 +P = 42991589303e6d0f7c84e9f8550007650fbc835e093a277212353b85fb733b +C = b34e1d975cf9cc516db1654ca6f44cc9e63a25698528fa824133dd4acd800560d98264d7d0a57288 COUNT = 31 -K = c715cf2c386a20372322c4511462f4b8bd7d16e564560244 -P = 24646712d4e13bbd0412ff28 -C = 3f5cee8015d40bdb7ef171db61b56ab746152b9706888bc4 +K = 8d726bbfd0eb2453133d6f048113c8bac1cf4d4d739b8b5f +P = 052a8109eb6cebcb30f75e7407281d3b229cf8dbbce680194602d9b970ace2 +C = 0eb1a9ee4da04046866002c47ee6abf4b1fdc9893a863b5bfc571a5ef6b1aeaa9f81606d4046eb53 COUNT = 32 -K = b1ce2ae58d881f4e5cb20597d30342eec16a6ff32f9c0d05 -P = c12e2766d0dc0945e7401eb5 -C = 9e5d87f55a9b5d31e53b4fb7871fde4c266bb3717c092382 +K = cdccc3d412bf870b4f30a23a6da2258cfd296c6957ed7a3e +P = 9e406363e005a645d65e83108c7a3bf24f8999dbab0a71040a27afd930f1be +C = 16a4b4f40178ad50eba46c315ff729f36e5548ca1058d8943b5835d864bf4021100336b9f87149d4 COUNT = 33 -K = d421834b476eb8e0108899f6a004ee2077791e58d2911fed -P = 90ba0f3210665f0d2ffc4267 -C = 8f7bbf0d05d19c79af9b3beccd9d8c4c17817bd234978546 +K = 02c626ed804698dabc635361141c5548bc1fcbeb00752e72 +P = 2ace6a2df7f6fb5320e56eadd94498af26f15356ff5be907b3a13f66a25d5d +C = 7c55af1698c79712cd50b50ef97f8a3bbdca6fd653d9131bbaf40306b28eafef518048ccb2588afa COUNT = 34 -K = d0633f88584008c7bdcb6cce9d8b294487aaa028c6bb0291 -P = a4c671fdc6282ee66cbe9143 -C = 6cda4655a688b3295ff9f5190d7f698b4c1e619ab151698f +K = a1e0c48e80b30040faaa5decdecdbe8a6269eb30c8d1e2c1 +P = 71acda44589ff5e0485cbad3ab6ea30f078c86f5603ea1c143ed26b054cc0e +C = a3ebd509ebd10f47e784a15213b7d28d3c7f1d72e5b215eefa5f06cd7d24a0300003232dc34b5df9 COUNT = 35 -K = 6dd262efe6cbff728116928c62e4bdf235cf4472ab8bc61e -P = ca2a573a6af585672436c434 -C = f9ac9958b5d5eeb8631318d460f504362dfc4fa208156faa +K = 5376d9874e8d4f2c899d2ad9c08b7d07a3e0f769aa583eb8 +P = 04c26c090c15c15c147678fb6aa74963beaa8c2c917c9c9307db184eaa2f21 +C = ab0e79bf4bf41ca873fffede081e1eb5c805cd716dde3c819a133f0be008f676201108506e5fad63 COUNT = 36 -K = 926635b095af39f367ca6b71d3f76d1a8df137f567a325f5 -P = 5870bde55b80a7e48339a4b8 -C = 0f0b5df9eeabbbcb2c2bb6fbf0529c392e4782ca0a8387d7 +K = c60f182a933e5199394df8c8d016951d4152c2ad679e2ccf +P = 6d1833ce94040bb3ec53186f7863c51a0041b0b3b5d0309e51884c278f6dfc +C = 1504fc13e23b2a2fb29d33efbe2bd0a5b00848365ec5bafe57bf332822b844a7fb7cbba95510ce80 COUNT = 37 -K = 583ffa31bee77e2909ba8bfd07e6e9a60deba3822dd6984b -P = 9ab3d8bf1208d9b8827f73c6 -C = aa2acee9be7ff981e49ce43d341785d2ab26486a1c339bfd +K = fe3d35249f9c4aa2f771853783d468840fe6ca301d481f9d +P = e8f03204e583c9b543424502c38979bc49900142cac54d57767f5b756b2e4f +C = f5944480b83c448b9c7478f530305c15de77a5222ebdb0e749e4a2ed68ea01fad79d055115465330 COUNT = 38 -K = cb604275cb690671888f2e73b3a4ba8cebc1157c75167d03 -P = d0d5c00a0d56030480eecdb5 -C = bc9d60fd5f513251e6e4fe3909712bd6d480a41894241e80 +K = aa7021ae8e7576e673e6ea62e07b1572bc339807355f65d9 +P = 7a0cd1f9200f8de37d2b5026932d7aa9b386d55c054db8baf934ec84c3b9fa +C = 42ddfdd4c3261edefc81290ebec77ccfef29ab24e44cef0b468f68b817b5f6b4ff6da9ba5378ae5d COUNT = 39 -K = d28110df6a4d80b70c95dd095d40bb7bc6e873abf33ae5f0 -P = 108a3dbcc4af60b70da1dedf -C = 11217b4cbd9f9958142c16563f65bfe1c6d285b93c6079d6 +K = 1a0b0315de0a79edf9d5b9edf60e6c7e7cde384d216e8dcc +P = 7e4dd7bbfb2ee36e4b7c604144194ebfc287c97435c8f960d51a4f1d0d5469 +C = a3f53a5d919b4adf17fd2666f2019f3158d9580d7ffa10ae45ac84148a2f872a581e97050f300836 COUNT = 40 -K = 2e140110f6cb505be825001b20906851d10b7807f250f917 -P = 40efde1b9244f54b0daccd44 -C = 11e454f9a7912a85d9a117b1432b2b9b314486fbba08cc65 +K = f7a7d453c72abe6da4318cd9dc8a07ccb7e4d4e6b6886a16 +P = c2e6e7a8cfbb1ef31857fbc77234bac7c1c6f9f239b850a8ae4d5bc1e62893 +C = c10af6f63ff80df54306f7fe760350020065134c59292ba8835a96d4c4558137b610b0fbc5df01ec COUNT = 41 -K = 207eafc1078501ec68ae9c1a5afec15d196b08c892efcd21 -P = 8d61c19556efb635155312c2 -C = db0e893a3aa62386081578e012c09ee0fd793a685179502d +K = 2eecf257429e6e6fa3d7060140d5d27bc8b6ecdaf9668763 +P = 2a263391d152842c7f1b5b18bd3e79bb61672b0365b2428f7486cf94ad7568 +C = c44d5d407d1b890272907dc0cbccda221e23606568ea06cb4819c17ff3373565753cb2767ee4873e COUNT = 42 -K = 3ce4cc5684121886919c4c0f7ef265287dca032d39f78e84 -P = c777ae960135f9a5c65049a6 -C = a1be4a2e8d412009563b3bb6080ca17d046ed15c09e05a48 +K = f8ab32464815b2e49352da95b8ad8140676d6fe5475f9224 +P = a680af247d154bbe4fb8efb72109de1a87cf271ca13f9d377b2a2743ed9f36 +C = 1ef49b86669cd9cb1a9c9aa6ec6de96a505d8ff08cd653fd46bf68eb1dda4648272d6901d27e7491 COUNT = 43 -K = 8a6f9d692d376ae9f1eccc345a51ee370faa4a0492bb9403 -P = 29e811e7b50c2949614dc2f3 -C = 99bbb28ce795626b9f463c9dc99eaaa81e39fb689d2fa270 +K = 490b5e240d25578ce090836c61a05a03b471778588c70d1f +P = 8452500ef873215bd2d29fc268ed01c0078f0631c0ce1f79444a0bdf2884a1 +C = 5544a66aa2500824c1f882e2500b86245a31352a3bc085e047bba4ba6fe516eb90ff5fe598a050a8 COUNT = 44 -K = bcce5aad4e5afd2af5e9d3e309032e28adb222f37aa0a9ec -P = 5c444edc833270b6ce9a819f -C = ecaf0603fe015290ee84c6ddd1d54361afcca9c2c2a81d44 +K = bd9e29281b6a80d0dbfb6338754aaf15910b0b665d4a7b16 +P = 7c5acb2986cc84514ef9333a2f80469438f8e2a1304001be10c9242d4c0419 +C = 6fc887d9f3c66f6db2f91a547b0064549341f12d07dde43e351f823dbb2d8a2a5b96e45a52738ac3 COUNT = 45 -K = d23ba947207c972ef8c7889cbac239f164f820f21c242ca4 -P = b8a8ab26153448a21c53944f -C = 9a19b76c9c101308197f35c9a6e3f59167bde3a12a164fd4 +K = b322dcca8052bcf2b08b13335423a9e91fdc2d368e2c1547 +P = 94a1c4e701c16a4cbcc6a20f0791d690f64b769221ad29ff38808aaaae75a4 +C = fc136df76b66f4a0ef8e05fb999cf70d4d321dd4e998a42300104344d2967d933478335bfae488af COUNT = 46 -K = c7de144ecaaaa401048172a03331fc4f8008d5013609886a -P = 0ce674b35ccf82688626f17b -C = b7ee07d8b91ac2fa277a8c181398553eec8b64bf011acac5 +K = 199ee445dc4aef85951810d8953b1ee99c62828d17a5cf2a +P = 0495ec7347b0d1b290e529ce85f69df9a0d0d22fafefbe9d4e63416cb1dd07 +C = 4c4e2747093796551071fdf432ea31fc250b0ca8034ca33195f41d29eb7548d4ff374344fbbda09b COUNT = 47 -K = 4899ec7b9034f04436da96f3b04a19c573a8a2dbad64b843 -P = 4500f947ded757f54acbbf56 -C = 6e331c4e5216df95e6507491572a8d0cd00bf699b0c3247b +K = 0f15ee380805bf64ec66fa9f511f712e9afb886e18e262a6 +P = d24cfa4e452b3c83e7f0a2c72de764501efe734cc4b62ec15b1128e7252338 +C = b5bf964461bd443b215c59588cbad21d52c9597a9ad2bb71c1f903d4168e6768aa573d0a17021a71 COUNT = 48 -K = b146ef25ddb0998d4cd248bec05b5e5b1c1e924d0feeaf81 -P = d4c42fd0ff6de7e01503b234 -C = a29e91a922dcaa86c97b0c6919638fba7fb2cded06557cb7 +K = 2beaf2a3ab4c8dba8156df7e7c9e7d5dd43fc830431b9cad +P = cb73dad0604f32a23118e623e6b2785ebc6b63eaa5503ab61e2c9867ab64d5 +C = 90701b39f0077d7b8a59e1e19f8405f7efd186ec3ce4d377bea6ea45df15c35c172418d967873c47 COUNT = 49 -K = 95302c977b30c4fcc50142e17e44dce5d3791bbca4b47f60 -P = 15af48682c395f24992a31b5 -C = 474cac86674a42fa12d670c22e72aa03c71895fe08984581 +K = d9ea8853d4e1f1f07157d705bc8ceb12cf184852bc1800b7 +P = 93133841dc8cc356dadaabf1d1d254c25f6a0e6dc0827d9504c88a9fab2cf7 +C = af9c28c2504ebd9b5608207715b648d282bce97de1907cb4a1cb6355aabe8862136f5fa9ce28508a COUNT = 50 -K = 71882f6e3b9d02c26dcf7bc551dd3e422d9cac91c54f7c39 -P = 6946c29f5ad53225aaa88f5a -C = b447a075575776f968d64780aae2fb32e61d0806dabbabd8 +K = 34efaf5da1a0b99c3c0102e560a35aba2c144efaf5584b40 +P = dbe8b5cf6e40e01aac1c33c309a636936336830b1a6b1def364fcf0721176b +C = 34198a1f14cf8708db1a39066d92deec7ee99a2423852badbccb791330fd2529efb8644d7890a900 COUNT = 51 -K = 8e7113ca7b98bf40b0353dfef4aafc66a6c926ee44ad0ea3 -P = 6b67c03cc700d357d21ca361 -C = bf443ad08c6d09b4137b9a16630304c794ac250075c52ac4 +K = dac1107bf5951f58eb109fa40afef6aa379459f66b077c9b +P = 393fb07965de37ca33f861f795769a0ff33e603adbca5fff2d78b364891e87 +C = 36198239f334e7a3e8035dfa12d26da1c9005bd12820121f5010d47501bf7299dc1de0868ec0455d COUNT = 52 -K = 7dd9fbc8502ced3161f123a9c3479eaffa94781efa22d38c -P = e4efd638cb40bf3e295d1d99 -C = fd7712da540d6136ef39aaad380cc55da4ef2b527d5ccde0 +K = b2c23a43d293bcffe88ea8dc38e059409becc1f42c159010 +P = 0c085e24d9fc2a99926a5d7a2be3d0d075d9099271c06c797b02281897cdf1 +C = ca14c0e5bf2da8294efa5aff3ff571817ed48b3091c0523b1e7ac78b468f84845764cc4cbaf2c1eb COUNT = 53 -K = 37e9f914a538eedb1cf2e1b6dfe59c521c56d74d6641b0fb -P = 931878e3b0f07589cfd0ab06 -C = cef3008306220fbf0dc7ec5ea03bd65d357ef53fa9b13651 +K = 7a12e2d1a55605184d7ada5463b5a6501ae39252aac1ac9e +P = 5a0904a26bea8c0e0f9d73291a80695da15ae18226fc053114b31bcd9f120e +C = 839bbab01267ef0a5fd8e9d3c86e74f32662697ca04b8153a8b3c8db6493735f170411c10db580b3 COUNT = 54 -K = 34a9490c22a2d5dfc6e362498aefc63ed2368faa9a9ca86f -P = 78eba7d3b40522133d8bb5f1 -C = 12f07bf7002e8ace6c0f43af540ce932acbc81b52e342e99 +K = d9f30effc6b30d87b41cb585f2040ddaa8d5141232a2d30d +P = 02b568e4eeae9f13f2add8d3c73ff36c9613934362cdb0947528e625c3197e +C = a1606a52d7e9985ab11556c78f68cf43ceef8f159e42e7b47098b960b15ad1740ad7af8e79f05de2 COUNT = 55 -K = c8683ff2165e56977992caa56e174e412b5f2cebf9831ad4 -P = c96d4c1c4013001bb2fb5c18 -C = 33ba88391d0ad379e63d0f918e583c236aeb9fff5713f533 +K = 9493b45b9bb6abbdf70505d04143b35788b538a3d27e65e0 +P = fb0b8265e15b2b1734112f755a7c0184e4abfde7a034dbae93700447e4c748 +C = f52484eea0285c9698de0c82e80289a863cb861dbd98362beb61919b4a8da947065cc1830ce54703 COUNT = 56 -K = 789ea7502439a6a62618f30b470e63bef36eef1adfc21622 -P = f2e58a4e046ef7ee50d2c345 -C = c6e2fc351524b906c761a76e466975c6ae22b9ae97603a12 +K = 9d3d51cdebe3fcc789f72fb4046fa66e45241c408b320d1d +P = 8fc65e74b85c56d5dc20ed4511e3981ab3136c41fa27788f47f023ba576e8d +C = 12fe552cef2a1f662fc0d6841f738169e4aa975e3f834509af285cdd3012d8e34c0a05b721b15523 COUNT = 57 -K = 64e332e56ab2a5930450bd061ddf9eadd3937892f72d1a1b -P = 7b9e047e37cf924e135ac95e -C = a8b9a023a3626406da2ddb5320103d8d5474ca23c7444afc +K = c5eaec1e64eb67384f58a295321d3544040126e1bf797572 +P = e37dbb582930660800f672378e219a327f38d5781f7d022e5f69303e74c6e4 +C = 511c49d1bf7221d971b3811ba346c00d3af7ab9aff28c4e70c89ded0f3ab8832cebdb8658e2cddb6 COUNT = 58 -K = 1df197ccf25a275c9060dab2a74f6c411f27ea79ba0ac938 -P = d4eea9993089726b7d7f5796 -C = a4bb61ea33e8db4f03ca2164c3d6cf9efbff36325d7925da +K = a0fc3374a9d46503df78db797929e74133eb2923a11948e7 +P = 49fc934014df9fb454f052ddfc67ce853163b61dc9c396863525172ba4f8ce +C = 5c66fff902b6293c64396ebc6f86360b8028cb039615a2d4ac62d74209da3f0738d3641c9b111662 COUNT = 59 -K = d5a9a18fb3750bf22b7ad60b5bd034f4dad1d77876bbce35 -P = e2bc6f2fab0198ef6e98919c -C = fbc1df0c0047da0489fdeb6d1675f1ea99dd52ec3994cd87 +K = 050337f8b812a66b3ddb50d85d5aa7e30ad7ce100aab8dd0 +P = 462455ad16133b504c4eac5fcbcfee1a4474d7c12308d5a601d82794b542e2 +C = 6ed3d974958bf24a3da7d92f16100c0d664cc9feac3b7e1b25f526918677d7c76b6df9f59ece0439 COUNT = 60 -K = 6b6e80bab8fd9140ef8a635c3408dcd3df7dae63559d0384 -P = b66868d72591730bdb047f90 -C = 3abbf1a15efe92a774ccd3db77adb8d6963765e943fbcc88 +K = 17da392f23ca9a1acf98e429a16fe6de3612654e3c6d5583 +P = 288d4d4192626ecf0ccd46777b25f197367cab863f5b283b6ee16bf68e6e90 +C = 68733d4eea18dbad2da1bb73141064e0843b2ac31bcd9686dfff398dcc69529751838d167893a76c COUNT = 61 -K = b509e0553d4df537ce50ae063c0f3aac3178bc2d9e5bd693 -P = 1c8da1148a790d0de8fe6f65 -C = 8e355941749d1dd3a0e6e9ca82a320288ea55b6518f35861 +K = bba292049b4b9d7b2e8098db70f67325a172ac1cde31a032 +P = 1c2558be732bcea423ec0edf9aebf90ea1308a637909511e65b3b950badad2 +C = 348aba14a29f662ec0d44deb431f58362caae262f7fad345e7d6efef443354be310853d0a05cfcc2 COUNT = 62 -K = bf680c1097934cc09658a607cfd15938d594ad915b6c977b -P = 96e8f83d806ac5352c862550 -C = ca32f606a015e1fde86b72a1a31d8bea112628dbd928482e +K = 4ee8607214d5ab9dd5ef09798484fa5c8ffd2613a2eb0079 +P = 6e1d3d2a9046ac3f574a6a0f602611179e1634a9bb99da161ca33ed8377ca4 +C = 82a7f65e4f3a4e498ae0b82fc86c66240cd92f9b17eb4dbb14e378c111506436e0e7647fa3387d90 COUNT = 63 -K = 02f2ebc4b3293287c1fbed50825e19433f00f5618e303a81 -P = 2ad59b424b87c85025718343 -C = 34247ed04f3f7da6ccd488ead5a72a24219ce578fc355e5c +K = ac59118838276115506a676c8a83fb3e8a31a279b9d09985 +P = 6222cbe41a203c2f606797bebe868a1f891480d93dc26686a11bf218270a70 +C = 5ca9aace6c2323832aac23df36650a78462a4fa0bce61427904f2916f3e696ca30c7996358b3ebac COUNT = 64 -K = 1c0f14a161f88d0cbac45ef66855f14587bc7ca3f9c068ee -P = da07cd991a1f0a14e583d3c2 -C = 88cb13f567646ce53f3bc020cdf411dbca52e53a2b1bb005 +K = eac1c7fccafcf1191f3342f289818a8df49b689bc7b6bf1e +P = 6967a2e5c382ff42e4b1921af5bafb2a5bcfe22ad8abb0a81f70b45ada727d +C = ff0f2e2119935dc802784f734ac4893138334a76550a7470862afbb9ee8c899da8e3fdd97aab64a4 COUNT = 65 -K = 46789b8765ee3287d2249c03ff8b8849b14d8c6016fa621e -P = 22bb57aeb64d2c90b4e0215e -C = 1d65408781a7d54e10fa7e22497cc22daa9ad2c87468a3da +K = d4ff4c0a11c4aba5521a8762c475c9a0c25c362b24baac79 +P = 7ff5c450082de4f0f49997c60e315554bbd8b6a6b586cdb9a528514bbc533a +C = bfcef26331b7f43fa82be9ae1a533dbad88d21f5d4c174f81bdd198f56e6a5a38767ae69646e0726 COUNT = 66 -K = c4f6396b0c9bcaed4105eff3e8f48e5ab857eae2f5f56f77 -P = 7a0a396592ceff9aaee8afa1 -C = 7ca21ae5683ab72b6614ba4233e2c36bc4cdc49e27780e75 +K = 345af5e39a6b75d4f1c6e02365ad1e2ae35271b9ad38c1e0 +P = b1794d907e6c717b07ff37ce66e1e118b6c44a2874fd1cab5b46e816ecefed +C = ce14246bf88e2e437872d9a816782fc77655c0dbcece8f63cfeef83be16a2d2d3ae5e286af6b16bb COUNT = 67 -K = ce3d97e37b24717d09bda71eebedff8237d53fd5cc56678e -P = 4cf664e4ecb1225e38ecb1bd -C = 074d184d9a9ee8bfbc883624a745da94e04fff3a45f6001c +K = 4261d23d59892487944df96ae434827aff8da167743819a1 +P = c7bcaa0d94944e508eecbadec4a4dd45b5fce25e992a507e381496a7bd8b1d +C = d2fc7205321e9c76578913c0c8bd5681052ed7766acaeea00274f78e1f9f9b262e7b39e658c15f86 COUNT = 68 -K = c1404f45e4568aad067f1d560c1da38af44164f23c140f93 -P = ad2f6925e5544da9bd46c254 -C = 1fd01dc846ed536b6293d1a750a56a35e08a847a8103dea8 +K = 22755c1e8076750a261e1cc742210f512f7bf211e70bd2a6 +P = 041a14b003d7b14d4b9c62deb360fa81d80379725ed2e258bf965c7142e098 +C = 3eb58a420f14f6a38e80dfbe63e186eeb773a985747035e82a52ade09c84f4caa750164135f865ba COUNT = 69 -K = b92d223255288707650c41b2e7adc9526641b71f81bb8c18 -P = 317b6d83d1ef116184beb898 -C = 85c19c15583546b3ce9c9853f3a3f30bcabd8a83e4de045b +K = bf81f6b6ef50430c8d5501413983370b7b20715930330df9 +P = de0243739cee589572fa5412fbb0e580ecd3f29df60875d1c5dd15a2e2ab26 +C = ee56e885f56c3d14ede07b94628b3374d0d45e295e3b9a4111bae1fecde0fe89e5d7bd1ae036fb5a COUNT = 70 -K = 0f55fac762bf05904dc3b1bda171dabac7b33d71bfaede84 -P = 3a4af83827e6cd295a333e21 -C = bf002af949f83dc4e5a1cd1b00a2742ace75e9961e5a224a +K = 76d45b762d578f5a7c6c5151c86d397fcc062745046050a9 +P = 8dc1e207e2aa02283eb438230b94f6b184c3e69ac153f7584a6a86b08d6aca +C = c925a8fa545c203dd5ff1ce689c5fb941bf30a71d37ca1b6f62151693b452261a1565443ccf8f971 COUNT = 71 -K = b15f48838240f4016ac0d040ea3ed90262d4ee1d655022d0 -P = 8ac724b475b5895b4d755546 -C = ef8ed583f96e0ac410fb605c5418c255348f8c7ea6a2bed3 +K = 0acf1cdefbc22df5a04c2b1eeea0332f462fd95817db8b33 +P = b6090a8e389c23e2df8182cde6c0b69e92a9e456dc19317c2f40126bb0d7a2 +C = 7c6cf16fab3f81595a27aa88b2790055cf0dca42f4925fda1b2bb3f0a2442ce9bf9bd02b65670e85 COUNT = 72 -K = 91c04b4262f4133bb039d3f936129eb15011ab7f6a88542a -P = 2447ae47305294fb1eaba94a -C = ebb21ab650f5600652efde40fc373ee94a7fa5ea5ff257fc +K = a08289d51ed2d800f3a342916a954bcb969f3e9372da83d5 +P = 938226f296462695214f89de19e467349c63a4cc8e411c11ce570cc6f9c511 +C = a180f4f61148a9649242486092ccd5d5127f9bbb46629698d343cb136e366fa4d3cd61a84daeb8c0 COUNT = 73 -K = edce2ebdc106fc8dba4de4de9e0750585495d31478dbcf59 -P = 061c0e994cde22a438d983db -C = 82e9c51f381d715e4af60830883f96b4860eda986f9aeca0 +K = ca1febaf41611d5fa497c301fc35e81420c2b43537c4c791 +P = d38e8133587eca541bdd7195fd41d7cb86efe003b65ea6bd2a6b09e33b4c33 +C = a21092fcc7ff333fbe9c6d05dc014fbd58d3407fe68cba21b50f246c0ed6fdce4e0fbe44dce7b3c6 COUNT = 74 -K = 3a2aa596b0384cec639a7699d55e342c81a2814575d79abe -P = 284d3741597f29def5266ac3 -C = e6dc2e2c11f8a14c0608f9b6061de429a8aac2e64b0f8f85 +K = d703f1e04e577f9ed5427763db64fdea31014a4377d65285 +P = c08a8233bd860efbb7ba46543e5e12a172e6dc30809f921ad19f9c935183f8 +C = 4d2fcc99bd4fba75541fd95bd7c947469eb16052098190855109d345880e755b40f4c4ab5afa3846 COUNT = 75 -K = 1efa0d1b21f5f97b5efb8285d1ab098c63f191ae395ca25c -P = 63a160cd21368749d509d06d -C = c1fb5cebe599195329c0e27cd412cb17cdc63892927856d5 +K = 501076a5d7dcbd130d6a00efd66aca15796530f74fc63988 +P = ea67df4d199af244654bb3d8d8e0cdcf2182cca835f204071c8403df7af3c0 +C = 449ded5dfe58b419d6c5f157924d813eddf1439a266384e082f95f8a9c0e66bf72c9eae45a181d7f COUNT = 76 -K = fa6dfec23fe748883b6e24aab8588d2abbdf067c2f7b47da -P = 0286283380befec5252c8ce3 -C = 6bf7e02f4382a3c6818a27332fc5f89148c33b2ac4aab5df +K = a2ab5d3d860083871e5acacaa2e0c7404af203413c321da1 +P = 17e024d0281b5d3782ca84ecc200a05cb8b9fbfaf4cecfb169d3afba18c37f +C = 894ea637947672694afd670a0f832155786095dea125974b27c10cce6f3499ee1bd1b809a52bff1f COUNT = 77 -K = 5e656306f1e5ac7ef5ea94dbf3197c4aa7aeb16552abb061 -P = 5aa8c1c393cd2b4b154dbb30 -C = e7038eca3c1c497294a1a18d1aafe91fdf3188c9e676054f +K = eaf1c0818bdfadcb283d0b94f06b78c602f5a6cbe645154d +P = 8c178bd89f121feb7c947765ae070460071060fab4d9f780f7cc61676da83d +C = 0a299508cb9053ead65506ebdfa728789c63740c237862f2e5972f6093fb71add11256424024b7e9 COUNT = 78 -K = b11ef2eca854a8645b38a8fa98186fa38fd8e9ac908c6338 -P = e93508ab8ab30fedeb2d723a -C = 2d9836e90c5890c6e38d4dd1892eb6ab31feb6977c68d71e +K = 27afd7d232474a1905acffb1f8f74e7be805a879c81959c5 +P = 3a6b1e8d5c53d3d763df0698856b3ed1c12b6eccdb65b092bc0c5db558566c +C = 3c8136b0debb2c2917b69c508dd18f495c76242b7024984ac770e13ad652d9e4c08a50173a0be980 COUNT = 79 -K = ff4e4451f01d2c0f3d09cbe9f17efbba415337a33104c6af -P = 13dad712293285956b615874 -C = 6307d3c8ab1324cd2057c981a80e5eb63275ecb49e521812 +K = 8c2c02745cae2c3a0a898c65f123f2f682b718821fff3188 +P = bcbb04da5551020f55b18de571d57f0c7a4dcaec9ebcd7921ab416bc264ebb +C = a9ad9997511743abbca3d877faf1bae630efd550a4f4f494681ac621eb8e6ea26838b17914bbe5dc COUNT = 80 -K = 1be98367add2f262ed9311268f9e5010a8ae07a62373974f -P = a936947fd841fd71988a7947 -C = d30a3ab483be8cd614e1509859b96957825c359b369547dd +K = a3204f5beb93a0fb06e62987d9f4923d4a1b2d891e8b33cb +P = 8239092d9fcd61ecb0afe8fffad61ef033005ced61b1fed77bdb2af3597f36 +C = 1c929f31bccd6e96e10ad455ad6642c9f9efa5d51bb894de59104f4f78598d0fe2826bf761192e39 COUNT = 81 -K = 2a063082bdcfd78b858b869553cbb19dde3b48ccd9d3b40f -P = 3c0af4862f6539f67844a444 -C = 203f599ea2b5508c2c8c9396f25e292b5ec2366ef14cd306 +K = 489adc617033e1599d86461804a21a0f4babc64a68b14a3d +P = 6cac8a04f143b5a931fb937a4bbbdab97c39b752891b954aa85bfb645512dc +C = 1421e5a88b5d9d18dda77650523e4c3396d6baf13cdaf217f2361ea46c8dafb7aa7416709a3bf724 COUNT = 82 -K = 234f505f89a16f8df94a55a2169e12baaa903e58c2a07807 -P = b63c0aa7f76a949fdc62929f -C = 6c1fd2d925c19a45af077244ca24fdd9bb17492d4bb5d128 +K = 33e3a294a853457b35e70adf4ce4c511f2c1937785f5871b +P = 998913d9231d332f2e02f098ce99c9cad3f0e6f640e5497f8f37dd7e8e2cad +C = 9e694b4d0293b381deb0c019f90663189ef0db2fb52cca8dac0e8169cf3452a1c830d82183fd3a32 COUNT = 83 -K = 9d79f4b7a2dd2530fb4bc4457c22634a8d243af809f6f72e -P = 6e22262f2e9963e0c282d49d -C = 2fd5b9b4207e12a2ee2c2fc1a9a87e6c3646380d495eed87 +K = 5fd0932f52e84fa23f85a533dfcba3784b2366e7c679bb86 +P = 21f6f983929180484b84a3b194d17d04cd038cb850b560f66a0694121993b5 +C = 73ca32f5e5617f7cde0d191fce6d727149665f751fe832a8c8b98aa3c06bca0a3a121c68e48a7904 COUNT = 84 -K = c26b161698c959d2fb2d5bc5da145067eaec7555137eac9e -P = cb9e4dd134021596502e9699 -C = 48871d1fa6540eda1ecf97b85fc909e7e08bfa66b54af39a +K = f1a4a5a04a8f93d654ffeee232b3f65dc12fdcfa3eb3a706 +P = 4eefa127ef66dc602f726e2529158e841335fd2abfbd3f61202d66962aa80b +C = 26c03167011c0408a9fb375e043e94758e4b01f4ac4bdc01979873be09102ec2390189888b7e4ddd COUNT = 85 -K = a4aeacb45e40021e92c173695d1d1645cf787775ffd9a6a8 -P = 1ab80e136e86e455fbbc1b96 -C = eaf47d5f9c2b6862da3036cf14279e4ca844c8483359038f +K = 187457869e81083d519a45d488ccf567f3fb7e135a706b74 +P = 42c3974134e83b5a82897e513467265d1e467cee084c5f93dd642dac26ad2e +C = bfd02de6d5494f272674db013feab059972cd5cfc789059b97066e779fb178b2e2839e95ede0d57c COUNT = 86 -K = 3c8d912ffda144e88fc506255b0ca5566f9a5d5ff182d2cd -P = 36bc546f03b3f3201530baf8 -C = 196cf8dac84e92402858d7a75ed36efde3d2507b329f7e9b +K = 95720d699bfe4db3fa27d220d16c0a2301f1444631a27160 +P = 0c1a746ef7ce9a4868ca700800434f22316d9c2aa2d7597462bc72246dc4a7 +C = aacf295be1cb23c2fd6c8c14bb504e1c408114ca580b936a25781112b2017914007dff1a931b49a5 COUNT = 87 -K = 1f5740059a22a99b626b9b9035d66236d8c5506a4e6af06d -P = f552bd66b7cf309d272de6ce -C = cd3c00ae97d6eba2aa9f7a78a2cbb48bf122b92a9c978d50 +K = 498564e7d1996ba32e397f4eef7337eb04709de1dd63e51a +P = 88d0a362e590fb993fdb281c16b5ad53e7723bf42f97ad8efcc30134d5db8b +C = 19cb7f2db4dce09a88c213e919bba7c411a93ade322bb3e9973d30daf5eb135f9a4658d5051dd78c COUNT = 88 -K = 2f6eaf018d81c6983ea7478009f721c78098059714f4d5d3 -P = 45295fb1efd2802872e10ca2 -C = fae87914c1d3d39b5d63487776e156b8a38c82987eb569f1 +K = 325e921a7ed7b1634b49c7b0287f46d0b30e6219ddc7da9b +P = d330002ebc6e6da68659173595f096a12eade75a2a5462a3bb7c8ad15c6731 +C = 80e8a610fcce16515364c6f3ae655555751ce1b819b10a564512ddd8ba78a1c9e71798308a16a644 COUNT = 89 -K = 89e11093e95648259eedceec3fdbbf7541b0f8ada14f9461 -P = e9780eebcaf13b9ab3042588 -C = 184c304a5523a4dc44cc10c789aec29b2f41c31d45102c7b +K = 6e4416c3d9bd5a24973c4046e4098c32c79cd1e6d075289a +P = 8d9b5052a8123d75090965226114e33175ba75d2c9e7a29d6f272e457dd7ac +C = 2b47287ce7da142cbbaef68669e5c9ca149bc05e0f8f5726bbb6898803af524468888dc88ba93d7e COUNT = 90 -K = 1c0c1dd4d2d63198419ecb3e49ebdaee466f1d2a5fc3a3ea -P = 5867dfa8dfc2dfefe78390c2 -C = ee7ed2bb315d9feaf0cdf021955daac5809e1901d063ecf7 +K = 33f448a8f2902c86570ca70b443d9dcf36a73f98d02d953f +P = b617241d1896d5bea0b254f8f2060da6a2d6d2657ba07494151edfdb1ab680 +C = 4933e1bca08c5d2b618e395c3203f32265270bad05e01fded6d0cf426f45f51c92507e836924de48 COUNT = 91 -K = 3056f84623f73f7453f351ce14974b09a5517910b328a992 -P = e64b6ef4d844429c91415c20 -C = 19783323be9c6d5d827b86580552e931b1e31834b8c3b34f +K = 5d8fad288fe993d8607b4e804f09d8b6cc31c7071b4dd66c +P = 0cb44897bb1624b4ecc61988afc927667246f302aa2e5e72e0291c0ea6cf0a +C = ef144c44fc48fb8f2d716911cadee3c82dfa3e6c51e3fe8e4e8bfec47858832bf229df1c6e7606f7 COUNT = 92 -K = 746b20138b61ca63c73b8d1f255fbf5c41f7eefde04b2d18 -P = 325c54baeeb2ae61385f48e1 -C = a272799cb32849ca0d6e08848291cb050aaec793da21e147 +K = e5aa5f909b923f3e7f69f735a3e25cd5b894f1ee2b5e030c +P = 3c10c0985b26e4ad21881c0998d86d792954a1c4c91f15a04215e353e4d159 +C = 4a7f85b1c5de89149ef2268d50f6fb4bd519021945887ad4e92132d17ee64e1f0cac50e8e9e5cfde COUNT = 93 -K = 99900788f9ab14b35a8d1d3531f99cbe7934f3b126261ba5 -P = 3102f670c34754f1aea92ba9 -C = dfd50e9fa43ab068c51b5253e8d4f66c6455c7d3d661d344 +K = 9a0575e24269e3a6ff828146d9bb548bb89fb64918c17c9d +P = d45e64bbc141a57e9e527a0068f67932f5b85a40096f90ec836cfad00ca6b0 +C = 2625ec9ba4282c074872e1c82837dca561d3f4f979a96efa89224a0e699a56cda5009e91dab1417a COUNT = 94 -K = d5d23fcde38cadf111d1bbace6d32626770f277737aac05a -P = 4f33246028f7337973276295 -C = 28ef2767645fda35a9f19af9965b9488d3b6aa4cac639b4e +K = f0d0dae9c960888dae69571cb0ba5fec56c07a07351eca40 +P = 50eb6024b49c7892f3bf562d49cdd513adec08d88c6cde0f8fc53050160690 +C = 3f15baf968012f91c05e810bd86a94899bbbaaec0793c681f24d6069d1c54e0055e8cbe93dfc9bf7 COUNT = 95 -K = ee5cf910e1ca2da93a661b555f31cc067cb5f6e3c97bcce4 -P = 03bf17ef559ed66e3a93805e -C = 9f8f92a4a43b191a567d1e1ed498bee1330e5ce5970e4849 +K = 91741a85e370c079c82eda156f171c06d41a2b4ab6265efd +P = 2a6ae661aef841216a07f7f6ef3476f731ccf885160e94b8f991204fce703b +C = 2d456a836627a49c45fed9432c0c5a19c748b907014ecbfd052b8aee8161041ae5e3f736a4805cd0 COUNT = 96 -K = fee42e3b5b551f095b10a2c2d74b07d56149bf7b5469b454 -P = 7f45a7e39b116b10c2b6f849 -C = d7398fe6896b1b41a8adf4f437139cb0fbcbd963e862b4dc +K = 06ad06aa8ec740f1275eba149ae6262a1bafe55eaf414993 +P = 1439a4efc815fe0006cab8634f27b62339082d8e3d9b099a5bd60d9993e87f +C = 1a959de9d08a9696a0e77baf71bf0c6f1387e0d7bdb73f05951367033e2264f0066017444d71eb3c COUNT = 97 -K = 24e6024d0702418de8b643f908ccd95763cd189395674d92 -P = f13401300be3072906b8469b -C = 1c5ba48819b0fe825628fac7db970534fb0ead918a1e164d +K = aa099b83e9204edce112b869b181526e774d9d3f3d76d740 +P = aab4db82d0b5dca5d1cc9a1cb8aa31ad11f76cf307365a151b3f5ca7a9b9b1 +C = 9920affcbb59654be515dff1350f51b08d3ae8a8cbf0702a4bb523dce3bc91a5647f48ccf3e8dc21 COUNT = 98 -K = 487ada80bff425525dc0327ae429be033d4e48129d23c823 -P = e917814960707ba0eec7687c -C = 5f8ce1fd99421b990a1deaa5f1ca39deb3c38ace6cd4876a +K = 8b3a8cba76464cb9338f16d66c11a1a72819838ffae6d109 +P = a109cf96bfe66d086975a42e7790f0a7e480bb1d22f5d4267e861590bbd3d5 +C = e1355129bfea3481a448c73b95c51f9063a011f206d9009138d464ea513c77e015db696526a887c3 COUNT = 99 -K = f6dbba79591f9c44b7ed970de99f36f6003d4eb014dcb7d9 -P = 1f8aa10e5b8096bc03df5000 -C = 1afc4c1082dfeb696b8c0eea2ab5b2217f8c70bebdd23e1c +K = 0de8766d280c3083bad9d8c2f6572e284911589a5cbc3ff3 +P = a86ad2684f034518f92beffa8dc819732ed9d6697e46124418cc7b741dfd55 +C = 2042bccbd868feb5892b329eac0ff3b00ec6809b481c68114ffcfef3185a1ceb8c096a62dbb8b89d -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 3e3d9d699f5ff32c816aedd6e4c8ff1edeb548d6562dc369 -P = ca4f4fd3e4ed74cb6b0cd3c804c567d7914b3022f9bc9961c73d3176f47a3089f3d52e28e6be5b467ff35beddbc84d9fa399bf5882f802830d5403dc20720ea9e6386abb5a8e754a448c4ba56ccb06b6004ae96f71b470e9f56295e57d8b78f9876a6a58cf -C = 02910bb5aa0a75b9c91140b7511779121417e2f3c4a3fc4ebd4a91da080f41efff1fd7e016a4e955deca834452714786f6fbdbc2803d2efbd916e61690ab5ff6c22765c17c164cde3982565935b0b331b2a6b431eece15499d2d2349ec311c76eb7d0a67ea542e7f9013d4e059841cea +K = d4b38d2decb4190e913ce4fed320e7f57770b91c320e1d10 +P = 5c80c5c616e33829bbe073c8796b9844ea4b919adb373a880c5c9525fdc639d43047c679cf0caf200ddd99acaa417746b6c54bf3f23613e0545c42a4fc5cf10e467a596f42a5200d4a8a181bbf9a88a8a63d6559a15f27b8b8322354579a966c5a7424cd0e4c4283e6eada0a6a4b3d19c2df03c18d2ee234437f6e3fabf4d53ba239f2b24b727b60723f43a0fa4dfe8bbd168ec28cd6bea0b0c8488ffaf24ebf168509c12f566a15fac9d79d80defb149523c5c77a63ba2a25eb20c9a6cf21b1fc1eb01044e7a56aedd9c87804ed8f97af125f8ba591b94cf2fc5a2687d9082db6b857243d44b11289672ca89d046d7e0ee48ab7513cd548a52490ac97eb99f8fc4492d91106f9ab77d010caef9f989332b696c100d86f4e8f82317d6d9efba46a58d7632736ed3e16f8889691ed40f15ebd12933dd5c0b2ce8553b256f547647dd49dc778cfa58ab49a7abeeb3295a14a5d18c20d28ca3c0a70e370421a1d5b2be6d2cb0f77599f068a5128a4fd3552b04bbf5c2d2dab3aa09a182ad99df8531d436a2004065cfa401fed76a2d6f43e45d44b17c424869e2b6c2df15b158a22ed1d6b25383ffe7a8ed48f9e63b99f0dc89a34c20b381c81335ef4c08816f0343d6c601595ee1f85aacf97f320f62ee4f8c552941649ae5e74b2ace9aa02461ee14b2661c11b09bc772c16594e041936f46087917b181b602a6b98474afbdd94 +C = 6716956a1c8397bfb64a279e0267440de138f3f80f1a15bafa451ff6cec658a25922465b96afc22395648698d86266e5d8a83b369ab92189aa1eaa797a654c2076268c30a58b42681dd87d446f2e8f647723835f9e4c264bea9cbdf93431e8fbf63c25cf560acc1bedd115537a11c63e658ecd7d59861a589246e68bc4e03ed06fc93fa4841459422ef70d4e5583d97c8cff3719abdec75bc481b1fb0cc8de080a2bfafa130397ac2847c3464927e64fa8dc1fcf6cac6b630d0d57b56b3ec4330089af957688d82b88396cfd236719181af23071977fbc69d11b9ef0f95822da3fd4fe3f32c4369e0eced3945c4935a9123120e055a8330ea11642edec9ec6dcbd4deb1bb3f8cfcb0c1cfe3efa6b661c16b419c493c276a397eb7bd4df06906b1727fc3db8b6a6b1a4b0dec5499390d6e7a75fe389d1f250283c649a908adc64175dffdf54c9aa1f7377b4e8b699546b20a760f0d0bf2ebbc87283936ca7211994cb63ff5a282a921d0fe7feeb09ffbe32a11f3200efa38343fb78af71246e168f7e2fd35ff2ed58fe3533ffed4a440f7d0a322ab8c24b70fae3353a19ceedefa2fcfcd2f4c18639f180fefa84b42a73c6cffab210319e7db636d7f5bb77d48381736b240ee87d82862b593046663068adbbdec72b456bc6f7a46c7d656dd57a38011318be591b0311ad2af8c56fcc481a5adb4fc072910823b670577d3d5b50cb29f2217650dc8a COUNT = 1 -K = 10f942678eb37ebed0b86facd7fbec947e6a775c26fe3830 -P = 0717bab6be6194040289c206022a7d6e58d99ae4e5e6d2e7ded225060dbdccc605939a590736eb28e2488d104f97fd2ce655693e1b00520d6c61d1185fe13be2b8001fb74df1aa28e835938762f42936a91a4594c932d83607a1d1937387b43f759839e62c -C = 69353a3f2cb5902ed15e89fd5211eec74eef81c823e5d21b9922bd8fc888919be04d62c1e73a23d115289b73d15f6654bf14ed4b6cbde6c4aee53f27c12ea6ce5de9d76babf3f9ebf30088ee068ea0bcd87e4a3e1b2e337636ba1a3b1a16f88425281bc8e92b336823123848b654995b +K = dc2c467bc6e7751e2654a49a635968aaa32756b1d075d180 +P = df221756d8ecf463feeeeab641ba29d46b6e6199323a2ed7da5a3e3071c70b97781d4518f363dcc23f3e4b0e2701be48ea130d3c1720f29bfdd7c4133fc950d3c26ff762f27dc3f0e99b8b6a58d8d70bec02b55773b492f120fbb73e312b28b7ca04eb9e0a6332c4227053bf2f4eb092cd146c773ac3205b8f90088fec3bc1be6bc5e41e70255a5202211793f56f88da969fdb33ded4701e019fa10f9784a82a29803d79e08c4ced7cac7be3c94f266069d68a31f9750554f70084fee0102ca7208481fc65a541db73b5c6b0b6e30a79a18892568917c6e3eeee59a346c912d054383efba6853de748f130c234fd94c561407ff64e927be640b3c3180d79529c2d1909fa6e15cba48df2430ea025d5040bda56007c9afaca3244b73b0f706b785d0dcadf3fb8d4cb5bd63a8352c0e982bb338d86634021de575e2b4c2dcc315cbccdb9f0b43abfff69dd91682b9bb95be73934af98764d0f9e0589d381685e5def4fb5074f465ee401b1a2593010574e630718bdeaece465166b47f9846e9abc50bcc9f2b3f2362ac3e3d026ff311ff88767d75c1d007d4402bbcec179359bf664d8add0f5977538b42bf30bd1aa5bb2226fedd91dc473778cd9eaa33e3d2461bdd261158db4cace307c67ce15418f14d786425e18c0edc41623e7b50ff9ac279ce3a1b166c59236bce7179ca79128f4fc72d8da9910afff761e4010dc56f340 +C = 820e29db7226d30cfbebcd2af5ef4f1c62c55d2b628a9a1fd665c7853fe4f7e8e436de39bbb0e059a0a134a25bfd8e498c1c10f4aa46db84685f31f245a9abded8f712cf90c9a6b693cef285fe4d92613ab56f77c3d8a634aaccba62c11b6867cf213f2a46e49e3f82b5e52cbe7a7a306a8c90d8d5fb190a24a3c569728423a91a29de1981e405046866b488ddf5188d44236d056700f2563640a6d5be9c239a5a2c7c5408ee8107051c61a54cc01bd419a6dc677cb35c4b8eeff07aaeea23cb1ddec26e9c5459900e22c32ad5f3f9a499afaa4f211f33bd1ca42e3edc74fb7f851b161bc62a79aa1b9c6a42dcdb22cbd05157698a33f96d827a07822603fe65d8ed1811cba9120c08e931475fb1fc5649c684fd09ee94a8ca9579773ad6ed9842d03a97a0ad7ee8a89692ff7e8d708dec23a2f30d1d89027a58dcf213a94b02af25015587ab23e9cbad623ff7b2273577b8417fd4a984fdd2c1fa7b66109f20ad864f590df04ea65e9076899c2ddd77e0875216ae6f9eece8d899778eefb29f6334c7a875d9991a3be1030112d969816521d4b1b549949229338356da407acbad55eda69ca095768c8c3b89a07051b8eded8792ec19abe5c6e7e28c41e139693d18b47530900d2355115d3e939464a8099d037a0c5b4e838ffbc09cd3e21f3ae4f572cdd3fe09dcc9cb2446858255ebd25aabfc6f53e452f45bcc87a356393327671abdf855c3e0 COUNT = 2 -K = cfe125b48c2fbbe049adef44e49cdd02a5535ec0d7fb9720 -P = c22523c6d217912b9ac7e215084565236e74475ac4504c5b7804eece7758380821763473fe887a1cbd0586692e84d16e33b2baf33a6c6cdeac6b66c6f4019ef108d7dd7a085e6f2fc69d82664e360569969df2685dbac1c1011add8c54cdf5f062804dc6bb -C = 904dd5fc3b42f284f67e8ae2e60e603aa085d8201ef4347fe1fa9bc10f0335c7d3a13a389bd330ed51bcf72862348cafe0a7200527d8e7b1890e70840d944ccb47d5f6323fa060aa9ab3b070cd1bab05a91e761b9bd92420700947ab2f04ce47948209b3926ed0be359c9e85a3c60b15 +K = fa1f23880428db486b5d5ed0c60558843dc649508e095660 +P = ba552c3f90d43dd5431488025c077488dc2097af2aeb9cc07f9343b191e8d7d448bd543894a99000a71268a20a2b50b8c78e03ccbc96323eaceba7c9970b45be8f91e6a3fd41a9f20427ac861c19da2ef92361df0e0ae86af265734bcfbbba1275094794de9ec201993e6f4c7726aa7a2baa6c7d60386b3e6e34a869352243bf785a65007df04abcc03a633b943d10da10bc14b31fe445c5b84986500ed16795dfd3e11018997c5bebad0872e8c716b5d4d0762a92f7266b6bd81a3a65cdf8d10fa73d8c7459cf59194a36586e2e23c026cea3802fd6789ece1193f84aefa930722ee74ddb8090ad0a87b5831dda2bd309f5d7d6dd848a30a553ee82d062b0c1401aa4279c278e75cea00189222f5ab3231483826f140a917b777244b2253906b1370fd7329926db72cc628ecf793fa750ddc0751956a5ec00cb836a666614eef01789e54a04f2bd3da86286ef921dfec1d3897cd612a8653a40ae27d5ad6c6f888d59e0d662776d049ea31cca7fa3efcfe5e6e4806c3b3c1ea18a433f85872f3b26286e8ab265fada89c5d112c9c5b0b475eb4a50edc10e376231bbb2b747ac16c87efa1d7645bfddf2751398dfc2be65bb3f711e4a81ed9dbb76e021fc23ed47a472d0db11ceb2963d2263c7d9356e460037ad104bd03cebc828ef3d5c97bf2b4d0b157323b8a2fcb65982d21bb07f47d4f1c2e95c7c6ecf26924b7b8fe2a3 +C = ff8ec3be891e4ccfb71b1e4cdc492771d75b07f5a39983abac99a1c83b40ee15ab96f9c03ad2608d399f3dfa79c562a872c6d71ba42fa5192043654222b3e8d2b822b70cee748883d5ed593f094bf84cdb62c8b5b02b45e3d661b79c94b6ecf9cbae180d261b1c5e3d28dd87e3d42f471a3c12bdc5c961728289cb17a84d8c503685837b93fa2c57662215e76e026611bc53035b21d34990ba6c276a480ab5ddf42c620b733800a8c65605a04e3940e4d6102c9e2186500fa214a6a27b34301e883ea0685aa01c95b520c51996e5b98b667c6e4c3f9bc78b0758abdb0c79664f4082689e3579f4ed1759226ef465563f4640192ad4ba13f64b1c8eb140b655cab6b8e87d92d49a325a9334c0b8c9460b738428c74adb99161420a04d29692cd9cb3bd017b9c39b0352ea9f86def02e2f7de5ba60e54c51f78f91df106e5396d0c306272ed4a367cdde62a475ba0877a2c08ad5b39ad97fb3dc0c53d7ad0a53e8049f3227f275117df8f970e355ace31ce43ff23ff7806871ecfbd1d6a7e73075e3ff27f9bf041b1aa1fb21a16292f009f8657718fa13a253f990cbc2ab16cb0115c8ef08be54be90f944de88fcf1e61341e012075d9919321b6d42df00c051768b6412e8cad76669c6504c62dd028680531507a585dccf138e77043d08151480ecbb4f53b458d9d32aecd72885595bb52be06f847248322e2197f8d261d8d2d079bc8a058b73f05d COUNT = 3 -K = d6bc17193f248930d6f97a08b2c7a61780ea55cf030b252c -P = a9f851199e1489f82e2c62cf6594067627cd645a8de75f53b3244e0eace20b9553d371b8a609440a55a96731ab2f49c58180dee6f57ae977857f53e134ace7117f9d79f287e5a9ea829c4b413b4b6d53505e8ecd3838ba665a098ec0cea4d89c0a62bde20a -C = fdbe861b8940838d726d0bebf874db9e51b619841b38ba50d797a01697f17945dc0577a9e14bc69c31f6998c1ddf2ea56c6fd68db869be5fbd4fef2a6111ed32dc46737cd2c172d23cf27e1a53943b5268e7052771451c98a156758198e0decb041ff4d644facd562a4def93ee7676a2 +K = 822e455edd22c4653bb67a3ae418078942a8f7109d051e51 +P = 016cff6cefa64898c753059520fc35a1752cad000eac3209b82cf38e0f554b66c1a95c76ba08e7e2f42d1130974e54b3e05e2bb845ba8b5b109aa64214f737bb67025058041ef24f4cda79fd788ba810458a7cfbf5815e90d75165301ad6544540197e1eda5c78008fedf3f5150f36ed91e88cac31f817a51ac90b2b648786221188700bae455093c1c38bc7c5f66347e85535cd5adb5108fbd59ac2dbb358210726e99308652f2bfb15fc1e34395d60021e0452cde56cde330ca989aa3da794cd5b3fbf7ea27ea14e68e771fc6f464e5d4dfb776fc0034bfc7c19cf133558532cbd2391dbf7e3ee246ac5178c8ad80861eb6a3633eed9bec9659a72b71b63e277b258fb899dcfbeb9913510928b730b0484b92ae584b1912bc1d7cfb4caf9415cc0782e390ba914c95baf65a5da6528e07f8920e67e4145b9f8f7deb0a4ace7fe09d5c299ca29ffa35d23a61a12764451e18a898cd8ace3c04874387c3d575a124b1f5bcfc45dc6350a9b2a8d4b83a6878467f5d9e22ec6cd9b98ae56d1eb67737ec8b124d7775b58ae57adba558015489ba96718c3c85f1bf0fb8370115b32cc1eaac5b0683b6fa151260faa78fc3a4e3a11c6cc3437917b7b09e8e16ba57b347a3e8c1981b7cd902f2bdf806727fd2056dab493c0461fa5e55911f37927c51cae84b5c11dc6843430e8c8ae73d797c9176dfa3b5a10d2543bed864fd200fb +C = 2494a01592e16ca7ed9f2e9878b800d47dc22115cbe18ef665ff5c8f2108f62888ba0be3a4f1868b7fc79d574b733ac9077f789ac6e88486f29119abd7e949e6498ca0eef547727e4585208938e4784c943fa9143a25e22007a5936d177a5ef201a7afc33cdbd7e3af0fd05b53d10545fcc5a1c9c8e191f4deed865d6cd09a3a9cb468f6c5b3d5f7de1d0eb2d80c3ddc50e9ab6ef71db867af98bfbf73287eca86a4df5f7d21f735ffc79cd198a8d03d5217723778f0056e864ea1c5af6935a475dfec8728395e9e0c2d62c3c216055017c2595f285b1ce61b6e4af67dc7edaee1cbaa8611d7f42a111204778c55e9d6bc5f12583947683e7efefb624d4ba883eafd6e0097028418f2a940d1c5da80eb9b4ab71c1a67ed43353ab2105f9719df78cc03f9c93a72d864eeedfdacb4fe5fa7954604f66c796e6ae93b52d6e8f6c4d96b424a6d93fea62a2ff54c4c003850678f4b432fa2d5648f1eab7ea81b4240f0f08197b978240a8fa5d0bd4c32e0d57ddeab50b16909901e3e6d8d876e823c015cce0fafb81c89b0a933e6cf44d6766f4b6c8f9217b639222f29c8864759670e3dfaa68b6dde06fddd5d9689c609da956d73be0a77f289b3a18e18d28ec33bba6783bf196a8b0d3e7abfc98e92cc0bcea4f1ecdd92cda5bfc1dcb4b03c720ac050dbf017a4460c0bfa6579a26c9021ab0206128b069508687a95ed0d16581a4e878d7aa17db5b8 COUNT = 4 -K = 16fe5d69d93d3b754f486d7da6334aa71cbd53a47b6defb8 -P = 364c0141342eae29699d8c9e7bf355fd21ffd4adc2966f56a1d2eb17ddb8cd4c3c948361b49b9f9f09c8279c7f616dabc7f6baa31581fba8c61c31196fb6c7b8df93ed5664fa1e99f658b5f19d1b846bc8f0c88032549b421d0300231d0a8a7e4ac89f7fcd -C = b3356505f944c83a42208fbeab4128b871bf57c5a7e3f4ec41b9d0aa910ea0e35e8e2c3d6973865c007d4e44c4b0890a50f168b31ab894a28a6f8cb650e2df34347213c836e033e6b0f4a764f6387b25138985c68b232b4b80d99fb7319a042d50b343eaaac2dd93e42e5bdeba0c869e +K = 2dbe5e78254c64d23f82fc7e00f0d0f4290379b4520d373e +P = d189cf9535fcbaed560a3e0353d9039be8b677da0025dec39a3fc1779463962d9214964256dacaca576a9e6b519a4c11404b2d126ac0b9ea37246aacbd6ecb75a7370914db94805806a36437b0556f7c25e000c6005dc7edb2a27e0b165c61062d4bdb0511d9e7ba3d13c8b35ba532479c6cc16c37c428087702cb985ecd226a9f902a81a51afbe3cc361565e47d6a861421c421d0922517c334d078f7ed5622f8801faed7300ef5001ba82089140ab55740165a1431df32a170821591f205813e1ab74f77b380605fcacd2998dec2a98047ce3d10f3da1a32a935189f4dc1cb9b1a08d1427e2d4fc73c1aae60ded52a9b6c75cb1fd8b40e4715697d7b40f29ddb84603bdba1cbfc3fa7fded73d561d2f594ed5199c44763ce307ed7c35ace58922719119a650f23fe161c2963bf8a8cd5964428a3de41fff2cc35aa15ceb4f5e067a5304a3a9cfb2dd60f72d4a439ff1260a1e4fc68c655788893fae56152187b5fe4ed6454e7582557206a626b710b54745c3a405762dce17b40d3f12a3b6ce3bdc9c72e43a71c41ed26b464c4f5eb922900995f55234b20f9317070e456a2430d2dc85a68b1337c98e52786b4734ee35fa9059991fbf99d89d00ef054f202a1994a1d2add829633f97c894c8e690553771cab80d9209db84aebac663a0f622dcdcbfaab6d30544309c6283f0ce6bcc0358a7719fcad4f5eccb9b17d2c1f5e +C = 479a2f4f048f49c74c889f2250968a43fa220ded585e75951ac4a2bb45d9b1c28387c67a04163fa10e229552b696dd161b048f9d1e7a41cb807c883f0efe39216d76666d7e2ebfa7bab4306789abe54bc7fab22231f1a1aaf27d8d95dc06fefbca942664fcd6e7fcbbd6019b3608e8016c7b4beb4db712135b2a524c4a03f9f5dc98df0bbcc118fc4d28a446899cdd70a988c8d76e2392fadc30576dc625f9151949b2c88863da0eca18260e7ed1d79321d89b8ed692ca0aa2347205d7fb067f9ce6c078075876a0217bb176776ae0fb75b8e4377ff04564b29c4d7d6df11fd91415a2cf8b6a06b8ed273544a3bded10a1055767fd3a5845c503b6a3674fde34419215242093ee948bb325b1097c434dd48806ba2c75140cf1afd969f36c35e71e2cb42c9a5a8f175a4dfcb7a3e583609838a23c0b809e429a3f8c5ac461b155860641581416a246838c761373d0fc36248d3d35be02b37e864f57690697e3f458bdd59247981188ae3736526da013b021c4e1109a528fe9098e5ba206903767d27a116c50345e4028e1933179193e512b5ffc2e50d9d15fe42335c4590e5360cfb2f527dec64e989bd60c0c3fd04e7ff24899ab3c202df2f14f59b779386390ef0dce94a6bd6793a5e7286611c914beda6edc89ef03b4196a626f4407af0d796956c3db3a0c84e02dc4350e7a08607b5ce85902e6aae8e7091c0052f2451f9fe4209c61a9f1e163 COUNT = 5 -K = 05f1c008ba0b4a104f3144e438968f2acf32d36b26ca68b9 -P = 2fa0d58a10da1a0c3b3cf187abc83d8b0a5bda15803c8d11b90302a08e478d1d40fdd8aa15de8b10acc8a06a4146ed404c075f22c26cd6fb4d01259e80bc39c3724749f1e3997452402f9880ce7738500c27eac777628a58f315eaefd2c9a941b406a6963c -C = 30ba016fcbac041de939e9cfe5897c5fe29b0f0ed97e16bdd38cbaf5ba2b0aecbd92420a7d3f6a5fcdb13aa66577c9a91941671c8c23aef9cc820f06b38eab71dae8918724a906f0323f0259cf746f5a58a684b949bbf2e122ca226b50cae51aa7e928c2f06a1033d717c88a3d654587 +K = fdb302fe25a422a3858038551dd1fa8bdaa93f1f2ae2592c +P = b44629e24ef525265b668ac9737070d84ae8c23eeb5d87a9c2c63c42357ee4a82b8707916052336f7d42d8dc08d7256cff759b892aaf09a7f877810674b408b6d2a34ff0e23c6989d6362b4fac6d33dfa29421b8bf4804e22a0e12a3baa4fa82dd66b2214c0df769e4c3256835eb782e7d6ac9fc24b87dee03fa0fe9839c7ee68b47d61f09145507f597e860535ac0e023e249d97013029b16c8e84fc6ac073a004954bafce026b24bf0b1df657eeeac6451c25ca78b7005a19873c84206fa0d7ba1b6380753b9c8ae1cd3512135aa9d20b4c180406d18439cb0286612b0b34eb0d4bb7981deb1f0ea1e83e5081aa03af0436df7a9339ab2b46c8b7e04390cf8553f581b7b69b768a9da96a42941df14171ce789d99c2512793889cb6904796d376209b32c57948c20e2ac159d2b9de7ba55e8a438db0d12588fb6af0174fe64baa662af1d086aa94cb6c34994dd02433080a1dd5309798cc29cd1df8a43fea7a18b15ceb31df5f8643a6e7a756ee235b2d3775c5fdbc656813ea17c9bc0be3dd2beb2470d9512b5101b38e10b0457470f4c2fbad7353ebe4a46483c60366179ea6b8b815e3053e9b3baebf571ed554ec6443443532500e13a5582dcaa3edafc299b53a3c6faad6b6febce216a89db16ad4524bb0d9967300a168daf6e599c50c4e93738421ac96700ef386929264978e0a7d10e785828f04e82a4b4a3f53e76 +C = a98e9c0015460601585d2da6b4064a5da7d22879f6086b206d568a46c4a205d93724557576157f63670f53d84e6dae721e97c3484305bca6303170981b4e5cfeef5e08ff02ed87d122f0db5e3305bf3c3f0eb8c9b99ad36213b8df092d70916e22507947ec92e21b307765c63e7ca13d141fca2c103c779edfe954a33ecdb8bbe4d689ab597114346a232240b2343758a140581dc4c51b93663795a4cd91c15719baba514c4ba86212ca2e5b152fb5884cb64133929cee004b583214fc03fd231b55519d167a8ee40af9b5c47d672d7d08841aefe80a170010a01d8adebc576e45f830d0095fbe12a0312da0090711713024883041a3d45d2299bd6cda6bb8941248342991d861489ca503673abe6c2a024c0f5d082dc10dcbd50236b14d88c0fb7e574151f1635dda0f3c3d88edc3e4faf3d1cf74f71561e8a59ad9c415916e1ed12446595fd8f351bde17d1c84d2178fbb4c1575a5e9e22f7aa1036b52025fe42e8e5b0c868cfaefc988e710b7e49361cf73d5af6ed9fb4ef2c623ef006b30b916e6d1458c788acad5c503f6eb211186c202c52b02abb1c5286575add1e830ac04633a6af250d419b71d6373680e989fef319c0f061e4012091972b11acc04e6cec77612f0b609e4f0e48fabbd7d944a1404f4020ff57e1a7162876468a4983cf8356ee7a2fccabfbb088ff90f64fb7074e1523613fe29be4f24375967aabf39a1b55bceafad40 COUNT = 6 -K = 10eb5c57d7c5b828eb2e931cb8a78e5407dc505dfb4c9c35 -P = eadc0abc27fc11d7845455d8b5d714548731d8eb1b3519bffea8edeb0a919be80dae862c46a8d1c6ab6b79f95e5ae115a5ba4c0f25e6e77ed8691a18d5c8b38e0a48b2ad9808e7de492a9bc4352817b49b2a1674e8e4d2766f12ed5c0bc8b416b3098afcd0 -C = df54d959659d78959e5f0100edb6a645e704b781ddfba33984c5f8d504fb9cc824c9b5c1460dcacdd211ca0247dcd8ec3c1236bcd6395805403787f9bcbc632e267509014ad054ecb990d35695395d205c39ff4477cd0b4ce46cc668ab0572bdbdbd14f659980e1a9cf4a9d3de63696c +K = 172e2c6485f64d95213ece6b69332cba479084e0657b0741 +P = 0579b1c153dc38ca67f9bbba6485e5322ad4c1e15fee77ab0af3b62cc2cc0c1d9463abfc5ca95dfd6c2454e8c2c86cd88246c65850f9a4a352859b167e64e60298af4aa73ea3b23a8aa890c8eb0303bf4428fd3722e2f55105b92f9975bd574f9769f562d47d48476e3f767c0b09a7821facae5c05b365391378ca19a77ec2228f8bcc477824fc4cd3e7c52714efeacd3bd6c08d1e5fda6efb35be3f47b16a773225ad6d75b17b8617c47416ba12b77d892d6fc41af97a9cd59bbedd349246ddde27ba100329d062a3f80a29410bca0192541e6c88428eddcfce8a27d744bb1e8379417a354897c97f9910552454938720059591daf442e56a3ec683796daa5f4bdf840d427b961c2e8fd418fc1f8f2e95811433155dfaafbc448a77e1dc9b5edd1b47e1ea69e1ea921a5e80c3f976f905ac4c545b5a6ac10ca9f6dc72a5236951c164a5d7be099d4cec0e7a9e924235492ca0a2e259cf52043fd21d3dac1e30f799ffd71c3092ff887383ada39d9b4baff9bb20071b2b28beac6961e473b0ddd05e80f23e5279a46efe6fea6d6fcd87bd1037bbad2a2bb69d5db98c2e1ceac770e93ae16be94d9ed7dd5d420b378dfb73b315e91d92bb1bc1d29d62c97bde1f53183fdc313b5c5de67709ad4baa282eb271b1fc545a55d48928272b1f5b19227a021c232adf81b5863ee181086a4f693ef8468994908d450b0f11dc59d10808 +C = be78cc9acefb860043ced70ed55c4ddc2f558739f0aff3eda9194be7796b182e359036ae036dd1fa881a963d731fa1fe590f6cf19713fca67099e2ae833097813682529c03ad26f96ef6572caee9487af69c5738f6c7de39b74bc9b95d3a7b12c2182c2b9d846828cbd8d8e21cecae9e3dcfa01f3aabc8428769378077a51ba29b1cbed864340022547852293ba73ce893afda059f7b44393afbbe3fd29066cdad6dc234885be71edfe42a980c132c616746fb59adfe6a65d3c438ee6b27c23d9313fb29b51e4f12943c1bbf9b45885f77312b1ebff9a3b9649474233db25cff46b8616ca96e08abd94373279879296d171f37540cfec9d6965b99f522ddb70af6ca4623ebc25b1c7c752b12c627f583e9a665443550951f05372312dcaecd8470653337b4a8fe5f62fba05efbf0e273dbbcce11477ef1e76c0ebd313ff8acba972dc5cd5179b8e1b9b2660ad51329d41b61b89bcf47a34e309cf1dc6a53dbf182d0e418c82150049e20f556864e79c7b21ee7ce7b6cfbc0fc2d50b9826cf9eb80bff51604a2661e4ec5d03022374e83af7cb57de7d1134377ebd3ca06e8962be6881255eb0145697c8e29ae002ba30502b17e9e40ecfa4e0d770f1ee8128327e38a5a87bbd2e3ab5e4a8f7311bb1be9f35a4de665753f76ebb9800189bcdc9d9f5c53659d942aa9924fe7c76cb5afd3f4946aca6b7f0c40e5907fb15471ea15b606cd5426af8251 COUNT = 7 -K = 5689bb56d554f70fc8812d26421a5590fc6d90c5d3d82043 -P = 30c920225b3ff6bbad6744b323e75280d89320d4a83334be85684c82352bba49230961a2969731c1eef5915a64f7f727591198dfb02bb4c93dfb071d8c0408f3e60896d9acf660ddf91d84c65fc1cc1179144b0470a43526688719a5a208ccc0adbc9d87fc -C = da118a94e62141206f135635d76f27fcab67b72555d3462a50fc09d6354ae5de5a82fc0a089a1f9c705ac98a695ce950657212762bb2ec521e5844c466b17db9ae58be67d8d8d357696899f366734dd5f762ffbc998026c30ed9feea9be3365d4be19f2a8e63cccba1fde17c30829a30 +K = cc07d9d2724f29a4706a5ac2b9712b9d7c436d6269010dd3 +P = 9e778098e6480d46c54fced4b08d7739c36efc282210bd355ef09609bc7eb99e7d3e20439b4e3e9ea1e70b7b0ae062a6d9c14b6f34297ad89ee83ab106321b7dbc614b6b1dcd08e069ef7cffa9598876cfff48f37abddbf4b309a5ddc679272ab2c2ca5bf70b59e3c8348f91c40e2b5d8c3aaba63e64bb1183af304d7027a56496a541fa8951dba0b24021bd882c2d42e58088adea915798fb35504e84ffe8860e7169454dba09c631d0317220cf49553968de223359a702345d1b3f2e9799dc909c1dce2a6d436c50a052a4f6608d617b7d96228b45f9644ea5e7bb2d2df2baa01a2f2766b199e81f637e2406f6fd8c70d07df5ade3f0529204043bfdbe90169953b105383582a76bc63cefe50231d11c2822f573e750bec0a34c7b5530245730158c14e231893cb4f6a111393ce83378f8646738119c8cd775c9aeb5fbcbf6d1fa840298fab8580a044899ace16fb26b86cc3b22c62a8d633f36cd9072837d3ec5f422baa388ec64fdeac7f36fc582e3518346061be742d4684b2594abc313dd4c92d5abb4abb28b30fe34e7987fb620eb911f47f4fe0ff2b9a100ec892d1511b24cadc5b9ea62786065a97ef6878aa68ff0e5dce0a2d5cbb8d5ac698a44e46481de41c46863926e3ffbbcb48b705ebe496082a9819ecbd5520c47c9b058ef6fdda92c8c7ea8c4eb0f6a26c74ee1a5282704f6f2c0d7e381df9b23a435b5cf +C = fbb77fc642198a6cb85092be0b26db04f166ca74a0c2b118894d450a1b5cdce9719895106d20e90ca2335c40be9955c71d69655943b490b3afb774bf8192da0d968a1c3beab905fcd0e41fad3759a99f05bf685da045d352f691de57d4574a21a77d9392ffbc8283293854b7dd1cf52cdd7af3d1e2d3aea4a95d48e64134799b6c419c2a0a0079da3f03077623789393c76234ddbc38abb03704d465175c858f6d41064910b8ac35e12fc5ec28696709cc5313df6451b62c57f75e5b51b844409d36ea1dbdb172ac62ee6e30c3c9c9ce0636bc932f60bf5ca66e5cc094a3ab563d2c86afb243d67573ea224b16d20ea877b7e681a47fdb54aade9aa2778906d4de6d9bab9eceed612e6fb6a1bdded9fc3ee766a6135dc735fd18051f78c690c5777b98c859fcd20181e586be481e6a507cbfef3009f9ecece673bafa5842c6f077f6022fb92e26ed1b0109f1528b9bcfe6169febf2e78c2599ab2c4f14fcd873d0bd5b60d4e78d343927d1716489f7b093774cafaa618229821351304d4b89cafb9d82c72b75009146765dace68bca9103cff22d3ceaeb9f2f9082bcd4f51a2a1790aa3b298a9c2be40fd6b7dd00eb925c9288791a7a9b5bdf283a2c351ff21bd3ce288205c6341c2e517bad16c326461976c0551ddd429257ba9b06c4f4128ee578133070d1cd14b1277652920f8f07aae1d494ccd7f6c65cfbc65013c4f9f08d4edb5c6b06f5ca COUNT = 8 -K = 566bff983453029133e5f0cf30f4b89d003e72edfad78db0 -P = 1fc6fc9af27bdfea70b090a7b7178c4a57be3d0412077a6ef2cf8454bbc8c66516fc3d059e867e432602385d4a4faed4035b7a03e3ea1c54e47f2ee369841bf2715a035703d3477872d203ba4c5eb22522db5cd6ac8a7e2d03ea54cfaf92fe451f53068560 -C = 050c50d03bd0023a9d62c0f79716f6c100a662bba0842759da74ae741585ad9427fcb27be7167f12636ac8503b3bffbfe123b1be046377aefbc329939b48511a3ff6b8aee98e82e1be05f2fe703ce7bd614c57839394e681f0b58487b17ab01ab00e87a138651395f304db6f276a5f70 +K = 1b98792d1fb5554599854b5624a1508af039aeed962d597d +P = ade905c8ba4b7429ee45d3b37143ec28d053b2dc671afc78f504306ce50b27c8b1f98b5dfc6eeab902d7fc0f75eeced353f378e458873a0dddb27e596e1a864080cdd911756cd3d6b4261b9d10440632d9de8639d734b30f580ed48ea578acd631f6459cadf315a23e24d30e17bd4e3f35457794b362f92f023852af76e322ba8b4f2d6fa1e250b4b26f8a34ba57922d211f1a79ddb3cee69f2980e9521d2b0b45017cbb2670f3b6cfb83ca4890df5a08701e8e533c5153a9a2731a57a090500e16ac8d9a830058359de939d385a1160a617d7301b30a901c075787515747f42b07a782b162ae4eaec26b150340070f09de104f6afeeaf1f3efb948f5a520c3e8a88e20172e4f989c790fd4b25771f15af6e032fb3e4ac662546c08c061735ad2f5322dd66b146b47a8c5e50225c060681e4c3ae47594f580200e634667dec696d8ddfa2615ec1d02324537d6dafbb39963f094624038108b674cd8521cda190ae26585efa94c40e72d70d00e5722f0b9994281d7d436c431eab0de2318a9b83f6826eef1e84737f97e6f17ce6ea4a3deb97926fb8ff8329a7d6a7dd2524f79ef5589300d1db79dc158868a5ef970ddf01c1c7c39c416597030ab7ee6c6e7b61885c465ad5b40e0115c96aa925a3833231ee9ff053e963f74bba6659b830dfdf4f97afe743b2b70a576572e34fa7342ce5f1c5f9ef1985cc0cea2ac9ec7ef326 +C = ab07629585256cbac84e22555e7acc0ff29c4f5a82221739c627c18cc7fcd7656e2b6adb10c671592fcc084372a8e0ba21f446079e90aaf5ad510bbd97091b7a1b5e55e2b6b4ddf2f3234a91a265924ec6908ede4cad689abac4cf89f6ada414890926381d771332f7c995036ede2ff8f32e33d22bb17429405dc11b5396755c598c4a6cfee34844f7ebd9413218b07fb758a34bf39d3b1025fd26f1badf62d4c7e0ad165c579e65f678e424e4925e3c45d8bc60f55487c5ffd56f63f536a579b6780de064ab7d9a862c00e5df9e91eef8e67607e533960fab942cb5aef18855df2621457f8cc086fcb6e958c11a7933891e7c347f3b13ee21e0d01bf8604a5d7793faa2500ba3b58d1439b92468007d65b589d9712017dc02be51d92481970fc6fd305663071d0ff88d1129ccacf9d24d9c3b368533834be19477a1a182a18a13ed5abd7e2623b07e0086fc1c3ab96bde5c048a40e6fc285a7852ae8b7409f9cd22a902129198473964ed1fe17f9cec3cb342876b2aa6dfcf22616ad3edfeaf476230c69b3e923c4ac03fc3de07b041100eebb5c7fcc1cb69b15b93dcc18e52d0d6b6d2a02ad1460d50bfa121cfea4af60c00cbccce8a4773613b8092a71775d18b26dcb99e2174cd711a0523e1ba457ebc5a7f0ee4c83f15429e8c858b84cc014ff999e60d2604ae932540a3b2e4aadbf666b27489f34ef0f1396f83f82e50664a210b20ee5793 COUNT = 9 -K = fe0985a6e43b496ba47cfd7c49e22dec9ea45c367274a9e9 -P = 346dbae986e7e741ed3a86b01faa0c76d254eefc629e3690eb0cc6bc11d717478f4c5b941ce9c67e10bef07248413c093827db495b58c1409702a534d0972d7d84cc37dedd9ebc0fa28cc14241926ec960fe177b1e0e44708ddd7657486f36ed3aeb1ee878 -C = 2622c7c42fd00cf2695044ae2dd909c72b1bfe01e3ce549bcf36e70973a1d182db0224f71b19043ab4f57102f5f08687d36e8e0fa92b1da3ddd7ef2f3e7c0302951e3db746110a755c93cb1e0dfe20f2d354edade7af683d42d778e459544bf96f5f9539e52353b49b62e0517c85b020 +K = 9140f773a0fa4f63c16b5f63eaff40d554c1adf19eaf5a10 +P = 56f0a6e77bbfde0e3dead50568ded335b3c0e7707d6a97df5ab54a7b2cd3b2068202e883185d2cb0b99757bfcac0367a35272405a535867fa48997bc1ca5f276086d913c9740c65928b6d844816bbe2553844ee47e7b95919bead2cc133e357eaacc5c69f099b80c3d0094042fcf81d29d010dc9e8504cb8db780d0873fefefca89b5e37724d422c269f15984a69577268498efd5fedd71aea7d800a29c5a826ee0689b9bf8fb044f3164a470961471a554f7fabb0b61055fc4b8f7c150ed19cde9f74eb9c748219095faba4e60b6017c0848ec32b4dc347a476fddb6be58593e04cc1a2a9ee3e000bf0582ff3ccd44529abd5d7938c6d7875604490d0e1468053f2d152ec894223acfd3a378100e52d69e6df14ae729926ad7ca997a7e6b28a3708745d755ca0e987fc3dd6c58287626f0cdef7b0bb05972f44c39d1d83a88d3834c4f306b822a53aea4af687c039687443b5316126075030c109f0b1ef9c9939c2fb8380a370083efde04e3acea13bf581e48043dfdfd59c1ac2373eb64a66fee73500700c03766d44f94378e92f5620472ca3c5eb6f0978d945c3bb41ed08803cd65fc56a116562b5c8503bda583d1da1f7a164a3284f964945672b3e4072f2179db54d1221fe04f21474815a65a964e19395f9f8eba9d36e2825eb8d67eb8ea56edec0f566e1449f30229ce1e907c3a68e8c2b92ed7acfaf8bd9e3a10824 +C = b7ddb86b9c5835791bb17375b67b5b07109324202b597938cf50b8f742c8ec300df940962c8f9e7e138acebb3990c45249ff40db93d9939bf5a4abda981c0471596517d8d572ce583ff5380251bbcfa4b152121e5751f9d773d18ef9a26b666959207283914996ddd4b25b0985b269c58eece7fd987262cd50898151604a54bc77a71b643550a04db388a99e0fafcc2d21bcc45eca2de329df74bf20ebc950bbc8e89e87d753afbfc3f31fc14162562962b51d0b48a6996a23ac12c12563bf4823313c91fccd67e9440d1b17df5ede6565fb592a9e4c58cb250618f9b1458f2ca345d0beb719a219a9b79195bf8e3d5acb522e96c475a5e645b0c3f59ccf49508f6665beca320f0e8e4841920b8323f4662a46be92af10c208ebd95bf4918e213dcddf6e187574b7440813d6ce10a882983d7864727dcfc48b0270e39b5aade9d339293db539028f6550ec5190519f41ce568948e65f5e74ec7a80e000db4e29136beca6bce9ec1255b11e4f9f2ec140fbcb202c1e64d4bc08867e68ed2b713414f80be3332e98db47cc6458d38fbbb747e7f9bf4df1816f013eff91d4cb3ace18454e9bf37bb67b884989c18d66280ea65240ccd700f55c17b1d060ca0967cf05c63953f749a1dbc3cdc72e989e4dd76321ef5d7b8db5ae9011b145ba8fa0ba39ce5aba6af08c14ac09921a5c185470e67eacaf5a8c381e7825546012d92d02240266c416cba147 COUNT = 10 -K = c4e80d188843e417d16ba6794493b1e2b82848f6179db921 -P = ef559b3a4542b6e35828d3bdd701ff58500533d26da4b17919d12249de2081aca639962202dccda377092690b732a63f8babcd61ae4314dbe0a375e5e5e04935ddb72d1b5167a57fc64429c58b7fa66f8629bdbdc36a50a83de36ad45c7433751103e5ce6c -C = 7c9984dca74e73de05dd8fb52b83922ade3a8e577e6fc691c8470afbe8928b798821aa1d3107362725c468d72c86e773f779b121f2113192f60c0e5055b2eca7a31644018f336c4e7e9feee98b0cea482b4997db6a1e2053c0f647fdf5cf8e31357e69ce9cfc3d3502d7f7efc3272de2 +K = bad9fc4fe77906c5f0376fccb4c690d50d3cd2413aef4ae3 +P = b63b79a3469c28e61e4bced2fd4f4a3005f958ada88d80b08350374ad0c4bf3b95633f83343783fac77d809178a8203bfd0aceaef8784be088661929284f4f6c2662f0ef7f180664a2a2a767c9dcbaefdec0cc8843edd435657db55219c3ce9d7fb1376f4ddcfbb6a65e5b19813b5c49a0acb14b2a6a766898f17635c4f4a5ef5861c4bb42ffebdc2765174be4cd9aa2340d5321e8b71f7365859ca74d296fbda55a3c53ddc4e3515306a80379b0f0835215a1f0600844733e7f7239fd3ce93ba351d7e63f1c489241d49f216ca29e2cee9cbf2e9d0be2628d0a2a731e578894ac2bc2439d8e09a3df62c68fd7c74a851d8b93b257fec5dcc47ef58bc1c9a09aee9256e83b6a269fc4384e95e0d8c202746e373869f5b2972525e4bdbbd38fe19e58d2d4a9d8a0065863a376dc7a6dc8d67062d3a74988bab9dd365ddb29ace36f0a573f476a6053017089f308a45f7be36da109415c546d9d25af058560658396e42ca59a2a41798beece24f5dd81051aaee68082c9107b2c6b20591cf22c5548f75b3d6fda1ed749f9548010f551c0b72d4ec592a3bee86af0847494d971fcd0438e713557c32a3ecea733b1702468699ced297c06432bdf2d73283e412d1c1c1e7ded2edfd67e3e44ee2d968bbda83836c22f6f73212dfa06a5c1c6edc848d4aae2b8179385bfe27d0726a203f0cfb45431b221f4c4b70e716bb0931fb75f +C = 71bef4d4bea10d180ccf6c3d955bc3685aac9293fc5d47182e0a1ac2d816e2c48f04a165d213b150d4839f256319f17278447cc1bad5d3cf57c5b0adc5fd9957a18bf59a603212f479c69940ee65bbaa4552701a81cf250d449f6f2e7f3d661204bf9dc0a6e6b56b99882a7511608a50ebbdc92d2b222d181497ee79f3199783acebf9f88f9faed418a6122f6dc956dd8c7859c85cc43122b4b3394e2e66c5db71a10c207fbb5da648b0a09b52fc99a0888a3020db07b7990db1b65be1a52112bb1332e0312425c70901ecb448183c0dfaa4321abfe18d8bf26287d14ceb971b710b8c6f17a426bea9e2465fe9cd1a20d8c1c1a3e47e96e66983aafda65fad152e2657304c442964e516974c9f9e0eb8357c8cfd4a282d168f07f460b69d983a8732ec6895eca3f95525e5ec09628b7d3b779ff9988363770edf12585bf2f73e58b07e17f5c534fa039b532339bfbc97cdf12830f6ffe011f01cd79c92f224df85510463c4db6fa24fd26668675db8f09d8a65c8093104b5cdc5b50947464cd90d5270bfd2b9d3ab857a69e8c7dbf7cdeff935f72c39c3785e3fae9316fc50a2326056bf3ed1243098ab12fac90e48a882b2eb3216db03bb7afce472b13e0a1adcef5cc33a85e93c193172b6bbe62135c4f71e08e0cba5db990bd3073fbcab5b4ba7345b7035faf5a8400b7ab773537943d718d47d5889b7e6f8cd976fd3173e5d80f62bdd029265 COUNT = 11 -K = c7dcd22b8f8efdaeba464b3d7c36566f8f224e841e80da61 -P = c39b38edf2f16cb96a9ac9f362f158ed1409f426252516238400123e46939ab0239aa1e568555168fc9f9f7a0dca5ea3dc814255713d1fa8270e9e8e6cb92361252fcd94a242159b89b989decdb85be9e093075b7acb5fb55ddde6fb9c80a2ae7b9d04ff61 -C = abe11328dea569b1d709fa69eeec899f6e302fe48656defdf34a0ac5efdb1c34b429b58ca2bdcde79e2718726547b1ac14584b87a527e723147aa552a9032782b130b2c8bb7916a9424a77370597e3bd40a1e773655276bebac0064246d24bf0fa2cc063c1b10e39b4a39430e2660c84 +K = ce9ed7473721df6eccd388ca9ed82000d67c767edeae9c7a +P = e279a453d10810181b710a9668b4ae71722415da6c89ddc89833b5257c4b717a1baa96b9a2806138b2c438757f504253ef74c15b6a3e58352d0b4e84361a94381290f4af17d7c700636a5a663eb4f923697907b4fd64c3d295dbfb3ca509620f2ee6d07397a071bb99c22b19a9dc10267cdb2dba207f00f321a642924e21ef6fcd76008e6a05a50dd8e4a13ce15fb5e640a2d8e1fa029db722716217ed3fabc0a1bc2bf20d9a9d1c3c1084aa83d801ba0a4309ff395a699aa224d93cfe117c8fcf1a7149beed57f4809a5d6549bfba93e8a1cb7129ba5b1a6d4d26f1aa15205a0a14ace69283d03476423e160c54364db41622b24fba1deb1568472df9f0b5ad43b0e5b009ddf2f62d00a55d9935b539d70cd92d1e04c64d6a5f79c63404e6403aea7fd2232cbbadb804f998b9460eb5613088f8f1057855911819468a5a5822c20f28126be27493ff32dfdf835e916aa48825d76d7bef0db63a1b3d3e54dbb1693fb1d7d99b8eac82a402893edc5023a114c8f1b67dd012914f0c0d41da600ce055ccc4fcde3bcf4d9135cebf9d46a167ae8a1beafe91935464e96a2edae7a5048d1925d6608152349adfbc578b3f93483700aafb2428a3025a2770a982373c9410e7615c3fa70214fe4bf6682ba810c597eec293a99f9696dbea513e3e62256d0ffcde68b29812a272f40d0cf991b614c34112c398dab5fdf9428420dc4908 +C = 61acb4f385541a628046ed47ef86280edc17a437e82d1cfba1b093602f4e9bf661f06ce73fecf8f4214c509bd626b981d2fd9113fa023d65d0eb74f484194de2e00b3035c327173d83131cb82be1638d7ad7126dd02165a4fd9d20aab22e1c06ae965bcafdef16732d1f938a6569ede189d7ad20dfd65e55444aa4cf69baa9624b0c3316c2cfe54ffbdf7e2f9da495b75f0527e50c4b9d8cce08984a461843cbca761245f3c1fd1d00a5ac085b0280c238a923876b7fb8ae1a57aaecde0d629cf32df6748ebe051a9f1c02b7b57374966dd5dc12ea2a25e2bf5c76e6b7166f3f9545656492ccaa3758ccfc8ff1c688624e8600d2155bb1043ba7166d1f00766d7fa4353766b7bf73772909f33dae1e7ac50f15a2f8b80e9c585fb3733e7f1a5df8f910890cf329a94cfbb27e8b6ff59d2fcba626b241df40ce92029630ccbf3b451015f6ceffabd110b9cb9ef96d0053d04e77639423d4c30e446b3e1c2bc50ab1c3f8c26e92484268dc941f1a6b73f1ccf86c47b0fe35d368e8eb2e47d1968adac7fc1d4f44b681864f449a2a23dddc57419c9940df82d2f01bc46336c92eaa4be4d78cb46c592b7e24e0b363b9d50c494e9a4ff1996fa53c68f3b0684cb28b45f3050f67c9c70c67fa8dffba6aba001ed544781023142a767ef30ab43fdf4124aac62f29136a46225ba18b015f8531de2f0f212fadb4a1c6200ef230b7c39059156caa058bb4b1 COUNT = 12 -K = c1bba5f7e73ab7a3b4fbff47c5c97d92137700829b9acdaa -P = a207460c5525f1629244ea2a4e32fc71e612058defcdd938e2ae64ccf78a72282ee14b0b9b6873cc024958dfc298d2e0522c228734a7016887ab82c3e831f92e7d686a301b6ce85f5cb2e8e83c5b9b0b5e9b61d5db90a2de14bd0b373e95895149d7171f90 -C = 410e7279839f04415b24a93121bc929dc8d28c01d26ddc308c81e346514082d918ce23df1abd28720bc2b353bf0e78b97fa62284088cfcbc6b397acb08aea1f8c29f56159304e405865f1433528b0eb415174f4bd0b34fdb1cba97af336b9dfa1f2c7e4feb18a295b72c98fa8bb594e4 +K = 17d594bdf5e8ce543b7be926217597468aaebb1722f69c30 +P = 4ba74254919e682aa94be3b22d1d3e39ec3db05301837ee8ea5c8a1bf51f1e41ef70393804ccb7723cc8982bfcba0f883780c5bda2fa8288901d38864d65961e4e2772f9599894669352b98ded7bc684a69f8a08a36b1f11acda4fff18b69be275d9d1454d55a2cc3c77a05b812fd5a637d9b0f203aee1d0b42a23bf9faac4610cfdd23711b40ed53ab05ef7ebc484d0dd34ed0cd84f661119101df2d90ca19076b1b836b7b09e283ad57623c630877377250ed0115a4a0114ec160664303708857a9d150af6277505d5e7cafdb5273dced50f22a0d47c1df194dd796a6741f84daed80294f14216ee4a24b685475d674c80db3ac6c788c076b3e9f54d21a075b0bc1dddca104bae9827b906e75b476281fa1efe30b7f8e54f1373c4fcd0c8da2bf86c4592aab1696729bae2cca4537a072aad6d36078e80fa28aff6bc1bd446f28bee6ec0800f6f676cf843fe9968a7eba06515c6ad646b05e9d61c7fa09e1ef0f9e9d3a6179cbaa6fcc0321a7a4a56e3cbc0abaa1c8c0fd8b28b549ef22c72f89292747cf6c5568ff5cc7a18b77fa04148cc2da11c8f1603ed462cdde29b4deab5d262d59bc7c471753a4171c7ae4b25a31d86207c7fcf95f4654251fa317fe1668ce870c4bcb872a0858f34a574fff84e3ea7ec348f6b3269aa73ac4cb2e716893bb4ec1005289f0ec320a1bff6948ef4b8e7ea5412ae2a4deb6640d2a3a0 +C = 3511354d4f4b0c7d894066064efaaee8e3333e58e66fba5071b31f64cb517242c840f4dced3be0b7a08a42e0b52bf582d041606ae2fc1eccd7f1130baddf1211d804cf224fb3686e65d29307bb3242547590042428ccc9e62d37c808cf3b64a0e78ee15833bcd4e1b7dd3a97f6452e823f05c771be490231fe4aef2dd22818ddd40ca898ba55a61e25489277d3e74849aa6ff9e0e300fd6949fa3c3b207dd6ab68fa055daf7196d73b027922a0b08cc7a9caf3e7aebe331c8f8fd553b055ca414da0bec61f203e917d3363ec4b89d5b4d9d730c8f5caa95705ce267dd8d01a0a4c0eef3c0f9d452140e24aee82c46eb83d9879b0d5ee1e3cab36996fdf9ff6829cbcc13cce63d3e6d28ded16361e7bb34e96d1ed73f6e35aa5a4ba980b61f0920571baf5a51a0b17c2792bd6a31a1a17ec7072d4ebcb2bf79b5c52aff8cb79e739ae4f71411471fdc92636450f552fdb6b32f675d0937a0e45c71b07f0b7a351be72fd66fcd4c9153b166ef7bb230d80e4c33cd7fbb2c1f7dd872e64e88b42db6af75c86bca3919597e4d904e3459363001ec956cc02c8e6290fe113e74542165f27c4c9cca13731d70480843756269ca0543e5c13f509d5a54da49a2a5a1cec59c347ac6330762dc824afee7315aa5a2e145bf7321f410789de8b11cd7cf50aa096177dca901f4c31afccb445fd1f325e0bb54c4b59b67b3319ddb367bd1c773d9a6f3913ed89ed COUNT = 13 -K = d1354849121c5fe793b5227eff34f950c70038237ca8bfc0 -P = 3c7698a466567b3525068fd4f6c127944ff45a35f489ba466181f3a204303efe9341adc7a657b26c42902bb38e47eb195c6e9104c6d6e9e3d9ae61500af6199db64506c8731d11a173fee918486e5d9f3411cc74c666979fed1d5584baf4237725e0fcc660 -C = ec6e1343c56e81254c8bd5c9a2b51ba5d6b6f71d9d7547ada35d229083a058a0a577db4266555f8fc7bc925c37126d4b63f40e4030bddb92877b545bc4996909cb2cf8de61f3ad44ed1b7e263bcff358d564c5bb596ab6fd878aec7a9f9d54e2471ddcca02c5fd42cc13aabeccb548cf +K = fae6308ef5cde4531e4bb8aeb457477875a5cfe8770df2d7 +P = a4f47b729ab38fa0f67cd51f844c55a549cae6912adfd38ba991a85b8fd70b1d46e71d2b503f688ea9dfe8f6c176b0cdbff459af463848534734525a7d454eb3a3f87536c2dff20608d1b86cc8061afcdef354382f5d166f0c295f8a5d7c9722eddc68e2af943fd0f8e9d525c212e7c0b630aac4e1c30fe5569409239a10b9ccbb1b19c6507166a02dbff5dcf263183f6756184cc2cb5fd18b75169acbfa16859bdf3573dcd95bb850ada4eddac4e82ba1bd8bd37f43728c976b9149a7b02a7d6e038056346c41846090ad872a200a555c64d4fff1b8fcb2de33c6ddd62d39fcb3a8e101ce3e3bd336db95e7435c50d3274bcc6a46cc6a39f3465f2477f53c141ab46d6faaec241813a24342c85e3d5fbad02f7163b34298bb9a0570bdbf8b79e671b474af9549e98ff578bd4fb229dec23be884d787978a629f6cd4aca0c6e9157c1489da0c424ca8defa945fb301717dcedd31270dbb380ffcf3a2cc13741e09420d281258f99d72ef577019023ac3f383f911ed25b522fc96a9fe9a893624a7e11c55409dd1eeeb36a37a1236832811e525c96206e50e01411f4ff210bfda44c9c24e42a1e15294fceb77046cb7e2ac654d08b7fd344aa14524f12206998b5a3f3a98e4354466d12f14cf361a72afb4634b6ca3d6d31de628b93ecb81f35a2e0e3f6df9136fdccfd60720d99b82effd723f7ae16fb2d93d826c1eba7a22af +C = 03d088748cfe610f6fcc5f488361e855bda3178679b0ad0b14758a4e10fb192b274f19635c9a0aae6badcbd4b87596a24cacd79ee12ea91d29fedb9c62d574fd73c292c4d527dae3daf4b495a1c0c58c64564a81cd490d1783ebbbcc05ec304aef0f04b468e50cbc1482388fdfbc52f71283e4f667eaa633fd79cd0d99734592003e05191ce0a53a00392ec4762b91fd31d66c970a13558d46d5dd2a0babc87623c3880a5d67840b849da76c130a608f21f489e21b946fa7b8f5bb2ce0b5c2536d8ad3498297c3566558ce7fc43c7f30c9832e001c3c0a5b13b53ec56ed647c6c57273790ced1d3d24dab786510c564e1aed1b37c254242642b8afda8c109cadc6cfa18672a42d6dd36f097b4ab1117c70d7ef070cd507f6edcef14c75ec1e48370d3a7beb7841601c84fe016a1a0973a944843660d73a58c654c708ced663937a029343048057b8188145eded75edf82daa1c36da0002738aecd2249f43eff8c813f813fe6155e52b89c31f7454c20ba0ffaeedb36f037fee98fefd064d3b02f314d924df886f2e579ced7abf857406caa2bf18420f9cff4a190af58840c195be758999989e0ab6d035a76abda7adc11d700db4c7293cd3a24465ddc1f9e44851e181fbe562617c104f5caae9f21340eeabe9bc8349596200b0bd27e0e0b5c0d40ef91aaf3fbb741f05e91cad6639cf324033a90d7b6b1a888a15095efadc5fbda81e460b03c1bc COUNT = 14 -K = b568cc10a483a923d3186a5a51b3618201d1f871ec49dffb -P = 21c50b66d00fc18c8a4c81a9a52402681ad69cbde7a027e7dfc132f22e9a8817bd9c2f095d7a993b378cac04b2cbde1bea7d502117398ec53bd00c3e2e6b511895a742ab16713d7a7f12f12ef049d1ad6206a109698e18318641167fdea1aa0c77ab6201af -C = 7e43ce4220d14c86aa5f17b1645c5642f0d544f1e9ac90f6d5911e4360a7891305f3a8d0a80975168ede375ae917c181f6a577b9e0eb32bf42d47082b907c086bb1db5dffa4e49d326a9317c04f97d5e8216cf861f59750dc2c9de5cb540390519a5be4a086e7c334a9aa2fc20ca2080 +K = 6ec256140eff52560d7a5cbd8f647adf04f30dd2b6a99d94 +P = cbe1d2a804944775cb466d9ce97a1875eb56706d34ab7623447da40d7c7c4373b9dd87941315dd022f1d1e9eee58eeb66889a260cf6d6726d3601a677a2c38518abb0a8602f17f2bd27baf46de5cd9ddd80844c943854a9224e55bbaa8cef794e37f23b848860bac3944d89fa8c1ea5368b18f808c41441c2a40a5b67aec8454868c825ecea912296667f1570819fbfacb81b8a6d7b5b2b8901929590de91cecaefea0fe69e946d5b0c73132ce6e8476e8ed25ef0df70d86099366c1dc71bc71ad4cb744e6fda13f64cb81a272703e4bedb025f296af03ff93fe890fef9ac397773b86e5ff2edaa2f90474caa9bb09498668d6b9d4e468022c0b6e9f7f66fe946d91ac48636f389baeaea6fc528d7695f6f709d404c2e7af24960cccb1b0cfc74a312bfa1726eb9c01061b4759757a9a6d288a3cd241cc80e8c0130957947fb29468571e68b59e29107a3dda25bda0e9459544f200c8cc769d791f2ae23a83c197c828e716f72344d2131d627b19b9285e53df9803245885a9050e6c291405bf3cf7fa608d36b1b63b481310b4ca47d318c4b718223846f50e482179dd8920f2fcb97bd15126195070bd93bf107ad504785f65c310d1d7c39fa9b87f8441533f5b5a39ea48ea019e2ee0b09d3204b4bc42db488e197f529dd2345d11f7a87250379f97a670aec753a63d13c5287c0493c0c88eb0476cba67d3149c9883f2a107 +C = ffbf522cf1cf15424ee91ce6043de3901d41dc4cc70fea8546a45542afbc2fb62ce9c36ab280d31c9efeb4f522fbc1eead5c545739a0c61cc6cadcb89efa150e881ddd2e2166e618f818e8953e027a78d36f285ac26f21392029ea99318711cdcc611acc3545dde9d6c91b4ade0abf6802863f7484db5ed766765dc63365b0ba90949b919cf31f57ffda25ecd69c0fcf55f92a878bf42b9757912e698f0f96d709f66c867d93ebe4e7ca85fe7d31d47eccccc9295189d100e72208d109e792ba063a2cc594de4b53d3030a14d2dc86e8370be641873bb20fa5e5cec99b697c7a99b2d36bc2a3242e02cf335fe84767a04577f73ae78bac4f9e31b3b4e6c9eee8a16408234fe01ca2cae47448b652b483fbbeff4e13fb7a1e3b1e2a9d44d465fb8f620095f0165495f240e78b2863a51a3124a80a6fcb27e4772151a39f229a7ed5dd53abc92209fc21e65f17e83a3f28262f181b9dcc4acd08c775b2a4dda18725e20d38c75dd21eaedd04fe0166649c9585dcc039d3a8d6807d475b4821f3dad4734e6f48ed4dc883a53f0200b59dbcc58d76dafb10316a808728a7a68af694568130cb471b48b54833ee6ea2be5756bc4864a1ca92eeb1bc69a70db0e5209c9ef6aaf54f60fe3de1a06d0befe3901c10057ec8d5dad65faed79c38671a55fd10ecf1f2d910bed78047e9c357dd6609e49ae056555b0765534f5d0961c31040127a4f2d59a43f2a COUNT = 15 -K = 3e3d80da95e6da5edb047a3a5d1c5cef910729d0d1b5773b -P = 0b4410ad2b6b5c1261dabf7e99100dd601421b92a4d4edad53973ce7c86863e0d3ae91f4ec0f191d0b3354a335b541d747d66747ee66db6cf823131029b70153c90cd5f7e3da4f07d9b37b7053d1957a5b32a3b90254a8f5c3764ab566cc3eddfec9b1a5e5 -C = fca8e99ececdac0eae31c1a59116d2dc5615745f52abb2aa245708c5127438b61f9324c0f62f36bb282ad3b023e26310d5c423ac3ea4e6b5650145c9c8b0695898d23e526bfaabea3181ebb94b3e5781f17d1a3d674617e5ab6a2510c026ec2e4f9cb68e3d4cc343ade345874b459635 +K = 8ff18003155005814dc0dbe641f6e622076df5665eb7f4f1 +P = aeb8e18fdf1a070be096c018d5e2a3daefea350747526d953eaa49d81fbdbdb571b4e04f7d3ffc7bd272d7ee161ca0bf0e505146516770058820e4df7ccef82208e8460fd2d22876a66c5c46f8c4d2ede755868425614387cf9195dc92e88075b774c6a12f46681f1f2184b57663e6b6252d9eb1f0cdcae95a3dcb66f7063cd9a6c8bbccdccdf33f8bb79d852c6f9a5dfd8a21996a29849ba460da1a9fb9997886f3c0b240ae4ab5eb8a3a4bba628670cde290b5749495af13505832a91ff3ee70e9758e838a3a97d18946bab5d96af7d73325891d3f83ea45a32d31cfaa75a14953cd067dd923750a0cc77064080a6ce436abaa47f87d06eceaa52cf87ac69f2cd83971b3e29ed449ca12363aa15542da27c87ff4fc0b4ab1e5aa5c8568ec1ebad95505fcb3b9d2623665dd346b54f0193b2369c20a5d6767360706f15f4213eab26be5ad948f74ae5afdeb4d8e4d59439583442640a0111b0dd8b870ace4d366ed25978fb50d9a57a20842dda05f43002e369a6aafc9277abd62b3f6579e4b991ef0b0ba7f179fb1ce4310d177cd80ea5d96015bfc2cd1f35f0e0a54b43655b75b0b2d534c8fbf155e6ed0056976db84871e936d410e7dd296aeb1b4b5b22be8f49166c453d354816de01fbf9599f3bd19728918c42627534c98ed19825de210338b76bd42eef14d8b30da0acd0d3f698e7a8dc3b4f3e4ac428fa543747547 +C = 8d6d81848376a45618f392d995ed02e625d6361304c27eb975f9fe7ec9078002f0a7338bf3a062ddb70d59dcbb1f248790f4df492e6bdd571f0fd6f2da84b4948ac9527417b50c40c8e231d8742fdef2b193904b54f34b7108126c6fcd8aeac093e350e4d72c3c44a064c9e8cfcba5c10eb3edefb38d201c0849bd4b5ecf88af3778bcd9ade6206cc754311baa73cee82dc585134429e104b3b2f75f2de342dc2c2486e3670e19c561f04c0a662846dc5da69915e7ef3691ed1271fbe82bb888f56a70bfee8dde782156a94bb7e9983de86f20208cefb0c811f501cd16ce4e507b52e2775c9c2207a9b3faac5b4cd6f95b97c42b2dcf609d9c21b8f2884cb94400da6082545f72dc85145405d26e8a4a5d5d41b6b9c35ab647cb9bfc6b2ab2d03e8bbf8a0ba30595981a1b10bf5d4a8e843597628c15d4e05c3272e4b0218ab4f96bc8f5294cbb3ed7d5cbf75dc2f3d1a16d9ff61a65248b856ea83d6e1da414caa5fb8df7e4f957a7ea283853caa1e697ada96828a3b6528120c76706fb7403129303028c2fa4211b2b28e02eebc7fdb000064cea2860c9ec75f92a3514b2f6bba7cd451a827695676de63c05bbfca0a313b501f37e0f2d137b79cbcc49789a5bf7f9f7e6cf026dd9a2f2ea7c80eff075e45de36ef32a73295adadaa4d299836ac92148b820ffa3b0bf1dae04239dd64107907a5ce8f1711a4571021593fd8927379ef51d3af9fd COUNT = 16 -K = 6b9f6f9850ec9087eb07e43415169bd4401a1ea5bdee4afd -P = 28a09db4c739026df386026126c2680b690075fc9bff95949d8c34cb0b1b0c2b75bc0e1f1905b41365e122ed5d099c0a78799a84620e717cc854c9473a3616356cf0eac1567d90d38735d6229d4436995b19c326747b0b1fe61e336d66123cba775c7a29b7 -C = fe9a5d54118ff4bba0232ca10f1d76fe9c922b274989a41cba4c274a3f438e83bacd5f0b488ad147092a2588d11ecce89f7a8d1fce6589fa877c779bff81c2becb9db31eed00e6d2c3da93fc544cac123a9b39e14f0e9e5271cea4460dc818a7537b124b697ba80d4634fa88143e8c32 +K = ed4613b7e6d42fda7c98b08a2fb1163657f3c38a1a06fff3 +P = 722e2ae1614934db89e6759459e139932697d13b552e3aaf98af61150a0df0c0c79d9584e3eb18401d118a39dc7d659a8404df7b0408892989d7e94a5ab4715553fb9258fe78458500ce34ba58709ecd4bf28add9ebb5a262c48cc6932be96034dea6efcb3a43dd43f203f506a04450fb05b8da49636f2cf19d7045c762b49f0172b8df0be1fc5d8a7df097be4c8beb2ff1e8eb181ac5fecf9b685c341c1f2e41f3e47ebc4753005a8f1256a8c48bc22244804cca4cdd3896ef722254dbc9ff7dc9e7b3b27dc7db17940ea9bc72984d1ccd6a562eaf5e0d238a06059f6768f85e5f195f0fa3c0b4406a95a386a329bbdaf38ca004653df95858f854e489adc576d1ef7f3ca7249b9cdeb6969886e4acfec0fcaba043a475125409cf88adf87b33c448b7bd8049e86e47ceb67552a3481c9ca9073774bcece2d8227a6b177e7e4a6731bed56d42391a71c7f119c99f265bd0843eb62b6dd7c0497f3b85f3f0094da03ae9a6f391c5f4cad3b19ca18b0254ec24c9eb140125b9c46f25c92af0cd60a9c1b84ba3225079dd8015dbea266f2898325ed5201355f42001856c224c8bd30565b8647bec69c63bd05c1d1a35912a067f39925747e2ffd6dd2e7b9dfb1638db95a63aa23d9ec3296c05f0d9aeb3344c46b3f1ec83955e8acd5d21784b5e9283f13754101fd21392ae94911ad7ef55c2223acc9fda7ce9421a8165f020a2e +C = 57849573e321a116409093a0675a5bc97c8859a539cba852a5eafb0819e6a0ad9cdfc6afd61f816f8001edc78c51f7b498135b506565efe3e3f8d16c08e907ad5aa58fcfc5a0feef7ab6e4613971d1f9797bd4899686092b7891463fad7c319287a7ae7acb6f64c9aee97715f7e37dca57746d30bd8a50cf7a1623336161371be5788c747f3a820d52da2e019fb3018bac43093eaaf2f3df2572ed66225c76a6163ea64e300948b40d52b16207aa8676064703ad26aa3c6adc3b5339e2cf72cda5534eb9a5331a217b8f9400d756c95c19e225036a12f7106717f5ae78cdce430b1dffff0811db16586bd87f130781ef718b7fa0734bba26b0e3f9f05c12ae086a59e00826ca3750579216f5d131cd86106c37458792533147afa9d6b8859d16e82daee0892489d08f682b6d6816da6539b4b7dede583d1b676b3bd0fd35c25cd3ce52118638d16d0d88b0513aecc841283e0d9b044d232747ba908de05f02d40b4fb9def0da52e23b9cbffb6c298b4cc8da06aaf5ed32b603e9827c4d79c350593a420aa8ff2dd8550bac6dde95c069699231c230828f13693a5134a34715a4b6f33fabbed296b5b5d566caa5a678f89b65b39be10750fd9a8fc9188ac12bc38a0fa4ea1b4858ca02995a7e390226333b9f47e1ffa04b9ef9575bcb91ff733d1a9d466a677c0925bfd7df278ce8e87c84a634c1f8962a70eda95c1a0a9ba3873b06440f83b61de9 COUNT = 17 -K = b97ef7ccf354f8eb43ece57a496f9f4969ffc524313dd33e -P = d3ac7efd9d98199e290e1c53f5af0ce026fa50c56082ac5496e8b7832ce8aecdbb81580e79a247ec7adafc82b0d3ae04c6a639699a42c19c9a9fb8cae61c7c2bde5e6920f018b903ffd195fc2bf7eed1c5d9fbd4b9f214bd50a7fd2e00d81fa3b9b4e5a9c7 -C = 94c31fb187554850e37b87b5b004a92d804c06fbda761b6a9c16e19f8d504a4c510a4085bba4cc6c551c69b8eead1be17fab287bacbf9cae4b8e1f03fdac8321232de545ed66fcd59c6a967bdcad7b96c50d562b08b6521438e79a269935abc60b8fc8869114c1578df104a55d818b2c +K = ec25dbdb510de0fae6dd6dbf62bb77dd817db2cfdca3561e +P = c6670dd078a21d8946d336e134fc93880f1aab9317491342625fcf09b52fe4793ce83758b04839fe18b51f8865ba051512877f7ce875c812107e53ad93a132654ba1fe6a341da5c7610269ff17a524455d27f8d38bb6788d8d478b18a83a950ba00f8bbdea00c0565cc4f35a0357637893293c16facb5caf3e1d2259fc0c3266082f2a3c72f488736378620354d2961befc18e3295d62335bd8f732c60fcb45a1bb0aede201a2cf7325efdee356bff23b815eb666b999efaa9da68f3bf32a5814d6de3879c0b095b7b9f7a133b18cf492691cf44397f09d8a8dd18a9404426b290246607e3bae3f7c2ecce2a0c962e8930a9b06390502db7cbb6d52a4254e9c3f24d38bd31ddeddaf9993b353fc951d0bbf1fc45653ae5244e8a8cc4bbbfbaac0ca3fe1b2e32ea8b932786949141b98ecea5b8b9d2567fb95e60beda15ab71494d07614864d13dc56860477066023f4fff497c4f2fa4eb164570614cfbd405863b13bf6d9c5063813215e9059e737846eec646adc458491e5c82e26a5517ab703ae63b12741666249afae7732d1b435b4190c3a9011a5d759651beed5a19321cb3127da44a31cbcf66571fd422c37737384ad5d2a05ba6af68f367ad661a8808df461fb71f64feb1c68aeaadeb70f62405fc41de89a4f452264049a9246ca3abe363f0e30d0581feae3f594592ea1475eb44c711d82f9e85119969c78ef2bcb7 +C = 719134f74f231a08e829b025a94d082d9a8e1f7f0431e9aa11429e91718e3af5dc388c3b194b114c23e4a0219b9f5e31884063c9727557f65d391070f6b251676af0e25db3603ac1e24287af432249db4957153a5daa50b23e6ca99361d1782e9a60400a9968f1a72d74ede10ccfa90a3200a58824a1a2db8891c9163f977550a25e0f74660487712aaaf69deb326ccdb67d58610c08baf42571ea45038c7f0a7c6b4d265c0bb3ec9dba787130f38d1dc79277b7da30b06a94b75b08548c98ece8cbfb47f60bac76f4a166998d3075b7d02929d8b274e4852cc781cf526576b6eddc4ac80da3e5d3fa513d08159cea9b965373e32cb8b9645bc2ed4ce6685c54c6cb3ce4efd853bb0baebc90a566747dd89dd9c11966d88d37b11ac82518d74f9d529613d3cca2cc1a29adefe707680ad3903d54bc7b1e1223bd15b91590ea15b9c1a4ec77798353563ecf9c06029dffa50f2b309d96608eba64b68b75bf1ad6bd02ee38d72c04fe14b15f7fbae541e971a1c87ea2b2e1dc7450051947f18ee9e0d6b6bd30ef9de2dcaf6d5b18c7d061e7ed5dea6e78a105d386d282b369cfba853a621cf2cfd1ca438e8d0394a478c22c54972064c9034395b59387e093deff8ce5b09c71ca64e7293df1e55c0c80fb352da085208a48b1061f089f25ca21a5301b66620fe4ebb046b95eb9c9ae03fd44837e2de9a9c2fd3610d2e223575f4cdb8a4fefd956e4ee COUNT = 18 -K = d3d35a6180b7efb7214c92df9417afcd445e6c8a3699af70 -P = 63cd9cf2ab8055c612cb627c2a860f063db421fb475ab464ef2204fe6d06a4f0aa3509f4cc851be9e19813510e0f4e1e9e9453ea9379510161dd7d732bd1d39d95de6327fb1b1838eb4f78d3d28c39f281b59096d49836681de5c275c0df8cf90a8c8add00 -C = 276960eb03960f92f1e818ed3ad62e9064fb622e84bbcb78959a87d5359c96d267fa1d113723402f5a8bb1d98af1a82dcf45756c32f8de24de1672139f971ed3be551904075cb007f960578e9de81cad25caa5142dc6921d902efdb3cdf71d6e8ac08cabee3a448ab5107b9a0e9e74ed +K = 4c5d8e547ac8b4112dcdc0aea2ce65bb57219009c8a5aef6 +P = 18dc182f9ef42518edc5d6aafd029340d41c9d128e0901b6188d36c9e58ee259a05d524382842f7eb0e7055dd4a7dcaebbd74d48c3e3b4731f16f0d80aa6e79ae32c5ef6b5575f638cc7e6b66d5ec819a1f18001f33cbfccbf29078529bfe3c7109e1995e1e666bb5a9f612727321fdeb329a36dbdd8a97708083e1a0431e62a8c211ddf9e0c3ff20bb9c94293b993668cc131e0b6f5c3b4dd060467b2ff91b164ec372e59d9dea2f72abe72f1e91e7a509e8c8bdbf2b8c54f71975bd57279c56d1638f1ebcdb4fdbfb2d24e2bbcc0af7c515118e32fa6e427c94748244e2b382e0805e416af7c3141a8baae607827dd9ee47d29c2fa8e395743a4e8ff244dda60fb22313e39e5d227667741813fb10a5fe1ccf78365a496ed559ecffac329307597331de5031bac802231c5b008ee6b72dcd1d9f487e6f3f6575eb680de00728ea0639b84c0c71070d466c1f3c3f58060e69e15208978d9185e6fa2872700b77d0395fb46f4eab1aaf9a6e4399c3dd867ee930f76b40b4ef342cfb7d11dee9b6ac49ee955cec75c7b1061a0e9e1bbfc995db3d2c7fe325cb3f4f69d07ff5d0d17e79c1c706a0471a6a69df464dd2463bf2ab8e6c0daaa5c1946d2489ac19107db729adf3e73f6d86ebf4432021ad54e3ad73d86a136840004452cee79a3fe359c2c8fddda2b2f61af23e05f31b56ea4d5e85657d8b4d98b05ddcd38a3c1ddde +C = 52f7b8bba919d40718ae6db95acb929b940fbef3a3b056addd07f7aacea639c8110d4a25911470f7c3cfcc8ab588cd53b776ef6e4d41652a185a10ea0cef45126fc8d785a1c64d6a5e141ef5f045464eab67e4ea08c4933c3a048227757c2b5e3c34f3624cfddc8897b32fcf62cd71def5601911b2a35c82c98c9b155b85491429d1dbe94095100575700b03653f94ed187993295adaab039bb87e7aacaf8c26ef5a4610fa32053155525ef908cb0cb588ea9be0367f417479baaecaa4173494ebdb63652262aaf45a95804108bf972a2bd55c0b8c622731add911a5972d735f58454f55f5f9f5c4642f000b25df9d33c30ae2b8ba17ff71b1b42cf42a7cc129e36e2ccef2c24851bbfb7ad485914a7afe426225467da4a1feb4f90284ce4f0f1750a17655807d1df84830b60cb33472a51dc851ff3011c63566fe4711281fad9b3ae4a8e984e6ca09e6a7b70413a366e415f7e733dfed309baae8473256da781aa44b0661f3a9a3a41edd6f5145095f09ab8835abb9c085aeb59264cd6da12ba7436abcd35794cdf067dc6eeff447a65dd1493fcf60776f95836a1c45c7e194360e546f834a45784b45736d88d7271c7037419d40779984e06dc231d126875c6e588818c57d57e0e7bb2d48c7460cd52f11ed15bd8601c737ef11c63819193d9752424ed0a8482275fa4759f6d0b96f42dcc33bcabf10885505832c5554293425e6a1bc9a7e3881 COUNT = 19 -K = 8902f77e00abfcc8904676f797e692faa6494e567bc8c108 -P = 1c365f65075c4001549551f682e9a34d4ef41c7df1e737263367ef12e01fec931b2bf1623c60ea47e0bf68c90e5a5205e6400ed97e0d911bedb0c8758ab32f1104e4de1dafb5429ebc3403f7b2cf23a24933eb0faa64a7225e1401d3ff04406ff91df9a2c8 -C = fda69ee83775cb96dd334ef37ac3dded0dc49dafbeed8d33e6c3feb745be472efcb5d434d4cbb7a0a431b7d4ff843d8045cd8912fee5fb45c09ec21634b4313503a34342013389dc03eef599f85952b87826dbd04ac20974e7556e067aec6034d50123231a98815183eedafe63b2642a +K = 2a6369406a7b3c1eecb1a71533462324f0963cd8ccea5f77 +P = d9f02c653308a9a995ec6774ad2c8dd02d096991499743eb88aa4f82324339561190fa594b6d46b6229096cb40c53b187462bb4c6d8452ed86acdaf533dbe130660c2e3a5a8c37777bc73aaa59e9616a614ec8e84d7003ad44ee60015f0c8c2fdc9911d24b273451f19bcf189d5e80e459f9c17bb1f221c65302322ac424421c12fbd94163904b30aa3b703efb6b01a0556be142d57d83add84a8323c9219d1a275b7b91210a913876277d307d087c72864d5faa47164e79753c51e313917bfb2b8c4cc9a55e1225dd6876f94a56e4f8d43b5a493af4c743f88838f3fd5e75ca0268d4aa11c34af3f00ce10aa03ba0370074ee292ff3e71b5963866ba5f8e59d1c941b1f88a91fa3113aca25104f90f81deeaf798572e69d726c04acfd4c38d72c2ef82636acc5aac00536c75e2bc9e32b9484925e2329239139bcce0d6426a53ca80cbda4d369de018c9af6b9e0f77f4140d8b0793d4b8a5ef3358c13601bd94986fced6882e821cab5eede9145c044880cba58c51e10a2e35d5573524e9c543d0430c0e52e9b822baa14d790fc31008c2d2e0afd9293c70e5a24e0eb24616392267026895fa65c1d81bdf0f76cfedd97cc8222ff3615137342173be608461e4edb1ead0cb875cd375d33d225a1b9107afc5e7c7eebc1411143a42c894c3f413ee061535db3109c670c4cf5219fa0b4367e15486d462dd7900d617a472c0a01 +C = 8446583a6a9d5e3da1cdb755038f38a542c4865da7d5cb0b88fdfd7d4b8addfd038f17f51f1d2d4606cc5de9094f10338e3efa03d77fc849efb6019157246dc5b101603442b79e2a4bf16b296560a2f1f7bc63fd8cf10bd939efe0471b0fdcc2278df19bf5154e83df2826b2489beed02ddf10b8dce704cdf2fd77af1f57d0c2f65c5de7ab649b8c89c2317f28aeeb118f9ec0fb981918cc9f896f4892771b771691f0ae4b482505352f77816aee8499ac0e26aa6a7488be402bc5b44d5595ffc29dc867e7138ba3264850dd94dad33ea7f12e9e60858b7e0f0517737d964b4dcb8d8444bf2e2277ff25f9d876f916440f77d49d4916e37271cf80865f6fff6bbea865fcac48c16faeddd039aed42b0f7327ca407f32bd1d8024f8386ff9e179a640070c9d7eee4959ab6a026aff2769a8cc88cfaf0882e6fb607d69aae7e2b20169d27f0b4618bb701b6e7b58cef49b0b01fb4f48219b2b08b4298ca12325a187806b86d19910b311b0302fc50bfc7c0af1dc99014b1d44f66e33b091e445881d34db9d5ddc8400d685bdfc2540c4deda31d5c536c0f9e4695b69b3b5836e65ee21eaba6d208c4967b392946da4fac72ebf041b6ac5aa3b4aacc94166b0c6054166e07ebcf76d5c669ebc2837b420cda78c83ef710a752961aca137aa7a6bdc46ad3faac968ae39a384be449516d9f967d1c9ad9fb968e070cdabfd312f87a1fe0174dc003c5826 COUNT = 20 -K = 6053ea2d7b9f35fba0253e4edab005246fd43856d9051ff2 -P = 3f755f35577ab4ac4161ddf5ed3170a2581ac939c9da7a2ba8bb4e2c3d92c191f381565e0218c9d20b224b3805b196d9a28b328ed686e0061bad3d1c80178d6d16ddf5c6b411c2fa2fde6322000ad6bc72a80c03908243f99708cc42a15cdcce4e8a21c3c6 -C = eb0e80a5a29519661a4b81676662c5ca6c1f89a28b7b1652c33fe5cf1fb7dae8e4b9971b4810f526c0e890a0e307dfd88a3e7269628241b7dbf9d49a4121f08af5a2d78e3549df316821aaf858b1526645fdd3494e4ebcd25851594cd8a0503ea07c2d7fb56582364ce1dea9ffb47fd5 +K = a115c17cf4410fb01d1ae96d8644d5fa61fee32070b13e96 +P = 8635b6c15161b638fcbb8a8ab60d9960a9eee4d930a86b6c7daaf41503da439fbb34ed95c723d9bd548821b17f35deb3069cd30af4acb6539a3671af8842ca8b501b875bdcb531472c2c426ecc7d6b513a5b51bf8dea81a5ec6e682a62109134244fed54b340179d532d619240009b6f18d2f84c2dfef826e6d5ed90dae33e9e19b32f4d4a4ad3cfe436abf2de50a5f76374d59c73af4f3047412b38fe1d6c96e4342deddd7aebba4186c49a8d073204bb743bc2a8e3bd5bc4540bcca39ed48b3d8412215390d8f9bca7f7aff7cd27b4c874c89c1c4cc6cc3a84cee436ac99a8ddcbdf33c109d59474047a11f6fcd25fdbdbe6a55a5f0f4fce8610b2d9067070bf015fe69ebda98dbdbbd67c3da58e577ae644ce363c6f532f3d3a5ddef2a851277dc3fb7941b8cce258719e51652854e4f064c3be8f2d7bb6109256e444cdc72a905a551b646c40aa06d27d459857020dcc39396bfd742d07eebdba0ba153440e5df4661eb32e371c197d043bb7d9e818344023f86e8291ddcacdb03c9557db97d77107b01e7c5b0fd99d71326b26151744feb7ea6cfef850491bfb00df50537fac95cbbb2b9dd8464e83967eb080125547b8fda64da8f4c5ca622dbd681192acfae31ff4b57348d39fb2718872dabcb1743cc717fa0eeedc181437b678ea71f07dc7fd8db411b8bd0d6d0499ff6862f13b75d6636914932775642f52ac90d3 +C = b004f673b6be476e6aef3609ebe7aa173afe4c4a2bd7ca02c8d9475e3441c365725bf1b7146f1e5e1aa8e4a67fac8abe83b5820f63c04a43be51ca469295e8d72185fdd70c6dcf4726ec72d501a90137782489a0deb9d5b167048f789cc3b6c943ac45c8832bcf5893dc40d2f293a771a81f8b911816616ce9b109d7e656972f6dabdd631ec613af783e809081c86b317510bcdf2ca70e30a453584abd057a28ea8bea6ca3f6036dc84fee868769ec38499d337c3b042de47a2a307c1d6cb44ef4217b06ca657bb2f21cbb1b2fc8588fbb6a763fdb54cb533f6f9d8ad00057730fd21899ea6881c737f63b3afd4f94b4fd78aa92c1430d1f78685747673abe321bc920cf14b9b5300626ad5598e3cc7f7fda15cdce022dbaae572b2079214230f18282f98410c5a61a96ceece71d88ba36409296cc38bf5168fd220868676408e89decd87a882a78370c711991eb650973dfd2cd52979f6f897fcde333e0628b247eca7f04948712c1a21451d9b5e9d2ff558f1a80867211bb1cf280639902241116cc810aa54d340fd45d04a574037c3b577d164a082d32c2bb5e973e26ed212c0c1aac8f27e2bb4cbfcb759846e940c917a149f9633c61b4dd798ec4cedb444cbb9c96e0ef0696dbdbce154927eaca94cade2dfadafc050df6d780c70b889cac6dee40ca8597adf27b68faba7d87bcda831dee9821d17293ebd45a535012151f239822d9038ebc COUNT = 21 -K = 1518642b40f03913c32ef2755beeaedd7c91569e43611b19 -P = 55cb8e9f504d21b3a99f6381dbac3a6fcc1ee6055239e3ba2710e7420bc41652d95f20ba83a2066b6030b18cfa274caa1e0dca988c84c78cfbe07998fe7f48b112fc2087292a0b5a439e3bfacd57b90ad2fdf0dc046a1c68d04e0b05a099d38894758a9732 -C = f40102ea0dd62e12e10a94ac358257baf8575087b8f80def7095544055c1a82d0a50f23ea5fbc94cf496a240448c3b6b508581dfc7a050c203d9ab5ae632d101a2dad69019a50a5faaff5532de99a7195b3db502ac2cbe21f3e425365cb2f78f25f02c3dbec28e8061ad85561e637441 +K = a7a3acba14e59fe69785c0487fa9cd16863b01115cf82a72 +P = 748fd0c4ee87fa4a623f4e3e5bec455439e14ddbdcd4691d5c50a4d745c2983db48a13d5377773498222b38bdbff83986171301fb99c92ee56d57727c82dac8e1b8acafac97df19df0705f7967c56e7dfba5712e2c6678f86c90c320f00360c4ac74e6ee4c1ff386b102e285593b13371d2cc59c970e91109670698cec5590c2a59931f99fb051c5da3d4ae9d3cd6556388cc99886c87ce38fec5aed43207295c25f18283f6d653520c364afbb25fa8aa86d2d2c6d867151f7e88bce717bf2f3bfc50c27ab38c741959e69cc9a0e9bf1eac5b7e8b051178292280033e7812bef3b54c55afb80fa28907398d1e1bdf8c483de05c75f3e36c565c87a5789e3ea68798b5876e924ba3fdda02c7e9852f8d0d2448c1b6002b6cdee103e78cccdc95572df108968e23b107bfc08ba3466fcd565a741e79e6c45fda906f5329428247bf10504afacc162309e8b54dd10a0cd60c81399eda41c81a097e050de2e4c8c95dcc6eda74ab5e4cfdedc5ac81958d466b3db7468e339c689c7f66d580a18300ec2fb0d1517ebd62743611776476ec3ade0612eb246470de66322af99cb9b0fc61eee9b892722ab4261cfc6d22b7cff0c583cf721977aef93e674d645daa6dacdb48c5655634fd6af6a38e9b7d73040d20babab2998b86ccb6900cef354eb7e86297e57acf6b8e5edbabb0f4ba6bee257c8722b40964c34bf2e3b6d13981bb5a8 +C = 300ba4c490fdb6bb86cd5a50ae68667ee240d517f7bd2e9ee75f2dbeb4859a9092306c9ea8ab54d70614fc14ae2e884e2f8906e20b1e83071ce52ce17910f449a8d3f31d739934096d0d2ee0387106fdad9dd847a089b1c9bd34563de1da2fb78fb918007c41d65939db5b742adc7e31cffff11f290b6e1ac4e1f2296f603f36849339308fed06991275c088de4cd93585b454e6a4b8efcdaa79723a24213eed8f976243b2f011ffbc199066db4268a7c6478d8f62656173e24e383c2df94fdb24e5d6d856d7bcaafc05eea6c912201cc6ab0f6a1fa7d85dc09f2c73d013076c40fe140fe8dd1364d0a7e85ee7a46ab6eed80cbc552626834a6090bf28bf0bc8c5be701efeebf98715083e4d173c9cf1c90cd59c573783467c51a7ba730d994982bba4246a253c17c15e3ec67d7767ff876dfcdd8a58e6f1d36bed6297d797a0fc39479a7c2e9aea5c088b5499af10958fde73fa510de339cf5818af3c63b7ab7872ed94605523032e72ac780899a9d6c43248cbe82badfa0d5f80295846ba6f8854907a2f37c9e8a0e992bd763e896205d68d5880211ef3870109a593d64d24d27e01c4212c5ebee48ab2ebefb270912590b885e98b7a965b554551b5c037baf44b931a346de9ba0606aad658c5bb5f14c53cf52d0f31dcf633e984074d7c2c45e82ad9f6c530c8a0623780d65fae6c88d556ccad64b388765de4bbc33d1f6eb7c8c115f60f7529 COUNT = 22 -K = f5209ca9712ed4b4ed3481357d2d7560518557f496b38e17 -P = 97f9ebd298e32187c0b80399e41d068571f6e168d7ab03e636d058cc4f5d46f342d86e7f57f7126beb8b894a262083930c7895f103cf28d91762b90bd6ee01f5682d3d8b77dc7b2be1ee156389c0aed357dd1815b15c78405bf2f14708feb3d5e57ce80a39 -C = b0eb08db92badb96a331afada83e68f91704b1ba44daaa11e202791586e1cc07f61334ad4c9764d5ef6b615c9197ce5ab8b51abbc91de464cf5c6fe458e85d0962e83b96c0eb069a8da1c663f8dbe5f1a978142f0675ad124ae4269ce9630cb0fcddc3432ab3a546099e693af203892e +K = 0e68372ef824222540fff0d5094f5bcdc9c0d37ffbdfcc9e +P = 8beacf686c68b7c6999d72568630045af855cf8d3641ffe3dd29c814be7449d525ecfc84ba1e7860b5be1fa935f93d15f3c5617c4ac2b4e4a1d5df228d7f1048b42e7eeabf2c49a9000d66cc94beed06b846ace3f3827eec8e4992e9027f73641f2ec4b4fde625852011a6c957aa9bcb603d8e8ce8e7d7f0145736ef9a94ee28f492faa43764d9cfb60d0578ebe3d2400195486b42856c2124ef82f1178a994049d714c043777c837d34c3f9cd0f85a946fa5e1adf5ac979782f70db9bd3d94b9677a65330aab3e6dcfd439012faa9138dd75bef591502a50fefaa6d7be60ccfad82cf92a49e4757788d2d71d4bbaa3cb834218a857a8db5060257de317fef26ffe8ebcac79fd786569bc547c1b5df4d897d0ae721c0cc4efc40b572c3b8ad1ffe94404206e07a24da912e2ea6b6f3bb32526e576c97acc95e146285d03baf7deae79a8fb0fbedbc3508f5f2153d3f83a33c17831c75962428fc83e30ee9ed4e17537ce4375d83fb1b7d7d6a2e7eac96d01d4faccb1123ccc3a5f62aa9dfa270f803bb834e38d7168d0d86bd77ffd451ceaf7c0f937eb334967cab53ab5c93bcd3bf5d39dff4226c06082f3699e3ed9d9771131f7263739d0716578ecf11d94815ddbb6822eeafd53d57dd405822e9a7aebae6b94d1a492f78910a6e3044f3100e27dd3f08fcdb2ea6e8dbe07d1bf41c25850439348faef64b8fcd1e78e125a8 +C = 6fb987c99319bc606691d2bd15a5b6fca3f47146181c95250d3339809899b2fd3deb6dfd037006e9975da2ddd7a41ad83aab7828e9b90797605fb58f6144f052db869c99366d2bcc30088bfa8e1750841b38e4d931552e0c5fd90732768f8fcefa8fcfe8d7e626505e191b30eccc4c13659d2ded23890fc0baf3d77b8728e48c3b6d72cc86b96cad91738412368cdd93f4a572f7fd2685f03a83b5efb01721ec12d4c5469bcc371fbd957ee8b3a70e219803a34ccc64081b2a0957000ec4a67c5cdcd6e9c873b17989f632bd3a7687520eb269c2864f99f4aff5467f5fedffac1b97f096b68e8e813f28b6e700dcad93ad88238ba5a9ec3171430c52e28e3baf21024ec3fa26d16dd2846362fc5b582f7add52aa4a0e8cd05ecc7051318fb8633f07f73dbe9c2239f311310aaada965c4b0f6cbb9b2fdb1bd5bb10b1b3ae2fd1d0f7ea6f24a9f4e07ab6f699be6a86de5e6b5a4df87aa5caa20eef645fb8584a4d2119b97cd3c039e1b85821493d131038ed9935a1ba3f2e36952d643906b9d142508072dc22b6a031114ad875a233c7e8a42907d37f80b187040384ccea9c8db3d1ebd19e1ad3bf066656feee71897618c10bae681ae9fbc4d1daac14020004a37c35c4d84f3b72ac34f9ec25cb3c4a61bf1d0e136f9df7a38c332df5f8745ae78523eb7c25dcb1bb4494ac940b1db80c896ac2def068b0499b2ab2ed86266a0eb6a6d2a407de69 COUNT = 23 -K = e01bf7e9ba734c7a2156f890f9c00147756f9b51a8e8d8bd -P = 09b0c457af2cf29f560c525cce0d1f384921d5f1d49c7fec0d423dd78520b6a89487415dec6f7d691c388e7fc87fc0aaf8f95bb4bf74dec5e7fcdda0cd296025b2fdfb8e7eeb212a0d2596a9095f70c39e212875c4aaea9126e7765d99307d6276e8150649 -C = 0b2d43fa4cbf2fa2184b5b91ba8760b7e30a3cf7d8658bfa4c6ea1615fc4d4458f6d9066b09821b6b542e8ed7ae53ab76399dfb1d5ebe4c6cc923042f041fa3b922cbf00c077e751960ed6ab7e56f6f4d1fbd59e1ea5b20e8fd6160ccaea45f3e547dc310e52dd3b94f438bbd8adf273 +K = 40738e7ddd28cced731b10fd5e3ad228b14387d44b085690 +P = ee5e39123a68caf6e35ee09544045c74e405e720245cba4deea3e6d82a826556254c6edb2fcc54fe25ecba3a096a2515dd2262424fe134f7af2f170ff1aa50714400f4020a285f032ec19ce14c7af5dd8c126b87a6dd9ec074458d97a3ab14e18243c860c6bf871b31e4693ed1350de6826e03df949edf64c5c00719cf4cd855c736644cfe1fedaa119c9036ad043f324603c5b66bfd6bc8211e32e1ea893fa3e5e1aa9d959748f4186f30fc88388c2507bb3d0fb594b40f75c22e063e2d22303050678482522ceac65ad9cbdf53881f71f4c16fe27a96d9d184cdfc099c07bdedefa0f441b5123eb05aee6152c299631eccac401f6f8c903b611456deb66fa0db190da2e864b25a49b09ad98665d8108abce74924451f4a219245f28b2d28dc4fcb95a861f1b19fb37bfd57979169632db13904bd908b3e7f300c570833424c35b090d14d0f194a472a13d05f0661205b9d1964b4af21ea5df1120e9ddaf3ab01a7b4ebaf7def5b7e548930fa788760ce1f60851e4607c29e9e08d8d2df0b928453430605aa883323a109fc95bb04a973a4a003f8ed6398c9fa1565d0e64fa1784623bb8ccecd13ef052346a59c6fddf2d5c6df6cdb0435ce9a81525369db4703bae3a6af96f9b3786bd614793284f6f760b7eff398007659109304589ef9839df6ef175f80589ff6308ed279f58da89a3e42d6c74a8ebc2d6c336386cd5a5a +C = 1eb4691b115de99a4a13b49dc436f93736ecf13e99d7797972b8841fed7eff2aa8963dea36b1f10b71b4f54404fbd2a6ffc1bc4677f7e9e0f8e97fb9fef134238ea3590c3f608b58c49ad68ec62863b29531c7bbcdfafaf1cf88396578dc26bbbbafa3d091aa41f28edffdaa621db8992a6525a3798eefe631150b263172a6a153be029e3ab10a8a7b2a9fb54c9f7799b478d07a8166a479087f166a6ce8fbd562a06e7910ca697a52fb4d0ba8ac444f62ef34c9dabf64f8202be5060a74a3e040b8f217cfaad2e1c292eaab484f1605fe69abfc2b92182e730fe0d5804cf0acf503a9220aaa15f10caf2c1fa89340bbadc07df0784b8f6556021a99ba8bd1dc263dcc18a192b490b0675c921e91a0a0bdfaa902d827c576428625e6e8ccfd8666995f77b37c270f241cf0079fb5b490082f00c096b5240090a8d94493ef7263051d14707b808e07d73d58bd74bbfe2d25852aa9a6cac1c5246c3b4505b972e077fde65fc173ec5a05ec6c3331ddf861d5634b453943864d58a17a1a1ad493e22cb698655f8cf5bef50c5324ea00c58f541256fc59258e48c9c16dea11ca92a3cf92d116eea3c48f0eb7b5cd39eb8d32c8e283a1477394839562e0bc27c21b99a296ac59f90ff516bdbeb601d87416cccdb458171088f7e25e26a85e64e8215648439db819bc2694495601e672883e957d82ec7703a55dd32210718a8ca9b3deb28ca2422a28d75b COUNT = 24 -K = 4b1a11a7e82660b12bf7966d8e86c4905de13a4c8b555b97 -P = 81584b2357159ba7ec49bc4663f4e5df3e557bf164f03dba78aab6485ecf6da5fb319e64b21a84f8aaa2d9c58e49563e1feb851ceed1d47a76e6805f99f270619c66707b6b57821350a27a95f6b4b91364058f2a18f8f3f9029ff7ef91439c2f9ffee36743 -C = 219bef81d234017eccc2546bbfa2bb41bcbdffba609bbe8abdd51eec9a3c1f66c8cb7684b894cba416d03d70b699d3e496cb8c7acce417012da0dd83fce8f3f06d484814666cca6db76067640ecdec3dad9fdef5882efce284e7b563002fc978d6c6498b62ab09a17a7687d9ce83acef +K = 739a0dc2fb8843da8db374e97866a6e455e4e0abe692e91f +P = 6072dd246c895c14e10b6ad94df4c2b206893d7e30e64a8dca07617d6bf1bfbec2ebae3eb0263fbf96e21c0e521e6452adb370da8bea2695c82c8aff76a6c4e2d12ac284601a6a22a25b6ef76db8d997e9dbd0294b73eb6588cc30630b63a86528e351f7abab28254485a338744949250355aa8607c724cbe048c34023d12fca05038e11c1d9e0d07b7e13dad07e65c4bb6c5e51941e09a1328fa88acb66ad8f6db4126ab0b83e6787c44b3c1a2f44ad1aacfe5cae9fa885844641daeb52d1b22fa80e799d1aa5dcb8b99f953e48235232689665bed140281825032bde0456a64d186b07bdf1002b48f93984b74cd2ba3bbc6a65b07505eff7b0c3435f7b64829bf70475b99e8e3969917ce505d7e70ec77250cb9a0cdcb4f4bc88382652c8459d1967bce09f5a806044f550890f8180b1084de7d9e50495302977dcfdf6641a2f0e72425430ffcdaa62bddd421a43784732a87b1372bbbc46b9b199257f03c6b22f72b5e74fb78009caa9a4d0795302e9d6300aa79b08b0b97c31bc09d5d6888cc802f90411c47fb7bfb2fcabaad378195b70a375609cbc12e0a5f6a6c897c65987b0de9967830c72e809007c6e65e28d8a812efd2a4dab1f494008fb747bf537da13ffd1ec72656586afc1c3fc99389a5f6804e9e074e7746a4c4edca74a0a91bd3fef9b8eff04b26500312fa948e2cbe6ec04bfadafcefeaf92ad8974a63a +C = 3a896bffbe6871eb9530bfe7e3300d26fe0632ab9c628fc594d64bcd7379f577a08c0403b53f0ea8948b92f832df0daedec667443a83c257574a7b9b1c0e88b47dc209c804c596f1eb83f99986819dae72c168f851db8315c40f06a43fa3e939ce2c1c1d851208b6b148e9ff8dc4156f0c7d446c5e19efc906dd66cc0ab879520b6f16db5be1f9d199aab18105a0c951db8a830a59bfdebbcbaff08e312d2c9c3dc0298ab6e367aed2cee90b0b4ab161005ba29f3249583ce7bc8cae420ba65664824395d00a0ec2362c47d47c71d0ec0085d8fee35c759bbe56fb12d8eb2cf75794cc59433e0e864a12eab93a239db7eb6eb0f821ed298071854b7ba73cd5278409863bedcb6058b5443512edb374c272b9543b56d0686842ca315f4b9db52f3906e444f99e4b3ff1220e945f4d938ba399bda22f4a6889d42a3f0484a4d718a160662a58c5f2cb9555bb4e8fd960400e8015960c7945cc0cfc4103f9159426dcdcba42eee7567e9dcfc44f3cc4e7231118e9c7ee034ab38685f7ae83a6dfa64880d362077e2b2ba2d97a4e5f2f351b801aa02f9d9e4fe3b52af40c75b9a7cffc54f7b3f1bee8b234d9470798a2a289aadb6ac1afd1964ddb64d4f085a150049c7eea745cf150aa4dd11220c317f756de0db9af6e8444a9a4c17afab6c75dd89af4fba4bea8fa3829bcef47401922de259e78b99ef435727fda8e2a89e791e27e8604b5be51799a COUNT = 25 -K = 9a3e0221acb59f1b6e580a73d138de4e5f1069f31403cea6 -P = 1ed597ceda3fb604dd350e1c997213ea3a72742bd7a3efde51dff06760ac9b4f8bf311104d0509674caea23baa4551d15f95d9b49265a2e112a23da90ab9621cda636b08f7787b69d76bab4f335949a8783befa444297d735837ddad760eecacd727553547 -C = 29b1a581b03778b3174a06a3faece7186fda98b7567851e3bb973d1cb10ee4f33656b0f143235bef124f1bf00479be3b085a36ae225362053ebe3843b3960f960cd2dec0852f8d3980366a79943ec6e3bab176574a2a6e126040d7a4a49d801bc90bd755cde571f90da20cf3db6b03e7 +K = 8e8c303d55edc4f880cda9f40872f28e2de2b8af6a346b7b +P = bae7d992c399a1e5275680dd2d15c4aa32440d244d11ad8d454c39ebc5fbe86937649dc76ecdf7dfe220a15fdba70327325276db51f188bbb9535ab9dcc17708c2734a1261787f2db7b3a38be8eb2731f13ad514bac4dc7972f2b33f33a2f25e6776a0eaccb9dab8457df2209bd872e2caf7cb1d2b18ee2be47a7e5c62a2a148d0f19e9ba9b9dd8114c8b1ce784e51002e4fced7b5ca59158c4695cf8facce1e976824ce81f908a4bdd9d35cbc761dfd143b5b659601eff18e84495d9429a7abed2e81da9fd8b689c7f12159276f66e00e33976ab51b151114f756f9c9304bd87680edddad611f2cf96e47d22a6cf1ac31ba5470e756dc0b35c7fe82dd80978e19ed1c96068b0f25b7b0e86bfc7a34a214d8a9fdeac9dc2750cd265d23b0efc0cad19a72b6349e986ce6a9d27c0a79955ea1e5924a36028f4a03c9cf4b881ea73920cceaf8c4c06e8352a15e96bc68992002007a46927e3304606146f5671cbe95954fa514dd6765b14b2e16f9b2df4a185734be433a19ca0fc09a0e3dbc37cb306d8d2642a4574ddc52ac42407400dee35f7b30fa20e0fe9d68d3e2fcbb8b62bd0d01dd43bd3128ffc617926cd76e9f5de488c54efa51929fa1a2609260e808135d0656deb1d06e9ba70cc145f4316b822cc1dd96d44708eee4d88e0b6891cc7349e0ee73764d179145238644c5f2275d97a8264b03846c2f06930ae10404ab +C = 0c185e9cffa6f01c6de46774132c2fd16ce92ebd9498e4bd8bf9036b8cd18ee7e6fdac37c54714d7e6ffbbb06aec226bf17fc5020a1cd658a14bf1e062d6f3d863a704b5f812367680286a029d3100191c9523d31ca53520000bff0faffa1cd13be0379eddf0d6417405b98b7ea9cbae9d4b42c8f51626cfbaf35de5a4cec52235497b4e28065ca74fb3786a6cd3ba4ab388a9712f116d42f86f029a8dd78485825d628d7682190283652edca8fd379cb76a20387fd8be4bdd17d45f76d3c1c99d671642eefe3933670c7cda4ee7cb00d58b2070d884b4db5252ab18063c07244d956616f7e5c3cd92501f20385cb8971ff899bc81dfa98bdaf60ce01165e38e53e2b913669171009981e13361276cefbff4c6e2a37f1c5462d5d92e58577703806cdc1731f9f4951147fef6f93be7eded8aa5fb1f1ba40bf9d3f268ed56adca0f52ebd47d558502177bf460519a3336dddf7859f64afa007b63a19acbc5af4a308a2eaac466389d3c59ade0b696e951de73f1cffe442d7abbf8dd82e8bc28ef117fe88a7b08d63e15bc72d1652877b4ad4de358aaa173292f934314dbd51783df8f57a59ec993bbb15cdade5e3acce77f498bd03c2074f34e19200f5b05911e31a54c168ab2cd9b93faa712d21b11b428ddcf56367d5754aedbb588b1423da881a851577c355c99037fb4e8498cef942ae0bcac5583419d73ddbabc5a7d5eeca6e4549ae3528b9a COUNT = 26 -K = abf5c01c47fa3b38c638f2f8d458c14b13b3b1f76e45e529 -P = 0b123e879d4da8db0fdc355f3ea3820f7db2a6bb7e8a604bcfa1b845baee1bb089aaa81424e7a52384c57bca17caf8f26bca3d9577ea77e7b1c9bbfa5a1b5b26036e42603d61ec3e7f55479b82d356ab6696eb0efaff314befbb26111d75fe8d1f2dfcf005 -C = 9bfd0b782013e87b3bb2384d682a85a65b9f4cd4bcc872908a821b77730de7361f625aaf5ad5d318a914eb215a4cae37225402c4385decbfe0acd77779590c0a979ac2b1ad1dd8a2e10a08110ae9a5ab902592be43b7830a3f15a9c40f3adf22124d3eb1f4ded53bb27c8281b34a6205 +K = 32977efcc05c85bf04085fef0ca3d87cb0b271b21f8f79cb +P = 1b04c39eaaf5c502812bbd61a269f67371037d2f64aeecdcd181de2180d2dbbf4e0e50ae1e0d06ea8d842b7f0b9476492eb6a4ed3dfe15516e8f93dbf28e1f1354bede2173a67cbaf6e03604c8384a04d9436e53e9a14e2504d2d8059095f8303911cbab302a3188066a34088e13265a95130ef6d68d8bab4fedb28ec4a831e2fb1fb1c525420a98558d4edfdf79871389460e51ae606eb33d169340074a003d4f473d8d034a284a95486cb69a32b22c448531bd8b6d4512b32f20924a3782fb6bac647a4734de6a7d46aabe712e39524f59906140003114da8aac9186a9f3743bbd247084f4543802786c8700b136abe88e448c71fd75b0df230a5c5040335bf4d35cf201d284bdbbc1de6dbf21ac97b45b8b2178805012c0846d3edc6ccc269af55aa464797fc04cbbe12360e88eebf9d42404557baaa67e5597675fcd986e533081d49335d4e6956bd96cb2ee1fe5941823819699f18d8f80e2656c361becc5e2a45133d0d9a3226596dde8b2ce394a405c8fbdff06eb94401437aa48f973fa76aee8aaba0f3414a1566055fd7d20a7672dda87cb02f98575332d1cec72499ff2354f0b2b413d3953d909fbcbf7e832a7894e62349a73ca168ec9a34b1e76ab73a4474bcdfa46408894bdb2bba95f398ca2663b61735cf56a6b9f56baac393740b69ed0d543fbd14b892014c47c5703dd7afb2b8fb1efdc9f58766f729386 +C = c46e4486091cdaca41e021d6d29b7967fb707defd6e2f06d7a7c0d7be1b554b95de275b8d495ffeb75e39bb75d419d5280ccdc61a1f9dc652e1309fbca92e485fe6b7402e42469c39945d794659aaa8795eb44fab453ca0e8eaea1dc45fe02bc901d4dca9e32c9fe632add5c8eda64bca9922f90437c34c5c92aa52150cb020bf324694db3013be5794f8a41fc05e3069883cc18d4eede46a551df11ea9ac49e78675d7336e2d4ca88f9f6fa00b42432590b49f7fb18ced7e835e4a41238ec79432f9febb1a069ee80a42cd126c949a1e26fa72ccb890007030cc7c96a2aa584b2cfd6cbaa7a1e8246c0814aa9e33132deae50e452eb5c10452c138eb1e9eebc14ca70ea7c401f7b7c6a091db6890de70a30ee81a1986d5c39c5d03821f226742acbc6fbe2e31248da8221d4f824558b84ff1bfd1e98ce0ab0761b24c580b2660482c0dc73cd6572f601530d4926effd00595a69282af502bd1cd7c9d7951d786a9a165097139505782ecc92be3b7ba3a911343ce7c4808938a42ca20a63182fd1a8efe7d58e593ef1aa482177e1f6a0730bbfd2e302c9c615e369805364957c676620dd42d426b374cd16d44365e2b2061741a7bdbcf4e13b112b9e9bfb19ddfbda4058edbffb6dc75583f65d11dbad9229d74578437a993c2cfbf2b84f6de664988b09c4df4c45c4cede0ad6fe2fbf72abff05751b328c13a68f98fa3324c60101021c85481fb4 COUNT = 27 -K = cbe12f43d2bf40c6a5e1d46e42b8c232c34f2d9d495cb72c -P = fd8ef6c2965ba388b8bb02d07498844b9708d10adf71bcb07e7db50fa2ac8f913e607ac945a26c3b5dfdb3201e59683608e914b52fd2280ec82bd3fc654fc34705fdf11cfad531eaa528905c2db1fc33a6a0cc0d4b83a0a8676c13120c4a10c11ebb1545f4 -C = f4e4b393b0af6ee037f260efd71a3df37a89a8caa769d734b8046e20eb2dc425ebeab0404534b1bb0bc8449bbb56b6fc38ea2cf1d0a4c945e279721ae2607a3bbbfbe71a7960997592ab3a51a06fff9c1cb64240cf4019a40c4930a7a6a5d7dc81250cc6646518e60638da1dec9232c0 +K = 4e2c003b4745bea555bf374f1a7268582928d6ee188a141d +P = 17bd89fe2d522c61100414a1aa17011ac5794fc245efa1bce71e5a0577c4f3e3450153d50c8e17071fd20d1c3d48eea1d3b455208fec77f3b57d116c50759c3509f0e4af91b9a764e8ff478fab6dcee9e7c56095706475361786ecb386000eb17b9ae984099183eed80bbb3362a96ac708a844cc286660f6b258aba4c6936d2b526701197d012040fcfacf3e439f18eae9bd0f4be008524e57e1272ffebc3e68b337c97a43acafd737407a78d394890a1f813811e3a798e7debc2fb21c06a5701638784149d0804966881e477c3467af5850c5bd186f655db9a72ea3086c2043f0cc45ec459cf811b1debfa1270d53269266f02edf6fd2e027def8ac80b245550bba55cd883f7f7bc3f90238cec6807a9ff4ba14895c72c4bbda0621fe4ecdbd37a83a4ea8a1399cf0b56956fda83c2ec7f693efbbfc160c7700b816e9ed47faf3cb383b8c928aa7aed880f72fb861dc3f3103fabd2629bcd9db96f8be4bb14fdb737a2dcb5359d5a9295e807c5528aa03deb502fa6f59e4b3b6e76d1404309d964076cb9ab9f7ace1b6d9c742e9a4a49064d3b2b1d6784f0aab12311f3982cd9055b438104713b235e972e84e97fbb920df8208584a0cde9fcb2ef12ed551ec81f81b446a5f3e8ada4c5fb8b691d0db211be23c2afed8417ba368d46c1229ff88ecef38afe37ae1b59e9cd23a08331041e13d8f6060d1710479ccb8643dc402 +C = d10d939749b79bf3aa81a046bab6a516a8bb18114d1d08fc6c776824f64a31406c0e8f64dc97111331f45b9f1d9b3ddcb1e3ce2e70d35267e736f9ce59364c17e6645f1e5150364461c9fcf7bd2e909b5a1b88b61a6960d33b1f820eef3a0edfe6a92be44ca06e7662432cbed20f2d66f2efbab3a5e0c86c5a11eac29099f760ad031f38f3fd8780fd5eaef2ea62457eab6dfcb8becf5b46e7d352fcbe8bed42d1bc4000af0f93e35f75bde0c8f1f5ecc16fdbae60ff0cf668e381fa1cbc855d766014ac2734b3c91d039173d218c26e63e97b78586e3e91d145c2a21407c19ba077f1309bbfeda7badd173ee8ceb4dc85bb75793cdf548498df78d396848be20ec01b65afac31ded0a2c4a1b444121799a906f3ab8bfc07647cbe6608f7fee94c2fb1dc45dcfa84e1b598777d3f5f3582a3df12e6e87c84fad511ba5a98d314f0d349c69048f9c5b602e0480147e61c3bcb9baae0a126769f9bd035bfeb587fa69ee51a5f5dedaf73c97abda70dea0e6f53578b076d84c65b0880cd14e4ba0cb0d8f085ed3f3ac5dd157c931d35e27304bc02b6bb8cd64e8ce2bf1aca1e295ea1ca4cd75debe730323104baae60b653164c3293f7de86b8ec5c662d55b9e7b2e18453819a106ad26ab3bda334f0e5e88e46c28247f77a053cb4ef4744e2c2fde4b59f3cd9bc863f7a4cf4c0330871e0f4dbd3ceeb33f9c5686535188b556d45cfcb14b48a7c6fa9 COUNT = 28 -K = 9317ad12619fe60f7cb64f90531c1051337ba55d33b02ab4 -P = d58e45ac3565ee2f5642362f5e73b8ceca7ed407b22934c665e95d5b0e56a291ec38ad28b17eb30229c8684d6581b09d815aa5d7efab5f03ad35cde43a274dad6fd452baf406f929724585082a4e3d29811b76accac25152104173dd5d6c65a181d9794729 -C = e461b66186f99f5511d1d56b103ece568fa32a5765dcf1fa34527c2c22f31d4b9240f1011e3f8d77f55a65ab884d237b2068fab0614d11a26cf8341f211b256f474c337365fd36198b259772c0a59dfd9965a7aa859c47a90ab8694c7b7467099a0c1b07daaa27c4b46e6a8e7e3ef98a +K = 17e6113ed411fb9b367e12cdfef191b8aa738c55e914d4b3 +P = 07504b63dfbbb20616adc4cda404bce0ceb77d7c34349519e6a06f80cb6702bd2360609f431089c2713151fec1119453323349c456adc01d0612a83f75386e4d5d15c8c0f1a83f97efa07346ebedd334df77018283f9acd9b30e81ac290c5a7138eb875a78dd32d8fe5adb4b680c4fd11d1a0fa6cd12c871a3295d3396061d53ad3d6da9079333839cab1506af6442aa944b299cde64e7a37d63fd92f533310a7989850006da663ed04134d459fef8dcaae74e3683877a2cefbcefd637b4bf5e3bcca7e67cbfea5c5f3948c0b5d29b707fed208a20cef39119ffc8ddd0c7d2a167038f4653ed575fd8f89bb44519fddb9d66febadf392342c7fc1f21454afe5c45a30c30cc72efa90836ae212997c5ae4c1fe696cb0826c032e331ce1534d88e4de274d3cbafe6d1bde4edaefc608a99522678efc690fe23c6b28a1871ae8a243de4bf42badf1d4f5d3b265a901f675284d7e8070c933656a2860a946ff949355331099b295fff305e3b5007bd848537f9f87bcd84781b07f1044855f9dbc7bbba4114ad0947b6ff832b7de720b95434eeb455529a5682ddac481b583f7e907dbfd15ac591ed8df0bee82520310a6ea9281e619f98538c2516535f636498a3229dec06c0ef9a2f449f7375dbd585aa0d454135460fba384f70c2ccf5d9558573e6088dfa15d52a1ccbaaee2d74be36fd4322750c19096c3f8a45b259e1335012 +C = 0b8abac3081a45e407b0f93c923b76915a57c2862974e3be5988c73596f2551a6bbd3fd3f32e28595601f6133721b6ec5cd9d8952978cf9fff64f6683cf1040531e2cfd65be952aeca1e068871707dd1c7293c8c2890a1ea72a59d42b1f35bda70d5182c9145f76fead47909b7c9482e331c50fbf1a8bc39321c1a633e053ca11e36d14c38d0dd13a01ca2dd39a233cfeec146502410486c4ae26a2692376a8046774732b01ade471445905af6f2b257334ee54bc6070e3e4a531dde56f14c7ec73d71669371db63b7ec5587ea85cfdbc497827a47175f42433ada8993793ea413af95c5037938be8a240c4e3ff02e090a2ea0669f8de8da0fc29da45245e2ae20df6183c1187ead24e09d23148380642f5e9863b8c97a2a13a80856392ce2c141857a3783422032fc94256fda29066fe34976fa2c721cecb803b7a4acd5171bcbea90c1499ee1aff89ee21906fcf614d61ee4f117641cc12cac0004f68ea9b5b8fe9b56140358180bd067c7b5ca25d95905b69eff4e6d0b4f923d0f17fdd7e5202d3a63e80288ec15dc1461d7d79443030affca1b0e04c09ef086a148582262531c9c200a648a775f363e9a61bb0280fde2f8bbe24571228a4e0163dbf7729d2c105163177cd568b6d32116387ceb54f5715cfcb739ee448922051c1aa281c1e46c9db9f415381507a8936b5926f1c9890af170e5ac8d8886715db0789cd8397b55dc3ff9d964ae COUNT = 29 -K = b03f76a0890dedc6365c53338f015be8c8afe37880227463 -P = ae3088b5df76db92fc7755077467cab74a9732d904fa57c7fada606df69e212adb65012d7af92b99e0e53609785caf2736160c8c57434b22a0a7b9bc2ead177bb8ad16c096641be24f4364cb7207a00706f33dda37afbfdf742a7f26fb99d909f687d96f35 -C = 6c4412b0ec347354a3e62bf29c94877192897e665669fbbbf28ecba960695f3b8339ce0f57722ea641fde789187c1385b0d648f10fe938db90e11ac31fe0060fc9cc563abd9efc859870c71928db0cc7cf4181f15222a835fd231d093be9aab20730dc2cccd9512ad7c5a4d85bb5484c +K = 4d15fa930880a40bb2106d2c215f49c5a4bcadbeabd17087 +P = 727c6e0fbc85915ca82e5c9f13e17385b49cd8f2c36f3e8019e838aa626c90aef0110b49d83a75feae2b05922fc0303bbeb070bf327753c27305397dbb229303fdd7de161d35abf50d50e106116ed55bb7071c6ba069299c2b6929ab669552a7e9f44c80478317eb2c5d27dab8565596cfe24c61625dcfa068dabc71af99ca21369cf856f925169df21e16b366bd82a433f46d12b7057879f3125710751540ef17e1e504664dda98d0f7d44539cd08c8446d9c2c63335bfe7d2acc06818dcd56ffcd295711f106f09883a20dc891cce4c79e5946b0a729063a31b2a27006e6f6be7c79b32431998e0512365c57df68a730c5dafcf1212b4e1e9e6e44f989dee9a4426e0bd694462f863e05a9a34f21bc269551d6bfb42dbfb5f39855ca693781a4057498b82ba713a9e012da208babe334b5494186234092e0ebac8520592d285a6bc1687ab86201f97ef86a3c00d5e74a97a24e6f33c02d2ba9f6027bf80d12f983872e70073eda5fbf992256d33517503b049de620a92f17e4261d4922f1ca9375aa96fa41f6f1e9561470124de775dfb9ef54df81acac2535dc177d1dcb5d0d4afc6c8945c15d7287eaeca80e90398400e397d34ffea9a1ac26580250859a0a5ef769dff548c073f04bcf6c83e54b053bcf6d66b150ad747b60889c7a9865c32ed84c8b434362294165848f0cea933e1f1b5a0a4d88a695eef076225eaf8e +C = 523d944d27f753297c5622d959dfc7a2fcf6576a3af7a808752ce7dd63faf2f828ffb04309797f0f8d708974999bb52115cd371f2a492df47b998ca59d799128d21ff70c7c89a09d2243b5fa3c034cfbb87b277eda58e57f057669e96be76afac94f1c7b95ef63a93b1e2f76eb384cfc75cfb48b8422aeb6d75717e7af14e9c7c2ea078a9ebb73d7361f9f5636e7c3135d1845aba4082a65f201300010aa47c216d9ba178ca00e2d15a6db4a89cb789196e4f6466f4928a862f74532126a9a0999a8ae5523b35258d9e3ffb6bb639166628d5e3e5ea5434db6cfb343530f4693f3e683478c6c6fc06f3be16453feb2b729ef0694b43a954c7185b21e62f327aa89b18a6a1f2d5e3699f3312e3f9c1c8ae39a3ae7ab05402902a3a3d440eb5b4908069afe1a0f95578def0a5b9869da1684a0aa1b99f5fd900753d28b80c6dbb60b4378f285ac4435717bd4c32860c29c73a47364e085a95a02df06f515422eed05c4a3f17dc615353fdf42d1c3c8cfd09f35f9066afed6ec7d671616eaa50e742b12b72da74c43305f9d7ea3addaf0d8804e2f7bec2424842fbf433e3abe08b837c30cf93bc9054f0332f843fafb3340bc88c754803c07902a9c9704472052d0a472057b2816d438958cf9bd94d84641dab54884a3f8d71e352c1e686faba2e595edeef7f3a303cd2eff68f52417a6d2a098c8fde91d08dade3a267725c3266029054d4502ea5fdf COUNT = 30 -K = 6063a24a7e07a86bfc62176dca6470b56afa19b08e2de889 -P = 976bf8533701f717a16c49327e2524d92ae42763782ec024ed8a18981efd4ea78dd60f93120c003ea10076091e7dcbafabe4b97f5fb17ace62e87eb8a3e26a6d8a4832295bc239485974ce014189a391bc4af6e906a6cd43f2d95c597b0f39d0d725277314 -C = f3793226e645c28dc54d5450088a89a25913336dcd1ae904679f00454bc12205ce4e18a0a5a14f45e19cec1acdd8dcab357744cee6d0ea649758cf376d3115fefaa11d267db02f40cfd212ab5eae3216969399c8dc9ec5a76316b7d9779a7dfb14614399af775b8cb5cb96eebea543bb +K = fb40e125feabdf1c52275e2b28cbbb77598cacd72177b1b6 +P = fb2d3975af22713c5abe1b60e52cb6833844196c532a0efd0fe79374d50201fe06ab076014d37ab91546470cb6da69618405170c0be5c33e46e8f3151c98bc5c40a835ce69d460c4d121dfdb914b019419096c2cd9234c586e08b43531836d7a2e32f9b623131ca5d98101902b4a46b1b8fead93ca2e96bf3b598439acd76d102b0f23e40da9e7555b687516149df5bf38190c8df0b2fd1691b0f21f0914254b4e85b00046e97bf7b757bdbf8c37aa7642583bdac0ea633ba3355be8a79dc3226cecbd3ecb8c5c73cb8b6d07c6a25dea91a3b3797c9c7b6a8404b9bc00c5952300f9a9828be9b3b0456afbfeca7796b554080751fc51d7fbd9a54601d0f0a53fac214664a0d83d2704028e1d6307bd69e951ce6a13238c449ecf246c3b5dfe97fd347ade3cba55b71182c122b99c2f7e2f58011dd1ee46cf0425b6e6290b9b520a13cbac8565a8c755aa971146de15ae0e40dfddf6bf4cb6056451eac926815b547828d6c21cf1169abd099fed660593831da16be2887583dacd287da6fd9c3cf784698a48b7656cb54f99455c4ac2eba7df8f96f7e2e0138ad7931ceaaea1a66acf33cc54d091208c36f343e8caa07ef84331b3970e8c1240d81314a2796b25e2b634f9d93ee0daee19b00da76966e67ca447307be989cefa91fba7897f61d19e5b8a07deff256ab715b2ed927965c884ad7fd9a0b94b463fe4b2189765b656 +C = 7b88e220561d5b8df1d902007b9c76f8c5ad3e58b2623c9e0226ee7cafe95dad5d16a177990c51151972fc8eeb2bd26d849f50dd63e2f146291740fee5840c1323e8a32d4e6143cbad5bad51ddd2510f0aafd2bec5e9848d0f800775e2b477a49e19b70c5b88c3941ff4008e2c0dc64709669bd10d7a1557a433c750cae801afc3062a1a8d3736aaf9d4802783cf341eb2da1fc8a526f38f43240c886d0b416bcd26ecb0d846d5b85219ce552383a75f2931c64a86b6a2c20e8a1db45cdf63efa4b1768e92ccc60955e119eaf6ff4558377f84605e3191bcf0a2c86339aac560fc2eee259771224d28e66ffa06be68279dc5ea6efab2b3debd20d531d5af11d11e035a18fc187adaba9a13d0dcc24b740134fd023dc51681ab6282456e5d4ff5968af720db06d38c1093c4b64f8302f1183c05ebe1df9e1f66780355497ece1183fbb2655f4eb3eafe6ca5ba6c6baeedc39d0190a977b43beb388b9f814c7db540447a6d2fc7cf62e513ee18c1517984f38bbddf87143b49126d36890ad42a4d8a5c76f46601eb1d1ab620eb3d9144315f4a3b999f6b39ffaaa4f8f5aeb6cce9abe7ee110a6e99a50111f956b209e73df57a97a68fb8483f0737f790fa41dc788d367eeceb51dc2748a116c173f671899f512d7fda77ce8b00d6a871ecb1b9dd3b1e7531af4494b105ca7485b0b5856059175f104f1d9a61d35f076b67fd3fad2a048a7d7a1e1e28 COUNT = 31 -K = f0d0404f53fa1c4c1d39eb63d57edf9aeb118d1e20591005 -P = e3a3fc30e7f58ee7def5041d39bc7a90c25c7018afe2810acaff86acf80fb27ef0b8bdf811c3527a389dc920ecc6ed9317c3ee4876a78699dd856cd71804355701ad4f821b0b7aadaef98b081caa94f5732b86f2e1480e708c53643b95bc9a284ebce7c7e8 -C = 4c2b049a0dcbc2f80b1df61e27681af0b914f62f42a2c96c6176e8c30e3427adb2ca16ddc02c63511b6462b32298a28d6ae78579566d2df3f2948b4e193237c58a168eb6d91c8d214d15443519e2b83dde898a27d13b10b6cad1c23331d38112f34c8e6b95c419434be871e527a9f65f +K = 6ae4fb57b45651306f4c59216dc7e5ce257c8390241348db +P = 819aaf8ad91b03152154fc3c948a44c8d1b0a4dcc3df948b7a8d15cb1d6173c36ae3ff7b4faf33a27c801b7f97612cb10463e176a1f5184990ff3334b17c82059c7149a15ef2d34a0993c6feb088a7c19f2bf198be69f7408a6bfdf99ea8b8d3d06760d430bc1b9b81b08fd54f24539d5b1ac7ee7b9cbef9522b029747cb4eb8161865f426e81ee7902ff05d3778618629a945464f29b36c4f472be91a28018fb1b786e49e146fb4fa6a4ad0cf956c5c5a3bcfc1e3038b7058d6889375e528d667f97f3a9bc3c3f5aad4c59e99fd15c775e203f6a3cb7f1d08d930af4f0423039696e0f4d41513c18c73058575868c09d6e56bda85071749da285afd4c0b2b9cf0b746ea1a9311cb9fef1b7716370e0e98c6a20ac1728effb7cdf501f8d4156bfdb03c179f22238cdadf9d6405d0ce8e9f97161b9f9db5bf1a98fc7c2aa70885a03901568e5614cdd1d94e2fa729a3a45b4ade5a39362a230b1da1fb43735d79844b04ba472d0307a941ea715f09be204236b3e37a4d79622bbdcf4e28ff9bb9e2689a63580b2195abadbf71798f75bd112727ab27bbb5e6a17b94556995a77b688b823f9f3e3279918e0ad85a3c6296f9a4b4891e8ffb3da4c6c238551edebc623634b65de7324eabeb9e0112b886e748e27e72d7e66b7abdf140c1d63259c0d9ca82cb58bbb8ef0d3f798232fa59d849e6575327ca566623ba7aa8e8e8dc8f +C = 5b297ef2c3c217e7b20f00ad96873e11135bd967b7caa84f4d72c8b73c2fa293bea39d52645b28a79d1d571cfc72f03e189ebfcd00b8db010f2ac583544bbd419ce90f819a05c0481afaf0ce7f5c9545af9a3c172f8b7b68bde3b484d561aa124c41e4f850b0bc33dd8e5fba6ba0c58af1ef741b25ae8171120e879e5cd2ce1ac8d0400ab361973378c18eb20ef5c0d08f898da30bb52172416e16a3370ae1e8151557d438ed6fbd82507ed2ff1a6fccae24d6b15814e127033862cb5b65fdacd8d3938c5248dabfe3bfaa48525954a5b201fe245b38cb47721a6ad8a2527c37c27efe4c472415eed4a2a066dd7b7d1868e3b6605cc5aef95e8a16b6fb3480dc1584fc4d88cc6dde27547ee54beb85f09a23f2a12c93b732f69205d0b032749ea0698554bf689c8a2909df70fbb6461d6d8d7a7f2076f35f3ad7958545b444758a76ede776089a9c7df8e7694be4380ccc087ac83429b56546bc1825a3a0dabb484c3efd0a9e23f5c63e648f92b23453a0e3155297894bc09f84042082044f0fa5fac9dd6771f223ce8c3a94fa14f4710b6e7eed797c11711de6c79bae976d514a774550cd552c837534735e5338abb3c1ee7006cc868c30aa0d17aa1fcf677c800523c4885cbc4c6eaf9642c544b0406c16d6804b526a91c3afddbe8aa083a6641389fb3c9323981447cf8ed3eefcc44996b80fab3298d83f95dcebd6dbbf0dd24a53e628cc3c48 COUNT = 32 -K = ea7b3603e474c569d1c07fd2c2b76794934e3d318950110d -P = d672521e5712121f144b23b5032b2f1fa51194ec9efa0bf31177f9dcb71f7fc0685c44a324dfc5b393b29e59f1e4cdb760b4d7afc9a69d1193452086e4751348abeada2436b14325b516c2ef8a96d553f73a4442f4c2ae0afd99092f2c0cbdf15e91608547 -C = d1438b4c4343e51e52b9bb57cee774741510b96fc88154a496ebfa672a3818d370e480c705befd76e86565d7fd03cf62fa76d7bfcc2d2081eba8d4c6df95e2fbfd0301c996ed220204eea410b1193b459570cb48116dd2a8cc6ce95ac7515a58c8d733a67c63ae740b8253471d9a0764 +K = 4ce6c48ba287cfc13313714330c5a3aa696758c4710b7cac +P = 3e51fb279d1f956d68d4685a8b7c3dbd26ae2dc6e174dd0aabb488d7c65b6bb7443461d8d9536b1213d8e40846df65e3e495ccdbcac025dcfa8a02003a7cdbbde6ae1fc9030e2adcb9a6670988d202b21e3fd70486bf7d09cfc631d93afe1fcadc05af1b8b0fafed3077995aebd3354a3cde3369e7ad7c1f617f8fb6838e5c6eecf03018e0cd9bd5b8c6e1f5b141b1c3d8ce04121ea28b1fc5954772660e813aa1a0f3ea786785b564f5a11daa0bd3c62710e05c50ef5ab66a02d4c133288756d51ea805156c155fe9a1684b19d5cb83cfcd78b2aa728587c0d0e36236a199e383be4a17464c7178cb876a826cee6ac4756723658860916bf4a3c23a60fe57c43bf39405f5363a6082ab3ab77688f46336ad723a919b57b8b8fcaa82095b5c12c0e050e860594ae86cf7bfe707fe4c2418fcc94c684a718de649a4e0e8b9f94e4bec51ea4e2a8cf4e3b403b6f0aad23158cfb11f25a10e66a82c710104df94e4b646311cfce7d98a06519558987a45c74603812492501e17a5d6f34abf2be974ef9bea3b37655dc05189cab77993c0768f34626e49b8f6aa09d8bcde46b4c9232f33d03551e8e25eabf24ee49ddd86806613c79512a0c2af61ae42e3a407caffe6329e5206cd3c6561437400a8aeaed672454f6c44641249ce46d5702df6597223bc4d6a9af11b5cb032ba6d46d647a7ac6dc37da2f138f36327ac80b216948b +C = 5909158addbd7cfc39958091c1b67648707be3db836e470b04a0b2497a60b17d5216c1d9d4c3d5238ef0dfc376f3cf6164686a39758407193c63990a9f3f0cad7887e09df41a2aa5c14623703caf6fb71c8190f7f143fe9dedaf7d8d324884e6e06a7f633646ed28ed2b8634e5e2424e4ff391e75606049177f91845c0b6c3a9cbbadd78670fd386e77b3eb4b31ef13a207d7be8a21a6466fd956d5dcee12137c4105eb51e71c0349d7c719807874cc2b13cce0b94f996cc5753cf0ec93d7282721304b76d4323675f60a396ee69909a80207be2509926a638c66cf27045cbd559f8424781cd5e27137977d1f854f0c5cdf74731bc764267bfc76804660be60d948fdaec8e591324b90e7c5df306daad44a53401471d41bbfc7c6a8beae110853d0cc6cd572512d4a6eeaf838d761f5cbfde82161b41802ea4311c002e01ab7cb2c68471c043a47a51f88d896ef17c0836530eb8c1389b707a33f9d6fac53e8d45d52d214e77e4cc66beae5f7925f2cc052fead40c11403d3b9ac017efd1b52d0f2251c00c21b08d0c28c563c107dc5b3b4d0ca349a3904e88ccfe9abc93150e0054726164b7b34fe0b935f936793587922e9587bde386b1a59b1ca0bb927021f6f0a5fce6729ba3fd6d2a381f470d6e0b3a2842bd0137be9ec304fa104a8da11925482f3517353cf8eee4538a8a417b1d0beec09a9f81529e6916c871c0ddc5ad61bcde7228f388 COUNT = 33 -K = 5d4e572f07364f3e02d6a4bd7df52674b2234dc1f40ef26a -P = cc7ef6a5e1882e25c2656bb35f7965750cbf4f345aa60b729dd2b35d04a6e3b62aa339dd6b3d3c70bff56bf3dea8b40843ec87f957bfe4cf23924e93009752155ce9c19bfeb225fd83a622a76d9b833f70a4d0d2ec4d63c50a69013ba53a3e130982ca0f64 -C = d22f79628c74e3da2bf326b4308bedecab30a6aee57a2eeae623fde1811264b61d942b624075c63f597ba8f0377ebcd26daff8b61da531fae617a299eecbe51719d820fd649081c52656df02625e4d7756e0cddbce3539a418e28bd152aa948e990348974cd66980b71777f05d73696e +K = af2b7c7e0583249ccc88bf46ea48728a39bce643f49a5bbc +P = 9906efc74debd92e06ffdc15c58d73e5a660fb8ebc2f0ad0635d912771ceef53a4ffe5bccc868043b1363d2b239836fe74fb8a9897a40b54ffa971725b089e00b8f1cde58add60f1079c59e71631e6aeebe0a0448bfe2532c46bc5f5ed4151a36e469e9e971005d70a9895b108bc1c8d1865dec90780ce64cabcd75b84a0cff31c6f88db1fbc7f8e7ff8d41373be5fc7e62e0ea28bf6391f991d94f6f12e2d47cdc28ad44bf82642d3a6b2899cfed9c8f224f75d99811d75412758a53323a101efe87d2827a979ccf5a27a8de55a598a962624f8bb8ad2e711324c993647db3dde94f8dff9ec0db2ab1121c71f564eb94f65c369efcd3dea10eb04c0da0d1734ec6ae5ed91699f080c85425b5cd11d3051eeede1a2844c5293b8e71065491de675d04beb1814130d766488a0cb294b43e8d886794b7c594089b20856ff4c26520f0f4fba1735eb3947b17026cb31d9deb5a1dfc7c3e843ae1985b278de0b84a73f449a2c23b77326feae9312a4abe1a9acf95fdad9b4bfce3c24a2c90340daffa7a569a4a7013225cc3ea732d48a4b351c6ac4fe6d39b99786db9b85cb8650907bac48261e42bc30c9e7bc11217474ab4f8d46643e258eae777444ecae1202d619f80f6d00d5619e35b45b58eb96b13ee63c5f843de28f06b0393c78f4e4246e80a3c0d0f9465f0448ff5b10d045cbb9c71ca51081df64c49278f5c93849eaa5 +C = cdfacb9444c93930d48cb9930c9154f1eb39e2d1eb220cad421b0f2be8208d44c0f4a19fea85962871bac5d8aaee14d73747ab6219738a144e850312acdbbe17b2e56678a09ff7febdc77ab3394eeff212badf7d08903ab86bfcd4303fa2bfc90374160c708ea4bd58ffe0d9ba0e3a648ca96252628709f82dc722d4dd2d7020554d90a91aa9fb5f25c56afba0926c0c920650ace1d3caa218856912037ca966c3256281da14cce29c6283f5922f303e2fe355e6be4ba395e920e7e3edc6b01964106f7acf31702b2060396e4cba3678038448e26c9c8631a80b5d784e2b2136b2617389c7b27644844ff1bab3603384d1a246ae5552e77888c2a03396a777b46c77bdf9617210af56c6eb2045b3528bbfcc97934a8a260a660119a2d124f6dbe5172453a320041c04a7af18bed1674fcaf5cde1bb6fb2eaf9f16918f48dd4de0f418a3486954d373509c21b80c472e9c49b0fb74480cdece3fbec4d83606ced6dedb41935d40793f3447e9258fc6ffa7fd0a28f6261e434110ef4cd7a8725203225d4839339af3baa10e54326b7bb218493a4232c322f5d90dfd84ac898e077393ccb0a8620276bf7b68894d1198a88443d7f545e0e699b7de4f04b593a19b10dcb24d273048c1b21d90a5924b5a194b82d7fcb52992b462f957451ee79e907db7d3fe0a398184f31356bc1d25a4bddcdcfa6c9774bbf82979104e7a9fd0f78fd42a5244e60cfcf COUNT = 34 -K = 067ecc6c3ddfb22f23cc7fc3c4750d8f3ea2d7f1fb0fe321 -P = 7f3e6d3b022f2ac3b4557ee4b71729988cb51e6747d7fae6018d9df7a0f3805ad31f2ae5426a63d0e1334e12b7fb47d6d626ed288baa5770900d5bf0c8ac14ba8846afd419aa881fcc94ec584ea706cedfb266670d95bf1161c4d00b15d232acfa4d875020 -C = ff5937c09e2b534adc3ec334306e3e39ed687a00c84bc384388dce40668274c6be265921dfe5dfe5fc6d9a1871a894acb8439f3419f8fc78021e500af7a1f2e6c78dcb6e9d71dee8b863ada4b3411c575e6ec3e1e212bb903369c4591cd91872e37ad7e8d321bd1ee6e03c7410067677 +K = 45bd8c0bcbaa2ffffa174726fcc9a089cb05dda54013042c +P = ac41c519959ddb14993a10e0e35002a1f5bbf1f3a5a488469073127c91d7419ef571affa17e6d8e2201f3ef62d6b14f0fa99a1dbf46154e2ba1bb7c374d300229f97b3b40da2cb486614d39a1091a1faf29b2425f62ccba376d12fac309bb8303669a3308d2e74035b3b5a9ac2c5b5a76b205a54c70c1ceb9ead0f819cf940a63ff348065cf18b579aa2410a7e5efd82063fae5b34d68fc0dc135c3d9880a1fd78d452a67d171a04fff218799a9bc5599d23dd379e60f2bb751886f064a521cc3a1f29f014a2a40515b3d07b5c48f7c9f82b36c89ed57c5b6c604b63c490e6cce1f1489c02cf36691b8cf23a2830c0bf3b6c9c476b1568ee5b858f1ba4575698720be00579e18f782b5b5298b6442b8ef3d4af6164ff44b16ec557914053d453ab8199da2614e5525b18768486150ae0455f90e11e6daba085df7214c037ce75d15198b974b7e49c9b44e899ab16fe429a87ab3df1f8c2545b495b70c3e4594deff2a139b062a196e028dd75cddbce437cca9cce879e1befca1617669c0b18062c7130a3af9f7b2c89a460d9ba640534dd6f64a06f70cf50b08178fde126f1800c42dfc836e41b253bbe07b98009ce52c7375a4d5ef690ee5eec3d60786fca222c16eaa31eb9ed84cd1af091a5722635422a10aa4d7b463e91ccecb6b94280e18fc305860c43e879efa9a7509cc2223dc7961ad43ebf674a71a5994c79fc445a +C = bdd29a6b323647686dbf3396c2886df51d8008a20cbefc3a24cd0a10cfa8486f620937e098baf07da86b95fce7e9d73a4bab4f6eb6e8fc135a7a76fc0e76edb8ca2835727733e2fba64d60ec687b301df06d6b80a333a2f20752da1eeea835298560113e85fa01a0a5974d437cddbe182af783b3e6922c1d0613422b1732c28a90f50483355b875e2b8a3d3b42bc93a6648f8f4332f000d248af41c04cfd358205a5160d2589ddc299bcd0f8e6b16b02389a72673b4a2002808776384a718953ac0fa5327bcf9c324685b8a5ef924afc22fa413a19e52b5225eb8480f6edb23abdf547403dc742633f637ab040c54faeff0e9abf466163364fc511b3635dd16f2f644f0a25bb43461619019419f72649fe53aae45ce5704538015998a1df65ac4c00e984e6cce928e873d394696c01d31ffe6ba92c7c66c82a91a27c0a50f4148a75b5396900c82db03249fda8a1976b11227d4cf3c0b10a9ebd36e5e94d264657cb73b08e936fc3500cd07ed2edc0e3900f92f1bafa36560ff839cf1b31f65c7fd5a372b091b100f596e7630d7bcdb5fb6fa8f6b73215986cd41069494397b0a81060664b0a868eb58388fd52a04b8e29ce088b7f420a26aceb9b833c1ee2070dc3636420e9389787a298d508c45bb19c65909c848b47ea6e7022feb7ac492b5193a6b8e7452aaadddc826d6d36956e0ea85263aaa7e34d368c496759ab365e25eb1d5bb8b32d5d COUNT = 35 -K = c92e20e78ddf42b830063392194fd7bd5098ab40138d19ff -P = 9893d6173c97e327a4e39711fd4be8d7395238e6baa5b324f60a415b6273283772d2664253d11b54c8623b24a2c6aaf1a472e2cefd4da0bb1f486b2c59642191183cbc48dea9aec4a164fcd120212bae5f152d4b4d1031c0d564bd9bf781881a6a0f30a23e -C = 1a0fb53c49c0041c4c9950af957e05789b4de157d248e83cf0370cfc4509cb1542448517de393367a8165cdb505c96ee263c6ebd47f2b04d5f2ec19170473bb3d58a1f51b6e88e8aa5d317658fec63106d6e6161c2343b13b417ae2040a1df36860b5ed034847903f56c2063c51229b3 +K = c4a9779af2c04c406b239ec269a53fc244d7752582057d50 +P = 40134688dacdd8fa550bb625020781c41b912b82d552f79025d680c47a10a0060ee8e54b48c3be00820a635885fd38aba46094b2b2b042f17acdd3106a3f693938ccc2cc02f67ad3a5c76ba1c7c1f68cc32180d9066ab07dbbbbe4f77ca597ca70c370484744ab3e5cec6e0e0916001d86d31e0b0dd5dd3a6f51257cdf362bb436811fce446d3d268b3055d3c44f12bb2f3d9bbe2cae8ba115bc282f5e212258db2bda907ff810bf0109205e585c83c69f04c6c172ceee55f0abdcf6cbd0bfe63ac7f4d911973053353072bf7360154a954bb27d4e62c36fa449c41909b731dbdc6e4dec6429ed79bbca5d00c56fbfe594edcaa2fc6152341ed99eca01276ea50e405253e0667ab4af11aa9d087693bd35f3f0731ecf4a53789014fd8427e951e073852671ebcc947dbf928216f86ebe3b2b31b2828f51fb82388bf25dbd226da3e5ae4d7238b89c1c30172bb5a6bad93bd671d464e958ace88e2678564244ae901243e8b3728a22d33b771bf0f750782b5a72e152761dd97c7ec973bde3bd301ded05805e6e3e3278dac7bcb3bb98776d20bc77de7ad4dbc452a7413a6e0ba9fd60c3529e193963ef57df4f018609d9b800c1e30a17fb4b4155ae1053c8da8ab2b7936c2473935ab5425b690fbb38e65151889704275e93f12033e45442ba87b07a2ef97d521e6ad5aaa24b671dc9d0b60293712a993b5a875ca4a29414376e +C = 0db070cb49fb1648c327f4f19a0936a5291a35dcfcb91bf82b878c8ec0cfab57c4b61c4e493ea8c03c75b612abe5f83ace629a2a99bf639423bdc9ed3d8eee0de1e15f3be59e4cb946698a395a250f469fa62f476f98b446daa6da4fe0243209114657d2203b3cc630653eade886b46f88ff2998d4c03ddc764ca5cf36c0a67cd4ee5d07967cfa98c3810eb546c20871af2915078e851167b2db5ca3dd8ff737ccc75e90fe9f413083701bc7997b02eea751ded3f3470ba146687986a3247ace262924969e814b70f7387b4ae801a7f1690c855d0150efa9291ac04120c9a29672a5ad5fe465175ffe4f40b4a8436859b002573421dfc4a35ee91d0660459841456d497bca0b548711af11b843c694d3808dad15d1c6feef71c01bc628cc421d3c1ea6ebdbfa891f3aead13274259fb76199b823f8ee9db487290ff588690624a665863cc6234e68570b99ac1752f58649f6b56e19c2eb22ebbb87b4132662a35aac276e4800e9f4c391f5717deb782c649f5b77ca0048bc293879c49af195af8ff464fa143f8f7dcb76de33cd0a809d6f6ee74c266ac3e964ce2f5caa0c76e1847c99ed73406d0848ced3a819cc9beaba31d29a3652e0e9aa8a5a173aac279b31c311e7ee12fedf9196527b8837a0578d0e9cf6602a6a048949376116d4bc0db3896fd72ccb5a864e201f52e13fcb32790e2f7013a28f52cd182b90c74877622182c5a440c67252 COUNT = 36 -K = 661df52d0bc6302101495a6390596382519473163944d695 -P = af3a6bb46be84d19d15dc7c0e31a7334b04377b9a22b7060200aad678256a0392941029da693d7bebd0991305de9ef8c50b6a15481e088628d76d3f1366f46cdb16cdf84d83f5eddc8c40361fce71ddcaf340653eb965e6d0f6a4ebc988b325af51be3c372 -C = ffff1bc66a86e7581e6eb9be6841e7efc0fd24fac2178c2a4b7cbbbda442fe3431764979fbc55fa293366f44d0094f703f3407d2c575965d9984af252d9a9299aef2f01137a28b8f1deea1e8b41eead73cb1f3e9cf7f3193958970a20c94173651cebc94524fb0854a6167ace795f876 +K = fc67c462bc74accad35333537f76c1e7f8d0969e6fe973c1 +P = 30dc361c44574577ea74a9bcdcb9877dd86b53643dcc135a5322c361cba2f9ed260e19df18bb4063a13b34da8bdddb7085f0955577d2fb104b7f2afdd4905955367e6cf3c7fc08004e95517d8b5b2e8bd6aaa944f480b5afb13d8933f03e2dbbb24d0af913bf2cfa0570bb1883e6bbbe59b1a161cbff3759a41915be046aefe8dbfb9f1e50e31fddb7d443d8cc85b8bde940b54bfeff26019e88538b641d4590ee20186c81795b5ecb2065e77b4a028fb368d016ee90b2cfb325bedebd2e21f628f391ebcb21ab3b27a4f2ac88ffad9e548997bf3b703f850c9fcf787ee5daa36d9c6aab0b62fc92bfe2f478bd3fdd243b0cf6eaac56b93db119067e9452c3aaee3d4c0bd28e3b7eb3af2e3e954908fb447ca0ffd1a22437bac79b6d16a52021ed9923d60342c93f2f2dce2f71b0f43b5a7d032c0d276ef12a9a51ba8c42a6caeae26ec0d0ba43b2f6e83f1fbaf7acf5072a7d6ed64b6c471d7a20bfff78e62c355bc5dcdb9ad43d689d6c52ce9a80b90de32549faae54c33874db09ea002d7cb3143063f5c8abc87e38fde0b7c0d54e0faf3e46375416fa13c1b919940b1f682789b008cd9de536ca9ff25fc3c2d87604f9780b6e9824273ab56c079cdb993202e2b68515dd419a5b5deb9f4b934db506bee33b3a9ff40dac089c590f7937c8fa17bb83570748ff448f3ff9bde44384ad3daad3ea9274b0575db54a36080c2a +C = 58d43c346b1d120f7982fcef60da5cb6fb2c7bbcce2b052b856105b4d0dcab1fb14b1b1a81e5f67be8548fc5218cacb8088dbf49aa73359421b77ea066e948f3d89b256c46430e460c98c3cb3801c0ba64ac326253bbc7fe6cb1c2dac802882a7aea99995ed883c73e9d3683dd80fcebc95890d08febd492f7add6974934935e9ace9a06e31b43f96a76c054ec1bf07eb8bc7da3be4650d624c88112aed74e4b17a6d5125f1881e7fea1691555080e4acb86790dab88914beebe15e8a07bce6a75cf9b84a51d5607b5778cdf7f1c503fe4cf16e4be9e23da178e7533b06133159659fbf12067455fc311103c3b080cbeae51bcbf9a1d9dd9d70dc106756bfe7d6ad408069e823b44ac673258ad6a4e7821124fe60b6edb2f584ad4d90059edd5409e11ac17d06bf4c4295111af71852a6f138039aa56e23d6e3e73888d03b1e3c105bb88861d2820970164070709ccd2b8e49df7655632a4f9d67de1beaa0feee2a7cd99deae427b5eeefc13c46b8b1323e474691bd4a0419c2fce354b0034ec009492e08b59d212e61f719c497d69a8da6a0fa762cdecef68a874a60792ea4b9a5b3124742f8eb4e18056fee72e4cfab880e554270d853a8746feda9bcca8e4ca2f3d1950b7446d2457d2178f1b0b68aa932773f456cbbf285b1638a988b65dbdd5b39e8bfa8baf1c6d4fc01f134a8ad776430d35407275f20d3a34fa3b4be43bd46cd65135a647 COUNT = 37 -K = f27b3c81a03ec2c2142f89037ee71e47bf27b83925dc0dfd -P = 5ae87e061fa81087c33f7685c436cd03639803bc88edda084da54f4d62f144372b4535ec22700e43a73a4dc4cb586cd768c8a75c2bac6b260f2c3216c567423eca810cc26bb3bb2d9d90a36bd30b7ee1b89ee0494c60a90cc49e118abff6ebc8942747d386 -C = b4f6d55a0b92445867a774a3388a6679089228b69b716d87e5e746f7387c22b6f551c11e0d71244472987874ddd8c839b8ef1fe6c00f3d06b654977972bb508f0d5e09a29cd13ce6098032e40d55c2828c3626b36ac07b710270c6529dc19b3d21ffca93add6dc38440e4be2b88b5d06 +K = fbb1cf2fdd4833f75cb7880b72ef52b5f150a12fcb67e788 +P = 5e02def4a2c21866e4a961835e738a4224b6f1e71df68d8afbf7877ed78a32cfbdc98f793f93096c4adad1039df681dcd6c71d0b3d44277e86031076e495b3d95a9fb1ceae0db09a788373292813a27710171c46a67e74d6b9ce9839955ce990ef30f7544e9d1ef89595387a2dd7361bf6ff908438ce5af60098c38c66dd8297dac5f7f444810332c839031b4b83430b16b233ccb5b5e59311fcc9dabd83bc3a01384a00e0e956d99fa2c3d6dfc2a71f3f30a9fcc80a28472f81eebbc6809a2d501e747516e41126eff330849463a5687b8e94355b157878c0f0caa8440bfd7ee8c2b4016f6981b8b52e407318225e050e51817a3502f57873a6f28f1995d1dd69772805c34720913cb36324976e64c23e678ca4f05e67bbc01ada3c66ecb05091ef1e399ad06a330ea543e528738c6497cdc633ef9ff23f0e2c9817be66496422eef0938337a756464bbc6eb48916321a04b942aae269e4a7228b8a50f74ab6834ac667df6714288a134684b7f0b5ece6bc2c43b99252d61a9d9ab291bf457cc52d89f9ecdd54a0c86f7453663e71e54236c838d4f7ebb2154646ee65378c0c1dab3e6b5e64b1f17ed9645871bbd40f40461b86aa422064226a5b404f18865e0386e3a323e44fc27dcc77ccb091ee642dd546ab2957325913dc6550baa7ba9cb704c45c754a3d2753cb646a8cdc3f8f5f1358ec907ffe5ed472046d622d4dd0 +C = 342d98083fe1dc338373b38d4944fa1538a75a23557bd940a3b8af5fec005a00b4a170d26ceb0f8d780ef799ff8eb1055c1c765993c7bf9853b1a90c08d8f109177752127c99b1a383d948cc5c45361aff11af6317a0f6aae35bbba88c82399281dd23383775384c705d59257c0f8ccd23d113e6691db6806584b9ef7ab886d9190da3a202885a32c715c51fa3f86c4e3b1860c3826bf8143fed3986d098f093a6aec90543562004ae32ab23220d029c5bcb1ff7a91e352b9e4c8df1b67f1d7f7189c8c0a8165ebe57a27430a306ccb467a32e40afeaa3b10c7fe3cf2ef58b4155304c119303d2110afd021c9543b62c05604b66f460d14a7cdb682de44cf2a850ebed3a1ce6668416237629b34b83f4fca1085e7bced0d48ba4e7f01bf99003929bc3699210bb851d7c3a95ae4bf67b4e3e85f43f8a0e3541f5424c6cfe4696850533f2d502e4b2162f06291b060112526b0484de2f9d4c37768795e0fad033333010107597f615bbe29cf09e7b628700ce9cd11610cf95b119f64aba2bb2a29db77a6aabf7f0100a8999387c366fb78d5dd3d5a39341b7ef416b5c58a29a5c2d5078f1dd9707ad9b1b98442cd63f0ff6ba1c91fbf34372d4084b61c1be654959b887e7951e5e7d91af8e049fc7319f7b81598efb59219b0b423c5f2dfaff629b8f1e3c886175f9e838cb009e11ee702d521ab5f9f70ed33d411f2251ee30b43e6d91831b263285 COUNT = 38 -K = 727ec52eb174debd74612a2b38fe94c78c1c92ee8bda3f31 -P = e05d47c7b6f4dd52d4b40d748ce091aff230cd491404469427ff4dc2598112572f531bb3febafa914efc01b13b6634ab79d27ed0607c35189e6e4f13dcc416a61f791e526777d92b2cd810e1133a3e99b5f65b45f7979b9008f4cc8ca78f100ed0be6f9abe -C = 6fcc65548a4f8389696ec1e447c4c5812ffbe65c1603bcd3ae911e953aa777ca244c7dfe1c6b1ae9162a7de912e8715df47d07075b8c64891dcf408e1409fa88fb48f9d07dc04381e77e3a41215fabcb0c7108119a4526f3208f5d6f85c5599a5e179aa14151655f51905bf22d91071b +K = 8c0b538730f110e1864ceeaf513a5855d3c666bc71fa2f58 +P = 3b1bdc5dc420c14a334295c56697a6ac2780062d748851bc4a0bd382de3ab1b6a1fe29ded581fd4fc19eca179a237a2189e761f9e420af3a9a17e6aa5a288ca53dd131c0bdfe4fad5e9eeb09fcd63b56d5a3fdc7361bf6fca5fa28ef3044c8a44a5ae86b013c18e0217fea099a68363acd03e4f7f1e722859a3338609cd8a87f30a915dc7026ab0e4d9a4568ba6d9403cc9aec505f20933d20c3ad07db9a2a87c486622bf3d160b1437c6b6d3029a69fed1db67930d4b9b4a08fdc5c2cb6f6733802e728f22c51206e06ec0b85765e460c51bab6a84e5d185933d86a926a08367621d6e5a6562c1e835ce8b9aab5b1e9ad770f9e7887fadd135188fd3422bdc55fc419dcdfc0b23f6631b9b3e8d07904edf99cc2066bc61915bfae9499c240ab5a232bd6c173bd1fc737969e8d00bb1661570a94baad5d7904eed01b91088886501fff9a54d51dcae78a9cee3fc54aaf353accc479cf9bbad34d58ec0784a6e480d06c012e8173d2e59e503c00f71bd0cf61f200157aa66186d63dce104319bc466e0e6bcd505cb65a8aca74af86c4593ac8e20ef5bc5435199fd233553cbb4bb52587b74de3545d1fa09641bd6a3ec7ff6d238b11c2167857b25c1ba808f3bd057c89394f98902a8b54fcb734cb65639c630d8f2d5c60f2c09ba080a47b119347948b9acb9f28df8982bf33ac013c9f59e144463eef6ff72845930cc0829837 +C = 2e0704ff2a2a2a49a88ed5526828ca130a3cb480d0241e1316f3938ea163a8ea60f4ffc5b7a33cf6a35b1cbd4b4c343657820bf66f40fe8c52c47fc41d5fcadee147a8ac85a423021b3b673bf7708c936f11f703fd6c4675cd8b39af49597954b33f3d9bee5f2101b58c6fc87286d86056fa070b76834477e266af64321cbeca2500c2c1b87e7c3216f1971f9d5095b4a78d1b9fb998647e871523725149c968ec600dc1feb2914756f34aa0eeb5477ef7407237e455a4d302af10a515bff6d23d37acf8818e51d8def598a3eb5cc458eed37037557a3d5a7d0d1aead11ceb6188563c73d3d5adc222ce2ad0dc11a6b421aa461f463787e0959a276ab6d3b07be374c2157fda710b832799d78f44663edaed40842a6e051957801d0d966ba81c0c0e4d79357681d2abfbcf93b2e9b44831fb35b86b1c416e87cd0c21eb69e375081feddbff31f4dc6373b5513a1438cad4bb9bd80035812d826909f605130f49b484161dcd9a4466fdbb783094c9105129eb32915f8923270881e59cf82d117ad65c43245ceb672d2e08ba332e3a560688ac62cabb87e6a6a881b5410b621ebb2897df8180eadfc501c4fbc26a0b5e9ca79a455b6e1fe2d7518033e109c6172d6f1b1d3608992230d189dfc3f40d2fd32409bb386dc4baf487c79812fe6300d0d6c5565583c551a8bba521e04ce6dbef8eac1159e8d1b99d4720c7af036bad8ee3b0eca5664d5f27 COUNT = 39 -K = 12c7b82396fd77c8deae6f720381014bc35a069d1d93fda7 -P = 980222b4c77373a336e7f5d6fa65228da0f21b1df69fa60d51020f5fd6c87605218c93717ceee98f16d8d5bbc608f5d053fb1d22b5ad7556cd5a619ae5bfbcf979eb6b35b65939a756cd393a70163387eb131fe0b5d5bb0eeb68aa8d1ad74bd40722ae27db -C = 2d0993335b1f29d19ef2bdf0cded1fedbc0b7be4d72692e55dceabe0a3e4ef6d3446776c065547c67bf27ca097d7b57664c1d6537229836b3059f45908a4f3fba06cd7c9d5584896ba198eab4e46cafce19a0ddd0a097262613c8513964cbd87582a2a99fe79aa6f7639c00cacdebb43 +K = 31705665f057e66a91521d041df54bf50bfffcca260f9138 +P = f4ee6278bd6b831c7f3dcbf11f3c94523c8412933535e3b977749490b33132b513db12aa768697da85fd7d8e52f6b8883aa654fec30f879ddd0082fd9659695ca8a6c34725cd8427171fe9d7412e2d1e70dec75419329fe5cb197ec8bf61a2790fbbe9eebe73060d6e25524896d55c8f6799d119eae4eac992d592cf0384236eb859cc7a5e4d41c37b1edfd53777290110e7176f58149c30a25b837bacf8e000a58e265ead9975415197017aad7e2abfcc0671ebb1299c83add5af9a28f81cc0d314b29f0fbd7dc16733167bb379747caaf30cf2506d7ad24543c685b113c2e45598ef125cd6b8851427074dbb708d676af8f3fc7f2b9c907f8fdbc7e9771d3da97c1f83b780c9b922b6f231259c9cc139995dda795fe5dd0d10c936cd1b20cdc8ff301f6846dab60c60a4c2c142a983f2c13b5198b1fc91def3cc884293381201e59bc8d60bbf3161ace9c1349c4ceb3d6ed6bb7863824e5a77a9db11469f55a81a89c07f2c33c548f56a3c82346d9e4833e81a3af15693b16013bdaf08e8d6d8c6edc9fdfe2a83c9ccc06d02bcf411802207875699b9143307838bfc7b225225f89ccb06f8de5ea5f52dfc3a23f7b07f29bc47c05e31796583f7094b65181565722adf5e63bd70f3317da9a3c63250190ea08b768006d61950b9feb2953a45589ea1a9c7a074b2c401dafc3f6443653d292b3ebcf7e6af9c3284cccd3f309e +C = 570e833b0adb50de9a13a593f3c9ad50f8cc6a3d8bc4933fa13f79cbe7c33a2b00732965fa206592675a9e240e54a0751d7b94dd247a1b44bc970a9ea762c0c3a51820d359a508c015333ff2a79060c179143aaa84401498d653090f54ac45a0e54c066581b896c5c21deccec8e98f0b1d2f4e4bf57c68535190ea53c6389863713046172c5f4adf641e456abfa350d94de623d1976127cfde0107fa03992437527e443f8f55b5960e33f24be15ead642cdedeb2db78658a0c37a114d22a9f8d279f26000ee98a1fd52c1bf961465231d303e0160f8025517c249643b7362f892e677e82beb88605b1c2738e1c97b06182ab381a9b5f7664213bd8a01d1c9982589bde71bcb7ac705bb5ad95258674e95d63cb706f6561b0a15959c1ac9d6f3abed6c409511d9bd131241d3da408568b9bcc8babd93a22a9eed1a36f3205511dbc547b4e544bcd1cf310c89f73c306deb631fb8f3fa7d949d9d443ac51cb4b40a283314f94db1fb917ec48820954415c9a07d0edcc48c801944e409cbb60b15e506b6f252d2118cd9b2799d5eaba7c9ffeb71e7bda05f4929fd5d2e0897da3505cfa50c1974c2798af906279c9c8813da0ffaf4e290894f49651b5ecc2cc79aa68f6a20e13c94df980fb3ee252febbf17efbfc4535d7230f3ee36c786e277e56d461b64229c37251c90240a3460c4ed4ef6838827ed8e0530337654c50c239b6100a8fe3dff302b0 COUNT = 40 -K = 05c2a3389a1ac8f497989f66e156afb67b11a75038ef6c61 -P = 9de1d4ca56783cc9ef12329ad9c3783169515437d7166603fd4e69fdf02d03bdf6edd84b5c25711ab5b8584e51191c3717dc9f1b86c7eebbcbbd91d450027390e08d80809c6ca485edf4a7bdb719be2dde05323158539b53e5586106123462a2d9f0c327a2 -C = fad2e3512af7cb2df85fa95bf209db6558ac0dcbc0968f63fd20ce1bf0ca71b5b951b168dba39b07069d1a776a865c4031b39e7b6e52cafba6033142b25545c3a8da2cc2eb264ed62c8bbdc84ab0cab0489a2f4f45aaf6510daf032e40cc6981cd7156cf3645276913ba4c3656072261 +K = 5148315b30b8e48c705bf1cace111c2b20f348212f688d5c +P = 656f85f12dcd549b916a12731058b3ba68aeb4b2c764469b6c3463e2a1af5bebfa98fb6da399e3a9d587c5a748fd305ea485adf017b30a22602134e2ac20a4847640e02563a692fefb161d87a5ba7fbee8960ae2264dd40561560f7a0ccbb79c6ae6175ce89ccddb41cf630733ceee754c69d1c3c9ef0195cd40b920e3328caaf2ac3f4de324af56ac2297dd3707c60113c02a75b713da783b2b1b84c81db5e98faf249dcace508a539629ea1affaf77aa21063b2ec8c15696f9b8edd11da3cc44dbfac5c7642549a5ea206bd23bfbca2d8b9ef374f096153827803e4954f5de5fb4a5e88c5ba3e6e87bf6d38f695de5d47004b77728a4556b4763c76ec0d1908bf336041af35906bf2d2c9e26465803f54eeb6aaf95880451ba5b3188f83d03e63a8708fe208fa91aa5867ebe10691d3ece7507c80f63d4e2130d9a2b9197fb25a6319de2efd4e41c1e5795001d52705f75c0fb84a292340387302eccb39be7e87a05bbee4e08fda208a2ff48e7491c7285b1e7dd650aac94ddc3c9b92c2145efc26ed4d3e41c2e68dd315819753d2037fb7a4ff91fffaf34b60fd9e1fc387227cdddf6242f5b9119ef05abbdb7c88bf3b24973300d61ae97d08ffed5b265fab5b895f9c50fd0778c8a9837cc52521c23b808796cec22701542aea58909617620c8272729eb7af9e525d105f8ebd2c131845b66907a0f0f30629797a38a9334 +C = 32bdf542297452498e8e3fff60906291bbd905aaf7e8fef69dcac1a33d13e765e773222cfc1d8a6fb980f73b5d70aaa8ced410b1f5889708dd2a28c38f48aee4a99cd2b8e9170a074be5363c53326ed3611d3b324e7b3f3273eead3045a6876c64ce58bc182010dd4697ba6c6ccf48ec74720022a5074ca68bbc81ace254603201414371d381b299dd5695488b52e44ccca9fbf0aa5e99eccf87c5db09a07847c0a01df0db5f31dafe7fa1f011f32be3d7cabffe8199322fe57ea7b623281c69f0c93df202af6f268c8daa71c655fa90cb25f0a5f35624df94fe35e94778ac3eca174b114dfe516b465581563854d2c56d493cd4d6e216da247c5200add8dff9ad0a9c1b951c8cb8a9832ecc017b38ed82f7ce793172d14b59831aba5384eee9b44f12ab1cd14b60f4ec2a26f0c9891178ef579b025c45eb8ea1d28f6f7c9cedffa3be2a97f6eb3e9bf46f3dee15f15f90c0c02ac1740fea45f0a10157e30c2820700eef832acfd235fd28feb3f5c8343ade46e7f69b5f383eafa97cf269cc099ac58325d91d7a1771c9ee8176c82f56d6ab75f690b4147c34a3690f884c5ea1243015bb65ecd1f4838aad6c5e5460f92788b97690d6629d863a07883f8621ef65c670dde5d4019972b1489456945bfc7aa215946d6bd6ef957d028237b6debbe4c1497fe305529f8ecf02c021b29c2661023eb957ac2b84ae3249a60619b76288e7d9937e1afd74 COUNT = 41 -K = 0324b282f543e995e9c3d09dd1efb1d51c206003bd79dfab -P = 3a4aa84d2b3e2e8149aebd6d665e76da82500c279008edc584c037d29e58dca28126fa2518164d9386519af929244914faa6da11463e3dfe784969c11799ba86b683ccc56a81e73b8c88c682bb8b4feb582d3d2fbf1a7d1be4a7e9beb782afc48f49d444e6 -C = 45438e44368525e8d9490f930921f49379ae9bb65452a7fdf213efa560d51e18c5b1bc20fbfd84da19d3096b08d6294d60dced5a078a563d37d2457d6c55916d2c1bb1fd08db994a4145237d1110956e4a670005326ba2885d0a4b0f15ec6d81cabefffe29072e2f39f91aef88e13e9d +K = 645dda495f7a010132bf421486e130c305e93f05eb95a7c6 +P = 121c5c204f6c16cfb95404b1212dd0002dc879d5930118d19bbcde78bcadd3fb4385c11315d51d5986de8abcdec60c54ebe15aa76278e47eebb53d591ea4fa791604492bd91e98999e9f48382ef90fa2a178ee2e19aca14964bc135fc1e2596eafa85a08dff87ba547abcc9c2ef5b9fe1f2b13eaa4b7306c4a58aa41cf3bb87676b28f10dd11f5dbf602a0fce3d6c0d33e1671248840e7e3a8ebf95ffbd430005558bf6f047b02967dbd9e972e0fc58fbd0faa0e90bad529cc2d3ac8375ebd891584322d5507bbdf53f45976d5899f318a6b1c398d2a07fa8c14dbad59b5e7375c73303dba8a5ab21408596cecaf44afd2e788fe815d4410c21b3e7a8292e15060cec2df70eb26176ada5408b7ecec467ebf2496c11af61e73a1a0cefdeac5111cbb385dbec9f9b108056e82b76777acfa85638bf67059f672f474e9535d81a59346c8bcc4e2ec012139f5a2189d9e832a5dfeaf1bd508ae669e88ec9fed4f1cbf35f1decb69600b167cdb8ba51c46d7829cda8be7da2dde876b18029ae284a99dd67d4ab3514c27bd25af262107011dca19a2bafd3003a70fcf33db60e4ef39c91f5de9b5e1d1b2677e31fd9f69509c9fd1b73e03ae108b1bb734861d013eeb1deaf1c55224719c3cac6235d6c78edc46c0e80ed2bba5f2781da9ee2adec1115d40143a8c638439800504902046662b5aa4b10a77a62db53d60e238a3b08b3a +C = 9ad6073d260b9a89bd4d259d21346ce53acaed5549ae605397ff8828bf836ca8949134489f86983e5652ae86eb9bb93a227b61ca0c533606bf1025279d685d60827053aa51c3320354c8ea6db911ca5d1bd64f6a3bce41aebfb09c581cbd0f4c211420fd1d4b8e35ba30cd497e3424b65d5fead915f8efe71c8700a9c720d2b13f02f398bd1dca78ad4c2195a4bc54d2b5bfe92115a2f76aad887c3d68999201d8da331a3803c5af424d0c4fe9c12fcd453f3573a1e3db3b63bdae0a0a9a8e2cdec5f86ce9836e0928b0ca7a76f65ab7b8e784c4e744cdc5822befc5bae62753b3e4648064c1653e5f9f598211ac880116c9aec0c0e943a601295c531e26b0f390511a17c4736ef7c67293919628482ada4145534a542135ccbfc16552c823156a5808dd91d7fb875cceff7c64baec7adfa8dba285d11cb990cfac012bd1a0e5d93ecb3b3d11f7db47ebc4d454a2426f22d648be9742806683cc209856ade3e65c06e55a0f98982728f7605168fbff7058ab5f6c956535b1515517c17ce19c58d9b8b6c19d94322529a9b3cb6ec882aace86c6f4e2b3c037a93b07bb776126d866deae2d5e371a689a2cc84e2d8f416baeccff3cb0dc4b5ce3910f1d4a8afb7424eea5e267f2115eb106c4d92fa559d94186910ef43171b357baf75228bdf71bb3741e98bec27b93acd795a0bff20ac41521b70c864b662e975b055687238d5e973b5ca7af25f5f3 COUNT = 42 -K = ba1892eed424754dc1ae0e9dc118353daa10271431403227 -P = d065d754eb67231c847afbf3d4dc76e1a4ebc4b8feaed0f3815eaac525a89723c55f917bb96d4ee62d851ab541594286a9c02d06b6b84de113b3fade38f0fcd78cd0c1246ef3491c8b6ebfe7dee40e6620f97fe091fc600406304e210b9f1c5070897992f1 -C = ae2560218fa87088739140b00ab9c30598f8c60fd2a9a751dc3e1c279f37ac77972281cb57596e17197e2ad9aa3a76a1495a21ebc30ef8f83046e0b7ac680601c063b4b432c7afd575bc93a58275b285bef9f2e6427fc5de7637edde1a3a0939ed912e4eb04320383baa4c144d69837d +K = 4f3dafd970bb715ae7476e5f00770c09f67c38375e57b55d +P = 1171b64aaf4c30882b9d1abaa18a2d38e609aa1970facaecc5842b0c1dee9ae5e17f5dc87898159d7ff4075be3c8b3fc08a73d17f01db81de1cf25ee96ff1b9a06cf620ca99c62eddfe9821e9e9ba31117331c54ab802b91347cdc3dd3fe0304b71bf54bc1e44dcd7b65f02321846254202af2e40a5299677193bf51a112b1237a5057f72a989116c85876f34a172271abd6f26ae16bf239adcd238b77839f438d7aed87dc042ea7e413bf4c8db492e5baa4548b999de884580fd7fcb3b070c37dba25d4350ddfc8afebdc45db2c74d9d9a0540b1c9687ac4271cddffa40847843f442e93b9384439f47d78bb8eb9cb79364fc70179c31ea13b836391c95348985ccf6d867cbbab655cda821d02e68ddbf2a2a172a46d8554184a29d833caa21e389d6daa9cf89fcfb8396bb6b0ed7ba33d50319a8dd6f4f68187aa241aa957fd1a1967619761d7ad0b35506314b69e89a7e86dfa419ef4874cd30d30b8be80b0f2937163772127386e248afad575d8dac6c0d1fb2cb536e8835db9982ed23a499a78cdc65354f8bdfffc08dc5fa4f4d0d3c805bb3f4d214853b93ec3b903d67a88270bde8986c76442ddfe8a7d4be24edc1cbb5f432c9a8012c3aeae302730e0ca8f65eb2245dc89e4056bfcbe17028fea6adb857f84c7220e2671ba954a204ec1462897eadb8dc236f63e57518505c25eef98ebfaf8cfa35795bba730e4041 +C = 9be14f2e98a28c7267c535efbf134a9943a03733d12de847c1e51072b5e6baad87bcd99da3bb48841129e6aaa52e0cd80d1446dc820acf77708faf10b9f1e9b86c7a1a56b654564e3503bfe3eb7eae56f190c8b7bf53927cc008e5d3f21234de5ba4fb34d03e0e7974ab2baa171661f6923607a24879c8535d9354498a2c52707c7e049fb2090018175e729fa210040c32c747fe0b4f296766102b9e9e6f0bceb5729f4ad24e612b21539481e718a5aa2d23d9dc647519420caba79404faa68defe216f320f7924f296ed39916a67260106a9dc19e33c4fcaf0f214e885d611cf99e9f1447703e91e9820bbb9b8875b968cd1ce1a290071366128fa638f953174b19ed09f733fb8ef7b18425a5a3849ac6fec9185ae2c6fb9d844363e77467e0c54769bcbdb2b62bcca29909a9eee0804b2445eea378f73357e93183c20c4938ff9824d8cc3154d210ec32209264b4b99359da4f9cf2f7ceb93d43c86c52ecdf7526e68d00360b1a71fe855c06137612c6fc9946ad55218b7811db7bce5714faa3855b671b396f66c52af3637dc00618258c6505511890a422d307fa930e423cf4ead88611b1385f17b6c3b779b0dd1c92d2b741c1a41e3e471bbb7ae048cb04b58b4671a3f8c43e9ec7e6ada6f6a7ca2d3275e686b61ca7144045531abfff3d0b25feb98efc042af5b9705c956d9c64050680492a6c16cd8273794357d4ca58f1835812b40bf00e COUNT = 43 -K = 4d8f35d15628e8e52069eefc89dcd416d42b890ebe099f98 -P = 2155175b14966165a98fa089b842d0a4f8aba793f1550ae6545513e602637a864d35251b7dbb1e5079c647e56d26311b82a58973baaf5d06585e92746b17fc82c684f78443fa4084225bac8efb4309459eabffebb6a041f0d315f25348fb87229f8c76bddc -C = 28ab2b444069acae24742a930b47d8759b980280e8b6a799157cbea2727ab26616d44d3b1446778b273a74de44c1b8b70e620aaa1e4d6466ee111ff8af592aa73a5c00f5aa735c47043d65decd0b60e629181191e854935d1fc8a268357bec4d633139b4d0c14fd621e884bdb256bfeb +K = 80b0fbcfbbdbf02497e383d3d91deea1fd7b8e7726a40472 +P = 40f3c6ba62af20f31d40b20f339a2177c531dd35d13602b6e0b88e7459f69a99529b33dffe017afd6b86e96359b780683b5e047364334fd76ae287f9f9580de80bf1f03a2df725a0780cc9e1eb7e69091d91415c610e75b8dd5aee0d62855a014500c41d7058f6c50a69598c1e6c9596c280986e6d1dbd3acbb052c0e76570d1f2cd2b0821c9bb84a07dee1344181671b729f281dc9fae320990331db0a89d7d1390f5bd577dd6fc5489ac6cd19802709451c8c48cefe41d2b5cc1cf8982d94218446dfeef9b0c0908bb747e3acb072b078ab6814793c5c83e50c204753bcd8bc26e77d1cbd8d463ea5985154e0a40cbc8495b5687c222d672af98b07dc278becd5a7be62012e5793f24537ea2f02ca03a99101c9e6a37b7cda14787b78b9bb97a15e4e9d8c9aad8e9ec9b14697387baf4930809df53b1f9f44c695af3d89e65d05613d1360c74b1d5b9eac8cef3707a014ad089d42110d0046fcf5a2e8baec67f20571a458245108704efd2329230defd6edbadede7637aacd8595129510b74b28e0f8ef28582d43cff7fbb3ff63076f858df74e6f1dbb7b8e35c0c981d97fbf2e373b6bddc17be66f6ed812544be9d175836d49d441d313b52518f147be282897367d12d86fad19a0a3421594de02ec5ca9954fd71683db4295570ab17b180a65b6f1cc488084a7220c6b0741c8e639cd9eec12c899fd7f1810f88a91ab7f5 +C = f879767e9282386f8efb56971d98bcc90f7c0e6e5b2802762329cef9759f93ab5690dcaa2752c92966294e0845656e20a92c65e470adbd7d93f7fed5053d22e412537586ec9e4254e8c6dcbe5e246ba9c9d5dab3abfe3704c71459c0dd63ce7925972744bd37ded3bb49ba683505af5d62696f76e260c29189bb9c31d226822816679ba92c1ccbccd43f28c473fe609a5e705e57a6ca0cb9d2715b93012933733d0e4f770df31810656ebb547fbb8c2471e047b4f9331789110a6306a66dcd4e31bfd36f98a6dd357630d1f08e448e52d221ae90c7af77940a88c2473432112318746bb99e42e53a8fcbc1492390a2a39c5c51369cbb3c122ac32afc0440132cc673d7f52c9fc56ea09417153927bf4613d119e3111ed799cc024ac41ce578d8f051ca00e2b5dab6ea8d13e60e8a969f9cc9b8e860bce9720bf7038edf2aa058ff55ce0c448f44235c40bf452e29bd969742b72d3b8b5bbd3d8e66c659c3eab49d610184c85e77b4148ca90d458eb72aab606e969e2f0be7a6789ad97e765c32315ad377812d100c62e7826704f16af51fe012548057a577e604e1bd63e7ea1e40fc7b53dd825b4fe3a6062f53f35990ec3a3af550370a164a4b42f25e4a05d229dab8f499a41aa537b1523265bf2eeca8a57ef9d4b141aba25ade5d61a9750cbd4a364343aa4ead62813c728340403cab8e7c83338a8558e3e1f11e3379f68edf5dce9f85da4be8 COUNT = 44 -K = dca1842c7d5d6d671fac660d122a1d56e2b25b0e90c0d097 -P = 2852d16e061ae3ae2f034decff99393d2f14be3d401a160658e3bf359bf2a36f1582c341ae1979cce9a4fe5251e60e688705c34c4347830004d75a0ae78502cdef0405f473cc2d864872da46813607d8d12dc89cf37364b92952c178902dbf2a6099e56df2 -C = e4d2f6fdbf33623128755d449cb4cfa1a4e23df7858dba9be6073d7049482965253b547776e161a1cc96198e2891e824d08e97cac8a1420596f3417fb07251ab57f4d8b0769cc1dd4eb3dc2ba2a776ab9b671ea11385691a6ba8ab9524f83bcaf521778426174a837f454bafd5e2f25e +K = 1552ea6d9c0818d7583ac68f9a64b83b40ba4683ad8112c1 +P = f6ab8936fda27c60ffc978fe9c2afc6f7b47a49f4d628e8a0f96c312caf2a760c20b0237509b286cb8bd87c78dcea1468b34ae2c80cd55b288e8a235847300f54fba4f9226f11240054829ce099d4c50296c5f45d96bb6891102987985f03576e900e82b740666bc544649995002d64acfa746773b6b90b242d8ca0df9924fd353ab93ae29faad24f3b480ccd7e7f2421bbb739a347ed2a001737cd07139e6b3b237e95de15bd2b7b2f079df78d7311d592a72b4591a93bcc763d54669f4e0ea9e23828e4a722a300f4f0415ad0ba07eed2209b682564a199c1b957aa9e86b50e7b34440639efc7c1f1a74f64b84a17efd9d72441e17aceb506aa7161a81024938e7fc19ab83be3b2380c4e0ce2855920878dc5327ca7f405c759682d4b5c2bd4d0a711b2bc1663b8cf84ba644ea45e9a9abb98fae80a5c7e0df638d19d289a740b24ea128d95fb1e2d65131436b02e6c0b5a7abe4f2a4b6a706c288bed7ed08a82c6f29d23b46c276852f02335693bdad098a37c30b39fd966115784e0a0e16095578d72811b1bd7ed6fc5a0e5ba31329a3462ada123e7feba2cfd51dc778e0e81ea91c571bcefc67dce79d4f8bf8eeba77d531d117b3d82bc3ede2398621c634c32835586e054aecba8d9b445b0e1a5aa78ed775bd5938de03711512f9df11b1c461b5a2776974d98f079c02247800d5f55dba3c2d92df11646448870f713f +C = 362448988f0f673ed44112ffd77ea121ffe845cb2ca764080000d89d7609220fd09e9ffaf7581d5aa802d2377cdf974c5742ff447d357b56825b2a4e2c384c1687469530cafe04de6e72cb51ac30bd9faed03be1a4762faff16b7776b2d5db27a23ffedfa1322af0eb89f32a16fb81cb4b444a14a43029dabc01f473ce605f97f35d86c137c5bb98897afdd3d63bab1bfc1127fe53539b3eabeef58a475185446dcb144a381c74f46f545890352bf36bb79e73ea0715199f429b707c975085ae02daf36745286b481a88400debb58042c6e104fe2b6747efb6d51c3870743898dd357f758552e7522aecee2cb2b095a2f76fc39e955db91f7732a3502918c207e6fba1ead17227222ac0e22f140ece60b6d96e3cf653f011b7d110e7923b0c276d4075174ba643f6d387a7c86037b30fba5668a16f4d586f42a2cb4489af3b860b17b90c505bd51c644b9d145967b392ce035aeb25ae282dcbdd0fc2c267f06e836565e994e216b35c2c8fd3f1715c9dbff34491d84228b0acd3b855846a439016ff0a291f6ebead210a99cc979506d4f2f471beecfa4957ebe6bb1707de8c1e90105320f06d0010d0a57a83ce8543c1ca5febfc6b74f9227a9bdd37da260023542571c3dc71d6e6a10fb117bac9f890336628a6f01168efc92e30c220d3fb26c1c553d59a8658766985142876a15f9840cf17fd6e90a108f65a4d721e766501288a5cc7d0fb1834 COUNT = 45 -K = 7f90bc090475df209b647c1ee4477d41e6fc84ff9413afdc -P = 43e3260ad0393c46cffabf016d46329f53f8fc6f901df742a45374c9fe8b41c542ceb7470b9045998612ee4537cd817f1fdea08653094ff725578b48026daec3f434e3fd65c789f231332de9f6dd6bc97a5ff8289401338f2312b17c8919f3aa30593cc548 -C = b90a10504e2121a7a0e94d18d1243edd5e068d0f08661594ee5fc65158bd25ef5612aa4517025095cbfaf5cdcb66985fc776e377125d70ab4561354cef8cccf6cd5794b4af6a297040ca413068f7a1d8ae03875fa8b9442af29df5e93744280a4dbb2b1eefe0136e14e639a5598206ab +K = 03eec48251b10e00ac9126843df3731574f8aef6264377fd +P = 25f3f55662a196a83f1e04bb8690f2b87ec84313686a775d610dbe0d5e1799fa4069a494eb923852f507bcc29b47d048d01ca8fd163592749fb07775d50f2bfcda07a7d3f369c18363fde3fc72d98c73d030e3dceb8e65f5aee2eb9c9856583b9820301f85f6768b4151dd1e32a191ff98a1b4a1e116e28b8114d3a68d06382a7681d4e6de62feaf5845690c1824f0c9c95a48a12de6fd05b17d7170d524499d964275be77079ab424a08b4ccb7f0c3ce3adee0c253dfb86cf3922a14533295c0e5cee989d1e30e6bea916e0ec7ee8ff432d7eec32503d2c4fe1e9517cfb96b409d48c8faa27991b445bd0e445e4216558eca3299594786d5381f3b163e0d3973bf67ebd0e010d55f545f5dd10e47445463bf7e3c1fc799832563badeb9896eddc3a326407e53998f4e025b0fd652bb974fd51282bf8873fae21dd15314031b0cdd6c59bef10cf46cd343dbb2c57a8fca4f40892193db5414ebb0e450db2f738cac3cae95b573e4143c3fc2cafcd9c6782a10444f28bca40bcb8f884b5a7fcef6c8d75c75bd285985011fe3089040f1087d8a6c6ba3f2c40e8279538e8c739f4468d0e003970ca2814f59e44776664865bd354328b45007195a09f8a5dd2fab2f76035913a0d005917e96f9b6370e13b97091ee0bf6b485cad543008a51a2f40767aac6920517ceab8189a8bb9a35d37e2e3c2a5e8bca589aed74a091106b99a +C = 074ae7cee574646f6ed84bf174553a881ae9cff5388123d8e9a0589fc6740eacf1d5efe5cf29abac3837cf289c6d2658a40838955f0adb49980418f138b86940a0e5c90cf541ac3d0583c197efefb6ad5bfb96c2dc7a322b1a6d05dfb4b358209a0a28b1f2992a62004230bba956236e7060e3f1dbfe560dfc652b8d19b9663861018c56ee18cdb6e97e9319337a9df9488f57706fddfdbeaeae236d7a2f457d9865925bdb229af7dbce802e0db91280605c587bddff7d2514490d232ff05e76366b377c903c261b997bcc01aa5baa7cfad4397e6148a3d4aee0b25b8237d69b4d5c9ef0b55dc3ca708213b95545ea664190863d4a6c585622570c6e14848f1c7ff4a3f5432c0802397f78dd547696c205d8d4d42f4549d7a4f13ae9b2f624a1fc910878f2566a138fa2ac65e8c56e77f0f78978dc02451adcd2b0cbada2271bbb3202b1b0cce1f78080a687dfa90e129a853053cb90045e642aa8f90eb425744ebdd1562e09d2b765364113109c5ae0425e56dc3586098d181bac9860508898ac31f20680303717ebaa7535ae3da3877e9692d0c080d98d68bd0e86f4e8d3a5c10ca89d15776bf4d568aa144086c49d5dac83c82c71970b3737e111185319708b928def788628aab5e515f3f8c3f17ca7524c98cb320e9db4a76e98f715ba7ae6adbf46cf3f0addbd08212e5ab42812ad1039668fbb46e89a69cd1daaea5f87c07c214c588b5ad6 COUNT = 46 -K = 73162f1f5fd99e05dff9623b87dfe7a38ee3f609b5c0a0d0 -P = dcd66ac2e815f0fa894485cea877fd8d4c508aa2bba49506f688e0777eca0fbd352d8603c1791797de87f5ced2f1055e1cc1b4bae7b1250aa66068ec08a95fe6a5d52524d3bf403f37111db4b3f0d06879ca0658d0074ff3aa576dd5a8ff03d0cd84eadb5a -C = 5680f68ef6c4faa2380b1363661fcd8fa4774c3540730c2cff875dba0e3a208b104cfbdb9d3fc8d08c543b13cf1d897dc16a6db4f12546b3b0775db41bb32e691110a834bda599e936d91eb97dbaa73a17bdd2d1059b427572f6d25d07634175b1c1dae8d67e885fa415e9556690faae +K = 381c42d89d80a532a8e373932d176254d804cef638646f29 +P = 4c88807e8d114aff228f30399637432809a608c52af7bbcddfe2e3290ed6ee1c7bdedbf4cd5116aba847d3ddee085971ae066a315d87847d8aefe7d47c2b503c131449596d0a1ffe2454c3562824cb31c84c81468d342f2d4ddee7f7240f21c0ab83fd45532a7a1a9373e2d60d96652a611eae22d7ee184d7fad5fa4995ab494ac81a3c9e7bb95638aa103318b99032a5fad7636385df2420fcbed7210ef675865d15599bce9528a2f5aa3ce3a2302fa4ee39e73316d714c6f870b6ab11731784740eae8a7952b8b1c94c7507c68a4f62fcd82ea76e6ff58d680832aa47e64d0e9503395b1b23d8e529d35c3abcf5a88ced448f2282b1a4710b37755efaa466d2bc6d431f09ce0b23834d1fd472e7196b9f97647b26b2ca481cb36ed77ce844f28d0e2ca6ed24ff900d98f6ff286bc6ef4d3adb074faabb181e43d45afbcbecb98025e55cdd5dae0d3dc57e177d41a7d96a2eafb58cb14cf26aa267b624336a3e7547f1d84769e7387e0218dea7d46d15356a2958c4de314953a32d7461df534aabd2050280a4d4152691f63553c3bf11ec753ce2a067430a332732a9b9ea2397a55834b2af2c7f7109f5f12067ede9c028659bac09bf9f52aca157f666d7a98549bae9e3c9e4c795bb757d32f053e4bd917ef215b7eb1f3803aa10c8c5ec416709cb0c803d0df73625d89241e4915aacf43a5257e8a223ddab3817bcc0fb539 +C = 04ccaa4e3a4c7389df1e5289113e429ff5531de540bc5dd761f8ef715889fea073ba81b916a711d6f87d80110cedf9906bf5942f32570d1b9b82fe2926fa2222887da3a20a13b01a5617c7cf40127fe050b8266dd86436c4430ec09958c4ec83759500ad025c3764601450e9c1a93ba4d5c776eba1056cd111d3d987e22245f0821e2104e981992343fa77e4a615e1296f56ce562db3312c0b0445f0291ef381fc4f9588fb92f4e7d772396259aa1b2a83995b08a7545344ad08015bfefe15a83d43818c5270fd2068ef7421bdc7c825964ebd626c9c1bba32a84264e04162212feb3b0a998a52cef7d4507f3c385f1a953c749a107f6aa411f0bbca65cdd5ae290b4f75c8a6818f532da63603a6f51e5e276627d426fd5f39946643d8d17e07a4f8d1c1fb91521bc09cfa58b18dd65dcd83fa5abfdc845514fee82a5a9a8a8a429fdf181ce470510ea1bd4abdabee02963b06acbcc338fded22f08d8c49c98a95280319d4fce6c4a9d46dd6425af7c2209d42da1534d6bea786286fb02d510df4ea9560722cbd9f2b8e04a7f5997d8dcd3897a92e1e9afc3ae3da41534cd91f802ce6e41cf84adf5022afc321e07e85dc0473a9dd16b1e395d111199ddc9770d44dfe5a37cd26d3bb9f1f2da2688d48d3c658fc392dd1349c408f396ad64fa94319ad487dcfe74b133651d6695be9bd18fba70ad8ce8d058e087c1b97e09c52e8cfc37685f02520 COUNT = 47 -K = 71806e72bf2f401352f2b8e31015deabdd178fc09feb377e -P = 90240b8c59a37d80d57df5d80edff1210ac1e5fc87cb5ef7de11f4d534f0f3b8c5fbcb65543d6bee658cfe70c81e34d28a003b9578081820dff5a797ff119627352b50d59ad641817e59fbda4a2ccaf09882148a7b2c515382d8aef4385522b4ff619200e2 -C = f6afc43f165ad2b8619e2f5040441f74d8d6975ce89950fcb5148aad374e70ad945f2e4e2fc64e71ef0a70ce804c48abe6a1e1659b42dd8126da867e006289d3363d8b50beb56c509a4fad4470dfcd89b6fe000b012634c69bf41855b3a7d8843d71926ce1ee2ba488a2fbf0ac2e739e +K = b790ea924ceaf877629ef3be9a4dea448327c0a07939347d +P = 231762c15997557ebf0ca3a9e0d56947824db980570a9c85085095e60c5b4f3f4d62a09e5ec9d445211e63cf6641fd21a1c5aae9c36dba248f1f7793dcc6f5f7eed77c931dea30699a8837a3e519b8d06d396a323a6a058e9fc34bd5a006ccbf387c3e3eddf03e6d18093bb838dd820537ad9c4ae03568f2fccc715a6e4a09b808bd870ec6271a0bb1ae6dbd84c02cc3100d429e4a7e08aeb282c83a5a0fb312d4aabd8430e3cab9cbad044431a79598392e94b942207dada75e6d0e223d6a59715119ea429f56a458a64d56e068c20ab33261c5c5d4d0b615fab59ce2a0b755a4bbf49034f007a79bc017f983de1c1c2998287b1861eb968e0beb782db00d7ac6b3a213f6770fc08bc5c9df343b3a94ecc104c62bcfef80be5bd0b4c0fceeacb05515133fc5056c6b4ce13b349c92e1802170a11b60b92dd28574915890d85d6adb9b1afd8007872ab3031670990e26bf94cd276b1a5513b774e45e815fde2246b83003d07297c44156db5114be5ed608e3fcefb99a1f368fc4eed3ead488d69aad66f6d7556d41a006ab75047e706126aca23bfec70960e7fb52986a59ac60de1599c90bc19d4f9d5aafec0651b675404eceb254e6f35a921f6b55fc89bc8733baf76655cb6c04dc1fabe87c960229235b10cb36499ea930a0eb597997e1f56acf4e349bda2b7e155b2710433170d76905ce61d544b7869b3f37a166a7095c +C = 7f839894e6054b8aa8e867dd2f56bbc4f2fa42f69e4b443a92948e2c51e9f91fb0df46828bec445e73764f270e33fb1aa28d38ba3039085c455aa908df292b46ccbdcc7eece8ef5b6a95a59aa8638554b19cfe52ec53813afdcb2e91ed36b5adfdad0ba4fe788b0496cdd4150e14d189e448550b30f7b482eb5e8da41d093c523f45ea2f86ab936feac1d2cff4d1665e3cd5be7ab2be224e737a4a27d7099242c8a4d07ef952ee5be95724e4fb3b7f3630b6d7733cdce2ecce578e7b716c8359b1e29937bbf6441e3331caa349d91861b0adecbf7419812f901c4a897912d662e02ddac03c4c801264a16782744861890f47258b1d027a4f66046a91966539314ce4b662461248ff2128c0a992fbe8ba5c17209208e18bc5f111516dbdac2d747e70a5e08c3d5872674db970d7e0c2a7a1a48df0bfe301ab7b9e25afbd3a1d6026ac52d51c86d908ea8c6f2f89ba72d35e6ebfb1de87f052f3ef582b6303bb6f6ddea304f6a75bbd6151366584f06a2f122ef1b924c29eab2e3d82133b6cca9241d3b9d09d53b243bb18543636ef954ae49f246efdb67f981b5748973bd0fab6edf8eac30b39c4a379188e3ecf67eb4c57bd5b9a34597d63e81a0498b61117cac5968612ae69b51f04feb2417a2255a449a621227a4f782fddc912b4b4c9544dbde859172f531d7cf37fdebda202477e23e7a2b693993ea85680471765c9e37fbbbf3935b8f9dff3 COUNT = 48 -K = 3efa4976b55a7c41eeb3e5777d87b399a9365fc18328567c -P = 4cce0d7e88f7be6784b22be2332c06b14a4c32aacd2bb9bff42eaf70690c8a5930cd3aef1c2ccc36bc77a23469cd064285bd955ae776f1172d7044a1eeda27d9147b6b002831daa63d5e9dda957020d3c25933060c2aaa6403dfbcacd406b1e1b63284a05c -C = ce9c297f8f77d8898dd607a54ef7d57d61ebd4300ae457bed8609c7d1049f3e5ed9a15f04bf683d9143f0a1fd6cbe0a8293402413a62cf36e71c4b81b777d8f7c5ea6adac80bd98bde00e80bc4ddc6605322b8fddcaac9f0d49550a97bc634696fe2c9af27fd364ffbbd965e5778c9db +K = 521823779c768335b19e9c19b1962782742e42158e8fe74a +P = 0e34fb351bc0b66e3a808a91fcf148253f3186fc861f388d594b197c26440899430234609e362cba656d4ee3bee4f86dc336c4258c73e6a9f6c1c22b53920c0feccaadd51eb00e9b7898a810f3e5f50b296630798dc439eb93365f11a959fbdce84aa0d69915af1c362ec15491bbb116410ac8e1c94dbf602ff0a02a19ec71d2df7bcc2bf32d332db99e01d79967f9a8a946739e6afa6e670decf830d1b10ae90ee66b5621b65110577c49f4ace8dca29b2e60c4a756e30e6bb4e0e4444f0564dbede7cabdff2c7067bebe5919a57041a0fb4d1ff964a67561f1af3f9208eae63d5ec508f3455bd4830019dd8ba7b38b350945db651da2e526a61b951ab5e714f66ecf8337f53e78543b9ec8a23b6ac386c88d9efc9327452390437eec22c9510be102272bff4517794bc60572465a9fda199f085ee60f5b70cf8a3993d2bc05d66f298b203c3d4558ac835a2254fa932f3ce7cd251219a4045709d1591ffd8c5d83ec640239b454b4db1238837f1ff72296e7d15292b5780e7e83564df9100cbd58baf75e9f8fc9cce61329175b7c4b52e790f48defecb37c85072c20d31c0c274bb9c8592a3065c8c6b0307ece143b804b645297fd4cace1ead63e2f6e2de355af7070fe0f5dc67f230edd85c7b4dee1d577e676a49dd0764e40938e5d502e826aa5fc0cdad18666dfacdaf2e5fb1b201aae54dd3b2e7416af94132ea48013 +C = cf382a46dfcd886c31e32e91571ec5c3b388e090f226f09f835abf3ee35dc3c702d8ee8f0a049b37238058a05839c356cb23652364539f5ababf9e549ae8daf824d02936207ae8cb7be47da94e68e5730ac61fe8ae1dd3465712ea0d30ad0ab99d53dd896e881626c052905710ce9514805b86ac7ad303689a6e89eb8d57325576ae01c49b3238da8488b3d13dbc6bba8be099509653126a0e631e5f58950530694533f0fee18cfe0d9ddd722041890f997fb86f12c3d4393c79aa04dea7050847c2621dfd00124851f76097ec1a0771736a40c358851344e60df88466b55cd07eeebbcfa2833cb217a0995456846b2433eb364cb75dcde06bf20c1d2e481ee17dd0b30c25389e2187ae402e85eb50ee9926a8debb0a07b4dd36305bfa02bbdd04310cc655a08b1865f58cbe51f2c666b10c9fffac79729b9c6c281806c880f3fae437f5a9fafccd5cf65986b1af68f34fb12138540a4a0f983a999937ad508ec92131679c3d97ac69c2876f8befdaab76f7dd7083a528076abe805843a5369eb32c7620fb429e70fcbebc1760fad70acdee103db258f626a7e309ab82f75111bac8e53494b174ff33396814b9f4a290bcc6464e5d4aae34eddda8fa3dea496c7ba97f91492d4ff281efc22317519dcefeb33d690f8853d3e5b6de0d130b7408dbb120027d33ba366ba758fc7cd92a56f39ca0694ad4c2201553a5e5b82c6818d071911d6a1c50ea COUNT = 49 -K = 9bc60fd4dac038a3416f94c067b9a9944b202efd2c1c9ee8 -P = d1c5d1a964f0803e2c384c233f9d8835650a5ebc025683cc29b93d124fa698042f8745004796bcaad6f54a2be4bd95ba4789a80896b8c8d9d41efaed2f1df3a85a1dfd2e9bcdce180aa61151285863d1a0527a7cc4c10aa75d7fd98d9c3b490ebf618c3856 -C = 1817cc2a5eae27215f80066f4889eaeac202ff83a87dd171661ffa9f3a3a8a27f6e0d70fd657506090a050fadb5e521a4f3a15b0e33645392477bd4759f46c0fbc69a887d00a6805ba0ef45681470d697637fa1c336fe7a211130f94157e82e7a6774cfabd53e0b3cc9299fbe3c6e238 +K = 4d90b2c6396abd1a4ef3ec71eccf7390581248a4411a4c51 +P = bc5a363fe0df5bb71dd1b7029ec67acfd1277dfda3417194064ee0b4c3f5bebe78d49bbaf0a844620e91eb79f30afc2dd58d41d989d85abe52841ba2366fb6efc846d269c53119442ee1a4546b762a42355700ca04e87e8a273376966d335df94a74c7f6242e09b01d189acb0c157a8fe03dbd893c45861c908fe825bf4ed5ae161db5aedfcb31529f9d9c1b4d8d3742953ab8517003af5e46d7f456c039270ac658f652229d6033cd324c6d65cca62d47a1d6e54db0e9c896dc6432f114f557e2eb1ddf7111995f54696b7a5c0ce385fae27a7d659342bc0be3143fcd23e308fced25d68548643106bbcb3a2568e441fb1b7910b1f799126c448d6d88636647f4529843468aaa60ccd64017414504aeda0ea9b9019dda22c5096cc711fa67cc41fb249784b66b649c76b19275bbaaa2664822c1f7522f6972fc1fbade7e233a2fa2341330296894850c567916331995abe150def9dc851631a6af22ce9fa64ae5327d4b534eb38a243a0e39e4287a41afdc67096d549656fceef9649898087ee5eb5f30ce4d195679e9e78d7569f541d239067d44eb47ed26b5e1fff36562e726cd54a5714f3d12ee0a36c5399cb4bcfdabe551f9b3800b9afc9fa23c213cf67a580c5e468ea1263c43e9fbba1d2f9ccc4c928d527d30f712b519f319c2a3b352058adb8fc3970b2c8a51bc1058872b14347e1873805480f03ab995836b9749 +C = 9ea7592394a1168944b5eb4249af965fa6ab09957985771664d5e40701ccfc53d1b3404413ed86b8c82a9ff6d9943d7559d36c472e957dbb9beea29459183568b2e2c9342a856580fe443fd3a6a973ac32e4e0608345eac87e3462f0474a222cd91e639904fec568b8638fb5faae4a5c8954f23b1535119c10046f3e5458119381a03e4d7573181987e4ec11a58302e1f680cdfc4576121ebcb918f82f606d826012bca9095b2e40917d9d66244c69cbfaa01679cca9e50b083610fbcd50e0d5dfd4db685917310ed4e1a73adf6f3034d13f430166611a1ed85f39d121b506b29e005750fc86b1ba39909931e434259722bf744e2b0f9ebd14153c24a39b40132015ca7695c326a60c81cbf85e68c281bd1051eeb918a4716ada4692f3f98e062637d5e1215062a2a2e3aadc2ed86b93934374866e7a7a5416a9982c9dc0a7c3923a5411c3d3f92b40af7ad5e27b87c537a46ab26e43822a976b2c6c5dca5e61e0f8aa2b8f89929f270f0ab211ef5e4048802a765f1037518565bc5d5fa3e7885deb35d0ba64e82dd5fc284be5dd2a5a7763de587fbe72f075c8b4c530025e1cafb3f7e2f773702f8cf033cca16753b2f222eaa00b35c1c8851175a48fa5c2acd0f78727543ad02b0bfe8330f0f1587fc7eeb5139ad76dadcc1bb855cfebb41d122e3f3d2e89dc2591e54bb810fea9b8facca78a54a6836915a2de14ea52106ab6bef87aefdc83b3 COUNT = 50 -K = 536269638ac887e4ba70b23f9f5eb5ebc2757c1a5e695595 -P = dcc5f13b7566da0b4d0e06c7a9b3bc7f89e294ea700e36e37a55983e0846d5aa4c85cdf954ed826ee852e1189cdf3ec61bc737c50b6bb774f9733a56ffa8b541b11418f984a6c0c147d2ff06bd558cacc3e534134added18b12830f74b48bae6ba3ff57fd8 -C = 093b75413a862ceebf6b81cf2fb6ae5510b24dc79efe7030040183760d2e2ce94b969726b4443f15a4e02540c68f6a3bfc52d33ebe4f94caedc4e73a51f74dc998ed0c08c5511a40e62ced9f52b883d4d2e06eb76ed0ea779dc5fa48c6132268949448586e2e100d68f75d954e1f84eb +K = 8cb4c29933b6e6537e10598fcfde2f390059e9b8d679a57b +P = 2228578995c5f1c6dcba7232968629efea021ed71a65d7a0bf8c1de117adbde4dc94ccf37da15afc71d3a9da72ae48f92580467de979c2dff92b3c073511e7989ada736870496d4906c3a5603fb50c4aaf2b532db93c496b9788def5826d72fc7d4478411971f185c0c31509e468265afc6d411da0078cc51ffa1a95414cf1974d18c5acc859e9f8f5010bfb2fdf7089e027e0c766d4f1e81146408e3552bea67ecee684bd7133c12d425a27f8fba08a47a78a313c2f58e22694a823c7e4b908882bb89d295baf93f07490af79190e80c072d3f353585355a134afb7650fc553cb4f1650083051a59463f16865200a3403010b622a130d5ee6e3f4bac1c4fb73ccfbd9a8d7bc4b72910736b78917e12104a63add28e8b27f03f19ba94a00bf2ea46f32849066012206c727b1b8117cf12a10902909eb74d4a58c9434533a13a565ee52dcae02203a751e8dc669876aafc4589c329be2a6fe9e65b87490b05b64485a85586a0bc98b6649371e6ffc5eef1ceb128e8555c9b9c3f0e1562d26346feace4ee89ecf81309ab815901ab28e5eb98a301a1af69bf6fc91dd2b42a8486fe9dd57ca02c5a05a39753f4676d37070d2a3954ae3c1218d2af4d6cd65941f2a2ef7c550d67833512c09ac34d3109892cc80045f9d2d843fca2c79355b6dbdcd1cf839117dd4171380aea7f82a44b43a00f05d5c7e6d8d48007109eb691546b5 +C = 32ab091a842d84ecf80dce06ac6e5464c7b9a6aac88c7ae8cea31242ebc10bf6ffa3e8b73c52119b9b500ffbaece5fe1d74d022dfe896caaf2a640ba28abb5d5e80d94eccf64b62f72a13ee3c62a48630c4efc73b7db4c576197a5dcf45657b1e3ce64c96794106667821caf1e427145f2eda9551d177189444a22ab7edac119bd1c640bb5f24bba1ee46e6d8c2d23e1c14465cb98dcbe69bd26b44213a02d8c4e0fe2792e4767da7b384cc8baa78e36592c47b555dda7b11cee315a4fb14f68333630edab1da1cea37a32912ef518268b8f515c9db456aa51161f1168432267bc7218aa56af2d7cce1cfafbbb41320b151942eafa2c5ab9ce50a4d7b37574d7e9b1e0b988ecdf474b7286913af63cdb4b995d2c06fa6fe1ee6aab9987eb38246c2b67189d0c713037b88bf2d8e79770ce92dd0952eb201149bfdb1e8a422de6a6ef75ab1504f88a941897e9d4c87005fa8ca8c066a7696c6217d02aeca09e0dd3f2f057e4a5d9c80e06879a98df18c66a3d78ddb70a9f505aedc1bbfbc910e0d587700b4562bc0ed755564f73981a64e26757438d992852bc4beaf3745f531ff21ad0f77e8a45e05ef3272dc0143d1ff1f1e2a13d3d21d30a157410d27ce41e72be044be3ba69a72662c6bfddcee1db058d9e13d32cf3e0e29c348105d8b57149c893800649c8a0fd5e5f5cfc5a9b4a197cc275476957c202867a6078107e08bcf9402dac3ec938 COUNT = 51 -K = b8df78913412bf1b841205dd99150ab6f19761dde0812dd4 -P = 4de5b5e5308f6d7726b40ee969744e1b17004a34018c014bfc78bb4f8d60cbf9fd9503656fe6c717a8b6081acb0f5f23c2b01d9cf911a92b535fb1908120f2efb1f9eb29516565641cfd6b3ca56b476f0ab4effc092d5ad753ea9479eb5e4cd4d10bd67694 -C = 71de9132512217fe6e082e89bd9ace4a54a00822d6c51942c7f43187132f0fd45c4458778a338e0264aeeb36929d3c88c2ea31315b0f38e85909db4e9dcebb5de1b53bdda87019741bbb91423e4a05055f245289f995d596bf050b002e8e6e5f8244102d569a2dd3e7433806e18f40f2 +K = 4f711c649b18078f20952178e635406ad6f1d22a2836dd46 +P = 83867db0eab379bebb7b851bdeebd3fbb49ca34d6eebf9639af9fbf1871b9b4d6eb50f6e7eaadb04b4dd498385f78f9f340fa7e6c4ff083a13c5c6e3c6352d8a465116e7d733a35b9e3f267e5de1d6f2a661d49f58da3fed515304af2116237a57e7f5b61fb6d68d2e3590fbce391d727b9781565c11e4779826e3c8cfd0b8c6164e8c1eb51efe1522bfb65e0bae3efe0f279ede3936dab364de8aa2e8a97d1425c93280b799397095956986399e222aa728125e7d339d0b24d44b0823a054fa48c64c35aad5fd0d3ff7e6bcb54be2821aeb9f97b8c8c11c2763d13b3535070a65a833f462ae129cbe84321cd23a1ffa5df7ad030119339168c33d451385a8885a733e863740a39b49f60e8bd711754256aff8cbd489d4bff0d5c8da7efc378650072149e784041ae499a8744e9e7148e0e52971eb68940cbbe3997e575de64b6afc709fddc5ba981ada773dec57bdf8b0dc75686e81bcdbf20c16ce7482f383fa44c49f8b13d0aa6d2f41e272bc5320ae5abd735bc60744543458ec9a5beb9d78daba15ca47eeb923f89bf0bc21860c24320ee4ed7b669ef3aa1a595a54b994fa3cceef58722d662c8e888b78780d2d16c39583ced03f58480b22a525363db381a7079aa737332bf843f89da56fb86c68bd701df9d4adb784c6c2c3580b0c909434bab1986e2ab79dc4bb0582999846baa6bf6e7886a2f64e69c09f3bbf53b2 +C = 74424341b9d3246ebf181d4b8ac9837cbe6531c76f166547ab7571dbb42f4b0e778a246ad9206c30a102a916179faa05f70d3a0703056303724801ec98209ff518584dd3da74fbd7e246cd93b076dc408f9c28111c04308093fb4418e920342e096a204e4f0cd9ec0cf0b52bbad791da6bd63ae74f34a9c4f59444da88b160860bda73952dc65f8d97204f58243b27bbb01071e2ad4252f0081fcc1ca8bbe95da9ddb49a9e7b8aa76caa211ad391e559e2994bfdba367254cd859c6624c3f4151ede0f33fe036b585a8dfcf27f146847eed09b4d85c1a71cb8e9388e1c247aa5fa20e035615085aa8c10654b4bcedaa404801b4301fbf337a0439f2f6576a7707f0a712d8165b04a389f40271f61ad2c2485fac7eebded62d44511a333a6e7c3fe2c0f6b93bc23abf9eeebe76b71f172e8b474c0997ee2e348c964ca79cb59c88fc280b9cf7fa43bd2ccc530599c4fd93931fdc51c001804e666e8494c328d8d7d52783559d7eabe6645183ec021a98f463d02f8b7dd9c9a9702f448754994ee2686aac1178dbe7514a76051f5865c242a84793b4a16199b0cc065191e2e25c4fa51a3d8a7ec1b49bebb00d7be70294709f36e4e0a62e8a8e4b6008751fb3f977a35b636562c1dcdbc4c15dacb8d51b081e75a125984d90744bd3fab5a994521ad383f638c9db75b62aebd73cc28909ff4416d7b18ac946add957c2cb34365cb30cc59bba8608b75 COUNT = 52 -K = 5af91820f47b76d68e6f43907058b1e853a102618ed5250b -P = f9f7242c24514aade6fca5d48061e9ea18cfe464b5e29f258eed2fcea6feb0d023c7f83f9817f77a061711c24138f606feb0f0cad6bf0109a9502f78229eebe37220846018258ffeef199ce1baa8e830f72652bce7cba101bd2a9ba5c94e5b003dab75d48b -C = 3abf3a9337562f81887b872163be41975bf65ec8839dac06ca28773b9ea0bb54bf1936a7aec4ff798ca77caa5e31f710ec0a73db82b42002da25ff865f7c4768bcbd7689bbad87cd947c4dd9bcc62cd41983346b8196ed642983aa60a0a76d45f9d4c65bee42d8c63e0dbe4905afc448 +K = fc0855d474f16cfec3699a4c7bece3f9abdde6e829dfc679 +P = a4ffd65e5f4fa2a00738e3b1178832f36366ea7757c839300cde6345165a1292e3fe0c730999cfc952eb2256601d44a8af71719f73180fdbfb00bd9f3c721cce977aa1cc177fb42e2bf3f253f2302f28e78fa8a4b18e65f5f20ca109f8d729ceafc2ee79a8e3199b156e16e5e5d8faeb7157a048bd765c896963551443a81d0726d9f4273752304c8d0d3446b2d596e06fbca3f91ee0bf18790dad9142db9e0e61abbcb4ce653748f6132f0c0e898ce856407e5c3a3d609d7d644f67664eb0825459589efb75290897d8ce26e42427f73ac6487655c38e6e2fe144a7401ac1a809ca18a8f31833c69ba6469a3070349e4be6087419673b71b43716c13503d10f6d474daf7f1e236b03ff0637f06bc81beb8a5a4b1a67e606a50998335a403e5aacf12b1bc2e5735889dbd5d883ef8695c0f7afda91b5fc56ebeff15dbd7790e199e444e73d9991b4fbd069fd00ca33f6523add6da3e365c51b8b0bb26de8f03f7cb2ff02c5946a68af0cbdd4f077c673c0185c7f3d0e24dd6d89ec724d7d34e6c88ada3ba3700c3dafd9e0bf51a16cd720c89f076208c6ce1ab7536e8b3e50334881e7c7976e01aa4dce0d694afc870aa8aad92ce5d11a3b79818e97b5b6acc282c0c4a27611c223ff0c271ba7c6166af8f757c44869ad41db8305b2ef6073f868bc2848532b6aaca826a4778ce3672215cb129b2fe2c957203c6dbd7051b0aa +C = 727c31b1c74e4a95250e86acc0b3db82cfcc06636c2f289edc52a00f1d07d792b298d94a9a1c7e0eac6e3e04975fcd6ded0a2f8392ed692c43623a14bdf13bc78ce44a91c11172aa0372137648827f53bcc0ed62da1aa335859df5c97ebe5741203428419cfbed4ff6b26dc61135b2cfe9991f0a03aa4756bc8874b12a2df27aba9256723f7a49339b8be24c40002cf0b18f56ade3576d82d3cd6a48ff5f5d201508107449d51d3f068a2c574d4a498d4def9800a8b1d0a8c4aa0ff38bab3959f577aa4ff0aebe842d75dfe7f153768cfb98a8b5210d376c9b85bc2ebe98f467fa9e2aea15c73a352b845d70709eb67fb2be77e459bbf6f56cda06f7b8211db322fac09c5d0035f445032ee79197e2ba8d19ef86fb2b75455bf1a6501ac5012341c07dbc0832911249b8c08395ab58e73eb51991af9f6a1d66fecefe8a05dd2848131c37e7c696228aa6b2c97b41fb7c886c8a4457f446a9e67e4cf98ef53aad09cc2a704fb6b014c45107e6fb7ebe796b15ecafd8d84ee18cca57c46e9a9d93bac9f1813980c7f52e8def3bb7f6c9e263e48dda3e98db445603c49a9f8c87f5da90154d6c5a3ba81da95c226de71b0bf2cb70de5c097b19c0a48b0a6393f89a594d4e8a9e517ad1b45b0e7a184697186337f2fba8734edd4c8675cbba590d2bc52774063780a70a2c04e476cc751bfd39c728f6efe26586c889e3e60caa85ccf6dd8869ed9cc469 COUNT = 53 -K = 5c305f3a48f74d7ecfdad1aa7d6c4f3bea7636b83809e619 -P = 7fb2ea894aca47b25318d819c2984a01d6fee45c2c071f49c9d3b39ed95f963657308eb6f501cfedfec7c975d54ffd7e8761ee5f7acead2405a3cda72860dd22b402c8e84103e8c8b1a098c55c177f36b8461c4eca444208a0707ec0182836708446cdb219 -C = b82cdf294c46cd991c5011664b5ccc7e8bb73774f85cb2607d00a052d2ca96779d6d1cf1e09b881001980641c68829ab19b9aecbe00dfd86ca4a8d7c9efbc4042a356c14ca0cd5d500fbbd8b89912bd888f00a1bae582155890f9bc0f91f6ec38b9ad72251e647bf363e97b69ae2c6c9 +K = 6796bd902c4159ae5f9bc57f034027e21d265c2ecf095486 +P = b05df6f1bc8870ba82c0c495148e9c8597f60412e46253114b617299fec62a666dc115ff14d30f48d25285b1bd40d2c5ca8d1b1a054cb59923674f6ec7058025e7e157b6a7a3c285bc3f32f410af06110155c2bb4222533d25b3098245f04af59f9741d0884cef49d2f5ac7d30d6957fda897c71cbbf6f72c2951489b902caae78d95f49374c4de9bee220d70c0612e1e15b6f5677ce149285c1c6917fdd27c6b0170006d2ee4f9de13831c201176b3a12ed51f1ac7037464317b00b5742e830b973cd9b3fa13e4776c1f973c87811ec0924a1637d9b89865ac4489b9397bd498f29a4589d87212c25291e92318cf7107dacd7b2e5e0298245457387e708770858ea136f3abd875fcf56089d37df01c9f26fbcd8336b61ac3812b969837d370a1a7e2216bd5876875e28dd43f9759b882830536a259f84e11f5cdda35386f3a69b50b2d9f2524f8db297bd434b07aeed93635a313fd930bdfb7c285a158720593208477c271a12b12694bb5d8f0ab9581d6c4e30dc08b478372d19fc5a9da00334b116816f6501a4f79450395c5d8176d3836a1d533321f7b7f832b68f5a4412a088ab71e48c920ed8501c0b4b159ff74768989db62ee94da756a2ae0672fac64c1a81e4448f89935d7cc30fbabfd61fa2b880daf75e797ca164b3b7eec514db483e9cd0d108326c6c39ce6766d513dcea27b1b571eaae222721b3b9491875b7 +C = def3c2f79b8d7b67d463ae35a3d002679bba44a79cb2354988b443ce51b127a0ee618a26e67734ee31c668597f52ef3042523fb1425c2ea7e3b4828ec9d069fb97cc75f122b28d9f4454fc2226c39cc32bb46c266e6cecbc9358a401b7759ee264bfbdd931e4a4a40e494e24acd278f76bd477656e4f9e3e7c8070422ed423d8484f16dc3b28d2a4dbe9c9e63b5b78367db151412933473ca85e8a358a1b586206812e5f886c2a7963d32657b56a2530c800deea91e2d7b73b06c2a98720670bf6c5d995bdd75990c0eedecf4b1c114e4c442dcf7ac2fefccc90c9d80b7c479c58c2d26b3e629ce70cda8861e9373ddf1db8fd06c55062485aaab618a762d2225c52e3cb1495899507f2e39641942875ec713c4459164f2503948fab4809f6948387555372ac927e44a8ccf3ee4be3dec91cc369e228eb000757ece3cfb38e470c96a24ade566316ea795890df92ca824f3f6f910f1a7fcaba6a6af3d932ec62d7821018b99851b893aa35fb20a1702f72b2453d232560f36c67d7d4096889e19bb8f9e1077e42207206715f7915e4287dd72708c290c0b4e5a48441a391bf519d327cb46934fad833a4d09f8cba2d7508b06adcf8b1843702aed744ae21aa4037c00b2a82cb795c17f9e46897ec89847a5aded2de0e5bac4b2ab6489be46004ca53ac1f0b958c9968b58a7900df6981f8fd16f344894a1b1bd1d64ac8c08b3add599b4a1af2a8aa COUNT = 54 -K = 0db5fdb9d0057224d6f6e32a4dfeaf1ccd1c4db6fea3384a -P = f8ae56fcef1e22305a6479c47c2150bebb9db4c978e46886dd798bafcfef2b05b1d158c3bbbe364d86f8fd37a2d43fe15d0eba319a0b02653ee4edec9eb19440bd922cbd8e86803abbd94813a828dd668fe2d98912e3db3dead80beb74e1cea1027dfcd141 -C = 9f1c7609d6362228592adee84d030fcd73708bbaddd9481c7032f033d0a4cce8325ae9e7a7eabbcb76f701b735edd780e83313318b32baa4c34059cec5d759de6f97d4fda142d40fb96bfa232efc64d85280eb76da52f083bd3d8d91667a15af0db89252cf2632286ed82327a0218235 +K = 44033a6dd0df6f920234b5521368ac295815aabb780a102f +P = 17aaed314481f3e4bcc7de41a52909848fd8ad46628943293f60b49d9d636fdf09f491092748abc8dfe70b962afe48a034b5d56d37d6abaf5d7e57d2cb4c4165e6becaf804da87f726550b74ca6f73af7cf3eb94c4f9a0af099e744a12e9eff0a05924773ae02d66d6cae5ba18ab85ce18d1244b6ee7f3087decc13636629d1e193e0c466fef98da7519cf7d46b2a946232f29c381f2dcc11b4ca4bf869234c88fc5dd1f09591353e30baf084394aeadf7de244f398beea94c96e8d66d320f03efe1b4cd9831180c5326b6828fdf205102d44d547f3760f9566cae16e11fa06791e2a714e4d0793c6b8bdffc1696d376195ed7191d99c33ce75ef87e8bb3959885a01b90063c59402387c1f74494991604fa1f05993a8576c53a5d00308c22df6d9ea9c91037d251b2f53b5780fc88d96fbd4e4a228cdf90c16dcf7991bf7ebee280103c1ef59d504fc84ed0072a1aa47ce265dfaa483f1566e6e3e54469f451c19114651ed60fb1b2eb664f90ef9a2c9b090f422b1ed51b3ebf5de8b7cc7ac710c9942f0aefa7a788e331c4bf04c22f2c02e8d5cbeef398290f5fd9d1f07c990355805955b7c216002283716371505ddfbc950e07bcb1befe70c473d16a04359824e1e63d99a6c97a7e00f77c339f54369b16d9bc700c05ceeb8c0f612714e17b4c484a5b7adb9a4ce6cd336656de2ad3158cdae5ef0ae2babac851c575c880 +C = 6e28fb3578a7c43b05457cf9a7fb14e21f9fe5e54030b348fed6aceeadba7803ae4293fee5aa3a734286ff244cf559c67322437707e6b2ad37baf7864747418ad801f9217936e7d560d05f53638c143fc9fccdc0b3725fc3ca4f461a8a5800621627c7fbc2e7c275e930735e6c65818272e5a98c315a858e1b2e2c28a7e294d0a36d250a67913c52f578d667a45c36b799ae0ce64eaafc692d8210e9d82d0adbc63359dc5f88432914c9a57a2c6bf048976c046c125d97f19ba54f6541bda31ebcc81ead5458ffcbe91d8316444d29e21234051290fbf200f6e9b02f167769ff4c51b6c42df91ed6114fda83dd959976cd33e4533f34824dd4c5066cc6ad61da665bc146322e442d34fb7bda0b2bf6df2290209f85d3e2e41c9228c4e4b33559823c7e886fd2b6f12733eb7d218d4582a16e0e6c4b78ab19b448c1fdd15a335f46d1c10188a6b4046e8bd45d50a6d70841ebf41e542edf88123d8598cf6920d03d7f30de9df3c4ba0fc8006939f0e6675a14ed4557934649b9dae4419363bf79861b4b34eb438fa5d4bda36229e417bb05d3a2f4fd025ac7551d3eb9a81d9aa1292800378979334867bb2363396cfd60ac06500a06ab5ea36e813d6847ca09b904e9632cdcbea6c78a128d54ee60ab9fe80bbc4bbb372bdba444aacd2c40ac9effa93980de49ba2fead27c77b55923bd06832b7dc7d906c4a216e9b4a798865d60fccc0808840571 COUNT = 55 -K = 5270bb9d7d54024dadc666f2f8e63f789f7fe148887b16b0 -P = 25c7efd1489001db66599a59d16d9585d1f4a823ad15c346cc2cf707b7e0e97f214efc247b22d4e3b5c4d740bf655c209b2dd790eda6ccffe0b5626b8cb1fc344aa031743b1fb0c41e14d617560518aadd3c54406cb67067cc5c87ab558ff7b73084f699ee -C = 89f85a575f856441b7e35bbe7358fe5a2216a4d03296e6430e33325d5e7e3053fe923d57c01a16660140f03e09b16084feac0ab68ca29ff1311c5f4f56a5680fcbb68667b44d11d86cb31bc022f585ba93e0ca0f026074f88284f13147ace4fec34500c57331a905fb89ff542c45395c +K = bbab666aeef51fa2476da0b9ba1ade0571928cd766f12abe +P = 9d009aaa75cb8edac2fc086913bfcbdf4748703c2f1a2f70e06f3eb1b7f929a95f363b594c7928e084e0c298729e0cddafe8982989d188e850b2d709bba6f6d1b1988478e55e36a4a3d95d6e80b1702aa8291f92d21ac83929d191a671a0aa0ac1f74493c1b470608ee04baf2b7766afeac99e7d449a3b7280047ae7c41cf4918fe88802bc2353f4c612d167f56aaa667f10f5e42bb8097fc865761365d572992c38b6961d9079d76d6bd24713a6ce27d11daa11e83e7368fe5df2b233bd8907b617cea458864b1b3a09678819dcdf560b1f158055fa641fa8a62f0ae091594ff5d895bb31631720c161e28d4edb0c8902761987621e66fe5c80210ff9e870c9d14520cbf4272cc6f9d7bc3f3cd321a1b137cb314e865f9e779cdd68e3bbee618639269991ae1d5e6aab233a2b534509b27501f1f73ce7f27cc83bc7753c7c38fe6436e1d40c621d37a43dbf498b8abf91bd0941cd88d78d4568af72cfa593589d6a4a5c04e6bc3a8ae09657ff8b3b34c18b09743d1f10f5e5f7db0c301b867285c69d7bb1f6e1abd1bf4a8d57a678a7bacfc358bdcaa2529f5e854131f2ad36a691611c20eb82218bed3f2b5dd50e9f7df70d689fc74895784e107b21d05411b996e78858d006c1ddd5f85e41c8eeda9cffae34faa05561ba11b8bdcde8557d2a25ac5c80eac6438dab38c5b23574e10d608beed35a28a2039b6c71335a8dd6 +C = aaf08653cdc27a93cba57f2d085c3d26ef818891ebfd6e1f7ac475bf26d6019a9d68c63bbfff8c830e2c8bd1e69bbc4560499859b31f26f4f651f4d8f2bc3e0f9ec585ab5e670f2d05ae7d081f6ff6fcc6ced106865852ee4109dcab06f5dcdc962fae5dcfccd6e6d0d110bb1233897460228d25acf1627e0b2a70cf41918383ff290dd3483ff990d6ec1e0b3386ce4fb35dc21ba8b8a5519a89587f92ed72f639b2bde5690d7dc56d697e179343b84cdbc763a4467d9d303d1c507ba24a54c03328b5972c0b5ec31881af704b4c201a2bef8dc070c2add0271daeba9d80e52472da82fde8de43a228d55ad068bf94e6333e9f82a2baeec91d9812b5cca2199cb1bf38efdedba56a13f1fc79216ab355cda7358365ddd1fa8682aa7ea305e58fded60487863ef49ee780a05566d21488b94ab7a2f61a53434552cc3795b19b986796ea67827ba2b37d5f611f9ecab1b4e867c115ce34ea0e1c22c7bb79a2c566a59b2d5f77a96b324f426e6a04b04a45ad4b4ce1601f33bfd775ab844ca8b269a3926d5257daad88a3349382d06b5d21841f3164052e941ecd74491c891add30acb502d15b7254181a9e28fe97487ebddb7a6b3f117bb126611a139d93065203800661a43deb43c2fec9fdb0a28da032d42007a38908a22d3ff7f3d3c1438c9c59908c896470285b64b0ced3acf68c5cf211d19324b4ad962979b243068051baf26e00ec7c226b23 COUNT = 56 -K = d40d18d3ce9dc05378aeac28f76eece8ebf48f18d2413918 -P = 4434857a6580cb3bb2610f9b4be35a26112042ae98f8f5caf9be3410018245487a9173a8e5ecbab35b1ec1be663eca092a28dba1ad1db53e0aa861c9f2fefa901a1fbca159a693affc7db32e5f1e87daf05a5c7c4e3fca78200edf98ca3f02471d63574dfd -C = 06e0678cd96eccf9a6b8f7c805b507cee3b8f2fb3eca51b840ea2fe73b641cd8552a1b7a75f55e8747f0bda92c082c81775be6983985e84c83ac278cf81221c152e9794fb7f0649e8f7902622d6e9783c24d60b4dbb3d2c46c52dd9e30a59f58b5f0f10ecfa05c30124ae2876c57a77d +K = 5e63d92866d3f9d50abd7d4e7241139cda69a380f9ac17bc +P = 100741d408567c427dcd96549eb5d85b9845b1145069586ca1727330e8f75493323877826b4f1dca24250328138659dfc26faa50784cf9c47587af8883788dd24c3db46f33fbbcaa725799f3faacde8939fcb50e67897e984ef2b5343f3eef61875aa13d1f43d3bffdaca5e9f2192baea0c31175368ed430199407915c8d56e00b3ce44f4fe6019481c8e199fb967d3a93dca61c02a828062fd0ee01c91ec6d7d81bfd6889f389f6428dd95e1dc30863426936d3bfd2b7d838eb6b5e21db44f206748501b7ddcf162ac7cea1ece3b8b9e80a91e6e865a412ba6e3ba71f4b5e740bf84c549ed03e378919dc60aeeced432bddaa3745344caca226ecc613653bb2383250c080605b9c4c04f5273aa9b9a0ff1f9aac3f8bc1d351f87fb0a770e213e433f9daaeadf0ec3af3d6679594868649bb69df0f032258804e423834b01d2b0a4f1a1f47211db436a05da5120534aac6e3b9644fb55514d87993febbcdc6182e5fffc70206ac549be61459dc1466ca939d4f6da52a2dea4f7eb30da64f13b40867ef531362aeca1ca35dbdc952db1f1ebd6a16cbfe83fb923a477e939d03cba89ac6ccb3e7a1543e799461f99cbf06537a2128538e540d5dceb1329c051295c2bcac70c06c3f2b00bb01b49569bec02c5cc4c7bcccd61ccc5125af3d9bd9f31c8a5a42870786ec4be477f659515d6419e9e88de336c2f78e7a56fcba60c5f5 +C = 2fef939a1041ca2ce717d5b81760680a2d4dd4d08a2e8e47fc3185922b1dd066f9acc7ee354b314c3c6ca0e7990ac02f6e017165e8c03ec49dca79b97f963c58812d4d0f9f20741da8880c2ff3d5b5024f690bf7fd8f71fc362e854e666a2b49b07de702eba5d7c533450fa48f1a840a7e6dd2ebc1a061fc57fc95caa6e6eaee3b267dd3af4bc730bfce20e0b517873cf03132306e4165fc882ae6a0972ff4d13956d707fdaeec4aeb70639f5b81ff3101fc3b0106d2c700da5a47abcb40cf0addd26ec18158e62e9f111e22f0a833ec48744e4d180b6437640539c428e1f9e9d5e8879c46eb7f3f73a50a8882f77b46d05af58ec6688559d36ba86ec5c009ecd043e586d82f5d004ab3a7a2a9b72bd3b748a2f947e6d9740ccf352594c68b80b27311c39d4da6ec187ef21746f5fef9fe6f8b2a5c4df8981bd91ba10abe2a2365f0bf9684bea4d1c589896ac61870ca4df3d1c50aba6edc2c1a7d397ead934decc83a02e2d7d858ac8b08d5431363d1fc96648d981052b86e12ca0b040e0f407200a1b033cec2b51d2fd3b322beb950e484e425488dbeed79c84c22e0aaa053f9870c5736363d53376efefd468c162a32ddf74804fdcb2ce529e46543121af04486e1258264ce90d1af557bff3e97d07b0b29037dbec428080800e4ddab622b7bba8ef7c102f0550a0e4e880eaf43a69ca4f498dbfe1256014216b74758ee9514a080bda0908a65 COUNT = 57 -K = 0f3efdbd961df6b6bc31503345f1fe12dd01f6bf566ac063 -P = 5721532ce87a946928ddf6aa5549df9e7dac6032c89f80d26653d4b5beb0afb5249aeba45a3a6c7f30b4b051272b6f2906a311bba6de95bea296198d912a085ba2488e21dcc9626101fc6a67232c049a7c70a1d64cd8e9335e56587ffaeea8703c57335302 -C = 3b72964540a22558fe37d058fa016ba12baafe69349d8237af9172da3cbc99b0b25a26420dd055f8702658556e95eea8f1c9d8ee15e34f22f1575a0d213a2acd2386bd2212665a9b56e08186fca9867d897e8e555f5acfc048d193221c166023d0878f15bfa01cf912a4a8c3392e4157 +K = ec0af3baf2c8e41176c514531b0305366362282219bbca3f +P = 76cc618173734dafc714a9f11829bf4d1fd141e7dadf95d500820e824ed627b49ac2ba0da45790bd318bb22b9a89d137aa9098440086aa8996b9ac68a38c1a1d0944ce331f4b4d75f06e37948ff7ab020d9d33d8561b646c49ff76e37c6fe9649b5d9590f9681edd4d78da785c6ab915aad89fe1663ff1fa444ce97bbf860cef4be99ea2d40d9b740b269989470e4e2c6ef4fbc8a3ee71405c1e5ca82757678a4effc6ea6bf932de652929663cfadb27b05dd94d794bc33c9f021e72798a1e53bcb742e551b8565e33c9208d4bc13a46b3ee0beb8e12cc18fcbc2c7fa88f241a83460d51ae0103b858250bf7a4302e70e7abd59d518a2c07bec1ad917836a2c83f58ef0a5f021d2884bb6a662aeb36d20a507a518a587ebd3d1a7ff7bd29ac91715854aaad8dd01169bcd1a06f081f432dd8c88124581a4ec8b02c12ac860507cccf720300cabe1f9348eff781e8781b0146bccd337b767a741b93adcfd362e643a041ab5faa4d87b0d9478b6ad487102648e53f7603b6bfc755df49379d19391679951e3613158a44f9b6290e4bb3637dfd357859037f86b0611672385e854c34c7df49d6cc916acd8bb00d1088655b5b86822a1848d709010f1ab9d6f80a0685d95c6193b4ee65c9e2007d3435e6198576634f0f579d5b525d76e9d1f3f3fac9e88444c7d040a6d959bfcec5e4f8fdde4cc3ddbb27246c16f6e85fe70238d8 +C = 5e01d25e33f5d68a947138c7e94642afadaf8e3bb878522253b4bb87657cd42e6a5cf3d6a5b10bdbe87ec226a4c718b4df51166ec1b9fc5cbc137accf58c59d691c298d7e42d64be7a7eee2d8553da0f78ab98f498774bc7f77f9f6ee4eae6ca8b81ab496548722adf3a5cc3a4a2a176635072b492d6319d3403fdcdc3717a5a7a57a535198d56f6f33595b0194468f85213e066d128f0d141fd3725115c4a6085847fccfe51d53267ab809565da379e76e2baa17c431b1f017698ffaca85f0fe7dd2dd89257b3c00b923712a8473362545156e9838dabe973e63022555ca3c67e9dd928a033b95e581cbe72f1d64d741c422811e59c26cdbcfc0ebad2106369b64562d6aaa1807eebe5d8d43e428aa831b518646dfb92cfc92c8562cc76f0f98bf38ee5154f982b11a866fc6c84d3d974dfa7ef7f035bd5af64227059cdb313aafc043126f30b07ef5ce9bb8cd3308a99244a7d8578ee91be2efc04f8514d02397d7c7d478a0a1350498d38b61d859e7649d56d078e8d5cee66761e2930266e079798297604596d51d42e5e19eb98dea92214544c8207609d9ca3aca67d5ed42df1ebb8298743fe5ecf58016abcb2bb78a3db6087000c2275506e72f6bda0d1d5fe367096f1b07b222dc6206e97496610132e1134a56119dfd3330981c270b32b29abb50be3f18a46502069d25a297eb9c16f346d8e9208e364495f33a5e42eb1b7ee53f477f7a1 COUNT = 58 -K = 1d5e13819bcbc837f26b1667f798c097f9de796a97cfd838 -P = 793d2dc0e4f909a7ea536ea77c5c1ef43ec2ce52b1238352e02e9eb0480ecfb7652e6f00389cee3fffae580aeb7f7637a90e4be5177886a37c9da0f967c5f60d089b6ef9a0c794e93e8173b96d15c4a7eeb5e60303a8f97046d19c59c46a01ea14161568d0 -C = 123ffd25bab389160c147c81c207020fb5636415cc2431eb96f252b2137ea6c81adcfc92ec19593b5ddb7cb35579f86cbb60ca58090cb34c944e2ce77ad9afca8d188334cd5354f5cc232a555578148c9bb87ef802eed39644dbaad907b3a589c6ca88691c920736b5fc4267fd66f83e +K = 60ccb08556902f0cb97d523d92f3d6f0331cf8f61f5a80a3 +P = ffce027c59e2426b51619a825e8fc21f540e80b713227bbd1c1748135465f3dc90422b65753a5c0ba7a3df935e614de8bee6a3a247e846b775a45981c8079623c6fa1f8310f3414da626fdfe1ee87849e6e6bd09f3249993b8d6f6b443a8f86e77664fa711a550701c284290a9699841df7d2e82ce689634242d04cff3b9379554010ebc164ea758fa64ce65dfe2ecdd0c4798c1993f7a6209f0f6078e2fa9b81044df6707c7b30c82c243b2ca77ea1f841debadaee438cc194c660941b5c300eae9efb866eb1880a9df4b0d07f7c9ae96f9ad5e45e6b91738a6885bde74237dcc0dc5246a8e5e8d40b7f87dd9a6a0063e36c6ae48be6ed9dd6b8066c8728496cd02fcb20e363266e227bea5f61ed6728267755791c4776b40cb57a39a6c77e2446e73be6461ee450230768042a0863a21b2fb8da70691ecf1877efffe33b1b48cab2db37db2f3904f843beef916af4993c9b127e502bba4b21fa494a4666a7c37de29ade21949faac1ee6436182d78fab32ea9f89aec19d6c94e405682018c751224c1122cbc2ccd5908cfb916ffebd17d2d1fb59d88a2b86d571776d9252673ad9ceb523536e02b288942e4a8698c03c6f03bfe394d0b96c66c21716080318e5814e85c7350d82e456a653507eba1d71c29d182e7ff9ea91746989eaa2c7e76d09deb6cd8f072fa13b39ea594584aaaab99f9e6f0449cb67c9cf3dd32484d1 +C = 8a6eed0cb14b86eb2f2fe9858247605908e35bfc8e668c6301ce2d381ab312c311ef95a97fb56584c170ee746739e91813469884458a770eb2ab585c7d618f03c691bf8cb89d9816ea6150b82651b0a3bc0592c0245cbdd68203ab2fdf824adefcc75146850d8fa6ae8606bc461bf0ad3e9779f4c95aeb4b69c2ab6f09b1514a4d4cf3c844c855c1fb3435a36924df1ee8e92f620ce25ae08f097d72d05c858b4166323a1d08d588a06722a7861e7ce7ed5be03b4f11bcedfe122ba65cf740182baf5526a8256307e5aaad90595f631e64d7c9a72815e3e2a8237257df79d82d0cdfcf114ec64605e86d7b76351802f9c8e9bd591adc13fd4665c528cb20d694fcfa7f823633612927e57d3336897120184d5f5f91dc6f7754b5fc44ecac22b9f8f6f3fcb7d659e6f3fe665f080ded656bd2b69f0802437f5c046e0757c99a6101219bce9e9ce742d4dffc0832e985c06eba13e59e0d6a2011e8cb077a4628f1de185ff18566488309570097818488c613af87f53b5d172fdad4e7d21a99c761982624b6ffd1a352ea84081bc01af8e6d6e62f2f13051ae88e4db63b2bc9c903c87366007597780554c9471a630b9e7e3831cb767c3b8a87a7c4001996bce7e9a094d639a1f0ca8245ca67c3769c27a5fff24d2d77419b87b6c7f118aca3221617d491f24db1ded6c5c8929c41f0daa29072824b34c40e8639279d32a71457473612acdb1908cc0a COUNT = 59 -K = 6d85a3e1c567db95da0a299271abe14fb2b34d67358d90ee -P = b55eab8522b779426f28a84acb792f2d3715f5342e19169852094f2470b8ea985fee7428ba276573b8916d9a5c01619764db996f3b75c01e1d3c14642ae9e892a843e8a7f5f0f1de70440f2ea434f1c94c45bdf9475f6a2fc8823221740287826f1f1b941b -C = f9a4238261505a6e2f98c8eaa6ad403503b1f2f9bebedf6c926cfa0a9f06f50be082a4773691651146b5a4bcea0d1dde740dc03e57b6707791078d918e27be3f891dec7954b4a0b29c2ea6bf3a8455049f033e70fcdc71af953ff503c94d5fe049c1e879dbe4f7573f296f8118c369b9 +K = 1e9bf88a42d2ee65a03c35353bc6768e327a9f1441631e62 +P = bc48df2aa3c12c406d2d54f8c1a0f160833d240c09a44f6fe3f0988b711b4b5cf74387b5fe0bfac468491ddf705ff4ed658cc99ab7ed6e0f3586e5566c17ccd5b8136da9faea18a4a1dca929b1ba768675203fdf9577098fa8f1a44615c0538a049ea862167f6b298aad040316f5269931225cc110e65f40f69c535ce0fc2aa0bc6467ed5984232be7e280ddc239c4c7c227df85371bc21bb69daf7ec052c0910de3541180565d0331b254ed70e2802db7e27fbf2c20c367afcf55655053a98c9cb9a96ef08febdb00a7bda8cde4278381c99c94f85186e04dd462f2cc611085498f07b43f5d5e3944788902ebe06496533842631d7972d3f91cf185e4075e516d4c179db9a3da24e7327f0ddd0c4f01f233d9ef47365725547c8820516a570fd9a19e38f023acc039f65b8a99aed97568152f3bbe311bad11c13edef0d7cd4e1d9f0a2f328e164849142815ecf5eff8bdf52e595fc6783fbf980b3b1f79ce07bd285b511d0e72386e0d92be47f43a7a54670e366185b84c4bf9400f7f76d889e9dee2c8923b3a246e8e8c3b064f6618f97d3b54d3c35176db0aff4bd11a8ec1be6ab3aa21183ef4cb99f875f1a21d8bfd61b9c38ea593693a6b9a409aa2309df216a7a921366b1f03b4d2ee41ef0daa4d500479e4490a8e3e78966f0ef5f5ef26ed2551307dbd97729ad4a4ecd748acda74ee901e80e60438832b9b6574e775 +C = cef627e79f666eb530395716716012952f2265f1a795c3a67810f29c6186eccaac0d18b1f1cb36a2ddc70278a18b7bb1bdf7290214ae7727a46afc935c90e370bc737e541637012e0dc8aabc10b19962b5f8f3616f4282aeba090227d5377ac778c1391e53cc50929b0675d9443671861599b8edae6d3c75b75184ee6c2bb345a723ada94619d2248fd0f281c30b00e7b45b9c8bcf10cd1118ea864cc2d11bcc63a47cda2fd93b1480b98290545b523094eab4fadee507a84da90f68b8e21d02cd06a49b1ef32cbf0c98a1ee157f8b40e85a5b4b02876796d41da8784d9be94e4853e68f0f48a41968a204db396194935e1738e9fe80953daae6653ce4b787bcbafd8aeb13d7671491835704c1992eb629fe03adc652634dd212e626a3cb05eca5ba48034bee93d88a53c065c67dae48eb47a54e6e430b2e447a100d27a71e081eb09e980038ebc25b4e726e626a13ea4188b40d5fbf8e7cb843f02287a3c1a29965c8b448c8e6f29315cd97d8d42a3cc8a66e52740cb6d5ec260b9d97983fec288138af3c2d7ad2562469f7ff4f0f3c12b1416a095cca700ebefa394f3fc729d25a6b0103a7bcf32b4e84b96b781186922aeddbc02ae05e4e700ccece33c9edfb99e453545f41324472a528adf08a7064203600c4e00888eb068e8dedc66e57499c8d4612fc05aee021f1216f123ff143df9217003d0341b06c990fd6893d346c0e5b893a4f0689 COUNT = 60 -K = ae255baddd8847bc6611945ef6be8ff7145fda704ee4a0a0 -P = 1fc5738cd1d2fa90b88a050e48dd441275a7207e7a9c16d0cd3735e242a1e7167bd60290629410f0c5ce286f36c15bb0876e5aedfea5dee1629e815c30d9e1e5cd63fe18dffc31df4a627f9516079834f8166357e1283406388f6818de27bbe9fffed26dbd -C = 5f4ea6455d45ab65e2ba48d6b65994d404b5d93ff626207db6e7692ec7ca5a4f052fa7af12c1426034062efd1463772d0925b94357dd62eae0b73aeee52b8069738d7efe604d3ce02afc3089f9bf5114cffeafff9ab6a97face44853aaac529b8c879e836c4ea71368acca2d111b88bf +K = 194a5d06ee7cb20fe0e20d9df162eb1361bf44b256506df1 +P = e4211d84f6411b6103ac4e8edd3ba7f7134b7686a6f93b4a72880d09bb355f51fb240c5d2cc98e23f64ac6b5732fe221e738f505162123f1902ce854021bb1a4c7b7631b2eae1465e67f895155020eddc0ec308f385ca9eea6ad7748c94b6a560efaf86796af0db1cac924ebdcb189ad84c1eac479a9d1bfff059911cbd5497bf602592b86642a865fe314284cd6cc67e820283c10ae9933674c073b3acfa8e3cb6fb79df8e5eceea35aaa27e4967c5cebda4b0e32ae2d2283e5d7b77c77ad71cce36aa7218404d64908dcea4f0cab4eb15d89692065bd192318e5fc3432487c39251a9c46e602f1ad5c13859c44afba56bf3eb11b802abadf09aaed2bf1e88373d367834490ceddad522acdbe29acef1eddc4004897be78242043f142d045c0fd5127cb37ecbb5fb1ac4710003de9fe7ee681e26377b598b9b215c76ca1a6ea7f2bc8bcba667d3b393c73102ec1c7b618070ed872a8b84f66f48a793e49fcdf05aa16c29e9bcedf93722d0485c41fb235f51d65c57cfce015351a0d71617cbe4d25e63a0bb54f34a1afac2b85e25bf59da877a2b95cf6cd3147bd0a0d713b7b8993ad144b6d95d3bae4b5cc6b2b2efe571e7c279e19c0ff699ac17b330cf64df97562510efc055cfffa552d43255fc48338b316f0c2ff10ae78e392eba99731b12260bf15ae9471b894e738928533af9825217f28bd5c82bca88a14e45bbbe5 +C = ef4f0eb0d4643a01462e6739ffd7e44252f665be64f48cc387736f6d1d2ef1b5d032838e84a44103ed04aa130593b1b95d682870f34f33134bbebc0fac568a86d492b06e38daadb54d884228a82286b75f583df6486709fa6f3dd40e90cb168463cfeaeeb43aa2b9408f64ccc478200d6ebe5b56a80718a9864328e5d41be5e41652ea598988832647cd89468567c59e502ff0487a99a8e095aa4465207755f842d182df658f0fcd50e31c60c8796d617b7c5b3e154857295b8ea9d0d3d44c6f8719cf520f4a8416aa9508d7ff9054d58ba29a0f327c97a95fc90a7b941a775285513e79426027d1475d9fa33037461051e49cd437cbf16a97b51387ad96c1a36cbc526e25606d54655a8867c975d421427727d101bcd9a2288508430d1258baeff9cb1b40ab5941f8e40b12a9e116ceecf1afbcfc505f36755dfcdf657e1daf36c8573026f6e0436f4b610f724a5c411dd9c59ee2b7655b301e4e350cd5a1e5b4415326d835e09a87329745ae0cb2bb28afd3f461297c0fe13c2c8672b11771dd1502edd1af50db9634a473bcf7ac8c399aa86fb034564d68b15c115edbee281d24ce5cfadc1a6f09863d0b902f3b7346d39112e0e2e6939192d9dbc78b9139c99c7f003d1c36b606e2d2fb1399a1925f9596f43c70f64a2b442d2fea70e88dc2a77db727b95e0935a4b4f58e8c167b89ca6ac869636e5bd5dde5717eca3fe1f8418e831e0eb736 COUNT = 61 -K = 772a2ca589467e5554e4100339208f5b696f73342168bd63 -P = 359886931f643c6a69ed4744813637edf86c9d89169d3decb30c355429f639fc06f40e93df12dabce3c6dae4653671fb812f72fe016fc3e71d4d535b1eaef81a083c6b30770cb3578b2e3d0c6baf7bc4a3367414e319ccfcc62ab7e5687802ba2f47b28475 -C = 8c939624487b700cc3da4814158d228c2b6fc621d001397bb7f289870e21002f9cf49aaac02c7dd0a6b03839527cbbc629e0258cee053fdabf5187d93df0a7b0b4aea17e61ec8ec161a22b4842cc71bbcd02a12a8d3a3ea848f37b9e834b48c7097c34a9f3159fe5008f31fbad36ed02 +K = 3f2c4d28dc4cdf676ac9dbad9a758343e02731180631d21f +P = 026aa5d6a2739dbfe82da5f81d7f3ec79a9c9fc441758c878af4fab58bfbb48b3c3982c4ae628d652c59136e15b21f21a8dc1bb5a97daefef7e2b5f4c0257e61d2fbde96e0612377cbe22580e1f89071def5377071fc0d7961f9fd02a6bb273b1f93ce660783f8315cab45de5c5190befb1b4aef44e1a91623c5aa63b3fac323f36aa0ef6f313e686b20b08abf629654292dc0534935360447de2ae91214b82ea5d52f0f9616c38f6857e3c1d901233cfc008f8229c6eea871d048be699990ace354ab428eb8ac2a3159dfe4f2643aaf8b8c83dc00797fbb6fb2286e2dee0f2c6338fd2dc41c7884ab7513b38a1374622ac8b5802bb5d45c3a21b27974ef4eccc5f6d61a54e7b924582772f4940e4473e831bd241d5073f8512b8f0d3660545240f3056f55757fbf0e264c970c70355e4f1b8a864e2f47ff7f49c9ea2605f8a2bc713b812120dceff9a38b0619b030c8fb731e3cd9c44a7eb61d3cbf118c76ff2e96de78f9387a8d36154a1e18521e13e4187f6b17f74eed0865acd5ded2c89cd19c0e07235217526ae9141c06532a70f6ecc33fa492485a8c622a110917fd39a0b83504ab47d490edb2bdbe0ae97f373ee61fcce376027f16c3665bc6f396f380d3f2d087bbaf65fb0aaa08034642172c0dbc8a3f129a34f60b72add6877df3740fce990a9442e2eaeb6526e6227bed2c0f107424113fc108fd9e408ded3a92 +C = 6ce3301772a7725b137f08d3d0dd93fcad45f02cbdb1d6d22f997dbddcd0e0d43973fa955a077afce1a5641e516d9a45e1b0538ef06566893c99dde5798b9521fb00cc929eca2fc8a076b4074ff920243414c33a9fdf8572018b779185bfdf64d77ae3fb01ad8e87ea0c94857ea7dcd8ce479e28a09764edcfbd228d6abc808744d876aa4526fe85cdb9bf5a56463a31b65537cd579e082080b9929ec304be88d6de2b5b7b4a7676fa3903c4d18d673e2d34f8e30ef7f9f170603544ce8b86e12b5230adcea444afc3ec775399300f2e10bc7073dc07ca2d3d0430028f43e1c6d60ef5a53ddcda02588a3dfedbb17016facc6d69dbae9fce8be86608e59126ae400abb43f1fe0dda7d45764b1df2383da5564bce2bcc1659876956709582ea1ee075def812d118bbefa5b6ee86f6162ee176e0b6e2bc260cbffa7ccc3b4a52b1db5f5c8ecafcf68c2133a64d233e0802196a7e312b84e05f767f903ee3f2718e44f4df29193a59e63c7f9e5c4d2819cb4a95bd7f9639575a6fc93e73260f8265257fb8de76620e5601416eb262a762badb62647826883b90c96c341565a23ed81a44e440083a303a2486b447000f64af7c75881c3dcdd31efd9b4040bbee69d153f2cd854d0a979a196d5e0db19274099d24d0b21dada8a7b3aa121f0eb9cf5bd92687355b18020b54d9b1bb06b4f350f03ec8851123a77305bf3c7ebf02224d0f2a6e71ca74386d COUNT = 62 -K = eacba3727e35a2700e26279078102b84530794fe9582219f -P = 965559933ef90ee4a039741720f8c6b78e3b759b29bdbe78f8f2717c9ecd17b57de904ff2440da75ae129d00440e6fa941ec221e946995380161e36e38e9b099c717f3e0c7364e3878230516fedc19b37822d35f9d483128b6ee8fd670a5b1333504417e8c -C = bc18c39ce55fd82bfc5b4e7a41da332725a6ec6d0a8776531b6f632e27a71adf9b718240112cb93f481d74473c612f3b00fe263bacf6a82acffb1745ba117f9b776a45bdefb2b1cb8fa56347c258d43581ff5e7884ea2f397bec27ffa3684156ca300d02f34d266afeace6f9a2436cf6 +K = b712d67a2a4dcf6941854e12903b4318e385d7e9a8f4d058 +P = e5d0a2a8a3abde6be2399cf14f6cfeffe9df472552a1c6be4cb78abdbfed6313ece5e84199b8232814589cdec69e21cfed7896a63d10a1b5ea0125e3c8995877a0a4479f35e3b3e62f9c9a6a050226b803e115042058acdff3bc7cab881d69e3b1437029cc9ff8f1383265f64c57ac90c560a9f165ca878a59534ce7e03699bd667276df74068dae04eb216d857d4f2814436aeff7a493411df4b756e8f0d1bef6ee7a9c844419101349624e35df3acec7756552d78711897924c12c3bc69a1c34995ce59464eb29e23718089769996c95c4ff96ea3f5e4d60b20d3cb0ee5c72f90c9b707464ec95c4aad700e538e467f39e353e8595d9de9654a22ffc0641bba33374bfb6eea715cae8e36db0348ba7bf9a83528d7994a88ce7985c47be2c2f300e298e75a1baf723c6487e8a6223808fded68feafd8a5aa83f1f989fc9219bb528e890a9924f69eba58749f7040d59c1d3805527cdc42f2247ec9e0ad7e177356da1e7dbb6e96b151cbf3f6c7fa6aa89608679fd90896660a10f61b8670bcc02943fa479602a0db158872090e958807a02cc4b7d7baf14dbd96e44ba22866efc4f0295bdefc832ca50870ca9ed5daeabea40a0f7cf7d120c7f95d4b8bedc1313c054d071a5d0fe6ad52081cfb09404d888019d800d846d547d399205bba492b08c7bb750137291e16719d246b0910fda4873d68d4dea3f058c5f9d9c398188 +C = 054c46d6020225117812be3e5e851c05ea9b281b2a1b699b952d0b3185782359fff37d6cea3aa7352524cc3e572fcc70de625a015e6c44df9e826acedbe7f9de509ca3999b98ded3cda7a7cddce0b1c25cefc43e3ca42b8af47976fcaaaf59795e70a0710c139c6e7b707f14a6f4c3de3dd9a86b3514c83b792459e78cf1643c971b7bc45ec1c141f0e16d40f11e64a864235a00057f1ffd12b75d863f0271c93cd5fc3fc01176ecd236fd0b18444830848cb1571da8a17c4d26423057c90443917583e49d10696537277329176a2edd9a467ec7b91c47ed957c05cdde8fa7e6a5e88feda727177ee27ca40e407f817cd03a212299aa79ec7016fc939c50bb167ee94858b0a2acf1b6eb812a3d4a512c60039014f050fbbdcfd39a4997d4a91ddbbac89924aafb57eeb24279b92ddd32c5eb55ea0dc9ab0f70119185893ef5f35913fff1f0cc81abd5a3a2b31ce87fd3e14c705651d91f929af58e0780a959c4a924483db830d99fb168195c348249b4e9375ae0c5e2c28a511132ec1ba3bc7b313825f9a55a0e18faa03db5f9a637c892897cd74c7d78fe84cd5d335b072bb3428a6e140beaca9a646aa4a3794ae04622cc82ee8d4542ea2fd9ec92aca2293aef950001029286ab65a48f1c7fcd211d4a1965026b3ac2c841121b5156d097477a0afcf6d58abb5e69d9266e25967eefc9437864f9cd23f327d203568c38aea228a3bc2d7ff9a006 COUNT = 63 -K = d2e52a78f0536c9d1bae5d52f664daacfed4db235ec98d7e -P = 8f6c9ee9194f21faad5258451bbc886a141290525755b3ebb65a34633e4569b3c295ad08c649df9aa13b5858954dd91150d4df129a24645e4908570356b05cabf05f979cdac52c031510bb3ed55c5845d01b5c2050df7358edb645f7570b539edb4c9e0229 -C = 575e0f9fb6fcd95011907d6fdedd9d0577dfb5728f5f2d71692594cf8fdf471f5a32cd3df41fc2143187b3c62216c7011ad79e82ec98ca0ccea7b85a0043a06f1d3de09b65c4d6e6c58d844c2cef5d7a8306838c5296b8d4226b0e3799f7f52901449a4373189ac01eee994bc32812d5 +K = 4d9b12085848a133a39327dfb98b3765b0a6a0405a942922 +P = 41ab944d392a51f9843d3018f94bb8ae11e967ca69507ac8e79b181b1733567c12224108cca79d845f3324832f0affef60c0128a64218c15ebc6d892d92a5c540713efa8ce73f087975afe98beba12f2bc4d949080a8c8a38f3d5f2607274c83849a5ee151e105e3fc5ce5e3fbec95cba47b9865df324d47ddd265c03c093f354be84cb6675ca9d70f8b8b609f673db875e221a9ed44eb4950797f0acce252319dafcf23ef0f8976f133dd3105d8cf62b7585806a45a7f2ad81f4a7391e3add7f408db611dca195f5ea8a31e1f1f1e67a295a00f1a5ce9d7f8151730a1bf8edc875487a6f2cb9cf9579b8b39b4510c0722938413a217adfdd090ce2fb85bc1e3d12a6a4b3a57e5c38214c1f1595da5347d4a03875273fe950c3bb9f3878c9cddb61dd37acc591b1b90b0a0c976d98933a35c1ba39fce5ca2ed4669ffe47cc9d679d3fb4f134481a9ebe84f4f8177e54f7f5d41059df3402909b4fcf38f02cbd8507b7410d122e5bae14c8ae1f6df7057609e4bfd74f452023675826a96371c80ae5f9cb661e4d1d750ba13d85d5a3e7669fed2ff2859670f832efc3a56e7a8dd8299cdb651d7b7050b8c8d801d7d06b064bee405f412da5ae8d6457f24bf1ae1109fccc7cd4853c7057884738b7fde568e54cd5011931bf6cae62765b8f698b33d0d56c1d4f31188d78cc62940957d3a09647129d16baa3addb5315e760441c3 +C = f5e2a16b5e534842f87835b488a83ff56bf09644f84bc690a68e6923ad6deec14d70973e4f8df87e88114b36cd1e88a80df472b09ccab4894cdd8b1876baec8c49a47b4223d1e6440fc9ea53ad63392a0ab80c22bed563f8a60e1acc5ca5e56421105df883ce57a95e7440f9e3992e6d2114e39f57a5a3a1bf1f9dae21a196e2000cc5501f9325e642b37473be102922ab21100bc0720231bf2183148b9bc79b00c18dd0bb59db2e11171002af3a278895401320d2a4a1f2adab6e3920472a77747f80d34cf5e5573db248dfe15c8ed0a56048a4834997cfe12b1f033e5c985b0aa6c9370301ba9481af7d9cb401d61ad9d410b660f2875ba469563a66aeeace7e0de3d800e95f19c61a1615e93d9a7d17e1e10d59b1346472c67ace41a51f40a5105ab43993b8d34cd22a5a22955dbc8c917232918f2b731bc6b0cb56581160b10cdf12d6dad3296faaf5e349dde28aae72e6d248b37ee0767bd8f61bd30d998b532ea9e15a72fe50b61aa27709685a154caade6005dba3d570eddd8145293ef9c539d8874303cadd0897af17cac5814daef4c5c07f8b3b014b4c75ec9fb1276e2f905aa21ccda5eb6b3b5699c9d8b4d03550cfb011d8a36c5924126d015074595d751c20da38fa8d61916c6918aad15ba94c77388866174f5c4674527ea604384be56cc2214e428a3470adc9c82aa22bcaff5ae276059f24be5ac1b9d785e66ae7265fdecb71a0 COUNT = 64 -K = c9ec52bd51979122e13162d40b957d742ef125713017b460 -P = 00972a999402fe48ef1a1c7822ccb965e598b0227ad7d8e42e7600171aaed5e535cfdd5cdbc2a0bb5a978bc9c1409356e6c9efd4f6d8ee9a0bf0cda5d084e64be97eb6c4ebebb3d09146e2d1ef267a0a2d63d7fabac118376459c1b764dc52a30916617619 -C = 5f9c2129e586a2cbcd51e3b450c7091d6583ec7b28f43e34051e5c3dedc6833e639014f31bf3ee3b87f5fd7ff267f9aca0f6afe38ed41ba390c75db46bd600ad4418e37873676fcb9240c3a487d06bb5174cc27c4bcb8bf5dd73f053e03077f74ea8a68403af5825dd8b382646a2dfb4 +K = ed57c061d9bcc5706c1f08163b89c652cc7ab6af5e8d52c7 +P = de7f52fed9dc04714d504880881b27b4bb2116e79327b2feff7057942339fc8fed585a6e505c781eb5962813ea5451d746e52826e4035f40c2a88d29ab80c843a546432c9274c7f000bfdb969fe290f843d8985d5b415954fce5dcb297053a6594dea172c3fa378a816a77af11d1537152c15c9ca894129c93bb02a34fad5cf6c2ee68dfff1d0b175b77526d1b2a101b590e4dd765e3780432edd095a24eca735e68d264d760d8dc61ba398ee6aeec96144b3169d5b98e464e04846efd9feb3e3f05488a2a02a68c08fe838040cdcb911b8e8091e3e9e77afdca46a119737c1f607292f58657eff95095ad7098ff6b6d3c16686ec6b1cbe79b64261caa7e92b21d4b69a7f8b80ccc948120af7ab69c16568c5eef45b93053b86db19beecf10f6bfa3db79496b1b06f407439b216f25ff322a9a1065fb8e316f4a27f803bdd7dc31bd550d8c56be2840781587606e48dc70f9ee4dcd5df4bcd5af2f44f9d47cc61ee5818b7086454180db683fe0b05adcaede0151c932c9e384f389292e5e12f7237441c8572e52bd9e3b7f120a203e8fbbe5b1f2b6888f4dee7e97949ec01926eb6a2436c0f422c268060cc1bfdcc972aa69531562b3c3538c5bce75b7ccf558663a1c635f1364f4ef9c63793831aa2c37ab569144c815efd37976e622f6389618d43bf598359ae22989db995ea1c200fdce2577eed5a92c08a0173300c9c988 +C = f4beda3f293dfe8d489e058524bd4427789d934996f15e87eb3896b231e219793c6dd9f2f560f28b349a013cd30d99103e39cc8826cafcbef55ddcd9d3c0ae6a8fb9938a801ac7435be813d2b9738d1b2e4ddeff02a892933d73b007b3b19af7fc911794651ae6c9ce710229112d41789b74d18b2095f8690e2975be32aaa7123c6d5b9216b8234ac0c972338399109bf191c6052703811c9dd1350554268b554e5aea61c366d1a9cf6e0fee369be75f94ccf62db9fce76dc5ae2e8dfa5226295ba8ee732307485bc5647557cded5b3dd4b91d5c7ff8f891d466ff4237250268446af7e90ef1864e6b89042a4a3cfedd87bdd297c57fd4bdd52d210044070ba80258a0804a3d0763be70899288746cf01fdd326392be5712ff87b0daebe9417cfda7a9f10edcda2d5b2e4c971f77a4d17ebfe88d33f791a118b4a5db1fc6d40423ba54d30fbbbc37e1292c52f7c3ea4f38e22d458abd888c23def47569911fc51d101ce2db4b4b2b9bfaae2f42d096d6ee1f2e739dc9fb8b661a12649a96bffa9bc9287ffc52e6f40752bbbaf3a8aeaa0748ec1784f121343dd7a88f314c8acd8f94e64b30053134fc54f9514b7fc501fc3e3cf704d4680171a0f355ce094260f9f462b3bc3b32dd6a63b6dc8d43f8ce656da17e564521471d893ec50000dacab8dd9e7705aa01bc4cc62473a30ac247fa695c4831d2699d833ecbaf5f7925b6e85cdae3b355eaf3 COUNT = 65 -K = e7f04a474536a5825db63b4017ce8ddba4d1e8927e36dd4f -P = 4289205ae186c2f17d523f51af28e3333da5ec1e563cfc600d97fe16b99d7de51d150c8a7999d4f63f7add69fc8335c03251a96235ab6e828f716599cdc61d9fc3a068418f5d193f80864dd3e9973a94ba5d36d519f80a5db574b2448746230efde3d45801 -C = 34eaed62f407d6820394f8c7e8b94968ec4d6743387ec4099713cded64d6eb95725ab1dd77cd8270aecc6981a14f0726863fc8cd6491d40073a1484c218b464cb337a97f8509af090eb6e704fc0f799aa519103ce7c1894215f212c2b4556a1c366f89e358a6e8807b523e5686001740 +K = 4a66afcdb737e7c248755743b192b858898d7a1f6d78509f +P = c35022fbba50a987b303ad042a48c527f044c3a615aca50cd33d5bd854799d99abcc9ab593e0840263009e464053abf84bb6b02b0cb60b764cf0a7527fae991cbf8dbb1d4481d5ed1b2fbc9667fd40eb811b71ccab918bba18e3c5253aba0506d3459c736277e1fe90318009de56816970b3ead13b11543ccd0aff788d97ec3a2165822b6c1816ba478e078d0a10ab98047c37e7ee84f6ae28432f3f072f296eefad223dcc667d81e8d125e64db6d182085ae6ad1414139e1b6c494831496d7e5951c20394ed38f13c62d32568adb6e1d9017fd7e3c0c5beb8a25bc7c1359ad5a24f6f664cf183658d6e371dddc0aa4a1ac267e9dca44277f397f855fe1c4b14ffe51c50043680dd5d5c3a4743657b95a1116aff8f9b65ef93dfa96a337041bbcc3b481ee78ee886d2628c4ad14b88808911578e554ce3f3b3902986a35154bc9a8d471d0b6bdae002cae57e8bc18f018bfbbdf3252ddd92877501d5b0b9ba7293412a1c07a1103e6558e67fa87c285ac58808f2c48979ce017e3eb7f06ea6a27af8bd5254e902ebefc4bca63112d4a5afea5dd0b7ce4b89940396befb1ecade5b83dbdbd6386d1d3ac171ed57834e44238dace4dc42ed3f31ca2c76e089c98d4a93ddee2c717afc59aef26bf769044c06331c4d64fc8e3ab7ca1897d2921f5b751e2751390285621e87e9d50854130b13c30fcb7b67932a5da8abbf6f01ec48 +C = 0836d4521ffedbb6908712f0399ce30be78ccca0c17a9565843b268aa332edc478d8ac5be76faabc63800a26d43250d20b95dad1ae711da96eaec8fbe9e6c40fbd8b40e2f2d6ec67922b4b09938e02ba0c329ce580ba0556a762922d791cc2f7c6595b8758e08ddd1012aa2d5aaa69b0fd7ce6b2f01387629c3c996fa8dc0115d255364437b7433e9ee2b8d2af9cca385ea2e84e7b3103c96623ebe50f2740ec60f1cc938f8f5051d212255aca1d606507978fd17caf475e04ef3fabfa5a491f0f820526945395b9b50117f1f5b5089d137a8a0bfe28dbfcc96d22e917314f04ea4670136224d117e34f14cfb23a0357ef427f99099c42d40b848da7ef8248a0c570b7d736aed3d8eaf21752f6cca47934fffd5a78b983474f24934f25bf5847e6f5379415fccc716e0a4517ecf938623562d01eac1f64cf6bcfe197e6e8799b7b6952930efc1ad372c620dbc979e57666a668ea0c40cb5a0392f765da7c2c7cd2df6915f2108f871b55880bdeff690dfb630c76b670cd9b77653683712ee573e7ac45ee60df6c02783d267a10926d018c677ba3b348cc8dc5316919fa7000e1570e4ff7f69048ceffadde1f5833615c862054390b8afe3489752170c95f501e6325c92b6b3617c07f85884ca9c54f74f546ea50aaf20b005505148063936b03518a9ba49f62d353e80b69e50d04abcead23ee299a4124b554f91a8ff74e64395303be920e1b26a5 COUNT = 66 -K = f49efbec9d7247332ab4675760ff4a7f283bce5192720c83 -P = 8eb8c381aa701e49fa112bdaf7bacdb0d928c9b4e25b1716b6dd1ed1236c98ab6b73792c7afef3d043bea4902616163cc4afc1fb06951874f432502902240185cadb12fbc11001162f62853027afad7b9c170d9f4db87d027a9e93d329c342a2d97088b25e -C = 0621f2440bf31221a716ef1113154f16532cb43d7d2d99c1f724840a841068f9dd320352456e89929df6883f1015748026e8c620e5f45bf143dbf9c31aea5d7140848b7ea2be94d8949f7bf7fe76fab6ade3708d34224925c69cdf0fe49fbb295dfbeb61ab244ae10f409f33a3fa25c0 +K = 9c2d112fa421d4fe6d844d49b5cd24bbabed2161e5ebe990 +P = b7dc92bb26045389ec62520011ff1bf8ae4dd6a44f95b92d55e9289efc25322a0989f83e60ef0571d95b5cdb9ac81f7c13712e4090b1002393c34616872c89200ea45ccfd288344b67154dc3dcf97c6567a2a17889aea3e6e76d74e94690ca044624af11bbb740b2dddd0b2f22d1c68ea39a96668e7677cfcf7348a4b8218ceb12f19549ced62469636e434b68d521dde342ec371b319e4185d3d887e6daffd2c2fa0c790499a5dd12032647e0a536521c65987d2559707a8634e56a1e59714411dfebf5703e829a497eca28888bdf4acce93ac32c9fb3624edef04c7b6ff20676daf62b899c55ffa8fcc6f4a14615ced43f462a6e56fc1c1481e43e0441cc5a622d5cc4aaa1957830bef52ec891106588fc1983d4dccfd1811ad72f60c061bc657c4fbef630c893774eac5c87a5ebd14dad35fb68b3ff395e1cf7a74ae5b10a1abc44bef5a377c4c49f00bd7f03c95d08ae37340e02386871ce26326f28aee1f1ec65e6d6ecee87d3d255fdc0194d29852eb58c74729efafc20d192910076d5cf9e0609237fc9096b6d3fc9c0fb302ab991dc4b6fbda85044f93dcd0adb8a5d51076d4d062c77c919e2db449d4aaa0492e418694d94ae5866b4c155529b344e93d21ae648aa8e0af26bbcb6d1036accfb86f37010e7b550440a874256ae85f4c4fd81e1687854ba2d4278385252451913c39ba99a2385c5b6fccc5818d83e86 +C = 19f95c56b0e2a8ac9e84134ce6226db65b795dd8f079c06674aa458645b1b6788a85c49d950bc6044067c5d5eef58e9e45107fad839865d1983e6fae03787559d619b5efbb1d20240b98ac5dff13ad688dcb059436bc99e50decb1485f1462beb3dd4a71fff10879a82ad14daead32fd6e37070b051318f4c377c53fa75286f4bb838c7946ddb13d58136fbf3b7c1fbb318f3fe408df40a6ff0350d2e6e80c9f84a12ab09ee1ce5348ae0e2a9ea5cb9496493521bf2cb555751ec695d2ac98bfa1d71161cf81eaec4be71af2eb74d565dbe6d3db5af878e38c3ebbd02f156bbd9a468f49882e2dcdaafa66d389a103e23309d6b4198c9abfc6253f2aade8a4544993839a27f13d10d10bcbe528baa824a03874ad22e73e190d10fc8af6ea26c3afea4e44168bab24dc3624b6b3d27c415aa72183de6e595569f665a3d9f471ef0e9b1ce5674cde6529d5d9d0520584e2599bc0b99e7808e34370073231341e74149db9e8c691e702a9facd932773fa765316d0443cf302072c719d108a03aacc705a90a8064188061c46bd2896b084b9b5981dc4b4ab408e411a7e4ecc5a1b623cdeb3f268a6016e4094705f1cf64822cbb1f29d3fde2769165d271a9ecc0ff357ba4a3cecc3863a8529e7c81c86c770122d539ce2c06bfd82976a07a5989549507e4689669239ea7b1412d98c79b4d9784fcd090b9e919603881630cb7ea0c8d9e6d00bea4cc3f7 COUNT = 67 -K = 8eec05558a2e2169a08933532547e6faee69cc1d20e17cc3 -P = 5a7b6cbaa499e0b1636d347e7f9de0753886dd2ab229d88e544b378a4247f0d6a6fcece7b57807152b60a5bdbf898b710d404df078cca0f5affb0d4ca7c1b8f63f1b3f640afaceea3582f31632a4ad9beb841afc038d53aa5787c55bc05887db4b142208c0 -C = 6c4ca0cacd99de465d1ce0ac5c151fbd17f2e645a284e20b7cc76e790e18a30e5b30663246a313893f9ccd52d76e1ce35dcb50a5f3676e637d89640df6ca004939e6fe78211364bfb6d80856040d6570d270d7e92581703f95fbc5d286fbfe61b023efbd07a982acb8cc9dfbf7c7cb29 +K = eff5467a48a1858a862858cb7ffe300c2139f5fbdd161f8a +P = a551cbe35bc9f42d96ea7648bfb599fba2d2ef76d7b0414208df436e6ff44637c5d5e8e9ec318b3e370e6c40c1e8963375573e59758146f79c1a0b767dec159563c1eb24d54355063c83c378517267d2c0c626c9695bbf45bdd60e2977da981f420c989d391e46c0dac7ff070950c8695b1a1157928f21e0149994dcbb88473bec06dd52950f525af543c62cf2b6eb829342310a7e2493a5e8984761f986549d12f777c1556ad0ab85a533b64c51b8bfeb6b33c866d9f4396031f5240f95728900152da7b22365e156da74c1fc5941a482f3876b8149fbc5284127c7f4a943a2a76644864255c485e912ea6c91a3b1d005d8eb70108dddd3b307c9b9077990aecaae165c7a0679ab805019ac2fef9912860856c93a0f39af9695f04b6b3e1af7d74bc7f2b7af5a8e63e20a9ae9341db3bd286d9d46d36c1bae7ea25c42dfbee38460ad684877b802ed68c9611ae256c844e4a3257dd47fe66050378c8d7d4757345c4e1847b3a5835b72bfc2d45080aa34850d5b53d9f0a3b243a18a7695f220a8a6f12a8d4b23d370a4ba7fdcd4c448b7169eddf22fbe91f61c4ed226399f4a7dfa77cfe695389585529806eefe48c671700b8a788d9f1225b9f8cd2e9fb140ede43341dc23a09f85513bd46536b7d3f5852baee851ba946a4cf42d4d973c59334a4fb04df439c8b5bba2479b7e8c4c6bffb5a7b21a17880827662b9c121a17 +C = eae1abbc5dabfbd10050e84b24e03d5c7a7374a6d6298e89afa4c2187c883bf0dc77cff7ab4cb45cb0eedbed8663e3d700fcb6b7fb52e67c782b821c93339d72545c2d3f72179a6c238ef347a556fa160fa555d06c46b99410596b5cfc4fc59e9a55a01595354c26dc9391aa84c432f5a58b8220fed23b5f99c6254332964d03c830e8ef885d02f15332c155b4385ddf716fd03f4713cd69e498fcb6fdeae8803652746a10933847451635fa51681307f2546ae57e8528712e474d76356302b59ce62684aae7e3a4adb538adae96466b7f4a773062bec1467a66a79a820a021a1680340c696911ff751a35574ce26a80b6cd7b1dec1c09621caf8170807c2166b72420d9a99a0a7ce31c0febdf8187a952df38067c15c427b52c692b06b65b9a6244770da8e2a1c7e6a0758bd5149193b296b438e21441e79c066e4dbd40745f4534bd3db9c3380d02683a7f2648596f6847e7d93942246667d4bb99d3ff38b159d81422ab0d1ae49e9b48f8122d9d2760c2ecde36b5a5f91d575a74901f7b6b4e323d52b01bfd59baea39f82bf6815d55ce2c4df5a7b2f190f4ef7d88baffe2c48fdefe43d4a9ef857699e6f0142d20071474721def7b3bf6c78f11302021f22bda5018c0a020fda3d33570633f7e7f395ecde2f9940b287f05fdc8fb048778fa6fd35247ad912391f2b408fd8d5f550c27b5e7bd9d40e73eff33a997536e27bde53bac6767e019 COUNT = 68 -K = 119ff1e6d753012acba53cf3e8da4f4b4ccb7eae1585cc9f -P = f248a9e93cf4195cde3cc7ca14fe26bf3383da37f79240652ac4007d76a5ce2cd08064cb3e7f4314d6aad19ed9d3ec6c1afa4d7be9971f8d50cdedac3376298ef2083d13bbcf809b76ef017b6c2008055cedcbcc92aafa450484d077ce5c006c40f872c83a -C = e81bca92548f47cd0a000d49867d1f11198ad40fa605d086b212c2e3920c1671aa608b3a81a51051a8adf608aa87bb3f627d920d1790ed009212dd1877a89186477f26e178d3c07ec2352e0f5a94bdc4aee79f030caf1cb99a24bcb8e3d16df524240631cb9b449d5e7beaf860ae4047 +K = 20130ba55c0bf4438209b0775caf916938a1b8c289a82aa0 +P = fda41dc84cd9eeb2e0d4651b3be764663578f19a86bcbf42268e5ca8a37e938ce2c6cefc05c04d4c60b5757cb8767bcc1989ea9361944bbe4abec1618fbf9a8725a1c89ff72e3fa35921c26374745331483b9c09f250363c829a30ec27fb06c260ec3165a1ba0f64ecbc890cf9a13f0d123117359939eeda6c0d69ab739d122aa9b7e6aceae9160f72b7c07daf65a8abd30d414494856d2e8227427629f7b54ec45bd4bc8d14007a283c8d6130d0b65e8b17afe0b7f5d57ca4123ce5fa8d954c52c61164391c6f3eec9b665015e90d8ac21270a348ee4800be28efd0fff0d0411cbde0322a725ca8b7904e072aa46a55066ef8c3eeecc3970cedec0288dc20dc9e5cbeb6bce26758488d99dfa4c38b5253517ebe731423f12a1264552c5f2e66a6f844c061d6026f8cce61a12d3dac8f72d8aed9ed659d8c21db97548076b80617451e53da24886a1c5544202bb65ed0119086e9b513f0059d216ddce53d2c0008c88243d8fc8655b44ca6376688817f10b2655c8c1fae98b8161c2af8d93f9cb5eed317562ed00f1a3c7e8fc42eeac064fd8ae8ec29c01eacc4a06ca976cc0c46c3d6a930c17804d57f9c8f831be16c0769862f03d1c881a69f38715ea79002431640e390670475cd9917f3d99bb36e4ffd473cbbb7d651491142fd6ea14f9bd284e4770d332d333412a58eee39a235b4afd7ca3654519099e1335331231e49 +C = e1fa31c9d513f01e830ff45b47f25da4a4496b76e21273e82ea21166c01afd3ea561b70d8888b5f77d99d1d855d560acb765c969c32fa58775180573130a39eea325971053a2eec65968a4b9f024c8b69205faec1ba5c9a5dcd7710b010cd50fbd8ca0058c9ecdd0deeb775692087b5ff72cdca23018dc784a4091ae86bb2442a4a5b02493888f97b59b70558c1915934725ba868655623f06f92f5786e2fa884ae39367c6d306d4bfbbc3e9dd02c041e2d40263aad78ee372809888428a6454df5e8ce42a3060366fdd44a50387dce9b8231017d45cafdcb4baaed8980ec6c5b5a21e75cfe4aafbd2d584a97b03eb059f7aa99550a1158d245693734861f8341c4d0328fecdb00db531fded7572ab6460c8b6758e105120eacec81e7d4ad88eed6466b0d6d8061bcff219a3c374b4691b6738ec9a36bb908cd782a37e4374ab111a9b5ebad480525574777d59456d460c7cc1a711941cea2fb38672190778fa9132de50b8079760fb0dee488cfec052191a7c8797432b5e4e95b5446baac0b25f963cf61c33468ebf4560bf7bccf77c7733fdfbec7938fcc86ac6561f79ab8ee455319c7f50bc897e1cf1a811da6a5f03633d96e15dc666f66324259fc022d4774ac76b147150a9a2f0ba434d985c309aa6259d3674d889dba7777e9d686877ccffb3f2ab93ab7372b836aee28a4e5756b72e79c5459ffefcd72a82bae3e4d16a5a24c5a95e21a6 COUNT = 69 -K = 49dacded2612a37e64a07ad577962743f95d5d981c13e105 -P = 55d04e9f6dddc5ebc3762873f75b76388c18bd2ccd8b68136ae76dd9765db9a026f4dbc460915358747b13cd8c1bda3cc88d06a6d98abd0353ba648d4b56665c7b5e52a680c55ad53feb4d434ae3dc6dbaed2b7dfbab273c7a8ec7de8cfa7c5a079b96419b -C = 60d5dbfeafcce729280f3e0d56ce7fb5e04f9c51bb4819bab81942ff4bd51c21160d8e7b4994441538fe12d70ec5deaad05b66180442f71b6f5db158cc3234e6a4191fb05e4afce7a497abcf6455cfe23e25dcc4577c95afb8e80f0a281d4d9e073d330e924a36ce318d11967b13036c +K = db19714de1030edc3261328c3b3132f962033c73c0211b76 +P = cc5358eccc8988354b2d61a577316b1bc7477e1b3eb213465cc36c702e825072d5df53422e81c39bb0614cc37ee32c9c1ea4f4b27692956d39275b35c76d15ff69224895ace6da4e7865936a29e457af1d221bffbfe827c2a417cda36a84cb9383721c7cf08855e7351f3460802101908b37f524307e60b02313d6474022ffa575371482dbf2dd450a5127a3db76b23f4ad84d4774db2f00f71a030a0c36058b4725e284de299f4e48266c4da374f5cc27155cb2957ac4e5dfbf23527eb0890d12178d17b2ac27cdef14c5e96b4e388460eb729d7573f552b25298144fa68b401a3dd3913475d8825e607b52a149595b27a55ad18135258fc864e40f1fdcf95062dee5dda2c249013e80ccc9b39ef28e84708dd825712a3b056ee92a6ee9dec50122f44554b705bd5e061bf11949ce62bd7fcb6af6dfbf2ff8a7a32cbe20b24902301ce5eb9a0e831da8105e094d4b3aed0f9ceaf6c5d00138776af78ca57657fd795bff7b2c7332948d8269cc6631cc3c3d5e5db0e9b63b728fea0fc8d4adfeb12e49f611d8a65e1be47ae082cb8606ba1684ab256b335aed794f112377acf08c295d10348303731d367d1c27b03eff6e9e8db8dd1171dbca570d8dcbdf79d4e79f04ac160a85aee02ab4a99417b981b04c2ea322a8e66868862a388c90f707d5d68b516e5fb22e361491007918f61ca58df3550f3b3ea7d4a0bf0fcc507bfb +C = 5905055072b7009d1cf8d805e6406242a0421b26345c51dcfbba4430e202bbbc09eefd8a18cdd2675d309cc5372413a2685f9ee70971905b76da0d7cfd3b13b9a5b7974b24b1c4ec5ec9f586abf80dbd6d2d2961ca6e13d944be1d0e4a0b1150ee011a9eee106f20a380140e9a5dcaa9198676834370a8f7be319174da418597c5244be88f535b6787d24304b4c2f0d2fb95edf04a633e9aa40087734492113936f9f34b1d5be9aefe66f7f65f290fffc4c299ff8a0c4a08c6a6b1903f397df5c782875e3e2b5c2f179afd6478052550252f7e3313b4c3351d1072cb4ec536913842621ab6e38be271edc09abdb7787a69cb14934b5098d9bd69c33a1a7a49957ac7a4186f6be753948c7a59a5ca15e6f8175b419145bf1f2741f3fddbc17f774e2031f0981edc1989d8cf198859eb8a38fd00d7f5e13b664b28fdaace50a363defd77f823f1ab162dfba55652ab8bd47db3170ee215047f7f342493af743fdbee4e76144388cdaf7d4905269a38011ad6368ab9a44f1ca1f53df9b7161384ccef5ccbc2eeb28224c3723a11172f0813b8b8a336d773369412c4e3b4038bd2a090e647e6d8242419c628864017101b1d0bca7c24e57081b49b1df64868de86444c41a7aa78db4bc0f3ce4e1c11625dad62b92cb051c05fd873be92489e3c4b76d7683f6c0dac143fb5e6915ee2b5a9f57d682613c82d416cac5d331f5017d4d3c74725f87e2347c6 COUNT = 70 -K = debbc3b8f4a79df7745c342acd40f95992a4029ca5ebd117 -P = 91ce35d6a09cfed6d4ecc9f7004b439fb7d65484c970235681fb4397ac958a3b428314ff8f5fce824093f36dda8fc9b086d65207ab1f4eb7ece20ae7478f4759cfce87fd4b29f97566ccd1aaf0d25805e5906fe04f4292a5e6f693502677e2ac32036a19e9 -C = f0b655989bf4e198b8cee6502b93ecbfc4fbb883bdf6ecfb38b90da4354d9b8050dba14a08548dffd9694cc1b7e855305c09e489ba50ce9f7d6cffbe7ed7b6101d0039e73cce96c2fbf4220591fef6da31d5b48bd5411c11de6f8a8f9020739aad19454c5ee9c125e4baa9b8a83de9e7 +K = fe7f86de5c73c8bf9b2145107bd28e2a7c25846e20bd0466 +P = 64b497286fb5f7457b102366bed3bb83217637f6ad9de11729ac1c028d07ebec04074c0e33214c051681ecb7acaa090837dacdcba8d7c53d57d078a00f460340a538b8d6dc9a2057095a5576e2a3f177fd41844b76355c6a00dcb2a00718df843ed9a69fd68d4140b393ebd48f0fe5486a74000fad8b026d24c01fda0b169bf875819d256dd40b6fd11f87a6cb4cac4a2d323b8af2b2d27bdccd0bd3825856c389b7ef1b19957e202f466d55b90446ad8e38800d254973ba1aa8193f959ce3caf2350fd1d64ac34266cd075331281cfa4c25e171f1d55d22d749fb51d9b66a57462df9e72b7e02cf924efbe5b592bd492d9ab035a48c08b7cb9910fe43350cc1906f4a754d4ee1a085d674c3ca23706f81dff5b29fea98b9b3810a26773a3cde75b335862e9506306e9d9953d1a50bcd2a43c7509c92867d626e14df1234696658b4c82436c02415380c14fea80627bc1090ae807300a12d8e4cb720c10e71996d6b08702f768101a4b15c7089f64956e1d4fc205e0e5d9aa48bff219863d52a79709d2f079748551e0037a2965795d4bbedd4b585fb166a29bff5d35e9b140892aeb9ff76f5bcdcea1ab81eff7098d05de8c2124496f55e6fff75b5b70ed4f8494a75b47aa86715866d90cc5bbfd592f97aad8548d27c43b82fa0908454486901933a0ac13d5fa75dd6528446cacaabded4c02867bc8086f86f0d9b520f039b +C = 32f143826c6df72ff0be5edb8c8625051f1dcce07ed7cda2413d4aca3d5f2bf8975c79aecda4c5f7b031b590ea753bb93a58bf417e4b16e102d75b4ba21d1e4b522aa22d2793e6f9e9da5254a8b2c26315deb4d09ac6b09cfb8879123ffcec9f01d0ca9f233ef6fe5af9e504ed1e1259801c964f6f9ee77b0378a707e0bd8b05b4fdc532b274979376141eedd4f6bbcd5b257b36e9c771af847d7792b7b3b4b9cc225808b58f7790f1bd99a102b417a807c87ef65498ca21371d8bbad9debc3a1eff52f35ee431d5f7e7a991cfd5b0805fd80d9f441d3f3e7be5aaa9c3c9e9a74b2e815782606fb50d056f475f24911eb4ab8a39615da5366f7e0fda04de3ccdefdc3a9fa94b26706a42b50d554e88680f9118dab4de6170273a036f9acc1587cdf3018756de344a5267d87081cd3426bf81cb6c8e8d8e8d39eb450d4b27a20b5de54a44bf86ddfaec8e1fca0c497852a2002ad11a63be25b5f843aad5f19a5c3dbb48113e869f6b2adc83a688ba7a034d71aed0cd5436587b50ea5f5e41638c076de8100235887ea9b1085748dfa9fde08fc73c0f04035e5e685f8f3e23e12e4fe920621ab631e9bed3813d2646121155d58f0187478ab2a938b56cfc9d64da8ccad341d9bce3a01c409d00bc039d29dcb10458b2e51c6f689c1c9e248ad64fdbad79d63203dc992b5cddd4be9b10f9e0ba9a0cb417d985d5ecde70293aab351576fddead5a1826 COUNT = 71 -K = f6a6a3a2d626cb26eeb4d5d30f0742262f043b84b067f801 -P = e0009e83d44e66ddce8a88db69c7cc47d3ceeb0c363011dc1259f812a642562d0f06edfe022ed5b70033211c187e6f64b5b850322c9de1167a8f01d6ecf7bc22c10e0fad9adeeaa94e4ea1535823ec891a03899d8380e2ffb5c0eb556dd26eacdee205c131 -C = 93517a55b7597b05bbe80c0a3b9907df04c9da64972dceec5cb97c9305b890e0e8b5ee4f01df0568d3b40fee682b4875eb50408743a785b560f062d9cb20e8fccf306ecf2af7781fa6842a3e8282fbf181877f11214e249fa773ffc9b7dc9c2e66a8b67a6b1e0ccb3970b86c5536cbf2 +K = af28e5555fbd03814f4cfe1ec1acc107cc233a783a787619 +P = 2ca49062d983b4ca2856aad702435bcc57f5b7f09992da57c74b70a98114abf1823eb6bcbd82bb5de496868835d181796f5547e50c112596a64f287e89a5401b6d90ebe04b859de23df6e1e9e7cafd1bda9482794017f0be1a16b04263c4bd42de8a12e9812adcdf28e9e9fe5d780a676b536a4ea2a9e3816abc3f5108f8f21dff537d13c2d5a56f7b5a4b8459c1bb3dcb1e14d9d2fcb05ea051d65c13c62db7032da3a1664272612c8a7714bc7405109cc42e7d69addc2739d41349db561020ae1dadf4ee9b22455e493134673a80292199a0a6a72e0514a46aee939fe2752681482fa87d52454df9c5778d503066e730560c2162c9b8b94d784ee8a8de035b24fa8cd7f59c5f725fb1d3f81bf7d6b8703b8a5ce71b1ceeea2f86d0335344d69eee25e4c5860bfdaa8936cc9c3d7a4a3ca7fd37108e09c120d4456d7c77896248930c7180ed41bcdf4fa9d994557a81321c72dfe64f39c8de915cde24b0f1e238275190eb82b9e45e5045bc819aff88a523d108515ed9e9bbc4c7acadc6a73cfab9c77c893ec6700d249838d55a42689eb845a4a85294189df02f74bf12302b94da9039637e3b92161c9d2fe5d8c7c218668c5d803f08d66275566ee9f3b8b5420fb72bfdd87113d3717afc88c1653f7c5b89c4a9f8958f681f32c921bc78576279c7eaa3071678a845fd0f8e152c2a654333512e899c128aaa3b0934ab8b56 +C = c00c19966e28f2bdc4ea682734331d418d8f225ee8a208f00a273369a8c023b37a754c79cd3823172cabd1181dcbc2eb54d6ef0c599caef81673ace09cc6b11dc59c88b0bda219cd242be9f6bc18d24090807768c4e10246088f6bc6de853878acd963d26b986007519cf36ddb11510a57ddd7c62cb5ae292323db102a72c6d2517f33bdeaf9ae959cf494303f03a6ef596bda354794c079773b255c3152ae4c9965310acecff559cea50665362669d7044023c7655786f22a4252b04eb9b019c5d7f376897afdf9ea0dff66839a123cea6b136365be60b63ce1766682c46006482847e811e733a77deef9aeb72d42bd134a55aecb66379cc58f3dc18bce57a5ceba2d7805a7c2839b4ef90613b9e7339b8d5256b716ad119a0eeea11985c4d101c739fcf71b2ed1a075eee8851f9b2ad4dbb6909547acc5f66d37279d2abf9a4d613f8c54655a405d5a0ba71ad6178be53bd386f4df11ebedaa4830a08d8dd77cc9adee7f7f5b8e615d464e56062e99155462f17dc992f8333efcfddb8bf71e1ae73a9fa9a47f3f88def2dd88204a3f01c41002a8a5aeed271b8b88ab62e997b9d5350dc02c10002e0569e3ec12bfdfa0346e01d71dd6c368a2642c7c0e0e2fedf2b81a686f98fa5bdbc892925c7d23d4775a723616b7ea19b5466a4a2a1bec0f7432c5b2c9f95c36d6c569469f9ab41dc8335ee0d4fd90a7b4ae6ec3cabd103ea11034ea9a1883 COUNT = 72 -K = 963b90b6a8c9c56e77fa32d880aaaf15cadaa2e32bd26f99 -P = 2b36eb88aef74082d135b29e5cd102b6535d84e272a96395c698f8cfec3720c03c5d4d592ddee1c2739e8a3fd3aa7e02b5919355a6ece93314f56c099fecb0a79d7930ac588dfb047d1d57f6efc33774c1b56863b3889e03914da0bdc0442e85fd46bb75ff -C = d78cae9a30324ce8476be64165717b1331d2e09858855c3b4d42ffddfb866ad3e2fc1cc24966146fd33616cd730a808fb85d14768aea9093e94a000cc65b8d54cd1a0b8ee923f385c2a31770e3f9393ab09b65ad98c6ce15718e8258601b9092776ba7d55d6219e637827c2b78e19a1d +K = 736dd6cee8f6be3d072ee4e58094676306f6274b637279f7 +P = 78f099b0e0c684caca5477f2eb9e15d63db4e506186c2485a2328b2c1c2aeb554abb552646bcd0d883a7ed49085bed341444dcaf24989201b5db104d71ab88f0b7b632f4033e44d17911d66a833dc1ae829803756376c28ecdc880b8fabaefdca0aed58e47c8e38955cdaa65cd9a9a0f46eb935eb02e59602589745977690deed32149afae6b9e160bada2b2d2c158b439025c3afdc9856fae0dc736fabd982cd4917c77cedf197d7ebe84e0d78b5a993be079c1445518fb75db636e6e19be48346078c65adb8516e4e5c67195f8e2f55e5e22881101d0f7af2ac68e7b6a7f4a19de1a151ec3f59ec1470aa257f749a246856d527bfa15e783a13de5e88691fdb102bd83223850c149da93b81c0710c68e75df7f2ddb008ee59bdbd9f53c5553a7575b56836e9c5a02e0086ad3f17e2f5d1ccccd3f516c653441a2fd25a7ca90193b5ea14b4cdd34d46a5a21dd53f012235dfaceb09d35a2a5e542f679726e16d9cf5ebe818040d59ebb1a671cc94ad02ab2b7f641cc2a43a43b0eee4f6ffbf57db7d7fadd1c8b3b72d6f0ccfb91b3927b988c83736d7ff6eaf14e8771c85851934b49d0671aaa2baae5e0c317b985aac034629fe9a808be8217ef715c6d884d6f5456482dd2b11b9c0405d2cb78443d27dedaa8e3ac7bcddace24cdd69adcf714a650447da1b23c038a9219bbde98b179eb4d36a2b8ff6956c892b0537293a5 +C = ae8ae8284e6f50557261e79c20b8e6b6afb7b0f5664b2bc56699b778833f6ad17ce779b520bbf6ff31d289d14dca770b0be0d4c7bdd60544e718704a798472b2ca5f19868af3694b4ba5e84ab8fbf2f1a8fd0c4e977b0fde1f9e4deea96c28fa0d9caaf9ccaf793f3ac4bb6f2361a3a9266eaa91f25e8345ce3cba39d85a52472a170177e4889ece3e98575978e581f7101c4c21a064ec3a7b3aa8ab694dcd3e2b89f73b1ffe12f1e9974959990527b4384c49c1fb4c436879cc036a622b0aa34029a55b0f6b16e2d6dea038168b9ed1dadf7f9a5835592ed8bb8d6f104c4ba9ccd9f1870cd24c15c27ffdf869f86dfe6a0e8eff0733027136285c7d76e7b77783d40a65deaeb8c2161ef9ffee997985f52a8c6d8b14f5b6f4938f74d22df735336d79c595222e1391a0ad1fe85b5315dc90892a4ac67ebda4eec400984ed10b77cb44d83ec1b0996f55d92ba389a5103abff54473c0aaa570b99fe537d2c04236eff2945208944a1c2845800f860cd5297d855c67a324be11307b881c8b382610433cb51ff7bd7c0e480f0f743d4fc0ad932f98d636915770aa8a6b6f86e0bc2f84fb18779defc8f9455a4fdc76033aa17fd661595485d6b36e692ad28da3422f03d8891a7def92b5150da6b130323d0efd1203564280429ded28bd424f8c2a520e518c26c74232cf0bac6bb5b43807c5f9da69903f8fa06d12847a950b6780dad298bf49530c5d COUNT = 73 -K = aec93736a465e4c120cbf3cff65b3b2c59eae7f27cc5bf80 -P = e36f92e3e7704e6d8e33d5ffea8b163fa8a9c0ec7f1676aac50505a5fadf7f5db8eafa66e498373736b4439c4ea90bae6f9fff963dbe37311e57cb50fbf3225f0575f986a242a2a501c903d2bb21d46b078a13c4be38602b417f9ea94742e2c9a194764a0c -C = 708e4632760460d7731e9e4bd5e06c6057ffc9a4b723b4bf6d4a31149c9346198341cd9ad9e4c308d8bc3bc6bd0c312279a5d5f1f3e7de0979fd78b8fc2d46b9e023fc9764b9db7c065b65a8b0820ffc60a634f86ff9bac09679ac72107a48701b8f5f08aaa62b330229aec6976338f5 +K = 3566801383609c7a3c71c93276f10120d75036ad70f15332 +P = 53a6c4f695d4c3f009e79316e918eeb73608317b7b42f2714af2322cb73011804c67775b3dbaea46fc22a7d4c2319a226cfc8c7dcf04c660ea028060ed71886103e347135075017b4ea2cc47e1ab4e9b9a1ee3cbd40a85957c5a9b96183b9da85dfe8a8f13cdd898dbe8e9680bcecf3b8cbcea2e572253ca4cb45d396fcdcf8bdc6f7ce40c9b920de5942e1d742a5decaa1c10d4ee0c4a23d2d089a74314dd418c9b49b038ccdbf872285b3b9432f6962705d7373ec6d5059bae767d8756ad5edb9d904147cc62774af89a9b6d87cb91881aafb940d6eba4063e5c5a843e839d0711ef678396bbc3bb82e56cd205b91b7f509f0aed11cd5ffe09d44bfe4f533a4e16fbac025253504deb4d2e633f0ff0948000b033fc0156082ae1321af463a4f1fcf1ac9426b29745e38828bcf868acae0dd01e7a56cd2685fd1be1a7799ba5608d078df55a821a3697ae8bf87d40ff99e2b7c821ff14c71041c945ef038b8283ec25f7ffdac99e523b445df77d8824bae11c751ae41999befe62178ffee46de0c1d3fa0329d6072623e34a959d0d38083679804d33d2e3a266a2ffbbb034ca519a19e7cbe251f1d4a41f25ac8d0af713711296b1fd097418825d21daae3b1fccb649aeffb57d16d6b414a5546fd38491b7fbaa1083b99159d3c22ba203634d80eb1d1e01ff729d15257165f099b2066880863b13a2d1049841d24d9cba58de +C = 53a35279a6f534c0345cc8a1ddd22932d027ff2edf6bb02c43d73f6f75927fff8df18f7bcf3e597714286179f7f3a3c21dfa56b552ddfba96d454bc5613f59822a389f605c9477568777b99df71d6c1f743363e3bfd19dcdfc772a63b038049d9bf1738acec8848cb855fbbf4b09895dc580e3b10c8178d19c01107631a8547c6f0d8d71f0edf2e5687fd1653c3f443e3b267e72ce1e01d4506e46837995b585f48cb62544c0709d405cf541a487edf81e2a489a6b1524fad3dfff68cf8842f0a2309e5cfdc39fb868c8269552ee375d9c345cad53170939faed5cd65d8422e407fc9ef401466150004e36e21bb6ed9253b5bbbda08a0d780343b601b74add17fae518cfaaa0dce771fe3b34d40c5bb9571b7165832a72ec71fe4233f129a84d2fed5f48fd92d8afa6c94c5ab1131a9ec6e35213b4c583c54e6b5acc831a742dd12a5bc4f15449300eeba6279b795a746b4d79fee920a39eb46f20abe86919919b676297a577a8da8a85a2afc561d1a23f09e074990c8faaca0f06f8e9185d74fe6a43e0949f1c78191fc31a39f1d0b479610f5405efbd184f5524550971cf207d24d60f57fa7dc3cacf29569070925d4cbd5deb622976c6b7f79991e4123266e59c4a1a82161161ce9a823c1c29694ed09fc0d63b088dc383b1c16d90ec69f68a9a2a2f36f4ab4ef71f2035b09e89d704481bedd21bec78ce1d6a50dd916bf72506942c54ca441f COUNT = 74 -K = 807945ade7b320c615b858c716c1bd1ed1a7f5d9d8c6f3e5 -P = 5bcd1d075214a107d24da12c1cbaff26e80e147c2547ee87b98ee9df943cd27301bbcbcb64940307269ad1567d119ceb9267e0002edf674ed1387f555675aefb268c8a08aa0de0846abbf403ce4d7859b6fb8ee3ff1d1ebeeb2c14d30b44b7e3d8515b5e85 -C = 475a06cd5e9b3e8b80faf39865aa5ba1ec55c5fb7c351eb2f7138fc7893ac791e5c8db1c479939102923f01e92c1ff9aab77676982d587d03ef26a186faf3ddef0857958d7496c9f244fe40a980e1b94e9657eaf3b99d5ed1f5ee350e5995a1d2a7217bf047d5196ee238adcd8e69864 +K = 0d40c4532bf76083770206ff6e609839f28deb038050095a +P = f70757362dcbe67a8f717eaa45af5526a119832fd04a476d528d67869c02b28eeaf8f13091a9784918660784a6b21df2512af0ba71d96cdcf64aee16f7c5586c57a9532649910306786bfc491979bea93321cb9cf7f9eafcbdb7fb674533be5d83212b6a9bd4c945319cde1b72de1b7ffc5faa7d0cea9698b24a7fbd8dfa9664b3e8521cbad5e04a805193baac10f2e827a3f951a28f51247a9122add0c5def12f3fefdbd87fddbaeebdee3cbe96a286bc9ea0f65fb4d2432e54abf9dc8aed73de0ca5ed620721c7e6e9378e946b5a155ebb4f27d1c2c3f5190017b0b6feca802691ad65691ee462e5b4c84ae3b274e4e09b0da343a5dc7b4631de56f536a8a449f9d2491a3b7acff70b21b06ac723ae2e316c4636a9d74e2f57b8d50898380703b3ba1070834b6ba2ea6696017fa93891863f972d81b17f09cf6182d9702e9f7172d3091db07d4db83a08c5769895c6040546674f60ac10ac7d92d5ea522daf6245bb020a2b1c3a7dc87a85b54fc4351c48f038a2b5c81cff7b168ba1c7b5816b141cc1b3c13a4f186ec1d467767e3197ac182389da522ef46170f95305d11532fd7e23207a72e2fc49adf32bdf218099e2831c2c85323388719c95e0565c2654b78e8de45bd730a52f6c3b5e4e39a0b174737d79343fd2788b2a4db8d5ed31591567759b2c8ef6e6fabbabf114ba6bfff7b8ebaaec1cf191fa388d5562e914 +C = 13ff7c1547607319e9c53245fcf3abd3b4333259c9fff0dd5d35d6ad4d833b35ad7884267186359027d1d3049e4eb3eba327e98eb289f0787162aa901257838cae02f6726ab445478b645b654dd6d9658708ba4a68225fe8531ef37020dd20f19b6390ad0bf23173a49109f388b9cbf7bddda8c8f1fb6d7ba7fb22009e682afa350a402214581c1262fb3481138a64012a9cf1987a3241ca7c8fc5285fce353f4afc922b6ee1fe478856be2b0a86df8bd6321bb9afac31f135bef6e7afcd73fdd9874787365698a004f775251ad17ce3982b4935e8fdbfaf26a7eccd683e5177e00c76971f82b78793a07c595e0f4feae3a334fc5676833ac90807c148bd1439bdd92d9dc9e649f66d6748b6cd008b7565e43c7ca539e402be70a9594cb69f6aab587ac9db732b30202ec429327d5359dfb51e60435661510f13aa99e74ef4f3336111edd2de41b26b16e007e8fe93a538db2b88609380f6ebc18113a4227cd86ef834168133f94b285128e5c7b7ff0d5ba07a55b37136f752eefd9881f334ce6b6eb47cc360bf174881ca6b133f0c97a66d472f4eb9b0326464f2ff9f274e4816ae88fb36c8156eb314fc373b5a155d7530e3def0423a86ed4425d2974873ddaac51c312f100f86a381ffd5b2090ac6d0bd1caa1e0c8abd739b0baeb96c3feb884d4aecbdeefad487d6f91d98b96efa421cf2258792f61d4ff9a9f764fff9879c11f567e25f8d60 COUNT = 75 -K = 3dcfd1b638f63012ba2b0ed3f8b5230cf093b2e468c9a315 -P = 2add95ddb22a33b2c4afb4f9ecd941a85bb7954a9cdf27fed38e235051dee63277af63a7fef99527bf8c124d6c8fe0fc4af18a943a161a1d850d92ce618999f54d20978fdd05269bb5b1f07fb2fa9cfe71885b5cdc32ae538623b59e380d836a8956318338 -C = 7bad137d60a6047a662a3564e94e53021742c1677a4eb120f250ff9029a0db7409225562f28e151fbd16088f8f6daa6287be75f17fc0a115b07b493d576d6ee8b89821fa188b38f8b933faa569510387401376f28841008e7147e3a5c1f4664fe4b2e6d53e8a12d9eded2f9c4306ba19 +K = 44539e25045b49fd851cd0d12841f169c5270cff1f6538cb +P = f09ae824ca848a95018b5b839395c1cb5158058c4004407c45f61a8e6f5681f78c731a6dc4934181795c343698a19cc3342d5df03505fbe45de103531ace47df794e87ae046b70f37b9ba92e7b1466a262da0544c4dc8d477aafedef4c1916b6a2f206ef863b9db8dcddf76faa905d06d30cd41b42be82cc2d74838499a58fc2e2283041a1e8dd18a521690b10f30ee00fa91a5a46b8d4cffbdeeb32796e3d84fb56c071ba1b1def86154aba3b989721808b73fb96a4e77e2b4171e4effaa5e2223a50bea87c54b8469da44cd8b26d61fb58289e28f3d39e56f9de52da7546f39f9a4d1328a236a5b20a75799145c88fa7b2abfff7b0c1622e66babde3768673808af2899926b431b32e4ac36bf0521e41637774e194d7c76cd6488f16bc353210e69a7f6aedd0dceb5b29520c744abcece9f1724684b21ff98533c7bde552257ec36c67cf9a4d6522b4d205cd163b755c5fcd81655889d86071b5c1e78edc145d35eb5ebd42ddecfc21d2d564ac4bbffacce44eb906fcd7e70a95e9bc741a021aa923f68ba038dfd874ba19f7a3230e30c44a96cf2df566675784820b83bad7d3b64c1c686aeb513da7f3f52fda71b2c6d8e8d1748d7f867c7187ed946d70bb524961cecbb0d543dddd6e4ed5275372ee3aa9456bae3170361693fdbcb8fa9d5e8f27367152444014b2a495e15e05dfa1c1aaf88c4204ca05dcd5a994c60f47 +C = 52e381c4ce2f3fb335645cb1450e07bf998c3413aee6a9898fb14cae9262771f3a141740f3c292951694de7bf129ffc100df2153fd9af4fccf85326454fd7e4f4b0ea5d7fd69a145b4a0cef9a179c398a4ea3086555b35abfc9de4a1bb40001e5eba8de362833c85258d1d3f4491927cf28a9a908a675aff1a00f06116c58aab20e149bab457f67089319b3be25b2d512560d945089b14cbfe654342f79dd0e3df9b5984737a6f146edbde618bde9cf4e3073cf9f5f9c79fbbd1b39a275ca266f0cd5b61d258d7bb9659148872d04cfd835e0adf651c18cd3506ba66f6f5a8a53841965a2595f8bf6435f721cf5c81b8013289c9ce6dae0efb7670cf91c16999e06136fc0cf034166a13fc4b92f9d8ac5b6d3e741d2b419021b9e98753c29c6892cce84ba684dfd49094cc41d7a1b767bafa6564b1f51fb99371ec5eb558e83b462298e4d6514c1fac1cce99deb4ee7089012b4e6ff14c9a282c2c6bab9fb1c8762188d13b058f63650162fe9962cadb2a63b108e8d07cbad440f5ae82c413a0414db5889db5d5a93170e4be5a5f7d518808437f2fa2b520f33eadee8a983f8e1acdf2d95f6df571c77da45d4bfd5f6d610f5b59f2c87ade164a0bc516352410ff40982c8a1a8bb381ad657d07df75ab4bcf966dd69b6c31683d1c4e32f9558b0b6bbd138365c326ccef205ac07063d8227e233e72f48a58455ec9af8cb657e6c3d24446620c4c3d COUNT = 76 -K = 89a95a2be30d2d3ef2b307d4267e4f8a2f33456728bd3238 -P = 308bb046cec4ee67d209df46c3548eda13adb50b147dc02b0d7c3d200635f1b5ddf37e15d3d1c13e0576d9c4b880ab6dc03e26ec6ff11c73c37885e4f00c00c1519aac9ed90a87fbe660476d91227db16b6ceca26431ae10763e0a8cb7375a0c82cc205a47 -C = 1facded2796e682d69b5f0f9841b9628cac937c07c3951ed9dcec4d42cd5fbc928821430e082c693fd0116f21f33398c50f291ae68231329e0fbf858d434ada36951d2395d7a632cfcb3dd4b8996b13c233c113bc08794ea63c3dbcf93a3800717bbd86618e8e55628f047d3d94d5b19 +K = 9d341adb02858d13cc2cd31f4ae17f9e59c98be109d772bf +P = 3ed67a159781940bed6b6eb3e9e0cfe08bc3f380b13557da31bb4f8fc84e0ed2698c4869c2107843e4b4913a1fc8fdc818a3c39862c86371fd7a9fa5cfe4255ce53536d5084505cec098d615a04a158526e7a2c843827629b9ea4e294f42a72a7f69de9437b13d0e24fe5cf0f336872562343b36f5b158fc9f2fcaa8f3a00a09916cf540350d6eec28de426073c774ddbc00de336ed20e73c7c907b18b709ac2d247b50e129c274c90a005f1bb5c47d7801ebfeb23d6068e9b0bb28f497d93b2b0a4b6f2aab816eacec4a33bffbb2d72bb441a0ddc850fa561aa2ac4a0c97594f5f88b06ed743cb3a9183c29613db95d514980faa81735b46c62ec190ed47d0c402b6c807c2f32bb0ae56b31693cb45f6efaf5cd705979e9dd2b9bdb3f7e3d2fded2685f9a5fed71763bc80b677ffcd447054fbe931d6a48f3f4b4d9ab0d5e02a11e259b62b450032142f83b272dbae42d49b0fbbfff42ede1566f3a1262687bd2e311577d8d0c016171ed9a63b9ac71666478f380fa197e64bcbf5fdd8162905a57ab89ab2924b840e3b4ae11795925aef272278d079fb792540ad5e4ff6279ee10a001dc05db356daf6f9d472ca3979fb89e6ee53f0454733fbb666804e261ce805ca4ae36953cf64da5718bca8ae43c054c709484ad79dc95b082660ef125694156f3e5142468e774f2b0a4dfb7a6bc7e38d95972dc625cfae4ad3159b7d4 +C = e19ce67f5a366b0af1816f3b42e2d16178929b8aa4c0d9a0b1b7a37083a9d019a9210af8f28634c3bd10470a5fd89a045fadf65aba2032ded47360564818db3115ba91cd21f02e033892b9b411d628c1e7055ac4b869d4fc4ce9d3ea6bec4e31a34ef453ba83b603a8f3c739775b4b904c31f792f98f543e892e3bf2faa60dc7abf5732630f341ed9535a53ff1839285d1d62fd92678bf9d502f8a371cfa4a41916686f86709fce2c8df837ac335bc2a752eaf2c4017a213adcf32d5a8f2722bd96c13490ac897d7237f6bbb56cacef90b7eb9ff0d93f959d78b37191243feffc97beda88ebdf8c23fb29aade9782c90dfd34f4810de2e6624d52924fe8db87f9891168a9d359223bfa6bf5dba6b6f4b8d4c27f583b249eef28ffb5620c0784334688e76c6f74a2803d22882f2199363b1dda1367e7565d24b937490bc31a0e92457e52f08d306b923178b61029c62440b0ae26c1b71cbd60813be1d314fb06b2ae31a9d9dde3246fc6c32398214dd90edaf04ee7f03b4cbb808e8916861c79c54f1a3b4fd273ee854c884e27f803b7f64d989bf1eb8718f0f114063ca1802c2cb9a312eb5e2d0a3f00fed9386f93f231830a0cb743f7f13262f84d79c043f3cc9a105a24d5050ef471839579cc12c9cfb649a61dc06db344c7be6d530014f81f9a23eabde79116bae37901cf40da25bf74cf44395dc089798ffd5d1ffd9e502b84cb52a356089af COUNT = 77 -K = 1ff5495f8c5b929b7c728ccd3773815ced8ef73bdebdcb07 -P = 821eaad00154280c31b140057de027e239e8df29e351e332b9fb60b68de0a45cae37aa6a78f1345341049e5a44ac60f81c5d2b8a4f10418891c176b34cb81232349d8f087f19f30f5f81d81c08a37fb16c333d8fcc16ee1cdc52ae2bb927b734a4d8efdf03 -C = ef3aae7acf62dadc74921701329f279eb7efc649aee18a2ebc6bd0445dfa3e0ed22d18ca83f01d7c9bd653199cc7a5764ac1b1785a543ecbbe93e90214d7df01f0e7dbc1d899bf385a9cf3f091ba4a708564217ba7635b109eb8bc6680bdcc016b2806c8c63245aec19e5cca473b3b91 +K = 035eb32acb54869e560799be789696b01ab19b8d48203fca +P = 7269f2cc7301a916b9b199102007325e32211ac8315a1c19595bda9f4231b6a833f5afb86100de8d86e390234d2d0a508a6ff993afe4fa04270a06ebbc5aad981c7f479e784aa410cf1e1030196c71b709a0340a62bfddec853e636e80a747447a99aab5c8acc69a58ffd796aae18a9a3429054734c65c1e01a238966b911aa17388a33b83c4b55c6d80ad2510996d114f5d7005e5675e77f7780deb0471a9a2f842da0c16422ead24da49f0c226c188fc944c596b7a7ec68c8c06622694365186d781ecde0e45e59979d875d54d08c60097169a9e187a38348a64e3ca6ca631864edc79bd3d62209fc33cced31e8da5b6721cb6327a0cc8f4c29d93f36c2e73012f2c57cd9a52c81dcabdd78291f1f2d8e6cc27718b18967c5e4ae030552031628fee0665d982dfbae8060da2f35033f377310602e29a3937a48e00e086f1e28591b22c0f0bbcfa7943c1f24b979d75501cc7412b6c8e25e90e3bef4944ea34201ce93bb083d9d86e714ae60c91f254f157e66612e5ff8baed8687632e625f16cf03f1d3ae3363eb18d069c52c1d818ee679cf3d0a4551666ee013caaa3155c2e718d5817fa821ec2c1fd43525c0d7ef32ed95d46c49e0b141e7c542859d1e94b096e9c44a8284445d339bf5db197d1e02540d671ae99958fe3600307f6dffc4b7c223987f6bcc9454d8fa88a813c0c3334e508a91f5906e379688223581a78 +C = 12d12cc633987fbb2854b6209e3a1f92222a920427ee758494ca67e53db9fd849e6f858fdee13863efdc526361840fb0496e354a11a87d6df07d2687861e4bd974ce78436537d2dc4c445686d334751343037f67259d09209501a79975e21b1f317a7d0f215a6c46d0fc866604ff82f5646e04cba9be4c8a64629c080c7b34fc566a086a5aa89d005db370abd3a37d3272275a31deb7e579a70eb372c07a2cf12df09a2a68e9a865dc1b445684358e411d010cea2d13052f8a45602c8e00d150f0c90c348dffb7c4a2592631093b9115cf4c23e0c835b7f3606d34bf32fad6e080ee8e6e96f71ff51e7c95982f8da38654a7ceb28d5b50033b5e4c1f375a974236f77e582dc77b048703f66e5b57f3a43b3df1f7c8554544594bca01c6eaa4807f0902ecd427af3fef75f5c64f0218408202404a09f0d6d3e5cb52a6ead76ff8d891c1e015a10d9a6760581117eb281495430a42136d852718dde4b25e0950bcf6d1f4577735c512283102aa4159e4eca1dffa16cdad2439d77c679bd6944465e0394f2b92fe73a14cad98181e27464b20854c3864157edb6721434640cfcfe4106e144e185d084eebd1d009117e5f104e01b20e9a503308edb236459a6d9eb955b2aac4fdd8b59c2121b5e0edafe09af48156d01ae298da1ca7b94cd11c935c362d9ec0d4f20d990b0e25f5a004f4af8571a07891eb94adc788cfb8dd482ccf8753d8d7a8171337 COUNT = 78 -K = 60078e76005ace3b01d4df03042813dcb1321dfd73e31520 -P = a7c3ba685d63dbffb39ad240ce6b77e5fd5fdedc1e5fcc017d3f8532136643071eb9efb559b3ed1ca4478bfd2abca0f34847cc8a44c60a31befb9425d87338f435b5e3165eda80abd6a92160719ac7ed5c0a8fcd6696c952cb2ae86f7fc022563ad1218cf0 -C = a91da2fa94b0149832153a7f1a74416ce721a05b93c10c10bd3725bc9f71768664a6a5dac1dd4a21d4742e06f1c4d05bf644385cd3ddcc38707a97eeeb58c63e7fd6b20d15c1d5e3059cdbcae175a04207da2f432504a69f57742030a391de5a2a3f90589d559ba40887707bfe47a4f0 +K = 7dd7ffd6ec87bf2c281f183c4840294b5df554c2b5a1670f +P = 48e1ece119c1bab81d13bdfa581688cc109ee90f7aeafda210fdb0c32a91e9d7d9d6fba162a07842464d2f34b10b913fa4d96f9bea4c35ea01f9353fee432e334282c5b2bbcf0a22f87a9263564439dd489bcf59222313c27ad4562eae06a411a90bd0d103eb6ba4c302d9e108edf08a87100d72ba2274a373ada13bc46c52a5dbf6daeddd0f593893bd68a44a267b4b6042dccdb402661256034c9d307a4e0a051f5e96837497e9e615216548fac6d5481ef665ee16b18932d005a39f44324c0cf386209c28bc8d9daf5d0812cc8578426f7263dc65a62b1e087a51011d2fd6048f9e87499b81f02c88524b1237ebe2727871e30fe1f84ea60477312eec819e3043639bc4de56407fb62e72226e8ee7bf72a2b7abbdba39f94528fa3c54aa82f8b489f1f57a934be7231126b2d9415f43030be3f9855d002aa726202f052975b57486199d8242568298b9f06cd46676bc4c5b9eb7a19540d3e2727e2ba1212c85b8d4714c7d274c99e29f8ee17ac5bf693457888f26c45c91f85783c34ca77faa77bcb60b90e4bd208f68bff1912eea9b68997ab72d9a7be76c22d96502257950c1cf223aed242f1efd02233b8c247ca3cdda40388ae9c430feb9548edd28932b338bd299b0aafbdc3fdc37ba69d0e60cb1ad3f2f22bb6b7a458351f5126d7920d585233340008e004e1fb0950aadff240cfbdc6776111bbd9d539d2f6dcef7 +C = 6bd1b67126c20e79ee791979b9310e9f6148fbfc3afcb2de8f4cbbf0c52be1f6a5bf88a6dd5566787a33311840dab3d21a13e40724b3aeccedb9a12661a853243bb68c3f6e13770a316706e39d366c1a1d3ab3b4fe627f1d88bb9fc30fa4a1718a41917a8aeedd1ef438431cfea4df76cad79fef1cf73cca72d7ae9f62c1b7b152932daf5218edd89fdedf4430b4e93b72e3dd72be93bf263f9c42e60eaab6c2886b18e88e95e4d0949a7594f60ee24fbc45c7b1dda0c7dd229522e2120aac0828f352780a0ee142b53e80de942aaa751794462993faf94ed668db61bbb7a1e1baa2f779d415875a6b6bf6c0513b11e9a37230d704a17d64e5d22bc3af1e9ca0eef03adaac3a4577b41ecad33d7927dcf9880c63f93e45e84504d0e5cd94a997580fe8a65545a3d543df7a8f369e416a0dce96236776720be00c31ed0a2b209af2310567abf91477f894ede7a085e8172af2dc646fcf5762c5999e718f881f0fc18b3033569b4af8da9bc612729df40e0a3510ff613b7d4f39a7b799396303cfbf2ac4cd6db47f9a72a3abb490b8d98a7da472fd8baa605c6a142bce9a913061e220a3578c5261dc0fc6b8444dcba171d9024982d98babd858cfc70107222264bcd41c5fcb19d1c1298974f026425e9bff3ada34235d50ef0d7564db6aa63b8651b93f469179958dcaaf833aa4736d7d4685c9c8b148e76efb1f42d56484bd1b11f8a827447d7857 COUNT = 79 -K = 78b48dfb280ec69fe4f0350a2f61c9ca4b7c3b141e81d404 -P = ec89e623bc29d843ab5ec1d83e895e33c9e048e41e94c8bfd9cabbdc3eba14ce3a1e0653211b74d2019c8f40945297c8debb90c4eef06c15835b68e8f17d08160299bc1c66cc3d1bc7886b6a5e60340c651445db8493c014e0522f13331d408b45b96bbd6e -C = b1f2eef731bcc32a0c579e318b26865fba22d08621ce142d48eb004aa2f0fdac0f820a994fdb607afa0c04646f25019938c6bda42c180c3ee4962f17167b71e32503295c53840c83b197df6f0071fb40c51950de30032a5d7e1cca9b1e12db501b88642eb90c027f586e89499a348a55 +K = 3311d2513cf17ad565cf0e6dac891b7ee823b049bb008f98 +P = 1b88efbcbd7d40b863e281d99477148df66a1b943726bd2721a6716ffe49052c3b6b2a1cddbb0b2fe7ccb2077cad10927e22cd76345e07e3e21bf372ccca9dac5d80c9ee2869d7cc29a7d5da5492f8fb6031c4819c286031c221486784fe04e6ecb0e0c2922f54b5386cab10d6e43dcde701887d5755a4980bef8307a65a58aa7cd70d150f404a8a0ad277ef4b1f2dddbcba77e4184ffb95e779543733f8174264086454c87da6a6606140757bbdc09c54e1060ca38d2782326f8555c1cab4536d71d75e6e6439d0f50828610458956c5c0a067a37b7f6df67e963efedeee595b30a46955124ab9274a05c947dda99d65e664676570c11a46fa8c60f67919d00ea92617209d89e66afef28116896453fa3cfb7b05834c6bbe8a5cf2fe5960a6658d1de860953e307a1b429cf649251aaf393a4128ff3ac0660158aebca380b3346477a4923712000fd0c5cba6bf77f86a949de9ab377056871dabd52c57236600ebace40756e2c617b8499bcec845fe488deeeb02a77b3639cf434b494a826c98ba60f276dbb7525d84264ea63554028711f8b7f52d81dac26791365fc5e00102ee99c0604251f17b333d21f73caef21521504d4b28536d7dba6bfe1879a67e4a92159d4172c30984d5ef248ebb4441c35981777ac9be039130b629370a5e2ed75fb4a4be0c677a0151e29207fa932ffcdd0aeb68708994987c2897943853611 +C = ba70bdd5d3aae8c1f01d0db53fdefdf50f98e45a5645649ea0f2734be8c33aa4a3856731d78136d547cb513f307af16977ba9002c124e25981cca3e3dedcde289bb1e55b9f444f9d120ec053e8e9230280e3bddd2fa3329dd52617362d2a7b03e6b56936ab45d63d84367780f15def024c3ff20fcd42dceebcb1e3d08005349f0641b1dc103c903f0417e2729b390fd80af20ca8b906ef6af21113bbbf2f884a78b7e66542cc7879f8349ba8c007c2df0eee2687ecc48852dda6c17d8e6c5da05db9cdfa0653611e9bb6ebf327fb5adc14668fc1e9eb35bdaa0152198c2453075216c4fc2052ef01d12ba3aed0b74b8e33ff0fcd7ea95610eef525c3ab911fa75a90163616f0844082f9008b544eb048b2535e4e206ba01defb5063aac98127248dee04f8416ea59621bc17c66a57e575e1e1955ef56647fa9a19be45e4606a09cae170cdb6456017e856736f469af8ce5e6f8427596183ce1ccacd22134ffa9c35663e201c5596358b528f0d2e79050cb413d4c24f59b59168ab595292dcc196a3d20463736e05d4ddb7b15d2aa010c3d294591239aa58644f9590475606c8cddc0ce3ecf77a30e3e7b173dc644aea13c25dc11af3a57552f1d699fc4abf58dc28a40f64ed03fec1f206f0111697155f493018a670b63104b1196c56f27704ef619572acbc970944497fb684a6f5e87784f8de03fb2742f2e48ebf3818c445ac59ed30258e0f626 COUNT = 80 -K = c1663187b5434a8664fc385b1b197d37726fb15247967537 -P = ae16e4a1c505985273dd6669cbfb88fc6481481469f5778f33af6e5cc69a955fe68231afefce4490472981c2361ef5d4ce11ea28c19cf548d890e4c9e43882d23ff7cc4e3ab74395613e07aaa252957e6d5dcfd4019a3a7edbb462fe99046b57703ffb41d6 -C = 5240adc64d95a75d64d10fbfba40779b4ba814470f71f926d4c869c6c1ff1b82bd31623758d3312b40c0e365345b2192148ca514a596bcb0b4d63bc323779b72d2785d9ead2f031c258abb18c0e98e842b0b7faa626d6196b6e1a661a2f6323c9be044e7dc27a1f2662904463074670a +K = 41ca499ecddcc61fe519f1f78dfce70908d697c7caccf11f +P = aacecd0f8e9d29ff81ede4a65a40b5613d86c317a055cf30b803a2a005c7b79f15438efa0cb362b113da6070c003a969324a1d5462a33840824e23f971cc2a58e52e6bfd3ea5fb07aab110d26b392a99edf4980de57a12a3825473bed86589a8675614a62d0cc14762fb280a96e5e34a9bd189aedaa084d07d97b415f6a766bbe0c52ac84a499b75535b87a2340d68309d0427fc9e5c32f6ae6eb013d6b73131194167bdb089322ecf8f1811578e2386799f5779c2bdbd46d478df2c902aa59ea24e9c4984f4704cb37e21a341fab5fdf41f00107b18821952f95abab0d34a027fafe6899c53c1ec3a701be8133798b20f4d9a26dee6b84d773c55ff5329c3c1e4eeec94cfa05317af90d7cb4c57ebf05e214070f1318bbac3231dc0fb688c181d0f9451ea4d18077fce31a2270d33717d9d073bb3ad6e6ed0fb3acac6c088a16b9cac69ec214c292e82f358bbf7f170058bbfc05e78a9c70ca4dfebff232fae33db2a74347e6b3b337cb629a313900aa25586185c596eb55dd498f54c87d9e995a47c95a5011bdbe44b70b0a84182d86904af8f1dae33cec08d4581070f765e6009c5847c8a993f6f7bf6d594b5f07d4403dbe6c100b04f0e0032ecbc80d08cf3681890301900fad15505176bbab144524f96393150fe5282883696a38a10ea6f3d1103a1ddb6d94dba016ec1238312eb8ce164efff4b94ce4c3939e1a22b2f +C = d36ebce851907290d03f4bb424c0cd5c2b3262b376b3f9c4153789a204a2deb94db652fcae63f933cc6a218dee5989b93db2ce8ecb6777872d6b02cba4ef052826b929690a096f63695a0c97337dce939db3d7cac66cc555f6c5a74ab72a0d66301059208584d34d9843f9fe55418d16c3d2f77ad69377e6e7d1a6071d399ec7eb39b8f0175cb33ac8157ae17ff3adef50ea3e95fb7ecd098d7bba61d6f8d8abefbe81957bfb5519e4030c2b212d997273da1ede20ca1916b3545eee9984397a0e4f83c7635f03613a5e9fb5ba476d1ef87f9b90167162c32f3a0e0eabb9bdaeab55c1deaf0d79a49bb80126fdf4444ceabecdc3e6f5addc4e4cc009799ab9174a6000ea74f9a525747c6b2e095c9274660c3e3bf9464e480158aa1d04d04ce05089e2f5d1f62d5e72af622e9c8546d25509a0c52abd8f22dbddeafc7190dd034143afa99b51959d31e3e69915ba299388a04117df03b3961b4577c6c3035278ccf4fb0b8de0bb76e0f88e54d152cf0533a9102b93b5deafb19434e396077ad29d3b940138ea6e7c754eb5336803d11909ff6f329724cde0ba936fbde0aefa9e7a57dcc5dcbd7e17817ec841e4e27ab8c551380c791530e60e1460ce665ffb99873150564dd89cd39e7bd1dc968ae7257c6a0035c658c62d150aacd017f0b4012d3ec765c90e204f1e7b1c3b4f8803d8f41f3a054a025314894b0126ee420be42ba25c3bd0672ef7 COUNT = 81 -K = 3c5d0996511ca4d0724b7754ddd05807eeddfd1a7c312dc4 -P = 218daddf1f3c358331ce2fd652fda9e7ddaf76a3115c10d346aee671a49bf9622c2f9ea497b6bc0d95f15e1a0b106197e4a4990aa65aaa98fdbbc20b809ade57a4204d7849a93ea7818e4c9eb7321547f55c969764b32be042fce97eec5f6a88d11aa2cefb -C = 938ea185aaf50705042651d7e7909b44c0098302ad1ec00c2be5887bacafd4a018f3cca1c5a10e4faaba33d3e50f464903ff3ea2e70f27caf3d6d7efde4d7117f39a18a469a80c99078178d81592f934d7be6d24cac829f4a24b652f8fefdfb9d935c79632fecbb9ef55a6a1fc72f85d +K = 89fff26b22137bd2c6d99fafcbedaf737e415db2d05ab528 +P = 3e5d07e65a4a3ed26b52dfa77eed6c71181662166f82bf444b27f0fe8fcbddef97b655e26fa2ddd9271fa301f22f4549924a33d05b807e60c7539776bbcc5f0245fcd0373db2b2b08e5db71a12a52744cb7ca86c56cb879c0977b94dbcd725e60259f9b2ec29ec70372dd793cce8d5454ebfcbecf702c02c06aa370a52d2d093a64d9d34e7409fedd9c9aacf1d58d69663234094ebc06b28384b8672d32e9376f0c3ab6b5cce78e8361ac26f06a60f9868a8bab0c0c1cbe5a1afc4f225f419b0a8a1b28e9203b21bd3cd06edce394922faca57a7166754cf9815da6956862f3506ea319f1e5d6daf74d642fa85425c0af9f920d85e25e70cf20b8fe7459da79d139fafa55a2ceca31423b40bc430fae126bbc019931a6facd5ec91e9e46c33c52eced5126998d7eeaffc762e5407ad3c6f64e4810dee4c872d533c8900ed07c6c8349059a5ffa480e87a9935716c86b2d48a32294573a9121732d50e268d9eb336d2367f2fdc38f2b11e92660f1a0e6e16b500b44cb901b849ed89f19b5a285249e1b4045a1db7fe014bc5efd5023879f74ff4946fe6b8ec7d7a7611dfb774eb919f7f41c1461fc99bab6ac5720703c06755900aa51009fade5b6d3016e0f123603512a3b58240efa69915de505fefe1fc870de863d6a0d9ec5da524027e11d598df55124605dce8d04fe34c9e83cae1c51a4873f3d24356a3b182169cf71452 +C = 89b11e72e54d87de453a91a4f4040ebdb34be458770c11a4271d1b5e532fa706fa5a35ee2e8e29f6f52c33db549a4b5c317c6fd416c1a854ed4113586c2127a320b6c0a56549dca8381c3093e3d3217c1365d60e043b927b69ba9d2767c3d8d05944c8aa27fd2c1fb5b13119b1efa08ad9d474d21ed2680777c6cb601d1de7e693de2c7e875a9124c6744840e4482c8bfd2483e69d902f731e3af8cf03bcd382833951e3be3d2e0cc25ce367ddbd51079651a3e822ae04d3f78047ebde42f2818eeba05f92622a94ad8174efd9ed821c7438b00e53d8afab85a6f67776204d8a19a816a1c8c09b7ea917280e887ed71e2897ca1333df847e8da1e5f76e25a4231e85865ec55a711d8229e758503cad236d70a33c7d38177060420a7d459ace3755b0219a72a62dd19d2f470a89406dde4f5e341689384271a8f00fe462cce39914ec0e2611f18f1a14f05ba59b65ba8bca3083593327893219fc61cf8dcef4986f737681c457c0a5b34bfb5215734db040399f22a95ae1c1b3c501ffb17d0222b67d5050a9d16f21378238a9f22bb7c8c39944148e413e3c7862bed6ffabe1455b01981ff0eacb64babb9cba247ac82a74fd4929973fca7ebcf29fcc297f28d7d26bb5e3aabd26146a43dbc57311bb5a791e8c93162f55a27cc741f4003de58168d51ad7a0d2d2bfe8a7839f5ff34eddd96ef99f187036e312c40f11619092eb7852d7e16f751f9a COUNT = 82 -K = db820311cfe2a5c99438f4131a2f8413952b237b4bcfcad1 -P = 51c5e13721b616344602d097fd75ed90ed701f92b0a480dfe1e32bd8952b5721d14992008d414104da5af7650c391840107de51f1aa0e91c74e0208be4b570cefb3fe1a8c614a2b6cbeb9598cb2177754c92950ffdd20286313852d8f4a1f7602c05e0c477 -C = 237f2193d4446a9e8ccddbb156f9dd29dcd277881915b95806d1a67124da077e3d679342b3302578ffaa2c27f681260f4367a4184a632b40d00384f8294b0e0c665e44ded9f56cba5cf3856414f72eef0a7da9f30dc20dc166a2236369a7788d2ea84f0cfa128ca3478256040ce528c4 +K = e17c1419c69e1c93e688bc3b38da8f0f6b13d28a87ee40a1 +P = b0c616c4d63cfd18721092961ba91758a354be23e03a058c243a5805e69fd341d2855af28882b61ba763fc1073be3fb4da3411a46b5da2ef966a96f99e07ff11c48a8296a0612d0a7436dc362a09c0d54c902c2a06989b9412cb814e23c795e3c92b5f377413f6bc34a723f61d7d6e9ba9deb477201489eed33243bb3b8900c984552f129a9ef9caf72e26434244c51b61694de0ad22da88aa2404432bab610da994d9bad78e067e25f679b142adb523b361218db041026eb8e501d62d1b41f2dfc639695d12e92fc2519031d42ae74c27a008c8dba41960c04023cfa2b5f48918efba2f5a05bda5a36f33765d85b77eceb376f4262504c40d0378c5abf5e8519ecb3be15b5f0566f821b9c0c0076765e00605c5ceeff2e3d69093de0f7515345332e76b5e9366a2c3060576d2659f14cfb8495c11eb07216187ec4cae102343dd8c4a1651fbf0378bedefdbce2b23e5467a72a624497f3b34105360f65aeb354d13093ca14303e6576a7ef7caf64c3d3f3208eec27ffd895e8c55626ce2b93fc621f8147987904f813b9c88768c2a21c3c5fb234d43679361829b0544af8280fd51e32b4924c58404b7cb24b0d862a6a18f7011be7208ea7a818cc24f5e5dd174daed4374880be05b854aad95612d5d22f4a1c889121c6f221dd54121e00f38cdbbfd82ca74eacee3f9558574ccf106511014838a96f7a2a34832f8518fd517 +C = 707986062233fdff09f8b829a536d43c0d67303c4e109d8c021f02139718bca088394b025780ec7edc457f1872d771bc514bc8e7250ffa7cfaaf370d139fef3770628e9f40116def1cac295ec8e56fc5908ada3aa31022e5e49a6e114249941a73fcd7003c2bec38a8d34b18cc544bd96ad48c6e48580da88d3eabfdcef8f7451c1aa17f4a6d1fe1a2a54c347a9715113ecaf6af6cfd59ba0ab48f93940697574a1535c43b05fa6b112e1d615f7b6ab1945e4d1cd3d49ce85721a0621d9d5ce795becfbd79d812c431c70fd3b3cd8719cbc45a0c38779a61226cb05854dd8a05dd272771e2252ef6ac7cc461138541d9f07b6ecbcaff30edc5ca59ef599adabca279bb8fb6f71d8898c0957c933a6c38cea4dff68a343223ae69830ead3b58e4a3f98aa7f61906eaa00554c892b2d7308c53c90cde876baa9a70523d621a96d07a6a6f21308d42352a1ad3468721d2df2336e3615edcec1bd90fc36fb0b866df87fe98ca65996a52352794eddf255a291b1f63720f6282aecc0cb90a8ea35770632f6c7ecef009904beea8534460204443056c18e19e5f307bd3db38470e737cf5e9cffbb5bb8dea07bcb596185ff649c3de4ce635d208758ab47f772e1f2fd39204214f77e89924b5ff8d80a6c4ec5c542338a987511b432f949949ddf153d2a90e0ac0c372a4b23a58103fe361224c5a581826b3317371c0d0a57e1acb1fc007b19e0bb87f12f1 COUNT = 83 -K = 595ebe06fa0bd78c9dad4151b1e3c9565667e82c023fdccf -P = 1ff815391cf4dc13f739c8300ff5a84bd244db8cd7ea9884e2bf750abd963f93fd7db20c3012dbec26939e060b291447f1ba728885aea8ef4fd1af26119d073d2aa905bd6667f02f688025995c213babba9a52d7eedb6cebecbed3435fe8ed65479d78be16 -C = 875364a943da8d55a864a589e2801b763520adea0d9d906736cb10618f1b3ef7f65a16adb6b1db9832de7b99afe625ac540ae30a66a04bf9905064d979885dc6ca88ed233d077f6ad1b2ce9b86d9e5e05a0ddfdf26fe2f90b6fd4fb4bef2c372baf57372d5102f20fea82361856d5a44 +K = b543dc53d108bc1504364eaaa6f02efddb1b1db514a94ad4 +P = 3b014ef122b8f23f58dc223a286af15e37273c4f6929dbb6a6a68bf86ae4d6ee66481a2cda883cbf21484b5d749f9a5361e42b99c122cbf584012421b779fb48fd53278b9a2fb09b97f9812a88b509e06775d595e463403e5bfefca7ee99bc88a07258e947666819b1a16323efbcfeab6bfa1f9ad73beea901c6afe74539e5ca1fd6c9d52cd0bacd7f83032dabaf6af74a4aefe4f014877df1b9f5d1b1ffd484d670d3708b83437e13cf2caffc2f8ebc5dbdd958d483b794e1ceccab434f57bfd14059c4414ae87ee6842a8dab056f8cb5daee3d14cf2d7fd6e5e92e4a58dc4372235189e19a254d06bea012bd84e1a6856ea3c41f8fde03825cb8df9679dc7599d5d4ef236899e931babd5643227831e015e10356483a6465a29e184b1efbcf1920aa5e1c01e42a01089137505322237cfc1fe85a57e2c8ab1c7feff1ccc9db59872cb3ec0e8450dbc94c34f006a10695a1335cdbc64c74b0cc843a55d53dc927817092028266ed179fad58656cb7b553e5dd6b467814628acade583dfcf7f2f67006fb8f53c288a09c97c6c799a530c4caf471f6f231be4e45272c56d696e4c949aba051de799027817511471fb8700f425e8562d8c80bb7d63294e9fc9de0d2e767d16636f1d542f48be6b1932d1e09652763622b27219c93f89a6ad3356822a0a8e0e1e25ab037d21770e7ce51115c37ffab418857a2f2c4cba3bec332ab +C = 2f926e29a297b0fd58bfca023b6d92df798a002bf0e9d93a14ac1420ac5fa6d7929309e4dd07d4e7831990f66d2b2bbdc10470873fb6f2a77867416419d2a82006c362f3b8bc166dc3a8d55e1d896e5af65e73f9e51259fe42164583862905697d9e6625fd5a9992e5338769e7659aecd9b8c74d23701f97dd62b8d01a519a70edfee5b8cf25d2b49232feb8601ea5741ed1a0cf0717cbe5b1f9fa277fd10c6e3fa2fed39ec3f179f85934c7700088cde4128c3da34b3589812e572396f7896057da9609e22213d40fead64d27602f596b808207f16ea8c309934b23d89ad32b19597bfb41a065648bcf3ce0fa9e0c8d41eb4480059e63aef2d60443b07b84593922d64bdc76f636e72820f956b97031a9b9b84df05efef31a0a568cfb55d0e4fba8d907d5034ebcc16c028eccecae1fbf93cb59fa094065d586575e14963820a61a69bf6604320ac9f6131b7136d630d0e573b65894901c6e82ba0be82cdbbe22675ceb1030c2dc58848e5b6c022cd1c8c2ca50be37dbacbac2368410f0881425f653d7864191438af3340a842417dbf422d7ae8cbc4bc4991b5e3ba87630facba06b65bba37f49f3ca59829459c0f0c8e00e0ded64856335523e3e3550322ed507adc590f04c8ad3c8a918960a25dddbe212644b1ef06aacaf16f77180978477ab878cc82fc77123270238607dd2333d22c846c0091f7539f72cfc2f7a29c3d9f25ff316ec05d0 COUNT = 84 -K = d0e516391663f52acbe996cbb6fce85e07e6ae598dd0d1a5 -P = 6bc9133e6e07fca5a64593ce4993d11263c926dab6e4e05f51687bee930d5129c772c85ec64dde5487a88ffe00e0a18f8a08efbad3d915b23b57b8aedd6d8e5f357b97d916aedbff9846b5698f8e59616d139b79cc5add46f5a0c28e6e551bf327bacb5e00 -C = 4b0d9aa995bf7c91d182307c4a00cb3d5b92e56837a8e6a6b9e34b991d031aea74a341363bea18d011d833307ae0b332945122659f6415ce314d4946caa0e02710048cbd9a8f4224798d4a8d53c6cce0490145cf4002c463242fd4f7f47ab298e2a86b9e80d919c54b2a2e084bb5d2b4 +K = b29a42a59d87eb5f4a180630cc01ec6a7a46f41b97a647c2 +P = 119a9b99a9894535e539ae2c4c4d1e0184059f1c36dae9ffebcccd8eed510abfae7b9d54eca7d367ccf2ef0df63afb80efe52ecbc8f9b5998d13e0432713bc60c4d48ea9bcc93dd100135003233866cfd707b3df826810cbc0ea95171e565892d0dd1ad2898f02b95332babf501a416f13fede5470319eadd1801fc8d10745abd18001ca86dc59f955ad2220813cbd440f9f70cab46db8b09124bd5b68a2d699829e1c036ca9f51821dea30120953fd172f42d7796db1f2821f450067a0ab0f4ad21da738b7ec669a83fbb5a52a560a3f7e15e967b1a9003e00347cb2edc6e5eb5774550ced76bc1366457e18f8e6622466bb69555127d72bc478cee7c36a437642b8b3f7520fa5951b9d3a11d06f2756460f658b423be49c4a617a374e6598d30555e216f3b73a5662b1d1064492787f5bb450b006319c072c2b1a44ec86b51872a28b8cf8f975cf9bbf2e7b8eaeb3fcddf0793684fc27e323dd7ea05953b851c11fc498f425b4608839c820effdd12b6bc4c7e142584715c51e02ea06fa4637b571885b49778daf5b0752992aaa26412eca0211fbc06a0eb9471179ca084baf90fbd07338773d1e5a6f856346a900ba210d2f0e01cfe17983ac978914bc34f93415fbce846dda308846742e2c23c460b6235a64c113f8b31ea0d17032ae077f2a5a36cd3aca11cfc852305b443afdf9f8d808efe70dcb898d6870cd0c808fa +C = 0bbbad083c2960e49c5367eb9bad844197d8cf5520b48ea0319a0d34ad8a1ab5ef0e75a6ab2fa879d1e9d8a3d12e3de51274556e0d2b3dadd5028559761f7a3e4fe2cb3cc8f77dedc60aca0864c3eee0722a81a8d6719d2119ab8b67ce18fac8e45f502a7d6670d2017afdad3e58ddabd0b002148038ad8bac9dbcbdbda015df8786b35fd890e19d7c1a8b004942827330c5730a827a0d9405a7ac08e915fceb6f0679d563306820483125e74738558fc5f8c2449b9b2101f4a33a13d12bb03e4dbc953629b49b6ba062e4fb0b4231d217343ed121f6b39d12dd1cf8b6439af61d16ef60a8aae0b3e5b17fcb8c6db94668366d46e2e45fb12635449646f73a4fb15ab6aa72204681cf6ce3da11043b70e5e349b0fa210fb7218e3ad1e4f02bda5db1d679420012b672aa37c972eddfa642910d83a28b912a23e3604874c720a566db0b2023f4a581b20eda02ace8a7440c3a30483e2733fc7a861802e6bc2e0bf0cba04a7f807ba796f5d9073fba9979e18e54ab3774dfa93bdbc6c997395b13a9d330e539928819a76a5d2a378851d0a2daa57816e159b0d9bea14c208b9d2b388c813842aded411e98b6e1cabc608bc2a4f7fa3759ed8cbfc255533d41eb3e7c7bc9b3bd6e0420c1a45fae09f5a037f74cefa08e6d0e63cf588a0147a4a24bca2aa4c7cdb716b6f652c7eede4d5c697911121656be958873df958d77ebb5fc93823dfd0c590f37 COUNT = 85 -K = b78dbf6f6dd572f0d1f8763e8773206b197a0343e7d3c226 -P = a28333846d0374a3f6f549f081765ee633d85539d5b3a3e0f2da6ac94f6b40310bdd5ce3896551c993d10f6736e7383621f2f5be3232635a73d7822776b7dc1e4827ec4876cd2e292dd1142f436e6acbd4dd67bbadd722c09a9feb82e045308b920492e37a -C = bb74f3a7fb8dc29725268500a0436e1918f18fa2ff3b099477be02df276dfb49a0bb94990773ea76009ce6213784204d1043b5769ae26d155596864ea10941fd6a7eef528edb2c406260e580225f637d51a4196e61ebde16fab6e2d89cb67e145d3dba667b4e1318413072533ec2cc74 +K = cb31a18a23c3a9091eb0408631262b3c05a5971b47b35006 +P = d5aff15906de4558faadb82e0f78e09dd999583049bdffa3918b6d421076283f397029dda7c30428db6590730586381b6a246c19d061685a7bcb66b4f1f169d38e25d047d082b70592bbbf584c58c0141ce66e842f43dda0940831e865083a0dbd2f14f22e0e15d5910d473e7547a99e5f5d84d15e183b8a3844af4a1887ff7f025f13f9cba6321a5484b142734cfbec0e5cc78df172b45f555832fb28eeaefe0d881e302365d3ab6e1d1c284d547f2e8e12c3e0031004db9f7d23d1024bdaa898d4ed13164d4c8f484957d92bd6d9cbcb588c680662c8b7cfc587defcf1d03a9d6a490369ac183989bca4c4cd022e2e4958aa7c343a90a2b1b8fb1db10a90f5dcc0bddd977b64725e64895f71bfce90668cf157617be2cc2ca8386cfd5649021b6e2231185ea7a48f205dddbaaa51d3fa785712942de20569f76c718327b7f0297088dd39aebfa1f72152f335327d5458a0f75d4623ee77e0868be3bee051cfc3a0a94e6ce88ce969899a7e66106d748f376bd01c9cbd123fa53cae8a60b5bb11697721061abbf20207f098516ca9bfdd44fe1d1983c1858b6017db9f87321e7cbcc94bfbf6847074f90e81fc89d30aba08e2784e3431d7093643d09b0fd31b1393898c7c9d55c5fe5140f8d296121563da3801d1f75afc74b823bf54828eb34d4e3ad5eba3507beb2eb8d0026bad08d97654c4af1434151963888df32167c0 +C = 11cf0fa7b8a0c98ec9ff8f724ea88c14b167952b6423c0901ed774070592210a414a3a3fd5b994a2f3be5b8664a12aea44e8bb7806d56f55d283e1795d1bec4d8b0a217563bb8cb544f746aab77e9477e8b6a98efb65e448ee187c5099883729508b90201cea455296a63ad05eb3bb37a03a848f3eea6d7d4a1eabf90c4f1f1dfd917f1378d596a74a9922a44661407082063bcbeb75640003dc125b018e88d692950df096211830a1feebc5fea1a2fd027e9863716417448afceef0aafadd9c91b347b604e399fa75d3aa41f4d7bda446d408b51522970f1cf346c070b0eed9bb9b8b9206442bc726a36549a66d5b0c26f777209be82502078c274626da805941eb15ed2ebab8ac39cf895b871ab2fe6337f879d1968d685a6b69338744849a35fc8b1e4fd439066bddd08f4ab39e236f09c7b617af2148fcf69b426b0ece434d6ca377e26ea4af549807483ad4ff88ba8224959433fbf8c5d597ca7311dbd6902294753bf4cbfceaec6087a832db47f9cf3052d42ea1c3ffd087049f38d386f465ae0e022e966ff3d8064ec3cdc35d722bc72dfc0f20feecc96af24fffb873461239155d059390a5a98f1fdd2c448d795ac30baae05d212a8f62c8aa450422ce073757eaed539696e224af9927340e0b9c75910849aa91916bd54f3fc7a4396daf3ce1770295f296493306da8302a4d442ff19f278c517b356a0b99474f8110aff6e2078987e07 COUNT = 86 -K = 66a4d9b722582b4bb5a2dca917b60acbdb549cffd09a88f9 -P = 5fccabd498e3c27bd0746465e007a0468f2c8932a3abc0b77ed2ffd1ba052602e6e93abebe51d7211cdb467ad62586ef449550cd3096c44a572a938dd3e44ac29d700ed15ce0abff771577cd0400c3a3d3d19db33638ec59342f644dc309ffa8256eb6804e -C = 2d9acea5f8823b61704db0631e7bfa5d13eeffc7f4ce5cd87108ac3f344c0751f07e307792bdc7019098509b4d12a43acb40f88a41bb3f8702aa29fccfaee7c56455bbe41025e02ec3a3248b353b8a8b13b116a8d9666061acb8089003e7ad9ef95663405b13c9a99023adb3a7d1ec48 +K = 0874f5fef57e851d774e08b476fb563ff83a0b01efa47d8d +P = 13b0008e76ed56e88b4df6a599eada99b0aff97b233cb4651e575e468f20091c9de74f5507fe432873372c43bf18c43a14df8e60f7706d9d8cafb0b47858413049a12d8a771957d33362130f660cc4088005d25e9950a11fd422df1c911d392e9dfb3699ba6736dbdf7b4f4af4a40193b9d4db6c2228f35e93cdb6d8a1d75c7269759dca27b804de03a779b25b6c88771d5d2fbabb33a27ff39cdd873c22f50872cf2e8179b46dde1e2b9bb91d5d9c51fccc53acbfa036a93eaadd29ab8bcdf66b66cff847e622002dc407023da8734deaa15bef1af35b1921a5fc5bd087a2642138b6d935a07bcf00da024e65e1a337a7fa9df84b81a7396f50ba8ecd22f59ddeb8e4f1a1e85d336c840073bf2d1a7ce367e29b5ae8bd9c606dabb6267b3c37aed23f09e69e78760258be3562eff87aa5350dfaffd392c0c9d14bfae6b53eb439dbd370cbd52f747362d29dc28298bdf6cf014ffe9c4de57dcef50e71a32a9dfe23d703a9bf5368ad3765735017333771f6db85e653fdca5ad89cb6a4375404316625aecc0e72d011e71c6f9b0200c9a66155671b76ac27e96085100d6ae6f56bf3e32c6193c3380e1b50668d8f1a843842a5cec0274788d9ddd21c08675cff0bb605c043953750ab1c2a0285c2b8847eaec3ae38ca33d78b5983a0cfcce51123f7a2f7a56e23c45bf6ed2d746c5d552761d51c976de621006947403cb74984 +C = cc4fafa2e4862bf4ddf7eb043899744d72a063e10507644ddd4cda24a8c682c06011a7c5e7ea97fadefe36b3afce4424db2ffccb22f8649295ac6ddfca42e56b3d026d9a749afdb01c6fad928ba4cfbadb79ca354d33bd0b3a46202d3a62556364a57f564f328f65ed56a8c391a2dbf3733d31170a8363a2ee2d57afaa277dfde704b03cf7d39ec9e6a9704f57a58b61734584fcbfe6f4e603eb18b07a781dc8f9d80d5c8af9f1d06e4269c4ad0682b57a1fba6be0b8dfab7551996771f096edcca994c88f4e4af99b55fb0cae53053ba0694291304075f90bb9241f8cd817932eebc646aa258a8bd1e3aebad61cb865d2166bddc020cb7b2d99c7f76304553194840c94829a9366af6517e3651b7686c7e95e99e18491cd7a762310776acd6ee2596e028eb6e684fcb5d8ced65a2a8e1f0b1f2f1752e607ea98c1acd69202770e1b3c014031ceb6a4edb9d053ff90e86a9eb29bb04fef21812fe9e275a596fffada3640774e866b845ead1f17f705f7a590523f0af0049061001c4cf4ee1309bc59f0511b5f4e30a891ba04bbb50f6bb874dade09ffff6280dc51ffb65fb740d1db99e0c9fb37c864bc9b5328ce2da3b4407c5a0392683eba8751deca4d85ff2caa7386795d2daec45366284a7c580a2c38182fd42cc8bfadc015bd553f6d541b16a0b202fc1bb86848d7e6e9da49efae17cda0117d38c65a1dd37d1225586e9268d823ef4d0123 COUNT = 87 -K = eef7dbf701f8b07bf4ba52d81c042835821f02692ecf19c6 -P = a8e08f847c77e7340df708bbe8db016f1fdf5b1e848e93d5993688c0e478dc06c6ab4d5b18db08898ca738be43c3653b97a6a9e5c8fdfd9cd8445f199dcfca81c15554fd46f166ee098acb3a06a1b8dde8e2d8d3257ba25062ef01a89fe88175a6da0fa956 -C = b44fe5fcf0e44eef1f489fba447015783443318ade7f1adea9d66f003570da88138e4b8560a5fa8ef3b65bdd356bb9781c898c7ea5bcae41ed027e9bd60eb5b6c5ad0aebc1e4a8da3411e3a10f025ff44fe609fddb0cc88134547e3fbec725757c55915b6ae62e5d87e15d9d96f243b5 +K = cf59a07ac99226241537007e26814bbba47920e4db59fc18 +P = 6b551c99a0bd18af3af2a24af8c476c1ea53d9a59556cc6712ec17d7019fadb3f3e1df59d3e10e14e2310141b18ecce4e264373ed0e477ff57804f850c1ecb719f8b349d0d0b43df8ca7c451d9e97f9ee8cd8691db04ae803a5e72df8333a4ffb1d5916bf374b49c81fe7268d9d22cf03eaf90b7238b6d72ddab3d2eabb4b930bc7b315797a5a163c3ca5be9f41b27f145e5602b9ff2d09a20af472a44b21a85f047470dc2cb364701b901612946eb8357878d4bb7c6d86ecc1bff5c343ff59f8f39136ef74508d47dfc8605bd0609aa4c102eab3b25aaf2fc1a8419a4a0c78d22506649bc7063c501789f93067020d6a49712e87c3b81afaeeb762650dc09a863525d3f5410eb97a0d4cece0cfa440411027284b058519d28e65e3f6612e27d2d74640db2a69264d9caf88cf24fc9da13005b13da491771f1eb6378a60989e3e911f4083d9cf580714ac277ac97ee49f828391a5f0f99ff699f1a410648f8af030901fbe84cecfb22ea602c459006492b71b8a35b889d7ed29af8f6edc8e0893b407686646008cf324d7599aa64165d87f20420e6537b919079461f62bc27200bb805fcde8320ac294920356ebbed0a1771b1345f62b5b57255dc6e36ce632852531a7368b33d7ee9baf7e5e2c43fff9f960feafd637641edacde47aa892b5e7f438e739274fc77ed6a9952433f3c26d7c2cc4fd20782caadc72c421b843d41 +C = ba2ca70c96851c5c3602d09d70b0da17b05a46334c5df276834d74c990ca9960066b5517f44ac73495f18179304d4125beeeea4d4f1b7e90ba10876d8a992ac28d5ab28b0755a339a8a48b736ab284605b10ec10eada59b966c313b9da8b6ffc3385418531849b2a740d360e43ad055dc83afe91e424060bb91d1cbe5ef56495ae7f1a95706c205bfe18cf9ee6e4361b78cf10bd7f5453f743a0e05bdfb0f52b96e6bf27540b1b365f121aa99e982bb5943b9dea8334d49dcfb9ce0c3f74e5794277cdd2c3cbcf2b8ab4c520f7a2929890880cf4bdc8eecad3a7003834055cb8fc90e3742d7f3c6996a9a1ed5944abf419f30c0c6a3e0ccbf048c54cb99d991863789dee6a4fc1300ac2adfdfb8d0fc338436b9cbcfb02c70cd9ad26bfcf75e735e3617dccb5131b72908ee91c4f8c842476c48248013caa83f8ea9fa5ea118ef73d3df3970a873bcfcccea8ec8b5b7449753d217d2adea9945becd5d1badd375d0e17c5a8ac844e2c8d87dda9d31bd22048917a71f2feafffed1678826dfcf91e393ced69b08e98a3b2301c7a8b1fa46d63fb012647077f0f7c13e3d072176a9891dd79496d5f4df5791baca935faf351541e833d1bac08c683a68c7919612e82c4390b8e8bb758e0ed55f7c9e31854eaa0936cca0cfccd3c27cf77aca116d55100d364c4b74f304b506e1339b46f198add029234f17796b32d8b2cc4478f8ad9381f4ee5708e6f COUNT = 88 -K = 13306165f98db1fa2053ec86adb982fc0279da56921953c8 -P = 929a8be6f1788bada4175dca2fc3d8bdc4a9d27d8d18040fd85c83157d76d80098ffa18a8a3d980f8f293dd14f3b86cc21fbdec2fd65b641da071f0985127445cde5e3eb4491ce61c5530478415288a6e694ee56d73bed1cb57bfdc034bb5adce7678ae483 -C = ead49b7e7e3752c1d3429b1b3eee71f13afc220ff3ce2fc58453575657a757e076c3753a99b5b86297035c9b5e11fec43c42f0c0c36dd5dff764772216dad16018f5db852c024937e4e603fd8b85196daa42a0d2f7070530d47473a2b0eecc61046b3aadba96db4bf5d8e813ab616f6e +K = b070580897e47e3c866c48533f325b927f2b01650060cacb +P = af169c599ed9a53ec3e8bd3b6cfadc436a389e458ebdaa6e2b5c1699d925f3d7b967e3a11178fc63b04716c9c391fab73437cbb3112e3676871cd79c0ef8955b14c29b3307fee50a57273ec0bce072814d7e3f09f68d9f47db88626278573a4e71cdb4dcabca4ee9c0f6bb3128634ed35d73b47e3e0be2e62865e4327641f0663431eca10dfcde6dbe9221be1e166a2a3529d512e9064b33f7868b9be4d96163da82ea0a8f73a131da888adca7200b894053ca6aeca110a16023d6d90b14380a01db272d9d082ef3ed9031852c966ea5a65b2876cd3237ab6ed01f8af4855752796b6c8200dbb911df7b585e8ee6a53c822e65acae5f170500e5ded9b76ecd4dc80bfc0c397b8ebbfe6efac99251d731ece9e04f32ced6cb87af00c8479859d29965112748f94074887eed72487cf512c23ce28c7abd6e954e5a96bc30baf52cc6762a2bfc075adc3c871394581f0a6f3be076ab74867003af6d15cb956d12b751f7ef4659f0debebdd1bd6b8d9f52abcec3f10c8d397c06a0b04c5eade5ef99cb63ab78d61cd95647a6ecd6de6acc729a8f070f2d42aa54a5b9d74580caf67060a3f54d346ca604ed8c6e0ad888fcc02dcee9b9bb65cfca448c0bcd723bf964924be896fc1e13fd9bcdf92a7b7564f8b6e5b97c2e37622f533e86af5ca811678bd7fc8704318c4f949c3bdfa77e26034ef024453fbf3c1bcc94c040b4958e94 +C = 2d74d66288025812c3fb34583145e543671118f0b6b2797878ed68feaf62add58f79f1a62493ced3867a8d1a24c7d7cb6b57a772a066a833a46ac80eb07679567ea91610849002f5e11d989c8ef2154fdee1dc37ab1c70219e5fb9a4c54cdb41409d05d629066c6be2ee8bb7618680241d2a74c20010520896a0be1a85d423206e3b2e340439926bb18fda45f29af4ce1f434e2aaf0cfa11c29d98cfc655e8e1d244767f34ed9ca13526276f9a1e46bf67a7b997ebefbd2375e9bf27e7c20ac229fe69aaf87f658603927d3c879d9b70667f158841039299427ee6bc3eec6aebc41d55ea3d23bbb9e2af59218c4f61d19bd1dc185e4f6e2e8ccde55cc15a020f30473be7081135068b01ff561b81dac3a38d5dc036fac310ec61a18d2f134985efd89dcb1ddc7095abe420d7265a2d191bb9f22462f71b06a274633e3a16561843dcc54756cd87d0b0ede2b2b0f0cdfa059238ccbc3bc8c54f6c8bfd1ceef07e32440484c7e0f9af0aab9f7a947e3c5b4178d943ebe3ab64ab72479d7e403f9558413b6e35d0f528d2331d0dd84450f0bc7644707e93677baa6248e7da4bc64cca5f5670347a1250b8e8bfab08509ef4b54b3ec268a3bbe09ae1a09499e8db5ff17d1b75632bcff86487252298610f87af00ce370e045509ca3c6900d1837c16632fa77c5e5b9bc1bf7c9d93f66cda3461a6e702fb3bccaa8d4bb27dd3d7b0a40141765d5cd442b1 COUNT = 89 -K = 02f2f6f3251badcd54693b7fffa9d90d75444cd68e916294 -P = 38bf68c81eafe96cf7fc5cb4c43402a47a65ab9120ae70d3c484ee44b7a2ec5bce079768d57794277106fca034d176bfbacff784b2fe0b9402fba28a735baecd5e009b47b7ccc36bb579c0fd46b81dbd724d216c356033ebd6dd01a1a675855f29a64cdec6 -C = 813a2fdfee9d20f84339d66f718a5eaf7ffaf0fe7378e70d4a324fe54fe3c36911d2f7863e3771077082367b0777e345067fdf84590ac0377ba2143a6709785ca1128e674580ea76c787d89cdff3c7feee8bb634617271532f0b38a14e375fd02ccb0fda1312bbf8096958b87885b608 +K = 5598a22050bf93d279af484e771b9ba174394b8169dffa91 +P = c126cad939ef874425445b017108d2cb973c87f7ce858e2ce1981c3cab23a4f15c937f18df65b98c30a43e004bd06ab14263949a828b79bc825ae2828c89a915cf2ae8f4d19d2af300f043a310b39bce8828ab92461292e1cfd4f6f89f4082404e0e6890f1e78377783c7f641902ed73beb1ce0d2b894469ea30a548d19f69310d86151aa3f51ece281e682f768734fb8eeb17363d3a782be4ff1b87a3f140e38383deecfe44b526a9f9f71d255af1f5d14ad1302b99a18e79678693489eb27ccee47b68a059144064ea30ed3ccca46f3fd6c81625e1c7aa03b95e0a88c9221573a8198c9d8c2e7e0eef3c6870cd592ee48c40e8aa7f51db7378ba80ef1aff2e286dbd4b073f2104fb7fc81ae833533b6a206010bd81d19886db68e8acc7b84f859cdaea71dab6bc98845a6cec568bed2946107718070d8bcca1cf7f4471097be1dad126351c64a5566f956acb263d7921c9f3e2468d9c0bd5121e189f85c2eabc46cb305d1250f3c1a4206217d0679258e28d74556054898cdf6b76608ff27f90d313bc520207b2dc66d95db37258da1c49de36b0069927de12cb555f597aa0820887b4abcef3de6c68ef80a49fb4316359b9d9dda3b425e3b3d899698940dce777610425be751cc0a81a07218519682cdf0e25bc2d5a38562b9bc28a54952a95dec4dfc07fc721d30d6f5c52c8aac38ae15f25c61b0338fa860b60cbc2875e +C = 0bd91425aadbf74d7afe9968ea3bb2e81549024f291507ef2e4b5955c9f1154ea5aa2191bac4629455302fae25fe574d4cb036a536d21fffbe4b91a32146ca670ee8f93d8b47014649f9b91a54d0bb3fd6f7608d6a389a519e5ff05a048ed73206c48d77aa9a6d6288c6168411569f4c2a90fd7dc51ff02763306371db1d157a44db4978c5c0301295650579cd19fcdc5435b94da5ed2899105b41b60af2fd69c40e136ebed1887c4fe2ffc6c746f2843bae1e9540ae39beb90d42be12a5d242e0c22f3d5a4a174b8c3a76d8dd51771d74696c66c2c42493b8ad114d1cc21769d7fc448e9835d0870a033c9b2531b151f7e09aa8217e672caa11af1817874e5bbb2a83a43ca5418d2a516502d820947d55d6c19840af4b11ae8b54f10bdf1d5a704038779188bd3006f989aee31f8f0df82bb1910fb2f70d0b7d68c49b45ee109b9c0fc6d4fb2b45b2c647c95a5daeeefb99358d55724d52770e9de842c8f8e3cad338289d6e4e813bc54f64fb18b7110c2ffea48bbc10a8556ba3c2afb62097de4f45d88372e64198011b1f66b0eb2411bb2009296854d273f005e8ac97e8414cee4fbb1f98f1f9b450e749a6a050402a3711eb533ec7879ee9e71c9f75dfe3da7e5bcd311a2f5651beea29f46f4230e1c71aac36029d48f0b33f8f85944b97597f30045619453266257d5def27b3cba7aa6079051bae3147bf9d80f0a02086274294dcef1dbd14 COUNT = 90 -K = 49b587e323ac630de1fb5b61b9ef358e54b61331193ca512 -P = 0121db793e0689cc220a6c4e634eb99777377497d146ab80bdb374cf2c409dc204a1afe8995c4ab3222b5111a0f56c320913a0461a186bd25e23d5492a13d3f3d367b51d129d04d77251900df52d98ce850e901e080c31a9bac63e50500be29fdace6475f4 -C = 3fe500f40e7d0b736637647678c0f83bb552b45082369199a2dada99c93e9768013c3410ed0d06aaf045748ffcbb048d359c8c7e4480c04d227774108ff7c5c7919cab67ed3dbda69e49d603f4d76ac9cfe0b35ddcf87988085944ac85aac4cbaab7b27182496b258e9e4aa11ebf3a66 +K = 613102ea5ad03298cdf2fb5b66c7c50ea6c5c6d212e7503a +P = 8ab4afc8ef1a8001308fde6b167eca9154929a30405a4cbf9a0287d746fb46b65eaa0b42395eeeea780018088b1588a71d31fa803048f2d1612bdaaa7f6439ee05d9a6c2a5d47e5bb4e52d608e1c91a199117e86fb92e0e3626db834c4a9adc351d9d8cbde1973e4b47674fc6a09641005962a3f89ad34fb2743792dd9b2ae949660fdea2c3f0782e70b5fe28230f23f68a6ecab8a38954ba173d67f5cf757ab2d1cd87e3c479f5d5c93082acb4e73728c7337f765920d6605078aa8c7f14ad88050e641e7dcb6ba24cea138d42cd757f8991a6ef39d24cac3e9a33f1425c18e57ca75df11380de41d5699ef650b52fa6ad07d10b5533f48a25a18248d0b36a97a98c5ea09dcb95f7ab5d22acf701cd5c788c9ce3031f772cc74bac1ce1474a623f171ccc3bb80d17f3974b1f832346f162c248218c6f3db90b2d264689bd7c393ab95fe33b9e86db6a454161f30c28455c898b8565ec755330c00d1256030960d7f95cca90f5eed2e3bdbe2755592e9bae40e28464f68e2e85b4e5fd2f75eeba364ec7d31c85a4cd7f6c4a4b2de7ff5188ba04c1ad5cc9c41e9afa018a3e766a414c9ca9f56a251743cb2ecf9ce22c4dfe1ac8b144a4de40d89d18019e9c4441a91c41dce670b45d308ea559b0ceae053af3c33640f3d9aa45ab84f0b1448186c96d59f123ebf57705af2de186dab374b2c51794f65cd8d8c1428a4ab367155 +C = 2dab85837388bde1c4475ad31139fd7e74bf816e87de6f43ac8d44d5b6f33f0f06f300bba191461ab1359470e2387c3ba0698738fdad147c49d6c1f2f026c5bf1806eb6e8f95d0a2dd198e7c4ccf5a53a48d17495e14828220b528e1923c8138c17f3d6c9e05e5d0117d4f006d072d746dd1a50687483e1a99e83706711bb9937c161a47ff0b46ac2b463a439da9c2cac54ceec380db5f8465382b917699cc8d657f4663780316dd12baea38175459bd7273c25fdbb693a5120ba6058f77ceda921c03db39d96c65dbd5e613f03338bef524dadbe22ef791b17afd26cc7c677c65b77765871ef85d5617de0ebf200f5a48062c4c4ee348af288ebf09073f1f0907542cca29c013406a8faeed2ab0629ebaa4d5d91cfc259eb9711f821a2820d787ac293451c0a56eb859ac0b54f74843b5d52480a4aed214d3b63d9e57664f4f9daee9330c0249aed995b731031e8b43971a1b530df2f047ad31e63cba542a0558763779e38101620bd3b4490879eb87a3d6aed9f9b907cf558101e30bd6b0c2a156bb184ccad3e7e09dd742238f86b13b049aaa63cf60ece30502d862510db020cc24904ab484386bf70d5ec5753626f8e8a34f0acc827a2b04482c381d85e5d3f828a22c79320077cee718e340a4381d413391b1ece46562fb4f85228fce8b3f22bdcbdb65650e1a0c2c46f492d1408d3962f764751656930e2b4a2c4f1abdfd79563a4f51909a COUNT = 91 -K = b40e095e30e685c8f3240a219ff69673276e33b3b1a2fa29 -P = 5ce440068d610b94d344c224b08bd794bbe04eeb5347ebc41dd11c6cb99f7be0b756f58d0d4afc17f4f8e0e3c405172b20c7f46827f1348362121bfaf49c924941c4960e3e0bbf3b99feed68621956f8704acba6dc83b44c4b55040b4b071ea6e9fc977c97 -C = df29ee2879a1622335f62e9a5c30b387779e6cc0d2a5f0555c45c9bb670924ba9cdb3c3bed72d8bc92f3a96ca2bfef411b32ad7a9c3c73c1f901d566b56f38a7c3e8bde875cb99a8e22439e1b1f1aa307bf0e7db2f2a1f88245f8f7351f1e11b1cd875c588abd8d4b524087da309eb57 +K = e01630275540444b3a56876d8a8b4a6e0c2895a03bcb17e4 +P = 6da05fb0c8f386af33d9af618fd3f3cead026dde3088d449616ad7faad88444888b6dc4b6a59d9ef8f9a394339dbb0bb56606b7059f3fbf6e8788da984da2c7cdfef53bc09ad98e8733214666a0c802f82095669049cece975540ff7cd854728e9f19bf3fa60e1f0f58624f58f5760db4995f57f66faa7eeedb8c6f0478df48ffa46aebdd1597224803b25e5f756a30841f0873ec8019468357d5b4d1c14d517f0b20410ef83dede1e41dbac1df9f2f05245c57c30775a13a52d660aad1a4a1b5c7483b299266968c687cab9aeba90cae5b46339beb4c8c9141b55561a2bb5018a27d13bd6124d23fb181b06913cdcecee62df187db34f59a2e84694f1823165689ab4f826e13d235bdf661cab4bb60dd9a9498a3146c32e103e839f964edbdef7894efb14c82aa51a130c6a57f789617c36840286ccc57178e4c4749c9a85dae81bb35a3c37ebd6edfe133e5cffa664858eeffa70cb326ad5878b519bbe90472f293c3825d52a1ef2631bbacc05e52e83110b191f50708901b9cf98babe7ff657588e0803aa7ff4f8732097ff21e69776ad702b065a6f4b8b27dc84efc28b8a54514436d0ac4952d233a4445f0cb7dfd012a5cdf73486840fea01ef50a7ba48f39dabcf295b3dd05bd7b88d751c6028fe1ae1aa29463bfa9383762eae4eba3c6b8c1e0f202b7e953e11a6f9b85e742ead30270c9fdf8b723b5a1e74fa26178c +C = 81cc931ea431d8207d21983b60615d8cd78484b06de949f0b6a3f3b8da518a7ca7519c12d918e8b11e988c9f0e48bac424d6a7fbe45992771b7d9c88a6ff36653e84a9714a8ec292e77ab7d5dfa89becc52e34a26205a43e684c910666e5d4f8cbe8bca89571610d5204d280c4fbd20829dca42a16b2d0347acab12912daa003094688a472a195798c18f16a17fa857c32b433118f3dff6df71cef277ea57530e19ea21f0291b14bff2ee297c1d64838a1f17d7ed4f6f8ce178bd4eba45e5187e0bd276d890014ad781fca2eb4755c4d78ad4e8b74f4a1e13f298a2293c5d0bdf331568649532eaf591635bfb0fa4ac6bae941f15ec6445cfa29f9c47d1c9c657b3dff3e2af9a2c97a192729f7952c4de77f20267b17920f0dfad25d3490c7ce24809d160b0e112a9f47796794702fc2b5de725f30fba76bdea3df3c616fa0d025278ee6dd9490ec13ae5b2f2c84fba73ea4ab0d1d0256d0dab41a9d146e118276fb7fef686e4743c0bec0dd87e1a81fedbea5998d7d8a5e838194485ce5f7c568281fecf76a9ef2ab85ddd30ec71685e436f11643621badcbc5ff766ed423fb2e26412a54bb803047796bbe073d088721855526c7ad0021151bf2b476aef3939cce40a680e14f0c8a9567ca2b881524278af4d95ff47f3a182e78db757ee33f966f07ef8e12f0f57ec83464e3c1517be522414acb5f30cfafb54e6eef962f02603ee5bd88dc3f91 COUNT = 92 -K = 9749cfb2cf5b50e2245eedb6d9a0c5133d46558fd93c6030 -P = 1404cfe0535d3d49e83271ada5bc97f91c4bac7964a4311a0aabc68f8fd60a2ea30fb8ab85768fdb8c0fcae5db682c552270b0256ccaf2e5ff193fffcbd567623d167ccc6e2fabf433a511959ad0c6e1addd7c2d8ad2a01d834ea26955fd199ee29d6b1146 -C = 770e1a63e6ffd53d96e64e27e7ad8b5128df48708513a880f7d3b958e2df9143e0c55227a04d21b091a9c18b0980c0806ff6c11404ca2e0cd8f2845ef19ab448698f6453c1138f8428179eeccf3fd448499420e5f56d0f33dc0f3e204a5727b50f288bcd07ba26b2e03473756c485649 +K = 2e16960da46d848df7042bf79052e7c4311aa756bd89b9a3 +P = 7950c48310fb02e8e4d0a263d85feaa65894dab419902494223fa45899343d8ca9a99768392843fdf362b15717fde8f5c237fa0eebdeb90f927022c499b3767c178dd755749b92d8a3a4cf9919cef905131547cf585b0ff52301e297cf297e1e52263c7ad92d0ae324fc84d28978de8997efb532d687467ab57b887031710c0a75ceae9fcd79e9d79b254da0a745307c15b19074e1802f5846465656f940fb78444d802bc72d85daa4b368952ff88ec69c4cc6eb11a6325c082dd31b0bca6315b62a097c347cc02837c1ca5e6ef25a807914f54125a125a85adf6084f511a1a5ae85485b54fbd100862e7874b96f42451119e133b2a97483d62bfa3c83374449798ad66294f48cefc75dff1a781e3ad643ca3ee04c93832684eb9558b9b1270be5ce71ff54dd53d49417cb81ee332a230f12e1215d766bd0b6e74596ff864c6b41834777bd4db4d35c5ecdf7e86e1442f161885138c07287b1e43c2fe15ee314e042375bd89e5922206e20b210c828d315cb4f30f05e6df0846ee79453e581beefff49f55fdb61270bbc1efd36df1144923a9885e2dba5312f26873deb4107141b9d21a3a9d810f571b29a0f0296cad3c9cbdf600bfc37204907b447323e4254245bad9a6af2736e9ecace0bfc0abe28aa40094133e32d77231fb9216302582f4015634bb40642888fc69a6a77600c8005656f4a89d5478f7a5102b19058758a +C = 413360b256545dbd5edee5084bba772557c57ddcd6415bd85afa6b94aea0ac7b9bd5e36d58db83f6d000c75bb7c3b9ecafecfda3516e4362ec530360342580f07ecf2cd1ffb69af0048033fa47870e51c03f9c34c6fe513f902708f5a7763aa08097d1b4139bbaf5fd52bbc385d9e60545551304487902e7fd5a03d387af053daba31dd52bf96fbe9a3d9f52ebb9c5089bd4bf90e76b13e3495fade0448cc35718adbc9d76bc6ffcc7ced478cc90bd5c3b07b4bfee2c722457cc15ba0c808b82fb9169c10a25cab07810bbd6a6079eb04030e8b4817bdcc17a93d7761c08f0ebeb1cbd547fb795d5c57fca58aa6e53305b58e4aa0bccc24de3b830f5cf9e821c132daea25efacb809c579750b7736e5b0754ff573ff6de39c17422d6b3d0f6886f3a148eb9395f678d52c7385563590b101c39f3a14ba58a307cb56520728083ff60f70ca3c1dc2b663e534d1c3d23b89150e252e538684c45562717e0d5f57e941119504c004637e8a69f73f23476edf7524bc8f68ae8969bea2851e07d14ca10d5a2b35d45e93d9388abee6db9ffb9d3a0bb033c4b622c170f4978b790916b4f48ec31f04ad2f848ee7fb8b5d9a5f1f878d4138afde72cc500fc69911b60f0e5299f92af12ef9e14fd08a8a2b3653c852aeae1add5f7cdd5cc66c66f17ec6fa84e7c49db3f2aa1f2d27925022ddedb78944d6af01df1296941bc3fe27fb24b724b15ff393ab3c3 COUNT = 93 -K = cb3ec47f86a54d7b1a8a71318eadb221fa367b28041e21d8 -P = 7a49095603fad12cfe9baa3af9cebd968d5fb0f7ba78784b3d8d0509e75346d9798e24081c631ecb4b1a554444f39ecd6099ef996abca9f0146be61f92910fc4a42e1ce2d82849dfbda7fd77dcae0b6b91f665f3da21f167bed1675e90932331f57d098e57 -C = b46c41d2d255f372e117a4c926900ab0d91ea69e3bd8715356ba8859dea51a3103e96145af24b6c8d28fc49f4cf06661e1f1957361fa8a804644272491e2f2d914df7387e631395d6af25d93293b2710f331de3a764dc9775cc35e3647c466b4ed347c3076691196064192515a8d48ac +K = 6d34911fc8a9f2b1f330313ed7dfa8e5fffb78fd18a71df5 +P = 6e8af325a6d9fca5bf5f5c8ab8d615f4dd5227210d00d0b497ef79435cc2cb1f7c42b3ab9c70598796cc51cf8c92778862d4c14e9668650980a405b7fc001e3c0034309c3d797398fd5ce81276d953083e5d98b5cc089f9ddfa5e6936fcbb293ebc970d6946986e966b3122c82ca409c223da8905b7339a8fbd1f452df1cf1748cc34005f0345196a9f18f857173f3572091b5033c813af414ce1ebb98fd5d96899ce5553fa0daf95252fa1c379f7a49506ea1ce8b589ac46a94d08ad6905be1ce43f2c7dc9df4aa618d93c4ffaa07f1badd042b33ac6b8de76704a60e8685291f37dcae19719389063b72a0166c49ed02dc973f93de7b2909e14a7b7591f02b94587f7977d62d098f63af3113aed11b310310c629d21de82b4d2ba7266f050945ecae737b9cb52d1c7da5db3e30e441f3d3fd5b9ecd27aad730624958d9dff2d84d2c4c3a77a2b09cde499570170c85f2d34eed7b474c5069fee9b57ef45f53dadeab19742c29d552b5259bbe54db45cbde78dff60f6e90d58d7a296cf9143b535d19e2d7a973448833fd2f4a9938cd42d1a76df051f6e3de3ae73f509c4eb9ec481e731cec634aadcc0cafa3e792d60ef045ca187f0ed004f417afdfee3acbcfc9cfeb6420076bf94bbc76353296b9ad3f2f69c31429a77bdee40418517347538a18177685429705740df83c74945139ca73bb397ac70b4bed833f2ebb9565 +C = 7795bbbb6bfc277ee449a9e9d25567f35b94845b04c22a4f25d0fbce1148f31eac75c663d99996100cafd92c07a61f0d7556a81140a2a7cbf6f7035643d6e40fda28f478720efa8aa945bdfe1283797527e93fd2411f768494dd32b9835fd2580f62da3dd9654cc083d9b19e25950b0a7c44232ba29eddc545ee30cd4a870dcb5759e728c0e97795d0b560e1381835a02c4c04abe74fd5feb4e5a72dc40d3aa6cba08c6ac96aaa5e870424a98fc39c0bb6d5b52bb76dfe79712ffb6d942221d0aea9feb68e20d5feaccc059a2d7a4ef1bac1c9cbaeacb15d9760bfbbd3ee826af5b6ee3afc2ed3ffd86e0995aeaffc13a8d68d0bf3e3ea9cae10c2df9126f54b2d0b8b695e8b82bb4cabf8089e354f254b4112255ea193d915c924b84ed2e06cee9af5336e8d646797db75b2ae59667147b53fe92b2e74e19bd6534690bac693376aefcd1289241c5de795ac67d3c62f54a20810a8a3d3ca230ee26f5b50a174494ca8ca405192775ad6c7fa78cc7e29370448975343dcc483bea22ce258d93a3f5cc8a2a4ee438c448854cc763457a065239dc7179ebb2546016942563690a15a74a88801945e8412e60ad0fe0fa4da32ef9e90066257b9086b91fc082d660b411cce4445b871f02b28885453df019dd0114466c334fd4c7aa60bf2b236a994f5a873be019cf614a91f751b5e1a29ccc85152b5c940f100485d9319da54dc2c257c4b07f61819c3 COUNT = 94 -K = e5bf7a72aa841441404d81f0ca92dc24ff69bbf226616752 -P = 5a00f7fbd431fd6e83cadcf8eebe3e785e8fb78ddd631eb88cc34d66d878f87ff1e4a2e72d23cc90e96d35b6a3fa740d7d35211db0ec9719cdc71f80e7784f9b6c3a094996a9e1cb773d7a56fd7dbf2fbdb9762c4f28211ce8af17a0bcf696704880ac48fe -C = 4d2b055021f2f0b1ebc93f01f5ef723055c6813455a050a1403d4ca1b5925260943a4a399b868355033ccc1091061fe8d09ab96547aeb91840e31d75d462743af3931d3e59d521df6819c63c6e336a0cae5527a285a1cd148518808597320889930f905be4100f8735d28c737094fc72 +K = 6cd1635e437df41e0deb054f52e77273241289af40c97224 +P = 0fce40b4389de969b4cf4ee8faad538b2bc62941ac75258b8bf44a763db02900769e1b585c28f917e50fa3b721d290785deeace434d0f24164e5bad1ae7d9c73fe607781194f9cfd9d0d83e343c25d93a62faa2bc8bc0db1fb329c8b448941f41fc48b38182e9885671ff0c59560a81f286555b1ce8ee6fb854fa3e10a0682691a954c8e0c83c6d829edacf3eaf6d640f70e00b86d25631b1c6388e6a2c26cc980b0d6b9f5818804de8410fc1fb7ab7a66b00ef9a8c0f63d9e57b87ac5e424893ea65545527888f89f931e9c94c5081d16e827b21f0f1b649563295d460a0c47e4d6dd3f7767730eaab5c48c3ed8430819fc45a93610fb42684d6ae3570405f97b32a37c64cc8cd274e055dba07d573151b9c7785711ab43fb96d447a1e0aa35f2a086b97ea887b1467e9904d8ad955396d6c0a188fcc801f70ebc08b8d3cbb4ff8c32f2467093477e4ebef6e0492a03a8ebe27947d8e3b70440479395ca1be1ae2e9a554d1e21ad302f845cf80e1b7348bd973af7c26e5c8c2ee781822937c5db6e870767e9731b62cf18ca51d715dea9cd47eaa77b93636bfb6ffdb5ba5b510efb75ce0f3b9b63fb19702032af66efe6465855bcf3b1ce66ff34c663db65ea297c8c911360ed323b285d33ac253fe7eaf15d64c53ceac02743669d230ba00801cfc14ede6c483acf11315604eaafab87e7622499ad2d9857003378d0952c97 +C = 8495fd35f61e4af73bb166e108bc78d35a5aebe430010a323112e1802a46ce12bc85fd65fba2c75bb2fb0a61bd208f618b719132cbf19b9b4318aa6e6a5c084ca8daa79992a2c88437b58be318f9da6921ae0c0c1ba2101b392283f227d17539e2bc008477446bbddefce0d8a234c04a2a9469185817749884922a658f2d2e355748f9faa1b52b640db8665f798256f5077e416d81f10c03990b23898244b8168e475d8242b5db2f14ab48465891ee6164f7abebb70b725c9e4533814d02924e688a6650c1d3e82c281df1b37e55753d4a6cb72433cddd1a334ba81cd26b00d2941165480ec1bc2bdb14ddca3887738fa32c49a2c93e19fc81a3b892551668d89d0b73fe7a4bd9b8c2d8a622207d4a588ab92548a910bfe7431ff0efe7e7a76f63c78cd04d3cd9989bf687c668f08a86b42b8b2b6de824abd6b5375c62a6682412e9699334946cd9167cac76f146fc9e058398b99fc88eac0199098adcd56c525f301b9ba78ca96910ff55aa27c70cfff849f7fd26e6b64a99c79df848a32644266d7f4c598e7ec0e26eee9efea8d15f41668d8825699ea0db9b63ab2c6d356f2bc601bb3f33989d25c28e1b83690e03e72419cd1de54230d0ec821434c24dc5fc7377afb0a263a8511c6f6e610eaba786e397ced8909044c595c76273ae52f9c15547337b9a1c06cf565487c67135056c7fa4c1daad17de6b14d92ac90418902d66d0f7f3fba986 COUNT = 95 -K = e29153e534754b8dc1094c6e442031e52f45de425901350c -P = 5ec95f35e27b5be3266f434cc8cdb345ce7fddd65e405327223442b651e6f01452ffddae837c14d01d3a8d41dd4fccb8f615118d006e3894ffb6741351fac7de52f037a8707a118cdd16ee42e679886ccb7226eb77d4bd6f7b50f724e960633741bcd635ce -C = ad747af388049bdf061bae9737513234c4c0261674ada5a9d1155445188f8bb37ce71dd807a91db4315f72f36ca10e3763297965ae8e73d9b5ad4bf407902f8e3339950e1d8ea4b0d8ad730cba3c9f079beaa9a2fbf4f9021bf7bae2f664f690f4ea81a7f09985e810540b9301b2c222 +K = 207c5447dd97088618adc5af3cfe9f72d61cd5244caa340a +P = 44c7109ffdeb746bf0ac94df27bc4bd313a0dfda4f1427b16b89c4b8bb5443956dcc17ab56b750ec55bf6c329d7ad75691b5159e8f43a1fc7754e98b16628ccafa23459f2b61d80129908ee8e7ec02c5859a01276fbb823fcd15d2731a73ff1a6e1b9b8af6147e924a132d926b307266fcac1ab74db8541d51a9a57ba88d81ade96cf042bc42ea94ef718f22ca128f4941c09484ef1bfd1892042f064a7df4a3878e4a8b8c73a0644a908bab64e41cdb2ee516af380a98f58e3a6717e612bb898f06edc3c674cd8d59dd7154b7b484f69a3fe7f348fe84bf6de69cc9566f8ce67547c8dd3dd69bd1c3fee9c96d780b7c0239c5af83cdfa8b60d29dc27714548e65f80c7e3f2100836471b12b0c44ca9da21da022e85edd1447d2936761210d254f1e451e4dfcdcbd429de012d99d02977d1382c451db171e218e36d896e3916f856945d67b81681a2990ee626332df5432f9444d6f5832e7760f72d859c825f3eb4e9c5ed9251093814315b3b8bac056ac0f45c207713827a9bb5a4333bf2683e641c171ca75a4197b2216e20252f4dbd51dba7ca4b25f898f94daa119a590117dd2df0efe71d2668ff0a5e61318d082e38ae4ee5c11badff36754aab1f099b7b1ad30cf033fed68a2d33e1f43d101d46ff4429d8d4498266cc330d14119e1e0887c7b57e21c1d050bff6b8a0a16aebb0a5a238236cc00606d3f7b7fed8cbd24 +C = aaf87424fd9694fe102c18fcb814b6f64bada18c09a7525042ab21805845d3aa96528be793e2af595b056088df652b96171480c6b1bdab737b8ae3e2de6807937c11cbe91b90090b4e6bc9fdd4cfdc1640c40c682481f54b4422c047a874ad93570d90df1716a195e6bb9f2d3096c61cf1423e13efed484dc25c535be2ccc6c5e64be8f6bac177ed568c946c9b2e1e45ec23cd5a04cb133d918810625862a25cca8d808e2cea1038057d8da93f62f508f6fe6b5d25481a0511b8daa8371717b7f724736d74cf025d5c6bc39ae1c55da8fd5e733e7dad7dfcea2c3043b927fc727e65d6dc1120c59b26c2b1b5ece9d1ca27bd8fc78938c79916adb322798f66a0dae3d04f29c70debc82b4ccd4c98a61cb87e9c4005b126b2071951bacaa28eec7b380f0552c78d1494bbbb7c55722cd82d895265af58b1cb5c6d69615b1d116dfe8448ac5bfef9d55cf3573b23b02cde37e3b21ec40ad48fb4ea61a829e1b9e5c0f2a71a4dd26e473bbfd1bb5f34cf2534bd3efd4734aac274c0d73b674a862a36b0ae63e703870d17f390cdbfe1f88b0e0ed8679c445683ef03d4bcb1f05c1e84fc8967a2063ad4812b1a8d57093d195d4af728c11d7c705e9208a04c9b0c68fa239cd690604453a4d798501f240d2d050a1ec640e5c77fbbb47347de20d3148568f51ae02afce2555d6cd40d4d86417de99a899f1fa322e8c81832de71e351551b12b1ca19c6d0 COUNT = 96 -K = 65dde21d13dd17afbdf6489364e55625b3fd6dd11929025e -P = 833c24585655d7ee45a66ba6eef9976e2f803df456f5dc5bc38a4c300dd380c4a1a6ba76f190ed0c6f4ae281d0eb9e4ad619be7238ede608ee325887c22e33c5256831caeaae93fd95a1294d01e5b61e4a4dfc8ecc7c3ece325d896f47afc3fb10dd09d5a1 -C = cc32f9ff0fe8a00d0f45cb1f1b29e36378ff2882340526dd62dfb48b457e57d28ccd34e5173f9716f63b5b7af68ad7db2cb7349dc9806ee9f40cb6cb3af619033f6e5b07f9464220a69cd4f730643e36681bf0d06164936f50da3d16dd6c58450ccd52b85413371d5dd89a0476a6f698 +K = 949be10995ad5ccf35992ca1aead0d78bd666d4767c49d03 +P = 5cd84436c678a7865f743c105ba77f3e2aa3c0ca2463a709ce791ea32404417307ee3a2900a2ff12e7e29e9fe6a083397602f595a3559b9c4b857d41546c92ed465155a45c8730931306a8442989ecbb1d5d7f0a229f9b3053b8d5337e145469e36e555efdd838553a92a0468ad264906649b80b75388bb29d454e84ccb698ecbbc12a2e02508b537e6154a97fccbb2666aeb8ae9c836ec4e4c5387e5756da527366997fa4122b154b12f5cb8ab36ba6ca69ca7e79238c71fe9dbbc985cf12109c36c2282c48bbe66f56e04be3b8a830be95edc4533dc898471e6c6b5abffbc740c70d822156d4c6effe4c1871cc7df14ac7189656318d922ca57d28311a784076933830a96d1b31d5fbaf3d97073765e51907b8fb6b0419f8992e4686b61a0e3cf31d7f636dc9096d90ce4df1b19e6491f70f14e613793393ad7788c3c217e724385aeda9852bebf08403ca6b7e9d868c863984bf453b9b81fb494e12d834dbd573f15e45688aec0b80c5cd9a78459558369c317dd92617991090cd7d92ed3cd2f1dc29de688af195793cae240046abd50ed5c27e0acf063f2c174020c45314b7fe9d4bc51745afea4866d6d488550ad34451a311421f9d6ccaae019083df9065317f2e1d8d2dbd484284dab440682d46c9435536eada4c80933433a06974688e90ee53c113e5915495158851bf2da6691adfb35d95026d1b88aab623fbd1be +C = e23b2b7bb14be67ee96d5d886c80ea02ab110659c59565cfa5415435f327b254799f6c727c1a1df19660e3d222348cad4a7bf04458a999f9257402f2653aee4f643131f9ed4bd2c03ce1132e55a5678df0346de1d98067b267946f27b713badabe514c0a613f339f4801d972e1b821c312d68e8a005e14fd074c9a6afc9c26c57dbbb58be8a81008469935b7c8438653c29adce73b746c3c2294aadc5049e359d41e7b1444f9a527606e48c3462c5c281f61412ac4ed38589f21ca08fbf406c848ae56e8919da60604f0b4ade9ac7118dbe1e8f51f07c82bb920af496280f8bc4e3285f44daa01ba4051a29ed248cd22480e2584e856941d663ad7d5b5edb6ac8658cdcaa9b24a28bb4c781e44e1cff3d2c2e95339858b17c04fa9c7cd12db779876034eb8d20959a3a0214e27cd3410143d3796fb71cca42e6f69e188cd76ae173c30586a9216539cfd0116a04698fb90ce05e58ee2656d42399309c909b79879089994e599ac96315978869b254afbc4bb63d7653839608fbf0a6149c1e9b228d98f7a8d5c8f06fd37e580fbac54cd12e03d168065d7314153b68124ed97e475cfc959a7f4fffb514e8a2ccd5114789820caed08da45a8f2bab21703e16d1d62ca94f79479f884018297f8d4a61f9c48da4e98d1d75a105f858cb229dfbb7e2d81473e2529a799d77af8ca009682a3caa8edc6db66929c1e934af7a3a76cba9bdb1d6f813dd7bf COUNT = 97 -K = 52427267039d550608ca793afb910623937c7cb17bf6ed7b -P = 807224cd838284dbaf1644cd2196a3fb60eb8a3bd7c5bf80b348939dab758d96ac7bab0184503c64eee5a57828aac67ce0bc61cbc15fbdd50e8e62ce08cf881d226cfe81d865ac479e5503ee3364d9242642590cae0b1966328e66048e70bc978f5960d842 -C = 71275a4cde11200a438ca5e4caa46f8fa260d3502e2f8f835b15d24be31bafa5b4b5735f171a241de5778db186351ff95da548a80afcc4fd3a18dc087e000928ff61e5c826a25ba9483ff39cf64d47b6f471a9c3dd192acecc1d1bb79056668bddf5db798db3f5e0fd5a9273de4f533c +K = 5ec718705ee7d5b9d9a228d5e5aadc22f9ad0065cf421453 +P = bcadd5c3369dd1c5092bcd536f7f0a10a73d6ab97494367a426b43af6a3f935de1e58089220c3b2208092b05070226635c5f16464d677e4c05e97c1821ac4c7f78b246bb261013824908310990c4c7781dfc5e179cb2e8d48a495d2aff7ddee647ef4b9b2ca1c16b1d6a19eb9c1c63022d53c8e6b7a327601e38c36b9df8376c219a02f7ea05ea2d607d2707415c4bf50527da447f41bac5438eda55b3a4ff442795ecefa7c6c8343954509c602806001b14acf2b4c8859b90d82b29c05166917eda9e6eb056a28cd8488c1517bb97c0d3a9c071e369cb15e5023b24fff78a60968c99e4cedd85d37eb3adf702136e1a764b83241a8a1763c20577a8d9bf96395363aa40e82cbcef7fb593d50b90dab26934bd4d1a34ca82d218ea09a8ce8c51143206591c5ab73f7ceab15fd862e8fc8496bd0c76baee86b61ffb47e17681d2cd2e8d018feac36ccdd87eccfa9c0d6bc372ce1745703ed95f79f9d55f49af2883f187f3a7a695ed31baecfdd2d5a2834cff94bb1cd8bf1819c46a65a60b4f46ff5d8c7c4d7efa6fb707d90fad9a85af58502be097f63f386c80083cb8346a602306240a8a29c7b6a0019f42308839456ab1eafb98288a22a965b74c326029118d8f943edbd05142cb5beecb3aedcd72a72dc5103326cc46103ca9e190da4337d0c8e1e153a728c52ec4c9aab1bc7ae10a502be5fee78b081b3d5d516facffea +C = e53d7bcd8262a7380acc62b3a9f4acb4c093dee650c10f7a273b20b649f943bbde818b2811dd49883fdba7f95c0dfca9accba596b21a2497eacacc20efccb5148d03755009c1928f9f3b8100368d97fe9a648a83fe76f0fd3dc0621b79879000916090d41be9e90ee7a4fa9cec60eeef036e4cbf5f6af2f02b2ea8c214c5aacc1bc760d769ed27685bf22851dbd64566b7b2e367abf65ff226efce5556877cf32cd2362d4608c24f738927fdd5a0cfcb2179f8e05af9156e00b1292c1964ddcef2cb280f41553b8faf03852e9947455f73a0fcae6c836cab71b5e5d18237537520f750d6a0e97428ed550d884b81f140e27628e83c704d12d77b4289caebe2a33ec24b066cbc9cddcd2c23c18b994e7773337eca7be60b4a271d55ea8068445dcf8b535e927822bce7a6c721778b55a3b4fcbf902647b6199461a2727e4f4b3337cd5efbb395591c34c4690faed916ded06de0abb57a22368ce2e7e1b11141f6b7335697d0bf35458b671db106dab1a83cf1e91c9ddf3dc4e918c66448e4121b016e1cd246b3c69b4a189840e38cb94a4c06648ac7d02432a33904c55eb3a27763c3ee891958ecab8cc738c60954d91be4f64e80fecd0c61ef4770c54a1250ef7cd34a3283a094355a53ccb4ab525fcc5d43659ac7ae8ea6de93b4ade6ef91f195bf7b4f03a3e0a5f2e6c2934571ef9d55457613729c93d433b6f6b8a5c3610c3b4b68881766787e COUNT = 98 -K = 54ab83275fd54a1d86df7830c35d3acb75ea06d71e2f102b -P = 4f2449a7774393b5277028a6dffeefca4015f17a9e088b252ed87bffc9052a99f343ebbb5461ba86d110da88afed8bf602464d3d14750b1879baea098cae088c17c37d8844d23f326786ae6ae91b843001c2d0d2664d05cb21273667adf97ddd5ae6781648 -C = 817f22047ff533638df989a3efeb6ac17dd252aa144bd9ccdbb11e20674881d5122d6606791c42448a9c41f0dbc4bf6e6f38ef301816ff5e09e9bf2468a9dfc8d66dcede5e3d1deffb7123a3a93695afa8a8de9c5819c283e50cdf1887b31bac96a64372c76f65e0708fbb962f613efe +K = 30c77d71f7a0f4b7612c8377d80042a5bbcf494f08e2406d +P = cbba3cbd0dc133ffdf7a160457f803a02480352d0df82c6d293dc99b50844db218da94aea9e80123bfb5041be9b84e82ca44cef6e9984dc0d58ad8dc6c229825d38bcc33e4b7b137c68c9b6349bcd39dd97cfbc4f4420fff69e619928a7c0c2fe795b1ca9bafd9c0d66414d6a4d4da54a56f2b3c5012ecd941be41c7b06e87f678b9c2bc6e44aa2d850181f1ad479a06de61163a803ea5d8b69bce782a30f8bd5890f8928a3065dee77b9bff8338043969ac0df9305bbf641e9d218fc1b923e3f18dd120494c1ce381e5bb747636dda4495a9beb8f499affd100b573c14b748991a32d77bcce22253fd6dac5f3b2bac1648a05d58b86001cabb71ce745b07d81be165a95e8ba88937998c884887f181ae6234727bc27512335f689634191190f4b73bc06f11e88e8806441a65f9ed41bde29317a654817dc99c16509a4cd53d822c69c2acfa15bc28ad09aa5f8df240bf021fa4545166458e171b1fb5ed5e4231a14c054b1795aaf1366f4764fb63640b78a943e07295aa5b5384e95722846b4caa03b19a09a1823228659ecc3f9b1dfafe432567650de2b8fc6b7e1708fa07f0a9f1882038853995c2d1c9bf6676a44186af23b683224fe3f689b7962bf2a811c8f6f5f03f4d1b0e535761292525ca7e2ced6105235c62f1c87c32da8650a096ed7b392be20b596ccfdb845fd00ec23cdeab7eeb03f0f5e18478b36f9c573d3 +C = 0b6694dc078e4d08b7de0670221e8394ecbbe1cfaaf2af5ddcae3789502d8c16fdca3654fbede7c25bd76a9d0b7898703195e3b6acaf7366c11c411a4cca2446bf4d901499f12484f181aade49fc2384ae3969ce59ae1b197d677a70c651c1e8d26ec978a9be3a16cef56312834e80c6c2653a67f32f883b21362b1552ec6e11a1e2f9546bc9c6051a23b7c54fbbbcec566d5708075f006dfc116528d6f660c2f270d5c1a88def09d29756614d6fc1d2dcbd66cc55f1f92180efc16bf6943ba0629090766e97f4b33fcf51abfb53c6bcdf3222079686b17d173d23bc6217ffed25719ee5275d93bee68d5db365efa105eee556d89891fd42c38eddb4b83fd3f5bbd66e75d42c8c33657abcfd242a138512ae5284415f2f341dbe7787a05f74f5ea945b21c4a4e6817b89db6d577e03bc7e50493c3e1f4902e5dae03491e26a79cb1813423b81f82c3cace247dca86ae6dff72ec9a2db23507b35e403c8ce7d04b62da629e365091fba9c1997c53cf37ff841606ad54e917788dc5a15be5ad6ab19888357519089de4468ce6e4a43afeef88ae949970eba9fbd3213dfff87eb2a6992dc36c20a11456416ec9f8b322b0ce842022aed1f847ad1b594bc5ffc668c6010718199b649cafa3a660610821f723b6216e3d1e908a2385b4b6294bee480b5c96dc3ec56f47bc9ddd6ce945716961aed1af736113c4caf4bcca2cb81e5649b8c1462332dbffb COUNT = 99 -K = 9d14759d0d5b0c28e5c358fad4ea5a159930afa7837e5296 -P = 74c840faf1b47222096c2317d3135dd9e9bd71b4784861d24f70a163e587bbaf2e8582653af16865b485cd3df3599434b7c6bf6474bd63b58b3ef5fdb1b441615ec71d496ac3cce54788ef7299213b48b53068b932f51864201dc29f28a4c1cd46650fc825 -C = ed82f58365b21f22761099b22ac7b2c9011c06282736a04a4bbe60ca0c89e9eb973c71c0e370b6441a14bccd988219a30ae275d48eb42507ada27f4755c873d03f8999da20719dea1ad2b806ad579ff312eea5999758fe3c04d79db56943e85b566d25693d546ec60d6223ca444b9faa +K = e266b8fe77932005644f8f862a52ee9d62f9857f792ac172 +P = 3f31edbb301adf8fd653e224eda0cfcf0a0af51ec1e41bf6339c69a2d515c37e95cc89a36931428b824f8d2120986251fb66977abffe1ff118958fc501a1b3ef2818974b63d638d5ff6b1297f8d1a4083f12ea940a81f6bb17a958b33e76bed13541639cc2da486a6a3ce4bba4d5775c7cb7ccb7882513ed689a3cde1779e541c98fee4a3225cc2b24214a262f79aa026b9244065749b1c95fcd206e8a70a282ed04468c7db88513934fcab984abc008cbe2cde0e7d8e41553775af76fb335d4a5af1a715263af2726d8c9100f5b67734dc5310ef24be01aa6b026ec166cbaafc7a8a8122b3d734b78c4cc560f7fd9939f24305346a78f594cf5175562486adf0a7df4c82b00e6b25230cad88b870c53a6d752138c106432557a937a31887605c140bf3a790bda7c324787a39362c9ff7255567a84f8590ccf41268956d6088c21644676fef972aa113506db37086aa8fc162a97f6b1b3594abd325860c1277d5eda0f56c122620556f409f273d7671a8a765021e806760820044297ca471a8bf7dcfd5f1d452b8064aa308041d497db53550db266e325909def2aa70cfd9e4201bb1a19c69909c937c42579d43ea27323b0908a464f59715c2cb87254b1183cc2f34cb96de619a31b8d4609e60c88c897b3c0846b53cea6c59718faa2f1a8cddf4612caeeee24686c14c27628d288d839bff6cac0575502bf6be738724a27b1 +C = 86cd2393ea19c2d7ade17e190c2b7eb668f7ebce54909d763357e04e4e693db30815ea89aeb4b83b70ae56dc5f62925c21ce7c5d63ece1d4c83acd0a55e31c6c0ac212ab6bf267ec9e705b6a1c3a7c35c24c26418a4ee328abd37e1e7d30df0db480092b86b94f4a8126265a42b7e1c6ce4a8b6bdb26255c3b81868fda54035f712a4ca3198ab7a05ef65341191fd11bc4a5e938221c1ba9d4490be38b35734d7a80cf5d1ce95256e1bd906cfc690b061b87675e5d793b343878f0b97d57b6c97a29a41eddd80321304a3722bbf8e071643ee2f0204a19b0692e402bee93dd0879e70d4830d7a5a293ac6ca83464b9eb1d9282ac03c6637d54c8f6c91f35e4d3ac0beb7ae04cfab2f51626f8f36c3d6b4450f0da8a600102c8e039602eb7e40caec18c5b360da4056bd0a5a53fb65e0921eda1ae4120e1a5a086e29877bbc5563ec99b58f13e06baac0937e4b25ee6a7ae261cd895a6db6a78bc5a2ef6ea067523a6df72a55792e2dac3189210fd81c461a42475a5fd5679bcfaeec91a9921ffc24abb508467db4871e6a6119c243b7a1e4652aabe7c98e2fc77aa72e70faf837b163863128ceea8ca0994f6daa664c9d6c4c8b7c68e87f2593fd78d98268295e4396f841395d5fa78b7d3122d09c2a62734b9725a9d32fa28bb53952e949a9ce5e4f6764a8e33267a3400f1c7535460eb9e4e18059b75de0712702c46ce857913f0e7980491278e diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256.txt index 7204b97a00ba..bf566e98a3b3 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AE with AES-256 cipher function' information for SP800-38F -# Seed = c39acccfc12b6f451496fbf3ed02328ace4442d59966e83e97c50df9bbff563af6227431de22f15badd121a5bf55b076b9d1f0f0e5946de72317812434aead09 -# Generated on Wed Dec 03 09:15:42 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AE with AES-256 cipher function' information for test-files +# Seed = 6eb04695fd5dc2b0038aff221b225c302fc9cde3d6dbf4195d9d4d2756c8303906335e07679fee9a80e5d0d1580f7cdab8f0fdd78c0fa58f34afccdcba4820a5 +# Generated on Fri Apr 6 14:46:23 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 397989e9208a7f0133eab2f8c9a5ec231eb3f771ec409a6c43c75b8ff39b489c -P = ea -C = 6c0bf17e7c72f5b3a95988c20da4a776 +K = 95da2700ca6fd9a52554ee2a8df1386f5b94a1a60ed8a4aef60a8d61ab5f225a +P = d1 +C = 06ba7ae6f3248cfdcf267507fa001bc4 COUNT = 1 -K = 4c4d5694f818e9bc781afc8dbd80205fecbfda3395511def73738f2828515c4e -P = 76 -C = 171ffd3852ef6291aa9aa4664e068bea +K = 2800f18237cf8d2ba1dfe361784fd7519b0fdb0ec73e2ab1c0b966b9173fc5b5 +P = ad +C = c1eccf2d077a385e67aaeb35552c893c COUNT = 2 -K = 82183dac772a300a0d0e84e10022ee121cbc3bdb722aea8b879abf18832b4ae9 -P = d8 -C = 5b53bb0e7a982e6a288a988078599c9f +K = ad57e32bcab8245d3fff48cdab0214464259066b216c13ef703f44bdd434d0ce +P = 6c +C = fa5e91c4ec857d6c3a078834ea0e7b32 COUNT = 3 -K = 1940b2a08242d7c84ecf1fab962909dcf899138dcceb1c0747a281288655e0f0 -P = 01 -C = d85f2f2e1221ceecb5ccf11d7cf43834 +K = 0070492ff3aaa190496c72bb0affdb6fac7fa9cb32e6e91a46ea34863422f807 +P = 39 +C = 643a9706af6bd06410b70ee38f546bc2 COUNT = 4 -K = d0f053e3e2ac5e713cde8d296e7695a6e57c558bf7eb8b10cd8daafb044a0579 -P = 2a -C = d8c25f40c460343306cbcdf6abf8aab0 +K = cf6b26f9a7eb8d1fc01103ad985fe122c3eef1ffc5e7e0bbb91f94c769e62977 +P = fe +C = 7061a150c507f667684f28171083347c COUNT = 5 -K = 5549a8007b131fa39631b3d26f65334630aff72fc9f9e34f06d81875f3b6fb92 -P = 5e -C = aec6ab53aae7927951cba2764bbbda02 +K = 763ff645eee4ff4067d4e4c498381d952f98182de6ee7591ca1edc8ee0f80578 +P = c9 +C = 7474d81e66ed2fe7b8e761b4eb84c174 COUNT = 6 -K = 6358a2f4ac755ca69a4b599780db062587ae75f62d9a15ea434304a065530e8e -P = f7 -C = 2598760a2a532532a853eb5ddc8582a6 +K = 3bc64cdcf18da787fcf0f452d533f8d1fef446e268fe566702424a6b461e6614 +P = e6 +C = 83712ecf705f41881b78e92c42698145 COUNT = 7 -K = 7da202bbf85fc03b84a09ddda503da75e07ddc8391e58d3b54491b8e158b0e17 -P = 9a -C = 13c77e1ecd35106370843516a44d395d +K = dbccf2530e9ae6ccef7cc5cbb676e4a1ffa3c303b40aa9ff9f65e08292cd5298 +P = 60 +C = 60cb69419cd6e753623b072b43d3b81a COUNT = 8 -K = ed492777605a32c3dbc969a67fd74b7cda36635a12d1b92c8f621a1a35028f64 -P = 4c -C = 13299c61b9240f280a07c822d8e1be7b +K = 23680f4886af1e0cc5dc604bbdc4171bd08ded44ef0ff246b2f20c56ed99b323 +P = dc +C = e2be397bd0db71993cef4c32eb8df40c COUNT = 9 -K = 9a101c74994a187a7b9c375db64c5845a63c66a33b6e90886d4921939b912d49 -P = 20 -C = 2cdcc3ea32de70aa407250140f21b09a +K = e87d0c9150c7574ac3f5e5b7a38e5cd5d14640b0daa2c960b4771b736975d0b2 +P = 4a +C = 6462620e513971f37ebe782372d9ea3b COUNT = 10 -K = 12775e441301e996bc23d056efa522a12db4d7384538845de99a71e5b0310181 -P = 08 -C = ede197b7034384c5900db57e93ca7ba8 +K = 0d9ca9b6e47204a924b7414ef248ace6c4cb22dfa62b274c834648825f4f3509 +P = 0a +C = a0d2c34e783b6c3b2d6dff2135c81ca4 COUNT = 11 -K = 07a64f7bc06f70317ee58ad983280c0409a4910b8f5a831081528dc2ffb8eacb -P = 45 -C = 092fee020079b3e561e1a16371f5092b +K = b2c17bfc594ff13e5585861db755b554439736515265044980b0819c764a61d0 +P = ad +C = 10c0e27d1e083d073dba6ba29c2bf562 COUNT = 12 -K = 28ef57811555457245377ac9d174a6d6e7dcdafcae7c2e4725c1a0fb3e260d55 -P = 43 -C = 88b61599173915c80dd35347d953174f +K = a03c822137ddbc01781ba5942108899220eca879f01c13b409770972982dc696 +P = 6d +C = 94243de2860e3adab347b4751e1f297b COUNT = 13 -K = fedf635ba4dd9a92261862c6957c9787a27b2b4c4518e281ff1f497c87e81673 -P = a6 -C = 39a019371514add5c5bac9f682e3902e +K = 8e9ff8b5249cc5c0e614c4bcc3f45119ec07ed8f30cef1d1ff65121481e47e7c +P = 24 +C = 6f85bb096fdb23c527288b60b61ad6ff COUNT = 14 -K = 3c0b681f063707dd064ae2bfb63edeb1966978715d38bddffd91c58e039ff2cc -P = 66 -C = 1eafcf04aebcaa456a53a1b4dc913216 +K = e2972e18211b1f64a9c8b85b9139a7ab60b5bff57704e134451a978d602e20a9 +P = 02 +C = b92d1c1e3595baa20c87516dbf286a63 COUNT = 15 -K = 60780ed5ecda9423177b342195df37a77bcdf2b84bd4f5743ab9b3ee5a0c3d14 -P = ce -C = acc674ed00c5559c60d7d7532527562a +K = 33153031bed1c72245265c8b613b0b86fae7f6861c00eb14efd9a7d6da3b40dd +P = 14 +C = a904644fcd5c0bc6c692d0881b5eb5b3 COUNT = 16 -K = 0e5c5a61626863ef62a2d651793a8f614cb3fd9477300d9c6578b8e8dc5dd794 -P = 86 -C = f3f0f74186822599e889d8bd1877b12d +K = 07606d225ac284efe5c24044dfc662430bce1c6685af0899a96d6e42f50a65b1 +P = 4b +C = 479ceea19185f159d155211f6bf537a2 COUNT = 17 -K = cab599bfb9cd5f454fc99d1ac1364bc9382660b2b25bdb8e12485732874a9c79 -P = b6 -C = 1edd7758bbc1a146ae507def5ce4d044 +K = 367f95dd85028938640ca07791d89e12c7edf59744db28998d2d0ee37f1cdfab +P = 0c +C = 78ec42f8564f03f6549f4babdb5b0dac COUNT = 18 -K = ac161a2d970c1e536175f986d19a2420abc35af0994c1a40af22e861315e29e8 -P = 4f -C = f6d14b46f45a90f6d91d68e6bb8cbab9 +K = d37fae2f6f7b0b72b384239cdfea87d2dfa962a972cb72ae6e1a44e6754c8f71 +P = ec +C = fecf3ef66aac5e3af939ee312ece7626 COUNT = 19 -K = 76f2f34aa047c17bba46091b6ca73678386be524f63064dad4710e8292d735ed -P = bc -C = fecb6d61cc8f962d269fd63d9aa50fa9 +K = e524d0cfc289e359d076b4473ccb69bc65151bb614d5aa80d7da3ff4e887868a +P = 85 +C = 01ef1d681986c3e53c6242bca99cc402 COUNT = 20 -K = 028e2ce1c2e8943da866b73735a207dc5b7ef985b1252601be28cb6d2a1ca6bd -P = 49 -C = 349e51b32c6b4795624c4acb23b8d62e +K = 0807594a82d6f34ba7db8e505cd4e30f152c1d4563f66e4553c9b71dec569194 +P = 31 +C = 90a77cd29508f8a17c32deec35e32718 COUNT = 21 -K = 18a622cc8ba2ac5d86248ba7f7a7782183cdd32e82e6a078d9e9fa5977377622 -P = 14 -C = fa5a5638e90796566ddc1ace81172d62 +K = fbcd6effb64cc1cda3920a45efb83362adc3702060c5e1fd4be887977a7ce416 +P = 6b +C = 2b9ce852ce37aa58ba8eb82abf2baf1e COUNT = 22 -K = bb256fe79053dfe7bb767d87f3637ab65cc4f6fad43161021754d9e444b30b88 -P = 04 -C = 14454fe0c1bd0635f5494e0dd59e43e9 +K = 42a5e9c38f0a5657218dffb51ff86f0dfb7aa98e7b269f5d8228965fdd1794f1 +P = a3 +C = b2de06c83f351e0ed143a61019208a8e COUNT = 23 -K = 376692e16147b463c3feecf71aa4eed3c1ceb4e9ee5301af5d78270a40115079 -P = 17 -C = 2c6c50975a7e1f5a981e0333a3e223bd +K = aec1ad7a21a9255c398f6e964969e372f6cad950d59f0f1d69dcd5478cbc9d30 +P = 6d +C = d79d9d77bca55f5f293feb5604c5b406 COUNT = 24 -K = 15602415f1004925645eb1f59e089c3f5217fd30e51ccea30a617c4d328de32d -P = 15 -C = c6b4f3759668ba5aeb5247988b168bbc +K = 667732dd7a66af828686d03593934844431949b692af1ef73e87413e9515a0af +P = f1 +C = cfa397d0f17c777b699147e8bff86807 COUNT = 25 -K = 5e2955cc1ab973075a4c23dfb746f9ca1f31e694002722f2c1364c86dd0a77d0 -P = 27 -C = 1fdc2e29cd42934eb5b6887ab54ef77a +K = ecd3ae3c244a68186a3ed323b177b75cd6f9eb58f1edb5b671f9518aba5094ce +P = 19 +C = c7f913bded6cb8c0fd1c3fdd656913cb COUNT = 26 -K = 7d595bc6f0f265d48c1ff49c3dd3ea34ffcfa5d2a91ecf06c37c64ac855cf247 -P = 92 -C = f99df4be150b259b1f975c625555dcfe +K = d1a3c47c287a18a693ea429948ce03ae95fc40c824fd438a57e23697e7c6ad61 +P = 77 +C = 349c84de007bb243474d1e24f2efbb43 COUNT = 27 -K = 0e9cc15f870769b71ddc36bea1603fc03e96b2ee6650c424b55458abc87cdc1c -P = a1 -C = 8d5b1a90b831957231127ec3bdabd9eb +K = a2eb56f44edb3dc7b9258b832a6860d9ed9af57645664406b0b242278e350478 +P = 2e +C = f16d1780cbf5405bc1d15bddd16522e9 COUNT = 28 -K = 2be0615ddb16ef508bdac1a5fa0850234166f96ac9b21cda855f1de545d745af -P = 70 -C = 77750f18bb648f53204f65da4db2de3e +K = 50bcbf6e3077083b2b899b7329e77e521ce4dfa67e5a44f0c41aadef41d45dde +P = e2 +C = 960dab4e62b5ca15e83c9681f7ef844e COUNT = 29 -K = cd6ba39b3ae131d3df695ee8f93e600a2cd34f6db6caa8c2497402b7471bffe2 -P = b7 -C = 2b6d8d81eb08262a4c94ca44b9a3db35 +K = 389154772cb6ca9434717d5db582747ad3146a0a9b2ad2c59b09739f545bcee0 +P = aa +C = 4e2e77b702d4792d30ea0cda59316596 COUNT = 30 -K = 7be6f41303252292242ceed0ec752a8cf1e2462af385657527f3ef0bae6d149b -P = 39 -C = 24aaa48a22b90717b9c0b7123b832d36 +K = 11d0e5b6b4ac0cc4d9631fa3c4f6a99198128c159eaa3a9ca409db71a435e568 +P = 40 +C = b5ee667120bf24f68dd45c96bc3845fe COUNT = 31 -K = f507ba6a5af85315e7e01c5ef8db790d1f857c005c1a33a0a8b33da04659d2a4 -P = 7f -C = 5814c5ba3101c3bf41760d1a1cd9b33e +K = 64d1f2f8e2f1d10111320d999bd0f6731374cc1a2eac2dc790855cbeeb21e983 +P = 82 +C = ee45e1e7776f690e229086b52c14bd78 COUNT = 32 -K = fb4439a574043bc5a175c2ead56a9ada7553aa8590dc7ee396022c30dee2b372 -P = 01 -C = f39b9ef1bc8e6ecd11970f7af1bd1b7e +K = e0b3d7f5fd2460c81c4fc1fafedf4dace62d1547a730f21a60ea20b918863f4d +P = 8b +C = ef39535a8d51b4b728dea6ae2daf810c COUNT = 33 -K = 865ff292943343cffb9061c37c7ed843e46e6dd0c637b23b9229a418d6c9d524 -P = dd -C = 29056adf4f083f2136ee06e0030783aa +K = 883bb533d41842217e5a261b081b4e0435caeb131a348166617152e6634b6554 +P = cf +C = 80c51bd853f5244e76fcc7000f401c02 COUNT = 34 -K = b79c5da101fe1cc29c2e1d8d991c29672830e03c169e57a95120fcceecfc39f6 -P = d1 -C = 9782703c7989f3b235f4b6c9ae28d856 +K = cd9f7733dc6dc5080f09a41c150c2eadc8c6a46bb96733ae983f66a618597c3f +P = 25 +C = 5efaa37c8c950c468b5c16dff91fbcf5 COUNT = 35 -K = eebdb2f5939a792634412c4425e36b96227e0b8d8cfe121285a8c94b6045c160 -P = ac -C = 9a51faaac5e9e6b0f28a696c66790cf1 +K = e2a4ae6bb45220ae1f4dc1ec1937b955640eb006486b9024df944d45357474d4 +P = 2a +C = 8ab35527f6871637d82de413d450426e COUNT = 36 -K = 0169cf63f7c5bd57e5b0e15f302656948325d6d8772374da9dd5d7c69b87b007 -P = 0d -C = ae0d37e784a1a3c5881a1c082cfaa1d8 +K = 15eb2d628c51e7657b1fec948a6c1d48e323b5cd18a7419271ccc303b18cbc3d +P = b4 +C = ceb5b788e0c1029d583a6c0fe07ed3bc COUNT = 37 -K = c16a87d5a6ff40ae05aebfb1ed6858da1ac1eb6649b1a5bfb9faf988cfc3ef9c -P = dc -C = aa3fcee3536bc74fbff2837277ccf00e +K = 8128826e24aeeba77afc240ccb109b04718db63d38762fc9c42759f7b23cc62a +P = cb +C = 74e4e043105215eb83d3aafe2c084b3f COUNT = 38 -K = 26807f4131a76bf8d80d82daca953229de35ac69d097720dd170131754617679 -P = 67 -C = 7f0cc03d4a53958a2409e1ef48c00099 +K = cc2b46e9dbdf845ee6ec6e2a0bf4a4f91b7996cd5372a5806ece7cb124dd58fa +P = 19 +C = 3d46cfa1dcc22814eb786cb81251c67a COUNT = 39 -K = cba5b95143aea3942737ec4fc54c711d35d8f4fc794a18949ae1baf56d5abd0f -P = 46 -C = 73861f9579c13f62816059da890e3e37 +K = 891dbd25e81e02aa625f33e771bd152508169190c149aff09ee729247c0c4ed1 +P = ed +C = 6e72da8ba2773c206582f7992df84e5b COUNT = 40 -K = f95ed78a698202772c80b8cf4b6f806321ff9709c4c92b8942756bd03d5b83d0 -P = 2e -C = 55afe9527f5ee9ab27ba0a31c2b5e426 +K = 68eccc545247ea9b741e1ade1ec9679ca25bf3b63a0e4a341ea96d28cd606e1f +P = 82 +C = 041b97a91c03511e291677285abc63b2 COUNT = 41 -K = f79bcece2a25c6c510d218984b8f91c4b87c64b840ff9f828e837190ae092216 -P = cf -C = 12bf73c363e288e69979eb4e3eebb7ca +K = 4d3a2457ab606791117b735686199c5f346021a93e18981a1ce93323636d587a +P = 72 +C = 54c05ac22ffb7f17c0407ced0b0b620b COUNT = 42 -K = e7ed7ba394cc2086efc684829ed150f0e1ebf4f820bfbe8725d21835d7621291 -P = 9f -C = cfea652322e497cf8e1b03935c4e91e6 +K = 9d8e6f1a975af3ca417a47ff6a260357be94fb9f873f63a9a658364801820873 +P = fe +C = 035fd20d433fd07314f5958419d5aaed COUNT = 43 -K = 54f8a83cdde0ce5cf2c0c8b8fda41d57a52e4f0bfcc92beb596374789f8c3cc4 -P = ea -C = 2d326b140d422ba299bf72b3c40f38cb +K = b3968026794501b7353a2517e7a140f731ec11281bfd796a83faae8b2760d8c6 +P = 7d +C = fc3370e4a0ab030d6e5480f287176ae5 COUNT = 44 -K = b4944f61629a00685ae2c4f1ab7674b0b190b061a79c3d31430b8c32a272e9c9 -P = 01 -C = 43ecb511a37a354ca3db93e4ced12f4a +K = 7ea7fa378e0f84b4b6102e23961f47faa1b0f15ff870cc605f1a0c24a780cbea +P = 8a +C = b92998bd58b651feb3774d2309dd6901 COUNT = 45 -K = e5adadd9d225fc2aafc1a63d28849a6736fea6791cbbe15f67d82e8c9331c1e2 -P = 9e -C = c92ec183465a946c1c987d0bba896f3d +K = ed6cad325c2788e685993d0a9f4c61dd1bfe2840d8141b2846a50046862b4944 +P = 44 +C = f09d8fb8ebbfabe68c14b95051b9edcd COUNT = 46 -K = 26afffc8baa22ee9e1c3bf1ab9fca5425ac0e4364219c5d86491dc6764dac717 -P = 86 -C = b40e4b8bc035749f0fdce3dab0f2877c +K = e879b297f9f5dc552252f35d2ba15a9578fa108329ad880ee72b2001e1dc1887 +P = 35 +C = b58c8f0844e0d756ecca63572312f7c9 COUNT = 47 -K = 0722a317d400260609f5344b26e2a227fd151f3a854dee1749a1a36f32ee7a9a -P = 81 -C = 261fe29c1a7bf25ed04ecf75e3b50ca4 +K = 97f29b54c1dcc72f577af6ea8ceb9d0ac62e6e07747aab13880f8f32f8d09c58 +P = 82 +C = 70cb26e947730a187a73dd5fd4491b51 COUNT = 48 -K = 277f0d1231a096ae900bdf811ed6bed6f440cf6f1440cdf80cb1430bdd99b51a -P = 95 -C = dee63abf518f1e20df8c82e957751f4e +K = 87591d89c95d3156aea8ad2f3b46e1a4d6f98f0ea83e2379503a1a1dd414e75d +P = 9b +C = 0257163d739ca077d79151b8b4f01e55 COUNT = 49 -K = 264f0c4e3c7d2783814f1fd9cf22172c5fbbe0a745348eb2ba7be0c8bcc4bb88 -P = 38 -C = 0fc6c6dd721b3089b064b05adbe5643a +K = f3cd330a96127c40365c44130ac348dd8e2cdffdb9a1bc53d34c32353ae80409 +P = d7 +C = e544e1635bd378abb9249d5972501d48 COUNT = 50 -K = 9b74c08f913a60de6540d2433ab3119e782c645b057b0124f3e310977c752f40 -P = d9 -C = d40bf16e49d3de8c2e6bb4a10318c02f +K = 6b7c87828f5bc69dc9a489e83b7c72deb45eaef94c0597b12459d3c5b7a6e55b +P = d4 +C = 07d69bbc9244c71e196fd5ac08557d88 COUNT = 51 -K = 2188e5af55de553231f66e417ffe2429a07c8ea993cc0867aa600ebd6ac62cbb -P = 48 -C = 473fe98f9c972821c286ae0affbc51e6 +K = 7f1b81eff688bdcac0c19313fab3dd40992516f35a080d07e508d0a14ba3570f +P = 1f +C = 6a81b8ef7efcfcba9e14c1c3005c214d COUNT = 52 -K = f8fbcb5f43632ddf2304937433de3fc20b2c42e8bacbe9d3e3f475dd45a7a17b -P = 37 -C = afc3e21261e843ba4163c881949d739c +K = 2154e7bacc42d0b5edaef5406664c900f58cd832f538b2a065adb31f07c667cb +P = d0 +C = 00dd1322c302634e57049c2bf2985005 COUNT = 53 -K = 71bf9ecd1f4e812ffc7b597752523dcee595c58e101dcce99bb52feb01cf0249 -P = e8 -C = 72254bc349b92c9330d4a341301cbce0 +K = e751f040b66034473c81e92821a1a4dfc4c4b6786daf37cba23be5ff23d58805 +P = cf +C = a578b3e89353614febbfa3864a6d39d6 COUNT = 54 -K = b15d59528bb56e4a7469d2397110819f709f52d67179c99b3a4488888836e85e -P = 41 -C = b2246258d2da958bfa3b3c0a250f4626 +K = 983472293bbd7cac3ed2beaccc7b3af30c8fae8ef5d72660c5c3d11b2993cd36 +P = bc +C = f87eee088f7d280a2cf5fe8ee94c7f67 COUNT = 55 -K = f2fd14f44990cfa24e4047e5c89ec557c07cd22a7c082fc5e21919b263592332 -P = 8a -C = 8e430f245f52c08ffe43bfb243ef759b +K = 0cd1a63b775271a63b02691e68fccac5c121452ab3e08ae08e698aa2f3f85634 +P = 15 +C = bc914e107bdbecabd826c234a73b7754 COUNT = 56 -K = 8525625fd90074cda5f9d2882a07534a78b5a05acfe16d7e6da033e1882f73d7 -P = 98 -C = 1c2fd42d2f44ded7d0f60fb970b6d2b9 +K = b62430b6175eee716991800e8763296a259fe32d74d6c4de0030c9795aaad4e3 +P = 3f +C = e1e702cc450b4182a1f9dd06e5132c2c COUNT = 57 -K = 20818ce60736b6fa5baa8c2e3ff7eab2df06b7b77dd43c52bc7beeaccf4eb286 -P = 17 -C = cbf4a0efd7d070f219a852e5addc996a +K = fb6d1e7b58e7f7af3610edf6d17e6100862902397187a4e02c1d0c88d0a808be +P = 60 +C = 5b424af8ca6a8ed1f5d937fc5324d0f1 COUNT = 58 -K = 30edf1e0816b230fa49716904089b88e171d442f3ca1c267dbd6ec21232c4157 -P = df -C = 8e8d8454e6555eb36eccab0028c1f8b3 +K = 39a7714abf7bf3bd92ee6a8aeeed0e8f25aa62e3e50bd8fbb55b65560b2f77e9 +P = 60 +C = 352edd2fec59653b3c81c7748f1df04e COUNT = 59 -K = 83ca30f40dd522edc89c4ab1fe4241a4b6f91bd544a57a5d7fb027f8f3764232 -P = dc -C = 7ed2f96b66d92d1396578ce3ad8ca80c +K = bf480438f074f29a18e5b8636668d89f84a4b4f8c80649364427f166b5a84a82 +P = 3c +C = 1a9e9068561a6e1da81716e0174c7f0e COUNT = 60 -K = 4b9ace5f2a022e41beba5175884f0fc355bc186f381d22b3f58c574fda5a5d5a -P = 72 -C = c277916de6f5b90d12d1d921f2ba3bd4 +K = 7f0fe69ee40b93c38f4391ec39022dad3331c753094792fb81d8d2b1d1887608 +P = 2e +C = 2c0a2be9f8d97347683512d8f7158ada COUNT = 61 -K = b8df545f149ce5d26bcbeee02b226d43b435203b982b84b05d51a1cccbb2c703 -P = 26 -C = c8741ab016399f0f66b6e52f9a64ceb5 +K = 5eeea4d55b964501fa4c789ac69ef710dcdd10bbe770d42c3f0c8e8f43467366 +P = bc +C = dd527a2510d3d3d40b07d593e563ae05 COUNT = 62 -K = 14e19bf3769ca2c7eadd4a54c431224946f1a40a93a54802c78a5cb1e496f3d3 -P = 65 -C = f6864f30c58e5698147504485df23766 +K = c43a60e1349fa15b3e838eab10bd0cd6d5ffa8f197195f2eb8e3af4c8813025d +P = 07 +C = 623a43f100383f5749e3396352072927 COUNT = 63 -K = aa9fafe68b7de21c7a20ac733fd9e5f6ee4009f7bd1bcafe552b85c57ea9e1b3 -P = 6a -C = 40a2e1918d1e19a654ce0bbf678e75bb +K = e1d5e21e970ed0bdc5bc75aab774ef2656ad28b803edeaf034d21956209c3bc6 +P = ac +C = 28e786bde4b79ad104eff933beaa9c33 COUNT = 64 -K = c66dac18492fddea9bcbcba284dd1de0ea9e60d283eda085d06933c8f0b7ee89 -P = 07 -C = 433a1b088792eed92c896b02c15ceb9e +K = 266ea4444452478dbed5d60263569884da2ad80cc6c74f81de67c61a549cea35 +P = b8 +C = 151009e6a0c073869eb125ca76da2573 COUNT = 65 -K = 77971b395a9e768c3c0b1a5132ac2fd859c1f2f217e8d594fe857d7db8bbb33f -P = cd -C = c8625300384084d1be3851b93b5538dc +K = 1a7b680bfdf7e5fcd6ace8f1ae798cedd0172f4ca7422145e21cf0ca98e9c8e7 +P = 25 +C = 1cf2f7250d5a028bb716731ddb318f84 COUNT = 66 -K = d2a7b46b6f43d61990026ee970ee2d2f5792f6fdc296ce64812c53413aa1eec7 -P = 68 -C = 39989c8876e72e95a46281bf4050ffcc +K = 3618bd9d3b66cb89c99bfabeee867d4442a8c7c8f418a51d203f8d005d7cb8d8 +P = 3b +C = eafe455865e7396d7fc46767e0b1e507 COUNT = 67 -K = 6f44b60bfcf49047020cab153949622c38fa3b2fa37edc1b4cf96066ba57f54e -P = 20 -C = 72d3e624f7dbabfb799a763b283e6ab5 +K = 861a487275ec45fd311c9fe69c6e2d2332738c1f3a9172a1f208bbecc726e71c +P = af +C = 4b9f2f01dd918649baa4d08bb77e4c93 COUNT = 68 -K = a18dc95039c55d83e0242bd4c6ee881182d237a548af39c07fa9d8b9eb9e6c92 -P = 72 -C = 9ef2b3a2eba97098c702caa699c91184 +K = 5db81e1774d12072b6b494192fa6b10c5220bc54206009730085cdfb12870aee +P = 3c +C = a2bc9d49fd223ea2360e6b3fca104fce COUNT = 69 -K = ea4007a19a8a2e59841cb57b54fca13470eb4eebc6eaac98eae2268461c60de4 -P = d4 -C = 116c86e4886f742e6c78031b3040b8a4 +K = 44fddb01d3ac70530f80204191bdd1cfe0e2f5e6fff812dde84a44312c16e15f +P = 80 +C = 6372aaaae55606ef2cf46267294d7b71 COUNT = 70 -K = 4cafc029f063d2859cd6b05c8a216315789596d8477ccfe2afd056c69cb9af11 -P = 8b -C = 0088a53e2f34737885904434ab6a3148 +K = d70a51544d367c7ed065119d33f366a110346b48c0e80ac80bf3a079a4a1aec0 +P = 3c +C = 3d9719d33be58f53253d7589711a7a21 COUNT = 71 -K = 2deca68ca74e00fb3701672a651ee3a2152b70bee71f1501465f2439cba3c94b -P = b5 -C = bd3e389deda09d6e232878229bec485a +K = 2475309ac9b8480fa2ab8a555a8a56c88f9cca76d26c0cfb83ad7a0f8ba1a5fd +P = 75 +C = e0dea25df8ff9cc574d24db85f305bb7 COUNT = 72 -K = d8c965c6d85bfc141f2df51588ac6be5c34d1d37ee943e723640c860344ae46b -P = ca -C = 8bcd18cc082a5851b9fa870eb404dd49 +K = b779c53f5d1aac657e0512d06f30b159de9779a0d9036d9fb79fb62b649fe81b +P = fd +C = b5bb0bd68634a231be5e60af57dc435d COUNT = 73 -K = 04cb757e43cbc5ef493a3a53222a08f21a9a0ed37a9e6060666880b7eeab9172 -P = 4b -C = 4fb10adae85214af7fab9b34f00850e2 +K = fcdcfe6d36d392b39379fe43cd14d3d55307e038f29bf74697d3b8bce0e04135 +P = 6d +C = abb1504599b0289aba5ded39666a4fd2 COUNT = 74 -K = 534c28a548c13c40064d6433436d163874f6bae93b2cc2eda92a4df2587957af -P = 5a -C = 500afd3ea6111e00aae794afa08b685d +K = 921f9067332d1e315e618ae89cd024cde1c87bd290faed2f84cea820aa395b7b +P = a6 +C = c06f692c39a256f71591e0f5169ce3c0 COUNT = 75 -K = a6dd06f2c5abc9b49e9023b4ae14092f0e1ac86cbb4ffa3cb73f113e786079d6 -P = 6f -C = 29bf4b74ee8c4f404613abd717c22e38 +K = ca21e9abc7af128bce7b6ad81a3aee66360f6cf00385dcc1f5c8c8c4ef172775 +P = 50 +C = dc07c12bfd4c92cd6f8c0e813b1c5ca6 COUNT = 76 -K = 9fd8781075799acb6c1ea397521a5dd13e7cee58eb3a0bf1c3da729ea2955786 -P = 01 -C = 21e39ac26c7bb4404e228a6a17f9ec97 +K = a94a1318870659620f7d220b4491cbfa8862a9d5f6fe1cf80b5359c87f6b9b3a +P = 67 +C = 9066ee4a0daeddae8dadf444c5cbc566 COUNT = 77 -K = 2815b5b6ca2f4cfd75564d83a18af341aaee850272e2639487caeff37a6f51b3 -P = f3 -C = a507be678daf5f2a0bef8f1511d10ea4 +K = a634e7c530271154c614b96450724523a6cf62abb2d4f95281cf948626b265e3 +P = 6d +C = 08e9e05d025e3ceda0ad48df73e07ba2 COUNT = 78 -K = 1def46739154e3a0ff32dcde52c1a16adfaf1f593d9dc4f816be6595790b8b06 -P = e8 -C = 42800becae0304b82fbff1443b80b401 +K = eae18b15c08398d390ddf20a6081f081e4de17b2c3871cfd04d71c4394eac2cd +P = bd +C = 4377e071fa343ef8cacbf69950d6a73b COUNT = 79 -K = 1b59c9d1b1d41b172a073ea807cee47df014f0e9081e0ababc18b1fb90d7f489 -P = ff -C = 288c0cff0a703d5e3f39f584268896fc +K = f661eab186f55e78e704c26f778b72288e2f2b3772bd2a3cf1e3b07e9f639e03 +P = c8 +C = c5cda542717d4527c4aaa6c17f782e72 COUNT = 80 -K = 14cba6c576ec9fd5650baaa15c53bc8dfa20283a4136e438156f061a7bb10fd8 -P = 0b -C = 6c39673ef25d6f0b24e1b943f6943f2f +K = 3a52d56f8c810ab617370f29fa21a37d1774b65c43ec115c920dc8546faa8444 +P = c7 +C = 9de78e6c8dca799021bff73f018e868f COUNT = 81 -K = d02a9358a6b65eb243a45aca6aa3b87e37a0213957e7519a69464952821d6349 -P = 8c -C = 8c6ce023ac3359508e49165f70df8adf +K = 118112b4be89d6a5d6392e0b836f237b6f886115c76753e224af9d156f5f6350 +P = 0b +C = e90fa1e4eb271dccd6ea05ab4445c1ef COUNT = 82 -K = e90dcfb7481e8cb0940f0fb66b6b89b276415f9f24bb2011f6e22b1b6dbefa8d -P = a2 -C = 3c925744e255f35f23b5fa25f7017870 +K = b9981207cdbe70d763396846f2843832005ba55b2e7610402401e6b03a0b69f2 +P = 8e +C = a3a118abfdb90b4693da8697b66f0224 COUNT = 83 -K = 92f69dce4c64669e2a29b27304e7d9bd4e71bb8e03affeb3e60692f23c2174ff -P = b6 -C = 7c8c51b93e49fe1493a04fdaf9d6e99d +K = f08fe1fea4e9ef356bbe0916f20c6a85b3268fd6de3509eab3d055f8256cfc07 +P = a6 +C = 0efe46982265ba90924e4c5abb0a9961 COUNT = 84 -K = de02d5c501613b0263a8e8c983e204acee16f5fe13bd46ea9a07118d51d928c9 -P = 70 -C = b3ca4f9c8b98a518ad17b743edbf2e07 +K = 3d32c6b6a1d4d77f56eb8f0a4c023e9b9240129215a568f74d58f2d4ac079313 +P = 6c +C = 2ba2e8acf2abe883b3ef67cacda9f759 COUNT = 85 -K = 7b05daf3b91fa6cab9b7272073e160093765c1093fce787e4cdb9de9752fc25c -P = f0 -C = f1e1638f71e7400edd2a7f106e4f91f9 +K = 4fa52d188afb5bb520d2f0883178b95d14d15a5e5cad295713bd1a37a61afba2 +P = 2a +C = 5a09a28fac3363add23ed0be504836b2 COUNT = 86 -K = cfa5056c9631e1f1307de5123c6bc9c33cf68ca6b86bf5d8d41f7e8e1a70f252 -P = d2 -C = 1b2856fb839e6d17370769d1c5c4cab8 +K = 49561e858c8d773b37ba662d9a1cd7690ab46cc9eaa11ebe71147b8db53336d5 +P = 2f +C = 6f01cf6eeb5c7c1dc02dfe7cc2836346 COUNT = 87 -K = 21f9cf3961b6f1a7d51fb391af1459ab01ec341abd90c794144b524e4a5ebc49 -P = 8c -C = 166343a7f6f6855365e22eafca9c45a8 +K = a8b8e2ff2316c80151e925ae04ddefedefc84fd7b13361cd6dee0249e8ee304f +P = 7f +C = 50b1733f039af3b91d0a1bc49cd406ca COUNT = 88 -K = 9bb5c24ed2174598fdf32e71c8e85d9f916766cee6a0ec806b97877d66eea8b6 -P = f0 -C = 5b60d5a14d4f9ac089af4382501982a1 +K = 70cff3fdd9ad5fff8403cd6447d939ac795c1c507e2801ac8a468f4caa068cec +P = 24 +C = 963c0572e4c83da0dd94f156ae4afa2b COUNT = 89 -K = 545f1257cd729584ed8f5e20add21ba6555ed1496f51046e42a01c3276994822 -P = 41 -C = f441f3f4340b586a64d268140cfb7e2e +K = 19a17bc3e16de8e9d2f126c10a8d14bd486e6ba1a0f8895e57a7ddcd78de843e +P = 99 +C = f635246863d42796d9ce21de50b8329c COUNT = 90 -K = 44c445824422bfe1d094118d3023fd13e899be8db5eaa5d7641ce5c701eec5a6 -P = 9d -C = 527e431c0cb31dc6458ac377bee82907 +K = efc7fb5ffa065850113e36517a41554a1f9a3752ea3d503d60f9aabc2bc897e9 +P = cc +C = f6836b21edd07ce335c1592c09b2bc5b COUNT = 91 -K = 814d6e89594f9ef8e1bbc972ed3ff6a208012007471519337db9f6552a2a2315 -P = aa -C = 68f6cad8d0c7de5d3c34afd8a1b0efc5 +K = c4bbe77b6e10a546baa490eccc542934e5a5ef3ec30e29b4b0982f837cec81dc +P = f7 +C = 94b2d510fc6b53bac5458c1699ac5673 COUNT = 92 -K = 51d19fda2a64ce9bcf10ae6533e19c9cc84ff7741478a6319f419d0d940ad1ab -P = 90 -C = 2c132ebff7fcb37df81cbd659933c6f2 +K = d4801f39bdfeeee05d848798d07d4054f728ba1bb66e108c8aa069af26d105ff +P = 60 +C = d5568dc6fb38f81795751f0dbf745a81 COUNT = 93 -K = 34787bac6116615af088e4f49572b7a976dee8c8c63f7fdf36eaa18735349ffb -P = 2c -C = f329b7641160b138148e759c2742629d +K = bd90ef7177976f235ebfbe36c0147710b70236fcbd246c65dc62fee665682bc4 +P = e3 +C = 7e15f1f375e4b40864d097610ca8dbdb COUNT = 94 -K = daf48ee48d5fb653e10bd6cd1ca96d4ac537920933869ffece5bb89494e29c1d -P = f9 -C = 4874ec364cb1b0cb44dc4b17c14facfa +K = c70647babc35072dda36db28b0e8faf5dd1d52bd9af0d18f1c7fc4ce1e24129e +P = fe +C = 75803da32b23f8ccf78d92feb396da61 COUNT = 95 -K = 1de8011aafc7e56430f2ec602c06f0ab0594bb232cd265ea9cce42ced7eb9342 -P = 63 -C = 2843dd877915d4863b81a9fc0d180804 +K = 418106df2a6856c2780fb566d6875b6c7d141af6eac711455b8c68e7ba1e3000 +P = bb +C = c9e901bf5b1f6ca7bbaa13580175ed0c COUNT = 96 -K = cad96b00a79961035223aaaa3f62c3e2e126ee407ed62f8f1b71ea245046570b -P = f0 -C = dd9c6c46609b00bdaf0b5ab3dd63e732 +K = 353cb04915b6dc5b7bcd553368e00c1470a5da116e03ba2e55bb3803aeda5e14 +P = 0c +C = 08d8528e29e21ec9b2bfd677fc1f51d8 COUNT = 97 -K = 106e720d635a8259e80c24cca3b3cabdd79984ad98ada5c5c1bfe4cc776c4d9a -P = 1f -C = 5056c9c4c4acfadf78b735ddbffebeeb +K = 3d67ff3f74c745475a25a8fed48209899b0617eca72bb14ad0487fa8d16fd2da +P = c3 +C = 5b6e3d2fec17650bdbdfb15469087721 COUNT = 98 -K = b5d7a37a21c8ca3a8f9599c46d8f85fa73ed70ab8f231127b41fbcbfcf3cdf2c -P = 75 -C = a55ab23a1ebe45ed633c0c0925aa0a79 +K = 93d375d4a8e5f2a05a7eeaca9859b36f903cff96c61e0a279f4781cff12eaa9e +P = cd +C = 482b366d0ae2adf337ce24b87f270f8b COUNT = 99 -K = 88aab2ff3bda7269e8ae974cef60ce811dd81cf0def7bd09583e69f49f3e23f6 -P = 67 -C = f9c44fdca4ddcb40ad14d1cc530b6323 +K = 7ea117c127cd42657ef0f4c1c6e9cce042a3387ce20b795d5fc7235f20b60ce0 +P = bb +C = d3fc3af4188e0fd0b28383858a26bd2e -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = f5a3f19df4bca6d8b9736a410053e8fdde705237c882df80e6d836fa9b5eb316 -P = 9dba964ee6cbe6dad4 -C = 708ca1a77dcb2f1fd61ff6a8b7c3be265fc624d18a78b8e3 +K = 3517f0efa7f0c4d74f91af83ece5e7503bcc5ab82907a6e4b7ed34d87b69ab1d +P = 897e0456b289ad31 +C = 0b06a9b635d50cda9d4210cb3a71f990 COUNT = 1 -K = fb4f5463d70755bcb05a2e1748b662430733c02493571bd7dc0ad578166db463 -P = ff956ba8552e5840da -C = 0bab1a673e49d92f6f28d45eb9accee30a9b59d5a27ce20f +K = 1c997c2bb5a15a4593e337b3249675d557467417917f6bc5165c9af6a3e29504 +P = 3e3eafc50cd4e939 +C = 163eb9e7dbc8ed0086dffbc6ab00e329 COUNT = 2 -K = 790d4eee68e1c714db398e080072083838ffd8724ee490a66f7ca38f3e51b8d4 -P = 7bce061c0794a6950d -C = 8b5bd6f81d5ece6ad03ce2ec577b24d987c67c9391c20285 +K = fe1a5c8721823189770c49c62efb15d81a613e79a53f3950473c690a2caf3d4e +P = 96fdad6f24394264 +C = 73f2aa429ac9de086ed2d3e7453e7549 COUNT = 3 -K = 0d2f7f848b60eb6f044cb9e72a823aeaf442ec63aacc0bb6cb90c242d62f3cbe -P = d6ebaa05bf9bf3ed1f -C = ef1ef3324ee2b262d586ba9c0c700059a3884c342c49d351 +K = ed18d59b7b19dc5158bb2010319b07bb31a697aa3bd008c6782bacb396cd2a77 +P = b764f98f8620c0c5 +C = 40538118b6bc49db3b601b86937615f6 COUNT = 4 -K = c33d7a979b15e161ce9e9001417ee6c07d3a2f19c9167a9331226ac8da84d3f1 -P = 724b9c270e1cfe7a8d -C = c853d57870e1174606aeaabdd0aaa998b3f7cb58bc1f8274 +K = 80181baccb9d6755a31d7a8a721ea5f9e5e1e2206aa450caf51a4ab461a1bc59 +P = 9c68661e07e3f8b1 +C = 71840e3311a9ab6738731b661442c648 COUNT = 5 -K = f0c5832c26228c576db85e3fe69f228f91d7a1fc6450158649093b30fafdba39 -P = 7d071d3cc0869ec77d -C = 125f276942e119220b0f6305dbd10bafcfa90f5c418de23a +K = c6e882f5b8e361e43bb3e54d5a7b8c690f485bcbec2dd2183c7e623f6b02c5fc +P = 99ae80eec64630ed +C = de0680b34f7374539ad9b75f08f4d8e6 COUNT = 6 -K = d4e3496bbe66def8e8492725671f573dfd44aa318af8667c44bf9072f9b80541 -P = 837c27423e08496a9f -C = 6efc2852aeb664bf5a0e585e4d549e9bb91bd7eb204802b1 +K = 77d3862b2965f69eab10e8665146489f5773703878dc0d558c42172998ddf16d +P = 0bb315d06530087e +C = a1a0cc21cd8c995620c7c70f6ed01e03 COUNT = 7 -K = 3e61aa6124d319522ff7d0d3a00942b3265b7042229847720207eb2b129066d2 -P = 723029c86ac86279c1 -C = 60f6c6244ca33d694d345f9c07a9d1c02717434cff59db8b +K = 4853f20d9c2416e7213af2bc8c15f9c8d25e5c26fe3d889ebc2f5259a0a3b176 +P = b66c438c50e8fb2b +C = ccfc613f449693a8fd71eaeed781ec89 COUNT = 8 -K = be2df939197a1e7a953c84da30848daf20fbca3fb5e740386c1f6ab3b3cbd9c5 -P = d48b2fac0f53658ee8 -C = 37b998430f2eb7b7646dd55a9924ec95456b49e3d057a47b +K = d76c14dcd01c706c382538ae615b57ddec85e4008c9245dfb1ca62e39fed06be +P = e8acd696a026e1a4 +C = 085dc9c7f6ede83b1cac7c6b02297210 COUNT = 9 -K = f29bf0c0e853274f4835a689260a2b92526258e6b47e3e42e84d48fdaf7ed206 -P = cd8d4ec02925640d52 -C = 3e73a2570c3aa14c7a5d22e80916d4c55ad226551af67d04 +K = c865e55f8faeb4e0de8656a89c37e3e6d1714b6955e0f2e16982c1e4b21584ea +P = 9f18d2d245804314 +C = c404b33f590752a7ba1fd803c76c6e82 COUNT = 10 -K = fe0b450be8cdb4f2319d55ce91e41b457f78f76fd9b2d12abadd1ae59d5cebf7 -P = cae4040cdfdd0c147d -C = 0d4966b900f7c4bb76bbfdd4c02bcd53d27f659bd0653d19 +K = 73b7217eb448f07df576bc8816a65c763c2f5b20fd8e8c70699919f8ab205695 +P = 9d11523588de6a48 +C = 2acb5a6cd1941bd46c952a8a987a5078 COUNT = 11 -K = 1c70fd6adb0971fbf90debd5c017c8fb6c7864a4396600a6dd3f39c3ec7ed488 -P = 1837013dc9ca9e9e5e -C = 946e3e7979153ea7dff48f80e0e4dd9ca6ae6f52e3510e1d +K = 94a07fc42db0680b048f5985b91b67a8f26ee2ea6faf9a0d0230deb5171c53ed +P = e360d94c6ec59eee +C = 553a4b78419af63bee81ecd10068a79a COUNT = 12 -K = c7bdb8fd4cac329ab3d5a868393f91c1c32d9e5804770168f8865e16fbc629a1 -P = 4f4348be88aab7986a -C = 71ea3f5f4df864687a2fcdb988a3e8fb77b2324245085aa4 +K = 5e1b7a72184c57ea753fbc4274d605a2010f2ce50eb615e5594e13d1a8e7f747 +P = 9b7548b0c5de27ca +C = e33af6e02b6298fefc70afc02ff70a76 COUNT = 13 -K = 5fce0bc672678520a5aa3e69988f1b9c60f0c7d466a8e9f08d0825324e69a6a8 -P = dec57d4221c6dace5e -C = 9a9a57d05b3281303a3a97a11ad93adfe846d0d79f7cea21 +K = 02835aa623dd596e2c7204cc33a3fde2216f2404eb6b4227729ceb6fb89ca717 +P = b1d124bc6b7a74f1 +C = 9d7dd82b6cdf8c8c1d26f57adf7d2d78 COUNT = 14 -K = d070cd3309554db526e88091e5ec98bd2d3bda43d69bbb38e3abd1daca56c35c -P = be9a4e835adfa2977b -C = 2a29acd55eea8fef38677adda80d96b4ce59c38166ebea36 +K = d7de1aa2a00470b9a4a36d7ff9b8f39c63625c391fea151f7f15bfa34b41d0a2 +P = e29064a60c41c758 +C = bba9da96df03b34aec38e0377b58486f COUNT = 15 -K = 7018235bd1999eb4ff4c52bdc5ed3f7f4407053b17cd2f39bec3eb288ce18362 -P = 1c751e521d9e80ca9b -C = f7f28e0064012056cbedfc12f44ee64207e9c8eea0f95fcb +K = 56be1f236aa6ac0b048d63b7c5169af759497ece9755b841c0fe2aa2eb38c9f1 +P = 66f57a3e34ba8737 +C = 0c5dce200d1dd44dc3ca6ec1511fa5f7 COUNT = 16 -K = adda9cdcbdc9a25672a3943433abedeceb2ab9124e571b450647dfe3434bbf53 -P = dae9d63532a5e17a43 -C = f352373253c5b48c978ab2e746216f00dd1c809541ea1a59 +K = 2b27299edf71285967953dc7611f7151a45206082ea04398dc7b1b65d93c690b +P = 1206c6c982e88821 +C = 2abd18637cac70622b1985f585d76ab5 COUNT = 17 -K = 5d1c46982fb66d44e74a4823cdf4fccd06a613abda813221303d845ab1330933 -P = 7e0f17faabe243735a -C = b10ac3652387368bff104a6bfaa98015ba0807b3e7005e19 +K = 39faf129a5cb455bc937df97cf20a218863e237d4bdd49fdf6dd670c3b395581 +P = 35d1f211361eddf7 +C = eefd8125d617565d8056281e57fbc5f1 COUNT = 18 -K = 3fc38b339485bf842462170336659a6a9228badb5b8186e339e83c3ef8b1f20f -P = 68665d03522b0b1b2a -C = 866fda105285e36316b374fd225f803750afbf78a3fb1bdb +K = f27585c9bbd461875e126638f5e57cd3f9ca5afec3befb4601b365897e7bcc23 +P = 4e6f6e890a03a872 +C = 3f325cbf82b8e8bc631f70fd00d902cf COUNT = 19 -K = 93142bf263779fec7a5b26be12f55e317fd029627a991bf4178625951b5e6707 -P = 9ee07e5d61fd3ad973 -C = 5b901206aaf8b65385f1d7963e6a5fa815b10057cfc634e7 +K = 21b98b3a566dfb8fa7c29387fb2e0a41b542c2d3c6c3e0a38f876f9ca7528186 +P = 3520fb811cd180e8 +C = fcbc4fa8a63ddd6606070662eb8898cc COUNT = 20 -K = a696f062f267b6cb984ea1d7dc8bd878e960f263fe553db6872d053aebcc6365 -P = b0ea6237b7cf2baf70 -C = 24a9ef963a6ff38ce5d512d8bfea71b239377bae41acaecd +K = c2e232f724a1b7fdc18fc525e37fc100c80780831e69d047d51f10ed7da8f2ef +P = 53cfbf35ee54860c +C = b9c44ebb1b57457031c048b596fc0891 COUNT = 21 -K = 3a8bfd24b56a7ed96267c7d50148e7cd8aa0cd9b77af6b91ac34e14fee5dfe1f -P = cf6ed5e0c328780f24 -C = 13d01e329670bd96abc2b7195143815aec63aa0d6d471400 +K = a1bd1f4dd213417788138db2a04397b9621065fdcb24a345534e1c494cc26c21 +P = f7c3ef7e77a70329 +C = ce038c8c1d34bb2dfdf7a70448e2ebd1 COUNT = 22 -K = 485869700ff30a5b35e00a41b42ce9c3220012bed814f69a3694d178f5e965f3 -P = 0ca353b01574de0a0d -C = c9f7741041e73b2aa4a72eb453ef0478451c7d834adc37d4 +K = 60d966df3482ce1867249536b4ebbd740359b513852eb7f3a0703641389dc960 +P = 2139b6ab18a7b735 +C = 08eb63992b3ec410e32097df0aa74c57 COUNT = 23 -K = a963b787658c79280e6e89e8e7a328dd6276417a47ed0a511222645dd5b82c65 -P = 3d8731259b343186d9 -C = d1ca804d2fe4223094b7af69c1d3904626d042c019cd2835 +K = 5d395f7fa8185e13c226b655ad8886a139509c1cc5253a9118b77ce291e531f3 +P = 0fc6da6d2c644e36 +C = 2f7278520c927ed07138183a3a1813c7 COUNT = 24 -K = cd67a7b737203ed2764791182ba50c88abcf4dd4df3600a580fbf85a8ef3991b -P = 235fa4015e820d71c7 -C = 02b345228a3710682f95cac6938ff960329f44b649853ddb +K = 55b7035bd6777bd0cca55e56e0a47b8c7f35cc4b10d85ea7e59580c159d5be7e +P = 7b1d1d05a7d7fe8d +C = 71c51e54358f97361ffdf58268c084fa COUNT = 25 -K = fbfe3e54c25d8ca20d08194fb7fae942c08eaa8f90d58d79406882405a3d92d8 -P = f0749241c3d29f4b5d -C = 7ef45541e3cfdf261735a82b7e6620a6919323e01b05dd8b +K = 772178476fffd6fea1dd90d2c6f4906bba9bf3e2eff2d84f473524827f2a51b7 +P = a3d56c3b6befdeeb +C = e4dc3d6afa862adff77eddb502718709 COUNT = 26 -K = 9f9b25c303558298a94fdfe14069690cf2008d9a1b6e2bede336132870f22902 -P = 279b8a5d18b6c3cc97 -C = ea457b0b6fa2c7e0efa844a72087e8933ebd0a2a25df385a +K = 2dfc960aea47d773c0a326135f664ed7c6f645708b7e77d8957398ed1a64cc81 +P = 24275e146cf999ff +C = 41cd22a2d2d16719ceee8e31679de896 COUNT = 27 -K = 4e1c21c88714c0aab10f61eb5b0839d13b67d468300fbcf6d6f014bf773a6d39 -P = bc38b51e7b3e69a7e7 -C = 9d9ad085c2967445adac9088a1952254c1848f6ef17cecf4 +K = 86dbc4c469e1b6d403e4e4254851e8dac9dc53cfef4e927b3f0ad645d50149b0 +P = 1f1e010fa8cee028 +C = 9577ed5b80d1fe22c651c999fe3d00cf COUNT = 28 -K = 1240c817888cbda54c3b5e62f5d7cd02247b9dacc128bf6949961c5b2880ef0e -P = 83f25e8b67d6464172 -C = 485d0576610ca31ed1e26f9fb9d1c00966aba7a3d745a7bb +K = 9f6db978d136b8426f36e7933b830f73c8b6d1b9efc0fad67262efabf806b108 +P = 8ec2c7f4e7ff28ec +C = 8e18419e00b9c134603f5efe0e8b33b7 COUNT = 29 -K = 830fb2908ae1a09a515fc06476d9018bc2f96aa386d2feaa6269c4479af7776c -P = bd004ca45263544802 -C = 1173174b51087ea299e494a88cf49da819648d9b7cc940f9 +K = 717f3d9618b35196bef9cdeb9119c9183e3dbfeeda682e6117b3e326f5f8b821 +P = b16233faa4e747bc +C = 8d5bd3f5e39b1359dca88787fa96eea5 COUNT = 30 -K = 39fac4ab3218b90f324325458547d502af2b358ff54813aa4698923b5dda1dd1 -P = 663e088613d73b598f -C = 58e0bac70a050c6d72dc52a5d6d319d019336a281474ca0d +K = 0e2d21b175e3c83fff8f9450d66738f2530db65dd7df2e89b9a15d61ad200813 +P = 736df64e8ac48ec9 +C = c7bff987db58f329a7b90204659165d5 COUNT = 31 -K = 50b77395da90d41eb74176faca43ecdc253ed4b1baff317f0bdcca62b410a3f7 -P = 23ac52d32d88e47d80 -C = c98f2c6859dc783ae42615fc51b09dbdff7740a6161d4fb3 +K = 1ebb253bac2efcdd4fe45a0dc17d72f8d041db1971105cd13d430dd6868e88a4 +P = 8540e602495b797a +C = 88fc27f5f35ee2190d1125cd08af2d9d COUNT = 32 -K = b51e0388121d01bd37c62a6464ca68c26f624dd6c72329723bdbb3b583ec2ca0 -P = 6d4a4bc790459aac10 -C = 0378156ca114cb200b281c06fbc08a472e2cf39b32411214 +K = e67307b3b5570860f7f88b675b37479af4f6c1026297d5b9edcd4e126220f67a +P = 16d581099200de13 +C = 409271f87de8e19d8bae853d3341f540 COUNT = 33 -K = 13dc9366f24e678fee1285d4e1c9c3c965e060347df978af0464c712d8a7180f -P = 6bc58539b200bc5f28 -C = ca6e1440ca3bbb8d5ef2d102ae1e69ae3e3d57d16d85d760 +K = 54aae146aa5f54ed8d0172d1ab0db86021de166234d6b63fce570f0a6d785ece +P = 99d392a1de28a7d2 +C = 4c093ba6d5f4ea48da8eaa0892e045bb COUNT = 34 -K = df51e34ad99f287799f0a26e3349c8fff3d3a4fa14dc18dcef0792f36401be1c -P = 7907d511565d1b3519 -C = 92d084662d09ffd2d5fb06ac1eb701c5e1150cec27a807ae +K = f0578fb09a9ca9199bfb4e9c07d0b8c4ad305ba26e74eb26ac58332174351051 +P = 26a8ffd47c4bbb6c +C = e90eaa88677dc015501027625a00bd37 COUNT = 35 -K = bb3326a65a89bc86b63eaa114e05b118de3640990dbc3c4c034f4b584a24ba8b -P = 11df2d7662874ca38f -C = f8f2dbbe99be691e973f693f53416f99b87b1ea72bc876bd +K = bbcd2af42dcd4dfc046af4cedf63e18b68cb3a9b61b3317e53fab2f56e0054fc +P = 4bf443101d5214de +C = aa2f33c96b9563f161423bfa02956ca1 COUNT = 36 -K = 53338abffec80bc1a56f0185d07b137e1aa90863b661c48dcf6d0d66a597ac8a -P = 17b90366e6202c74f2 -C = 981deb6873ed2d2f529b16b0b4b0ec2efda0d8aa607d5450 +K = 49e7cb8fa435a893780787f5c3d66a58cf672d96676aa564b533b292b16d7bd8 +P = 76bd335a1c7dd272 +C = 12b8169cb7bcdf34ec48827efb7b6286 COUNT = 37 -K = 6b70838c5781d877ff1e412943b30ea5d9ddab378d90bb2b6835748ee73773f6 -P = 5a80479b47526cddc6 -C = d9111d6457d1ba720265aace5471ee35dfe6f60f54b748e6 +K = 348710d28802139cb2e6b30e173c3373ffcc164ad908c19641a708b693275a58 +P = 324b06394c71af5a +C = 3b48e62acb1d7a91f99de2d3e0cf989c COUNT = 38 -K = 3ea622b22a413e9832932147b8528a5c93ebc7b1ce04e38cc661208e4521f003 -P = 90ee2d23cf39d150c5 -C = aa39df7177626df5f9675e8c4e652be0e993add755adadd1 +K = 62af22442cc612385f3aff044c4f932759c8171e53a0024f63fa213f538a9fd5 +P = d072148cab2af90d +C = d3cd3d6c9c8f8fb2b0a256e3f880a200 COUNT = 39 -K = ce433ce6865c6ba83a4f0ebf1cbe2e561decc1d4262929d1de4fd6dd8e480028 -P = 440f879c684259eaba -C = f7ab4f2df21dccef9faa199a01e37cbf6315e237b2aebf40 +K = bed443a7dcc495069e3a998f8ec03b7f860eb7a15be1da1cbfa38dfed01fbca4 +P = 7166f3be2158a40f +C = 198385ee6e5a4123fc9b6cbb186f2270 COUNT = 40 -K = 288f45d6fde7f7ec1aef129cf71369eecee40e18bbea45158b555d81c148ba36 -P = ef893ec856b9e89db6 -C = 72eed19f6e02775dd7d6bf10abad59526b6b5849860ca7ef +K = 975bf4786ae1bca3091e387277c1daf7d32d7537eaad00c9b129d3c1fd0139ee +P = e35f30b1ac5237cd +C = b8897be129cd0e34107fee5acd19e7b6 COUNT = 41 -K = b7878cf6af170aa311d13f8b4146fb53ae9311f7df23252183083762aca8e616 -P = 4cbda0e5f70b49ab03 -C = 3e4a89578a3db91b15d4b7e7fb829d02e1cd0f5486d8fbe3 +K = 0365572a7e0151c7e79428d201874f54c77f28a4752ff70e434c1479c1d9e646 +P = 962c371f2a359193 +C = f94a680eced3a45bf2384933a316b742 COUNT = 42 -K = 8f781639c180908665e0b532e626b45f5fa7b80a319ea0c31e30e0bddd09cefb -P = 0b8550a9d6733b72df -C = 18f494c93c557621c1c3c380aa74fe0eecee1d7c6a477b50 +K = 74380841d66a4fe011ca45a58263d98ec28c3bc030a8a77792f930ca9cf17e2c +P = 10457997872b3528 +C = a67240368a997d86b13e10ab4444bc0a COUNT = 43 -K = 9deb5c09b1250292d37e3c18096ec80c94492b98615c6499561e4c8182112e62 -P = 85c54c309a1ee24d98 -C = 5e823b3264f6d9edbdd37570096ec9db8b35ff56f448c7b9 +K = 9c4184a633a24ed0c5473679c1d46654d61520d87804f79ed2737d9e0ca531d2 +P = bd1a3c5c12a7adeb +C = 5e8abc81931757fb55319d797008fbe9 COUNT = 44 -K = 9825bd909b8d7c60b117aec7bba4f1878a8c4fbdcd9f06542b9eebec87668f94 -P = dd27b995e3e767b01e -C = 720db9535ef5646a7cd0600eddbcecba572b20a60c66239a +K = 3ddef8d1daea0a20e3c4980479b0f6917d1fa7413850511b13ccaefb30696b6b +P = c3f867320df8a5d7 +C = ce59d192f023e9b655ecea26d46f2a5c COUNT = 45 -K = 8b4327a3857de5c73be4468206ad4830e80e3c6dde6f1bb11e257e597a319b2b -P = a73843fa14ed419ea7 -C = 1c036a9730ab2da8bb1620c9b83bb665c03dcdefae797b2d +K = 2d94472c983f13c903225d3479dfb05650e55dbb0188ed5c2126ee9593f16738 +P = e44421dbb392acda +C = 8eb68495819b4dbee292860fd80a9ec7 COUNT = 46 -K = c63c338607c5b5f67aaf7a7d91e1d74640eff0be661a7e8e97a7b4ea1918fdb6 -P = 75d2294bba66b1092a -C = 2ff92666c4773a988893f7382cf269098d19f9bbfa536ad9 +K = c7e05b40952df19130c5fb65d71516d88f51034e760c882241848c6996b2d52c +P = a269e7c73c8eee24 +C = 0bf57d7101b6e16196c89c112a8f184f COUNT = 47 -K = 51fe5f7c69badbdc9f85c472cc7a65de46915246ea9e71b5d6fa1b43a66a4342 -P = 2f308fa37b23aca75c -C = 767581f67793956ffc350dd6b0155ca879ef6d925ed55067 +K = f73a2707cb1943b4cdc0552fbe90e1f445ac1ac9651709410bd1e42c9b8c626c +P = 86f7095f5a880cf7 +C = c13c27e098381eade213801df99f3065 COUNT = 48 -K = f3260c39b7b3d665b7892a774930450257b3f74bd58d6f3d92cc69bcb774dc02 -P = cbe5374a2f56c6cadd -C = 505ac17910626ba24ab74c16d1e392d8a17715159e382d54 +K = 3ba21a01de98d757a18ce476cda5cc0ddb76435a1bf8359243d9b488756fdb0f +P = d214c57b2b4c8aca +C = bd8e28245356af9309a38fdb7a7f0492 COUNT = 49 -K = 3f0f0c71cca44a0a7b41915513c47db8b423016ae2329fe68bf5fe03bccef0a1 -P = 16a111e1516a98bba9 -C = b0b69d2dcaea4cc43e8a89dd340363f1915c1a289c66ec25 +K = 103061e5ee1d032ac255e0fbf2c0b48069d42486449b5a0bb2c5ba09268ea942 +P = 59b1152577d5c9b8 +C = 65cb5632b61d4c5e2c221b2e9f916070 COUNT = 50 -K = 11330cf16cac5366652ea46e9f138ef9ae6ea8f8c4d0e94d01330d79acf8325a -P = 5d6bc09288dbb39431 -C = a9d4904ad2366f2fb9f32ebcad3b4cab92e8f981b8b6582a +K = 65519f7cb3836ec2f6ad4a13e4828d86935720b38af72c7cd08bfa45ea0d9f29 +P = bdfe5ccbca5c80f9 +C = 50fc4d2bdf4365765d25ff549a4879ee COUNT = 51 -K = 70a32b763b8fb63a3805d0c17e96d111c922c267521de0420c537c9e2291a419 -P = a15b0a04872783ca06 -C = 26558446d970d70fbc174752c263fbddcc8f67b016ff36e0 +K = 06ae5a13df83695365938d9c207ec7a05b163447472ae535fb377ff8155baa75 +P = b7602d68e5167002 +C = 2ff673e22cbbe5c06002b76fe98359d8 COUNT = 52 -K = 9c00a440c4b8c0f9cf8a8dac4dd9da59824059e6625ab52521c01aef26d30cd4 -P = aa3aa221f2d01c66bd -C = a93a9a8143fb2dc34dae74db21a828a713af261580d1a4ab +K = 81ce0e7c6a5137ded4af75a3ad6b2847f388c6bffad23c6015ed3873d361ceba +P = 3a108484967f7885 +C = 25b67008c10e8f2ac8b2e082c4a179bc COUNT = 53 -K = a2f8898418ca24aa00e4dda17682ed528924e6303c701dfa01c314983be227da -P = 52074dcc855556bb6e -C = 92c7c2d6dc4fc4144063f0f2214327daf6eedf46cbfeac27 +K = 1772d93af5327cde89e462e3cc0353e357776f4c524b0f55ada15e0abefaa51e +P = 3254553592a0cdac +C = c93b8aa6cd3ad6299c719be95f22bfe3 COUNT = 54 -K = 67edca14fc1beaf06242d7ca58b7c89137c4fe3b5947ca87a851d7c69ee42346 -P = dc343338447a55d573 -C = 22604ec84f99f70459626241a2a0c62f48e2820ae95ee44a +K = 8cc3f141696eeacd62c7e64bb6c0ff04d6e8260051d98c762b39a05763050df8 +P = 36795d2552ad3a23 +C = b7f37bd05fa3bd9a285bcecc1f5d5238 COUNT = 55 -K = 64b20ff4dddb7e6a3058cc5a1fedf619c3b18bf1d690b5062aa8ab5b3d2e83e0 -P = a3cb3a0243e91c58f4 -C = 046e8f592d69b68033e596955de1a6ff08fe49eb498dbfc0 +K = 7d277f44ac2a5606c9c03a311fe48fb15e59a83e505472ab2bc956ccd9843ab1 +P = 6a6d2df55f8e98b3 +C = 7c8d56da2d5342b016c675b11f54fb16 COUNT = 56 -K = 8550580dcf59a05ce802156e65801e5b1f6e82c8cdeaef235ac9cb16cb9bb07f -P = 81872540b3bbee10ff -C = 6d8cc94aede893b476480898b58d59a0dcf4fca53ed83fb8 +K = 59ad8002ebf590a09cf96bfa180697f091406671732078e847a706d92982b04e +P = daed6179ceabd83a +C = 3e54d150f809c03eeec0848ae4855f30 COUNT = 57 -K = 4154019880a272788b07f1ca80ade881263115426c56610b9d7fe56e010a3810 -P = 4e14de58a890798261 -C = 7ab88af3d7b9d576be4e7d9b5e59dd1ce0a112e7d62cadc7 +K = f2c45ef182a632d196887152fb9ec1a5480ff97059505c94d0261cf6f1154251 +P = 12e091808b56a06b +C = 7462fdc426c96b53dae820454a4b838a COUNT = 58 -K = 03ab58c0f0eb9cdeb6a5ce3b5e56855ce11799b4a8033339bd97da28b37712cc -P = b16aa5834557a9b373 -C = ba84de0b1b0f2b1540abff9c050672816e0756e429b8b6fa +K = d4089a2aa6368bcad601d3ffd7fdd05fee94573a6da783e1e27dde734659e37b +P = 363609a00088e128 +C = 80f4c085cefdd2d4054dc16d7777e511 COUNT = 59 -K = aa988c8f8621c23dd134db70b739c03880854af4a86b48f58def01060212357a -P = 54b7c9c73266a9ecd9 -C = 69a5d273934c93a6f6802678a091d9ad3228bc38946e3124 +K = 4c4a4fb84b3cec968ef832fe78c100de982398828fd21ce3baaf8acd4b303504 +P = a808fcbd0850f668 +C = e12bb305f8d58990eee9c8fa3518a932 COUNT = 60 -K = b4db81b7e1227f1b09b9ef5f1a145309e7ceb15827dac3f5554e3ae665e85881 -P = dbd73c6695e168d5b9 -C = c591d184dcf9ffad67749ddb1f50cf0fc29d21c780c9a5a9 +K = b3214466d9957183c5347bc5144d4c4356a110bd65d1f4915f1e17666571045e +P = cbdde6a050180f39 +C = 08a9b7def052a96355baf5f67ab2eb8c COUNT = 61 -K = 89236ac2411d82967429dbfeb4cf16357e190a992afc7008477743ef30acdd67 -P = 23fb75fe775e8506d5 -C = 12f70b556bd6305d654fc62f7a4f741ad0fa3df329cfa99c +K = 8839a816f9e2428c26324cd5337ce9ac3435e8c2c93b88b9c3b8cd9e67bc7573 +P = 250abe204d979199 +C = 090649aaba2954cce4aa1bf13057b783 COUNT = 62 -K = 95adc5f4ad8b56cae852994b16a548c2e9377f55f1ef5dcc225ec15ae73c1e7b -P = 41af13950d256008ed -C = b1baffac6c8b3f0cbee8a998b6767034f656ec5ec9d87d37 +K = f46427514f5d2688e861e89809f4cf1d5c74bae20f9f087169f3ea9cd5d48eef +P = 4a117beba6c7ab48 +C = d847b5bf363e0c360849d6d499da22d1 COUNT = 63 -K = 3f97744a4f803b5fc12cf9f578b740941b734da7efe29438d4597f6f08f20603 -P = a26c79666a0c46e9f9 -C = 59bf77ef55e624e3275743ddbf6feabf5bb98bdfb2455985 +K = 48eacd791f5e5b2e11721ef3314a75dc0cbdaa21966ec0a896b2c04b29aca9af +P = 8aedec0dcf85d11a +C = b871b0710e4528b268e845a9ffc336d1 COUNT = 64 -K = e78d360147d151e1bad989873ad74563c60182662bd7ec25cbe27927381fe35b -P = 05b8f6037083551841 -C = a98e7c29b329b54dd1878b9070ab8bd81236ed585323eb80 +K = b6a087cf373befdc8cb90eba105e80679737aace61976b25a59d1e0c0aa65831 +P = 3df2cd6e98609d54 +C = 6064d305cd6614c84077be6e8a38cb54 COUNT = 65 -K = dcbab6d13b36baf3592b6880c13710cd80ec6faad1cf82bcbf982246bb8bdb70 -P = 9d91030179b3ff7847 -C = a84b4ba1ed8f99224fc3748cfe80dcaa1f7d1e5bdf2f60a3 +K = df53b07716de8d98430a191dafd724246f1c80760a467cf6074fb90d34d35bd4 +P = 9bdb0b116fe03597 +C = 90fb8994a992dc5dc072f00dfef1ed08 COUNT = 66 -K = 3a746d6ef28258c2bc5a694e8b6a332ccbf161cec26ea9f4be34b3b2e3ea0e30 -P = dd9b820c445b9d9246 -C = ced7cb19e9b0df1e5c3cc1203637ae442e394f9b785b9b98 +K = af84ff19694bdfb1988a38076ae43c9810e8930789c397c5d52f20cc9b022346 +P = 1bc50757e86deebd +C = a462048e4e8be29d1904e3e51b906ad1 COUNT = 67 -K = 59ae62dc5fc2c8dd5f72f505e4c19ce8b6752020ba79720678e812dc870f4643 -P = 046e608e63ac953c37 -C = 1e354ba15a1db19169f5300208e8f41007aea558850754ab +K = 74e46ddb22af78aed3bbd03935a3e7c21527c97ba563a479401a7d7e96ec7eec +P = c7d9f4403859e7c3 +C = 21a281c7edc94373114c423734151797 COUNT = 68 -K = 6a1dfcaf2e41ec26d4d7fa279995222ab8089aaf9cc6837b73bc4481b0673856 -P = bb3d12d7b3c0608f08 -C = 2a018172522a7f890114f4e16bde116ac076ab695e07fcb7 +K = 6d9949bfc0141071661e2e9a020d1c50d3782b5fb4ff27e1bc8bdc366972aff0 +P = 1a88f2a4436328cd +C = 3eac9d97f7d76442bc0b042402048b8b COUNT = 69 -K = bc8046578e46e120049c9ab276b076be559d1b5b1ae7e204a887fbd0b43fbffd -P = d3e48555ab5025deea -C = 2628ca2c0d5c5c84eaafbe0f35b3cb1f1e29954e43b50081 +K = 492cf1c13e242265b732b07a5b39285686277213a84469729f431012c082be4a +P = 83690b01f284e697 +C = 30227ee6937983c15da7f1af9f52d574 COUNT = 70 -K = 7c4fb3a6606418aac1ebe84cfdc6b7e46ab85764c064c37a54e018fff769fc85 -P = 75021cf48eda4326f2 -C = 6eefd364f4507fac37ed25c541bb802058b4a441f91187fc +K = 67f47e846fab3af585acaa36368e74c6ca9f616af3a4b874a06e0b5bfe7b1bd0 +P = d43ce48b4c40bcb0 +C = 2145cdb483496b34052d47d60193c991 COUNT = 71 -K = 4977d267e166fe1a052103bf2502648d6b7e598d3c9380bccba0155b4c77499d -P = f04cb32dc3c1c69c53 -C = 82c4197313d9b33a6e48ce1bfa3a1fec307b71d2ebbe0f90 +K = 2c560e12fb0612844a0e328a9e4d8732abedd66db975bd5d39678c9c10c863e4 +P = e85463e833ca833c +C = e36663efe49bf1fcf639cbe7ca393814 COUNT = 72 -K = 038deff1261a10e2ba69e34ae5ac1c1a46d05c107a86c60511d946d8812ad0b6 -P = e31c2839de24b3cbe9 -C = 9f2bf7775a491b1ffb6f65d04161a7cac30421a3fdfccd20 +K = 193f7e3bc1153624a27bd0c5095fa9d8bcdbfe768888a0b08eba0b491be4dd0e +P = 716f874c6ac29754 +C = 6f3fcbc3543310631ad2b306712bbd49 COUNT = 73 -K = f4a496e8f56fa6ae753fdd5913665d8a5746e1db6eb953836ad965e8804270c8 -P = 4a06057efa0dca1add -C = 23258c05cfc9208d6d40a98c2a96ba968f683a9b7c3868aa +K = b5e5be93e531031f58cd2a2d995cdc47f8b37ad1bf5f16e6b443ff3e4fb283c8 +P = d020276d563971e1 +C = 5eaf0887d8155183d0cf13c84caaa07f COUNT = 74 -K = 64805837d9bfa952e2b373a3c545b7325e36f9c52f0b69433af5fe2aff15cd48 -P = 42e92335f4061e75a1 -C = 96600896758305efcc8408b1da29d591a989f164aa85ab9f +K = 83faa6824e0dd59d3b5a80e9bfbdc0500ca5755bc8d61e3454757afb1cecb2db +P = a3a6dd899f38ba3a +C = eb86cbba356d0b9c9b97bac1b990cfcc COUNT = 75 -K = 93ad97824012299a773450d8136caa865780f34efe092204e68eaef787b2ae21 -P = 8a3838e845d332aff6 -C = 7fe0815998abcdd0d5bc8d42002ad1ab7d3f5960918b3080 +K = 78eeb61f180565b6d1c3abdb8c6dfefb8c311191105c243ef58da4d4d2632edc +P = 1a7899e385c4eef3 +C = fde09b053145c5d343d35074176f6c52 COUNT = 76 -K = c23298b3ee9a2b44266f56e132adeb79b4c46c2d776fac552ef1e201df296786 -P = 6dbe8494ffd1cdbb1b -C = 72623ee3e1edb61c0315d6cadcb130a8287511d7c800f54a +K = 22d377a2bed59c89c7403bfedfc47ab0c3737fb66f38596d845214412eb9ebbd +P = 16d33f8ccda3a366 +C = c98927ab1612d29e826a466262b7ed62 COUNT = 77 -K = aa9984c7d61601e3491dc741fdab308cda535d8d3756e0a82ccc7722f5c35d37 -P = 6bdf09b41810303210 -C = e071227c2d3e0ee3c2281c06c75bd33e02f87e90737f3ade +K = 6ac985e25ce2064aba2ac87e033f0c9563a1791455bfedd90ce9ee049afcd189 +P = 492c8b547100b924 +C = 41e3cec3672d07cad1f3958e3eff9fda COUNT = 78 -K = f94f16d49dbe4b783312ad027f481c7214575a371468c3c140bc617449962012 -P = f4ab0cff9ca5580fd6 -C = d036454f5335fdf423450cf3c44e01774b86857fd1429ef0 +K = 41fcc6ec7719887b0556adabff429f19ad064d0567f058c86e194d36f4b6ca24 +P = 7516fc769ffe63ed +C = 6dbc97a3e599860d81ea801aa18b2ee5 COUNT = 79 -K = fb7ec588f69476534adf98fcc9c748fb584bab4abbef6b5bb67ecdb05336a910 -P = 7fff72bafe642bfcaf -C = 62f1022046ca25d62630a92ad83822e1cc4a6055d05fd6dc +K = 799baaff83bcc1c3431940fe07faf0cca2d247fdbbefa09bf54aa2d531e21447 +P = 43a8eda35a58aa4e +C = b6504efa73e602561c8fc64b97ee583f COUNT = 80 -K = c3f7b45cb5e649b277c82ceef43bae1a8f4d206d32acae14613069db7a2c6d78 -P = 4ecddb7447a6404868 -C = 70dea7aaf56267ae6e27ff455df2440b6e4b1d216b88dc71 +K = 59ddbf93f8394d5530bf345db5afb42c782dff2b20a74e3505452a1b309ea250 +P = c3c51f38ab8ef792 +C = f71424c996e9463ecdabfd29d62c5689 COUNT = 81 -K = 3142e589b2920b09cd79004d2e29d7302ce99c3496897fa5d28dc9386a73fa07 -P = aad191443cf6cc0588 -C = b5aa87914ce1f1cd7932d61a6846d32a90afec3d6f243016 +K = ff28fef449368e61405378e327806a6c0d435c8701aad93907bb9b4979564526 +P = e337a2cfeb54e1f7 +C = 4ca4e1f26c6f042cdac38b7b7cafceaf COUNT = 82 -K = 0c4d9ef45e7126e2180ca0e2d812b33d0fdbeccd00c3ddd0fab1ad4526b8b4de -P = e5e3d9d693c8d49ed3 -C = fa81b96712a890f84cefd69c9fcf28dcd39ed141d6230f8f +K = 989078eb78cdfdffbc66ad98194ab31bc533bd15a0d787d8e7133d0428152d77 +P = 51af62e72f379cf8 +C = 4941afc20008a13053e7abd1e82ce2d3 COUNT = 83 -K = b4671bb9bc9e00396b19031d8c84eb696244338af1da02f42cd3e7608a9c3777 -P = 21820649276a455ad7 -C = be78cb07b64576cb940f27c65ecc23ed288a82e3ebd53df3 +K = 592dff5969ea29c3510427ae4db8793cb2fd7f58c6b1eb9d9cac913b71ceb7fb +P = 1d6153359bd4ed23 +C = cf5d4d5e79f65f2c900cd9c9160ecc55 COUNT = 84 -K = 9053395243d7b2058f514637ab1729bc8f713f7f4b5c627422c767fcbaa6373c -P = 466a4593cf0f827896 -C = 7137d893647203d707b40e35bda77c4d63565b2d8b8d3d61 +K = 337ea2ab60ca43d14e60f6cba0ee1e6643c80cdf110d75a40ae20e0305a50f0f +P = 7caab463747c8805 +C = 35dd87e43dd1981af607de8eac022788 COUNT = 85 -K = 8df81b1cfe926306fda192fda07bb363ad7a464a9f2ebc0a19cc7de232bfec06 -P = 2ccbfe910fc5d2b7f4 -C = 18fe624ccb87cad6879ce89e06c607848928453309c60cd1 +K = 60d86f6a506afa66f21952e2d75508706af4b20e4dfc97840c9d98fccdd245d2 +P = c876861b055476a4 +C = bd0e04e3797f8e2e8e8efe055fcb7608 COUNT = 86 -K = 50509630c2d220db5ba5d90d0732d945d4e89e9e8c02b7a909448c1263eded42 -P = 28ba8996ff5e18dd84 -C = 62608f81e13937895dcb5edf79997e0de7e8fa1f1c1e4fa2 +K = b08b900207853c36a3b1884d246a2fde0438ba2839724dff4fae9a21cb699f0b +P = d69f394d8e4fbf35 +C = e508df55cd8379765faad4f0629348f6 COUNT = 87 -K = 1a7aaba4cd1c42f2015e1fe9a5208f7b4db9140e1a83afa4ae50eb53575db861 -P = f19351ebb9d7c2bda3 -C = a808e9214bc99da82d1b32b3ecd58e34fce791c7aa2d53be +K = 0fd26cdee7cb0b1639b6e0190a2054913fc703e9033adcf97964595cab737139 +P = 3119c79402a6a63a +C = c364208d848e1484ba3996d30e22dd79 COUNT = 88 -K = a28d229905738f61a7c4bda954729bfa4a987dc936fa480f717a495af1cfc668 -P = a3883dc79cb8faf0af -C = ce01c335eb3c75efa8155cb5fb5e8803305b0e0a266859b3 +K = 3f09b601367f4e7bf7ee4e378e1bf4b054d7694167aa764d12d44054dab98a72 +P = ff87b189a9ba2835 +C = 4b327271fbaea4afa8414b817cb6ba35 COUNT = 89 -K = ad1b456036381f87c291d06feca5043023dc0d43a9ccc70083e5ccebf3ee5d11 -P = 13bb1db70951d6c3c1 -C = 536a79e46b8a850bc5e022cf70bfc266a2e1f01b984e291e +K = fbdd1ad54951ca044692a483769cd08ce0ec01b1369078eec6af8cd47e91575b +P = 3a9fe51a53541bcd +C = b480d1c926d28c480a557e852b5aaccf COUNT = 90 -K = 9025cdbc77f37c64d350a66239e75e85b50e58dc57756f518a3712952cbc9733 -P = 38c640eef3eeeb6fea -C = 86d891978730070dea662b9cc35df610360e09cb989b4b3c +K = 0ddbf40ec156b8e08a1595e907e182d500393e96a3dcab7715b807c6aa1c5576 +P = c8bcc12b9acfe92a +C = d6a111051b63fd753df683486ee43c6e COUNT = 91 -K = 07b099424d83186c1e9323f43ff854f45c149438d131f3f66742c98576080758 -P = e97910ad65bcd197ac -C = 06fab44c40854be75c74556c3025b05e0720fee2f814f097 +K = 65503a75fd4a9363246ac9c2ef3a7112bbd3c65f5032202dc6df7bb31fa3fba6 +P = 89b224d619483a01 +C = 4bb2716c57dddfaed5758cce52ac014b COUNT = 92 -K = b2103c63ec4de4ff770a9598c507afdd56b2ecaa85e7fe287c0f6185ae3bb3ac -P = 16ea8bf024a454f9a6 -C = 6563543b3f42bcec4025e0073ec4a62a8b79653d11ad4c69 +K = cd6beb164021734b3071cf47285c6bdccde9cc14a125bb6101106afb6d91ba79 +P = a0a2feb02a913b64 +C = 77ca137a37611b9633a69fec83ec2f54 COUNT = 93 -K = af8d4a0722e9f775230cf8b5580fb6e04e330b36d303d0ca385505c57e861554 -P = 8b6edeeee0ceeca229 -C = dfdf4480a64bfd44b03d1580a4a4e21de659432a55ffdc0a +K = 5038e93f84fa74edbe0b87d7cfdc35b96b5b24c8e60004e13cd70d999f574fda +P = 31830996b94deef6 +C = 6c00c3f3232e1d89090f15ab3d46ca2b COUNT = 94 -K = 0a4d1cd04963bacc1f60a59bf240d42054efd615017a3ade5ecc261c83a92753 -P = c2585ef19ce782600b -C = 8f9558e056a8bff2573427e518f2105fc496773fa9465854 +K = b39ec1e4c82c08fc2d09f41acff0ed8007f30c9f8aa1682c51208bfdc0daeba7 +P = 6fcfe34dc81be869 +C = 3067e0d9432188c4e1492e5ff0518976 COUNT = 95 -K = 6ff2983d455a12d5ca00772e6abc2dc8700bf2bc7e43e765ccbff45111cf73a9 -P = 12b3c522b083fa053a -C = 26888469ef91391555e2527bfb44406b11aca143b2564f75 +K = 59e053360a2076a4538cfdc816cc46ee7e35b7beb2665b0f44afa65e15ca787a +P = c0c272a66ba5368a +C = 8fdece673d4024bd6ceee24e425405e7 COUNT = 96 -K = fb307bb83fe1dcfba7adca23927ac3b654c8049b1e5aef6306c4b93aacba195c -P = 4cfc8cf8a07fba7f2f -C = 39e7c0b17a2956d9160387a5a4e6b750f637e7ed1e1b83fe +K = 6dd569eb99a6d2da389a515d2a7e8e6498ca9ab2ad8df6e5e09b2c26a53f2837 +P = 5881515716cdd754 +C = e1acbbebca7b28aad95cddb48d0e3a24 COUNT = 97 -K = 88f057fbee4b83599d91f5003a83dd33351b4b22d5e6de23093ab5b8e2d08255 -P = 6f6e1ceb430295998f -C = e722f3e765a1eefc7698304e84f0e97a422cd67169d9d710 +K = 6cfd583e3bbd0cc1aeca62c9b3e11a6a6cb82a8c7b9cae197952b091b231a083 +P = 514028f606d736af +C = 6c1d0007453da63a296c0d8ff6eab6e2 COUNT = 98 -K = 86c148273e76224e931126494c2c8eb26f73e2f62fc22ad1a0c5f49ab3d6861d -P = 55402dd2486e26aa8a -C = c94a7abf4db5ef723fa400d7ef908a84f83b3c3551c2d59f +K = 38705025de4fc476b8116710defb4fe837fab11dc80ac4813b0821f565bce87c +P = f431defea040d1f5 +C = 829b4dfb7e945a37dd72abd3516e25e2 COUNT = 99 -K = 00bc513e9fe8874f77a93dde8decfd513f463291b041b07af0daafe6acfc974c -P = fd77b79a9158742ebc -C = 8cd67c29e9810a88c47b1895aabe34f1ecce35c15084a56e +K = 6bf815b219ae1937c93b2dae76b6ee55d03e0c30483035dc4aaebf17f4b1c975 +P = 0437b0150cc82ea6 +C = 66f4a5968207a9e10985f400110e2ff9 -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = 70c48d265210bdb233d89b0a0076e31403b0d95d28b53028d3e8002a34b7d267 -P = dcc0b67f -C = 160aa6669bf7e039431d6c2560b5592c +K = 70da43aac823c6dd37d1109f5b18feb4503c973288989745e2cc1cc21d9570c6 +P = edf17d966ed896aee3 +C = d67b5b2ad15c645450e23b5e7b6d682f8ae20e716d470db7 COUNT = 1 -K = ad45da4c92f8f6c43d2364be745d42a5d831adc5ae6bab96f3e0e62ff5591fed -P = 6e6d1b29 -C = f52d544704ebaf8d4283eb20d5166a9b +K = 8df1533f99be6fe60f951057fed1daccd14bd4e34118f24af677bbf46bf11fe7 +P = fb36b1f3907fb5edce +C = 6974d7bae0221b4ed91336c26af77e32761f6024d8bbf292 COUNT = 2 -K = 2b55ad2316931dee2af30cd26025251a0a77602d022c0f2e426e5abe351841a6 -P = 807a68f2 -C = dc4be22609fc5abca7b1266ede7c42e8 +K = 825989581a14c7ec17ed89e83c11a3a4311db2e0b67019532ec3bce085f14c49 +P = c27088d764833150e0 +C = e09b249c163a0cba1a23aae2d30c82e23279345de0a97109 COUNT = 3 -K = f5c7c3600f6c5d3a8632af357b6134231cce8ce1424abe246f26f80a6b7ec512 -P = 417188c1 -C = 77232964adb91fa1d185942de4feb9b5 +K = 19a7f05593850568a28b1c144facebbacdd345b273833784ff5fe6fd77e8ddc1 +P = f0b7f91ff013a3fe38 +C = c59ff36628d5b0e9f188ebd5fbd767d38d12090ff2774c79 COUNT = 4 -K = d0aca65b6616352a16897c5a5966060a2825294a150bfdd327255808117e85aa -P = 9f135bd5 -C = 63e02bc4a9bd2d3810f6ab240d1290e4 +K = 5d0f01851e04275ec8c2a31d8160b80f1870ea38c8c577ff8d9679cf4fbc23b3 +P = 03b970ba80b8a79cdc +C = 945dc5f04688409618f8404bf67882d823409ce4aef3ab0c COUNT = 5 -K = 2cd70f6f79733004f618a62e1f2e563ecdd7264e14ac9451e212badef6177a75 -P = 3596c76a -C = 3dba22c34ba6a21c03b67ebe7870686d +K = 129ac6bc34175530c88a84dd7db78358a1690c22547addd4253d14362c43bb1f +P = 121467b2487207e5e2 +C = 63f1cc65ebe7db048a12d0edc9f2103f74132929a36a2d33 COUNT = 6 -K = d8b6822a48db95899305a58a928b0831adbafce694c06b0f881e807d997c728a -P = cea23598 -C = f8aabe9e73a0eadc40c73de1b0ca229c +K = 66d1424b687a64fc4e6bc25bf492aedabac95ab542a65d7460a5b122cc867da5 +P = 8b691d4fb7731dd0d6 +C = 356416bc316d006fab79eef02d8e4d17afb3349262acaff6 COUNT = 7 -K = 36886ca1b6ce457c87369908a89a5af492cc04c82ac3a25b2bb357cad1499a5f -P = ab375188 -C = cc7eae9665aaf90ca42dfdb333152bfa +K = 841e1e489b8306af417b4a1aec9ca853e1035f06784a56854bd9a9ddd5e20d3f +P = 7909770fdc0589fd91 +C = 2a8e6ddb411a111f62765a65c155502ac1104dad7908c58b COUNT = 8 -K = 54e57f82565c1f6a1c8c67ea6a1f63ae1c3969c13aa6d84d4ccb1a13309aa4d6 -P = 3a2c577c -C = 4e32aa5d36addebdb9ac42a9fa6aa5a4 +K = 91bfd1fa7207405f275c36615855ab01d98a396b24f4c0d7b2e0c6d9d283098c +P = 5308507b50441187aa +C = 2a7ecfd295564e578dfe2e8dcface31264bd0d91227895ce COUNT = 9 -K = ce54667ae09ceed0b81951cf2a14f4e28d9e827191acbb4c0225ebdc333abc91 -P = edc43d96 -C = 3d759e43d79d79251baf009b9bdb25fa +K = 5515e0466ccbbde0c2cbdeaaebf05835853a1c8b6bc20cc69a7689b88181ab64 +P = 36988d19c4b2566562 +C = 6b1353ece178448798865e23d01fa23d7c18f4072cd28c5f COUNT = 10 -K = c1e8568c45dd76b65bbff205f1a8426907e688f0f31ce84be51d4b1ae77ca3f7 -P = 362ac8a5 -C = 7f6d0896bc941ffa95173170fdc77562 +K = 91bda6ff92cf420af3afcb6216ecb5a5f5ae27ef557f7ef1bebc3ecf1f30861c +P = b2084ab8d6f85ff9d9 +C = 0b3135fdd3169e670278a65b663508b0ebdde46d1ef58769 COUNT = 11 -K = bc7aedb0ecb5c9465ca8b4a3b1f5b749f9922f539c1aa8c8e30f7bfc45d5972a -P = 157def2e -C = cebf31c540906deb90719a1255e7f59e +K = dd322d4fa1a956bcb887a4464b87902377930d76eea1b7256e8afb405360b62f +P = e829c27beac8be6b73 +C = d98cc4f8ec73e6974e04aa790029a0d7ef6f00964abb76e7 COUNT = 12 -K = 8348f075bbb1f6e223af307cabb4a4c6111450bc63e2107899854b245ae43b13 -P = b2ccc94f -C = a430c448559b8404441ab401fef01222 +K = 89577b3dfad5714e20ca23cf60bfd8675a96fdcd0e0b09a53c82188f3d32a8b4 +P = 5e4a7b7e481289660a +C = e263c938ef8740e0eccb0010fe220ea10010c3c42cc44cb6 COUNT = 13 -K = 8490ec997e40a6eb236598cd1ec31733994261c1df313214dd1f826ff4ab953f -P = 93002288 -C = 9e1226fea2dc03bd28b8da80c2322e20 +K = 6fec23acf28c90b7fbdfdeaaeb4cd62c8d6a2da8eba1f0bb4970f9e91b165789 +P = ce9db26aa58aa142a4 +C = cbb200faedc367152c40bbe3c7c0ec6fe0a4aa39867a8e7a COUNT = 14 -K = 94e5b1a5f57ad30b0dd821fbacb65430aacb21b3d5556f951d462fe160d76327 -P = da84b7e6 -C = 8d4ac6e87291d51b97aa5dd2813c9cd8 +K = 1ef1fbaf090260b6d9dbd3550900e238e4bf153c717b41d58375132d177dbd34 +P = 4a7828a42554cb2c2b +C = b804fa02be3f4e717918c2b5ba5e8de01c0cfed036ba452f COUNT = 15 -K = 423509e875bd0fc3269be46b2bc707ad6afb4cb8ec5f865cfcab1436fbba3788 -P = c16bc94a -C = a262550cf73521e86b340f651d95166b +K = d8603f75c088495b1506c555303deebe8e7bcb757d7a522c768a921bf2a402fd +P = 370ad58e187b1dc297 +C = 92f1427b2925b741f679c254099db33702c0d65a5c92012c COUNT = 16 -K = 2405b4501164b1a5c1b5422a0ac8f70c3b49d72ab58da860d8da2357366904b8 -P = 4fdb8ad5 -C = fd54fb00172c07b702ffac767483e03d +K = 00f5e84e6744791cae27c8fffef62676513434cfd8e2af2c6c8149d783801a72 +P = 8ecc9e77d23df767ed +C = 65956d69a3f29289ac1d615c1d657fe00f950e1fb85ab508 COUNT = 17 -K = c6c718a1e1e10db3ff827eeed408fec80e0cb2ae18c3b535a9c4373ad18c5892 -P = e0951696 -C = 55c6c477aaf59d32a521db564447cbe2 +K = cb48f1321ac1594f139279ae5e911bfc031eb6d04b5b6ce33bf13b93f4c58241 +P = 11b5e0abf01fe43af0 +C = b1b65857776f992f422762262c9b79734a1b9116e9e27c0c COUNT = 18 -K = a543d3aa7161ae031a3584287c536c7292fc2d2fa985c4f2c56a402b1f3756b0 -P = a042f950 -C = b3fba62fe053e054ae940f2f9f1df3c6 +K = 653f2076dc2001e6d282b7d5bca8534b2808ffc6863b672f6dfb16511ff63806 +P = 0333c9a3083c7f14d2 +C = 5f40144074d3dd6691d217ecf1c854a0609a336c2cf1a793 COUNT = 19 -K = 79b5464fed8af115b4107b7203ca036ed0d645d06d967d22fa91f0920a08c35f -P = fb558740 -C = 2f03f5e79f29919c52580426d6c702d1 +K = cf605dbb5f6d6bb65e288aa45388f3a688119da52c7c2067d96dbece1f39f281 +P = 9a7f7c36b9320e3cb6 +C = f94e6a35da1de77cc5c302b4789e9f0a14bd80bdf6f166d7 COUNT = 20 -K = fe1708842460abfbcdb978e236a2ab32a986269eec2971f5931f650a3388e9db -P = 0a43286e -C = 2b791cd828e2d430327fafa761ef2641 +K = b4e26b368c73cb165b9fc567e7b67e7cecf56dc8954269ae2d5523ebe1dd54b9 +P = fcd4a827802be6e275 +C = 667b0e7723314fef19d341a8b33dabced631d58effaa42ef COUNT = 21 -K = 0386632eca9fcc42e96cc9c81c79fdda76b276430e381ede7976209113341c4b -P = 7e0e60d3 -C = 2793b9bb92fff51b1a85b6126efe2b19 +K = 8fa96a2de97222e0e4736ecee6f20fbb350f5f4b5d55d8b3d7935c8d9a941033 +P = 3a6414e0683ca5c477 +C = dccb35ed5283a9a063acc64cf6e3bba60d7f4fe57eb01b62 COUNT = 22 -K = d31d7cf7d802a71147328cbf1cb705aeb432f35ce8b025436aab10a0ef647b70 -P = 91123d04 -C = 1fc15d2c2c52f00c0780f7f874755440 +K = 635b7027fe68fcc53110e893288cdfe7033ad153286b3e57fcf9279ed90dcb12 +P = b67e7cf7c2fb4f0a29 +C = 97ff32d36927910efab592cf19f95bb45106790b66f67ec9 COUNT = 23 -K = bf1b177a343fc68dd08e8a3a7d2e0cdd8c590497935f22b5333b6520ceccb540 -P = 270a5841 -C = feddc685dea9e5d92a2fff6d680b256b +K = c4f325e32c991eb2183416b6b34bd5bf192aeecf1e1b71c0b45b21252ee417b5 +P = 28b26801ff4d43959d +C = ae8ba029c65fbcedc3cd715b8e2793a68e244d520f6227ec COUNT = 24 -K = 6d41d73f056c4eb003e956cda40c8d504fc2d772cfafd0ebcde16ac961b100ce -P = 8f940dab -C = 5e6a40c5dce6b61fdd7dcf102382eefe +K = 6743317fbc2bdfc18ab54b02b6e02f7593009e735150030ab1912dd852fed604 +P = 47cf8b12a27c447c5c +C = d4f94476a9a94ec6eb78ab268146d53c4378e571187f4582 COUNT = 25 -K = f718d47b4f8f9cda24a6fd633de7ab777b57feeaacc992cf2697ce0c4bd7dc83 -P = 2b87ab9d -C = a58eddf39da3cda5584d9cac2299860a +K = 07b997e329f6e6e108ab75a11e8c29f7cbe07bbae3c66c1f3f12a76680feb71e +P = 42a984d90ce4b22363 +C = 5f3460fb62988cc995965e2aef2e42defc0774e375cfe2f6 COUNT = 26 -K = 9c1274d3045e85fd606b63562cf1bc31814739ed42fbb773bf4cf152e9f5ba49 -P = f7be7dbe -C = 5bb5290eb96942b90ffea5b8b9339de5 +K = 0627d29f6fb3f8ffadb7e2923dc5dad0bcff3bde74a39102e721995d5596feb6 +P = a71199a407008dd4e9 +C = 1a09e1c083fb2c8962be0eb04435e4fb68e2dbed89d99d64 COUNT = 27 -K = 3539667eb3a72441f2ea2aad15740a87d5f1828eb1c524b0f2d455cc1233f70f -P = 00203caa -C = 77d0f4068dff4e776dbb2f5bee0102ce +K = 9f94535076b5b16b8f38c4c9646e44aaf74e7bb42530eef34208d5a823ff999f +P = d38ae5f411d54a1c17 +C = 0c36a69adbda9b280219a95b2ac16a9474ac60e1e8bf97c1 COUNT = 28 -K = 99ffeb35cb9bd0106042f3dfbc145a1a94df495bd9fe1633eeb716c2a9866cc8 -P = 1ac17669 -C = db8afa5df3b62bda544fe797ef0661e8 +K = 48fea85b45f8bbc0a046c83cf8a9fe17834ef1d9219b1d642df5f70dd188b00c +P = 0dfba4c83cbb10020a +C = 93317a43e97e107b0c9f9276929b24aa95d246bf6e0c4f18 COUNT = 29 -K = 87f47050c352c7852191fb3b24b72b80c2788604abd3826d688c83070d685a5b -P = 9b4ab913 -C = 03bcd344729d508f9abb4e327cf9bdb7 +K = ba16d84c8f8cb672509c02cbf5c49ada6120dd185ca35de3164e49223436776e +P = 8941184a955325040d +C = deecfec8788a5dc5c550234efa7bdf6a50ddce0d05d784d6 COUNT = 30 -K = ca5578f3d0eb0315391c7965de96d72b9706e610170822df40beca7506aa7593 -P = db9d4cbd -C = d69b3f7e8c86736d620cb5a1304b6a54 +K = 8155561e7c2bde1f5c000a52d9c58dfb8bbde9f43826a93fdfcfb8685faa2228 +P = 803c9895eb526c0a07 +C = 1bd4208f14a382f8f714ab6b277c086ca841ca167f35d206 COUNT = 31 -K = f3285654f6be82840e78651cc2ec9ad39667ffc2bfd98312e7bf2aaff9deaf76 -P = 5e308149 -C = 67b67ab4fdc05e3177e5e562b0999721 +K = 820e369c5cee6c2150e66a9e9c59407a2e0beb79d7f87e3bb68223421e9c65b3 +P = 2b83ce047468b510f6 +C = 0b5b27b1a2340852e41ac26f84e0b9b3e2f37821a3d265eb COUNT = 32 -K = ce983f6a9b0b98a0f325839f374c5727ed51ccc66c4ad401aff0944d4eaccd5b -P = edda4638 -C = 585afcb977f0a211eb6b37f95732625a +K = 2798e9b0d5f289cc5c3b349f2b0eceea718a92f2f7e9515daa2ef1b70709bd72 +P = 91091695087d8b594d +C = 5567f3ee58f3356c2774746e1ca29e8be1afb25c77dd00b5 COUNT = 33 -K = 08bd9a90d69e0b091d2d38b5fee7823a8b3c3e7902c4bcae947ef847257754c6 -P = 2cd70dd9 -C = 2193fa5d5903c253e43492ccb4e7b722 +K = 0a5ddc64c89bbcf6bcf1cb569a5975ec6a175dd22c3143521f728aba93a9f085 +P = f0a5d2de748b263526 +C = d00bab6f10f0f14ad22b99369d690a3e4e986e5710569799 COUNT = 34 -K = 1ba4dc63062276b0bd9680832012dc904ebbe48077221a5c26b1da5a0d93f420 -P = 86734144 -C = 0d63063a6ef1f4d884cdc0bd13977b7e +K = bce3dc647b30eec6533824b811384b7c5e55fa63c19fb7b24b9d788d605c4fcc +P = 3a1c4dd9fd9bfae58e +C = 94ab374d9cd93500234e1e1706aeb792f4164dc2c7850140 COUNT = 35 -K = f46653810e08fe079469b1d29e2c99636a6ce789396682cd35eb5e75daa8fcd7 -P = 530681d5 -C = 67d4c97c5fe50c644f91c1b9ad221cb0 +K = 388e61a43b303e7df7693afa4af2fc0a7922c59385fd58a335013db0e5d85c0c +P = 38073eb12aff3b7a36 +C = 15ef698eb69c79c54f7a8b35765cecd2a071849ddc11ff05 COUNT = 36 -K = ab20fdf933fd8bab0ba9ba96ea21d6674939a1db137895e12fedd30e3d6ffaa3 -P = 6b888554 -C = ee08e134a25703e0e452006a60724d74 +K = 9ce98e97118412b7883b70ca95f33309fb30a6e02390ff298d13f3256bc623d9 +P = ae33aba6c9d68b12b0 +C = 6024372f2a371d3033c847b4ae7e18eb5c4007ac0f5d33c6 COUNT = 37 -K = 4306f093df7422b940f4ef89bed21cfd39444dec7cde6737700b7bf5f13e7739 -P = a78c010a -C = 6c275b5eef47b87b00be8bf09b62f233 +K = 4755f70579e3d2617479385600b7e07ba1ec9ba8299764b4d7456757333f9d53 +P = 027c74f10e159f01b1 +C = 45c088bf21df9d1525b45a798b8e73a603c0bd28987e20c1 COUNT = 38 -K = 96074106adc22e4f16f14c328fe49e5e84c4e51d1e357f8508f471c2ed9bb59f -P = 63930da1 -C = 3e750bd0ff675e38a4e93129363aa316 +K = 09fe792e52c628ac898620216876419911bfca7ae1c66ccb28b27292b37a5aa6 +P = a0619945c695dbd8f8 +C = b22a1194afb7c4e90e1da0940fc62dd8ef35ea1e16580d08 COUNT = 39 -K = b5facc975a8ecc2edb02f50f127253b63f5a20d816e2a2e3d74ed6ba92177a29 -P = 7c4ad188 -C = 1c4bb8a674c8a999b436be77c4f88564 +K = 492bd9e6819fbd9b38056389f0847484c6bdae44edf644416a1dd663fdcde6a4 +P = 0c0515069f44e692a1 +C = 436ae823f4096f1be9ecd3afd69d100129f839ab76d9ee9f COUNT = 40 -K = 8bc05ae839b923348e793be1939e94aad37dc39832f7fb8c1c2d6b0c05ea233e -P = 1b25b7ec -C = 855fa60d4516c16e714977e5fef43b10 +K = a2d71195f4ee3590290f70af882ab889c73c3825132d9d86fd122252b19b6cd8 +P = 8f64e09751c6de33c0 +C = 31015904b8300499d14bde7b0e30b87b445aa5c9d1ccbfa5 COUNT = 41 -K = 221d4c735ac633ac25dcbbcf3574baf69073509d0069ce4fd78b1994ab84001f -P = 05562562 -C = cebff0d5d99fc1328ea6feb13695f897 +K = 76cc4c3e0b4de2be3777a83e1333976fd7e62cdbfc1795779a232a66ce4a645c +P = 204876a45cdb3d7d22 +C = d809a7b918a33b624012ceea36b97cbceaa066daa63b8667 COUNT = 42 -K = f5f817484f64db16bbab52182f4cf90cdcfa86545a9df21e88554c5a66942ba5 -P = a966d495 -C = 67bd7499992c471dafe2b1d0632ff1a9 +K = 24bbc949f482178e98529678d7a7b25a47a30ce3f8dec20c2eb698c1c8507b2d +P = 7b6b790f2c2f728044 +C = 8a620519e1004714845991f7a9a8012fd5e9578ace6c0a9b COUNT = 43 -K = f2289ff9446668b7aab5a6160542d9134fc3ded28dcb7273c6db453e66806818 -P = b6a499fa -C = da72daa47d81b40305024bc3346f4ecf +K = 2658244cd7cff06b62cc6ba4d557ab205330cc255fde60997c872748b6de99e1 +P = 2ecb123ec7aceaa193 +C = c26812c338486d003454a8a4ee2e457662fa231837443ac2 COUNT = 44 -K = 197d04066c49c374c21c42a11b137ded287ba4a118a1e3f8825006646f22588d -P = cf131b13 -C = bf90f52b017f59260fd281d3aeeddccf +K = 0df27fc28f130d605a57a376807d1f7714c3e838623cc4c4cf33d25dfdd54387 +P = 18f98065e6bf1b014f +C = 2ced5217776b81bff41b37e547698badfbb25d88cd58091c COUNT = 45 -K = b58b289fdead1f593673310d69022f0906cb56e47c49871c7a4ed32bb3ab810c -P = ffb87ed4 -C = 9b1194b01f602bfb1680dbb8c2bfb7a3 +K = 1d2cb20ee72eec64817fcf087c25874cfb9d775af814b95251d0b7d7ec8a984d +P = 39f019f97463e40bde +C = f242fac21e294f6437a83bb87f0b000a3343cae5ab04a4e0 COUNT = 46 -K = 8e57f95cc1944ecba7d8f822cca720852158077d35f5c58d0e57f8a04d6dfe87 -P = 661397af -C = afb2cbad66d93ef73912d29de1517c45 +K = 49246e82cd3c0a4b586652ea93bb630bc8a115daaa33364fa4c82071875388b0 +P = 4a2d9d95a508136bba +C = b5cfae83a670629d135f2af29aad8b61e5cd7d3f901fcdda COUNT = 47 -K = 8cd4c1d3b2da03e96593173ccfbbe8ab1c3209cad73b2dc9acc4ce8ce6e29037 -P = 5e95aea8 -C = 8c06c3a05e598f0543dc8cab989021fb +K = aad85455d482ae6a0b506aec100a63450fdba29f82cffc46fc293ebbd1918a82 +P = b0c5d4868229da87bb +C = 0372361d1ca2dab77da098b3316e2b70eaf624ee95a72401 COUNT = 48 -K = 723a6c70b5899f5cdf806b1afee677e8dc31d6130e48f6516828a75e34cf8f6a -P = ecbfe701 -C = 117e2d7237f1fcca1c944896f77aaa63 +K = 8bf810ce7f81caf7c8f8b5d65628f07a02003d1931762efd2992060964b61818 +P = 9473726c095631274e +C = 537e0e13614537549bdd8b6effd9c54eb727a097e9f0f03e COUNT = 49 -K = 9e866fccaa970797a392ea9db621fa63cf12235f8b1912e549e89ab28f834d95 -P = 52f6c4a0 -C = e6f644da5b93e55242bd05a27e057704 +K = 99ed33c3a04bcda2698bcd2abb264b34fb51a9a877a885b0e886745abbfc73cc +P = 20c9035202051ce408 +C = 115b9a9e8f5d0b3c7f6b45c2bf543f4e0c435113a7c66329 COUNT = 50 -K = 6ab86744c7ef694395d20f5d8ac48f9863c092fd0e7c5a252cf4e56257f614d0 -P = fb57b022 -C = 7551d84b45db2fdd959f71e3cd1f068a +K = 83f47226970ac25b9b20ac135129a63e30ab7950a15e884833421c5af39778c3 +P = f756640a6fb015e462 +C = 8cf90eccf0513dbcd43beffa186a5d781ee73afc31ebfe99 COUNT = 51 -K = 45340177e83eb729781d0275f44fa6339f90a49378a7639c9f1c2a726add6444 -P = fbbae2ae -C = 7329d27698b946c1cd89294cf0bb4427 +K = 6ca2d45b32d7f54adb726a6d44a3fec799836c870664edf86b54b83b1e6d406c +P = ee4cc09d08bdfce4b2 +C = 817b47c7c9744c346f94bd4ec98812bf4ffa2324873c33ff COUNT = 52 -K = d7b0405fa8ec684e82379b22f68c57b22116ed793a2ac75c10c4498f9803fe60 -P = f400b712 -C = bb58ab137912ece5dfd08a03941b0894 +K = 82f960f50757b36faeb8cda3287154f4def59e23416f05a5a325b6f7ca0bef6a +P = 7163f8295ca17f398a +C = f49d989e417bf32e17c36fd453ea71698b6dbecc43a3c592 COUNT = 53 -K = 507c6f59c7f248f002870ba022c84e66544b006dde67f044624732270b6c7560 -P = e3eb8508 -C = ea1fc75535c0e4cb50ebe2f31d8670e3 +K = 3e435f1150353868bfc1d306e91bd6a1adba1c8a78c7985878b5b7f123d33910 +P = 24a6ed0cbf499028f8 +C = ca66bec22a1f9c88d5d86ab4029dec669fa844d69da8f2d1 COUNT = 54 -K = 1afb7fc418d65e66929514652067532dcd875a2da62d1a832b0e8febb915fd19 -P = d824d2d0 -C = 466f7f75146bd1558900471d953bc342 +K = f29d3680773b0bc1c8343465ce433a0b9dbc58d4fea9909484c870b2a6e045dc +P = 8be6b60f96fbc41e08 +C = af74e9bc219b1539bb9aab596465ec3753dc8066f46374de COUNT = 55 -K = de23db0ca31ee29e30a45ff1b927b778971a2dadc0721eeca7e528bb5b4f88f5 -P = 94e96dff -C = 4838e3c0304c8bdeeac6a961f57f8e28 +K = 84eb69de272321a08119ea4457b043280649a2c922157dde3910fb5974be242f +P = 8f80be228c7237da27 +C = a4da9475df29371cfdf3959ddbf68bd70f2f7a3ed3933502 COUNT = 56 -K = d68f672bf306947c3833d62932e9101b59bdeb122ba55a537d27a9534ffb0715 -P = 16fe279c -C = 4378df40c0aed27ff1054144ca271ea3 +K = 5260c2719a2f779d82759217202a295e1c66640e132c09d57db7c89c010c7b77 +P = 2d898fb092c3eefaf7 +C = 014dbaf650eefe78396f25b48e2a70653f4f7beb5d9e1084 COUNT = 57 -K = b97b7e9038498e07c86b5ebae1aa4cf9e3ba6f75b923f7109441dd85fd82b55c -P = e53bcf53 -C = 220441e52a4d89195589b321840849fa +K = cb036d6310a224e16c84906e97b90fe0478cfec0241fda158dd3b4641baf00a0 +P = 14e45ca205b48a5213 +C = 3645e937610df8a6308dbc831d751c68e23bc13a853b32b0 COUNT = 58 -K = fd1671eb13635ec957eacf677990e74873ac811c0b06320230b675e4da2ee58c -P = 310232c8 -C = df8f4192cffdffe2e15a204e24b911f0 +K = 9a8ef6a7916aa8dcd09f4b5a10e4bb7c7060a6d114631199e3f7bfb9785b1da3 +P = 20f75f591f4149b41b +C = c0b3546650d578e2794ff8b1b74f3dfc0fbc01eda77fcdfe COUNT = 59 -K = 58dc17b12c5ca637346a3262d8242653f6c19adec4b64ebe5bd4e0061475673c -P = 6608c374 -C = 72ba3b99c49b8ba9d588056656deea3b +K = af2a39f8b183480dfd81bcd8c2c72978f39fbb2d5b321911caf7bd065884b934 +P = 8057f03329dbc7e4a4 +C = 1c34d3e2017839d943a486a026806c0cf204d7cb1a706600 COUNT = 60 -K = 2074aa58b4154ac628f48951d64c41f3fe197c4b8f3d8b5ce5df551d22d59cea -P = 0b4433b8 -C = 43a1db08ab352b5e6c9e20a8f0571af3 +K = 023afca456fbb840501ee09073937eeff098172da8e1f3115d2902c896a281c8 +P = b219461fe92fe81ba7 +C = 2347a485c7bc8e734121a8e4eb59f3e7d383d56b30ec8fb3 COUNT = 61 -K = 3102eadb9e7e77e7767dfe3fa8f7621ac8b331d2d6ca846880fc6c82c1ad083d -P = 8d38dd14 -C = 73897c4d61438ba56c50d4d6d0d19159 +K = f711be915b6cf69ded4f93b407b14ecb4515a94cc31b21fb33c788d6c277ecb5 +P = 535c6ea1deda1985ce +C = 35ab622e779c18d1b3e44c2b2b36e96a600f70bb4ce91030 COUNT = 62 -K = f53375cea65e31889c80c0bf2316c91a444373094b9dc0fed2e23e6893ef498d -P = d09ce78e -C = c717b936aee845b15f6bbb779aa4358c +K = bff78d88663ba0740021ecc8bfad851a4ce775d7fb2142674086a24950e1cd7d +P = 2d2c000613aa2be930 +C = 577c174b14aac664515eeaed496a8bea7c50606bbfcf0fcd COUNT = 63 -K = e4ddf597bfd80884d208846f77d7e6f41e4d27c65b5fb0892736a7e047e1c592 -P = cd3b2846 -C = 2c9d9d7a787e3e08d65e2547bb8be5b2 +K = aaf0c49d3172e56f3f491ebc765dd73d178c4f73f5b88cd5a6e979d1b6a8c0c2 +P = 28d0c2a80529585538 +C = 7a195fd02f4cca2bf4a1e1bc57c3a8e1086fa78a3dcdd498 COUNT = 64 -K = 2bb6a5637bbc0eabdcd0dfc8a2d7c6d2e3958fb6cb3d9586b374f766668091b3 -P = e0bb158b -C = b46fcc6365d31c8de432e3b6a35440e7 +K = 46281ea8b7508cdc285919d457dfcea14c7ea4b2286b368e2e90c24c396011b5 +P = f9b26c080a46129f65 +C = a782c82b45315c17f2aa64924fdb0d14ff4d9fdb3b7c8843 COUNT = 65 -K = 55d84f8acca5084ee40c38fffa331f8394bdf659cfa4135dfbee829b5b008a3e -P = 0b545da3 -C = 0cb5ff7c723e9f8cd82831055e16b696 +K = d046eb0e9566003b8060722c9d8e72c72ba347be2c73b3c8313a47050cc8feec +P = aa7405c63086bf8995 +C = 52199a8a07fb555365da35dec143ffe0acfc29ea62f48624 COUNT = 66 -K = 2eb99f213a90f21636da3b555d8b66331230dd8ad79ab1cafb473b97164cef26 -P = 4a2bbb1d -C = c39387d0cb49a397f1a2073d6c6a3431 +K = ffc2769f823033715ccaed6048373932e359fbc776cef67181fd8900c3a4eb76 +P = e5c5f6fb7935d33b5e +C = c9c64bdbc156cbf20dcb0f8efeee3665c28970aa33fdddde COUNT = 67 -K = ac5d00e99b2931bfe12ecb6b671f03e2945ce5513dd95e71dfb8aca274ba6450 -P = 68eba34d -C = 401d53a2ffe9b47ea4c18d3f7c85eece +K = 28dc00d44de6966ad8d24bacbb48c0b0ed9b456178fc8154aebb13892976b8a7 +P = f829a94c1a75e13db7 +C = b07b5e59a66b9a078af615587cbe3bb15ff6d2ce5ad20bfb COUNT = 68 -K = 4704ca0a54bf85f6f37ed1a2bc300af6151a2ea47b258190dde7e62a4d4c3a77 -P = 39ccc57f -C = d97c0f72f23cc83a34fb89d07d6f43ad +K = 8e3839eed208dc88ba001c0c33bfa7da59760797adf214631bc2b57940f7e45a +P = 9cf3344dbf81c4e3db +C = 26be881b563be6caf7e848e4c81bae989e2b702fd51bbf66 COUNT = 69 -K = 43c8fad35b1c622aa6f1cc65b527c0688d844cc005f568cbb08abc44fe13c969 -P = 8636cb2d -C = 54bcfffd45548061f360fddb931cd5a2 +K = f8bd4b776a576b6b557ca3de1bb07e1271a76b67c9b0119571fb4f026c426de8 +P = d17b730c9f0eb52fc7 +C = 63ff4f265684f2eb7889348084cec7c2e33c7b0a0e7f394a COUNT = 70 -K = 54c230c64a09ea57005c92c9457eaf74bafd746d5676227d7ce07bad7b30d1ff -P = 7c1e8d1c -C = 27afd39cc1be0a007ea81470d050fa94 +K = d38834561f6f9fefb52f662a4a8eaee0be0a93b5228cf0c87feebe6df8ba67a1 +P = 744091342a538a5e93 +C = 4e904c4305e05e35cf4e54715e47550e46d26868d27302d6 COUNT = 71 -K = 3b8c6d19112984da344724de9474a7d9b650185b9b74b4b1ef6b3561ed6e7e77 -P = d1da0b04 -C = b142852714d45245b41601b6ac5bb477 +K = aeaba87b9c5a491813cf3c9fa9c08116f153490ee850d4ed4d0c36b4ecccb5a2 +P = b3a5a18024a1bf6d3f +C = 5bc902d73642e5b4d9caaad10eaf654aa3d2576a1eff88a6 COUNT = 72 -K = bd3aefd85c91c91f1d6d4cf8afa6c3fb239ca3ffb40c5e17d5aa7e66607ad326 -P = e7bbcc8a -C = 20ab5091d60773cfda772b0ec97887ca +K = 2414e32567fdb6161fb07eb86b374d1515c2132b7cb8ef011f060531eaa35a1f +P = 623b5250be31966dd5 +C = 6ceae905be5919b7b4d9fdd8c811224098bd12f3ce9a751c COUNT = 73 -K = 4f7cbabef4afe540e22f4a6dcf93a527e4371f837ed9e04345426264dab28c4e -P = e7baa936 -C = c6593455f6884db47be406901663d473 +K = 32b783072901a9619c27b99a06be6d0c56a68c32a4f5a301ab529b0a0c96ad6f +P = 63e06fe6c372c85529 +C = a376e1508e7600bd1a28890404b2be817f89d52f7d9ed0e5 COUNT = 74 -K = a8bf193c6cc530c9d90dea9d27e1a51fa1185a51dc70b6f43e2c9b68d0cf71f3 -P = 91547dc5 -C = d5c3e5feb4667db7f3f8890e5d18f3a8 +K = 22f335cbc9e894c9cdbb05662ac50bca3435d24b39524f19402d1eeb3a99a102 +P = 0681fba35cd4f963ff +C = b8fd8ae189cdd40329e5073be17a4f3c65b91768c5b12b60 COUNT = 75 -K = cfe0d7879acf909aab3547ed98c3882e8676ab0e39e635dc579ae758d18a80fe -P = 0da551f8 -C = f8775f9d058d3c9e3e5debc2c9df1108 +K = 0e99af01d3e67b33f7d8d2f2e0da83640a68114ddd981ae34c82744be49aa89b +P = edb26816944ad1fb12 +C = d15362077cb57b17a5311489237798066d3044d4a90cbdaa COUNT = 76 -K = 9fb8a1224cd7465135b5f6f6948ee18641f8732441b8b9778124400b8da2be51 -P = 18cca5af -C = 56a85bda66c52a0fb8e75cd6fc31e471 +K = 5e5c98b5561982624eda6c25d5bab1c9f5e69633126115d05e144f49874ddaa8 +P = ace2f2e30a0564de3e +C = dc64eb72aa4aff0371f6f8d67d912219e868a017096ce6c5 COUNT = 77 -K = 724c55af267276edcb9747f9f6f92bb406fdd9d6a0971c879a7a0a099ac8a945 -P = 0cf9a2a6 -C = a153d9d1d3bea33bc33b0a1da88236d7 +K = 54b8a5fff990fd28c874640592d8b06b2503ef1cfa0f074c94bfdd06c05b59af +P = ff93bb939649dab90f +C = 1b0d92dae611c2ac338e2f0da4a57f811e280a416d091dc5 COUNT = 78 -K = d2611e9ec749247088d3ebfc98531a7a9e084ad60d7d05b45a60dbc55c1a6eae -P = b3e5496c -C = 6428bf9ecb8795c2104d044a76175a15 +K = 9905b1ad63451506ff2689c756f5681d81db2e02ecc282e0d12ce91feb657a67 +P = 78ddbc3a491ec30019 +C = 7a99fde44f81c1808a6ca6ad2d0655f84ffad8cfd3787ba7 COUNT = 79 -K = d5be257cd9ddfcc7fd0edba4011e0f1c6c7f468711baf74598ddaff98f9fdbf5 -P = 2a7b82c6 -C = 8bbd7420653d9a7fad9a47086334bba8 +K = d2e1682ef995de9cab32dc0c9aa0ed97682d60da5301169aa9b217cda0c586b0 +P = 5e3a512533ccbc93a6 +C = 419dcfff37173d028623cf9357239aff59b943312f235e88 COUNT = 80 -K = bb3ca58eeac3caea7e2138fd25c6255db197b0de544df0aa0c7a625d9f744249 -P = 5c1769c3 -C = 167fae9edd0cb7372d6e261582d3abda +K = 55dbecc18efd928443292721f6c6e238cca8a9427874c700326c1e3662f7e75b +P = 241a8595a78bda3f24 +C = 308a909dbb4a913af188cd1702c1a3ddba6996d677b11760 COUNT = 81 -K = c9d6f5c29982f1bfe5ddca60437c0ecc66cc7193a8290db24d7acf41c906a8a4 -P = fab18be1 -C = be2af451921b7fd6ab650bef061fa557 +K = de4e9590ca9e4105d4759e917449d94978bec5a63cd0de51469bd22420d792ad +P = a56afe0872a5875947 +C = 0373203987ad0d69659f3df1cfc2d561c0a38ac320a5af2c COUNT = 82 -K = 9840c34fc3ad70e80d7f8c4841998edf9bd5a142ddbe4426e189f77a441e35ff -P = 0f05da4c -C = 546332fce493f35dfdbca3b1666ac01f +K = 95ef0bea663e4ee19dbe713c9d768e96f5975e8bb0d42c8304b94d28a747e5c4 +P = 2d3ff93c836ddc9ca3 +C = 09657d4ca3ddb32ef6bbb9c79576cbe67f106195acf8dc8e COUNT = 83 -K = 38e3283abb6485fd18a8077ffb7c605934b912d7cc6a45616119115f9d0b5533 -P = 8ae16db2 -C = 44180330d0d0f8b792e83708aafe0510 +K = a08d5d120ff67a22fa2702dfc7766b06d9833b5b338caed3e0e2fb3138e43439 +P = 9b4bc808c34afe74a2 +C = 985bb0cc60044414a25dcc1bf58789af5154ee9a5dd4a940 COUNT = 84 -K = 2504f66b841ab181d4f9ac86ad85622a4cf5eb654c2b47db81d5f1a09e8cb4c2 -P = b2459614 -C = 31a62b722ddff0e910c2b95dd30f265f +K = 62e842abb80d6d15202eed641cba0c489d2800e54bb9fe0d24bfadef5ec90df4 +P = cd84afb7bf750d2436 +C = b8911f3b420fd30b577ef2e72bcf40d06f759686cc693ee4 COUNT = 85 -K = a130b6d17f03b4f8ae37e6b02fd01c72bc840205b5bd505721759aac8e6f7611 -P = 36ba9cc7 -C = 3407438370b4cb45d56b536269e69166 +K = d287e27341df2ca63d3544b767d5b9cabec36cf270984d8c71932d119bbc8931 +P = fde08beaa7618f6978 +C = 172c181086fe5f8e0250a6ed604f1e4523e7e982ba8db212 COUNT = 86 -K = 6307e3023125a98ee0612ac7d40bfc713b80bfdd8ca442ebc478f49a59adb1ce -P = fd80c5f2 -C = ef2cf513c59607678bff3287b63139b2 +K = 9558672eb34cb4fd53c29a4eda724e4c749d12e9aa0a597176ffd9b656487b66 +P = cd538f14cdffc942ab +C = 5cd9000928780f069d7de3f8ab102b8c852fc5cfa7fa6a74 COUNT = 87 -K = 1277491486dcfe904d64183965fb3b91ccd35171a02539abda5b4bc499863489 -P = 13682570 -C = df4366415df1c5cabd9371787b0e5bce +K = 23203a49d6383e1cd41f7d246bed30afb62df35217c66d42b6d88cbb4d2b1aa3 +P = dc82fe10cd03ec0753 +C = 264d542d02f2cc7c938c6697fda399ca12d2053d83d57fb5 COUNT = 88 -K = 6154c3743f89892b6784fde9e69b367b6edf814ad19bf874fc5662f3812c519d -P = 1f1bab6a -C = a40efe9c2c0a3631971ece11939fc33f +K = 9bf5b2fcaefd363c454266ba0a6a9bee1668c27df12fa9e7130ce21bee6f6938 +P = a331e19167eca3a8f8 +C = e3915bae8db610838aa83d345c97368dda9e2d6e5c062cad COUNT = 89 -K = b2fe306911e0fa82274f61b34729a23454ca7717a02b1b9f97dfd52a41498293 -P = 3737ffb9 -C = 1cb64e34d0fa2bbb9c50731e1c62bb7d +K = 25d9d78e46ee8040086326f67eb7f9aa260488e89cf9a3e5ad4e333673eb0cc0 +P = 42c2a95e1b330f3e18 +C = d2826b609993f58d447af39029b753df06618d0bacdeefe3 COUNT = 90 -K = 722b41eecbda468a26754e90de4c07ba0678ab17f55f3a5ad77149580f0cf454 -P = 7093ea58 -C = a90520ff136b97404d4204fcb6e8379f +K = 37255b96fc7e2ff53718b2529d9bb4785b6254e1098110c1a9a34fb2aed7995b +P = 50474663f9ed9d0071 +C = a980f4c8c7f491e70aac321a369c2d1f1e1a74134a5c1944 COUNT = 91 -K = 9af9af254dc1f3bd51c7a0dafb61b942982162ef432c260ba52186af183b11b7 -P = 9b3932c0 -C = 2c3dac314c8ee94ac42996ed07896a3d +K = 34508d4ec2e5a455b80717b4065c88c8d5db32391360cc11b14ae7936ff42621 +P = dd6db8f7dc21dd4d9e +C = a8713d945ea9237f1e4cbad22cc6e64a9bb607e1d3a10b8c COUNT = 92 -K = bc31aabcaae7771f125943b6882be39460d7677cf9a8f3bccb42365cf3da180a -P = 8755e7d9 -C = e5e5d062ccfa020f6322cb6004c9af81 +K = 812bea50d0a031bbd4f0bbad85982e272bcca0df3050b23e62fe9c1c55f6576c +P = e96e2e084906b22145 +C = 04c4c4c111508444f96528ab3f3ecc7d9a581a171a69768a COUNT = 93 -K = 4a542f7d859ea2149da5e663be286c73da9511d63dee9c47bc69c9dfc4e73ac5 -P = 3f12d36c -C = 39568189bc2b09f429c34edfd6d534de +K = e11574bf3817e4e2002cd6df72fd447e091fa14e5493c9f1671701589a301995 +P = 3e1e702e457ded11ec +C = 68192b8f00358d49851a9fe99bed4d4293853fff146d44ff COUNT = 94 -K = bb76b729b5df2551fe71cbe16824f14f997905a79651913a375706f1afe8dd0c -P = 45cae53d -C = e1b324b8912401e02a820e485880b371 +K = 45287180003d1137aefcd4c083932f35a32c03f19402d2077286ffdf6d054df8 +P = 1fb82026b5d5c84fa0 +C = 2ffaedc55f238e16f8dee88409aecb552f2f010c8e3de8ce COUNT = 95 -K = efd29064af5dd45992a505a0b3414671e713127481cd57a6c57bc7120e7e0f20 -P = 22b79f33 -C = e05532fa13c8bedf13b02b6ed02f8530 +K = 16166d26c30bdcb8e0e8add694f559f77a97f85f68739d5d330bca744c22b2b3 +P = 24bafa2be03e15ccca +C = 5ad43d5faa3a7139ae9c04203c8b805624d52529e7dbf61c COUNT = 96 -K = 00854b24f18e77ce58c3937ac2e115db038b57b3a6bcfe94963b28d60e6442f9 -P = b7d964d1 -C = 5a50b2d8ed5b107b85a938eb1936c9fa +K = 69badef24e98a7a0ce9d08d1bca4471f4e15fa4dd7e14716adfcbb6310f95830 +P = ec42b68a7d868fdc3b +C = d844b678a18caf725a8c0670a43cdc73c7527f06936a4580 COUNT = 97 -K = afee82170665b4bbf9f5bf652655dc8c04bc0656c8376365770bc257ff07982a -P = 35cbba07 -C = 3cbe30df8ad590e93421c307c696da4e +K = 885d24157725f2d8961781aa63ea1a0fc1dd06e0581dc514a7d631ac9ab97e82 +P = 18d1a9efc9e7b76b48 +C = 7087edfd5ca62de6b4c8001f7b0b69a4c595de0bfe93e4b2 COUNT = 98 -K = 587714fe73d1071ff2c65db47416112e829994492daeaf3a99f7a4b32bd7cf1c -P = dfadb5ee -C = d01c16bccd076f5830739ff5874aa7ad +K = 2096ea205b5dcff0ec08d97fb678c5bdadf8591a573fe7c40e1f6eef65f605c7 +P = 4c120c081cf4583368 +C = b0b910f23370987a17edd20b145d5a7db259bbf6a4b75893 COUNT = 99 -K = c31848dcdfc88b2d8d05a39d38a9fd9e23407b080993ebd0fbc3aa3a9b71ca40 -P = 03634765 -C = f1d0884caa5e22d0dddfee1110c7c098 +K = 7a57c20f50e6d5f844b2f3fd2be641fe6e2785e354cd071ecc1f2f6eea94aefd +P = cd2853d5d3e88a8c0a +C = 71feb1a0127b649cd9b0416073b1b40803b9a5650719b31f -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 83cf4e2000a665ad82809166127e6a22274f04b4dff9068cdab017dd0c2505f9 -P = a037c93d938a925432d8472f -C = aa6f2d0080e24f35e4ce00046626b3def84b127e56a61afd +K = e9bb7f44c7baafbf392ab912589a2f8db53268106eafb74689bb1833136e6113 +P = ffe952604834bff899e63658f34246815c91597eb40a21729e0a8a959b61f2 +C = 15b9f06fbc765e5e3d55d6b824616f21921d2a6918ee7bf1406b524274e170b4a78333ca5ee92af5 COUNT = 1 -K = d4c382261c92f2ce0ea79c78f3dba39373fdca351de8ef4330d260e30bcc8d73 -P = ad154a6db835e11e5fd4e5dd -C = 98a5265952057161cde608929040b94b60fe267ad8b51530 +K = dea4667d911b5c9ec996cdb35da0e29bc996cbfb0e0a56bac12fccc334d732eb +P = 25d58d437a56a7332a18541333201f9929fccde11b06844c19ba1ca224cfd6 +C = 86d4e258391f15d7d4f0ab3e15d6f45e65dd2f8caf4c6720963bb8970fc2f3a4a58dc74674347ec9 COUNT = 2 -K = 4d65c67e6010c9627d3c7e88683cfb3e5e1603dfea64aeb0400841c8bf6f4769 -P = 0b542eb39a33bbe7e24c0e64 -C = 271a58605a7f48eeba717738ab6fba99e6e3a2af55fe6778 +K = e941febe4b683c02dce56194a86b72d4c569e1fc84bc7a6f24c3ae2b39bf5440 +P = c168cf12acb6679c24d424baa62ed56559caee163a4efa946478ad43d7dbd6 +C = 4ad9979caa72fddff0876c0295a57fcf74e5980fec2cf622191ec6b5aebb75e0adebb12d0862ffae COUNT = 3 -K = a6e374be4bf35924f7dde7194f7fea0b75af66ecc78bb5a03dae0b21ff94ada9 -P = fdfeb237b3541c4164f4c6e3 -C = 4a0c9ba09cb0619aff16549566dbbcb8df38cfbc9f95475a +K = 896bbad7806bad10f520b896b458cc2839e6013a3b92cc3d39f5be0047a5e92a +P = d6e3492fc006e5184a1a5b6efc99426fbf1adcf53ec8815c17394696807b7d +C = e246cb3374cb88dcb2fa82faca9dc79709eba5f2aa7961ec93b2544842c27f0e26ef8b8f9bd66503 COUNT = 4 -K = ea46307d30451823fb3eba128470f880b43235fb0da010367b9707c495b7da99 -P = 70bb880cfa65182bd64a4d32 -C = 971d27342aac6f8914c124e3f9a3b3f35d21258f52386446 +K = 3f1aec954d96f58f630c2e14f734ace9ef724e1677c7c265ab4124e9b0a729e5 +P = f2c236024223b19303e2968c706675c418707d06e0d3a23dcf53dbc5f3ac37 +C = 7b0ed1e43acd285bbc4520e9a3392f85e75de64c39f33aac3e7efd3f63b76aa21e3035f49693cfd0 COUNT = 5 -K = cd6dcde5193b083a5b3fc64a933c1b91a5796e11d73dd3a7fbb64083d0265cde -P = 1b5239c3a4c19906cd0cb99b -C = 35d6e9033c533bed3a038c86dd4c2159a00f2b4778d83f14 +K = a51a290ed90659922468a857a0708b34d8c72d40796990f96ec8dbde59e769ef +P = 047a77370c5e2ea6aacfbebb573eca62f6b5339217ba752377db058c3b24fd +C = 2318da631c0059ba70c83e1ec8317b0e29a64d6c18984fcb0de2a2b11028827f21b2d0ff522e522f COUNT = 6 -K = 4bb287b1c3a49fab45810c1feeff0f9ebd7d1b066f8eb81d985c4e80d3068d32 -P = 5fe13b851957f561c8adfaf9 -C = 3487d601b3fca58cf123522e03350d3ee0f5de2b4baf7217 +K = 26b589a3324360959bebcd304e1f2ad5d9c15d1c0e090ae74ca75f88a89ae1f6 +P = d667092c4d6e0606cf70497fe7fd315d7e469307192b2f6fcbb6546a083d75 +C = 6cc0acd0996fd7f3e51a516d867c9770779275d8b5b0635e62392a4f3226625ce9832b1724908ae7 COUNT = 7 -K = b8fb1922488b37327a95a11dcd0a5f3e4a210615693ccb469f0feeecb2be7079 -P = 3e1328babdaaec60c05a58af -C = 4c9d8559d71203da1fbc6f03a1a71a042e07c51c212a3c97 +K = 90a6001a9b997c6617cff8c91ff270783f3a5297838aef07f11ed921912a98ec +P = 44836744bd1fccc576285d0b01d8a686eff02a991ab2fccd798b8f3fc79deb +C = 533802a5e730c5926e1a6dba2bd4504540fe3bfbd16ceb71bf37b03d600c359607b72bc59778860f COUNT = 8 -K = 85bf0afbbf2ea238ad3290e023fbdfefcd17c8ea29963341e4b400e799b1bc32 -P = 8f11c51b27500d94dfc42d3f -C = ca1fcf072384233a04a19f8ebe06dc07864e278e9b421d4f +K = 2f7870e2d697541bf6578f324ccd560c916026a8933fbdad6ffc1bcdd803b74e +P = 588517940c9e6297c9b0cca72d06b6bd610e22b849abb796d88ba859d377a5 +C = 4ff581e7ca22739225c671fd8e974ff1c72fcd0aa9a73a048b699480484a36ef030ca4801667701a COUNT = 9 -K = 6406b0404aee991712cd2e96f5708fabbd1ead398dbc8ebce2637fa6de7634e5 -P = 052ac410624a938675e8504f -C = 90e1193d84f6cb411e8ceba4480f08d0db552f0b2c97fb48 +K = 062c3648bef0c1aff3d9aafa54aaf06b86615ab651265e604056bef190aca00c +P = 1117ad57eac014b04378e7d26047baa5cb77c5efc65a22e47064ddec7fa936 +C = fc47acc63e6f6600fdcd53f7e0f87d664d6b3c06df62675c11e2e6f988c2189a5cec4db11329b4c3 COUNT = 10 -K = 2aef56b62ff91f875537b8b9913b3f795a141726ab982c244d277e4ad6da4b09 -P = c77608aba1d519bb20f37a4d -C = bcb81661e470084b28eb6206bd7ea67751f0df5a2db4f8df +K = 17b4a18d3fd3baab294e3824fee4b99fb8bd330ccb1e1b50a00af64cbfb94766 +P = b47258dd18aea9312e3ae9ab01242af11d4d013346a620ea31351491cb91ce +C = f5a8f218595982ee1d872fe7602ee2ae3674262c5127cf35dbceba7702fbf6f3e9b2511cd43f5410 COUNT = 11 -K = 133ed7d0259efb2f2622ea97ed17af3b0ca8dd2f26cbd37a83b31a4bfa88f55d -P = 7c0690676abcae00a4264e64 -C = 72838fa603101e6ecd4e67ec8d4104af45ed0144151ad1c3 +K = a0afe3586ab071ef0a742eb9a993a0e5f530a61e5d3aab3725981bce87808d2a +P = a99755711c71f7a4f8f8c77c44956629fb3e9f55c2a64112173e5cdfbee7f7 +C = d0e7ede072de4dfd876b4c694317a0a1d406d7592e96eeefa67c49de078a97f451e2c0810a2577ef COUNT = 12 -K = b797e64adc15c1147391f99423691a5ef1c5e69958cda451c15909e281f73716 -P = 8bd506ed6d44beae0c25a90d -C = 765c730c576fc52499a5142526087d1c75c717520fa619b4 +K = f76f94a5b92c74c7f23f17b29678321a162a1061a91f73ac8e3c30766fce4b04 +P = 5a9ce4d5b52bbf6d2fff9ebee2750a4c91f2107f3d28539dc0cd16c796dc1c +C = 8524f7e54551ff445a1baecfaf33c80054afe66dc3b5dac226548ef2f94e1740724e890f02ca48cd COUNT = 13 -K = fe47c84a659687623710cbaed2ad2633bcdbcda2cb2ec7e1fc85c1c1927def9f -P = 9ca346f2214ff639f8fe5d5c -C = bac4b596a4eb2685fd045a9de31751aa86c61fe4fe4a4123 +K = 20320841ab720b1d17a0b0a9edbbfcfea8b9f7b10bdf0fff5acb41db885a85b1 +P = b2be53b08bf04437bd954108a9178ff6563e0765fa1760b1d9e81507e1f0c0 +C = 64b8d634f2c596fc672bf4e3e3ea0ca08bb2252855b3a39c0cb938c2ecbdd77519aea8f81450c150 COUNT = 14 -K = eec126c2ff9d15a20f8a7fda3284bf5296abab9900f0178c874e7df26c278458 -P = 539587957cc4ee7ccb2cd189 -C = 8e52d33557a87e0c4c51220db9d8d0f8e12c8cf30e0dfd62 +K = 80fd1dfcc95c43ba77b8f9b651899f2094dd41d77a6aec99ba54ab4e9e3926dc +P = 21a048f722e6639f308a0ddbae241bdd8957104883152cee05eea26b9c1409 +C = fa17cb4b5f59532c0f16b4825a9a1997102f99c4cf32302c763a83b7fff6872899800429ff9f2b7d COUNT = 15 -K = 1032c63f413f67b7d859ca75eb4776cbed7fe26415b8944985dbf63d0b07cd03 -P = 0e2b1c07eed71bfe74af9b4d -C = 00a23ec171b97e8df35b0f13aa31824944ea9fc3cba87cd7 +K = 51ac36b43c82a9d5ca9b25552860a392bc0f813ff04a8c65cc313603951975db +P = df5f9136d94e14f23c98ab40fc0a911225e7ab5a2ff797ef91a36d55a99e3e +C = 23d15605a188256734c238513423cf871ecb0f307348fb4e289455cea60a95f8f58270481a7a8a43 COUNT = 16 -K = 2dc937742dacb9e282b8dbd91c7608a6dd118b5d56109217c77c5d2a138bddad -P = 83cebb02c6a001cc232ae2bf -C = 463153a62f77e5da873cfc9d9a380904e0d4fca8ffd571ce +K = 9f97e2b38ae67de4e10335c2ca784d8525b1877541db180b1d345beb97bfdd3a +P = be9960697f9ec2cead2435217c08c370bbe4d00345466f50197ff030d875ef +C = 3fafe13f2edc6619749c18165621ebd5d1fe944ffd4fdc2d882ae5dd886a8691bd83ac24188a1322 COUNT = 17 -K = 3e96b5a0b0f975c1314fee8b7bb643b2cfaceeed38d13bf322f559022e5faf31 -P = 0ce078e67894410014ecaeef -C = 7c4dac6fe85224d4b437abeb660997abe3519c0c3d01227a +K = 95cfe6310661ced93fe2c4b8782d5a03020c0bedc56b4a3eaa0422f096cbc7b4 +P = c5fef80e8df319036bab0f60eabfa5a44c8337da469978870fcb5a5536c417 +C = c04eb06a56360104e15a85e17bdd7facb3cb3eea1313bd1c857adb5a1a8d982c93cc259ce822283b COUNT = 18 -K = bcf6f037ac6d6f0d5f4d213f981368903902fc8cebb37827aed3265fc18d5ffb -P = da1404100487d83cd974aaf6 -C = f2b8b0c135f31b36a6f952150d9bdfed85019da3d8c0034e +K = 473fc46d27ad764012c209a8e8c62490e05196b90984f49277223bed3d7e0c58 +P = 8bacbeeb3285374f054906dec084267d26509a87003625450beee908eb12d6 +C = 059bb57c10d52718e75ba23425fb812ee4576deefb8d153f5f1268d80a269c8b9045a08fc0710a6c COUNT = 19 -K = a4166035d25122df094425b68d796f94d23044e9a7fe0edd79be297a6ed63400 -P = 0eb5966d41efa90b2dac4163 -C = 9e8a9841bcf2b934e4f6d7bb0f831df3aaa1394a65aedfcb +K = 7facc063d2388b9d3f31fdcaf90a7ce31c7eb9ee87c312b9deb8de2b682f7dde +P = 6828e464543cdea93053ccc84f99309b8d8f643d552a6bdaee8f5b1221ecd9 +C = c6493a824447e29c24050cf29f7d647a57ea8a13e785d25f7e4d430048cfbede619cf4e4a63c3680 COUNT = 20 -K = 4a302da9f981a357f61c5693c3384642b641b97b5845c473213903704af528ae -P = 33615e836276d2f4988dafcf -C = f408fea3fe61856a7a2675abae1291d2304734cf01298289 +K = ec83c5d5cd010b2ed709304bd57934bddf24dcc60af5e5b444274439ea8f36ba +P = 6a6058b16c4a5c4005fd508260dcc764b38bd4178c130c79e21de6102e0878 +C = c66ed30842d8f2cc709ff7c0bccaef6c67dbded0b9b1cc49c56b3aa7760fef267abfa9565f39e1d0 COUNT = 21 -K = f3dc879d93907b34f4e02d988e759de7673348c1dda2fa160a4565c606d68f6d -P = 17eb7d7232b7cda36d2a6975 -C = 04e03c168825da5d0953033baa620f68ee59330873416c94 +K = 0f1f6f71089b188c0e77b6ed66aada269ae99088321db9b6eee7864c4cdbc52e +P = f181e9086cb489a6dd57fb285bed202d2388d1f53642dfc612cd5e4cc856d7 +C = 9cc3eb26b8a59b55725d919d634b2a1684932c6987cd02db19b63cad14139d44568f1d90e83939d9 COUNT = 22 -K = 950dd7b5841c311383ebaa67feea9fbda08f57a904a324b27d796cc8dc00509c -P = fa3d46f522e2a58ba7f1a52c -C = 1d42bf1d9491e54f2579cf3b7addbe0671ab3f35f9c55df8 +K = d08f33ce5d4681a85567f70c669011dc63e1853eae9ef4bb071ef8a95adc11ef +P = f9e915556787b24173050dbeb1da3524cd46a1bd6b4d223f64fcfa7e100b70 +C = ace8f2b18e2e34a081c38dce83824fc126bf72dec311089b0360c8af76aa7aa1ac49bc3bf55d9c8b COUNT = 23 -K = 021d4dcef989d8740106c8d06da40944d5d5c5ac5449e02df3053797c9010e0e -P = 2feaa92ec9fac724a20dc5e9 -C = b052a7bcee9cea3acf379d866626937418684b705f17cf4d +K = c56daff585ba449cc91476bc8ca8b1751a6b6f38838916ec44b11b3b0affb2da +P = 2abbb96bc3d296001fd9d7e664d7f0ce91378442390e34f7ff50f601fa16c2 +C = 7baa1544be72b59b46ba4ed4de4c55f15c58cfff6a01fee37b6107b0baf1937cfcfc6b0ba86d573d COUNT = 24 -K = d98bc1743f0aaaba112d04c5a1ce48d6a3b60e304ebeadd928f5840bdaf211fc -P = 78c9a776b361c0d3d55c6667 -C = 203cb9d46e98d204cc547580017b51e21ea6414f6f24e70d +K = a291f93d9e94cdb82008515441b0d3590272f371518b1b22d3ce9dfebdf3e663 +P = 1aa6020b8d4db05d30c38f6601367218e71018e0f2938b71d8e6bab724a5bb +C = 53d8fe39de93af39726005464b8d628718627afbdf04eff5b5cee19272b1e4ea58b33b75aa2b8d23 COUNT = 25 -K = bdf3d6cc0076c06103ae0203d156f6956eec3aba107605dba08a3a3d64d6b08e -P = 222be6973da45c2f5a2c2f1d -C = 3ccf0d876ebce75e38f50aef3f925e94965c4028c6987572 +K = b4c1b79e072c692871252585eb2fa855438d788d8c903a622d73af76424e48bc +P = 69eea9e8565c698c6c73fc6c096fd37c7d6ff67cf58d19bbba1886bd99b5af +C = c36e9e80fcc132833dd6f304561d4fc40517105213f5a5f9a74409fab77d91e0b058a8d2341037e1 COUNT = 26 -K = f2896962a9389f2565ec47291bb57aa2b4ca5f91437c96379f7ff3bce8bf0fbd -P = b7c3438754c1d8c9ebe0731d -C = 0aa6b06250309cec5e9cf19accd7aa15602d70e8801e932f +K = c863dc26d23ba08aee69dc2f8402b6aa9e518dd15d3e1c9fbea7739e433adff2 +P = a461e6cefbaa5fbe259098b8a55a83475a4b435ffea6322b07b03cfed857c1 +C = 96e33091fe66819c9f4881a78e4fd56435a1dec1f9d79c027ba231b04b09c282f7665e1347c0f65c COUNT = 27 -K = dc8c6befb6d19c71780e7b52dd1d7397c850510dda56473ae56aeaa649a9817e -P = 7dbe985a5c373c1b5a280a1e -C = 0110ebf64de3048d4d8c1ac761b1fe9dc80660543a03959f +K = 5a96f3893c5cc48e352ec3852607509d1bbf66225f7ba4bd98d03aff1a995d73 +P = cfd4c4491ffe05d6e09eecb1eea17ade1cc8101450826a79b86e6d9c4bbb23 +C = dc503608aca6ebc336ecb4187da8a1404fc040d073b0d280685922e145454a2841b618153407c8f2 COUNT = 28 -K = eee6ee7fd80e902680d0c688a002bd2b85df34087797f37d9a641cddbb336fe3 -P = d2cc6bee99c88e00c0e77bb8 -C = e948ac609cf6c58f60da13e719bcff92e2b4a16399e072ad +K = c9c629c5d9b5abd68ffeb1ca69af04dd702cf3673e980cfeb3d7f672e86f380d +P = dc25bf96d8209069890c9374dd2a1ecd5a0c9b4f403f283b838f21fb5b1054 +C = d36ef5f5f22bc0422fd801cebc485dd90ca59b56df5aabff88c89e8d58ff460e15ab5515de481099 COUNT = 29 -K = 15404e76bf9ecff6b2c8852b5699ebc452d4222aacd03f9c7de6241ce0811e8a -P = bc7be2cdfc2cf34a87699575 -C = 05693f7ecb59df53e750c3dc6b9a9ed356a9c1c6b41bbecf +K = 8381ea3e705f1e8d7f5dab9823fcf288b11dfea3e77ebaa42686c97f2b8e0131 +P = dfd30a24878421649ea389df77e53d71b6757ad33fb315cc23a3136c55a600 +C = d70899d6fdd7d3ed9376c2f3df30cafbebe724aacda0be80cca131f0ec167a95b0009b11906fc867 COUNT = 30 -K = a8f57cd5b6cec2ec14a9f887ecc70042988b45d7eb57290954bf7f9cb51d3d42 -P = 9cdc566f6665630b3cea83e7 -C = 3aef79950f449522281cb854b2e4c29ede9ca1348c8e16da +K = 901988de05c5d86e1180a62a645c51361e09aab26cfbaa5f6f1564dab5d8f509 +P = 92ed74bc331d5a724eff61572fa56d8222093d1f8c2576804f521ffbbf2117 +C = 7236fc2c7017d21311ced3d0551f81fa39e9c9d7e107bb427d1581269d98c7c5037ca0174a8a3775 COUNT = 31 -K = d52eeffe8c427fd7650db291f904692b15bb7d7ce08d740073b0a9d7b89a3504 -P = 265c778ae357bbf2bc40a8f7 -C = 7144d5a16348a812243d574968a3c23fcf058696b12fb64f +K = 664f752dc250a65d88265615460d123d6a434ae16da13914f793e6c596162d6c +P = 4596d289f8a870f546095584cb4affa9a80f7cfc5496b3ef7117a12f0d3155 +C = 2e6b45805adb0eecac05a7568198ff5b0ced8db91eb9682066d86955dd12e94a3c2ecbeb50e58b36 COUNT = 32 -K = ca0149e72b5c969f22719db4a0969107cfac0145eb58be90a91a0471aa3f7646 -P = 0a461ebe23ac0615e0cc4d22 -C = 14784e9df5bab6d340aff1d4cc494e9735b489ad7b4f10a2 +K = 0010ae91ea094485a1a2049960b26ab058296d9bc5dd7f0051a4294c69c897c6 +P = dcd936f8265ec09b47d286737ece1ad22430f5761cc46daee7d0ac02930836 +C = 621efce648b0ab1bf1d41977dd05dd61939d69c630d5ffe9bf5bb0c6ddbfce952a09df07c443adff COUNT = 33 -K = 914a33307f8b1262ecf86c725febd9b26dde38ded90f5c76080a383cd4942d0c -P = 9463efeefbba528b17915b80 -C = 220302c50d9ce5c2d246bce7d24ddc907e6387acf380ac57 +K = 8afa321697b76c6e60119e3113b1219bdb8061ceb6498f5adfed75586d2dd403 +P = 91431ea706ae2926fb46c7a108c82887d76e236d9409564d4ec990c6d2abc4 +C = db3e845b111dd7b30813d827dffa8fcd5956a61e5f5d4ac05afef6a4b8f28a6649ff7b530a80ff60 COUNT = 34 -K = 48bee90886e421733f287844f40dce2c7e6ca8a3522ec51a35289fcbc75a4280 -P = 433c31f53b43f06efb62021e -C = f90415eaca4663549e5a2cd094619df45c0e2db6d88db5cb +K = e4349aeb612d6a3b5ae0fde8094187aac34618fb7e1a782ced35a2589843ae2d +P = e15d50f8e5a09824ad9185773e4a4ba1627d10440083e0090cf20e12c9a0f3 +C = 4239df7ba6cb5566890d1421aa02b1630e8e077edc0ba49615c1a8796c0f47196db85d12a79d464a COUNT = 35 -K = a5fd43a5ea4414ec2810108a620cca1a8cb535a459c54c79991f664dd823147b -P = e2a2cc7ec10d165706383350 -C = cc14fa61fc4cb62088b83e11ab26e5ed1641371fb542b0ae +K = b23e7cd189a95bb6f98b25a09c76088ec3c72ff6cf6475607c33605dc5329d48 +P = e0ca7b78f4aa5cde4758bc1fd6c144a77bf2839c8ba6ec329411f2e9fc0157 +C = aef4113a0303b9183cb1e6c06efa4445cbc5d2cf9505c367ac0d1fbffb841d68c25aa6e5142b227b COUNT = 36 -K = a4985aeebf0ddce4a38497a1e6cd882a931c80bae10f84a2490c0b78946a3ec5 -P = 8b06d114618cb2c73f865e78 -C = ee9acdf1c741987ad9e454f970aad2bc00ca8e914e413fd8 +K = 45191092199c7bc1ed3b0b99089378c9b5452c880ec7aecaafd2bc9ffabfde95 +P = 4bee5772eb440b1d929647d10638bfb671ab7f394da138b9b88dcaab786184 +C = 173df6e769a15ddf631a4739529302600d89ee6b1e78bcafe3246bbfc2fd48d6626bb4d3c322494e COUNT = 37 -K = e5aa5b5d1d970ade68e7fc48b2de66ad24a85ef9013ea8ac03e77a71b20d075b -P = dba1be4439578412815840f7 -C = 97941736a94efbdef92e1fac2621b96f1556c60f0c9d0d4c +K = 61de02b4eb509d755c4a78c575cb7c7da673aadb2d0e1d66e9133ddff4b9426b +P = 75be7054c936441abda72717c4c48a8266359fd0cdf353aa4127dd4f8d654f +C = 38a80815c306ff902e8a3797b679e20849bf3fd91fd01ca73f36c2ec4fe8778ba3a1502436f45de1 COUNT = 38 -K = 1e4fd306c225e2f56bf7f78b61dd7f86df528e4ed82daee9f021710bc3cad01c -P = c28a480124700a073e4403d0 -C = 1284a169e89efbd76c510f07ed290b1648e25528dd181ff2 +K = 529ddef40bf4803910cbbc738ba40218f3ec145dafc16f1f146af5a5776c262c +P = 81d6e0a2dd37576472a147c2a574e8ef0323ebe47072f41787a1f4c5667cfd +C = e3513c15e1f110ff70741ea1a410a7071600722c3fe1801be419d8f462a0d6179cb95573294285f4 COUNT = 39 -K = 7341c8a766cfd6f9fa6d1591c7d20d4685ed7e89dc4506119a12f2369c65b201 -P = 7eaf412d52344d4644c40f9f -C = 7161829993d9c75b7d257146feeda679aa85c62574a3ae69 +K = fe9ba1b515cc875ba32b506fb0033fe4ea357f69384fcf9fa32e980bee9fa22c +P = a4b06188d1ea6de141744174858ab796622f7b254d0adcda6150a02b7b2320 +C = 01f11115e4ed61d293625589f5733acab26e1d0fed6060587601ffb0cac4fa7b3297c39c657f4c13 COUNT = 40 -K = 94984ffb1f05de49b625375a4225c5e0334705f497509f738ad70003d7e65119 -P = 1b85ff7d5e28b17ae3469631 -C = d6eb55e7ba955cf1e18c213f223c203547d22b267bc26746 +K = 37e34d89f1c478fda83ca68e1a815d13eb55331ba59b082a49cb70b7e049ce00 +P = 38a99f6f5d9203b28b10dd3d3724533f782f56b6114f851b413e8d512994f4 +C = 1af14e06c7eef62dbfe65afdf7dc77500d6e7248f7879cf55014a4e5982f67599620767228d4983e COUNT = 41 -K = d2241081dcb7bdeb6de697b17476e2bccffcda2f77c4d33ec7a582378e16cfe0 -P = 9b619fd94c9143344d66b038 -C = ee0a3b9b60a49f48b8b1dbe1d48290dbcd5b5a5f1132f387 +K = 32bfff72d86367035913152cf11b6b64e69b75bf5124a40051ff0079722bd9df +P = c40679dc2f0e80ccfa85451514aefe32a80f0f71c9177d1b0318dd2db7e1f8 +C = 176889f9ce8a55a5a02efc17c8456818337f4d94f5adc15ba2c7cde63bd30ffa0480d20ce828c06c COUNT = 42 -K = 92fb233f73bf671dafc501a82f2e24fc91ef9c29834b9a1e1cbbda4bb41585b6 -P = 1ac1192403d34ebba28c6f93 -C = 8b04e4eba608d83b8309286695f175e8df3be90f0a844a47 +K = e378d76892d2772f1ee17faf943f7489d23ef8bf2d281539a0eb13f498c2ab09 +P = 52096df476a1fa70c8b839f00957940355387b1bf41c79c927cb514055ad1b +C = 37dff9e0359bc4dfa54f94034234e7b07ce9ccdcc093f14e66692c96f0038741e1dccac9fd7491cc COUNT = 43 -K = 68cec2b96460c9ab37c3e1e3836ad8bd34ff2bee58413e12ec78a66a2f588c6d -P = 411d6532b72120b783e7a32c -C = 7e2a469aea0f814e1895ec1c73fea4c832d69e2e03474495 +K = 3f82307e0d02c5ad452330dd512887d0a91baafe3519578f17c73cf02d7e5719 +P = 195033b9b9f2d5ae38c804daccf635f38665bd0ac240a391102beb63db456d +C = d8e50173f8bdda405dc012e545dfcae0e641499ce3427becac2e92d44631a8ce18df16442c685787 COUNT = 44 -K = 70e4aed71c795dc06024c9e6c72367b43601ef648e634b134a84c70fc6d879fe -P = cf6271046e560319612485c1 -C = 7b6255d17f1ee3ab085219d678cd84badbc74dc32ecfcc4c +K = b435ad11a6aa59ee88ebcd472a5ec3d07bf2484529d8bd195550388c628b5242 +P = 7170a08980c832a038360633617c3cd5c111cc7f0ddc09abc02b5ea47ed24f +C = 649a301d3a67c08707d49ef80294bb3b7a1c27e950026efcac4dd62e9fa167c96367974a9f7e8441 COUNT = 45 -K = f5d464906fc9eb44d6a6e5c6e1cdf7b4cb516e8d83d87053bf6bcba844c30ea2 -P = b3b01b98fee01607a91a2502 -C = 7873b6f506f45e896561462c5331ac45be0539d601cd8326 +K = de4f8ea753f42421a0ef4ec76913c77c7b291129ffb333fdf0db2c50034e55e9 +P = b51f84ae5e46ecfa1634030ebc2276d0cbd7bc0abb61de1baa65b1eb0cc126 +C = debd41ac05e1943de79584366bc0f80d7bf4f49c6cb805336d908f9be51fa77ed119ac8211ab7ee3 COUNT = 46 -K = 00305a44fc8ab1dda97237bfc0c14ff8a34b1208b19a217a5ac7b17fd6c28f06 -P = ef3b5b3ed326494303654df2 -C = bf0320cd2bc4fa8c577fda0f0545d1920ad24549bd53f1e5 +K = 17ed927993d65d4d594f7519e1cec6fbfaa5c9c3b547c4d5de731f93f7c3936b +P = afbf95ef9f54155de5db9caa3f8b1bd4510de288a028c9aea80616fb38f3a6 +C = 5fd96359a08cbb8f9f7a632bb196f34367dd981545a6546355c973c9fc1e7228cf8be5e70a2dd2c8 COUNT = 47 -K = 30061ba981068ecdccf4c4853ffb41254c27256d85f9ded4dff7870298af3a7f -P = ddf7017f68694b055f99ee37 -C = cff1001ee6bbbd4385cb04b44477dca32fc90bde21f86d25 +K = 60f6746fec7081d1500d828a5fffb78cf334c4cbe12ee39b4ebfaf52b817c184 +P = e3bb33f24e2640dc2d6db7345f93226a4ee8bcbd4670c1fda7ef7bff8cfb13 +C = 1122d08256a8b5e7d3474d78f3b0a9480bd608df548b4580bcad476a3719b1ea1b494d08d7c75494 COUNT = 48 -K = def1562fb15f8afda9d998c0d05378625e86fe0b649323baf74e2e9dd736f552 -P = 123c049cf77b7c771bab659f -C = a34688aee4dba11ec627e90fd972cb537d14cbcac2d7d4dc +K = ffb2b68bebf84294096061b9313190d62203c24b83fa2417b09d75150d781290 +P = 9cfe923c12fc979271aa1c887349c72b01bef280282e174dc17fc197c06833 +C = 2aa75090b38fd47127eabea3815cf9aeb2f00daef7201006e0b6b8cdab732bca1ddb16d00c64fcd2 COUNT = 49 -K = 6d2e98c628bf6abd4b354c28a957272cee1484bc3e3e2faccf6a6f36e566eb2b -P = 60f792040580b03346f80269 -C = 2c17dd585f264796832019c6ff303220f88f20986c050b1a +K = 148c4be6282889e803a0397f4be1e8f64cb2c717639b18d9d7c0eca464d01bbb +P = 0da5b7b23bc16836fe783a80d02b7a6868e7c606b0f9ce57faa5db2ed84c76 +C = 0a2d57feac35d9e3e538a61682cac1843cf8c7ecaf6959d3b0af5cab024db68207dd8a45a57dd56b COUNT = 50 -K = 52cabcfe9c09e46c3cdd478156314abff77a18217562d58e6cc6d27e81406b11 -P = 94a874ae36e816f1acb8e9bb -C = 77f3fc11cb51d38481e9391393657517d64d6bd063da5333 +K = a817b3f51278b9c4abba0d841d0b56c5f09cfc2dd8b607670ba6699b46035ceb +P = 0e88944422515b0b7c1ea3cb39b7b8e7b42e23aa49d5a5a0767c64efe050eb +C = ca0a8c62cb8c9bc1fa6d0290579ecf86039ac1c9ecf46595541f3c5ca70ccf5cb7df8efd50839da5 COUNT = 51 -K = 8ed3b411981306e5c22cc21153068857a20cfb4c21e2636a172926ef702d906b -P = 43080e0f7068a85b69985d56 -C = 49daf2451df5fa1ef09fc843a277f58ff8a6b9ef87badbfa +K = e34935f3e2e26bd9821de65dc319f05ca1cc9e88da348afea69150da1e57f417 +P = dc90672f67dbe00f6d3c95c1463b92b3507fd09a559c707f7761219261b6e6 +C = c5b641af3a9a286a278813d98606963bb825260e3d420f106d6775bf077e7e84593f2957e37583dc COUNT = 52 -K = cc13da60a513538de54b742d08e6189a7887566f51ce549dec55d7e4aefee907 -P = 72c911fd10f7c923caf31051 -C = b0e407aa3c297d63033a26b36fb1c1c0ae5913b451a3b5c8 +K = 79d060d477eae25b382ab51987918acfc3ed328db18bdfbeb6fc7540518b9897 +P = b0b8c1a123660934c20fd4ea611aa68d1bd3b9b6f3eb7edd314c70446c0c2c +C = 94ee69cb1b7f25b48fdd38edfccfa62f5d8de63f2899f02d02eecf08b70034fd8d35d3df248b69f7 COUNT = 53 -K = d982627943c8ec1d45fa38fd7b370ef73a6955a66fe7d1d37e103a278f452856 -P = 6e69dd97615f70397ba9cf27 -C = 69b770f041390ae12302c3864320ff927921394ec9caeeea +K = bac349a64c84a9c164906b293745310bfeba66491e73211bfbd9cdfc718d1fdd +P = 8e14d5c900b8a72b0fda28947b65ba04d06ca99150589fe3a514744a24d275 +C = 973ee84d72360319f321734dd853fcd1267ea06aa324de8dbb92221452a3ed11375c59f30759224c COUNT = 54 -K = 500d40046c7ebe9b6162f108d8167bfd015834dfd6dccb457e2f677972a72a0a -P = 40aa853f4bc16378bd22dda3 -C = 2ef0a1e92fac03894f7eedf7fd0e040d9b7a18e65f10116b +K = c73c75657cef9c4a5f402d269e3456705b512d22165f53557792acdc3049f352 +P = 3e07c8ab9997308c51494b6f7cdae4271b9df18c005f0880a91d39e262215c +C = e7eee84937ac1b1aea4dd219d13a904e7bd83db92e3809941e9554ca427e188416990fed351b3da7 COUNT = 55 -K = 5632cf721f60b876db14067c34d67f38b2d7cb10a55f10f75b6cc286cad71047 -P = 0279147de3c8b1cd100e7603 -C = 7a4f8eced91d3386902489e60e2794bb7ab636f3047182f1 +K = 5476571fffa0286439d683a141f2b08fc0a43bf25bd4ca8d0454ac65f4ad9f1f +P = 4b4e8179544d87940d3bc4148391149c49f9a8281c53c6ad6a5abdc7604740 +C = b5f92d36c8ca0962e5d5ac6a4f0b5f8e85247f38bce3c47642279e28ab1b318c2ea960609fc17cb2 COUNT = 56 -K = 75b19fdad8452f99227b423dbbe9e26c2c1f643be3abecda051877df65c22f9c -P = 98ba235cf9046dfb39f6f7c5 -C = dbce328541788c48a3df002ba2666df45ca6c99f400a6120 +K = 1a192dfe8720e278394ffa2e23d62cf5b40f18ebabf61d11e9342a90844989fc +P = c039708189520b23000d686c3cd82cd2dc7bfd2b8e59e88ec6526e6c1381fe +C = 5434aefc93ac2c525b3105332777c5b36eac87facdee258e197104b0f7dfab25225f31b1632c911e COUNT = 57 -K = 017e21830301933c2f220290a1ca4910863275b529ae0c61c98ce3e2bced1ab4 -P = e0b7f83eb0d14cc44a0392c3 -C = be1d2a87897fb13b0978d084dae4e5289cfdaf82a7774014 +K = 1cbf9756edc9e00a32dab66a6442c18837d1bef0eafad29cd787edcb070874e9 +P = ba9dd54afb0c8717b165bef0235b00b0d480d396f5737d9996af654fb631dc +C = 2a006144cc141d81f506b83a5968494bbfdc015302cca49414d5337da04527c04de81ff61d8ad429 COUNT = 58 -K = 1a2c79a668f50983a53c5984bd2c3362e3d6b592ea706b9ce427e5dcf3af9795 -P = 3b63cb0d414e6c974d129e80 -C = 707897380e51a5c8a197cffc3194493cf52d09338a426754 +K = 451c6eafbf2de0ed1c873038ff5ff4c9b2cecc45b88bddad9369c0f5d3de7b19 +P = c29fa43c7fe14db59a39214e3a3a5734c56e0468fac3762a07cf66548eee5a +C = db03aca844c35c04827a354f835db3646eb9cc34318faff17feee58c9e27a909fccd1f52aa19393d COUNT = 59 -K = 1dbbee7ec742e6049ee0c6873ab77a40f850e5256dd1b3c6edb7ee0303ba7f83 -P = 2c9e90d73837a659fa4cb079 -C = 79a4f6fd97ced3401964378cf1be2323faf9c0ff97625b16 +K = 1b98c4cb4314958661d85220e07d516435685132ec0a24ab52e904026dea523f +P = 0e3ae7f671418d4bdea1ea89716024a0737adc406fa45e6521763b64ea7982 +C = 2021bc9e0d242e257f048da84e9cb2d8fc22e2cb177496d837a331dfc9c56e391765a591c078c279 COUNT = 60 -K = 745e1c010e3e29b4ef2031e34df9a3a402ffa1b9d93d12c8d98eb68763d21c5f -P = 22407b8baec23cb0d79f412a -C = 5f8601b743c5feb8cb8a0e6d3fa4b33f523cebcd38c3c494 +K = 6fcf62c9a0c2272be41a4627d1426e8472b57175570754326a0871ebfcedb557 +P = 2889b162ee399dfe9e3266aa01526e8b061515c8b074f806645120f5307f97 +C = aacec02eb06630a43c2c70e6830e921724824e23e931ccd4d91e609dadf7882d9cf982a11db1198a COUNT = 61 -K = 1a8edc8cc98eb8252b00c689a27d6148ed1a92f11a62e607a20b679f171dfcc9 -P = 9903b2ad57f236e4a21b89d5 -C = 4700316f2824fa46b1e6ab2ee7d957420aae7e7b616c3bbc +K = bb80b0ee0234e4dfd3dd08a11c556ef511c17c59f1d8723c704e43235f8f142d +P = 8b04d9cf42e21966c625860c9b5b08b44c0763c35805738805dcd876d0ae91 +C = 66e2993010afd5945223eaa3579a6cab4b08d632f923f437ecc138384d450bb6e8cc368456cb7585 COUNT = 62 -K = 396825f78284ebe28cbfa2575a925d2ab831504af179cefe8315b127d74bb320 -P = be29342eecf3808637c47ee1 -C = 1856807f03b0afc4e696d7c8e32c05d0ed3d05dc08254241 +K = 90ff765beb2e9ac8ddc9bb79fcf0b8bcdd52da23c527f812731c044704e37370 +P = bf5488895c36f13f566439e651518aa5c2b6b41558b1990d2ffb31a8c8704a +C = ac2ec361e79fbc27260c83e453997d652aa4647221c8f6f2767f45eadd52788b75fd4bcbbe5635d8 COUNT = 63 -K = 925bd7e50749445a800e61b070f19697e4ed59b4832790b2836a877c62a20bbd -P = 1aceda9b10c58d501233cc75 -C = 6a98b120fda8b97b84f0d94423d0c2cf19542b994707baba +K = b026a1f0e3794a5b2ddb8509503f3af5814ddfe417b5f4e4e928d78ea05af073 +P = 1f9d99011128e94ce3074e6568cdb95a66bdd4e2f98cf6a60d411dae019e6a +C = 8561a4cf0f054e34cb03b3bfdb6d73f6f31e6e18e87e08ab6634afc241043f8141f8203440120017 COUNT = 64 -K = c082d1c087193ba901d5c2cc15cc4494f4685fb245310779fcda128a3a4eacc4 -P = 19a77feff8de58d750c358fc -C = 124639d8492b6c3487f48382cf11d38d5bb2c3f1baf205e0 +K = 2c068ba9265a828b50f78900f106cba78d6dcf0db051c88b8ba102b1df75e753 +P = 4258b6a71862521e87a3cb48717a425626f30e5b9a23d60a409434937995ab +C = 7640b3cd5ab897e8a037b01c73c1fc7575e8eee745ebe4c026518a5ac7eb1e195b0f37309102d380 COUNT = 65 -K = 27763d00833e1838c1942b3f917f62a28bc2fe5d98810c29aaff08f821976859 -P = e48733cbceaaeaf03740b5e3 -C = 1af122755e5c5f5dd9917331201d84d32ff3f9b358bfecc4 +K = c0107a57c3306c913242b427d8ae6711407dc7f3ad2b105a8308ae4fec996a78 +P = 87b3be7eea1e97400622559f93886500a99e7faff05468d14bd282ef985d6f +C = 0d38484022bf2b6de1a49bc9c3e940b4e6704f65d4f121a001ccfe06ec4e85938f3b0558f84d1847 COUNT = 66 -K = 8e18f34195a608bd3ffb7e59cfbac1b67da7d8cd9428e40318fd3e7c87a83d88 -P = c92c7e1272a45770a2b63fbe -C = 83a50c9201047b10873af760792fde73a237b1aac18c63cb +K = 290705844db6350e979bb28dc141ea746e24bdd7bdf76dfeb77f7e48b36c50ee +P = e9305aef84a31f8f43abf60a2cae10583e2d7b46f9d50971add371df61d57c +C = 000815953cac60b4a5486ffb0a794cb253dc707a80341cea383fc2937d7b4f0fb2f293ada7d7c1dc COUNT = 67 -K = 6dd9c331f6181495aff4c2cea616ec018e5694fec84bdb4fbb6a20ce3c983191 -P = b2caf9b84d7e5da62a799f87 -C = 24b0c38881dd22a127b9884daf486ffc88adc8dd4248fa52 +K = 1476ec0003913f4849435f05b0e6d6712fbf52888d07cccfca723d4c2c4079f3 +P = ef2c71573ed1d192106c62f8f71a96ba7efe4db374ebc9c1f0507fe476ac1f +C = 2c35915b041230671ab3d056289153e4d3834c1e52c6094dc74c23bd19cd17be8fc1b715e44475a1 COUNT = 68 -K = 7f45e13ed5969f3f69d0de42cf5cc37771f0907d5401ffb5a0d3a8818219e6e7 -P = 486661850ae2512a602d5047 -C = 7adbf78397f751948e995c9f11f0be99a965c33a26a1acc7 +K = a44e64162e628889ffe9bd17d30e7bc7723a3adfed4cd6af9ed2ded1309426f8 +P = 724e420d0eb9ccd72e6f427b414f5e930930d205d5fbbf83ae50d746abd401 +C = 7d0d7bc9e7930f67d4b47602b709d985ccd9b0072850c58eb9a97581f45136df5be53dc78d636da4 COUNT = 69 -K = 2dd96ab394dc6a88c1f2256d75502ab312ab27e1aa960fb507739fd9599a27d6 -P = 39c7cf1f04a70003f1e66b77 -C = 71a87d2501938da54029f0fca82abc2b29f9cbb057675782 +K = 4dacb7fd3d808a89fae020784c15ed223f6469e49d1bc6754c61d7b006ecc0c9 +P = a539a6aebee1f84b12de4568786968bfe4da96466e86b250a50ab5b5d8aac8 +C = a256e3144a3c8a1a6cc557a196aa7bf6a322ccb8be3e71182f071161d221edfbb024f69f49ec663d COUNT = 70 -K = d291120a9683b62f836dbd560fbec2e3bb6857e9a552b99a7f6bd747015edc48 -P = c52e49aaeb4a971972d2e0ec -C = ea5a089ab4e032a070fbaffb7605a16b31df3f8be6e8af1f +K = cf80ba084e8d780276802b19812341c39f4b7148aacdead9aa8a2256294c99ee +P = 5a740d111900923c91c9c7ed32fa6896661572763535f04125fcd217ab8704 +C = a7ca479fd538ac037706587335ef1d1b6b5f7e362a2ce3a8621eb48ee07d3c711d1275451efe19e8 COUNT = 71 -K = 4b7ddd66e229d9382127e07a8a96de5c88c9bb0bf5167559c3851679f3601399 -P = 78e2f87c3b85d706bfa4a32e -C = 1a672276a281f4e63e4986cadf79254e630e14fa0e4d8915 +K = 71252ae5b6f9a5d299156c79c03ae819a342e1ecfc94a1bbfe88248936ae7787 +P = e4254b5aa9a271bff2d3c248c37624f3b3373a156c1253e77900fd30c0c48f +C = 0724b8a8d6a93ec8eac8ec270ecc752c72dc68998de9f56dd52c8969d707b90be62f8d54a2fa546c COUNT = 72 -K = 82ccf5221035b7e8d9367d8189bdcd3b5ebb49d3280a9ee9cb1404ebb15bfb8f -P = 9f7a7a718955f133c39acb38 -C = acf035b0e43d10088516cf9d27306879c276742b6b633ae8 +K = c34ad3bc69090e630e03f6acd4af3ed638cdec73c920592b6914ac3018ae7eb2 +P = d5f6af4d4a68891679b7a965714d313417a2878d87a9dc9597ff8bc7398abf +C = 62dadea6c1ddc52776ce5d3cbc30e95849b5cf6c3bd04996ec2ee645da3fb5d1136ee29eeb108633 COUNT = 73 -K = b390d9723c73c11052abe382085be0d996d19416cfc0cb93b7db99eb50a9a709 -P = 2fd2c9d38e36d04c6d156606 -C = 51f384151a0a509ffa31aaf8f24c3ecdb59eaca5814b931e +K = fb750cfb279e0ebfd6090b07c84d047e760b95acddb0f8618b4bf3acdc9df101 +P = 894b25f74cf9d64a8986e3496f9168fec70f7ab3715fc29acaaaa5b96b9f49 +C = d370563d53661c50fea7a6f0ce3d10786bb5c9bbab2910b400e72f4165e5487c046afd662320eab4 COUNT = 74 -K = 27636a4fbfce261574c3b6be5a4258a11a3c6c796c610b27460eb6cc492ba7c5 -P = e5c6240a4d72f506bf90ce84 -C = cde766e1ccf6cdb959a9ccac1286368e058b09bb1e2a025d +K = 5543bd32423c8b1112dc43868be3fd974fb532a34e326a4fda79e5683569d03a +P = 64e8b60d43e5ad0c309f49c65fe8bf1749ec06965ff7aefcba368c8c0ece52 +C = bb419eb4ff43876f0754d29a5195e6bd89c9cbf5ee774933a76640fd81e1d256ef3e54320c027544 COUNT = 75 -K = b8f26e8ddb24bf42ddc3213271c72f570899d2d0c18fbca7d2b2433cd9709279 -P = 9b8b3cd0a4a32dcbef918a03 -C = 357a0f9b8e2cd2af0f8f1d111b0d3a0cb905130b151b8991 +K = 38dea65f02ff9d2423580b801c83f7c1f9a189be24ef4dd3c38cc324cfc6f780 +P = 8b13ed6121c3c9e944574593b52134488c85dea4b0eddac2932d302bbb9401 +C = c3f14739b83dcb5862471b3837d3ccead7bf0d3ccf7a4062f782bc302d8f818be63865bd20197034 COUNT = 76 -K = 7d25570d83948396a4d4f04fb163867a633c2a2d34f468ebf43cc5e40cd4d990 -P = e6b642ae837a1d002cffe0ef -C = 2a94f1e13d3059b7dfc2270d076954c82c8d5560925231f8 +K = 3f38a3896fb5d6de6fbc9c5afce089083dc510d1066c2d3dd97fbe35087d0840 +P = 7a185abd12f76704b9198ee77252d4101998fd912b190a4a150cfb36b391d2 +C = 90cf0b396e01b4000dc038d2af8bff767b45d7bb3b8a11b5b1e9761689c98713e907306a40998dd5 COUNT = 77 -K = 9a33cec73db3b2b2fc1796964f65efdd97385774f58a34a060e1b7834257eb1a -P = 6e17e39f811056b920240b93 -C = 0eba7c9ac8a9646398c372e24f20ae9b813eb23cb7bcf900 +K = 550d96d0b6326e668da7357cb3abb5ac603569ddaf5f460726c03c2909b8d84d +P = 027c8f66c6375fa1f5de03d17e4d53ba0ea0ba5f8ef83cbd4050b6b747bb1b +C = b9ae331437c7485895fb7f731c1f5ad76998af0f2d66b15588baa045d306d0286a48e04117e123a0 COUNT = 78 -K = 9e7f9b70dd4b8f8145e4ebce790cdc14952bd078776beeca12319aa3952ef532 -P = 48b6fd14829cac2f099b5f7b -C = 030f83ae809001c1a465e495dfdd6a115d159c87e9e77fb3 +K = 244bbcd6b1a1033eff8da3939864f14d4e4536f26917bbcf2fa26d05b1c71f1d +P = c6321703ef466a6797bb86da9b12fa901f6e6d3bc8f3d8d468bdc16f5a5506 +C = b0f02a2e1a7c819365972833da0accb24703df3f4b1c4098403abc2acf45659472330928e88c6845 COUNT = 79 -K = 2a8067e96acdde0b91d3ff956278ba0bb46ef97db1fd5c0deb20c9c69e6118ba -P = 2734e45813df409eb1f103eb -C = 94373000f2d3d089c13bd4d5af4140c283bdc61ae7dd58af +K = eb477ffe07e66b25dbd691a387a3df1a078a0b34d4cd6fe7d3e1a096453d0895 +P = 2ea39aac4c477a4ba2dca94b55afd329cde5c5a88c31d7c68d65d5a72e6ced +C = 9961b7f98aa125ffb5cc08bab2e0ab79f00748fa028a9252a483aec03f3a52da2b5112841e3d0521 COUNT = 80 -K = 68165661a5888bbfa11050fac18ef1e84970d83b710c88fe7ddd9df6054ab1ef -P = 10d403cc1be67140b598b6dd -C = 382274d94c1d9b1296201e8b1c62f07ff6955992cb8bcb6b +K = 44faeeeeb843e8226a4e58d0b7aa86f62b4321188f3e114232e98ebad52175a7 +P = bed7a2b48a27600e7f883d5362b50eb97fc4eba483d9a86ba7183200fcc360 +C = 391d7929a911c5bdec6a2ebbf6b81e2aef3fa268a4103426a1c019fe4ed4116e818e30fcbc7acc57 COUNT = 81 -K = 4e33622218c6087992a90e841f2e337338fb40b339d8121a6d3d2c7920ab5736 -P = 4884d1930474ca1ac62abf05 -C = 40c14c1e3d8903185e9775bd841b3347aa2c66d2856a85c0 +K = cb56192c24bcc7e6edee5cd060f91104ad350947b9d8e87a0a720622204560b6 +P = 9ea1a01efb0201c88a28e0d817b4d08fdec0567ed703d94642c75836302c6e +C = 5992988af922deb3c49de98ebeccd157e3a1e50cd744730c76c10c67bdf5c0f0a3b1259369f2cab0 COUNT = 82 -K = 950502e69d34958e039842fe79d5285dbeb3855d87483472701f422829f21ea9 -P = bdef7a856543fa61a08deb51 -C = 70158da9c4c27d9fc163ac8a41d07fdfdfe66ef4796dc07e +K = 2d43778a43ac3caa97ef67f6f2de92750073a86842780c9c5f062c4700306091 +P = e60899c9a60d396b61d8f9af54d508f3d63f2110ebe01a749c786158694d62 +C = 1a23b9e55c45c1d0df34a13f020fbc5337fe743e054cf0711b5764dbe13312bc5dce52cc0dd6b007 COUNT = 83 -K = 0ee273dcc27c6a4e6c26bb1315968df00f1e901f11c636b4936a4a756b85c6b3 -P = 233cb70a89911bf690dee032 -C = 23d1504fd401e201af015ad95a6ad6fa304569564cd8035e +K = 403dcc5c4d032998732af51d33a32225322210d74ef449d98a10fbcb8ecf4f18 +P = 457a4a549fecb90487b688638d5b4a3d038df63e6e0eb59b817c968a204801 +C = 2ad5dddc9b3e39832e858250af251e14239453b428c6842b8872b80b6e78975314f78b41203bedd1 COUNT = 84 -K = 35b1b4350769ac726ea217b038cafd0c6d46d438fb228b034439b24e4915802c -P = 428ea8530a91971c1e2d5a4f -C = 128e6cfa22345091ecbe290040de839517ec6e65433c43f4 +K = 96ce1a1dc47e7d9eddac30a001f9b640a2ece4f6e40bdf5c8726e213b8ec94a0 +P = b7e05756923195fb07eff81e631f1608bcd9fb314f1f1b83f4476db56d4a47 +C = a9629df4d997f56077a50e69cd39d31580c8a7983a2318ee7e4ac0a82ceb0ac348c8f091e41b4bf8 COUNT = 85 -K = b42f5866e69f98b1c45bf4fd5cd461f8f6d63e796cc0f682bfe50369a954a7ce -P = 2e88681a3a80875013e96e79 -C = 4a06532ba87fffcde86e7a6128eebc306d625f92efdda45f +K = 13a43403166461fad885853c8d260d8da68ff79ec148eba104bcc1870e8436a1 +P = 23919549a3845a6fd2469280f19b2e5611672bf08e29097c78b31c53fe5cad +C = 2409291299b46893b1db49fe26c0f176e0819021d4ca54ecd9e1ea450d843359171e895c39469b1a COUNT = 86 -K = 17bd5231a0426a7be8d8348e0bd254913775ac20e26ab31bb2e3eea47b63a9bb -P = 709a81acaa566b8160fbae2f -C = 0c4c4fc89562e2b4d78d676dc6c0d7e5a502df3bf91c66f4 +K = 12db9514a1c13b348e61e364beee22bfc20923fefcd1b234c2aa00265a71491b +P = f3d9277b5d2928d76b5e7439b14dc410b8842d95e90107cfdfcc651f72d625 +C = 238a0abc39fad70c6c4794fbd08197a1df1824ddca4a83503e56289c6cc74a4c0b12a0c9ee4d7d05 COUNT = 87 -K = b83b9248411e43959221fe0d829b9efba05d439c1ea7e3caa322bd8e3173d4ff -P = 94e1e17bdb7eea55ad5712f8 -C = 77a0d0371af5c33f352d7ad116a25fceafb9ae9074ca6adb +K = 796b5fcf659d7686a03e00980f7ad3c293d410fe9f5ee19e69246647a4ca5732 +P = 2e41f73a7b35b50834c39b4f5f967c50a0c9d6a3d6948470025cdd523f652b +C = 73b5ccc3050ea4bf4c717c432cf69914fd5f63c7b4c53b265efbcf30bca6901ac2ba5770070654c4 COUNT = 88 -K = d5d4a0885af7eda6369105573442fef9d439f9a116fe900eda5e6e14e60a3da7 -P = f8b98079671d1f64c15075ca -C = 782c8d59e91d2b899ef4b12e7b9be5704b7b7d8f224f7a25 +K = d5ce1d13e039baea0431f6361ae71ed561c7007009fadae4c77417958e7e2d83 +P = e0679f45d5c19669adbbc54cd0c514b7ab5e3abe2a528b538860c54830fe27 +C = ec9863d0d402225fbd7f3be475a5c461e687cb7d12261c55f935ddf43e27e56fb9ac54f6498868ee COUNT = 89 -K = 516d037f1923c417d2cdc2d063fbfec7b925102bdaa6702db31f6efc5344a07e -P = b5d870fd91a5dc5a8ee3834e -C = 29e2049147bc6765c505bff16d2f7f5e8754c1a1aa7d8ff6 +K = 7b4cae45e081e58e49a213ba604d1c50e646172cac2b6467a1d04adb366aaae3 +P = 44559cad9e59c2e5edcda8d0bed7481fbb8ba3c67ab82deb7ce060e82b8f65 +C = f8e84f392b5844f646c1b0ccff45408232c47896386fbe0ff13355a9e710c976dbe52c986ba312b1 COUNT = 90 -K = fce4bac78590cbd3ad1b13173f2135cd80c309e43f97b138f77e8ba6f48f7761 -P = aaa139c1cb90cebecfd1262d -C = d0e6e24169fa9216aa4c66b7324e8f31b6410214f44235dd +K = 248eaefc98ddf2774eaa230a0b4f7e8cb4808d0b7148e3479e7ccac7c58cf772 +P = 0e9dd3e7bd1c410445dd4f0dce345d2ba8be08d4f4a319977955c99efefc4a +C = 1c999a863e0fb7ea4ba6d1d548eadac5e75a914f8dcca6d8d994a4031b496a7aea74143551e47867 COUNT = 91 -K = f81e31ceed73762d8b9bb4a5b422c9dff189e49d73f452bd784a579071a2dcf1 -P = e58b7ff33501727435e0d701 -C = 03dd1db4885c91550d4c58cc6fd5e6e9b74db4ce7ec880d8 +K = c21e4b79619f9cb0369433a0fb8f7ada833c255e48328f2e4f89b4798e2d608a +P = f0e76e87f6612e59644a125a94cbc4b99c43f547f190d731d155a22bbcff75 +C = e55643590d69a60d47945b8d7bcc6404bf6c2cf96ba49fdf5e105417c3f0fa1ce80fd9e8d46ce320 COUNT = 92 -K = 5444972311f03b2bee4b5a5125a672496820068dea6c0f63c2c8eec5118f72c8 -P = 3c52679dbad60a1f849b223a -C = 28553c52e801b7c78d0bcfa9b8282f736d2aa7abee0a80f5 +K = 4cd2b06cc730005e9e5edf615d1d2f5449de0e518f058555174f933a70a61206 +P = b59ab6e5dd84cca97aa4f90391b91c25a7e515a0f1a306cd02e0bf11ef69a0 +C = f0d2b52f5121190e3aa39fc630fb72086628dc3ead40f72d62ca1ff59ad6ec31fc3ac3dfc11b2b82 COUNT = 93 -K = 666049decba40c250bc8fee58ac78dba1b769dfd27b0dc229e1b757500180b7c -P = 6c55aba14f2dc580b3984d6c -C = 51f6a644c61c469c2a287e4cda3a279204a454f431d21ae6 +K = 329c7390e64e0b5560b771eafa7eb93ae7ce80d76f994639def2acd6d8d0d56d +P = 79432f4eca456825445057883f8d857a980ec8500f56b410e9b12bc98a54b8 +C = f9eae93a4b2912eb8251f4b77340c35d02e9a4e421e1ae5d41904bf0aa0db056079861e14083cdb6 COUNT = 94 -K = e1e645f62d461b60c0fcd3d9fd8568fe1a9b3337f339424c2ddd4bde13549333 -P = 67dfe07c38ee9f212e5117b0 -C = 9e31ef50711dd62e45c1abdbfd1eee0cb0021d28e1a7d754 +K = 9cfe7016660fc087c36261868f930b63aca852b304d753eec036f5e07e83d7df +P = ac9741cf94e3e84a3db17dd594a5c3797f8f6a984e37a073561b70faa8bb58 +C = cbfbe254a6732af94423eafff58349733b94e3a4586b69e1206295c5a42e4de6f92711c317e2bc7a COUNT = 95 -K = 6826845b7d718da696cc2acef145c4da3a81586710fdea181937abc0c34e7243 -P = 1a215173b463698ab4d1a0d5 -C = 7b0b94fd69327299a28919e1bb2971198fb1988a4cc80762 +K = 739e8e6b8c47dad62332d6d985fbc65b6253f79de1a1c59f4e24dc1405784f3a +P = b5546da6a3d025a90f47d353b0520dc11c444041c70e1237bd9eff6c815e81 +C = dfc8780cf35bf4e4277a3537d5e4e0190f2ac138cb1da30732ac9aa91e66fc403d3b6d86debdff6c COUNT = 96 -K = 401dbe7e2839f8c83da47359e7e1c379e6eafbed320f18b9e47bcaecfdae7948 -P = 00429ca44fccb4323bf56d64 -C = ae9d7fc4c9fc407adad5c81d8bae2ee8d04d582d6ab03a93 +K = fa9812dee42463e7ba38970ac255e176ec5c29803c91e2606f315e02da0d4df4 +P = 660ae2965ba6ae2bd33dc85d12cd2a726eed14ac3b3b18ef41db1c961e33ba +C = 27c59ffdf759596bbcdce364d544e3a7b521a0080ede1db3c19c92759c385ad7bfe5fffdd4c73a4c COUNT = 97 -K = a9a4e0b66c85f9376b22ac859ff823b46d9ffad72e17e74953512543703c0da9 -P = af64e59e9dddbd7dc858efc4 -C = 895a562ad3f3542e1fbe402590d37410228be221250fb269 +K = 1a391df6b36e0100ab8d03cd83625096eb48496ff46881b0bf8c1ad35c0a7a57 +P = 52a64d24495f2352335f6ba6b747cd2c15dff4e32f1ede26462f27847a8bb5 +C = 6bb5acf6346f87f8cbee0dd6079070af2e2a7350ae9142fa4cdf1444710f1cd5e63bce6da9bd396f COUNT = 98 -K = 4a2ba7593a80e649d222d921376c443a0e9084ec0c29e0788b2518d93f75fdbc -P = 08c45b43c9096369395729aa -C = b14ec72afc0a7e810ea983c14e0a2fa03dbc5b6efb6a78d0 +K = 07aa941ae9d7b8e57bca0ad724bbda80f0b2b4b8e711cd7a897831ddfe302f53 +P = 35520cef11f10f3870efc3930f50b68a9e855495e78fb6ad4f863db8cf1ac7 +C = 73cfe5b4b618de41821706a7d36c387525d977def5dc2487603d7c0e98ae6cd53bd054cb5046257a COUNT = 99 -K = 0a14c6e0ba7340c4328114a04c6f8dce98c1ace06690bb3ee336d3db8e7f8488 -P = 7f1e23bcfe215dfddd53067a -C = c2cd321a7ecb98c5e7bad1453011af156ac21c2fec44d9a8 +K = 89c5fc9012866c0f10954318a409506f29251a054e983b3d46ba9940c23136c5 +P = 6d2ad9be8216598d25e4f5fd5faf65e1c118571aea060d21b9ded312d5e1ea +C = 426c1765eb8897f86bab4ae4f6a03ceb63939214d271052e8f54e4fda3da8df5fc12530570a13b7b -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = e3f48030c5d82484950b78e94bd2a7fd4a78dc354c8c329c933f34162a58cb1c -P = d7acd7223cb79c616433e26313b3507a0c47e9c0e9ebe2197f4f18863c70019b195d5084c565d609968bcf1ec94900e1d718fe67d785808b971067102d31bb1d88ee09edaa5b6405afef16f4b66b28e2df064ee95037110eab1ed2c151192c01677d140202 -C = 6c5c8bb53215760819ed3aed9abbd68544f6a952e403849188eb46dd022609761a0d05b1d32a342eb71c38f043163c2fcc8c821b093352f887684c2d7998b7993dddad7800f956ae87aeec01b68e8149f0d3d58271adf2c13460ef892c20072d478736a371c72870156401a4fefefed9 +K = 20f31cded60b8ed8d9d3fd1e1fa6244e76c7cb7628bfd28a5d63ce8aa2c9494d +P = f07225202842c8dede42215301e44b9bb7e625d3812f74f9b6ddbcd024ebd1f33e2cbf280b9004941f3cbf86c880a2357f88f92a6dcf8dad9da7dddcd00f3635efdff0af4382024e93c2af66b991e565eacca6b886f07178c9b4adad6f0d6ada5ff6aa7cd0712519a947a8089cea5e1e3e40ffe1806010b0149f9ffc7c4dd3c31b3d08d5ae1997c52369393d58611dff9bec501c1ab35e6ed3e7f9445a34e211010a8236686f154e0a5ae3433d6a844eb3884961aa6592216d93952b46bb58a4195aa80966ad0ccd4a7e23823912556a90d5ee9c3bb952ecbb9d895dabd3b11ab4f2e3a6c2582de50403289230ef4dc46e7c0d870a3f0cba9d643a0349503c1b162ddb6350e699589eb47bd563999f55a1adb6b78b52f006901b0427ea7d3394bb0adae4637b4f1ad5d5425e2c8ff3083506d7ad7ba4c7405a778b0a3a11760c96900a5256956cc9710091d073a19f46a985d004651fe2b6448ed761bf9bc81619cf273a6783d868d090753bf01318be21afd88d9f3a961a69f93e9d9fb822c80acc7b48cf14a08b5b7ef15c66975721b7cde9761a145b679155472a44dea8fedc0f86ae7ebf6283ecfde5f2444b51569e6723a7a19e28cdf8dec6791ccc14af95abad018f741575b343cb1a20a2a9adf4248f99728069a1e2e78ad8966c41c9918fb7019ef56c153a183a6247d22d9956564bb03075cbfd1b43d96818b28484 +C = a5b63618fc0c4512960f00a1f226d9837a90480baea75265453b9553b12a58c72153080842d7f8710f317f88fbbbf97caf879ab4bf416ba767ee9aeb34357f4a2d0e8b9571054d98e28804a70bc4d74807f2bfd95ee955bfdbb6f4d6969a0c3c3b541a514647d5cd8c9740ac3496095c3f145c50c97ec98b935158fbdf89705d5330015e48ece89188b8c1bcb2ad6825d865b375a9b9056b743dac720feeac033c9f757f6fe73dd7c4a747661b64cf490a0dd43b547cd791a5d78dac97efcd355f7ebac248fa2a33e4fad640dc34e0d40b0d36588aa32f0864c9446739a6b44ff84666d723bd7d646c5172cda932fec34ddaaba342b02a9604087ef042a2be4774194b5d32cb3fb112438fbf2801050b5424635fa2d3d3fb10332965c73e6669e65195310a3a30602640e9809179cdfc50de585aa1c0072423c626815d281a06eac3b6ffa137716318e288e3f9970e415ef0451bdc557968febf9eb6772c1f77cb8e95701246d9c567048142bb25e340351b87d7391822d9ee7fe51378bc0d08135f9f39cf44b348b87937939dc61f430dfe308cada632722e23aed5a0699e039cf0563ab8025163744b136a13ce3c62c748c89f5e17540f105e7c6ec9ba13515b504342f9e6dc7d65b9a633d8c0b5c9fa858dbb9b3a594406d478a81bb9abfa289730408c1e303c663a61d5caca00f615065312580042862397b9aa8c80ca812887664c439c8c68 COUNT = 1 -K = c21d1ac5e5a19385b38ef105656c1319642ea8583bbe438443c43f0ce0ccb141 -P = 76cf8111bbf4db9fe39f346b77aa13c2db9c935a8bdeeb1419c19a6deb2349f909d5291e4abb36c277b52310eb3c69d3efdbff9ec733bd53118cadc316a551a1ad4e59a528b3effe1f7973db882689bf623d7e32fb9f6b9f3c0bbb31d53c0a97b52f3a7edb -C = 43c74d60c3316fe14a38df5d94e213179331b8929585d03c99f4c42d325ef270837e25dde374c90f93d04f4a6566d5f9036be31055f1247fb906212060ee581d977c1d1f1851f53b74898a905da2cac209df4c5688b036420176eccb9d9344ed6523d2a0ae909c50f730ebdd8cd142c5 +K = 85c8aa6d9c83cbcb11550c95cb9fa991d49dc89fbe2531e10694269f38e9a309 +P = 58ffd9e73b5f64cb951b7df799a505d842ef0cca6d4b21027680793565a67d47db0bc872a7640691216c044fbfc0be1cd33ffe9fc73c5ad8cf38bcfe6d4b7b76639ef4200ced0eff2d361e9c948075f09398fbe5ef24d370a5a16b515c102d415813cbce56f6a8f7b5227db7aab33c4d8162ac3c178e2344f3c7e123f0e60142112b960137c0176c450248167e9714db8566e2d4af731a7ef3f88730a4be4cb99bf46eba39527ff279be67aee1f4af25b3396aef5883fe7086fed7285af5216c7945d9bd61d907a84095d6fad383a7a90ad4061f7241a84358cf9fbc7048c010c7652bf47f9ff58f1c0cfd62a5fef92b02074ecbf4762af71eeda9aeb8497d7b33beeb4fdbd80b72f2c6dc9a12409cf7ee3716fc07515970411ed7e113b7ad9865d822a502976bba1d2ef254dda4acdf6f55a04c4ac5f6a5e011375af4cfd405d1220a10465a4cd01d160d179fc7ce614ef4023d55dad363e3639f1eb8fec716f21d267ca21b0587186d162b4a3cd23f80e33ca330a8c3bd756e70c2d457306cd54be9e0433bd9416efd861ed42fcde10ccc98389652b5c14cff6c73341320c93ee457f9e3f320c5c5564fe50eeecf2d7a62a85639ddac4abdad7495e8926111b18f7866e6b3f95c788d9124ab9788210b1e25524427e86049726200052404d9b3585477bfc11f12c4fa761ed86b7449a5471ce18f964acee913946c0997980f +C = d4112af26f37a7e2e9cdc0fd460cf4cf4f3985fc820348e63a095751ce30b2fa5d6e89a8d37b8ddd3dc2af8fa64e0db729f526bab89562ad7f2bbb9ba02668033ebf6eb742904f37fbf1d87b4d23b1dfc815529a6e3f24bb31ba1d4354820a47e0d7b0acb4e495a50912824715d24cdeab0be3597dc535326ee073eb39b925c7699115dfdffd4162b84afc61048c7802a76ddafec243b91791a26138f202bf365a0b0863555d48c953c50cce5e09fede4a97571d3ebf0582c57c39680714750fd2227a632274adece8a4bd13413825b51969b3e965ad417c96415f4041d8f0d0a3df04cbb24fcfbeb95b401be7ea840da43606cd5bd56bfde26034fe94aadc78bedfaa4eed77e64cdc3d059e3765ff6346e9344f0e0a183085d78711b13d4ddc356a669693d2ad090bb67e8013403c51c81951f8a6241269d3423a739b44215bfa403f8927fc1d100587d602a7efc505f28edfe51ae8df407361fa06c09d06c7e960cb7b7041f3603faa6b4767a8a3c3d1c8ab05f75143a3061396c7289503ec29237eea7a364eedb77f66da308fe8e194c9b1784364072dbcc8aa1145db1a03f3862c38cc1a08b569f8576623915a644700ab43f7eff7e59684eea5595c31b13778824704b4aaa9c1b5d2acc4a6cd2ae21c5b0b32bc1433d536e8bd7a4e6c5e6d1ceb70dcd2ac215bd4619aa1ea8c184033b3279cc9fd094336c5e6f5112bd9f36fbebf304ab04f COUNT = 2 -K = db68ac7c9f7ba745b9c0104149578a0b266e6e962b8ddccc5086d31ed8215616 -P = 0d5b039fb6f84ada3c91254288624e4ee6062a45285cbba87979b04acf5319685c54ff45c4db6f52e2649464a66cbfc49073ef5f9cfa9a56ac24a0d2de6297a9e81f2dba94f72e8b8f03beec34b2c1acf2dad8d4bce7247129eb1a2243a27b25d058ecfeb7 -C = fed2e8ac50457fb2bb230bdd6411e903d75595a92a90f201a95e8b84002a9f4e1163065dd0bcf12d239a15d70ae48d23adfa5b5da6326330b89dc3edc401fbec66ffbeec9f3ff7be9a1d5a1c39769a20be6665a8268a9c005497c9aa37fa69643ffecdcb9ed0d2f2a7d0888fb9fb8077 +K = 5309c5dff8fb03b007c28bda0a219d329080120b430f4b5af9df60ebbe20890c +P = 22b75fa402aa5b665aa71db0e24e76a6796329fea9128dffbbe03764e23d32443cadfbb6d557e833f841ecf5cc7c9200de81b2c58fc72a1a9451ce51c75abde6504b7868d1864a5824d6ef5dbd57c80e488a011102f7a321639fa57c40a5eb8479cbbc7428bb5497dd6295e270b53b00eaff17c2aac199a637e2baabce9c3f5af8d8c4698eea5390d7bdaa92ddf8190361a2452df2f44220b92519449605069661e0360cfef6841b734c8bdac87feeac243693a4e114995e1985d5c93e512d0f2fa27f12db8803e0aafd974d968cfb82cd9f0d4b09f34a440cff85e09a63462fe9820d5f1ba6bc6a489f30ed570e44c06668b6a4d3b977a6b7fdff3e781f0b2c7a1361108eb95f569c3ac5dfb1352cfe0965d9bea70f923d9f65cccfa83a9272947b3563f81c92f7f5caff203137b034af82847de0653bfee01aea476c9112267f97507b6949dd1d0d7510fa280432159a0b3bd67a8e628ef11599be4459238161914520b556fd5d91e92349169bd2ec175a9e728ca78b56eb2bacd56fd2af2696d1b116f5776e9df459c1023180a18f5d6e3718ac402bb0fdb806cd7b1cda6fc107e635f6a756005df79b720f3f274deffb31552cf238ec93182370d0ebe9f0b819e2e7225bc2b77e702d5df2825fe5d42005f1e39d67414ea539810db552049641ca22bd6539f1efefcb90dd479bf93080cb9df86a9aa99048f950297b8343 +C = c6a64b49464f5db516dd39f3d1dbc444528b5da57016b5f2a5649965a4781962264dee68d4c78e987f9446cdc815aabeff2590d3e2679a2583dbfd3aa6b8bd3bcd86d66d598daa6e766a6ab8fc6fe98a1bc89b5a137a342a59dfb52c7e7b2feb2a33d5f936503121476a9eee8d5c60b6c4c9aa7f8c56ddee5b4a9d7908890d3aa98f45cce20a074896aacefb6d7520e84b6675d02b819f37929746298d2c81407c20328a1ff4ee6da8298fd639fa9bba4ba27da5e19520434e27ae4bef59b73c3660aba0353701573d602d8135442a14cea4dbca3732a3fc8e5ac831929ad48ca30d4ee0f068f54faafb50bc7c6a784e81cf86b29225200f985af914ea6ed166e08c04e6324a372550603c98bb6c010ea7219699e76e4cdd9c4b8e6c9200d10c51e93a57f25b0019ae436dde220868596e96ebea3086089ece51b93a812c8120b8ba60435720ed690a2d1ff7c024cd514cf73bc7cb121a83222e4fba2dca65aaafd8cb51ac096511f83327458c53119f2462caf6cde5ae679fafd4f96756aa496ae6657ce417b2963c09463ab810ef51b4942dd1ecd120d69ae76f8928f3bcf20465f68e526beb7cef276533270f08136c4088182dcd626ffb2c3c4a357d09affb6b935e671bc827779ec6f260acf2c01f1faad57b162fb50579ed45909be1cb2a4a4dd07effcae6a2342022e0bad504261bb8d5d3b73eea932b0135fbb76fd6b8f8d3b6435db6d3 COUNT = 3 -K = 6eb59cea75e8c9719a20e2d56f805030f1e49fdfba24cb63f6c8a8406209c90d -P = a2c9aeffbd150cd33496a57744d4bec3ea18023160112968356cee682ccd4557998693062bd501bb71c02d9d666cb8df148cb5899408d50f88152d5c0363a366764b2a8b8ab04f487b8705cf2ba8e3172ec280c227fe06c166fb61a8b781c0862a56263dfb -C = 1dda31af906f93c0256bd16ed7d4cd694486d9671a8777593e707e15d2135819ce16152bb9b21f1037a75f103bdb35a1201e6715be95b08e88700319f118829624595999683a7b97640d2fd11016d125b5a412d9653a1f20ae30e12a6eb62da3b7380f452fde714c3785e2a61a4dd6d8 +K = 8027a28b92435ac111a67ba0f4af5cdd50e6bbf965cb9077189143440db0327d +P = 0d8f70b229ad687ab5f55f0b0ade81a4bcff76dba57aef40abb8074b9745ad74efcc8d8f2202b92a9788f8049c864e5973403279dd02e165b772ed7444795ebfdafd8e13a9a22ac1103d0c15d8d279c617dafff98dbdb9bcbea923a00967287ea9accdfcc90b2b4047021115d5454d057cf3a27a44988a8fa71578ab7751a5d3bbabd1a335248564f5e334c3925119a29c219aff6e71b3963f603b0f6e8213219fa56a36e33066f49409c643dfa1ab7478630d623c7b77efe07b0ad4811a522ed81a1c905831689747efb4edab65062cea3724c3f9decad27290c4ca0ee9c68f1ad9ce3981a0b712acbe2de17eefb7f9bfb3efd66aae691e63e5d64233715eae8957bce7924fe2f259309ddfe050cfca3cf76c52f96f8b7608cc833bb3876f35e37f6a83ac0a21f0c0fe859133c17c5f7422c72741137b8c3b5c3ed3e7737d5d8a29c063f1490558982496b7c852ec95bc452113c48bba93394dc1df0eee1f8dadd38715e93a1d7065c528f08525cd84583e250327320405bcf18d8011e3d864978f948b2839bb6d1d7bcef4b5b6871243a5c93a2afc1f7fc7d06c8307a025ebb522cf0fa1e1e9f8163f20854514504f4f873d757faa7938bb1ef91000df4ea64bb985d903136fcb9c4e9467561cd564f61146ac519c08dfa41f22b773cc821cd1252a3ba237c1e8c1c128ba40e0b75e67adf12cc448e47fb4037850b014f9c3 +C = c1e82d374a1d7c07b1f061656fd58b5df0a04c099f3390e98d2cd460b2e2713eb7274b9f646fc453a5d26c3fc0b9203521de72dc78292cf4d61095febeb0748658dc6764fdee4fa498b93a6bc053b3d81e10564cc9681aff2296ae0864fe3db495298ac4174f6ce06ae6b5bf86985c4603700757ef44c82c0e03beb7f2841df2dc4dd8022d5dc7ea2f711daacc1c8d1805798f646f1041146891e88edc4db9904f122c74656a5ea1694f8e6073920481e6cd30b20fac4cad7e03f58183f6b0beff8dde3ab4f781a1dc36ce0905e41e77be65c83dc9b6ab69d5d4c15a1de3cae6b081ea9568578207d678df77e20196483c2e00d2dba604784495949285a623f33e07e20687aadb86d57adb9935865e6467801a10add2ac7dfb6f8ba98e7635d6766eed38ca8fa8101f93018261b872a2a899065918b672423288cdaa417560701600424da6db15e0ebb7a5d1d0a7e1cc8aca714ac6bde51f779033563b49dcaeb8e0330112902b5ff0ebbdd00aa371c902092566244bd9a1e5e978af39adbe13a7067d056d04b718133575e420058529a42ec032cc5fa62035e872cec7acb3c32eb8b02e0cdd81c59afdba65b673c828b980756e8ff6b0160a1e796e221ed40c342863848b76e4390ef730abd3edc73ba975c037e6ba5e58162d7a60cd55b61643e9a8d4f6e5efa2485da7c45991ec4e8d4c6d9432e630e703ad1fc2f644d7577248ef7c7c974ce7 COUNT = 4 -K = e4d6f042d282e4dd918162711bbeb3c9ec33ccfd63e90c33b764de25f6b25cde -P = c31240708b2e5bc7935ace462ca8fbea1c9bde2958a0a60c47bea02ce84669f5f105eb8d47dc1a7327684e595ebc08b3cc4b44d5a633078e6997ed6fa8065dab9d0cb09d684243c4839ab422c018f61ff83478047e13965f22ac9af29df292503f13cfb325 -C = e3bdc32489a2ad6e82ff8a5ff4afbc4f40b50334a98fbd909bb5d30ae07100d5670bf0847ff30e57bf2a3284c5de1de57fc124b734c1881c5b3fea01f67b3646957d14f5d099a50cd0521ed087d2234d3c3c62d628b86fe534ee74987f061d2a9760e906b2e668d8cd9befcfc529edad +K = 1a5b5f43929215da78d1d8c8fd4ba4508a66273be95c85a892da606eed04d6da +P = bd762d13e2385d333e435ecd792b8b3f13936d3b8372466fa7f65aa537bbd0bca184ec570acdb99ce59633bace041fb1374961be99276ff1d4b82cd49d78b89585aaa6cb1bf18498f4d01f2fc5e41e2b4fa56cedf5fe69e39eb1bed303d0795a715bb7eece6b389b3ae81b23b4f053137d54c03c2bdc68c79184fcca1758652c61a5e3c19d49b3af1a8946403b254da0f9ef227d2be6d0c528e1a7b78a55a2e79d79d6e420e9a3e8b40bb3ee74935be7c8e935414209be01532c991a871b90de0b35e963989475fbcfc37d81cbac674b1b29da1d0f9e78a6c3ef55575a8d3d7637b93895bae528d85130d059415d7c456a5c8d94897e567d6d6748e7c2689c98331ee5a7e1e25909901ace55828737e7464cb670399af3f806b996f416550d256f354dcdd1c332b4ca9eaef70114a7bc171efa08b88f1afd0429b2cf15366105cb812596a05e22b06debe1c69b06d904fe6cce284531ebefbae44b9c9eb156dedd01a4a73a1e631fcabc349e07636741580a916b35560d02e1cbbbea0a335b395487df8f972cf8600b48237e7b63bad5f08c85b85043eac0ca93d34df56cc486857d6eb3de0c332ee1ded06927e8acdaa3fce78636eb06c0f805788189c56023c8a1f5a2427c6f0f8b993f517a9b4a3bc3fa9c3e6318256dc49941c1e92973e3ae4814b87135c9ee767348045ef7877027c8ec441c50b1cab98bf556352333aa +C = bed34ebd1c70d52665103651110f847d83e19a551f5156c9720e2d1b038ed5d5ac0be8cd97ad3d725a8fa3c127939cbe1a6946558015bda4c7fffff7e00662c4b0ae3d5477bf61e175f8e4ca14cf53ccc558b8fb5f371748329b6cfbfb277cd0828a2394ec99f943775b4a2c1c285127a2d4677ba3b918154908badde2a74b58f73ac8f92b440214a3cc990f1517372b2e53272db9bb191cc7711ea31ffba2de2b646e8e312f4eedbe9e51e182603cf075ff69bc4d845410bf66d20215c160df05ab007b49a5396bf69d702d193aa0e2a2f9d62b7f9fb46cdf11864314101c7b7072f5ba8262c32b12b14225edba48b440501163d027e7fcf2292c9b06ce19dd0eabc6b6639769544d71bf068b8e03c4834c4a785a6b2b927c077f839f29da61c6c52c39ef4354839eff993068b67438266e10e9a421a90a103835829320fb1ad9e7e0cf73bdd22aa268436f4df0d973c401f8bb20f55585954079b6de5a2707ab5ce3b9f42af09b7c1996a45a15af12d041f5fe0c055b969a9055f7656cc2806745e84836903804799ffcc15580f8a50362f4dab9694e8ebf6f32cacbc3ba3501959ffbf33db0d231722715705e685df9202f0466c3ac0f1361a71905e23b0aa9fcac76b01d6402598861084477338b5d0463a641e2576f76aab2de95016cb31d37d8f4617e3908a179b43e3d50c516bff1e388bfc0ca519430f85a0de5b0e274cd0bd021f20c34 COUNT = 5 -K = 7b99c7d062d60404e8043659e3e4b02cfb9f2d215b8b78e716ec6071a12dac5f -P = f3d69a77a344e76b6512b20867e1fa70529ab1131b95be3ab6afa5063faa0e3c38d26d4b6e5f072010f9f9d91e5ada7cccacd3b0c3e65261e4ef5b35ee9e7363539510640ea5a65fa0071f6955b2de6ac9ef26fcc742aa9bd9125f486162120b904e91e4e5 -C = d8cbcfbe1bfca6d93eef4eab982de86f1fc8d89f39e785509fafa7d2af6b46023f14a27f52562418e17adeac10e0671b006d3b5b6351f5018b3ae65b98e2d684cc65f8c6d381ff62ded862da2943ad35985cdd09514a64eefc6285f4b52b802b6784c8b02bc84a67c96e6f318d6b6169 +K = 2a919617d24baf991779de6c06e68bbc4894a4e9a702214ba3eabfbd0015a7c0 +P = 8d01e11206e3b9285cfc73c2ad6b238536fefbe824f19588685601bf94e1ee2515c4ac281aa04feef877694840d15f2a6722661159a7216548d768b4754d65f1f1c522daf2baebbf88f638fb324b182e61d315f5f12b04c486022749f6a222d87c7d635c52605c7efc1853cbba466d138d3cda22979e7742e4fc8168f5139a72818109d2124c20ddcecc74fb388f34151e96fd33e8b269a7d7e51b6fc6ebb427219163c3d9f7de4a6831a7f8b596b4b490789f1104fa160115b6e8d191d1db885e42812c01724170e765634fdb8e05555cc7a85c3d8cc7a8e299b4f3708a4a5189871037c0d04216dca8e6127b449ec6004e7f076430d1f870f0d2c0c6812c810b4665f7fc07fbb04b56bd956b81267d2408c31be8dabade28a3c40c609eee3458b7340715272ee26df8d875d1139511649b629df067a8994e1fbcf7ec60f565e8da257db1b7ef3b2b765c77124c8120bf26db8c47f493d2afbbf8b89efe2e33c21c2a2a1141c0aa5b9dc1eeae50714304ff35a7cd34da963f5249bdce8e2c2a3026672bcd2ebf311f446cbfb7171fd35b446f0270320b30b554f96573eac72ea0594306d43c5ed48a6c2d01a363e88646a8759117075596fe17f18c0b36d00b7976098fddeb7abc4e34bf6d6b35238f81b59d169db4578a96c2bcfe78bd583fb31fc2e7fc97c6f3460147a5730bdf31ca197482acc341b7a719c4e1716cde56 +C = eb62ee28d9929093e3c6dbc0592c35dd0ffbe8faa37173195da391b84b1ffb342b9bd9f0df0947c33c7c74a071e7d71312f91c8e1f11d680865563f2d9604dea06892f2adaf2028246b74ecc82686bd7c369426a09f23012b69a89e7e66e7cf008b41dbf04f72cf950fd8f6ed63b3392de53b6feb34e45df3153e4aa6fdd685fcd7e3239f0509f474d8f6a58abfbd36bf14f93fecf913b2f9a0f0763c39cb6828651434ef0520cee88f46daef7932e5ce1549774ec106c2aba54cff64067e0202167f5a3ba1cd6396bda08023d2cfa9100043b44b8d90e2862d7d2a7f6e3f5eb6976dac2d5dbd2adeb69858ca391fdd4a582d3cb79a2d9fb57ad5b2cbd157b1e36ed49fb848e9960b0dd1c715b701f1d379027999fe8e35769e27a9ef60a45aeee56c7a3ebb39f6c50796d1236e721cd0e5d931e6a85f28fd87d652c3e5b706e2e97c12c4b33fc7df4585d60d0326267d8d252ab8970a2528be086d7ad18ee4b1531cc13b9c88cb3a9188a47b8a72cd276eb4d7d726a290398a98be0083e9917f349d2c8137a6fcd2232baedb6edf075d8e938319a12bfc31726b13d0e1a6c18ae33e11ad1f451fb9693f1774aec30fa7b473c98cbaf4dad1b3743d118ce69620503a753b87e4ae25f36564c2538d6650291087ae04d181e4fc44b6804b5bb0c6c8a0aa04a49895ea64d13f7d253e62216736a716258bc98c63349b5b19f5ae9aec3a176f98cb298 COUNT = 6 -K = 9fb4e4df15cb2b8ba0f10f276bd2a5fc7b729910b6cbc9d95a303f79154d98ed -P = 485dcd39ef3e662c8ee94a4c424c393789be4c93e1491107797313eb7a87f9a12cae752fa80cf8e7a8afa0c38b911cc3050037cac6d193d780e54d080229ab72a08685f8997ed9e6c19eec231ecc3f861571adf83afcab74e718f2676e157ecc3a603fd6f8 -C = 2b2e7c0320f53377941c1fc18cb342bc103dfd3e136bd578430e1a2efd89d5ddc5f0151e18082a9980277875bdf8c5a34e3cd6719c679562b20d8bceb7f01fa87f7ad5d17daffa4351d5aed2ffb0b008b44623d8a319f187987873a6ec09d88341ecce87215c3a1ad97a3aae29164fe9 +K = 88b408166abb30705f5db761e90c5c148bfd890eae3988db1b18f69788d8e1af +P = 21f692d3f3bfa304d95348d43f700ac9a96256cf90cf296b8391afc22cc926b31b714c712233511a5637ec821086c29df5f95f0937afbdadd9d5e5f11360e43b023815272639f7c378f73fb380f00e9c27abccda2aff28b030f4c1f507b84adfe60989d2d31bf079f20872cee698b5b138ce1ca3a4863add1b860fcf4d01676576afdaa0056cb7d02c0892883333d75d4d7598b4bb240a09d539f8b55ce1994ea9fb80ecd0aa70dd6b311e1bd94a0871de161691df345eca9e4ba1917cee220bce1c6ed5cf779f6dd561e77d23bad229944f6f503ddaea0eafd731135e3b808e2ecc4293de0d721e1c633c30191b4ecc82bd369f50767352b407faf3d0af06bc84cecaf0bbfd18407545edbf7d4490dad8551188831ddf9559817836fae1147632c7db6c6ce26d11b2715caa9d6973598d27a5311e255f93da84fd7592a730bd30d38fcbc40499753b0f943e27be4639c3a1691dd12577318b4af5ed9327dab1a12e6feb0441312347faca104aec4b76f9dd2e4db865f02e716acb04014028e3099595f0f74b8edbf78e0629d811d1506fba1ffcaed1b630de32198bf9dad7bb6489e308680c0d866ad83a10e2f1c44e2f85bf2a511a8d18c4175d65ce4b5d92101bb8b4b2a36271c48cf8ede2f3c323f7d8f4946b97c81856cee66a0882bb1525057c4952325146b12d53b3966ab9916aee32a41505e0fb329c826216ce8b7e +C = 639881eeba132454751e61fc67af657f676ba412c64c915df7c6576c1ebedaea1f22e11f91bee665f39ceb0466338105a81eebe55aa63f3278062f0513efe1820b2a0549ce12a2d356f73a6b2ecfe342d3d069633b2f6e898231c88f454159c007db05e028ee3c2d83074c251fa1129d708a1ea46328031ebd07c2bf6455eb599ba15ec469745ef861a5a7861318be6e30235ee9dff78b40170103f7fd0d835edf45fcf5a17b6a70195412204c0492a373ea522e659d59a4bed8829c617af1629bbc7d1fadf0bb32df0ca100b062cda9ce3e97ceae1db58a45a022e6efbb5396a8c00fb63b9a11008463e913aaaa37e2ce0115ae0307e16afd14f1b50cfe3d8951667fe1797ba44bb322fa6b40a7ca1b7b7ae43125849ee8f245bc761312a5cd0cdc27ded8e01fcf6859ed504540a5c51566c24e9ee74ffdc92eff618e1a04d67b924508b57656b19881a951aa4ed2086cf84bdbae13a534a59003d3061e93b7596fc46b89f5423a942479775ff851d3dcad1c5d0f052f65287b90aec810eae0c22d250e1a6e674547458e76b2e3bec22b6c2da4dd45f5e6cb453823e7cdef912f55b415bba8eb52580ef5e056d97237c13c448687aea7067d8ba6db3b1f9892177c63e979cd4925aaf28d555a66492f6e02ac8c56560d0df6b284cd4b0972e8a0b71ee7004c59ee167dd17845ba75bae63300305038b908bfd83e01b8cd4d7acc6d36b8e567f29e COUNT = 7 -K = b5afcfebb864537536216f134d01385ec72e1e5305a41b6d414dcf83b652b3f5 -P = 1f32ca7a6dfddbfb98772f88fbafca8712bd978d9ed016804150960cee79693139fc2e109152a1e523429f7089d65a5407fc4bd5e16db1ea075e74a60a8eadcb8aea8f968617d798ff31174269f82075e249ff444eaff6798a9ee58d7c25b17b7f5fd14a06 -C = 8984bf336d153a0224f7f5d346fe742ab8d94624243711c96f192099c04f30e0e7a6a8815249b0ec0bd191e926f9f4412cf3b391462fe8ead704403c037f637dfb19507eb5e4d54209f7745a7507f78018c9dd3178d81c5e80617741e9cdf6ad25ed31beb21920cac20a07843daf8008 +K = 107b91045c183db110a1c6c21aa59c91df560b71ae65151b85397d7e58640335 +P = edda95936e189ad9d4ef699b2de38b59e442faca458404b99f621333d44fa4b4d04f6663ce25eee01f7ffeebe0c21bf83703192b5cecc76a382da503ff9c8c8ba65fd1823b5b23541a2f5570b05520bf8156d61fed33224ea0dc8bb336224eeb0ddb0074168a17d3f5fc5552e0ba163a7206ce842c06496d5b9bed050543102c5beb8bbaf4daa932a454a6b6c7cab19c6eacb196116d96570723f32f8f698364cd2d8ac0525464dba7030c9d7959f3ab1e4244c1867ced87adae4a10c07abe930c47df67925dae293afe44829040f145dd4da9b5fba9d0938a579e0bc0d19381619d7a00704ddd612887b0f8b2568ef7bf6855010096e3c119aa8e4a81afb701192605facae9fd00d2b1b04b2973680e6259f0f027415963847da5b9ecb0f4bd181a6f455af94638b6306a3da9b7b7424c392fc3ef226bce21cee199547ab9b440f452f7be306ac806ea9669ca4b5dddc4caa215918ffe40900ac0945f08e0a955c4810add7b150db41eed3729e4f386dc6ab2d88259bfcc68193079f1e5bbfd13eec69fea5cb658fddf518b4ff0f587d54260989dba61908a6876e98ae4d3ffae9a2398794de711f5f3b91a3ec2266a4f8f586a3e24c3509eb64970c66a76959b7c2bef529b01f641b1040c81b02130071aec360f77f309acdbe83555e1fc3be7e657de10b41e2332e73705bad6f73a6a57642f525e8f916fe575034f280513 +C = 702d6d8092a01036555686542013208f5987e4a0a84b76018e6350759daf403632cc9c71edfba1cab9ba20b4700b682acd47f5e4f9ec987653cdde1e6f668b064268d7d8a69c72dcc3087fe12606c34952aba287c24dc2fc2380b55b5c0ef5ab498f19250853eebc5a7b81a466c615e9f0b2de6ccf68216dfc6d21784525fe136fee9d286ab0ab66c11fd621ee618e9d1de9f764545960ed834c4fe80f69eab7ec06ffad888856e18be27b043090078a27f874625c5fd12a2cad20cd74cef97a904c19b6b8d2d4967cf8505a92ea0c8ad751f4313aabe1b4e1acbc6244c3675df417dcb1b6034ab8f806fc19c4c27c041882e5135e2cdd4fe566958656c50e06f6dc19944a9b6e3f38d67160a2b366f8c2ac2fed6795bc438a2b4522ecba60d4f065f2a16e6be8b16e397b8bd4681e37d11e9350d653d5d6eeae6be9fe57a80c85faf4f03bec5ec9baefe851cfaf8da90fed21237132f5b8d9b275b8322170a35a0f582bf651582d4c94b5b54cf451571ffb3239711563f536e0a0e2fe40f23135d2d619ccd516f2c646670b30ff1f9c81972835ecac0cedb945115148c832edd3b52c054be76058e7ce9c80dfc2dddb5316cac7b8c8e57cbc22ab88a6dc99711a1d93761f930d8648269fd84c81c647713ad71da080e5e7bd90491dc36df2b3eed85ce8fff599f1bdd08745ca7164c442f10e328ed647747f1be8fa1ef59dab77453aa68d4cc7fe COUNT = 8 -K = 03a1007c9b418e2789e73d954c9bc82f14b42f12a8828fb48a5205104045bfb4 -P = 0757417e2f23f030f4ad386c6aa06df8e67546d21e6c1df01c65d86c46dcf6c8f6160fb099de7dd85add6f8378e79b770b4ce3be6242c2555f22eb42e2e0694be50ff7c281206a6b4f9412a9f11b59148c4e5e45cc137826e98a0f9da536c86615add142d1 -C = 6c1de2c4ff1c80b53463e9ef358316aaac5dc498fc3e2c4fcaa8aaad7fdf57a65d723a41f994e0d0ece58c649cc9fe3c2295e670c48694888d3c4b40811a7c20460d609f5351404e52ed28d7e26ee1ce18562b4c6488566dd584bb53d9689cf043e49c94726eb9c4d6830d9206c4abd8 +K = 762ad1485511d0616d997602ce5f8dbc15a9630651505a1bcccaad833b3e160a +P = 0051ea3b767c5f35c40b0bf3a1069fb9d46d82ff8fc5b558edee2c15027c39224f4ade799bb4807a09abaab587ed88ccaba5cab0392241e77ddbdded5fda8968baa1a74e660dcfd19ac35f82e7a511713fa5b19035a97561bb7f1cfc1cc2795afc578ffa95ea6fd92981914d59459cd8debe90b93099511ace75088182d7904ac3e48379a342e87ac2d31c401705db6109b9706aeabaccb0adf2edc636d948246f1b5f8f5df0f6a311538a2fc5e282805fd4353cdb9476b7df4a94d0abe983558ec33c73cc16f32db47affcfa487f5c0f41cd808069b78dc00292d427f8acc71a2d6bfcd0e4257c26dee52cddcd18c8dad4bffa422f011309fc97dd7b21fb0f3c370158c12ca10c84f77c783d00fbd6d06baab2f38870a3a9d7119baf21183a70554d43e3c40b77cb73a1dbf0ce04300b056be6a9e9485e2d70398d52b4677b73d5468caf1a44decca118706f7b93e6a86eada42e88b5cee5795439d7b432ec77b59111ecdd205dbd7b2bcf743e51c75545c1f1b49eccdb699f650c7e453a4ee12007d1fe1adfb73fdeb3b0031d5227ac4f8a9f4524ef7eb024ddb5d19f56b4cc54917773de7c75a6f513d5f1783f3deab2cd709c55ad9658ef4fd4483cb0e0267b4d7c2d6732cbb77a453ca3778aef60bb118298482c5583fd31ec6ab71ca5cc6396bf3ba1ffd8cb98dfd7817da2bf87b58cc3ff40054cea9cfb3a349616479 +C = 7914e7d7dd13fe6142b685d2ebf4a12ffa03cf2c5271b2eb42766f01e97615f879d4eeb8757d5cb5e1379ff6e6440e4f8cc2b1ed42ceacd0018a7eb8fea65684db65dc58eec3452c43b4f13d121835d964968ecf1492ff047d98897a6fd116edf6d6def0d9fc346f0d1060754f142b681347e8df262b367a8ba04b5ea5317c8f420b2e67bd68ac0aa00c86d546bfcb2ec82c5c08b597a4c47ca7160334f64fc5919b5f9742f0602db17de0c641a2b76ea25fa5101e07607ba418633d819c8bca2450387d477bb6d8a449d56952099a8e08d66142504215d22b9019836d175f3ff9c70f3afa952fb2266fedca121aed3ab57d8d36e655820bd9aa9c701638a97b17b51a020469cbabe52a7adb32592609c4bd2ecd91ab4f9490fc8954e96c6a6482e683ec2961a9713fb693cf33eeb8c0a807690787770fa9acd7c5781ac27968d9d0767230b58c00e4b8f3b1a184a8780766321a756a48014eeafd203317b7b4dae868f2cae9fb777a373dfdce6a1f603adb0655318307a0404e4ec4b32d762ac809a112e7885d76aad19495ff6602b181d74c3bbdb9becb01ef389cbe9cd6a711eaf7bfbb38c1bf8911ea9ac133feb4d199b0fb881ebbbe741338a5518a731af84a42f57de6cd83fe51838693ba89453c70d4909c3b6ada1ba944361f8eb12511af7b53c11221089bc0ce343727f6efa1059fbe2194cc73dd82791bd8d425f569f92ae96e7c13cf COUNT = 9 -K = dcdf1b220235f8b12690ca54397313932075bb54223af9b365d0947ffad30711 -P = c90db851c74ff561ba9d9ffcfa00eb48d302a0b65d72a3842c047c33dca7898ba86073648e71b9694fa195d3c402d80e45da654b152ecd47a4cc1403a5cb9ad9b5d7fb8441792c29a946721a7d6eb20ccf995c237731e1a4b55bad115cf80182bfb1285c1d -C = a1bc6d34afea5dba6ed57f0feb9a70f4c507895d6e216e552d6dbabb91191378abacfd231d9369f235f4352d24f6041e4f82c73e4e59e73ab083561dffc25ce6a92646eee0128d37e26b047b2b0f95ce3bc42d53c5b39c16c65e01f7dd62320714df005bd233c5d4ae138edfb635d57c +K = 07a8fedd906452264ae4e501e997c0014afa4346bd2308453e013d8e8263d896 +P = 6dd5464bbbdac7fb157d331d7947fb76a29ef71a3062fb4cd25ad4771f4a69125bc6cc0b86e3bde9d8b690e450b586a34788bc7c6e6009bb3f35618e2e6e6c06e33c52ba0eafe3c2c0737801076b034a9e55b22ac3757aa93075c4ae771c35b9b46af4842dbb39e99604c96bba02a16c67b778f29a50261f93a5e4131fb8ce644d76571c7332a40e729a04bce63a295ab306806f255a430b7c56fb5eb7473d94b7784654541b3db8bd38628299c25f0a48ad399550be22615b74b5b00a879d7706a4a367ddaf61c66bf9f61b109382208f9436afd7ac26310d13651d4504fd2b374c44f61e36aad80aac02845fba137a136d2d5504301d9957cdb1c564d5a83fd7632b92b286b1b25ec7d5d61939a890aca8d6416b19f5b3c1ddaf1ad26b484bbd0e17a13db0e2498d7ea79c142755338c6da6ac7cd07b197d657981546182be88acb210cb0198f7a9fad2f4db51ec473c0d6b6301e403c0fbee9ba5e8db319d78167c7b9ccf86062d54cff470fcc4a0e7738bbef789d21d4999ff7c3d0fb8606ecc61e5e6eaef3dc52fe942089d5415df0ffc7458ae78a4291466e160361349219b124bbe5e0fa30f27d41d36ebd11b06ff9c4fa35eebe1259a8fb5c5e90b2073c9ad95c7e5b01dbe0f3aa6391d42cb374ac8f3941b8630142e25a8ae44247a4c6c4010eeda8ff4ed56e0c259f03162671086dae4a0db20032a18c27691b3dd +C = cfae4ff29e2d3cd66fca147e36f88cc2ed4f861e2b99f502b61c218000723012113d9f3cab82059c2b29bfec5d4d310743f111446aced7f9ed9cefca6fe00062a8487df5c853d843c7a0fa9683ca513d5b319cb428604031070d0d28cf2e5bd23202a17a3868b05c2557f85001a60350784a9d3439691bd177f8a774df316a552810d39c438fb285b8450b0338b86017f3c46ac7bf5825448daca15314381e57c5ab4067e1f93e116cd54921765ead144aea66a96dbe5d11cf7e286d0024a979edc04df82ef1033a7b4a1db36e0c67776fa59b3950e26105ba65ea5730d0a1004fbc0c0d12c692ebb93101078680ce1ff7826de9a6543c2141724a8e349fbb7d22911e2ede1e101fa66ce1be779aaffd2c7f6679150ce7b91565fa67f8892ee68144fc07c84b654c5762ad883690be92634a21515b9dfdf6ceb8ae0ba48744e3b051b4aaccc20e20a37d2f4e45a48487b6a4e265cd9e29438b0731bde5ef6b213e3bf405bb6779aebd2815bfcf0ec574da36820e1b9e87f03f514e8ef47251fba3a9f8749e168456333a51e555c98daaef094d8fd000ea584ddea616521cd23a6f73a508f54dadf10592c9596fb260bd390023dd3efbb1713fb02e345511027017204ce7073a6bb48a56a2273ec4699916c3503e9e539c274d12e39bedc6acbdcf81483064faebc21ce83fb0f30595f52972301d315580ec057341d590c8c226f463a8784d90e115 COUNT = 10 -K = 477b25914390add548a7758957705b44382949fd9d5a9078659714ab0f3cce8b -P = ee1708f93a1e10ee8a675a1a29f2d656503e387b5d540ae575941e32f4dbcb61cfaf3fe1513f58fbc33879cb9d1b87a315779017c32418b4e926fd68507bc33a67358d132a523251bfaa4e0bf41e2c2252239468bc7a2359112ee306e33249ec94dcc8b42c -C = 60a4dd1818c9edfdd328767bf5fd267edf876dc7f68fdba5eb41dc6bff894846c1b08fec25ab04df37b22eb93267b2d91994aa0bf34f4036726cdb530fbd8d6bc962d4b6bdcaa2eee4c276f95f55a3e0f7b8bc3f8d8dc204f777b1e59d13bc05ea610ff414779f0386235a009bc8f31a +K = de1740735e67745f58f84c61689153bb1aabfbad6b7ae6ae32236e19bbb038f2 +P = fdec6da0f41b7ab2acf9a4f30128c518e6f45d5e730bcadac475e866d3f6f587234e5345ea8eea3f4677983616b2b10f4be3e423f52317cd0853face615c7524065468fc34f31ff25198ead35ca97cebefad5f96377acd534b917898843737eca44f02e34a47d2de251c59462cf56bc0ba13e26bac6dcc048199769ccd95d670709f65d4b844abe1e722eec513688c91e97e51e6331bdceca26619cb7fb18a70b61b7d354f67a8998c24f3777013897dbe988bdbe7750ceef6f4ccc67469396f1214f24bbdfa5e4f87e5765a581072e38a8ee60361f08746b237b9643d5a07ac3812d9873a4ad4328a067e9feb0e258255de3669740ad60a4a409af2eb0e7ceeb65b8abd768e991a97d14690ccdaf63b7a856c8a1ee13d73efb7ba5e0a7b6969751b5b0e3d88101af530fbb638c853c614377c21187d1f2bdb06f206b1692e86f9d87a3868a37d39fe588c0ecf5556a2202bd7d9646d7fec92c872bcab6c5b669d97e43463ebdea4d64619f397a723571e682131b05fa952701cb0524760e284cfef3663cef6002741967ed0daefe41b69539c9c01409d8f41f7aa2c69ab9cfc3c0352e7091c9f9e7bac738922d3beb077c54b0f6b919beb8d5a4ee3f03ad38a064a03daeb1ab73ff865584be9e72d6dfef7991945aab9b3504321ddd8e81870b0a49f6b13f859da23f3103ba08c52f576e996907f2705aba47677b46814c63d +C = ace591362eb9bdcb81f7086b9466964b194946d41bc3f4460622b96c72778d149afad246853777d7a6c1cd4f7d7c169acf0d10065e86f3633d230120f1d4797324ca02c89fca46177ce14ab07d8772153eb7686d03e3ea3248f44d3d37d4802853e0350ce9d45ef5b6b989e93696732b660b6f4ffc529361669a52890e96727374d5dacb0e1d4058f158333d8c54830b53949075471468bb133893873e17a1e2ff78de3af9a265c08187edef35c12d10e7f2171822e88fb276607700ed9ad0348b7fe902e20b45b0a3d30fa73df94caf385b064f0f1d86e93267488e5c9b7d7293dc74220832c40ceeac5b53f08cf322b102e3f0d56bb00379c9177bdf815f4fcdd5795d73620166f939ec1cdb6337b2038cd32bac6ce5b140051394db16128f22381e52a6ad8f8523a1c698905da1bc6f5abf65dcde6b1053d8a0a662f6cc280023fab457b9c8ddd0ac114428dc4cbff09d2b1ecc2819e790c66223ef3aa211c2aca5fcd84f7f422d3791805c0ec7d71374994ae964bf79e8c7198abe26d8bf83acb9e64ae78a6238460010b15ebfc645d02437d154508ed3e63bf3a5d5e0f4398970b8c5daab29d6c2f93d242c7625d8ff5a2b0e24c7568517f623e80f63e2e743979afa023a5bb92c738b426377382dbd6d057d209c0f83b0a85f5a4091f28d6120a4a78836540335b451ad46d467250a40b1e962eddf547302ec15f83b5a741e9a8f8ddd6267 COUNT = 11 -K = 54bcd2bd81685fd3e7b2ca941a9c7d710915aee5df3a8c3babfb3e2692f495d9 -P = fb37b9f80b2828ca20bc8b94d7b99b262a60f4e7dc693faba5b31b202b45a3c3f3428bc787a671770400bc9dd6a497e0aabb40594427ed4e2016ba22f04ed0e0e54e3e4d9a3d00baf72c6e8b37d524163cd370fe7520e19fe97aae1c8a79fc7f86aae902c7 -C = d9a711f5ba8b4116c853fef0a7d69770dfaa74ee10027d0e0c2be87d7cd77f4db1c01faeba5af13967bde3d0f666084f6e118167d862ac95072db1cd84cca06dcc08bdf789ed509338d5678c1b72db00664027ea19c72d4c0c293b7c52b54c2da3e482fbb6bc81109bb466a77f53709b +K = dfb46e229f05093d2e7721c0d12db297aa5d64f22e2fd57c5e6cd439ccdde08c +P = b6957f91426a4e0da7aa747fada8cd3a59b4fe8772a951cde806c87d30ee14937905fc73f43123c18302813eeba4db2b12a157029f3493c010bf358deaa7a3e5fd930c4cfd173d0fa0c22f1d49f61c7f0d57ec3bd37e10703c4d403bdc316bbb411cf0831266d17d842b2679e42d172f75f411da4482924f9471b4e022e9c49886c4693f77df41a219ad76083a59b01cadb841dab10004ee0cf261d5a59dd8f1627c97a0b1cc40e740518b2701ffc0c6b5bccd5c1fb0026babec4299b2bd90b61991d370543790fd8acd24fd13dc01ce4055bccd48d12635b5ee1e24d59410e6b1e6b7f3610fde1f7fe278d61532b95bae094ebb0ef817ef5fd9e6f20fe4e4d7df729a61f64081ef67008ab06253b92e6210c4bb85fc14c733b79cac5ec7d1cd2910696196fdc6db638eb7d5b2e430e76b71459f5a77db597c2c8c0e4d2a78182f19c99f8dab0adccf7ed1d8c2f01da62e3555647a965912acc629253b9bc23c267c2522de8f53e6f0f1621dc8c4aaf27ef791912e576f427d14facc276065ec322912a77836d769536b76a5cc5c181a8502d575a5e88e6a7cce0bda19525c5f29a567b0cae9ecb739f9d2bc6853c37ba9442dbc07a7eb9ddd64d8a0971033553b1df5a6229141380d6e0469d21553001d1a26fe700e8da46ff87f385a54e70cf568f4de6910aee615f2cdc534d8f50468960b54db2860ac55340a93895ee6b9 +C = ebbcad3098c6ddfe459e60bcb4f962a905a4504ab07b6fd603399e64fbee284b6bf347eec2406d38daaa2732c0ad708bb83cc9e4e6c1a9c1e5f07b7110721fd40f6efda2033cfe574e6a620b2775366c3cc6c7aac30d5c877978359f04eeea008e4af57d93b677ed977f45b2c70875850c5092c14ce9f50359930f9da1b0f34c4c567f7bdd82ecf7f76c42001c0ed82587e687b38ec2ba2673fc56f903ef186bfdbe0f72880cf24a7dce08c70b5a5cf3a1b7cab84a3ff9abd352cffc49bfc3bef879961e69ee5561746b1cba58666604c42e6bb3b81cea5256fa743904273b9f353c5ffe091a29b219c8103bf732e28c378e1aeb9cfe49688c946e3e03a76ca2a626efcb18b5cf6b3f2411c5bc7d19780d3673d494ffaf232349bd386ba130e3af673f31ceb7d6f7451dad39249790cab89ca950a39b23dc4a8e66ad7de4d23563eb396a28c4dd7f132c246a2b6cb9f12dc88309bfbff543a9eba4f7ce18b8858bd9d619402b5d7247cd4fab8bff2c4a2d5ea01ebcb6a5aa309e89934bab87c0cadeaa99845bfcabd2390da648e5461509ada704a5807fa816c2b9d4214a76d955d5cfeef8fb263a7bd559d83c360e3f306e9e0c55c731420b32b9ac7e783a21d5ddd1ca815871955ec7a94513f5a04945d17d9314ce93e4e07974cffed2f98ecd965a52322aa99799bcb977e41c631958b383025626aea25226cdefb8b1cd4dc8b007008a318e98 COUNT = 12 -K = 56c4ab5c729c37f90ee31c6b18fb9d7bd94b16cc9f0f826264dc0f847b6f0660 -P = 964af7e866ea80a03bc64d524c9db88321533053e7ddc10feea8a9945d6f931e946a6f449699bccb546bf89deda398ed8717839406e623561461c03620151e05065b897c714f9bb6077cc65dcde68e4242377e42edd80d9d0db8dd274b425bcc1f9d55dad3 -C = 8aa7df2e59503b65ca7ae881a957e929c4dfce7c22acb2d8cbe376aa877e3c351d864a4c5a1e558ff1ef533bc5e76f8c87413e5c537e6d8aee5665372ce1160f595216d82faa75190af3cc2493d65b4d67cc49a39486be692b2c7188c509f9366006785074995943d0a58187c8d93b3e +K = 9bffce58b709e238493601b5e21186ca6e4ecb84c81a41d1043470d17dd506d3 +P = 33eeedac142a8a6a5165ae51dc07ffeeeba94df8e866693fd498efc5898dcc75780413df1ee22eed52b1401f0865670743f32dff80c130ffce6e7beb15d7c259ee38eb8f15c5c62de355273cf4e5c40c334a7b143cb2ae6e96d30c9f9a10104d308a534d264f85eb4cdc61f31ce285a38f0a5e40e9613a5a1c6bdabe79ed2cfd4908d696a4baaf971bb9e0e9d883ba675e4924e462c071ab5966feb189089ccdde494751b3a5eb343251f236875fc1bbd025d8f86b0f2bba5f93c533b007effa5c0e6c2a8799aca8c2719da8de670aa3c8335f5ad602f5dfd64766ce03671e48691530014ac378f3526f0078500c6b607117633ec11d68cc59a506b305ba0cec8198b7d30808cf378e1c07fc3280083721d8638096d681a52e63766b5e243dff3756e2b94cffa5e9f1f52339c037885092e347967135840676e45904da9297e1ddfe0c890eb7557add056dbb09959710925b4e9be9fc36e0582a89c20c9d8a9deb7878b7f5878d6fc1901af9622b0bf916073adb69007ee5ad055bc10f84d40736cbe27bd08b68d243f7400bdf49569a8ec959f5b5a8f1ec72e69f45a75c6e78112a94fd62b486fefd9a677517e6c6a30704eed6136dda02f9720d3234543871e6c91f5640fb8a0ea327c061f276a0d8f7042e120845495e055c91b196215a388df7992d32dd2708f64154cbd6a72da6e991cc9bed35fed2dda41ea556ea5bf8 +C = 9a52a1d2bb731cc26dc10f6ab7ca0f02e7eab13662b209a5967fa80a24b282aa0891e781323d539456885749b3f91467e8ee6303cf8f5abf01eafbe0e51eb610dca6737208e4a68e6110b85e3cc039829952e9b0c63415e85b04292e277400a09c5dcc80805449d01e296507364b789e97fdf912672cb24db1ca3a15fe7b282b43f495bcc4b5e9a7766b715cf21341b922fb7b886e2f49af849cc962a3441d850de4c9a634cce0448d819fa3aaa22a528e76ea206d30bed17b03cb34b0c6153ee95f8f7bf3519d6703d589ce24562c27a3710b0da94941c79a5d6075af032e624bcb9fbbd1e2128f0f1c53f505df748cc1db838da5c8a69c644bcd9ffe96ed5e1fdccb8050bcb5a53e20d23c3fc53fd982bc5d994d0e3b2f4f801b6d9a080e602c3f9aeb6feb04554721165b2a2ac2e5d9c2b0e37cff728b4000670ae4f42d18ae4d0f03db2526d59b8e970cf353e88a3fb8eb691e05fb334b308b242c53167b8603b1618dac84225c3e96bdc727e67b7793f0b42396a865e28de84be47f49cede6d817f85ea60489045b799adf3b9040cb55d3c5e530a22068835331b257e58ed85d06b62c8e28e3e45ee8d0aa1a11fad2722bff72adb2139480ddc7dfd4651e48913e8e1e0d475cc46210303ffae805b7b19cff41ec516ede0e3f310143ebf9e923e72d73420853755f1af459cc8034694887362dbce99c9ae8d5ecb6ced214e0d4507332807f8 COUNT = 13 -K = 7f8cde370e96bedc9f61eb830a3fc0a7210ee668053c1cde0e9e85832e250156 -P = 2a1da1e1c19db52e64ba396b291053e4f718e31c29e9d55209e47d680e31b53a41faba0ebbfa7c77625c7e1a97ee3b173b6729ee10b77e7093ce82b46131951eef60c7ac058b0aa01bc5d7f88d21df56d19514fd1d330bf9110c94c9636fb48b75e4084371 -C = 80ec6b69b6cd9818d2dbfecb82a4e0a4b26b790e8f786aabd2d8406a4a1ddaf5b46a50b43580849082b8cf4e89f33e629eddbace099cfa32cb08edd18351c3db66fa97d2b215282fa87e5e07da4b021e46c2a78d3af80c329542f40c26071adf14fb193928e066bb12a522bc48188a4b +K = cefb16d3f2055a8886bd562010d913c552e6276526abca0f2a8db343efb1cbd0 +P = d914083e2666a01bf751ed36261215680dac2da0c12f327eeeaf808e23d46d69f9f30f4f55333bc92e51e7bc02ba78ae0977dd35a173e53d7164bf38427ce691ee100af22d8196868e16552009a3782890747777593ea3a6e2287ac5bb580ea1e0e0302e5249fb534f2cd76f9d15e916628ecd191a207ab31d7c46527334da043125e9726089f01da2fdf2bb225c9cf7f69dd6ad39443f35db9170207e3074797686ec4b9df159460f8f04d15f75f8db6c95dc0abeddb3ae00d9ec9e8694b09357111055f7d8833c06d1c20ea0ab17e88c10da0d251ee8a3ac48ccec25facf1e6dd28e14436fe115fb5d1c86ea5e60b2ecd4eb4c5ff4455d66559b3fe2724c3f20775c4b25be894ae7e0f7c6adeac94e8503de3eaa0fceea713b3ac0e5a618f246d29438480abc127a7cd018572b5a3137b50790b6eb6dbdae9f205178a44e12d055036c158b30efd89a2933bbb301c1c17b4963e31cb75b45c78a2bc9999212dd04311a8251ee63e7fce459d5a9ed0a67032bb866b05947a1dbd7983efc0c1497100a6ec37d4c8c0425f0d190592020ae05d69e9da50a5f64b2b199b10c55541422dcf4dba476185a573e5c7d09adf6b18109c1d65c1b04986a538437181675cc8ca5adde1d3f711631ce381fb66373eb59218277f54c1ad3a459b99815bce910aa895d4761f5870729afcfd1c3e2c694c1a2e62fef7a2f65f518a830b124ac +C = baa6c2a5e8871b0333748126424aa5b55fb2417e1e36dc1d072f50e00ae5f94b6f57f06835a8c5a01466786955c5042e607baada53f73e0614d43002cf4caee961dce4270c119593ad4b6e25c64eaf916d4c396d5c8a2849c121b60aba8886913b32de030695cf318681d3c2c12ac3d0ffbe268ed7b7bc48e5a0f09d8d670ae648635467e42e01c05d7c6c29bd71a9ecdb1293049d1394ea77cf05109e73c368d8234c0f1ce9964f4bfebbd31b164c4f9703091162d5f5f3951a022b91085813bab13a0cb667b986f01b0941b1a7be9cb19d852e0a6a217881e20e1a01d99426463842816096361cfaf766ed2375eb2e34417ed0ef77d6bb7291335acab1a4e163c248c18efd5ea739c2efc5d386b973a561511c451cb510c096c5ad937764859b92df0168cd0a10360b5f83fe8fdbfd0d990ec3b8dff86edde293cc1011d97614468cb50a150e0a99189d1e11468fc19be01c4551f19e1d3572ec25319b656468497c2c84cdaa5836838433a5bad3fe2d604b9fc057aa22a569c24f129fde510554efd83be675b420f669142af7c67c076a5a33a77f03e49cb180e5c4198dd18712a65c5b965876346fbd16f86eac3ae3ae29db35bcf5005f063f22536263d3cca10ae3203e0517efcd903b5b67a5f57c470b6c5d6618f4a8c5fcacb6b31d2e19aee2e74e4d0d730c7a77151d0fd834d3cad74bb0b60c2e7ecac60d67adbc159eb6cc72aebbd25f COUNT = 14 -K = 94809a19600d74c20694bc21cf53b035675a43d647f821352c2a402f25dba85f -P = 33a9014e95b5945b5c2e67a5225fdd538021f18c3c87a7419a076cefcc0c80c89ca1269a8b9924884653b7f50ffbada2d226fa187e2986d5b9d1e05b8a963f2c75b99ac63bbf1b2c1e64e4860cb50d50481147e1ee606967358f278d42af4de76c8cb2a1a1 -C = ab8d4a605aeaa1e74d1c20d49841d139b5736a9514eadbbda7df3d157e642d66bd7636867e53a4f3d305ddb6fa1c10f8e5f820a9df42c8a51bde0db1e2afaec9f7c1bdc9604e8ed460b57c71518e3309f511525497346295b13d2d44fc09d813353d087c4914064ecde593fd8eb3646e +K = 305b22c83a2d564786e8ba4b25e619c8148e586a0c461624b22880e58ef47d79 +P = c0f3ec83733eea6b8d0c867a76d79b3eef33f083cbb76c8c20649c53e09191113d9f48b32e0f915fe32204aa56d9d3b73c455ee87216371928419bed7ab4f5294d2f48fb25a25b9fa1306f758ffd576c3d51d8490cd16730030fa9d65878460fc15500cca7f9c5dab8e1d47cc281f45097af846bfa0ee1cafa197147f63e52b202f188b86680589e22eeb75f79cd0cac8a6770e54cdc9cf9d2756329cfef98553716de66341a5fba94781f896eecee33a962fa9e02a587148bee2bf9c6d8af60cf485632235f0ba9bb3c4884139c0855424a3e41eafde0daf90c25dae5df04c37e370a300e6292939d1bd9ff7188c0cc57f57b013dc595b2f2f8cb6ccc2dfbde44a72a5576851fd679a9e9ca8ef6ff146c2ccf6f0c1642d235546a6545aa5aeff067091567f3af56d79a39f3c631c3d8e8837c8150c7039af385a517e0887c9e1929ff7fbf72e1a89650f262e3e47db145f66fd23760206de5fefc177ba9a54c917ae883e9169735be927b2706c5a96a4fc6e9943cdf27d592d1ce97a242ef35bfefc160b4ce215688f3859ee28c0f89038f4ed5723ba9b2f8ac57a4ed73acf4b0b4b1911488393485586c6fc588f95054b4d73f357ad9f40dba75690b179b174e4e044da51efc35faf358a3330b01184d3a8f9072c0666703ff98777d87883702a92b6dd22ab77afa17abc059f8c438b2f190e082a222bafd8f7a23a23a3b34 +C = 2c7f7bcd439a786e6339f2abfe822a12d80fc3e3ddfe20895466d54c11f07aba05ba877c49a8235841566618851f33b4af389c1984961d80751232a1ac830537646b5855f1cc1441983347e5b2670a6a7503b227a429bc43564b3f4ea3d4aa8d54f3e8b8c153a54d13cc816bb57378cd98fbbedcabd3aa20a1c8672a514b0029aa13fb97de9ba7d72c8c9b84a293c931beb69cdec75602ce3ecd08a88a552cc786a4acccf952a0e2c7c7bea467380bc33160cf277a50f545325399904ea5fafdb0ef9a0c6754d606a4a9f9d12825ff4af611c75f604016649028525667931c7a4d0659fc6dc0dc2168ee66019e5d5f1aadace03feada3447c66977b092c811cf6acc34a0b722bb36debe6018eee6b71878bcd90bc0d96a42b28d7acd6eb65d4cd24e2a846a1a03656f8eb95c88c888c4e1a4a97b7d875ae795b99ba5f5ae6209df7e782f379edef27e8574f74ffc872a538f9ab79b55232bfe0a0907fe439dc214b889c1cc5a36a9cbe8147e4347952d19dc054bad0492d8f19cc8a5feb0965d3c99cb2c6c2445e8d99b53f04bdf3505e07e9c3085f94e995ad538d484f5c588a33691448c3a8eacf81d35c245c57f0e8d45d3f4452fb3676e636deb81ce4391c75f47ce9dfff9af9c46ef89be6df92a0facd0dc04110ab0e33f930831dacfb966ad6f58c79d738f843c5c73876991b9139d0def0ff30ca835a17979f6ab599d47330c3bfb6e7a33 COUNT = 15 -K = 5bc50c52f8035eaa9093a1d0092d495f60f40c4e072aef13ad567ec4d89ad7e9 -P = 94c1ca28692bcdc1bb1b5806a3ce05f15a70e24422f38794eec3a5fa615458bd4faf6c1ee7bf32588a80cc04bdc2ec98d828dba9461e4235c7abe802a316c6893cb97f06d751421e068770c1205592c273204dadc8af8eba7bdc41c74fcb5ae96ba8b91020 -C = d34f4ddd2ff77723e202a41233c812073654af965f12d49257c25efc4b24eca0b960ceb6b5d586ef84f71d927f76f52c6b00356bbabe8f06336602365843ece8b79236f64916cc96fc52274fccdd33bd5fd1f5481f6529df496c53f9bba83a4399425f4afee8211bea3d251b21208091 +K = 5a89968961b7124bf9529fd98303f3150e9d47071d5eddfc48183605a8be63c4 +P = c98c4d33dd0efd795a53d64dfd341cc9d2764a747155ef6b13faa91745c9a6d5ee433097496e9dca087fa76c25a59816c56f18d6170274ee16ed090332ecc4920a176bc3b392655e1bad39a23bd3800379d16fc2d041ed2ce6b74c20c46aefdd0936d48a9ed05952d0db247939ad542b317a5d7a0cf806d1d0f28a362f9bae52f9b26dc57e21944c642b736d742afc062531948d125afa4a511fbcf494ccca3b65d0680e69f7fc5edcc5a25d716f975dc9e076383d934f6f7e65350bfbea5759fd90b8308daa987f5e785bc45ad9f3c47779a3a8812cdf1afd51b609b4580256b9280c1a016bbc1fe362088430361d51a3d5a49fef06d9fde91eed516bd39291d2584ec0e2befeba7992539247165edb51628881d1717b0c63417e27e7baa5f8bb807158be64c99fb4cceb027ee3e41e4f2dadace6948c4ca7be512d3885d1156f83dcaebb0d412082efaf79b7a66fa40c4a6fbae1e357ea775b9e388a26550f1efbacb3f8f7cdaaf877f469a6f978699cb8bdf3387cd5662553449c2cd272e1ee99289eb6a2e960e333653bd69be5753b67f3265afb9f0b7877463ea59bfa6f7261b5d488d9b4da1698b3d3cce675282bd2a1a941bcc3f0c3c950724875c42623a5a44a64270011aa2e34574ad6aadd473745fecae414d1c787b6432b51d167f15d07e76b24fcee90b54f24eeb7aaf7fd130467c0eb9a58e03c702a25b2b33f +C = bdbc2fe3c60824d5ab6eec32eab324d9dd59a875fe68d8984eaacc1a9fc0339b07406f3b736ae3b5b38f07cc8376014bc3cca0e836903dec1ed5497bf0abb713d463705f2738a9a330f6d0cfd670bb8447090cb143b730df80df9071583d926cf27dd719c3dd11041311f632986f50270fefc071bf22d5abc996a3d0454aceadf3da937398b831d682fd8544382c05442d5328e6f69de26e2823034ebc7ec3095d6f6ef1319e4e5db83ad19d28d9172cb1add3acc783e062848637f69d295acb607455afa22b150f0dc451b56fc91669802d25b45e2508787afef0afb1cb743eda17ac64556c0298d4df562718c2063a43fe0f9d90d073214ab3ccc4db9ddfb7318878770d155045da3abefbb8b601cefd96dbb13a64f5dd0f5aee2d076484063eaaa4f32aa7d7d74d55c7997d93ae929f9f062436460c7b7121c5a592a51a20bae2e6957140b5dbb3d62bad38553b4cf7f8b09f205314e34486695bed74e24fb631f0ea0186951a8e481d5141797f3a3a8d05524c4af7079b958758e69ebdf9ee28ee5a4f1482d7ff1360881edd75e1dc38914b970702b11d7ae295dfa279cb36fd820631fe5556a1b5a01ff4e2d4bee93c4e6918adc426a23171456d2813ecc17909c9a61bff3e65a171580c79b0bbf1fe8c0fd2240b57244a4796d1c06b07d41f40b352ba80099dd5752059d012b887bb4eaedc5bb58931a00eb2993fa707704e776454a74948 COUNT = 16 -K = c3b331f930a55fccd82aa1e8630aa98ef31cd12f26c5a8e2b68e3c23e7a09f3e -P = 6ddbf69dcd05776d6a096bcb09cc75703436e3f9ef4e96d8543ef6f5327f57386b6bb02cedbba1124a3aadadf6542341c8a92eb76566aa21a9c72b534d53bcf2a82589ce913c88ccf6b2e37bf80c9e68d8460e7a2f9f006e9eca44f84306ed1901f9923b10 -C = f3472e3747ad3ed076c9f011fd289a02068447e11159a9429ee5ced002861893c4dba6545e59efd5b4ac6e6917ec8f628a3baca0cff9319887a6e8514d7f4483ffb36ee76105747b6ecbfd8d816fadb31ed92be1348e730ffb625645b737ac34096e61cf2b6db1c6f02861db4f932243 +K = 9eae7b8fff54be8522014a73bef883ffaa10263cdbae4c65c215c1d06f132ffa +P = c9fdd31ec5a883cc344d6774bc8cf74d046640c1167d318fbb1f392ae1b69e4a753345d59be50f1f8a346b098ad5ae5b12a931ecfb6550139e96e38655321bc40827f0186e0f90d7f1acab9dea5344a6b669b27801b2d27905357a978414ea1d0a6ebff7ae8ca33cabaadfb318b0d6ab20b9303ab479f8c64daf7df0d38c548d259e2b338152d03f7df60457c6372473cf634d09ddbe32f7c140bff218529fc5d85228220d1fbd479d390e4cb590be4eaf2921df264320434452795e205faed25eae7ffebb3ba0a7d7952ac636a370b567b9804600d05e1ecc4d4c66950a494fa6287b589a56fce7f7c11ec328e5e2567c27332d8e350b70ff8b5911b80684248bf6a0ac40218f912bc29104cdd3a5054c571d6193b941976aad0f0e8fd232c6afd2f5c7348aa3d48ebe0e3847c803158874454c52cabb2e1d3cff98581eaef5172ce6b634e95a0f5c21fa37230451c1af934ab73f9486a331dc2d1e498f8f6f48b786ca5ca1233fda1a3af57f34a8b85546e0c0c73c02de6a77c71e9fddca36664272506794c6c06328226eccf858d1ccefc0443fc1ac27f925e026c71014770b4121f12ca10ba961a19a7b0761b9c744c2321955cfe54260f23980bdbc14283439aa3fe68a8c32f5e922029b3fcff55683ccc6a64cf92429bcbef7d34895849099ed88715bfe63c3cc2f030a314a669db136dee629cc2edbe42b8ba6878d7f +C = e9738463b50b886d0d8a91706e08affbcc998187dbc7a7f30ff274b5844b38c69946b2989c3b746b1bf1e9edaed28aaabce1b0dc1773cd5a1eea7f0e086f81b71f01961acd6332aa196518596f875538b7f21ca1755ead6d4d8d211805748fc5e90b173c7e748513b93509f645ffb8ac80fc3dec7dc342429d22d32eafcaca3b5079a0f959cdfb62d68994d2f5a749e1b1018149c0004b9538f924e94dc42431f2807817892ee48b7fd91c1824333ed6d06156f13e8e8120d0f5c044bbf18d0106959d26d36a5b783b116a705863ec600e726f138df1338b5d44484622a4e82755a35e75e317e19887d6d3598fc04d085c7717c34b9a622c741e27c36d0aec74699e1f421b90d345344f4745cfa4dd466710a56964cf6c6056a865eb3eba26173d54dabeb94e83fb5bc0db0307be2c471ae5259537406c2ffb6ee48c44d593d973fde91b116ca5460590b3fed7f46dee2e920d201dc30f9a58610cad1095bfb96cb75d8d6dc2e86db7815ae201c453ab21fe5160c70442bcb2e9ecc17d010403d10659cb0213c2f11bd812f86b04673900d14688faea14e9779825e8586e7d4030bb545bdd7e852d3437e4e1326ea766971e70ac20983b2c4096972df766b3c02ea118c89ed0aea588385ca799cc6b2c0d645eb1c3a401da6321333f9b911b6c5163f25fa90a0e68a44059626c5e4473c655b5e1281c51ec0c9b618e20205dec9229ef4d75791613 COUNT = 17 -K = 2223a97f3ebeb062fd25869778379f9c92ed76233c122194b99ed0f9f67b3eb0 -P = 55b85781fa92ff2ec97f05ed0cc0e7078caf37dc10369fd9d49bba37200bf58dd64983d00313f45e8ea94b0626a1db0957c0df89cb65b47b7b8702b7a1abcc6f855c7585f672ae3a92925aab3ece5eae39f7ed22d5115e6192ed987cb431767c181c197d2a -C = 36cdc88202dc93745111e3173331543398b6035bf010a497514a4648c352f4fc098453d925e9c090c013bed77be8d84aaa8a8d8bcf4d05a42cd67b7936c63221eaecd86ac6f04ee3d3811c856a781ae774d3f93ef29d458e57f3238e6451f24a82f81fd651461e866eea2866a9dc50b4 +K = f678669a1b04178e17f346bb086561e90f7ca088ac780bde1e601f73c857a403 +P = e14c243e3d1328c3acd061b278d7269f7a343fa6c50dc9d5c0e55f8c5d8d5eee9cffc7736b635f930cbef5324e76326206b647df8fd8bbfa859a08d0b1b65f9b9bff9525e6bd494b580de73ef0cc65fb9ef3da5a06b41465499641f19a6afea4a737e02ab9e770a156e52fcbd0ac09d19765dfc57930cf111be18a570d438e6ef38c228392ed95a07f36fb65882e6faf0e08f57b8aed021ddbcf5ccaeb519fabbde286906fab1bd86c95c356bed178ec01c06df83330e5ecd71c141d862626bbb30a292f1aedc7fd1065523f6057b099e2f073ea34a4164620cfef92e6df15b01e59d1481ca739b134aadbe46282edd7c75049c7b6d4cd90b043b1e7ae98ea7f58cbc8635a1a84f3dfcdc00b9e5bd88c8d5dcead5fca2c452b663e60110057c6430d46a5b6ffbf851cee396a539753064989384fd0cf01456df5bf765772955c713a194b9e44ba1a86a7740ba87f4779bc547cd6122fa287d3cb262abe6cad0ca6dc147fd903e310a893d5e0d43384ff608075db0795bdac616fda98dbe2aded8622efbe7f741aeecdbd40a9dcff6e06c2cf147bf7660a89d598fed7e54ca13cb68a9d3b61b3be47e94c036201f5b3a0de1aafe869fcd6dbabec338aab445be801d69260d0a7c9d69adbc6fee9d88856b6db8e3c3998b05fc87a85f179f248dbd8a210007e05762fd3460d2bff01dedb1233cd7c60412a69cbdb4f02bd5c1886 +C = 426d4cb6d2a20abcf854e6ccb6e77207f54c5c1735a19f111ab24b45c9aac662f99d71d54666a8d68523f773346ecdc11119c54dedcb04f98820e5c6cf5466ba5f40aff572012433173abb51e1da80fbcb3134ae0461c2633b2c4ab804b84855d5e890c4ba223c437e3a71859657ec52ce4bfdbb15f1f6fdd6099882622745b4497331ca1007d74bf69c8f4dbbf42fae911892968f7c0f4caf25500b62d3f0265dd056f4a400412d0bf2a973a359f77d466878c44d8504316bcc8be66de4ea7b75b534c36892153ab3e03683a07deb97abf84c644a985e4057b349a4e92c18f99db910d1035a1a57386106bf41fe9c22db045a8ee10aa045f27a68e4e87267a7e7cb45f159377f346fb697ec972f616c33f06f059df1efbdff1ad3d3bd67d980b716344dbafba12df160c267e60a13fe7e4d2d6969153bf2e5dc63534fb7fc209c0c7827f47f99469e60b9605f15cd3ae695e85790c3b47f8893eefc1fa6f813ea04669b6d3fbe4e2ab1a7c750e640f8848bb31fafae28a0d428ba8e9be3c8664858415d81f31c8a70fcce305c6173111b707cc1163e208dc8232591278071626b19fd450e259ec424431ceff831f0d8891a3aa4a8bbb96d13a6563f778375a1cb2cc8ff332e73a0641d64d8358953730e8cce334f3bf26bd273cf2d969541fd13cbcecab4387b8161797e2558b62bbbae226d4137760237abbf64f244b171e286317caa3743caf6 COUNT = 18 -K = ab1d45f39f96f61a41ee5a9595fa2ae510379744bb16c42393d63bc0d5e2cac1 -P = 96dd5da6486677fe3224b996e2596faaaffd69197aa0bc342f09adbcc660c6e972ff3485a36697cda79ef0ce62767e266d4b7f95a0417280c83c3451b690b7e557f4c82dc2b6051c062820def5e23d356045a93153411811db8118ac500c1c0a6dfe3d515b -C = d9e6b06153d72d948596ead96f6a08b6515c71e8d9940a6d0d59fd4b52afa96a70e239db0001d0627bb9ee44dad8a13ac7cb1b92e82348c5787772a09c7108052ba58f7b57ccb76aa813ada035ea752b9d10e35db9a0b50071e620934ec79ebcf8fcf0c224ce4879a92313f754ca54c2 +K = aee16d4551f5b0fc21b0b919bfc00b78361919a52e0afea96c08b5eb00dbeaa2 +P = f516c5ecc0c3344872567fa7df757d67f4b9fd6dedf57d302f133b723df9ac62b783e4375ac5a4d2172726f359589260d838d43241bcd2b952d7a7a6b8ac0e1060f31b693756d4dd4e134a934dfb5b87f1fddde90fbce1886367200ec3aeb8de04cbf111cac5e410017117a69dd36fa363d67a1871b521015a1e9ebac17d35df3768ba9d312898bc66fdc8534958c353ffef60a541cb6e5e9152ca043b2181be7bde2560ecde92a5c8b8c7c3471db0eb27d7f731798538eef76e6ecfbbac46e1f7fb36ae812e137f97e587c22b5597d74721eb8b44e46bf57b47bd1cba4a9911491ff856419e81a9a4cf81ea214fa4792d23cbacf152ce68d3e83780121bdaadad17fd1a4f4acb3a39ea5f06fdd0849e7f300858d3e1b3f98afc85a91acb1e04a24d487993e1dccb0bd6c9cdd00a488e933885e78c100142f4085073c13cad9c4de667505b892905db155134d12ee2065e52d30e370d121ec3397953c73f600fbd42703313cea5037c14ddc82c8b3bd47626954f71f40601e112b4a01f1e7eb0755be5ace577d7d69512f721584027a4a60d428fdfe19676ad15d8f0ab4952814135a1f5c132d43ae6adc22a0b14e287f9f247f188c0b207563883e61ef63d85dbdf59c4735fa96f1dc90754ffb93b805299004b48e9af9cac6b0b20dd5b373f8136806a32de634911aea1f3537f3b961b62e97c0b88b5b5a6ca503498b8db74 +C = 4f81a99662cf3d72f16e5b17b990d67f98d3ba97096bfab005e7c0ead8a8e43f7e97633060defee97a616be273a16413da02aa772d66069e2d94b80eaac25949d5a5fa4e0e3c0829e616b6fda7cea03b3dbbb48d98d9ce8d14401b8d1b9be741e74a85c06a8b583908dc6db57b9ae0b676c92467c8698252ea358183da854693270a0cc5f2781088ce5f6b06b27fbf5270c4ccc25dd3600f26de0d823156fae7dd9c72f14f3cf93eb69465218f21b22aa9a768ade6cc7291f2c399ac5456df322e41cb19465a5ddf794daadc9d54b9f04a216e06dd5d10a2e5b05d1dfbf312ecab00b2dacc59de332af24caec1c9f06b25f3f604ee814ae330fbdbd892a5c88436672a57ad01ef3a997fda692fdd5005ef72ba12f9b8523899b5d3793f9395c1d5339e61caafe08046924fe095d3ff404b0b89178f79c5071d6b75d2ae37d9f9b23925a45d7e3dbfd4fd8280886f19d0bc6d5e339f3d024f04bdbe99d39fba8edd1ecde38c27978580600050673b9cbf376069d8a1244e787c4bf790d71deaec4c933730a97b77e16c4664943f646e5140f8a42644718cc10d0c011bb4623132fcd890116913afd8fde734c6f46f4da641c42a2e73702dc99d9a0443f4d83b2335e3c81774bc621d2a67299672231f690001fe094cfa6637f51e69995ba3047136d35a7966124459891eb118a233e0b37e442559a852c5a7a805957295fe7de16e6670c315fc8a18 COUNT = 19 -K = 88661ee763c80ce0cbb93a8df7473ff18750f09e1e54831121bc9bd800ba5f85 -P = 781a7e09c27be87bc58ba9ee396574b476889a7ed85e7c16295d90892d1bfa4c62e33e081460bc4d16d5aa31d7f878ca11231fbb4499597cf1235f2a37036b8031b13a3450e2db832b7c973d0fbd7a683e96bdbaaf0d081062d77d18764154108220066f13 -C = d8db31a73579c7983a797790630d4d6e02c556a7aa92b386d77cecbd240ed8cae2510f38b22239abc15b18f0b649ad63b54240610639bcb2f89eccca9a031b5492077e4d3d9ecdb0ee222bcfe2820f50b36cc84cad9199ce7efa50e5d2c338ab38ccbc1d00b06e31f0d0635398484217 +K = 92af1cffdb7c476ba88e6d779524460f4ff60c74b29f2fcd04bd5c0f0a347a58 +P = 50e34a971e16d23fcd4019b60a0e7d2039ac94bdc1b9fa3e3cd9b62de310bcbb96b802d5f3005b2a020b06005137f7981daf897948c2688755331d3c1595642d3eb2cceaa5c2d15086bc39c2341785c30cc1188208b3800d20ccbb2bd1c5ca455ed90da82f166c456a47202b5a6198308fa42f5f4cb4e083e5217fd79ca9be77d6a759f4ada4c836cd3cb1066019612db8ed620ba6256c4958da168cf53844142e798e90db45874568db23ff855071203ccec6c3715e58859125b606aac900e2437eb88dcbc2632e9c8de8a57bfd79fe6f68d956734382a51090570c9b3ba1742061452324990ca0595485bef22262220191ebb2a5d7256b34914998dd130408b4045b3107270e690b6583be8d2d37fee367283f185230f40af0bff137d4a2dcadab641d21b5b24529c4023ed4c885890f063b6f486b36666322f03b4eae887b726af2665ff13d7afbbbcddf2650eb6eea7fa131a1ab85bf9cf08297445289f0000bde5793411d764b0d8e3584eeeb772dbfda9910c906fc596606f2438c835efe0e80051a4540ca751c49e8793998606eab561b2950dfdce83b23ba83fecf542d410bfce2ce684363f9eeda5730bae3c436449288c43a8a90b36da91671a340765bfa81942131e4a9b00b0805881aabdf430b504b7c4566733cae44b11b0e0adaa08398cdd8c2ae82d90b9c3a6f751423917cdbb5a6f86c4c6a5a5726cde6a6 +C = cb4381058751c4844cda81e7978138bfb61155c268d7779a86c33ddf5629a186ad8af270882600a1990009489c9eaf6438a4b46a450e3b35c3e92805228a0ad90b3a643836c9cd7a2a4fed3871dbd0c7ba83ed0cd814b0ec9b8e9ec81df81116dbd27cb798fcd9790da780ccba6326d710b4af0c66d5db076829b5143f43e6a294ad75bbe1e1286d67f235f698e769f9e54f7b88439884dacefcc2c10f80b48716224b2cb2faf36b034fd5dbb0dcbf61b0ea7b5561c17b5045d6f203636826f58ba7f7181e350c9c5169911b9c26b3f45a8eb1e47231e531394db42519a33a9d590bb65e14de125ea0ec12be29b710da10b366432d0c11d340ee3ba1a1c571ee7234e0a77084c15bdcae13f2850661f38e5f61a0c59b38223ed0bd2b10a62c79807d8e2663628ba9521a6fe1ebc12df78558b461e323775e58665426aa3881cc266b50df0d75ad9131bb8a91169f0c1020f5927d9bf22f6d7cab3d7823775e336f97557d50d873c6a335950ce5381239bc16ab1177f1258ac103d362f9cb3a643e079a95ffa54034c31f8400bd25855bc7809e37d6a22be1af15cb8cc39afc8277c1db04de7590b998330b8ee3f1a4becf84bf82dcd88a6c19f87cf1b2f565d624b2e8d980ee064e71054939af4c66f8c2733ada017d9c70f836f5eb11a3c5f90529836322c1c0c05a48e0a74bf83fe0e386a21206479ea05dd699fea32f3cdb67af91489d7a07ca COUNT = 20 -K = 6c25b7e7cc98ffa5b5bbf498e91ada405cc04356d5f2fda883fba5c96546dff1 -P = 18ff4ce44c5bbd465cc8df9b6a0df78d5b5429af617aa757036ad42ba85d0f88cf2e911612e52639fbdb3f6a7ea50df75b5063646139b5d3856a14d9f3aabc7ccaf0beabba4a21909c654da48d8b7535ed1168d1b2e485e762fa0913673145f48a7a98ec22 -C = 205d2cf674deac1b75448aae33785b7c85fadc5861c9a9c4ea46c6e07808ac7753c68247ec0b54e095591c7794961fb587c5f51f77f2e180a294ce21dcad0a42144e5b7ba662a59cee7e1bbf35dfa11df0b5fcfc235e4d172b2bcf853061f1ca353de38f1444ba3fb90e6512afbefd88 +K = 21e01de62d714db094145497c27a6cb74b98a218e63901f2189df976ab045b35 +P = b6f8f9d00fdfc793e148777ede3951f81502962a5f685c0da0df6227dcab75186860dfaab985545343a687530cc5cd183f668bb3dc3978c558ab293e21122a4e2fc06eda4a0d599991c67e9e4c1120f2c353ae98179ae3d97e803336e528bdf0550f98eb3f77ea995e62930822db6e6bfc1dbf3fe118ebccc65756a43db8b3a2e6e2fc0fd1470441eb9309d2eaa9c92fae34dfb819353b512bbc9ede769c24433aaff855e6513c5a4184b61c447fd6b5cd5f590010e53c4d196b0c5dbbf0d877f88334c5e264b1566e19fe4c10cd1aca04eff1b3f86bca40d020b57cdd734a1bd240bc358bf5e9d303597f550f4cb99973813cfc19c3df6ae6e1b9d5007e398206383c7115f2b11bf88ac500b4b18f1697c48522b33c578f1e03614ddb1957edead74146619c166db61f7f986dd072f7f947a72f625f185b21ed4c1912297c9c18f92810c64a29aacdad2a04a8ee9ffb983981da3855e07921a0f3320fca49bbf578e3da6cec3904d6be509268c5d6ab53bf6ba3f2cede4b3c4c98d63c2a0e3e0a405e0b79d26a8b9dbe3c42d73b330b143733b10830d2d8cf25deeff630baad070eadd2075b1a43b384afef8d452d3b00e14ffee92426e60c3308fa681f477f247caef4da8d7a03a41ec31fa8549152db4c0e2f96f266b27b8cbac4fd6e76ce5e9afb0a5c612a23f74708fecfab4ad21ae836a25564da1c8c07a3cd6e545af2 +C = 39654dfe981a9d3401a93cee872f0272fb6cd1255bb4a67ca93c0873943157570c118b796327cf152ce901cc4e6290c716bc06abecde48c2f94292ffbf0ad03e05a9cced782bc84569cb5453e967b4a6aba5c5b4f5f87d3ad6ed0189256834445025e1ba660ed2c95366a2f5440aa26a11b6550d5e835fa182505fde05751e5b858707f4c6d9091b6b60128b3f4d1dd6db628667d792cbb505eedbd65e6116d0314e589c27e99a7d6d325f1d9076af12e62d39ef938eb29c89e3af346af0ece084c68cbee413b59551eb250c0daac3bc879135434681523eeb43f3e793436a1e766424ae07729e1f938144eac9dfcf4f2297ddf7142a168236626895a5878269b61fec11427b968eac6150a2e78f20d50f8ce0e5effd1707264df245df1785e3a857d51d3bce9c993f9bfcb7a49d4ca917a2c30ac4aeae0bd7ac887347c9cef8e4d339d48faa9b8f07f6f8a36b4b8c27b74f35defa58a6f2c71ec2ca6d3a406e050d87b04f8767170efe544b0e9df05e8a09250eef07433417895a44c9241d2bad3f8e6844930ed665ed071fc6c6ede54b31bf8170f9236b8e8d38c2e4a6560ec708e222692e708afbcd9b5e86c04951d0077db6a8c6629182d624ef82879cce4ed29e91361184c583783c5ac5eeb3cc4fc535b7b1dacc7859c222a0e360ed524472cacd023f386595739f7c67eace02e9b65015150f8dddf1bcfc57694777139ad9e3e012230501 COUNT = 21 -K = c6bde44ad4d2a2b865c97cc3793917d0e8a25e80bd23c876c402c6b31412d6eb -P = 7ce2791cbaacca874229503fe8ed06f0a6c70f49da3f1fcf26017fa40651b3b54fa4c1a8d42de4cba0ebefa3bf8b819c5b841de596bc3e3dee793d9c7af912bfed60bffe59c2bf0907eb69f897c3d998e35d785dd4b4fc8f9b6f51c9f09c24b6b5ca87d7c2 -C = 615ca4e184ebe777327e0bd2d142f24e42852f27fbf39465235a765f4afa3374d0ea3a3a708fc63fc73495d92591e8cac7973bfdf6a684b0e639ce43a266622899009bd348d897753fadcd704fd1206cb495b9c42fa11ed472c9552efceef2798033e2de6ed25df859f3b9ab830d9040 +K = 496feb75905d41d93ceed759cfeafc089ae357577ecb299c9d3222f53d054e48 +P = f77423f01cf69e1107aefc96d2cf4969f5ba46ffb1af3596e9a03976962401588b4166c503e355edd3d7ea1fb377cdb52dafe9334e87b9e04a369f567c1f1aa15b152476766bac7057e5c379bffd0416c5458416640979719087ce59c573d90b1e4505c1cdc12ac63cd046dccb72940d9ab6975bce8cb07626a68abf92a062f8cca64e0fd50e1cba9642e23aee55421de0049a907ef53aca881e4af40d7d9313257ee51f3c27dbb10851bccd0f766f0329a8aade7e0a463d8ce3358980d546be8c39ba94f6313f01d2d0db7aed3d117853297364358bd3d38f9108de3c390525c6071fabc973ce0a42b6a7b301275eda37c2e51a4f5c5fc670cd877779bb80cddd9f8d4f436fedfd2c19e40a88ad065c08dadcb77dfde920d52853c0f6e6dffc1cd440a456e6da901d899bcd1c62e4ca1d372e06bf389d6d4b75252c543dd85e26292330c15e2c43e7328496ad941e5bf2f10c7edf87214ab7507418be93d5574d05d597550c3f5504c23778fc186e4710305c2473ccf5abc851f7939f7379c991d0aaa481dcedba662fdfc6e0d12c4724375614ef54fa91e99ffdc3ca537189f3c5f64a534e3787c783bf2bb7d7ee2335902a863f4cd98952cf8cf3ec13911070b42454a4f5239913997a6796bc56b0e18a6a2913b3a67fdb91340987c623ca9fba3a295d9e5c1906d7113040d9e572015a32da388c3c77698ef2dd7b352842 +C = 135c7237de08630e65419bb87453b869e3d6999fca6780f9451c7ff21e213cc41c68a9b4f95a5e231dc89c0aafb7e62b237318a74f86620229c46cadf885e13228cde2bc4fc657bcb23247685274a322d98a92100cf627841aaf0220b982a50cc6d13ed291f9cc620a13eb1036e9004ab8ce6c03665822bb35afe26fcde5bb12788036c0b370a61efdc94b290e6ea778aba39d92010b675dbfaf77112842a1ba30d4022d5fb58b998621c2876e90906ca4f8647bb1ddb238ec713aac5c5cf69b1a7d335f38cc7186129524a290995e6e712c0fe9e919a93a655472c17f4f50192a2dc6d5fc62e4eee5bb81d604b31fee0f9bed06631943ec6742f80872fd119e53a447a2dd6fdd4c4b974c5f361c6de01c560a077229032860c9c4146afa126da7014b39083e2883a10dcb9b98f079ad20bb4bd6f237fab8aa49156fe6fb5234cd0be02f1c6dd335f7875e0cfa93c4ef7791266c3d9ec37bd9dc08751faf0e99c9d8976407100e88bd3f9f19a40ca7a8f98dc02762dbc226debd94dc4573b1697e89cd37bcd0ac4344249858a9eec3b7db19e40e03a3e2c3b551257719d2340671d6ceded950500e0e59ab3b03400b25dbbd786704f5ddb631e7ef08dd3eb14f69f5f831677753accb0962e7e5cc4bf6a71e348ebbfeaa89c3290ee42baa0daa02866ed7d4e72494b014f8adab4586f007aed8045649fa18fa9b132964228cff3c3277ab613ccd57 COUNT = 22 -K = bd28d841a4948ed4dfd95eb6db351cd433ba4f5e8e5e3ba7f9c6a9fb85e6e36e -P = 938d79dd23d037dab64417302eae3cc758a046692c24aaa89ff590b97c8b2b7f0b1a773fe275937d9766938d1d519549f2c2f0624a4ff211d827a85e5f4042987c6e3a09dbd8c62f510f5d5943308b445293a0e82b2c91ac5d8c4bc7fd1581b4a07b3f409d -C = 60e7903819fd024d8d8e9d4f51309ac6016f0454dac888a412d8b969a891362178a1bd0c7379eac856b2876f1f2bbdd1ddb40e5909b4b73d238e7f1eb31b73f453587b113af6ed9a3287e0bb66ab338a173eaed658a3dbfb9fad49e39208cb5134ebe722a430e6f2d198b6fe1af0d548 +K = 5472a5b301c3aeb449fed647cf09c6a912a0fcd9cb3373dd705f2acff9dadec7 +P = 50bb831e99fe6157326a0971f4e2e4cfab581c0b82b81c18fde0b104b6497966a19627d3219fbeaef4a04499bb1d22b4fc8b6e9d3fce364fb098a5f2b9c32f6a7bf2c168ecb45a1b3e807213068776c4a572b8251e8506d0e7a60585c4fde51516ea7747f0d7d20249ea06a8869c78ee6ae6034256875c6461db827c3bd60c55f63eeb1fee7c3605e852a09ca1a31260946edde562cdc82c46a9709fdad79afd45b622f1864467e15a80bcb9cd07ac1148cf798be88066fb896433e7959e3651b0ca0301521ff545886b8c648d1f962c6da4a662cfc14a1320e692b7a4d6a78646628425ddfa1a3da2785b955865607579ffad8e5cb8dfa6848603a1aae77ca6402485f96ef394a79f6e5d33e9c04f1a929902766b453f0f884eba2f0e1ccc9ff7a158db37b9d2b44358395d610e3eb1eb1b96d704b4f62bde8fe47c43f2c8a0e530396b70910d203daf2011cf537eab45cd37f97db2c44a14df5436799e166afcdc2391d2b887500db28f514778515c07ea88314bf12c2c1bd222fb4b34465b82fc4fbe741ad75a773339b28c0e7e31d1fb51112f3bc6997adf3d9bb375e23760144bccff9c5bc798ac9c6398b7c7de577a8ef0d199d74714527f36e2c23d641d8610a67c92f3ee58468d90fa8affa8b15eca0a2b3b7477568256c73f6d1fcbe0a7ff4df6067de71f03c562e1b590ddfeec131f721fa76c6c24049c0726fb08 +C = 8686f5e0d3963406383c3d9819fc9ac0b061610623a224c02ae5a5fa63b3727bcf989f90883ff8a7c61200accad1a3902d99c701e9c3bf609ff184d26ff81a2610c026e29b242da814cb4aba72b4b363ccc589e771692de8fee14ba14079a3dab70c23de8a0272cbc0a491907ffb3af798f042634ed8634a6def9a318aaea17a14f515b8c81f03820569ee4a159fad417127540b3ac62e397a52a36f2a7eeda711663c5e8a3f1e6009c104ff4439a9a43eb88ff8b4074d9d2ca1eee09891fd8ffe68d354cb0c768d8f3f99066e00ca530a0ee24b8564f63a41e7c4112a43189fa5988ff56418f048990387685b8a0ae439ca4472cec30f9dd5d5fb55c904c1d006776bd931c86f33e01d00d084fad32a9aa9a9fa8189b4740bd9cf76a6e01d057d0d04a55c4398cdeb78c92d4efb4d08bd66fd203066591b898225e9f75223a4d58b61c3ba1a4cfc93179131fd72e22152a8084eec4712592cfc3805cbddd2d034bdb01890a03f5b7260a4b9db28ba39d6eefaf872ea2a92d27b356d6d1133c291adc64033864855d8b3ab660ab8c6ede6978d91eca747958261000497d6d986834c831a4eec4cad0fc306100ef04312b5e82fcf32b13f81846b202bacccb254ccd71c1a1a447d661a58941f6b108f5cb7b4f79b8cda16fefe7900b816bc4b666ed0456f2e8dd0d86de22b86555b92e7c2db182bba2177fc01cf6b94caf45037a4972548a6da03ea COUNT = 23 -K = 0802ff36291a35a67c6e8f28c7d27d91c7f08bdda2a0138767ee887cf0a83dd4 -P = b6a45c964c876ac51dee3c7d279c0eef2156728ab94749d65d43f3d7a887657f130f657eea8acb0754b63dc5adc7318395ee9a4a29a179f71b50ad365d91b01c3d304fdad46a2e6b6a3476cd464db9fd5c91feb261e3e7237a0ac0d1e5576f03c264349931 -C = 54ab46d2c474aa03b9ad3cc85078adc22271b4563a8eddac2166b1e0fd244f7f276eeeffaaa78d7f4a6c3db9a0b5374d4c4a61a62904e51cfbdca48ab17b87f4f2525ea7845f6c54154f3cfbb4c7c5c1899e4116b9a31a8f36a206d2462ad3d23162e141f551210f9d976ed9770c40c0 +K = acc8c2351bb821030f8489d0c7ba164119d8544705f50cd847f8b3677d289940 +P = 925bcf21fbb360d2fa8849878622cb4b7fe904e203d6dce80f3794f5dde23d8b09d9dba8aad0525e49cb1a3a6cc0649ff6b7e198b2c8ced5299596ff88f4baf02a7788f3314b5b9c21ab3639ff2b5ee10dbcc3eb3c09b6f38ac13f0f26a7ea5d4dad85cf9b3610b65727ca7b332bcf54069ef6ac8fd15e545ca6dbbae67149acf819b50d45a2e736528f6ca5569b1218f436c7cd6af9e4a97d208290fab09490145fdd4b33a92c88e678e2de810dc89ad419be9c6069b073cb88ba23324044553133b6253f496c1aede602267e675057a56c33c36a4d16d19501505b0bb389d0ecc9435e18de82246e3e724a414f1f26f03a993fbe53f975bee983151200082bf7a70a58528837f33e394d8dcf2ffbfc78fbbbc158b83ce5fe43cb0384ef43f0144aff1ce731a8077fb6b9a4288493f10c5b01848b9e39257edcf1fb427cc99d247ce165722632a8e655425d63de780995f71e95f71bff67df9af959b4e604db62ef721a16e24208025c251209a19aff17cb0bd7f07d761fcc325b0903ecd24e701eab330152929884410e58fbd37fba467406ce7479a56a50b49f186a4c99557b08f9517aa5c03e2d5da089cd62a0a3cbd6523a822fc9ad656a276445e9d6bfff4985a65a432b04f5e6aac1a1e484674fcfeb380ada66a708f1268d366f51ee27c881fc4611aae122cefe3c9c798ad5e254fa74a47ed8127c4aa6669704355e +C = 8358e47383cff907bd8dd77cd15156c4651847d210118b177d23c7378ee77a437cc2d2ed8906273ebdc21aa7d85d463bba075cc5d25fc1f8f10dccaad854ee5aad0f9d3e1f11bf10363083bc0d1778f09a14a9990d1409067eb8d55d84195ff1c4ec36f78592dc82a42f1214079321e5f72e65f7b6691c7564f61adbe3e2f2e99faf6f7134bce118b6be0df91f096279c1e8485783026760f5ddd2cba8163b8429a04f2c27c3270cd2d92f991dddbfb4436c1d826c9b70bb7f0fac023b248ec55f1bdbaae65f1fe17c00162ff26832641ddf729aef6e17edf1bf84513e416650f31b201885c684569e7e2868f18122fd69ca4928b53c9b1cb2143328f9a70b168d2d66214c04d9aa5a1c4e23df8fe965bc788453283690baac96e4d2eae838928e1f70865cc3aa8e9e354ebe57f3c2be617a78b3af2ae94fd4cae6f572e192bd490d30af460354a8c551a5d597fc4320f44cd65a5478e3a1bdb99d37123c7af788cb77e4c358b95e1106d00fa74c38b80619802c34edd1bdea236c316d2c7c9c6a15991bca95c41b2c3c3861d3995afe460c68ccb49e286bdf2ceb5d3148da6fe04e3a093c98a09f1e5d6b3f44b9cf12ac3343ae0195777fcfa58a14f4e6481dfa04ac9ecdb3358942fc2037a49c190235518b1935d31216bc951d95d5a78c94bb3087cc8a1cf84e390a65102689f515c5fbb73479dd92188a81903cabcc1ed66949125f04f7f81a COUNT = 24 -K = ea9ca1af8a536f4736a9ffdae4095047e7107a44856c43747d3f9c374befb2e6 -P = 85971fcd0bcf180b3b791b8eff49c023a5a0dce2ee810225ed71de809ba1cb55e0206ef66387e1cf2643e632ee54927f68ea08919195190fddce00ca64bd4da5afcc4a4d0889689f82ce4eb8044ff5669502ce0bb53e5325e63a3ca1d9b09fc268ed0d513f -C = 95a361771ec8d93dec5b2d65ebe768d64f62ce4af8840e1b5a758d0a55334941903d7e065eea0acc9d29dd2a755bf7d0e8370af6d75fcac62ba88aaa2d845d78a86bd446cbca330f0bd5955f3e8857a50fad2dca4016ad70e9fb28706c944a3d36284eeb3256e49e6a19e86eadc360e7 +K = 9a270af2d5a5fc5a5fa885587611724e3c2cd3126885038a5b7ed58bc529e47a +P = a9f6ed7d856e0cb5ca8258225aa4173efe802f65c885038d0bb62ec154c7ebfdd97de47f6627355028de3f81c2e06badf578503bf82d34ff23e18cbcb9b897002a86f2be20aaac9115515869f95ad05b2ee02ac89ad06d89077d9c497e10861fbaaf2b87f35d797b441eb2312620542d5aaad68559e096ff1ecbf735745b5aa918ff32761772f2373a5b6a3c844027f0b973fecfd5b85bcdfaddd1fc332199dbd262cd6b4f089756d60045b392b7e5db4036a85715309e91855810fad2dda832987991f7a2e8b81b0995a566cb382a4601d8c679916558a6e08e810a8c3b32696b5fc6598942e1edba65a62dce814ef3fc64287ab3e7b4c6347bbe3cce7216d5c777e7f00fabf22475b62badc52763140d5720e38d3841ca82418fd9cb42f2b39c7885aace6e7cba4863b4307a1dfde93d81b5efa9cd7bc5568ab8e1228f244f3575a0d0e6e7e36fdf9e9641cb8f76bfb35895b553afbc0da4ea76359cda0f7b7d6821dc9ffbdff18c7a4d9bf2bf46e0cef4ee5df27e1664160d236ec3421f23f75886e4884c286002dfbb9ce1e9a14b5939ba3982a9fbe7554604f4a0330515e3cb5c455ac046f3f2cea72ab3b56c768ae1d0124eb933a3226c99f505f87b52d592fd763bb6356b078fc0a09096699d3dc5615b9d3d536f361d7141d9153e913a692cc6bfc02d7cc467d7f39dc70a15fdd15b254cd4d2d2c68a3bde2037f075 +C = 3483735d1ccad5b110abf99fd0f5f1f2d08ec33b178612f8966642f1671540922346c283aece409370ec228fb008cadc9280cabc98fdc2f315895839b6697955804e32f87ea466df7403bae4abfc44b4e5f61cdc5df9ee7dbc7c4e32dff200a8f1601287c6967e08500fe58e246a868008d13959ad8f914d6e0c4afa1cf471917eb88e4edf01cf2c6b4244ddb60b59668262dddcba564af65f25b90eeca3c4ad22c5b8a7cadb54d26b61d4bc06ac6a5ff62bce92293d2b998ff6003746afc738bcbd7771c7303e474f08811286a16d7b56b1b155de1dcb08dbca1ff536cd949839e0eba2cf0cc7d62d75e9dfd068f79bbdf8d750584e69b3aa29c46b88a0646dedc6410a6f1d711227cbe8e0b9f137a8029ff406d9e23a458be112827f98efed3d0f99adef613238bfea6b8da68d735ef607b167eb23490c1d12c7e3b3e721ac4099b86657476292c2dbfcafa122204af58d0fc69fdcf17a8bf784ab0be568fd6993fddf9b1d03ecc373e66ffa0efa366b055bddd08f55f6c4988fc7dfb1d3ab212d6aba8f8bf99e85a55b1332a122374ced5d42f113ea5a07221fce0ac8eed11f9292e5ead994e9749556ae492604f01f6fef6f013eeaba061bcb4777da26d2f1cc28e190621fbec425d9cbae262f5fa7daefec275db7fac1caca230a923f9b16ddb20e7a19bbd2a59d8f0a4608db9e112ac465ca86a63b42969c36416a270ec0bc6294a1160a1b COUNT = 25 -K = 076fea7af234cbc27878efb685b27ab92e21d84dee90f9fa65177cefd984f532 -P = 348cb3c3161836eb3f9aa5037896f91abdc2ce11ab1ab0356a8610317757baf51c8a38acaf4ffc752d07705d97154632ca07eeaa2940df21caad17b564e2b600d078ed4c0bb8a7942233a6051d7962f31e964972cc16d374cbd0db67398f9a017c3ae99ce4 -C = 39c6f1c228e64f75b062e5273fdb167c93ff4cb1ff8de88e9517b7c07bef6401f987a1b58fee90497c52a14ac3eb6790288d6f68d3aae3d701f4bdabfcec79f8ea5b9e9f0634a2226e89c74d9d6e83903b27f91ab44c1d2e3d29044e1a0fff25676c9667c79727f4f774eb9490338322 +K = 60a8af2b49b417829962a9a56fa7972d3e06a0904896adc2540cca81bffcb218 +P = 2d76bf78eee0c31480c555961a56bd7e70c2109fc511212f51e88140397714ef8d5ecefcb49cd33afe6f18018f5c002d10d5a9d07b17134f4e22e9dd16d36e85f6a6c8b741355f16cf9f12b7f6ff7b51acb481bcb7262330fd56b67b966ffcf90ffd9ae5e3dfbe4f19e78cd6ca1f4130ed75d0cc483399818afd25228f9c863e8f3ee36164e4fbd2b981e8ecaa2378394f7147bf77736c7e49f6295ff85636e84d116a01aa39b024572a5015735263f881713743318f44ca06764b55dcec32e1c32a9d49c8fb7417407ae14f830f309d076195a67a1332b58b16952ec17c65cb930460a32144df70cb26b97ff2f6457250bfe9f541c2ef1775d100e9ae883ab6a621598e2c23b892b2c4ff5d733d5ee2ab2f44423111e87f9b51354d7f278a42c4eb9512e2219e2eb0d361953992cf82c798d026d9c4908a7246671de78c09466a8979d2b90cafa7977b5604638321db9639bbadfabf27be71e13bfd88873a6f52b2ebf0ffdae831aca311cc0f3985de9f103fe38966fcb8a1e81af3fd3f626bca1e0dd3721a936fcb2e18da82174053f03ac014fe9a844f34b111535f743cb4955a654a4f9cbc08d1c2de8110b14fea95434c5cd823d9bd4c228c0cc30f176c26635d431821129aad1c9d8b2c4bcf25bde630bcb1b4ce90612718af0c363a560bfe9a48834161d793d66c34144ba4fc10332f38e9ea2fac34d33a35c5947d34 +C = 4ae5fd64191dedd6f9792d4e0389aac9cad143998cc1f0b67df6c3b1b5f0da4b8343786d154ce181ec05f25fc4dbcaa7e4cf74aedf88d912bd9d8fc212c3a5c5615623f0e3784b2156fdad46a4b4a2a64946a49b5cd09f0f98c3e0a8dc7f618d2c2612d0cbe0aa05fee6cc88db239505b6e6172f3f01ae8c8507dc47a7910453ced557bcb8168afa5cb06c82aed28fc9c0124a4560f7a1b59c9ea21c9b77cfb267f6f165ea86c1548a9a04eec36ecac3e8413a127de8b3b7f3719bb66b3ba702c2028c222900ff1769d8933e01b66c76b9249ed2ecd316b78f6cb564ae5987b9e2df182b9871dab550beb083fc0f7781ba959be5dd4b8e3fccde61cedf58ed53b0fe1f6f9dccbbe6f717fe4761c2edd84f140662e3486d0ad61f98e224a103f5bfbab2247d28aeb4f4477d2313f568a5a6a001a79adec4e02eb293505ff9b4cc3b733ba3882e973df63b89b32b61b85b6631b82112b9cba278e72e94328efff777b2bd93fe2f2699f78c943752706671c618d15bdf3e8315b8ac83cc42b7a4d47176fe99b8f0d8c649fec20f55a3ab6757e64d4088927b1927c1e6e8f267e99fe3de6c494317cf789098c586a5895f2d29e6b60094902068f9e196e46aae6ea153de1d15e6193d6d8a5e9e552dceac021e4c0c9e836a7a09c380f69a22ebbad0b81ac03ed05966375c662322626e9fa91606dc8a3df0a96e1588fe8fab851206581e0ea37dd6ee98 COUNT = 26 -K = ccc78db60f2b3380be171bd24eab218207d6ea516aa82557f6e9f5ae263ba5df -P = 3eb97eb09ae1c42b63cedc1330c6bc010167e4deebf000dc391b8028e6a15ebda28e00859180c6d3f3bc1268d518d11a6ee8f81c5221663f3d5a333ec33c82033abf36768940b55054c7fe712be2b14ba8346ff8afca909e216eb15add02145c712a32f358 -C = 18b6496b61ea9dff09c48e1684ca94ca7d63a6799f13ebcc403de5ff3b01f172e13023c930074739e207ca8c8a22f6299285e1e6032266d30c10d108a9e0269931111f4ba7651d37493999492185fc0cfa016d42407d897d42411338093064d71bc49d8fc277def20a5fe383417f2115 +K = 58753dbe8c1482ae1dae74cbb79c11ce8af1ffdfbdb7bba4cb60e2d6a757d486 +P = c747280af889a6046514c3633db3febe77e888042d84b86e53c4be17700ec8fc1e5bf920dca2fa26b1267fa9aa3d2877a02c19a97df24cfa674044ff8be07baf37b29155ded748035804932fcc5b77b64ab58337891738be03f0eb97e8d4078bdab8219afea7f2e922bf359302c03cdc088908858f2f17d756031978833766b83b055d42b5506df4f75bffc5a0b9828956d87aefc9579e8653bac68a23af3fa3ee212376f3d9c09b5e274b89c6c6d94f5c64b4d28013bcb89f2764772dc25a549b9342ffc1a1ced1453c64fcba90d0d2c844942ac1ba43e457f9f251dedaf88172bd548fd684c0ba5149bfe8a97b84234829ca967ef95a6ec7bdbe1aef45d702d5afd2b600a80c90239e9c0d14fbc1f004aaf1294a0c0922e56c2a03762fdb531fd76495ce72c55968071934bfa5ad774d157ad70ace163bdf909193b04e13c77f92c328181894850bd970a69e5b9e8f15b37422bdc2508e9ac730359bda088040a30ae67ff2b4d72341062b81f157dfee4a0d3ea6870288ad2786701bcefb78b3549bbaf0a4779a9ba36d9aacac17984bdb00c81f10c191552b6059c9fa8599fc69b320b5bfded978efec1fb7d9b5505cec379b85de218a7292b4370f9ae664e676e6f5235eb9c5d756c998a15fbbabcb307522ea4c294d7714243f3c708f4451477f6f7c8e3ac0fa64605c8fd055fd0e7987eae27f525e687bea6f24c6cc62 +C = e12a517c57c9c0946fc1b8f1c40d73ebaf1701e30de0bc200c8b9d8af3f9de88695c26da176e22005fc1a2bf2a7ac0c94927ba56d5d5e3356d6f3f8bf8dc700dac19d639515cc4e6bf955f4776714d924b7780686294e2f1f384eed7ae5c9bd751d3a76a2832067f2255a71bcdf1eb63bdd74051881482d0216e145e0474e620466a923e8eb9cee567a3e91e0df035688e7c4f8ffac08a542a6b4d699f590b585184d2ba41c73d00eb4b5845baa1b40367ea740ff955a667ff585ef822008d965f991468e818b847e90a3a24cf1e5494f924cfc49e3ba52cf258580bad0d10d1d787097a956b314cba8212bd5ae6e46bb83ef5df94bd83d1e890713423ea37398226bfe6defcc8061c1e22add5c131a16c654bc4fd4d4b16a58f72e998706102c10df55350d1c09a66106cd45071a128d67830f9e26b043d272dfec16a9d1f1a0d91a8b8cfef3cad2d73251158294ea31510a2e65e604b2730999cf25b663ad96eb37faeb4393a1213b02860818e02b5e3be983230c3bbf413085c11a8f90a515dde33fe5a8ff32296844ca39eaf1a9cd9741af0fdcccce46cd0bc909b3ff710e47d59606faad6a497412411ecc5b1dd0e40de07d648d7a8a77b077ef1e4e98a289341e42ee45b356455b4559cc1cd1d67622ebb8b2db8d5099c8960321a0280440f79d04468c6f96214ba33f9be4030b3e3c74495218d46b9f1104bcd89cafd4e726f45f9541923 COUNT = 27 -K = 22be8f164b332bc45d55cb4d6a5399864c87d398e167eaf87fb3386825ecce04 -P = cb6001cabe7900eb8277d0fb1937e3ec44446867969725bda695ff0452f979747950556002ffb7d5430f3d04b7193047a389a653f55bf5d180c52e52c5ac91307f6ef4a73cff224e42621df7b369e5fa4e49b01ed19d11e8b0e378d65e794f13253233d867 -C = efd33ce75e2cd7ba5db4a06cec185dbc3988f40e8c0e07d45a6be704c35cff21204a649724107155d770af1751a45d6295f80dd1570738e6e54c2ecc3ca0feb9abb8cd72a7c10684f7ff90a191bc0c32bb1935c3f733368e10a5ef18e83e30a38bbd980c3efec114c71ddb4c41dc22b3 +K = 49dd78654c0fd02c70257c79ddaa6e2d767897afee8587a370dce895634669ba +P = bc6e18783adc2cc748d1aeb8b431910c3978559a36414266aeddf849eb0136aa3995da14cf11e1a57166b8d3f77a3ba05091d276f6342b07981b2a533d05448187308ae6e83b287a975bf611c1432fceb03bf7303f908d07a81eacf0a4375ed3db875b3c046a6ab9e16a8d03e9ad70601874fc4f9900cb011f9be91a7788b4b20d16d3e5765f69990b3a51068945739740bb7215259ac32ec5ba6ee96a2f2a4d4791c3102e4f1df26ba4df75b1ad3f5726d5fb03ce3e19a875cb30fc5f7d9b62aeac9527c895803de13a7bb337dbdcc21a812cea8515ce34363fb78dee014b199aa46e57e8a88c82659ffdda4f957252e560524c3645bb6a44ee662245b7af5a908440846b296230f2a498907d61610acd834d76b6b00956dd18e4db8ca5548bf2435df1e8e3d34b877a97c654506d054c87084ee744f3751c5a9b5089da433df7e77437d1c625041804ed223d3717b6152232b81e6efb9a6ffea376767a26a3c000dabaec7c20aae926c49fdaebc73bcf5eb021031d77011672c0b2d02d58eb867103dd77ee411f80c1f86f3c2baa60df35bda75d9270d8fe07d85fc296afa51d432db5b0d0fd71665517b50a27e526f0e481137e51dced236ea63cbf87a7acddf0b62e0b7485c21fae7bcaaa8ed13dd705497f0808ed729133aee889939f679ee14bd5361fd72d9889e3c94fd6bd945f209a674e08351238811dd02abe0af1 +C = 329c9ba91238c7a0b25c135bfadface865e2dc65d366d341caeeb740cbe9cea71753976f99590800e0fb14e0ecd1180b3dab34fae97f46367cd5c12b14dbaa5f790db857d78b4d2aa892f11a35472fd971c632476e7b3cac8be78016be4f52f0d7fd03e79babdf82e633800229b671a39f3e2bc51e384ef8b6cb277739376d0f6bba72e9a16cddff1ed3fa8f18e8926fc93b1c8c2c59727f916d31d867f819aa4a55b0e1453e19a72404cd8426a3dc93285bc2c3f653bac26375e6c10e43dac648b26b4717b48331b81004a5c8ccdb35f68b2a1b8becb1757f178878c8b83719860dd5abc1e90d85b404c2905f2cd0120a5e21e218534e911f638ce4f7fa3911b176cc6c36ab53e0e7f05a39c68ade44ddfa8a383b66af2e5706712dfd365eb9b4924075596f2778ae3f2684e17c76d35b80a0831cc70ec2f67c4b9f112d41117c6ca7a247dc65ca662e3a2d2f98672fbb74cd27ffa720544de1765e6440ad4208db229a2f01b262326aa7623a28facb374c227b004531ebfcf066d42c804f9e08f9efcca4a9594bee9efef0d130c23e000bbb585675fd41152be9763848123806309cdfb947710eeba02db288974cc15b04459f9e1c8b785857e985dcb8c129e652c820b6a8f9bd7cb0ed90072cbdc36563fb78515ae994f23b4f4bb4411820b7d27b58b7d54f14f029357bf7bf6aa115043ea6f57af514d996b56903f15e7d6d629791427ba57b COUNT = 28 -K = 9a6866f19cab248c6fa903a4154ad044531dc7f17d04d2a04f5ab497219fb10f -P = 8255d0738d040b6622e757e4827c1faed47117bd776c7a56e0d44ebba7ed37d318e4dfd648eed483c9ed540df321b95e593a2f5be0162467631ebc7f1e64728e98133dc4501e1ce575e3d812275f53a32e67d6ac23a6aff76e2ee66f17ab0034c2227b3b0a -C = 5eb33a34bb340df70cf88f2eacf6acabc86863d2bc63abb81a4a48654e4b02eb9bb85797646728ee82110890ba94c0f53b592a01e9f3678d19a0005aa87a67c6e84e5f7cfe2d701f22ee7d1a5bfb567d41e875fe9f23ee0c132d824bd1d6203aa83d6aa7443fb0d25cc1c315348acebe +K = 1a9198ddc2bd826b8cb1dcd8c4ce3464cf857227c4e198dbd681ed9efdfc2416 +P = bf8254485fc378221c2e54184e59962db9a7a6f988e6c281470c82c529926febe828f53d864eefaadc20404472a69e35954e35711b2df228210779a8440231dfec991124949934d66fd07b6871bab20c8cb766b331591bce4d72b769f17fd85340ddefc52fa57f24cc7d5822862b3728a72498bcf7759ab85ab96857ac3da62af05e022dc9f2d819d3fccfc67cd01595bc6f504fe713492256f06a0c19e7b815a9419e969472f4ab7b859f7fe39aff7f6e198cc3ed40edf3133889086319512f3168446b8708dc174fb4c0fe5b658f05c822706c4cb34738b0ccd5d391d75b495f0746e1ecd40aca910df593bc2d26612f6eff69d41d24c6bcc30ea9e7e36c14463d70b26487b2a6eb39da8083e73eb408f7f8430f58139de3ce6c642b1ebdca5659e5290770169af91f4181eebed317bcba0812f78e1efe984b4f38785207ecec8a6de4e277a57ff661b172cca3df5207cc0825118dfeded6e5427e7412d2545ac60d7fe950649b456ff9ee69a30a3a509c51297a49835c6ad9aecf48d7b8de44c1e8838d7a387ec41021a8c6e00a35a5944c40dcd9988161534f05ffe68e5f220e863d8168eaae879d08638c38411e59b2abc90752819f68d9ab701c2d6e739d4d45e1a54b5507bfcacfc2fea7a0e1569f2d2eaf0b8b4d7047d8209b589539ab48db7ef2c15eb7e7103766137cee43d16ec3ed5fdc24c049fb64ddcf10e62b +C = fe0aad408c2a0b4fbdda8caf7df785eafbe1691dfc77d5c37799c7586031ac0459e48f64bd3a4ca075a1fc2e7ab54e94e40b6dee617a43d61a36df3a0cbac049f8d71b4cf2d7bcf768484b932563f66f5f6a416a6e40ebf0c0d1bc7f75b566aa0abb0db0220a82385662960bd3f9ac10c9de84b08f4db137d4f0bfc57c742648ac5a33e5cddec862cfcb8b55e9d1139c09ca38d0160f98893f23e079c71602763eaa6fafd40fe945deee41f2d066f862c66c8e942d2cc8381a43d159aba5b98a171be4aac80a1b33fa5b5ea71e3403ea7f0643fe6a297a89c5a5bf7d70b05eb3a8c599c2e89925e0660e979d7c2ef2168c35620f4826c7ee4873b6e0c64b76640435fae399135ddf7bd17650d027c2815d9af4847970ee048c7766819f8b542f9ffbab46a5f4e07f2a063f41a0e86dc2707f1277b9c45e1392b3ae11cacaac98e37f7fd5c3a8f7c26b1b07bcc24d2f53a02f2d68629ddaf133781c8570ae6c36198ad6deb556bce30c3315633cbc3642a9b5ab506da8b1869570c9db0c50f27ddb226d639f66ea5f7355760a871858e037b5b8bee09278846f8c58c17b4984ca9f4b6b10ea7d11a0f677de49c039e72f39921dacc4729250f78cc2dd397657382dafecdf3feb55308925f65b622b373de9f9253cedb4246d3ca9e0c51043ab719f72d9ffc7f026b7aedeb719622fc4bedb19fd40e2a63886b64892593093e3dc3f1b5e3c71d593c7 COUNT = 29 -K = b2b17c63a9c56c0a236da64f1f419b645b7ec749a3bfa674ceea9c7ebb78976a -P = a080ef40066ba96f1d8ffe56e28eb6839b6b0a544a7f41e9b5a6758dfe1b99384c41985eac714f20cb61fdcfc631c3d63ff9785201630951d601fd79995690af4b520f2bc8ce5dc5814e9974083e6e6ae4ecfcb55f582f33d379443504989e9fb620d1edda -C = 473f0bfe39c835bc966063137aaaf804e8ee799e3a2b74f7bba01c41639beaced310803f91a6046bf864a6c69501ac1e6509dbc1613330287b7fa30f194ee7defd2014fcaa585aaae20dc787705d2b321b796f6ea63b51273a7bb268ac2daca5878a27e780f744a14a6cb7bb623df8be +K = 2a5a3d336f54cb6efe41e1671b89ca0a2b801fccc800b53581d9c22f7cc4b7d9 +P = 7cdde1558837923fd1fe10d33511fd75dd3047e9571cf5806801354678b077fc3ef425b9003d15e624cace330e33ac78ae456a2208a888f2595f6fa0f3348cd10124a06b87cece4fd947bca1f96fb4a70c43f680284158a9c68051e010ba506618dcaa437620fa802397157c15e8c7ec3bb8fadcd4aa72dc69492ad63de4a49b36c78d76999df12febee156ba8a8dfe441ba32268d090c8b4f3e582038bd5bbf729d4ca135513793435fe7e836a17c920f05f40aa3a335fd78fabd902007fb8f2f4fd12092eb4c6c2fecfdc133a64ea262825a7919360adfe89b2b4784333f6bd5fff9476302747e6739fd59dcc5505980b168f68e6da3eedb135637567267fa5236e6c2f409d068f5af75816a877287e26e1c466dc37bd4a771fa7ad033c1745c2e15784f3071468c31667a852efeb266dec8081ded8789ed2442add7d65100a95daece356baad3c44f9112fef717d274b8accbbf94ad4675f4a306e633ffe7ecb4a3304591310f50fe4d9629305015c4a4e0939ec16a8475962092e3db98bc36d0d1ab67e10e3788b013a8f76a70b0a65906f3e55d11409c5b44ed7ac09bc05ca243b272dc4d25cbb1beb97e7cb6dc3ade46378fcfd939b4c1bef3f96fb8848be0e8b8852277f3e7206ef8299beacab6c694db1b13eafa5445f879d9a40dd2416f5434d0a81f24e9c3ba608e04b3a6f54aa466a60ec63020ce481738dd0126 +C = 958e068b0e551825e4cc9e7565384e64a3caaa1a98282f2f8998a32390e63a35fe2dd8cd8824d77603a5b967d752a36105a66584d59e303f548ccee897b837a057211ef2023b37a48f1b4e6c78070c7e636e3faf39b89234e8df820e77fa24cd3003f59e88b83c352ca18090107b25857129a0bc5375ef9e0b3449418134d79696802fad17692bd1672559fc2139593b69884cffc70e98ffaee42288cbc4c379a3ec62a40a4a9175e5c1ada99262385fd506df4a166dbfc67595d21a2d116a8aab0ac9f60cf66bbef152ecd6173bc8faaaf3fdd1a72b5f5defcf59e2088bdba11b666469817764e14bac08a3382fa68e35543536ab696730d68612f49fc7561a3be82ffb79c125f03a7a1d188bfe63f02dd847bab48e766a4bfdf43d8d824a3ddbc78a0a2cfc1cb3a1b8c51859ae532565a15bcebc0a96372e9a9c9743cf75937f6d4ae89936a01f69c1b197402cb7311db1de854dfdb9b783f137707f698f946f976d766b318f9e7507497df49968c998fe2b34a478e696f283eca1c525cee6a60c3963195ac349e263253a2942622388bdced3d2a62a2737871d123f8d116369a7989fcbdd7c25850ffc851d0e727bf714a3a3d7aa8fb4aab6bce46a839dcfd49f09f05a7a721533650bd9f16ebb6a2cc1e1ad1bfaf36b1f34444d8133ecb7b5bca548c62f609694243ca746ca584a9818c1d3a6182f06c23ee7ee46aadddb63e031739ecf2d13 COUNT = 30 -K = 69c3ae5324a2af187facb075d25840dec1b110db10572743c2f78793f508754e -P = 749d7fb74f1389ae669ab0974b44bc0ec02b9915373f0e71da005f4af0e07023d057377d53c9c86357086c41ff8fef3cf5e369f5d7e247d9251e7cd89e9e831239479dc37131b9be265207de4f18c0c728983e4bfe65ce422b2b47c4b597ea49148cf00385 -C = 34990fedd4b0d4cb4757ad46f625fa19f50f46efc1160260b29581f8804babee2d457bb6c6ce63b78c8a1606114f429a289914904d23e97a1e73459744846de3d2392d64875c56c06072ec9ab3d6289da95a344b95a4c1b2aec3cc833188a2b2d7b02bc3079743bc3233f383e4dfddef +K = 6b38bf27962d3ededf0b67dccd7f93ca565edf3dc93cdefae679f25cf89339fb +P = 8cdbccb1fa764c08e3b0795bfd3da17e4f10081ccbe9bb49e36766d02c327654d3159611911790a64931555bdde733e1f91aa8fad6ea0c8b7bc5f6b3808cb2a6aae3bd302353312640a39272ec3f2a729348f00edc0d997aad29c875de9fde2a8690a12432ed0c09ad44c197a6e3295e6268645ba9dcdb9633756125b4212d032cb4844a90ac6cd334c7ef3a1c4afe6e8434da508aadff57cdc402c36dd8f49a8f3b33799a968cb8c949bdd0bbbdff34aa3b3c5c4d1d0ed1c9e73aa9e5c4f4ad04e1fa0bd85111f1177d76fd586cc89b5dd293647573fe3af3cc555e8c02031303804c5a59de2b5d6d328d74a0ec9b231075e6e16d13aed1078150791364cb3923ba81a3790a8e8bf5603c57439e59cc4064d9acbc6bf205faf26e65311e6261b3aeb488537a280bd0d43e4eae3eede795892c3ebccbf715015167db9589a79c3ac8e600d3d0e75a27e5c0e52c54f11d11cde028684ca5771e1c9afa1f53fb7ac122022ca39773514d0c00db41e1606e99f633d9fbc8c11f9d1a47bab78f3f84973747410852a3167855da8198f63469c683ded063207123e6b816da3fc91c05a4a3726a2c76bcab041d5c4ecd15305d937f8ba69889a23acc8bd39c3c836af76a5833293ec4dc53de4497a6505d511f93086a43f0f12d9b8330d239701ddca44a42ffafc8bfce3ffdfccfe01ee79bec5904aee1716bba40614c81ca1a524382 +C = 13ef2b55fb0de43df28939025049dde31a5c5b63a40b9b518e56a207572091693393a2d7c6dc5ba93474365530c9bf8422c286bdaf29d6f9488ba0c81084e2ee0c64b3cf11655889ff3218200cc09c91e0a6ccfe9dc242a7af94f14bbaa5ef0772b227fafec72662e72aa3b8e1783ecf67b6ff6edb10be7766848218d656b5e28b9e9b384615f8842fd15ec73f8a2895c126b23a29d82aa73f59315ed5da5affb13f46f3b1f56b28a396e7e865a50310b4c834dd64baa39c00e18368825382e63311dcb6cb7bbb566f276e42ef39cedc9000d08393705ff4c0c4f88e25d4fe474973660dff05c1b242336408f88f9f5b7ac53cb1d8d4cca4bc525a3c74d01e2dab3aae57fe019bb8fed39541d5b64a88b0fe9b6d141794d855534f10a3d92a95e66f2516fa082484a5ba6582d4b73a14dcf63b4c47e1d5a7ef9c5a99c817fe5db1ca48a7747e834508dcd22ad88b0ab33abfbd8a35a6a106fbf9b16832f50b00faa49a3c3d2aa4734e454be0a6c0a215e98c0a70de0afd1f0cbf83ba9f5894f3fc30449a245068c0e5a8fcbe697089b33858ae30074f1cd7a7498183b78c858f1bc1c39c9e08dd15cf4b232b51a30e21ef92d132511ea1ea4020bd9f0264361d5a0608c7576112e9050afab6a34bb2935bbc1e1696f78f2f2fe0aaf23ee9e2517805511725d48c28dfbcbd97df54d7785097993d569abfa92473937f6dcf7cd1dab45b69c43715f8 COUNT = 31 -K = 4cf8085e928027ba1883582839e4f18a9a41445d704788ec1a387372ef0b7c7b -P = b3934dd9ed5a22109fe6999def109f6a3ce693f4f776bee98387851d3a4ade73c4e1a076ef2ee073d6ad52b1f0bdce2d20c44267d20bb311167b513af61bd01f22b212c6ed3620bcabf41ec5fe4e1e21115db4027c4868db803368a8db6d561c9bb6c9abd3 -C = d409ecd694ed7d9196a92634aff14980a4b720aadad6d0d4867f9d9a8f380a1d489cbc416d7dd3fb5fabffaf317c7c02be172eba1e6f20b9adfc68b067c14731b07aa6b1d682de94461004eab580fe75274e42ec0f158e22b34df2e954d50d42276f506f07c7dfb5f93ace3008979720 +K = e906d41617bc982c83a1594e32039c7e5d3f5c7bbd566da51584e524a1e0a9a2 +P = 71fb02eedc5c61bbb813b743f32501658f912effca99429b111d1f7ef59b6d831a4eae76f87b29655deb4246a367c63d30044fdb61e5232dc89a886036dfb2b4e5236bfed4118ecf80913803f4b28c273a4e118ec5fe6936315265142c96ac14d527ef88d775bd9960bb7fcdcb5bb0aad0b3b96be121535a1068e4e7dab389069c529cafbfbb84e9199da79c61631ef2d90ac96aba8b870defb203047fd6088ce31072b4829bdca45a222e61d905fc61d3e8ab773d6fd050cb74a89be638d3449b9f041e0959b4b55ebb7bac02d23d4fec8f4d5ae48bc3a2a310b87d235d8fa677509d5cc7cb722744c6b94d623ca066c56620a5f93130b750514135c22f8002ec600d6cddcdafe300d16f2dae8fa7b2cfd1c2accc321d818885358092d39be099ecef2f15411dfde14424e801f9164cda7c5e73a333a7d1b00420ac8860f2c5d00db8444102ae8f65fc7c0aeca701fdc340d038cb72c97814194d90e5f260674880986d8c385a1e3f4b75106f47c64e787aebc0d67dd360237d2e09d0c5b78f0d669b311df1c1062d9a4463411c152475f0820bdd57eaf1f643c67a6b52a98e9018e2a6ca3d3ed228945492842eee1191b2757a30d000a3b192a9b5a1c8120cafc0162423c572d3b8cf4b63fa84a5fa5bca40c2ca54a2896e910c90955e0b0042b111ded9b8572639755b0a77805cd185ee6519f5918b60b7fe1bab1c2c4d01 +C = 8c0703564a9de8a31e2d95443269b0088784a289347203feeda6c43fe08f1f31beb75fe2797c561e31b093b52722856055829b7024570c1b89f6470449b19c6c17766d40ccd9d7c9672b31b2b30f5837491420cfa41c51db54acdbcbea494d8200720389e6900939f71e42f64e99a002fb9deca4b1e4ac027fb4d8696e4e15d1ae1595e680b38f17ca87489a9e15c9d0b0484947bb2166739ec72d759760cc79843ac5aef73e4cb4a8f6d226f89e5a2c6216087db70a9175c7bf0d2a9316c2cd1ff774e6c3b2df49df548bf37f2fb997570fb69d37857811da3ca2f3b5d941303fe288124114fde87a1a7a9a972149548d8cac4036550167ea360735223c42d7e5ad9ae7cca815e001d8a71ed7102331d857fa1fe779f3b96d66cd404443b48aa851194ba8d96af6e03538a81eddb9d83cdce5131deb231751738ecb2af68a584b090f81b50b1819f7a5f0df5ed9d7f7b07200b22a584bce7e28ad3792fe48ab9413c56b880bb14ced9e9fc1518314f4bb0a81de40cd087b3c8c352a85e0ddb61f9576264d48c4bfa22a4cd70172ed3a6caf189e5069c4fdc4f8cddb94d0d94f7a1e1643493fa2eabc183e4753d0c416c61d9038df39f9cfae6ca801368d927e7a16d6c41ade4bb1fea5ab8cafe2b49111cb4d896cd4199896186113c87e1e88d0cdd793fbb23267e6f6c9fa39d8530ef9333312f366637ad6ef93d10311c6bcb80e4870fe7831f3 COUNT = 32 -K = e77437a1b6a9bd257369c2e9715fb08a0c69657ea0063e4173bccf13f2ae21a5 -P = 244fc4921ea929584df28732a6728f9856d423fa3ee01501ebe9554f8df311c71f6c78d38b6e4cc3feb54c5e14696a51289a1b8cc9979cd0c59611b11224fefd1e6c31004df6523af3be9faed595e7af783dbbe4bfca74f5e909867a2fece04438ee6cbf50 -C = 27b094488e4a1ea56afd227518eca52016194bfcbb125e74e7a8d597019a413ab9567284d5ef64ffe0d00b479830ecd664a3fa92ff11712b69f9a0769871c545c89b0639299c61663bc12d1271e93a330068405e57ae5fe775582e25f61e761ffc850a8df3cb870ddeb3b5ab1692f0b2 +K = d7c9ff0917613e9ad05749ff0c10971b59af7b0dff534951d38346babb687dea +P = fdf7342c66c1893a18f444558f8367a36bbb12baa1093d77e16b85ce3b028ffe99a3f38f4bdf15b058ce8c121ee78bea07884c49e63e12ec9706313c78a1dc96a646be6a2ae043ac5e0d809a6e2cb4d9646a75d7c1dc080ff2fc44c0150b04ffa0db1412add0934155c1461d5934ec3283374490426af0b42f81f37af27c06c359fe33c1a2e8b7a491eea3162527ee375a00dccf7cf39da4f9310172b09263ef44e5c51c3863b569b3a1a3a1f6911cad62acc2d9da4c7f584116f041e11d30d3eaf921b7741b1b05d3d4a195e78a05332b5c9b96304fc87c52950b4eb95ca0820e74b151c7d5a4b1df8f6eaf56f34539cabd3635589fd3a00e7db1f5e29ecb47a1bcfa411cebbf2e0a136ed8f5cd0eed06e593dbea6180920a201d0551ee8527065f881b9a4ee7c861107649f54c52fddc185856daccf6338b2f55f1ffe106ea111eaf3001051796b97fe8b9197f8c5444cd86bf31af318c6ea2499abe681de334ca79d1e69df89b1ed08b7620e70a0ebb6a859aa453e3733459d129a4f8768c7f815c4aed43561b61fe1b2d9b9e9a7835867c3b97c8b27079cb77362431382c085e1847e806b18571bd35495552627617d838bbad808fccc7051785aeb68edf145ffdb3420d9f961a7db246b37b14316fb0aabf1f60afa16937a08aa98f5072c83c3533b476146a3bf2b8e883094a72e2ca3e7b12f7fcb393d754a8c486598c +C = 4be001e68d906a7d61d43520601724be8f7ba13f291069c77f27c9dfda92f3ebc94f1378e5400cf03ef90d89fd4e7a2bff53a607742d6d2a989cd1b950631ce87eeac4c726d0ebae41fac53ff82b1d83745c8245c895b9ec9166aeb41d112ddfb9e06a36098bacce2ef7e8b0305fd76622f4b2080187066af0d627c9acdeae83063db49eb60cc4fe99430e581bb32481a5d7026f169edc25ed342739f59ac5795c5b897f7ceed8c7f19da8d37b6d0293d3fa01dbec0f70b703d1a16fb6966a80c76878cf5587e8095db623bca53ca54ea38a4de22005537c02612527613811819b7ba2c19b672ac893091b3ecbf5c9bbfaa806fd1aa2607746b6c27ed0fb39ce8549db2cf4d39b4e8286bcecf0c3b6a6bb2ae27463826fd8b99a038431fb4b6ae633044227737fd060d748b53c37ea5eb545cf0a082ab8dd4f825c4f64cf84a5b9ff6a3e29133e2392dd1fb8050e397da31b6912e3c45b6bc8356ea2de2d2ae63445b6a318a8d4636f10208cef17c065a4d616519d5fc42a3a2b4da835c936a208f11a27aff517d27d5b60385e624db32733a0083952e63f29a697f205158bb80d70046853871b122fa41ff802b1f61677a307c79712930ebaa784df304687311a475b3783691d4c2e13cc941572952b886985d00f3a5424fd9118a1a1ebf6807bafbdc9811d68ddd7e2185bd1beff6d4138179eff1133f722105edd8377ec4ede737a6b28dc2478 COUNT = 33 -K = 54522b72cb1d636002c9cf883505cda91622a21ee79e3af527578e46eb5d53a4 -P = c3a1f5ff0754c813b6f36059dd3726f9ab05f82108fe2403dc8ce0e1a7657df0dd9b2a8465ce54681d742ed8d0c13a6463a8e9c87221fece51c34d35b69df3e8979146e381a66011b0c872247297e469683ae7f5d1b099d9c46b8eceae0a7d28deca202428 -C = a27ceed0ac8c5a1b17c807b0d3f697acde6eece050cc69dcef8bf99009ff83704cb2d5c47d6b362885efa3907b5de4f80e1dd76a78005755ca7b75acf533821f62ad9ff4c9f62e275ad496d6e1a42ca20be2ee9bedfbb0802b8227580f6658c1b823312f6e6dcc0ab0b50ae158e2f09a +K = cf77238b7631bb8506a8917cb77f72e7f5472e2138e5da3d0370bae82187ee48 +P = 83c096358413e7d07bc578b494264a6a2aff930361e89b973a06290d4f30c09e8fa15744939f5dec02b812d670dcf276cb5f01c03563e6443a4c14bc9bdfc71f11549cc50e24c81acf0871f81829193d9a5b4cf95172a46f6e74813a249af132ba082cf82a232337569a5eeb9828fb24bd742d140a00c0b20617f1cf29f6bace1b69c32ad2545bea3413dedc4dbca56971e2a532e7e261b68e65b3d73a3f6e982dd63aad9ea38f87fa3eba6efa3ee9e8d46837d604919b4b0548aa006ee7f04ffbbb058f0226c649eaa45746b7bbf7e111c2397bf9bbf87128cd7268bac2486e2dba3445e302108d229c7834e21afff8d7358dcc0e65777a76f283456cc24efe3c8a979efb24949d4084b62a2ae7d2cac1896bf814f8c234d4a1ed21f32c1abdffe20a7dc40c9236169613b13026046705fef88560f337d3ffcb8f67cbab3a84aff3cf42a3f9ad5a5de7647dc55e981437e428bc88b18d9eb3b84196345e203ea6b8848eb28860ecb1a9a3713d69591a3bfc21a2a48764dd0a9c0957760969f46690602c695644f5ba431039dc5f34fd15ea8c2bac0d3ce0e3b0d1915234fea8d29d7617bfe86070b510632bf6281ac9a290d2e843278509ad2b83385a16fb389c2a1b134b1e29e4a7d31ec75f231e2990b6d2781d2d2135b9ae9c2594b7b8c20227eabeef57ae0f206989e5c55dbd848c7d574fe36b219e9056dd2f0ec06c61 +C = 3a0faade5001cfa729e8b619b8e961faa53b15da2f09523723cb57a25835730baf32c40238651ae19caf74e4ff0ea058fa3269d3f56551fe3b22cba5aadb11c51caac8439f571347ac224b92ac86175bf6461170125c57a95660ea279e2faa3c0dcdbf37572f210ae1bd18d3ecd024d870973eacfdf1832dedcb3b095634588996ee310a459508e322675e6aa3362c9a879e52f113c94b0fafcf98cbedd0766f0d0011065d6b628eef2a0de80acf271b3a037ef9402e093793bb37498939bd08c1d93390b4b7a9eed33a23a45a1320d40322e164397dfd69dc9200e293605fa77cec2479aa279083008df289c10e338d23a393dd69bf7d65564bdca3d1e4933e5042fd0276852e704561485a4d48953cefacef70ffa5188a8d8b969a533624c8de7202913de82f9da7b738b0b7b1acfeab37c87187be464fc61cb8aae0dedb4f33291a1ef101e67886944ad2b1b3c38e1ad31e725b6b739be29dd3d59ecc94d256f528170a2ce5ea281fd3df8f09ce3aa245ba61b78a132aba70c3122df752d03e3452bb6f3ea3508f1b859faf0b17b1b6288a41f83fb72527e8ccd7ac04050e96c014a0de6b98bd125a00c91a19d5e4a18daaf03d168e163872f599610541cff2db294ddbb4b0985b9b8cb3cfbbf153a609c5ccca4fdaa1b198a901aadb528f5d3448cbe5cfb8cd413b8b63dc6a76dc050e58877605415a4358738c3da4b6ae33bfeb25129b5db3 COUNT = 34 -K = 1381ee789937c91d9bfb78e33cda3ced29757f81d524e0e1fe5e3c42d8ead02c -P = e1e7d920c3348e90f2e3291d13a762f37d9dd96b4086c22a014b6e86aaa7488675d7bbf124b962c4b972eeee786cd1aa3478bbc19eaf923ebd1abb69766281c13bcb3d30df6a910551045b2dd4e57880daf3b89908b0b3a9c91397f67dea0b3415dbaf5448 -C = 95ff73736dc4291bffebc554d03d3ac0f4fafdb40e93d09f2571a01d4516ff66eaffb7b1f83d3fe3f7ba032eee71fd14703948c4f2a75b56f5285b5a42a5591a8b05092223948221cc18de099862798131fafd1f315ed981aaf181813790cab366197923a57c84e5142fc12305345396 +K = 511e91a1705873e5cb7bdb205da018b74064b4c82a54a32b6ac0caad62d4456a +P = d2dc94baa719ae7fa89bc81b90ad215ba50d7eb41a91c5ff89816af8a3278a921bc0300f751c687aaa41632fa5c02c28692df67f4879c882b85396624e8a2052a5d08533e1e0e748ac0c411cb6e442b62090a2e9655cb3945c5f952656fc9c75ec4444619da09bf8fdd6abdbd9cf51c6efbc1eaf14ecdb7a8dcdb5be52299fd2d620235d5da5dfb1d7fea29a6378a9ae65d5140f16350a63f5476859b389c52090f80f365c5803aec6542c604a473617e178ec6b1aeb0bf4e724458e1413ac37eb32b27db38fec307118d3f228de05c91426b9950350912df2901d3fa51b7b82afbc3dca85b7c08ea1ecb229f68892bba5fb77b55e1627f51580c59706e2e850be9bf10907089e9ff43ae8cc475ca33e7821eb29d6292d7fd937987720b1a30f51e82dbbb28be727b13d75ee77fa090d87b34f13e55d506f5ae299cf71597d861237d90ccd5ef57fd5f321c95a1bb6a2a0513841cb94a911ba1e2b4a33a122574b89786a1a60e63e47ba57586c757041202fc3e50843334a479504cb17a33512c25d3a466b5a77e5556b031f2d186679732ed3858caa2498ea1742c2356d345fe92774f7b58fa62727da0bec4a6f1b9918b47b94420806cea163702c09f00e996807abc50187fcdd8f335d75285d9e36860498d36f92cb80618dab957c3b4574e62c460cf65fd020d7d8c46f72ada18087e091070deba03bd4c1e15608ddb5f9 +C = 22d7dc8723225351edffbb58f42ba833ad55a0adcc67995d798da286a5bbde22a3f7e4264cde793e5c01aa5c5a64a0ddc9a23816f8d7dc514e1a92cb9e873fe6505c389e11ca5bbc5667ad611c22bea931df3c86869a409712dc5013b58f77d51caa24b58407a2d055b2340a875219dd48b3553a412a0edfd486875f942fbf3004524922ba9aa10f23d287a2907c7eeb8d45a818423b274a73a522a5168299ce2953a66ab5447f6087f9311a46a828d133a2a0fe4b090e63fcfd1654f636d28104da6ff6ece45420c80669d0c50d83fbf7a3bf89cabaec3929b640a20546d5a1d3c7a6e7bfde90a526f052178441137118d142e815b99b15f931d36d13d1677931257d0604826ea5cdd7793a7f17e33571671b8ba99d5ddf71e726a2e95d6f30ec6079532b85e997f1ce596cda6b0286478979431f66aaf12569b1b47a24acfffbcf7d9e73f88d13849695ea1112184b9569ca18494be2eba71c85e20ed8bf6c945af0b03c77ff5476fbf280338e3297da2c33367c79d9685d5af3d00660e3a6acd926df68897f77afdff20ab6aba7a3804590a9e25510ea3669cd551e155347c36dcb90fae751c79522efef3edeb7e9a2fccf9dfed73dee1a3ac59521ae7e390ceb154cc37f05d54f0bb8481e573e2641cec1a42dc89dfb559615c39650eed861e7c72315e419e72e399f40a99c036da9f5c2ca7a4b1a171046224351ce10121053107781e90304 COUNT = 35 -K = ad26ea31668ab9b0ddcac6069345e5d0ab931539c311cc540d20482fb796371b -P = ee55a79f100e2946192d548e855914176d7fa8b053dc60e49cf8534e003283d77236b9e0fae52dbf98dafd5c4d4bc41f13a2ded5c70369acf73c7a742dfcfa9191139fb9fb785b1ea45d14ec2d972717dfca7b20261a5359a7debb6f6a275df200c84837bd -C = 6be468b19f940e9bb9e720ff0a8085359d065290135132364622a2c28bd03e2c3b0f4d7b02594b3367f0801cd78f1b9ab12e451c6a1e7a18fba58d5359edadd81ff6727b74528257f0cc096685097507bfd0d6d3dab657d14e009099080edaa26f4a24f4f6cb0bc23a46540283b2cb8c +K = 2faf4ca9746c7a79f8f0cf0bde31011ca4a1ac6ddc57885ae32088aee123c0fc +P = df7a9d9da6acc06fcafd5e228bee8bbe5bdff0b4d794892f32fe4be3626b5772400c4f39621073c25b15f7e0426180fdb987817a8301a1583edefea6d4f0fc194b39eaad46cac614f16c90ee3ba5dc91d807f42ffbed370c57a7cc5d9f5bee83f32524057aad23d208e701640d247ca9ae1541b3673eba67d1bdedb244a549152ab46c4696c184ea4679f6819f050d252a581bdd591b7437e0376b26436a2a306b389583d22016d4ec442a5f7afc28afa24c276cc7443acc19502a8c27455570f6e85f98a0b3688c598777df553ce37ff2669a481a6c99fe132ce3a941c686268dc69fd48616398bee8c912b0a9d142ea6cb6a7312cda2962744c32ff09bb3bf37f068fce52dd4f260d0e82d5a6d1a875050dcac503249a1a7eede15305e845c355e46e804cd7f44223e001618947c9a6118db2d3f0c13820a530633b8f7a0af042024a60e0d92c28a4762460e21b0636505eb1043f0f41abc28d563e551810f3b03d9e28d79c51ae81cb8778a1d1a976e26792f4ecd28d5359a184fe2b5be083c50c4c6c15efc611369eec0bf1548a51c623cbeaa0626eb6e4e799909234b917df693bed28d14277a3a4464e94c15a089e823e405beccdbcf7a9e9fad01a5d3031b17c722341d6884c77f78a1840187c49301730f2d2ad3e6caf6cca538fb77ac4d2305a11944cdcb9b5c6f2787033552e5eb1b6aa85a1512d0713a3bbe4064 +C = f29fb44e58b23ad0f2c741b63f62668b61b7507084bfefeeb332872490adab0a8eb9dbac64526b3c97c1293a01c48f881b2a045d8b9da4e9d5a0bdcf24f14d6460f8761664060e1e3aca7ba7fae59b0b8bbcb39196e2d88f7e2093e1f51b073b31968e229841db4fb63c034c36b8f2f5358fef5804027b69947d2ffc0853152aec20a548cdb7c9b67c014d33ee40a11188e00057a1a11fd8b6eabe82c5df8a1bfabf699f50806262be06e4c674c7e61e776109fa5a9d9ca07501a4c93adcf741abb85bb535df4c921488fac1cf7a67362d35f173f373c17e08d04a50d5e81c7549bc0791c06d2858e3857d890ca5e5135adc8d32495210ffeef4578e9ad566c4325aec981026594097f914d97f19ae7d168a92ab905bd02888957d42fbefdadd31986e11fcb4959c11d16fd3acf146cf0e5710e3b9bacb24074c1e1aadcf666d82c9236b60bb7bb06bc6364863cea000a67d57179a6c9d6d210fb361084b0761294a8af213634d83d8eb1eabe45829248f75cea79b04f51a883801a908d9910c0b508e55941d5dd477d6f52248612c221cede6aca67e837355ad1ae47522a1064a06b5c2cc474fa25d035213b6423e0e477a42b9797bbaf406525544add12acc3d40d4fc4085baa17c5e56174111619cc1386a6327f01f01ac4d62975de83cfaa144f2ae43bddc6885e713151899bf6ebb6d8e8eb419c87016e783502e11898799d91b931470332d COUNT = 36 -K = 7032498ec285f1beb97174c76c2bc9266c060a5ac3dd0e8461839a316d40348f -P = df451f951451414e0dafdbd517e3e78e4e3239deb9f779ded2087dd1161958c06ce2d01f012c5f65f93aa05e4a4dc4005099ec63959a6310b43b23afe17701c144e6a14d22a75c550f997c61fc1a65529468b4c2a66742c446c5231ee88be333d8eb5a1528 -C = 5f4cdd12e2a0932c85f32662d7038c901040535a5b7b6a599df28cccd2abab81415b5e9374d707c520796f52ce6696cac4fbad4bac9fb0141955801bc185eaf7a5762672087c80a8de32d7ff835c1bd71f7b66b3a2db220bc11919cb697894b5257557b7dd944b8d2942285cbee4b7ec +K = d342a9dfc4656381c1e99d5748508e2088ef5f0f0f63ce95f7f6b1f1b29f21ea +P = 29947ee36233b3112939e36bbdc30de7c7315eaa02cdb4285fe930c968497452c818adb2d3bf41324bcfa86890d9e00dd967efd2c1eaed096f614128fb1aa5cabcfd44f3a29122e9e525fb08532d0ffd56df0f10f1fb8a1a0df2eedd93315d73ee049b2c8c27b63a6c0201e840f374df726b0bc23e977da7b273cddf75aabb63623a9e81566fca9838c315ab956974b20f8e36cf7b611edff7afbc2d5b62ba16cc457cd0a0ddb26a863d8193b1591fcdd1d548389ba78a8b6e1cc2878dfa12bf71bde784ff5a45cc3f9c5db8f2d7142f8c8c7ba2821a654f6682cb3e706db07896d280d8a0c832c3dcb33c84396669aa3c34aa3b6c3f32b5d56bf4135032e8505990d0c0f2b498377ab801b3d262b12c92c89977dc091dfe9eabe3741c14f8acbb2eb9f8b414ff95f6877a73c9d2fe1c962fb8119382b49d37529e4df17b58fc05d6654a8f31e2a9dd08f75ba1b96ed8d2e751a87d0d7ebd53dfe2ae593080f73059bbee675e46bcd77056fb3c4a2b738920af20ac8a9441d02c5c45e6c19a53242dd91bfb9f62e4a258dc8e7090308e4b306ed499b2097e5b4b83e715843ddae603f990fa44d6b00462535387dbcacfdfd27c441089809cf53fa7ec96757b08061989ce435485e0025e64e8b08641569c5cb4793b733f5347c3f60915855a89093a4d46b0910cba351466234bdc7c3e01607fbd70cbb9b514bbd5688204cd0f +C = 754f3556db511ad8ee2a996ca54b908430962af2f635899e1e00796750d0decc3c5c0671ad45dcd92b982f624f68bc5940489d9fe7c3560bae97e14ce5e7f173180327937b98ce96373ac2f9036f4f352a12a8ab6f0a27985ebc0fe18c7bb822b13d5e6700107835f971c5662083c74339b7f2b0032ac0b547034ebcd2e04686b348e0f5ec7f8224827af338f15535afb998a4b04e5adcc548851b1973d7748d1ef35dd27bd31bb354a56f7b261fc839070a8ca8439d055048bb42082c1a8e42b126ecde08d416e6b06c8c218385330d3c73ffb271f0dad821c1e228234c8608951155e0c77371790e724c59d531c0345afd3e1a5933da2bc0d4087d3a8cafd9bb1619d27af8054bac68463aaa075e468b869ab0e526917ad59d95b9d6a3e74f09e98de70200e7946219d0dd4afd0fdfeade9d7fc9ec713880bf61e6e73a8c884dc26a6a81c6978518198ad87812dd7423ebe3e21a5ce203838cb287ebd8d7274b9b5918427957cc865e71f0056c0c73b47ea28ab1fe3504f2e5b8c8b080d0a348add3cefc5f903ab7f4c28ff5ea3a2b963c9954bdc2f5c9b0e241865333fefbeffd2ba1b6bf7e74ec2732a2b0749c6fb9620302143fda2cf569f3c469a8befe0a2c558f1930c0d343b3020232d0da5f5268f5424c6aa0594e3a93d6b69c314e66fb113b05d5adb3c1342a86ae73ea1648b5d90711bedf028b3bc0a65ecd3e0d6753201c31c08278 COUNT = 37 -K = ef9b67b4c32d6804b1bcfa5efc557ab4294d1df35adcea9c672b8992865fe71f -P = 9321b558cb0c96d23952e2d8084da241d016631edcf9a2c1ac36b4886659de50c2df12fd7b3cc1a722c050859f3889883068f3b9c5a63d4cbabbae343be5e8fe03ea0ab06c9f4b83bcdb3a2a036b182dc7c04af4bc3b633273107327d737e341d343a9fade -C = 936e3e032bf25210171deeb1519ca9465228e5c7e199f6b17f37bbfc3c28bb25d7b22470f0bd23e0fd9bf4a4de1460338674d9089e9176dbd1cd6ee6e9a07d63119d8436079f76973648a48a0cd418365e90d8a0b3940d5375df13e4d950c8be1c690869a9110319904a904a9d2289ea +K = c51476ab86a30b20b992ae8078e755d0c1605f0dcf217890ab53b7309633990a +P = 5a65962f30abcd3abd4ece295351890a7946fef33ed09f1ad5c13568267007cbed6b8a4aa4aa6d555b5be8dd2c597e1876e5b7e5f8a2895affcc97f66af50e3d8f2bb8acc6e95fa22c455d4ca3036d632088c01e798027a852a2518aa4e975d42ccef6b4a06e6f0f2a13113c16675f0220b8dafc1ac671e9e648372dd690ce5e92ad00f28342cf242978af1f2859149ca4fd869ef6d1ecaa77c74a1231ed0864ee930cf3a8ffeaec52f91e728bc8a9fe8c0a8277d2e7290bdbcc3c00568f8140c695d3428a1ede3ec20cfc8604cb8f49f467c796716269bb6508b55a6116318e32956e3ef4198d82d31e0d944a9cfb5b7377395fc5083f7ad2dfc17938030871bd503a497489807dda0e87bca0fe99bd598fd1a50041ccc9c7c5bad7550789544cb22bbcd96fa119cf466d2c75887c9b93554fe0dc8d00cef3200bef219f01f3c1502e9038c9d8ec8658e4c3331bfbc672c5b93bf8243f8c14cb3ea24df94c6179a68c4de7de2d64bebc272effb7f6e581ca4ac3c30d19fb18a410958c8a54abbe2eea7da6a4449d59d607653ebc034c532cb695b24c46040eb193fd4923bfc51c02ab170dde3859a970368c3e226ba1c5a930653615dbb8897584a61edfd5edf593c8f9c8d27eb4fcc4903d4b56f62101bdf4e9c206ba68db70d75e6f2c3d12eb848b91c151bbb7216cedeadb550992f69a723c01993f9347ed7ca3bcea9cc6 +C = cacbeba87295cb1159c9e10ed36963256025c9351a632ad0b046b90d40a5127bb110abfa55dbe14126c4c7c34a48f1496183dc1977fbf61333df7d95306b31c6fe9b5e9d5426b5b8a0f9801e62aeec2e0bdee84b75e7d9a299a61dfc6d4159b50a79dae773f96692100eceae95ab09e045111c9af71c2cb298d49342ad016068274712490917c7e28ef9bb987bc13dea8f7efedc0857f657d36ddac8d5780b35f4372afa0056b20b28ba709ad281dff71bf6673375368130985e985404e0291cc033702a29b9b1c5431026fb77f8ffdc9e35402a99415fea730d7c4f33f15e60f6e5590b8aa40c6c760cc37e6408448091a106224eb2993f9cb73919bce7e2b7532792cb68cfa8509df8ef06779c5ccccb193467888580785837420d96a8a05039e5ebaf8f26366e5a13a08346f0c60bee9a056c1edf08256386dabdd05c4c1d086236d2dfbf589c3891aba7b42b56fa3339b5385ef2eeefce7244dc134529a0b186a9014d71ab472c744eac17173d015152d53210ae066938748e1fa739183c5670957e2c240fa2f726a3d8c0a047b15ead5f2542b6674ab37b98b60a6f247a1795a823d2f989a644125baa0068a8a2b97d68541ce94371fd4a01f84eeb3d860f5f71091dbdf16d9a05856113b6bb97b0c386fc733adb92dd2a7406f9c9c19bb3f9d2ffd68ae45c276877617a1a430100c796cdf921427853ba226348df1e72ff39380073cd7ebb COUNT = 38 -K = ba6aa247833a621e0138c714462ba0512a7ad6b8668673a2f4b6cf754ce2c090 -P = 6b0e2e206db6af39db451b03f0bc9abf9d7d73efe22885069f36e8ebd3a57747bd7ce00cf6851108fefd8ae856ac7c68b7d6b87fea2bd91fca2d845ae8c9ca7455a04595e7d4b5d8ee7310dabb2584a7bc49c888cbf956d7f811793895c7fd9838874dfbd1 -C = aa91f0ec60a38b3aabe4fc46bdfb0eab6fda328b57f52a16a3effbdda2a58f8b66712b25c4ac99345f490be213027710fb574815d3392daf388c237d486b383dfff590f5c733a4ade6254903eb0c45d8affdb6093d66c47450e64224f98d8918e021b3cf63856e118096da6cdeafb759 +K = d54f32bba6c9d71b98fe4ea20ec11b82ed5c88b6acc1985dbf0fde1b7064f13e +P = f8d2f3782b75674f45dc01cb08a5b51afca1e5f686737f52c30c54b97e7d06bc60de310c6ef21c70ca1ec16017bdaa2e3afe10f8ea3a863a45dae2832dcd833f31bfa55e84218f748e0df60cae3dd87f5b0ea4b3add9ab375577926b2ab6a376a1ab792eaf12117f91fb0108918822f2ab3d4ae1f7004a9ee7ea5cab0a07c9011c174c407db1b2a829617d37ef46f3bc9edb9f9864423bdc8afc43cf3114e4c2883e5f6a7aa16ec62d1ff6796e7a7eff81e4cd91646594f92abcae8aab555fdf019c362f2ff7b9af4aa8f2a626488362c9cf3e11d1b90ac2b81223be7f6a793c096beeae56bfa21b3a189771024d38a32814db8e16d16f31208de0455815a3b7ea81a882ed736519717a03bcbf39565d533b7d9621c09e9a2b813cff48baedf8cb9e7324f22aeb083039e5dcd3542bf7059a7f2868a941bf6e69cb127b1ac333947dc233b1248bc200cc9d97520a19c50b9ba7a889e9f19ea1eea91db0864d78dd258c35b62b10e0c6dba5ed63708d04a09884ce7b1b8bfc461e2487b97a2280dd8fc6f0dbe286b4d9e2752bd01ecc033b82541d55b2e7aa287d57b8b75536d72f042bd4485d7beeae162f08014d621a6f22a825ed4b84f74135bd2a7f9b178a931e8066f661bfdf7c5341f7ae23150f9fae49c2fd35c6c5b4fd78119a8ad000eab8330018fc82c3ab4b83908529f6e6d0e073d221a452a7604602fde42589b8 +C = 768b32452a0fa7c11581fc84e669c466d7eac17e87b242a147c65d819124f9e9a2c3d677e5299133bbae50e908bf0831007de413362626a3f2756c465a1c14eb88949c5631a0e214b222751d9c36764e438174300b0b70d2dfcea64592042c0ad33c8f0e14e8d85385c8a91c45d9b8d2b6c07532a7a4ecf1be0305b494b65db2a13763e8c5e0a65800e877aa1ecb10bcb84aecc14217583f7707aeeed89bd61f4630f8a1716a93a8328faaf5ab5787b87af8992a77f8230cb010337dbecbdd1966cbac4694ad225293306b44ab8eaa20e5d0a90908af0fdcd1b2acf189bfc84ee851b156424036c6f6a727ce6444f34aa48c52c459fc484aa9d790ccc941054bb3595dbddabd65c77b47b3243ff1841d71f67b8231029404251add05cd38e7d344b6e3e21278dd946aeabd7f2a8a2af82f65863cbecac6d8f07d14434c82c8c1a07cda02b3bc59d61e5a746ae57a248cac1b7ffef2019f2f5fe648c38d20737db06fb196fe349a03610a6507865d29d1e80eacc8d2e773741113ce894201b7d39bd3f4081c37df2e4b11f84c008621aa2d49eecba4c8f7c2a51ade0fb6a72815d72a4e3534db668d7fc811c57f30f89491139a4b68c6ddcdd11325acaa6df6d1453c5ddd52437c9f8b6b58745ecbca7610bb7568567361331ccf4f703ad413507b8c92a339ed616bcae0bb58d1aab054b485b60003d15254e048ad94430abcbbe559a2339a3aaf2d COUNT = 39 -K = 57c6b699bcacb3d2e120a2a7df3ef2e0c45f197636ddd6f060b0f55f05304187 -P = 4b8c990e9e307cd0224964ee13cc3bc4f7568936aa47389fb5f6e01c64dd2a4c2fb00dbfc4928c9f0d56296d6d58487713fea4738db00fd3a97f009f47236503773cf2a97c73aa22173b0ba6b126254c5ed1124a16f2d22a16796a211b37ed99680749f4c3 -C = ddae73419d00f6d91f1a1c4a0c67198a69a4fe4e41b0e826e74508ad8ae354cfe705bdc4a90b42c4f73a9ff1764d074467bd869e0aedb2a697878620f7edc9bc0188d9c86033ec73404bbdcb10c77462150196e1a4f9f661582317d79ccaeb581534f37c9db33c083ec956fe129b044b +K = 219706d7d0c3eb23e2072de8fbece1888b69cc5776a48060533deca06544ded5 +P = 0919f487e40680ea4f8557527adc3f68644ff94770b31bba81d6580ec3fa676e567003fa9e8ee33dc5fe6a9f1f9f4b7a2fd8a30f247d20fb1c183ca5e6fa77fc8b9f25e92b6672381f92304bffd2082e437be65f8bde0a889a650ea96a9b386f84913d74a2b95bfb71ea5aa94b5c621cece7608315a269c8ee61cf09faa534aac8a1762ad2ae9218819b75f0709a77932c185aa6cf6973129a8a72fc9874477fcce4b875bc638585b66a173a9bc809fd65d06bfc26cd90b052547bfc3ead41167d6b9f3e7d7109fb598da92186ac19d1c039cc56a06464143f36c28dfe8da6a02be0720cc82569f55c6e67a69889a005c7fc7e1dc939da2d8d0528ff75fb15905a9ab904a80a370f033f392736fb021c7ae5e143d931d085ab3b46276db1e76a039001c90b44f5fd4c96e3174042956f7766c24e65a6f031ca235211ea7a8099d8421854fd291c589e2432b0184bbaaf578ed27a88ec99e0a9a049593952ad24dd92e874e595edbb527cff10559df9bd2d571bca2bf877f07b2ae5e3090badd0c404e719af117c1d6d133d00511cc2b02a7bd22ce0efa89b9976633e7e758040457ba10edd9f913c6c6fa4bc565390459fbf27c44a79426d6afb89ee1f6c85ba029c75f96e2111cfdbb34271f2214f5d19c8a352ec7e587467643f11de4e04585592baa55e4159c83d5f4110f6090ab5487738939e1d7885f05fa999c08db557 +C = 038d85edda261c14d85927d044169dfcc99b32a77ac0dc48a1c8c66e9cad612c51c383a3ad45927c89ac8252f408e26588d0f719d1efd7be6261e12045fcb34bfb6ee389cc3f040a19681140447fd7db598f4439299b8b090a19ec52103d68956adbf4c9416c089e41b0783eed8eae6dca63376803682cd5e0fefbbe94faa41d7eeb189a7b51ddb0660436e88c231109f1fd0d914780adb7e9db324898009d75467e406df1fb14c70dbb0a2776ec7eb32a8f891ee43d618a4ace994609b407ab829c6eab85bac148c01ddd805b9bb9f3ddba7f601691e85de7825b05d5c1357561847c3d9d488d4f93a47699b4a4a65784bdfbb4af8e35bd51da3ee6e46c996200270e4105d61a3f486e3332babf11056ac3032a6a7ff840ee8b8c7b7fa8fc4def168c17d1536011dd7353fa17abc3ec3998fec36be96f86fde2c33b44bd1a706c575ce3452084fa51d29cf74853e0b639adcfe00c21ca2818e4da1fcebdf0ecd4532be315d9740968ac2ab014a0e8835c85282706a8b95e77d87f3ffe663ca0aa6b258005fe951347d2af92b4cf13f70f9b695549ad00bf6b11e3591cf06c07929cf4a225f9d73c713e222d33ed4f7577b4b91cacaa7c87b9bfe90366e62c4425c153aca2b26ab4f9c24fb75ce27ab9d0ba6ba11dcf1fd8d236ea5414f83520264e315ed1b1950a320274fd3af2aadc02164a8e583439e0feed802b10bd0e905f820706928bab33 COUNT = 40 -K = e2593978694d0e6ff67c20a4fd045ab27881826c22b77e018d9aed2bcecb6349 -P = 70ce0c69a843e8d30561294d59226d533e09e5effbb59513b9110609538679e0dd01c84a9dfc31436995874eb6f371647e0f2624637bff92601348e0e48636226496be1cb9ff8940c1cbd65492b239e853c7c8780316ac354d66621775efe427f07e97a540 -C = 5f7ec2edf5c229ab3032c954bd1c59fc02a3d2581b03f22826b61c393a789086bdc822e7ad71d250a181aba02696d6710a2dc12aeda82fe2fb0a37e087d6c6254446ec73d5705e474779ce83620c049c136056c0272cdc1fa4d23191b4d36c137c92966f53f2b3f2df55d8ef0247749b +K = 40958d146ea459c359a5bc00c23419f33e07e5391fb93024a244fa4b7696a840 +P = acebbae2c0143f8ba6c32925e4c8bac73ec3df5094a739c5a17527f3573e62515360128beac4e3b7f46de9692efc60641e59218d50fb1cfef772a4ada0031137829be537b94f878e3114e84a549c7797307b22c7b940b9b563e1c6c225bb8752ba6ccaceed60b2fecbda087ca5172ea51e45c85bbbcf76d0a128a16c4a6741f07d4ad14bc39aa5420eaf9d00748ac59ddf5c903d29bc68cd0b7bc7ef9d8a4524ea3e12d2e0cb949d1e3281b5c689bb5b142101c3c64233b11d4560dc5f337a0f8f8800b0ab5971db1eb0854049bfc12bb91d6ca1c62cf9783e7092bad5bfe513ce9ec368bc485ee1c888abf63bb9bcc407033772bf92ab4ca4815b80ad6c3305999e759a68bb1c5e5b0f235545cbdb67c1f33baf7d495b0144ee73a7387cd3063faa22c17295d65fa75ca5d63f497c05faa764a8ef4783e1b72fb6f15cf413492434f95494f27b85c9da0db64eec765a560c458492388a722a47c1eb8dc204207814b8041ad728e8b70142f6193eaa2a42fa5f46ddf070c546e8c7ba85a260e7ec7d79fb28c25e33b12bfcc6f056da334ad15c857e4a404293f51c52a22d917cde9fee276a648827e20bfb672cdca065f3faf09de588ab5407417c050d708556f40af6760d77b7c7a849d67270d321eafdc0adce5795972bb85ef4e9b96850780ef4b39b1508a07313e230c48b0489b36e02f0e2f53203ade31af3b2d9fb076f +C = 4c7a1c0c9a5fa2e87587e5a9a83406a9e2a1a752cb5c6489fe638fc25fc18fced21148cc4d92f9fd6f179288b9cfe6a887bc47ba889b9095cc55ebd5c975645c967567aa263bc7c489134afd378b8c7ecdb487169f41b056f8247205e2ef54829a803d234f8481d0bb235f27086329f4a4f2f1f08495310e02907aff485e67c99121965a655ef5f511db078b7f15bb667807fec225d57ad52cd2f743917ad0e603b5c247b4095ea4e52fea787f1158795a4fce23738601b54ac5ac332c62d602319fba0ac54b376ae8c70a591d09ba03f0e71a78c9028197007c4848300c18dd1b6c966f823829256900073a6da4dfc33a946289ebf2a5ba80d494476532a4bae4b39148fd50c4cb2e92045c4fdd0951a39a1306bbf08f611fd94730d56ec9930397a1bf022d26213bc61f8207c1a5205b024c3fa25b96ccfb191851c15161e1b2b9b427cd89d51556d6d79c826fb9ae1740aab2d9c1e9b380c09c923df96b1f656283c1e5dbb2517fa0f46f4c981183a4437037e7a371b978818991466b87a8676471e4f79cf6719574e582742d7c7d4d796aa3956792ff7ac188f8164e5f0d73a8629775c6d59199827f54b33685586643a0eacc6cd5463ee1c6fc42616efe9ac95279686360724a1ee5f2ac908a150d17c6ef70dcecd09deb1ee837f0fc407ba456b96411df517ddac51f94faa92819b44be0ae3db2144e3668d4c003d1e7e5744a51f686f602 COUNT = 41 -K = 69ec40db2bd231d25f2725529d4f24585d3023ab854ff432928906ba84273802 -P = 28f28477332e11e95e06ae11895b13bbbf9de141fd46b84d50d17a2cc1b1c16bd0d814c43e85c8fe6d690ab46bc838b68221144f62d9f858a3edc3fb162398ac3bcdcb8084bdba5494ec48b0d1a555cc4e35c553cc0cc77bdd240cd76fff668833cb5476f9 -C = 67611ce049238be634d7d7055814d83fd835be95ebba54a7d68c51ed5de56aafc6250bf506b8350fe08c0a16a43d1cb978457e02d9308878a512bca56c82addf4576d2bc8bbcaa89fa5a27f755d1d5a89ad999a6893a7a01378e5d0201004a264d106f44655c8e9b4020a75dd5222db9 +K = 1155971f3e91342dd95ee09cda8ce86ed0162f4492f20aac4b3f3381a74567fd +P = 12ee9e8d3fcb68540452249a5d5a0e123771b754acb1be8be9b89cb93f0c7884f70d0b1f71175fe2a28420448311c549cc5f105b8d4ebbf2e0ee09663043f2c5554959c164366927e7c3df2610ea7e661dcf275304cf2259ba009201ada6b96d988770a6cc73f15d7695a9a69d9d3d8dc774703eb492200ff720504e36939821a1706745258f155d2a6732f619139b978b900a70372311ccb0e662ec898b144ef5ef06b5bcc145a6f037beebce5f1dc8f9a286ac005a9d9de5501edb1a3919536fad80d4e0a0559fff78cdac9fa4c485052ef5a86160f34dcd8ffc815a62f064bb8f13eb17be7f5cee436a7525b7f8ee61d2158601d6f677113c93cc8fd65e2ca1d0fd6cea4153b2352ba0cd7a11a14821e29d982b805084b79855d3e36596e2fc6219c12689a13e88e56bee4b0e920025876ad6c36f1b7edfe3a03c3e3e9993ce44a81187ff97cde63a3b9c3193f8325000f2aa1c6b6cb106ce5b92c6d7a506852c3031952dca0bdd952f51374e38c34740e875092aea7f71265896c3aa698b6bf789bb9b450d6fb2141358dc173f715db155665a4713e4793417f75f14e69ab7b69d011fc8c01abfac58688d3c8145b05199c5cfe16e14f8eaab7cb5f0bf4ed1a0ca80ca3dec09cd84801ef3b7dc4a88847cb4eee04a5cc3dae6cbae997176b922ffde1da965276ba430019aa1b62a63b53808fca8a52822b21d161ec607ce +C = b1388d53990c471e1e7ca475c7cf235b91a86b8cd08193cd0a3c9528751fcb3f50d8d3fcecf0ded4d74372a057413ba5bfb9e3cfbda04f332f1b8fb56a4431cb8b06f60bd62b48c46da221f6b8e4d8bea71222014131c6267accc15b0a44b0dd91e2c11fd3f4da1434799a23e8e965e9289292d01d1eef53df250ba683ec92883636520fa5308b650e6f9d57c95864d3aa73041a3e78663fd717567937a885c9c8b0562faac5de72bab0c6e2f8e511e7114b83d07030e767f3e2cb19e483274fcd763d521d9bb96ef53800263383cf34dd66262c89fb8f189c08ba277ef0b4acf3f6ec67bcb19cbc83abe544da2d1266e7e38aeccfb4a930e49ffb6931138fdbd2f235c4d2ab319035c31af1f0d932cf35db1cd5524fe4a0ceda7e4d6b5c280f686407eb368dbcea32a70ef9c44ca4f1c149b211fb57efd21695b0c5274b4f4a3516647946a6b2d5aa056ea0412179a5f93f790c20c62b76004d97de61b168eb061e68f26006283c5448803a6793139e0ffe6f2b596496c14ffb23726b9f0ce02b65923c59a89351d5a2d77c40ee96c2a5643b5909f755bc4bd18c83af0bd72e139f8e758e0440ca346b018d8cae248a558e670bec8e4e894a316b2147267bd34b9dd8761c2d098af80e9119a6b1d39173b2bf6c0f6f9f0dfa72fffcb2b4e62965e448e9051cae577ed6d9a9f83deb0939050c7c8115f3b619a9d08a822108d7483605544ab34a32 COUNT = 42 -K = 1e42fa26ab650fba8c4d3521c2f02f19096abfd419b3254cc585a0250c827189 -P = 654f5621dd0234331ee15cc5ce1f4a7d3ab0f4f10fba07b16969257ebec9b73efba68c75416194055ae8dfaf0c7b9f4ac42b2c7f16785d99a033acc540ecc462afd0ace72466923bc7a8b01954831ed1f908fd215816abe1d01890e4addf4bd6801a0ebce7 -C = fafffb80b140912aaba9695d6dd814a56836178f38d1eb1d353ac1303b8760947430036ab1220c24af218be27dca521a57afac58b4903cd77d879664c5051e839ed021f3601eb4dcd07b24e044e794b8a87e6aa3b4e5a2afbba0914ab88a984ec4003191511140682e2480b76e4a4eb0 +K = 86ff1d6505a5b6bb8c3a470d7775cd261be3b12922666c819ef6b257d2ac0d1e +P = 9a7077845b9c4f1e59772feb3bcac90b0010a74e19b8a42ceae3eea175b2d7caa1410f4e52b6e7723eff2702c0e39c00e71b271be0088a2eef5cdf2792d4d4f5af915fafcbd09e08386b0d5f24f80df7b4390a90621c8ab4a9a37815cafe6cf3793b7dcddc402623b2cf0f78b3930b39c81d2c94ccdb3eb0b9ecfe5f1e7c6da4cda923bd64ba205516c23b513cfe762f770bd0ae59d9ae0d66a123c678f3d7cedfaa0d3195bf91f6ff5637ed22392fd53f4a7c420ac3f5b84a847b654011c9ae82e34d3e6b529b3517e51acc01e0745fe78b40f7cab8fa4eb2691b1198f67549b69cc98a96f3ded941491fa47b44837a5501a989d94d4427f7e1d918dbc56780fed454ef2c3a2b548eaf4f734c12d863567845900c4253a096ffe373343066df07e922159c4310557767a93f956532930e26e0af5fb5208bd752409330c16437bdd55bc4c06b3a9175362d15f93626c42520658dabbe6d11c214817aaa0d2767edddc58ff6f1e72b3e99d200a304a5f6cda2e3661858aa08802041555a52326de53b43da56bc53c98162548d39bac733dac3781cbcd44e9c8f204f348ef4e191db2f122c8cf85da1d7c1faba6d5e4b41187d27942f002200bf52b67bd92672eae28f3a96a96bd28271183a86eb2e0f9583ef320655a96753754e51d3b3cc760188a6cec1ad010d648583e9d9347b97ab72d3153e5d4bee7f159b96a4aed59e91 +C = abfd437b6b7c3a43f4632373f05c4995ecce5ae2944a468ba8a18be55a41bb32a2c0fa180fd77832d4b2ababff9625fe3e70f6515d7026bfc05da3160dcd5d0eaf2540910a83e9bc6cd2e6f1bbf49209ea513246e7f2fb826a486ce75a497ae7384fe6070f8c0da46313f2914b6c43a894d192273fdb34b949a850a3b5feaafe4f8055cda1ce6b223cc186980001c98cf44a871a7c7a6f54fd3f61346f2860ab2d17558da8b7181a0e832fb06c316cb9a78a6e7e55d3da1e7aa530391b0539e94ee36238af5895ae579bf4c325acfa0c8fd7b7829faae4d2aa3ebaf5429ac74094f3fa313f8c70c53e52d317ff57f7363f6c5e5f6481c4975332546b1b25aff9292d5eb2b622d89433591cb46a4d647da2ec2530f8b6a652568c2ec6798096ad8d1fe8bda9e44b872ce493e57fcda318c7be551ee02ed665e1fd53991531669a5472a2c49043c526ee036fff27d0570cb485e6f20c41fdde3428e039c5d117d40e3f32f296af903d37a03a1d2620db1f1ce7d5d8e02b84b625ff3a09f79e93b7918176cfc114c7c91a0e72c2531b5a77638c718409f20ec5b292093c361b04eacd92d2132c44e90cd827ef443e5f8f36a1bec73d5590acf6a6c5bd23cab46892fa4f84a2c2d3fe444f26a20c4a6a1609e2d1ce5d15db43c1c0640d9ab7a4cdc773553e0818c1817c3ba5d2c2d79d8b0d66e201bead0f2bd9d8f9b0b46a266037256e503ada6b2b89 COUNT = 43 -K = 589fa19acff1ac120142ed203293fbdc4f4e5528e4b9a768621cd2949130d7ec -P = 08493096b84b260e6b5ecedf17544db093b8bc4f51fb3bc42f551e15df2e791525375f4156f1218fdcf7308d5b9d968c36e46ebfb12a24600c7298adbf4fc45dcbd1a19cb2c3f4d1050ea75337a3dbc7eb18995e4a20ca9f86b21b21f38347fdf972ce6130 -C = 34626d651764ec819a7a0dad6b5fa600416cb8a175f6a59f3a47593a67cd1ef45afe9c45dcab42a35ede01bcc862b82a717e678f2bf546a6294b67fd4e87e0fb860782827d97281c029f4c2449f59c9a7caf946e4fa861059d95019e92c82914732852ffb5d86a9c7ac38f707efcf9e1 +K = 14226b56c59de51dce6f4ff43da2fedbf94e7f6fdd54dcf1965ceb8f0bfce937 +P = 85b1c109bbcaa75f11dafc54a222d6c575e436323de9fcc8d7343221da0b5b23e404c13603c0a83529ca9ebbcf58e6ae40ff9dadc1b77e8e6fed3b291c673035e2e9ada3e23f8fafab8574452ef643c1d7162f418e4b97077534f903c3d83ec07196d6968c3fa29d5d56963ca08403548719075a92f468e5ceda2615d82c9418b41ed49c08a9346957670345c574acd6b2dbb35cbfc3fa32e2ff60e8fba34531a9099e64c4ab6f188fbb5bfb082aad3f130f42e696144e4e161f180f44d26c6f62d5c084918a4f1796f31f1ec781ee04a1b2845c6aa6fa4956eb1738d64b5cf86b56474d96296f0824e65408549cbb9852aa9ac06ce83ada1215b9f76d1309e71d9edc50f0cf5835260da3780c299a7f1250b0fa247fab73eb13119456dd23ae5bf2aa51a19754fa6ab545e17173530b82865e9dc7c561e7194b956556831a17cebd2e7ee14aece0a0911bac30f5a8be25c7332b8d518f717efc1a6c636f523ccaba11c9535e35b91b99d10afa0e869001d3a3684763d4937c7ccf5466a3a7ecc0fdd0ed2dcc45a9252bfbe4c1862773493b6f9e8509294c5386ca6fb456f31b497dfaaca2d21e6e38ba91bd422e240a6bf6de7e697b4c6437e0025ed35139e833ac82623b969765f475b5b541034da2b2aefb783370951efcafe87ba0ca1c44429241ffc92f38d0c0490ca0e8db8614a8e3037658570ef0f5604246e632ffe0 +C = 51a92d10634d82397f84577b31235d6881e8c04915bb21128714b1d3ac9576e0fd997e5fc2cf8d193b22fa0d68da5ca2680418a6a7e2e09e9c1f117b07bc79529f7ad5497713d29db7deb62baaa9e198d6d01338ea2628a19606413104315ffe44cfc33bb275a6d4b728bd5502f420bfd229f21199cae47f5c44ae12f666f81e7349b55cb6392299c96751e55685d10d97d7be37ef4d99cdacb8260c098aed1917b04c5935e09ed06f2a077abb94c3a623571f1f8f9e7a5659875d53453b805ea52bdf2cd093abe1f4731047d4da06ae74f1abe669ebff23d8df52bad38827a84736717f31fd74f62e47d2439d817c678e910562d26138d8f066ae3192c432a9b7b8d6e1f8c0bb8d4cb5b77dba0766b7f4c6685d0d45db7e0c057fe87033131d07086677668215afbcef7c5493708e34fb8e9ff6d8c721dc0b4a43f062f39809a0e4182ae161e1cf938dc384604655d2ed55664949ef24f015e1a17e78c033f31397d4ed01cbb1457885cce727e8787dd2b521ae55f82a840078f9b34f7202686d912959043a335c0d1942734b104056668f2a3fd5f34b826ebf6729a39772c9dc6b13046aee79e84c31398ea9a4884fdfff3da3528f8e1950c898271d71d423317f944ce793e73519117cec77fac8d8c06e9c14b75095e5ba268ff5503872411decc040b647ee1be96eb6fe904534bf99221cae4425268c3a63d3d15459144cc93aa91946567a25 COUNT = 44 -K = aa173e4aa4b45b4cf5e1d9a6b7bc236cf8f0ebe819f2d1a06f066d82db478523 -P = 0f470e449d82437833736172447f2cf63c00f67e73b93613e68420daea2fd4202a64d49b9ab07b0d46717a87314fa74a41c758aa7b69d4010edba2428054d5c2ed1dd32b31c605680787d13f66508abdceeeaec32318ed5a20a881e2f12925f0d84e6a4422 -C = 9a332508d0ac9e57946e71cc33783bfbbf71bef5e2e0faef5a8db32e742269cb5253007aa6162d5a6b6b98abe25db322b1125d4e6f3212440e41c9ea065b2ab9de13a2f630ff6eae51db6cb3507d8243b4c20a5ee743fb5b853de3aae844527ffb923d0e7849355beb1a31af4dabb55f +K = 8a0c5bdee75d5ffea7624f2aa7296ae9b428378948a60deb5901816826ba7d3c +P = 5507d8f2f14457fd24a7950e45e7f2a950fb78594570ba66cb781b17d4beab001f8bfc70f70fd281971db7b04fa3a36b5dd9a311223f4ba0eb7c74d57c9f31860b6e6740c5ad058a6b336db17efe1eab645091a37ae961723a414848fc6099c88ed764cfa34aacff0c69d944e25d0b61de9c155149470c356d409ae4446690d4d41ca18c6a754c07e9b2d20e495eef4544bf139e4f6b11d9fd7f9e3b88e42c924d4217d129974059fd105e29067f3277d88649a9a5e254e09381b574805575c51c35a91f77e4fd4add55a14b39c0492765ed31652555422254465df0ee65fee7e449ff5d0380f86297036c693c5f5d29913740149f9002a43a686aec05a89befc3f714613224dc9971842f7daf71c6b9c5d8b37459ae6f8f67e2684ca547b350f405e8aec49184444f8a7802704a8d00257ff5032e6ab61b60e99da62ae546707e07d595fae238a370347352f016416de1c9c613118206c26b33f29f218e492939487d57566cf9640e85a2f61c0b6273ce2419d9ec2dc8905015fc6d1c9bffc07a227a843bc1aa887b262c89daa6c0f8473345b2609d76770cc3f529a669b1ad4a85bd584127798d886513cc65fa4af0b226a578f2109175de8d77f6f362d099925ebed36cddaf3d81e7808503285f31642fce0b558d6cea4f8a25b40eeb407711f5586d8eba73297b11dc3eec4358aeae11012873ce18980dc49a78eb49b509 +C = 6f0cf2184dd06f0dbf93dfdb8553ae7bede17480d1e8d7ae7d3b95f83a7956901ccb612b55e3f5367e177f5b62c0f44484cc17a0e4c8117650d77d2fc1b330a432433778bd1fbb453fa3de19a01af9563d8772fb74a74c5969a7376f135d521c2369852430646b697674ef212d9e5a15b5ff5b5bc790ed4b5a66e692779a14ae551ef798787001073242c321f1f42815855d2488184b953e68be54f982e31a04e8cbbf0162dbd8238ea9edc9377ad53d208f237fe64c94d0a1bb15025a08a0a8d749b4401ce4340ec0c322f35315c24fb29d5de00609687b1182cd323c2729349d1e6e85515a2ab8f9258b03d84675d41ea67d98b799ac107cc4d76d654b86246d1cdee30ed41c7a775166ae58e3a0210fefec0720e5760af125fc9eeff3333857ae1dffa621e882a6cd73e0639499842295dae1b1f9014262f109a9278d5573bc0854d9defd02aa18aef1da3f38219a65e163b844e61ca468218d8014b8afc0b178653d50f659ca1e2ffa8217b8173a6e93b2c770c82013d4231b957fc0179fecf8a38f6a889d782918add5e7405a147df38a67e6d6359e5d1017965c00da20df1a0676f359afee3419bd416dd60e0f2f1c5ac76f4ac0bba1506be30946530d01f1659c7ff849f419a4dab1e423812a12f7e8137b8200b9834dc8cc27ffc3668e6d38ccaca9ff61268f91c04c6516a4a7562050725c6aa965ea0b8c7596bd920b3ac9e183bc3c7a COUNT = 45 -K = 1c2c86c68f2ae5099607db077665f6985075ef509cf69c88e413f0f58d2ee988 -P = f3b69bd4cb17b0b95452fe8c5192498412010e80f9af84ba73fb2ddbcb4dee4edade4b778535e93c29404e90dbf1318b0c4886fad8d776e54471d7aff04b39aa4430cad5283ba7d270aa8be637b705c1f063a7c9199afa032c07878d57ae2cf7b52fe558f0 -C = 65be15fcbe52854e8b397d4c13b43dcc8b23d9e64fb5eaded8688f2d28f7586a75dcb3f3b36d039c4de29b80e2f08cc2549d331a20bee669f4d37c2091cc4b702a2f7479a9d77d3c3e76b74975c777e5ab19161cdff9b81ef38773ef1b62660917d74811d1cea58bdf5f53bc49442859 +K = f63d58bed8a2981fd253d698f76e3f4a7f8dcbd7b25f5c2bd3b69fb4dc470427 +P = 75f44c1a7bb3825db632b6776976fd3a4c266d3535b61406d44c54883049d827ba0a4c5c92ab94f8b612064e738968c1394a832209d8ce021622d6b2a0f618da08ec273b862b371dcab41d0f5118d0ecb48d86eb3f54f5e0d0ae3526ee8419aa649b5f03fddb18246cb96c5bd3054d138c9698fa8c6c5e591b781f2911dbef7c3acdd70e84e76f45b19260da7ea1256983fca2cb807a6c0ca950e225d324db64bc78f91f55390aefe2544d23236b3c76b4b73003e0182e1280beef2b53a0669189732f386197e35ada59247b82f965b00b5e78d99e61380ba062cfae98b1d355b783e564a49da9ce91b22ce71be83006530df6c69550f678a2890c1f48d6cc82eebca488c747ab59ac65ff5d988aedc7c4b2ac0d306cbd20267a5c56e60422544c1af191c7af989233eb9e6b11d7428ee52991f7267ef18ab1f3c557e3f8889941dbb358dc8ba2fe4e6c1d49f48dcb52f1587538edb6303f8da49c3da0c99e2a4e52c5575aebdc5891396dad3ace243174f76c6f054395374297ae5ee6bb86285c67684a946a1e2b87affefc9f51eddb90ede40046b7d7f16ae6ea77c053bd08e38b4dbba138e0c6dda98f8e978225c3e0491b5ba8c43e511bb44f6be0f09dc6020d9b88929bb46bd16334233b470fd025698fc0f600e05d934c32f017397df106c0839f4d9e02d07f3f8f30aa1fee16667e0b96fdf6fd34e26a68729db877f5 +C = 6fe5e0fa40e3926472701f2a8933d1894382cad57e26b9de56229697a3ac19ce566118e51d3aeb36b4279c751d81ce9a0049db77b7e607d74e7ec38ff63842056cc84109d1f4608ffc77bfccab54453be7dc45191d8021cd32e0c4db34b0824513e174ce98f5bfc1daf3b082717890e79a7ae4636186db47dae284c30be3cb83ce8f8820d043675e7f55639dd6ea51280ba3350446f26bb6e3c5bc9797b00d277abad52f7fef55f1970aa0d64a526be852cf4a5ceb7b17735c502118c0066dfa39ebb6b53dc3f52fe1c641c5584fce948f314b251120f276e98b64b966963a6b7b795a9fff861a9e5bec261a59bc3eda51e91d8d62a77574418eb426ee0be3b05616dcbdb5ab249b06225f2e76e8618112e7a5b837f18ca079efcd3df869b2492b1c40b22206dec9e7114b18a1572d0f681eca72c55af379dd0993a75724e3d2596e4b8d283820f0328a3f21755ae895a2be676e79773900e4320f5179e83104ad16cfea96a530d14b0254d01433988cd301f50d75d3f4e4d0f05ef18aef740944132fd881b625d49fce4dc0da19844bd2878bdd267aafa26ef57caf078acdb249609dd096c7a1b9fc5c31f6fc7440e5ad93e3469d125cbaa17ec5443d21edda412a9a12a4816d0902edf548e107a89bc72e41099ebbf773ba7ca366944f55208a3ae19833bb64814826fb3776c39d3f57654dbae00be9e4cd7facb09fd03fbe934368c2b4c9e34d COUNT = 46 -K = bfb3e099aa77876dbdbadaca2d68de5245e3fa8cfa3366f22735cd30c20168f9 -P = f1a988c1bb23c1fc9687fe3269e441fb25de108d870ba5269d4b4c77279087185a5a009574f0938557ec51aee07b18808897f3ea9381e3971ae2247be69d377402f12898b227f46336bcf20c6251c83d5a9334b0019728419315bec878e74e68f742b3f763 -C = 817b52d22cbbdfd140c7743d208ef6b72abf63807f753feb9d48c4b10f82fcf1099d5d19e7e42b4ed5fc54fe469cd1d24454c5a74aa032d287c52af4efa07166775f352417547792edc55390e934a1fbbbeb03394afc58199ab07dddc34cb2452c57c487d196fae3ddfc0198bf38a62b +K = a4ffcedf54324958a46c63e070cb412c7d0af7ac3d277d6f202d34ee2198acea +P = dc1f0a55c2d44fc489fdc0ce4d1989d7b30ab337e69e8795e911b7b61b28a4ac1b60c2a1494339e12e53dced686c4317d48351fc70310b5952daccea5fe48ed4d076445ee94baf8b2e7469dcc008dcc426edc907fc669670260cd72674c0a717fb6644a727e4f990690abd11baa1a46ce838b7c1f8aaf369da709763f5d25890287bc8a999073f55f1a8b7b27e49f838251cd772e89b86bb8dfc8f525131878b511adbcdbfc0c991c154d2bc71a375bd7de9ce3517cd86eb4efe1a1a61bd97ad86a3575d2cba9cff57e4b726deea2f00465a589c4634dabcc0862b813a2a6cf97de8ffa1b62d2c7e70003759584eb7dd7da085c58d3d536bbb48e76e650fc5bf702fdf3215c811cef3bdffc48e87cf87fc8593b321883a2e7a0488aa26fc67d89fbb511cc412d9b0c482bb007a6c5cd2331f41b7d848f21564c890a7846dadedbb35add7a520336ed2b2e076afd49bfb202df8cdf844a0e75d91d4934e4b27f43d5fec0b072df833c4bb6baab73a0cfcb9fe590c49f8364d088d74f0ccf4a4c38d36b8f7f5f1337f4ec2f0f86208995aa15d42f6b442748b06b56673065921c2e60c2ceb3f0489ee2d118624fe8939b8c0a18bc01c23d5acc477608f1616bbf31e265baad6b93ccb2ab5ce1a43666d57add51c8b8d93f1506aa5674c05248b135cab2c51d36bfb822a378051d2fb5ad69593dc41e331ce3d2a598ee6f50d9e82 +C = 9f6befb7672f63ebbe522a515fd02086c7431f94a70de4b233134398ab4c4095423ee4345214d72ccb5770dd7bb8b68d3825df711940a866ea313cbd579cd05dc2d75c2d58e4f5919bcd0e714aa6c9aa62de306a79bd8c9682b84a5d92e01296a9090e23061e9538f2af925c07e1dd676c56425f8b0913e10fb21aa15aaebf2d84901cde8496dc1e0e388014207e511eff9d9845dc6eec03691bb19ec7dcaf7584545f58d8e85df3909d7ee5575a0fad3dd30c106f25c1e4efcdc8908052ea06266b05159b3dbaf37f429b90325f921b57b7ffc11c1a69a5fea0d27ce41fa961c4ab3c482e0d18726c18aa0e8b6d618bee2f363cec39ba14b1e8c32758ebdba0c5c1f4b893c0d83e0e92599b58b4a193f23a4a01d71c671c9a2121ce5b3c0a552cf3e08f6224f06fbbd107a502cc0370edc25681e436387d0e38d4fda46693ebd04390372e568d2814a7269f8165ad7c6a48d99aa9401a4a311b58c5f84222282ee56101e5b09624d1b4c7b92ff19ae5b7c2acd9594d65879dd3274ac5cf564cf615a7739ecff3e1183a78e5bca6678a5c8503a91b6b397cf5147e082b81de77f46555ab43318470475b0242b3353284af68f357353fffe8fabbe92eb7f3a095d917900315bbb85c983acc16fea2cc73e9d2493d924fb2cfa86a5e33106151b448abc63cb06020bd27a14b35deb19ae460b609e45b9c7787f221d405bb9b488e7b88b4388ac0ce99 COUNT = 47 -K = fdd3666ed9d6013d848a7795feae67102c52149653af3d2ef42d2ae587051307 -P = fda15ff57db2385159eafd8779f397ab369098997d82ae1545bb3df17ded952123670846a5dd20f1072a2d3a84eb7886d35a81ca079863f65fc84a12fb9e7d8ee067276bfe4d658016c1b8163faedb82a710fc4875774df66effe1cb9b705dbdeaa4fba86c -C = 1edbfdd3ae3ac4cf43e137ed65e62919331007e9acc563de31f5dc003580324c328d1a3bcce7506002b7fbdf922fe03ff4414c0492ad7b34b717f9d7240c174bc0d96972d7bd19a2ece5a87973e1d922632427d8b2596630b1a889cf01b5d14b258b882300e57786c65210f9cc318266 +K = c61bdaa8e1ec6b076df0fe0be381352f2b1110ebb0da29a41b60274296b023d8 +P = 0e0954669d221cf9388aa78e976e930b7002225ce52bff7ac49e32d1e2ab77a756f61cbf059a120c322daa37af7c48582d2db65b56b2be0df261574fbbd436fa800694853d17767cdee0ca1645230666b50b5ba91e03b6a5af3ce37b6f55b793dc5b3c0a0d9511d295337135c24935b7157d8ab79c33b72115259d8188e2df9a1994c5b357eb302616da61668c11804c5b0d3a3bb465cb594627984c8b67699dc4421ccda6f5338088570ebee8f9caa62318881709b6515589d0c61529081d5a35d2372ee9450f67a2e26aee5e62de1e7b4179d0e548e9393fa2720bbef3ec8fb859572c72439f00cb03a625172cad962fd664e4f0234e206411a77be34f6de38aa67552ae209178ed250d89e38375974dd1c4c85e6c30e23c03ba90ea5277bb63705f9b4fa8a246c06b0ca831e6bc3981aa82e96a0b4fb12c57e6d6359d9a576df7fd420edc66c2782d884321ac41d3f19d21a524f55e96660ebecd08a2502e108dc6b4a6ea0c3d646a0c7f6b4f178b0c98bbdc840a26dcfb21570cd9ee8d811dac3d77ca60d1a6b710eb1ee7041e6e9ffb40d0d1efb8897e02f5e4d6708b7c3ec4571efe9cacb33c28ed592613aa79e8447b26cb665104d9b383c651da2a7c2899e4847bd93a9340370e7e358cc0ce91cadcc8be0a735c559dd3e3efb502d9e50a5de4cdbf5d1ec02fc1d37a4f74fb495d513b96d8d674ac13c01cbe4d912a +C = e89bee2c167b484c75d14903d28c7b9ba60173b207365540faf574f0191541e90111424b22674a1e6747b259ee6cc1aab77f2a9108daeaed89f3fb685fb8f8c0da6d38812292122ea6f5fce2707f978e8678f570e7fe015464c6fccc30f0aaf52a77f47abf2cbb645670f2db142807a03454cf50677cf9192b6c4bd9a478c756f12718909084f35c697b34c43b38edba4cac84dae985e981175f652685f4eb6ce1d68fbbf9986544d9a23803dd06b0733415cfdb7cff59e9c01385951c6f85f0d46938dac953db7882932aeebaec64b8d3b541244e1632df3746c41f4c69791c95dbe965e4217303b51092ee44d0600e3dd0b5fe12ae1b3c8fc433a9d13e5347b1be076963d7a83c13b5bde4dc43222ef26a92ef68bbfd22e9df8ac39ca534dbf8dd257a78862f0c5ac058a8644996280df7f651350a8d4e9e57b6774f3ee4b31df4c77b64dfd0ba4b1678361b55a70e56191a676933fe88e91887c2e12f0056172cc71958f9c8a3300094d3ca6682cf665f843fa47c5cb11e68f86cb7a502053034f0ec03c9866e408fe31a6d93e245d48aa9d1e89f85fdd5a9c33d24baf712deb95d69420e6cec643359780203ce3c50e86347a13559313d72a895f6552a631ec9a3834a6e57756767feddabd85cd84964bf335407b213fbec1d8f19bec88145d56aef7825066f9a52aff8f3b56534e3ac2366058d1e8fd4520b0ccd28315ae2ac4d3f701166a5 COUNT = 48 -K = 259b6806e56913b2b10984a9e9ffb436927cbb3f559e0437a46efb6296b4bbbe -P = b4a2c686e01eea191efed51d46340a9319b7fe1e54d6dffdda0bd19b26f9c60fdd6d7b0ae9a83734bc6a7831bf7962772117c3065196a2dd67f7109ec4be99ecfc3dd81a56a2e875801509573604026e6a8ce50e3f99a25eda9b1e48b53654db5e053009f3 -C = 339e9f906bfeac2f327691c5c5385728d00b0f4b8489f9daf88162d27adb8c686c769938546307cca5e9d51d7d69c5a7a0ce10da401b0a7b21dd532cabb00ff813a66808ee7e7b98194538603b77a8aa9f94adc19ecb2de432939b9154f27b599cedacfb500f92f7e8295e76d2843409 +K = 57c32af970a5a6ebda375842bc0623022c3fe239bc5b1603fd2c13caf1aacdd3 +P = e3c57e019c850bea1a892ddd0e8a7685581de24ddff1f1ad9d8ea58f494558a29ddd087281c7b0f9bf7e8a780f302e2fb21f220759516f83860f10a81cf225be190be7d93d834af4cd82ce7b69241d2b26460dff500676e8b3fd55bd37c74a956f820f9c52795c7e08f60020cc89f486d0ae8b62d95df23b309f1ee04225267caa38656fad4e9139553c02e69656d2f4786d07db4d0a9617b6695cb043b79ef484f96815cb924c369c49794c8ab1d299a68f11a73e1022743f094ad08fe6215890f476135607ba271f2a65ca565140e3d30bd0b1162fd7fd456939bf2c0dbb4b7d4567a43bc3aaae5292cf71a0e8e5d71e74c7754c49ac726debcc02b056a821acd8259c634c99faa9f2d61592555288cc4dbb10c24ac9e2dfd5aa8ad8a45992eb00c3c3e3f4b7e127ebf1a69b43d694ef7c40643376f371c339defc4571ae515af35f9f09530bce1903eb85baa0cded8b82729a5dd7ae024d49609fecbbd692c2da020aca32e20e34fe8e3683ce56e8159a2b0c8c752b714d8b7cd896d082e4fbe129a1a7055b5953b7e68894886a513b0af5cd80c51a279ca97737c0a95b48176fd237b57a5e72ae887faf45d4f9460de3ee3129bd1ff7b758ee570f426912954a6a712bdf621694ade419735f83d5dbf01b3d0cc0fcac5c5c959c6c2fd3bba2580f2a928450fa4810dee3d2c529c384215a99a2dc31ae9faa71c3959f5f55 +C = 5a44a31d3891aff4df5bcfb10f65097959bef36b76a3d9b870154270965b91ff21cdd2e7b993d063c870373773ff733b8b2057d503969d1c0884a30f63a42afed27ac75f9b7411822309e6487c0e01032fcd7d0f927466470a635b90d89b560246715d097cf7d82d05f3f8ab7d686cf87b97ccd4d3b097eee27511e6a41f4b5165c6948905c4793cbd911f5a8a527735621e79e1e433737bd054f7f99fe6dcd437a8a4bbb95734a938479edaa0cc654ebb9fd234d1f18e596f466d52ea698a2b4a3c8e73dc369871879216c611a294311fdb58293e60108aa7bc4a9dcd80685f079547d69dd89b6d052a67bf8552b0df7715e37a4e8609d9137b58ef11a7cabbc6abe9cf3da3d54d66ce9a8b9d86b32edc129912772663b9380404d4c99a3d124230055ba3129ad3abe5298a7330b9776ad99c8db94a652345941f3636f4b7126f60e6de5375ce1380175b9093a67372dfcafd42c182ec103145cc420458c28c7b4d23657a002b01cccb5f3b936a19a09a0a1cbe2726c842ff9f6e24403b74ef3544d3b2716d91d537337ad4b05a6a9d868ad935f3bb4ba6fc7fcc63ad9bdc52431b957bf4fc565849a51f626295da77470dc4ab17625a27c26204a0efb6e4cddd733caafdcee9994367eada7a8069e56ee655f6c3d5e5a02e89f6f72b57282529c59b94beb2d7bded0385d7fe6be92f2605f598d967e96e6f7039d9d74893f3410fcbf1b3bf29c3 COUNT = 49 -K = c2ee1fd4f9261614c898ce27e4605af00cff277f9f2603d9826f941b2b2af91f -P = a65c32a59ed55030da0ad1065249c9ba81f3c938f50bc4539d5fd7e0cf68510e625f7da3d6d1730d2eb120e36bc2b7b1db34d8b02d804c8822e9965337ec632c3179c3d34ab8f7ba2a134f72ca2d63f3d0af127fc785b0414e0b71cb2db49bee979b254896 -C = 86ac418d58ff8098ba5b658778ff3d7789b2fe689a02d7d4c45d4f9053cf92176bf3bf22aff1f0e9d5cbbf873dfc49772c2c2cf0bdbe72261585fda61a96398d2cfff6920e34274eac4734a7f7fc050be8a24dd6fa9a740b0ae5bc5c252a4fca1223df5e04ea72984dff10ad7f684da4 +K = 3ff6d59ca6988314cb5cea8974bf40460b2663c13131817e5caccdace9dabc81 +P = 0442500eae4dcda306931e168098ed4cc2d30e704fe55cef43bb477a8f040f3af376b44a5aa4a7d1c4a6d7fd1cf3de7edabc4c32b1047a61226b6cee0b132c5cf07b2e42c3723db77b03f30534e8f9943b6148066367a9e7103c7247e7540bf09283ec1fbaa675d98949bcc34bcd147813d268bc9f3d5b703b143ed7b1bac81f53e2c08aa9ded50e18d1ae9a6dd5a9fff8a05ef65c4ebf69b57f730d34a2cb45267ade6683df5a82b28ea886d2ab2a57588682bd21fd7118b7c8001f7c7a843f2a898d7b904834915c465d484b4cef938495c29c196f9d60a3e2bdb0d9f258309971feb4020784680a86a437227367f46e3d11e267e75acd4c2c8d9f42a8c53725e27126f19a0da7184708f5ccbfa6d332f8aa91303e90762ecfc4929f1d7ddd949e3ef1ff24ddf2d0d2d2104c049db671b4a7405556312ab2928bc934107084e01d4850bae834290d7c93efad03d9c11bdeb931022367f52309a0c5b0865578cf121e37b76800c3996c42c02a9b83790433a76c082b4365e6506f5e14bec54ea5c9505fe33be814c7f8626c1caf58e3111d0c64d8e2b15284ea5953e9ab475462e479d05c05ed6dfbaf4746719810fe5dd122b8b30c6462ebaac282279b4a7afd482fafeb548c6960f3505ae0f166bec9a6608c3d112ee8d3c13d1ae28ba0d5a9b1babcec6648b74c4391d853dcd289d96713c6160617ffaa9ee683bdbaf4e0 +C = 827187ca1cb7080555ee6a27df0ab99702d6a93df395f5a96ae5a591240ae5d194444bcd70a0f3cd0f689b7653d117399bda91890239c1ef807d34cc070bbbbbec4fb1fc61275804ca60613548e4782a5823c89798d868924b0bb5d432fd2992d6d3aa88eabc22e3c243da127aff7eb45c60b9a4013a2edb25f60173333ef3a03f68da84226b69b23fc545e4714b8b3c5766adc60c44e3185cdbbe783e242b083f32661c0a7a91c21e7a08ba2ebfc9dad6b6879f62f99f3d8a634d937deeae9ba60627c9eda538ac625d318eb9f2a0d54e75c13021b416032527685196e9a6d55771a19051b89c02dc041c66124f40d291dda5e1aa8ad256f83eb02a63f44c8ac68a8f9f8c8d2c519c31e79a2b946bf4fbbc4cc3eb6f4f67c39f1991d693345409a36a9513e392d669cacd60ee8701efe2d0eee7194fcb49cd9ad00e864ab485ee2a0a9a23cd9509081d39f38a45583034c53785319248849bd7af026b8b6976c73068225715243eeea9ed205bef1003613f0a54b07458a6dc122b926d2557ca45f385452260169decf6fe7e6ab1550720e85a03ade7eac9c660ee16f5d6012e628c6b0f6c6e544b04a1d0b9d20f2b3ef97a8408d4dd6afea57079cd7e04ecde6213af4347e8e7640c2de7811f28b29c24237886ce91bdb9f549ba3929f6aebf6809f4020d6bebcc99e894825bdb39a33645d8bb608e2b7e7aa5303fc4e3653303cd885c4083fb43 COUNT = 50 -K = 6e5a43a94bbdd2511fa214a6a1a1e2e732b10db6265b731e1becd5b16db2a5ae -P = fe803b88c1c0ccb45a8a2ef4ac6e2a0631efd528f873329aa3148f5a3096b0e740ea1a7c1110091d090517d244fd5877fd7dfc0dc0dd766bda05d9f744ca905b54a46c8fe828d4c71ff15b9af36a0b0668fc73d0b1103f38b50054e2bc12a3290679e5e056 -C = f76a2a26c7f9c04031e6cca10a5b11ab263a28a72ab585b79db9a3bb583d298af04d45aaa1d7f3c16132f975aceadf62cd02a12e04f018130e9ab0d2b38493fb53dcd7bfbc0c39948b037651e8caf9a8d5fee784b5171fa892cda871f5b4b58cb165c4e963b255f9f41778444e4b8c4f +K = da87b5e45ed802c21d4daf68d526591f2795203caad8cc5a12259fb19e1ca280 +P = 8fa1df1e64ba044e03502a9baec8499306877bd09b0a53a461e7cdaccfc527297f1b773002f930fd4284c4b8dac8859341d7bc003f517a75d0ab759c3306dc0f8c10f0641774b8e7e02e1e67c2f68dbe988469eb5adbc08a39779d97276646925dba4742058f0d3179206ddaf5b59ba53656a598311970c4e5609f7a2c768f90a056f520b31eb52576c2c6634d6f85065ace52ecbb461e700a8424626afc5bebe293d417e8ec5024ed244bddcaaf5ab43a5ec9570555c500c9d982bbf5c2ff9003cbd224bafec8a5c159943813e982baafee9264c1777a187831d8dedabd04c2875c7f4fbf3a97b0a2330f03323439d7263bcb2035baeb73a079bcdd7f6fba49b8f754fbcdcf7482776df07477cefe76452866f39f12b7f50a03e199b4662658f72fd9573c0a28a4fba4bba739d772d244b37df0eca6027b0288cc4a43bed8b8070e75f5dde60b2bc0b6721927d8f6f164db0ac65d9470770e059a5fd638df37aa775012c918814185a848fa380aa9321305766489fcd44d50e1e3782313bedb2653df8cfbe71bfd9a3f80ccbd95d02fd9fa7ee19422907a6017cf1ec0753431f1d61a1888868f656ebf24121094aa8f296135daf80af0bbeed7de91e2af2a93858372380b7c0ac069bb30aff85e0ac4f63a230758c8650f5f9a75fda2f1ea7dbd80f37451a1299a230c6846442d352c4316387b61585bbefceb637244b4f454 +C = 792b29d501939059a7e21bcd61c4080bda8f62ef9be4926ff67070b56d6867f3ddd3c957ee040000a2914f2d3ac6e62443851fb8c421e15fd858b68ec6c683c512907f0f97defbb632f95f06775f2bc925af2553dd24962138912359e76dc9dff08e07e981253034d5de9275bfc39f2784f986cd46968e055642eb5f7e4876c597084d81883293f0044087d6c90769afd2e15a180af96eb4d57efc3de0ae0b3e597059f199997761b3c301e597263d9fd275e7ee8fcc12efbc74422e55caa4cb5898928d1946aa463d24e3d762e2b4a1064867697ae2efa37d39935150c44e8a5de18703b16d3fe318bf3c9202aafe342128ad2e4a73169f982ebd17da82a838c61657bcd0a48e4dc3b6c76d5afea43e0e824c663ae5b47f739bff392d9bdf4fbbd2ec3b0d8d14499c6f08b07f9f61f03d614f03b6b9c6848b8d0bbf357c1aec5c427463859053d0b09520e2a546941178dcee6597374d28008d921aff509bbae504428498fadbf2529b02e025b3b32576e0fa5ad7eadfcd6f19a493dedbe119ad021dca30fb5cb06cf6993f2668661cc64f23118af42231cc602c8346bce8bead40cb445722e5b48889dfc5f39c303ec8f6c83a8187d8b99607a8a18ae2ad09f24e4d799e7f0d4416ca6dc35cf55cf8b19488e48262961419a9c134a790d7d1c69ee114bf70471bf422a6638ec8daa9c9dd5a210c013ec6e95e94dd1c5698e26564620db9c6c2cb COUNT = 51 -K = 0fe5494cb24056546f113bf01c89fe136e871ef390ab3b59ed53d3e82a296c67 -P = b126c5c53cd1c545d5f4bae3d3da0bbea30175f9e206ddb687a99df13fb46f9dbd2a5deee2ff9ada5e0b84bcf4ba0ae686f8f36b866b6717cc3d702a140af0e72f115a6b926800b8672e0b841094b1f8016ed3b0c56a1471d7951418b47c67868770a69874 -C = bd65a200e48b56928d9db64372b0fadb961d9f3f843b216a1c6db9d06620733ee26fd62ea8d9541aa1d2ef026da5372362eeeaaf57059ab05040f608ddc1ea2e4dee52bf25c48d485031da85bc157b8785a8f0a9b84445d967f512758b54824d9a667a1fe4442524adde0253c1f2c43f +K = cdcaf9354de386da09dfaf12f039daa3170e2566c6ec276f4d535fb106b4ea55 +P = eea51e76b159d043d617b8cd88f61d03e4f5d8be87ff271da92b8dc267c608b3542f03e08b2e3ea77f28daafc36f81095838d792ad94fdc1296832cd8684977af01037c51580f9a23987b6590755f7a59c600d3023a193beb7bc9a5845eebc9ed1bc024911330081cd4c644e67d469104336b2dd36fc6fdc9883c974717e6b7542d3c452bbca1db131a573fccf83f5955cefcdb2af9772a1fe784bdd4a8734c6534ede8991bfce515699d1c79ed26ff2e8cfe1bf7c05d6121bd6a35e91fd193c1adbfbbab0d2dfe485b14beeb40feb01cc0e37bfbb40d73aec4f5bfa82c4bcfe28b622f387310a607fd4537b65be4c8375a8f486ecef1857a275c9f3b1dd90b51e6b3ff65608327d4bc33acb7edfd8391c63d3c5b22c59fcfff43f6822f8fae55dabe95e21fa8b7b21a2ced59fc482015d8988e6ccfee365ce1288a9ef73c39d33840433f60d64b47e2112e06fe2c637245b80db664485979a53ab86a7759598b8c6444e2262721e143009cc0eba4772e11b6f240a813c4b39571d65642b7669ac8ee7e5a8c75ca10531dc162e74301ce71f6c0b780a9f008da7112f288476fd5c89f9507c915ed88ee3a7050557c1cf242f49eac7847075fc23b41128afe0ecd6993e0cb1a04ccb6e72865eb50289c4da33963de1516197a676fd6deb56381fed4f555eae1c98f1e84669f70b8c8dde092aa713e9eedefb14b6431aef10dd7d +C = 9f66534e1a739249f489cc0b0ad577c8603ca8aea1540ec995cd423617fe760902001208bba0cfbffd9764f81fed91039247c0c1c0b55923e771b59f6687ca2f0915aa626e8c3e0ab632d3302973a7d54c3b5b87d1081fc6f9e3dc341c67ae31a61595f43c1091a9b464f00db5f0219a903f1e09e63d0a1766e44849a35a3d3130f0f709c737c74d728ff1401389aa7ede07b39a4b49a8bca932a978ad54c0cf12b86ea4dc95b314a63ec5df01855e049a705b8a46e546302c75b7abfae265ece7ee0ec1135ad2ec97f08b98b7336c9c92f0f1d9a21bc906ac0bcca75f8befb63fd08d20246707d6221edfda3f0fb8f653ed28c1b2a69a00aa50e6331feb682a5f314c9cb1b8aec0e8e9e557684a396e18c484bdd8e7b3bdecf82c50c91abfcd664d416ea1ecec0608d5a715a3c98445133c10870dcb0f7101a59061ee9a3383e6f06e6f32c82caa41b592698199143cbffb4a587b39f880f4c668a6ee1f4200880fa60b102d0b26b6ea7f11f9d7c3a4f0bee85d1e233aa54f63fb052f1c077f9fff02568d51af43f30713a90ea33784bf8714a57741c121ac2bef45b826b4f06a54c4855e186e331e1097c10a59929c234eae1ace54ec804cefaefd98dac2dbb3036adcfe7d419d29a26d483d98d7d1eb5d9cd13967f36a2491092042e77d5f7af75dabbc80e4616888d3470ed6749afe1a8320e94bc16012f2f9df0b15ad79e29ef3a57a9eb384 COUNT = 52 -K = 748cf27a9b638fa7f6c8ccf359ee86aac78b7d6fc61adf5671cfa4e3c60f5ff0 -P = 0eb2c21c3c62714c8a76202ffea24b891c0f110929045fcb11bf7d18ad08c9b0d0efac7991f982ed53df3a42367fcdb909e3a611eeb2c94fb94cf3077f9fd4e5c9e6240c4b4b04398b8be9edb80e83f530e6580d10dee62e52722d8d60f08bb261b00390a5 -C = 91f1d0e5ff9d8594d624f16cb8ddeb179aa31dcd1c9e0475f294a0a2411f899d808a797573726fe5f21e671dbc474ac5b97afda5a91a5663635a8bf7270256d62b549594db39716d69d5ce95b37d3e9dd06bdf16ff79c4587a7ca069c3a4673ad856f7fab5a3200b6b5311d6befb5bbc +K = 5187b056e7d019024dcc0ff6fbc353bf4ec6b2fa179cec8a48227637368f0254 +P = 835b88c04ba22c25d8fa3b948ef34d0967ea264bdfd320b10f63d4ff664e6e4779554ea4dcef3ba0ecafb147df2a6da9a8458a51b8e9641d4970b5ec96a27bb2d497ded923aebc641533d248f42cd299ed123485039fb3559c34f396e8b5f4ff41dbdba168aace1292a5b5204e32803dd81d2ff5d5afe58ada9e0b34bf7b777d5a17ffb048c2a393a1111a08e5ac0f7f93a830b23743cf2dccf67e95696904a111cc41f196e74c468ab60e0b55b6e34aba36ffd10f8464688e99d1aa877d03dae513dd682729975a5058bc845b78d5b029586f7570be2e31a0641583d2e92d6dd19cc62fee2b7bd5d988e21cd49f32f478b3301b168265dd546f138fa113a3d7c6a2cd093bff7ac66776bb68a3fdad3cf1cdb2b7b93181824f9f497b2b982dd2d9f7c29b584b576a01316d1e79942d5d27c2497b15d51a9fca4223d81a8f42d0f375f6d13f1948ce4a0d4142ad5d1c0e46b22cc4ac1f6afb582694d77fa3041d92cb79f112549ff8e21de1f73ef6b1d405073081b51388f6520bf009a72ccf09e2d0ff16a2d38bcce8cdc01536c2f36938d1d7365e026c483fc999c7c09ae09206766e958df3c59e2bf5609f83b8c4f94d857e4adbbb2c24b483d4fb1e0dc4f089f5844d56f8e236fea5a63112afb506e8a414fa7195dd06a80a1d55297fa55d85f1bdf3db8ba98ff975bf1ea4479e8e99f7d09730a7c52d82f099323eedad93 +C = 5eceaa8953ab524d144bb69ac9f12ca81087f701d0ebf5c602c461ffabfc3ff78f0a5543626918c8be681b18fae68bed8cdbabb9634cf331056e2ce2eb3880fcd95b48718f703b24d2b38e2493114e5a5579a66345a69ab6667065d50f952f07c221c1f4ade5436d7127c45bec723fbbea933a37f1d9552cc941bdb2535876dc27b08f98ad8cbd9f93957032e1fbb3477ec14f8ece4aac8da55a977b03894b36cbd1c544e0ac08615a4da8da96d7302b0f67889c14528830c2bccbd858204064a280e91f1e5446e11ba16bf03ec513cddaeec8525ceeb5f5cc2c2d7736eff37d5315736bbdd08251a47b9a203cf02c93140a22021ddc34b7bf78f913ad5eba00c210356701bd2388203c48862f533f8545b3d61ab5e52c76d8514e047c5337698f035b8477f3e7d0040f764cc7250852793ee565d38d726b76f326c93d2ad7e4980294e59204572e8d28211d79cc2d4bdd112cdd2fbc98cbab3ca7c785c8736d0b745146a897f033e566a9563473a6975e39b9c4792f81500c4800f0c53edc1ba5c82a49a79d2b70de12e2f693c2b039c35cd94984dec821052f2832d3b0d4db5a8fcb309aca0317bac168bd9d19bb0ef93d40a468e597d2255c8106c8a910b786702a6051a8e6b67b52e699ee2442467de304192eea8d2f8787422f922673f2bb167aa57648b09cb9f9f3f9dafda9b94d28d90734f73e22b7505a876cd19c50ed8d354c3f368130 COUNT = 53 -K = bcbf4f0804ba70cef60e84322ec7f0f20174633bf344a44c506011554028a2b4 -P = 1518055af80ebf90586d159aa35a90b3b26ae3d6699004bba4888e1aa44efb73dea1d2f8acb702c9a68d82961410dd5462ab92135e6f1d64ee6e9b481dd0bb15baf1723a3f0f4b39f5f5030c26d01416b7a605afb7bd884db137392b31edd6b6ec3396968e -C = 26f42244c350070e63e14fb5b7f4bafc06a70a5af677d25c967bd5ecc9c83a425db408794315f97cfe04e89aa9ebf784175b990515391c3c5a015b4f6f71435d033e51ea6fe40853f8d8ec1b5842d578c6e69eae16ff530badc7533617899a68d0a0100094e40a4b7b80ee524626521f +K = 8a6a142891cbcdab79d2abdcb821cb08568b613f4bcb933967b9466d4079e819 +P = 770391b98c8cbaea2a746ddf0c439b6ed6f7a4d2c18c0a2a8a61f2da9eb179347ea58f9be903b9228fd06e55263dff049422bf776da7ae97c2f328941c52f89f12f2d51e6503ca0e97ce9b5e1cdc64485925b343e50e20770644bb4ee444dfeb8ab96c10dbc7c33cb3ae6cc6732be096bfe0f2c5cdf5af026303047414c72c4466b0f8505780342d4d3c2a0c70fbc94ad167037fbbc6cedcf69868d23c1ff85f6c01477165bceead5aa016d01498e94e1c118be00cec2fee7cd56b2ea958e4ab51dc0c1f4f7b7cb97aa205f9c391d6a742219bdc19d0bee9731e1e6d9cd365cda7a9996c754915590f36289d5fe8dc4bc28553d8727f3e3507ec1e4f5c538911cffcb1fdddeb2283bb87fc398fac13d5a69642c7e62afc8218ed0ecaa29fe28ca7c2e51d286c6085ebb4ace7d19e821a738a10e63e404d6d909625a42608a5e8becd5531d92e3cf0b3d9627c9bced70458be4749f2f54ef799a43cbd02a264e6fa927922098d977edb3a9b545cddb1c930a5233b1304eedd00a2c1c134446430954fbad05506a4be6e43a64798b19beec6c4e7d320e519693e730b7769e58ca4fc524433bed78b20792f43339f7faf8d0c4532fddb35a1c096a9d5cffed8f64daa5e85c8c222d581739e5ebfc3554a81c6f974dc4c95dacf1c30d1e644441981420940b6cc37cb33ab7985e8c762dcdda16563587e2904c474a80bfce880a759 +C = 18f6529591446944c99107d9aabb4e9bba875553b0a84aa2940c6dd90d213e84f4e5896746f38b68ca75421b40e7bb6f786be148906e32687e96cf9ea2f474dfe359a20010fcf9a6a03053dc4a286ef2c87edaef928ac113e5080a890a07d16cdeaf7ef8c2ce9dda83be96c04c96b7bc807a58123a266b45e1747f6d353eb5f0fb1d347313a98555bf20dac31074fa460865e958e1d7f2921847603c7e005cadfce81ac8d5cf7f0905d49eb86986775d0cd92f176eaef6626efc6b59b0118481d87a4c433a4544c127e8ffdc70637b549a1f246aca56fd25cc8bce1c44abbde1c80f4f709ea3582aac95f37e73babcb83998133c75771de15d6edb67c158edcccd250729f111ad9e9f05c62bac7e224585379ada231470ac14702270ef2241af5e7e32230ddccae7b5e6936fa3b4bb786eb903e91cf0f5ccf5ff89db1b0488fbfdc0082119daf11b084993deb6ff4c22939adcb4489e902c8ab1af633813da07788942f3ecfb7677118aaaf671111250512e1c270d7330adb1ee93eff460b2827e75ec9ba22ceb8e901ff749a72dabe0e41385e5f18df0a8d6b62f4a1b39b335346120ea26cf025c4a4b54771dc4be91de401a304b27c2d4efcc6427d54a9da5856d8cf4f543a408a3792494cf01e6f5c6568b1fd864be27fe501f80f77a016d47310c8b86c207fabbc40b6e759029fff62057a8483cba15e9aebf61019ec156d571aa0c6d8084cd COUNT = 54 -K = 6a8263ea8bba7d83b62fa11e0c15938a98d95bf695168870afc4aeb4125b72b0 -P = 835952ca25d65524d55927775cc4bd77d36f06923cbf773e474b30b545eacf44f74708fa7ae9942682a495db55a6999562110b5d63d8592ca072a5fc87f4da08b5e6dd071ed1bb09170553c8cdc440ce331006646473200606ae2f1716b1d49fad31092876 -C = e8742f1df9570fe1a008fa8294af4e15523e942b4abaeb85df8778f46d9929af945fee52ad20f9a2189164294bedee30f09f1400497671ba4be41460973a9b8b929dc826b11f2b2200964212cf52db719dba1930dd8e1ae1870012937220b2d1c9160393a0ca857a114ac0bd49db7f0b +K = 0765582690b7dcba6b96ae93db550757c0a507f93a88c9a8a11ce95ba7de1c13 +P = 6aad348245fa929a62b514962a51fcb4d632be959cdbbb4cfee03018c0016d6d8131e561165a6333ee1a935c2f32741adeed16911b3224085f9cf232e7f9538c77c1c4fbb0e0eb6cecf4466b30e5a97d005c1a4048d7ab2387036ebce2cf32c38a2f6d571fdd0e092d922dc8522b35703650ba3a34fa099d3155c51b3e23726d88747d7108610954ed6cf29f229b3216d81dfae41e60d53934a09291e03a1412697c9bc47677cd235d1ce37fdb798fbbdf1f24106d53df5a703f96f3f180f2b0e240e1979276c80b5648674de0ff4f40e5cba85acfd54498e3e1575bef7fffd69db5ee7f08a920591a584afd66f471725d76092403f825e0bc0be2a3140cf173bf607bd171f1940f44a51741765810af7afe51b58dc1a78f22f328279ad8fd28cbed9dcf17fbe2ba90cefda29bf0d10418dbd0ca9b17459100afb24b5296f6bffa7edce6b602601e3b87be2bd563fffa96d0cdcb27c52f2ea4fed62b942bef0e4d944b7b20a57461a3326cb6fb2e4419f7ca90eab58512c3a321e5a66f7e49eb7e02fc534c221efdee36cc0c9f834ff957d03f58e9a09fd95177ccc1328cac6320284ae616f8c6d8eeba0a82d37453dfe7972ff47c433830d40dbb944816f786be7e9710c9a8330a5ca4f94d12034b6475d138c9c85fa76ad1ae352df7266ff0363699bb9bfb2afe0d689f026b17154761147b5f0eb1625b1a6676c049cd3bb4 +C = 8d09a64cb3ebcb12c65f05d0d1017bc4ea4485b976fc8a10057e0d3cf252226584193852b31f7793a1d1c1a341ac9d3627f9eb07f6a5ee5bf249a7756b018a7e8b0ed43bda1d46b2971c6eefd49091c6a64d4ea600f86066dcdff7f0c4be4b24adf7f998a548bb92cdafbbddbf83b1c82868ff21031405508e4fe49f6f5ea8380804b7f92f13e1dec188bfc23c215e879faf0c15cb33d5051c3025f89b29a0e09ea420ad4623c775da41cb3004fec4664832ff2f41636d446a8de7483206e25c0b4e2e4b2480aeb8f3386328d93e364a88b821e64cfec11460dacfece3c81a7421f0a6f4daba1fe1f596b2cff3312aa11ef4fb6f561a7a18c0799f29a5302e00bf11fc5d7cff185394454ace4f34d9f00126d5e9a1f70b062e3f38a4e922a0dcf8039f1c135fc5e9200245d5aec2cd4d3a56efa368f9d4fa50f48aff1042a5bfda0094966b95bd893a5d009d35efccbf23b06554182c90487e080f9e0c6dab96ccc2c5806debd71cdf93958ab0f462e0f02f95985d15d7c8cca3b45cdf6ca74f0711b05d8e26ae5f189435e3db7c16d8f5a4458d916540a46c1218f6a7f86effe1fcec8f0fd3e29fa192abe96e7cc9c2dbf4bcd503e97200e9302ffd38147f1c0ca3e61fb945da02d11210d7e6a4654a4581005c7f0c7ef7a5dd5278b661ea22f56cee992957c1ebaf3536b176008268822c1bb8ca04bb483597b0d381fde85b59ea431f61661482 COUNT = 55 -K = 95d3086b43cc1ddb1e946dad5cc233afcddd45d582ec9cf492a46fea9e51e753 -P = e6cc9fa4eaa338442543d51a4140e7bea750af4cb703b103fa9626a9d2dcaec77139e16dea9909bfaac306d644e39a9debfadba197401bbe0143c7b7d358d73ed13d049db1bc9b2ded7dd564588c09491f8811e8526a01934ecb6097b762a2b974a5b08cdb -C = 3fda731444ed4d4dde121606a38cdb39dd788de33bf3bdbd4b609fd1a7918b3de9c7c79ab91123281032db269842b5bd52788b4b9256634c2c8f288a40fd4e11de83951d54e8ef90bfd205faeffaa3e6377aab7a1373530ca5135fe1a443a2236b1fe0525a0baba5e63e194ce59d1bb0 +K = 88829fd258bd82c95ec3cc01fc6a47d17352772fe0a6aa5bcc8d662b06d522a8 +P = 96a1f7c1e067cc1356c8097f8001d22a0c81cbc1180ae4b3ffa2691aa4d3a90a1308375bf7c362be895e50c5950ea2c842c71785e31b22c20f2649ad96a9b055ef6b4e14e21eb1ffb1b20c34663ab11cb771319f20f34639ea4ce349285f621c4e0143040a69b28f062e22d64ff087da7d8a6845b295802026a29cfcefc749adbf36229dbd3358b4af5cc7207bc32c4cde3e92f033180ba74fdccc073eac5dcfcb4642d58eac28e258f980f104d6322a0a512dee5503484013894351f3a70246ea26ce3f6894f1e242d3da91cfc89e9ef790d344be12b1d8800686fab0d6bccd2092839d1b9731fe47d0daca5a722daa5fd62ec55b2e93a18bd861570feab5614ba88491f0e7a966504fe784404b6caa6e7ebb68c4f47b1b317610b869049cdda9d16b07285cbb21801a4f732900f8efcab7c402415f0102e972d96080032c6c2724ee2240e2ec049d77e9982a8bc5ce74d4fc1f664791608c2044da01ff28dff3e34c5785804a8aa00feeab8a95b9b3c2bfc88e774e50a889ec774116e8f9b1df470f4f66d732f93bcbe5719ff85c3c37854e75818bcbac9b714c1c662e09fa1d767179ef16aa1c966573b97bab9f825a81002eb2d1835e712cfb21e853dcddc709be12cd8b692b10744ea6497b6a9c3fc9536c3faed23171653a341080430b6df0a454dfed9aeb44e033ae36c684013e89ad85578c0d8fd396e59a7755ccad +C = 4ed46ac58b15d72c46f83b12e7bcc9a09fa99ece7d33144bbd6533a1a530a77e23671a716be6b3ef30857c5e0d77b3209a1566e1fac05a66d1bb0b337a3da2d1d8ebea8c35d617eca690d35fc0fbe7063531fb514b2142cd26357db810b95d3e598737c6f032e04f2675118f9bb0c7a9ad28d880d795b142a8f975716e34359af8fcbd2fee82d79f607927fa155c1030be9fdbb445aa5275bafdc22260e005be9ced46e31e9f5f8a2def6d2461a3ec0bc7ea073079d9003a7eb6a67ef6942310fc7448d5b54cb3292a3df047718f2dc15f71db3300678025b5da15ea2a2f15b2fdda99fb91fe793a4b5fdffeaad35b15c827c2c5ca92c9cdcba47c1ce19f68629834d6306d307513d28047150ee09c400b7e0f24ac12a448a729fd63c957a9705c006748cec9162c4c0e21619179e82682bb1bfffdc60177ae5aff305fd9b076f88cf4f84bd04bbaef3a633e7ec02b36bcdfc87e6d2d84bf6ddc6f20461d10771911c400cadd7a1fb6044847d7d1bade462113a1322aab3d4049142a3e07b0c23855d572dcb98d2f739ca7c1ef0dd1446171bd5c63628df553b2ad1fe1f47a0c84aa6956e4f5af1c0fca18a149098382b0a4e6f927304451b01002040e19d8890d42c9baae4fe5b463b47cab60a7ebc35613a0f71ae8c7e37e7a0dc85056903b37a8a1283c9c98b6560eabad79ce9ee5d7d79785b64256278cd388172e981eca3a919922c40fa02a COUNT = 56 -K = 8e946bad6ca622d33c55f81a0e4c66669c3f7afefe06db457dc65cc049c5c310 -P = 2859df1f2ccdf3bfb87b11b74b10ec0e804634d89567e1cfd5c314ea9c24f642d7f13021fdd81b46e6f7aa40e78886dc6ffc67f502b7ff7f1fd03d63974c11f7049c564e2b2b7b90ae79ae43951a97d39c3d4402660ac9c5427cbf80357bce18a537cb0f05 -C = 197e98bbf593020e25e51ba609d32e85b47315fb7efb5a14db9c315169d94ba90ad53739ac79372dc9131299f44dab5b54b6fb901d90b0a04bab400586d94de44b0ed8118da51de7104fb1b194a2d21e7b1bf7934a7924854a2f73671c2b25ea03fde7e6a585c64cd219ce12bff63447 +K = 53f44b31c746aaff70a1d4c7f7a4273f155ce1aa1e916a0e59f97f3c1971f594 +P = 2d9a3d93511b8b8893a6aed1d3fc8a5a62f14835ac6f2d9ae57f553c9804e8cfbed00bb2bd1478ce10b33ab5dc55159183a0d86a4d775239a6ae0c71060ff1c6e473139956a5573aff4c1da798a4172eaf75dd2d10277e40096bb6f9860f40dd9b4c0aad09777d057103ac825ad459e82a49ebb848a43acf6e6898f49062ec5c9bd8b8a2e176ff28bd49010f78845a1b02ee28c31bfb187802fddd576ff17c773990e525a159113b2c2a7766edf2214d38dba8c11b601525c7ba2e02b832f3dd1c6ecc2c3535b2e5e3caad7e272dc4fce2ae9bb46fd0dadaf4be0d3f306d744c8d8c4447e283507f7d05ecb853bc1c5cdc20e8bcdef749cfd946b2934629bcc099925993c340a0bc746c551f9c1815b7c70fe88b0946ea451c893fd4f7883dc50de97a9cbb383f75969c6ab08e20a737808b11d876bc77498ff3d62662502390f8eb83684d952fba698b9111ce61699743453176d0b7b2156fc6bb3e532a89096e2cb57fefaffb4b024d901c0d96b99abeb71b8635a493e40734b9eea6dbb92b212eac39b14b73c768de4024f64ab9e17b9baed35f8ccbfc4593b32ea50d9fc952f35836efd6b6a2e245155014a814e33d0b620ead57bc4ddc19a927d8f3ed87a23c84eadd11bec502169102cc6b962441983b70bf7428787749c8d28c98550904d2b137be9e5316f62af95b688872e3ec2f3cbfc3c6408622fc559436fcd4d1 +C = 1ae5424fa3ca3711842bdc380c4e8c1d4df541250c17f8b993d3d7c898b8e474172a07d7942015f83e15c469b9ac932ebbf737a91f8e40bc356b3630faadadc751b2d6bd6a4c83fb26e21d375ddee898f9cb1604393b98d43bb41a7692a55d5e478a9598eb526fe88f41505de0cc66104e8136acfb306309ae86fd494058612d49a0980f0fbba39249ba7562782dea1362050deda8edd0c9d759a75abf969cfd96ff557721dba4f7f2497a4068d11897bc5c424044efb669edd119910598686ffebd6287da93e3c9b30ddc76a542795d531552b68e28d924e8564a056b8de662a4cd26a93ec452b1d21b6923c8c14a3630693cdf759b07946552f1e6df7aaa2c29337ac94300fd4f6ec1765682d1b80c529afd99d6c6d8335e2b05922ef8286adbe64337a47cf66e21435ed73a3ae5aa75eff7ed064dd5e005daa1a2d277b45c76f27c1ae8d34523e0f69ec60f715be499c860d5eb781c3b2a4275e97db4a7bd03a21346fd5a7c57ecbd9d8665c23f8e7fb4c80d31cb35befd765c410ecc7d2327495501cebc98b0586f70101ab2033fbbc7f778f4255053d8dd30060a4c90db811dcf35c123245be66cbc6fce483f54f3769b4b10ada767d3ff94cf0d1c9b045d6e095cd1a5cf33675a23ca65e433e6ac3dab69e541eb5c900cd4de527f9e2b364f5662f599cfff4d1be043ea3b54de780496f17f8ec387729cf48b1d0b2e21060fa967aa5381a3 COUNT = 57 -K = fa604452e66e6c3d974d970159c3be49d3e0a7ae356cb5ba68ed68aec9b0f695 -P = cb85619406f4e57ee4018202b609d2dfe9b1a791352ffa46014775973bbb9958f928c607dec7972b735cc0ddbe66a1d53731a856a8d27ad40592659c664acc2eb7c585c231824f25f34f74a6a46f4909d844dade68ba441f4140d8bf2e48c85cf4a22c6023 -C = 96ced807e69598829ef1dc52febc3e48ddef1f4042fed65780d2eb77da912fa1b51bc434dc15bb3cb7b0feb578792b77bedf3d7c85583629e93e186d2708afa0441df5465e7be04d86f957d5056d17508fed5e2927e78b5d4b5e4226914ca49e03c9fc1d48db385e4c0966f6f50b5f50 +K = 1faa0b0419586054dafe146ca4f2e05fdf792f50f1410a8d93151d6a65cc6540 +P = 9b30229d8171b275e3c30737247f781b80b1adbecb33e841ed2c8a1f9e9fa8a6aab29c91aca8e6eb02f431edd9ca1434dc990de807804f6604c3afcc3b5600b4613532d069249139157bfb635b5629285eb5a5654dae000ba686d8c8898d9820cf95931345415d5071c8f0c6cf21cb182686b01a80a920332b3a92fd8c76ce2b7949e4a16666ccb8c746127d66ddd2b1341c50458b2b53cd38b922ca065a4283e194f354205bcd0a3d068f0639d3b2b6198b6fdf8bf317d76cd53c34dba293f722c4c03d45855e6d0ec0991cd1465c296c904fbd2923ca51588ed2336fb84f57aedf5d3f20ee42cfbb96b8b928739bfca0895f18684d2fc427d124129cae7bd3296ed37dd2b13312f37255114f699f89f46252685781e3782b40c21eef4ede2236c8999bafe17bf596b3ab8b8469a139b3a1cb22720ca06d9d1a70409369653be8bd124e41be7f9f373016760141057071114fc440e9b4ee71e5f9c778bc8f1b1ed2ff2827c8f5182422bccf05693c0f099abbd374e8758a8827776eceb0f72e35002c8161a5ca1ad32bbd0078dd6c1e269c78896a779df4e7b32baad23ce89521720357d03b4b0fb93beda01e67096a4457432b3e11937d4ca4c2cc6f895adca49f9da3069e64e7882a32de149857828ce210c457109c41a33ba0e3feb5a2ff4579808aebd4c5d44b1a0f34b2c2f0ee58d7ef75a8966adf1efe4a9c8099b76c +C = fbfebcc23902b41ae60b2dc1ea8ba386d1911a523e29f48750e9f193dd6afe4df6c590b6ac3b0cd92dfc5f4aab4689678579fc114b59e0076e2f358bb6a9c471cb70c10814c22565a24575b16b91911cf64221842967f74aebf6b8a824c6fb62e1e5cf1a0768716d33518437e7647a8e1430eaa084886ca3d10bb6d07d7e444d6dd0b531d180e2e20c6995e7c53ebdf085eec32f31730e85a5c48a49799c60bd21ee34e3daaea7c89b4da114c65988a3c7e7a5d7d21c80a3d3f39f4388193ecb8d5286a0c9bee7f033ab0c148a8fe6c519e6475573f133c4ef2fc6d72431cee19c90b552b9faff619c20be69bc0ff0ef1426f3344410f82261a0930137542b3a89b9eaecb0707d80f325d4839dc53dfb6be3adae9a07b0f7cc1ad360e3842ae7b44a4c81a7474c11f368adc1f2c7dce104414806d0446f1809f1b2ceb5c47ca3bca2d1ac5fc652ad7e74b12dec4972caa340d9f61aaa726a88072c9f8bf1bd01dd7dde8333bee2a8e090aec6e0a7fc9401cdba428a7daa2acebb3e174816a466d6f6b8409a131b2e958fa14618beffd2c16bffed8c1b43ed4f24d451abf1d0dc22e679174241db07d05d0837abe19d971413523cc22910d4865acba018d8ce37e4a7fd207b01fac81a0a19e2e459185294dadcb99efb6893733d1a7b153217a31adf9a1647ee0f3baf48ae8b337a7339dc92fbcad6513680a11141a9c8446f4381b7efdc5a00eff5 COUNT = 58 -K = 70064e375ea8c0d0f2919535b29a135250ea7f4ff381682ddb13b31d2993139d -P = cac1b6c7abc64a03610e3ed90b10d1193c7a42b4cb83e387df95a0be79567c66764597b2c0df9dccf6e795b3faa372a15d9967b1c85e2acb56fcd0e62aa6937d3d3506b1a58c75024def134563de5ab6daac10952a39cb36fd2f884dc34f6abe2f1d6a38b0 -C = 69d23fef293751c49f5bf881f78254be5bba9a7a49f645ffed924e2b3fb8303e593e0c30c618309bd46e8baefe9243644eaec125c6c5d456c6b57906551adaee02227897e46d67ce79463fceb866f9ad7bcd2bb02f5c34b01d8a771b20ce40c2d01f22438de557416aae1e7ca1fa397a +K = 690d88afc7fbfef791d62bc7553fb40406bb2fd9b5e36d51a7e5cc519fa91d4d +P = ded17935dfce4923bced7dbcb8314cdffaa31cb27f1285e5166323d2f84ad0be0df2cf762c5809fd2538934db09c03f330dd9e18595689e086c0be53ed0d66936ba5513bc8223fa97f849738b8c1d646bd1b7bdb7ed5ff2c76de75170d64388ad82ed1258438ca094d4c477c040a3cb72fd48504dcff754f4363349d0fa668a3da2c3b164de37bc1c83325853c0f81fc00d8c3baf4714666981283b401b54d319159f1b7e3052ac49bbf3591bbdebe72113fcc79fb6d4d60eca4c67b2a91e35a39319fa670da651ddd982828d32d1e1645b9477e925e5137f7e6a09ea200f91c27f3210a65efb00bd455d9473bfe819d706398dc1873920d0d49e5e985f592586c9647c1b569bb79fbb49ff679bcefb2b6f0f0de57f8a5ab645768d1bc73c98c1be0a86712c0802d05b20d394e349bfcf11decaaffba9db579f92bfa3de234ab5c36742e8d07e0f93c8b297edf92f97c4acadf07fe2437ba83633b8e7894de5eb89baa522b42c514cba84b64ea6dd7c9e43b2adba8ef6fa3fe7ebbc7a6744abc1d2cd254c221b0b2fd475b3d9259dd3eee0443bd27ee11aaaed4687cd379b8ff89e904bb00ba0fcac09301d7ba85f5d38d37c152632a2c768dddc0d2d61a5735da2061a8df876453f7529910b5972d05ebe3d2d0b9bda308d1b9a02b90a2effefc7841cda008cd12eda1664d915561cc3a1d36735a3110672e77da5153db48bf +C = 824bcbd4c58f8fbbe6986be5380c2a1356ce26ee04b02f8d6636c14bebf18f9db7701c025f4dce0ff6925c8c0cfa3f88201200ca14d41a384cbbf0574555225693c4ff53fed31436c0a2c20c9dfb8591aa83cee8823af417c44cfe56bf4dac13034b9ff7031bf85cf69b3df03419dd3bbb3f1f95b86025dfe858f55e1601ef490cae47fa2bf8655db76b4f875c85c71fd125513a84a10897a195bbbbadc3d41446e8187237d082565148532234e396528c1b2c4c88894c2cdef67df9064bb7569a35a07908b44fef55e543aea997caac3ac40b77b1d988693423e70067e549b99c2d4fe973f8da7e8a99faee1e4b7edee1a5334eedd744713d10caa175a68ebf73b78bff2c9d5179219b67969ad6720b25f3ca57c6675f761cf653505f399d67d44c8f4a5645d9ae2bc0e463ede13668e267050b5a811a706aab543b4f6eeed28870f42c3923fdc801da1b45a6029f940bf649bdbd127da7ae90e6d2a4b5c2b08dbee3bde76980e095f56a62d208cd9b22917a603bc80e2e9dc924029e5db772b698bd4ddade6756e4b2890f59ad7e4ed27eac9fd20eaf07ec5d07f9ae30178b0e77eaa63fd76193b906eec31afe5ab6d6ce1331564420a92639d1439ea5e1a6135ae776d45803cfa21dcd77203bf2e167efd46e2052c57de6987fa18fbfc852817fef32920f2ae84fd678984b4037575cfeb8e23692009c2563e962ee82448ce49ccaa0f5aa517d COUNT = 59 -K = 428ed0e7775376cac2f5fb6b10491700f0cfab1310c0d4ff1c0219d737a39d24 -P = 99d252427855ba6d286f3653b802d3640c3b80e9315c3e05cdb017df6f659f3af768b3f76ee198d0f5ad21fe38483e3e91814e587de6a24969d6baf7c6b41278a0f0bd0dcfc2adf1e2c795471ec819229799ed38b6affde74769a47eed736568550823820d -C = f966bed8030bea76274222437194b985656f198b3f0f1790625021b6624b78cc906682b05899002b0c6f991cba6d3e42164528cce4ce6fc55fad5a66b2aa8f80cc43865bef6e0728f7a3e951e6fe563cc5f6490889ec53e9c6d2966aea6c9b3c74ac0bda95c5a6ff7bcd88f910b6f33c +K = d31ea24163882cae78df61c0bc76f967692c4ae66e428ba2cb8abe3c31ed1be3 +P = 17139f4febc5251eebef93fb68dc116d8440025f1a67c18fbab9333a3ba54d18e8ee5fda3c970100a7b041a7904e91ec4333672a549112842519e5759a44e320b63491fc4e3cf20bfe261934d0b7afe2de13035a10262002beca70106efb8ccbefaadb1a5b3dbe6ebf8721680b18f6db939199b5c9247cddcef1adb52eef63bb72903c4f3c0bd9d73f2a2cb648f4db0b6000f63211d902f99815fb04c0c294b9f15c3e5e0f4c018cfb01a46be13480785e96cc5a074358323f9447b993d3462df54cc2966a76db35c608e0cf7abf5ae25049b6c9741a8d5e8cc1434947432b83195266033d2a0c41607a17652c0d138c8b3dfe8c97b65010e79649f2c133ed196aa50963b09c84b7d0282979eb685e133b103d940c0f3793c71ca28bc9401b10e17759e4b48248811552a79cebf24e71ac276f1353620cc4165cb3bf878d02716daa04d9cca23e3368f1d71496d98b3d649b17c3599ef535ab4471442ed941ed2d13b1748af63fc92e10c6df16add71d875687bd0a05c67928c7ef3d89821252f0bd324d9bcf9504a71ebdc08b5fa1227fc8ec9cf3623e63b59187da42beeb6201f0d0f8886e8c04b90802c1363cdc49fd0539f295ab4f0566870e2846184f4771a7ab4b92439003580c0ebb9d8ab8a047e5589a60389222fe3f6963317522adc9a7f24812a63a212683fb6e294daf8bae02c7498c1abcbeab915c3dd8a34551 +C = ac7a2b1cf50e7f77f1b9b161f65b95a744d85e0ffb0dd1a2918d3c197378f5a7b7c0950add0421dc3c77df329c8c785fe3e2d622b5fecd61e0dcd2bf788b8cdf811ed40edfa2eca124717b5dbae3fbee9cd6bcf45ad7387dc33f8353414fd56b4b4b2259817bd228ecf464e758273625cc158ef7e367ad130dfcf27e905452019a7c5b46232cb57c2d434f1833608f87d4ef9ab00ed7d84563f7ecc13bc5527b2955851bbf7f0caa9b9e8c1e5759032689d938d9767687e31ea9e48754c32081bc4028adab3b8cf7c1525789d4b5a8be23e25290e403e817dbc2270628515bff9c2328ff263695376fc71a44f6481a41deb9565307bc068c605629081b1f056b7d51f0c0f2c7f5682841823631ac51c1a06d6a410a145f0fdc66b5a4d81760649b9c1970868196d99960d0df3d3081a95e8f801e18b38bf891b9b4adb9ee148aad1795b62061aa4a1bbd0c5759b251754bd3a24666d70689dc12f9a7f106de6903ddfca05f54b65e88e25d90ae8f7fdf6af47840941dc31b50e54eb8c41d7d053a14a205b50072dccdebc429b995138915b9d0008ba65bfac1b9d1598b74844de0f33dc126b9ef7fc8b6520ef35b195cf30fc62fec22a446d7af1ffc38a4282d4adbff9889a0e3ad6aa9252099de98ce88dc9d7c5868f18fee30b3accd72f5902bd1291f902f88684f685eab70e0fca2fe65060c0a31df2e02974b7cc2eb120392e36b15ebf52e0d COUNT = 60 -K = 543350b22f20bd8174632dc4a56d90da0f96ccb72d96482f4276eda4846c8783 -P = f07e5c03518aede964f58fd633df9f6be8cd5453f5d4ac16fe29ef744e90dc03dbaabbf4ff338e9ee88ed0fae04ec258bb06d94451bde7628ea49960a4080a34e545ec27478f3161e3ac746f2f9ac609f36919012c666b9ed0487a882d2f1ad5536b2ca4c9 -C = 12f197449809cfbd539be090e3e4f0d7015370360be086d15aae14d45b4caa6995df82ae5aa476082c7c9322b2086c869f7781684cae23777df5e4499e774bdb3c7c5f580c3f5df3538d9e1cec17553e9b2ab7ff54bfa9381f3485105eca5513cd58b365db06d4d3591bec98f94b679a +K = a8b15de39217029c0e32226a952588e2896c05e789d1ca5379fb3aee736af722 +P = f54f96b1612368af8ee9debea583fbf201ca1b6ab36e3189c592d28e90f5a62e9d17872053f4b1c9c0c1ec9ab0d53f510e1965c3e542f94d0eb16e486453bd2f7c14266af40a193e3ed22182cefceea822729ea8dde783a9f6f332e6760043f5ad62ac52c8ca4fc12dcf89f0afe00867800fd2629f8422e630b3582e82a25b61e6a43439e116af7b6453c588ed9d545de23a9da19de14eb20e2806bf6be685ff0ae3f294532fc22ed0ff0096fae74c6ca7e67ee7be4d17e2b8c978d39ab3b0b6eaeb0404d6aeeceeaf3bec9e79361d401df46d9a674b13104f49630a97abd1fa02fddfd7e2502430a35299957e341e086b3bb50129f8fbce26693ed8a4169fae3b6d21123e82746e5a5761da47ce57665b054a68e6a2de24fe3860b7a40b1a151156672178888ec823dc51d1f8a95cb73bd012db06e071d5e4b62927f07fece2e10c02383cd050ccee197751ffe740e31fd6b831cb3be670508769b0f1fde16ca944cb9d0a6813a80988fdfc909fcf2641fb322ca7bf119780ea3f523f93c9a504e9d8e79f3a8ee385cf837f81d4d24fcbc23f79bd72f3c9d0492f87245b81bd1b95708297a64e62d1484ec66d91a940e38b532af26914c9f5ff3f102b16f051e81d117e7df696d91638111eaaf722f47ca11403163b451f6506e69cb53df5d1405c87084440ca50661006b6c7e18d4290377355c3b141adc913c7e4092567dc +C = f8357942ab5d183fe229644a9f356a1e2da2bd893e259213338c24da65aee63c35c2769af7e47a9fa46e9fb60e71922534db93caba76a73ade1c4358593b392d855bd884830be8278afb3112510105956c069d3d17f65dec6bce23f6dcff2c4583495e4e405dcbe7c151416c5cea0cb7c74a71ef3b1397f25f357dc03157a92f86ae25802f72daf57536dc74a2478f855904c7af857eaabfc67932facb7446125e99e39b6be857d5707c037aed58dd644a0f691c65ac2972b5de6e312d68d1b45db8552f8155f635e6ba38cd9a15b0eecaad93ec6b3bfcbb7d9e2b5bc35eea9d6a37ab6047d7580c6765234600f55c945699770a074633665658614280aa2f926640fb45f9518dfedef7d232b47fcf35d4435c9a6475a55131b929c26f76bf8d53c26e2a4ac93c3cc06aed0d03f4df1332f03b94e5ce2e9d023362972c4e6a29ccabe061e4df75d327aba8600341972889fa51f741cfb0fd1693b10de931c298696dedf4ba48e862518b9d67c415dd386956fd6b8c3103ce7a68765a50a54088646aa0e3bab49cd0fb2fb1f0ca5821db4eac159eeafe633942793f2aba6b8e811a583f59e4894d0ec7c5fcc87b39ab470045e305d123908e266337e257a233d75a86ace877ab5c552fcfa84acdaa4dbb1665176158a37b39731f85c99aa3e8b50157d0b8dde44e30c11889ebcb5005378de6609690967d27c9250fc5b8add1846988098c2f02aed3 COUNT = 61 -K = 8218eba446aa54cd2c422c0e0fd33255da0f73405fa7985171ed80d983138a23 -P = c683345ccc52ac93b40466d6e4e4b21f7b53f37a8752378a3f6e60ab3c2a0d532bd8f7d2c0a2b1f3217e171e065933af432f57b95487ecf28ba1fae07cd2cd6c8ecc05b8a510dda20d2c0a5db4a5bd2242abd76fa237b0c7ec9186069ca41d98c0f1fed673 -C = 917b1f83481dffee379c455beee3787e1b1449011d22a583f3e1b510d5fcb7be1050c3622f44239466bcf3f825723862c182384aadc403825d9b51943f2636b410d46b3cd48c236956273217b03d0737a1948ec55e2aa1e51f2b54df41079ab5d99de62346d2ab229e7a07461f8b149b +K = 5daa4109fdde3d566ec93bc13c9ee3940572ae8e347c6081fbf6acfe8e886227 +P = e652036d5fa9bbd66b2f1931aa97ab0d8600884d18c4ab93511738037e38d963e3759878b20333350f23f92be8adc11d4885d2738e6e6b0bce9167ae81b13dccf6c497f53179bc300a589baec67345e38297db09b437fc4048227f4715591150ea38ecf26558fa269531a962d1d6736ffa33970ea5e4429ed4a302e99af9b0ff24fe0de597035adcbc69400cb80f609b5900de7ff63d36792a434c1665d168903e06e5bd4f66bd8a84e82d9af09f1da9c543943d8dfba298419a1a75cdb12c98a2be9ce1f0698454f3e9589b175cd0a24b1028ce965157ccb97e05e5c28d7e4962851d257714c1771e3564d948a01531973e6e334ec0ce217fee5430b2427b5033d71fde9e802c57618e459ff1f37a5bf4029269bec0e67a3e325b72869d8ababae3c060659d7a524aef8717de593fae453a575255bfcac7d9e4434f50e870b7e96386c3c599d3bac9d7d648b05eef958bd9b17e1d5cb9c48a0de70833b4328b9429cab1e9020fdcb0752382002473431898cbe8a1ef6399891187797454e19954408953d8b2867fcb5e438b3512462a5f874bcfc581c20828104d3c7d8888d39b402420d2a4d999b86958b0f1a78e0ffb59005540e2f8f16772cfe19298b42ac7724ce659070215241299cde032875d9e74c16c1dca9fbadd83d3480a3583707954a89b15ea87213722a918ac0e219f1f9d77537eb2df61e07842fba532e98d +C = 8df291e971f7ee446d08d952f35ec906959f011177e8b3282692588f7a0eafd75fb3a5aa555caa734f4a617e6d52acda484eff652568073d51064b3fe590fa35ab92277fe9aa970457b8ddf561169231e6a1ee59873de187c8b7720eb3f78d98fc1271f5b4c0d96259421b7a305952bb6611e5da071527f6f0ddcbbb4295f64e472657b4ddf86a0c0f85f1d8657e07099fc6e8a6c63e2bbc149ae5cd9f836cbb97552c8dfa32d8ca92360c5469ef1f01c591edba7dbfca80cbf45d464abd7a64cf2ab9fa313f95e599afea4014c51a30bc558e51dd7e3fe6156d5cad04ac9a463d944a46f5dc53dcb030a96057531fa14f761407a1be8ea75fb78604eebfdbd811099d3a383dd92a2ced1a754dfa8a65d29d080ef9fa606b0fb2a2b95bd8a11a13d63b022d6994e3d807ce14bdbb2d77e7e114b4aa8ce1fd81d8b8ed1a83288bd7288bfe06570035797b7951bd895d95b1bfb148bc5c46574a2baf7bb713c14bf9dc5dcf127356ab8667d1e24851cd8a16b8274138b884ba9e52d9c0edb241cb446d0f5af6eea235ddede850a088ad770c6a8443ab7af92d4a502b2a121c92307ed6cc41ac43904acf1d68db9e2f627ca4c8a8400d38ce1e8f9ddda7c564248ad9cf0a15460e43f51c78b3c7b86f92da3111f93291c6404e011f6027ad94b1e9f2d4707d66af8133e873230c60b54f87de9e4afd521c7840223b267ca51e8c3e204494d10c63e9d8 COUNT = 62 -K = 614e00cf6281ef35f25a29e2271142653ae751fdbe1c6d1c42c78f453c3f38b7 -P = 9d9ecd76feab0805ee50b550c299cd1b7f6167a029439d7649ac6196f5c7ef817c593f8427dd8f2bfed9d46db7f4f3e79be1f44f492ee4b334556911e53c361e1023199fe1b76b8cc993a0c45063eb2b68e0af27d77cb874ca0b22136e6197b9ddd7abf290 -C = 17aa91b84b1ba8734000a13016a25e1f3c88f9de11290a73581dc9b37506b90cdf2ca5c591ce7021272bf8a33db3c7e2a16ce4b01f0e52e5d7a093689767a6251776182960ad424f821671caa452c4c522efef84cc2923c1ad4ec1b8f2a36071a56d0bf300667f34a384ca57e7b2917b +K = 7b80fc71b18abfbea9cfbd6ff92314d94cea7fa9b006a74d38801ade05c9eeae +P = 8a66c15fc32e6434d9a2f9246ccc582208aec1ddd28602cdb1416fd47e5229e6d43b02d2a6ba1e26417a4e83dc6878159fe20bf3d6d732de40560cbfb687df221d5824ecd67cae0927a9dca3af914a7662926388dd98a7261379da24c5c8a5d92c353d2cc2efd3d43f42e003ca3e2b1492083805420f5717b7e25c7f95a2ef56de284db0f1503b0b68e4b6910284b5d1a4029cae58d9f50d8545655781c8dd3a8633b3b0f18295791ec490de08c9563a9f6fc49d66ab78cfec10d6afcc650e4f68f935f41e4c9fb9d8521af280b61ad0da66a8bb34a29dfce1c9fa072db88ef69be865fc3e110b5b8b1c4212d822018a9bf5b4317028b24f9a5fd33de2f0e07769cc853b17900fd8d9536f2dc86968def044b1cbeeb4d82fecbda976c40b5c1b0293f0bacce22e3c8f8bfe8f247b1c400f6c5377cd22cbb7b8a6fdad49e99531538d42995453b797fd0aa19ad3c121aaea56017d49e2d6ae0dcc667c144e4dbcf9d93b632163b00ff82268454f9b5b0c2b377629a51c6350cf510a55308ee625fb3d7b80cbad6f8e3fa08d646898623460cca8b443c0be23d234801cce4914191da0f212107a5a79ff9f174ae2ba3938d3d05061e25b0352271094a997445682a245198d1dd91f222850bc362b6902373013c3512fc7f7443fe91c03a6b82b14b947823964407361e791956e9d0ed4a5e593d03f430d29ad8b01c0969e5dfd68 +C = a37e81379f800edda38ade445a54b5d09ed510b17135f9882b45ad8b47c4e61579094d1f28ab1f8937cc274764c64fd9d59de2fa7a90bb054c4796a8b9ad89217c82e452bfc65e1ced448facd7bc94df8731811a4e351f0cc4d35d19ae06d66e4f695292f290f9d28023e7b2be003f4e63c8fef8b660c1467515c61a77b4df588705e60b7fffca10ee81d2c359bdaeb97b13223b7259706dccfe85496bcd03410910c63c143cf4d6a246c8c0b5d311a83705b64380bfc7bc255d814dc40c25cbfb016a29a26b064a8be3bd44e2cacb229ad4e9d328b1312e3f6750d769fff9ada31cd32b3200a2b0b5b44a01db2975c094c2e62a60021cbe07cbebb84b1a909804bb4eadd74456f8d3f678a3e374ffe8b083f3c59db3940af917d4f3ee24f3de9e00e55a79f04a8f7b657fdc9d7dff2812218c4f9c4ce0cd6c8cabdf89869e378045c4f0d4c9fcf14e03cc52f34f5e6f2d05b8ef21342868aab00eaf8d4fdbcbc62811b317a8071aa52c1d55532c6689d3bd95d7772fb87a9d682626e37253667b203acb021159b530c838a03b8a67576b025f341cbf1e54d8cdfaf197e4bbd7d6c36c2b5d139fada2907aec7aeb9cbb326b2146e23196173b4809d0a1e3e09c4c56c2d1bd0d47f04cbb91a84e22ceadf905fd52d2b1950f88db8b37b192aac8514c1d052ed562da8aa8f7055bf86deb50df28999ad104fbc6c7aa0599ba127cd912d69fb2df14cd COUNT = 63 -K = 3f9d671bc176fe8c859ca6615fd96eaadfb07c8394a738b483c7273ac981f6ac -P = b0e1671c939e273409fd5ad9909bd78b863c22df019e736b494f8684b704a161052acf808ab533cffc801a0e79385f7aa8731537b61399b3b1b5411eeb616eb44b1cd16904c932174f480174ce0605d7290f87b97eb5bdbd318242cee5f17968c15e094c8d -C = 3bee70e2cd8df328eb1da1bc86e34f13dd874d45d6fb329741bac5367b23605b8645f251bd73683852d15938095b7eb93aba85949a23e2854061001becf1a75b89e01456a8243664dbfd2b1bd9249beb31dca60e6697befd9335c198b27c4e1f91ab48b3f4c339b1a86c3632b5192e68 +K = 0bcef3501149f205452e0625b9024fe59783114e3cff5549d53a1c74a6d7501a +P = d80bd71c1d34c03c41bb8976e8685d0801353225bfd81f5a99229c99a655183c663b039b36c05d51c96889a5ff53a7ef807f2b40f20faea6152406d3f9014e1fdff61be41820e36edd3496ce516c958588c8c0009069ac320e5c9cf578a6f751fce8af0308acab1cb12a12f63c2c7014fae40fa73b15b41e1167425e89ead71e2f3578b7755a75b189bbd1c9282fc7a6f3ab11b24da3fc0a4023b383fe6af07e1a9a794e47516036939f9bcdff924a5a966642b0037d994c371e81fdbf4f6f5f2bc452593098c252b07b623b7c5873d93fdf3a501410f14ec73e3eb8a4aaf20dead66d38a78701fb7bb581c6dce06b74daeb9a35fe15b1ce642dfe73c09a4b2869847fc5939ada0692418312e6e5b3d0f8159ae2752e5bc61c6a632098f2608b89b8968b71d3b9cf772d7173f3a1515b628a2a2dc635e962c784b38f5392ad19dde5efc66a775907569be7ed4a314c0348c67487ad1484085cbc5d74dc1d938eed573e1ae7f388d029a3400b170569a24cee614539b5bd50ea4ca1d7b05e9fb3ef785a03c8d71e583efe20b63f48191a1c1e4663955cefd4d33110cccbda1343cab32aa6616a2b59cca6436f943061cc2d3d50556060492b008355d450329f6e72630765786bd55c9659188f83bac933356c1f9780f350918cca7ff4e22aa57740a25b760a77cf7c9cc3be0ab32133cb1c2d909770a4c84301ce0c1156267b94 +C = 80fdd8a84e13ec9031d883c3219ed86c525837e21b5236001d3d988df425c233e0c8a6765e647f4a9067c159f15ce5c12ef1fec624a6dbe3b2ad17ef0222daa3e577f7134bb5231f4dad716893cf3a416da6667ead723a82d8763185d065b20cc0430c1f86d3bdfa65b79b709c0af60487bb50ce56a35732a4630d5fdedda3e1818a46c0398fd0bb62155695af3f4fa833be53a4550e9f70f3ed9a9f83787d62b151568883f4907de87e74882a85a48e17fb86a2d560b77208d4fcb1d7cb6a7796f9e76bd77d3bfaf74888153e7070aabb0a16f38d4ecb9dfbf95147443584fbb4a8159b0c346e6982ad6be3bb8383c25b5afe3698be4531aa3e5cdec517d0cfd95ee7284fe886c9370dba3e5dc5653abba347f89591121e8a7ce38ed1bc479d1afe2d593a85eddf4c7430d90f653193cc036a95ea0c3d2f67d6697fbb8b53ad79d938d67258cd38dfae3c8b87ecada698bfc5ae2346f8d3df17bc2ca29cc41c7f6fcc078d2c6f763965058fce3de6e8486a691fe5d3df57606ce6263944b866aaa1bca055462e7764bf7d9e79ee76fc00dca7a2a3864c259bd2ec0a751cb6db3ebe70004201861b3cff14ba97c136c42bd898306fde36d360c71727a127f6f54ce9ef22d36fd1b1ff058de4a88a123e8f35464180a7c5ac661c9e40f1218f97ca0ef8974ac32e0837ac238637adb0d4665ea2f64fbc084e04d656edcd458e83a55c1f87c8d883b0 COUNT = 64 -K = 1e1fb1873401842025af0c8b3bac19e64d100831adbaa7d7973a9a5f152f800b -P = a628d18be73082962cbd47cdcd687967db987ac71a7b97f5f18395a4389ed625cc1dfcbd64e0776ad383d1e7d1bbad4e12829ce10387aadf139fa8c137ba982ae3c4f1292b5e84d4dbd7f60234b7fce372ca3e44e0669131ff5480cbb5c56daf5071758e7d -C = 2b9de67514ea0b3a364bcaf581e809352c097fb0388c056d66dc5b2d7fcd5a6bd83f1631095133044837faf58dd6f5e33a0ca24dc5c84fc8bbd4a410e79491880d73e675c7059d692f02482b96ee371efa04eff5ba7282c456403b4f4b304febe968f0cc5193c17c7b82042fb0bfbd97 +K = 18cf519500d9666d282a2bc3a2419088408fef59eb947cc99387ed1bfd7250e5 +P = 701c80acac8cd0d4b3f6564c6369404f43068a86d081953871387df1b39e2808886ced5106dc9bf40e5947aa0665431b5b68cf86ded5046536d419a52e513bc140d7e974d7221eca23d1ec47a6c1e5b99b88ee65547d7c29e9158cd1492e74bbcfe02f4c3b32f9c447022acf48529856a7a7d1c040c64887007d67b2e23617905c9e0fd815a3d22b666373d6ae327a5c5679efc371c0707b0e868d240808f6751d642e86976b510247fd299872e53adfd2e0dbb65ab405278da048e75418eedccfabab428d01bb1dd2619cba77195d66a70ae802723b31e1b8452a9e2529a3ceb3de650ea27aa487f84f72af29b67d303449e67a7e84b24ae27d12499c588fa4fddbebbaf7b3d7f9d11d909864a9b4221eea6a0e30f1a3d81873a310f9888ae1e4bc09190979cdef6bc7768d062d4e050792fb536afe1b82e6a0e1fc8973e3ccad6899a70b9f2dcbda855c4643464367ec30f3c5ece04e6e99d33358a5eb296731707661d322af54b0b74312d40735ba0206b9c26bbcda7e9e4894f243de67bbdbe503d34c3d18b7786eb4ffd8eb32820b2e912b39d0e286604af38fd826afdf0f053fe141075861b13a9e68517e80aa44f3d3e3d86d5865a60e5610a1a8c5ea7745404e6c88d9b4b72826e53809eaeaa139908220974e93ec4954a7f1add72ab5a1ec138ff7c336c2bc73f000113376a1bac3c099913f67763d02ca62ad3165 +C = c2de31e3d15174842aa8a337e8bd99749450a27abc1aa4138de1ffe2b39361917f123a49e988664714fe9d975270c006f345a115959a4de61638ffa31401fa78818f5863d75653306447d2b5e5315e30cda0a3da61e1dfd90e845bca2918bce8dd4ab633943df0857a93353f5fb8836ce59334223858a472f9ce3980b69b7c1613519cb16e294c06696ed18364bf54cddb22f21ad106a6e717311197a1c89529f8802a5668af0b0124eb2873bfc9b9d73c157650c21a4e7350d03e70c48c561ae08a450737207e451623163856c04ae0606b3877fe42164152a83e960aca28544fb3f56405ec76fa2fe4f605caa9ebc21a3d1cc69ef9628dc4b385ba0a33f9f9efde8f3819cea0caaed6813e4c6af7fd5204f74f76ede40c1bfa25775259d2e717c2fca351601712633fc374d0ef0cae4a8c341c22629da90aa29d8690216b1023545f7d41b90513213d16eae12c3d09500c8efce785ab4d6989433e65109d0bb35ccb295c41aa6eae13b7fa6ce1f12b61ee10a4d17ffccabaf654382ed12647318ab1e2a9bae63c292e314075433aff79578f779f88f2577b846be8313b33fdc0e16d30899b2d62fd72f83ad4bb1559b400cc2acbba62ad62134e470ed5a28e14b974edd0ca87195b10872c1885277a7855fcacd843c89b0dfa564c21bb794184ec9e6a3e5e8485e8c413059c388568305f5ca8bc3b90a238834eb63cb5a305457e03e980ae6df2 COUNT = 65 -K = 264f43358d8039ca5e5f3b5dce6d491bb11815a40cae3644b02bfa4b856e75f2 -P = 276562078bc48a714b7011845895d7cf2269c8d7a78b942b62e7ff2654c5ce50ecf641b2e7d729f26ee53d3ef2b0806b5c01f459f96462ed3e48f52e8c713f033097a331dafb29253281b9445c23f2c0c56cfc3d1084852bb3be262199d517a4db6cd6c9b3 -C = f7761b196e36c16ec1f51c8623e10681b955ddb33ad1b5d7f8a627b25d9d0a2a1173f161d0ee373d0d08fd8e4b5e70086337262639780c3fc20127fd5dfbf4ded1efc84d4190617fe66c81f1700b67848f5642aa82cf24b211e85d467e0352d2c20982c33c67a4e5c5433995f86dfb88 +K = a04c691e1f421b3e3a9c362e3f2be116ff91fb089e789b6a4ba4e055bfccfc4f +P = 37549f888a45b38ae0009d497fd1fb674d39e5a47f87a687faa282ae30a5a5b5fe806e05e58483fe49577e7b28f0c7a460b79440934b42a547916df8ec6f8a026f19c2e238635737319676d6a98bef1df80526a5beb9f54ab8400fc64809ae103c647e60ba02570b00b99aa7cf33e0a2945a4992af317bd59e263ee9495d4ff2169a4e2d8c7e893d3455e85ae7b7a8773feb9d8fab75d231bbe137f425d99df485fa4e7f0054f3eb5dc142d1795a8e2f2f3ff6fd92173496c432084a194f600e598711c103d846851092195c414ba808ddf841a772f652a43d0dca12fcbfbb56fccb7b3df4f9b155abe28030b600ad9d5b028bc38c5dd735d75645d899694969b9b5d5f1e6718c4de21f9f31090bed1e77b7a6b04e201fd7774234b3a6dfef0646d065eb5deb1af91d7295a2e313e14be20b0977159a0020d9441532593b82f7862d3d1964c645f7ed054ea6009f8b0e670cc62ba3063dca910f3dc6e92c73a1e0fbaaa1de0a153e3b2d54e5d91df9dbe70c1a4beec97e04217a76105f455357ea8c5f5efe87061a9163e39e28a1404ea4705fa5d785df1246787ea7756486f79a3cc7ddf72b159be720b258f6ebefd10add39f385808b9b253f8a016b73d4060dcfba777f856d98331c39fdf1e394132e3fe7da3e6f0ab6899a50d4d5c12e80ae44abd0c8cd42999c0761e8cb24452ffb039d6cb049b781fcc33c6003baa40d +C = df3747d8558ca53c3f7e2a1a8f806a84c18206416c3ae7e4cf8dee6a5329937e763c4ea3a67ea33432dc1b4cb112ddff6612d74f9dfd6157aa46c447c9fff5c5a54520395a5bce31edd047501c05ce96c25c48a81749c45716fbf214f7145cd1b847ea4950f0592b8f6364698b6a8665a28deb1e7bd826d17af8e260e242dc826c7578f6244b0c1fdd2764712bbe9e7b505c42164b02c58d6f78d8f135a5ab61a9de82e3c27cf32b36c79234787e760f4d0dc833ad63f6f16ef9f5e2bf7f4ab4f7756cfaeed905007782a35475d067b4cc130a5c43507a1345abb41422b7e42afa5ed1e303bbce9e51e352db5233b9543de3752b150f99b3dd0b5544b8fc3c8673ce7db860ad3cb9cca0166637eb1e857de281765fa04a02274a3ba5ba576d848d5458b29ea4f46385791d9b38450cc689f8c858c6e529c371ef53342a34bfe8a4b5b8a587ebfe6de509c63b4ce02a3f3222a8f5f7e76d315938e75926afc476e347ec49565a68c5f39990b2f60a7c4c4a5dfcdca2cf0b3ac94d5fc3f16f2302f444a0e01d6ee1bc5cf1f430664bca79c1f31b011d723cd974840ba46043877e18396642469ce02ca484ed4664e3c85894b1f0a51f06ceb23c0a94960a6bd659065043b09f8f7beab8cc9998fbb16c01057420056aa4b14d851aeda8ac33a4c60b028f08a78269824bdd9c54864b8216b29331fcc83c6f978b65068469dc9991bd1a1e21b40e42e1 COUNT = 66 -K = 8736980876225c3f50733a6d068629f1741eeb02283963fe6da244fcc83a957c -P = 5a1c5e5f82c2e503a082d5a9cb32c1abfaf435f20448c76ce0aa53541bc9c22623ca9489cf4c5a57968d176351b7bc412a7d45294522f1e705ececa280b23bfb94cce0606a40834fd9a71e23d07bf674c99a2f2ede14279145e4b8893bfc4954617a8bbb9b -C = 1faef2af32d1079e2af1bbe5700231f76724c2d54661816e0572781692f7758821af90d5124e422b5e7a6918555d29b0687045d7357339616c332cb7c651dd3fc33ffae8d406b64a3d219c3065f08046daed82a33761a2bc90eae3784b4de08fe5b6503754a79f67e2ae16ac536e77b7 +K = 1de15b72eba2d5f1f2b313912ecd1ee6b8fd008b1e57bc22b2e790321709608a +P = 1a0265760fdc5c4e3fdc6f5e175a17450dd28db035cf467672e4165bae56fa31ce90564bd2633759c6528cc2f3dd965e340824a80e1e4c0e6b40d6d01094fb57c3f480a5fcd72a744b06304bdb02e908db079dc5cbef703c5f6b465f0484b17f644f3488855bd61b90c098289af8b8774ddb50b7693bd250c18b47fd96777607da0e4f8ffe0d39e5dd29c75aef5aa266f4e0a2505814e9e1aec8c01e3eacdab40bb7432cb18c6a2c2705142b3638bf4fe343d97cd87551d4f81e60fbaf4acd1c5a6037f1faecb626293e917bfe8c2d1c847e121d25c9e745c4e5b3510ccaed27969211f51c5ea00235e34afba47c3fca1163146d0ab018490004439cfe5640fd48b68dc193372a8bbbf29718d70090cf84362f2360436bc70498a81b9a3774798002e1ac8affa426644fd200b37b17d7ce59c6793cc217a78e26d2cfdfa1eaabeaffc6940ce69454ea7927a15a2a909d31a46356ea0c5953407c7e91da7f13b6c6273f2d36030c467e262d6dd6e9fa7264b3aadb524cd2a470652e27f6fa908ab9233018a0187c405fceecb31420f103971cf50f00caf1e7e732cccacf73ed3935a67e9ab04175b75f8fb4fba04ce5145d3a4816f09ba1072a1c19ddac0c701ac37cead0ca2d9f9a8b8385b0db69c5ddbc3f280ae2e86b153855cad1a9a3a11cb5d6605fea5948b40dd3182ba455179a59e795de609ea8fe8d67112ce20da16e +C = db96c354f9b1dc4443b04b0fae005274365d9674146a0fb02afde8ab24eda7a1d563fead35902de672e6d1ad500830642001d6c0b7da8b68d239e424d7f96af86ced0b5acfa621415ec230f5308e6669b0952bb6b2df18ff077ffa80e62d0f7e324a6101525dc28b62c36e9038fa0afa9893ba1ff3cd7c8329a0c228aab114665817a9fef018c82dcd4bf2107819109e428ec04a4604921ba3e2395e89e13be122853a9b69fcda8b27ecd1adc8bfc41e0a56c7de77689037b23254a7cf9004340df1d6382fe6a1b283a6dd57860ddcd8b4a5157585705007ae907965e8976c5edac7f9b251cc02f1625b4b023f2f90689884f6405e4b17f18c5b35e6fd9e0ea3f5468dc4abfa995976b462a117947ff1334405de49b966aaa79530fe235d14a3145eeea73bf8a2fd0d35518ec7068b4b733e128358dd09823f8566892a0d697edb1dabd89a9696bb98fccb93708f6a8a93e6ffead226c93a18c424fc0b719193e42bc97438af9f2435cf0033c99b61a82dad86c084bd08cea4bfae0b15d240b6a1d879792a8af7f0673fb3a788edd2403590a3d0a4ae51fbb7594476813a92601830472a99ec4a05b50913465060bac9c5324c84f037043a847d0448b6b74a1a89c75709011d0de570a4a98d8a1177f2c1daee2c913e6c5cb069b1dcfbb16c93953327f31df7f708ce59a7b0b9de7ba4836a7c24439944a58aca5a91dab15e2e3123c4c3d305f1fa COUNT = 67 -K = a16e6ce09729f247f2f5b2ced35f96b3974a53c6bdcb26d4af9648c29d41ca1b -P = f0423f6d2834dd9122527090c481b23bce10fcfd0176db8b467d5690e58c5f57212ec09b5cecdf52202307dc3f126437de3d4cec5255a749f94552dd0842c87c73a753ec475ace776583f7bfd05e2d99ad2f6a547b9160a28b6e451a0d584d730463f2bd2a -C = 20b3723f8d744ff18982e68a0e296e88f5ef231045065701972e36b554689530aa86713dda79a7cb045ad169762450084a6940c9a490d9e1d8485cdbffce23c4bc45d56d6929070fcc59db7e802ccdda022c38516c79cfbb0a729471cea9adc6cd1c72c1840d090c605fe8cd6d3dcd3e +K = 907f82e2352cca93454ed8edcb3e2a4d8961002c3edb5a9f350bd89339f4afae +P = a395865457d5fd1452503a7c53607e3e3c8d156910132719299b23b48b80859fe81eff6206511fd0a54f2885a1f1e5d949b96d0dd4c2be3dcfc58ccbdb192aefb5ef1a6f6744158779da2dfb3c4fe2052a6fced72ce9d72e819a4fc71f40fd97b367df833d0af2465b8b74aa7f8e81edb985ec8eb4275859ddf61212d628cb606df434ce6b41ccacf46948ecc5569ecc11c09bfe35eca7f01d3db52659cf173dc810fc59241627ea06838881cfd51d21e96e249ab6732086d2767a8966d5466ec4c42b2f074d3428a0014adb1d102aa3e38f337c80c588293f3b02a9811408d478d8c4f55bf6ed3eaeadae0bca3221359f331ee6bc0bf1ca7eb3dfa90d7c2b71b030ef358fbf543b0319ce290ec74b9ad9c5432f7614af9ef6214f5b7de2c7cea8abf0a16de3f2a8d6bdecaac071540e51669f361c4e645f24ec353561e580d40aaf5ea94a48cafae6217d3ce2d68c504602b81311b612fc08f36abd970bdb80ebd4930b8e62f460e0917b055c9ba78d4d950bf2b6a2fb8f46fb0d3f9ba6f818c5262c6e3fbce9326f2424cae5d55b1c4f5c028d38502091cc61d8e45671fc02257354bccb0cec15a69aaf6baafe451cb8ca76e901a39eb9f5f8c3819319075c443e4b228231ba14241630238cc1f730270bbcb320c3eb9600d6f31e969a5ecde6d5577f1e24fcf3a7f2b6d03bccd5cefba86d2816112e8480c715290efd5a78 +C = 6465230d4c08487fd7cd0cbbf9958a172e8aef6f1159f6c7f347d24fa802c5c43cab685a82348226c169967e8855e35e037b73f2072edca7a6b72063d085eb52e5d7ca054c7045000a77811a633633805ccac3ea9d74bc6f2c8f7a091f87c92037efff2e363ddbf865a9f64109ab773784e2c3248f174760afbb0aae43d7bfa45b74a40ef5b84e07c8bbe33386fdec7d4357afe05eddb7f46bf19749df41f8f5d7458145d06265497fae71f6d160cbf81b018cfc0ccb27a05eb794af334d35d58d423493a0b3799ed6137e0e18f716a88d434b776f5955b5f38a81c635c9d9b824c3e2501b20504dec75cd275cc1535b2cd7bfe8747d9b51d65bd4d21f72ab1822e1c538d99ec7e544a05b5fcb8157ddb9f522512914f6a0c89438e560300a7cc14c4fde6f791ecf23675b445feaad77d79a95e4aed71abbb863f247fadf1b048ffc69122376da6aec809e68228225d008da3572703151d7c43febac5c1d8899efe135c7239638c67d4c0f627268b9f4f915f02160c4fc829b2c4bda3e9890fc5df17ea60feef23257bbe5c69f8cdf6e16ac2bf985532dc4d5ee41bb0666141149de2ab69278a162db641eda6d1214f11ade237e90e7f52facfe7ef01f6b2e34a4738e13ad2a7dd0fc79bbfa3b57fcad34a1c4767d34cedb1e74c9cf0e47e849251c224e52def90bbf6c2cbb0cc2cdd9a193c6a21b3626cf6d808273ba8769cf6f1bbca71a526f84 COUNT = 68 -K = e8a066b7abae2ed6efd6176075c413547e6c6be1bec28c4d8f5cfc1b01d4c53c -P = 3d7b68dd88171a1792514b80e08668b67999477e924882023c78ef2a8bdb7b0fef310a38e8a4ecca0cf063cd3cb33fd33b73bc69fd220b683bee8e12807508ee4fcb25cda26e07284bbbb04c5578f466b6374d147d50645926c7d6e449b790c6fcb147e59b -C = 2e7518d9e8a2be9156bb9af685c511ef64d5a2e3fa2213e36fb5ec82e33ab155cd4d29cbc5f1fe7e5543828d00567c3cbbc8548c9e9abff274177278e902fec4a19df5691e13dacf078a8cef61e3b430a21c89ba4e9d5d419bd96e993a19dd592732198d0619ef181d9fa7962a2bff44 +K = a408f2709a5e1302fc9113eac02dd5aedf3ca47b0985f768da4fc0e0b213bcb8 +P = cf41a18033c787e2d3160ce457a11ff78b20175dbb48de9fa2158682a2627c74998fd3db4ddd50538c40b7a046f8f7b7d9dde588f4b3bb87ae4891ee4b496d53c359d419273041c30e421f219537a93386fe71245bdd98e58a709b82a29582e7e26883cdfd055c3282d9194a5df1f207ad5e81b0ca199da2772559d157becfc036d8543889720d7312999b99f4f131015351fc474b5687b95bfa7603f7127a345a8cfb8b7f956c304aa5e8d33f31a9d3239332bdb16667007b777b0b7475acfbf40053d220095d0a6131b8ff68410666d70110aa5ec92e5a1515b53dce310055e5f72225ebce310759377653dc211d6c5ff951ae5bc7240c897d4df4e3190c008e5830e6ec118088a932d78bafede8a591ad1202e5c9e4e06937e613be51c70456d0cbd0a6ec38350ffdb755ac4bf44b71ec453c1622eee15d0b1bed82b0aa25e9357f12c59f2c4bf84710be42a942779d6ff0b0e31a30681afacf993f042c2c4d5b72abfb50703d7e24b64f79c8b74b53a096e6ef9f2192aa6d6fd174eecb5b16ed9a3f5f5388ecbf6e485bd435f764c88a08377bbcfc5d431da2ebc43e915f8b7efccbef769e2b09bff0160d0aa58f383a083b67d0963681487895a589245be9f9db2e872d5f2e08d4802ee480c2f39fb51b36cd7e13020b233bcca0a37d18ddd4b4736483a96428c6e3724def9a0354a02282e17690c0a11a359a3bc51df4 +C = 7ceaf6b4d1a8ad8027b6a5ec42377a4d8eb3eeb7503b5d8bb59cfff6488ae7f924d96e884df8f83ce058706294925c944957ec5d5f93ea6019c23d705432df279a72532a8588d0e14e563236cd4c857168a2cab74d83733609cf7e4a1660076e80d5e70a4a4bf8a03ab3f2453a247180af24b6d650007033d1e6cda5821e0f5f36fd650a8a3bf78dfcf6b6ccd584a4cfec43d28b6277dfd7b477039b0331d8aa89eabea6808be37bd449b8a25957e779d530da9fd25d452a526f50dfa524b390291d9a3c7c3d8044364fe21e53acfd077dc9c395462f7c2b7dd59b6e80c844770414728b9c942ae11fc3ac06c7d43d3602aec8886b9db671267a12ec19c64fb7bc81923722fac1230cde0280200541a7acc7acddbdb1d679c63c310ed4fcdb8d8e1f73902f021c98a9fe8a95d41983682ed57eaed3e8cdcaab124fd405dde8476a8894e76bf8975a8baf917544119bd7e6ea4b09f899bcb20e21a434607a4c09fe26d6b273eb7ec6421581d8e97732c7ec0ca0c6f4cf4c651cb034d396f901403a140b84172cc59b626e113af615a89d1aef9aedcc930aa4c684a6166284405ee7cd3221c87a106839acc5d50946d890aa5271dc22585025c376c04dff1ff351dc0c5dfec880ce1ac511100c05bad39d8c4131860bc916311433df2863949425123b94eea665712717a2d43f31abf03864ae20cd3dc215456f4bb5eec36cc61db75e40ade2d48a78 COUNT = 69 -K = 655400fa83c7a9eb97ebef34a7471def4d451c4e13b785e5b4ebd2c2bf485964 -P = 1cfaca0df3ef467af6d099ca56709f9133f0053c441a14858222a2724fe27b0da88fa4fe0f1000be0d564f4a77785390f4203b3a959e473ada12d8400455f7986d2974f985a7f225c34cc00855c96e75a63e80fbf33c61ae4c76d9b5fe73c5811408c3d472 -C = dee4e6538bebef78559fab997af542b817ba0ee66f7afa83133bb576805226b8ca45bc8413ae0b99a290b3ddaea3cfbc77181eed6a13c62b56a53d33dd073ddfca2eede0150906a294c0d16b7cc2c06dd7848bf2c85d272924fd5bb657eb906ba37a3c848426b65394be8ac4def4ca66 +K = 5775dd4ff6622c602ff5e8cfc362edc84d68c272f1217fe4381063ac85b7f211 +P = de59dab46d5d61d9339c59bf3652af43581e92f016d9b79f91c896130fd1fa243f7041ba307c8c5f890db0397007943bf4b7560a5eccd37ab26c7763ebe02334f2196330b2aea5724174671079f5fa585bec9d30684a15d433d924b0fb74974cc791577302957f934bfb26cc4d2e8761e57f7c112a6a3c5d13588f9b9b929de3b0cd7cf0e17b3eb9ebefd176fad1a5099ede4efc6fb20513a101b94641ec59c55b5574cfb9f86120a068824c2f2d895cf4e86abf8d7e1c7b8d74fe8e9d2ff580f770d623e6ede452d1208a6a3aa111c9764c8f4c1bcd7277a3b9934ba968a5dad59237be4970183be3c7ec14dac66c7bc77ebd4a2134034bff2ea18b40d6aedd84b6e246dcadce956e623521f64a2441b7fcf0613d4e1cd92cff74ef6095ce0c79aa07e0beb0bf6699e1908a51618498cab378141c2880656723177ebc6b37982cf082e59efc82e0f576ffbc85878665c509e613c7f553d5d037f5e389b0d65c61e18e239844771efa5aec5e29e702e4b6a7de92c19e5c184c4ae138e9d119caeff0cef166c8461edbee31dea76ce369b26def20b126613903a29c3eb773d7a37835a51b32e0f931849d7f553cc4c4daebf2dcff8d0e498a14178ae43dafe75cc289e49b0fb9b6cad96a1e9e35427778b58c7d0380d5ac2ae6115ef5ea5e8e6f082645f0f9773f5fb0bbed16efc4aa2706e6f47e91dc1fc4e8e2b0a82372d678 +C = 348d81e0b7c7d093229d34f329ed50efd5491baeddf80be62a723e27d35111bb4a7eddfa8bb3e037e9001955c39cc0c781e62f06642e7b679cf3be82c22a32f725de27c0e2e62fb21d495b250103fd23f65b7a7dc216c25229c8298547563925fcdea4cfe6a38c741404118e1b781f31737a63b5acdf90d053ea9d3c879a078f9a666627b073cd05c08fe1635dd1e4c94932bd2e3a93c3fc06842ff533731c842e1765ecc70d8ccbb213f8f3b8141d29c3cf3a4fbf0893f136877b74b934bf52fd26b1943fe1e6fabea5537bd1b957919148e9f1ef7899bb62dbb0946f79bce346ade8156132eb141234acb8ea55e0ef58008b81fee620f0014c6a3c1c07bddd699575f93538a9331ad7ff9b767b9add089daffa9af4a7a98378656b2ae0bbb5a9961e5cf772f10e064037f866a7d16bcc5ff2a88a9d9f6d13499c7f192c589f9725de6f369516a4e9d41a1e17330ed503e996b86d849cd43cdf034a6e6cbebf41657597ce49bba02b1753e1203aa7fba29d4b59da9168f865940b37c8fc4b7aa1ec05dc76c696033f5132cb9546020c6b70d0df03caafbe5d53a1318f21f668b78983d9d8d3d503fb328695d50629ea711b0a9174a3d20d376f3c9792abf42b2807d9fff07fa856af0cee24a553675f06e4adee54fd2b72e5b256ebb9c7bf36af1af67c2b5757ba9aa8c876247db4ff293aad092a8e44f934cc53cd897208e7facb7487d077d86d COUNT = 70 -K = b4ed5cf882b9aba6ec71f6e03a4bc1f7f806bf4a586425ce4a2fd805e36d5b01 -P = 50e6468925cc726d6122bc7e26660f7ba2f910621370e4c1463350ed17f5ec811d01d6f7a0b7da73225b34833673715b2291c071d3d63557a23a678878da34461a81839fe6dc3f103d15d632ba608bab0b26a77a4a232dbcb86fc744a3c04d1f9382d4c8bf -C = d1850911af477669721ca0c0a570694c4b3ca64dc9bec639e534c6efde59e785dc28d1a9b5a2d96d279a0f2090c1160aabb5497f7e1d0e67ff3abf4a61f95e78da74f2faa4da63c402858cd9b381916275c485a8f1e7f6d85623a218b3ff13c2b48b79be3ebd4c8fafdc2da82b2ed905 +K = c0c40da31aa71990d041e1dd6d1120434c8f773ce38bf23d663b804d756de85c +P = 2d955a7fa19ff6694b9c05fbca7909483d28a84b132dad552c193a825f3e0b24ab623708220cce651c9348d171d931a53963a0031b36a324824725e7ad8664a39c437a492d6f5f54c056a90ffd8f8caa943fd91363a6e266e988c4c990595e19ace3050babb90f5bdd2de1e7c61e03ab2bd2fbc147404738a724f1ed6de9f03bf8eafbd45ec60b3b8e1959920eb741d6beea7b38655ee27e7b301a3419ff0cdddc9f6c08ebc0605eecc23b6dc3753e7f330d1dde535cf7e0a850239be497ee43e9f835435afd495edfd10c09241323fd137deb2667fca09f8f9459d5281f1086cb7d7717811a17194291d52e0f6a42b42e8280a1df18153ae61d5bca1a8202868c6c73a814fafef15d365a7a499c432072d8a1b9c17d07879bc739628d378907f84249d7ce128ec63db669a162b2936539bba33a019512868b035711c2a337c32d726bb816fe74c6b03a16cb7fd49f0d57acc5d8bc6206583a472cb63e41ac806965aa1fe08edb0a54ea21c7cc62349a3e2f01101ba738f17b1bd9668466d51e47fde2e406674f3cb0f807e64ddbc07558710a99e93eeba0dc05415ee1dbee658e6de03573c933f7883e9c9c433fe805014feaa1c2599988f9319f771fab7e58ad3b137307c2337c7d717dc1e537e45706eacadbc9485492f806f28c9f864e38aa6f830bfd65125e8d4bc7062b03b88667dfb0857971ceb7c0ad27dc08b40305 +C = 472eb0b50a55795031083d7ad88b0607d73d9edad4ceab2de7645a3ee1bcace20935c8517dc1ccab188b1648045dd71c08224ed5366fda6e367342b02a32cfe50a4fd5e127ad67d23ddf7eb664799749df84f1f368873dbcb7ee604f51e5beaae970e60953d1f41a2c3c1d74d8289fcb4ae3d27d9d03dddf80c9d6a406c9651727e6f16f6063d4b5167c2a76c11ad27fd7be83f103150d00aab0a543c47da677d1464dce6529f5b15ba3bf9d5b6c27aa7e3b6ea7f2b72c9ddf15609f2666b57a3a95ddad2c6ff0b92062a2a4225f7a3f646a485b64f36f582e171090106c7c64c8a89763068344cded512867395829d6106dd70727000693fb962b902acf90ae32220886bd0717a8120fc47c52a42d3e07ab52337f7f9cbb6e59cc0890550dcb37ebf8c837be47e44063bbd09b5df7e0e9a341015370145df7413d71d9b73acd3869bff6a530ab38ea0316470939802c59fbf3cf9cf3c5516495beed1b7e7970ec875941fdac5b13384f1a7065aa16a28cece7d11530c863bcfbf6d9bd4a4cae22c1dd5e36faf7e29b5353c32596e4db43e7d2aeca43400a770caeba7032b785c607ebd9e04c90d9dd64ad993e1f06fef80fc77dfd484366966da4d76514ca49c0756b703656b06321aa8c54be34de81fb75fd956bbcd461e866f51379b24482e256ad9a7a8e7f7374b8d44bb2fbab12e4dc53ac09b54aa43f223c711204cc574b83f5063796cb95 COUNT = 71 -K = 397671b0bafd3e9572d0896e93225962871b9db862dbb3dc8f14768d5bdf78e1 -P = dff2ab01a7693e3842bee449722d71086f68b4c1c0261803e477e9aeb01ffc4dbad8e3d9abb61836c02754e52fb0f0b256eb250f8994661c00aa2be5be73596c06eca2168a6e13ca11dea6b31ca87666d50a7d3c20228d4eac7adfc428a36f404e6b0b0e19 -C = c567853b1cfa264f927a6282454f97d41f0603211612349e53159d4cac944e00e678b4810f04c409c465e4e2a921963f1dbdbd4b32d45ce73c8b9e93751479297b5a780a19de6f8441a160ac9ae3074893daa8429e1ed56e1356deb5c226771f9df969f65a735b04def4fe8f0d185bdb +K = 060b07d470383ca7011512dacf30597425d008860a8add403df6b93ddec570ab +P = fb9eaa8b9e7033010e74141f6654f456b0a4f852a4dff68f29668770bb74b12f577506d0149b025e14615bdd7f248cdf3eaf5cd098bda7d5bd5ccc673090643d7d3b5be5e7bbf44e93202eee3b7ca3e363056d0e976f3e6717468984bfa8b0aa2013e6eab147636a35d6b5188a6f89ebffab612bee039e016b3bb8da2d882ea0da6b12324d6dabea6e66e6bcb6bf5871b8b76fae9d91e8464a834c5b001bafa6136aa25e16c67a05ce424e823055566ad463e1fe8e3547ff870a9626337188fc1a34158b1cf4b4bad358a4b109b87a2194b74b58099e9d5e1250cf950777a50e564e556af7785b31b5bd377c7c9bfc0ba249937c36c0cc49c23d89d9cb7a77cae983c5cba3e42539b1ef3d89fc465304b4d7e1a53fd225ebde16ec236d247285d5b694bdff46eae10038823afe96cd3ca80ebb74a0724656de735a2a00c4bac07c6fe95a7a7b6be961d2f47156d8c972ffad2c5b07c2d04b9043a3f4b1c681beaf510e7a5e7952102b1aa9dc13c59ea881c38e7e7fc18774bbeab878f079d5384c6564f54d03f8058aba328fd927b9692eed351d27572fde0ebf5d9dc14a03ad9296ff87f3fa610c79283677bc932f96bb7de3cf154b9c8f312b94c013cc7a7b1faf8d890447cd79faf3c550bf71f74b35ab3d26df1850cca44e478974a5ba075b4a01578079959d6410f74c378edcc4934a0d2ab49e72c2324eccaebe0c1f60 +C = fc1eb83c80230666731d716a6a907b509ecc6badef2994d762c7ac70b1a81dab36661db08d21c88a1eb8914d1e38cf4b1e722ab64452c73d64f586099edbe3c0845f3daa15a302ba0696dee94ce9c16d0e07ec7f26dd10e150b378f74560b3d52d59e06215448ddcf689956fe78ec6fd3f21f976c7dedbf242132bc276fb593858e564c8ed8b84c57ea9f3f73f30ee1946cd5d2642b4417ad37330ec1a02d1f52af4f288ac6f2ce9bc1d3e8d062d92b33f9a8bcf5bb93a42248dca60872a820e107df8db6457d581f8f60d4c38ae2f801a45dc0474c785c4e704118fbff54f4d1226a128897071eedfc5f494080b415b8c03c8bbc0f288606d4a771ed62562bc9409dbf5732d549960f0edaa4835a50f34007054e7c42219577e8450144ac0bcc5ca620ad89250195cacbc4ca1bc53bbdfadf4cb39654845ed4bf956275e4d64384433f3e770e06aa69924bf6e755510cb3721ce67de5f9be13f8f5c95f85f718de3ec2254831082b49329e0e54840946fb2ab4973dd7c37c4975df127f46cfcef69d2ff3a270b8bdd932945940f9a0e683293f346f21573571c8446910327eb23c47ea07f738ac711af1f2a8ed6044b6efed9f1d0c98d6fb06dbf11260410c58e7e24d7d5d0038366aabdcd541df668adfe3b4c25cf8a2ff69824ec24af436e7a52aba6d92ad4dfe02773acfd4de1635bfc517ed519403cd4eddb953b8d101f20efa45a6e937a74 COUNT = 72 -K = 429bea400089640c42c21be19fd27cc85539289ede9ed044ec929b9150513242 -P = 0dd06ef94af9ea1f496dc9ec7b71e10094bd1d2382fc25fd3b4d0e38dc938102c6fe9358b25b5ca8d76fc742ac4f900fce7386493b25aa18867460b4a18ee792a5f0e34cdff6b4bb044d25d454e32d51ad499ef6b87fca51489f603fdc6383922fd4a4bc78 -C = bb799a6d48ae31b0549df956a1fd17e75e3e655e92a5fbe352707279b5cfa19fef9558236110082949ba5217d03b2687db3213e8e779f9b2022edd93cee1e25e562d1f015bdb54c23b1073fd8e78be10f1926ec59ab037a819ead8b65f02ad40f793c4f88b333592131360a2ab001dec +K = e7e5f328f6587183f02311cd2577fcfd0f4ebe9281a27e78ba48f43e6d991ec8 +P = 96dde2a7cbb309ecdfd409739e9d9de06faab34c73433cc7bd79d32b54e25a8bd321778c6db6068f2c75714876fa85f3ff564d91480213c25d6b4001fc96498bebe49ca881b74da30ba968f60ad8cce5e60f46c8385420fa20c4d9f06af5acc53b393af6610a4f508848640ba26c23b3c2a7517c0e2b9f4bb0485564561a6827224ade9ca678b938818bedbf7ea8a41ff13a36089721155fd46626cc54c58b26b4192519d321e19682f24bb587e547b89497754f01516d2c286798520254ce2952ced4f034056f3417a7828fabd39d1e4f7c0eba35668c06220714a14c3a676a46491762f84d5b322de10df42f276388d5624eecaa137d588d57745c4d23794b24aceee9f57ff1167b4a9e2021d68a7402ddb5ad9111151a503fa58ded1d9e70bb9c71d9523efa60ae37f4e741f648c308e539bbe37f39f1bac68035482abf0e3213581601d0429521e896002850bbe7efaf7ec24c1938044c9b3e44ca355d2d72af364247bd1ee747e5424b38b46c5885e452c1eb59d3f5e3e45a05e737c07476e2c4836fe227f2f43a74f7fda0a9e25370cec6de1bb6feb928a33b7777271fce1387457c6e4cb0572e76ae6fd25c25e44a6dadffd04308069ec4b7fce6259a9bbe969298ee8d912ba894dacd92264644795adc9703cc763c220599c2f87d609dbe84c7852b6959cd8881eac1580f739be867bc19e008b9104b873f71406740 +C = b6b82a2d76013b2a4a3008d3d0f9ad520047d59d11d2a0452a2e9b16f5fdcfc7e6d3ab64cd2357167e9437d2f347ead04b93f0cb74fd0d4d4bf2c4d7dc1713903f6297c6e2c1019cc5c7644a53e9594b3e75fdaab79e0ce5f694cade6f4d464591d37fc7f274ec340f81b8ec2fd92bde30e4cfaeaae966edf243d5751acc6d7a2ec2264903b2923b08f075c8b234b509c0be7d38eed4c8092ace5d6c93e4d7edcd2bfb4e77b08eae2bb88b01b27ca3960196bde8340885c8663fba6828dc5b52acc6a84b05b02a2e9ddbbd5aa8380ecf5816b4a8232a12fd5acfc146c2ead3f54c7fea6ee1330b5b9a8ed161f806e032d7633fd862c000c3e744a3c866863fc13c0670246b7eb9dac0c3f08f00fe3a99c4b34204b9966e49cda969ecdedc0327bb5022bbfea88a07608396d5ab58db24c14a5670c5a9c837b416a04d5b47daca8963f201e8ebc15a426ccd87bbe1e6e7c37ea9b1d67b44f95c63acd830f6b6f662209cd9c1c5d0569c1bf718124585033618dce3ad780d444a764f8bd585ea60649c3d544f088c88e6f290c31fce241449d3b86b8384862cfafd20225b8f0df72b7b9f2fd39a46d0266f367035e045e663b857b6a5aa438dc7c60dc42245390229f5fee576f43029be536fd8587fca4fe0d581c63390785cf72c3e261b70297a4ff2255353bcdfa9047270ba9f24bae56ceeaa72459893bfb52632f775fd5bddd06f8d4f28f14bc5 COUNT = 73 -K = b5c6764cd8a54c1c796aa7c9fe371c4b9e8ca5926e1317179c84fdab668b5596 -P = 0c3a501e67041cc8ad4a39a4e2746afcb618f02998076ba4609a6e546efe682209d487ff36f806d2e51453b35295c97835776be0e154317316e5454b4deb594f59e75e6632b8d8974e40398ae382c10b50cb22425cf10e22f5e03900029fb74c1d11ec64e0 -C = be8f4bd007a6c9fd7cdb7bf423480e0503ba2697fb62142a5c0924ba18393a01e1d50d869e8ec5f6e63281f1dcc6a7482db95fd44ba64d2f219ae2ffbb4429478db917d8a08d2b20bb977b37b54716aa3fdd262d646aedcefa45dcf89820ab27c891c39cb61a32a2a93edbb858f69e47 +K = ed9e2afdee6bab9501440c970743c1ba7b3e3269ad8a93deec4690c1e1d24b6d +P = 3304ed62cd2e6035b58d434f6a14b829f1c57ad87b3e09d1b8c274997a5dff1d34e2b1857ec7879e74032fe75aeb2343b4d412e1f309994885c08a781924c7b02eee47b438af2ba830199c5636d779c95f443ae6ea273557073e428e6ae51122096bb109a2b9b6e208102dfdd1f8d763003f8a2be57b9cf93dfcbe5e57dd634af923222b26cc7b2d94d9daa721c155a04ebe76df2bfa3ba3deeca78c7396106848b7f00eff02b5c3268c23adf8eb97af26ad72c39dde913d10fce4dd1bfc0a14c832f15230a7ca4d9defcfa4c1ab607cc9f195720910461b550ec40edc5a52a69c0a1f7b876563adfe18cd5204e94ff5c3c08fc4735f5fa1f9fff5d951351930fc04f2ebc6f5c124f99543c745ba23e21b8c0488b3d234c9929b86e594512f182393fb931d5bd8f5ae646aae0a573f3594b69615b3ee855ae3b1e7065049cc2aab8e73726c7c99228aa714d0754ca4b938e86749a0821a178b4db20685501d24154017f92a12adb5a6fff8b2e15248b8ef1cf9184c86bca9d57189ed6980dac3632b0ab359bd4a3e1dab5450973cc11230d721065bd717fcf82f23be67493a7b343119c039d5a752b47134a9e44f296409f998a7123a3c5d93db9edb6310c0589987d9209f00f51515e76a65a927072052d4d4e5be26a131ea32f260a11388d0af474485e7e7eded999c5e690e6157a216a4d7a3943a02131888a4bcde00ffbd +C = 5e96a15482715a6fe0ce4242e8d63b47b9b2c4b351ccd00b561046241f59c1344ff2ce83acdec36b49517864893076544abca89573c8ae1885322cc756c008b7df71c64b2042088361063b91de40880064299dda6b0e24e83d531e8d54f95ef49225d45b809e34c22f38b3e5d7d47e6a69186a94d673e6176758da1bd17f555e1acd8d57e4531da32e831ec75dd15dea4db634219fd000dece9fd278c552d5293d2d0dca4fed2db824201595810a031ce477d359da17f02b60ab4e0415fa582332438e187110ede2b0ccc35c753918b098e342949a5858a2947ced4df3839b43ba9b723d76b4a1af6565383da48ee6685299dfdfba626052d7ea4a2e2e9185f00bbdec5cc73831a6dcf8c9b33bf727d2ff68d7a9b8c7a121995325fb9ccd3fa8ad8ed00c924834c2aeade099c6d7d6ebe97405e3ff4060ab03171b3b24e236cb0f96ad3d9a0b0388ff49e99c11f341c334f43f0fc93c5302d030a3977832bb5f930310e2f8c9873024a54faca6476e63c54fa5ee20c37dca512712e2befea69eb4e1e079f6322794a0fb5494f1ad815a1cbd21f152cbc848a131f271a8bebf2f841c900f232eeb07b04e4ff273457511f12f60f9a1171de9ec2c97049f0a0b670da3dfbbf163a660f08ee4c18622cdac6e5443de2fb8eb0f534fd8c2e9f93614c013a4e0cfd7821f4111c6e64b7f90ef8290d890dd57846cc9c0cf375076316c04fe908d9fafefdd COUNT = 74 -K = 7d617f296b5361bf8714fac74a00ed5f2be8d9b4717580a92f079bc2b92af493 -P = 189bdaa754094207e62bc869c6ae61e1fcf04badfa7c2757d517e29b275ed62266d22a1668d6869e4ea623e19a594e55348bae32173280d7f5df26b429f78b43a21940782514bd3ebe33e35688521e69831683507b6ee7f77ac62d864fd674e809e571d398 -C = 78b16d4dc3933896d0082a0c9dd290e2c595035627e9e8ddaae89c02f913608837d6bb38427116905abd7c6a02e2406e8263f5cddaec74a5ab8d55fad1d2a3411f5f8ec99bdbc195336a9cf89779674f8840f09f3cebbcea7ed35afa88b198e62245946c7b3e3b4f32039f4d1b4fc112 +K = 94b4b38588976533b43afd1fdaf4e01bf61e81e8e13eeeec7b37ab6338e85a45 +P = 181ee1a03e1b85e7cc7cce6bcd857ed5851c17e7653beb06daa7ed496ae5054e406cfec5733ce430157bcfaac5cc6467c3f3e4738b351aaf082aad63b24b3de9bcea6b44fef58ad460816047f1389324c1b481327cefe97c65545976652f49c414c86ca6eb93853102d402d134a780df5b4d83d3020253f6601d0c041197c5fc6defeefd2844c881f7a4f673161abf5b433b632b0f415c02e2d42ca3c6c856d42f6b9236337c7cdcb9845867c1d93790017793ce34b37b7873d9cafa05fe3d22589090a7eae3b7e2da5d959f4a77046bb8e92b066040403a61fb602bd1e8abb4419587adf66e13637f8b2d3cc633424168f7f1bbd7224d8cc5b3538a33f75bee67ba328e0664eb4ee4090b2ee0f317e7338e79c78693ae15b127d99e61e5df9a3498c35e5d47de03055d37732bb238a8c93a0ce85c8493e06503f32276f57c7580e7dbb60e11667209e332deadb3424ca6574107cc5a66c72f988aa8c8ca4c7841705f2e53b4c554abb1cb5de39503a92113967321a1f45b909a50b4de55c84e9efd278765cbe8ea11bc9f4b26d2c715810899220ef0e6d7b3e543684ff0ea3c49f350698b9b44f1946e18c98163573b727114e9158288929cc1de0ddf42fe036a4236b072980d134a0e030d53fe78cdcd73249e6e97bbc9359cbdfc3d57197983e1cae56f9cff29f1349eeddf1d90710b951468beaf4f92963358c938f7658d +C = 7f16f9433c4a3ee82ef77983db5f493e4a2322a04a3c670866a77004f2b6d26c1b440d3ff471eb7ff5bc08de7be800e36472d6062bc094eb395c7ada552828f01c8ae0de641312b3729e3cd829bab5126cdfcdbd693e950aac30d29faeb8fce2ae672855ce33753a1c48297c614efefdf43a87bcca43bc36d41fe99bd08d7a9c713ba10abaffba3f1de4437eb3d53e411cbc2a40052c04e3d3946299f749bddd49d93629b628640116890f7bfa1bbd3fbafbbb5f7611ef5ca64bd1104d1932d9f4802272deef9e461c3b1654bc337a01ffef207fd5e460ab9fb9d58ddda93b2471e3b70b70522aac94311f9fdf1b7de1d6dbc9d323dfe87e88d897d254f39e1cee983983382c98cf3a3f6f42377f24d5982308d9a6453a8a4a0dcd2cda3975eabe9b6588240e40713854c990d6953e4408130267c6e53537eea472da4560dfca7d23af1a2d08ff102ef6f085a281545123ae1a65d63519e66788a1863e66a9e58ba57a7d943618dddefed5a50360ee23bf7055024c3528df3a542eec470dbcf2dae21ace4a957c244e508fbef75ecf5d43b52e8e64fcb14612ab73d31aafb2ed82bd38b7d520a161d0c475b212965090485c231300e49e49d19c6b67c5b17d39d2f8cc264a87f3a7ae70e81f1a82929c525e17e7b119c3bd9de008b04045119d994d67ed1e866602a91c845e0b237f766c60a4e47d62ffbaf3b2f9b54be1435f6a9617868c19725e COUNT = 75 -K = 84a8a03af62aa69877d581698a2db7439ba27a608dfd75a5352a184f89be6bf4 -P = f59e66fd89b35a2c27d5ea5ebff2ac7ba58ef35ebeaf7c2bd2b0169c97e6fea269c7b2ca3f431059d8fbc02787ee41cba7a1dfdbbf37e32955717bd8199ac27a3fa37eec1cd7e30146a6fdb15ea17f1e7bccb8bc112f98f9dbb2c94282ba3a5d64ab4a38e0 -C = 7d31746c517a01c4a4553d3b1ce466ce371c64bd72323629a98d339369b1954ad482773f76e10d3f80cd3221471627cae0de601df04b27eb546953d88439257d8cd153a9a077547232db03a67110d084b3daebb3573c4f4de7499bc62bda6410a56b09b0905e765ed3f749e912c7726b +K = 364feaecb3f9d9fc62163954bc8254f6771bd751a5d1bbb141de17f7947df800 +P = 777199295d415103df4192e96ee6830f8a42c7b53cc89a56b64e9bf8508c46fbd891d669afd22c75b507db932f05e3229705bfb332d913b971822762dc65609840ba3caa57369b128dd289eca6619d82665aa48c16b9832dc8bb5f7a07604fb6fddd472b442fc248144debe4e32018a5fd031055e1029db4383315b9235fe045ebbddfd2ea4185dc06077f5bf8245983ecc2ecd345b1e949ffb79bbb491e1c953ba945f02526d6e18687784fc2cbe24710622f487b80eff71dfd9e756e62f882c7baa4eda1885da26a82b42f5d63b9a79e8f75eb6a867f51c04c8d54c6c32a1ba54c27cedd6511fb37bac68e1ce0cdbe46e9f9f39ac87d17218fcdb4a356ae2a7e2ba3c4d2e842bf2023b247313e89effaeabec889c711eddb9704d7d3b51e3661f3bf30ffaec3893c04d7427700e9e0ab2fdbbe07d06e84cd8e4380ff73ea059df77c91346ec995c2c75cd235076c0328eafba31db5c8cc69c96c0bd879c9edc4429f4c7541967aefb6a42030b851c959683e5c7c4ca9bb82094045cec440c90eb7c4f94c0a01eae34167f3eb412fb1812a0ad4dc86f93743065b1abfad8f1a7f19809a41b3c69cf3b766c5f4c484d25cdf8b4a54079bc8253f30b40258a255d8515557aad443f711431dded0d2d8e567cd8f5eccf7524a62ab6472a35d1872ab921441eba7931c4e646c051af49b96a02039e9dd2ed4d525e78761fdc44a01 +C = 737442e5971d57950af716bc08f8aa259ce05e64b3ca02eb659b907b568748ee4eea16a7ceccf3cb64053a6aa79f287f4de8e0936f0c2bbc7bca169372c5ef3cd58bfa3bdf42e8097863fa88632b54ee36714c146b805ac30b0f74d6ab13de5ad193d23804fb50111458ffb453d5c5db0a43c88b91d5cc85edf274271ba460aadf49c4a5f5d92e15c267e8ba4584d90dc6d3ab99de4126ef677fc4a9a44f3ad61a9037c6eebc0e0f07fc0bbb6b09d9ffe86fad10c33aee26a8143945a79ef33734295ca410be3557ea7e4d23a977ef1b066146235b36c4f145cc9eef277415f7c6b264b8e59320415874a15ddd1561564093807ba30125da04e74b58d1eec76dabfc5419ff6b614aac34b2c7a0240e809e3dcc870f1984b25bc071ae9a62e46e912016d2bbd685f880e16711671f790145734a90abeabe4c2cd2d0638e6ed42a46c2da6e02299597242da968db28ef93ada463ed04c52fd474265cd66d45b44f9930915c4cfc47aa8a42ce92ad4a919cbff76044f3a89ce9e2d1feefeb34a9c5e3dc83e852818a81e8a17a70e759e42d3a1478db6dd4ecab3422d03419df75da64185dc46e12fd82e21b91fc09b3338f11e88a380946c7bbef1e16a40501c24faa54af003394d11b084bd126ffb6bf2e5cd3c8e6ab085969c35d03cbeff9b5b695b4f0c82547ea5389511e9713f2d5c222e9aea9b95a8ab87637157a288869d32983eb241ddbeae4 COUNT = 76 -K = 2463e3d2e338f0962ebb8946f74c2a7927102e3365ff5184cd8879f44f4b1c25 -P = f3a1620db7778d1c9e313f5a79819a2a976d4adfa9be55b22bcbc2d87bbdd921fa3ece2f08a0b6a123548b63e75d4deb88ba5c66f9bcd79fcfb2f42e006d2a8033bfb8a5e64a567fc0d6ac8170c7fa49be974608bef611a7172274888c5535628da4435e5e -C = e0afc97bf510e81a719fd1252d4a5c717a21841401bb8e658c2c7d549f9043366d0abed8cc59667783768ef61c4d0fd69fc52ff2a4bf4567580b21c1932a9bf7326025aa59cdb137b54c908d89b45d1058d4569c09a737e6be0b92218e4b71dceee2dd4e9a3aa112e1d393fecb7acf21 +K = 97a396525882889bf105bff936e81601d47b62337ba321030d47c739e3e0f7b2 +P = c42ae8d179b1dbd10161a24a2f4177f7d4beda4ef1fa6484a13869631fff5ea9b8bc3c73a62e397a8e75e6d2693ce051016db0ed3e76d72918fbb8d7da5bf5d989ac3f9755974e07741cfe14eb52d618a303084ccd353b8449b99368fe743649037606d6abb3e24a47f6f528530bde35743304e14b7bcb923651c0a99b5273de254c6aa899468c6b601cf34331b6d99935bfd31e61f18b5a389dada3778b759386a351a4c8c28e24e49c1f1a6b81806b16c976ed66fa6ce6036e917ab2b7839fce6be3df72ffea02b91c576b48d6d8e2cf26cba2c3f04d8267171737ff8a59c67d9c83175659195d8ca3f8f2965949dc83b30d1cc3a734f871219f465d5a65cd589f3a368d616212ea0924fb436b53d878bd32974b6c65de3f6b5d4f0f2f96498320eea344dce5a16ba536a59a372a67815e166e108fa431d6baa6de3df6b8826f7a7649cb6e7ed5aa2848452bcf2ea87186b164cb3c317a674035032aa10bf91ea46c0fd2a2383b54e5753033f52addfd1d667dc3f85b1fbdba37111af5dd5e576de6cb33d758efc916a8bb0a1c69e2697c15538c2d4671231ab9024aa55321b5edfc5abf5f5dcdcc54239e4dfa0ae0b15b66b93f65cbfa5b98f64f56c1049d9bc6dcaeb70616b8f191a3733f1c9b9397d73b0ce78bf5f32442543e9990d0098e0f6083a77c2ecc13dd933b5cf6f370dd35270e46672d8ea4d7651db19d3e43 +C = 480541b6231919ec1e66c3efcb1ed35071d0a0fad790de20d45c4dfd34838e13c35179022b4a15355e1fc784aaa25b165dee66f636b6ed323858547b6755f3b48b0252c1c30bda5a79f91c1cd6b4ba696898dc174e2492930ade4aa8656db1a358c4de6730c3c701c5145e54a5b68309a57649a9795c0c3ad0c85d6c4fd8c65c3b360d693674e5fc34e5d7be230359f8eca9bd6e94560e9d6bd86e95d0f826f40bf5196580fc9505f164a2c861a9c08011013713548ac3977dc620a8aece80e483799154911a513757eca01421ec641ebbd5e2a272ca4b296cb327aaa38807c97eea4482060d300afcda08ed03e8a6a133086515a879fcfb82f3829c5bbfc44406db336a47b657548d7b59038f29c4e3d2eb120e29d6497f30732b838288cd5aa62f356aedebc64a207f19bd5a36c9b74d749bbcad37dbf6bc56daeaf90fa7963feadb8ca077f106de23b31f56aaf3517173c81a9ab7a374f43e8de1f6732824d270e1ac2697b8eb9b40c9ccb4079f40fc4db3b4c7e247f8fdfa6fb53dd6ac071052fa41eb4e1efa9002a34d840b2895dbf5f893301acda1c8f33acfc9795e3c99db0013de335fa820f12ae11b85d4c27c96a49acfc13aa01904111b0b724658689af80e79f52e14e0d87aff18cb58deb84191e75861e38b67cb07763ebf0aa490e6fc853daf295292fa460b1ecdf7a1ccb4483628763f19c89a6772a6cdad2c6934ca7395f4636a COUNT = 77 -K = c77932fc7fbce5c5d2ee867b2b2437499b0015ddecccfbfbb383e2fa6ed31811 -P = 295fdc17829315d51522025980843a54e459a21804b55c4d673be9b3a4205d58494a0a4f11bd8e576467eb9e1f1836cb6eea78cdcb6c7601bbd274dd69aad06ed4d67e8bc417ce4c25d74852338f279e9213bb82ad84d4c863a3ce1d2c6de3df8fb55b16dd -C = 7df02b5c8d1c0f291f857f6a1f3b1a020105668a06677a88e1a4c0807eba42302ecb20ed4e6d3c666617baf8d89517d25169cbaf8ff02ee72c14dad0946fa03537e65f5969cb11eb16cca18d77443835e448bb727c9c3508a0ae5d6336a808827b083d30294294ddabe3de9e2691aae7 +K = 150390057258f040d09b6b6582734e49418ac185f4249f2cd706ded1218743f7 +P = af1a8b44d5a5d062bbdbb00b85d960b6aeeeb36e843a76fd1e5950c830b574fdb96383f4ed0506edff19a48fae49e4400f3e2dabf38b51158dd3ac92f0de151ea8e4e33541cafc71587c8e034eecf58e920413f1e0ecba43b7d2be824b4670fa8139481f83ecf420db05365f38841635abab2e6329955ebca8431534772a59ad8ba11a9abe2be72e9a9e94287f8bce514b804b5f4f3ec6c3a1caf6baffc4aa1facb7f24f33598a06e6f0a5b2030d1f0abce8a29bf090ce844e095e6542089db26bea8e3c4d69223fabec92fd4cbda762d78ea65dbe6bae4f22fc6c442e7cf02e79f8a2a209db533c6369aca971f99573429231fc0c87e8be914b1bd80c118947dbbbedf642723a6492a0984bcfe97e63b33d5a2d9acf792f84f90594cf0d22704a4ae9db0bcbf07e858c71f668778be10c8542315165dbdd6ab441e2b6afc9dd18a61aca27ec26d92fe43ae3b4ef3e6b562f3c9cfb9f0a356e93297676404ecd5072f1a2f61e287856d71394bef601b24d84aab2ceb04b38ac383c2aa7764f3ad0d044375304b2bf1132c0dc0af74c257fa156c87b2a8511386e1f92adba8e1c197271e8f731cba53c708c88d91afbc04351d11e7f570f871c40efa02015d7f2cb9f23c146eafb0a20767dabd895de2e22b8ef8eb630db4b098719d21865524379657401016266e948530883c69a8e5423961a76373ea1259e47573704614bcd +C = 5ba321ccee8713a50e9d9f0b2fdd880de375c6327c320f015ac50cc432eddbad05bc35217d57043e3a18f46aadecc14df7ad282969d55228340da45ddd72af648cde237314bbe82b17b0a4f27742898883db256791ae22564ef831522e25cf5a2d20f6032233fae9ded6ba90c34517325184b70460dc536b13059ab0972a8078e2e212ccb540cbfec0665974472ab6d71996bdace4b0c637db1297546fb7b8aec4caf7a4df013b87ca71c393856a29d64ea9e3b5b5fc3d4388cfcc6313954f35ffed45a689e91c751ab50a18722a947c72592976412dbd9101caaa4bfbb5e98c5f67a4e78432652e8793c71298f1a70fa179372ee02d86aa1bf5cf94d85acae5c287db40de672b0662a9a8d9dd02f0d5a086555fa99fb714aa229c923eb8881321c24b00f5d26a8d1f0110e759742c14fc76c9ac460d4e1ab727e1f034aeae36f55f09fd744d99332f76491a6c845f162290985c4e2d8c8260cb9138d67bd00130c428ae9d31cf4d702c815168eb6712ef7a94c8471e7f62ef8158760ad318faafc59790ec6c5bab1c57d5035e01e72234e98776e86ca5ace7bb77257355d2b339e3b5d5c6da690dfc6f1ae174a5460a02faa29c4be14d5aed03561cbd28b196152fc1456ae2909adedced888f4c9dcd31b733a5d9aa1d87daabb59cc8de75d1a51825f38e7dd939d2705ae2aab8f1f7dddcccb1cbb259c3f67f6d83be76761a8dd3773c8afd0170 COUNT = 78 -K = 3508c6ce30fe44851eb6fbcf07e06587c9dcb3620c6719457706f2ab046661de -P = cf27a24ccc6b3db0b4ace16bd24e18830db73a0ca8bbd13c5361a5b2a12e30c5a928a1800a42c002ad7aaf00fbe13a9e41e4055753f6bf0f8b5bd1b8e7465fa29f1ce1c7ad1b6d16781a162259d51c96a0758f32f51ad8e145b8174323ebeaa100f2797554 -C = 70ab5e11aafcbd9f3c94b31222657312f54f394ecee4abd5a0f5dfaf20d0b4e93d6e18bc75faeb288289c028921a9824c06789c4ff587527529b02a0d0c4e5f8a025329886ae3592e254c219e5a1f6e34ae28befaf83c4869e49ea9129ffd0cdff2b4cb1e478af66d2b96d61f05b2c49 +K = efa29cc81f0d87aa39de9ee7c7d34056fac75ddacd987b7cd7272c3a44a5065b +P = 2794b7863648fb17a24ac4c8cde560fa5cd5403328bf9788d916f3bc2567504ea8e0615b25990d18f92b9ef69e6952aa5238548fce6f7b438e64283765f57e81347a9664dea09e7adaa12aee55d337b0cda6adf189d594edea0746d47ddacb2a2207e72648240b7a8623bcfd39c3788c6f390da603143810df4155af2150aa7b56b652e986cf504e828abc90bd3c75bba12811d0432b2163c593e86cbe111445b24096db2ab712539b20de26562aa81923c556400edba9e16ce9267eef39d46d80daaa91c864a1973974769e0d6666ae31a67682f639372047ddfbba16595ee595349c3073b30847035b9bbd001665b5906b696841052c3422f2a0ff4fd3743043a818e8a41f49049e05cd150a0c0e3eb629d87f7b4cb78c7fa6515e91307f32e89f196fbb7413cf4e4205bb423dd67598ac7e5ccdada3949155ba674b5a177646f205a7e7028e5f0d4b8a398885ede6abf7f79ac91e4a9416757371c2b6ea0265699954b7dadf13c82a3d479ecafeed67d08dbfcf95c826cfa41b1d189cff1dc333bab62f2852dc79a338ebed9de33dae91b443fc5e027ab2ccfb85d3f222fe1674b7dc8188dd71d77b3f01354360da4a451bf3e9eae1af0111957764354070a52ca5c9bb72b74db25b2d67d8cced792337943478d6e7e85546e0f385026a9f7e431b209afb3474652b94c1e0fc9241de87d04c26089154ed713df13e5bacc8 +C = 1e81712ff09036e5f26cbbdabd97130c50f1f1852870cc9bee9a08e8d7ab0f291315cbd0708d2d04cd89368dbf04d964d2ba051fa363175d68fd93ec419694fe00f53d002c34d3e7c9d95fe1b372387d9afdaf8d40b5d9420f9373a906153de47e965d148b23bd9f958fde6e4c63c6d6d189e26fc759a40c8b85d8eeda7fce4c087f077ce04d82e79b8dceb6fce1cda52edf7b42c33acc53194d35f18928acfd6ad0796520ac92cbab534060ace7af84e12c7322dc1c64300a836a4cc47a974bb3a497f6770bbe70c57bde642e0585d435c941dd9771823e406b133d4b9f99a3b6b24d7deb05f2cde2fa788af071aa859cb1e7b584e32f651395ccceb10049cc22de5000256a9bad192f12b2fcbba852af264042658181e6e1c8163dd9d96d85b7fa70b49e436e237a9a6e8c52bba05e475aa07b5304bd9c215ddf608491439980d297d9708421db58db69fe4f9bfb9bbd57e89328f76bc4ecc2bc6564e8984771ccebddaefce56c9858d69b7eef68370089637d552c4876ccb319b53045f484317a872ac4691ffeeac82d5e2fcbaf0d7da6757f79f919389384c41cf1c32f195a51485e2edf70ef1ee571b52d0f5b988f593f4099c2b3d4dd52d9a7867f46445cd687fc1b3588f194329435ef299ca21730b91c5e8964a0f2bfb891016d5b3fb92d48685c7538ae968e2aed97a636760de6ef346140dde22bfd35533cbdd1a296437a8965721ce0 COUNT = 79 -K = 3aa25eef4c0c1be6abbfbb028d26b36ddc748def260c4c24e4b4b1b23f7d5382 -P = 1d97c21b6e65f3b34c41ae9040e7b7b117da95a5ef8308195177f4351b1f0338a3fabf0890e875c2642679802c12c3def8ac97312a0ff470c7f5d324ea634ccd1bd56e21810275f570b372cb5d6d79df38c2a33b00c9c562cf7718cb2a700b17f1706c559f -C = a88ccc45e4421471ca25092f8f46f06d8b835aa6fc4ac9c92170fd4d994903accc2222a832f616f7a3a54467357d2c9e94a437ffc5335e4387b3238d34b96b070f29b074099d92abf14d03c348604291c3ff592094f0d4e95c06e2eca8fe3a88f9f15b2e1ce47a637e76a4389659b414 +K = 13aa26b03863876375b8bbcd3f24854e84d14d4a3ba4087515169007a0160f1e +P = 071c2b272697c9ec7a2b4212e5c844876f6beffc294b5addbe1e6ec375491cb12d3c3579402723c364da44b28a18c7fe360a05d64d10101472f2f34ceb0232a27f58e0d8f78be9b7c83cac601b125423ef9a5a1c384400e8a7f227ebb10d994f485482e6d85f86b36ebc54f8d00d424556e8e6be02762da3ca2aec8268815979d9014e7c8323dbec16b75989f148557e42e8933f7e02c187a429c2270140a79dd1bc1b9aa67d72094ef3cba6921cf1158f649bdb6956c3653de0aace62c2c91a3cc8816fa8e212d515860f314c49d2d3ebee1e04a6dd50d9699751382b772dc8d028b42265be80be50cb92a7e8fce58afbfa55b357444bbe22d737811980682c87f24c0a1f04feb0f34e0a4097280d2800d16a78dbeb978ab3c04ca20717c563c29c87327fec18a8b73f4f85191e308bfa66ca200faa67042c8b82c6722abb4b8bec6c6c1f60c9bee8f11d3efd7356519624359512c4f7f36a09664086381023cbcf1c72fa377e3d48f350d33d5432133bba98e857368aa5fc963570ccd31c7e2a2ef41b8d41436a9d687320707cf146feae367c6e8e82e214f112d39b94aa619b8aa23c3a577dfe7eda642138347aa37ac4bde493357665c9398b08434c6f33ee304fddf56ad5c2b75c7d090f755b8003ce6d269055dbbf0271ff2ead794c96d18e6f8b690588afe4d8f26d0164af706b9331e7a09fcac93963f8f1bde5eb4b +C = 93ebda2f7b5b9900bafb4a38015c5bece2eb89f9a10f1d950b8b55c44b434353a46f23f5793df93b9bc22ff81064e9659606286d40c80eb2f074d3b51ec95db0e891f5fe13a1389f56d6eb04196cd172d975bb887e7a3b02ee6fabed8f4d6a527572e67d9303dd52e0ca77d3c039f05a985b67caceb8caa2b6eda50c9e6966724abc1282031e774956ee210811143b512facf687cfd1ef1f6a71a9a8aa9be3e9f6373e91664f234032f22fc84b11a947bc43ac87c9e39fcb66d5a57521f58dc126b95778198cf9d067a06aff8e2c7efc49a323636f144be8f638f44a0d8eb0469f9b4833f1f0e5f3c5eadb17b9a846177174d1fd94a1d45f5b0bfe5daf52ce28c3837d6ee09109639b897e84243a90e1a80225a4617648a7ca7aa697124e12cf05c40757d49ec14c200bf36d0766014c84c3088996b84a5402ffa0d6cf8c8af404e2d416df5de6243a56c43b4ffda2acc718df6217efc591353b961dcaef698264bce8f4f123355ba4f86f207d2a4ac19fa1bd020d9fde2881a272ace87e88d463fc2be652b75926133f01b069890aaa4d6c1600eb812bd1e764ea859fba07a403344cbb2b020f460e4d14853ff0ae12b4cfee974b4292ab67aa26952617ba71db427254baa6a9e29ebd8d8eb42cb79a7c49aeabd5d1d4bce88217ff39d08492f3f750e13fc5e7c02d1f741f274b84c5451c90d815d40f45ea96877e014c6d9437012a57196e5c7e COUNT = 80 -K = 33c78bd5ab75e374acdbb5bd7aa98b230f2e19d6042a8e7d4558d8aea907bdf2 -P = c9e6a443aa2ef9b0808c848c7554ff723064de77e83a9f78e4c95c9d4ffcc3fb157460cde938beeaf922b69c5c6885dfdc91218a378d11e01f2e245e3490bf469e322cbdf0608af4ca1060b76ec0fa9763d318ffa5d1e8aa963952aa853d87459d3b60de52 -C = adcb9cb29ccc1380d59444cc04b505a947661ebcd4e997d466ed8b52879add4e2d1ff50ecc9dfcb5ed9c0c7be5032676e0caadbe1cfe9ff241a6e579f4a84534a9e6f23af4cc86c11043e6214563e899703c0d0597305a089c2e43cfe8294ab67cff0a0ea4d36768a886d574600e6888 +K = b1e2ee15a304596185b9ebf3c1b50a58d4ee316c1b3b973fd4fb841df89dc502 +P = 51fa8bd1c86e889e5d275d9a849d2a76a91ba51e221a97d4bee8bfb19ed94ae484e738294fd4ed03e2927e8da77a3f28aa542017b83fe2367a28f224c61f12d01d9f1b86cdace364f72f6cff520a9c55642a2c224ac5298a05fb3d64455f68e38ac4e752c2595d5e8c63a8affc4819e29aef191dca4f109b4a081183a7c5a702a7f9d311a787d5d42d3066c1c3da1bf3127b9658cd86fa8067d4080121d0a2b31a400f45a8eb13e925ac085c16b45ee991aa8f1d09213152c17dce1d7c151dc414a727338d913e9de9180e973c38a854c590959bc987103f95545075122761b3444fd0a36d7a78c5759af891cd2c058810bfebe91a6388418f593a58c514390394f2ddcffc15243e2097968ca9f904a6c71514429d1580b3b411366b406bac2e09eb27ebc4ab599837dd43c5ea4277d00841d683c1587ac275044adbab4a07c228a63508054a1e5df182a59e64409f24a9c34fb9a69ea8d371cd318ff9632c898b45b97d51534249850cc6bcd97dcd7111b2d6eb46fa55d9e2bfa911d8a2d4015782a430375bbfa03b08591ba137a9f413f3b1b74e7146ce960bfc970d01e76dab853cd0151db7727b972650faa491b2e0c7af38db43e6144016cd8800cb2ef77c68a8cd7bd3b2e9f329c20c49f1007bdaf0143e12c733decd915ed719bbaf775451f3b03e8fc6cccfb3db9a4f3c434993fc0b08d9e6ded8616a300be8246f8c +C = 7b51a3ec5992caec38a0043aabccc6419f42e8fa997bd7dc26bc5618bea9d2b4d12aaa5ef5665a61f93fd27df50ec1201925aeea48f876e17638650d9e41bfdf257c36c35432a566d415190e6fa68d189c886fd5423dc886154f96aea1dab96be2c333cd8875479b370f935abc7e995297f0fd80d7d1ae2ecc6229913588d245106775f041d87ff41ccf202a7f5963d2f5aea8c8d2f287f9c81d7a8888f6f5dacb7222efe5d1905c513b2ebe5a08141c1abbc228ca25ff4196bdfa157cca109ae40cc8f15dc43945bbda2d24e55ff4af7e4163ad31f38c8285bc9c0d67e2a48a7c8c6e3012a82a573c9a6c7b5d7fdd71a67bf8b430e14b245cd0f78fd42dd1be960f23447b20c66190e8c27a60bad8ab4a31aa67de9b24e5e30ca579a184bf41be444df275e31ab224e9da61e141b94765093fccbd1eadabdbe97854f3636b1e68fa211dd7183cefe71173d177ff303fe2cf79f81820df6093777e6714b594435f3303e781a789e80bd763baf6c0b4043361afbe15c85097c3746133c7631dc9d7dacce77d0b7ad53183db0e0aac47e84de33bcced035390a8bc58de9df19e7fbf0da901d79a9128f516ea7c60bd1a6b682970c74ec0393ecda3b9f7200cf1dac2f25e3de359a3ca28c842a83a72bd5378bb5b949e8987b0e11546ddf8d4213711ce26fc056cc1eb4e6c7c42577f52aa729c7bdb3100daa27a9c07c96e2644a39f822b71419b9072 COUNT = 81 -K = 23d73b65ef8b79720a89aac82550c2d82bbff303f07f911b794a7f5167e1a286 -P = 63af0275057330abcf3334909176f243f2bd27ad73af93eda3ecd86a2df7299d77709752e7fbe52bcaeca2cf877c84c3cac5ea1029a6220531293716f6aab79cf8bf0ad05405aa9812f58cbcbb189ba878e35524b02b3e8f4939fadf9b2112dfc267ef8f3f -C = d54f1e7f34d44f30aef4e1c762b064e5ec9b87474caf6d5609c035ccd68ab61b1750b3278d77f358e767c0b8fa1f19ba33ab0477b07e4234269d86db5c02b4dbcdc800f56a16ac8b57174ba081ca587d6a286e90e67f66672b1a8b6eccf801a50beb34e1cba5172a0f304d8a6bb73745 +K = 6b98ce5614411492fe741b71c3662411e9d901ad1de16f607df7c134c1db51f8 +P = d4769b407c5b1f0dcc49d12a8a5cb2fd8e8441b28994b9aea70e3166e255e62a3424e202d804a4d50607b62cd792c42890933260cbe3678ae41b9ca644b79ba2839d7ea866970e38eedf0145183defedc1efc080ad9a49ac9fe41e024f30888ae4ddac814a653be35acb6be0c346cac95cdfd9dfba8d0bd3377a3dc7d8e24f769c045056e5edf490ec69eb3db742dde5b07a47f5be96c4843bc9250b4195e697b3358bd56ae712982fbb843edbdfbf1a11341909ed6b7e54cf71c1148e3cfdffccabfcb6d320c4814dfbb043c0606156ea884ef6d37015154a29b5d6f666c8dffaa1cc88ab06bbddec85dbcbb9590e7cfb9023110d12d436870510343134ff9f79e96d998aef48eb736deba3b6b08433c581ed05371443c22f802e9ee1d4ddaf2d685ac0c7024019fcae71908ef7b29ea06d1a9a38a0419d3a7a4683047f744f33f06ffb0dbc929edc98d5ab85e445364a852e8a79e0ba5b27264bf090cae2096b1a03ec50c863e21a03418d82881e4a4926622374c84550ec82e7d38498874f2fe1837aee9c356e7ebc0f4ad0b9648b9e20afe8494885823789fcbfc0fb2144eba135a9eab7effb3a08f40902d8c11502a75df428d2bc84068dc7b47e05c3c134d765ca0ea396e443476416253f68d2d4d3da1a54037e9a31d4e1d98d19d5804d0e9dd3b9f06fb89d0628816ced4e2f13dd6c1060d98c21dcad9ec7f9337d61 +C = c2d83bd59392727a3b38d4c1adcfba1907205f3cbe74037e1e6cb8379d9af5f36437f9af4fd031470788ba8d47f3e9d20e8de8c36d78df76ca505c4588bb2f482a3277fc16f4968167f667cefc2ec4b05bad5880455c9a63d2800ba8164ea69fb945d2c0db1454e8ffb390b2f4979e57c6484b2266a5556097d7214c1d1b5df77e4f9e8efe41ef037e37f41fefd247f8b2ae3051434b4e81d747171991f903cd432dd463bc6e9f7b028f5d1dda1b4a7495ff53b6988aaaf1cbab66babcfa679b5bac650b11ac1c24a7a61544491c451591faa6ef4aa362f0e6d617a2dce2fa1b662b4a74789b99c86c9a325bfa017033cdc3aecc45989e21748685cd09c4827bbe56f94924f39f273f70dca45180c3d6dbbb7c28f25d20a875045b54961272af6e385cc94f18eb41cdc2c725ac190d35b4ced0dfd7b5c6da571b956748c630f2caa02402d5c60c789b1b246b10d4d9175d2e36446d4925896c13977ebc5ac79609dc7dbe24546c47532553a230771d9c8e37a0fd93d7a09ee8a0f6d5d29179f843ac1c1c98200c74091343c2c127644f3d5e453550dfba877608479c95c6ce6fcbbaa0d7dae05261262e53fa09d2d8f5bd8e2151f20f3ca6e02214c220f932a41b91f1818b0e0970bc49ecd14e5cf2764d5efa3ab0ac80b7be676b55f34c914a53670b438ee557283ae7a70c11108a07103d2d2ea459242278b54651f2bb4e4c1dbccf6fed3fa67d COUNT = 82 -K = 1d0dea1d75cee5fe747d8ee123e83ee4425e0fd256a356879768f0334b6bb18a -P = b98a9d1bbb49ff98345e951a1c0376a46213fb255b8780c4992b803a98e58b990310209395a81f98e374e1c3fcae6b92dd2cf9c0a8de2313a7760f6a4635c34983fba2361d815ecbbc07cebbd6d7270314585a8ec0fad3df65091946a71986800c01b342a9 -C = 2add366ac0fe1dd558ac9d7c3dc73c6820ffa7c648cfbc0b7654ce8a22e568ed039094e114276f3a4666f2fc9ea6c72f3545292c63129a995798a0639feba56f9b3348182a664dec6a8566912477fbd6567f03a2b87f445681b94efcf84091027e679c5632a85a980ec8b438f0959c4a +K = 57934b37be1ed45f0bf9168b7e03d949a76ec81e0305f84650047648e4ae18fa +P = 2627edbcfe43aa5c5ccdc78ac857f8ba19e20ef55797150b6a20d1ec214465309738e5882871c52602af0bb03b478c193047fc4cc758211a9c2aae0899e3f83a0e818591966cb0808bb29944809e007c1d40aa5e465b7cbe1da57f6de5b929c46a72bf5579be38bf3088b02b347e572e2ac0307b7f0ff77da268c877fd4990b6adeca48595daf9227087ba5e75689194cf204db4e2564f265189280286e48cba39162a82be78ca58579d151986db9eb21c73009b617ee8eb1ac828f852958476a9b78889bf22e73f039aeb9c18c2b2aae61892cbe09667ee862c44958ac4a7f5eb33d3774c97256b2902eb89d9b0c292a29e55fc203425414201b1c3d55830aae6cdf2e27b7e00596df60197dc41cde5786e8de2bb5e79191bc8f605f75d45e436662f1684fd90c83001761e6c0a5c7a5b2621c406a6212a5048fdaa61e87b0befbeed2998943ba9ffdc63b90631d81006d5447af5bd67e9bf27bc335e47c486d8a3aa3f3255fb3d09e56e84dd01e3de9044a686e43a42e17bcecd875f529a13846ff22a8baeda80f4c9023a5af140eb8e34c948ec1b2dd5dbdb294b20de675ecad77d3a83f078b49287bba7eada00f6e60ebc938db1c8243a3d00a91a208cf8584f2cb44ff3c378fea6328a19648bbb035a8db9444b7a213b0e6f55a8920b3f7b5db677b93b034ae847a5c497a8146c0c8ae57e46ea08200e13403a46664c3d +C = 1594053fe48658795f6253691389f45eca1ae05feb4f7533cefdf21670da84ab6239ea70727fceba0b58323c120acc59d45be2a37b781bbafb36c304c9e322b4961d11ea04e744f164f781990ff3e57a8c7adcc7ef45f0e04cde646fe665bb0dd9f4c6259e4e927cdeefba5f2ba6f84e880e7c1a5467e458ff5815573d9b649a2cfeeae947f8e327585e479798c9ee24340c12db0eab05de31d6cfacd9a924cc67ca6c3c41a74ab69fb78ee1d78f42b139ec4c5d63ffad5a994e64f5b0df43f3036b8f90381486471a248e794f033d05aafd26ae7c0d5f3f9fb3cd1c2d3cbd25c1bc39a6a66995c82ed859c1854c65b57a7fa2e5664093a388ab801cd167756f7c4376aeece973d71464bf5659cef813e87ad38f1fe416bc9098b1aa54f713d7db54c1b7184938fc595e60a7cdbbf506ff5ffb156f9886a5c70a44681cca80ebe582f3b13a0b99a6f464c7698faa7e2d8520b09d3cbc80c56e2f86911fced02e1b10d6514103872a61a73272f172d40d03b255029a44d4297037ab99b7780fd6c783c1c78cd3853861eab75d7d4abb95ce72cc94db5fa38c4c3a4599739e149f1e071567d80d4e3e83240c54abb08dcb4e58d99b7fd3f94b75deb8779c4cb3cbce872332663d89688d8d45a9145196aa4f8629a25c57a9a91ac6ec637c1b99afdec68d34b44fc019267466c03a5ca56ed6d4ace32d55137e7b2002ee1a492820602d39aacac8c59f COUNT = 83 -K = e86a1f3ca91d9e2f2713e0bd6a18cbdf58a9844ab18dc906af6e946d2bdc02cc -P = 2c27f6ea7265ff3f1d90537ff600461204f80758e9b4721000f4809f669c43aa87f7778650568dc8234f1ee9b62d066eccc5ab173d9f0d086bd76621591986f1a30fca59b30c4ebee8e1d6706133a2bfd12a7154e6884e2764aaa10da60ec6d7115bc0b189 -C = be70fee8841dc5a1db7f5306358544f3866f3b21b7f1ddf0bf847ac86631dbd45d7ccb4b54a1d053dd24877b27c4d3ca5e9e0f3c623622b70a025f1eff3e11ca02f9820af373c2fc216ac4fabf3272b6e1845eab77271f4cb91c6f61dcac4aac0b83230e6f2e8a627634be3fe0d06aaa +K = 34563a450b82924b015bb3df8f352043e58dfb6047800b9467e63053a6159ad4 +P = d393525748ac0d533ff3e1432ae41c176359c5c6118dde9816bbcb6520ad2dc83f9a2b170b6c2427f65069cb321845668e353fdab83aae25f5c88f7e83c5eaa2520142bc250c0cbe0854949edb1b32f5716c8a61ecc02f75a39f4c218fa96f9be12369e80c92c0c2d2ff17aed7ea0293c39122102e035254130db6a6d98d0a02a1961e38a6026c6c9092c56f834a0650dfcbd0d3efcebeeb851c9cc047aef6864f0d59d523bdfdeba753ca64a91ac0c427e6c023e144b534890caa166b60901c1b9d0028f9b8792ac2530eef52555821184cdbb229353fcc99ae6740416b23f597e6f812f44f052c5707b25cf2dbe7e948f62fbb282b224e9f583f42c9ac21456dd79bf18714fede299cb323cd1a6bb4c1334d164d5ee90857c1d292c4e7b3ceaef7d54498c6b433ecf0abcc953df9f1d3778f6abe335a3fd047e78456db0832047118205eaccb27c6b54e238c73be1e3df807c05ba523423914f3fe87ed628881e8cb668c990f9c84313a161762080740cee33b1be7dce07612d92fc368a97e49943575f1446f95adaf00f30d2d3bcb80ef4ada36ee3bc76fcd20d6244649b043e81a7f36a6e0a08066d78581aa750cb210b74d638cada713f9a8d187c67a9092108a57676067b95f65b26fcf23461e18e00e2e4fdda190b6a8f7fd605e2a71e402667eb0b7dd5c412789c2902dde408c99a905f83e947ab694dc87a7eda5cc +C = f1b22d58f8f7f8d51c84b28861ec6d1ac312445378c986fdcc2856413a3a3dc32d6022a36675ab058502a0c97922ccf0c951535abba58bd9c74c96e7f4db0667bff36cdf52a302b42c408ef7d1bdb4501be530e020919fdfb899dbe2e6adb9969e5e4eea4029f26e1d48d9dc5548c3f6ea6ced7295fbadde5fa6b5d7ef4c0a471ff342aa2f2a9248f1412624dcef05bb7bd7f740464457d227a766572f6ead480321c63bace1b2b92cf609aea62ec9292f12b6c383c2c4a0589b88b1cac4bf64e2a2dec0c839fa9d4b92ae063e8de811525fa5a59cb71e92fa427f9583d2238198480285705971637bb52326c6ca84fea09aacad9fe451d96b8a460709c54b3462cbb46ec1daa5493dd702f79bf84e14782930894aacf3e6133b8feb106f03400884ffb638a6a56d66edb4dc0c274b1b6b11548bfa7a50b1cf76ad68b5aa59672bafffd89e6fcb503dbd0cc18033e0efb708de5d91d9a4ff059aa67f9951addb7bf8510955d1da2cba04cbae87078cc3826ca45989906162496a1cc0785034bfb6b7615d05f5a2dfebdfae63a71d6684881ed434b4b7b87b2701854aaa4d18ddae1e5dd48ee693246f72ed3e21c38b912610fc5bcdafa2a67de07f4ddea02971b1deff12e7452d17cd2cbe6575eae55de62d08c7c0b11f3f0a068fbe83f83f6553db1a5fb67a393458ca27b9d1b2a2d835061029355707c59a0b744a8d9878f7c77cb22c0903d035 COUNT = 84 -K = a37d81d5ca2e72db5432a41f34b49dfd9beef965e31bad2159fa562d4f09c120 -P = a04df2dc841663ed348aef2e80bb0e601a1ed6dd442fc12834d3f444f3e3286151e6761e16ea78447b31f2cf81c92c24eaa85e0bd043ec44a57a77180b9e9c532e96994a9172a10bdae7b40f5a6c6a9b08abb32cdba4fc7c9697261f1e233dd065989686b2 -C = 86bc38adbe849d7764827eea08ad5c85a9a46f168c181ab7459362836fa249bf247559d039c3ad1453446316c816d8ba6f7f3b36652fdf48ff986a2fd8d811ea379e095dd6fdfbbc7bc1614ee9eb1c66d12b469dafdf91b9a10ef66bd7e713de2dc5a086a1a3d19830507943fec91075 +K = 514c5207a74feedc9425c78d77c4235272f8eb1dc5d8c538729bd370fdde5ab4 +P = e8a5bc79d43f8179bb7f40933aced1d902bdade0b6afe5f11e0756b0af6a30f55ee599d6dd7868131b207447895eea7839714ecb8094a409664ffa1b425709ea28ed57707e3534422fb9aff0027cc91797fb3be2194e37512fef0d6654da00f5cad75172a14b687d50db0a44f58d4e139f00d64ae6ab5a722e87068c0bdea1e7407c5b3910c335821cba132857ad9120e328cea80730549d2434e9c2129df3bff55f68b8a0fe1df04a5c9a37dd196a3a6ee7cd9159120d2a7aefda03ed0e1b325c4777dbdde3f3544fd80e19cc27bed989c6aa3cd96cbb7a6c32718a875942e0b945c56bb3558943f25d02a3e19f8d55438f920e51692c735572282f077b388fbcca79f70d8c9b37c65c0184409d2fbece0a8cd5822ad87e859b829232182115cde6240ef2c5d0ee0abe97c447bab24c97287270faca152c9952723a0c5142a98d62a3d0f0eed01c667acb82b212fb762b1e68d33c3eee4453f0c5ed2f05ab80fd684a7e84c19930762fd3db6e1dd7bac90cdb2cc8e74263652fa2e820aa5143961a6edf4de276355b1dcc8a4bd4f46aa276938c646dbd22e089d3334f6060f6e1bb61ef9a62e58d768ac9a6b25f2c0f9e7462f01226ca65183b57dfe9f0a5011b62f8fd7afbcf0691f264fabccba9e80e0d444c87aa721f281366047fe99ac008172e51af0808d956a4e10d6298e34fac73a53cfcf3ef6c0441977578314280 +C = 3db76f6e784cd29bedb759b63cafadf318282944bae7aba9c6f5aa2d8d555372e0f7f90d0325079d75dbdba4d2180ee24e0dae3a749d7c6a6f2a2f139c6a79703fce2729758ea509366594b73315d1d69e5479609e4ff9335e51fe0e7bd4a55d04ae62ddf23d4df27aec44d6b287142e5cd793c8097067559347345dfe4ecec704a048f7e3fd1fcfd8d583346c8a83edbe6a57a7af7fc7493a7b679923c64ebacddee4f6e0ebaf3f73126ff480fb39752aa7ff3f380c3a4d8d9e2530f86a46ee97d3837cd859b683309999361a471a0bd371298c4824fbed0223b90c0af37166c4125b00f0effca19ac5b985d2c33a83fb2047a23a019a86828e9b06930c3f06598a4b3c5a0c8e1c45078953e097bcdf86f33999d53103007a81b846533fe64b0cdc0e024e250bd9e8555a404a9adf1e31fda0b8e6b8f28c59804e8f3596b62ed5e86d6f6536cf2afc8935cf5705f545ced5cfa118c827745955bd7b19220fb333e2c77238072656d9b314c432d07a0334cb3c84a152198d09b6a50532f69bae22a3a4556ef2e959a47989463ca129c07842b4cfbcc1d424b60369ec8e5edd6d7cd3291c56894036da4d4e27615aab87782f77211f3c9f64c8a81bdfcd4ceb8b569284d9ff48e0a1c1a398cea2cd39571082db1614b077f318823ddddea1439417f0f79398d0e71321e432ce8b96f248b61b7f82eb956eb2506a24b64872f50b541d1a0a21740635 COUNT = 85 -K = 3f2503090681a0e87ca951c317f0841aca3b811b33c30cd0bbb6b6acd03e6c4b -P = 5fd4b7615d316cee2f2508d161abc8ac2b0eca7a2e9d039a1f9718ff0feec52d89e08d034c95bcb3ddc5000820d5a6058123b79ab393aa9955a1ffb1beabacc430e51b118f45eef0acbc04a4d0ccd217719df62dff5cec9c9fcfe7354490d40a97883f5a7f -C = 1887b117f4b4b1bec1938350796343118acb85c4a6f93e7cc4448f7272a62bf022f680e99433252c161b73f6bd1e796bfb0cb823685266262c2edbca8e540814f6465c57b2e7fc5151284a042a0b4ada71c01bdfabe65441d5fc16d7622ccf98cea122732ac1b2236009b636699b5a17 +K = 0c1319de982df0eb994dd24b8be41cf08b2eb2515ad200a6aa4e1edbb1281c3b +P = e8db81f077aaacb5030e697e46666ff907c48257b1be0cca05db7211de13637ddddc42f31c1607a1decabb59a8cc90754619bb7581020b201bda226df4047652abcc76e08d145ae8902d1f4928610d432c087768f59afd10ef99f3c07abf7198f4c016a28b251fab054da9d4f92cbb8e271ffe29f53a2c8190c69fb02953ae8cb4d3fe4cb5db2c94dd34573a39a1c4a2c066a08a3947a813b59573c5dc25662023ee6346ee4e9366039fb3ea9d92210a6ac2634bcd46e4c61fa5290ac726fc5ad37a6b162760f06311b8cf34511c43acc897287eca2023e40fa66bc1bf6425eddac6c28eaf619e6c5f6201307b2b21edf4acb4cee3c8df73383797dd6254bcd3e3cb5f529deed4f408fe0662c8db7d08df7710d2a124ac098219029c171f1baa4fc1f3586b9c06a3d6fa61dca62552dd486b34fcd777dfdab6abf1a52e44a0e613d23cdc2fc8e09c75a0d5ac53564b8a04ab07c6583cecc9c56b65878a74a99e76b23bf823cc3b3dc33a20619a009d5193d39c950b7688ee3747962c2b30f28103c68e9b25995fa48be37a98e4949af1d30f1517452a8fd55586cdfc29da17cde63fbe37ed9f3d5c0595d5e96e047edd709ecbd673e69bdbebd4d464068cf4a6d8454d159d5777ddc865299fd1e96a89a8525865760a3ac917c1aad075264032031cdb7c24dfe39845b9f303cec303561611808e4c3cbf89715035bf3a200282 +C = 0b0fcdc880b29b936d777ab55b26ae5f087e3b70bf91c7ad0e8e0adcd8d31150bc510b42479784d5d43b5356260d690b1d2f7a4ccf707e38736b9ff4ebc083338c10d619ebe697a47a228d3bc307ed9b5c4cf9ed4d8911f90cb29faa0c1821def0b70416a6ae85a8936365fd61d43f7317f40d5ec47f4559444919da635144af397abf4ac65f3c1cbf45d6428f5885daa0c1bfa3cb53e2d2147c0a912ab51b85240c4e522d55d1b509880a6cc72f7f7644f2852cd004a5224443cb1c36a227d65728ec09e0850912f622cce4d8fd0c6c7f18047b5d241d37c626c754fafb40d34c212d26f4ab8b865ae331e7b19ad270fb6943ffa9ab8dfe46c3c63a8bad488520ec566aae52499c8172753c1aab70e57d2375aa3883137ae2509f37372c057a48cc53c6ed7658ac3b6a4ee1fdf5acf469154976372b3e86a71ff41a85a4101f463d53c1a5da93ea35aec45f8fc2e5d7342af6b4e5e2939e93bb8387f36bbd77179a6ef6a773a51eb4575fa412c572320384ba7f09b2b00b01edd102e68a2f3c63209ced81736d569fac3712a2b2f0acc78e719500e533b482d205efe8a126c845e5976e1b31d7b8b9afe1006069dac48fe9a906b2ab7f3716bf383cd7a5cf35ea90f7312fca1ab259bad9c3a746f3a0a133a9302a60b5ea247bfd0316fcb5b7a314431e220d394f0fe291d40da6e1ddc55f41a9cf35ebb6c47033926883db053d93d77fe8984454 COUNT = 86 -K = 97156f11e1d5dc60ff4882baddd5559ca6a671a6120600bfc3e62c5ec60d8cbc -P = 93d9af2497fe6cb1833bb3a70d0148f26a5aeb8299088230ffd57d5a1c5c112b77646882387d2c2d2eb0b4c02067021c619586d0c8c5b2ae48cce58333592d9dcde7163ad3ed5302b09a1edbe9395644aeb1eca44bc6adc239bb93177e7b27c7a752055ad8 -C = be38a9abed1369a2758578b686e5c2be25caffa01dc69c59c5ab9663c40bebe0f7a6f44f37e335c63ded400fb9e1c8e0d16b9e1fb86927a92a1478cacf242c513567331ccf63a264b95ca0bd16ee897ad2e8d3845457693edec51da6d5661d45a783051fa04e573ec2253e94a0db2d3f +K = bc1c548fa727b159909242f3d6215a366a02eddb0f4845e630fb9ce750422e93 +P = 1570f4403c0aeace7becb221b5eec261d7ae22af26e5ebe9772eae9c20fce614d10db6576775bae6dd63d9a6970844e4f1f07f36533ff155b4f72cdc1b80dfed4512ed9a3d3149d4a239962f2f114f836d16432b29b3efada98bebdcf28254a606b262ad1ccc86ac7b8b1a7a3d96bb94ea751e1dc7506971d9ab5404a8342743a3e91b8e0dba0de670bbff0c184cb14ed2e0e8efafebb2427412bf6bccd3213f3a8debf12894ae41aaa826b97dd4845fe1017e433572a7e41fda81583762fb171591f2e81bbbc17148d6508cc9b43b5d10042394d17f3f7072f4ac86bac30dd40c5cc5add7ecb0be929ad89e255ddc1a45186938534a8848eff41fc1a446cdb194645f7f79d50ef8d3c885ec2f5c4784ced1568926043c6619f7659114c2e18fb8b12a8a0a32d696ee2c1f88930f675040609d2ce487118a3eba327661461ab4b35ec2bb18b812b345bd828d13359c5dcf1aa8e178d472c3fbaef4d67d96dfc39833cbe9a20e5026ece0dba853a0e451007dc71be8afa107a2e20d4eff378d9044477467a251df79f39c9a1dd39941042db28b93c9a53eba8f48448731a6a51ceff67bd5b86c59499db57bf31a167067bdde1fbb266f2df8554cb72c83174e16587baf51f78378720ddb89da20f4e27f751eaf114e9352c6b20b185f33713b80d2132e2279b69f9b7926dd7c55b71efe22874ebb2e4d7d3b1d47b0c45e8e6f20 +C = 0daa6c31d24f09e962d6b359a2c58ce1193642ebb13c519a5d85cda140f53c9b0fbbd7fdd43be8db6642463ee111c09a9e5e9714c37e8db5e0c02f29858e8dec680c5f4bacf3d792c126397da0efffae1da4a69ecc56ef249291f48c8e56df7dace5c98b9156e59232456c2db0444f35f7cc5c42b88348584071a71fa90062d247ba816e998dfaac2c3c79dd4355341e7365a9298e504db5657c0df4454dfa181cfc062c1547909792c3b770cbfbf4d3594e53add9e8285625effae558565e8900b2b76920cf4a0d88c37cc0e9e72200ecdf8b326dbfbb28b53af590a55afd5f7386562da3ad7be04172f7cbc6139ab7282d70c4c16603b71bf3bd7ae245afd4bbe2f0e7641970a20cea71e5cba9888e289a4d964db8988bdb5ab125bd236e53b19602b7cd0b2042014b883d7012bc08d4b54f4eb907be07adbb7d7fb21e3409da1e5792232386673dc7086085784824ccc059aab59a7c73d7734d62cd08150c3e005249dc1805b1eff74fa9d14171d0c28ea7c87322e05a8dfcc9bd0418210cf98be1837a47032d4bee0feb0855fbbfa540201d1858d93dd3f0e981b839dee7cb78a6b2606c8d2edb8a61a91f48f4143461deffa9a92c657fe2d1c75277920a055fbfae6749d48f73301ca4fd1676c7b8718fc46a47995b7bba9f8b3749521dcb6a662302b85de256f839400afe5655f2a7aced64c53699229573561829a674a372dcd7add5a81e COUNT = 87 -K = 42f4cacd92a56528c2801550f01773bd840d8f92a2f4212a8687a5176b9a3c9b -P = fec21ebf110724b141cf3137383d55ec583e26ebceb8c81f780a75794169673aded71958c7d24581e3143b7cb633a65d36c254e38bc9dba8c9a616cf92050ca62731e0362485dccd8f8e1e501448863870499dceacaa5b59c27c1d7c7dd9f9788553e88760 -C = e034d9720b4c952cec9485efa10e2c9d3fd879d1f12a9b9e21ee4f1f70e81c6b87313b853d338a6a4a94419db4cec74b2dd2bc42602740cdd2182687aaa0794490af83cdcc20b38b8fee6e8e0bcb3b06fc3b8b2ea1c77d723c2ec3a7f28a4ba90415f96efaae9970ca1d0789f92a07ed +K = 4bd7076b933e7ed9f0f69c375a229fb9fbf5a9a9d9bf652c2091b5991ef4a0c1 +P = df72140bdbdeeb2ffeeb546c911ebba2f7fc9134c827ace795d5d56ea7c5e273468d54e68ba7c2ba242bf76911bed6973959d8d8393f3cce6028382e20fff77cc97cc26cc7afaa4642819b68ba16e58bf68aeb84c3757b31b0895a142406365e9bb4dd1b4378a683a0bceb9c0bcb1c84b3a0173119821b463df2518389dace030a87cefa1aa77830b85a4004882161d787efbc86775f9da2075f6fecc9f19ddbff9a07782d61fb67927118bfb72ab07a442c31081ee8341de7e6f825d0cd405640519ad72ad3592a7c972fc1db7549e8e881436261542a0d7f87ccd8457600522db76ffeddfb0c0e0c8e28eb0f56fd46909d29de0ffb25448a1d125f5f7c66b431d57c5716348c7f09c4017d9c19677514e8272f816f8f6d52045204aa479fa03aee37d0c015334185adeb9d25c374ec69afdf8f477a874f71a1c4f30ed810e782484d73b8d20ccb14f930aaeb551a782f3f07dba593789254e1aaaf8434b57a7f003ef20e41692dc67b4a62ed798751c57cc4712944435cd9e409d102b8cc089d6b0ee9d6d70c3056e3b4c290fba02e537ca78901bc2a0f06dc1b4ca3bb45d386bdab4a3e86a47c8eb6709c5bf472851e69ab4466061e995fad2472c687c55149dd9f1bbb850fe07ae1b5bfce55c1db5ff870ecc2303a186a786292cfffb2f37bb769f8438b0b441805fedbc3c897523b2c1e8499d2791226ffde1072758aff +C = f71430477404a67284bf0a463020000e86644c91cff50a5f2c6122c20de2c4f8a16ae544199fac3566603c841bca4c2b43d7b9cacb63d35d14ff26a82c08e96963230b593918b8a6e10a336253e775e813dc559217722a9ea92759460a900475ae476c3b02a48cd8ec0191a2655294e8bc1e855f9af81cf48a1b7352bede1400d2c7e5ff215ed8eec62f7935ff2ab0cd2cf4ea77bb69fb08eca14f0c938adf676875b5a84868e9833fa91bc6425450c0ccbe25d6f6a0b9b15489cac4eeef0f14b8f671c82bca37692a11236ce7b02c7c97c0598b2fafc31a4c83e27242a901716d96cd6d00223e5213d92c9239aa36c9085be07fe3040f398970be90a61e4225b8c4a1b474208ec94a03c7710eea2f33b3e0b97874a8619032529abfb862e13a046dccdd32e7d130835173958cfdc8b151b053f208f62dde0f03c0fbbc900668743f44f7f876ed03df021a4b1b21857efa1153ab71fa90bd45abe4617fd189bd89f42c15894e2dfe26067e3d6aaae10e62dec41364c45bc8ff36c8c3e4d11f74b39e14bf6a696684fa5203782743ed754cc3488671a33e8e2d28b6666764022141e8e5e4e1370f547386081747ad92e78b60d4601e2e64286c72d7f8bd16b5c838f4a5eee454ed2e23b516c7b34db44e86871e0e38724bb345c0b50ff9d7432a33d8bd8cfd3777a162dcb912d02cddecdb242a04a54f3c57f85cf7e543b300ecf3727a5beffe26d9 COUNT = 88 -K = f99cae289effba9f62dc7f6a891b882a4d3c4a3ce5c1bf1ecf20444d8c14c068 -P = 57fbd5cda16741ff8510eda3188c356e8da1cb188714faaf83e338ac663448a45022b4e83fcd73b2f4ad934775abd4b8bce689ca3f5ee01c47fb89a0dabe51bb8d92ebf3ef682dc87f47eb8a8bcc28b0a4c2d27e0f2510ee50789674d4c2edcd29b365a8b1 -C = 6373dee4ae75ca9eeff6e1c8b35d406234555b21c17e52435b62a91f1f733f446157a0c9e04f6c7879d59ecd3b4f05abaa0612c25304084937ea7203e6efd0d556bee94605d8cbd9c7173d13175f1775871056ce958661888278fac5a2148ed15edd7f94cb5c0b968367daeaab717da7 +K = b35beca0c39a01528a0f3a163fabf9783660cc37795bf7b99e34d6f0dbd911e3 +P = c992690f58676f36771359d03e88cb4f75823fc9252257f48e405bc24d53d596b1aee061c14a0c6e0fc09d4898c41c9472b4181b3a0bbc69dbcddbeb6cabced1992280f42dcdd7fd7d6aba99ee4099f797dc424472cfc44372aa5b9c40c55afc65d278fa3f0fa349c81617b6225a6a61d5c55ccf503543687aaff73fd239a287a72027aa18982cd2f8524e2e51a519833020d679cc99f3f5e54b84463325037a69afccd3d4e18b3a41a3789672b93f08178fe231c018b7f25e8917e47368bb7f3964bd3c61c116ade2d30e7206db0dfd4e932c5e7ef396bc35bd10642ca2d27362671d76f26a9c3d298189f3cb8e5d207aa7b958f943ac15d136e47f5295403a9b715158b1d2748b3f5c1c2bb4a26d099756635a9f6a74c0f2108cc5725ba22b09fc53f1a77f8d7f864831c83d0db823b85738f782ec41fa894b63cf86db5e10bf055c95b4e5b446dd9dfac1425cac206da3388c6644df60196dcbdf9a9a22cc5238e970c206135d25931f413e48d022ac032084c76b48dc38f1f7eee8170a282d3c224aeccaea37d8f09a2e8c5225bac43e62b6b7cd742e2cb88761ddc1d03c73b5a111f9da66ad2547dc559ef188d546997d87ac40cbdcc05d8735ebce55fef83ab8b318b75749d311e77db21b089928991237bce755c8bcba4ef6f6ba573613c02f4dbf5479888bd2aa625aa6b553f5032a3e504480ac84de87f07145741f +C = 6d8d8d2d189dc2183d3d5064ae17d57e596ba771c827188d6207a0a354fdd2af31367c2d2183c93ec49f10abf2fd3354d82513fd70ce2a013f3978bf992afba0d78aa5cade0630208c60dc8859ad9f4eddd2e2e5dbf2392019afe1e90b3a1df45a71cdc4893da2b193e9f9d412f3f413a79ce167fae403884f5a829e23345ba34723cc674570d9524df5432fd8efc7db03207fc53e8eae690148e28c448c2ec3154b0910b1100325344a3a7691b4efae3e35efc4effbad9d4bb65811a83382e9744967c49cd6e2dec1b2cab72c38b30b9a18db9aeedb398f3e0976b8e27734bdef532d9f1bd869b4f5b1619bb132bd078fd35fc678926c0e13d5cb82935491533988d58382028c6132b81cda30d47e9c69ccef9eb32176f0301104524cddb801448cd9d47ac51239dc288731260402775a7b11403970120a19f88fbbff6d1e3462d4da2c08ba48f12f5b7d8886a27ae815fe93da0a6dca190462f44bd9eedbd7cfbe5c9bc662423e4bc0de893d686c317f6dc7f51056c858b52243723dbf46a3b071fdbb5150e812963d2338512258ad3b874589a259a96365f01d48cbbfc8857246b576c73f71d138c3678219c8e133eb9d3060daf2d90f8a037039cb5f044615fd2869d7210b9ef0462a0bc38b06ff059c4acfa84c1039975f0246c5fd7371f81e3aa98392734cd90cb52c5293f16cf44e97c9fdf2f337c8fd7927d788f8a88d2fb6b198f8d354 COUNT = 89 -K = ec3c5f10c69ea16e3bd84974eb217252290a8fed6cb2b7a408aeac9c7f761d85 -P = 033af26de23a6b7e888165b73de9c3357a82c38579cc888f1a3a1a4af288243f6a375eaa37627972a99169e0dfd1860068dcce90ad62924791c21c90243fb2197188732f3a9f7a5bb5acacee335501ce875b74561807f510850543030dea57d9f0d3577bf0 -C = 97785272722ead6483a5452573f60b3c39f2bf5384d2cb949a426773f3a78466799fbbae7e7a3fc60a2527cd50ade168eda91d101cb775bbe5cbc64d90291716a6be523f5dd52d558399b66e71ffefb7f2655b8109f0005173b6b5d5a281ad3a4cf062c5ccd39fda498e83928d3ecd9d +K = 9c19ce790bd1ac4cd6ee0a854cd35a0f3490ab27aee1664768c990b6736d4fa8 +P = d9935ffb786413d13b49e129cc0f6ab991610c0aad018e8acb8f03606b63c0697d3aba7372c8505a084382b07637d894405590b0c7c9468992e3c8af62a5c219e323a21be8706074087646577c9501059f9ad22891dceb73c1f0d9c8cb7eb612c84773630eb9ba83a9d6a7d323ad49abca659c1e58370cfa981e705535945a4f00f478776e46e9c3ad765514c3f06051921e180f85cacb9d4c77f366d0b3efa1633cee9d8d0ac8fbf3e3241fdb91dcb657ae2d1b86c88ea725f31521427329b579103a0c20ed498f03fdcf87e8f0cd277fb42349bc820851e0e93858cba0c0d4d0b87b1c48db2178b1bc975e3c1b47c729b63bd4bbaa03fe8be721f390dede953dd165aea8abbd13d062789c2a2d8856614c29aa7d2b8e5e4f29dd116f40f54aa0bc1e7dbf5eefed594fedb16d953d79ff0167c35f3f547188f50a307506941d93df4198bbf042e1d54791ea66cdf904d938247e9d1e6ed10e0ea1bd9042953dc1082718c3e96a7b624a13b5b3690293a1c83ca0e7cbb370ce485d3ba584bfe1be2ba946e90a016a7b3d9296a2bfb15f0d511af1f532287337cd40ce99d0de152ebc1e2895a7d4e1abf2b6b00ca4fe8234951e9d0c15c9bcd0c60e7ca0bba94eea776538de71180c57ec89d2fca380cfcb706dc379b174a74a5a113b282a2d214504c0b35982c404ce2f849915130dcd7429a90824617eb46b5160af1240e974 +C = ac2e91e40d80680244a57e81204af441cfbace1e916e78fca2fb3e7a1df7cf1ec5d291e2308a6d004bc5a984f9f84637d1bb732843c31058df1f429df784be75c72e165a558de86e3d2e11f1deb2497ac8f3e6a8b1a167b2607867b53155b47db4f23c62a915e5b1e39dbc8ca5a6ff6d215472faefef86096e748f7915a008e4ec70fc6dd0b449b341238dabc0d5006cb154d38b99ff31ec82735922a6e4b8f700be0fb4199e560059e442364d8046a5dd02cda0e75045fc59ddf3622fef8ac466c72fd1c421eebd96d9a85dbc0bb7d3a9191fa04527d0386ada52be3817fd82f11483f467cdfd7df9e95bd5ada24c591f243886eec615226c151d0fab3fa07d7b5b6d4e84e9c85d4e8e304d53cbd73b7155a90f068bfd99f4e4ab2a0efd12669e0b5a2128bd4749fd7a5aa25f4cf8ef6cba785cc7b3e4c606b583ce37e8ca7faa3516fd1878a23916333c350ba238adb4cb943a4196ba41c87c14dc0e2586bfbdc2a7c2b852dd4ee5fe04f13f15c0343a03b2fb1f92e479979337955f107cfbadd457e342d50a121166e870359f44418d2599cf03f8848f31c79923eb58b2a78a64bfe8c2e976583a0f0426e9202aae0b0d49ebb8d52870ca5f2fabd751bb088afa0efc176185c935b34c9619d7b78de8d61f64c7ea28942208574ee4d1698a263e4218617706dd8d0b6f32b3c9f07c9feeaa92b41be838ef8f90e15880d1653bc6ac8e48755b02 COUNT = 90 -K = 605225013f346bd98ec951b8cbff96b0c37ff53a2c99c0676fb66cf602e92699 -P = efb3042d6ab6cfce863c83cb0ca4de78d07135a59ebfe515bf310b7e19fcf42e4b8141ede3b0a3d6fa6b24758b80f1bd5cea132b3436884bc92dcdc8850ce493e935ba9a129fe63066b4ff35c84df4be21d5b5190fab1d29ef16e0d9bc93b7f7f8c58ed5e3 -C = d1989eeb05483fbbc71e3ad5177ba5cf553e61568cf436860fd2d42fb7592a1167e436c73d2183b8de56ad330f9df14d3df5b62d671a630d531ac3a28256e02a81bf35f5fedf2224eee6d9b091775e82127159fdd8ee1cef01b94980ab69f21b757daf7e29479538fede8b83c94b3cd9 +K = 2ecd569a71553e896baed34aabc1294650653087b66c3b1cdd0c4b4666d02d39 +P = 8c208ab162c02b8a56fc10771d8d9b02410da7765008800001ca36e3c1a2721c7022eb03f3ec8e708637a4b62d559a4afa3c69b395163cb4ff09ba63348672c5508651a232f2edf3b47782dea416d2713f23f9ba55e59b302a0f3c0cf234452fbc88aab6e255c504e3b2a42625732330c14c0d7287b9c340b65756416a9b34312b9693cab076b16ccb93dc59df818fccbd70ce06c786e6d03e51dfaeea22dd07a7fcc28f583e0d5467e4b48dd7e406d86cbb5f858637f495c99a4f381f52e54d63b3f6b13ea8497d93d9b53bef3388b6d74c6add2cfcdc4ff10f08eda4536e783d95b84ce7242663658552fcf5ba1ce7da411bbf12d9c09068526b207d11917dcb5e3a2151587550f316dbbc20e622e5c4977d8196d7cbe0f54c3e6793e41fe7b22528574a58b6ca519f243e5f4a0e01399e616c1f8d5e3fa2059f8995c08ce76ad5a88104c6e8ba4fa544cbb703a0221bd1953f931f4960f0b7d397ce16ba999b36d9695f944fb6f8587fe38a29ee41b2ddaf27308428997880c5333ed5f97ad2613fc6388f83ac9b0af951b21fb8a135f922f676468a0acef77f0a5d7960bad9cfb280064701a504c710403c7a68eff6b63e408f5a209c552da6a7f99fbbfd43556587c6ae613e2a71cca94a65fe24a15a1aa8f0f3041f85e3ed7b4fa95257ece56c90d58ff18cedfbd3324998d20ee92dbfcd46d5d8bf901ae08cd88b2bef +C = 26bde7d276270ea00772b8b8b8732cc83a36d6e0ffb22755e60d1b2e70e3d0a06b25df51166dc3ab8e8453ef7abd2ac17d0052844f36d2d343f25fe201c636c0a45fed0cff0da5a6d35e43c5c0fa770fc68c51989ece0d48c56d8fa13ca33f7d41bc7b1a74be7568c96e5141279c183dc7f17a82e5cd640cce02d945671143fe174d9677d2a781ed0faf3eec1be179052097d298db6be2f63799a79037718e935bae3099a770a154ce7d067d3df60f224dee64a64b1a9a96c257503c3753fa1e45babad1e2191fb4a574477ab109813b58787dafde7045c44141bf5094f01dbb9d3a8a6a1b6e69666dde70b8a97831f97c4dbd54497158a6e33402cec2d5ba7de895c05a0320608a3b0ca31798ccf138b9a6b06a69b0d1a77ed9718814dd801f654fa5e4ea6f72827c0d894e6c627da623ab2635d357d752ffa085d6daf2f77929924b712cc79e91347b2b79729be5fca3a3cc940c75a75baa0e0cf36f58ccfcaa9c22f8a75aefe31e37b912e9447bb48338060f1ca739fc92d507c6d2b229dae6661a23f4cadc1cd5a4b5065e39e1276f317a5924322dee26c90993bc26327ee368c5b105bc646ab239c349a87b51bd83d21e7b1373eb5c795314b865522745a1f695ab4406012ec1bd59b652e176a52df5cde20b571fb1ec4c63bd88bf5f6ba215dc899e582e40c37fc1d6666beb10518be8372c207bc16b19f6a9eff3219cf2e0aee32baa1bfc COUNT = 91 -K = faea2d17b857e73477487b8b79b2fd973e1a79c7839f7e9df6b106c8cb8d89ea -P = c9358e338942615fdc0fe6882467dc1e9217a816d957c6dce46b511d261a43de6ccbcf91c9efbff3e929337cb173806f6c113143d377fb2e72dbb2db2c76f1e99ff310ffa3b95d82e8f13ee49002fe692875eccd91fd297b0936a15b3a150523963a2c2ab1 -C = c8408bb121ba8bd7e316e0e73ddb0762da2fc2b47e28304fd7ab12ce52ae09ad6a6ded4cca4bba1a55094d342ed9950cb3a313d0c42f0753ea7475ef88e7b488894a8ca9e202d2747354f9944146a4bd56568a8a8de718c948b84a9cabe59ba7f8187971ce1ecd265ebfd6695a11f2b4 +K = 32525912d07d99813be353e832c8d91ae355bb539bd9b46da79c041fb5fa3d50 +P = 184d24783b362d48a22cec8eb27e3c22b61b8cea8bf3ec3d9d1fc8240cac027ef15494b70b16903c5df1cb15d49e91df2a794912ea6fd858d021eed5ed58f61f9889ce93885dfc6c3609e61bb0950ac5296047c73c170d2904abcc1a40a5a3a6109f903d61b477028638320e9c7ffd6658b0c70e3016ac14c349f8b99475108de94779632e3b6e8bff2952d5d0bec6a4baac0c9a8a551e212765e12c775da7e76b09336de5ec40fb32e4902206393333de4aac278b0836e7223534a19e71d926fa079a97878282f51db32dc5c0f8e2b36edc96c08d0a3c12fada42c8b5b91ff433dfb00ac81e4c0747bf3268f485d4de241f509c3856651b5d8cd15a250516cade1faaff09ef04341f0aaa1b7914db221f36451f2eb8fd7bc0d35e9a67fbab572ad3988a44784e0aeff4d3e5d72ae2b155b9631cd75277507b29aa8318b809d6dfbb75e56ec51beed38b5abefb699c6f8bfccf73dc941a9bc89f3e2149fab50d922eeb4c545956096d72d2ecd28a338150ea5540b8ea8adf0749c664179057100c3c512c86b65472f12ada5393aacabc7ef80f6bf89e41f3bee70b91cbf636f6b3233a26c7dbc4d8015665e524967e0e2342287e720a41d9ebcd8b351eeafd52226b3c22da6cf965960e048852de2360f100c2c5e71bd46e60454dfb64b4b32f9e8aee854d5c6bb71cba643e2a6385fee1e80e6f715e70c17f1e2890ea89698c +C = 251f266a81a6b23e0dd71e2fada302a188103bc81e170d19c2afee035982a14eb4e07497fb4df4112a71de1c52e1ac8f860e5e3125a866732fea024d395928650b3117d438f590cb40df2c0c3513439ec6fd33c5c809c4b069cb3d29ab9dbc770b4153a261bc1dc6199d4228dd0121b81c75205b4b2fe46b31bfaab03a501cc6b87f593202a2e59e0e9245eac9dc753a4670743bb54fe9c3165627cc566641ee3ac2319091d112c613495006a63af7904e35016120338b6075faa88fda0b2b6cbc47f5a84cc8e40518f048d69e115b846edbdb211d66971d41029472c87b026f32ba40a695cfde07f4da9e3df0f05ed3836fe42f414d6f17a5d0b289452c706ed3c49ce23b6198c2513fe363f5b034032b8d31e29b861fdb606e53d058fc374052d46c6f7ee8cf6e4c1b0826548929801ed60def3aca574b0332694057b8df93f573c82c0e3568f47320d3263afa95868f7ad4b31d41ed4021dd3fbb93ce66c0c323d9e9b8674c25d4e617469ba4999e2d938a0f347a985f159a00dc17b433e2d9e055d49ee1593f11718b258ede33163a50ea72725510a5766e365783fb7459ad63311031896eab1a917feaba9c900a2c5af3ffb9f0f09af32ccbbb42d43c0fc2eb295726277b6a91800255615026b81f0751077020c51524b1747bd8ba0d3f015a28f6830800aca3f0b98fd8f4e3f49b027d860190a7d80880591f57f738acf3f99d732954f78a COUNT = 92 -K = 50f64d1fba77cadf3a114b625a74b5f912c7b0723fa91cf6b8568a3b116d635e -P = 7358fd70c62d1186770188facf1fb093be3dd0554bf81ce78be8de22515dadf58c375bdf7b86a1382530229c2882a72bcd4631fa76f4a2abd0e31ba4304359730b4925bc3b2b089c3f87c0cff60664b75dc6b65b52362ecefe4b45d274ce6113880e84a75c -C = a05e1be20a233068325a094d3a8da5fa0343067642bc8a2fbdb9b741f1ae7c71a40f0674dd6743abec86df0895408d2ad264b10bde103df398b3af35b35f1e38212d4462050dffe3e42c8d1d50fe3f999ced02250026fd0104ff02d4f5daee9a481bd597380de4086ed4d74dc01a983d +K = ea702430641da362f75d695b6bcf2a843e9019b312becb273565c5a49628f6f6 +P = ae9c1c45fd92777dedfec97daacb1a739b847eb6da2afb667a3fff8e828885619974441bd65f4d5789e20bd34ed3b0baa0f574780aeff183ca3ffab57e64109d0849ea4cfc445c1d1bc5465bfd150b8142d91c54cb90671b07b9d16040db05384a668b39215057bbe7461b88309393ac3a4106efffb36e04fa3975d6e251b3654ae9cfd88d7e989627d9648fc2c83f5176572cd4ee14467d5e398ed0a2db1b799b6f3a9e987b2e021d3f397ef13e1a11e0ea86ee1f05af2dae9dd24d62a1af58780281c83cc56efba3047c8cc7cae00256e852b0682042caaf990712f0071a7d58d425d382a4e2f7c8112755be466cb2824d7151889ebc3b632114f1314dd7d13c146396002b4d2fdcec3a139524c20e2168864ab65a95cf94fa5edf7bd56de0b3025d1f9e74c9aca6d183d5f172aead766e082d63020175ccd542f11451c3b3971435ab34f41e0c9f9ec9ef217d701bc01e4cc27da33fa384ba31d796a6aa2ccd57b21be709a0258232ccb7a8c68493c2b8afc0db01396d20e5a2f6d9993f3a59ebfb7c2880eb778dfdc0d0d0e2e876b6785afb9d8285cc327d1d511e94dff93cc29ff98593614790eb961fde7c0a27023c36f7729949c0999147fbe7bf8e772182bf9908fc50f8bc1767105bf26d6683134b201c607cd4afc009a50a4a1eb2d941dee06d56f4a7cba689f96c3bf4499ed26dcfe9cd47d9d8559fe0a28afb10 +C = 97caaa1a495b22759f1d1a078a4b79f843c431d757e9f882808344bfa91d83f3aa16e1de3120920177f75d92ac8d8b1d5d0ace683f1862dff8f67a801044ca4a305d68efa3ee9d28feb940d470eb8e713c6fa194cf67169265b710b06fe4bef6492722034513f12b46388b2e41b98024627bb300c7ee79e545ce0bf0d6eb41b5d1ad8e247012480c8ee28c7c41adc2b528e3535a3deb7e0dc39dd85ce453e09e9d5a6ed9bbf309dad494f510733753de42a7b691110ded5608205dd456275a0356cc1c7361bc9ea66f1e0787dbc52ea4c322e951a393fc35061396c9601d88bd20d6d2b42e7c98fe2da2c498e1156e0f5a4e0d1383b6b11aed605077ab6d19ea06279ed900968088ed34a6e67e8e6fece6ac3b8701872c3282402fe29ad925197dec2f811cb2e20562075b07547c6595215d280942169f2513810bb6da9d2f2614822649f5cdc9b0f7525fa62e4f1abe60e38b46ce9a2d580feac19e3a88c8081872860ab1cf072472889cb0724ef6eac37ca2bf1a341ffa0d648ac248a8446f6515c052866039340fd471b3dd0172fb8fe3588946339b4e4e0dd76232195d7bbc706ad2360783df0c2ffd385da76629e122c93c7870b3ef2e8f08c29aa5a560087be7449c2014744072d6353bab7433488c77375834130c404980aa10382768076a7b5ecb1e133e9640278bc750217f87f258cd8bf0461fc95cb94fd9d6b70adf480af7f67ec689 COUNT = 93 -K = 09c0c34685988b9618a5b3809625391d2110a2d4dbed6cfd5de1a95102c4970f -P = b80e4e0874f3e34a45e173015441d4880dc925be12ac3ee10cecf1fbefa8de62d6b3311e8cd4eb9add6cfa8dee99d38632612d0fb5b7419bfa0a26cede114d3feb381ab9212d151b58dc19d828cbe5e778641cbb66b5579847f6cf0b4e5a539f27c1553f68 -C = f37f6b16f1f972767752b1a89267141e5c1689099dd6c291b278ab93cbcf9d996232efc20269e54aa23d3bb7bbbf8fba870e4f7935d8a3d93df814b3b4f0d789bf2d9dafe4a30a307ee4660cb670740ee421eea6c4eb894f71c3faf6d9147132d2233632fa5aa1f2b074a0f7318a7ebf +K = e38e85dba8e74ff68ad4ceab1a5373656f78e3095a7c981a4a3b342e7ec1e0b3 +P = 1c461aea9bb0431f7de363a712719f9abaf079a57fec37790cf875bd2fed4a367ba842a08a68d974c08b760909269ca24d4fcc13c26b4968353ba1a03ff34239cb726ee93ad5b246f0162104538c9f7d9d7ecf7065cdb25307abd5476959aa08bd2439a8d881203259af7ab7055c2fdffe9847af2fdfe12247c5a386209f863a63b2a76409236792bc2001a4fdf575b289d021c462335c13df7ea33cda83ddb7ce81f8816aacde958be8565646cf6245a8aff5c94c76054a10876a775754bf14aa30ce8ca8cc24efc78dd8d314c91c40cea459bf09624d205ae999266cd088d51060c04c04bbe6d0e0ce744d69f1dc10c5ad2945222223ffbeb41c52c842bd2e39309e37d41a18aef7de34062bc18cf717d76d6f45443cf61fb92cbb0ebd69066fc50b3fb2fe9db9f427d57a1ba5190f1faccd84e1cb022c4e6a21748b82e40bb30b5c36596b6ba8ad7b4cf18b56e54db0ea6a20aaaf6207427d293db4a6bd9c0de264ed4a0cc80dcfb22f5604c3dcb1aabb6134209d3984e402a844abe24ba6cdd340ef2f9975c56df7bfbe262b155240388497f9c33f76e197b9b0fe7bad8b4b39176abc7101aa7493876884210f5ca4a008706326a970e72ded80c0758cc7772ddb1c5f3f422d77948bcc1ac84e8832a8a60190a8ad14fa1c477e876118da5149150b3f816f52ba46a6ed972dfd8fd185894278ad2f54d9f206215e898579 +C = 3bb81153e19ee24321fc8468091e922cc3192004f83e4217ad3da20e8cb7ad6883a900a916ae469cfb0bf905cb5342db4748bae2c098fb17e6e2cb2fc51ac502c3818c99e8a8ea8782d18b99330b00a899c8af7a967f39303d0d438e5925bfe29d1b0307be76d75c309719732e03d38b8eb680bae4c2d2df25a4c3bd89e2d5baa2767c5b49bd2298dc9309a0c0909f727b0bc22d622efd1cc3007a9df3299083a63d05c27c27f877e21dcf5cbfe6b1c1dc8e53251ae1f7f6d954bee93b3b70b76f8a8abf25fbec3a6532a1974daa88d428b6298b35b086669d0cc0d83b92e0a9a882db12ba7556f68f9cb0193c8fcf2519b9266d488f758d3bf8e7e448e2e12a39ad1c1dc4bab0506f69f81623b8015cecd738d32a0bbd85e5a9e50e4a1b02dd19c7fe5069a66f58c1b43980039dba9dd6fccad486f54b413e15dae5ed26d320960390ebb9ec2933c108e8188ca1f0577309184e015e66628fe9cd12f7dec3df45e9a8fb46017a9b573df02640d5d7dc52aee5c148e5949a449942764c197487ff3d49fafb3febe3291267c1ba7ebd36493f185366f4ce1644796a1c6c8c7c66ceb03c0bc6334fac2ee0a9db80773ac1e34218fa6393cf6c6a6b35f8f79a75bcb403c7f18f431afa12c4fef380fd65aa79a0010a92237568e49ecbf0abbe941871d16acfcd24628dbef4ff11244fe84a22153d934a91025876e148d5bd9b09b167662bffc276f2cb COUNT = 94 -K = 08abb51ef801fea7dc96cd213238e1bdc335c46d5373c6990a2cf90d02baf52d -P = 4dd7e7040e009d53a2654b02819ade0af303520e25feb0dcc5028c9d416df71c26bb601060fded34985cb30328ae5ef16a3228fcb86cbcf5b7fa598ee593ea25635835507670a226a69758a54fa28cb9b22f76e88ab4f724db3093ebb2024921e0180efc34 -C = a7f000d499422b8322045fa0c1e08bf6dbbb3e5973c02870304ca9e5c1fecc4fd2561c19669139ba147e0478f196daff52b731581a82bd2897c418203fc9e6c1a75feaa94b53d99308245a7362a3e8eb20e9a3944f533eb786f0719e4232d17bba5d0a84260f658b3277af6507dbf74b +K = 33793bdc1a0044b431dd905ca39b12308fea43faa8ed6345a59a7e937476087f +P = d7783303e86156ef795acac55dc43fd82c59a6def10926ba4909ba47245dcd4c6db142b5268b2b3222605a210e6a309eeec6110ee7b0fc3fb86c999f640f5b4d4cf8de1eae0ef5bc824c0ef3332a4d96b357c32801a64af42cf69fdf45173c0ed951b5505814af8bb9586c2312bf09f4d0c77287efa388fb0758936337f1c065b29f4b8aebeca7dd2cb74c00cbf549c301a991238739527331ea9b2a8b7276b0f3994abea80601bb0729e1be489e5b0ce6879f6283990b690a48985eb04725ac1743d100fb0624b9967a05a86b52a80808c6a106e0a45e41ce67a063de8f7c2088c00efab7c3be15ca74ae880a6f27938cacc1eec81d45de1ba5fe483f86556e2ec8158c5247ebee83502e0190ea05b8cc4aaa08228e53628d89f09780e1bf5653f1d768cdadf01e00ec6a47f60fb850ef54c90b2191f84a7c9929a7ca32c6cb0da8cae709d11ff32e8488a75abc0389457e4016ab24a67e90c593f5318f2f0087770edac045410c85702b8926a9be9e5c3067881b87ea347d25ba4eab4d2fa446cf0cc55069aeaa72de2695e2e319a8120d24bb06f8174919169cf649c5d1e61815565c83d5e02e25dfa97739cdc8cdcd4a61c0f07a61854006b07d2d17612a1993b1a644065b0ddacbd5f1ddbf988c1dca0d4842945a3817bf03d2684c25e13b8c4d2f9869f18304cf2a477922f4831336e2d81a0697b6ca82fa26346eba1c +C = a47890e3547956c55fd80557592ca9c0bd23d1c87d333a0f349e7b62b3c89c81e6059cdb7f6c9eded63a531e65a0b3688743b641a13ec00bc39c5e0688ac9f06741b1c54a03f27ab4ecf44956f79a19a39e79c88244b1514c11dbc89d4f8320d0679ddbc366049d69ed874594cf73293a6517016fd6d813e0228462495d4aa3d31deefd97d519738cbbc1d4e99b2b9e40d4329ab9a3bf0fd0ff22c9a4af2c580bbbf8262d4d5ebfdd497448e1bb2b705386eb4fb368ebb4e78d6940fb2a71ff08228b56215ebbcba420f272d441fa857f4ecfbdc1c60c2964f65ddb054327aa87ae8500d2f9d3ee5774eee82a003d78657e5774b432c9ab8ef8f8d03f9237e14a07c4ed845da25b751bbfc31d661bb165aa3a4797f863395482afe9f5f1f06fa5d51d6de3d4a944ca3af671761f724b3ff42a41c47655361025b331024d2ee9d4746f23628456fdd664910e4275ddae103d2c91a3a5f5b3c4609e0b1a8a146f83513a2f7c805769da5244054ee5c082ce801cb4352a97321c0c9df3a82558ee18dfc638c2c2124b6f4cf8585dc743de1ddd86a609cf235df2c8545889d61cfec66820c2f673023d91ad5248175eb7d09ecdf645e136cee5115bb036dd1854258ed91e9490b341c33d81e16a066688067b925c769da72e9b4182507dbe1e6d2f405c7f0608bbe2bccc81b120b6dd3e1a511592a77446858fa60ce614119cfa6a53bb6696506c305c0 COUNT = 95 -K = ff04e6527181eb0edf50dec74f9dc75333a653cfcf84ca5044e5f8bfc30bc42d -P = b6922fba820df552f3e5c3659f55c4eb72a7332a08cebd76d02506cebe7760f4872a59958588e9757e87c8d54a18042fa8397ba4b5ea111e96033b5d5c5cc85b982d6dabd616f6e9b6697892243de1f5463f847f3a5599fe2c6fd35c98fdb5ce3b04a8935d -C = 541f85fb04a8790f369bfa12603285f62aab5cb0a9ba0316b5f07131d45ecba9a893429ba1bd94bf4e49ba74443c00e236652edd9e2b5665852168a73c873c53f29a92112090afc3d73af12258fcb13d04697068a25ee35f3f96537b7bcf442270a87da6715963f784d88546515d66b6 +K = dfa3ef30514960066fc681c172c85a4213f15dd8eaef33c6fafa28c55f9598c9 +P = f150dbab1dbfbf1c74bbb42a8b9eb1e5ea9443842150e834883a80c7f1872f56ad84b2bd370ca34226ab3b7010809ae2c2f71641e5ab717ae38aa7df49c28c1a5299c51508e57a4e192df4491e423efeda225fbb49cdb798486dc8d70bbff41823eda57ca92ea2baa66214f481130f284c34e00772b5bd3f06063214ed79f78ad11cd096b2d06c3b63e5bb62d305507d25ecb28630fd49b2bdbad1bd22910482c917b85658be13f8b1e227de229071cf46d46f0fb5ea4768398170026eccd863e8ecfc72b7aba16278fc371f794a41e754896c58378bcf9b199b2dcb8b6bcb65358a8ee58cbe6240665771f71d98c4e7c43a736e89e8a80a448ba9bb1b49f6b281fd39831fed15d634ee5345af56f1abfb8b1d0eb0d534cad69bc1d04a91505902756b7d0c266bb075f10cdab348d986a3f723ebe5d59274a7e2c786af2f7729ce1288b8fda19c0fc3c63bb065a63577e6c70b8a052428db8ac75a85f500d67a35a3556042ad5e04d56ca123e155e9800a185677e5c97bace4eae864e099a2c34f04a8dce8831c67a59059f533d785b075f18da22e44f3f309290330607399fd6e1be69bb59ec08fc83099fb107f8dbc96eb4cbf059d13ad2ab16c8974f48d53cc10720cf804075709395482f01d4613edc3749b7e7fe0a352cc245f9cb4fa72a9ba8402e03f5c4b741b85eeec6df7be03652035b121dc57d7a67825df9b720a +C = b2c89f8df94c6a260faa79e581d5894bba75c68834235459c47ca6d274095fadba951e9f9432c8bc2421719e168f80ab73722f3faefdd79067509906a9f2a7b078f620d845d35c4f60aa635bf99cdf290947c41ddc85e6848cf7562a22bb524f2dd7e16d8565f74ce10c9726ad223b9ba02f21b27be26a2db7b9a087c7b26918a9480f9affe08b07f84f36e930aaf81965ec0085af8ed37255f032b027c435cd0a12231b158c8c3b5d1738797b012540ecfa66b47737d8babec3607d73288d8e7c59ab2777b30cc9113aee23201c36b355faba08c4880c0bc80a49f726d80b49ce8573cbe1d75542a6b2b917cfc603bce9dfbc77a7f1c2acb31d5aa53884b0a1fcbfe4aff9d1c2516d0bcbfb281785b87927ebc75c7c986ca52f53cc1218c0324513eddddc24bde9a2aa503a3c9d8524ac466637bca841addcd33357c115fbbcf31bbc3959861a462dff35065baad68fe494cde7ca9d276e7c5b12bb57434aa45ff583fe34b4034d6c519162c5c9668062628bf99bca3d795ead045a1fae16fd14a1bd7a2bcf442fc6beb46e0d25a75246d1b1b892aae1cd4343cacb5d5d9a4bf7fd315584c02db8459a494ba4969b318d9a8c43abd4dd0409474bf743a06c2714090b13ca2f6b5998b3bdf13b4a62a3330e39e16567bdfe9ba0a63ba3e14b290cd2c9ff26e03b452499339cfcc93cc632fe07382e4cbc7e9f89dc56279f7caebc9c9b69db08cbcf COUNT = 96 -K = 7526c70562eaf7025a6d5d834e3411d367e4a1c16e72a6d98e51d86f122b43c3 -P = 4447d130903e70dee7a1424d5e44b626a9fc6b8d036e2c843ea3e83cf97c06c891dc7e84613ffa38e19df74fea1eda0db4442e6b745e8a6c60a785bcb4cbbab1621bee27c53234455ca10789baece509ef5246a0b61f07c7857fe6f47cc8c12c9540c2aee2 -C = bc62b6df194697782cd1d325035208fc2a3737132ade86cea0045d3a56b173c5f89d2195c7dd226aa68893676c79efa429701aedda786fc32a30819fb0221da6eef7ad1d3315167502bc75eb53c9a347b2fe2c9de2a9182777e6652224f1443f32b699e822bd62bc9897fb016e4c4812 +K = d4055e9c198204f71ff4a086a73513b31947f9409dafd900251a8a09eb98da89 +P = eac69643337965e9286f347e80f1cee1960f2be3fd1af795be118c7f668662f40c6f50a552f84e23811534a251a0bb3570dbd0a464d5ebba4192f7999b9fc35f73847d96f1749765782c8ef19fd5127b3bb3f9735228e0075b2434e32031ae003cb7d4b2b7e6bef7ed44a4160753570155bb067ba35e59314f1235cab129fe264dc8d2124071ad4f518f8e34c9b6830f10517b52c9cf6ea0d3f2b178d68d342d467e3a50bad3c9814f047a43ab33fe86030f708c4b6024630b4f11429cff9673c6389c4e175645f47b4d2d55b7e33e5ff4d1cc8d900ef676aef22f4ef76492727c4732da61797186814aad33bdba2203e7adc2c259a4f71da12176d57df6427389e7ca27f193afb520591c721a1caf98aac5155ef5138e4c37f8c8e83311945c665aad7c5f1e26d36cabe9032a245fa776ce3a02b6f90d45f82223d20d044aa61b818102f579b562260fbe5fcee5a740535684fcfdee0b61cb927857db3e33bf52e513e2c08bcb8cac441605de7ddafd5bbde67a8b0109cd645179d07928b381c6cf3c9d93e797b2c79e293c385fc03f8ac17945c23f94660e6cc13e3b0208dc94f44e012a97cc0a55d02674fcadc830076ba3558d2e308011c054edd33e890e8db07497f916ea33a228d1cf769403c7512d555433e9478aeb3c01bd3f9f0889f78522b4126aea236d679c0175bd870622bd701644641bd3548f41582e83c58b +C = 93d8fbf3079de3d915bb554d945458aad1028520a8e503c1447a003415dfbe9aebea7484240eff570c8c8f3542ccf7eb5861bdff0fb908e9418769d24403715ae7de247dfcb5376f2c32661aadf3823c3b5691d641144b0767f6690e7389526f47308144911a18d1b6b35b8ac464ad9bea95b8e600d9aba10f069218d81be809267bfb86083317653b7570727f40e7a83ad988b2bf1dc7e758eba03187f9d93d23e8e43fcae729adf3ca0eefe5bc75e0d4864fb7f39b93d8c3522b631fb1a1c6d292fa9f3785236cc1efccdf05aecc179af3ec75b55f35553720213290f628099b5c25f0a68c38b99f2ae43416532deab51c0f88fed88119b47eeba8755d3959ea1377ae13f4fc04497e7e86f7d3f690ff93f2b731aaec2d394bc60d37253ebc6a72079df5b349c1bbc5821868581da9e750715c2cf6877beb8b92f4e8abf8342f50525192effec2ebaed27343eb79e6d1d6857a3c0bc4f689818195868930a45bbfe3f80e8fa121dd6f1629c49bba009da11c90fb6c68c0136e083d1e85dd61525e9e9791733ecb1b3281c164a0b9e0155afafe4306c123a93d2e715c10fc29c412e596da06b785e124398e1f180500406d43ee182a0445bc79d76b85bae8c9cf46b5e999333e492109d00050b88f3c12744cccc01eef1281e07ce6b8c8cb9a98e7939c891bb841f9a50746b7ab6a8b3ec35ea8be915f635814371098abfc04fa93b97e7da0bfcd COUNT = 97 -K = 819c22c2b42251a41276d2ebc71d00993a50bfcce8aee58fc48302e540f94f4f -P = ad84264e4cd11ccfaa81f58038a4bc2666674a7dc7352e82dac331ef470f91656612ebb5e1683c55449852f75622923c4a95cd22772cd4fc6e04922a8dc2ecaf2a13076e328613d19fe6d0182995278e5680309e714fa8b45275b68381a6669b62f282b916 -C = f2a58ab644cba19da39958a013e3cbe01c32174ad37e34c9bbc0d080c094f400bdc653d51a4b33a8eeba9af1740cceed41a923e4c91f00dc977cb4db28d11fc7138a191b7e5842e84d60bf5f5c04889d6d913109c3569fb93274dffb2ab013c876d08287499ab48360dfef499b5ffe73 +K = fb6739f82394c17abb6efef55f7e6a685e9b9f145bdda2d1b17ee8a22cac3ce1 +P = 6394157ad03825dec5076af2265a353069f79f7a1a51377fbd4d66e9f9b18c679ac22f4f096977f68260669298e5982a3aba29429045ebdaa3269dcb1a7184e7cb4c109d8926deede042ebb0cc419bb19e9a464099cff2566234270d70076c0b58e7d5450384bd97d4315e0735809b89febf38a2637a57393300d0f3077a0a1e20b5be333eb0a6c6b15e717b6408bae368f0cf31d8eff411eadb1dd7834d3a2ccb4d327b9fee872d418b8facb54544d6ceb7e8f34e574166b00e4b2b9a6f87a18411683bdfe501f5f71ca6929cd70c45f0f76cbee81c5f6ec443481f082e301f241aba665231d77888abedac3a35b1bd6077065f8335b0697a713d0498d86af6a737188e67a3466ee937bc84af3e37b03ad9b239c6aa00c2032116c11c1b3f116868f48fe53301b5588eaa5841aeae5ae6c98f5ea0f131c908cb4d05c659e8d698d363c5aba91b6bb17c11275f444bc2a4d93173d6f098614f28a3cfea24da6ff6fb8b95a4e9b5d4f9b2fc81040b37c73acac4ee5d059a337f4c9076781cc548994973b2b8f201178852965d0287c9c3b589b1a6ee53b3957292232e158f1f9be3223b389b80796b9a3403ccdee562f8c028fa18cd9c98c5a51c636c74e4f4625ace680bc9bd1eccf309dee74a3c55e7fd59cf284333990e81c7814ebeb269f963f870f6d92c82cd43d2290d866b0617338bfafa4e897e56e4fe30a61ecedd43 +C = 96712781943ffe34300d25fc78bc1cae4dd81ff2a1e41cccb370c750acf710d3c3edefed20d773e51321ac62b114c53d26a9ac3ee77b37513524357e77869af6870454d24d6ad8860ffe24a4381a83d483f57bee25bc6cd1f98d9a7a15521fd248ecad272ccfb33793b74258171956d90fcda8a1dff3f17c97a3307984cb2dbf7f538b60d2e752c2c44773d6b0007690981bd9bebe2a4563b39cd808e40f570ad55d301522898f14b25d0bec8e2f4638952758fac3b381f095397de52d1801f688cbb242031023eac381048f89b28803b4162315120d4be1ce63b9360a375ffdc0842ebfc574d0961c9e5039afa315b02b49cf8426d1de870fa397422cdab3701deda84b95ffda5c82022bfa18b7327e738c16ed93427db0ffe97bffae5db50b6d1267c2ae5a43d3f0d8bc7e622257a4052982fcc303e0d62f29f1eea3fb17091277c6f087925b55f2d9ea6bc9dc3cbd20bb490150a2d544719588ebc961b7c52139110dfa51913f3918098b22ed070b335b07524d77472d807587e8b7b40ed3602001ac83d6444c6d49a7fb12a7285742c185bb633c5890a7ea3b76419acc3341dd9a4060c23374b462aa44e33300bd2d0ee8432e0dbb88a0e0003524c806d09fbec2eb6f239d7285afff5196e0c5119f867be458f0b1b307d51ea28e967cf2e9a32d27671606d34a7cd0e0259d0d2a8a29e753fd94b4f33db93934227bf46154d91edac30108f1 COUNT = 98 -K = b611592993d1910fbc4fc66ae7f14fdf1e0518544d89661285bf9e1a3b99a03f -P = 6063a1d6841b1316535b484f2366f3d8a9ea4472bcdd87d324afb1c786afc8437f68b098f2620e14038d44e1a08ab37be2416e79bea96ea909b6811eb6c895a64abbe7aed0a01e3c0277e19b414f9e37b55b9352e9340531b0ecb062f59ca2238a3ab66c11 -C = 1a264d97b26538c650f0bc815c0a08178b026a517faa2b9811dd408af8cdb5e2a3e9abac10b198d6795be6043a6558d24f4000f0977e40128296fe84d1427bb130ebce3a533f4362078a76714b4c77a7cddd7f44cbcfca82379a8d48046be09229746ca51c39befc1ce100d2a79024cc +K = 640db24da197923ebf3487669ff652f8ed6e7e10c0bb537d64d123fdc1216387 +P = 60aa1075162dd435cf7b73f5e23237715bcd37c28eb7f369c9a19bdf5b7d76598e7cbb8c61e8a937d8891964430af1f8527d383d7721a2d94accfe4552202f16370265eea6a2a8bd5b3da29d68f5b4ffb2f12c0d2c14d3644be5ee4d7f6af9596d352ae9468784668fc6d6df5789e07128c4c900bd87cea7a8c63a50c759347a0ddb7db28f43dc7a6cc4d4f6115e76d08f24d7fa6785087a1a0611acee0faafa9d1180f21b481fed2613b841082bb6855d4e115eba5ec2bb08e7704b52212c8879b8e2d3a2d07038dccfc586e139b4742dd6a197d66e1002c0280a0bf45f54c659c939a2d18d83bbe274ca646d8dc70de6fd530bb434546a6cc6794adace19c8dc4e43f64cbe8c28631b841e13696d8fdb23d65d52e4064771511c20556cf25b5ac054e58c1f260114d44e47c673a903661135827d114641364780fd93ac851e02f30c7e480c284d8dcc304c307c1f80717c84430d346cfc65e432d34b9299d7df54d3ed3e173ebee804182cabca40dbad2fd84379ec98efc40c71527452f6a4b75ccb8a0c02b977012adc51f36878513d3f05139ab2cee86a70277ef9377a191fcc7b58c6319dabc95f596399fdfd68579ada76ed86fb777750e3f2147c0b379cf415470f4a23839e133582fd117b1857d7b7043c425a3810272ed0da2b16ae78d922950c9dee6d90e5ad30b0e4a3024ff6e8b932f0d78ccfc0307a00a3d816 +C = 0bd1e66986d31977ffe7c0526f90da5f463baf5453008982bbd81a9ad5bb9d457baa0776a29df8bcb1558dd4ac751ca5bf3fe4cd9afd552ad3f45770f931f3ce3ac45bcc321f8fc70a6efa0c17a1f134a70b891727f2837eeec22e1eda20fadb64179e95c4d4b0d1a04a0db4aade4630f428f74ffc986710e2e23155a70a98838e3d5aaf52db30d3364a6722fdb30c34a538bec5f23bb0bde57d9019990dc01dbfde8ee4721fa2dd564f2b1e3b8c651d6c21d19e8aa69a92e83d8ad40d2f0dd420fded913d5c3527f15b5de958ab718e1be47a98f1a6b12ca361722eb4b2d0b22e11dd96b085daca76dd50fcea881be1f10fe01e52bd8979b67c9157087fe551c471805dc7201dd7b3e14906f59a358a679386eede8fd74446a63df1ab615598ec31e08c3fecb0d9121046bb904739e421409ff21c64e07cf5c2c19a30867731859e04ade0b5937552fe97d6f5dfa24e92fb114ab36174857f964ea37bba1e4cb4ac5091e02a20b087edc5ee5121409b38374c12c6e9951e6f62308fd24bbc8f05dd18da99b94dff682e710ec687210fe5aa39e64289ed01ef3e98861654dd62e05fa3a45d5d03c32c51a66008a7dfa202cbea1a06467f92eff639801272a2b2b494eebf2e70583a5a56d803a82abf033edf4d4ebace3514b3a3741b494fc82c10e3c232fa98a24f96b4a3db6085ca2bbf039eefcfc3e6f92403c1690744b5f18a6108dd627f3adf COUNT = 99 -K = 08344c6a4a4c5ecd46762b7caf31e795b6e0066b9341b2b638cd4aa277c24660 -P = a3b36481d720c58b86a5087d2029901df6017a784572f897de4f19f7d8cf5b7651b714db321c36da3d2bf63155311632ccc720bf22cae5fd64d5141e8d500d98ca2cd847988deece790d4804fffa25aab336681186f2ab4f137f785570d5e8be4dda1fdc50 -C = c74df2d6702cba65d208ea49ab01bb496eef8293c2d486e52dc7152eb33cbbfe222905dc0dfc90638cc17a55079a34fe38e9ba78dc1ee2d9ffed5ab0375ac779f96d1ec84746e776542d5df525e2066e4ee3d6da0025099cf9a06a4f17ffcb7395c7952759c82b26e517486c6781dc67 +K = a8571d0257d79010ab20d01858f4763c03e628f912786119850614d9023950b3 +P = ed9061eac56e8fc571134219e5f713a7a57cb11760e2e7848ab38102a7ce4e1e2a4e18e4da4d13978c6d41f8e05969a140c40929fd0f57f073d83c15f56a1f5a5db0e9b0da57a763e85ae365e3a24c79ec6b9ce90e12bd9fe080c357a469b2fcbe2e897a277764c97f4af160acac71c9fe6110c19ead71d2a7ce9624a0d1f9639867559e93bffb81fdedfe30a408bc4c69b56a17aced776c1fcb0e956351bcc5c2102ad7a4b3274f3a9e3ab9a9885830c30942cd210afc260971e879caf74aef71ae6d083a0362b047dad38d91773a555da7dc6d6377b8cc8c8c158ab708a02479be5362854f45c7f119a4da9adef76ef5bc42a7be85ee8cfab244673b649c9bfc52faee6e46af2322a65c1a07cb40c6f78f36d5519c8d15edcf5bab4ae00a8106ef7389029d796367c49c1555680ef910e0844fe7b0b7c47188ce0b64ad6f3b57a6507f825b8b05d95b30c407f127ac73d9e25cf70992586e037edd1edd897f863c8a052543b68eccaa2eb4199b045a27310effc0168591a4b32484e8541c79dc8b61e749828f03a3313edfd75d0336aeb2c64d5900df9ba5afc9c2302385bfa032f0f2f775762dab19df0dc464c67ff9537636b9ea0fd58ff210376e735e4d5c54129fbe55694f170476cf5a1511e11ab71d5be8590ce6f073b7daed59d3d9fd36ad804e2b3f2d5f4207d65f014cb0351a4c774bfaae7c0777b9e0f5e7eca6 +C = 0e522e2dc48dcd4833226ca86439a2cd6188315794a41098fe3e7bc6e442212fc216d5bd682a6829b61fbb6d466b4cd82da87a40ade8833b4782b23ed869e2d47275a12fb21a4ca980458e64e4ce7e95c228b570f536179f4df2842302f0efaee7be28c7ca7f7edab902cb11a0325eaf2abf45fffff78f72a5a1061ea579592407866edb9863a2d05445bf4f21778ad620164c289d8fcc31e846bea4dc251c9baf7b7211296a9229148447dbffafeb780bb18a2436689cb897f791af171fac294f1b289dba66b233e42022548cb904222a09b742fd6a9a5c2e864124dea1be9877661cfc7f28810a4c2448f00c7d07a7ea9daae6a9a18569e68620df9f35a66b585c00d411912f6858ec8f70931ecc692c38b72ec096850fa5d7a77c826d9d053ee859ebea486b8d1802a4879b3237a36f773c13806a2449faefa9bf30dc5176b758d153cb2a0373ff795a58da303a48cd3531423926160be19dce1b1a9dc76739e01baa86e489cb8d378ad40e0a1ebeb4a0ffa246762915d92ba1e78449df45d0b99a78b74d64da3cf03fed733f36fe5a23d48ceab01446aa67433b8a2b15610ee27a5bb81247d2172c4e555094e957efac906e5fb502a46e7097fb42251885782f7e0cb19ee0e4028f659447647ebdd2d0b59e026874e44b62d8dd862fda89095fa170af25b156d7687152cc6cd50aebc143a781b9802484eb068ae284aa9db54e8b5cf4303a4c diff --git a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256_inv.txt b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256_inv.txt index 92396d7ca31c..e78e19a53e8f 100644 --- a/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256_inv.txt +++ b/vectors/cryptography_vectors/keywrap/kwtestvectors/KWP_AE_256_inv.txt @@ -1,2516 +1,2516 @@ -# CAVS 17.4 -# 'NIST SP 800-38F KWP-AE with AES-256 inverse cipher function' information for SP800-38F -# Seed = 3f0dfe364293fdc806dbd9ffdd6d1e5f1ad9ca2269a7075ed2a23a6b2cd0244952b85062280d97a5d1095088efbed63e94ef144f66a1f145309ca976a3c81b5e -# Generated on Wed Dec 03 09:15:53 2014 +# CAVS 21.4 +# 'NIST SP 800-38F KWP-AE with AES-256 inverse cipher function' information for test-files +# Seed = 7903e92fd041859cae3a874132ec71d1518e66b7742db433e63689dbdbe15d9343d14f5a1367f96ac30017fba1793be1a89382d25058fe2e33bccc5f6a80e613 +# Generated on Fri Apr 6 14:46:39 2018 [PLAINTEXT LENGTH = 8] COUNT = 0 -K = 24de827c57118c011d6c4294a6594fa635181afcf2ed0e9f26f5aa6cc7b60437 -P = 3d -C = f93ed7648bbf2ad4e04b25d3809bfaf3 +K = c1ea7ecade9aba70966ad3c0693f876ef9dec64afaf61434d699e4072a2ae9cb +P = 63 +C = 79fd131aa993f897dfcc14e0c9db5707 COUNT = 1 -K = febe0d03dc20d26c43268054043dffb33c9ac2b392e74d0ced266583f503c0e4 -P = c0 -C = 3348e2031948f4e6318ab004da36d3b0 +K = 24110616dc8167e8349551c24b193f9ce9e496abb9f5d5aa09c032aa0da11895 +P = 00 +C = 061178e128fa59a2d58be5be001f3b93 COUNT = 2 -K = faf3ccea2d8ca1fb3ba1816f2c8a54eb005cb53b431a50a00568afc7c79a3b7d -P = 2f -C = 781411af5c61de57a7fd5b5fd7943c91 +K = 54e94fe6701935eb970ec2571b07d723cfc8a370a037b6ade71aca1f0c98298f +P = 4c +C = 051c300eda1ec892a2814338e12bd9a5 COUNT = 3 -K = 235b2ebd7fa500fec3c20fa64878611d89882301dd8124edd33fb2510f08eaa9 -P = 10 -C = 8125fe58f575c7fd9f9c05738cfdcfb4 +K = ec376f2d124b4771142abfb1e449bc64f0f0ced10f763dcccd52107727c63c77 +P = cc +C = f60ef0d412472eb02044b3ec575a6cdc COUNT = 4 -K = 5bac6cc7734eff98ecfe7c8038ae0752823cc1f3d066b9fcbc5e570a56a0a182 -P = 1e -C = 8ff71cdfe477b178018ee24246209ff5 +K = 41897e1cbc76d50866a7e5390d07d8a4937327723ce1ae6e30b016c4d58381b5 +P = cf +C = 00f7df0ae2414a2b3562fb28aed70c33 COUNT = 5 -K = 4d0aa364f37e19d5dddbf5e689cf4f9e7feedb4aecd67829378213f30a96a630 -P = d6 -C = 352a71ba0343059bc17200e83caf23cf +K = 11bdb332403fa1c0df1d8d5e792e4c2ff0115d0d31ad9485a7e2d285077e8b77 +P = ea +C = fa4c3d319070a7a754c828707c77963b COUNT = 6 -K = 4df4f61f67ecc8074dc04b951ae7ae82f8397b138e1b24ed1933a3565ad80f8d -P = 1c -C = 8b8c8f45d8550264ec889e92d58b07db +K = 395d38c73e25efbfa6de925122df54d69e9ae7c967f04d4d362e228836a4584c +P = 01 +C = 0f7e7752a326c5568aad519d187ffb5b COUNT = 7 -K = 272c5064894423240ae83058b1626dec3e107ad764509cadabd2afe0b8d5e779 -P = dc -C = 28a588a0c6776742ce4eaf5dabfa6c75 +K = c6ec96fe027b3ac86fc345e05f48d640a4a0cdae5fdc5587d4eb2ceda268df6a +P = ae +C = 630d127b217e458d54e287e0f62c41af COUNT = 8 -K = a23ee7c2dfba600c4c9f5346cbc8ea9939f77a9e93500ab58309f523c59b3585 -P = e4 -C = 8fccc2a1777d098fb53f698556ab500c +K = 7347d4007e47c3aba33891a2df57e97dbbd723623fbc5b60edf95d2143159882 +P = a0 +C = 820f69a27a3792c567c338147cc621b8 COUNT = 9 -K = 72a374b03806c6faad6084971899e5b7ea06e2b3c975803e9d0e046b50642767 -P = be -C = 26fd3756d0761a71c24cd827883efcb5 +K = 127beae6f4c8b248d0a632658335aee85d6f2627ad45a1c9b9d5d02d80b76fab +P = 83 +C = dbf022b6cd4887d60ad8f9c8e43d46e9 COUNT = 10 -K = 9fbb7811c1d24facc099bb102ba6213a678fd6e7c96f50168e6dbe3e936fd681 -P = 7f -C = 33622ec643ff8c3969d98da8a7dc5ea4 +K = 699300b0faab84d5f8e02e50d6724f97634c6612ce310a2e9adf27f6beb47ade +P = 77 +C = 10e7b02d083f9bd6c434244c211d2a41 COUNT = 11 -K = 3976a8cf9b1f678251b1eb5ac4cb229e46253cec59591a512e60f233cca4fb84 -P = 16 -C = bc4bf8179064f0fec1b820b8f1d7a7d3 +K = 2f56ffdff3eac753c7ab9e504808702dff6d3b0ad5aa5a75b2b621363478670a +P = cd +C = 1d4a138be0ae52da72b77947cba442c2 COUNT = 12 -K = 710ebec58ca36aea52f0605714d9fc8bbed0c2e5e704e52e2fc3c449fa1715f3 -P = 17 -C = 72aeffc5f2d261eeb4a75ea95bec9967 +K = 5fa928880ec2f375bfdbc23132694ba6c6b17afdc9e2ef294a81c729af6fd405 +P = 77 +C = 96d125bbc56dd7581db9c530d9717030 COUNT = 13 -K = aae4b9187033181d374e087ff2f686709d8221b73b5f0d02ccd61e6e20d9b7ca -P = 3a -C = 3a4ee082a5772a45fb80096dfc56f420 +K = eca472a484b98370b1ff0319b5677243f126d98912ec26000f9caefb2de2df69 +P = fc +C = c512d736333b3c63d9e5efe8bba9424d COUNT = 14 -K = 76a2c46b26bcf131a6608f68add4be96bf37c458729fcee900b759366162b08f -P = c4 -C = bb1f5b5ed6436aa36e28c989cb40abb7 +K = a7e0e5d0e3afcd490313060e2b4bb8e756bac3ef8d436436829405c328e484b9 +P = 04 +C = 48e635e840cf71e487cbdd843f64ec3d COUNT = 15 -K = 4fdee25fe36a1528d14b9f5e1d5ec5502151244b4db4e44677f95f86f6b12190 -P = ee -C = e6c5961a1838cb0a800f87089ec0d43a +K = f42fde8d32dc01f8898f6c62e9425ea54e07b6e547c5a3ce723bbb778c3b95b3 +P = c1 +C = 3b56e9a34b2acb0f2e71f3dbe74c1a4d COUNT = 16 -K = 335d2f2b472444c8cf82e5c1b3e92f7671f18cd9692011dd81f03faf00c4ba7d -P = e9 -C = 9c157a13a9d757d14e11327f562c674a +K = 1b388c1f6e8ee5478c99bcbd7d10e8df2e6fc2d64080d83728287c2f5596ad1b +P = 8f +C = 5151dd583cc0ae40fbaecc902cc79e1c COUNT = 17 -K = 6d4c2b31bb94e797aeecfd59dd2e47aeb20154bdcbde1e297e35ab8afec1d2de -P = 57 -C = c0a1b32420c71126819d91602cdf654a +K = c5dd73d79fde61b651ebad715f82a558f505cf9d7168839315a2b1ef5264884a +P = e3 +C = e4c2a2186ce04d672c1f7b762fa3fbe4 COUNT = 18 -K = 8d47157d9dac0e9a8a6b446ba340160b7690833f97571c9d9acd6a400cb691cc -P = 51 -C = 2d2601853d143233d3fe907c8d4bfb52 +K = a46a1119a515001abe00e85e4f643cecb5c84fb675613914ef9abd72f5ca7f3b +P = 20 +C = 7a99f9ad2603b592c4d85103701cf10c COUNT = 19 -K = 34a1f5c2ef6b34b042f5df02fbca636a524923826001bfd5bb46ecd06c1b4e30 -P = 07 -C = b1ccfcaf85b0ee73f0b52464dbf4b388 +K = ab64a0378b11a5dfac767178b2dea3cba7ec237b31eccb7a803218d7f2f460a9 +P = e1 +C = 817c69470f3d45114242794c8d134fd1 COUNT = 20 -K = 46ee8439967b3dc694cafb55bc8fbf3bf38ff3e37e084d1bea0d746e7e9bd896 -P = 94 -C = e756e038278393629cc6333a318f2f4c +K = c6cdcf9a91655e4cc151b99c35570feb982f68741ae5c9d88d69c9ebace5c6b3 +P = 52 +C = 22ea9dd8aac5d57988c054176d9da2d7 COUNT = 21 -K = a0f2953c274c3f1d5182fbc57d59d381510cdd16cd5fa2fc778401956811711d -P = 26 -C = f2436069a74024bfa1926776298d6c3f +K = 8318cc965974161d6b2d618b5ef1b8f66b353f348bf4c9e532688ac7b72450bc +P = 18 +C = d5068ed77ebd8d3e1643c21cfeeed477 COUNT = 22 -K = ffbdcb54bc8c7c75042a3a60dcd3d094c0b56503840ba05889488a85a1142885 -P = 60 -C = 7e979e911a8c1cf6d15f27dbca656c05 +K = 6f753a957e1dff2d63a5aba2fb3185056df58fb9d2209c56a88c470f6d46bf13 +P = 0f +C = 2fd2b47f5c4e2a11423df12b208189eb COUNT = 23 -K = 5af29923f2913846913f557ca63ad6b6a282deceb17b0773b7888db3c3543942 -P = 55 -C = c020ac5a93c4611996d6fd1d3351227a +K = 6e2755e05a36d15214805fdfdd3539295a7b23d61c75f3c1bf708dc158146f7b +P = a2 +C = 43bcfc5167f1855323469aa97d2fc08f COUNT = 24 -K = bb9ad58fce41863169cde74e0d07cd06b539accfd33694ac10222575fa1072a4 -P = c8 -C = c62bbd0f653b5ee9f913b9d0fa8b3941 +K = 4d154f31d4230ee02cdd72c04f101210798b7deafe90c5540642e326b576b486 +P = 3b +C = 10e59d5bd47bce0e30778ba56d978326 COUNT = 25 -K = 901fa08f9bed805e66ebc59b0a4965ad198a672c4a7f31a8d9fde19d41838eb3 -P = 21 -C = 8c1d7fc28e1fbd95cc05f6528eb070dc +K = 7bf00a5c3da374db1d90fcba891e24f64d8a85a8a7ee44043a6fd191706d17b2 +P = a7 +C = 38e7ed5cdd3c01358775e5a087c78387 COUNT = 26 -K = cdb3a5cb1626f6246edcdf45fbc45b3385787b4cb956ef92f91781ebcbe16509 -P = 67 -C = 527557f4c1c5049bee0e8ed6271097c2 +K = 630b993b6d9439da6809e376bd7d50907c48fe07d6e1a215d2742f0c6a1d4180 +P = ca +C = 56e03ee94b968fc6c6bf2b8d18408189 COUNT = 27 -K = 45f57c3cae0e5269ce6b1c3571ce71bfa018fa1a78fb4be6acc4846d2a282047 -P = 66 -C = a33557210bdc6845d38332b103e82230 +K = 3e13439bd868217ac3f29d8a84a4fb670892cf59e44a935a28bd90e9e0cfe30c +P = 92 +C = a58aabaa9bb991e83ef22b9441b8b16b COUNT = 28 -K = d45c8452c217c79f92a4625bef9759e459d10ad444a313ed49704c58526bc32c -P = 07 -C = b149437baf1018c9bf93cd82d29fb64a +K = d4bc394a508b1455ac2aa245319482aaaaaac5bd4d357075224783f4887bcfcc +P = a1 +C = 5d45aa559bb2f9ef5240941714d3e077 COUNT = 29 -K = 4e68c00ebcae54c2d27fe95b1c7183b4d62f6b5c00c2e10c702da8b17b49a4f6 -P = 60 -C = 41a5181c59828af7cf1e0312f17954c8 +K = 8387c0ade808405a650d5f6d17b0307c1b7441eb15e332f1cd3c479a0322f9d6 +P = 1a +C = e37dfe36c4817dcb3809b328ef7645e0 COUNT = 30 -K = efd58605d1234b64e79499bbc37f53569df1d9db77f27cde491b7e2a69f226e4 -P = 80 -C = a80bd0c2f831a6e6e6405c2e014621ed +K = a7ecae42d830f10e40e6ab0813d9fcc1f51e9d367e2a9fec0e354b18e4ee48a1 +P = 9b +C = b3a012de2f3212815f2e7fe3bc63c883 COUNT = 31 -K = cedced89be2be5d424f5591d2cff59f18d68c05238305f104e3104fa7c32469c -P = b1 -C = d40fcd0d0434457d75ca625c7deb94de +K = 774e10efa1d6ad80b32709e485a44e46ca0530db62ecb401fe3049a1a96e052a +P = 7b +C = a1c34c6f68124360679e19589c22a1e9 COUNT = 32 -K = 28ed7ab747dd57cf677f7a9d8d1527054124da489e766c5bcd2616315b0fe61a -P = 58 -C = 6f0a8430f30c469ab9a77d2b45ffa3c2 +K = c4b76ff7751525c3ab2a034ae391081496062e94f4578b7e65ec1ece7cb41631 +P = bb +C = 6a8fe9b798616452a802a97aeadbc51a COUNT = 33 -K = f4603aa3705e16ef21370e94e21026643c0d070ee59c891a871dc82086176586 -P = 06 -C = 496098b6d953da0819a69124aa9fe538 +K = daeec14742055490f46cb40a7da53c1529a9ec4422c6b440078efac0580e6544 +P = 8b +C = 28aa86a39d7eabfc8cd864f0f5674352 COUNT = 34 -K = 6f46b7fdaae7cc64720a79c07c736a796b7f58b8531ac47ff3aaa06feaa12f55 -P = ad -C = 0a292ec1f27d38536a01bc8bc7330169 +K = 17047b6c13c30ce7006e914caf1b1c2ea2ec119bb91366cd8dda57b1188d8cce +P = 5a +C = 3bebaaae2ad24f69759494af905ca879 COUNT = 35 -K = 68199b01d127a21ba5a5e0455846feb0b7c2365f83034e95171295e8928a5080 -P = 00 -C = 0c698e881e58abd2e567538f8058be4a +K = ffe3c6a9f2bf88758f2f3d60fde8609091ed9f308ae64bdfc4fe47add2a0cda1 +P = bf +C = 7a5301ede8694edbb4726e7b3a37b752 COUNT = 36 -K = b8a08a279a624a0e7c53a9c2eb5591bc3b8ecf7709475e7e5d18de614962b85f -P = 32 -C = a0e1eeac5ac8f65971406582c05ae86d +K = c86bd2abb91755bdf02d1806e39d036535383a1a23fcbde9b4fded76a12a60fd +P = 1e +C = 61c91bf499a952e1b837ac2ad643293d COUNT = 37 -K = bcf1a9f72e4d98884b950ca10d04d213b40c88d972e39bff9badd8d3eadf8738 -P = b1 -C = 5cb4107773398071ef1c1e1d7675d41c +K = f969dbb254db9af9e56abc80806ca556a306a533d1fc1618003ef1db32f2e0f3 +P = 31 +C = 36f7bf08fb87f236a93cb738c8d744be COUNT = 38 -K = a6c98463c8864378bd38bbed3a15f624144e561da85706f72a8eba3ab386caa9 -P = 2e -C = 1e3cb0f8e35447ac2ea8ecb1ff95c580 +K = e7714a5a380e5f03a7c32163fc059dbda4b77ba46189c8bd4b18c7501462fc62 +P = c6 +C = 46b3c7ca5290e1b46b166647581b31b2 COUNT = 39 -K = 02fa61c841c024dd1c4ce265a04e90954e02040f276c84be9e4eec54394d698e -P = 23 -C = 1b785fb3f6ce41e8e9ff0e3eff04a7fb +K = 66f8dff261ac5dc712d56f71b47ce692f85f4b4ec6c3bcf06778604fa35c6cbc +P = f7 +C = b4e7d3785de8d77bc8ba13012e430c4d COUNT = 40 -K = 5345c6ff4939abe4c8705d803a1333859c2e3052068c16d10e9410748698a551 -P = de -C = c55ade8e2af1a064908301553ba2fb7e +K = d6cdde97ce148320767cbe01ee63e36fa21972eef0f5755b4252d579e4880350 +P = ed +C = 543dbd4fd395aafee148dae9b972256e COUNT = 41 -K = 563e93f448ad42e34f6e6ba24ce77864df7436fd8f1c720699aef7fc585ab1f2 -P = 5c -C = b0a673c2e0a0ad811df08b3c2c86025f +K = 50e955788fc9fb565e485de165a9b915e57120e0842cdeee085a33a636d09599 +P = 0e +C = 8169dcc17752e3d3ba8f22070f655c86 COUNT = 42 -K = 6a99a0b571c7e2b3b361d0f57e9b8c6fe97f29be50273f2b3d678b792909c515 -P = 1b -C = bd9948ff373cf53ca68963ec7b650df8 +K = c4d03036c6064e50b6604469f5d31e9bde30d95edc7e77553c411cde1471dbb7 +P = a0 +C = 8fc2ea723e0d2123b4d0ffa603e2196e COUNT = 43 -K = a698a62be057654c52d283d3df68dbe8bc9e6afbf45138800a2b6c753397a4fd -P = f9 -C = 43c0c78ba660f558bfd1345b8dbc8976 +K = 05fd5a80010d59f30673a049d82223e463213e0fdbfd83f54a06741c7fd72867 +P = df +C = 3f98719ab7d419e52b56010d7efd453d COUNT = 44 -K = 54d2c2b2adf9ac7fa8a5803df2d5dfa54f1198768ed10c01d3c4195c5915c405 -P = 35 -C = b3bcc79d2f03234a99584ec2b344b076 +K = 3710ae87b0062a618f0e6a89ceaafc586d594864c783a44ae6b844c3eb51c5cd +P = ee +C = 1d25174422d9a082e1af776da5b0acea COUNT = 45 -K = 62f9665d612dbf844d566a447817956c3dafdeb3ec29ca912dad11dc1303c3c5 -P = c6 -C = b8e90bd7fa4f3be0aa8190ef28a5ffe8 +K = bc2a2ea6275ac4197b3f005bcceeff282b70a703ee7cdce14160f5affe6ff28b +P = 33 +C = f075a7ae3d95805d06cf027fbc7c56e5 COUNT = 46 -K = 9f13988c2ae6a187439df8f90b230d85a46dc53e4d92080bc351b7cb25efe97b -P = 8d -C = 7d69e161916b7c14ebea3969aa9b9b9a +K = 653c581fb23022b1e541ee499b5d30563e8f29bf5fc9bdcbd0dd51c3d274a93f +P = 1d +C = 9f06358509f5ad85881fe6ad3008395e COUNT = 47 -K = 86124ab099e60a9ca6e8c8ca24ba176bc04f9f5372ec9c734ef7f56e3ac3f2a4 -P = e5 -C = f6319b718d9a28f0caac22f2c185b14a +K = ad720ca471e115bd8473916037f0a273e3657b173099429c1cd50ce1df01ca6e +P = 23 +C = 2d63900330a4ea6f09ce50d1717f11be COUNT = 48 -K = d46ab4360f1ad7326a57a726fd76d306163e95745bbd67c85b729d140e40295d -P = fa -C = 898c18ee78e352968d6f2c6d362ee900 +K = 8712fad320ebed6aa4487203c2bc41b277c1e7763f1ec14b6de5de789cbf8a92 +P = ad +C = f2bf1eaa2f25c5774c8724e09370fae8 COUNT = 49 -K = 41d42324ea11ba3ffdccb68c2b1a884147e6152125eca47b3991b2d78ac8fc70 -P = 25 -C = d59a684d6a36876de120c4583aff20ab +K = 05f2f5b1def19d45ef0d4ae6f485808ac07fe78ae8fb42a19bad1194915db31e +P = 43 +C = aa36a60333798a3c8259d71b08504e83 COUNT = 50 -K = 01e217959cfa96d096e02704f60084d043c249ba826f0a499504df5a3ca0f960 -P = 34 -C = f37e2d040450b1723fcb4141af1af66b +K = e2ce16a76b75e5e1e8de9ce253bcd373add19f552b4928063a41fd2d436dc1ba +P = 9a +C = a177564738dc52f5cf03fbd6601e3f4c COUNT = 51 -K = a531a7cfa11a65c7555fa5b967df6f81e2eea10f6b95ba259f3ef41c98ba502f -P = c5 -C = 5cbb5f823f2be76590924a88eb1385da +K = d071fdf7f05f5861b31cee30e7a5d3588a82442c72c09d80a70f61526fa0f645 +P = 3a +C = a532c080fb5f8ef56e45379297e890a3 COUNT = 52 -K = 8b474e5de233859d833dd8f3e1293bc8963afffb2054340d701e524d81918fc2 -P = be -C = 6ead034e3a6cd935ec1e2f88886eafff +K = 5c0a43da6962f5b09b00a43cfe2bebccd93b5551deb60aca95fba7076e3d3f46 +P = 50 +C = 22e9f91222b3ab774f20ea480c5ad3d6 COUNT = 53 -K = 60616c4fea4297ce1d4d03aa43aa4bce6609420fd44f1c94892cd6347411cbf1 -P = 4d -C = 4a9dcbda7109ab3217e7539d123e36a6 +K = 02e92972b909ddfcb38d464c9ee4db342a0e9918be9566efc89e99857e87da01 +P = c5 +C = 229d60de7e683d96ffefc7619b4e78cf COUNT = 54 -K = 9c2d92a4ecd303ba270b5da1d7859df7b5b0b0d2e001cc97106ce90779733fb4 -P = b1 -C = 0ddf89b5b0efeca6aa1dacb42ca296ef +K = 2ce172d114ff51be7da1b8794cfc49d41009c71ebc4f10cee28db592bd039933 +P = f7 +C = 00d63234a5c208f3449f9762b299800b COUNT = 55 -K = bb52b7410f147c27a6d4b0260ec05dc221a0d73cf18b17c208ac646b69a0a5a4 -P = 0c -C = 36fe4ece78fcc884adcb0c8788969724 +K = a16e11989422a0b4ecea436b4841e6129f911b3f45ccf15b4e5f58d63e84582e +P = 1c +C = d4ada24023688712d0147ceb1877a062 COUNT = 56 -K = b272cd2a2e54520a6fe5dc39d7baf55b110a6a5d96fbe20072e6421b70886a21 -P = 16 -C = e0828eb0c3c14409ddd51b41f8178c12 +K = e5738db69dce683511ce2482528b5a4b33f6b12abdf541d01822f6ab6a1a4f3f +P = af +C = 54919e2d009a8a5f04d27a94e0d8ee73 COUNT = 57 -K = 9947013dcfe26e1b0f68865b83e4f92838aa620b6520bb6ee7f18097589cb875 -P = 69 -C = fb80bd96271732ff5025d1f293d54292 +K = 712cccc7a2762cadd4e6a18300649df33c1e35ce780bcf17c3ccf955d616b4b5 +P = 05 +C = b80ddd5731d353b860fa1bcb54f5d887 COUNT = 58 -K = 3aa076fa8f7266a48c4427bd8ef3a42837113d05a80c302a4ce6f74a630e5dbd -P = 68 -C = 8f8e2c2c43e6c8abfc97855991924182 +K = 4e3dfdcf27fee11f1f563db0971863508d54a53a7c4135b391af05d212f3869d +P = 64 +C = 816dac56e8aab4049c83ac5171eeffe5 COUNT = 59 -K = ee53f44a25db2be496566100da950f82baa6270b6889d90d97e1d43c2b14a4f0 -P = 0e -C = 17bf37e9af596def2da017e9b19b2da5 +K = 67e0275de5ce04641b290241f4a4c3884631a641b0dc554ef30c9f55446d7db0 +P = e5 +C = 8f700439b5a722d8e551a2c01fc406c0 COUNT = 60 -K = 5fcc8106b59077174694c1e285b6f9477379f975415e8f12c599bd61341be78c -P = f9 -C = c81d3ce9f7d4d3abf5d4450744f4e58c +K = 05dd972a02f2ea38a75e244e20faac960567caf8561af152a226f07f36b68822 +P = 3f +C = 3e8e251ec370b3a53f438a7c38074ecd COUNT = 61 -K = 68d387793e0d0d932be013462c0b29a24a5d855e7d7e067cd678f499d1ac91ba -P = ef -C = e22d15e288a3b08963cc2f7d6b1a7127 +K = b663f90f9ccfe295b76f6cab41b1084337b2daa946aeb63a2f53174c197d3f40 +P = fc +C = fec285e0505391da5ca01bd6055c80d9 COUNT = 62 -K = d7d45931139a6d98e1fb3604d45011984ad2aa2abdd67b6269d5b74ad1af78fd -P = 95 -C = 876d5184e250f863e93278a00415ab4e +K = f72ac81f6e987a69be8b88404dd072285e0ffc65c3bc6b786285e20539fc72f4 +P = 6c +C = e98c5a6906a1bcc473121f18e9badd6a COUNT = 63 -K = 587606af9f1f5e427e26c822a399ca7e5ebcc0406c09e015fac8394e82f50ed2 -P = 23 -C = 9269273ac451a485936c0abe60167f6b +K = 2397c5de00ecf23c482961abfb1ff5631a44b866cc01b2fef9b4ef5a101c8820 +P = cf +C = cebb91c55a46943254186a00f2565e7b COUNT = 64 -K = cedf8c63eee48dc866a829ca2c924204e45ffb7ca70a15b2a99083c1228d7840 -P = 17 -C = 393f2cbbbb3a682529519819fedaf1e7 +K = e9ab992a65d023c06b668b0d144a15429f6065288dcfbfa53aea33ce268ffaa1 +P = 35 +C = e7992c7a16cb101ab55f6f2c2ad17ef0 COUNT = 65 -K = bfe7bffdb7e988440dfb77e0ea847f0d513314fc185849a0e73503b92df7533e -P = e5 -C = 007604148082fdce82aafb9782f5f6e4 +K = 0d0e2933d4c7e335ddd478968a6781e3269924a3f573521570bda22088c4d3bc +P = 4a +C = d470f641421dffa793091f0a1a604eb9 COUNT = 66 -K = 4105827983a46112e003c0b15a89018ae70b7b9b8db8e84fbee7fa2f24c2f0b0 -P = e7 -C = 1c185b7e220aa13fa6e476da40f1d770 +K = 6b36261c7f3b97e1cb3d1fe37c7be518532f6d30dba9b88f1f08a18ce3af847e +P = e0 +C = 98d7e129cee5fd3a223043faf0ed5e0a COUNT = 67 -K = 7533a9ec57595c561ee00779233377dfd8e5e0b3611fce3d6cd1a101752bcdfc -P = c2 -C = 168cee389d495b8b0d37afcdf4d342eb +K = 5a086836b76596ce4a850d5c4eb9360e223717f7e679f88fb04c85e447ee4801 +P = ee +C = 4b4d62d947bd65bd099287f9ca614e3e COUNT = 68 -K = 4392935c8c91bfe8938445a52dc07b14f53f60a8964ce5c10881d554e7db0833 -P = a2 -C = eda6e9983dfa206b1ae09ac9506430b0 +K = e1b393f2e2bc5453f0fa4bc6ce7cd13434a6a2477cbcf0df401d74152734edc6 +P = 48 +C = 616f8f21f41dd9c3ff6c9cf7e29122f9 COUNT = 69 -K = 19ca5725ae1f0858139aa9143808652526eadf2827129dadfa3a28492e8216ff -P = 85 -C = 29d4c68e7541944327d5bd2a5a0876a5 +K = 4ed6b69855ab9019583a96c9dbfba053a2944c1e793cecce141b7fc41f85b76e +P = ec +C = b5e14ad744735b30511115d9606d0337 COUNT = 70 -K = 07ba6edb38ee5cdc9ed4ca08411d421ef69db9c24a5ad83db95ef4c6fe4b6586 -P = c2 -C = 8d4d375e5b61f0e1dde7bbcd72d48c85 +K = 3ff5c40568251f56e66859d09c11862382b87a638bec6010e63d16a4ff0cf97c +P = 1b +C = 37695c0da8e7a3c8a2e74a04822ed011 COUNT = 71 -K = 876c578e1035be81df0c7a917580a229d3534ac701d1a275ff7c49674e1be482 -P = 6f -C = fd3464f97ac9c8cfdf28d89e4a3e990c +K = 613e22b01d75ee6951b383bc0a51b6c3139bc297cf87d3e8b841667d78115b4d +P = 3b +C = 9b7294e849377e592a6b8dfca1f8daa0 COUNT = 72 -K = 5ca65078a4c192a05b6fbe60d365e8ec76a40788ec6dd13194e9e71ffd4e0b9b -P = 3a -C = a54e150ecb5ae18812e803da7175c7bb +K = b189e6667dd3fda71684bb76c20d4e4f07cdc95e98ae2c0bbf6a977e98b5e519 +P = a7 +C = 5480d7404abf24daa3b6e688b0744b8e COUNT = 73 -K = d894bdade99c630075162b49737de04f86b54ed40f21699aa5c10f38766d71c1 -P = a7 -C = c7297e53c9e3d255dfe615ed31b66acc +K = 814091f8b545401414614def3a2d3736e807ffe2b72fcff88cd30e2d799d6999 +P = af +C = 1fe545b7135e2ef7f357a1ea91ef0264 COUNT = 74 -K = 2587eaf92def14e3bd538e9cb455337f9f5f33998dc7e1a8ee1dbf2fa9f0582f -P = 27 -C = a47a3593fb3b673d208fd81869849cbb +K = 79f36f0deb0cfd21681762b457aae1dcc537c59d98115570cf9cfadc80ea074b +P = 28 +C = a052f735a9d06c86e1a1eba80c5dfb79 COUNT = 75 -K = 50b91762e23c06b2e3047359c7a8f417af3e7ca0ddaf10dd2181265c37f9fc24 -P = 89 -C = 60724475ddc87c6f660b7d60a954a225 +K = 52adb26a398dfe4a7a5954395d0ca348100b453d215dd66dcd94268f98e436c9 +P = d8 +C = 321e7000d8aedc36d3334295dd915690 COUNT = 76 -K = 383788a9022c441cb4f378644834ecee9992552a33bcbb2142871b98dbbdd274 -P = 56 -C = d2614e8d5c6b2c7da262e771c246dc43 +K = 9dea7c7f00c8e478ab4f729f94221013e1db56bef874ea6c3798c5a209ebc0ff +P = 45 +C = bd41c8177681736d8401266871e3efe1 COUNT = 77 -K = 232ab36ca0aa0c3eb7fa2b39bd3253585e179edcf8574b0e2caaa819c13356fc -P = e0 -C = 8507b0a07b3c93656e9737b9a49e3d75 +K = 0be6db1db91dc5718831a6f2428ebe7a112ee5110f8e9686cb07b302dfd37a11 +P = 1e +C = 557043478463a53e1e1a52cc8fbde230 COUNT = 78 -K = 9f0afaad9bc266a7b9b2f6500bb1187dfd4650dfad24c03689b8a76477be6918 -P = 15 -C = 1ed53f33730c9ae09b82b336b28a943d +K = 8273ab0d4e9fe9704776ab4741a5a01e34466cf8c905c8aa27bb8a3ccba4057d +P = 45 +C = 04ac63e463ebcbd7c8cce7205b195187 COUNT = 79 -K = 3ecf27d6c7e1dedd4206c676ab552f5cdb89f52b03c5d0e34f5e457a4e1703d4 -P = 52 -C = ddb03b8fa413e16ece04abedece9b7a1 +K = f17b3c1de6bdf11f95fb0cc165f54dfcbac5d32cbe271d779bb667889be81c8a +P = 94 +C = 85ad01373ef114e2f0df5b9b227de63f COUNT = 80 -K = 49438227c0686c61266aafb4251f36e9848c6f79f5724e4aebe45b59669231d0 -P = ab -C = e212c7dca04385ef322d6681ef8d7764 +K = 3039b8744f5124f6a3bec5acdf1ef85169229831f8db67bd08e4ee1981001fd9 +P = 94 +C = fe26d53732ddea701837843d04be1f26 COUNT = 81 -K = 2acdf47b5a6d8048e6e8383bb1340accf481fda1451604cbd5e1c19ded83aa02 -P = 3f -C = f1952ecebbef7bea795c87bfe9738f6f +K = e8edba4461d0a08aee5f71db77b4d98507571d98aaafaedf68d5caad463ef6c0 +P = 22 +C = 4f15c5f0a2e26ace440d9f0412ae3197 COUNT = 82 -K = 056999408eb3ee5cd87b7e8e38562ad60f4b701782c82fb3ef1fbaf8998fcc52 -P = f5 -C = dd0abdd2009b5f05821225f0fd49e992 +K = 0047c2fbf1062efd27548f195a73160e6a8efeeac2323e51fedb362e5609c602 +P = 53 +C = 1b8a8ab9bb4e5b2145e6070dbe0a1c43 COUNT = 83 -K = 5217f41979eef7d0c4896ba41b1648d34a70bbb22845e08defafd1710af8a8ba -P = e5 -C = 3d72f7ae2c67f26609cfe1821e158908 +K = 8794560883c190c13d8c8cb8cec62e9cda00ca885df60cec3081790eea87a97c +P = 3c +C = 993b548bf0d1a913a8cbdf2be273e5c6 COUNT = 84 -K = 30db9b4e30f4aaa3a047a610f42c7d950ecfdd5f42e0d3773e8ba1859099390b -P = 34 -C = 7ef9a8556727752c86bee296325b2e4c +K = 1664be31b4a05a1f9c0a39c8f09c67ee66f31e5a6bd4c0bc2da6dcaf92b0d2ff +P = 30 +C = 558fa29852973759c48b858379017139 COUNT = 85 -K = 9afeb8b6847b2ef124d97f21bdb6be8492e60f82952477b4396204e8c6901567 -P = 43 -C = ab2a2d6ead83a9366dd6a8305c7fec4a +K = 31a93e49fa3aa3b5685c19836b3bf9559b1d64feb66e27d5d9d9894051879cef +P = 7e +C = 2de11ebc2015014a1915214fe3a48dc4 COUNT = 86 -K = e6872d9713f7442a9285f3d969486c2f9437de862cef4c08f2dc47adfc6d4669 -P = fb -C = ebf91c5145e81682e7169310f8227b77 +K = c6967b0775863e318879a00e751c992be7232055342a743aa3540d7622237c41 +P = f7 +C = 88643e8a2a979022e033dfe3f919deaa COUNT = 87 -K = 82a96b70a89cd9a510db1225727e842668f4e50a41191febd8656153813d5dbd -P = 64 -C = 434b50b43f67832a24b5c84a684b15aa +K = 444a7cfa5ecd226c385273c05cf87594395fcaaae0378c2806bf44b115874731 +P = 0b +C = 77eb0ab789d314d18f0afdf7739a11ad COUNT = 88 -K = f20a1c0b8052caecc66c4f14dfeaedc8e249e628c9e11a8b7a3efab385d64658 -P = 07 -C = eb270bc60f3fdf97a07adab2708469b2 +K = 0ba982b275eed59f4cb5e70e801bdf669f55c90e60ccbb81defc5fc503eb2e69 +P = 1b +C = 21e57114d424a62cd800c882156318cb COUNT = 89 -K = 42861ff8398fd245fdc7aa766e41df7c64e89b40820351a010a2f617d8e3d77a -P = 85 -C = 115c622fd3028c894f1bab3605cb9975 +K = f3fe6f71178728b2fd4ca99775715f7b04da4aaf0a5972276182b727848d4e49 +P = 4d +C = 4c3065af5101dd98e3c107ab6964ed57 COUNT = 90 -K = 77033519c3641b7bb6b7fec979c5b88c2ecc90c9ab8b5e6e0d5312fc6cee7347 -P = 06 -C = 757d083259bc61fd5de2e59e21e88adb +K = b30501a3aa713af313bdf8aee29feb0718581ba0ded62803410ae3b53d3ccc8e +P = c9 +C = 7446da9e2c6c7d8ee38e7ae773a73220 COUNT = 91 -K = fca655b7ee5563f55ae5cb6d5b5c4a7cab82575763e9594df59b0282f903cace -P = dc -C = 799636c0f24175ab7ddbe5163c5c8173 +K = 41b037c45ad3d3bf2a65c3043e8a1aba6df09a1f8ce8c0d3aa9b6245783e513c +P = d8 +C = 0245fe061aeadb3b5c16f03dbebdb771 COUNT = 92 -K = e8ea86d7afc8615c6af488c01cc01c8511b16430c0886be666889080002a53e9 -P = 67 -C = 073985f2dfb61a9301f33a5b1fb1ec69 +K = 66f96fb85c1f1e982dfeeea7bb343803fe07c930640269841286bf83273a34b9 +P = 88 +C = 9a4be62fdd8f14235a5cfb099a97964a COUNT = 93 -K = d1f83eec06dabcf7bf2e9c1d352d7409bbfe5c38d275dc493c74593b393c1410 -P = 60 -C = 2430aaa51bc9e540e542e2a0ca6ed685 +K = a4516451d402f640db388c5931e270ff49abcd61213e38c1b73678e9c325453b +P = 73 +C = 78544e6db7987d60b752f2c0b83520d5 COUNT = 94 -K = 4efa0704962fb16669be8f9c5c6d20244ef0aa096659f6e950514d27ac930c13 -P = 71 -C = 65b7cbf820793f5f6d5191f113cd218e +K = b95d9c5601f02c24cb1588d72dad367c0ec94031a618bc8f081ca168fb22a44f +P = 43 +C = f7e166281a524d040ec35cd058fe7887 COUNT = 95 -K = bdead8e059b46975ec136f87046fde78b15f124cdc94b5b010f16a6839a79f34 -P = 1d -C = d52d27593e644fecac63889617a4a1b7 +K = 13046305d7905034046553b85a4fda3926218c3fd8d87737d4e9d14678a2fb24 +P = 7c +C = 0d365636dfd73cc66402d12c1c4353e0 COUNT = 96 -K = 74010b3f0173430243db6000842675fa5139fc75895a90dbd30bdf0091e6fa43 -P = 85 -C = 42100ce6e45f317c591d38b208665822 +K = c71e29fe1114b7cd402db034897fd8f76d7707b6a6413065e06edaed995ceb6e +P = bd +C = 99ba367211c3a360c263145c9e35eea5 COUNT = 97 -K = 628b85b5240f2f07786140c37c1a156f98c539e84d0293437d325f0c16b485eb -P = c1 -C = 870527963de2c150513ed2f2ba3dd16c +K = 7f2253565650b830a643ae1a936656ca31025aae79f02c7474f03c1e3d7b4644 +P = d2 +C = cd19b475ac92a4b4aa62cf6df319ceeb COUNT = 98 -K = ca8e3cd7f617275476cea81829c00c1d942e2d362a1431615b6b6d35332e3f7f -P = 04 -C = 18b29bedff92fc032cce48dfff941689 +K = daf7f57eddad3b65834af38655d172e26e796d5f71d1d3029b6951a511d0ac4d +P = f8 +C = a3ff07cad81cde5e563ea179acd91488 COUNT = 99 -K = 0179c98b1440df81349ccc8ca8d9af87d7e8229415d1be7ad44227253ea0fd47 -P = 4b -C = b211db0807de1e0acb46b404212bb1ea +K = 8f2b2a36fc700129597956d9a7b063217c63d4097a8c599de5e7e663bbcc4972 +P = 4d +C = 6442ec435fceb6ada662426c0c59e994 -[PLAINTEXT LENGTH = 72] +[PLAINTEXT LENGTH = 64] COUNT = 0 -K = 5292017a0733c9f902c18636f7c473452069c00d899f3b37c4680a520e514128 -P = f8722f5641d1688f00 -C = a972ecf85ae5387b045b44ddac71c62021c2e74f2836c624 +K = 1ff5af94d746a06769a33e678974b5fbacfb153d3b2f3eaf7e6a2ada1fc47458 +P = 399e957a63c0e782 +C = 274d93ed43c7192aee1a695b22204ef1 COUNT = 1 -K = 73cdc763a5b11fc098f63c74d281daae8c1ebcec64a16e68ff2557bcf08658e9 -P = bc731df2b01a6cefab -C = 47ea10cee348c73527c4ac5e5f2922863ba50858a9dc19d7 +K = 79dc6e7e87214d94d4ac9059f71f9e28bc4c53ec264e884ff2da83a7fcdf554b +P = 33b3cc405bd9cbc1 +C = a7035ebd6c7632cf4115770a08851c5c COUNT = 2 -K = a88edcc77d5a4491f97fc80565d0bea5e5797f7140498c7b3c5c26f8abb583c4 -P = edc0f560f24f136018 -C = e5b3fdbd592d924e6fadf2cfa219131de69631c908a61b33 +K = 9aca9628ad22a5e2c2b429c6e4d4becc1000f6eb99bc65e39945f3318324902a +P = a4b590c714ceacea +C = 7eec40838b3c9f73f8cabf8897b014db COUNT = 3 -K = dbb0f5c7cf66afe8b41a66a6cd2ac62a5d0fc5c4b486610910342a50050a59eb -P = 42669f554a7a67a1f5 -C = 79b8681b26230a27ca8edc2a607f33cfc3ed3465b74ee02b +K = 60ab3b916d12537c6363a243ece50b55f0ad5b05b199a4bcc4e2f41c22813365 +P = 3e3a2e33fd190eff +C = fd245994d0e978e8c59519055ae95df7 COUNT = 4 -K = 3567de66367d021caf98e6a8bd78552bad2557c64ff261a2a4bbceaa655168b5 -P = bc808d535861b86770 -C = fdd7d9222febd742f7af19a8ea224b8aed762facde206e65 +K = 01477348749112e5d7017f9ce78239a49a61802ed5e3a6b794d2b4b7f49218e7 +P = 44168d0cdbd82db2 +C = c0f523349d95dcb38476c3b8bc45682e COUNT = 5 -K = eec5e4ef00e6fec2903ca630b176e101ae0addeae91578e25ffb28e8b601b52d -P = 02d02bc007be99d9d8 -C = 8504525050eff4ad9928bf4cb8aaa7c85d2619740ac66ece +K = f25a5acf698a83219afb8a18bc4045e2570e4c3c9ebc24449e016857b449e56c +P = ea9733952788c8d2 +C = 68224c20debb3388508eec48e131860b COUNT = 6 -K = 0b7918f2650ff1b3c4270acafb028c80c6651aa77ecc37d9d4151f108b8f824a -P = a0e44fc1ece556e115 -C = d994d34f467aa2a1da759e6810e707ff376395e544e72d0b +K = a3383dd307ce0aebd046bb42f90f91f6607ed0d1e5a6b436cbc3f70495b6dca6 +P = 7e5b3eaa4fafe2dc +C = c43b65e334a4b6f4ca28132a160fe9de COUNT = 7 -K = 2059308e6ad2146c0fc930b08da6a55cfb1c3607deec1aa33cb2e6ffe0378082 -P = aebb83b858beadc30c -C = 56208442763326871670d69aba2ad28bcc1400030a50daa0 +K = edba5ead95452c1902d87b6afdbd28986b1973a79cc2c7bf2502c8f0c42af3e4 +P = 31e9318bb9972fb2 +C = 675e8da1886ac9fefbdfe2abfaaa0c01 COUNT = 8 -K = 17b63f2e81bf2b9a24b31f77aa976ce4b95bf9b3d4de217a68560f69791447b2 -P = 1ca4cf3d5f4b207b7d -C = 79081ab7ce3f4cc51fcb6d582a6b1cf41c576182e49585fe +K = 669e71f7f91429cabc483424389803770bd9009ccbbb9c9480143a9db69cf492 +P = fa95f2caf6e9bc20 +C = b338894bfbfe05e3a2fd45839d7bd749 COUNT = 9 -K = 5a13c065f164ec66ea61d7e15439b7a8fb8868527f63cce641636ecfd663b90a -P = 48bb0995aadaef507e -C = 983efa63303b215bc39da1a59d6b1c2ba09381ab7d0063f9 +K = 27337f248e07709c7ee4270bb240388fdd982ce2404971a13e5b814525f3c240 +P = ec3b6e458edffb62 +C = e032c5289d59da8f0db984576850a844 COUNT = 10 -K = 4ca30162f53ae208f05df6b2b848c99d435ff293ca945e1fa975815d345233ab -P = 7a6359717fefc0e54f -C = 7097d73783c8d5e835fe3e40326bd123ab7082e064b52e3c +K = b7ec88890d17eba47608cfba0d47b16b62d3468d5496645d2ed376d768694bf9 +P = 1c64704145b87fd2 +C = d0feba24793edafc5a51a3eb1f5f2621 COUNT = 11 -K = 137ca70ca31a94a99d1db8d05cd60ca70ce8507c77937a7fd9d4b3f7420c1535 -P = a21f0c2c974588e11a -C = 302c1ba29c8b278f95da53dd7c7ae6442a325bc0f8f9f470 +K = 942a7b34e0d771aa9eccb45bf7ca939d1af50de08c3708d88bec09d383ed5bb7 +P = 9a8387ce33609cfa +C = d60ed42c70070b7d8052bb336fd4a0c8 COUNT = 12 -K = ed4d7650cb01001e03bf55c402af1b537d6ced69d97562817c4d58af9e35c279 -P = a19fd3e0a76eb8da04 -C = d635173e785e91074859d09151c53f7c3a42e5f90d5e8b56 +K = 8e3cccfbbbfa33defcec3b41aeee9b77369ee2b9a23f3846ca54b322aa3131d0 +P = d0c1cb00c5034de9 +C = 6af724f94034732264d31b748ba83428 COUNT = 13 -K = 6887e7f52a7eb367a1d1fa366098338ead29e006373634a54788055d64e018d8 -P = c6c48895a77aa73e69 -C = de5373ebc113b8fc81b6d7d4373c855d05f1952422aec110 +K = 169e4ac87d6c2c33812f5f1bcb952638c3a0fabbc6ff7701ef662395f36f3f70 +P = 073ae435b83bca18 +C = d3ba590323f89a76e2f243d336028ffa COUNT = 14 -K = 32f0f2cba5bc60381ba668c5b19891854fb0dab695f8bae0b05d0f9477b63869 -P = 4d9fd7d30abe497ea9 -C = ce8b1334e29c7256804726894acf8cc4795cf9c6c4624c8a +K = eb2b722d42ec3a2b4cbe4c3eea92e5f29231e352854114d9071d99534fc30be4 +P = 9320d97b25972beb +C = 4e1da549e975b27e4e840b775c3d1b32 COUNT = 15 -K = 1a677433f658b84f74e49386619416cf62c055db1c22a13495fb2a9f25b9c123 -P = 967adfc38718827e3b -C = e1bd4d6c4f39067ff496e0f8496a45e28320be92955868d4 +K = f38337cd7953e89426f9230b2ac433eaba3c57c0a635981886efcc7149e29e58 +P = e627194565843e35 +C = a00014de868f4efc2b0d31e2bbfa6ebc COUNT = 16 -K = 5aeb1dc53fe07265aa8e143e2fa1d79e518a43f68c2e4b77533f1ca1535c77fd -P = ae1344e9b09ac9941b -C = 57a58e0384c05108eae2999eb3d0ca20fc343cd4e7d29556 +K = 4b20a88fcbb4d3de8af87625cf707fbcf4cfb7ad1148a5a7cec549249d5c342a +P = cc8cbbdfd1de52e6 +C = a7bd78f71ed0c8313ea68636c855af2b COUNT = 17 -K = d27aa69f1088c73a009d40a2235fb1fb448c201c45c61fe72b72be03e9db64c5 -P = e601919f73f7c64b0d -C = b380400ea97c361c6b1f2de71113510861ebc56cbf773822 +K = b1248d9bd1bd8a91c7cd27f8ffc9b1c2b1cec8688959eeb9864d8654abff766c +P = e0d050463260bbde +C = f15c1021a0520293cdb64493e309cf03 COUNT = 18 -K = 587d1ae040d0355ee8d2b74086f28899262bd2000c92e7efa7920b738a94ae7f -P = eb6bd273f571cb81aa -C = 958904ff08a8803e770cf838e1d12cfa9765bd2c70c7a195 +K = 11432804970666c4acebb0a9dca6e5dc62080c29909f98c2801e8a62edd6c914 +P = c4d37dfa1eb1a907 +C = fc51793a8ec8706adc3b9d4a0f8b7ff9 COUNT = 19 -K = 99942965d30342ec852a11315a9941368436525142d437d8727e16cb0612c0fd -P = f32e39379b623f0d2d -C = e54be5c23b702acb18528564fc8a69bffc17ee1edd373c69 +K = 99151419841313ac75b4617a70afa154635342830a0678f5cebf146fe3d3cd4f +P = 01e04dcbb7974b08 +C = 9075c9a4fadd01895c2ef3e941d5ec4c COUNT = 20 -K = 39835324c97c40edd6da342b85b13c994b6d42637bb9a440894be9a34c4b5683 -P = c9b1ce240e2c46ac47 -C = 9d5e41a8369526ed286e8b18af08171d0b54bb0ea9ef528d +K = 2d7aff08d95718405c04fcdc33332f17b1837a38109cf50d6285d5238d390dde +P = 643ea7a263ddc5a8 +C = 89f748161dfcedc9dd62fa4567b5e125 COUNT = 21 -K = 8f7ec1665931fb47116a3d15fa6856b2dc6fe12aea409b4334f2636989e59ae5 -P = a6d29d0f11e32e2c94 -C = 851d3fc7f0b23e9de63c4b87671eb52556891b2d652bc25f +K = a1e4b47b42c588079bcfbeb1cd1ea6ca8abe72189e906afdb798c983825ee439 +P = c91f8699fc8156d4 +C = d1725b00e4c804fa20988d37976dfa89 COUNT = 22 -K = ed54fa2dfea0d762aa1636165aef0af598892580d9aaa3d379d4e3187d32977e -P = 1e8ab8c274b26facf1 -C = 69cbd4fd3ed345490293356b0b529ffc60f7c18ff254b9f3 +K = 8b0cc9c875da8661e495a06f19d7fe8247b1db5b9e69dd78b4c2b3c00ea5487c +P = 40a51889cd60e037 +C = 2ac60eb69ceea1fa007a1f6ae2830227 COUNT = 23 -K = 172441c214054a0b23d5a895349a8c36f7867c7c1f1e292f130e6dab331db2c5 -P = f446dfe1734fa2ed4f -C = 1d10fea8ebcebfc63b15be408f97de8bb54d1e2b6a3f9f2f +K = 011e7d1e7e0931fb04bc8c66ec5638cf7ec204519897b4980d192e3326bcacdb +P = 5ec3e017a34cfc98 +C = 1a57150c8c71041a10e2d3a2ef48bfc0 COUNT = 24 -K = 0f688183003b1076a0e1a8d2dd9d06af91e8181fca117fc95018650a09d236f0 -P = 4d86b0e0272975e229 -C = d10b761ee659422dc693094ee4a0530f98dc8162cd36ea18 +K = 19f1d8256f6eabeeed0a80ea75d6a8c141db9d9be48817495a1e79a4baaa85c9 +P = aa036d0775321969 +C = eade894aa377d549ef526fdb38994842 COUNT = 25 -K = ef88af132acef8d756ea562a13f3b36eb6467a180ebe85092923bc50f4183bff -P = 84993a9c4d9ee70956 -C = a702207ffebfa472a2501732361bf7e9e7925bb9be449987 +K = e67efd9056576296ae8f5d1a4eabca29e8233fe6c837f70c4a923fe07fab6ddc +P = 8fde0f83be495e83 +C = 76eb95107d76df80cd978f9955ab0d5e COUNT = 26 -K = 4ea55b0fb4f728be8e315c5769512221b8c789e4d50a91adc3b34cef89a2697e -P = 27959e5de9da327ba3 -C = bd4bf84e295f52eb5e5204ccf18ed72bc2e0efac33dd9f7d +K = d4c75c9c30f565f8def2d4cd45cde2b5df78b3034ad18024693d470602bf4961 +P = fd9dccf79f11cccb +C = f0b2ef70cb8edc6fd4e5ff7ebd825aac COUNT = 27 -K = 6241616fb86440548ee653b02a95ef5a87ae88f49e437c82bac0d29b849c0912 -P = ce25de2a40ce60ef83 -C = 11708e223a5483edfd5667c9c923839da789505803a3d801 +K = 7d78482bbbf6814d21dbf428fc6442f83cdcc4a7b50d16a703ec6bc434a9f330 +P = e3718c9e9966bb96 +C = 071043c5afbd2e5d5c6cf4b603528582 COUNT = 28 -K = 5f7e1dc2b9b80104b7fe5b832c5ac0e101e0a0676dae1c4587a2e4cf44f0e95e -P = 92924362871e1dbe26 -C = 36e512f7a12d7253cd4210e25f2442ea1b18544dd008e280 +K = 20e7d189dbce932e7ca51514c3ac7a56aea072bc3a75e54c4dc3864b233411ec +P = 327caf37a9594d87 +C = ffdc299fdf913caf360da07a04544733 COUNT = 29 -K = 074886abf9543616592765d7529e1f74cf03dbad5ddce297f2accfbdb47a9ac7 -P = d182452ecbc0266501 -C = df49b7fc011225608d87f1d02f5440629ed9f402c7205ee3 +K = 621e9b005ab9948e732d47699d75da68b3706332aca5777ec8026e4cbde71601 +P = fc0c8da6700ce54b +C = c8c10777fed0fd34c866863aad013e7c COUNT = 30 -K = b43fd9ae5c8e9b1f5d5fe2aa41f26586a9acc1eec3cfab4d0e188e10b1fb4a76 -P = 2de2406b6416ae794a -C = d4b9e0edfd4075f004e4ccde68716ce0871bc6978029b6ca +K = e5b9a06caa6c5cdbc686b1038d29c01e0f7294196bfc15504d7936a04bb19cf3 +P = f416178c1de8fa1b +C = 8d8e0a0c0385dc17638896bd022e1290 COUNT = 31 -K = c07633b19a64272a99421313cede080b6f0c85a8e7f851911fa0de741004a06a -P = 1d138b51d8ed7d04b8 -C = dc1d8c4017afd12a64d81ad0f6385c111d07b6106beb66aa +K = 6973b607831311a757dd5013cb558270e63ad95c2fa7dfe00b323ebe5815c965 +P = 74126ac5bf31e4ed +C = 9a6d825c07bb0f56d11539f54b7b960e COUNT = 32 -K = 2a13bacdc97f0903288c24efcb6ce4f78ed28e78a3def89e32c99f3e31f4f585 -P = 916002ea55b391b5d7 -C = ca8a23c31355bd9f9fa936f11ebcd7e4e9ce284abc24733d +K = f1acdce8b7ad1e9ebc47f9f84e1f76baeb3728d95d481126765153043114c566 +P = 2885525cc6077d81 +C = 4bb2263f26e5e226476f7079ba491773 COUNT = 33 -K = 38649c5108406a6d8d77a7640eff86982879e022611374dfaeafef86ffcb7ae9 -P = 45946da88ff2d5517c -C = a658bcbfb71d38dd8a01c50b19ff796971f2a8df29ed7354 +K = e7cf0c61b3e133135d6296dd34a1e6c6e35123560aaa1726424a94abf17e6d47 +P = c9dc36b9335285ac +C = 949a9737ee110dbd16ae1cef40d2a880 COUNT = 34 -K = 3d0846e90328c3ba6bdd7dcad0753799cf82108d7c3689484ee441c6ab567d9a -P = 315fe38dc44ddbc7a7 -C = 43613fa5bed2c9719c52cf4350bdecec090cfa9fec8ac946 +K = 4570dbb6f66357484026f03a7f2e2273593b105d7be83280a4da6591d7e587f1 +P = a305256554d450f9 +C = 3469d5386522c10de18c76016e311e44 COUNT = 35 -K = a0e184e55a00fcbf454c81d54aa3ec9ec14eda7f56c4bf5473bfe6a747b58de1 -P = 4f7155d60e75b7acf5 -C = 582078b45b0546c6a82fbdf96dbe32e331906ac57d40da8a +K = 5b09b049821262499b5283a8d7562cac7a43f2a6b3dc077eeb6495dcedaab331 +P = d66b7f769e582c61 +C = a66d8153eb3e8617e4e6090741b30439 COUNT = 36 -K = fb32c7456ca79a038931530a9f2ba90d3b3cd24161cc68a1899f1a52d0518790 -P = 6f4d0e8e6c4c000412 -C = ea4981f856d5dfaaf6e26d3c0e89d1828a227592ad5f5e04 +K = 60431d2089f10ef59b96ffe6ceafb628cb971d3e0e1444069b707a3d5b622a0c +P = d3171af3a2f1cc11 +C = 9463a965efce2e98b2c2428f8ecef1b9 COUNT = 37 -K = fc8bdddc21dee83342e583809134bc880003bf37ca33e5a13a987ef8d6b4be0e -P = 09bc5e7fe9ddfda497 -C = 376735ec67d8e280fb830a212b5d333499a536eee555d6d3 +K = 04a9b7d04a767829821e1977ff2c7b30dbc78c2072016d2e0220e0277b2e2d38 +P = 77d3597f4017cfb4 +C = 94cfd2f5d32623127be3e5a51688daa3 COUNT = 38 -K = d7bcd817913689c691f8ee528a6af6c6e0968777d42c09382f758cd96a5be8c0 -P = 1be1d07c62a5f8e8fa -C = d0a2c445edc2d75c12756ea904ca1345ffb5f17002dac654 +K = 5f2f68b55b379e651c76a3b3821472a9cd16327c1eabc655925adb9bf37ce266 +P = c2c79a9e19a08b04 +C = b0174e2ff235571ac18ba9a52b67a663 COUNT = 39 -K = 7b2fec00eac92ad3143ffc65dff8d838288ef0077c6894c3564061e8c5caca22 -P = 81956fca2015cc135a -C = 2fb808fdfef972337f51f29820fad8f626561d4a9c651906 +K = 92effde68b972664aac5fe29ff182631ca80331331c1678bf68009ea0103fa48 +P = cc127974138b76bf +C = 088f85e050da6e505f4e0d511edfae25 COUNT = 40 -K = 57447b993032059c42c4dba29738ab98e6c7fa30c4d411f2b4d3469f544afc77 -P = c4bac9624c856fc34a -C = c1088a4794733f437756bb08238e14940e42f98409530a0c +K = c99fa96102113cd2857718ed2a79c0ddc8680a7be489527e411911d23910e288 +P = adfc1e8c1b488802 +C = dde0f11714ffa3acfc32f778fe25e5a2 COUNT = 41 -K = 1bf4ad59229caa819a15a0a13a08ce5cefdba6711c7a76227083b12670f92047 -P = 2f93228c54b54328df -C = eaa7e2e15358f709fb7dc2628e201107c1b7bfb3e16ee622 +K = f0cf1da161b2f6ccf83998d88ed6d0ea520b706c45144a79bfdca83709a5f3b5 +P = c27b4e7535f1c6a6 +C = 1df57d2f9ba3af7188503ff751ff67bf COUNT = 42 -K = 4fa3a8d748980054a0a780d8127d785144a950f4bdd456d2c36e22cd68883fa3 -P = e3c8bf86b26bebecdd -C = c87ed89e977371bb13a6087aaf171e314553261579bf5f5e +K = 3d685f4f49b08ed3fd7fbd5cf1e4b8ea5ada0f6ee49bacd2355469808aeb721d +P = 07713127b12eefdc +C = 92a651ca5f5af793eb486454f5a7ce87 COUNT = 43 -K = aa888f7abda7f2c153161d91671c0dde0dc0c90a538f0a9acccb2c91ef9287ad -P = 27275479be4bed1f56 -C = 2fc5e0bbbb31f54459ec1bb28493cb29a2f8633a305cd9d1 +K = 456db6d444a8e637f7d920c79d362769cf05b7cdb5ff16f9c7237cc89554fe3f +P = 6ff86fb81310d911 +C = fdc5cdc092b2ca4c620589edfc4c8ccc COUNT = 44 -K = bdabf4df61df690f804c2d483c14503bb657e5b50608ea1208a2a164c9a119ae -P = 672441f06fa9d369eb -C = 63c79d58f8393d5e3a10f6aa0fde529f97f1bb209f3a0400 +K = 607b625ffa8cde1ea708d4760ceedad06b4c64646b05878f1c8cabf03e002919 +P = 6837e1e72e8cc4b4 +C = 63f19be37745b282d1b72411c100a812 COUNT = 45 -K = efc710e7b3d718e9eb5f5798b785f36213d659c2e4358786ee4b965fd681f624 -P = 13e33662479cb4749a -C = f45ab64bcdd1554e9282e3bea5e84ab60c80f7e3efbd60d6 +K = 861b9303e822b449b04ed6505571f04b7a22be20cb8c46372d24287441bda5ac +P = 1417dea9a3de889f +C = 2fd8b03160a5793a69d595a0535b76cf COUNT = 46 -K = 5d03037e4bb022d5874f2069480b1507f16007285e16e4ecac9cb762e89dc879 -P = fccaa606becc133b1e -C = 0a2f9dc8328a71b1d016fbfd2b7a60c4f27acd6be39cfeab +K = 4a15ff55e6d7721a718f8192248acba3694a49b99630a3f5d36b52c05b316a85 +P = ff8866ee2b291cef +C = 915cb6b86e368d6e1381170ce2a3df76 COUNT = 47 -K = 4c0ac9c09d4b4067fa981b000bee3faa0291fc40af628195a721589f56478e7c -P = 6b3d7e5441c4c323c6 -C = b45a544d50a9664aca0e1748e26f2dc6b14be24df8ba19bc +K = fec0d6271828f3c57b443c8259202024c32be055ecd80a7a84a056f8e0a750e0 +P = 7a27bad74f04d502 +C = 1a7110428986dc93b62e1ac3ac912ea6 COUNT = 48 -K = 37532a4f4effa0610e5ce02ac356b517bf815233680b45f9bf3f2ff32ffde958 -P = 631d454cdbff81ddcb -C = 1d9e4c736ece45a838871da96988f3fd20c25d01e07e6b8f +K = 814a97abf56ca8bf01324a08bcc72dd185aed1b305bdc96369771ec569fe506f +P = 7ce4a4649635462f +C = 47c741972d8ca3b023ca2326c1c9012f COUNT = 49 -K = 2a15c3364a8cb73aae94baf3cb77a4e09562916bc143ab53f57071c4ed15c3d3 -P = d99e8104a882316e8d -C = dbecee323746df047c1a9f9696ffb4a114fbae14376bf861 +K = 3d5f6936b85d2add7a076de9adfc7c2ce2219b6f930e46dc06c7ff01a1314ac9 +P = 56c16aad4b829aef +C = ebd8c96c137c7c965dcdc6f76e93c759 COUNT = 50 -K = 575a2b706abd5ace07edc22f93f0ba81cd518fdb9297645cd4044006516b9864 -P = 25491b25ac2023c98e -C = 6800eeb4807b18b0f31bebe0449e367841ca5d6af24ffb78 +K = 685f9c912131d3f2e14aa3a0321edc07950d8e8dd641b5483288bc7e75b2213f +P = ff1fb16f89163811 +C = 9eca32fb18509c2e92ecd4153ba2edb0 COUNT = 51 -K = 146769c21967fc4e86ae11d36ef1110c9ee9af9f3b78b297343838dd7c5e9df2 -P = f36f2c7c1c18e2214e -C = c81f835cbe3426d4880b54a726e6c74e12ca8e7966e4af67 +K = 5af0eaf9a8ac7c78116e46c015384963963db891adf9b3b3a29b6471a14d5046 +P = 1bfb13f2e29371ae +C = e30cf93e211ce14be217086f18ece518 COUNT = 52 -K = 966aac9a21211ecbf80739c0c4acd014705031b4328d5ba96f22eb09a118c29f -P = 04a08e01321e140107 -C = 7f70c19360fd6746f085dc3539ed83e2e8ea8a1decef31f8 +K = 79df338adf0030d52745d5dbdc197112bfb88b5798ed439160e45abb52009789 +P = a6d885868e4b7183 +C = 5b415de637fc4d5b5c6f0e2592b605f1 COUNT = 53 -K = 730db8e7b5fe5b8fa586b5c509173d60c2e9099384f89020aae7334a8613e458 -P = c0abe83164abc987d1 -C = 3b296d746794baf88b2712ae099bc368dd530b17bb648184 +K = 9fddcb22b7a21605eb7702a32dd29aef0fcfcd3150bc49ecf9aeb8c232c18a6d +P = ec9f9d402f5c79d0 +C = 581ccdf0b88b1d44692284a6d54d31a6 COUNT = 54 -K = 80b5df618a5f02e4ba51b3e8db69ed8ab3185f8bb97a11059e1bb46727baef4b -P = 31e9220bfaee91df06 -C = 4c358a70902fdbff27a9ce187f5218f946da1fae455c94dd +K = ca2bfa19cbbe5694f382799bec992d836569aa3dd7ff9e3113457839157e1efc +P = 14fe866a4b4c5d04 +C = 18efcd52e60a3b90c42e41e6a4261a12 COUNT = 55 -K = eedccbd72cd02d16ea6328ec22d9f0b607ba1b446ac280b84165676bed370042 -P = 45566c67436a09fc62 -C = 83513beed1c8d262c8122141c5c5a4e9b16c83b53ec46eac +K = f6cb4616292a382b83bc1620ce26c0d037a3d93222f94ea3051fb8ec228d1d1d +P = 4afff4d258cd902d +C = bc3c2c50387368db7375e182e447b934 COUNT = 56 -K = 8d5be43a47090ff441c87af59b10bf20dfa23087c1528269cef3989764af81ff -P = 46aa3e027fcbd08445 -C = 39865b2400716a9879ff33a6dd8e482cadab676195c06507 +K = 96937f02567cceaf15e1c52b26f61291383b9b09e6622094eeaf37fe9d51eb1f +P = 582a96c982cd018f +C = ab1f1aabc45f44b479b6f9c0911d6dea COUNT = 57 -K = 02316cdbc045bb051ad811daa18d22d561c122ad20bf1a42ddbd2f7bf5e22354 -P = d9fec7e5bf459b0b82 -C = 7145f4c98f62a79ee4ba21c6f8519e4557655463d0a05738 +K = 1bba5b7b9f51bdb3d0b9fa449eba474fbe6bc54c72938cbdf134812f16ad5ef5 +P = 5633c67856868458 +C = 499f5caa027f6c02dd4b22ff8c55cd86 COUNT = 58 -K = 9adc386608ec411c4551032b62f3e5b147e3bb666086e2dce0a92d3e26d3d5d8 -P = 28c3a7d78b05ae2944 -C = fd59dd5a9b4792e8a0faa62147cbedd221619241901f656d +K = 54ffa811233bd76f4f4824606f2c6e4f312f7796b64a1cb77fad39f6b550777b +P = daaf2ac804c8e2a9 +C = 3249c11b989db06149d148c22d135dcf COUNT = 59 -K = ba701b2a62b8ff93c7abdd552609f2eb5a7e783f4f5e6baf0265cf71443d0a6e -P = 5d1297ffd97f303c6c -C = 2adc77291771caf4e7d89e04b2293cb0765bf5b0301dffd1 +K = 329a78675153adccc0c04e45b8f8964a66dc864027756d6590b17e839f719dab +P = 9c75ffcb430a0128 +C = 3b0eb445940a3cf662a6aeb511345be7 COUNT = 60 -K = b5cf4ecffe220cf89a522c2965f32cf6a0ae78d8845c43650b2681c163a8c56f -P = 71d9fa9c9124303f9e -C = 576311ee998fb949cabb08ec985095224300b613687754d7 +K = bdfc26529331cfafb824f99f322503730c02c076b460f5160b71cbee4bae757e +P = 2213c111efeb647d +C = 769c00ae6f57b05d9d5c4b4049ad9e61 COUNT = 61 -K = 2d162b45e9bbbd830f1c82331b9b7c55438145f36b262c54f1f0aa8dde38f84f -P = 8216014ecabf211cbc -C = ad5719f86ecf74cdc5948a3d35b908c679ee0b2cb6d1d8b3 +K = 4a6a319e4730ea2dde95afb31d8ecfc0e2dca206e842e057e81f93a9e0faa597 +P = 065e656086671770 +C = dcf06fa1a1038017160b389e03439ea3 COUNT = 62 -K = b2f24b559fbe4fd1252340cd804b3a76941c61a14822f4d1fca3f37e0c35839b -P = 3c57d09d34e143e136 -C = 7fd9a7d719122fc6d81b7fb1898dabf60cf1423b3effd72f +K = 3db6e77c3c19b3f616273448f059d263558463fbe992158b2632733ee1e4987d +P = d1efc613457699f5 +C = 180cc8c36fd7398acb856fee359a27ba COUNT = 63 -K = 32b2ae47f152f3654a7107f30ca34a8236160f2d1273bfe6852fcb7881ddc45a -P = 3e4727ec73851edc73 -C = 8f8a9ef41b5099247021b63caebb80e3be69ef1f83abf5d4 +K = 9c7330c7a64ac3b6338ac7023abe79af4bae66e69350b03a4f30ff00dde041c1 +P = 01a41643bceeaf41 +C = 74e10b2fb72ff0a3fbfbdc012a5defd7 COUNT = 64 -K = cbb545619b3fd1c206db9a610d5d9cec0ff75b646eb0a85e129e64dad92708aa -P = 47085bfc5ce73bdd70 -C = c4555d01be5c10c335e126854f8264ebd9db1512209ada4c +K = 4ed13013a9ca9ed88bbfe8f0b8d5be12d56321a0336686f4df3d82c537c6184a +P = 1eac542abc98fad8 +C = 626d5cafb4d94e6f96f5bac3f42a5072 COUNT = 65 -K = 73e37dd9f18e9c23abd765439acbeb2d57dcdcd234eddaf59bf7b018a6050234 -P = 645db5be38212ed89a -C = 1a31d546b516b5926893d642b83f4223b0d689daae4dc13c +K = 77347a0032811b2596c4ec2696771d1ec666a39f2f98868c6684611006d9c31c +P = d1dcf683c3cd2359 +C = adfe5ca1b00c41e17ede98f36b3af32c COUNT = 66 -K = 5f7f0ba4093cdbe37dd8db71d6ababbaa59448b74a61f1f9144d8151d34b23af -P = bc231528829f4389e0 -C = 37d769a60b52f4456612c77dfe28ba8315fae147e5b91e71 +K = 92f94b5b7d8625690467b3f89b2139bcc0cd99afccb9f7cd510f12da61c8c38c +P = 66b53d3908622bcf +C = bc172ef1781b9fa2b54d66b6e188998e COUNT = 67 -K = 6ac09d9abc5294b8f1f419b5d2cafe8c1a34445b19f876522e6530654d1273e5 -P = 7c36f719ac8177752d -C = 9d25fe96d0b4a24df5d9e242b072dd08cab86d2212efabd6 +K = 6788c02e43dd15b4585729469ea0e523ce213d12b0d99c8ed7882c92892550f4 +P = 4eb04c9a66beacf6 +C = e3e2ee6c8660bbf11a2de79b43ed2d0b COUNT = 68 -K = e69777260db4e396fd2aca503d4d779c512595042e8134b6388354b811fbade1 -P = 9033900d2f5bd054ab -C = 1db0e50648a12f2d8dc13f9393de471d704e5e81e4a7039e +K = 9e942acfd527f4e24547ab2265597a78992fd2bfc8947fc7f0742309d9c691b8 +P = b52b7754acf2c58e +C = 881adb8b3e352b8f3a3b602cc909cc19 COUNT = 69 -K = 91fdfa20cffddc20992a3796e25ab094c7709cd023d7803260d562a2bb927ee9 -P = 24d738a4b89d26318e -C = dc75bd9e5fa09a5ef8c1de60763aea252cf06c2c566f4f7b +K = 6a462697735f18d9b70de5469ea4fc6cefbd85ef784592bd6ade1be6fcc2d6bb +P = 8ff737641c4c7263 +C = a24caecee82f74ac8fb4636471db2ee0 COUNT = 70 -K = 6bdce6a62a7a22b67b9c12f24369e7bcd7f9a161cb825bf2d774d78804e60afa -P = 2920976e5fbec7a231 -C = 77fcffb3a90ebc458d420857c5f2de08a109051514e5e0ee +K = a0310502f46097255c028cc47e18ea29c392b65122470e2e36248a7304ce55f2 +P = 8408e8e564e1ec27 +C = b5921596d8507e0de62cda72635c2b58 COUNT = 71 -K = 6702ba3f6526f89d81ac8253a0ba550824cdfc80d225fbc783c3769a65246af6 -P = 1a17f2d63315367775 -C = e6b7d1b25e381f3dfdc4777c1571b1517462a55976a0f8a2 +K = 854e8862223cf28aa06a32c0d3f4c476795afcd7308922f1154c66de5356154f +P = 573859b6a3f3e155 +C = 44b0d646e0815182a68afdf70739a3f4 COUNT = 72 -K = 78894c2406b061c80a9a8febd65e4b8559a1e7b21582127b326c570a1405b899 -P = 27e520bea51cbca5ca -C = 25c19e28396a942cbd61eb6867fa1907647023133c6ce8e5 +K = 62bc8d3d753943e8cde23218b57a7cff7414723782a9834d5a30ad8745b3688f +P = 14526c454927895e +C = f88c161ab8220c3fe1c8c7d22ef7cb59 COUNT = 73 -K = 14b1259be0c51ba94f57656f7d575371678872740c1c7e23b07391fe5b9125cf -P = 41bd9939868b65cac2 -C = f4bd844eb7038c4b2566f0a8813002f079a820f2c6341bda +K = 66b2b64ab2fd9c705ebc623dfc0048d6a5ccd61039051d1fa0221bbf09f6eb6c +P = bf3fcb3c7dc30c15 +C = 810ae4a10cd19e18cd3f18be0c8d23de COUNT = 74 -K = 11210c9fa209e91a2d00a8f9a6fc333588a9933be866236be85a696003bdeba4 -P = b1dd5ed81e07804e56 -C = d91e0a9dc4232deb10350ffd3e16268a30a9016b32f0fc20 +K = 3b7c25797ce5cd3f672f171c6a74d2f14336cc1e3a1f23dc7b94135a167dd182 +P = 0c515231dc78d842 +C = 1635632f5cf1e91b693d59fd8918c27c COUNT = 75 -K = 870e129b835185848bfa6ed0ca9f07a567662eba8d1822221d5967044bc36a4c -P = 5715179ec63128725c -C = 6099a15b34cf4494e8f09f4cec7daaab8f2f5072aa22ae6d +K = dca6fc90ea49af8ccf0a024395f5e44852647ce449f1b20829f34680f9908fee +P = d4e8b4b9b8b5ca65 +C = a4f37b94aca9df503ef7f4c3728a6213 COUNT = 76 -K = 045f933c135a51ae79ca7d62b33a7c751c652eae28bf3efa3c6bc04eae98c668 -P = 763c9a4b94bf155662 -C = 7af4774cdf6a302f46b6a76cecdf522c84ae6b2f9411471f +K = 83a203a7e7bb4216b7845ad32c06fafccfdc7f1ee97fcdccd87aa1ef479b676c +P = 23ba3ced0b4b8ec3 +C = 82d906fa6abcd661d1ab20c84532f74c COUNT = 77 -K = f50d8c4a3f67986515a4e83050b9879586b7358e696d2eac6dcc50bc86950170 -P = a02715b571bffbcb78 -C = 7d9f5121f7e5fc9698ba3343a587f6cd2583b5707e7ae10a +K = fd9c22d692b159b0206f215d9708445cf4dbd38da2832451bd58cd368ccf96e4 +P = cf0c26dc6cc63f98 +C = 8b1094bf70b567b900a65bea65ed0903 COUNT = 78 -K = c0fddc930ba75fc1962fab07022ffae158e9a02b9dcaf7a41510250f46c93fee -P = 86016e23a8ffbdf015 -C = d9257eff4bc69e2d342a7c1335ffb16a82f7609080cb0866 +K = 2f5dd6c7c2c4430192b60ba07d43657ab9c15b4ad764c02e30311ea730ef5e4f +P = ab11c450b87cf7f5 +C = 1bf19961931b1fb732822b15a233b21d COUNT = 79 -K = b2bca5cf748c54c6733c5a62d487f927f80a6e3efec39ae9b8ca02e64ff501d8 -P = 0fdd6c0885290e5888 -C = 49de6c0d1e5a4e34390dbca38cb920b8291323ff29fc1144 +K = 60ceffde883dffc5ffbdff2beed26605d9ef0318ae17eed70056aecdecec9138 +P = 1417841e090d6d26 +C = 4ef5b22af055a7769e8f16a6ee28d2b9 COUNT = 80 -K = e816417c76f9afbca41b8af01944ad78fc5e6ba1418aa71cee87b55130058967 -P = bf13a82fec1b562ce6 -C = bc1800bbc71f2033d47597a525dbf18619c447a3d177499a +K = 45b074cb20b8b9227101d99347bd521b80b8a6fd882530fc108123c5bc41c90f +P = 90a623730630cf61 +C = e627e7d5b59fde4a120f586bbb8a3cb3 COUNT = 81 -K = 837b64ca98f2676fd205cfffd7d7939f29bdbd4ab0d53c482323f95544d7408c -P = 7bad60763afb71463f -C = d164a0ef428b4c7703cddb9e8ca234cf23033e74e8e06c1d +K = 3d96b17963254f204d79612d35fee12e45695c9184183aa9f5b887fb6b6c3b00 +P = bfb7213a19991083 +C = ae0e9136defb680dbdb5d8326dadf9cf COUNT = 82 -K = a5f60b23991c52d1e04b3f8dcbfbb2509142af1fbbd998331eb5b5a8810d1450 -P = d80d1bf619b72d3f66 -C = 91207e922f4f793e1b3f5ba99c3a35cfb26c9d724e0734eb +K = 971f28ac96b504626aa83d97bdc311792e6d25d1bfad14c71a1a775917fdef8a +P = fb2eda636532bce1 +C = fe80ad55f77721ecd6bdf671109f6884 COUNT = 83 -K = 8d0729f17d7f0af620b7d110924e29aa34c1a99cb6af068505a2b9549b681001 -P = 723a3db1518f39ae23 -C = b1c12039767a48f52b3061710858ad072fd99277440c4b79 +K = 60199872058cc67f302c853f1f923aeabe7d67236142f80a07cdc137c84feb6c +P = 5f4a2421ddeb3202 +C = 6406804f9493d83b694ffcc8dd3aec4c COUNT = 84 -K = 91bc539a880deb2714830d9c7588e9a14582c9eec9e65f6ab1764d9203008129 -P = 612c8f13393e120a41 -C = 1d45c62ab0b9c76bf0c70784b99ec02b5df3c898163cc98d +K = 3393ed222f7eb4c73a160f4556edbb60f54ff016868f5398fe4bfd3dcecaa44e +P = b26d1b9fe2c5968e +C = 9ec4cbdf6e0f559116cdf5480d0a81ca COUNT = 85 -K = d00c1f195e8aabdb196110c5c7619d61bd0c1860e771504fc65eb35bd579334e -P = cefeb3e691516e130a -C = 6ea937a12363d383f1347c8e838b099151922ee67c457d46 +K = 15f001f1deedd27e4dccb4d370d4cef1bf87785e4b12aa785b3c8378a8e050c5 +P = fbba1d3480438fbe +C = b6ef5455a959aa5987a6b76a42074fe4 COUNT = 86 -K = d017ebb1c6b210ea8e31723d6756c7f2f70e6978d3cd409a85af3ffe290a3d13 -P = 1211a4577e41974e02 -C = 1a6f4a6aedc118f66d9ff88abbd45fb8d7c6043c0b3046fa +K = 5b0c6390aab1d2d86d103356a19a68f54416be59afa2e828d8c04789d3540187 +P = bddc41476038437d +C = c39abdd65720f7bb4000b317fd9df02b COUNT = 87 -K = e7421f82fab6686e8e2059aace6eec05ffdf6c4d2c9be2e75e014c87fd630da5 -P = 233105bc468a79e275 -C = 04da0a945267c0a3f91bd3df080abdfb9ed1ddb7eb524e26 +K = c8a13e3925757179eed5c03fb8bc53fd17997aba09201feab4dc443051cabca1 +P = d555f4050fc166e0 +C = 09e86b04bb74c09565ea96531b4ccfdf COUNT = 88 -K = d215d387e5373e3288264e1aa248012dfa7cf8afb3561b33dcdbd6c80d38d24e -P = e378acd25b90a8d6a3 -C = 2521edb54032e2a6868848941edf5a19bbfc9aa9f7e447e4 +K = da9e30106ea6baa40614ac5e8e256d6dfea3252b0d0cd8f196aba7499ddf9c65 +P = 5b47ac017cc53df2 +C = 873e1102492693bfb7aa5cff7de6f206 COUNT = 89 -K = ad9c717cb46df4afe7ab621b164b11e400777ad1540700337b1be3c4dfdc6104 -P = 9b8847d8c267b64796 -C = 4d485b6b128ad973c3d9518979c5030c39418dd8abc2dfd2 +K = 4702b3c753f236f0a3c6c0c67b8608facb17ac958f7a2a1786f5e8b263e487b2 +P = 67b5d503aa6b4793 +C = 424a030eab73061a2f3c2f5d8b099333 COUNT = 90 -K = 14176e4342499a83493b79a1df6410438c140306c9e9e309b4e9626625efcddf -P = 96c4a05f0fd0523d71 -C = afd592f2848dfdc629005257e94377221a851b47f2a7784f +K = 888fbb76a1503d1c2c53891fc0658a917a6123e1de6e9e5197bb40183b48a858 +P = 6a638ede7d865469 +C = 0e080357b59173d2e048a13ffa3ada0c COUNT = 91 -K = 27b11c1d225c84f715c19f3ff1c526599eaff3dbbeee90d2249adac68695dbd9 -P = a927e0bee55225d51f -C = ac805340e517397d8ea37cffe76ab259adee1c5cf77c00f7 +K = 6fa6dd35182791438db4460182a36d73887c20fa8c5d2c7a71000b109826761c +P = bca7325450db526b +C = 717808370277f13b6c2393c29da2d449 COUNT = 92 -K = 62604f53ab08eb80041a4279d8e59addc4b2068feb4055891ee8bc62255cb38b -P = a4dfa1fb4ac13e4db7 -C = f72b867c4680cb9cffe4fc69b367bacbf8a6899e3fe7983b +K = a1c73961cac30b4c880dacecf7c206c564ff235d29f39705e095bebd8f1f50a3 +P = 38b7816a11c6b82f +C = 3fd7cd04df174aa380148925b8b9e1a0 COUNT = 93 -K = 1765a8edbbe3087aa49c83a7cd1f5977fb5a98de04c1d7c48b26b6bcddf952d3 -P = dc946dfcc5aaafdc99 -C = 3dc295bb371d96678b56791f4ccb65ccab29bc40bc3d5f8b +K = 33cb4ecc46323b1ed67eb1414b552e77464fe7af8fbf769e1a3402176167c07a +P = 55683f274380f03b +C = c5e557a17c70c58f07796ab7bef97f9d COUNT = 94 -K = 6a179f70f68de17f7c76de3b5380d22ddd6acdb2d4bd89ad1f24c8133546492d -P = 8ddc8f37380fe81d40 -C = e37246676a2f59bea3f6a98959712703326f79615a2e1dc9 +K = 8827cd07bbd6fd7c7802db3bd4ae1b5158fe884801da9ca534c7034fe33ff0ae +P = 2113f38b1c9b8d27 +C = 66e4daa5459024b7569ca7a7cd4487c2 COUNT = 95 -K = 3ef765f2bf49562e8f76a2c9c04f046e23b8844cfd1e3b2257bd6e5403dc989e -P = 4a7d119a7b309a9628 -C = 6406a365b03e1b84d99c5afb430754f59714cb0bb4d7316b +K = 97949da13024bf40076f12d7448d5098ea773dbcd49508574462b8a4cb5a2ce0 +P = 5e31383463db1af4 +C = e2c738403f68a17ac060b43c31879e19 COUNT = 96 -K = b9f4eed4944f59e1aef83d20018963a7c8cfe0f27467b96c4ab58795d307c666 -P = 9312243a9255a2f327 -C = 2293d8d5664530cad578c44c5da5320a163d750f3ff5c25e +K = eb35990cf9c7d119eeb9d93e9bb6f99a6b67d339bc63a8b56599d632c80ee71a +P = 024f789f21d6d59c +C = 7e83be50a09bc56ac26122d3507f07be COUNT = 97 -K = 43d87c18ef4a370362fcb87bff27214625c1c437a80e73c7855761ed0b731b7a -P = 2e61980eb99fe23283 -C = 4caaf267e515eb734123fd0acaa0f9b18670b72c224cefa3 +K = 111b6181b27adb402eb16ab94c892a92496bcc94fa9f097a1e821e14f426d9bf +P = 84dbcd1874254038 +C = 9b441b95924554deb1432cd9e460217d COUNT = 98 -K = 1ddf908ae6c2acb1318947eeb4a30bcee1ebc115b37c0c1c1741933073c6c547 -P = 4eeedcdb81c7124c75 -C = 59a6bca9dc69ad7b9a6fd211a000ae5b81973e72e9b89f83 +K = 7d0d740916faa11a4fa7b8dd954d3727cb8bf8edf56fb0813f9c8778736d1171 +P = e2ec69ae82562e81 +C = 4d9720c4021a66f0b0cb8056966ffc91 COUNT = 99 -K = d8cfb0e50f6f679b5b82e2116a3f6e1d6a1d8337efccf75a562507685e3659b0 -P = f8bfe07fc6c1d55978 -C = 5431ab8e8652a35467e4f4ba76d76a8ffcfda3d6160af6bc +K = 415b4b8288af838edf45df99b35f6661ce94423815b8cc7387f6752756d9f765 +P = ef65387c83eca32a +C = 03b829b823baa16ad518a8f3df635b8f -[PLAINTEXT LENGTH = 32] +[PLAINTEXT LENGTH = 72] COUNT = 0 -K = cc8a1fad3f498e743b947b995f7e9332b2263f20701373d6fda0a682dd4b2aa3 -P = 9e968983 -C = 70642099195ca1c4184b1b6b3dcb940f +K = 39d6a6b0ba6d5472c66213722eb2e20de9801f075b65a830fabc028bf48b9fe1 +P = a7c0e2e3eb1b2ab717 +C = 52585ad40a1aeefd4142823e0c24b4fb59706fd367841594 COUNT = 1 -K = ff7bd50924d913d326fd147943c76a33b4ffd53cfeb933b51b849bb5ad2e95de -P = 90ffae0a -C = 9d57765f03a20c4614f8c612571cb929 +K = c3f51bb7350bd05d4bdc12ee407a316494cc537ebea287110566c4d2744173cb +P = 295b9f693152edc35b +C = 8f39dab528d841f3703cf8986b800a36eae6ce53960fed4e COUNT = 2 -K = d11b7db9a0c753e4b89da17e87fdd9fbc12d4f2be5a879494cd29cf4dfc9531a -P = 3fb56897 -C = 28ef7e6e06c76f1c2968cd5bdda540f9 +K = 9ff8c0408e119385834d64c94999a0e33959ca1ae34b15c4fc1629e7875e3127 +P = 57b3c8f5f5450aa3eb +C = b1f0a955257f13e40ab1552c8a0855b533e5c0a24abcd52a COUNT = 3 -K = 4d1d16be41d695e2b9f9d7f8063c9e59445a37617ea0055fcefab1e4b22d2dab -P = 324e2bbf -C = 068fc4c7ca47dcc40ef2817c6732eddb +K = bc7e0d650d80b50f6de18666ca4018641bcdfbcee4dd10257d70ed0ca925cd4d +P = 69afdf944d029fe0b0 +C = a5a425956d5f81d348ec5c46c66ccbd5e7bc3ebc978d8ef7 COUNT = 4 -K = 572df9cfb9ad7be633a6aa0e265a801f45d09c3e4771e14b0af92d828f24a217 -P = 3c0ce9b6 -C = eb1d2c002771d017b4535607e87d9c37 +K = 5cebbe4f6d3ec7f997312fcc8737c00a63cc38971bac12a65323e2d3b4c899bb +P = 892be0a74a026d2c06 +C = 3044703b263a60c308f823b1ffd61846e94e099a8652059c COUNT = 5 -K = 11afb422c7950745ea886fe002cba79f97f2e0e5526fc1a7b8343cc255e9aafb -P = 73354dc4 -C = 3a11f096cdf2189fe30c9e99f843c5cb +K = e1b221d66aee493eab8c5a1f4e7baf9f0f86c30ae285f0e3cbb07e661dd57bcb +P = 6349a568124b569c34 +C = a5273813672fe7afbfc4ff7fa85600aac60a649cdda64d81 COUNT = 6 -K = a8c139646582dd5c1ab9686638bc0158824502cc4c30090eb6e4b2cc50f73166 -P = a3aebb7c -C = 09fdf900229cc82a9be6e1ccd29012c3 +K = 3655305db6a7b47a3e7da96d51490ebfbfc473a3cf05404b876a2963b1743537 +P = f60a59443676a67b2d +C = b566f9cd77c2bfc6122b1a098f9f6511bddeb478a3c1f092 COUNT = 7 -K = ac7e890c1e972b8f96d2e82c591d66c2a572fab9808f3b640ff9d8ea85de07b0 -P = 51301b6f -C = 45b61e4ff63a7e08bebbb29378322787 +K = 39d7ea8daef987d7d7d1b5d6e683d4865ec712c0ac53d70e7cc108143b737db8 +P = 6b06cee990c9407081 +C = 022a8584d5fbe1536a7297117cea81feac9cbc08dc566a79 COUNT = 8 -K = 7ac05e5d96e0b7e5e73b2c9cc915d41978d5220c21ab7c7fb6a705067c7bed68 -P = 1081a035 -C = ccf9e72de0f25680050e10e490230dcc +K = 8cd58cc1a4100b5f58df8d119ae80e9f9793d102449e29b5e13c3901b774907c +P = 3b4905a6240a30aa33 +C = d0025c3514e6f61d662c8e7e16c1fa4c759731f58eb35ebc COUNT = 9 -K = 3164d3346af5dc98a32fc3fd557727fa2f5bf2c71a7557b8164aca4f2fc68e57 -P = 37efad61 -C = f4b0efee8f9d2f7c8405ee401f820dab +K = 8231bd72fa78f0383b78c85c2fb07682e0fdca7795f7e9904bb70cd8ccca2919 +P = 6efe6134c47e570513 +C = ee577b6767fb776a64ce499219f738212a011179c6e1463e COUNT = 10 -K = a88e5a7f96fec7b9eee3671c8bfe33ac77aae60d3175c80452d75966d8a85e5b -P = 0133996c -C = 9cb4f2763eb0933f2129205329abde57 +K = 4af0ee67d9bb6d97cca322bcfcacb9c43d4e4e9eb373105a5e9660915d1e64e8 +P = 712a5d222f5a740709 +C = 5eb23f592c6159840c69a98a4ea713dae6d34fd144fc1c1a COUNT = 11 -K = 19cad4522c3f657b287ffd5da452b87a2a4b90370825659736c7470d872cf993 -P = ee8a10e4 -C = 1d5cfbc9f79c2e20f199e6530c4c47a2 +K = d995c6583037c2ac9be440d732903d41b1afc98304cac0437a1899af8ef305fb +P = 1a65c972b850ef1057 +C = 8454c0773538c2e6162c5e0871303b720a1fcb9e4f567f7f COUNT = 12 -K = 3ef8ff1a0451a57c09b33f0d1013808f8a0ff009477324b5846db77d2bac8c5b -P = 4d263e94 -C = f317810eca113685d82882a5c24d3124 +K = 4b8035825617b8b213b5fd610fdd5d42fed9113636a217648feefbd8a0023732 +P = dd9db1a22c8d0b7564 +C = e5a2149fefdafa7fdfed7b5aa2821eabbd00de607b2e2957 COUNT = 13 -K = cc5c5d092f0275a6eaba0da80a4455c7230edebb113273276a522306e88bfb7d -P = a95de824 -C = af724b38620365baa1c2468185c10f3a +K = 425daa61d9d9d3890f6067483d396acf7e8ecdd83849a396448fd79d150c8c40 +P = dd48a5023f04c5d8df +C = 8fda162239ee0187713122629ab15c3af4e969e2fb71ad0d COUNT = 14 -K = 1ae9c9510faa84cb303998009b2e14239d09fb9c7fef9bdeee751b98d017dde6 -P = 0c564ef3 -C = f489f00845635be1321642ee04c2eb19 +K = 046b168b2726396031060cd744b993264e07e000d34499b6a5bc940581fab7c3 +P = 66cae1571c9bc7bd6b +C = 944084a119005e4dfb6bff44db778d129951637b33f926ce COUNT = 15 -K = d8f48517dec196a0ad588d5f5189db57fd77df0f2e5cb7cc8d33af1a65af94dd -P = 75f58053 -C = a3ca371f338ce02943e8aea7c3adbf49 +K = f7e95522446a8d9cc69601e451dc7ca76d9e2e9b94b7b91906da5baa1027e131 +P = af56a74ba5b518fced +C = 89b4cb4fffc0808baa5e520ea9282c65110c75e9f382c3f1 COUNT = 16 -K = 500afaa9c1ac1498fb6a25d49b1215d43960d9ea3f0e17d54952b1afcf681c62 -P = d1759eec -C = 67dd897478ea1da5e2234feefab52713 +K = 2687afd673ca41087e208f28bd907c432631ffb860e56a96d194f49b3793abbb +P = 4c8cd3a12913981e61 +C = 96fa55932a70a48e5d38b09520e218ebb0bf617352c6037f COUNT = 17 -K = 25197c03c0009e1c9ee3ef761dd97d5404b19aa1aa45cbebdee7c1043e0b6708 -P = 8dbc6542 -C = 34dcd1841b014ea716ce0ae598c71ce9 +K = ceb15439a83a82031a6f150f9a177eca39de620349a93a8a909b62ae3f00fc97 +P = 37a20050b67ad9e77a +C = 0e6c364896fc7a15ddf124fb389bfc13722ac948f1ea88b3 COUNT = 18 -K = 0d1ed928a50f9b54ec6adc8a95b60fc7032ca14c084adf2c8620b5a69749072a -P = 359c8369 -C = 1829630a9a2fd4a0f6a5ca2f8280e729 +K = 299062209ef9307ca0fdc6a3f53f2851ad21d0b326e5b40da2a5cd1a901e9b6a +P = a78287d704d62fbcd5 +C = ca078dd36b305660733fa6bf6367aa29acc3026ee86fe8d9 COUNT = 19 -K = 57faa0e3bedfa578e20f4e66360dfbe70f91e7e5d13b750370db5bdc5c2fb3fd -P = ebe37ff2 -C = 9fc66d2860f2d9eac134e8eb4e446fe2 +K = d02907ced7175045afc9d8834b349efdf4e125b4569da2a267660d36e99fd336 +P = 498c13a48ae0afc056 +C = acd03d2845e3e3d5f1bfa02a381eeb9c979186c16ea96e28 COUNT = 20 -K = 9b0abbeee76160472f3bb9d64638ae4509f22756b2312fbf1e892b20abb5695c -P = 3db09c46 -C = 1feae08417f9be7dad368b7b9904930f +K = c1909bcd79046e4fba886de22b6db6293b10fbfa3c30d815a25fc6ce708f469f +P = aefaacc1f3b6a9133d +C = ea0b92204d64b1ff311497480878c6d84c03f03676e0a4c3 COUNT = 21 -K = 79271a60497c9a7695b0eafba82227edb066541ec92036b555b0ba5e1b1d7138 -P = 1619aa54 -C = 24ce75d9c26ccd8409487c99c0b452c7 +K = a79314dc08b52ca3a7c8ef7a5359946d052729a2b0dd4bb256e4fa9050c29cc7 +P = 72330e149b988a8370 +C = fc8dab0d47c98ed1d94317fd02a2c7c8b5b7aa2aeac6ff6a COUNT = 22 -K = 605bf240d3a86f489203dc2e2af3aabe9736990dfecf625b89f745a9bb533025 -P = af125c0e -C = 444349d44f51a055c9920571c70ab12b +K = ec01c19807324c7a9071a4c9a9acbec88ebf0661c1034d4ce515c177195696ab +P = 90feaab4fb54ca109d +C = 2e3c0b81794d9dc3759b7230fd8c4057a0aaa8f4a229ca49 COUNT = 23 -K = 78a8cf7c1f18a8fe89132baf79ff55fbe44392e562324e3312404585ff71949c -P = 5729da89 -C = 238526246479649fb678b36f52d53ab1 +K = 35d16a68f89301b41aa084d8a12102a795bac8e7446b7cba300b03fccbfaa3ab +P = 2cb8663660f90cc6ad +C = fa03572141f56d416a73440585c26992e5b303519d7e12f6 COUNT = 24 -K = 278d4198c11010fbbbee1561e6b80bfe44f91846b47ad5cfa1b795aecba0033d -P = d984fb41 -C = 490aea0d0b3ba9e5302cd97691aeab9b +K = 2c2061dd8d4689b508da8769561df6dcfefecbf5800b23f5e8959b4f917d890e +P = 10d54629053738be94 +C = 69df87bcc466c31dd69ab5e8f129f8beceeaf5d9c921817b COUNT = 25 -K = bfebacfe15f72f64cdd363732f341d898ef211b4700686ecb98c71914146dd0f -P = 4f4e5387 -C = 742ed34f4171633ecf5dce4fa56f332e +K = 48b9bdb298080fc040d17f9f0861e76dd1c8152af5be9e491df5195086725f36 +P = a37e42fdc90de857a1 +C = 3405fe24349b84e906efa11a73e510b02480ba5c8695b0ae COUNT = 26 -K = 69c4814ccb87b28f2102f17d9e5dbed21202e91d9149e41d9c7b2f8b61c1412b -P = 1016fac1 -C = 1d7948cfd528b3a4d6678f0ce24b67f4 +K = 3236416b54f98af1c662bc8d0aa15da5572812f7caaeb1dd598209190c3feb99 +P = 8e03c4161c9add2305 +C = b21539356dd930cfcbdb452da3e94c45fe6a002c92e4c0cc COUNT = 27 -K = 0933270e0850f32369ec20906ce65112cdca402105ed3cb69f1e357614a6b559 -P = d4d0ea17 -C = 228410dacbaa3d8f57b934cc4f9fcb81 +K = c1b304080f75b34c49fd932ee0c8b0aa7cd781d9a04b071367519c97a2bb39ac +P = 937c3f1bba99259d19 +C = 4aa20aee5f5f75f91b87b383a3123f6e229dae2ae367beab COUNT = 28 -K = 75a324822d478143fa3e919105fb6cb07d855eb409196c2a597dfff70fce8144 -P = ae5ebef2 -C = e88ea04d4fec831487544fc5361eda4d +K = 21f1f59143a64397ef850e27a63dfd3382cf8b751bb05859706a3a5a174c70cd +P = e94e4a7164941af1a6 +C = 64fd248a2a12fb6b05e1771c53a238c49efd604ab77d675f COUNT = 29 -K = c887b28f74be13f4f616fe8f2ca75f06cc6526b0b8155441320a2e37604cef2b -P = 2e5de613 -C = f49c35a1536cb4bab2321989554e6e59 +K = fd021a21c330c341fad78ba5d8ec621654275703ec5196182b5317d91d8444e6 +P = fe402858c805ec5572 +C = c609906b01f04ecaff4864861cdab690c0efce2584269733 COUNT = 30 -K = ffaa4592738ca558334c42de3a295e460a276d9f7d0b4f45d93adf85d7e5872e -P = b663a840 -C = 396694d3f50b6983f5207118abf51e10 +K = df979b390196d7333eceb6a249cc8413f1f6ae0b0d12c6b08497bd05b34b72a4 +P = 79bf98eab26e156577 +C = 5214e7948fe7d852269d2e9045a0194f37844940a4461c92 COUNT = 31 -K = 4d4daf01133603d17be002dc8c2f02a35c09f1bf1416b0e7113de023d6028628 -P = 7e3d977d -C = ffeeaf8a417ddc76c2fe9c7e48a1fd80 +K = 0a9996ee6f622f2f34aa344cfc2e79fab7397086c56f2c4ba54b5395e5142555 +P = 802e610b064ff7e5c9 +C = b3a7643b16a051f5f3289d7f829c8a3345b8d9f1b71616d4 COUNT = 32 -K = 08df3c1455d28ad82ed38205c6e1b1d7ad585abbc46f852dda887037fe9a96d5 -P = 263d7475 -C = 39c7fad6b78eae64e540c539c4055ff3 +K = e4510fe403c78260b633d600eaf58da059d964c102fe6e4599e8037ae7395116 +P = afac66b98d28b1ee8f +C = c59c952c98788e48a45a72d06017b0aa3b15290f0b505620 COUNT = 33 -K = 80ccdc7d6b907c02b7f42b77500102317c779096aa82b8a6781737c2900edd97 -P = 6afc4c18 -C = e9d180fa1f1ad069be9bfdc4e4e7a482 +K = c15142cd1e02e3f2f08f55bbdade41c629a7d8f7079087a02cc78ff3a1a43b32 +P = 3aea6bf4314a94fea6 +C = 949c41afba341a56660e27fc91d3a161c58c699ed45d6e66 COUNT = 34 -K = 3d46f9f6a72cfc33e2ac779ec43ea7c767c020056522ea45c070aa9161d12cae -P = 65d40fab -C = df9b0ec6603f5e67cfe5b989788b50e1 +K = ed88155d1bc32a8a420dddba0694a6e73f404d397b4bd982afeab686d01a2daf +P = 545e698c80880a6a84 +C = 9c6af122894b1dd29569993d2a5ceb8f0ff9873f5726853c COUNT = 35 -K = ac8b4f9fbcb9b0d8d619d006ca7b7e61fd3e8b04e0c527b0cbfdce4b4a36ad0e -P = 85b0af6b -C = ccc29be6e72f60db2e63b5f4700268f0 +K = 7b782c15eb8f2d07280714814bba3574b9c8f18a8b943857ef0bf26a7df80bdc +P = 28778a1741466a56fb +C = 68885c17119f78fbc27773a57fcd517410fef7494758a173 COUNT = 36 -K = 765418aa163b0a2217623ba426984fac530fec900798f152b3656818789a5155 -P = ad91ec8e -C = f20d70d96cbe3c7902d1c0e30f00e72f +K = 07ebc26ed35cbc06fb7664c9130c3db8f54db2e397699a5d6916dd283b18f467 +P = ca3d18429a9096fc2c +C = 1f7ab06968cdca3c1ac5f308107ee7eb1c96f64913b3ab1c COUNT = 37 -K = b13ffdf4699e96eb697d0a990e3ecbc43e30ff6219cad492d9a5a7f7fc49ecf2 -P = 62467d5d -C = f3c7efd73477c209465357b6e1f49e71 +K = dec31025aad2b99b718567e4a18c94eed808b8fed04bb0361a781164f85343ce +P = e594dd0b282b0876b3 +C = a448bbef4f19cbd7c32f2097a50566fa5d29b89fbdb88732 COUNT = 38 -K = 1b3f238b3d89b4721c4c97b6af0eeddbcbc2cdb1633a95d39cc7d257e0cac8cb -P = 824eccc7 -C = 8295e073c04f3ccf8cbfde21f53f5717 +K = 50df9685d7159eae89966a31e6a45d1cee677eaab76b1fe786b955d865bcaade +P = 55f9094c6165d7d792 +C = f967ff5471cd4330fa009e987833d5863f851266a4dcd895 COUNT = 39 -K = f2e08156d3c68a3c4a38422332998fb3b19f6af1aee43c06ec6e149776687ce3 -P = 03aa70eb -C = c3d6f51e7446ac6473c5b08fa4dc1c24 +K = bdd49f970a31661f2481e9cfd2e1a056ff052ceadc76886df4e91f0ef51d7b80 +P = 1d6f7ab5bd6e84537c +C = 9ecf20d8535b7ab43a4bdcbe3c40c39ebe16c9f7582f4cee COUNT = 40 -K = 7131fa4f165b85be2131febc7405f43c1b6d7af4c7b037dd54538460d7a8fa3b -P = c27326a8 -C = 7a82f6d4dc35ec246ee926abced269a7 +K = 23a2f66421e09feb4763b7c3fb623fa9b52208a298eb4df5b165477bbac1cda1 +P = 0151a0317601a9fe18 +C = 2c62c5c883fcfa90e2bc9ce4b35dcc55ec2b06f39bf31d26 COUNT = 41 -K = e160c82794a4ef058b280df8357a60c06af117b1fd45477f446ebc9cc6f96e5e -P = 7c7e4ad1 -C = a4491587e430e331d0232193f37cc85c +K = 39b9c8991c8f8e66178d71f45a3e3102af1dcdeef924725418e57d5d1bfec176 +P = 54111ab3d20c9ed52f +C = 8927995014025c81982fd5ea3658974068b069cbd63f166e COUNT = 42 -K = ce36e89ee634805d61c1464a070db29672d55e086e7fa9715962567ce4a683d5 -P = fdc92bd4 -C = 872d9a3ca74764407b088e3f1633133b +K = 22a358f1cf21d2e8846660051bf2a3aea7d1c3b2969c07c3537383c1f9ff06e9 +P = be20ec366ba2a86a3e +C = 059f4bf1a911814f1e7bc1e40765fc2656592da18c2f64d7 COUNT = 43 -K = fded32826ddab69e5260459ad027e24ccfbc30387b9e30ea4f7107d5c3e3ea7b -P = 0bb11edb -C = 4728267586008bf78a17a5c7e8dacf53 +K = 465566961bbcd899415eba6b0a49b7aeb554c70ef11c113847a78e174b3bc581 +P = bc82a5e6c8b3011624 +C = a38d7177a03689b5c9dd842ccf6e76a4007f8c3c83126ba3 COUNT = 44 -K = 06efc92043172150f31694318f28a65e7bcd8daaf989114e556afed8ff72c5aa -P = bf28342c -C = 0ffc9810a2900f68ebcc1d87fc6fefb1 +K = 3ca74459259a0a19a1462bead2bce8bebf3a2800ba84f5e02c6eae289b8368e7 +P = ab1d8fef06a633e957 +C = a16d4b58090792bf866504426c3d947b9b0f093e18b113d7 COUNT = 45 -K = 152e0a6251dfac65531fb24e6351515550ff025a0847f0e974a4f821f2115210 -P = 8420ea5a -C = 47e452ef30f1e9ecc7acf2f20ef84a9b +K = 3ee1850e37a850bd3fb51a86ff74685126a7d440dc12feb9c6e66117d3e41a9d +P = 95fa3d316cb8d481e7 +C = 14f697051f501d46097d24bf3bd3672576803a38178cc3fc COUNT = 46 -K = 5a3cd5889583e6bd3fbbdd0b94919386f7563dbb11ea13e9cbba552d69ca922d -P = d077b8bd -C = 7f358cd118daec1eab766b9a2acccfdd +K = 491e09dac16716a66ea2f481de5a64c20e7e9b0c5123318b6fab4e661f3a11f9 +P = f127f524e25a964695 +C = 6cc0e083cad50236fb63cc8a2c65d7891f396e49f31a2bc6 COUNT = 47 -K = 9b994c0f15998ddaf56567783c01d161a55709d380f844330d123fd0a5dd13c7 -P = c2d707de -C = 70cb89377aa57422561aad4760c8b8f0 +K = 085059f4122f1e275e95fa3a3802e30bb5625d08a25de5f2121c05f53a778a59 +P = 7521aa56b30b5a54a5 +C = 1fb2ded2ed38d1affee78e80b976ff49f2c7a67705e9698b COUNT = 48 -K = 04d27e58f28c47617daa3bc951fcadf0e60ef53f687b171222a69f370cddee84 -P = ec763abd -C = 37bacfdf4a7012e1c9c0f68fc53f2c89 +K = 9fb61e1ba937616bd1180a7ea510570daf7a66999894165cbc65e1770532f415 +P = 55326af905c66b6e43 +C = 5a9e7bda92beb8a2bc6864b2385ae8399bef139e5360ff3e COUNT = 49 -K = 14fc43b9e325abf9ee388a2b3ea5e822666aeda37b17a915fb5a0bee91e3d0bc -P = 931fa79d -C = 11662ea486521b88bc079be5ac02b42f +K = 3a383e61be8486c88517b97434d41bb2b743a80df1cd97edc5220d8c963d2bdb +P = 4c26a8d06b816bd593 +C = c1113017d51bcc31ae635b6d37df12cadbbc4e8da5b9f3ec COUNT = 50 -K = 50af3c3143ebe283a70714468f3b7f3086df3ba5d0f38ecb28da3eeb7861f125 -P = 5c210888 -C = d5c345a6b38b0def9b020a9ff25a1935 +K = 8230b496b77f0b25c4ed87edc99382a7e829ed9526aa53369a0afa7e9188a7ab +P = 1e988ea47268da415f +C = bcb53a090a19719bd5725581043dea64162834aeb5b4e3e6 COUNT = 51 -K = 2afd64f552a0353210f0b9c88c5694c861f32338e3c46d06ff4a8cf1329b6bb0 -P = 4142ce82 -C = 852d3289cb10950d79c1db022e28abc1 +K = 9726218bbda7c6db30211687d29370ccd07e159b9b044801ad07b36cd336682f +P = 0d83e78dfd8d640a3b +C = 1d36d6a673845831cffd740b2d5f79b51e1981f6854ded6d COUNT = 52 -K = 7dc2735045c2d262ec86ed61b0531c70574f4bfdaef7d0b86027e6e30444f8a8 -P = bc837544 -C = 0a40ba035d08a7399805049268c5138f +K = 01bfa2262d410caeea74c2ea0cb4089cc71bbe0e7bd2e7e3c64cae99a33e2581 +P = 99be082dc8babec0fd +C = 50d2d4f5ad4fb6c890f4cad3b3485cadd449e5474e3cf753 COUNT = 53 -K = 55820bdec9cdd86207ab046855e25605352a782f588b256d50adb0d057a4c255 -P = a7566d7a -C = e2df6766a145635602dbb4e878897822 +K = 543ee55b4b45a7617d14f036007b199427328d0c30b7033c96234e145abf32a2 +P = b1b6e9c2007be55a05 +C = d656a6e8d8ba057cd1dad129a98f3a55a795dbad82284a5d COUNT = 54 -K = 40924e8fef9db32410cf7531982b6508630408d7db460c07a2d198d4383c6b44 -P = a218fc4f -C = 0a7da89d7f8de89581e4c3778e540d70 +K = 67df4bbbbd6d6b0cab876bcc5486b2cfd45bd0f1609ad20b9277c3f53c2e89bf +P = cff715c4ef080a2a5f +C = 7b519f3fe3d68465d078321d05d4ff450e2753a9b0e0d933 COUNT = 55 -K = 0aff44847689754f45e8f1d6837646e513483ca8b8d5c6a9f435052a17b3b3f5 -P = 7f1665af -C = d7a37d282aa3a4e7a13a4c866e4ef45b +K = 141eee9bfdbe7256ee618f95902082fa45bc0cb57b0870b00059bdf3d8524e0f +P = f67422f8f251a398bf +C = fe99e4eff5df26d18e2d66af98b018166c15682b1e3055a0 COUNT = 56 -K = bfb65e45bb987e99c62b2a68eaa28fc123ef019ecf6672a05e11d20cb12342a8 -P = fff20cac -C = b9403ae66b488c245646006f6b22dd1e +K = f66a210a97e88273f0a5b80632edc2ac02d4e2e43afea3c713d8e526a712e4f3 +P = fb93e3ed14a966a3d2 +C = c7e39822ecfe6019784a892eb196d8edbdb19a949ce9e202 COUNT = 57 -K = 6425e8dbfa318daf3596316ff2d8f0272e37975948b638f518a3ba8c339c9215 -P = 2d907613 -C = 03bdcef9278e60fdfb07b13ed7218465 +K = 2fff857091e23e2aafcf042f09b33f1785188b87931b971e3686671656c32633 +P = d0cfb2956b9b78ac3d +C = 840c0921b0211069ada8052f982f8c63aec676044d9a77b7 COUNT = 58 -K = cd778e8d6c102a31425c0a8e63fcab3e360a4117a6ea8f2807dcad25ab3cc82c -P = 6f5a4c90 -C = aefc67d26d1e93e30ba6ebd1163ec658 +K = 8830b9af00735820f9b93dda5257da87381bd3e753015041a5a191ab585285f1 +P = d58b1d7f51c0e5d9bb +C = 9f3aecf31a90b43951b235596166ba7f0724ba80a39d56e1 COUNT = 59 -K = c9b8dca7ff61c2dc521e1c0bf9dfb043d8523b33563c4774f947c2a4eae6c45d -P = e5def329 -C = c8378fccc07e886e4056a714ef7981c7 +K = ca6f7455433dc8933e2b7a9502d835bebf2c9fa8d8f76d448b551e59a93fb2c9 +P = d1d1a7764c33c3cba6 +C = 39d4e696bcaa9ec22886010efab08a7cf8c6c93f721bd439 COUNT = 60 -K = 0d1e78a9099cf868c78cbd27ce6367d0bc91952ad2041073582262d16e988634 -P = 08d0b00b -C = 6de3da938be35ab3cf8ea62a5466f5aa +K = 6495586be7450b498051c84c6ebc8deb4e27ba91d9d0a7623a64c232289839da +P = bca09c463e7e13a8e9 +C = 9d22cc56418172cfc58fe0daecef6f8f4068718e7f3c7d27 COUNT = 61 -K = 74672b19983031b448b3874205fa7be3ab8fe173bb918735347bfa3e90fba558 -P = ee8bb4c1 -C = 3243e44af6c32ca1bcc87d8c17f9f734 +K = 2ef84a00a83443182645f12847ab9a0924d196713682386a8fb0ac4b3e7f02f3 +P = c3b8e06b985083a2d2 +C = 279cf0230c731e1ab67b354feedfcb680a0c3cedfc73b5a4 COUNT = 62 -K = 0c6b5a6493c9dea075f64d97f1d8a1566b7dc8ffda5470371201c660bc1ad8b3 -P = f05a60d9 -C = cad3c9c6728681c8f238b0df4601c37a +K = 5088d932fa747cbd22b558ad0b24dce6861f7673cb0830f1040fd81aba8da55e +P = 1cda6b351cdc5f5b2a +C = cc1406fc2b3203ef0ab1543040af718bef714989c372df01 COUNT = 63 -K = ca9e5bea9b16fe9665149106ee0cd16224d25f52221b09bf89aa8ff679f46153 -P = c34c6263 -C = b307e00d0544561431efa41053cf3294 +K = 8cd99b1faf98f762517e743b451c50c217825fe4a872ad6cf88e38f628f56c89 +P = 60087390be5387632b +C = f6cb4874a34eda886a0b4845a17be68788bf50d1b7d104bb COUNT = 64 -K = 87b4ffad3e639b6b1de4947250557f0daedde0a4859e0b00eb400d7f654a2950 -P = e3e1d4a9 -C = 7b7b67891460043f1df5f4f4cbbbe63d +K = 9b3da958de9971eb824cc579d991904e951ebded74bd8f33182941c2c592e5ce +P = bb9865cfa013f0d36f +C = ece4f17464dddbc5bbf4a03509f1033d7a9725bd552494d3 COUNT = 65 -K = ee786346b06dd76dd059959946e0946ed88cbe766c5fce4d641be7956b505608 -P = 6a233c3d -C = efa84faea502bdfaa26257558cc18d3d +K = c9cfb959bfbdf0a737a6988f5d313e9348abf302f9795e4b5dc6c464609ebaf0 +P = 4497a4b1d397515fb6 +C = 1aa6e961006d2748478535a48e189840ac766e91170645d6 COUNT = 66 -K = 4ab83027004938b41f5c1d201daf6fa85a30985b7f2a2e383fd39137acd20e3e -P = 27ae86b6 -C = 84ec751fad6f9a72ca0db9cb2afcc26f +K = 926055fd2af5f8b6e0003cade5464b16eb42c4f3ff66ce843051d5459da6934b +P = f0da7a5827391bc1e9 +C = a096e9cd4cf815e2f51c969af195d5ce4653361847919679 COUNT = 67 -K = b06f1f671c76b485f9566d4729c4bc44e8eee6ee47aca48394a0f1870ed48700 -P = baab761b -C = 376ee2707bf7e075ebf04de71b46733c +K = 754d16324aa1058442882ff810bf423a7ce0ae5505bdc54b01a101704e1b9df4 +P = 0224fb11fc71160296 +C = b0e614db64040964594565cc0a38da2a10a09ed444e297d0 COUNT = 68 -K = 09171575f5e3cdce0cb788c8b6d48e3a5235692389509c9b68bfac698f3d0ac9 -P = bb5a81c7 -C = 423e92e75712d0f9a829605a9ebcd0fd +K = f04318bec0806d31023201f19268716df755866a6b701fd599a0376975808585 +P = f50c4dc9d05938e3a3 +C = 9fef2284e718c417ff4c14e788ba79a491af3942b12a2459 COUNT = 69 -K = 7ccb06a798b92ff817675c91915e04dca443a2c9dace68b02a375b6d7536ab8a -P = 7fd8d2bb -C = 7bf672f967e67072f41dcc3246835704 +K = fafcf7924aa5e997efd1d6357ac183b2798a16b882a6e5e918bb1f68f666dc82 +P = 0ba5497c90dbfeba2f +C = 110cfd79e132999a739e876af1d371ca875eef9202129969 COUNT = 70 -K = 0ddd221cdec5b5b575300602a0abc16873838cd26a8eff0f3efdd602b222a58f -P = e6524fef -C = 9e67ebd28f7fe7e67eba71333f8d18b5 +K = 4f6099a933e53ce9ce0ab8b39dcd5c8800fad343b088fa6e46901f3f4b0b1838 +P = 8959730994b56cc117 +C = 52f17a577b278a4940df7b24aac664fcf70036fe5fa77af3 COUNT = 71 -K = de54ed7f62ced99063f1a12b97d8a6608920d49564031b2b4ad7ed1cde3d7dfc -P = 8c58917b -C = fae8e9649a6b22953be89d0bdc8137da +K = 395a3193a97a8f29c17e6b7dd05118ba057c98189ba31e19adc8a3c6d2921cb2 +P = f1654f18d1e1131e8a +C = 91d8dc0050c6e0ab85b65c14654acac4651627c1ba573367 COUNT = 72 -K = 3f2c7b9c4f7da5eeaed09f3e130b74d323ca0b5fd727f4662bfbe3ffd40eff61 -P = 92f44ae7 -C = c14108d5ad1fe2e177082588ef67b990 +K = dd1244dc925500e44a76d5ecc42785daddec27f6a1e9e661528d110d6f4433ac +P = 2fb3838b23a1314824 +C = 65f6df35994b1ef37d0dd3247f52ac3255c2ebb438580b6b COUNT = 73 -K = 7fef7aa6cab3c9d359baf06ef08f9b39eac10586db5e694e5d8307ea0c8f7629 -P = 460223d2 -C = 05b0b9d2fe97170c14fb3a1844d25631 +K = 3694dce1416ac5312e52aa957374a7567b72530342aa29ec9886e25f21080ad5 +P = 1d26ff101c3b478abb +C = 993b65d8f7192da2d9f768cc1c97a93f83b6d10077542a25 COUNT = 74 -K = 1f2205fb244cf556027fe0934f594df4d8cae6473a460874b27c3e42c21e49bd -P = 15c7c93b -C = 71dec2553fe7b1277b51094d0f0c073b +K = 217d89c3d9d76f075b4f05bf953820fe4f556f67a0b8d5781eeb6563a89305d6 +P = 021bd7f0f36c05f323 +C = ab2931d30c30cc0e4db078a5eabe3a38c649b2f29cc8ad5f COUNT = 75 -K = 34f61204a5fe0f39dc6b18eb13a9c1e467df290774850c0bba9ae560b58f5c93 -P = 87dfb5ee -C = 9cba1ad86b8afd982a82c9f2ad313ba0 +K = 112a1a77d19f80980de8c6d95497677f3040fa71b06167c1ded9527a7004c0bc +P = 48cd18bce8cc35e9ae +C = 6b6a730011cfcae7e5b32d13e88051d132588251e103b2e6 COUNT = 76 -K = a0493d4abb370eac005e4372225aa3a9e5edd614852f2fd67129696e425a6df0 -P = 5b035033 -C = 24f4ef79e9e506086907e34afb457ca7 +K = ad217c5baf5527371b16c28795b754953b9ba2b83a9ff8da1c1b6fcf9e65940e +P = 0ef19775e8e8d15590 +C = c0581928ef176baa5f764c0ab0305a419ed482b8141dfd98 COUNT = 77 -K = 094b7864940e468f6cc66f012a5516f746fb830c1eac8236278a70a933ee9ea3 -P = 19bf120b -C = 5389ec9d0f68b99a0b47f0489cdf996d +K = 36da3bd13fa12d04424b8fd10ac64e5f6810f722403ee73acfde60e4bb294a84 +P = 3249a7562e5eb95b8b +C = 01c2755048d1ad4d1eca53d0306a6d00d85ff78c5c5979bd COUNT = 78 -K = a9bbda329154bcbaeea41bc80e0bbd93e832a3baf4e9d7d0e0b9444e5be2494a -P = b391fa4e -C = a323a4fdc466dc317d14e58c2f9546b1 +K = 9fda72a119fde9adb6ac0b18fa5d2ccf2693c2ff62e516698764277db6698945 +P = 618af4afb177808000 +C = 596e0adbf0019e42b361511179770d6e8e683c47a7e6e4a7 COUNT = 79 -K = 3f0b20959c6d2921dd06503bfe5e3683fdd2f7e2c2fb8737d230d18c8d6f7817 -P = 32249298 -C = f87efa9cc63909c61570ed8dde58167e +K = 2c53dfbfd60bf461e94da8729faf717dad0ecbcedbd4d411bb9c677b68333bed +P = 3ab7ccb0357ed687a1 +C = 6f52c696b6ff34f2ccca027bdc847f3ae43c55550d864337 COUNT = 80 -K = e990493544d944f27f7198dc0ba373513d12bf1b2922d6bc6842c3e063326075 -P = cadd22a0 -C = 55345d0e4b9873b1a0848663980b819c +K = d7bc51d5292be008d19eeafcfbe6f080b29472bea397aa365902286b12fde341 +P = c403e2ea7140bc52e5 +C = 14ceaa4e6f0226e655fc304c4ee6cc57a7627e099ef6b35d COUNT = 81 -K = 25bd5dfff9740307e0985f4df98eac86b482ad5b0850235ce60ebf1583503bc9 -P = fba35049 -C = 68a84ae4cb70186bfc6616a325da0c15 +K = e9a25a02b578247bebac87357bc527eb81322cfce3f09e355819877bc6846316 +P = 5cbee65c85f8820740 +C = a33513110878b2c911f94872ed6cd649a32d8e2401273720 COUNT = 82 -K = ec02033b2836277aa283c4d11af2628a9eae73773a7a2280aea3e2d9147c0722 -P = 31fc6f0d -C = 8849b6243fca39c822d88a5f1906f2e7 +K = 48bca25c75630e2b1bd770dbe9a21c129dc0fd6b5ac34e972657fcc2b8e003e2 +P = 0da25ab9a79dc0cdbb +C = fd4af12dbfb80102a9e3ff8d4d3ac6b3eacd7470c7a9b1dd COUNT = 83 -K = 30cfdb46e5be89c62229927487050d7929daf37d20713328740852f57d060298 -P = 1598ce13 -C = 238923927dc45f563936e0ebbf0ed6cd +K = 06e06497cc30862b736764aa647ef70b8dfe00fbd4846827901a3934dbe943eb +P = 1f50f39aa300089d2d +C = 4669202d5edbaa3f56c6786bed65784e2c3f9db085f1d7ee COUNT = 84 -K = b317c383e39db35aef9952f2166253e531f824aa52911e6fe19353bc3d28b342 -P = 47511eee -C = 1007c33d8820fd7b0405688360eb6c92 +K = e37d1f530a4e6406beda5866879df11f4c182e5a7b9dd0558464dc8f10dcdcd8 +P = caf7f175ba228bec9c +C = 2160ae27cc5f197b5f56d4abf72b8a5d2a88c810007ccc2d COUNT = 85 -K = 2d4080c23cc320ed94c131a99fdd8c1a7710257ba7d5660dc65d24d92c82334e -P = 9803738a -C = d9b5dc24819d482b962b95fed805f00c +K = 0d75b8442b58c9cfada654fe41df9722c6427fedfc8e6f0f39aacbb38f627dd4 +P = 935a4b6dbb312fadf2 +C = e9f04c5158b82ffadc57e8f971b7f690a11297f5d47448da COUNT = 86 -K = 50b8c34688fa462d1aff428b395bd6893fa3f2bf2956232c03816672b422c180 -P = 6cdbe8a1 -C = ecce22b9637fb32d7873201c878548ea +K = c88d884fe306e710d8d33f61750df558b73a7efe44c98a38500f7151ce5e1e63 +P = 94e6b65606282ca554 +C = 5973a4e2280a2a93e67113cf877478ba7a8426c2ad505fe8 COUNT = 87 -K = 7c6a062e002a42e169373991b8b96c6a30e8ff6f96ef04c7a5bc22af4914ced8 -P = 2b8d8986 -C = a4306326605b82756c61f46c3812a7b9 +K = 51805cae6011db2dbb8b40d0eacdf89357f654a9a2c8a7c373763aaed3f24f63 +P = d57f23ede91b64e2e0 +C = dc36a8c0020d5e571978d90a67705b7054649569ab731e0b COUNT = 88 -K = 2f30db91188dd98178da14dfbe21b46de1a7eebc02b8a6c0f0b5351fcec848f9 -P = 1a690ba6 -C = 48527eee2a08020b7352b1d26a28a14b +K = 341c58e970464c0dfa2565efaa107bbad7905308597c694ce2c758147658d52d +P = 85ca6e731cc739851a +C = bab156f3375e968784dcc069ba8cb480f4882f33277e1e11 COUNT = 89 -K = 335449f6ad1dc82511d0e7da02cdecd9bd541abbd29846dfae6e6366725a8772 -P = dafc624e -C = 230a805180cb8cebaa205e633c7e0a0a +K = c88d1a60e210f3841ba6aaaa3ac06337da8ea56c87059c5d6533b2d661c57fd7 +P = ef9fe5912a5646056c +C = ba2ac6df0cc7bb133af9fc35e97ef1e78bbe4097c6020fe5 COUNT = 90 -K = 4a7203ca67d59126e6e00b9ed65949a165d6974d84202fc933b2644d378d3d89 -P = 3b68c643 -C = 9f5cc3879ddc86bb5d08d47204611778 +K = 10ac794e5c47ac0bfae0b0533d133ec4e7154be52080f295ccad904bcc2d0e1c +P = 95dbc3cbd6c3e0c921 +C = 7d23151cb453dfc428a0de55f8081f5188980357bb559d43 COUNT = 91 -K = c3cb2f8f9fa89bfbbdb749a9314cd6388d42ff2edeec49ab9da7126cde580167 -P = 2c946aaf -C = 1a9b2df2e7e8a3fa6f8f82103693c11d +K = bad80eea328179070ede6e7b41db17af89376508991f01de2c5bbb031ecdd5e4 +P = f144bf4d05a690538e +C = 667b013c68abb97ce02ffd55cc7d02b6e3d44ad7fdc2fd3b COUNT = 92 -K = 4e04e102ee6caa39be73185ea7c2ae483f1b27eb206ab37d91cddcf3a06b1ca5 -P = da0df490 -C = b84b00e538cb5d21c9b4ada4246a23a6 +K = b091e52fb1d18fe60c4da958bbfa42f1bede2675fcfc77bdb104afbbcf4c4249 +P = f5f7806d64e729c887 +C = 961f5ec45cbdaf71d37580a7624fa422f49c807c2a17ec44 COUNT = 93 -K = 35af9d85225089cdabb6709bfd1934583e8515e32e4460d4702c7e36a1e973b0 -P = 9707fe9e -C = 96aeb8208e31b5466a6b5cc470a5c989 +K = 9c34b88f2adcaaadd5beeb87efa9c7a403cea14f0dd9cb3dbeb3fce7c26eef25 +P = 6811514ae2449465c5 +C = f21cdc4e50869e59093af018134bd0d56c6004e14786b2ba COUNT = 94 -K = 667569031aa8e8899b856a8b0d1f91e324a961f5abcc69cf0c8e403c1ef342bc -P = ba212595 -C = a5bbdfdbdf237caa19b388e94f8b65fc +K = de179cbaaf3d8c2f059269adf0ad5086451675da0272f32adda5fe26ea36732e +P = 96085626decf823bc9 +C = d845b95a0f76f30d2b72534cfde1ed37c8c408f9c33e4919 COUNT = 95 -K = 822ee11fc44b52d23df4aa2f4d49f24530a3cd7026b0bda54198cc731a7686e0 -P = 862e2b10 -C = 43d6ea4af17f609d346bfa8e4907d9b5 +K = 85823699531f0751be4cef4243bce24020ab36af9ec0cfc4479113271f86c2d0 +P = f09e8aec19106bcb8f +C = f4cc39fcdfdb1cef736e333db61fdfc19c20ef82bc50ea77 COUNT = 96 -K = 3eed19d4e6dc6656e3e90816125ecf25083ea307a2550460b49094866e2dfabb -P = b2a80ab1 -C = e70b521cadf92411884c5d487527fd62 +K = 12a47ac5a5e7c90b69a54fd5b573cd5e024649dd2553d8f070be8082b28b2f20 +P = 9b5950d105441c8bfa +C = e988c063fd8bfb83010a30cebe6828fbdf138d9ebcef4910 COUNT = 97 -K = 0f555e7fa31e8ebd8955528b5f0cff783dc2cd0e1967d1d69947e9ac90c986fb -P = cb6a02b6 -C = da698b79a5f4adb6e53c844ab9ee65f8 +K = 1c018373d3c35079a82dfdad3d12eb3f7b1e7f36097cbf079adae791fb74b527 +P = f6efefb8111c58a40b +C = e0a773c9e93b4d25dd5ea99106491ca13782dc821f7e43f6 COUNT = 98 -K = 127fba8c86be935e4b3786073d13053a6c0c5e9e7fd31030ed825077515bc5c2 -P = 3c6aef8a -C = b33e770de7e88e4955af8a16b05b7fce +K = fe2e181e3bb574a348e91a345aaae3cbb5bf369b7e6aa5f8a136b78fdc4d3470 +P = 1db97a67403e5f662f +C = 9e532a46abca0282b9e06f4b36448ef560b729c4d1144d55 COUNT = 99 -K = b0b1cbbe786074d98ed0be9afc830721eff33a5eccdfaaddfc19e7c1717e9536 -P = 172db014 -C = 9b06cbc85bd879312fc3bdad1c53c199 +K = effca71d7e9fd48ef7fbdb0d7c49c4eabff45a26f3faab5c21b43379a6b8b907 +P = 0d455e6a2575e4ca28 +C = 0c2591515167d3686752f0d068a82569cd7bc9da66398130 -[PLAINTEXT LENGTH = 96] +[PLAINTEXT LENGTH = 248] COUNT = 0 -K = 781bd267f276f0bef1bb98383dc18c04ae230e08e7b6a69b8686888155233803 -P = 6c9fc44e2c313509a7833722 -C = fb9ab80f8af887f6b2dc4ece5dadb251c7e6417dc45f617f +K = 148a3fa618a6998c30b9f0f67922354a3747f2fa2e4d2e0b7af9582d6f548fee +P = 441125592acf9e5208dcd558a7ac0034d15530dbad7a2913963da0cbf60aa3 +C = 23f26a9476829885055694062c89b86399e8d6125509c9e88bb0a5b5113f4bfc8d34a62cba3c9eee COUNT = 1 -K = a58754d591c5433aebfbb61a9d6c55058a9535b4e7f9775c2deb49ca4c9f873d -P = 1fc59ca4d7b4c970046c1e25 -C = e9de2a2ab8ef3d1619b5a16b6f0180f16fd786c1eb2338e4 +K = 8ef080e598b05c395be2cf124e60f5005bb31ac4cc7200c48100d97d38a8ebd7 +P = bdaf57f3f2300e3bcd6a7406683d99ceaf682b82fd6a4c4f41f1f78d89ba99 +C = de46f122e2a960d4258a8c4be96a0503b0463a379b1989e0b79548cd44e47e9d8a1b7e9ca895e4ad COUNT = 2 -K = 35a2e353cc51bd892917d1a3acb2d64a602cb6c7bacf85b66c6970a74f958ba0 -P = 5026c619a0c9fbd294729d61 -C = f1558cbc69ec1d7843d9fdc6911f759df54fdfa137eb0e7f +K = ad7ede8c03d7387fa6c57f2a091dcf83a362942aed64ac92f7618248fca1b6c5 +P = 931e6b44b5852dc6010a38be90d3fc9e69fcd81f30c8ca66545a7f0e82826a +C = b2ce679b86bf182dd6cc3224aa27d9f7770f6dc56a4de871fe12ed005072dda93904b7550011e203 COUNT = 3 -K = 5b19c56b4cb578269e4d06354e86d737ae2567898e4c0dcf961e8c6f6bcb207a -P = c864a184ac57e7c0d6c00ee0 -C = 11788928b25be2481923888a86c98d90eeb5eaaca0656a67 +K = f90830be70057d7311e435752f0c562cb568c8e1f20539c771382b46ceaa9ef6 +P = 6ec2ad9a66dd2a16885cb28503f03ce9bf917203fe1118072a90f0c024f492 +C = 38d3f2086aec0d205acff1430704d70e07e382fe4869d7932a88489e11a6e1ac8c7780ad98b31624 COUNT = 4 -K = 37d1a4639fb4c555516ae3134dfe674e83612b9abb4ebba766ef16281da3b81a -P = 42cc203ba0b91ac72264216f -C = dca827ae5aeba4d40baf0a86b4eb9fc4b3bf1a8d30607c49 +K = a66b2a345725b9d8d23ba9e32f42e2e6b198e588c78493e982953043529e4617 +P = d9c497b5f72375d5ee7bd7bcbb25852292c97d26e0dc313f1c918c4def9b5a +C = 7d9a29e4c52cab44a3422a15697d478478cfb04942adabfd4ac553296d2a86a7ac57e0bd33709aa0 COUNT = 5 -K = b7ac1c04bf405b9083e21d76f9d5a44756a9b1a5e659a0f55b296cc72591fa99 -P = 939c9540a434c65254195158 -C = 2668d9cddecd36f65a4a70ab2f89097dc18c75a5307ef10e +K = 02115e436d301eb5a913773f250e3b37c2035c548d2b69e722c16765ce783f08 +P = 5895b8e467ec1d078bc7ec08d5a073c986c43008a6657b01302a35b55576a6 +C = 9e7c0ea59c2efa37fccf2217696b13177f9629236aac7d275ebadd34b52f7a73602fe765d11b8416 COUNT = 6 -K = c2130d84905e94d8177bb811f86f5832fe0d13da4835be4853c146a7209c4d84 -P = a222c8c129f38156e9cc9eb9 -C = 0eecb169e4cc135fd6be3eb8e374f577d0041b60035fcdc4 +K = d7af48f79bcc293e38ba3c18ee8881ea41a7f6009dce5898404d37017b01fc7a +P = 592a190c7f93bb16a26039c4378b591fa0d24cfd12d7d004e7964b76205514 +C = 3e010e4aabdc17e15f8f0f1251cdddab793c19ee144b993f71e725413dcbff7a1df38be47262af24 COUNT = 7 -K = 106c7beb56722160b51bfd4594a2af36d341710e2a2c7f1ec247971ae9f558e9 -P = 88a9c4fae88d6627a91e5ac1 -C = 634a6d0abbdafe665b378a2f92aefe15efbc92f1ed8e690e +K = cbb75b7eb2e353c3b5ac88bf68fd398062599b5bf7226b5bc2a538afa2d4409f +P = 4c139b53d6d7ecfba80e13d2e09f0cc5a4fa9d2aebbad01795654e039dff06 +C = 70866108e4b13b7420c71b7cc89e5e643e209fca9f0625504619e154542fb9d174880031cbdd63f1 COUNT = 8 -K = 201eeb7b927373486d015bd125e2b89d304c20f79c8c3634358549983408aa5e -P = e7cdf1d9ef0e3d0273a77ef7 -C = 0b47ecda89b36d0a969dc2c4054625e7f2ef50252aeab008 +K = fbaa8380a7f9de129f8b1dc18db2dd3a004f761115ca0eff87ce7c3c0148a28c +P = 3aff2788fedc365cc9bc9b711a7b5a53e7ca7983e566a13c148f9e8f768360 +C = 34a912e784f806bff696279a3e4d30b425ec4d158ac756c3e9a16743b512ea26ab4d8e92fb93526b COUNT = 9 -K = 3704119df251788e7d48154ed088fc328a4ccf0ac6b036bfdc79ea960a143241 -P = 3db8bdbb9076859d0c33a08c -C = 13f799c21818e79ca105b8d3570ae633152057d3d0bf266e +K = 1a634dbd88c9a5f61af0b3a4d63e60a4a333d659ac8804f2817f5e76219c74b2 +P = a91a8412d88e9be3b45df734b1a8195e16c7b80b5d9293837e5e4ba1d29aa2 +C = 232119521b0fb5a1d9fda3e5ee959e3ec72c8dc898cfcd45014a7741bce2cf28de145afac9489abd COUNT = 10 -K = 7377d4798518649a4c822dbc1ef6d453ee278bceed3fb0eb00bbeaed3ba0c8d6 -P = 43f36a8ed2183a23385f17b1 -C = 5b252a4bccf8677eba604f283b1f57ed5db075ecd7f790bc +K = 4736a4fa03915d8193da2c6fc4579550a32afbca934824748c626eaf6b6971f5 +P = 5d25a5c55e07c2a1b1f2835ff6aaea94b5656152962f1c1de61e615ccc6350 +C = 068e92d9cb2427d7263f10dd777acfc5117acefd38b4fca3411d85a691a1c4dab4ef828ca6f7bd8d COUNT = 11 -K = 099dc44629a65f01a6df75ce5841fac849e059aaee89d8ef08da86906b60eb21 -P = 4fe12cb9fa7ab6adc66406cb -C = 27b0df1d009b0e224b5789b20a4d5c082ee3f8a1c2b9ced5 +K = 9aa836c942bfe2ed09b03cd18ce83784dfa097cd890934d13469c3a19c4a119d +P = 0892d8e2f234b69b8f1de9f90d38bd163530a6c0ae344f6b4e90934426e5ad +C = f2577fe318a084986a1b5ae0105831f6c3938a99322eb546cf01e716fa4e70e86a70e462b9f2f298 COUNT = 12 -K = 44104c44b20a684fddd77733581fc232c926d22d9aae2ba1d1b826a3df593b0f -P = c2909e34278329f0348e586e -C = 9d97a0a763f767f852d6c31542b07bf58f5712a92690244e +K = 6122c1ce3db13cccd9375f14ee257217b5233b4ac7c889350fec864b8cbfd0f9 +P = 21d5adb081c015570ac65be9b5ce3b557d705d7d939fef71a03745aa09176c +C = 75f87fb27e09ff502d0e7d77ed20382a87edb16747c233b07eae342308cbe222a4f46f8ca6235f13 COUNT = 13 -K = 0a32c727541e2aa67c7625486d2f5563fe01c189e56663a51e8d1eaa9dd39d27 -P = bd92281f8055de9d86e11220 -C = 1226f518a1905952ddecc23d9e3ae79cc82b3bc856a40afb +K = 78684487d1a6abc2456fa17ec269b7e636ff9edcc75331c959308808b0e69f3c +P = 6e76bcbc7c3a97b134ec3a913e1db7f7b72c865eb2c6cf18090836bcf16643 +C = 0aa41ccaa3d104b979cb64a28ed7409b26939f654456bf87464017f2d623680f6f1bc03f01ed4c0e COUNT = 14 -K = 3de9e90e2ef579de00a1a448b650ae912ed0c61d7fee4479832fef76fb08cb9d -P = 616786ed63d4420478795e37 -C = 51ee16276327916be12b5e428ea04eab189fd9f57c33524f +K = e85c6e9d32728074f35bc875235cceba784e42a6b5d787dabd3623e87c5876b0 +P = 1e251c650c9fde993fb9f9f7de7dba85a7d34947382a40fcfaec3822666a58 +C = 74d5d6d17ede0a8342e9c6a4af5991972f29a697d424173f3ec1e62835080a52bba5045d917e20cd COUNT = 15 -K = da6f1681ed336f4c5f2d2312eafc164870232d10638b5c207d9b0849691d589d -P = afa7ceed3469a0fb9a699f24 -C = 1cf69228ed2552d320ab3d2826998257743685940200d750 +K = e8ccd123a27a21690b29f535724fc3b603abf8e4fd65db08af9743e09a3fdaa3 +P = efb806dcaee5d8da9cb90ae8985543b3e61a745b0507eec75a1c028b04c806 +C = 7395b8de87860a50e14aa61a1fbe835982c987b410fba14d82834a6c35c4b7deb18e00c5b3d5dd53 COUNT = 16 -K = 1314c792b6ec0835baf9303042459f1d13e5e14db28f04afd9e1234a1bab28a5 -P = f40461db1c12af0efb127515 -C = 21e1baea4e94576c67e9c36e6dca67223ed822e11b534c11 +K = 96a6aa690d494641b6023826ae668f51046db2d857524099bc55d3b5f2d6fcec +P = ef1b1d9d2f26c8aae4284f06f6e6fd8dc381a5a6456f84f64e5176a5be255c +C = f5af6d74bb9aeb252a037757142fa92b6494d8c84dfefe9d3533ce2d6f3032a5e43828852b75af22 COUNT = 17 -K = e539643339f04b6ac2351e1f867268f23ec4315e8b646544d6ebce4d5a63d970 -P = 03d343f4f31290cca55fa621 -C = 8e8f77145cbc20bf85a32dfc7e1d04534dff535965f890ac +K = 1a9fc2db413c8247c9085f5c0ef1dfe94ccd4da487a76affd5dba4129e48873f +P = c4726aaa6e4ff042998d72566518a86f60de8ad022a882b73b41579f5f94c3 +C = a62d82f277c9f25c25fbab49830b50548fe87969a3196e0220b1b8e18e6cbd2f6f78901669ff6353 COUNT = 18 -K = d6130e5fef3398f2ddf981f932d24f427d1e1af4b7c35329337ca2cd835771cd -P = 26f627936dca6ac120280287 -C = a62be80b7875966cbe1e97f60bd8a829e1b58d78f7fe72d1 +K = 4de4a8f0c27c67b967e0da6b17b78944d13fa60505e85d52013d218f701680cd +P = c6478afb1f9a3febdc3a32be827d44cf810919b8e53662bfad5c5bf96dc7af +C = 02b2b69633f7b8e22c000d38f55b3622c8c3f31054de5b6a049e725232d8a80ccb2dc3d5779af96e COUNT = 19 -K = 7f1e70189bb7ddebaf6397bddb3104258dab107d9b682b1ac4b4b663ef7de4a3 -P = 635cff8100d980ebab9b81da -C = 5ed22ea5a7e678feea5728d73b32c50a8b8aa46a5de65254 +K = 8b67726786ad335ff227258cf92613ba48cc739e5ce7fd7de2770b29bb6db38f +P = e70ceccb9f99c873d0a932ab64609f4ab261c4648c7878edd2d859f7dd8f98 +C = e99b46c63894f3a5f4c6d9fd900965af16224ff097e9803d4749f8b43cd64004d7698cb44716cf22 COUNT = 20 -K = 21e9f1fac2be5d436e1fe18dd6c22dc7b13a20f3a3de46c7e707e965414e4f75 -P = e375ac59d24155f851d2663d -C = 8ca256bacae67ad75982c1dfecfae0ddb1482167a9b5d56f +K = 810d03190928e38f4e5f98da443b6cc3b257a64914ee5bf639912cade055765a +P = d45436d9639bf32f074431d17b38b308fce0b92a13a275ccc968fe5b97ceb0 +C = 3f121316f800893ca38477c39b57fae3db53631f38d7f34d37723ce0e3bb345f9090568c328c0abd COUNT = 21 -K = 95c386dd3b15c84ea9d362a4e92f64228edfdeac0cd3642b045b3c97319fec37 -P = 685f89f229de19e05b37036c -C = 4cc72411d45a411b1e58297f8cc639ebda81c4310d456b2d +K = d74feccdee512efa5b1ddebaa0c7c5b3abe88947f575854d165419519ee0f6fd +P = af790ce2955416fa15dadc849d305f062a748de7cfb69696e4c7075b09880f +C = 24c8eb96b51387526eb5685da565231e7ee871e735e3a7f4ce5cc16daff48c44c1142ad64e56d643 COUNT = 22 -K = c6767507857b5c56e3aed7925ee4e9c15a7dd78d85a923fcd3275b86c4703033 -P = 3435f32ef3ce451b65c8a177 -C = b92af07a63a1f06108a29f7d7fea18d76c25534857e55299 +K = 9fba64250a93323777792841cc726fd2923de007a94003b61627bdac50f9fce3 +P = b022f0936d00a810b84c5e2d19cd28ffabf5e808462e29c34ba4022c1ecc09 +C = 37c42901c78de062d0409722fa2921f4ee0c619bc44fba39be259506d59fe9c3ba42d3efc9375dcd COUNT = 23 -K = 0e126cb0f8c73173b7897e852d09f370018e3c9141bbf12692f46e0a9c621803 -P = 8a2ff6396f399b295c2393d6 -C = b19f6bfb44c1100c60a2138c32ff8229189014b597b04e86 +K = eed6703e1d87afa4316a7b4c89dc349ee64b6cda0d9e75a23544d3cba1b8bf75 +P = fd745258fe210e7f85794019ea59a2d7ed52e462fae479e8abb4f3b32b4363 +C = e7c6e1d7d66790835cb2be1ec96f0c819f1eed5395eee36ca98c32247193d72e978628c647260c2b COUNT = 24 -K = 9a894f12aa8403566d1ee7b1a8566c7032422728b713267f93f134674852b3d9 -P = d81f891cc5b5aa5ca5c7ac64 -C = 60436e29c4b71b83e25ceb7916c2515d7a6967b5c92a8dba +K = 3f017e3401e2459379d7f81a21774b37dd6f70f8ea23e981041eb18a63283abd +P = db76369180f2f01536b6684adf8c92eba00097acabd04d1e89e892ce5c157f +C = 4ff6c338de90833ec738597679ad647629f06a5c3115d1fbefc5c6dc217dc4fef4b2d5e36f8bb294 COUNT = 25 -K = e4f27f033a07618ccff3b0c493a35da1d5cfa33b0cb7898bcb906ec2b871f14b -P = 4963227b6dfc8e0e58c668b5 -C = 1afc658ed1c5fb7dd0a6765538c26cac7125dc6f7dfb7182 +K = d637b4d2a062617675d06699f689a1e9fddfa10d7e70a4739040262193b60ff7 +P = 3edb2f53c560dd95320676ed98a49054ad3cbc2afb08514d9b4e266ac900b7 +C = 920a29c9d8476ac9bdba86f0dccfe511bc2953707fd948745804b57326570ffccaec8548934ca005 COUNT = 26 -K = 8813a36360af7d54ba2567ab49bd809ceb87ef3b3f2bb1723c5bba63818e8d83 -P = a2b6e6b9a63d1ca53a8d8343 -C = 618c90e335e4d7c37d417a74e5d102fd96e1229b5ceeda66 +K = d9a97868361a713057669a1463a82b5bd0f1a7db969f364705bcc48923ad89bd +P = 8266fc146a8434b2629183ed96de6f26d30cdd8ae507f06d2801c472de8dc3 +C = b8f3b17c7f4b337c8628b92a67f9d34c9d6dee2febb72c2625105e1d93513a6d75c47a6fb71ce6b0 COUNT = 27 -K = 91ccf4eb88f2bc9440c7b3bb344b7156e5a0f2fbaff872f3c51466bb8e66848d -P = c1fb3d11f193858114bb82e9 -C = 988dcf0c1bf99a71fa5c435dc86be58aa3822f30759e37eb +K = 52bdecf2815b839ac92c260eca53d7da4fd2056f573088b5a136380f0d6038c5 +P = a7852a975b516d1f4b31481df06c608f6d52da7ed4b94d5e5731694255727b +C = b5ec48269f34b52c6812fb28a1cb3cb68c60ee18929df592f0548ac46d8c9b97a4b4e588e81e43b6 COUNT = 28 -K = c4bb4eb5de673e62178e118706d202332329b92810ad052bcf80d07cdda8e844 -P = 3c97ac87a0dbdeecca8dea0d -C = db848b433479e1f24c9bdaab291ad320dfe6332311eeafb0 +K = 0b42f84bb40377b702faf6eab9aac2ff7225f994289ee52c21891db0e20e7ae1 +P = f8b23ea1c72fd3016716ca3b2037e436b4f59811fd911151c5dcc4f82df5b4 +C = 761fcaf552d89fe76e5e8c127215fbe256f4f8a5d607fbd4b218fd78b775f871c221596fe087dbf6 COUNT = 29 -K = 3a740b9c5201d0ba05996c2646e45e0e2f86eae76ca437f9b76ac617c689fb2a -P = e686d84de7918af0196e6d41 -C = a1849499c584c59a66daca99f0059b8f8e8745a10e7246bb +K = c30364eb9c73cec4d6bdcc5bf914410185cc488071c73f6e7c8bb739109aa0cf +P = 0b2f2b2872deb173e6641221b85f48b7e3fe83b67580881a0f5bdd9a2ed2a3 +C = 0cd5f4ef84725191dd9460ed1d29c74069e5b5e736465b93b2440da32e32d8f1fbde2f481e052b84 COUNT = 30 -K = b3bd3e0105e138d2121dc191084f4608217e1e3c29b1d6713cc751d42b80a920 -P = 9dfecab464ef1ad21bb4f3b5 -C = 069810592e19fa35bd56e8ed829b05c98fc088d8635bc35e +K = e58f6f24e9472a233a8559e62c0e744bf987f482901788de9e61560fe9f8ad9f +P = 4982c5bc3cfffeca68dcb9fc8c0cfa83c33f8bc76b12ab0f0254a458823605 +C = 3d7aaad908739607a7efd4008acca432dd5d1c920e3ea975e4baa3424eadc23c38f54281432a3da6 COUNT = 31 -K = 40b1a00da92539e4ef54e6b1228156266a7bc5e2a7338d2d28d9efbae07c6a62 -P = 98ac811c5ae58f2403581c8a -C = 824af0025676efa9bab71b76a477b6510c91c114bc6d6213 +K = 5a281a0da340111fbb062219fcf32e0cba4c124b96ba8f24c6c8b114a6d1dcb9 +P = 801c23d9d48f530949a063c1b13dafb14cec4488ca7c9ca040a1e6a37c2651 +C = 1d35c12c7fa44245e48835621be749f757286e6c4a91ac5a3d8788442d98a6659420ca3468dd7f0c COUNT = 32 -K = d97009f8f2156e971dec877c50ce8118d7865498cb3ed47b88f3c648eba08348 -P = 0d2c69c65077d55c54963227 -C = 517aee95bfb721d7bd2fe98e7228f55fb9939ca5dad2b640 +K = ce8b8b42aea5d6bb44f6330523c1b6df1f40279f3cc16aa7518582eb321b1a65 +P = af04e7d693ef1bb658f7ef64f2b3348a0631425e5b4b8915c0b91adb9942c1 +C = ab5ba49c1c2a2e56bf89ad5ccedbcde10c41996a5ce5f0bb8bd2d452ee6d4339b71b1ed13d0b6553 COUNT = 33 -K = 0412a17fc3a9db1d5872cf35928d24142aa7e106b26d5bbb04fe6c5e732a336f -P = 8fec5b9da1ebe065036e6de6 -C = d42bfcf59862e69a161e4777061483e256881d795b5bc2fe +K = 6c9b52dfed61771a40ff8941ab63c29b53ff09be8cdcd68b3e2956d381c55f8a +P = a8e47f48c2fadeae81230ee9d845c7726bc15b23e4bfee4235806e11aee57f +C = e1afca80e4f3341edf825ef638855c85943b434edaa8b6cd264f07dcd2987c53aff7c5a2a3dca3d4 COUNT = 34 -K = 2ce02b92ff0431dc4643e1f77b71c99aa492be32af74f46beead5e9023891d88 -P = bc37aa32edaef55c016aa348 -C = 539d5dd7671a6a709ed533067c7b0d7588daf57eea7cc86e +K = 4edafb3f948cbb209a5e34a12b3d0b7e79706aa5705d3d714dfcfb7e1e934cf5 +P = b7cba4815e9c566a59636e4c6685c8bf4e2ac5fa5528f775488a5e44d9f7d5 +C = 0640c549e9e22c9431db7650fa2c7859b0321d65e62dca6ad9347a16195bd1253b69dd0b551dd2c8 COUNT = 35 -K = f103d1655dd338167986e12c19b444579dffe9a06c280e79095cbd77684d578c -P = 71f47d015b321067f893c832 -C = d228e2aa0ef1bc892a73dc398fea4b2f3b56c585b820140f +K = 0582c6923704f21e7b710d570002fbec501e834655ad2a3cade4f0b2e7a0f430 +P = d0a6a72cfa3e46b611898b6836898002baf6fbfc4d01d146ea5c5f0afba86d +C = 770abbc8549bed9e1c241ae0cfd075c5d33384858716e12af094243f8780c5d8e0a4dd06c9b8c53f COUNT = 36 -K = 86c8949d9d3b4459c40aaae2d7aed90532221754d6eef25ab0169ba0f02e17d3 -P = 52d1f35dd72223c68a087f95 -C = 4dc8b5d37e381b0ec5b7495540c18aa31fc17f611d6c304a +K = 845491f10482f83ef825445bd4c33f666c50adcf55a4bf01e7acf3cf98790323 +P = 81c9e631b58fb9d81408853dd8db31f0a5562f9a1a4db4da65949591214d87 +C = 35d483615777e367ea40f3b07af400349ef31711d13766fc0122bbb6ec4cee8f7a48aafdf6707236 COUNT = 37 -K = e6bca36b1bda31e7de13d7d10f804aade0ae40dcb2d68c3ab316ccfa6b540074 -P = 0034bf8b40744381d86d49c3 -C = e974c80b2c0abf82e6daed423545af3030c983be4f271994 +K = 9b90f81a76db124a391d2e0133266b5024805eb458c8f2d48b247776dfe059ce +P = 7662f749dd7acb02c645184a2b06dc1498e8980f2057e9102363c242a44dcb +C = 4c81ea85786a8241747354cd85e6ada26f5886f29e32f1b1b28857730c904f791988434f79f92f53 COUNT = 38 -K = acc32ac15fbe5ea6d14b0f1d7a2ad3e533f414d807fe445db1ea9a4ff81ee0a4 -P = 7751006ce38cd9944021dfa0 -C = 95c5d18735b030930af838c1c783ee3e534453083f719a4b +K = ec27dc22008c72857e27d7ee2f2ce225de0b2923fa871c2877b65a236c8c1234 +P = a093247c05eba3d9bd50d14523583ddb97478226a4bb663c4bc4bca71bd6c3 +C = 027615b4331f41242f50fd651f01b09ed01f9ca35768f4013d227db2b1dea31f8cf41e632c3c1a0f COUNT = 39 -K = 2acca9266bb3c01e4b9b9b4f8ce5edc6d2e4c40727e251f791a52a313fc7f868 -P = 7daf9cc095adfaf32e6a582b -C = 2408fb30561254807cb5709ce9b1cc7b637a68d3880359a6 +K = fa023d2f47c9fa2e7886a3d705096022a529f39e24fb9aa38f05688946e7909e +P = e1e0ad2984ab2d1a7ca85a055d4edf2fe1e516bbbe5a849e25ebaaafa9cd01 +C = 13c87cec4c9b0332815235fc87820cd41bed189de0722e2a5fb1e7d412f2a3016879872669b465b9 COUNT = 40 -K = e0232c51ac0f7d4efeecf2c25173c74e90bc28fd60b226e371227b6025d41d8c -P = 2c1df73ba260b4fd909abf40 -C = 1cc882b94fc695c6a01641f9b5b064564821a17040f5fe08 +K = ccfd122bd7a8eb4933480a03bc314eb7ead2551eacb0b7bda9597d204bc7285a +P = 78d141a3c48f5ba3d2aff30dd818d71d77b6c083a1b3d6d4aca7bfca42074b +C = 15dc638f75a7be28507fa9bb40f86b6546df593e942c00a3dc483931feb5623bcf1b20aa75a5055d COUNT = 41 -K = f12e14fa2b0b923282f440b678dc4f4450cec70757cac26e72b7fa4548ef1ecd -P = d91c19e0b0181922ca9d014f -C = f9667281ecd5180b52802143dd4236c79d472a380fe9bc6b +K = 6ae14c04fefc5bfde6fa721bd1d3899c4edcfcb6857f9b61ebef13f56137fda9 +P = 55c8a5ee1102ba1244dcf1ff96d38394f031b292471b0e0807914b77ff0b80 +C = 709ba78efca885b9384715d847a791d5d977201152cae015067d6abc6d04514284f1d7eb28fb46b0 COUNT = 42 -K = 6bba6588ec5f027172932a459a0d8e57478e3a63eb0ae48beaa9f4d9205f25cf -P = fac5d01dcef408c46fefb579 -C = 9ae20033f72434295e4d6d9aa7851b6853c8cb57ebeeef59 +K = e779a424ea2221457f5640760acdbd1d2ba15d105ae83e46f688e8f28c86ff7f +P = ade12961f69e79ff86649fe5ff03cc9985733d4d349e0d60a75a59a56f745d +C = 88aa06875e30d6403d4958f39d42605ecdc064aa715c082812df47f2669ab75d1ae1e76fb2559adb COUNT = 43 -K = 01031f4d1676e5d9becf04574a7964d9fffb31bf7dfe5163e75ae7e43e78bb35 -P = a678ea334073d39eb46a179b -C = 7ce8dc6c3ab0656c53568c28ba98d6db468c3251c39ce7da +K = c8417fbd6c40cff941959109e0c506ba9aebb4bcffcf6ce1c7107ffd2e5348ad +P = 7f956c1ee6fe637fc042b04c465e28fed25688058b19b3bbbb281aaf726bc7 +C = 3ad6f11a3c0f581e6a88bb92dc4c3fe54c31ed405a53190a4e9c380792f706bc94f23a9b984b09c8 COUNT = 44 -K = b297f7a35ea189c3409dfc276e7115b44be1835362a6a4992d28f936a345cd2b -P = 80115d7e5bcd5c21be26d60d -C = ae52b227431acd37fb5a67cdd606ab85da57e86de24c46d8 +K = d1152b7102d1500a93abd56540546ff2a684b5058d37cae79b06c5568b7a5ee4 +P = 2528b6b99c363ec3149630a45a70e4fa828a989a8b8f6925a7875cb3c95c0c +C = 09ad0673ac9b6524e92f455318812c5f3cf77fc73f8785defe3661a07177ec3fac53fd3af3ddf822 COUNT = 45 -K = 97336d44edd3c037ef893daea7dc2a0da5f28404b7ba2eb38d77f9ec953281c7 -P = bddceeb23f6a60e5448684b4 -C = d0a1f2057852994bd65d5ad0e8bd87a5183fafbdc9453362 +K = 709f749c10e18364d4a076d394742d75d0c9d3c7b0191f33861e2a605e5db3a1 +P = 7e988f3b724db5dbb83dd8cdd45f17eb82621e9aec6111cb9625d612dc3c44 +C = 8a814a1edb2d9b9c0cbcad22aed3d6d23dbfc323c5a669f1fe1bfb0375bfed03d65ca422049be58c COUNT = 46 -K = b0b186b5ff5a63cce7f5dcaadd29f3c81d9f4112006b6941ae38bf9f9d6dc662 -P = c3f75d0142ae4f4c715c7a98 -C = 13f52a88e2938fbf7b95b21a67a3a6e53320c1d145216f3b +K = 61fd7160693e5e9f2faa0358182e13d2ad3b17d6e35a03959ed82775fbd0e6fb +P = 0c81af48c2abc6136318d17dccdb2032654dc04dfd1df90678fce828241933 +C = d34bf3e11c5adcdd0d28de473fbfbe53463234f49ddddf894da6aa8d03587daba45fffd5b398b9eb COUNT = 47 -K = 41db7573efd849aace4c1fc2bd6346f24e23ab17a83d50c452f36beb247e98ed -P = ef917c5de9423ecdb5283c44 -C = 1612e5b221bbe87161f258fa6d5b6cbd79c028bfdebe90da +K = bf083f39a779f9acf9c6d68455cd15772b224ef856ca9211c1678261717b9142 +P = 395d3696b36aa169583c877fd4081ae8c8e3ebb264de81a1c19c10450d68d4 +C = 27fafe455eaa1c6d2254c25339ee0b3a89db48bd1fcf30be695f5bb3a947d6565e0c962cb75cdebf COUNT = 48 -K = 11e0cb9b8b1c21ee74cc9326644e10d81eab84eb2f283dff29261f76668bc107 -P = d97f06a627a107e377295cbd -C = c208a55a5de861d3c72a81a9a7b61b468401cc8e90c52ea2 +K = ff4d8e76baf3934511f10b868095cbb02f784006ac01076cba62b4dc7edee014 +P = 80f2af4afb6ac665f83f9437e64eccfcfa6835ae91d1606d870beeff1eac40 +C = 5ff162d879c90d653b20f02aedb276776f6c5352524f29a8b86b0ccdf531a2f2fc3d44c6e99495ae COUNT = 49 -K = 02bc7b12db22b18a434a66fcb91a743c634957dcc751d13d4350e575e7b2d18e -P = 3cb19eef496f1bfcb0f75b8b -C = e6e36f6a1f222a7eb5062b660f01ad4c051baedec3e5d353 +K = 23643cacb947ee736a62eb07d91670d32f62d59f14903675d851229a28bc5f0d +P = 79fe8f3b6ea460da2c449a8212d8086f4289bb685ee8ac8e561e583a87a6c3 +C = a908bb22e5c7d3d6d8ad6e17d3b1244e538c16c6ad3d4f72a0775904ca69b623b346fc8e1350840e COUNT = 50 -K = f11ba1696ec81cb26337c63aaae16ecbf7ec5acbc91e4cbc659bfb2dbbe9f0c2 -P = e0d27ced2238dd6d5e81e7a1 -C = d8075758844ac61d8a291c0ee51b1bb494507aa46c98f911 +K = 71bbb219a1dbcfab5e6abcfb1b497db00795ea3afcb6bce27aed3126394dc80b +P = b05c4300ef4316d441dde716cb5f1bedc953370c540dcad9f5dcead7e71caa +C = 1c366d44207bfe222f31bd041c21dabf8e8f9c9dda913da5d10c99ff41ac8659d0077bde45e5a524 COUNT = 51 -K = 19cb40a00f3a9cc45cbdba25ac8484e8066b775974005ca8706f39cb73ffe341 -P = 3ca1b2ca1db954aba1ad4eab -C = dfb4b4b7d8e4d4aad52b000b868834b637737deeb31c711d +K = 5044a2b435c0956d5b96b75faaa92a889feb6070c92b4cc8dff551d089abfbb8 +P = 58820322476da89542ad241f346d891dab5e923fab2cee7d4a673128f5e8fa +C = d0b841571f0a11711e0ac94d5d261973e5a8464fab7e0808d1cf3a4e72768d0f1ee31fb8a1f9e36b COUNT = 52 -K = 463e0e7464ceb4bb6fe1c057c4dbc1347c892cb76e88e5f1f7e11062e9b92140 -P = efe73845aeb38c4025e2eb6c -C = 5e0a18d314c250cc5f72a242d3435921886611de3620abe7 +K = 3867e670160799a3e910c1f126c7e6c355221b713bc53c9760fa741b79407e75 +P = ab084d73995c3272ee0bfa24d48b04e9f1171f19106f4b21f30cc2f6f4cad0 +C = b8a5125dae2c3b608cc1ed34a9367f175baacd53e926b6e30892a7f34068a62a60cef1477387b7f9 COUNT = 53 -K = aa0cf02b1c1171715a399aa702c3a894396abc32b77ac21da1d31b5aeab4a350 -P = f60f15f4ff5346bc85dee042 -C = d29ed53a6363bbdbc999350016305b42ae43ebcee14f5911 +K = ec72308cb0b0dc5a6301b097598f318a07d215636ab4b9e2bb1ed17d3602d150 +P = 89f3939aadaaad29cb84ed71c8d6630f8ae0e72d722987a639a16d32c61961 +C = 2e26f0c03abfeed9d7a1a29b108b8968a54e53ef1949f3a4105d7846095126064447ae9e70ef0e5b COUNT = 54 -K = ed8b91b2f2c1ad840e9f611c155e23cdd0e6ebf87ae9200b6d5f53b7dd296ff8 -P = 8dad59dec88d132f1f3abf83 -C = ba1f7b39800c180ca2f277fad42c16c08ccc6b7d850b7a0f +K = 67398b6aa9e8c090330110778f323bbdce58a5a3d6834f0988db109aea9cf4bc +P = dfef4fc674102f7eb6810188693ea4848122fac4af2ab034bcb18f384905e4 +C = bdb8a5bae36a54d3c927cdb20c64706f9c11e064dfa4a81a95b5df37dcebad3371f319e88e2b540b COUNT = 55 -K = 181ce484475dec45b4fed7f0b670e6f12d95806a441a26604b46dc495008d0f2 -P = 7fef25cf859b25e641928bcb -C = ad23b15b9a2431f87b1d3fa4835821b9c8b967d228ccef43 +K = 1d98f21b2fa94b60a37fc3d7675932cf1ed27e17202cfb3df1f24258715d2819 +P = 083b959fbd72676513dbdcae15a2d06ff078266f619298e20bccc75305eabc +C = 098aa273f4b573b4f90d40ecce1ad5fd7c98faac9174e6eb31e7f5aeb9ec3e3a0fc7110a6e01c587 COUNT = 56 -K = adecbc4c4b2e65237bbc106dd42cef9d304248892a96230879a57da04f664b96 -P = fa9233261069517a02142169 -C = 9d7a2e3484bb316a2fa9ed6eb71100ef50109a69e3624275 +K = 796622e80fd394938d361e6e85066f633693da52aeef184c7820e22da74b2492 +P = bdee255ae7ebb7efc9eac9e64fa5ec50a11b3edae382a08fd9010138d4bf3b +C = 4764cc6d44d63a3fbeb3b8fcd5bc48240ce1d6edcff0ceb5ae981214986e879e4530a1b9583836d1 COUNT = 57 -K = d13871b51a3bbd1b35014477d41d607933bd7ac08584a891d6151c961a89cc02 -P = c69336fe3765a8a4cfbd5ba6 -C = 0cf969716e7bf04da2ce446a106ac35a496f00145c48d7ec +K = c2c80b3c08912579175676a1e2a6d9bf67c1e38a3d6af77be7917cdcbab0cc59 +P = 09c3c42158657327c89317ac694ffa7e42f18ed7fd3eea17600501f3862b44 +C = 1a981c04870c186231cbfe3f7c196f35526343e4b8df27b4fc93f80403cce6c00fba640a6c8e314c COUNT = 58 -K = c7228b47d659e7396fdd1b35ecd05cbdbbf001809754a50aa2ad59e9560874fd -P = 754f810f30a062e68bb2ef6c -C = eb8ae4dc67e15d0fd128c184cd05b16c19b5c1f983883354 +K = 62ca1bbbfec420b89a4f2ab9a33261e1f871363cc86ac990b09471fe336737f1 +P = 6762b5532e92ba3994a0dacac6a4111f1cdf688012425e611f137e17f88a32 +C = 5fcf8d5e91a0f0f892a943b72cc6c8eb6b85815e86a894887c831b17ae63b0ea0aad5e014aebfeae COUNT = 59 -K = a7e567968b7d957430f29470731f2f229b518fdcd5cbe4180d14c68355c85e56 -P = 9a37783c13e12e438490621e -C = 4dd3e8acbbd364f1784d82808debec6ed27fab9fd3dcd0fd +K = 066abfe2e36587affdef7ef66e753f1c58fa76439eb55cb43d26ed19a2f0d9ef +P = 6552ed80ad12a6e3f947fa6e5fe05fdb4b0844e405e2e7eb9f87d2fb3304bf +C = d885bb249298d511d2b0c9fb0115d28db2534cc9927d0d294dd5143c257ed92673869c3c3b4afcea COUNT = 60 -K = c84d11c9d392b5b9b875b5881ced7e292d400a8be1644f9d0ccaf2c5a488fd22 -P = 896b67e30550719868accddf -C = 8a8bec41349dcc0b9b6fb09425d53d37f86da7d6676493e3 +K = 04236373941e2fe1be2832e00a4e737ca143257a2957bf2410cb1025a6cd5deb +P = b27eaba8f40e59dbe168361dff4d57450140d18bbfd95b3d4127082e90c28d +C = ef6e530f346b21ff642fdb1a010e5f8cf417a871f0e652337db8909d12532c52a44481c87a11687c COUNT = 61 -K = f8a046ed2809c79022d50191c906a847242176cee1fa4dfb399d0f46dbfd9f15 -P = 8d93fdd85a6f53bad799eaff -C = 323a9446619704fec7650b893bede2afeff9a6da834ce08a +K = a7ed6b557214f4ab7e96a69b2a42cafd547e752beb2195909689529604e09671 +P = 6f2d1c7cc0c67f78529a0c317a18f710a59135011450f739fc6741beac693e +C = f11931301c5513dcca8e5458dbec66dbd044fcdef545570c5bf42cb02486b7fbaf6b22ec63c1b434 COUNT = 62 -K = 1a61c39ab90ca32dfc8afacd53d700415a1062028f96624110218a06ef595e60 -P = e8c8e9f5deab2f278ebbb919 -C = 7d1a23a6494c6271344246f419d88d0bdcc91e59f8ec46b5 +K = d3f71cbc7b9ebc34055eb27a2e65b48a90ac6665695e66c3094db67ea3082198 +P = b3981774d0cb8cc91a98d658cd333879b9744fca8fb87e0bd00ae0a7a9a9b9 +C = bc0ad99f3f04727a1cde7552d7f4e5f852b62da9e267b793415f1f5e2f781c71da4acbf54cd1b738 COUNT = 63 -K = 7c8744cdc9d15a895552e471511ff9453637f068081843fcdd72dff8c909bc6e -P = 37c2bbbdd192a749c935d550 -C = 68123016ff9566e39d6c5065150f6b397f325b7e3221e787 +K = 092a016560194e62b043712e523e60aca0caaead3350e77590178cc70a2b3d98 +P = dacd9cb2c6d3dc70c7c82e4618def44a5b56fa5aeec2acec2833a1020a4326 +C = d1987670a2397a8bae4c579db5465b58d15ac7cdfed571156bb73ebe7a9fc646b0cfe625d67e5e3e COUNT = 64 -K = a1453748384949e875ef465f411783a1e1fad0dd6f99e9fa18fd2fa2c678536d -P = c0184eb13de337087f6a17ee -C = 8867172ee9297ca238296ac49707b07889c13ce9df3487c3 +K = b8fcf849402dfcf9d9ddef22cc43d326f816b6b6d7c588e49b1f33444abf8f9f +P = 4e6f8205e760ef8c340f2049703a9f1115fd87a08a128d5aeadbfb025f1e78 +C = b9177dc07b7685b7e4e2095b442a0df8cb96b9559b56449a7c20a736bc17e7b387b1f66889e4c58c COUNT = 65 -K = ca0c48797af825173d04761ac9e3350e57e0438aa51b0b6d5fe7e70d5a9e6614 -P = 8b36a655007e0659f12675f8 -C = 8023da8007a0cf95bf434d477bf9ca3e8e0cc8731d1f63ee +K = dca52615554abd8f20d3432ce76a0d6361e4e96d596f869dabbc101a1b8fa970 +P = 3eaa49326090e3eb9b852c9445f3d76d10b88af9d3ec0f741f78b50d88b385 +C = 0b9f1c42c1c4bbf951324e524245b2bfc460e07141d1ecd3e148ce32660d7877a9027898785ba14c COUNT = 66 -K = d05c3eeb0448e778622f4ef58beca8802a5a6f7a86510f4ce9b3eafdf1d286ab -P = 9b40330bc6bfc68480962e3f -C = fb8f21faea492b19008365a4a97c5f9f90e30bd7f42fe110 +K = 02f214957837c2a339ad3a2791767bdd8559ec9d998b21c3b02f2faa131edfa2 +P = ac48706b1caf86fad5138f977068a9edde864afdaa47971315d79724c252bc +C = 9df74269aaa72cbc6f8dd62950fe708c8202537eae7df86a19a9d52e883652faa17640876760d30b COUNT = 67 -K = e9e436d2753eaa597a5e7f4adda931891815a26b1f9d0667174ec812604bc6f9 -P = fc3499b43b19449e11208b1a -C = 7626c56d15712adaeb902c407ce818f5326412c7d386961e +K = e52f96a856e5c76119ccffc10c1fcdd73f886faee67ebb45bd8680e297c58978 +P = c712b76bb08e971fcc165a2b71124b37378886f17d8afab80c3eb607dce2bb +C = 2c83e4f78a0aee65f72970bbb30c0c43a24419dfe2cf02a3b48b51e40637a68a66a79e1884af68fa COUNT = 68 -K = 2f2b25cafd91d8bc79c674f807bc7161ac248e8214754d6aa92051955e0ca5cb -P = b66307ad06271fd1b0376492 -C = c996b7b12bbaae592145688deb4881bff2ac7047b105ec68 +K = d6f2bf7e3de7a25980ba29a3abbfe06a7b550c46c5c7416163014f5c4173d38f +P = d47b26471de88bb70f0d4b19c896291d9fddadc351a3cde40d203f90285d03 +C = c310041ec73693bfb302dbfb6fe8c15a4ba135ed567b1f6a7ce1c0cb5a40eddcf74e71b25d5b1c91 COUNT = 69 -K = 778d72bd5209447b77f8f2ada4dbb8cbb2b1ca12f9200ba161178a558ecac963 -P = 854703f4d2bdc174a36b4bc6 -C = 711a6e087ad220b23cb5abc0832722d1342eb142107cdc51 +K = f3ff35ead1bd0aedae284d94302acaf2a9cf07e4c84755b6e6c672dd7f597be0 +P = 69d385b8741e74bd9c43f8e7c62b56ccb0b060a0f52f1351b95a6b3482dd09 +C = b88785fd18f6527058bf0d586a8146454adffa260315d2050cff8a054188f830197937e5192824ac COUNT = 70 -K = cb2be1344347c211edd354a90245f9dbc57146c95cb439b2c1dc8017ac8fe23c -P = f769b434dc5b63b95c9be5da -C = 6f9cfa1db2fe64b612b64176875752499cd6320e432442fb +K = 74024f2e7d60961bfa067e847dac1323f32b521a93d69e7ae4f0d77979bcb520 +P = b1e9b259706d018243b836742f2ce52f44aa170d02e519ab589afd51d39b2f +C = eae465f1d003244741a976a18005b9b956297914bc63d307c5b05f4e38dda482584f9e4dcb94b95c COUNT = 71 -K = 00c4de333a5460424acbc852ff7b59d8f9c8ca5a919b0c9e3c19d40e47b5362e -P = 6e67b6d1e08635556b7e2b55 -C = 6140ede8d720e91294a66a2ab671a9ee6ec4af4e3cdd49a4 +K = 9d25458a1dc535d1add4ca6a5a85c586090ab76ea2e9143431ffcfca255dc274 +P = 4ea91105458e464047ad609d507508889c50134a48ed1c5f8a363a53193b35 +C = f5264fd0ecbb2c4f0d641d4b94ea075b9e0e9cec81f7ef0976ff52078ba0c64986239370fe005521 COUNT = 72 -K = 28105076819005551f9c319457981b8c7cc4f50669eab88d1e73273fa613e95f -P = a9b994896cc6ce53e10a8877 -C = dc7ea4acef2faa355d6518f81a5baf24fb10cc3d75515a21 +K = c809fde70acbcbd1a1930f2ff4d48a5521eae842e3833309ce860105b5ceb611 +P = d66897fb5fe16470375b9d6bc8e5a4ce028ff7cc29fe17b74b1d8032132b11 +C = 061ade86f4497c6f473437ad84169a01a82e2051e8694e08f580d2eeec8f9166bf45e4c59a12dffd COUNT = 73 -K = a4a2b293e3153e76c9b5cda7a2c722d996058ed943a64ee28d413d957f2efcc6 -P = 745fe4373495e37f784e471c -C = 634dc80a73f8ce3ab2cefd4dc0ad7c4d8fcfc442d930a739 +K = 6a341ac053565bf86cce6958d9e2940d3f0ef628422823ee79d25968a490c2c1 +P = bcd0b5eb2c53d8940c0483d58dfd65b9d79bf52aef17e5e7d1649e4c98860c +C = 6084c34c48ffb828d9ad0a225aa2d55171d86d386a1c63c8e79d4548f080685e0d7edf7dac2d3142 COUNT = 74 -K = 897421baf87f2067bddb54bcd93ddc7407ed3bbc82e02a784550686bce1a712d -P = f0c6e440a7433b5eec5b8f33 -C = 8a1308c4b9101e8a9a5b225d2feab759cfc990529df4bcba +K = 6b5a75cc17a1b8e428701250c895c7ed8187a79f8244597cffed75f660d45c34 +P = 4a31399854acfae661869a3a6a474871e0fe74f4e151470c3f61f0b15aa845 +C = ab0a5b40caf0a30decc9e20286e01d2272424add1668a783a973b00e9bdcd336330461eec7a0ace0 COUNT = 75 -K = bccb2ec42b2bf988443054afd6b3bf99dab298f9a3777ee81419a50db655d727 -P = 5c39bf67bc62df120a528a5b -C = 5fafadbd334adc1e2f5af627116f6cd7c6e7674ac74a1ab9 +K = 2ecc84704fdb69936fac9e8ae18e99c149f9f6c4113135540d63f6806b78d917 +P = df9fc573f3ec34622c1fc58216d38344847fba5f626111018d9c44038e7405 +C = ae23421ff0e4957502d668f8804e4fa0aa6cd4d58128d8d8e0df12edb0d3d5fb7d47cc164499161a COUNT = 76 -K = c5ca3140d6a63708b2d261fdace158513a4403737f321750f90a009e19f4afd5 -P = 606443fd6c480e902608dd81 -C = 3359e904dd6a301ed6b24ec6f240adb8bc1e3cd78679ae82 +K = 5f96eafe200033fe5a82e2db096080e9253944f1743ca6c2bddb5336397cfd8a +P = 89b6293a79bc85e812d298765fca3cdd30c18829e3d8a7fa37596b8b4cdd7d +C = 3fc70f62bc77131d9d2e21879ea9d9cfd09aa367d5f0ee30d0de389df2802e37a36fd7aabf8e7dbb COUNT = 77 -K = 63b8a0d27e00bf0d734d808ce2e0ad92574e3e55e65386cb264f4c49b340e69e -P = d51a20e9c5d3bf0d42b97cf6 -C = 922074671f88d48280f50085f1af26dae7bf541aa8af8fd4 +K = b476c2e2552f731da44fd1e782fc8471339d057eab5d7e670da60622370c18d4 +P = a0d0d6f08a9c64589074cea84b4b82a742567bc581756eed8eb40080999e61 +C = 0215b49884e3ec929f47bff1f160025182aa2f823f1eb06cd5ae8e322d6cbc99fb4d1678fb1923c7 COUNT = 78 -K = 768da25eb51b662c1d8db6b7a8aaabe35cd2f0bcbbc659afd48d68d821d6baaa -P = af5f45fdc2f29d7ff5d2b7f1 -C = d35d4c0c34f256a0d83cbee9e3737d44543ba4170ac0b666 +K = 96d227e5425c349f186baa84af340e0345d43a050fea27548067415da8eda2a6 +P = 31551df549a7beda0437bac49e48cc6e13e342585d4cc5e99112f18a41518d +C = 78060f1c2538393ba57f472fbea0cc8ad53a95eb1289d74074d8d0a6120efada3cc56d9a5321500f COUNT = 79 -K = c0952b096e4ea61eedcd97a0c526d9b6fbba7e1e8193d66bf3929b47b54718ed -P = 9c7365ab493b59146f9ed49e -C = e05576deba0bb9c46156a7d1159548bb00a69378fc21531f +K = c07782279c36ccf832848da1284cbbb0f3af91a64d29fa7465e6b185a6ecafb2 +P = 51164269d94dd73105c7e758ed3f37694b6b4b217ce629fea460ebd40db778 +C = a6d1bde9a99ef921d7251a3ca02f616e107275c5bc940508a33c8768424cd25d6ab5ab63cc152744 COUNT = 80 -K = 8ac34755c03b15f20ba5aebb409818831a0785181d13460b806778d0ce910594 -P = 0cc4427410227fb31dd610a6 -C = 0bc2df78d282254ec0a6835b9e342c73008a7773f947f9e7 +K = 03541f50dc701afef4ea1401da452b399bbe512799c9d5a3f8afd2930d8b84ad +P = 9817c2ae56d928e9dd282a16bb7fabed789d2093a900b9ae73c69af7205d0a +C = 91989d51799a360c25d6a70b318065770f9255c6816d5f2941a8a6fba4bd66bb683134b4001e6e2c COUNT = 81 -K = 5d2cc4dec90adf14bee61525f887f4fa40f4cbe9ed346c75febc6b8ca1b52c5c -P = d42df321e3d3ab2995e8bbe2 -C = 9a4f81d0e96baa07ebdcc0c3efabc27fb903b49b230ecbc8 +K = 9ce48e297d0f4defd76d5c84c7240918ec85c0cc4cfc27353e4b8554f8880a7d +P = 644e93518c9a33c1f2500c655f154c946229afe66ab46cf382c1f1b9ad0f77 +C = d5fc6be176ffa7dd3026550aa1252e005228da26edc309408818b0e2599f650e98672003f8c8356b COUNT = 82 -K = ba8699338da00a92b382a7ced30db87c0e992dba251ad6f62de79045a7aaea73 -P = 54addeb7e869f3d9a491aaf3 -C = e385636760a91d035a1f51f7b10e1510840c87e2fe356a38 +K = e18fff9f3a24c8003d88f8bf749d1cc131969b7eb42d0e701ef257f9ea19b7f2 +P = ce397e3714e1a6ce1242d4cb51928f4ce0983c3b6f0d24d010e2294289ef8a +C = e2a46037db2b4f6350a7a2d75e676548e0abcff46ebe05889d090f1f17ff12c8336aeddee3ca8ab7 COUNT = 83 -K = a84cfc2c5a7441bbfe383a5f2f4be3f0027d757575b544a62d62e540a490d580 -P = cd53530762d3c9045194cc9b -C = 39d8240532729cf944c179651d7cc581d93456d89001fe67 +K = 79eba901f791db978a4a549b10985e72342f772ac9d5bc969a8564a35c5d4571 +P = 3b5716cb7d408bab8bb341b289428379cc8ee5f7e0179d21c220f66f9fc6e0 +C = faeaf9e649f33818cdddc60433529a7bb589d3cf828ccbdf3365a3ec3f96822830a95d16d94bb697 COUNT = 84 -K = c7271b28de6049aaeec968744072a026cafaf7153378b4eab5331a2241311e30 -P = 0a36104280750792435c6483 -C = f8aeef5c52d43feff0a8e69d347aa1d198388b58104a2b36 +K = a94ed5b7ef0d89c1422b3b82aba1451df5cb2498b8bc6341624673b02820d173 +P = 957eaccf3a09e33b147d6f3a949f6f1f04d24246d90e920e66bf867643952a +C = bcee148b14d9a42a90434511462abd93e1295676445d0bd57edaad6d3a5d4934ee25cf522f48950c COUNT = 85 -K = 87312d728d43f142e1716ceb6eecfb972c233e800b2d04f92e4dad8f377e2ab7 -P = 6e4c1f274e32152b5de57d56 -C = 1839e25ea069deff399e793961466596f3551709d9a2b65e +K = 4c5dbe4c6e1fb1280b76c45180876da795530d5ccdcdd949842d226d0a9593e1 +P = 4361d0a21dbc8555a58d8b2d4d786fc7b3ea3f6395e927affc95c284552a0d +C = 107ae6bb1fca4ac32fb0ad1716cae1585d18e6a51cc2663c992d2cb0f8d476041ad63b1d8888befb COUNT = 86 -K = 973e02e8692b9cf8561b12d196d7a4985821fbaecd40acd228f9b20102a5d455 -P = bed9f27a5d0d2f3ccfe7d66d -C = f9601d2607707eed51643461f90497604724cc202af2d934 +K = b32e7d3a1fd0b15eaabbc83189f15b34059c6fe539645ae42689229e43c1eed0 +P = 4c393ef0cf3f263c6242afbf7f78db2c030a4762befd707349dbec87744b5e +C = c57f9166d4238daaed668d325a1a07f3029463623e9e7d83fb93c13a6b0119e6793d72eb01febcbf COUNT = 87 -K = 3bd59eff41d4c744f0a1aeef2888b3016f340d5141ddc696b1195ec5410d7721 -P = aa79390e112f83810aa44048 -C = 8ce2b3afcd4a7905c08425a8810535ce42f2da8b223440ac +K = 2a2afd5a36e995ecf41073ef8f3bcd52188ed0f3a661f2ca03b37cd176c08bbb +P = 74933c9afc0d70614a1829eff764114f8eef1c0065bb5b7abc57135b752a10 +C = 26194cf4d502ac361d917b80b299ad16ccb82219bc3a51c16c0c4c705a83b38d455d622a8c729aab COUNT = 88 -K = e25fe4f8090101af1d9e388cf3f0220ba57e35c523d0ce65958b4fa4d525f7c7 -P = 8b67091dbbb240d08785a932 -C = 38e6da47379861f8c6a9375872508cc7896a7fe5b471ce1b +K = b9fef600efb78a09bd4dd6d90f6ff9625097541174439f67d08c4f6f2f308a9a +P = f8ef0285e52adbc391ebb4098fbea9797f748c6a7fc19865d6edc6c1112ea4 +C = 74b0023205a58e49694142db5ecbf100b0a3d137e04ceebe38ced97c64106e46b09181b914d43d32 COUNT = 89 -K = 0679a9d287134f0bf34ec0ee5fe2499d65a239658f08f15320aa707ee692f023 -P = d086db0bd4080f2666734099 -C = 021e8cfbd052f2e6b1c5c93da3fa41036b675e313e73e786 +K = ba733283e01d97f674b5a736a2cf5ea34de4ef3cad71f4805933a1daa4d8f165 +P = d0476ffe34f9440d2b73aa1b84a3bc92000e24db26e88cade7610e8d6e972b +C = e0d19b2cddbc13f858c6ab96e05e1933f625ca45cab354942202ada9004ef93481e434527ff7e6ee COUNT = 90 -K = d440926612ace4071aab16384f2d81266ac2783e5b82fdd7e4ea0a4b22142bc3 -P = deb5947f3a131524e2620362 -C = e172c704e0ffbe104d3ea0989b4e7b527f6f3f84b8f4ba10 +K = 9bf678f9f9e7ea802c0cfbc08c6f28bb7a1c37bcafa09bdfb74551f4c87105db +P = d1a55348d21069fafb6ba6f1bded4f346f9eb7e84c10f99a5c3eedc681ecfd +C = 9f2200efa125d114283e0ba520c9b446af82c79c522e01e390595257df850f8717dc202d81431dc0 COUNT = 91 -K = 9a1d25ba4aea02d725bb89816d5c3e07cc90719fca63e53b14413a2c35dd91b2 -P = 61907aa64c75422ff7c29fef -C = dc3ebdaa299d7449c6750cf5493cd12727e785c1df8b1aa0 +K = ff39a7f730d9804d1fc18a220110cf3938efd1ccc334f9c09e06cedd62e12684 +P = 6915be8bfce6293532f9d999da3ab8cb4e88160f9dc2b49941771abc8e0bf1 +C = b9e4d3de9a9c52d73cf14d837a13033eaf2aebdd93fdcd0495984cb95e8cd83f67e22b0d9f8fa6ac COUNT = 92 -K = 632199bab8f5e16a83cb6aa743247abe736c82f070de2a054fc54d3395554002 -P = b467428f2506327a94997539 -C = 36a3e87b2f8882486dbeb610adccaa16f162af6a9a89a1df +K = c7d3b0cb1d4a9e834963c8c3d34549d4ddbf0fe856f1d3701f150c7d02c2d8e0 +P = 73f04479088da1b149cdfd18fb303af86017e58bd1ac66915ea3feec36b02f +C = 4ff5e8a46757cf4fe10a5765f2a426b3d9658a2354ed2d0497abd3f519fba775469e75afd8eddeeb COUNT = 93 -K = 44c0afe928e968c15a7ac3b5d31669d5326efd7466e95ac75a83c2c9073a910a -P = 8a0a2257412f2c6bc4c220cd -C = 9d5a0be6f2d334c3e249ed688ac867415ba2d2ffbd2e1f6c +K = 898f5fc4849fc6c3120bb372f688ab192a02d4da4abe0d0bd5d97c8f625fae1e +P = 64dc0b8efba708f772e53a54527fc55a6af771f1d49490e59db7f1a832649c +C = dffa6892a0e45a7652d28766821459d91b1ce3c1522d25d6512987bc570091a3e997a38ab71a5146 COUNT = 94 -K = 0f2fb92c76c9c5e40b42bd21dff6da4a69488d8c5118e758daeb012cefaab3f8 -P = 214985d0ca177c017a19e895 -C = 1a137cf4120175730562e72bc78ddd063b76fbd176be5c55 +K = 5c6936fb7c079762d833fea52ab2a0db7a454f68edd21a8869a159650e297466 +P = 0a8ddd9c190fc2499660931029a221a4795e8789a38820330ffc6a3a14b932 +C = f826db0eb812c5f531266a141e0b703a2e31056716c528c976a0bc86f71dce998f0ee46e905cfea7 COUNT = 95 -K = 07db639b673ef82c679b4107070c19ccc4caebeb8026a35a1a207272891fc1c4 -P = 30ee587371241b2db07581c2 -C = 40053707df288abdcf469f0a3866d9a7458530d83a6644ee +K = 5ef5cec2766af2bd58d009547e17ae113d58228d3c5a432bc40176671922f582 +P = cac02152541342507115076abdc625da32756a856b7ae2a4bb60df3f2b133c +C = 4fe706ecc8c300d14ab0ace880a88ced24661f715e0374bf70bfc710713f5df5ec09f9fd6ee2cc95 COUNT = 96 -K = 5b3f4674563e5544442a5ddac18e9ee5ae065df45c69c140a75bbb48462532b7 -P = 480be3b54d81ac10d3e70233 -C = ce17bd8c660470a5ac71d0172ff2c0586a6578abdfcb3edb +K = 3e64c4ce2478277053804846864529a27018f23409d07f09e2e1298c3255e6c0 +P = 44476459e248387816a835a42b97530232694281a75dbbbc5b357703104e58 +C = 42760e1787fd4201ca8fbc327391c4226c3ff643d7f1a75f351809a6d3188d2c936d691c33f6dc74 COUNT = 97 -K = 42802c9da90435a91805f2e3b908b6ad0dfa9434843b8c21f0b2ca4df9ff0efd -P = edbd0c91b07a3b58f4830462 -C = ef27d009e4c0dc76b1f3de07e93f136b57089726e794a173 +K = 651b4618ab419c8814f5a9cf247519bf52cf64924412774b0cadeefeb42f371e +P = d18e73cf26726dc6e3750a3ce2ea67d7e53221536ba5a4315a43144b571b3e +C = 1fbc263b2b917bb156be0efab0a11e537a6649a034c34b4240edb129f77514297fb5fdb2de8e73ed COUNT = 98 -K = 991fdbf057121b1b8983ad1518d879bd0896812bf71e096948320a9e6ab6e4df -P = 845bfbdbbf3e2596960f8f63 -C = 94cc2f0db9924225f5ecad16a6003b29435cab2cc367c0bb +K = b337c373ccc40589210d658d04ce90fead4cd3378e3cf013475c18e26e7482c1 +P = fcc557b591f705f8e3bf45028376ff06a1e896ad454b481a79fa9d823a99bf +C = 32a27858515dca12f2aa09ca9011350cba4e5659e34410265487e0d2884de9f9b610aaf3908ba9d0 COUNT = 99 -K = 9868895191aa07c838b8e7b2d9608cd2316500ec7a76feb221997049b2f5afd0 -P = c16b3ee0f18e57e2d32eaacf -C = a2db8f71f5716ba04c63a230ce8e661bf680220bcff97d39 +K = e45b192ca347e59228a2cbce5742e710c4b0f6ee36200af37dbe71a98bd3e01a +P = 399ecac75ab871efc1715f869609f0797c876b533e0a2541496389aa8bb6a2 +C = 7afe765000e687b73863e8f206143abba589246bd835a2d10da6bcdf6cd40fa7a341edd6eafdb3d5 -[PLAINTEXT LENGTH = 808] +[PLAINTEXT LENGTH = 4096] COUNT = 0 -K = 89e023a5157f5f64730d185d87ba8a48b67053f55754e5b8899f8a32032dbae9 -P = 031cae314698097184e5a5fec82d5f6f549bf29063bb99d6b9ad5552ab91a8d93ebe41c343e07ab4ed9ec9cdaee9b11b4aa79860adec4a50d162c9d57c84001b1322b65299416de92eca7f7e7fb5afe07fa61743514bbeaa763806f33a158b31e77418b95f -C = 99149492126e555b8b0a38b0adf3e3dddf76a4d719fd650c82bd4bb60e8c6090dbc5b75b3095a1d429503ae91ebf566beab58c8019e01b02439da766f8cc4469bde18bdc486535e7850c7a286bf2c0c63996b810305246e68d4a3a00925fb7469fdfc5eafe1020c8db577f471f291586 +K = f7a9dbcde9806b9924031c751d3883cbf9fcaeda6ff25d4d91192a09b13521e8 +P = 58c548d1baee08a5f6e8b61b8c8215e4b04fce5e2af6594a5fa9e8c0571378ebec086a2c942295658dd7bccd16ee6937dfe892a8715772f28432d4085370c65fff40f1f50356eff69dce5e7be550e6b7fd98f5b9369e0b11cd9c5c4d03938303001bca9afad1f25797b92ef6f02adafbf5ad59b19f10028cff1048ccee470aff5fe358fbf7ae8561f91c840fdefe54d5b7ef41bee2eac14d2224d91f327d3b66414a194c09c95107d194e970f19200e796f6d67db9baff6bcc60643712dad0bea648c6abe9aa97e829815ba1606a8265e4082e39f867b3639afc1df537a0a9c459d65f0f4ae2c99c1150de6d23f49bf9674f1d1d809c688ae41b5c3804871b3463688c0f2cac3c8a11bdb405363d4f547e9f6bb7acc3137563b89f31f88fd1a3722e53423b79e1c094b11725c5cdb08a956d36bfb216d6a412e6b8db3d1ab9f8756be9dfb69f4909b70030f603014a8b4e16e3490b72acbf0c72847e125ae67f90ada62fa60278b16151801f833dad102b88d3f721d10b68008d721579487fc5010dfad883f4cb0008d12a758c64fb8e03e141ceeee2ce4a6b1872593953b95074176262f6f04a43795fc234e39c3c973ad6ba7c99811b45a193d6ac9e40f6e556fac5aef85e103975c46db3d274f40ea4dbc5139ea9e5a9fab341e86811836d72d0142c4314c915414e6e774f74fdb3433bd5648809960a66726cb30c04891c +C = 90b8bbf9729a1fe2f572db729d03619aabe886fad6413740404e40811dac63fca8c6420d06f87bcfa064ef271ccc6e9e6f466cdeb3c09919e71e0d3afafe134d2b30238c61f471098e1d99079b4e8f75ce44b4d677a8eb98b16f72c4479930d8ef4055a45dbadc5603ae28b10db0035f35b33feec013f415a6f86e924ff51057b38d0c1461d1422dfccd933f25c1941442af5612037436153c7f198b92b94da2e1c476ef1aa1d4dbecd18263af0da75afd43e59561b90e13fa6e14f2b3c0c14942b0039a4c388185757ef7c995e9774dbf10279c95bbfc6f92dae6cec74a9f87cfbc199064ce486124fa35523351bbd11b09f467607eb26fa64a87e939d2adcd040de502c3bde89c12acbfda221f9955a8f46117467b00b822b752b4958268970f048bede6a89967da8553aa0d98b63b5b75f58d843e145c7a2a67f345f03e4f29ddc3586bffe9bbff5a1aa7c04c95f5c47bf26e2bb622ea178d7f7c79db548c6c8a4a599cf561efd91b474a8b1867509d3c86055aae56d09e0a2f779a3e30b6c03e402aba8b6995bf46db2541bb755f2b13a7e873266bf8ec5816b9a6f73dfcf6bf3d47ce6d640de8f7daa5abaf0d647238d444d2d842a63a3450c0fd3a8e1d7ce4eccb54fb69ab06f973eec33d6d80f0bf7ea3dfae26c969bef8224f90513dae6e6f81c010efc98e8942b2fd04d5d4b6a7ca1eaffe131fef0b8bf59cf06d5a9d11829a03e97702 COUNT = 1 -K = 61c180ab9a5295c9a1b4c12cba5058dc0713d8fb317513257c409e59bed13cf6 -P = 11817dcff88a00a093024e9443ced71092e3d3fd25e1564eacc9dae0e7e65dc831139c2e1b6c40cc48376f656f1ba2251a4e86a4ec1aa187c891476740763c09a6ef6bb5c523199b855dea8d9e66d331dc389d570fe6658070aec4fcf4475aad2c203d1b41 -C = 98a1a726cefa1e08d992defb7863eaf50f0d3d2addf42f33808f3f073866c5f6a69f6c06a67720f4988bd782fb4d90f2694f347d8b2aa6dfe7644efcbe1c016d117d4d666be2a057aeec5c2cb6c6fccbde3c66aa0ee1cfb87da42b7ba3b7083d30e598ed8e1d820d82cd13385c6e81a8 +K = f0611ea03f385d112e1dd5289bab433db8f410976bee1ed6d368bc5d88a4f2ec +P = fc3e7d7fb7e04130b58e8840d573585b17d68cdd94d8f2bc7699d4b6306ef879d2937bcdf4f0bd001ba7821d8f474deae9829d5ca880b2d64dc5c4dc8d1bf776dd5805a90ef1a0fe84f0eb2918ebcde29b860efabde3910dc57cf5cbc9de7f6d8eab3daf44b798e1d86dd22353e34c836f1e418f31557b3a34884cc5bef869740e76641aacaaf5b5bf99e100f4ee41040639a48f39615c77e094c0edc0e4f38e0953f069026a3e9e86acc6673cd12781482c83754676ae119f3ab6ead3033655018be367822cbf441dd01fdc95e13ff46afa91cbd8d8639e0176b2ae817329f1b5f3f3c2bf860132c44e16b28d93e3ecc46bbdcfb06a6b961d8f6b6496d0974a0cb08f97de29c1098a3c1580cdae293a0dc5f6e0f41c1c69a1fde81384c8d3ee1dab66eef6391c9e6c9cde3fdf72966405d68be666ad9bd1fad760888fb1d7e52c7f46d94d9611fdc8e56e49ec2b3491290437700547be0dfadef38a37362e831932366fb13609b6b54b19207201c62256ec964b8bab82d55301f38cb66d0e69e3f211e44088f464c26222bf1c69d10c075984da24fb2a1e8111a995a2b0240f8adcb04900703061b039191b000eb3b943648718f438dcc11c517c3c0d3c84cfdefbe5da5f0d0ee2b687a7f7d539de538759bec4484ad2927e92592d2bcdebcc2de7327d1d23a30c66717ec4febb2827c40770d19ea661737611d52027844e39 +C = cc6937f425c7e2e00271608f87f5f9b3f31de64bb65f9273c7fe0a29beae5310b38405ed721fb14cbe32532e290b6fd108b94c335ed152574da297e2e390aec371fc5f7d1f08c414ba055e55652a68356c914e2ab228bdc92f2530aba51adf3a6f396a5657ed1e97a9658846ee165b6e8a0272122a2613c20f01a68f0e9441c49d41d5aab775341f8a01bc6a1e13652630cafda50e57b1d8602f5c825cf00f1ad64dacd87b4f3280f6f44b9b1d67e004864f5e986fdc89729734473df297a537435aaeb3c42be6641b1cd1874d62bab32f99a95a48ca28b2f6865400d5ee6f5f8b5b1a9e3354fc63008af0407715300891b0be2e13c5a35c720764091e83d6d3e0200cb0e29eb1ad1fc4af8dd260e52d92cfafd3d23621783a4e8f36a5c0259d8fca56e05081676d30c0280ae51a07a654ec832a442d1d5856a9221bfd2fb00727b83e5242955f2f0bdf367733ac3ec09bdae44a90bc2f7ad6cd76ad43f705be1670df87d85320b58be3a7b11b00314f369e21827b59d6959173565c50bbb99766f55822a425c7588f1a69d6b789b8878041de2236b2bb1f0941653a709c065332169525d2453a3126dcc225e4d9801b2b6037d8baa5336d7f279cac6576bde0e1e3280bdce16575a112de0ab609ef3cea48f7fa412d0f48acc365580b0e00cc6491ca2a70c48e7edb9c68b05f190eec549d2815c502d791998bb543ddd16e84c866efed5291fbb5 COUNT = 2 -K = 674323c6a64ea51fbff4e55f03c7b0572c5e3b5c9440ce5dbd0a72b45a86b5e2 -P = 4b61706dda24125deea11ecf0ea45194166fcbd9c15176b4a0932839360d410345979095eda34781e4d9d08a354dbf22eba9238776dfa5d80572bfe1fccae22915599dd2f24693e6211ff22c3a0cafef98dd865fb5d28d2fbd6a63e99822371b5e5048233f -C = 25a402bf211cfb4a049f8648c8a1bf53969e32391056b21829609fe0d711e76c0d197987645a80f085c451396dd6d787833fe792455dcc77c231c7801378f6454f8282811a0cc1631faee32524590d219ee10d5e85f72eba28a90e47f2db8ec280cee2a5cb3a98d3a5bed26945738a74 +K = 4bc0ae8c767d5e30a0810f1a22c32431b150106769c966a5ecc965d886ca207e +P = 111c9b1d496934fae0be9fc930c97ecd9318a086c41e74c17121388644fbb684b31e2ec6d03284d8240325cb0a8222bccb86f6e407229ead08f6a86d180d5f187b96edf7acec4a4facc57c5f215e98ab5e4cd125ca0aabb2be9724cc905c3675306dc0566eafa83c1c35ebb367bb5105b71a39228fc16a1e38b467e31799cbe36cfec996a307a3425ecd183e2298fd8a2b66c5c7fed133de579e22bd488a834eec343753b0e95efba573d276dac36caa0902795f2a6fe7195720d5333ddb7e3289c3f9b2f5bd8d8efd7e524c9b3c1a0b8dae204423a98df0e5fda8f8672b2f862834ed21dec192deb1782058c62b63f0c0c55deb07711f6fa54550dfdd77c2ef6a4e0282cc9b88968f112caa20f643202f38145b0910b13668f841af8011f87719063b4ea9dd42e3d29226c2b67ac53906b8201859c9c6c3796568bc234ec4544768d3b1b5862b69cff942e1938c4ac19efeb61f808101352723e5c3972460dc8876313c463fbd94e8c2f5339d38b0fb24e18389aac12db5f35030ec1e1cbc7caa8352f8ae81a6f802810d6d54ecdf7297b99f04139c047d24077618ff0005749838e0b4d3aec158e169117fc9c0276acc1d045e09ba3fb7f5632eb7b6f49bbc7ec572b8972e8e73673105551a8430e85b724e2641840c2daa798cea1f23617c91fdbde7a58da8b0a5e480b21ab05a3c878f29f0a95fa571b3af17a35c268e9e +C = 2231ff6d373585e5ef6e702e60569a3d522171b35207800f8af89559c79c9a04b59897301acc7d5ad95411141250f2a06663001844ae472b4dc149d30cc0e98cd13067499956c911236a6d19c0d4f8f3a48d6173a3d087044a99b7ad3bf3299b2e9108678c57e1bfbdf15a6567858ecaa5273ea0eafc499735ab5c4ae8aaa62c186a91f5c3062a0d799b6b6df458ac727854b809f04d269eefb31a9181690789e4459ce8ee9d9f3c2c6cba58cacd6bcabcb442e69b6b3d2bbb0f39a73ef114b6bbfea0f4fc2bf97967bf3b1f079e1da63ff036d3186038c829c98ddf0f76baff514a7459de3bf0bb694a040c8289436131f4ea102e82c19cdb2866acd688e35e8fca303c2d4131f37bfddf3b900309e23cc2db3670ce055a19197a53abdaa9e6083e9299ce1a52d2a0e48871ee5c3093c073920537acc3eaa62296ccc4f790b31603729d8ee2d1a4f8346166b40e6bac7f39d7ce4197db7c47f5e441784305a96c37cb019dd9e9c8594bf78fb2817c8cf5c6f2ade6ad09ce23a9fb1e2dbc8f14ded1af0104b2473d72ce5803016879cbaaad1a891b589bf1dd96082dc7a7ee173c74b41e1ab6f96312d27b14f817c2a020fae430d921c900a4b64abf2aefde58c9af7d9a7b3c40739bcc434fb10049692f8ed5532d136acedec621c7cde768bc4901dc6bf400a52b8465275a6cdbb26095e542b18e2a9da35e2edb2342fa28539d00fed81e92908d COUNT = 3 -K = fc8700b9dcb2c4ae41e4a66da296131b541876322fea061ac0aefdb85e79ea9b -P = cac02746bc272ab0882211e435ef0e750cd92db9b604a82c4d14a9b1134027fbea0f3b86b5b4336eb4328767daa2145bbe3df4009e0336e3f9b286501189588cc894af27ca8c1405d3f8a87c18619caa88c18878d6d44693c875263316d1013d7c43a9e12d -C = 57fb84e57e257a310819e12126d456cbaf5bd620ed35c5e59f0e705e8add81ad1ba35b0e8657d11194634f32d8ff45e70c3e2de80550feec22770a1d2f1d2f83bb1f992d435a3fa4c6862c514d4a4faf4d4437ef20084e2461d8eaaabc15c35077133df743617e7ccc6ca41c07b62f2f +K = b28f307d94b4c2c2bd91b9282dfb3f1bd09802bf1d122cf486e646413836ee26 +P = 841b6ea4ba80c76ca2e55fcec9e9f2ac6d2e6686b5066946741659e89ef7fd43caa78e453ad3a35042dc9ec14e23111827a281e693a31c4a877598239d8d4fc5f1294a079bc6712206fe9403b7d1927b95d30961c2da2bfc19737b71fa6d22395c45a69d2965b4027ac6553ef9f3c816b356848c983586d7dd362b9cc00ce740fd5a00454c10105101e892090bb249412a7af512039c5ede29d8da9337ba53e5302e1ef5da52b3364f9c88f4ee9483f6d155ceb2803d292056e28d32f841f45f3a7806a918bfdf08ac46b4685aa2ffb19e93ed53f665fea015ccab136e29cb68c7d2c2cc9bbc10b1dd4c0c20bba2544d48267b246df7fde544a08fea4fe6352d9ef1bf3730044d173a9a634bc2599384a04a9952d4a43e603c27032b73446ab2d4eb381f0246f18ef8d98a3bc7746fe95e32dffbb3cca3bc1760202e62925ceab89f47307f9784a364515e4dc7324afc202663c2082f7efd611a6987f17110dcb68ee49e058f25818f4ae34816b829268ab2bfea98a7f4317c58206d860a99e72b7daff80cbd6e8829caf11751ab65da15f2f05c50be42f9760e82a5b4660fde8961fb0aef293c5ae6b375ad4551a35ce57e235c4f2d6378843bae0629f776c7ef6bc8f8cc72cec2ae7a85f5a1ae448e3b720191db45e4fd760a2f83d3f5bb876a37fde1fbba1501832ea1d6b0d1ed7a6a403203bdc06f4b47e871c6694fab1e +C = 3e540deaf200c643ce3d4519754791ec7bce84d6fa7df7c7a0d3170a33c6066405a8b27845f3145446d322c5015decea560cac7036ef96c9b7c87ca8557faefeb5c2cb829a3ca099d081441234e831d4eae983ac16f844d3da3a2ecf44d2c82e96eab5e07b77ddaf42b4de492af3344c34d7a658b6fb1c7099d5728423e40ce3c31c3aecacbd0320a6af2cd0b7b6757457410ef09f1ead5fd7e2bedda078916671b6b0203894c76b32e0793d5f4004b00add5747e0a0bb467449bc7f93529489242e3e6a6d10321653b9b5cd2642e1ba2002e91d008c9f902b6cd6e16dce42e84044fb8a2338994fa1915f6a70e8a7c4a9da0b9e310e0c91fc308c4eeb615c9669c10ae2a2c154d96b6cefc00ddc45dcec174920ecb3da113c997d3874f83816320a4147a6b6ef5b91464ce66cf1b25efbaad3e5e56de2f2688576ba33b3eccae188f6a6962097273a866b322bdd53b90e72dbe00d2c111e5fbe226701e11c2689439344feca6defeed3c535912e6713cb9a37b8e3537e63d33ce7343988f4289f04f422149d4ee869ac27215edc1fcbb2305bdf23ce9cc255b800eadc2d766df1aa8240e8c41d11fc74f160a475a6ad6329414be650195449e69546026ccbf888605ad38326b637532470b92f166ad403443a32f6f61d37148d75a9736ab3d965156dcc6945de56278127b71a2bda51bc24f7d06e173c48ebff04241420240b08f55f89e1cffd13 COUNT = 4 -K = 257e5d08aad459d508444c5991fb507879e4ee4da858dc43892225e67a261ad8 -P = 56137dc6e2e9fe9a685680137846a80d4d5235d8f06a4b1b2f609f260d2e1ca89a756cfcc7b72df77d20c8cf368a5a3ccb1080ad31ce817776fd7d99f52799b3941f20aa199390252c81a945f0a11c8a5fbc49fd8e7ba4af73aee90ac99baec0e16be9ea8a -C = cfc4992504d101ba95bc4288f3b3f8ca83651830f82b282802a00e442735249432e637357fcac7a6123f49e3380efa9ec1765c044c6374827e48b5d8e4514dae03296f093ba4932b7b2c5ea066c60f24843430cfaf5464293181a590a7c435d2d77d338fe10e89b0bd6d82fd780c64ac +K = b8eca023e2ca253e964ade04ca5211537acaa0711dad22e36366dee942757c13 +P = ce3ed2d7eea232a448d3610124fa9110aa9441f8241c6b04ac25343abe7cecc08e5462e3d8479e0c25313903ea43026f2788db1d0136bf4ca25b2a7b1e4ba7dec7b2d51564485acbe3930f446d9b9ef1316daa1c776de42911e1300cbe705ef61dcb4efb3242a389525a87d61d86ee5e94b23147113f4a1803e878950787f3e1edc59fa0033b840baac1835e746221c2a7c2dd6bf9718e6aa7af4ea29d83bdb04f707ab41464b88f40f0d57af01ce8edce1719d0aaf88f1a480654c1e3075340a447a253f200959bb7be0fb6eb3a6bdebdcc443076aabe0abee8edade64b2fdf3a98e02475410c4d2d6bf4ed1f889c44163a0f89d0f47b68301b996d04ca931c9a1f9320b97661847b0f3e9bf019125f0004cdd07d17497d32084abfa8052cc616fa425f98289466770fdd7a4f9e9ee3424666292725efe49ee86a6d59fa439e2c144be73d228f357369183c4d03d7047ed16ab4f050423ea1d63457f0ff8fcb13e927ef50569e19c8a93f20decb8c51c69d29f1373c0ef039dc4a9f1594ec824b7331741b0d42168e481702fdeddc0e7312a257237d1d54fa0485ad86e96b10774b4b9479fe50b0b7ad364e720aaa53e42b0beba15cdd03acdb221010fb332b7defaec342fd7589d66c92086bd5898f3f61b0defbb89fe488b00b5a179e79cb382474fe653c974337a8a12c9bf2a6ccf1903aa28536c71e37efd67be0cb0ca9 +C = 85bd8cd552083eb05f0ddc886cb3284743bc224f55b751bcee5920fc127a8c4de9b526cfb2d5b262adb2909a052c87490e002d5b330675defacf25b7687c9136bfe0bb5cdcb81dd586e3b232d7a93854791da119ef9e26c5ceadd5a3b428e2544f68781956b21459c1b406f73c8a92079d468b1e27aedd277a3ba93e7783f704eaf005723056f0118303d53d5e9af04e702b78e9042e24274caa8e515819c173755c78adcfb863349bed6536da09300884389ea6f6bf2a48648dc1599dae16f111d06517800a4e5263ba78412a990c1ed7a2f3708fa3fcd1e554c6beccbd3bdd65030adfdb46255b9f454323aae09399b2f79318568f5d11be0e8f3af4af5875ebc0579e54ece462f8f1901cc3e9cc15044674452fa86f22faff659b8486ab3f4d07c2738ecda7fbd027caed8a3f1b270446f96b030d64cdaf4c8cf96c8e23fa631c6c7a568bddda460f164dbaba7033db29529fedd5965dde58ba14ebe84bc29f936b882db6313adaf6d9a3bcf1325725b817089f84740984e2792806556d580f373e11ee2d83814a562ea76095d3c0e3aa4f84aaf5a39d92404cbb0865a0e188177702e611b83d129ed29d5d47e9e298a85170f941d55ce701662adf250463433a664677ffeecc9c8838e6b806c212a42dbc54d7c54174e3d553295d6ef163b247ba5065c1652fbc0f8d29dcb1ffff657399745dcba982b68be96882740d55a69fa26a82b5856a COUNT = 5 -K = 7c4a1620048617c1c148f96f4fa6cc2cc91cd5cdd41043b49dbff2619c3515f7 -P = d0f09f870ac09030e96dd2c5687efedee5140b06ce5d227621e98f92aafd4d0f87c29d92c4471d952ba8ab9208f6480e1b3c90d0e2968761f53c287a39d9fe0bbfbe123dbe888ade3c83e7ff94a134881b2428e83adb8573546539e720ed22ddfeeb23a4c0 -C = e423bb101095ddb42a641bd478906c0e31647dca2e9f0c43aa0087507829e8d0c2b793060a000b206595db905606ebb1b87c100d285175d6bd9d2c1e6585c92338261e2cc96173fb68ed7d1bf3120cc4c151edd3e176f62a3f4704bb26613a6bfb85a87db23024a30638c2a5ef3ae36c +K = 3fdc7d5faee8bb29b8372ffe66904c48ef8602730008bd6e1c3d1778f999fb33 +P = 6d3346ba7905ef8ef4b2d6982617ce599a731cbbd68118b3a5696653665505bce0fdcab3b03d31c7ddc380f4fd637c16b561ecc7c576e77212a8a2425cc7470ef34a63d7fcfe2a93b5d9e974242399c33b62a005ab9dc9254dde6358a9ce47930c9e346fe4f13d9fac2da2171d016caa6fc29e845756bcb3571c529b3724a5bc5624ff57df6c105a61b16f385c81e5c84c9ee619989d00f40c3a08f0205b28a2bb283b843ac2b4528fe53f50c6ebeb916d0f375304923b039a61fa2310e5872d9cbe2b7bac163acbf86f5695e3afc18a2ae652b604004f1a05eca20556aa3ff9a88c2539cecb3a70940206bdfbdd2d209eea58237ae0a11c08cef190e4378bed03c522e281a8c475880a19e0ae58e71fb9e9a63ca12baa9b52f6d785a079e2d2f1c2458ad3c14f18aa120f2b01eb26facb3000f7ad2ec6cc3e2ed31d4087ae2d29cff582d7612f006592d2e09b7e90db34b1dff508c524f5138bded4a6331755e242ac1e2f8c2e33b2e36962357c0f804502764d94c82f8620617098d391e915fe1e8a9200f55f941f7ea5cfb1d3bbdd06242ab44969ca38cb53b6ce7c15ddc1240e4007402bfbb636a980f4b41bbd57ad85b2744bfc231ff1a2421471c7978f438e28e41eb1ae9be8636675552ca4e7dc3a76e16ba64af53c83b454afc2c3906fbc92eb06cfbce2f3db1f0c52e2db5abb5574c3fc2fba2dc4d90d5b750ea291 +C = eb94c67135f176417e33e5e5b33fd996ec48d7b167c5a0642415879ac47f1864a55ebfec094f7cba1dd1b7d2fbb37c27ae4aebc4fe2d5432111ae2db281066d1fc3e5b7dd839d927f831fe7d63435d9af55b53aef2d1d06bd152230263d3b6e447d46996cdd5a170c881ac80cae9d389e2a1fad3fd2288afa2a8cbdeacf54b4b13794fce559d4b32f1b892367c9119da246b5da50200b1b686e5dc08d3d91a43e02ab813995356c3d72d0faa3839a2c74328b2fcda323d99d161f62fdac5906cc7009cd5053bb12a4eccbdf6548d35619ec8626f22bb5799458bf4bd641417766c92c9df8c9debbd2a8e7e1686e3e3ce0abb0dd3d3a1a73b670e69a10e9be6283bc2fed19dfe0dac4abcd1f263f58c77483cb2bf63339c9f69d36a3d3ed9291e2575c401a7670b8a9dfb37572ebbbe19f04388be23588b18d9a923dbc97f8d545d5a3078fcf8252ece2df5f6ccfb509785b89c6598d87419f8773d0e4ddb1147557bdb2eb404f46ebe4114d43d9580e583588331bc0d3bb3143c6eeba064bef2d3f5fba417f8369754110681bc8a074ac7cccd89439c5a85b2b0047141a87614ddc2a49867cfee0f74a17313d1454ab9b36aa0f3cdc122487e8863482c2967a4b5b14d1d98142814155124425185eae7d949183a3898508e994188c7f5b918dd2c9b3bfce4bdedf9de5de9f557a5042b5c09ac2ec085b0518fe32b1bd40b40f58c6411713a5decb0 COUNT = 6 -K = 2a66982aafffa10d505214dd5521ab46757f88c636adc4a33ba72f5e10825e1e -P = d1838b5d1b401ad3d6b05a72ea907832dfa259dd235b947f38769e88f975182cf988f660dc5d081218d93726c755d844f8a6dc485fdbc076e1d7d4d31a5d198b14d39416fbc3282bf21523f8bf6bfc7e5dbd9b63f233ca1f51cb3a33e0ed6acdd337184b1f -C = d2eeda23327d5cfb66c32cfb5218efbe4cf95e99eb8e73fa96735e13d5c88654c952b8044341433ce03cfb6e03d6e0a1b670c175280404366ef449e407689a45b050130bafa431c7d95405e7bd420ceb948cb567e60f4abef4b9942a75576ec7fb4569dd7d13056dda777d92bb96d882 +K = 606fe7e66aa47ee29a67c783b298c9ca8760c193561b130705fc7926668ba86c +P = d09def03743997f7d561e0b3f47c7bb55e6277b0c96cafaf47b556e6827f180f17ab91ae9c00f5ac9864d205176d14a699d11f51883b5cda5ad9bc4bbff535fbdeef0081a9b3aafbd9041d37448d770fb81b929820a14570f5fc2320e43e83503c6d2b09d2ecac6d275f8671470a21897acdfc72a8f31c3f9332bccc82b2383c011392834f3ae6126203901bece62cd46193369343293f5836911693431332ed868d2d6e35d7832f2cfe4d527aacd95a2b0906a793d02d80201202bed3b998aaf02ccfe45c8d7902dfc61cae9222eec07d704fc54f0d3d8dd284cbe3427a0b87c2731f6b12320661a40038c6513b9103ae3afea7be95d07571a9a3f0dbbfde41a69f9b01fc01db23a725c561a18e10f4944045f6f55b88ca858b4c638ed2949ae19f3155600fc2c27ab60ca471784b6ea7688a0d9ba17e66dbca94f6f04aad8d6c9d9887a5bf48100369af0e7fd96b3393585d94bcaf1b69df5b5f3cbb4e58565c79b8a19c55ac5b4350507c5c1659015e37724d043b5e943793084327671bde48540c495bf9e2f5184fd93daaa858a77c8702ff70d6c95f89f1e53fd132b3edfd156302d8604c23b8865f171652f68dc1d9cc0dee927426a97fc0dc5c4172ddbee3949e067b7676db02e1fa54df54f57b7b1d3254e4f21f7aec1d29ffaada55a46076362821d636a8ead0edca3f7b53f0c9b014d85c79b2bc68b07d54617870 +C = 89cf86df0cccc0dc8700c2c27a605f9a4e3afde0afecfdbc2d89266dc6358327de1c1e37a1fd0bd068db6df9557bcceb8daebccd1a1ca65539d890fb281a6cc63a6ae3596c4c8e1ac8479027bb1dd675ca4b70b2a3c40f64ba2e3e4d06231299259eb918f3ae754362f30c7590bcfd1d196e28606edb11e8c6dd2cc1678caee15b26ed88c91aa051adf3e96212314d1fc245ff29e5117c49899bd6d8b1f880a01b8264d80c30e533b3ca020b3a27307d867d9d86b90e9fb46e7a86f801c59fc22d2b66af522b7833a308456be1a06eb82481f75e4a36de748aa464806e379360a9da11dc7b05156b366e06b27f34b3d9d431af6bcc7b5d42a92e5a7b225c027e0bafba4463e11884c31413d286ab406b5d42335ab98881ff04982518e535be63688e04ba34f9f07d92ca7398f856ae1604d310704f7272129b35796699a676056228938bbaf634c5b12bb7fec05b0e74936ab416aaad803fd9cae885eae1d4a36726e4bb5bd3f2aa1b079810ed3069dc591252cdf2d4aa19b94521273a30ee652389b1962ff6ad03a596f8a8971cbba31476f346ec9a605334a45b280ad2fddd975038b40c43e5916b3fe08fe5135f877726a7b190fd3c0f11f5119d394fb8dc346f90b62162caee049bb54e0781b62b6eaa6b2b63993459dc32345749c831b7b03a41317fb707b8d70448cc97c073e650158bad10f137f07bc3c5ed7b0d36f4ad644ba2e6f76941 COUNT = 7 -K = cfb16173a796f557a850e251ac7583090adb970fe06ac3dd935202e9bd3a745c -P = ed969aac1da6ced506f1a49625fbfa52f2d6f60c24e2224f2f1ec35e29f01aa68e64238f49e726f715d6b25a83d461d3b548d407dd2672522566be172fd4b4aa156f95efcf3b4044701f3c7d094d7d9f27022b723bfbea2365525e91b4796932ae866fdff9 -C = 4a19a7c34701ea1084ac2de4980682a63c7372fa5a3c4f3352f8fcd84f5f0c9b74cd5e78b63ea029a367faf08b3f29b1046c839d4cbae0cf9cb09d8010a894d883dd1058f053bffd87f94db9ec6402e84a2b91eebec25dac1e25bab5cc636ea6678e8428e0575e941e7db735b06b6cfb +K = f37d079af8d614eeb23176e37028290c87240689787b233ee2d2f278d1c479a0 +P = 25a0e5c0a7e8633a985cfe9a3a585a68b49a4aa51d19f6bcc819635b4c392abeee36ee11c5e10413f8f7ffd7921a3f739f03bde4ff0aa85e9671449485e429a504fa12782c8968e3ed2154f723ec8b30fa1a9efe4b87a65b7d4f87de8488c900db17794d1a9291fa8bbc62197424997320add2674a9f044941b5230f388504f389237c5fef223d9349d147cabd8a8b2c1c2ce2c4ce7f671cb4836ea5bf87746181b80a4680dad8cc070e9011671a8f4d57e719b421c550cf1a163de22f75fd8b59633a69716c73c304351d6c8c62c29777811e7aec1fc30f7e38037107865d0172be07b201ac1883a39ca10e71b6af8b42a3545c863b5614d328f112a022541fb3dfa8ab6fbee19ecee65e009516ab3049868c54c0bdbc750217e9df11df8d5b5546b1cd79e623b7c0db6b94afb063ce1197afdf653e1af1a7300d4626df7596992945d119ac72f3afb0ed1415f527bcf9c4c7b22836abad65812b77d46716a97c1cf459a558b705d7e78c85a5c20cb828140f3b34c3a782e2f2d46324f488c7825a1e888e08df7f3a81a678b16c149ba142bd5876422e2fef62ee7b5558615e7048f83e1a0c0b2608064f8548e58c5d6b2b5162232fe15c42babcb999765fb7b75f483651548529dbed9cf1cacee0f3614bd4db11c93c112ef160708fa4e2d7e8cc63c4391031509d129a6903ffb9f7056292404536a4f59e337bc35def2adc +C = d56e90e6d0e4af9e33a30990a0c0ae477931e9234e5aa76ace6855083778a05a203f6cce4408c894e15c6b27888b7f77c3cc200919f254138d5453b65bfb8ba5605e5da0042f1c7b5c110de024488b93ab76c8b6ecd591a8b74814481f70aec72f30633f1394689bae8828caa0e8e2267192ce9c5a55de3fda1b1902618c4481a98d1ce3be4d520715a6aeb56593d064fdfdfe7ee480da4a4f26d97559f32fa467ad2aac2f42d98d7cce95c493b72ed6ddfac703c2a02c23246a6e2dfae535982c0f15bd230de6f8c925d709badec4df1d84f727049395dd93fabe93b9df69043bb87c08eab36c95e1d8dee2cfaf7283a71ddf70c6fe418f0a4debee47054ff81f0a782dfe7a7391dd8777c96cc638244b932cf3ea971246201da5620e8db08843c27f8cf7128c1298d741faea5fc9cf3d50b64a3a0967442931fba10ad5755864e5b1b9473a6adbb85dd5bb60ea8c219723cb90baca94e93d192ab5d6b590f933a8038326935b07c3b70badea48d4cc50314ec2f2fe331d2662b024e22612a5e98193c1adafd150248db0ea1e99e25f5f041125d0065e9ae45bf00aec734286efe1fc059637893c54d0b5cae59fad55f9aad796aa0170ffd9e8edb2c33389b84d2e93bbc2f86bbaec03ce5071b1f4b06b902a66c7b3f1ccbf98bcc7b9ccb734bd1249fa809708f2fd3592d25ca3b8a88afebbc94128bd65e1fb9a61c6513c1e61117d0cb92bff3b COUNT = 8 -K = 297a0c8feacd90c80eb187dc416ee546dfec312777e978ca620a2bc3d3ca893d -P = 7b0d967d1b94f39c692a0a0848ae69dd3de7ca42b1890b70bba64160709baaf8d077912a31dee1ac6e19be951f0003f6df1795f9f69c6e96cb79514c3f2d287be8b68651131ed876133b7efe2004a34dab6f8b6d11e0bfc5583c6e42871bbffe277bfdba5a -C = e9e995a61bbf1857c1577323c174c7ab3bb1a1a3ab6d2821cd127eabaabba69b12e0ea17206276647618f57b4163d6e2cf50ac1b2d1e562b8117596a6b4cf21f44e42dda711a67ffaf6efd268ba881e5e9fe46b8c73e31d34b558a6f73fc3380868b11dc7a71607a63555ff3bc4352c2 +K = 25d6d5856c1634182e304bfb6cc3fa5c9f80f976c37d282574bd0e3912d80a5f +P = 57f8e0b0e3d3b1f52684abe874d43a833e64f2add3be6d9f2aa31398cbb477f53e35cbc45f669ce9fa2e2e19a165d41dbeaffc5c3823d8a2eb597b2518915e840d5e6ce068de108248e4622889f83d44fbc77440b694c4ead8ad2e80fb0a990054505c43229066c3b8646a1462dedaa80d8eed4e56c712498f06f330ca9d719771adbbcbd5d720c55c73b77f3185114e7ffa6da242424b971c32cc499cc7203de68912619fe28b0c69a51487ebf08f61416f160299bedd8bd2b702f74fb1112001d776dba5eeb72c57aea1547d9cf82145b8e1fdb6891e451f8f5b5518766d0061143222992cc30760393e59ec3fbf7be3109c09b85e7259e28834dab538f6ab4e68b20e7d81dca193a232fae3412e9cc060d9bdc77344899c8b4bc2c4587a97de21dbc327e3a877aab7dc418a756674f1b972e091f81c89e1e6dbc733319675937f3b506e80cab9ac579c6bb9d067b6d327250cf3ab3671bdc2717e8dd6f8d953ab188ac04075484a24579b20c4ac57e4770302894434f8802b9a38d9fddff4c5f24df52f220068d3ef0101a9bd61195a51fa807ba26d763505a25bc1925ccd9448ceb8726672584956b654ef2a0430837a71186fd0afff2b738451888bdacb6916c1dcfbd4df4e868a88702f2494565bf73f91406e96e57a25e1f7ef30014c09c864fd13a1b25801373bb4fefd7772212e3ba32fc51a2b380e8c2d36fae8b5 +C = a1e66c073f827c067016b3a2f92bbcb58a35235a37d06c15be6ae1972bde5124f6b7d92ca98d939279f387c442c95233e2418987dc70cf22297ea6d3e2bac6ef6fd6e07421cab8b0c4c9e39ade7adb9cf16f9161227f4a56b614f2e55ba71413edf8f929f1b98d0133f9bf989c4b910fdf67920a2242ae3f8c118aaade488abb69eef56ce2c54f3efc60e890a37190894e1b9c10ed44c1e3a83e5ae42a05d55e29d0289b16e6e9ccb51afe9bdb3d8d98e10548d7e8d8f82eb56622e79090fbda06650e77cb536567421e3a7e6738b7320034c3844d3cac2adfbc3944df3bab7722597f422659b4621afb847189ef921c5c074987f7fb967e5fb4dc3fb12868045ffca533a683900993525bf6539d8e19e135392284fdaf097dbcb2bfaab6a129b612ea983623a47346f1587eb4f6e2fe2a9a2fba1c2fe587194d27652d22cecc4bee0c1e5b9c6827fe3e1de677606736481ecdc6e8c261767eb533be2fd31bcc752db2671dc79d8c9894614a3aaf6b084b435ec4c66cb48c3e8f9c1a2ebd0533975a5b9175ddc8c7e81a26ab8d0e6600e667015e77839fd507487169c3e2e086dc8414dbed4a68546e4b952dd994b159ae391ed7f807f518bd0f79e918f2a1784569b6b76eabfbc8b4733c9e544a4156817794b22da3797e5e2ff0a3797730edc89f7df877db7c056d16c9673007c11398e64a52005768407b612e6508808cd66669adfc1aafdee3 COUNT = 9 -K = 31f751da84e3e472320a1e069fb8421b8faab825c8c17f512e9d0d81d16dcb51 -P = d75f09b4dcf83acb1fbeea459ca990d44aacf49e773ef5c0e4e543c0f5b0c1210323b935352f909ab44f62762117064028f67f684d20d9b727aabb4d11ec7cae36a14d99b060fb38de777051a70a8d40f9e411656cf177f28eaa782453014cd6bf075413c2 -C = 72ab45ec1727b9d73e7363c3a63d33d18231914539fed6e21460adba4288eab22b4a36f2b44d3642a7d896bc125b60c24e27263ef1cdffb1fd0988e4450f3375fd936eb0218b89ecf1904efcb1194390a637b80ed1cb045b8c9f0cb77396a1a37f06f9ef47516933f7200d93e2cc5ebc +K = 626a9c7de7bf333ccdf4f28afbb88fdd1ebf660d0887d9f88c0193dcfd4b4d6b +P = cf79471b88e00400d2b7d14602a810ef9050aad8a24326062fc7878a17e7081ea46f8858e5485444f08f45479038d827de4030091a217e438ea9df1ab99d67d0f7e1ed9460f9abc84b5b0415613e66545ddd131cc5ad48cf895d8863ae10e1a57b10bf8325c2032836c55485919945d1dbda7b3747b1ecf91eff6cbe5d360b389398d626e5cd6128cd07f28ea014c07381b1235a9898eb1d798ae5a5dbc665fb7f1620b7f114f3215763e12d2a8f9ce534dc9c9a4a3d882c6a4e06dc178a408f8075890c85e3c219f8d933f1c9e668a52f105f54f6c1558605e8631738d56ed5f6279a4a97d0402a52d10a653e76bc1c01c9525763e664bd4659a73b88f9e796384a1528fde1b8a7d03aa9c3e973ee9f67d20f8a938e92eccd9ac0df39a299412f8b70eaf0d9297f4eb1eb26f3f9f1d13897524c8c4ac669119143dfd05a68e390a997957023325e2d6041c5ea25a4e28097b2baea73b8ac5b3f3184ab36f80eb35621c5f5115ff70d8aa066351200a5247f373c8725c1a8ba0489541718b8a9c07c20251c63240d0477d748fac90407551fa71ffb7431d06ffb69da5d4f27216a4256a47aab17c9bdce8bf838d3928af3d9909890be43c312380673dcef408430c8f4d8cd5ddfca059f4009fdb47040b23dea9f9f58d218da841e53d87e066c263dfa1af14e7ffc8f1a732a5204f781c37dbc171290cd51c3a90aaf66fe214d +C = a8b749f96a47fbff24ca57e5a0849191096ad11c84ed4c5df37a127d95236d79ecc45d256df1ef0127c71db4216d737f0e4681f0b9d083838142b1fae27a1eaaed1a06e30c4ff380b98cfeced72cd2ef735aa9f854e346a38cccba64f9b8714742642bd61da4fd7ea536626420a3bac0a8f540356c1035f165f726733568cbbf4cf96e238c7a152e48cf37860eaa9dfe98de9cb24f8411229bfae031f609a5aa52f964c1d1f1d35aa7f0ca607b4721e86034cee2667c1a5017beef1542c2fa8b0f31d255c16f9655b85d6004afa27d946ea2aa9f04373035f75e9f075ac46b3e828db05531a99c673fb1f6c3beef568e1ab708941404eae34398c9f0e42965ff06ffd85fe6f1f26223c6fb15522a0ccb1708ba9492b347e8baf5fc5bac2099d30dd41106e70598d339625d83e3c96a3736dc56f9f6ac0bc5cc5377e7ef51937372929cf46ee907855604514ab62ae47e843eb4f3d86cf4cf28cee5de6807dded0589cea6b7cd9c3b7e173e982ff5c902808df29638817f0a7eb0ba23f6b93c9c625396bc405ba554aed550ac5503ddf56581b486f046a4fa6b94e027ccb48de4d1d7d9deb5ec89cb58a8a47552f0a223e890dd9aad4615ee4b2800c17744b10a85459ba74eac5b618f66411b7a711b23b69bc88ef53ffb3f3ad832a64145e079c425814acf742baa8a7da80c9e8567f547ace1ee499bfde10722a52832dbabeceb69c02badd6cccd COUNT = 10 -K = 987b21717875d120e77d57513344f4cf65c123ec46cea90c640bbbe705bd2076 -P = b9cef27a2d125855ade50143cd1e9f7f03a7212db2bbc3c7a8b06f60667df4b213aea5f697e2aa477ef1a61b541284174cf2ac9375d4a8b0c4f4d674bb434bed752d687a3e9c3e355331a8b7dbb36bb7dfd795c272804b4918bcf57b710d31b8d61126cbcf -C = e162559efadf63e77568f7c1385aff921b9e528b4b653685daf55dac9e733dc0cebea86066458bce8ab9f17d5d0103da75b11c226e0068cf3d67e4f6f963681b362b1260fb6551763ddc5f367f7db88f7dc2e4a02a8efcb8904e1dbb439c64bb47a13b17d9834a7d573d417b3ce2b372 +K = 2737c2855e6731f9deb011c0b4356475a71a7faf0b5f6c94241635dd8ec9aa1d +P = a6d407de7624fcd951e340d08c949f3bd7d892553f6e566407478c4fd5b0a703bd38ed625d59ffbf946c7370c8d3f226c59716bfc45fafd3ad088d1603edde51445df167c0a6ad946e4123d3e076a711c08e60235c75d8cd0ab8b5fca4e3e9df5dc1b02822098f63a6f5945f7c2bfb05e89bf1786bd5e8ebbb5b791d912764d11c18244d70c1738338e9695efc6fdc152bc352638877729dcfb66fb05af9985f5c4be8f3f072a4b88d90d23124a91acc82bc96f1e8da471edea8866c51d644be66ad7355e3b85c9039f6b6f5e8683226d5edf5a80f289b85b20d295c1de154b2a6a59278fcabd63cf838179c7080162da8d9f7baebdb595f996eba08959ccaf3f481507e2a218d98702cc095f763ad31e3151741ef1f7cd7d35ed8adc6748d9bdbc7d1e1fa75b1fd7aaf5fd7eed05134284d597e19eb1d60759cd5cc5f22048f999032950e84cb0abf4c54b107b01ff36397e3704d5b7b7cb94a62653c0c7f30ffc64afbb2b646d45a63ed0529aa27dc3a8361fa7a5505aa6c36949a5218b4b4ea87ce6a40be6364c347492bb5745d627a5ebe5dd3dbf0d6452374c7e754186a8f952da682e77ce231ff5f7ee67b725473f47423d7f50ad2c4046b84f7996a4449f6894a595f41de6c6bbe8dfeb00876bc66ad3e1789ac5e90d8050152355dd830d64c074c192cea7262b97e674d304b29ce4856c292bef67ffa4b3d3dec142d +C = 6c286a56b0a804484c819707e7d9bffe301361aad14688e41f6e0d52306c1bd95423e591910531bf47133dfbe2d77df610073f8adbf41feef220311a0ed76d8e4cb1f59c7be91baf2368bdc925a7a8e8cd229590d4ebcd3a7b92e445cc14d71d862c2d8e704c6a5c1773189667d306979f2ab9c06b147198d5da2aab2f0fcef7cf1e1a4e74312e20a5670a3aaf63dc2de6407ed61a5ffc38c0f7451263115d939465ceaca0569865cdcd404a22f7eccd5ab0712324fd1eb10bda25331c11b9ce15130030f7e08f5002cce2111ead60f409c85876aa4166c099523b3f21a58c9047e5ba65c5de60e52e07d13e33724b17a53786588f2770f77927074e519126a1fe8f844c50360675e5bbfb00fd5e9ac79c43e8ad04dab0d7af76a32b6e136c109bc7ca88a56eda4d0d030275b80e6935a197aa94a9d3c60877d423e474a61d7ff6638e6bf1444472e2a40f7b4bcd23fc8584bb50d61b18ece70f3984c60216cf31d6811fa728d661f3f8f7840b12ef3e5a07213b01baabbc90e40e76cb5c609c7cb71a9a6af3dfd0dfdd644dfc701f33b040cc992681884315d0346de6dcca7256566b3742f6198ffd6be861e21d1c955b523d577b5a10da1943f4d39a028253f49f9fe867081b3a4ed847d786e8c3817241b6afaa34ce6f1d02b15128f5ce9ce20c192f75ebd9f8c9c16e830e5cfbeb28870c21e88b3ec039704f4d3085312c51b26765f888e96a COUNT = 11 -K = 5566550bebe7e1eb1987d500d82a854e6a2a940b7987b4f7cf449df6632c3be6 -P = 497da8f8514776b12387b9622447226ba55f083d2d7d8e76893e7c3c548665d5faf9ef23bde2770176fd423e5d33eef99e14f7d3b80ef6a84507a50c67a7d653f428fd0a8a94170debb8ff51e9e202dbd6b581e71513bb54e0a677c766293995691356b8dd -C = 073a56412da65e870dacbbde4fd45c9bd193e206c1a0307130d7483f665e5e08fc29cf71fa160417c98ea292e8ccae085c709ed1e97484740f72006f3512ccf20918fb7c7bcbb55cbfb15351c2cf954258e9bfb73ed923839c88cc7c52445aadd3e17e8c074da7059b76fafa6a241010 +K = 566f426dd362792dd899c59c56e7c2629a4273ea4372586e6ae592456eaa6038 +P = edebb0cd8719896ac5330610eae6e88ab605364d243fb0f871adacd2410f2a62995290a974085307bf5171e273a2ee1d737c7727dfaa8729ce2cfade596d3ca91edc298f00bce1eb7fa122ab20e2e3bdb5a67557b4effb01e8fdcd5e54fcb843db483b8476a1d2d31fef35d5166ad03ab78eac3402f93e32274742ab13d306ea797af9594b334941661ab8eec06adba0c0908bc9fb621a0e25f5cabf96dedc4afd30486498b6f99cf5a3cd97164e763c36ed61ccae6b84b66ce1c87633301af204b8da8841ea03751b074351f9af127456c09fc53fcb2ff9af747492ce53d19e05c106a90985354cda4316df7b6c0ae4de3704cbf0e4a08b12f98109dd266c888a20a71036e7ef99ab11ea71cb057e9615a67dfc09293081e3ebfae483fbe2ccbd09b967df0663b9b8bbe64aa9f98bc9860a3b9cd567c8165e313255a19a710847a70ff252e2825c5210b28909b429cc36f1adcaa13d0d0410deed578e27d0c2668a702d30f6be231bdbcf7a827e8546a7544a4dbc94bd7b4bc710180b336e876cbf669c91f809ed631dfae2dfc3b2e32bc19c2caaa0bea609021fd0edd4fbbce69da70a2d47b4ab902e3f9541cdf590a6d1d684246d5365b5ccb62304c3c7c78f968562671a9d06daa2b2966d01738b762ae3af0a9e13fb02523941fc8f96d92897277e6567bdefdae2f417185a104d61286054cad519f6bef6eec09290f06e +C = 2b0fa82898b9ddc0b80513d51a81e4853e0b9e2e69abe812490f92289ea7b93b06c27b6e6e9d1db99e76612a08337bacbcfeff57fbb9af130da36b0a2f2223b588236f42fa383f2f82c3eb4663e0eb14c50e27e720d065ad1fd44f6cd5f6b31102dc98f3a291d7641030a8368129f501fdc7450ab01c0b504adf2309092ef968432d8b52da483e39e8a6dc9e167dcad0a96b6d588f8e361d9fcb2c015a1f611e5253e04c4180706756ee54b999bbbdb57dde883c619e0502716f51c6048d499e25504016f5e2e5bef60e07137088d672016242051d8a4c44930e07da6d4ede1fa63548e4ae3c05b7cf8936e4470693387e7702906a5cd4f970967eb012d9e31ec9dd7ebf957b63495e2ae1d004c795bb9dfac783840348645ad54f141b4aa97aadf6703d0454475d5f26427148093f413b4924a78350c5e61805741ad957724c2081a62ca534527750d3ab3b35556da26c84a529eedc60a54bd05aa7d711a9845ccec5e0a524f6a2ee63bcc18bd7a1296cef98e348afe49a9addba6d0eaf8ccfee0803fd41bc549db1addb1c3b6bccc09805faedb2fd57d63865f24ab66cf83117d654e14f47daf243d09ec37eff009b8b1c45dd9599b09326a4fd2642c88b66f57bf675e20b5c1f5708ee6486336f323ad9049020fd7b7bb00e280f5a15f1e06a48c9745243c520511799980dcdc35e7a60d0b0ec4bc3673472cde7caaef2979bd9797cd547fe82 COUNT = 12 -K = 641671af221e3c61fdd64e5ef2720aca581b3e4e0cf3291d77e97767512fb9f9 -P = 3f5a85cf2ffd6cd401118735f8aa9020c57e439bb027bb4e4ddf2b100ab4251fd119e260d332cea9da134a8310389d6c9325e6fee706f4f92a2cc5daee5a774f6669af932000d5ab0faf3d9303868688e71524f638466f145aebf561950b19de8a77a91928 -C = 4ec85c2cfcdb8395d10dfb09e80667a8dcf8023a5fe46baa2cfe490a323003504375c1cd7b4b0742823aaef26c8e65996e0b0d1119b3709b4dde2e000eccc4431b5e28bf93d404304b78205842bbc30b99c548e31b2cf711945220baba12a3cf7cfadacbc4d5adbe87aa30327be14fac +K = 43a0fdea87cd975bad5a63a5c8978329b286f4d45175d1a75ddada702ac941ae +P = 3410493ba3a17d2727a6968c607fd729ec1e560483ca2eb794721fcac0365dd0f00b535ee32371ecce10d032b9f048ef1b6d0326bac1a77bd151db5ebc44824fa3dff4475e63f0fec8fd5f4be324a6e7f924a2d46f26b24ad7a64fcf66f3a1ff6e655b620e7cf12aa4ddd908c1ad23e3b4a5c11b66122c52d1271c0c8feffde1eeec7089ecc07441e6c032414ac418c5fcd5ad9e76732f80e53f3480576970a24ee81b0202050321025dd5adf162ce142159b66cc9cd5ae937882cbdd2c9e551ccd503a777d9bc05e815e8e63e06fb856c71c4434965f47d89eb5a3eac3e8d2597f8142a1703754f2bd933b978765df53bff8422d69298117f2de86a9023cc6ae124c47de897d63662187899a2e5e555f5eb257f0d4074234b035c15fe13403ac68768e73c1ce868ce519521eefac0ccf0c4058d7fa0ba2b0a23c6740188a316b57e5d7c67d734c393ab2c119d9ef3687fc43be372cbaa87ee3ad31aee13522bc9619fd950532fb56f3f4631847fc6109e61143a8fd4e363ad03dd58597f8ac6498ced0c61832b9e5895a1591086aa07ec85d1c0899559973b7354036985e20b91e400f51629d7cfc5d011378e6c95ee1dcae5f3ea571f799c7de720dc8e8b823e2db54362444f1c477dacf21f7f449d14d4987c6c6cea79b12a26d9da8d950460426403ce9aa3d6308fa585bfe1b784bd3af5be3f2218d2e5d7df96542b5489 +C = 141f63b64a00e1b5eb2fa54fd7f01c6883dba3f4e76a4789a616342b5cb006021b54aa0f0c07c9853abaccc876542c6f4c46aaa8a9c7755e621997e9b440dc2d5c8f1479046571806ccd6beb281991d8f13faff2d3dc724504cb0152cbf7fcdae5fcfa4a649f1be1a3d46b2e7f5b5b314b88a801067dbf6eb2405cde12f7991bcf8cf91b8f83152e6c15e40eefed51854e687260eb245bf9a9ee7ebbf4bab1b48cbbfb1ad39a1b5cf3c8da9867bf968137895017240b000daf04329c68af5bf80ebec2ad94ee412831e3d01e4c6f83e1ba50dc2718af2da5cc01757c3966068092395c188003691b2e779ecfbc662c2d84df5d03ccff00da633c8747c25b1b91b6475914d6234534ad65ea0a5cf5056fc24dd47fabd9da22af72efbeac252c803dac6f5ccb46fbd998fea0455d72579573796b146038f7abe35b537dca7413cec78f570936a6112c031c3d666571e0a78962cfac9d45d4a96b72d953a2d72ae8dce314c1c6272390c7ec985948108f578d4b16a79d896980bf65f9e7c636ea9bdd4828b353a6e12e7d74a9cfe8c34877adcb081668078030b5af65be1a6ae561882c058e9495ad0619261c0838842279c5b1dc0c7d09ab21594fea4caa4ce88170983036741cca69875345851b056678a1cbbc595d2789b34801a354dd8b3425bcb988064bbd6f942269f75db298462c7317376903b8cbd82233d1777b4750e0af2db267c479e775 COUNT = 13 -K = bd7e47fc954e2e7d25893059cd0efd0a1da9850b8ec4ab7b572717322e7daa84 -P = ad3222118931ab49b547918101d99e94273bd9cd048e6cfd7f1b59a91d7c12895787b53bac2a0e13ba93b2c91a18c6452ac6bc4914fffa8f7588e95c4c1d636360ca7b6da8aa5ea21c3231aae0b68787d1d5ea35d69c6aaaca2aa3874c561943c66ef6a4df -C = 4be4e9e2b434345c67f64aba4bd3b0ccc38f47cf46c75cb78e26c9b1b2435cf02e9dd49c141d6a14ad5b004df5941b4a4d43fa29289fb9685422007489e7a3cf606ca09679f7803f5f96a544cef2714075468f2262f8871003068c6518c117e8acb5482632778d0473dbd2ba79ef027e +K = 3825f1bf8c6e08c3750fbe659ce4762764c21ea88182a49e2eca396815d0e6ce +P = 57f1e3e661907772dd004d4476591a23014bb4ad8814cb8e7b5b67759c25a003a25ec286c9fc5d116c66e1729338276ea4d77fa32bb71e6ce59e79ca76facb300fb623a544e37000e2a0abddf7ea05c1be79a6d3720c2748b7288ca3f63dfae828846a525c3818a7520679d6e8dc179c74a8c33d3584ab51850dfcf9be7c35e88591291b6d8b8a4abdac375e3405e495e8830a3c680386bf2206dad076525dc2b6e3518da66b1f1f10b66afa8251d4d37113f91d0ffa21ceb45e5133f0dc695a90545f38a02cbade9a1eaf59f23f6b078a339b590c45098695e8c30f66a5711e3febccd0616ba484856659706393d1a5b4c9904cc7f75b15cb377db525d7eb74a7f24973e7ca89ea9bf1f88f2de68b8ba3c6c46104a22ed3429377108b7203438f44fdf0366cc9a3785864642a6110bf33d37a901eeeaefc888bc81cc564ba024d7d78c63fbd42ffc6e1814783b4c8331e9c5ce04b4fee23c7344f8fc0cab5f12447ec2d842bde0aed72da122717d3a014e33ba6e572421450f1acd5dbaaa234ea87251beb7223da006dc58d8b84f947c90738f5de5aa70b276daf3e88f48af244695beb39a73a7bb57e6040ae956738835feb2c94d6d77715f783f57272f212c727a1067200c86c1a713add0f698120518a83dd0f69cf30d9272217dde78012d1e54cfc502964f44f1d19c5bab74f014ca0e36ea669865e63558e9122e06f2a +C = 03e4d179601a46ebb726920d6c21b27c6e571141bb69c538191eef8f44727f070f6dbede7aeacc35fdaebe659ec7284298a0f7e73d0c0e53bea4b14f10e10d5d74cea899d96fa7f11be854f60c5b85730ca11d52bdafd436cd334303514c7949c9c812f85dad03682201394df4a9ed53050ff8f4da7dc0370e20fe9a2b2821db7a9e812c5bb32203a3b2a874b609b0f800aab1f86007df83745da99469fcf0c6b67cf952e3b7959b377844ea636a3fc2fcc978e173ae50b8c9c9a3731ba6c627f3ad7c83974e672ab776be6e1772a284aca231bf06deb650dd749aeed14989238c9acb69dced8c183455f3dac4c1016e6638bafbd7458c57d607e1dd7456b3262e896a42353fc8f2489eca0c5718170d79365eaff1454fca91f6e2c422657d1a1e9831e86fca264812ff5dec0549b239793ec59000ce6b2622a768c629099fd4b036c93112419ba7f51b1ed54dd7179a40cecfe3b16da1aa5f11ee80eec816ebdc0a4308ab61aab19a0d0db4f7bab22a3b7435acdff0efe9734ed9bc1348cd59a46839f8db11e40ecb4a7c3e1ffcacf28bfaa80240c5170787cce38a3d84c3a78614d9f6f9cb0630f8be624d18e4f80bf8cd0431f3bf390656ae09bc8ea681fb1751bb20057e82c7f311fb25a0d6ac3f7bb8ea128ae36c2db1832a0df842fd3f7bd13dcc7cff651b3763c7fbb31566c0912636d936dc6ccc8e215bf85fa6916afa989439641a5d18 COUNT = 14 -K = 3e71cc53751dddb46ab4b4ebdcb69d2cad198fde1170141dbc2a071516ae3d8a -P = 3cafd820ece6130f9037d288ed0ea66ac5fea5bbf8ebc884a6710fbdd58d9de1b6860d85a5e636001d39d1d6d7591a4902ddff9f314141b8e9db9b2ba5f396abd9088a6abbd17089d292cae136cf2eb3a123a23263be244ed26d550ad960eb856d2b356b7a -C = cf3e615147421d489a9b76591315fcb3388138200dea5e78bfca7fb38ec2fca1bf14f251093f687cdd30dcb24dcfcba925d340c8948d152a333cbf103040a9805b934b20860f5ff3030a0b4890058a4ebb4a56d6bba1db0eb136f05753faa2fcc46feee0686dd282a8f3105a09cd71c9 +K = 8419c77a64a25f449d677fde2f9b59deb7db8e59602c0e0bee28fc7f55d0f779 +P = feb31c3d60cf53111c8cf021ede2ac443b26c37cc2459c1013fb11d636b7b74af2e2bff6b004b90ad55fd80e45d61916ac82c570c9b1b397002b6d8e388ec2929b82b1a84fd6ac47318b8a61093b16d4e3418d15b030f0f904f95c0400ec98f460e73b2ba867247a056644b70575a8948a50dc4f50ae6b337b68629528698aeba9f50da979f59641fdcd5d62e3b36d51cfbdef081bd4d1df0258f8b44c336cce435affb07ce8a8eb1e8f361f90ca702cb3945948371c68f6f17be4d9e5fd18b737c8c0cd305378efec00075f451574d49316f9df7a70ee8b0e4da5bb287845b07439cfa2ec7e7cd42e08fc5335daee3d9ffc276f87bd1e71b65949d2d902944065108fd58ee25347780ffb6540a56a9f3fa982533496525c95f3d694e2f3f19ac68bf58b24bcfbf53ede90cf3b8084601a9a24b3eb0ccc79ec2c15cba59892d1abcbf885efbb4c91ca8bbaf22d1b222dcef07eea0b7f53477d277f87f55e0b774b416a272518141dcb65e1dca3181ba84dc1c503420251238af4656edd39c0c23745af4b4f1b51f31ead55e9cfc4ed3404303300d1515b8e833214053c32c0fc0cf9eba82eaa3fe2ff6ef0f3c65ac488d1a2983962a2a2deec7d7572f3ffd3011f67ee9727c23846356f290a978eb3110702b6d7a713f54eb5410df7bb3c6c3da3436032408648954677389fa1c964b9a0e513b43d4a7c23ae86af20a74b001d +C = 2baaf24346450a69584d64c73ac0f6a91f4b94819f04a8db84ab66de5749f6989b97aa419c5769e490b6ab3374bc52dbbb94b1fc01621b2b414bedfc417432c0fecc05140fef35303061c5742e9b5d77c45f351a3ee84c3e5f9ac88b10bfc61b98c99abc054726e190d916640875ea8402032f247d4e2f4d596befc6ebb308885fe773fab0fa38c5a2885ed2709dbcdb694f0166d0e610f9c46a9b634857258555fdfdaeaf6e9a30ee154b12d2e744ae72dd7420ffee2b357920affb5f8c0230e1c9cebf1cc307556d09f50674d25cfbf41e47fddc4ecc38723783e41d16fd603332c1f7f39f0e0d6fe3554aa45b965e67743e716679887d8b801c41d908d6ff4cd6826fa5654ab9d8b3ced57d4d08fe5b8c64dedd95f062a728f25053717383b883253235e5b3dd19840b7724fd9f776e4420870bb182b38bd68d5140064c491f898e19f7f111335a9ccd71659b24115c9494e45ba236989f7539b6f98673e317a1b649dbf71e6c2881cdac81e6430298f65a64f01e3828d898d7410fceff8c826406eacea126817e43666c12ae6fbbbdd07ac8a16540578e258042e258a31c4d7703a9af2cfedbdffbf5d1d0af55a15d7459ff391a35fb5a34a8a025285987620ad36588b089c23cde20855028e07b67c3b3fb82d2ac790d77a67c90f66daa22c0427d117c5d71bf7278b064171660f398035414b4894b9639df6e775b864ef0746919f1920049 COUNT = 15 -K = 396ef6355cadeef0eb1a24d11946e6c1b2909cdc075d4dbccc008f2ce4bf2460 -P = 7fccaa6c5d837bedd3d94901b9a63a9a041fdca11125e0ab46815b009665b6dc675aee8416b70337ca5ba35b02f76448534227e44d8f4c33c899a529e365263bb8800bb233d1e95007b09a5f57a5cf68174adc55253d1f7b577f00e55c54ac7b7279e6370a -C = 9479dce47e543087bd88aa4a0d67ce752fdf4d8a3989ba9d2d22ddc8fece6679c4e36582f11abbcdba73ce8b4b9cf4e2add9f75b2eb18c623cdd25746221152dc4f8742d75ef4d9cd3ec4ca762ee1d534376b9cf766b505aeb5cfd71ac91d06cae5aba1ca65599317641bea42272607d +K = c4ce7c4200035f4987a47fefd0f852331f6e31bc2131d92964b2f54b40c268f9 +P = 15b350d25f971da0cff78d2dc128269fb4f29b797e97eb0c3ddfe1ccdd20bdaba3f807ab06b1d12f5e4a9b1f32eabfec5ebc38365cf7a25f4ab88931e9e77eee36c84867ae88fd5c8e384eda3482b8041e47db17a295ff6074c794dbbdce9736142bf6e207e27cee6936c43b80c628b1cf1646d38bbf1b2e45f52db41d8d26f1cadb2a15960e2ff02f9fb0eb8a3a2b56cb35ef0965f397b2dc299401e76778fba5cdc9ae6db8a1bb412ba19fdc397f7587b6abd1f878235784d72275c1c1d630497b5d2e5d6591e8c47e16c2d88cefe5aecc5dd674d34065a52821d0f17bd911f1d3ea1247507491228aae3fafb65d2d271e43abfc3a4b2e65d8dd2ca6db21613ec7fbed9d81ea1ec476ba623246d97bc4b82ca4b7e7868e866579a451c6f078188acd8632ed49d85f56d7a3798b7c28ca55f9a36e12225b4eec822f48b49a33a815743ad22cd0b49f46d16367235183631a056c09364ef2ac6afa9154372b3664e4da32d38cfeb551636b76ab9653ea1772d469ea9a38a0c86283aab294505c452487abda1facdb86a13d0dbc57bdf14ab83640a4b7112baefdbd6b14de1a80def6e78708104f42ae008dd210f966389a461c23725a9c6bf6a934bbe11b16726c527f3c07f03728f0f1d1f8b3f46b5c09dd06fb1166179e65de03f42a2634f1d0337f630946463a0d06e504638f7b7f40132402abf1331f668736da2cd74624 +C = c6341b6bfec8c68410f3dceed37ad0938bdf649ce7652704267edb34d8754098f12763c1cc4a3970f29828660a8c8c8fe93685f99d351013eba457c7bc48a72e5514a2a1b11a93d5d3ea7f33c0c51045620ec4d466919a440028d2ee9d306207eb7aa3a4fb5a0e301f0dc9ecb6250bc88d598694c4ad67eba1ac5ff680a5c85fd38be058b0c406b5964abe140d4da6ca13bf67d738031f1b5517a9ca1824b7782cdb8121cd8a0642920402c4c443c6bb2cd1cc64260a0ef4342fa85904b6900228b6013f7488e32af285561f92c178160aa2d7da3cef8020d6978d1e1907003043426d18f8c0bb7bc6475d2ffec09f854cbe26f6b95f7eac685bdde28d9b52070b6e1edfad0c2e22cf9bb0a7cf4b402d18d7c699a11af4399021cfd7cb01a8314c8754f37529e9e5e4f6178572f9c9453b00a2bcfa7ea9691f08948a8939421271c3afb72a5a508e5505076a01172f26cf2a9bda929c92c6c58eaa653b440ad4d09e3a2b64152c03bb46364e4d732cdd666449694a766caed27d35fae60d2c8dcf5db4a096b9c2365e5c912cd2ff0e5cbad329a4153ca8770123b6c1c963d3f45efeb2542862d1728421961759e001a022692d330e3e00689901425f48ab493e672ddc929df758672661f1594de561981042f405ee9d16f72556dc6b14e5f554c0f5a5e2001160ee36be251431f5dfcde49bfaec7f1935dd5be2693c4e3171fe97b7a159c622e79e COUNT = 16 -K = 58c9a75b5bd9f0e7dc2ab223a2b2a614c605a59445cd29070f3eb70f210774ee -P = b028245e047e5a4659d56442fc62569b3e365e7b404c22aad1cc8be062b1ca01b6587493ee31183d539fc0bb1d1701b11622c8c748c6258471f1b8580085ee71bad24b7034f97ed054d11190502a0a4f269e0b56b866951086add6b9d371c4d415d96a1cb9 -C = 0fe0b005e0ed777393c3a3631a356586416ad818d7d8a84f50706f6ee7f9b3ddd25fc6ee9fa7c072ddf9118508eba7b5c884ba2f6892ab8cdf0fcb7c21eb98d2f5230e998490d09b05e04a92589b5d2757480b7a02aef07473fa72ae4996d876b5921c5775b73ddb909b42a4a5381b8b +K = b2586a230ef1695f9172241b6b0e7d4ddb1a5d3ae8530eb4875ab9e5a638c25a +P = 43841040dd814797182d364252bb565c0935215d7e4539eaac02b7e48ab9f8a51112acfd800891cfe5edcd17a1983e3efe4978a9b894512d585d38bd5c88a4eb105ba246eb1187fa2122de2a33e4399ad6b7d8a13a3c5d53b45df0555238e758e6f1a8cc18d4486cd98972f433c6c54cb8fe18f304221a09bbd1a6cca47e7a572a0833769b2ee34ce6956f39a33c405f00578efc76d671c4eb3edcb4e1f68973da3833800576c63c27447a3d78d7a536330e7276e255be7676657d59a154622858d8eb8f527c311728f9bc3ce478993ab6f5ed1a3c9c4ceddb7f4a5d37433242b1f315bdba8693fcf004f8fa0843a0d45d0b327e4995a054ed8765457cc87a77c49a14979f4e37ebbae5b1cd5bd03510d06411ae60af3ea4e20e84d6e4143b5363222223b21fde8641c885d17abdddc4e6bbba2d8d203e3c41e7ccaf5e39099906ec8d003ba643f96eb18ba89730f0c47bb3b2d49daad02ed424fe56e9e08811949d953ac106f576ca6e7037f5ee6273fd548358a15eccd278def17e0ee67cec484c8c8ac7a53bf142049e7d63f8c0ad28ef6738faef2960f961f18a7175833d9ca135833a6dbe1b3858ef8310966c8e1d1b8c41572cfe03aaadb4f3b35ca2bbc4cc1717b16e13054d86f12066f121ab62ebfe04aad402a10db88b935da4b2797d2166631d1902c80a05ada1261162541c3d6bf3e6796a2e47f50619baec3c3b +C = b29bc2538cc8d4ed685d09edb1e2076f4f618d8287e5ce6e925a36d451c9fcd6bca9084b13e2b046cc7cd13b3a2fc63ed1dd1f5a37d2ca695b024a34ac5bf8a2c2677bce7996a12dd12a8f233b6c170580009a38b2cc28eb9ce55062cd0653dc31a846ad5766fa9a87d66aa699703418d39c130092abe57bd9e608e6d5fdc161c9c5323fc5c8e9c08e229747f5404b0cc0704ccd8fcb316e8e7bafe6d26f270e5b987e54c2d14465a619e3df080e46a460636e0c86a3e09a48adf74466f2df4bcdd879931043013e9fd630a939a6dba6b6c3fd764b0d7553fdda4454601a789b6a5019e246ab88e92fc0474b3afb1f21448177d782f4dc5e5702082893272d7c86eb3073fb6d0231d60b6caa167831c67e877247d9a0618228a0e16d470909d4a1785a03186bb3b6d7bf96f2d24e1c777e3117a088d1835828809e3ca87007c7ab8d9ef4b9683091139065f3e1467a358195e19d4699e097015eb4816501f0d13832e11274a075e8185e20f4832d9eef78d2ca6441129a45841ea501314daedbab61caa0d95eacc7991792857c379e3158a3d4f48aa0eb0d6f90731edde56f312d2522d9461c397301078c3ce01a414d2ecca74b72918a7371530f69aad2b5339cde7ce008ac760e3c6a78d0262514b5bfbd56c24da676151ea24bf58ef9421c79248bfe092676329b2d97f210f40b486992c42556d19bdea7c82178361f34345b3efdf887392256 COUNT = 17 -K = eef28de4df4a082c9cbf6dbe0e490774f5cdb157edc8d9bbebf72ebfd1d37534 -P = bd928469ad7031992962041a1ee4cbb85f88c20f536797d041ff7229a2b80f057bc79615271000b9600dc1db0040ccdc5d2e2102732fec479f7f429023e33d8d08a50f2abc707175a9073f8a5ccb231fcb4100ebe7fe10b4de9c534020e3cb695fabe63552 -C = d3cce46a3a9c750922ebd58ee8f804edab767bcde2a5145fb400778d05f648de113e48fe1713fd2833aa4e7f7a144c4493ba1a2fdb1ed577501aee268d1920942b266a7ad03df50eb253f0eb4bc6ebc90f0e06b51c8412c2eb5d27e5ec4a4ccd4ffed8d04860b141b6198430ce5a2d21 +K = e6a35f3799404fc5498c67d02c8b5dcfc4dc267937ad40426974acb0fa0bd548 +P = 6970c7ab55704863b866d599e6abba7a18dd679636e153c62392b3d2b6b0f23da386066d5d7d6dc90f0517d00178c7d5b09be471e8b632d055c9a62c8be682619f4a632c6e52169a09acf47147335b11b9637bab73d46d07aa61281a373c43b57f13d4a861b4e8c305abb42b6c3ab49349ca97932a0815d0ea508aea8aa544444eb1bd9022fb88dc174e682a233a0c6d370d7e9a749e65717d8ed6ce635196e30da4dd2eb62410cf5bc79a3828c6705f54b809201766149a4b4f959dfbdbc6bb0260f133147e549df5049ddb5178b95fa290741cfc953d3bf5bf9412ed48fac74afbdccb812677c89d19391aa912edd0e0da285e88235a6273ca14c962a8307fe79a8635bd389ee14e0f59babb06b53e2a55e4383f28fa1b0e98f780f0f5652d7b06250d2339e41d9ac6e6c9db99794161ef1c121101eea7ff22b0169822df4b39031c4931840ab6605ebafcf80a1023986bec0ff6fcb61eb45ec954cb033053fa9a8de9826ade0fb2052fc1f344ee3800bda9817fb7b42163f0bc341d8e5a67947e13b0047a7f52ca0e1d726d65b671ada2619803d7817ef632bbd5a69812bffd8a4317e1174e926176bd97076a0342e4f74bfbf915d86c6a52741f6f9a862438a964edb575930d8be4601c39d511086388b7939753db97beb49a92a5e6289c5c9c82ff715327bb66bbfb7d7bed32ebcb071fcc60e7c087c7decd69660c5aa1 +C = 7ea10c0952db9303fc24f583454658c116c5b1bb1e152505d9755ecd96f3a109af4d6597bcbc658a1273b3199ed91079162e5ee9dc967c2f7288a03bb59aea733f4e617f70fdff70d18ed1c4111997589acb32e62db27bc940deee7665ba6944b0864b6b26d3d9d9cf5fe5783276b66bdfcb125b5f9b03580317245d660aa1bcd7c6b51ce5db87271474babd316d033cd4a5d5fb4dec330d632d9c3f98c950e2eec46feabb13b3d8a939343b433a0692be143d58e60d6082d2ff73539ee3eaed9f7147bab064f4a64d29f6ef1a1a9c329e4f57b117a086eb691043e7f41d30147866a0a1efa580c2fa0575e18e96cd5b844594afb5554096b6fb8af69b16af69b865ed7a216cb9c1df4577a1c6184ad0ec908b04cd51ff08714dd67cb7cbcf9781aa71345977958ec75637e0639506b4a226120bae5af50d663c416f6e918b550b4337a414d96a150bbbfb11d992b48cbf33d780423574f66ce0c1d794b748106610978587dc9e23feba4986967fc085601831404d2d6854146fe08eeec38982c8d1df8899b08b25c80f842b517b4e1c723f071202bc4e7b62ef177982d9aaea493af5a2f6992c5dace1583bf2b813cd74d14f05283db599f6f3fcbe5b2e099fcac50fb34adfa149e39d248152a42a68b9803a343f7fda3c3644fb4938fa81e87ab16b768a3e240d5dcf9d322683cd18996a7a2e44b63d7236527801c80146f2782210bc41dd5a8b COUNT = 18 -K = 5598ebc97b4401ac7d9f579b09c58ddf257c67352c604664f6239770ade4719e -P = 147a21f3568fd3fcc4c28de81bb82c3bed4bbbda99996e9cb13d90098559c971bbc942ff952d3188e77560ec79e3b3bec1f742f7f4f5f6d33b009435dc83437f8dc0043698bf2e2e14827e58bd6fc99994e2c098c3ce615461ac2b7cc5f969d358c6a265d0 -C = 2112ea74496c2aa1ada033f42e5fd6b4d4620a87398c7ec30080eb7199617f0525cac6d228f11e067baaaf65dcb723a1363da8f94320722556ea2a7567507b8aa19b80968ab1f1d043e82c1dd10947ff42cf011906d305259a71668c0d0766b99aab55869377c7fdd8811a9956e53469 +K = 9c281b3a649eaec38c18b8ef989174b13e598621cbc68acf7f0c4ac1287917bc +P = 17f2006dbc587c9edaccf9690796d2acce174f47b4f844700c27223a3b1f2eb9ee27d3248b159abfd6b199be76f9cac96370b61541024852e16d3201bcc4c99fe03f913f2c2baca7130975021671ab71063f0b48f71fa5ffbe72ad05c3f7747edfe526331013fa3df771bc9adcb7dce67c75ff21d5de5a1741e10fc6da8af29119d4b24b07152a8bdfed7c0c8f3deaffb263474748b271c76a0d6c802616b59619f9b1b7a68ab8fe7345a27e5e826c88f08e7abe04ab92ec926cdfe3bbf60fda23393215447e5feaced0e9d1bdebc74883d5b7e07a4f076ee6fd4fc08158321f027bb1371bc927c2bea5e510237ccc57a95d86e52ce1a2e5ac38e3640a0fb9d5352a0b5d286fec8ddc90285a354d0cb8e27e6d6e0d6ac98db23fc6e80f3a8a24399747102cf4d0e1acd2ff2e15e4df7bd84af72b44c9a9a3a5c127610b77ffb6dec2b8a8714ca87c6fa22fbedda52c8d5d1193f102556e85d32e514029c7e7abe0572fefdc0f5f382d1a4e169aff7426aae115c491b91073320208e2547febb8af769e77adad2291a7ced9ff4b8906cebe734ee966cc339e1ed9adbc5e82ae665ee22a2dc21c00f9a1bc3b9f714468db5846cb48a166327facf45bc997066be783456508d154887d8f2c5a12fd0ce0c4a06e485df0596feb42060af126ff962e66e4569177bb6ae91cb344dd0a7457bd9f6ab2933820d369d1e0db81b23b737d +C = 40685ac2b47f9cd97e40dc9e5e9576da7d22cb2022007f8236813be71b878eac0fe29312a67b5bcddbf59248d0153b6cc3bc3e101d316176e869771ccf58b8397ccc2a1907ee88ce6f1ae104c57fcb720fd19ca4a85c1dd0084237011d759f7d44c802138a9cb923fbf132680a2cd2457f8560b65cc6d9b5b3e799cb857fa8c05a1336d1e4a3cabde4dfb8f362290d5784edc80268bbf395a05403ec621797772ff1eaaf9c9e9800be19478251a38791f3e2ebd9d0a45304080e97aaaacb59d42e9b4f7063a92edc869e9af063c824584d75e024419dbc6fdfd97effc4886935742f3d34f9453db6fba808aca4c5c32fccbd53e5f9be8a426f14af30d67034683bfbd6800e2058ca0f37c1975f77dbef8f7b964fc1b60134531b5b115775308b9405c93692231f0ae7ba749de9107b3986d912ff5b11a925442e609e8a6fd938665cfc7860d57fd67666174c1c567219036c6e70c7303c94bc17d05d49f6d9f2fed3ca8634f29ed9130d77185eb18560f2a29f5960356c9769c8b2cbfb30812097272a13ce331428cdbcbe9d2b06c32b2b5101e414804fd301982cdb6adb47fbfd994f9591028a147959de75e569849fe560d3a1172547a5010a82bb800110160586d991195eb12b40dd37a75ea22d7657e6bc73a6289f82542896291615485f8682824b594ee65fae04d4f5825d7a624d29d411b7d3bd861ca3875a22c932e099ea90d1e9ab71fb COUNT = 19 -K = 9ba474d6e835533018d0d0575cc032211541dfb016f10b1425134f98d7dde853 -P = e6228ffce85a4774ee87ea9a8c78cf88259fc1fb35332ea4cf46bad43e3b8dea2810dc13e8dd038c43b12111a043f9b8e102eb2e8b93438beb38ef96a824fb2804f2a59963ae738624156b61e520afd68f8a0e26a90337ee548a71c387a839938cbac9dcda -C = 4d4c3f14cf1b1c758174d4cd4ff5e5a8c22f630b07355e97ec231e3f3dc9846b0f54e0293cfdf7c624e7e2c2b8214bba6a3738fab6e97d45600362b500e2bec63da993832777517d6aa4d7ba6972e6a01202deaaf0068d84191a7cb541dc39113ee2e7498d925f13718b97224395baee +K = b7960ed0a2acf273e2222f80c89a0c4097c57091ace205a50b7187e95c6ad7f4 +P = 5c0c9a25ef964cf736dbc813b7ad30024ec0aef2d31b996f08842b04057eb814db5fc7b2775ba2a8b3a4fac3779490c62ab18ad9a3fb9e74f11e201c7d93c015f93c9aba6ce2c8c809ab4e403348e1cbb46aaf61d8a66831004ea3aa8e84349af71caafd628b8806a196f2381224825b95fe56d68dea18cb8831cda046cc2ae352fbffe04530cd2e950ed63e55afce728018f21e3eb88aabe1cb1c1f09d690e917eb30fe7674a789b14120e078d20e9979e25a286fd23ac6fa4f826026bc211bd84c4d20c85403d65d5d8ade2464c09a894f7a1afec9a9b933e1d340f078d53d8bb62e1d3d39f1a89e5f15c1271c9feb90b73f2c5fc55b6e640048ce83e01b24aec631bc232e37c9b37233b05ab33244613bbcaa37b7a869a61021e1f800401b028274d9b302d438cac648276b5f94885fde8ac5a20ef5d6db7f75d106729547ef4831ce9e4c9bd2962aae6d357f0bdef20b2e87d5661457dcef401cc10b0bcec0e88b8725ac7fc5caf2b72b58987c915f91d09c0f08e71b0e4fece4a5b1ea47c31161a1c5f18dd6e090658a9a9a85493eb4715817560c44fb09307c88f81e0dd3c3a72b00b4dd1787118d0b9346e1c4a7838ac47a802c20b75d418f0d560defa0358427aee24edd37279321ffd8c17830fc187e106d43bbfc5ab0da2da9488360f69a0258036e225b4c61d47b1ed14b21b907906202c8146bb203ce3ace553c +C = 83e3c6d7f38beb47a195be066c756b9aa91d91ab19bb187e8114184dfbd2b89b2f993c55efad5006d9413791d3b80a764d6025bdafa83907b0538e5e4d9fdc09948f6a02def6b4d2fe33201e9af2600f6f629f72f1a79b00f11158ae777e341e3393b41f3679a6136c29616117b7b6a9bf7f3504fb0f9f8b641af7641a6aa5b3cdf7799f6c75ecc75c03f14b1cc32281b6afed9c58559a92f65b21f5bbc05a53a68832e933fac41c264265c7e81395fdbe0518411e5be56bb03dbcfff137efc04ca2afa9b8e7490a75f5bbb33c8a18e1ca077d0805a0998f3996a779e40e8c662013f8f07d26952eb50046b602f0ebf4be64cf8802f728b59b7c0bf6686ed95cfad4474eb951a66db39c5eaf7428e6a0c437064e7ef1d833054a4ba804b799061e8d0c1fe0bab9bb19f65a47d10937cec31af7dd744cc23d243b28ae5ca3379daf85637d3a476b4e9c23607e1666b42cbb05fac2e7013503d33b546f1ecd4690b3be7017dd7068a58feddaa3edd0b580fc64ff1d6abaaf0e7f6ea1fe073a8c9e2fdc9f80954b8cb0afbdd289e3248dc87d7246a069b0b8145ed9bae01b930f3b5ba3b1c17c71e3fcc1fea1458750c07821a666bfc3bc773441bf0bc2c0981375fd8b59178173b5c501c63213b06786bc5ce938e7b6158611df65bc20fa10948a86fe4446984a37c6e9c97794b95bb3ac89643160bcab7f325fb1a24aa333a10e98b3df34fa4b9b42 COUNT = 20 -K = 91560e7a64c7a3e289e900a1a79e7f989779c88d5b4201beb37686698bef0efc -P = 75bb57431480ee9e13c9d8ee22bf548d06379eefe0f9215413ce1ee2299049dd507065dc48e2fab7d3aaa27b7b4b2aa63ead023b1cf235dbcde6b2b3d5da0c347958c83e0c9540059d8eeb6b34ccc6d0810d032556a32ee309fd69f52a7663357008a7ed9c -C = d5fdb45efbde2472d2a081f520686c49984cfd7feb16197a1e3f6cdf740c69ccd0fb8d0be2cf60f4d92ec915e2092d2e6c7c39665deae557637419d241b90b5bef6135e18a8a9cc931334672c1568177c466ed49f236b580b1418d2362850b082d7412cfcaf3972053c51fed58594f1e +K = 785e7f4063139454e45f84ab9a0a3ecf873c05a94dc876f8ded03cf5153c80ee +P = 1c87aeb2ba9175d6c9beb2c6ea956042d38d24cf17030ad682f0c9a3f0fb3e747454e60dbee3bd270eaef1efe846e78cde3b9d4a4ca97ad7eb0e454f6bfd5c95caeb274e0308e7e36469b5d7269d66e8840b94bf97bd9d4d7ac0f022150ac4dc877d0af67ebc4dc542ea29aa59f59e4cf676dc99649b45595d2285881b43e39f5101b7e276a4369eafb177887463438fa22f5ea0bbd0b62ee76537f9fee0476ae767824088902ee28c02441960b770130f66475609f3ad766829496220c059a40d2846841a20146772f698c653510ec87dfb2166f6b41d48099196d0c8e43207519ac0707038eb4d1e706d47ed409a9a7b6593bc52709c1990f526cf0e721b1070491e8a87726d433db8c1d23835324c4c44040f76001553439971008dd67d0ccb87f66357e4be2b98b83ddd2e54844d5db82370392b7b25d0ebf90e7e5b3b2f7bb21600e136858083969ed8696ec35dfc027c80bdeb60bdf6cf4cf58d6c86a685146dbc740aef9d563bf2a9e8ad34d210691239b7da7b265fdd9e822d96b7663778edcb746a23e7b87befc277d81de7e3f242341aeb3304bcf8f30fb85e099f73501385503aea34c7537dc73950cf3a3e7757cb3556b084754b4bd4ae20075a15305c3dc10407581f44ac75f95b0f32949037616df29ec713df343388979a5589807a829c0aaa18e7569fdad36c95653dcea57ccb4b7496b5012398c0629d5e +C = 9348f9d9316d1cd7043394ac4ab9c21ab6914117a4e1503f0d09c80456ff6b9c225abe3dde0a6891a6a935af7e6dc0f13ad47433cfe064705863e6e8980b9f1d569157db5644e3e9251b0d3ea534dd4bf6d6c40652a6268c410ffe3ea0bfeeaa058ce89caf780d39573d0483e49b2d853ed6eb55597b0dfd509fcca4940e47b23d76f87b0307e473a1373632a42c416761dc5866c332d8e45e11b96b0d858b4ddfc598939d677bb135f60afbecb87fd8e0d24ba248546200ad8eb0c7ce346897a630b626a90d02972455e47966bcde1689646a18bf9206d31a22a2571bcdd3b7514b1cb0af826782739eef23dfe29af831cbd1e6d8b3585d9d8654ea65ccf38b3a2be875a7643c5942937399ca7c54f79de8345d660f042be5fd500400fa9e63b28b358c285f620bd4cbf53edf00d4dac1006a3e890602c9f61ebec85226784b42c06a9241a4d6431ff0d3578df1fe278a3f50153f4b4943615e18a3dc705c8018c747a8f68a0b57d877dc04596a4212d69ba46951601a67783079ad522170494c6507ff72985f785ba947cfccff87c4f0c1c2a3f398711cadd00f461521e4cbeb277bbaed4511f0045e4dff2fb6d3a3effa412bede51e57405b56bd3c604696d974d164a07ff1cc4335b0c43d0ab255a40b2019d252c37fad40ed1ef450e3b8b65d9ded29a918dc31d850f94a1d560a4a5b7ad5a7dc4a43c94b149312a2682902e3cf84f668d6fb COUNT = 21 -K = afe0a8061a0d9a3ef74242b4957663cc038e86f51f492cf6507cf21961614fcf -P = 80d6731b235d9f303c8e272d11a08ff80a7a99076320003228e42e3458229d392f09b523cf609691e5fed8549f0b47bf327507373ee031ace1a71944ca86a9c75a45a8a0ee97293c9fba7e8de58124b5826fad605abbabfc9866741722ae592cd53b6ead8e -C = d8a643d9663541a2d6ab114d6819940940d03198bc342dff3ddb25571d6505b063a0ea504335ace1d849c917f27daeb78f18ebcf6c91c670e938d4474830a7e9a4d609f4d363068993580e20d4d97fee57c572808f3defe46ded3bee6c3d334bef555eba85acbcad1fbed4bc70925891 +K = 0bedf4814b769f4579e0426333a914aafba5ceaa2b67f168e0c46c134c606276 +P = dd020776b21975808172c6bd88264f6119313606b80e15bdcae48ea3051b6ad6e0740217d3d33132aabbc41aa1c016dabe84e862874fd3d076b424c10e9556c919fe446d8f3edac714a95428a1b84d22ee9bbf1489b5759efd65b701e3fdbf878b9a68827932782febb1bc176a950a01df638dece37aad8733ad8f788c2ab269cad828f2fe2af7687c5fe806612afd8b0d4d557a8a7b599f270b7c87d1ee558369c28d1c3125f4d68868c5c53ed7a3bbae592e2e71bcf0b03fe132474bb97bc0b06ef92aede2ccba75d9f89e08dd3d94ef540203a61bbd049d96d2024b41818ab8a41b877937e7c3a54c79e2894ba1ee07f8dff136da1fc6c1c18f3ee647d89734380c44b8d9ed4f792809679f82c9cabc5028ffbc127e45d5543afae2f657a581e6caad85393d8d694f9fa5f92128d5006a1020d4326989d172f0a7e60e47c0ae9edfb2ba20a4a84992eca176cc4bfcd3d55b3a8ad7bdd860733fdc1e90d54a38bbcaea63b8b359d902db0f366c4983e8bc9cc3c4055cf5944472e9222e2d670d92b06cba021f5ecd53dd7c1559376f8f0483ff34fdca2f12a9a0ef08967d835087d9a6f3b58d82d1228cb663099d5f7d6ede180d94a538f7aa2cf14a7751a07c497dc600b4c7df3d1fcedd5d1cb5c94884cceae9008eb33e2752e944596c03fade8b24630b4ed4b0dda8738f06ceca0dd320b973a387bcce7f6bbb2cd1e6fd +C = 0094e1715f6c69dc6ed4b647341e42027e2edc84163f70aa155fd8ab43bd5f8ca49b87d662dffb3b5f14e490b23d5e5d2093fefce6de5fe72fb633dbc2ec26190975d70776f278c0d701a632e5a731e89abf8149b637e60138d7ca0b5fde8183416fd35e7a0182a996965c1dacd65f2d07263683c52439b0b2a6f39d7618eb7088389aebad2e59be4e489e15f577df930074ad7a0cb9b430af99ea3907b4038c2f5d9a388bf592dea755a53f36a9bbc0b7cdb39392f5085f268f78c968ae773d5c633fff562ba7d18c7e5511d18076028f9091c32a0cf229014e4a38c643413a59cc61285055e3173c40db2f4ae9d819a9da8d82b2429fe31d6e55f5d5a67c4775336e92806702a0c1d561f5d2bd07395b3c03c433619c0345fc93962100116984cd33ae44d1e858a5ad9cf64a394233bbd15479a33ea7bfe0766c63eb5e159bc20ffc4b75b7e72d5cdc80ded0c73581cb95cd328487c8d97832afeaa4d3960611f9d8c51fc24cad3b3daec22735fa883bb48aa39cc05ccc3b3fb618b3166efa4a80be9796618d1b372ebd4006599f4f600500434a6ab5403ab85ca53c1919ddc61cf8e76d4c63fc64b576925ac208cd6e8343a47e91ae469fb774a00e18b57e8ace6f0507eacd23ee26b5b8a7e0150f0fd701a58d17d82a27b165093b1bb2597f7837cd7a020709ce3a4cd7f4acfffb493d1957a438bb00ca05252d3447792331d66e39347bef10 COUNT = 22 -K = 62da31146dc2cbd070a715f20cf75f2884802cdd6811a8d2e22f9c05a585bb64 -P = 03a295dd26c546fb276717bd0dae35917392814f7e8e9e8a47032393e156d2cf1fc591e78e61fad6f77c29a4da467abe1bfeb0aac4ab947e8e871f707f25c67f255aaa346f5385a70411a0b632d06e6f2993f11af6515d0d3f2997048a60c521a8a8b98da4 -C = ef5c10f7acc3e84022f68cba7eb212320eaae4e27308cbf3ae90b4a26dbbf0ef5bcf998843f3e43a7be92b7bab4f221d45e66672b9bff3d2056ba487d2c3be08ed03f0d133e718e37cafef9ad1833bbbc7296a8f1c5808a42fd09153c8bb3ff0af1ee05b233a6ca7bc38b0bacc32d422 +K = 9e6e21620adb52e7b11ed7051500997c7b75c2caf8320a150599e84b32203b15 +P = 873971847f3a3b65a698073552d60bd07816a770694787f445708356b32058a8f6c953ddb1033b1f70c5779e50c74d48bf70530d1d1f7d97d1f614d56fc2c625c0405411747ba5a3df1d29725e91b78fec0d96088992ab02db6457fa3c21139787fd33eba598e1b6001513f9168b82879487a5f5f65ad805e2feb9c8b273a5742a5c5c5caad962136ec8d6b899e3a8b8c14224a77b7a5b4d57c61e9795f599c004ec64932c95a74b8318b974fb52e597861e87dad59fbb14931405aca91c0e539d4ba2f34ae70d51ad6757b317bd76d29b1bace18eec34e7d90bb629a9dc9c87556bc8e92c9a2591d0b0ee9a31d0646ccb4f21b1241930143b1f78a44ff438820c87d0bb2a7b7972b23d3957fa24ae9d8f7691fd48a31029b50752d52ee4908fbcc51d77cf45b82c4c947fbed704fb4eab7bee92d7cddd43c448f8c39e81a02375b2dc5eed3e04c1140ab041d8fc647263a652d8c57e70560bf12d8dacaf0b1b8a85b2716a145245ef3aa6609655a1ca0cfd20169821d927ddf016a7e8f10d239d7675bb1c4698c44327e05fb207252b6739e98844dba15dcf03e7f5d17f4f8fbda42275dcfb9c552496b2c9b5ea80de47913990a2a6807f7649c103a70ec53f38c0bd8d8bf92dca7dabb88ac6f9d309f9429f3ddb075f8cb5b6df7c35540fb3fa60368338431703f007642bbd9ebfaf112c04bd8dddf809c61663a1c3c767f0 +C = 5c494b05fa708b7c6f0f0467752c8df4d300d3e77fa507260fcc92da5eedb7ff656a2a4d4c25203edc2c60e0afbde8252e3562efc17e626c68a1159607675279f1c4ddf6eb576ba652dc6691bef7b867d3d6183875ecaffb3c95429c1fc221413f76bc3d33893e8dcfb181e31218fa12936ebc2cd5a7e38ee7f074b4962b60d9516118110ba568b50a945c8d2adc0285c0ebef8e876165ec0aa2bc6f9860d55722688766712344453b98046fc0e4841a86ebdb23f85de490242b122e3285be83a7dce3c2347813a1312389564d5c4c134cf336cebb92888f132608e4aaf450c44fa690788697d62ec4e1c2904e82963e0b3b38b13dbf3d4476027bc0809c87b0c22393009da79745cebc33b30a4e8f3cc3762738d92015d69ba1c4b3c1a54268393251a98bb4f16917cf47e275a64ef98a02eb70d403ffebc141df5e3e3a732b055e329efbd1d7983c562c37c1a3c3b9ec61330c73979b0619d000462730d3fa2a91e2fef069cdd61f6730927acbfcc134f2c39b5203465c3607fb46f13adf6a9209ec50cc629ef8d0e7d2474c56af9ed12333e2e283ab24abfd5d604821474efd801a14e094f689cbd96b1c4014e2ecedd55433cfce082cf62e67c554e25c073ffc53b4a4585e5adb8ce3e50ae2f260eda72173911c9a7a86b5914d659058cbacb241d75570008fc4d9c7c23a385d3ad0f5d8462cdcfe00ada3cc4da4d44eb01cc64a6b92a19981 COUNT = 23 -K = 18d31769a331a67515d9f81ba6f692954850de04ab1914103993c8bd16e7dcc9 -P = 6e0e7e8f03b5e9125471eedcaa379419c2d225bf53ce1ea032f0fa882b0a71f95eaaa3f51a4562fc72174c9035cc208d165cf15c8e2991f0ef914129eafb0a93911315aab8afd74ec60c231dd8c475d162f9482ab2fcfea12f9ab77d2a6d788c897f3e98bd -C = 9014c7d968c38a7633f0708ad9a9193e240d826407feb1d9c72b37a5772b2d125e9a089b5338d9b657b1e9ac798e55c2184b0b7da5a7690d432efa12a31111f397c462a806202cd668d0249c18c760912eb35b1bb12e2f369cb99cda411726a57616a0bb9ba853bb848ac11477949118 +K = 8235301467f20b50870d61974362f746786b6b1a904138037e644404aaf3d3e3 +P = 5622f45ca30a1ada144fe2599690a2f99e498aa962a054d5d4261e7b64e64f664e7e59fa78f5dc44ec3a74b77e825aae8b3923b2c0f9c4801f6fc6c1bf09aae261175ca4e638305f2ae28af74b23413e43385f9a1f70094208bf4ddbed1c4b58e6c40a8bf218ac10d08cada158697be100215b2558c264bfb4139465bec2e56225f13751d9395df8d77e6a4601aea2a11f0c4ab1bc4815db7249b32901df06805088b104bafb1977cb20e2e02ff01bf6b1177fd5785e42302219d37edfd26a325be407ec25c12fabdd92c05cced285ac67e3d144ca339c2d9122072fb390223128be0c39d8ca9c557fa2ba465467f49a71834097eb18aaa706a31670489e5429b3c64c7cd04bda6a787ef7a62e68788af965521480105058b8b7acc8bc28f15d3da6d048a626a00491640dbd72f2db5d01312ede5f7b54b64fe352964c90485e600afe5465c3ab86754ea3b244718532c99631dc475eb753dcf108c8c59b15bed5c978f18f0402a11b2b262246b59e5d651f951e04c91a1867bd9fa670e115f7620cd1a1eeb38f22d982c15abcb24392903314a06e48884d7d46aa8327a2bfe8b238d14f93e3adee56f0a9af2ac9e3bf692af239cd69ad2a563d08275870da5136fb7c270cc4c02daa3a440882d59dc848731dad2e452876ee01cd0ab8c6da9e53491f3d748a645cdf10546fdb40212c39cfe03ab301bc941187b04de6011d91 +C = 3d7a31f910ef02189003f08456b4cc58c998d10168a0e6c60f85c78d1672386745d6d838bb19606027f7c31d4c2a63f20240bd93c0c8ccedf18e64e51c69ed56699cfbad7207bc4645779d60956203cadfd3c925564f3d96e0e2592c9e00236e7ee063a9df922efd3f4713af121cfbb1bf097aeb64546c12cd340c48b01b09264bb6b6afb156d785528d9664bb0440b8a7ebda6c4ce8d088a026be7fd8a192fe0e5f7acc6f514df670d230934904bd4b9cdc34ae883ea1f0e545fdf786534d75155661f6f56f03bdcc5e0c8c5d21076a078d2fa647e37ba90a66c0378f81051bed2bb9f8ab3cc4edf994849ea6dc3fb7c219299ef7f99845940bfbbca78ccb3a6000a559881db65dc2050347d6e828cbb3400a1468ddbc3ce38b735f4c206d0fcbac22c45ba9b7ac6435beed452244d01e16e9bd0277f0b6ce9be1bc59782d91a2ca5408113db83ca66804c67096af9012d3bf04b7395a1bbdb85f4e4ba511d011cf6ae0b68afada895b01ee0e1a1445698efe6a78afe3358edae1a4fb1d287ffd994e262ce2bb28ed4918ad133e45a3c529c572e6ae352905e4290afb9c85407a2733a80d4006aec3cc98876b1669f963847b982535312661e7b7f188e855670f94468b697dced101459979da43d9487569e890087864aa94972e04a829f9447083e3bde41eb403ed54fca933db92e1fd2d98af481cbfb4e4318c1ddf18bea7991759832290dc6b COUNT = 24 -K = aafb33d9b89ba5b5938f11cb714063d7e9adfd1ddc057b90a6d2366264897bf8 -P = cc43ffd9769f4d3addd33401c360df1a949a0d99bcbad45f474c7735fa6528eba626b8ac0a07eb55bdc1183917d229a23e724dcc3f69fa54fe433e017f098379307a18fbbf71133fd8bba2740eecf4cb6b6b98e06dc38626df6afe2871caa7a6e64e433fbe -C = 321da53f365d2f84562aa58d4591775b9ee1072d42dc093d7d598de92bce321adf028a779e7f51a6375741881de7cf061c58d06f7c4ae951597e9493332ba3ee30baa5372591f6d47d1987ccc62c8687383d1f08e56ee29fbe6f98b8da0fe3be9660c76351cd596ee2ab02dadcbe3a8e +K = 438d860242b142cca9503f94d39c993428b942ece02bdfe14d83575c65f1bab9 +P = 5f309efb387d3912c87254f2d6ef074ac52d13c16567b71ae09d91e0b3e38e78fcfe6f7a22a7def99bb194e84a680a09204654f3bbea6802eb2d4c26cdc4a996f9f51a59706b656dcd03e05760bc40a3eadf71f1afbaa79614d66f0770e12468b784748eb9c3dc4ab236d4335c03ad906d4366568c9e39562876d07fce8d34f74e612598ef4aefda9282d060b364b1d601fb9c95e5b10837be358f2bfb6bff025ec10049e884805c3916383ae4b006397afee23dbdf4ac35b7a027852ec7bdf5ad9d1e7d42ecdb13b7ac363ccfdca9cc3159c3b3ff9e09a71a288e9d152e1070cb2ee3567f62b9ef121260b9eb4ef7b005449c6058dbef88185437f658a13772d91351c8cd36710cd417e1ae0e28cdf34fbff212ca6ab3b78cff819dee15ffe6284b4c3dc4d5ef7d16ba8bf76160e1c0927e4f012221c494bc8162ac87b588d80871dfba774c2456f3f4e4538fc6f25ed99b5884e5c874ab2dc26a427fce929786aeed3d1442d2ac8409f958826acc5fa0537548db2efc2e80cf3c8c680f4614c5b1f10d1e7912b3248ccb5f04020189384f5c6a70a996f9f9514e1faaf274bf25c87e1a5b5446876ebe6ca05edeaa558e92ae2128bc38bb9473fcb969991476b2c24e50ad82c772f04bd5e24d745c23b1e562b6017f1818df82e0e69abe1877bdb5ddf7c85d61a233caee0cb234670466800dbf860bd28f69423d5dfd4fc7d0 +C = 9660a8c4df945fbd01ec9ac2c48a5a2fccdeb0d0ceb6b146386d0f1f76330a6f0f2ebd2de90b3ee001b7b296ffd91472f6a4dc9984b42213d1cf583d01fafe3016277ef4e127c1a686c7afca1816776ef91422d092d7514eceba654aaef33e0c6f2ebb91bcf107efce2e57ad8c009c3d9df34294df4cf8578c03ea91745fbe092d327f21b1684d2d0e26bc30c523b1758fe7dc95db5bb7f1be35ed7e918b0c0535b2019aef6b90323f9abb8a846d4bea13d19cc45b0de1c3c5cad610c23d4d66b9076534298a5ace6939345bb927644eb1df3e361e54c90eb016f53dd3221e21da946d6c868f689bd8d6576348062bc7d0015fd0b9356f1f92a5a2836b183e03439a079e74459d793218f717e45f4100a7deae667c459ded36e09fb3ac85620540c6f398e7ac8473dfc82460238193e772d9b2e41db9355c5f2be25111e679428be0bd83f7c75743ffeabe16bea16db7369dcf86a13701ef2a5fb743e0f1d123279d8b555c3c83eeab8ae75a5260f737355301dbf15e828b7b32252876f7caeadb1041c8b16bb5060ec264a2996bcb75acb8f91b20867e1c3a79ac1efa9e6f6f01a87d0968ee4328a48e478d3cee9dced3af941086908e73e13091a3afcf39ad46a5beaab7663ad1899fa3fb87562d0e200d4520d1f4095d78a7d10079cf122cc98862fe9fdef8acd26029b908c47bde7ac305f0b3b86b3be280fce7532d110d8f418dba9f099c52 COUNT = 25 -K = 8178c1dd0c6469f07eaa877ff22d68d74e8c4a31498143a225aa2498360b5820 -P = 5afa00ecec76f1d8eceed6378f10eedc556ee1696d2e0519316d74aedc60987008e9a8c898e5435032568e1fb89505495bd04167c704fd38c716645aa56abcad3490504ba0267b9e48ad935931476812e40e9757f66ca59a304874b57ddef036380e645132 -C = db178be407374b0316eda33580b3e4febd4b606b1a33d51201f6c13e60be72ce5d95782e358486d4cddec49c8aa35127c4ba29cd2195e3b33b45dbf9d425e7425819d5a1bafdfa699fcfa19f2e0e8491b6c737730e8381e4f2f31346b8194c7e8664535492771a525797172a1470fdc4 +K = de688215193ce9e9a060e0109b8dc577960822f872433985c473d161282cce0a +P = 724cafb16dbb45338513f3fdc0e3135a087563f9c3021996accb8d5508cd9c3fab22357feec4eab9728d0633a2b792227a51e013ebb61d2c4007368ec7bfd2e38fc731b032b71ec742daa9455fd4b807ee89a08cea556f56038ee13f619741cafd7a99be27e16753d1c4c03a49baf0bec0b3b8ff3739770e6a8eda819eb650af3ee9b2e260d3c854fb0bf7533e134a059554ee0223a40af343501152c0cd4eb619f625e5318bd9801f689ac84141c1514d58fe3db27fcc6a54b40f59de37fe9957f5e13a79cfb727d4cb854a9e95a75a1f795397def9479a3bdff7edc0269a29189b76e31ebfd4f7272ce4ca97eb0cb6529f8efa7179019de3ece8699ca1d2beb58a1c6c9f0c91578f1a8e9b04add044150959f5d39ed950d8f396346b5f31e8fa4a91645f97e86b779afe31163e5f012827c1de4a03d1c3126a30968835c83107ed85114ffd0dd55a82fcbc98dbbdc72b4c0d15fe61f7360fed1e7373f657057ef8bf51ef6a80b6bdfad30a9404bf7996b2c97be01a1e9bcfbc06d179a40dcfcd5f78e4ab61b047480be3cf7aa7df9dcce90005ad89c6fa0f5e2b7a7a267379760e3a8de5524b392e75c63e7e3464788144a2d4058e935b7b705df9f2cda29cca77e935ebcde162506fbf6d48a1353653be044d98b5edc9fcb960c8905ef517e34b9bd5b8b924dcf552e7af5a8901d0dcb5b6f4ce31baded120c4b6658ac1d7 +C = 21a6e3f93838cfea1610a2255d7893a224a448f6bba70d5d4d4278a407b83db37ce343e0ecb4795581afb1ecae43b08ce6aa8717b4e82e25b1066a62186f875b0d7bd495deaa469dc2e4d05545ba6f86cdaf1e9f7b89fb4acc7ea33bc8ff84f81fa2c2f1dbb3bd5a457712d78ff92ec0d4d4cd9b847e3ceb6e295dbd6b8cc4107d15bf7cde4ab4ad5a380a41acf554db2393b35b4c9691c89e54e64641f1c4497d5723ae5f44be57ccb6ad6686758a4f9a3522f31baa883904b572cd04221c873dc0140a62ea11a00ca390dfd6b77e9dbd821ced88bf7fb143941cd9d710d18c992183dced16b3712f52f669a9eaf4f760f0bf4b9fc0c7ef28d50a2bde5ed5a7505058055e6d557d8268c6abfda4a51bdc7f6339d70ff2b137e608df45f1ae41c5bb3a3ed291d0fa13b22145edd921c3b474fb55017243e313622c88649b5157410b2f0cf2da59df22314e906e8b5cc7f84dc74b4e84bb596322037fc414741e6e20c87bb9a01ba6b5310afdd4f96ec08e975438ca0e02729f625c4e1fde6ff4d138c064ff2bb88a00df766703a7502c2f5f2cfb664f6db334f2be258e0c2c581368fb37fc79b643e0acf3df2e5dffcb2cad59c79d24c1d430fef9bab63633fbdb96cdad15d2c005abca4ceb083ed4ec0c1869424250a01b8e80d8593736d68aefc63382961b3e223bcb137047faa3718a0086003e0c9661c9b4f5d805cfceeb91db8b314eb6180e COUNT = 26 -K = 119e3ed6400d2e32473709a565cf27f896f8c2f43d80c74446680910880680dd -P = 918c579e6412b339e7370be22e76e035b841e8825c5cfbea03e67d55fa8458d1d38f7c7fb409e083725289d9d8ec16fdcc2d083c77e02bfa36e0949bc560dfa6e7f6d4cc0dd93400cb01ea46ab2e6ca5023a13c800b852abe9f4bbbf838c66370faed7dfb8 -C = 9e9fb208d8ce8d36f7d8ed5df1efe38e93197bf00469a274a868b9845897a0e65f9805133b3cc893ec9a8f6794d8c1b1cc8c6236f551ae485cff612896b722bc2d3b3744604cf4a7079ed19cf7be3e5cd27b0a88e96f405c44c1d16c5e6414ff46a9f61074e978d0df05a8ff6d9b05bc +K = 8bf46d8f1e9d1d1d1db00d9df3ce339326a10a43bcbf9c589eddbc5798b87f76 +P = c3fa650a6ffa45ca2a66a8a61888c69bd837bb1833d0ca9538a9e11fdd95d36623e1654886e04e673e4a0b02292ea68f9454d19dc96892ad59b4417fb0dfae16573ddab86e9040f8c7ed1a83e1106b53ca2a7c835e08a3ea3126dbf629adacc71e62f249a6ad9b0f2dad786ec802ffe0047c047707c1d8d85e87f2a30e670a61df5de2f22c14506b6ec50a442be6382f1cbb00f79d9f071f7b1a8fb51a823eccc42470437ec349350225ce91c728a10da94a977c4ab7f076676d7109dce86e917bec7a513e05783e77744a5b6cbfecbc1174b77963971286205582003476b524ff4405e4dada1c9db0b33390cb4d8f8eac5518b6d2a54342ac85c31185dc0ce84c0c295e362bcdae4bf880bc15cb47a00996c00feeff74209421f913e12676da342f2407e5fb9fead6c2d6c8c3e0b31ab167c6138015ec23a2346855246b1c0eb6818df264be1c5351266a54884b179a4d551504c7094aefb33f4addc5a4830e638c7d09be93407787021a89763beaec9bcb67fc950f9ab66fb015ebc4f9a1bf5e669b66fcf271a25d139416bf9a9751c847caad0fc0aeddcffbb8853bbf128ef38dd4169ac1d85c35a313f1c9f44b42e1e4438cfda224e217cb091daee2f543b5cf0029677c9873e9cf58f49e52555e846d1f9a2843e087eb79b7b4fd636db91bb6fdff4c56a99842e6a9d534b045228e883f66e191d8efe37a292d647efbd3 +C = 5c19d2d502c07fd7c5cbf2e20c9cb701899ab0aa5dbd22f3592d234593721e173aace2544c35272d29cf024ce03a20eb181b4fbc47ae3a7ae3311f653674123e7a7f9c388294a80c555b84fa5b1713d7bc6a1f53e75b15c115dbd4112dcd593a32bd076cf088d021f29069ef44377e7ca0cf9b02990e42e50e61810090542eb02186b9900da4db89992913e605bcfe8d8b71a2a328924a91e5e4758aeb74a21f06211e2b8beb911586572d7014373a2191ee1ad4d37860df5ed38c4528a2aa33184cf9a645599997209a0b0eeacebf5f98125bd010f428040eced00e07b34972ef232b5e69ed0d825127f20687034dc665eb006922fbaa9b231f568fa586b68925ec5dc1b3f37ab510e8178c95eaee2d77ab6233393d1c7498b28022044130d583fec57005f27e91707ccefa4a0c7d5c3fae9914ae96b6a884ae6d1723be78c3ed78665dd38960b63e38fb4fcebd7580ab745a17296acf9e93f79618b4008d9c37bf05030d22976a4c314d1302e70dcf7161c62cdcd0dcb64ce9d008d864d34191730628a9273b5ad6ddb964f3d48649deab5b738fe3d1092b803c342edcc52b8d0846d354855069cf4e86420d5c23266fe317583c9ceccbdca4b8b3e019df78a95dcef43fa0174ede05afcf06b9ee5f0b966766c2dfcc2123e7ee6a53dc6a12a539db1d61898fb34bf0e4363aef46a0c06e6b96db521b012e14022347c7edfaa314bbd8ab423726 COUNT = 27 -K = 20cea19172eda77897fd82033a7fe84ebdb1947591d2c4d51121dec1554ba401 -P = 58735c273aeec42c835f26389c86dcc26f697e2e9a75dc6c537e76c66d0b1c61e9e74c7f22e3f2735e9db0ce4358b9d00bc97561e9e2f8c318f002a8c7fbb346b6b4c33fe6e88f108d3710255082ea2c064a89c584ae9f1d210263c26f5eac4844009ef6db -C = 4f7a63d24ff1b6e2b43f25f8d08e225d9aca5c8706788a3b5e5cf801d3cda8533dbafd308a4fc98ef677e120de96d779a3cb5dd65e6bc01f6da2d3fe4db96ce3bcdd9928df01e605b95d6cf6db66120fc1e31b2d106c80c893c74b53d278334aef44b4ee35cbe9973110e5ef3c96d00d +K = 766b6ff205b657374ef0017c25f34fa40d5978ae72d4d514b1c98602492e4858 +P = b876d97ae021ac2794cf4b684889cf9773d7e0a18f1a0f933aafa77641b5ac0aaf8b77c467e5dc1e271ec040acc852f31c8dad6e5e71f697a64412b3783b99f3f5cf78c2fadfe3e56d72c0414397946413b0b0b5ad37fad770874dc953e4975b32f3c5e371991fc84543dbc8a0765dd9ba9c6892159737c49f611d30350547ec32c37e5f8e5acc23140a76b1934a4eb4441d941e2e8d8b38c82886a364e6c01bf43ac1d0e177b99f162249314a42a92572552d4ee32873e61d3c367bc4aad13f5d59ea1e8dd4d214bd96f5532eb74f87c55283660f954b6f29da42cbece4b23799f5724003d7fffaa19335d550cac52424463f47dcff7e297d7be42ee2d2df1867af123af7eb9308b14c1f1666b3cd6efee000027b818b33f98b111082696998e8aa965e1e2d76db93ee2835875406b74bfa2b4afb2c73dc2fc702deea5f041279818e014ee04c2398f8334ec0db61f6553c1939e182055d60aaede2f2aab8b9f0aab16d2933723dbb17f3143a84b891c6865fc9fb9e96117c709268f1e9d1c5755d2f102141d74330fd477f81d76b92aa3b763f8cc4a62c9567cda1c3cddbee1109a6f2346a9e560e4b2290b1a4bcd6d020f6429569e39b03dc659aa647e7d2ead045aa7ab170ebb7a8f7afacd5e363b395bd2bf5e003f7428b2dfdbe6a7719bd4013ab22ec7efd09d2d32dd4038fd41d810fc23f54b59f22298a52162f284d +C = e92109b08799fa18f0af56ae632db328a4c38af6845bf8396d34c16f5fc4ce45cb0146ca71dca37202d16eaa8d80ce3e38d311568aedfcc9ff2b0dba265acb02db184d1dfa35e3285e2596d9719e19ecb211c2ce27093eb8b63052f5108305067056dba055761525f0f41c905a9294719776c0fbebe858321ef98d7fae38f0e832481a8cdbd58a6393d904b6108e89516d9a0c40ee6615ed122ef898fbcbfee94260df18aa58e1ee3a9882b807d5167f6e68956955a9ac3df98f2603db52ebed0ee499e7c435c3031109d236dd5d295ea3f0a0048f1117c9ad4f383b22e6cfee0784b0525b44682e791b36fba0a7524b40d24c0fd43dca9d8618ba6744ce186fb34f8b0dfd39791b4c54c571b85432a64560d720dbcd0cd23d722ae2f2d60322ae31f8d1cfccb7c06663a5b7017a575495642009a1e60fc6c905e884bf832c2d3c292a371d283363068851a72708c3a8bf6286b4ea23295012986570dc822a00461ae55d0b812e2efa95cb64cf9e6ed1abb0f3e3e9b01d3ba23bbb7c39d7a3ee9893619773f77e19ea87b577b404292024826008ebca068af82b9d71d4cce75e66648ed429ecac78dfe80fe5b0517f7eff6bf71f9af01228dceebf8d2bf20fc1e7cda1c0d08579cd801af5392a364fb050bf012cb0b5a7b9c4c210d2a711fd344262f632d7ca67fcccd5765e6aa02c31f1f662da8ea6809801655737a647605f8eea5f8cc03b4b4b COUNT = 28 -K = 8fb1a294fd932c5fdab8602b7ba37a7f825b42395cc0be6d99c7678262df9047 -P = 7d1c43a231cb1717b659c74efce7cb13478c9b5bff7f17951458ff357f112d2d68e841968c2a55727488040ae74f493a36f61f25c5343276a13083ec0b1737ffd928e6a3cbc5a888cfa52f14b010c36f7b07a0ca42edeffb61e9ab06a4fde3a9ee46e14453 -C = b73f21c67835d4b02c54c331ff2693702b11ebce021e707fb710aad5f00be4419a6b096d627f00a0a90f1070a4e538cbc5d0a2913f3d5559f48e2707c8b0970ae3195ff422cfe66cf3195dfb54f4d4d57dd6a31b24f7f597f497ac2fe0e312f59e9d473cb9f3da1cd95d1e4fe6d92335 +K = a969aac623c6cccf7813cc1f29ea4858e7f0fa898c94bd9f0564436d6b9feff7 +P = 573386e66d4ed368a5daab126561ec0edf42aac48678ac5716136e3150fcfe7783861327fc2a920d2e92f983f17fa5555fac6617ec63eb2496b2b1fe2e6675e5dd0fa2814ecc7428e186974fcb941cdf02b9808408f0fe338c4ab5158d72f69860119963f1ef8014fc3e38694f0cf06cc7202183df11d011245bd11f94547c1c2754ced56fed6f98560cad22ed2671388deba299d2fd754dcd91485246109bc8e8e5de14f611157eb0d7fb5414aa204101c2a9b1c9b8cd71b1d73331fce356e9493fc704b46a5b9e63ee5dac7c6cfc39dbbf8603705ba88abb832f6fc699ea96957382067d2abc6d240694e415c052d5d5c9cce67773ec9f1a97c5626e9086c789d377b6d82813342ebcd9756ccfd96b3e751dd71f7a966bd33ca309cf6afef446d00e5b0a3b18ea9a37e6a289a0a74a1348eba8290f750fddcd73a0374155537d6ad79a5735e4a8d3456c73921d40a4ae3fe5b42bf68ad4559b840bc60f3af7fbf8d018288d657de9092265352911bf91828041eb8c1ef774030aaae894825ded3e4e5dbd8620aa8038175ff2d609d72f76ecc466b9ba009cd78be6422212c48e716eb42ab796a4b9c23c40376fc9e23d6aef4d7f873d93f48dd0534d47bbaf16078c357bdff534ed4ac3a98b6371c5cf9de8d92e2104fcff8559477a61426b918d304f99f94a4e014e8efbcf33f9f0a97dbcc75e393247a4eae675f220af1f +C = cdba1d96442f58b70c35d0dfb5eb4702e4a0048b768b66148ccd08ad48a91defc263ff22aac51b696ca1851ac97385b12a1cf0555f2bce88b272e69ee0765b86ebf4a7fbcbeaf62f235144c56de8ffc7822c2067db93b85289d04ddbc6778069c39e69b61e3a18cfd2f96bce884d53287119fedea72f0602eb859563d06f7b840c61c474356ed75b4f57d5b775f025abf039af93c6601951953bc898abe62e40e0b38f0acc5e83c39a27a6d21d5515b9c7c435a1875e8f98c2bd9c27bdcc8e9d0267e32cf4d0deca772e198a2c5653858aa09c0036965309e2c4e4e4a7435ae38afce82d8149e8dcfba472a05221bd44531f014d52e4b27f2de94e23d66c3a84c8852ea664f66c745be8ff415712dd18ede69c8b0336c785e7ab220bcdde7e764625bcb9230bdb6287834f81872c94d9621df72df689b5e042d3c5ab48788854a87d804343c623ca017c096da3405e42ed2d447ff85fcbf52c4c6f744052fc60249cde46c026a942e36c36bca7246ac88b611e8c1ea279674f4fce61fe71546510bd337d5d3cda338694307f3fcb1c56fd73e35d091dcc377f9b5327427294430b0c5086fa6c9a90c09da2be4c636ac6d4d08825df6925e73a547c7af8c8b1cba4cddb860a16de91e86e0dc8305de5d7dafd23e058996141e956c5bc3960101fe24456592923a15ba692276b75db8f882419920e483adca4e9b9c95a242b0a0e8c029a35cfc1649f COUNT = 29 -K = 64f058309c52cbb686910691e2f4af302c962f1b62b6ca26f99ec4d3a1e9d0e8 -P = 52bd5b61d7de47517cc6f110e4ef9ac350f9f4b896cdf3af7ae1a2704bf6f40c8a5bb89f3e919ca96827e9223635ff32ab96a272487d61fc7e6f24dcee2bec0f99bd2293c197aefe393ba80e44bfcf7e6998d2f0940861f7c304e0e41b6ebd165ab8d2fd12 -C = deb64143c7ed792229f997d39441fc38c9b5517b5f4ac74351d5b037302a2d2f0bc7e6761e6b238e94bc930b15175fecef3b2fa951977e07faada09d6abffeb37367f1ef8044a5c2dc1233055dbe9e1666ce57587d36f5f7c1ae558c62e9abe54cf6c2ab40f171656d3ec541117a9cdb +K = b2b622c7c3118f6c1ea22442e07eaeefd5cc1faf63d959ce54adbdddb9f9192e +P = cf9e3cdd5870ee87520b8cd97a995847ad029fcacd89fffa5872c07e5217932e398bd7938ddd1e4c850a21bce5b74835e1a82cbfb37a560d7090824bbd68cef6be60bab5df2a6c54bdc88ec13d1d536b74042f3a3ac34e71254e7d9f409c389a5e0021bd38f218216d222b89a378d2db54c3152434d721bf6e7e79e28b72bacc5b0264c6bc3486f9ddb2fb47d67e7d22b9fb36910ae86d5bbae3a61936a1b06708fe282441b395162e31f66378173800e7853bdb132b456c325af73abf7b2bc9e927cd1210761e05522ab35161549eebb7cf728da226924332e7f62b7d584b369eec42a2932abcacffea91d9391a689274381649e46cf367df124df04000abffd72499527d71c6c73837bdc659aded9d38a9d8009b411bb59102457f040e5522c441ae4ba4378d6e830ee00c08d2bbed291c3f0df453d2ef7260edcb80c0665d0433b5a902d14a1289b39532af97bfcb0db734c7a27feacd74b5a4337f1213f5e0b719f266f25401d4aed6611933e21f2822ced5793e1962abc0412f516ead8e52a7da9871f1fc8df857458ad76b7dd04dbad11372bd8fd9be733f4f553bd370c6b36e1cbe2e92af98ec760ee5ff949d52c822538267698685e52ed2bd65d7ca68d02f3c417fa2071af5fb9b485ccc30ed49ae7090d49a53f4fa5a50be754e7177cbf16ecccd02def44594296a5051c9d655034921da0f264b6d877235763ae0 +C = 9b17185a40ed25c909efcf700a3c63b8353ab9ab4618b11319068ddaa20fac1e506053b298f3d9ccd960764adceb334dd9d4b7ecee329436cb1158fa710e5edaaa960906c5b2d388e885fc77f0f75dd5f6cfc8eb97bf8fe78f9d6c32123f8a483a938aa4f89452f386fda4c00f06222c2ad1ba0b491b26d0d3dd09a0e42dad321d8665e813ac7365997df25d26f68a932fd168678708d1a3992da49ed545fbeed344a851fa319750c4b4c7d35d7c3b05a8e72d570a04d749c6309e550be9f2d68f3172c558a04ed0f40fe8220d61f18bd245c3b7371824afd6ad13345bf61738228a3446df7464460efa7e8c1035de624c9fa65ee889ea87368fbd5049c6cc0e8cdbb9ad6cff19d2b8bd7148f2f48cd08ff174b0ac845b493e5f8f11bee48a2c73ab3468c74da1c583f564333810055c349ba83450028cc9122c2328994f7d97e5399544dca426682a5f7e7f98fabcd6c0e557e54e8263465217baa7bd8f1476ebec1a0b26b0721d70f4ad52aa663165d92bcdca92ed19b8886be23d26f795af0cde17a879ce5aacb246e30fe8776e65656647a6e2c1b59047da667b6f65a3aeff9641ec0f53ebee538a15fe6eb786433a3c6a987da5e53bc872393050f1067eb02baa5a9746c61d541758a86f41f866c931a09d7ae6fe3f02304f3a4293784673f835b21ea07b5a7c882976a12a016f8f1212dd91a0115635ca122e14a88fbac8e607a75812bfc8 COUNT = 30 -K = 1c597fbe1efdc52dde00f3020c77d7dbcf95a9a3881f100d5efffc4485bf1aa7 -P = 6827b548b3a679856b6fc885c296ad608cd5ff39d572e4b05c2a1c84a160ec7ef7a73b243e2e59e13e3c5497595da8ac9c32e7eef54facedf32d9cd3e36e5f46aaf11904f4d19ac0d367c9ce4ca7a315558052d64652ca37d62bff451d39c6e7cd69e7d8ca -C = ab3d03f1f2004aeab89988be095652cd136a4e6f2d881aae9ec7682357980d1aa3724dc02c264c82e0dada6a1819dc86772450227b4eb4118341aed431730f8b7c9f866c2cf844a24625fbf1e29d67ff576dd721a6187aaab64cbe11f5532670a5ecba45aa1f912ad665aff29b48f8e7 +K = dec8957598bb61af5215f43a9d96ecbb97d8ef548027ca38a508292a5e776e7c +P = b318f2ef17be4a70624f6cef07097fa5dce73c853fd45dd1c683d9bb94d531205d26f63237758ec7ef7cc808da2cf857c448121937fc3a4f95339dca1580a3af880d8164ae72d96fbe8e04da4425a9192c509fe47cb217bb048245773ff2fc0dfb3f2020c8317557a94d8b203362a7a2df1c5bf297f4b75ade1adcde59f282f542b503a54e606c62c22b01f0c92d4b88759adbba49624645aa71705b1fd3257110afb03d821b349cf8346c1da9e06c5973f16fe66a31ea4a280407156ad4af9ecdff4004c6893c1d1b991620f8e23824518d0cf7c535ca3cb8a025f6bd4c70a80de25702e07353e7ffc6f15f5c7519c2e475b47f9439e434bc559a4f655aa81d05edd4f24702390f0c2638100c606c935a0fc9cfd36f521954b9a260530206d162b85461b8b6db350d9a2a51f659514997a4c11fede457f46e0bb62125cd57087669cf693753308ab04b64437e59af581713fd508289de7c337b8893b587a5558396809e2c7d37fd7a2e14591d73c004d15da0f4e6325db5109ecbe34e4c9eea480ec90103f4e28ffb6f9706148538721564edea291742d1ee12501675b96378cb35d49ef784aeeec88a3e85bc8ca810705ac10b886cdef7bb17f335a488b71b85b1eb046ac207f1b1756079a51adf6fe3bfa9ed393387ba867b1db98e33f0961ed9acfff85ede10f2c61d3e31a4636cd9978e34bef1fe14d0f643a00e0c233e +C = 06b90b69f1b5eedad8270948a574ad08a870aa481c5bbbef87213144a79cf949a5fd92d9912ce2be998b8e78d49b9d64ea78b986b45aabfb0fa40efcba03cc7958b8e4f010ffb7a0e2b5fea20c709f0e82b4404e1afe0bc72a874e119ef3f5c46f85a2d57a13b7a91299f518e9091c60c2fb93d6ad4f2b78262e29132e469db34afabf7b097a2a469e95a4dad9033a9c77eca7fe95554c6c5c87936d410f0e60b52a8d6afa97e41109ecd30813c7e1cc68b450df640a4fdc1c2c19b59f4be17e68aec993344638e54bcc2c1c74e92c6f4b8d7b46c1d5cfca1e99b902ead3fb10318b6c5965e065e29773ba4b6115bad7a0dc45d9786783af0d50be4fc2ddbb639e15b15b27ef5bda097123e4f062e87be80b5d6eaad242622faa4a01e19803b8b1fad35b7d92d54d9ded60529fa79492e72d81a305476477715c55621ce20081b0b62fb5838c852cd6103da25dc46faa5252faf9f3c7c04794abb048aab66cd8194fb4fa7208e957a8b99ccb50e8be73bf08510cfa61f337a6042dce85c6d4c0eeaa249a5f2749e6e3b35a862e5f059af9fe910ab25360b53d3075073fd8ba558e65e18e6035cfec1bd03c2ada3c5abf1e3d6d3043cde43d78581958656907eca1ee687316f70289d66d6ddee70e3674616eb3b3da68963d9e28628b5d739939768e50d6404237a6cfcbccd22238e534c3bd9c41209d98e80835e432f312ff51cf13a7a949e01179 COUNT = 31 -K = 77b89ad6a66153ac840b6c320f35ddc1287173f18dd9835c6a956f665bce5f81 -P = c581affa404005c1657a39484573ad748d40e6492f6d743a9253316cdcdf461a608c0ba4bb6dec3b0556cdb0a347b6cf88053dbc34e0468737530e691fc377ce408d494a80ca6714161125311c55276ea551e456a968bc63e9a6eee95884e61d9dfed726c5 -C = 38727e01ad40c430897eb5489145aa409e5e4e7ca9ff4dde2a49377e028cf9164f2ee5a8a796865276437e63d6d182e4dbe38ae94dc3cb7f7e135e20f9db22488527f66f11e4a77c9bc032c13372d9bc928cebf6aa998c7e2e0ad7b0034a4cedb8ce6aef2ae3c790c4d3322d2fbbc738 +K = 41cbb7967a0be1df4f0bdd5fd292efb1f627a6c70edf0dadd756cf0b69c00067 +P = a72cb6f0868ce395a27278b3a32801d155e7a137b7b0b5108c4f521eadf236d3f3577263ea39d9178023837c2f0e9d1e07ad8b98910d058200687c718182f562af5c68727ac22ff33e5a66358100ae10443c2b5f7c4e2016cad9078d7665bc5081a7f5cd32738f9994378a3148e30c822167e6e2a41c03f714cb46f88db7b08c1fdeed7589c4dd5f400ed5c890a1fc3b127df1d039e3ec5974fb19d5359dcd927b2e92e0dbf2b697514d7cba18d7ce5249b3564bb16e53399300d57408c60b0062e54a25c1fbc17e3647287e281b155627ef185837e48ffe50476a7928a20ca827e67df271442f3f0d5533b128ee60e03d6411c03df8f8701ae51fb56d9c0f7396d0fe1820d5ee8a0f77b412703b2059a1ef622eb9e5d1c9fbcf9fb655365b1238c069aa6d072f3d6a6c0ff003b41ce5318fbcb2825f840a993f86fea3e2db8e5789219e06f7324cbb97e00348a12a0bf0e6c6a1e9a62e81b0e332cbfd848399b2d27a3508892c65780aeba87c040291274ed91ea14a57c1f9daa128fecdf8a904e49e4458d0bcc7c706d7b76af97373ccfeb8029074c574f84929048ec627f7570236d649ceeafd4e76a1f1ba79e4398a52907916fbc05879a498fca160649582b0cf190e65f677b1048b149087c8e09e85bf603fe7811f514a76ce174dbef6488163fbe18d3699132aa79f9e4c64a79571e6f78615605b4d23094c15f0430f +C = 29297b581f733c666abe457aef326364a9d52422de6ae17aa0d509c0e980404aa7b91da735c71e2760877ff34d1c24a9ea92bf3a9ffabd113b1d91ab525e5253e568fcd37c6641f5baaf7d477b7197f8b32b8abec675b88bef4a7644d834b7c1bbcc34ea181d3155c4b04dc2f292cd58370ed219d2a1782ef4308a3ecff5295836ec94194c0ad421499768a0b3fbc264fdb47463f6ccc46cf26ccadfdc536e6d95008c64c933e59d527f3b68028c2f6d954820d3184de9bce40c186fd97065fe73faa928df5cee38d50e57cd1e031888d93965661c9272461096ddae0da8017e2fbaec596eaae3b0ceae137dac2b49055fe134b3bb3323e7fd55ec94c861cc44ea98e14399217a6c929ac7fef216750817414b0a3ba9493117106a6264a745f1dffa87a612b2679ca2966f8ad27da4730e110898edeac479e0f19eef1f911a9cd53b275c4c7cad4c13d6847e142a28e0e167da3e03a1f752b6077ea0780cfb6144895fe3574d246103afd3dbb2a36aac7235c8eb7d1f3216011783c1450139153c0b8eeb2b0dca589d3346ed528a1ead974f2b4b51ccb0075ff68c1a1d4593edd194e3527b38fee99a349499867cd4cb18891ad05fbbc185b6edc733ace5e4a3dfe065d22fa0f6dd31e2644ab61e58e345c639f9673c967df43d840ad25be530f96ec08af0e82e69de554e5916b48fc039b65cf69cf92041e4ed2fc62f7ed77527f71e33f4e01aa5 COUNT = 32 -K = e08b4e24019ca3e5548a56725fa9273c2d7432d9cbe964c74ebbefaa94ea633c -P = 41a8dc3d7d580105d3a0aef3ac29db01f8a074ad1c0bccdf5bbe62d6b583bff3f5376c8558d955b39798aa968cb090dc13afff0eb058509a60b498b86ea80ee9c4dc2c4190f75719c371e25c0dbeeba2f74937a21fa1eeea89285ec428de5a6212e25537df -C = c60fe641ff5d184f09c3333db41c4f9e58567a0b8bd452fe216ae23a07b71aa7bf25b5293c4124c422ac94be737a0d1aaf59f46c4061dd2d01a1b39d267f77e0b640daa246db149de3f0bd86c5e2808e42e58a97ad090cd4ed560cd317c214bcdc6206a069612891f09c8126bf906f58 +K = 83a30b8ace50a8bbdb2bb96a4177a2c95cb44d1352dbb47e450fe63cabd4596b +P = 785570562929815148fa13f1c1074dff9d4546b3b168c9aa31c68224e3672ac410d4b8de0c31d6e4e50b5e8171d2ce301a675ca964304582c504b69a392fcc29c796305222c161adad435e1e781cbaa72db33aa3103bdd6833030739b454143f2efcefa01ffe96e17cacb6e75905650cd9ada0644fb9079660b56cf80b64dd6a8bb6f32641d38b168acc12e8f5c99b71242e7e4eb0f5f47b640803d44a86821530b9cf2d540ac12ec17e523a0594a65e58c6f0bf42dd4f3487d81a563b9a70b2d5e595847c583e3938772787fb95f521fd3f3e12dae3e66d583b6419a5a71e4890842c87227b71f07044929318ddb9d3692af6def2055f3c75d8e96f7a6642a57bfcee7a0526a6396bbb4e1b770a8f7f74e5efc9483541f5c265b56797e316816431ea8f4a516992a1ae65a1bde09803783f4bcf891c153710980568b95b781809520d64012cdcba986bf020c0ee7c563aff533232ba05476196ee88f10208d5a51d18e64b374023b9bf5abe77e1a51291800f96f6423207f51d493512df5c04913de6c31d2002ef0952b82030b4fc8ee8941589cd279ef946a54fe5d8f54df7c634a19d13ab6b86ab783903a9c75017d9bca346436fd126bdf62232d157ba8991585cf11f42e3b79d5784d487ae7b948b075c54f040f2676d299e6c06319fd38a7b429a4db8b3a39147b273524062f943d733e1ed6977cb0222ada7bfb3860b +C = b53c8f4413f6d821f9017697d0ab4d97a8cee5a99df823d305f1c9df7f40744be2832d6959820e77508f4bf6a1ceff875ef741d01f2664f62e8fdd64417cfce05d0307e9cca8250ac8e487218639c23a756ee5cbc53621be30cc23bdbfeab8c8d50507737de5cdf376468f939fdd75aa2a4bf86e2e13e4aac72707b4dd36448cc1b8c2844edf72ccb02136aefb72dddd9c7901071c75cef33abd36e4d1fe9750348adeb30b1afcda4f6563f8a7173c690c530e594f3d563eea2c8a229de5a01bcbc6a45c6c5c572806d19f27139a05f8f000f55a614afbc86cf0968de76977bc547ca1ebeec6a7aa54f0775a10070c2466f7fb55af2815946dd982c4ec2aa5e442b5774d21366fc619a3bb6b4f718bfcba3f673f58cf20e0105c16169bd1f92ae248db3130c03b3843cd3b2a4f35e755673f82d311f24c9e3c58da68d01d83934f2b9489397483fce349e0707d0bc418f10d04a8bc26b954bac822378d6992b3791391d4411eba85bdb74e6d9f68cf56a6c459fe1b8495166b28b804f80c6371526221246c10f42088791f13374d816988f7874dfd9c8a6776a10fa486b4e6a94d4aca0f527de534112ad8049c633d45f323ee09b561873ab6d24fcc4a763220b8b5186e91b56b8f7c2f4c461d23c452ccbee9366dd8e45f6805bf3ecbe507f1439c98222ea9dabde5bd905bcb74bab3f1e81cfd67f893405f6755f5f2eba79a9b84e6572c51db3b COUNT = 33 -K = 429f93b16a9c1b391e30bc1ea11301e12732627e22244c9e2e3215a036067c2a -P = 0c4f40371eac8a8b0731ffc9104c1193b0798667d99d1e220c6df172095f31f62e65af6e8d5407f97f7729c4ed04759c2bceca24684f2a982c8691174ec5e51c1c6c2a66bb0749f9db060bdc53b48190b8b5a00a16b6c33d8c1b752d3d0406f0e46206483a -C = 8b0e4593b97cbf7a77304115c2a1f2455b202a02ba681154a943bf8daa024a63f5b19d2a29651fb9e7ac44fcff916a24b89ca011aefa0956c710ffb9a8006170a08cce8d8ad32a6147045e3a72a3d16326b37e4a14f17e486d7b134387cb60f8eaf4105177204d67682286a85b2ede6b +K = 74a067bc2d766c1e65be2de23024fbe3cfe211c1b7989b578f5e8f8789dde5a1 +P = 0dedeedd3463322b495ed46954b0a00eab3a822db93dcfe01afabec0025796f31e400cf7ab94408f205beb94351494bf37b0ca69b830f443a352281eee3c3fa6d625a3e7f0bdcc88981ad022c37a42e6688434e66f065354eecea72800b30d6b489a38cedea6a26758c28d5bb0c527a70ab0223f93bb03c3ee50e0af006bd1030da9ad901d2c191fb5d902c910df459c3b412255546848d11666312d3db2bb82b0fee1571c3fd2a081c6dc7d10079c2cf638ca38cbe6e1873b871f18d58399f6745a42dc63685eef23fa0ffd97d042016321ef279cef337ce8385a78308696b449421c64656fd69c1d30640a8be12e907865d705cc191333dd9dd386e723fe37828d8f39403f6d05d462717304eacfa680f69a0846380a43fcb3df04bb939da233a051be81f5d7a4fb118ea1eaa69695f374852d0c7b58bcf4a7db67092ad0a26aaf9fa3be77c3f2c43a952e1b360bebd1b69dcfaf912159d20bc0818c7b6145e40c8341d8717be383fd3cb08de843a5d0263ea7da333f9460a4436a06e5c13535500dd4e6d887d903991f363dfaeb105cad4b6b2d69724d412f325de56cb63ef7732216e23d3e330038d36606341c6b501732517848d0bdaf813b4ea21b979f134c5ebc343362cbaed8280dae407284f1d33178d9ce28c828578b47dc9ce1094d4db1e754cd17066adb615e407cbbc4350840423a08b58eeee34e4b2040e885 +C = e9507a63639df2f0c042d495dc3f4f21df2ee8516f1df00138bf6c265b1a2b23a2e17d80f8b5873734b3dac6127d2d8ee5fd1d690a1f0645bf907939459c6565d07eb2f078596ecac30cc8984a4beac455095176affcc2abf78d2dabf3cb719eb957757b07014fcb77d918cabeb6a302b75b2706ebfc6edf2274ab533929c4bc99b5b3871cd1a428a1e30b1616028a15260d582df70a19f325f0fa68ece2ab34111af682c700a16bcac2dbee8948ff81e7c5b77bae1b476ef704bc7786e282a96d8b2035912b9f467428d6263b309f8150e9d6bcbc66a907d9aac741a1ffa414afbaa510b2d2ae20f33b58cb16137f5c10594a5a94d3da8169ffe807b859572e1de21e6c73e70a5a5b86e166fecaebecc808c641a5f8933e93545b7ac3ab047e34c9f9a6d30b3dc76a4a082cd3de385fa9dfe3c5d46a32b064b2f64c54ec13cfc176ebfac87d46005e383ec7f9071fcd4404572165ed73ee943d4f6f6ed4506d0ad8fb96c19627567ba6c620873c1143330a36dc74ff22e0dabbb38e79ed2324d74827daec0dd9d6d564296efbe000ebeffc207638d6de9137bc95429af19c166e317a4bd78dd6b0a5e79a9880fc1786ecf19c87bf15c3a8f3632d0d6795693563c48bc55e069e21f465b7c22743fc733d307ae8311d5508f9925a28f3dd7086e7fb5dc7d99ad9f1d2c3de95c91b4950016804fa2964793a383366cb7a745035fe227834638d4e3f COUNT = 34 -K = 241ccdb07f1c0021e885dba150b5bf9a6e90ee1898029d5e61820dce75fd3b0f -P = 9cdd3462aa9170c2ac394083d9236a3a42b5a7b6ab00b01dc815739c315edc016315f674004a771c0372f9b13cccaae799f66f61a2ff90e035c967ebf92158b6fb4ea92f0a62906715fd6391567d6fcc53f1190edf97ca4d944d8eb8495e801cc2b5c3753e -C = e7c9c903f14f51a3cfd7dcb99c2f2c0e4442a6d7ebb292a39f7b1c905e0f361859489ca9336888202867b3af7423ba77fa143e965cdc0cb0f8757fe26fcef079c7b83a537f961d87386ed3b87cde5f09a8d8aa1ff99be25c2b24762276361c996fbc258b81f2f3a85541fb9d1ac3cbf8 +K = c8650eb91f6839fcaac0617accc343157bd196cf6cecc4cf1fc930b60fd73697 +P = 027128e1cc804f23f7fb2ec28bf72d93c8cdc2ac9b9e384ce598f5c2ce0bd13110d622e2f69b172a5131007bebe9b0a86025627516349851be89ea7482862a7dfdffad55084c5a3029b478bd4fcd85f802ab80853c9dce295269b631b2c893473d596ba1a7217549426f52b0fa14f88ba6eb73cb68c88294cf964db45992d747acec068bc6b258815a565ddbda7206a472cabf24889e8c369fda5ecd79343a53d4506bd8f45d26f6d5f627dc5cff3ce8f4b9faf9e71c68a35754001ad8a213839b872c4d7370fabb9ec377154787c0280f072383c838f3e07c7f841ec34203660695b59ecc1c45380b5ebf1b9f061bed94d2c47879157e98a0d488ad7d91499536e6819e7c237f651806dd3b3e0e311a282c9a2710a1b5e0d40401f98248b2e1b9b3a3c6fc5b0b4458c8aaa42d084778fba5db86ac8a024fe790d33c075bde603afb8fb275ee0169df6453f9b0fba86272e5f3f716b5c9e2913da82edd0d749a44444f3b2e2ba573739a41659920e8cca9100b8e1fbf4999ef1eb29f0290a754b7f147e60b5c3fd087f0261eca502bc8c3503659c9bba4ba5143b93f741c81a1516526451e970a04315a373066fc46fcd1fa860e1aa7c6f50bc1783bcf543f7c519269bc4eac286ad8d8d649b109214a3c77675bd71d0b773326da8dc8c9aaabc1a6c2053f5cae1a09e7b3ea0b34bd96c25af4868ce64f900b69268df2690276 +C = 7473adcea34e84f286746de740942f23c630075268cfb3d3441bf45a133ad2ca7f3546b58c5914535462a182e4bb697cdab05c2a4651dda493192d649dbf721eeb56d5f6cb92338dec8b7685c6a3c6531800de2a02ec0db2b51d36b58e4cf304285a4e75e279a43ffce1edaac5c846cd0f612445cd6f3b7a7b784b821d63d83f5fb010d78d41e9c0dee1d1e03d1920e1954c499ec8428d06d89e1eca94c565de92f44384985ed35f87dc51758c725bc14a42ca26bd43acb3d170f43bfab83e081fd7336802f0d920764fd42835cb514c9ca7ac6f431628588529c6dd2a8fded2de79787d5ae77836f9255580b0413a682ac6f3c869b6d08c77ab7db4a20dddbc53acd02e8704ba0eb721f668c6ca245c1920ca4696802baeae9d74abaa660ae4e734fe482b06f59d59a84a0116548c3dd657b7eefa4bb48cedb731799199233cc0d1a68c372fe3d03b7ad6fc6e13cdd7342f1d70084a7c4052783eed4f086811074675e339e80423d60103ab4557da9cc9376b376675300b6f8ae29333e1be79c507a448b8dec32cb53d6897feeb4c50084a7996f630324d421076d701277666bc833b122d645fa679c8147de003057f989c97a1847c97fbb3dbf00163e3482ddd7e55361cb26446b9d86bac0043ffd41b9b12b8493cbf30065453ebbdcf8db47aaf0de54cde47fd182e3b6465e9d790f153259076c5b0ee67c30d2efe039480cf39977d08c708d0 COUNT = 35 -K = 5cefd0655620e8cd6192351804a2e6d0eb714938ffee0bb80981bbba4c8f23a4 -P = 539b8985c4446c487396fed2fb7c20636635095422ebaeb90b6be600865cb38c28d54c7a596b8634d50990f1a7da421d66cfeb98ca1176e852ed7947c00a82cdf77274562c4145e2808556bb23d8d5515a185f9119a45a775e258805d86ba2a4da2b9bd037 -C = dfed005ae8b2a1197dddf8a8be1bb8eeffee64ca66a8b550c5249ac646f800f0bbe4b8bac8a6c7aeb83ab9c364910e01cf732d70ff7e0619b29cb22164275399449e9f4543bcc439b30a4114b4fa1000a3bfc3ee937b686495d8e4d8db5782f9f875c6150c377ae1ebe8086c5cc10daa +K = 55e19680395a15a3dfb1fc5bcd1dc59bba3aa1b7cb5967f5102a5c11335387a1 +P = c413e5fa1e466d77e5c5efca9b29730e70693ce67fe974879cbed4b2639901aefda1b3cfba441a0ca4a42a1e824f7b28fd38c7ce71b52d067715f322803f45ffdf32a1b2319c33b5436247eb31da2c1199ddba131fca35f17ec55d9d614fd1540e4b4979b953f3229cb03eb45d405d32b258ccde6478f0c56bd6dfb29c90c22c7d32ae0acafb2e65e8494acd1a66afc9a57be7bf09a0a84946cd959632f4fb79963428f692492ca493c201861a0eb75a609b239e7b3097d1a1ff9a1a124c420b6d852743013441403897b6de700e6db6ed656b0df828bba8c6846162816f8f16f14e6b85d71630ca33fa7df6748cb4dfc98616c3a8a3b4431b41d5e4e8c145028b1d2470ce1c1928f8506368b21e048310da501eee728fdd08ea0d9bef1311dda5d1debba9ade925332186fa487ce7830e661dfbda7658c38cab798c54968547367398b52313e47ec8db2dc284e4e464d706751f4e6f88e5a46e1b075e278ae929a819941a65b4743c03bf5a2263a9a38e3db975195ec0b89470f29bff489ffe726890a668e2ac94bd0572dd66f63538b1c00b4c6c09e351e46d4bd4eaf7fec3a9619c471b38bdff7fe732ab9190964f2db1fcac74b37774adac2763652f68493ce405df5bf3eea3110f8eada5f3494f16372017d9255fa32d00e047073e5ecee3e368bec783b046eeccba8fab23fceb0a62b80fcd6a257f7475365f86bcfd52 +C = 7d121edf3876584fbd02ab1d2e76146c2a39020ba015b9fb7900f4a30124adb8ad860c1026653d85daae31b188ced837e0567b9b2b313a173b69b7d5a9e73a48df08d3225ba3f276eab07c451309d484c6b35f2b999830f4707476b499e74ec5f5afc809acfe4b4bc29d94b92eb338fe129d8bfe13f830f5d1d2c476de165a25d751459176387ffcf15c6848beb127d2b5a28179c08e5f05a9a991c444f6c998733cbcca2f2687eae40f64fcbf7d4e235002b8eeec87e351d839f6b6c2fc37d7c43871a1aeab4312788e422eaf25c90fb4d5b6388f49a7f3436eef4134ea1999084b014c660892ff6e8eb862788ca45130b14c87b5501fe54f22e640dc6a7680f475377958c56432a1dbaeb987146a5fda19e8d56cce27d9a35e65205347dabde3684ef2684afaf31ad68a07c18d0533566f91a5185733e1a1b0e13cb92419efae0e58623503d91329c419ef522661d4f024bc5cc4749a304a0e06f74156d8526138a4603180e6b5bae3b3a2872119197b25ab69acbd7994d4f0f1a1fd58a08fe35ada91996bd89c024675e935a3cd54e087f5cbf2fc376d725ed6fa55c53c9efab4fbaff10ea132ed23259e25efc55d9113fd427dd8b44e1bdde3e62459af7ac37b27c15de11bab3e6500e1baea3644c9490301b1f9e65e45fc35db5a7b580e4c158169a79e54b6b6a3e8751b96d0fa5a81b3dc6c77545c64db0abc4d8ae616636d543386b127f6 COUNT = 36 -K = c946a3a6397a335da3027fe6137042d9b6dd754ed3503e73ed1a1e42c004dbc0 -P = 9ce22e63d259713f84ae7857b72d3b03555b82fcdd0609dc5229a4487b351df8dfa19654d578a28a349567f13c89eb85d720d29da5aeda9f0e9cfc7623080559ff268bb0625f0edd0b67da211f8b2308ac50f7c2feea1d8df6a4d0a779976c38ae75311d98 -C = c6a2cee34557abedd8bd7d987c2949161c61f02a846144338f61bd9d899d30a00e6fd683da5f3ba929b17f8d28a9143f3231dc91deabc2fd21714c96dad0b9faa2017cf6ecefe70abb39c71a07499286b20632085e801512c59547a28f52f422a4756b9700ae1c71bdccffb105ee2591 +K = abc7ab25f794a5d5f08c34dcf3f8f38daa16465723ab451368ec48a054c7c0ab +P = 5bcb86c7ccc131491fd44094d4d3f55fbef0e14773c0511d13735ff688eeb6e69e08f17c6f18542bd76da82e646b91a05d2c087fc1b6d581090439707c0cee64ef3587d2ed6ff762a5f6bd23b8b0d9f70bb093fc001b27567f9b943f97b99d8d7daff394c2b2f08706f6f4253a7f28e959bffe2e7cfbc5dc7dd67143312bc11466d2fcb257955990988289e40ce5c0fc74cfe91b43c303d201fb39a9f0b6474fb10bdc665c4826a67461a9928bb346153f82cac353cd090bf5b0170db327cc805bb58036d226eee03f2db350a578354d2b329a596e6e8432fde6c4dd2029f55b54c691f93f5f9a8a15b656224964ff3fd298e2b3cad592b2c25013e0dd812a694c7865b455a38a8cbd897e6d5d1120f9f502f56836bad630f5e2bcebcf8359f66cd3baadb66f21e73c6b1c1bc884caf2d41901bb76381dac197be434f9dd20d26b89580a463fc7db1c0a96961aed04d9b648d1b2b61b57411595965010ea297c5af9bb8d71474b27c40dab5dfe3d91b7e58b7d714b99372474c73cb923880e986d46da7c5beb0685fd161431089b037d5a7db703bd286d4fcf14df2ce0776b7d640e5996b016de641700c5def2fda1e7096f4898f538b02e85ab3d79798e0c153ff2936521bd84e7a9ae438f60cdb56297f849d5adb1762109fd590474b0b15939112d81af80c717738bf29b9a454260ed16e815fdfb21fd996c72ff4318b9cc +C = 1eaafeb3f4908d4d6c4a01b14f01ff3ae2eb77b6b5a0b55120937a9729f704924a85c31a70d991023972e5a4fbdf5f189e3dad77ca033cd4b9615751467f0e232ef350da5eeda4f7fa6c4110b4b5c8a68bb576d8aeec2279e0c879482ea9188b638ed32186c5094cf451746d259823d80af4ca2f6eb9aa48d1f8ba09d675e8303f1264286f3bad30532a945dc98d28022ac3f4fda1df625d47f8f347a5f95a2a9b9556161c24cab6ae9bf68afa70411d2f13540c5bfcc74b1cfa3ba4647b28d8aff080d194d346c0f5fd088a678e768fce5fd2cf9d1a7f6443d68d1a0ffd5b5f3b9dc898c0cadeb736d1910416700e074b7cba4d8375adb3a0c9a7b4e44d03bf8bc6585d45d8695c0bf9e75ddee7582f24938df1d96bceb313dd003b96f3aa5a646b258dba6ff19e0c234a8e6d096a5aaad861a6d89d13c611d45f7ca8ed48741afb2bd0f270853471381b6623968c4cbe08039c4882e7223400631476a9d5c514c309d4ff6aa46b2351b81b9d31d9670042b939e0c5184ee134ddea223ffbd2d85f470666b35d05d0fc4e5dea26f893ad423262e153fff474595b2446ac35e25120b6fddb734083abf05f71575eb891eba330fc28825c10ac5805736cc35e3ebfd89a5ee7174505ab47fc9326ee87219f250f5994e4ce478724f1b4463a08f2e8f4897fabbfd6f1e48661e46a9c7127595c488cbc42eeb1b4f647929b73805c08e7d73c5ee79c7e COUNT = 37 -K = ec16cd1b673a08b38a14047ff464f8c244fb3233474b622cc267d2578fa6fd45 -P = e725f29de86fc5f051e3fa1abe92096fba1565545968ab8997926b8220e7fbb68ec94bca678822325b0b3a34058013446e8d9b18bdc2595a42255cb5bf1b83bac2b8f467bd1df5b8ca9daf96a3e2c2da51df69c749d96a17d82e38892f621671862290d00b -C = a0ab169aa126adeedd3f1d6634e1ca975226308c79f303562f402854479beb3a1eb436ac2520667eb839813156f88191f4f9bbd39c5007fde0a782d1eee0a56c00a970719df187c9ba1dc449e835898f93ced85e76e8a6158ccd9e225358fdb7de1e63d931ea9e89b0b03ace97478cdc +K = 1221c8739b9bf9ba8df9870f0a7f2cad8715e2efc5ac0858d713b784bf2769b3 +P = ca2139774858d267668b9fe3c21863fe72f9d44ebde6eb730f5585dd7d415bd733fa193e4a7452308f23543e57279afdad984335cba81cf2b644a1446bc16d43e6d916c66a1a41550f32f167602de262e47868384d0a30737cf6072512338a981a46bab5868772e2351ed7139dc82345dbf931370040f2793358a7b63cc618db871f2cdf6c52da081c17ea18efe99da98c89bc3ef443a84b5016bef30adaf21c3919b610ac9d8afba2836b5aa6b195c7462aee29df9b1919dceebb86d319069604c62ff75dead852d6445f4d4412b977d566a467dcae2f889477888b759c2ef6941f83872dccee1f5d6e6c98868c504f33acb6c80379a24e1dd862ced01a06205678535185b1f53e969476a094ff118a1272f59d1aa51847cd983b4cb8aed46507d550018cd54638d7f106e1552f51d13a4450f4bee06a0e9ee32c42235e74b21b5858ff8044d77f60e67380d1729988e774ef68f239157e2feb4d85f51332a5ed64c324c133f6d8a2e9e1687c6886ebfd3223648206705ad1273bad021f946a3ba8d92f981c5e25453b5c818c017cd988bbd2e139225310a4d6e0c0d99055df544f1e834f4933eb8bb725c1a8b821b4ac834362dc9ac50604e0e2f4d37c7937f49d14179e9451bd71c4d91eb6831043ed4b498ef82dd3c98c65bc7a41950c05f1fc51df9bc24e5f4fb412aea5b5bac69a89ec732681069fbdd486343cef364c +C = faa15aaf31e8cf2ff1b995c20bf9055b6f39ecc60261b9700130e60b92fcf5fb6a95d2dc931cd96ccf2c0eea8346cdd4d6888edada84b50119083e3e53ede6edb203561bdf15088920fd810986c1ccf80844e74505959f5f0266b24e9c982711b28e9ddfc6b7a25e6cba879dbfa79132d3c249c6ea4403c3719477a2baaeb8d66a13ed6315d0eeb4643be2736914c744c2f26a8517bebcf06bcae20870259845d3763a7956d2b34b22d146973c6130e971f41db7adcb5243a823dab553c02d3d062154a74b1b92dd14c95d96522c525c5001a21620ffc0b5455db9466245b677d11d52d526f3178a174f6946f92ba8876fba456224538c5c9dddd6119e019284c14fb23b88ba5d27a5bac50e9d223ae43ee88d37662a3369a6bf7c7ea95904d28229becd9f27b5ba9ece0a1b4abf9358dd25afb6ffca94a12f84566b131818e5a80b56fd803eaee4727f0870df0d2cf0ff09e84321a1d7c8f7753ca3645c2f912be4cbd1f403914f0d9cf065d415920aa10b9bf72d50c67c48fa9eee645f1576c409ef4424375890b231d3dfe1392a1b4e4719ddc71109b2e161fa160c5cdfef8c62203b067c3cecc6118ebe715cad7596a08bbba088779a410525bd34cc57ab2f7ce97a48b090a30a959ef75c8838ff50f223ede5783bc083a78e6a560d39d867436475158a2b04e0b4e41aeed19df114149f6ba2d07258653f9a05209d7763ccde48694ffc4ac5 COUNT = 38 -K = 8dfa3ed0570e9af747170308c11f8bf99bc00840ba31085a7c3d739bbd8a77b0 -P = c8b6b25cc215e95eaa056a8400ede22763d0909f1e72353031fe6caa7f7b3f9c435508c625fe98c40dbbf267efec3ada2a99f301e6eb1adc75db0908c6f3d161a7dd03a2e7fa60f4febea797c77b905565ea5e8b92332809fe52ddc5903a698bd2580b5773 -C = 6be8ee68240cfb180f5ced84f31dab8f59cb9a413c382f6d1bd28f32b915634da4b12aef467d0137e089ae484f791be085ad1bdb5ed99c74b614911124edd3e5c0b639fe2f1e1a4761f499be4e5b654c9f93ced68ba2e3b1016322eea0dff6719738b5ec8192fde6429cca88bbd1bbc9 +K = 9c500fb1ad00e1481be89d4ddc2fcfa54f3cf4e32465ee3b81ea2f259df00592 +P = 895df51f044d5e4f8d5e759cefce1e6835d8e3a3c987fa1a356818f1509bb8fe3e16d7419478ee633eb4bf933b4850a043e664f214277809f42095b74fbdbad7417b225868b3e414ca7ec5f1a8cd4f2a36fe3cd530575489ef4e29a66796b700ad669c0411bf054794b8e606a7323d86e16ee9f53ab038abd19412eddd7edd2124f180e64aa789b34305469f4fe38af3c37653189c3eaab58680c57470e4c7697b4439a4914b0a2705ef9775a7f7f6c5ada070d867165704f84f941249f2d5a61da6c4f5b530c1db71c9904ebb1788d34c3226b5469dad8aa23d210a377ee92e8c1d63df290f509789f56c6f993f222ceb9e68af2c7e6e763927b67600aade7b7c678886bdc38e1ba1b2a525c74bc8cac89bd3da9a6fcc18bcf50a212296d6a633b130a4e6145e922d85b61451d7a191484154f76821fbd11c32ef3c4f47f0889c6e39ecb5fc45758db62e1f09250088f31dac87eb62d648024813b8be09291c6c6aeb0cf278cdf348912afa1e2e0cb57ddfef0900beac70e5b69a67ff1edc8db6a006fb23c52619ab1b6eeb112e352e22a9ff96685bec0d7cf559396c288bd7b8b359c28202dc14354de745d6820bec66aafcb6e5fc8772a72a114a52e2fa7ecdff3f73aa35c3843d34e5e35a7eb695ab4fbe7cf5f39f580d49ae54a7a4b19f28f8942a58dadebc4faa5ec1d6b7c474b5a1b95c55e421a3b691b65b01769230 +C = e1ce8c88cafc8128a81f822b2836470309d50b28e8f7a8b2e2ad339d5d2bfb787cae5e964456b272036a87698337f814ead9beeb76a037e85ac7b91cc9bcb74bd4f82826617e860a5ef1ae0540f2bdc324a910931d5b6250dd6bf71767fa17400860fa8e1cc01d7fdbdbab4611f031d8bf96606a1621f8ba058711240f0d6d7d704dd53bc2a52b100a054a8b8b024e6c27c37265cc40cb3fb3dfcb2decac224062a26e97f8980331089c867e5e20cfe315f0b9ffc57cd9629dde65c43acebca89dec6fa71ff715f042bb12c78015c66e9e8be8d61527d4717c3f4347d1ca43c08d7b076485a7d761c1faa14f85006171f21d4f64743e49d6f575984215496e49117db3199b63b77ab7b2efd63cc3f809e708d1e30765bc4f06f5d80d948daa5177ebe15e2f365dca3604910d29dfb0288c3f285bb7281bc94cc3fc726b0cf1130ce44096e0c93b2989c8290d0c5222e58e41de1d3c5eed79b517bf7773bb032913df52644bb58a268ef035f45fed43c9e0e2d88e5bf2e5d341baa96b7f77c0e410f0ae218707f8b3526c56d2e0ef8623fe14f69a10c522e4133f25a25cfc60ed09ba7373c534eed7123be27dbdcaa3996f6290553aaca491411b3cdbe45aca81cbae3559a5915dbb5527393f16b8eb5f2d5e1473125f8f0e77f0bac3c8821b51661fb9398118a6780b396158d8e96b38358100d1f2037b6677cf61b1195d86fbdd9ada5102e5e81a COUNT = 39 -K = 26cce465e62dbe2b94fef4952ecd7eb8bb5772cd060d3d7a909d5b2c57e331e2 -P = 827b59728688677590dbcf53a9374696fc624ecba4f2894f07fcf34f70154f0debb995db70efb521865e5f09b5eb23a23708018949f7219fd77e4698af2ba8d65410dbba4cd17348ca6ac50e35cc0cab7ac91017c99224cabd77d7a706c10691dbb4d8035f -C = e53a3d486d2239b90d3227e37d6b62a33c90aa85ceaaac86241499b05b792c766c4158163adc847d539098723b341657897ea4583d2a971bd7aaaabffccd31f43271a57fea2d7a25914325bf82077586deb86685c69ab2de1f32e33f78da31d86755407977874379ccbe3e719f6fb4af +K = 85729e9f87b85ddc44c4a0e20025599f9246d396b521066523872469a1284cb0 +P = 1394f6b48baa981e40a9b1a861986d69dd390cff9678bec161bc9c9c58aef324d8294df4f5d3b8e06e4ea1cdc8b236d234b01caffdbda997f12b15e80e61453227c595a32ab6d0034d08b80548775fe3792e4bf1a7fe60848c0717b86b8943a7b08ccae8f666b6faadf8f7e1b2b342773e976ca021b3fed98d388521bca145b6e250985d92858ebc6b09fb3b086ec1a03da4067943c086eb77624edce058a00527703a09691af85d1c5efac06b0833653bc24663b72cba83b0c98d7cfea3eaa9f175912583cc9ebd378400ba94f144ec04a904c1e7f0a73d7e2e460849ed2c62f1ac5284808454615af3fd09497f4c6e8035253cfac99b362542c86a391f85e9b1bf76be010e379feab32b07603aa3050c0862a177f45d822e4c2dd95251cd14482ac13a50d9f060422365a4ad612658c0814ab14ff2b5ad7fe60e1a5c127424483946be930cde27eccd170887d6b98564a20a44d0ebd73220deb0123835b2203a931135a2ba9b44fcba6d81c5add3a4614d33f38bf9ab03faabeed91943f70d9f9e1d95a197b13c05da33bea6483256a892f44d78a72479a681665c1ead16a940af0f74d9766abf8b01b74704a1f5ae5014ee8e97194c40d715061ff30b620525249476b0ef8e0ee696747c74f9b2d8e44d8f9095e7e423fb9fb59685b9e55cdead3a2a9133d4388260137d8e97d21d7c637033bea4119bfbddd906a66d142c +C = 8146ed09a67a8b9714263793615434b027dbf6265f4a01cc6db1530e1a27e487f737c08d9aa4e34ae3a88827d162b0054e15b9b6dfbf50446961519b4d8eff784c27868e75bac5340a69a261880af58432017cc10b4ec3752bd62b2b53875fac94e92d42ed721671622b61c5822a2cf72ac1369f91b0d772985aa7d7bc4d10fa91748180f8b9844733b45e09d3a105d86c0d1e939a0aec52bf6c5ba50203a65032d08526fa4b2bb1294d72e3ee172cbe8bda1cdef7f8ebb11f52eceb88433232a758f43830d611e0f95d044ca85f6779dad7a93ec7fbcee04b9492a73f7e0d73b35e3cb48f5df3cb5a7bd53c8b8a49e8267e43f331549ec58df92760f1539f0acc8fd2975b519ca0510645f2844ee001104c30026753fc297a59011a5ca066a50fc16f1adb3b6ae637d37f002d034e44e346f7f345d8c59c52212a54c1469395a420001c62893b7613ddb8164c54b1290d5b6241ef5b80823717f71cf600da84092d84add2b6edb68366b144565f1ec8a264b2119062a6d894062275b7dff77bd8b924fc02daaad4ace341622e102cb04605b51e0f637bee0362126c15fed95f7e294df7974df7da6fae912d939c77bfad38321ec227423845d93d3ffa57a87f74025781a478a10a0f0d89ce6b3906e6863c52f984f1b454ae022b75b03714eafea1dff96a70b3a293d0fe43706af50aa41fadd7b2bb009c72cab2b10f92788149322eb8331bb159 COUNT = 40 -K = 69e440b8214f7b3091d42a449d9c3c3e715bbdeab13dba379f6b0d7832cd71d1 -P = a59dccc9cd518ad75562c1b6792ff39718e2610b0960481c473e980a252446cd3f5d03b650b8343fb918e0d8f88c7dffa9595ff3c46a44352102236189f3d225e4e965f1819d756f44c77c45aeb9e98e952f241435132f355016689edaf78a835c871923c7 -C = b01ae8abc96c6c3ad90fec2750ec990e56bb2f9393d0e545b72dc884a6a22658f2bb8924948b995525c337e9f1ffb2377fb558ba147f6a81808048566f14f1a48d521da29dbd8fe6fbd9cfa439a0a46e00f6fb37a52cacb42561f574bfa3f851dd2c5a7cc92bbd691d04aab37a7d52e9 +K = b412e83d80b742f7dfef21438cb3562bdf9cd191b7d862aae953b8a5f5f8f8c2 +P = 36acff14c89c9fd0598ea2387085297b2aa0df899d6b54015bb90853036183922b493bf4c0d08ce843c097aa81d2a74095f9a58440b584a390d31998ac64d8acf502fbd654ed588fb70ae2de397e7ae7f26e444121c83975cf95ffddecc5ea986a4292a9851501a04b16a921b3d7c572cce1944d5a4a153ed958a1d570c672a64ce672417b38b496fb1fc09cbe45ae5df7a53835b979135102184a0b74dacd67ea20ab5fba58417efa5b55f9cf8a2e3cb8e8ade3113f30ee905f31dade81c66205f4a31e4c4ab9ee23beb372c3649fdce677dde0c0bd485a9ea4aa1defd417aee4055ec32e67e8bad57a8c305259d167544bb26123fec4155fc71cb5d413ab6a93010c046177fd61d8ab9c47091d85342adebe7688cbd4587134c1ae0338a062e6e05ce006bddf01e1baed1b9a568c2fb3b880390b425fae907f3a69b9d9dd0fbaa03a5e2e646baebd4861952e01128263ab171f99dab5c724cb258d0bbfe1304dda284e1f0b37760393de9a063b9b7eaf6589cd9dba92008946c81a66882b637cd780892562f3bb262e0941ebb443369515ace098285985c4bedf95c2fccbad1110da5a6dacbc22f0835434cc5057171ed044819c222f128f33f049d185aabd2ca290a6190fad5af0080ab9bf599d7b0cdfb28a38984d6373884e3359630b4a29caf320580ac4e139659e77fbc8858cf7468e600a3374bd84fb049b61604b7b +C = a2b94757afc70f18e06dbf986dbae99b334ffb04919b28371a28508a1ed9f2c2cafd829708c1266c0ea070609cf76b141020764306cc7d16c320b9bda9691c403e329cd057dd1d9a17d43a0c35340422fc7989caaf517700bfc88e129fcc2e4af1f8129add3c02e3de049f14f90198805df4beb0fc68412c12985001c4ea0e960a2da90a8b92bc189fe3293c67ef24622e748bc643f3564d457dd2a801b45bf542ded1378485917c4294a1e44103d7c57e8f6f00a5ce897389328d0eb47c81b1bc8f3927d3d61e894e29e419ced4f859de2a4561e92abd6ae20188b13ac91d7b40bbcb306f4c2082f4197fe091826636df423161692bdb6187868a749300effa946cc2635fc80cc713401a62b0b2d940c44581509b69af4df23bf5386ad570c3f59646a0e2cadc4d724ec581d5cdfbaa9a96d10e0984c95be6416ff79ca4e494e497bbbb88352c82a6fc399fded56ed1ccd624adcd36d7caa02242022bbce0b1e413356a84357b51717f85c722a51e8dc7a9c3a2c7142e852cb2e96e2c27007b5b139f9907e83328dd8004700b55d53e5bc32b7f5f8f767e1ebea0f0e1f4581697529d42d6f5f809b439c5a55785059ca0f6e9d38ec3ef8fe6d7b6c9aa75a00dcc93750aa14953602f25168f26c1c604147abffab926971d7e9eadb3653f6f3217a22ee2e654138eae77d7a3f35b94834bc46dca9b20168b22d370f42d5b7cf02bbe9477c5de1c0a COUNT = 41 -K = ccbab8d57bfb368ffbba70fcffb513f75d1ee7163fc5815134c0f8bcff1fd913 -P = 2a1c09de3b7cca31cd5341a3266e0098b05b6afc54de54b73276d5309a117e460a2d4239bd3936c43c0eb2e9ec9898d0a222e031db8af4c33c15d5e49db40d80c3c6fd5bf0c50d102cbf0def25ac62a3fc7a2c950f2ac9561171fe1660a6c72882882ca7a6 -C = e1d9c3bf4fa8e3765410c1aff499cac2a0053b8eeac69db57e80df33e3ca99f175ce6bacf74afbf7d9503320e31fbdfce9026ff7abe1fe1686b15bb2dc7d86e95e3e1fd21783bdd976bd3ba28ac566f698cf3fc754dc10a815397b462d17b46ad54f1591f9567263dc72d9755bae9423 +K = e81715d14434a8f5b41d4145aee9e8ad5e23476df0c6d9c556f3aeb10ef37169 +P = bee9707b7626573bbbb3f79f0a7a62fb2a7abc5dd7c302cdc971617600e0cc484506a48123f5d6d5f35549060591bf5fccfcf007900ebe055e35458582af02692781a0dc9bbe483ba11b831207ade6f4d2c2cda07d7528f0432cb7a144f38a56caa65d7748e3b05cfe5645f0db71e0d046639f285cfda9a8676c5943b497a2de15745d16b6f0aa689a7d81e12929886793e4c8d74e9312c21d4958405a801750a1382a19426aa858d27748334efc93a718e687397cb6c485e66c5f45c376b01a69b40a9e030bf2a634defb86d90a73b30afa73aaa2707d7471e6f7932327ce58f0adb7252173b5572b1eaf40f0c7eaed43d6686438be949d280718df72b56ef90af18adb4fdae93386c0c064eac592f4e337f4d5a65e0eea2b33d70b439e9c3e14e54684ca4ad16af3559c5fc6898d756db060f53ed62e1b35f4214f43d8e06811d03045811f5a99c8745a27098a1c64c01bcbd0b73163889a97db1dcb714464055a5c0be2a4ed182fc8727f60001ed9ee12db380ff8186e546047554f86f655e6d59d855827d41d20dfa8b340eb72f42643ac3e3f5768401f1a82f59e2383784e1c7e9dc87cc01177a14932c4952e5223d1d67cb6cf5256e903135cc1eaf83e4b6bdb2cd289d550bda2b8b5344c3d5a9d2fc8a8435e56e8536f2e14b8a4a5ad19a746287836f6821492f345f4d5997831367b2de039af78b6d1032cd79228d0 +C = 5de129f3e551272a1f20b35f797a5453b6ebdb1d1fe3a8d576f59641ec64c38a2d8f3e6a13dc8c05f31c2f6a7e31588aaf6e33d0ba251ffe7bd475034c201c84f5ab9b103b3b73b9826f8e325dc46d97e428111270366b056c5837da16db0c9fc50f85dc20eac276c04ebbfc56d5d78f02f81e1ed324ace8812182f70df02be653b631566c4ad725caf1e41eeb22cfd03d0a0a75b8f47627773a2c4f958234f144c20b588c0fa42cb6fa4d1cea235714548c2b9123b2a6052249823b0bd7e5a81a98438bab7e5f75ca317a99177b33582d2420c9f46560774b78f4e9c57fd3b780c71645197b86accd0616a8b9304034a109365903d9a69bee35cec048cf14f54e956cdb2e3d8b95fd37134d956b4701a39f74dd4fc82cca0877142dc92014e33cbd7167fd2854964e4c058cb01bbd34a64091bb5757409b0562430ff1c0fd42dfbc9e21a3fd364a9906d75c098f93d93f1770051983ab1159b67a0bba700ca5af8cff4bfed1aa1245aa9aea4e632a17e40ac55a883f26ee5170543871b5227bde2b67aa2cb26f5d46e757d3a7e031425502893e5a67b3133495e133f2e846057a3a59d242d500fe63dac7fe9b84a7942ba8db5dc383c1d434323c5523861d3be578f01925cc4068616512fde0a5ca944f2d1230857b02ff4a1017691ebb7219d4d395ea5672d66d2d3d38bdb7db79e41b3ba3ea43d016d440a8ecd123c11562f95a58b6a5e167f8 COUNT = 42 -K = b4094ec48111591a8bccd347fdd2f749152ff2f4188c1ac44e9f0824ff906074 -P = 6ada705774313143ff80347c3d86f89e24a426b3ab5db9b22e5cd46368f40cb49dc139ad007fe489884d820a7629cbd414e6ce5b45cd20ce26dd9bfd68bddc3f1832fcbfe941786a96ef660eec3e86ae058c815a886fcde46e13ba71e4a8c82f3e0015f73d -C = 6edae5b71ea7922f42ae6fd559a9c38c7ebac6f26a077e30f05452a2324f9e1b3800ce51c5f68f506215c9fdd6eac0248bfdbca3514b344c45fb24a8032c13ba342cdda2af27013de52dd70e41a06b9e1aefd5445747c51b315f487e9eb7f04e198714a676a776cb49dfd1400dea9114 +K = 46da5e6cc89d11c77d29d486d0b6d042010e79fe84c8da5bfed58c6f847f183a +P = 21f097e669c16e3aa019a29ea7f821208ef1265341d856985f0dcb72fb257cfc1ce047c469f2d8ec272307499bb0277c0bcbbfa1d0d90dbb2e928d2d7604bdeab4440801853fa3caf141b41a875503d39d911c27fa65b23d75e772192a7f9aa1d8e51b0141f1e535cbb703db7c2d8f50134f7646f05784f3e69ef61beaa919d28b463cc9eef59ae510b7b22fea91f442c24f5b4e1ab5f86e7d74ddb07c7cde5c76fbfca8eb27f4195f1022d53c6239a13fe8579eaca114e03bdb86894211a0990b3403657f33bd4cb8ab7ad1016455eaff77d1858b3cee8f226faa68dc1c7264dd659e57be3880de5a852b4b4b85514c9497a127838219cc268f846a5ea5656f4382c43c3b92f14c41677b9eaa652ac85b89c3b9ee9fe4a3703952121c72f37c61d15b821778578edca078c271c753d8429603ab256239316b760bf72833f7c200d5cb21538841041d6dc23677f0f342772031ce0b1a582b6ed85dc9216f9273c9f4e44621e43424c53c12b08dc44e6b0f4fe9770fd51d503759844c385faeb151ac18ddaa56a42c0cba6fc873d2b8e337b85c9819f4d6d0a157cb2b893e940b66fb2db0f404a5421dc993f49abe35c7b5f5d2f0e3bd3bf76832c81cc7108aba538e953bc56aab63a627565a4e799f845e2c41bb50365f7652a52d909542035b4c6111d3406dc46762cd4093906ecebb73c9687fc810d13dd651d648ee3e2ff6 +C = 1e506fc37d0e7f82dd2f01ce7bebd1aff0cf550e31a8f71cd995e4cdf84b82b7a4b1e6c7c1ef373460ac88da7ad55279d7e42754915a30ce8ecccd6e7aa5174e6ddbfda4aa7edc04b008964ab8ff9a465cda08b69aced3cb1d747bee02af930b91efa3fd412e387b26769449bc78b7018ebfdc9e9a73d3823e9e7b2f83940807093ce4724ed5592ee56ff451a58c13ff29557bd562cde084a64c9d17458b7a10554304c07ede14644e356a932d03fba0679201c3cd431e52ba53562753aa87f34d149e9ede15071da6433f795a6ad6815e5cbd3f5f4b3ab3f2092dd714e5cef236c470ca0fc72c5c009723749ff351492387f64b6f775ba1a289c137a8aa48c193417dd5c81731f6483a028f72126f4b715a04573ec8a2f21b38427f0e22fef559ace457cf487a52e1d80ab50f7e817840dce3d0e653fbacee6997e3045c840e66d87a938b529d83ae473469ebeb942c6a51f90557f4d67f347f31596115f5478d7bc565744a41a9e2a235477900572cecad1eff4275f203a69f1bf8d4ebbca4366c527c5a1d12f272dd967b3c943225ab112bf14598abd0ada781f93b1eeb0d3b496592134cfbcdb69e184644dad4ac982d991e07342015bb04af9e6b490521115f22f8045357a5d61fcb8a15f5ae90145925a79a53ed5f177226e1c7327e804dbd88265d53716ee876a3bf8733688a78175bb5e585cf659c503930862ee5030eb13c1d3cab19db COUNT = 43 -K = f27b425c8f29a50ce8e9ed0f68fe8263f7f5cb2807c40174058da81f166f9483 -P = 4f21ef25d1cdbbed30ba1416a570feac5549f06e6862fef345d1004c86d897105b62ba2465a7c767e52822484f24a7844c6a6d2fcd7fa8b353af795a70b471289a014328f78d085b96b8427b1df22655efdd1f35da2d794a55a31c17a8b7cd0b2892d4ea74 -C = 1d35fabd6d5b155f2d421fe243ae05fd0b0c5c1476d5612529df6db6bc92b3b8f09eea8805ff26f4d6a8651a9dcd17d83e9896d922c60b0c4b7a10b6f7ff10f7ad00045265303521ef60f9aa6f6df2a1fba10104fe7981f9a244894eb89868fdef43c17196b61611e0934b9dd51a9da3 +K = 1d23cf66857301fc49ee18af12ab70b1b6e786b31c0dcbcc364d8ae2ae6321a0 +P = 21462101d3f564aee6d6c2b3dd64f53fc16c464a05db4787db1c5479f477f3be03341992a6f83ab29f96cda618f69ed16a5bf2e08c4de8adcc1e9e9205e2d301fc3d0bd3f33aba75827cd467c3a7c3e81931413fb706b870c80f2419c3f1000e76ce7175e3eb3b1f016a549646ea9795b339c4f1de48a6b48563fd91fc847656d808990d47c020b0253a084fb23a7bd02f313728a1f31749738bfde60140812ce959bd09492cb7c9c3b082ae33e27fa870c806f2c483a179093cd16b873466cc2827c5f863c8665f62ee6967f0553dfb78039f6dd07c9e0062979cc27b411fa511ac433908426c6c353e3ea82122bc2c3567ae65ce170e0a9068967446e52d4056624c5dea54dd68ed6babb9d446defb341153a0c29411e5fdbeb7238cbdf61573e3dfa332bb460f33fac1335e52297a0a478b94816ae2041e45fd669cc176d746d8cb7c2ce0b7985843f01dd2219892287ec62c518a5b6e1ac033b4d3f1f34ae75c1b20db8fe0ac6fe91c0a69d06d424248f0ea17ae3586127fc141ea10a12d92ff62d55a76ce242e74f88c0780946245a6e141bbb4753c8a81d3932fbc53fb2dedc70f1ca2c3b7f80a41c40defb894c5ddf19e3d2e64096f5d0ac55ab33addef731a176465a752033412c574fb79c80a46c22e4253b41c10cd3b1d5891288f7509809bdcf3bc26d7845a64d1c5e4b0eaa573df3a2da6f6bc88c4471139adae +C = 7d40503b2ac4e564b52f027b0b9715564ce92edca87d80fd4bd08ea99477c12962e08fc125130af0242ce5424d6e82efd368b5fd7065b37eb378880c73ed6a6bae26bf578d62dc240bdb624649c0ab03eb57f24d03f2ef6933f1dd0fbe0485033d5d00485ab05bb4ab5f5a7e3ddb53525e7ad3f3da7ebd4148385d54555b06ed7424895503aad68bb73f2034c2085b524931fb7d55c77c363eab98c43cd6f6470d1c4f58ba030097967d683748f3a629bc2c8e9dddb9b27ed2d47d1f6b7364b37898f0ad2071df56d98f9312041d2247558cb2e14b1db07dd42796f8b4c8032607835cc6251f240be1a91ebba8530a1855eb955564169b958d35025a7fca69cc2d74ff2c67aae17e9b1861b8cb9705f6db9a22e51378c52e55d9110df6d6a9f2dae5da927ea60b6845cf44a35a6fd18fb65a5fdc76fd6f39613019f85d044210c889c918ded1a4c94943f9093991b01c6ae5a3d88f1da02a4ea742e0ab88e704d8ab789d94b4abe85b10de922f40bc76a2cd493a71c0ad883e4165919f0bd98a548f0a4bc95a4d3f4bdbb58443a46e7a4b0db1b66fe5fec78eac4edab78374606c70ce6b40d877ab1c70b787c2d31a8ecbe26b32d3eb99af29038cb549aa3d2c93008f5273ba201ca5fadb9758ed4aeb39b5d04646ac89aac9a575b40bd0269888af43de57cc08d7d0fea1e4263572812e36b18402e33d0d125b4caa52fec7d051f0e6553fba506c COUNT = 44 -K = c2cc3ae602beb242f1c611d231dc2db89f05440cfd4a3b973c0b765dc310e050 -P = 239091733853b1cfe5f15d4291afcc5a495054d69544cd7df945b4897fbc8af93b04e128e925796d92e20a46a7eeb551f8b92766be813009bcece2850af407e1d21b03dea3567654a5c0b683973f6c491e6718b99ff21b60a51291d03363043b900dc490d7 -C = 389c506d35e882aea884da53db8abb82dd824fcb4cde1e31d54adabd7d07b8ca7f9305e236f495719c1a41727b6022a9c0b09a20b4b09ae687b321f2c901192106a2e3795519c4fc0928835e97761c192dcd76c2c10889de6f04886ecaaa1a05c333c2efe726e82cafd6d951b8fc3f4d +K = 72d22ec0a065cd5a7fbf8b4f981d1ee5236f5dce93ecfd0c88f5897a0d84409c +P = 78ba4390521727ea064f73d265d7770ce2e6b68e5866394863eeffcc8835e463acce880e76e8d84f00aa131195f115add6f2ff53c64af233dd2b240dfc8b77dfca93286f2542aa0ac93ccc8d891548b5b3d0799325b21b7296971a4cf3752513f81379f4bf32919adfbe9d17b8a440c5eab22e1da9dab8699a4dfdaec15a2d539d00f78738b91509db08d7ac88459c16f55d377a851726ae54e5054adf49ad511212b136321e5ccb7912f479532aee8dc572fc3bfe707056190abf17153b3a894e3de25c55b98882ad6466fd7815cfe603e6095ff4a68811bc14c2e8b6f9603f245355dcd4ecd04f435d621827c74fbe6b424d3844602386276ef9e7e0cd027dea3b43b5cf9182a8d370bccbf5fd729b116807f4f9d00b17caea3df54c2f94b00438c0812b49d025332345175925136d0d95e49cbe8ef36072ba6099f200e6fbcf105f7f67a2a49853a72a9f3e98bc78709e2c5e56d0e2b8548ee7ab37b8d66dcbbdd360a001deabd8d309f6933096cb09444e5478331b1a992a31ef8305da1443e470e73ad90d34044592746a5d298fb170b55cae1b0894805b2292a8383be768e4d89799f0948ed6ac18dc713f4e1d169a65f034b0535a74b226289944681a1968acf7297f54448f22dfe8ff6fecc9e0a156fa05d5cfc41163265d01b2753e45bdd18a6eeb7e33cf155a5cab2ad2830792144278bb200dcef0180c3c27ffae +C = f69b558aa31bc0198a4871f61d58a4f9e3a4d977e34391ba34c51ea63009c06492cc64cc7d1d0ff29899f0f0c2617c468e65b07a25a68d7d5ce0d624ba4b7e4e4be8d837c117ef8fd346dfe26ae30df50daad0373d25e0979238786d63e035da1b71173c8d5e80768b1994bdd78f71e962023a037fab3792555bd5b40720393f7fc722e36607011ba1440bce5582d5f6984e0764de9b767625792920c7b1c18b3593d458fa0d8efe9dc5bea5d790a76699784a03ee29627d4e05e2c508167bd3bb57e0cd935db3f4cd25a23aa513ecc69cfdc7330d03548305a2ab71c2dcb68b2825303510bc0590338090661ae7a0b8b705b61ad22eca3ea341748f272a2f85de75382c60fa38e0082621d25cad7dbb06f51592e5526bc767a8286b3a9ff314178828852abae69dbaf627b8ac27cb5cbb1a68088fe94fd17c2f9fa65fdc91b48af44d09d73ba89a825f2411b04686d9a194d7bef23916f8e27236803d3e1e879e623984e9a255dd504be3d7af3c92a5709c75db1cdc6d9204799f1b05839a284cd7254cf59da3015cbf70819b99b64786d4020dca95541ce0921ea97e59035854242eddd22253e23687919f0feca5e207ef21c5e7498024d7e505fcfa0c02d9eca243c643847cdc923ffad6889f80d314aac30af1d3b60d62e8b4956f20b3af1e6e0f47e8561abb00cc79ed2323149ed24599fa03634a77758ad54f0c3751695d3d0c6cd2a26ebd COUNT = 45 -K = c0d2efffeca4f851c46a3a69056f6c0759425880f52add49f6ddc951ed325a74 -P = ba12871458a68f34d5a041822a5f133efd6710192e85dc39162039fdf1957e9f2fc36459b000c673cc23663de4960d55e2a2afc1701c826e7ec8be2b3ea4340a313447d1639e6db2f082d3b360f4203022974fbbbc837467c02572e0388f415cfb7c3ee7e7 -C = b07f20bcc6a9c3eb236ca7f341dbe5de238481119f752dd0d327a40219045f9f81d44b66d903085d53a42a211afae473ff4ddbccd408e800101f217963aaf17481c85bf1ba3e687228fab087490bb756fea6b9f2c754f551415ba9436fba62b78bce12da264685d871b11f9be7a7eeb8 +K = c8c7364b1c840247064158e95b1d891b66fb2cd7263ebc4e1794f5c4a92f030a +P = f72071219a03b6b107fd2ae9fcc713837c05dcda71eb513bb5b868ccad4b45565a061ce895db0926dd2b67c09eec70d80374af5b50661a7f56d638a01217e8eb746e488fe35eb9d9c18dde690e2f9da84c0072ebb1526858b33241c9012be4c06797d20cf14709659cde457eed06ca82312f60c89fc005d972cfb6a8b1eeb3b23f6ba00d2f6490680b02f1892e9afe208adfef07fe3c30f67a04d80209c12affc01e0b9c847b702e7b47cf09cd2a4e127e33dc2b3c91e2482d6213f122773213028911b1a41c798de6d8545e9f119143f3a8616d454b6f67ee7339e1c0540429032ede878b3d0b4ed9f5ebcf4e19a426a1d6568367e0925ffa024e8cbe2ea7a69b21e77379081f5ebbde797c252284c1f4726234b76816f110ddfe5206924f6f0fc64d6b59e132e4ee217884f7f1ad7999a92009702bf6ece7a0e4a7dd061e17174a53de9b8f079363a4fc0712581e0dec432475e011ea1a8422355b51299d2952f587b2eb3848289da74ddefe406acf8766b31d694187b29fe3499f03ca608b665fc3eaf4634b832cc4a101c0d71a5985afb00e2dc7cad013f95c2fe52e933e3f320f6479a1441e0e20e9e316f7d092acd9dd2b60138d80c7a17003a665aed9891b239501c961cabf18c21d1e0ee7159e9a401cee61881ab7c150b58d3adbf5815f50e4b77d26a07f60a50f1bd0c7c457fce3f70eb8b140b124c3367b895c9e +C = 0baf4c0a2fdb1daa1301957a66ef0a2e2a4dc9e61b42cc47082ba5bf33caaeb8200be23196cbb6b12800d08c0690a19ceea3407dc11374efdcb587cbaf9a1bd530d5d7399c4087dc723c7239096e33e614747b1baaa0c4e49ca935f20ee0c06c11383fb71effa0fd76be8fbd5f7cd21af395e303b48b17e7b5d0e5da096b645bdfd1b604d28575a73fc0c336a9a96cf72ffe06c08ee3ab9791a68e45f9e02143a96f3b11d11a3b2902f873328e15ebf4beeeefdfc1b45a713f6c32715ae7a271591ff73edfd2934b2b6c3b30db2e0c8cf0e05f4a647ba35072a3b8b1ec91b726ea9f31c5fedee684471e38aa812769214bd9d13abaeccb81067e90f8692e7f60933071cf530497a8202a552b33f90405a6d12f7b865f4979a37b3195258e566adaee6f8b23af0464c286f13ec058b9edbc38fbe7b57a2473652f68292fbeefb509130d09131933fb5000e2e878b90615df8e11741069d55bf390e78da845cec1447480587b9b196352827c5d768ff5cdccbc6625c14f7b24e51f78809d7a61f221ff8bf2afe64831fefa4798378bc05c60ab89a051116d886f1c935b77705d6360b584456c7d39316483fd7b167eae2ed621232f643c3ac2e487e3b3c7a3ff0ec7b121165bf85e8e8e9d7c38a3778e51b25ee8c94373f3b0f5d75d3f59fb7dbde3fdd1f1b4f2127fcc10f5514eb7b94afd9e2a8612bdfdede21c8355c83e76511e7879761919a2b3 COUNT = 46 -K = c4f75990bc25dc8b721fcf43d0ad3c23f453358cefdaff8a2a52c318f56b538c -P = 65d672b1ee1ce991f9d1cee497017ac971e3b6760de3fc5736fc20841fa70d37739bf9faf36311aede44940a11cc1ec979e341366bbee943df30531a11b63b988dc8a310da2541251b9e53c77e409c5ce1640fce2be614369359f059ac5e9a54f307ae7344 -C = 43ec4b37137f4cfac182887396f7eab6fcc5f1051ca4eb84d2a9ac3feecf7f916edb12d707f270099a78905769ad00859e841970d40a762bc927af9f6c427d6a2d6a81d2d80b7238365aa7f0f0abc4dbba5a10e661f979607016e1c07bfaa8582e062d70657ab6f257b7ba381e085718 +K = b6d820ae73127f1f6f22e107e1be05e477baf6c721a2c376c86dc9e2c575ce6a +P = 1ab53ce7b6ff232278eb5e1895fac91af1a8bfd57340f56b6ee6d7bf49cc8f99ae80c850386de33723a95fe45ddab76e10b6ae3f8a218a1db7c813658ef92f4bb9a41400713d82ba676bbe82c73d0dfc305a8c115f5fa352ab0a8f37b907ee4a19dc8c2241cdac05b59b2f4c74e4d0482a11f088ed591c2c5415d77f244e9f923271e7c5e6d9750e44d3abcfeb3b80ca90ef7208b29e4af972fbb0f5d7da24cf5260822bb9113e4b53030ad5d69dab86e6f89f234566c132d2daae5e43952d9f1a432f93fa81feb6b315527e7ebf36b8213e6e0964646dd022a1dccfc8758df86b3f08f608b63e2d3e097d08d7c3c30cd70c14b6902d40e5a8121d5699bdab0409a6ae9d202f03c4180cd0b6efb4d3a4f468d9a2d4416038ac45eff48d0fdab50e593bba68e114fcd4a093294b46540326de22ea372868c5ea312a49d19aa80ee33c67df8b543690ce91b3cf489713e9bf76c9fa22a969067f54ccb7764db8d99d21e3991822c11eabbeb1a20e5145c51bb49fd196bed6f463a19352a2ddd2cf189f8c61d299629cd93ab023d61f3008eea1358085fbff594720ee18d1f101281e3abf4a7186092dabc1f4bf6d83a745c1e932fef7bb63d80ac990f817ee31734922a04b515217a0654d91e686d8b53ae5ff65836eab36849ad5413b3e45cff0f67365b664f4a2332e87c32656bc6846b20cfd552001ce7eb6af0ca81bc30d9f +C = 5ad027dad455f850df707843afb58b28d922f665b748dcc449c82e97a244ec7bc187b6406b5cb19baa0ddb8a4de53b75c2d01ca3278607819366139715f9d7feffb27d29df5260e217c2cebcaeb33844b6b7f51d8e34727fea05469eb6a1cf5f2521701a6d3e14e852257c9bb3179c99967c84b71c7f69b59710cfcb2ccb4e05655791b8a2794bbb804b3ac76212a8b3401449c88bce1e9b975fcd1973c46e2b7e2d78f2aaf08842f0ae30141e312447902e0822888bcf0d71b78f34a007a8856b8fc5393d0daa46fe871cd34dfa7b3a09dfe3ba82a6b82371a057037533599b83130ccb6116a3231216d32c72f8ce27c2c64412319225ca53985724ee03eb13b4ed523d547f66b272ebd9d4d92007751a83cbdb33cf5f516f1bc1da4e6f5382341d53970bfe190d544d56fae983ecae5274b3567aeb927711d16fac1c7ab978b5920a73bc817640462fba1a1a253c67d25292114754f84e694dd5730098a20d9b5f372e595d74ebd2fc1a9c8503e11b6c687c56cf557a3c39ca4c21d0cb71a1eef3a66df1573eaa0b0c40e85fe54389ef17060f4f2c87a66408c4b94096bad25aae7b513c238ba64ec949c73ba4c74816bc0cacef09429e73364d5372279b269715ab36d6d1d92066d7154a93a89c8803089ae0b4675c98861c4952996e7b55c16ec086899569037978e45f3a1f09be13a0bbd2e6e0107dab46ec20c3bc316f51ab8cf4ea9aa7b5 COUNT = 47 -K = 308ef762ddb7d992505b62a9ffcd9e1a1939cc22b567c6afe9bfb375cb6a5efe -P = a5d05b93b433447e124c80bd9a31e4981a8405b8c71af9f4fcebc85c2e0ad9f5ada4c7fa55d923a876b34655c4881e73efc0207add34d5fb789dda46e4e4e571a2f36ac38134def53cce30356e3baf809aa0505300376c936a7e090e1dadb702202ea5ae69 -C = c187373dee2ecf4c161311c5cbbc4e6222de10ba92444257eb75d67f919cbf2412f2167ec8cc5c2ccc7e8f4e99d1653ca4ab8cdecd4ecbc7dd865308e44e73540e03532d849ff9c1d96cf3dd0e771875cad8a566b541986c908214fe08eb0aa3e45b994b07ebe5bdd1ff712fe4b4113b +K = 3dc64b87b11de537b28847152e4dde325eb34aded2b246853dcbed1c5d1f84f0 +P = 1981fbfe3fe9ccd113003d704d07be43f76041b21a9ebae1c975670dadfd00054ac260cddd98b90b64665483413a0db2b7b7c4d06684821cb29b361548a9b5ce186bef9a7f5fdafa17a9456e02276990e3f82e1bea57c564818a33dee07ed081c84204016a17e7c8d597038e56d1a28d6db030ab84b7c6f3b1f91fd188c79ace6f0adeff21e20fbd34c8edc556513f3041d5ca1614da6ef41d7da4982ac03692006371e85e4f345c3ff52728766f69ce299cdd178a776c65bc5e0ba98024ad4cace62d4416611ca63041e3c00b3563f81e2476ae812db4fac72eef933cc84a900c6566f297ce6b1bbfd6507fd0a45b4f6a3efdc64e7f6cce88d001c00f7d56fd7e3dba1d68c2578697a7f04574943bef5d50b0113b99623e5a080648cd19e06c27e9498bcc94cdc44e70790459b02d1c2d2553946139ae7b82995d759f9efa021ed23601095be3b3c521de55f50431a35e38fc52736329bd1ba6f054a0130b23d7d2e99f92b94c0003aff2feea42c1605602506c47c48309b45dff386cbd98e98dc9fca54afe1866a12970e5802fd66f4bddb2629e63ecf47ce4bb79d9c04f4f8bbc38e7c9b01f22a81f8d23f5e0f77ad1cf7a34be855124618e22de80d511110a6ed2bae2a6ba60b9532db520afb5f37c3b05f5118cc237a8bad937781d8c2145b384d63467565c38b9e407c78fd8b47ba19e5de70d149a7b3da5eaf3301fda +C = f6c446e91a14c17749b7c7b42622e96b3a54988bbab7eeca70cf4d5bf3921d35d8ea4802addf3c5efe6893fd32a715e08b73f6f8800d7d7abe412e2f8ff9d2ad2bc9d7639d8eb5d3cd746836d9b27146d3045bbe74542cc1473d2dfe4197e38f327b1aa650a355a4dc31fd716933749ff94c4167dc2511b1a2af860ffe6d73100dba650a5e2722b09be469cdb11626dfc245e0ad0e334eb3f7110d270afa427222120f7c0f70fc99fca7666333c259105ea96723c560b566213f1981ba9309e8de266a9fb873b79dc64d6a92706909bb100ce12a2d1e1ad8e48dd7b7e291bfc9a39278c0d56b9743144dc697d96b26823e52dc59028b10400e05d4815ab6690380b009a2559752fbe1edcacd6f7dfc38dbde4b0cb006e6e75bfa73deb68dacb9dcc879c924d593b68a92fdaade0ed7fc213926c5bf09ca5bde4f24adb83a87cd4997681f3936f9e425dc39f9150b96151b0953129dc68cb73aa34c332fb3f91fdeca214e33834f839d65a5f5aad0fd27ae3fcd1c3152ac5b596c11d65aeeed2d3262b1d8e2d6e15c2890cf9a7f97f97968108add5d86247252c0e943cafb695beae78e0f923028b27832a032064ffee572b50ed96f3c83bd5991823833cd4cd1094f54ae562a4ec0e4bcfec42e6c5440e48226966381ef410826d4620d5d6422a5bdaf0d3df20ac31322a83b8f8e6d76f76cf917d519f62a46d6573127e4a60c3b07d36c8c65465a COUNT = 48 -K = f11a3da9bdb8115d0dd6e30feee5c08b23ca1bbc1129e967f8d3db6607d4742d -P = 099ba378d2e3eb6e12fd98b386cc5a5eaf2853386f324fe275f256e02335b03edd080f234e085de8b1553debd61a40b8d8d3481c3a27ff437d5e2cbf6e95a85347edaebbc93c62ff1690edca8afab50a695faebf7210a2dc340f41cb20e47f15b4574f9be7 -C = a729136a7a72194a066ee6945edf712342e6edb23e83996891307b3285ae15c694ce960baa4df19bee7c59e30c9d1ad2bb1af1678925bf231a4d8ac8a91940379058b30bff752e3c56594b2972d075efdac8ebcab02ccdcf2d3404e693d1634712ae26068e304b1ad1b477d435573fc7 +K = da135e10d7af9d5cf3f83abdaebb4b6172a247f628ca6e75c28fbdc73ae3bb83 +P = e883f08f0d714250405c9ede3bb47714cfc45e653057cf3290d9d0f0dd23ab5e7297ebbc733f7961bf85413d1b80f29141afebaeb2cddf7a09edf652aa5b14ec7de111a13b88b3cee28f20eeb61f3663a5b16ea646249e5914057997aa1ffb492147f82699bacc6d3e049bdd0794cd8a7f8376f1833f5c144c436b9ef1d1d8144fda05ae634aeeb41dd0df65b3855c7591a1b7accbbe03054ffab9654354889c22dd1adfdad552d6df689bda5c685739d65e7c7928b666a6f1e9ba1be240bd30a1b5a7992692a2439301c96059089b6c095fa27c774320f550be2309802a7264eb85698931a3ff14815b737cf28e2cfeae5488d12e4775ef04e6c9fdef6b3828910f84fc9135fce76635bf4ef1928c141ee9b971693e3221f25351cf0a1d18ab03a42168aff3402b34e288a816b08c38fedea964a65e1138311d2dac6d11b0cc54ba72ec3d51fa9ce3f8a4a1e9053304bd662633de7d17af5a7f22222b0c391cdd6365ff6b343bc4dec25ace0fae701c96527257e3e4ecce5167e08eff48e7ca5ae54732c73734815992b789024727c65bd93cc1ecc5836a286b2ee6dfd51e2347894d952d5ea32314e3730c4239b0ae10f7560e4adc74823e8e01ef0a54b837421f9ebdefa7b29af7bae4cc143d7802b6e6d750b4863b45390aef03b71e29a24b384fe93022946496b26f50db30a4105569c2a108040149ca6ce3e53347e4ca +C = d23ff958d48a2c8463bd92c168c1450c9c24eb79d1d435738550c3c6ef557ab06d3d5e3f82317e9c4a250f417900803d2e138cd2558d33d78da3e044c6d13ce3df7f2bb25994ca13db15b23ea144c6ad97999a9236722d56439f157723ee6006537a8a45f89e146c1aae2799739c3b0c9abab6e89fa0acf7f202d5748da1fc401d97f172a11b29036a6d53464693d443b49455d6add6d3db724265e98fe9360a27b82b0199d6b60e0d8d5b844f28841ed4fd0b1f2a206d50ea352308c505db0466c7ce1a4e0d199db60b10b15804ead4b492f525897a2996ba3d901f9f5385802c7302f83f3448db909603622782b0b3a593eb62213703df95766b92eba493c29b5a02b347267402a2da5aac615dbc252ab422f454c36820560a23c564abde09d46dc4109d29d2da12261749c599f89b28099d91283f5a20ffa4d848b59f91061bc7b6a4e819b106d4625b210db7158af0f734502230efc365a07aeb5c3cc826442de0fa242205a011f0a40f75096376d7d4fa455d6ca67f7c6ee43519e8563a402a21ebb917f9d519a2d5f4983da4ce4fab6636d5dc30844a7f553016ba9cdc37d4c66dcbdee5c3678ac5a4134cfe9d0bc82fc1f1a6bc631ac4d0b111f509f34012d777207052e35efd5c951dd9a8c389ebec0e576323104394e19b2d6682d699bc3ae85bbc59db215120932ebccc41747a13a0104f71191a383e6f8b6262f5ced46b4934831f82 COUNT = 49 -K = 52bde73575df5dcc2057216d108220e00ef51772fb98d1cf12d5b199ab5d5fda -P = 657d0295a23fac4911af4b71b91ad2f4f4cb528cf33ba6c010916bb8ff27d8b79d9c17c77376d527435c531a8e90991e7ea4c4a048bd3382cff801558c8ebe753b25be58feca1e53ec575db2709c14ffcf659dbd6ebfdb6929277dc0a6f23918df6ad5b6d5 -C = cfaeeaf8ec5087f521aa6801f19791694d15ac24e794b17200f16492efd839a57abe0a916fe00339cf25907cb776a68dee74e66d050868908382a6afb43f0d197df06e888fcdbd567f62a1f19ae490b8f91e0ac0d6112ffbd246dab24f3a16e8db3e6255016ce14cad127be2836acaf0 +K = 7eb3ddaf8ee2b145390098a7336c69a6a86de8475111cf00f02ddeebe8091b34 +P = d9fe8818d07ee96dc8f26395744a9b903e1d7f3124e8bdb0a881bf81aca63a22d815e1d6ab1a0da396eb2b526e2514ed2d4aa4242d999c9fa86615390c5875034c668b324fbf4a54a1e30aae61f8b59b973c5a009f18640b55109e6f48f9f91da533bb349266c031bac2d0fb09197039f7391034fceaa4031612d098e14ded3227b68be14f9d6457def621e5119cd76e32b57b8cb660e6ee5ecc3079668f173a5ce90db971f9b1eebc4fcfb164aced0ddfb8e462451f737a54e66946573f72c309c4cef46bf50e0509bb99915f650c6d8b0da56957eb3b01a64db3fe3fa187e0e9a29849309ff2a9d971a27c13c8047e3047a25e7efe99563aaf18072c97d03f2cc48ed8ede9434f64ce617a2f211985440a971b527c3b21d22acf50df33f431416381735f3abc41af6fe5d7779616503e25a2094d0ea9ef34d5aee2e83fdb3bd520a4da8b1e491c75bcff13c9e80c637c16e9dafdfabdc92d6bf240671f3ace50df2ca61bca91500b86d3beea3781fcfc8b4052a820f2603810be234a6aca310b635bb2150bd38018664d3ff31d2bc8647aa76daad755679586348e67d6e8bfff9629e1b18043e864df38bbfa1ada5ed254ceae31a41d1410327335bd91abc221e9bc23f801f472b4633a419b249a8297c479bccff0f403406a4ee65cb2c7c0208abc7939b5ee0461c9e92477e288cb6f2efa9d2faa5951e63ae21e62775390 +C = 42fbe8d8403847c3d3cc491cc679f5ace07521eeffad428b3a644ce8136bd815586e6663ac8c065b99ec234e0762316af46631671083d689b971e4628219cd96f499f322ace9a088936c5ad76b981cb373241172ea9e3259a531e241328d8bfd28fb766db4fc69ddf47597e2768b589642df3110dfe378a667cb9ee07a36066f431b1f970e7b157423e28d0a3924f4e43423969ce1860961d42b710a0e50b48d8c11a60ced46d4282cf841d08c0833c49b142033080959260bb2f65fb0a5706fb7f4139d6a9c42b9a19c432c78ef695825abedfd430ff9585361c85ce5efc2f3aad39e3a3efc64868b1f985c6bb0447e077a2a7bbf909d132bce1f1ad2845a316f54960bb60d59c08bd508bb9445474481d00c5989145b4b0ed1edf7771aa0835df21133f3ed09361a69c5678575597e5461af3b9a61897416513199656160f00b2c0a2872dc597757fb7b191522e5de0de3ef7e9c0df5e2ddaaf385fbc9c3a1d04128f044ce5c6db6a4d3134b9698dca0a325bfb5be23df29c0ea6a13e84777e3fb2ee7292326a4647fceec026c71a12616ab8fcf1dd2847b25f67df56139e7818861e807f6492050e113ed55466e14effaac92df10ccf3c63be910f8b20adb73597c70564ad129adb827310514c8affa799f301494a4ebfe099571c50eacb89bfee122f84fc29ef28c604eb8bdf1efb1020c1524b03e36a4269fe7120d1b6b8cbd57b168f4cfda COUNT = 50 -K = db6fa72d987e46a5e26587202734ddcb168718e1a972a7532cbb2377c0f941a7 -P = d59f2653b6ccd7ad3e7bb1dffecea08ab56e52aacca381bf1015ba78303354b6fb7c060afefe33850e624d23b77a18b90e20962cce96eae0d553b8bb322c30a0ecd3e2928e1cf33773f0a827394e2f1f4ef559e8c570dcf2a4bf8dc4b258bc1e92501c5e4d -C = 02d054ff02961dbef7bea742c60bd1b584ac51095b676647359039f0b7a4b1948d4175c4e8f8e584175f1c26a77fedb0ef9b215a3c6235d19a1a0f967a0b6b45318646b40d75fa655806a5f25cc49c228041a57d83f28de8d976972d6648661eecc253f3ed8f2c53b121e336f06e02a4 +K = 322ab80e26ee2f3c5df6727d21713314ca0bc6bdafa04363dbd02fef7890775a +P = 412fb9c76860e1d2069269fe53aa04a6782cf27f1a6185cc0553f25b1bb3687aa5144ff810f0bf028915e9c264f1bfd4f8634f76c779d3668c48f00f0bf7895d23fef71868bf85ec5e0bc793e3f40a769a6b1098f452f85440a6e87e5ef90a00c750a3393ff41f3518c68d87af8f7b7a9c0893b94fa6689b0f9c99dd6c3c9782c9d5e04011a5c6b014d89e75be86647074ba0e69877c0726cd7f51abd1f9963c0746ba881fa213a0b6961fa2c0d5a49df1f6ffc25e77f0922135279e47c642e668b1c3917a65f18d2052f3db6deb6881cdf17c02bab25ae551333425b5b1baad213cc535adc0a178268b1997fd54a74392e0f31d9300c5ba38140300df854bc55ca428c08a3d38909f9c18f90404e21c5db2a4bd830e2eb115531a21354ce295d3cb5fb70f94a4141ed16744029daa48776c237f0543156a2d2e14cf17710e416e07e743638daa32ea8ac5f7638610b1e19bd99f8509a861b525304888444608a59bfd528eaa318a551d0cc372aa30c1b64603356b05cc43ff4582337b837a358fbbde6b37f0f1c0bee4288cd0490dc40d20c1fca7bb6499f7b9b69b6a82e32e54ab523bbb4de02c562b1169caeafa4939b72662f599b6812cdef23f37ef7825fa7ecee66207f7034cbb0b0ac17ce94fe495566c7597cea093973b8456e8e7ec4f2dd6f14b1729a3b76c1b35813048cf8181257d3be3734bc1d2337ada3a3861 +C = 1155196812f264ab54f1606eb1ae6d5436860d48458467679c3e56e215cca0e488e9564a37246d14263e835b1e209c442a2848d700e322fe4e811b619e2b9bd95174e6659db1d4fcf9e704964f0edfbb2a66567662c2758cf4a585df0121beda398462b8b04133c64d49c92bd7650dc2a3dc76a126f4c5bbbde4a6c8defddc4a114a6e62204acabfbb0ffd5f7d2dabdb88115afd20997f816ab544b03a17545420a64f53c4c7ddc49b7dadbd524d7e8dc5de8045093811e392d68cbd861fd920dd3e8378c1bf46b75e41f7bb1121ec004fabac7331e944d3770cdfa2fa75a2a3c87d4c24614292ffc16b8f56219f5d79ed1ddcd70a285373dd1043fc51a21cd0d5e378beb709646316298c93e7781b142b46e825306245f8a0463e2dd3a05c3d567cef2b417499470529f7a1ef7a7decb9a0471e70e5ef3effff529487d11712b5efbecb7d5cf663739811e9a164e425b227eee2f37c3299576c21d2a9deab1be5f082456bd6adaf439c07f03833efaef7ede54724799aff90f68af1268d1d7667c067b1791a38ae51dbb47ee81c0d8ad91e51bccb24901201b416c3902438bc587a9bbee185fa90c0f2ab20ce5c4df13018039abdc3154c971dce2b5ffe548796cd4ffc57f49f604cec59b203e247c47cbb44f5c77964f6ea02e3a74bd343ed7c1888c061498d0104b214c8307c57ef9269ba5a3a377af169375236d7f1f0e23b23a0f486aceff1 COUNT = 51 -K = ae0498a7465bb588b90b8c4f516e943509804568406f885d49897657ef6b7891 -P = a831da4438157da86cede49afc84a21103806535ece624668b416dac17d6b4617fe9f4339215fa926b9d371c4120398b554cd63f9abc1eb99a5e3078cc1a4e504f3effebf256af14835ff17496bb4d55ffbfff56c63437f741ef4a314c198e1b847655f52f -C = ceb788e6519bb70fec7de9df3237b21a21f40c9a02c551fb18437bd7a6172dfecdc8989fe9896fdbef85b032b50a1f7d5cd316ab627ebafb30bda60964c5f3a339d36bb24c0c0e4b2d79e97708c639232290a08ef930f7ac7de6948cf9a1bcb43a76c9b305a9ce67ad19597529ca81e1 +K = cd24dabfec78e08087875e920d3eaf410b648b29ba1e0dcca5e4ceef4d2b07ef +P = 374f5c589bab7d5b73b69047d3bb27b1c9992021de1d428fd30ade007966e0faedf75d0879e79ac1c8e5f95fd285625e8d57a7f91d5e8dd1b9770c096c7a9e0442764cbe1a1b200a01243be1e1e6a9eef820c17f94ed5e5798a44ccf1eb7d88916c50455c691a7cc4b5f321e80fe82c99e1f960d1e5676ba4c20debaf7c8ddddd99e6a817047f8135910cd4addea48192d82044da8acba683b988f0afdfb44b6f6a168e67505235dc8cfb9780e4be67ee40a8ec19eb7fc4f47bf8ecf4d5c1039ca395cf8263b09012850214927da0152b6ad725c8b6a605801e45b89df596f4d6f882bc4d2b6ee4e8ef422ebe498f587524cd03ae9cacb572abf73a521db9cd8c7c2d0a229eec936dbd24cb6c26e2d1b6ebed78db28879bb4abc5a4dff9d4a9ede9c6c38f5996478c34803977b05ff506efe17e0cd7f65acaee870285f662d318c576d5e19ca1e220db7431b0bfeff958bb9dab96324ee16ae86726dcfc201ef5304f1c7e3d740cdbbf93ad5f4e07ed7dc3600ee7c54dd8df57d8540b6c9e15a32cf3bc33105f488c287198266ff7ae14d5c827968477b3ab99264e01b8188dfc5a79691f73ce313d52fc742e91c6cc1c08c4054a48dd63ca6eff7e0ed8f5f3ec8c5a0a3bda797b2302ef0b3371de947177a58ce19fb1570780ad062dc8b5cd5b53e6a9a68a0b008d659f9dff969c7699fb3871506bb2b9292cae95c080e19a0 +C = 105fc3777fc3ddaf9692a73192e4f8dc9392b003bb52afa500ed558ce0ead8c4baff8ff8b1166f62a1b2641b2e9b61d1c09f715b43845a5013c0ccc2afb09084b7304b453f1eb1d02c56fda7828a3a425cec80f8ca66d3461681f25c99910adf369565bb4c10d50d211aa147712cc7f288604c88e8d32b9a7fa804565a37cd20dbd10faf47472bcf51b9f28cd9d92f73cbb957f1c904c7d293bd00d62b12de520a2f5191dcaccf4761d57ca65c334180e587ac6d3a6fc1eefb7a22270ab7a13cc82e6a9051490670ebe35493c845cfb6d68b0377cf787121580e1aea8b52374c45e33d2cc71fcd0d1352d5f4156e41dec332d808d78db119a5c82e01bc2fdb37eb6521b00ccb94f37f34d0633a7c90d582c08e6a817db7887f2286c1ec2acfabeb36389caa860c6a24153081ed97e0696b77901dc12615d23df6ff44e01301fc532a37e3004ecffeb4bac5081bbd841d336dd661542da66f40f204818bdc0297202a9c33fab28b84ea950436b5c78c025f72eef45c233d357a1d9fda4f9ccca41aea1d1ce26138dc7f3377b665deff7d058be14d3f8a39267df638403ea89417be6c534d2edd9ff8e26030adc18386159aed21324bc12400c28d97c9d4584e641f722ab1b09c16d0dff8d9c115a96ca67e1d5664bb4af6063e995f6296d0c0c103fe13a7b43bb0c2da6ee31f9439b1042f4cea5beec7e44f3bccd7251912df283abb6d2aeaac525b COUNT = 52 -K = 09c2d230c4899be7ecaf9fde7b5fe81ec501010e60cf74a396adc391d9567d2b -P = 096cd807a5ade807b172392f1c9b08084edceba8b945adb1e9c7054187e4ad72c0b19b43ac88325db18cb60947e19f41939210564a8cfd9e83ae8f23c4557f503de9bf1bdfeaa68928b501b8c04af3fc59ffb4a7f8fa8231433e79a87aabf747d920808e60 -C = cb8b77a7d8dcec3f8174aab21affa6cb57ae217bcb10a4ef4a44b555463520209a839ca4f3a2cdc45bbe2dad08b3d71cba5d14db1a1be54099224461c132e41c7c5f1a06447002ac1ca44adf7ae6b76ff1350e881b48407b67802e9bf88b63ea4ba117d3ccb57e5a9a5f672ed876847a +K = e36827321f3c75b8dec02c0066dd7f5f0c7a8a7f43c5ace60a791a4e41c8bfa7 +P = 15ae7c7b951053f56a375c5eea1f3b86e0b596dcdc3dd5ab7c531efed9b060a899635d14a0b8610c287eb9348c47e28e48191dd7774148b45cb3b1aa76e8b8f3e2aa435130fdf6255f796a6ab4a3af962beecbd9ee7d87858702a18c0b08fdef70fb8f71592876e93947565ea80b0f282aa17835327278ce5f19a623eb9214c90977d3b4f56751d11d43162f1ea91b01b1945a9397f75cd38153112e698970f7cbfbfc896a7f834144022c181c5d0eccdbc35af8ed34c18ffe4fb6849431aa4b9754bba22aecffbd908ccdfc822b471552b64ef175929d6713318b07442f6326c8cc0586ce6f3d5dd2c7ddabc77f825fa74b500f113cf0b31415c6bfebf55f5a14d0ddc5e825d25fcf3b5364e51cbe4ff428479c8dc4d24842c6dd63cdf27b7466389ae6226a430ce44fa2f1a0824d58c72e77c25bd2557cfe8669fd7f1a2ca2c3985956d42584c2d93cf84f7072a3bf25836c52ba6b17c45c66d882b4423df66bb0f46f9b75702ce93dc4feb0d03c319dad8e320efadd8b3e638d202294df4b81e35cb9dbc1278356ffd4ff4b5539c05cdbdbca9e344c7b86da27e4e50a7711f3d7b0633b9cb9244eab73cfdd99ebbfbd5ceca3f8e88e173cc99553e3229198176a5c4cc7030ceade84a5b64a1aaacdf48f72ccc801f56e4649486fd2d1706a8a821ea40963d56bda92509a3891fd6341a3e8399b3619b82de5385cea89744a +C = 5c2f2ea92eb685a2b8ba810227f975566f2c6b7420a38cdeede6c701da8363d04a4d4919b84e3914b223c59d17522ae0666adfcf76e449b9c4159bc29b0c315683e427d7943bd7706f9646a8b30ad327c917c30fd74719bf820fcfd3dd70cb97805dbdf955f67b1a3b5a16b5a5c7c494b9778c06af20ba4153853716247bc41edfae52271fdb0381cfd938652ea907fe067770338806819e0236439ab3026b9e94bd3734f0c9548a83f5b9a158ed50a7a466a302586d8a05d4344daee11b5eea43ae524a63cfbb64f783a30729298fe68f2e7e631b35e0089ba6f09e36ef9ac63c808ec6dde76eb2b7d00f23d9d83d76c934492f3c95294ff3bc39f54e25b68f2c77fbd59bee01816bfabedd5d7b68f69dde9f9c8a4de6d5b363697034a8b7b6d6b5cebe664793d5ab164cb457860d8af42d5305cceb39d7dd4dbb79fa9323f3bdfeed4316870806a99c906d404b485286b051d10e7d39861020a562cdcf42606a794760ef160c65107ce18cda496eec3270aa80ad666e270942dc4ccc86fbac613e68b685d585a8c24aafd6b99eef328460939a65b4641d9d11401949b635a7bd2bcdb395591346904a0dd59af96f90d0de089b3c7cc92867f24048cb1f779617f3a9977d67d12a4576c802f3532e4854d0bd04f03eeede4af4993986d6920e80243aa6d2686c575795535e2202d58f89acf1e4c1b8b55b8562915effc06e1aa62bcce7c2692e9d COUNT = 53 -K = 81bcfc228afcdb9d88d6aa9df70ccdf7e68b2b5aa4bd74ef2594c07678ddfe3c -P = 4017ea83400372ba99c4adc4f35c1c7d720b13c3c3f2caa2bfda5f5832eff2ab940da497e8c14ffee9b7da7a8e88d0d093606e4514213e13827696c5e0a0b5ed282096fecc24a34466ee79dbefb356a740ce7dd607540a10a17acf9244d0d12ddea78e7402 -C = 24e7b99f09d73420e40935ff01db937ee0377dad2bd3503ecedc3da7861ed54a2e8270b3c3cdf12cbf06060997d21b06f8e28ba228e7952f3b773431944e2c7c54450e008cbb81d4d4720714b4f5ea4815dd0154e2f346ca83f4309686ac43ea4439f6d82a8a65534c507309fd4a61f7 +K = 50012312f54ac8a9926ceddb321b3ea7356bc7d80faeb32d1cfcbdf9d502c450 +P = bbd51afc73f2490cc6b3abf9e86a8edfea8adc041ab21abef623eab2018b74c003c023cf624909efceebf779572e1bd3796291d6f54e4a5b9e6ba8e50cb9938359a693be0a34c81b0c4557c8174a8cb8d857c585d70626e06948ae631824f80a40b2942fff6416475495ce390da058ed0273f06c168deb906e5a08e95261fc8251c988d4f8410f8d8c77ec89bbc8798c88748af17c5d9ef3e694821e2121df838b63971f9b0b5b2c5aa0a59130aca8dd039ef50a00caed9d6e99eeae91eeba0f0cf3397756b53481155a62162c17f02c5cd60f499641c79dd3b373a5fdfa77b2a263826faf7099bad9a4e95e771424f572699fb6c780e23456000c79dca2f545b08bcb11ea9bf98fcc016070c2191968e30b5ff2909bcc23c907431f4299393634ad583490377413ae689bf11012658eb81dc144767c04f8e4094b0b2e6e73a36bce1b419ac8ba731c8b983008524cf5e0a7e8658fe1c331d11fb5d22cf663baf81cd5f1d8c6fd0969f5608c4953e020898064cc10d2daf04148ab98234d44e304dd0481b8c19c96ef3fed1c4fadc1b298707ef19cc9b1d960797bfd0e3944c9e3c110208b3e272ff4153ff2d081e57ac7d9997fb954d26096a22abdba433e6adf41377c12c287f96a72f4937cea1480361ecd6faeda72386a8ced62c76732dbe5bcb96d2cbf60760a2b66a88c7b356424de1d216a74501227117d0c539e7b4e +C = bd31bcda49079d91e4297d578d0ee3596cbd13896af6ef22c856050eaf01187db6e3f1dfa44b68da5b0da91e1d2083238139f52a5d4a3a479cdfce62ea1e2c771cf6f4ddcefd832169811f3d006129fe1a75cbf04858f6eb5c87870d7f9ad8f5af424f8a54a531036abd9f2cec9f2a37fd4c51a869dcaf4c6e76b6651aafe44dc2ec9028a509ef4d2640570b8820f94a3bc019b0e14bd3faaf37b389f842e0e25dca63b47d5f4338fb6668d1381a993ccd3089b94f8708f763faf9fd831fc2d0ae1b2091ec27550b92b8f6afc580107dd61368aa5d5508e75e42313e71075bf60e7223bdb81d3ad755c632930d8a7c12aedd35f7db519a6a58b523fdbc021ef489be0c1ab97e0a2c7451d57f6ed94282d3afd9ecb9d86df65afefc8ac4e503bdea19f23ce47090651b3139ee756863e5ed18a0056a76588431950cf959657ce3f7e1fe2f6c6b21f667e7e5ee48b0f1d53d88776faf8a7ebc2cc1393ef9bd3d39652608431547a6e64b2ea5cedf5d616329fb388571d861a2c02e18ce19113fddca42ab0cc215ef769146241f28394e26c5097f3c5cc2cf7c18a5787d55c2238314b154be292dbd32956becb3fdccf4a7d4e8b6c13272a525c955afef0ca8a983d28fb6256eb68793de2cad3fd6ffcfdfe8a304fc1f200802202b3e9f15587f75f3d2a0d8f2e83d5e56b83d3ba8080be7a92983054c11a3ae790a3545e364ed671c7b4e1c90b01732 COUNT = 54 -K = 98e2224f46664c80217782edf2a36cf067a0b31b6c048167deb31a7a7a9e215a -P = c85d857765f7d9eb44d63cc9774eefaa1bce45437c3e7b17c944d322653d12edbd5066106d156d2d4a19dc979bf9215fdf1f4d6083cae4083017d9beef76a617da0c444270c77f46f5f35c335a532271ef757bf9f91636d750536ce7306f8b0942347b3480 -C = f2c95d14ef7306a7dddfd4f35c5a6372fd0ed2124d0b78d35f897d1e6fd64c89c454e3a4de4f4ea5caed5589c389eea1d2b07ed17e7bcf74d2c7ce16da0696d86a25839894232788ca4780039f43501f1ecf530dfbe4993c2ebbe7e8eab6574336ed813a65435dbe374607987376c52c +K = a74128bcafa194ca29eea90bd3818d6cb4cefc4ee16d50bbbd0aeba4e5e2f567 +P = a461e3e84c7dcd2be5238b2dc967dc64f7c49717eb702b6f7048013a619d5afa98fe1aa1c6d5f660bfb0d3ffdebbd5a87dddb0475ec0ad14d39bb7efab19a566db731fdef5c2085e949a33fb4a07534073f7e846f61b4379ca4cd2237a6020dd2848353b62c22671baa7a361cf2c23ecf7e424fcccc3585fc03ff863b7eb21df4244b9832884364a0fd771f40391adfc1f8112475105443d4a56f30e799e134c9a69a58c1dc079f44f62c0cf609def271757bb9db1204c10ddb14e68fb4d4d5908e9f9efe753dddf86db49cf4cb39822703e5e207923be113739b7807bde0be9d08a139f41d3f2c0871bba73b1a5161754b68654ad013927abd74eede800b75e7c9e5cd5e777a42bca50653a5d9c88a7f8ebbfcd248964f531dacc8f5ecb077a54a90927607de7cc6ad15c6cf2db4b4518ea3898c8dce330c4617a8e6d531a1d152f074bfa25e7a56827ea3f36b6eb8bd98f2c7fc149cc63564943596936f92a14897c3da1fdc623d2b56ce695b62d8bcf3fbd24051aa0fef5b419d2d2f04d08b7425bda57769b92415febb04ba180d0cb2e38642bdc03889493a88d7e688c2da9a832844e4972acf795c62d46552a4027d7d66951641d58675f0e0e3def2bb7161cec184f68ad1ea7a0c2b8c154b2ff43046a24edf6f7df194f6aa92f533e0a692ad85a6398dbd9b74184795a54d4468439e07186e3313c1cbaf59c99924150 +C = bc3412c61c79f133df7571371a8b787827a8e3632f5a494024781af1b2b41c83cb289165769edfc81ace680252381f35b20a050c45f17de7b9ee518e4424c928d9ccf7bb101ff1b701b41decb87b1a9ee2a5603c4a21d55848f464e97ce76133e7b40b9c40b6ef6f308ea528d6970a63e2fd5cfeaf375f09355b6ecb71780c5fec6a3eae43947ee94b86bdc21304fcfdd2b7c64c754b5e14f53976a83c7784bafdc686b1670e47001eb68f55a89b0670332f4401dc75b87ab9c459577ae731ab2db64feb0e4716e1bb61369829bf7bd1d6801b94f732fd2ad2dbcb4d0867f580b477ee6482f5892c2521d34b4051b07d87b9c53c4f79bb04265029f05192eb64b7f70c3f21f081baedc7b16483f9aa44574e2115c06d9893710f33c583ecca1b65347bce42d56873abaf71abe403a8ea9cb83ccc23e7a61b9c28246e18c4efb60e8661a6f98f68af5a2609381a31abe7184a618e000948d3dc4723f7293243459690197bc246ce3a3aef8975e5eb5e4e3cb3a059f32435912fed95858f52a3d7d3d7d7d2b1471f2fc0558db2228f7a5b762b4614145caf563b1b55397fb8fa5ad6e02d146b6b62a2e305008294fd93add6b4261e7b369a422608ef297ef96c5df22db8067dd37033e405358876aa562ad0469ae0e501fda71f6b677eaa11babb997490259a420429d256c6cc2bacd1a6462035575a614ee60cf6683365f49119ee445f2743c225c8 COUNT = 55 -K = a8f68bfc913b453fc5e7768a4746c2355a932fb29e5df2cff1b306b16439b1a8 -P = b2d02a520b319ff6838e449f41068f72209c6bbdd8112dbeb491fceb5824bcbdbb28dd959a2651eaa195c9c35a5c57992d666f48a82d1870e1ee365f22e614c94f618d128a27cf5ea2ced99f937054b8525995092963b97c5404db373a7ec75c693371ae18 -C = 79629818998e505306c41336f6b31f53afa186ead80763c10bd8dcf1c3348834ad48a1454740631f302bacb162b40654b812687b2431d37575bddaaeb0c66e515a519baa5c77afc98b42f555bdab04f59ff93450ebc6aea00c7f9ca4e451171fe6c89c726f9e8943e1a8aa8aea062d68 +K = fbbaa8fc375c608f839324a4338a8343ff4fc90e39792180d1e09183ecb05ca8 +P = 087e3d7437740a8c0b1619336a256b9ac2e56a5ff7184c5a9fdf7733dbbd30e2807ac4410ce01fe6617b710e49fb5fdffbc3a2b080bd94d307a6e2a01df6bb92256776467fda4ad583ab85d5d653fa7661a1a64c002878c8bb93f232391a68e0c13e90911ffbbf9126c5b3717ff3909df204fa1e8a97d079260c298c2b9b8650a5b6e97553067862e1f1c97104f0add2ed5329c32aeadf8f7137d6a3d0ff8bfc45a87a0c3adcfd83e24c407ce84276320c99f60bc095d3f4eb6652193e20a54e865f97f7230e0944e8734f9257204ddb06294df138eb109027b53be48989ec8d4a7953e505eecba8b8713948cdc303c98633e85ac39afcc2b7c68dcdb0af499be0f5af328eb361213841ebed5c08f2c2f726d6b83d24f0abb6906d675e6341b8e709ab3fb1584d6dbc35989318d9ae426469d1e194e624515df5ce1341281316a5e93ef2d429dbb70c0c062694b198cfdcccd13a0b2f94f2471731e449ed6499799aeb1c4f26e9bdb043be5996433dc37cfa8c647ce866c6c8df44185422c3cb26fc259e8815450973582c374a862251b34e7b2100f25c7cbc7089a9d7ce4eada7cf4555eaf30e38c60739db0e29397d8b56660d54dff2174c0cfc285e3c0b62c972ee937bbe39843d5c34a453a1ad7e8af3de845e149aa8c755b1427916c7582f71ab43c908103fffb2be5100e31c969cc57fd3d1a34a99e4f8fd541a98397d +C = 121c36da1ce1a5e3b60ece49891a0d3ab3cd7ed1a2d98e5e89228fc569a04362115211d158abdbeae20bf4144eb876829ef70c5fc3a0d5ec2bb716df6c957a99c053a2e76fdba13d3e799d8b135b24afa7ad7b71c8853fff472f81896c726b48480db1d7fe06e92aec521ddea8bf853ad8347bad024c3e547dd2ee894601a3bdff772a26335cb23be3078ade9e02a21d58a9dbf397e3bb299759686db9cad53c0b4eed2595a0d941640112d8cbda5610d1aa2af56d14957670fbda7ea2eaec4501626962e896d2027b3a76ff5dbc3bdb3ccb27b6684d4e84b326ed8af9fee6f0233cd55a8a3542953f809d4591dd25eccd0c39da8e2fc2c500cf50b134dc0a8a5f1d1695e5520d836a7f9cdfca8c5b951f9a9ab1333be58a7d298bc62e5562b4337b7176833548383de9f145cbe12cda961dab9c915d2956b0d3e64b06c947b240364e1b9f33a529c9d248ec0c9693ad082d22443855f4572348624ad963f718b8a614e095c85b98b75360ca22d4bf375eed24db9eff75fe7854bbfa358794489cf6170f88b329a45d2ba243e625b3fec9338cd42024d53b221dd42f44ec2c53e350716ad5d2d8af19c9db41542e7c66d3cd03e7ca08805407b34870a926769eb3e29cf3fd45e151e352f4c9a6bb5f65e4bd55eda0db90566b3b8f0c776ad6428345a877ecf62c0630fc02e670184be7d10f29b13e5e1c9fd6f6d655f63246fb265c86019b5ae29d COUNT = 56 -K = 4abd6e278a69b426ae1b872ad962ae353c962260e6f1c9e8f541f29517aa637e -P = 4d416fcf5285b79d509a3689a553866dcc067637040836170b989a7de8abd4187bd2aad3738542ad03a23aaa1ea7d543778e23934f9d54548afb34b8212e324eae1918bd274d2fe07f82810bc419566da3df2ce8ac2bfd1b8b26021dab0a2c50413053841b -C = 306d2bed1e5ffcf2c2f2a4360c9b8aae8fabf171251efa7badeaaad3feddc70fe7c46b99baf3c978fb851ca2ef15a68d7e53bf906f460cbe8cb7e5eb4a8004fbc77c224ec88f86aa3fcaa3f49fb80fcd618b8651888c4dddebcecb728b03f91e563aa4896760e75575434cc5f5ec0b92 +K = 0f7d6ddc8adbd1945e6d7840507a2801fdfd0ef5115eceab1f89a47c78ca39a8 +P = 8a8d42171cfa82f5fb5ec232c6d07b58e3e81814cc3d9a5498e3dbe80d392280df1dbb93b0f424daae6eee4b4507f5400a4c3911fd91ab11743dd801b548f4d6c3138b312a332e14bd34060cc9a883f1432c9872da7190cd81224b98d16647b5d502d89c648287c57cabf5311c656b6f17bd7732e071a47d057de79880a9a9bd71c3c940e51a5094f985d47d4a42833709c650b263771de2bd4d112e0ed6a7d27ead862f4371ba457b32ecd4b6628e3c8284f9a36277b98a5f84ab62cf0ff8165123a7dff829fa8957c55dd96d8af6492dfcd629f8be9de34d6e633d23cd998f8879bf24ea73cd2f122fb0acaf253b19dfe43e9556bdd94ce76636cb31309a2fbb7a71096490e1c06259287af6e594a79a44b5c5e15704aef635e16140be23db7803317d96a17e4c6bd2308615cab45c623ff59146db5b62f81f040559eecf8d9467945cbdab3aa662e7b7ad045fc06c411f1211c6f4029f00f02194fe39705b8ad994650a94a16ded18e21ed87c820b08b5da725c66c2f8fcfd02608f3877c7b073da9c3e2b42e04b1bc1aa876b09a67162947bc2761adc9661d3d24e0a8a53aabbac3ad80573bf91a9dc24f0e31bb05663015123d8c4f53212443b9bae3358dd02e4f1137e7c9da02deb5b55e30d03c255a4dde1c4fdc65a1a2f327c00a8d655df3640b85de43b86238a4b512a508bc584313654129e441d1b54d7cb7a92e1 +C = 04133f4f3b8f556320df352fd8946123415a1b6dcaf976343d7e9561261194290320a2bfa465de70898e9e00cb364eceb51c6883edb3fd28ca3fef64a44df74773f3154de53ad061c7380ac016cbf058083d4552e722786a12fb469a19d9c64338c5a9a44e2948d6e643ddc511a983a9f6b5e2c61b771d74bdc6401971277774f45e2304e42dc98bb7c98a8219b21b5f81892968ed4f8de98dced4bf326ebaa33523094c550dc61cc327fe588e91a2b567d5debc576b47d4f2b31cb117633ad71cd2f9416cc9ba4f8a9f0fa744822251e17607c806bd6e5ea7a200d3dc9bc086705ba50772dc97b04fb65c36c41cb883bf1cad7ae89e8b2272e0464083fb527eeca10aa223e8f270508644b67b18e58c851d6747a7ea16b39de7579a212f025e22e949ef1b3f22609f70f0dcf9471360e8fa09c1293507ccf9073ab7641c94facde7000ab061c60f953e7a670b98261b6eb3ab59dd3c37c4621b86bd269d88f6d27dfd74ef164c2510e974c72297b55fd7d4281b89de763adfe5d7af87fd3c1491801cbf59d348af7817e93cbfa017cd5dc139a83a5bca143a8ad170abe8fe0bd048ed339513cab9376791a3b23a9b290e47fbf9cbc044d3363a086359307dbcf3248b2f855e19c503858acddee6af71f2985720db2a4f515d0ba69d647afaf8937277f94e06ddf6f1ba8ae972b87fa3da4fbde4fcfde96febb389558ba9b58d12e080e5ce0f97e5 COUNT = 57 -K = beb3c1893a8034ff5ddeb58ce6801b7e39ed876111c00aeb108a2877fa3eefe0 -P = d9cb25fa75d8a3f4307525b0b821281dc6e9a24e226a75747fa8cdb1f2bfe4c960d3a44a009efa951a1dd92e5fe0caaccde09e9973ac1396b2816a3481eaecac112a79f3a67c02f1d7555774451008e87df9b05eb17be671353039f6480e82e5c505038c0d -C = b554ad4657d0d5fc6ca5deb2f9859e5ec57bc72fcc5fae4f66bf692208e51b10da0f1e8e71fa73300ef8fd5f0096b335ac654880b4877dbc2caacaf18a47b6c8a3fb323677e412adb23d5fdf4d23e2f9a56962c0b23b85092e95b8e84c9741d487a165c5d554c8155ff9b9dcf094c0a3 +K = 6de2979a22755534de0d44de1fc230914ff6c86aa5e3b57999841cd5117d1a75 +P = faf9eb69a737cec5d62f6757feb4fccccc90acdb2e17dde39eecdc8add314831331bab6cc5b0e31ed0e8465df942eb34df70b6d3845bdf86d98a39caa36bd68d08af466177b93be0b9e6ae81ef43c4ee0208fa4dd9b16f6bf0589203f1ae04b352ed35729d1f0708e37175e51dff948b3fdeaf7ee185ed1bb85fde2ba086bda826533250dff57c4dd238687125d9c8e37c0a75192a06568f543915ffda9ad8924dc699b7d72112c9b9168a82bdae0f7551891de8f55d3d9790e3f9a8ecc4d55a073d93b3d8e10d61fa6b845e4ba75bc42e3fcfe6956149461dbf60e51a21ffe265079f0e9dd582ec0e59a70072e1281ed99e690f6aa0eb7fe9f661ff7b37900e884cb1cf48667e57c4be893b3616864a53fafb7d35c7b2324d2ba8a456806b974213bc1f421a38064b0e1d88089ad18ab1cbcedddea4aefd73a1c3e1ae9ac8ef0a02ef6cdb584a2a876e61caa0429c20d07b992324a10d0f35affe46de1671a7f79f0159743ccffc3988174e081529d0196ddaf1e7ba70718c8443fa3e60ca35a508d8d06b3b8dfc3f6d72231dd6bb1931241f517e48487a2bae31068957a03ba0ebad3163bc863f32641c5ca8426e8a6a6e70542fc4c11b4263ec8072f1960377721249bcc68db2a89a9f9c5ab6f26f674711ba45b2311616056031348b39696bb26ce1c27dbd0ba0612251a72533110e23e703e5bc9cc1ac8e382ab3c2cbfd +C = f27c0ad51f288b12daf367da396c238bb195d879e3e5d8d1a26918279c2f2d309fc5664b762dd8f50ee4741d5b15edfc3f97a3c5618d9813f05d1af3d183b9b1420206c2682ffc3cb33c82532aedaa94c9c053ba2948ddec18abde808709ca7022e6f0415a3fe283873a67d419905bef777dfa1569dcfb6dd2820dbb4400d5390e74fbadc53f7d770c9947f84e810a29a43a702057e3b7462f08e5e1577de68c811c314aa98548fa4768e6bd54f82ff9ead74fa7aec81c02ed3715bdd2828073c1a6ae02d8fc678837c86edee8264266034106203137fb0328122195f60ba4a3c60621fbe6af454e488aa484d3956fb99fe0c8b0773e84e4c85e027f8c55c497df204c11aec2de153040d87e9b8fa06a53e04f6c605edeadaa3cc51be74418aba6ca2e330ef49005135ffe24f22c653b87bdc87a26b4f0e5d0b8afde1666e8d1500c955e540b6e8d725c6dfad3f3ea9c89f4a798f4640026c3252144a94d9d5013ed48526c507359cd4f200f33895a22c03a7bb3d172d79bb80cac1e046fd0aba420223ab2f30bc99a66d1bf9b2580a31dfdebd8cc9eacb2c1ed36cab2e674ff9db6f944d786a0e47d9394fef331beb39fc5c299660d5c872cc61a521d1528421bbb1043afb52dea13d7552653fb0524a9cacfde8fb7932ea47bf93c2abbc31e425dc93188b450a2006a9a38ace5fc7c18a5ace912773939fc09096a8ace5877cdea857e0399eaab COUNT = 58 -K = 68ace77d047e22c6afd952ac1a70a2c5b19b3c7c8f4c96d37491301d6be42d57 -P = 09a48feef79574daca450b89f8ac27cec25f5d0153d00c5c5e844609ee0a47ac9defb3a1f23f207ba59ee6316cd30d41b048b385e7255122579e2c8193b180693dc6ca505dd0fe6481bae11ee25c013be3fb5012ea7903a6c73c80e35b5b7e943b78075fd4 -C = 6200fa2d53acc598408b85bbd8a86c504aa8570a33c5a677e8cd517ad4f7aaea592a47629a675e7fecc4e9199e8a9f1313b473171355e27f5a631ce007ed6617777dbd5b1028ab3886d4b90d3e513c2aa22ae1beae86bd00cfedfbcf487526e8717d70dbf775d18410d5f6c1379ec7a8 +K = c79dd889d013ea9487e1606ad8a9d12d29ce02b50f8d7f085bddc1665c9a75c5 +P = e9a4cb06fa4a2c224dfaa8482811b727cf0d416eaf2714c698e840774b9882d42a9bc8b5e547496be66283fee20804e3ced9419981127612b0d5488f143ac05d3d28cf510a5d973b90ae06173d12a67847464c360205ee668935187895d4444f11609d05ae50397b428295aee983696c8176f50b3003eb6815476f69c72e80dd2edb0ec6d2562125b48e2f493cdca8ba71eb521beb2611fcbca0ddbb43979b97aa7c61bb97147aae35024ca5047dba4552c9201583bf7e36650cfc79f7801247f67cf6ddf1c23535f5e8a3362109edf84a25a4f4ee23e8f29aa55520d6e76752fdee761bb296673a379d010c8902b6cc583364bb02f6ff482d3bda4356ab6cffdd4411fd81adf06a3dc92327ae3d584923763d20c7de300640182cf3fc5e7e787e74c58b3f4bb4a7aa5fbf07d07f5fd6a54c786179ed30d3e1f20183b4f485e18c60f4fd16e3fa13c028cfc42d4cea97b190d8d0a5bf3e76b8229745864a10eb9825bc5d1ae2f0b7f04b0e27bbf6c1a17d347b69a73e8f9b9901ea00b6b6c9ae78c75296ee2bad10185f34b98f590c9d49632304bcfef0bd06415e99e916617405a1a1a5ab8d9e37846c3ecbc59bb72928f02a5cdef0e52b305aa569528307405b9ffc96edbbef8c990102e2298f9979964964d27e66686d52610a41d782dcd8e4995a3204972c05767cfc2a8e5ba93ba51712d01b28f5e83dc6938f9e6632d3 +C = 26b8f086df6ddab6d3d0ce87930e469bb2e607480265d95881dfb2cfef4562eaf1db9f83f5315c4fb455594c1c00c18e662d2b82e12f8daebd7a3b848730561d2d39b500b775e7fd13055e77956cffb6b95dc0e1e8f19544a8789b0edc53ada68dbf0b7621c6901b3c34c34a156cd235abb0d7f7266157f716338860789d44f2280a1d5818dfb06dc34bbd889384ad5a917551c262d14e140fd66561807cd4ab8de59e8124880f0f931005570905a411c1be57b96010afca0ffccd9476455f6a40921273b63f9b9ddd2c0b03c64e30844d3f0b66e56672c4a34c799f72daeb6e690968bd1897c3e164188562f3e670e4d590c9bcc3259e239206106d227c7dfb03e5c780fa2f4488e867d1d38186f99e4712e4120946b98484794a373f4d2c5c5463391f62336cce27ed1a85c2fcf86e087fdc55bc8895107601c4951c3742a034aa75ff15b70a2cec7b6395107f646afde8703ff374816117a3e6a10e79a84a4881c0a27f7118e8972b41eb17db9fdbb9225c76830230f0791368d6681dae229003430e2124c5e6ebba39bd43c9facb86c78f0f54fee1924dd9dcd8a6b4bf5be1ee43b8f8780f0ff3fd87c9fe092ee426cf5c2ca2f3703a95b96d6371539b040bbb2cf00e7e6635e4c0b947d351e0b1862c6a796217061efe5640fbd946009448cb843db6fcfc761cc4c45832417768df280fbb714e2cc99a99e1f858c065cfc27dfa07bf5e8a81 COUNT = 59 -K = 5543882c8250f38c4a49826d2e1bb15433fe15a507815fdaebdb3add5f56e2b0 -P = 30129bb21de5dadf2abc892b076af34a8bd5148f2108cfcf96b3c7c008ac5d950ec2f3e68075caf851d471ca347d599961e7bb637ca85da8d4c3ae7ae5457ac00fbc112582d4d8fc39337cf8855995b348ff30e3a222ce6d027fa49c06ba3aecc64eea6814 -C = 64ab6f1ad316ac4ef3cadd434eb3cd5c3894fcee58052fd14c00aa52e81a3b873c575b2c423d335c0452933cbdc9075cfe7b1511f92ee5987fe11bca79d6c8b6d7804c440b6f76e624e05def5d69e871c0580d07e753b9b4ee751d6b5e0a5b89de7682f178cc3181972743ca24fc2480 +K = 9284118f81c966b94c7725f963a369a0c7def122308afa7b8d111f2829e34bd1 +P = 5f982d00606d87a5b8e4b3848f90acc859f084f820655b0842e1024112543d9900d5e691ef1ab8e7ae1b8e0c248e1a1b77aa78f16072981a1bdaf89a8720b2d0e6b07e18e3cb1b229fdbb99afcce2b78702a37d4d7ad63a14c6c76a95b308b1490c4d3af99192fcf196c0480255f67a8006dadd0dc649c91e0aff1f0c7cd6c54c040fca432b3d1d52aabc4f0bbf464ca47f9ea3aca2ca4965164d8eae03a3528f5c9711c8e63c3de2908ab7873c3e6375a81bfc8d81a6a495f366d6230c2f7c8d6fd88510d936cedc4c95d7c95485867e95b33c5242a10722f47938ae3a0275b962b4089418f31166e4b106ebe89df11879a3c84d59bb34e41a819ed0af03241fc42d0e832259a8236ca615422b1b91002978c0bfd64bfce8fd5c081c935cb11b84f5d094b84e9926e371dcfd189c194d9c2ae8b7781f61ceca0c12e31b1340c30ac4562557816272fb5373485aa59517af51973399998cdee3cfcee7a83ac17b33d6bd98bc0bed1fc709212bb18b775d868ef82207848cbf00505a8bb8e7349554da019314e0b2d085d7a2188ff44ce5d62af65a7c2fbeb08e28af1e683f358d17da49f6f01a83a99d8d04a6ab1f9a75ad17859743aeab60a2830dcd91cafe9b82a028274ddbcb937d45ac515b923a189a0c9f2840f490dcc42d60b8198dbe11a6edb1a4facf4e7bf79deb626ed0155b2fcb64185524233e2ec47f37379b5fc +C = 5066f507ced939cafb8754d4a30b6f470558300830f24187fae4d3641da04f7b63d7a0e29ff73788d4a394ebd31df0d260cd6566f680397ce835d1b6b3480dcb6de737f5eaa8593f84882df7521453d73b266a689b62d55ad7734cf9acbf39ed1005f21b9d87ebaad97c015f262f4d0ccfeba90bef5c21015f03da641ac527fc607d665ea8a92ab8db24de9c82bd0b969ac8005d35df4133da500afff6af4eff0189660a4fe0b12d9d30cd106b756a43d62e9da9edb9d19b0fd2d3ea8da4d5d7a2cb3e13195152d2c91b0baf3e09614f5a57dc2f420ad6705163901e1db9e8e36775694ec529b87c00790a3fe215b30e2bf14ddf4705780e709ab3e804192e5fd56ba0a5639244cd3059dd250e22a31c08e5af6f24d139acf2ee99db16dfa7fa4dec4ad0ac72fbea610232588f45a9e284970c8192d1363882f2b1214824d06df11d1aa59e2278f49d635d9c031917e2f123f725f0fc972248a6fbb90001f73bc2859d3b4a8734eb43f15127cc55e764055353ce04d9b881b12b60babb0fd45b627cc78eee0d82e8bcba81721c6ea036c0c0b0d9c61b8255c2369746e9444e99d31099171e4d10ee41114ca1d47ac64f134f20dcfa2e06aa0c0e7e076b375892f34c14e396f2cc09ba8959e1f03a4baeb571465ebc2a45f2143259eb4cd72e0b660461c1a9d79471e1e745acb0f34f686c52864072604db86d0a360c6e083dc77c612204d001f166 COUNT = 60 -K = 002ba000c3e665d4e712c211085958000f0b0d66c301f7fd0e5b3b334e502dba -P = fdcb8e4db65281ba61a2634e8dac8728518a5cfe6717747390bcb8de812f5ff193980c0a6a18104c560d9cefb6f8ccbd288b7fd48237e297697cf7ad2cd20d1d8fa1e3ce8d967972d2b5657afba7127dd9e20f1df017751a6d79a14d5fd6916f32efdd15b3 -C = f15fda17e4ca8a9721ec1551cb7fdf37098432beb2fa9bcbac07279799ad08540ee85807dc11699649b5a72098aa37438b955bf98383bdef9e6cb5f097601742019a742481f3266033dfc326204ec778995a4c13da988de3ebaa146c429cf587fc2f2fcf6798afbb1132bf22fa53f03c +K = 55b9d8b7806bb5991d9d05cb4fca95b9eb485bc2552c1f66c9415cb98692052b +P = 46b08aefbdc4bd30c12a53fcba5b916a5d419a11ec8928b91f43719204ce2048b2b9cee7ec69df15707d97b4773ea55957f139f703100231809be5a2ae07d6f8319012a0e1f71ab9c584f6c7cb70dbc88aa1b3401e506c8217e250bc626c50ee2a49bad7081ec6d30b63d6feaaa57e06c5907c1f2da4a9d4c79935514c00ff8f6a6eb4324af4ff01fe5202bc7979dcdd54f95d603c5e1a37a94e771e916e471d2e1da0d94ca0610d696753d9ee23f04d170c137675a9174523751d5dc93ece8c291b2d96f380a22108b0fab0b6d88acbeac9a0a37fce72df7f127f51456cf5e55564c214334b429eef7423181b001d8824a1edf082bc254670d49574592c779d88df50348b5826c3eadf509897c21b894dad28f700348e6d0de6b75252f612f17c52db7503517fced3043c2b925ed0cd331f95e1bd9f5749a7c38db5b3ec5e65fe028202fa1efd3fd9d952e8e7ebf6f7971a521c918cc19dcf90305c5087f5bfe189b4ec73097aa616fc033d5e57a7eddcb84f8e6e656235338c79c31e13d48cf3e416fef59a5bbe33115f9b48615b607bb70f08e5874e6ed4d306e8e52681c8813a8bc7a7fcfc5f5e74e84a4f9a891fd0a2ad702dd057cb03cf9d1be1f48024ee5f41f9e891f8107c1873ad331149c55bc0582de818df67f20631d6a4b1281d44eead6c5ff2f27725fd2215701d7d57d54fe3078f97c55a75232b44ba7c8338 +C = 62ddf3625b8ac59525db4172c436f6aacd84d2c60ae3a53e59d3f5984e7ee60aa45533580c2d249f774eaa4a4ded229603fb0eaf9a34ad5ab77ca458ba37ae4934c98c9f55c569bbdab75be53b9ba79dd5ab4dd6dd4d2692059dcd95dfc597d2165caf46430a14f066ea5bb31f37d6b871eb90325792ef8a76f10d5332c293736b85edd231662140cfa28434a0aa5c505c6b0de1e9b80c14f70a9b287cca2ec605ff17d211858e9ab1263fa8aa29e787c108dac3984373621779051c1fe9c1f80cfa32dd052106e85e473b3f8d32d8ed1809458c3b27784920e6a1669865bbae26179187c7b0e6c921dfb22a59a0cdcfbb5c9ccb317426317cfea39ecc3b090366db0824bf9483edbd653300b9825f5d963cccc933edef78f94b1adfc0337456fb06ead8970374c88d5d0acfac49c278f94cd669d0065d936fe1ec81fe87c5eff743ec70cafe9c1c0fe0dfc188d7a53f3f3d3587bda26a61b6f836056548cfb345e76f4bd4c00413f7f31aa3a68cbbdece5a8a3466d517d389845186085e83752f8b9e4dbc614035dfd25cf44194f914ae40dfa4b6376695f31a73fa4694360fd1a24bdc196cfb18729c71d8395d5c07640380c847a574a26149bd9c17d049144fc26571b1671723c2f6a8a8c8db533a1e8bb4106e557fa2729a8f894fd96c79994001d431f77f8ea37850c6fdd9feb577efd2019ba1c322ffbf3533cf83389d9755d2d91e0b5916 COUNT = 61 -K = a9e6e31b521451e0d6bcbf000609e2973ec030040e49c31343e680866b1206c8 -P = 604b98a4560b19e0d25bd85716165632436ac3ec2a8da6900e816fad635a7f3ca76fb1c5dfae4dc59932edc408f63f598a5d2402386c143fef774e8017b2f8f1858dbc1dec44fc65c74e677579acc3e62377e9c50dce37144e5fba0fa2b07d9316a2916a85 -C = 57fafe7d6a605ce73bc162bf312e0e92749d9df20f0efaab794d5820655187905bef71b5bd5fb3fa007d4651345d43c9956c9d580dee3c7cc227354c5ec3c9d08fea49951f8a488243767b0ff15d103da411b4d2cd0dcb07bcf82cc95261ed665adbbce019c0b36c8098cf48b0439a46 +K = bfd887e162733a5ae715fe37ed26a02b89f64f9865185b434de23e521f1a5b83 +P = 7bbc547aa8bb645b862e6e57b0a0d9bce7bf92d8b214d6e83a34f5e4add2093cfdc99dd995b8791e25d9e33ebf9c3e9a60adddf735bdd854b557b01d2b576e06b0113175668bd9191c1f285eb5e3bbac4470c5547a996dead4e58f227e45f8a63101a29c3df129cf3b6cfcb434a7fdce5aca33c8ff3fb04593a8ab49a8d7b5cd1fe7f83e0a198177deeba2bb844758ee5d626ab23cf868cc3d0ea632131e284fc14b73b0d669dc3805fc7b01f38de1c3b9d7454575f7972cc6913ff7dc45bc5b9fb76debd33a0a30e797823f8ca532cdf649058b213ecbd32f039186cc2cfbcb4b5c5a42c24a8ad9430a52eb333476b4ab023017520a752c2afe16c874caac9ac918330d4ebc68795763a15001979d0abea14fddb4ed4645dd9cc5c12a89902459b8800707e5e1587a46197027d75558941b0f32c31a3fef56a4db6bf8a2bb15cef13e22e79cf3c05c40d9a0164537d8c2323b244bfa2e6764d0d1309ac59395a27dbbbcf7daa1e68b71789ee955d03a540e4967d5af5405f714011300e0ad0af05c2945bd10db57c91f3e33b3f1a5d8ba8c5b35ded10a6ee2a979107985c338e41e6d2ff9a4b143f85185064834dcbdd961c7ae960f348879543a779ea913c3cb9dc86e0afa3edc9c23eb0ff9916eb016b1b5435d5490a9662671eedf2792498e4e227ee55339540ee64de283e92b0ce0cb3fb76b9f337ac52b0484c7ec212f +C = dee01750e14db4f8fb4f950b08196ad25433180bbe2e1fd1afa34a4272bed6855c820a184ca43910f1110e1413db7524ed8019d0cd817abc60dc0d3b2b666cbdbce6c9187a66e69e5ff54ac726ba714ed1d965e827091234e9ad01db1187f61038188acb438431539679289795b310bb08f797de746ed33bbcf2dd5beb111277cff1d4f2d85337e35b673e8962cda6ddbcc94166470231b0d4a7aa8f55681254b9f05ec1e1dd16b9b2ed89158b037b41021e23f8ae208d573daa29d5eb6c4d7f563dc1d087784b63fbd6a5e9f425085449391f60901e4308e4b8a9a6cdfe84ab60c51f3e5379f471fe1598e180b4b5e3d29dd0b20204022e82775b70f36b8d95f2b945c0af565325a719836ec93bd5e84cbfc300f8239314d91577b24dc7f912f3ed21829bcb65f058f20daf62510316912b3b132a0671aa5592c7e3a54683c033f7067bbba69935e3e1a36f277ef6c160a26f80416ee900f7c9357be2cf8f972cdda82e7df5523f8e271f19bfa6df01e6020cf0cae41a70012421d3aa5c881c6a8e6e36acb550c0aef1fdf54e08433d481bd4b13f65c665952a68a931adb6ab274b2f2b529042de5e726c6d9dff45b343ed9a1b57093f757bb301fa0f59f375085ba792f6285776f6eabf25aa9954aa48b7d8bb96ce379dbf1374579a1fd865202c6a154498756a3be5370667a6ed24937eb51e9de5033c9a6eaf5af84529fd79a213f06d2fed57 COUNT = 62 -K = bddf6e31528da66f3da75a227e0ff7e8a4280be490f2301b33d9d10afd4d6bb6 -P = 2ec72f22478d6a6a171a4da486e2807c63631d33dcaaf4dec797aaf26064d6e157141375ca9d840e8ae887da858d6c71dbcd21ac92d13f1430b95282c55d3ee905c1408f96292be5e85332a4b06db3bc0621d94b6c66de0b42ed6c3a01fe66d35fee87eddb -C = dd9f9545431f7939d78ff6571a4a3a8d481a29281c5528d38b2173d07b44060a3b2ddab27e55ee62afe9921fe258c39b999a7aec74fe184bf80433a59954e79c14ab2fa898f5ad3044c0dd5abff788b303b3f873e0fc4c8a5042a16babc40de14b7c9bc2a723ca947040fa7603775801 +K = ea9ae36d5538de9bda5e76dc407dc6b41f4cc062aa1cd12055b18da697fc18de +P = 3e4e9d64ef004aae8f52153fba48c53870ab087e710ceb6f93a7f3887ff94e0e4b5a10b71daf64f33cadfb43ac1fb60fa5a3f1ed7f83e2b8045143f5167d73a7fef55a33a0b1aae4280dced5965b6508d21cd9ccde1dc5e49b65af8ebd12678a901a1a8c684a524077e803472b8f75b2cdc95122060afdcc64d087a0d6917fb7db05076d380c49800f9949f05e9ca5b161c2752d408e0093aa442e120028fb83bf510c3401845857a4069d66bd8863264fe24b25b9b457f40ab4be364c0c0d8724e143abddc489829c2ad3b1c185bb7bcc024a3879563303a790d67c5fd36d4a57d5cf2a9792e2105d8bf2d80b6c75b84e0f26c414f213bf98d8f11721f95d5994de261aa8a17426cc07b7a87dd5d50316c23bb2297129b1df32dc9e6e62b00c8dc67b111a681dc4fbf8787585e77a66f7369564015feb3282614133a6d24c379dfd13d54cb2e7534737660823a2a0f1aaa5f383ea382db64b820f1367dceb47d07ca42494d6ff6c5bbe850b5e80ad635813c20aff709ea40da886ef613095bc9a5b61d5e5f79355be2addff36b4afe8f4a28b1eb1b2108a0d0fc3f864fad3ad4ef18583eab0acfb47fcc748284934df3fdf14bcf9fe27e91b94ebec6373dae0c05ea5bd694291d264ea83de26855ba325db3be091cd796f952855aaec9329b0f32779c093fc0e5219656494ef73d54243c1dd6ebc5b7f83f2e1ccdbdb3be933 +C = 3d36d94525c373f0617c56bdbb2cdfc1f07533424dfbfa2f2d29b57e1e7a9122f447b96fecc9cb193400b0ad8dbab0c000c346408449d980128a20220a55d8db5c71e6f2dc3d7d5abb1a5b1dc336f95467d79a345b37a3825af4fd369bc7582acec95c02e0d0c6e9d03b93fd1fcbd72bd3b380b2b9715096233ac2ead05dc06154ba117f75b18d3edf0705cb962826385276d98a24cc2aa43985b40e4bcb96d69e8045e33b5b93e0857d3635897f619f0600b56f51e2c5d2d46920e8ea68be52b12c036b5f25a216bfef22b9c8fa22c8a5842cd17da9f3f0817634d93224b407ec13a245925f6b259a9bf199ccc177a06f9274d6953f8322a4264b25cedcb207266af75323ab766e1c52cd02b44a5cf3fbfd3a1bfa8d038eff6385bddc3b15bafbc8d4ae20a9b4901854326ffdf44266bf8f49d268634cec0de4f18400c3cc306df734c4a5bd0aba49f8692bf9db7b0197e761d84bd852cefaa039f3b16ed165ed54ce5c116d3344897375b620bc51e4cbcc9c5596de030af3a0a95746a24942a58e67d594f46a04e7b352c6d8bc09c8d954f8cf2a1d56c1d573636e17cecef9d462c4e8cfc8361c6e64a506e137809e8dfdd0046054a7e478cc48c7a5aefdbf0b4cb331668b80b3d9646c26ba58af427ef4418aaff692deeba07315fcfbbd4be95747e8b1bb663a068cafd2e66832aa4d7806f40a05fb4157f4083411838018a229ac7d37c559ea COUNT = 63 -K = aab57c6c113e8bf71d4d8a37b1e17881b7a783adaca8b983ad76c8460b8f3ef7 -P = 78477ac366f75f3267a7b9292b5232871e9302ea5cdde3e60ebf3082c6b36e653ce7eff938084d5668f569f720fa8e42df33cf9c64b5e09f1a1442c0d137bdc3f62a0cf6c6808d0540d3d6726f3bbdcf85b782230625144f1a6676995d499d5d7182e42b08 -C = 8b72ed110e4305e0994334c62c28dd342cfb10d6ceadb6449a4acbaf50e975bbe62c5879847cb80f96e4c54feb496887037f3458b0f72f42258feef41f7587554f92f47967184bc6aa6a6d9997d50ddbd6eb46738ae7b682c3f600176a051c22ea00287fd68087a5c51052ffa6d6bd7a +K = 179d44cfce7e7c2010c35b5633f404813f31252f9b7a5ce72b8aca9d6ada04fb +P = 1f1d6f5f4317b8f7919b05710bba87de08ce207fb9ca2282063f50e7a32c5af784c083eeb0dd1f441e4bc6aab6b1699b21487a1497dd833f6d0f906d62eafd5fd292b99c50024bb21d459963dae99f835b67dc10e032f66120dfa5ec99e9b8e1fc18d4217ba584ce8db881ee6196d8e224d50e13b01fa8a620c8268117de36fb3adeee40e340b6e2ecb09c3a20bece5318ba4e9a1441be867f44500e7d76561cc9508a0c71a8304f44309656bacdab90b9bc09582ec566e13b408c6247db313738a08765a4dd340acc3ee0f5660edd823e94496f41c71f9b8fed09f42c2207949d0f5742fe5320856d78a812996cdf70ddd3513f551d78870a6cbf3c41c96fc4de166bab74013d7bbce05beaf8fdc41ef54c634a0ae6b15f5fa067ac5fccf0458e2491e265ccc6c1dd7d8ff2dfe684584986e01517cb7469cda92df3165cceaf5dd4cb38cb88d655e42674f8421f54ec782a611ef5d4d49b03522154fa9e0af7d9b3e86bf612e6a185faade3a862eaebe29376d20807cf225e75c06b504d11645527ef9ef1cc60e8d8ede2a6e0c84f0552e2556c40d06f1e0f452c5920e93a397ed485c86e57a65e1f51a9b12d6b20e92007e4d28a74aa3cac33cff6d7f97f8a2dac75882dfae5e51661cf911f85fa2d06f71fb953f5fdc2c1917fe3ab8766c266618fc7a123e284127389f7bb2539d4486dac446351015de951d884a822d9a0 +C = 0cd23381eeb3ee5306836f86d824ef17e62d7c7f61b191241c3aea5fda7d8a0312222d79f6d13ba03a18c55659d4af0c470de0bfb412ee60720541ba3317312767e88fa56298b3ea8d13355fa7d583e869d499f1fde72c49781c7a4298ae8e655275c268dab62268ff319d79a946cd18dfd0f46688436108e26959c11f52c8fd6af45b7a93c4e274fd299bc16529c3511502db9eff647838b0fa7f90b50e0c4a2cf89e5a0217b167dd914a02bc9d3634a9ed256fd7c2c4443988e0d3893af4f5903648c506571c0865fa092cb6f02601334f01e0009b7871cb99dc0c99f8ab698f2344153a01d261a95389f943befe34bd8231be6fcc4c1fc545d03ca261ed8be01252b0c1a7c93b456b8111039ddb33bc381fce371708cb4d43d5ed939e748183a1b628785146d4a92fe93b23c10f2cefd978323bab116a12f2a2ef2aa323895f380ae92926a989a81d1967e1c52916a9d923f60698e5b40040f1b8b914b823fabab6424b02dff543608c817535355e4da3bc7ba7e0df3c2690508ed5bd34a2af7a726d8e2a52ea20d9846ad839aa4d14ac6e6a57f2942462e5926c61776d6fc1a675e15cb469b5034609ebb9da9e2ae72417daa4b4a6f373644ce7abc4b8fb87417b847359808aee094ca5f267aedd745b686ad63ca190676f72754bdaaee2f7c9f957705810cb5487ed8bf6d7f7321bda3bc98fa8974bdd57a042aa9b985288e06688d0ff040d COUNT = 64 -K = 0437804ad11efc7cccbc30d7c2ab0b8e012ea4401958c485479b95619527c7dc -P = 86767a890d2250e5deeb80ad57e798415b271efd3fb43d55112efebb0aedec75545532d366d6b8f8eb5cd8c00782e274a8d139b472dc73040c72822a26c61c086c1f3d715e2088ce9f7ab56eb520d71efe5d8c6db5718590e12e43ed81e3c18d16fd3aa1dc -C = dbf8727af17f8bd360d39d07085717889a17e2dee4ca22b873cc0ea116e7e47d6b4a98d524bc007b5ee93e91723c741d498597f4a915b1b36f31a6e9f8eb179cba990d7f23208fb94f6a7f46352c7de66bb619b03f8047a66d29205ab4da95161dd618d3725d1f5a1c73d6d98b505edc +K = c1ed7b568e3e6bd1133b022a10ba9cd310a32aec9505834657fd0015bd67e503 +P = fa373004d017ec5c542f2b120f330ca6d79512e187121b8c376740632ccdba166b34c4a87f94cbd81f133b596e602751d590695d6510777048fb2b73cdc0d37677aa243fbb553defe61f3c732b8db34ec434bd80770fdb9768609e3b29bee9b1ed866ac50927232db09b0727cf166dd5bb56bd97b019b78e9c937be05e53a2236fc2b7bf9350c1a5055fbecad73da7584a9711b92c7054dd1c71e2a227e3855810e8cd98ec6378c43b2cd104eb2a7a93ae08816bed721d9a9f119c265fbd7a79b531fe7e6724cc8ddd1ef4697ecc28647276c90c46da147054fb0a12d93fac36e9f9a15668b8d466c4784bac167fe4cd8d6ac60e21ebf030480148ab8cb04a7a00d513032c6c4465883e336ba80f7139aa2145d442cc645107ebb6821f089a7ff929c5f513a5cd931c54ec6afe80d5340da78d7845ba698c15abd064c94c8570c72065032e385abbe8f704cc9b87dec411ebf612cc0e0de61a4aaf4537458de906cc3d3a216ef304bb4c0289676f603fc986b0596811eb384165c0e1e7aff7ed0a97aea9cb608afcd3c5ed0bb0e25fb4114c1e0289fcdde99d0bc121346149986e653da6bab1d1b723f935192cdf92851a532e8a39f71bd25271da10860db33951726e765fd026085710e1f2ebf12fc76de333ee1059d6570b459c3998c9b0f5b3fbb858ef59691ede9fe7b8ae69919bd2911e0701a89745068d079cf638a945 +C = 8e038d5d0fd84a806137299ac86647ef3e578cd8a3aeb806783896f1e88a02b77aa69e8674044e5b0a711d8dcabcd6e93e992c40c75d6c15e0825e446bca091594078cd542251cf8760a93def2d66e42277f12963a0bc0c362fa3e7ccb7372e32daeebecb12180a00544efea92a12ee32a0a7243fc3a19bc034375416f8037d15b4788c985f4db1225e39c1e9788c43c7e5a258e7c4d6c06468eef8043532a9416b7ddbbac206dde9b5870d23f91cfa8668762da67c918d25460d9eeef4e046493157faf25a5e995d9c16a5860b4b0709d7ff4a4fa82cf53946e280c6a45b69f243b15b2f08c118365a1fae25ee33258de7651f707a13d91d8e121077435414d9770c68fa0c9a841d0a048e21e796f6797fadd07aeb3c5e3d73dc6562966e3a3b1f99f748a8edae86cd06404a82644b0eed84c90e01b2fb0669627dbf3f4eecc6d41b6da826b0d0cbd4527f90705815d6e93f62347f7a178c57abce95eeb6e6fc951f8cbfffffd3bf9f2b0a6fc370703ed5ebca0e486f5e98fdcf9976329b757f0790b632e91d98a504cf68b917eda2715b0d0f0234bdbd3b04bf21aa493ec837921d0bafeaef419eb60f8fbb9d77615130a8276d482611f69a40ec56741d4c371547c8993c941891f4ca6858256b51c384b5938d4bba08cf531a5085caeb22eda54d446d73967da15afe101fa42a34c3f4c5b7e9b0004c43de0a4ff82369afc5ead91fa5f03944c COUNT = 65 -K = 931eb43d32088dea7ee8b0b5d4422e730504a7c121adba1bef498280c39a2851 -P = 720720800d34f914be415379c39b15317503c0fb49460a411dc3c704d11569cc28caf812892b59e3cf500af688dd77ad4711c802792a551a4a294b80e6bc67cbcfb387e728baec790e45f280787d46f16327e1cffd4bdad58cce4f612f03c86ab3a8fbaf3f -C = 34fb9b720a974402eb68b84360db76b064ebf22fdbcaab0f56bf1e0ea1dfe7f2c2d78190fbdcb49c65c57df8e009971b05a3fcc2ee22381713b8d90b8767b24c9422aab10e4330709171f33791d9b3305f7911f52d6aa038ca2b6605d741a1c6019ef81c5cbf9c1ca367fcbff0b9ab4b +K = bd864aff7eb994d0926eeef8f1693f33eafdd967de68f051058edde43ce38598 +P = 9fe02c238a27b5aae95539a2cd63c79504ccb9dc98275a59fb764857d295f0210cfcaef0b5178de92e113732938d4cee8d15f21a3b0ba86afdaa169f16b429332614146d1a2ad962acddee67647ca84b34be58ce9a15a0548830b1c22e1fe31c32bd620eb96649af8e916d4fae611054b2fa142209da6d870515da9c9579a89d7189bd76233af18a5c90c8426f263e513d8ff241a308d2a1dc4f142c2e944fde44fbac582a11785340f84dbceaea46a5b9905f45f798ff4ee377319a52111aea8035959c5de5fe61fe0a5e0900123507f7c3e107acd70e35798467da4fcbd6d6c2de2fc3ddc3a2109e18ca888c9e571317fc8010e79f7254548afb6fa5a85d91f35b4e2c8bf8b051f1f365b0c23aa4e53a3ec5e9ca83eb2af6a8ddab2714a74cd604fee6930a0dc38cf390cdc15e8b459c5b2d988ce6dc52956c3f12b4640fd9e6692d7764b7c6d8be57c692a738dc8ac1a87a80ce08465e9dd27583e3ea60f862be0b36a032235093d42c93ab7da803864d24f0459152532e2fb7ccd4734be225ca441220a2018b481688464497875676ce911bda0fdc807804b608b493e09fca8f42bed7ac53a07a57d15031f06515373940e86e0311b1c55006d9ee91f1863a7c30e6cff552df97fb778e6b4dbeca09d8f79353c7400aabeddb12e9d4236d978666a2b23fee9ca11580bfa0f158621801e50f9e4b2bd3b36d82aa69337260 +C = 7547dacb202a480497e4c0760ee9addbd1441adf507f56ce5a120b74a0e7c4e03c039ded40ca7b840d86d712c14c652a2f1ec39acc91b37122f50a5c6f089916b876c1462468d8a6ce4d3d12d400199a75143b611fd6987f026c97aa741772a9ec92872cf968370ac965e79bab718266aa96fd9a41780f4f3dc70c27080f78e048bcb50e6a7fc1cc4616f8b5e964e587ccc315649a048bbd85f90902b455920ef55497031d364be8a7a409ce0df55a7f075ed48c3c174bd21f13a3ae7f3a912815e2d04b2650b75e89e5a4211012d4689e40f5f3e3975fd1c8211384f987e725f549e25c0271d9411ba97e4d9fac059457e38b60221401da727322a840bb85b6979c6526ce6043bd1b1e0f5f46b086c7c570bb9bde5e7fc8d4e0f3f63e7370f9edc36567146f6476cdc276fc36e4adbc2037b74a4df9fc265a881f508fb7c8153aa41914d6089a324133594c2dbe01b68144827447a252616225d2991f5c8c8b70ad5a08d139747728053d8ef660f08af557b9f1517e167727418a21889a152dc2f4bef3d6c526d62887e9bc6251f9d801b1a39ee8a5b8f3938ec5032f50241ae5087e078de65b8376b3322bb95b2f2c7e4c6b213eaece0554b4999540fd38c957178d510cd548f1700a9e03cbc444ba45537644e8149c3d3547002b72dac04b5fc2eb8b76c3623ad966854d45f3d1d94aec85b91aa58dd2827a5469a7dfc0a727827e45425bb18c COUNT = 66 -K = 00f30eeefce416ad7a988464260035ab1b55f110c4f3dc21987534bde5dcedeb -P = 65d1edf816a271c25fee7825435333b368d6776735ec34d0d347dc171918df7062c3b522c4ad76dd4c195b38b729a737caa17ce2568268e514da66e60d54f1519d769b16a17e197870f898ec171acf527bb3bc6048c4e591717757cbe135fc1b1adb35124d -C = 091c54d5d9fd5d776715c0498891efc263d11e227052b49757299ded201ddcc299ac44e1414e241978134155d2285f0063cfbaaab27a5935c03687f5b777d376a4725ca4b7f31a397a100d482bdddba7d4533fd391f3de2c7879c449b3afbdf71503de04757a1b696ddc394d1d5f31fe +K = 36d90e4e74c969aa8a35ba0b3412ca5c31b8dba6feae3cf5925cb8cc66074b67 +P = 3c65e4378fd7d9ca3097022333fd906544c4e8980edea2426831f5a6b53dfa9dbdf74d6cb1d067caf624308da181b533c8bd892d8e9c1efa35e2f0b9c9db39ed8af26468ca3786cd372c464ddd4dfea5e119b79180b2c74a6d6936eefeed98e1d190bf59f75383a5269310058eea99202e6a1be870743d5d98fc4d868924e53321959fed6234d0ada0095778eb16941144bd03579889988194c0ea2f98b9063387b94f174f422abefcf1672d39d0b4a54ceab0b398bb690cfe8208248483dd59708615c28e66100492d120ec7f70b7225b5b6b89ee014ab0082a65a4088b2b45c9f175ec127e960ae9b86d2145d6b5eec2bfee18b9f815c8d5ca6358655719615726faef21418bdb011e9f3e95f2c4bae6d59fd83fa2ace5e2b5a2ec99f545d694be29aa0b46056744fe32ac38ae8cb8d848d3f35d7a407b1b5cbfa3e617a3ed5ac5b30840022c872b0691f28e1588d63cfe236477a3db3d5c3737a27fb2e9722702bd2f8674f9747ab1d0c93241daf91977aca430f93d27588f8ff2d4a2a5d719523972e26ddab26b3faa8d3b6aaba99c9a306ed4196ff2b2c97cacc7b312e492e8132edb1de0d1dceeefa53cec9a297fe3f2f78fe315fc63650d4999892af59022ff4d183f284fbbd73e15481e132c9610022755044095cdba6ef3128e912cd876f5e9ce649d31f1e209bb451f86f8484208cf1a9f51f0cd880ad3fa563ab9 +C = 69000954b2be0f5231007254ee6bf6d637131b9885d7a28cd2993af9b8b009623a704a259ea964b42ac0ccdf67877d6b60fa27ba15d0fdca8e17e2abb3e63bba03f2e1174a383f830189e26051bcb9bc4eb6380c5d2fae235cf1c188bc9b969e1400b87cbdc1aa0294636c97cca2e185658ecd7718fd418248d209940fb5608ef0e377c4a3fa1d01e465c9d4e95408f4ad9ae38dd9ba65eb6a177c7731c04437511d3e8cd893573c72882d44ff0b3fd69a056d646db0411486a7f4c409e7438728b8ccf553b3e1625b7fecafeaf6abbb2c802f3ca6f5993fe8c0511be2652702c2577ae3b72d9e849ced35ef70b9a3f6a85916f035390b1250532a7a859bca9bbb8ac8ebaf270daa011ce2241c593997185e9282ef05ca88704efa82c097757de8f2dd36845de84d28f08f90cb4775df66f3eac1389b4f86c3826b8296316e484722427619458d7f21dc3844c3cddb195677d1b0efc45a4e05b850e0a3758c1dd5525a166670254e60b0d39b42fd4e68ea87b2a6a36039abc5f2c3b4ef2936a6671e8d76b510861d497e31fe36952a2bd72807cbda889074e3292b0a4bb00d242fd4d9d1d825846a3f998adc3734c60741f63180283ef1d9fa705741ae26a6f4dde3134deb59d1ea235034a78c0afcf3db6f5afef23884e738e66a380626abdfa50f61a6f6506937b0a9fe0828ecd7dc334ed614199ea08f54bd80d53dd12c88e7ad5d0b5467ef70 COUNT = 67 -K = 757ce23a7931b14bff02f11404d72a1d23d98b6f7511896d7f3499961417fd0c -P = 7ea396c644613a238e17d6ee14fe2bec97f4b0a7163f7b36ef3f01042d1a238b52ac92d7b955b1533ece61a0c464528800d65f7ce78153607a05a8b3ac117dbd3aea62dce71df14b68de86e0bba6d63e545993f4e2e024ed34f4c3dba68dff06275956dda0 -C = ba2bfdfcf2c7bd4d3afd9cafc141a899b5b82e6f67d40bf3a12e5022752a63f3a2cf3abb5868ad99a700b23e120b94f19e642c1aeadf22e3d3a543ecaa7136d1502b8dc0d03a34af692f8516128aa4ed5457768e235e262518db91e4b9d80321b1fd9938d9c8437fdc559054bf6af87c +K = a0fdcb5587114666d8111e6f40117837b600197143a4d480a7bc2e2f5020915c +P = d8ba1e077cdab4c5dd977817273716250df1bfb7da550c68309b3cd555e143a839dd4e6a3fb6a212e96f42e198736d51626db01dcb149d65152a2ef1ece0fb7706d78b39494d448250e6ec64a57c87b9696cbb6e4d6cf491f9cb51b342c7d936d5e1a86d828f05ce686d172b8bf1ef5c3af1738588846b03537ea5116a24fea259f5d3e0da11d633d71ec4dc06d8443dd82ce510c1041936fc186a607872f664f8e2d3e5bf923191be3b6141b7807dcd37c66b4079ac2a99a63b30632bb3d956de08d4a1b11bb651415f7e55f0d8626c1b260fc14d6474a9676032e94b8f5217ad86fac381e0dac26c330c4be2433ccbfde40da7935767e5a6f54c5d08b4d19273bf2c2e436460ac871a03ce6aed9b8a811907f2a196e99b3e21420cfc3b093dff993883a0d1d969d34b823f346dc1fce67f3a49dd9ea4b5710e3f889db139712a3f91f9746ba5db955de834671188c330103d0608a3f7bb72dc4d9764be331ca272deeb0e038b095c2cfaa1edc6bee936188ace44bd70e2fa096053cb2f6fe3cdac22b1c44c6601cff12ff330cb096b208c83048b9bb9656722252a79b1fa329a7c29f2ce1fbb25f71b6b38e0c694c9e2fa9bef982c6d01491fb299ed2418370211a968753244cbc3f2aa88b754b046506873c6b222c62db225b7ca7fceed1d6c0af06959f5ef77d153eed05b76fff5ef622c64c50d685b64315f9345241684 +C = acdea5947702c4f8824da89f6c6ef4e4dfe62f0386be1198d289a5875cd1927ead6a06b991674edfe4c02e65928444410719ef13ff5030ab5b3c03c08d19750606d6badeb3d7f378c06987c3dc639eac34a44d0cb1fefc42dd84cd295823eb453c4080591fd4338d349ccbac7bd06c81622b990dbe5407bc6593a3a69ef76645d1f3c51aec23b71b06a1387d4cdb1a0030063bfd312f47e2e70018dcb289234f682cce1204a5540a420976a6dbb2987c213615c76f317e39a7e2fe6cfad80fc4e524c96209a3f5fa103ee05890ea5f74bf75ebd0fe305d40a3de05cda0ea652a5e9d8257200bc7e870cd32743791b4c34208fc73bb7d2253cfa90dbce36865a761bc0c6c519b0bd689dcd358d159427a7618ea924d3547c2be5e9383f3a9ac7bd43ca8af70ad27fe1d0ff898b7f740069b5921a7309ef21a5e53e90d0c48ffc4ca052d0423d54627a2c98f90ef48e78bedcbb1a38749c62906f90f7080cd80af9617124cb80e85593a19130d05c9ac32917236a84604019e42b9c15ff22aeed0490a364b262754f88e70314c54cf8d4ddfdd9f076055abc9c449495f796eacebb5d519389ed39089121667101dd093564470e68be9cd4e0bc1c3bdc8f28e9a0e44298b5d84e1599bb644fc2c8741820a105b1a5765044909ac8794dfcd609d865c63ed3dc42b2d50a6ef2565ccc04c45f98b6e1944fe953c90ced8f6bfa090c9dab799f644d53329 COUNT = 68 -K = 6d30b884f4b803e0022536621624ff6e0d5e0a603c4a3fd8b53a507874951cbb -P = 312f1d4cff3329f73e96c020c6a27414ac78c90ce4b00475adbe4b8fd6a0eb6604a2f789996f6b4b226ec712c49c2705ffef984b977787b8c2f1bca9617a8bb460837d32e3f0f8613b37b77294bd1df9305c13599caa0e0fd89db9a8f8c4792e7800cc95fd -C = 6b97a50d616b24be3b0076a83c2aecfb3571933080bc72c5cd7ce5ffb9334365a32a56da9c728c078aef170721c24bbc5768b8758a806b54a806e5a42b5eb5b193a92b72f94d5141425d5a005a51db3c40cb9daadf15cc837961a07fc44a9e539b073bb1d37993c39da7b844bf69613f +K = 756cc9a3107e694bcb96ead8dd32e0a9d87546a7b670e034916bb1049e898811 +P = 02dd28426d73b398fe1c1c3dccee974d32009b38fcaca3414862a0c2f4bf77fb3e632f420450d9529114cb85be01d91c24a09118a59d56e7e9bd1c2deec2349b2ec59ecd9935781bbd0230ce79ba0ccffd8410331cae3cc246a1392362ff2cf83c6d23395d412c1edf930304c35efa3060ad21520457db0acde6ba8c0cc5d680415ce31c30de229f6a038a5536e48b93fdc40b5ab6cecf52e55ea51c80637db8d470c8aee113fcd4f0954b39c094caed2669eb641548d6f6cd61dd6862874c1c58421e6be8fa22c82f794f1836b6b7c3573c05e5c58909ddc86394346f0de463ea5b23cc6af8e3e9755718a56b824bb4519820bf14410bc7aca42216e51a18c67462f48d60579d0ed48894168e9659944b0f29d126acd4d3493f31534c5a4ac96d09c4b4eb7da2b73288efbe948c1cb436d3d65e49bd3e962fa4fc91dcbbba048a50e27cfb98568116d4fea7a83b90906053869edd43ce345f7a1652915f86144a52dd348e55553a1d6441baba34fb21d817e8ac63222ac1de68332582cef1e75c938251c19457400b6cb443c9d04311ecbcc18c5c9c692744eebd616cab95d6e25f953bedb812f58265a56f26ad639fd6552d4a00c216bc739cd106e0ae8df106f03f7a26ef9c30caadb3fa20b361c4d61f2dc3ef3ccb3a172380146c02396c1e2e8aa7ab7143bcb1e645e56bf0cf6c04d437ab8b55e26600271e1bda875a07 +C = 2075bc89cbef5c0ef67b3fc99e0ac88a8affe6b66aaebece48ab8ffbe52debca6c2ab9bbc0d6752a07ad03c181e4ba726e6fb8b84a13154ea08f4427d2ec71c8e3882d1b33ccea3629d9b4449310c2fd01f19f2e48acc3fe5f34fa1e314705f22d47bdb1ba0bf6fbf1a76617220ab0aded0080a9a413a89ed498d0ea0b2e88ba23d18994463cf5123cb54202eba8fdb9132ee236a0d19d05055f11cf48d4f874efd6a9c489dcf6dacfb1e3ed42b9d3436eced6a534fb10d7da0d060db78484e63ae722da4797c51e6521bc8c6f2276086fe4f6f9bbe53891adb24c72cc17d8cfbc76c9761b1a19e9fe2d78887464df69d4af6201ba8d12113808cfb04e9fe1c714bea3474897d575b2058ff297194f7344ee93ae492e6af6178607246619171a73b24ac7d450b56c826890e02d6679638f586aee637c44c282beefc263e1176e4ffcc2d87268eadf8063be69639e9b9fadcb758daca69b488c2b76005512191c4608aaef2b825c5ad5a73b9a6d20902ae9d45ccd2a3f0239c94eb5d456ee546a1ef338d458a1611ada1147f497d1170e5a2030a088858f1378856719e469396323434060a2f416494efe2df0f57570b3ee0bd1f4609954489ce8c1dd580cc9f12880d88ac06f27913a6097ee884b6dc4f2847be690ed1a2e30eaecfb114bff839ebb808fedc71a87b6e18d601168c34a9ec3b31f3028b5376d53ce8ee844c3b36512ef27502d5328 COUNT = 69 -K = 226660be119629bdf8f1c8d3c17e2a7e2f0b677f2b9a5014a7c8e80dbc358dd7 -P = ea2e7030dec5626616c5b00d784d91f8a59f7d609da7b2bdfe7b176269a14a895cc0a5ca6e5cbe468b96006ec0a928a861e3ab4021aae6af01190b8a154518d75de32115a348033d614977fbd375f1ab81f90bb0ca01ebc1cf6bc43ad397bf8df20137df51 -C = efee2416ea0a75bab1349b8e5f21999068cc70cb7411f38da9bfaafbf3abe6009447c1a1ccf68794f6271833b9e282ca4775f8923ba7cfb9e47ba43adb0f81f8a83f3f563c67bec32748b75680d3a1b00c70aa57e554ad5ab636753168645c6fae2c2fd999750e7ab7141b80d50c5188 +K = 5a4d50c7904148b1d5e64c54548c28275430a1967bc71c61744adfa110f874c2 +P = edf12b2faa93f01fc066398cc55a69ca028944efe87382acf3924f731622a62f364648619239f06f889d778c8853f65ce8413d76997fba9bc7d95b1ea555bf96eb3ef6b773dd7b44e1d7cd7a99add2f23d9bf23d726964876921ac080ec54114cc84d4995a33034d25e2b50903053c5c10c813d615da6560d9a8f5fdefebf46cef3bcdba431829c3acb358bc8c664802b6cb81ad5248c1c816ae385f0390131ad1e219b2f8fe1961c1a30b0a293cdc616d7eda1d493e519c697dee86fbd9c236db1abf360a9c739f637d488b836abbe8083441f6ab4445ef9aa95bbc45dcdee0e02dc85699841c6814c34a0528f606d1951b4d0e4ec5ed34505e111638b6124cd5f2e26418b6d0763c76cdf52e2aa4bfe2e79588a72232a41861f40ec4e54277bb2d4e9d65e3e569357ad928bc51e18ed5ee6039f38aae3dd3cd0b0ba4d84962a1f8dd8af216c25299a85209a7ae87f11623bd985cb1bb2d3f108325709d7a75f6e10fc03d540fa6303fe2982c45753b23f816f4678317db527b983264855a5892895eaca0eca18ee192778181e577617f02bb1b33fcc201139eb368189730adba2702b5c5a9f98f915bf3c1afc6d749dca4bed5510f823703b7eace2178c0ad1d95077c1359f0f9c1049764b9c6e15f0115f1cc77f1765b6a0d4d77dd8eb1b6693143a55153cef1963ab143146ea3a2e29673f6d4b2b610af50aa9129deea17 +C = 98d9b5b8af9d1a33935580917196901312c87a631944027d08cbb9e4abb740bbd76a87b96c4e18d23e5f7816d92cb8de1b45f5db9e013d342d1746b4c7c0e125fe7c4b734670427f606e8172b0f43627e0a044387f3b976e15f527dbcc99f3a2dc454e9af10d16aaae161a4ac6ea8cab4e91d3fdfbfd8cdfb2beb36fd36c3cb076fdf39f45592cf3d2546b0d7e00a2775bbc0a005597c4c5947e34af9bddd86b5c34921b98f54b3c37789975fbf416096616dcab612f6ec20755314c190014f7eb4406c5e2d4b433a9ca5314eeab5b7b1d63136620ec2ca3b20bba4a0df10651ceaced6e83027cb0e8a13c00a24ed11fd811b1d080242627e2afdc13ff97b05b89a0e9543ec8e118e45ebf9fae5f1c9f31858c1de5fc849808d78f05d9a0d38b467c5e38e29a1405b20675969f57bef092e48f0256a5f634e47212bd6e56ac4c3356ec5f355647b3d91db6536f51a4ef35392bbbda9e1f57076f4bfd0232a61ca18020dc5955892423650dc9fe17035da8c822572b81e18cbcdb07db400aadda2b043f4b57d422d9c1cb8ab3a2d10968b0ee7d3f6b3e947f2d45222d2751ea032b9585eef28bd52ea17239ca19aa7b185ab1a9db05c5285016c345802de19f1b204ae985f4c478edb7b53a0dfb882451387cf09c196183e88089f412e454e96bff44f3ca1d262b4133cd4af8a7d519b90e7d18907a8cd73dbbe9fcb9f31d69f8d467be73deb68a4b COUNT = 70 -K = 8743bc24c903bd194d114e35f29059dbf0f06a03b81d0ebeb694f113443ab865 -P = 2edc96aa420bd38a29c863df4acbf21452e7b83a9b37b0a84556590afb6679c5e9bc4150cd5c7efaf0b928e2323dd3e7d64c12ccb6a76f173b2b378de10f1224fa884b7b74c0fd10e1d6b90dc1954248622c82606894e30684552986b78d32520273f4d555 -C = 9ad08b780425466a5b46cb52556efb4f01f65153903401e34c25e194dff5ea8cf382f3c46295f7f0ceaf28bc64f1e5e712bc471e3a6c1ca56915edbdba4d92ff175663857e92d0c131190c02fc928724407e924f078731ef6cfb05fbe1a7c05d8f235237eeb7c9e6c82187985fcea964 +K = d3f125403a28ed595ab50081ed726230471a5cd3f46433166723da949b525007 +P = 8c0a9707d0a7d943bdc93f4379d41243c7f06f90b35bc6d772282715f7fa021cc7ef3175eca6591722f5b0331a046afd7323ea5b7a465594a26d4d867fd9b5943eb24bf4db92e6ec4d27f5e7591e8990206190c2812399af93a23162e483c3e34809a36dbe1193ebe5e6d872f7a3c3b53112097500407f260600e7767445cf08037005e23ec3b6eca452ff3743b96416423840dc281a240516d8f9a6e671a09a70c053977863ea23834e58b3dd85d2f0e3ae0606cfb9514ee3f2166a29a80d7d266b8b00675fad5a684ffba24fbece768b8d9845713d770cd9c53894e4d954c5fa8d2f196e610836967352ae2dc11d0e82ec1ca1c53d770f66861813f0028777c4b3ffc5c8f61d1f8cc7573bb6515665152013fdd0d27a89507fb2b854abf7e1af27c51397b1412f18ca3ade6f9b7aadb096da6dfecc95ded4028a3ddb32f621cfb1e181ec9b4e3a7347bb0c329c7a0caa6d1e94b26bf1eeff469348c788a27af0ada8517f413501ad32768c1af934c646f6e04c63717d48e215b3cebb9b9de61e9f365bed297c35d1c75209f4b7c5567186817edd7d6dd50871add9195a9569672edafbe1a4aad63df30f6ca40ad8e00164d5ea11a9dae212090f219b2715bdca616205136c2d394ea4f37ad22805bd6fa16d7ba492ee64f7049781a0b3f1506d9e5db0d00262eabcddb07d84c43bafeb565d721a47cfdb2da0c30c99f7901a +C = 004427401f0313ea2d19b797e1dbd133e188a7d828787a1a203e8dca8f2443930b9c0b0befeb4e6fcf070c2f88073d3d4804302742b877fe0e4b6d1d12393139002e91b2d241ff63bc565514188a9318a53fd1333c48be9df7a7fdde98ac748bc7f4d5d56c0fc826ff37c79e88a0852d69f3434555f8ec03cebcbcf3d8db0ba11fa1a2c94f0a4d087008df6c3cc132af7ad30197f02ba731060de8de53c9b160cd5a929a60df57a454ebb602db4c0d37c1eff0662aeb335ce41b1802fd849fe0bc03c1049fcd881e9c0a4d8a3f8806a41eaabdfe4dfcba5e00775f66c5329c670b2ff5109d77a4f0611a890c317e54529f9cf5b608d8258596899c14e54e773c8d166ab1bbe2f9db1a46c0168541fc332a94ac8e1031fd39583c47f6d6606d8d57591576c5a751f0e9b0017ac4290d2849a577856804e572a2e91c78084fa47c3497e2c8c5a2b3d28b32c93cad21b01761902c2f4344d56b3b40769dd117771410b09a53ffc8a3fb274b6f8d7233c8cfab3497476751313a45a534de90e5971f83c85c05cbb66b6595985b93f58785cdbfd3426f5d7700c058162a62bf08bad75fe9d4422b2e36265b19b7e8f2df3fc3a797eedd503c1e007b8b969e4b1f0cb60544fe4f90d16e2c520d51a45f80a0cb50730b650fc14ccff9e616e5f40aa3d9a7424f2d4a8498206e4a6f1973d1eed27527d7d0f44a19aa2e1df54d403b8986cae0df32d5704f31 COUNT = 71 -K = 5fc01d169166aeb8d25cf078bd224546e83d8f43bdaf18629fa586527e270bda -P = bf666a1071803a870435ab5994cdc69aaabcd16113be32beea3367a270b6bf4f538afe0f823d1326fbb17c398118dc92b69b27be809a1bc879191fc59a09b4d9d4b4c809aa045391ed82398b20e9a842d4986f87a50874ccd460bbc6f32a52b72894d876c7 -C = 6ae30f98370596eab4a0a3f9fc8a69bec6db270126a2ad5c3770f30efc21ff170d01ad0bfca24e64bc64d1d05bb0424fd5fe257b96d9747fcd711f3eb39e557bb4459809ab23d12fc3912516c66b86a4a0b9868da00ecc0a8725e82f07f47afa7bcd7f62676c3ee74649e236e5d9e0f3 +K = 66e1c1ca5047075bdf4e8651451792886eda02239239eae22033779d5adcedac +P = 65071951b5f17c6cb8c1025c239db4c0bfa07f64b5d1a587a97a94705148112dd10ecc732ce62143721ddbf3f06380b7c2c37432ed3698e0e20940046ee31ffef88514b4bb1a15e0c94b87c23aea3028f1930a1e0ab97eeafa2866af9a3c630b2f572ebea79eb93e5aca0cd972216c62e057b1ec7e705146373f7337d815c6ac24d7d7ce7ace9618bd48627852bf8eea1281c0ddddd15697554fa688364089e7f265c55c6c923bd97fede49429900e2ca93e5e90f97455bddc0377b9a8148ec43a3bb91789365b121b80466b16c83a8fff4ad69cca152f33c0ba72c1664e6d6c21ad98c2edf325ac3663b5b9b4c14718b45d385db105547d222f61b2358ebdf412f5685cf25e6019ce3c9668b4bb7645f8ea1a74b6c9606fbc5701179b4db110e4378435e30c5baf7b48883f13efe8b0043e17034cd4a087d2d222cb855a1556ca653988b21fd160158ed39e8c0b04edefb279ab8140559da1b0a391b8447ca6e8ba21be42efad87f06f649b040822295628f239e32ce3adb097011b3b717ff1fc51db6e169fd2e95bacff650a6ffe472175c5e66997ba498ae8ff91d23419d2247b7703706e6e1043ac4b11dde99ad15c4f57e7ddc141f05a2d1d520294142d25f2cf3350429fa850a94becdff362ff30b00ba15bbea696f95f4ab97b8b642ea6a386a1b86c178870ed9380b70d0320a30b138c9ae0e05354a8052fa9cbe78a +C = 645a93fa32cd064434a24857014b8feaf71932aabbf284ada54821e4669cd0f87486f7838181acf6d5fc0531de1559114ecf418ac6ca8ac4d58c3a801e660b2593be60a5263d7d1761f8ab7443f9a2c736fe0dd67f5ccbb7c86f9e49514366405a320e68e3efe06f8f3a7971bcf03040a20167ce9b7a4be6ea9d8cb716a589446fb3a8d66881167faafd66c8f705685e64b924d169bdb88aae2f847232d8aab75ed12af8b4e009e0cb51fc1fe436119b72c8e8e052d157cb63299bee2012d15fba1a98f53afa2307983584836e45099238d1cb6fca2dd9afcf9e3fdb9c95ae96d4b8b060f68916eae5f2e2b173ba5dd28a9261f2b8004e6099e4706149b2c0979eb57a86b9e95e223a1e49c008106fd98adff6aa52cd767ffab988b1fced8cf55726ff3031b925928c966da6b72f6072e082c8c1d27028647b25aa483b36f08e8affbf07f46d13d978ef22ab51f7ba443c5143c731e645d1f8c830c1b2980cbb87c97eacfeeb98d9990f5fdc33e99a0bb8c6be4591afae5c80bd326e1bdabc61f13b2850659707def3e4e7e71b18af1bd7a590a069bb101d5c515cb96737377979e483eae63573fc00d67934ad80c4c1e785b8fae214464f3cbbdaa0291a1fb1507647afb3fffd704dcd8c81fcbef7a326b043325fcf20bc9dc2bc79dd93a57a3949a71c09587289e0af907ca59debceb2c04e7cdd2ce54dabcecddc7aae2b52d6fa263d8fccfaea COUNT = 72 -K = 58b84f35eafb4c2b8280f0c1bd0e21d4db7474d0b435e949cb2019f24062eb66 -P = 839d45280d59316016ffc387121a9b6d3de366898c4f4c966f6011be02a69a71d00289ff2785a919c8201dc859719d596a56c08ad783956c55e2ec27f2135109bf06f91fbf335dfd38f8694e2505c9eb65f3f8bc5627b996ad66d1c739c25c0c4efc331c1f -C = 9c968941f4c77198e41fe9e2ed695f818710eb51e6f694d364a7cef086a24c98d60e52e54915b407925fb2623018eda12f99b29b116dbf46fbc148a68d7918515c8ce94b020650d9dffce2c12ec5efe6255f87945ae4c1f4b89ca301f04799911c55f53a4e543ddfc0ccc0b6a143dde2 +K = 166e9a76806bb5042206165ee7fbd02e80f0a20e08fa05f4deab85e917209034 +P = e3c07c3d21beeea85225c83e9856f1441e0536b17783d4e9c484b67244288c90b18db72873d3c6d32efab9d40030667910fad3cf1197abcd8852847e065f82f01f26e4b843e1f697e3d37f4b1c7d1f5a7e8e91beaf19fec03d0425f09830e5c7e18fa1f4fc7695700e83d2cb39b38241ba245ffd5b6342bb14960a0bbf6a77cdf32019570daf2bf889722dd68f0a2d8601caf685614972d5533e968ff7ffad38741e0808242315f236758519ffa2cd2d23c711588a57de3352d7d29e82c2d8f4c2cf86bd6913895eacbd7c272d2514264f2e340c0feba6eedb458b5e4ae8356659e911c17e06afe0eecb5603ae4a1741346f00185ebdeac3678176febfe636464c551dec2f750969596fae913480691a0631f4228299a331aff52565736646dfaacc0d513171e770001df08b679b5267fd4a3fd41ce1e654bd3645bbb70fb6913d6fac3ca6ef83ddaa57089936ca93da4ab11e95d244ef480de4eff882c1581d091f112d2fb75aabb96630188c699f87db51aed71aa7e8c9819689382d2389fbda912c03d22385d07f8539cdc5c3cdc8ecd30a4b3be6fdbb8ac90265c1eda59190e88129f00bb9c3de76f017aed8ede5878bee82fad4fcf8adf6961e38ae7ea9756b5de14738de98533a1dd245016eb09fafedd79bab5eb6bf5e61b1c15aa8f9f57ac9d70c94213f0f03545e45072be2ab56a596ce17b82b64187f66de1f2ae2 +C = 33932fbf44dbb3ea45e20617cf437fba9986c4d20c3fbcb58e66afa469808a7a2ff7c7c947bee930402be0a8c64ef5a16a637ab49d59d02eb3de475d782b1e1b7947cdff75bdcdb24a639e79fec7b6c3f448fe19f905afc476d20817ad49b5d468389fee30bd354fe8856797982ba888739ac70f13681fbbd4a6fa36cadf990b671a70eb4381b6efee3d9024cfd781671d3dd81b769d6edc94d4cd07f9f744bc651ee797e2f77f9ee9f761b44964bb6fceae5ee918477aece44cc5c6507e4c2ce99a5edf5c0e832d5b7dcd2d84927c5e82cf8c406d1a9be597d2f1077d702c633c4e4ced77af512f010bfe7ffd65c42e7ef43333365dd1ae78f01670a4479946754cdec096bcf8a35688fc1e308f103206e131852bf1a0fb82fca9f019d606378c232dd962c1f0a9f3df358b2e450d18d4ef4ee26b60c9a7a1e5dbdde58a91d13eb56adea7512d6f1ec988f3d62664ce684ee655d5f0808808199fc04145499fb010e4fde98b4a1b4908d83c82f31af68b7f2d8c5f19e33dea904d92541e2939b7a6fb0d7ed3d4d0e2194897cfaeabf5a6d1d2fdd30ce558468f341e99eaf37a333dd908bf945035bfd049a597d7c47f65ea478c4b8421378c85042322b86067ca10752ebf64f218b80547edab2ecc50a2403527588ca4078a955e73ba5c7cfc9b62ca486d55b89e89ecb5f48e90964c44890446fe0736eb3eb4e5c3c90bf0353bc9680dd5cf4919 COUNT = 73 -K = 6d6738599b9ccb7055729c4c5908a1c4fdac0b0c502f447d118729c0df198198 -P = dcc732ec3d091f554ffc754a9201157ea29f059c64780773c2f87c02be83f8810922a6f8c37c1876f3bbd78e9e54eeae369d4eadc1147cd3c009915d819bc6dae774eed342b06ddac60435382d54e458262b82da8cf59c5788ff00148863c7bca0e5a35e2c -C = fcd3b80fb33e52c6799128e39a286a9ca9c9bed421d0798085905ffd67049f0697a597b9d55786677313c6d64956425aa107cf57f4a042b56aa5231aff2adc929e504a1f13a7a97acb45c82ba17030a1cced7773dd3c5fa7018cdf7c4fe58e2177a9e76af931be924bf8b346d399ab90 +K = 258dbb2daceee2d9f61d93763743f774f23e53aa818fd2cccdd9435df5294361 +P = d47a3bad9daf40e5110478d089bf85e7ad64cac3eb7541024841e2c63d6758ae6076676ff96916eae82f7fd427e62047b812be9779272c548490d88b45b253f239753c0e38dbe239f8ee877c57a10e4c077d88425eeca4cdaeb05267820d64756c2895599da0547f987cf4d4aa66b90da8d8595d7b660157e228fc6113b14bd5f9440bb11ead77c91bd092edb384a7c17098c2e4279c5e63791978bdacbd4b9b1bbf807664b20cfd96ba0ae2488f57674840a1f42917845eab36a0c16e1f6ce101cddc0f96e38f776c736ca76d542db34bf82c68b652179622497f1b957e0c522d04010bd6e0b4f0992dd083f24914d6a5e8cb52e26b34608ecc6a5a94f6bc7cffce9768d402dcb6ff1b42c33b00923aa16a8f9dd1eb4d7141cd9944e56a8867962f30a4767d1dfbf2d25b868c4577cdcf3ba0f79a84fbbb21ebc65632032d8c08a023b0f63516f7564ea64d217157ccc87b7fbae668b76c8f0adc018500aea78bed79680d77000bf379108674db0e5d20e71f7423e8c5d2f482e4518a37bb82d3ae16662fc7b57d3c6eb44dd7629400a5ae97f1c8fb193af3e721432cfcadbafd1dd1e4f0552672ebfb8aebc46a4549c425b686209fafcbb84bf3ea957d4fbc5290014f27334cc5dc097d89e34e623519a42e21c97c78f60a8277b5a252ba709d3a9ca8301c13c1fa730877891df79b8de6ba43bf9cd289cf8677cee69ef4cf +C = bc4f1d6c6b6b4a9f87715e3e8631f9524f0a690e6061679e1edd0a09e9a03ac62f68ef584a92413a7de7e9155f7366ff45a8ddb688189aa123b79be20b8fbe98c71773372646835b6c46eba31582ba0efc6764a2a7809eb7109fc2c1989f56ee117bf7c29f3902ed08086af85af15aae093ddcb58705ff275124a1704859b2344543148ca7d6ced21f69ac4b68652a19d128118653231937759b00c77e0c828ef1399bc82c1d55401ea168db1be4db9832a67f842915f9ae9b63cafbe6bf70945ac172817272bccd45c2fce58c3783fbb03781c9e9162d9715db1edc7760e43c68ffb08db9437c495d08c98f8a10606400e3bd653a40a1a6ab503fe7da3f2117376e22952f19026626334959a1d968089d33383b179eb2b6fe0818a403476300a48e8773d0f35bb47ec661a4810714ad0a0ecd680311b911be57b8e0556e49f37d7671a8c775905f642f32aeccef6a6b1879bc7413964c94a3c49973a96eb3c3e9a7455a621fb4666690bf80584a1d62021ce34a39b5496b221fa8fe175788a5a5f17da98f43e4ab060677db76470dda7c39b7e4487540a1b92c46684dcaa9c15d625ee9f184a60c8bb348655c76d6d35657cb2c5ec4080e98ef0f6d54d04882bf1be9ea321d52cc746d3e58129b6c27f5bdcc68f0f15cbf2da953a381f70b9e0f97681005daae17a1cc9b3bc8e13cd6e845c2aa9c73e703e11defd52d9cfd404e06409f3eda0287 COUNT = 74 -K = e132744377ab80ef1f0e097449b40176a9adb943d18ee0d1fd809e2ad4d2b3ff -P = 3d04e1fc2309c04dbc15a5ddf8b334fbcfd175b947e8374680bcd0adf0b2f3b4215c4c78ef656958e61b8cecbc2fc25e7a0d4fd877823d3dacdddf435a08173e40231f133e3d52fb6464a344a23be12c3154e5b8ce698eb129fc83deee9b7dadc08168acfc -C = 418ef88be23b749db6c03ba0052bc6211d223a37e53cee26dfd0c427914b335ef506d95be0ec3c5f0fee3e5b36e184dcb5a572ab5dc9bea77f3be1d592927ab7d823e70c3e6296103d5d4cd23a2bd6e86ee8cc9c314fd019689c8cbbe73301c9508f2bec38d209701be51ca907cd519e +K = 9a34f5029c155149b5bbae15bdf7662e8584cc78a8bf14e9d22ed31f7c8aaa2b +P = 84f2001f1a36a9055ee710f5575bece503ea579f6f1cd104746892c353e7d9aa8694db018359a56b14ebe805ec0f7d41a71b1f148a9a601b428de8a2d667ca1ea3f0dde04bcfbe6348498fbf033c52841cf222db5c2d96bfe2b7e0edae56ba126d5c95bfdca2a2c7813eaef8c37754c09bce24e6556e09c4984e0636d540c72892e24b037c5bd82ce2d8b4e045984053da079fbc349cd9d56d0d2bfa4ed75211452be0e2e0a056f16ff11da9410061984392870e71b10213f1514fdf7adb008559a9a15dd598e8667c74a1181729cb98635f046740375e92af64b2dfe138733407c028afbe7ed2246e89d00f890dfb5bd13fcb2bd81faa2aa0b3d15a8a1bc0965aa04f5cbe6b8b042fdac2bddae16c6068ecf26a8b0275d05b6a311420e0ecaf88f38460e3e420af7ea2773770219140da4a37a496da148e7864a7fcce6d381d4facc473e8963cbd7ce4bed4414dfb6c28f9fa95383133eec223538935f13897713c4631a8fbed87ba62c1afddd1df87763be802bd3392155628d1db0eba6fb7af5dfc445cb82c72178930969529808ca08adcd1228c10c67336f1fa89e24f308405ae0e6d7f55373ba316fa4c44a2e94d3ee99f8bfbeb0310ed38afb5847a1df5912016ff1d9fccc97e58b0d0754352ed27e95e35e4667ba5f9b6bcfb0f41eb49e5b9540a9cee4436dd285d4036f23c0309db86b8d0a466037ba3e8d8e49855 +C = 5afe75af3b0633e36b003f06b8b80ab5188c69b9c13b936b487471df478e1fe54e3685f25fa8e95773cd814271d9145c93250efeab46d5a08e528949e22eb34641c9803f0e1c40d9948ef1ef9445083579be26e4d454bb265d50c81f2da3602ddc304cd2a16880b02f687451888044170c32eacea3638007a4b6cda2752f53c23c3db923b6e355614d5f301dba95869590aba78fd1142faf47d94816bc46fc95f0200cd698f3d95aadb015e2dc89752311f2a191084d0570d755ce6eaf5beffd9dbaa56ec14d56f5a7dec1ba9ceb953521bb1226205e88fe2bc0ff8ee171d455c64ee97680c5725f66be77acb84b79e128224a477c30ec38bdd1f21d831e9d626ab10ba900f3122d2f16aedeea89c932fc4ad4505fb5b0b8af5e3514f4ec16a7e942b93d4950a89251c94439616caedaebebed290e5f7840463d7431a6a878c4c61176291c6047a43d442bb63876a0c951ac40bbb212b96dd2d5da818e888faba9d2048297b13d7a8ea9c9af44dc98664ddfd575c35b0c7ecc530fae322ac4144848683961f260dc7a6aec240b6d1645900d4f5dcef83e85657f034a3823454fe2e2c5519ca162eb4eb1d8032950f28c18db671b49d2ddaad0dde05882d4d5866b4a051510f6db210c5b621a5f9699b3e6ef7785b6035e2c75e5d12254711fd068a16181510f1e8c30f951a26e7138553b2e044f2143170c388aaad9b9b1f2e03d81d73663a3c183 COUNT = 75 -K = 6cc1c96929d119c6d5c989d1472ec99782b84d7c4344d7d4081e35ff0c7bcce2 -P = 777f7253b3fcbd99f0e39a839b90f9fac666a8cc470bf88b43ab9eb77f65509fe6f09509b5b914d72805cba9871f4ed603539eedd33d6d0a31cc63a257b1afb24f1ba6170e7d6e0d525fae02a9c5749b5e32b8e7d96b460aae1fc6594b31eece713bd583cd -C = 99a986848f40f6b68483a89f7e8e167ac5ee2f4540dedbd8b70b363d04f7d1d5e88980eb35fedee10224daa90ada4a3aa5dc4a4d445fadfd588b4d7540f186d280230444e2dce42d7cc5830c489b22a844c6d3cfd49dd0907b0a87c3b9d622f7a0eb50777cdb476115782517c9f31f9b +K = 35ed79c3ee12c41c2a4633e431391eb77fc37a20cba65f2aa0590f5982a9711f +P = deb1bbb1c2a177bec623e4aeb3457c1a3c4e52e9aae9897ca848bf7a9a5bd9db988c0ace23d2f2c7d1277cd5d417edabc5a2b48222fddad72d53af9d2aa0c234cfb2e75e628c0bb4d33c6b87189d0a6196403b5bd63d7145da947e2ed2ef725f8ca4027182a7191951ede075a8e46870b08dd3bbf8f2bc390ca34ce25bf4965c0b4f8810de0ddd81a33d56d9fee7a73de7d84ef35b2837485782e781eca194af7968e8a0017bc1aeb9d1e1fb5ee1221002190217376ca4aac1cf146c71f026ecef0ffc153e6cc1f2f2d9118fe29979c397e1b63c24e717201aeeb9d9ae1e555a70d48e69c6948043bc7540bee5d427574e4f876df1b40c114a869144f76fb0c5207c5673ec34116301956aef6bd70a6834fec2365cc6a9a5df30867cdf66f5252131f220f472667dce755459528b740db829986bfeda07ba3132321f003ec6eb367d8c38a168e8af4590ec1d0b7cc0ccbe9a7c08ad88939b6a20c249d750b61378bf6c46302f3a00b75d3e0c6c11a1ae3cbc52ecfbf3c327c52bdc6775fd20a54905af8dbd69c5bbfb1826aedd049f480fdbdb6e6f699977029a0e032f8e9962ffe95a19df913e7b52aca694327ca40cd552d0b4737b312575cf87e44100b12e85c6b3e21657576f51cd534f01c41cdbefcfb1a527d4d9a3050e333937c78da8da253115b782f1e8aa827d0a5262f6bafd7f087c07826e2643019976e6f49ad6 +C = 7d8fb58a6e9df50099a52ad63b7c0ea6897e8628cdd9fbb85fafd857a5a5f29ba83311b8b8f503084430804d4683770c516d0bcdc53c319d9f115b396f11072922a4aad0d830fbc0506eefa6ad772cea9c01430ce5fbb10e66fce9094eca38f132f202bc09d9a83d9575a9f11a5469d5e14d06feee24fb1fdbda28b9dbdbf67b9aaba34b622f2cf0d4f8db74eecdd1554faa368c3287a6406cdcece99bb1bfc94ee0cd22d054cd1227cc3574edee905053289edf06015a71a359ba00f78b6bc6c9316adb048caec9659fa7577da7a4960ba2845aab8c3a091a1119978cc3dbaeccce16ecec88c63688c9a9318b6a80af5fc2c7e5732e2d815676a59324ef25a87376650accd89236663cba655186728d2591187a0ed85e32118dec5de04117a510f56e69aad05c3111437f96f1d262c5b5cc81806446e46c39996fa529a076a29c16a44a786989851b48d26bfa9afefd30cf32142e46c03c706add2b3a93127d81efce6e4a64c9ec488745f686ef5be284c0d1f64a73e81f26d5ee36923588eced9eb1bc6a98d821fd47382856aa635957b09e660364f0be4b3d8b4c29d88a0839e867f50e68417a73b5d3d9ca2f6ea884b807f166aac19e65c95b3aee1a0f86706e794969a72381488601c5b1fde3585455406c81abc17cddb0d8ea6fb10870b24029ee416bcad97d697cb253aa22cc1f562365c23568741e20ed126ad6874f6621b00351b9fc09 COUNT = 76 -K = ecfce0c8270d86928c694963d9d340c3a92e90db6df59814c8189772a707a808 -P = 82c42dd2785bf119d26f4a2c21181fb0d47ae2dcc7a626abf15b1bb358df3773e16f827392dd998b0db902ad4b554efe6993568605ccc72506cdc90fb95d0fc5f61e46a4e72fe929351b619820ccc2f9ad7c11ef91484b80660c01ec5fd48f40168bd7fff8 -C = 4922b9212330bfd884c8258c282f9bdd1ec7d63d2094f059eb574d29d7a722118ec8c8393ac845353b4048d6445242ddb8e330d5eed6dcb07913e9ca49191cc32fb91f29cffade6e3ba16ada221db3c9ae8e7fd7619d7fb8a9092e442da27bdff4610c0bc5612d5d8445010a0831b86e +K = 1f94c9b43438b9fc1e2a4890522a2d88e39b1a61b42f1847b973b1444e1aefaf +P = 4757a2479309bd24a6219732a98c5f2a90fc6892d21b03041998e06244ab20d761b13f9c381e90e640b623f7ae752d85af9f3a1bcf678dcf7b11f500dfff8a3506e41bdd02b84c1d6cd65bf32d48bc337c390a1dd01c43e86b129f08c3caf18089f4cfd1262c4a681a54b92a8ea29a422934a185535f3905b00f3c5bd10f95508a8df26e379b12f5d2e3b288e2559cbbf3db78c9291cf4442ecf7f8082d759b3c26dd27b730d5875a08e14939939c73bdb8570649ec914613a0d57105a6205d23da99ec7a55b128a6f83ecb506959c2fa17cb8d2c38c185a77a2c6e5d5b47040d4a6ebfa2fb22c25c9d474720fc46c8ca310c2ec124e50064c9d928059fcf5cffca227603aa8e23d2ffd4410fc9090376e8d0e03c426699e32feb583b00a43ea4c259214659b51aea21a9c544bc1670d6158c9fb1fb216c0637dcd2f38ea5fe92c08e44958f762e433ba3532dd56ac08ebdaf6bcafeee2fdefeb3ac766335ce544148bee177581256e26d527f98cdc293a691d1fbc76cc793cd16fd1235015e491fe9d5f7d042a38e2ec7505a7a716558ea652b33fd109a6cc50d6a3f62c65b24e47e42ea1108de867d8384392ad21f1935807ee2b15625797b23a0f975879f9fa9388a72f8b12f540c5752e4e3682b82e4d4f86591cf403960ab4fe08df0daad4a3c6faa304254c70e5a080848ff090e51ddbde6eb6fe0f62fa1d779a1d867b +C = f0c7f2c3941ad7824ec7050fd7d3eb40c531f12cc21e46b31109b91f7369b3b09e569bc019cd9ac3e8e393b15b1c6df4d768b122ea884895591e1835cd49ec7a3e5223ba1958f3e688bf50070f7e7cded1ac611e2a86b0a84ffc36bbeee9cdd2adaf28b0f1bdecfe2b9f42cc98c72a1568ebec63f0b3fd235d55158c27284d0f7bdcd96311810995b6235e5bc0b2a5a1efe51ce297934496c59ac699206118c043e5b9832fe17e7711234c3567e7a2314a7efd0e87a82f32524be58e93c5d757117fd05f0ee28970f8768234743829dcbb7c095d5742403fe0dfe51f06ea1a89ae431aa91f1bd36601118e9ca7ac2ec5e88aa0694567d121fa3458447029fc22a5487efd0dafca94d7c6c377476b0698b32344dd9ae0ee682c6be2049a49a215a874eee5e39c2ef2482bf06adcfba1d6e47edbd2c7aef21bdb351e53c874fd3add2044f44ff75e2ed8b53b097cd840f1f04a1fbdfaeb0011e0ea5feb06b2649e8f212e4e644661383dde8e9306d3522125f352e4d02476a42b838da593a704a5af44e5a15ce82617c37f11f1603b9fbf926931d40067a4f72288f79c89410019b66b63da1f7dc43e595fdcbb821616c40baa393dd21b7f4aa1d79102153955b312c430a86528b14ab8de651ed342e306540bd8191511b71ddc3963f77db2307143dc0a7018440c26f6a75bb1825f462373329b727a2a35785e508d6d0bc4658b842344957d446b9d COUNT = 77 -K = 995f4b4b462b2b0a565c0a16b50f6c4ea2ad85bd7a850eec067623c77a31fd22 -P = c4af72605858fd0b5a49f9058cb09759cd1d1106d9c32bd2909a14a29480d3f179a3a994ea007533b8eafe9d3b10ff5cb2f0513495d001a23518f3d6c4814ead6bcce0ab33ca43d91bb6e61872ad601e5c88c84452f0f1e65d74d18572870cd73e23428ad1 -C = 04b30d32d116b8bbf8192ce2d72be4b0b97b422947a61b4ae833db9e1c1792332a6cdf0076f593c9e209fb65b364e9cbb8a08a9ce6fb5a638496374b77c184e455406043a7bc5f6ef18462049044a505d8513c8db9f3debb80ff86d9ab0df316be31b0df043b4c6130d41baad140b891 +K = 15ea9c13907b28d674c6d7c67cba78a4c7eada4620a7a449ab8fa629c8bd0f41 +P = 652b2c54a6f2d32344e2c602d8c2f2d9f9572d4c03a1846cc519e0a76dcb6f1596b07cc772822a464cee8c577f89f8784a08ca9a74c41d6576465c55007474a01b4980eb7369bd092ebbe9b4c26fe22b513bbd632d1528b9b45570b7c04a67af879edfcdfa48143f0aec949e21fb5770c0eaf04cc887fa5ba24d76b64641d7906b4198d878039ab08a6ad1964beb182dc3b3832d00169dfd3efc7dfc793647c1fca84b8de9cc6012817c0620c5d23d6777e149f1cb017d80e7cc70b53a63944a19cdafa898ff03e57b8a0350bb2332ab17739d74b0a35aa1207f166907fcd309e2b4f1c1b9e11974861cd9d74eef8cb37fb1fca4ce36b09f1303e3b8d0f225dce7641ee1d89c4e947804702e477dbd6c140093c466d666d5e57d48ebdbe44cd0958823dda43c7c55f9793a7b6013010e9fc24680ce6fc798c03461b3f582b5af9b29c158e01a14e398407cd31d9830b9220bcc1a915535ed703119d3075af02647db560e57c52ca84a9c3a976c62ceb8c0be5b4acd566bb99ab97c9b89c5271f77d4fb1b8e21ddc1531e662bb19eb19e55633c71386ddfb5807210b5a55ca81d9c79a66e7d2b454a2d2692a08b0a53466036bf458e07dc08f27e11254e6eaf0e0400e26684ffd0d323550d3a0f1ce449cbd74aef84a2530e44d66ab6154b7c2e579b8bbe81ca93db43d45e3d6f1a6aa17007fcd1b065b50e0ffad811c316ac6b +C = a7d692e56d86a7da2a94208b41916e98961731e9c7be883c108212ded4dddb7eb5f40ef9b72987414f34a5c672c6bf279a5190fa0e04b78c5542bc8c31ff664016ac7a8a4bbdb1700a318724ac3d9b3a5aad3031f318c2a40b5173bbb8ff5049093b95f5aae4282772ebdd8d50f694a16acfaa55100a0e816eb05971c28b199f3201ffbf4d86a19d8bcbe752ccb2bb236aebfa013fc81f6eb2eecce254b5cefae6ddcb7cff5b776648eb661b6bf846f96a3ac20be873465149324aae3a57c3db5519de409e3b8d43aa9448d86a8ef947dbd2ea779ad75349e8a773bc3d804621c8e8e6bb61bc77edde649477ece504d169571a271f12be32e108490a729b91488053318f4e6cbf23d70e7f999d40595720fe4aaa23346cd96817ff3c668953a7a239fca93030806a468b27c32c2f095743e62545881839b00025d600e05b490b211f9c575b04099e831409c0b54110d66c8bd3af18e5d11756139434f1254528bf66807442cd5b75b8fbce8a387e1ba9e82db38a0636101c6195ef84e8bca22fe5bf78008ed90cc2faeff511224e7c8689870dcd5f87c209869d90667c2df90ce5decef848110f4dab822c151a0f4def5cf276d016e16b2acc97ef5151ba2b1207fd8ea27396a197121fcdcaeb83c992936d1671123f35039d8d96e925930b8cc2f422f49381b60f5ced4608c5b216822a085070beddd6b605f59c77c3457d1f490205a024a4d20a COUNT = 78 -K = cdf34f262f155e208d3a16ac055078b5ed92ed7530c419bb108396e83766c408 -P = 2bae1ea85322e1e5a5c0c43de31138ea96bbbe2453b666ab99fb30226ac8fe4b3202c59c122d0b10a614a4b000c90c7bf8ddee394f9cf257371ad4e9256bcc6972fe74f3108f73096fdb73322fc6d0576c1aa1e3527f37b7913c506933cdbdff39af427612 -C = efd0f50befd995f6a27832bf6cfa1eed270bfbbc4b98e5517d8fff1eef4ad485af314f880aae5fcb00147d49d6daecdcf43587e8b1ae0f6db05a6b20b1c0a9de81034408f15ab93d78950eb24704294552813661570952ccfefd1714893f896cd9ea86de1100e7b8fae73eaa5f965e7e +K = d0656e0be6459bb75cd984ccbee01c43e55a06287f998013f3cef8109dba5e9d +P = dd3dff9c8bc6a8a30c75e2e35e0e4d2512cbf5c4180c1eb3a690d54738f4833b8a774e48e9919cfba34f54284cd87d320bc8dff4b32d64f1e9d715caf01db2dcd41e4a2939849a0cf054d8cb1b85779851066901734e16b8d5aeeb744388359e5ea8041cb94e66a1fa5b2b7c6bfa53310c58b2c67ea90313dc7e3507702d36c82eaaa3ef0f5eb97a20abf898de22ccdfddb0e17f734b9110898105df8afed8e0f507f190ee2313b97b32cb990e73cfb357097ae16b6625224c7b82546290c76c5541c26c3b607e234a070cd7c4055c970b65065a3a1caaf42acdba6ee1e173b6f54c4f877702766d742e88b18b13a75cb52a275ae0d5b9b3a3420f7702daa5e304515a7236960bdf1a7937a7320ceb979228ee1e0b0dd0bead070e75b94a6b394c5581b8181cc95d3cfd8ee1732035f0ec65b6a708018834e0c3741835af17891b9b0fb2dc0e46a6e107964f989ff7749ce6a702340b84059c104114aa501e15b1984bf0d209fb4efa169a22327ec319935bf947360f7bd21f7c2ded5d36106c31939c181f62a8fd70ffd95d7e63f7c6ad6ab6341c3cbbdcab244f53667d03f4e40ec2ef9163b484b3c14e5f10fab0773a7aa8ade2e9c453a27f3b40fc91b7150d3625f0738b3b28521d67def6f8378bad698d2868ae9105dfa29e0ef163ad4f3585d1e8a52f16eabfb39ce010dca8ad40c44e86f2910667f013db1a24781890 +C = c5ae24304403f932c95a2578965bd47c9b396a69b5ecf968c29fcd722e93cd63b2c80bcc361345e4d5df6222b66654c7182c0c1c4b5070f2a898df826956d79b7b175f6f9f23074069644d0abd21144461d0a2405f912961e10d8af5fdf57d782edf9f0c417b61aa77b521747057ab6d0052db91fc688add65f8ce5c7412c684dd3f2ca10a0ff39fc4e3bfa7d42194d9c1937db00145de872ca1b7b82453659c37095723331927691b8d8b22797eaf1e44230d3cc629d2dda5813519c901e5a286befb5121c0064659310191868c67d1f6efeef85c569d5cc63dda2e514e2ca30b128f707e347b60641935e8b8d18be46eb25352ff28216c89b33c7d7a336a293ba3fac25fefd560b40ad72dfdc98794f13377152e333570612625ef99e96ba99317098ba4198a17f5bcd92bd859c959a89eaaccd759450b02e4f76c1a078260886b37cc26ce69727bb4288d69dd9e9daecf177b22c0f2aaafe00c4de28fd6ad246525935a470533c861b1fc5200342c72cf5b6e4baeab4693458bf30e9231dcbeb74bd0c78b2a6b4dc8b2711af58e5ade6e9478195834d056926a145fd89f402a446ff4809f2cb626f0144b770e4f8626ca1f2e8b9c8a761a3a595ae2f0ec563890e294b8a58edbdc937018950fcaf9822227a91bc956100c5a867149afd93c79c5989d3131d1dce3cfe2cc0d95d74482e8417f87b9530634db0a1ff993012bb3a54953692d8669 COUNT = 79 -K = 25faa2934f7316a3792e029f09e6f2f6faf20131c0c8b0b6d03e546ac1fcf456 -P = e575ad744856b65b512907c3e1c49f363cd037a9f0430ad263e4dc4ddbf376014e56ca873396ac90c28011a0bf406e68611a5d96d1c9d2552fc9f3a6fee33bf84414f56271422e781f1126d41fb9183361541d16387a5608e38d6dcc01322f2d2aeb1540b2 -C = 9994619d1ab212b9e3b0785e45bfc1903783f490a1d3cc18c2d785763c5ec2ab2ead5549947279eb0d2eea9cd994a9061a79c64b62ca2f011750c31f0640a615eaaa1029ddc65ad76fc536a0c211e3f6a113efd65ae0f1f633f3ff1019d0c1929dac0b6d7f8406a3f85e9f424e14fe50 +K = 03a033e6ad0e860183c3076b40db39b7f0186847c1f3ecd0703f9dc254085eef +P = 052bda697f72e4740b0a0188e6ca890875536cf05ba12eb2e6ce5f680b18717c12d7afc4d731b2db14293232f597b4e11ef3b143ccb58cd4b68f181b1a380590f1d486ecc0a37e03d106cade00dede7299d544674358793369a835e7b4edebf7711288d7bbb0f31eb0e42febc480974106a8311a118cae5f4885101fc43d1f4788fd25ef988c4ba7e7993d062d047c25e8701d80a03a1e7f5335056b632258bc632f89c65c501cc2be116440ba9fc80bb56aa8d41c1e43c80fdbbc3a8b8de2c3d9e277b0ee228aa88d6594c502e1ae57c1960dee602d7d4dd23dceb4c0d8516052e02660fad937d6ddf79c354ad4b634491bc7d956f7571efd56e4e1c7b571c8256b9325a1a8e320a7b1773a357f3f402941bf3b4cee29af975e8cf4466ecbe9d003ee3550fea50c0e584659d21dcb24e321e36779e94f8a2e0d111bf901d5ad4ff50cda53fde32f37cf4bc347a5a03893f794ba97c4c1430195acea5019dc9a0c92b9f45b06f245d655313975264e9c861e635010d41b3ed860ce441775d2166a7d69eab0eb9e0dccde3e0d10528499271fda9e7215283318233469eeb0c7ffabd0e6b8830f6b9943c514393b7c47bb58fdab798035422a0986105926bc4142524fe84edcb8978bc14fb920f483e2c962ea975f82fa03dc1dd47cc04f0d0bc845b23823a12407108cd82e3c92118a2b921293f49ca4b4f05f932082181359ea +C = e9479c663411ddc8290e87efc1020e18fa38d1aeb67458b63e21416fb5e20e4e5628e63ff20bba1e935cc726dafab71c029031d11e8cce4f6e5008205cd80a8f197e1f02e58ab68e84a9e592c6a4fbde5a6c991acd3b7066f040fb9e71b7b038941d4a64b87dbe66f024fa96e81a9977feb971f5ba99c28aec8f46778a615920731848b2d40ad93d495bfe4303b9c3ed4e6503080cc6a2b60d7e38755fdbc13967331a9c34d3f03002a9c50d3a1cd18ff3fed5e016abeddb776d0b3b5d1e5fd88f1f0fae8f4c5b20c87ed61d37ce5a45df894492478066dbeffdf1ea5efae373529ea34095183596df5d55072c7cf0d335da9e7cc3d562d4c0b0ffe35b12bf196c6cc6ebc332838dacdc9d6a25b4277194c28b6f029902ee01c8b39ca4b3371fbc7d93b1fcb34675ae519d04efcb2608d7d3420b526024ea096a9fe7552eb90539de3fc100ea74485e2e222d618626512ea1292ddba4ea2b87b5cdbfe614545fde542694aa5f2278de2d60ad94860d6c7648f47191165562d529d48d8591d529f74698a149ac6fb963ab26d2ff2739743d9a942fe8cf73ec636cd306f709e529ab642f47b04d2554bc27005b4ee4f84130cb0581823fdacf34e1cd1b276c7d57c53690bdf6ad36ed26a562373e9ee058d9a414647893cec8841f96f5c0ff0a9cf39b6817b91e87e9f1f8be7fe2826a407bcc1eca07c2096ee1eaffa86417a73654ee5790870bfe58 COUNT = 80 -K = 281fce5bc2eca07adf7666a6a77fe687d7234f562b29abc843f8b3e3786d9c67 -P = 0cdc12542f1b2e6377f05def2ac3f67eb31f23b7e7e5f9ac2986bc00672f152b699615971963d2da2945c96fc0dfa5c4aaa4d75175bec8915ac51273b85fd1bbeb539203dd92b34a3a7152869d154979d99d0454810770a1538cbbe4e61c980fe9d2eab808 -C = 511cf304e912731b9b56e0624736a31dbdc0548f963d442e2c7ec96282dad80a3ad3be9819a89d54a5bc048e0c3715d0073b76b93bb4316ec1add36135a2b4f9825b10a30882d9e17fd616a96a934e2125f1657931dd287d9578e9d32f5b600add40ae08b2c500d86fcb9ca8e8fdd8f2 +K = 045198fca3aa065e0bdb10b8b92ea10900100c9acd0c748e062f29ce8424f2ab +P = 832e23d1616fe4aea01efbf25407b865026acfda2c3b687255761416147ad75f94fefa65433cfa002e9c4699de8048f14da507a46c9dda81802b1baecac5788ab68ac2c88b9fba90c2625c59e813594c4fcc412019cbf97d7b3bcb70efb382dc469a6590c80677fec15ab3a3d5a367a6f2b175e8ffeb6793638c01ac1389e72d6d320505ad53f697320c353d8081cdd88f00cbf369cd23b6b6132f4f06265279256a2184936e6e3aa5c2bee35e7b661293f2a83030aaacb59e3c904c627de969a68eb06c26b64468e6f601f32483c3335c39a9aaae0cfbdcb589f27271e5446ddb5e2429dcfea798ba8563409b037c037ea804abf1d6e674dffba68582f2a644ed7ba1a3be71e5a05c3d7b3c494f195880811be670fe3b27fdc60120f0013223c85b4cdf67727e2f652ee5669fa7e7828d4626c0d582f7fee45c0de4a293cbefac7557e0c14fa708d88c99ea84f4962ca54cf90c830ff97eba9aad1184249d42cc7803e834f0f64db713ee06511f7a0efcf0a045393c6693b1d473dd86ef0d734e50f516a579e302fbc40bcdc9e5ebe05742d960f5b41b6b8db63b9e4137c4c2779aafbecd770edeebc5270dd39bd33eaf4b56aa79f3732c0c8940c4dc0eedf1e9cc4ad9ac85664f30d4ae497559370a7f4cfc7e6614c08e76ce1af47ddb78b0ca39166f290c16fd749b8e0612980b0b1fbbb88fcc4be2d1d1a0c4992aa49bca +C = 98de7a70cf1c4fc864f9c844c485c496587c5c71f51381d11c316b440c99dc3fcc311fc67e851792bb8f9112f64bc0263e76c04a5d74560f622778fd18091cf93a10081a594c4f066373cc6ec980ad2d9cb5f22a7196accedcfe382a912a90fee37aadc7e634602375edf08a740868c9b8cd7c51ff7310a782f0d61fd83b57ef6fe5a83efabc056aabec50e933470bb953012bd334eefb0ad5387b71a972fce79c0047d7a2e59475c2d648a776f99ba46298ba4cf664da68a833aad12fcd6b9edfc549a302e3b1801ed90daaaaf2291c083f6d0150739574e7abd44ac59b3dddc493c063c8325c4aa517d55adda6d10d2075371bbac21e1d0d98d21caba92c5600b0a1a4e1b83b76bab51e0690df1fca3f0fd02c251bb8da8911b4ba9d5a8cf70374ef0eb53c05ea13dae85d249373a508464a1caff8ad2288e6cb86a260c813715c6137b51a2ebe5649c6690260ce0d89f4be797c9c2b6b58f233ea60ec3642bb0a351bb399dd0e8554f6d858220b73dfcc7574c066f503f27737aaaab3d840c8417e228e9734420715178de4b70e2e7163edf0b0739cb92e36993c58c85448c796b8a8048c7cd05e857d0b7be0f92a50dfd46801f7dbe4736048422f483c28613ff2fa7160ada8e0298abbc0276e3d32a5203199b4b75edd94b375912fdc185ce5dc951043ca2e86c3393a65ed0e5f2ef4adfff438d5dd5ec861c4fdde5110d6a4bfcf20d8322a COUNT = 81 -K = 76b3f1a1cd4ee40361c22f2e82c1a10d893691a249818fa94324f7023c05360e -P = bb03103f9f7b96f7912fa9ddc32deca0aedfd6e01370843fe32bdd00b3ec5a6b381f0b3938d39082024d7b5666c2085052aef5db84cc1a38a97d7dec086a66fdc40b4064fe3b08cd785af28edafed22d17422597f0932ab92cf8b00c6632cacbee795ed198 -C = e435f30de94b5008cb5a76b664e4ba707f45414a862761fc48c47e2774590907e52f1635864bba62bc3bf41eb8b983edb555f8991923d3409fcab60c90af792ed4ec86f70c071ea51351e262f8c46d91fcaaa804c5c8f043e1305f928ab7bab0daf0fccd9ee3cc14e9d91e5eb864c67a +K = 9e33172098216f689998fe9584b1bbe601a923a48f08cba8a08b9d96bb99df79 +P = fac97345480423a4e0ab364c725136d026e307eecaa7cb17101deb1e16b72d312e652eac25c72f0621b4a50e41ef2386a16eb0811c797d4f0d32ed169a87e4420a10fac214671bbc9a3009891d558c42d95bf001bb7db05efbed1f0b349df7a3a6d0925d904f29c4fba7010156935cf601505f49914a7b00a4786fa17539f6ca7acd2d4ea5b2daf0e81f3915ce6b31b4d56375fa2445bb07ed714f8d586325b0c89fc7f76a94ebdbefc779b6c2be51d18cbe491cefe26466d8615fd2c1d06ed302df7bc038b1cb233688a31058d5a44e3cc1aec87571cc3c1270bdf174ec11ce817b63f72025e0a4e097eb7c451818cd709a592b9409b3e9b25d04f1b636db59fb1cca51cff7e61dba6bfe449749da4f2a68a59fd64eacd9785dc1eb8d5d60d14271a685c032591199965330de7a9c3d71a147d3d2388fa5c06570c4b043329337c5606808c37c372d5e8c6a65dfb9d0e15276e722427570063f4cd225fae983802c91607c2b307812c047729ee6d6b436d75d829612c83bfe88122c62a5be54012356011166c26757f55f0ab5631daa8d577c43ce3394682693cc2ee38446542d2d620d4b1a7a01373d2c28f867fb9464d30344ca905937011346c5e2aaf6e3803193097492e31e816347cb773b46786df526d296b4b4fb22388337f9b333fc59b25e8a69179e64306987ffc17344792a79170b6debaa2b264eb3c5f9a74d67 +C = cb2e20b08ef462b23c4411386e20277613fed576ccdfb3a0d34de1be883224746e55c26c3914b16ee125eee8819e71e7598103601a7a3ffb8ee1ce44ccc249c2bbca102023110983bc8c40b4d0f719388e1a65d55dda8fde35b29f8f1a6681ff7f8122d264efe57efff528d9cceb2dc4460e450d17aef38812a72dbf8b09679ccd98216d020f80945b802df2c3e3656d5752f1c69f7a6f2436dcad2fb529c0ebc667aa17b70ec03659881722e4ea9e5ee15c00bde3cfb29c082265af249ad86364f234ab515e547ba7035ea9c1ea877da11ff68b333a676a778f76fe00fcf45ae0bf13aac3a1c59e6fded1c3836a9fc561d77c8dfe1ab5a34d35d5dda25ac911291f26202938e61822ad069cbd95b26753b4899cd3e69b4a8a76234858af241a41b9a51f7410affec157fc9a55a9541b20fa92b8319cccbbbd2fc913b507493da78c0b9964c668bc2aa3d4c3e954784f0ab5c761ba9a9276d2f6fb00b290b6e4bcc6a047739f334005386a39141b27103ce0688fcd06bc57b95279758fbb24d2cda8362f0245c1b74c73d155d1fac14e7b478e88c0c6b20ed3375d427db3d37efa6627a9c399080e6df5083c7adf8b9be4c74a3d8dd7d7a8170ac32383e4d674fee7ac3b3d5a8279da2fe2be5dd13fba5c3e6d2eeb1449f1b53113f354d4878e990a883baf99b7215838310e6068aeb2a72a67a37ddc45fd03722c589f3b057e2a375289e3047a39 COUNT = 82 -K = e69206086081237a4d5c540133e2f995df9befe7d2e426725e728c81cf0facaf -P = 1ac1dc7bfee97bbec514b3c4872ed1f216176d937be8600dc8ddcf3337687287dadf4272236ca40bb52cf5e5597891cc8a295c95d2da9402201f6bacc2e9ae5541a71f99bbb4ebcf30b507e0a536efd4ad957051cbfaa7d5a51cbda67a18bf316bcabe10e6 -C = c5d0751548c9ced845a6e12142c654aea26dc645ec925640a397e53cff40863461c15bda5c3b232f7d9163160b82cf65b4baaf73621d65d442747cb52b51390180137c8d297bfaf5815fa75c51b8c00a4885a42af6dd44cc6188bc2ee58bdd6c2e9ebb3a193637767f220b087f981642 +K = 51317909880255e7e3adf4a39b6cc653f32a7a64083456479193b8d133038cf2 +P = 0657f20b22b4ca774da15e20650390708c349047fefd0a4d05a88a230dfe2c2ea650cefa497e166d45e43cb0620534f0b7416b0cfab6df85504e038c9f547cb65ac96817a506f462eb3ee6400277a28752e352ad13cc7743f7bf0c25c8d15004eddefa8181573861e61d498d8b36a8e289f911e90b132f62b7cf0d471faaf06e90f157a8316b3122433becfb998eb240c629ab566414aa5f9c046d6096ca3c75ae2ab4417e232fdc08c4ca149fb605ffdd1ee4a6b715fe79978bfc1dd01e55d996c1d724324e3fd7a13617ec3d6b0c3662b8f16b6973c121a7e28c05a57d3a9ac68b8c24f9a83149a4c8b70e333d640e1191603feb1a2b70dbc6587e110caaddb35fb071acf6bfa8d477c16190a2a4f0e10e8e51547946d2a18d740624a86855c90f438ab708b8e967da83ae1821ebdb126f4e039ff766850ffb8af1af2b0319d2ce1a0d7cde88f3e6598a2114dcb130b9a2d0ecfa3905be2dd3ce769086721f4f2784fcaed832805a9d2d6589fa96b269fc16fd6a6086db637e244ff03b73cc524c8e7c889028529ba2cafe2178dd2ec893f83176381a2ef55e5ef02aa46e2239f6a2dfe31eedc23640bf4e4b1900ef72a5f4811fa80d70faff09e3e7baa44b3bb4d9d4f7422e4a719b5ac4b8895affb95841700a8347f12dbbe6ff65c19cbf9c546adcfac14e8c4dadce6462888921772044f2ad94354ea1a29e3c01d0cd5b +C = 80718d82ca8db6afeea4722d05da987cff6d0e847762a50af98671b0d14ce233a63be51588d5b0671f514de32dfe63e8f102a498f9e77f36c89ea8cdcae77a72560fe56b21424f729fdedb60dd1d1e91b66be04f3d71df42b756fed03c536ca5df4e42d5b8abb92b5b5ab571052e86b45251fb7f405740d4d665d2315c08421d76eded008f023b849608718ebffa43c9d237bbead4efa78aa01a1780878feb529275b2b88065b2b322ee821f4426dfa938a6b3ec2990b97b90bed73f20fb74e3bc6fe764bc6dafca57334a9a0ccd03c263aa33ae718cde34953897f50cf49d41580eaa16cede0f3c8c760cce42383a7a9aa448a0d974e3d37bdbd01f9fb494f03bf726d622f7bba60c7f598bdc2b7c95edc98b35be826a06e22ecd844d903e51e6ff5ff54b3ef7b2e79ca8c091526a2390b38164ef07eebf2eab8a1bcf643429c47bd42113702a328d69975ee1f945e7105ffaaa258aeed08c9e5a68eb75c057e5e33a9b4e28d55e346d3e77ff4a28263ceac5990310ea96fc5494c95a7b110fde127cc8f50510685bf12d1b74427963cc8002b676e43b8c446d9fcb1303e1b012267a33f18d3297b6977414e386d297f7c9adafca919469922134e491bfc5a5bef018c79bba0a8ad6b4d48a87ab54b1fb84c02b1a18407bf27cd7f7cb7ec06836fa9daece36fe59b8dd29e0fcbe9851ee29931f9fecc69c5bf375e0081f36a9c67adfe0e03a4efd COUNT = 83 -K = 952698999ee46ec345c86521d32b1cc6f705e91a8ef39c51314bb4f24f0c6110 -P = b8e2252402878712a1b287c47235117b3e54b1ea7467fee939d81e1d47f6a555146b22a13185b2ab44b735736d2669dc06cb11eb328e1bf9d6596fcf5014dd9ea22320c693efa0a502721d5896bb78123737e15f2cb32d471e99f93cc070d965bb5531b090 -C = f54774c531a086c0f3f8a8c54dfc0587555cb7603df43562c757046e5d4afb49fad0e26bfef7fe5aaf8ae7f98e82ec5a18fab3e87937a2f1a59d697c9cd0964b2d4b3a0ca7660b09cae63facad051b3220cf56ca439030dbcbbfa93857009240568cdedc52db6a101a91afd45d5cbd48 +K = f387deb631c22c265b0d8f7188ab323f32775773fecd0aaa745212ba9cc192aa +P = db54d78cdc46869e09d44f7e38a13a702a3d60333f27a4d06441b9f39516c6941c91d2ef5adcffc3d06786cddda3c258b58e0974dfbe3607e46d89df27ee70a6a9f6b56990cb3aff00632a9bad781d7ef8b7f8857427b59d0e78e16f875a17957e5d118df501e1020a8863bdfc4d1300b6d58d4d7ca293f9b20496cf9bd49d7f4660af44ec26f148a7778a590e5698b9bfebeb817da5639a5fde53345582858446663e54dc7ad9c498753cf03ad00995834fd54bf8e53cf0666ce8cfbadf6cb28f3a954bb64df04f0b12fd84f7ebfe218fb5a2364fbe90a4867553d00504a8a79b9cf9aa6454bea2090b11a001d80dc644ce6a2258537d675b51f96e1e395c11af5375ab0a7959e57a9dee86452b0e7e09d55c876506f7e23dfbeb562f5d117896e13cf3aee1e3ca7432b43cc5af01c2d4c1c81fd55a979b053ecefd1f470dc42ff27d84be26dd9a0511db6df60ea1516b18650252da533dd882bbd4e3a27533634f7f106d3be5835b0377bead9ab384a39aaeb25e7680ffff94bde2f4183cd35afff6a819ff243927619dac15788a5caf24eec628c3e7b761b5a9aedd6b9b160e93c41abb72e31ec1aaba0b8bed87b815d9723a1dcbdcb9735b5edc6de19f035b29666b69cc9577eaed49242c2e17b2ef56fb3317219f743ea716ea4ba015ebfb8efd2ce75439ae8a1ea82b9efb4cd5e2f78c7ee9c8f0ba8acf598eeafa3f50 +C = 513b3dc3cc50390253574ad6781121ea2a3c96ec240233203239eba2629e19730973f0799c61f2816d0f639c427142a47a416b02c04206abf315eec8a673189cfe91c32b89b6773a8a3fb5a5cbb4a3b08fce0653bd8529214846e2cd6fcd24315554a630101418b61aa75197eb75a1949f8c3e57b86ab297b658a6e1647eaea70c900dfc9b34c6e49dfa614f7d453ba3a3c0f89fbc29a6358ac38a2550e3437e98ad5195715548aeaefc5a386c03f16a1c3125cd1e5b5bdd01c685158913028cd100e347fcbe15cbf7c3971dbefecc8c585df5f163a5f53b8f59acb5536bc6bc09d44651f0d8390ab874f249ffa87536e3afb02fa6b27ce63157c558108696dd1cf390611b7068b806fa2dbb33c6ddeaf60c599014db3e2da4e154572c6f3de4e7bc7f9df7f058cbaeabca2d351e5f932fcc83298ae5410911e56ab8b9e19aa7c1d10063232d7f31e4b3d80a135a169feec0dcbb38258bd381da277c63b94b95f067832eefba853262ea7607a2eeab80e054f2ee22ebd73720e43beeaf63e4a6d621426430e621222093479a29f434dff466c43d82042b29864228163f83cd2e7ba17d4c11c3b4bfb64b50bf3ffbad114ab35e27cbbec93811fb7f875061b8dde923e07ad528f4f8e91ed3ab2f16ef3060f6f34916b06b843b51286082cc7be824c8dae81e089500a0f714e1913087e0c5fca101152b4c4baf7522f00ac4af9e571cfb0dc5544c7d COUNT = 84 -K = e4ae26d62f35d589d6ead29cba3cecb1cea199327b4e628e94b1d0bfc14bdc50 -P = e27f21a3db41646c9c36564fa598d62ce305e1bf37a2e7093ccc8ccf2ca545516e8c77c41a00cd5a3c452813613a9268e5dd85f5d93919e520651cf610b348c518aa516048971af0dca5cd28a436ff150182a3bee64133dd160e5d1ee7e341ffb2cc1b4b30 -C = cf82423def78f4ef3d32a506e40faa1eb7f97a156fb3eb91c71146e29b6578d1565058f17e93736b20546768491ff67c5b625dcd42b3c0ba45b8e8cc15c1f0e2c2bbfd4c28d821b01aa460286d61f522e44a097bbff5f4b81ce0454a2a1329bdd155a9bb0fe7f85f031b652b92529c8c +K = 94e841faed03c8260cffd31337fbb31f120641e5486e3a04644d6a048a25df37 +P = 053a56f0c3041600ea499741582b5e8c9cccf3d8a6b84f5862ca58867b9cf5eb550669e56c46f4c4625b91acf1b5adf246b8568699afa91e27cdce3626c8651a66fa37568f1f2cfcd7caedbce7961cafecd112027fb52eba8bc1f2030769b5bd3f5756bbec17d36b7b511da87fc51592589041978c91690b4ef64cad0ff48b07cd5e9365a60c47e6aa7313fb010ab7e76a8e67a1a7a6909b4e11c4a3412abeb97d17b409ffa2634a52a244bce6a30dc8420be6b454c4c090fefec4c1fbc111eb6ac7e0a6dadd0a026268cb73eae47c18bc6a753b46dfd355331a4ea11c29c2b9ea31f6abde8f4a1e77f2a364a620396e28ee4417e731c15f4331836e63dcd3717014281e33dd0ff9ef3d524df5bedb76e0327a633e190a7c4bcea7cf988faed911c5127e40c41a26fdc8ab341750b099562f2ad7c050cf6161f7170b347a4619f645073a430f20d040e34ed0584ee4ac15f9e1780ba197faa0e9feabe2bd013dea20e3412619acbddfbc040579b904afbfbc9c26a9b1840a1899c253e4944b80cc856de68326ab01f5b5ba15bb0d510bdaba4b542904e930c91cd80da7e79a272a9c73e820112d7ac8e61c9541c0938107aababc4000d6def811b1c14ea4823fa52e3386adb0d4e5007734b1b4f587b758ff6505edfe3a027b477d4c6581040a3400f6fd4f657e022fddcbb4f32086cf1c2fb0a1a7a714f6a328acb67c82f7cc +C = 909e8915ccdacf69478751c0762669c8136e4c3b6100c461f1eb9a5fd955fed43cff7ea7a2fe69dda31e9658f0e233eb09805078ca56aece26a1546d9c344ceec0969156260a01cb86999739a7adb249ffdec3623b6b5edbcdbfc3e6f279d61d382e853f3da8cb82720372b7a927798b73028b855a15223be77259adea4d49d04c9ade07f8cb506c15cbf09679454c637fa574f2836f9233a8bd356d29278ffc3416f6f3e9d94fd5588a43ae3b26dfcfaf7a4c188d87edbbb121674d02bcbd5c8c5df3601d9714a99e779c0a41e17f1ed5ecd063b3ef428df6f71456398d0124aa100a920735533c9cf30b3d653203a1f72a73282d30a5b94192bfdb4d464e9df6773b24798e27176a0e854e81c3a649b5ecb885703e2b0fa370f724104b5ceb9076ef0d428eab122f7d7ae4559d56840350300f0ad837bc331a757635aec587c1c14fc59f12f8c5c126ea5f4b5dc2daca7a10da12c7c861f17d5124b78d68317ac79331dd2486661db56221f7d83a3a562ef0a2b4bd37298e3befdb90974673f1574e6fa5ec1c1ebc3ac6a13c979a855c8077dd11451c87b99ca56ec73927fe00c1a7a117a3c0466b28b70c4e551deff569cfe59a5791b8eb5b7dc8b7b3f6dc2b8cacc99d70045a965d36213b85463a49913145dbdd3bba832e98fcde406028c003f5910b4d64bb06c4f11cc6a80723d688834ec75b36bfde6cc170567d8eeca92a642e0bf75bd4 COUNT = 85 -K = 387252760a90338a1412914b569e608f3a4f9e32853fc09d24961f604d63fabe -P = 615001ee367520c0eac78bcf9f5a5c9b607aa2a0567fba39a9313dd2efe1d4c42d30dd87308950b56027f342b3d847b15aa4f8a88e929bf67aed816afb5335668cdfda4589a650c0cba3eccf836af4963b06e589aae91b887b0d050b6acf43289173581925 -C = a5b18bd310bdda9113b22e8db7e56fb7c79aa3581e0d974d83d56dacafe31ad1b0943db6eb2dd6ea752b2b62342ecaa0dc005108291094d277e55d8bcf4c1c22fcaae162ccc51039a76d0b6c26722393f5c5ca28d439e3045c545cc3420b18bcd092bef0a28b8fc7e748be5eb1902935 +K = a99a4352bfb7ad2f5e2911c5be5a6d6ea554d1c03b3c27c6bd5e7ff8f55f1811 +P = 3da310773a439cddb08d763e293fedb78eb46559ce91b6b7312f62f033dd4508f22ddafa118a0a096af73a68d733fc50730cf805b7396046b0050951e1626942eec107f1ff1b90a2677febdbd968bb6915d239e257352f9c60889af544d20a2278e45fedca4a0e10aaa32e7af51623a1b0a4bc7e84f0694928b3a23d765aa18db28d86e6cc0d5edcdf864fab4cc5189ca622cbd7eb39dccf9e58a63bce7400da5eb1c2cceb7f647191ea16282217db34ab45ded2e6847718d2d3dcd840afe14ecabe725d75be6d7c4148353a65183412274ad88ec11d2c395721e549d55823ddfea1bd2009e3c973630d24b6ba601a9c892baa6bb974353aa354d8a4f55558f3652261725c71c4a37f6bed196775487bc0263e65c839aa85c45aa634b0361e3e7a86cf4fe7e26d42fd1cb062e4b48105b08c76f57412e78ba60af0a88d5e0b9834bb9647b03e26e41e2056be2293249fdd667735efd513caa9e03520bdd6e545ff03a192caaa303e73a97f4a5aa097827b6af2434cc4f583ce19c92a112ae6cf596395afd45f7261d86f51db8a82b799bd1fb08b4e6b2c3dc4ff6afc9beced88e0b1dcc3caade75e436bbbc62854e59f4414ce13210490a811900e5ff2b24e6b1f6e83129084f9aee64ddc51b280aedb560cfff0d1bc3c41af4f0810d537d4be886183656824012bc5d521d9a5fe8decca48790216077e3441d09512682f216e +C = 4ae3fe7591ef40224063520ae8fbfbb882bd2973bcc81b7383abad1de2a83fbee412b66134beba38bf61b3f038099ba44a9a06141bedb1eac141eb5e799a7369685217150ea8203da435e80f49242bdb41abf1082ed4d20f5bcfbae6cd10edbe090eb5b4f92bb2cb083394f50e6b607717c9c66810bef7c23fdf5b83921cc89655a6b61c35b12d81f873415d433595e1a2ecd969157685ac98b23559742220b468f717e282a8af8a4ea4f56c5ff4998d4c0da90000c11a2d83b1732a2b7a7c283e68589071b087613b8ffe6e664f4e1adc48fe08a7207269cde5a4a802572db575b8d74303378964221590b75c3b63f7bf41e3f099048a8405aa218b5260169f1f2c73284c590697b99352361f55fbfeae2804fff6d5d1e61e81990d6fd3c8686b9ab656d8a0d893670dbdf7d43bd011ea6f9a556e1e2b2e11bdfc86211b395ff15e79bcdc5b42287a12edc991cf80b724acc9ce4142455d6a251703ec04e4fe9333d3f86686d0363781c7ed1e60d9b57d18362635056ff878e142374baf1c60903fe1f7b66cde3a4d0ad6a4a2b622a91d0ed35b566fa79b97dc8b12ecd74ba3b25dea03dac9d0cdc5ffc7b9a0d979ad25b176c2b44672f0ef0485de7d3658395f0c0a9ee0d37b21f8122fc739d7c3cf5b7ca58ef7ec5d4bb5e018d2414247bd0dfb089be28cb14119703ee11b47351aa7f7a0ac7093f0a14969fe8536bfb495285a90627ae53fc2 COUNT = 86 -K = db885840bbbd4f3f56f18db1b3599c2ce62964dd12de7d56c89160bc15715f0f -P = 539a25142a92abdaa3c2757b8c28a18658c872bc77194acf46e18117efd1b585a6e1d813ea0e4224cec38aed302a26564dc268912bdbf7d0f0e2a2843592443cc937c0c7cb3eb296b1ebf395f6d7d89d3e21c2f4badb01350b1e3d4e21078439ec9cf201dd -C = f9f60b621f12df92aa360255b6d6dfce6c400aef55a9e00f2a59a987f3de6aae25db2c058a360f04eed0b2184d1109fa63faedd41c89cf17f54eb9164834f1f8fbdec9af8bac8f6c340375a17c408b3d1980e5931fc8cfb767f94dae977ca1e4dba7a8be150b9322754115cb42f5f505 +K = b930c2a5c90de66338f12edb77075a7b9749d371c773c49dcae6f4851612aff7 +P = 3893d87c0e8dd83f8b120b478c66a6591aa7188b6914502f3fae9c4085e87997eeba5924230175a4d894e735e273835215b95fdef075ab76b382088babc2f723ebfb599a7ac5aa40fd66ea2c7fbcc20e3a8aab211fa60426d081121821fb78d2d9fd0447fcda9f7af0da2a3286fc0477a64093af43fc592157c1c355e6e46cf4d2568d6cde01094332ba1388a8773eb3834c417fe337e5857ba492b3dc6913d137389aedca16609579f5c5c0ca0182c23d4c369343f321fc1048a1dc3d6fe3a7fd8cb90b78e17d6aa0f6e415c2952c43622fc97f48d437d2f82fcf4b83ed437f99182e8100794122031345ed2e2acde9ba2601d159730477f0d47b728b84d2466795d86be66eda5b03d6b20d56eaa1e242c0220ac72584f49c58a9d5db06660cee91da7c98bd73ea783180d942f6ebc9f5f1e6265d2ac56dbcd40c8f0120fea60de8f0f791994067cd2ef4ce86bc6782a73855e972f690da6b43485981294270c7cef1aabd05c0e8f23150db3f7bb40cf9e3c2b7f5626b618be85acabfdd9ffc755cac0127ae7c2c7490f2e958665d46cf4bb7d35409d049b80659d530dcf03a53d6dd5cdd2037676ccd206ce36903d838c584c80a1dfe89d4cd4d55714b243ddd1216e2da6ed768c973e2a7dc4b967a0f9b3ddc8ecfe2ebca4e5fcca0d34ca017e419a11e93049c24ac06689b4f8d5bb25237b2209aee6899de28c732230196 +C = 135d4fd5403f85965d3c1decc387422b239f1e8eef65d8cebc9259a75538a0252e4de0366faa1a1edc6eacb2fc4fa8db97f27d1e188e3b5599bc2a725a6e55f0290d0d6226ce24b15bc463e989062ce4ce0db977862157742725bad1d5854c3249371bc9d17343b8aa07ab406039c3763d54426410a2d6cad3b5ac4f10614ed1000531e0804ecab5c7644992d8dd2c4927260d71293ab7ab114552832b6d97489e3e24de307d4377f5c942dcf8ab2dd26a41b51b91a14a901be5bade3d41454b1ba4673dc85b6cedfe0c9b23ad20ec099682d62af9c9c11d99375c0439c9d9ed0bd3d1c33830d70fd6225ed19ac2fad08ae79a8e8c1a796c5db2f06c22f65351bf36ac03d134b230aadf442f1181a1601d9a1cf80d27842fd5c0367afdf26b3f353bc3b6c0220ce92e0cf22c4c9ae0343cfa1a6918aa9fe50965074fafd553ba48cfe2bdf47f6e4f248afb5d908ff6e0640753a599d5f8359b7ab7a121a7e7a27452e53c927ff4459cc1e7dd713459bc6946bb27c61482d3a172e8bae258844b752ea1c54483380ff7be55de64552f44834758bf56b3e0184f14f0cbeb0786da22438a78d9d105fda076ceda292d421267ba5c426211ec7fe0eee527b0a900ee80fa92243ffa79ddf00b62ad58195f586ebee6cd8196a1c4454e5b2be011de5d9b1cb7b99e858a3ced8f18099a70a460d53b7b62432810a642fdcd6bef9f8ee3ab50d94b09fe3934 COUNT = 87 -K = 67fc820adb4836077301bf573c9cb567d24cf4a8c4f50b3feb4627a59df8d4ec -P = 7803f4377f2c9c7a75e8c23ed79ae6efb5119965ce82493623270aca478706282f12fb10f03ae1cd9d67fd5cf326c8b5f0570a9562381e3617f220b4a279b9b994194829dd715c05e30e5346220ce574483905cfd8bc24ddcb1e9a617cc8f1d94181735415 -C = 8cac6c1ee362f0db6bcba111af6cf425b0048753106bace16c5f3b43a296f1493551b291e129282bbefa097c5bf8a752aa822527656961e63dedbf448dbe2a70c3f0b35fb32880b6cd59eecb8ab61c4bb140ce0eec0ecf19253ba1db5e210035d785190f43f570be8ee7062706d9e17f +K = ad9b857924081a2a23e271f212bc2892e7b492c03a2f1de3a5d20d5ea49e04bf +P = 786faf5e8335113b727c5c1c72b6134087fd12a415b944d5f901fa12c713aa3c5b3ff3d5ee95389d23ee8c88651a814ab59c4e25565b24de1072e95e769146b2dc6500558480d324032073d5a02e981ee3ad86c147ab08c87bcb960b76dbd4821aae13d2200b4c08a6451c693e2880c4486635450ab87dc1f506ce14a7a0b5198132a77f35c98895931d9dc9d3a9794dae0a7ae6c7aa845a87e1794ce567377c368b0b63b5ff00f3cb88ae1ec2024cc9c7f16837b40d1e3db052f5211157fc5b53da1d003f9922b2cb48cc283031a9af5ad20edaaf0d02cc7e66bd9dabde3bdd004f53d48a33411249705d89eb55e4659efb8fc71f2cec9f3f3e3f24910e7ebd3fdb54fc368af6301bfcfc4134b08699e98e0c10062614844fd3b5d93f7881707d6a1e221a2c6733bb6b620b97d2166c0c8312f074a044de55f35616e06bf491b0c9c2dc285a9719d21360fd1727967d4443f4e08c8a8f6586674fa0405679493f567e6b6e2a29029865f8a384d868029f082a0fcdd8964c4b1eb693931d8416bcd921b7843a766d3c1cfdde3b2566d455ce3024595837a7e79c0597df81bef24dec0b2094c0ed479eb468776288c52123ca06076a5411d5809bf1a0f0cf8af6fc1eeae8474eddfbfeb998dd87bbb33e72fbeb0390991b62bd08245079b8f3921cd49b0136fb7aa8464715b6e42ea9739cd76e9e52eeb088640dcb6534b8efff +C = e8bf7f1be8e6341abcce756cfe9b7d96df422d95c188def4bff13fc3b785aa506f2a126161af76aa76efcdcae2b5765d23b0ed2ebc9e4b57e67a05d8e31b97f95bc407a154ccecd7994bcc4253eb7eadb1f14363e98571e010201ffbe96d684f8d74eb61a4bde27254f308d9cfb15d8e2cbfd6ece2ead392fcd2dc99a45136e2d74e64338111ba69735b34db1caeff93569edf4cb6bf7b53d38ccf7c3c0382e0ff63f65f9b61f1d711aa10b742b4a4e433245b48ed60199f7f992a638e67776dd89067aaaa23bf592d350986d3204908d1d57ddfb3e579fb890d5b763c3c993fbe56b1fe655ed9a3404c3e2a4513d81386539738e75f8a14551f94e10acfb83cdc81ccbec61b516cc6008e0d526cbddd32eb4ca3d8ee328f66d0c8c34f7bcd0e64bc6e15fc369c868fd88b1fbd42528b9ce3edcfd701a82b3c0f1d169191eea69dc0732f805f3c740307b6c522592a2b4a9bd9c6b89f09b94234444d17f1bc650692e7fbdd5359ca531b026f12339c8ffde24da06b84baac0cf6d9ee0985fc37e0f611114a2e2a8c2573bf7e77fc12f5ca2692a6e504557f6e38580bb739e4dbd17033136fd802a9fd9efe38422eff4a20581343af055126680bd0e1c59c0fc5cc64a30a8351f8a36d8a244d5434f87cc33d4b6246675487e1cdfc0384b956910f91882202e7bdd1fa2281ac386eeb1ea8c1f08d29f0ae884f4f78028ae0fc56a0d4c27a91aca5e5 COUNT = 88 -K = f1e75e5426ce0147da6f6d20d9a88dcc70851245733563d6985c439eb6d0e34c -P = 5712797b1ca78f9c7ad09c8882d1725be1de4076a3deca8829393b7156b6a4236351d3ed9b4ef8474eb679ccad175dfbaeb4aa055150e017a8dbce95cc4529514c3a779c0d1b72d43810cd4451f703a5fed74808b165146a6c8c4793420ba912384aa95d3a -C = d37b42837dca7342282ce723c9acf1fe5992572a347fb78d0dc3e93a7c274b7d7717ff78ba495b71596df065129878d81c85134388f1ae592a2755644699e119848ec01039e9bc71e777a3410adfdfc87efb3518fcf2de48488cbb71c76a32e4b140aa8a2ac7ef66835b0d6162d89797 +K = 7b51b75a3073ac0b8cd0d0249c89770d2bdef1fa2b7882bd9e475c471440b570 +P = 62a6f0c4f0f9905fe97e3134828be80569ae3117785f6ddd4a53a2dc4a5a8b1dee2b87c3c7ef021734675d2d967aa42f45c16d9bba2b9d3c94133ec5b33bac3db034a5a13fd481bd98a4d6ff498aec35fe3330d3f0c36673c217db41f400a4006810c689de4188bccf25f49fcecbad055e64655aab058e6c504da3e89a55aa336a024754980ab56bf3a5314d0dc051ace82f2556f2b50c9b97c2faaa11ad7679001e3552eedc0b2722b16167315233c4e402df6d525170ffba43a03e71023db02c8fed1970851ef60d647f5fa7530fd26e97f586efd1d1f23e1e8be6000956e83b4f40c9939d48099e317631d7a64152394fe83254635ba5c86fda8be6690b5a9eab1d886742a8cdb5639b26b822e56c8730452b907e3cc077372e08757cb0b492ee53dc4631f286cadd40bca733a4b33e47b0c807c3438e57316bfad5690b937118111fe960567131d033a4ec06a823d27e8b8783b33d5908eb4225794029d811d539c01e0a38c289856fd347d8d99a3da947f42e4eade03f7f11ff1e95d28778b2cd964ca18f51bb4fac77539965308da262abc19ae86c7f322392a57a45b8404a6a9c4a055a34a0a47e690a58b9fe272db0500eeeeedc77533e0a92491b5ac8b16713400f2f323ee06963bbf0d5aad1ef4bde74c84ccf539fd402d09450bb5b96388d88a717df32cebf150f9ce69c6a9324e9a7dfa9575782a5f6b1765c8e +C = edacfac15cddcde1307b1209d641b729f2c7063295ff1cc57e6f6b80d34695b947a0dda818ca8a122139e50649899a6d34e36b2d3ddba45677e7daef394dae648f29e949d67ca248e66d5fbe54262b6ebf5dd904d8078b5169ba1eab0996881509214db3b797594ff0712d92d91dfef8c9c892742e3172beea886bf482a496174dcc48b9e90f6cc66a6fb62598da44ffd8b4a2bceed94a0c63358570bb8eacefa572e48582e90e276bca629f2758c7201a3a1a86fb02bcd61760afa394abdd105b31a5a966b9fff86f8c6549b8a0e9fc80ed574e40d8040c005de7a5821220fdb0218c44b88e05920933c95cb6f1b7a31b72a02ed017ea162a36f13d8b464a8941a6e860a13de3f042d6f6c84fa8036fd324909066c8dfcf388fc5eb748b7b2c06228a32ad12c55a057234e1b914d74d750b636cdb5e88cf1b73897e7823587c9e02174a1696f6f06f8974770fc6192162a8b1c59fed7645654e1a077f21dd49147a10be14d0e0cf6fd265a4dd4c8b7f8595796217f98f4a0551e1c56c5b0f3ceac6c432d62aac535571004a6599a0aa4d70ee89ead6cc01fdf45906072242aa8d3cf58b4d5b0b386e6ae2a8575a2cf6f8dfdc29186ae18095150fd3546174bb956782f7d6a0f6bcaeb551587aa7702e02579368e9cdece05f997fb513b806393a29aed637b5b784dbf68641e5d1389b2aeb2affad1f6091193c99a3e75e24c3459d068ea109dc8c COUNT = 89 -K = affc20b7efc9b168e8eb8deea723ba9a0886d688069a300c7f6d3b382852814d -P = fb76c436721b3fc39d0ed0778a96150b7847179ff9205b645632811dd194fed7539bd15c2b68ee1a7b056c50e70b7cdd7f8098bfafe2ef1af8b2bcc581fec3581d4b7cdf221fef3a3be2939f6b4472ed8aeb9dfe26618fbfa541e267638b262ce8156b3502 -C = 1be25836ed637c4f51312ab62f775fcd70fe355c1d81d39c4ca2a8cbbd3d13f07bf86c86f659a9aab6a87cdc083c8b2fecf91735d8aee5133322c9543d382f81376939861ad206e5f681f2a015d12410142b2ff293458722842afccc196bee7d558b3fc66933587342f9ccda065aa903 +K = 4582f304e287d33689d6dfa6c1bcd4d235b65a67ef145e0a6f748f88f6d6eec9 +P = 61666bd01659e5dbc0bb3a3e590a5f6428820517fea4f0a41bedf87ebeb9f3eb04e4710c815a44612d9436f0ada84f9c221c39e815f9b46b6d7faa91a87f3da092a13d10545782ac7d833570ac76b1c59739551421c55515ffcbfce57514a4c58ae31de3d376caa24dcac7e2a5b832b749ded596aa98a0f4e306d08e4ed11f9ea23c33590c3395a0afa7ad9d2e4cca0e1b853f4abb304d0da551780f3df9d2704227e3a15040871361bb979d2959d52f0ebd4ee6b73a62b14d4899d6c0061fe02e9cfd836c009778b50fa0327cbac691fa3ea5079dededb5c79ce3c9816e831d90df099736085b8ea291813e41083410969251de52b39160254a71f3630a110ebd0cffce76121a989ad1f00d80e6896401e5195d0c055da1d814d7660d29229a92594e10a936f8e27c40b84bbd899c85d3ef33d8abadf3833cee9e5f458cd0ec70807709ab833660487bf06392d0d2bbcd48ffb1eaab674a830ff8a80bc746da6a80a5b8e3bae4d5ce49201afb11031d0a6744043a1677ca14c82c4b9e966bd4a1841b28e55564af270bad0ebb80a733ed7f37b3a89a36b85f64a359aa47d477f17603cb26287049785c3493a37507a23837f5f1b815b412c39b0182f25bf3b49cc87e997197bea757e88e09a9514a9ab40eb26607210e39f4ba6f539cbec04876e23633c26df26c9bc008564f915b78e0a4108df09edb8a292b825b42fcef85 +C = b1dff840a2fe82f37b4eeb3ba2218f1dd6f4d49938a735f4201bb77460262957a04c280e59cf2ce51095eb76aa4678e3d56bb3bd9bea00f6a827160ee91af62987e3585c057cf4a9a41f57fb0016ba32a96657e5d78e060c978c4a5128f5fbd5e6edc069c93bca76518ac2ffc9c8e05175d5a37ef225247af66c8b415828066c4eb86397f2353dd0a0fba5a39c346f0962ce4048b7b7cb7350350c463408bb30ef544f34883279b74de1e48c3d7105c9a2e1d7b7e07ca7e9570ccca5f242bcbb4057b4c0b884ae99330d9d33c0b8dbb872d853c679d3d394db0900a4ac7dc9c11d24b867284896d85351a0eee3169453a14894cbd27edef38e1cc432829a43ec99667c26e70ce693e8d1988f6e0249313e49a15d2e98d53c5556d0eef4af3f011233553750440ecfd1fdb00bcc6792532d7311ca68dab5679fbd3f690a74920c512208d2d810afd6ef292e848053875b0031cc5a5a8d8e503b76507a203cb1b8e30599e645a7bc4d4485e34e1e8244c20f7ccc18e9e1cf01911deb240809c32b2dd867aa747d502506745f1eef1e3cc20abf2ca4cd3c056577a69efcf19d927798de549a5b5bc656091bd5c9c0ebe051d05087aed57176e479636db4d7a887e1181bdbda0efdb73b923cd7fcbafaff52593759c56dba66ad55a5649f9bb19aff7d1220aa7ea55af9f57a10e8da539fa6ec3aea19325fca0b303d7f9d59c462ef029907e8acd9f8be COUNT = 90 -K = 276b1ea240e1ad6d084d9eb67ce7161c20bbbf2749d99034abdaff468e0b03ab -P = 57a75be3c8214ac2bfcb5749f1385ee9b47b1ebf7b0f966975b8d0c7379f8c1f433eaec0f9c786dff543d62c62a482f5e8dc903f1f25ce526313898a39f882a2fa01f56a27615168f6e330e69065d5608e6504a15fba4dbcf2b19439b2bfb040f93c1e26da -C = c2c69b2c09fc7fae478445416a3b57c78437740c3c76482e51b8cb12ddaf683ec69236df7a2774a0bec4f6497eefadaba080063c0bbe723ac9477af8d7f68e0b39f53ca11ce503cef6d28a6a529987bc88ea631ddfa88298c2f2d0019550bcc3100733a92376db29164e3eab84165dff +K = 1a7bbbc3a3733bc4edcf348473d7aaf6de47b7da5c282dfd197d5a9c3c3b3acf +P = 4498b79566b00c1e065b11f3885292ef14cab30a56cb87d754ebef2ae49312ffd1453c2db6524a6dc0e150ce18a182d011a95d0aa396db2be7776e1a9a3c044ee806b683e6dca6130d467ed28a6d7f601a0801574e972139b1d88eb2e801fab2ddba24f828a2d62203ecc6bc208e1eaeeffc79105f72a0887af1c2ef4fdef2c2d9b1f2d62f13fc61d8b0864eec1a40b742b6f6c8339a3b347a8e013cb89c3f03765daaacefe550858275b6a862ce54221abff390c156e86d164f133881b52c1f9c5081d7745697ad28eff6189ecbd53a9a8df81ab65e7e4e42bd4585d603e78a29830c025648ffc0e9442b64fafaceb6de6b7c7846ab3f2e4b14464a7a825e612cd45c1f5fa126a772b830c3f11b904ab7f340e5415f3e2a366b5268dfc58c642499f4d052d13eb2579d69760ad6f27e81bcf6ca0ac75df1f3c87dedde6d27d90db1fb1885c533b7cfe2896d2b43382d988e5253018b1ef5c4b179f96f3af30d3ab5e32beb40873364a889cccd109128beed3268ce93cac3b0899e176b431c2b6f0114c58dd8d1b9dfb3c0960c0aac63e3475bf5905bcece193adc8afa42f7cdbcb715594cf9265d037aa0d7662b361342f68e77544f041dc44f738dea235e3d902ae1e5f91dddcc2612fe180615c478ea47650a54a4290a66929cc678af25f124a2acefc4e4068caf66944227bf607d8a6592f25fe98e23937bdc16f55e378c +C = c87b683533519ddfe96edc086c536e25a9ec4796c20f50de5e0b6c15d774c82cf764edcfa7eb787956d2d899edbe13318d9e812c5e90faf8a3b29b741dbd8e48652739912e39577704fc418d1aa8d774914c7be61952594aa020e997a456286c4aa8c72175320ff0595a6886f2808f75b7211f8874057eba18510fbb53252259863d272b6fdd836f6562b2cfa46a85c06f90ba8bbc0e1338321665c14223d3bd56d2d702561e112b906da27e4e21fb9c9f6bd61787371264c93c9391dd0c1f9b540c25e4ed5f85abefda01cc9425847c4e7ac521a14692dcb4a244a03b31cdc31ddeadd884178da0f117227cf7e81e1a0be5f44d49526be3b627dfde72947a3e2dbde51e92c03c0d1737f96ead933d1fe3b43dfdb9010287c07a6f0577d7b636cd4d028ae653dc7a97cb96389d2f3b421bce6ebf48664c124ecd88a18719a322430f4da45a697c267bd01f930a98d267a818bd64a74b7ac2b5ae1c6d8db72a76209b5b53a962be266abe9cb493a92e932bd6a62305d9e68f19d30f3b5a698a6851f8c590055bfcb27960d461d3408c9cf380a78662479d0d8955d9846de424466349ab5c28df0fcc9b0ae878e9627a1e859e76200ccb18da1f435d008077a28589d73ccfca30d1657d2ac3a12b2afdf0b00e6c36df6a39b783eabd80b99d5afa5c7c1f8404638d338c78e96687dd4542706569c65ae8b9008cf040b0367f49dab1f465b7f89a26b1 COUNT = 91 -K = 705e2337ed27a4c7cff172d235d8d81e8b1cc7325a13c5b78e5579fef529b2c6 -P = 86e3c39585cada0d54904cc22c249d212e7572631d49e0c2468bc3b6bb08957220438b75e9023fe31ed8da2b9e3eb102fb44883b72521fc2fbb9fafd63c3b582aab235523f514f128cfb27d946739d7f2ef50398424d2c32b3c89db5f3cdd114b313b3d26e -C = 33bed19e99309af4bc66711948027a476f6816eaac21d464b6076ce80016a3ac3a31e6826e793966653cd2dc20841edd8b1169b17771d78bde03380eb174ac8b07472781795ff38844a7757343dd768a3e6c69b95e13279fb4f15666c86f62048d9f3ce53aa85231a8ceabfec1b3c05a +K = 1792b9a81507ad85f6a1054f15160e8ba63eafdfa693bb751e0bcdb433372f15 +P = 0c8d0394d3a588730aa3b1618ecf9d53fafe704e306564b583ab06b58e8bb532e38e4b7b508ce1cab7337c40cd40ad4aa6866642044ffde5ab5d954d4c4565de06d380bfb4946c87f73d9629a17abd4615e9e6d000dc908615945d17ab66f8296a8b80294438ad34598f37615f8aed1826c90b1b0cb1dc8107890b7089e9334733ed58d8afc830f40a62e4925d1809d01b781b23c39ceed7340b6679c00298ba707d6cc6858e8ed0f61346ed56318bcac8a108a2377454745009d87d5738e59851b69f975d3ccf082370e74a8e18e391e1feb33ad0cbc805f47e1b3fc3b3e88ae02252c4ac3710adf6312c1d747316f618e9d4a6ad0853da1a3e1e8b8677eba08cf80cd262bd4b78f288fa04b9f997c744110e1335705b930dae87a24097076b8dd03fe72aebbe1cab19fc7425efc3f6818689854a357de280fa336f99002aab6691982b046c2b49b4d097989c155123efa804a54b55df788e745d613faffbe2adb8eb05202ad245c5c00e110135d44640437a8788993a2c5313fbb1ad777b880b99d3c77e0525c06ad3c38d18716e817ca5e396ace494093d3de7673dadd1108c882d2965f94a777ebab0f710fc898230695c9cbfcd92c93b6455b8ac16dfcde73ba074563c3c28656aedc173ea80d8ef89a1ae84d24b16d7191512b8499ab5e7ff756a41aafd492841db84c9b451abf8a66567f3a34ee204695cee542bc6f1 +C = 336c3d9b0b9598f2aa865a7f1e8d55c6971c52c478605717db6d8dcd9744d641976b1512ed9cd662b85ec0120246304bb0ec228597a5fe18fc9ef2e6f4557f9bbe75cc0b02a31761a4a0f37ce659c886bd988d6dc8891bdc0b93e608a80a1dd59bee3ee5f002280617bff49d38ed48fff812494b7f1da919ffa59b3f7f27b2fb4af4519fbd4ad3e347d537b532fe733b51be0037f122353ac3a2dafe22c96def6c5ecca7487e403c9de1a18271246218d2e52febb7a09143921f87dbaef2f3e24df268bd82c91f2cd67a6b005692e7f8f40eb1054ec96a0bd1fdeec3d9d2f6ab20f86747c451965e34319adbaf04d3ce59928d96ba7b26dde2448c3e834e28346d185a04b9a0d0b2a6493aafab7e0511598e0e6622632749dac503df53d276b5ac01ce0880920c40008456bd6b377b737fa7b33fba935d46fd05e6d33cb1f38001a793a8e94d2dc63b093c21f139e65b56e3c0dccce9a99f458e16d6775cef2aea329a33bfcb34030dce49fd3d73d0e61b8025a01309c3d1ac7ccad4b2294badf9cb88b8c00f944278a2cc7a95765020a485b487b9e4754945cc439db5baaf423c6504923f18082cf97aedb7d9d5f44b8b5a6109c6280382789ec559aafd269fceeead1ee8bca18d958e0752b44df1d2821cd5c65604fcda81ede4ea8ca8cdafdd59aae832c776862ff262db5d41150b4143d1d38a432f8708470f468fd14361f0f7422f1bd29629 COUNT = 92 -K = 583cd2fba4958ebf478a0912b52d1e0be8693b9022137fa2d80a7da054827bd6 -P = 2c73318e9864e9fa17bc0831a0190b30315c748f0716c6fbf2bfdf1485f0fc94c860a9e7e112c1b17eb657d6b0f91c1e17d65858d90f4c5b72a8560e8b0296e960773cd075819fb73e3e3ed0b6abec8edb7a46569c83b84605a9f9be352e86f30d1f5d99d6 -C = a12423f35c639973ad3d07dd790426a43432755f80f558cbaf33add6de3994d91c2d3308ce31493199e1e71e66e861d2ebd42ef9d12911719275bd0ec6460038c13d042a0f2aaa923f7fb158ad2000bb65dcf6f5afd434d501cd508d684b196c8f822384bd8b1e7e098e45fe7307859f +K = f5080c93503032f2e3ccb3447ff650f67ad62c837abdf59221e69ab32918a475 +P = 06043f0e0464942539299b3cb53218dc14f1907ff20cdaedaeb9eb7cd4cc7b5b0004040e3c2aa62a62447d51d028c6ae151a3e062dcc66fd9cbc5c14e254e3dcf1f81bae1e4c3c7c2d308ee945021e21bf324382e7cc073ee6c30f9b6fa1339d3cf4a1d2dfc5e64163f369c8dd3540765d7e00e5c8cb110e58bdae0cec78e9c5679c5dce6de3086adb2beb365b1bb5e082a8c9290f7b3624fd825bd9f312834ef9eb1e8d6bc77d30cb83e563f9d86200073da5d3e3beecae138770c28773cdeb606355b3785877c7d44f6a9afafab6c5880a6ad3e254573de97a11ea37fcc895b3aeef787fab7aced8694d4b42996982c2e3d75b856b411bfdb94d74a5b39d94b86373824303ae3ce66283f473684e6fe50408cbf3b24d645c36fd2c82edbf5fc9e2c1aaf4cd4d185e93f5756f1b2aa846d00528ba66ee72c2eb185e0cdbae02547c16d0a7a95383b83b46c5ec8aba5d6a52000122dda778fad670567fe1369d2a102067cf454bce5c6bbe36e3219e85609cb008ea79977015cc28354de6b45f039a93e7e39c7571e41cef00a2ab6194b67382f6958d8c974dd36576b26c2f5059182e8788bd852fd9011ce99856eb6abf5d5a2aeb95a1e3814ea911a385f62a9266f1c3f29ce4c0d6388ff53f9a15e658da4d5037688d560016de454b1598758c2edf58eee4a5563d9413e7f84b41c19f929f3589d5b161502847af0b12cd80 +C = 72ec2828e3986bcb7f1abccb32a5762ebe30560e268985b00b5f89f42adefd8934b45d9abde556a2bfb98a8f56d5171f4dec766f7154a594d71bc80c2991cfb2e0240556931a7fbb80ba0f80af9a20a38e45765aa11e240ef2c8aca6a7597be683acffa2066a8aa583ea6405a3755993e4ef3b8e437016f72af1c23935d22727a3bd77a2f2f9aa7e094a541f73bc5eb7eeb8ceb218bec10648be3412dac4c55a86b955cf89e849502eee8ec8425046a509031a2b3cbafdf4d8201d3ec91da7413b1238a8c5982dcfa8f25b20d52604d411d5d5a6498fc2c24b4531e86e5113811ba1475d59e014f51064116fbe79be3b1a87e48ad2d40827580d6ff3e0df769208a5d4f1d82da2073179800bbdbac4cc712552a00819a9fdb3eafdb744a2a44b4f819b7ade4dd9d3d71550de6cf88d5c83120952ee17055a104cc193ea4af607ceb67f13c8b09bdaa2b7e9b343a7d58f536ef0f1dca12c0b6cbe97538842b4fb8f76c3d3a4e9010c9e37466880bced55933622918f7f9fa1a6fe9e097a8552e23c6a1a5d84dd8203d6dda5c620aa4f7a00eff5ca6367034d38f53f86951bce29e0f0f8351aff2ca505575ed1856cb437092f2fa8b27ba0ebaa379822a0ed442a278ec73fdfcc9fc3229e9299ffc388606c26fc31624fff283b8f29c4c12933c0f575bb405efeaa72b2461e5943b428c97dab63979588771b40ee49e2012b8fde01f9d25d8a820824 COUNT = 93 -K = 1de51f6a3e9cd4ea7a3983cd5eade3f7d587c1b11d0ee9bf8ca16e601c70ec84 -P = dab7757aaa57225b49047af3818c0c14c0860c93ae0a0a71681f0fc73c08109689e9213e680be321eacc0afe60b5b19954661a1a71e0906a554cbf6186a05aeeccd7eae53fac92dcdabbe734a648663e0035125cda24d4eafcb531fa3f0054d2ac760263fe -C = 7da1991b850fa79775b710b9540d46c4ddb903690cd385c62f7a2a6f8bbd7eafa7f01f4b4985866227168bdaa9da826358b3c58ca925f91e87100b4f0e35bb7fbe41b38f2fd8d484b65e11320658bb36884e3068e2943241cb0832f8556618e2df671b77f7c06c6943cca9f85ad2b023 +K = 14335313d1d85a91a103125998d27d4178bed31a050ac072dccc115200f244ed +P = 41d1390c25007dbb12dce7cc6ae82f2476b867dace7891e75dc03aed861fdcf1448992fc016ac74fdb1ff705fb736382bff4e07e9587ebc2de40d054d3261f62dbec1b464210d6c81dd6549c405c7bca2030e12d30373fa33b64ed5a364764ccf28f8b3f3d7f1e3ccd808d8a4bf06f4050994b87f6221f8616a66188e840716bb26007f9bfdacc207e637579953664a6e79cb208401ff6b7094d41218bea11fdc53216b5a0e9794cd01ff674db4de651436ee0bf9ea5980984817542955941bd1f7aea5946ab23a593cf291145050432300a05b89634c0a8778ea05ffee0e1d46d3e5c511859ec5a0c473adda28d7329dacee8fce34ca2582442b47d690d2334feedf5aeecc01ea0eb983495f9674a54641fbf00f6b61edc65682563b0cd812fd524e010fb4e5644e25c902301837be8bb7a78887be8e24cde37a7e04f1337187a4951606ba2dbc5298a20662e21c530d236b051f42ed44647f8ec5cf206281e72d7f2d9ef24719a92275b086ee42763e044d64fc8060e6228d314d352ddc81813260ae62c1b59f7cff5f9fb0d0841dea9d4c7948ba147ec06e4e44703216948ca4de1fa9b63a0b868ac8734002858e2c29a0726ed710959f52bd2bd7622e13104ae40fad9645cd9fe8e452a07e77d2ed292d5fa9f99c9229c84f0584e09ca94c70f4efc1ccbff0173b26beca59174490705712f1e6866a25856d2c9d370984e +C = 0727d0acddcf8c266cb9355ecc5e82caf2bdd3f2d088b089687c142e7a70ad38cc4f8627e8917e65bd126ceafabfbb79097cb2e4e12fa1968551d6aca725ecce9568f25d9d8cc5b113e8e985983a20213bf742e089356d1b3abc64f98eafe82d95147d1c1e1c881a26a0199e0d4a25ab6284f02f142a1d2dabfcd0655b99df7b3f9d062f221367dd6a709cbe3f7f0e968834cba5863424a2851f73c847d01e901002ea1ad45f77e520dc61d278850e88f423e9c1481e81e8650abf43cdcff7366f682801575fe7115d982d820043f1201984ab86e72ca98e10a4fcc4fb741b34c7359ee6b0080797a158433e9069664b69fb0f8943e6fc8ad7694ca489bdefab57c8db76b6af2475341c6154b833e0d5e87005f1d8ee6721945de8a2c2bbcb44ad1a852c0b046bbda07460c6c3f4f2c1d5d858d235185a7a6b312fb116705efdb5319a71780882973cc7bd9c51b1d13bc0b8430d707010e2377b6ac8e104442da04582046de847dd4bf0d7e23ca8637b20320dd2976ad214aebabf09ff1adcea1dc5f8e6f70a375a106b04eb4b00723436faf38ef91bae89d6b56e176a7a864011e89abaae46b5e66059639724f09ebc3a6ba22165c2d4b3a49054fa8881b923f55a51781636e325da381b3fffc8cc67b22296efa631294ccb3c62c367ad8408b3f078227d257d023550ee3fcd83912f3a10bd28c67c2777c91cf40cedd790bb2e6a7b21a20c229b COUNT = 94 -K = 51fe97fedfcdfa2d642b078643f936297de4770b3e1f9940df6a3974fd5911d1 -P = 387b5ab23324bd03a8a922b1c887678c343c27311f055446bc2565457e9b54bbd522a7e3c2943b3087b519bb5c37c6566a5a15f7b4c651b8c62142b8ec9fd8cdeea20ff838d9ad3432e3d7dae0c0401dedcaf2dfe866cf0cfbf5fda6dd18ea70aaf3987563 -C = 17fb7c57e72e822303bb9099d8d05e86d347c8f69d74a566218dbc940af3c166b987c7b26a50973704082b60019934dab36aa2c3b00bc0002073fb74ab698d2c961bdf3677f77e80edf3d50b210a6793b4fbd54c7e71db8dae4cff234e6824788fbfb2131d0f6d17591b33c10f544d5a +K = aac09d0f725a54062b331d177b19222f8815307a81779a6d9ecc84c522adf98b +P = b54421f288903e9c0d846469d5bb695f4f23dec2c55f4f14552ac065639789a1527da130a747903977bfec4e48fc4496d213aee8aa94f6dbb4226979d87197dcf52a9b2f51b1bfcb12daa526b8763a82796aa7f501b3ab01890815fea419902b32be9dc22abd2467fbe99ffa99c878fa7d0bbfd1c49c91e268488630856123ac1611020618b30fe862d67c1a06792eada0b2ce457f5d983df1263104178da3c5de5a995eb117ce385c82723c923f8a3cb571a5d72977190b07f0a9c251fb18cec1efb0937d8893030a218fca3cc28334bee6442c0b3189350f138a79cc6b12caaabb67ae6858a251b8e7a4580faf060eb28b726030ace6bf5f89203ec65d49f0efeed7c68d9ba295f949857503b643cace99247d0cb99500fe1387b489542cb63ccd391bd3b2e5185c5b554ce283c94dfb80f3d06cafeac1a50910a9dbe2d7376c88cd2c342a24e6fae5133f64c38c225876493690cd2950af3e5662c8a56cce532dd96ce9a90d254b06c1d35e3c6c258fa75a7d5fcc55a913af30fbd3f279dfdb5936c0d30555f774255e8b2364d43201171e91a7533c1ad3ca4de5875c14fd54f97a23ff866c9b0dac1583f9b809786ec73a3728b63b65299ea73528bb7000299d5f1d1aad750502ac986b2d54cafb1fb9a706c98940e4d7129575cc7e2ee2733b1910dce59116adf28a4d962584251229787e40e55f320bfa4f9c76923594 +C = 1d96e2d95eb6091fbc3657ec635be6430766f03eafecfb7ba2f734aa07475f49e13ec01abec5055e5a4239a516afea575be2aa315fa776848a4507922cdb7b69944b0392d6af336332f6cf53a02a62372b5e610553d211d04e2a761d4be7243df4043bf84f0629557892a7e69b2846ca5834ac3fdb39af74d5aca51e29c49115694229d1795ba0c37430324b8e5b626caeca22a777f4f174dbac61069ea4449888b04c5aa8d80a122b77a2940265c163214df5fb1e1d6ded15014e624bf162ec9af9019e7fe82fc729620a9bcee556da7b1988db9e06c1e5c258548a39b683f953e0d29ddc8ff2abd302c38f93e1e467d265e969340618ca7de45f51dde6cfcae7427332eb1e281897d8fae36f266b7598bde7c45df648099103a4c2af7bf097266d83452f3e32fd2f0ec87c785c0ca3d0bf3619252ff1bc582cef66d8e184f4118c7e9814b847dfc49ad9b4d9f31bf0ac078a429c2d39fce66c27e45783266ec6f660d25c75531fa809c68b3ad7a71a7fbfc6132af0cfab55d26a015e7b5bbf5ea3a8a620608f7f00044810d024fb22d9d76595814d636a35b736679b99a293736acb8af545febeaf6929118bac2a0e7c865c5fc193be5e94d5bfda30d0e46b388e0bd4dd9e7c35360c3c404b962c1ff12e1b8956c068a7ee643372e3a9a238add60d2da634edd0593c63ac7aef4da8fa862343b4d13adfac24a403666e515f46a22a127ff691d5 COUNT = 95 -K = c4fb79bc39cefdda350ea763da32297aab27e5332b14548d3681404b9fbcaf29 -P = 986a78c724344c63e160e5784906692ca85528cb7bf300f6b11d02f7e15b8c25633e8b06ad954b7cde36f1014fd2c237329d183babf57a718197b36e7f35f76bae24f6fe3b9f9a9a3cbaa40d8ab79e378a0bfc95963d6190a27fc32d9b8e944cf48c0c4a62 -C = 25539fbbc32b2d5618e1701b496eed20eea993e7829724b5e21432a07a5df2f7ae3941cf5a52aa9cf2cb5e23f522a1730d25321b8d252c2adc212d76087044afaa2f660281bfa0789f00f49a2f9af690cab968a93b546d4104867ea925c557171a0a2bee4d56e92e9be5ed7b6c1b6506 +K = 92ccad7ec2114baa3c8b1775a49ba3f88e2fe80894dc8873add7bae17b15a8a9 +P = 2bb0639ddfc6d5015bd3ed1fa6511e7eb49f3090facd5ec59b645150106461c37c461f0bec4d6beb7358b7f9852963e0d2a5d4d9db284d7ae30925ed52b3a2e568cb488ff38224a7b40ce45925c639a26ba267931f292011171629273f965fb2444a9032d4c86c656c6145b8a82f0b5dc2951c9d46c8967b684d3083c3dcc310b399cd1beaacd5cc96497f9c3d9578b5d32cecebe1c875812601bb8a3e2b359dba22607fb6a78ff4ae629b711a65e8bc7e11cd6eee83dcb1ff37ad30c5f27cf50f329ab5d052d968a18b58000ebb35258bcec971b6705ae8f72d13e7c20309303a121eb7c9be81056a54e53c8e9b38aaf2ff860f24d46156083f04d049d1bf967be1bda5179376cabdca426e14583415e8acf36c89860c951ee9f5ecd710f96ea9b853042648ce4a5d404dbb18cbd604e0dc2d58bca2dbfa09a3e01534eec9964f161d96cfc6ceae11ec803ee91f2c1854eb7fb890d8e74b3569a2277f57a5ec8152cfcc9ccc31ccaf746822f6ac620964d648e9396d8bf4b6c299d5a717f1f17f2d3ef92a671e052a77ac43a7780b9b8e15caeb04c26ed44721097194c5b9a13f826cbb30bed3fa67eaeecf8583fb570602e12c58ece21e206559965e199aa3c042a3de2b9f43876bc3fddc156afffeeb0e5615bf7e7c919dd18a9529be93bf4ab1ca5b4cce89d7a7a822df967d05b0c08be8bb43826690371a1a701db0e981 +C = 16d49aa7c690615ab31e4df3319509aa182f360539a5da969ca8708df6549888cf43708233cd94b77c560116a5c909d321bc30ba5e0b0311f367fa9348456c1681276ff1fa7f295eaf36733d28eca1331f77f4c01a4766cef2ca89dc10a0525ab2cf866989a1eec6fa10047a25cbb93828d367f9d8698c311e524076cec91079dc77e11be7dc821840bd43e78d50e8deab5328bfc7c60c6d54a225ff81819aadfd3400f13202be47e1caca473d704a8552824864e691eae226378c039939805b40d7ab9592b58e47490364fc6659769a1c22cd75f1e75dc3f66ffa723dabb88f16a7dd8b06c086c96ee442668c469628129bc668266be701115cdfc3de83908137ae7d243eebc7b3667202afa62e7dec25f3c953172f209ef5e0966f36ddabc3726986fe3a75b4be261bad986977dcae9d81714e2d5facc54755e3661bedc1e502a1ab958b9eae246ed89be75f6b6e2881a10a874f13133ab72dedbc2d88c84445e74531325756c993217b2962089413004bd695face61672529b45f0274a6d976e52c441dea72ca36652e03a7b81dcbab499a5f12ef57b4757c06ddfbdb62f7f5fbdf89e72e9cf7cbf07602756d2a8f7c657237b29a0fabbf8fc199b87948a50994dea67c7bcfb56c997a45fccf558227edeefa2ebebdcc25dad831d7462d5e50b138a8141d3f5ee30d14c4d86923b83f4de88c5dbc43c434201202bc20868c6921ec32f983f152 COUNT = 96 -K = 774c38fca9b2b8c53e139ec64c7184723893a2f6207cfbaf42b3560b50755387 -P = cd3e88ec950460e979f8a1ea752232dc3e84760dabde188ac34afe3c0f87ae19f1c090bab507c1498cd60058d5485368dcc98cb57154ae16a8b3f5e61c6e4f60e3bb8cc15a2957ecde6d92efe13771d890b62b24cbecdcb8e13848abc6c66e73d3662f3145 -C = 1bf34d5f86359e85895b99a6c153d41eebccce8ed59c1461503beb4b53c2faaed1e4741373d54f0f89c1f676b7d11232982132be02a4ffd84a4ff78d78e20de91290009c02c17e9eceaed15d3c699e92bf32d8e5e0164f4ec9061bffd22f03b199f537420817b92d2f6639abf8274cc4 +K = 3677fd99e0c768d7775ee22900e7c6af59bde398e2df0fe0910234741390f2e7 +P = 7517646ce7e1f66e14b85f94f0ccbc46d5fadf84921e3caf80ee77d4f0e6e3175ce2b7a165d1911ef8d67e98f0ec86f8d30d8a2364ae05b2ba61bed3c8d899a9df0c00705fef007ad158bf8945d383b354854686c79ac7e1caf5318d1db21522f31b2dda80f5293fad98cb3af2c7fc8aa1b6e65b65e2eee1309044de78b2b67567dbf7fbdf86273fae56e217f580a2297aa81316433f648dac9381cbdda074574d0398a6ed3822ead59edaaf873700c9aded537223af8a3036773085be7ac9b737d3536787876ec6cbf27f2bd44e9d548b9cc5b281eb93ca7aa95500852e25f344276537bccde01c9a5e5d0f0db1bdb0be3a058c023574dfcf75a3d6286b5a750f07f4ca90a53e797e4fb56784dd8045cbec0c539dc81d799edbd72e75d007528d197dcf76aace16911bc783acda991aace58e1e1d1e5ad6615ed0f0259c36e6b5ccbdd986bfe42525a5fc22a562e129751e3dd8860492250a9ba5740b374336cd21312e829ba3129fe46949b7527cba70255a1c95ddde0637f042c18b98250e378f4df874fa59363990ac7e17cbe61efb2f6dd63ad9549c2c66d286516af1bd1150824b84ed05bc223f6557cf7aa7b976408579263619d8b24d2b40ae0a3424d80e2b99bbe5d4d7fde971a06af5e459eed94e633ba0ea956bd5100adc839b0e8e1cb573a2a5cabec2d171b9b07e6c83d571a2fff8c96eff143f42a4507201ed +C = 29bf0120be2598aee0a28f6d4df1d650a4c1cb89e4603e88980aafa5fbd5671daa594c761ce5a01988eb78d190e4e42b2cfaf8b7dd24d0e77fb0b0c6b7bf27d8312c7d2dc2eb20e4b2df10cbc7e679cadfed30fc6d5596b0eeb4f80d896b536a5ab3296b1c6b520ff01cc9b22be7df29ef83384fbec1e6c3596efac34bf3dc37f6e417d9b860fa2da8d84a1aa9181235543ff994b28cd5ee2b8f249edb5d8acd81b2491544e15e15893b17122b914f7b3e91a58bd0b24f31304ad1e6ccdbfc9dc9efd11d234f493f465c24491316d5c692ee43ea4628371916d6751b4afffb3bee10bcff0d7819777aff80fcaa175dead4058de327da6ab580aa64b03e3b6ee465dde1e0c07de4b2850b21b8254450245d1161f484771d34d0790d48713c90a2fe67c9f2f46a9a9fe33c2ace73d084197ec842f66c6b76a269e63b5fdac2c8a658821c24ddb15c6164e31a31556931fcc31791a725ca669ff67a0c8d218bb7ce71178e55372f2ba179cbc6aa3e95022eeb243b8dffd14c4cf6c4d6b2955bddcdce8cebb47ddc11058cab36cb01ca9535baba5198d0d1a70c6576169dedf18c30246bba6cba81946ccfc395dc31d5de19c6ee6164bbd67fe9a09d27b7b930aa661a8c2760f4085a69d30cfea86d75567283971e24523e60acd31ae51a975bfa0b0b513f8dcc0b95c4ff6fb960eaf25c08de0b03e5c7f063adfa456a02b222a8d88154f475ce1261d9 COUNT = 97 -K = fdcf348e561698f42235804827fd08c77c61a744ed59bd8cdf05f8a3683335cd -P = ffa58f74cfe26f8e89657011354f6fac272244f88c8b1d2a01bc8b55d63bf131ed9eff6ac44a08639e2e7007a462f30c82b05df0f44ca059466dfbfae7a927bfcf02d5a5c0509124330076c39bf98764bf5a6a5cc58f446d3758eb997a19d8494822df3b0b -C = 1e1fd89356b0220d25e5b834bc220edf4442d6e234d2cc406d8ad3283e49ec2902b2db5c95dec1e55c98e364afa3960ac68fa1c3d0af9479c4aacd2201c1e99f46fed31c8d68291d9e3399e6e14c0de593bc0dd7b1ee894aafa8326ad07c22871a3ee026f533214531d152457f9369c0 +K = 5fcac558586cde7e52e7bcee53a62d93ae7a9b5031815852d81a7fe1f7b6d451 +P = 88ceb8d1916fc419f7bb56e28c60a1d57efb59caca374a9b0a6e2d39da7a6b8392130208119797e4e1a28b20637e682d5f0d842f75e7eea8d3663c0af5436a638ea0eebdd898428697e1a55ba21d58091f5532bfab67aa5d64d1c8958f78cec64b8800a29f79b1367219319ba8f472b1134d7ad4530dc1898e62646bad8027544f137b256caa3447adf60905df69de8f488ea3483cbff9aabca88dd79c0bafab3e995d3a3c4cb7be874af881e474f62ed966794c503edc54381bc97d9ed6448fbe81ddb620d13ec0faade41ad004195fc2d4fbd1c1693295c848f911838bc45b2ca32f239f0de24a0939af5005e89feac9b6d9ae99de11862e365334d7d8e95df37c6fed2241e61d2a156e45a403813293b818659bf7a583c488e49ae757e09955cede621791aa5403156326b757f6cf59d70012ffa25e95a19b1812d20cfc8603b304feb779368652e42b16bf89b6a348fedba639ccb4da98c3d4c20f9e1b3a9886def6a5318786da569a298e058ed51d2f964242afefca3ee8eb99b0d9120081b1caa47245ac890d2fc5b7ec12adb736a75c461962394801ae91b7a6c29d93a1c66eab15e2ab5846cce8f790236385cc8dab9bf7b82ec55945ad0595d1af581a911f394084a14248be149960daf08596a63db6f1d21a0076377352a6e2bb297f2688751957e16c7de9951b192aac0fe21bab0a5bf452118c9cf503700fb130 +C = c623269172f31b66983c9cf0d524d8c47c051994ee2013e2b53d3f7d5b2c7e0a3ba8b742039d2a9063ecf4cdaf31878f8175eed3adc0dbf00b36de24c064e201fdc58f712d31ca3623822eed723e2866d06af8408a1b7c5c4ae9ef79b3f3029ac96ff81b778c1f22e28d9e98809535a370402f97484178bec321c803c4104d96ed06f72c15f7937b74bb3dba6810385a374885f530caa47ee7b1244f1c1e001acba3125bdcabcae3f33aad71b717b4e9be264daba087e9a9ed746a788f274cd9e3a55065cf993043dd3f478432586c770d1f8578009220a13906d621eaa6e2515305198a3584900cf92d7fa17e9b735b791670491fa7e635da7beed3bcc3ca4c5768f3a1b93ad5bf62ba3cedc0e2450b5554c31675f8e667bc747e762ba47906d4ebd72b073d178902feeb6bd2e069b62f49ee96481810f116a1cadc6e34e24f0918b714f5fb3124cb8250e44dbcd56f89d349fdf1b0ee85d35dd6cc23433c1ced6897a61c62283578f31a4dc0a63384fe53d127186754d0d7d645fa92af5ec97b87488cf763b9e0f0bdd18b246c6472851cfc5e7bf4ec055eb73988b12fa32e830c512973615c1b6534f0194a39cb3fc74109401954d4a64416a055c11f7ad145501204f9cb72b22c3c6daa3c9e31a77b9a22adf822cee77f55b95ed980175f38bd47b7f25971309b0fbebc9cda176112f7cc97d0470257c5dcff405004306d6e29596566a83c21 COUNT = 98 -K = 72a9716778566c2ab7071c308102dd17a2f4ef78c03b82a74c4db0acbd859fa2 -P = 0420688d794a7dd9445aa384154ab2d1092c4e91b3ed25a57f0941f06c16e807d6e6203443112467444c542a56996109aa342bf59d9537027ed72810dcd3e1f6fcad90c544f3d856ea59fdd92160aa65facb9cfa7d8b7fec0729fea3c1aca5a1079098bfb5 -C = 2e4eea87226430b141350aab1333fe012b3a9534ca789ef3cf4543ca10f06ee082d71d771c7af44e0b6242bdceeb1dd4dd8852c5a1f445f0cc20ee73f6896f3f83766a6df4bb6d647569cb3df1597460a896afa9e44f520d22a20903d802fd8d6e0cf6110de82eb7d013deec6c1afb8d +K = 8c726879537415548623a42a3875bb3df7f337ebbfd48bc26e7e18349b897f3a +P = ae4278369a7ba2bae6090ff943231f273005c1c426d23afe17ca2f3c7cdcb87f1615bd8a3a4e5c3d3dc76bf1dac4b03478235d1737038f5681805093bc590099ee4c25b2a10d7530f35b613dbbc6fd5717bcc6493444135e7bd0d8cd4b8800c01c61a42e7e6ad31fb157faf09fa25a96c47da1f7e34c8419a440cb61fcb7b9fd68b8ca1fcaff823db202e636470c594fcb26fb9213048625f0585203ebbe3cb21cf21d01c0f90ad1d0c438673e1e8f6c4264fdfe79bbcde2bdc0e9b06344cc97465b77344de783535a3a349faad12b253ac8bab923abef338b19edcfb86ebd75568352165f502ecc4d584df0db2703eabecc3b2f158b001e50a40d8bb77fee93381f5d772c81e8234f17bd1c6d45fc0a9804a3b7a86eb1e8fd1bc5ea45aee7827d22ea6685ee8ace693f820d3adeb627ccc79cd2632c7f03b4110568b58c14fc3220e79f2f098b45292310ea8c9a4ee09ec73cc4fd4d9de4760486e1242276a35e2303ff0035fc4b2af5567f20e96251fe6d8aaaaa54eca0374ae33acbb84e381f991f6fc4c525c8bb03d31e2f40c7a2f6fe2870515420b0a9162f011eef135e0f5ccfe53007cc1a8777c244850364183b8864889b8943c17c35097383885cc00efb40cf9602f092d58b1a4480648fb43980d26f08faafa25fdd2a2bb8624da9e6ff5405447b7096b5a5d43eb2eff711bc7607004cc47394dd5e5da043710f89 +C = d7c640db02a5cff95a2fb5878cec514a8c3036a59161d24620dc931744814d655b46ee2d19b6e8699be627da7d6e60b23271443e803c0d31efc0e276a9f0fa20ca0ec02f8760346df548088b52259e835b77d8a180684204e43c428d3df4b5c1b8fd483493654b95ebf3e4c68f25d3528f63b94050f8a41e7cc1f89f8a2ff677710ba4c68cdffc275dcb12a250f93e9fa0fe65da9deb23bb36cb25b62bfab45d6fd7f5f8d3d4714ee65569933419423b73567fc4612406a6f7ed50a403a00e2011896348d429d6aa4e5c7b3563eafa852e2acc2da5b1a879f6d0888021923e589751d733e831732f9effdda3510ed79c47c02f6c267733d50ff4daf0cf8fb1ba5d786a66e867214497244611762d09ca5642d44f37df2357e95616c232af88c1006989e6d737d92a492a2f0c8df57b602eeca951cbaed5eb6f0d844c87f341426931ccb7c03c4cf3d8eafda1fed73df7351303d81a62bf85530646dac82b8471f41397f9044d13a5c2da7c3a7b5ff18591df10f4d2c8dc814faa556acddb2343f806b2be981cdd3e91a4571dbeb562523d2dbec68303b0b65948a05ff813d36a7f486c9ffc257745b752c8ddb7aaddbfd6b020738e4021871a23d5ce7e74b980ecfa6705432c86513353243e69bb0c872973795679de0db7b14d413edd8f54dbebffbeccaefd4897bec9862053e4eca8aecf1a6ded08b65e6a7d5be963ae6f496306ea58370ec265 COUNT = 99 -K = d7ee53622e9d9bc5cc5778cb33a717ab0b39c1647bf078d96dcf96fbed6cac62 -P = 19104081e852f24fb856e9dc515934c5ed9184a91731803b25f363d5661faec7c1c145c7480b2d6cb8443bb2fc01f7ba34a3b0c93635c820066eb6e7fb9ef3c7fb553adb8270e746c667a18474fa3d9c1a69318681486caacff5a1d57433ecfccb41fd4501 -C = 7dfbb5eb594ae4783ae691ae7cedfa0053bbac0b9d0af99d0a1b4be8e75b412eecd816618ea7a43350546955ff663c2dc13e6874da7ed91ddd31d90c1f240df9da8f7154c0cd83923e949db3daca676b4cee501564ae7bd1063b05497efe40f272fce370706dd104e2cef7e37b18777e +K = 7bf972262d32eabfd36c3295e4bca02f776282faabc07e4382d16b26cb585e3e +P = 4eb8ac8055484c301be02569bd8b00014f9f8ab4ac6890f4f83bfb27d6fddc401d34473dbe000aa00d2a87f38d38656a9761896680256f7c97c3063b0b0c0a5a9a30b108bac8e46f94706ebca96fbce8f89e3be191f8fc2af868dbac7e6e84952dec15a7b5897739ae151ef2ad7d8978da989d771f614e162ada98a96cff45a693d664f90a9a7218c72ac79b45e4de0b95407b9618026f8584c77a7db11b40c07370da648bcd0c3e5b3b49de19bc5f1e44868613da0945a09c810726ec27ea3ef1e1a5f29f2e3b7f5c6e8e05ed9f0594e8773f11c2e3ea122f96bfe14eeed73daa61a310ebfb130e52011f792d5441f0cc7cb709a1b5050b2429afbc46570a58ff685b3412ff25308ad4cfe7d5f6ab0458f8fcecbe48e0110c9a56f73fbb1f57f34746751f632d61f859ea03dbc5d2b833af465448b7d5207f26cee843c068bc1481f856fb2fc4ae92eaa9f7cc575c8124feb01425388e5a4ad9a9c4e983f3e289b22b8e1d75e7b98117d3fa9f85d53c4b2b2ef5db7b5f274476a859381120b32a11ce8c38b80e2b8ebd88f78884253caff31d71b1bd0ade2b79cb2590ed85560e926629242fe88d1af8bd2eaab57c142e23b43b572a5ee4d80a985e4333e369aa815daaefa8f9f9efee3e2e8352584eb0d1b29be09a27f2284159fb150e22dd3335e3a54fe6df8d75d6def9e384876bcedba6b53121baaaf20b08f444859fa6 +C = b1eab89a6e4ee511e26dc83e6afaef4bde12008bd7f406f962d032ba95dc76eae8f6af7aff44c7c881d64e11f426e31b726439883660f3ee1f419a5b27ce2e2aef6d58c904a0f905e99988ff79dd042fa7884dda50f3b1593e5fe87e5cf7a81dda2d79df8b08fecfb676e34849a173a6aa3c69cfb0de58e5d3108007053c43405b5962e692e1f8715b5ad964ed6b9fe780b16a98841c7d6e50be40a90d6ccfcad37a67704563c23eca129a6db572dea32fe74d6664e66d346af591858b230a1c442dc5b13d5534e75badfd37895a200f08f506a0fbbb34877b8c88546b5806435269dc52ccc2f04b0878cc5a2edd0aa4ba79133e49e8364d842b09e0dd2f3ec6bc3a545e4c2fb1d4ff58228c2523d852a668f67e563d9d1d29f68c4302db882599b3909e2d67c98c67ab6b96500f63b09aa6b9db8bf46a8ff9552ff71944263c35b5eeac032da12d80e3717ee03ed386098e6b987f99e53b6247a8479cd6faecd29b06fbaf5b1d44c789f7398b386f75e9f9153490f0c5693664ad44b4f04fe831f3c57b1b9777d4e811ee3bce35bbcb1331f64a21518009884ff652af09a039fa9a84634ada5204995135f9c9833c8628f427d887b535489d77e3310e661be9eb0fa02866e0988798b0eb40cc3c504eeef60f3ae764cae439bb462b152ae277ebd01547d67b50a6595b674f2661f72a067b40aaa50f783d18233e4f4dd66e9787ae1263e9e9c147 From 4dfaef22b672940bbaf9eb14ea6c1aa473709af1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 15 Apr 2018 05:44:34 -0400 Subject: [PATCH 210/988] temporarily fix tests (#4195) --- Jenkinsfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index ca49527caa1a..2f1d7492f52f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -346,7 +346,9 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini - pip install coverage==4.3.4 + # TODO: drop --no-cache-dir once pip fixes: + # https://github.com/pypa/pip/issues/5231 + pip install --no-cache-dir coverage==4.3.4 bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME """ } From 3414f5c8854cf78ed748f4075aee3933d026cf2d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 15 Apr 2018 19:41:11 -0400 Subject: [PATCH 211/988] Update URLs for new pypi! (#4194) * Update URLs for new pypi! * trailing slash * grump --- README.rst | 2 +- docs/development/custom-vectors/secp256k1.rst | 2 +- docs/development/getting-started.rst | 10 +++++----- release.py | 4 ++++ 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index 04b9ea4212a3..13f2d7d11189 100644 --- a/README.rst +++ b/README.rst @@ -2,7 +2,7 @@ pyca/cryptography ================= .. image:: https://img.shields.io/pypi/v/cryptography.svg - :target: https://pypi.python.org/pypi/cryptography/ + :target: https://pypi.org/project/cryptography/ :alt: Latest Version .. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest diff --git a/docs/development/custom-vectors/secp256k1.rst b/docs/development/custom-vectors/secp256k1.rst index b19bf4e4d442..e0579b4fbd1d 100644 --- a/docs/development/custom-vectors/secp256k1.rst +++ b/docs/development/custom-vectors/secp256k1.rst @@ -29,4 +29,4 @@ the following python script was run to generate the vector files. Download link: :download:`verify_secp256k1.py ` -.. _`pure Python ecdsa`: https://pypi.python.org/pypi/ecdsa +.. _`pure Python ecdsa`: https://pypi.org/project/ecdsa/ diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index 415f5d8e8f77..96b4b6d74f91 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -106,10 +106,10 @@ The HTML documentation index can now be found at .. _`Homebrew`: https://brew.sh .. _`MacPorts`: https://www.macports.org .. _`OpenSSL`: https://www.openssl.org -.. _`pytest`: https://pypi.python.org/pypi/pytest -.. _`tox`: https://pypi.python.org/pypi/tox -.. _`virtualenv`: https://pypi.python.org/pypi/virtualenv -.. _`pip`: https://pypi.python.org/pypi/pip -.. _`sphinx`: https://pypi.python.org/pypi/Sphinx +.. _`pytest`: https://pypi.org/project/pytest/ +.. _`tox`: https://pypi.org/project/tox/ +.. _`virtualenv`: https://pypi.org/project/virtualenv/ +.. _`pip`: https://pypi.org/project/pip/ +.. _`sphinx`: https://pypi.org/project/Sphinx/ .. _`reStructured Text`: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html .. _`this Github issue`: https://github.com/rfk/pyenchant/issues/42 diff --git a/release.py b/release.py index 07c5609b79cb..a994b2aeb8ac 100644 --- a/release.py +++ b/release.py @@ -117,6 +117,10 @@ def release(version): "PURGE", "https://pypi.python.org/simple/cryptography/" ) response.raise_for_status() + response = session.request( + "PURGE", "https://pypi.org/simple/cryptography/" + ) + response.raise_for_status() token = getpass.getpass("Input the Jenkins token: ") response = session.get( From cd46145aa4ebc4e337ea5d8891e0a586c20f586d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 17 Apr 2018 09:16:42 -0400 Subject: [PATCH 212/988] Remove CDN purging, the new PyPI does the right thing (#4198) --- release.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/release.py b/release.py index a994b2aeb8ac..d7c18d1050fd 100644 --- a/release.py +++ b/release.py @@ -110,18 +110,6 @@ def release(version): session = requests.Session() - # This tells the CDN to delete the cached response for the URL. We do this - # so that the Jenkins builders will see the new sdist immediately when they - # go to build the wheels. - response = session.request( - "PURGE", "https://pypi.python.org/simple/cryptography/" - ) - response.raise_for_status() - response = session.request( - "PURGE", "https://pypi.org/simple/cryptography/" - ) - response.raise_for_status() - token = getpass.getpass("Input the Jenkins token: ") response = session.get( "{0}/buildWithParameters".format(JENKINS_URL), From af3f9b8752386f9acb41e3b21b3dd73fe3b7a6a1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 20 Apr 2018 00:29:28 -0400 Subject: [PATCH 213/988] Revert #4195 (#4201) Fixes #4196 --- Jenkinsfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2f1d7492f52f..ca49527caa1a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -346,9 +346,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini - # TODO: drop --no-cache-dir once pip fixes: - # https://github.com/pypa/pip/issues/5231 - pip install --no-cache-dir coverage==4.3.4 + pip install coverage==4.3.4 bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME """ } From a63416723afbd7492b11496322fc42ae2efbd51d Mon Sep 17 00:00:00 2001 From: Denis Lila Date: Sat, 21 Apr 2018 13:03:46 -0700 Subject: [PATCH 214/988] add custom extensions functions for openssl >=1.0.2 (#4202) * add custom extensions functions for openssl >=1.0.2 * Fix style problems --- src/_cffi_src/openssl/ssl.py | 68 +++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 9 +++ 2 files changed, 77 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 29331145c696..4fdd6d67a429 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -48,6 +48,7 @@ static const long Cryptography_HAS_ALPN; static const long Cryptography_HAS_NEXTPROTONEG; static const long Cryptography_HAS_SET_CERT_CB; +static const long Cryptography_HAS_CUSTOM_EXT; static const long SSL_FILETYPE_PEM; static const long SSL_FILETYPE_ASN1; @@ -488,6 +489,35 @@ long DTLSv1_handle_timeout(SSL *); long DTLS_set_link_mtu(SSL *, long); long DTLS_get_link_min_mtu(SSL *); + +/* Custom extensions. */ +typedef int (*custom_ext_add_cb)(SSL *, unsigned int, + const unsigned char **, + size_t *, int *, + void *); + +typedef void (*custom_ext_free_cb)(SSL *, unsigned int, + const unsigned char *, + void *); + +typedef int (*custom_ext_parse_cb)(SSL *, unsigned int, + const unsigned char *, + size_t, int *, + void *); + +int SSL_CTX_add_client_custom_ext(SSL_CTX *, unsigned int, + custom_ext_add_cb, + custom_ext_free_cb, void *, + custom_ext_parse_cb, + void *); + +int SSL_CTX_add_server_custom_ext(SSL_CTX *, unsigned int, + custom_ext_add_cb, + custom_ext_free_cb, void *, + custom_ext_parse_cb, + void *); + +int SSL_extension_supported(unsigned int); """ CUSTOMIZATIONS = """ @@ -708,4 +738,42 @@ #else static const long Cryptography_HAS_PSK = 1; #endif + +/* + * Custom extensions were added in 1.0.2. 1.1.1 is adding a more general + * SSL_CTX_add_custom_ext function, but we're not binding that yet. + */ +#if CRYPTOGRAPHY_OPENSSL_102_OR_GREATER +static const long Cryptography_HAS_CUSTOM_EXT = 1; +#else +static const long Cryptography_HAS_CUSTOM_EXT = 0; + +typedef int (*custom_ext_add_cb)(SSL *, unsigned int, + const unsigned char **, + size_t *, int *, + void *); + +typedef void (*custom_ext_free_cb)(SSL *, unsigned int, + const unsigned char *, + void *); + +typedef int (*custom_ext_parse_cb)(SSL *, unsigned int, + const unsigned char *, + size_t, int *, + void *); + +int (*SSL_CTX_add_client_custom_ext)(SSL_CTX *, unsigned int, + custom_ext_add_cb, + custom_ext_free_cb, void *, + custom_ext_parse_cb, + void *) = NULL; + +int (*SSL_CTX_add_server_custom_ext)(SSL_CTX *, unsigned int, + custom_ext_add_cb, + custom_ext_free_cb, void *, + custom_ext_parse_cb, + void *) = NULL; + +int (*SSL_extension_supported)(unsigned int) = NULL; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 3cdafd6773fe..971e540cb744 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -236,6 +236,14 @@ def cryptography_has_psk(): ] +def cryptography_has_custom_ext(): + return [ + "SSL_CTX_add_client_custom_ext", + "SSL_CTX_add_server_custom_ext", + "SSL_extension_supported", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -287,4 +295,5 @@ def cryptography_has_psk(): "Cryptography_HAS_FIPS": cryptography_has_fips, "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs, "Cryptography_HAS_PSK": cryptography_has_psk, + "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext, } From e49bb156565a1042a98638e5cc9bd1b9b4b21ae9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 22 Apr 2018 10:20:54 -0400 Subject: [PATCH 215/988] Remove setup.py branch (#4203) --- setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 4d7f5c2b02d9..0d715208f68c 100644 --- a/setup.py +++ b/setup.py @@ -43,7 +43,7 @@ VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__']) -setup_requirements = [] +setup_requirements = ["cffi>=1.7,!=1.11.3"] if platform.python_implementation() == "PyPy": if sys.pypy_version_info < (5, 3): @@ -51,8 +51,6 @@ "cryptography is not compatible with PyPy < 5.3. Please upgrade " "PyPy to use this library." ) -else: - setup_requirements.append("cffi>=1.7,!=1.11.3") test_requirements = [ "pytest>=3.2.1,!=3.3.0", From 31808ded50cc7e6e031b1069a72cc734670ae8cc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 22 Apr 2018 17:48:31 -0400 Subject: [PATCH 216/988] bump openssl version in travis (#4204) --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7e5109ad77ce..87673d7eaab6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,11 +34,11 @@ matrix: - python: pypy3.5-5.10.1 env: TOXENV=pypy3-nocoverage - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.0g + env: TOXENV=py27 OPENSSL=1.1.0h - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0g + env: TOXENV=py35 OPENSSL=1.1.0h - python: 2.7 - env: TOXENV=docs OPENSSL=1.1.0g + env: TOXENV=docs OPENSSL=1.1.0h addons: apt: packages: From c81df6b255e4e767419bccbeff033497fd1324e9 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Tue, 24 Apr 2018 23:32:34 +0200 Subject: [PATCH 217/988] Add Session functions, necessary to implement new features in Python 3.6. (#4205) --- src/_cffi_src/openssl/ssl.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 4fdd6d67a429..d9b11259dbcf 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -306,6 +306,10 @@ SSL_SESSION *SSL_get_session(const SSL *); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *, unsigned int *); +long SSL_SESSION_get_time(const SSL_SESSION *); +long SSL_SESSION_get_timeout(const SSL_SESSION *); +int SSL_SESSION_has_ticket(const SSL_SESSION *); +long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *); /* not a macro, but older OpenSSLs don't pass the args as const */ char *SSL_CIPHER_description(const SSL_CIPHER *, char *, int); @@ -570,6 +574,16 @@ memcpy(out, session->master_key, outlen); return outlen; } +/* from ssl/ssl_sess.c */ +int SSL_SESSION_has_ticket(const SSL_SESSION *s) +{ + return (s->tlsext_ticklen > 0) ? 1 : 0; +} +/* from ssl/ssl_sess.c */ +unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s) +{ + return s->tlsext_tick_lifetime_hint; +} #endif static const long Cryptography_HAS_SECURE_RENEGOTIATION = 1; From 47438529612c475f6c10a8c2826d8a16b4f83fe6 Mon Sep 17 00:00:00 2001 From: Tux Date: Tue, 24 Apr 2018 18:12:13 -0600 Subject: [PATCH 218/988] Expose OpenSSL constant time bignum arithmetic (#4200) * Expose BIGNUM constant time operations This commit exposes the following functions: BN_set_flags BN_get_flags BN_MONT_CTX_new BN_MONT_CTX_set BN_MONT_CTX_free BN_mod_exp_mont BN_mod_exp_mont_consttime This commit also exposes the BN_FLG_CONSTTIME flag. * Add myself to AUTHORS --- AUTHORS.rst | 1 + src/_cffi_src/openssl/bignum.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index 5eae73e3754e..ed9ac84ed34d 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -40,3 +40,4 @@ PGP key fingerprints are enclosed in parentheses. * Chris Wolfe * Jeremy Lainé * Denis Gladkikh +* John Pacific (2CF6 0381 B5EF 29B7 D48C 2020 7BB9 71A0 E891 44D9) diff --git a/src/_cffi_src/openssl/bignum.py b/src/_cffi_src/openssl/bignum.py index 2c140c93eeb3..0f1f83c31c98 100644 --- a/src/_cffi_src/openssl/bignum.py +++ b/src/_cffi_src/openssl/bignum.py @@ -10,11 +10,17 @@ TYPES = """ typedef ... BN_CTX; +typedef ... BN_MONT_CTX; typedef ... BIGNUM; typedef int... BN_ULONG; """ FUNCTIONS = """ +#define BN_FLG_CONSTTIME ... + +void BN_set_flags(BIGNUM *, int); +int BN_get_flags(const BIGNUM *, int); + BIGNUM *BN_new(void); void BN_free(BIGNUM *); void BN_clear_free(BIGNUM *); @@ -29,6 +35,10 @@ BIGNUM *BN_CTX_get(BN_CTX *); void BN_CTX_end(BN_CTX *); +BN_MONT_CTX *BN_MONT_CTX_new(void); +int BN_MONT_CTX_set(BN_MONT_CTX *, BIGNUM *, BN_CTX *); +void BN_MONT_CTX_free(BN_MONT_CTX *); + BIGNUM *BN_copy(BIGNUM *, const BIGNUM *); BIGNUM *BN_dup(const BIGNUM *); @@ -63,6 +73,10 @@ int BN_exp(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); int BN_mod_exp(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); +int BN_mod_exp_mont(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int BN_mod_exp_mont_consttime(BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *); int BN_gcd(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); BIGNUM *BN_mod_inverse(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); From ca2055f9822def12ec47a7b886be7c13c590b8fa Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 28 Apr 2018 15:31:02 -0400 Subject: [PATCH 219/988] Remove cffi branch for pypy that's not needed (#4209) * Remove cffi branch for pypy that's not needed * simplify further --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 0d715208f68c..13325896a899 100644 --- a/setup.py +++ b/setup.py @@ -287,11 +287,10 @@ def run_tests(self): "idna >= 2.1", "asn1crypto >= 0.21.0", "six >= 1.4.1", - ], + ] + setup_requirements, tests_require=test_requirements, extras_require={ ":python_version < '3'": ["enum34", "ipaddress"], - ":platform_python_implementation != 'PyPy'": ["cffi >= 1.7"], "test": test_requirements, "docs": [ From dd0518217b4b642151576baad6c7c0e3ad79bc9d Mon Sep 17 00:00:00 2001 From: Justin Holmes Date: Mon, 30 Apr 2018 19:22:43 -0700 Subject: [PATCH 220/988] Updated pip wheel option in installation script. (#4212) --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 90bdc2a65ffa..f96cc50570d8 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -205,7 +205,7 @@ dependencies. ./config no-shared no-ssl2 no-ssl3 -fPIC --prefix=${CWD}/openssl make && make install cd .. - CFLAGS="-I${CWD}/openssl/include" LDFLAGS="-L${CWD}/openssl/lib" pip wheel --no-use-wheel cryptography + CFLAGS="-I${CWD}/openssl/include" LDFLAGS="-L${CWD}/openssl/lib" pip wheel --no-binary :all: cryptography Building cryptography on macOS ------------------------------ From ad7263be9bbabf7027984d33f7a983f8163cc0f9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 2 May 2018 12:01:02 -0400 Subject: [PATCH 221/988] update link to draft rfc (#4214) --- src/cryptography/hazmat/backends/openssl/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 85e13b57266f..bfcf6fbad265 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1899,7 +1899,7 @@ def x25519_load_public_bytes(self, data): def x25519_load_private_bytes(self, data): # OpenSSL only has facilities for loading PKCS8 formatted private # keys using the algorithm identifiers specified in - # https://tools.ietf.org/html/draft-ietf-curdle-pkix-03. + # https://tools.ietf.org/html/draft-ietf-curdle-pkix-09. # This is the standard PKCS8 prefix for a 32 byte X25519 key. # The form is: # 0:d=0 hl=2 l= 46 cons: SEQUENCE From 0f24bfee532f108118b5b9704f4d838096aa97d6 Mon Sep 17 00:00:00 2001 From: Joshua Crowgey Date: Mon, 7 May 2018 12:01:07 -0700 Subject: [PATCH 222/988] adding name so that 1.3.6.1.4.1.11129.2.4.2 is no longer and 'Unknown OID' (#4218) --- src/cryptography/x509/oid.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index fedea310f217..8b92d6b389e3 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -241,6 +241,9 @@ class CertificatePoliciesOID(object): ExtensionOID.SUBJECT_ALTERNATIVE_NAME: "subjectAltName", ExtensionOID.ISSUER_ALTERNATIVE_NAME: "issuerAltName", ExtensionOID.BASIC_CONSTRAINTS: "basicConstraints", + ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: ( + "signedCertificateTimestampList" + ), CRLEntryExtensionOID.CRL_REASON: "cRLReason", CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate", CRLEntryExtensionOID.CERTIFICATE_ISSUER: "certificateIssuer", From 528eb1b4be65d5ad779cbde80680b49a7e5c6d03 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Wed, 9 May 2018 11:36:02 -0400 Subject: [PATCH 223/988] Remove unused BN bindings. (#4219) * Remove unused BN bindings. These appear to be unused in both cryptography.io and PyOpenSSL. * Restore symbols used by pyUmbral. Along the way, fix some mistranscribed consts. --- src/_cffi_src/openssl/bignum.py | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/src/_cffi_src/openssl/bignum.py b/src/_cffi_src/openssl/bignum.py index 0f1f83c31c98..eab40284c899 100644 --- a/src/_cffi_src/openssl/bignum.py +++ b/src/_cffi_src/openssl/bignum.py @@ -19,14 +19,12 @@ #define BN_FLG_CONSTTIME ... void BN_set_flags(BIGNUM *, int); -int BN_get_flags(const BIGNUM *, int); BIGNUM *BN_new(void); void BN_free(BIGNUM *); void BN_clear_free(BIGNUM *); -int BN_rand(BIGNUM *, int, int, int); -int BN_rand_range(BIGNUM *, BIGNUM *); +int BN_rand_range(BIGNUM *, const BIGNUM *); BN_CTX *BN_CTX_new(void); void BN_CTX_free(BN_CTX *); @@ -36,20 +34,17 @@ void BN_CTX_end(BN_CTX *); BN_MONT_CTX *BN_MONT_CTX_new(void); -int BN_MONT_CTX_set(BN_MONT_CTX *, BIGNUM *, BN_CTX *); +int BN_MONT_CTX_set(BN_MONT_CTX *, const BIGNUM *, BN_CTX *); void BN_MONT_CTX_free(BN_MONT_CTX *); -BIGNUM *BN_copy(BIGNUM *, const BIGNUM *); BIGNUM *BN_dup(const BIGNUM *); int BN_set_word(BIGNUM *, BN_ULONG); -BN_ULONG BN_get_word(const BIGNUM *); const BIGNUM *BN_value_one(void); char *BN_bn2hex(const BIGNUM *); int BN_hex2bn(BIGNUM **, const char *); -int BN_dec2bn(BIGNUM **, const char *); int BN_bn2bin(const BIGNUM *, unsigned char *); BIGNUM *BN_bin2bn(const unsigned char *, int, BIGNUM *); @@ -59,9 +54,6 @@ int BN_cmp(const BIGNUM *, const BIGNUM *); int BN_add(BIGNUM *, const BIGNUM *, const BIGNUM *); int BN_sub(BIGNUM *, const BIGNUM *, const BIGNUM *); -int BN_mul(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -int BN_sqr(BIGNUM *, const BIGNUM *, BN_CTX *); -int BN_div(BIGNUM *, BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); int BN_nnmod(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); int BN_mod_add(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); @@ -69,35 +61,17 @@ BN_CTX *); int BN_mod_mul(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -int BN_mod_sqr(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -int BN_exp(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); int BN_mod_exp(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); int BN_mod_exp_mont(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); int BN_mod_exp_mont_consttime(BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int BN_gcd(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); BIGNUM *BN_mod_inverse(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -int BN_set_bit(BIGNUM *, int); -int BN_clear_bit(BIGNUM *, int); - -int BN_is_bit_set(const BIGNUM *, int); - -int BN_mask_bits(BIGNUM *, int); - int BN_num_bytes(const BIGNUM *); -int BN_zero(BIGNUM *); -int BN_one(BIGNUM *); int BN_mod(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); - -int BN_lshift(BIGNUM *, const BIGNUM *, int); -int BN_lshift1(BIGNUM *, BIGNUM *); - -int BN_rshift(BIGNUM *, BIGNUM *, int); -int BN_rshift1(BIGNUM *, BIGNUM *); """ CUSTOMIZATIONS = """ From 2bc941d85df430a4dcbb3ac1b696946c3ec87fd9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 9 May 2018 11:45:55 -0500 Subject: [PATCH 224/988] add SHA3 and SHAKE vectors (#4213) These can be used when OpenSSL 1.1.1 is released --- docs/development/test-vectors.rst | 2 + .../hashes/SHA3/SHA3_224LongMsg.rsp | 408 ++ .../hashes/SHA3/SHA3_224Monte.rsp | 309 + .../hashes/SHA3/SHA3_224ShortMsg.rsp | 588 ++ .../hashes/SHA3/SHA3_256LongMsg.rsp | 408 ++ .../hashes/SHA3/SHA3_256Monte.rsp | 310 + .../hashes/SHA3/SHA3_256ShortMsg.rsp | 555 ++ .../hashes/SHA3/SHA3_384LongMsg.rsp | 408 ++ .../hashes/SHA3/SHA3_384Monte.rsp | 310 + .../hashes/SHA3/SHA3_384ShortMsg.rsp | 427 ++ .../hashes/SHA3/SHA3_512LongMsg.rsp | 408 ++ .../hashes/SHA3/SHA3_512Monte.rsp | 310 + .../hashes/SHA3/SHA3_512ShortMsg.rsp | 299 + .../hashes/SHAKE/SHAKE128LongMsg.rsp | 408 ++ .../hashes/SHAKE/SHAKE128Monte.rsp | 411 ++ .../hashes/SHAKE/SHAKE128ShortMsg.rsp | 1356 ++++ .../hashes/SHAKE/SHAKE128VariableOut.rsp | 5639 +++++++++++++++ .../hashes/SHAKE/SHAKE256LongMsg.rsp | 408 ++ .../hashes/SHAKE/SHAKE256Monte.rsp | 411 ++ .../hashes/SHAKE/SHAKE256ShortMsg.rsp | 1100 +++ .../hashes/SHAKE/SHAKE256VariableOut.rsp | 6239 +++++++++++++++++ 21 files changed, 20714 insertions(+) create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp create mode 100755 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index fec0363f5e8e..3eb810ccf71a 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -406,6 +406,8 @@ Hashes * RIPEMD160 from the `RIPEMD website`_. * SHA1 from `NIST CAVP`_. * SHA2 (224, 256, 384, 512) from `NIST CAVP`_. +* SHA3 (224, 256, 384, 512) from `NIST CAVP`_. +* SHAKE (128, 256) from `NIST CAVP`_. * Blake2s and Blake2b from OpenSSL `test/evptests.txt`_. HMAC diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp new file mode 100755 index 000000000000..7eb3e5b77213 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp @@ -0,0 +1,408 @@ +# CAVS 19.0 +# "SHA3-224 LongMsg" information for "SHA3AllBytes1-28-16" +# SHA3-224 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:43 2016 + +[L = 224] + +Len = 2312 +Msg = 31c82d71785b7ca6b651cb6c8c9ad5e2aceb0b0633c088d33aa247ada7a594ff4936c023251319820a9b19fc6c48de8a6f7ada214176ccdaadaeef51ed43714ac0c8269bbd497e46e78bb5e58196494b2471b1680e2d4c6dbd249831bd83a4d3be06c8a2e903933974aa05ee748bfe6ef359f7a143edf0d4918da916bd6f15e26a790cff514b40a5da7f72e1ed2fe63a05b8149587bea05653718cc8980eadbfeca85b7c9c286dd040936585938be7f98219700c83a9443c2856a80ff46852b26d1b1edf72a30203cf6c44a10fa6eaf1920173cedfb5c4cf3ac665b37a86ed02155bbbf17dc2e786af9478fe0889d86c5bfa85a242eb0854b1482b7bd16f67f80bef9c7a628f05a107936a64273a97b0088b0e515451f916b5656230a12ba6dc78 +MD = aab23c9e7fb9d7dacefdfd0b1ae85ab1374abff7c4e3f7556ecae412 + +Len = 3472 +Msg = ab4f9d765085ccb474be6e2369568292532f6fa4dd9c50d02a7d8fab0fabb56a7f9680a2462c3753fafd3a252f9dddf1eb4a76835acfb59fc2a83441b8674f2995573697245e40549d2883f1d781a153b903e470f2f28e53e9646a66f7a5a7f0d5d9e6dd50e392be44867010c7ca77c1a5a2e1f00dcb82f589f759a1332b65c62766b9fa3483d399d7602a0969400642976e948d13243a8b89aa287ad5c230b47344d7783606aced3dfed86424abf7de77b026ce6cc35d20d1c500794332b0c1a1bc67dfc033c4c360a8a3aa5fd2f19d2db1bf3b807094b949900827e6438ef5991692b539d3c42227a6b362847e9d88a1b6855db7f58760d953690b26bd7258439a7f8409ae53137a3f2f14fa77a2a6bc0aa3bb7a19dd1c69554aae6c6703f3879057d3978c1a9d41bd3f492985aa0064f43fde2fa33ff6e1dfd4961e0aeacd4e3f412b4d35c0c864660d8779705a9c82bb824c405c54f429392e4da66ecfee7ef066139270ee9ccc83be5952ff5c84ffa8938f130cc52129ab825b6a5b585f01ebed13ce074c225f5b7d441cfc58c0c1039a2f127b3982ca7df546d4993027bd78ffb36ac08161063870d23f2df556b214 +MD = d61f04985026eee29d0f9700f8c5aea32ec2c23b1a9357edeb2be20c + +Len = 4632 +Msg = 1050e9023d6cef2477171a5af4875e12763dc68568ce1d9629e9eefda896b0a431bc3a5186e67d86324671a61afb5058558f03303dc4d98dc6907fbd0f662d6837b71d2b72b941835c6735ed8dc9734b6d75c68a49560182a7acf01dd7548fbccb4a7ad6296ca5e29d804d7874792eb367f6f7d9b40cfb3e7445296528e83e69957b399bd2870f6d9f9ba18ff893eb57ea1a7e66a66e3089d46412dd29aba2373c5442c29592e9ea07bf197941a011009fea43794605082a6f0f93cd032423ed69dd7d939b169a2280f59d80762808762d6d2e5abc58ecebee51947cdddc2a55c31dd3560c9b8addb04415eabfb137813eac285031ef4292f92ffd33e0591d35f31c2a5210a721e33fb4690045c508e977ad17a4cd5373e837b3b63a34256656a0e26cd0cdc4c7fbd64d810a30ebe275827ae59fb70be8b551e4a7d900c86b8073787f186e79e4ef1d184550a8ac2def071b7886189f08c1eecab9586cc8967a13e54d72194ee085bb1c9e19d48e521dad96baa417983ad3b76ed2fea2af4e0e2a31bc26f7cc2386596172afdc1bb7c71df59140dd7de8b554d7db14c704fa025d65b67b2f7a15b99ef0ab58e9dbc5b7ff40e7a191d6792d6c0dbde20650041f568722bae9e11fe833d02f5d2355e4b4fa7da3105c2c5504a7195eb0851ad32dbda2e72c4f87a7d9bf09e806b1117d85b6b6add56605e402af02a8c66ceacff439bbef1686f61755eba4bc9abb97f6f3dcf2ed38d6ec8dee29d0826be448603b73dc21c3b9b6d5245fa895636b70b9c6143a4b81d466bb91c08cd3e915bdeecc130c65 +MD = 5c029633dfd4cd9b6ce97e1d20783a41cd2235b03c38832b90f759ee + +Len = 5792 +Msg = a63ebf8f97c6529298e4d4b573ca01d65d6758837bdec40fa4367ce56953281d5225454d6b1fcaa2ffeb0c2fa45cdf8477a4fe83a9c7ad6f3b4f9c4605420f51fd513cf9b652f4dc27f08620aea1e10755d9f8c4537e6b8ed69b63f2ff58bd6d2e2a6c3a81471869975d0b319a834e877c700fef80ea4693fd8299925f7f7c9a6e189cb9d3e67e70d798630a6fe9702b76cf0bac39f588a6386c05cd2b9e92004483961eb4176e1a700b565235ba8d1cc960b4a2858677f110c1704c6d9c48c638d320102cc22f8fe91cacb1f4e0ee820089d27a6c865d990ce9a2b72c63e615d270033744cf0af6ca352cd1b542db84a0b42cdcf6db80c9b54d63b571dab4149bc2073c032647779cbda0577fc89b4a33488b6e2c6e29a791537bee43e9faec1a32f3c772af2e3ce61cceee5b5a78fd41adb7db15279f5b2a64b10baa78ffc4d726917f9753066a30b97e3c50e0b8c5504a78c9b9ee2c0e08e9ceb4ae6f0cc55b07a70d7cf8192c03fe7ae96642a4c9ea8996e121ac16e8b1489b9058b669162d3efe182987ada8e552899ea568843296d1d8ca5447a610afebdd48af365ee1d6315e49a4e90b06611d7203163ba027dd8b072c5aa924af8a385f83bbd5334bdc4a8e48f7047b6ffcc8febfc0a13fd1451debb13cb8d8ecc899e8ea857c2f7ec9f058bc2ac2440b40b9f57bac83ab5858f04cff015e09f0f3753f2514149ba2248a824e430ab001b4591fdee0ca2ae39e6cf2beb18201e292332ddb7183bfde7682d5a54cc3057ae0104391665c059a9ef9a597550c06eb2e3d7ab4a2b3e35b463f196a4cd78c9d4d472b3b462384a6e0002c31f4e361334efaee5ab18a4f411c2916444c2d8d9382649d858606ee2fece7503696f15ae17ad25072a5f24ab780a893dc53ad508307d1621630ec8d5c4b18d94b431d381e3b2d6aa787d21ee5fb245ad9693f1c9665f442984bbfa75684f98f1a044f45111773029e5e1111f4140531e496cb3bf3233704b0e06685451ff4394b +MD = c09d926eaef34cfacc701434da80c340337ba48e8b044b1a60da9cda + +Len = 6952 +Msg = 0f625082eaee9f064f2501022e4d7df85310de128b17fd5a08db3e2d06b85dedaf446bf73cde13d55e8a22b4dcfc47187df216ce28c753234a456e5378bc4a4456504274b7976e3005642208e4ddb87f12d490079154542c0979810f68852316cb31e0e2a14137810d5b0ae58d195a95da5d53a30fe588de0c1f7f481d3e70cbd78d4a274303f72f3f18e13520d8b5c39c36678ce8a276a11dde71e8e00dbacb420d8a2de50635a26143afdfe5414f6f2206d4a864b4a6de025e5ed6f91a877dd458a6dacf7279423b847dcb247db2033276a2e1cd43a0fb84484efab08e624b5417a918486e4c77978152e125b366e5952eda1d6976ed626b44493c4c91d09c8cf198ce992234a93be536092f0cf17f13d58446827614797ff95884174a5bd9428f7de40bb7bb40f056312b8cb0dd377313a6435e6b9daa881082ba57e28a683f985f41e45569a47e7c4c2f82c6b2777f924afc457c115c4d30d0c65581e5b24bb547cf6c23c53dad018efd5a77f6a6fdf7775981d1f6f697024890594df51f2d8e3c75ed4a5774458a007d5cea332bb6ed36425993d7e22e2ef501ab714118afca461badf2a7af0dc2a898cf48f070721a8e9f14ea3987da5bdcff9213520397116da9f5413e57ce4e9034fdb8b6dcf8268758fbfda64d63310773585cae49ae0dba080d62a3d550d9c03a2c630cd712ba295556f5a59c905a7d464373df53bc64341e3d7b5e8f5b093e93a5707ac9867e7d7f6df9bfdc2a7b465e9c806d8889bee4d4cdb5f8efb7861425b008881a1d198abc87327a75f93f6ba5aaadde4fdcc4d0130437f85c2bf94ada9453bf339f3458f5edc861d0c54bf302b720bc127f1d02c12c2ae63e810ae6999b78a67ad476f013e8e2f953564ae65c09018e38387282c78bb54bfc7f60f2490ba0c658848859fcbea8cc6774e24c9de979dd29d06b560e6901ad00eea475d42df2a53676119b9ab7436175e6bb2eac9fb0304c0faf887d103597b1957d78214997cd7a73babfd31ddb40e3757e937173cd0f0bbce720fbc77a8e773e940218a7b6c68e432bcc913697f21ae9d384d4adf802cda1ba2472d5f81cbaaf901ba18e7816d8ae0bcabb4ca0fe830a6108bd945b92fb84d19ec983d6c8e2b11bcba4480547c27c02c239a51eec859fd12714711b46fb2ed395e8193d1a570cda1b091b84e1b274babbf38938458772cae9c18c63a736676912b7df +MD = f62851d28512913aff9f697fc17bf46fe4a2548899f29af5d0c412f6 + +Len = 8112 +Msg = b7b8ac96733943c648cf833e75ca4dee7bb6cce48130fbbff6f96867784937fbf566690b10745f08c68f99f85117c46e4c4bf4ba191a2e5d803529c098695525eb2c1dddd57669bb2dd268ca27b48c3b790dd6a1bd1d53611788e76317ad490ee1334f748be46cc9c6bf771ac148ad3b4a23fa0237e174b2041a28babdbc1aa01ea28738fa696d19d97f4e51e57c305807b6e8434d0f983a8f12772c523fd0c1eca24e91e9ab7693ae3975d85cf81c79f7ed29cec84fc8e0ff9959219ddd745b915b2ae721528e1f8c167515ee63798663f144096f480b8c9ed65801673f0d5556f4a6a26b07bea5bd3ed4726266506693e9c15e0ca36926b2f2fb35780ca3978396472a8d720d0d87d81d5682a8a803cffe29346507ea978414ca2398ed3f09606897e74f3a833f330cd52914d289445f5802f2441d97c55c654e348f8ae79335931d427b07282408048652e18bfb118a1ed7026f8d7799820d0ed0248aa61d493e61a1d78305a250e5b73bb17c07529a792dcbaefe92fb3d3393602196818fe592ec6d2d5421a251daf14b4c4cb4efd5908eb5cb19f1d4d6ff634a4c5582d151b7450f4322840d5508bbea79a40bd1848c81288c859b0a959a08f86d70b0cbd5d4f4ede19637c9a29a9d80022c12deee948f8cbbea9887c22c0ad04e8e1366b9118271d15741c080b61f75ad8bd3ff5dd13e491ef2f131a5dcef3cb658b48844977602da0eaad83985ca32436a561d176a19c77e43adf286d341a36c759a1abf8e5807c3637bfb142e251d8b70a11e6588a56fa285d4b1ac39876d398ecd05721eb1ea55fdbb1058d9b99f4f46beec8f536ca754616f5660354a01e54b562fa56d0712588572ff4eb00c215593b56dddf2f5d85a7e85c8eaef11c938533c82a0a6e5e794a2a8b03ed8a80966008c8b978ec86b7d861ef19290642cfa4f87e5aaefd0d1d0fd660a6f7c15c04a354d2c044e6ec6851e42b8a040cb92f2e6403f0d705238d63eb3f72bc2d9afc9d9003a6d5b6e533af0fa055b26cf63e9c16e7a0f53f2846c0c985fb8d27e3dab94ab9c1adc507964a44dc00c6bf708a788197df9bd391d5b0f1c285fd58cd1b710583a53fa9d9fcae244d2fb36cce7f4e2493013d8ad6c6af0473b68f389d5b6f20efc60dddc2f3551e62170b0d5699877077ba4ccd8d7635721801b53ffb071e5d6ca88ac95906d993b96b3019af65af05a46f6c142c70cebb3dfc01e75caad8fb78c1590502a3a634b190b50a3f703f54b794fde71a52f5504419e7b748b3598b92a4db0966564571f93c2c579d25b2de1fcf84befd7923d1c8cfe93835bd0a9e48c7935eea9b21cbeea1e8aa3f12a4124b7393144c7fe4904aa288e2aa2456a419be046e15eed5b300868c4a9ba38d81c9359b8f6db3a24c3816493f1c85d82d73dcc0cf6ecddbb +MD = e93d038156082ba508def0a26ea9172930f546dbec5b5652928a28c7 + +Len = 9272 +Msg = b7174dd7242f30f5bcd81cb23c6f52617ff1290845b0f8b4344b36101cdce0367f731bc551c41b34fc1c4366a79a8e7eb89b2df4977672e9b56aecb7ced4d4cd6ba5a7baaa14158741901a4ac1f96bf8180f137b5a2b5e04c12df6a3f2b54c15819639ddb887e696941ce98711f5b078a73623c4153685b05d7c9bfb10e711b6cb2c195602865508fca8f7441ff727a56ef6a5f85001af93933f25e8b0d2eb5951508f4e10772b85821c8daa746596287438e03e94f3a3556a5eda915bdea1a61aebe2ed6bc330b72d60f3e197a8c6a8c2e51dbf67742b9febc1031f9873fd442ee35b5a9ad32c43055d711010297fce5ee3a4a254ec0d191c50e7b9f0f9c5dc952242be250ee7d412f94f5f684f8842521cbd10e0c3126a07f4d088ead8c215578edf4095db28105d1dd4f72681ababa676b0319562023ab49304b30e78bc987d11790971a4b99fedb24900d229aeb160dbc42cfa2fa5332916cc63e4417b0c0f92594041d0602aca9ef6a1f5ae5afd8a32422a9793c3fb706670c0f59cc61a13f8c80e8ec7e659fdcb2303167877372b637252f5f7233a916938f1c8ef666a932d0c9bdef013d38d1f184ebdefcd074c559ccd9bc18e9992096c1fe5a324a396186d0ebcb5ae4182841ca9727b2313f4f208c2115bccbf7d2d5371d521c66d25a1358fad7d814ae5e1793cbe8443062b21fe5ae02ba55659bd36101fd0147247b0aa483bb15297bd1d75302872f386f9cac5bd8f9be1032fa05d234b17d857042d165eedb7eacf122259ad39adfc3b67d5a612a611477006c010d3e260d8c76400bffc4bf8119becd76dda779d26cf7c2be981aef7a045e60497486b12dd687012ee48dedc8ea35424f8e06caa38e741b2d6342eb4b429d85439a96e94afe22f49ea6a2dcc2b8e51f144e7a03dfc2ebc53b450aeb04bc5e298401e735016deaa8efd8bc12eae05ec2697169abc3849f7f7cd00b6532dc10fb8f2d103adda04e7ca6dd3206be0af2cac3a95e291b5e3fa84676acf0521c4649d98e7a513c2fbf0e38369d4ec89351969758d00223ba2cbe4cbb6802ef176eb2d798be2ea986ccdc387766518713ebb468f267cd9922e74fd410d52366381ab51dfe3419b22fe8450c12159565f731b2bd287df1d8130fdb91097cc85408aacf210174a8c295a1f7478933a101d7b400184d9b155d1506cfe827b76834f3cf7f6555085267427a515f6f38fad710032aeee4378eb4a35cbb6dde2d8995a3c9347f6b67bd1cd0e1f1d816ae19524a7fa1c58eebe46b48821c86af37b2d273588cb3b70b3f6fab794736220b72ffe1a9f3109010aced7f0771c71d7e6a980cddf6c6ca7b5fbc4c90cffe13c99e5c60129d74ba5e5eb7b16d49a3ab5a1732bac9f10d0820a4af3ed90a945e70f1e4603a1f56402d60567a1402a0cb635f5f07bd0a1b02a39494fca2659d848a24344c90e739d3f6584643ac4b43102299599e27a0654c6ca629f09d9f7e088d9ba89fb78383e851ad03a896620efc005bdec88a627047f46fcad51ae6ba6ce3decdd40e72e8ffb7e51b13530568f1852d4b3165cec087d347e3f4baf9d724355410740643cd8ca187090e72a3e58339642b433a23da7e71c521e9ee3768c0ea922d1 +MD = b5151a41c59cc98cab7b493dae476f5a2d8b6dd9fd8ff982eca3907f + +Len = 10432 +Msg = a51ee3b7c42fae9e771e085d14fb8eacc2653931db58e1f79547ff1de26bb7cb945a166ac5db981576f9ed4a7656fce686c22950ba0cd3f4221821f3aa32ff183fa2630f3381d5d1e3cb2e6397b5a0c0a940f614ea0e1d2a4174e42895d2007aed1f530cd6c86ebc06bb540f3ebe802275062ae43205c7833a83cf246bf0c2d7e8f96dca76596abd26f2e6b5351ca6f5303d4c2a5b9ad7e6546c6a4ff4374e19765739b1dbdbd1bb8c976cbf42751a1f230ce54d2e74573ad8583d12f74cab26e061402accf7aba081d36e942e72e28a969c7cb5703c4e690e6ed1d33edae1e86e41099b135501534bce759cc0ba081cd01499caec99c55a3ed7adfb8f87f945671c1d6d769cdabc32af083fc2f694bf1b9dc5f36934c3f5b0ba59f3b3fbfa27151d0209be753fc3809fb0e5facd8c5abd5f869baeb45022ac405e2272dfec75be6942d5b38737507bc5f4f632e8fad5ff81672784c274c9799143ef93dbd817ab2b653b1c7bca4b6d4a5cda30eee518292ced00b30638d260d490c4e096c5f42489f1a2c2f8009c9c5570f9bd88560a8387a28e0327a325a932ce081fb9bbf670ab70726ea7e22b510fb9bca05e549555bb0d393ccebeab9cd2842219ebc204d9ba6912e62f77e0d39fbe89a317e7a0e6efb66a25a2904a80dd3a7c96d5e306a5de65ecf23ac8a46c2e07c98c5b17147f4c2687874c21eb9f7a787d5e1f25e51d3eeb675c6ddb5d62e41de524d4edd768fae4fa2a7379773fd2c78d38709187890383ebeb72baf5fee88743332870d2e9207829d6c0a1d4a90cae14ed702dd53154b5e066f16d528863cd4d81ffa9ed4ae66b7e53daa0ec2551b67a46c803b75c5a0aaf9691fa5e487c786ad5029e11d275445f686b7ea5fac9652808201b16543d09be43fb6bff855c0f01f8d85924caf58b36df1843e9729b4684fe1f7bd85f243b7634d7c81f892a1a7cb32ae20f7a8ec96a7e8bf89fd3f0def7ef6e2de7c637263f33cc17a59a0f2242cca03fbb2a6684630e6ca5af66efb7eaa2b53929d1a05482068262790133aebb0be17a0f22a847895662500073c158c3e09ba588c7844da576a2b08306bd464f3a969bf2a97a97442016037c428d49ec71c87bebf20e97124bd40aabf0d672661f66a84e0904fefc3230c50a1a7c13cb1de5c3399863bc2f4dbf77d909a5bb6884faab0a886f031955579f9245b63dcaac9a835c02ae4466440cfff59753a8bd2ff9ab0e6fe32f03513397fd09624f4fe58ec53b7815b51ef762aae7e307c2cde80cb14206870822ee6db831afa8d1c4916a90be41c099be2f6a819735ea8f0179dbc48e948418dff4ad07177eb14c9078d5edcda7d877b0b4cc8bedd52499bfa90decda6302e7a02a9a8e97c0a5481b6278e250f085d85b4e2fd0d20adc68703f4b310eb928fbce59dd549abbac4bcd17fa7a2f65ee4327c53b592c1d3a827d043c9c12df1eded2491e6106b9ecdf0e5e05ba524e3c407ce0992de55667714cc08934ce1d0d1812c204bec500908b46013eaca2f39657c268f154e3fd8bbd473ad9022aba1d2ff88c3772bdd8bed8ddc64f57059b25116126ead7105acdecd53cd50c0f0075adeb6e6085d88b9e4c3b76e0c3649011f5c1df2dbd52b556885d8c255c63353e1a52322700fc605a71c8d998f9a818818c4b5e620e93554e1949f370fa10a29ffc979e33ea139e17cfedb62000b77c9d5c656a30d3ba83dc2500395eecfc8fc1dd217b2d4b048e00ec10d61fe07b048fef78ca3f13af872836ea26983c1143cb445890bc2bb7783a529b023ea2dbf77ccded4738d65aa95bd36f82c6f23508e6baa4a7899314 +MD = 92219c95e8983ffddcd73fc9669ddf1085eb87fdc3f2a8b707fee881 + +Len = 11592 +Msg = 11964921b3db3564118a0f62b02225c3e7b21e1e40a6836d20e17ebeab0ce12be22d690b0e7b456a6271d2b7dc21a9bd6ccbdbd558ae7b59df1e5d5b1dd71e972e9164a796d46776e00eb1f786e3221711c436f081c38b3fefa59d187139d4d83ee9c25c138fa570d58a348a771098b91ec5b8d8838db907999fc55c71dc0cd55a5e09914c530740870ce3d97751138bdbf8e7f526b60f9925345e8ee365ce76ca18c3b00ac994cf3fbd474a4e4e9c748f834eaf32e395dddb8bef18907f20a3d53e77201599540344c4e746c3ae3a5f848e726f6ebe52bc03cd006140d00c44c4f8ae49356a4fc5e04a4b369f19f6310042dd9ba3ef4e1ce4211ad1ba009941df70ef9332e48efe5977fc80aa39d7d34cc6169d991e91e7c7b0c4d0c8b8cf826ecbc266d3b01894f872818eacb3e52db043a5db18f22403f4a286c630a0b7f0b934af2ae176f571056462c66d32282773e113bfe8130e5ab31ee81bbb5f587108d13f4725dd2e7bc8742892b45ca9aadfc7e6afd02a57d24c4c7337319ebbeea2caf925648eca9c88cb5a594bd96f9c3a1ea9159adf08550655ae835a04e650d048662c6931d1bb8f908082f85282e7cd0de1580cd927ca2b612165fe3ae37dda730cc5fb6d4cbf23ec2377846feb71e0bd18e0efc1bf1801975546e4e7ba5f08727556e1ea42928d07ca9fb7d7b124bb56d5150a3ed529d120d18fd5b471dda16e2949e451bb1b1508fd625833dce6a5ffa15f27f973e4e2241da6994812deef8eae04cc4abf4202184428312a75a1e8e003260c99a0317ecac2f5f84da44c38fb8ef1617c57ef9e5e28590865823cca2283d282c765f8eb3a47e2ba68300ec5dc51766a908a0a2f03305da68b0e9f94eda9cb512bc921729d34d7a643bd0cde5a7dfdb12d617bfe2ee59dd3451eb28d68fe79416cd4955b1b123b8586532ecb9d9cedfcfce22a5308cd7f563bbc5dffbc09451a338e3aeedb68761fd9fa5cd3cc35ae14a5170076b9726cf914ef8830105295a32700f97306bef03ce2bb7e3f0fd1a8c1cf08e3ae685ccd8279c01b698d62d2a5f131bb31c39d10a44c9d7c5790f743ca22bcbc443d1108ba1135fef25bc065e9382966713b8b401ebda93e63742fe7f9483b7480611b876985591913a1f4b434a5f1e37b9512e874dde6acabe602fc14e68df1aafc02b0577c31541488872951e0901b97faba6e6c565caf770cf6eae4a7bb1d0a354ced4b9fc7983c37002b06900ef50d920a3bcfcd132d0e0e95193130cbdfe83583a50f9622cbd5d6e7211d5d745824848ab764ed140fb91567f1c32cc81e8b242e3f69084ad7258fc5755cf1c92e25f9c24af55b663ec049f3db6141b7c43c29d625229d48a27588218e8cf1155e58183b5d48c211a16bd1c13dd517a2b8436c02be02fe23160ce983d4750860d0050a7c5627c81e1f01d55980e55790e2e8163a72d0d3e31a34db73afdedcb36c74f60d9f581594a2cc7f440d5aa98a2a734f07a956c3919533867a879015151aed05779ea3527b1112f5094bfbb497782b3eefcb5a77337152111fc4545c8fc2b75f41bdd227db531c5f30a19221bfb4590c7c40a597d495d9a4ebcef059284c1b2bf363ab3bbd5232e64179e5970ac645e03671ffca79e91069650e2cb3e8a0619216f7f83728f59cb2c53abebf819637e3a4c42fb82c553e8515ead212d7a6d1bb31e37fc22524a1ea444be3412b0d773d4ea2ff0af4c1ad2383cba820fe47b2cecc8e0985bbc78ab644161cc411114c15bc743568da15a369381a788264694ef56f605d28f2c79f3f4f0233f0398b009377a09a79e439697fbb3d08e311f5eb56a3c14552d20a28adec77ee6fad64d9e10690f6e61c15478e949e20e90ed4d219ef1987ab64796d28a4dd17e675822024f1aa11568a9284be4ca38a3c62ec4b67dcd0ecdcaffcb6d7fd9d740097cf1c87c158b27235966a366ab60d8515279d68f14e3c8dbb7c4ae2811dce631d32172ffd01a3e2250a3f1f763e706c306c1243b6fc3f6591df7272b8c6ecb70e9257 +MD = c7ed1c52072e982a7ada5351119d4a03ef04b483c95ed386d054642d + +Len = 12752 +Msg = 6c4688c2c4a18eaa6010b613be6a8935c6494b13fd6bd001fb5892641f4500ba813918da286e377c7efa30fb00ae9c5a3a3f7286f3a3d8daa5be38e8303e9577cec420c84a44061e6dae8d7cbace5fb15b7125925ac9588714125449eb76afe93c2ec81591eba3971774f41e529079410f268dc19aa3fb0e329c100dbab5f419b1c13a48642ab5ef62938d6831bd93123fa7d29a1bfa6679e5a392be04c20c0e16c39be92dcae42e385581e2bf1d542dd43d1ba5469544d0177102e33066a0d0547d16805394da5d8000f81464776599b42e906b813e3b19af4c8905a86958685137d0963e4d3c8422dd198789946d5ec9c25b7335bbf35e957d4fabd393dbddf739f4b255c0b5a905340dc2943d1585f943a145cbd516a6b14c7b5d19abd2372dcaa85d02b4ebd6134dfc4def3805152ef78d6aa95449faeb0035a4e27be47fda33141eadf08612336f0db1004de4164f284469390036612be3a70696c9babce8bd627dbc3d2f664de4687531465b91441cf1cae2a185e3593bf60d9d5efbf63eadb70298638ed84af23621e9ea118cf51bba160bfede885d514d4160025035c44e3e36a92a4a7310e29f3e8f00af124a6fc7d41ee0e7591f6dd229457c618262e71ca0575a0b3c88fcca538d51dc282b5f418c820f4b5d87d7ad4db596d5e400bf7cc90bba7b3d9a87e0e84aa541d8803250c79f53b09c7ed6073519165564861f84372b13407d2fcd08852ec3852931311b0bdd74bf1feab3086ad7c58809dc4f5c74212d02042d146bb3a175512426a4cbe3a4391fedb5b7d773596b17dbeb972d0853d06adb7ea530f90b814dcf47d387d45c6b780ec5279dd805d0a9e2993f1f792bc41f0908c880e0d4b020347d0578686dd2748b044e812245bbe727cf8e59510fd0ca96b5c483ef64ca735bae83c6263f36b96b5873acd880f678b176cd041769be138b6be360ae2497ed4ac39698963a5fefb6abdd45821d47068874454754a054a1ef146b40a57adf370ba5841641c715bf75e4d575a8867736b5b33b4b8f1c5b1dca97a54a5dcf69f8a63a956aae4c1fd1afeba364d3224eb23f19fa3750459a2e24dcd9a75d8cfed9216c13b9653346cc6ca88f398a5993222e90c9342083db7d06cb4f7e2d1766828622442eefe25258b403e11d5693102d8bffef6a853ee4b2774c4ef856da699add4472eed3c30b1e90e4e037be388b7c5d4db50009de7e7480471f3d5f3bceca2cb9e324993c38c60733d5b04ab0cdb7ac64631f34cb716b28a40b74d0a45fb97d6bdff6cab7a3f822d808af82649e85802b41ee8d6d8540774b58c6327ce20fd741b08ced9b125be8bbc15defbac58ee28a96969c2d829b75244e5a0b2b207643239d0f8a504e9761c448e1181b0c7bd969ac3ee9712f232b183759e619e194c7f9eda72a3e1f5595dce46485f039f46eb0c90ffda25581a00d59ea48aeed116eabe97b54cd4c3d8de9df0ebf9f15a0a84736315f29bc5ddcecfe36bb520b963d22d9b490659ff650d47f064d9268288f173bcb976c2c5de89e6c64c66d05cb3e440579666ede29e6860d75b72ffa332b061f052ed56d2ccb0aeb9df267a15778fab4f35f50d27d58e6d08286e0926a85fd2c08abcb46708d17c509c5a8a8e3f32d2f4a0273439baddb1256410cfa75a4e5a8fc96b581d237af40cfc998e116b8c3bfa5d73ff92aed4f1918701af8fb90a4dc0978fde4f9d0b9a618869f1699cea6aa2c671dbbd320292ff19c7455a452241055d70a388e601c3d0b83260d133dbc38093973523e4f519a094c81d81af14b8c0b3e444438f0c24ed148938f2d0eefb361d6aa871282aea28708a94b02750397513213d2a0869220915d50648f4825615fc42b20f7bf2a919458547407e7337a4f3ddfa86d2d74fd744bc354e0f3488c288d5de59710acad57c5ea1dcf4ec37e2fe6108f48ea502ba2995627c8183f7ae7b8a7a0977c1d40f9d6d30c02b29ae816b50e4fd9c70ef342cf70a4f1bdf273c2ce7317a20b6390a114780a491ba2032e3342b0c7cb979d7c75789500ed49c1e15628135ec667e678053fde4c92c2169fe7127abbfed1717a14d8c0a0ad2cab6dd82d5c73b41189a6339152b21ee268915ae7745c69a5b76133f7ed770783788eddecba8ade4ac35226d72c23c8ea422b122a685313fbb65c5b3de62d0236716becccf54b4af8daa46477354997c3ec9599411c4705bcb7901312726ba62dde2d8d35d45d020417 +MD = 14123df0afadc8a3142ac07958417877c4ddc5718acee7a8ee44c48d + +Len = 13912 +Msg = 44533d2c876e82db402fbb00a6c2f2cc3487973dfc1674463e81e42a39d9402941f39b5e126bafe864ea1648c0a5be0a912697a87e4f8eabf79cbf130ea8e6f989f3177335e2b0b87d078b843aa378becd69ea596c85f078b9dd67d599976f6343db1b3297da6d93b20f817ebfc408300fd9f8186dc182f4abcd453881adc1af98340e64e15bcdc32b8960fcf51156a880fc29af290a2c69f6f3bf036ff2c525af8458d1ba6ebb8f11fd8fc784914a6e485de6e44968d61dc1d73e000a6f630cb1566141cb191c3e8cf378a7154dcdc98e81958175e3685935022bf5fb2b84aec52f907cbc66d919c3f48263504bc5037af2a04c5484ca657afbecabe92e0e5114994f49345dda68df8715c5dc951c6236376d0e8f52e589b74aebea7d81eb3ec51b0672db050773073599936233b82fe7d8668ecd559f0d15788e795f2b01bd013e1bbd5a66488164857696892b83b1b85df196b796e138bb0c3f2236343a15f088f7f3598886db1eff1596fa876332cf4f78ecf51c9454d18e65abaaa57c90b98302dc7f74a7ca5c2bdc5b5c4f42f8543662592ef09ea7818767dd6585b17485b7a43f75319594469234ac5889074c709817a50a18e97af17eaf800cdcc00a7bab46e5e3c7368105bb8652963f9a764affff98339e5b1449fba45c4ab3919ac4e74e976f3f74dbc12e3816bd78e3be0cf282fa4e89debfb286ae38c4110c6c87f3261bc4a036e8a174b4be753dc96cdbfa089206e259c154a835de25fe19c7ed58343988f263f2ce146012689537c7e29ef92900b0b36356e8a1141382a0f51e9de2bb643de53f7096a6dc3c8812184666bd87e7fbd6ede0cf5ba336a6893c414a9767ff8aa317ae83ede2991e43a732dabc7461cca9a71ce4c9533871bce57ee7ba0702e085c4b0629ced2860b2bccc835eb8162a14d830af54ebbeec2137fefdb5611448738d9fbb1dc59055479f3ce80c1ab01dffca44b86435731da17ce913ef3edec955b9a317d7327a05eb97ab912c64d4ad52c3818862f7fc0e22fa67b2d065076b1391e3fc32fc8e7984ee4107285c2ce3f50c0ea6b4fa04c78dfb9e61c0a03836965d88f596ea73b8fbea25d166cb60c6d1ed149ac406314ecbc5b9a827b51933c465b9876bc6d2ca39d480775078185eccadbbedf9e32badc3a0de0f6d6d516986f09f3c195652b825f479824c2dfbb4cf962a26ba589bec5cd6361ffa9089e1c547619b08639c89a6913979c4b0b1cfc3ee8acd712e291180aee85f37e668a167b3292ca1b45745a6f4e7e41fcae3b88efe026a852d7c26166f1c588a3697b3557a1c784a132cf50c66ac4cc54339751a0ebb865e1d3d320562fc905c4abd1e78e464066c46c3a0c02db0371ee35a104d66dda864c6133e37cfad9116e883ebb73b295e7016c34ea9911a309272ef90114d8f59fff0a75193fe5ae31ed99121f9c59209bc4bd507b1dc12bc89b79ffe4d0df9209762a1730136290cdee58ec828ccc88ebaada0d4bf54c2656b7b1361e9ec448594e5a8ac69c04296bcd323e92b96f375d103cdbcbc4350b2a086f2c1cc3398105e416405b3e4ce09226df78bea6b3947681703c88eefe42b90a0e527e0291c4a5d3e7e85c8eaf5eb7779b3b64d95c58be9afebff1ea1a759a39194990c18f9baf9a39e358e1adec623c0fe723c5bbdc9bb942c6954a0c0c34220a622384656e99b3a6b1beebcb2218e0a81c89f044a8a468e6f0e183658f2d317c4c74cfc5c5da9c98e41d0179885201fe3bf5ed99354f2655cf753a9976cc03c9592318233a08d19aeaf1d74b97941c6cd606122c1b227e09a2beb42a4bb6f58c28acd20023aadf2746cbb1b3d8559c9e7b29027fb294dc8d2b2ca49a8664a32f2b7091ef1b1731c888094544b31d0eed8bdd42f6a43cce5ab95d606caf6b794ce22cec32a8f465e91f38f670b060efe4989138335870cffcedbf9c033f22044fdd20259d25b8d8138cd939ba68b7bc0e11f376c867d76dee28c1ac10ae2ec0b28cf8e26149eb24e24178a3a44497ffe4986263082ae704990b1214f784f83b1f7225b7316df1c8afdd95b8a0cc6837e28c6ca1753a1630a8050f5b3a5c04dfe11d2508700a633006d19eed4278ced0927e8096b21deb8e759748035b8bdb2ba1fe754acfb7c5f771ae12b5fbd232767eef2cd7213eed5a9c422a91cdace1aacc86a51282fe708b6ac38fa75f511976024effd7652582418686458b2327ced9db5622e44c3719686cc27435cf7e0a7bc71e481bd05a40bfbee41753de94e93558ed7d348dfa271af22b4ee5dec17be427fdb418f555bf41bfdc2e90626cd749cfad2287cad0101f955eae3c0fc3f43bbf3db24366a0446413eed9a55127ff83aa15914275216af2c0ece0acd4edfa0f078ed14f96b27693358cc7172d5ee88f62c778293f969e10ff46a4bcc0b7f3ca6b418f91f814dc5 +MD = 664b21533bc159c450ba98f77dd81616e6e8843d4eb69f28add3b08c + +Len = 15072 +Msg = e9acd147a1103f6a34a8c62f199f2d50f1a3c1f90c51f7d72fed5273945787be333ae0ec4087de86f52222bb91db8df8a19fa7b87eef3d9c17924fbef08729436b3ecf2f47089e7d66cb3170d3fa822403c451685b8ccad0f39a62059a1002601a1f67b7bd7ac9770f0bbaf3e6e652fca07b89b2ac0fe4994c6d54f098d85b3ec745702daac7a59b794b87efd28545a9ff2a153e7860d422a873ec26f4c97b04fa18b23816d67b122bf15e0aa0c1a553a83bbeb3c767e2919214f450b6caacdb3b00f4810a8f9204ad6708ec5780b82124144cb9a10c550f8fb83215e4c234eb136500b08dda349888134d3effacc83cfa1f87fa0f3777c329c7701e889b5c5b09af9c6ca89fa7f6435ff4a8a12c1bccb2c2371b18d08ed6e7a97412a93c6c54a646915d62c6344766b2c7d143e8f9f8d56723c7c5bfe36f51c6069a508dacfd7092a62cc33723b37a738c62f0c8ace8ea7514a41decbeb7f086f05e8476637ff1fca581d3dbbc61060c0c02adb47bc57954d25a283f66d64b52f9054ddfdb01b1ea54039b98477a92e40f5a8494adb70a6b2592eea125f3eb90e838b3b05aac37c57d5b22570b25a6635d127c508be52624d5f478f8413656aa869ebfd129a70bf6e6317001518bcbf1bdd19dd05d7854e6a927cd2e03c816069be0782a901bb5e3582c8e7c61d388f6f83ff0fd6b971d1a6ad4f529b3d1b30eefa5e7a4d630bdf69af483b2832666dad6057cbdfc6b0826e0a2f9d39978b32849961225450dac9676325789ffacec051fcb4af9591c9d73d33ae012fde6a0be725a039623db0a2ab28e13eb1c8ca2e09b38609acbd164690b43b2d026430137339ac2e0b9c15d1c17afbebf23ef10d112f5c88698b2e6704f6677f45db65ffb52fe55e94fe82fd36d3e60ed5cfcbf414baa8aa708e8aaf1694b3866ea674172972dc69b2d7807b77ce2025c0fdc36990ffeace3659b38521f99fd0e157f2f04ccd01ddd9a986e300b44aaf684b6fd3f26993824f5f219fd3af8ccd42626b119b78e6096e070eba6e40b63a203b39d9d582435510216d4588212afa064835019221099b045290681cde03248d3fb9d196d47ac52d22ff1cdbe8cad5a18bf936cd3fecf1212eb47298f6b21d13db5851d2ca9a40fad64f9c3b811ceea8a01037a92ff0ba48edd3707f2533723890ade105ef3256fdddd73a236471b38027226ab29bb544e03285d81bd417c27ff212e5acbcc385da9c3e7d101d69b2cc83a87685edbb2f8b7f34100badcf9c5e62300633bdde3be583eddbae16757af2380ab17fb072d8af3676cedafcdb5e68837d99276ce307b3375dec49da255a75d6c1c22c6e6ceecffac65ae65bbb8702b8643514346277c82917157ff2e9ffebc2861ef88219c0723e9b4ada44f0b4d1837c5086cedcfa98db91fdbcdb43d9a89d902e8085f9fc1a747e2503331b5639773e81db76c30ea9b166fb8d0db35650baa87731049e003d2ed7601dc08be9cef6232f9ed6b5228f5d0e957d04c91458cc179fa668766b6ee03f827657c2fde6a2b2d04d6913e49e40e151e95ae5924524660e4d3c03ac041b3f12997370f134ef761a63987fb37aef87c76e6aa93e9a662c2991f9c620b1423e8713ade6622e4ed5548dff591d89bb7a5c88ce8497cd03c298112c5e87dae7b6566161c3df37436915091810916f573187a500f82c518fe1c0474e0d30059e4f070f2969b6e46f99d2815d66ad802535ef6f8c747abc6cd248a0c982c7b5b8612f798f7887ba15f0236339abc050c80fea24cba9f1921d4c87ba392fad5fd885263cee50c02cf9047e4b5760787592280e8168e92f47238903f017945f88712391d5d0830eb16b3f4996111544531606d2f1ceb28250124043eeef316cb414e4e8b0d0afb1ebff091bc0114aa27de624cde277a6a9416beade032a8743672621916a59076831170a7b75b261215a751a55fffe25f29f92e128e9442672164762226ef45a703565bbdf138f093f7d35501196ccc0fcdf19dbbaede66f7745db3f224b1ce9884d4d95cd25f1935b5ab95e67436e08366483331aad6be2d17a6401076b4d651efd5100bc29a4a0038773adfd824c5c2dd4417fbe845f210f387460486c003d82d9f2b5229af2bfd667f6b71ad0024d41b2e72a1d2f2aaa8ee47ed57bb9dfd37257a50b96f676333280a51265b90a4c2074e6baccea78dfef1305c907c126d76beb0a8c9fc8a9bab676113854a9dee9388eb2ba3462a4319e588bc3733e8fb9be2885a0939e07a6b09cddb16e3eea94f884ed90ea1447502b09834d447e74eb078498e028c30a97df794ce628c4d7effeec09e7647bdcbbf3ca8edf020d70fbc673c6e3a5e44cfe81afe16f0ae8015aaa287a261a05dec5a6f000f122680e5c899a91f3b18e295b55955db48b25015588beb0c5a14ec81da33e7c1c3c1aa79dbf5d8cc8d20d3a3eb9bdf44f3fe852711933604e60b3131486fa72b8a591c73fd63109bb6e0dfa092cae67a78fce7f2dea1aeb48fedf5a5ab0b8676ef569f7a36cb9ab440becd35b3cdb0a55f133d1fc69e9d42dc2200840beecdca7a20fb368f15be40b3246709558c85eb31aa5155d27049d655121a777102c34eb41ff8500f2ac467957973c580efaf77752be93d0900fb9983250b26 +MD = 6a9a23e09105428915a6b648b3eee2b6a97a3a27ca6973c2eb4f862b + +Len = 16232 +Msg = 662c1cf710b71b5334e7fca1b65bed275331a4959029f443f0069ebb6a3869771ab975ec3735ccc7456d3a768cdd5feac89c029b2285a8cd5f9465125892f311aaf50185ae02cd89ac34f5124be18bbd4c1b67cb78d5c169d746ff352393cbff7ca869cc5d664721cf04d67eddaf992847747c2b7b6066a0c0e6112cb5801ac9fa9954c92dab621818a585c1288fb2b32170e8c61170c0f9833a46fdf4a407f88b926b83041745f4eedea9e316c9fee743d753a1234bf7fc860b43b2ca46bb1396595602ccf41940b878eaed8ea4a44b137167c69a3a32313220b3531ead5da285b8bc4e6b880581e03cf2e67769cc68fa06c93c5c859921ef433ce6d722162dbf744570cb1c3241cdef66d6bb61a0c4615d240b53745553263a8675dfed0e3dac589a6fd2f7c807e75cf1c541d145e9ae3f1e3c654f8e4f3dce3a071d566c59b42b63536a63ee5c964a39bcf104e65f4b745fd57c5d6b9e9ec700a579a5590a3fb447247aa6ccc74280e6c2b341a9ac9ec490e17fe715c7afed7f56db21fcd7b5bcefebe9098bd053c7a1e06fcfb65a11f759655635b452da0860222b137e487e0b03b0a1d453ff31e7121d0df736f10ad4616be98f6fc886df4a1151c306e502692a79894f4bdd44a8e081750151f7f32451fa203d6eb01a3be62c3679bd37aa9e0c5089c29cf1f5d2b31490352ef633afd01be386da9200e4dc7ac07dcac5dc71523c89746dc3aa2c35df44daf675323d87d51ab4dbf69fa2d303d816561701aca44671aee7dccc7f0ce97a3ad0fd58961e30ad0d98655f3d74d0678e89b68215a97429b832c3c493e03a1b9be5150d813c3484da3a67a87c66e8532b8a29c5750ad09ada7500f9305adb0d465d45b9c889ea8762e882e2285154863682f834936f62aa5cd91cd21e21d33a835f15c431af599fefcb407509df1ae6f698ac36397e314285859eb924de2a889a130e96855389b2c70b28cae7b6445db5f5cc322de2454b9ea10e150c39e9e1d2a2b7978b2083a933cfc2478a7ed9d2b9c0e0923841a6abef57f54d9cd9172c743498300dbb4e6d7b3f9755bae0e22c4c2271bd22445d4cc0cddacb9d67bc51c8f03ac7d1cff2e5e7842e5d3e836655b443061bb3927014592b45f6d68ae13716ff24c6a10278f8bfc60fc5df116d34394a2714b3d4eaed019abe3611eb8cc8a689de9343fce7904a2cc3f6652f00b125605c10e9b1d0be0242cef31432c8ebbfb5f1987f664794d1dfd159988725b4beac2e771ed22c6fa24afc95a8069a88ababe43b1fe8a1eb9c07c1553fc1e6254e5724b11ade05e72adad184950f0c88b0943fe6e929fc7ff3ca1c5124854bec1b88c726a57e6410e21cd429a3f625d117988b00a7d260371e5369b70d795bf26e689d3f875a50d111368dea9a63ed4c28de4ff11f8ad5fb64c830eec3481e1d8e1f30628719d1120050843041fd6de12a8f13201afa64b30f52fa5e0e989c56c5d408f86f63efbbf8934264616dac7967d260f75fca144765184d6fb512de8659afab6a05e2b3b53f264eecc25ab2fa25d0bcddb8a1eea0af43b489825deb9393d9a31e123b24e61d3230322c6d884eadb0b23aeb27f8a434fab4143b21cb67bb7a787e5d194b37dcdf719c674e355b479bc777c1053c3c3e66d778a90887e819b9b0f1b0222e90c35498943aa4c10b3ab985fa02e3c25113aea41d94b82600f4bfd5ded1fed7da19ba2d816f183544d031732c766890c9fcfca36cc4d9b09696b46eaf89564efb2738b8cbcc5198f04f2c1975e43db08e41755dcb00142e9145bf04cba0d299dd35f7c2d91af8f2f600d1003e160a2a862a4359a31111a7db4a081e9ade19c2668a1fd21520b44c3e2b49afedd276049bff8e1f5dc077235bedb844840bd4d18070d771e6a82eadb018bbaeece12948b4077d385fd3eeaaf975f7fff1eeaacc122d4726b4780d1d340e5086a10bccfeb88b392b131220459d2cecd5495044bd040a9879e85afaa4b25730be7617072c91d3ea80e047b2fb2f58c050f4f949ab3e4ff2f2e8139d4b123982ded1cf81dc2627b6c02d384fd597429af85ab1629fa7447c1a1d6e9d193cfd6f6f1cf9e3155fcfc87264ae9dd9bd32a354e44037a029315f78ef32a31718ea1ef8be5ed4e02412461eec7144118a6f03ecf86d6fb6ab5dc295c726564b8f4ab7011fc6fd445d3a594d2d49ed85e443e1480001b3e91611cef70b145fbf87636412a7f90549f28d28858ffe403cb5f465f162c5aa425095ab2825c2657be97f4bb4bebe96f7cb54dc517a57e43ee3cbb96e887efdc8423180b07bf811859ee4946eccde5557d1d69c36561e829357100247d8f75384d42d751577800be78dda68c93922ec70ea5d91be8b19c144fa0b6b05bcf7557cefd0b4e17f21faa99dabef4c6d4f034aff2fe27081114a57b304192f9b45abba7963629bfda286d1b89d507fd13041eef995b8d4a0cdc4d76942374ddcaafc465c2eaacc58cc5869c5fab4eacb8c4f63bed73b735117d8c9060eebe7e9eef0267e79b2fbf8671878ab084216c42ad4b1383d92d4fab52e3771b05d8629d93064c98ca2b0453b6e075410238a25d379e14d0fe68005706d289270b7b10432640823aea374a70f001da7597ece544fe6fae7945efdd8103da551951ef1e2c334187629ddcd86ac79c28c2d7c6bbb66c204ed1523d5dd5d48b59669bccd2b52469ea94377464adb7ffeebd245e8c0e0b60847da5c8f7a1f33604932b9cd47a845a1a44599645b62badaac9100cdcd84690cdd2b32b4191da9ae52393d799f8dd72a4f776db12109d45db8b2d5a3491b841b9750cdcb212050a899c66f5a99c9a440922018b4059a7290f5 +MD = c445ddb56fa04b4a181ca4b1e97d2a3d4d561d10560ba6ceeab15fa4 + +Len = 17392 +Msg = d18793d705f8597b71ec1aa00854935f8dbdaf4861d3f9059a2456395427f4ae4c7d7eb0ab7692b41fd7743e30db0401d277ed4736e22093e65581851110dfff239d2a869958e0eb142fc92aaca7e492861fa126a95950440d36da84f5c1afe37f6fff217aa62d67777b812d23c01d5bd43e32ae613f735e3750cafea9444aa3887c6648f46660717144040f3e2f95a4e25b08a7079c702a8b29babad5a19a87654bc5c5afa261512a11b998a4fb36b5d8fe8bd942792ff0324b108120de86d63f65855e5461184fc96a0a8ffd2ce6d5dfb0230cbbdd98f8543e361b3205f5da3d500fdc8bac6db377d75ebef3cb8f4d1ff738071ad0938917889250b41dd1d98896ca06fb8a48c45be11eeb2cde1866bf5e3293065a08eca6b38ee84e2f011c47be1da64d0391cb9e0fb0df50706965e76a79782784df6a274790aaa7426deba3517282291f301067ea7d6208866a95c1a5757e26550049c3ca025f685efd8ec4d6306435e70ddbdff9ed3cfc2a033d72968e6cabd653d1a1c64bcf388b994cd1d5be121c6210742dc46934d3631ca425c52d0c5d0dc14ceac2d3c2c0d2296ef3d78654849822227bd35713353a9d1300bbb824e5043000c5470200a83a953c5163eff41692292feeaf20a1ccb56ed22bff997deac389365bdc405097ccc5fe140161b879570ee1b0df2da63ddf7729cf1936df1550b536d309f57c358fa1fc6339446a55efba81e9ebe5ea33bda1601492f9120eb59b485656894a2b8b127e679401d054631456c05caf345459d2be21f149dd7cfa22b40c4c648321c8fecb4799feb31cba03aa5eb8f54e48baf38c1fbe8d09082534c11c72eeefbe4f4f2c2cd1a4da55fc71c3eb8a1efeb8e8ed1335822f5e5940b8b9af509055ab27ebe93ec25b0fa83245ea8e57920d4ceca6988cc396a4185295e2ec6fb07e9058bc4aa4f68c18bc6367676fa9b843abcd08664b0c2aa3ec64b585fc56b83313eba89687f59dbe3b97be82b707fa677e93fac49be253237e7dffe9068d0e3adfe799170e45f8c9cad634838efabf436c4663f9a4cf79eb75a55b58339d1c5b9a547613627003011329b0b11b09709d1eef2d4e8d5a04c47ae4b118ab0d4860ed3a27d3aafe282ebe971b5687bc733e3b963f0b7f0c5c763543e9729565fc0f7fa2939f0f75ce1773295bb8f99b31ee6c418178a16be9c94dc9ecae192e9f32f993a4bfb95f5c85d9e6591f9a2f127459fadbdc1c0114856b7fa01461ef998f0216417acf433c4098d6fdd592ff7f9aa9c8358117564371366beeec923051ef433252197aaad510590130210893de2605b477adbbf0df565797be7dd77a311963efc0e4e11b8fbdc470d84a247498e114c489a9305951fc750bf9105653a0d70b5571232d1ed20e802ade99102916937f0253bd9d19002b39ce85ed374606efe36d4e1e853b06cc36372b56f13abf04ed76be302ab653ab4ae74c5ca3d8cc2a923e3f1d12fb93bf8da0a6c9f230fafb0727b04c01bab443526135a5c2935850c1d02d67fbe5e2af2e6c363938923142751d125747ad8abdf641270fbbfe1329172cfe4569825964c0a3c5f0eee8cb9fde60cd9a27153cdfe0910ce3b7a1657c3d599cff845861a5ec4e3a343abb30dbeaf9c75dc77c3472b859cb6add05b713da5feddd73f1633c5a737c4e4491c7be42efeae84f69d93d259f4ce956b16fb49747db265fd5c5efb11d758635f5fa0f8e4a1d82e865930ad06d77ab492df7281c184d246f8af18799510c23356c309875124774baf7ca9f61ca34f7df02b53710da2a1dcc9a4dccbc19296f6b80d21fa0505207eca7e6c57fbf6b143fb713a81c965c5a9d8d4385bf7cb4b000b8466db70c2580a6fd4f44d252044b93d47745e753ca230be9397c4d83962f1c9cf54a614ca82a12826ee4038de7e400e24bd41a195cc03e3899770c34b534e5b5477d461ac34c55bda96dba78fc27b068f61e5cf0fa785d01ca3fa499fa06868aa5d00f7d5e2d9a3669a69e1a2c5bcbeee0eb56e18c9491cd349cbeba4def25a47509647e611607761758587b5dca78fc7103aff3fa5c01233f55029d9735eb8920f1ec23b44fc404194b90a378bae01b112d102f2c18d68b5334174cbe21ffc30f5050764020fa68d947ed9b66742bd22833219b0b10378dd8ffa6cfacfb89daa9ee387febd1d12bbd14176a0d4080aa1edb89427d8c4db2367f562c470bb35455924a459ea970d42f79b7185765072a5beef1296bd33f81d57cd06d7998a3bb7d0631d042f100eb964075ae2b2deada4733005abe2e36831ebebb9a29ec819688109328bdf2a8f95a2ff83370de4e424b745fdc5ce55a3e770cc0b93f4d766ede791956f9f19185e20fe9af10c15debcd77b5b72f40d23c492f87d4a204aacae7086a61dc39e21798a7ef2af21e3f5c3705abf31e86c705fdf0b7f23c5944320a872f515011c437e3c1b3adfe3d1c1defe6e9991001601ff915f81cf4936c2eb2bc0f2e3cc05f6e2b23dc3f1c651bb75fe216b1eff7c614a766f459b2fc4c474471b301878fda43d99613e934e064b1edc1da41a2b1206c6ead50b15eda0904296cc2d21bc65e3f53e200b22ef42093034adf53117797adb5b0b72ce176ceeec976e5a7dfad12e802cf4aa2f2ea77e60846caee24915361e638cfd32118c18b8c56c48abb8b1fc94e259ac1690a9030647e461bc3467b0f680d40ad07080a66dbd6068297aaac67a0ab9718799b94fc7eb7f9e1d6df3840a3f7b3c27b8dd2041cbc53975b50e24c5e2aeaae0be7aacfc0bc8b4845a4b17bffbed01b66f041efb9d155d2f0c6e9fff26b3a8b0834fb339154a558f8dd0f48e4293ebfae7a7eae18ddb13a3c54e808c23330b856cbafaf5946ef1ad7d2792fba02a6b63d70b2c9a3a812d8284107f0384d743cdff4edcc815b1095cbcb18b9e90faf09f91d04c8c0f91eb29cd7703dba80ad1f89f6dd106f5bb1d1ba0f136dd91902bfccc89d34d9997dd3815c487ab293836a3e1ba8058c0e79d78ee793d4f2e746e09db8a4955551d840bd19ba2c874fa024e5a97633403b11ae +MD = a88eb8ce917b17c34800b6bcfe9683deb431e128256f4edc7c084add + +Len = 18552 +Msg = cf97461544530735f9349d0800dab7d1a432227642f63f265b73b53ee68f636eeb0a99184d0487f8e8c0f50adba735a8279056f37a3e9b75452a2b0514830aea1f7448431ca579a65804650706c500dbd7a79c7ecb7a5dd246deed2a664d7266945cbd5f593dc485738953c6293cfeb2db025addddb16d858616627583f48129714a5f33acd552de61d62810eb1519755c26f9d959ebb3d62c5af2b01480217ddfc69689bb740af84a734dadf457376b819de23ae730160d603205a1c0fa39a80659ca273122d41d55e92865ed0a42dd73ee7cc82e8981714c2703123069b1f30d8a63d6b4e79893aabf23007e37211359a12e4bd7fdd94b15c055c90cd571a61de2c95eeccc3ea3727da5454ee5bc555c3e628a899507e3e686618efb4760095de8658783d8af95d5ac15fd061cfbeba44e7f4eed58f381e500902ba5c56864f6249d191e14d1b1fad3ddf04de4c61c5859ed5fab4e856d3ab64a66b35a70fe0f1edadb68868d3f0a7a64e6cc460532a1e513856a7fa6ee0e30f809cd0b6120d15f85960638cc862c2912a72b49a073a67c5b88d2f43c4e89f700da9ae22112646e0412a33274cf89694ffa11f67f2890a52c2f8cb430d3d292cca2c3e6991cefd3c117e57a6e6248c183a926538b9886e9ee4340c76bc61289c228ef1fb1869a17226d741aa38793ba167a136baa0db1ce0a8d9536d46f70654c36c79652978fc191dbf91afa868fda71368043c5cd38dee6d23408521515acd192f3526298f359752b1c805aa666acfaa514e5c52144a1ebddc545cf0128e9b9051a5bcad1f16736238456ad3040b51a8e78589051fd9e8175eff5327cd2a16b57e4ba738aae743c8cdaa4da6c447f39ba54a410a58a5d11615a2163cc3b5e5150fb76440b5507ee2dc570c9a29b91c0f24fd22b651466016aafd149398aa7d2b80497249b0ca9b6d0eec4621a6c7315fc11e8cbd8c242bb58960bce0de8055656aa26fd84fbe1fb3bfca78d1be0aea2a043f1d747bd78a5f3b6d9d98e7cff45f3922ab60c4c372637982232ef1fc9cea88df237fa2c902902b84253066f1d085767ab377c24339d8c6a3b39dc504c00da96f5d3393812ae4f434f22bbe8e7054acfb2681cae5ec90219fc8a2b9cbfa2000701934c09879ca000062ff610e6a594724531330f3f12614e6d0d242aab1be0871f5f7ac6775abe977162fe0ea150fcfa6f7a0b725fe170b095ab0e2398d343bf561f0d98685271af98a31d0ba06f4c0c352beafd449cf8e87c4a33ae0c32f056aebb4ba6e4eb80f081db992f6c684a53a12c19d878adc19d2ad3d9f491a0b1f52f1b7d19728db50436f0bba18ca5bf74ba65e02c837a9378a82f491cae854c44e227ea189ba0d690bfcccb8a888c721a88be8621eb6d3621fd44cb4fec498aeacec8dccce58cac3f22551111e9872deb142055de3aec713f31fca6b5d1543390fbe4995cdabaffb66975d45f36fdb68f6571938cf7610e7a4d3e2475e70e0fdd72646af1029097a09c135e9bf756d6af839b8952ab33d37c57f18bb8b6e0e57a3a3197b3e4773ba3c117f5eeb5f955f377847f59ddca89ea5aff24a5c5307f0e5b3168c908d8b567e268e280f650fb024816bcc8158ef86f5b4f37659c67a342de4e255cf619cb9506f06d7845c29085fe378ac8dce7e7b164c90c1fc3ee1abeca6f159337a446d53696ddff27b7db23a2d12f81b83d1f587c55eafcc32bac29277c819752dfedce79427c3c2697a5853bcbf41a34f8690dacdb1b242288202cfe5cb18fcf348a29d7dc9058c9cbb652d10d21bcd5808b78fb43e5be6b6c406e56f9eda4370ae38d584d627a98b9d6336d7ffe8e253d4d40717591f2233fd298373a7dfe10c8c2a3057b3acb1ccacdd01509d3b9ab98790d165a66ead4689f51a907a8c4e5d8ed13e54f6073dc6662d0d493e764eff7d589f3d8aecb05516f42b548b81f3ba12c8400b11b9961f65fdcaf0583b87ac32b5a0fd8afc03f610a1262e5f3369c8b499f5f8ab46531e08a9bb047efddd36541287243b3ee0900376ab9c7a2328ffe0a0b09c07300d68eabb6de4173fa8243df9c25ff0080eb96c0f2c0d40c3a9d623970063da092d8668cd441dc573710c7cf5d2ff6de9c6d8b6b5181f57b774c1f9c785fe78342bdd2f49ee2fee2bd0458d814980e976b1848013004133510279dfcc91ba864390f39aabbc8905db4e65dc16969317214733349364f14832eb345200b42678a9f550377d4fb7b10443f405303a946b6bf07b50d0c6ce2adf97a7dd2e7dd0c3e9b1897239184a543939568568b6035ac965a3713596363fb9803aed804f37ec855df5f76996af83ecc733d92a896e69cbef61f24c63a81b534d641fb0c8ca770f632c23895b55b48155e27ce035440cd6263d608fbfb2222f47c9c03a4b06e7ea69928302c6eb5ab96e08ed444a12d89a827c5879fae308b017c29b87668bb398c9df927079cf0ad7980da6a12869516b8cc53695a599238825e4fe22abb76ead1c59ee5ce47f397e3c77359150a5ebdbbdae775d6063071a0ab754868b288d99c9a7d322877a6b1fe3bc268f63571c6d9d7eb74b8bcf27e83ea05b3d754d74e16a3ffd6bd35f142f2662d615d0fb679394dc62fab84c0a652a366eb1fa94c9167688c983688bc94e7d01d0af1a1151e04c3e06b55658233365e00b8e9b9cfe9b6718d413b79efed04fffb2d5bf277fc61c2a1f35e67206b56a43be2dd8d49a02b476899730f7296717d2d90430ac25c79d1718e6f928297dbfc7f30a22ca0fcf071876887522dd757d21dfc4ff2e0867478b80330ef91feecef346be19ebe462a7750761e4a09f7de8431382ab1b7c2793fde1b488533eab204c25b41ec89c504e22d8be100ec402d1dd30e7a4f3158b0af4b9e605c51a154c391c86b1debc3a438856e787bc0f86d256a44e8d5358f424f67541f7dd46cfbb4097a0639cb863204c0e88ac36b68c5225ea31b4aaab157a79b042eefa293cf609338bb491057d7cb45c1bfe1d7d85e9e16f3bcb67a0416404d7834baa55ef74e95cc3253a47eba177ec1c1dcea8f5f20fcfc72228cd1a8a1e776dae7c3159c0679fc12626e43056fd2af35bc8ed7f1317785e695c85f3552cfc7c87de6ffe511a591037b56eedd5ca955c68aaaf63c58ef58bf1716f8e4dc6f33a584f565fbf68353afa844c66c656c791a4d2535671dcc3ba6b05ee2ddc62d811905d88f053d7909bbf02014da1281e4d90de9dc9b0877f7436988664998737bce0677 +MD = 6081b2be0c1cf8977092b63deb954403a5879a0abe8ac4c153008cdf + +Len = 19712 +Msg = d5f2706372fee18eb9141ab221a1654065437379d8d34d8df8a38c004504cd52540c60df1f9640049f8948839d5ea329c5dc85aefc2618dcf3f8baf3fc2e654d1d866e3e63a6733e79618f4a7936cf870219ea298b772c93f774b4bf6977dfe159e80447e8386284702256cd6031d2a347830ab32ecc70fa2b9de32c33e7235730bb89c35353f51eac5607d5f85892c5baa04d138d2fcc58b8feaf0203861af7c985657b4f0014535484092ae9b2f83583fb1c134fa728f7c51c8108805daa084dd1ff348246a76c9135c494dc47ec3acb19dd791c3c6c1d7b81bf075373bcd4e324c1b9942d96b18af0a0db7920571dba84fa0e9ef7811302b4d3c823d039a1b40812d12ebdc96a683d05c667441f2777c3d99a7adf4d21813d2310997d07b8e8045a43f8ff28df52a45b1f4fbb2e9d2b5ee4e55bfdb98e20a519aa5d811061a6a102d899fa9c5871ae0aacd88e6acafddd81b6e757ada409721b5d16e43ae316657058bab60b1cece27a36abc4bdf516c91ad6c6f812a9612f93f06caf6f8861da0d8b023c5f74ecc913846f650e659daa160ea1e5cee65361e82c09e99696af8841381a937ea899e93e60cd7a4463bb06dd242027cba3049282d9929a975627f67529a9c352001acd61906d0a49379867d7e0eac7ef289f49c9bfb2ca5a10f2ac0f2458d5c1c398fae6ddf61d04295b546c0ca8cd24bc4a0f25a50f82c60c373279f2cfd0b53b3afa330f11bb5d812d56046e013f51a82d6bfe5451c9c5911f11195bb5bc15ae2953b2ee65ed3c8635f407d09e275e3572e5bc9521a83fe8d2d05926b2a2c9658c90c9419bba89819cb6ddf8268c32a83e05c72e27261a5a77f7a01d7089b8a88c36e2d25a2b2cba8924eeae4277b74cbc5487e70a4b3f2d370e55069479ccbf51cf64674b470e7925c7a2bc9aefd4681159658a721f96a9399ee2aac97aecf102e3b7c915161506972662e9d5fc7143689cc7dd09ab0718a62eaed1b5950087c8f843c061a02aa808c994fc9ca67726e7a616aa74f67bc0a547214200d1f1c9ca986f14d7ee36a9a039a2be96f6cc59b6febbb75e08d8eb5f70a3c75337a5ff314aa58c1e071f4f86fdf2f76cf35924fe2c1ccc6dea08dffb319c2656cd057124974df1dff3cfe3e39dee6ec5a606cfe7b9a3b349a3f1e4a2127428b09df967cc05cd0bc1bb2cacdea2fced4a15bca1982cb7339b3b7d447c9c939509af6a28501e8ea26d6620f4a093863aa34a61e33a0dbf130bbb9345b05662350b093efdd96af87e8afc920151f8f31e774ddedef4e5251c402a1a3167c947d05cb55f2e8f707466c186691d175aab616e241cd7ef3b5016e390fc4ec87bab2da4bbb30399b86824ba0a8f8e1d3f16cb31d902195297a8c99bf620e5fcf6f7158c2124c320ca3d7e1c93eb9c89329c24687477eb468195fc11636e3d2ac29150bbf199b84b2f5c3d9026659184b8a533bbfb6594f3827f79eddfcea07b65e3a6db33f928436e2b29bdcde5b3355b99c1d078b35d8021ce06d6722854176953df91ed2e5c2f0f14094c8f534cc5a2e09652f2498e16e7ea6c742564a225564bc287291f9c389a7ea6e47597a25b15e27ae7720f6fdc5b3c7270ff6ad2cdb2321865eeb4308698d1c92e859afd203d073537ffed47fb052ae27208222c390770a9d245d55f40917438d1c942a73ca1b88eeba1cb609a6d1d83214975f88edc6d3d77346a728f0bd1bc764978e7d6ca5b4fab609100e21c7e1c26c9497df7ba909cfcc65bb19a904f1cc50c2504163e5a3e1e452770fb99b376289188049a28438d080090648aa75622651a2f4725871b24ed5775f80c6c2659d0a718d59faeeeda43ecf2d386d94e94ff7b80f82b2d08c8c09f63df3d1e3d8cc615e3382fd4f74957916746b7ac9f3b3a38fe5f4fb687f43d23da6fb83662d9b1e3cf757223c7a3e9f7d80444aab2dfbf5793c3baac026e0fedc0eea23cfc063a17c6d38f22c6afa4272e56565bed4835e3266e9496e0ffdc05ffa526b873dc08bbaf9bae5a5c372d284f841546b93d45e19ea604fd896f4d717ddc69332e23c4d67116f951f2012f0225d6a8f37f87975be5b432686586093b24db963597a31571f6899691eed750be979338eaa5eed258e2e0475fdc0cb96bdae9d3441523a493253fada2ba7f38638c05ecb4953a9fe17d716b6a56c80407894f48ea106d1844e67f670abcc190f9ee72edd8b533a5fd9eb1c5123b83931918561faef0471a8c2190eb535e670089a42362de6fa18db42de67edef3050da86f437d181e7a5274bebb620407372f199660744f2a4bfe0e1259bd57e6161bbd76618cb100ce6703a648f4a61efbc6b4ac714bb14dfaa1143552ab037c7e655f15f77400ff0a0242bf7fc8c00d796c5fce9d0e8f42761ecd7f18706c1e049296344c5d8e84f8ca37f2a707da3b7aca24e42de66e70871c42d6f5331a32724a6abba96ee1f55e68ec280ad87d10c5880ad669fad83ff54379242f1c94228e37e49256cf83bb05836947ee642ff4244d198c99735417873c7c4f0f55625421ff0ba19ba9fc3fb5c4b4389cd37b4f5dc15aee05786b6006af5340dd030c32f24ae8d1c024d2e835d2d7e45c4ce689398dd4e5f532a3823b4304e0e1511a22cbc181080c678f1d4f57da3276f7fa0a80599057b0c887e5eba199166365158e720be02fc89bba48c9f8c30931fd3e3bfacc942e7f639cf2e17119c9aa6785ddb0d10d2f3de7dcd06c5f9c53d6863a826e8fea50aa2b6c0fe45a8de3ff80f0774dbb0eeeb0747c1d00346df7adb97748a64a9aa779477ea5bb04fc4baad7e0c41170ed566c6922974d1e3cddfebf7cf668a4aa1933e05a1d2f186ee9f396dc2cc499b24eb8ef57a61ac613ed11c0d1f27d452490221d89dd083eeca521e26d172ddd63bddb2ea1b231d4f90f2de3ffa6add60ff38c27924f0e1d7c677ee619ed15e50a8d1e4d8b2358eff72b9c508d78bfff742aba25fdda085e291750c76b164459aea5c9759a6158bf1329a43003d27d675a1cf44053e5c0a8f89de0b0e8fa82e058ed24cd58d4f9ed57f18eabea1badb7c9b382a01adafca4f3e176c71a0197220f4d767e4ce40221cb6ba2e8c9bb1896cad6ab6cdd2085fa21cc5a3488944ac8dbad09affefa3d0276802710281a86ad636db8cd211f23518a44d320ba19647ac4f52389f77c70396016674a8fa0bfa49e61f1ea703f9d5137322ab339faaedfd30d0d34bed4646e9116a8bf87b58a2283989eec51e8bda32f7fa8148c9deda00fdd0fd7db68e1481269339697c1b0cf19fb07fa4d8249ef7a11926c3b6cec64814e709ad7a2af6feaf550f8482cfa546872743deb750adc21d233e2cfcd72d42f467aa639e9958c21a4460d215e2d5978e62cdcb329c8132ba9d29fcf2a469823ae732389a45c47c05d5ffcaabf1485523d78002d074b3ca07db6cac3ea3157656fa439503dcc47cd07e1 +MD = 8f5c8d0758d3c4b98d273d778d683941d00165b18fb81b3a258f2441 + +Len = 20872 +Msg = 49acad58bf04ba326c8abfa4dc2c41296b69116205092b692f0bde634bdf2d5417d5763878d6514f7652bbb88779744110aea57e2938c618a13bbf6841e74d4455f0a819693e633a51e593786c5733f329d9c730c933406b67ac202e3635de220be58c261ba5b79e052d8f0d132f47e7bcd1bfa06e6161098b4449dcb230a8953f9c6a84157416219b10f69f046779c4d480d5f79f2af09b14ed819b3b407246fbfc8a5edf11486b1a781255c8698f3276cd515de5f6b7c80b8e11935bcd06dd46ef33da02e615258a4c2958e69b51dbaca07af9c72d7c39770f41eb993f2a01295dae20055945f7f37484d0e66789647de199f4cd370895605759cc7dffa75aaa2c445970d49f885ed76be45134fd78f278f6757f7d2385cf50a15d90734591d4453aadccbeec81d25f25bcad6976bd114ed9a5666594b1cae161c75904cb4eac90db439f7ff48958f3fc818570bcdbe4498aac095825c05cf2e031611a03383cf56e44747f7f49f77b365b5eb0977b735250b1f0bf9c5b8a6c67c42e1eb3f88b5d3ad7d0255569b7e01c71c291cf45c45275dca400c2295e353ea74a76a436a1ae88253ddb3d90a008f6ec387b2be0e22f3f56ac855fd3df36ad033d8c9e9987d2a05642090166bbdc0cf349d675f5d2d3f74790b43b001557fc008dc769c944afca91681567950f44a5af7b0a732b9d24e4d7d9f71d59098172c5c48ecc6fe02f4efe356838c2a4290b48597fee2b4c0c502c0eb5cf85c29a587b694b9033643973c6336a3b97837184e5689ead9ce7728171b755172d488bf64905657dbcd7b48311ea833abcb30659ae32cd7a27743dc0cc5d41bef9a43d94581f445bb3418ac406e11cfbd93cced2cc3e751b74fd57556587e08c90dd977ad03f50f2bfaaa27fcea09b489527b3366714ff592a89a78865bd9a489bfb80f0d8eef10a891be4fb90af6ae7987b9ccfa63dd1fcf12115a1f487d7bcc107e23d98b28f6ab89b38827597efa08b4070e3b24055cc73cc89e7396effaeab08a4aa391692dbf533865aa5df943d167f19bbb3a5f2915592eba35df97ae70106ae7fe39f6225e8eab6cc470fc084e03f7e9fd0f50f12427b231e87b1b12f6a0ae804bdd7671038c8b02084afda3f928887d631b71618e0901a9de01c0a4d8e1a3a80f04509648ed55c9e83484c34d3621caaff736e6bd7d8b66b90c4ee0b16418c3da371b1e8911aa38e6d617d2c4cd6256162b17fd3d05be0cfbe31c62faa84c681ffe4c565ea9e6b376983d5eea5eb8a4481fab1187322811093e9f882f1edd0952c25afa340699ee2a035bc4485aa339b85d56c0167347f773676eecc948392c151bcd56a3c8422d739ff9af4941909ae95cb1857559ac44ccf600ed53a4ef44c9732a18286f6e15e5d69d7c77b43f2c4da631de2e45a36d7882dc2648c57df80250e79b2c5c7c1bf34fcdb85e22dd7277c25e36abd7ebf5f8767714332a539a324d8c7c3a100ac41e53f0ff670e1a11da299d3b7870d462ef4958238d340ecfebb19f27ec4a8892d99bbd9e1ce6636ef74485390eb10b28af8405f0c1731ded9135762a8d3c740cb77f6a210a4c480e51bb9ccbf918eedbcbbef6f87a87ff97c531d7f0c7966b863a87ad34999036646bf74a70a208fde0b642a1a702b32232ea4f0b1715c8bdb3d53cfd255552ccf5c87024a3a411c6dc11b7ac8914b5346382e5a609e244190a1a17b09fc8147a56d9cea1f179b3b82250a65e1b0aee949e218e2f45c7a8dbfd6ba08de05c55acfc226b48c68d7f7057e5675cd96fcfc14748b11d57306795025c5febb3ac86f35a34ce9fbf79c55de152a32f50bde958f36ae6d6bab6f0c2cd6eae30761338dbf573610d38a935ff632ac23bfd6fbbaa270aa801fcc5d4e393153412a43adbd55280db17cea631c331c04d094c1fd763569a6d2579d7a48607d259f8ca8df06df5cf9545edfb5947e1d5bc1dd9289ce306acbe97ce76b018a048b8695587070453c2182e13031d0c07bd97f00124acc7bbb404ff772db819d0cab7dad1a09036f10aec26da77ed7df7fa5916709e577fea42e8c2e0670d183dead0c3cb752c84520c79d6a0a45b1c571e87f783f05d7a26dbd268b6bd2f822c2babbaaf8f2c6b0b3959a40222d675899c9d29d7b50f54d5d14a77568aafe64fffa135fa292059613404157b7df00823e71113d876ed8e8bd5c9754c7a0ec2fdf949bc380d98ee186ef1a1791028429aa07c4bf2908885cd5bc7c8f4e5bc96da8b0db3e5970687755caaee9773ffc3723b4738d2ac60e8fed5de090c6849d05a3785c39f4fe9b42c8fa8433323e6f93f2a0a70e514f716b4d674abef6c271df1812a51a1a2c302826a7245e8ba6e5255ff2e7aa684cb9d73d014381a8be4ce34fa63f4b93a22e13b9f817d3472066d5b1d3bcc93564efba04535241a22036f98f5db03227079deac716e4f93153fb8b326aadd382401afeeb86ff66ad8f3709225e82399e0486959929133710e8ab2f28e042301587428a3ac2d25891b358fb4ed23cc7bf40f0fb77582df7ab867fa9dc5c0349b6e26f46392e54801635a0b75ce167435364e306a8cbb9a0cbd67de1960779842ff9aa1a2ff30c4404bd182594b28a172217679d76ab3f9a387fafc09e082b4a4773faee6638820d22f2c62e3d6e2daaf40285a82720474cba2a1d2c3b88a104c5f968aa24263f44397db4b8a03cd96491cc441004515a20197fce0eb6af64187232fb36b2e5ca4f1105eaac064514adc11eadbb5567ff7d1c25ca4f57a4fbf016c7bb7a589cab9872336ef3b5b169ed4ba0c6926289bfcb8dc519d56690eef2795fb05f5d746b8524af4a73f6a75d8cf8f9997d72e021733206c48a2b9ac68862a3e3cb0b949180ee208616104f7af290d22e65cf94addbd391d155eeeb0a199a3a5ba7a824a5f09a2f28c34dd24788dbd28b30bfcceb6c3a0d4b1df6aa420ceace20dc7d4e303dee833a62f3584cb4a0a2bac88bb0648e2e2337cc8c00f7cb18043b51d238b9ceb3c5c3da4b0812dfa9e9c3137b699faa767b9f49f815afbdec86b3edef0ac80db09ccc159d0b2072bc50acfbd61f2426dbbc8a7c8210f54a30fc909a1bede561afb15cfa3189fed3a27f7f67e6f97c6c258f014d721a4edaaa0ddb3f9f09993276ab7b714ea9356c231d443ef1202ee21c9b0ba40f5a44d523629bc3c3856be9cf3331623d934ca406d2016a40bcc2f28789b069a2f95ea464a3d810cf89e4ec80f187b54770cbe21548c0d21bf4c1033000f884731e25ad32779a0d0b3f8aa4518c8452b2683b901624885ec9f0b27cdda9ecddcaf21f595886eaa2bfcde8790cad3122c6a22315d21162f694d91dc7572c935def9dd6109c79cfb7325b83d477fb940bcd470bd911b55482c2d78a4b6630f6ea2946d23bc8f85234ad12e51b5c1fb8f60d7e7b449ab869ea9c118270d15d1b6dc2159940a2aa7a01781995b881c0a2cccf70fcbe37c3a6166ab08c9e625c0ccf0033b589f3384f07db991b11ae875c735b4415afae7e15ef74db313ddfd5d1f62cc8ae7c8249d92c1eba0090ad1bedd5f9234f7fc890bd5b01bbf8b5116f70cc8dfb0a831986215988a3cb9b45265dd9f13531964da2a6435b78696fc0d3f3386df553057e972e77627d049c3d4db4668aa1435c055bd990c8390cd1b4a961 +MD = 326e3c56d1b62e5815b565687bd54717e06312fa21a841f819621f33 + +Len = 22032 +Msg = 90525f2c16d8bd7f162d061351d82d5c79959978460dd612c6e48b86f5f8ac458de8f07c1fd486f06364042ccd0ca0df608ea280c7c01933a28fcdf01e4476e2c8062b0da3a01d34778585fa6d11db47d91249ed57875f8c19a808b37f26bd47e8b3f829c9c5ec13fc9773c35a71485c8b2a76091deb10e3d43523154126e93d96f83f16b9ca595597a3b5d0bbb44de51fdd111a427394017a41065f8ccc628c7adce81d9c37cec1f2b03369b96054ac3c340269eda854aeb4d199d887a190fc3b67dc869a95b220b5c6d5d67cffc4778b35313e4710b6b12aefc4ca5b2cdc5582a10199da6b6d3a88ed835e2b18050fb4ea87e1783523d483a26f7b2ff5ac5ef693409e854167d7112e254aee347f3c5e5bea99a79f04dd68f382342c8569e0404482dcc2a007bffb90a3e2efda9ac5318f43affcd4bf9580e8e53d7a637ca407bcad9cba0eb7b9ec1ce56e5392be74d78e7b6ba05ebec4748c80de40174b6ff404aa269415df8f8cd9d33645e5530ff5607815bbc56732ebe43b5fa72a400caf2362c2793de50785cf5682eb59c15f360e24f5748f24a68efaff07d623c241df21bcb8910d32ea7c0654996d78702c3f9e6653f4465cea05d5b220f58a38d82c079f4f030d2eff1c87b6c4f4cac83ebb1b2576637176c4f77d3ef02ee80c9740dcf5d0f8c541100a59654ba8d6325c508a4ba7e899dcfd0cfb89c0a7c4a547c0a8a58397bed4e3f1844876b0241450a6f5bf2eab45f55ded567dd788a66bb0577397b0097f4d427711468c343cd7e066636953d5fd29ab4296017ffa16c699ab46b39f759016f3440749d75ea7e4d538dd315e8e4ae0b1b2c4fcfe259d1ecb6428e198047a95be016e389d54eca2f6c36aff96fdb28235e6e6589d30c2db0f2b2209e2dec4346d564efa273e93780db012bb444bbf77008607fca4430e652ba83b13c62af65ac6eab079bd4524d0e0a6dd4db09ff928da392cd05b880825e7827be78c11996e93669b9ca7912811394ed49d2222e7fb8aa75fbc092438810d61ea6d7cba34da9a71184b2c4927a2de50fe94e2fc1159da79a7a8f84226e263ef918edd4d4f05a4b42e6e9595a7ed975364183754ffab90570d7c6e085bb1b3d17730f9f4725778d7e5ee2a9e32592eff0c126b523a5775e89720b49e5e54c3b2a43c16d52638e08145b1338c4f4e69fe006bc42049c751d54f7c122db7355b38219b7d18f210a25a57a0f887873412f548098be3b461ecc53d79cfddefba450bf53376e65f47870b22a3c1b66074ef8fead607c6048f0d6168fd35d58d4d48d428ee4867f445573caea3d5416474c972f0b982eec0b87e51d8f18a3e19552b3bc3b33dc23973da9404867d511b9d6746619942867043053c953e173f1b3ab7e7cd699b20b637d7bc2b36010e0c5793b4466090b49c9a6bcba8ca24011c63b4814efaaba8f4fa185c2b99a99fbf0b1363a6f5b4a0cd2477a5187ff9aca43aeab04f4db5837a25631b0d99bc2cbc1fb0fd8940f6748a49f372ed44dd673926201dd64a01d8d01e81a1d81d84df8cfd3227f8299e555c71a5dc2f001a5a658f2070eed9d6d07f4f3a97940c47deb60b618bf998f36dca045789e79df6aeafddb0509ce27e930e1e55a54a504e51c2b305d197753ee45c6acf211d02ba8b9f799965ea4d3f4805f59c7201d0e161385ce5a1d7a8c7e29a0cd64dd717ad18bec9a258df026217ed3bd5a7c1744835a16dcaa1c319d68e0d5033b51fc4197e933695d183ea2e294c58c9eb9224caf785507c7c62b1b3103c9fb000fcf144e4a7293977dfebeda6adb440e77dc8b0cc6a6cc3d8bc56a691af6213d677867773800855f3faeee5b695b70243894843deda29675edaf1f639efff25e1966bfa53a83cb2ecdddc607f8ec9d6a6bf8cc8555cef2fb5c36bec2f83e0aec6638915aba72e180b8e9ba42c1f5285b8257d8a597926e4857faad09cf36b7630e6c610a303454ef81715f9e3d1bad822c601d010b7364e781798eaa7c80a44c5260b326546e81e5a7f30a9cc2a69948ca701e1a5a1883534921c81798924e12d2b41c516f7814edacfd6fb11b4c7849dd266063ebc826161f81dde39be201611fd4e0fe19f77a71f0eee36d7f73d6ffe4e168704928d9aa852854a10f068a919a51c59ecc532f1d24460a3497a311c5723fbac1eaa12a7b1a73b0b26a66362ec2a91ea5ff11af49a7a148a8cc50c544f5afcbdb48c775123ff2769a268790b3394970c63ac977720b7f133cb6037df8ef90001f0c12660a66231aeacbe126a95eb1505207c11440b03e1e52cd41885bd0bf1c1f8d0859ce4d941206e319649bb38f21ebdecf0210466cce9d7a7190e8495b645f441fecc826b3f090d486d6e4c83189f62819cd7b3e99888f564a1418aa137d50d9df7ba2b2113afb48c00a1f1d26ed039c57d2ebf932e07ae9017e778365cb96a6ada2c8501a55b8983b5ac522fdcf8673ffbedd16d76b129b5e5c8f55d0d3835330eeb3816dd54b4b7f55616a14a6117777fde907d58cd8f5a72acaa1d329b937dfbbfed65a4e45eb02966e631a0516ff66fc7a5cdbda20708265b3e7eb32baed2096f4cf8e051aff4b7a569e5c61197433571b7658b79ba46699c5a88782daeb9a0c5fcd67be4ce0d09db48c7a5e9b8e637a46f4bac9ad09ca339a64469ecbbbb2887a6075be5e48385cf2adf2320fa68df277589064d70923cf8c9b96faffb5f097ef1946a9c18dc954bb8332900845094c4702783dac2b19ca26cef70bd992dab7286848e5093a2a0159acea0cf7f26bd41082b0a88ef802cff36ef555fbbad772b0cdfb14b7c5c0ef677b56ed61273c467e69f82a11f8852d6d0c007dd8a68d3702cadbad3fc9346b6f7f27d5d66bd10feb28ad56b794f77f0e16a6d7f2de5280a8ef791313bceb21dc38bb3aca28f09ce13f5ea2f265f041612f66e8dccacdfc2d9c51ead6095b9f3838bfa0aef6e179eb2e7a9344e405f0e0b6bf44e91465e5eb51d498e9470c3ffdef739c175e4a2383768fac41778f2a073d1e60ba23a0fa6cc09fa1efee8380a7dd958175b7812624980c525ac912496f3312b0c27105964c39019a3c78481dc08383e55cab3cfe59038f2a033135cb73292ad994951a35e45ba8e6616cd043d261dd5c2e91b4189b697697dd58404cad9fc53fa2f84575df89041af144a2af57f8f04a8e13ad11560a61304b96e83988f7705760331dc2984191ac6e8835bcbbc96b34dd998e553386cd67d085841e9fd0cab56eae09a8a925e02f2bc000089853acafafabbe709e6f19b2fe9cba684cac22ee30e1af948ca65df7cb54a7ff5818432f76c2d3d00123d4b63854e1a339fa274629766612ad3389bacfde842d8597bd18c567651006359cc61036905bc24b2661ead4d3afa56df1ccabc62aff9b5289001e01c89d1814c08718ca4cfe800fcec5e7656ec7efa604c1e194130223b91579d34a94f3a151ee5db4888e07fdc88ef691d09df7f68c511f03d0b2c1996c00faa77a50a04c7d74de65e9ca0495f5c5588c8ee7bc447165587504b0ba76cbd9e6ed49621f73e8027dbf768780e32820803a08e29174059ff2c79863494668eee327106fedb23215b023a75ce95fc02ee22cc704f3efb98f727e04611a82b3de63d767c08781dc0d0a3504a0ba766e2f12d741c57021fda25c0ae1209ab64d26dd90c81a796d56770066070980c182cf86bc21ba72b5428713f0b738464b8536d4c5b9c43fcf21d2273936ddb8cb9e8ea25dcf4a9814489c3eb1ef0ea9cd0cacddf8a5544731debce3111cb3eeef11cb1a3ea2fc3cc9505030d1011a41b533e75dac13413c3fed75c89011128fc6ad2342d15555fd3efa419ed085e18a9eab84c852ac216b43cec +MD = c2ead0281326e42f075acb4d9d327d557c67aeb075878cf0a8f2bc76 + +Len = 23192 +Msg = eb6ec1250d8639b7abf554729a0ab2c3a4378b54da17a1302baf732936f5b4775d8efba11bdcbca197387743797c2fcefcc51ee64477a7b1f3818c39f7e26111a56c413c0cc7bf4a83ba1fc485a6c7cabf53f0fb66efa195ce54dedd398a1dc2ed8df9bd89502afb9801b5be678f6001146a695be88a7725e6b2d1dfa4f6ced05a7b8ded397ee5fcfe979ff9c63fe3b92491f1cd714d12a96322cd06e12d5d8416bd6394c559d995dc04473d4bbf393b1650f01aa94258696d2d3a199837b32649dbe57ad4e9ec0e5ace13529e1648cf132fce0a3a7032ac2a5980e1701db6fe1a5d79660f3707aea27f6dff664cfabc43b7f365c9df88bcc531072612e65053b2cc89211d4a13bed99ebc0d4b6a364ccd6fc8f3019843df643a38af269a686f39b07c74a82af6862ab46845f777e3c5dadfb37c87a2495e30fe79465342e698d68fba2455e09a4ebb48d96c0f7beb7091901dc706058481500433b141e4b117b1f3abfcce73e55eb4e2764d3e7f35951b096f9d24cadb8fecd4cfb9998bb334f363b7c3bbebc1fd3e0ba9af2a89a97c9fd20fc689f835d22ef7b326033cd336c4684640c35115758149da597ba42f6c4674670ade977c903cf449c02601f9674b89c03c8facc90ca4276f14dad5afaf3876dd31cbb097123e53f84fabe10d0db14e8d7fc704c40bcf2ad1a8ef26118b9c60db02f7496ea05d9d279a39e5f8711d3f15d11261f0ba2cdc68dd619e3d499abbc8460b6de981c059406a7913a0dbb8e5c0fa18cc3460e0c49c7bd8451c305c0e0cc5ae21f0ff910faa871375ee92aac7f7c1824c7846166ad649fe24948a07e10f47896f6b60f547cdb9ae13cae01a6d20f0f8eaa4b5f4577c1078428e9dc6bd3894445e42ed168a11c8f2f31d0b3060a54d21ada1f3a212f898f1a8f3b3bf28f17386f65dee1c5fde7b891fcd5c1627eca1a69d55484923b0a90f5ca9121aaca2aef740a4ab2f4f9c9b189fc41bf14a5fb32ec2a9fe11130e0b7a689a0200d1b10b4043006b75e1b3f04a79e890ec52644d6225855c21697885dbd3accd991e875309085778199d8b42c4b723032cc66535eacdd2a9a2ad58e1daa6c9ba0c1b8c4df9959318410b8c5931615cbbdc2ec9346dc2762ebb6815e51ee8d810825028c3b9f49a9416b41ffd377d7b012213f812940d5b339521175a50a1c1182246c47bf12d5634bf1faaf57e15671d26fb5a9706b567ff5760c60717da6c1a1584c63f4846ad3f64d4970aaf300a571171578b6bc284dc2aad8ab61c9ac15d829298d5664989ff2f5c4c0472d74bf60bfa57b56d3d99103691cb2d07e9a82b92f9a005f43dd1ba463e33ab6e1112443b20c2deb22d8ee4a293f1357fcf09ca6c4048999a2b6db9d102b2c64ce64787ca6a00cee29a4ba0973c64962c55cc833aeff757ff1a4444f931331fb35ed308e060794da68cb78c3c128c18b782d99e218f1409cc1240a2e5521d7c4c829c0fa38b9523a60cbcf0ba9fd283c85f18634ba70975a81c481dbfedd8a6bf598be43e72bd1789214113386b9c9e06f2711ae0bf3d643c3e45fbac8acc65b3eb88ced79e57f3f7d42f3edffc53321a45cd0a075f189d30821d85d6b26180d1417c169795cd7d9a2c6cb9d7dc6007ab60127ce91002ea2bf0b90365ecffc1c0624d05a5e1857e1731e1cc479329e562492ab8ae596311d58f01bd81c10eee2856e5e12a09e9bd19eb76bf57a71894e70afb067dc3a3dbd767ddfa50b8f6d0b3262af24d965f04466314d931a294dbe1ab6fae7ed52a10d9803604fd591f2f07d90682370f511946a0a163fa0c0484f9326df7db17617882e3f221ae2cf1d3cc7760d70ffc26c5c2aa06a5dd6bd255d6a9dc2bb911aeda7b97fb9a8cbad583ab091f3afee646d0628a2ce7004965172117a690434c7a006ba437b7be8a31094b962df32c541902cd47fa718b2d25918185b26e9e4f2eb0fb1390bf6c246e2b5626714ac0ce0723ace9578aa7a07a8d9ffae80ff5a230b3d3ebedfcc011f5b271c2d387e2dc78faa6792d7c7c29ccd1227e30ba6eceead19a3435b4e0d82d6546703bf1bc07d45064fd638d31508327b31972b6315ac2d1f9f65230f4017d0e7d3a91d173d683ed8d80e106ee9d0755fad4964c67ce227d973a2bb825154f73be28bd6f32d2ed99ca078f2fdd99c1239eb684c438b3719b1d07a8939a9b0a5eb041a8131f817a1cc39c554f23cb175b48c82566cb8f17f43266b10b7d1b1595fb8d3805626d933d1f461bafebbb72c39f115f7949ed7c507f5e2e66f31ddae04814568c241e9ec5870ec9985bf23b254c991b47d9520877abf707ed262ac0093fdfebf28d1b057da2fa47509bf7d847f6684216a44823305f3925e83ec92fd687f5dd7dc4ec2e2a19157d1fd452b3f14687ba2fd2563544432d6e9f62838f11c95e1676f21983979364534f2e8c32ede3fd6dda8a05a67cfedacb59bbdf4980ac237c253e2a6a8bb9f1b227d02cbf0277d2415ff4dbde9e394924607165c3ecd94bf9d1d1a84dcd33c380eee3bac1f7a70e2005396245729b8062faab9d661cf7de74c3d21b9326a8e2a7ed8ebfa0951dbaf115812243c2cd896b7091109adaafe5d4446a09a45ec0570d6cfac2c3a481de9cd7f3a24154766c290a4d45c8eca966039ac1fce83d24299cb24e4b94ec7a800893b86aa5f13f2f830f04c4561b8c6ce80dfe7bc78b7c603a09b3e27a34b1aa1f91f702d961d0dc60c9e116ae2f00fc6be74a0fa90f6f05d1b75110dd46ce63c818d9f3436cd07aaa7e09c236f0af20746ecc3ef692a61e48054f5c25e878b4eb7286c34ddae8124877a75058263edfebecad9316dcc9b6873bd64fbbe357a371e525fd5e72bfab22fce1497b985842b8a7149371b57fd276a10d6f05fe143b40badf26ddfdfe4d2054df34060fa34fc4e82ac86fe5707cfd7f1d476c0357814139dbc834444c002ac9ca996353c710f5f616b9793345bb041c2d5c59b8c77f5ca9426aca0c52cd28a1ca00f92c6d8d341b01eef568a69873c1663832e70d3c7a543b950720b7bb022506f230623dcd6a9d13f04d4c3a1932b6f0626056d1c08180efd0534724d3a09da7f670bcded87dc57346e7a7aa492943f2624cceba145b7685a31648411cea51d4952103f9b657db4a782d419d2d41b094c15d16703fee7e2696b8ecb59ec988b656abff3570de27bf0f85e2bccf60440006faf89c4924dffa32a1fb2961238c75c177783b0cfcf0fb925951af366f485bb98d3ae63be3e328fe3a3d446ee2a3385eeb36b2959880268910571d6a5704d0627da5f51c15d0d983e979afccec1627b670004310991d677c12bcaf74fec0848a320172f4a1ef3447177911832b2d6c506fa09687e910e6f4c7480c5b4ec4a2b8141604cb6f8862d42d03139c852f2cb44edc52016fa1cc7997c2dc272e5750758bab54aa67e38ab291e05d1ee466926b777d1f8713174191eaf4c9e085c3b648ff8a09987147d567add896112f18c3fc504ba720bdbc6cc628a4798f3d4efeb9d879cc9e75fe6b7de8b2667d4e8eeaef430d8fd455d6769fb99b943c3d414d507e4145c35b4e737ca938776b28102dcdb68d82abc3ae86a405a1c3ed6de4ce9659aa1b0f0b8015ea5a306ee2a7e5b41d139126aeef8cc55e757eaeacb57ea612d17bf78a6ddb7b516263f6ebb257a867c1e223e4c2b75b546ff9fc80fd59004d4f7e803d6aa9ca382999b58d31ac31342848225622796f0e5cdb55722dbb02cd39795f2fe8302d28179953d00d2d760ab08acb0af8182915a5ec63882dedd41cf9353b68d0bacaa8942d79bc2c22a074c172c50a2dddb2f0b0f4cbcce5379fc2f57abdf10b8dc940081bcf5a77d3d6f7c3c6b95ea7103227e7bb38463ee08b45970f8dd180f15378db2cfcb1d687411d1e4f4e0c50f9d043b10850fd1e32bf2f46be5210163090d97528a9c93288096d3ad52d1e0fe0b5cb75a5bbf96f736407694db4b7b791a7ea3ed77dab711c556f8020fd9bcb0c09479d58224217eca1566a855dcd4a5bc0339f01215e7d8c4dac56f7678c6ec6f34090ea2de100e59fa3b02ef25ab6d7053dfe +MD = 9473955b16c305f9916a4f6d10f54b5835d54212904ea51d42a531bb + +Len = 24352 +Msg = bdff765031ad90d569f8184351ec78a8d0a2fb76a0bf3c2a5e3ddf2cdd6e7ef6c03de67948b884bc6acb1ac7254eb6bf1243e5523d58245633b497ac5ceffe6b8b62e43ad4a219fe9e4763b6f8f271a2318e10aba2d5a2ffcf16cbfcaf366d4f47f6d75d7e7339e22cf35bd774de8f9a540be5497a3d9d6e59eee2e27d4bb5eb1b7f27a8ed34cbaf3c576bf43f1cfaeda343caf36b99ffecfac144276e34bc8730873be4c9edb7aef8fcf9d301b498e347bd28731df0afbfda1958932bfb6c6bae957dd9bca4e52786696f3d63ac53c66801688f3a4a952f207d88ed5ca8abdebc32544e6c633d610e2633fa0c0e12dc2d98f01067b09986f5763cffa941632982e4280c8131a6a6b9bcafd2a6e2bd6fbf092abd4e28a30a808bda8fb8d07b95293662dca4170b3caeb2498dd62e3bc546dc7c6097bd9b05ea44cb66345cdb68d9ad68847d1b516c16906bf246fc7626e99a50bfea7469bd5a29774cc3ee6beab9d3a3ccb348617e19df7ccb9e5355dcd0ca0da4ed57f57bf9c346080d8d1365f22f7b7eefa323bade26e4de853cc02e24f41bd54b6d2786ee99a164bb41bb1fab495960d8367f688eed0af4a4bd9f630da0e21aaabee8286233ee2675124b610daaa33c17085ecf50bd58d4a3e1dac4b257ca3db3531ea77d1a9617e209ab7340d9c3d85321a6384d1c354829ad5a993ca03b040d33b34c66d502ffab2dc39d6b5e1ffc358a41ebad950916de2b052ad2049d3960668d5f46ec99a678877b27b7c22172644a153097ad3d076c62c4be9d0a58a256f5962844e8c2d3f01dbc584b8c2f0189690c4f33ee37e3785a809ec53ad40895e7b4ee8950e750bbf96c7a5044b3704cf00d8faadf6072ad1c1f13711c7932c544d1fb3dac6fe3822375d3ed73148854e6ff3a2408207bb0af8b63c939b0ea8f15d4958685c255eda1bdac4ba0ba114a53cc96c8f2e0c82c1baad6f618dff69b61a5058f61486da37d2e4c91530dd3d53f5becbf24061fc76966b62041701f90302c937ecb69f54dbfaffde81475959eb394833126fc4929a0a5496e3dc92d168a51867c488db3926d2705786c5a214db65fa54581280efbc851d9099354e8d778fc28b0621c711b9180ad68e2243d8951a49823bcf435e5ea51ac19cb7718780115bf43a07ef58f32a13de1ff3bb2fa8b4ba5f45fc7888e0c8d0ac56e9c84a42e84945c8a1b07975972fd0a490747496c3c14e0f308cd9f39ed3d35032af5010631ef24a95b71db0ddb340c4af1c61efc602d0eff21cdbf76598c9212893337910417c384a7fa0256c42c0e8a5ff520449d38a70b795097cdb93e04232006efd7e65660a46569b53c152b3990ba9ef84bdc7cd29f781ecf45f59cb2bf5936d1e1bdf2238fff879bc8b67ab4e46b874e190642b84486fe0ee6f5eec56d9b8a84b6733435cfdb1c5d018f61a80ed879c9b701d280810bb9fcb9a27c64b64fcbb15eee64beec63f0a2f089273d966b3b112cb77453df6f1742c5e28db821dbc1ffe218cae56cfdca139b8a169a058b97cf800e7059e51ae088139e6ae936a8341749d7aed3d91373570c7b74e8e39f53abbcf00db91b75dc75a9bf5c1e7d1eeca09b1557b0ba0cb4174b458a4eb611384ce744949c09e6d3b2912ba97f7fa5b043e0b90ea3985053fb5ecea0f508480e5b09f24d2938d68ce7d3cc9935c3a64aa821ab1bd4fa4718aa4f00fe0560ac9d7f2be180892faed0bb75887668d187807666d3c66c6859cdcd26c2eba547a5ac6153fb75e376d467d68149863f32b21b55b51957936aee380be9fbb1fd449b05a88c27746096b219e1fef613e36d8de3ef18651570896e230da2959636dff66efddb4dc42816aeae84f577637c0a829fe9969f492c4c41547b5877e378a01eb0084a56ae627e32ed666db4be3192f819ee37af3bee3ccf93fc1489dfea107c9370e0287a3757a59f306e946e2a8c5717a4047d33dfdf80aa38ddb3d4b5b676dedea5ac70ce276f8c890102ba90800662b304f17927c0bd5fd8bbdd08001a755bf9a2cad75079f87c1a2ce3e98bf66fc2c440f454ed64ec7c84b6efc4f4c5e2d06ade6bf9e4d2a7378bf920444277f9fe7fbe6c0e595577c7e3d7d150b93e2306d861751cb3bce6848370a113de8a0ce08b8843ed951ac4099e256cf4760da2c5ec34d289e4be1d2daa984e9e86b8102e91a65f3ac63b3d095ca8a6f854bbc5d44e5e6888a061b2f8a9790f2c63886db1381eaa3c17404891c66968a37acff6fda5e721600f2b0eae281bcd069d828c3129fa0a3daeb24f67846f9b3f10d19c0699d8e35b58a69917ce876e755b2ed3760b426983b319b9543dc32512404a1eb8d43898bfa45abbfa44c4dcbfc515ab4787fcae574ffbee20996bf06530c1e6dbfb0f27d51acedd2032dafd2c04be7d6d4532c101a9e256934271e27f08be5b37b96678e5e38a65523ed2bb0640b1afb1eceb8ac9eb555975dddce5aaf1c9e593b34473372616bd5613b3fd93a077abd92430f0f73add5f8d15b5e02c136becb994b100120cfb4bf45785aa1d4d97d7ad9708ded2c101d0a48f03ba4e952bd86f02b507c0bdc079f6b350acea6f999df7eb7b39a3a5491482f6ce5d589f92127ea559708760edae22ce1dea422d06647dc891eab2113d93eff01fb0925b2700ae27a423b01d0a514251f34c6faf659308d753d9472b66b5b325fd9b43ef720bc62d9f08821da0cc1ce3dbbab81e3e9460bfc8eeaa1b4be3953f7006b583fb9b9062500847883686792ddc1c64a21ace4d29f812220a74835fe380d92e404b19d26bc109458655e720d6fe5abc627fa997bdec2bf9206affd7bb36fcf74de9eb55f3faf4c63d8457db87495d0887f88d0522ab227584b4bdc66f995858d35d7be1a001b210d84b3e70e8c60b90380ae261013de0df5fda27f3a7b1d398fa30303e1ae02a6b7d3204a8a07c4d9b9e3f107101ab4c7fd865a3280a875601e9e971330a9f432155c2114b58740c72e01e7ffecbfc4d9c18dc9b2b4022cad9c910a8891844e7798782ce21b7b42e5e282f98cf0638cd7f46c776c5f28b1569c12d3c08ebd9fdba3bfba1f166469ca59bfbc1ae5b68b3718baf9cbec8c821f9fac995782c656c2d9bb3f3850c313f8f630963617293e7b80f1a75de69e3d4d19c6b1ba182f11e1acc342da3527efe66a8e1e7b1f2c1509cf99369ed7ee31838ce9c364b9684fac9f906b514e034c070910cb36684fad867719fe0b2aed1d478b8e34e3d1026e88148aff5a05d5b6ff747113148cf47665fa1c842f6a2b4f0d783c8cb4097dfd08be1b9530e72fcf241f278c81e7cafe3ceaf95f7810194539e57d3151cd3b89a2fedac3928c61e3196b8cadfb2323b35fac38e671b747ae7145b8d94996db82fb5940e0eb402c91440c48ee0ca9af2452c063cfa8ca36c9383b87db07e0de87565fd693a7bcd0583863c4c322f5bdcfbab9f26199b35753f31952cd2955a4e558751442545d0db66af498d3da91e013fc1b7d52a12d39ad3671b2060a4fdf4b762b72837dab252a50412d769008b6afab476cf97b724e5386d72e3c4749de2843f589cd8011c7328cdc0b51efb491e12cd039ec653d15d548bc1fd64cde31fa2665c287084b645d7527aacc4630125715487c921ad810a100930f4aa7777b3fb1fea54672927d09bda6946c3005a88fd9129d90e8fddf5552ee952fd3900a676b22aa925b9181c5aaeb40a839afd4ea0cb1255f7bf8c250944119ec4dc2700fa6645ae12fb3032fe1785806df9917f414c69c5430637a21591d361692993ca718563ec96b918196d5b0131e7e4bf24c85a57b25a2c8675625e552253e5ec0cc255abe91ab977d991c252a45a252f431c3e04a3a4f920a5d7f2bf69eadbdcccd51f462f04c4f67b5096a0612f8288e7274097208935ae3a5b973abf96d20914922a5c46bea23d05941d12f1ccc47315d0a739b171a7d73dd893eeaabf911bebe1c014b4ae1bf38244a1d1db9bb397d7ffbd11dfc41844b5352f02b4cde1bb5aaa2796033ef7c0f7486804a702169d349cc84831ea509daa5ab39e65288a9167d5a80bbad5fd4e6e88bad4de6bb62c35901105304b1789252f67ec443854441d4a8b9b62daf642eeebe169073d5cede0c1e071624f35b02c9b9211d966077d81f1186d82b7ab47805b24eaaae0ce873f187db4515f71bbca897e38ac186ae39db297aaa2d3e1032bc0ca8050bcd5a35a7d2ff585e1945204de718746b7461f78764f794b96631ef7001c52803938e937d93f5c853f661ce483b4262eac63 +MD = f46fc5a3a97b1d597eb99fa82daa7d04f2bf0b45f2803791971c929d + +Len = 25512 +Msg = 767d93830e8a2dace93b9543f8cde588d18b074956e77a9d91c952d5e32781b05ed656ce6fa04367c096e33d5ca73bcf157241d023599ad70dd7a858cd13c4d32fb5c84b7af8d1fa52004343dd6f0de825332e7dbda1781da8c8935b76ff467bb0c1f2e376bb5fcc6722bb3dc14ae03ac975d6396ee999d529451cc627148d11aaa3db7cad107645c7a4561351623e2dcbe042ea7c56876959f54a81287a23fbe5028bff65209dcd392d19aed5dfae29f21d79793012c93f00812575c15890a329870b55e7125ccc86650ef495e9b99605d483cfd245e7c1e690b5883ad65a6f3eda62647b0f3baa76f63cced8a6e5dccdac69d2aa166955d2cb03a3da1e0bc9eba29816683fc3cfd185ab24e841bd63124e326cffaed8658dd916afea552a18f987b652f8c97ba45fbd64df0be0c6949b62e6841b35bc58e064f692b2a640c43133c3ff71d6eb8fe8436ee58aac8ad5328f8e0244d29b969011ac367a37d435584bc7071c8d9cf933c2d120adcc908f9d7d30cdc3adff87688a3f818a306ed2397acb514117154b09e09677bb68602ba5d5d7cfe0ef6f932f77b75d29ba97059b66d5c5289bdeeb3245c4d1feaa830f123f88efe2c07422ac7f1db1a1fdd53645b7f04b18428043769a6318bcb880a5ac624d151347959ca84b78653820b3cb001621cb5b3482b99d877c333ebadf543be72d29b9ad5a69eb83d060374bb62d942b722d37986cb76eb3150accd92983867531141d194bf13dce2d8ce6a868c4c99dea59f596c7a4b2c73985ad3ce59c56b55fbc87b4f19c66d498d08c5c50f867149138dc581ae8316aed8c2b0d9b06734fc10a3ea6d3d32d3e18147292f632353a70b03603edebb3453b078c71d329a5ea5fe68c1679fc5cb4b640e170e3d8fcb48eaa49c2c91400002ade1992166db42e3f39b72c6c81b9dd793d1f1e9e54842df40f5fbb34cddf42c2f91a98eb3a67c56be9081233c80d6269f174c5af0c954ba8c5be16b87e1ab30c40d7abdbf88754ebe0c7ed563b1fea8e452a8d9f6af7b6b4b6aefcdd8d77fc0f9c97f16d0fdc86c5043ce85e40b91ef121889df5d471171fc879952a63bfc5d4f3a49529e72e00033faf28d241a1a6996ed51e39b4cd16f2e566082768b9b5612f44bd97e8456dad7867d83aa5a0298e125a37f471d15a34f4bc7e5c042f75c036c092407be973c997ad1e1fd47e50d9f75f11ad73468cedddc41e52a0e7adf9f2603bab06e1ba6183c922073603c281032bd3ec22f3532688c61190a2ab0412496be060f3f6eb7c26030d7d33f7278e2008a639e6a258e6dd097e9e74412215252babe8a8f0ae2367a2070633212909353cb21d27194335c4d78e057c71b0096de6c2ca8f97aa5d2ef0372c9e4a6ef92a101e1f4d21bb1b2576684c240556f709e54d8e0eb288326333c676dc3a9e66e7cc13c8c08268a1e82f36fbd3c3bbe6e07075bd8f0befaaefb4dc6c55b9625853b8b89ee804f3cef54a1d9bf07588dedcce61de796888ceb8bb9f97718f62d8581c362b2e6f04ab340f47b3e5e164e8e4493b793492fba5a7903a7e998345eddd3fb4f7f88a423e8dc6dccb19d0f80ae12728162851ef37a47ad3aa335fb3a0cb6a5b88af1e5691e9b6036bf409ec4eb9b1523ebd6c0d8d98c293a1a9e956f808e55368bcf3e7ac2e28e51cde56e7bc552fe1785badfcae69b1a1ed61ead3fd7df8c31f85d19e954664aa653f7d915b9de9fd4d6ada64a2018d2615c529d5b712ebd3337480235617b279cf7f4793337926cc4452bcef72469e49a23b70022fb005ad2ef0c71df78b5a7ae1067c954cd23079e57b1b4325222e331b2d85026c3d8f76986070357e89a3d7233de43eaf8e4d2ab84dbf08c37c830b0802317e76a2d159f72e4112f5f8d7b51d8a46376397c60846316fe7553be6faf2223c1e56c8137cd5c1035d63c23c3f58566c2770d3e33a168df587e2499f2860f56e8913969d07b9817dbdd1ce1a9a5b0a1cb7df2cebe8b0ca1792728df6bcdae38f68b5f3b6232cd679db4604bbf1ae0c1f8fb789283c9d519ead0eef33dee854666245c9a8f8b528bd5eca4c666adac63d5600d1e05c64895182bc579db813b0bc20c9ffb9addcdf13ef658e622d669e3db5c2ee5c708dd9fab986ad7d6fe25f59494c7d326a2963413620b2f863dafee95306c7e4a1a1ab5ffa74d91b2edec90586d32b5b59251d0fda02a07034bf4d07d9d344bf1627664aec8dc4bf1b8d56887f68f17b9f57734784144112c79bf360ee324d37f9a7718137d954b15e796fa9db12b7db6747ceafdb5d7b2545f958bc3b2aca926fa936cc84607238202a7a3143da65c4d77e971188e537f3d55ee4e367c3a319a2b61cf57b2b079e8927e1e95ec6e37c1783343332b45ec2a054ff9c1b05c114ba558bc2c341f929c0f80a96d5e1194b50de0fdd82d3d6dbce6211b0fff90acbde0febfd05aa3222ee255f034f30ef7baa188ed91f498986861182e8baa66785376ba56ce86f98d13a3646f775bd4e534cb81beeb31e5d0bf0e7ba0af515c08cedf11fd81597157dcdb42939ef8f1c1a5f461de3e35a3cb1356e21de574cfe262729c208332a906fce276f9264ae43190a4bfc8159060dc17d2e1f2e8955079c0d9cf6c6eb31f0f0661580ca7c23a998764e1f90bd2ab883efae1dc03238c536c9d124d8e5b21f46bd08c4a9e0f538decad7f0d8b6cc243fb476815dfbfb1f3b8050b207c8b804b9fa87a3f7382cd6352f6ed620edf63b3df30eb5cd8ca8fcf55da20a1b3c488793461b857b2bd16de3cd9c39320aafe4c4d5ff1fd88c4646aa854e92dceb6c901ac84ad2fe62eae431cbe881d4b400071e82cf2946a4dee4a323dcb4127a2b0798a99ff2488582236752db17cf93ef8d9121093ade7b77be285dd5d784948ed453109f4d213b9e12cd89fb61ea50875c66db32b969ba19bc805bc062fbdf9be09426d44b512c4899ab99d3c8ef93cd5de5d7d410b008ccc6f54625bf3f035c11a212c5559f0187a048a9e8b5a403cb78553e76a6780e99c4cd468c5518a9d950c7fdfad1d462640fede2c48ed34988960037a1e38c73879e51827e8c4e791986490ffc29b8f6e5cee26ceebc420d0c9d2cebdc2fb3e09f3cc92382cca81a2499716f52c3136615c56f6eeea8baf660772281aff2b4fde8867d50217def35027387468409ad59f9dddc104db902ac8b0a2a22a29458716a65b432e207eb71bcfad3bb1b614e789bfc707c9256e4d895408bf63e7d67e52dbfb8f14dd3647758189cf79e35bd6b020b74d745e9262287ff8f240a16a9003a7ecfb4ea4722eee1b42c2295ecc3d936f3304ceed9913168317cd58fc5e56b988842a342ccec7f5cb5c96388ee286b409aec00168eedae40bd9b3053f3e5cd4fc759e8dccb8cd2d305bce200a3b4c827eaf01e44700240178b345ee0096fcf68215ba840aac88e4d8b4dc885732e98f3ca83cc01e79790f6838f86be6d4c19ea80920ef7d3695bd32fc33d9dc66085ac21ef32d45b7645e48df3d173894452ddcb443f88ac37e36cd96868d20410355bd97a7a45346508ea91aa6789c41e2249eaba667b9ff9cb20718272ab95075008d96dc9dcda2d810f77fa6f8885a43337c43ca9591279bef7df5a82b0e10d7fb909104a22b596575b272c11f6369c2aae431130a96f7d62fa0b38c16a51ea6a7851aa229e2d6733d68987775d3ecfb2b74e8324f31dce5f30de6357604b65b84c99857cd9ab6abc898655c64405057159cdd8adc084345ea23e256b1a3847113ec9e77e5995659b7b04dc2934f3050f9ca959f2960c76075614c4252181581f54c91950a8552177b4ec66c6b470993588c84e1c001d5e01564989aefc8c60879881631b4e5166f93d2739c54ce4878b2613ff52831fb2f5aac3bc2e33c327f412da0c07d1f3fbc91d9c9d4f84b798b87d72b3bda97a3b8a586ca5cc4f8d740cc9ba5e3bbba2aa8e5c32dc8ce551946595ceb485f996c1696a2b8cb1d7511177c50b9fe093c539f003d33da3f61a4339770d48d1fbdc0c39e7e7b8055379c4de0eb3181de2c67199196607bc3f7b6ddd2a19b8c938b2e3a3d88a72ef4c6c56e9ad9c111b2f0c1a2ea6d2830149dad9f8b6d84c9737810f4f44fb029749928f3fa9acd10102fffc5ab301f9989ba0503324344b6080b259e43322b026d25336890acda2f8e307dec346dab0a9be369a367b14ff4f9cab860baee7c4c46f17156ed8e6ca285b8c8a116a45f25d38027fa8c35fae8912d6616bbb328598a946f2971cde92b8f1f6c6ed242a05db936ec73105ffa1396a9ab1ad65eb3ccb074896abde9f42d12ead5bff7e71324c56e1397a48db20852d5e3d78b1fa31841285c9532410229a991911ee7f03c1d80ac39e2b94db7295e28cce75a947acec50665237f8197a3cbaa3af622fc6faa6367bbeecf1e7e192118b2c4b54bbf52b4b51fbfe61a291de19b1ff0597a325df6273616368e7b3a443c31fa3ba3c53 +MD = eda848f7cac9dd8b7b897610bfe409744d2a9b905eb1061c8b3df44d + +Len = 26672 +Msg = 871375ee92aac7f7c1824c7846166ad649fe24948a07e10f47896f6b60f547cdb9ae13cae01a6d20f0f8eaa4b5f4577c1078428e9dc6bd3894445e42ed168a11c8f2f31d0b3060a54d21ada1f3a212f898f1a8f3b3bf28f17386f65dee1c5fde7b891fcd5c1627eca1a69d55484923b0a90f5ca9121aaca2aef740a4ab2f4f9c9b189fc41bf14a5fb32ec2a9fe11130e0b7a689a0200d1b10b4043006b75e1b3f04a79e890ec52644d6225855c21697885dbd3accd991e875309085778199d8b42c4b723032cc66535eacdd2a9a2ad58e1daa6c9ba0c1b8c4df9959318410b8c5931615cbbdc2ec9346dc2762ebb6815e51ee8d810825028c3b9f49a9416b41ffd377d7b012213f812940d5b339521175a50a1c1182246c47bf12d5634bf1faaf57e15671d26fb5a9706b567ff5760c60717da6c1a1584c63f4846ad3f64d4970aaf300a571171578b6bc284dc2aad8ab61c9ac15d829298d5664989ff2f5c4c0472d74bf60bfa57b56d3d99103691cb2d07e9a82b92f9a005f43dd1ba463e33ab6e1112443b20c2deb22d8ee4a293f1357fcf09ca6c4048999a2b6db9d102b2c64ce64787ca6a00cee29a4ba0973c64962c55cc833aeff757ff1a4444f931331fb35ed308e060794da68cb78c3c128c18b782d99e218f1409cc1240a2e5521d7c4c829c0fa38b9523a60cbcf0ba9fd283c85f18634ba70975a81c481dbfedd8a6bf598be43e72bd1789214113386b9c9e06f2711ae0bf3d643c3e45fbac8acc65b3eb88ced79e57f3f7d42f3edffc53321a45cd0a075f189d30821d85d6b26180d1417c169795cd7d9a2c6cb9d7dc6007ab60127ce91002ea2bf0b90365ecffc1c0624d05a5e1857e1731e1cc479329e562492ab8ae596311d58f01bd81c10eee2856e5e12a09e9bd19eb76bf57a71894e70afb067dc3a3dbd767ddfa50b8f6d0b3262af24d965f04466314d931a294dbe1ab6fae7ed52a10d9803604fd591f2f07d90682370f511946a0a163fa0c0484f9326df7db17617882e3f221ae2cf1d3cc7760d70ffc26c5c2aa06a5dd6bd255d6a9dc2bb911aeda7b97fb9a8cbad583ab091f3afee646d0628a2ce7004965172117a690434c7a006ba437b7be8a31094b962df32c541902cd47fa718b2d25918185b26e9e4f2eb0fb1390bf6c246e2b5626714ac0ce0723ace9578aa7a07a8d9ffae80ff5a230b3d3ebedfcc011f5b271c2d387e2dc78faa6792d7c7c29ccd1227e30ba6eceead19a3435b4e0d82d6546703bf1bc07d45064fd638d31508327b31972b6315ac2d1f9f65230f4017d0e7d3a91d173d683ed8d80e106ee9d0755fad4964c67ce227d973a2bb825154f73be28bd6f32d2ed99ca078f2fdd99c1239eb684c438b3719b1d07a8939a9b0a5eb041a8131f817a1cc39c554f23cb175b48c82566cb8f17f43266b10b7d1b1595fb8d3805626d933d1f461bafebbb72c39f115f7949ed7c507f5e2e66f31ddae04814568c241e9ec5870ec9985bf23b254c991b47d9520877abf707ed262ac0093fdfebf28d1b057da2fa47509bf7d847f6684216a44823305f3925e83ec92fd687f5dd7dc4ec2e2a19157d1fd452b3f14687ba2fd2563544432d6e9f62838f11c95e1676f21983979364534f2e8c32ede3fd6dda8a05a67cfedacb59bbdf4980ac237c253e2a6a8bb9f1b227d02cbf0277d2415ff4dbde9e394924607165c3ecd94bf9d1d1a84dcd33c380eee3bac1f7a70e2005396245729b8062faab9d661cf7de74c3d21b9326a8e2a7ed8ebfa0951dbaf115812243c2cd896b7091109adaafe5d4446a09a45ec0570d6cfac2c3a481de9cd7f3a24154766c290a4d45c8eca966039ac1fce83d24299cb24e4b94ec7a800893b86aa5f13f2f830f04c4561b8c6ce80dfe7bc78b7c603a09b3e27a34b1aa1f91f702d961d0dc60c9e116ae2f00fc6be74a0fa90f6f05d1b75110dd46ce63c818d9f3436cd07aaa7e09c236f0af20746ecc3ef692a61e48054f5c25e878b4eb7286c34ddae8124877a75058263edfebecad9316dcc9b6873bd64fbbe357a371e525fd5e72bfab22fce1497b985842b8a7149371b57fd276a10d6f05fe143b40badf26ddfdfe4d2054df34060fa34fc4e82ac86fe5707cfd7f1d476c0357814139dbc834444c002ac9ca996353c710f5f616b9793345bb041c2d5c59b8c77f5ca9426aca0c52cd28a1ca00f92c6d8d341b01eef568a69873c1663832e70d3c7a543b950720b7bb022506f230623dcd6a9d13f04d4c3a1932b6f0626056d1c08180efd0534724d3a09da7f670bcded87dc57346e7a7aa492943f2624cceba145b7685a31648411cea51d4952103f9b657db4a782d419d2d41b094c15d16703fee7e2696b8ecb59ec988b656abff3570de27bf0f85e2bccf60440006faf89c4924dffa32a1fb2961238c75c177783b0cfcf0fb925951af366f485bb98d3ae63be3e328fe3a3d446ee2a3385eeb36b2959880268910571d6a5704d0627da5f51c15d0d983e979afccec1627b670004310991d677c12bcaf74fec0848a320172f4a1ef3447177911832b2d6c506fa09687e910e6f4c7480c5b4ec4a2b8141604cb6f8862d42d03139c852f2cb44edc52016fa1cc7997c2dc272e5750758bab54aa67e38ab291e05d1ee466926b777d1f8713174191eaf4c9e085c3b648ff8a09987147d567add896112f18c3fc504ba720bdbc6cc628a4798f3d4efeb9d879cc9e75fe6b7de8b2667d4e8eeaef430d8fd455d6769fb99b943c3d414d507e4145c35b4e737ca938776b28102dcdb68d82abc3ae86a405a1c3ed6de4ce9659aa1b0f0b8015ea5a306ee2a7e5b41d139126aeef8cc55e757eaeacb57ea612d17bf78a6ddb7b516263f6ebb257a867c1e223e4c2b75b546ff9fc80fd59004d4f7e803d6aa9ca382999b58d31ac31342848225622796f0e5cdb55722dbb02cd39795f2fe8302d28179953d00d2d760ab08acb0af8182915a5ec63882dedd41cf9353b68d0bacaa8942d79bc2c22a074c172c50a2dddb2f0b0f4cbcce5379fc2f57abdf10b8dc940081bcf5a77d3d6f7c3c6b95ea7103227e7bb38463ee08b45970f8dd180f15378db2cfcb1d687411d1e4f4e0c50f9d043b10850fd1e32bf2f46be5210163090d97528a9c93288096d3ad52d1e0fe0b5cb75a5bbf96f736407694db4b7b791a7ea3ed77dab711c556f8020fd9bcb0c09479d58224217eca1566a855dcd4a5bc0339f01215e7d8c4dac56f7678c6ec6f34090ea2de100e59fa3b02ef25ab6d7053dfe6d3cea3c201bab252313f8df569b3db62383dd10a58576a3101e67e54d9c8fc4e47758981fe4f4566da8e706042ac677cacd3e31767c57abf287fabe04adb25a2e7aaf78d3d3104f9acf62cb18c8633ba9b20c4a9eaccf309ed51e2946612c2613ecf7c3820d867a752f6f16d99c9d6a86db5042663c659adab1d80e59df87925b75396375bdde3ec57119cf90cffb6c2aef12031655a2516fc3325586504a05cdbe7c3ff409a102513c65de858806a95d975874f61e0dbd25b233e715dcfee7326fc83f46195630e2395d2b00f0448ae67b2c7d4ec02e47c326e3aa4eaa2a9f5230254bb516852f400f089f492f3f758f42950665628d5513c94b8779e35697f5a79c4b8728b76733676e20a76c7fd31e959cf7842db351db407266ddae0b36e37f34270576724083e9989764d08a0d5c1b4738f34927a1e4366130c334cfe4e35ef6c777294122f73c8dedc682ea89117da0b2fadd71aff6511ecb739d2d09bfede8142568a9755909550816aa27b10562af4be1111ae1d939b3213510aa0d3dd314f4565c34a16ff7f9d29b72c7ecff737becef0ea9a15497271951b5d05926b88250542d690e02af80329f0054a1c9580c7e6dfca6563013839a0eb52653414639116502d024d9d8f20f687c563a29b86ae7a30399673554ce8eb63834645823411dd203f24cbe1b58533f0f531ee83b9e11d9490b3e2b0310dc8f6583f431f7a25ee35a56ec7720b9e56ce1d5b5ce8aafe257f98442dac7526ce2659a6c966b64bbdf2c856ecd8e1dad37196367a24da54464398adb0a499b26f66001324d26901b10a40538880e8c93e8df869c2e2b881e4a31a7718231f3f2157d41b01ed12e68bce760b470470f7fc65dc4bc38cd61574f0b626c0b2662b885e4e14dd31444892c201d484ce2ad591ab8a82f89db37d9bcec43356dd0f1608fbe69703296dc66a875c55ee6866f092c1bb75de9fc138bd9fed33270d8a7d27b3362830500fde7770edf5d04dc5b7744ac7baf1fd8fc55ed6999ccdbe68df6916a53ed12f9b0f4e314f3ad6f8b7c8caa937b8bf518fa1f42551e6b78a1a9b4198cc416222afc7532af8ab6ef3cd72ea5f93f5a316415d11ee9e8780db205f55ac03d66fc3be952ad062bdf4c9776467f0650859c635654ca4d815963c0a99f9d2f47456ad37f739c425e924d4360bd7ee13572febec48e8eaa717842749b9c2a00691b329ac7c0478aab37bbe99d79ebb3768b1f1d6868b1283e3c7276e5d2495c2c501d3ac822f5079b345e3036640ea39c37c62648ca7dee720cba6d8f2b426b174cf3588a7ff0e1b5f2fec132652eda2eddbd846e9d38259452e3029f8e5c54b2777c9f16c17e3f81d963439963947fb4e7cadde2c72bf42d75b6dc1fe2e040853a7fb473cee8498852545f734889bb +MD = 50fd30a059cc9ab8ab97b253f4a095faf61f3ef768709d391325bb77 + +Len = 27832 +Msg = 936b17a9a740adeefffa7106caa497657a72d5fa0ff4c506998f8b2df82eb7cee7356d9039b7c33d61e86ad438d591d9fb5206f093349eaa1ac1d89f9a65bdbd18a70adfd15a91a1c318dd736fec15edde4f2263e25614b89e29c27748b7b11f2ea838bff793e1c32c72110ef753ec492a50737a82c0efd82eaf93de8b8c5d9e32223d5834ca794ba4de50cb5670de94e73c3f5efddcf7b1d03b91fbea4c87e02bfc62d10f6522e03444e0d216adb2761dfdcf36db11f4ec8eb506f7ed5ff88d211eef5211cda42ae28c0a4cbe713299d57a6b2ba2c6ad30700538f91c2e784e1c702c05c06ac7d3b89e1661d72324a2179b5b65dc65eb267d14702a001fcfcb25d96010a7a45380be624c38e82d513ce948e60b10557676bdc8f5b1209bc4ab4344d59b4be40fdbfbc1f4fa79f6810d55695545c7fe16c7380a11b7040b20967f96d1cf3690c48c77a155ce13e67bbd62e6f03d88c893c1f7c30a6435d5ab36e0b89dd3ef123a3b3aecb8dd3d6509f518a7ff18db1bb40d01d929df3a632d306e9281d0fed0398f4d88654f7fdbf15d8095ca01485f42535e36b6519b1b6e2f310cc4eeec348930b75fa44b61b0fc9ca196991e58fc063a17c0f9e1e16735d9320fb0543fa4f1c78057bdf96c4cf25b8493b397925ac56b336139b893ae4cd678818b2b828a3bfcb15af78227189b412f7561957fe14a8eba00c0fd395779cf0b4c9e9a3a4d2d76504f9c0e1a7abff7ac22eb40a5fa5c4ab584d4d95ccc856cf45631caf15590de681df2c4cedb2524038499bf8e0bc2472bd7be74837438543a898ce32e0a2bdbfeae42cdcaa496713a82b23bc27e452e24e0c6f536b75930e5cbf60c7ad4c8161ce9d351963bda855b0380dbc7b9ada7a8873385fdfdb2a7fe06b96d5c1b2d36c9b6ef77bb0ab90a6df149c82726c259c0b44f4b61ae09628b211b2f5c4723e40efddc67c077fba5793356296a2b4bed734f6070e93227089704657a02c072c8f2a6e34a2dec670086b1ef271632120aca40af1b1ef2d4422797de75d7eee2897d9a4c488bd0c6c39c535ceab5a2dd59cb6f84758654d7b845c2d049623a3bd0b7bf5f88618be096c301e499cee3758280c527a6abc1fa11f86d811d2b0a4444a9fe643337857d1f04a3d05cea5da22cf128dfd515a203f649803a1abbc7c68e5a40a270962565096621685d90782bff2581f52a4a5dbb0e3ee3436899da8a55d26b626804d55ffaf263f4c1489cdaa524b9b1ced45cea02e27ee42e4da955421a68ec420bfd359aaf51bcb39b3175c3f6b65be93b0558793a396595609ef2fd392088273303ad93a5d408590f9fc504a4623ba205c2cc1c50fd0dc45920272d377a7e3f0350908adcd21fdb2e4e920d34a49922bcfa10932bb026e3c096be7a1d5d15b1034ca52a5d344a6280a6a489b163bc91e714ea85d33cf61c1e6a7d8ef2b396a6bb5fb6182fe3d1168c10c21e2089ed160f7a239a5187c695fa032d0ebe634945b4f289ff5ac6fc1edaf2b6748bfd74d9bb93837bac7bdd76dcc996a5895576b7756be885e7c412a2f2b54634f9a7990373c7d1d0ecff85e84c247ff95c71652386349952ddc75dcc5dc23b06736fa4bcc07ed7401afa0413d37cb1b23e9f5eb270b3640f44b623c2a2805c91003ddc2b28205b743c56a31ef839f57938c7a88cba5213642478adac4956737ea8f98a79351526145dfaaa3144c311f651d18cd8ec786cf886f743b3daae4674738bf6cd6fc600c782ce61763e83cdd091a552bf8f8c3974711a2dffdeef9f1c6adb68505d99b035b5ba0f126edff3af002b42682af8407feec9b2b7dd80441e94d2282a87f70007fda6fe305c40493da74ca3fb45234ac204ec1b035dcbfd21fa567d827549b6e5637a74f6910f991f8deebfa268751ee5bb6cb00ce83794cda250b180b0f59b76ed1eba8c94b2a900bafadc831c56868f1b2fb9fa052ccfcc96a90a4ebf657763a57a181bed934186375943c6e82e48682d1e7ef53d1278c3de47d1112aff12539377d5cb25182b590bf13c9455652d19f82147241652555d80144df47a2d33efbefb3bc3c3ab2e223eac0e15ea63fd4a84215baf1a522f4086f7c81c3656a4df2eef902c4fb31189d97103702f9180a2da0403bfd17bcd14f7d788b4e6e12bcaeb3c1d2d51989d35e32761ceac557dca01b4877cc235f982dc9ed6e212389159fec82aef52c19acf64b87156ea18be6a01172f0d75e979313c33face43c29d336e7dff9ada98d0fe650b7b3170430929e317429a72fd16cb1f7e3ca200e719004342e3556f84066bec08c786c63c27afae9b0a4d42db98f58e67e483d20fcb6a85fe20489bed06be04979c7e756de0a56a8acd4c6ce9c7598fd6399b40a27d173d9bfc9ce53b969eb2a04441043cfbb320ced4bf78916b9f2db38412d208f5af7300c079d5d77fb3000b05f6fb134280d74e67cfee3a4b6f6de60d1010aafcdb2d15b306f42788a6f5c028c5e3597bb597f2cea3574b306f59571cbc83ee594375c21f6cc9947b1f99a8f4d742766ff968a250653b2ee24af8eff93eb23dd68e52ef4ad2dd871fc5f5a9b354a3d2e6f55346363a204a29a65294ecbf25003964cd847d61b6663b4110acab648bd5a8515fc6c94c9007cd2c702f3c67659d4b6fec690041de9a983af39a262d84e77cb4950a4ec312cd958359a9325df97ed454b9871b99dd8cfe59a4596ada15702bc6fbfb10c72f044a5315e816ca69099cbe3cc4169139a334462dd3bf91c7d87e309c7f567e6d14b446add630d53ea86a537c0938537c4604a895ee6f7a20873a9a7d7f671357669b02285ac7a7ffc207bb813fcb042ddf3428e594c1bfaae52aaba8e48cac7260c72f8e5b246734be3c9f534c15cfd5d58d6d24acfc85ed5b150c24940d72486b0076e8c3903e6606cfa7fb1a5fdafb90d7205a1e69f7704fc265f979328c60f00d7f3d7951541c01887a808ff04d2778dae890d2503abb2afa5d307a43224255b7f19565afd0de1731c1ea951251e2f55d6ecdaff9795655859ccf7e875e7704c674f86ff4da34b0902341130b0eb26f2a59199fabdaca362bcbe16f4766866302b26f7f669ca7346f498ef024ab224e07527c8aaf859d37b4926b34cb62f7dc3250017d4f3bbe0b94dad916a550b7fabd01ff564ea35abfe79877b55b7b53d520f9b751f5e2029ec77f286cd627fbdb140da9eccd5c86358d860cda3fd820b8925397e3a1b7f953d2e085dafe557559d31f833477d7ab036e03338bbea3e9ec5106ac1b9ae22d937ca4f7486705adddc4de9316933d509052b8f3b0210133d925bbfbe22a8c26c78c74879e575d2ccdadf3e37b68b5fe44014c5431b11c88e7d51a8e1e97dd6a55cbf73bc41785799357057b493f683c8742685ef6b31c6f7e2bca6cb92afc83a701d61da3efa61c958abd616a607e92c1dfb41ae772297106ed749d992b12f923f5b8352126e89e3d0dc39fc4131e885a9ed78fed356915e7e4bf2aa8e246523371468927067286f2aabe3d41a070a7ba487ac5ee4307e389d8541acc96c1183e3b28249ed56d5c1b275641c84e9d764aa544c5d3e529635591da75ef91aad2ac1c050b6cdc00a9224d34b54067cd7e707cde968563f81eb1d6fa43f8192a09e4dc85487b6354f36ee400a0933127459596ef40eb059b9b06705c8dcf776944504351e1b1b290c567b4610ba8f5d45522bc20ccec133a62bd28a75b5cf38e0b571911e1f810dda4758400fd67fafc367db4194172d4fffc3cc483b387d4c2e661256c4d37c7631a001e857eb88ac56e104681a7649110f0ed0c9a9f38642c5ed6300b2f561d49ae7048979683eb5a87423c0107a99295c637ca912657e9f5fa1f02968e3c5bb8e92dcbde4eb066e1097a5d40682b1fb70781c41350ccac4443a263b473d3c8d7519f6f04ad2743837a2270e7d2d1809d3a35c3c6267ff542c0c81b0de502aecf702ffbaebcd1ca6764a13e9d4d83fc71e7ba8f52af580c16f9f9f14aecb153c7ce433986829443b64e5f8f0be229dc589678f060f44038ea769eaf1390c800e8f145ef340759f597c1c42ad898ac697cd0d7ae98fb1dc2e3c01d1b0fda30fd5a639be660530929334438d9ad78f2e8051c3f90a1ced9f22b5ee0fee7d1cf9244acafe6b16f8a27b15f23623288e4a41b03186024755a10ead84d1f437e8e07ce52e7b7cf62c6373a9aed8e0ed26ae4e40ccae4c8f68a6447b7ce48c9e755a322dfad206334a3a1f67efe25ea5e6def8bbfbde5365b4f366b81ca3f24160db065db68ea15ed0bac0c92beef6d32d30e36a4592a15ac93cd7ec1a9cdfa139c74c2cc7fdd8c96e5a1a55e96b4405886890e44077d0eef3d72a7fcd2baf4e4ec385f3c5cc1713719c8e86bec3b0ad86ca83a262da4c92e356d0ebcafceb993e44364b2665e6bd68e69fe40294d74b86fb3e2d23568ed706306dc88a7d1f2286bdffab7057c237d2ecc0e66b6b2260276f130d1859122beaf8539e9228a46a96b5249d2a1e24033e0394163f932c7be68ab4aaa87e7121f01314c6688c25e20cbe5788ba2596b018cf7bfc15c94fff22f2958e5a132639b41533e874241e19473e0af6a71a94ced1a4faf0746a278a8b2b3830b3d39bd3a573336d4b6cf780e4a8b18f8749a8a02738939be1f22d7e7d991f2a3c2c5c9052b195dd64d34cb953a2dd8bc14f3ce457ded876d4eddc7b88c0acf35989e2e03a54ddb146f3781312b101a3eb97ebfc021c2be9c3d9bee21b3673f49278c953cae16d71685a242ea037a0407cc01067a485209d45324f42d36f16c68d657a6b92cbe7965f53bb8c9abb4be9eb3454a7bd8e38e9bf83f82e1fded7e190fc60881098beb8829cb89d50b06718bd81234ccbbbe757c94b64047f1a69de53aa2 +MD = c839ea1b3a0a35aec803dcd3df13fd96505883ad75d704cdc9ec6e9a + +Len = 28992 +Msg = dec8e6aaf67d1673d2817e188b9b9fa64c5c9757b4f49f087b4ad9ed594b4984238120c738e841a61bfefeb4611a2221cefe35e8bbaffb49ba853e7a7d7ecd9af4d7c5e6b6de0f2fa2022a8cc62c2b4c8052022ee249fed55bda947694195cd499f25c6e390589f6afb48b068279c10fa97d8592f367b192a672614966c3fb1a59f96dc78905b6e48a3ca88b5caaec5292aa467ab4b41a69e375305abb25b4547e1581586e879fdf7ac309841d67b4fd84ffce4fefd54342590b86135be68e6a4e6d1f8bb0334ad0c87137578d5722f8c5a4a47a6a753406515aeddb0eaf9244122acfc716b0c1a0bd6db96e74233d2b9dc25061ee3af49b138dec1a9b28c6ca1173197569a70c359fe0172f9a730e7e56815b6e42cc8aebe7ca0c39cbf834e5957186fb71bf3179b6f1da04c7ed9bda37084c0830d401dd1539d39e66c8e47be44b9dc2f6a13a534cc98954c23cee258780ab967efa5e58e404cbb2343fdc75472ae632c0f42eaaa78fac8654060f498f100182f5e5ab469e507cddfc0626bc0636eab396611668106ccc0445f4042c97e1d4335d3ef08e89486d8888c4ca37699630ae4290f974cf8870355dadd7b8e61baf117eac3318ed1126199e22cecdb87341898a28dfb62c0a208163da90d3c6e517841fd87ecc14d62ffa07c83c683af4a3ae37d2d1166f1a6450212235677d6796f40a69d89245bd11918b5d1bef3842e0831135d57cdfe2c50a5d2ed05b54cab3c905084a52c7ee5348f18a7449fa848072dffaf6d0c587ca17e0a568979336f76bd95ddaf4e3927d8603f64e60c8e309e26bc839fa6934fce07230060382d2e8434e0f9260e1d117b28749b11bea87053b7b48a8e2130fe1cbda77b18769c710b72bc77a7e09d2aa36462da662a797fbe4d8214a710b400341e221710b8f3cf7303a2c9937a2bebd790848331d493c74474afc278d98f0eaab50d74e773d5a231741e7f771f6bcd9e394426334169df7cb9881481f04471c6fed4051b3bb491ed2099f9c154bf585dcb4c43b9057e30cd88c57b410956c23f7810581a7513070cb5afd910cea9149cc2e76c51753353bd6ec277346948887a9d4cde73c47379f68fba9dd3c1bb7ad1bcbff08b254bc0d2d81988eab49c2ceefad418958e4883513b64a888f268f3a3153080c4aa09f094613530c26fb438230d60871e47148ba3351889bec524277778e38dac58007b8876afff59ef3322ad315cba7c936a2b42f950d1d3ae8f8ed534438790d3c1ca0594d4552fd7ab84f42333231ed7bbcad714a7e166330d8222e3caff1081c054b2585cd2a2ad6fd78e4f8e4193a88be2c6038868e4e720ba0713f464ba068eb4151db3e850d4f282d212b8a6797a4d1ba6426cb8ee3f6b9ef8215a58ebc67f5084714416b8e2f62f76196cb21eb191ddee5def51d0a030895cb8673c243624c2a6dfb7de595bcd25c0cff5051202dc9204b26ad44abe3231cb25a58ef1fa1172f2d579bfa0a40a1e68a2fc1fe1d29fd08ffc79b0aaedc300ca158fe1e376c7f9deeef42b3d501f61d44eec531ca55e31f67896677fb3758ebff490a57730bacfe178c1b16de48fa88a00304f10ff8a0ecec33b6937b3cc24334f527a0bbc5c5d912f6cd2e0e5cd4af07382746d45b5ff7f68f35671432979ba824fb03f7e4f3b746f501004b87ad1ae253d63801c746c9ee6389faaf63fe7cc39e2e870fae5d1f1b515f967e0fad52971db8d07e827de93a785a543515206ded2a6934eb6c2c99f9d18ef7903dfbde905e761533d42ddf4496517e8c9124f68e925413746587ad483f372b6759c04633deb71009077e347384157f9e1f339f0e9c962b90e397e47061013bedab2313ea6424c7e662976f2e0c4f5f510675f1d511d785282c83c5d9ff952e087a4dcc1cba6544b42ca118dff4a7278f9011734bb8c127258974d9ece39a0ca21066f930a6218f59aec3b8ed05c4de3f0330aed85bfa1b6d4292a60fd4b9dda2b3952290f100aebf3026d6c0074f8c49a8f928e5c02a69ea9f04b6ab999aaaf0ac02d0a363acabccf9f1fac0c2ef3994c7956bd8b0fa1782e8f39129fbe47a7443d68ad1c3ca8d6a534dac55fe4dee0aa82bff1bf3112f1f6486bdefc2405616bf39d982db055d80846275e78211b39292e46a145119b8a85ce6c467b65545be6a52441e710222f5d557dcde17e28e14cfe8362d92b7bb05183a2ef89ecc4f548a4a530d4e6ce4b38e556aa285688979a55eeacd7d953f1ee0ab8109444c7cc068488eb83ae9aca1f783a59b944caba75d6e0f5bdc5b4cdbfc6147046e7ed5ea4c757e85fc2181a7580a17310b36fc873e422c4175b1ea24b3830750e50961ba7df9aadd5ebe6badf81148cdb4cd850192ffc9e6103d22e14f3a4a557197291945fb9a292665729b20c1bfd555ba4dfe9fd06fb277aafbfa16ad977bd9cd33edeaa3d7cf1dc09f59184204b3b7a55c64afdba40d719e7e575105762ae7558920b51ae8390b77f9d028bb9fcda234bb1d0848f35fc5c1b2e047696fca61d73398ee8855cdb83288e69854198dde12710ff240e1103cbd9f7e42020bc310fa373fdd15a7f5eb985584af37f85a32e58624b7ebf8889e374d1788f7d17dbc679ffbcae765186e516793b689c79b675603429e70bf30b3dac59462714a612dc673b6fc29179d0706c7f9f5750bba450cef53eef7be6e424b0ede1898fcd52abeb957bc0146ee7f5f7ba0b4204e1e94b0523ef0aa7eab153530dbf29371427df77bc6529779729d038d6e3bb5172f1ce935ebecaf8650f23e3475388b3111ec1ac0eb061438912b9b044dd15aef55a5609f42292e5ec3a20e219331a7c2a840cf91ae1fa00bb3efcee924c0375df8f6bc982bf1508f6eed4eff1d2610ae7140bdf5f7e7627b40b34543da4e76e980d8a6288e8a3ca0b89aa6d6fa5fed7dd2b68df4aea4830fa03da71a59c43c1b5513c658533d1b190873bdaf142467b53568e696bb9f2a503c559d77886ab47cdf6fc32f62521583c83e3c9152bda6e0012071e4062080c47ac5cf614f87039387b446b5a31151655fc4ca859c71d1859ea4d6e5776fadf5c354e4e0966454e8b3a9f6f3ffc2f84735cd1092da8a112d74bcbca1f7d3d86b80c985fc454acd04cc177cf05cac31b1b221b6c0f44e8d5feb32cb216c962aac17ed59be457f966e3bc67fb5a418252c3e876317d3066ea36bcdac6cc0feca42f288092d7c4bd8ae677ea848bd4efc3f41c8bfa05df9db815c54078ad954e0b577623c51d3f8bb4db7079fb39196dd7323ac73627b71fd8226908384a1df968b10429b3332cd66d295280bfe0638f04f4cfb276516b4fb2d3149c961fee9124e24f1cdda821102c568ab942f067b5f5b247d82b2140bfe0be5468129dab87c851a387b4ea90db6af9756e35078a94f1f14fa2d505fbe2ea2ab5152e51c95fdb95cdd4d989109ab178cf2a0684308ea248239d047dd15b27de930e49cacc8bd7151a8eabf204c0885ae46738051e158f1d70312a07858b32108ace0567299e3356163fbcb4020f681651c029f897bc10e7c209b6216ce5818718dee1b5550978df4d427c5d8cb9d94193af8cdd3204c04d7581495a1c0cae98b9bb5f44034030272c517b4d09624453269fb121716215a527325420076301cbd9edee8188e4c1b44fc73a010c9b41d1871b3773da66998543875701b38b339715d1000c6a69d61d041e2927fac74a3341aca032e184c474470ad27da4e7bc90ea1f44332c41c5b7f5e0c9007878d5fec2ce5bfd0b4f1ee8ce3746f25ffaf54fc3232b94430f191b9199aa58fa126d9a96eafb10cc2811593597351e4957860a2d8716ae531458be73c34d60043689ad4a9cde3cb892344c19a52d4ff56fd776a5b595ffb1140d26f8d812d40b57b29d3a5ea5df35200047e6db8015e8b6720bb82939f6f1609edbbd52ab1383f860e102aac256d653fdc329c4ddeea7bdde4fd16c7322a89c96431dbd66ad029b1d2f100bb45220a0a5545edba768970884999e09c2113b2a7c03b692e61f1ba26fce0eec0c5f98986f52029a7ce24b08fd9f5a5bb7311d8cc874045da9d813b0a1444be63abd929dd472918bbf0a4841b1c7a30cc300e445f44a838812669f488a285364b01ac3337d0c9819fe3ef34549990487660f13f897cda0acb05922dc52f0b1f21cf59efbb1a682dfbafef0861d8a0b4610ca20f72b940836241e32eec423d408c1bc8a592ac6fe5765d8a486b61103d363c08fc4182416bebe2433e2364856335efe19de30e446fb8f3aa3b99bd4aab9df60d501f60458911f19ca7921c4a4ec3528c1ed7c951936a7c362a1473b4c63d44985133dab4a67975d5af63f2f5cadf4db1729664fd1b34fd165d030bb855bf2d9249a678f78ace76d69fbb6eec9f31e638df4767afcdbd80321c8f0dbd22cabae17e9fc274fdb6fd87bfc5199895602709ae135ad173ae0c72afe0022bf307f16e39474194c7d910d056a67a617415180c2721c6cad3aeaabe5d1d7269911edc21c1c57cbfafe1ba99ae891ab003f7c02a919a3302b66661fe706fe3e1c4b683e26042fb5e7f7300ca0d947feb0baf274936a527e1e37d391a2efddffa5377ec9a5ce647d7fd3aec4bbcef337c54e455525c6b2ccf249c3afae0f0ed1c080b212ffed8e794f2db850403c3bec9a63f532e4c13c9343f6b6d86cd6f96afa9172a8b8e4163fb2501d3dd2938a63cc96828c34ec68778fd91d9a73fa3601bff460d94544844766052dfbf7875753b8406dcfba9acec0326b786437cb3d5c9d23dd4349716116c6976b09036a3b230a1c178bda7ec823d82847d43cdc87d1feaa78752a1d2524509164e3aace9e682e64302f08eafd18fd8a1c5907a0adf860e2a2cd6b8a5906808dac2a3227098991c31857ea71c605ff2b56610cba08367086ecda725b7513f2e6913b5df5f50dd0b36064e3a5cb716966969ad08b3f1289e1c71af302f2031436c49562ddf97b67af88f488f965e1d8d65d54e786ab23399dc21d5203682a60e8a6d705218f38c321f2754edf3deda9f50b2db64ee4deec055e4013ff30106586c86ea9731efc7fc54d75a9e9bbdb793d3093b14664ac3dd30c21b +MD = 72a5b7184bd54cc1893648dec7e5dec3be8c8a018ac7275007b5780b + +Len = 30152 +Msg = 8a55e2dfa8ff110753d54a6947f34b9d456008970b3942e1830b5a283b8068fa153e88ce400c7445663658af2733e1d1c78697e623e26ee3ea9197ff09179c736712ac7ed36434ad3b94af591e72be7143fa7b7aac7b0ad3c6f9723ee2cfab9ce898f9f84a5078c738b7f76e13f6090523855a5b8c4c403a7e0992ecadf1bdfd019a14438e18681cc667d9f7ed09eb16ceefdd92ad9d369f7c8aa01152c5f91f18dea86786042d334e6bfcfb96f18c2bac00ab25f5b6148a274343b6b8938889972e5b6d195cef94368c0a82f5f613cc25806d1f4ede0383e7fe24e1c9a392c3e450d55c3167d5c8e792a895f262a981a136ca859f5f2b132481eb9d6c3c3e56690cbf3cb56e0856ca45803a757b75d388eb6b61d07fb3c146953fef89a8b4c98c2cc1168cb9b0c6466c3a7b668ba0494267f7bac887c316b502c8e1092d1da4b77682f1a090f3a1c2d17e60add8516c3772179971bf8599da902f7ad214a17051b4abd5d83bfc6ea83af2f033abb1c2d0d47305b26e1fd21b071cc2cda567b4c2ace3ca1c01f1b55f704133de4be8d57354b20673ddb949e12e36c2e22798f87127d3d9542cfbff4f3b113197021d2d89bc7ca49c557c8795ce2681fae45bc5c8ec2309680241d2e0620bf3471678507bd27be8161c8f139daf9307fb22d9a12ec57a6341ccecb97aafd680d4d022c8af5f54d9c77a1b756399265dcf2a39170b7880edc5d1233985e81ae02878431d8f2ab28098b948364d54878a5c44a4acc8cedeb1dd5b0fdc69d6811c295602d582fd3be371203dddc5a75d968cb742eacb8f3cb772b0d7298e41b13bc1b1887aef9e970c3bf623f2325c518a45cd3a587d8341056a19a5a85df15245d7d3fd9340d66f03dc8421fdfc390a6d71ccb57e467196a5afde9ee23cad0d43520288a9dc6d6bce3e1260878a073147f7fddae58f23e39f2747ec5e943e8a3c1c8751432b2b327747e70817468d6d21bfa8d214be5fcff9bc9cb7a4ce6d70381caa81e995d86d06e14d403697956702b115c4933dee02bd5524263d5000673f3ab24024823bc381f38a306be5e5c6f2b58bd9eb729825f3d92862b084bf195a5ee9b57a5a1dddf265e7013e994733f9b35439a3c724e0a132f09385d1742b9070950975854662601facdb371980562093b60b43a25cdad147c4df459ee548ea58ff639d6b7efbd40821e5dfce5bd66e3dfa78546d06bc8a00ec717755db166efe6fec79758d50550a8e48bd209f5cec9967a75d8feb2dd545af6fa35d1e3d264b2ccc91093a08eb0c3a2b5a78138fa09047c0e670d3d6b9fe5702521e76661a25802a6d914ecc9ef76eb73c3c81189408e0ed7778865e3e132a510a00ab395176b12e9673924377b17214edd6af9ed0ea7c54990fcb6f6c6c7185566b845dd32408029319cb167d238e69f5ac65ca5a1f611dd39d6bae4cf273c5bbc7cb7ba818cdcbece9c4ecb9350adeda286d443c8ed771ae8a2fc5e58b7a3ac37c463ad93b48b42a4d446e31d02d9d26b08eb37e1e2878b13edc5c3f20cc0bf5f2be436c74c1e2d4ac1244efda40cb60ae8fbf26b99a5964223d1a639ab261d991fa3d6caa7f80726df715fb3d8b93118939113e46773d4f9c19a858df7464f8c2c4d1dec7cbb48cfabb895bdf561bc0a95451cdac054bfb1537ad26d95a3bd9ebe2a7ccb2eda6abba264919aae98bf576a827dcd58daceff660d2d66eac0f05761d663d532d805615fffd3d848b0c3958fc3972a85687b3a55cbf6f88b10702c93db63a92d2671673104dcd5786c612b71932970daa05d08cf31bf90eb24c5a4e0a41ca572685723c1fdfd30a20e00bfbc8b853eccf4ecd11ed8f7de8f705946b4cacf58a6f02f2d8f55e5685a282a98ccf73af2d0e89329e11c201fec85b398acaa2c313f6061eb05a705fb054d676d2f60db2b9afde889a285d90386d76d0124dc93dda03b87f2a16bdf5737d01f936072b6576fa76556dfa072f7e2d7de16b9dc96ac8de409caff0ee20b6662eba1ec878ce4d3779247e4f69e8b85299f5fc824b53c3cec7fda8b1abe861588342f30399f726ad0f7a37ef2ac2ce22f1932fc4f7feb41c752b7b219b565c9928181e7e39e8eaa55ee1ffa2f3c6a8e6ae436b2a7475841171ad920867718f7146c40502fea87f6791e03e2f6cfa2ee5f78d197d6bc019f3e40b532eb742e22a05cf1256903ecf3bce005d5f3c684969f5fa9f8583e55d0af5ce285b31cf3e0b8cc0ac4498b5c1693dc7c2fa0c18dfb8cf11660a65ee37a0cd7d78568022895b041f3a92be123c3808bfd6c88310d91bae5ad6d4b8e28efb93a0aae84a43ad6394752609a95f2af2547001904a5a20daba5e57aa25ca4c6470c028d93838906b6548d77102a472dd4c61ac1c08fe9b3d1aa4525654ad58238c6459f1f10b1cba9f23b59270e7fc41151a3d326602318cf7b52d9eec939a800e14a5f71ec4379a698b28339c32b068da231e9b0c70cc0e7817524b9685fac31e5874b56669cb51eb0a981e2d8c7699c105b51fa14f530cc6542725f9896033e6b92ef17204bf284e276d19ccfe361bf2476c85cea8adce08f416f3beaab4198bbe3b74e99cfb67ba6b0fed218ed8379671aa973a82c49c677d867f8ceddebd38f00406743a6756565ce762d3464435d50bd61b8de57fbe0b79df8f0c5cc66713d5ef6ebbe5eb3d4b845b3f8b2e625dd69e5ada71dac67b1b6f88ece5fe555f44f7657665a56f63c06bd44ef04d1bf6c2b19d9c8c67811dc0e8eb5ec0db71ecf4decfe41b82db11de97bb55abab554ac0cd0728869798ea216b6fac45fc03584b1093818485178fcd92761d6350f99ff9790048086ff42b67807ca01b68f4e970171b1549b50b25b4e46f6ec145f03e953df0c2baf97b27b9af7a00eb272ae88c7bcd68111ba01bbb130c0f6d91206fbba13f5f433c16284081d1955c428f9dc6c2134185bdbcb80ca9b7ca0e3c737a932e55e74c40ae74237dea2717c00a4f4776546a4ca54845cc2ed7654c4fd0a6466b9b227c0e29548b2c2b7ec3a98247361ef7a90fdb2d0a2628d3a9d1d11e3cfce177d87cad7110a014fd610906e1cebc4366c77665514f4021155e42ca4784dc1652d0f3256cf089bfc99991de0e2a016c088c284d9e5c42a0044c4a4232c60f9495d38a7f043c6fb5f5ef0239f1a32c2145bfce9bfb78552e083a8f42c74abde3a6a9e9c2203b797ceb28051f728366eb852a0f554feda15289f2b9d1ee570c89ef1ab7f6a736d09e110f41997910d6503093948584014d94ef3a71f88f372710d6ee9c2383759ba3d16b5faeee94a5daaec3053281fd817ca3db5fbe92303400c5ec42529b40031192030667b955fa11688209652e2967930b9d2a2bdf8b5cdf23dd4e8bd7df3072bba0dfcac29cfe7cc497482573cc246090477a475f90c63758896bd41f99494db60a91e2f2b0d8a32bcc6b7a382fe36b9aa3f91bf8869b8fccb83f375bb8772bea09c5b42fdbb10e06e71a6c659bca3d92774dae93b70270e73272bb7382e193bf65234a6263b146bbb1fc04e256015dde8c1e081969246111bead684f40b00d9de552ab7491ffd2b4f2ba4997a8b153e8aa153270e528eab2269847d8390b21ec53fbdf4badc43a5772fb446ddb02a81798d933827337933230da5ff4b71b581475c5efd1ff27070ef868fb4a361be3d2201313355a79e5f9a51bb98c0007397d1359e2ecce51c0404ea9781800258c83086bdb73e415676f4c055b895df84d90f75ec086646aed543a65c3bd82472c91198892235734a2fcef3e4fd116161ab3e87d9186079916b48544e22304aa4a641b13402dfcfd1c09546e9d4e73882a4fad5e5ed40006c4c7f7f0df30cd756e64d6b3ed781b995ffc443e4be6bc7705cd0fa82e5897da7ef5570ec1ce27d120f91211a2eefc2ff33f87556383380a3193d6040afa133dcda66f4991e458e6e98b96d56776e6e85e38e55dec0c306a380bca19f9a2be56384205465659a9db50822ba642f823ec2a5126fbef69ecbea29cb2900338de4e4731e2b0181762d9de46992c3d5df962def111d97382b42ff5ad581030a4bc4c82dcce2de005cb07193fa8105f8bb172037f709f803fd0e5bba8824289cea07972a99065b50b2c8e8bd51ffab06b9246206509f51e8887077bf4f9cd159ed1fd9e01f2029f11cc95bc71c89139e5e603bd0aa481564523bebef9855bddfd99ff8e4dbaa9a6fff4453379697e01e2f3d463d60bee2f5eea310b1fed91e7d13ea7cbf3b104d3bdecc67857cb69104803df983105e2b2bb2589eacefb193d04091edc5d9fbb2d34fc3f1371b6f86f015c4ce7835905e6441bede36e759be77c428c49f14c76bc4a6cd88d31f2d625f34644d534d001d3e216867f6724beeb2331199b197fdc89e883bb6cfe46a93a080befecac327b817b5c7b4521d02b53df1eeb593c02959bf78a0d3b3f7b1ab726f274b354471ef9f836f5be05418a279a502d0bc19b4afb5dc9f97f5e59d0a33742fbb292d68f4242ec1c70793e826d3b10053a1213a3af0488a4c2c2a874062244ae72cfa979643fc617e5e691bb2faaa69b6d963147c1d20f398bd330ade9cf40b37a74868268d90c0fa5b500de74cf5a182cb5bfdf38b1a5de63f9b92453267d3252e7365255f7052b364c5493459273a4ffd783121d8894bbd19c0a804c0f4554839281923381fa9422155481a9db3b666f644789773e22fa5d24ec6adc72de4094dc2eea0a5e3371f176ca51a892f88703c4d1eb4ebd98c08ff9278a0c37911f0d2c0701e378f8eb29d97caa4a9ff32e4460e9e1abec3e38f0838387e346a61977ecd280c5b6912a54a5343598ea7484b89e591395b35b87072bc80a698765555983580eb9004555f942b89a995bc3b1e9e7e82814fa38d85c57bdbaa7e316fc3b596154c63e5e95a118d08055db27dc5fa45dc930a91e5178702b40a4400035a5d6b5faf4582211d38f468fd550ea2ea03b819df2a9531ae2dfda4369886c2920621ba74b37daf2170fe17020a452ce36161c4d61e01f5c220b926cfca1a20033655c03d4c1cd5ff50068cb3ebda8e4a99bf6808537cc3fc15b1b636775eae1674740b796df4581f6caa4473885339a7f34d6df6796a1ea46393ccfb2ea8cf443708f6b997a887fa1d55d8d15e23d16424885110ee6e586390cbf58e3eacf634f4811c6e678df827f895a45ddbe0c80793eccbf820de13a233b6aa7045cfd5313388e7184c392b2164f65169900e901ad807191ccf5dd2f8b3006641c275cee18a6cd147b41e936f18d44a850901cc165753c2ef384208cf952 +MD = 3b1d09969066bb25a554290fef6557b6811a1b3f22ca79d5c74cb680 + +Len = 31312 +Msg = 2d110a64f804769449acf10496325536245ba13f85009bd860bebab370ee420bcfd7b17f75235a20fb9050c9a5e885afa0333338882b7b112ef04d7b97fd87e5485b61c0c014088f47eb893de64af1b4b77cb2ab5f1c49bfd8ce1ec6742dac601e04e1cee3c0c808b22565096041e16eef9ee73f10bc4d0de6bef73d0d64f8a3db39fb53e60ee2b3c6a6acd51cb39c04d301979da5f2cf21e12a9e876c8bb4d7066475f4cfe59db90ad72648208a6b9fe80e8d6d25a516235179dc4d998b292328ec185ba82f4242061e9a0b76ac9667b82b905699bf6b3cbc1379379a4a9cb0c839ac3079d3197543e4d2c626036583cac1670008271693ac603dec79b258a56eb3f91a48b96a7b4892942036751f1ca639db147ac55f52a8c8f0153eaaa42ba3c2c6c21fc97d7c9d8ea9c1b0ec0e59d5f9b43af8818d9e39b35959ef19c76aedceddd005eb999fcb42d9529b4f7863de6bba198843eaa2e589416196e90a89d73f04eb0307080c5914eb7b0086a66149f6b45a35f3bc8337b270d53a01b5b1e67d04bb1f0510eccf6ea9e3e678e07c9f016ca404794c6cb496ae5ce4491009a4f0a5e963cdfa67b6b7d933550f6edc66f6a8a0ffbde283e69dc39e9ba962ba9800ae1dd7470ea495574412563297a8293c31f62da8c6f0543076446709f5eb4a16e9fe825c93ccf4b6b229efc9a4096d3bcf4d96203fdc86b590f650510fc543981c356cf2d3065b3ceb202abddd26bc5b494d430e966f0596da5b5f69f9700af0106a9df2147b5351b69e0ff48a289d04699f3b5b14d05839191c9b39fb1327848d441e459f52635ddc4ba557f336999ef5eb86edfe28070818e00daa5cd623be5b6bf6d1bcb414c826d0f4ce60793791b6d82dae9f9e9b699e50bba266e2850541882d80b2c9edfa59d504421818ff45740f37853e5b9bc67214af0a5f5fd5c00843cc39cbb8765b4001de99643c7923f738ac5922868f865dd3f1cb90759c597843d9e34daa3754a2fd89bd8c0d2e9106fa95149448ff11273587cb414a603759315f6881c6b94b46700d94d8b2a5f86bfdf99ddcc974cf98e47bf4ba09acc273b463afaf3583a9f50373088f5466c1eceae0dc423076287785d52d42d805628e75efa01f1e1dd7775ec200fb1afa52526952b90ea68b848ec39b5d22dff57f711b0a2318aa103b94280263622de8156421581c87523d4ba343d76ea3480381e54fbd20e401e33f140a3b1b0db4b870ecbbf9edf65d13e57fb090470b38b8d0b2b90f7fc94a1e4abeab760f44d8f3cdb0de3e14a3ee95baeab0cfd0a2d99ad4a000082810ae4ac35bb4bb274fc120937a332d79d62e4c32aceb9bf1b25333f676cdb0040054ee14b3cc104b7596c72a1062d105d744bfb68c0bfc9281ce0b9cfec710f9e36492a48e9c7f63ff8070fa3a122f9eed5977ac53b5fa9b5871a830fe972ff0ff08bedbb4cb0f5735a6a46bc2eb512d6295fa7ec9939ef47f6494183fe415d29e66fb21ed02c80f5f31eae56f973e9b7c1fd292b64def863ed057be8957cb8506a6d0de00e9b374c548cbd008bbfece84208652e28bf537dddd7788a49858f37ff1c67ab627d76caf14ce9456029ab0c1bf9f2515f4b9f0a3b27ee0574ec402536f645dd7653de064bc7b99211119287d25a4721630429ada78f42d6b21189cc84732f02b4aebb92d695a473093831dfe791da3aee8991bc8565fd6a9bb5ba828a2b899797febdd5243f4074d2ee0798ee4931fa5c4c45db5754945d6c1950eb9a77fc18bab45361b71d03f3e8a3923738e8d4ec36bcd46ebfc39e1bddeceb6c47f0ed12777ffabcf1c7659cc509503f59e9398cf86bbc0b114b81225b80f889051ed2f168b2323b86b6fbbbf28fd015e3d2d6593bc97b24ee54d40d5f75f6c6746a5451f8eb8881c8742cfdfb97805f492e41dd5b668030b9680d39644c74a8f86bd7a0c29c7c1449777fbf4ac0ef701c63f285e1b369d3050d93330474e0a5138bd35a40357b678c497a9c5a8c7bfcb00c7eef6940a67053ae1c96ba7fc94f5842de0aec5704f003629401b56ac459b6902d864c9eb49d17d1ffb0f0cd9d0c39396e2f3161a742314b528be5ec472b8297a4c7261e12bde401b32e320eea6038d80a33b9f5e0d2a86c3c87667182c6c67b7b3e605f4f572ac5ed7b08842fffc9a718b4d0743025db6dc8a0b19ae5cfd4b3f76895c2d8fd6e96f503eefddc1f7e0f302f3f7d23b04c987d5441e90ebb4fe9cfb230f93e2521ed60755fbc8d63c8a8d70f31712a067ea4d12ea1bc6bfd9a856ac7cc52ed42d731c62bd540a2413bec83d160e0b1ace3fb5a7c5bb56c2b470f3f05b27074eb111c8cb3da3ab95c4a42ad12485c58f80f047fd9da34ada8c7ffd2e8adc2539242062a99f90b41096663d94e52349e9c6268b7c3a7ea9f1abfdfcd0cf8d917bcfc77364a9c22c7cd32989ef21919e0ee8090a8c64f27cee5711763df3e251fefa2f826424e21bc3c11895489f76cce82ec04b96e2a7cab9d9e3f5ddbe826fa8ed801710d7978acca858e908287bdc5ddf74d6007d479b3a799c0018f716f263efe1bad28c8a7f7fd2140d988448d557454c3434fd77f8597e6420566845e316497af411096305c486728a5e7b84bfbda671ec982ae1e7fe3262dbffd7b849a944744c3617c921830b9ae6c4d4d7a2774b0a8696cb2d7311dbbfbc7b0d172c0326f74ba77e64dda4aab5ac3159eb876c7c408b95aa03a17ac2a24832d209950e372a77cd06dd400fabeb610dd0657586813b82fd8d097b212f34098ded368ab1c1365b1077dc52ad56638fbf02f075aca122f3353dea08ee699d86f2284716d40a437cd998081c64f246bdb1b7328ec6251d66a7824c50caba0447ca49e43e5f5b78648e320aa51dc9bb744ab7d3c8bd555664ba23d85c9b6891d57e19b40c3bfcfd9a990d89f6c121eb3bf2c97c2b7779f274d6ea35334bbc6eb7746060874e35fba660f12e153643fe9a11b7d5c0ddd91c1f639d0bddc0fec07516e68fb7814e9a114da6a10c66771b190f47858ed7bdfaecc9050463e476b298cb72eaa5bd8e0161c6f389e337056a415542359d4e6cb46371eac6cc9d6c69a7face1958e83f592135a28fa093341499496f8cf6282f730cc114f920d527102a0dc0c3d8eba7c9d601795a4d614d41aa549833a04f4e5f70224a466873f0cda96b11902eaf0e7a0a924193f1899818fadf83d1a3a9119f16fd5655ab5f0fc8ad7c892a611bbe934450c1e195f25dc21350f90f0820bf5c86b8fecdf181cc2bbda8ef367916fe3d0da3c3ed4086e4677d10c295d69ba2bd49bd0b5642c16e1b62570d5f7f8a15a0ecf30d5efa2c742dbe88a60a150100ebe672449aa7073fc223f1a94a7a5e4ce369a869ddcbcc573f601f6d16ce3c220de541733e273b854888de8ca2727aeb2f0c2a9d12bc4fd3c3eb3cde620833504ccf915eedcb4589d519867e0d70c63aab5ee171a4d49b31e2e549c396cbced2d02bc9ce4d9a0d938f5f5246337a2a8080e636af3c1c99b9c3d8ade25a1ff5efc081538b069c7beba1e1a8aebe9b8e07d52c8f1d819a31b28f4bd003540d90f0445a965dc1d978d83127f17c53d8da15d3b955851c584c666dc71af02f9c871d863cfa0c265aeaa368ba96799c3bf6f3a114f1adb45ed01b86d3f37091d5c2beabb2e75fdc26bb956d21fd6d41cbcae969c5c95df2b2a71a01f7c34a23be2a1bde41c5208c45d1f469e49020ea903e3e5055475f7e5eb7ab07bbf2478c62a57c4573fc15ddc01608838cb6593e933b3c804bd27aff6aea15c0a8e82f74c61c2808cff407789e701be4a0d6e2e5dba729212fd1751ddc26a253450dca85f4786850dd16bd04e7c973b3a85a8188706c4e5a8aae1981be5598e91acadf65f39f844526c8012aa30859192da9ffcf5b70f354e3d02ed3175e40a9b08538bccb7bc40e31739992db15153eb62b2361a39d6037c29f7cbaf029e2bc8ea79b3385f36fd486804ee397d8ef49cb48b7e750d9dc2aaf83cadf509ec6493d99d17127eecfbeae55e8c5dd392f62f46881086b0eb05533e4e1ea3fa5337943c2a21fbc562af5305c2fe2b7201cb3baf34b6dfb2325e1d52a8a82c62673742a89d5e54912c9a094fcebdf2c75ff61a451dbbd080081f61ebd8b4feb09cc617958346ad80af4e8639ce367442020973beaf9a19b8d0cbb9506acfbb8368768b99685577026f3f524a6e0200809c77b05276fc1bab21059c26bb72b3595ebb371aa91531a4e0dee5f81aab27f183c358c6e04c47057d3f82d557289690f426729fe2007dd6a8bfb9d9509c6b236c6ee58287f53c2649ebe5f2da7bd5c8ad2af6af9fa1bc162b546644ac504a749afceefbea915bac1b9d6df591c6f16efe5b1ba03e636ce1ed3f43f08a513683a3dfcdb964ab35f566c6635439a46a027c195a484ad000d862d30b337729cfdf2b9a1a41a2ad4b90bff97ea51e8ea0119ae84ade4172385830b204a3ff4466c586be4d0b11021d1c9b99085edd00441acf6a65f8cec443efbb4ec8b88f3babf539aeee9c2c541ae76e47a8e7e183c69cae02241e2f40e41d871bdfe7a379ffecd8fe677b712dd58fcc67c8d6c89397f5ab320db4ff72695008abb2c7e879e2fad93f500f7bd9dd841a7bf0b1eeba48e43b8cab63cbc37425d470d9cfaad5f5cdbec430eea8e28352fd16a90fe06249b6f3746590f0ce751d5efdcd6586f898c3ee2f728f84f2777ad8ba6a273a162b0c577bc4c32afdec952cc4f63fe96c4c8c0bf3ad789c641a7a21c9bcbe58605d42dc255180b6dc5b2bb248fca56eaba1748c933a105bc1fccf8cd7092bc7bb6108f5e3844040e4415f840c393c6321081bf4a0b11d4fa69ee96e64e7f61491d6bd3948f58835902f9f0681447b838710e0b88e9ac5e45c61564af5c1b3ab8e1ede2ac7fddf217a8668de4aa6d93c283c715ccf6fc0c68de4a4a6fc3edb08fab9ea2ee325ab810dd64b6fbac8dbf99eeb3c55d598844295a943070aa7e2c982287fca2d0573d0c4afc53f64230a4855bda04853bd86f52e2fcfef83a541499efafd80f805ce9d397354d1d96ddaa4d7245b88ac475f6a91d899c509af9d15bb91e1f7e6bf2242c6b188ab8cd1c39bbdafbcab51be63ff7b443f2c0f4f5cca629ddb737b9a056e16eabf30f1275b9953c04234e69b3b4034e32e98f6dce6c41e7f38a8291efe7b849f8706a8b7192a43f69a99dd565bc97945f67072f0e18f69a687fa71b663f7aa407ea1060972cb08c3146e98883be792ed1556e623c3a8bea457ded818dc6ef26de474aba6fef81ca64e17caa952472c3909c0d2de139c981916e9ee8ece5de78877160c18244dea20b629c6223554afba5222cb9847d78045439007a0c0210420a4e9a9c579190bc2db092d8b6b9c98017d1132ead6e601e96c65c5f74874e2b6dc83f74773f60bfd2b5a635d5b8b7f7ee9009b3e574487560fdf9bfacda5edbbac6997068b7135402581fa109badb0b33465770b2f7fab1b9c621c13d65 +MD = 2fc3c9284717e3f64cabffdf530ab29e644f23690bccbaf7ce199eda + +Len = 32472 +Msg = 69cd2a23fb551132bf799ee6d7dbb71afd6082ee243f27785c58d7b6f7c80dc7eaba135b767fc96907e2a2205cb5ef1fe8b060e8787cc792170a20bf2e29cfcef0582852f5d834c22506b272d8e85dc13c066d94f67b60040c4bfa5402f78b26434f70eec388dca6e38ed9c4959b8969c009b2dbe665793504c46e5db95ac937ab48f31827b6497e07221cfed9f7fc7d3d6236a38f619b8dc61d83c29c791269f0ebbab9688b01b05a698508ed243d677bb801d63a984d741cfd426bf37ded24d9dfccb7cf2e8ea6a40c1bca1949d48d42b41c5a2f311752cc0cb141068de3d02fcd32fca4c778c6adb2e62ca48f4a595afe8e19b655818f9ff3db2a1cd27bd5ba5cf26e2f80457a3c04ef17d81d26318a3d5ff9172c14935d5ac50f7f743d9b423516f7b77f7f291baa3d71fb1cf07f9b1998e499dd57c7cee879d9759ab18b8fffa57e86ecad3a104bd82456b331aa563c40c18591d391b946fe6e476c600b6863a8eae2f05817e48fc916310b6f1a804b5f78236f0e5ae81c5cb83d13d1849709262514b307275f201731d44b3537e4f1fef0bba0928b21119b9e9eb78c5fe2982716635c42d248a3ca5b869c086949d42313954be78a2dcdc407b47f1a0212b9b4a51913928069c3eb7e90267218769cd9c8f99993c1d4f9dfddc59402d7ef13d3ba7d027d99882681813a10faac34f225f72eb22096dd3df2071a1ecc44404f8f3dd64e8d856e74944ccc83298d4b7e11887dbd16731240076dfb4401b3cf14ed166d224aade3562dc78ea6852383e7a4642ee2fbbf39ab25f7af2e288b620bf72e8aa43b77ae7352dac8a298d7a4d5e671894b59e21b25558d8005c934c2dbb46b74fce84c99750e6dc19eea0f75f2e098d51db74480579e17b4f16c16b72d2cb67553d9956a016668c2c30134bfe399c25c839e4d30e8087d94199a9908a968f8d3d197b8eac264b3133867af4a5319d564a39565f2819ba768a6da257ff66f17d79da91fe15d0f36fc26a4e6dee869bb36a524f48fca607d78bfb522e2bd49fdc9e09730177d6fdac5b53e43434a905a1ab2d362d06a5ee80b8db2f8faa5ff90f1c1ea5553c88d85b50cbf2d4022969c57f22b177a0a9dce6b38590f8f5798ba966929f55fe670201554af0c9f188467378cb37b58512619dee732cf697a1c6102ffdc77018020942db4944726d361a500a8f3f631e800afadc2c6a14fb7946f7bac8b45023ea6c74555f8489efc353dfb7074f1cc76337a20f29ceb0ab607cb4a98bfc629c709a3a55f6276ce3a0917700abdd2f2a4c8607e9f3c16631e7d5db7eaff6240c4510f95f95b398036e41ba79e57036b1ac64b11f02f8b1f98fe0d09cbd4810ddc87f25c4b6af97a98ce31e755c8eaff7f35221f0efcb109cb93c38a62c58b5ab8b236437e171e8507cf417a569af1767c1ecdf1212befe860436780d85ae8edffdac292baea10692bf033a6ca547f97b88833cf5045af83fe17e134541b018e5a077e91266c38eead38efb4d97ffb2bdc7b3e00c3d158a34e1519eeff913c0771425287eb24fcdc35b05decaaa2cffa8fffd5cea3575210f747f8f60043021feb9226be309ac5fa6a5e6695664562cc7a1de07f185f0492a2b5649380b9bc9d7100e27c1e57fc11f54cf0f834f11c6944dc485c4972d8f1f766460ea77cd04aaa936e0adde207e97d82e45e3d2c65999645f3ad5f1735f49d6287af9c13a8ee3f53b2b094c3504aab062b0da981a523185ecaba81d783653db10dbe8806aa51d74897b56c833dfc27e2ab4e9f7544d07131b5cad8392b0a7e5cc28392de403a1b7b03638ca938c6981e4e684792aa684ac69d278cc593ab09698d46e322d172b2f3df001cbda872a7c0fba5ca5f40b34a236817c403241285e3554ea25ac4c246b814d54648f5c6fbd29a4b50646c781a5200e3a87c46069bcf04e4f80f83f07cd3892a30d1868b3d5b12a3002a9781615b4bd361b7624ef33781500dc775c4fe4b254702e0c58814644df503382a94c844332e173cdeb33422b4da080d02087428d273e5fd198729f4328981168b7af7179f3ef19424fd079985ca12669282857377f701b1ea4e2313a9a6a14d24fb95dc764918469af413a3dc67525c8dfbda33fb1b7d83a1a7abc99a958b645cde4a99a298b4daaa5f0148a1faf1765c3c1b70482781fca458691fed9f68e39aedc0580a73ecd9bb087890bccb163d650aef32456337a25c29041c8a0a605348ee9c209621e8ca34b521841522ea371130fe82da17c50031e425c95a1e9a3bcdaa89fa2eecd1357f2fa42b954795eec874f167ef8a539b8c4f732c43253f2391e92decba1acfa2033ea88e22813eeaf3a070ea6c050afdd33497502e657693fc72300122f4099a28a9d5b3a51a0db1f87a221239d011ad7059383a04276814760f3b3e4ec2a8a4563ad4a407582bcd41cbb0e73f339133c986fff4abb33c2d6786f6ad27ccd349f5b74d692e84c0c6345ac1716476b218488593850d511b6737a008559359b3106de9e70804e5f3223bf1feb991e09be3531d9ef511492d494e251a3e7bb3708127984b8b70c5ed6bbd560fc6afba751c5415c54c9ee2995b14ddd371c8203124898c21f9596ad62822529ba0a44c674bb236b2939e668825f290dcf560e91e82fc8c105ba91dd5e2d1ad4a505ade9af9d5480dd2f81b21304e05dcd22d566022e962c0b847261220342fc6ddb7b836ad25137d0f944a8d0391057c1116ae1f8cb6d4da181bcdb66ab2a0b44fa52262f00a5eab545a3af326245864b9023b8249cdab06840d5ae948b3c7bfaf0b634649ecf33fa832357c226dc63bd2db43b2e094aeeb020514d2439f6d8d04d0c40b403398e0140481507ed617a965880fd7d975a7329deb459ae2df5ac656de8dd95d4716369eb86796c2c6125878f1e718bdd65c825aa73368aed95613ad1c06d7299034ea51362f7777a580ed16fe129d13219784432126652ef6291c1272762e2b77bca43266211a24da29134497da8f63bd1ee05f4268b9ea9e9a888cc82705eb62740b4b3085a851cfd5700ca485163612b93db6f0408b6a3a73ff24065f85f2ba26c8a37da24886eb4cac750d5c59128832435114f50337307a2be11567d6c7e898834233c1234c96557087baa7818287509b3797d04bd8ea78b1cbdb871ff35293e3313c2a602a38ba644b93aeb50b77daed705f1988d5ce343cea410689fc62de90777e2528a939412fc881b81e37c099e0055618e5b7467872472f2e3b6c7f43331ce3faa34f02b379076a0fe38dca551dfd63148804b90afbe98e455dca1088742952f0f8a7f9d7ec0e38f92e95fed54c606d5799478fb380d84494199f7f76faa5b250503687772ee7d1bf24d8c2e314375e2741052f3ba91d3b63957233d56e98ed62d2861459e79a1fa9efdd7f451d891dcda7c8036a1dbf59faf9cb946d770aea6ea71e0946c02d08feb72c9ec4105e9291f517720885c688a06e320a05be0491bcf686cc0660aa7608a34e852895bea5ba507be4dc883baf9e1c30fd67ea8dca94e847c7617118500ddcca9e3953b23e92e27bc1afcf25b63c2a4cd559a4ae7d3da5e8611f98807e568a2850bff341455fd39f7249018c84c2c00ffaa4946e920054f101077fe9e72bd3f102811c74a26a4b6f5d72c77803780800d51061d5f1251dea11e3ce5b75d3e2ac1e4877523dfb7174ebf2c9f21aa627a7cc64b4eb83f4295cf8792ddf0f98dde10bdcace3fe596d358490ae01b193488c486a34b92eb4a0cf1e91427b9dc0ed193105622fcece683a91151faeb1889138b2e88a46dbafaac9ebf5b839089439daf88b413f93a08a0c784ac30000cd2a3270a75d9a732b6dd4c76c3521365ceaafc835f31a3718fa32a3f443ff87aa3c02ec6f56bedc7114771abd613a1060271d09cc1dc8a07ee13478de46b32e67ef318c071db900c9c53b4cb1e68c7ee719ae23196a52b81a669b61cf7525de4b6a46ba395993c57aa8a6c510691f693be7e97ee17fbf6533b2eec58e785c7d9fd6c9ddcbb25515cee742eda295fcb7a2ba5682ef07179113ecb50ce4f660f4ab5a425c86d206d70ba7972d2e0f2a5265ba7e980aa86223003d799d99973a2cb71f3aa1325eaef37a132beb7e82b120cc0ee826f90aa90343cdc0e27504f10c0b4d3913970155506350899058949a0b1edf1c9685d6f41924c3154240e58d7bef0bc51a7c6104d80e89368585edecfaa554a34e76b4494dea47fd25c1e11763aa81681eab26c372c2e4bb31cd36afd4a79604b8944bb287df8302f3c1a196ab85d8a987eaf99806c989a1fbf717eb836dccc73aa64436af499cab1508cd123bc83810be02828d7d69a1704dcd37a9ee3f1f753e7646ddad71bd80f15e0c93fbbbc82629bb68a9bdeb54ae8e153ff1fd64b7952bcafab0699f0c0af08b0622d3a5b17231dc53f4af97c9e52598d6c99826bbaf696b08b6cb1bb1d07a5664c6abd01a7d3e2fed773bb4299c7c1ea53ba7cb544c602117f8bc2cd55bf888ce886b822ccdb97adb394a8c9b5cfa6f544e129ca9f378b3cf7c221ba031d0e9eb6efb040fec0886c842c26548ac07528a0ac1e1e32c19ebda4ce73139dc6c416483439eea62951b5a9b8d8858140b90ef789de2297fab8fdd70f1b3c9e43258e0cc2b97e5b5c700394b913df21c6ef12c9f8ce6a475966883ee2aec77cf8cf608539c392a6f05ff0e5ab8cb3e4d993de98877377b95423e71d078236c27e1e2841f7ccade17b9de81d1e87c652ef23ccd39471bd76717d9521ec59fcf7399e5fb38b5932c364a6639b70b968f48e2b681bce2dbe0747e00ccdef8a9c93c1cc716a72ddc3a53205fdf140862e321d272ad1932bfbd43dd7d871af9898209d1507c73ceed30f6a3911af1c7288a432839f8561e0e975d9d162cd9b08721622247d5a47e0d37a83bc493553030ac364ed30a7d8d1295482794632405ebcfcf7676cb43278577ef50bff2482bc16f80aa088c956911e08ee2bed302e0fcb3d936a30456b09e17564a4bded2a024feaba6a026a799549fb6355e257b2903f607c89728e8019d3f629130fffc77a27f3fa8627fba0523fb498a3a0197c848bfe2951ae0fe02cd199d8d36fecd98811bc21a1740d695c61cce481c0d5fa51337f105f4d4a29b75ca8ea624834eeb09f9be63871003318429cdd6caf4daa8ac85bc81ecabdbb4dc7dbd45c43585598442baeb7a984ac1a64bcf9e0c5c10ba5ad3cb6fcb0db2354b58b3d0dcbd7cc8381d3f1ab880b22d74a95b07acee0ac16746a73859a42d060a83f7b135c23b216eb3d458086f445d366cf9797051cfa61908d7455e15570f6127114e97edc84d6e2b010d340d073934bb315c222d6752b941e3fda20b3539986c8a11cae62d3380ae4ea1020303aab6bf8c19882cdbac8e1854c7ec2cd16af679e961955472baec64447c3bf94096039f91166bf4329be2b6b00d0620328bc477b6a5c1e09dccf9746a06a796c7e76484c9bc922d7409fb438236b69060854b8d7a471631b850f10748a80d839f832196ba73c780aadd22e64faac524643ed0e4bbae5cf0ca2d1a4467c83668d05482fceea4d094dbff9fc7a1d0fb8345a09ea304425bc4dc4dbd544ed0ebeb6340cedfedb576130f56ba0fff121f560b92fcf3da6bdb56f597215e8526f2b75f314f663d1081a24eccbbe6f2d7fb44befb31fcc791a34d1df3908b95341372cc +MD = 91de833d44f9974c8dd844d4642882a0c3ba0f73b3eda2fd8c4bf947 + +Len = 33632 +Msg = db401a9f4465c78220877f3f7425137635f2bd890b8504f35552dfdb6dd91de82d1d0458b258394c5fede066259e039602ff3831c82a7e4420b56927cee17f553714e17a208a2eceb847a4a2d95088388b1ac8d8ca43e0208980fa9cf6d75997000ef73016636db0327d141a17a36a04d72cb7a69736f031969bdb626c21745690f190a01d4bc099d67778f767ff70a1ee1b4bc2b96d771c51ee54a0b829983bf0a7f2f2bcaaed31ab1e186051cc64b8d8d1cd55b84e3c8cc262ac7e63558ced2716654f7ce8bd21b9583b7e5e720cf09d3484861a430927f0dd2d25f40f1a153d2833dfe46df811080e2a79155930f2462eba7e69b3a495e3481dbdf3be085b3bc3a2c97ca166a8a1292e78ffe99a66dba6b5642c06d67fa38cc56de9c91f6628d1fc36ccedce8f8b8f8da3a28b11f26283bf61eca3678d398f6d5e5d9a27df0c39874d5db7fa6ece2a8f2388a55c41e5af1e9d30f41f66ac3b5db8d798e86defe38c37b668b0ec73e07e2039a144f96b111a3f8060c6b30477dca2df2b2ab9dab7521b5f69b9b1809ba0c13ce591c3fd91fd70644f231b492a3344febbb46bd49d2322e121dd6600423f2f18db0b46a2170d576529ff47843eabc7bbb04f2ae67d4573c3f7e3b3f8bda19258e9792b628b941d0a5722debd9a8a539f73c39e173f01388d55953f72f40e118179a51945d5d8e9dc3f5489fa26180f316ad8706fcb9f96c8a2b9b375cfd0d41df255b954de22e4624a5df045ca9f24f9fe5548f60967b7fb4518b60a362e04b3bc52b3968cb93524e004baa56e65ba7f9704cdb5e2a1c3aea87af138116fc9cc3f64ae14c8e706aa6a129023fab3f74c9eaba8b33c94e16932a70b0748dc4aefe25252d47bf27c7d4e5019c556d106e7791381f801893ab54b66ad7fc3bdb0a410e648e08b23c124f683fe956b070dd89204fe8d17c8f6195b807fa96a5a22742ee63840e2c2fd27c876e69b1f9d35a85046ca7968993c1ecabe288c26fac9e5a51bc9fa6617570f2ef07ade5bdaa5de1aa08bc4da44344a01e65130dde6cd81dd4da4180169f8628fb86266080886025adbea775710082866c0a19e786755d03e4471a19a0208ab5397453b0c6dff9c77bf8e99c647dd3d6216c1dde0c3895931c7d79e1828ae6fe155cb6651513935d91420320e2fde135eae58f5fb4292a41ca07e1665241238a3ba9deebdfe5b54e8a2474b19103031c0510fefb32e983968950f11683e5d8d008d63db3abb8e820c31aceace34fe1ff1c78ed2efcdc2a17e6f329809bdb7f76098c435afcffa46ad88f61a15e26e665ad87ca697693963c4f58eb130eb47fd2ba169050383c6283370cee0d661a88d624c827492482507a4f1cc67c50e3627ca71fa53201f1bb006b1dc46f9fad51c70ea4743cab2ad15852993bfb06fabfda3d01e25edeb20678e13c75367f51d9bee7b741b26f1f916cf678cc3d956cf081f867d85522efed4335e380f069aa79343c7b0048e4c3292e9715f7a290acacfa65ac07a3732dc805e59d683bf309c8cd796a407ea0a800f3d0fb3ec86d5c3daa1158f0c843de3f175cd4ab67b01230c12b0f72b22740a17320b3022d9fde2b2767f914421983ab1e2823bb02053659d5cdd52791fd2f931302c7f230bcb51de8f606f29f78b0b480b40527a976f8ac61de45df7c76c74e69f3948f7028735e65280d1c4ec5d7b3c5acf371bc99db910bd8ebfaf0389a4bce8fb32a7a879b95329a75d1be958b41735f6919b9d251a01a4a321a9bc72b13d713ae63ae4e902ac7b9cbe39d7c2de60067e0803fa4ed6233aeb2aecd870c2f1a3bd0cb89d1e3b79b0289a239ce420a03430455aca6115fee82d838041c9ff5fe64e4b2abd618a4330139ae32206a35e27d2f0a8f4a6fe181433d36dddc5910fa3b34b972bfa17906225657f4f708f22472cb1f66065bafb28c3c3bb96aea08940b5b507cf310bebb025a4020d690b75fc082e4bf6e6702f8aa6fb7352ca5356271c3182914d8ed981ddfe71433a3fddae2c12af9e70493aa4a4229dfb63d3fdbeb066115998c7e43e131cd6d92c54e4c561032a404d6da6dc84e03f78bf48066f39fdbb0f58df934d90a538b6857212a96fa9c5c4c303fb9c10df63b126d9faa17e9d899bd6fe6e171c42a0c48dc0eec21eae87121b34bf4b0ec4108ee2ae5fbb48ef81e55a4afe047e9b15ea8e67007936b779129d277c50473a4ff73af0c0275f9baed62ceeca7d80579f10ce8fd0347e6fa1ad9005b91583e727d475c7a24c8b48155493105be8e81e461e965ee75cbf7b09c93ef5ff018973a00ddc5a8f92949ec048d9d937ae7f9a13fd2effcc5ac186b94fed20d57c2387c28ab7d20e614147b69b4470e8380d710d93de9807944c36b728e6adc3ee17cb96344e56a8215be8ff331dfdf6ed5a4b3dc9ee52217428330d3a71c551bf2ee623f1e80fe33aaa2ca4faabaae7342dd1a988a554a1611c26c36fd5900858308171aace254a15f6b8acd7389d457750aa5bb64dc70fc3f2b7dfae5c356f1fe543894849bf621807371fb10afe971d897f5b3c2cd2f401708d6bde4cdd0f7d15d572b19f05b5aca54f05726af6668ea1f8af038a9ed6855f516ee9eeaf6edb87de34cf1820ca3a97a86701a0ad393160bc61f2b15240b686aaf1b68ad4169f0407d888fe382928a6eb4c46f44a98708d7479f0e817b7fcaf41fb2d68738f3354f865c697745bdf9ac0bd29aef50bb2f2c7fde77615c5bfa0bd9436cfb55ffd3f58e3702dfde7c83bcec19215d81b60555ef7bea473f16722c8c4b909c210678dcf5b6e06fb554a50be606972184fe07fe06e5dba5ac35cfd07949e5cc12ad70507d4a86a952ecca337a2960de0309b38f66bac00f1c407f9240bcd11da33b770a55605a3f3f8b8fae290012e5645f94748f592bd617bcedec7322f6f37b56e9654e970f83e3e751e6731931da21663767d14fa3bd1711a73970faac0fd37643fba96ceb09e856bd76d8e3221ed2b3f8b3ed0c9c06a2c54813dad274a574201337f6408143a5702ec9cadc7845f0df64f3232e8955336e2d060118f576b5dad394c5c066c3b3ba2279e983b8c1f43f18a02413f02b5172e28a945c82d6110d01bc984b000c8bab34e18577482565597045506b64eb8559e51c050bc1462e3d29f9de6ee170a5b9d2ab5f05cae2bcc4f84d48736c3837a9c124c3a5156965f1b8e708aa9fa29a6c8831a6dda57c72e83d427cea5a73f0e8f35f60b713a240b13afec76c7f24c239d21f2d5d5c651069abaf5e3ed431397df8065cc0307346f23ccb7b432459b5b82cbe3313744f2d9fcffe6ccf4df289ff3bc4185ef06f014b1ab794cd03b3fd5e04b9588e717d231106ba393a4c3a6ad35b1343c1d7f7e812715db448b1e60192067b2e2cd87189540c5d440e336b44a0c26e4fb75b9063eebd284a64a3425b0a8e8df48d1deed8ef4d721d99b817afce0e4f9c9defeb1d467aa1e7af5c7b721e295c6c0db6278a392673068b3ed214e1ab41caf4394a6ca01654ec6731d3ef434380f55d35de25c833eacf413c0d1c5205cf5b389c40ea823cabe94ae7ee1b20897620ca11552412f243b86a342b1eb5ba42be099d611f734a316eb8d34c8e2c57c65ef2dd3f1dbfee085254bbdea473356673b5b12d63e9cb6fdd4f8861c0cd3adc3055fdee6b1593c33d9f377a361113850ceb7c08605c2cc1c55d7bb05b89af2225620805a4ba6feedaa83b905c25b148fa0962748d510ac1b79121caa6f82152beb56ff75324eef5aa1e3cb38f17bb0cbb9de904534ed20a14592f134b8f3dc85cbeba45eedbad723c5fbf56376d7d4ad227943a5adc1ee56c33d82ca1c5511d8fec5b73e04517ef01fb37fafdad94adce24d888fc5f5dfe4fafc169522107ace8dce803c007aab68b5f4b043a4e7d9010144a72b06efbbf0f2b8f6bd528ce00d7fec4681689f283391a4d2485c6b48c48845e7a2f7184a25b4576b6934310a3ddc095335c427bbfabbad2be58bcc60cc7e37921c20d8532847c3bbc15168c207ad0ced7e9d7a2d6539f50443b872e9c2eb04eec00a98a0a4b3e22eee3097ce13f9dd5d877900451b1566a4896bc5ab4dd79344b73cbef73f019e0e185928f708c864eb76e321cdc557e755e02c2d6d164bccdb293eb421a138dda1665581058e2289de7460458b0a055f5d708412f9c54e97fd3d99e0e67360893101ab0cc04f103480a87ad4499329b80560fadc1501e9dcf01bd4ac0d5d82890411e32ff0f0994d173bb836cd07cad995d917f38a722383fdec777f6006a4c562bd86545c1cc6bcec54a2d3df0ff1aa550261bf1fc104746cd80bc0a517d125952d1be2cd799e69471cc1134953a5138c0462a99e969498850617d9a5370e91e48a2a410baf293c6fbb9c5fd27aeefc8406a217cd98dcd5909f2331280f65f196fc3bd8de676f1eae58bc1d412dd44d8331a8727670e314d4cab730f647dd2df4aad7110e4979f54a1ba7b75f1360eed2acfc235fc6b13e9ab05c3ed6867e2d46bd855362fc4eab8c2de793f4d599c7b9a0269051414f392a7899c3917451dad45cce07a329f626bcb6041bc81a88c17f35ae231389c4efcc4bf727efba5d1ae5b0399399777a5022dd84b5a28b33c26e921d436f471846c851fdd2b800abd6c2e14e600c8fe10f06cbf1cb4bcfa4b3cce0fb572b23542865b1332db4ed41f7b41695d6c418334dafa8d2c48c8fe37de246cec910c47f7cec94219eab2a29630177975d88bb78f1669bb0082b73f606f8ed2000e6d3a12aa521508e645f6b04f12ddb5e2220b9e373cc12fff022e73856fd786475f7c319d8814766a8330dc0ce60e93f58eefe0b1e648011a545befa439d5f5d84d9eb33cddb8e8c3f4e1981de374a6af3cd4d51af8b82a61083813309f55c53dd20245fcc58ae6af159962e6bdb8545bb67b09d6d68a126fb853acdee2ef7ae467573851c202e6686fc8dafbb74223a77612ed7a12464f92cf3f0af3b70b8d68880e28e065a96eac5de05ec1629aab0f166cfe793e654876b74acc137e228346be87860d22f6f5d77a806ccc622a40fef1c9cb58bd7f73882b075eb2cadce2eb6563de4c8c63f276401993a128898be3a2b9c29d11fd8753750531560f8322d33713a022f4891b05492c41b41830e279a3cd82cace57ca454fc4e271cecdd9aa8e276a351dcea5f0f0391589c3a8fb1d6f756a466516d2f9f5b6f09a8b156dbde50f9ad74abd49e5cfb08d96bd6a2c4b803207b458d327ce116bda44c6e255a9d64cc0ae1dcd6d505223086f67ed0c806093e9792be53f5e1d440de504cd37dacc6f6a0e098796ad0211147845ba02589b0b6e2940f5800693e01a0fb72e7aed51d7f59b80743c686a0b3055e959a4409a1924295a6ca073ffc07d39708e954de11701bb350be51ef461fa6cd53468b4e83daa1dbab31712cb55b5d6a3862d6904cd0d0179c7273d2bc5c1417bd2d631fff94e6af4713a6f8110328bd28d99eb373a75f2d12e695f8aa723584fcd63545bdcaf959a1fa0e6bba091ad700d6130f31feb03ddba21d2ab66af35e38c967896483c221e36d114d55741d02e9e19d6b2bdcab8f1e2e752e8b4b35eb988f63b19cc8284f32f517658d4d18840b83a4910c49386a041303cccf1de27545af8f850fa0162ab919887c079bf2a68d4390477a4d3f18b5d831ce2be8e44267b155cf631371fb9d61cc5a6e6695b097aaca561df1a8df580566fa46b5229a251e1c554029220a09554bc768b7e8ea533fb8869f3c5b081522091ac98b84c7a77d4be04feb119f237e6d8b9d95d39be78ac39ea53740da15b884f45b73f21016564c383760260213639b6db7083e0d7b135368dae8409f804e3e51a57454bc9a328625a1904a7a028c3b375b1811863863d1aae359419d7e6d9ff84e9692145a +MD = 865e85fd9d7e4a8b05a16dcdfbc519992ce4fd1cde8a58c967d185f0 + +Len = 34792 +Msg = 702fe9473c2348b782c930b5a549365201ddbc392235c337341b00fbbb53311a85c5b156dcde4a1f00334b5ad467db62d74f8d4c56553570e01af924fb60abcb1526560fbd14166a131a2deb7d5554379c324fce7fd5c48f16bc4d7fe99fccc6099bfffa479054a0a5c8fef00ad948d93acc2945047e199ebe472491eeda3d124a6cd4a0e319abca9d83e5f2e2bc60519766443b4f18dca4bf04a5e473d7a5b7bfe1fe88f776c3efe2940a786dc543a69d47c837c76bb5aa033bf9ffde5fadbe4f42a53aed7045175e43960a13be99e032b9dcc2d43e4ab77134476a983afd2ee4d6f03f2bcfd94af8d7b1303c6d0c084002a863de5b46d3f136b8ae0a303c0f65e6081e1b5b2691989a8273509c4224ae6b55a24d884f066b8a74529b091269b9ba155f23dbd5f326d2325ab711e33f643c0b078a8e0d59c779a2deb28c2945ca9a3e8bad198d798bc8e86ed995985e4abdf11bfb352ad3ed496bdab98326aa7fceab2920dbf72aadc4cd351fef098b4836306509444b7dc642f6cf17b4b4a1c09d85c1e4eabb0e750d0939efe9ddcd46eeef6d1c851a5d38ae6c4534e779317551f4db610e802dcbedc302b249bc2d2c2e57bc9dbe3f7e2cd3f4c278e61d6286301f00ff0eee9098aa2416d1d850b1e23e90d9f2b862e58bfbb7d04b78493cdc832fb726b4ae3ec28d53ffb25e3e635066c14c853b2a9c3b6cdcf61564a5c85d914b893ec6683f33de7845bfa3314b5fee139ebd0f3faa266e8cbd3e73d80df2a49cfdaf0dc39cd1e5bd6e5f6ecf70f51dad5601fb4a17324befab2e6d8b1384024a9be151685c86ea4804f988c0dafb3cb7fcbbc8f3eb49492c4a4d1a65e3f9f47ceb3c5aff873934418ff7baad915a935b19523ee12f52b26c2204410f843bc25a7629ef2f26d20cd195c0ca3e9ef86abf342e25bdeb35ccd6b9b9ac30fe30b40dc30edaa03f38ba20a0bc801a08bf090bd5b7452e25dae09399d521715ac212bd5a54e1fbdd5586553753a6ead796b768845566dde72935ca4ac1697a9fd82391c464cde80510b798e3ed02551364befeca704f71380a15a452e44cf2d55930b288a4650ec15197132af25e04c51364f42e70c9932165c6493ba59181052f81482e7e731618006ceb97ca809ef58af27239bd9ceba82291e08d6e02d036415e7a3f59bda713067f4bafdd30cca9b1afa271bf9020d829be91cea6658770770f70429d0d6ab8491859fc943836eb70e5aa60de6cdbb662958688b4834ebbb9db53bfb1290711b27f3d05555f83c2afdab28e83fac34cb55ee4420224cb20ef0c4b3effd9252629fb2052896c5c3756d8e382140081a10b60d685f70fa9a601e87f48eee76cfd97d52a6c992868504d2564c4fb47bcbd4ae482d8fb0e8e56d7b81864e61986a0e25682daeb5b50177c095edc9e971da95c3210c376e723365ac33d1b4f391817f4c35124e9ccbb94cccef95367b84c6c2792a9ced0630f51705317f4920dcd68b367bed3fa4552ce23ba5cafbd71f00e954c7582724afaac02aece77155e4a9d0989f26e858cbdcd6b17b07b078bb1988da79b66c2648e51f91d892c41f33abedd70147df46ba3998a2b1c3cafcf3911f6ec4303297970473be8709c7e9643d116654d88aea7ac3b6a3fc97c1c022d81ba6497df10504b96b257ac4e350d0de09eb0c5181b0b81baf19adfc2b6ef38f0c054bc84ddb2c54744b265cacc2141f25c99a3b4a35eca1e09868597e55d0067f007dd7afa678660db40c299ad9a8710386810e5ae672e6f9949e38211132ded32c42047cd3737ec5e4aec423e4086411a643332a4ef56b6882c220ba2da688b6ed2ad75c0ea80f0b5180b4de9dbe78dead63523edbeeafbc0776aba007a59488c7aad8c39470876c8f24643153251fc90063d40f19c91442872e21893bba72c74044812a21778857f20c5ab290e6d97f53c74121951f39ba865b3acc465fa3f0fb8a59162227726c2e9b10d8f37e365ffc00120cba4b907289704fef93ffc8a43dded90e130ae60799732f1ae755a6e97d90df2705f8b919051fe979b125314f9bd47988709c53b8c706fe0ee907bbba6d1c0117148103fc8dbc9fe13a6a7e51a9edc30bc7463bfe3bd9162b74fed5312ee41043428f11bb97d8cbbc8c3a1068cc9d4e0e83b30f566c5bffd717b583fc579b95323c6d62d497f70572131e87e398656307324d6e4fed2223b84dc6685a5b94f87a5ec657c61289c5988b72555071d8aa9c5f8fa94912ae2a3593abd2f9cf82c2721604910eac13849641f0094e0d599d2467e470e081626bd565d0544917c77bb01eb28f1ca926eb01c2f2042abf7ab335f8062594cde1612e40de7cd6b8f59ccac55ab28ebe364151ab02e6750cbe75576c4f67d44cadb296c110ad11477fae18a6679bb33fc4200c569d10cb69976bff514a983d7229d8a54321858737c818203e63bb58c2431f98524b237c7a980f942362372ef2d83be0538b66b70e817377f9c981bdda55989c2a779f36a422c8cc7f20d527334b64ce8eb8e10f301e389665139f70ec5e137e4bbcd4587aea2ffea120f2c4a7f5ebc64124851e4110eff20cdc55006cdf18c5328563707330bda155cd0075e56a197e0778c362b5ebf2215d8e52faf05b30f78b6bdd0d01a8fa6af9af9eb9601aa64c6e000c6b1311f78ae3a419bf0b44d48b92daa18cbab55ea209231e0dac79fab7d164f095cd1568b51ba809cb123e7bf7f54c418e02d862ecf0d21ef12f2a9f56de11f0715888be367224a3ada9baafd33f4b4d7f8ea49fb26d2711f26c8efc8fe0819c9c59ce6065938497e5462bd893bd5215df928c7d78cabc879ff929aaf9855e4565256907e8dc5226f05c049eb01bfb4b3cd30274d695ece038397d12fa38e28b6a6feb1d36d908016d6ff76aceb7a15e05a4a92e226b42cc79b21bdd2877c8ff2a7dc708b60630979af666b5363cdebec8abd302029758acd3076851face7bf113f37f630cd0465a2793c5168d082dfe043d3288edb698f1b28df539e7b97601b55596b491e3c3d991aca4f739a5f98c36fd2a3b4a457e4bb6da44cd85a531b19d088f65fbad339647c588efd282dbf9df503c81bed0931b5e50d9a54b2e498129a0dbff90991000d852d368de4b3fb77bdaec04a1c451d0f7a62659aec137e0e9a30ef9f733e3b9c1f936eac35bbf558af1bb2c99bd450d313ead4336ea67515b838aeda60a1911731d05ee1830b5448b391c721d07e730997ee10a6a2652730dc6f23303883ab88a32d2fb4376dc14fb15a27d9250a2eb7f0b6417bef1a3966ee1b772b63ac30f65df209adb7a6e47691bcf979004228e7058a8d3bbc8b56c0d685d15349e4c96a466713556c8164c43b00668acbec0aa0beb21f6d738124447cf55a2f53f31eeb48d47633bec5ea42976d9593edd17beb03751d997bc44bfcc9b23a47e7a0d6814a8059d016391df68e4dae1cceb924cfbc1db0483c1c74f0a30698236fb49a3435b4e5b2daa7a6ea06e6dbadd66cac54d1f0ff001e514727f4379c4c51f8110defb8426374d52c26e88242cf6db1bd822a37334c892a6ba9a28e7049f731e41361d4976b4a8b58b01d670b09fb51fc62b03973b1e571897e965339a2c72aba4f73500c50c693d2928cdd5fe4e81513fb4940e8b99aec48afb9ce22e02baa3cc70e73cb9c4eb441d41c2e66e79cc2aa55de92b9eb10645142f247508a8a7812851886f9d64cb54d7cb7a0479a8023687958780fcfafa04b422805ee284b5de3917bd1c187275f9f94447d2b85fafff66e9d3a12eee06adfb445512242d82157f11d9c4936477adf23aa0b3931731dfb3c9720e9cf0988b5a230731461988c17afe82fb96b14ceb532d3939a25544620ec2c72bdfb94c37413d1b3ee0cf365cbd3c2d13aaff622c7c8a65c75e903420d854677b5f8e7e3c4101058d5cc51761b6395ccf488553fc0ed0bb0f306ead9690fcc78fa506cb04fa0d5acf3281a85ad6948660e8199ee46a9ead53c036fd3dd93a6bdb38a89f2bacb08f570a8b65b2cecc3e8b01f2af501052b147768fcf71017bc8e092fa870b099917c74d48ec03ef5ee9a04ec701c9b08b7b5ccbef80eaba6f63324c630f3d71358892635087c8b8bb1c32f6fd42db9bb7400648bcbe055453cf32bd78943d7404664ae528d56bcb6f4ac5c30bcee06244b3d675adc35b7fe761847eb1a285929415435b38617797e9f9eb1b89129274d24b3fdb095d578d88ce89f894d6a05d432a2e3e1598769ec9adf568ebca4c73ee8ab4c175d8841dc66ac5c3989d0824b0297df63706e3507cdb7743aa3288cfe7d6d7f169c15ba10ecaba58337237996977952c1319485d820703345b07c1e94cd41bc36bb458a7e072fa3f0bd2b91bbdb90638406c1ff657c51ba364a6a260bbf6f2bfd20e05a2e9d7e7d0784b073c4b5263b3356bc4eb8c7a13295d8b84c683a3ef6f534aed12697e15c50f47ac6b80c810156884e18d9eba9c2ebc42f37b528f842a65f769870dea06854755033a0caeade76063f06ceceb193be759790fa70e33a970a0256145903c89a70fc6283d6a9fa1a3757bfa15a00cd9953b8fe3dfa4703509b18b418ef52a5ab4b44fa6918067cca835dec5a75e09701c6592a88ae6ec8597c815a868ad4260d70f1a45b78498c0e521b34ff099719803644bbe2749faf3b1305ef6511d2744a45cb075fdeb9546f0c57409afd6e7c9d0b3f5a543421e07dca6b1cbe6b94b6ea3499cc80329ff97419dab73239ade8e1ad13afe4d63d84a7087d889882621573a4259ac35c43a6a6e26c42d0a59c84d28588619c423bc3413401dbfb3d84b96ffd351a3244ed818bcdd4897b298379faf96519846063c4d4b8c0bff08441c965a692f3d4d3e5b2ad43dc333bada9eee172747ea319fcb0e7fb82da7d3fe36ede0904ceb1ef726294ad4ae91819570c0d597b39015350ae03650ed4ad56b0cf618d5253d281deb9c671e7521b55d5fb081443f1a6f7a5e7af5e2e5685b2f115769a46293e726fdecdf97b174b496be25a0d944f9bee4483734ea8080f39ed67a598a6f9fda86efa31abcedfb1de61e989aa35fbe71e75a9d79d459152d4eeee77ef3b6a180d233478f1a75353fafe3a1f55f09c9271808164b3cd9a566c3ad17308cd259688d5b52c32d01a3b868bfaa4758bdaa5ceac34a1f908ca24e71a39224924d17f00cda4d4d50fdd716b50549e71cf5f271c42ea17d5becac32fd64e0a1b0717dc5f542af9442d44fb8f956e97b384d020458aca4cb0b6413b2ab637b5e73f9fb48cb06f22e6f2f6e3dca27016a272d89830ccfdcaf3b9d895c2021dab1395100f6f299ad723259c3139be83a4a6601d98c550ab19048f37d8de01277209ce13f5f009d4a16390ddeb8d33cfc827184727ec5dfabf4d00050c65fc7e942fb54f6ff79644060ef9621bc2477b0a8d60ff4e8d3d154634d4ea39413b4999ef116d846c1a13908c29d3c8bf43aff24101ed149036223623d290685906b107b0a9143d37db68c746e8d7fb6c6f9509a9c3b881dd914a1581c39ca195a5de68d946eda040226c32a2fd16bbb11252d62e6d089d5d96b46db66fb9eadd5ff743d4b09fb87036465909323910767511e138c98771f68c89c52a9e8d4d197e252108afd38aad611fc4e44de802a3e1f8b3309ddb0491bdf0a64518c0d131488f89dd0b3120e0e91ffc9917ca9a209c2fd37cb2ac5e176f12976fa4fb7e0d065e03bb8b6081f2176d88925888dfd5eedfc986d0a3886eeb1620100ce65d96ffb9170af909b5c93332f035d8c9daab21301eb5be6789807925c990162875b27dc94e321bd3c54f8595bdec5e3691887c49597046a1693360671b578b69cf4ac6b52f9bb967b86a54bf761eb4770e56465302212ef93171ea039dcd3253714723a643ae9d6c9604ead8a332a03359fbc875a22f3f16e8215d22d85ad58c658fdcc410d18e8b67048d07cc92eb1278614ad8c00241a1962b02eb52673abcb30c3936206d536c345286747aa55dbe756e13a3e402fc4143762187955a2a8c61a48225fbebb5b604d61d4834d3bddc570c6dff9697389ff8ec021d299d6da37941feb827b17c12e07899ab8384d51727229e145f29bc63bd74ecd69496 +MD = dc6c9b65735881a89f81725f61aa20edf1d1b20cef9d7bb817b1b4e6 + +Len = 35952 +Msg = 34da4a45230df1ce4b85f7b1fca541155167f15dabff80f55dbb0c4ba92ef31bec8da0f01559a5e85b3e0ab7303ce5ee70042b7edfa5c677d267e8162cf79eff8cc5a8c7c5ab88b58fcfd9ca7ccae2fe2d0a6bcdc574cff29e4e53733b5db6dd7e4a0ad11b4bc2bf4dff0bf2c89960cdee40585445b6c3ee2938f668bea6633e29e46d1600807a8efe954937fcef86e11c6f9b1a48b1caf1dbed78009d1bcca9f55b799f5a93d8a80b5a3aa200157cc4205fdc27b4af0a851c348340c0041aa64a76d77313cc0597da16873abc536bfe60d8c28473f6ae3154d7bc3210a974bd90fe2f9a117329e3d590d70818f07b1546a2f5386bcedc7eeb9ccddd735103772fbc281d3ed06b126392d312fd36d39339841e4b8681bcf2494c5e49d246ef5b8f756b03802bf4aeebe22362516b9c00a048e5c6aa567817d6af167f16ce5ff219f4a054c1cbec3fd7496e00fed8fde2e5b4f1b0c1943575fb8c9e8625327bc233006e19e8f97a4b8e8f5cf2eac51fc36f91eb11b2841e921eac9d66e9ba6d5546607d59ddfdc65c787c9642ff79292aa6a67af1656e58f8a9d8bc2849ad5a33bbdd761c881ff9f9fdd8c4f8233e44a0f2bd4759c29a0e2f02d6a3d32c556de2f83f016ad1a73bab856a8e1a405a98acbb9cf950b14f66bd936ef96f7cf8cbec674ec54ca0dcb3f878fb9ab23d164cd6690c39df1ad6882cc26a670520df9fd96fd16bc9dd078a6b3e5393c702ba89a664d5af0de5779d04f991949b00520f2f77929aea7070e7893f3a1f62778e76a515bf02e2fa7acdcb9faa293c04984378e957fbb6415ff3dce478e68a84da3c5ae292db6641273f0b1b7ecded14fb643b2ce93635381cd6eb93d4914711e5024d3415e1a2a3c61c4bd7d529b818c19a01a810f26f3eeeb73eb518c8a106f8f1077411bd9d069e8b143a76e4a4f8330c51c593d76d391fbe5eb30a32a14b5b310f084f165f54f8b5edac2ba7b99c99e3b3eb3c8e3613f515d2f373784ec856e9ed5a9495f1731cc25e95ba1a00ec3b46af82d1bfd2b2b9e122df1a42b16631412ad0abe25a4d52d9ef5eece480d1605ecef21b124a00b24dd7dec937d00b33624dd45ba4a2c8e222296d89ae4231525397a3e22da5e32a7e785746ffb5a0a574decd6b83d2ce13c6932b591f4cf6574c93feeebbeb45679f8db45a43680ecf9e6623a429f1462fedb60023e0a806b87148690662240db2d69e5ccdabef3bf9096c3dce3b07177cbe1855b1985e4bbdeb404df4ca5923534b34b767de54116bdd7885b1641d2b43624390c9f074abade203137e9c926f9228d62df0859f776c411262144a3969cb01bf1b3490f410d27d17216d80d5d8b7920d262f47d654465dc33cc09566b95ec1125cba1fe56172e506e1881d2c4909b3600aedcd03923f5a127c7eeea90342cdc6bd22465086d64258b9991c9ea7d1b35741f2be2d18a060888814fd0c2fc04b63a436ac3c6646bb9313662433db58ba7a3306c35dceb196abc94a69962620646f7bbcfab1eb09784156b9def4cde3ef5249f1849a9cb92506a7eada4fceaa3f74a97dd7b8fc69a2e9ea58f2e865bd7a66e97aa8ec6a02351e8bbafa4010a605f99641ec5781ac6114370b07188c2d843e7c6bd85b20d2ed7ddb846e70d55bdd87aad0e098631bdc49a59cc58a287a35636b8abbf0a67275aa010ee1e70312f0a54df15c8388fe3c109cd1d64822edb45c1da0fab2e42af62d6321f9ae831365dbe76e081fd99da8f18474df5a63ce2ab1f9743caac341988f6b845ecc3ea665b1e00d8b743e3f4975c54b8bc6d265beeb69d02ade290182577f01b9491b1318b0a0978e8aa02e4723c71f7f9656f99991d37a6b58ffb0dd0d095eb22e01a1a55f8fd3b86ae5b0c984f2b766d2d9d3e22ba13ba8202e97d0397064f082da993546168bb21bf70ef71eafdde680423cc2423adb893c9dfe84641cdb1c4d8d43efee9b8523a5bc90fa7c6457a7aa797a615d0622b5b6332c2015758bdd9802e7fcde888ab4111e7dfa237bee525765d5e6046dd8d596da6bcdd5e33bdc6a21cd839e43620d66041f1e9d5a6a8f90f09779bfd7c490e27901b32bceb5c1cbd23dadb736d5d5ac55bc8f706b93055c01064417acaf8fa4f737f99f9ebf33c3fd7ea2b0c7abb4ebfb9d752714315dc3816c6c9354617ae33e55c8b9bb22da5b8ad9891160ab542cdd0af747bf0b3fcd560f1cbc38a2f8a835a347028da65f9a61968a63689f5a76e34a3d5ad3ea518369387a18be3ab1fac4699f017d126a896afdcf2d474d71d2f5a770e8b8963eeca22eae314ff04ee1d3eef73ef130a22e8e557df7647d3f47fb67b877d5d7ac10e93be18f548d77654a7b784252c6b093b3e8bf4a29f96cddddd33c91947544f827a53bb833dad38f11584994099d3bc0c2fcbbacfd88a19c833325bd5c37adab42b5e336569c0b6611cd94bd7c7decbba4da99a848f1868dd6cf9a8496e68f3124b30291239ec6f230227e43152d6b8e3fca82c373fdc2b7bceec46ca84a9493b3e7bf4f04a7ad3c579e31b03b775f417d139e87e474fe231edacbfffb2b62d8d99843fa607e684b6f8ad58b552171da45ff147b041ee1d7e5d9d6c5f751a1087d10b5199eec9e285e2e915dcdf448637ed40d273bc214ddf7340d450484fa2c87953e3528b9f7d90ed28ead0ab88de312dbb014f22a3e3d3e3399078b8b144bde7006d565ad1d6865bef4037435e763e85c26c98f1c08fda11da293f22f996d6ce93481bd8fb5dc4d39eae77332ffeae89f96ce7c611927073c4f72a3382e9a1847f1c298296a3ead8d98e26f797c80faeb29ac1fc11bc25ad6c92b046e7ddbcad4641e5e41e1956c00277bd0d0072d068a06eae203b3d7813438467f982e376ad6b61f77a0c5e974dbbf3bfe0048faf4c257102cf18b6d649ec34b7b80e9b7e1960e4d4c0ebc43ac6687a962d1e6eeacdc41a764514b8ceb5b92c360ec5562155c952f43536eaafce8a84d620a8a12171fee36f4ec9b3cfeb5ce3695a51a40ef70724dc53685264cab4aaf6775db6c1bd58645438a218685f29f2a8473e1595719ce2f3b80a6bf84f59358dad88207a144305cb9f38871685b2c29941d52b636a0d15e0bf97b7e8d0faecf21fc26e892b61504beee76068f389eba2d6d145e724da2619f69ac6a4d41c19ca6a97019d4715dc4ba44944ce2d11c66b729d059f5686ac05d98e18badd2f548cfa607a151be2f2515bd894b4a6dcfb39a1a2db0a5395004af4ec1ea950c715a06bd9588efe4b3ae3721fd0bad56df2b3f08d46a6c087db4fc52f48eee355e5ab2b4bfd6982d13e789389a95f5d273560cbb6c8f311c1958ab6d23809e96e3d03a542f9433df745871ca05f0082ab3bb6afa9e28dcbe4b782667f6c68f77294508658dcaa843018a589ee924d0a6c8e2c28e123b54363b9dd408146aa720574183af807edfa1df04a77dec3a338dda537a406fd383cc124e1d172673d0d8964a13f9b1babf41394ec42fb6391b291097fcd65df550c8f814695ed3eaf1e80eea200dc885326a35f1197cf0296fc09335ae1886aba371147620a3c4d6f298e6a812b16ce82065fb740c2c4212179b8bb5fad08ffc64108ffcaaafa03fba30470c52ae45e96f7bb45f070653fdfa021fa047c423f17bed902e704a102e33f8589f46ccfc9308f1883b71d3ccf1023c777cfcbde890d1504095d83bbca9443842e857d239ebd3129e8eb25b54f71693bcd4838386e34c81c7b84b4c4bbbd5372c70ed8aa3fbb8251fe3326694161e4d162d43dea6f2d5c74c1f32436669cf3e3fbd71bae3caa07132bf58bc345603b3ac11a496f0c3556cf753f3e9b4bd1895a259492ba160713f00ac8e24dbbfab0da7070e720b61b2b6f1dbf806debe99847eccdfa584c615d7b1313c68315affa32e98e93ca0d1d6ee623fa7628b743a53fb9c9af0340372816cd7c84ee02ee7bc6a4a9dba561ca75b72086ac464e8e4494053e1d35a1f728559249b9f8d434ca283a892b5d64b0f4747bda8f610217daf76781e179e23fc2aa1a21d22e2a2149ba03731f4c766f5f80ce6c8be3827eecdc494b884a716f7ba6cd9b6a1875229f0e981e041d27340b7e70c34e5840320eb532e17e21e004d7be150cfe2245b71e9870d08629f7cdacc00b653339bbcfa514bcea3f9aae9e5b6298fceaf60c6d6cda2631220d588aa7f806c8d6f265a6347d3fdc491f4daa7b26b1e1dcee39a3fe6610c64431ca098188fb64a63cce645141341e271a3da7bb9d086220756df937aed8f68931ecb8cde541df2d5366787013425656260f24911804e4724619ebcd26e7485d880116e1af828ed8e0ce511565e2eb52cd329f903a2fef3ebabdea1360b4422d9ed7a2615a260a456f569cb5bb8e63a97a38773d75f1e8d26dda72aedec86a95f0b0f9d147b4b7df499f99d576bd45c6b79149fd5de377f9b9e013f413ac2813282d7b962ab73e132a1a06f949e80846ffcd9664548d0301397f5c8781d80121afbda6346596039d6b56329587a73186cd5ddae6ec4720855708aaddbbc49c4df1e218407ae98eba97c4cb3ec2734822aab2861997ba46f2bd0c9d6b240a4ff4892b302eed1a561739f62f598cc4b287127c3650e94eecd5b5fb82c45d01a2b1e0099c743ea0f01fcc5add7a392417409f1b5a41538d88aaec66295db9532b0290fd9b94e235c350b97364257a09dccb9b00604f68feb0eecadccfabeb774f631687dc256a216646abd041cfa1fe79a4a0cbf6ff8c0aec2ddbb0044345d6866feb28cc9a58fc4f5dfde1f4fd536a84585afe7cc64f4aa0c4899055986af976657960fb58113ef5233a290c1300e66352f3e860382526555f7efe323fcd6885f06bc0d7033561ee22eb35e5c53ceacd21364a5fb9a036906b064a289ddfac3bad1cb8ee1027fd90d97b69106859fff84f8c74a9ef42e3e853ca04b727342d1dd816c9bf038b6a93b385632a90fa9e9b3a50f80d3d8fc6a3c634ce6c804d73932de463a851c2514d4d739482c3913f1c7e3e54c828d957791ec107972d9e1831faf027688f5f1a4403d07db774b06a0287af1b8935c20edeea1930e583a87380ebe4754e10c45e1e83269f4728da97c3e32dacbef8dc552ba487eac626ef1df66d1bede79a94752327d06990547250f72d3488d7c68ae305daa785c78bf48008fb10e1b36131f7f87e888d518c0a1e12a24e5072334000e3f8f2a258273b423f126e0130194f6f0503994ad93414678cfee5640cd3be675c8bf3b0f68d35cd1f4f7dccfc372f42ef339d52b5e123b5ecaf9464060c386ec600154221227699100eea95662f640c0dab0f056617ba91b810d5b10c61508fb6f1e1d6768b702ec7dd1f0b0c868032e6b66903685c4b8355ef23db7e579952a5ddf3de553ca5069d36958e6db10640110225bd4b0348f36c86f953da736550292095da4b9aa7b906a7e8aff85358cc030aef937cb1457a6274e0babf2966f0a766724ad849daae9aad82d03ac21a2f332d01367bfac370be2554608b0df0bca71c03b079aec05fdfc3eeafb3a1acf228051516d724458ef634def5cc85a53cbecdb49bae5dfb553c67969ee16693bd681f85a50ce24e2d911fdadb0224f6d944d81f7cf4bbde273715251e428560d969d8fd718ba94fc52542f290ba60681aefe7aed4db6d0b3e6668e4be558286eeb3cdc6fce1ddbcee194a90b753cc6b89f658ed23c0d5e51330cf8fefa8e29855cc6a9cb79e142810e3934faf6ccd939f1ec854fa538b0e4e2ca57132ab29f7b71a3bc9221ed113d61ab989e973e852d2bfa260b8f1e0e937c0a72317eacd377b23cdd6dce29902963539da05f7a13bcd6f63aaf02a9bf8688331201fc640da2a8f7d604897d066e9b970ba85768cb0d794a89e206c00de68eadff2aaec39523da3d6efe59d1bd3391e0a95d85f1f4499c5ddb4da44b3edb16df01559cafb223d0776c04470dfba1ce974068f3fbd797c897f897e3339b8ca933e02acd11adca130b99bd5a1909e0d9229870a96fbd208360a869cc5e6c22ce10635049d2ce3f2a63bdd29add2f173aeb791ead36ec0c5820b26b65b5f9c40ede547018d85dab9de5a0ea0f42b46f7a58ab1a0936ad82cc3fdf44b820899bf0067931430da235f5fb09aec22ee20f20d3f50bc55947aa6925f79dcd8866cffcee9a3cd058e506b90cc1c5ba8aff1fb4c3219ae78604adb63bc21daad3d687baff8138caa06d45717f91d9ff3f54c9bf90f56e79a52ab33be7076d59eb22ebb3a1f5ce36cf831ba6be3f8f9a342933c8a13a30829d02e381929034e2b692246e3dbda61ecc6fb0de3093919250c6 +MD = 6890fc5c2c0c3dda9126f8b2bc0557feb3c7673c2cd2bea55124132c + +Len = 37112 +Msg = f62bf06ad09026d5a60bffa752dd4ac732b97a277fcb9eecdaf994d0286979c4a04363d922b85360cb436550c62e4ae96559f8977037a019bd19e1e200af3bc0e5cbc6bb5c69244034edb47fecab0811c6ac9ade1cafba3ef76fcb5ede24afe6ec4c80d826ab81bb0b9154fa6c5b6d877d3cc6c32d3ed4a2b383bb0a69d1be7dde4ef9f82687521b75b7ad89ed475f92b391e51048e9d78e17de17b04abd4ecfe25799e307047fa69ce827f61775c77b9031608b17baa94a4b07481629f0482221f1c8606f2bf0a5a8ab2a0893ef8e8b3ba69dfd42b8331e7886b705ac7395bfc3a3ee3907038e5fc1891e8609bd9a07dd78062d71eb5d52c6e4cb447e4d1beeeff5733476943f1e0d096b3920e5d53a9d2d02e54b5c102d5ca8eb9d4586c4f6cd70bf1a64e6ec28b7b379e98171266ba44ff8eb781232f8635a81d6aa277721869b3ab27b027ec7e50fb05dd46874e119665208a115acfc0283f4b854371cb542ff4dc660efdb40c0a6795fc0d3a9e525f877046e6e677e62aaac0becbe9afb28225e1cbeb5edde6fff3ab5edb9acbff08fcfa786244ac9aa57119719c5db3b618ed77e3b5d9ae81aa25c28042265b7a1b2c2b9923f3c2403128b238452c6bd14cb1eb27fedcca5eb184880ad17bc1561eab80139c827d695648279d47043c86a5f9d8033706a5e08e865858f9e992057bd194824c6f22887d45e5fb2243aa58bd4bab2ffeb5c5c999a1aff53c2e421acb54d56fa41856202eb879ec678939d9eb2df0e8a688ae4c7b7d1b5a0888560875abcf36442c8cc2d2f65feb77336f6cc7f735e7deedc41b9c6f1701ffa64251133cfe70acfa3ad312a60462e1d0cf83cc5de687f863ab9994fe2f8781f6ab871c8ecf993f3fe4f3564e140d27ffbed170b87f539378c968cda0b1552ff7d60d0a17df3a8b3c1f862644eb24ca0ec1b84dad8cc5309ba1ebcf0d68f55a386675647e89bf019d4f1e0b211654389c8cbacb938b77404ac9a5118aa2d2a126e132a4197ba142c1f82d6d6902160407546b6300f7c44314a5173dbefb879541bad7517f017bbf48af26c5835ad4bcfddd1cbc7c6e46d977d8d48c00ef9e972777c5e525d7c8e7afe8bccc167d3ab3de6b71307c3b7943e2b94fb4f6db5237369ca0e7944af34c561931b998d5928937a3eb5776fbd642f3db0b21075b7cf5fd8ddad140f7956dd9d53846611086bd880b0daa032bd82719c26958c8ec6943faeff62ab25a29ccb98132db25aa81c14e053a9087581990c2e41ce4a21a91a1ad27555c7eef2ad963c1b3e04d001e35082704b399ecf4f09dd4882d294290af82c8aafefd23132466fb2e0e5dbda66934e4ee7bb17704c6f9082dcad510e0ce1a48598ac3926d2e41b213adce3fd50e52c37a614462c39462f380162be20c7de22ad37858b9a367727b176715030474e0471b0ce95cabe97a1b31c794526e4f68e4cb502305506077ba7b92c8a3cf3d7be452c706b148269d038537b4dea0a32d0a839ab911fe99dff4e2e96f9e9fe8742fb42832fd02ec4a312ceef3d32e298d009ec0914c0873f9bedfa3606fe0d6778db1c8e4bc769b00287b65d7fc7143377b9f6a322ff89f837cb48941745cb7d482ddf1926c1dc36d5e1334d7a714708abff7e0124a597cdbb313e399684ddd39b38b6ad28862f5d04666c4896f723215522acac807a58c80f6704ace984ee715745c7d1b9dd092e785f8ad53b2352855e6ba92ba04675f01bb5c3757a0da45d669c3a0d418f12af1713b47dd1bb793cac229d06ead1954dc863a31dafe7a7a1ae8538e92865f3eacacc13c7c088434f298fb0c6c8e361e8fcb8cb2bf2d9a0451948e9eed62454e77ad0cf3b715255c5bbf908f2a14381c8a0fd6427aaac374f8e2c74a3b497dcad0d690f614ae15aa64caad012dcba9cf59d7b959a3e2813c9f47a0190288534446ddcfbc2b4fcf8fac3e82eafe3105a78d977870b1815ddba357bba3e9bb504b48074bde5186dd7ca08fc4a501d0d65583e3c61029f3b3c2b3874c53476f0f30530787a52dcfaa01d032e4d7df278629db3114c073b62d923e5b04afa1ffea940632f5d926a6cfbfc9cc55fbeca1bfc501f3d70a354515baa2476721900a7cf6d03e28b2c288a8f6ebb0ba79c0dbcd9786c09f45d52d16bc8dd0d64187fb30d92f7da2fa8801e057b48464e9e2324a11d81bd01be9eaab186f8be497f06e90ab9275c6f8fd9ee042b2bbf7b4d751bfd4746a1be4d9ea4d4eb5dd149d7fc126fe97bb373689ac435874cbe572f696995ffa3fc5492bb867d00f58e8ba7c9f6e32bdb2664bb2d664096938a0ace68d5104c8018ea155d1a53cca63c3877d45d0f862ffc6a11f99ccc61e96dbbb2db281637c53ba95fed26ff57592577d0870f9a025f7eacf0663081ee34ad9361282a51c75aaeb9f7d17328a9f78f713849d32da753f453e3dce809475e93b965b9a3660427b9416573c977cb66c34e398373707ef4a6866fc38e09744d675546f45b00f615a369323af094c49009355b9bb50a8e28db6e1e83e82c7beb71918a431ac5a60ab65be58daf269c5ba84e25fa62a4dfd8dc337784bf17661ef893bb0da75d1bef383c06d6cfd55bb1eac21f0842e57aedf2fc022fda753dd0468360b9cb715dad72371d7c194b0a7915b9d12d1c76664d63f148ea03ec06e8a18a02b14ea9752aac71b3e7522db19b725ac4d2b9feabe2773cd01e0024cb4e52d0285cf8ac6a502e154f7e452656fe49ce7f5de2265292780222349ac793eaa17c5a22902344063f497aabb9dc038ce23d8a385d966247ac6ec792997a67a4d5b6216be0b50c332835bbd675f7bf2c84ce6ec9f2f5e3e85da546a2c5e74e6438a8039fae0bc9c132039a65422093c679a9b27a6becde5dd1d227cbe6b6501210778a26c3cc8397a2d89fc1e8ff854307f7deb28f22598e501bf374c38f7596a64e3e69e7a1429dc3df53522f3ba08977e07bd825405f6324a831072518c6d84253a6cee1320fbbdc3d3d80df7ce981118b1056f6edf5c494a269ebd4fc4ac02cae4abe7b26f1d9341de6b4bf6c6a131c212593cad22599e731248898e10937ab88b2a27b26f1df14a5d45498b12a28e2c942f76896f6ca667ce84639700c23080967e0aad916b5c4fd91ca32f331a6a9acf0ea9ae2713f59ac408d7e505a6e8c58f0e2d0e868448c4ea57c55db8877baf1b6d4265e9ce008e8b1c53029fbfe7c9ed50eb5faef72b4c096d4c91036815dc11d1dd5b18196ba59c55617a5f8bd23029fce20b8b428837aee38553b43aed944ac2d6f842847b82703a8fb6a5891c8add589dbc9be4f42a53412c304b8e478a1eb6dbc7e97dc4b79f323a4202364b2c6ffa6acd715cd3a68f1c9d9129c0d800162438448d83eb9771e30da70621d2a76a58f5c87c28cb0ecacc5600ef7103a8b9a188e89f3534a4b0b3564021ca478e550abb383cc72ef58ed6e1f9fd1d5ee681a55a3eaee05481a429c0b7d59e1e43a876278733b693ed53d2ce06e3344e4bf6a608b13d33bf90f4ccb978921bcb69ed31c75fe1858e48b22676923244563b913a30eabaadda74fb02cd0cf7d1d3538bb4170cd6a262aa126878365adc0b47e9c84f35b79d29805f6257df774ecaa31c739328839bd5840d1f4f6dcd59d20358d6d04ca4a041457a72068a90f115db07f6d83d68d04b68faa168a31a4c4ed076fc507a0245a656d4a84578c557496de6c432a5f6fe38bb73956070c221d631bc8f4c58710bcd27067b913484efd9de21524f1cce64221df061a34145891cc9a236206251412a288872764860295b9e502799ec5fb09be309acbdaf24d066eab057792223b441edc313611ee7a22340fbca8faf1b520abd27cd2c14e09659377f89b30278a3b8e95ed4ee427bd8d5487ca1bcdf91c7030ec3495b1ce959781258336aadc0bdd3ada43d7a3dad3bf6276b438df8438df94a64b7e721df88380de2fb0c6e8c51369d4bc3917aec59fa5030369f73b1256212948f4cbe13a10daca82714df4c0c664abdfdc084c9a1467573e15dfc6b1be1d9db35e86c36428d51006e106a705dc748634283e5b5a08ee99eda35dcc1dfdd12a1526696a7db2bbd94368bbaa9b3fdf8d448680840d6284f2997d3af55ffd85f6f4b33d7f8d95d24cc06f32a48ad5edea965c976fbc0a6f8ac90a3deb7ea4812cdb6dc9a99dbb6392055c343edb88e8c2b3134cc36fe7f78805b2305382dc0cf24fbcd791b30bb5d29a998920953e1640211465282ce36615d5ddd9d8748c6f70da082ddeda6d1235088cf9f1c0e1c1896ac6aa48fde50258c2f302205b9cf3d003b9943917c9c0e3d69f4c5965582fc81590e5c8e9d6157a535c71d33ff3dd375237d44a740708038c3949028a8ba823abdcdc53f89ce5a21181ef9a287b78cf50ebb5b8f81032bdb2c1ba913a6276c2b311588f3320bbf982c8431d1f1b0bc0843bff2cabca863bd1a165b17ac5e0ceb5962124a14adea7309a37032bbbdd327790794d961e4ca270401208549c2d6f3ad5ffbb4b0398d3a36091f45543374caf53edc4c0f4cb1d18068b3ecfcfa6ccc935bafc37312fa561801a9aa49c6136b6ea213832354cd1505b97fcf346930eea1e198e6fbdec46f4649a9a20aca31914bfdd52f2c717e9a0a7fdeac9ea3c5c25f8e61afb9017dee472d99fd15c451d4f38ebba0a94748b905286af58a1e8df032ce747e191f894b7149e4fc0958e69f1bf12178183abe0a9c4faf3a954e0bf0b20e5be2ba7d691f7b1b252f43dc82682bb1911607b030f72662160c2ec6d23c63da726e1bcfbfd2bb0de51753d397b8894c951ae66c540749ec29cad4fd533baebf72809b7adffdc7be8f44c7e29918db1ea7f732b3a9d35d5a74f7267601971939b6cad7f35bf917998e280e7e28f187c4443b8b2a74b3f749622171a58fa739b5c99d4fedb66d212b8c4195fab9eb25c9e4384e357751ae158bca6520301466d0257871be61c28ae0e4120d0cbe6e1b9c12adfa691414c86b5c726f6ab53746f5550cdbea00819b564029c218b8e30fc769ed1e39cd75fca74e8a0ee961b850b1d29aecf4f532f8f80ae953a33bf248b83476382c160db145fc91b220c7fffa8218d32373c24f2a52aee13030ba047cfb0cf9c6b480446ce3c129f7a57a76cad2a2262dcafa4e95d2c6a1f645a5a2030c7db858679ea2a5fd46b35debebc5384009045a7effb9c204dc9c0456a1437178e1624bc9b3b0e2fef7ae33688e63d946b80e3804650935754b4ff8e81f715eacf2583f3f81e7ba655eab36afe4cb145339a4550facb57680ad2e227e82b411250b3aa14d6bcf82ccd61ad62681737ff1f8572fd54966fbd37cc74f8e7d743f8da669f087e3d0d292087d8060e6e572af8ea72719cd663bca349bae9c523a40334e66cb538c8420516063c3f377a9a2e86704e921ab6bccf15f2bee3cc38eb9a28dc19054c8520287783e1f32c63877491c00d4a165c015d566f87cc423ea0277cf0acdf019d2efa0ba9d00b3650a762e181b780d7f0bace2f671d8e705c4c11f9c92f2aa038f4e49a1d10709b6980613d5c551ca69b6f896582890f9ebb76c06710a9d0717dfb4ceb8aa908a3d89cda6ff9ee05cb84a9f8c369d2391483a69c8e6c23b8bc95ca9bc796a4bd98c283333dff8a258ed5ef8210c400f219db640d3586a4cac9a8ea3af6e90876c052bbd67017316336b3ca8f133a1c24f6eb397b260534eedfdde18f402cdd1b65adce29d0e8eca70d48c18795742cb6f4dcac4e2792db0c485c39046d072b93cdfe4496241bc2d959bc5cd35e1a3b9059d646ee01d5a20c4a4e79004421fbc8406ba3833657bce2633723d936d34e9a6d008dc37c7590d62edb2aeb8e2354a1081c755acc45e1a873e09f02e5476fbc7a830b365f1bae533c2ad32c13b43f066c3a4182af8c3914d1df57b6321fa5dec68748ad746e0369bb64fc2d9b7dc3dfb3ed9063a7d5cc0ec45dd35ee703f9e89a33cb9181179701f5b02e55ee26e814265ce9657bc8a37f95829c60ca9a71c23eaf1c4b4fbd72043037ef0cd356b68e0db0d4f0f50cc54d8d753926a48d1854fa24c341a6099d58b520caba14b53633b010d96cdb4a3a62f25f32163c83f38716ba48dd4da31fe7cc9444c777ec6fec56a58141f6290ba40c67109a5c250c41d99834860e320097bcbbe79cc5a369a2489753d70e523ffd25b65a19ca1b6a6b8de70fa3af5e4852cfbc3a9fc5812d3bcf0dd897eb6cde54837398fb4f0c15ee78ce5f9ef9d100ff4bc0c539412fc2a1312f96e75420f1906fc753a7b3a116b0e276aedeb430308679ee11d2ff5530bab626173012167e9b31da1187be81749b150683cba826decfa16fa5d3c99a8070a81ae3dbeef5905c11d35d023854379658a767cd9c5914c10b6a09a265a6b9a94d32804ead662cbb57dabc80e8c46888f281e14c5a71d946fe08c6a99b22e34fef9778f31a105ca04a19b86997770d5b2cbb79b0a8173645c471634f35b60749d4715331fc9c27f333b5d8260d1531f64e7eb7614ff331a7 +MD = b49d311c67ad8279724c404458bf302bc33f20787bf9908d4eb8a368 + +Len = 38272 +Msg = 97044b3fbb342e807d9841c667e5780b198c8df13ce19406b87cd64727dfdce3895aca41392cef4320eb99cd28262e81f34878cdcebf4128e05e2098a7009278a66f4c785784d0e5678f3f2b22f86e982d273b6273a222ec61750b4556d766f1550a7aedfe83faedbc4bdae83fa560d62df17eb914d05fdaa48940551bac81d700f5fca7147295e386e8120d66742ec65c6ee8d89a92217a0f6266d0ddc60bb20ef679ae8299c8502c2f91a07facfded226522c9eb3090550bc726bf866e2b08e7d69a0b3140bcbb18e5fcac7196f8d5e8a0d494f1f2d3f201822829fdec0963f35c06c508af99acb1d5fe36267a440514e5a53f922013d9575913162a88ce4a995265e4ee2d86ab5fc63d4885a00c0510fd3dd4b80177937715908ef58aa246447e6171cd04ab418a7f61e9764f765e42b0455a4ade28a7c77e469a4639acde59aaa0728c7a31f59ac91322e1d0aa9714c565da30ff4d9db15bde4105de159a419ccaf213d84050f76cfbfaae6cd138ed06445b52ac0ffe9b76ff8c1ac10402641d88f64a66ffd90a30c079c66813c934398be5982d9651ef9552816d2aa29f2af48288196b971839dd0aa70f0f97d35327e180eac9091e14817e2be76117f8fceb5faf68313095ed3a838d72a886deb198ef3530ca90ee72022c8f6ead8a9540c8c7741ffef0d98f10d132d77a0770b6545d0b5276554771df04b7eb5823ff605464dd261b026b85279c9e27ce4313ca22d20b38167db479e2adaa47a80cbdc257dbf565d08cd339478dda48ec624e55cbf63ccaf133baf2d1d07068e66a57d099d7c1c464b79a11384bed241c8ba9bf1872a6f1519de34475141238596856f0e1fe4b2c21aa4777c17fdfa2a6e6ad70ceee51937ce3b6d79622979e4b2b418cf8f89a834d8e62d2acd1b9a9d19ce1d1b8114699bb2ebb14fca1078102dea00ba76eb6b3318a738abfe88223e7d5ce489d848cec56a67b616e3a6acbc7a7fcd5b408a8a215c70307c36d42f72eb8fa3e44ef2b7295727d27b595c963e2aedb52e76d773a406c99b07f07010def6eef1c76f82c15c0bb49cf99592b319b1cc8ea0a462b61fca2beefbd5fc84d711e3548fb4a96bc1ea868bfe22f991d3a194805e33acd018f91f92b431d9e9ffef1522c9b8b714ff862616158be1a0f06cce50b3cf263014260d2cddae88cebdc0fd02e1e64c5b59610bc1cc3afb6ef485e2664db15f8495d38d13b4a689919549f37b84b7c9bd840db0257eaa975a549f79378884c91c128407fde5b46cd11aeca0d31eb7cfa9f3eebba7c965560194ebdb5af0d3f3851eba1631ed52a30bb32b7dc01c60bebf2d7676cf28f5a7e34a2db13723195f4e1ed8206647fbbcbff288f2b8fa4d275b95577a1219d62d8dc8c773627bbf7ce59770cee1622a2a5c6d77983454d78a0dcfe45df71881274fa53baa438740ccca1d166a59e8687c6f6889e6b8a88a674441bf6b14a17145c7740cbe70b247df9a143bab3627310377983256bc61f04fad7f3b59c14141098399bd2870a93f15a42152d9eccb1e8ff3510370b62d839397ed0a82a3745ad2e2aacf90a9b8811f96a8ee9f04207b5261477fcd4c47cee3922f8f7e21b72942831ba66fa28cc85dd02f716302e3f20b5fdff9b4d55d3ca03a9b4cb4c28656d8d350f41de1828f40ef398dbe7f71fd0b3d7f13dff7da4769efd4c4cf1c7e5df6620f1b33fd361069523b9619c05706e288c950970a5b999120408a1585eb992bad9a9e4a4c14264797ca2d0d7c0f9a11d0333282a33d8dc68a830f30a57aa2f91487efb954a92b6c2e59b4f21908412982413c1b591cae7a7cf0b698d18805ef455ba209ad618a37845eb0600ddd768a4d77dfd97255661d763e22c6b0b03c6e9e8a37d3ccd9dd4a486db1efe0fbc4c4604b8045a5946f3014bfd632b96fa107be983370297e9f14e8fb3bfa38ef86688930dfd859461442c6fa43756232fe3af40a079759cc4a17c48bb1076c2565d716cc410a13d6efd60b71fd0731968e88fd543691b44f68c38993a3aff149dda0978256735be36c5a50bb5550ae06ec72290b32f7ff8465b896a7a64c6ea9484599d7727c97e81450453b0eea4e00927705a3af4261e7eb678a3c1b754ad050468c4047be6e51624847756c5c88000b082191ee09a2064440b2c585b30c6b6013fd61289135bbf0b2e5ff0fffe2b1d0b5fb7a81a6264c1ae4ced8777e29b6f24e4b9ea79d84842a208f4c5c7ce4626e00f1a20cb06545c9b43cf9534f396fa156157d474bd1468901d1c1f43c13ae4d69b2cce1a0e56ffb4f7b8ccb9ea1e1e7bbe9617a24b27f97e72c0449b5e6f1f960ad3f93003d470a17091722f4f9aa2fe0160fd2a09eabd1311c97df82d4d9fc864f9eb346d357809b643d0bdab744f47349ccc347fc37cf8011d1282b73d2b13b285ea4fd2e1df95d2b52e8c8413edfe5e32cdea361bfdd44aa64b6083a58d1ffb5f3fa9bc406deccbced4c365df44cb88094872b55b0950f54a70bb1aee8b95476f3269b2baeab6a978098bd3401b54b90b85f484e9681408f3c8ba0281ee1d9e9d0ab83db71d9d749a160c589e3b44f91fcb992c2fe2c78e889c86c5c47d5e09d111bde49fcf47351b436d7b616d41502d648834933e118cf13446ea2102018ff38da12fdac85cf4e5d8d7c5f177f3c71e96ea247f469c0c16d823faff43ad39ebc78ba6d0d085b7df1d71bcb7210465d8aae7855ac00d15dfd0457cc60a0b0ea107a4d2e9af6a88f15a64ea1935193344e8a6de8c750fb03463d3f8dd1dc316fd95133a8e2cb26e03d6d7d78079dd374a9750b77d2d48e4fddbf5f7ae447c59e8b8016625110572fddaf30955b7f57bd3000c9895b060b9227ed500a049dee048b996df18240d9ac7aedf0afeb50c07c56c030a3cc500378b95989b1bf393b207e0f92ccd2e6ff04a9ac462e53cc8e10a215d94da36d06720676950870940d70b7553d5aef6d67c6ce6ca977013d113886841bfd7c97750ca3e6ea84d5490583ec0cb632146e84516d918330904d0a52988d7129b479efa6f60cf2ad39c283c86098a5d90e44d5331bcd7be17d56d9dd3cb48158e77ec6ef816b55f82a8b38bcd97b84b6299aeaea3d72ebe024f4f057077bc5018230ab34ea848cdc242d74dfab37cb5ff2db35f567246bd313a1fe4e7d55a4ca2119fd1575eaffefc303c8bf5a5fe24cf68036d30d547420e5e8443202d4b90920a54d1fd80137a963b8b4da6b567203a1247e01b4858d60082272903c7b7a452d6d1ba27559bc7fa2b6c99f52bdf2fa8f226c0fe12a1006f70af9e78eac511483dbd94bd26706f8ec88679ca4e8ddb81d14916c07c4b48c3eec5ab67df9d5ede07c068a63bb9fabcda82f40d679aab2d7757e94bce7e3665c51156b8ef68137bfb833dccdc9feeeb280712a6be2d2714acf94286506153bbbd3aa9535f4eb986e3ae1b16514ad5827bbedc7d9b6fd89e38d72859491d262e9de9ac207a76d76985e90a6ce1e136eb9b4f597a46884534e298a3ac03d937272fc566088709f58ba9da13b6d68c9a8d50619286069ff73c73e5bb67c4be0f0c3977dff1cd2e9b54192c3ddc767588d0629c8d8725dc7420b4657973d5f4354684a61fc5950e522c9c8591c70ac1881c98aa5467e96846466ac1e4b67ea2313ed8fb2f6a27d0a17bf98e155dd99b22d9bb30ef0c9b6bf41860a0051906f18c5bfc1e16cacb9e11a9f9eed3872d29df6f93d96460820c07fc5dabe284b708cd04bab6dccbc99d291e644dd32e4c934647e84abd49e874065c288a85e0d7107ca3d86b8a5768f7714302551c387f02e0c7822e02b113cb799f8ae4f613af30229f1fe72655f2d4717e9aacb58f0e9e3358292b397f4c38e92d4b613b078791466057cfbbacad5bb238f6faa919418ec963a4e96c9bdbe3dd6e33aa5ea2a75a704e48ce4e46e2b5bbdadce8fdc060fb2a4ebc11a2ec08f5ddca096767ce56b428d1b98ae90ad80914ca151dbb6ab20cdc82394be45c1b9671a9973f5c72ddc7f75174ab93e0d98046726942eb0180ea6968e33e39d25bed2273a3db477684ba64363fda55b02b42d8399fff936c12bc59678193a93712237790f6e32fc193b5f8e8e3bf36621776528681fbbd93b0ab32e6ddf23c71865ff96858fe1d3d52e239cf28013edfe5453dc3d5df705ea2df7e4fbd01fb69ffca2e6391d418d10967b153d548750dddd61f576452b5b52f7fc409ea6bed07c78ca0ea680e2865ff6ce8ddb43ee4d5475283aaf6fd9380a1b38d7c2cd61a3425ccd763a65455e27d1a65d38b89921f6ae0ee24538812a73ea560104aeb8bd660b25a38134da82ecb98b09f23d187d48fa9ea2d429a3a124f7ac52d0e5147d6c168b1cf77a22832310f51a744bfccdafed4fe2d8cdb14aa1b5d443b3eb0561d901364929afbded6f7a7d055b5fa681bff8ab38cf9f5a755ec7466a2a3b2c19215defbe744fed0036487b610402b637edaf38fb2518dfbfc08e7b2ca05fd8f1c97efff383c56089fc1d88b3fabfac6ead6361c075c4e1988b8dfb11c2c39c8a5606ef8ec4ba98e9356c1d54cbf0e98493c7ce2f4e2dd08df4484e9fedf0f7514b6846c6b39a068c86b6b1e9e4410e18254ec68dfaae5d0ebf4fde4d9e8269d51e259e51dcee2a02548feed9d02a7a97d66af36317d0c7a9210732a160d2848432b14ea6ad1183e9135a1cbb1c17cf922baecd45323fa0dbedf0d411b17ba7ed4dbdd04ba0ce948f6797c3f424837d85998cccbab64589156aaf4b352cd8648eb39deb97545fec83b5db8d1b8607f4f0a4777a1a308ce0f42b94f0821f934ad708c3c940345fec548297d097bd1fc651d1014e1a2d6038d6a5447c6f2616cb64c1d221accd492480525f270f36357227a3bcb100f97a016b6c304772cced56a6534b6d539b962585a98408d89dd388e0910c6b854134caf0e4dada2370917d1a418204cb0be15fd2fcc8ee8a30946b2b3d62a60d812b0625a3c6ad07bd7dbf3f11389079aa9533f6c07050aabad2a955ed72291035c743682d665886003c9d9356b198f6043c627f992cd7a07928c3ff359d3d23db83f346e64c3524e53888a5669f76b685414bcbeb50dc0218012b95ba568abeef0b962062dafb6ad91c10e3e554c231ca4e507a3b7ee655f3f670a7c0307a47eca8bca337b4f3de5831b6ed3773f40e3fae20e91e297f02b96313a40bad946560f5d74db94cb6e5ef23fb1ff16f9492420b2db6e7c30e9ec4e19528e140518dc87d666e7c14cd280a5d4dfa97ca1c649dcfe7624cee3d9092fc6594d57b3a379f99faa404afaefb4668301b9ef603fb9f76ee59920d647ec01e15767cc0d6d952e6048cc77fc5060fbf41d16b85e3ddc39a932b7ba31bbfc8c1155c3bb380099efc04675907b7aee2dce3eaa1fc2471a69586564e31dbda198ff59496c5fe4eb0267ae22dc9ef7c4c4b9695c6bb5e6db5122848ae4c2d643ec526ee126a89ff52ffe88bba48e4d4c885fa814e65ea187b7b0991005478d4a51b39973333bbb1e402dda27307207ec416502bad6e6008664a9abde8ed46b1f8fcae4e7d941c0cdfb9bae50c873aa0eb676803784748b4020b6c3dcc793f7286e3e562561e2346c2af10b1db4b9c019b03828713831cb1eb27fe8f2f8aab9ceb6b8f7161345a16293d6fa763b6bd175f75304513a444786e4ab2208684139792edfd0a036938e17fff38143a7b1638953701cbfd1d687e17ce37906608100929f5ce8ac14f384f335f0ab6c3eb400bf8c3776a4460f149843cef6d42891957fd1d64823f38e0a5eff747dda499c2f7e694f1ce6e11675110115a05a089a80aa8cf6f6eb1c8ca8c0232701730f91792fb361166fea1432b67e5f808148c44a799864fceed714e6816ab23e20daba643832146a25a930d4ee81559c2f2f367a56bcc762126b4e4d099cbd3ccaf03f7a02ae1122f26693e220d49ffe4d061998a8c1c72e41226364c081ef04579a4943f5efff46bd6864e4b63de4aec415942cd7700d6a62427bb30fe0f19db120004679bc87dc6ef8cc631785ccb27aa4d0bf4b8f411d5d14bdc35c836a0fbeca8b0bf7df51eeec5ef3e6ab74011459fbf5d86be60b501ae0521b1030036368e0121ad51e048321e200f5dad128dc48622a00a13f110a80ee624494b064a095a9bffc7d4248a4f4cc1c180c66ec102e2097be5560fe53798514c44fcb34ce2f6eb8385513c7584d636ed8a9f9f2baf57e659aed127833edee9025a8481cf61d772556c75826a714f01fbc1953e5e184c4bc1cd21d27b3c272ffee09f1c31e470c2fde3adb109931bb564dc43c6b8ec33ac3cd6c49b5dae15789a8d98cd2519575fe5916622b378d0c3c11137b2cc89a27a334235ec7b132e555da7fe2f094eff9b94fc2b61f880e2bf9926cdad297f1d583da6023083e9d668c0c65bbc6f13de28846a89f95949d5fb458381f0203b08a8c4589611d8b0b2055c7f2dffb6f677694c82fe4356423f295e9e0136615bf8fe6ff08e0b1a0625cd9918e15381655fe055cbf4fa6ff862ac5cfca7ea6d4062cb89043686a838c623ff5a12625eff0c1038bc0a6916db0506c9260286a496ea82a7ea4c1f03e6f7ab07893db69011e09b5db9ab29db787abb1b809d8597add4d665391b2ecd9f5ec54a4cdfaad55c81c43d6b63b73e4f585bdcb2c581b713c6191967405065a05ff5200b54b98f1d743d6047a09bafce124b853336e5936742dd6d0b480e5cb86fdd314 +MD = c2c0a7d4e63796870946ec0cfe6bd123602ea1b1ccfe9142196b670d + +Len = 39432 +Msg = e2b4404331b5ade9bbe5f9b77d58b193164211612cc47f760c0658509086ef8446b0d3f7ceae515184813aaf6051e7991a017933910765b76d7b3122036d782e7a7c34812ca43d244f580c36d5d1c5e290a5758e9a9b9755f4bedeb86db02e90c641eb47134077486492f6b4a5805557c3558ada11291d3ae9f8e77996f71a93712781b34b2a09a70b56819198089ee0fa3a427fbc58fd4c9450d5cc46e9421dc5557d2c9b09fa288ccc3336760ea8667c7c24e563d141753cef2e1b442eb01708f46719cd8653b22e1d9709073d7ccf9242b875d03cf19c2bfc7dcd596f6c6a832bc8e4a7481b2f3b713273133a210584b48795ca4013a9a7a0474a4d547cfc7e2327f4f2f85a86f9ef8edd61b09fee9afc18ae1885b183f90316f9e884eab741030cb1753d199fb1c032adba45ff741c3ff32983b4d214694c7144f1a8be8213f4ff83fac05f62aa0ba64de6a1487e51a8a16cd3757f433ea4e1923267fe443e1e89d2472834b72ef97323ad6d82f3825ca9e1d06fbff8c232ed4c716ab4e708a83106261ea08683b22099d751b5bdf78693ef414b9a1b3b1f1dd87758e752babb80875c4aacb7f25d35152bf4eac3f84ce8fdf0b01895f292f99f0cdaa06d9b7efdbeb4535f32c3233a0172ff29edcdd62f75a347424c2fb40a09f798e620f51a3011f5e2c2df3e2bb8c474197823bd4df0be23b81f293aacd77f0239c1530eb6a1e9e69edba6ab9e37c6f9ebe14d11d9b44038aab7145aa3e867f36639ee307bd9af5130b47051a33d6fc91d6b5312a10163a9c513f6d8c1c62a93c657d9a1915fc9fc3f552379635427ab561e1d05ce628f40b23ab5fc2df831aa0222fda91fbba1af74c4a96b050356693e039435875c2cc319343b0e1006e300c1a340924d769d34770be86fb2d364c97e219ee9f579a2fba10a6e569179a75cace08ba245172752ef32cacd924ab994be812468404059b0f3c3381cd9d8e7886ae3c7232c26a6d0843f36ccccf2bd91a5290ffb8f39baaab76780a70fab0a4aa4b4da5b2d2b8277df3c13b58953d98adc2345ea0aed2bb094ff2e405c7b786b0259ae936daf220fa8304bd0f0f373450b77b07ddbe3158c3292292fe8ce98b32bdc2912173af0608624c5652a5cf58cd92b37fc27a3e1043a285bbcda2fd4e9c844352251525331221f69bc5e16c525ee49c1ae19b6f5e154c9ab2f5b2393d7809ab9094381b34b24291f1db5a74dd8f3d838dcd6a3bbea277e01cf92343e43fce59c10174e7977334acfcf5799f36f90e183ce89f299e95c4e45e5a8e93bf6e42dc87ff2410b7bf78b611b6b7421b06c6b8acc582cf9a49a425fb9c4caf3b8df7b249efee3d21f1af3bd4919be3e65307e351e6bd842e58a6138930f60ce5095d698b463bb362d418bcca18b01b25483226c0beb7edc72d4b3b6bbb1323588af460c0b4952a06b165a746ae6c4e4460e6017dc00a72f131f40c278d1c98e26d5d368e9d72e76a341689eee55903e02793f1edad1daa3921311451497ab42f3ae86949735d9219b6abd3373feec27526bc8694a879fa0b6592d25d52c62bab7e366795d8cdb0a1c38621942096007fc8c02e077497e8e46999c4c04b8765d3a1b7bfd8204ba98ed535e3aa39f7447c985f56ca84000d50b7a67a0e8626d9243ffce0950c40032d864b97cdde8b14d81fea9f32494acddcda5950bcb53d1c39c3766860df53442a3137bc93a0b9e82ec9e275e346c0a0e53c22e74f3b329570b6a4c5a02bedf2f1707ad080030c44ed10e769620f0a3d167783bc2a9a9feb65940866f77488861fce957217881a91afaf69e82304afe8ccf6fc2df355dd7484e631eabb4bab7401a607ffbea23d74c2dfca809ac9fa4a95450ceb2dff83c74b1781bf8003df53438152f809e41d64e33cb9b15db1a1b8ebec36423efa2b5a54c2a863da5f9c8a520af6e97db012c86d4097f8d06e0eda5d56f8e1aac82cb40e51e6662e915bbfb98d74528eb8b635ed75f5c58751ca15461fd537f60c105ae45ffc34e15ba539e6935ba1c1408033c06743b6070f4c0052914bc3a5186ec573473a6eb700f1af65b70d8599fa0928a27f1238c3f90d11ff65dcf34c7fa06a379221620443d976c3531a4c8d47a9aaf037d1dc429195c0a908096530c45defbdeb61bd5d76b5266c11f2851fabfa21362c130f077b7ea2dbf241980678ef9c529d4bdf273c2d44dc5e36bdd5a96331e0c6464f9729102f24bf15fa41ffde16a232605605e6aa48a0a2475523d28d438c80fc1c55fd02cc0fb9170a57dbc1d539454fa05e08a4a83588b4f9ae99d0dc95f6a503d899bf00098a9546dc9f035e74406a4ca434a4fa276c0009ba71c66399a1c1849371bd718eae413e24bc4b18dfae30c97cdd33a4e2e6a903fbecd68f03fce21d2b0786871b9e7b6ee4a5e1aaf80933955c84d93ee4631086c78d99a57162774be3dd92c73cd5d457810e6f8b49cbf33ea7ae0e3ec87bf6f0c1b6884d4e9d018f72666a986eeecc667e385d104170f03402cb2b0afb9b9cd06f0a1afd07e701563b3496913e33c43a50c622f07b82ab03e25ee859fa4ca2a423fada2b49eb074ec2ca7f48075f6c319d2a7992549b942cbafbae7240f988fa850b4e5e611383c79d8abd0376cc24fab7f7998c69063c2d1103e60a6c4cb03206add01d09faf75f1007a879e9047ee435a02b35257d1373791a4778d890c8f92d6507dd810be283eec3fa11fa82ea8c9aa6a723164aaa9e57a11b54127033ae6dd36e1682b0c5c47e420a4217e1e8525b8d95dcb7f9721c213afa02a66570c04c5b7b6e7b94219f430451a0cd8c08e40cc76fd887240a5b8a3a6c2b10db00dd4d6fa83bd8207672d17d78a477fbcca002d69d9d1044c40ae741ea33ce6b8463f5a28d0514e044fdae2fe7d3c3bb9424e25db790cfc64f78dcc3ec935b714be2b9768260de5e0d8e3dae17a52d35ffc13faf466a3232fd43bf42ebe02496f7d82d6e30b580f440b3044a909f111580235f5db27fc4156dea134170a0d646f8c2a5fc00a9a93d8eeaa6b7db281bb495c9e5eb944811e801da7d32133bccfbcf20d7a28a83c3a438c379686fe6a9add10347db5469881569a361b73c37954ffb7116f436fa4cc2eeac00cec741576ba28e199f8b4ab337f5c34523642abb9e0e4208538e63b1140122e16d69de81788ab8bfca91621fda46b8bc19136b9c706802106309569d0220b67fc6cff4c44f0a21cecf1f562a56dd021b0ad290d461a93fb38520597d37bdd5506d824aac799147bb2f8d7d6f38192e067b1a20efec3269864c7bd2be0f491df7c3f9468662d099096e547e5b189b9ae2dc62a24b7aa3fdfd1b6458fc0352deca5ccd5f0ea518a43dfe0caf7a52c4e754c1448b73877e9b8c94826293be5bc66caa471a81aaf9d7cd713ea749813581c0ac2842f4ad1290b92a5e76318ac433433f2f0fac0ef4d23c4a42ec453e6df8bb0f966f5b56009c075f410a42134cc3e28dcd84da2b99f20efbb1e4f9b4cecaa85e0776f41cd90c0ba5e2a531c225e6cf18ab3088ab39d5ba081437d3bed8561d3a03e06b5c0c6f1a90abcdad22102a6d52508953e884ebd1f1d24b7f972b598e0604322dbe0b43c8a204ea00bd7bfd41dd5605b86deba2cb3b84a639f838137f6490f2c79d66189a4ca680d8eec9dde12c142c22c5eea91a57a3bebf3c7f3265b83298a5849d6c1402e93892509a4acf9123632f6afe5d53d8a81b5bee7124d573519a640e219caa674567c96d6dd261defc413ae79b3dec311a42bc78ae694348768e7f949348e1ec53a4eaafa4f35c58175cd1a665d967f362ab3d85978e438a29db44a252ef4f049c667291e02bf38f0d0c8031ceae4b9229db7b7fccf23adae4077fc1f10e363278230dbe9ffadbf635e6d304362afb8fc849e2d1af33bd9d2da97d7dee145c088f60f88044de8a202a5226b84cee1c5ed68d0025bed120537f27ca30ba9014f93ab6df716f45729f62f507a873561281dd0b5fe69c4927805108e284d71ff587128b3f1c8fde19c67846026f39f1729b344b5e9e980a27c63bc352e4d40272349f5473ec26f70427c2ab8377014eb10d84c388a862a2957797fd97cb21e61f8449b93a6ab52eb645eabc275a89dc524b371a6aae6c9115270e0e2db2513951e8aa1fdf12baf394a358fe5a840418dae6d3a6711b16541b57068b8134e28abde428fefe6ec8d443c285c8897e3092bf62d30e3879007a1c8a09dc3ecd4648b8094eed04e93f4f3825f9c150b37fb87441cd982d42ab519d329096b2e60d01d4ca94408f1cbec2e6303d6f3cce4228ae062c0adbf2979911d333419a099724a89a91cff973a7edd283c938aa293831a11266aca12325bf1efe5a5330b2854f881bcfb1c0888b1e91a315a4255ec28202190614393f062219167e42337b47e107a086bc90b5e8e387e0bb383ac96188556c92c7e0b0896094be2794fece6f67bbdb8f36e6a641bb39ff126b5703a5b2ff9f953e54125ff92657eed21f266c61f92f21c71eb416242c40c3c40697ffa0851475edeffeda6a22662c6ff10dbf6e640de6c3b579d6bce34847c8c5f0efcf7a8dcd6d30b089222d7b78f5310ed8cb711a66d3475223c3d38806f011a8e69e344e0432b2e1fcbfbc0a4cd84b84592794b6fa7c40f76df7918289b0861a849b66e7a2b4e30da5a1329520afad18b0f163764a154eb415c681ca58a07fe04a5576ed218a4d9e046545ae8cd1d22670c751daae34ad32cb9f48c1fc468b74984ae8c119195f1da97a59a8f9f55757f907e456cf5108cde0004afbdcf91551fefa3105f1f893f6f56ed336f070a907ea319f6d0600ce100397fcea835eca030ed1e41e348e88c488a166baf8da43c0a4d2e7afeaba8993a6a4f31087edf5f21860769c6971aa00c3b078b78b98b41cb97a5171f5e4b7b339d5b200430d45c9dc246ce2f9187436471a8daf11427676b8866165b015c5194d98be3c4d5325d4aaac3b847c0973df835e1a24325e1768f295abfd91d45e10427c7c171f4612bd045677136abb3556f8e9a2995741f35e1806759c2396df42c8ef7043316c98ed89c184023da41557285bbb9108a4a6d0998762e3dde3c51b41603f231c2d24d0ab5bf6c36d6ab03a8212c98dbeecbe6af76708473931ac243c7d3d49480e4320d9a453e99265727ba6ad50e202808687a243ba48ce06f0d81aa50f183d867038a5390fe7152af8b4f689f6504c16bbb12a9c1d6af4da3fb18c660932753c38928e68af4e9e319f6102470e3b1405ba6200de86104631e54ad23ec00a878608c905d1a672660ff2fa4a532d24f2d40f34c589a8fb4a949e0ebcadd812dd0a6d469bf27a15351c8ffb5f3cb78051181683d93bea6e7a88a6677c2195edee2fe285c159be8963edc2ee817251efc7388ce9cc63cefc4e64ab0fc138adfe436ce5111665d8517b0a384e718260b5cdbbcec10f7fcb274edf28420c6174c67547f182fba55c0ff2f85c95afeb8894cd1858c4230e5371f45e8ab8be2a7ec8ec57a435f1a6be07641eac4e8d2c2def4de4b74d978e1c5eb7496ede66f24088210269a488c872fa3703a3e3a9b2b537d89766d7ed8d8a503046211d97675e86bbdeae7931b91f3af43ddfff861dd300f5b6e3fd956b0208d7db6e10bfd82d4705430f0e7cc7175c2423bcfc92cbfbdd1db9cb291fd527cb265f923250f3314b95e5f7eeda90ffd02f6bc765505b942ec91668e4fd2a601994693a0ceb170ef6f63de594cb953d29ae6c9bb45f3b3068805359abadf94f96ba7ec20afed21afbae91749ad04263eb09bc86741ff9552cbc0729f7b2b05aa4f116c6b70ca2e9ac17a7116b8936e876d9b2342f030476ee049836539bedf5d6e0b7b48b8517ff9ad9d5487146d15f6f8704014fb8eb2a2ed28d2b49da10c5bef1d81802f88fc13a5db28666a9a01d37aa189a50921bc361be6c5544fdb72e9fbcfe6db7e798e32d2ba567961231c661ab764bdc3f24e71910ac60cf674fb52baaa12214d2c1b9c5cc44489a20f4cf601393b23d108519c781c3ca63a758edc53356d1a43a78c9a6a815b5dd4667bcd56af75a0da6babfff7a48fe8c5e512d1eff8608e09f4ca74247803bfa031903142a27afc862446e2372b269b3ccc7177b57c5144471bbc72b331a575ae77736bed99b2ff7f3a088d5f386b874a329217ce48a905a42249dc3f34a748a5400cc37e1c85706ab5db479854c57395205df861e5d199c8135bf9ef0a73002e9443801db35b19f29ea65a0a069c28c59dba6497d92fc85cf5d912ec3a6f65f07c00ecf4e79cc0bdfc510cdcd6596f83b291a198ae2d5a08d1aa6f5e4c053e94ff2b4d283fb02e73d7c3a6374c620e7766caf88beb321673aeb8586cc89c55c126acece444ff2bbd37e66f42f120cd48c14db19819a5c54694ea153e379b7020f86b114e7cf27f4325a1b1264cfb769ecb0214e9bff02f288c28edfd216c58587d50048e71eff1aca8dcb20ae65ccf238dd269a3657a1cc29c5a2ad10c76d512bd440ccdab5f4aa0c97fbc1745a9a27d0ea3f7f194ab54bccf6812e18221aff6c12d7233b1ab52c98f731574f34cb554565f07f9d2eb9ebd2a3bee560ad5adab90f57fe70a39d1cc029e054b78abd0516eece1e3aaa2c46db7b905572dfa98da3282781241738f542ae9d6c15a30bd1b5d34cdd8a1388c757dcba10d71f8382ab0bea8dbdbc05307103cce002341435b2b1d13004115bf7d845a08a061385544118f566b6287e78dbb8037305a4829b9e191fa8211a2252cd54c83378220b7cf5ddfc9e95e32118f339b577888ac38dc8677cb869945852b778b5afa5e1925749c954a7e55289ab58177770134d5386d22b6cf366267a82172fdd5127c8c69dbd7992152d1d14aa6acfbdef3e62bf113be384bb8f37157b7cf8c3ca764df49ab16d3968c5995e80bbc0ed6 +MD = 3b0b539bcbbe20fc41da975d5e6e36224d79debd334d62a128fb0d79 + +Len = 40592 +Msg = dcc82b7c4a0cf2b24a661ad4543a09031550fadbc5d4f49eb5a1f88e27bf7f9a6329243d07d49da49feeef0f7563e279aba6b37b86ae0a6e0d3f2bd0d36a70e81157f7adf74298e544c41a8a1554a671fa0d7b2e4fb2e432caef673650e140dd0dd90e94c35dcbbd6270010eda143b332d0cbabbc8e66a3113391589472cd5bf8037cfba132e1e76217b0e626caa8b076a2cd9eb985485b511a69b915f5119d691faa4e78dbb7a57a86ca85074217d35d9f33e8668041b04ebbd6216415af36c69a9f4e2dc0ec5a720cb369e9a7ef804a4eb5254dffc1567ca06d2e0944e4ac72fcc2674a62fe9afb021221585cbe6bef09c7d1ca6465c26d60a53b6013608300ceca4659424ccb781f4d37dde102ea9e88d28a864ead78936504e62301914ef2890d57d4df75806bbcfb19e4c53b80db146b9bec2ee6dd8136129aac8ff564caa4021837ab073e68537243f789e6c34764f9a27685c085a94c34e5772f1b68fba84f041c255079d07b6942a09f832655d3131abfd3b8f58e2002331d5f51cff82e5aa7dcef0fb746ad36925a86af2e78e73e8112a94e91a24a012ff9a1670e527eab700458837b3d6170bf9fdfa9403329d2623966e00e88329828b68599a89d41c8092d026a3a27208e36eafb20001713752a7e9d1bb0a2725db9be8c88233af016bfa17d127896730574b679a1e2972cad666cdc602c7371b84f8c16a112be023e102c191abafdc17d05accb9d7c25edd1928e853bd69dc94e76a9c472db8900a4b70776e175dfa43b761871711165cf983b4e283d4363d176bb82168bf24e73c0f0de07153dbe93e72293fbcb56b95a57cd4645b3077832c78acf7d4b0b50c4397a1a5a14771d0906b7a9db1ac0a31696c4e16e5b773d55b760cc793e6b428a749f46d07dc67d7bf081b49fddc3b57cdbbeb9f2852745c2dcda138ae4b6962ee8fcde1a9f8042855b3d6eaa82f462f5ad173a82ceac03f29e633f32cc61be3a2d0f6a8918491e8dad37128bb8c72e29717aed8fa65a0a7d8278a9f153e13d24a73356bc7695642d4cfb5ad3dda08980df364d899ad5cbcc0f96de5729d9a586fe253d2518d9b5ccd116a1e3603507842ce5c4f11a83ca56bc5a56d4acaf69d9884188439daa85e4c005826aeee92abc0115fe66b40888b61f1fbdea5ad6fc84dc14b2a8737c471da04466bae8316590f223545ae5c879528e734e18b2e4f021701b66b418b39bdfe85fe953daa23a8b56ba613e2e382ec4a0d1b1d0535dc727cac1ff071c04d6940eb464d644b03c33c527af80fbfc1b74fcd773b1aaa6041062a4f611ebd499d289fe73b2a4efcd02c41789e3ed78c1fbd8e0fe2d37521963de40e65516a75833f07a906979b57f80b9f69aa77132b4c1eb7acbb367e689aa84023a411af18400c8c5356b31b5c6263d415c7c05be565f9b2166d4eae7c74cfa758c766747bff1796afd587b45237bb48449b23970493d7e615a120eba74d3a82737658a1e7e6e98e83291a4f839e9c63becea7afcefd3fbb71ffb61e2f4d72373d58f01ea21d09da98fa74d535c08d8d4a09548b8cccb999f12e17305d9bfe307e1635d3f4cdffe4b6f19e2cb1c4162eb2f433148527cde85fd74b07796066d3fe5730a9271e5413a4b59f3e3fd3bfaebc364b300337041081a15b8dcbc3338a84c4e78682378fce2cef7ff1261511753177a5c84c23e5791f354ea89aedecbcda0564544c41387f1447472fb0b193ebd86147c5a914f98c033a2c42300619d0c6c1aff9ce63d88d2564fedf23d0ce787b9a3b0d6232c6aff459fd42d335423011a0ce5f50c6f66027eface9c8994885e0ca898abfa4d64bb93aca90cca2f043834ccb6c19911a60e28f5934e7358b78d09a37220893b1c91b849a146376aa71e36aad0a73edccf51eed0eaac8cb1fbb13b14fbf8426dd8fe2e076b6dfd9f922fba57d20a4029587a2b1d332b2848ab471b9d8487c86e407d6f5655e8af264be91a24295f5f7fc7e3782aeb4ef8856cdb257dba538da4e98be6c6ff4aaea73ad6e0c0453aef58a42a508a919c5fe0a6d9d355fbe004ba1a964ec9c6088e8ae585a89cc411723c53bb4eccb477d0e2ffbfcfb6c7b1c0167a48e1ef58a6c159e251cc1a14778aa37d12bd61c275ee24ce195510ac4d32327f005a9815a9d99ca7d7e5e8b4d18b1686dd46da5a1b29fe98630dd42816fda6af5913749b9659bbac94605923b4061df75755a6d9ebf708f52974a1b9a364db71bf96d538d0a43f76f3d60bff938e22453d7457c04cf7bc4ad913e9ef771a596ca07f5a9c0d5ba08d92b171970485bbf6dc2d4dbbd28e813ffe561d28067098f6a817753380e28756dd8d2a886b8f4392dfeb291af12e001b05c5dbf1e62a22b63309a57dffdb5c7950b387524cfd718fa5285a6c4d78b1828bed76db7a897f11ddc07bf9bea8785b88ef18733d629e73b87f623e2be10dfd0d37ae53482116a014d6693561cc9373d27a6e79915152b5a65ac0ff30e97de0e62eb2e7e38381c754a5ed9f7dca1668e9fff9b40d4c06ebeb45072de104a9e4b35d5507b123391e29d979b6672379912bda3ad0e5b5537cf3c89558b0c4fa6f012de5415582b51b10cbae08b26b458314b3b24edf1fa0ff5c500bfe249ce7e63c2ae41335147e248606fb14e3f402b530f6e09c4e0d77d98165cb8cb11f0af0e0dee1fbd46b0ce11605d159707029be0d3e5637a6e160920f846482eaadcc058ba46f69a7f8d9d72d62d144ec4232f405d473af9e4dc3bf5336678f35dbb39a8935dcfb44407d5d58886b65bbfca70dc753d97288a549c7f8f634f0272b5a3685edcb1f2dd4600a1401104a64020e41ae56f81efa7a3b327d4e6d54331f185ffe46aa53c9171a53ec47605178f4d15637484003684f40853c996139fe29867d5edb0b27aaab14d14dc5cc197f3788b20e9251ce56a6d246c371c10fcccd1d1524156e0946e2d7f8b526b410cb6caccb70df9dee59f368edbe61fd54438c54cdea7033773260ec30bed4c8c601e6a6292a8a94d1c6b78ce079e48685d6e9c5fe1e85fc0fd197ba1fc74a7aa797480d51782dc7173185b6d57273fd331b67d93c3cc13821b919da2c6b023a441ff36abb0623b53d2ed06f23548ab1ea658906fec1bc785b6d49b4dd16969819e09b26ec4116dfa2231a2e508cb344fa69bff7bc49d22d2b42b9e2b856621497ad81ca5ba581b6e492d56cf3776837018c9ef3fb41acd70ffdecec24b71f205bcb59dd9fcfdedb831294b372c124088e3288a44225970677d35529d895084bc4ce85d91f1c88adfc06ca8a54e6613a0f101f8117723b2c018785341a8cc807612b9835501839bebe04096a1053ca2bf299b612e1c403b82b6eef83811ad8e3bf57037ad94f4c7e578eb3db4b95a98ed7340ec247778b4b541e06a092bbb5514e054a32212e5b7d470b6c465d2899b32b736c17af293c562a096d03c5dbe7e08b8aeec3be41c13c0b0e9543db8915397ddc609b8f4581590bb585359117db02066c63d81706182b21fcc14c3d43a6a23ce38ec67e4904d477a6e1be9aec19463d2e4bc7b1f7eacb0a7a72d7f8c4c85df70d4910e2c03148fc51f4f749c52d2d9e45091b159393ac52fc1c6f9498e4fd1ace221353379137184b5188042f8118a8551e5ab875cd4f6a06308ba74c96d036ba9c36461baf2f49f769d970a7bf97f9b31e0f20fad214de0d51b4973c58a7d9372a0241e8d5821feab07405ba233bf0f36a90d5bf5cad1d85f262eb04a4c450d85dffcd2bcedfe8a9b7d049d366752caa96984d1fb768a704951f291205b65c22aaa75e50d5a962990286939003c41b3d247e0db89ce8191dac61c800e60e599a92615c04947eec4d02ff995c55b93b1f86ca7e0657abd215baa34e4de03cb79497d67c9385b1044a4bb3c1a506c50ae64ff6448582146091428c22556eb214c53d7f069a13f038f54f4b930681680915f299c7a2a6b25324d654fab3fc1eff90f5b3a084d9bcf8f2801f840d4012c422f12d9e0a30261834e8c62dd602c3b68c532cc0f05167d2a680b81b05dd65ca81ce1a2e18b8b02e35ec3842583d50f81bd832ee48f58134a5b39ddeacb3d16ad70bf80e5a9b1113cc7323cea6e63722c3e77e9f1b30a9cd64ab49354e6dd643871d3fa54c6199575cf031295ea7f6d519236849d3bd41db67da32b58755f4d3269469897aa6e9676bf5b8e8cbfd106d8ffe7874fed5da0d23c2f2d5d426ada819e3fe2141d561d27df653938b50047a9ceb37a71934e2c12cf8022cb13a7110e59e76134e779307076469a0194b538ac47c1e66af34eca5e7dbd9209b1befcc1e1659c5fcf81da39ce293a502397e0cab13a53a2d606819e900f0381e456a38280e21bfe9f13206a2d349f8b2b4f47e956454781031d59ba4e9dff9a73170c3a7c8667771dda0cebdc8f531c748475f27c0b4c6f443c5a9a00900dbc28ab41cf1e780734127ba5a42363de69c6df73ce6cb3e9d45f0b8d26ed0fb64fc9b74a2baee1839b45a1f37d49d8c6dce90848636e66a7181d31f9475f4380bb1fe62d3474e8641680f2ff5f981595dba4a6fc9bc94c0ca34657a6e39c53f569f2ddf4d4b7b6310c8916d0305643d2d0c161985dc78ca2dda2249de3ed689dbf0a47a7f2c17272e529b66edacc89062206e32290ae4ff12ff841e5309aaaff262eca4c76d845b008287ae2434210b8393cd1a51ec7bc80ff125586b0eb40a307280eed47455771df4e093355ffff707d2bd626ee5afcd7b6b609894d285311c8bebc914f50cf40d1630c69f64d7fb7569a98afe8af367ebdad05f5ee980ad2d3b97c417540d6a2462e2a8d1072b8132c52bf47f40d93fe7abff0d27b848e6d8ee0f504a15f9321a6780ca68ab7d10f671cf4f7fabe3bdd57b37329db34066a63fdd0e2bbf32f445a0959bc4c64f3306fbedfc6e20855a6bb533501f8f09b52b9d6b4e3ac45d193c8a9bad83ec14500ac0027bc943409de0e65df62b90075abf7354a105a9da2975920d7004816f00687ac74e1f989810fb7b2185406abbb0087e03a70ae43cad77535573f52aa1bca6688703ef751e2c0200289e0c73b96d6d09f2b0b907e70dc85b2e39a44c6efd5b25ec1da77d2577ab01dd90de4f62db73a3cc6eae997bc2cef5d221b06b294aed4f40fbd625605c4cfcab1e44625a92a2d7db2149fd6d7511dfebdc980b631dd321203f09e231726e5d3b96bd30f31b8112c97919c83e9d3755f5bac9b1aeeeb3682447a1581b3285afe98ac74feeee74e0f1f6ac6e619386147a5cd3d25f45f470b7b63adba02539714f7af123807424ceff0a60747900a487d42334f206bc1cc7450b450152b2e02dc7d7a9306a54e7493b24d46ed76d092cadbe6ba537b9a2f866a74e5d956420420d317e1b0f0952cc50e686b21f213a6f618ef64064a70d70972ab544fad1506a6a08ee27e0f9edd4babfe5d2b2c5aeec9a055378103ce2cc50f6185bf55316e378de580b82bf1f0ee331706534d2dd10b1c201a0bcc399681ea9f5f70791ea59b4226a1a56b17cb764bbb4de17d14b7833359f4eecd3b7d07ab6cccac3f62149a66592f8ef897d8ab9df31a1ce39808fa8e07af70305b491df9d1b4b9cf8722fca18411bbf9f97e55d1c6554da8402d38d53232da1a22628c7cd5fde0521536889db12f7497c6243b8f3de7bcf3958c05afe26574b516311bdd809069f092ba07ffe77101fa8534267e5fb6b1ed1e8e29c420308529c11c94c4da559cd0881542722fbfa949be15de4634ab74be639b6bbdf37b579eab8cbdd8ec34c11b7eaffe9c9001b6adf92f2b90c4ae4c8dec1c9442642e303b5aea60c2bd161ff8fdf00625121f6e4dbfead50418a8838242776cfa7a315928589c432a55e1ff908c4021b6bd011a5297aea349377f5fc7ec16bb8e3d6c1a8e2d0c2fb6bd7fa90bb30716f79a9001e30ae35e08291d2981725f49a5b5c8ba955fa0eb11fcd66590faadae8fb0b26d299ff1cee8f76828db5dbcdee8eb2b836478c241e11ad07b47ea9ab1270750a44bde40bb92a84aa6fb339441ffe67fbb2400d9f7cf205432590a36e766a853ef724f38edad44aae9097f4f3b91aeaaabfc7d4dd6821549d4eee2ea17f59aa196c67b422be2d46f3a2ec65494464c969b157985a6a30199a72dfb1c0b7be524e16ee9c43fd95e83e191920d14c8c729d2967beb2fd9ed2bf43fdc3689a192c218932128ef39edcd265c6ae182bc274d9aa80ce638cde0e7024c0d9e5a0fa865825cacd404aa863551b4d738a8cd75e93973b3de8b26e2b51b7b17be466c2ff468f2113246d633a3a9c3607b4ca1b8e4f81ef83bee8dfb7d85f481fc14603057127cd8a87c62fbff77b18d1037e0f8281fd263662aaa342789e0d3c28e95b176c8238aa070f9e73103a6e66031333d9cf6b67dc50724949b6f6796777ab0bd39d20fae81e841fd2295c9f4d302429028c5f3cdc14ca423c27fb05182a15c59887767ccb3ade247b875423ed271b4f8b4d3b0dbc3c3d1ea8201e48c4dcb3f8f4b01546c9e8785cddceb3a4cc347317e28691630313254f0c43c2ad03fbf01666ab6fd17aa3dd296773ed9a70f4c63296ccf4d537462d43e7179aba3c0474be7cddf8b543f9970aa6fb746d61f48ef01694d7cccf51bfada6f008e903829c5185cc325acc5610811ae9eaa615a03800e052bcb241b246ecea819fc1c0f2e160300acf4a6a45e41d31a3b2cd12744bc5929b063e24d47d722020c1dd1ae1ee6b09fe01fca4458c4f99dd5f5adf0d54be9be256c8ef54adddc672018367bc1df2522a8cfa00d17388b1eb52c7d1c7cd6c6aad20db17af62906be9e16d3dfdfa76c724c2cb16862468f8424faca130205f9d7ff6fd2441363a7efce3e31433fe68d75145d84bb02960fb968871a3c2f7f892bf4ba79bb6933c8e1f8b9d70daa458e15488ba16fc0cf12a4c9faf801caed7e90f8152e47bf3f707e64ae4da7e86b79392fdd91ed6299a12d917be9c99df6e1ed55a87a50df32a7ad5a461c77c10255c9127cdb9cb09ec33c063477fd6e43b929519ce43e8fb2755621a9cbe7fdaf2bac398f07e3748380b9724a2903067b0e2e3519f5799867e36102fee25d631c02ccec3f9e2c74f3e08c1be887442d47e8e349463369c2fbf8b7456dea +MD = da556a059d15f2bd1bada527e71b7094cdff332b8aa65bcc541fe0e1 + +Len = 41752 +Msg = 27a384562db32d0c3b3eb53d8be1501f0f199aad63632bef01a16b7bb4c0a73c4f9865729e13f5fa9d9249d0e88c07d27378dbc67bee129fbc0965fce50f12f24954320bd75b468e4c3f1301a751b0eddd03dde1cf0596b979ade8206c9c04547e9f922ac0d34751b00dbadab07873f8b780450547efdfc69f569df031afa4eb56402dd541c321ca31c3e763eb49797c68b8be3bcbf6144e96cc2b731c901a3e3a01ac174272fb82382b41a3410cea015873ee8a43605dd7c5d73cb216868fd590a8b7f5ab29feff2b0b71a29808ee0def797dfa9776e3eb963f75b305da2b39c1fef579643052cb742c1e68da86ab2a95911493af80ce1170cb8080d3d515f136cb0faa55cf1e6e7956f1feedce4cdfb2855b5e73c646d2bb45052166bc768556d7ac90674e8a6ea450916bbb28f7b4ae1bf962cc8f72b4e073ab9ca8da757e88e9753480f4c0555ce4a8b72adcd532f11c97a7a0257a41451d1bfb7f763b6336cb129d890ae5aa08d8dbeb24310de0e34fdc36d9ce8701530dfd46d5d7efbcc7432ad36bd824f612f5d40d9070c747ed7e71165dd3c17b720af8839146ba12a31a65df0ca6a3c0e1033b2855e22ded756ffd4f167c4f370bdbb4bc9b0bc4eb32186dc856bc8a90ddcab7415dcc645ce5eb29eaea1059bd8449daf8db6e34d2db04e796306102ee6e11f1628f79971ca3ba9deec3d90996471c124039b7324c09a77e5281df3363fca29192d330ecb319a40063881d8549ba1c039b9d2de8e321cad803337c4476ef433eda11388babad71fa522125f55e47105611ef197c1e8c339db12d815db0afbda04031da9d8cc9e835c27539825d55c2b2aa17c31685b2ab76645736a898a4d860cf1c5e4adcd4d356bb6ea054cf4bf8c06ffd73dfa1fbf90b2599e24ab6375b268cb80cb92536f80845f3a4923c937b28678971fef9d0e703fbdbce6e92ce109981ee2b13ee561ff169ed8b642a9413919aa4049c16973b06ef05433ab5d3bd62b5a7057fc09e12b92e429ef323b687a3113476e17ebabebe08ff87d6a6ac2b2930c9e026227598099ddb2567ae61a107d3220df4bb9f38d04eb1e26bedc32295fb3d05309c437889bca068e854fd2765e85712fe55b071e7c9049e21137e6a4e1decbcc4b6717be09579ae9c9bf2e26459bacc26d25330a982de021f9f47cafd9ebd4d0af96569b6304f41ae0ea99aad2d328595bcf23fbe8029558e19850b4a8797ff2bec880ab593086744328817e86ca983729af464cfcbcbe095099ff5dcdf641b4f18422583c88e698791f820bc1f0610e6f5c168846caeeb5df8ff505cae0be99d03fc84c8d7c78f9eb2627fd14d31721954c112846ab8bd0e6e0ce471fc74b13e371ced2dc69d20b11d2cfad0fe11f1323f5c2c78cdd3a0cff12e79c4d287bb5a3c0c29599ff766ea5bc05a613a90d75a3efa7c079ee6dac80bcdd6fc372c4e18983200f66abca76ff384662b0a956ab8da03ccdae4d8b4224351c4c2344bb4a0d5f839a92dd62c686de2e8d77509f4759adfe298a793760521230bbed0cc331b7ac59e1cf22c3dfe5241a60c84d2bbb807f686eaeffe68982ea97397139714b11000f5f7c0a6215828086a733ed908aaa7b08278c501d204f14cc4f605949f891e1307e1a02c22a07aa1fab4ab06227205769de93084fb70f374c582afac1bcc2c659c8398a686fbcd731e76d342533aa6ae9ee6396f2c05ba8a3fe418c5d2a1c35e7c85b3fc9693abe6a061bf73e12714c24e16e7aaadebd0f4fac348c80a316a666e8ef6179a909b62471e76821563d6187522421ec649bd1cbec8489e0ca3a9e53b466bddda1a264fda5500583716741adbb152b1bf470768539b1f2d20200843ab5719379d57d21522ad66db8f67762e476c204cdf0f384280e3d55f8dd010e88666080d2d722a1ce7cfaff5647f65be82fab3d86fc6d7110e48731b9dda483d941e4148d091b3cdf063e38d0086c9315505133bb7976d3dc6740048966738a89d24cbcecfddf78e07100b8ba9a328ef8532495fffa8812e6d0c84d0c19e69926823ae89727d7dc8f27e2dd6a8fe0c60dd2b5c2a8f219b4bcebb089a66a86264bec1f3600099cde47a56545845c0fcec24985486ae2b44feb027928ecdacab8467a6a13ac35b7048674085f8c71181fb21203a5aa6ee02afdaf82d943dd3cd5c2b7bc00101e9ed5e81e3ca9e781822f59d6c158ebd9160c415d7de9400454f52d2e8599c036bcc8d90e82a329efe67426024ed093c3ce3a6296caf765c29b9d0239472f3110a963c5bf6ae9d82ead84a32efcab56b1915bdde5ea7229aa7943de72816ee72edd2d5abb65cc56c05fe75db75b579914d7d71fc55ce8101e96701e64b4a75703e08bf48d03e93a377602c225fb53df703a32b4afb2d79db14ba84e8a618705122c062faeb5cef716786d5d155d3e9e661105191f5cbf36e53162db5e187c75ec3832689afbcc21cfdf9daaefe1666a48f4b4d99eeb1d804cc016614a39f62df49d873bcc668f2ed6340a18203869a79b6dc852a8ce50ee3a70597cf9469291cdc48b15cd568692cbee394140b2b6eaffe4c630c77717f530daa26ac5dec055ca25a483187c20d21396b192ebf0eca8d8e224d06585c119e26777c74a631dce9c696a0038180c814f95f9a96c736975a8fe6ade2d7afae0b19f401ee163e98096e84219a6eaa814c29477e15caabbb5f2821ea669b713de10fa91de4561d1f05c3ad34bef4462012efac2d73717620e4825a6c5b4daaa6692f1f391c0ed65b25ec983f36bb5e8cae73140f78639eac30c4199b889463d1eba2ddbb60e56f32b011cdaccb6cf9af68de0a8cec482b498d17e6dfb719a3a6ae8f6b0d7683f28ef05cd5e145af20708758130c96ca26de41a34aa0ae84720dfc1f5295269166562bf337486c2bdab75508b9f73f8f9653958fcc46367cd8ee1b7919bd3ab7d472aafe7b4707892f6c181783b5af3f8390d104f53917a9de3154c748ec789c43c9b5a62a48e070277819adf9aeae83f57c3d294be119b48bbeef2e6889aae9bb459312cbb2bd89cbc1a0f0a44a0403f501212758a70445e87d34d800fe964545cd8e6ce6ed677c2230f50b0bf278668a06c425a4f19f03fb566bed98b20559e74aecd90361a6f034ad5f24b70cd454bd746f4cb528b397ce32db94b80dbecdaba2f683ab76418e0a2127642e02de7795316ac415b508a869f7cdf6e9778b4899bef492659402fdab7296f2fa3a5f741a26fdb44cfe66dfd28f893bb2583272b8862e2eba23afe51f8af2f7a21e1ef6543b7044e06d95e413e0578a9c187cf410e2eb7d318b11f06f4f839aaf14e5a34c590a9e5b695c5e34d47f0b2e1f3176a9bb75aa5234f0c4a2ab9304a8867a23096614e7455985f63b5248e8f0d6199f8cf712dba5861409c085685c15dba61f934bd64a24a7d6533241fc466aa3fb18c0800b39b3ea4468d2c44bcb7f7b313ff3f198ed82ba181e208be15025efa1884d3ca8eb03c64a88df5284796dcee32a303fa2f8e6fa12fe0e173f2ba823d1983c1530191d83ec13ef165b8d673c8489521c3b94d9cf8e9c03cd60027ba554f094f2eded8a8af3ae0bf8182ff52ddb036272ade9e2a1529f07958bfb27dff2375dba258dd142260339e00289a009b14166283e1e89d828b02257073e333772169f5721217a124fba83b662c0ef38ceea6926375b56dcd6775dfb1df427179e3463b029d20e64347bf16280ff6b22faa77054e0cad216249bbf6915458ce63c3ab0ad84c7149f9fed8acda46c9a2ffd20859a809084ecdcc5518a3758e80c15cf8f367c2a142a56b856dd162f06c89efcafe060d8f4c7c49c1a44ca56c6f1f19c07335720966f21855d7b1d713753a6e4f70ec9c8ab10a6c922801866abfd9848208c5ed323d5cafca890035ab43ade7f630c0188302d48f3712767b12198d17ce22ad96b42c417c43e020e1105e30b76fec250410b8872c3101f005faf2a65e056f3100f7ca4d28627bb87bfb2b8f870cd18001bc587eee006522b97de1b1d1b83d04ae858dec1e96ca1b68b431f6c16daf7583de59483f45ba6308134d3bfd672a9d11e5ed8ad96149ee29e41822e102c459fd0f316f8a4170556463bba13b82967ebd816fb5d342799541f34480705cbec1efb7875169a4356e60e7b38e36ab2f0e13e09af9b6cae795537a2d9bf9dc0d21de7fb18a57ee78128007bb6f593152efb7abe5d2de6af282b0e159d1e8112e1e3bb04696df7096d6445c39a12dc580880b1bd6bdc49358d1ecb14fcec59c9ffbaa01bcf35aeb304e204db4e02ed8565ba0e8f43703d45907897285ef0ccee16e8bec9b2c74bec2de9664c388d6da32fefb6bb4bb16ce9197f99d72bf383870db63c957ae975bdd0c3939cc27b05bb4d68d4c9ed677b28107dfaaccbbd269fcc6c43089064d42cd6b6b25653935cd4a76d8e429059150b5db8e12ca6165c3b3b52faa85aff1144250becff529e1bf625450cad9b50e098e97977e124c6cd6542b08a004184d40aa60a68212965e929af3a7792781484d99a07e352ae942224c9cd1a95aeb9c48841fa4f433fad6f762d92f7798e6daad659ac4e07aa490381b8f2d3f107688ac5df25c8eefc4154e48796b3eb4523fa960faee08982ad1782f767dd9bb557cec966d1fca9c8e8417ca58ed46f05fd1b21a256c05f9c8807326e745f1b214f379dc04712fc0b69de456fc2818e36c4b67ffcec171162a27a96066181fab2176d48d3cf336f2d8dd247ce79e3cf404072b903b80c283ac319b8a5756dbfcf7919d289b0878b961cc68aa8fd22ba8c39f8d5a101c82b8eb28c9f34f948f2e23be344c83435d7afde6117e79465d78077efdebd1173a2c5387a539c353d1b522672a57aa166dcde9a4cf57187d4af85c100d93e2e3415471d8cddc37171c387026ffd864041208c1a2e2c301e99c904e1d3d00ea1330d7c29694493f50f71e9978154d459ef2d2224b0c50aa0d9ad639d0fca14b29912cc23b990f3083daee0ac51b34c34978b06817ac7e957bfe40cbe5cd038a88eaa9fd526c9caf42301d40b8621d61862c0a2f9333ab48970f5650c64e962cd395f5d0556f802ffebf22d7ac9a75a4f78565d538326537f1768d84ecc1d7a67c3b86e7cf1258272ba0953c2c24cc01f00d59e591494ad81dac6cb4e3f7468bf533d3a02a0563295bbcfaeab1818f0d122c3cfd18b8bacd6e196a8d263f7141d12772a5f0b95faaf13cba6fc7413d2ac08aa5784931437c85560d6a3e0ad67c828eda45ad9e9c20aed86a47f7d464ffad7119e3ad236369d5eadbd895f9f470abc2711bcb25b72ec6f860efadcb84d01ba810cbaf0f9929e2303c54b88d39d29f6aeda4d40f1f29ec1554e363871b50bd78109ce96653113cded56b30253526eff0965d528b52a680c7bcafb3a7a705e5699fd3c6c83fc4483f0d88776274c21ffc01c1c15af0391787eec108ada6542605150cd195adb786e96b3908b55758a1d5c66e9ade663632ce81b3fcf997b011d326a4946f2b7f9b6664f96eae7b4f18264aa06986234245140be4eb1c09ce2b4c3b3789a54760d82e815613ae4f09d566052397f2b5c1d0e0f3f06da56af2c4d8c9422be8702fdfaa56bb8245513d7c0d9c54b0a4ac5968cdc052fef639b281216730e599341114824ba64504104e7e8566b04e0c655d6f22f78919bf04a1e29e8b90514811d9091ed6b2e65b0ab15f75fac2baaa7f627699000f38403a355ba8bcfcf97587dc40089e4db0cabf0a9157cf08a0ff58fcf1988051f52a78e17ee851b34892048f3ba7f8f36ec38bbea69369fe7b8b90717299eefdbaee1f3aaec6007fc92e26866ea57d306ae62f4211c14210b4cfb4847c25b26f040bbba57dda3faee5ba5c465b69a1712f92e8396559fdebe74c139a70b461226af3ccc66e9d75cd38c71443746cfc52376a650913d5d3fc7d815c27f2de71c44a36c0f1f37839473cd4ed026c37e4401ccd1445afcd8aaf01ffecb164fc6aa14c6546ccaf02f0c96c44550785530fc74a4b74538b99888fff2853cb59a6c265cbdfbcbae3b642b041c5dac76236b5544a6613c759d2342bdf8b0fda43660f6e5336a151441a859847b9fcc6856bab73879d61257cf033ef2da89f72b4a2a8477cea730442a86fee08a11999615a28a1ac61ead2777c0e6663f181092fe5336da36bc06861d8382def0bdf94789ad36b03442f72cbfe0a1e0d06431207b6276d514b07e2242294e4755abd5c5da6223c36c49d7b0cdedd62a3575431ee9dfab31108c7f5fc2ffc8e263e216562f49b91a153b34f9c96fef0a15532cd470523cb6d157f387c58d5979c06aa243b0eb617fd821f850dcec53491807d68a3644932c0019c1e0725c69d2144b63d487cf81b85d020afd2eee6aafe7982788663d175b44dbd1b3f2f361b7088d4050d97e838e4be65248e6fc9c032a0e091526c3300b46a40b476ddaa7ee43392001d17ecdc94bd5b8792c9f510f8871637b9e604603ae7c57e60a9aa53f6e57ed2d9459c93104d824d72a5df199aaca1c00f89bc10c236b9dd6f1bac27431ed8e1d4d96dd8d1ff67eab05c1e46a38201eed59fc0aee4d7ac5604bc265533305eb1922be73a74338ae3de850924ad97c508aeb0c8771d5b0b7cc403bf8a61da6ec683b58f24519a49cd5f994640035e59a1ed652a15c63165b62f7ace23396d97954c1ecc230484531bb6014c056f563e4f34257c0799eb2996a999d8bc347a57a23dc034b307920533646580f12c1fe164f56a14d8e2f8e5a2b4d965b1dd812d71eb324f40d543feb90d3e9bafd40bf197b3abaae64bdb284ee3c20ba0bf028788d6fd7278e80a9e20f2e4e27df1badd3bf172a4dc3f12401fb8dc2105337f045b837a44c7ca6661efc800fc080fad12d621577917373eeb79a6905c5be577127e63414c99f6d7f899ff0b5eca783310fae5b2be13bea189013f8704114f5b304618eae07bf7efb0a3fa7c7121e61d762e912cda7e4ffa873ad618bec1dbcbfc66f6cfa6ea480e28825cccd9cab3acb0c5c61e64a3759a847b1cdde2fa0519c5359f68167151c3ced9a884ff117b713f74f71fd32f9a11ff66763f270675f52956756ca58dcfa1220e403d679297fb90909699ac7f57e1667174c4e18388cea72e0b15eaabfc16b094b64e99cab3bc52cd4724670f299948209af7a90dc806bd40e32c3c6871a509019d411c263923d47f6b48798b799a12f85b5ff3f1be4dda237fe8312fcacc89d947ad5531b2d2b42b856e8a40d274556d286648cbc6049c4a44026f8e520db18067fbdb799b396056281eefdbceb89df394931e1899bb6219d1e32df0b1d91e9b50a5156a6cd +MD = 97e47f7892544767252ed6fc2740649ca91e1fa3f0e8411c56ba6b4c + +Len = 42912 +Msg = 7ce92557c365f846faf5efb4fa5bcd25c5ded3a8bfa8915c1b6dfb33934dbff65cfcd689592059718ffa9793d949643edc6bb46c3ec66845136667e598e7f15f249630025bd310dba5ba517adf02dbf95024513bdec0e872813d7ae4f9b1d6eebc005b493347c58c257b46f2744dd95e0751d39c0760baea4e3b5bb71c7017aa0c827ee647441f8df8869d8200f30674ea3a6118216c86b560a533e66bef5b9cfd63c1620192c6e504237fb3ebbd0b43e127243694adf3dca1c629fa4cf54bca75ed4d44c8f8639c3399140c9d7090d3d55f437ec8ebaa66f8e5667a29498f3e5d664a14033f9ebb6c3283157ed73c2dac2be77826ee535b4c4911ee69b4ce009e17e05b1c2f1e489634f556f7b9b85850d338ad147d95c4873b53de74feb0161e48359f7a908c4e9be891586eddab5ca79f5da4fb6218a8900354d3b2efdf8ac741746b852a8fd2629680a24c0cbe429bd67fe54463850f4fe93b558b4e00648049c344a5c5d0ded386e9bcfa0e991113c2c5f955498401ac3531ea67e5beaa30a94ab44228f679d6fff52fdeabe3d1f6a9586798dbbc878f2e5d1cae7abe66c1aa3342c41caaac534bcc8262ab458a2ed45fb773e3d6a8e01de872c8d6ab9f1a92a3779369947e32b0953dedd56645a28b03725027796d874af9741dc12b5e23a9c4d917d75bf75b7779e9e6f2ef0a3a166c1f96714edc6cfdb9ab1503e6aac439bef2b92da81fb7e79f0db7ca87dfdebcc146ad87fd00787e4f9e1963868be588b94adf3522ff2c4a2f31c725d7ce76c62b6ffd312dde9114e4d68faab0096edfdc67f3b5729ea3e653dd7ecb86deea7cd123ee398680a009a0d9e1a00e2d47864fd35b763f040505319a44843d172226dce9e866b2ed8ea3aa31750d48fe59c53b168140323a38edf1ef8117a482070c734a537f562d412b2b65b5b906848ae4c8b6cbdbf34726e6bc659d4d62267f76bfcd974d1d49a3e84afe086cefc8c32a1d3da30e2933b53aba8300ee200c73abe7fa1c98ac489b243083d5edabd1ede1633370a27c07cf2f12d113c2853accf414594a27ae321025047c8605e3a8ee4fc11e996096ca5b0fedd73c903aba70996e738ac4c90fec35ef72827c3f53b0bc6088880d1c844120721ee422e69449e21ccf4235a5e8169a19ec311a66dc197267f8a474b93d69abca2d743e32ce3e1647f5dc43ebc4769ca972fba6014a13b8fff7555c13febbf71c8c52adc672367f166ebeb643acf485c88c48eab7a685d5500c038cd2ce1f4e91c4e83649871b63b2c1525654a7789b9dc380ac31f7561281bf16cd9fb67df6515c9da36416d40b4276feebc7bdea28519e0bb5164570b7bb98f6e722bdbd3883dcd8bbbe2649bfef162c3c43f632720ba651cd0f99ba0c25200ca202ebc75c4fcc034500bf62c7e1284312715b38c2f461bbbbc4fa1c58e8debec6e74883aadeb5850ad1e9076a3f34ab35f9f3e55f3459af49dc707ee52b5a751a7bddd96a581fc6d2daad20f131c2cb6d82c71f93f216963d0003c8f9171d9a6763b1b2e3e5902e64c21295a4e15b0d82b4ddcfa4561ed960d7bce2ddd4ae93754accf45eab92258a32214ecb7486d83b393fdedb89fbde7a0aa2b5d98995ca0cd6378923d5ac130ad2e133ae15cc9561b6f53280b3350f5340bd27345e5ba5f4aff9577a896760ad495a2d95eab4aabcd605b5dbfb52d3b2221621387c878ef47e1a48abef49743b409422c71bc680143e794d338adc916157b48c2b0ba1ecd6eba343fd31dcb77c5e98fc8dd18a7f319958e4d2885bb32688a04e56323227609d9b2fba74a892384c6da12f34890fdb8dab61fe1c55a0ca5de051011ac1a75b3d0af628e3346b36b11bfbf56b4a99d9c279ac006e54c0157d7e7b74ebd6d38e72f97f8fa308ab3f36abf0269f5583f4e2caad20a7df7bce9181b6f6ccf915c3e56eb239dfacbb1b83246a0cf73337f492a74ca5ef7f39bf40f2e9d0e5b3d4c03e74776dbda901923f8e50ed9c6b1ba17c1671d96dba62ae33d8fc4b5f8b794e2410b6726585e76b12f18a12b58599c2482204024a1b5e64123bd6ad620a6a353f4c579100cbd470a656ffc36b0a18219ed0ed69ad2795a98424613e15b6103d382f4212b6003067a0c49948e6810084242a1456bf68704431998448a11ad32eb7c1603daeae6219ab443fe84d72b8b485376110a86555ffc2a527112ebb1ccf630b9759115cd44e6dddd9ecc865aa7967ffbde18fa6ada0df4d32e2e32351e9e514d0b00693edce8e97509c81e33d9a738b0e0f9cb4e1f02f9b8e03e8d9dc44e4e5f488b6da1560b77a8a409d73d9e150e23ee3f91657b75b9621bc666523a80984e92a49b9b4ce908f7020479ee614a60c33a5cb5479bd0a46d455855090ddfcfb99dee6b832dec0ddea84a5ebccfc1f12d79d3df7aec9e5b490156c2089aa6452eaecb560f859f06ce1b3dfe2f46161fb101374865da594e73b46446078d9ea8fc69bdf386c06c7453bf61e0bc40b14cfc84e9b89f017bee7be2e3495c43035bc14348cc9f7afee6fe2958aefa5c1e197e697d888cee80bbd02156549d578eee0bcffe399021a0cf2bcd84a15004d705a5236530c5fe02570ee45fe031378bc04a5440d32f310cad7b30687053b756820f473369c0bc6b1086905284ce6fa482fb94b321c3359d025ae696848c00271f1b495a6c13a645a8e5d9c0babb6c43969df5b78dd2bbdc5e494471665f5bb35d67ae6cd025480c509b153cea8eba038baffbe0aff4204511d4fe9b8e4446a59d62eacd3e7c1e39d814d729acbed54ed2b02ba0e0adff51dd7c697774e14d588fab830e0f8e95588ff1941969d24a8ffc3ce98ad846c5ad11ae1997b2accc5684900ba1abe359d2e89fd07eba5f966178b4ca00ef750f915ee8836eb00d602a1cbee92acc00b85392ae10ec06bd254dc8964195aeaf39a8f5ca3b7ef599954dc886bffbc86d4d34ee7ad9c3e78183cf7c7ff4db8e6bd07ea6b1a64b1bb7d83c1895d4a7399f95017ca49fa8c5334e40f4d038251721607cc24d58556b1ea56f7d5aebcf880e0c43cda9d70d4848c14cd215a014c166661de8dbd6209c048972774449b74c3f3f7651f91453b948a96d94dea12d25a15dec7b1b843f072ff0cf86f092f0eeb99b039a20ec3eb0a9531dad99dfc0bc78b462f95af6f334e777e13cde3c2ef7f39b9606afa300c6e14ac78cb59091ee43061c0438b2ffbdc19b41f96bc9a3e073dd8837f3fd5c54971d05c2d087f34396df620c232cb70a54b78c5d27b00240c0cd64aeac3fa3f2213652e0691a7744fa8cff71a8e8bb9307690ad8a083cc9150e7a5cb270e7a2816233955fdcc907ad4ab2ee5486b6ff0503c57ec64b9654aaab8e62df2ce315eec6013a3fd12d14dcbc68ac76019669ad58dfe08c2c56ed534bd8037ae137c0f2a798c5ae581ac46265b9da8be97120afdfa67de693c3be995622e88a762ccc146dc1ddb559da3fc9ac6c209825904b93ffe2fadb6826ec033432b817d30861dd80422a5abcb3ac98fb4b25a79d3b13e21f5a027393c7a21a4dd01c2ae013a6d449e356a769ee3358b91c92bf39baa023a9d73bb7fcee06640ac6bcc98597c4812e6e06a448d2fe904da80ee9e15419de04214dae8be3406bd1db3fffaadae36c98a9e45842a932c821b7422c7d52a69c9800e16129ed79b70bd64ed13725291ef05e98cb3db9fa899c11d690f5fc71e3cd3c9fd6bc56d9ce2180904914c0c11e9c53ca05224c7c59267d711d319a9f3e0b9c2e172d64873a79a1ae6e29f3d1f40651210fdaa8e0c327c4bbdc19745b32bae9372c6560ac837d014f485e068229941f45f04c154f4c07ae5ed496d2cb4942eb611b4b926f2f94671ce09c40fb44b087dfb05fddf17e2f03ff0d8efb170a0b6a55eec641f9c8259cbc3dc9eb65cdc14f9758fd47ede0058b4990eb3868fd7d2ebaadc0b671d69a69d867cf4de74c2f4014ee0d9a6bfaf20ee16493d1e6ab01fe395e203a00df5a94186794aeaa4a6122ff7d761f95555f537291700eb89bfda47a0bce13ce6dcde523440258d54fc1bdff0a221e9178b223a22068360755dbe624bbb18902075b26a206009291e1b6d8bd9ff8de87eb554619186593fa62018ddf77b3e6c5366c1d3cb675a3068aa83de043e0a9a037ae8480814e6bba49d9615546bb703e8068939a5b4bd45bd1ffb211ffc2c503e327a57f640b076e92c9292b30b2719670b75164fd696db93e2400f8da867bda772670bdc883af3fc63baf0c3d7e2ff48bc11c41a4b7b6475a7def3cdc15134a7c15aee3b5a0ab556c96b99e7608f3815befbfd9591df62eac7346860d55d57d795b2798334942d70c421089e238046467a700d523837795bd6fcf7d762f099bf660a3854b66bded2fa77c7689f7acc63752a9dd0bd17fa513d750ca1e8bf6cb7b8cea5204e064c15c2dc40d742b31cf5459809818ef5785381492140d52e5369147c3a6679d7f781b3cb2f5aabddca645224eaf52c5475fb48f5d044c6a1e04bff9f8297a86563df43c0cd73396f5749217dac9c13c96580daf7842e2bde95c8e0a4f844783313670959b5a189cc460c49fee8f6e3a8e9acddbad75d7328e6685e2915fd67d578b16af272760b99093622150a960a8754d7b7dc24534b0544c2ce986612d5a11656ef278e513d4a335f407c9be9f6f9498a0fc805c002185330b88f5335604a7ec01c7553d3ad5436d02b82176347533a4c3c0af5f436c6745ab25a77d59616147569487d7dca3b963159c207b26a49a996c3117f9057943aa932a65e63c5b869ff6c2d75a01284d40b41b8e727de3109e24b77fd04f30608a4bfdf51609d9601b67ba0a6fb14b462c689d32064219dedb71bab18c2879080c5c081fb6c8c235e433e3ebbdf5f4ee4eb88ad5dd7c304d79dea273d6993c81584db1ad6e7f004e21e1a441edd40b8bcf2c4a3f9f330fa3a0f0d78e56a9611497a66265e5387af3fbfa67d3a6577966d64c4538f56f9e287731c1cab360d009f1f08211c4fa186c9a05936a918524c78ca1e4888739c5262728c8ee95c671a88db17977b2cec200258a90ce5566f5f519b28df6fc986ce3d75d55c4a6e42c389474ae6058ba60f8c412c5c79b02d43aa407a94cfc957ba8b059ce128bc1ea032dbe8b935dc9da9ca1249c1d0b62aadc5529a1503137dabddaa39da1ef65914f811977da6b001834e1487c974c8d5d24559fdbcb4086726a7cc3283978d90b65b80cdafb27690308af06cdff078bd75accf1c184d48a29f7bf42d9a1ce243e8df9201dbf3b0b816031e7f81be365fec6e2a8ba45934ce8abcaa717a39a4e140f6cdba6ee4fee7b838f7263b48922bcb0bd4b2dd425d398d0c67a4905846074323ac8de500a1bdabaf2307791a0caf85f886284fa33271facda44d9903361453f8b6c2dac1599844d82a79c7cd1669a1c6976267f655167872f8b2e0c5059717e8651fccc1770638466613b3bc4fc892f880e7b2b625856abecdab0418251df3754feb176b9a95ea6c7e6ba972097afe00eb2ebc6d344d65f3ab6c7f7724f77b21cfbb673a34b5cfdccbc83588e3cf37723eade175f1eceea41a9dbf5c85e213607d1718b7c5e47cf9e6dfc46b5f53d3bee3fbce7afed2595283a54042b83c50d3d074c85edeb066564818f283ec975759838edfe6ab9c5a818f29aec43c84b7de525ad2b9df88107477ea3c8d0c1846d485ed924398a956b38571575b9349bcf28b3fe433590a0fd6fee9fec14e3506b2737e921c4697d25b1f32e6635cf9e4b2d3aa6965cb84b8e0358ed5db139c2b75d4d83bcb25d6520aa4e4b895ea23a381d420decbb7a6a032b45f4e350cbc298112811beac6f35a24ceed6a4ddb458e01f519b0df9dde5a4113c1c45999f39586c4ef9f059a6d5f4be5d3580590ee1895cf1b8c0bfe9a4b9dac5cd4d33bf0d3d9549a517620a2e5e2923d2e57bb6bb7cfba9ccceb5a78f8ab1686fc1c7332890b4a17bfe6ea32627b5c6139bebb6d00125013f00821e8f5fbcae6a6afc017098f3dce56c267aa69989d062695016065f0282791ccf578a7f231e27107b33cf9f78844928319697facec9261853dc47e0b9b3e3ea435869330f410c7becd12ceb6b2011fb39ffdf93ab37c6709b127aca731de334872b15c3a89d8272f5e16ec5f539a4ade3be68ac49a4ac39d1bf87665746e2c042d8757715bcf2bf416d7f753e566a06d9da188dd0973f3b9cec55fc8eb849571d6570967f26c228767c46436dffcbcec35bd97d6799e73ea5a0ced43ffb7ec1c0dcf06a0d615c763d17ab77aabd2fcc484a92c636310c0993e3d9359395ebc6d244dc39e8f726713d4596581f16fec911ae2bae66e716650fbd5e69b210f62efca61b4c37708ae01f0eef2ff194a08dc68f8b7e1f436e1ac13746b6c3f409c0e50997eb2352ee8c8a7a9e444bbf7ee00ef59c7d88ce7af050587765eec78b453575375ed427bc3e27928cdf531efe8a91e945f5ca0fa3af6529dabd5d13e48696f3e3ec71765bbc9e5d9f4831398952f8726e2c0c8e511ea7b05708355f7b48ae8983de22c833ce96e3c0c60e988801eb99ff6b77d4ed06bff7d78ca134ba562542007c11a4ac3eb72dd8a312c4615f1165e1fa3368dd2f54064093c7190877a423400e63922ed3aa42cd2564447e3413defa2167d28b610fe37c63cf96cd72d3362cdc431a2154172b89952da04548980c33283c9b5d6498987144e23372105982ac2ed7c5ed8aa5eef23b9461206349f87556d94abdff962d098028795d19df0fa94b471afa3dfd95f25ec20e764ccea9a6f5666712fcb1a82a5ec8eff7550ce6097cbca2b134c7277047de2faeccce27af4b0d7bc4219213be25ea1ea88b890eb6095ee37839aaad533f114c32abf27b79a1f40d3b37e175ac1eb88cd985fd8f963a5467b8124e2e858c83ee69b1e1aceb3e43a5de0545d7dc9157c3f00911729356c7b6da885cb2ed765b9cbba543c2ec6c23cb1755674036c5f24b57e06dbe94a7de5644637c427347c2df9051c2c66671bc084eedefb8a204afaa74d2b87b8073c2d1606b55e4ff45df3e507b04bf409635e3e99684480894b66ab1a69ab141039aaf956890a279badb4163ecb1b56223b6e55118cef650be30127526bd69be9f8f764a21d484c9ecdd70326c72b0b4606994ee3b77cc62ca452b2718c6abdf8fc9b0e95fca91d8240e5423c3efb91d94747b28c724d226001c3c3145607d8c1a6fe4d9ea1ad18ca995749fb8cfd78809ff1f68837f0f85a8decdfa7531e9ad89a99b828a6b4ccec59b580f14ba13da05330a1438308b6509b267ea6fe1f62a24a15c4c07650b87be4889d99f5a74fcd137c396aedf4eb06cc19169fd19aceb337caf9f28b1159dddc38e67215402d6b534d254ad33614c1933d3dfe58114d9fe651ce3b6f772fa6a35ef1f6253c550f852c0b8fdd4cb23582fb5b4f0c035dacd822c807ade2b84adc5356b29fdc653e4b81328656b941b71ddc050e67f18d7e7fb66de390f4725ed9ce7b240fa0cc5bf8f560eafa0c51eab667b1c8f65c3b995f953 +MD = 017140a8db6b5961293af6598a44d7fb9a80483cdab250b6159e9aa2 + +Len = 44072 +Msg = 60b20febacd8bbce94b4a9bbe8a64da7dddea1f35f661a90a863db6812982af9292b204305aca4e5d7539a83c189576aebaa5877d30a3435e436d0454b7cd20306ad58663d21e928d6fcac2744b0d70c9fc36b2afad31fa9f1d799e381a7e40e1dbf1f1cfd3f72dfba3747711822b6d322b040d47dc9c134f6cea00a5d22496396e9dd2ced0f2752aa8cd327e5e7da089cf9413d03f403201ba44c8186f4e74a9ab3fa5fb498f1c8cf84b81255082df23427d52c355dcdb38ae00412a525a80a51a6de7dfbe3b68b50a65efa0e8c96db13c1636abb0b0837680a328362be73ede249f14e69f660e1567b2da7b87bfc09614f55c03c069af2e0aa3d9d64c52f3975249c99a7dbd513098a8ee0fcde49c5455a12f360576d2d17498d285445c63734c045285c9aff68905be76e82bc6457e76902ced005682f386e8aecd9431f2f45a456c13139c42a1476a11af11d350770048d183418724269a29cb19cc92269d058352dcec20e9fbc6425aaf109a41d08b31b98339975acd26c2b3e45deb72cfe654c34da3cc411b1acdae62c8999e0d6ff1417768f58b69d549f5c7b8bc6c2f652019dfeb0cec61ad6279847a4fc99036fe05da50203a8efe260d3e6d73771e1a7be32e1251407206a7686ed63b591b68ce73267fa5dcaf39fd66b2fcaf282e7edeab92ca37d1bebf12e79c4ccac0d18dc925e64805063ce1269ebfe6ce03d2fabecfb8633f34ca2f3b63974eaca5851e947a8459bc4bdabc4821dfac6e7e9e2692ec098db5ee06ef6788ea6c2f5b9883b6fdab2549f1eb03b87c7ccdff0cf27b017cf09a5a4207684db40025e1677e65873ba52b2cacf0501e2b21cbfe43827060ff28299ae54e32447162fc516db92cab911cebd2d18d39ef9a6916fa96a0af67eefabbe64c4dc5f24dad6ffdb2db419aba6cd7db0404298366bd3f629aef705cc8f2b1caeb78abbdb529e154fb576cbb043f8fb3c91797900c88b5c4a4b16bd629aabbb757714c2d247300e59bafe6a2faef73eb751a1c8be8661aaf68b90a5a6d8d2a49f4aa3fc728033f2e086747e92b0714e0bc9e10eda6dfce714b48d45011149de16795ff023c750c9ce5f018d40110f341e4162d2bb45051b8c0f3426dc0cb771c04b6f264ee22f9c0a8ecd21a19978f7da014b9cc9d6234e46e4aecf9d92c566870afc26599a77727c5affc11d10549f2550c5f56ce8ff89297b23c8ae6b1bc452fc2d79aeb7d0540c0dbff61c3d4d35e978f8630c4240d31f1bba9a755f6093086b2ba6b301e449a2ee374606e909bf0dbf0b7011ad8f35100d9bcc5c363cdb939d1d35d240585926448c3c43dc3048796e27a4e3f194b6e29aefe6c9b759a5dadb2cae723bd78c8058e95d3bde6bd515cc7386ead6f65e7e08de7126ab5cf8c56c809afabb07eb9872743357b76270c923189e8f245e35cc9f8ff4dadaf0dd3c9a4081d488907d56d95545fd2ebc207db93d7438a27344b4a92bf74d0cbb5b27ab95e9676a1b4ba3d7b51b960d21ee19d80b914f19de921f6cd902e709657a6ee8a65c1b29505b65b2bc3e8b1a3be085c6aa7c3a514627f331c29e10989742fa999c61588cd6b786b39135421eaf01a9cb41bd6312540c1a400d523083f9bcb1069e81865c5667ec225d8825e028566d31f8dd3024b0487ae1e3a7af9032ef7c76d5420d617771814747c09b2a4ce9ba3ef8630b4e01e3fd5c6c24f588ebe44433682f5663e2df2b6978640bc2c3c1763c69d75b59efe68af8cf516a32cba1ef8380cdc72a3eb9d4d217fcdf7136e68b7173c2870e245808ff35b677587b3066af45a6c97d340563c84d107eff4d61df263caaf932454161b7c5dc82c0a29992fede41c5266ccdc09442295034af395ca2ef1a1890fdaa7c69a84af533e9e25aba742621eb8d18d37e1dcebdd80576e92fb2974ceff19a415c05883679f815a5292ede479540ef84cd07882db2f6216d13adabfd16cc1998da051faf5a76395d9535f09dec2c59bbcb27de088b2b40d2970add93ce342f6929d096c69e0b576944b0e48db7fa5e60bea658b62b4bdeff03eeb576dfd1e59c928d75e50c6076b17fc8437dc051065befab7e9f5aff00dc9f83bc0f114d42195d6545736e1d9e1d8da593d7cdda5a94a65fd92ce0efb051b2f179c42c4d4ec8d27f8cd88aead795b86e5f02a73c61f32be9f0c384c2f546866075fef77c12923904d57b286d2a01464c2c6616202361c5724bce0f21d8a361f736263b7f955dd91ba5c612519e498066846be12ea9c4bd2273b34ab35f508cde46a2c001e013fbed86200f3c3c55aee5ee79d20dfa065b20efdcfa2194354f3e2ddc4ea8f99ae7a1fff1e6d70b0d18f0f3f8af661e0de79547afea127f3bf13f713aad1ceadce56099a260c9135a05b0195041e01ec3a9a80496e12f2748bc089c26a406bbbf3d52da9945ba5c22bf4cebe95024010ee982adf8a6209445f6c23607fd0e722d369e4c3f5d54ef4f8cedee2ca4d9cfd8ee4aca3c028cce1be894c5457edb190d196d77fc6f3cd3c7b5bbac7f04a891080129e4ccbd1bdeb0daa7d348f016b7462ee6e239451d107481ddac4b39394e866a47820f9f76cbee1422e7771a6655c2bd32155ca59daf3c3a7c76f90c330e3a71cb2c6d70459dbcdd2e8a3cc674fa680e7898cf5864b70926bf93ef423fd90c5ede6a4ef72f5c017ff342febae8ae2069e1f4f8261b30c28fcf8a97a604b8e478a7c51afddd11a740989a26bf6979d21595b041d66a224fbbd3e358ff2bb2aa084fc4394af7c4956946171a9d9f64665bbb541132f89698f3f42799145bd04656fdf014a6247bb3412443431c3376c5837b68cf006e93847e5addc4ae3d19a0aadacf11d90c40e9125ba50904cdb8d5d5fe75e5097322fda62c8d40957895a04c0eeb99aa581a1f2212c5d51c14307f986c03ba15b04aebb193bf7591b54c2f83c0cc15e2b0123dbb722c0d2db1e8ac16ed98b6eccd1334e8b6fccb6a9c47339918f8eb49bb2e2b23a3611bff4be84295a7be41557185c193becbaae7d48d95d43ff985a72278d1a2ccec655a8b362b5ec5fcc31944a97afad2b57ad206263e7d5d5749c48cf818821556550619dc4db96ddaa400f08647641b41a3f1d91b15db9998a168a2b5e609a72651ca9ce292edc8e14cd21a24111bc0f78d0df67301381c46f45a0cb72581aae4c370bd4ee044fd9824576c8cbe65ea5fa0ed0436ecda0ee8a9637106bb30451912be232a2104348892578ec5388bc102455bac6cbd0a96072a4b7aab925fa14ca67d767e3c769737ff9928d765d46c67e21d961e5c10dc2adedacead9055e605e774605019e24b2fd4e6e1cb2f8a1416e1fc6954b03409d92dd716149f5c3bcc3d6d87aaa0907bf8770661a87df3e098a8c0ce14a3be459d7f0cf9e8a6bac82a102e9393b9c74d1852c151763659f974a1316c681cf5b7fc3c3f20328cb8b6a6c8812d144cd1e919cbdf593e440286323216ec5704238880cc3932fa3b9e2dc9cd2cfd3341f478834c2720078e37b05bc539f5e9418edfb198c2d8469ab4541987f7aafa807922dc3c624fd9fc3f9f76c1603027bc7ee51606a2ba20914154205facdd71f1a80eae03588dbc76647a0b8e5444185d3dc2377fa07f8f088f5566bb113d9f7dc8658009d183b9e4ec6aa294dddac50d129d9c6c85cf9ce7e47e7204f0738c0a234edbb595d9d72e2096c43ac29a34b2449ece3319544d1689f7cca30f264081fff246716b361f3d4827f8eacd2b6f351cef543e24b3ac7ec6e9fcfe36ffc4cba57949a51d4297f7ac44c70cc4367e7fe2b5b6f36e97c105e27c8a7f2fa51fce5d0a6cb771a649459316b80670626777de1b7dbcbea6939427d7ff8dc1c259746ecd3810300a3d1047c453419958340457463000de882a14db23e38fb3fb7ba422eb341822157a3e0e77202507c0ed109761572694e68e6b4787bcefcefa8b46bf8ce9370e7008b83157a81b81419882e4927a98a968c883b32c1414da6794418ed7ddd6bdc3ef67f78b7289d1833f42870122bde5b5de42673972669fe99b7fd7f59a5bf8b53732aa3c06d8bd2fe937c8d8d6fd0f76db92aad75f4de429aae7e20ea83085eee9009091ed710eed9f4bee3c1fc0f152c45ac62e623173cfc861f6498dbb2c170dbbf3b3aeba8b6468654357846e51f2a3820165037a1282fed55cced366b7d8a94a19c9d11dfe3d4c6d0d518d6ff8fd7ff1a4a5ca908aea532b5dc60198ecd8c7954bfcdf012d1f534c9552c22cae1c6191f61540dca2b0cf4b3f59a0b895c06e84d0745fcee2b386e82381ac0b3af7504941deecc4247c7a1e4aae37307837a7fff258d9ebe3a1ec2afe06d27566355401cb2756b1d6f55d8ac8ee4e675ee679eef7d0d5c2f8908dfa700abcd3f87f75a1de19070c82c47f78ff406ec50e74ec392806dcbaeb287241bfb5f38bb97cbc12c0dc863bee91e8d138cd1db2528a08c8cd1f753b8312a2e5342efe0771d5303ab9975ba8e303a17bbbbce696f0d0d6832e4629ad87f625d0179e65ade831da0213720fb928c2b160d0364ed9b1ed5d5392a17f79c07b04e8b02cb1e7e539c052149629d887772067bf63dfe35d8aa51e4358ff05f64a46174601691c3295ec13062b316cc6caf777cf6a201dbc4eb7ce879431baf00bf344234415b395ec662b2f58b0ddae623d7a4a7499ed95e29a49a77d9e00786514578d1e3e16d7e63484d8462d9207e8fa5776a8d3bcb2ed5679ea3acd405400b037cdb76bacc02c6005481d30f5990336f69c2f55f3d918f4449af446e04d85cfce2b3624dd1766f295c904416d2b5cfa3f0330a7f8d30b7b94fdd2924a2b9c7903eec3f111a63cf01ea123e962879a4d1af5d45235686df3505dfd38e4b6ecb7be60885bb03354648719a3af3c7366386fb843dd105fe76560009cc018b61e90e7c7aae922875955b879ac1c64b868c22695a4d0f38220d8ac2fd8b34df2d90d676c5424d06af1cc980965b7401e47f327d41fb44597c1541b31d998ea33c6352497ac9220a3c4d01111f708396cacd35abdde106e6771e19750c6f759418d100790dabd7bfc7b690ad88a97b86c3e6ba798066cd6bad98808d2c75901e4d5a6f89e072d4a3bbe9f6ca744ed23e4a6c2f7acc250e558a050540006444ae44600e00a5b68f329347b1dc65091e39d8be03042384503086f426422a8439c088925a51dfdf8e08e8604067dd40b615f96ce3ca290d29893ee642080d8db5f19461d311c166577325c430f14f9e404f16f930114f3800cc2c4c07061bc96fbe024f16a52cd3522dc5c3e21d2e6a3331dbd3769e089d6c75b9a5e3d0f7cfbd922cca83a064bf2485631ff2200c4d058a928c35b4d795c312617446dd041925faae64a887fb7235066818efce6baf3da5e5a3ebea4ec9ab2ede47ceaed33e4f63f19e03b063a51a4d5f5f195ccf1952104f8b07c2e0919b376a80e9aae797806a80d703de3fc03ab6a3432d7fa903d9563ad227c30f9609a8a0c00675a3cd6f8ae6b05755e24c1cdefe759a8b7c0749e421e9aa6f5e3f7d1f1b85c383ba3873219dba4cbbfdb14722ab56cf24da9c1a46bf623e2c4f067be73532af497d7121eb10457274d488202e547759c0272ac0fa4dbc218e44737cbd8857085b7ffff233d8f2571519495e5e6447b8e1f44bd47b67681309e12ef5fe7f838d2e344d7a88723179113e6d584f65587b0eb467db4696e67123a7618e1695189c362ce211755693370db67c945dc22a0eab0a173be846b7ca7009d39bb273b6c407ec465d7700983f4f13ef9916252ce24b47c28ced117c9d537afda54e65ce7317d4e2c50a0aa0f069c95edd14e8d19464100224a1617558529d38314715c057ea896fceaacf4dd8f26912e6b697d8a389d54eb9c1c1629a01c32bd638fe4cb1047c1600d5e91f875d55c43c97bc828e210a20b2aabba4b0c59f40fa9079c43cda2fadd217c2665a2f21eb4514c16fc2ce40f085e8babc5b32840024ea22b749e0067fd8ecf5e2dfcc4fe0a6da3100cff5fc56c9f83929f7bd03e1dba283a666bab3047bc1fde596d9525cc84495d6241cbecbe545c17df4e9b18e8566170221de97e43143451f1dcabbb82fd07a606dc6eab87e7dee18f13cff3eb881476af9a03797afcd55dfb3050e7b442a393feb6912b4ebfd199b6b2b5faafb90bf315cc414873ddccaa8153c9d1ebbae5cb54b97b949b44fde65d129552bb520c905d9aea14b620dfe18a2c61a2aecd97f710cc760df7de2a718b1db72697b9e0f58eeb4804cc2bd7aa1fa35f8286e37fbe38d6c8bee8f51fe248ba629ccc584fc9b0a9a1413c687bac47a00a98fa6467c9d6c1bad0f8f1a5e09cd1e0dce19620b4ccbb3ef28e3d95900a0bac0d92b815c0f174946baf3a8413904b770f5eda1d60e80967404b14ebfd70cc8b08d648514992d79eb6943884242b0e705dcc8e0c720f7b6353fa54479c82ccefb24f7ae50fc0d220da2f546cbb760313edb119b69546f97c5223656f1547f1223384b797b8834d61ff08f4067f7712a7e898e3e36f976bf8654faf2b0fc7246bb2fd6831ede330aa4ba88218193824767506545aa809b920b6049a45330b4e115743f37955e96343e996646b30c11fc6bd85d4e5e9a4cb3c6acd8e83281a555d4cddc238999cce74ff5a04c76d18ede0e89ccb4ada718994ac2ff3af96fd2397b6533b3560055a85b67dc8f47847740c1dd4a1522277dc6fa2b4318f27ba9e07c02ec83a532aedbd35861ab9f8569e9184b3bec569bfaa1774e3b0ec815bb0f48ff5d00d1a157065a5fd61df964b51b946c38a6b594fddd24b44d88d4ce740a84e30bb775cceccc52d6a042ff93077ca8b8c6e0c98315be94f60123c316735692368f040c15be725f6566d6ec90cf70d7a95d06fce6d0ea4a7bec4bfd7e279803623d930f3c6abcd27490367b0e8b9ca3c66195da409dc4a7ce758dfe860f335b0ecdd0f9717ff04e9c92ee154cba549f887b29ec10faf25f561346409ea8bcfb94864a45854ca14646056a35dbda3d1d78101facf866e7b3bb6c216e486299878c1d6b8db87f643bf95e37674c79bab01da703973770195756d68bd213fb5d616de9c13cbb76ada23f03d2241ef75209d1d662257e94fbbcc0f9020681a17d2bb271c7dceed0e20b7facd6f6b3f1976d4cf4b7e23e442346823a1085f2138d48d25bfbe8c30ca5fa43af9259bbf6ff5cd7a86157f71c14a7031033db15bfe23b75fed9daf8886dd11392a0b787660e7b1a581af1196b5430cc21d8704d052095f5e0fe4dcfd2ae4277dc9eaab6cd292a7d9a314845d0468665d59ae01891dccaea88b59bd989eba0d903c8adba9ae40d89d540b7ece9701a38a1e794f8d45b5cbc7cbc5fa60caa7ecfaedb3b136dd376b79fc5ea7f05656eed1d5b196e4b40cde4335ef3b5e97f5ec41422dd41a46bf89f503d3a9cb29ae6dbbe41e8097501911a233a12798ebea34efa5bfee5dd0225a9ad2332967f95348cfb488b3ad03238a6e2ca16618b0d0ed8b7d33a40865a605efcf45d2cdac8ba895adb7d72eb374712e88b8a1e6cced3e9e324fa021ec95b37d63d349042c9fb596377395234a52ef6baeae8008298a50af2cdc8ab34c358bcaf6a339145fd79659bb839593af062cac084baa88adee4b46d2a109c36fcfb660f17f48062f7a74679fb07e86cad84f79fd57c86d426356ec8e68c65b3caa5bc7ba2d1ee183d276464dc2f804830f805af59981c0cf2f9927c7f769829b10a385bb7564 +MD = 544a60df943c3e2b6380daa4205cb03c6a0231744cb5f58b4eb33c61 + +Len = 45232 +Msg = 2c652981bdabab40f5e792ff9b8f079634e8cf04d584c3123509803306355faf861fa80051c0027c79b12e35d836f51ea57c5f6f461f264a65ef6a9e46f4a64c58b0e3880aa32c82df154146c50f90e1a3ab60c6318d50700cb200480a690ec8ca9e44e1905e0f9a509833fb0921be2955fb3ad23dd727cb51d8a9f8f99a7d6d067331d28cf9950cf4c46d1a4d75683ce3f6565b130495a55debcc78bb91dc8131b61425a67aa51ff220556b3811776376241a295a1c81445873d38ef956144d76f054a085eb261d733454b873ffd1e6360cef03bb28d2f169f625035bef0b19fba8590cd253024c9e89d3c7a547600d4a363eb2de2f72f4b8fe2a9e8866ab2de8668b3034bb20f59ca6386177ef0a20da2a6dff6a3948956e124a2929c3dbd066b352d6542a685f9413ec4e9101b9661071e6af084f3c1cb3bbed6ae50c824b9d1516c4d9a8c2d4af5958569a84542812920f8d5f7736d0ae7f7b2b654b8ae6b4163fc36c3e169a15ffe3413b81c3ae0815526018bb1efb88e95c325087dae9d33e359bb5f24cfaed8df4d61bffee401b8316efda23dce3687ef8474fc95a9c241460145bce4c3c5f8cf5dee306bd267262c2034eb659d077c8b8340a18f247cc2029f607dafea895834d223a9f18a7373dc0641b7c7b0cdd4e02c0287c8a31f6eaf608601d4b86b4fa6467c9d0e70d8f9977daea7d2bdec1983fb252fd0aa3c8fb30130f9f191de779a27837a3129ea4004f2d63c2528d4b2fd8d32fa45ae56ada40dfbb6852b654896f1c2d2081a39ef9b0242d52d662a59a33eb6878633f050f8c340d81dc9923b1331a534e1c63a50d0289f135a1a5f461bac2a4810bf9c1237edaadf1a10e7d7a563b5035cc28dfc2ad225674999e630dd41f8cc83b5ac59d7d9842c0875d8a6b4047cddd773877a319b80516a8941725e8cbc754dcab3a05f03874f678cd710c5906714f06dc9335af12a523b5d13b31608ffe2ed43547e44180ed9c5ba75be50a3fe592625c5c02d5fadfa4a79bf5b9a331d95c0d3d15c0d73952ba17346f7fb9bcd0ae7100f991f4365ba0683b6d461979ffe86d0ecc241a2b4e5696b9d661d043dbac1d10926a758fc01fdff9cd5f2a3119d9deef9395721d877abf81b713b59dae934dd35116becdb729f41c3a8d3e1fce384727929d47d8a52d7ad33b1ed292f06be9925c1c39b8e7c78feede57bd0dc70c8ffff2c301255178aff689098de9493cd895db044d17f90098b5e1450fc1ac5da0bfdb8f08ca33614633cb5c506c630f0424f75761b494ddf7ba6bdf9c03243461af748ac58ff2f328d226a082e1e3eb5487d79bdf5561649545a2aecd9dd798ba16e63b9e3e36333b1bc45c8a1174d9b005a55b2ec3079f589db13908556e91933e582bfc9da92b6855cd18d2c4bce000e8861cb6c62f96290cbe08b6f59127d46df3e04876f1e298ca695cc1c163082c76a468df258150f1d8f2a44043e76366ecdfe4e88fb660b1c0beb1bfd212591df827c611aaa4d5964a74940c08194c2f0343bf46b0a1ae9c80f79e34bd71dcb9b537bfb41b412d02aa6d60840bceea18f947f7c8a359d342523aac884b2798e9f7fada3041ff611b4004910f16af4609181516d82f87d78a7daf612444dd9596049b9fede48777cb5362ae14ef6467eba6d2a4dd1bd3c35b4b80486e703adca626409654cc807af82dae3ffd5f9456a4eca9273f30e49e9f02d2e6cf97e77403a21248cbc0936f8c1411cd312ee7191e32c029653663703debd0c5b0808b6593c3383cbb8a68606e51b3df182407ba3fc03f31b9f5f7411d4e9f6c77f4cfb840d0dafa8df0a654862cbbfd1a099940f1dd4fc8a234491a27736a638ebb5b74f010220ba7bbf654bcec51af9fa448b41bd2187488bd010243a157335b9dd6a18dcc36f673b3ff67f8db9f7e0fbeb91da5e8c1c0d356c60259228e634862e848fe4d3e43579f6a95223fcaf1d21f978376647231ecc84021513c387bbbd13a702bd8637bbd48dee62261fd91508f88ef7891555139da186713387d031eb37421fcb8cc250c770463e0895ee4f2d6346792b68fa72356f6dc875e8484d8d03e635933a3c9acf2841345ff15741ebb45f6ac1a4bbb1302818996f5768651f03e3f2a930def058105ff370a4bc93d0860a1af06af166fa8627526477a8ff1db1fbc571e34207fee2f2d9ff32869b8832f7281c2e33fa00e41a8209ab929205887e3c81d40e38200aba76603d3def5f55a700b9610be0ffdc42b6d375bdb46311fbb66d759c1767e2175727f75b05e2589a335ca5e1c233c9605f366872dcb2c8e4c1796a541c331389dadb235655add6314e8a5f4e043955d3e9c6e65a817127c9ec4a04febd1e19929fee33c8750e390ca0a70fb92d9cec2df4f991ed392aa93ba563f7d470855ec204c59b19eaa00b9cd84749abb4cb06ceff42dda37a5be78a7b3b858ded157d88b815dbd30cffc86263ff6fae2040304767273c05ab614d66dc556073792ad0571843788c7279f9edc2241428f698f317db3b3f9c62f7653157260b2dab4201cda3d2f39ea1ab1aaf7149c9b4ae31b9c0a9e35ac0376aa97a5a41d8350a078c5cf948df92210f95180ff4e2d9cda71ec281b400297f5784b2842d6a020bd7da7567198eff571403c7ecaa01f0cb657cadc121d230c12aa17a334d431d272f76b7abc9944eda54e12f95dda9a23df96de306b1536ea3706a220625c5fef29adb8405dd81f9214eb7cfaa044c567bdf6cf2b0e6e64b7cb5695a6b4b951fe496837b23c9da96b27df22877b25c962b83e46d5e470d4fd3660973e123131873af090d74230090044f1ababd6c7cd9c3938ea37d365af43dfed51ef640e2412630d6ab755d868d9d5ebc06b9970fa9ca6aa6458c4931c1230c46bc1929654282e876d5b5edfee7f409308d1ac6978ea695d5b41a04344f190af8cbc8412e950022542ca468bc279efb22ce4f7fa6e0ee81978f84dbe4e6867745ce922c90b1347b0910cf3250d4f480fd3ac626a04908da56387b54963ff1edc854f5505e0f866f1012a4ff4f68ab574a632d60364f9bfcbc3f5be2fab3f1bafacf6030c9387c5ad3b2b4142a6b19ca74c7d390bb3d1e551404b52b64dafc7b57ce715284a48cdafe717b055454c67716e9575cb1c9e69008390582872d88ab59a29749e2dc4e6beacf78677fae37d9ab483708bc5eab2a034ccb8cb4140cd79b1c406b9668279a132d2aaededff46eac54e1493d63c28f9fb085ae8e371f6c767c1b5c01a0aec2122b0040247272a294afe472a781d33d27e4b26c67ff36f68642768fa74e5a90624997cfd30e4911eea9cf399d2143bf5689d04af3e4c9e2451fe07b0999a1618df96fa25cfbde3924e2fff290ea9a8285f06dce94806edc2d64f792bb4b19d1efcae66c44d3a884d1ebf531f5164e2340b8f96bdc4a8c30c9a21a8b0ebb3a5e222eaa820d1e3e9170155d7c6c6ce51e1163f1a73dabb87c8467c7b8a6627952afa50a88184416cb89ff77365926e5ef6251f5053b4c6a3bf8168daff4e95d7bf2ceb4f318edb7af7a1b00f43e0cc6f3de33520a577517eb9f4eead59cb85d2695fc0837716397c9daf8593a9d671ee7cf58b73b04ee5807e4715dcde0480eeef3bd92d9a44e4d8727080e7df9ce4417c06292fbd5f0911d521e650d7220d931b6a3d36e34163f83e8da8f32d5badd205bc153e14d24599872a67ef8b4cb529b391f4849a353e42c9ad05a0db3b5507dfbf5986fdd021805d0ba2a244abff18805b07010748fe20db79a0d43063634ad1b8fdf1c081262e1c6c9f52486773c94a6d7d9371a02af93b99807875fc5f02a44f0766a40cdb0c8ff465e5e1a799a2d9725e2422684a34b2b4ad75f32dd296202b81ccf299c8807d4cfc455493fa0cf410b29b60c6e73b087230b1ef1f43700df5720df35276f3ad1c6c58ec551d7065ef82e074e28875057d1016b4f93af73354e310ec5d6ccee80bbd08f0128a34f2b8d5dba6e5b54a707a558b89e43f935af1dbbd28e23277f6c1f83ba7f5cac26413b4743df7f622131408f7b508dbac497362fcee0a51589fe725db5a23648082a72693833fd465b4f13044818c95aac98380b585fc50d7ab254acf52c7e0d8161d3320bee6d67b1cb9d5593599f6f6a2c93ed036e1b75ee12271ffd407c731e61ce303371385cd1315ff1e195685f69ceca33549e10f540a87a1532b0ba0f2bc4d3f2436ef67c161adb77b74ecca137e95b8cd0623df21eefbe3b39efcf3855e584e6b02a206c0cd28045890824db5126b847eb4d0af2c55273e077402495194e419c1e553ea33202eef9db34197451e170f319d0f08df07b2ba37f64428be2899a60c252b998022697f3226512f296b4061cf070970a1cb455f2b6ceb1b34e021ff360b519d119b7ebcff31d99dcbc18f833e3be671db6b8836cc1e1ea71b86212c25dfed7e4c5318aeed1b016a92e8ac7c6881cd93f3ad224600530656dbe04433c3e929c29b12dd5ee22ef31de5a73e543320e65d525abc97b054cbafdcb72f1ef6702bf3659f75d3c7b0d43e2ec7ed1389625a57603afd32c56a943a87d28df5a8be1b9811c3891585eacf55d41163c2518d510985148e1e25db898042fb04bec019223a0946c12d022409eb3f4a456973eaf2fc2ab11663baefd40876f83c8326ca6860b4f0c42228a6ad87d63d3e0ed6c166b7b5da3e0a6af09a5a8c92df4bc21914927a883bfcdeb7e1b203b1f4bb645ad5c29055ae1a1f2406ffea91921f7c4d4e59c3d8cdc40ba0cdf32e6d0f7704fc66a621ea0d9bc0d53d7efabdff063cb0403bf7a6238199aa9bd2bd3a384b9ef141ead263049635496a5f23dece08ea880fc27ebbe43b6f1a70d719e0173d1b7f8f160a873a1166c8b32bccbba72d6e1ee676c1dfb9fa753b778baa27535861ef78b3301d58173b9c40695f1d307eb0baebde26d94ac79354d575d8d794a159892348aeee05ad9c0c3aa143cc140298a4468216733ea9b1acb51e0cb78422eb94b95debc2eadd715fc95ce090f9c10f2320eafa733ea9b78c3d0cac90c9e2005a617a4f60aeaea2de14209e3188c4fb80a19f38a2f1ce8d3c95c9222a0be97e2144284292fa2917d14478e57668124604f0283ac800201c04e6ddd44df3404f3289ee2c1e7654b88080e91d2841b3d6f4360d66ad12a74a2c58ce2cc128ee59d5595575cdc9396e32f1fdae0fbdb0959b9ad72618d06c00fb1226904d53fb8651dce485679ce01f30bf3b00f382106940450de1d3e17627ba3d6c6abb1c70bcf03923c5b4964fb4c3112b7b9c38db3c2a5e37fea4efcda5b2002921d12a54e5f8999a9b7c609016310f5688d2881af5a20edde7549f7a642884e41d5826afe8b223d27086a1ab2bc2e3438d5c1ad47cf07d8803ab9b844a67f025c617b789ad660052ad9b02a6ddc0b27af4039511b95cd2bfba708bf341b66d7584d886eb1c5c57a2b8832b8b1371a784238fa1d9942e360b746d16d0305c235abf613bdc1ddb514bfb06c362b51fe7e884c8e735f5add0f39968e522fea2395edf7b7d65982c16d4dceb7331aa109d2e7d750f2cc422c9ff912aa0f195d0d8094ceef48d7598cdc5c5fce202dc8cefdf7860c1c7e9d548b7c57bee45dc2e27e26e82495c9c659fa71dffb8dc32dd0582dc4fa40d4c0e76a49b227727bb034f71aeff24daf5dbb3004cbd9fc8944a089f110b6006d5157a4d7ce9e49e1a99773e722c2c106944325bbafe3dccea1a20bf7f5c9eba6d317d3ad196ddb3e136c8d223d20a05dee6433dcf8a3af31c9674698e090632faaca7f400f2096df8236ab42ab966c13d0b0f30f3283f4213062d25a6dc3f7565cc1f0273c511d448a8846ceda9e64d6ff9bdbb8ea2f4c3b5b2727b2f9bf28b97da0eec90d79cf0b70c3e83d66a35b05bf8766708be007debe16cf4910fc67d771d9b3bc1ef53ca2e99c1804cc3f9f2e85262bac9450c789edc431734006452ecdfef766dd7de69969535ebb67edb1c004da83e39febfbdb4ec1e6c80367312e0663125fb55e4d5d549c24d7e6182358a33717bc0b3c2531757257cde789cc53afc8ad1d5320d17d5fd8e2c0b3597456d4ae4f8c72abc42ad6582ceb48f8774e2e72201623503367cf9c413c5c1c15593db2a3db42c569360605aeb6b44db27bf6f203d0a286b3ab4848a8714cfa96be32d6ad2f181384d168ed8596c5d40e4bbdead0d35d1f02c64e708126025f692458acd40e4f10978b93921a21ea260b5bd7af0fa4bfa3813746b683b118c51cfa1387b0ef744711d30a7604de8dde0a1ae8d128bb469ebf7cb55cf8a8fcc622cdf809bc491411a426320bbe334d46bb0745d3a49d9e7b2e053f0678843add0b0e8aa55ea19b2a9f23aee5aeb6950a7ebf83391ba203b35d7f38358bc93f74463a2fed309f95dc9329d5866edee193c5922563f68f22f1be39355caafe871654ef6c43aa8980a200c74a507722df7d303db106bdbb8890c0d1bafe4e7abe5dc78cc43b5505e835687a71e64018db214ef09a73d99d812b25c74d9ceee421950ea0dc46988b38f14ab1e0ba6227611a6279564de2cbc92b2d8841bb14c17d56aaa9f8f81d8fff50281c2b4f45d50de32b3688f761ccad1b78934bdb58790e3d2c26cec23c8aa7ec7107960773b84df5f9969702cef6c9667786d060129170a2f395b2378e11cf20b612c58574378ddd6e37f4e292f09aa6aac1540beba13112918537ba7aabe19787ac4e5bbfe959f3e999473956308d6692d15b113c0ecc169663e3dd8acf6bab465274dcbf243ef40c18f259714d3e00c0456a129c509e2972b03b2356d2d9f672a3fd8b1a9eb93846557ad57c9d190fa38bf5a2750d43c5b708a1fe377cc8e3acff2d092abf354b18cd653fe0a6ab0dcd1372336eab4965b3cbbcf0d523950d45e2a7b997ec5fa6f3ff35eb460060659d8a8437e1911b942977e09d984deaddfdece23ebacc74d68859618a0510d5c1a54f9032668546eb689bb146f97226c0058c60eb3bd63154166a7c7eb67e778c64d12ab575ce37b5f1b5a39f8136c57e1d3fa8417370019a5ea0fb4bc2afd2206cbdb83387f27a8e75443c09c7e26342a5752cf3fa405223a1ab4273c21b52482d73cd2f25888bff33d5ef18262b7cc83edb636548bdcf8a8fd7f6793d47845e1781de2ac6f6f862edc9413d34687e7929b0e007e75ec63989b58bee8cbaf4cccb766f98f4d42c73d3bcb70b6b3fe4d026b4276e4e99d2bb2fd2872638fc002ea9aff60c3796a48cb62ec4e543084c579653ae0af6f57179d2ad5cc2ea7152fe42cd05f6f7b50d27e57e0f6d54581189f90de86068f82f0022a49146e9b149b6172c13dbbdc5b2cfe248db0607a5d0e1ef417af12d2867e88066a924ef4270d0a76bb44d023f220f4d1ddc41d58806f9b99cba4fbbfcc89d8c5228ef439b54e873fa4bad6d87f740864b77935665203c188e3aee8dfbad9996f584f88f226277fd566e8f48469f1e1e70218d02c3c9235c8481301b8b935740df41e33a7e15d9a41e71653ae185f2861a8e91533a4e3a261e01b70d4326711a6dd431ce150bb818a118c1bdef48684db90342d02f3bfae5c95105abb8b351742fd066d27da08dcb8ca91739c652d9e5ca241402292ee01c04e38eaf32e682fe93bae4b02e70b52d4fc6e8371d31e1decc6577519e7384495f3dd450681c800a47f85e0f9df8d8ce48e6c74e4a61faa93e4c0f4715c651fe36b45967cee1c337ab1d154942b5632f368d16e7e46f9ed5ae4c2e6b1583c39b3a0b803dbdb2e6f74badbcf5b312eeb0672e598c51b748d48aea6736243863b0c7980b4adb2c45d9980eb78d75add5f2794f21b438e5733662bb4c20b840bccf7dee4d279daa7a4f1ec49778f0e2a375db63e1f80056c86bb4133fc348593957bb72b85c8bb9fed84e63cf50bb6df1bb1c012cb03e9792f4fd96d4866ade63ea0ec9ef421bd73e05b +MD = a22e8281625e8323b48b03c599b6eff4fe3fd7c69e8bc88032670f4a + +Len = 46392 +Msg = 4149f41be1d265e668c536b85dde41d8812b6a64037177def3cd23e7f9976d49478b363bcc2b0be1aa5f4013eb5f3e5f6fd21d51293876f18c85728e3f0e27ba18a9259648104b50d387e0e944bfdf3c9ef9913c956e617dfeefedf685c959059eebe8b3be4bcd3aca853ec4d0c5cb76f5e8eeadaedee3873353b9a6318eaa30bf99a81a94a238a777a1832bf63baa155be65b2cdc4fa21912f90126ad26c24565fa8c5434de359fc223d7a721e72622ba3d00428788463a8328ebff5f594a4b7757bde804c76b2b935261bfb693e5a3f9330676175278f36e299fb8b1eeea4bddf8625e6e248352d2774afb1e058fa300119551f475e04bbb4546d90aaf494c7f25a43fd8bf241d67dab9e3c106cd27b71fd45a87b9254a53c108ead16210564526ab12ac5ef7923ac3d700075d473906a4ec1936e6eff81ce80c7470d0e67117429e5f51caa3bc347accd959d4a4e0d5ea05166ac3e85eff017bff4ec174a6ddc3a5af2fcbd1a03b46bff61d318c250c3745da8c19b683e4537c11d3fd62fc7fefea88ae2829483871d8e0bd3da90e93d4d7ec02b0016fb4273834674b577ce50f927536ab52bb1441411e9fc0a0a65209e1d43650722b55c5d7ef7274fb2df76ac8fb2f1af501b5ff1f382d821cf2311d8c1b8ec1b0beb17580ca5c41f7179e4ab2a4013eb92305f29db7cd4ac3fc195aff4874ca6430af7f5b4e8d77f342c0f578f714df4728eb64e022e9e13dcbf00663e34f35368a362a91026ee196b746b4437cd1c546184e9b1301e8103367a06adf7487c8cdd330c04a6f6546897d19cf3bbc9eb75ffb18e05cdd329d4dd90fce9c84844cd2138487ad1bdb6d749c1f8e873ee47e3ada307be33c2f5032282779c19aad88ec521ac8e390391ffd1d4239508a0ce27ebc7eb4d1a947f38b5cceb5773f6c46c499daca1356e524cf076917bd297cabd4aaead34ea9e24cff7eeec8e6fa284c02efacd766f3494490627c71f7a29ea1e3ab5c1f81c6682537946efb35534a634d5d783504f1cb47e936628f257dd98c54c7bce193874144daa936968dd238534dea262d14d8d5f4818c05b970439433ce06f262ac74d57191c22ee115005be4ab9e9e07bf2ece14016b4c37007b395ffa71e6e7f2168c7604e93e24f6641bde0f81c80b2c7d1e6f10dc1f50fcad2fd87f0f81bb90f4cf1ada254ea65787e108209c8c81844c2ccd57e6664e8c62de6607e9a925ac970424bc7f46b061ef132b87f6d3b0ee2462f67d910977da20aed13705476c6f85955d51fd0e8a3b261b0fec9783e1938c27b12be5f1140b7207e0b96d44d90048e88d42aa8e7c0fb45f7cf588865c9a0ce3c809eb046c4add515d352986b48768677c368bafce021f493a4dd0c2692c2cff01beaa2bc9bdebf40e523ff7452e6b78f1d6aa57c73ef13f109a7721507175e125f32a4f718c2358bbb9b97ed31bdb85b5ca0e6fb0ebb1abc885868a58906ef2fc4f7456ade00de52e129e02a8763ff591b9bfe0d130e8f428b504e4cab2a09a4d7b8f2ac5e132042e04f76d0a6820304a4bc69072361d82f9d3f919eefe9142e21e83b101b6191b8237cba64219059eab292a69db25d8bd02866e100c9dcb5081e159d5a9884b94f354229597b076a77bfbf3525424a20d0d7769b16cb6d62ef36c187c047e4ed5490305225355fbb381682932245b01dae04df5e456723842ff66c8905bc1ac484ceb7a35bc321d2a8619d5f394f37f8c45b1179111f97bf66f7872f8f678ec53c3b58cb61c6c637452b6ff7cec14a48b014bd9a0e67226b10a491d9c1dcc97607808408db92e56f9ade6adb574e5f73fdfc242f91d05c2da9782d16418e534d6318da0a2dc9e7c215f51e986738f0011a6bf5a85fedcd6dbdfca96382eea4b1db7ecb3ddcce460552fa0bad7333947671de92a2ad01cea1baaca7500a903659dd2cc8127d32987fbe77b2990fa0c55aa0ee9b9d1ddf08702bf2975a4cf5a09bd49d5136637957b7d4d893c991130b1433f6610636b7e34f8e8909f0ce914bfe8e6b07084414fc3412a73fddac0cce398780935c6c3ee7965eba7f9213e5c0f836f05a0673980e7b145e0743c4e097413837a32e42d69deb191158ec9185882f7ad7bacf9674f6f336879a8a5050eeb1b27600fa3f017ec44a28363edbd309fac68bb9b2012e5e43159e6a1fe2b04d0172b63d2ed561f2a87e6988276760dee0a686d75c68469ce12e1ce67300912ac71582c85a9a5a920e025fdf24a8b17f87a743843d20304b33ec8da0322e761059076632fbf26df57b82659bb534475446256c40c2cd8de1d1dd6b17cbb0d1866dc4db0d91621e75678b255e677e9505b2bd4bad8bc4b1e9317d3fbdae5c26054bda4b98a98dee9a586919979a0c1cfc33eb7c2af6aa3ed9e94866225874f61599b44294a2ca40ecd4c8bcc7fb5151b0601c6839a1e2a72c5fcb88c6688fc42fcdef6a621babd7d55306796fd9e2d5babdecba6a0c026d690b73121a5d2112cc6ee80d8182b6f5fc59cefa1fd4351b83b3c8cd2ca38e040872db9cae84cd6463d34aa69366503dca6f7e992868cc95a3d83d3b01f6ea0d933c6182f39de93b9eb163efe8451c11b7fa91e14a161dc68391a66e8a74aaec81beb15f79f708fac58fd024208d7f045d81a56cd55aad40ab86b0d216ab55136c7027aca23ea13480a52c0dacce0d98139b25965aa4ff76a41dd92037195d24bc0750d52cb3467b48b7b3e71d852c5f82bd9ee85a8388ead5cd8bc38c3d4792e8daa9734a137d31963e245ad3217fad235f7dfd5584de0fe91c4526568588e08b60bdf1badd99f9f18ed9c36e415c136e074f2fcc1773783690a1d35690b5900c4feafadf603126d34060db5f636614cb3b8f0a3eb9cd9646b10e54dcdd3223f3eedcd92849e75ac3f945ed26e60243d362ba071dfa50fca203f71589c9a30edac3f02735f901083bfff5834567d5031f135cc0fa47b21dd0eff8bfcde47cc31965c16f890c32b1b3eaec384b5742e4f6d3f3a24420457c4bfb9f9e19cc23e3385acd1c81e1d0e9c430b6769942d06c031afb359c22af9a8bbd384b0def3ce1c0197fb8c1188012d577d0b8cfa9020acc5efff562bd44eb088b7f411aac2c41490855beb71eb4bf6016c7994ef85c33ab265e6c285ea9f05b0cb11ab0a176742bcdeba8e472d3520c940772a7cf438927f7b3045d95334cebb79a32705da00cf0c0ae01c9a3807d33762cef6a7c5c8ddb498a4882ef955342f28712ca3f3d7e20871953e73f30936d438469f7ae0b843da230c338cc34a5f963f4463ed4a34a4397ba19cd9468272272ba6cefd2d53eb78862eeefb995a767728e474eac75f3d2691cbddd419bcaeb8a4b82a3795e0fe1628d25f8463cfa15b4a1906a3539fd45819dcaa6c54fd131009425c30fea6a33c71c2312e09ef0ac90dabc11ed43e91557d9daaaae08ec9b6c30d0bf052ee0373c9c50a027403d649d9614f6534829da723d38695a3b7f7323be1e0807700454298a293068a5230631604558059b420d57549e53686bfc60dd88583e7572493324622734434263ea02c5c7e752d1b4168d9c6709371f05dce01c39b2dd8a212ca3b0d52c45bc5288784316f4e960129e7b911cfb64d90e5fd2061d05be4c1ec92e02bda8de57817a1844bd3137eac00da7cf3a9a700e885239c28cc7762cb49129b43b1a6bc873374957250cacc65edca8a34a66c744066c7dde0348c390650d3d51f7f1ac63aa38a206d8e7d6874183e4b9c6f0f8fe0af714b51b39f53bb2a5cf785edeeedd9906b8b0536333921aabe27f2ac983b0f89a94e42efba9731fe35673ea22c17ab219d3f02f0f529b4cbd28600040d5f161cf84e7d90e4edb2f5e78f1247dc2ef97faaa52c63ca1f74a203d08c2078e33d8fe5b3c83f263d8437f9d6c88404190bd11a244a38ba04ab58d86d5fa8e0aecc0af9e5eca4876ff0ebf3a32a00aec0294073232617cdbe9f14dac541434eaa0bb7ba4cb1660f6c3e3a5e60fe64e10b9bf43f0c86a60c3698ff8f40fa99c9be42bcb250de2dc61ab64bc0740d57a6e2a814054633907e54e0418147515359d2b841695a3da3b562a047a4471f82042d9ac84e39f57b2b01be0138400f1906cfb66f66d0946ee32c43558f41fc8d03d4b73aa14d93101c2379673b95fc92d99b846d311cac365861e89e0bca6b1fabbf488f86ead7f658a35a9d12ace067d91f6a6452a44da41de7d7499f4a35e005d794f2857887d5e76aa9c845ef83400f43b07c51d23e5f39a8587fd429227a1802e589275f6c57d25fae135cc4adc381f09ddcb70d4910b48bb36830cffa92ec29817cf3074e222069b0a4e095259b390c7aad0cbc345f97772f2b3da485d38a35b1f472d9f5ded972f9a359c9b46e3f808f16d649c8f3e95615f183118be2f90cbd192a3b28340661cf394dc822e5993524409f1bcd75b20fade1897cd36a4198ed12a596b1cbae1e7b8e46fa37a751128153ee9a0b8cfa8a3f24d74e26116bbf89086b53564dd99044c9cbc7ba5d6ffeee764c2e4ae1caaf13e1f5f04c7f7e6bd82202d8e05f8fa17412659775aef9e3b2d1403f511c296671416cc80d5d82832389f48f16abd93852939ad22e43f9a8168d5235e9e42097a06cc240315380efb264c9dec2d9be3d2571f5e0aec3763562d20a78dae1b62ae98982bf7f087e97cddc072faa91479936d7fb29bdd77972dec7f170ecbcf30794c031acc0258763bc1938e9977a7b32cdeb361622270947d1958e86e61ddf16e93b5971bc51a03bc642e374523c62f131d52d0da75a2e9c8563692092ab83402f1f81753b35d307357f9138a08004beacbe68771218f059405a0ba8b60fe66bb0973220057927af4ffac99d4cee6a8284ce70bd2c0b58664ba2fb841bf11080b2c8f3dae1c4a51b5dd8130b1c2d9b23022ccc45bdd96dabee62c11e89f70a687edd4c0b99be5333a644f7eadae69f8b6e0104798d2a381070c3e6dcc8ccdb095cfcc51bf3103be07464fea24cc07fa01074a1c063a7bf7e1becf1289f168b4d934ee773b86265080d60af9b3b64424c2fae2a8109f70cdb35056a69d77e231b6dfa3979b05bd794ba61933d6e79f07615d6272645c327110738da0638abaa5a30284496a2a49b6dc38f30f1afa8920608152016e0b31606d9abc8698a4628f425028e3257e5b9797011111dc4992ee351939eb9a26ee3a4f386bcf995f6a6d094ada1b698c537a20910bb2b76f3cff738772877529d96d19cf23e1e21642ad6c55405882bec1fcfd5b3b8818d5e7a2904ea47b8bae735771d17d740f537bfeeff1d4012d80379e81d238e89d1843961ff1382e4a0f5ca7dbe1c0ec7da186a008c30dcbb69b24bd42987c8a90a0a13876f1b6163cd6e5ccbc7296c1c98af35f4b2b661eaa4a09f7d4108eb4bff9b11849d296c9d09fbf449806878a5f7a327b2bad7550953767ccaadce81d679dd393ed1662cfb1b4499df31ffbacbbf9d4823ecba427f3cdbeba3b40012b24078959e53f928e3cdf053752116baf6b744a12d8f88afb42878f2f0a0c624461c152d8c6a0be8bee5a82af399d6018fa84139b9ed682510def59c99b74941fcd55c07f15fc4f5f52c132741e16616fc5a3b19b04c832bfb28f9ee8742b1f03b32f42db37a4bd6ee6ada514741ef81a795db47f8f50149ddcc2cf2a08826ba6cfc86a7bc03c9131367a4b1ee0199cbf621c9cd7b3009071e9337afcdd3cf25f5fbb97bf2426535cbea1a4d1c688b7b53c5acb31f44c3ee2645c22df769d4bb3ff736b33f7f48c37dbde42fbabfee19254a2cffce7b58855daa747504935e04b2b8a4578a01994593a6a95fb14ee92dd479f2bb6f1bf0542c89f68ede999587b605ac6dbb118144746e11e3e75da540c818a6eeea6db2e4f9acef806bc3a0ccb4a8f6ffb9f7284788ddc6c546344ad968eff0a127b9c7bc2dd908549559a75b126729146efbb5d637ba6d0db51bff811ec876db0d47576531d9e91142a2d4bd3a0bedb5c1655179e9cfb1c11b59ecbf5269e3a4865e89656c7439bf5ce74d79925cece99a7c23b906e237eb62373a1b6a9bdd047a4785464571a167ca703a178421cbb8e189541df6bcaa9271fd111dcf260c04cf4b748f269ac80f7485c41f7724352a7ed40b2e2125b0bf30f3984ee9d21aab6eb07ec976b557c2426e131ad32bd0485aa57172f0e4f1798760f8352067ac023fbeca7b9c8bf5851c724e90ffff44195b44ae73c9c317c85e8e585bddac6d0f2abf812d02e44b62eadb9d0765683aa56af8e9b91588c7b49dc3e146866a02dc18f9ca680f88006094ef29096c2d5af5700b4aca3dfcab462c48bb8085691671efb5ceb22b3ebd8702f71a1d7c184b1053c3fa30a7e76b85f3650d9140714fd4993bb496becf2ae01d3a98ccfdefb6fefd692173bd11af7adb61ffff214a550ffcd3a5993004ee72cb02ca9c577b42c85444e619e6411e2bca86bb548ebbd12a02c5c945eaa3b246f595d817f3849875429e72ac894160a2a91a6617f18e6b2b9258472152741d62843cebc537d25f0daebdedb410d71ee761662bd1b189ca1c93d648b5d141d8d05e3f2b2d8c2c40997fea7eb7e2cc0000d8b2300936759704ef85f38ad0d08a986de6bfd75b5be3209f6d4d3f67e7adf7f8469d47e81979ec8dae7127b5eadcc09779cf4b0a28efaaf58e83d307f2ced4a8699b142f3f19db5598e914e9577652c63f851203580d40699548fc2ab30a9dcf6452f673ad1ed92f8d84dad5dfff55e18107b3acb6e4e8e3c9c34038f40a5c577fe9771c2c31ef03d36a00e04a20d2d0877db66f091dac4b741d2a997b75182702881f9284fa23b9b3c20e715f80d07b9910a4b3185f9489dc7d3fb510f4da273559753d7d207f3975b48df2e7c857caffe703dfac53a786490c09f57d2fa93f60810186df4c0b6b616a04caab9f70a5002c5e5d8da0ed2805f20fbf89cd8d57ca2b4bd37125ce38bf09fb6170ae21f4e6043a9483ef6e585756d97cfb778e57bc7ddc8dfc54d086d6bcfa1f019c749ff79921ec56e833ff8660f0959cd4b5277e9f3b1d4880193fefa98a6c2512718e7c139acdcd324303db3adb70348d09b058baf0e91d52b24952f832b0a3b81fa9bc9a2e9fb276a64e9e0922778b4992d892f6845b4372a28e47d27b53443586d9015463cacb5b65c617f84e1168b15988737a7eda8187f1f4165fecbdd032ae04916cc4b6e18a87558d2ce6a5946c65a9446f66cda139a76506c60d560f56a013b508d6ccbbaa14e24ad0729dd823bf214efcc59e6932cdc860306687c84a63efb551237223641554940a7a60fa7e6ddad64a21b4a2176b046dc480b6c5b5ff7ed96e3211df609195b4028756c22479ba278105771493870372abe24dcc407daa69878b12b845908cf2e220e7fabeeaab88c8f64f864c2bacba0c14b2a693e45aacc6b7db76bc1a2195cfce7b68f3c99440477ea4c1ea5ee78c109f4f1b553c76eb513dd6e16c383ce7f3187ad66c1d5c982724de8e16299c2fde0a8af22e8de56e50a56ac0fef1c52e76864c0ad1eeedd8907065b37892b3eca0ddcdf5c8e0917dec78fedd194ea4b380a059ccc9452e48a9eba2f8b7a4150b7ba17feac83c61604c3cfcfe6655c2be37ef0ae6fc29072f9b1cfb277b64a8d499dd079ad9aa3d5e9a7ccbec8c100596c6fac51e13a260d78d8cd9066edc558e2219cfcda1310dc1fbbdd36f348756855349f33eb6b82186a8c1a55f361305833edd3e4ac8d9b9cf99897c4e06c19ed10765fd0c8c7433851445c5f87b119ef913b2bcdbf7aa2ad19c672e53a9c6c3c309d549513edd7c1cf8a0a399e6df0939cc1fb146d6ad460e2ce05144c69eafa3822141d473fbe5927c58a50c1e842f8b8fad85540ce9f6d06f7b4dea045248b999d24c5fd4d75631caf73518cc08f73684e2a1cd4266235d90c08a0d0ce8784c776fd1b80978b83f0705ba8498744884d5496b791f2db3ffb5377175856b25a643803aa8b9e7f1055e089c1929cf0cbba7674c204c4590fb076968e918e0390d268eeef78c2aebcbf58a429f28212a2425c6ad8970b6a09cadddd8336d519bca4820556d2c4b8cd9f41216de3c728a0774edf47d3489cd29cf1b2a192bc53325d0bed7d23e51be7684297f9d0ecb14acbf648bc440c5fde997acc464fb +MD = 9b24db8c68a7186e5b84d3b185e2548db70af21a4203035dae430491 + +Len = 47552 +Msg = 18636f702f216b1b9302e59d82192f4e002f82d526c3f04cbd4f9b9f0bcd2535ed7a67d326da66bdf7fc821ef0fff1a905d56c81e4472856863908d104301133ad111e39552cd542ef78d9b35f20419b893f4a93aee848e9f86ae3fd53d27fea7fb1fc69631fa0f3a5ff51267785086ab4f682d42baf394b3b6992e9a0bb58a38ce0692df9bbaf183e18523ee1352c5fad817e0c04a3e1c476be7f5e92f482a6fb29cd4bbf09eaf9e54c44c2453897c29d68a403e0cd299ed1f21023d184e73bf511908c5c103addc022907b4a972fdbab345e806833f91f758caf0206736eaaa2221ab879d8850ef7229c319959def1006c134d44df3a918a14c3c1d9cafe3a29e3d497bd6ab5d2b3d4d1abda868b4ec3982a301bd9d23a3713b429f1908135b3dc24f0d1cdb0721cc197b3b4271e381d410df29527ab63a510e902f7cddee16796738d5c0960355970570fcf437ef836ee235b5bd3ac53fc93cc149289fd876e982a340727ab6593697788d4e295d63527d43215e5bc546324c4266bcdc66eef6aafae7a2e7b48f13561e66b0c4a19427488416b63c5ac024c390229a021e013956cc35c26b7289c5b7bf13bca850b875ea74e0357aea40292936e750bf62302a0c73a5618474bbb632f71ed232ef2296c992288c85f848b7f3b33f7152d80e3132add0f0b13fa77d6e42d28202e175327c785a0bfbf94c49a971956c6ae3fde77fc723007027cf83b01ee95c86bc22b15973ef343b81cd66b10e73b2661a81d53a5c26014fe1b651af07cdc23ce3bd9c072172a5c3163e97a0f674d3e2e03c52f8d95483bef1de6fc189fa4393fc986b0c1d6ed1213b22350fa5f3515fe9701931cb38f83bbcba567e11f9513a7b55a6bea44e36e4451af743a989ab3b7adf708bae3def54b6dc7e6b3c358b8ec487c7b5729b577ad88b36e38da2521438dcf15cfeedd97874b77fef6549530f8c715686e4d0b36369f58c75bec7e66887fb243c39d337357acdb39129bf384b17d4cb899778bb1c8ddc5060a984c8a70cbc819feb68991a4da1b1e705d1bbb01b14af53f71e0f2498b23b3afa43796e2b8381fe80186f7541b60357665b5ddcfaa36a6c701b001a3f19956b1d9e991c58f2bdde948d3af51b8d2078d7a68f302b139549bf0a4e4bc57507878ff07830399c8dc6a5117c181f9981b1d63dc03840e7b86220563a57e056fa06cde3c75831b38a3d1e5fb33ce25dbf98fe9ba183c0923c4c40a964ccf421f57f53d2d6d2d60a2ba88cc270f1f86c22a49d4aa3712ea5a97e9c5e4df995888247be68576e9af2faaf5ce425d5b627635b5ec536aeef84785f900f668c38dd18f669fea959f4f06fa82b3f4236c021ea23af85eb8b87c13185c8173ee352a23201e3105d4378951329642e76b39aee3fa3fc2722a58bee5d87b11047ad776a5600b647d3a99a535db9844c03caaadedc42e1038c6b706e64cbc77511391bb80d695fffacfaeebdc7cf2822a9fa74963886eab5896bb9c3dfc887d01c14b3fdb0b25cc269c5ca26e9d0bc1cb9a18c86dcf675b79a24dc7147048e9bc8ced4cdf852191a6a88c1412c64bcc4b38e573351f81e743f056d1903162842c7d5f28b3cef31725fc2787f1801a6a537ef792e0032419608bbc00dbc64016f79b891b816e0126499e13443352e0628b76346d9900b8b77578699d1db74867c5ef536f6eebb586ba983a93ffc5057d9a27854b86a0a58a2dc043ef7d8de43e3f7fa66aa4cf76fe21f282bb7d60f1832999d276cf6a535a2d6c344024cf7b640c5568564ba1ab5726b2d506d7ab0d3cdfd504349de62bef208423d63a0574a2d57983798aeabe5970e21aba322ebf6f65e201ce189d9310ac0ef7fbe6b739be42f1dd1c8a3116cca8893920b97270e662c8b38c6716f48779149af4506e3180fac7608673fe1b7875b0198091fe89677f9001b5b3d9b71a309df30ca1b1c4b2a603f3016cda3525805ea422e55a70bb6441d293236f429279b2ea8a01095a1aedab7dd39d4bcc9a719bc14ddb0f8faab8e3106ce05fffb6fb5a67b597fd5b8278c9e8452fdb48a0ef6f584b9ba44dfb237fa289113154505f9d52d78c152fb0ef641b9f4a1211ffa2e352624ea111784f1b7032df6eab264c83933607d93f6cf885fe2915778f7f33fe95db1c8f45e7e1c262ae729d6b026b15131a31d2f1803e33792bb9922be74ac90afe2cf4501184796047f146fcaa645ab8cd3287aeb2677674ec5eeb4b018e4a9912a75b9abede4a524384f2c6e6de5a6b963180dfcc1c56d7b52a0b5993a88b2b61b4498bb5973c20eb55273180821e15bc5646ea9404dc8ace4879bb663f94a6317c488bc05857b2878970a53ef7ad9c88cb6039d3c80f757fdebddb42fc6bf4cb27df02a5c9a4f05f4b528aeae510ea42b55632500ff8811015601fef871afb77dc97582d912ac3bac157484af64de5323fb13fd5829d94c814e9f13487a9a57cc3f6f52058f211e213064727d06e779f8ef8c728c90897f004e0b8daa51ed82405864146c802c41d6ae7ef481b7a87d3cdb332128b4173d00ccddbaa88837eb5cacfa5678764c2b4ee83a977807afc14226be75b704e0eb05539c469d8df7e783958874a3d20f5efc661db7aa675c0abb5a650cb223952d806acdae23f3bc0b57ba950b8933c43151b0aef1a3773bae0afefd42a460a268f48ac85dc639e2cb4b74a697930c2967014044b1fd87dd2fa38cbdb3f87c7711f43c32d1eec10aabc16c43855beb9d546dad959513399f04377c4cdd38a7a1dce1e783a71839a2216c09d2714e22ae8e094107f78f0d2fc01956113aefa2a11e50253149dd0427c0bdc609d7d461cb6866b32275bb72dde7dba2a13987de035ab16dd246a7a12a0e1939202599297297f87c6b8c32eb47fff0ca83659bba3716a839dd0a02a1276e00cbdbd706ea428150f549a78006ec5ceb662e4b85e7bad68701c81068749e7527068388a80499c8e2b653442d3639934dee1867f0b70d1ef06e0a0653abfd97de61cda6f73906b330580f0e9509ce477adab82746c8bc5456c739385ea7c35ab97600be6ed817e4cc22d35341e208ce04a4a426029d371b2cb5dc42e4089e422aabc33b99623bd218df46cece5f77bb7dd462c0aea51be804b249928e3edcd2a48b8baae187e10f98c5efbd94f2a97449025aa3c560b92f513527c3a7db0d70d99dd098e189a601ee7f24bc302c0cace897123bc150bd75b4c6ed42eb3dbec11c4b28620418093d6c738c472a6c1fa9ff0b1ff53d05973f81d0109ca2f74f380f2c09a2e3837936a54b9ceaee43611fdee6ea5c92ffb5015af9283d79986d3a04a8dad7ea8c74622b5fcd23e6426f631ab2f7fe6d9fb54f92aa9a91c981676baf5a328da37399645138a36ebcd9991834e7cf472776069eeb5cfe563d52ec3151a8a71088d946a1d95e9647dc797ca3affdd6c34b033763a788a9e72f8d5a2fbe2c8f2d053e0a9f064a3c2bcfc2989a0e8db4ff52d7b62269c653d12a814fbb275e712fc31253d07a740ba6f1156b6fb2efd067d954017fa49e5280b8df2b683fa6f3852ce6c0daa8746b360b1273994fcccf794918b7cfea694c8255077bcb699e6ce9cd3bc01202c3f155582a2fab378cf8b02c963797adcf9852899abf3937cd63ba0e71e01b3bdb247172cd1e2a0ca8e2a8ee4d0f6b5129cc8db0f974462c8c6e727b399f5a96228b36e58bcd7a21b913d028bdadbf87106f7075b42976aa83f3af8df35c54b4528c021ae6ac20293612a24658a108b21be7c7425b4d5f442c89cdd12fa5ae18b3ad6fad5e38c0959855bbd1be77eb6494cbdea14f6e448bee9759cf4f19ab35fe65dbf762f1bfc9685369454f90bc112392431d00faeae452a2dfe2e216e08e7b5bd393857592671ea2573b9c9a0f3a30c171002071a6eff142ccb6893be2a4b2e5f30c4622dce133a8f20f15e2695254d005152e70fcf132edacb494d735fb4daa96cc1587e3ba300dc64a5c183efbf8546ba67b6771aa900a0c57a5973f04a3f04b4d84136b64ac173077df8a1499a3b5114ea7c3998eb13e483a3bfa82534e7d9d1b1263c873007bed1200d66ebddf7892682413d8effee0fcb6b85f9459b5a8e8cf30e78f67c59248a3707bc1cb14156bad80e6b470d1a8a667ab54d9aa61e8dab4602d24b57400df969ef8a263ea2209693eaab0a3e1dbc1c79568e6a7ebd3cf6540932cde843e1e75fccb84faba14f835cdee51eb9810cb41071a3fe4abf0537c22b80c558ea091cc1a62de021c74b49dbf101cca7cde4f8e60d749e33aa4f343b70a47bcebdeb603686d320c79a7cb0b72be75c308aabaea432e991610881b665e186377345f07b66739159c6a44b8099947f167b3fc89ff1e8ea21fb600585e8850f416e098034fa754fd1456d1e802835b241b174a59376385f94293b42696d6525e0e89104549a94f5d26d7b5e790d156627f9b2a952db2930331520a02a9c87b15e0966e2a4edd96ca265587434ef3c840e7c7f3ca3c7c44546e497878f1cf59c01f80f84e99c4b9a89568cc67677b3f53f6266c64fe2108615c1285f6296b7cc12de1450ee4ef268d1689dbe0a4d819f02d2ecaf1fd515dce7d25c9069b1d32bd8e2feb07aacd7bec0c215c3b718ae6c9ff49b60d848db2d063fba826d1653a09d2d540b545e0185a08d7c3c448043435df1fa3f45e26b63b831cb9e356c3e12a7e69ec9450b78a3b7f058937a2f470b85f191b52d4ccc6446d0154a8b5c9d6b40366551155b45024e14332f21cac2ae5f1be92b572e061af84322ef358e7792ae452f0d8cf86f88ac21947801fcbd13339889078c2e226b15b37af6fca9d46f393a87647187fe1f1b3e04d6e16a3e224990f9b294f72741e747a3c5a856bdea2b3ef2be8eb3fbaee1930ab18abf50c3e82ac295372f1d83b42827c6013c38ebca78fa83a9216d1d47492e71c5a1f8de5a8e6b173d7f0c19c57d8e60ce04505a6011261c8b7c5c549588f87e58b9405be5e57c9f6d8efdea626f5efad9550a1f3330feeffc6ad13a1377f1410bae2f22d2577e979005f7e0d22621fee8d870228bfe0b65c493d2b9093fa020a828cd1c690bf8666e8b03e25fc95ed3c434894cb2a3d4e7aaa16ab8be078d84f5d1232ff12a7274cfc928d94f809ee135125d83ef46e2db77399e207bf841d6bc4e3844b4db74297b666eabeb756890031af5b0890fbbaaf30578d7883a437cc34a1544f84787ed390bdd417bcd4448f5f358bcc927e9bde6adffc62df41be0d36bc01506953228d3607e8347b3ba71d4468e8df7b6f47b18d93bd5b24f5268b35943a126eefe420f0c5859964d537368baa00d5be3624b513035ed5e726f7e2dbda6ce9f7a72a3b6b873acb2c396b679f895223cd7bd97585af4f47a85fa89073fef86bb6016b3900bd862e13e0ca3cfa775b6e4ba8cc6f60080d44eb27cf10a8628b0c0c972db64ae8e656ce63ba0317049b099b35840f3cae273221f7c1dfe3b5834f7dc0f81fc489d9b9be2ad1669fb18f8a4eaa86c175f21bb3ef48277ab0588faa8c2740f1e820eeeb55bea6e3defea764d8804b429684592e95a1666d88dbfe91ba229eb9304e8450478780e76f5c712dbb5f47ff38c57e26d79c1524f7b05eb97a5b77f22753387ce62e160dcb4b8b4989801363b745e9210780aa3d67662e766f3a531957ef89e5c40adca36d5c444ca5ab23fcac7628a1b7f7ac23626dfc6ceb37b6bb3c63e71f63b62b64efff4aaba229003682e6cb2d6b897153734836e180ec29443f60de8e37b8a8beadb4fceb01922eadc5182f28849ec05a04857c88b2b01130eb56deb6d27acb1d310dd98f367f05df0d7af327a5afefb3b0961bc7133c052dcac6762da675190d147a6f1cd3382c26a69f85af514575dce20ab33104d87b87482023573650090ab28b3bf84a5618213ae67523f9e7e9422343d13b2a2dfada0e0474d804641192b5a0bec61e71406b34f0302a021fb09ffee1d469d594f99266e3c9049359c931786b65eac1e23b512f3d45262c557232cf655b2199b60e5cfd3ebe715589a663853bdffad7517f6f743e32bccb1194973f3ed41709098f763b85c3a2ed7c2fa566a27b5ac1276332ce63773250ec9e59a8eebdae85f8238aac49672dadb9db73972fc6af01dcbd37785d814b603ef5e6a6e5964cb31a3106ca0a175628cb106a8144405c2bf9b3ea1c8cff4c7b9141cab3b3ec95f2d85e870f3852d0e11894d6cf8086e6a1f70db725623fd9f58bf87259fa3f0ed7caf267f664a812593aaf54dc5508d3067d114b1d8dc15880779079f408fc1bc45a93461a1f958f1399e671324224a5bbc475028f50326c8eec904e3c60a2416b1fc78de4b9a9cb82cec0a86bc888d354859f89d569f17a83637e6b7da1d0141e82f5cbd0c3334c3931c456e36893e04338f72d9a3b8d070074b15e424ce408611ca46c88ece085a97b68292392d4511a57127a483573968888ef9324b27c92d5455a0c5767200c4604328bb6e7d8aa4c5887fc59e823ad8e287fa68f830847eda59d17d6f28044b154b9fb17c80f505bb5be3069d44bb073cbf8150d2f05ac1cb5e41b81ff7fc35de544e3c0d3f6f7bb072b92d28a2a43ebfbcf4b0826f313d4fea583e2ee7d0cbe4e89f24c6c0de4fcc566a03e6a6ddc59308bd51afb5f33b8c877ed6450068554f8ef930510d2cca368e5f5080574ee4df2b42fb02cb8603adbc1b4a0c4bac1b47cfc42a562e3f3117a2ffdc9dbde0e3cbabed7522b8d4ddd81197602acf8564f33169d87c2901cf961bb16ee6e1790981122589b984c311360f5ae14894d97a7b3e4e026c0858ebdc80dfd003ca029f26e751fd6c383de6ee3dcc940da392a3087edc72ced32ecc1059f0c89b8064ede5b3db9ae5da29a52824564322039628c2787bef49906abb5b2f4c1f560c853be4fd2a28cc756e970e4a5eb42ebccf51d0b494408549f400e5885b9dde754fd14b4da66fc80ef601c5394eb0dad723655aba8d2e2b05b4e3d5ef8409d8c3a9f6432bb73682afa82e78798cffce5b7cae8a13d081e3cd92ac53e9322cefff7af4f420c547a25f6c654d908269b150c1728646c30154a876a28900cacfc930ac1185b33868cf272aed6c0896b62bbfdafa76dbd075279e480e9dbbb5b80e5e26961e6d7862b10dca0ffe6932ade6afae8e835a5ea703b7f038b7a25bb06791d0cbe9d5edfdf11c35132b39bd1887282775d54cd45d91fc5668003e247e7cd292f70b730000375951411a029fbdb9322cf993399c60797462e69f1679ecf4285463afcf17352ace07e0f44b3f6422d6a660e5a71d786227fdf9bdb3c0c0779cfe58fb729c627382403ae09d07d76a1b7bf3f420bf6cf41e0deb829b63c3af35781c17e3f550ba7de295077f5edd3a0a94fae82bea06d8607b021558c8bd41fbaaf72caa8cc7a6c8d63a9179ac3d3aa9d9bde951060cb6f530879f725976d8f67d336250c78fdf6a0571a5135ac0110232831d187b4735e613c1476f7cb51a2fd717e05c106f0e6b56826bd6ce2e671d8896af0bb27ffe3a0bfa36d99b44afada2eacf56ce30dbd4b0b40c49714fe600c13cc5af117cb9f9027893371de94078c4f556c6689aedacfd50b0f5abea34b5c7be888e01050d2cdf8587126a6d759927809e354875edfb249e7e60e5c9f94480641f2febe4a2da8a673af1ea97f517b1d2cf2bd58982c90de69f1485b2deb3d675b21a35df210bea66d35c053169fa4c35102e779e551fa0703b99f56e8a0cb03b6bd849bf32c7e9cc7bdb2301784bdfef89c8967b0d04c58379759bc5a757f5fc70f08d4b7c176edf59f7acd1cb11514963809ae9538164698132e17eda9a8f01e9ea6b4da80262e99637086709548c8bc6deecb0cf9d65687c572e63cddf6592ff4f4a8b5d91ab3059249f8bdb1c77fdd96bf2982860b0c9926de93a282d5ff6d9a591cf44cb32fdcb44d907e972fae7c5ae156907d22dd4eafb7ccc928d6577a177aadf05b8df9713221fa2da5dfd90b130bdea13fcc5d0ad894ee1b4055f5b7c4afc8347609b485b43d72357e66841c67753e4f5e55e0702a0c74136a035eb94a8ef85b2cc4c56c8316b53071423422c0d3d1f5495e1bf12c74fb3bf63d06f1118ebacef03db0a847341fa93ef17db0a7ae563d915374104864e00f758162f1b2358bfa60d31acb791c3e0a27f2a548844b1782c6c46d501652cf08886f072d84f9e877ef33484881357ccddcd45f4d0f50b25f4a2f8c231ed514b17f54682732725cc20bcced920826787ebe0510407145a33d9c03452bba526d94fae01a5123056553470e6f5a7665ada76c034cc582a066b85cde1cbc8151162d5b80724def497ec6118641e4445988a2376d894 +MD = 8b8e3cf46628fafcdcca35a4a3aa9aceeef95f8eed0d14b9e801ef54 + +Len = 48712 +Msg = 2263564c2fa39ca3e87a55055e813f846cfc241347180cea5571b12b43d733c552520d98f16348db918deebbb514c24548052e8634767df1300f4a01d9ca381f05f6e4c5548218e40878428316c824a97c47cc7ed6f7c7ad2c89920c0f20517fe458c31a7f877685f44337a5a924cd78b0cae741542252e6f2e66f960b63e5ae967f93de9bfac988fdf4b76898b0257a8b976518d78086632a2ecbe5f51a5b75c4733a5acf6478b3cc95a91608f49577b6b5304b8797ccee7b6a8d42f6ce1d9a163da2d6444cedcf092df4f523798336d92c2e228bf28a4d8da19df5360692e533e4b199213a8fa35cc5824e11c658809b0549e50c16294909dbe346dc4a2220c47051ed8fb6c6f96b643a68fa637d1da44767db318d12aa9720467d1022351170ea6918b649fa97e112048d05d958d59dfa724d23deac38de79b1e1fc173382e059e163bd7a934664d7c8035aaf53702e27518309915ebb87ed09bbc5b08539bcc5a116cdd2f9ce9cbc6e13226dd5b5fed5ecc50c2e92fa39853753967691feab3790790dd895f733c8df05859c456db60c2b5b543eafbe9d4823f195f0c09b55b598d4a614cd89ce040121aac30d60fdd4f68c08491dcf5b3eb5ddeaa67ad6634aa06ebf0e0a4b1876bdafba6a94567c3635a251d543f51a6fd65ebe2028797dfb9190814fb506b628fcf6dc194217db39d0e3566c8bf882e46cbe39e7304a4ad25182145e34825322a43f39597f6ac1e6af9840955c9f3ca460438282fc1273d6c98c9fc3f187956a9ed2f8b1b319d643bb0836d91eb3f0b79b36c279f2989f0fe1f64a0752dd240ad3f743aa46eac35bda7d61be3afd452604df20557ca6778682073fb1c14ba90a2af63fcaa1a63033f53de8ce1642e4f88285c59c0102a3429208a349a59bcc708a16169c2a15c4d5f591f4911b4d7535ff71d8d9e975ca4bfa41a15766933446dda0f0a54afe2848c0c1ad8eb1e59fe562ec82919bc794aaa3fa5e646cfc8a940adcf46f692a049440153a4d41d10a11933ceb4e81c0ab66747b05f71e9d7560f9124b81f062ffc25bd5c45631da5fc179a93a970228b487540bbc99e6409eb4928a1c63456cc1d8fb487232ebc846fbfe7d98f586c65a162df4abd12babac97bd8b909ed210f3e107b76d68d56366c909fe2cef7563421ae67cfc2756a74812625fcfb9fe183de2676adc805972683283761f0d38c7179b67ecd423cdfc1a2b694c003c304a46e503a9e802debff33f522b98d735ba7fa2988c5e4ef972c9ecba9b4cafd270b7f1c3bcb977cc10b0f65f66c0d6d504223561a3bf2f42d1fe5d3d94da9b4b50370f8fea76678a2e4761926ebe91806caa5faa7b224f11e06085db7ed38803b36f464f7d485882e15f88d38dbb909fbcbc255b5aad34cc68986c7aa35efc6260069eebbb56d41bf0a0710b09df5c98ba03915c898868dd314d1a0349a481d021a51f4bedc962bd25b426202b517cd52f24aa9550dc73aa0328985fb9cc9eb5bcf4d2575ac88bd04640affc3b3a78bce2ca78eef6d1db9da6d1ed743bffdc79fa9abef84c7cd5bc1cef128581c1d9b79d9b0450c58e2a1ce1ef212c1665c184a340eb14090ccaea6f6659a5440f262d263f55a1033ce7917e2a3d6e9425d73e7f8d6294daa1f2c007508c43ce4be786465f73cbf9029b63432c4721fb68a610552a2a610763d4a7ab53b147659ea529c5a367b4ef09cdfaf99a4a2f9455b560efbe4b61d879f8082517d2985230e6806bb238462c7805be681f4b7fa7158c9713f2ce7e950ce6493b45f620dd2835f20035ee67fa78cc17576154f97ccfb31e8a6eba9f854327d4b68526c64daf17e74bd392019f31a86d8f086c855aacb35b1cd917acf147420f5d7e6972ecec16c715352bfb64ca2428d9bd9c0b8bd412b890dcee8c213fbf64fad9c70c0008b9fb2602c13d916cc5b0fb28eb73556e5b9cb01e46295d54273a533d487dd22a88e946e35daf6e3e156dbdf061a501a2136f4248276aedae00f83253f5abaa7b0cfa3d80053943699bc8e9bd068ad69ac4980f0199371874d5085dc3d57fd023cc96d280c4c35714df274539e3081e7bf581dff2a57828cf2bd19c34f0e18b495126cf8c9f35f3686af39b0aff081f702f917ac2521563e68cbbb94f4fba24152110fa4ba0775f8dc395b1d86273239ef930a71aa9f712e27f2e7abbf9f0e3b0c6be1b66ce71e3aa72734f4c152f7030dbc630a2b0047cea8d92a920f66d1042c896fc84310cc7e700f73f0d1f264e4c5dbbdb017125eb273c4f0c284f17f3f2ad02644ed22e526df48848c4883e071b087871e0f443a5c017cd6c790bd8d4e9ff691a6bb8c0cd64d68d31195961e2c46363b9e63f44f3dea37590bb3297fa4f4533e784ebab80f42f70c3b39976266ff7e57dbc5c121da96aad4297cd3cae4b08c7934174d5b3438598c63b50651c464a67830953936b48f3de48b4e3ae3805cf8fe6495a28ae7c636d025886160c6ee64f94762ab125e4c6716bbc7cd7e0a622f2a845a58bb8c54e573eb344703d12530678abeb5292a46ccc7354a09eee568958a0dc5ee51b46d0be44f4915df95817f5f74f9e60fbb16c59282658eba93c8d2997b78c201d29700adac276c58668bc83d90a49c2a8324e7f52daaba65a81b5ce557e37230793b7a3c9c5fa8e2d6bca17e586f660e1509ba5b818a2b8494c8aada2d867d621ae2bf2d8a625a13689c71be468ac22ee33da3523874407bec6932f466d2521b2a2565dd10dffe6e9e93df69f5b74f0160293965bcf997c011758bc08e678ec0497c04d7aa191458eb4b310db0555b2a3e64e302899a9ff596661bdb1eb691f5db4ef2b9d0be2a76c11b2d1630e5750db06946b528d7d7910db37980923ffa206216d5d00f3faf2cc29c1a1fe1f82b2078becafa0521cd06ca061b7d837425d4707c24d6cffe210f62468e873e0dfc16e9cdf64db918eeeb6da6780e6ce3a39678e7461a8daa1e732292f0e8bf875635a62f4f2cbf1dcb935b4d25dfb91f01cb0dd0d037e2a3f61c8609f7b0e104c811104b3c1381b0d1b335428b5de286bf0681d159ab498c565fff23f97c4cf6d04dcaba439eab629fbf6e2f4f0583ab39bd875128e13cb3ada210797cb74dedfd2037f50c3a86b3940c787bb75316fd107480e8e46636ca6aa74c6307de8e4aad5cea73ec53ce243d4ee6a07ae3171cc1aff0f102c6c2212bc41589117e68ad7f3854cf6a96cc2529eb3b55f021fe5acbe47a121a7f59685f8cfe542ff37786d166f9501d501b36b865e8d4cd9c5767ada66ec481fc86f07466894cc9fa3557425d5abe6b3c35f9874361c559ce9ca3d55a5170dfcab56a08e528db65df1c9f508ffb52da9796be050848a02b15489fd194c4bf8a767f359b8d6f988a3eb7ef6a735dc5f21ed824c0290ffdb81ce5cc20da3af9286c4ed39ac3c00cbd8571982eabf480382e54ae273a2a269741feb9519f26c620289ed4853ccc90663fe459eb9e420a1342a6bac89029b33f30edd7d2580a9f084809a8f93ce7dc1aea8a854fcee8dc19f848eb22df813c16464da8319968fc5726f9d1555894385201ceaab9b23b6ec2bba5bfb48cb329c30e98caedd7c4668351f9de3824644d82124b4ac7eccc4a94096798fc0c41f4bc06598065a7af561365843ff004da7451986ae5d8d30de8146de91767f2b03567ba0a99376d8c439dce13773b9e69551700b7fc8b1992dfba55b4ab86b480546c861655e1adddc778e842047935936868f7bcff5d04dd89fc5d54d5e6e624ea21172746e2fd265a3b607a68178edb16bdc9e48ead39508f50e1441706fc205f2bd997fcb9bff8646bb33722b4feb2f88c03c90b1a3b9e586e9dfcff455b153bf349f2e7e48ac68e705d02c4c009bd766a41c4f52260196d9bcff9ff40a75608fdd4c288e1c21330efca67ced7245d28cee072ed346b54476f03d5877755653ed2267160301a50e43087c08158f31478208c5d43eea1c16e6ee5fa2867e9e545e6aba9fe6de82210f911c7bcc3ea75fd1581eeb9afa7f35b01d2d27280d938d6c1e0b6c3e9afe95f9ff4c7b1a67ee420048da18f05d26c85ce4718c650a7f239ea42324131f62928abad5b008f24f17973ec00547fd59f873adf17c455da8417c65ca706d54f63f482a7fc49dc812061fa4995aa7c160ed7cdf769dd1ef570d8fc9c7f8552101c5bdb7115ce2cf7f391fe12dbe199182ceffe1c89710a6d3af5e39e463d26ecd4c71ca5523ddf0ddd51f5d44daa35509c3841daf130b6b6650721be75aed23a0fbebc911be98147605a780a65650f53bf694faf3b9c827561851d89984ad29c3fab31e0ed81b2190ef40b21ad9255a618cb6e05b3051c0ec2e85d9c28a1a667e72512f14176c0174bb715b6a0b2c6ac2b07337b121ae2070bb96852a133cc3188b4d66eb23959a6a92c3e35c966c0ea8885268bb33e52d2ae60a4398c81c28db6c302a5aa59ed6b99cbdb2b91fed2f593cdbd9420f00d161d86b7dd650c17e0d3e82e22a458d9bab00e7304851b8b31ef596f30d5c06f25fb8409aaa5533abf728c9f823aa6cd386e7c9c6d3d1d4843fdb0c1ee6c3007a6aaf1202dd7c7b99e1538fd30d7d42659378ecda204a49880415c4c393ecf550cbe5681c376fa02e12e65bdbb06518391adcd7d6f96220a9b5cc4648dd7eed5cca81ca527fd6aa54d40ab678d40bf537633a122024c160cd99271b178c22f186aeacc00b7f58a2f26de727124016e147b5bb2622691011def94fca96687f07b6c18dd3b0fd9e8ff026a43611bd2fe5515a879a4292f73bc31d6bdb2f383e3ad4494d8aa7c2507935476a6bdd13fe073d98c5f6ea651de7644da4d749c6068fc88f136e59961568ab18604fde0a2a51f3b89dc381ac2b1da9d122454bd880107adb08062e40956539e1af697d695ccb5b0138876f2dc8e37af00cad9f3753c4d37553da8f8a7977c7e97e4120fa3b7c5ebdbecd1bb19d43bff48a97acab28b3b9a41e72e23a69a73e79f6603183706ce232571aefff52446023c68cdafca7e615b18e5790190cfc84d93f4d16cda2a3d0aa29f852e18eee45c6e51391f17764d0e4cd1002ef0b7e8251809039a07a2a116b5feeac1df94a572412b539534135d08503259f840d352029e1b200c4a0088bbd1f85667c3c5f7c8773f93aeaac62ffdc571ece9fbb2a47a88b3ad500bb4528ea9143e6c6ff369d353067fd7e61f24431f284f90abd64dd17a6b01f1d73eacf39dfb395c3e9d5a3777287e8d707ed86cbfcdf878bbaebcbbe599d45e472fd68f12e5adb3aa346749561e264bc475caff39cb5e0eb5bc8fae5cd88b11a5d89da5ba9c221f5d591fad724ffdaf7c946a6f1fa906cf1470251d42af9ca8adf930fbf7572cdba26bc1b85e466b04e34b3530d3ff7926726a1b7d29778f8fb9e25ee65bdf249523ed1c1e6c8a0508a31ab9e8f9373bd13a2ae16293c8ea33442465f94a7cbfb85c6d7d343f934207367376fbe1d8b52bf612f551f42c233fe74ff4a955b844d1a66d739e49eaa8ad07f5eaee306c7ba310b2f5cfdd19d1021dc5797b102a5a6dbc5d8db11e08bf46b2029434675af5d3249b3130b10a6a36521562f2dc4b66d8e8ce2a112e75ec80af39e162f93cca389c3c5629028655292eb04f854c8400cfc62fd732edaab6d769fc810e688a5f500206c31d64162866fe46adb6d37cbeaedf03239afe1fb4b77cdac17b27bc2b95d08b168238126a8c5b28fc0bf38dd6f29de88dbdb26d4cad4255414dd94ac5969259aefc013381e5cfd7b9093f4000377d30841fbcec152574ec7f0adfdea3bec1c32aef51d2052fc6e37313193bb0ea077b9535604474bc6f10d916bdb04c9ae987e8d09c867aa6dacca8de13c96f86d73a3fa36eef01deab52fe15e598369763f8875463b949076603c8beb171a29a36fce1ce1b443308b4334c7d09cee850db9574cf29f2f6be1329612964dce0a0d1243a2a07fc8ed7142242a07cfcd843caff3fc561bc0a374c9df0c2c063b0172050975bb7708ba635b07f44c18a9cec9c9656bbad8d0a0f8ce1f60f369e77799f0287b7ac38a002a36e60ce79f08cb7caeb48365fde6c934e85ef6349f5cd54b79a99e258cd6288e7ac85a208d75e31f07e82aa1b38b88f2c0a5b636cf2281504b93c503f9759857d0b6c63f0a757e787b0a4ab4224644f8fefb884322bfe5700ceed85d33eeba4ddfb7388b3d920451b320cae7719f660f496954a1c0bd677365c2be7b61c9f53850d3984d4f53dd7056359282c91e54ff49f60299d0a47120fd1861a5ac8fb0dfca12cece6840719d0d4e8acd514c7790a7aa7a737bfa6a407df7a8233cc7550bf67dc253aee228a280759a1032b0378a0b8da477e849ba9b8c687b3c38f94b847b1b5d274cc06b4656b1aa9293d3fdb41ca868ed4018c8f9d372c23ac8aefa1203f585916863a050380ba29c9d3b2fd78302af1caaf0fe22f91d6563166cca7d331123d82b513189cd896a76777237bbe8a35f4d4f58c3dda7714d0047be238cb5792045bc1484b9be36ea684b007b28f19462c856d87ff48577605886296d0931356220433403a8b2170bba3e6b65e649dc9ed5e8f89b2d3a3687b5f93710ba4e4bd3b1ea37141d5236b3b37a3d5bbc9683fdbc2d417d516fb6ab5dc86f7467b5c55a3fd7a721e1469acb9c27fdc774819266c44c3a8e28cb00b2991c5901da0eaade14320b91bd354b3cbd6c3410d4b110c0366e6c3679f71b86b11d7e20da0003497624eccc76c752ec5e72699ea5cf05f55aba5dde0e9a0f0dedf265372e33d782aed5d13ad7a5b6c5c76124d9ae827aec785997ecad5de53195c497b09f502e71036c4243a7777fae4060ee29b973758dd872a2ca1fe8a4d8f0ba9af1f5ff11febf11c74fade4b58e10974df68c4901c0c22e04de2be254ec47fdf864f8e7861128eee9c6b295614f802fcba8f1ad236d7db547929bf4fe54e2b4386f6fb1989288282f107e328bd8d850f0a7ad47e57c522ef24d36c5a9f80908e37c24044c6925ea2295d96239116021435b8bbe4ed589c18e76c3fe5dc0042180f2dd89ac7e485a48bd8bcd75e25fcb4c2d52bb66616a98a2770b4622941a26973963e8bfb938a02cf15b1c46331f759383c9e536063cd8b6b7d646015c953fb1b97ec88d033fe5539713f7b5ece648a1c6bae5c5ad49ac539eeba50100bb9655d9f5d11f42a35147197905c8f5fd6cfd5feb621c3fd73a0094140c2b68d5500b0492ac7c60ad0b8fdd56ef8936ac082fb4240541a22faa45011723857d2a985b9f1b01ac43a53cb34d715c00983a45c02f2f763ec09925aa4dbd911a250494ce135977b8d5d30b3bcf94f53401f14a3737d35c1b7f5cd3b8e0ceffef49a96cebc814b7a7fc7ea1b0cd85622d5a17401c33d75fdec9c2dbf62312140ed262493a26146981a2f0259aae0d4af38cf54ef88d042891851165ec7c51797ea67753449620344fae6fc07fdaf4568f7ed39d51ac225f3b9b929b235452d547af30b1907e02c01808449ae9b9022d0817f954b2f8f9ace5f28da32214ded172d3d58ca74780b6e498b7da5fb3ff776641ae9ca0d950b596744aa57122bd1505fcad0b0f5a63bebb460fa96a30b2deb1e33b9da5b7f025560810ca99e8b7480b110157521d727fa6fa962e9198e408f2e4e87e48faa2a22d96293921cc931289fa1997f7fa77a2ac9c92925c535d9d312efd68120a2cd42407db1b91381b1d899f3df4875838ced6144cfc53c9e54674a8c2828950566542416f987293150e12e8b596899f7fac2b4a0c95ff6244abc53a7ff53732eafa902d2dd74b454a902dbdc8a4853612e4b3261a84e78741732bcc7be8a419ae3e14b35c01a4b68249e106c0460487b91d7691bdf2939ea646af46ff84566e6cd6d8bc453d054e85e136abe3a68df93eff7d713e078c1139ce579053f0d797ea6de42e31b4f7751a0134947ae9a8f46834cfb0e5ea5946c3b02d93bf55affef1a93ef3668e01930b51e4a9cc3adde0fe617434fac482a70b9739358bdb64094832f0f12df2ac101e784dd323bfb526c93175e7c5bc909adb29825ffea98022b9b10212cd087f541c1f77f8c5a0b72c9149d9af8efb0a89f90e10fa61e88bb00ace7a3c90f902c7cced6b01fb066c5b1d54a8769ca978db2eefebecfcbf0b1b04306259bcedbdd1f88b30d70d195a1b37f8ea2338ed62f842741c1f17578aca6f80c1509a0b39db66a0ce6043000bd5a5dda89eaaef5148fd44aa79fad88f271365a009727cfd4bdfd54e86e5e407ef30aceacf3ad8cd3327089de4ed69a399b788066c8c68918b2bd2b7303aecd4d3a00db69e30d05c218767fd4737324d882590fb612ff67e01123e11468b41fce7bda716f3d3fe887ae60ad389215c155c232688d0a44e4b175cc165af200a07954f2311b66c8bd8a60c982694f30f837e7af2b3a134998034d004ba5541707b441d28afcf439ed40dc1baff4ff5722054f29b86bc24ffa6bf38af181f369be25bf05ff926a0600517cd1865a26eae734752ca0909bfa744225a6a87f546b2c3449070f6a3cbf9f22df7596075a8ea04c06426 +MD = e0f79379f8407bdbccb274c52878f09f122c07ca7a409157678e59df + +Len = 49872 +Msg = 30725fecf2cea54b8546e5d746197165446205923c405b04c834fbf3d3ca51e8507c01c52bd37f0680cfda460c89d805e11748a85db094c15c109691ad1eacccc3cd0f9bad4060e7493184d5b493b28d0476ca403a2ce96972aa3a535d300fdbf12d30775f5d727746348c8b267f278617493461bbfb828371c8903fcb48a09f43630c602971dd3de09f9a714a955e7781562d14c8678897c1333f60e0ae879f1f394c5ef3c6c9c27f3c558d081d80e8aa665e6049b6232ecab3f0bb82a9ed63ee759879a5a25d8c8cd166e9495eb461fa406f4d26317acff3104b5a9a83fa7419e097ba284ec1256d27748df3a1236bd9ae07e34720b602a611f7441182d5590642f22862121e158c06287ff02ef48daf76ce2b94cbfe4f4b7f9d81cdefa79a1f6351cc3c359ce250362ac9264d5050e4616e2cf6797b3f4822e41ab81297c0cb0a5aac9e016216207e21737f465f3be0378cee5374555906c27516b932ce527101b8d271bc993866a7b683e26048d60bc0d37a9502b325ed27f77db79873d87b0e11469baf68d1897a900336e434a9cec3e8d7a26cbd2c661813579c8dafda50fa0e0e0622f868f1bc58fa651a4a3d8f0a760d64fa9df5d75f71ad4f57aae1588c5634985c70850638b571564ab319b75b2325c1f37809a9c2b886b83e8b74fb8e92c03ba7f9b12fb5506ff1bc96c5af7f9726a3a179ee450a91ebbf8c7b1ca1c669b8d649bb72d7fad0fc1eb81ccade3e7b18f14ac52e11ffa3e34c87a160b2fe8426518bdd5363d0de20c5856dafab5f77049337875177689776477926c896fc8a1194b588d93cff22e4ce6cb0fc80ac32f170b0e5ddde0e14ac98a831dcb5892482860fe38eca4f434f21b50e3ac4eb55e772fc075caebac38e275deb25786cfa8011e117f97588ea6aa7a8aef0dee587ee806516554e324b23dcdf7b2a456fb3131c724ba2a671be3c468cb9a63862710f82313a51283e5674a0780a738558f743900ba812c3d368cde7ab56e4392abb5161a99ad7a3a88987596ec089a1f0701953f456d036768f25734bae3349040cbd03155f6f27378e66f10ac4f3ffffc49c4e757c646522dc4dd0b5e81ad0b90c5951bdb0a11cb20d194e943f39094d9bd569d64257ba9ff64ce8312d223612642f33e8b6f6ebe2ada65a5458e426a19eca8d5ed1309bb4872aa106a5d1e4d4bc4792e099f5fa8f1717fb91387bbdc47485a0565177722b34efe57e77b240cabba754eb8027b280f3741b950686387fc60e8b06eab5a6caa7a49bdfcc4ab3bb0a59635293127b7fe8c3a1a6eb8efe983c6b37b6c2709f5a8851ab72cb23a66e5165a55dfc40be529e0e750d0f1a77d77da68bae0433c5a27efcfc7f9dc47fac37d10453e039e1c2be5c7f1299b20b0632c76e35d683806c32af784e69b5a83d64a7677e6a834e97f0b6a7fcb2de22eb02d4ca9560ea387e4c710626587f87e981efb524bfa86b99db23d5158127245096d78614cbef55a1734b8e5192a9867836afd88e0a30a29028abf1a32f1479fb95d78afb3f1b3f9d4f43f9153ebb0bb12af1b70471a15a437e56e3efe32e89b4a8ddbe92e3f45e3a89642dbb843d805d06bc3acd1c85fa7b862d9341c6fbbd4577f00a20e0041b40c9b3138a8db84c44711949333463ec00e837e9e100057b75a91856ef5ed3dc76b63a93cc81b4d72e140ecc7ce1c4979a4b7cce16b8d42c0be75d8a4584e70aa5f90096c788b789e396a6abf14a2f63115705282916ee39d0d8c88e6b7aca0e953a0d02c5c84bca2aa1e6ceda982cb82cb5d9e16243dd088c25604aa969044e0e206ac10c6cf702cddad81e7ff243feb40d00df0967290306752ea646791b34d8531eb9e49a449992eb83812781fd9d7206830c66a958910871388b8cd19927ba7c31d4977ab8f7427cefe01c6de1fd2b49694ec132f41958c188dfc19a068e7e43acf86c36dd84a5342524a4dd7887aa7eba8f612a8505bf0c268c2efbe8d3ea4f960faaf33ba982bc2c3308f948a1b64c7fb68fb891bc05fa18781b1dc95dc749f7009adc58cca2bb0cf790ebdbb4165bbfab9304a2a6f234688dcf273094dcd8d7b38416be57cedace5783d8b92993548256b5373f2b4e621eb19442a6e0f3a53f10b0ccf5b0ccc1793a2beb6866f5dfd09f3d79f1b3e02c40ceb096b2a9d25736ff652483416417158ace4972d504a3b26e72f13ea67138d8cb6c4adc574297c568ec46f2706085ab2eb51d5fdd87492fab9dc8b16cc931ed901087ac520b0df3338d5bcaa787b2410e288db5e54878503e0625cf6db0bd8805e474ab03f560c848908b914da047e2126ec1fe570dd91c0ff5312212ee84b012303a60d0c8394c8f3dfdd1c974eb9322d1e2c19a9f149b06b21431c14a2f6d9f3b0053224b3f88f1dcda1185cb475e2697188716c6d0d50c84f584e38e66c7944eef0d62471b8354b449dae86c024a06098ad73349b5d307b5fca4e180d0c7d9b12f15f6857445a20e73b35a21c55faa6f613959f26c9ce18b531821e9167456ace7f348caf3d7c132802443b038a6fa11c435f0879d38804f1f680d90e0d7f4873f30bee140409b6897b50ce20226df36dc5460d1f0b0ce488b1d0c3fd5f699896053c291028816f8e0ef1b7fcce83f28d11d11980b0bb1c0bcbe85bc9ddb2efb72e4bba1e1b81c298459d94f3df2042dca196ca4995113fdddd3e2d0e18e9c259c6c11da87d79445ab7cae19fe4e148eefced7bc408adb4814e48a434915c94f07722b0499ed65927cde03a7b604599369c6bbaaa8bff1e9897ae5dd7c7a9fc1db7e73e7c203795920093ebf0e1ab983608981347af83d28661c5b6623c505c23f18504aa81fb7e1bf85c92aae9a1ea8fb9d8f235e3ba64dd05354a5e5fce29c5bc92af6f34c07747fd80ab03d8b6f48638c4f3efb92179ff1a638636b29209558186ab44c8f51588b8c6b1864f694acc0de274ffa047567f19d6f685c53a6f65e8e764a5bf27dd60929522ccae2741c3919811c0299a9eef8c0617c61835c0794b1b780c77c7436223529b21857f9dff6c7c46fbc5a9b792d98776722c02a0f230c952038351cc0fd3a5773f55e0a3f206f580ed04e3353b8ac17f04612f858332479f058265ebcc3bf44370afd8f82df9aa5c1e57e5ac3c284aae17681ae28eb83c9bacc5623719b4d58c6fe3e71f15acf1352a3f0f61073a99900591634c873b0ef443fcd5128ae6bfbe77a2996d4ba960a87b4aef083f2a24b1698d87280f43351575794d12923a1956426c5e7732677f22abdc0316468f727eadad05197969559babcb28cbc23778e03a91a4c15c7fb3301692ca0fbfc319746c804b757805d6d37172f6929d6764e8dac30ae04c5a935d55dfc248fd7d701f0097e8d06db13f79410144fb763253dc9d610f386470a606d4438a7692071cfb14646bcedce3f5e9a4e6828aff30cc481d0c105e475a41d93c4e610d20088685127622b54826a0a117a33db59adb4497b414bca667802d20d851047109fa3349853dcc1821e1b63c13b7e50fdbaa43680d2b72c5378a9e9a430bd336b244a9b4e73bc68c1cbdbd1713a506fe34164f1582b0c12f59c23c8206df6be2db705053a2e080757b131bceb1fb120536b7de4cbf35263920df6d949e3c2cf9c825dda252dca858df7a58cf591a94b94607675a1d2910973f3ad82e73b294f02aad982d71809ccabc6bfa9583841d8ef47d70ea172d2ebe075cd2dc11d3324a55a02661896cec3f945087bdcbd80afac48291695781cf120bbe041a02fe937ceb85eecb04f2052bf9d076b48c86fb8138df3f5438f78037dee6e264c1c5270c4ec777d66ec076144f544df660014dc6b3bbd12735ded093d36fd438d8a76b7d11fd58203158bd8d1764840fc0e7901fe7d10d7ef8a83eba9ba17022b225ef53b79fe615071b59fae479af7d399a610127972ab7ebf429109a343caed8b11104b217c8412a98c9f2392c36ab34aa1f2f0576ef6e7a433e4a5180a049c6d97f24940d751146418be787c490363c9748de0408921f3e05dcac442f2160072f9817dfd95321d4b62e5f42fb629adbd27cb295c4d926a1cc92cb0498569e1403ea72e81408ef40671fde0d3914357cfc09315d241b214ff7df3af544b65077f6e4ba6f35fcc623c4eec848f63bb2aa649cceacbede9b83283050a8bcb723ad892552b7c7b562f95ff9c288cb3f8eeebc960f16edaa0205ce34c09178df941f2b1ac06441b9323bb8ef314f209626b45493672e48f3d1226a3aff3201960e577d33a7f72c7eb055302db8fe8ed61685dd036b554942a5737cd1512cdf811ee0c00e6dd2f08c69f08643be396e85dafda664801e772cdb7396868ac47b172245b41986aa2648cb77fbbfa562581be06651354a0c4b090f9d17d8f0ab6cced4e0c9d386cf465a516630f0231bd41ec36a6e042d815d6dae7a913727441d1e936c71daf2c4c937a845a693abc85af500744d4faf2ff6d12476932f9311049cea233c8e3f2d37571c90cd08a3ea6535040e8f86535acfca2e2b9e20c8b4cbc035bf8a6bd06b093f3ac234cda0148b555ab395269eb440bf1803f2c93c81db0f229bfbf25af0c7569f644e5124b915ec80ee0edef5aee2267e9a6177631aaaf02d3301c04360fa4396f19a41b65acd50f3284cee0ccd3ca6ce494ac9d0e1c409b23f2c440e3e0a7cddf4a90db97bfa294dfceff22871b8a683ab2f2f0a79aec25dfaebfc3fea8068b0e7fb13b28f34ebddc65879fd4edebc3b3a7f158434d3908d00b1673cf8e4addc45f1023626f60f4f3f36e3dfa7174e5171bb1bb2c5db1adbeb2d03a9ebbfa2ac892b47c8b5c60a0ea1dbce643d1ad372eb83b03a8f1dc7a714af5ffb2579ed9e3c1a62cece1d6288a8d7a81f5321e1fc0239616003141d8b07c8eaa5489be54dd94ec1dcd274bf69bebb0f659bf50069407cade7c46683044f0a122cc79e3027eb2903576554771e5de642db79dca55730ae0416358d9e8f64d39516250944b8dc4995e2e9450012f0fa00d57f7147225d4df29ff8e1d6a8c3b5b1e5e365a97d471107f3e0cf00e43266b8080f3b7c7720ecf7d9611bb1cce6411710752bc4e1962fc80eee4ae00e7cace6e7bb93aba2260b82571093b68866d6232a6cd42d8253e654886451240e4a3cfbd917225b5fc71a308d89d26b57a01574983ce749ec0ae54c14e56a534025a79560746011fc9ea971012f5026a73c6f69fe67edb06b15acfd28e40ee450897d121285c546051729d24693a5af13964491a1705fe79c2e9e1638d2a76dbc001e1063bdda9e05cb2bc2c2394b3b1948458a35d8a6560b9048f5d943dc35ff041b0ee87f08506b252fc11892a97124cce2923023599215f52e3a6eba05f3761ff46bf55be723c1af965b9e3258d7c28e9c7804c2f21267c7ce427da7cd2cddbe2ac63ed6ff7ea5e4f000d79ac1e57f27e37a484a085d5d8299ac8a9f9a2882692e9c0972a9d7644fed4f592e8d00b70348275f1b04e983a020e729f3e59cf09b805c09b17ea4995abe95a78012e006bb4b1dddd8503d66cae470b05747e0c4dfc094a405f68cb18004822711ebd9faaa5ccc38e4a2cf634d64d7c23c29aa6ba05fc45d02a9f6497a5f837c667074ef7b0d90e4d2552625b2229ae41513405187ce69b919f167dd842017fbf059376187de2a8623efc81a939e288a749d4912f08cf33cce7557ca57e6ce4a320e980d6b3ee7815beb2bbe5c480f19dd103b2c752c0f5c829e4cbc401404dbcdf92d2f9fa0666aecdfc78d96a0cd36a1147d0a701c0c9cf8e4cd0fd7485a1506b15d649fc315a749263204bd48d1557322b5398bed897273e14f51a7f44caa8ecfaf38e5e773cb0366e1b04aa0b9fac5c34a362310f471960c4a1e1c984af0c89ca908fcbe0f4abe0a6d2cc938f59b1b6ec28cd016dc1ed1de43b1cfb4d38c36a0c1715e9756baab991ab6a371f2bad69da4aa1d7faedeb9cfd2d91bca74d17b848efe8603d87f8e9b90fa83fc6fdea9c8672a55abfb45b0696de09b59bd64e9b0680d0d94031dc97a6674c5389b7ae787906a233c3fc848238b64b8e30bbb13acf3295fc87529decde191f1a724142253a7060090eafaf396a1d21ee6fe488be2a6dfe7019d0840feb8fe93d8883eeca5116a785a9b32452b47b517d5e3a1b4ea099d4deff95d928552f7263d365f99047623f4f9bf22bf69e38a4e408a3b113b81edfed3f87e461a26381355cd0ad9ea3baef0eec520c4db1bce2cb72089435fa64e746e390ece05c92e05b2aaa501ded88806aa5bd0e7e7470d3d9a6520adbeed4b490f2973bcd0a23557c45dd2b34ae33bb0dcd1a7ab270ba3eb7ab675c2d1dd40d74758317513580a940b64f860c6c23659c6c5198102b03ed0d8931d2540ecdbc9a733ec9946410a45184eaa9ccb2c049c28b49b0c12fb4a6824897b378492887a9f4af98bd1f3b0d54b794db9d05722e2530ec0aec043332bef18049c0574b374a01becef4ef69aef4583765a7efa1db6d6621eeba30ea596a8cd6da55bfa09424a053b2635a024dd76eba8f11f7b5194332d0a3533d3fe22e1f80af5f098d65e0dc568b2fea6eb3a50105a104a616b04f9ee172deb39c97b1b4661005be7c7425baafa2832716a8071a00e3a7822c6838b13da38318683e9c5270446f65d4879c44473f859860f3a4bf939d23156009a673ca7e6cf60ba096028695c686fd67ec8104a95dc5b55e26fba6169fe7185a43ed714abed4ed8548cb904932a95fdcbe79cf2a34367eaf32d32197447ebd24b4261b51a43b76b559b576a9da5762adba359108327421af7351ec683964b82fa426aed944b20ef772c820fde7176ea487bc308c7e0608268e7cefd1a7216f43b9f6142bc6c11d143b0d768d8072eb87ce1696fe417499dc2e5c131ab63b4c289b9d338f53f00bd55b8b61a0ceef411f364ca9a6a2473e98f9fa3e8a8d3cb6a5f323f54c13c840ff7b4ac780f916d834686553cbca065e24975d596a55ac1584699140ac2dd0245d42539273286f188e0b697ab7e0396046b18d4d023511d08ba4eefef5c9901fb659ada8c283836af4c86108b00d68aec7ef93009a56f551834d42167011919ad16760f3b533d9342f4754e4ff791caf6ef8765c7ae0dfff330b9670652b5afb771575599360f9df082f4af6ec4bdccb05753e48eafa58426587f1f41c3f74ac700bf3c4a6316cd444294b26beac316a520df4ab31cce782df695b8adc76651384f0e21b34cfb97aaedc605cbfc3a2f41f699f6f987f14276a58dc1aeff7b79a7b6d4b46866268380df1908035b9b7d13230477b673b6799cefc7d8c9bebf1a81c29352ce4110278280fe47a69b5f86a530bf4b7e6276941d3fe45c8297a9ca430cda8b795040ea1c8df6232a3e0ee254ca2af0b5c6ca18541063db6e1cb3ff87f00accee364141bb50814912b61206be49c7f5f133197cedfbb6b3f0a07620bd16b4a5914599c4db733027d486116a5e2a26d9b519fd48576c6d949ed558e45eeb58941710a2fa1960833df430859390f5b80a75fdedf10cece8fbdd3de490e9e87726c42a0547e192eafa0647d70913370c06b851540d9af7c938402ca1ecea8890bc3cf42944c0a4e7ea6f3e9e313168835d00a6d8046e178ef84c34092edd5625e2e5f1976742f0fa9db38733b297f4ce8bc380d26c12b69aba75d682fd3edbb73963c4d825c501a36267b44ff3a3763e018551dbab157f8cdd41a6b7ce9b83b50e1ac05406d3716306e0383b7ad077725cdaac7c57e2bcc5ff340710195fd8bfff9f869390fabac9c9d1959ececb52dc0c27f31ce8f708e68eb18a14740865288c468a2f4ab7384849a05ee245e092fb8de1c835d4eede5f1a6ea24d5531939f12c43d8f9a75845ef4d0f69ea6bcd25150bc8e6fa226c7a010bfe2233347fe84418d332d16d2298e69e7ff3c37bc7b6e030cc822e73b3f4a0029bc2ea4d8006896f5ed90363992470759cb339f6c08b2034707e80aa8cfcd6730a2c8105e33bc61b2df517f3849295baafd2d345814cdd01fc02792dbd3aac46948980c37231050388ad9684ad895d5500771acecfa01f7eb8389f650e5529637f0170f1f38d4d0fb629077ddab2d12ed7cb94fa752fef93ec467dba49f656b313bbd8f62ffaa7270192f248d4b5f82e7cf6cb3139a25428df54989534c4391c9ae0403aee1e1933af10df4c6339db3b361f47dce5a15725da8b7a5c9968dd875a973025f7a1ae1b09ca57f14ee6803e4f6e8e613fd3ff722512aa793e8947dd9c09311f142c6bc757e9e19f5f65f1200d0c2a2a10e154f80812b052ebd08104a85dca900b675a20e19406be5c5e36c7b921a39d1f725e9dcbb315516ae492e6c6bc84e0a5f9820ceef44db60e78551d9ad47f24362f264ab51c60dc826f826a3e4ee677aa8beb74c8313ef03d5c5809fa4e48261bc0b3e80f76195dfa165977573a78bde2c49e41b57261d2b1b246721fb7850b97cc0d5d21e8c83b9b8320f75ba9c21b154da259fedf3fc5312128425236bf3a72fb3d93339bf6de2d5edfd190c24df70acdffa6eba15f3287510560dbf37d1d74f74a708db72aae784e9ced3faea0ba8aedbe0fc3e0497f79ebe5b40217471b65653cde7763ed1343fc6133af9443cd5d55e67bd0c38616d097d1260fcaa59c0cf01cc438c7c6755810358b2a9dbf964bac7fd458739d5d53fccf9e49332008323ef109190c3d3c7d3121ddf6f19b7f1c9a9201a41816beccc3ea04fa7b3fc89ff7c397625adad07b072b115cb75fef97c925eafcd97a9f01 +MD = 8b6365c06ba173e8d1096c6f32ce0d022db4eb7b4fce6abf96b98d82 + +Len = 51032 +Msg = 3a318745788d70d14706910809ca6e396237fe4934fa46f9ce782d66606d8bd6b2d283b1160513ce9c24e9f084b97891f99d4cdefc169a029e431ca772ba1bba426fce6f01d8e286014e5acc66b799e4db62bd4783322f8a32ff78e0de3957df50ce10871f4e0680df4e8ca3960af9bc6f4efa8eb3962d18f474eb178c3265cc46b8f2ff5ab1a7449fea297dfcfabfa01f28abbb7289bb354b691b5664ec6d098af51be19947ec5ba7ebd66380d1141953ba78d4aa5401679fa7b0a44db1981f864d3535c45afe4c61183d5b0ad51fae71ca07e34240283959f7530a32c70d95a088e501c230059f333b0670825009e7e22103ef22935830df1fac8ef877f5f3426dd54f7d1128dd871ad9a7d088f94c0e8712013295b8d69ae7623b880978c2d3c6ad26dc478f8dc47f5c0adcc618665dc3dc205a9071b2f2191e16cac5bd89bb59148fc719633752303aa08e518dbc389f0a5482caaa4c507b8729a6f3edd061efb39026cecc6399f51971cf7381d605e144a5928c8c2d1ad7467b05da2f202f4f3234e1aff19a0198a28685721c3d2d52311c721e3fdcbaf30214cdc3acff8c433880e104fb63f2df7ce69a97857819ba7ac00ac8eae1969764fde8f68cf8e0916d7e0c151147d4944f99f42ae50f30e1c79a42d2b6c5188d133d3cbbf69094027b354b295ccd0f7dc5a87d73638bd98ebfb00383ca0fa69cb8dcb35a12510e5e07ad8789047d0b63841a1bb928737e8b0a0c33254f47aa8bfbe3341a09c2b76dbcefa67e30df300d34f7b8465c4f869e51b6bcfe6cf68b238359a645036bf7f63f02924e087ce7457e483b6025a859903cb484574aa3b12cf946f32127d537c33bee3141b5db96d10a148c50ae045f287210757710d6846e04b202f79e87dd9a56bc6da15f84a77a7f63935e1dee00309cd276a8e7176cb04da6bb0e9009534438732cb42d008008853d38d19beba46e61006e30f7efd1bc7c2906b024e4ff898a1b58c448d68b43c6ab63f34f85b3ac6aa4475867e51b583844cb23829f4b30f4bdd817d88e2ef3e7b4fc0a624395b05ec5e8686082b24d29fef2b0d3c29e031d5f94f504b1d3df9361eb5ffbadb242e66c39a8094cfe62f85f639f3fd65fc8ae0c74a8f4c6e1d070b9183a434c722caaa0225f8bcd68614d6f0738ed62f8484ec96077d155c08e26c46be262a73e3551698bd70d8d5610cf37c4c306eed04ba6a040a9c3e6d7e15e8acda17f477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2b296c2eadb7d25b3e762a2fd0c2dcd1727ddf91db97c5984305265f3695a7f5472f2d72c94d68c27914f14f82aa8dd5fe4e2348b0ca967a3f98626a091552f5d0ffa2bf10350d23c996256c01fdeffb2c2c612519869f877e4929c6e95ff15040f1485e22ed14119880232fef3b57b3848f15b1766a5552879df8f067c3e7972fcaaaea61f421fe7e6966e5aaf179818feccd7847c46c7dd40d5c70f4efca2cf5d236fe6de8cb5cd3988d37b5aeb9f7b6cbd4e41e43294bec2dc0b321320d942bbe78e4a71954bf40b3f290afc19d8881b2d87f6a65304f4865d2517d49266f39d5ed379e2472984e32338ae9e888b6892854b4ac88f61a714bedb65993a910b8bf0081c398996a44a9cc71046220042592b62e554d0f1fef569f6c46800a2b20d05f3da7c42dc7cc712a0d7ffce7f3ff989947051fdfe22b0c43ede4bcce00fac055e5cb55c4135e2ed89acce744f87f905a993c8fece3bcd397a584986944bef580f4aebbe0ef723954b37bdfdb941e10968f5c0bba970d52f74dd6a16068d5f66ce4b27508ae91373ae1fd34f05963afc9a3f411bd9e94f0ef213b7647efe8297650770faff3439ed790d18537bad8a4607185409a5cfc33dbda2375844c6e3549a27cea4b3ff1d6c76a895f162af5c4f7729ff6a544ab9269d33f3db9f0c070337534936ef7348596b99511204c3357eb21a4c272f81ba30596ef1d3d9f8780e0232ea98fbb8411a2187549ca7129f3d7f9243287e9d4dc3bbfa3b2a38b4bddbc46db8b31ff59019601ba77994c321f4a839eb5589c5fb478980d9c605655ed444abbb6da353bebceffd518f13ff4409f3b84c9697224b248ca7d1918736e35f4c95fcafcef9526d98d45ac86bee8ee529b76ed4f1dcc5c38c182d71084dd5e6a2d38262ea0fd4932148cb0ae6b789f012dd5af5e01af18a517af550ced2bcd00f0c566c3dbfcd955303ab3fca83bd9275d317e3aa0458e2a2762f1522ee1e855be87eb7102fc4ddf6aa024e6079b1341b41ad8497c3813448b4e5a84cc8856d4e110429aa8741d2d2e8d91ff0c2ed3ccdcd25c2f17ff4e60cdb1ef1948a78f0b02cefac55f0ccdcae62379ac285f91451228684fe5f3a62b493e3d74259807648e448275792ee6354c324a71deb5e226fe6d8b1088cda0e08863b459d602467dfde1681f9942ecf8ab1a82e4b1ca3d0f1c22333552e5c54d25a2e20eec4ec2b3dc561a4831e158919d4cc17923f50859d5d70f12d6c499bd8b7c4517db0602a2a3f32773d5a2af7c9d6974a3b7ceda83d60c6d3da6e284ae34606c0924a09cc6ef490e26e6ef582615c12af8dfc03a397722ec1a35d81cbbbaefb5575ba6e7ad08e83cd6082fe92ab11432fd2e719dd743cafa3cf61dd852898abf96d29179a1ab2132059bfce906d9a34b05065b8be9b655161a7a1c2e0f2ac1f92c4bf8d96120a49c3a24cece270a2ed1b519c67aed6961ce47346bb44e0915e09c0a357d4813e2c9f8352e0f27ccf74591bb7ae15eb7719127b774d19bcf07047aafefdbe2ef6c49a43f9332759c9d351f6dc155ba3af4fd4065d02c74c705e33caf708bae3d91a9d2c686ce8ce3912ea2c3425e8c6e7c7135d1f61b659ba2fb467b7ff32668f359184c8139fa4c7370e04e665251cc687b5c9e7f24faa75ebb4ca656a8d80c11e5c9440b0b3a31a4ca4c51a5e786cf599a390da3ef8094a9b1a3c2ad233f917dbe8a4f9cc8c93db5893b8fa964a801b04c6fa22cc1a3ce146ce032ebd8c9938761bfc1bee923cb164c525ab97041ee1d10551e7241e0ce1f4b76798b60028cdf6dfe3cd9f2d664577215458e90c0fef0747db50cf6a41f3adbfb29042f76d7d641ba33766c5d83f998f8c2712cc1becae76e2865468a3be7acd2a40ebd931f1c7b78282cbc25b46d2f716409caa0981cf79acb13b7ff9eb62ca19ce380e3cd0279ac9d6568cb7022b413acc0f10a355713881f70d160d216e9cc562b1fe56c38daebf5a908bb41cab5640f3f165af119c9bab835197a509a52c7725df114772ffdaae370027193c5b1c70dccc11f65c588a717b8f698a4a0f62763e49b0d6848806dc942fc9b009417c12b0277c40dfaeed1a0850f4848db4260cd67841cda22d1a929aa3d73f2c675e6d968b0e5541a5acef511aa05b7a9d617f15f22ef273f8ff1871e6bb8f4cd5abcab77f2ffc2b46af387f78d5d6b8d1f9182241dd0ea0f09bb64080db68129249713b8b47ff4598de3db9effbbef058d81f26ecb8e8d01dd7b42ff7a19226a622aa4937be2436a3224528097adbc93be4dc487c254aac889c5968d574d42f191dbd090cfc34a76f6199f34dbaf5ec810796b1788efadb38d0ef10a1bbf7d6f321f1a49169f63f058582444324d40032289788685ac106355cbc52e4e0c4c23d1890424f6d34a76c744640741e3fae572f25f6d5f167d588290954254a009bffe9e00acc71b486ac182d116711009ef603892346bbb4ef381e1d3eec61760b3f7c2a2592db3f85ce5781dfa466dd771a8e0b36432070fd4d224239c28dedb807b9b5bb29159d4cd81b88d1b4839fe2c8b7f258548862a6d01fbe6d2d362c4a5e88cbf317859682d54b8c101ed20e860a6688b0025b5393c8fcda01b7c4fc6a4dd1b2f5e695f2cfcacfd3c36ab9f10ce7831367d4010b6c3da1de1de89f25c0da7cb3ea1dac78ddc18fa51321a2111b68f7dca453e252d838f612eb472f6ff3107116fa4531f151c1724c28caf4375c93a82b900566f07fbfe2bd905cdda2acf498234ce58e26d6d3620f29ed172976727f485374f6ac0add502937af0f859290d92209852adc12fe47353f1373b0120d647a1428f84f2197259c06c92ee14eeb1d5a58ae6ddead4a070791c37093d86a400afba8d6a16bf74a5f2531a37e870d4a1462e6bff350bf8bcd4885769c6f93f940317cf66a9104a7babd6fd524e6ff4a984eb888e2a366bbcf8be1ed9180907964de2cc2723ac624f4f60c2b9b12c8032e45a930744d467f5483603d3bb267a6be2940a0810f46aa57f78f0faab4705f1e6f431f71f767c0a65789ce62ae226a963b41fa5eb88b1f29e980e81b740045aff30dbea148d2640b30e408ce1cc9ac333cb737d2dc9d6db3f3681db4f97f9c2afa8f73cbe98e55cc36fa5446a26254de5328bfa523857a3d3ecd183eecf54ed7ab52a7b981a3793090521893ebf749dfa81efa9f374a300ff23a4080f46a42fe2fddc331b91aba816775bd7d9d8f757e64205087bdf475703634fd44bae760e7adb82dfc39faff05e2e9accc6133bf03afb72927608c33aa3245b750e67390da4e6c4fe2a84b2f062a384c48deea0fb5b069ed45c61951030ff4d66d1f17ba1e3a8090aaae1634ca66e904b9bdbc4ddd90c104aa97a3b7c4f5c9c2630ddac6fc987c571ef462f59abf853ee6a5b161c37644d61e7c334d340b4de4fa59c49cbc90e90e0422375abd5d9361983fd234af8b7ccb691ccffb9d7a07a2faabdd25a64c4e1c25e09d4b7d679bd5973326ace9f7f04c522182a9456980652aaa2e4701f133e949d49db020062601ab28b5b2b8e128bfa230513f75013e9653ffbeeb17aa20dd37a93e71ef61bb4f9cc6882f6671ad8e21f446a5756acb9b3d5295fa2e9d9e60b905897732a1e22631b6a60939d1061f971268c38dcbafdeb04abc5a8ff234da959184a831ed23ee33a0172a7a26bbdccc35bf81054c70c5748f3af582d26bb394f439ed336e07106b2be478709b552c880354c8241798ba50ca17b14e65ca537ed6b02f824b15f29e0014dd65555b7692242e7e3451af240ea35c783dd2d9221be1f05464add6fd97c7af409f7f5524b341558d7b253b6b74c110319542208933bb014522bcd0991d27be88673fcb9db302d2db42b9c6f64bcd3bc49fdc28ee8d0cebeb039f8d2ff7c8489f05bd46495a0eac52d035d72f5a6ee518a3c978baf27db62d517f9525ee53556cc1234e906f0eebd96fc2f77d6b4d1717e93098562ab56bf252836ee5ca70eed7e39669dabca998576588ac484411d9a8b83a1128fd5d122450d4a2d553c619c8b240218f0788bab6fbae81f9ae6331b35a0e6a9a331db1aa9199b95f50fee0277749fd17195259dd795cfbf671eb292115d62b13939c526c5efb39ea8bbf4bdc7bd985dabab07db427bca4a85550c8d832b7ddfbe683fc52fe22acddcab261d003164241b14a2f234cf30377223b16c1f8db07b9f479b844bb3599a2d67f2ae95a2bbbb2c8c77612322ca0cc9f531cc4b16a31b785278d2adb5d89a077cdae10c73e7896c5d05b691f8d040d9541e1caa38be35c613583eca7c1033f7444f62e91780256710ce5105c3eb6a4cdac6db91867a6104f4aa272678a8fe7978d09290100e05894241cef31683ef70c3dc97b5626013b190ef3a463dfb500a650efeb5fff9a06f6bf08efe53325701d9cfcf6a5ef7d45852b7d6be2e9fef26a34b15af39cb9c75e86b2f6c2c6f275c7700e144feaa0975c4648ad2ecff126abe256600400c402962021ed0e4a2d70d16108bb9b41f597650a5d548dba17023102e6e4db52432164375dbd12e65fc80419f1d5d01901ae6a1cc34648d2f6efc33b6acdc1bbbf8b91706f4c16c30fe5283dd149379d4e443127826da63e18562b35e805fc63bfa8e5755e846208c52f0578b1ff18f263c284d1a3aff127059d2f996b73d471cbe027ee324c3dde090e626f98dfbb43c88e29c22df66fb4432e980ff8ff930d6b9b2182f48bf16d64ea08cd8ed167b60612e8a328296a0e5c6f2d3e99917f61284199daab2bc4dc5d2bc0389bbd6573a4b58b1c9d30285cd8cab8cf5511e292893a589e5f13ff547d395058c88bfea32aded8d493f3f2c73da6ff69356702cb17ee2675182be9fc4a7c80d71c23776e20f7997412590f77156accb53f7c283258c6ca07df5bccfd4e5d1a5aa06d1bfb0f6794a3224cc993e780e55b7d369befd6280efdbb8bee7e1142e48c5a5231737f96920accb466443c4f1202f77ea52b197db8ffb5a399a81a94a81254b800fdf6ec5a5117772fb19b3f1d52b43d8c0ea72e91b4d48b13a3f1bc2c979689d1c2fed1b61f0c7e6c038cb8ccf5bc5999bf0aa161c5202ca4961e2039c126abecea1ead6c1cb1b165619722e99017bc1467ca40f0d9a16c96a9292a96380e08999cdfe845f110f861f445e53acece4c452d6d72059960342f069b410da556862000c7ea0946313caae31d698854e7f3733a7d9e6aad646db9d2fccc64b0040fc83f601b80c21a638657a8179acd6d97e8b5822ee5bcb5fd7a38d2356400228adb8132e4710ed5573e786c553adf6522eac702893f6e5ccebb5ea7e3d53eb7de9fedc3aba6d26afe196df38c2e32d97bc2988717406d60c6c36c023e7f11ccf55dac9ed9e5b5df42615fc5253f6fd08ab84f9840af5ec9cfdc8b6cae292268b65ce548d7f75f3e0a5c756886353e53371315be6c55eca0d04ce36c9b9d199309e6c14a0ca4798f3d54d86619d846696a1d117f03fbbdecb05c9b8a6da19d55d641682ddfb3abd8c58faf4745f0301a0b1c6c666d6779b55954db4e8cfe56b705b60179baee9c23895623917144a36e02594df81262c903b27ccd41617cedc07f8db5b4041bf57771f05cce079d486e371cddbf5bb355dfa31b96ea52e20a792a0eab6824035ddd65a781856ec3c72193ad4342ae24c450147b61d1c8fa54e8ef810c1c846e7d5b4dc1bb3f0e7ec790fc53a809747bbe5fede2547f2c8a7417b72dff598b24fdfc118731834f96f0c15b57349d1681ed131699977be45b110e685bada6a1ec84c59a410cd999d2ecbe99010e85fafef67478e8534d5a35d4d4eb533d8b2e8fbac0ce3773c954fb608f9c995f498aba848af916b07ef4df6570295dd8909ad648f496b08fdce8d9f73a4e674e722d7c3d5e826dd5951c236bed09c1a63e4e86d669dbf68799bd3457c996b304874a0dc9f7fc33eb1a39c78f5072c6ce1cb06a0b28834f84893bd428435bc4a9104b36d15d4db11996b29478a34eb579b3294990387704ae32cb8113b187e3649597bdfd995f2f8890f152ceee84d6ce8922ea0ca1a05c2c1ed302bf1a01585d9f966af4b218f55f905dc93b37fc71f6280116286ce5a127d5bd20d686b16bbdb5b0075fb0624ac71e5ec065889ece18182f958ca02d19c6ddefa3fdfe7f64ac604d5ae59c2478e8c35c01f4e852355ddf152fdf45620e32c0d353de88538a5127d52d2f7d46c5e906bf52916000eded071aacca646bc69206cff7212f1526d592b046e45baf7af370f07ce4f6903fef18a5d3f403308a0f354d596ef8ad805f29466dad3e49de2d88554794b4ea738b98206d062d99a1d1d7b43f6bed03e01875006c322ffb3bc0d6577a4aa2f6d1eb11f242a7e78e55ff736c72c315008e28fd440a1a35add7d3e25edfadc79da0340a831a803bf7ecc292ddba1c788ad1b6497b0e0e5947fc8f35d33c662bc52a910c3bbd3830bcaf41bb6fde1f1f8af3eae20e41b5a2b2f01c561c5a1cd657b5289e82f378cec5e6a5768aa87311e93aed4f636bb818d4fba1cda30178d13c8a2148c083e81efad9154b96dec0568defe718e454bec396674623cff821235af1a5925d362f2744cfbac3fb49b0f76059ffc6f8c370ace07a35df0709c0d49b31dc05c1d4f6f28912bb6521b1e9fb49c25ee0068176da9b7e9389b5fafdede694ed285425e485b3e841ba70de136a2f702cee78577755adb98ba940947f74226000837ff0a2eaa89a74495197d74dfcac9079b50a1b26007442c8109fef7439de3f9fa8ffd729526f7b9a2aa5ddab97beb20825650b547bf6e36d8de3f4f21256d00339182c4897b17f3564d1cc8ce8eebb23302fefe7058994211f2837f89510db379804495161a6a7a368e14cf8d784d3523e2f6ee888737d6b2e35608daa5389c42f8bd54b97981c6b9d9d07f84cc7211eb72e315eebfdc8d322d316ba396901316474793f21cd05156acfa2932f00ce0e03f4e051166f9ae163ca01862a986c06a189dc34e78e8b29393dc8d2687801ab8a4922c9f0111e1e59e2caf96529f2cc4d90a732d022d63071b01fbbdf74e37bb5f59fcf632a79116ce2191bd364ba0acf528142c6d30db279f04f597d3f9c08eabf006a5704d643059495f55a90ed489197136ab1e75935bbc501b1282053da9271eda3b2e55b3a8abee78ee3f6b20ffa2604b477a7e1439ef7ddcdc95e317716d10d815d1630806529b7ee57df32e572c9fd28015bce638a4d8ab449425d69dca8090c40df7e9dfc9dac1e9c9195556146a6cd374b471ee791b16e8e14ff384ebd884c43876d17b9e26e259c5502e42f66a6ab01be75fa1e89f904821c416ad3da334a4f58247803bfa60b3d72a11c45f1a6ca48fe7f8195fe0b7d0ca14989d2c5b20d4a98cc4741fdfcd969329b8409af4d33f2518e3bb5b78ee113ed3f1db547ac9d1e908c0ddd64179607db18a4e46844ede900caafe67e2b3881464cace328ca03b1888d513ebca04affb63f053fe3320013525a6591198a8b3df598c0c430b346edc8f69bcccd3efd390b392e80e9c0755a9167e51c5152e12f414ae0c0270f6eb897f074ef5f9ab89c222ea711429653a50318b8f1ee2b433f748a953fd48884fc3fa3620f395b82124245f958b65ba2dbf2966576b8bfb855d58265a900c48ea00636ef94242a6483b4a6abbf0db76ae6a408741577b3 +MD = c45362d1986d665a2539781ed678ec107d9ad8d7bff8376977dc464b + +Len = 52192 +Msg = 330d8d91efcbc2e650c3c17349359c931d60649f0c98eeaa3199d66eab1bc585fba7f0ddada8e1663bc57a0d2e6e37ee86b5b3c55c606ea6c63ccdeffbb4627ab7a16e17e164a4396c3330ef7bb0f816c8c022ce469ad62a051e452c5669eaf031a60f27d32694c7abb4ec0177226874ab28b8a0126faf9db7e8460c0662e44f2f5cdcf5cb173778c2f0b52b6ced0e6ef6967d2408067f67a441d97a52c8d8fe7a6bdc69115f18b577909355a038726d73b17a426f88d1f094d2045b81c34e67da7c186cec25bce4943c8e675c2c1ddae822b6e3911c2a9f4f43d198dc7acff1163796e4a691ad6fdf9baf49e8f1961b1e9039edb4eb14de9c3b4819ab16e204f84360bb85cd72bc2156fde48cae659adda40c4a211c1615456270c636be100846497ed7d2fe93352114801e908c13bdec0636e020d8b9aa10615187c49be065c9f0f622d44f9840a97e41e03bb227ee155dbf99f8478306c6e0f3459ed5da8449e1d282d5e60a477f3c4713d74829941e51b05bf390fe912f865fe60d9386cb8ec31ae11beb71b16cf59b9daa78a216d08c101057dcb2b312fc9c5457fd6da35f3fd426ef8753e638514368fd6819def3b3e79f6d5226d538eab275c43c167585fd0a3999e13a4eabfa495a174016534f713ef07d1be25d6af6aa339e7809a7c9a4c3026123ad518d95b45d422921ddab6b1cebcf5e6eb56ecb8b752bd8cfa3f1dc08688f723557a5cd8d58c44bc3e4d14c8978aa4453430c0f5d22b585efcfc54fe0566af959c8bc47db32e6cd83d087ba8d7f58f518710e6b282482a7f1950fa353b13bdda10c9aaea6d5f0d7ea0a965d31e81f9845a63a86f562da655e5c958069624a49958b07a8f7282a937ff8c6df7c9b485562495a09cbc407e7bd8b208f2b51df63beadcbddd513db27ca03dee577801a55f8c4349bb3325056968c7877a0664253a3dbadf7487e4dbb5393a81a2880dfc08e7e91e5b494fcda72c665e1d08aba42cc7b779b5851c678a311ea239981ddbeaddf388ed6d2549ad7a1af75c4a39158c2f7ef730e748f8541e36dabd26c5e75dc4ff33f21d5a0bf50851dda839a0dbc0cb5de2771d0f00bb573f958d92aa810a33688a09e83287062da79b915587797321f0b5f894b3032882856d2b8a203b58afcc05854c533d6970889b983c41710bd9b40c25fce992141694bc277bbb98d1a0963104c840a1876771683d4c53450349343f8fa42710168a0a1d01c5f11bfdac6396f8ca6f6608790e7be1045177e1f6eddaa638d01f9853420a3b17552735399091e1e143dd353b9c613402b09c30794d680a0999132218d90e43de4c5d30beb9dc409b7279b615b792a6b5f5047726df621bb4c69d4c313b93ac996b2048c25bb0a5676fee039dfc9aa99c83431eb610536bb90d006f42e634e5c7261315ead2c980c3808c964ab7e3cd250ffa9f7d8ca66a94c10f03b4655c8fe60198007edb81533e78f7f692960871fdef7d9203a0e5a8c686fbb20c3584fb7482319114b262ad46ad92ad0c03634875b66e7edef99b96ccb368f2b0d348b9012c7250431407ef6a92ef022d7caea13ad92fbe65f332c525fac93e58cb12590a74dcc6606ccbaa18cd8fce6d8e252cabdc43e94f2a45b440b1bf0d5a896c5c0edfd35c1329385ddfb1e74a42a4713b47343d77e11b3ed4db7c9cd84caad1226cd1f899c1d5d88b3de4781e535c1d6d9b759ef2d222a8b724bff537858bcb5cc2ffaef802ff26a2a1d9c4a2f61184342724cae278fcfdcbdb005aa3bbc8c55bafcd790f4d019d44ba065f80d161301f68a653bf6be6b8935cc23f9555ce59bf71afe9480689c6e1d4feab204bc7bb9fde9ecbf2119c539e288a1684ca28f2f8b73b722ac5f41dfa81372a19ebb1812607529613106a795cdcdc621aaf551b87eee4a62011dd1d0f4d246ec627bb2b52618634aadefd744fd81dc49f6bcf4dfd872fe7d060a13e80a76afbdd865114957b9e4a11d3b1eef7a8d290bb961414ba2e91d9b448ed1d0f1e5f33989dffc77fc40f28f0a52443e4ddaf68d7a4bfda4e43aede34112d12fb1095a8afc523de71b94d63cfb9c11d87d4f8af7c1e2f394a44db77e87fcdcae53c82ed8b9279a40bf9fd8cf78814d6612d32f72178eeac1ec0ac2949eb6baf5dd0cb54a49c4dc2bed483f710969bf8f15502b2602b7a9d3c359584c0ca633ab5abc39093393cb4faf77554937bc30fc8dadc73a0cc5f9733222bfce5b360f78cfc0003cfffa2e550c14608089e2685582d24bd6bd20a2493f4d404312cd15064600520c3663cee40d08a93d88432f41fda7ff249c306cfcf5c223d3bad20efac66379a15f3574a5b83978a9ba474d6804132a49315e1f355969b0a5daafc3ff58d3bc2202d8e63f179015eca9578973a20116700410829b752a2fe2facbf9bb033862b8a8b4ed5b32f5c72dddd9ac0adc5609bf9eaf5ed750eee7b1a38e7bd6cf78b48ad83150a10f51d794dd377ed4bcfb4c5e86a47b90f29b213b5b6010f9c47cfac11ab7d9b8b88a8d4a31d7c77a49d827764456a16f641b25a7ada97fcceb2c7c84f6ae4e49358a317761234fa38bd5e12f612c981bad543b1e1ed191f64b7081fcf57e78fb8c370b42f581def88bdbc4b06490273dd530abc838400e20ec3153509e8f1f77c77b63d4765b3b2150d01622d5e9187de596bccc825fbef1d75538a979490b65ee3d80556c182fc5e29e20ac3d9e3182e46db7538494681213c6792f0f15036b0765abec5d20828c4a2b2a7722193bf5da9fe484c748d62aa86a5d09e759d0341cda2cc1d3dbfc208f617cab0fc1fd7dcf138b88d2e4cee29f2b2e608a7e3a6634864bfd55b16426b9265d6f89fe41c3ccb1f4862dce19e2fff0325b7eed09aa585050c86c0a8449d16417eb1a38cd6fd86167a761707fd1d0a0b3234d0d05a78f2082499e4e222fde02f04849d76a28fc0b2b13f531c7571b25f7df7e45f606e1de2aa976e50780e8e831ae9e43e0963f9789f17178bb1de76647b89affa36e5672900f7937fbe5f8fe2144a2e5f762a9edc9695eaf21cb3c4bead628a2d588f7c5fca431acc605142c0a33dc23773442f633a5433dc20922bc2a60b09654fccbbdb69025ad2f8a475a32a2d56627b313980ecaa88a667da2a14d7fbb42e871da4305fadda0ff199670e2ba1317d08823bca40315fed4d2c3e29c5ad010598f2d40330ae2effe5d0b5662a3209c3a5b7a4b3b761301d6ae8e685f1a77676effcb9a86eabb00f4fbadf4fa84845f2dd3212b1c4b29fb32ba0919dee638aff069bc3b47bff03da99e8432f285c5c671981f468fabe054b19d3ede60e79c51a8740909bdb40a0de5ec99f991d06d3bcd537c82dbbebf741bff35a02f442ab35bc9b9ee32ee90d76f8df32f218a04250bac41c94aab4ec3388af54591266b3ed410d4d1ec980a05102a9abee8de10ecf14a7502229b15aad0e486b6cfb5e55adaf0639934d800fe906b978c2ff21bf748d62015acb59d8faab5f0dc3018227034116d3052d6fb2ab7f7f1833deeacb0d7f74ae930226ddb8fa63b9efe78aae6ab1cfa7d8ebc83f14c77b08a5cfb4c7e6856fc68f6090df7475e70e37ffc032607b9136830af1ebb1992dd88d24181c9c19a3e79459306499a869795fdcdb796108fbed97fd956f0e4f17f67e8e7d6faab6c160467e7df3b50c6b69bbe124ea08d4705b8c462b2f8763b9e0ee615d077ee748ef2a22f203430c5d7dd0bf44eab4888f0ed4872ba3b9719426514f5f9a95259ad293f90529c032c01432b9b411e07fb8661502ff7220e337454b9acd8f89fc47b928534fcda91a23db5682eae639348cffa27c4f013a5303bc31f65f5cd9c5c0115be43a658a2d0921b08d61ee1b416d3a114572d7722b9a09a8c46d98e12ca469b30e4d87dfe5e085d54ba1800310d9b3f5e1137b74e75aac149770ba5cab5520a25401bb16cf3a76394032428d4d62eba4e199539f10d61209e21137889c62e4ce37ff65cb637781510d8cac1631994fc2c98cf67d328cda0d26c7a711aa5e147b2c8f2e6a2d4825c0f629333a77dd6eb40b56ea8bb6ff7272f7fc7f644f973e5dc4395b8f96fcd1edbc806e768abfb71d199f9637389e69efb838271ce6aed0ca81a6a3882b36245ba33ac436e4b0b75286bf802c120a2ee7f9f344981a256a65d72f6cf074548b7f5cb0bb080040fde8e54f4ec6ed934fd03fc64e62546b69a4476c3e54ed0875ed3b7ad97687e0d96497c7489425ea3b5cfc19ab0820116d0a54b58e321fa28209e201a5eec621084a10a00410457f7fd2a175e0f5f787d30c81c3d2f466b32e79c2dd86fd5581d90e026207c7e6b39bc5e26396b8556f3a2f40ffb3385ccad9a17077130ea073ea24cfa5da2764370dcb115b22cbd41800e724c1956a8c5a22155d56d0bf5187aa22fab3e1bb587a4446c0d52bacde12d5c8bfc1fff75fd18649fc05267bc32da78cf644c4f03dedddcd6359f7d7de0017484479598b61d174a3cf0aaab09fe640d754b0da727f0248c39b623de97e3053ea854048831cca7bd768cfc41a224224768880b89eb66803cdbb76643e1953fa33e4cf437afb3d1a593bdd1904f4b1c0ff244ce5e15e8fad40661ef15259bb9898d56eb0df77a9ce8dcaab000da1b594e59a7dc8f6e1d993c00dc46bd29a07bdade9b7372d3c8116f997c21f9093ee1eae6d8bf82beae655d114ff3a1b64a8b7c794313ce09453622125aace3a659bccde100ffa1cd42661d83e27e2b9341f359a6755489629a15e98e6dda267717f3dd924622536282a5659cbf70c28a2ebb57ad59bc0ba66fb6ad57dc322a451d8c0440d3b2ff4716291ea60b51cd61b9e960d518d5bc9d6b1f54b3d03d58d716922835ce370f42a5fa2ee7f1a7b6e189875b68da27050e375ac8eb718116f7a80a33b76037ea1cd7217fa897fce4d2479c2facc6384cc37b6fef46e688cd6b7bfe0c0fb13cf89d56a5f73025d7bffc9a31c6ea0593fa82de64b30e58dae6fc38759b85e8cda18cc78e80c9c4c1af262b4d0769bebd78140843fb89eefdc7728778c8602e734db2d5e501b99c411c1aa2f8da731a3f2d41a214ae01d17bda950f0e7beaaab464d826b16149d4df6e9ea63a274e41a280d054ddb6bc28dc862d793f9c69851b4ec462fa8ac194230d7bdf1cd6435a6edb8bc5a8fa031ca632016c131326e62d733f32c8636906966279f6a5d09a8e29a5389e7c621dd56348da9193c869f6743c103e24d4884fbfd35f93defb9b045d45a08662d6547a9a2f8090c6a47adc770f012d15c5689a26c9f75dcd408ee591258b26603eee34d44fbb10b58da0c1be55d8a7a41e4f0d54ad07fd7c88ba584eacc1268182342a981053b9666c24cdd2775e56d8c786d0d0e5581af3b968861b42092dca8b6e856eda0f35e32a4e273adb5bdfb9a9550c22dbb25d39bce096804f2ce3453fe46cde15b82934ad66f87eeb97ed4faa03e9d3f5dc6e557a6ab1053bf3f1f987dd08712916405fdfb467270ed926a3b3da8e6a9da0f452da4eff336f23ffee4ca380ae7ef1206ea7809dbcabea32bcad20246f3ac49835c3d3a7915187b42d747cfd1e7c117168ec11c2c52c93baa27e1ed26b331101081f42d2a84ae6b9bde8b1a7478c3edc5698b0fdcaf89a665e101cc1e5f24fd7d3d5e3a7fec307b5a69189a5b3143f083f92a5765477c7ddf749621865de46c49ccdfe4f1d22b351f1564e20ea7edd9f2bc23856ea11e4c875133700735fbd6e6defdbf18dd0b235a51e463f7230e0462310b1c5152eb7cee155e5a198dd7e7d4d23c2b6d436cc08cad3bb2bd59410a72d6457ea5c360a9842f7b2225bc04f9a4551fac67cbbc973695cf30b9b10346a54a673ee4791a3cda0e0e7ac4571f96d5b61cc480dc6701d88a137084a0e16379dbe4df85ea74a1603facb66dd56449d993b80640dc18aaf328ace4a6cf57cb412942d312ae1c91b742ca879abd8f7d307c75e440613dfd06cff02f8882d2f8cba115bc132a5e783fa5ec40c375fdcb6aceead0d7f24372940e8193b271ef7659d1b1ecffe5c6bf79e7869480a54b9ef9096b7ea015c5a61b52d5c3ad0309be8c49bc083176f1e1e6763dd55ab1d5725bba8c20113231021d3b6131e0bcbe5bc367a87060444c8a15d05685aa2247e01360d177a3de12011a36b860e60579b89fb9ebc804d4531278847547f78d0f52a08abfe7e07fe53d82c35fc33583c86f91cf1a6187bd92059f111e7eeb4888649396cbe35fae2711f77fabfb47ae26eb2a05a8ff715675edf9f4c6bccdeb6f706d237a1c69df5428d8aa415ba4fb11b5c8fc0bd45a359b4609ade26447ec11108d9f3ed5978a08dcb6f19476d5e1254a0f20d7929ae16e784ebb1617b1d119cf8598aeb1814491c802e439cf42f6be226d0280bcbbd06c2f499ac639c420e607d57e3e329f85ab555cd085e784a258e9531f9bb5458910c58acb676cd76202540dde61db4ac3921f25652d32038a91e951d68d1ec071f8c572db9e03640afb2e9f27be0e2b95028fed0084515805e5ad09d5d94ba53180b9a239cea012823d01f9f8a76daa60591224412fa7eaaab0cebb8c04de7c3e451c99647dc53b6e4478aebfb25c5fbc22605b9583b843efafa917779459ae0eb268b8ea1fe57735adfd3deb636cb41eead5037c14f4fc5b2ed68e070c1fc3096528814949732e6ed5fa280a4f113fff0efaac7378006c73aad18fe8e0c353d4b9c692f08f10f9806919edaab9dc6bd32b4bc6fa214d2cafc024ad6b96d6c8f73ced6e8e352140f0b3b70f3b4830b041bc32d39e854da585fb4a672da2bcaac77ae76460e0369d56626c0d3a8ec0b5a13e6a62df28847f8cb8ad3d9da8f761ebd05f251714c37727d1a35836d1eee4a82e3cf52a8f84033a84e7a139fe1986daf9af111f474a66cbadf770aed62db59d0834fb0f2ebee8f5fc6422913695a1fb4371c8f80c5dd4d843c2f700efffa11668ecf4fb9ab789656bbd4221d6ee2be33a21bd2fb85059c42fa05beba3f74f9aaccf638e37e07d0f6f4d706a43a58d296a495e24ffd45e25ee1a0fbd868719905056d725aadc3c4a73bf4dd9213e5e1440533c86275c6a63fb9a92f50c3187ae000db05047fd3fad256d3b0ce42b175a58d9c8b1e35af704d4ac7620a989223a186e9facb3e60fadd0e1b86400ee31521047833698429c9f05ca39ded2f071cb25f3f589630914d322b7468d0c1a34a203171c92dac5c3790b6e4e7e3cf9eee795384274c9f8f7a3775885d66a21b9a0add2d5351f36f4495213349d4c17f20602a606fd7d1810956b4fc6deaf8709047d054dcbda28b78676538caa64ed33acdab7d391e0f9082f6af7ba0440ccdb13fd28f695900d75a6e4a9a7242bcc2c52a9f808c09a0e46e7e2fabff5c2658875bab86040d577c721398024990537348dece147180cea45558fc34911a8d39990122e0b4c1eda148bc161758785d0f4b5100dfef6bdff9bdebdebf5f678b996f9a0145825d0c6f65d38d82a6e320bd56ebfd890eb21c0a309f9df46f2966a0928f0e5f74c9fa0e50bec5ea3bb7e5a6f2148cbbd63ecd0035dc007acb4a6775894612d395edffa591e786f820def4f1a634771d50f53a02550ad0fa7bb0d641dc29d44ceab1655cb1b498545c3e95c7fbb3845683c0aa391691d51b8545fb2b149f1e707dfe725c378fc2a5f7c1105078f97c0f788867cc03dad786f3ef1d5cb80fb6e755ba70cdabdfcd93fa4eacb3a56e26ef3533b7e4a14b9ee2cd9886fb50e3655a7acfa5d7960b82c86cccb3190a7b4c9fc4aae3a97a4df1d819277c316482f371f5235aa07e7da6e955256ba93086b4c62dd6324215499a10e18448267d5428d3cda0d653ee9c04a1be401d8c9ef9270d769eeed8faa55f312c97320122c1cc290a2d63166bd06395ae0510e9dc3a6d1ca9e95d92b2cb09e4034881ebdc31a61ab5b147117f818a702d5c8ee973b34e9acda1c999c42160d06d7f7f0b320c7f4fd416cb6eb11742d8432dddb4eaca922febad7814b8112b9e7224728aacba1f6f7243375289fa5375f9604671c9e900840af5b32c170134f51a1fa38fd2a34e239420d3e7909385f156dd1149997762413261c109675b417e6e585a432d30d4134495e6554d48a0f1628c8663e0dc7e0e6bd9ecd233861be075b7dfcd44c778e6898abac449826b202656ede8297f1c91be457ab000ea8ac4372579569fd203456ce7955b0aaaaf23a9218dfff9ca0675328db4ca58ef55d2bd887106c7b73ed7f394c0421a2634a5f4d7afd1da240360d099e249c2fd46b10eca0f0443e0ee45287983a20160c24c0d5e9b8553f5dafb9f514c54c77c230a32d19b799bb3de36137f25a345be21c0fea09944eda654eda79e3914edd4b58432875d8c589ad553bb8cf06c70aa18aacf83f1362e9d39def066f3b0bf6dc4c815d29d6601fc9a4428892a260a8b71b286f1ea82a04351788393c051c2b0187de39ca22e1e40f6b0625f1cf899c9f27f2dd1cd51cb006360670be91f8003784ca5ccb50d38d0b13f72f40e0ba7cc64bacb0ae2ca363d3941a4b8b54180cfaddd624a1e2bd613939a5f324886bbfb8e0a69867116696099c143806ee04a7d80d722fe25af80716469310011925ec03a180e2cc25cecd34c884b4d5a236773b6e3edd012c2be52eb53f045b35716822e8cc2e41dc548fc1a3fc406c3335e1b1aa8cca82c8b191ef101a5eb74fc6eaa330d8d96c9790445ca8eb693ef37b7dc73cfc66ebc33183d3e1b58d99daaeb9e1143782a0f9fa815261c2adc2758fb1d88ffe40a0ae144189a480ff7758817c790d78a89375fbcd3f49227c8b2beb14822e12d645ebe2315cd30d42d46bf798d7871cc9989e2c9e9fd97b641da9061c4091ca96400f23f9d9e7cae635676995990b844434c5057be09d4de2fe5f793f9055960f337a42019d6d4a681efd60091a155fc70cad1ecbae0f1a7781c1ad04fde405bf74dfc4cef3ddfc26f5707359f73effc06498b124549951905c7229f2e5b78a15988234d899b460c15d630c0e9ce2f4aef12a950c70d683dbe2e3689fe46aa3a023141ab4db8b08c5cb6792ad97abdf0116d512ea8f4141a8b987f1527657d2fd98f7deca55cc6492a3d0bfad53e40f656a1ac3550c63eb8554f24cb11819a87c5ec009af84e304b69b50eb847e46162a4f8e1ec284b902002 +MD = 15e0b46a0bbdb859e77bf3e2abd82a021e3ec7634b85aeffaf6b92b1 + +Len = 53352 +Msg = 6bac0985888a13be1a632010fc7111244546c4b5d50e44f22e153c238689b2901a80f19ec43cc73cd0aef17d0c3ad4861eba6eab1ac58bd554313c2773d685e1c7955684dd9abc3750dd5969e1ef12b8caf3071150eac8199835c6ccbb5407641cf41e7dfa295b7641f83f1aa6183280f2f9782f9e066286a128c15c868ba0e3c1a433d243730ac34c058ad9813e9ea73ed5aa4d2da0c1e41812171dfb02b9245ead7bcbe1ff32e4190e24ee9ae8bdf5558e84b325404dfba4fbaf584341b8f19a18e0affc553ca24f1af4a11a9ef731e02ceda9ad6f6e93eeec715485d007101dec49c8bbfe8ec59632e23a29e8b42586b8cf76edb38c739dec455bea380c4990319d5c47819215985dd600ee4f5c97f03911630e970f645a0413b39a0031669bf0c6b4c866af5afaa3b83c925a5750c6b79bb838a05f2ecd3bc3a5bcb0dd2de530ab1865364c5b670c70373c920e18af3b55bd9258e4999d993d7979d0776817f934cf4678d3e185a1e736157de7b653cb27b94546066d73266977f8e969ddd853492394b4abb4fc69038445a54bf45b72f9f678f22e71f6eb30e762821a55d147d25a77723c9c756cad68f392a3986f35b3ba54e5c26ecfef7810de24f297aadcb7bd163bee6198b3ce2948ca556b361e3d4e01a62c2ca53a2b3b9556596d0a1be0949a9629ca0c454c106bd7cb3559347ffaa6bdd27321d52fb0aea0b79d990a36272a0c55a07a2b116584416bbe7f7f61056cb31e0bebc76eb7528a74f000b49fbdef24daab896b0370bd8e9fcd5108ccb97a0f76bbaa18ce98a99df82ee71e04a0116620b3e20f0c783c48ce2c77d6a65cf959444c06d1399ada60ac1ff5524e16b75a90802c1e13c729f65fa198f1d937101aef87a9f996060e5cf68ad3576368098990d910a1ffa3ad21bcf55c624b92e8d8df313898cd246c173f3929352dde307a8988369fba55f0504cf06d30e6b5a81e7c155eb7c53c1d1bf0f29ef493bf54b5e45345202b24190b7759706390e779712efac15c689648f06f7eda9d7c559cc30703e62d3a5a50dba5fa10043371835b5da709929d7a161c26a58638d2e6312b5c60c0cccf3ebf463e99f31ab69bed6371e5df5e4c2faf297b2e4acb7cbb3b7549317c08d2178bd6aaffc1ad01ade012d27cebca5dfe3a9fd8e3cd60621ce12a3840c1e62b2edf1352f423c6fcef83eee834d4ddb92fdf04a48ab8fe6c504bd190533870c3cbe1849c3fc06b8fa9ff811cd5429f460ac8e247ecb2ae82a1a2f2b93388ad8035b9b1f1aa42a7a2227b53d426df19edd61ac029d164778c550e151ba85aa54bb69022bafb4e7f1da320ea79f0505297dd0027b201756172b5b6c31e7956610d948e605dfb8ffde87415d074fb40522a65a09e4a438e741c09c3832a7023e8ac18daf24472aa28ebdd838d2b0f552290b722ad596057b972995cdea7536a42128a9d60d5284a080f2692a708f437c9af1bafdc472177375dacaa5bfdebd2782532fe337ae415a63a9669a872718f4f71d86fb47c4b97f6c38cd58294000491cf5726f29a70b30955763118d15005bdbc3889bc60a95eff8e7f04dbd45aa795f6433c259c92cd39490e117d8c57401a7a81257c5b027559a4ce5fef26c0648d843c6954ea130b3ffca632610d4fe96e92fc6d7dd61d830cefc10f45f0fbe380608bd508ebba14225886bc4bbbffa7c2ecf1874637c33121559f3c659bd4cb767278a7c8075191ea44f6d6c4fe31231d70a89b60e8bc279fc0b20dd89010c577a24a081da69e29a0a73da8533eab05870668d2514fd00c8e1740ab25367a788cd84b1f8e306b854b6ba45b80e336f408967b53a3d6c789f742923ed4f4d98dbcfcc115a30d7e4cf3777317d3559a98a9082747dde46845e128f0ed6e34f4ab10f6f511e4a69f27a0b3f203d5fd9f9a7144b5d688e07ce954b3a1e07a5d947b8eae2f3cda6198be5b0768480d410da269326d272b34cb1c58caef4080d781a4400db7bd0ca730b82b5b1f0d038aab5797bb96634e471d87f6552035080983cf2ef9d4bd02e12ebe19975d7b4041426205c579b17a813ad1353d7de69b5d62a45f5bcf6445755b772ca36bba4bcc9a6abb395f3a354aeaa31e684e7cc03ae5cadb1cf0d95ccd7f8c6c6791f1ac957b18bf008e260a0af4a5b7bfdb1e0008d6eaaa227f45cf4f62a4e1cc1649ec02ad141b004f9c7e29217e0a2a6bf5e230fbabd557c4cf2765cb6894b844e9927df705d723e9c41b0f39d71f924829ee181cb662a207a0eb76837f8c1461f9266d2394f950a6c768250457fcddb8e1ac2903b25cea8fdfa3e95393d1c9b6a3313af7688b6fcccdedd149a7abf50445a5cb7748c819a5b5d82801496cbe8b0d3a4b3c2a9467a4fd337cd26e34c0747e60673f20b016914a109a554b64da285fc90ab9811d227680c18f65559d284fb4656324e11bc99bc5d6a71941c107d4c266de38162d878a7e1f70cb04f014df0e3d29ee34121a0b4fafb713d28c2cd85e9a2f7f90cc7e271ed689cc22356b6ab56f1f65c09cf1280f25320ca7cc307c5aec66589802ef96886d412f57721739d183af502ec1363b2ebf81cd6889fd08dee5e989d6d8c220e56cffbe4db1ff94890240792589d18cd3060a1bbccb7ac4140b21daf155df0b5d5c2d3fa9f90bc2057339a64efdaa63278036c14b9b8ff822e9761592822f9f17c4327b1653230d6e5e04a05124aa0852b76d85be0024eb30045100606598263c2c763a3ac52fbbec4b082fd507b7c27b331831bd0321e667e61865040903e6f31c6143bd5a1715a6c3ad1a82acbadbca7a9d8befab6e31ee16350a25735928651d5b604817c363c54d5b2b011d9c996816665cfd00f414ee1c0eb76cad8034b9b6cc5783061ced70727a28fa6243457d8fd96b8e0a99d78f810d3680be625218701cf1152e08fad0b972da14819926306b60824bd246c1f8cc984e0baee6caaad2b3f6a79770d40daaac09f8848586aa346267dc5fe41b528519c6b285f3e39664f92ee04a3dc14ecd8e7d4e72eeab137147e3e8b9592dc434f7671f4c73e705ae5761694e550abbab81fdbd54bede92ab76be17e98f3f77629af9fa0b4d1c1e393356e9aba2f77dcbee53ed31dc674f6959c013f66c9993966a44eac869cb0a8cf6d6096a0bcfbcb53b458711308e733357b181e8da833f59cf0f988daf3bf02f09a9719277dc9ff2d29c33fda29b2691d8580cc8c044a3323124ac6107b6f9abd297c82bd0644f09191f98fb1ad58f0c447e5a9d0525e8a9f849cd4d59824d87bb68b63efdb0f4827a985f168086d72b04eb136f936e36468c47a3578de8134b2be3e5d1e608b5e65bcd2f53bcf425777e67e0465167b49255e5d78a8b3074808ad1faef73b3babc2688b1bcb667a2771bba692b27578b14bced11eb3ba297ad3ffaa09d8cfb2c8c428f8d58572976b343ab5525fd88e2542725f8848586a55ab4267de5192633df17aa6a2f8581c8b35f044c3dbb40e2dbff57355c5223c50f501d39ce027df63b0da3f04a29b6c000d58bf87a4ac8b330ad49707b88c220557ba67d602f489e2b8c41c8b02c1188210f09fee490687cdc97c450ea11abddb39d8bf1a488cf5234fc4b9a6974da459e7345098376676665278f7db0d32625b21e923ca1f6593be0c58a0d7eeb5922006b09bf60e40f9855c474a0d5b87b20d8678406605f3080b64fc6caf678d545cd5e1bc882c3a63a33d5396162a7f1f5b0de28f9e7ad9a4b3e03c679d90298d690b444cdf1f9757688c4a7675e87d1cdbfec48bb40c6e0c1014754c13073e8feced44c76b670c472dbf8865bd14263cf8ff9aaf473944a0c8684364a02b20ee41128fb6ad80edb56b4d99ee4c3bfef24a76e174d86fd1f54552335bd57a752b2e01719525fbd014b9bcfb6ab3de6bdf38fb1576d83eba9c0f78a19c2373afb8dc4096dd554647f7919429857469f1565d02c32fe71452e79f323aa00ab53539f4466c09cbeeb9d07b59a0a91e7d23ea2f14670a559f3f7a7d155b020badaa010e897da4ea539a31df83fd501276781d17a66d80c42dc4c701a87f2c96db72b08380283941138d9e5699ac14e0e46261af3f634db34ea74ff552339a4cbd23caebd1083160bcf878490119521a45875a6e55d4aba3804b97a0a904d59dc131a2afe29a17b9ae6f425f50d1b21f283b59dd803e24f5412610ac236f68fa8630fa583b6a66cc76669ee21f719f7ffb030275250c64592fdb5d6037dfcee38a86147d51d5b9099352e079b35584ad3c82c6addacbd42faabfd0758cd262093cc59377bc88590183c8b99eb31a0c377b1f291007f8eee930581c4468e3dcac1b53f9efd1def134c63c8cc9a51b80af255cac2443102f365f3883657280a97cb4d5ba3e48660c23e932cc72fff6ac64c9afb252f2ae1f6785e5c841203522cb87af46fb76a9f45f5b200b332a27c9f8e6acfe44bd2f3a2d52c43d7ff87e03490265429fe31754379a98cb72ba1b73fbfac8c242092ff9c83478657a71d7b555b38c1fa4242aa64d36118fca366e34be7487b1034d0cf8f8a956d2b912bea372298840a090706510ac1ecaa2258c86e0e25e4cd12f52921f3003f7c451bf683ed2ee580dee751b226b050e82edf2d4e3d2d0f863f6ad6fac56f46714c5367e1c2e22b84464a522e30188bde5163dc937c47436144969ec308c9c8332d3d05f8ab9ca040cb98d26e2fe0e6b5124c9be6d15bca86aae04824c4f80ee9703f9771af448ad9f43a991a2bf0a995f90333ef4652ea1ef9b29ec402e360bc9ec3e7f3d6c2327a49966fd92c301ca58fee6c55e212ec51b773664cca7205d43e30bb2729fee04953151c533b88860e5b760dc0ad8418466e8a6963228d4758d8eedcb5afe0dc6e991f67315fe031f7e603e0dab090b526a5616fb2141c6c71f565124471516d12a41d191ba1206389b6feab48f21f0d18e55f40e1a707bd461cfd247c7537dc5dfa75fab8073065ec55cd37b57b176645b5eca397e3368200d51edc07c57c72762591d2b19cf87f474bda4cc7546209d59d70617cd19203c6a830008a69067486add769ad6560f8c21e8cb12684e63eef25534239780187c11e9b59b067bf2db418b187556c511a87584a307b138d4cbbd6fe0e76e16c5818bec7af1ec98de429f086f351b8b12bbb807e8f6e0a3d7d6237d78dda12bcbcf4101cca7f975ae00cbcbe7648516a74891f8f97a670e0170cd147870e15d7fc7d9d037179d70d6a8605c1d8e340623d17bce510cc4d5d63e02ab7c3baf2a760daece26eb4938ecabf52f6e1c98c83ce8ddfe8c287aa9ca907cc8d0a85af132f34862287d9d2c548de2bc758a23db36e14110075808e8531a93f3324175602b3b2f12c85909d9a2c0c189b07185cdc66d4d895f05f010042ec090fd919ee5e327db7672f80fbf5bd70a2dbb4d1efe5fff4bf0ffccb0bf525fbb48bf133800ef5bc5f3a4f52f4be443350ed287501b67e9c4bd6616cb54c23fcc80d330c13fa4498720fabae90dd097cab3a2bad97372ef60652e7eb06ed8218cbff684daf0a6739774d0d3ad83a54743a2a8521bb50562777eb55f007c08a7647c8589d5c26a5c6f65b3ba1d3bd6d428526fd7874e93d5a260a7522beae853fc3d0cba52336476878a3fd89894f9b1014945c5acbea2cb59c150d2a359db99ac87f890d0b229546848c1d9b03d6280370dd6a71c63b6b606076e6af74766fb0dd3d597c1dd2d789a27e617e483b5a45206aef6270c44284fa93c85a8122efa88a72059a602e55585ae193da60677afeaca2b3d8ce6ef949f3d67bd3668881ab57865310dc1f57dc351e79595441cf559dec7d79ea1fd7d6d2a6c6c12b8f6de1cde10c86998b243cba9bdca12bb0a37379b217edcbc025541f6a72cdd621fa7173ebf8a3a05c05a172c1835aed9e3c80cb5b47dd793a2cea638c479e71257284d10dde10f8784233e3f8382da3f2e3a3184fd6f1fd7331c124730ddd03821b4170ad8775a9c9231997a9c1c15494e004eaf58cd05e557f00ed878c3195223ed1d735bc78bc35ef7c163ae7c0086b7bccc8b73023a4c75dd043308c432eec225b8e0b43c438a6f083e61572cfc761fc233bfc8c91d7b01259b0d6d4bad6c811081e99e4ff25036c5791a02a989a5daa30ca2d66c300fae7c2bbe12d3f959e51000e4569d28b34ac1f9f45d7c38848cf1cfdb08760278c2434edb95f7a74562b6ae67998e47320f804966b40f89a08b10e5ceeb711524e11d6ccc632127ad9e76e2f9c3bdee4b1982e00792eded786982f704fbd7e8b28f5d1e2716eb0b00dcd3670161867e7ced3c464d9691d47aacea7c03c634ed9021a4cb720dafb1cdb25e7314ef828835ff2ef4bf2b95ef25d9a9dd41b6f2a45c4c670d13c3f9cc82b36acfbaea2c8c04d3dd63c2ce649e18543393555aab9d5564265ba2e653abce649ab549de0f0a67efca2bfefb7851b0b12a56a53dca493a0d652fa5d147efff2a60cc78378483edb777a5ca3f5bba8d84f06fb7ccd92878bc95f1730140f983995f8d9c933778f4cf6879cb0689291d342877137442cb8fd65b69b112c9792a25e9714d5d926a1bac0f0067fd8b3dde3324d53ee0b1a2edff07c0e6726bbf2144810ff1032fc7d0b1ede23760dc594f269832908e803f11ab3dcf699c825c2799c8c22e205a22a29587979fece71bfe72d4f7ceda48f0a94f6fcdd11db7d0ab8a33206b41cbfb0fab6e89280e55f64a9c7d9d2040767803701044a36266ad0b9a22b32ec3dfc18687f54f66218368e227f4ab6b7d8335bea1b1dc67073951e64e49e2ef43101695afde42b0e309e42399ccaad6de19aa3948d6fd82788a6fba1b0b48332c075abb776c1bbeaf5418ad66880418fe845611fa02108c32e4470584d94b810b101e76933122e602ec46de12995f983b6dc9d72995bdeac2d178371046855f4ce4c24577c000ad6a5d2f44328315db213065d75c347e34b4dc83ed41d55e348ddff6a6999b3d9b6201125e2ad7af684c66bab10650a9e0656ffa969e085e973a7c1c187d152226768290aa7ff9b4b6299b48e2bc6cf97460f63cb199420efddf43b32996d066e5145c3ab7a68bae5b252890fae2fbc5774419dacca834d7dee8c14c487b5f644dc7e870e442e004addba913481e8f965f6b4555465f3351c0e36f58039f14b2c70dd1c3deb9a94044c9975078d39af49363032ccd32d0053a5bc866c98692cae75282b4059f49e9b66b7dd90b86a068c9a7ddc1bfa79d5ab1be46e938a65c25353285b1d7484489592db6fd6ebc225b58c62fc49c41edcabd87756faf82c34a272a555de2691b87c3acfd6e10f8a354c73a93a5f18663fdb443ce5abcb07ab243b67c08b566516d7c559b8b90a0b5ddab7183d64dd9723c3c8fdc4ade93e4f5f1435452aec468b2f9b42be67c68ac6e6bf78ae60fdfab2ecca809a083c1947dd66d88cc5cf7d3f0b24518ff2295297f8f590345b5fd714ddb48e10c4abdfbc269a193c63e95259f3c750d4621daaf998c02a785eeb76711eecefceea1ddad5c016befd0d210c016fef0534bf89d9144f880c2170891ef038dc6b7b827c50bb35448f79ca5ff56108013a581254280fa4b6ffd89a2119b9b2eacabf92af8a950d8b5655a28b539e4566b5e76368df1320b0cb45e39badf51480d344249ed08cce52d93c9d8e6fe3af863f8ab8ac464749df380f53df23cce7054faf3f316ac80203e1d4c44e9156ccc99fe91b08a4d4aaab0edff2d6c365b1e107abec509f70300536c51eb4011f27989fab936443e1c87d145cc966d4e9fd7bc0de32e3b8ade1c0a0b8b3a806674559057828a869972dbb132fdf78a07f503d45f019d2fda69c9ce7558c13e956b0769afae3bd5f1e60cfd4ff3cf56d50348e5d8aa905b684e901d243b0dbf313ef5526d6cb896d9de91f1c75e9c3848430d6cf54eb642b6e50572b2b27ea69c78a6071b7e9f5da3c5115b639edcc2d42cd7e64f5e6d8a48d5a06b8b4fa26969909fd424343e9f0251e1769f250f6afb291ece416a24768088e7642873079c1b2f5966222e44ef57ddb8ffc481b2b54fd0689175e289bc008750f904bd1ca3139d6929afdd10a326f0de438e55552624bb4bdc4767fbaf4b5953a6ca9e6002f573259b07c1307ef203e7ee56e065322c322f1b505af8e4c36795d9c497605033493536c46b32b74bbf5c5cb8e3616dc8ed88bb0b4c1fd0fb4a6e2e9d289c0f5f780e89804b9600866bb21b1ebee82d8d35ef57e2bbcf18756a62f1bed27194dc98280fa5d2b8df44917fa602d35815dbb3d95e711a851fa45ffaefa4159f852d120835cfa139a818e91b8a1fd14fbb46efcd5b20e8e05b1a83cc54d7726454d38e2598482786ef45ab1c33a0392d62613231ca9cc75f4f4a8e2dede3697e88625506a3a9e63f398d80083f3e6b7fbf9d33ad192f065080b6d7b607327b3ca45c1f31e48f6db10b42d0561964e8b5275d5ca5e362566283d1e8fb3d5f182d1d23352de7531e8ad8f8448c3e9e517c3e4425a2a5d11813cd3e4a43fcc3d0ce674a4f51088f892b372035212b65062378c41739dce5cbd2d15e6446b20b35af2753c651e4af2e208a5d2aab7c33a7494b7fb9c1f53af23e14b4df6a198fa73db1b22296e83c8df95701ad818d84956c4ab975d18b2b2b941bd404349fdbb5f8baf7fc96afa2192421b03659fbf250fadb03e3ef0b40c8935b3e8b1c9179d27e8787ace7879a601f8edb4d8b33f77a7391018c80f21659ba6746cca8aae49d2dcc03cbf02c6ff369d2f56b9bb1fe7274f114c82dec167f57a49f516f48a66684ecded246faad3391a2a109121281c96d6fd03f5c35cb8a19b7aab1c70729df225e9b38627edca1058230be74c22bffcb81a64a727b900a7ef4fb564643096764b5ab96b92578dc53e656e43a4d57762dcb1982273a1e80d600f3c76398af8ffa768255e18b0c460b337622d9108edcf2a09c6ee0ddc17ddd50467db58496c92215d20e421bf17e7a1e00f2e7b85c94b8a6c17915f32371f35745f1a27359939a17fd187154d2c64efa99ccdca12b2dee420b395cf6bedd96aa84bbb101528fb0f1861ce5c22aede85da3293e6785091206ec182c74ee3155be854467ab2c0e1536ef7415e06435e4bbbf807387e4c6b269e69deaea4c1daf07ca244cdd50af156c9bc6983c193eb299317b126ee4e74def8d533ec352e3111ab5c3d7044ad35fe73d8cd341a478d07acb619198ffdb531c42a08e9c9d320a6beabb7cdc852b534b372f6d7db074ccd4cfec87a280235054993e60c2858b297fdb63c4b28a178e1d0b26ad6ca7a3163bc1745af8204fd44d03654bf1964ecccb0a653522e4186eb13c1b397b04943b14428182265ac13d4a13bda6a669fd82e1fa2854aa0dbe73cc4c7 +MD = 1557239a31d0cb76c7e2f9abd9b0fafb7035509c7ae9805bbf6a4881 + +Len = 54512 +Msg = 38dfa60ecb2bf4ccda5a8ec6d7ea8b07aaf03ced495c608d897d975334c81ae95bd5a85aedaac478893c1d7b91334eea80eec7bf7dc70bc630981d46d47e34e38ddcb6c3fca364f011d1d2fd21381bed3981d250b1703caf046abc2adf348e6077fdb88f209f3efc1c229696b0815bd67db146e90ee05911aefb5d497c728f28c13f97078025b9664f354f8c6697776ef68709d2bc9eccb4d553e9e9d4c19f0212ab397345bd3df55414e7286a01d57d4a0a0453e232fb60227b46530ea826b71247871b96ef3270d3c744b2e547dfcb21431fb4a82550dd3c7a5ecf53b08c106a1d69469c4401a073545072fef2fc1f2438433c37fe31f2cd5817a4cb5f3ad2c235c83e7f43104dddc5f1afde899342faf35634b74508697a1d5b1c9d4096c8c1958a496675c83eb92211b3ac940efd4c7c41e450833c08edd2117df2d809b9104799b07960913dae7197c4919cd416c2d9ed94283e3598ce7f2110f1b1fc6c5753dbbbe28ed41064bc6b2bb5284d550314418c6a015be0c42a721dc352d5aa3dbf3ab1c687f780840a75303fc0e184b83524133c5116aa78ddeeec8f43fe3b6a959ddc50d16455b6649d1a58ecf86988428073c6b8cebc929f7cc47e0ddde787ddeb82a5f68157a1d1cb332735face1c453cf231bdebdfb97904efb837dc763c9d0eecf07eb84eee59e7c1d5224f791b4540d9a5e9d5db95716fb3644961af30dfed6257ef70014404d90d893c5f322e4b747049c2f478cf92a359aacbd65b0caa702b02d310394cdb895f6c0993c3fd5ec0fe46d2b17e0fe18928b346a24277077f911ab102beaee5dfffa61351f32f860ccdc4a172b4fc68096aa7422d2c1afc02dac712ad58112ac4345ee202896dcb4023eab5a0e33f2e0c65ae45dfe19c94e14f307d79cf1db31e47bcfc0f4e5e364449e098a4d3803b7863eed92028a7d404387e7aceea7b87d780e9ebde0aabce0087cfd2e44c669837aa928558cbe0c654ddd8911472d3aed5270d37d984fb9c5c24dfe9ca16994c2f82c0d2ef90f171b785674bb330cc3102844f666786f7a6416a3767bdf8c25f4a35a0464d4082dd167a532f13e90f1744dfd802efd647f6959f00d424bc89da6e0a5c6bdaa33a135a02c3c69d684468857fd093db3d9294420c61b6692895c4854819c9ff80c21a6966df96b774122dacad5e9f928380862ef98397f3058f25763802e622a0c1fa2deed129cad4216da1b1aab07c70bad643ad8dfe2a1a1e0529223c4cadcce0bc8de1be073f511a304cd3dd4d01cce88c6772a8747631eb6d864ef28306cac7677089d1b67cb3a57e955b1fff895eb2ae848efc803f109d6475034a1197621d03c02c2fc0ebc269606490974c7cefbe46814ab0aaed80ddf3de8a6c80c65e8b99641303adf3450fdda1bb6ebf4247b75b46eeed7ae8495321a92b8158fd85b82f44867303fb063efe3424cbdd432e43f6bbc2da799933a6f6be2eb11fa39e4dd048cca74c6dcb9fca0513d730e86c0a1ec80ea02e66067f7a05db235f1f72f181582fc80fb05dda49fcd0ba3f97c8b5db55196621b88985b6677a009fdbc94d4c5cf5fed52c84968302a29b92b90cec354a2c55dbf88561b1ca526f683e6a08383c67702549077b81fdd3a2b2b7fe56358f8f95e38cc3ba7318ac9941b01fcb4de0cd47876fb0324ad7a9f926f7679ce20c8a4dc1de08390537d0a6b299ae3e94306faa83064563e6766dc576e30e6645aa65a5fe541f866e1106bd4362e008141594c2a2768fb65ec466312be2bd5b644f67c62158cf48b68c96067d717dd2d67586b76b2756d1b9a7de62cc5b3a2349e4d9d8b251df27e692c7aae72f4d43e03a8bb06782625fff091b83e1b84e67fc5203023aa718cd050ae3d10a0417043c4aecd51ced7a0638d166baf260c1cf837f2d6d40c142df1bdb30a26c59a5bcf28ff14f14d1686e6de7072f88bb5b02e8559f414c09250831eff7469794bd1408efe146d797f240a633460c2a31e4a933bba0a5e6e688ee4d2d7fe5131f28b4885406e1eba5e124e99c6b76612a236b6a987ac197c034397a7d12a56660ae4379a5a649da65fcc1400dbd97b40ee1f197d673bee600f292bdc7f6b11ac1166ae4ca0aa62c3d0dc0b26b8597ab45e6e2c15cd4c45c0c88a120f3742fb7a82ad0d0aa7a1f6797dac8479f0c9ece37fae7f112e5fa7f4dbe0daaead448c37fb01e452f3ddc15da2d82089197d3a64de5a82ee0ed89da2b5e7e63925e23c8ad71fb4c409d06bd6ecc96fc29715ebaed6ecc80ae3699f20f2e9e54d45ae94d9a3510ebc5e0c5e8bb7fab2c50e16892805ffcef640651515ff81284990fc1dbaec4042ca74f401d2910699eec2e19b76f7edf84eaa6d97e858285fbc7c6d4f951e58017cc32a0e420457a5ce6a198b021941e46285e5a01e7959dc247c7492feb622cb31dd10cc508e8836e27820e05fd68603e0775fc63eff802e0025a4905e401af088273ad4949bf2fda9619a23f6dc44e726d35e62b03755d5ddfc7fc04a48bb21ee462abf74b9323aa1aad7de5d76e8fec43e441e18dd25642c55589b393c7dcfe29e42d58762b0ae69d87c67fa52fccb472cb340df4d894969e4d199a1a7fd6af3b425bf233518a9406f0a6963ecfadd0e132e838a04fc06151f7d3429f79473900c45e50e8cb4bbe3d2e45b10a16d94a776084e9f9ff81acc69be0328c7ed8a562b15ef7ff62f66b2989ca5871ccf92a1e9f31a967af807ee58167f2475631fa48538271dede33a4b44b5d13dbb8b476bd3517ff522965df96f1910b3ac9f94099f0f344ef07a970c5ba286bb0a3b3383b6b5d732233d7d7c1328604cb9fd87f3fd1d9fb98a501d7452050e758559e7782892c8d3f967e6f4e8d6d65649f78c0213e5b1b437fe3e11ac300103c961c3c79d7abd6111a03ae254a6eb76c937e0a277ea12e575ef5972dec5e6cc22ed58e089d03d501860e9d2eb1b3814b41956639dbd4bc3c0ae20066e2928553e4727517225b1275a446425209614b687163db3f9b1c4b594b5024adefc5e358819bf98eafdc16d63a54a7779ca39e2ded90712107a06518e9e80ceb591f0c37cef723558cad688d11dfd486b09f00017cc530c7678991e0ab51bf0669c78a5a902ffa5501f89100f190cf688e7dfc4ce5aa211a03fe581a5a3345e867e6e52792ea867456e21799a10fa2037e661777f1e64b002228402cbe38a7779ba3a3089bd1d09bd29584bfeb035541c782dbe86822b7620e2fd37f9f06ec9d4c274e64728cdfb3be395fd99515ee09b3f8cf0812056b290d3a997bc5451c41c4996da2e0c2bca262f5315168ec774288f17b3fb638713b68711988f89e404b4922892cad1b6d5206f2818e2c31f7d68f9468f61e62d18267fddb0fffb85fa224ea2969a141fca9f258d7f8a98b77ac100a1d93102c91e551066776a33d81309d18d5c183d970916d4ebbf7a6a3feac537a2280553dbb4b70b34627acd2aedcfbd5169c1d8ed2f1c1fcb6f3ed2094be9f0d0023b53f569e0a2dff88e221ef8e88487262350529b0348b4f5444ab41ca3eea3ee6f7d76bc5689c1a030cd24b2e8a9a737b94e97db80f230f8274ec0eb8763b6430e5af01a8d2271ffff48dcba54af2a15002e0d7f09aeb7de6458a02709025fb68456f202f8ff697e460f976d91079834747923e401c0c21e67e2e26dbd3d28af8e0bfd042e9320a1919be54b32456a1c92aa9ba90dfae83ebe97f80df896a99477e451ac92603fe08e7856d1bcdb2833f74ca53c829f72c5e4c261b65f814b0bde7ac05ac8f90fd1891f6cafa54b5b20fed9f12d14312a3a570cafc566af958c2e29a9ad36c028eb1e1b872360186b5a35dd0fe917525702a1d142d98254118be38b8e02605803a3b9d746db91c4e14618c051ff106591c531aabb51572137919b1addf8ea133871e8ed1c469ed3458b342e57ed940d52e8a31399cb39897023b15219ff18a43ffc37c787e30bc6108004618223269c22e362863ea5ce1f73b8d2cbe293906d72a902f10a3f5d0fdacaf614714e2ca47a4bec8d3a8f79358ac75be29844c5e178fee6e423ca0722fcc2a5b1a5ad3ab8d198cd931de6cf7e5de5c920db814da2cb64602b64f18ea1ff1d8fc38feeb54bb1507232492a355c358ab7110ce77c13e27feb413e74780f6a2210b4a07140cfa1e976d55ce83f51da2c823dacd5f5d746b804a0109147cdc686d52f77e351c72bea4816c99f61e19451d7014bdb3f4f709328c2abf6725f8ca2497e86a36cc4a7c962510fce419dfc8102066a65bcfef897e44331028c47350aea3c4d3fe64abe0d622e9fd332f98b30bfa77913e368374cb38c7053fa17482743e34c2772cbc73ca40a0a7cca56c8f75c7f0854670db5080318ca4950424e9dc2fe03d886ca6bcdb46ddff97c682e2b64f788b5ac720a807f72af71035ab0c4f406f4f196b904471fe470f7cd90337365ab8aa62817a01c7524a06997b307336378afd1372a391f52e87de642516135cb058ea47e710e5280a94d71920dba7f7ddd8515cc9062dcd9f457435f3e4009218ff53ef410bdb92e6af75766ad52ffcfa0252ddb8e2a0631928dad98b9585405c55ee43d7926c6db044e59aa24693ab56af087e875f701e64d8173635502bcc4204c22bf0ce1e212efa306b0f565c6eb8887c287da4276547fe3336393d789f93b1d790d6e77c16297a5fd3fb2b11acea34b5c1e3da4ca28b4237c0de85f62116063658cf040bb5686b7ab9acf03accb25cbb320128683cf84b2abb6e502dba95abe66d244d5564b57687046bcb6038d9a897641fb7029b56c214112fc5a4d3d648efb51debe18cd643909e80e40a5727bf503e85afa2276d4efda96a0de3d2a3845a1a0106379694799c6e3364c091634aeea77b37d1480598ee6b664f7221c2072e831ac5e0e8b7c0b45ccc730a4e57f07a8948771566e547ee3f6db4da26fb7a73d7ae5163ec07c2df50923871f6c95afbcb3598f9e9d604060dc564a24b1885320006d248094c242532cedc7cf1823079558ac20239a0773dbdb78652f7dfcf72e56a6f18a64d918eeac986b4a84a19fd0f8f1cbabe0b479b378b4372911a013b6e21505a2dd3af2361c85f9f81e8bd8de18bcfa8e0df1d286389c28b838fc29583759e9605a626eb7d168fc7e526c534b3c8025408e3a0ed2af92c243407bb890cac8154968e9fee27fa3db43dcad9f76d8cde479ce079f17222a8c60c49941ef10f201d4853c23548bb92ecef9da0e0f7208b08069e4f3c254d5ff8731ff45d1ae6a47883bc36c7c6a2b5f96567c3f639cc301face5cbd729c27842d14f834c707934eeaf92a4ad8bf7ce6305f0e9411bd7f615f87d95c968c91c2c8ea2eaf6d90ff906349db3ed7d0207b039ffbbca868b0471502d541ac8aa733f12e0d1603ef21b487aa50c91860a866a685ee198602e83bb1ebeb0d333aca402c6d1df948868c13cea7256a08d597318f9d302b393099a7cc9f953fb9018d8fe103cbd999dba136beacb3a237935f7435627c6240564723ab9a3e29ac73636b959eb137767303a5ce37a602134e73a72e622d7f2a0873280568708b9bf4ee7bd0aa48836cd115e973e456fa2a5b6632d118bda254ab903d3086c6b5e62a812928930c4dfb6a7a6a561f510afb4ec9afd3f2c7ac6ed430dbd3719b394978ce0be4057707a0c383b0db652ea4e49d00968d8cb5ddc706d77c54b578960464179cb95e0340db60d4557a323a68a4ca9d5f844312b6fbb7f6a74acee95cc57100441f295b7a29c6eeb0c9232eb68a5c02935ec268d88b6c10d50c2a67edfb341a9a6be3ca240a6a255b3ea4562f23d5d2ba636712a2d497b89e3f647eca1401c9284619e9cf0bcf3acd41325b22ffac703d38bdcac695cf405b5ae98891be7e8e46243834eb9c6a718f7759a8427c548da44542db841d775aa4c5362fa5491efcac9ccb35fa3ac07c0a5786b80e38726d882f72df9bfa2469f324e6dea5424776a4064f578b6565bcd6584624d6a26aa2414dea414eaa5af0def0581ff248ac9ec4f731241fbaceb66c0014594c48c1ce7826f5ab4cac9f81c09e266e1cba92d797e61d3617997feb43d57ddfcfa9fc4485514167f68f468f30a4ce339516bea395696fd8138fddedf64eef22e1349e9701434a21dcb0f48bb7aabc2afbfb64a535e7a5b4841c8d10ebd2e4cd11770d5864736c437fb03e09bdf66c9ea1c7493ef1e75b45f9bde2069d180b28e0ffeceb37684457501b678bcc3e7c193708c0e371ff0cf6d4e291319274aed0d02da1d1f2a85ec7ee4125846ad957151c4e60351e851751b638ff14647f5c6f5f8ec0af1eaa183fbacfec86026d8a3cd1f6aba6502026e11e1fa0417baea02eff91cdc523f40d09362610f32b5181daf89007a9cf36982f6d05192b507906ca20e52dd69b0ca9def0d2576e5e2bda89e0a908d1d45f07973397ce448b64ecbb73e76535fc5a7b0b6b53145a1352f0c42ab0239117ffe1a2f236242f7508ee6d59270875b0640d191626dc48d37d71144733ec7a02afa2ed396edf3ea5cb786a51028c186fcfbca281dc13ad26f1b7f4c6b2c7ff1cd4e7d069a04414a623173cec28749072e416222ed15f19765641d0199b5a82df061cf71388f723fea6375f9b0736607247b6028db512f05a21bb40c07bf8b7b1c9becbb7777cff07db754cee1d561ae670f8de1ee5d3d44ada60c14bd337104d7649c8d60a2a086a294d7f45d9682237e67b1f62e21637b0e6fedc2c1faa0f0ac24a68ff9f92d28e262c8142c9c118ff1e9940ea386e8d34edc1fbe1dfa61662043d3684c64bdffc48aedd557d1561949fffdd256721673f45769afd91dfb8ebd29ebc161cc9a33d0720ee0e41c99ea0d10b5e94ece33838847953efb4ab8910a3fb6413e170aeb8e83f5dcde642129c58385fd9383882d931469128d69de978febfb91ed2f564f872569724a9337fffac233b32e785d979c25aed49661b6c7d596845876fac68842c1314a32902394323487b52694fae92be42b2b1f1c884a63a9173fdf62a1be47bd160b9d432d0ff8414bab83c1a64cc8b8aac02f819c48c18a7dee324e31181f83e05e94949d99d151453c4ee6aae8fc09f13ace7839e878a37e0c77a5bcbf517957ea1e6bba5947cc3e118eea4ee44e40ca4204e9a8520f5be141b4518bdb6509425843b0cd78e11bffd24bb7da6847c3fb80dabc32af0e197037f339e693e49a6b4f0b4b1e1d28a44d268d34969e6dfb4c9b57d91d27fe47f1933b45140f559398787f24f571a2d0f3b55d49caac4b50873c8429b1e1664c2d00955d5f78405e927ba6249a9cd907b728c2debdba662b720a67923806ce90ec2407690df62d6221ff893154c555b26327c5dbb8f148f2d7ae0bfdf8bdbe7bf5a79c5167b0a5070cac2e346d149c37bd596d280378780f7ccf75533a2fbf75123259fdb5cf2fb51d2b9f162bb238008e67c2aee6787ee82916af7a468358e6096d48563f7a54d41a24e4bdd7c7b1739df8cc53a919e3e7a82ac05c64e21236a3ff70424cda9bcccc3e0313b87a8dfab4b5940093822e72c0b5b0e0dc7474cda891d9aa26178c06fb2206ff18f456fc9946219eeddce7f3385c87edf5600613e0ca8c771358afe86f78f4683d5d93e115527b13ff4e96d1d9c94e6df9cf50711353908f5cc58ddbefe7d63870dccd10f081ab491101c4746ba40d472ee8db4d08d3eddc4987ad484517b356f9998bf3f27db8266b1df844b694ca63ddd42e1088f3ac4521c6979537b193aa20bd55f1e3ebaa9455c9bba981428fa94dbad1235b5bd4b12ea9d42c8e5d7f1c2d70b3728a768a7a162d940b96566301c8c34dec49b26d0ab659eb7311c27d9467d92edeb0c45fbff7720bd2bb774f53941729d51aa0803702fe64d48a8998fa18214d9e1d7d314d40c0a866b94d5987fadded4595cf13205abfc8b5bf59d536866f9918994a080b393ef42f57818c85423e22a483e431ad05c49e807adb3e30f9ec99b5ecd3ede1291576965fbbed35b4614f59ac8adfc64d366e9c81b7dad1bbc0d5ddddbfe7b75a6cb60197a2867f986ffcced8672753783dc1719c94b1ff1312d5f936b6ff75126c3dd9c9df5e4c358fb16acf23103ccf001d67951acca3480a226fbd623c049a3d9287bb1a7d82d4eaf7955867a2699aa80de633f232a6a3d243a93b68a64a3a063e7136faec0bbda755b73ddbe6c2215c16563dc4ebee6c8fc00d7773453039f0c7010127b2cd38ef54384426e330ab45c21f7c370065eb6c22053b29229ee122b79ee64ad7b28dea7a8136f0a299828a98a9b8f478f2678feff84d32447d78c495afab0b64a103bf52f8dae329e7ec55205db8a35b7c2a20b24e7637b3b34700ea9e19116081e3976106faa5820032cbe3a146ebb2ed7a48f06e7ee0782a96fc3dd2f805d33c759931135cdeb5ce9c1668de2874842ca02e33c22dd49ac8ade016b3108ec5b901ee4988c937c837715e377d27e7d921e4fc02b14bbc2177d3d5fda928553fe0cfbd31cb0957c525fbcad9e40becb9b48dd7e6a39f3f161e51037b1c0a014899272f7246e4e8b37f8083d57d9c2a2dcde5e96600f20680a56f9117747c3be9cc506c9360228f9b2d49b1b3afa24a3c54325a0a310cb867f375a75a1947ab2961939b1c808af684169e7afce1e4f3ef31bd525a9cb5fed3f2ab6fcb7433f8104038e49510e6c57624c609377d2bce4d4ccef8dfaab580cd89590ef2eb07cba65287708777fca47a3e0b84ecea3f835e8dac7420c3d3e55ca0c6af57e78dcbf47dc7677a1d9439964cb314a490e8b92adda1efa550d8d689203b7883d18ba101aa42f1f46a782fd43707e0e5d7ee18ba22f391f7b78dfa5bef0091fd0fcaf4d5c23e347fc66f2c3ce54f113a27184a1546eb819d62b7fadaf65d234d0b126d79ab045ba29940d8d53fd3ce28e82ff4432fd1e81fb7217d0e1d9a56fc2b2ab4f44fdc8ce64bb4dda72dda403982fcc14dc7eded0620922c004dfe5191d9dc704e940defd14493e0ba98ae8ef45d44563af486b9d904d1afb76cd23d947cee499064e1aeedeca58c176695e1e1e1d25e12a0e67320cba7ad3b635e418d7b29e9c1a69eeec2acb186c581d86189776d7fddb2534464dcdcce951bea86054055f5e9428ddad6ea8179cccfbf357385dc61a41216542ba138bbcc7bbe3484323a18101ff697b40fdb0b353a91862775e8ad6fa877ca0081831ce86a227290b99ff83f272150e18488e407a9987b2ead590b445cbdce68e48498f2d25d68b33d4e3d7e41552be6b050ad4a031a3d0f97f7222d16328aed3204d8f19ab83f74260d90d355dc504cfafa0e063260f35299899b31be1c2316d4cb84edaa7b1f5bdda599484cfce89bcc50ae441db2c6801dd91d583cc4c46b30a143eeeaee2ff1c8deffe40cfe1b598d18360cac57de208aad51ab78729375af4ebdfd425898bd507f6aaf7e2a1010a41b4d64c79962ba48cedf315a6eb8bbb9999b219a038148dd5284b28ac7f0477b219c5656be7bd7bf046ef3cbff5cc6b74b8563da351318d81df2f4191fe28779f2cbe9410f50fe5716a6f7b16ea71c0f2c22c9ea3776b7a7a95f7d11780f57 +MD = ef17914159934f3e8e4f5564d47279cdb1666e608868497f66a7825b + +Len = 55672 +Msg = e19945f9276c2399d4fde727e2f0f976a3dfd329029766810d85b973b06bd4fec357dcbb48d67fb6ed65937cd928f975a4dfc874a715a78d779a7b27ac344351e7923f5a1381589bea63bc98bbdcc9486bce2cb0bb884ab7c83adf35d8ace44d5330b7fd10d676f3d2deaba213732f9600964804c45815a6094c2cc5bc3c8198111b8accc83ba064aec0a9c36655f407691d64994cecd10242b8ab01e14ae0da293900f0c219a09685f0fc233ee9e044b04dc897daae46757966a40fce40cabca174639186d93c335f56ece92299baf5dd0cbb25f7053ba5b83e5e170b8407e583b3f9d69de13de045dac33e9bcd4cc2f644866b2959793a0627234221805fffd7de0ce88e9b6a473d64c74930eb5c5105dc7292fb13c9dd6c0c39b7979a9aafa3dce2efe16d8d1052dc4233695cb34d11bcc5c2f299f136f0d2e99ff53c7f9ff197c3121fc16ce3892a7a23ce88195c23ccc7229854b9ec9d627b22c4cdd877c8f6f979cffed166ec36b842e8d7552642f4c2db74aceba878a437678bb56bde31e1cb4d798c824482e843b73eb23154761cfc140e0a4d118b806597d25b017d324080b6a5d34723532965ab587f738ec72cbef6efd4a9d0dddf4cd9222961fcd6fb61dbdc3beaac68df6446bfa7e47b3e0c50a99e74c58c76a735560186550222fbb6e5a52c3186c8f489affa934cc4e2a4fa54a35069ee5fc26836fadaa3372026c7fb890ee6597b4e1c0f91aa7311bcdc042087d25f9d9f162da0928e1445d765db460f49cfcf8ad7658d0d532009d29db534d1606e423e8dccbc530870d14fa13beebf45b58efc75ab52f5f81d542ecd57b909645d85450e8cb3c4b17f8691c0301a216a5f3ed9123886d100309bd85630d6b845f50dbb80b7ad6df10809a4ac00f2be2197882a95524f2ad32286d61e89b4656bfe83a8cd93d1d731d505904bf39f1dd02314f6e642d886d9babc320fa97a983e408e14dc694889d7ac205e875349c6e1cc8945ed5047707ac2e6f410da51d92682d70895803a0b4d56021546661742ba5a8f1f92c3c56d1e00ab22086261b18b8e068be022cee6f99b54bd72763218c595d08dbde579072d3eb4c6e18ad1a7d52ac2a6a5952ca14542be5ff2c9c2d06845f19656fc8cc50f42a8e7829aca446c1fb360cc227dc49815e701aea7eef30d319d434551252f2cd4308ed3da730eb83482c13d11e9d859da78ae8e5ade081b227a9b722c6dceecbef4c2bc91f58f2233d7d1e1aa9764f25a186b7a29bb97fae030a6c5d48c29b8c79b8b2509774f10e259999e35b0f0ca5d70425a5bad281133686c2793a9c9f6b6cef1f68822d5eb0bb1205df95b0449ab283a1639db44cae3caf67eafec34105434fd17571da91c74876e073fc129d70be75b960b6e728cb7fd4bb4717ef46c6976b670be915309e6828c824f09e6dc4655aec3198d3bc078aa73af21879174bd3b25ea04a65b1c284a81b8715cc4c0241b3a83aa6126ccee787759072e918e172c506b73834abc0488558fede24aeb6de108bf0712bb19e1105e986b9c7e2440f041dc5151a85040e411f10ac200c6e94e1e6079c7820f1919305694f9df9d01300026e737fb42a505bcc511256eb7600b864c46a804165d3cf57acb6c3d612094932f7d5ecdf9fb945ef34a321d2799c0486db6dec8977721b6ec581d1fd865c304e15beea5dd0a380062fd12947f5d146aa9139156f82d6f7b9483350d6a9a665b23c80e0c56999aa8fc72ec5b2574aff6eaa3e837a348ce4a5a94dc8f7f85249edc0ee689cc726161a8f1e9fb83a63af317b00cf2fe90e82d26d2392e7ff0a6d7f6739fa4a75b36304ec131fbffbb5d6a1880250f73cc622be0867571d2a1940d584061e54f1dc11fd72bebe3037abf62d55b5a1769c6e74c70f8b7e1e0609549eabc53d52d80a9352977403cf6ac09e3358bd39148441d99be70280411f7519294319efba74b977a2ded578c4019e2f62357b905770fac19b236f065ce2c71f03ee569df264832f7cbd4595e4989f3a1840634fb60ef3dd5359136897dc99d6bd021dd0a133d23b3ec766d3778c4e4ee41e16bfc6aab78d32dcb22fa88947c0c322d2203d4f311b67619bca137915ce54230878ffd0d041d842ade3f5556b7da4d515f52d332a50953066d23eeba038d6f3baf3d81db8abb20f78fe04ed6f5dd07d5bd8076c187b36985a946030582eeb0490c8d5edeb1b3eb796065d9dedf1e49006314276a5ebca2dd9890df3b8110eea3c607fdde220fcbfa775760341da4fc1c79964df3d22de458618bea24a7fc0f920433c4a384d7aac0fc3e4aa15678066f298f4f258d0d193c2dbf8c879db9fd5cee9a1cf480116f1418a0ffed32a05142998697c8346428d223b32e2d0b4f9e49adc36e9abec7023ef207e7e05b26c3dcf1038ca4723bf9626cef36df97c7dca36936205ee5004b86b4fa6a42761146875a8e9680ec9974342ffb0e63ec289eb0497c9c069dc531348302f0da2e6ac189fcb01d264d86818f95601c81b07acbba761c485a901d9f8f8aa6e17128381b2bfef0895c3b0a08bdc6a5ca038cc54d07189e8e2464107ae0ee6ea5cf0f833eb588d743eb5e2ef104e9527faf27120bdf568bd52ac1a6ab6fdae2a4bc8954116fc4ecb19b60f924ad26efa24f2a68ed8c586a843550e81a84748b46003eb27ca0d8b73c33e67489ffa6059da93cd0db5547c3050db8ddaf67e4f0f462d8a56792ecc04c7d9ba50944911bd7860651bd814b1fbf7aa28d535f539914acfc35ba8b29904a3f24968ac20fbab8ad2ff37b598b041a44b601ecb6e90f10a4546b5dd4b6ae9c422c4ff5c34669a8e860befe2530fd7e329b4063b2cdd94e13884e39b5bca2ac4e59d6338d61b00ffd41bb2c2d618f530efa52a19c287f38c040e6347563f5e12b53352b68861755b579f1eeb84744019e7a408dbc218a3475233c375ed22ea2a0c374c49ede27e2d8b1692d0f09a3f0abc4110e59e181acf8d9572bb632d559765199e87690671f2e9029cf7bd13489fc7fcd0ebc8fec07120b40f6c6aa726d75a4ae7e37c460727ebf3bbd42c480325b547d742e5454ad8b61fd82d6638e466565ba6d2aa4984492e5a6e0ac0c0e548eeb2828f5583f062b8298b52e85b04c0e3bc69f975599fe30ab731f03d166585eebd61159c2387aba171879153761e738cfd9fbc602eb0621b9a9618d3a11a493fd8f19a4bac471ffc786b5d5a1287faac9fb69fed114c62db65090947096a2f5c85c271c6a6d53c33be951b4ec8d7c2dd034d188ea9ea41b4b71935e9b7db94bf544240bf8ba88ce1a4934fb401846898c8d1bac76110ab51f135233e14f505f2b50f6b78c3378e80daf48f1c4524586a60d30b29df35fc1db3eb55d6d93d1f7138786694f618bd9bc2174e0a1c2e1ebc6bdf6e286ce0b0826faa42365d1a3dc54f1bc6868cb2a68ceaaa00efef1838293a356845a297652a95007ccf2922ed6979680fe00fabb5fec4fb4c404659111b6c938df408d08670b47c6a13b5cdaad847fbb713f74a884bd1a994adba87561d637853c6181290ef5e8c9ea69ba0f28c2b3530a4cc357a0ea1235e8aa42953a9cf423e3e58d41110f3af8efa3313510fa3a3211506e327a1a3f71e699b95b64b008fc1cf339b83600453cf7124bb42dd31d3ece72fe9fdcf6aa368bd2972ea6b97bf72fb30ef64671117b4bdd8ff447f6636188dbfa088c255a6a217a6375c96055fb634e93630809a79f342e855e260a148289b2ead4535057f6eebca69a964c9ff202ec516746710e8ef82ab65891b839891720576bf91faac33bbee704d22561c352b4ce6bc6504e32dffba94b52a8d85d7b4dc83546395ab84fa8ae1b4895a1569ccf94d5514f707133c9e6a02f81fce8fd60c59a02476fbc74a38447bf42699327652b0faf167a353abbf6bdf1ecaa11e482d602f4f0f2b9f0d7eff0fed4c0623d9d197fa84c77653efa600c6090ecc07ada84d5e5ddea960c6b797ecef4afab249fe88f04996ce985adacf34316c9dd0591567b9db65f3b1087aa59f74a3c5625941fa68aa763a957fd63dc63254a51ceced55ce4225a90445509e9417d724b88a4472b031b638cfe120c2e896675021dba87e082c9e17ceffa1e977436567295f6e78838a0757cc1132f517b8054d93a7df6703e54ffea5ba171c9571cf2b394b38724eedca061e72955ad021cefbe6c3eaa72e16bb9bfce708be8b3d84df7cc02b067f077ec21b97b05aae5e24c9afc252a5033b519e4918ff35d50116f24860ce8b9051a61a57f32c7b0ee797553325bfe70fcdb2641ec27318ff67061240af8ba82f46d08d581752327e38a72d35608ae3c0484e8be2660cee56d9c2adda0efab2a8617e899066da2778dbc4900b053c21a13596844896151c97c3ed2399019451983c109da5841cb08b4b804c48865c374f002adb95b5342a2edfe621f219d0fb8b312747ebd1a26422026ab06256639b16426bf07e55d2ad78683e1769ca4916dddb3306f7e203c8e98ac44aed07daa39376da7146fa88fd210765728495554a1cb4b4593e27a9452e5f5d9a3d1d2a07431816cca415cfcfa527ecc1c70d9dfbd4383bcd43351b7f7cfa771cf708ea2ca1907160fa2a0f6b71644493a5957ba270e039c19b7cc2be61e6b1519f5d939a3b9aaaecddc9c07712270d56a4cf86e49f472ed49b8147a869ae8cc69a7daeb67d7103beb3579b6903fa9799490e4828abc78b84e7c502b3e0bc79ea7cfba437e3ce1c551f65f8b7c35973ca06e427e5130be040f4ca9c77838af93bbb5a0c650b0c655e766750f9ecce326762e3aeb0816ecd9746f47d59bea49b48ea1b5fe45fb66f195cfe4c95ccc353fff18f6501637aa3f652f51dd0fe93d0806db2172c6e46ba44377d3421ffc349021739b35e35b9e3fcad2f0683bfd32970caa0baa39347a73d9a76b0050258920c5895422d74973e08ba14bfd89eed06a89589b2f08b33e683fa7d48d550fdcf7d4a047a05acbcf2b91e48b246083c088632bfb8899295c8a5dbf35719882d41e34019c36d4a75b26c2e3d7652885aaf9846c503d565e7fe11b37b6327f46199ccff47c6dada6bedb07e558494abd35c6d262c5d7a61a4d766256815a742254798bc00fcc4d90a052493435572cf00af637577fddf0246e501866bb71dee02dbe52af7cdb1c2dab926e16971837e9d1919a91a9d79e458b7727ad8ffd25464b720b07ec22834585a35fd4a612d36f31a0e259694d17454cf475742388b01d579d9e11862ae89fd68d05b589cf6949d22af9f7e7c8c3ec58ceec029f99e92cf847f215737ab4044758470369d75f405d37c6b34dd00a01580d73a12cb9373dd779f15bda9a503c7f0d0c046db01f1c7ad031d5c0eb544ef3baf197f26e02169b3b822ae413220f27b43e02bee40fa5d0fb22a46aa30999d2dc502d1843b380ed938dccb86c9445e753c44383fb99a208c28169737f91ab9c7b77abc6bdb043758bfb87802d0da566f48610e57b24ddc92d366d0307544cfa9f4e5926666227da2ab2a461dff5f84d9e6cb00cee171cbc432af540c4bb439451bd7e5dc531f4c5789b6a8509b306435a5e6d1fdbdc28890c434c553d2c5a1198ac6496628671dd7e9e231433b197f12f448d47cbdac9d7906ab968fa10571a7d0351f7c6c767cb43a41535e55673ff250659ab4579c64ed88883a284d0035607aa8ea8785e9f36cf938a11a80a6114448c1974d121e997eb83f32a62d2266e3e8963d200b1dec72b55c8d003352bd895be15c9f73af85ad14551291c8088092a89179de72aef265ed017997f3f97f51f8594d3402cbc3e93b4e5c63b41f0d0d490f430b42f99fa70eec194a2916e10eac7e0b93360fdec38baf62a467c286a438740b4ef2aa3eb6a950debf79177d4ff6e3fa4593c830cc83ecd7cc59bf6817f5744502182d6a353af42c303a87ce66560fabc382915454c27b3e5410523ba91e6482dd19ffac73323a947503e43f1248758285a907d3fca5fee8d412277bf801e947287e9d70213d98a9c65bc969b45c9a31147d781a34dcdc69b4d5ab93854e66f48cbc834f9fab92dedca883b8ccf10219e8568ea19da598537ed15b3cc162523d726a4da57f0abd960080cfa6dca431cf89ea97f487beb718baabb2b24cdc5f6461fe592c2fd97d71da6af9de63f4ada461a040ad9376bd4bc0bb4eae881ad31be3ff322e22a65704d2cd8ea9e350da4b17fe0517317c1f4f59968b8bf3ac51b660c3652617efde91822f1ab3eb473c16157a41ebf21d61a5cda405c5101f5fe671017ece402478da51161a66dc4667b7d29ba37655f908d1958a2a047dd2520e8d3fcb616bc2ca31d8190a4d46ece182e7e89640cd9d897559bf74a49d73dcb12dc4e7a9cb69272a7f8e66c1bb991e19bdd796f5c96977e3829a823fef625450db376fe21f863436c00cbc8e9ae981eedcef21eff9eb38be98c1bf30f42c6d600e0da0b4b88855e9420a77ee653cb174bd95c3b9af91606914cba8223c306c813ebe468c270e20b46e1e257bbb21213de871f8cd8b0a63757efec97e382ce61705dfbdf2fb86092aac9e41b10d3565ccd5fa3da5ec94d6564ff18fcf78607eb3cbe86363a66e93ae96215928cbc7d3841ea51ecd74ff1dadf04a87706d797aca294ef368a84644d2b34de83d87771f062ae8f8ce9477cdcf18403d1b87e68edc8699da7c819b81197c5a5b89c0c18cb5735c6803cbbd5b4c20991d2b78260f5d6c4f8519b2ecfcf56a0d3f77f815c1349075f9179b2e4aa791aba41a8eb690ef52e68fbacca90ce8f4ad10929e0240e5faac087483591053f40e6e736c26a7e4d2e556fa3f5e3586b4c06b643315706c2a8532a504bc40f3b017d8d070e4a8e054c277327b7b0b3122fd9c5757adf4199897f423afc650e96e8e7f9c3d7f386451046d0e019df28ab7bb40066c5a3080dd3ab96ad505c4b777a8cf413254cae37031b4e772259ff5fb6fe2dbf198ba2461041ef5250910e0741d5459f013d4d00ac0cb494db0480556a1e15277f7f596bc7a815d103ed9f6dc428b60e72aeadcb9382ccde4ac9f3b61e7e8047fd6773a58148d0d1725645d28bee0d08818714be41e65cfe79919fa95b8536c79e2b391bc589e8faa3b5495e1f90133735b0cb013d9e2d9b7042cd57a89bfe4e67b4f3f61bd324f6a0f3f3380774904096121abd0f14075e36c5c5e78d28a18462e8e95d0b8e4d6a71f68b89cb044cceac93481a40aeb1efd203cf829294e81296b062791e222b011ca85978f4a70e87801c9f3f57d6f5f54fe33350404898a00bf5a871dbf78661abf0a52e09c49f1319966555dcf39919b24c38781eaa7cd5ca9d016ecb75263225b5b6d392c5c81b7fe7e383586c660205282723b5235b5ada91b6987405d31d93e1d58e17114f47bbf961f252ab2458505e48788b1cfcd643ba0e16600d54c9fc5b4a872110fc3ed4b227c952179bc599d6e3a02afb28f20eff531117f772e0680b5de7372a99a9d2fc7c31e01892efea7840c21a29a7564247cbb01f29f507e0d956d6e2c7ec2fbebeaa528516d37e4a2ca707e10f41a9e77cc01c020da5e86aad7c7ba94fbf799fe0f753c879241bc2da5f970914be940685787c4809492b116f18ff142ad82e7d49ac5d32aa4e6e586ab1991a9fe5bea54a3cf97787ab78da077289abc0fff760e310974a0f191e16c4e5359a1a7fd0cfb353bb19ee9175cf5dd242f77afe7c51956d2a98114cd404d0439513ec547189a807e9b5a6c4cdf75a80527fbe9c645747093da418b137297712de0c7d2c4add119eacd4170c265ae4c3e0cbf5a0587be12ef9f78d0ef08d9f9c3b0e35cf02d2d6612bfda9302901e4e5146488d3ffc44c228618d62ca6383127d2a07c054270df988fb8c4fa7df3432c17d1ddfd023a6e2d0b8f5dd3023316fccb4aba95b2c0148bff8dd030ca38e7e1119a5ee608e53099b0e589caab8534634f945748f9c95e81a405359bbad9ba4b29487255bace7aac9fa1c1db4a3675a38607bbe6c094a3c4a5a75b03f3dda3b488628013c0fc35b0fd4b6fcc874fc006972a4e37ae27cd9a2bfcaa301d4c89625670f2e9c17747ebf56bfa6609d6fcd2aa8579026c8cc24c5e8b8be9e12f569ebafb2f9c65489aa6ac8aca7179d61350e9a1a211a1cb6c2165dc64f7e78df1b0dc8a9ff7557615284d2f47b57e54ecc87a05332af6eab16369779e23d66e42e0e5a5aac139099fbbfee3d9fac15a6f828539921613f37b5891e5a23356da3176fdd4b8c1b80a22a5e72de807eaef84c533c6299d9fedb14a06add7ef11daa6b94ba031c07b80852f3295dca5a01c13dbab335e8643e13b7fef57a421ac7589f2f8907d862a73b0a104a31d9c8be8040a16089b9ba6d60140756b738fd2b4c26a2b2d04db6ceb8a4388e013b4545b3f9b9cce47a271d4ead4c072ab02299d39660dfd2f87e9f1fd5ce3d326b4a37dadd6640cc9644be4e085f7f4b342593bd731c68a64514a8cf1364005bf661f573402974a8ba9dd0ccb994377f5170b9382127d5c0c0337c54c17c5fc449071f0bd685c11f438ce569159cb85d849e7af23505bf9906357a3f7489a421ffb41503151dce76cdbc7ca1b0db8a5c49f9496a33487eb563a532eda11e85fb66f368076033f575b58706f51fd316021e3bb50e80629bac84fd26eddb9d7d973b4f88776c7ace62978704d1b705f3c58db03e6dc0e6bec4d6c7d6ce98a8e3abd91306d17e44b1e3f03706c62b069c3cf50155f6693730b4c57fc2fe4ca3609fbcf863b43a4458603c117d50c03787def0998c36ddf699f2fd9f6bfb8c2f6cf9736a1f8e14dc2a6de7a0e8f03b2b4f120d0351adb38762e5dba14254bbaf713f88e2aacd928e90739f5fca22d0444a7cb6b946d97e7c2423ec2fd6887fa605d869fc85f137de3307afb8a177443512756a35cc3893374623ab9599052c95a36a931241a7694d8a90b5460f5bfb502fa2b4035259966b417b966d2a696710d24c90be5e4ecb4effb52c82544f5a480a7b00ac99aafc7ace723920eb03a38a0b14ef6b4c65d2650adb91f810c0056f2b64fc9bd2ab39d815de005b5b926673c65a0ba39c7af332447a6201e56c71481af6f44bcdd8d315efe588770c6424508c7271f1befcb2193528394a1293225551b77446cbc25cb6954f4e0e7e1761c2d5f4ced03469938c455b743b58e29d39582d19175ce63b2cae61ad7c111aa32d2b575eb98d501c2e0d8aaf5008c94646a6ae4f3801c3030aa3c3336a65fc6d120520ce283a3ec050e63c4722a2b5b21fb5d183235ac728b31dfa8c340d1b23f3fbd779a6bb8404a777f6d81dc73675271e2d5153b88130c8656df47347256c4567e20dbf91de7d942b30decbe6d9e3ff38283653bb8f9fbd22942892d479aaa8d1e6d6dd5d9c7fa98880c797720e92faac38aeadc420ea03ce13853d15a67370d24c817a6f4caf5a185d2f1b095316cbd30536cc7303842ed05286bc8b2a3b5fe1898a21477d7118432c71b10d25c3c554e44b3a38a612b0c1d7c9abb57386a888344d7c969d5986a1754c140e153e89aa7c686195670a1c2b19ba852520c9fd1eb367b6ad2aed07abddfa9e7caffb7b3c242afd19e4ded374aed5d34aa099b04dbd559a2bb4902ddabd29cae9347f3c9271ef47269e057926fda810a6716a847d88938162b8e75ba6993623d4612e2035fc41ea5c01126fca9cadb7b921a0cc26cbadf712a65733a808cc33bea4ace8af19af511aac8a49c7f25343031ff109f1ed01759c0b642857723875088d6fd85650a405f2fed179b795354 +MD = b3d94171a78699c90de119d11a1700acf3c53e158e2936ff46988560 + +Len = 56832 +Msg = fcda34fb16a2d65f4731ffa576e5624096f42b3fca034080ccf4c6208fffe8352304d3c0da1f05dda97ec83dd06ff9d6bdbd0ed92e3d58e597a4847ac39b68b0bd16fd29f1e1a7448f7bbd9330284590bc42ff8b8bd0a6e7ca5a728621fbe18292b7b71ea50f43fcc2d3e590de38cdd45a2a053d27e3b2ee2fbd972df044da136a900b873cd2626d0a2c481a21c6190b5e1e29d74c9f05638c76fb557aa1dccb0d48004cff518bff2e2fef1a43fab29e91c57242402c26acaa2ca6e705386e1243889e5536b5461af883e1798afd1ff3bbc8e8644bb19d335188a1ccda311850d3f8ee8a29251b262ed0261d3ff7e874a4ce9326b756f35f4831f3ea41b562ed863ff7d41fca938b99c0c7f0a90f968813807c70ca45af9759d0a42b81ecd5512406c21962cb35b101f9cbd9126eb096d186aa2bcea359454a0dbd76e4fdf8e475f4554338518a002e233abfc03cbe08a787253d099b79d0e48f44b2b010530f40b2ba38ea8419e1e7e71d8cfca049455a2bf690c45298a0efff44c92e4f6f384fe7f9e2bf8b6abaf5ed7b270ec2d8b5b51b240b46f33d1d3304c2a2a6e0d3c9683c1827018f05f421dc5c783ecbf3c07fffb795d9a4f1af7847c82560eb0728545921f1f6b773f8315cc867d4e322ce7f7eb818c38d3bbe85705d3aa39994bfdbe51b27e82c3b2ded17c8dc1731ee477e412e7b4dd8a3b223268ac9b91101f4c4890fb11d15e5fa1fb263bf50dede9344f021a6bfaab1f31a1156bae87cd631d9ec0477de9bf9c98dd8a2f8c8117b1a99329980612eeee932dac9f579029cdde0b7026072e60001002f8b6fc4f34b4545af9ff37a89e1fc3229eb63b4cada5fa2911256231d8209405f290d8facd87a0f103ae754e61395e4a5c5eae0fd1821e7233a413769054b151181b87063aa22c1fd7342356b0a1a0ef75e7346c2df8a76148407f7f1132e47ed9d59ae4147a6211d51ed664050f579c7bee72f42b502190df891abde331a9d9a84d9926d396cf819dcd02f8e6d8cedbcee2ce1a525f196b69dc79b57ee77e1c13e1e640f08de0d981cd3d77de749327ef52ca512b4bfb6b67b910e85caaed909d4126c513a632a431adfa83448930fb6dbcdc2b1ecd541b69ad84e8f51254e1b4d9cf159596215c2dddae8dc17d14d0ca9f982ab5499ff5d0382a19e0b45079eb1a33d4fed4597bc6daee09cdd6db42766972b287474b854bd7950da7f76ce3b0811965c7c7378dad341d89d21ce0cb01a8f064fd5cf3342d0a3a26a3521699a5bcd45a8905480c3167d18066b5c1d4ecdc95b49fe1039d045eae177b5aca162b1bf915ab050771f3e48e700447fafaa882c723e77a192a62335532888813e3b13cfc49a65cf2498548c8fb3329f896b52a29255c9e8066b726b42a6350608cf88e52592353950d45e305646bf24743a341304b67b4f5dc73a76f41844a5c7c318e9fb67abf6c37b671c85e2737638bf3565118a153c5e64843db2a73dc542c2cbc38f444c6e4536743863aed5fd9da15d81fff92019d2e757a8c37ba9cd4272aa5b294fa20a9ead8f6c3ad36d226b89b44f162a234d81fbbc9f71bb10278f7bbc9910b034309587bfa05078c34b691e43b7a046a6403346ba0a0290f83af1860a668e908a49f46c0dbcefc660e2600911a2e374315ab07059d1bf21eb6e303b9aa8e9172dbe81067fa85de5cb4d18f126f628dd4d03bf22a1ddf097702b134176496a6ca4f505fa204ce2fc8cf6597f8b9db7a881a32a049b14dd1910d96341a62f59b8775847f3f590c8332c43eb5b477dd8fe56a2b7bd4e5fcdd051e0e8e23044fe222f4e1197085d55b3329e952c6280d30753682ff6c3a70ae3bea96acd1e6ea0d3533e298e6099d3a4266e209ae58defea005d595600d2da7bdc9ab1a9789789f26b925881052e882e911a554fd78b76d0e5eaff860fc986c0351c841f44a6ffa8ffb166180002bd77f90cf9f04064aee08b75e72df87555d95098add78c834b1d98031bfa58ffb9aae9abd72829ffe0437968daf4c1bd91efb574f2785716b578bdf03fd0150cc6ede65fb69c994453203729a08374888029ed1a1cabae4784e2f7e0994140102a687a905df7981b51a04e22018118c06cb07ff0f31798fe0282cd3bf2f6dff52e452ca695df2e6c20eb45b9c596b64c9babf3603e651d237581c7691296fda21aa9840926fc641f0928a458b36b55145643d2d0c73c459e26066dd2c1ca9fff36be0b22d8f8411c5480f46695a8fd00e4a0a2aa544519575d3a48dfc73acff4c9ac48577378cd4b491abb4b31f5b6f88fe9ee55ae27a0366244dff6eb8d94691d9bc411be271195301f846e4ff889e49d473b399d8be2247c4dba81f66cf74678b205b982aa14e050b6d439b95c7dac57e113bee819e807f47d62e6b17efe73231995b587acdf16f208351336c79b3805e0fd4c5978b9c912fb5e8fe16cb3d866f9fc6f95d3781d5e3c2e648de2ea70ef6b824bb6515d501ef036e251dd1e5e887ac04d74c7e9dfdc7b48958754723d5cab2823c84bdd8660837349c87a46ebd3c36bb9eb313a42b4ed090cecc53b8596c77a3c570f405120dd9c2b0deb33688dfd851ac4b971302db9fb3284df4e32e3e8fdff2b448e9ba52539efe9d7edbeff4f94d8c50698909008a66f1647b22a8c363bd20b93d04b3884d3ff24e67dd371e2225bb7c1b6492501912c6ca86f57d8d8bb1ec0a40d492122f1c286c1ea912bddb60a6191d44534cd44cf4ca88e9f11f7054c131e4d7da8261ba0d7103cdf7469d94f8d1ff96b059347c27fef16ec7dbaa2c2c9aa98cf15b9d901de7a7ba496ae119101132da3e07c236bcd260f25664a19eaadeff727af02b44d64a8b0cad7d3e939861478d50cb05f34fdf5813212cef22b8696716dbf2a33ec3142e3388001e6ade4cae3e9d2568384d90375fbca6fb6ec1b460f898d58df470def1ad6d85f9256e3de75c87a9617c227f9f267d555ec9735a8d86361b53ec4c0575f8c2916749c4bf837584c99a458b07e01607da71c939c63d4e38369dacc1123b942b94d14e8e3bf2f828f87b2ad3c3ba9ce088ece4818200bf23a9b3bc8c9fb31e0d22dfba074dc672f8d88c72993d8f297bf318b1e71878676d073e71eb086cd4ebadeb02ec6f6e7458cc26d347cfce4a4eab9da7d6e3f4c588b1a68388e6d9774b987bbf8a1b6b5aed5602b36c04f88ddd14d44cdd9f16581b4b8467c2b57973b1950a568cdc4db50b0888997277be52abb1650767844dad8927407544fedd4892062f5e411c76115646310bf79250374f23b86e014e1b2446f773527c1d7564818e533d637684de33b1847177ef7eba1bce56e73746ff5af91e9575c4abc255e4700e8a5054ea9a47bcfb705fe99a49b623c91986297ab0041f1f65db2454ab5f6dc9bb944217d3f6db2e6f2c0b336482b6776b5a401dd1fc7b79991c119cc336ca1d47abb8bcf9c59e65e478decaa92618fa534035493f36b64c8603ee1b3c2f3761b503432a9a38796a76a2dec07604adba77b4739d36675200c32f3440749d183f9a375be123c3ee847c5685c5599307403f43857a75f2c12eb6fa6ebd1af4ff1f5db48d8134fc804c8be06e49d27598141059d5716c7da63ef7f207d19deb5e898607328b2c46b13b2bfce2be6f10e2bea1840e02884c53aa0cb29a3e5bd4b8f689abe55f983703d8b2f89da38df969a8594e79be67f35c085b989053f34580feff2f308f0741fa9dd76ff989bd93bf59ae15b2f57a0741d26b2074a2e2b2690b5ced8e89e80bf802ffcf80e18c74365b167644584d0c9780b1f6c1abb8afb394197379e0b8d9ae90a283ce4b691f711538dc98573f57bf9bd66801fec3920321bb6d6d13f84f60df56492c17e209f2207bd54962ef8d3cac3f10bfecb21dda4cb917d2a434e1c147818c44d765a83bf565fcb21bdc21910a526d562602879b7d992f6501ed154251baa9831a828ea11c7d9f7cd263a95f6ec6fa5f1b2373e92ce2008edd8f7e5686783d7151c731e3fe294a04373478ea11f334553c937725e32a27aa67aa71906e30b49a0d92165722ff88e2bacd34e3cc6d97b31ad0e5e428b8215250ac9362718aab57be71b08d2376e882cd7c51bed69cb103367a64a676327a112934485f28cc9e44e4e4a4e86815c58eefe053edc9170cc00fde57ef441f9e6141a024e90c9ce9fc0169581b7952bc41a287aff33c53076417ab54112ae60abd4a9ead9295723ac7948e3e78cfc4495585e0ea5178e73d89de3fddde931c4bafa47e46de4bc2ed322ec1eca2e3d0d924fa7a87ab273a1b8bd42a598a0528dd92dfdd853e98259de63082d70c4e0f085a80b30c42cfc22df489e94bb609923d115d2aed461300b93e3a6f822776e54340a928fccadb15f15e700b48d508fef695bce4e36744fabbc4bcd67276f6ea1691e45abda5c1bbe21426fec5899bb576ba7f9a1c14966a31f428662c9d3683eea8c2b6d3561c1a8cd00f3246262a5c49da05c8dbf09fd5a8571d8d14ecbe4957ffb4cbd27e52b86dfca9444f5d4d69fc9effefb76db9d38b57fcb9cff816b0df213b184f610e2be20475b355717d54eb53ce7d42fe8cca5791567ab241a840e0a7d61a8eb096dba58204fddd0522a3b2a2e20fe3257150997dbb5e605c1b8008ee164134ef954e04ffc7925aaad5eccef6db063c751fdccd878bc36e99c8e4c47e6c3ab6707209acc84dff52b51f86bcea29fea36fe0e56049584811ad38e58fd35855a7d5c584f99608b369d66807f8d75f67ac685cf10e3d916b1de8f408d7776b207da1f84667c3785ce46137f70f58dbcfdc10fc8603ced79ac7ef82d537f50539ac4792d493eb1d3a76f817ca5ce93f95a6dc382afd978b55c4135dc13db6b6ffa8492da5fa7777fa85fd8ff88e02eb57913ca84668023d3a7716fd53354700e11629113107e3191b8603f9080f207f942fa4b56ebfa96da7754cda11db20738c6a59e60c48d870fc1b8deb8f5cec5cc9d6c6f81a80f78d2b33478c737bdd7f60197e34ae39a1f03aab0defe4f3a113772af5e8c038672c4435797cfeb3d894faa7e8558d56ea4745b9067ebf7ff9341a90c3fff66292bb70f065342a0f9c44caaa3af1303d1bc6bbba0a00653e5f2f22acb3a6338be4cb3fe88d4a7bdba31f4e74e8701d38a0fefb428b2d7ccb3d752dd34793fe10e7cc0fa274186ac48784f4ac735acae6346082d6fc5e6cb33e96aaa8f211bc9e164e7eb29c268d46b4065bb55e29cfd2209be0fbeffbcb62bd1417a235d7f58ffab2fb7d781d39deb313f2341b6572690ff1a405d8be0f66436df333953f4f62ffaa14779a3526f8ff4e468d4d8679375d123a9948fdaf4a6c14dbf192b010b3af9438357536ab220315c74537154aa9927e232ab343317b81a92040b0e2fffe94f1f53b8b7a5ce678fb02d09a8a4d5c3a75dc4e9a172c664e8b6ec5724053a02a53da0e6f78a2c29b7e77d3da6e17bbdfc9e4597ff1f6b70d3c25e44940b244da2a350273ca1323151094b369292034dccad9ffd75c26da585bd411b87c92594ef5b4dc4ae734946041f7e3d9540d73cc090b8632ce434cba3af7f2524c8a69d336d7d057487d92f782f009ad7725e517f517a114b0c28aad8a1ffa7948f0d3117dfca31b7654bb55644b8957fb00056b2f8cb4efbc3b109c999a9ecfea6c41843bb1b929e9605a046638e76b6832511008b9564649037b221a2653b8b96311a5e09576e52a171b8ef966a84a371354c1214bf99adfb226b86c11bdb62e6beff10cf680efa0ef6c4fae434086f0498cd8f9a3136ff8cdafda100b315ad1ed28e031735babf66fb8e0e56d44a41c4b75d2026d38281ccc7301966153191c7d490dce8a6b9c930eadcd4f233924238f8c36dbf8dc75c4251cb96fb2a7738682ece464ba3553ff42a77f4c2372899e8c4c91d6d474bb777e198c2c8d82eca89470de74614d4493b232715cec953705c8435d838e958bbf1dd5d42d408a06eb2871867e4e17f118b3db3df1cd25dec1d9ed048295b348f3aafe3c128a3134d6c56b66f2af39ebc6fe0e5fcb7388c37b27c62134785275ddabdf2e5ca8fd08f3e1caea7223079756c748311a4e52979a384b3e19b4f7b4a57715256c4b61f5bb141c9b6d38157620c6156c9ecbf7bd979208a5b2ba276803b32cabd1efe47d94c2dcf4545ce82abd60f26c998b0cc80bbb7b028016462270d6723c2de519233974988fb8100407952e7bbbcb09f6296f1b0eef1257f8566567a250c0e96468e1afbbb818efddaf4094fdc483a738742a3750a5e9dd928669dd29844b5b5ac155eac327e74af984382b05315401680ac5a6dcc16735c924f6ad74411dc950cedeac5b39b3cfdc18f4573e6ccc96f98fd9d00fec2afef0d4846f1f11c8a20ae4146ac0780edce9fffdbfe5e15de66165df59666095779df79b788660dc73dd937fbcbf6d48f0c78bccbbb829786e341f3e997ce9475e4510b47046c8b9bd4d7f79089473f2b9e95ed9d101cfbc9ce63e8016bfc0b1017ab267ecdcb3e0fceeeaa8d4dc46bc76c3ebbda67f2e8af0fc263c57bb81431fa35f1e34b4bcf2a1167787b8133fd6e5eba4e0927ce07418fa68dbe2dcc5adf753795fee7b3e6f5868a88e08c5da0255c53cdb2b876008634598e73eafe832270f83a5707cd2a76159e0347d60afaf64e4f605e82b27a86e7228d6c1b183802d3c10677155f44b7a7ed1035c701b3e81cf73193ed4c1e4a9148b23226e0208886da24e57732dbc022bdd834c70c7403ae9365dc610a93d91814274c751fe4bb718bba29970e9897705783cb3ef1e550ec6b27be46b6813c66ce11426e9c2ba47d1cf1ccdbbb2346770338839479add6bfc69dc30416927961be9b9d7b219e4990d4f055ad0023d521081fe2316c749e0deeef7203f36c9af32beae40374e5b493fce04c74a6414a54b061727d92e4aec0294653ab14b7a6035f299f6e5ea7ed6fdce839977624affa4126bbe1b3a310bec0caef65431ca678a07e5723a78cfa0abc31a58035740bfa049544c39659ccf1fba2cd974642a13c3711928c173ee54ee4e21896aedb673c41d7958c04afe83f21f776abe6d39f366c0bdb107662b6229b241841a8ffcaa8401336a5c54c6e927cf07007eb74a94e8694b7178ba3736d2b1f2fe9ea883c264872b074a1da65d152b645151dcfc56ccfd3b0091fa62619dafae4f63d1fc69ea21c896360fed6e4ec707c3b448cfe788df14d4ffa16d60df1debfd0696c6ef897384cd9c962c8b292479ee32753595a0916164fe4998c31b7f249e036163e1c6def7e3ea5ae43258b6332748fcae0fb8b689472a5d74f6d765f098c6cc63ef26c68a9f9bc8a502421ebc056449c9a415a124e20047a27a9744c883dd2237563decc5474d69cf5989a07d1f00e6f8f15c03acdc2cb271ccdfbe24c5c31d6eb5509420816bb8f3c673fe1ecacb5ecc860030997bec08837c15148df4f5186a8b137f34c4732092d7a589e99f100ba4c086ca6367eac457f6dbea7c980fadcb560ae06a86f05b2cfb92d696028b88123f7433932685606fdba8c279055f47f1949b6a4a4f6fa342a0c0568cab7a5eb5613d0ec11e68872b78e01efbe380619dc5399f5c945da34465c2ac35e078f9eec465ae55d5f0831b7d36728da90fa4f07689d209ec26c5d2c8fe2a3a4803e42ed762b4c9d3b9fec056f04f96dc596cba06f0c4eacd67a54e38f7630258a7a80628d894a5ae1154ba74c218bfe3fa335b24f2ca679e9cac473422e91688e0a005272bd071bbb32f5a75005061565e83442f246518f642653e59251eff6f2b769c50d0faa6830be930c65fa913ba12f715a3fa17676ad54a94066297155204963c346c65bc9a880ccdf724654f65a3e94011e873eb42e1c6f8ca5fc400f7e889855052c44c78b4149275e3278d1f9de4440773ed1d34e484dd1391383ac763bad8232878ae942c9b1ec13062551e4d7291e320f565b749eea1809b663b26f2c4d53b52058b833e0ad37780a820084f1eca33842f5d20ae8ef68fd2c08abd1211ece763fd4bbc74ee50f7586b86541f435d76f1fd8c277ec03cafdbf991e03e3c8fd5e2c267a66da007cf2c1ee0884a7abc3c0ee24b22373cf45f1b53e946f3af4e8532e777d794ea786d7044d72b3d3f76e13f6042b7644fbe1c15721947ced4a963e8eef4d667081360c97fd2a3840c1e051809eb4d8292ea656ed67a692c6710f0895b571970937937ac225b879b6b02260d41ad5b1e8109d96bf3b52198b125b9788f27172e070a507cdeea5e0fd6c3b2a3aa116694a4acd6a14c3217905d483d5b2cdd661bfd5759cff7f78d3dc9e3396fa5b006817843fba36279a1bfc608ea95a6f26cb6c0d0a22a101b9bc1dee138b5b6f1a161765f96f6b904665385d84fac7ffec18b0c16d7ffb9bf1028603e2f3a605ecdc1196056ffc26abc080746db242a6adaf5399a49d5576a70de086a8b52447ff20cfbf6ba4311053959d4d52b8138cf3fa1d3cb962f7b96345f21e6db91a5bda4b178731f55177c64a588f3af482d84560d653b3b8288dad1286743ae7d36906c6b2966149a6828a4977e22e4ed7b32c4945859b86321a0edc622f1627969a09f86895028a765a29f8c2f035ae59442f1d337b78b45b870d0b4ff80a61aa156d48002c1d9f0a262bc1035e57fc51b4d64568dd5229ecfd330715771d7d5803b9204402b970aa0f160b00d79c20072aa927ac5232cf2ca306387c535763e88c76e7fac0dee59d3d743d82010d02c3cf312cc7821f8d65a210074c35c0fba2d72b04eb0d94e62dd7ccc15184b18bcdcaf5bc8016214bdd21d9da4cc4612ecd0d60e1df92e45ba005a7fe350991a16c447d40a0b640f1de49e71a45a941e2b3559ee59ef7d52c3ff18c5cf638b32dea65521ef0098568ae41c430008b68009ad86b78efe3704152c003435bb821188d54fbc035b8f7969532f8824213df71cbbe52029bfebc82219d941b2e32e3489e3a008c3a6a9e64dd44097ad6e9ad1b8e2ed8eb6bf1c1d8f3aec84c354dffa7643eeaecc6c883bacc9e817f83b4dae82b50879c24648729121b263e39b27f1c29894047a07aad81ac69e8f8101c6fbfe94de67b91fe175fc40d375a01086a8e33428a059127249fc3ccc44f46cb7387114d7df17968786052ac810657f8c9e7cc92518d6177f1fe5af09febed66ee2aeb77d567a34ab216041f8eab012aa30e3aa11b49d8141b84b8fd0034cd98e98fbff47543d84ace67218fe6b2c84500ebc59673a0bda3aa1b271a7092ad066a9ed5ece5eee013d33df3230f8174f2e966b79adefadacfa7aaed6f766d565b7c3f7486aed1834bc97fc0049382cdd8646756d4e6bff53d191953259a2d913d245ae6ea5753899bb815d159fa1c9aa07cd6ec6d1258d7980850a164643a24556cd7714168dbb9aaa9e66e4bcab6a5f1369bbf8cea2b48867d361f535dfdd74a5b9e5eb36ad3dc21a3dcde028dbab4749c9e175af7a110af7eb5151b0cdc74c4f998f567e4a2baa7afde6ba5ca8f90d0b5c83effc023f6bd16b4cae3f940c16d4fab7d865eb01be5d4d55b5c0a9d01ae89ff7ba2ce17c3554a1c87d4ad9288ea64c040376065c7821aa7f751d44ccfb6212c156ba7e63f2124d39416af388fe641c084a373298527893d87a9b004c18f84385583d5f932c9abc239d0879c9f07ec9192f11e641f7c2a7f538f262da0e2ba098312e0b764f5e7d1be2bbe247ff56f1db24aea7e5b280455a229bf2f3456cc89e73f4e879d4ce1e96a4edb3af959d24a2bd65edf02d41fa8be9f02724594c19ec833a9d3a476a0f086616645d3db1b0247bc02efdc27845eed1a785f9b43a13270167802421c2cd05a8ee8add622542c4c255e17b0ca3a6178c2a75cfd0c752c250f447c3fe68e6f2efbe8d9cad784b08338fbbd48644997a7be19d235974474304694a8637bcdb74ad0ee3377a1b476341e604b6a9ebaeac137562a098b16f2d9e4f0f07584f18ef5368222a429eb65a7fe1527 +MD = d1e209570e80ee93473b40a0b61efdbe2b777033819aefdf44595877 + +Len = 57992 +Msg = c89cc2dd99303825fe87e35a01d33ae3ff509a795a28982d6f9596adc84594c39202491e51927255d2dc6b29614dfc0b3d7a75de4907fdfd04c72780bb24c6bbfec20308505facc722fecfa2034488161122172eb3b435928a69a9c1a465169bf3231722fe5f8d81d733384e4d80850c628fa7f400f8e9f5e7c343f9eace2b6a5b6eadf4c459be8dd7c4ceb3a8c89cf51a0a4eb5979bc12c051d1eaff528ae301decef070817e7f30cf9b85b7de575da20db34fbe2656441cabf616b2d3a46f521e203e2335fafb95d191fce32a0b7c25c4a804d481e7b3b20f035b5face9cc24f9b110eaefabee9b16e2a9231bf0ab6b69f5b34318dad23eefac216c4aa579e8f5e4211e0b0bd8af23e0231e00a18bd1621ec37057ba3001c232f15f3972092c972bd75304854a507d2ce33a94b86df64195cde2db005da91b4a53bef5d9fa5e520abc1088c2a41d872b71ef348ff2488cfd2b10ff47aba37f44b0e20c47bdfcbb0347ecf42e8664d65e57c25ca29956a8b7739140faaa7f52d4a18ef945d48636a7f33ec33351c4ef57fd4a999ac39f39572fda4c83ea9b3a5c9e1c294ece99695b568c927ba6cc368adafe67d31190934ec8528e8dec859a6f1ef028dd1c94a7bfda6cde61f5d94079994443e603b95b20d5a0638310dd076e9cc1848b3f06862807360370bf8a91a680b2ba3e0a98055fc03a87de07ffe5dda006a8a3b67d993665aeae32644eae9459c03765a6bb066e20874829226cca5ec11621e11358356d6e0d3b3194940bb56d0347d75870f2ce6f2d40ef00b2294468967cbdc6250f3f88f846c8c0f91dac32e2681da0784f131482fe8a235e97411f0e05844f727b1f5ee63d9269fc78cb53f424930f2f6fbea92edd94fac078b74cc378ef3fbefd9f585d9c19000c81a5489ee9f20514f943a5975a99f79662298a7d3358e7692b31fdd4feb723a7eccc7969349522b7602492331203ca3ec80a5081c15c071f7879c7d2b207256cfe937ee9a106d88538d3e7b8805cb3283efc2787af52ef2069d94edd6283b5ba5bbcb1769bc1a71ce7f42e6e222f72f12b5177e559e8304a73c2eb6b9cb7351e788ac9b6a1500eccf1e7ceea73d65a1811bcda215d965acc2ae925f3bd1c3407d99010204e2c8043eb4151a401fc090b8690c6c226c7df43f39e970c301d2314e36f3d29eed19be038734f21390ae059ee7fb65e51f72e306265b72bb24492b44a6aa95a2fc9c2406df02ff8958d7061dddc314c4bcec8100bd0fec8a02cf3746334dd277d8f83d3006a7c80b3ee59e1c928b01280995d713452e6698630d5c3d2304128549d61167434ad6ff0b7dd2844f7cb57ad012ec2808df684d0faaa20fbff9dc3417dea994dd13afce8749ac3b5cbeb720d70ec9284c4b7b11cd4f11a54f51b8ec09b70ca01d2bdde17af1332a01788f84e72f74f95a99264c67a4b2e71b372e15e80a42714bbae89fac1d6f3986d3c60cc71df7857af2f266a3508cbd6ad1c7177c7e54f1afe7566fe574695132f6e32241815ab2f37e66c74afca71086470a5a8dbc490690dbb1bbec9e28584e096e2d1b03a36a0f640ad7244f0cc6b5c28047e36b299a38be80ea8a44b4382236f0951e4adc9414cd66fff8f2c2c9406aaf444534fd94edb74c64870e16d7f6a3f0c112ff0c184be003a5908cd1ff6f6621ba7dbfccdcf8ee9c90aba3551f1278f61bbfc93cdefcc66833b2c6425289df5e1251b39e5aa18cf8d8bdac79f6bdde8a0aec5173cd6fa61d0f27481ca9d8fcecb28ab97bf62fb9e8a387d08b4641fd35f6633fb9cfeba9aba3b6b967eba2e65504f0786c98ec9cf55acfb892f6e4fc7e47ea3a16cbbaf7995529c22c0230c4216e4a9978281e5ea6635e0b96eeef03ee664aea93aa22b76f8f470a72d5cabfd65a62c3a88e0e268427fc72a016aa3c0bb94bf837526c12b6b8d73a414cb7fffe2ffe9f03b2041d160e7095b6565ccd60a9b40c0bacdf2ff537a2f9a14f41ab2055e7d4917c476be481841be3964ede729f4fcd15a0c537b47670f09bc6aeebc534e50b5ad5213776e6fead2cbec998cb01e2e45f1764517bdc08c6369947e97434bfec67a3d8a955a6a7f29bb61322f23836f8f1f706a6d3d134247bb154cab5bd3f1ebfd0b5eb082a4793376674a56fad13b2d12af15d43bdbab270f41db910372b4a6a42002217d9a63708b63649cbc740ba09966d9f540963171f4be9dc0e0a4c1771e301790b1a8b87178fa0358ded87b7a125c4948c1bf7fc909e025b369e6a2edb9900166a57c02a6bd7f9923d89ae529fbe3c63765c3e08cad6ae5f115b4d36b04e4421bff70bc90c788a8763027e320d481f35973400e4d5d9361025aabcd8f8e916c38f62350c03589b3d88c0bffff2adb331790c0437b991e295fdf180bcbc52be2364ff069a576173dc332b396357d44180a34a13aa7ee5f9171e9961890471846bc538451c10795c8bedabb30443a510499d58f5e52dbcc5bd120b27e8d62eafc03b74bc39378a9c723da8f78abe086ab5f09c728fce008cb060ae9a803c71894c4d1c319ad37b7cbaab8acb9ed1e595ec238051506798971790e982fa3d22583783966de7ec34448bbfb9f8e88224da15be6a5cd2026c2e1b2a26a6fde12965a9654b38c78b9d3c0c029d460fdbad815849c459baa66498e4b7cccf32316ef8c97ca359e2b69eac66fb9e7cbce468d2de4df511b35c681f99bf43c54034d959bf4f079ae1781fdbc033256496a43e15cf52654c632b600962c8f250d1f353cfb466ddc16cd60812433098c44623159153de7cd2721b349f685c43388a74c2a3d04a8e972ada4199177c61657369d78f907ba26a8934cc29d3029d4415c1101e3a8283e4c48bb2b8639fe60fc67f6a57b1b03fde507f10efcb43683e1ae223851b962370e1f144b74f1f9189e66cb831dc05bbf46e03e93877a50dec40dde5239a0fd5022a15dddd0586c99d7d38a7653a037e758cc83d4effb2f21630bc3c3fe074036447fe6673aa5bf51130ec213af231f02851d7f6778cf2808692871220144d145cdfb4c8c169277faea98e0df92c187ad76637fafc46ec1f030d444e0f5f2370b39a40e90f6871ce3c902952eb123e824872f033255428385449fdd854e97c7f3122a9b3a5cfc14a838cc2da55c92d72441e0b8739de2e3142efb99837d9e3a89d1cf70dcac79f5b4a46638c827c6db093128fe0820e877495a781760057dd56c03333dec87894695b661350b95184a6fdf58425460aba6715185c5af68df4ee630d6410e50927dc7c93db0e4170fcba4a6ff33ecefa4f7489eb522c62a1afd94c52928a6aa2e11c7675c1ae63025d56412ae3126207ce02bbc76bd48cbb967f44abc5349f6d499111b5d019672f2de1accb5c8b4959c0787155b03abc04324812c006f6cb8fe7a414fb0d35951ef6c351fd6690cd17ad40743d28463aa30a9d80385cb8373343bb49ee82eb34f83f63f8660a0a34691bc18c26dbe14dc1a7e454bbd0622c7fe640763736248ee4912b6bae4fdfc778946380b8d2f13f868f8757f369dcf09b5799647e31c6e90b7382717e3ef8ce6c9f8e1a9c145f56194cec51852f0ecbb01e30db6a7cba8e956dd0d17edd3d916dc5aa207aa914dba3667d0a1c2ae107e6c46ba3a31ee9c5a9077e5455369657a18c1f5bf99af7154b63a0495e633beb64d0b483d21f3ad66fcaf2c2ab51ec6a337f5693c2eeef4e3acdbfd8f3e106be53ca72449f889408103d95e32a3425104923b5907dade6cc972b417d84ac28c9da3a0caeb160e1a4b4e9cf7e78e92b920c02a519d1e0c3d98b068e01b9cd8b5422a9ec89b1af08f28254095d3d78e438a3a38ff8668e6ebb3ee50e2b394b15a6539f799d467df13aa308a94622e73a49368ed9f3e5bfcebad75029c5ad2eb00994a21bb219d384c43f8d1902ce40140fef4cedd3f67bcd207fcf4795bc7f43c30d3c3a8fd1b8a9d77d69bf59eb8b59d0f464315f40cb52335debd0650f45b51de7f43efd173548bd852605121ecef3d56d5e0f616cb6463d9a2b2cfb4d88f05f4a5290c4935149bc804b52f71113c96683c3ee9f21458f845d18c31f1f50dbd15ddf96acec14941d96610dce6c61c3ca5d1935e3087f1651cf38fd9b2da65ebb4922b97dcb861128eeefa060d6c1c94b25eb4ef3c96cc3eb171643361e91616435a461fed7b0a924b17d7275f839c32f00bea0970b147f9c5f37fbb79b1acc154aebf7f8b999425b0694ebd57ad499bf181c9399768030aacc258fe74b488716b081e1331849c51316bb734703973443958c8fc0b3b7bf5e8867658ed7237baf8eee89779dc91b95087a72943b8c7a039f97fcd36ac11500bb85e774e6b38e280cb8558cf0202a2905595084ccba54465cc3429b42a718d88c077b602101a9c85469af39b856dc1635e175df5b29aa56f79bc9e0e470b22d24768b1b2f14b5d88b88fe479d7418a6bf994a6d93e2657996a4fa69f824ca49ab5a7e6ebaf498a0dc9eaa7f4981c51fcc0935f619ec6bf862683b0025cc48724839bc1e67aa3c686d321ba66185cdca83ba9f41984fa61b826ef56b136e13f1239dadf6e03d877866ccb887908917ef0d33f117b614fd291e3e91736b15150e650db9bdcdb56317f0f5ebe97c938bd691fc91401b42576c606175e0d5c635103612483ad51bb78f33331c93cdae11c6389ee98470e19e2a6e5e0b7af88b5b41bd33c236a1766b265611b14e2cdf91092aa05fab5dfab9ac70bdba097d6b6fe723f88f79d9ce6625811413e24130f3e58e8a5d7c8993903a8f07e9540b6f5a4b8fe917cb242b92d4dec6aa17b3a81fa38ce54ac09db70b1bf2c302244b9d02b52a8fc2f42a96d67a92aedeb52a4ffe8a4e388e3f406b1299c3796c41e5ff506c1c71f9bb94161a60c8541883502e76e4f90b91c11bb98dfa27b18f73809d2cba8c1722ea0ab446cfa641be4aca4c70f7b8e7ba0ed6a8648748f4d382c47d7fe5a20aa7473377430d54fc3ad243b2d50db15273ed18407f884ec9a0355ba92f3688d1ee9bb867f762fb0df2e361668b6c0cd62428898ac64561b95e55ea2926f563f461ad408c4b18c3fd5045cc727c5cf2fb3385d28d2205a74b75aa1c034a6a5efc664774ef2776d353babf2ddd8e278b4809cd9b5279124b074dfc964185dd9e70672ffc9774c354979a1b2cb0ab14fe450ec78bdfb5b273754e1303ebbe954ed8cb2e7f8c18486d52571f70f2ba6a747aaa3d4b3ebc2e481ee1b70907dddb94bdfa0ca6d7fd4d470b5994a2aba372147046f5837778cef1896caf509fc9f798a55c91187f0919094a084169e44e7407ae48b9da90cfd9963e59c481ba6c31831b59857d8c26f6dc97ccf06ea4a3b774bc1a4ff893ab9961c60ebe4461add07da459af7f073b2ae87b0d6759f38a858423227f8687f35478a8f565409b741eadcac4d8c4f730fe547d336fd1d9eb245e6aca132c758f53036c74801e70a9613c1402c8f464edba4926a6d07e5faedd2c1979d1916466de2b9bf5d985e835e2520a7b47b85659a6eefcce52098cbbf813b996835e5c623c17bcdf361e0cfee91535971db8d65e0a6c8914bd1a69fabd3dd18bef3a666ab7f1579a6091e3edbeb01cbf119bebe32dea55ded858fc5374d2e9bfdece886795def48e1f8575eaa8494859ed099ed15891e6956c6c4faf64f9899a17c2cc3f1f081c233aa3cbdef0093fcf77acf60ed389c6a241fd6af4d6db3a8464bd3adb9d9756c17b92ecafdf178b877829fb83e6f97d6b1fb4530c12a083e58b67d92357b32bd0a8fae047bb9cb3ebb72bb518d909915ace3914dd606fed255569b1ff948222b88a85b08cccbf4061fe582db6f3e38cd61533b5510870ffac8a6bca589e2fc3e1e9d963685ca9b95313586a437dacf646be4b3c4f51cd41e3f2142d14bbe096b38d9e01c2b181a628bfd474a8bf8f55148f28b3be85ab3b30540de11d34be24973d7d938114709048ca7454ce01b233a751732188ea3576fc7afdee5951f0f4f3c31d208fcd9efe1bfcdf119c8b3d1767cbd38f94c89079b02a8d5db2599e8e30e528b0d3243278091dbeb3f9a4598abcc7f104ca69e7ccb22d65350f96f27bb76c434c356154867af4b843cf962e130e0b7488121460f86c4b2c7e574e1242ef1f18fa9dcb2eb1d64a76c705a7e33ac561052354102384444b8b4074ca266b3fc84fc4f3abe58085e79f4a8320a087498f4cde78a659f8a4f729844d52577f112d90b21f49a47cef93dcd131498f83035df0c0661e2addf315af51ca2dcc05cc1882cb0aed912b7c16d566f769d5b559959ad207c0bdb9996ec4b0d3a5af85d74fcd179adfd41795373110bdc99da5b4fdf11b41d33b17feca11a8500025879c9a1a9eb86696c8a0bf99d86bb20ddc7d5f9ea3fda1cb7c8af13d412987589482c311694dccffc50777b4c4e96a4de11a81487224709672a5aaf18347827033f190597f3f57369630242bdf1f39863cf52b98919c89c480b7bed577903994ed51cb9be8785064c38591a52ef569e076742735074f347c2f28f69024edf3ed490b3a7eaddeffb0d46c85cbbb54418216013cc9dc23b9e6056018cb9346faa3cf85a6abd55bab43524fc7458d220895a40331f918025f2b8cc7ec2dca8494dd0728d6c968d69d44c59520baac490740a9e2cf6fc4d36f734cc53c5fd38d0ac37a5c94816f361edcb3a658d221af86acac05ded3e87e31e5ccc3ce08b64ba47faf8aa67bf0657433a6ea3736f33ecc0035d626cc8aeaedaa94276bd179a5a9362e18d55ef64ae77025c9858e2adc2365ccbc6e03b401ebe92c5bdb62268263138070e9d286cdc1bcb9ab0981cf73d103fa1f80206daa72cb1dc5e662c4cc183b2cf8aa81aad6483ee8f88cb8e8ea1f01466722cabecdcc78edcf547a5c6a11d9ba1ae010694dc61f3d18d6db8029558839fd1da9ad533f1727e0ec51f5449613b33d522acc1a81863d73af919c18bbbf59473866452214d1505f77909742ee119ec8c975d926c29c7271df82469f99cf31ae3da98b2393cdf2b6bede4a4c63fc03250d999a57d088637b2d5785a636df469bf219893e0334944c86e4174a3bfc6abbe63f1796f57398f762b86215db182274215f465cae2dbf899a490524bf385cf21c0f57cc77859a4f464ce3d4d0a24ca29023ca63dae1fad5c1b61dc237d9603276b062df9fe5f0e9a1bc13cb5da44c8e080c1e3dd077cd98c2d3660ceb06ffe3bdcb40b9b5bc222f3baff7e3ca46ab9f50c249d0d818c03a6647e8eb22e8c06db907fa400131b987dcce99025eb2f03c32ee530639ec5c2375bbab4526a72b39320d965eca6d3c5b4bc10011620da3cf743845c53d1a28bcb7d6b8043d6ac8adf0841ffa5a983312512f34f91e824cbfdf4726f72acbad6bf341160eb0592032ba159afbf7d92614b6c13ea0da3674743bc4fe8349267199f3a3cd4dc79eba315a68114bea589ec9421e25f0de54a2565056d551e254feaf7da5e6a7c95e1e1096248bd17b3e2399bceef1d071025fcde5a6b4493d7cdc135aef680600c4d53937f11175f1b33beceedbaa27dd683241c45ba253a1c7912f52285b51b2f566120579aa1f96de702a9e8b59df68b0a31ab31ea857585da76a2cf8c770281c5905c7615eb7b0e849bb95a606df5bff3ac07b97cd3da865a62bb209b54aaa5f37784754352588f84e079bd5b70ffe80809be46d19edda0714dcaa002cc97fe687d54bf838516637087778c076579858fc13b549944f356d7be4dd8835d4f1dad1839cf56e2491cdfe71f30e4a9f73b23791b8d2474c03bc62ab1347d75346639eea02f4e08453e1b85ed5673ccfd5b4b77bb3b139ca8a1f529913e51a2fc7a87472449d945af29bbfa7e67552cf0786063b6f8d72b214bcd216a70b064ebcd2de832c97948fb7249ab2eedd96875151ac37b40ffbede7bb6a8a9561a4996d086185808be809eaa4d1e9b54a10e0fa3d2fd949dfdb624b45a25da68efbf8217387e0092096b2d342edb30262c7c04c711988f8a41af88a8203f7a23b1354223bd7fc8fffa871ba2775779fcdc3118d16f1ab8706c199eb9914c0510ff593b687d942dacf252de67bf19f52340cb9065340acbfafd72cb5b25d217bb3a89f267f1618b13916d0a065ea92e43faba2ff518df26844649831f76780e7ce345eba4d15e7dde58241300de7b81d95a7b2bf3760e54a7071c7a78eb9465e09a2bab9165e18277a7168de9c7079c4df08d3902e41ed2cd904a05e9fdcdca80cf99a6d057a1154a1ec2df23a0d3da3c4d6ecb85eb972d827280ba05356a88d7e41e51c3ff03c2f01f978b30e476c80ed1ae480ee4fdc1403e2f0b3d1b114d50783850fef48007f43a3316a41a56e2401dca530078c93a9153c37e04274874750c6618e3b0bc40b0eef405ffab0ab57a9221610d0f7ff5f043dc96fce2869ac011261e04bc0f29c0be78dda62ee8ce08df61f68721889fd78ed8ca89c5421ccc26f6d4f48eff1fae1920123a1e97789545fa87f1477974d1b5569d3d580196f39e66d215a2129ed39f88281de29d518a766999edf9d9315927c4837a035b85d117e499fa8dc023dbb22f93e42340f562d11da0dfb11e31e886b121d26f9665df040e9115babe4b10e174fa0f4948b0b8f6a54148f5bf130a328adcd8f578b397f3236bf9a133713dbdf6af01cd1b3ff7479edfbc30423138bbd038f02d48fb7655e16f08e9e6329c9833475e471eef985458e09c093e38ee931fbaba7fadba04acc72ee5fd3d0bc810a947972fea3c36ad62087ae90986a658d7c68a750d5bbd88333ff343ae693aa7c7142ee003c23ca3489bdb583a96fa6d870102a5ee6d2b58b3f6c355c0e78ede2b51981fd20e24d68b3f3fbf58065551abee957ad76ab89ec807d8cc0ae31f2434746537fb7c89c798471ab6e8414195c4e3c57c4ee10fdaedd795eef308760a70f118b0d699c5f6fe67eeb741d449ba50850522bb4c7b8da3daad66ffa42e016f5c251309e283d52c064e391b3bc83fdd46f6f6b329863788a5619ca762a1999e1a0cf6ebe32df2bf969bd4cae45786c9adfd60bcf4da68eabc652870a06b437bbf42a523183ed017bd69e2d77a722fb42e9b093f2ac28268842a72f20a058f96b068d615fe30edd2df3b0bd74aa2ab1b4d5258c057f9247091140491fbeaee5d91e1e25b119eac6f7071b830e153897d8eb5c7d6f8c8bfa167d465d6f295d06ee8405258def2ac4c15c0708adb2f3b396737eee989cbc4697cce1f478a90e61907f6be95c2b76df73389bd2ba47040fd7b4b267e876cd3374473895a1066900a85978fa87967520f6e4ff6b9b9d12b381f72171c7e465c9953674c8540715ea1f5853df74f8d08e30a85c5bba7cc6a57e84f2939dac2c11e2e1bc15f975bb27dbc525208d192f320acbda287eacc8efb4a34e56d297cc12448f3905f61802c0c6e8154639c038126c97a05c4ef4bf990d9c5d41ce6dead4a18a131fb4b893bcc7084cd8dfb796383f52d77e941d54a970b646dcf9f63160e31871eb9b1d1523c56ef15ee9c4efac6945a617b7f02e29c43a32afbcf946bdf0827bf2140e31fdaa632d60beb0ec74d4b836ae1f32f620f37048437d40d4f3b2105bbb85558f535d2d2867c642349a66f2aecb34ae5397e4a0b11fa591810b0f0936cf57b8d62cc61409fa69447026093d37f75d2bee957f1294cb9db5f50cf1b737b4f300af91cd62f9a20f7c471ea4dff9b805706e22ac0e1ad0cc74d9fe3f6083f4bff5c1895a5d1fe620b4628c1f211b9991467c4653db6bb59995d5eae14d4517255eb51c554fa44e04b26877624bc61f6a75c00a5cc2ae026ee290d7bec6a3a38c043252a67eaf62233f02e854a521d4f8c5e175af0b0c40b221b3cdc012c5225cb0e134353369abe622d8e6df77553fa3fe889035feacf6cc1be5d4ce7bd41bfc2869c9eab5f9b0b3259179ea0889e8d4e75c62d4e2b7ac2698cff5d047f817d634741aae4e88f9f30ed5a95ea1e658f14906f3750154ea27601937afbf589d519ea72d67443e0f0fa64e7f218a941664ec2d4b01a1ac39373a6aa3512b1d35d52dac0cffe042796db5a2021c0bbaaa93987a735e0be620beef6a3f9fd36e67caa82bbf5c6abdbf7703793b376c809de815947276872b282448c21581fe74bc99d8cb4c682ad66a94577c305bf40f76c92a25502f5ca3d7d20a1a2de0f657bba88535bd09 +MD = fe8d535961f5f1fc4d3287bb2b181c9f40956ff52e7b876e77bda687 + +Len = 59152 +Msg = a5f086d46e0056a577b318088dec36908c6e77ba8a42d17253587fd8167153435d3b4c8642be6b73e0f8c39e09c4d0643701092bc4efb8ea5ddc0aedb40162d275a7f3d87c8e8e59458eb894a37f00b0b55790fe1692017f55d774a6a5d8de5ed57aa34f8236675d8bbe2072c5e4707ef0b833bceaf15436238fe48b51be6df065fc8375bd7e9d8a9bd023c1d6bdc8d5cf6e1aeca7d65719af4d8325207ab78f0d77bcd19530d9e55d0ce8083ed0afbe3ac06e16b507b52fe15878fb7bd66543b53175eb7312c278b9ba98cf64e6ce3f19f557c27c4c1480a2faec95c8981f144573d74cbdee014a98215a9fb2c6cd635456fc79646f1d15d879077c70898c0ba5850a7bdd8a3d63e08a57fe8f3a532fd42b86c2d53677f56d1ef037dc71552fbdaf350039ae1fcc7b3db777630808ad7fbc1c26376bca284731d04e73182289753981643b244e8c4f82a18f97f996e43e50e72cf2d4c0b750face4a9c459a1fb66a152e49b373ab46a13dd091d5a2dcfa300f5c6e3affa96ec013b2c1c265fb668c1ae6cd22363247e1b4c1ba64d79e99a5bb3e13642f068bcdc70e49552c256fe5b7152e3a3e28398c2eea7a6dda3105f5135b4a1cf9d78e6710e79cc797a3b7be1542d4c3349506e8d2d43aba569d2468403a792805235fd719c322df4d7f285e5bf52785bf81953ec9066011f1ebe0486a630a51faf2e665082d4367f7c1a90fb2b68f4788f5ced53b08563b53221fdbb85f635f804c0b5806aa67253c6f2117420e74d337f899f74f638200254acb6b53b5ee1a413ab6fa3ac4f6e3c5937abf32843eef7393deea2d9e4e270f6ccb3e63ed114ae2c3cf91cd02586739349b4faba15564e4cd85f7fe41217ab88e079c0f9036b60ef03e66e6ecf579415b6c0fd4eb21f933ae7666ead562bfc9bb67cf7f25c4276bc8ebc1ae0b35e3850fd546d6ec0b78083e9a7f18e17bbfe9f8d31edc342365a153bee94de6816cac58be3ed82c79a70a86d78ab1edd342c14f33d04e45ba385999a028ea063fdb5f3e0f3d0332d450e28d16cedc81d210f9c76f2efce1f3683ba377c4adf1d9f945cab08c7e868539385b4094c226e0f038686f800f8f35bcee782d06bf31b58e0703897372b0f22bb3f93b248a6365ab263b1c0eaed8e9fd1b20a836484e3d624cf28339073885edfb6ef1c65dc1c9096c475c1f024375f369a4d29c6fced73cbd9d842864a7a549b9c248c263c774d2b29518fc33584266810b91805d3bede5010e7586b285b90595fe2a5fc3fdcfce9f2b39ee689fb81e0a5dcf293a1ce626c14d3f9c18582bea36297ee6a6eb40c5dc13a53bc9a13fe2ada273e02dfa2ac5a560c8b2bfaa62c0454b2c9f331a307e1155462b7fe5407c12e365ed5e5c218a5451fa10cf02c64f696d1bd2931108c2e5f70208b2f321b2e0288d98f6ca333f7728bcfd6fe9bf5e4b9535c7ed582e590003c31889544c4dbf77d3291dccc8aab5ebf5c3c7e6b5b792ce61c66a780c0b0b8070a52d8f271559da1fe7faeb4895b7a48fa800811020e71d871632f808a0ae77f1f5c62c1cd15358591bb6ae1bc6255a71f542423862f28c90006c608cdf90ef2e507bb4924b58f9690d789ea905a61683f1b4b296455a2262cc4139ff915af00e0074aef1490ec6370569415a1ce2dfade67f589090c8e7e6c2d809c97eb3837c4cdaa2a0941dc6ab4bb12297d182bdd71acabc8f0de3e404295a5b526e44ae5d7bd51809f42e02ae2677c6c6ee2eb8e9d6be67fc825420a54beeb40129b57b9ad68c999330e98026e0e3b751398dd9cb6283e03db8c2a3af6ebd9e4076adf21ba528aca612f54afdbf1f7c9e7b4827660640afbc77d6760cdbeea0771fd41ac830d0daaa60fb68190c509d177b06aaa00a1e5ddf8638a0a2daaa430cead3fb89beadaa07e3a2e0640ea1a22203706b62b5447110af8f295bb2190d68a0529d4798e7a4266393bcc40f381429d92e719551da73b6b8831a1dad6288f309f809e807a5506da8750423553d7b93c6e7c51f240aec386abe7ad211ae3c15ec6e4656510f374579f1be6829d95dc892436dea77fa63008de551612724b037125c5c77be4ee0179faff47bd333443005ec73dc91d26075e9a3a8b237ed6cbf44685435988ad349e356ad449b75b733e787dedfbcbb6bff459d86ad8930f817483d357725ea99450b8ef2aac9c43f39ffbfb7da3edd0d066b7ef33a6416dda5e6810724af97b971df01ca98a44b63aa163905b4605fcdf221ecf74112c7a2d3e8ddd2267cb9bb3729553df3752fabeef4a0d0576a69342c308f9baad96acf0814f89f64d47728feaf3253a4849b9f6d619a21aaa425c91a6011e65d0227ecab347b75c601f9872d3a41159319b5c88f25cfff9555b914257817e142d42782260e0d5d344a68602e92298aa87ca5adbd07e97200c74d9db5424c9242999218e06b575e96f6ec3c687f93baccf494d65dd18d82d3400aed338455034397903741120080d44eaca143c927aee5cbaaccd9496538f609178b0507dd3c2e184766b1cdb1cbd79ad11a27378c6ddc470e169738199b526a9dff95938a43ec62e22d986212488522822c7c936bff9ab1e93c016551b3cdaac4d24af0042264bd87145e9acafec72de861aaa36b6d065162c77d9ab4895013b38b8be5f4e17d735fa46b3d82f686042a40193035be076ea23e759dea24c4eb93b2c23b028621cb91642813e136a8f07251320170fa8751d02950379c8d0f7b8bcf56bad51b370c45ddfbe390c81637e51d5be0c52a6d431511763072ca1b0bc46baf2a16a7a67fa5954d7736b3b921ad2bfd93dc55a18a997c4f5013e5cee3660d35536c33586cd61687957c0078f8f20381e35c830a6e83f5435f28e5124a983e50fd80c6341b03e80f060ab63a02db2e4d98eebc9239fb01ba2458d3ce8a828568effa6822d352914f9287dde9899133cb7a390920312b2a1c684cb6eae94d6ae5f281210addeb9bad009c7e6cd33c9a6250e6719da039f7d1f3ab964db021752fcebdfad481f78e931af0a0ab2802ec79e49cfdefcc4df0418d1e7ce126252fae4b57fa69079ef068a62c4b8ed20eb07afc04b4fffe909ed4fe4d6e8d95821fca30f72aafb7074b946df787fd18866ecc61c59eb57d2988f30ddf7739435fceec4744908fd95b267f37fa5de04193afd7db88c3f993413704847d9ccd79e5c27a56e736f1b4c10a91ccdcd41f965cf90332f52cb48600317129cee7327f3c85de268724be91627e32f346f5a25f0ad7b82db3e0cc9f8d00a0c57b5f4e9d8b9f7e7fcd61dcb8660aca76e0c751e4c4ce5e956be72b26112bfb1f2b0c0a1bfa96c42961f53571f436c11b5152156cb3685d32c44ab763b33be80187f74f40b3f417ebeae8b004348b7fab429ed440fe2c1dcc67105a9d9cb7d13136270356db40de8e114234b84f906ced5ab478a9cfa2072bfb41fb1ef3271d78e1a40fa39d0383db7d0cabd76dcef0ab429be7ed4b53811629e6822ce114349e30775c701fc46d97d64efca7b5cb74aba15b0b549cc6f4579905d6108e057e6bcaa7d104890b048dc60e0f7150115eb620fdca28ea83c9b4f2a9e112218263a7583c55a90461b084f356cc7c6628189467870eaf5c1366f6ddd78a79c3134b19813fd2a5b84cd943052d1b121e96080d1d04be331bfd35e50199b98f9b419e8aeeb72f41cc56e793a59ce479a0e598e9ea79c2fa4ec99c4807f6569ad293c4c247ac54c56807423c7ba90ffa159c2fef78f0024c1e0005e896f74ae38f92258933272979b6e652062e5f84dda54434e86c706573b329d78e57a27bb2fbc429a75a2e95a4db7b80b967c32b6a7764119d7102d5b634cc7a00f101d24f3eb339e365cc8390024e321ccddfece9b4842dd32dad3a5cca7256070d1c37017fe7bb06fc06d88351e8d1f809bab0a1832df05548797aae9ca2d36a53f99311e6e719d8c6e67dc6f0d0c615c25c5ddb0de5c2ea6b6e7ef4d3e459f36aa2ccc79c3bb9216c735aa1088e783ba1cedddf79370b593e952e7696c05068fb1fcc6bc96b05a995b5575bc1ab4e324d1716f5f0a8336b68f5727b0ebf2092ad76794594ff6338eab55d3e42aeb2c16f3ff2659ac2a2e89296334d6268313929b1bd9d26803d95137a5290b41f0bb2af4f58769e0cc19863815732bb43eb2517d87fbaa776fa89b70c209a3e87c0cbb44e2f71250ef64284bdc87341d9b71d1df1a7e53e6702dc7e74ada4096c3bd52744619e5651aab09c526c571bb1fbeae6061c6613ddbd5612b9e3f63d59e397af39d5455a5c46a854492d2872542054181ec8854f5f93be18e3a8d701d320dbf53673ae58b730f354a9f22c6d488f235c42928a1a76ecde3bfbe6917d645a67a142232179ebd259437aa2ad3517af1f597962bc9ba8307c2108846ada93f9045a66cde5e57f93a1c9c527f1f148e710b8cb2064fb80c76172126aab40e8657ac8a95943c3fbda958f916841ca64a1bd2040b4ca61831955d722809bd6ec07919413af833be811fb3de64de4e8f244ef3ae10736f63b8e20f73eae84c526451166acb8ed77cd9f9c7bccbe24727a386eaeb5fff0e22f8f897c71dcac341f88c1e57d5ac89c32ec40ef4ca3479185e40223c4853f4ce782590bc0f25c4c5d396aba8d7e5ed59f60ae446de4966c9ab2734117826d5cecd1584f35d8dc356abed48de40df5489d63b020386a592c410988b1b5dcc03cc5e24eedd7767416ce81c7058bedd61db35d0c2cb31bd8f802510a1ba67d8111fa1f0390aeb46c170fe80bca8908497d6ab68b0fe8e05af966f3c226f34bf70614ef3fdec37b0b62b75d6785e644959049d6f571dfa22956f455757ba3306c409ab9c97f1db19b1c4e47a5deab8b047dd82512fc9f478b3835e0eec2be1326ea14e76a1cc44062705a0e8b7cdfc4dc6d9f0caa5630b8c9c7affcf4a24ddb6e2a0ae0ea5dc10ea9846519e2088ad7668727f184279ade2a2aec124ec357728c28050c11e91b05b780f6d27129b4abeaf4f73d6918e5a0f88a7488c5cee4bfc80e8dd3a669da0cd68d96a00288662ab0db975921d01ae5790ecdc8216bfdaa6a01289d7384070a4cd3cbeb5bcca83bff6590ab74f84197f7df81382a41a81bb92b60d23ee3a9e96279201c459e80c621b9699d2a38609db8241842a7f9effafeb4bcdad02dc89060a71a9988a6f8b45c01aa960a3781df0506184d623ada2f82c4c41df10b6ce78e8743cbec8b17ebf962dcfedd9eab4525ad0bc021ad70a38a81010468259ed6333e221a39f6e5543f06863c6b14e7b762407805adfab93c6116faf5ff22654599f73fef368e6bd7781530ba7c423c1d02e8e883cec8bde34ea937597cabca1c06d823b0acfcb05deab662dfd8d0b25f4ecce2a24bbf858198634199a867d443c30955c764e7bcccdf12a513466551658e15eecaee8818fc886b9f1b4bff8ba218b35d9a23f8980e9d5180be90a922170aea94637dcb7e3e66ead9492d1af7224cfec493b4d74b096c9a7c487c462c5e09745dd5c12fc02d7a07788a156121a9a9111118de2bdda796151f1ad3e17720d5dad089825de5b30beb0345cd7b10207515cc93689c57ce62ecf49a5c250c47b44576e588fdf5b762bd02e41b12cc70f9317e6b1bd4c06817448031e1b7f2b9efddd5529ab6f920c8a6fecec8cb5e7f7d8eae08bf78205cfe484d4728423160cdc977398230f7d883ce7e6b9c50cd374953e4d21c3380925f1de245fb6cd2229832e4000614fac6db5c0a235e49217fa4a9a831f9aae7f282eec79120dddce9963fa211ef0a07d21a782a5ed85d633ed8b8838d1f885d64aee185955f3e579c11193bd204b928e4864c6784d0359a5e2ba7fc4e5773ead02c1ea3b882374c234fe737ad0fca64e469fd48fd0f79cec6e69f9cdc6713971e45cea9614f6fc26699d21c09d6e4c4ba09b656315dd0075e50c7e99f17126b363e191ffa908fc14c3602744d23b04e4faf9d178981e24e0eb3486d0031156f0062268eea0b3e51bf709ec6e3bcd60c89a2da156b4558aabe5549b0657bc7a965f81e7e9989257ba78dcf9b3269fd06512c96d8406fda245680f33937bfcd234b4728756fd1ec46ead6bc7aa2f4cd439093f9e671c80fc3be7a6e90dfc3d2e59c986dfdd4ad3abb71938eeb9b23f0cb2c202ac96418a08fdf8be13dc3507cf53e33159d30e3b7e0240c6c7685c00ba60f1b5209832734909ffd74c84d2d735d1b6047deeb3c0cbfeb887fa4c891c9dd1fcc982c35bc74cfe71651bae424602519672b466d80e160af51eefccc5fcf76467a25bce1a10853a0209d9beffbeb53228fea5f1e77ddc956ade207faf1c87c6a6f2041f19c9724b06183f1d87bbbf11d22acb167e8a904cae5834bb8115af475f1b241cc76c94b01222946066c7906f16698c2ae9ded19f140f8526f852de84e490346daf748cf79aab721e196cc9b88a4d71d5c5c500eb5086aa48816ea5fddbf3ad783e6b9b80243560bd1c05db7c9239047daee7aedfd8300c7698c39620a9a807d2f0cc70f83332e8b3eb4d4629c2decc98f1b14beb0fbe3457cafc1f8bd24fcbe463218dbe3c366299038d8a4e908132ce2aac687b8b63aa628472b29dea3d725301e54240c3b266d2f15118698fd2cf83d653752fcfd2e70d41b1efd55603837559924f2e5e398e08413280f925460b3071210266417e72deaf4437d0aa3487e1e6a304e5602e109f5f9c548bd55d6e7a77af80cd84e8c64d19a42b0e6b42e81f15b1f3f47e22c70eb918f370248b71b8765980a40e8469ef1d5c29fcfda13c8373299cea0c99f9ecfa12fe64a742ad80e9b982b842e3c62b26d6b50ae5e1fdc59b848024900621a07f24c5d7b2258a5a4e39f748d6897387c29e7cd6c887944bdb5d1e32bcf9e6cfd4c8fa37e9a680ab10655ef41de7ea8b7d2db1eefa04a88cdf1df792c7d7b1d1776a0bf3c24838f9dcd63a389d71a3bcb30f24921eeb931f03318cd355420b4bf3a26bc9c08d1bdd1fd71984e9d9278200bd258e9baefc68d4424e62f9ab6b95c5eca9f858d791bb36126d776760fe81e2b23522e4b14cf0eedaccc009864b555ab3372e1fca432acc02b67eaabb9112e588e40daea4fd4daf458889296532f14e9093d979d798825e127509383b77db659ba29d4dfc85e5921cf21cbdcaaaf00e0f6068fb821a7848dc39b584832b420f751150472a8f4f33eba9f95b192bd8157a0d7b195c317328ca74f2040513cd2faf80d52eb171f1011c00bd75f33e2ff18afb7e57c885e98a67a74d5b53d9f362a5917a6913c6618648a6c792cb4a5e2e9ccaf13b498061da3e5135eed1d65b24e1c3ee8ad405173fdbfca62613e8f93939fc523861a97284a8f32a3311a14b030e98700874a6889a4082d7c45f82778decf03fd3a3697236421dc8cc85c36979666fcd6678334c3230d9eae220bf5fa9105718918169075b9421601fc0a52cf493ea45395133c87417524e03e9e818176e816b067df0986119beaea134df1c01117875d5821083ec5e9c8fae3da54765321fa5871bc8bbe34d35f2f564c9ad2b59aaeddfad52151781091e557e7f53ff157256a7cd39d85ea937db80d30d56dff6e20bcc1580e2622938787e2ecec461833a0cfd14cc743fa834d6d80202af9b53be5e0f6d257278b19b2c9ce11c2f28f5c726db85091602d4ad637f64522dea0ab0633e06a85bb7a4b1b936180feaa207ba32e780784444b9121fcb9c6448488648a9cc9491f49b8d1c9cee55e28d891383cf95b9827571cff34a60fcc1953350e7902f797ad3b0e52c460a0d6c8e3ab3a43b5a72b0202673d191b417f28b46e52dc4fb37bb8f841761533db0d6733362ac34ca5ea9eabf6f2d8459606f90dfcd8ba6a451dc7e81ce6c32edd2e8c30faafc1a59dfb82bc8fc7770a588a14c7a8471b3bf5a66273664ad638f05fc042bf7247a8d786369bfb640054cd32024b384707aa0b3e1101e649573b5ac88ad14c1b5c3d9ab443b202707a0a3f274a007482879fce0c5dfa658c4d1e649372456a51094c30ac30676b94ee14f490744d269da2028739cdc6abbbc0c956e50006e1bc55bddf9785240077635a3596089c144361bb7feceacd807db82378e9bd7c79054878f09dcb5087c2e1c349618f54071acab2fb4e3a78ac7a3e1611c4300ff9d4ea66abe58952c91c71397a1891dcc7cae8d04687472df65b598a6ba1e2282bd0446d579847948e2e19a40ee4949e1cfcc0fba7be995528c81265cca6592dd5a25d763ddd8e7d9d9fe3ea4eec2201ce585c1c651cb659086870907dfb1f88c0f23d6aa6dde475c018d7f48259c26da485c31cc9c8289f5fe47bf3c6c9bc9fb467ed2fd8c0d4e4bd41fcaaf252fd4a682cfde11bea7791f4e33b76ee38b6dc79a974af1cade3325dc15af4e5005901e0f41355a3ac2996910eb9023f6f97a6d661dad0b9cc9bc86841f9bba58a60f8d5860c5fa834c815fc0dfc7dff97e6649437287cf946830ca668e2e578199a980e89f0e674aadc78fe870cd177d72c807bd2659a22432367dfdf1c5ca7d58e4955a6c7d44d37eb265f25f2e4ef58f06153db99127dea0442da4daf0679e5c47470859a107c037f87e78eb5a0af41ba6fe4f9cccc5264ad03605ba4cd3872c47f28cd708248351f035e6a5debfebb1312f6d507afe9d9a61439b102982aa317d445265212fbf554028b63f3af26ee81b2501651a5897078db2df6d14e99a144d98f3a47a8dc6da4ec371f7dd36d018eb7bb65b3967b51aac204d219d9cb93d3f8ceae572c32c29a292a46063f1c1dc289ff6a346808a5c42f85efe32009a24c98c92d8a86461fbb212c8193db7a69a490e4ccdc0476944f8c79f2360b9af63820495de99e60aa913d05782e8fd10ebc353234b3520d45d240a8861b82c8b61ffa16e67b5cc78ba3e37cd2de43673392deb049c23a17e1d5b3da51996dd90b878df87149a9c5eb797c5b37acdf8601aff527b410a5da8fe04dd7fbb8b4161cfa41b7a6596ba0f29c7168519e4b74a09ae05f1ca5799f787c76662d8040c712ff7e1a2cb58ca1c793286cc5bf6f7937db09202a8aa0aec33096518ffaf734141faceaac65f21093e60b2e3e1433dfeefbd63286c6004f9985155ec82dc2a44be033efcd6f87357d1e817862a780ecee81b15cd76183ca22025b5681228a61decd7cf138dd3157aec2f110d97f3cea5ff50167c5641066852fd00061df35b1f66bedb894b7dac04d5ac5bf4ca4511f69e02d1cfad68e6deb94dd26116eacddbb44ef0b8a0369b6836e644d631fa5d432c89f401bbfe7257bbae88e38d7d82c54dfebb4c2cbc68278873682c5f72250e538be9ed32802d75e285b017f20a0e8eac44779e316d96c532ca3261b34afdda8b5f2fdc718c7cabb669c478e53eb57a47c6d2396ed8abb3de613000cdf33c1a3c9a324a2971e48bbfd15280c77a3c3ab8ec37a8257c1b95d3ceed941fe984500fb39dc0aadef9786742c6ca195af722682b345505c66acdcb69c79619cc5b1e4d31ceda763220043534bdaf6b4f7ad3ee1a34ea70461dde1dc85a815bea24d79dab51f23c09fcb1b23d93cb3dc63bb1b31fd5b30589a949537122e056e1760e7976a3a23cc4e40356a3e588015dbe6e4fd2835925ff9191f4ea9d2d8b30c345693a405529018a7bab3e1f603684774c2ca8ca4762167b3a8a9b45d3796690fed54cc495513e347d1832ce0e7dc8faedc22916f84a7caab58d19998c91d163ad46448ced75e9969a36486ddd27a9bdc5b8c9f6063f80c49564dc2483752fbfd344b825c7e77205557dd57b46d49534666911e3dbc1c13d5cba59538283d019f358fe0bbf26862531677082e5f51a03326b776cf361cc997de627c2f45e50e6afebaccb2dc3945ab08b8ff13509a68edc2890fde7aff14d7b80bdef436520ba4b854ad0be4f0b3a4542aa52bea2d95ba638c52322fcddedc80282250a28ce1968ae3eb8cb19793872355623dd2110de3314aa592fe8f0eef5f42b20b319c76889df1eefeec35cc9c9cc09f13b34ebaaf534a71c78f4c8c587de0f5ed8c89b4c218051d283cd3482be8f3c27333ed8268f2141f9a890c405f018a53be5b5b828b24a8e2d44a78ee7c2e763526faf54f54353115d095d7124c14c83445451ac72de960a4c8be2ca6d797d25ef4b16e08bd4528bd345ab6ea66dd23004bf3cf6dee8eb8cccd3ff758834b8ea7a4006095e949817e8d81b0b0f685221f980d825b173c35c0ab75e2ecc9713277008ed4de216ac5bfa2b1ce4c44334efaf43a3979ef1a61e92a09f44bf1314635ce04d1caacd07bea3c9317a698102df72722feafc051c3af12a3365b43b4534bd7096043d4a22b6623ce93a63a44497ff86ed8e5d008e37b2aeaae050622e120e3468831df095d9b1f0b4a3571f62afb30c6d00369 +MD = 7275ad7dde919bc022fc61f1efb5e57d68d158e9696f715183e420b6 + +Len = 60312 +Msg = 84290f8f6de6ad6fd5d4b32f5e1c75629f07e5bdca135bcb8c4696e235c2fe56199a2bec36e4ab92170f004df877e9722a37e319b93eeecf4da6948b4e4128e44b744c809d48b5d047be33fa2163eb173625e79f6a65d221604dfc389a64a5bae25f7732e93b54912f885220220804b98a78fc3724ae8d2b8de4d6d16254fb42a605b6ea64e40f3d951667a6438dbbc0efd927c93141a9549e13283dee38b5e25f0b1090546c6e3c420f7974cc1a99952df0723dd747ae035981fc6686395804d41c8e0d02faf9f6fe1c917205d9259e0c64e47b5fe822a288d75933727f6e0fcede3647b6b739d490e5b68836f0e74454de856c114b8f98f1bc488cf9317f6b15f91227b8cab53cc211f09ea68767efcc055ef634997c4d5dd9cf596577117f71162a954f5cf5975a49479c9ec72e083d82760212f9722993d6f982fc7aaeb5aadd847ac495824e2134c46a66d7c3f56ffcd679f194f8945d5acbf00762dd7487f52abc5f9ce3c7df7b6ef046e0ae202a1c84411a9296f6810d4f89cd572725d1072445689aa06c5cc54e17860a78ef368a8a44d51ad4b7c8988c369880122e50ba78fb27b642a45fbb6ac56d7ca8cc5aedf06869543b3ffaa38ae0ae0528f8ccb730c8e41950d6b205cce3445fc61e5fedbc97206952f6dfd5526d580ff1eb0da55493e6ea526c1b4a7c5a53da5a4d0e33f8b84081a1453ed7ebc7dec6f46fda2dea447652d1cd63328010e216edc12d67abb312c3b192e1505dd48851b9edfdf7fcc2dc7954615267e2ef393b06e18431de70de5809468ee9b17e9ed8c8cb3caa91f760866390af8eaadea0702e17dd3798d6ec6832ca0e4aeeab6785aa7360eeb2ca4aa286c24452dec45eddeccbfe24e1cf831ab285291a1c452c7ee64b316d6623e1f4465fd758888bbcabc863b09ec143ec9613dea602443335eb04bd76ccb5ea6ea52acf314baf1a02024a48bb4d41187005dc3f4fa96c5dcaf58c30f9b6a70739dcbb7a1ad15c597809fbe2e7db6837558f960feab89fab33c4070c80d145638ac27fc95992963065e96299fced3f88e35bc8b540d6e205b77ffdb8d4c596e4a97f0022b838658713c908d6c12eccf36492fa9b19ac3f53a04ef49ebd3ba273dd3ac6eefd68d146c8d273ffff4319611e5bb5283de1bd7d345a762502db72f9701b5796f1cce355cd2c2d7e7ed72eb85adf7fc4731e646bbccb0ab56d4c0d5ca84b3d805c0ca29c6afebeb9069011e26045e3d7840b3d067fc939b6c4377b86cef2001606d01704e670ac1a5f16ccc578b666c9394f4f34c77b8990d043c55d293726bfb6bf48738bac81075012674bea5a92035893a3deda0984ac5919f2cb034339e236813fd29fd7c4eaa32ce85bfd58eeeba97e3fed019cb27027600ab7a23ec1e94cbf040a6b1cfe2a1e0b59dcfbd902eaf6b92d47845c9a4501c116084f4f443bc1219d0137a1b62f8a58c1b82a04576905eb75d6ab70c494b0e41da8529e4c405c4e14a14b8e7461aeba29d6d30274ce9fbd1d80be00b8c3fd70277ef3546060e7ef71d1ee0cc12854da981e3dfae1828cd72f2f0436ff3cad0e3d727a99090328abba78694323ec425f1678b21527ee94e0b2cac63820658b65656c2e94cd91e92bf980045a241541f2accc787bcd797f81af394c2ea3a85e1ea954596e3772f01635d007794c0b193b6002d8535b8a14612d64de41116cede01112414ecc0e05157750baca223692e13c021ac55a8b1c293433c498f0180154a48f2e5d16cef2d0c6e865722eff748d48b486fb51e36080cd8e455dcb1662216ab16ac39c187eee2a804f9cf8cc86e68b01641ac8faa50ffe5dabb527cdd8f06b613ca7e6557018ab00c16e090691950dcffb4d4738b67dd1883cca8ea52b69b088eb317dee91f552500310e8165d41d60894ba57055a734ef741c487062233400cc08be849a92e26595dab1d62b293ef9277897fc958997c9201cb9b5887f723d703daafd0806a2f011767315458335f57ece348ec79966342c6055003205c62cffc495beadd527631786bab5316c82e3d3bf039d685130bedd69d316fb60b04def2fd73fe898d02d2c9e013c6b6fa642eabd7daef44b77d7c7ab9c30510ab11eb2f217f764dc4dcca53edf217fe730a1185c1b3a07d2bc0d8fa82902bf8e592ddf9db07b9ef9f0a035bbbceadb7d828cd12d54d4ffa16dce79e1f1f4a34618e9e9953942f37c596632c7232f0a9d4c44c973c2f668121da93aeb8f8cb8dc60d1557b3ad40efdf87d40d39a3489b0de8755f1de14bdbf4c1c37177a414cbbd172a7a20db54dd94e63d4538ab1d562b9b30b1a1ec68d036995f3082aa8fb6edb5c54cc4a5d3cb8dba851d98d1d7a3d7e665d4efd723278f6a4e330192a315ffeece13c793257f720b96dd819dde48b9cffc11312ae6aaa93d7ac21de5b7b29acb2d18512db2c1eae257cd1a989b0d7861deb08c6e181f2919ca25fd2935536752cba388fce35b9d46b0348c4974bcbca1f1f92a2a204fba0726a3cbe984c10d8d8efb97871e13343f895cfe39d21b2f991e3333e66802020e7686acaa0cc435845f6aa456ccb357d5ca8b99ee1ef477504ea8cf2a57ffa936a214caf63523873e2736d8f25601ad115c0a85f2be0d3cce679e247f5510588793964d5467a8aac3cca85ae222c6dffa2521e9cd1c2e271c525e5d6ccafbb70a2f535d4d0a19471b380853ae9ac994980e17ed059e21df41f830a07a1e896dc65f952068863f054f519eeadf25d475f4ff36bb24aead0d45405b152fba8223c30ca2c12d43e28d6501b148fc2aad2a15e1c478b2b39959311129e61604ae800a1cc46624aaca86682e8b948d131d5a049a0a4f3515ae6a0c55e038b465d52da2794038d621be995dc272f71b47ecadc7145066373bb4e9def3c9369346bed19309615eca11886e4ea4af992d2ee2cd6835dee53f8f737dafd32c053a0d3215e6b66e0088e3eeac42bc8aa14b30c75feee7fbf5d678b2cf88dd51d03124f9a1a266ae4899fdb9fc42f24a37fdb5620e6211f0be825e3b8770f97fbd01f1db1ccf036a5c84c9b105552e3985cc257c7fcb9b0667cea9d44c700f00f431dea02e7674eb64d1ad9d7083589db03fe8dd5d316c82183fc246c68f071a9e49510f809ea17689091346e4d458bfe3df664d4e9d6eaffb5f0f589ed5c916e3d1b4f1ba4f7256f2b362750a5116e744320894fa1588d435b5f9d47c4a3d3cea526e0e8491cfd1c95702f08a017b5dfbc234790ba4a238f1c9e98007f74cd3dc54e72e846da031337d5b7f0bed6d68311753c6264fa52455244526e8e3dc25e05d871965eacdbc5aaed5ec351bd5510eb7ce41f52077e0894d768cc716d6781ff7b696cd113ebb6671d8feb1959c61b92c0bb3201e01b4b6cce57b4a992315c1a9dc6f65e9dc757f4fcc7c2763a8dd5bfe74e34f512be8042af9ba1c73a944edfb616ad47a8d34cbcf192f3e8be3101bb3709b29c2dec39aee1913e3ac524ccb76ad50c2cc3a3e757927df9f17344122d566a15678008ea1a0af4c484d057784a128e8d9e8ccdda3d55e53f20e82b797ecc0be7f7b7a9240c9222ef25daa0b40053bfcbed529567e6c2755de79b7bba37ee5ba4cd43514a0f0da818ae4285126284c521c9b3bf42dc5e8ab0b5fba956e153d5d648a185fe89d3f0db7eb69915f94c5b49943e8fed8680a1e22c8738d1f38306f70a50aba4158b9992278541312d10ce8ddd31abba9def676cbbdcaebdf7026b7172ef56cd3aab0ef7296d11e68658bb69156b874c6ae137bad44a7f6d54387fe022cc0bec51a8cd5504ac8fb89daa8e85dd1aa725760c8f57168f2f72a3bbb0cd8a753f84031b514649e21f39cb8cd44e84ed8fa857d7fabbe2e933605e02aa942a896626b7593745599c44cca856194dbd42a57778c9f663da072fb8fb93d9de83571436f708ebccc439a4e3acbcc9edd6c88cf571590ee96c5788eef4e5aaf7159cce573aa0fb670a589431511752b971ddaac4aa0b90b70a58b364e27eba986198f8ea0aa7c28eac67a7182e0c602b1ef08347ab684857349943dd4cd5651ce7fa2871ef83fdbe1af5621aabf26edd2eafab00fde582348b87ce9a8c70570f292ed18141cbe97fe66039cb436fdb2a217986731a19dae97fa2983f39d5ecd995a5888aa9e6323e9f56b27c9cdb41acb7dcba30686bcef07188552dcd8cb326ce0cc210a0795494963740d110db1edf22479aab9151bab411977a08cffb265122b2f2959dfbbcfc6b90894b37d5df3c2158bc670d623aded05e6b32b9a7d2f34436be9c2ac3f7e09fe0e06d8a620f3e057ea3c53523cbcb2e5bcd5e03193587a3166a96bf8881eba3a6ea9a70e63b7f7f27c578c10cf9f38c0e04bd34d5ca88bfc0ab17c4afe77817610c6493f8c05adef2b5e4098421f289e3a602d7540e710ac3d481e2b095004b9dca4e5c105a6aa55de989a73ff042a87b25b1632a7dcb04ae9b778221173ee0bba8da41a3462972c7d4ebf286c16e5843083b50bf95014ddf547b4b77ea6e57492c7aed483001c7defc9da3ff31c029c9c2233889e0be46d493df772b8b291fd4c9b2a76594ae04f1e4e1141fbe028d8de7eb731ffd5c703cde46cdc275f9cadd05140891d068caaf1288cb5eb28003ededf6a8f827665a56983387c3474ab8d06311a9439fdc796509d74232dbd32d9858f742990b5675e056186da45bb69a3d683dd1f14f73a1c23f7f113286765aeb9d5fc87925b753389c77c7fc4fa7bf9298eb4b316bc8d43527c2a0e44ed41c763f82a32ee30362eddfd42f217fa8c97e59bc5d7a7136714c675489be919702b6c4127b10efc5356e94b01bba8834283f4f238132fc57095652972437fb197e2baf81b8c588773b396f9e163dd5d45c73cdb36ef169b51d018e2d18d6e7e61f537652e4c36993f4eca4e0971204f3e6ba79ee7f4c45ab2cdc8e68d011f48736bc9cf86780ff95f2e6e93a26dd822d5751c8272a9a2cd3a935b7fcd27f8d7784c5a804e984a707a5b6b11d3e06c9eb1ef82d0ff9616bb922abbf2b98862f216a0d1beac3551c638dea70dc551468b7be0c3d1b84489eb629ace8a7babc663f57016d2c8d68bc343be0cd29f48cdb1da51c6cac33a642651eb7e8e38188af0bec31104cb03602e400381a78a4d69d87749730648000d340726b1451b58186219a2aa9bdd4438d1dab6edd3aee982c7f9d0b2cc701feedd2d5351f849f2d680ad14c9e125227b72b7de3a9f32a3804709ee6b63621e6de96b7845f0ed6e2e142321561ccc2491da7f834f533f04cc204fac86144785f41f689f75722d5587e422d13995f9d3e3d1dbad1437fc93cc1a7211eb2747ddea48cdcfc9c9312e48ba532d5a94d5b5d71f7365719292d8e9fc1b2683e489adb72c4111293c2281db5c5e3ca1608854d68beeb24eae285b8b90f1f23492367dc2936d6c7d1228d7a792ea07f743393849def49d93d1e7a51b9c9d7de77b75d67545f8e8ad946ab614269f94428311e796e02f2d2844f73dffe9c6cf85e56f3e37098b8da10a11a98ade27ed6c6937eb2759446af54f7faba13f15f1f4194c3f71a9ce6442bc44357184271a5b3dd3cc6211de5ce339a778686632ea1e5f336189eb687476f12ce431de4a21f9470f10b1d0a30cd84c992bbb25c4c2e9fe4c2be89802c526f2f13d32b5350c2cce11417b5d3b81bdce7a4c044573813f40c025f67843603b08bac8ddd093e3de1c01e627814fc37b087563aa8fe930076bb7d71b52d44c9b79af0e98f90aacf67708881f0487dbf842aff915c8cbd729c858cac0ef5c91308dfa96ccf642715c284eaecaae8ad01ec45395acbbc47c8c9fcc854b188438e08ec0e8e290e539f877fae0904601aad4d587c0d92f7a291a383b902693f44895c22c8d408f980db2ab34a7d996937201be730104eb95e5badacc74b72853c93673630c50bb05f4720e26890d64e92f8fc841e093b8beb954cfa7b868a14ac4abe790ed79dcd4f620e6f5109479aae9653816e5ef5e9dabd15df5e4a0c5803fdc66d9b922b9ad1ba47cccc4d79d7fa86b591d9980a5d9c617cdde81c65b9e45b13a66f7b51b366ce618d12c3c97107589727b83ae551a0f0f678916442c4bdb12aa602f99ca1af0ce022cd02c310457a7ca5b2ce2350a90a1721f2b8100300be7fdefea368effaf4581063810310457adaae31a820e4f50b638c748e59ef4dc187c3aaef42f8eb231de87ed4e60b77c835a3bd7f8a8915734ffaaf6d8d040578d6f6a063b746e007c62d6765086c6ce12228cebaacb79ae0510efbcc25cbc822e1ea677732647a10c521c5b7c6bd855404afedc023fae5c0fb3bf230b0b0f67e4d0178b040dc39ecbf980253cd6961af619b83466cbd9693c2f42b21ba5e20e95cee5c956f188fe9f9e2b5bf791a7241dd8e37a4039a2de72ce9ff15bf2dc7d2a6137b9d19a3ec9728844851462b57b9bd0a637f74fb0c29bd6ff6831baa6be8ccf35e4ded08e082b00f42bfd1265285a462af2f3d6ac1d9e9089a006c4e7d9a16009d1e35a20c2b24e63d619696132408596339c953df76344662043d948d4535ed8084a019bffefbab80dd02e51a137d413835a560c59d23abd704ec171b9890fcd12798da7c7ca8c1c598a2bdc7e267ac96895dfc14ad3b9b719914409902bbd0d76dac6ed232b0bb641af26abd0f4c0df6cb5f903d34e0a7ca27229b95f20aec3bcd373151afa80af4da7e8669f8bee7e17226c7afb2b7633935b3a2830522a156dce5ec7b51f332e05db39b4f3d24ccdf04400cfca52430575b33dfe0aa87b2b10324daafb826c5cf2b1e03dd5b121f57f847daa48abb919cee2fbe5f60ae82e2d670966f40b73609b92a7aa4c10b71d4c48aab27e1f229829503c83fa60b8464dd55aa4a8a38f6388e754a361d7546ee0f950907394c4a90b65c8802192349af7e4070c20300a8d4216b0cf1bee4110c20037ec2ff3e975fe8966857089a453b3fcda45639b2a05508983d7823ec62a7ac3276cbb25d7238924e03af12b5098098599f879cd38f43aa695629ead2ae491ace8bb1e11d6dc359efc46ab617f9282e70dcc6bad7b8189d7ad197824b7678e22417f609e30c8885f8352a6147a69a58afe6a40223dd5c48395a4178cb3dbf98cfc618ab62b0e0ccf3c05eb2a8a44fad634790016c417731113aa83cb67685b54df08a34011d74956f108818df54b0a3476a2b3705a701febf0d3c5cb1b343ae1b31db323284ac65d6802702303a85c0a8d8d621845084f78f3c9e472176a219b3f47c349b9900b4a6a9cc1d6fe8079c142e115f5cd068b20e631e8aaa23095ea4d2fd9990bd0a087bf7e7b8c2cfee7c25b46d2f13c935b4b8fb6da5a05ae2036a37c00fb68330e7a2f4fa62fd7473074a066a3f3d8d64861b8fec16a890e49e70ad73d5716e1dc8d82b74ba64586db3edbe68fe4ebf8d9ca27b1a5c1737598654ae89a955e0192277f6070d9bee1718ad2719eaabb2097efa5788e490e0d96192b561e9e88bbb8aff0ef20b08c8079bf4eadd92e91770836f9fb85e9a1feca6975cad158dc39d78f9b0f6013f68c7b4417424758b425b608ede191897370bdbeefebbcaca2a0762e48663aea432d0083f5d9f1116e5129ce47d2bb11cd8af5816362e682211b1ef4c19cb51dbc8a8fe3b01add3f0523e7eed0780a6af774fc1897d658c3a2cf5649cd5ad994a9ccb0cc0fac15cbc2c47ad25078867a39575aed53f018556de7a6953348af38521aeba6dc38a19eed5c6ae08f7d372adb5b956661583022ca899640bc0d3eeffe9dc9dadd65879fce123d82542d266324a737ed88b5a71101deafb230518fa2f67dd1cedbdcd1b5ac0f7d1f68305a0b5e64c8e98faf8609590d785457bea83a83e18ceb9d4487cad17bb11e942fdb0bcfb9cec23fefd4f41b3e7a8cf8fa939debf18099ed46afc5837d62e99ed2b24cbfcfd3df601d99b9909b3bc3ddad58b576d73741918a538d0b3d17e74ec0e6b578cd5eaabae1de40fd494562cc80fd686eb8394952b77a0cb1e458806ea27f2d41dcf88a14e1aa71ad7320cf8e1a8ca019bf0c1bf8752d29bc9aae1cc41f869e612427e737c80534e73f5274eb250c44c1113a1d4b6e73cc76869f231ae002ef21cc762aec3cf771f2d565b8aa46863cacd94bb9134754dd25d1b5fd368cfb08c9fd6ab9f9e58910175ee10295270170223dc55617abd84512a27813e0cc79d1a1de8dfd266dc2f99e024cbc727085c86d65325b204008ea85226fcbe2488532f098665e3d79ab14cfe8304d0ac91b2cd47a1932f6aeebb5c579228e03a7261300527d4504b44a4af139141d25d8c9849ea40342619e898e1cce19c50a92655c17355b1845c3a9814e1c81948b4899b8140a77f329b8eb5ed049ddd6c0b048f57e698740c651d0a22cbafe1a03bf93b07ed5fdad15a3180b2a14f52bedaadac67d1589265004c596d43b131756e5be54242c1dd8ee08187f7254e92a592720b75b61ea31aa8492438ec648f34c64228d4d3860dc7c8ef4a0f034423dcbd024b1627631c89e7a3f93a2832616ade1c74142214d2287deb358ecda87cb0c4ded9ad87ce655f28ed26d579b34e84107b6594c0e6d10d79f5d8ead6e403ce545835c069a923f6f6755b8f636fad2d07bf6beb127460f337afb2a7c19f5f71b60efdd34f9bceeddaecf5ec77b013a21e88f56b996628865179413a1022f6679473807aac1ecca040a49461293d089fdf48a0bae8049e1331d3033645375f0c6a266c0af19aa3bab24ca581fa6f0282c47eec4d61081846635d7710c3150fdc91882f28c297fa99ca35a7c35dbe77d768ac3697b6b94d7c60692b5e3c647f54b5292848a1af27c9d30019a9e5a3ff2a36511e1e3bc0a441a3968e72f3ae24114f8a15eef148c1c7773c89aa04c7fee7a7fe116562969312c7562f039b5a947ecb1b468033ed3f1f213b66484d930d9c4813aef1eda3b08c26387b6495e25709b25d58a10c15164d5b9d4e19228d91a4912255482f80730a5aadf22a75ddd24e8fd0bac5cc58edbea0c29f71162021bd1dba92dc9ab56119df3721c9adb59cc9de15fb6307111bff7b5bd8f4bae34432484ce623c1aaf1371e6498d6b0022ce8078d790d4ed6279c55b98928635f5fa09b49cdc236e9a9eeb2a6b5b63f3bf945a6b7e229062096f1ca7c3e60b1ed0a84a131c81c6ce9f1ad168e070c8ddb884f2615955acf88e0bc341457522924ab5ad4a553a6c6347efec47b1b2e2e596081203720f6fd67ab484d0262512b9ed8afb014ff05e5519850470e50bfb34e08780f9d039232555d125fc6ee025ba408dfbdf1389e5cb9e45e18a846259f11e6905ea7bbc0e0ca5cc6f6f268da1becb27778da8ef47ed5c954a3e979e4545d915697f7c7e78b4f40c2ace5614cfec17c035b31608cce4ddde083424a9075897f5745fda69ab44c9f91ec4045df76dabc1fff866bebed8a989e413366ae751e370ee329d64eee5adfb12f73a4f61680f909b049ff763f046fca384d2c92d5842ee9ea2ce5688bf277ad00fffd45406cc97d180c99d05553ea1102e02ae20973ed74d557329c2f9bfde1eb55cd31a6f693d6b14ed97ea2f19dff2bacd0109335e94c3f397c4e4bcfd8fc5915735f9ca6ee92f6712cd5aa55d1d10cf3caa30572a8bc8253f0f362f6af68d4afbe03a3f6405e72240279fdf94c533165592dd292b25249375f2ff7b8d793d884dbd24f8d2f859ec7f8d0006453e2336229f58d1e8ca9ee4405589c7ee819ff557b4011a402a4e6ed8e7c442f9f0a8d8abbae878eae300c0a9201a3c1677793720ae17d036038d50521d34ba37438aa4f7ccd746b7d610d1b63bfb028cc194f6b091b0403debe039f6179897879f90410ebb6b62d90d97bc718e7440d8c9b8db10471292dc4a0dd1cbbe3800716c8458f871edf5d8ee5c2ce202cc1e83f5ac8d47b685ef9c88ddc1d9f85b1e7e122c90bdd4a4263ae329c7107d4dc514af3ab55dc8537f040d18b128ae4a1935f9509266ceda1e8953c43503e83d5d135e28fb5b63c2699c418648c1c94e181f89ba06fb46d5044ca6f61fc32ce50d09693f0648711cd6ec8dee2fab2fad43c22b31928223df010c43872d592f8dfe7d3a477f2cd9a7ed7d571a0eeecaafc3a8457ce1054f3e3d50943f06ccdb7d58f738080d0f83acd7d608d08c93809ec0594164998bb13adfa000e6532417fc42ffcb4a59fa5772bb7f09d951a03bc0615c85b1631d311d1084ef43bb69ca53e41e5bd40bf43d43c201c1fd0620e25fcf387b2be6c2b72df785c91fe7a4decb67db506fca061d6513e3970353185dc132788999cb822bb4bd2af7427edd3aaaf3bf13e33e37df21d8adf5b5df92942eb1a119c5b96575f889fcdf74291ac638af510af8108f6bbf36e842d953956ff0743d927559747e428482ea7d90656abfc4199e75e816a987571be538562ad64ea4d35c7253b62cd9d54480245ac50e855a9f37246dd582c163ce489a9158b18f69ecdf844e346807a6ca0a3230439ad3976c3ecb48d3dcb48189d2c7ab27e8fcea0f8272f2f41b121c9dee70b9e5f6f1a60719332118a1a9dad5eb864d9f63dd50c4b006e8002b43614496a39eb50b27adf832249ead +MD = d08adbe83bb3bd2cd513f21cb64dd42c1d2584ea974d416ea1e353e3 + +Len = 61472 +Msg = 2cc7c3d7315775d7309a2d6f6d1371d9c875350dec0aad3fca5560a946f77e8a2fcf736f7565bcb19689f93f5a37449dc0bec22d382177ae12be5f02372dba34176ba7b9e238f4f6fbbd3503aa7213af113fe7c461e2888c4d906093bfdfc6afcae3883ee197c6af467f0744c48c8615a140cd59cf1285e162148de547d34903327f3d85d84cdae35f179788124d44d95a099b74e97c19b539920c7f35d2ec393687ee16301dd79a2ecd0e5afb7df60322e17a9d19e7ea11ba5205e9f2a45758bd42c57a52d366dc9ae9943fe7e34399e312925dc71aa0fccd9ba1ace7113168b1f9e738a4362eb28db250c13e48d4a584e20a3b59dee47f5ab7074f7be12272f9f47fd8900dd823ef716b676974502eed9a0bc038fb5ea149ec615a15dbd47c7d7bb3e37d220b38a66f0db9ce2f603d0681bc72cc39b56a8283d4561fc9ec9125d6abe0d33b70f89bf15c40d641acd9b7e146dc7d6091e2edc38aca007115b6d94c9057f921ae6bb6428383e971db0ae800d083b4379c1273f6ab3e209bf5f581268ad0599c6e99e0a9a80b708896d8812883f1d7877b01fa625e3ae711345505adc0d45a73588bff6df45ed14f844c6a9f87ad5018d9b76b51cc47bd9a7bdf4d265bea64701348fcd78e06768b4e6d8bad033f85b25c3daf091dec0afd729941dc829bdf5948d8c02f9e8bc5079b44cc9c1f30e01dac9aacd378b23603c08dca165e6e33f79e4432bd4e73288a14d716b20506c72072d64cf60520a9740dc3ce1b17ebc912be9339c8c44806db61304f39da4ca48556fa76bceebecb1803413634d49a07724fcdbf9a2891c7c329576177c987de12ff0d126b581405b64811eba9bd0456defafbab79a3d7d20a145232b5f741dd901617074c6dabbd18843bd4c2fcb01f1f6723e5ae5da19178cc2bac3a8f0109c642213fa7550a5c0460c5d8c7b626c8fd3d5054807d776bd4f6eab650b750ca7e2c31a1c438b94b4383b9e1ff16efbb402587e2392be1c8e83d95373d97b5887e7c5215ea3d41f19d971ed6b341925eb0c6d276209168107a4636194a59b8ab8fd98983628c29b5d941fd9e2b62971b15c938f87cd493ac53bcd443bf22e19b79ebe0d3754ef901c12b5d23af9f875936d5c251961feb023b45789de41db9c0045b5eed68ab3a3c1bfd464c8720e97fdc937667b698f77bfa89290f006fc783f8d10bba86ca73cdb05ec101fa0e45f7cfaa5e2323673f7f5732ef815d43934a1cf4f02016d42c1e48f7d42a51912428d7c3826d27b54b771be5d2db41bfa67e396d14085ff0ed96ab708ab0d5d00c7abc86e82e08aaa4c90e4cdb05f50b878817e3805baa473f9da070e879cbf48855459a9a4c0f6dd1dff80f11e7c150bece7eff3aff3f01a99bf09ff86e7e241d213ca8a0b184275a20a1d67d6aecb6d4ba36694cde6645b4f863a7c1773589554667570043afffc8f3d1482574c06450b306c8bddf673be61dc12d4b7d374bb72c8e50c4ecd71ea1c24f0d13ee8383ba20b8c596e9890cca70d2dc9f66cd91cb3c7b3bf49346ab70f4e4ce4fc17e3a9b6b1207dee616e0e55a5e59c41c3f831adcf5bf962042cfbaf15833dfd3f9b27afbdd379dbd54dec1442c4fc285d54b2b75c384b47a14b2092073e3cd0e3c12df38e0fcdc568c2fe5940564a28bd70e8670ae33558b047be4ebfc8721598e83528ae5ffa29905fad9b4b1406b158cf7b4337e74823a5953d4b9bdc6e19b392d5c59b2e7f76e0968260af88c250a3d2b3c28fbee426f5d6160f37c4917be8337840d115de3bddea15300a2f0d85432d5a6b6ec4a9d1256ce10ff02b7caa9b5ca530ec7096f6ecdcce8fc76138ddab31b7b441b2f9b0c8dc16c4617b90344160d50c59f92a2691e126d683d9e4c840825423c4e4645434a63fd3082f7c977f029039860a18596199a6babbf381b3a781c83054e37a2a0d5db4a260d18242a8945f4f0d1dd1edd068d6a2dc48a04e44c28c707e3a9ba0b7552db8e7ec51c452b8aac36bcef77272c12f056143c0e6acd7094aad444966d73f039d19ea5bab01c20b2d0e77e985ad452878e76f541b4401d7556ebb13dac17dceb5835610554a42e8e281a3387604674b63db45da6abf056ef73ee98b7b2a93f798a0ba006170ddcc9a41fb64e1fcaa106cb941d443524448c69a6a00d6571406ccee70bc3e29d54eaaebdaef581a801fda0dfdd243b230fd3a0db7246afb7084b8e9349469e9ebb79adbbc3826d27bb25245c444ca636de4c8155b66a77c2be9e31d5039731563cfe09e29effca90f806c0d5fbc65ca5d98072db1382a5db8bee1f76e1bc850efc0229fae773822bdf26da10aa9a47b82af6dc373195204a97c1bf3e8abf800d260d77cb45e77c40990fdcd7f8ce4eb7f636282fb9abd25709a27bf4a7a70c9de0a55a1c6162a0174d492cf08d6c58e968c9bc8c53cca24a0a16ba62df7d100452543ab6e3ecd6f8245a3423127b4f97a5360215a601786ac1a7e54edb48738ba6a18062728d062a46cc5a3a2f041a09d80560945b513c0057dc628143101f7a011492e6b64e18f6da2708fb8b0ea18727bf40cf19c5d654f33d9ac3bedefb198d36d90a5936f4a408f1a530cfa1cc59baeb099089642faebe53f5dbf4b9efaf728ebd98004e837cfab4999fa2c583c6ba11239d53362d56e0a5dc938ea9e386d8a5a756559dabc5d5f74b11ad83ae174fbaf6be1e43b99380bcb5b134b6bfe4e601fd0e002b55c9c443254d98e23595a06deabd9294bcafc61ee9fe8de96b12c42c2886a9006aceed1f8e1d0aeb0085d6b2676158301cf0db55e1424249d0589bae9187f725d01d7813ee47aba5f7321811d571181fc39fe7e90445faded4fd930d9fd892a171fe8ea7ae94241803e38f139cb6796a97031160b9ce5eb1604bd3d3b943237c33b8576434cc1d4c0adf633f24f82418826682446aa716c95d888487498e52be0095fad1e9b73d4af56fbb1dd5fec1316b0e621c7e96c92fb1fdcdb2b682c670bfdb9f77351c2d19addbbf361892f7be3944d8715d641fe946f2d7db68e7289a58d370dc81c595c1196b9911537a6ec5d6500cca6fd9c20102afc98ac7851f42b2c5928a33781b4b20676e37f07fcf51297a27af1bbc577ecf7bcc483b235472b7f93009b5fe6abeac16692e5569c2671a0a51a8ccd7896994a0089b2c8b6e314eb670df6d1f2822a4c1af80ec00ee119147b13ee7f0fdc93964a40e028316885f467a96c5a2fe7fefb06bb41b0cfc56767b70f8d5d05ea6a510c92625d4f47dd3ef77b6235193de772bc3534c54933fb1ecb55ffe3f5209c2eb9e6dfd46af1b90fa8fc5f1f29046237adfe4e6a15cd22be2a9f9ca0481f9773f4c6af3a0f0677fafe94d964e9cc0dbe4e8ef51bbff19caa77451a2e9957eac52faa56dac5e6b8855aed57a2d605387b206fdf46a231c77823dececb433a0496ed1a7d430a22e943505e605578307102d6095397670e21bba2c54112e056837d9f9f791f563b8899817079f93aee45c9a1f3f87a690739c986b107a1fb3dd5cdb991d0ac34a1251c40cc0b0aa89f354446a8347c328d7e4641fa88e4fe507a1bed9a2a961ff43d2020b99a065bb3be0726aeadf95e316d96673a4b48542efeec8e20dd5992953f6993c1bd78aedc4e96b47fbb8e4663965e58d8d568b729c2c43dce6f531704ba3d3c8cdbee1c6975578283f3a785c486f2b95ebdb271e164175efb673f27e32c3f6d737bb34efbb0ee1353ccd196b49de7eb444ab22ee6617a74103b6a4f8103d4b90e237490f38faee987cda8e3b469c2711222e4389939520fd58260f89edf91a1c559be9cf1703e77687c7a07546906dd60ccc5498a5a22a493a2bfad7d2dfaba3184ddcd75f1013fae3fe17c152a29a288bed1bc2a5280b4d332d2f8ac6d7454cb4b7eace1808bb491ae5bbc671baf53126f962b09a0e0c33ca94744bd2c9313fb03fdb5d4bd5278eb4e6532dabc0c5196558ef098c3c752088c892c2fd9db8a5944f762bff5e9fef3768a99d089c5308d0728a7684998e3ef33151964f3b20a6e94e84e13c8b6b942dd383bf9137e725f0affd9f880f9eb59538786fd08bb16936a4cd260a44d2a61d8eaa3b4d77c8984c780f2ba385efadf643d1f78976b51703b819a372711d4d9003e6b84545408a6c3387c3dae4c74d9cbc22d381e272d7d9f430ff7bfa95b00d99fede7f8a9523d94a2e0e37126fbd110934aec0b931d23ebfdae32ec77ff81cb8bc57052c108a1a23ccb5c1f82f26dd94cf2e4fe13a2fbd81def791c1264c45c8e6c8df15f9e8b728295f807e4eb086c3bafb3544d517dba305e2afced1d5113145dc132b986439bf0cb57d8d16829600bfbe7ac84ab2228b174d8dd7c7bb075ca139ab58342727523e5ebf0bcdc595b2a41f2757e02719a2dcdf35c55125b0afc287ae821758094888034ee2bca0094032c543d8e19f48501b41ae7eb73b92936f6f259387206809b04c33f82b3c7c143159d632934138fe9e1a00ec4127377172981772cda7cafd7ee0753762c075956982e94f3f3670122b1334f6370e27af91ac8c073114ba8cbc681c85a8557d2ba2e982162ca578f68bd45083e01be8b795508d3afa8fbd1e308b31cc47231b3ea336ac6fa4b7d91086045f7d857304ef452e20f372425d1ba3f2bbf38551d73635106c42ed941acae34b66cb6e4103c16bee501adf5321ebde45c2e2ab08397c201fcc775063c38b6c536f55e3ab6b94cd3822978aea91f6a62b4f81006fca762c0cd3f7154d5dbae7c181032cd9c6cf35b2a052bb3036a4c64c68b8ceaf118d207f89a884796fc11d40a5bd90f49bdc6907d134ba4c975e0451186f5bef9629c61ff773e50f8107d676e26b5824732231ddbd23ce673d8a2ae2648ef158e2b3e49524407f391bf4d90b40f5cd90d50957dd6d0840a9ae92fea656fdd6127c91438819f89b1dc6f0f0a8c743346149f9a1aee8cc583974dc4946f5a45244ec2daba1dc8181e30963e1f5803dd8be575ad9f836555e4017d2d269496baf16bbeee48877c579b46db5759972cc00d08894c565608d9ae51dda63b85b3b33b1703bb5e4f1abcbb8794e743da5d6f3bf630f2e9b6d5b5451105ec2db32fa283d937ee75e531abe16b597a6882244fab27134db4265a6d3ab77c5b879d692d4e1ad1e429da4fc9bf7a9f6d323f0ff5dd1386996035158601cdb770d3a50e980c645838e4aec38aa82ded4c2b517ee644542172586385843ccc3dc89c8a7e97314e315930c34b633e0db9a3ce7a0f8573617a75172228ec4e2b75cf4c8e379f7f20f3c198c835e7e3828ae096192077dcb3d7fe26f17e22b873f5f15e50d8052885260e771e118d3b34e7af1caf5021f2d3e09a027203cbfe2e44db5c52ce8cdff33e9c66456cc7979d464bccad2d08584a2ac533f4484c91c2d8e9c104898b07f3b3f7e0deb62b9b142d6310b305bf7f7efcfc2628ca2915ca38a926f6a78432ff0cad713a7c2db8321371932178abdaeafdcb636fe7e5fcbcca95f899870ce38dcf2991f93d42718f7ef3cea8f451ed2693af763a5017b913354ca08dc6898c287208bd8b581e4984f6662d9a174638ba6514d9286112cd55df19d913e48eaf478ba76e717af5c2bae0353a75400d500ed89806bab97bcbfd4ea9ecfc5f80cf6372a22f3c147d5f79e30d6fdb1cfb95ac64a57951b7c71781fa59667796046f14cd657a5b9329827a655b583beca5ac0b9fc9bb9dea69428c68c4c046269e00d4028dda50956ede14fd8b6e085d9ff5b4f07147efdff6cf651058a4c89f9217199867b9ab99d1b4d1f22a2bc0ee5ef530fd38a8d7f6e430b497a16e7f5f95246e25afb2ccfee6c95a09b40c15fd473cf82c8c58d6cda5f8f3652b97eae52bbb3a00b2304553026de5aab5a958290d3f72e4f8c27cc2d09a99ef53bb9bdeaa4e15d01bcca524d9253d4bbb6e07fff57f49dcea903a84e89810bcb643f29ab55f7a0a48d26cf2cf81996311e4b5c0b47ee57afe2c807252740043cfcb9fa7c151ef25c60bed3b5a05b2877577d239bea0ce258001ef29a2b0e12b0cace39442e7eda91fb3d66d0d13f13f32c1fdc968977c833cbaf7095dc12bb8f9727edede63ee0ab27499065d5edde0f64d98de66c5791a60a2089fe84758a412b6b1e5e86878c12ac8a5a5cf28e1132c6524072dbd3c31b871c45bd695e042e4e43d47f5580672e52aacb9d714a34c31c33fc221e13e8f90849adbad3f6b3bec85718389d52f868e14eec119a48d02c2c23cade7c4087a8564fc8de0c651e5a604ef171a424c7262020c39eb4b16cd4bfcbb18e3f82299039d79f0f5bd2cd68e0d16812b41f5dd1d8c85b2d09ac91239cd3b91aad00551978893836076549520e878403136a41d2d1eeb9a7df62c6818de2ea6a0fe393abdd0c9d3c5948197eb2194d2c092ffb8fd339e7f27ffb935658a04d67ac526bae2e09d60799a0c556962ecb76e0931472a651ecf8319e800ac6b7e9f7ce76668a3427e9810f98d640816f07c7dec013e211dfd09f3c7316059fccc603bb770ba7b70fe0910255d3a63a8308094dde8047de8b9bd1eaa3dcb0ab8aed74bc7ce36d7f68c21ebc0244ef8a14d6227314e408d3fc567581565b71b196653019ad754553db981283c5b18339c77afc998bc68fb9db09734ab319b17b9b36211a334995fc106954a0c6a3ca0f46fb7d066bae4357cfbab38de3a0d9cf3f692e0736e7c643ae3dcc5b2ea22cd439618f04db248c7781731c920e784f762a053e27ddd841ee5e1d62fb2534114f47b519d903b1d2df983b98a05a277d3805123bc351a36dc5c70ffecad2e3e14919fe02ce0cdc7d58bd1b0f00f237c9dc78990c23bad0b192921e880e5e36048a5744342b1e2ef5aa981967fbfc309d2c2aa0998f3fe7771b664fe810f1b5e2daa88f9638602ea39dd04089d7a19860eec432ca4f08712629ecac0618b1e9e301b4e8103dfb64edf90e955ddc08f97aebed5487aa3ef62584cb3cca6dc95970c624568a8117583c85f922cb545ada53eb4e10b8ea09fcdef4ac071d595f8eeff2a0e2ec4dda93f90a3aeebc85bec453b68f6d4555900db8413716e5229c0eca4dcf931ee96f9c8a50780116b85d3ee21357741634fcb01b3213700c11a763679f5a71099dfcfb591f5c64c3365ed068cb4e2b13ce746e6f91e91d786ea91430b0e88493b1aa39cc3f8e1ea944ea024da61d9c256d21cd1d2460261381c9aa8b4822d5a56ca0dd4d77b537b22d295df96c6ccf32572b578bb42192c39130ace22eb06b2817076f439179b8c5374268d4e5e2ca23d5b9942208d36972e805a29c2b394e02fa0677165384a8c9ac5eab47d92897e12ff30b4aea1fb407cc7115210765871d5dc67e2d867b0fa8d2a4afb80fe63e53ad02446c20ad7a6a869c8cd98ade1d5f886e0bf2f209f549f23dfb9050c3c560970ec7ee7324c3835ead8f2c7b4918b2c227a7cc5ed4639453501838646736f2343e1d3aab2d973a9bcca682a45181fd5519d923938460713f068c16137b98f0cdbbcdb6906fff7787235a43cb9c5f28876b29605ac2f5c8fc87e19425a7f441aaad5fcce993022268d732d7b9d2ba1aa1461fe979362981d3fa9e19619251cf133b5be38040a9238713b7a6369c9abdead14427b88704840c874c0c90e5b781508d4a621b1ffb622cfd6f190aa208f8ac351f82e15d8eb9ef5872d77a472f3fa8ccb4b383d700c79fbde496fc8b0bb32d993963ba62d009c49298e1e761bff165201f3d8011c03b277c9e86d5ffacd6b72618300d3cd15ad26047929fdb727fcdb01568da7544a40d6224525da8f24a90034653a093999662e80552695c4dd229a51d9c58aa93ec9a96fd605c2be5f5005a4b323b1031a3bc525d890f8c5ad0c026c041c359b5f91341b41a9a338dc05150ad37a85aa06b28c7d49f5714a062dc5c84bfe329b3b5c38acee7de66f393c90ff6c8ae1aeed4ee6ff4fc0a9c2771c36ff47f80c39406f19ad52ef26c1e57b2bfad4f14f824c855714409f0cbf8e3be8695e762ce60d6e49851599cee16f252875b33a39b492ea6f54c2cd04a1aa215c9f16050f31f0ce5adc8cfa594e44ef29087dc23ac65ed2a2595ce73c0959410618f5314dada903c01c4f8d5058f52d902b9b25cd281ef2627a658a2d672a3f776f726742a994a31bbcc3cf3ea1fe551047a1d15b6a31be52307302334b8b6112fb243398c62220c046903c9ea9df1a0be50851800d659ae4241c0be816fb4a7b547102ba73f00140321b51dae105d0f59c6522b571f91c8abdb6f3d669f8701303ef7112437cc92e17fbab8dd8011e6fd61ec176388ab7c885da4668a511667c7205eb4aa526ecec5087a6220f5f46dd1abbba3cd189012fe50c903968d4921a273afdde299ce10d8465ee21f78f0ecfe2b28993dd726d2373b45da31590876eac251527313d4a041c0cc028110ecaaab6999bf5ace56035ba680b404bf3bb0c792acdc07c969c529fe2d88efc6d1f001ee77dfcd0409ef9119e258b6c6ca15606d284243c173c9b889ea3d10a1850628412bbf3d8125dc021dd390f0769deededa2d4ed105dbf215e869e98da9f13447ea1b28534e9313d639bb225ad89d82686223c6599d8a8969a314540de6fdc28772b1e1b7723cdc34f602d79bf3b01b278b7273828f67d5db435245396192f70f6054b410f5077e44db10775cd0bfff43e0821df5e55920944f8a86b921961c083c6b6707e0db4330704dca4475b377e3e6bc8b5aa74ab0bc4f26dd342ef379998f60c3433aa2711d3d2297fcec72cb2f27868758db21cf7acb8d1352918f56ebdf9a906d0b435135cbf5a82b3de643502a49d7978bc6c3f64c27f0bc5154fb25b781962c5ca62ba0a12fc37a6ef5276e776e44c0be20d459595c3b1a7628af709c7d9c2934b347864739b1918989beb0975b967b7d194ccb7b94be1309f5bcf418f66c0b9b52ec0e46793a179589513f117a956fcf98717339373f5010a268d8b254cc7b996b6460255925b59bdd28436d320945bc868d7a1bad87799617fc45f3ff852137e6f5a56c403c12a26d8be334eab9a44cc9e607a95e5e35a03cbf6261605fa47cabe805a49645d7b221c247ed0c6e35884ac4436cb38b2c38f9fb5886dd21ad71a285a754c209abd3e1149820fff0a077f17156eb12d8076536f64eeadf95e31cb413b4042e50370e95cbfe552b078c21a73467aee40b6e30dbfa6d13cf81ef87c7dc533c41e2226a252da015f87ba18f52549e3e92ed089fd04ddc8b13ae78bac426ad85638615f07983a7e7ce1388c8db1a242282467ebdfd37c4da15e427bb943aea66fc06b8a779143a541598e9d42bce21e21ede778f4a024d863beaa4941d6031687428b2970e2a82e335d36bbc29b8bc07cd7c9c1fa0f49e19ef8a964d49dfaa1134b5acc81e0ba71c9689b787bc1f1e18f6ea9574e557e01b988aa5ecff017eeca2744d439200d087a085753dce4d6f9d03ee099603713a129db37a7b270cd57e272f3e0f535125adbc8e4ce74688d61f5b51a18ee08bd58868cdbd01a849d6512cac26344846cf15506be48c0b197b2566da046366ecd90460a016876c00aaec17b4aebb5827f647c6e5e634074887378c53da1d7bde6d0fedf32b145a7978d7510f7eab6d3bc1cc84c4fae7215c22dd3582cdc509a7b9307790a7b05afb699b43853d0c6ecb592bf4d0c7ae419f73a0c9318361f790e6ef663d306354cfa5bf54de93e6421fe6ec7cd0f6904f57a307b026a4fc2de11cd423c36e36303e53cbebe12a42d37f8f98868e2e9634cdd99b522ad99b93e2826814ea0b30d68e9c477258a72708337cb679d018c7d6493ee21804ca4811db4132a279ac5a2f07a7bc5009b59ec982d6cebd5f5c2b1e12fa66687e1e0a8f1380ba353afbba21f39db2edbcfaaefeb6c568ba03a1caf47234afab5e7deaf5d3688936f3a05b9598a5afb13b1e5f8f15700dd8838fad41af15434a6d91ee2b6321260b6d43427440e83d044dcab965e800447fa9cfdbeb12c4acab73ff20190bd2191e708b79a4318de34eb9a6c566769c96173b095cdce3697238387288a813a4ebd6c420070fb3bd2af748598a7b096d8a0802e439fa6a2e1b5883902dbec2be239a30abf49b10a09867c28c108de79ba8bac609792fef3931721d011744614849d47dd448328e5db706efe66082594d78954f202462b9b23cf0cf6e4e23386ce6eb73420cbb771d0f3d96108144a7ab830264d0437b11c2c2395f7fdb418f508147da9e481e1107267281b17bb919de5067cfc1dc613f914db595dbc588ae1ca2507a8f0243a544860e767257cbf70e672d569cfafe8b4664cc3b2b14dfdcf9d16e1bbe44127afbb77a3efb1c61886251bdc209a2393c0990e61716d02d630f970984d21573da553f1da1f3d2621503957ddaafdefa9c04576bf345025c89857b897e747e4e0b7aa85e660282b8e619bbd76837b529f15c44c3955fb25397830656d14c858b56917aa757d1334a43cb4c32324830af843cdc56c50de6fad433bed84501351203c23b5f3a08ed007441cff6028b55729dcaa98d4df7a8398abb2d77a13c93cb5a3775edd84fb8c2c0a4cc8a9ea82e5b842e32cef4c4fff8ff43db9cafa4a99ea315afbbf94c9d78711ccb58ce46c3528091ff82811df41f7df44fad35e27e742587723064aaa30acdd055c75c0d1a40da1b9912bda98d964af51114fc9d1a3329b345b4e30fd3601de9f13f0ea73d0bdbf387e47011d445ae6fa937cc7e86c5f7c1b0af3c243363a88e2828aeb9349dc842516261fcd115f38aa0806d2dc910d7da3b893890cef9b8e881 +MD = bc4344093a6723bd7402718d173e75f23a8768d31482304b6c8a54a9 + +Len = 62632 +Msg = 78417c753eb60561273324838416cfcb1472db8877b4112ee586855720f32309a7cc8b372d4b1f8a49f759616fc763161f8ae1835c8611c46060173f8e3c92e2a82473ac42ae0f6f77d973d4da39f79faf5416345c4b7c5a1abd6140f0e816bee211dddc6626fe9817a317e4adb2b4ef2d961fa55d497a797b640a622e40d623bd5b71d07ffd148e931bef9ad07bc18dff19a7de48ca31a8eb1fbbad318cfb9ca1c9d68f767978d8510aa3fd2cdc47018fa554e50614cc6fd2b41c2adf14acaef625b52134e353febb37db15a71c6ed44402cec47e6f715698ecd4e0211f12e32435b58fa083cc89376c3eeb2a855d8d85f7be83972549e6a58f8cd8e0f654c293c27fe0a1a00c002f6f74869e5d3db4bc4dcc283b7d7ba66265eb1802e29cd3ac93ba1c21833aeb0a0926efe9ed35d150cc9fbd51be2f1f35359aaa70290f9fd5720f4c07757fd33002fc2cf57d6e6da93ce049c0318fd787c940951313d7ad772526773bbc033e09229d47a855100f2f6536d5721ec058c1e786e2d2ea1c85fb75a6a5a4a0edb7fd31b247ecbc42404a0f4a684ecded2a4958149894f405b0c72a38de2c6b65c374f6e235a8fc2c876201c40a3c853cd389e491bf437bbbb5450c832bba6395ecd63ad618c45bf76cdf044bc3248fd5dde752a660c6c5661cdce2309337d2a3b98bc535f82722cb7729e0879cee33e1d0cd6cfa82051a2c6ef376e61f89feb7b2fb5fa8debb98cf31a85d219c83b98832a2f8362de8c43832f48e4ed69930fa608ed0d7d067072c21c442c1ccc969f18dcebf0169570ab0f046f30fc04faf934aaddf69d913b509d0e6590e32a98b4568b989043f3a33bd31516dd2e593c5abf9be5607fea7eb8fc47468b1d80b66ab4ccb1ee6b67988867b7dc43f4e4eb86af32bfb58490cf1e687d83851c6d8434cc06c4550d7fc51345932bffd0266d1f7c25a9705c1280f35a178919703f66a504c04c8eaa9abd6ee50d827b509c5587bedb5f1b56ee48da498be3b2b974f23de78fb6d5b346f5eddead7c40e6c51951dfda2d3115929b25df611fdb48acab61ecdb9fd4c802e3228ae975eb132f4cf06798b03c089ddc88542d8a0dbe44e6a39d2a63f6496d29bf92481bd456395505de9d74a6b06e91547057ded47aec58957102afd4c7d41df75d5fba873081c5e4bd6ee70bad936e2c9c667a9a0f016599f0daefdab3d6546c6486ee9e3277042f8c7383d5409ab76330dfe9f90b029233a5398082adf241a140543463ccb7b448b441d79e29e2f1bae63aa96bdf8e62e506a52e6716968a18695e08827f924ab2dd505eb0ba1ac17624ed355cfcf35c408d8425f27e61825457faf774bbb53c10503585c781909b37658e1a56f3efe2b8a27d23bf45b1cec784b16da5118f0cc3c557e94d10e2e3712093c4e454b29acffde694182d25c3e48827f7ae019e415f954df5bbd8903eb60e84c18f8019e8f8f866e3a7652bf65ddab5120a1c415e46586e379e4906f16857d7acb3165451c61a64bef7be42fa85e4ef4923b236c81a875f3b5ef2e5d02ac502c2e9781069b9ec66725378f944ef4f4d099573ed133e9a975d88668b2f5fbeacb0ad35cca536d6f2aa7525bd4a0c6244dfc9d1b2d4350a9d3aa504857389ad2c0278cfe778df727fc3c7550d8e6fd66d385b4c466f906fd73f3f6d53413b290724d6b70f791637945ab48778868c042cafa4541669d332dbf7b1f1731cd6bad484417b930a7daea6dbd72d7cc6d38419a24f7981377fec11d0a741737b0ecb0acd339e10c178404dc3a9c788d3f8ceaabcb73d357cf9042f7679ddc2c025e2105c479f17228884efbea6d63b124e5c565b761fa19ec1138b45b416efa0ce889badd7ef049230f5030948e9f22656b5b31af67134117a829bcae08d68716b36e35e7f1e67b504093e402a634c6494533757c3028b6987d9f77289c1bbd68e75bdda979dbeff7449e80fa5e2b871a9cd69ae6624062b7b9214d90a2458249abd51aedbfd88d6042f96a455e8b4c1e97ca09b5a6642cbc8438a6b0c55dc003276654796be43dd3632d0cab4d5cfc9f5f9929b1a39bfcee056aea4eab6a5edc8495f3162408e797cfc1cdf3d3a781e31bca61a202edba9665428133fc74441deaea5f8c924b73f5ad3d14e79973c233f4e61b4f6a624efccb45d32761845a0d80ee01a35eb5c935252a4b4d47c8a7d61274be818403a16860fd48f281a088f66f283f23304ed29f610fd9ee85ae18169cfcb200f8d799224cf1495b06d3b61ede2182d3af1f747a86742692f92efd39bb075e946de61f71b6a93c2b9522cccef65f337c842f9810bfe19a004e4f3e88961c2c058b391c9fc6ae8b2ad997b24edf6cb8e6578627a732df9d022a1ac44b56c3831afbd776f2a6879c20773950e6c0d07bd9cf2d078807f5975e369575ca2284cb9c65c817b37bbcd9d51a108edec111e21d942b22fb67acf0dd19ca3a4c23e86d547015e52970d6a9116825557d0cb957794f885e477a8b10477bc1fc1b8076cf07c5c5ca9eaa5c739b097f8b0dc65041b7a84da5b6671a5f640681a17d62b75a800ce0ad5854d6a13ca6261ad41a5c089d4681de8e57e146fc601212bbf1317686ec6f75a094cc9abce723e81b2e6713f4d22cf11871692bd6317c381c546e8ce00d790cbe92c7c6e3737ddf292af8cc83f356c59cde3977bb22c7faeab4f60257180659fa784f8d78f33ce64837989a1452084462c5d99373dafc3f6b384f42b3b51f449c6bea57450e69e4be7dcde56d964a55b14fd2e5c60223f1e90903b2bc8bcab5eb95228c106d0bc3d4232216576822e0d3a3abd77c4242f7aa4e9abc39431194301e7e94a2b72a6ad2511c939a709ace0eebecd05c416339f7309ac7f484fcc9b42e86d7c395cec1003145c5fe55b905ab4c1e382fa88d9f17d78d3ab3f7923dbcebc3be3aaf00b0a5e824144bc0876ef1f0c876bd1ec911546afa7f3f44dbd69380bcafd1acc71f0ba141e948580df12aff72f4ce4c1e77f4126afd6012df7d8013f9134e352cf6788225aabec652779ca0a4192ada94b940f6641cdd09a71bcacd03537af1361d35b357c176b15ee691fce74d986f33bf803f704480d23a96bad561d51d89ed7c8a5d5f9435c23a284f3bc2f8e2b30471fc1416dd0f15a0d898549b03ffa459fcbea8c68dc6a1ed231e84be82ce500eb8fb9edf4f5379e2c7ac713a44e7eb83831bbb1312f0f57fc148ff615425eb597ac704520314a7074d3d55c5ff9f0572fae7bfce8d7a66f9e814d636d4ae2feea1a66ff85f1a4717519427c49eed9c2e4a6bdb80652d9e6282c92ec26b33c1d413e10757cc2c001bbafa10c0889a55c059ef38b002d142c276b0328f817a4c13babff3f9b3147a1972b53840256eda2f11bbfde6cc2efd22ac1107247f4d76b47c8a5c667a985e1c600dc6ccdd30d383591653aa2b0b74890c34d809cb72e7be438869248b8154296c4ce2ec18aae7c5184a6285873152ff7e60cbc7cfb14839f60343bd4c96034a7eb8b6293ea2bffc389d51fe48693d8ceade08e5f2d4412e7d4111b927a114867e9b670ab7e10330a058499ed679dd3938f7b8eb9ba179a4c08bfc9e83682ee6543b2018eb2f5a6938c271eb9929dc0d50f0036134e299a3a6282cf6c7b5fa70e9e107d943536cb0e825f26ffa43df111a1410d0245d48331962c8485d4e202e23d444d72517e20c98c7f3b25f8d914b7faa08c0d3db2f5d017ff91dacfb4728eb5e009afa41648630f29d3b31d197c565f912b7a923f62844c8e6fc1c8617652ac563a82b9a992598ec1892d9d59c87b64a573f0eff449dcb85b86d15b53aedc652948b1eea2af1b9fd8b3fbd62469758e5ffdf6a35c1c27efe96f8ff5255c8a94dbccb3df9bef2796f1eca473f3dff35123120258e16a1457aa926422313ffb9fe02eeef8efe31c188fbbcde362ac733191588a7d2eb420943187e46f11998e0ac8f7e9b7392b57a92479de90db5f53c41d4a158c9e7abb09f0c897483129e04a18a03ab6e21868ad32df3d28d859337d496f3a13ab3e624d7adcd32a3a4160f231c03864853addb94d348007e43a80b188204e8eff7fb4b3222d4e917770ae87b6d0894c9d231531c6123dba8963da256c15f96ae5af00ffa942602a8348177f1a4993db8431adcb5000dcbd22759e3d57a89144084cf57752a49e31e8384a4ccea3fe9de51715da5d88d38c69e04b6dfd60bc96d1ea00aed0dc7f6410b1a575666800004a23dbd35102b8a4aa24603bafd6e1cfcd06912a86428a2d9754b78d541e7eaf0de86e6add06f2927db28b2af163a77b7413456ef58f24ead681fef92a2f90f6bae54bf5542e27e25f2b1ac064af541641a08be0911af64868d9fa4d5b240d83cbab030748b0bef0b8fead707c029e1cc02ee3240b6e64b2c8cd280e69843ab2da9a12154d672e5a359d91cfaa15dc1b7a2ec9ada70206b670cc1690c7d8af10423307a3b49a0c9b3f9886426141a48eda20dde2066e42cffb5724890899e138ad26423720c1c010416ff95d442e7de35a956e75ac1baf6bb31ef06bae30677875b450541486ef75e5945984c524ceb585fd19bd0a82a3164254089d2b44a87c369db06ef251f11886a6156d66dd1d71f6d85e3c944bd45c23c6bbb2023f3aa05a22f0fc6cab6b94cf05eb6babbff0b4f7b7aa88fbcfa9a9d1c7a83ec59884716ae48090c60bb567094419f3f635dedb330b9d068396a98bd6d74c87d7e91c8bf362eda0a0eb74fbdfd14fbae8e74e6123549449de393a8ead862741cb99694c6e2ea6c08fd310efbd3dfb14f63ca5f333132ed75e1ff30eb044b6e11322013f35983a54e54b1faf2c0a8a96a0be9bedfcd7db23a5c369a899b379ea412b6ad1044016f233cbf7b696a79cb47ad596cdeb1317a327bbe4c8c422fec1d81e1cae34a6db1d1dde4f92a7959ff2e72a0d2f884562fa76721b0bca33940c3a628d23614ce539e5ea7dcfb96512d66824857f5eff5b8df47e72ce0666082dfaa132dcf492c3cd3e8918da569673d3804d9629c9914fd2344962ac233a99ab9b42a4376928f56b7a22972f099a517ec20d95db62bbee6ba86b81128b01e7099edf67df597008894b5f7f4a3cf13a3ca00d2af0b4cf85bee34d449db88c6edc77dfe4113ff86bab048837b88b2b8ca19c94bc063a5cc440577733aa361a9f78a8bcaf897732ad45584567065eb9c7223a6cdf886dd418948761c4c47e4d0772c3fe30b4a9af3bfc991f7390321c7842ebddfbf3c9d5f12ff5a57e791b84256f3c2d0e0f41de9615496ee402afd42e98336097d4c8d2fc7724aac734785077a283c19e15da314a340bbc4eca12614876a3ad39a7f54b891e86fa45832f528cd12d447754cd57d6dd32a00a4324545482af1c67e9d9b0356abf0c6fe1aaeac36fbb3e1038a5b2ba857082ad2a302de130d8269916e09160001f69bcdc7589b9c29016ff5e0dc263a1280caddbd04e5cf5915443cb947fb7533a9aa2e009cfee9e5e57ab21300770d4db7692d48f4656657d4e0e548fcba9f88307b878e22dc04778789a2ee7025084fd88e2a0c7963bf4fe5c4f6e1d159644ab496413a913dd52710242d38d438126209c23cd13ce9c2897078d54d6ee2aebf5c84c5ca9129443da8d3bbb8d3b915cc728ccb5ee5fe574c9e85ec547a5c643151cc7a06cca93900761fb43716aff8d63d743f7c1bab66e29672a1bd9ed06ee6baf6c7b8e7c49cb9a38f807d4522a3c88f0200f386f7d79181c75e528145b427c08a16a68d8355b156ac8752071afdea93bf768bcfea92a2870d8ad9ccc31d3b8b11ce9964ec4c2db8fc327e04a0f0836e32090b9e8c805dcfcb8c1b2653936c42135659140a6a78f109e7c8e5bb64dd4be4223d9ae687098289cee038fbfe000e1618ae46e295d9285b0ffa52743f3e505b27e76cff90efc7d0b7efa9c5444016a47b60a27eb697867813daf2d26aefa52182d2bcdf8458c726af1222b94e748344e736cfe5b6fb32ea59316eddcd3873be99c6318f498aaa161e0f4bde04e47c7fc4fa761f7b4d54394bc66d9d5060e2b8d68b7316c9ce97256cafcb3c4ed72adb7b723e35efd516eb5063981bdcb11999a0e82b7cea6bb6dd02ba4bdb1597b4e27267d02ef9da9e8acfce975e577141e85ea601ca96ab30c546f872c43f6a431c12a0d31280a6149e32d0116eabe9812e7a8d9c07b4d42d65a131e9feb699ff10c3e7f0e96e7fa1ade031af54be6102f25b65a53b2c2fd4467c2c5791606b0f46ee02cfbcaaae6d4141b918177a21ebbc69f6c36ee6044eef3db26586272a9c46f9ba17921c7a9fe1bd30f4bfc57065150c089fa9c99bc3e84e8bbbe4f21ccd994ed77074ac2d5f16bc5ded5589989883ac62e0f3bf3b5aba157f00b3a88bcbc653218469420ed766a609a9dfaddfab90b1cd2f55b02d3becfc56dcfb33bdbd557260f879c6642c5ce3fcd068198ec7c4831134d682ba8f0669d7f9c57afbccce125b77ac2078897ddbfe0bf5b5ec13a68af6967e1e287e91c6cbfc18658c20ba9adba70b38921453f7d702906943b8be2f44fe556cbf2f147afa90fddcbae0a174a8309df6f9f5659d4e5c401dd9dd94d8c2136454c9cb17ed2c5b7bc7cb3509078abb6b43f7553b362dc10eb9f8abb1ef397eb2bf8c79228729059a0e08467cbb49f07b05d25c5e2b3adb0025e64a9cda71e647935162beb0b837629ab93c81f8ac76d726d33155e23e4f2149ebe1dd0332f42cba60ad72d0a399dc51263ea1267cf6878c42fda8c500c8760d5198fdd04450681a0183c74fb0d20f1c967562ad8117912167e7e03b4aec095a5e9883ab6ea1039d7c0c4495a88b04e453084ff68382ffcb891884abe263e1165c09f7fb798f062a186f710a526bc18fa320ed674aded974f2b71c7f91d6062b9113e2272ec478a81fd5d617781b5006cfe5c6699dd42503e8ed301e1fed817f46dcca9952e56101d765fc22e042b9321e7e6165460ced60b4e249f0544f59fcc28f3ab8b09dca1c89486a95538902fada1446c10b2d38739ebdee5df8a596894f52b7ec0f91bae17ca5a8d69998354549cefee7b5e00f24eda7a8cdd296410d334dcb9d366c3938faa53f4f7a1659fdb5d5103d0ccc795bebc7fea8abcb6072b7aafd33eed44f094970b666beab77096450042dd79a7e00de4678564bebfe9f238ed516ff71053cb22d95852c0096519f68631de0f126fb0f4b9e3f7a9f207cbf23dcaf31ed62b97d0565138ebdbebdad45b377ed7a7a34c6fff9cc008fd0f1d29199644ced6e68f21fac78aa8af735d80e7fa2c7dc81934b891063a46215e6a600959e171c323259a4f51b480d4aa166ec4c0636c04301e5126b6e2fc1f843819756c65b1fb5fdf9bbc56632f1bee9a006a40b01cec964ddc293536a537ff0ac7e6642e0a100b31b8da6c02fdc5cf5ce850e19f2ad1aa67bc00f7c1ac1b4d56fde4d7c6e48193a07411f9106772bad38901398cf063ead0735674f0ab29fdb11df91dacdbc0a7c0500b942806933fa255039f061803e63c948243601cf47e8dca8bcc6c4a6db5f5df2fa39655a7cc2dfec0b8970c421ae0922cd98c6c0b4e5166256a71dae92cd563e6cdf7df40fefac8d0eccc479ef780eeaeadc222ceebb0834e5e59e7b39ad390d979c8fdcf367d55bcc1f2448b1a821c9046cddbbfe50fa47f3e810b6d7e64e8602d965bd3014a17dcceb59d96e268ae7a2afbf16eb8e34c207173a067562ddd235fcc53dcfdc5a1c96992cd32eda916b4c0d90e5bd5cfdceaadce6141a082e18b86f7804d7a9465fb38f62dff9ac7e7e8aee17cf7ca19f93629eda88cec08981149846bb5062af6faa37c6a4d8849847e5ba1d7d31476038bac6df0999723535d0e1f60a42efdb7303f81fcbd24a28efe4d96a97e43589e637babd3f84067b5b74b15298b6381394473934fbf0e6769d10b4c6c49b5361c463e33cd39665a31b886f200eb3249efafd64cedd3940ca7aefb1f9ac608932fbc5a9246dd875f59e95852913429dc6ccade0b518b5406cae0b39caf83abf42b2e5753cb4501fb80c235a35506a8bd133df15b1556ccfa360ecb5025032dddb124cad4d51084c368db8560c6d33d408561c6b8a3c67d3b9b8188b695b4ecb434381bb1feb08e2b547dee17511a561b35eeb4a0774ad35f4df1925c7c29871c26c0c057a2b56cb7e651c6339e4c91a1a72d51af2a646de9dfd77e9e42c18b8a2b576f526b9fcedd90dfa442090a6e784bb614311793bb5fb39b8418842d586294746f1ea3c02320d6801ecf2ba44b13b60172d2d9693a158bc66947aacd7c5a14a0463905d6e80649db8c4770cac5e858a7f400da4568cfaae08498311265b50e539b2dec34ac124d4a832772ee5d8ab6122e57b4c8c5d2a3627ca6b1acb327f416c469d169edc9637579fb9c8f705f40c87823d363efc307c4a7efa6ecd3075862587940070b902eb4f740681ebcfaab436811c09745054a9f9cdf7b6343f7cdbecdd8d27ca40b01b18172601c81d1380b848e06e3443dee5bd1f2c990846da684ab04e33b359e7ed38f2e1f196d679999441510c88bc15571cdc5fc0522cd856c668a1cd34ecf189396bfff95ee4222652d2368c77a44328a06c59d21adbbecde96d4c9d53e11418a3ec47c0272e57507b65599509e1ae7fd138e278663ad4f43927174a1a2099c2fcdc82eff99c5f3f966180d0475c9e8536a6c25a403161f440ffcc7d9191c8aecea3782ddc16841a2b2e74e438fd5d62571fc01fafa8aff5865b31ddbf1de805a0a9f123d9840c0ac234fd7ae5ad323dbc0ca56fbc87041e92a41013acaa43eefb55b579f7ce4036e4dae23a5452643eeed339f46db6a997ec432fc660211f9266118bd63fdd68c7188aedcb8fd53c8f74de4453cc1ee6891c9e569fe46bc51969453de2b797cce4e7ace4d69e1f0255d6938e37e1a5021caa1f4f453f6e7daa8c57914669e5b3b6d8a690028717febb9d5cde46b33447771f2de16279148e6d58b050aa5db0676473e1b9f854a477e650a0fe284ab4fbc3032fd39b9b44428b54b842b59ade2e1740c527600db0b70177c6b486ae0b6727dc8fee9aabe6df2c09d72e10285851f7c8bba1e1b82204329a38c908e823d3cc34b4fa07b4e1ae77fd76dd630f07172b9229f1235fe2a7a1425d0555fee287d99206bf89bb1ff795bafb185557d2cadc2678ddcf09d7e878f69d2f16fb32ca777fed04c9ca8702aec8d0a58e09a0b0310d112e8dbfeb0edc3f6011f2e4fae6ce82d1936fe80116e9ad5b4cb72d5b1353ce5aab04880563f7a40e7192c3222105231a32221e757c6ef306d778c9ea3969f1bd1edd6c0d2df1ad0f189d9f91c445ea30aa8a73cb7d6621380c78e7356b9cffa14dbf73ecb5f2e2cccebc813116b5607cc250efeb5ff9c058b5608e24f0147f6e0253a6884321ccab5a9770e9617e0c64441c9abe6a4e57d098d7c79f12f8f98b03410cca1ea6f21586d574a1ebc77651f6957d2ae88e6e077e86998e1770f5621830ad9a90aadc73181f9541feb927aca2649f181fe08e652e140cd948a6fc5a0bc892e1df55132bd91cdcb2e07ca6db0e310871586d3d52722a2868edbf95dba3b2c28554ce1ea7917550dad9377b4803a3c11bdb5c06361070f6234ee6494da7964570373e854d08d1faa233122f594862d100f0d66e79d18d7df3b2419f19e01b2488d0ccd18705d9e0f234364978a7174007df03ff837d2ac5be63f81fa516ea66b766a189bc52350cb326cb510ce66a1717ef0a40bddceed76ea734515a10ab13e443e43553b58c86cb4ff8d07dce025d1a6a14b98db582bae9c71dbea0980534f7adbe5eb6f7865424f8e64d3227881af79648f35cd28d76190adaede074a0d0d7ed578b4ce0cc80a568bd5095b9a35696bccf7593f9b814e4ba9466806d25ef6e4bd6447d37061235e9a4610d4bfc1adf23d0c798f3ab9b341d72b2ea4b3c99a30e6311b1c6dc10bec1c30902a73a6dba157472d5880d13f07d9d5884d68cd75e80287b5053f484273943cfdc9306580fd8e3fdb07f878500203ce0b8d6beb087e74a09c2a7f97558994c3c04d808e2c6b544f093a2c0f84c4f78d3ed12792d078cf444708a91ec382905d7e03ee713c7f4bfd4e5b76174bb5179b88a536655c4b74cb2c0c364f0b1319728d98c4cf3fadd7e300e87110137706617f9612d30a7b07add1b1c1b89aaf82ab7588cde8b47b8a68c76da79a8a8f26779a10475c698bea74dea5b5ebf0cc7e40dc30446e297cc627085784070f420a664ea04e620802afb889349d49bbde6f0b183bd2b00d062d865a3280f62044248633c282945453d9d1880ae2624a69d742b017f36eedcc230f238b38e84c0a078fbff39e63dd13cb6851752fc63af349904a4110fb3a13493a0ace264e010815cb69b00c4110a726d55c2fcfc5ec1f286c3d33d5d57090029f6677b3a7edd2f1c1b79426cc8da26eb12e876d11fc22064f0f8c9c8e3fb6d197cd146b7640df0e1b2ffca866a289f5743f08621ae9c065a137a7efa5e5ec48cba520d849c8a0dd304965fb900db26da7144f5951135ec91b5c12498d01c4ea9395396482e3ace1998a6c8ad90dd039c234b8ad452771a305d35834d421c5099803aaaac20077adcf698ce0b25157ec4e16d0f877948d760943e62beba461583177111587cd85b43a7d2397bc46bdf7b34124a558c926d49e1448b964382e490875e93f34a94b77732bed1a477c76de8a2a205e7953c2212ccafc47be2b804e7576bf8259025d79f1fc35d2f45117134b58506e49b2e3fe4dde7d616a1d0beb20fff0798587203e4f748a7c337313386f52416f5a7500be69d54890e87b25a16388189f1a963826e41b775095310fb07e9e5fcc2c08ad041935ea40b9c47203d595b47db8ce09e64857790a9a39411de193182f2eec4d41c486ef1b7e975574ffaf406fc07d19dee4cf0c04a2fa6bc350d716e2d39e661a042ea36b775254973a3b491fc251ec8361c8acc94fd2f46314e0b891daad8bdf40b3c3cb64940 +MD = e1c7cdc491ad108c2c280e6ba5a1122b8b4c7a853f316195d58312aa + +Len = 63792 +Msg = 76bb5ed24d85581ffa096b44aec3f6b85503d86976417baf5bb0127e73151ee1f4da37a3c45e094f9a909d5c61bcdaa1dda54b0f90d3229edf2e7d8871cce9b6d808247773d42878925064f1dc9b4d1ceee815eb45d5bafa5ef943c31bbc4711696caeb7208dbb812b704b6be8075711d1f7c0675def4caa2138eb963b8e40daf02f5cc99431cd52aa18d7324da80168cff8d4e99fc8df967014fe6b97eadcf9b578b716976963d35a7292aed32752092e14d7dbd4097ba693b503a9f976245600704606f1dd87ec82a30347412c53dc367253a4c45928c2d14282b727dd1fd9193e91026934408569d6b266615e0aca313bcfac3761efd273e404ffe9c5d56b470c2070c816978658312871f96681b96596d45bf5c9d7bec1c210e809d74ff2d4ff7cb9d62d92d797dcecd2d2ebc0921bace919c538e96e03052eda4dba945706412c465b1e3c606e0086efb496cd3e9ba4964e71562cca81d4e63d7f16ac8326fab87e1f949a0a25c57f32670fb2a42da76362bfcca8bb8358c17a6595a05d7b51a9c8e935b6bb03525e02b2fd77ab19ddd9bd7842652750b846f7c8dd77cc4f6f858e83a9975c51d0abc65e09223da66d7fc7645f6cf8311dfe1d6f9639bae87cd737b39945d65866efe833dabd411e80dde94accc4146eaf6f542469ef0e8f9f242b42adc90f5d3db0cff9194f9ec73d7c89f33175654f952305adfda0b08c00f6d1f88c2af1ab7c79e3786de13eeacde311283488d11bf8a296d3fc548727c8d4939cdf7063894ccf8c787f7a08ce579ae7af8004421cff72715e0b137da81f47d8f84da34c3ed53c32c0f622e4bd042a7550bbf19f98d31dfc16d4e679562cd609d27fcc96133e473d197be1bafdfc1a21d58e57d0d89b2ba1c3ffd4647b18098cf31cf32850b079154bb6c072d766f25504a03fbc248022c72c34e6245d0a68ca23cd1eea3d5258221e4ec6f5936a3b78a79ab04dc4aa8cd51a1a23a2442b7c2b293a57c4214d6ecd5aecfc2979327cf28423b36aff40f035555993c67aa3cc18cf0aa59e46c8437cc63768f7d1e33d2a64e44ffb1e6bd74ea59a3e794699e0f7dbe61160f2ec5d982bd81447e2a8078a0e848ce96952c888d2852da1ef3541311675a1f26ee1468a51760802f5a760794cac721a281e4b4ba3c16727bea1762f48605f3c02ce86b900ba4b0e5208d35fe4040a77a3f6e8ffe1f7f4f4fb020758394e5327f5dba38c004be45541f4e5a59f335be82203280c54ceddefee837d13b0e884999132276d18d3debe0a9320b145e26d56ec6c92dbc4ef29ffde495fca77d6fa7b1cf89ac312f73e30f40c0bec9eb849a74a5aafd2f901e00e157f35e454bfbdb6df5882f5b4610e9548882ebe715ef6c584f5055abaad0b03d94b88c9104bd6302278696dc7b956d44f2e1290887b7c96e2641edcd19bb0c573d5dee073234cd32d80d69212a61cd54e273ec8a9b8e404abd082be0472da3e2b46c29344ef2786479952cc5fd16a80909a3ad09dbd35f62960b76a1cda8e5548c6b9494d566f30b9eb648374e247bd5cb08f0e2c317753a23d4746e17dd6f2147c4d6b54012dbbcc9d941f1a80bc74f990c4ec1dbdb3055f8ebabc1a00b9fdd591055f2298690ec5d76a081953cf8db06461d03a08f0f3a87c9632910e405fd42d698e7fc22911efc36fa739048af0c951ef2449bb3605c52f65120c4d71fe59760260322777ac91862a62423bf5858c81f54f137d8d23fdceaec3546556c3ab97573e05705ac7f24b23a2fb9f1735401cfbb960f7fe359982faad31fff79614b6f18ebe45db4a5b38e3d02dd9f8e62f4989caf8d09023e172d0386ac35a60dafc56b9264d001d1475f152a091a0819f3128eaa2b14cd51dc7b8ccc9588907469010280531d329652bd5921c6e18efd9fc5f812842383495a83ad114678c75a09aa74223995c54968218f66918671625d1b7f7502a5f26913edfaf149769903044a16e472ba287eea141e84e3895e0cad8b7b4e312c69458b02ece91912a423db488163b92adabb6b1d8cf9576ab34123be720a8a177673327b09753fcd7721112e3a1c57485a637d966130479b0f9431fcfa4698079856acbeb7021817608f2873b77ae7a3362b642721b64eaac19a6aef8a6ec56d4d845c369c2c4c811eb293b1700bd4bbec57e1384517c70a77b8310e990facc90470b38b2f60578af05fe55ffa3bc902eb9d675241c16b4aa07226d2ac85b8ab6b906514c72aa39593db8fd7bcb71f08b250590dbe4f85dbca5caec44b8d7374e187c37c1a07bb5167ba15d14dda614def0548b3012eb14e63dc5b5bec6367b5e4bb61199e74291eea7ff9a514221a32f040b8fac0cb7812fb759f1205c3f00f03afc085aaec578e9aa1bdfbb62ab46844872c3d53b244b9ffbcfc8f3e1bb6b0bcd96448e5fcd10106a3d52d8a50ba5e7a4d0503607fa1b3ef26f61bdbd7367b8eccbecbc6122016ad0ad1b33740b675f006f5d54d90098158280e509572c9afe7fe4296d1c8cf4ffc4b26351357134f4449513b917ff6b2b944c7b5c19b1ace56e292228f8d391d82f9552bc5206b6af598b9aec2bc03b8811194c406ac94675a1e200755dbe7ffcf79f0ffb31929297259919757b08b135df30803cb23b10b70057eadcb31767730615c3963cdd73b59106b8dd71a27539e8d93ed95ad0b1b274d009e662a4f04642429515d9aeff0f851ca1aa73552e9c125bae9dc850d26ee394841ad22ec37c956dae0172cedeb0ea21f967ebe884674700f91265831af437ec84016b7c871de6dd35e26e06b99da65eeb99402421a16e0e47c09930324b562031219658e5321cdb533e351c38dfa31b9ccadad1aa526fcebf2ecd21c17b2a78b205b98885c221af309f2fd8027fc7a0378121b7ca8232888ae4671c708d993b30323ed50ed5dca1f38cc404c085fc34e2477d9d273a9e84cf6ad1eae7888db3d2328b07297335f9c58e5c6619f72920c5a3564c69819d09b7497153cd74ed26c18b0ae67da514fecd2c5fc8b6df36ad0a1d148d396017606a08b11eca5aa1dd24c82139b37261f934ee35f03e440a20d63d1f263fdef2d20f2ff81588419020246e3aca72e30432215c46a65a2f8fc4548cdfdf220317a5cf46adfeac31a437e907bc5f63ffe6f1bdfffab4b2a7ace0a991bd828ad76e21d1d63aa2e132c4699a1b0fc12dceed7e2f5ebae1edb449bb00d41fd52163df903e6606c9cd4dd8ff60309bb879580220a001ecf4b45e4f9e7fde6ea28cae53383d7f793a1889c94162d0c70cefa60e213871fab6aeaea4d14e3613af76c0b063f7a8fbbf6bef7d77c982fd8436bff7c71e354aef84ab319c966474c485a2e0579369f41e6e85dde9bccfa5e9f7aba75b7bd54666dd5ede477ff1fbab615bc95c3a4acc20c855d1df643d2503d973042476da54e562cd941930640f2bb3f355bc14d4eb8d216742a0e856e69a851ef86c38cbde32bb02395bd245170b23736bbd488eba2d23c1167571a25076a2b46a79e9304b168f05b6568c1d7d1458e2f2a9ff019fc8746d37a627a8cc5ed93e4195af92035986dcf44f8773a80efb48d4c660b30325bc738b7b31f0c01cd2c26706b5776ec34991da91eacf00c1b3aef85d942e4f0da4d9fc3bb8029576344bc314216af41c802c4f63deb9edf4291b46b5c2fae948d3a97130e367b435a8de3d091cf0fd2bd3b33d0c8bbad7710597a618139d3b9ef3ebd1a0dba68321d585bd2bcd93f1b9e8308bd5185926feee2a00ccafa1abd7a9a506d4c7476c0164472bc45dda388e6aaa2106ae1f42648cdd3c1abd8ea3ba9fe1f714d0d2d69efc2d6f1af34d3a72ff2ae7e77493946a88b7424a65ea8a107da68ca81ed029c1463d7275b8755f2d4fb7c5bf933d82da8ac0faa4d13fc8a1eafdadd7d8c9cc30e9811a1fd4d910860359a3d832a5757b39014d702614c5358fec42ea274329b48e01505f6e02b347c31869787a54d6143e8121f58ff2e894147e332932c8a714ddc4fd7cae76b23636fdffe893d10b6e4049607c32609b8520b868dc22dfae1a7dd207bfbdbf731c050f4d70a4a47e51e85ff04d37e646d25ba4ca4b1e11a68c17335870c36560c0d8573b57d5569584decdbbb0c70c4f416f493fbe4fe4f73352f0d6d7e7eedfec55dbb2e7506ebad1c99ba7ed0a5b1f9b01afb07cdce20ad7d70f6b3b52e45a6627a598663a7454fe52cf9e4b275a1ea7bcdf06ceee9345404d9bfee62cce38f7f4bdd71dbef0cbd4207387134692b42f45e027fcad7e11355d99761e9c35e16765295554016b861bdc8e498e91894af947bafd4e402bd77faf13bd2ccaa0bd7e21f3fc532e6def9b2d29ce012ec946cf68766f0bd022fde6ea10ba58df973404d123b2616b7c6d1bbc4bfdb745da1277501b647d84eced32b79955e903a2aec01cbf61c7e022686530fcbef7ff4214b9a8b1c6ea85100d2bbdb576295d4a937babd1f0ceb7e6483f3244f908838bb65f18417c9bfa16c799a56c055e16164bfd256047bb155076726a2c9633fa3c5f2f47d16ed80c87824316c6ead1558f3e0e33754ed924e958c67fbb7ec08cde76f3de6c84e9e3e9a5f2b9cc0dca433bd4767d17ed6f0c3857021afa97f760f865718417a615a6c79a6e3685579008a476fcaa4e0cc4f5c6dcf0e2efca1f9f129372e2dcbca57ea6c87f34faae6dcb528a6a6222932106194d5680a4008270b568bda0c2aee1921097ed5b31fca7b4cc7a864f9c6ace67bb13fd9b211f66fc674c1c65d164110b8c6f7f54342787ed9aac1917c37913413497addc6c10146bb3a755d912c67d10a3b8fec70b18559b448aea62a0a938bc0a402dea8fbcd4e41ee131a58cbd6dcadbda335bbcb859e9527ac3d939e084ffc775476f920aee8f32627871482f2860bf3de3b951eedbfd4de66a2398074033f2a0c1107be1a9957693f2e44c06f7fbd44ad989d1a122ffbd35a8e9c507b57f14286477542b4e1e72da66a7a22822c3a467dc7245bb771828cf45d3c6c6280cb475f84c25cf2551afa09e62527ff1dfb6fdb31cb423226f181c0988a52ee4015aef4536f4b57657b44e60bc62f1ab789275273026c16b2e1484bcb16a2630878ffe12decbc58958094a755ddc689ab5c1350056a47d997aa56f25f51b9553c6d90a29ecb1e7a57b37fea5eec7cb04bfcaa70635343ff67e51450dfdc26596e5c37b5007af0314e8c5d0b7172c0232bd35320076e1efc85fa36e3c71667d410dd2b950d7cb011cc83b2a757f12f46cd88b3db8c0b075584820527af810c59c65902cf1050fc906432273a5cf818bfa385232f4bcabb9ee5f52598f3ac725ee16843cfa3983431a80011310ae82ae230415787d12d9a4d2ccc0ec42e0938581473652351a2e589fa860727ec51b45306559771b69421c4bb8f2715c927ccd9b212fd4685118eedfe2c7f8b7bc56396982a8979569ef0aa24b7152a6f78be585ccf62c5c8649ee2057bf0d823a3b7016848940b5bbe75720acc4f5e5b8c7b5876f13c0d960ca41ab2ecf19a8e7d1d37f9285da410732e90a0473c4e47c3926e8320ffaa787a2cdc8908084f26c204aecd523cd02f4d9aaab7a07256aece71ef23e71418da4d97cbea559b6257130bea474eb81c02be3814a3707823eb0db86ebbbc1fc545f7835d794e2170c9d0a15f098655f435458552e62fb42296f1d471cd18895c45f85df5986a3106e99b53918691acd52164110a0246bcdf3d1b347cda64c73a54d0b648da22507120c3910640e9134b719a599e8a5e08b6480a770466598febfd00fabbb11ef65c19f9f841bb052fd38068cd84e0ce2e4432101a9ce34f19eda919b9c2bfa899343faee7c8776e68e9e85feb51a82f7405a5fc7d9ae3be1bbbd37b61f24867cf760c42edfee89d451b03d0418932ea9076fdf03ea2fa4efbd316b691cf0dd4ffbe0a667979910a4ac38d7a5e902397fa14b4cbcc39794a40cfed5bb7bd5268a068a47a28bd034df09fcfaea10afca0176b64cfb4c2e358610ec1cb4241c8ab67f2750e7a3db1d0ccfc64fd975e20ab8ee7887c76d3eaf1f32c2e95c000c305ad07f683cc701f2b3665c7e7d01e3202b7258a7280e0d2af7d84ae3bcf5ef40fe605a38abdf8bdc5c36862edb9af935e3681f512617e4cd946c4ab3dbec0be42a9780673bd3c10290a70e07fd296e71663a952fca700bc080548b00c1ceaa4267ddb99ef48beb8dd621bbb3ea9788fb3e4e82e91b02ca2c43fad573778112823c9acc85dff051a4b70c54d7aaca90fcf20eae2721b3693963c4f0b404ef8bcd323682c303e83b70bad0a21e46accd9b0be1e190e56c2f0e6a1ca36a70fe5f4bd019a301695cf01867d56d2dc5248901102ee2cc6e1666d4e069b73dc498d4239eacf7e61735b9c546837caf2f190a55895f7a84c59754b24b12f5d707a4347e2455451b1759de9fe043994a8c759ac0ffdb7160f0d941d1358122dd410ac583eb7d574771b2a7cdbc7b8aa6e51f7f6af90a8f07f9c27758251d09fa7ab2d05b7a8df3132b275b786295186c41ff017aff549b22e73c3d70a44e71d4bb849c2d59ebe2274f9f44c75bf70b44a9fd6a1999215f58c32eda41397c21130b6873221101eb2ae404a8e32e0b2bd52401006e50d9a152947f97f26c0fe26073469b622936d8c5f33dd0f3633740c8baf30da2abe42ab76219bcacc56f7c63fa065d1429f1709f8332042083e511c473bbd7dc33aac23036e39196cd05b7c3a8900160999c7a619ccb8c92157c67725841a7456e94306517c55dd90b375b2885cccf6f029ebfb246f0af70a1640a7a706ec405e6083efd0da76a9c076e2f3c9aa20f69ec5f073b8a89b6e2af04c283c4287843236fb2a12071fe084a13fca4eefb0876dd4719a36f7ee912c8c657355a580927ab3255f8590b62455b8c8a0b89bd03bc5fbebf93feb790257311903a3ce7c0da08b7efabbf5ede7ac243a11774d24866f92cbfb33e1cf346394e363772bbe584c26848615a50b9cf089e0970b6201f9a34f9e2aa37965a9ba1e311d702bec04c5fac27c333ca3d6db40789bf5791d080968df021f10b0c4c3339e9bff6d6985b69ea567851b5b07c4ee5ebac600ca242a950b1bf7565528277b8869a55edb7d9688c9b29bdf75b235fa0f5ded878df05f5abed2dca8a7465f6c8b00e28ea63ede2f9bf7e7d7a868b6ea070fec7bfcdf401046b12f864ba1c37d22ec376b5e5bf61998a1e9b2479dc034c23b336c8b43455c4f41708d96bd0c23cc963473685786cd4c3b21edf7b3da60ed8a62b7bdef0795450e401d3d1a820704993a4558a408c1234e10f92d5d6e04d557fb1c0924ef61a4720eb3932cdd8d476fd93fa3e3e47bba3547525d0d0387263e5cd7f17765280a073cef3d76672d217491f0de79b2837d9b3587fb25337e3ca8089a0b69118ed2587b3e8089c77d1f61f4d76ce7eb4ee9ea5c18ac386630952f9ec0bb7c7cdc99c01a1020d976e39d925271d3b107549b9d2b62d4d92474cc3f8fea9623ffb7bce8ca1282d7edf718906b4ea7579f2aef4e34250969f6815e424c860fe22296d83ceba42b17952e3ce68fcc6c6e0b38615806adbe7d450ca7e265119d597e006836ff439e1b250f66ff40897746d413ae55038b7885986d559a5a2bd2dc7a7ae951857f3054e60123651df47c84a23302cfcb3cac157929c3d4ac1324fda06cd8371ec5965780b9fe92789bc0a9ce1d2b22be3fddaf6fd89f2bdb86283f785cb1321ba534956d80551200fe0828e04873e86d1391a5d4d023fa58f331146ad110ed1c9caf8104fad36e27899784513b69ab58464cbb50d71eeab4c8f40f005053b2822a4bbcff8fd6015ccd133ec96c98c5f04673325c23dc576f95d591d161064cfcccbdabb5c5e9662146ffca91527dd2c5a2b9ad6f6ce8daf9d85a4f4669b4f6dcf259dfb0239a271575b1ba4193855c68d974aef308c0dfd41ee699e7f0cc5ab349c4bb872f44ae99d7dd8072964bbd2a5928a99f9df0f09ec82f043e9cc8e3102172e1935f95772eebd7af7ce13d9fbab06a1fcd82f597aa62880092a4472a6417d8c47d2ae90b653034b9e8fad75e6a6dad83f55e4b5f977c8631bccdb39b2fab8ae69d17dbf5ad3379124f49a583e9ef6778bf866e92e684bdf9f57f8aafe34afdca8bbcdaa09774195b185424aa99c42c6074a1dbdc080973dbe51058f32f74a5e2c17051a6946099f6bcb0e12cfa6a60cdcd272fb58c895c59f4469aef64b717b1c6d8fd7224877f77d4d647a5ac70a933118cb699d462dbe6bb78ccff0390c7ca046d2a9dd8574e40d93ad48ef0456a12fa591d1380448724933d6bccbc803a9e22836584206e6af442652453867727ffd002df9d00acc27623faf3c2d013e4a079e23abf8d2b7a1498db939ddf74675c5b105a90e5ea326dd637f16bfeaa6a73a2d016ca8f1cd0045504cec86bcbacaac4183ab9a0ab3b7e327ae13288e2108a15f3861f96c12145ff87225dabfb7c8dc370ec61b16e6219c14a4fb10f298b464bb3053944a6c27c00c92ae810723b57d1b0dc1398822ae2fb1c9962120f4f4acc952092093c57f8f14164d249ce8dab676ea659d6a51a4c58686ab011f1b10a112044d464f0465f59965cb6b87ec7fb0cf0c7aefc35a4c851c410458f7f7506a1dafe5ae8711211a22e7effdcf19ec93aedbc8d69c25ee98fa6367cfb16ffb3072bc9aff43d4fb25370483837c5568869bbf16fbfc9ad225a9559d0d536a5b1a9a9134e189353b3e60244da4978a3cb11f202d06eba13f55af7e6ebbe8d2b6511c987bfe631c288f26af1709279fb13dc166d69e72227f509645a181758e55fc803837fbd8710b3d100da759347c0d520af9d76b9705d83de5140006048680444fd82f83f01c2c73a7a6c53dc70998178142f81764329344255251f39ca27f5110e22c3cb405d35771e33b5de62e9cb5aea70347e191f78fdd665def46ca994a4bbdf6ce2b144811f82ad0609cd35f541991bea5150b4e4395baeca309e6175789d155e25e32d2cac4e44befeee02a1a4b69f3d90886de8bd6b5c6b7edde41a2508611205345bbaa5b7a75b1e63d4532cb95688bc2ebf18d26bfb2d2fa9a5f502b44f12f143649d84752164f8bd2f8c2217fe6624c23cd711040799c3902b98c9f73beb8a9eec57d10d6f670e5878bf3d68d3406ad15ba6019a0e3bfb1ff977c367b4062185477c03c6ddcbdfd4545ec71291c20eda80282cb48b8e06a77404877c43fd66b4fa6ca557e91dddaf270d67aba645815c6ecfead9ec0aa6d54fd19eab683bbaac99bc2e373de79847852d879a8d5552b56bffc470bc3c2c17c161718bad3badba99fd16cb3893904bd331bf75a37c03a3fc4a622f888d36ed9d3698836f97b08d7f81f7aa65ac461ab5dc67c3a5240476b4322c5cbd8837d517b38c294bba5383aeed394b41bc3a32917028eafed7e5cc18398b8ee7b7af5ce58ab4f3ae2e074bccb16434592ddd31ea8f7b721d2218029ce3184c73961de37b0ebb69236d6c344d50f0dc188bbf87459cc7ef8c7d2bc8b6a14b0c0dae04174cc1f7f027e2c2dbb56e77d90c6051a1272aa6b9d953917cfa06bc43f259e256cf47033f4848dba0794c5181a116241e03bb8077604fd99deb85b49aee3449209700659cf0e9f7311d8d268c8347a76c6fb1fd9ecdbc74a9efa0ec674dc799032870879fbe50a5fc16935f400f5f6c0acfc066a68e43e33f8aeacc3f9d8e628cf829e1ce0d17786009117442b1e7e287a84964050e50b5bd41b5cc8a59f3361c9a9f2c9e6998ef1b496a0e1b275b9b518dcf6e50da7d5ca1b8a475ee0f80744064429087507f6a7c6c1f752fbc3506f6e4c50e108f24589b343950c12ad0ad76f9b6e61f5e158b01f5a451f70cfea5e651bc9baa88d039f868e6d5ba384e524ecf6e75dcef05b15a5a9b1d17863308be3938bfa5442b6147bb3f7d2fb464033669cbc8368fca8dd42f564ef7a45cafdd1fabe2876d706f179f95df982bbc20ac3d6165b2bcde610dd888601e03e5fbc189989cd75159d3d6aaac458a1aa14b3edec1d6e802abeb75ea83e8f111697d19eb81570b9c42000350c5678bedcde36ca26f843cddcd8d9ac9eb42275951c434d9f8a99aaac3a42c2683be0431ac79944cbd0637bacdb7eb1b211417483931a0c950fd1b094910cf9059b18962a77e64225cc54f35f70ae542b7d7576a7a75fc2e3cc9e3346cd65c22d9da921d49725ab7a15a09cc03e727d531f45e3cafe1959d2ea8b9b8897560526691a4ae2cf5c6913d2cedd96eed11470203923b44050b8a8911d502397e6aa3928f37b1ac69563382c6720a827d402cba7d99e2d160cc7ade8debadf741d99ae02bd1b4625d781314bf2ccbf92822dacddaebdfd28566e2b18554183d603bacd1efe922c932bab4556f749a3d6e37e5aea3fe6eb1d359568480a4ed967a1f5dda5414795b997c9bd75fffe1c9cffdd1ff51482c19db224ada18647a7ccfe3328be0ba4483e26c3e1d29155f28cdf334126b6fa4552d403424b5096b6b0225af492e6100fccdd81f99235b5ec4d8a6609a6acb440e1a31b6f6df0a1ceb916548a4959f3b008c6ec4de07386d4880860bf9d7e1a79f527527c30efd2b68fe107320aedb6f49ce8ea25e2d43170e46207ab33b593ba346991b0bbd49038db8b5d34fd28bfa3304b64c8c0df1c890a9f45158ed886c94670c1553727421a451d3dd74b9577856bf8437fa31db0e6a1c70144d96f5d6fd444c8b1cb715225749e8e641cb94661f6f66d92b314555152e323813a037f7486ee900ca038272111163a23971e9501784dcc49174e7490c5f99214d91b54a00375ffb0dd0729d6c38e285ce54bca2b9a0647ebf853736ca1143845df3f44bbf4e1ffe4ab63c00c330c40572dc84fa80428c5c27da9bcad8f39fc5c74f7b78c003b77ef32d6548a099b6a5b981e8a405dbb3014cfdab51b3672c6a0bfcc15dcd08a4e1a99e74d19ec408eb24ed4e5ba4ec86f2a156ec87d3fc67e5ae945c6730bd66ead091f1381840594a27672c6e07e556a4c78eb5c9d513e0dd219eb32195a27bef0a9040e8a7af1647439809778966d09c220dbd84115e059507844c2966586262aa220a7fb760ce770be87bf4b3d1534d334c5a63232b64b1c2edadcb1d3fa8ea51bfb449e1f5f03dd2e0fa6211c57d3c8dc322d3851c8cb7d6235ea334d8cdea73d1b4f391ef1a105b09eb4c2da3acee942a9d51a1a1cc2bd3ddb52e57a +MD = 8a7a2d3d812771f8ccf9377e6c426cb8fc63e98ad9140565439b68c0 + +Len = 64952 +Msg = bf138c38a014e266c5d64585ccd64aaa0571ebb26b032184d951b5967a2452b38237e0fb1b530d2ba2b92c1e14c04394c3bf5f334e2d2bcbcf07c1de5672c06097a29fbbdffa41164d75c9d73e44af6609b91434ed6352fd477bd84a087e3539671c7280d351a5b02cd2c3b732aab6a93e25afc030edbea1a873a0e07990d8c75a6d0153dfa06280a897c3c6d93a7fe4c9ccdbdcff12963f5ab8c1aa8ff0d191d95cf33beb2e9f0e2a8e700d193c339f14763e92421c035fc512e4b033e6491f4ab2f041df4485e3187d7393dbf7f96386ea80e9e1512c8a5148b1f94eb968fa1637a26ca32a3c86db2d736108b4fab687f24aeac4fa3a476624cf8dc6b255a9a6b3aec42028eb7fdc66197d86bb5d237f54449bd35e541f6c6ce774851939b461eebf513c86ba5782ef0df13f544b2fd6d91506f7c7a399cbe9a0b671363ba4aeaf7b1ce08bd2953492f6c519c7ec64f5496533167b4e3deb63a35c74508400f7c08a2cf5805bc15c157cfffe5b6749426cde2819c37e9334a2976e75b03b50a3e7958961ad7c64614148a9d559e566260a26efe9e75b240f6d25f25b9f891d1aed443c0e5a5e05abde02ca86098d440aeae5906c2f0c77e28df5f2106396edc39a3e4ce2cf292ca2b4526bf8b3886a54d5c4118ce3ba1416cbae757b44894b08b52cc1c7530461ae8ade93159ffd606e936a7c304a8c8414edf884848c8abc5008b5a4a430172d372a514ac41515afbeec81d840adab4e43bb7d261381c3ca045982fc60ac8b17a55a5198ed5cf8deaea8ae2ea3543efa0affe263106d59fc8a713ad1e51088a860e3868678bdcd75a48e9b8543876e11d37fd243639677da4b18862b1aa43566d08d9a1b4e80bcfd0a67f0e5078e631a0504f3cff54543edaf150e13e7afbbdb5d1f326055edeffd47fb5457d7b0449d0756ed0eacc1e5bc1f327990347b428f7063f95b764b8bfdc31270e19b373922433d6909715486d0013570abe94ef1096f1f94169ae4bb85e674ec8e3b696c3220810fc62d444eafbee79a6bef71f0d1c41cae99a7fea51e18e86f63a08f025406e9864fc6da64e3bf10a0d82c2c686fd522edea87e2714fc138a16ab0f026115d3f77ac265ef1f46b7829fa89c6816b0cf9f91320d848a1492a2caa54d6fef08e4989e333181c6829e6dedaee89624ed0687b1c5c27529b1887b52b7587b279ffd065fed74f0ec96324667f44bb34a088381b0b2119b6c59616e7f6f94c6b34199bb204f84dee9e80f86bf171a51ee79e3180ea59f49da72ca16712ca6d51aa447419fe8058e570e82b92395f8f49ad791b53c0eb012eca40eee087ce328b62e92142f356b91bc60285855ef4c0dc7981be3b96bf8892b53cc7f85eefe342e46e6bd4eb62b8b72838cdec681a8200d41ee2e173bdd1f0f086f2579e13c79db93d1a78ef8c9ce21ef1cd6e60b81bdd45b84eec5fcd2371048837a64f2427c568bcf6d505bcafc331964bb44db6d49a54b7cb0563d7c83d78a8608d79094be17955c69438da3783e88d106637fbf560898321d485c3067bd45033b325aa7b1a756f545c8dce7d49cc3fe42b2671c6566d841800cf792653a1e77ac15befff98e37166d60e80c93e64148eab23ff8fa58723773249e16fee65d5fb5e21c01e824bc5c5a9c2d963893875d88f358d97745fc60811fae42b74ab817f338105220035d2397eb1bf9254d0c8887f650427ec7ed79146ea68a00df855cde882a6513c2a008afde41b9fc4b5766722ba4a87356bbcdb78215618dfd6b8af242c8bf45bb1b77fcd62d6d2036ee83d213c48ff76aedfae50a897d915cc12eb8f889d5288535fe19733d673398385d223f3e6d7d7d0a6d27686112bd563cc4ad29dc2b5e9976078026005ca8d7cb4edd1e80d5681587b0e91c3ae5847214c949574e363a605230cb7f04a1f28e2df58d322a3c59ccec52b496855a79591fb917f13e9a5e8250e655deb8cb9323d6dd9d0a9916c4fbbebf2487bee5fe43841083984bac3d7808a4a9d5ab5e1d213c6397186c093c3a65728330760c95fa087c36bcf40059a9d00851f44acdf30ee523f5dc0178220177098b511952d2b503388bcfa61b35a04d6dc8ab159fb755578b53c5f7d808d969e0974a374d373d0af20d40f07143e3e761887a9a47dc9d1a361b86cdcd732ac494218c4e5025da961535c1519716fd24601bd3575ac53e9380d77ed1bcd38e0d90c4a7dd0031162b3e8fc157f121448b05ed55cb4d13c25a07f21ed22abc7bbb62fb2d51d1fb8830ca95b16213f56291af976274934ab0d43805f71d9b906c44973f7d4b59b7a94d35c2220e7405dfcee98499c1c1dc92a89d7d983283e1e83f8a0c1827ec27e1e72caf83bb95c50499304f5c616d4be03db4e362af78437802c7dbae861dbeda950bb86707fdd5799710523aa1da0b1209fab1e6f2ed177444ed3880d462deebbd5f774c621099c72f0627b521acbca0a3fb73b58b56e0956c46ad3f91601aade694569468729445f78e5a4c5f69b3348213a32f074a3133ef80a44b5b79f4999746e0df799847ae57154470b97591162affcae3c53b7be85507b8248134ff2745e3b09e14064648e43780b2de74c8fe14fc455463bf431b2368436ba1159cdf88f71050c620f2ae156199932cdbed24c6b5bcf1512a0954d11ef0814980403ac70dba881e8cef56613ff982230f5052b6a8ac5b1c20411de49829f5d929abc1967409b47bbe9eda6e0f1b105fa3a4e07b417df233168ceee4606a49de6611fc5dd678666c1a8392826b88ce412d5d566b1cac4724913f3046f42bedc7ca2553a3b190fe7e45302744e1cd0c6600ec3d3c96d1da6f04fa9a92e0096233ca48500e71ee1d10b316f13bee526b4cc2d40d364c691c810621864ea06d4790eb1d89d4b3ea22c1e8ba98ce0db35b53e7973f0ea9fc9de909567bd0c1d1fe7da0f769bcd41fb0004a9d7671bc6a6d19e3b85b1c3be6cf35830bf3cfa0d1f7488078682d7ee9356a7d3222dd66d2010d4bc9e9e57eb230c507b476a1d9e7d2800e131d8d00e1335ee51b2657b994c7bc841e4400ef0963360be28cedd98e10b2ae59e27206922a6c16aae977112d1196315821e51946c6f704089f1a3c2f226ee5bf6f62ec769b008683e4c20a059f38b7f9ec1869e4ec9684a9359d5e55980358a60ce64f08f5bab918c0af00b890f29c661af17d7e34730246d90ddc9be21e5bb053629ab3daf932ebd5c491a0b772633f2726a07d4f4b016411e2136c712e8360cb6e5c21bb5a686fcc793978733680e7992e9f6c8d5d16834890bf41f5a24439ed601fbd074cde36fd53648a449d99f2095fa6b68f47961705b01ca6c01832ae31fe31f05f4f18b3e0d9af50bc3602d0d05072f5c58914a1d1b6d825710ec320218f4f6613ef8c792f7276864a8e4026869770b4b09026b6252b6e2878e46a4244a9c478d59ccdf931c466856014f645a4ab2c4dd10b20c688744b3a5837bc8703b44dc304d531b68035dbc89d5889c0b2f2025bb748b7557427fbc58f872e60f75527bf32377c33a35d62da62c77f1a2a029f58d3d74ee560ccfc749f31346288030ed7ee21e1e30381783550f04ad472535fbfa7354be8d6b9c9a1f7f4630e4e244f97892327573968a863d8417162447ac00ab1f152e25e94eff83a1f3eb6b25f8698a3c9a102ad695fd079698765e8df6cc48499e86460e4dbb1d6302c0e4d0b3045be73e377e81a2b25a4a6f1320807b2778f7d70e1761019994cc5bf7776cdc91949b0632971e186bdfaa843690a6a3d9e333a80dc16ad36091e4e7d84e80ddd9dc60da489c355ff13ebdbf26d68ad7a93204f9cd6bb129d7bbb48caa8e941da4dc3fa2c3b54fdf0c1e8b092d1bb17d610d73b2943ebf6cc8bb4333b7623104b93b3f46e90cf3ff83271d489187a5ffc71b86bbab621b05f9389ac545f0defae2a269ae03c6a92a20027a669b41edc3a40547fc5afe4d5a32dbbf289d602367e5b9c3c3580ef9c5a957aa4993721133bf72be5ee83bded53d4cbc4607db88b38b27586b320a6c39e7cdb6dbc14199b5e20bf2c79f4055dde1329905ca8996469c952d8fd7e289eea20da5026cd70eb3d378eb20c5363ad9e5355c4f3091d489e0aa4c1890bfd84ca2bf7fa8de5bf8945b60b152a344163312fe0f0b7f1bcae21f0fbceca5c9e2bcae8a4db45df6ddc0426c4d4481936f523035b921005101ba206b85f55e272ea49016160e32d0479f5043c6dda74ad09e07826378fb59007aac67b0190302456d0e0ce29ea510bd994d8d24075c92be7f5e8b14fab85b4f888bab4342db81ad80f114b94cfddfc81600f46fa9e993c35dfefbd48e7e80774e85de49572fcdf04300d5a4008464ef7e321eb0aa967466a0b078ab1c97efff3261a8c740470d952005f8aaa280c8ba39abb3eff4ab5e30b03aaaa28d49d16f9ee9b3c7e56b6a257ec624d41a3a32b1af335c326e7078a7f6643bc0c7dd4e50f9e3a4502ee30c27c50d022950facb5d4892c183002deb55d8f8d00eb39b8d29ab18266b03f61a235ca03ab12c08ba456d8f89e99229dec2bfbc149239cab7821c50df1f4ceebca2ad47737497ab28f184f45c6d0cad7a74147aac5642b3f3e3b4537774f1111c2b1fcc557b772c3deaf787e4155601e6f53df84362b49f6ad5dbe89772daa85f461af68acdb6d320b72c11c6eb596d4bcda4ff7fbc79d444dff9d9e722effab07b068cb7723ae8fae08d59adf7fb39d182af56086e779ba88a76ec0e8b195135534c578773edb3f2ee80293f4025ac9f9ec8c78780983bbe5dbaeab5b53ef31655521f9fd7b57c31686f4724cec00fdea95618a4f8c2feafe02d9a83a947297c0a81abaaa67c8adfd6c17c05a9b2aab529c11206e0df2aa39b37c6216e1d3b8ff841c54ee8292623c0de908adae5c54da8707d563fd608c1174134360ca67176a9fb3333a6a49825af2e4b5a683fa8ceadcd213b1e8fe032dbb1ad6b8ccc135aa515be02e8d5280e2b19751e5baa9b5fc13fc55e84f2fa1e6ff1f968f576686272f92e63b4a41e06ba07d57dbb0de5286b2e336679e79dac5c67e0d44f8cb9b79a0d4bfd14f9c134e6603420914fcf52330231fc06561204297d2a57a3f54e80a5bbdd790fbc5ac1368c5aaee45aa105a12488c83127a24f5e9a9e9af89b6fe6196aab7eadd531d432f30fd0bd15a3683efa0071044292b5842506455665641180817eb5f72c8e9663fd1b2e23681ca491ed60a0878f2d5d22882800c53b7428616a1ec6f4a9b92f5013456f1e3b56e0226672fcc1f7ba70c02acc714e05e953458c5358ad35f9c6829b563cb67697457acbfc2eba608015e673bc43f8ab09bcb34fe51328b698837fff173cf40228fb2085c7dd7ab4c8751dcbbf1ccc161d88331b9ba16f16dc8fd1a54d18dfc551299cfd9bb20ad9dab7ec9a9ca5d02c6ce24d583ea78a3b0e12fff7c37780a859f8779a3f5571b9fe05dc481c850ed640f08a6e96d07f0f7533925b4002dd938a8f38c37d6db73a7c84743d07648efddfda71c66bc158785b1b113b8b61006f2a1767e21ba2e5469b5e3ce225ec578792c98bc685251d6006f204fe6d3bf12282b78d5ee29e01c4a5bbbc9d3dc3705ea1e55ed7aca2d4aebfdff40cae38b696da98319f9a06169be0c27dd71991e46854557462a7e0874ace0a68cd160159b17ae1db0d0b8529b5959c06f97fffb88ff34255cd3f883d1b7b9ce8a96c3ee25da9bb1310fcc144f90b70df6938b4f6b9c5d387813c42ff0b0ebdfc087a965781b04e621037626e4f8c6791910c59a6d0133194e766b5d401ce942d5206b2c205d7c14f758211b09f5ea9a3d8c296cebb25830466848ac4e6054a02efd93a2ad0663c63a7a67611d1ca5d9da52412786243f25d656069d7a0f9060447bbd598cca5e9240e6b3899ce18ac0862f876abadb5a6294ec0f81618f2f1b9c2742b13e0dcee1c1298ff507c90bd6a7607697084c2c6ef886de288363a33abc9cbe5a3f45273d31cf7753fc47ab94e491994cecfb47a387b2fcd35e318f362c289ab50f150a1d0924e406d8e1dc73943f69fcd76d1ec8b8fcd622605d3596517762423bd1e9f9bde6608e2c3c210b5cc653175616241702c11486285b48f3c2e5af923410496bc660776a749b1bb494c2ff2cf79aea46fbac127f14c03ba6f71fdd259654aaebb94f831c30a32f17e2b1c8ce2a4ff3b11a1a6a9dc41080586462755cb12370e21cf03e23eed8ddadad1f4a4b6cb9b2edd4988742a4b0a960a179f2d832e14df767eee3121d9099de7a67fe554d7cba65c1b2f30e3545395834b2e0089a22948400b82c573b8ef632d1385f4c3aed7cb147d62861043292b774a9c77e357be7209dd87473c718753337ecd7c0b3a07c48fd8eb1db800d580707cb1399b341b85585cc55e84ec1996815020233561a3ba5595909fe3729ebbf54934efb92088a8b6f004b35411ed539ff24691480df2d4ec1a1ab19983ce048f19ef4043054c03aa010beeb3c84bb316ca076f4c253d3bded150fde31aac85c454a8d543cab0bfbcf7a3b6aaf97ade6c422b654a91cc16b320fc2bc81f7f631f622855c057fc04743a94b3408cc3fb2cc1791a4839e78ef171e4e3517b90c925ab3769c39478f95b32a68e7d696e32dbaeba375105d6cb222bd1cc851427dd60989cb953696bc7f848a0ef6978c3ad0373b6636adde0f4cdb68c8e6cd38bc7578f21ec78be1f95d3e24c7d0da209912b7735479da94f317b7adad20ea006b092f98caa3a7bda8c756a70e170cd8a09dc22ff8bf15169acb3df86407464dec09a3fa69da288e5d46546d5c39ae28c3a9ddcdbd66fbd778afd4d567fa5055c1ef6c7376bb7cd88942be043c994ca584ff60d93d01dd5c0f6e12c1438a96dc8f32efb07bc82320af5509e829e656b366e6f1ded2205828e16e8e4861289826a66cb42dd3909a0b51e5bea59e815af6dc09175b2742faa271299dd75b64c2e89a05403838956fdcf37d42b9150ad7d476ce37baa6da136d4137d7fa8cbfa586fc851a8bf557133a16a44c8f27d34bc0a9aee989cb6650fdd411a33e9fa9ce862074a985a45602873dd322b4418b256ff74383451f7831b8ac3fb5ffeeb38c5ab85c83b1c002dc68db826bb4fc830326e1f4bb892d7014423c2a56db045d9d9926952f9cc2fe0f33624a8e0db36b4389fc6af8a25fee971ef65a2c3c7b0840b5edc713a34797f99b7494102af094950d98fea14d215438a37d578cb0bd643435905ac661a87149f584e788994eaf46266a286bd63c415764339b2eb445c1d69c90d8be54700a6ed615bd6de5281bf568c280bec9eb2691f5bbad58d39ed1b66f71b961f838d3e6b1a9ae267b175b1149449ff0b4d88466cc7806b18b32f43202b58567d95d6e301cb31248d796fd285c62cec8136edb545ceb2fcf47aca9f80adeb526547829d97bb4824b871162b8f69fa59b6228abc92ba780e885667376ec4fd12405f3a741533086b516213c31bc7dacf12d807663bd1fb2b3e0fae11d3b9b61f77a6a571637b9880be140da31226f5d5fd220bb8295c63da7d6c463795d43d0070e46c9b69db21eb694fadd15acf73f3dfc63ebc42a2d8a4ae36d8b19e5dbb3d95e136fb109bcb35b8db9b57dd0a7bb1208d49796fed810f37350b85d49c575f4d64ac973e02bde5157f7e3d811e3598283fd4f7998386a5813188bd21d93aedff377679dc592083e704fe893055ca2f5fa4863fa6ad10eef4f2f6616c5b8b6f15203ba9d3e81b979633c445d1f562fe2e83085880b34771f83ffe779d6b736ef6e8a32d09f7d7aa8ad278784c47248efba6014a0ddd52b6f6e248099b511a710a57580f68ce7c432aa9c22b899339662fd31a1e3773594554a17b1e5055a700b934ff57d7b531ebe08248656f21c90f33d3fbdbe4bc86a77c453fbfa3bf43a36b49430b3df31e291423b52ee838fb0f6e6e4b89fe01ff63d4963ef37cd615e3885cc93584d16c852c55af8edc21f7f0476bb3316c8aec01c65b1dc2c3e3464778363cdc9397438791e0de8e3125e6392894dad9169f7609b95e8734602efd58a39f4209528dcab8ab8cec35d08af07378af698ce488c504156522523cff639c725e83c3a9fa2a9fe2217e8ca1983c259e85074fbe8c007a413996233d9ea09d4b3da91280288ac59f663f998c99f3d704de5d2c8cf54ff1a7a28caf4c52dbe3970259febf5d13b04824d4667ad33c121182122a3609dbf3ae67acff52653cf4bf763d904ee2edea4723e8fb518f405c2d38cf51a411cc07be529d1a351dec5a2961fdcf15ff3ffb022b215efb152640c0c93caabf544ab63f290808dfc3139d3f8b41c4fdfb3169e30427995ead174332fe003c6d1c7c8699b594d2369ed84368bbb075ec20edbe5075a3b4649f3befec9dc41097af8a0135beea7f24f864d60bbbf2eccbb49881b3483db5f432b9cb546e2f2c26569daf790cb1179017dfde9251b03183005d3b73439ca6f5b0ba5fd33bea9a0059dd17ce6692a3614470e16446924afa4c6273f82f698e515f6534d2ca9c620f0071c19d95352a81c73f69e9613f411ae0cfb1aad34b76ef88e3d1b7e4ee8a399381354c6241b4d7e875fd896c601eca03cd7ef1f9eb65b7725bbeeb51881c685937fc45925f4a4bef3a26ac2d9ce7f1fe84603567f0639167f684d7d9111f839bb99deef036f2c523b56aba6e9ca679191be1dee6037965addcaae244329c72a12fa0b1436fb62dce0f541bf50762499cba89543eccad1b8d34b87359929a1db3c28ef552b19e6b366f69378a862449cf8bdfff37f2099b4f2637f4e1da216c1999ed21e6a5b168a3fe3377f7c1f361fab36b48991e95cd3bdcaecca5b13a471ade489fc7f2f70a5fe43941035fd779645db5952bf7589a997ba5636ac0eb9600b624d6bd41783ab14803fe7509d87956af464fb6265ae8b02ea421fbae3e41114b0b2e903a3de1e0521a171666ff4918d1a5df0252a3a1c91b346e1f243b3096c5840f07844de5352c05f2ae1f53d2f2ec5aabd7243cab2c6adcb29dcae94bd64c18e1ecc8b030f8fb4cf905dbdcfa2c28ee1dfd442cf0214425553e47507b1b064d0c05ad6fa871ea7893e243a3aa0dace89c3b597b56f0d196bfca4478a6ab1eaef81bdc9137e71e10270efeafcbdea1d08f5b0b31c7e038b75809686ab5cfbac00ef5fc1ec4a4c29c1f52b50943e82e2f602304572a3aa21089c25c2d91cf030db45db61f36eefca4e27410b7fc707c8b765ce9f56647362ab8bfc7c920f3201c5319b29b770ef4b1d83cb6c3dcc1b36f39ce6511654c1d8c4fc652474c83397554f2979a6e4cd44a69745034cd22fa6011401eb50e947ebeb4a0a5aefcc678a11db00e2403efc1f8fde28513b6da79e8667bbce8496682495115670618050327181bbe421e41e542fc50fe677e32598ea048e8b3fe0950b48cec40578788028facfa50fba78868b0ce8463380f72c2da276d4a1c15c61287cfefdaaa33979e6240176b58860d72cadb465b8f50e2db5564b2892e77e5ed4b81e4da06037afe263e38b85fa41829198c608e7329c9cd86bde14dee0aae0b870994eb74df784c660d26de1ae7f0b8244798a5ec8271bff69bc04066b76894c3d1c7b3fbafdbada715a9869138df457375b848024320da2b6719089d675db0874044daa35be94b73be8858cb802bf98f7f861ebe551f46af87b24d9b00d3855cbed50974cceb4e51708dfbd0a51dfbffcbcbd0279eb62a0a6553b8696b133ec9b340e877e828deca937e18a891fd744bc34e0545072caec267c6f00e91650157874e1eb398ea21658f24565c2a138bfcced9662178cbfc61f7d29e925910f68ca3c75430c57742aacc475ef25aa6699953329bc2dad9396f7c3e6afeaa5e47f36d7331f755196721b3afd775070035aabc224b31139f90725ed3fb596e9519114e1a5e0f3215b953aa236aea1b6718b870711e740d6527f40459faab8cfe9770af83828042b65fc71a6dbf5b7d243a4ad7e7be95ae73267cd8980efcece1e697f67746536f4381056c537dcf157fc2e8594cd09be010b6934157e0557686310e8dbe528f9f034996069e4d4fcbbfd81a5e67ff8f8a85ffbfa76018bd12349e5eda204d3cbc3fdd015216d6e2872ea6694e01f078941b288b72795d3da835550e4765df63ad4065ceb682c1903112515c91e24e5ee517597c0b6b57dc20cf7fa63a54b10b5a4b0a869cabb561b1b4047c8fd2bf4a67c4bc1cd8fdafa2624b44ae1db66b3cababf3b06b5a5b5eef5ce54fb199eb42016976f242f90d9756f1cbaf5753b5fe88a64ad48b555b8ed4521c5f5dfe7c519b4db286b22518c4e5083d3150f3355ad986347a64645cfa46ddd234fccb177c1eb996618e4b7930f5dac1ba705e96578691db2b5e5106a82e462f54f7c666cd70f54a0a3f31d8e36fad80d41f5b7efe7710676ee1e302a275d65a49b4b8114b7a49f7092ea0dbe63ccaa206c5b49656954a00cc55e1f8f001d27c9b9d68c0fe24fdc5e7c25f2d4042794ed8ca2f8567c689cccc22148f98bc85bcd019a01aef5758db2b623874f96b01acd39695f339f313f6f6b04470a48d3643728f26c725f9a3625d78f1591a9eace57e91ad8ad50532a4d26738431b5b2c380969c370a8f32781066b5383aac3c021622441ef42e22bffe9b0baaf0610b0c41b0e3fbd812e2961ada3269bb1c1868705b517cd8874492ec2f1905c6c930a0f32e66255b791f429da88324838824640f1aef9cab0a1d359e59383f355cc8240d559f4e15203cf0215823e3345ed4873ae75ad8ec05310aadbff5b1ccaa360808dcfbc085b6e0114e7f91403e3ead349c274fbc2c37149472b9ce07ed100ebf6e0b08373d9b9d386d7557a61176130eab711ad0ebee3c7585dd1dac275cb6ccb586411c9d4cc8d816efe39f5eb3aa87d15b68919bb91cf06fa08108fbbec2b267d532eb3558f772c325c1966665d812b62ca598cc163ac7889a84b8ead4b7030d6e6a2d962ead8b0add7e15d90b3031b28b5e30ed941a4d89219536752d18310eb8334e206c5fa3467d85b8172227876eedef0480a13014b9dc2f0c1b264abef4494ae77460823e1e7c54d7b139326633daf47e25cc109fb330dea44d6ed32f56a7fd63f2c9b9cdfb50880f27cef560b9c8fb283d7330510db610899c5555e49e4ae75e3bf66ad555907bc8fb31c519593e6f7d384513cb21e261368878278143a87520a07519d6b5b2cc8fac2045c2aaa1ddf7c6a04f80783c5d458255ec77df574375d0d45b64b44de6edab08dc2f26a9a322391327f3a92a41012a6d095ad9cdbea83d8283e1a9c8474d786a1c9145ac6b87302c41b71d32c923e12bf28ccb726342570e47e03e988a39a4b27bbb903093811c4a311d4cfc521837215ca01cebcddebde5fbe2cb551c3cb0707de08ebcc7ca8dfb5ac8d +MD = 6f1233cb2d5a70e0fbcff633560915e0a8bb842ab8251f563af084d8 + +Len = 66112 +Msg = ab726c7b84366cd79ea5329384e4dba66344038cd3c839ecf5e2af78be7e361492416a3b15132a9f3edb4c10ad898e9f3e5acf03de577f3c9d20547605e73e2faabf9e9c0317b34978815401bcb9e5ed5de284ff9a12839274111b4a085e5e421b736e66f74aed1d7620b42c5c79c8d7e9648948af002d35a23f6dbe6eea7e940de6436098b5c1635d3fd35933d31fa40a6948a6c62a666f4e32b398df94866ea79e86548f5f176258671952e9ced29de77828e187961486a07053a105635f1811259d088351d8638c1feede2772c90aa91991c0994e20c3c183b7a1855fefda7403f2441d91eaae24efbac495c8ed3377d4eb0da55a736ed9f345600a901ffcf8beebd20529378b465fe5cddad7245f7a329f8e52c0f4cf0f4667a53affd8c5c4e0f279e220a6421bf8d7c19ea857d7daba130c498a8a2d8c068439bdb3007f01f16e005c7f1e1aca41f9688b416fe4bef5b04e31c01fd278ba03e53cb48070d677c7301c4d895c7bc3b18947ac52cc4e69de1eb3689a04faeb4e6f5f0b41e06cfc64d1ca92ce51580468ee7af1ead7b4a00642778ce20c3a20cc9fcdbf2a19ea07afab0e57d53e868e875dcd161d4f15228e832433e13261e1e53f2fd8226279210f858ea3866e30e9749fe725d57a9c75e0a962667ebd97b701152c5f130241d0ec28f57ec9287c9b997c7225f9a26e23627cdb2ca1f7032888eb6d5be442699faf5de9f086b3922e5dbb131f710db6b47ec4348d3226cebee28799d47d6a1a13beea1202a5589b2a2726741a25039aae9b4818911a931f0178b159d2c6c27bb682971abb0e5fbf1561833d1efdce429b20d12d413f861f78b033555ea791b50f632ea624a9102579729b1634e1b5d70277271ba48a46f6abf3d4347f0821efa6ca7561435fb2f6ddc236a562b9ff816c07128bc2e31dcb22aa5b9f3ed1b852041d36f022168f59cab91c95b26df56760385a25a43351c6663b913da1ea9f06b0c537fec9b7ed77c7bf148c2ce5dfb26672c69051602b11fe103eb7b33b1e32322b41313e2b15785c3ce732d7090589061d1f75d154f3d1728f2ab479ac7cfe13b61b318b584f8311985d31bbc2ae15c9a12d7b2df5f1314b221cddfd260393dacd8fa7b828e3c06f3b3e2ee0f6237e3667b84b6c2d6d571030ddda468ff9190fda633bcb821858fd8d52d44f8eadebd6d5888c96e3ae6b492136525cd1a7b73b446094ce4d377343f761c80f7392842f5464e7b4fffd967e5ceced48d25596e5734e5bc8738838cadf32b5288b1a73cb4d1604cd68a2ff384bca54117c4bde95cff537c2db53d019ae8e41a3c08fdd3226648ae908e5d0fe55972fbfb5d0b6d3c01cd1c36de063b9cd3d1487f937edea49172210c60d2e59e21a255b672d4628ae8dd0d311761830a207d7dc1e5cc87d1cf7734b8a6443d05a1cdfeb79abb71b010eddfaaf5f170897b432aa1644997309cb26a13c3037eb2665057ad39031352168a0412fe189c8130bccfacb378652765de21bc5ba3232acbd3e0d5d24dbfc7663c0af794596f97ed54ed3247fb7a4cd7350c00b4a5b2e55ec32aeffb1defa69c6e64d76d365223fda5f3e096355f075d61798f728da6689b98a64a17d62b7605bb9220cd21fcbc0e2a842622a88bfd64ee0ab719bd862b1eeee382bd18ebac4e8e236248ceb7d68b5d1e7171d779858a2530262ec7dab3351053085f58a8bfe360891a747f2be9f1a813511844b03639c17a4b064f0c879ab785797317fb2740dd43c7b4c5b19cddb603536a72b885f02d59945495a41e9c3eeb24acd95b79034ee3e8ae34f135abe17ee6fcd40b0b49d34ea07e3e29fed63104b8410f323b975fd9fba53f636af8c4e68a53fb202ca35dd9ee07cb169ec5186292e44c27e5696a967f5e67709320cacacbe46a8070a9277bdb75aee274e56f75431af294ed1609c9f22e2fb144c08dac1a4284a45da7bab5073c6c2627a3a0cd57399511d919b7b4f2990a9e0654680af3d2dc146a3b9215dfe0855a0dac56cb3de4c6172fe0ff17df238aaf4e690457f739f3592ce1580ef3f68ce6cd5bfbff6590f82d68083a433642225d835acd1382cc4cdafc154710b1e2e554bd3efafa7cb29dcd07fc13c7869954315bc62cde252e6b227e6419bbb83a114c73c1ee2cc1ee396e8638f6255e8db2c32e27ce186cc4b0c82a4a3a706560a3067791400703985d9a694b6bed0ca3a07b70ec0b42b823b024662413cf57fb1d4b3f099b2980457cc937bfef7f4f5fbfc2daaf8efd95c00bcfd8ae4038ee7de26340a75a04e67a098367e2eb5c65265351b1dea399842e1632e8354a3db74d94e712f6f71994aaa64170610a250c9c2d709cf5f3b711c251f62b559c5e40fe975f3c851cd8295bb59bf7c6a649943580d7f281e9d6bd215172088bb11b0a158c3403be15e0f301c9fb54605a3a9a671fd0690f1068f4cf974f064412e47106c5fe2f2e8c94a03155d81cea90889dc53cf256f9e1ee473195d5ab1b5c5b1466e7261532db93bf7edbbac7a1d3a40cb46ac652dee8e722dbcfbe7d7dd7df629a52343c87ad4e9f2eee2bdb42be2d65d94bc4d32a9fe41632b761e3e81ff1fa35b9b12b895c25cdd5efa3ce399a85478832665e697155afeaff5884e6bf3349bd601558b472c9ca1862ab26e3033c1065d1335b27f7cc4e48ea0ab7062ff3bf8607e95a858bab224ae9ba6bfb82c25ee68aa46fc2bdb87ff10a0110a2dce3ea43f3a59799013a5501e75a03df93a8818ed141f2d61d9ac357f1d428695064486bb5c2965b7e07d0c1ddf2850bb06f36c337848aeea1e3970213ec54a625056861e0d8dd494c8423ff401c760c5386dd284ff4ae68e533997402c21c05c537b8cae740e2ef074fdd3ec0404d5e077ff3226d0ac3c1420b192220fe14e4ab8bb80b5ba33dc938bb6af4b106818d46bb0746215f61a462cab490f0e8a5ef6261e4a7906854445b673bb594c7a8f69bd888080f3b1e7ea202ea45151a6572646add343818bcfce9d3edf60e1c2a366158f3ec894640ac9a3438b2f01bca1a3c06f015a52cde5f5e71e03a6f7c8bc951ace97822097edab5ef1e6f04655a4353b6dbd08a3d3ef833d1c0f74b41543bc754c71f5bed2f758f8409ddd47f8c7a35fadf09399265341463eeb1243309ea4ce11b66a979e90971a38983e2d2d75b7d53980445e4d7bf4ab8e80c8caa13715cb264c29d38220316ce2bf5b1f7d1337451957631ad0cd671314b4de72f175d717921d7a99070fef9545fb7b466e0aec56535b38f438b36127d7709b62a7bfb1585d0fa511b3c6973e6932e7ca8ac29eb1f1760a150b94a98fdf9d49c34b7f6c37900cf16511abf10e574de8d259a315fefa8f23a5d4d808f234212ebc651cd05b32fba8baa627c7ae1635c486621618e4778dc9cb18e646f8dfe692767efea56d4bc3103bfca3dfc5aed0c30f2d81710b6f5a45af61282b4ae7d2bf181d8db314e44e710d9a8502fc28082f95424de61ceadddf7a36057e9054cffccbcb31c2f90383155b0836f8fb8bc44e3f2ae340bff1fede5420e509712ec490b70f5299c3b34a434bcf1f8969dfec6a366ca9469b8aa58c64a63092967e98c4037158011bf98b420576a77def2d67c9a29009c259c0ba2fd3504fe2a74c35e0d879abc2a9df2e5bb285359b347c1fb3aa1e6a7aa0982510c8a6a8c14b9e822c5db0b3a4146c1cd67a8433ace1d4fb72769f3438191cce776c31a4f72a7e67efbb9dd86f05a83bfb84fc08789d3de34d2f9bcec26c539eabe778ab4bedf3cc7319c983ea239c7411f9751cc711c0bf8bfd98a2e040457bf6600326863c0599fea0ba1ade174fb0620075d761e46477750720175c3dfb4e9eff5b7b70bebdb6d977fa071388c9d534c286a10ebf32f45376ba95fd0c7c00ecee0714d11c220c4cc811b0511f13ccd0672fe2954a301c6d71ef848a55d07728528f5771fe3d819eb8857f6084347e7e16f902bf2c68d80a21454dccbf009d9a567cae180a14fe1971e0da075e34d286f76a69540ee21173ae46568bf313598a1f55808debb26c031ba92b0f551caf2f330c7f1c97a5adf13f7a088e9911923fd8a23599471cb1a5dd69d94112f3ffc2f267adde70b996cafc68cb9f58033202a7ec3504c75cb747e0a74c633dc1a9875b0159644026b2460e980884d8f0201bb4b9e796127864314cebec3d7e8f95c69764ed74b0f4ebaf9d922506c2e044d22894b516d17ba2aa48be21997b64abc7cd18cfd7682c274bd0df8cedbedb866e2b02064eab6a58fbfca6533ddf48d3d126a369550fd65064d006a30173eace39e48d4304494f6e6d912deaf25043f52eca8f21b54df84d40c58fd40a8a1404797cbcd2015231cb462fdb4e80765ef924e06461c1cc9c0627d60386cfaa6210771b171c0d6f1959cefd37e7affba0c7fc91a8903f31c963632be820197cdada7be72789ef480eff4f24c91e47841247fe04e515f827884c3bedc90cb0a8874bcd0b7382718418a50fcc19590fbcba627162a25ab454e0a9f6442bb15cd56e49b4ad846d59cb3f33571bb001d048a2fe9fd268c63a60d962dd579877e5ab99bd7af6e0b370c78c926f3c157f52d3d204ce7dbec154f47b5f384f97c612d40f90650d11bd7e1e06a89f55d0395d03505d478a2cb3c8b8cf894f53b106acf5d8a8be1a9ff24b78b65e2f8f6a99b98026ef52223a045f53dcc6698c6c9f7bb9fdefcc4710b99e7ea29d66116a062df35ca4366d711de16eaaffcf2253fa47c5854cd9baee7c41d7d44b8e0458e88304f8633d92586416b0421dca3ceb7dd8c478a62b9bc0a2fa2c5451ed8fbda6815a0413adba7842c6c2ab06a002be91f65cdee70b130f9392252898cbdb1faaf09e879ecf0c5720b84beda4999d539f6835c0f6c14a62b6d1695a07720f095b97778aebebb17f64b5f411ddff35320df7f825bb956741757ea1f28529540021408e14e249d0787885651e9b18f1e4446b4d161ecf9234376374f6fc37d28e64b18a2d6b3092c8c2f0451cc52efaf0ad8cdb9a07b6f5c465468b7053e5b03a8cb315dd6eea1ff9acbe3c14438778deaf214bb95e93b57865f08d67727b178c010ed42dd3bd9e939cb6f40dfd6b9237b1f4447b0baefdd9a02923e441412e0d2c8a712482f2371cfca1120fda2470811dcb6fe9f64ff36e7eb8f5eea77e1e4473ef94cb64d0141e33474122c5f93b475a6f740a08bebfbf6867aa8d8f7c0eba3f04e4285fa15a20a970274fa3311b0ed0a8fae727428a54c4fcebc9de8127f5f9920a465cab34abc6e46c9d5d153760e73da9863c257cb6fb405fab7dd6907f0761ad2a4438c846f26ab915dbedb8c407f82bf130adbc6c76fbaf3a54c372e0d33976defd8e3e7995ccb6bd0501c5c3989f2530e92373fe9cf5827f4b8ff59ec3e20d6971f5bfcc17d00a9fc39887e402fb424951cfc8f5d4f581804b844043412319d386b773c8e03f5dc3fefb26afadd427464ff8e4d788c554473ae87c57b4c64324261b81f458e0592f9c73c9ac02f27f2ecae7ee2f1f2ba2dc0204d06084913265386811d8e87da4ed87469864671cf00aace50f8201f01345892065e8184d8e9ea4e74dfdf6dce605a5bcbc5e451c22e1dc386f5a95dc508cb9846376dac201d552e05beaecc6c87de01f5d2205b8bfbb4228353e45b601b97877f19331b731142a9a63273003f15f1fb5a2390db96ca1c6ff8ab77948ced2b04237c585f5c662135f8e3d2c5b0bb34ac8b42ac7e6d3995003954c97585de1482e5e973f4569c8f87503b34696bb7f489ebb7d99099caec87e7f8508af59ed28818e8ec56dc24cbe25eb11e87babcd037fdebbede86fe516b66fea341568ff3883ee34803578f94eb76ee079d483a462b5456b2a4df24822f48e048351321e607ea710d86734d49073b3a76167ea0d4d871915b8fed0ded47f035a5e2d605288b8e0aa36c99de76ca1e3ee07fd890eac3c8241ffc3afaf15a1f7742b6f9aa3987ac28b00255c39cb88253ed55d08b2671da778676638c4cba092db53e0871a780c753aa04118d29371a21d32510efe6772b14158ad1224e0c5fb163f48d0be10b6203f7ce57abbaea48216869f43fc9283c7253a62e5d73a585bad566f1d9848c0ec23fedb29fb0269ecae3a1051b3d19712ab754b5be6c3a1d929ff1c15ae0971006d8ceace9a7908086fb46cdd2b0df7ba5b71311a5861e79e11a419600a391385a590d911a1fac8ffe05d7b926d2cece6bd96dbca35fe74d2edac2ca7b4c2eca254717199176cf3f9899d04158018bcbe5a4d131486818e9b467f1e92b28a458001977a0f04b9cf1df3ddd1116cb7af6bb9fc9fa052d27e24a285b6c80e7b6546346abc1a70c8a594a583a82c3af30f15620d4815a1d98c938c26bef2d07c961d7552fe636481bc8627f9520ef1b222e3dee6d61b7b7eff1189cafcb7fe741e2d4db70a92e7cc5e1a02a5976099de32feb4f1115ce9a921c523d93ac0a24d469d4301a64e0291d178bdf13eca3b5e858e6c94c17df24238d8e1bb3eb4c3ee5696e0989b3fbcb85ec9e04411f3dd1a63ba8f39ad299f318d714bd8d03c6a3f963faae4b00e1d294d35f405d6848afa16aaa4479e06f75e68b9ea98ba009e284dc12b4eaf632dcde6e3809e562447e6e58733265cbc02b110d84564c3a76791c543eb3c5ee5f58a71fc0c76597c1ec61779c43daff4c813cff5e5a2b2dacd6244ee7117873d7c4935a720f5a7341682f5a7e0f65f56526aeb3850bc5040d98313e94548f013caf37b0d458307f33702c73a0eb83389a7a0adca1018658292dc7a5def35620ee86e8b55028842618a2fd559d7ecf436cf9b5dd3ad20b9470156c072f748a4d6dda4ada8e06c202716ef662dc2f86a04d345437aad3a13382cd72f4fe6e88014b17b292e669769ede42bc3de57455d9cba84a7e89ad03cfc1d480d1d447cbc706ddd460e1c72e55afacc35931e3b95a58c42d045fb49fd3cdc92a303976e219118b14d718a635c1762b80274a042d9c8516607b8590d1ca06f9b392a69257720badf867e39d395cc24d972aa64c3f3ad12d894693b8461cfe04d17ba410986c45c4e395eb02b59204615cf5df224a9fbd780bf8129169672378f84daa882152604e8ae3877d170bbd2565fb4d3cfc45aa646d028ab2b81307a48cab225f8eeedbd942d35172fa246cf836cd88e2a0c7489120e854a2becb2b3622f6b40d3d7c28c3afd7d17abb76946843cf1ab9f48ee87ccc2c18d7e9da0e9c4fc2d817b994d7bc36737ffaf76cb3e411726b3954273a85c3403fd8c5ca12556781f7159fc359115b38c58a2a815bfa1479f2d74c0a9f5aaac7420bdf35d6e00ed6a97d3c723d61929a3a8ec15eed28f1385a1a38b38759e723c817a287dccaaa1357b52c4be53b710a57af585ff7df0c200978c6bc93121cd82a529c5a9473cdda9a63fb9af0fd8b2b95324c0f0caad9d37989627042f19076e16349088e89ee9ee9f006f9d12625508bde38d68c1aeec532b2989907970662a5b0152c3b6b90d2beeffae31653f42b93f9ab60f69dbf77bd9ad5716170c33dbfcfad201b97391891ca23d130f55c1f562af018eca1c05d8298a5a3d0fd7b5ac8185daebfab5bc2fb053e6ea188e19e4ac8b378dec5a5f92a3295aae6bb736c3730c30298068d84532796f5e89d094ada79620b3d87b4ed0cff01f103396fc485af69d6254722bf52b7ba11969057879db3883a9956918ba3648700c6d5b5064bcabe93e7cbdfe6522c344c0c0140e6fcfda29172b0a05795f9a164a23ee7a3e2393dc67022f98bd9fb820fe97e59eb80be2dba3a3485f35d24cda715c37c20016163e82edb243262ac2fc78f560707b17ba5ff8040a6c1518c88229211d70cf1e9cd63a462d45c84c49a2d9e26dcbe17cc87dbc56377642b874d61c798bcbd6c28d6d341487e7ca8cb5d8c766f4f912c176ff98a1b9c3e43abaa0f06c661c3a8a51cb1b5faa7154736f67ea8add40356e2bab33ee779b222701a64d0297ab26fe50b895307d2b9088dd17ec5510e9720b4e4b364459482406b0b1dc4406c0c0a7f2fc4a8ee85ca45368af72d0753bf22149a548ac4711135f318944399ba3300ca05ee481d34eb85c78f92701f580dd378382122d293d17bbebf62ee93f9b9fb5c0a808112647f52c76bbb0f276fe5bd664a93bcfe71557a046c0425dd8f2352bbca06047c990824ac8beb8abe1ff928554e46c9a6ae1fc99aaae279c4fee19f5fa0f942aa571883ed8cae5321fc9adccbbf94d9798e92d2b7f8a86ae8dd8749be4bc4cc2a0312f910da7df9117a4d23301b185cd5a7413e02d1a069c79f86da6e0712f18a31a9ecace1c4fd0b0da2a438ed4bd4599cbd53f1c27506dfa952d9d58f4e5339772fe7185f2ddf5d4b2dc83cb2a9c053b379dd0b5780b29faf8db08b30e171c6282760e99f1300a6a73107c1e7acb1729fe901c5ed7e0d9606aa07059876dd9ee922f2a72e1f1165966f0b4f08ef1824c68d8aa800a77841431a45bb2278e7421ea514c788ac7228bd3a1b5aa2cb74f8bbf9d0284da7732fd950e5426b623f4e5d103fd13b45b35e7024e07b21dc585cd4906add00f89eb05e006e01dfbd36221916dc4ab265557553a1d307229c22cfc503c32ce7154b81358b689ffbf47c5bd70b829a8a95c90bdc436ba5017574dff1a6719e5c781a0104744d634ca2625a0b70cb4720518e907e8c22db6b12befbeefadeb7cdbb7ace2f3d84f24e4198bb4ad90ee710232691ceee90f0bbde71a2119392ffd739fe372a59b7d37d5c8fde09c6d5e0d675219e21ed2eab70432d610df316dcf58e04da8a4b4e7d664da860ccaca8daffe1fff42c0a645224eb52c7388be2e5a5223f26c3a4c16675bf82b2080d001bd8d4225241b8ca9b4631723325d07f8062910dba7ad8b905480c9f60506a744a1dd62937178ad9dd50a01c435a635563ba44e0f3f4698df039cf6eea1a476dec1b628500f1f31a9ed0d1b1664ab6fcd618c86961e4d9c8ade76261bdda2655587e03c64e8583f5564320c21a8b3dee7e0a95f792a0abe1a4bd80286a2479e335a2245d7e36bff2aa2427dede707a92b20c382bf4dc42716b4883136d6dd46ffa145ecb1e79f9aaf0f0415830bf0fa218aa296706ec5fe06804f5c3362aa8842c612d8fbde3e386d13427deafab4f652840d449575536c7317f52b862ff78a83304eb1bdaf8e00ea17c25c2a9e9bc74577ce343449b799e4e1424536240b744a47c421fd42d81bb0814d5b4cddef9582ccab0d58d439ace146fe534b28306f20733bcec57f63b147bbab2256a1f68792e96d7806fd20cef2aef0fcce25aca38b1c7a601c4e79e9352ba45853d1fac6fc38dc1c48acb626a081e1e9c602c83715aa4a800b9760eb043b00a548554179481fbfa225c941dd722799c23ba7cc53468573d6984261e03b5286b33f1513c9ff08dfb1a63d0a1af108e02e36fc0021a515bd09ce37c4f063d7ff273ff8badea85a05f2d1ee5906a38c7ed5bde8abc6bac3f0c2b25ed142033434ac51e87ddfcb7df70cb0c576c9121c3a60db56176d0df5d3a84e9fd0ffa3d0eae87ccda3f5f1d97ea84baaa88ac61edd77952b8a3c27142f64a9e3084ecc13ec83c88d7547a1d6616ea886387146fc2fc1f5504d5b8f89cc9dcb10c258046501263d113bfe63dc6a05d13f6ea71a1cf8e702ada8f3cdbb72fcbd104644d62ef079e4413d41bf535f16cebf9254cae80090c42ae22c6a11e92886c9dc3bc7d68223c405c2393ea30948a5ecec9fdec60f6544b0452dedf5f8ca2e25cc6561c57fcde546140d6734304460b0c4b1df20ec0e8925171fdece698abe0b5de92b64af1e50ea79e6c26e9cb207f261b2555d60329b73a129c603020f3d62d8f0ad19d9bf0cdb3aecd8ba1438a09a0cc9c6e5337983802b742bfe8c02b31485a1704dc75721ff9e46307e6181358f0d1ebc202d8d4836fd289826ce0a2808ac25fb693f8f9840ef1d53234b33cdbbacdabe761513f27b5e6c92e392d0a52695a3d6d30a0f78857398c7129af771053125554fb5b68a399868a39d9efc315688448af5f07ec9b574e016b216742855e3260713d31c1757f14552bcbb35d580cc309e36b88494ba381cc76a8753fa930b065f2a38eda1bdb22b27a8b123988caa8e9afd2ccae07b087563a4b43befa7f1ece2fcacd231532241abca486f82626a8607b412f8b5e02b1371c766d5107add011af1f772cd018bb0658848c19beb54426cc233b61bd1eb1d793b65c964f2176d8e72e07780af339fde4b78c0ec0dafe7518f57aa1b368ebc046779bef3f8e657c6e530864f4563379c7ca1157cb1c5a03e83457fbcf75d1799b56a5cc67594e74bb4af4a44ab63a029818b6853c0dc93bc06c7db07fda057c08cff4ce44f6747a445256866c97b010dc4fe607a203de85280a367022e9fa3015401365570a89c59025a8bbd87f382ceabc2a5f8bb30c88959a2cab773a124e57639c122be9e11f352165952ce124df6a09ee0d577fc5be8f98cac2eb5f001f3586c96522393cbf99c207a2c8422870d0a5cb91a3eebc8f7c829b76edad263b463655ded86cdf5f34a41975393695b9951c2d7cef743383e2f41917fcb9072aeffebbdfcce95b569c34158d0e130ef24dc99e3f98a4dd246949be2697171556b95c55e86e53333e46fe864aa58be6b3515a884a3de51bf9660005334b3bf35738bbce993b2ef99ecb6fd64e9df5df85563b963d5dd9726b6fc388be978c0394c4b98062c1d110c07004aff965d53be0a2e9227976e66302fce0b3390aabe8a803b215c570ee0b6bfb595deb8bce9e4dfdffc79ef790804884041f32f30ff4f97c51e941e6da5bf9b3da7a857e3679259dcbf01e7e7c3cc49b9a172d0f2ccb1175059558922a94f230048067bba15f2028ea366869ee0adfba1f4597ad86cd88a4398489f16318ce0673fa02d293a29615d7051d487a6d1255f024f36ca29eb7708a415682f88a159d8561d74182062feb2ed69da8a5f604f5d93fd0bb0491367064563ec56f5b416bc5326596f0dc362f3e3579f90518101026f0b01721577e1a542da3474bfeea07cff62e3164a74148a1bc22b7fc65dc4b65d2020f8d5406d4d6523476f2f767e7e227a1af51f9e9cdd5a538741041c1fe127e4712ad195936674e62d318d75382c841506f5d36983566bb2babc53e59beb9301fbf1509fdc5838caefa0211257edecdcb0fcb0fc505b1586ccdafde0be3d6a1cc6339c85cf8c797894a63276622824761ff3fc808b561f77c6814937133d73e0dbdafb70f568ff98242a09c8e147f28d5bc3001cbdae522faf9b7e0f1f5478f241ccb688d45591d1a813ef315db11fc66d5204f96dcb76538f0fe5936cea3ffd00f314f4f6bcf9cb264b2ad95dce73cb5c8a503e2315538e6fc5c6e8816892a721355fdde303fd2fa9b902e76906b54430522b1467f4b08556a56939e6343798ab7cdd6a219466a53645c18309c1afd8f291dfa3c2d056e34c9715ac24b8f679a6afd8c43ad5fbd4d7d7add7c6672730a931b212bb110e4e59831369c25b99f21bb69612b6308665935710082760e6f45d19ed8adb1f9e6e8651ac994884e6aa1179607d1b0ccdff73ad3041b514b4cb1631d732a862ceeddae925 +MD = f36f83ec7f4502fb7efa6b1b6a424487791c302fd22f71803cfa5205 + +Len = 67272 +Msg = 9b5ec145a00cc55174e96410a06a10bebed0d5c7dffede372b873b72c70ce225fcc5f37c955d409688030c36d9be13bbbc00cb52fa7fea6a95402868aff4469ca8884f7487f81ef09b64205662655b27a9a1af51f59d5ca622d3c58d4a0574f8e8d05d963d846749f33328da0108f0ecceda0a2e99013ed518699a4a5fe5731f04c5a64881aa2388d999ad297f4fdbf073d46350ae5397dec0293005b83c4bfb448eb1f319125b9595be36aba3e1231de0b7421ffc3a70a9623c0e271bb30573ef540600ce6317586fc94bc83767d0595caa2f034a5fd01e46c9bd1951f1a76e4f3e2ed568455db9afe274e80188eb8e30d5b364616abf25b3f9c342229f3cd6aa75b0dcaf6237a09c333a73cbed7ba3a56155aa0a0246a6f3f4aa095565c9924920147c6b5facf57fe124d15b3d888001769e3d0bcf6b894ce1f9d8b4ea588a7468e31c63e7c4a0a017bb6a79211b0d8c3b15862c7b38b607e8391605d7f0a67375a42660a0888947fb85a7ef413a3290d942eb37abb5156b33f12a11d39ace8d6edf012a32ff98bcb50cee8444f0d75378add5f209e98fc2e7a97ea0875dea0b7b1d15894632b6466ed8a8ffd342e41e3edfad273ddc0a522fea797a9b41e235c6e4ca458427c92f4e6f3e29953a4139565fd99cef966f65313a8366b64e9e5374bf882593e8babd7c5b16ca33dfd6ece6b5c31ac620a7411524042d808d06adb033b7f21c7d723921249aaa54398b7f176ad1686a81992e042d6497a305038ba0cabf74c6ecd8eb64503190a151493910056d5084c12c7626df0c6cc4be7b346c0b08733a3fd31a6e694245c12ef664fa0efe98bce94a60a2c162748ec158f13d7efab71f7e4d0f66f737925dd87c46fc0dec09b9ffda33a05bcf77a615800a3bacfe071eaf2d137580773d1d58c1273f8b9e6b240ec3384a36bc3cb7c2ddc78d1c7a2ddfdc5b6cc38e6a0ea8b5af51ea107e86a41befb7c6d98f8c67d1556f5c56d8ef090cbe6277a878cfa7f72d0b2622f321e23045f73cccb22f5e49d24ccfe37e164448403fba570946c127229c1b4b65068554ad42d5988bed45323ba40f4ad66a3a97c849b321853c9f4c784df0123cfb36900fdeb8c4848ec49578c0431346b290013fca8b91547ae96e1666ceffe1c99deb53140fd803d9827970e894c738b8f18e8b08692cdec54695e42fdc9bba38616d622cff5d729728e60d642aed13420347954c767c8ce85ecacaef436d300f2b1e226eb2da38905de4367b2c0d3f196e3345ddd908c4a9da14b0f02afeac18a2077c2250d7bd8cca7cd376c2b02405db5a8405bb58efd2627c7e78bad494196f2f588f00dc695317b5cd9d165d2acdf2c5380a44f576299d091cd01a7951db399e9ffeeb72a4aceb980a384d9cb93b5a7b4a359b66bf7734c3724074754c26a95d37b73920d661ee2b738f92f53915bc84a3cee9333483ceb2690fed4eecc167730a02116f6738c978f0ea0bf11224bfe9291d55e53c1714dfe787af8e98761ae8ff279be6bffa24876a90e017ac300cb1c66908033ef9ae51d5eee2bcba0b6ac5fd6d010d466fa65ec7ca3aef6f014ae461fc2a15a4f243101c8dad61b9490111ee1e686c655ef807f1e04102c45e228be21ce2a3d5ca7b25a2ac3904fdf884d4b980fa8c8290c28ace1a1cd711103cad30125836394900975193ae2deee09e1646dcdff407ceabed48bff4f7bfe03f523526b5553837776e10893365f4c8f5e07d793f2c5ade5b3a4619f0e83793d482d89f21893a5b8bb3c6d7f032777a313946a141bde5887b79af6e3934e0f4a24601c7c359a77ee26d5dc60e1fdfbcfb2a899a0d2e0e96b3b06d07f66221ca52a598e4c44de76824a4bc9cb5b19457fbba2eadcc073fceaae9672c50fb64dc8ba8863f4bed62e1fa60cba10c72fe13d8f11d22a6d1dffa092b85256f8610f3f656b12081c281b10caa721f3ce985b73ad73e41c21256e0777faf397a8b8dd73ab702ce8e53aa9f0189995c6c9e920dcb75795149550b499debcdb19993425000d3619399284675810628a1c51a8bdb30d2b79c621f68fc227ac7d5f6259926f0b3b7b5cacabef9362807366fe4daea14f6de6836fad4c3b03185edb6c9f920b15eea7d4ac078f4c5f71f639184e5021dead8feed6db764ec1af0410407ca08ecdce4334192de2dd97b5670548316eaf3b58ba6ae017aa8803cee19066875a448368b1fd7c9576e18bd95a4df68d46c3f5fe1a8a13c8357149f68bce47360bd6e73c98932ec4a7d2ac4c5495bbb864ea9f1c14befa93b394f4c4773c7b1f41a059b85b87d832123b898cca5ef059659d87212d8c0cd0a15da4a7186d7a89985b6b7a7f5de1743286a429400c4cc6b5575eabe973b3259b55ca1d03d3be2b8c429cd16887d2f1854e7c903a4019b6d0a2762acd0895f8edf7e5a4bdf1ce7b7a005e8bcb98353086fd83503d8cff7044097e0c4cbd1dc135ce87cc9b6a13d00e1f30d80d0180b7b40e48f7be3566a98be6d6feecf3c324ef4410f3408f36ef94f9a464a1463e0d990b4de520ebd7b914d50141226f2e8a96e321c731e39020cb1a39a02ce8d598a27ef2a72a12db357b5e8d918161a868a9462a96e409c7fa0d1b5129146bdfff6cd3e7bc2e4cd9852bedec5e8e8dd945b2c7ac10db6446f1c7579b4ddc41c58864a49da2a1ec6b4eb2fdae06be4629b83ff216938c75859ea66968acf90d2eea065b74e92993f8f88d283338751d2236ad500abd7bc00c6716cb59c4ff10649aee731e0e29b61af936d82c5257954b27876be8ed2dd663d194e7ef04631e1ef16995e97026d539e72c97e9f2ea211d215a9041a1172af464ad698909a968a6a4240e77bdb573ee48fae20c78815300aa9377a587cc306696ccaac843569294298a7739453a04a0750e410471d1adae29ce9c74ffc18912fe7f361d2fdf1e8fd8295abeb53929e911f32f527d3f837e35685940877b8781f24196084dc78ed2566d13687c473630a6361786d94f96e9440d38889d6ece4c2890451a2b9446041ae24be708c8cc0f8833940234763a87ec09d4cdc02fcfd9e7f7bda327b9e6adac156e8af9525dee5e982f650d47f0c273fa98709e230ea3d6f48a63e0cce3377072f5e4bc586e558fc0441fd2295c31926c0e2165dcfd427bf315bcd531ce2a0e877c84c06f6fcda2487ca311bedf4dcdbaa050d5d23e2e2d9ffa2e838d09fdeccf5cdbb3fbf4bf2c9d238f4a6cec8f6c82f97f5c9723df8237a2296a33194b71b72169f5827fb2853ae344eab8267f1531741d788050cf1076984df7c88e6b53db64b00387734042be36648134ff855e629aaba84247853eb956fcbab1dc0609b8913e6c9f61d0fb73975e9c47ea3a8e82e7aa6a417a9a839c78c631938483f9bb3165af2eedfd060780a3aa7569274c1ef5ba4d025c67758c583aeac21a6daa6fbfd639ba5a1cf8e67cc41a421ea40d831f3baf097f749b057fbb44d1f03b9252a700aac648c95aacf6408a425d69597bfeaf3edb566a5a9479c7ee57c87657e0816560e73c8a91a7879978dac7cfa6560e954adc73813ab5c0f135a7e59651b5d984fa71a7c93482ab4f449fc04f7aadb98e71915981b1e5dfc7c966ea24162f19dfd60a1d1dc9aadbd29be5d9714cff99eb319e7ac466a130abf7f948982bd8cce69224fee0b7ac83b3ed6195dda3a82a4c096849c1bf746e2e6ff3737af93f5d39ad36efba84f45d63977777dd0543e5117763591232ebd2cf8fda0d3504bf553985c44223c81ea37248bbe1f7f85f44ebfa342b3e475428ffe601886ed4f54f76ca61a894e78800606f9376d6d366e42c003f329e8359bb3ff12e5780f06da661d983758669bceeae8a92a8c24cd72d623808f1cb7d7914103fa4fd03dd84e48b319e5b80c549e8cd183dea72cb4c9b2ef0160b3d7c1ece11300a0b7002d7a4737136ad1c90bb694c96f9de40b513b7d2c6dac17d25d743a350c1e54df6d2409b06d0fca2426dfa9d955ad6b4b0e8fdfe2aebc6f3012f1f5730613d062001536260f1ccba60ee173071d576573528f821aabd8e477472ab9d5d6c552114f1577a1e1d9fed52b849c5dafe3fa0c84010bdc4c489e3166e82f62657d0375c0ec742aca8d893ce590c9e3f399519d0eae252e7953c4e5d6f3ff2299820a15bc61d4c8b5829460a5cca4a0d2c193ae575e761a1a427e1cff13d01d5b1e9079ac3d3f8487fe48cbd101d59c32a2e7c8c7d8a6a7175df65d49104a5c9497bd2af6485f65294acc04d3f704dffd857672c6e65edd58ec51301cb116e62a36b8af044ad97383ae49931176d87219b26834bc4e46c5c637ba1de0bfdcc30743aa903c0b58b67d71e701f546f95c7071e49611d90566478657adfd0343fc1106ba560852823700ddcdd4e52e10a5e80a12212d4f44c9c4205067db42f49832c61188cfe9fffdf23824974bf8c5566bc41b5c7978aaf4264eced4e247979f51cdd6aef89678103dcb13cf8e6abf75e0e927cf5b1ce0f15358f97a7bd9d31a55613251ed229579c7dec306164da70d2ebf5d033c028dc83586f8e30cbf501028cb4df81555fd3f7ab95cc34b6824233f8fe67f85f35a7fb31ff497ffc2b789b1534e2bd8f6596a3ca3058f9585dfc1faa0eacb9cb7ee20b46d141cbaaab08dd8405e729ecf5003f7e6e6f15c6a7fee473c9070eb16f3b222b681fca73fe22585dca456cfa68b1092c8287108e0adb30ea900f5d8d80e3ee44362bf2c48f658a06d495ed344b19cf592f39701af1117373063e2cdc4e9cbe25ce0ebb38f932f113c741313716bac088b6eecaf9f5222ab19e1c031a32c610449230aa3da62b0c0914efbf5f4614ab3fdc2f77b7819dc50aca1166c3d7f08325152a364f20be596b4ffa0e2973a7dde2e1640cb010d4e0f31cc6ce65a88c954bd953f5e9f35d679ecae8a43209f4e716793500803d77fd1ef894b06c2f2ab52d51665f9a8888a5282833f7e5837c354f061ae9b471e777c2f0139363c63b714e1fa9d9dd7ae090abea749fd07abe76f11a7e2ea928b3ff9395bc0de9283f482296c70b2f24c5b87e8423026f5a2bfaa128e755fafc6de3155c068648afc6a85f59264a0c20d89b3487b7a63e9c555ee3a3dee6164765c0bcb58b831ed7321038c9403cf0f969975267bb11badbcb021d3dcd5577b43c26ee24a38ad829322e5379bd5a7a19296b4c96a5cb5072ed82d2395b3abbad71744e3bf7040130174143ecf61913fa7855a7a6f049bc0c3d6f8738e0fc4ead7637416dee95366681f77e9572ff3b37d704e81b23034a024b16c0aef710ad3eeaee6c3d02a4c456e2cf57f5bc736c3bd5e78265c68e86ef9717032e161e53cc2018232bcbb9576bba2784a05b2c3380f58c0b195351ff4e91feb318c68bdeefb6330abcb2594c1f889e7907b7701d91a650e69841d41f89dc1c750170dfab242ddd87525efb3f0cde9299ae59e5770878d4a9752aab643bd62ebd7aad9044e3f7662d9f1a159c9e1cb28b06caf2fc3fdd85c832664e79df0073f0e6f53448a9936b61f58c4ed16dd36cb1a3833f09c254f2c7529d23acddebaab3c8b032030f825bc8f81dfd99d6833fa1f70b201c1a7f9a3b5837c189d308217ab29710106064c5d70947a84272bc99d083cb2ccfa2adfa78a5beaead38e686ba16f2650d668b27f0cbb1d567bce009d1dc5bdb8115607213ed9a516389f728f6785a97366c95f0ba91c51b763f8e0e0a6335a2dccd57bfa17273406940caa6b459482d47ecf5cea90df9d0fa551724febae1293f54c43185e6a1f20af7c18e882c43ad9e822b002092d8ac60a82bdd2345d6b53526665655acdefce5098c3ec683c58ec6b6b633d5b2e9f445a33c952c868efd3acc9ebc855752b774108b3603d256474ce527e82d00964f25d0b9fb5f0f8267cca1ddc28958d5b824873f02d4aa6e6d9da7e08b8aee76136dab346e5f43597b6760b416f633b07592e828339d7e86782579809c93eef1f799bd3c6c81c46caea763a218407a7b863badc736e2c136fd90d478a9cc84a252466122848af53477e9354844fc9fbf508b629c8b3904e8445c3349119941ffb9d0418734cf78697dc95fe73b8f15c47b0e8138aef4dc1302e43072928e9972a4e3d8eafbb3a05416a44e2f4a7c6f435c31a40c20ca995fafc536757b111da399dd81ce57fc1f8cd9268a8120491eb47a9125878f1edf26a18bcfc259c520fb0f49f691c7fd488c3bbc8f8d2b79a6905cb9904b28660ff09e8456f9ad1f55e18ba581e5ca3bbdcac4c2d783ea82995f88f76ec7ab34ce55ed5b868be3941f0f757cce2add3bd1e10af5fd35dc08697a75e73b7d760f7cbf248dc8e9aba80edd833c35e18f72373754b26af37e5f9989aa1560dd275aada4ba7788a353df87d40b6053aa4f7360565884ab5d500c9c05abee89871daad3af35b550398abf3c6b948591d5abb3bfc67ce928c3efa3f366e1ff1fdbe78481272cd3ba2c9eab7f3ca5188af402c7d800485c7dc7ab9a3235e2a39e7c135c38a4e64f10fd2e48c2afc395b99613043b7c215b14f92273daeb34987fc81fa65cc118741f1ba7fbc93d5689783c2b0d4cc2ce7188b8d2b5400f4e3a4e406b078fd42a0f1f18aa58e58df4607146d9579e5c761c43873ac3140a95f5948583d42486a16cab6493d499ea23c72f569c57a2b1dec7dff4d941d975b276cd0808b0cd3105194e9ff2f3690a5b09fcebe2a1fc5b5f10a8822ca5e2d91a2a52385801dc6bcb91731b5639d53700b574675abb0db17d6347afa363c29d338ceea6f06bf4af7b61a3772c0c6128bb66205942f7497cc05c37dddc001b3a951adcc4604388747b067a23e30f8f37f1788b426a0b41f5be47f3bd450f3f59c550c721361d1a4370fc41b219b7c1ed29891fb30e5b89b4cdd2f59e6ce5c1433acb183de07d2c94c3bfa4a24e79bbc0fa04481bce6c83428569d821c22823bf7bf64a8addd8320109cd1d64efd9af5bb966aefd18b2c1175b98f5c7c34ae906ef4ef898acb2bce0a9a1068a8c5c4f060e4cbec78bc2b5cbe6dce8f11ec273b22b419cd7cb914fec29e81a7382760d685f12f21b8610e3a88da22c4e03337659b68a91d8c8f84d6c10eea3c080cb5ceb3255e3599621ed55d6852a3f3ef24365f766820c035c47e8e5414ce205a0c0171e81fd123a7a055c47f28d3510a37d5f8481e7f22941c1fb1d6c70686fbad9747a23c9d5f18dfe246876afd026ab86bee4492e1ba92d3e1b3feca8c44d5e0b7bdbb7b40549e22a26ae8e1c80ff9ef1fc7d48eef8e1833eb1b33e70762d2ed895c9ba5630a1fb0c0b80a55dd7f9d231a0d5fd851a90f826671dce41fe6d91b36abab82ad8a84d262b8568ee35a409e83474d39ae105d09793e638a7ddad1b4e63351d9c7dbb6d0b1f3325383a8c9a683fe0579aecdec104d082fa1c945a4fec07af67358059cf2d4f0076d6572208442b9f160fae6a2df095aa8f1aa303942ed0a031909111d80f3373ea530c02d80e70078b63a6669bdd6b93641c9a278c7956bde91820623c138513dc18c98d8e19b5b0242155228f4dcaf415bcea349d7de23f1a36aec95fec9c56e89230409f18553f7cd34b4c7ca42c33105603b94b8f3bca3196acc5a7fce1b38c79a0ba8f6ce6fc01f3f932d88317e6e08277341b3fabe5bba29ad5c8c70dc02419cb59d399d38c300ddf84475d066602ccd5238101caf834d5097826dd68f36c0cf0bd0021b356938b6eaf3db48057038f7e162178019829b8692b4692abc3b0cdb1429996fee1a8e73712200c0e304f64f27a5104f83c06c74a7dac991eb79ed69d99145c3eb3fccbc95b92d6186862c7d2cea42b076a587c1ddddd635a5582b2160ee4f3cb53eb8385fa1aa53785ca329f81af6cc7999b6163da3d53e71408daab32aff04d3811b90d6c0bfbd41f023fa941b74ca1404bf1bcd1511d4d899ddadda2b9d43cd6ebc6c03ffb4c767a8749807d704d3cf4e6b77971bd11d61cbe1d1dbdb71202c6f6572ec46d09b74ee5dac5934ee0f33df82d3a39e5c44943e62bfc020c3c476ebdc4d9b7e5d5ef029a7de921c79a5c71fccd6f784fb6ff95a271e91e4da57364aeaa3188da13b61c01ad5bb76eebe137711299db7f6c71988fa97540eff00f1f3571d695de558511d7e3adc2a9581a04d18739d1d95737b2ea1d213867ae73150eb6298d570dd47a79bb4fb1fb617f50aaa5dfda0209ba7b6e576d53493357dc86e1baddc8cf3ccc639ec223f99a79b178f8fc727de6926868e2ba30092125ec3a7efae5c7fc267e21f895871865a18da8fb0039918037f08649b84d2bea55ba95f87a53c9271a0631634a69dc458f6bd7168b7e016913aa22f6c80926017fce35e8a99640d28ffb2e69512ab9cc8bc27ff61ede3203ce0beb6469f28c08fc9d76ca193bb38110d355753a78456d2f380ff40ac8a7e2bf8c3c2d2ea7c26364bee51749a2b5a51515530176a0e3aa0222f3ab0fdbd77880a191bb76876da340990d4aab69cbd13537a3b8865328f57d19e7857e66454789e28899e21ff23b08b26bfebeff4a77d9c0d3e4f9fd99f22893481dd72675e253d57d42f1efd4bd25a16d8e14e1c61b7b374021320e9b027d0591ceba6aedab76e10c311665a98c4fdcae832dafc33ea20194f7df14c0b8e317513298c221356babb1fed01fc53abfca8b6869c7c643e6c62ed3519e8f88031f02c3e2ba95028a8beb06af8cdc3b2e01a0c869a853eda1eb9a3e2a0a7be255a3330d38b2cd858c0823e3152b332fe3087b0d9defd07e7be853a2c8f6fa7a433a4e68fb594f40c8a6f91e91798e6ba74576b2870ce088cd52e7bbded2af92544ac181bb0c7ec6d8fee703b5063280c35f1051b56de89f2ea1c2b3ac2bffdd216b48c1e84af08a25665a5cf04fc401cf9bf46599a17d24085b6154e1616fbd130220b413a3390d3673df64c3b4b76134b28f68b445f2a9f2e66009ff2173b4a1a5f5d2cd93acb2a4bdf2c5bfd371219b094dc585aa0db376e94b3d55daa04665dd44a8669ae02cc89b10fa353aa5b55b26bc169e6c12b2fcca6f79960b7a04c80e89af7f3767de4a91d66cd448c9af0d8166d65efaa63b0d1059493022655260b0214297d7a8498348afb80d9c31812aafba8f57e43cae10319526a4bdf6c19878c82c112a25f10b160946519381ae1b1833ac19a74aaebed4af9c643ca2c4f7bedaa6ab7d65575a806fa230cd3eb887416ea704b2549f514015051f3d0dff06f8d54ca76feafefa1e6f563ba7dd22d7c1d81ab993ef12802a420b062d7cb23ebd44a895602b6a525674ccd2c1c16f94ffec8198da7e8ac3e9d318e98c83a11782a535060caafc0bbf1c90869990013772384632e4876a850524b919e8c72e29df736c79a3ee567ecec32bd79ddd8a37cf280308509e544c12d36617b09bcbde3a3bc950e479fc33fc0509365cfe6d3e4d5832998d37baa1794b9a737295fcad196ad62c4cb24fc3cd6eb33345671c9393354f6718c82ffddf19e0bdbd3a533ef38d1d8c2b3bd396b94cb44ee5cc3ad0274bc3e181e406e98abab346eefd41dc5f2ef9d12e8b2a25563b76f9cc822a8c8ff83a9936ffe1cd22aa9cbf86435b2dc2ad159bc514b6181ac785c4482d7e2123e71e1ec69033412d65f77821c101abb493db5c6d5d09b77d5d6b2f171298268984d8b2bf399dce11797e112fead7deab8fc583a5e887bc048991aa87f62b05275e15256f4063cc65517b1b3f25302f2ded6ec1fd3bc26e36b893b7393c996593df3db7756937e49f8a88e6ae04bd15a2292167e1bb4c768a86ebe5995a55904594cd1950088c7f268122041b0de13aaeefa805e20b884d8660f4a636e3f24dc2fb4dab9da2d424a0d1d103f4a51f06ba9d4d2c7c91085ba0c35889704df1d6828f39eeaccc914d85091066c97ef8f24bae9b3c2fe03f39604a81fff40cc6c30acd0c730bea668249735a9d17dff195d8b01cc55a7daf6f5b530b8a30a503abc2414fa93980a64b74bd2a275e5c8b59e83e4c58baddeb55d8795fb894bb1af95f687e11c423e3018d5309861b8938c700a594569f6545959e29e8fbbe938f2428cf124d2a48af5cf9b17349bdca8c65a8829f4f96b87096e2e151d41ce2d2c4b4d1a6bbea735db65074f1e2d3b4f8ae5651c7c42f4beee26d3c04c21e0d88439a0ca5de631890961809ffd1ebcd000970afa824c7a4030083967c56509802392efc8a2542bcca84b6dd17a77467251fbdd8bb120e356f69cc9d43015306f30e1a1dde3107e47dfac38ab3c3fc37fa5964797aec51948686be9ce34373debd4ab1ed1c8201042d70b48f6ec7e1a3d23f2b1e52443025eb0fc021c79d5173d377acd6cf88ecb05b7f00579313d33f5f496813eb9a388e0f3d77d87a8f6a8ad80d518751c6296d7a8e3d7feb483f6ee3f0a216a15ec92155c85c0d769a3d782d84566b6dba25802d26d264b1c584b722dd7f731e1260746108d35d463e38c06665120f5de58fbcc5c155a2a12c41ac7e6846d5bc559d1bb3a7743453fbeaf7f5381acfbcc8b667e6f64db603ed04b369199e9af688ed7bc00cc51f4a43c2936c65d73904e44815f32e112b84783c607579ed5f673cd01918a13c9a73b66e073e86edd7b0c8a34b9ce1465f9d6e673825f1c98f88d1c378101d41227ac43bd7ee03b5386ad6567d26a853dea92ff3aefd29b9a7d5f8561d58d98943c9edba89ed74c3b77dadd02f42fbd035524d80495d7a1434d910f67d655e5b7adb9378a1cf52afe173afbed6545431d003379b7bd97b8fb2fcac231c98246e344a65e4940615c052e76c6116dd39ff5b368e83daf39672aedb2a7a8f93b4080c70d58cf52446ab78435475456015af1386b2f7cb3e637384df2c5b2ada95df6ff952e029ac5dd7be020849f66f9fb7b56e3565e11c6ae8d183225382cf424adb4e7e7cc600d3cbb0cde87dbe7e00afad47863ca100056911519cd23bf431d0eaeab8b14eb430fdece1858ee1fe10fd67bd360a7f9bdb7ad0e50c759aebed17fb48823c28490df4cef76fdc257219376139c54df14245747c97f1bc4418fc7699026b6bd731c326c379f803dd6cb1e44647a4859a95ec0c9104dcf4bc0db8735082e4cef000e93a86d3ce849e60536a7351643fd00927a99a962edd572cd9a49e548ed3f738f87675bf43ecdcdf765074f184db361e90b215c677c4ca08a870fee1ba29513c69812c77089b0d4cb32cd7b276e63138bfdc7f3048597923dd6eded5072d929dc4d0f7a58d1dc43a6255f7febaff55f9fd8f534e00f9e900c104da88e66f3fdf82ec73c531f3862b2c726230e17518d4d2212e9a42249e21fbc96e97e85ccd743c4a2d4097aac78179f8a3135af60e5bf6586d8f7c680cf9f623076c8d74affe596090c23ea20cffd36f46f0a7e08ae1a28b8ca82042ba0b48b8317136456bc052d62aa49777cad8b12caa7358c323289f41286ede3329e85bef7960735d958cb0f1677222aa85be9bd759f5ee1c7b73250fbd6df6c7d0e3b83f4ba4d51b91960c68e3b570a8d2140bf5e202c86ad863dc4db8000a6f43bfd62e24a8dc0e048ecda31be8f1f1146b89eecf14782cee7d3d81b4df999806cf4e4290f6e8b342c96d166c773721d1478e486dc58dd10211c152105724d07e8489031d199b99f0f87359720ab0a9ad1a91896a7079f5d7e3f02567012cb72f820ee6257b6520837e78d2b8fdef06ec672c3831bfbd19c4464282255821aaae4a487256b6c5f56eddd628addb42a833bfc6cb500dd7bb5bcb50dee7e6a4296f4fee2e0d363e67379913b1cd2d7c2bf786e9b941e54a38f2e573b20b1704c1d705388fd5844f246232ca04835ecbf0cc4f1d9883c095314e2 +MD = fe025b0c675381dcc7183186ff26942637fbbcecf0ae3764a4d40ab6 + +Len = 68432 +Msg = 9762f9407b075b617a2203c57fc545bca6694c1497ea0d3d13d37dabccdc027c7ab1285b2bf596a4da8740c84404def4f78d9cedacca133fd62e78967b7d136c438cf3e4cf49e1f64bfa92cd47ca216dc281bc9988939df4bf5c3b66bcaac2c11b7cc1a50e0923a1f504619a2f1ff67130ce12e0d44d92a5f3e430e3366af7c52908fb64913f46ebff2c15f9a50b454669fb088a3800dc9a9d4ebed492c59abe96b807eafff2311d92fb16af5197f6359490045e5bb5621be3234c0377c394f589144eff012bcc7ed5f8cd87dacaf186da157025e6740c70edea44368e6dcbb22ba5386a3ff1ff58f1aba048e9ad1e816213b3a78043c2e0e42b0d367fca283da3f22ef5604cb2f10d9cf8b92546656e551235acd22c6cb4f06f0fcbf1e293dd1a8396660d44cd9352543ea4379faf94da985efc8436f235383cb2bc8cbef5dbb8e1d986ede23884e85ad8cfc6c0e23c1a2f965e3d693ca8e51d5ed3f965347fa493601da92ddc0cf63630027bafe8ae3c5e459ca5ce33581e977bd6e0df3a11072192f3e82e9f75a471ac07fe76a73269aed37c656cbd8c0c34718ee835edd90814d6cf53eb6a051c92b6a5f61d0910c9a5a8c7254cc38bd77ba8c3ba6e371fd0f3967b916e26068321b5a30baaf58f83cd2c448c742e9ea6f4893dfe92ff2a864639bd4bbfb9be04a611cae62752f8c0aec8bd43eee40da1287ac35baa2d435396275e29e40d76c4aa31e22f9b0a93a7cee2f8f2c2cf20f29ee41f79bda8b25f69c726d2e70875eeb57fb38d0f04a861b7e4bf40f6d61fbede301701d35abfd14a83dcefcf9405a84d6204a98a287f15f134d8d594e0513071c4749bf42ab2d2bec24a27a5986c1afc429e2b145e60ec023c0b5aa3d7ff6dde0afdee2900d2894fed362370fbf36e49884abab58e920e746222772ca271a0ad687ca379c4681f846a698b38a7e2c9bc9acefe76a05ea2cf10e3d33629efef6748b761ed5ebcbbe5a2ab0606838155dee1f2a15e7c0cd099ad1817c954c182931178d18cb71686fbfdc33ce177173a36c58048760be4c25ca187eaed0b2e82b92b859b5eb5bea84de47bd6d16beea04daf3e9dc5332d9d9f53f9f5ab367f1762fea6666b41fb4864bd997cde474caea905f64853dd318ceb2d35e00abdfd6815f2a5dabc44178ec6f1e6d511f37a8cd4306ef128f236b5c79605521388ed9e5a6f49a058a458a3fde92a8a7158c06356996f3f4d588540bbf62ff3cd7f9ae0b9dd5960474b07af910c2d42065c655bb5a7c0dac9f966564fb67c6c408b4b57bba49ec1921f6bd908c1b6a6d9e8b39b7bc12b6ba4bb201f0c3cb4657492472be72ce06c400ace4aec728f5ef1e5f04c2f51769ae688fdc279f19f85727dd783c5dde60959f3762ac4867e11573965955abe6a0e984743671f3d047541354387de207a3fe6c1aca019654c6711ce5a9f8370cf70c2e03b388489addde9a1d361b95b62b6ed5eb8d47277c10a298a179132cf6d676a3a2d5a323b606373a8cf36dff8671779b1e2ef5723a49fa657e394f0430b9c9a3f61f8b1bde6b2e6347e31d65d510a8fa2721950d4bfd1911c08d0433473b659d61e38877507704a2c297728f4e8363919af79e6efd845f1c1cc6cb60a6b5eb0e7ae423ecd8a46a77718335c23f4447efee338a0ddb8a6ce2d7891ce2dbc3ca55b573f5e2b39db06ff938bfb543cdb6739547d0706279a314a536615052ef7431862576df9dad86eabe2a78cee89a4fab34a71a1d2ecc921ffa71412fb88388f0717b1f59e36e4e8634cb09759a34741520f3cf9aad1dda634bac24d7594a69310bd767d8215a87b0f1acea5fc526b44ffea0594f49c7bc8d1d6994fdc18ea561c9dcd8e0d3fcb2f9895283d415eb80aa322f4fc19164d90bf41c19f99ddabe01100dfafa77bf60ce402e7e78f8ed89b240033b88207fb05e44361c512ab923ad92cd468b892d11bdcac322b4fab70ff6ccce75096372d2f2926a14ab149476b5a6ad341a84d036368da3292e77d2b3e61ce3b4cbc6d8a177630aab5dd81717b7e0104c3df7235ec71d30fa3c0ccae61ed4d55355e73bac4b4aba48efd19b8732b3b9075c6c90ebfdde0f0e74260a470f7935d93e30f663ec9ddb75e7bdac65a4b5e9fdfc31c37e39649fde4d501b37166e67cecb30a368e9f0f09abbe8c4038c5b3588a3f31576082566024e276836e248fd9ca362bd1bb1d88c5002ef7d1158182e4fda3d1173f8b4f3e2fcf88bd6e18d59eb4d43ce0cd2a9211e233e21ffa67136bc055c41f87987bc28b06ff097a2a02f033f5030acdb07315db3517d2ee5fad145cbfd21640902311c2eda30e99425df9ce014af8c29674fb729c5c93fa5199075847c3a5735d8f565cee3b75d3482de10d60d751b4c4dde830d07a0a2525206d3c575e7327e607b7df7091e53024bbd0787a72beac21f6069b3939de77c3886e91566c296413d35cd5db6b07b9bf4fed98b7e5e7b097067d3d4060b7f8131931deacb56e32cc3a6ec596928375ff3060f480f773cb0d57759e4bb93fb1fe1ddfabc001eb9af98515380bce006dcda852143b6f0b026c2f1544c40a1ba96ada9f81fc1847a382fd78b5a1e626a712fdeb815216565f9ad785b9111cf6e841999ae6c7c22b564fe7c0c4c0a49f2db47852c22bb4fde98097ee859cb7767769a2f76589c63fb9498e14edd0ce10079d61b05f3011a7a806b6782ecba2435dcc3ddf83abed2ad756399db9392d243bb3002ce1c7f4fda5157e4a3e08a706a250b27aca93ff95b55f2f83af648981d3e09cefcf5a26a6e793358d3dba8c674fdf48efc1aac4275d4db9ed58b7aacfd60a7f20b150704b766a2468b1481a0d6b604967f0580389d6061f033a9b57b74d1befe8101198945b809304241c19a1febafb09e00686622874a9efdf795ae03ffa356f720566289dbfca881d9d51ca11d7a7fe181a135b5c7e9fd6cfb779f4b48f99dc6294a4b0440d101d25338a31aa9e946d20fe731c780b48e390bf7d98b5c26257652618d35954afebc3468b7ed4f70c7f81186e4c8705ed3bacf72d76487bda0a05238b3ae37bed197f3e1d5894ca555cc2d2cb938e53d609abc9533678a2471bc9f3c68dea6a13d0e1840867f4ffb82b6b93549b97dd4b73139cb5804a1ff2b239fe8e7377096837727e1454fb7f7d1505c2cf09a98b94a16ed71dfac8da23f8deacae9490403677b99508c7b130ec4117c90588cd45f8bc43e4514ff9bc22143f66ec9940f7c3b73e31ae671ffb4dd7290fbebe0af3c0ec1b2a1925e5ab362fe592122a8c1659208abbccdd4cc8e701c3fcc153687d35587d113f259590a871569ae6ee7e853eda24992bd0418003e56ef8d8f0efcb9c29f10189f61054c0011ce4318e1d2cba0c943593e90409e9abb16bc93da8c54086ff62c1405eddc608bfdabab171f317de63f6ccd09f4de17c15bd5de19a546898309cadad881502adc5e24b0083c39b7918439d2c1933338021565c85cd5e5b870b1716e395e3bc19b866aa235a8290053b86cfa67ba226de5d9f8ed04acc627a193cc38a8d2e3b731fcda0c1fe1a3ca955262ae5cc8403bf51febb6b1887c599e0717e4b79e0c8e4837ff5827871e88eed8b769214c0124a86dcaafd3f76cc0dea1f0dce60e0ab946be47110cf71dbdc8b1d7b545c3e9ba883a2242fc880bffebfaf39ba4a162caa5f64dc100b015fbab74401d4abe6e600d0b6f1a9ba8fe593e587cab73f6a934fe767fd2d3508ba50fa68cfb909a03b7bf682d9121d8a87f5e611886f48c427aa8c559d0d547035c7dbf1aeac7e54e1417c6ca412fa58ed4c4ab43b876c0c31e4d596845870201847e347665513ea2179eade195358e35fbf97d7aaaab42af9244b927ab79200abf798d2bf5bcf4a434bc93f017a3f12257657e49e7e2606c79374b147d1c0f8360084fa8167bb5c8fe09ff72432b7cd869a1142dfabcd89e359db5cb25004f0008a2f287320dd094c60f76e4a21c9fccb534e5935daae99949d05f985d966d052bc20c25e2f3f37c4f3560b3bef7c883dc8959168b3d31f24877cf28617ed8074bedf320a3be9cf3dbf4638be45d95721226e523fdd4304d940c7ad7eafa1e8aeb9f4de3fede1ba00ef4e5d9dcbe652c28861048301062efcf06e94344c8af148d5e830c5ed31de55a9f7e09e28ad616723f70ffcc62587d4bef90d7294b1818939418e63e2e1258315c72a8a04366d571bb7db72d5a7f6abd3f182fe2f1d81ba0e8a62e374f776d45d48a32809875cdb972ad0add59462c757de5aa1c6d6da237b48130b4c7db88ea602b342ddaa183bbfd657746ff4b5717146fd2301e5720ca90509a4127ad5fa1b7cc39e28a787bfbc45d6914bd0d6f149b3d34c875133bdbf48ac756ef7b460e13e3906938493afb6ffb7ca102fad8f08ac44e40122047de69a644806fb3d0823d07f3fc54b2352d48a60e8661a2293d6bab8b21661cc96468299e3858e583907bbfb1467041ef13f703bb3f7981d44da63977f6f15754e0688b30f91b8ed3db586174c21b56ed41f39aef268b186ec3d324913b346e6ee4f341a94d282e45a56b93aae9a68fa439b6b236f646d45d126ac36368bfc07bd480f363af2f325d912dccb047b24aa86db9001f091d5423bbe5bc6b09f40c0051aa070c996149902107834146bf266e4082fb03e97f066742dc662489619f90cec6f2e0868eb261c7914dca713d916a74ad198211fc797c39a7570c819909a1ce705d9c01083b57174392b841be1a215c8fd2160d160be6f2df15af6cfac8b7b32e9dab936e12f472a6e89752a12f277ab3bb3c554c5c4c110c1869a6175b471f7a397bb810f7ae7c33b5e40e875ef141a13b61651fe8f01686d5e7e76f3fe485bbc7a8e99148099662812aeff117f363e0e921c6f110977607e4869b72f4f4688bbeaf927f827a43bbe0d8714ee8b233fb3af9f5708196a1d7bae22cb3091b5a6284fc6d3c359526b84b893d215fc24448b7567b0eaa624caecf7725cfeaadbdc8c10bb447efde91e037999de8db881751d4d3b23c09aeb8d598b210fa28401536e97a12331fbb27bc1b963e35ea982fbf19de45891dc088e4bd2f78e23056e33564b3f17e23bf5ab48e1b78791b66ffe8fce2bf66554c3f64a34bc8189176ca3cc945fc99ba4fad620575e722dc68fa58049d6a645ea63eddc19378fdda141cb59dac7e063200822cf85204d3ac32b194b75ad0f3786329a8be93161268a36d484854005439768badfd1c4c0c1948b8278b97ada46107626de0c729f6cbc93e6d6fd92e041ef63c4d8a51472c821f7078f7f03ae777078b95deac2f0b71ea028d6ab851868113f694068d60c5a52b7d0192e1134d48e807991ebe9fc1098a5c30cf5e156bde544d0a182d3357c0f12069e2d6c136452d5910178ae6c7e12e9df00446d414a53bc22825bd396384052d1a4e6dcf42fa5c12736f7dae80a74b5a23b01f2821644ed866c5b9ed795cdbd58b5c0297f3e6d8a64b6d23517bba65137449238c0299e2025e6eafb9f9c9e9cc458231a5b9894796f0b6f87a2999105c4a36107a48c4b9e267870b396539b363c167779314500d671bc389830ac1b1972e1d427d64631acb2aa558e65c4add5e975250ca84e9be9915293306afd2dd46885555ffd5f3a95f1050154b4f7babff3ff939c69ba4bf9f854ea16f893b07fcf174b79c1e04d9f0a10dccd2af2ab3d813c2af01b91fa50cd4aa41381768a62ce1f1e3bccd0511426534fc170bf6997bbb352d267dc8f3439bd29efadafa5c58e26356ec337303a6c57c0f72e66db15caec7408f5a2f2ee6434e1722645e7f036b3fada511dd15a05a398380bede8ffd66ff65b6ceb0bc67537346391403a2aef4fd4461c8b1cbb18c0404caf5e7a9c06c5429375bfc203944e8a8c99a985bde1812b7bcc88f9a7ce341efbc3c078358375be78b727ffefeb024bb3e487b0ef33d168420a1d50644f899c0def1cc9127507d4d1db2aaad09fdadfa11ae2a2090ec7f1617e51093bc2462149da79577b0303eb6888d1abefdb5fae1ee4c2455299ec2fa0cf2c0c744ff414782ddf09b855f26a036723ea94c51721f2ea308014fdc78ac9a5b64157201adf628f57c710945cbb6b1f284f07858c9ee4d3333b9561e16ba2aaf8912c5a40e9cfa9e779cde8c7456859e8c38f44468ebd47d45e1feec038f584f9e23a28ef9a87239a073578bd70c2bd6c2c752acc5a45f01ad2f8cbee5b88dbc11ecab0ad5a51a4755a916dc5a440f2bb74025ea56844730d7d6822f33a2358592b241a0591f7d4825828ee6849aba1dd817b095c22827bb548b918553f90a2c8f3908f7ca73f5cc8ea44242cc7cb71db3d2b5276efc6ae1b1b31d79ed09662165c56379c04f2e44ff92b379c87680bbc8e59627d36dab446df1a875557fc404c50bd39ec11d813206b264e3def4a16885e4c60f96184363e7aba4f033b8be371b60ebdf434b892422a7d919968383b47944d7570d78ddc0cd65a582fe40bf48d7592ed3dd65b08bd1c7829375bfc220218a4c96c00bd4db7da41ca61ba441aa9778eef4e608a1e9a2b5f3e9f2e5c72c1d299837444db32476db9cc2225fdfecba34debaf380b7ce03e79f75a4b21d48aaa74cc110bb132c5790886f88d0048fee1160ae9c8a6c9973c0f7def1813ef67887ccbc9bd05f638e577216e5a139f47193073837725aec70f69f8e6fff96c5f54faa927c2a025a8994ec509f4ffabb033e45005ac4ed2799ecf8fc8669cf27af6368db0824a681d7cd59953c38b1540187ac6f8d1ebdeb5d1896a1bb7c52ac15678a0ee66ca67a07854c6d3308185ffae3affe34dc2798190deb26a593abb3b5c080968d4eac93874127311a1a7a2f6de6b234e889c4ce7c3188f3ab4c44ff1f12df1a6357037ee5958c9967fc7152c915759c1ea40feee527d2815302a8be9fb318031f22558c90d6ef0e933a785a9ad44cac5db78389e2556a6823536192d635add9071d1d5d1799c0f9223109b761b7b9ee1c30aa20025ea300a2baea1c512f1314b1c3c550e852a4f1ab9c9ff9ac444fc9e0abfe31b3883ef337a5bcab7ef3da3eb5a2d81891a5fd7085c9c581d8fe60c83185fa4f847670b888a053d0de1885cf7926e01491e84d0e4734f4f0863abf81855b28c9d3bdfab8ec473a2cfd21884f72ec57c567be1613768ab8b622ad9e5e52a7f4414fa33f7cf8e6fa003a937427395fb9ab917beb387a278b533cbb9fd73fd9073656eab18d251bfdfb34e2bbef42fd80479dc63ed5f897e74842e93684937abc2967d8f361f762c08e6a83c21016423629eb01738448584715c3baf4eef4199d9b11126783f637ec3a5a1b493239ca65b317d24bcc0fe5453c3da54d6ee81225fbd11b907b9827db7f720d93be13f2798382ad0a05a5cb4c3c1f3cc28cd610dfdc365900b153af18de40ef542c3b56fc1be9f640d9b076d695f6e5d6d1448245acaf5f3abdcf2a1ec74514ecf5166467dc8c4272a096847eca43350cd4c9e2d1fdaa92a0f9514567db0d22c0b14bb7374608163202ee509f5992aed6ffccaf1f3fb697c60c807d8e89f79d91e931ac04f8dbe5e1692e77d2b443c7b7cac36387f361d33c6fd33efd4492f9c2f56ecf3b658636235bbd76937af4f441be449ca6a92ad9568bd0063e9b7dabc66e69ad550c758b5a4331b96c0e24c8e752d6b6e5d1801eb6f8fd6fbd0f06382ecca8a2ec6e5859f8c821dcc6fe31ca2b20e04ee00cf017c02fc1d8031fcb336e98a26c6bfb7d26a152e43d2ecbca5c8f9107c10fabf96924a8b3dbbb3e4b12084afd564e447285c66c1f772de75d14772b93c9df4f0a6736fc49e71ffaf4487e6c0fed2dd9c6dbfa8c3a072ed1487694694aa5c956b1a68982fa86dbd6556b537450bd651be8bd902baa59bc2a3af749d262f178637dbb9ed55c476940fcef09ec76339e9b668f39d3070b5052930b19ef934946e5cd0ae97bd58532cb4938143cd6ec24c8bee54a1ac68885eaff46872941f9cf6e3e08fbeefcecd2e5c8fb04fdf943b2245034635b7f5db733ce2e1407f59f7c6d3f5a389748cac420fa9c4ea853d6a15ed910f81d87f78efd8e26331434b6d8534f63321d3fcb80fd6c9073b48d119cb897ff8ae976e25788bdc376d675cc6db0eca87ae9484b83eb8d7bf6bafb80eec24b549e47c2babb65eb8a61b73f3c9726a5be757408e7676bebc35a1435a1221c31b4a4a101cd253585ef664ef7a40ef4f909b445e81b860ef5eb1068a20ec1270994309daaa61f482b76f6f6458f1fdc651ea9e76c547a453a67ac20e70666632177b48623d2243e2a95b655af5a442d6861e8d10c2ebe9f27cdafc57b346c5127d3b30313edbe8831d006d57b9236687177d38b5e06bd7d5c917ddeb5255d916b3cbe9ce13558b6afca8b0e50c3512e1ed50c8ec87911703737a8c54b35b4748a1739ac12658d3a12c99558b56a1eeedeede643e1f235184644b311a4020bab0307b6c93deac682f971b85d2ff30a1b20371353210ea2c6182d2f6c3606bd855462a86cba218f31c237868406faad438154f6350c2ae51a1b75701d97a05493fccc910f1dc651c70baf6255f0ed72e880ac115209d37684cea217ae4f8b7b676aba0348ef35b8a3443dfe5b7457e58a9cc0f732b0a4c186b03798a6a4147c703c9f718294fc2e670a679cfce7a69f9a34181a6f86fb70904e9a759f5bd7d23ed1016e44a5862d72acb0d0c2e165eba7f535fd60f353ee42286f30e0cd423733c6744c1797603066c9ae2c35f82264344e9f02af9c5aa51cac1a4d138eeff5ef8b5cbd73f116c1a3dfb421de725893bfaea7dcb3d85c2f7068204ccff73db8d2ae4f14d239166bca6d6734250664e4aaa404ee163df507fddb15924eccb7da7dadbff4bae5eb994ad13be5922af3f195bd2ab93f43a1a905837ec04845ead550e823cfb66e02d495d9a6b8ae36722501588dc0977feead37dfa05925195353fd0c1f283d57f8984bb53c2ff1df5c097e04a286c749286f056e3ecf6dad6dc0c2780670b83a497ecd1260bdd57c3e194c500d9e47360b68eebdae859a78a69651ca7e5bcf7b51d2aa6fc8d4f1a384cf2cb923598fdcf445542c842e3411aa5f1b51eb2bdb91ce4e542bb917bedbccb57fbe885b19947f6ef659343bb2fec5859fccd1637513fb4c6ae4d5f8958b7246c5beb1056d03096015c25300af96a4944f99d5b5248885575f1983fa2e39120d8f68120b029f3ea362d6454f728fb425bb374c735245e8e99138679ee17b38743d193fbe72cf6bb33e23af6ab43060946323ca409702828da1dfe54947b832157f60aea2261a2d0a3838e5d4dd2f568ac7edb38f5b150ece216e719bc986ab6b96ccc3589515ff32c1647d2065d2f2435a03bcc22713d9f56062b1190f4d10d143bc324458396ea76a54f9dfe6d1c088a9f42a7b837570ce1f5b18135191eef0e6cd5ff7e7fad7e2a378d065c8924db5383da13de8c06fa29ec61b4d68fbb244f05ec0d5bce0e77f0d5e955493aaf643754ea56bcf7b230d6f223f199dc0e748011ef9705f71f9d6f864bd1ec07256cdf1b59b97b00c3779110df7fa68a81a74995c6e5a4824ab850529bc36e78eebbf3e01184432fa197024d7da726217a84519b593f5ff8f68f3a41c173f61572191aa9f9ff3b0db458d0b1e5b1412763d4412a90ed5ee08aebd65ca629ad671a4efc80f9728c216582a34400e51e26a35fc04b5336cac27094ccaa302dbaf54c21426cf9245df31adc250fb48ae6a5a2ed77058a64cb260f52c33348c64647715c9476e15ed70c3c2ffc19eaeac02dc8460e601dbd8895cfed6400d73e79e6f2c599a4996822f33443d06a8b4bd5457d312c64f48a2a97182c5618c3db7a593525fa000a8a653069e04a0b7df64d752978791af712d8b252d84184f6e67228a4435f921a0cc94c42ce1103aa334f4534e19f890f9fbb70e5b9cf4a56a688dca6e96e61b23575ce29d4ce5af84a033e063543b92277fb583a97a674cd65e5fca2ddd275bb4e913e85bc2919518292e7073b10b319e3bff2b73a6e094269b01002e831d61b9f4725bd4cc9479c2424c8a0bdab7edd2b2fc7c56ad0129cfc12a12dd2348dbc70bd0a3b4d57ecc178e06a3781bf225597745ecdee7396c56433368b6382a084091b7566867a11a7c6ef543651f2a8686fb63f358f019da4e93a578463c41a5db18aeea6c1dbbc3856790e03f3ec1700fa1cf366151f3021d5508c8099a1002eb232fe63c422f85b6fa521082f56770481cf01c9487755246e9c5ee7cec25cdf523a2c0558f6caf85b9b14abcfd8d15b4cf7f1c5efb11695fe475421cace3557daca01f445ff3cf860846f5699192cefa3ba4cc1d4757b5ccb78f796556e9480920c049953e65541c788bb7057c290a7ce439927bd698b621e58cdaf374a8041c126bd5a4a531dbcd8ce7f61cf7a056b14b8605e73384e8d3e0f60d237090182b040b4a0f1ed9d51da7f4390caea9423bf422acebe88ccc675c438681f531f2ba88372d4115ddce917c290670fba44b715087ddf65020ef6099fdbdab5d2e325ef167e5c724ae26ad5c0ec4d68911e105f33e4f9324d1b0343c9d38ec22b5456cd2260a2dc5db8be5da0e2aa9b172814e4eae484eb11fbd76b6aa8ee0d097ba78ccfa10c173e65cbf78bf7e771f56cacee5607e859f8b758c9a9e06160125e007344c804ea94f17beaa9b56ab2d3f2c1c39ed48d44a85670a4af054e81ee074ac9aa5df11f0865b48021a39c2658c039acecd3dc74c9e00646a49e1f39467e6bd728e83b7c41c860ff1c49e5942de0fef1658d3bb0045e01f5af343b50c2c94de5e7f249cae82266b0c130aec6fa5af6da338913c101d74bfaf84e0a8e09f2d63a0f0285d0a47caedb39df5d8266340baf7e4fcd706753cb9da874f4bbc401f020c7a156581edd20c8abde5c91197824b76d68cf83deda6925e72f619e9afc82dd37562428fd4da4be40b611bbbc2e283b295b83c210750ddcdc05b90034ed74ba88a9580aead4220720eee6c7f75c0183dab050f7a22b9f08b08064a939dbaeffe22258c38d7b82e9720e417f710c96d7a6f09de83f0507f28a28ca6152cf17f46c4a8d1e8d49acad5f9f8ca9d345cf7fb8a2d45e8d092de2938454f027d099e14fa85fe29347889a0e282e0ec41094c2364e5c213441fa1ff31c681d5fe61b0db2c537d6467bfffaa7318f76ed74cdea497d9df9ddb554f3d17870b1a31986c1be277bc44feff713544217a9f579623d18b5ffae306c25a45521d2759a72c0459b58957255ab592f3be42e6e86273b04cc81ea07d46e537ba99ef82eedf8b2e170e0eba801b50e94849e3c8e458741868c66c6ce72c3c7c0f27748a743b444dd6545e730fb17fd8a58f9a9d2dca05a0d81eefbc9b1746abb5b352ca745ac5f80a411efd1ead90d5bdf7cddfff37a6fdfd2a0f1c13a8723b4095f0bf59beae91352cb6d527601284d40af41e0311e6945a804107db407d9f2277d4c5aec76ccde9afcc87c489935aaa41a3b3c3f932e872ba3c1c7c8f976bedb17599ee056ee29a22b681708a81bb8324634dac4e1a8ed82046a651e67e1604db699892094393c92e0b5eb5e37c4c013ba95836911bdbfd6b075205d580220a7e174e25438935e93a417bff04d17096efec4ffd62a57444e2d48c02dd5c1450e2152732448e6d9cdfdf65c69f2fcdd6c9b2b16b2345dc513054d0d38e50619acfd9b0236ce19f36776ba8b6f2e5b8235183090a638b78a4cbfeacf2390b9e2a9fdb75835d114f58994cb12aa0a1c41f0fd3d34593c4ddb22e489cd99dec2e92da90f3dc75abf275de191b9c48d2862c5d3b9cb744b0700bdfb91d040d809765f8a0979947002d008e4754a62c0652ddd200c1d9e6acd40448c6aa0c08577d167270ed3451bc539b525dd8b2fa9bcea606f9df280a387e5e0207b05c2eef2416e0887148263f0ab8a2d3246d05215e07645d612c1fd1d35b83e2ec7ee19630f9cb6da04f2516b6caf83dd41f0c35958452c1e450a817779f56eeaadeb10b38418b8716b3eec1ec44daf +MD = f967d4a39b4bf2a75183e158782c15dbbd49700860e214c116e0bae7 + +Len = 69592 +Msg = 2b00e7b0c66361926fb8b1f87e098565ba0d8968c3fce616ada108b7eeb1a5c07a5bfb022c20592068e5e046ff478b18522e6de9bba53a2e28e9093209bf580b6d0b51cc679f4cfcb7519447a6506e7432b857976b638e881d03d293af6d6d714b3871774087420ea42354633dcd3660a2d2d0da9ddfe90cd417ec44a863ebdc5e09e46c7c81433e7684a9028a65ecc3e9a45f1a17c153a2944eddabbc48da33eca73112e6345874779b1a8c57c1978750578cbfa2b0d432a7cf2f32b3c5435e3e3ae0d045498898ed912f696a883f931f13df31065475a453c3694054812d449ce97a106067dc92218d70028b63eccf9effe1d90b563de0e152143c6825a0cf4ddc863900375a4a5bb866bd84faa7231444191d795e35ce99a3b790b758a4e69b3c8cb3ed600ca9e33998031cf47777cb090f6617136357c2dfdaa309c34271cc3114e5ef8bfa9500398e3d1afa65b309774c1dae1ed161a52d06dd260d815929e2a739ce602bf7fbe0d1d147b378bf17b657a8062687d58bb6c1a6d6df6a84fa78cc165186a7b81c55e8296bc8b8833dedb871e7d48b9cbaa29666e0e103db871a0ce442a676beabc15bab4ee02de8c245f8de19d0e79c7b180a850dba564617f1ee0c6767a1f3f04bb3c1b7a4e0d4f0e59e5963c1a3bf1540a76b25136baef425faf488722e3e331c77d26fbbd8300df532498f50c5ecd243f481f09348f964ddb8056f6e2886bb5b2f453fcf1de5629f3d166324570bf849792d35e3f711b041b1a7e30494b5d1316484ed85b8da37094627a8e66003d079bfd8beaa80dc207a6c43abdc7cb2bdc69cf64187b0f6d45bd5e6253de9bea2fc4deb5191e944fbb0713f909de765c7416203057d0d2380be72baa4d2f923b6faabccb7403c308b0a49055af0deb637cb3b13ff0ed848845aa60beb4c981a539a62e5b85e818716b17bfbd17c688d548bb18ef8e3184c2856f842c454ce8bc204f99d1b93be33e5cd8f8bbcea8dd267aa4bddb9a4d519b4daf1c5f592a45e4c61f85baa89fd1b40850e1ce5e1556db84f926607f81796701017fd46ad217b37d9e8892be545276e017f15120ac9468fa30c92ad87e7aba41ef552814e4ecbcb93508e67529f3fb96a6ae00c0df04634ce43c971fa4c40972c102d6c1c313452b8b8d22676114b67e857e49b91d353eef7bf741df94f3d9263f2f4d1c0d59f126fa8bd2ff9a633c1a2cf89863e7856074606f9772bf78addea221176e13ff554e1a9b74c8463df0fc1593797bde938c5e4a2c248394c10c0ea28ea2328791c6035422843bf5238996c7e5694b62edf71f91b3557ca56b5838b8de9a23c8afe7e94fc78dd517a24a6ccc54e46d04d3552acf7bc6e871e626df4d874bac77a82f6265e0fe2e3e38c8009b68875b45021b226c0be5318ab00c74e91f5326e518f0f12f0551a1c96596d4ad96ae90a3e8ad78ffda3cf240575d9c040d3d3db180f13813ab34da59a71b6b7b75d6979205a0a0e37d2aa5335abeb736e7665b6d7e9489ac58f4225f7bea379d7cabfa9fd7893cbf5b5ac4f4288458fa246b0a69405f7861852c245b6277bb8c117b143ddccbaefbfb39dbd34f62f3b65ab7b54594b676cbb6595adde93889bfeae08efc93ec7a21d34444814dcf09f3e0d90682da3e275372e830477ec104b15f58b54c7b6010b98a06a96e921d1e4b5d4b58919f5aec9131754f28a195cf08e56041be21cb253b760d74fbbaf1a325268b35f2329148fd787cf211d02b4b1f23739eb1f5820a103da531c926d13b09e31519356275cf00ce6bd363b8f5fb6c802f46d8852931e0377a6a577430387209859cdb7d7ce13399be6dce9a8a728981efb4924f355f23f9f9791711934de600391b45021b221e61012b93135d22febf31626fb21ad443fbbf08889d7ecdee7dbc3f128ee4f419bac09751a1e29f247e90fac16c5e23c8c317734c66674af3c89b52c4724ee9ce1d792b9ac4bf49a3768ad847cc83d04ad6bf53a30ac1478e873300cb6add7593ff9772df0a47b4e40d8b756351006c12acf3145cf9213627103fb397c6f52a13e7a7e78ed120537eca1f6c94a87859e8cc7f5fbac00bb9461a0e05ca154a79c64c37042ac7bdc7cc22b3286c21401c159ba0704cedf52363fb1a51d2e431d713c3a143533c946474adf3235a59ec4521c1030093d15217294a013232a23fd494b4834f78ce28cbd0d23c07dfc0f147a5a3038b2028c706ee7d4f2179dde8f4b1b559630bfb0f6089260a206ce4e3a609d84e7a6242a8752c0b50aa08f5b1ba033ca0389d219cb5061ffa17923437e2e6c73058eabd9ad47a7ab22670982e96f1b0d43a9cf0755bc0366857e03d6270950655911a0802b75251e0413123b41e15c881e3abd61da75ffff16bc77ef7f1bd0c2acd80a074903c176764db36e6a1e7da25ce1a50fa3a3dd311cdc8676cc8c74f3c68af1554f19041b41bdf303ad4d06c2c4488ef8f86c26635e8539535784c45e6fd05d5485e175762d0adae252967f522017800620fb61ffa560976e682a496c6f5257eb33809ced01dd70f4a12271b936f684206576166cb915a8af46a68a858db7e602a02101e987ddbe1fe119645fce8ba02e0d06ce12624b74ff3b210f1292a8138215ea2dd385b3cb4c5ca3deacb281de1961d20f5968aa04448dc3617947cce551da03a711c4069f6458e66908a97e46c7a90364a992dc5f6885b3072471cc64583795f70d0c7f434d1e0d8cdb7a2adf212dc0526aa9868d516b1a8979db4f987f74c8a62d24c6bef1f63ed08dee2fb10f34326304765397e9871f70e24cfe8aafd8c33bdbd682183627a1bb86cd32c47a08801edfbee8841620eb43c68b8141ceacaf3e7ee85b5a06fb60d72edfde2148efd30b634cf05cc280a58a8d617fc5c538b3377d23fb8b48b8a0aceeebd8cf633253b3f9e71127d4ed76ce9e96a01f7dc4f8af424f07b3e4a78cc02cbbcbd6b119279d0756f3ee34b0869563f28d56dd98a62e34342adac110499e51155d3f1ceb7851f7623fb9ca11fc6a433dee72ccfce43abb990a09c93b02cbc6c236118bf26d582fd39d8e7e5700d2a63e6a7c3437da5d3f484f48e36fddd0f28aff54e5742f391971b47738ccbc57f4beaa7bfc92b11e2807a29df7f602363c34601014bae57c1b032d7be0b65580968556770c559105df9fab12ee169a850e8a004eff0cb8aa9f53afa25e5ef6d5f25b15784cc8a19bcad811aeae18cd43cf5288168eb1d04a0c27e3f59a0cc5df71088f87a4320a6752797c792044c2fae6559f6ea9f354e4ca48717b7c08ea257b536dabfcddf3f2df4c967c2ce1a231bd5bee6038186d01417e003ded998e30790557ed3c0f85c2da1704bebb399471bb2c1df323694228d9903841d308d986d1e6f4534c11e861a9a37147b392c141488fd32f522efce1fa48c391189ef2b1edbeede8142b4357b6b88320fe355129cc4db81daeafc2b40c6c4635a2a002393355e9b17ca4be2a681de250826a6bb1af2e75c41d33bd2a77c56c335b5930a40d7391b86dc68364269c37df297837625afab22d880414caa31bda952910a57ce2df8d04cdd7b78c5afb2ad6d9a9dec33379165ed868f01cf8363b63f60c88481a62849d8620852b6b03623c7c43885da3734a61f3a879a9dfdd35a3a99602911dc41f8c7ee913c8c17c8819f98f5cb613aff63ec30cd6f8beda705f2af63bde52cd05d89f7a89ebc42e437638d58358e9f6c1fb2fdb3092fef3959e61745ab72344de89cf1a101ddce13c5a215d25cb8f1053a21e5faefd08f14c69365888a4f7f354a8f812d0e4715c1bcd9c6e68956bc5553a7ade79c3439b3cc791e9ec2e37a00d3b01abf0cbeb6887d791517740e7dd6fcc2aa1b86b16bb0ec05a70afdc4914b14dd22a9857b2cd2881e84f7854691f485f16f0947eeb176a5c7935f8379617e9e353daf2122e53a7d289ae94575b5489fb261335832979f6a4d680f0c686715d076c022383c7c1acd35cb6f2d32444d9a84251c20237a75d9f5999be1182e9b4c005e95632e6e1de8a4ab1bb4f2cb7e16f52f364847f694555ebc78ca0f048961706d8b1a8f179e60139e51654db7549573e414290688957cf72547ffc3956ad1257175c6c52526b40129b2c699945b869ee8385ae5acd3a14d786c1acc6db9ebce0ee80066f34164dbe1b2416cef1d6ac4a015466bdff962c03a67a38fe9f141a8aa545ffb2e78f3224ad27e3e23f4c283b03d841fae51520ddfbd1294869b5363b83d2de82327df72b995d593df8c2e5a7d038c677485df74ccfef050e032917dcd1502b46de89a2bd26edff47e4dfec78b19d7e9def16b93a68fc57b73319c556d8e66f68b35a3dc19e005d69ca4c4494ee2fefd4a4e96f8e0f1fa4abc22d498fddbd304f7999cf1e47bdfc0973b1f5e5cf15a3852d7d20300c807651780caa712bfcf963f8ed61be6a4d6391a8b408519b782216537cd407a74854131c5ff0e309cc4f0cf8fffa884ed71a672f0084c29c7ff2f1de8b93fd289fc75878cd23ccbe55bcb24076a2643d84aaf5d03b711f18539d7c965466f9d6ac568952ff4c1693bec7bd99fb613a7d7c9aa1550ed750581bab21437f54e4fb98890c739c73a8d030f995cb3640f257e672d58420bf3ca400a247acb466a4dd8ae84aa34d9e6abdd2d8a29ece467513eabbf8271a30cd442a0c559a9aa322c4abfcaba9bad744a1cdee4dda6c7ca9f9b2fc7204a333ea7fc070b5d5d91346fa234c984f8a251ec648c3fc46b7e8775163bdaae464cf7b9eeb57ce251abef9c61960775b6691e0726cdd18ab5894c76228870a8e040c69e9d248085205ad216fb5c1b196f52172ee61c60ad1f688827527e0f9cc2cf29aa89ecbcb2341e7a73e21f6afc8e0dfbc824e0639803acb8ed28853df64848af72376687f617774747b8287d8b9ced3a7755b230c80cb64d5c17465251fb3db68a283a88cd44e5d6f6e03fd933068041911b2a7ed98535e3e8a13a031c562edd66cec125b446fa97f5ec9df4af7567afb9c781a439277beb0748c8b6c1e38c927cada2f527981608e95ffb564d43f3d365fd8027534e18e15c808ae3ef1de7645047585da3a2d8b8359cb084990cb56b0a2f8e9ed4739d654cfae921008fbfc1662e49e5c511b3045f3555e60f3a3cc53ad00561292269c55cea7be48293864842b50023e84f25abeabc64213c46fa706c719d24cdf51ea00101aba501d3db576a9e037ea9c5a0ed5c84639c9cdd6efb0396be403f462c73ddc300f8eacb1f7d322bdc7c661fd567294fccdebd481ad3b4c1d149f9a003cf47910446c9d3d3385df0e3a3c9a80397d551185dfa218e98e4557ea8899d34f0d30e4e150ba88707328fc16b2118ec0df54ade90eff42a9916f43ef27b9840a7049d16fa4c93bb68545afe5928ccdf17ed9f682e0b2a7f72c1106aae2c2bb75050c0175cf93fd0da37d4e2e43d4e5d6432b17d7be85f0da4772cba3227b1f97b5c09c7b39e0777eb519027a2db17f77169436710e3ec55bcadbb86350ad597866afc9094a785010a361f250b8ea43dae05a7cd639a6cd809d94f571d2201120011fb1a86a2231cc559d47384c49d80987c61090a885b153a9e5ab55129cee986f597cdf01a8c2b8b41528ba5194e70cf5201a27c2a319dcd416029876e998e796a5513777d0aadfa611be5f2f9417e910b0c421eec7ab22076e21c168ceb815604a58373463924614d830ae4e1111aac2bd340896bb122d2b3631584f15f62bb492bb67a02821f7e7b3a73017d37c57f29192632145f40526b759e69384f93079c39f4f24e900f905ea4b6bf0a101f6887207bbf72efab3e236c2f29be46a2c99262e78266cd65458c543e9424448916ba9bb97803dcb3e45fe9304d1fcf027fb039069107a4c10c78bb8327685f82f857ed57f233c10ae3956f5a49c96342a87a2edaa48db0a363986d1ccf22ab9d9bd387dfb4bf1700ba585105b6478dd3c254a6cc43857b7ce98fcb74120fb3596fb21dd945d26945e70d40bb0926b9466bd45353e46b6fbdecb36911967c2116e277f1ad1c2a123af848b0f2c8c3701af37d971a0dcbf8070ba7c88da2e45f8692a9b5f3be22bc604c8f24355bba4cb1f7b4f4873613beb8b4d16c40edf4d9090eabdd258258b25672450d0b6877a9bbe72efe13d3df3e7386c4b6c3ce1a281ea502d9bb3f48be7df80efddd45980189502006589d7ac1a7eff64a9ed9c0c747f4432e3d1b5f1b474c4159339977febab14ccfbdc99312c65eea9a2a878531158af15d23cd286362fd90b1a6cab40bb089199ccc0ea49c6f5216280f5dd3eff7c771f8f7bb1121217a51999f5fb8831b55fb000bc32bb903780d76a5c3397e7f386954316bc5df3351186385df122f5b96859be59da503132f4508966e22470c6c2c21595592e7f8f059c212af3d5ae1c92db2e1d48d052ee6314049a52ae43fc15ed2e81f24e5e306aa179e76b6804e7c7807992e5039a74b76c0481ebfc079d665db562ee86391d26de6b19c0a4a121ee8ec74019b0b2cbd6a0b1a116d865b29c5bd3beb59cb85f239b1c4a5a512ad2ef4e3fae4da141fbaaf8328539080542a12fb01faf5882ff4720b701a1374a02b2080a64e79cf00d19bbb0b2be558e555c21730c448440057cb462c7fd1da7ba1e044fea516a67080d3352b20b87a9f3b579450edce69977a9a04523d6cce9011d8937c9f1d34df46da6410b8a66fd25947e4dacdf48365fb62d8a9d940db9e097e0ea88319e4ada215da448a1b933f2e179b46eb570bec48aa056bd9fa6bf5e72528faf789508c110a0a4eeba4af26384b2a1dcc626daaf0f44d40c5f5fa28397254fc62d7e2cb124b769873cdfe37f66713d7f7a3432272c6029113d020a57eea15156ba2261b244e91a9b8f41ad4e6dfeafde3a616d34c93b80549f55a1e35f10bee686494dcd587fe0b01b38f9d882a020816c7434decf1eff5eee220c2ed3b8bdfff9ba980949c1e250478c6f268ea1b8f17a362e2e2451ceb6932ff64030e377287b3feb6ffdf749027d04b63f77479eb5ca6f042bb11c16e4f444052260d713e9749eee055d693c4f2569772b27dbfb55c6e65dde5ec7ff717b2be1db49dcbaca4ca048d5515fe4bda58359f384a4f65ad465e24d1499b0e48fab3373d53c94546b0da1e7c22068d6661a059e78ecb84b5eb23b82b9db52c5978ba3f3eb3dc80e3aada34196f5f122d0f62234eaf969b0cb960f8536d60c9dfd94d86272297f811f48f4edb726a7284cde59bec1152f1283d9065c74cf07f3288e7bc85446e03383a53cf30bfbb170409c5242e78635f7ee43c9115a116a4f8041332e78dd14aecf8d24597cbb388215f6b4cb4394a1ea749c00accfe35e396d74a99bc635427a69c85329f1b063e734b5285ebd899c707dab5333bd8c0b3a57f185172698931dbb1e736b51205b2603a155053dab4d13713968b00b5598d9a67e6eaa804c2f212b572925865447c7ec81e4c7ab44dd5ab80eea2aa1862e9fc2e40c5dbc9a3d0e233a1f6177945052561e7cadef9a73cdbaf27faa6767f41314ea0837c2cae56a0a90fd260c289e50a941c6bdf2f538f5dfadcf37453f13bd025a0a407a2451bf48216a7d2d5758494cb069019a9f5459900683d92358b225f5fbb981cdf0a69445b50f6cc26aa7c3a9340e81d0dfee8233c74398e9f8fad45694be01a1750f72681494feb3a9b24827945d447dfc2ef632b6b67d7f6813518beec0c9e0fcb2e01b05a038e85ca25f2e9afd52873f3d3ff39c858fcdf02424fed168df70cdb766c652db244acb9e91260c97b3d8f043e5e04058d7bbd755d615045e4d3b30478ccfc1efc9bf3ecf6477b3d2705657676e5f6cd55b3267d0ee3a51491b276d8adb9f1b812f30fc5c628a57578febbbd264dae6a72518e6baf4d47ed24f1ecba7da9e273c5f864e6e13c5c0cd1b7e66ac4eb877743d579d3e704b54a0f30793c61234afc560a77c2dfe91b5dd19f69e1cb561e7e5a9d5d481eb069b5c0ec90e1109ca79c73a7dcec0ab57ff2f933dac4a203dfea1737cd3aeed6f1bada94e81ae49c64fe8f6ef8b50a27d666a903ad85f17b48451a332e1ebfced9b3ccb7d37c55a92f7d09be4fd046c6db23719d56983222e409c3fe14760a2e8e5b07c3e777fc294392831466a05908dab3d35f6a9ddca13fb2b51704e3766c8bfb2c47988030b36df98c1fc1b7a96471925ec85de9696cb7da5e0c73b95d0f6f2eaac16b37abcdfafc751ee588c0702c396466a51d50fbe8eb3f5ce59a469d846ff3bfe400c5ef6735eec046963692572394c8d4ac3bb54f6fd976def8cb8d7829a7a1777e078e5f10497269526471aeeb605d7108824f67c2ace8c4475465c70626f4a9f1f9213f2625c3c25fe2648ffb47a2eed4bd20aeae2a213a18699cdd600248002f035e83d20422e611290176ddbb17c27344cfa06cf1cea4ee73b937d1ba19fe67ce7cc9ce551e4918b0cefffd4b4a7076d1a2c999743f993c1b4172d5cec9094eb3327d5599246fd9023387e478b98d51bc40a6ae22029b83c8ac0ad6a0f3c54649e61b1250c3ded4a5b5ab3db3c38d969d2fa4359b960047f47f5c7ef128a6e0fb2e2f8f1c8afa8e03fbd6339d16e5b7dcd66eaa31887c0b372204190fb612915f6137264cc86777b54ca59095121a27f3db52869458735ff94a8e4f7d4abce9ef25ae62722a8a24324e75cf2c53bf798a84fc5534646a88c34f578cca54fa5d12f201ee2d2ff715f367d339c34a3a2ef989c890825ae6481da6fc5b67435f6d734cee03ce2712bf812f5a7b0a641ebae94043c31eaa6b0070f7e925e4b4509d889caf5dd5ce81a3541b580d624fd19fa25efa5759b15d346598aa96c316725fbb77e256e474b843f4a2786b5b4bf76fed1c58d7d42e5166543fbd0872f83946845503797ac82b23db5b280f6616f48df23eebcf1e6fdc18d5239d0574b819c48bbaaf5ff9274ec580bbd384030f5d8c8a0d2fa7890451ce510ac71858f4986c3a2f3254f010b7ab8d2b2743c2b396edfd2d90fba47a56e9604bc7ab903c39a008193902e022ea38495f8fd925924524c406cc260130501c7b6d2b59aaed81f28e0f2fe459bc5b0e5d9f79be9c29ccb3872f1dc12fc4d1ba1af54e8d1986e5f624778373cd6b9e902281715e96f8a22cbf1d226770b65054c76acdc06c96ea0d73f8d02babbf0960409c0353b67d7a02c44756538473507ef934059e04ac12bae4f9928675153ff12055ac187b2698a84f34464fcb9a668b28f7a2707224d4810000472eca0ca6c55a34d8274592a2bfa87a5ea6c679e72bef1c10d2459fc3e25d936a5f1b03e24f46b0140ab6301cab78702be305b066b3b417cd4dff8b5571462978c1d8a957018e5dfc3d4d8d5aee27bc2a9ef9dc79c51081544df055fd9062390ee1935b998e99a4dd296c19020a4eb4d735133c74d26ccf325cd8be40d22a587928cb990e48e11b4379925196825600be40027f0c6e5187e3f508f2b3b916fe5411f1f049b30d27db8860c58ce8c6264c3a181294eb4711e5a111b1cab7a0913c37a6efc07f6660e1e057e359a0277c0dadf47592ebb613b3db7369fa406fc77e044ae5f6e0954d130bd849813ae2987ef5f836aaf246f3db1ebe99c705dcf7b6026e7171990242cb857256982b9ff21cbcc3c431714248c7e553bfb55a60a860ac7220b50b45f897c7a6a902f4a81f636cc7bccaeb506906c9c34a49c0a36ffa7d067235b9d8c4f46cf59f5628a386ef80747edbe2f9fb24269dc808cb0da50ffe8bc47817233e6dcfefd8163a0abf2d827a88e8daa7758ca633c756fc07ee0dab82b5f0b5cdcb606ae5b1a79b563e89fd1a697644d14ecca335b6c8b64aa1700e7bb53418210278e877da9eef1e6ba15af4af08b4000d40b80414e2ac2e75d391e740b6b0d56a13b336a17087bbece02699b824aacc37a55f3f7019202bc1a4c055f70d124378cd4572a4a107c728e2ea7a133e9b9e3447034846f0b4db2b602438368bbf03a50229ec62c4d1b8b61611065ecaf8eea9c23eaf07edfcb50992381e9dc7098e755edad45a4098190ae624cee96e65460e937bd441854a31e2c776697b53945c603fc2faf998ad509dffa044517d432cb9275578724b4fea4d5c59b97d95e1f60c319ca0cf51a407f5bf1e07059c151b501a25dc18a45036bfdd7c7f132274d3cfb0a26659fffea798a0f877942f7d8a59d897afa3250dbfa0d7393aba7dbf8e21598ecc17f81fa7fd41ba267bcbdf024cef1543b041cadd96b62a7cf1fc447db778bc4297dea9919a1dfd843ae5ac1b9fca1938be8f3a291816baa64842863ae8bab55a48180eed05921d214ff1772ec8f62e0f3c61be2a9b6584573bd5073e3b7c0483a738d222b64aa37e2993c2c45effce37a86dd94a971f01f03b284a003659144f33b575cb32a42b0b66311164d853743281081e0191cfae11c4b0c1295fce7f2d8c127c5ee14b0e59745dd598bb7dba8054c4fef821e3f32c6702ff021e48afaf0ee44856688be7d8d27ea1c87eeafbc1a228fe96cdf87bb0a0936622f84420344a8f8c3a3ef3221a0f17e88ca937c246e7b88f65dc79923effe69924846d7b5dad889a72bb2d578d98be2c5db0c0a8b093d833cdf3e3f137e3710a5f39110babc67405a88376f2b3fde5efa42c32197f452c8e679ac3f33be9c73c6b9ceb6b7f23b650442e8c8e1dad0394f881e89f036a09f1ab479622ab716da1b21639157823e40ccdf2ca743b34abded3487093fd7115000160d70a1718b8cccb3b9693f765618dbe96ad6f8d13530fcce656b2ce08c22c229d0313ff5e5d202f738061ad56d3759e80c1ba93d77dba3df20755e58f85f85752b6dad4a0af4e57648308ea86ae36d62793ffefdfa060bee20f07e473f4d748184eb9278e43a9cb752ae43f635653fe1190a9e1ba4f95c83cca333b64834b4d54474978859eb5042bc49e3c7b605f8ec5443329e5ffbbd268e5826abfb5e70f9d4d06481535128a0f0c91324d50ac00c92b4618f12555660cdd5ff314012ce769ac7a06bb9b24d5854f67d137abebec73b23d4f5a55050b8f2e3654dff97f6d20020f34e7357e6f25297c99f8d671ba8b75933d8ff32d3b7634a0009203611986da5073368881cf751769fcdf64efe346e1e25410a4306e389d2796c8b37474d491c8121828d17eeb959a5a79dbb90f5c9395236adcd12c7cc43787e29e2bf7bfb4e0c21a8adfe5ff10986346af5f9722e7463c2d0161fe89564a448e07ea2a9ed034e3ac231f9d2634ee87c46466033069500ea5b6754d04afea6d1995517608603ef74b96132d076ef748817f4edc1ba65d0b83708d90655d925223dad47272e1598d77385cee092b6d15fc748caa3b0ac7c334a41d7121cbdca41b2cf5a864d03f16cd9e5f88b1f69a7093c8a1c615232ab637d5a767d09723d38e20377054b93a13ad3c9d65885d1a08f60020e8407be0651b99addcd82bf250fb391c62d918e51494a7890cf2db662f819f8c593361a3504e44b358df16e2bcc0fc0708585bba8a2243b4f787de0954c51b36c16490cdf84e7b3a542bd45f679ddd99d9690e44f4c4b5a3bdcde16e294ef7c2995a75dacdaab1a56764e0d2f1d052474e61bcfed4fa51d7b82b922f1d7db9b2499b8d5460d17ca6fb00c8d7dc16ee91eff8c452bb41ccb38f274ca691dfd5887a9e43b5225120a19795f8f896c0270c3694c0eb18297ae99b579d7f26e3dfa774e93597b2b86217c58afd9fa26a80089aac4f226c1fd0cc7522e1036d383cb1e0f2df566265a58bfd5643579f748e39b4c5bb9327a382ee951fd3fda53b711a4741ad8be1e76f70b78e669aee8cb5f1fd7782a7eb42f5c283b4d2a89f7c1153105c2ca291cc24687ca9d3d400017bd3ed1850fb277cadeac97859ae9c6891feb4b8e924f26268c5c52f27bd84815451fc4e92e76cbf1fb9ced0f57a2c8f777fdcde4fada478a13b1984be91dc6ad3eeb370c4f70b98cfc20c652295d05f4648d132dc86f84d621af251151b884c8f2c9b3563c4b48832962a8b6d8c286662fc4a6d2c5b8e7f2ff7d80ad79508a4ca7e2bf2fbcad81beca871ea32b78523721c90d39b95d77c6f5453185298ede23a65de3ff963f6a2627baad81ec28714d80c5d0cc6c063c3a4a2cc1032b1a8a333763a72e93a80ea18821dfb8e179ec9294df78f2a55a3f37485cb78e469b9666a11c94247b90721834e43bb0d314caeca7408c122e0187a335fd9b8d41b908a22eaf31 +MD = c57d12e4ae6be729ad16d1b0388c9b7de9211674402068436cb187b1 + +Len = 70752 +Msg = 38e0a028688f12941bcf84e188cb0c1f90b1a8a04dfc7859edf92a8ac184b5a291134a5d33f7872f5bdeefe5b59b978a312a21879feeee0f7b3e90ba0a207e70a6540c8955959a32a11b0b13a464792f6334260b5ddbb61263b69c38a9f8d3de1eaacef5f9f1b1679490c1b27ead19d6ccd8a072af49372a4c69374bc7951ab2a11e78ea45943694dd44fa0c6affe149141d7505bec2d91ede60473d8c7dbdb5d9b7f2ae61058f82243f9c6791e1384fe40c8e0cb2cd04b8c2a2b5541f3a22af6b7d248976cc26f9108a900c1bdb86afe4abd3cfb3f320bea0376ad9a954b3680278f7c5ac7261c1492cbf432f753432bb042c95e7ba95f91f284d135151d6a744b151a92a7eaaa1782d1054f538a8a0111f82a879adcc31e87c454c40bbf536d92f1c7c1978686245966a8696ab4bc19002bb4e8f512b2ea33b3cca9d1977db6afa3e87a0e802cc576eb7223a57855cdeb7c1d052301bb7f76e19d791f4c45f9f1ba112e857e2a757bdde7008c2bf3ba3467a76e9d105968c1cc4b944d344891f992b64194d6fbbec8bc7b829765f2488b5d0877cbc4f910b4d24b8dd3e5f23937cc6c75a5011d0bfe15a42c5fbcfe0340eaa4d357a63711c09231e85bd7df3a2cd5981d3ea30ad77c67f5503d775375159ef0e3a92a7fd6659a83163d906c3f593cbdbada2341bbd431e3b0b94bbf0849c8913b38c85ff92449c3ba019625933d6061d100086e2395f1f3a06b908d577e15fa4c9f1643d47d3e5826306f97d059ef18f238d8cca92226a9b1ccfc3acd22f5908a347ab812e0d6c4fd52633f913f474790fd0af9b7194e7a6745d563e3c8f5f896b19c491effa19e91d04799404df7722fb52571c7dbe7fa237eb28535e07596d46ec163531a2d59a652531158168e2d31099ed165fa718d98c02a1b3e0a22ffd5e4a09379c0e86a8d213c54531969dd4762fd751be579b919c2929256965ca81dbba055ed945155c8e559becbd71916d549c7f9543d7f1138ee82872a15a1041e5c57271904f6bfec1731dd2cc01a4e6d2664baa962e00a78bc706623288ea84a2f1b83968356ed692f5b1be074fbf861a17a5575e64b294bb4f2bbdc1f740943dc93f7e0afe082b2a64c1791562cb965136f4654382ee244507004bf9b0fbb7dcd270071eb22047b148b4cca042ae5ea24ca09def8f9b9d5277ebd47fba0136a896b19e4b5a9e704e27f27c4df8522633e011c40793a3480928551ffe1d3c59c89c6b0939fc69ef298be354c68b9d362c7aaea53697ed6d93a1a7f51ce29367646c071191a36b0c6bfbef1bb30379d5b6a3e10722a16154176a471e8110edaaa68feb7efb548b0e3c007e98bb69cd4df9e112b173bce744be0c9f62d6af3468b48c81181e19b13fc321f89487c481e41cbfa76cd2ed6787b00e1589c3c84feab6eb30a7a3f9c5e529e6c5d7bf1c7ce347c20900e73ec96314f8135aef612678d5355ff231fdb04995d74d290a79a892a474a03559b6f5211253009e0385a15938f178c2712b58b3307df85210e4ec38585cd4d3d05dd408d4a6441da639a8d709a7e2df0b8da66a225f2f197a64301e8e020ea1f63c4c627f79479f818723386ddf0511a62b82b892055848f0025c8d6cefb468705a46753e5570ec3c76fac58e224920ea0bd5e3a8f8dda519c559cb1aaa30f0e9c0ab8b37c029cb7e0e15c694f716d3813785348ebf24f99eb50d20c1bbe801077461ea9244da06ef585c83a7e7d4f310b77cf369e2970b26da61d689ab4663728052da7869e963385bb843ed79eb484291a06864ea9ca55a3d3d349901b0ddd3eb64a511b6bfab01200f509135c39abccfdbdba45e9d8de2e58a811a459039d2be819284b3c4a5f1ad4bf0b9a3c4b12979149354c6018c65da2e0633004d3d160090e8fae8601bb10c526c8e4c57552f9533d99aab306a8c25130b0db94fb248b979f09adefcd3e9450e0c37b7e24d762d1ff59e9392effecd1fd7cff8fe5f0ff224f28d1cfe97405e6517dc6ccf62a748c22f89098fe363da3cb4a245c20e14b27935fa2ad02d5e6141d7a7f4845c6aef03ce83928f0d655551e8ae290385ff0160030a91d85dec558992bed66b036629ca1cb3b8fa36aa4546bc1a2b298d77e7c1a2e4d880f192432591499aea1e44feff5f42023826dab203780fd49cee246d845bb2872faff732fc1c71c96b77ab768be058f8b1a59ea46f64b4aac470af9a917699274c61c42af87a5dea55d4449a54e71b23cd7b9e2474c832370adbc077d03bc33f41cda03400f5378510feb77143bcb60af56f8139f9ebb003d4f6fe0a29f2585775bc3456fdd3242204bdab0340a64f368f4befece71657948b8a125d85e27ff750f5289ad55d4e4a99d8c95934ee0f2d05d5924424914f74985fa378ca5461a83a42230871dbdd843719b87a05dd1d79bdd60f4999a4bf2b613d5a61e29026f19b69cda7b995f9594646206e9db9a2a1211511032e97cf3f50ecdf22b3def55bdb33cf7f95d2c8502e28ab3ee2cac52e975c3e7bccb1a93acc33d9c32786f66d6268d198eedc75f15787fff1be5aafa789713eb8593b72a43cdcf14a25cf53af99d07afbaaf926c4292bc48f18af87945e1dbac2be7d55030aadcec1940331a9e63273afb37204520ddba321d712767e7e285aa2e4bf78e19d6f192f5e68bbe4b25863bcef8f3622696143aee5cba4ec515ac55fb24903c55de9799d6a4616e76608f32b4897e4bca6834e3e292238663f7ba4010f621f38b2e59712a0e76d3a680bcb03a5d438a92d0a69da8b5f5a74b0529e91e554f4c104291a96e892e6662229924ced8c587065bd3e88f3c9349f0ca85c151b65a9e8bb7fab312a8ea9f2fa29f10e0a086c99b566755249a9eb6ebb45859899de66353fadf2ec4e24df665ad58f52e3909dad87cbb6407547aa6a25f1c21f47075531f97b96ce3c9cb04ba9f3151f606b123342b6a85960eb9719b274bbb40d279b634fb340e0dd3e43274f4c2a7e69e3f5b34dedf3a5f0ddda05cb95175ed3876353aa1b97291751c185b4a87776e63e6bb51238402c0e649cb6d61d7f268170d38a737d44b1d31f51ea40cfa30fbfc59ec2f86137f7a3ca05b33dd59a12ff28138f109fee80faee1ce05b885751ddc0b661672e7f0d95553c846682112d35f74ceaeb493e9f72074aee6d9c3b452677da1bc769c176ce4e6ab1bbef8b7c0b27a6246a45db1525b2029dded4f6f28331337781d8a43b34fdb6c2a2e3b1096aff48c4f75a6feaf9376c7316f63161dc38e9fdfb44d163b1a9494085252bdb38c65b52f94f9f26d8ddb1fa7dca93981ad223359e74eff62c9b4ab3cb7ea0fa5fc50657d8ed15d2a9edf9ba7b1ac5a1234809a8d232a7fd8c1ce2a1dcb6b86fc544725afbfc79f654af6b3a79ac6e84e1e2c5dd0044a17ebb72399420951c41548ac6e3cc447298c06b3002dd4937473be77c5c8e738484a0e57613ffe37478f2e12b7ab28ca9c2d7696f9a11b9c8f418a159aee687f81423bfc2a7e167671d898fc9a8159ec67b80f0518b7bc4c8926256815a6e48a7382c4644d62eea9e3600ddc7f45d4070cca34afe5b8532e02a004f1fe8907e36f7a3c4252b4e34c1ce3f134ee7f33b4fbb29bd9d9596cab7c3dad459e1b3f0505a707f8c2ba90d77ea2e7985073d560c53f89257be1555f665d82c57cc3e679b677cc0a260a73d6894b55795dfa45b4f99f91153606c9c4418e2a142319babbf28adce8e51b18b3dd3bcf4a5f49110bf971481ba0202644ae5e0794298318465a5ecf379862dc09eb02b99ded06a3f0554322cb32d3f78afd3bafd7e8a68ba35e522758b8885a43231ea8e68fa98aec9d8395867688b9f1ceb58751f8ea814d6f0359debde1fffa261e11b6afa8426b22c134efd3b4ea03934a2294c2d595bf1ce0fb3c21065999545f9880c59956e6857a6569e2ef044adb681602eeee3572d8896ff37a7bd3ab4e7181c789e32509461dcb772cad9532179db64ed59afd03324b4c8732a91a9a74e2720d351c592de539bbba09672953c869a7bb0f6238eaaad50589e2148af15820fdc48fab5fded34cda8511b21d1a7e4a4ee9f4ea8583b2851f5df144a14a78cb698fc226a596a0c59c7acdf4fd1099be305e4e8a7f88e9fa1e85e8cffa00473069c1a504c6efce32760da6c655b0bb43d07a44c86344a1927794411cf1ad43fe62fc80dc3034cc21fbb024ac93855369c3e0a03afd5179fcbefb929224cc1f83d9b2ee037e201b0291f4dffe5308e29e7f03b9488a39f387594e45e60fc71a7f526765110d1c4b62dd6e315200a5e95066662877b6587ec0daeee37f1f38c54f519c5e8b6993ddb1326eb14e1906f83e0e8a565eee57ac37b86fe3c3df9bb0525bc462e91021327c3588d82928866fa5fbd2cb54be91ec6a7643df6add6a6c46d561eaa09d3efa225b3f3e99abbee036a2f20fff93a1bfc7a8fd3eca751f498b53178e587d67855228142d061f1ada5e984a9cc60a01a6eda51e7a694334d8ae5937a6571d15747a008a5c04ff14be8c505eea2e8e2c322b0f0a1addd445ba0e5c54cb4318d338088924240cc8571d4e4fa180cf9cabd22e5b52a88e84cc3e49d0f175a2dd2b509c36541d84073c7722fab4e8ffb1eb1765fe8aabf1f13305ef6b803ddcf6785e938c9cb101384f4c98e5fb9b556a7462408d148dbe9604815d60a37c77e164a28ce080871ad80a1e1ea608105722d2536c7b82d63adfdb311274bdc9fa1a5accf6f691f82762f75c329f4cd07b878f5b383e481dfd5b01a5acfc419eea2dd55e5023338cbd75919763564c5448e4f5fa4269e6bd8c84225f9b8bd173be886ea726eaf7dd536c53402f4f893435d7b0b10972e13d5ee7b7bf5c87dfd0edb68167f9d251427fc3c6f7050f75c8c8ec5a0ffbedca25eaf22c556e94ef4efe34a7f1276dc254a928672c730ab4ba887f2c77a83f040fb7301aa240276246768f6cd36e11ed9c45e6be40f7b5a851eb2cd2787ceb11435a2ded368fa3eb4fdd232a9f0c631571fcab36d511b4d3576761d693187684793a482e72abbeecd3a89c7bb4a0d5ec8e23d25b694f7cc81393aa9347d965d009ee1b58f702cce96a5f57daa4b9fed54961f8a67e0f71e91ee683a3175e3d868dcc23e7344352638c67f1b1efb622622c2d7aa283d038d8e1d679807205721a7d7ade73aadbe3dda258d6bc1633f515beecf4d9fb4035fa04f9f8b5f86d87fe4170b768db4af5ca54b8933388a1eb526a36e3b774cdfddee0a78dbe1b04f3c482245b4135ff0cbc1bfd93c2e79e89bac671c3b560e7f4fa1d95a4f34a5a59efa82c16975b86ad25509e74e4936834b15c54117e500ccfde041adb1016dc0ee22bfe95d5ac703b989b2193131cbd90d88424595cb2cac2ed4ccd9c7ef118a73ea5f24576b93a4c78641d9ac8f3fd1292d68917eb09a082ca501465aa798ea7778ecd92150243645743e8e880b9b52e62dbe8b993e51c93d7a685c31d00ac740f4ee7281b0829f7b7b319f8d4ce6468eb0cc9cb01b59d5aa7b8a841613700b1787eb564033b6c9b1c1a37683fb289467dd1b2c89efba16bbd2ee24cf18d19d44596ded2682c79a2f711c7a32bf6a24badd32a4ee637c73b7a41da6258635650f91fb9ffa45bdfc3cb122136241b3deced8996aa51ea8d3e81c9d70e006a44bc0571ed48623a0d622a93fa9da290baaedf5d9e876c94620945ff8ecc83f27379ed55cf490c5790f2783faa4631e7a705d5c79852b0c5c410498b580a4dac511f2304067e1d34f919464db6dc5c80918673601a88a8ef41e80ed5d963e7e87c104934f9541f42b43b1766b6ac8d0bf8a53abfabb5df8159f4f8677955cd4732f1c2413e777d0140dc5e1310433dea5ae69e2eb256af1c8acbb8c8be5c7839444820b13c34d1012d71acdb6a3d099c16cf1045c4e7a22142d0a2722ee4734efe67d71d792895c2d89f66180b065aa1dad3238d59e5433010a857ec317a48f8efe577ee8bdf45b6e0ca2c51991bbb8c15775a7df7dc2cb972b74baf6caa53b78755659cdaa56b6dc46662209b09a6cb354027801538a92df781f02436f13e1b531c32b0ec37715802089a0d674ca6efd8a21d4c4887532e0dacd7f336cb6284e1ce61b346f1e1e608255660a441265a7e31ae3af844b50a237c8594d2a56b94a1d0652c615157c8655109d2c8a3bfab74634cc4aafd4972e7956b71911bb3bb11b6cf74c1f22d5fa7f036cc5ad0ed4379ab8b81d72d7ac8b86c0c1208aac578b0061334ef40ed2c2ea76fc5c15509c2ec9eeceb1331e3ac1484ea1e9fbf3b5e1b32b2e55fca01ae87cb074792accf9a5ba1e378d5b6fe7d9a5477cfdcd56fcba1c120fe89fa256741ffbfda5534994a355901a3953935bda87f57de2699ed51f2360ff9045da2d6cba9dbf66fb8e1430828ca03e82523fccd59ec9223593e717b05b25d4561248da35dfe147876422542959f1234f733bb8778b8b459bfcdbaaab4daa3c3a104ec578098ccd609366183240347024c0f6a55404e9d102a258e0fc7cb550599de8366a63e782eee38783858992ae68ff199b56500b50d24e07c28b316f991c80be34f5351bed991c2e9e0b7c326482f94ba264b91a4972c68f5740b3ff9ee98377c700c64f96ca050270aa603d1adc7635c366853e454cd29aa8044c8ee7296cbbf7745fac06e767ac014b7fda58dd3e7f0545fd9ecbc73ccdbbbd4244fd450434cd37485ac45a0ad359d71f32a7ed18d071e76963634bcbd29a55de4867a313885032c9805889b6208134896c8e74cdd00d3511b4954046514db268c3adad615f894d2a464bde333a804c05b196da2628e3173cbaea0f76f1dabe28dc58cab5627e71b2d524bf48cb5e05da294588e880fb76349de91e235b4b5f65bcef61d8383984aa556b96bf78234952fb26e4de7f5b383f841bd61437a87f698afadc938ac26f5aeea9ca5eebd8ffb350be57cfce0d47a697069f132cf7057a6f02a2ac001f1b0ac664c3eecc850f464f974a82151989b10034e2e6e242d9e1938e1beb415a6f020827e936c2306053213823c0fb85e8a7e42d05560290e3e61d26af1af67b5289da77a40076e3dc22ed294c51285b4bd26e77722b34ea0bd03652c6ffc688aee964de5c1290a56afadcf32bfd45a39978c39c8f2d1f5739e9059bc8645a8b6a68cfe37935b77ff225161d2a8cfa63bce20e24c6246cdf5577b3881d0f598b6e4f430f633193775de9c22fafc5eea59b5875957ed7c28a47c367a22dc86c91a2e6e7e882cecd98918f08b12471ca701e2120791e0fca61f7154a6f61593ba4ee74e4f83fd40de7775e112cf05835cd2d87385710942c6b4db584791f896dcc3a4362c7000afa6ef7a005287b42d8c2b0d0e5b8bb2e8fb032ea3c48d01fab116e9988db2e393d34fa9b0c2b2df75a5a8f454e2387a59b398cfd9a62dde49c7c72bf7ebe32297e4166994cbf6e3e659ab22e9c20dcc0f90d4536c751aca0e9142efd6df872a2649e25e0f06ba6e19e8c02d3f6372248513443ddeb9da71a39e28a9a7d0f586c97521db81eb83da6af37657b85f1c1064ab7703a2dcc351c35ec6fe0d58d4b4ec065386bfe2c9b5640a3c47071d521bf8d9db295b668bd6c853cc3159efab21287e05c40ba5128b9f8d908f8e16cab3ec2eef335aef9a9d3d0da7082ffdcf77e93ca737e77af4d9680e0175cfd3cc54a90b31a633c056019becc5c6f21bd815b8d2b646e60cc70b67fc0dbe4efcfd8aa9ff30f6788164a06f81c71232b24b8701c0b17589a32fbe29e823bd7dcad4d2798b6ba89bbb3cf6226d295e8469a0487e9737484506954e0852d1e7fef5c8a8923040311fd6557f4f0f4b2049aa6cd669b6a6339a8f7e578dbc96e224d66f998e7e6d24675b24a85fc8cafc04ed07bd6dbf9ccc0ca661474495f12092153011b8d630f714c2510ddf5a174648ba0769f51279761df3e4b9b76f5f27c91a909dcbc84a2daa94311c4813ce938789f2789a4fcac640f05f1b40b96f6c2c5f27ba11d5073c9b596b6024864f6843e54f45c7d80f31181456d88af470625e6b5be3358cf6a8698a5655ef321838f044746df83bc55b05e8529df0b120aeb1c7b3a5a1409705879f887a22a7b78a2f30186db5fb7b888cd4e8c80c6feea5d8ecb57ddf9076b8980188594947bbd0533091a19b87906e2f727fe3589138ec3652d7d86b0d0455fd78cc5fdda283a00ebe76c5e370b25060498e7c4fc5ade65c829141be16ce423a3dcb1a4a48bd8db4324e2758474ff3c1b29b0f6c6dac38ae048846534e4321c0f91b05399aa7ddd6447e62546bc7acc6463bf93909c237cd511352c4f3f1594403229d0618f124f76d8df3525ec80fd08cd7d6301a6e881ce0d9038dd8577d1614786e4a5428079a060356ecb0bf8192ff0522dc202f8e2f3c2fb5084be3f1c98582e570dc9ada30b664f98dd21c9660052a7bb7ab83de76dbadf3eecf355bd0dee89f1402e8315df72977b0637dd2da47de2d3d2ce9dd7647da5c8be2ca1fcea90ff7ae779e916430c74deec531bb543f96d3e724e02fcff91b3b7a26f0a2154c7f8b9a9b0c6f05fbd4e8a37806b48034caec4013f539c678073d23fc67b73751adc772fdd04e95c0c8e4890c3b52c0f000f2c28aa7800c4d24be33e38d93b7511137c20078a4a62829ade9f26e1aa8d9df6408e9658703d0da5b046cd0dc27c3405902537405b98a5db140bb0d80aa6a9cdc6dc0bdd33fabbe803008eff4db10c1b7be6740e632700b9b47c69809481aefb87b912ee9324637ca2148297273c20bb040ac6dcac37189d849c5ac2904733e84bceb173d6e38ec95529b2be9746f84ef53a35927cef77ed4e108a87451fc1fcdac2f255455ec337e6e7245ae4f71d3d141dca181c77a413d88301b5fc32df9ffb3edd7a28be8a2e1bf8e254577616ef2a5c8c56d4f82775eb9bc835fda7153978ea79cbc72a6b16be01f49538ec6bcbfe9e8435eb9a897d4e00e6f090a7eb32176dce3069cbef5795ad6004cf80a53b5a8cb89bab845191cb5b63cdfd5aeaf2a170e49258c99d5969a13088635b4ba504cd32715adf071b285448b38be799e1dd9ac4d7da4bfe8401886c0b3da4e573c50afaa041d233822e929c8c83778068959475e93879984127081a74a684fc0c65eb160fa8865e2ea5be673f2d3128ed8f05ffaeba7cf6f6a1c944abe42317d8ac1790a5d6220f87557fb2b4d13e18da94966b10a77c9d0d3874f1973fa8be3f6237704c15cfcff5057e84d3b7c5d8956cefc0f649a017ecb4b12a22013b79a94ef2bcebabb525e07f63e58427eff188dfb70647e611eafddd27f6337006d17e39f17e69e1fb99b089d5ddaf68e4ea19b59645edc7f7a1a67b7f5db3d62e4d26ebdcbdb0ffcab3cdec7c753cc3cb4bb2b53686cf3479c1515561678879de760a2c5a82a74d49fc9f7001b41380cc9dbaa93cd0d574bfd46534731d9ba23cd290c413d43613a1fb8fdc0ca31ce711679957532ce7d1f2624ae06086d49870eb217ab0bb4598f93803fa4448403fbf31b68721a1ed913af16721ceaa1ba5a3492617d93fbc257a3c649052ad65d201847b034e37cffdbe0b26bf6692590ffd720564356983024b8e1b67ddda74e6fde64f9283f6755da737ee81cf45741fa5f028266d40837796b78e478ed556c4dbe29afb68e7c8f91cfe2830b1cb561dc44bf52828cca2cc803d27f70da8f1b4c4fdc507a411ae1846e63a94b62de5518109d6310f16c94833aa4d41015b2ffde0c1367ee07d10044d798d7584720b0205b43208ca25e134d78567eb13f4f7e956b55628c331d703583f899bc3a2af7a77d370760002d0d89357dfbeea7d30be4f618dccf637e95e8fbf96ce1cc6b9ff00effa4359b3807c90a71c822ffdc4c5f24e44342097305d1b811dd536e510dac88f37377f42d768f6fd86ff897d9a466803e126ea579347240d8479bb079e53f63b8f1917b6bfe3ece185fca1049a89d808ce6bfb81f966d1ec358250344ab1b37c6ab3cc181f379adc81431e9aacd56be671cbfd1c4c004ba596b89f75fc3e26d830cb436fdeaa2975e29aa947b8744824340d9531735ebac011e250d19c4078d9492a27c3e685c13510caea14a6ac994a7efb6dc756c845c50dca0b511300d0071e981e1d1e1089a3749b88085ec683e1b65b2de6dd85143df23677fc47c657e915ddd0846e92aa4774d42c2cc909307046f67d96f0df50b027ef3cda21da340797c0e700be554ca9793f7d86cdbfc87f959403e0771c21a416bd03f3898390e90d0a0899f69f9552eca22421532e72960bfd6acb5a85aea326677450680a9318dd83dd58ffb9b0c933c6c80244a0573e10f8586081622034bfb736f8a4b7641b71f30e44bfebc396b8731233865b9ffe0c4e76a6d4fb9ee04973f2f327d22c7a2f2243651f7cf742e170a9bb03a8715f67c76ba53c97512d2c644f4ad7a312be81d823c407b67354188737a2a1cef5e8892bdf659f8061a5d152f6049e723f6ecedc566860df6054c47e61f04a175521db427cefe7fcf5d09e058e296386db127df7855a1040e5ca4c1ed1aee5c9b692c3d4e74afa543535fc44c0c20e280d32f8f158a001212b3f1a2f2fe45a2d43c4aaa8cb7ec2d04a5c54d834d586a0fd57a692764419ca593b95792298918b213ef987ce9425b75ccd0c8a916db536d408efa1884d4282984425c353d4712b7b88163998930d5392118e207f8f8232bace3be835c4639210e432d76a9fe454772b6b86d28361ea15af4062a845d5dbd630f22d26b06442e8a2247b0e02d24f3dae5e36246c09c50d2f8c1ab196967a51b67c3902192cda49066478e7032165f69959103557ec2ca11ad90e458bad5752e842d47208a5a25a9958969eadbadbca75c3ddae4bf466f9f68e070a2a03ba024faac51e83b6e244e2699cdb0585fce0c80465365108bd3e4e15cda87d7eeb89721dd6ad9547e12e6aff5445156a0f611d84707670107798a7d528c88c07310ed904cdc84341e841b7838485e4525b74f9aac616b0f5dd2e8b36e0125d87d6b90dc57316978a3fa4535bf5437a232942e6e02ebd199d372981a0bc2dfbe420b395ca9040980b2e80c6f16f26e0c7c1f36b8e7213b4f1cdb0127b86c26b085824f979eced4eacfdfd96acbad61d246bae111a58c288d9e6ecc42f0478b6d9c534c23c4ec6c256f3424df39dfc39246f9b5eeda96f9d3ecc052224fff8e541b109777a8072fbef59787230e1403dae14e3dc6f2cc4fc06c522b1c33ee9002762cea09a489a016077c68eca4e4930a9a4ae1308ab69ac1b1a6bfb728bf40d7221a9c6066fe6dd9295552829acc01aff65238a21ec06b5631309879aacc1160c36c27025bdfd966cfb4dc8b5c34c0397a06bc920b94220c8f724dda46af722dce942265ff98834d5f1d5f7d65b96f4599cad586fd8c5f43110e386f68d3e3aca8251701ced2ec0b7be153bf43b45f42da312c07411383985a46f09fadd4065be4816d7c45f9841f9ab361f772c020cfbfbc288992e43f8aefcf0ee1722a2aba084bae2bf186ebf83006028c7f67543abede43845f58d3893608dbeb4230f14587f641a76e057433d05bae04c6145a125c1a158df30bf011c176e003ba92da9cf7e3d054f7efbd30f016dce6e351b2e51bf2071d1a5805b316bbc3c137ca471ebcc6d2db3bc037ae13ea07a96399ef3182f8a0a821d794fbaa29ffaa4641d7495b01b1a0b60173d9b027c6d2a3677f7605806ac5a5f52e49f053ec3562940bbb6717052bd33de262596292e94f44d421383bddec135b223c8dcc21e9192b44d3458935f33fd013c6742ce453a3bc9dd17f8d6281f6541121e6f5294bd682233f9adacc9d3862787494d943b86d393cf56ff7a12dcb8a8bc870517ac42733173ebb8e5160795f910b401a297de835220b6e0d12560f68f26ece839ee887b8a17f4c064d036f41fde8ea421e1ac14aed921e202e814e79d5a365edfe2f848d426fb0f517ec76940f9c17f38a2574f51017e4e36e45e527b5f4bb03111f8a1b8a9e7ebd5a924bd046a33da106047f9e0a0b56c949fa701d13d15265802f150dea7a29d18d8b4b81538cefdd0a6e4dd06bfad8445a358ba46fc7b077c3d4c1bed28136c4193df21186b782fa1f996c2696450de7078d74682a5649dc44b6fcb8e3522a278630dc2b80c1bb9abe3c56fb19a85c23ea48e6d2e40ba2e59b3c42868d4b786e7cea6619b229ee315ebd9ad87663477d7b1e3f6f2d3640363fdb1f92410ba5fb35e12c769b5e9f5089a3a4493d24546622740ab75684a6409b2a00869ee1376079bbabccbcee437ab7650fc7ce5a177078c0c52600654987359f81be078ab13090c0407687377f12709849deaa72e52f06aafb45ab66ae9ca7a21fb30b5687de1395972eaaf8a6aa3db3cee8721d51e424891990c7f749d369d837002ad33feb8aa22c3f68705eb4872e1b8f85a7f25 +MD = 5cdc5f6d73f6420a97fd875582edd822d66b250df5b7ff4c3c1ccada + +Len = 71912 +Msg = d5429d59b03a5c69d7fbb9b410414c00572c8e76814c9a561ffa30e8a5efffb6cc0f24f83486ee504e16e4b779af09b76b415edcd3cea9653cc3753e35885a33af567e5ea6495ce104b6c4dbc2be2394502305fb375bd853fde3f32948d6d78947beb4714eaa2f86c0816206329524fecd7b8bbdf41bb0882703b28f2801fe205cf0cd1b73d2eea64c1fc521125d945dacf1f9085435b86c85cabb5a1b305760b693d1425fe821a86e39f515aa3df918b32c56c69dd17867dee115706a8b6bb21c50c9d0581550f6ef77fbc8425edd99abd5aade181979e2f9efc8bb5d3bc17c57cfbcaca78104f79680de2422e8c7475b93fe380d3342439f9ddd213b68e12730b7b2be9453c4132dfda6109202408a8d0f59bcc4475cf498935b8c4e39541c6cb1b3ee66b419b27a955c73d9d4cfca07f1c352847e4d5bac784ae3dcd7a1c2d664c82467cb8a3c47f107374087fc6f92e044e297ff9fe2a3f5b30e2e6a50803579f848ddc19f195ab8af430f434fe1f684e55443f3d9f044b19df48c19eac050974c4211bde0b27b935c7f8e2f5189fb86ad90d18284ec5855107f3d0cf6e9f067cafa4be8d66d742a17d3047489cd698ea57e89d32740a78814968b6cfc63dd907c59d36908b30c24e727bb397f160743d307b20f4a53f9f3b221bc618495dfbb6a45f069feed0a2ad563f9a7bccd9e4e4111955d768d163df109191217e9be909ba7eb10418137e3e86f07e6c758f656f7857be63156c60fda34eaa83cc641b617680c8558d95bf828332d1d2821d704fb4caad20616d011738b774a7c9432d6e66e9bf1cb5b3e109d98b275688e0900574c6b487a35fdeac6f607215ebc579711a3e07b2371a7d45084e0150e0953f1136f0570171b1543db5ee4556aa478a29eee234ce7825feb48e0fd25a2f97f80359cc2736431e0c3b8a9540d28b55f9e9836ab8b9ff52fff8d9552cfadc65354c7bbe879e9dd251367c1a0712157d3340465c161d434ddb5288a2739b6d79816d0b3c0a92f88aedaf08c10aadcf39b0cec62adf60ca631b720a6c48b4596156d596e922cbd9b41c159f4ebe0e1ef80cd5715b771d2b3f5ad7dd370eee26a940269d3a62a1b7ca770ace07b3ab9b54a204e6627fbabc3ef3e48f8748a16bbdb7c08ca43cad295a88ef13706e1ebabc1acd83d44bb213ee81388fc188668f2b4843e3bb234694d0bc32ee3d5fdff3bac1afd8257dabb8da9d445c9a40a6175e5c2140e3c91680b9ab96dcb30b57eccd511c51da87f0216f7288746604087ad36dd912b270958391b15b5d75e31efc5023a39f67fd37c429db7575b944e6502717ebe7bbbc3c03e57820fefa99ada90fc3d60f624feb379612abcf0875c80dd5c4ca1e442e8288216a681fb5718c7948bc14303de272f240d29bfed829362a4c1f0454f029f186d1f2916e3b1d23f39766ee806f77676a9675b673acd1a92c16611afa5441119673cb4d38ffff1c9e787ed59e8b51412723869bcc0b01a989a1358e9cc5065b2d833efc2e8899cee0684e69e8f61298be547fac66573bbfd99926cfaae6ec46c28cd81ead496fc35fe3600bde542dc676c5eb78e125d244824aaf7ea32e656cebfd213533c7039263865e4c0d1a256306e43481bb0b77e01a5229ec13fff4260050a4c06095d7a491ad93aae3ac7bf6d53bf547525c9f0b083c30b88bf03b1aa633dd50a21a6e7270d59a9900afa3ea7829a83a55bdba3de2655e6479938ca353f3255676e93a9477aafd96d2883fb65659c7fb23835bf12f6a0d604b5e7b68802b27526d76be831c7a1734d7caa1f2f638deda4a61f6bd55b6b84c9fb579c2b1585dd4e4378cb6e5ef81f39eeb7d28de43478848ce0cfaebd80989d53d2a5a7de7334e79c007b85a57b843766f13b08505ac659d1c1142584a5b989a59ef983c74422fac94c20fe06f44b52cca2832710c77f2b5f0a62c218a38f93d904bf4737bf518db2a4e162e7291b8f0810d1738a434c021d03e00ee141c3c6d74c207c96ad66ab3f4fe638b2e49df802834e732796d5e7f3f3b7904849fd2787be43a94bd60c5958975808ceeb7994a34522af4f87c1e1c9240ed0b381e4c0d1a25156c002e9a1e5c25f5ba306566bd19d74af6be0b8f987dc0e578bb321989e3f710b5cf9a58ace1922b799ffdc8675d26cfce16764361664dfac39a55cb7d4decc518782e91cfbe4caa7189db4ec782d341d1be56aa05c04a85823203c265dc789afa9675d60546b7eb088a786a5c0f6f19a7f21753f420392e1b3eb69ec1f42d1ae2a6ea85dc2f5675c51e6f9ba3775cefc77e52b1cb0abc4d150d08c110497ccd47360721c2bccac32db22b632c4f1f1c96af7343e8f4266af61954d9ef30da1acea0465a3793677ba8f2265154eb4828cc02039adc511a2045003539ad3ed79bbf82427fc927ced7dd3b0ad6cbf04aacae028e2723c609e5784e2470d8e7f7b8b0586602f60e638021092363efe2a900d34d7d694da77823065fad0ff0b0bd0a37af3b942c9bb80d1af91a993f36e5edc23f5be1b899d77175b12977932d99f8bbd33d93fb745ec731675ae73861739c015494110301ba595cef44382eb3111cc380e6a2d11caa56faf06ece79f6f4b40729c087ab739333126667d231e5a4eed524c1115bf93d34de10c0cf626bcbce4a3b6ba61053f4974cb31ed63b39d7d7672b478fea8e89c96134eb5a90347b4340e5f00cd047511e5261d3a4a9242c6ef021047f0b6102bd1af9590071e585ab91c5f82c79b23b00c9df10de0a49152e1692626f4d055a6861ca945185f36d6fa357de756b290517199770d2ecfd149d40fbebb10defd363ec2527be4af2b517fc282d88332051a9d8375e33bfc4cd34e5ca2b14ec951027f0958da74f47df3d12937fc5501ca3317c1b4360f144816d9b899aeb6779933d459820ccf1875e377d461fcd40827c567bdfcafb3fd0e3dfc8b6a5a4fd11df0c21a99b6fd015b4af929cb7f082f64f816dd14f62ea1e66e403dde5f21bf2462d3b466830799774fe0923c2efa5fc8f3ab8bc6b288e617d12b36bd62342af8b08e8fae18f4c6101bb3767bb1b17e9cdfae2ed88bcab6eb9047decf0e91f8df037b133c20cc7270d5fa3d51af357528e3a72d132bfbf8a8d01c9edb083f13228323a9d7419784dda63e4e86d08f2db4281ff23f37239497bc30dcabfb466109570db746235ee4a0b60513e2bdc68d88d69ee4245a4a7100790e01058dafccdba8c1a7526f297a012cdaf32d1ee27cec14aa6b893a79792b323b76b266813be29dc8dfc3cdfe2e473042562e9aece4270acdef387fb8935f0d40a27a2fc495645fa9c961e4e7e8bcecc7a4aedaebac82e18ed8f7d20da7e632a6ec249080c4aa15eccbf35deb90a685f0467586e7bc45c1758f8fdb829e06caf5be7a30beaffce81a4f43df120e4e2645a24b45e8fcb8d10b7ac8411e5e08fdb37f42b8863ea100babc1713654afcf54f21f8bff754223ad70269ace9d034f26a9645cfde59e384547a38a1eb2cf81a952b439d1baccd23628f3cc6ecdcd1d2a16d4b1ed0e8089d71f16e30ad9d89bea029f5875decffb5328a07342e6b29c4e16b1c4d63d3597298898068b183f809f681d624c3fc0118d15993a1b76382f1b1f87f039f021e2c51aa38f301c88e22219dae1d58c41b73c766a8b390ae2581997c3de88d5e9ff224bc5c76a5529032a9e34519212c94ee9a180d12c0325a9b215f1ea534cd23ed9a27b59ca30b496014bd63c1281db6b3d4d68c674fd96867d20aeae29d38f4443a530b0a05d900d5ec92cfbd747dc7e7fc0aeb5a4689990e33e36946ce8858208ca8266bd3a6fcb8b8ca52b40d3610b59b1bf392ac2c33b8cd53637ad1a398a9198fcd651359863201cdb44ffc2ed94338716cb889a97f8c26c39f26ae73fc06686ecaa0cfdae66b4e02bd35484f6ab95b741e73e6e8c5b3c899e6f16bdfcb6002aee3c50e11648a27d3340ef97f0a408d8cd16ccad14d553b3f008312ce4fde6db8e17cd9e648b814a7e38418a8020054214c4b3d4c5e98051bb585aa2acea933f38b6c3741d91c9ee7903dabb19b203b9b58b7474141a7b097cd9f3cda91e8dbc6ab3e300a60df4cf904e1bd821ac8c762bd58f1983fa8c4190f78cfc6e0c4ee9b079acc292528a74607195303ca2282de43d742399ec4c70b44b96bd60365f3d96926148670203636618d771cf253f377b1dc430ca62243d4340918f241f272e7978d0f0989ee8132d9e430b5d986a296d10efafaa1ebbfdca711df02e394f42f5975c59bb7bc10a038c687b6c8e118a1691671e9d546c48b6579c7ee3172001879873f2244af6ce946dd8207078cdc02429bb0c28b5cd94935e8d99e73b51e0abd6a848776f11c76cbce2c90deb0761f2446bd6e0b54867ee1061cfaf184d66defc69cb396aaa8ae8f448a3a95756f62d7bfa2d49d5753922f7c98ebf308b1aad545908deb0199f859e5a6eb73024e3222ad67db898dc9ede8f25557c0683627388d67fcbf1f75bef359878cc1809bf6ceb9126d161d6ff7d40f5c28a1cdee4ddf4629ea582cc76723493506c816df18a38aad718e30cd19ba7cb444de5f5f849419df3eff4f145bb25db93fcdeda0ff69c93fce37ed6cb963e16595bf4513351dad90e0fcb0e601683c1a211b2c6913e81dd16e5a7dd34198e478018ba892c643ac44b79778c4c30c8f6093f9fcbfbce82f6a383e078a171f30f4728caf62a1cebb03ad18cf370868fd937cae852c6230a612142db41aa5c06be1cf08830d2c8684d6a9c6dcc639422fbcc683ee376d892bd1ea6dac0a51453e4700484b1bd133afc494ebc8f9bc63cce358c0606945bb66b0a24716e28574502fec943012f79ce4d654cdba58fa937d0e1aad0248528efeb625031a2ba8174aa07d345a7c058aca13d2b4db6c5b99ea47f491fd5efdca9cec59e9e26c22f4d3a39a6ff0e065c50983f6ea53bc483fba95ceb67833ac36e7582741932d5ad4943f2b8e1bc77e154a2ea9b649d0274b960190629c4dc89b8804775258f7ba7e347c19d902b8b842351dd15fe5316186259122de9136bac126f832655750a9bc5c624a98ce3b7b137157572e51665fb8104f6c727e76e9706a3b3ec2b8c38f54b4faa713a6d82f51a7e4246bb2f788a9fe4357658b93bc70fbd485b1a4d5d50fe34b1892b3183cc47ecd1f5e336d43209874c901e2179d8883ceee7a4310e1b5925d865c1c820b349f192f4ef94ffae786eaab8ca88af382a72e6064bcfb1c0e6839d7ba0a9f0269b1d03e852f2514c46fade64f0872252411fec5b8381eeee10ee6f5f4a5f58a2a5dfb3349fb78f980fbc6609228599d37694604bfde02c0f82b6cc652140e0c414ba0f5e385ce10e3d33c039d30c6c282560c05bed72ef81968d4341b8072ee7422ca6e9bf6b2c3b49f17b6b74942fccf815ab0004a2a000d6d25269910a79a8c8a7e85b876a979bd065f60299b54b3e49237edcc607f3e9ce1678312ed3776512dc622842c3d9bc4b11deb3c4d844f8a30aca46940b41c8d6da335cf3eaaec8ab0a92d4541f58f9248593e35875a388903bfbd20145100aab8e023182c866201be308f44dd59beef7219415f735fd7a9b47a203901df54b96b263535df55427cfd612ec926f290a2d767dc01361a92b2ebe5b5fc31e57f832d7d536d7e9ef3c41546f31b47476e75204af762fb13d26b4f0765b0ccebe9d0a7ee650932eadda1afe7c68466e1be2ef5cb7acbe8d3009d89e8169ff979fa688080535122c068da734a904aac46e996fdf04d8425e182104190b10fe1181a12613c058d77a8fc39087937b640005875e1c359d5dbc5c28c1e081f49ac4fb198f2286405582a0184177ca5104a977293494c8406320826d9c857469581a727c0da4f5601eecfdf844759c0a0f4919eb7db92b75e513118bee885103a88a7e453c2b6c4c8601efe01411a72ad647846ab429ddb2661c8ff05269b6482ebd75018516797a3d7a0c7c3acc7a281c2d3d1352475d6a78956437429a029b3cfbfd4d93069b5da7bdba09131663862372ba71e2a239226f2624bd49a9c49165ee8d65c06c408b57359f23478011b99eb07302dfbaef5eec37481ec2097abf3c0d9c06a7c80777be8a22675289f356e05efd32c401ee94625144c86649a37921d1af8cb3aa6e976013ca21ae9496d28ad6bfbe1a07b557540cb14680dacd53a9c34e847e73e48ece7b1d0eb6506ab110d040d16c4ce20c43b20425bc4d66d3565aef6a62b4e7b26c18917b241ded76f4a417291531f347b3f9c3c27311fe7c9a1108cafb0e06a6cb84ade3528d9da8b8fab921bf67478e273c56b94fb8f2b3f78e3112b1bfbfd06f47e8f3dc0009aad02c8d57b55d7d4400026376acb2e22df11adede317a81c3b9cac9192b15a001dcb23a47b174f30df0d4409704805b2f095f9879c4aeeaf54d95d4cfca4eff422134165e1e4e47405c3a9476f1b1bc4bc2b4c49215cd59e99d218284341c85f0502ac8276669f89fb4adc5b30eb784189fc309a39f665d152b0658d2e2fec270fbfeb610242875509c965ab7861250fa0302ce2abc0a730c79acce3871763368573866c4d23a5c17668cda11225291849eec98a4061a2a440b9d69214a03672b24505091eafffb58c519aa3c5de8c42cb5e8df8c0825e1304340a029e736cc5dd5ef1a23e8ea01a91a9571b5834577770a90295f3cae4675c34f19bec370d164de5d29e76698dd6ce9b897094d1919e7ef7b0c9a0e23b8690e111c6c895224c4b032e658ce8cfd38b4cba0a415a429f3e6f1efd91716b5ae862f5e9f835b2511fe08f5f48b26ff710e77151277a7262f83ad4978c207dc9abe0226e45bec50c11a37cf47470752ca49237ad0dd72acef47f5a015a9778bd238222bb77d9636569757e8cd6c9e75990759386bc1971cd796739a1c37d641d96717b3a562d95446e7d1c8f3866cf661dba0d44fde95047d01af8e18e7a4ad14dd4b851a963629169e4de6560ee343a90862d4f96efce2242bf1f28853831c090d45e6a3a22d334a2d14c76160a1fbf34047c0f4fd2f347157f36dd6e5c21d4a799f7eccf13ef16616def2a246297dc505981edf23ac79e9181c66a129122f4d94a0b3f31ddbe1deedf4eea519da4792bb0c44f45d1530f00ee5636397d3d086f1020cb282948329050f11c64644e7f0e2fce9e123c9e83a8ed6fa9aac879f9b112c0f77c9f963e91e8612a265e9ed441fe26431f26b0e0d3a7982b2f1bdfade779722df4e6af2737ce257a5f349b610c4654a434359210c74359248e1e750d596cbfd559a79bd7cb2bc576d68d4e0eb72fe12b1b114bf9ccea3afc907845014f142d55738963349426ca845512bdc489e0543f9b63e3852cc4c41bfdd15772109846160a350e28dce8bb0ea26bf269cb8235477bd3639b2df87eea9dd3b146e5219280e652a49ae999207b863ff5e6c63c0dad8408d22219aff1cf38245d6716d798fcce892e71055f8233c936cc24bf3763d87eab38043610a333956c63bbebe1e0f08c82b2977665679e33f9810a019abf3031639e28cd441e7f7d54c92cab68f2c5e6e43bf384d15a248c301c7fd38ea91d64d90b762572ea19b88399a1a09357e4a558ce6d79cce02d9b83a36d7c3baa07e1b587d688c38d6b0ea3db01108b96b3918575ed9b7d8321299820bb45c849566e9e1a303c5f91db475995364477379c7114375b340dca68fe1a9a51765e0f72d43ccd6c8a6d7ed32a4fd1278480c2060eac1d9f8aa33d6ae2af1a17572483c4da38a772ba15daba802d96bc18cec05931f62da2e568658f9dffa7f52f432db24a3ab02a14812ff8119aeddd4788b9fca099714a8f84c940f6b349d348e295a5ebe9f17de0d604f5a53fdc725ad73359243ef180cf1ef2e3b7730899e82a440684ee7151653fe21804c46e6399e2b8d7848db42dec5e66e2a6e6ed2f5843c13bdef03990ece250cbf5d0a8984cd2cfde8a2dc2372f6dafa38cb5ff7de05494aec1984f20bde7d676420b94fabbce01d6fcc72388e07355903088476bc78546c5f48ebdeb2077fc7fb11f396f2effd427a302e0064797de0f5c05cbe257005eea41798bd75dba4b4f0bb19fe0ec8cd23a4787ff9bab02d48ad6d795c8d6ea64846e02bfcebbd74a4e176ccf363e9e8375b0fd8b2e56dcbe6867a4ad078d6ee0fb44d063b783f682e49ff5d0576c5d6e41a50d89a68e4c2511d7151985c4b15bb68b8c7e79fe41797a69f7aa2dbef01b07ef5f03ed9c7a90edeed1e32cc3de5d1f0bdd19fe71deb9763f18669f7b80122d569a00eac88f8764748113e2d11b6c9d8b6c3b2d27f5ca42e7000b94ed34dc1da267898559b392de30ccaf9137901298d5e0ecee67af32442958a1f65a35003d9b6da5a6990d3ac3eb5bc1203e67d678afe2342978337be6cfc831ac0baa06f709555c35cec6067b6dd550772bc540a6e21a1cc6a3aa2c8f9ff7c19e48bc77b2b3c6b61a41057f6e7ee3657e49d4d988362fabae303ccea6638e5cb45993d9d56269bc3d3af32b04e62d071ddfbc288772caeac76710e895e13407d68556b7cadee6758700b894a66c5a3e3c34a5b60c6092dffa8f4f02c3e292ccec152e96f8efe4eadedd7b42bada1212c391b6097dc6309430f220a5982d50b2de514200c75d0b212c1764bcaaf6ff8c9a3e17ab436d4b114fd6ac577c8c15c19481bb7c9fef042457f79d8adc89c7b3a983f124c71d8c5c40841ba3d7c58902f6edc093e86e77fb48c54b34ba5a1290d9a86cfa709d9a7fec44940e11a1557ceddd7acb0aa30bace8c99942aa33892910f4afb7a5b71f823a5e3f2292e821385f9810af6d5369411e4bad3d16dad38837b0e3e2d031c06b11194566c362943c3667abc47a4939c1d192afad651899b537252f0458d427445bbece620ad6579258927394974c2235ebe7c818ffb583b6f698bca4a568fc15ff95019fd00e1242af618fa62d23cca453921f084c7938955e54b14a1fb5e6e4e5e607a47ed06c52211b2882a597e016f1dbde04b42c615a56a0377f2e828ebbf5f908f97ae50dcc980a65b165700694ad092a959f95a50bc5c376c93a999ca117152b272e159eb7fb746fbad776e5246f662e41757dadb2950695b3abc0b79f338498b50027c71c32a26d25627026d11f380f939eac2156adb1bdc2e9c087bb318c782b5ae52f0224dc887b6d2870a0a5c8f81082eaa800f50c15805c61b5fff976f312a3157f71bb6ae84262646c9be95e0f4289ffeab7555ec6746c6ae973738a30f143805e72de93b405a8edc2c9d4427cb01cb29083b5f1f72682a5ca1e880f5850a2ee750b75a01549a78b19324cbb68e2a1cc426cfd0bd11f04d801081e4f92b728276c4669d93298c70519df3a12fb618216a77b15f57ce65ccc36391e9007af3df2ea2ba086347970256bd787905cb4255568b7e5f71f03f04910ba711bdebf491897c103ef42750ab1b722197ab463f4542c295658e2ff2a173792fd384070b4621c107a5c8513fd72a4c9da1b2af755da9cd74e62ee6171fd54c9ac2e5549e6952120ee1424dbb130dbd3b1bae7f7b2ae60cbb65b6bb12cc40f68654744d2477c4dfa456048558fb30448859e12eb72991f0d778c8178c5340f750fc9369340de49a56988190afdc2c6314010d45bfd6381a3773d563ca315fdfb94fd52153782bc2940d4be816427c995c95855d0bbd43097a0b615882e2f80ffdb2bc1df95314f8fb48b60422da8b67c08bebcd214b3d1f1d93ee4e1ce4a418bcc9baa79c3b3aadeacf726d6be0e35eee58a32e770ca0fb7091eebd1eb2de7a64f94366c27d0741e0f5e39c48120edf44803de9937df8ff31a9f54dfeda11b594c608d3f2b505657c709c094dca887951972e96fd1bbfcacf30744943c6e85abab45d67a36faf792bb40e4cf396caada401f7af1a626fceb7c9ee576405ccca4548c3aa6af9700d7d34bcdfcff36ffc9a552baa81ee837b79dae5f0f6232994c307ce04a00ef182cf771a2a396cc2e6d3153d01ba2c857183e7ddae708ba93ac255ff0ee90cae89b0ffb8c4c66f6decbca69e5d3988f011647547d849cba63cb1c7b941ac7f0172b0331b280d77eb7ed59de21566a05dfbaa07b707084fbb0b1fe1af2570d294ee4bb5b3dc6512b63dac7f8ab2e7ef2990b323adc332a452367b182322cca3c35cf20c154a73cc4879afa00ace23e1ed711e3d9e953f46064f41ffb7d2266f273f318ab20aa0012ce36dc3d4bfb115140d59c9fbe5a4c131a602ecffbc04913b1598c60c85705ddddb554f9b1005e527c5e46d684d09927edb4c844d38edc67960765297536b3ec5f1f497a05798fea34b5c7c4623b426587f7d4a42e1485b5cb07894e4fd07309fa7ca50a70ef0be110e009b18125b1928d313a3533dbadc7f761e2177dacabfa56d54fef1ae93affb7e9f2e708154d79aa6ae2400b6abd63c31b57cb2852c5881c312f712aef840bd2d76cad20947ee184abb40cdd491b52d73fcfb4774b277bf4992ddac98951cf08b35e4af129ac91c3fb98e3d201315bdad43418931e3b9b851431701e4009110284af07a25c3f521063760b1219664875e36d40a35367b078aa237d529b149a6752492c5cb59fec13ea36cdc41921e04f736274d07315817463eb478c23da32e026130146bd35277398c0711089ccea118cfbfc4205acd722487117f55ec4a01507f5cd89fb67cbd875fc3f1ff2ce2f6236201f2091947a2a609e34b5d638aeadfdd7da4cf79e9fec8ad27f19dc8f77eb7ab926929f343233b458e8f3139f225110a16eb83a436c54de2b7826cd7789535fae59c2b8f6c7e54a8879d79b62c5a8493bd2f54bbcfabb79ed736c4fee2f43eee700d5634100ea2c17308af8e75f5baf8e4e2ab27311c76402b816e95c2f632e4c63f6297ea6e762eb5534b298b8114a80297ff8ce7920a6508f4a2429525a27c6ca4b91138187f2ee30fc4fdc977323faad1da437f96f47c1403086bd60d1e13b7cfc2369596fe606080b591ac62841e5202c3e155b5c503c12f29980216f6595c23267e8f64a451d278958bc0bd9ad27cbd34fd0658ec8a84fb5e5db5dddbabae415e6f820be181ad39dd2292f2e6daaf63b5ed0e0aeb7ef3da4f134dbc2e8942acc27029e7366e5556f51c9face8b54e98cf37c936326f824e445f464c7f809db80b26c39133766f5285c0433620e0febed963e48561bab4ea06984c094f103415810a0b9439485faf07c42a491ffc24586d07dc52fa1f002fee64ab7d0db69a27dc804e6ad832aaeee37eb13046555408028a2d395bdaf872642b01023be234716620287f90f3d574b1867496348af220327133a3079d02641081d9537a318784c670166cf3da63e2ea41e0e55b1ba33365339c2a9dc3b2777bdf90cb191327d475e6949d5174dabc065792982a65dbd42377c33a8eed9d2efebab3e3c91589d2ecfa1f9b6a41ae529e2de64933280064f584554d4b8906ed2199df37eaa72212942133e18ecf63690a3b685305a0b578440faeed641494547d036f31fe46951624026dfa4f8c7e41d316a550028e7f8097605c95592ed9d7797de05c8472375fe5042a601cf7738fa13609caca3fa310782ccadfab162bf8af6fdf321dc89d528fbcf59d779ec7a4cd10222dbd32d4aa6edb9626da892f3a775fb83d1aa83b906c835c1d0ff10f23ef4b7ae36c1698a0d3d32af557f6381f69d417e81b9fa68c03fdda69268c9e8f503e60a6574943b65fda15e5b3cbfb0a0f535abd812d42b7fe82dd0c5bc01a39c86f9fc0ff497a3d5b26d3526e98dc9cd0640d47fbcfb4a6b4c8e0612049f6c5905574ddc4a5b0a86e6fefd5f8db514a456cbbf1dbf550dabf2691221478b8b540968c5767dc7ba9f20bc7dad311ed94e6f3c355b24ccbb686224ba998dad48b719942b8295c2fa49e90f7fb9dcb260f3d9fcfee1f2479ec92529c722deedeaa7be4349ab9b3611acc85fc92a9658f0b91a74e25631adfcf7c2de00664333bb4e7fdde596960a48ef451425a967f8d3cbbc0ba962eae81e19c1ad2f0ac36701d4e4cac8ee8e26e73be89659de587b4f4f47281aae24df4c58abfd1ab9677105617572ba598c7236b73a4d2d7070c7ad6e4135ffe2e77acedc07358a1936390f1bbb3e827f96d67c8cc2a26b08b8c5354f34991ea63ba1ebcc5dbf47d238a7672d3d94ea0ab73a03e108fbd94d365d2e1ba7bc3fa0293cec503602198d75a454bd83ddb89ff48611df95c141e8f478e2f923062c7bb83319921866c8f2f6161ff41682b5e857a2efadf05d6980fafc97122fdfacddf16ebab78e531ba8c2e711f97de9a98de776e575a13519be4ed3968d53af866fdad617ea1d31dc58e1fd70f5407c5c36acea3a5c31b31b4afae3279317de83d87e5178514f68d1a95c42840fe8a2958aafe7388c273e36cb0616914c04d46bc0e2c82414ab60c3443a9c9770fcc21e31f753252d0b3d31e978521edfa1f906d11024645cb98279d083f5ef3f0446bdd48c184a66661ad54d5a81147576b61bb10f4b80510234bdf63f34d5a589953b1b771cef60bf3cea9fb38abc350c717408e727c01a0ddf555e774191ca12175fadbf495c439e0b38868c555e48ea93d77fa19f6be062ec0aaf33046bd52734f3336c85d8368bef86abecca42d599850dbd439acb +MD = 08d9a91e1e35a07e4c92d8ec339417e105ce9c48bfce5acaf4c53332 + +Len = 73072 +Msg = 7f26ace0632cc9388773133634b7ab892c3f06e0305693ffc5ff9d1238e57241e091c584a3df51b9bbb3bff4bae8ca16cc89a1a13d448cca3b1bd3d0dc5ddc8d63d5934bbf410ed8540672ddfe21106b5361d4d729d3e0c8597e748ec25111b5905adedabe394abed9d3f399074bc7b1492e682afdedd520a79148f3f0aa5ae2ef886ddca8ae4b92d2840bd1de4c350f34572644c079b5fbadba16a8704eff3c09c80af7858a5b7dc880822d890ea2ae9e46d3ca7a5fc680f462a8544a2748ea65807bd35eb4c0a7422f2054127758b50e623a67338751d803f2c4a0841c7c158b1a89193a14c237c8f9acef80719e4d0d1322c1f4d99d2a62d033342814e5e404fcfc712292ab56e246f0a5dce3bb9e22c15280c43df49f9a66bcb73df9c98057909c821d16c12b197eb21f2db4f8cfd5d4934dac9b9c5f321b29d2ccb271100c3c31f533884edff409bb047bce9d09aeb4add0b3dbde91b256412cdc2725bdac6a82716cd09899fc4fd3fdcf18f27336ca68b0e1e5025da281cb6e75402dafbe81589fd1d6e882b7b9c1b2307a3e36f47c8c953ea150ec8b03903f9fe5d00dcae97b27698385c2afad4fcaa6dccb797033e029d3f71066f544584863fe57ff5809b3b03dbdb9806c9443ee3926df6533582d11a7d089f366acea30c8730aaff14bc8e2536dcae474d766c5f240c322c4513bf8c21204b968a310a0d72c31421c168167b57c011751dc80f8d813bfd7ab88d2842da7c9e382919040971114e362d3a7e46bd0a6418b0d592ef3851aac7163ba5def7520973dde33b7100bfbb84ae802047b530189a8d1b8104c7f1eca9d4cba2c106651fd1ff2c1ae4a002de95cbe5a6cefeb5918328f6745eaea1159b7aa9c999961a33fb23502cc4edaf39f20bd77c7ce82f816b1b12c76d6ac3c8048e5264b914d60827e10beba237f95021f4d21bb21ff24aaab9ed04b16afe768d76521eb0014cef10ae9bc1fd1d95b39e0d71ff0ef4a26fcaabe1b6bb4d95a39ec915420ef9d35b1de29c5a461ce8c6debc13a10404b46353579d47fb714dc1a0fd3899364d0dfed8239a1f1da4872c5c9753ac01deacb7dd537c52e2847b633c99286ec6a9513cb7f7f18ad442e536a0159e7aa8c0ffffb1060b4210e5a31ada13714d206d418735b65f180a76878831bd7087698a228d8715c6a00713493b02028fbed4275370ea152f6140cdd2939a05667cc468b8f3b7d93af725abf2463ccce03e62560b8c4d6aeed0e7a77aeb4173eca52a0b27c4dbe6e4a1fcfe22eef3091f465b77ee3bc84e09f19fa1d4e1b08f6fab3adff3636bb5305b0db85f77cd1da951101b5ff1f3252d4db93b75296fbe8bf95755b071dfcaba6cd8390c831390faf930aee5614696b54fc4d2e024f797be0a101ac352a0adff61dd1ece936ef9a0a92db122ec4b093e6253068a66b0917277e58dc09876c55bd49cc7fa2b47be16eb77a07d0578f3254fe454e861534245ad482d1cb59aa77c3f87c323bd3664ea3aaf1b784f48eb0642e93c8ea73810a424d8875c3cb4daccfd3eaeefbba36477012480892c33676df5e22bf19ad7832a78f71ae3902dc5bab821d992c9276369f9885e441ed0eea8c35fb195ceca102514245667429dfee1dac1d1c1482ab82f6e3b232da9a9f75355c25c0fb5885e3070f0d84bd66decceef9f360fbb35f933e9cd6daa5f16f80a07aa89a3e18ab3e939ed0f05ce1625de613a64c2b4c19d13e6afac3ea1b087196388d916c559b79bb96969299c4f209cc9f3ec7eb7662a4c0f625d7f140f2b1df3edb8ccf36defe489f6752bb3417386a48c4bb8259c1748ae75ffd0186b3a943339a72ade4fb3301634c180c5b585286b33f0f391cbea966e6b01d6418d5c08abfd32d4f867a82b0874cccd2613dbfe98bb7ab58e8e1ab1a9b2120601ce05d7b8b8da4fd45e4521bb67056566e4ee75b76357727e4b3e26eadb9ec3ebb5aeae03fd0bfff49c00a0b96bf9ee0a81433a31cbf5bed39bbb72cc5816a461ccdce7f83a4669cb9961448cf418cb83a16098b27603ff40e81901a8a7f82bf68c07120fd12811dbdefd79a0afe09254adcd2d93c1d0b828c8ed602a5bd1df3c6bc3b8d5821f8ca7f51bbc9effffb7001eff7560500a7e0da69f2aabd4321285f48948d3adab3eb2447289c254b4ce286d6deca2a10fb56229a4ada7b1778a75aece4e74c439bc8d75686dd55eae2c10219f1fd5355ef2b89aa485c874308b8e0309364356796a9be083d5226e5a7559c4197b627d86ca9392053f788cfbba2199d09cc9d4b8dd501e4b5c4414381e87dd537bf4ea058165a84d27226c177af2cbaaee72ef96995c97257fa4d0c5ac0cc5d3bde71b59dbb135f2f960a232625420feb7c8e7810313e3b89bef3481926b2620adc382021e08d38d12bdcfcaf4d8225265565d06cf187c6b4d6db00a662576b0c804ae8cecdf09720f94355fa6f1583c8385c0a641ccd9b410bac3ce9bce200a99450158ac9630484c7e835efd322b23aee1a2cdffc374396250e02ca7c7ba949def1b03f1d0e08655e73a476c0d238e33f4841c7d7ee451decab5c31e94cef5428d6c0d4121a2a2b878bab77804d9f2af28e4e03f619293d282851064c7a593238a64d31eeaff33e08d850da59ba6e79d1935d7ba1e1785da030e931ed30704bd60a603ef9f4ea07a9049d8794412e37a2007517206eb9e71d692d9a1494ba08ccaaffe37d1297ec34b49a66780c66cb2e7c9fbfbae77442677b242909cec1cfe12d3508c03182566f924e604f409e9f3db0e25bb87432d6460fd7c713070d09dc3c07950b7734ae2446c15b5f085f1a974446d3623f790b82cd4c5a7c67241f867e7f72a60f345a1978fb40f28a2fa403dfd30f006dd449e25c8dcb8a159077a79ca487d91f0ac417cf05f84eee99a54a2992f7da29c8f82f65a203863ad97b073d7ebcecd03f52e5f3e66abb5d228534cc8a743899df80318f91e9b8fd85926d0a16fa26495a6e4d8da67d83ff54ad896dc36c61e5a049b083646467871e23a2aa7327d1b3e37f15454e1bedfbb68311b746c99e3693bb74e8235edcff2c986fc69d2d333562ed06c2e42b4079d070944f1a7137b4413f4467d4be608e35589a069df294f8601fe8ad7394c5a32bddd9e0474e7486313beaa8816c395cc3cbeb117a603e23657f83ad0040c49f4e30a910d6469cd5eb192c52314faf905d592c903c5e78dff7749e6b95168495c1d3cc87ce43f9c8f83fd30ded510c538c6a232aecd38954a066038e39fe4fae0d2c0aee372cd188df17a783bc5996ccd666998891a9baa9e7bd78bff5e06b11b9a52bed1ae96d3c28076f59a6509724c6b5575233c7530754e2c6a6d0a421e84da4f62b7e61150d5c79f53ab31c5582e1bf222fda159c95703bb5ead233b958529334516b7e112302d4ffcceca6190fb1edc5c78f7bdc7cc2310c3403737b8b4fd9ad06e927a8a5a28056b758d62af2bda506c359e15de3d32d952b6c4dafa9ccde29f3014423bbc5e5c2a4ff95d2548d50afcb412f65f32995167814a99cd9510a70c0babeca8ff26b0a3beac9575daa5786864e4d3dd34ed258c203708b4467c549141d7be546b17af823205b02349b20549d88232dadca4d23b24288c41295777e973064bc0b8a7a5205a9341b02e815e0b7f79a7ca6236d3ef0d8db8f6a6488d5f2fd61970406d3e1888e3aeaee1a9df47da49874e8e3997323cd5034745b6017cd8c5bbd59aced6d55d657b621b81f569796065b9b913b88f32acefa5a02670ccfe33877330430be138972c9c34a05cfacd5cd7ae6b6ba460af63f2b41e1067ba10ce20dba97059b6bb07369fb58b627646ad319f2d97e750d398a0d5381a32deb0f3fc715ecd2cd055241dff16b9a26695c0280e782efdda7fb97e9b869a8eb54f239ec6d8c001d8877c673ce0a199460b341f6ec3a75457e454e0698217b7b84bfb7c6e9fdf8509d27e96cbabe9b38f47877c4298778773a1e97ae1a3286a5247ea09bb2c92131eb6b9214dc0e88dbcbb28e33c7f46039848f5a2766232f33dc35deb4ef77e2871b4aa9b15d8248458d696d89ee069554049f7fbaa57ce0eb53ee5859c990a519d4cd178c64a2433ee3a5fc0ec5477f906156eeafffc6009732b0f6d2689bd1b0bffbc2ed1af7e28e756f230c753e86b443bc8f4e9b87f7fd2084a066f320ce1483dc931ba7088bfceacecac92573138a54da4adea24a2ce6c6703e5e92a8030dc9787260325da752eacbd98efe6f8cd839b708a93b940919cb7fb8026fbada6339d84802e37f9f561f6d38a328b95b679d5baff58feff560d9b6f69aafdebadd7a03fb4ae3f5d9d12ebcd050cad9e6ff26cf290bc6e25881951fe16e7d9c0b45350175805a47bf8ac2c087dd0d5897677c1a5c3307f69b45a9c15fc6ff7d366111db9cec70feb84b8182469118bdd569484432b57ab12474bda459e95d08a1fab7985ad64ba12bda1309f6b6149007cb325692d8489e5cd678d1b820c0c6b5d7ce40968516b88200215d7d92285a9756e15763e59942ab32834f62b3503ddac2ffdc3842f7cc24855387c56d7da1ecd2fe4f8f2494277a52852641ea34f77981f272275516647931508eb4913af06e073047fddd62d42ffc275f3c0c957cf8dd4e0d4d069c08e9ccc17a344588cc85bd204595582ad134f911013a639a52c19ebcb2919db140dc1d4d542cd08fbf99bb76543fdc15a7ef11ea1425356c033a8ce36bdb617c95baed9d23837b765012cad979e3b34bddca0b5ba1e4cb3217cd6e6c3f139b268eeb0458ef238e660858b2f1be6923f3fb2bb10bae5f6d1514e10efe372293d6b4d72a27c0f351866dd33b672ab97536897cc9a3467e633d84dd324259ee91b58de727b29fdb0bff09ec2ce3c5bcf13b10241cca6e29f4d1ee2ba3dfaf60ddeba381c2a093c306f864094f0c9858de2b188b7229304869f9db32297e4160be9f7e0fc49aa593889a04946a8baa76862d2719936793c30adfd25a8bc715d77efaa4f7f647dc33da0c73f3460704ff2f6ac736462d9f821fa85b0b936135ab63239fa31d50408c44773990ab29acd922097f4a54235d6df07ffead07f5a9c6b642f779045cd9840d03dcd16199aceea733d7bd86f0d46dc58a44a8b02a770ebe8132e37214b0047fd7e6202ffe0c24051058f7a23d0d68e5f1b46556a9a96dc506da472e1fccf5e01cdfe4de01d26586c7896170b10e4799ddd74ac11a47ca11f9760f0127353d79f94d84364908987081f361baf5e1f3297633c0b823570ceb838fa2b3d1f4c69297ba6aff7fb5a50c651c6046b08e53dde35230056fe31d9bccac680cc71076731eadfd014ae273a29c8ec7dd8b1b4efc4dbc006ea4f2e469fb55c9d4b1913763b5afa5045396ec7a4dd1fc472e92ced0dbf79abc6b8d499d38132dd23680f0ac8447cacf41d9f7dba16b694c40faba9fb68d64b76bbb347ead6cfccfffe48994b4fdd42bbdb37c0fc0e674b46a5cf9b20506c8264d848d557fea9e93b4c5e9646d592ce06f2d645cd1ca874653bf7551f1e82cd2b8f03c6ad9157ce6fc2bfa63d6e438b6fe4e950bfc9d09cba32b15c4a2bdfa8455082a05e174fc907f1fa3db18256175131ff8636be9620c04a9c1523f0c9902ccd33d6ebf8f8758e6a8cc125aa40fe455a675ae4335f9ce1c3f6144f05e7114c4595eec9cee8607d9cf5d51c5eaabcc6dedf532af0a38dc93f8dee2df3aea84e5a376c9a01a5f65ff9b3fe0817e9bf502fc5e39d5ef86fd12d91e7431286c19d8b86b4bf29a7c3a01145807b5e84927bdd99a09dd6c4bf841ec0a4211b05f9a45a127bbbbf6434e8642910e8ab11b2a468e8feaf009f096c7388a94a55b2bd0d364906122b71e69372ed33c27607bc544232726364fdb9f4dc587b115b038832b0b908450647452bcdf04dbb47dd0c25f9e4804d6c575db7a9ce7e28a38ef7af59d0e6d6c85acd2bc5d0d315b9182e74009dccbf8f42611f7c4946f2c79b67fd823f1659fa230b1e0b1d7874223f9fd8f6bcac4c662570b6b4574a022fdf6587ca423b2114467b7cfe2492491bb9ccbf3cdfa3765996e8f7f2871bc954c18ce8a288b9ce9f2b9ab31f84a5271e1d51b1536546b0021d566db74720dacec82a9aab8116d50358e57b0fcc4570a1e0cb39daec0aabd80f25826315ed990679eb1835a9d6b6d944e81f2f59e7c83f9a75c323e263ac4402f2c08671f696845d3aebe1817e0699761f29febc00904fb0fde7cec6e643ee8f3ac2b1f9c055d0c886702fa67126bc6307260e61246b7aaac0125c280705301a59e3461bdf5974627a5f807764a9caa21c9ddef7b7ac291e68dd2c844a62a12afcbce336a803d7a173048472acf23ca9dbebd0de6ef4d3526492d05a34eeca378fb9f9f8bef7731c0d099c26ceb29ae0d1aa84938eb8120d2fede8183afc03d68f54fac088a6ff28a4d938125e4d6dfd7a548aa5ab785d954748d44ce12cf67e7838762c9994a45dd6edf8b3b0351e465274238349b82e81273e1576abf41a95d6befcab76433b221fc25e89890c3451d6841fbaedea0d676c382c141fe3d8b32762eebb83350c2bec00ca122d3538b692febfcb1ca0629e62b198a3917eb96ce6cedceb54dc9fc1c7f3dbdc3132a3db046e84223a5dd6ccc754ebb3c5174519a15d37997fbc7e9a3046044629a6fe35973e1d5eeb84c248f67c85a31f60044fc3989f64485720fbc161c3fe6ae4b06ce7f7ebef84b7cdb97ca3072ff4cb6f85d9fb64da633f1f8cd7c19b53998e62d763266042ba695184c652d08909cbff426100384a44c6d2c40ff00ae42a067e0b95342af6d10be6416026826cb2d43c0bd5417a5251a0d317b677932e90df7a7ffacb9c8a8d31f465d6788d3984969e58c339cb713e3fa91e87c2b4a1629bd0bb0037455c335e146895d3618df3659eaf97537c355f05bd4ed05bffdb13ae29334211a61a67f2cec02ac1afc883d3c576ee192d0d3895980f4ccdc54a2898dc8f4ce54f139f827c1301cdb877ca63ab5524055e675f61c1f64972b55d15ee73056d1ca0f64eafb4c7c7522c1a1b97a8b0d5a280d237ecb38a52f540a27011855c3f423c20f9bcf154c7e96b3e0be256107f7b14ec56a8e541f5cfe7b8ab947bfa4fd08132254cca50900e06422fc62c0a7df9bb043028ffa3ae5d1afe3cf9cf45fb52008855d1a831cc4a7dc4dbc5a2e57d98c3c858ef3b25e9477ae1b8b407e5ee414ac20fee037eb8f94244a4634357faf2cf97356e505f32f958018355be507528b04db7f474ae02c4f4302e2195d852725eff6a28b79617fd62ec41514afc4c62e1a9f27764362617f415cd8312dd20a1c26f4b90d98104cdfbe06739466fc0aa5f5524095aad8f8cc273f6fa32dce1fbca756e494ea685e5b3bc596039116e4979dde10ce08acb7e0fc95f098e5e130aa79056b48f6d27cf0aaebc788b97c1dac1b29e047e4456760c845a337de740391a4e8965044b47046155f4e4b65957d8d761df728c60bd0f79337d0a99fed621731e6acd45c770006830973751dc9cbe2b6a19f9a3666b94b6653bf15b0b613e427e9f7fec784f5d8fdd17e2e6a80d152e49c1ec5bdbeeb044881b8a49a35dea18ed8bdf40c4216638a9fb69dd222558606f8bdd0e27b2fcb42a9027ee4d48df66e9a47deb3182d50325b64ebdf172026279cc4e32e054b485bb3e6ca16fae68ad019dde544700046fdedd03f19c8fad94c707b2828c507229b87acb1b90eb306bb3cc73148b159eef43d42c2079baa477f5c29c458212d010a0d9c5a547aba1138eb4ce94742fef01e34029c31f9fa19c74818e24682838fb12efded6fa5c4544e0eb535c78db7f384b857f41f4bb0f72d1c8ea87b51d37197d0199492f79877058e4a3e52f94e9f2cb28bf25af79588b7c0d43e7ef4e352c4dc367546d800216551532c6fee899e200be4c0696771756f1c32cdd7d57bd8413b9db812b0c2fa77401827a7d4329568a9ab83d4010c655d19ef7d0f5a65ab15d396867fe7a7ab4243e15680140f2f0a762766242f2d01889d5575aded6874488e680714e577dcce43f5e18414e9121059a28ee0589ef1f891aade39f54bdbe3535d625913fa3424269df13b3d87e68139622690e325dcb5de37df3bdad787ed09bbc0d6d7f75c4bd621ae2cf7b3546600b054bc3a8b6bc86a44a13c03d4216e9acb48149a38fc4b39c93fdfab3303c695d440edc49745381f194cc4da0a506fedd5239ac583bb2d39dcccdcbfd09da9e01614aae913120de4fd0759c640bdf6ea2178f0bea141f8bda47fac9d52c718c9bef57c11c57c4fa03afa852f40100e79f6709fef5a37b4ac677ed6ab812b1938130deaa47729073d164ecf7dd0f0bc829e332ebe75456af06ef1e2532571b7155e847c0aefc13da2da2bbf19b9050aed5fe82595bc122170010158fc0541f748e782baacf6edf7b7cdb8de69c2f8ffa282b70ddbf547e11468d5c10dea41e3b9f62e2df053553f64391eb3d6b571a38a4ec96cf8e98bb2c4ea97a5f09c1c8251d3b05c3fd0a01c916484c7c95917ff8b0d46cd5460879d68d06c8a0ce378dcf6c631cf02337697269713a0a875931a8e0556b55722e3a9e8637efac987fefa9116d90f9f4581b60b1af3c8dcd28cfd7c801fae69f646df2ce8f57c8f4f55e30b0ccfa380ce668329354bc7ce38abae3bc4cc3ff2a558451daaf999c604259f4af03c130b96d00666304323e56e9837b51983f15af8c2e6a1f0b0d7d66e1837380a47e8aa646546ab520566883efa9fd0c96c4a09b42cc7a10145c12855d4b2bca119a9c401cd4be1e5b617216e7aef761bb1d467a43df20626dedc22810118bdfed9dec036b11dee2f81bf17c7bf2e8e567717dd8f9e6eb6a7a4b22dba4872256ab01008c9b9c5bc798ce5d211726400c3e99ad13cf7439bccbecab2c751c7db2bc6c603828c4a310aff11ba143a9ab4aa2ce5ac74ef7a9cdd54ac1771c31fc7894288192bd3b4372c03cc3797c0d791536b80d7ff2e19a02190e1c6804682d1ce4cdeb28a350bb525c09cb164ab238105ccf4b8a55d2b91e198f025bc84f9e1400e5136695b58923e5d0c9041a4866c0977c7b92e24b5566594619eec228bdf29ad680d8eeca3b8bf02a13cf7530938a8958441612ac1d7f5adbd97dacb41b3cf54aca0c191f20ef0d9e51d4e5fb3ce274eb0b7071856fcd90a8a7a4c2521457b29a355ccf24f7c18075f9b0d718d16d1c9d585e8957dad58d553ae0bd8367d7454d79576b6c1ea81b7971ffe309df8ed2f7a12cc4a3dd2bb339d9bdf8d854404fed0c986865140710f160fe745ed5dc2a728c67bde9e534b4ef2a98fec1880714f1457c5090566313763d59157852b995a6609bcfaa8184d4ed940e59cf61b046e2da9fbe8e745095806d7c40f6b4cba70bc43594664090c5bdbc8a74627fb0584a325efcaffc3409a887f4715a9a66d10b2dc1869d90fcf9b7fa99e91b40abcb8fc356b5853c920247034e4104723fa62d13cc20c0f10dd394d4b9226a42e7033c240353aee40ef1f465d61a84baaa88fa0cc1fd60ff57f5bcd174bacff516b1c7cae1617d50ef6b293648786bf22c1bfa8f2f670e0a7fd2a887390cccd5af39cb3e6d697121d7d06ddb01e52aa758b196f1710818a0d9fcd05c82a2e173151dbee523d63ab53cc42afa9eeb3158a4fc67fa436b2160ead6ccc7fe279e5becd00b5591323ab9a2a8f8eb7be52074954ee60ff2eab8b946e3166fe7e553de9ae3490631f7e17d9e115044258d7889ae4b79892c013f1862b425aafc66c299a3e9e08d82a1df9f837fb98b282e9a065454cb1c4b69351cb2cc730f98463b0b9c367a421fca858de756ad36f05305892c0d333fcd7d2b24db9e971437ee5da2e86b6eda45dc63d75e2893be1a956b7099d75a4a4ea791cf31acfa4f77d98b0e1cfb46aca151fafa4c8815a713500c6b324598e23b82f97a596a3517c492439bae688a3fbeb5cb6536d79b88573d88c769da878e1099d2c4b768a003aaa327ea2125c20a0a9255a6a1a9adb872986113b4f89eb46a46ae2ce03ae3a99686a857f9c556a1f1521a4d2170c4ddd20b25deb83256eba533fc214823786014a73583bcc9d08e2f8f99b71acf696f12003796c81a389a5dcc4d2063e4d6dda1af6ffbcea5c824f1955483021803c29f1216ca8912cc46f08a01c8c7e16768c9e9a80ec3eb961d042dbb1f7bdd4c9ef5ab53e85fbe8a8809f7ca88f89bd297f9f08e5b110dd2bcc3936e0afca17c5aa2467f7ed06febc4069ff7cf5a8680e1be4e736f5a7f06babc70cdd3e8e74b6c117dea0c7fb9788182ed2a2a82340aec937e0799f4c19a6d4b406ae8e5211269efbc341fb22da956eb59c228e426c90ef5e9bb897478066b1c8cb5d865d169ca898bde070c3f06aabc70602914d143cf722bffac5e04e32a9cb04f20df9aca147b6758710260090382cb84c988b623b474bf448115fab93248458730d6cfbbce31c923dc293338d7bac59088a457c1449a1e4a9630bbe108abc70ea6dff2a75e493bd0b6e51b1ebde0e913c51c38a4f63ec3525a32db031443bf35e15fa6154b3e39ef7fca9a131c81c0af2d44db575fff38fc4b90da87eb8c98ad8eca5cae2b6d4dc0c55e32be8a19c6931fb2b240d847f9b8f8df3cf804f2edd5fdc478aa6562d204f5f477997d0575902aea4019f5a58008d07274dbe713193fbcd2acc28fbb811ca031cb0c6bf15806bd50171b3e94667c610f049c0879c54b4a594b6f10e3b58842aacfbfed59e8677588b9ed2981178438e98eb0ff735ca934dce7088f57f9c85ba3d80c57ab9142b1f87b083d180da0b6b655d322bc59b9fad2023751a4c86d69d1867a61630d2911340cf4ffc5c36268da0c4b189136fe1add1f741e36abe7eb985d92611c967b01afd21bd7f6d339dde904b157be9ef5f362b1373baa0eb85f8cbfecfd44d7c901d05d155c37b7a77447f17e5680dc2232e74a09306b7b5f44034fd28c583b83a05a1059f304eb2bca9b353a9b84891357ff5c52a2f78c6d27b06feb94d35c4b5b819e6242fad8475f47525ead262049b0ff6abbf9da8c327908a2b0bd529470920b59b6b266298a90d0db52e2023c25fc8bf79dab71257fb6708aaa5c328ea3f24bd4cfc7e339560dcc32c000953748990975803e77d2857e8c8a30f80fa555eab782360a0e924a248dfb2e5f5b9c11f51c870c395b0de42fb113fd275672f6e9f2f451ef24cec783ba86e674c1e522bf298e8a1277422c5882da57509372078e72addbede2396e99d67890d774aceb45b50e92606919ce77762ff80a331d2826bb111c9cb38c9fe54652b5fdc05dec374379ad89acff3b0b0f9727cad1fea97130c09c621512ebe49e77ae6e4172a5f259724424bf6cf281b3928f08ec713bcc782ee3d47376c316438a129f747599056b6aee982cdda58a16c4964aef1f3fb6f5ce8b6a7b22c5f8e9fc6b17e5e145eefde6157a51db94728d8fc607567325bf3e31ebaa8891651ad631204df2502d2d85565131eae17fd99c76a6d4bf079e53b5cb9d0b286d10eaacdacac8461ccf3f963e1a553489a83dd7fbb129853709f2f12e0812d6f069e6e25bc31d3dd19ca3a52fd96aeb3eae0da4916d8c459be93b84cbc54810d5c0ae0b36c193660925d8468e36c95b6b01c7a6ca34637ca0bc9bc5175d117287c59e7bee2ee14b1dfb6bdefb8b2721b9440a4328ce4596e0147246a328055880d936d904637d599a7ddcf2da7edaca83d5340e1f63a930c4617d9df1beaa4f4b8c1596fc17de0e092d8a06bd5a7ab26545d35c20bd14b6e8241c2f85a966d3525e993a47b479f4e4ab11af06d67d75c80676d1df330ea5a5ecbc6fd140c1613fb1602769b1d79aa7470240695b698146a77cf3ad6dfd99981bfcf3574d50956e34d902f4987d6bebb1ba5f3751b5614ba984360db677ff39524c4e99f78acc684982416af0e1e50c4bc8700371e792517cfb1d82a4f432f3f038c61c07d692b87fea672f239ba293a5ab1750047690f292601ebec1f8f17296311e5fd6da74c9388ff8c3d911011c3fe0b9afb1f8e9a99a41bde4960ca71fb4c3abd7ecfcdf2513c15acb69d89d007af7db64d2d518e0f51e8fc68995b065cc7ef306c2b45e56824d11985e58d2db075ef1321f918b232364e8c7252ac9ef5da1887ef0a76ed81481b1dd3f185f1635849f79d0c4ccfab5a36d58e1324016e909e0b2ef2c8d244aedcfec84ad7e4ca6173abe9ed56ad21c68920e5652bf66eee6701526ea35b5860fa058b77edce8d9755772e249c143d802db59fcf29469dfe5cb482036f5266665f7a45002e775403d8a2943a88cca7920cdce3da86b9a5c7656be73b947d15c6f1a51d6e01a7c6abe27642b6819c06030dddd90cab172b516b6da99d7aa40e8a9acd3c47d0258b995c396120ee4e03dc17ffaaf0fe28daa55403efb18a91f9ba413cc91602ba4cd52f34180139a84524148c7e0be8b457ca0a75e1002a0b7d5cce38ed60ff2eb16541af90e0c97375e3ebca7ce7d2824dc8730ba911c3d9427a280ad0af2e4961537cf2f04506763a228402cd0b225b62a8790d6c6cbec4f11b39fa998af9d205a7c74461b8587b3de8c77b98ff42073e7103c2559a81943248e84f717ac793446709ef0bc22748253d9c7f064c984e8a2bf87389227611ac081d537f060152c79d2c3915eadba79b29eb543f798ef8eede4268338c04020863c04cecb60dd83550176ba8b9dc5d47b59c436a0e8acc1193c8e979619231ed61ba83df1254ed3789b2ccebb69335d0e89794b093f6939c52723e83288a64040bf14081a33e58754fe5a6076966f6dfcbc48f38913915362128ae7a695364f5684ecbf9f034e396aa98 +MD = eafd6d27d977811907ffccff51bb5584dd97a723dde7848fa13c6fab + +Len = 74232 +Msg = 64f72a3ea966662d300df72683a4c543dacef9d6d7f956657385ccf339284a81b291d5d5204bd77a6ee5b9086850b3a62888e3ccd0769d4e7f1603967dd5d530b93d8a8d76d39f0041402f0d26b0c4e323786d27ddfb10f392ce021f4f1ad5bf634271ec13c666c88f6881bc258d9e04b5e5bc6e654e575e95f6f21616c0f33496eab37c5fecd6d842a3d89dcdaee910c519fb29d038199771d6fa033990d6993c7b78c5c30d953a403a5c3987dd4e103a5a50e18581fea40cb6436f224f26f53c3ee74ea5f04bf673753417b9e0740bfef1e31ceef1b08f50def4e238c88d517e7b299f6e5ea112c19b89c0cd800509f826dd657250d460249536e2e3c2b1b4ea7a6540871f3e9814f682ba2985a613104066417965151d6f2531f98b043a266882c4ba56fbcc8f53cc488f37b7012f2e89a53a6bf918d01bd40cae9857d1b0e0dc6e9345baf000666602c65ddebe683a47c3d7b1d488800febf08972831e583ad18a56bb2354f2340cd9e805c185c31cc3e8a0b1be0b3633b104138250c8285ea7418820ffa06da705f57c9629fc4abd453a1ed47f49f96f7071d32e86782834a6bab3db167c7aa69b7d0a78dece040314e4d882deecd1ab6e5e52dfecd55fa5181e5e56308e1f1a14991b12a8a1f9d77a0c5724a599c6cff5f416fe4b88d597439412f8158166e9b97336ce4f1e3222bddb21209afae1c34b5aa9f16b3892f3714556298cfb57fcd230e3139aecb6ca2678c0e086b7296fb8b99322148e9fa2e858b2515fa4f93ba7fbaa4a52b38db9fd0bbcca3078a7bc86395af70e31038bf0f6aed85426548e7ffa14d93f1dc0d58abe9b4862e46190fb0188da20cbc695d347d327342670dea455a82929d0560814b7e7c1e2a361d5613aa4321401f1aad772a8a4c64f56115c35eea2d8745738e51e279d795eaf71fe0b3767b07d8ab146a0b6b8d4460d11f0c26fac14b2cc4f431ce443efbd514e1b9dc8e1bde79c9166f883cb24b69dc4a823b2b0a432bc3477d9a51d0c675152ff18df0702e62c3480a3994680450f14cb814014519b2fcfc97cf2929805b667f4a3054349234481dbc8808fae9b6ae8a3039f42e3952d08802d530a5a3e89744066c0fc5846eb60c190be107661b62776d259a022cabfc7e61651ed1bbbd1602c8a9b9bf8f62ab97823dd30a23ffbbb8d15f698d5dfecf4415c73a4a323961500371b86f1db087449a86556f8dc428b30f5fc91c67fbd77da2a4295ba1fe17a0494ca260b9e8d7a7c47dcec42e1927fa69af5f3bb503838f9a645292857b97780ca2fe30ee7c1b1592acc5946f5f47f392b68257dfa6720e6f804c8b47226f4bb00d226c15dad022876bc05cdc16f732fd0de91d4265215e84907db281930d9fe5f3c55eda95855305635589eed0b43d1b3de9e877c000048c1d7c84af3e00e910ff4da5a73ca93baf0beba8320d0d867f9f0b460a379ca4f87fbf9e3a93d7cbc37821bd0620ca20e6cdf934202c71839cd9c3b2544c55942c4fbd4bae24f09c7006f82171e256c74f3204ba43cf7ec8e556b9b9f06ed976c9f60c399471f9ef9914275f6501dd834ad0a4a7176693cb0b9e43d9692f86b1441b02d467fb4249b13835e37a0fdcd95c124f8715723f1e5229087d28feebc81d1767a8a331781f5adbba4a0b5cc35e057f6be6b882ff176b8f5e21aa6d774fc7837112d0b4e9f4f8871affa3892f75e99090229b19526aba29db7377fbc7acd5e7d5cf7ae6364f1cb2de70cd057fb54ade42d71795b77cb09106cf2c1a4b63caacfc2b0c55dba229f77b4a02624290dbb10a80c888bcb2014d46b111498109185b6ab1ff745882c2cd87e7ce10069d0ec13dac2872c0cf0ec731a5c229f701316b97f0ded22b65599d7ad69aaf4a3e467772a5a1e472184b875e39d90c1be0b8660a7424ffc2be60ffda92f2907bf9255c3029ef4e3f224a1602d9a0906e2c1fc338986c4dcd126b5d0da960541a522de80c954b2086717cfbe5f1c3377c47da1bb8ea1f4c98f5fb4daa966e7aa3ddc2935e645ffbe68a76916e3ebb61b4d879c7f1e5a88cb4dd733a37c66764b70075f6ac339840edd1a97f120cf3bfb63261607a27a28eaf3d85bb1bc5f5b2b24eda7a8c7f8e9ffaeb983d67e906a1defa437dc80ca7b2f6aa8538ed21a3d5242d42a755a49d59ac3cc524d65f5ea8bda472685220f2aa1988f44c2245cc5c9b305105ce4f5f0e6049b2fde3dc8644d0a580c8aee14dc4866d756d31cf09b975dc880e2cdc5e3eb5a6d40126ecf7f69691e10744ea03a2dbcc6b04b219d66c42a65a2917e7e56b1ab8cad7060d3e4e9dee35bcaa97aec5783a67bb29a2ace5901239ff05debf041e13e9f817c9b3ad450ed1414676b99cea1bdde8ef1607d5dc94b9f87d3d35aa2e2cc3ecb28f12a33a98664dbef3be99b005402698d0718d86c25c9df49fd3cdc987eb1d8cd9b5c0dd0f473a5abb286c586b20fcad6e74ad3d1f9467f25323cf8e99b2130d462776aad7f68fd029715541d212c3a34c7b854e00f3eefd03a05fdbf6db559a30e245328716c685cb44151ace781400f700d6681aed8b8b3dd3df3013a96dda4670ace2910a67021cfafc31b4d3764cfabef0e9c203c6135e38de2974beb443e34d2e698a63f9cbab10ab2529b762edc3e075619ab9372bd139cd368e8dd14d83f23a05d795e748d22f827381965279ff1fc45e0980574b53613cd5e5894d7dc4ea60660d12c8103ea2128b70f2dd67e8e76e3da2fb9ee841499d960e53714b12a021f8af8d14a85d02fc0b6c4f5c3e2db1f39edb7d8689275d7fe57d5ee54bf9be0f3c1357458799dc7f41e81e67734a29c4e027a896a472174442971e31e6e69e88beecf3d31481993ced58e2879daa9982b02bef57d0bdf19b3bf013bfa265bc1eefa0f555f5b0c3b55c433e2513eb9b9d6d3cc432846796e5401cd21704f3a1424cb3de46a193e6791d3b83d88c699a7595fec9cf460b51a2ed71cbb0951ce88364ba111d8e977be8beb6460a5dc130bbc8c652868c15cc6492a38314c94dfc62b60820533357ee84af2807330e7ed8d0544810e0cd13619aee067acc28135750bf42ae802641c8ed6d254a0b24ff0d43e6e867768f90abc64e3f254f17e973edfeedfe1cede19583871280db27be4896ef2bd8a059fa2567319215063f4cfc9ae36ea181e0a3ded77b944e2b8d591539eb86e706a2dc490e46c3bc9a04ca3bd80b493b67a524ff69b90ef484cc4bedbd5a7e1501f093912bec38ae62eecdcc35d5021e36a1d191aade07367f7b035c91ba95d53ad9dc883090554d0973e42824ef2dec677d46102b49016664001bcc478a52ca19b4f3b8cce1ce2ae63a89ca35a82108828ddf055b888216db0201c74f5849461718959d414ef7ca91894b4cd8ae8005006a18ebcc2b0dca6cd731d82992cdebcb8b2e904e36669e9406950a9e50cf647988802dfd8f08e37226386966d8651d9f731b4c34369f395628f39de73d6399566fb16650530804834592157777a37e1b67082ba3de060d5076e37153c2f1361f86090f74e58fb028dbbb46ec1f1d6fb7dd61a90d8b3f9d3b66e11f649fdcad3d720393cbd50458cb4f2088253d17850d5cb46ee1dcb06b4f7f79128a12aa7158aa4d9dd5900a60f3167e53c3304630745b7cc7c120ecfa352717d544c9cf24c995338812a5068b38d8112446b70df49560375e1c1659bc650449e21533df3a38d941dd13929d29f4fa7594103ff363e8e1509c632b8b44578d8bc38bdf3f240ecd152748d712bfcff4380dc0198ae0d785650d26cf0604953959f4092a8364b41719d132e12bcf125bc50bc6f2291df992e12ae77f3e8fa67e40ee2da4308ed11dcc75625f2cda74a7a9189548725db7b0616015bab947f3f2bd2c69eacb04de67998e479fba546f5e50bedb9aeb32aa544257420ffab0160d3b393e6cb769547b2d76632138ef5af65858ea57f82f39f5207afcfd677a7544579f2b888a1eabdee4e835924cedcff62c91420e2dc5ff2968459701a3e9aa2e8ec8a1ecb7b76cf96c3e4f515ae246d449d2833bf0796257a631a09b24901d223d4041f7c4a610510ff310ece76f58173ca72e4fe4cbfc0646e9ca486e0056c60f807c38357d3e7c5ca11ad376e76c45718993d87f3024bbe6b84487e4acef906213c13c8eaf3fe1deb2cd838ded0bd584e46464244884fef237dfe82d183017d174a16334be9d1812c2b9ab90d2af5df362006188779545f5e2dcd7abb4c0a2ca2dbd5adc1dee85753b6f8a244adf25296d085ef03fde076e43cbd4e51529e7d8a94561c95facc082974fcdbcb813e1b37fdcbb1013a7d9c7c53d6e6dbbd44d7961fa36a106404fd760ead4ceacd61a0e150e144c95bb239f01a212aa1b585a29024c47d7745189d022b13dee9b9e14b5b70ce92a38607b50638a503ea61e7473e4abf3f15c4914f947437770f6f48836f079a81d7e4057887566a5700e9f42c683a9e96310af67df6912000a5141dafe3ba4efbac9c33ea3a1b7910297634bad89c696c123ecf8eee29d662f3d3e9398033f0e76bd61a74e930d914ae302e59551726a80189a5ea45e4628341d233880e1a8b2c5dbc407c5a3c924dd73e6a72a653df324613fef9c36ccb4dd7398304551624b4c7732f6c56e8ada1ebc8706b94f99bf2290365222f6619a7fc3161151cd0c566f4266faaa5dc31fa34f8c9aee7b163d0f2815fd0527d5578fae256232df0752a2bfb86a00fbf263ff8f4fca167223eb4e8b77668f55786aa1773e9964e1d3de8b31afeb45c39955880e491aedbf5348654cb3153de9cb4249c0ca3d648ff2388d5ac5f5053f4852c14f1103c0dd14d2e7ee518f9d6f5e7ced1d70b4be33f32f3d9d92fdbbe95fea5fb4302b2c35f9294ae2eb4c2a40a2890fdf9a95ee6856f0f07c8f8bd63c708aa7f01ef7ac6470aa02ccd8c1712827e52699d05751b78e4c5a6a2415d0a30ac24e6535dfbde30bd3b3feb295ee605f2fc5ee9a8fa48c198fe008e93257d78f1f97962d69dd2c2b44b31b01101e93d8b7622051953360893a05bb5757c8348e0128056e1c86ca6f6b94843ce66e3cf51a8fd1ae0eaadf4de94003f6fcae3487f57435707e472848b6ecdcde8f79c664c7b39508625752d80c337530978661fd8b0098bce59ad037c510775e51adba885d51dce926e555c81144819ccecd475f3061c1dc190e5ccd04940644f396a3d03a0f0bd8c2c1629ea6e7aba3f8ff5f4d63fc23365efe2878f40bec1adbb0fcecec2fb44fcc6803bc2bb165eebc990428b4544f644df6bdbc21dcbb588089303ef25868c6ba65b3b11e2642c56036f071afeea8de5c94a7070c8ad686788bd836dafd8bd61336fd0dfcbac4d0aa358ec8954fb20d01345efa128ac01d2a357f7504a3bfe64d584a3355e36e98f131498e22ec1d98e2725005d2712a951c12706a1ddf577fef4615b1a8349276bb96bb52d7382dea66bb14aadac25876d4af759674f4f51b6f8cfa197222f2f28ff24e8700d8757a049b37698a02fc4ada68d97aa8a91b4144a961db3232e2a4d4c09dbb5e3186d0528f12b27e976879a3db169727503c7a1507e76766e8f406307e03603dd7c475b6f3512617043f9ba772d77c8f8edb3e4734f55e8eb9a98f19a72a063e3fd0f2d8845d34e1ddd4198bdc868b3fb969f661bd0611283965b7f6c87c2dbdde1ea00dae915f6d98e89b97549e53c6647b4adb1ca43fb1ccdb096e5e74476b371025ecdeb80628a9cf6a70979956a21481a439b05a2ab9f85c0bd6d59cd394ef57fcec912bd991950b2e9df20214515e1f8b04349272bf507b27c6ca6052e94b589d9362574a36ff2e507610630d5285a767a0f5e7a82049baf5b4a96965c6ef846057ced4c8972cab689f5f26b2343fabe2b690b42b8b688dfe36ff125cbc408e1dd0332ee520c1f4ef805ad79364f0af54ab81927d6f218699b447f5d847f2b80e634bb0206243bd5dcf800041632d246606451d3e39f91760b2f08e38e85aa4caa75522faea26472bb36b0b1ccd69ad7f4d578ebe7a73c2dbc995362f1c0cd6cb02fbd1d506de34d1f27882a5f21aad08e72591aebf161b735eb2980b617db0880cbc575f76f008f8f334f17d7fd495ab7a5bb06f565483bfe8b52e5e4711e4aa3af32dfa88f026094c2cc1f3d51c19df5d6655710eb38e2a0e3963a83b8dc58a045cc026db533e7b53cc8eb980558c0d36b20b6416b7bd4a259bd279cd35e5afff45b874dc9d94d7a090b23f00057ebd6cdb4cb92cd57388c578e5335aaec794923a61551b43db96b915d6e4d2c06488864e93d0af91536e744d2675925cddc053c76557f5ca754113c8674b870acfc709887b4b1d8fcf83a88510a0d2c4badbba693efe1aa5e46f3734dde38b4923216d255da905056a30d8bd3e55ba7ac11f3c9c58a7f86acb6999c7c54d6e0011003781c54ae4a6962e9b420a04a7e3932360dd4ce5fd9d7cc8c21d97d99dd3fbebef4a4cd14af7f5b546dffe2e2993a380bda87658b8928b253682d0289919465cfacb5ebc865deb6d81e3a532ce0f74bfb98a7f40b80e78d76db3f8aaee54a2dbf0a1756d456ce9cfd2d979c2f3cb7918daffc26e5a45c887ee0d9be11c1a83d157491b73f6899354a03df65f493c43549874ea023dfcfc8f2e1c146b90ef5be5954edb6128586a84708d95581cf645db788650dcd1887785a45c0c9aeb27ad71411f1fa5494dc1e7ca44f15e0d6e032601b0913e937cdbe3f749ef0f9977fb1cd13662c0d7de4be7240074d199280dbcba6015a8123e9c227d62362a1a34b730cc213f34628e6b1b042cba432e98b808093168b9cc623ad9dd317c7aec028465986c2f8067d291ebe1461c235c54b4b0848104e4307c2a726d341c929d55c523dc739e35564f72e251c9150290d0662ea2fb74a7dce10d74c3e6a0e19ca30be3fed415b3bc596086cc425f617a905edaeaed22852035366967c5a3e8687ecb3e860a208c1884fd61b73e35b06809015dd2f2b8fca8fd47c8cf5d90278f3d858be882493ee956abdbb909528fe7cee01fe198828ee58db3fb711af02f8f83cd64bce8fa4cbd42fe7d3850104088469db99d4b29bc547b0da9e39a3e50d7d5f541798aae25e2de67cebb9f0982a8147c836c8718f57449a73cad37f53c06b8afba84f3ef6b189d6a38b94298c6e59d1f25e5d8cadad38e233c14909f618a805f3885c1387ccce48853c7e7687dcf54f8198fbcd9cce09d1410d010a731d1d18633f25f13eb5e6844a85df9d317b3d099d6d0afa04c2a1adc635654975d7b20b735314a0c376b7d219ef1f67335319466c64f2dc8f92e6bee9c2db90a24f50254d4e90e7bd172b7a1a01a69c356c725019051b3be345c24ed33bcda5a28cddaf16b80090d59e29c37743dd04decf2e6dcad8eddfa8e31ca3ab28a2511e9642f1f917ce61b21598f7553d2a66d78337e6a866d18f8775db069a12c25cbe7668331cf56123fd83625cdf78f68cc7907303da362d152702e9bfc880958e293336bda7d9219d5df16e3a3a7baa3c57ffcc0b88d06a3732922d165cfa83af08d593d6c34c76997b66a4db91ceac3f2fd72948dcbdf1be4d2e8f537e08f486026569c898d5c8ddfeeaec860afa665df6207100fc84297122dcf7bd583350dcc0e99fd94dfc7f338f852e82cd863e5d55e28e7c10ad791a59a64d9d0f02ff79e96c1d520a490361d640521803fa9e09f326670441c14b7f9a94793bcefe692526f3cb7bf945bd2f7a224090d4dfed2779f3e4dfb647066a8cad64dfbbadf6a81f88919b3f7713672434e13267bb93808e52ed5799c711a1d7f9f4d1fe990fc97b3257fb07676ecf7b7d1b45e519f8dcdb4a6ab20fc9d6ec24801258c04a1a51e3fa05e4779e37312805d713757e840307e3433942d6bc151b4ba7be29478109fee6839cb7a3d453d2d4fee240749fbcbb2561345a752be2636199496018aab67501b96bf0feaffd22f376fb6e82b1d09f19aaeb7e2f8b1da5cad2428e45ff23ef508f9b4a382ef9bf6929a6263122085ac607a5d78b458c888f38f1da56e61715ddee73ecd8bb0e533efd2b90075a2a953560ac8d11bff8b5b7b59d6dd4c9598fafbc3aff66bd03837adcd1d58ec1fef76c9e46c7496228d34a308f6e470fb204cee339aa6b9ca1f926ade11d4ebf4e2975a7bcadbc96e68b519010063520ea1c4349b8166ebfb05d4a58a38fcebde0d258655669f1c4f885d2bf665d2864c98015d8fe6af790f856ecc45f5496217d9b1bbf5b2070522768d8a4d99aa74317d84c7655cf8e76408d16db5d932e55ed2cc89c15fdc2aa3bdc6827b3e63b259bcbf10d036dbcd952aacf84e4751fbff82c66e6ca256e32fc8b8c303a686a721e020a84516b0821f45420a73e22efc96644fe84c3c3fc54321a4ba7b849bf926825a2c387f2fbb7ef330f2db1c129dafe1b975e48fdf577a434ae7473b0bfed41dbbeb2ed291b010af0a7fc867b5259895a395ca0fbe0021b7fbb80b4c6f4eb71cc6839cb39f3680f33edfd0577f4b0d0a8ec6615e6455f5fa37cb1c2b2e5f5bfa1a74068490855c4a3eb1875de964698aeb964ede6acf53849f9f0e79d1a71f40284af0d82e42ef3e9a83620d7c183ac13a73e71229e2c6e19392669af1cc9d896056e020c0e5c62ad2c3d4c8bfccfd380bfdce9c3a26cc8ba4439910f7263330635658f0e0e48da9680174221cf92d49d08269df0411d0fd52213a7e6a4a9cdf9197dfcb06d59224cabaa4ac2c23478118a05d4d202a70b11dc9af35b3b016e18bb9c901cb2f60478b5e0ab965e1d87854d5fd8916d73841778b8bc97bed5dd0b22ab9477658946c2a79fafc42ab6c9a05a1eef540ae7428e01544cc2b58ce379569350ec0e79b1d188d19c75af65050bb8286243626c0c1f7c55e903a88e480b603a0ca0362e0d4e605dbbd07393056d6f677988fc6bac72f3a5dc822043d468478a10be641022e0372b54fe00a98f6f88c17b48604ae82e6d2b6d68a5134e38136aa36c2187b7301623af26de0d6cb90a20b2ae177389fbf3cfe3ddbd668025ccc10fd2f4fb96e5042d1371932964f2fd6b64dfa84c57838c798808f2a430d57b799a1a65d485a80a31ca07a9643ec2698ada069b3f196b4011a212cb3527f028798d69fc7a4d212f171a0fa825c4d357645c4979b2995e177f7a22d0812d1fd9a930ea4255b6f77bc74cb116d6bccacee331d0c90f9d021aab58618af10a0a98f1cac2becd87d3f629a7177ddeef52d7eea3c413bdeeff507e83f780eb85586c39a51cf94b8a5ca926756664a52511796df84de02454fec2de450b3ad867b15e69071e7935853b9ba4fcc9549325afbc497992b6ac96a776b4e4c5412178bf746939f0c8f54117d48c8666d410b9d5a8686ebc20bd7ea176e9a94e1c2c8027b82183bb6ef186995dc759656c84a72b46b31ff2a3bfd295ca63dcce53634794327a2ca7f1931b693d3cbdefa457b8589d12d35dc91a5b2a780cc56c6f2d94ace95a7edbdb42ca2e7cd2fc2c05f1b405b56ed4251936e1098acbac51f7f13117e5abbf80b365599023735d4316ba63d997ad68711b7c2cd90787d8a57319e47e2e5338bd026691393906275c5f1b8d7d4ab9d86958520343f82a928f6c0c7689cd3c31bb4fac3acec672a3a1697af998d6786c3757212fef649b22376932afdfc94cf1a1229f1cfad3a11938bb4070d344d46b00a052798453c2d0c6f2f356292a6dc29803a7fe63667ad049ded6bad69bb41fefbc4ba6abce87e4648fb7350ef886eac87b2caab18ae512fd58a29f48e3ffce293276810bdbd2a538c9e612373c7eb2581196e68d44ca257bb30ee7d1259fc1d98a3ad14d858b5c6b27e8b64bfe3f62714e4d7b9f9e1152ec7681591a687b40254dfe5d18d19a51243225e9f344b0423ab9b9318e9fa3e1782a63becbb47b9235022cee15c9e7cc8c700672d718b99adcda43cf024f661a46561bde8c11870132312b4ceb745b15cb6bf11b9e8142b17e39511fa5b743457f821381038887d34463633f43dadc7308ab4faaf18833d0495f4de71cde22a94a37b26fdb206351921e3c8fc50453306cb689e87733743f65d39df012cdec8fd0fb606fbae203c345ed1e0318f9a9921e16059dd98cee46f91dab022d8a873f3959854b49d4507184557165e5c1c4e246532d91be9b872d2dc6dde5151fdd01acd689c92f0030a278e09d7bd3658e670ef3688bcf67283b2a559d607393d51d51fcd5b2146e8ca049150a0e8becee6b9c801d55b4f8bab91852523cefef56da5152cfcda2254db11e7c20e5b45ecb341882b6b5145623ef1f456341303a4a82d460e0e47f2d591e1f9e48caf7c40f0bab7f9a74978a4d2565b73a37df7c985b01af70bd538e9a2f7602e883fc25a1387d01315ae69b1ea315303ee6a3be28ae01c6e822c750f72b48316ad96a896903b58fe32ea99180b05536d7162507e2c2fc2daed9827c575cc0b13494eaf84fb47bb218ba87745a964d536d8e0d5faee1196d2caa2d1aa408030cb07c237b3b92f9f038c4294d939b270e681702ce7451800dc95f7030c5783cc94458be1915e654d4ab153723150808ef3179ac5d1c5b5a95ecbef2c8a2f491715af262dbc5f8b7e3d97558ffc7251a7f2e7cb4138e47cf8eff915ce923c32a8b5910b8c7331048a72bab34e891398545c8e7c2f9b25d067f699e559c302f309fa97b67e848762fa7078174e65b8e71ca67847d1570e528f092ae86e8b17ecb36b2fb1843ea71956bd6bdc0010d6a059474198e71b1265c69e28897d58ef922d7db5873e2024ba27c0128bf429016692d556f9c155b69cb73c1f62f6bafe85e0a8e591fcc794a7d61ee8a1ab0cadac61d744e500758f69c9597bef6b3fc93a65733c7c50935b74fa207ab7954a4fd44ea387e52518e15f858cca996b45e412347306a0ca220da3fc8b352823406c90a1e08c649fbe70e0743c87fb476bb3cfd61ee0a9d9e21fa765a5949e05ad98441404eefde0b4a28f0def308fb02fdca5b2dd56f1f051f601be0635639ce037710d971c2b88b9eacdcb1b60b105f0a3465344e603bdf045557e2384236966eeaa070d9048082cde2f24577529e95ccc245fdbfa79935b71f52e940d47ebc0024188dee80ddf9be125b219fa34bad29bb2011910ae00e2006337ce3d6ba48a36fa1b917fd78f759843ecd97c7bfae0b6921f62d52b97327542324890e91403e11637abf42f8848680c4d2c686a3a059126d36f947cb6bb44f49689a46acaeb953855b4b1806a82d4d15b793a79f8cfbff2f595fb0bffeaf41ced07e44b299fc7d30e124474a6c3634580468f45a79d8788de5c6563c340070d9e49dd14c0aeed78b96b2976bd7897db642ac337d6fdac4af649602eb168f25932d60b4220879a9bf015dd012f20f7056f8c62daf76e82dbe5d367a73ab44a723322db7db9b843af3aa8eb9e6c4ae5461ae20aa9997eaf9e25910867efc0840b27b6da01fcbf8d3501aab1b90554f73feec2172e3d9c97142df8bf0b10fc1366891893898a1bbbcfed81ebeb7addb13563b314c34456bdd07770f7fb6ee59d26cfbe747ec24b63d246c4d6a04d5387d9022b80134e1b98558a904fa35a1b65ce741f195c35dd19eea5fa2e71ed450f9d52a1e5a8cb79bb05efed32ad52ec21c00ec0ee9c652f526793883fcafb209ce4dd9cc1ce4cffaa841fde2d73f9f6359e083a50c9c0d081ef97f5a735c774d461fba2812e32fbcb3282f9ac81bfc835dae8e20c7ee96f3ce92bd8e12cf2c03a774529b0332e1cb1a3b1a63c7104b096e9396e6e064f39f7e6a7887a2b0d9133a732b8eb679ed0d25a448a69ac696ddd5b7225f1fa52ef376ac3badeaa684644745cc67f45f596c1b8841c90ae6e4e7da41baf34e5a4fd6fd7e8b68b45a37e01611bd90858c2fcf46128b36df183e0fc45ae60a332a5c325d08f220c674f96eee00876f31a9771dec67b053e103ab3ddd292f0c98be5feedc73f73de99bd3f6193ab16ec05e374056b2388ad85033596bd71c6143bd5ff2c3e72327e577cb61dde6c3f3f952791fcc19a9428ba6de4bb78b3671fcd065265a8bfc4682b1ec95832c4568a52e44a295c48de2c3aeb5fb096e03a58d9f7872e8880c0388f13b7b5235c0348c99a1b1fbdc6bd44810bf51a9a80d63bdd1a0beb706dbc4bedec2fb9429bcbf763c96344489cc7fe2730436de60dc14530fe5f20d2ceff2ed2188fe8f30bf712bbe2e13b9f2374b597f8d90f1bef621180050f63322d2f6dd62956a8d7053b272c96e36a24034a074dd61492aebe5f0d44de8b271110c365648f229d414ffea15026086479a4be6fc358847d10f31eb4e9db60e0e21231c207ba621ac424c81da130be9ef290585ba2e0b742e5160795099c0f35479a10f02a4b93c5f22c0df8aa47748e415e9e57371f1b689dafc01a0e9104789420e76c66b346034dee56ced5cad8c6c85806ff2a642f729d28ded0734aef4f6a3f0bb32771e77729b4391cae4b49bd0a15089fe74071e576099a44d22a0e0e3c5d1450f717f68628460b4eae3945f5893e39c5e8347135bacaa8e3a5cf0f597cf387c24005f1b4cbec63f160256bf4b80c111db7c0abe7ddf4713968aa6195ceaaec83bcdc7787874fd9814e901a2f393704e3d0758070521f99b2854c836783eba911a7fbe672dcc8b29ac3f9df296f17abd4ccb3ad63a99468eb960603334f2e43f8abf4dd0b4eefa58a8ad33967dc567c5cf71b7136570b954115975f8d82fb43a53357b9b5503d28fcfdac976f035bdcd90a0d8a6cecdd755f8e5106dac1cb3eb3d8850b058339935e86f6a7a3669063f5501a477bdd92afa36ac387af8e268b81061d4f705a5d9b1bc131b8a998ac982e73c236e7abc39a99257f50703a85b0a93671059a482196d136fe68e5fc08ffe0ef85d744c9d8ccbd68e4ffc1697154a8f430bbc7cf1e2d0b42ad26ed132df1b91dd5b6f7da4acc9c8f84f4179d71ddecd9ccd0ad61bbb4269ede712370941413a94244953fb2009313efcbe748ffb30121b5f29fa282c2bf8602e62d96c3dd8cfc5c0e817c770f5d8085f5c4fe738a62968 +MD = 9289588d9bea9bf57f3534156ddf9b59f052b0bda414ab7ee53bfd41 + +Len = 75392 +Msg = 39ea2e0c63ba0bc96c1fa5e59a4e27700c0139fd5881c95672040b6ed03abe97cb23b2f5492387339958b7749e2bd78d30251971bf0516ec390fca952ea6e0fe331d302d84cb8750ed5da6acea708dd70d60f927a05a2b6a8cb9ebd7798fcd453781b39b5cd993882fd67a74c546d1b66a57e00743ab903631aa751ef71c0bd6a0f740271b753343296a3cb379d52c9210b5d6f9ef1ecebaf08b7051f27624173526e1b907c9f0e9a1c2f3534c4425d3c820e3e5eddb6c5d9304e558b0c4a072c0b79d396afa51e26086a73b87bc45e1584010b3860bf286e0bcdb1b7a2f054e07517d8f8a33df962e5d60537164122488bf644bffd6e89fa15c5a8197dfdd12d49d87a4b09a206ed2ef2783546516052242e895a363d70f9c8b6a7451fbaf28ed43c55e23579ed016e503b376e6d9eaec74a27ab9db473e9af214dceeac04f71aea3fa62d93e125c0e7fdcb2110e23cb0fa9ce08865be9462395f9fb71963e7253afc6514766fd6999c1cb39b0bb964347fdeb1592ac679be0754a6f46b5460d4dd04812127d24969ad68542cfee6c841a96ed37452e6557404f9d9edc95fcaf1785fe49ccf92e8f8c1e9941e11f1d29e2056302104a7904dd95820e95c0d8d42b61674cd95351a0d81a85cb76e63e9158d9eaea8688f92112e7964324be511903c2f1bfba245467295ac95413ac4746c984c3750a728c388aa628b0ebf70bfa2b5b5bf701d4ad6eda4fd2502a09add6ce86ab263e9fa8c79f61d7fc6e034fd42c7ad4a722fca314756a4f643c66f8bdd26ff0627558b53aebab226a1d5bb34361a21a34a004fbf4855a8ee4bd4cae687f9141de5146681ed9d276ae9c78dcd475718b240b760e8b74611f764f33456310ab0dee44d107fff478632e4dd302e3d269b5f9b7d86145dd4e8f8d44b3443a501db316e2912b4ac61d765dc402ec1e02eb192a57947ab03a534d8e4035215a9859dfec9d0f587bb9320ed17170fedf8186233a4d42e156f61fd81dc431634063eff2d3e694162f6846bb1de8b59194c8bb62ae1b5c0ba6ab14bda0435090984d508a7151d7cac23ddbf9978c496afa530b65fa4458703bb3d27cba3feb2faeaf2c152961330cc0b45258d2fe94d16cbaf69bb35ab0a562cac983c03c99970023c30170974e42c7665a375492307b686afd824db10d11c83a6a7156abc47d4925c5fdfb56721332ce544390f994bf79ed80983df9c65be89d55b3e21ff438c63f95690e3156e49f46c0dc2c974a141dad406c189764da206debca070bb15023dbc1c13dba553d697a208f6bfdb91fc0348d7c421c71132c26cd2219e18469ce74db851e5405842de303cbe38f7a490e1df8276efb63ad58425a6aaf53d5dc42b533531490e06f68ebeb1037eef61653c3f11be3b6c4ff215b13f24bb53e2e1cf77989a4e36e45872f370abd7ec51e3dc108b834c11d8f33eb9a57539815e5a9c60eb763de17bd15178809f8c16fa7389fbf9af6bcc5d3fc5e5e187b7f058995ab636ac5e3651caf2f4e9c8e494e67b0aa76229e0c5673e72dcfa407dc75805d1237f24f95ef0a91e10b40d298f9d6528beced9f3257d580f47f88ad22fe606c84dd0c65680e0d79d74e855a12ea597abe546a7ec1428f562cde44c00508b0409dc307abdc5a7bd37c78d8a969a887b5bc6d07b12b9ef7d3517c56e4d51ce675a79a8287555cfc2b4b2ac934eface77ff09773dae3d5a584ecca3d7025b389884cc3eb8c757e04ddbdc4b581277fdf5615640d508c7f1ee75958671669550fd4f7cfc12fbf360c875ee75c129399f5c4753352b68803da8741a7723c3289eff8232ea1e5953d99a4a8f2fb6dd673b147aab5d281690c5ec12027dd55f3baa06e7950fc5289cd22b2268831f742a5a85c204c0b2591e112316f6a16f84f7fd7b444e73edb2f9d4e3c52078e437a98317e60767b27b52aab6499deada78841ec462041e7f3d90662afb6016ed6e0d3e32b05b5911c255170b73a060fc8309954b09601964128910688bd06622617d133ee6a89eb5774fe08c5ca60bbeefaeeb7700096b82790d5a053e176f6c57228ba351983f88e1678ea0cb58f408029da7af11a81cc3b944cd69dcde3ab19a232dc9b9d143714ac6a8ae895e22c306fb515d02e5350e1c55f0fc2dcccddb70a98218e6fbb257f894b6205f5f9dd541f371e89c67bc4ae8684b27f88a32d022dc11f99fbf952434f8415d12036e28fcaa90b8a7d7bc6166a7675007bf717af7e362d2adc5f3bf461ad0cd6df39ca37e4b3535ebdc3a3ade38cbe1201490bf39e7fd0cd9b4d4107623ebd837d72f2d11fce9c7301f40bd9843ff400c3199892e0f6b10e93440ff0c3b1ae6375630b0fbe533d63d48d5d2dbf18cd793bd93bf20843345a5ef40744f89e65f3619a61385309bcadbfe0261f169f90c7c618749556ddd12d78adb578836d6abfcc8993ef702a90bd2e9ce5220d4ce4991c47c0f16f3f1e145b01a9000697332510a11189986e601eab2418db15a94f5988f7af8aa3ef819b8070307fc4b435dfd87178bb2e1d914ea0163fbec22d2775a698aee5b757a21f837a1a5c704d092c7e8b27f8c3e0bad9c7d3d82185510399ffbb2d96fc1fd63cde9f950a8bba23a79d5ebda6dc30232c6cfd60b7e1ad7a22eecfc9f2f490b46ffc515f1e6993fbed9f5c9859e98480d319f367f679aad1ad1e57029e3362b325572fc71cac53184b0f1546867e665a4a59466c419fd1d094e8e155fd3afe68f9999b6b69c6700f6c570946b0fd5df61ea566dc4dd6aacd76e8ef32946ddc2c691e14caaa4a9327be21b9277e08c40abc78e5365fa09e4edf98e127086e7493d06f3c53429b1517acd9a557220340fe905e42191ba034cb1b7357b1ad9f6035dbf76293b75a7e55d4f94e54618f4d5856cffde2f63806c8c702c35118832778e861380a9ceb4748b30b24bd910f519e6c48892273ea7cde7eb1a483bdac22d392172d3657d00886c389b8e15505e6374d526456193a1f628f1a8bd8219cfadc4593a2957c9b2a8682ff7b6e01f583c97678200c4aa966fb94a7e9bcd8b808099f6138b67fcf25de7dc70cc24c70b2ab74143ca3acaadc100be43ea037afe2d1ec0a7007d5dea2d5108acd6c88e9eb73c2c12acab3c0e7367159fb20e2c703cbd7f9b908133bfa30e7b53dfb4bd3a6b8ef097adfd49e20d54163cfcd5eaff35ddfa9a435bc79c4486fd0eecd09b06cd155579d519375118318abfcf40fbd3a1e5fa4a22f361a79a2256850704722b653a23612ce74e821b6539d33437a913083f4753343148082c484d5f373888d0bb6321f6bb4fd89e9e58eb1e32a23ae8f052a95e82fec6e88261ac448554271e58fa18e1893a1bcc29726848d169f779e386e8131240216f25d639def740953dc365d0c99e8e6035451b77fa197528ef6843cb19eee1a2c49c0dbdd298e41a54840e11570335ef0079bbe2dc13ac157108f11b191ec791106f70ffcb6d28008b245ba333bf1510564eba6f95c6f7052849f8a0baa8dc367a2766c96f80f58d0b2ab64d04da180b5f4b80e7ce3b3f423bb6c122a59606d82b4b56e166d8310bfc1e86d8725d252742f875112e786a12d3d4b26981f02fc14a63aa10597dc6c08689320d274f23ae28dd02b75e8761be182d343cf7bc3e3700f7c91ef0789af5cff124b1c8b8fce638838d9f05700d8d3148b065af041b8375901bd3d2d097f102e1c38f00a197189b718092cc3955c947ad8caa50cfaeedd0b508f7a88da4fe45de776e7411dc8b782f41585bec20b881e532d48326dfbc3aeff85119b8a862c072a815cf10b389f8463ab9599058a4087708abef10963adac553aace578d669d24be4db7a60458433dd17d6e2ee4d303eb78f63d95bbadd9bf81ca6e753a52017c21ded4dcb741809c706b43cdac8e9bcae87f14bd365e5e65ea79a217976e16033a90d0b9b48cd8ec7e4d8075981cf89ac20c1d91ef959240f77f12478c0104406f2b5045e38172b363e9cd2e90c741e66d66ff18ce9a9cd70ea3650c0155f3bc2976ff892d68777c8607d0017cd59f335155635abcb4a5b299ae446fdeb00afdd13a828c78880ecc517134f5448f390bd6a0f1609f2cd55afe6956760b5b718dcd3f8457ae2a602d2bee9f13d03d38f564115031614a5356a799442b709e51f4874dabf0b59694267c45ba620827c37a636e29d5e856482efa09b596f6c0d2b8652c9f617714d340ad3f2cead59403203b8023551e98db6b618052be830b1b63d1a309b2daec450124a49db31dce1f72540fe7b8e958359443c5c3ab00c5557d327c91e9c86511f34a3cb7c6ca1b40f517e31c0633dd7d3107a1af655637a78cf07dde1028c8609e87ce1f2ac2c48e33eac36b48e370dccb17dcbef56ba93a1a736f992ee15d5989442480e7ef1030b336787c85e1597ae9da3e9962296335ae2219694cdd6c253ce704800637494ffd64cbf6c515e07e13b88fe8b477acc1d16745f771033deb3fda37c78e84b5129ada818210674d11d1199652f33cce0609a9b9eba53b18d41b8385fe87bd9ea2110265c76fbfe75aac651c8028620f2be1513eecf06d4408574cb5cdf9ca4a26ea433e6ee905f7822b04e91a5bd0b859dec59ca25b810aae7b9c91dbed9302c7ae04d31e8721c5b0d75fc5c7926e10b78a6e9bb6ed60b2ee0fdadfd16aff0dade4afed8050fb990d36dc782fd724616e6cb403d0aff084f19c70685679f8b5ff14ab543b4c7bbbc1d2e4c9fb31daf1a50c009b97a71ac7dfaac5f413216640e6c660d0f8838a72f333e081d3a9780a85f3b82cb4dfc7c5e0bf414bb06a2ff7898336295ffe0e08cbdf36685e45e6f236a8467ece5fddc41a654c34d45c3c2211d2952617c4f0c372605046450f0cf1dfb310598e2d460db8234e7827007509a53ce591c9dd19ec103e94e32f0fd351a89d80859c53e8e8e081afdf535dc2f36e488e301c5270caccff6c07c54c2158baedfcc99fd9ad9cbb08d731fd7b0c2a937ef8ccb92adca7cf2d3f79afcee0503d2beeef40c57b73703f2f36cf6339f43d668b2c476d47c9414f7402949df67f58e0bdbd26213cb327af1db6711c339a9489b01a6f23987949ee756a1dc24d2e3493d1fcf9f5d7a50ade0a788baee063bf6ecd5cd955b7ff0f91a979f144cba4f9cc9273634734913e565f45c4222a99e79d4cbb2c0b8ba3bcc078f6b92b5a2bce1368ec0a213bbfee9f82e5c47ff882339f93ff114bfead78044aab1c7fe109dbf1bb2d968ad476403fdd2034cd3168ccfb0cf02f1ff7646ae3875ec349478749edf300b08be7005cc0d6bebc15bf91d9391d552f8e5f12bbe797d8559176ed4090782b002a5ca36baad786035e894683e230f8b8a01cfd9298e3e17b5d5583e760b2762d711ba895834741b2b077cef27dac9f735e176d187dd141ddb7cc9067e70aabe0680c5701d58eb7701371734d92f91307cf38ac751ecabf22a6c35ee8ade690c01618f7d82714b0e6905f7bbda97f1c1dfc6801d0033724f23322339139afef768325d2410240f4bc2e292f694ba5815deb8db351b57e38f764d1588a13ce8ea9b71c2e65ed7c4a99f6b8d77affd50c6ea6900b22bb09c3d643b915fcc3a93502bbe6546c70307c25eef2bb174e7783f9355a51689d3e8d3ad8c0b10fd1aaae2896698c7d13c2500920c02269bff1afa59ed2cd4ee4875dc92acf76eac638c0c5508f1dc05f9b8fed940b5697daac581bebdfc6f9174bfd2b41cfaab62aba327ef23f515edb23017851b99dca27104603246b8694bef1330925a6969a839acdfd82616e7f10c26d535fb3402a2f8640044f5d534561e3c80bdf3e82bf5b3f59ea0bdcbd4a84e19c26c6e286de797410c6769d7634898884d8757db64c39119eec929a86e8c1e657988e2db90f8d437cf2a012378bbd482e19f24d796aa67863ac218211814f3b6451c07b1fe4f45c4d30d6a6dd6f868b90755b95154129dc72d2bf7ca53cb4468bfa64b6028635254a271f40b20a6bb97095ba3dd0f84aa5910575708b417a71963b80c5a81cd8083d8083c8fc84f43a9720162cf3b8913b89ed4a460cb928234bbb1e905acf666cece20a270405a977cdbf784cc5a88707213346e66ecc47c3742345ff5fc766b921f6bd4312b413d6d91ae78490f1b36f237f7139f9a15ebbd71afefa012b6056a264a3056db9b9c085d86bbc9aba9ddc5578d425f761f5723d4950698623dcad37d3c4555f3d239e97a20cdc2d2cceb781c77693ae3395506d57433437d96325aaeb291c2e68dad6d81fd3cd8f6fcd666d145f6c6740c4bd31eddf435c727c26c255d940236165d210f8c77508aa2253e20698966aaf0d214fb32d7e3d19b01846b9dcab86514cf807d4f1bde20556e4a74528fbffa9f5e4905034ce21f48664ffbe3b439f5f18b2845c578d63a9f083867a17826e56066ebc6dfc19522b8670b50dfdf2b5b45067513803ced5be7897454d6e12feddc7289bb18e4916e738a52f4e2a9f12777c7e340ffd667e6b7788ad653495f967c078f4c5f144b650256b3728cb32fcd12561f6894b3fa7d974bd866b71f2a51b7ac791502df4798dd42b9343e792bcead2775f4ff7409730f7a098062d114b227c7e38fb4b3fa9c7cd4b0c4886a99ae90b283609095098978898aadf71da32a34e03b26e520f8c2599356adfb05eddf658dc455f8759f036b00d869d4435a4c779c0c7504a4b6cd0bf4f75af6e99cf3b42fb52f77b42e836f667f2e9af0ae7b6841b3e4a3cdb8fefc703f561c742b6dd50ed267cecf3c8bfe30fb76bb9414497f77ee1032fa73eab3ab8b19cc442db070b1b8994e353d8f8fe6b9dca6ac203925b5076242b96c02c9fd572096c7f86dff9eb42e7674c600acfe46bafca756cd137f9c65438925f997ec40050c7e2ff8da4c61b1e80c5a71ddee3ebc1e242c77913e1993c5f83611a60ec2318dd538d3a9415dae136a7f657b4cee3a9b9125bb57770b783a74f0fd9cbb5a309b7bb790e4f3e48d792d895e3d80e1c0e57cb71abec0ee7d219dfb1fb4a8747cc5c000c305fab2da99b41cce7d20c5e99c5575183f923f2d1bb1b8fab62cad809d40c8bc94cc251ff5acae38c2b2f70f20a9c43662717a12797ebf00f9de61f6728c541009ced7b7fd55c21f96ade1cc02e848f7cfd52ba7db5381e4f8244e18f5f1575fed99375d416ddcf57178328ab3af67cec033c057a1be85f94994ae92981e36eea8a1b05a4253735cdba855d5d35d953dfc13d4cc7d3e5fc066b61fedc971675ed38eff49808509b84dc4c837b27175d7cc0be550be5153dcc7ff1e750a798d22f6a760957c91249a3044062b01997dfec8725e9ef5762690f5d636d2ebc50cdd7a8180e8a70638653bbc9c1a1114124569edcd01b33b3caf68e1d581edb26ae0e7b3dc9d8032d9cbc884f6af91afd73e38e49d23681efa6aa998970c70e02bcfb694d04ea8c57d105f33a235e39b313baded6b7e847004652060e7cd25ccc40c7fcb0856712c96e5784f2b579784b4d0516ea46db8fcdf2175e1346e6ce6c8299bccf15f89e6bbad9c4dfe8f1dead69e9bfec48b4603ef121280294ac6acbca9a30107b453725ffb43a69836e73c2af906046861ec33b8d97ec422fcc3acf60f1e0dc81f5e5df830f6ff9509a40706622815fc5bfbeac0ca1333bdfed46618bc8549cedb0b0819013e9f5151a4ca0d8c6aa9fd03f5c79b76983556bb7946a954415b68820a1f36ce732c79b99a03b4ba5646e6e47a28bd61467f89dd42fd0c48faa941aebbf1d5fb5d2d5aabd422708e73634667f9ac8b1cd648c3be91c7d61d19b9c6bb913e7b3a24f890a2e3c4e57b3a959818e4b198fba04790ea16457b33171384233a33aaed8334a829596967f314445871dbd66ba03ce27dea1104804d8b3cf680079fc9a7f057fdb9a56e9ca8b8f6140d3f99878d14aff739428379aeee9c8a6c99d17bdbe4e92dde4862e7ee6121373590695124c01679420b20bbf9a9b8dc236157160be95ea501c2d4de46d56c4ea56ec47d09b7ac80bedb8aeb804528584eeebf4caa762effce9542d4445e2dd6b73b495f9e73d8b9ea44107d0559518b69a278745a03e09a9f402b8e6993ec4bf586566d757d31616ed56fe4eb5edae1ee1cf1117d1afa01ee53fd5118ff3e3aeac07a4b014c3d33a6ffe7b794be1af866ced7c89633f1c2463136c0f4f88a1ff17a336cd459528d4d341669b40f983b4e388afe37e76e583168766260285657c433f047613d27faac027a7fabbbd9370eca9926d49db6303a7a2a99fd07399ebd5e6f6f2a6013f86dfb927dee5b6458432570d6fedf6ff6bbe6d1ec2e0d8a415789df48b25aad02ed8fecc91e66b02b65b9a0830924f1f8502eeadd65b3feec2d26ee687b8569a6a52fe7f5ae56433d0107a6bf95e6f2d171c2f3f25682ddfb98b60b42f898b0504f6c229800a2a3e98f8001e127cdd8feab338baf5302cdfc44c7b46cbbdd479c26b51b04c7f448dd7bc3309c31221afc6700f088fdbc356a9bdc884a37fb65e6e59b4fe06693a8654031c155449c4f373fbbe0f3b907bac31854e57fef5bb1cce6af1f9f6f39593d976c1280c484dc5b8fb4db94077da49244c16a526476a1bab44128b6342dc1b2cbd2c2b3438448c5e19c2ece8b96a954abc2658619e4bc3cc8f1e9b97819786167f6507144031af2efc2792797eb3f96b7b8856f822e77dfbf41e10d8d64f3b5f6472a2f4899d98ed4c83923ced3cdb4e31448933fac5affe1a19d46f698aa4cf165de61c3a10ae66b3dfd4792f8da4bc8760d7594f6ec39eab17cea463d3282e3a2ebad37c105960d74240786b2ebd7d24e62ab448681fa34c21e6beecaf2f437beb0563772701a260b4be80caa88c59b2dd698a0e3d2dd5a73d04072ba821d77e9eb11252dc0ef5f73e36da74817b18d64e7c24c87453fc647610c5494567b2ee4ea52936b7e82144e690cf9044f1813a404aca9f96fbdf2bd1f2416e0e679c7104c9ef4a41f8eeeeb6b4a54776565d86bbbdc3bb2a8c47a25893c3c08c8a5dafc705aeb701a4249eb68aa4c0a1117462c8bc5943b86efc7412d9926a4638bc529f41aca480558afbedfb16244c8c8e746d30d25fc908c64707adf892c5da83ff9465333a4474e9ae63ed419a002e7367b4ff7739e4c46dc440f83b618fd67860af5989a0d767095e20496f4b445feae1a51290f69109b892c4a0a4fe2e96641df705f6ffc198b2b42df8e65ea087bd8a475165c1584070599b8f7b912a800ede7552c47f886dac5791e1eefc9c0eb20ca2a43dc0c2cf5dc3ceab084409fe404a2f263947b650bef154ebd14dc15d920cbef4621b561f477664de923d5577c0092f6b9f80d2a8b2277f00d57896da2435a4271afb9c98f61a650e63a4955357c47d073c5165dd4ea3180744a6a4ee322c5b27ae881da23258da25c1a252f9cd231fe459e3f6575b0d2ae764fe7101829cebda66e960a6c2d8ca0af55f13d3eacd1fe83d5e0d7da00cba8a7ea9877cde2b5d2a8947ee0a6f413da547026048766b84fd32e933b9e749d2d7d9ce6ec50c81b8fe61c94d38013b3bdefeb3c1c038a4570a7eacee72f66c79b6bf96ac46d447043d349807964070cd9d649cbfa3f9219ff66ad0c911961cb80f7629cb66002549d14bdba48ef385facabfe2e15a818964ab3e7d49fc8f0196ca47ae538c56c290a1eebbaa87e425cb4d58b0b04b9885af1042daf89ca9c41bd07a4dca22a0c7e0956460a3e9d9f6460e772cb3df06bd870dbe105d59ac0d4f075730ba8fa4db4295f7f1161b9ba075f6647e727e92d8f48af946009c5f833b58267caa3b2ba7bd89ed968c87f2cc60eb66cf7591067ffe6f3ca56acb8bcfe6ab2e5c238efcd359598f798c94a5220ed6c647457e2859aea4cf552250f89958e9b8f6acf0e1061eee25bf9eaa7e4987a0cd0d69afc10f0b12fa7db0916e889af80c72cdc9a0e8152ef7934a3143ead32fc04a698a98481d9f05469df8b544b3c272f90e81022245024c1b1991bdacfb6dea25ce7977aded3437d770eb9476ab2e32b3f880cf5cb7526e7f9233b438064192c71ee324e582bad959b1d4d5c68b2393c7122ecf3d7107a3e83e7df035fc92ff57e4306899e51733f3e91a3edb5a8bde5de4f4c96e7d07347ea3d8384ce54a7afea5c70b711c358dce9f25985e204d5c9ff7388797e33c69684bad5525ca504be4eb12d51431fa2f115b5daaf6e55152b3d263cf5fa98d89cfbe621067b28cba303d788e2b2b5060e5a52a3e4cb27f0bc1fede6a6ed9e1deda82612fbaa6e60f0b2461fd5d131e6a7206f41a078ebfcef20110206d7a22aeb221107ac8ad46919c2735eb53f04c93df052307d082f9e26d6560b8049537427e23d9bb36cf94890cce5d20b5cac124552b1fcd4f9515905bb138fcda3108e2670e23b8af14b83f82a13f642aaa6764fbfe50342bcffb20e46effb298567dd5956c553ad9859afb2729447f5a97259dfa081f040d3893da2f231ca3e50c7e652fc4d9095c29230522edd438ee99e31579d1f2049cd9c6056558f9976a5cf3d85d9f16ede10939a49c7558588eb88916a1df32fd81b97aebad96fd56cf4dc477498474ae102bc522bd4a36a8e1fd00e699bc48b863e098d2306390a7bbe8d98a18fb5b139099b0c5acf3d8ed906f2ecd8af09afaeb570903164a1a53d6341a59f58c33e60a5be0d692f8a4f24216fc159c01928ec125b3c686d00323c939702b06c064ed25773f9c96e2047ea0fb5204f679973b8c528063a87fb4dc3cffc14a731e56f18af7b461e1385f58522519e4c1e010c8f4e75721a5de9349d68ff7fc652f72b9e0e2266b9a821d49ff9c37fb24bc67fea3eb1f49a575093140f0f88a04791e0fd0417f04ea49a5194f699692489703a53e66c223cfcd7f5b222aae3c7786c3b9021ba672f9136190ec931cf055f84c85706127f74c6d5b902246ff59e7deca801d7883fdee6bb8757b22b35f7268aa65dee2360d44dd0698eb4bd52b7b07992cca61feeff2d61292a71f4225c76e850e33f4d7acdea6e93b234117f85c8b9a85b0dcff8e2cded7ad1591b18b7d924549159cf21e424f6b417330ad09b1f2345278f46e24c50a708f7080e8d9bc5c52dc2de46fa99960f37182217ea6a3c2ce5dc9ae33f7e4e243005ef5ce57ab55158f22d336960b62eb94f91b74165a85d26c4c14364fb2efb9c887f64d4d7304f42c9c71302dbfdcba727f2776a3fdc2a748a82d607657b83bae958e4c023bf1587945c743b5de56c8d3bd4c6d93b402b5b9860197b3fac62f7b2dc2b4bf2ca5aa40c2dc58788f587d7f5a923f2fa9cc64878e99c44dc39ffef7f99c6bcc6ea75047beb958bcfb6b413dff01d5bf01a81c7967fcd08ddbcd11eaa1235a71287fb457df6429ca49167cd754a2178be71e4558ba32a1bb6ad8cf1ccd5f69f683b63c37cde7b5eaa2e29613007cedda81b747ec2e44211f97469f55245981a2a6d352b1314ae2632e56f7baac9740f6f7fa8afd6c3936008ba1eb5c4e1888beb95e5d8bb3939a7f14fa0794fffcf625727077531b19caa86e701afaf4a46892e6e0c58efaccc4847d562f68a2b2f9b01a9f74b5e4edc45d673c94f7be06076653e0f182affc48bb90f3d5003cc12fdf1611eaed6fbc0c689e8cc01b53454f8228e64b2f792c0e6c76586322763282f98f4e42c1638e8a113ce8082d5c69262d8e7a3a5c0163fddf560d3f97f80cd948acdce2fa696b269f69d8d3f7807b76b1ad2526d3efa9ff5b599bd32669571b1296453460285cc85c4ce58a3f68822654ac6e775aea06fb2aa7898599721c32a074119eba4968588e0e9693cebb861e5fb3de96ba9a83da92675fbfb7ba62053a6fc68ad27398be7ed674576c2290461aecfbe9bba82782dcc2a6e847ea317c27afee5f6e4ff3e274cd063ee045a686cc7d50d924bcfbdc4fdfe56712a9917fb15b1085578481acb71bd4b1f4cbd3c6be8e62cfbf7d05d035e7a4a6e0a08bf61e9bb56455bb4a0591e766166e5d1cee3948bb3152944f47d4016b0c787626c9b79964642f9c57d3485945d617a28be683d2e268a6a8e1277656c301a4d46be1c47aa5edafceaf00259bf85ab7432796e4555fdd8362c15a610d33ed2a6260248d6900679bfa5a7270d2070916e7f8e6a6f9bbf7b06af9c6dd4f4439d3c70f7b598cfe3abcc761137129fb4afb3707bf10e57d1df767915534447c4b67ac80ce720b26cedadecbc970c65a8730da5b0769422db91e028feeac13668caeb8ba061e0f018bbde6a07eb4d1af277b79fca8fa375332eee2fd788fe587647094c509a6c015da2c88e81986737f92a5bcf3880bed78f02fafe2dd23e1693c74e7a9c15245ed21f06cac822ed3542f764a4791e38c235ba9134704b130937a835a6e1569c70ec9d139f4a1f41bb568b5cc00a9cc3bdddb23b433d580f98d8865951dec356d023b9798c65e1f702ba42ce927ba0c222dd8673aae38da65e0cce23fbe30fc6050de0a302ca1f9fc3d4ca14ac3abec6a9bba3b4ec115059c13b0c10057c807c78019f2aa2d52c8e773c6dd97dc64b43bafe9689872544ac5ae9acc82f29c9ecb1a5616add159d559557ba8777bcdacbcf2cdb6bfcbddf10839f4c96a96940894a7fc3fe2219e68796cd3c992a6ce1c16ebceec6cd498428e3d2581634c988f49af7335f02409c96f3f370a91684f4b702355d446946e857f4295bc131b907912b822c081e3833f64560d311cc63882f320c834f613450103ceac42220b640f184c73a83a64f213803abe07daca7109c76c91d5235907ff406bd2da3924fc9983f2cdb4c5b1408eea72b354747be228138f167f766f9ac761a06f4e006f405f7b3398aecad253f5cb8653e091e17427ff0fc1f9965ce8a18cf5eb641ef319a827953d5cf0cd15934aff0572da050d4db576f90d2d28d7d5eaf3aee53cb86dbeafa22286e0ac6caf906433d4f7ee96e35a4b2581e0dc51aaa221209801c726e73ce2b0f642774290c43d44cc8fa4f8311917af1e597e3d69dc08aa4716272a6cf6dc4f73bd347e7f0f13a0234a30197f1861feac4019825bc22eb2b822e06395041868c4f9ed08c4996cafa1d299e3157fb17af33cb20ac5791da2b4cefbb7a98e1e61b29fa9c8a789d3d80dcce73d3a778f8bbaf653bcf22c5de003c27f10f2be77a4055771a67007cd8630e3230e38288499cb160380290174d66da57455b6baaa9785c84c8a663de41ed3bd544055b9170cec43cb3eb120eceaba1fe36e3eaa3fa4f99b425cd2519f09bc0282bada52d14c +MD = 81829c05da7354706f8035527941b2715a99e93b99f6ddfa4c664808 + +Len = 76552 +Msg = 667955b2397e17405518b84d9c38b86d242a855e80c5e7e142e59bc8bd1b3f5110a26eb260952bf56460830627756e0b0940f7f3075c9c523d07f86ca9d39f8f329f4aa7e9c6340c8e96c39e56046b14eb9dd091b5c02a78580bee827e13ab0ed65831b85d78f92cdca2c13db14e7731d32b585f115959fd9ad9c633c242297303b56d0d421243fe546cc509c1bb590ac8d1d986a390f1860c59c8a6ffc7e269c29e45cf23feda2a01dd172d0db4db46d277992ef3cbb9beb4743b04bc0c9e961afb002685a38657e8dbfecf1e9fc38df905e17d8a737a4a9c106974827824a213b4e739f2690f2d134fc4187ae5da894664f99eeff1fcd5cc16981fd8733e36b5b14231f1b83c568922af2fabefe8e0c07a29b7aaab07054a6f112c4665b2fa09db59350bf8d677523a083c3924b53a7030b9f1440b638220011cc454b649951618736ec691a53b77811669aaeb08405c6ff0734478d7f556b6000f8bcfcbb0e451d904adec7147ffde23dc88aeab998e1d1866325a2d06f2750734721600f27c6fd41e456f0246f23875bd5ad464ee0e2377f197182b5cfe25775c92f4b004e558aae4188320de58795535a9c5fce7e26a553df91c9aa081b099ae71d2a28d27f6a37fad9192b73a880b6cfce83b2b14d9fc71e3cd417984fdb55399169f364b2f09178cff217a9f4ddf89dba7e863ac57b3b6da93ea900ef41372922a6fa758ed22d33e3695cf90b019b4ce69cd36b0cec13468d65b8c277dfa34e274da87561738dc4a9fb65d149900175e97b04d2a256f1214fe5d17d780b4c1135ea87e4e95915a38a14bcd33f0ddd712975a4f214405796673b8d627e58740ad4ea036474f757491a31ec6f59df81f73d293e59e13cb90e79e34731e94bcd936ae8b54492c2e52db0ff5f16388991508b022b7a87908801ee59996c5769ab638e531835c17031da14c99f6849a08e1599ad16c4761067094b1aee622716bfc3a5b5a6989f53bfd68c2d27c61b98caceef666ad83b00b89cf6b3c0c406e75d6c578ceaed7af1f19bad9672b00ce6f9e502daa21654f60f259790baf2456026a60a454fb4f2df79a1ef922ad6bc2f7de06a86571f4264dd4ba45e378d80f58e09347b6f8f7570ba71d8ac9a7aa7b6d9598ce5f44391d195778358c0f6383bf61e6c9ba4cd915a2693ef425c4c3e319ea8f065f433a1d0ea21db3cd1bcd988115e292299ffd500508099ffea9c0e1420671ba2f16010c72de312670451e38e5230e0aca9b69ee7dab06f41c01a85c3110c951956496d48e323af63b345f4a32b3f29a67e627d9507abe594672843e2f311c335ad5ff5baac7c28af79098b6b1ef17a8c6283ff7c69eb83746a45b6e8291f4c74612468b0ec5504c6c03cf64aafd049eb00ab732293f7cf7e24135d47257d87720c3734a01536da361330e3c640541e2ed339971bf8493ffe3ee1b5849ac51abb2908c82cc999ff79fc85c25293057de454ded9cd29684b9105513e24db7e6c9c21f9b1ab8c071b1ef6bc20a3fa5cdf880fdb99aa89dd78b331e285ac8a11f3a191ba7fa0bf0683717c446d0ef8d2b9a65ed075589c015df12f15fa8009184667f2ab90a0d500ef2df7af3608110fa2bbec5deb4bf27c51c7774c2b43eb09eb5bbf4d8320809ea4a1136cea23d55c113512c479f91fb6faa28525866c925f49097220c5a424284a8739fe17e6b8508b9e7cb48fe46649bf1ed3129a7eb190e5dd95c5d6a04246572cf5e33dd52c75887474aecb92789d25990ba3e5deab475854a49d44a96d71412eb1acca53b4437e43b5038b97c939b4ad7949e720f1db071b29278e2408219ee8f7cb5c06e243038898536e48da97f2c8c6751cca27d4788d9df521a4a4efd70852bf514338ec8ecfa93ed23a1f4056775dd6055ebfbc33186d768dbfb6247fe94d0948bd2aa8966561f655f019cb5635b9cd2f331c0abd68322c40b9de77f0283139b0c92a1fa0f65d4a77ef6c81788054caf90bef487de96696e9476042ee31b9b117ebd9ba34fee57ba6ac6a0b43f3d960013d8bde0b188546c5ccfe2db092411fecb99bf0d8fbb53a609b94d13eec922cc64c8463cb7208ac84defa80edc661c6ada6f36bf35926e744519f7bcff72971b6bd6b5265828b48a4e207f4fc4a8655e93862841ab3c502b042cc538d8009df510493323fc6679b846a88f2729b494e1de28bc1c5781a2d3303ce00ee33bde633b6be7bd0ba4825c1fd0ff1d735050fca39b1ad7a3280c75b08f70c686ebff6cd482fa7beda8767dc0e0f8ba0a4541b6ca286bfaf6fb35176c6d9ce92bd7ab19c3d793e50a3afe241120a184565a10173b17d70eb7c0c6c44c208cfe39c88871f0b2db84ca24c258fad72305c0596527dfb0859a5040668138ef698d18863e7c435afadf962d6921634fa5c5ae08e7ef9c3b9e262843be5818215b1e2fd97642a519177fd41c9c8734ce504b89313f765bff493aa7917650d4ff893ae889d8ccfc355aeaeeba0293559d4b1fba9a15c40545af5f35f1357154d11c68aa5d0b2132f7ecaa4acf444cae04bfc9a70c10e28055f71c3a2ca3c481df3b31de1eb8492da7f547522309bb284ad4d1ba4ed8d7b6774afa1e0a695041700f1cea94864dd78d9c476c7dfae6a9b9b1c05a2a16ab8df3d08049532f1e7dcdc0b137871e3416f10a3402a6bed71a977f1eee667267ef10b03624cf9c341e3f75782dbf2706d41a67957b67fe96642d6571e0cb9312c31713a41546599c0a0c56fa34034acbf851daf33f8662296dc38c43972122b4f1502053857f0e5e2b7c8cbeb51d2f8c6ade8bd5b6cb919a1fa11c1b7b30c656600300cadd43628067d93f4c16d37d511209a3c3480034f1610e3c82f4bf28fefa78da91835afd0ca869962dc1eedc20d81a4a455debf2341a5414ff6a98efb7a6f7d731e18c8809d576bae81c36f603a458a7e45d56746d34b9cd1a4581c4864cc71f315da1ab80d646d305917270015e0ce327b00762a396868f5bed434f75d531d91961600d789321080d876cf522ee7e2597bec663df2802814bcba6378b277d2e72549257f9f351818766ea2b6f3cf696baef5d1f28d277cc71457125d02bf345c29eff300ce11d67fb95b5baef30bc5e1bac923f867c2b9755c46ec04dc9da4794a76f41b742cce2f17e954babb317a43f5b2f6b010e670b80b163b109ea7c5b6dd6aa3204ffa719f2885186a9ab5190b066fa4aa27073507972199f0c741faad79577aafb00f635851bb312f302b04cf533bc85708b978dc87158335f510c5b594ca051a32d015d339f8198919e7dfd962c3cc373451bebf614e71509678b977c61ebd0046e0fba837c84bf8969ffce1bb744adb48746918ac590ec12a0e386c63d21cf26ac6974fd1b8430e54980e50d3e9aeb3a3a62a70ceb196083e25e4fc1480af512cd58b229e24992ad28466af42807240e44b55705ed4b1b6317421bf5ea6debcfbb229c903a9a8ee7ed9a8656dd5300368f88c7fc35eec2ba26d811e98c1359655c0f5bb98c40cc9d80c460bdc54629bc01221f792aca0091f7685a2594c5e5dd9a69172c3e04f3d6c90c22b048a844a784cd880434a67aef723a1d316c493a3e5c76f772baacab9bafbaf1b8ce40fc00ffcf2a26bb4cdbdc7f9583967a67fe908980241266009ef31d15f85cbfd7f6ce59712c662782c96006c3b4db28e9dadb0bcdc694acca72e6f8665c248335dd197cfbb64de111ec84ef0ad788dd957528c9a50481f3d0cf7c29f54898822257ea4fb5f2624fc1ee4f22b314250035787eab520660a2db5ebe980ae24124660c48bae6062dda5974ca8705943bfb8f8ae6991bf5b923b3c6b32ded52a6d2c8a63ba5d81a36eaa329fb074a7f51356c54677b47f915dd20b063d1e5c14ff212cacbf8d15706e865b2ec88c8fdf016937d09391f39fa38eac4d76a3c57c5ee0a22019b1ae4243a68baa5f3c9349f06ceaed4bcebdef39cd8a916e1383b8f2c7956e477fbea184a74e72c31934fe66de38fd1eaf30f8571b408281f22963516260e7c72bb916b7f51e18b296e744db39bc707ac7ef53a1f4488160b428f4012dbf1d275a400a440c651cac2a4cc5d40beff7febd5b7990e51d2e78cdf4f378a5ea7ed69fc604bf79cdfefe67c7e9d7d14de3f8d417f2aa7a28da38c42fda2e578d9d6340cd8e80b9b32047c3db296d0640d517b08727650016253f2b4c20a8bf12f93c01c9104e48bf3106b3092cea27833bc9e72ba047234f9fea67bc6f5e491502ef374b326ea34c91c9d9d43cf5c16f989ddc97f5c7604f9ac8fdf30ee5820e5aeb75b65d7855e5d2ff9ccf021640707bf1f53e807c2390b65972a287a4f65951cf31bcf9e1dd057516704bf4a241304664e5a1e8cc09bd632a5a2d8233129097f8ffa1a031a535e8acf8ed8d40201998751244973d7f1031aa29166706634e8df72416e8ee4af1ae319b26447689b6d2910f98f456e053926743dfae9564edb458637f2c8e3ac34632eb88b29bda7295473231b89ef9d215d04efbd17693f8ab7b226cf387f115413f4e8740469ee741062e913c7c18262c73aeed68108ce9c40de542c6721a821f9548a485fd438f766c592a0884c7ca56cfe846eb099c5bae5f20a32db2f37441f36e52ec3664d595d8467e952f853925539f7ad2a86ea8bb0d790091e1387648d83424fb787f443fe87b017b02dced089d190ba793506b8a8732ed8b833602a4a21e9d3c39ff75d50b6b5512753b60810b097be2410e0e8d5af2cc72ff98a3e5efa22e16f161c4e5bfabdc041d2d3e1f3bc54e0b47d42c44074d1000dcccc47d1f535a144542cbf2739118b8512ed0439df0e49b0e6f2f3f0a867a8d913efeeabf9693cc9c1ee57bd5dfadc7b7ccc18ea000f20a0b2b91eed3434ea1c38bcdaf5f008da87c52cbf244cbed8ac7637c60f079d8e0d495fed400181ec5da2f8b3b7c158a204c9ac9e64f0a5a99f69f8b6aedb01bb7e13ac07f0f695d624b96e23f754a2bdca33379d862ff977dcbed58fd26683ce7b78681505fabad1fae5e5d0bf912d53616d956490f30069ecdb97fa808f6af08ce05abe88f73605658e24621660438b4fdd8e9a8d2304a8562a069ec23e00483ab34bab80d45299ef1cf48205a92a8d1eedeae782a74b5ba211e9249f5b8bff0c590384f57956b520f71dd892542b82550470f579671dab59fa093320cf543c8b3a4af0f0ce8a837f87670bc8498e927d89e969794ac4c0024c2f744b80a3283dbee89777ba352894359ac4ac709be41de61eee8b3a87c1256f218e2a57c0ebac4ea4229528a1cfe7677daa48b19aa1bd82d42ab61fadd74bcba82ac53cf2ac605047394ffd149e0186d966a3f5d2f0e6c5d6c502df7f29fbc88bf022188293e02e9983af22d7bd69fb769fc5228cfa1e17eb68776345e0bdce94874bd1b8c9b44e62a9bc7f3255a72d1cfeb72210e6f0e0dabb1e934723194589984851dc76641a6a527efc6c8e4483932a80dba6dde1886c65fe57cc1b989533ca1f7e36c178f87927fe82cf8fc767a2cc283796077b77690f1f981eefc1265ac6da420ed3795256d043f7a181b840138cb81d278b451699608a3c83c81c60c6348184abd4ef8fcaf455452b8ba075ac113774a292c7cbc301462d44ce32ac3eba1a2c56eb60179d3b3d52b5d605703604ad264f438affb1995b51a8288a708b03af2157405652974f0208878a7298780c221a76c7151b29d1d292f9ffad1575b5474df6fc58a87fd5ac4de8ce6c553cd29f385f45f085f451b2d77d7a2104c479eb977b47ef811f78440b22ca7d0f48fe2b6852e6a4a7dac003077ec270a440f6a2e72d48a1453dded1297ba72c2e6537cf9296d2b8e8a2c6ce0c42fe215cb1d574255528f95ca2af5b8f3c8d011a5b25929e7430b4af160c1acd1257bd96debd69393b0e7c2e1694eb25aca3853cf2717c7434282166fc3aef3235f5cbb990578a0c2723b423613487d315123ffaf2c395fd1ee486741df85523f5ffd32d8f4bde84618f28a44a393a81bd01b8bd22c2e61f79896b4141ec5588989e5e59a3406d8a307960179a480917ed9976ee4b1776c38f4258352fc1f64967f9f3a794de4007de09e5e6190cfe7ded0203f3356a4dd2a635d6b8b11d414faa391a7e29ce5ee1b1693e778f2a209b0563e736a8627432078a6c328da93c80a9855b462bb8cf02f2bef334c44d77597de4a81d6ca7f2cdfa6aa30b8c0cf1c5ab063f6863439c50e8338d84801b0ca09cafd01248e2cf89c6fd02ab76ee6807fae34d4a9618ccb5dded93ce8a3ce656ace9e77c06bb1450b56a117a13f9a82cdc450e558fdf671817178d7cab590d65f3bd73c36cd9c8090dda58e12bd3b91d9a5408f1153f7660dfd703f5ab1a8ab3ba51fe4e43e5f39c177460468524a3c37b37c587efe000777d557ea15226642a48cd0f8752869df01b61b012ea956e05c917cd7de66b0d4439bb86e86726a3b1e75a2fd56365cfef61c8d0ae22cd23caca1ba63dc288a6af5b2ea132b4c1502fdd20e4a03c29918030d24980f575cafcc86cda2d4bded1a02ad859e7ffa0728e7346b951a67be98bd2a6a2f22b3569820931f1b7481698ffefe1356f116a11b5f1f4334e6903e1f98d6e636b8bb40a44d693714283d703b4f371bd32b2c8358c9f54dc004d6880b0aa4f1553de9bb42a76bae435c2ca19a87bae7a99a962e7fbc48b3bcf1a53ce9970733f11ec91701c33cdd1face97e2c1d2c3f30ac0df2eeaaac4d824976bd49c2902690f7d3f450253f5c1f86fe566e83fd6b0eebde8134197253c658d5999a21b231bb4594d3bc41f593b976c5cae0609103aae69249de8d4d6eefcc5c4259190ffde6847625a4adf22c73f8fa5c101799818b08c3cd4c7a900764f04558153cebe39931126ab7cdb77ed589e68a7c3d797d25eeed7c0c75dcb5dc815b4b4ce1d87b59d7d4335435a81364a624c69326b34f11f569e6ace3a5e2acdbf88c6ecc782d8ef545e0085a667297ea3fa0e387c98fc5a8e38d9c586e265c8c979c09313d92def5d22152c05524f5a291a9ebc53ea7b795c4f15958a7e9720fc31a9ad48b1390662347b1ec06a2e47bb5322a53953f7e3898827248e5b473d20558921af35869c293f3a451ed650ae234da0dd74fbf700dd8d165cdaa0fd87fd9069d7908a9b1a7ce95b8769bf3df527b1234b4c0903381f06ea24b57641665a8750b733db00e621dae5cee74c7b869027b0d70ba5a3f3199aac6369059c4200e546a9df4e3e6ae0bbe001e2a694c725565169f7f9609991f263033c749583b8505395dd0bdc0d83345508a0f41022b0e70de95a2ac19250b617eb77ecb59148708063763b6236d0ec4bcb6a5f75fef781ed3f7a634f461e8dd003619482d478efd4fbef06584f918cca31870f4dc2c4cdf754a0ca901ec21f9733449586b512725845939347bf8cbbda24412b1fd8dd73350e13870e80061573636616499adca4122aa90bb7ee8a22848cdedc74a70a1aaf561dc351d5b0176d7b114052eca02a0c9078952e445269cf4fa749d397156a6c1504a6df8689cc8c638b3b291424af4e61495a3629ae37c456e49bc410c40d7431115742f959ddd8041c2e567831d9de836482560564346989ddf9cf7ae1a8cf948cff0298e8f159440e4161828e50c6e0113417403d09c8d0d98c7d3d32e68624bdc5a5cafdb1180ca79ed39905bd0e5e9898ff42015ee914227b55c1806c9fcbebd2b5f662c51c45316a34245cc8bce740d7987378dad23bfeefe06f92e5256f604dba86ddd46dd5f2d00a8d5c18da6253196a3c69268d2fb610a4ad32f71dfa625f3ae1378614a633f6df3bcd566fb61785fb039eea22d691052be4264a91533a30bf6f3885189e3b043a96772984cdd544d631ddcd971ad9f7fd7d3787886230e7d098a77681a75423a406213a208ed47d802fef77f6e2d40da0de2d560b0f8badf6c44d0458a8c47ba4f395314be15e5982649c914715cc709e71d05e214295a9b75bf3d5a488d433c2c599b50daeb9006537abc3909d07477f9de848d2e394049ec55f916d31cc7386e4f66e6fdd2e99b112e6b4db61cebbc9c93cbb26dad1e5306a5ae1bb8af46579b974057857054dec5c130d2f4968f4065f9560260f9475f7b3ab6d977b932e22aada2231028643a07cfb75953d1f19bdc6bbdfd96b25db7a061cdc08ecf3f90920f26ca0c7f9a454dc669513253953776676df48d4cb4041cc73d617c55aecb784828ccf8fa59791e31c15b4e9ffc9bba78e087933cfccd56e7905cbee112fb33c5329c640d345def9e49c7d72b9a411f1ca04767179a6bd52f60e2c5060eb85b22dec8cc3cbd5c38687d278a6af0b01acf378477411f781e2b29c42d18e48b64cd77d2801d570c8f2ce60ac6e28271440d10ff226dfe6aa857455165ae56dcd741b83a5e1393e76a67eee21b36e1fd1152c6f816e2b9cbfa205e1afd4ab835291bfa7084a3e6654086223e05bc71cc193cc40fb333c4148a32ee9152529b1ce0a8c905b262d11eb8141a8f04f7c466a23792b695f5bfccdefb5155137a720c8494ae6a65c4e66c17ae2245978d4c4562bfad7d2d9d0f5d7ee620c6af06df7c8b5c153efd4e98e60590e4024bd19bf0d1518ee3e89e355ed08ff77683ac25f56b6b87d407646b050878da45805915e15479b15b657dc4498a552fd54fcf080fbb4f90ca02aadf5176d27f7fd3a86caf82b4bf6402b02e95f2d2547351e3d813e174aa918d865853f72a4e21c433e2a3e27ef39e7ed9e6dca083efc1387f28ba84874fcae68b78750fdcb0cbb0802a76da55186b085f8f7619e65c5f62156c5c0ad3fac6cc2eb23d078651ee57119690f0c3783a5db58b0ad58644ae7d3b3580eaf72625ace4983494a3abf9f66cd97abc46adbcdd806c0359c0232ed854f6b1ab6d7c57f7518cc42db1298f3cf645aca35b2343062494e81d30626111f74276d2b347ee39da2294493b550e89427d9f3c7d637d7626b821a6639cd5a8a68b48e7452348e2f2dc0d6daeb90869d5e3daee2a08bc9c1b28587bb63d0d0ac733905fbf990891402b980187b00d6d251ad83eed6d80e65677f503c4cd67b6edfde5b27f039db32693dcab52e47df1c4752fb5341c8af38d197fe50bb8864b8f2cd175f01d88c73a9743d19cc0eaa618a539d79a901b3213af6185e798e9273f62bc10df215a5be0c8560ac1dfc3d8b60d9f2c8d62b2207e8c426d04f8f0d853123e1988c972cfad898bbd7e8baa280120c81a98fef05d42428b10d0233ded8ecda006897072c1156d7d700f7efe12ae713d2829df5636f364a407d5d230c536e7ba5e5db0caaeace683b911044006f29176dbcc9e444c066535b8827079fdd012c5977204fb06d88736ff0fc6109391e3fdbc0d964b0affc6b8a962786a060eb15a3862d784582cb21fc8783ed036f10b4a3f5951fb0243fb9560f264916c375600b7acb2e7211e19969bc6c91f7f9459d4dc2c7ba4b077866465becf809eee73219bbc2193e0210043ef981f4ecbf0623619135e08a40f099e3e2413a81c889b656b1dae2b13da18a04a588bfeaa89a6e68c9a83773b7ec7bb30dedb7873ba21149c4da31d3abdc5242274a99fa9e4ba5ead1e8671155b7344042b718222f7c6e7b5d8cadad32088580e98f2b22895ff16d13bd19690098eb12ea69055b8a5df372e2b6ff46bb6e4a47521e1c6c4f1f797bf6eff585a1d6c9af6ec92539358ec8b8bd21cfa62f57ca1dcac115e0d9d3669be245a26c21baf5a134a021c4185716d55495c4d674092d8db93ebe850fc3df563f89c926668c9770a6b5a0041bff054f11da86dd74cd9a1c875ebe63d9360d32768111bc5a94d9a22bd24b0227d0bcb05bb7bec315ea39549de9be82207617b9edf62335e419e1c12abdcac52210647f99f5149141aa33bc61a765ebcac926730dafa699eb65d7550d3fc455f6082445355c2f4edf53b0dc3c605ca5c17862e73e7643f059bee4e43b20e2bb8900258996b4b802d72ed73d97db4ab8ebcaf29de911a243156d30f81c28cbfec5408ed324c556b51183d166d8e1d82d3209ff1d74496a9907b9e218181f2726900f88ac4757b270749ac6df693aae0b7d7bb0f049e643fb17ec22cd97cca03cd4b73b9a6731733aeabadd31b0ae735ab36a2e9dceb0d7702d4d1a9d01f8dc46787ece27ec1c421c5b2c3ee31705cf22be1ca0ac6d6fcb003123ef13be6b834f64ad6adb3ee0c71dad39127d04066c6c85da2fa58deacab30bb7ccb436ed3e5c808b363dc545a945c9278188e17aef3ff0eb031195ea7a92a351d70ad246b577b4625bd5ea13919c973eb28b152903a4e7994378ef3783a4e138389cf83d8fa7e878002b1311262bffc8ce0e08db4ea2522a186002998ef2aeb618f2119c74f504174ec8aa0811f9ea0bfc992258784119e7a95336d84382f0119f9586290e67f0856d3315c0f90e3e5065b5cb672a8925181fd8f3bb495e9192f40cbdad0208940a84f4be018773e5df30e96bd20c835c05a178a10b498e778140df20effbddd8f0bb940b93632fc50086be6a5fc536a7f558b9a890ea188c26aa9716b99ff0a57d3b9a663d344ac8fb8fbb30d7feabef326b267112d506b6c85bbb06d19648e1fb2c8e36c8a2cdd517726825015ee81a0203446259b160dfb17ad35a0089ed76b0b6f9e2fd57bfd39e584db2a78ef711ae489de42c272cee273067790e20e84ae5ff61d4a1f828acd668f33d8f35e0bd7d61b86055df74cb73a500cbc3024047e13251737f30114708cbe13082fca905b9771d3c9a803f5edd0025b8e7d8fd54ee754e275ea4818c7ba89ff1488b5cd0a8b155e2c4b3968fac6a5fa84149285852f0e25805ff80637928b6eaa98900089438e7b89b1f80462a0a35039afec73d56cd946e3de716b44873ad816d9e9e94c3335b28e66d056b9d092f31ba9ee5ea4231ecd1ce044c6731b00c205b733d5c7ecb3a986f442de64e8ed59a69d287475e4673ea800029647c085c2e3db0e5480c280a72fc4d019f85c2b0a76f42b73cf134b01f1b80b59371a22313d9fd9e40b771561d562f887e8acc47be93957cb145232cd9662ff9dd58a7ec36f700712cc5cfa3014593ca6ca4d522499e74df8ea03a6d812ab2fc28783e3c01616465f47f697b869021d04f1c05caae5986e6bb4ba1fd7d2fb4c75e1a909ddbdecf83802d6865140180a1113a83c65789749b208e8164373ddb606586c4962c35ead2b817f3ea135e59459846789eaaf9e506a6b00228151ccfd1270403b05d2f5c5a85843390eb7053c5ce880bdb1170822e33fb4bd3819339228adc7571d494cd23cdbe4fe204ff172899486504f3b5f31bb0b585ede26cc15978554163fa2ce7367a0b7065c7d34c76e3cdada1b791dfd50627d7fca06d0e80d8b8900e37be4f9a72b4bea39ab39bb893600c3bc7ccee651b996a8a235fc99e914d89f9f414b0579f006023e668acf59149aa598a2ec9d2d953651ed20999bc8d5c55ac97f4b076e7397f6d14bb2635c5d0ae83687f1824279cf141173527e1b32d1baf8a27f7fe34a5420a8a71b280173d4141c9868263ecbe367959a91b15eb08048b33752ef76d8ed281b255f7df6fd78a1c150cb09812ff5b51012e1c601d3438c7fca5fd697a3a565af32e9e59b5e7b29bb4d94acb80a8894e758cd2cb31fadeeb4c810b5d43f2f71eb4c34ef7d1b5e0470fb5f7021e00e7fa1e8be65d10a21e7f8acf01daaffddd545fddb0c0ab893da68c685f47d4519edc64f3001fa074210c205886e9a8a52f845b446bbc2babf14294b92ba18ae1d57cb08bc717cab70f1a75e443911630163610c028f33a6223a39071031928fab563681ce44f77b5102ff13be0dadfe7b9f3e6198f6ebef8fb4fe6588eb596e26618f66efecf8db44ad5fc2404ccec12414245164734a0b3a2d00036757fbce10f23c049be9df6fde893fe68577025f9d5ac9581f94dc9dc40ae44d35f7f8341d80d3075ccc398d810f15fcf83cd72e39eb83e204cc220bafc6f1cf7f5bcd148ea5dacb9cf495d8ceb7887212debbc1ac3eea8bce99a8c97ff9def69df3e90406d9b9edf70352b63a0afdf26ffd3e9e46dd63b1c77ddf7b971bf24f2c40da66f88506dad5691eca3571fcda6a18ce38ac4f9600a9f934869795e255a4d32fd1e640381ec296587953a4eba68bb1e9053efde7d4c09c567ef3f01596921b47b94293c426393b7e4816ec60f35f492da89170dfcab5c7b3b93ec3028e6e99b0a1bfe8318dc3a91ebaf1e0f32d5f4efa872630f43ef41bbae9da874fa9b4cef91f90b616b1dc6fa846670af8d10643de158fc6bbce05f8fa7549a53374ef3b9f777795da3f0e0fb97f08c3086aeec856f8109a9cd455ffe0f02eb5747c8850126dd7000281b309a0c939b1a877633ce3936b352e0e8e810ccedc20893d1abcd057317d062665de1cb98c5f3f731e22027be22ed5c8fa3cec75d48ed81310d277c809757ba9b10d8bc4731453ea7a08321637d02a903373fe89ca58e7aaf5216734e181d9680f086c8e70897c4a016000f6bed192f0c4d6c18f10073e71422a3d223c1a95fdfa6f3d5c27172f0e4ec9ed91f99bb55718d5b3da381252e2827d48148ba837e7ed927cc1e955d2c3ac96668c7aa6f85fc9e1640fb522bb9b306b369052c335925322b96449ce0e06c555ea2ab47be277329a50a41980dee7d6a4870a13f415a9e5806197cad83724039907012992fa19fd50e82bd7e54374df99a7f661a36e8b0f5c03f0df0cf4b7f1d04bb46c74a5c484b5b8fb62987fbed5bb17f9ae69a6a22ae62ef418e4bd3f1a8c1698dfa97c03633941b76c42ea12339955686caf34abd2df2115eaf80725d83cf63305a9f363034bf0d4375d193b83b4fee72efcbef491a7b8cad7af4918c563692760ee92400f6e64d6664f9387408e52da67ca9c18e1c024a7618319647c8fedda93ffdf36c2210c227bb2df81e4962fd699a162853dc913201b1bfeb5481302b0f14640c3d604656cd9ff63b80a5cb450571998c62022f2c956c24f67b2ad466f2b6a5d53a578ff0a23adb6960c52aedc028ba558135e5207b71ea21866bf075984c48b82db0f378ecb464ea875086dce3e801eb791dbaf6fce998d33beb8e404affd61cdc127ad7f4351927bdefe8fcb5d8f7b71163b6965efcb7736453b5af4ff7d66911262df302e48386c94a57348021231f13afe1e9e9d1ce6bc74a6eaaf15bd006929413b55de929707508db6c8aea0d8c45a844d5e79165222d79c01976534c5d270334054f6d934e87d27c8c1d5c3e6771f7e6439e6305005d87b3e42709d3d59a1b99cc1e984a86c84f437d7f9f3d165d44cf1c5770346d211d4ff34ca2ecd6b28549f01391d58200283725f8da9203d23608465adf7dd13fe39d2e2d4920c836e94c5b7681bca8f704616dd235c694977598abefd965948080a47e1124f614efeeabf38f8f8862748cc73d53d9603376aa87325e86761eac9d6c +MD = 595b4a6f8b79e67b2ed8707b575a2368f1536406abe67a3ff2cf2c8f + +Len = 77712 +Msg = d62c488550df10d1c2c3f99a1bd8918874a8cf03a186499a0614a8a6ac08592a952f86fe4cb2452dbf980f9b518c73eb2ce00b9fd4d3b081020fea42af76aa626f1e3c4f009a77d1237c37a5aa170d69d38a34b8d4fac795b71e320d6801e7180d0352c195210e86947759024e03c5c911ac3194c983f89ece48684d0030761516e5af9a33cf7214ba925df864d805d59050ea7bdaf7aa63ee96744b9f8bc02133cd3d22012b0b433fd42bd0151c3453f57d47b72fdc44adc00e3e4f6b9b2d030cc2e3a328bd42dbc846abd28859b90ceb3c308ff1bd3044ecbbafa18fe7268548cc8963d00d7da300eec645e616fec818948d4a481fd5f019a2ad8831f8116d8ff317ab1fa425648cd6627356dc6a4e248d46315b8c9b79efcd214e7a5457848b4076c34009a3e6170668a201326568b82f438c538beaa61843f43991856192e2ba8cf359c45df14784c11b0ea057dc7c836da357a52a40390c0c929e13965f3c6a4283935ebd4dc45a5326a6aea8731790aabd9060c30ffd3153a0cb845db2425681ba155e2ac13790080af1e5c1f5325ee32326471edb09b9b0ad3e6220559b882fe2084c0c17482cc71116cc082a74f6011e40dfa16c08ac0aff1f34460ef008354193b1ca159e3877813eece6da865feaf406b2b58aa0124bdf978337a6e9dc7c1fdf13ce84e2bb02a390cbc4cc0fa188eda147c3fc79f45a95ced65ae52d0eebc613fd7f2bbbbe4fbf35f308c9b8c5c1533926318b3c591f69ebb5199265a6697d58f445d4d248461d54ec1c9929d27f6cf5d868ff914a82a316a8db7738aae08bd6828845ce61cf04163c660409d0a982fee4d1201fce6b8a7938095a4f243739b42eb0475911d2bea36d50d200c827db7cd2d3b58fedc26739ec0904511b56cf1b8025a218613791220740cab8c1e1bf962bd58888af6f82814d443de79825953201501eb558e6c6bb90a0b5d6c3be787475415fb31d5a2377e222ccb9a28bd222389783d8ffc8a49892d75b05d6a94d3f3b7e03b83e6c9243330c7b6e4173d012ae6398285cc375de944d84eb0387851f02f43c3e1b8b160ec86810af7dc2d52be91d264e7ac07fb81f6af8305141693b540bd1edbaa0f9002a9f54235f612a94732bf5f15ea80c4cba967e7dc9bf41bcb82b8c6f25948140e01a0f73ee381776d4f7cdba126162c2ed39e07a71e955c9b7bc3369644df7f772400946332fe3f992e776519dd5c94340bbe4ce53a7ec8bd8268f867db5a34c69780945342fd8443765b75d07ea8bf73c84532177e24f2aa3d1686b7ab3cc684b2cd918fb1e3c804bd85a87588aef0568fcf41de380c7cda02686c3622ebb72a3c33f6690e658d454a82576999c3c954c8c9168a16b9a9c588bb0343e10b993f6a504d7f96d7469dc3ce1d2d208bbd1719af0aab98910c05269b06615400cf3ce39f014409dd8676afe564509b6b4df5e90da8c31c4736116294c03efa6fcb9b2e9cac56d5ccbf587554b75488e6ee79bd417b5130309a62d314db0d52ad30e2b1d5c928694963bb9a9890a96773312b1d06fcf672e1cb81eeb7a17cdb4d719c03b6c21952c82628b63d9adfc5c498727eaaa7f332cf2bf71bd9de0e22c5203f9acc31da10cd59282e901068022f96f858c8f6f81e7d3e2af117cb3197a8af35ed8292cb31cd7f228a4c9bc2db28bf2541de847584609495f4ee1367c86c812782765f6d244d2ab04fcfb7808f447371b057baec131db1d09dc921412385387ce024124066c0ce49e5a5de11bd0756762ab114dc2909086352357f3e379757be8cf835e577ccec67f24b9a06d2f5ca9b27971cc664b71ab6c8bfa7cf82f74164ff7f44bce5c60792ec4d55c06f7452691d665d2b24bc6b5357c41565844997f8ae35c9472f40a2433a079beef1278068a2ab307b076d7cb195ef6290b9e2cdf21fa83e14c2c14f017226f6d2f663d7022de241567b5eb169f99df9f1a27755d9da330d962edc50461b07e12cedddc8ce35880a1dff14bbe4f95c55e8cc5bb2285482d24be1d678999b46d55d55e9c8354018f56211040eab1ba6f0e696248566150406b68a640a6489505dd4bd0c77dfd4118d934fc10c24e71a758bae5621fba233256666e9984f5bb0e53381da3a16781e5d5209b036fad2033e4863652a81629ca8cc25fb94a288e505ea42c79181927bcf0eed763195631dc59d53d601700cad2b68460ea21697692a798e5900a9b9d66d2a59676e7d20a6a5fafe2d395fd6e107bb258723141db9ed61b30329e7649ab244dc28602a815a5a01d0df549977d4e8456319aa137253a9236f5a5fc3195528eef42d99260b855c126a60c5c555f527877d2aa9ad4bc2f83f01c324d54e825b791feb7be835d416dd39561f5bf7ce4001e23ea439e084452518d21b968a9ea483ede6aae986b324a2bc23c3d5e3ccec4520ca1c51f7243a76131ba67f4426ae8fbca398b274af0003615e45cb908d76b1b751947df60f22929ee4580801a6d40d2aa6b7db8614338fc77a3795946c69e814698f2653b1b81b0ad092b9499bbf8ca6649abd41af39a86cebfbcc46064048d6767ed396c8457fe574f91b9271bb7ebe61b3e02dcc7cddb04814e84bc794646c0ce61e359f6521cd25fd9762c56253e13295dcb10887a03ff315721c4cd0bb53a1476eb6c381a1108812c541034ebcad3ba31b61cfe4807a917fe21de27fce0bb8353da0c1458e5dffdb2da3b7db1980f17e24b69f1e0eee87b6c0e7450c0d12c612138a050b4a1411a929016f91eaeb08997125f29e9c0a6a4c96fed11009076f7078b92b5d54c1521f5fe0770db169c567894666d0c85cadb3ccdb13064237f8d2e5d490b64ee435a02ad77a990d8bdc6ae58e787f1463c68edaf28759394316bbe352d1a0890b20de224cf6de4faf92361e6483d3f0be493059dbaaa36eb73d8de9ca6a96a384c82bceb75847f863ab3b8c7f3589edaaaa4ac1fcf95f42e2c1eb6191c8231f1f801b98bd3b60a8367c0dc824ea0b8bd76e209becf00766746836f34f76b06c09ed1018b4fcb2dfa6890f59fc3dc32bb3096450122b1649da85031759f2d91af273bbb73538a8ff2256b2aa7b9d6b7dcc0088771307065d93acc23657d9079c5798710cc46bcd973859ba3219854ed290e80f89461072122e4416e8bf75b670a7dfd271c9029b28673678995c71f7ca90246c0f51e3c41808ef5396f765802871be429ee9999c331d416048bb0ff0d6585a10619cdd96dfb2031ad9a634df3433c863dc7c8d4b47e91f13b8cbabb48637ddbf28ad8a44c9c823df2932403e146c6298c3187a12c759240571f4d1dd4add43aaecfa566876a9d612fe223427599a3163db33ecad31dbf4b7fcdd1eb5a4b70075f709ee6c56d57e58d10c6d15743b99579d65315527e0059dc1daeee81433b8930f529eeafae991033a4777a2e4cf2ed68202f4b51a03eb396974deef29f1b0a47e7b044ed344c2c49269d03a2bd3468311b3a34778c5fa2d4c314b35467fad0ccce9ab12608567ff91f9f355d9d694cfd4fdc976d494d6cbe2a6c0450a1bf24e8304ffd0230a1526916e7d804f478e2f3437e3ddbdfee597d53beaa8e57524ec29737f02bb613ecc193dcb442cb49723c7f86ef67572cb339c6706eb5909b96848aba5246a196972a1ee690bc29c444ff8b5e73bcb8eec0190cec166d558144539240eafefa1199cc406d361d16d19f65f06c91800a1bca46ac986a60adef9f5a363181f8c86b3bce80d96c0b9a58cd96351a135c559d17e82ede3434a0caf0befef5dfdf138ec5586793fb2ebe4114b9e2cfbff7a25bef261b253a9136fb7faa72f4cc59e4617f947c01ab308974bdf67ff25ffaf83d9c28fad44520786a94441b96100e42ccb0a8478c43b604d90f7695edb90c602b651753551d886dff77b4804472a835b7a2bc509c8d6b35595461ab2796d6e10d911baf0f8a721da36f232964bcccc50a9bf9209a4ff426dad2df4a08bdff83cb695b946a5486913cc6b99f60b424fbade4863eec52fcdf45d316f9f8f8304e4e35008dce426bd0b3c29d699e2358de89c58c32fc5e2966839d31405f0d114b7c3d311fa31ecae2f1acf80f88d0107684853385313b23c57b7856a7a5c549813ec817d451ae4ad0ddccf11a8485f3cc876ea2bef2b0930414aeaeb732e881f97d1fd93340bb94a15e69b111fc08a9e77bc60265a9862129388660f76f3e60b91f8ba1c4d90c4f5d5ecc5f7c5722dbd046d67a02bd85743ece4794f0c28e8fcb0d529410826b240dc43e24e4fd9b318dd2e6331e9675354abd3a742894a2b53630bcdc9ea49ebbb8780528cf563b5228053e55409c1e0b56efa725294e407b036f13a1f6a86ebb66616992c8cacae7a8c92507f137489f694bd6d27b56318939b19d0aa1f4a3cd1f69b48a54c10f971605e571b8cfba998bb90ea1a4163d86e0e0a44026f20598ec772c3afda3d30b79a1c4bc1dcc3da0c42198ba2ef42b1b01e36e6b0d095bc5d4741bc84ad8deead9840b10a896995c1d6bbc46a15ac5efa3a243b1dfa06ffbe046c75cc3c8f8dd3f980194e29596769d80c26d83afd1abce056d3d232107e317d6791ff1dbe98cb1c4f0715231fb964d46f2565e5b18f68af4333561f3ec24810c78385b7a789e3af01ece81d3926333a6942ab9c66279e057dcc2227ee66726d00ed08a0b6fbcdf04d4d4f5e121865988ef101d5877dbd716b10bec2abd540f0b810f04f8948daae95aab38c571a6c7d54c3111791ec57819fa394a5f389243a31a1c53a7b0baa285f87ad2e54a6c8473f3b51d9121dfca48ff73c18520caca822120fe828aeacfc1f66949ab7480984c2cc3c90846d0d58c07e2db043da3ad8ede428eefecc63a869ba2277eb6890b473f839e465641a1cb5bad1f4457c6f3b198ab8a589cf5eaba314af3c5d930e54b731e23b318d937ef44fe15ae36daa4d299827a246320e746fe8c36eaa61c2f4212bce1b756419ede08fa46a8a188c9d927f0e7bb09ef3a134b8e7754e2f5f11362845ebbd620de82efcb399b627868ad8b1d58855609ea085f783e6b586531a6ac9f2425611f00c1439976f03f518c380d3055ea1217ff0c84731497cf12f9e33735bb5fbfe60a854a8b860d01bc3a61f452665204c0820900a77f400ea450b24d6da9cfb81c07b54ecaf05c70607c108aaa1425f5ad7ae61c3b09cedec43ffb346f78df1469fc39957d3c4353e6592d1561e6cbad86ef8b20573aa9071acca63564aff69a77f3f967cdf32c73f5daa1de9e65acf4f2eae054259939514d029b9874d77b13ebf3dc0ee29c7e993605522d8a1730929971ccffcaaee78406e6c2a5c677d8487005ccd1e3bfa18b50e4294a4d86c04e248f3a6b71011967ec8203a4831774feac30b1f7f9e5fd12ec7f0e7c0e3ac2f13b490fde401b38c3a8dd47dcd240b700477c71c94b95faf5b2dcea0cf5baa04385a934a15f83ad60e1ff7496dc780915eaf1f58f025700fe4905a3422b8ec00cabb691fcf7c1df0640f1741ac84ad2043d98259145b377f35a022366d83e8c1454780e36305e357d6cba2db0bf3b7a96e778e9163d32c79d8cd950c023526a2329f8949931e1198c0e6289a0e9d5699391992a68115b58c4889414983553c400d23d096b23d2f2fdcef26f316d9f08c3e204cecdeab69230f63b563536c90174f64f57f52dba27965371c6ac7421bded83c0bf8ef0ccdea87cd4fee04d3a89473d37647f781f222046e7785925e4f1db1bd5e3f24a24a2f5c569f3e1a230c44151fc1a512c8c4a624e5c6c80a96f0d53534c2443214747df77011f805e321a29d7a65fb27086072614d98a69274a771ed32c69c79cbb362e3ba56905a9c9f3c97a3e1dec6c97c1324065ba5cc8fe9904427d99c8e40ad6aab85cb9b7aa7bb7e7e0cb3b454946e04f7909e4a0b412dacc48489e8c20bb8e1b972ef7df8ad3ce4cb155a1062f1bcc4567ccf07e120ea1408e945f5c7957c8487f230bc57056a0c096e53776459feedcb3b6c63e0a7b5826bc69c47f1765ebfa1944deb1858e950b3681e5dfb459acdc05cf4f28c6e066477acfb53f216d5ff90d9856ebf10216f43b349387a3d26f0c042071836bc5336b6ecf1ae2c0f88b0d02275cbadb3a89444a0329b73b90a03559b0159924b227594370dbb11b8dd9fea0fad9686bbf58c30ef88fb7a41da51fac8724b01730aadb9fbbe1f45bb4b0939018b33bcb18e9392c1aadcf0501e892a4ae84116cc624b72bb612f3a7f578957a89d47c20cda66e4f716b4786c2cf56e92c1f044cfdfdb68e6b57f528d99acd055622729567f62a1d06b26651eac4322409dbd0df5c9da070e2994405e77c00da8687674f6d40343ee068768b012ef0fd4ea2bf4c6b6c3d7b22be2667a887f9a121eaa17967ee555b0777bd5f8d75561b025b17bcb2d3555533afe476a2237f0130326939dd67551c84c584f318002d272dee2156ba38afa61d55c5595fb959a2ba4907b75813fc285e3c126f29393cc8d74225430a041417e897133967af502dc716c31d605a11289dc3b1fc49874da709416baa2aa04c4f9d5c143d406f2c4a6081e5907ba45ec34a41a7c2fe52266bcbd23ab4a3721ff7448e128e745fb5a08b72b43a3359a9a26ca03de8d30390bd23dddc88fce455b7e31453538be9b2d852d179430fe1bb6c0bc7bb964d0053451b4b9750bd5db53684d620b50b74ed99bd867dd397a45cca2f9e69f6f6b237aaba02b4316f45081d2ebcc0dc7e672c8cd37a0510540b5364e10d8e2d5581049508eb7a5599031613eaae7def6b2c38599c935c25cd7c6ae128fc7466f2d681ad0eee33e4c301a7c1bf949d175b2ad9a720bac9388a6067ea0d5361c75617779bd3f4250575a683cfb556697bd5c9d61e68d893721420132697fa9e7808aeaf065fe39ae1385a71e4d4dc29446171f9677bd303faf222363eced973a29001ee97bba5d8a093853ba8250e2599878a082a619561f9acd098d9bad9276d777afff6ee2027690f8fa7c5afd5a4a3d07ccc0e2304f596cb9100a064e00400447fa9ca003ed16432e17ee07a17f089c3b00dbcc80a06fad6cc383ad3d750847f7ab3bbfae51dbb87e187a48fbe4f74e98c93dc588edd4c55eb06510fa75420b1d2e673e3ff529393f88cb6f5b00a8cc8792515dc77c3b5d155338a213658fd61ef0a97c373b917e08e53c1b4d768f8eae08d0f5aaffe5dd172878f106ea4421739e7d2a3299a6cf50ca66bd519b3e1d7279173dd1dd66bddaac908e4367f185b1844c98a093dbd5ad84b5c5f60316e15b8fae96aa995077d65c39ca67533a7b6f4ea2780fbe930985c0a3d5a932cc82ef98f180b3b815b3a0b3bf45d150616af35a2928de7e7ed36ffadb6cf9aea16aa541aa9c7bbe48c9b04fab811fd418ecf4332b2bab5801dbc28fa6ec55db4810f306143a71104c529b8c88fca152b369c8662310e4df9e8b241bb0e44c3d131e7f42e8fb1262a2c6a906c2191450e37a067fcb492979d75a1b1b63d54b68b4db90a4735efe09de9e8f2b0176d7530b8634cc6e64c7cb3ed11e0b4a4fe1e28fe0ed974dc6928a7252b475a19678ddbe26c9e8a6c46e2827788367ceb49e1f16b6dc97f2c26e78e08b9f833ce867555dd43c60ef188b3533c901bd8b93ee82ebd5e422ecf2e039bb91c6b03dfd216e6d0702a1b1b18d56e64b0f78eb6e31b271b69ac4b6a89661661dc0a92f35356d8e37b34789200321b167132678b426223ae176f9ca840f647277f3ca7b3121e7140ed4befff48b0a27a59342be063a66c9deff3ea2e599d75348f680cc71657fb0c4ed6460af6394ab9f265a25c4ccd48117aa1fca7df41eaaf94f887d667e7bc72243f465a14b45dfbc42e93a807c100323edf9cb9d7ccecc11453e1880eb8fd98f9edb798a908216755f5c86c9c68db27c516900c4b25c49299e1e28712b005a65448616bbe1fdf263023074f11ac231997afa1494234ba49aa0a51787bb91ec5beb80b7c5ae0de5fda2119f970741e2f3a109718c5e1150fd036f70652ba8e1dbea57f738533683bdc56c613c1a7169238a33a20db141f0b91cd9dd79e9a9ed5dc7783f74700c3e2bf29d5450a2f516919cf520a8cb51e667837099367439615a096e0b0a92f387b0b04103655f318dd63fba67de0ac5b470adc04e3b59cbe07936b5e47b2a90f2f464e3d8fa9dbb216a091ff22e0e11ed7d125556f918d5dd03c5cc4646b549025fa6e25f70fcf693b57f825a1933daf3d5478c6de02febd9b23d2dcaeda190386aece90178db783751198e0a102a655a21b3e1dd811d7248ed1366cce09e1af79ebd546972e7b49eb55d9f8ca3305592eafe02307c500dbd1cdee3d6b0092dd2738eb0e1ef70403c6ab2334c63043030897c4a01026622a8d9f64172ec615d5b71d78b154f238f92d9bde5d3a01469b595b545c9e3ce358ead0fec1bf6253df5222e4f8e226007249ae723bd1acf8694884f71e57106caf0fe72605c5df334320d098a8709b45b8416b4796313b40b5fe9914afe3a9e675256c43a9e9429c4848aefa8ca55aed113e5bc53602b505c6a32215d8eb0f37f353e8bc76d2957837f345736b2a6ae1c6680455e3ed2331e55ea7615f174b4971c2e2fb3428e0ae58481b6c0ca6d30a1ee6f05d64998cab5a57b1600c0e64023799e267ab952926f370ba4b38c29e4f63e1a74782b0f85b6db7c77aa979624c8c017068a2bf7ac85092aa79b726d297db80af7905d7702966a67217fcff4e0eba221566e34eda7cb7d7715f517977ccd0ec925db5b8fafd8c4b399fcf492f30072358c934eb522a6f679964ce6496d5884cd85959fba1bf28cfa47ae8fe0d99bc2dc2fa5e3ee8bac169aaeff58e359a4cc907d7bb486a5782593b100fc7f0332067da5f29eea614f5052a6a8fa05f03638ba93ea1455fade21287ca0e4ce1e57dfa28615ca494205365a33c644119f817b945f6d49d87aa90220f0eac34e797190d3468c107b9c722ae9ccd3c1a6d61ae7c64671cf6ea34d3b05b45b0280b313ec987dd1ec01defac0b9e85dfd2622671fb8df940f99134f5e4f4d8e3cf549c3256a8263c76c88137a230cc1512002fa85f48140a4d83933ce7612d0dd2cabe3ddb1fade3d2c3660c9bda0aa58250649bcf1d20409ac837f1e12aaef6d87580a98075d9da7b1584731f24a758c959ae91749585ab8a690a5bf9d8c2658a5ecabc6f3111eb1ac6c5b356970bf69024f3d47537ab13c36df3c458f2d023908c85c0cddbbfdc57df101667ba9e477eb71daafb8cfa40eddcd972260042f9910797fbc5fb4a76d9664ce27a15c9123c1c125c2e1bdbf9b1bfa6ae8a8b7fac35d8eab67c1a1a8149666360b931f221715bbc31356cb407b71d41c0ac1aef07250665381dbf97c54ee43cd84a95833ac67a01733907ee33a6fe92f0b535fad10999efcbce73290a91eabf9255c9e226e383cb686175f243266a8186cd6408d1889a72b5b7bd3817ba7fd4d5035679ad6f7d015ad63d27ffe16af6c91b3081d04b10d53f02252cb570ac63eb7bc3ae9613718b8fbfe7f4317c05d902c820cd96fa0300b1d4336dac5b78541ae698ebab7666515045fbc39fa244127afbbd54eb3c7bda53587063c424eb8fab6c5e97b241643ae49002fb12f92d8976dd8d7f97b9814d6cb36376c4730dfde6349c19741b743095c784035229cb2741961ab4611a1c414610950f76efe7841267dadbb9ad9c1ba913074527db23d2224dec5c1307559c27958c94a041800d782ca144489ee6e1699b152859b73f73602b89e073273347586ad26f0b11e08161ac77bceb975a6b1d883514af6426f344577ba64a23be2a21b8ef067f0610c6130fe7ab6840ffa10d01f071f38be03816f94a185fa2fe2dc9a769c3c4c817c6d77c76798840dd6b802fcca8ebd3762c1e3b7c9d7c4dfc399a5eca0da100fd67f41bae8f1340fcb2c039531f60e5efb6a3439b9c67ccbf34da06994bdf56cb93b4151653d1e7655c13480d3f196853bdef392f7fe9c64f08d2c65fe7467188315d92362e8ade1f53c2848170e005aa2b4846beadcae4b59bcac7a3489efa3c2938b9978905cc327d1414371b7b64fde7f792d28ed2cdf8d70a30edd6af98ef638db3c0ca0b5aa7c45321b7a6b32c53d94344f28ac92920a2d92ac6f941f4aac6a4a8395b6430850fc5d28a7b5005b5e97684a70976a236e681ddb4191bb5743cc4bf8ba2d8f5d445b45037001a992affd77c7773a2de408a4870419e068456ad36203d092f519c5066c2469fd98dba03ad51ed3015854976770cf5f0ca0957ff43f4d7f630eee61724513fbf548c6ddd412e8ea89740569255d857772feb7f1b3163e2d3a471b9823525abc7543c4c75db39e444f0b771c62cfdef9cfdd3d6e94894e50753851e79e3651221a1455eb3c29a766ae791a1fa42a245c5fb686551d2b068fa05d01ce4743afa340350ac80407acc834676ef16e1f0e25cf253333c15def31482fabbab31cbed6842053cc29b016ff8d31061024f0f4dc7aa3b48905a470fbd91ac03b762417225250b18631c56e62f570402a6d4260e70ebc9ad37e912435dfc8efdee4fc312d3750b48490ba2b99299fdd7eaba5daebd7da569170a68185c8947b0393f7a53dafaacd25eb00c718863a1eab747ddb4182776841a05711522018025817c8dc0a37c97c08852bd95787b9842f3c5cea8e8b2e407272154c2172be062ac4c25de94c3731ab13bdcadccaa8be7887a581394e799f925a83aa7a4d11071a3f86a371696e9e6c0b19241ebb822e25cafa17b868b3a62fee04a4d2fb9b75a4fc7835292bfa12e9dfd07da3d6d043a59abd46b2569724b9912ad3b22ac7e23970399b76e0442f9306762ff2a91daf766b81768d948e6bbde858af9e3720dd662f2d3ef142e75506136cc391aeb4b226a1c92fc0aef41bab5830a10dcd30b7a9ade5a81ea05e13a18b46c0f754400c14f206fae202729500652550773972018260d55f55a502fbf3d276b09a364a0dffc0cd30683b84686b93b92661285f5b7eec8edd4cad906e7b8d8f0af0c13d4815928e88d9c6a4263b686eab62067325fda564aa4a4660fbb710f248a191944b14ebbd6cad105c2efe57b847d05037f18d20193f04fc0f14250142e21303d9776c30fc5468b5071332f628946282182ebbe0ff13d33af55843e2e37fcbb4876d9a06adc873314f4367a822096f38be6df86c98b15b8fae38a21a667a4200388e0cd1543172f19f601b02472f7cd0851fd12778aff466b425be3c4e5a0c93376953258237ee9271d9ab790a6f01e5f6c4c4a61158445c81bff6ad0da781ca3e700b87aa442c706110b790ee50a4f59ded417ce552a1dda157fa0126db5831a842845c5eded337d7b5cdce657cbc6be4f9d5f08717c3669d9e26bd2c7de655ff515c27f270794560393ca5f23bdec5669b00c5592fff93d0e30b5570f7b293be1cf18f17916525750ba2ac2726829e8d11404fee03dcc1d5d7265ea6e153976f05f2d630ca4d5490bd8e3576b53e63e32d1314a82bd18d26eaf63d30c33fcd8cbcceb1d073884f3dbf6df663706891e32f07983a1074625e8ef975a105dda291a1e3966935bc91f691b0537fd097c517978c6ef64a4bcdb743ae9c7a31b3b30845dfe88d8930b935d4f3d12e6e5259fb071ffd8f41be4bfb9994161ecf687b6b29224c9fd6bb3185e9a6f3e1a21eecf7fe30c8478f4259860138771147526834cc592722b68277614058304c0453eab8dd7d53c19b8e62d10b1a33f4221815ff9fc30ca8914d075289762ac00d97cf983544147ffee9147727a7d139f80fe126141e61b40f616dd4259f27e0366128208633aef511e8dae2d76fd35531c06632d9b9cab7796627509511cc1f174670ec50ba87a38d0422aeaad0cec857d021b05133ac4577d1a062689c9bff289e36562547131db8d1883512890825d29580290afa8ac0832a8584009dfbe2c2fee4e86467e5c63dc778009ee723d04aa72e07779ceabb13d723300d74807caedf092d9eab743f746c7ebbb079b66a288b67d6179950b7a27e25f0efdeae2f24b51f90547042dc052708a0e7cf2445e498ea1f7b6e3128c775ea31183af96cdd2794baf654e64e588da26ab545e2161776113e138a20a0fb550c9b26f7d6d8209d150814d7b2e8f706d863997c943d399969cc607b8392a6a1f9798cb3ead3979bfd0230675d4e6939274614d1af3db3897044f2c0fe8061d33d66b9fd99f1ca8ac923d98229d1178afb6cb7f3979a1dbcb1323ae8d5ecb56f44dd5f1368b5020015f760c6cd339a72e151e350d1d4e0a9a90eb951ce5a09dcac67ccb3db9006924ff76693abc85a97559037580270a4e6c454ee9a3c3ad7b1d070834d67052097f3ae6b773a21e05ee4a214979defc2da9f8f5b309411b7755da2235e9fa6e8a78d86eff01cb2b43ffaf21b8e18c4d31b97287fb38a7121ada0572d45e9d7d7479a0b548cb80d5ec1252aaca9e7724e2057badc7173db9ea14509f1b1da2a74de95b649ab90844878ef9658899e7aac7f3db0f218e4a39716c8552120e51139f30d122fdb3ad9f9cdb6df9f9ba260768ec5954108518ba37486a32c01af1eaf1b6ca987aa1b50fb361760f26ea7b624d59be249de4ed63c311c9e82d27cc53cce20e6e186b69bb5587db4f150f2de3ffa0d229ce93125c9d30681b611e2877b71e644be0fa11cc09b76660d01285b4052b5d08ad7bcfce4d0b0f7465e84e7e3ad296d7d834f5695859ddeb5fdccbfae760276c42826be15b0c889a406b868fdd646abb0a025cbbc9d30997c85447e02ea9f7fb949130bc509a9a37fa9117d2293da99f7e4d90e9e48eb20d1561408b616d975dab916488b41c0cf09c414b70a5c51b2a3bfbd71c31f2a0f54eed00260813cd3b8f68506c0dfca76f2c636891da64870549f57a7c39689af679dfcdd7ab05623d49003c91e5a1335cb5deb75c4e83b6d8b024c03083566ab8a01ff0c6d3aa1e0adf3f701ec373785e3c9c80fa8b88714a786ff3619725d6e4ca94b11d076ac84b5c0f333c30da3d1ecb840b9319dd7e03aabd5936fe3ea72200285701d0ad2aa7c557cf13b33e4c44697e9f4e7ee8a5ac4ef83cd83f07a41949c22c9cb5db0ac724ff8acad4076b771f7285534413b0ed6a07e26ee2ea9772ad4a76163e5c315280eead8a1b9d635ff44806cbf2c5656d08d29421704e46d434a97e97f39967f1e20e7f7a1169fba5f0e868de11658ed52f419919709b7be8e7c58c465df8734c51464ac33dd1fdf11b3bf3b3285df1cce83c3b7d6a38fc56cd87e74b03e21f0ad57e548c273e2fea7e27f173bf1457fb3aabc075e68f91c5eed7d9cf6dc031d4769ee7fe58195b392095a8455ff287092d76712b6d0704dd539ea8fa24f872513d8f494157c84786096e61528e5f4b9fc98596c486081c4703c29df3aff4aa2a3137c27cacb5bc78429864c1d7c3696517c0776bbafaa0ab062d00e3961aa1065b7f9cd7e04681b7d2fdf9bbbf86aa021e105b46904659b065c519f162d41e8ec14f1d7b7ae560ecc1846868d010d61fe65b8c7d90520fff27742f469a89eb6a6d908f9002f91fbf1814f8ef91cab563788b50394287894054218c09c6a0ce416728383d01ea87d7de97f3798a1a0e77db86f0a22f4d911af5b476636f8390bbb50161abfe1f60dd1bf49f2d4469ab0217 +MD = 59d8c1b00095a507533d1594fa94fa15e0d20c4f7c3039773d184e0f + +Len = 78872 +Msg = 463de37e79d2d7c96002dc40af3eedfde3a108198226907da419f1f5b2cb82876e8aaf0233d057d97ebb7332aebdf93b089500bdfe7e24f3b1a62c9cb4e1ea4f139f630f941c301f3cd6241715442f382fc582fde5d7f4f26189a5c96333e1ab3d6447cc231c2a42a13b37176d3a589d5f19d901be98ca23bdaaa4a545272f43f5c1a26268390cebb6d3f4593d073c11a1794cf2112b6c2eccf17058e4269bbe429ebef8ebdba0c18284a2060d12a33dfccd22f867f7a2ba97475309c899eec42de3e1b7356bac6d0d378b4566c555c878fda43a4664366f249293e177e6f0ffbd7854c7cd4ff9965fd5f53fce87195b1df11ae139daeef77dbc79077b776914fa455f4f3bf14fe58144291ccfc1b99ef492cc14c5c194f7aaab4da35cb221aeec33497708b876027a6e6f03f1d9fb3804c601fc7481ee1ab14957dfa001e0739c285c69bb0b359452390e1cbb38a8d2557602c1cd82c5059c7cdee1d1cb6d0b110dde4adc545543118f5090b5468813f08b188a582de063732e2cd17677911f53cb1845f3fa9fb9c0577b87676b62a4dceb897f9ee809da3c4687d8186f14576b48527f8965d89b6779d8285a10ff2c21809dca261c061201ac381e3e1abe5a606ed42325fccb940cdcaf9c159b2854c8309e907832a0b5c94887ca70e056d13a24e55750293f4ab96a480b2076a3c4d8e5d2fc1d909f689d02bb043729a6630251ce439154fb65750aea9c04073823598683339ca0cbd584c21ef6195d74b9bfdfd81170e3c88e49a4df7748b8b11a54fbf7607dc9eca48670f6c5a0e4897a79b548e6753f6e6d3b216dc574f0d550cf2c76a94972c97dabf48c9c5427ad4f38bb69ed29d0b5a95667ddae11166b6ed5014a3687052b06fc3628a1bc8ca7e005d9824b13fe65ea9f5f7759a6943c1b6b62ba30bfe9daea801e12fc607c41d4e7f7da2bbc3245da20f182efbbd110009b370dbf7a869ecf3f9591d6c86041d4e7fdbab3aad21e1fe0064897d835aec46c688c0a3e443f5e4281ee577d9e70870cd36a0b6748b861e7840f7a8628e010e7dd7f3a968b843e90cc72a606a096965e62325c7bfadb493e5520bf4c126c8c127e2e7607c33617315c62ecebcc7ba8e5905ace6c524f7eec5fc38fb35b1bdff734e0e71b541d932e1b0950b58ce666aa462988c4b6dba9f98c3f12426bb5b29ee5deb559a601588eefaefbeb47a177b46de8b30a9049726ec2de6f81ab02ac0d7a71074921aa0e59c29814156472850bebe076c7475f8052ebe6cff881ca764edcdf05742ee05e987b10c4bb4d2235b8aa56fa8243e67cadeea0593056d4b769f170d961336af052025e3366697931c2909566c3eca50d87b35436b093e91864a36ea8989a116b8f3fca889d203e213187e4e313aa66dce9224a8d009ed14149d91f9da2c99d77571a9cece9da3bac0e768a99f8e5ef91da23c987a9e154d9207bcddd062ad6bdb37b1b86d1ff367b6044d0affc0509d3639e1a4c32c23989ef70be934c2383e5aa4a907fddf7f8362fdbfe4ea7727c4a8b7b860323ab4af8c0a23ae5fd1e6e97456f43fe952b498483225c9d8094109f5aa253d505034dce9af88bfba0825d7a8bd27c2c8201f00d650131c50fd48d7ad8fbc9e95e320bb5865af8febdb71936845b83302be2b77adc60c7eddc98ba820e6f3268b9a04c538ab0c816dd256a7438f39f3318376473f127643e7049606003e4d4799bb5d850b1e2446a873417dcb0801a5dd266c09fab3e51e0525047bcbf43f9458ed9765500d9b423434cea15f3eb3ad5e0d993a7128ed6fa0a13373c4b75e7f31974f00a817b606899d5a9c8091d48c4caf6a5322efd3ab421fcf88bae61e6acc5ee0c163bb18f6212371d9cfbfd8b511927bde90874c7371e72514ff0ee409818af932236648a3935da0e3ad0724da554d3a574a7dcc3ab89dc0c311a063bde9c1f4cd57b7a9a148a2644499066d4e70361237a131b7738eba4efd8339021a7d9a601d811dd051b9a84867243c06a40af3b00a3551b2b04ca31c3ed4373381a56ad78d200731378ec5a9d5df26855d8dfc8039974c2273ab1eb4f175399c9609b9a7a6c51260e50091152b1a545ddd61b70f60178fab200253a5dff69e91ba030d7cf4e0bdc3cce77126b1662414c63eb9b9f866aaa157eb086b34c904b78039eca3f1f367fe717c0c4b0363343e8a6d8b1c8ce51ba99ded9371aa7cda726b16cdd9287dbf655566b8eebb61f34fbc8691a37813511834528b55ab82ae56ed122778f300029ceb101dae2412efacbf0273fb5481e991edd26693b26aeee988b48ff00bfb0009c50090f5e7d697ea147988609cb1539b1ce5ab9859a61a8ec0967dfabdff063065c0b942712d7a8c4f54658fdb121d983404d0effbb4cfcb270067e5836ca3a53fd90d305a981617e21b91e57a24b61dd5a85d1733276d231ebae44d16c456dcc5a1f33c0ea6d8f15f3773ee0489aba07448c68a7a6e813b29fe699dd2a69e4b99c401c1f7ca51bd2940a22604816ca4927ea3d63c0a8a57db736e543183f8862ea7bf6ec0831eefd2cfa309f4dc77aeb2b25b67128c072da592690ccddce3f0e6d592aed3517efdee2cdd264fdb6b33477c73d9885376111ae3f0240211ff2064d611eebac6105bcdf0d6f7800ea5b6e3458399f7f165969dd08a4678e388a93b11c3bad14171ae14b416ea4ff6b5bdf895e124fbf64442b0e0adc08ca23edfbc110e9fd163f15934df239aea2429ccf9f632f70ed2909a06bcb13ed7de80586a7c791a15ae3dd1b0da7375e907605889deefacab16e900d19d5b2dc508db87e88c99962870a5cc1b4e8d07e720f7d51ac88da24b13ac1bd43b01f9eea1cf0298f9c6b0845bd79cc6a3e6cd4ef16ee71f4b73747989584f70fe2c4fbf59c94d1e1ca6d5b3e031c86562f732ab0923f319c067afc0c87c102a5f508ba16168cbca9db092317e42d35a1454d465c8b58d9cdfa0909b51960272e7152a5f791c0320d55a6277b689522720863f09c0921b1ae1d4d363d5249aed2dc0c824015187d35c2ab3010983a95f2ff1bf21815820068f6ae4d493b64dfb8c09d1a99ab7ce44aa982067e7b05d549b2de1377b66310220d951484da9a0109a46d35a859d4ae749392716e19de2c9ea9151a62f5ac2705eb68559339d15eec11e49b18290824da074339887baee0196d26d080d8458e391790d62160f23c8a8e6a138f23008ea58dfd2573a85b3ae4857bfd7a6a168de5197660d455e6e40ba36766b54ea434fcad28fed8a8cf8224797a69f7b0076b317a81ba5422939e96d8435c34b2dd5d08f02c8c5e84f00004d28ddba0b4017246c118ae4acfe3b253b666bdb1579152f1dd7297ae43a8fcaa171b1c1d7deae84c76a5025e62bd676bc43851d746a95cdefd60e76feddebd3ed08cf51513ac166a228f7f37e50806068a22e04b860ec1f7d65f434a8b7a8ce985472b307f2d44c94c3eed7e5faed74b918a31b81fa6c966f2d875e72463b1d2bfb68917c857ba917c1a14dad996226360d90dc41a5bbe50d93143edc08374230540d672f610bfe93a8bbbf45aa82f7680783c177e14e6e011d4760567c11c01e04dd9e812429cf90ff9ac73eacc45ab77cd865a53b98b3b2427d6d62205f396d7455b2222d49aea82ccad0091eaae2acf42b335a131f38c9a942a09f8373f0a729124c831aeffe41c6c874358eab01c0f3e8a4f716666f9f9813c45f24049853997fc8144b8130e634102e346b494a9c029d451ca3f2eaacb58d2331706592eb5c0abf565da2091e1b4e5896431a2f8696a59e2b5a492c89780b57a6f72b72d6d74f8cd9bfc6c951e2bfadcb9472132926be1ab397dd97be661adc3026caaabe91cadb1ef064041a10f07854ddf5b7ec49334545eb24cea3f6381b6d9dd7bd0b21e904867e0e4bdf2c9d52b28e29605854a19842c2c333e2aeefbfafbab73c34fe46a3b0e72a03299bf2c7753361bee60f85ae3acd1d69e2f6ae13870c0d8ad48d40231e9a5bcc81e5bd311d5c53262da05bd1ae58a7c33d73ffc174102f2b5265822d3025f7fa60a0494a0b67522897dda0bd1df406e25a9d51440755b0b0470d790c9608933f5e52135ccfe30358ad0dd0bafa3d9f59b2e95f15a14b269c1aeb915ba0b0c1edc351c7f3fb6ddb18e5b77875d383f57bdece55a0e27ee55156965794f0cce8884845c3a9ee664dfbca7104583a658dcb46d2e1804b4f917282745842f6ab9bb1459492e9494ad073d3b110fc8f60ecea839d9f4e3c6baf72173c0fe022db4feb53d4b22c7ca9f71389fe0abd42f4773c0d64cb35462193d28d23eae725ea6988fb7cae0df8f2464d65ce7e15059ed1525cef120fe92fe3067ce275d250379d2c94f2e2e85ec232a3ff98d7be47de7faffa92f028a5d511903eee4d3c32714f48c8ddfd561e785099afe393f37a21d6a75ed6d209fccfa4027badbd8f5cf5f46fffa469d1a8b304a0ff455f7f2d077afaf241543e6e5e2edf9bb75346305420f4b1dc94d58dd0d34c8624869bc0fdd10d6d58e3306b2ef68a1781aaeb4d0a599977ed1afc5e70411ead07a5e3e6837d4128940b8a83b0af8487a33109039702a0ca6c78907b0fe27a0c6539d20e26d448ac7939a74871ce716472620a1468b0bd21c11a4c640e1c010cd3bf0098667a86717efa0119e0b7b32695da78c01de84106819c8aba09722626c9a1da15b0e48d001bc942888c1fdc5683e6cfc7252dcee1345bc5dd70695bf2cd8ed9169486bee0e623c604d24b4f6ca333997a0cd5d95a4ff4a85ed18634f945d2881b8fe5ae9c5496062f61eeaee19a3d40593384d2da3ae38cbebb3d2392c91961851195ee8afd9cad68b96e5d4dcf606ef537cf5dd99b94fd6d8c12ca67cddfeff3b7fbd13527b41621273efd19c9397fde97f9dce0d8a574fbc29b7bd0da72ade7e1abf9338958cb1959f4e0de0e44fd65c2b8d28878818dd9fd3bca76658e05c23d0ae90e99174691b014aaf3050f623b4670c128f1b5a298aa7828b0f59e921308bd031ecd5c133ad812de0143f538bf91a63b4aeabe4db848d539291110dd6b0326f9fc8cb3bb652073dc715192fb7342edb376ba07f9a966d75e373e71323a8add10208d9a99b127bc48dba47524e6d8abac34f63f30ec72f31a83d45c5af22e43e813169d589f5c508598c2f84f9aa16487fe15a08e01fbbcf067892e92325bf0044cde2852904ce5254123a8d60f5bacf94a9ee85b8a6f99727ab354826ba265e7463ac8223467ce9a5d4d0342a555e952a2f87343d65d2d1335e98aa61e8019f397c2f941ec4b817765a5a4200d3eae367fc8edb18632cc4511922d77bb7380cba9fd282c2846b22ec2d3e808975460176976943f1a8f1b9aa653b961d2fb3ed20540016b8907b5331d4e6b36e455b377d8882346e3d07f866c94bb0ef595a8a92241e16a8f0d2f26dd7b8a6564b0fcda55840763a2958c9accebaee983c162a3995954b39aa5647c7bf1e20ea8e4b0a158e0ad0fb74ca74a4faf116c1e0cd163d31cd7d14c8f19968127fe8d216f838f6b24a0b5a27474078d856f0114e6897c5802e74e1518a32785b43c7b5ebfc9d6f4c67effe49b6774ded5246318dd0f3f90921f7474e08581e1fd1853b164181a9e5c94490e2fe5f4ec34edec8a5eb7202540cd0eec6555482e893ea0d9ead2ecb04d8d2b7fb0940a0e1b0817f9fa35e08e958c57fc1586ecd3df0bdd38b2aebfe32fc611c9abe646ecfe1f7fe82dffd32516e9fa248f9ed27a750c834e59fff6af69db866ca0512de164a08ec568799a913b425fe61201bb7ad1bd1d9b5f3b336d823a03e90c691183d527cf224827895b794213c17b53ea6d7baa16a03104f8b60f6e14cf6e92a45cc601ab7f3bae21dc57559036fa09f1bad93008ed5dd1b90177e43370357258d4bdeabe4cb162169c6bf97fc73c9863fb80fb6ed35425e6e84238ea8bff6ca174333f720b47e7ca242d9a1cf2a193a3a7f968a302a27624c304e894633af600c3cc7c614b7da3af0bf2d3f239c7605338a9145ffbc746d53a165fdba666b3193bc02e067db12a47ac7223ba0d2c92d526266af01f411c8aa61d2b2ab601083d54d4c0dc2290f0269e1205cefd3fbfbc18e7f90dfd9e7bb7bf8fb70c22a879ffa760d14cda7b79ce4968f69b8a7f2b7a59642b04174dc8debec4affa7cbb9cd29c0adbe2f5ff3b9146cd82ba25798a9290319d7cdcbd98824c72526014b8d558ab194d39159aca221ed616a56ead419725c6bcc2ee9c7f24e10f6ae78b3ea7e46d32a1b9a9cc8a032a193ed7c688d4eab29a0580ad38c1490502460b50aba9185aed85df33031f96f0fd67ebbdaad91faf320430a931236130e17026058e4d66ec80463431dcdf501bf93e3bb471b2a87405255d52f3fa0ffd2375c21a650952aab18f3336b86de103930e525b7bf617b9ba05514b2fd997b25ec389efbe616e0df7ad66b2342fac306174ca132817dfe89710d6e21336aaf8d9e5c825f8ea0b9ea94d4924deb9343adaee0d6c149c837942e438c86c95cc494b59173da307ddd56ccb450ef68efb8b65f696d6bff884f433dc015e8a6b5e2c2999f1975b4f373ab8c404f13a15649aa91ae0d398b066e1e074cb250b4bd309eb24e1e37024ba46f3b3e34c07e121e0fab785f31d58abaaef4ae0bc5dabed7b06966272902cd972c4077aaffe76a6070178f0b5ec65c5e7a6db0c74f00feff8024aedf519dc0756905b357d7c4a537523cbbb8c544c3800bd8188ef60ec6ce974cefebb9b96e65aff1b9e350fd0cca3f82c40e70380949e79eaf0ac3ed5e6f7c4af1f6693f1d90856c53f7727ae742be5171b7668b74e098283de1bd830e08b7847ca66718161d73de473b46247ec658118b58af234d6da6dd8abbedb91ec2d16458a3bd2aa13501af5e56d3e1187f932ada9c54eadb1a97245d415978d5c451514c96735f0500b84860f1219afe95fa0526285cc7680df567801a0ba67d37bfb322278f9e8ca51f0f15b33938792f120837a7cfa13a6e470db9ef0b2c5c42a4f1a0fd1bce7c4dbf6d454522a1cf75659cd5bfb5629a66167ed1685ff3ba0e86758fc11ed91e1f1ecbb74ee4bf48907a2ac71817f1d01de921902c11e2e1c2f0a6b61aa1a6ba44c68f347788782ea8d918d65bfc3624ba4860bde429e0188767ecdfb1ab1d98e33f23846815b6c7e40bcfca306d19de65bba22237add7a68575afd02d4426ff250fed6fc893605d6d97b86b3e71824548cb5085cea7aed4e3a157523874a93932c057bd3f0b5e366b053a802e1059a288ffd0af501e4deaca734c2d77448e8c31dac7357784989a05debcd3a752863d50e08b68661b9c306174f72994bbbd414ae3a7a01506f5d363a8a82a5240f15ec6f5e977b8a582edd12bbe0e37e21f9fa7655ec6c4996028aeee654ed7e1834d12c653a6edc4ea6b41210aa307bf9af06de7546f2a46bee00e355b07dd3e22515ddb2fbbae80b9f0dadc44b1ad5d177ac7f2f163ef14f844aa07f21c0c5db7b4cfbde67fa2e2d8c5c3e6d200d0c17f87db0d9d69bc0cf69cabeb92570e482bbc8ff3e1ba72f12f3225c71e5819f5b85dd1c0c04b3934a030386aa37e880764b2c6058734c5b6a67e28058e813000ac44d293c2cf0d96de477a0b8d5a25a04cde9b7c3fb4443726f3f32a8c42bcea4186060f0bbee03a992a9956b8b38a1dca8737de7304977e95d7afbe7f6566bb616a94bb03df5c26b722bcd38d516285c5f6c1b68aea6593dd738347cfb0d57cf337a41f13fc276422750b0b72fb53e127746289ec2f567ce40f984fe3ecb135df3660c4a1dbe9fcc06baf85d07b0538d74742e1009b134394f3165d25e1a4ec0dafee3117454bf47b4ed0c910972292bdb7884530f544f0d36624fafc5654ab65e976eedb02f4563a64956098184ff8c10e5d3ee40791898bb1eaacd0146979ce2e218457da8e2ae5f727d1d2c53670cb92e8538297a018a31d91fe0ae48c5f33c4167af195be76634daea424687f05c38d520c736e1ca403f04175108c656379f47e5813fa2e449eae5162f8c7d2bc9145c2f11f54ab369372219b4bd49b90890681a724d3869b7d643892b5acd59f1d03618bee10f5d53bed5af72386d7eb4b4246ee8ce66d84e8b68cbcc3dd33b54f0e5661496ca389e3a713110168c07ea7f0f6b5b2fc8c05c7eb75688a22920610b0cafb962e5d5a73e975724b44ff508657b88500dc8b29024c1a1f72459b9b462fe5e23e1fca51d3fba8a16be03b69cec0b5e4dd5011f58221a468e30cf57bdbd4ce9daa079375eb25d326c7041dd26973155db11ec6732db23acc454148aeb5e7aeb441ae60cfa3af1f8ac97a4c923db8ff75e50f54aaec4605d200aa3e3dbeb0acb06adbd865e4e0b354d70971b134d79bb6dfeb60a2a8262d027c107d2fdc76f1188f58a3419402b80c5b783438351712a7087a9564479bd9e4213aad8cf983a57417eb6a6b9d5b553bbc903c2e27c28cd0c88398f7b3eb310158f2775dfc1dee4d6a5dd5e9e534b3686219329bf41e30ba88d01463d25e5ee087fe83a9cd8df729f0758bc556d4f91bb5dbbd87837427ecae27afb18e3e880918277878541be69311fd3507d78550dc1d9d86fbbc0b99eea45111e8cdd1d6057135fed2790ee41035bb7ab54f8de034022935fe872dad49d016e3107961715bfcf0bfc024b0182ac47903d9a835d0aacc457199cc208b849c3dcd32793481931f2060493d47ab6826fd777ac9c549c7e3bae2d3732d5c276f907654b5922d36448c8c76ac1cc452c30f7fa19a857211af4f31b4649c48bbb0d5878115c59dcbd2fde94e59778c710379c35503bc741299ce064488b576c7c9d5a7be8114fada313b1fd92c9f2b4c4f02ea9eecb4765207fd088cc5c00fd321587f15e1c66cebc80ed71f0edec86c0d719d843db3a15862a6e09304043a672026b78d1d241a87013eb929e57a8b57a78f8310de021cac138f36612eca200c2e06f62e1d762d3543926cfe9bbc9d9783244549b7e910d68081b1ff295ae849b3c1e401ca04cc7ef7d399a616ec26b40bf88a38b1afa55e1343f974dffcbba7171f2a0d0a1520e983c9e72a40524d34a5d2fbe3b29e02cd339fb7c836f8c1adc2e8705bc6f251fe503cff91ff363ba1bb7b3f54a3fc50ab475b9304189521e31de45df1e7e48645c6f488e33ddf1882b4bcff936d12b67eb940342f6c1c04d18edb9ad95331e7474db82b28e1960b60f85be3a6f6285dd0f01643511ad591007e94cf1bf4219d8b4e529069d3a33cc2ef20929728866d2854a567730908f1f756d8a3bdb0fed0992f885eaefb4ed43001d5b56eea730d0f4db4499b23fd4b3e7c6fbec9710ea7fa5a233dfd41dffb329640f3312339650c430d90d44ffcc85e5a21c9461e9b4b3535ebd7608d9dd851162bf5eabd1e9ea79e76e523754c90de56b66c3d9febe4d22aa7d1dec7d19414e95c63a09f6be068c6b8f0927e36ca46daf54eb5dc46995aa021d67fd7c35604779be45cb16752d8249b582850029f1f4da718b6bcf69254ff1f8c4ca5bb47a728b22025db5c1d7e1ee6c6edd4f836ef179471492a42f848ae6a9b4c19018f886567c003059068e21d63e1eaf25fb841a08402740b71f3be17caac881cdc552c94846cfe174c5c8d8ad8522693814c9a4f3f734148ccaa3fa10667069496c11d1fcfcb1ff9d82106cb0ec0a99da41b848e8c6bb8c99b4652b4e873d06b75fde26c11866d947cded54acdd47cfa114c86c53592e07626ee80b83679ee87c22e03e51144f0ce80bc836ddc36a6901008295a0091c137b4cb5015b92066d2c47f08f099aeb1902be2979e058d2f49e877f3b6b61063f58e054a3439114232c5167af76f6cb7c3c77899440e81200be3c06e411fb6cf96fdc3f67b7ef38a910b1be1615c250b4d9aa812c6c0bc80c0470c2263022c0c04472ddd534f6f44d6dfb7c3962881b318ed98898ee3e3574f5d829685281a2225b46c8625752d7ae98911aafe9b2ab90a077086033fa1aea06d4b520d5a261ae38ea87957b9d433b251531d017dc5240d3259918d9b9b8c9bbf8ede655efbfb251b083f53e10c78187fa2a50795fdfd08b47b3394c17cf9289a74c3f3fc3fcdd2a5b55f7fb57f50065a29c978ac774be2d6fdf38077eafd2f48258821fe9b98d472d76145ffd3c3612b0d11bc8ade1685e0075aba868da1980fc8b5562ab66512ca95ce0c85b0d9123a79053bf7d867d81ac3efa8b60fec4b3885d2f94a393b74f7172d3b10bf9b01cf932e5dbb0d45c3cb573ab3ce15e7300a85687424cb23e24086063c68a710163283138b9d27b82e3debc343984a9830cff0fe2e81152444ec0ae2765511403aaa723c2b67cbc801b6a813c1da530931cdee1d8f28be468244ca47519fa53453818832a7dfa37e247fb5b1935ddb421c4ea54cffe36f918590efc0350d0af34afdec7c65ce57e180e03b2523e98849da984013e678d00e3318a0d28a69e9850867c7a2cffb8ff9fb2062f8d846022852f3e5faacb088c475230607b879e9f37407402d4b30f2cf7e8951b1193bf2e76ba9bd8ab95340bc34fa48e62706b344752480a44333286af26131d85091008c0f01ef4a76299ffc56e690f740d7ee80f507ae8f1ecddad33df129f5e410d3212542a3c349f94e8ec42d03c369b643b0dbf9f37744c6b010498162913d8014ad94b5037b9b8df4796717cbd10b695adb0f4077e21de6512bfc590433c3a96a3946a234fcd5ab3ac626ee10a98fb9da097824615b11f5662b40c03664de537ecc225161ce5d1cc87ce8f8f9d45b6e6c4200efd96788ba9619fc0020abf645f86e1009b0779da845a3977fafd9d950b78f8ee70990eafe8afc185feb9073487f27f8134981fb165a441ac95a40702664f70b56175d9f89e9dc7b26bf9bbd24bb00c2b75574e130ae66591e209287ba1a835d822b560f235cc20f9cc3553ca15500573dfcd6b6bcea113cc82c5688d2823a6db46e04a2948bb4bb0b20455886f5309ded6531e283b54dab0ea414da374324233307eec1a31dbd67b9fdf47a9d42967d0fb90ccd4db8238e37b155e5b1064967491f9dd21abbe2fbef83e808ace53cdfea1ff0dfe29a9acd8c7a9f110873b2223cde973fbf0c2d60f5daab6c7c852aacc7c064800904bb5055287dc60331663a556b666e5bb9a57c1329c50cd5cb67caeec4f0188c9e8dffdae2746c6be96d99dcef91c9b56952389198bc527f5ffb23a7521c0f310f18c362d10e6b0842d0251991a1b697c53d7db6511aa541e8ee9e3a9271cdc1006482361cd22ba2e596c8537a1d9fc7746d31cc79666ce40f4822eead76ba03187a269fed48150179c769d4d18deb0e1fea3d193b2911317b12990dcbb43ec1006195e369f98feca76cf0e2bf7a02346ebd8ae6bdeafbedd454eadd13b1c2c15f21b94aba6c022d178b44c66c6b4c0108edff7a273192e3c414fda7aef7acccdec3781e0829d78a702f4fc8ffe8313d9682831fa2873edaf15cbab2c40e66aa254dbca57ab974cc5b5df82fa17919afbf85001b56726799033309487c7c5623dbca6c2939a343bb7f1f274579a76c202cfd5db76a7c75e9a3a2d2affecbe6ffa83f70f06c6faa1e857cc450b0f9925885f2823b062dd09279affd3073827d0536b6b0423ca613be147db8996df8f31f716d57ef540ce05c2c657213032a82fe2a361369d1cfe564d528e968d92af73d9874c31a79a10e0f65c919a0d54a5fb32fc883ac527288d66f8740051c190779a312b106a074c072cbe5da1f126a7be9eb73e852e81864dd8ba2a5b75d4d899c3a4c06f9ef0e5f4e07c09ed7e1133e6b063f28a4ba48e140d17f01c7c44de76e042cab3c8ef6546bc0624b116bcb100029342ceaf18a67c9e8283a7d7aa187b7aab98817a6b406919fd4cb15d71d596ffc5bdc6cb4665e3e79a53a21a7d1d33fd3fb85d15fd1dc884b1d042b4e8e818126bb20712c652e682bfce7fb726531ce28fb8bb4e0d440176d45e09bf8a8f0fe505ce143800e3f0fa7372b5304e60b2b51c0800652459908ad5546acfcf20fae21470528d9e9f9fb955eed7085dcc81ff5524e10dcad4e21b2541da783f44458428376695f7fc5f39b77159b1ccdd072bcbadb1aa792c92b254a4fd4b437f8c65a181a4d395709c0648c8a1cf1438bec50ff116cdb7f71edad3fc37bb84294be120fdb1e90fa2e2a96a4363b2dc561545629d64d9ff9ae31f33c61e4b69d7e09126fa0228bee9df9dac80040f8dcba74794114071b8ae8bd9f481157d7d1206f014050a353bdbdf5d7ffd072790efe125f4eb2e078b9875a586cbb1b4365e1b7878bd5e70feef5e636518e1ad9e695f7b0589821de0ef3d0c6af477921e128ab4d571637e80aaf939ec622803fe9e7eb1568ae11741295e792199db999ce5f11fbacfbda069852c5b86775ecd4a15cb63584dcfa634cd36764b2a623d5b3edb239926c1a902046442c3b6da6c0955d1fbab70a22d2451617e38348fefa183a56ad12513daf2bf2d8a14af3f52a4d50ef490620d2ea83c7c0b8936c943385aec40233928c8a40c049bf9df0233a529fee8d7b0652d3904c2a8beafb2ba683b1c6defe184f4ae7175e2f3b4a761a2bb0e42b1da4eab4f40f1d0391db0c7b99ab22ea79c9ce16a85fe0992ceb37ef60ed99cef4e2e2b5357661c88ff67fdb5004a1cdae8e50170c0198a479b9ade47abdd51c09a98100ddebbd83ec32cbee2f240b2fa5501f749a634bf9299e221e00875fbd63df11ba74d5fbdcb1793adbbe7328ba65f58156dbeec4404481dcc87ab5005a0a6ed80e809ce17ae5b212cb855ac014f666bfe5550aca20d349240870ae809b073c1f228ba7380690c59ce50d3f9ae5608c204892202441dde042066bdaa72761332d1e1c60c727ba992052dd8b7fd6ab4eeea81a969b4c6a2d7eecf3a13ca7203a4c2bbc2e58866c18e6397da7378ee0936f2c73d6f7e9831820df8e6b09c24d38c271f179b1caae2935c376f98ab60745edfd274600bf2e896f09c6a0d421ef17d81746aa9b9c86b457174feb40f6264bae42be507d777568b49222a8666b0ebed6454027dea4fea2925f90e420f5478dfb24be5b38b8609d38a22aeb8749b2150425695942891dd92fc0c24cf35c71f31bcbb1cef72bf611405f67d2fe63e404a9dc48a88ff4eb4275646c8a81d2ad65585e1e1383783faa17f460c39560ab730f95657d8c8c71c5ae731608920002cbf8068e91a446435104879d2712e9104a7c76493e02fab64b2014482dee8e780d44ea88b0213d0bef4e41a7673ea51a7139a77b55bae5c2ba15708b615c231713843394d8c4069e6a3e4905e9e13dd1d08e51832879f69efcd3af660ca667e8c500083a71534904ac1cc83f17c3583d50c29cea210ad551f7a2f862969204f20cff9203e397ad469b30e5de58ab9f67d71faf37a63429e395cc730568e99f3dcecbf8769758db6b21c1c9691363b9564eebb3f221be9a5dbc984adae872e3d2f5aa631cf35e7b7b25189b68b2b150129e6fcfa4f971d2c6564da2667ff775b867e5fb7b6070347f8e7e84649c5e09a4adf32cd4961576264a34a633953e00f70ec3e71d4758ae7d4639ace439328e1365bff10a6072318680957bc893112a98d08e508a0edc928034913a70f1f48767ad1a47cebf4fa8ede0b84caddf369ba2978c5d481fc5888d40d056902c6e9ba96c4e56a91b75866352e43f6be375fc1d4a0737e1e0da37ae523c2acd526673e08ca14522dcad71f0be627c890698f512d14505ddbbe548ea521fdbaecba5b714f45c3dc26abd119d0c7b2c8faf652d88148ff0c217ac624a28bf94bcfff30e4d8cc6650f2d6d10712474770548a64d87fa2c201a5bf92ed4bd657b7d571720943c29 +MD = c86a3ec36032e2bcb10de70f48da8eb2500bca0a14780490fdaa1b62 + +Len = 80032 +Msg = 434f8fd07be362ebb0f45fa4b2a2763f8969852bb64fc4d7bc6260c7df6166e62cbae31eb9b44a262eee159b8408af530da092eeb580acad871508887324aa7a4eb8bb201a5fe68288950131bb81f0924fdfc6799a3e2ef9316b0a7bae2d590eb1325efe254affa8c5d36b8cde74ffa4560f6bf5edf01063c34badc91be53b495e1115e163de5c3fed8f9ad7754ba5322a16c78937001b92449c3a9a3fb417d45c3b28f15a83c7f009b1d738096daae4d4de225efed5172fbc48f915a403b756b39adf5594a206631f206ad72142d6615b4dc69bcdd7cce134363263d138e1786c15813699a1e23f3ac69bdd4532f152c74dfa69296e0251b24e2dab4ebd5ee28e9358bbefea232d5f8ab272fda5c25e21c505f09c02802741783116a4f8f63b21feaa0d20e391d49854f6bdd203122e709c3057adfb0f0ae69c88cc5a53702c2e3dc053b4f6f3ddec0cb0e74bb4a969bcbcc3c7e5c177a2aba278f4f834965cbb38e2b6318a13ef649b2817f1204fb80d0c0667cabc809897724ab706052e74d3d7585e2106b7b306e7a6764ab0ccc36c744060e655f194b2f5463c0d2d011b7b0269720bd4a8d0dcd9722ce0cae731e0dcbbd9c1f2943d0511b3ac9514d7fabda15e1a785baeefee59d3603bd869ab722cbdfbe1fd2f3c97afdb2e242278b8a09c7f80ef0390b84250133be1401bd8294c8fedd0dc8b3871b804eb44bfabfe2cdb14c9f83418d2e2a478e45c6cc2610d2579d816f970da9912770a7c5339746a4665201b560ce6d63f4b8334c229ed269dc2e439baa6ca19a77cb45446ebc161c6baabe1d1359b2407d342efac17257d9db438c389f4aff95d5a115500878e1a415a92d10e5b9ad6e65a47179053b0190e95fd3ccd23323f1e5b4806ead5829ba08efe7473468bf4c326ba33d8a63802d6ae5a2aedfbfaf5d1c582f06a9f46eecc9e175069bd14848580c4ccebd86241df4778175344b0225ee1e699e9ab811bacd204ef598ae09016b08d6931b1d8dd0fa87f8a66c6fbcfacf79d8bd0c2dc282771eed9a973951f5dfe3c9212f942de5018960c8e498403a54fce4e85acff1f27c5fc94c341dc3a42b2f9d0f677474d89e1e5243394f2c63030a26872319107931457aa0dbc5ce8ad13eea945f49031a249955abd70ee2035e44163fd193be952a726a3f1abbe31866a40a76738c5928299ce3695a5201a9db1d2c7902ba4cc4ec69205d5d7a91db5ff1a52c50b8d781318b74121fb2fbb4ee07d1a923074b86eb9c35a2309c6b5231aa231c53590ec3c107902ca3ac40c31b86ce66bf155b69ac7e0294207bd00b60300ccd07d77f5e5c73b01f82986132e83c4b28233edccba3911fb9a99350657015dab4facea9cf68626c714911eda2e87b00741c1e405b75780579389d6d0ef5ee157a88a90e8589562db843a3369170e566c0f62e366776952c5959e49656460b35745df12e1f13c16c5b2ec6ec6d35ede6954dd92f9e3b7b2cd089f36cea050fc338c73178faac36b0e046f77fb48bf718679fb98c5e389c6f8545544118976e374e70e48fb6c71883de48af510607b374ce4849ed26026b6cde1881c38091991a1bd774d2c1d9095dab907900b01d95742fe404b2940d7abd518ff664a07822d427577cd2aa666bc6eebacf1f61520f9f12ff648d16de4cd965f84c9506afae0df79d671fef03c2380e242c0d8839947dfe0703cd2cd95439a1fdded511cc7d201305ce0afe259f2980590a4ba338c66967774d0354a313669c1d37b5504312a2f02d0c2456307523ebe6046a30d40819e5ecbac01cb02cd89ab2e1b650a8211f257fcc1c95d8c6bfb75784e9bf9ffbe7dfb3d773e374e318447b674871600aed197a68342b731645690a163abdf0f45bdb891d9f4785e89e2fc332fc510f52a542a97b0b8593e65d878a32dd9a7b93fe5fc917c2c757afe29316cf327e0a7ac037997f1332bfb98079546562f3945d47e2e0305ee16eab8e3502a69b46f5f5d67ea6eeebc14af236e4f5283b57dfb2b0fb8b01f4043f5de97c0353974a3646407e6e34e5affa42e920f8e5e725c236d200160702ce4e498cee9550a6f6500ea6bd6bfb916d120e2fd3bc38f6ebc04c13a71daa0b9e1ff100f335284ae9e79171c20cad9f7736c66363db9beb187e750e470e858ef228e6be206f35038341812a12ecc5305cdd0e3c57b389244a31442a6665040d790d9d4cfca01161511250482668dd248c79381335f08b32efad3be08bbdbff781128715fe7457d4e1be8144832d4fcc94aff67064ff0ca77726cec93d7513edb8ec26a19c5842eea3ca86b7af96b798f3c5abec9b5ba7f28f526f5ce237aa406f0f0e886cc89d1f15baf30a02218f2a287edad01f82c79476a4b0141051eda031dfa132c651b0d6c5f438c4317a40f0b11005d38800f61dfb8213775e60487daff281295f6018a6232ada7ea3fd777d1c4dbf6f5b52adef5c9f1c0f12ff554917dc10e49e904f1dbbb35a81d0278d3fc86c59fc1ff4799938402c43d46b9e8327e0f2ecea4eceadfe222b864c851ca9541088023c62c39c0d19e6ae29518edc4ec589bae91811c778fbefe48f92805a2dceac2a372a26785980bda6782da0850aee57c71168a30aaaa4fa350fdc62b2e3fb48dc96b71cbe9c1923d5477c6e3ddacfefa9d9dd1cd811b1ece053df3e53e52ad081e19610cf4357bbb32dba52673ceeb3dbc8d1c9c02ca73a8ed1f76dbdcfd1f5c29e53ad3aeda0e7b88163f791afcf36c554e344537a09659920c19b40f2850b07235c3c7209993a6de905c82db1e5faff148e16f2883ce087c6da219e0bb892d8272c591515b5163bdb0c4ecbd1c773017e3eac2dc5c64dd31a8dab1559e12fbe00509d8490691dbabe03e5dc9de83144f8719e85b14a0013b27892579b933411454544511839b353288947d064ccb86229c3486ad91ca9c2250771c51f43428a7c97180b0bbb79ada0e8cf67c4f97ac168a0447dbbd2ad56c8d6b3fe7385cd720cb26302e952d322adbef6d33cd2eaeb5b951d0eb7f08d5a3452f36426bf57607c13dfd94f84424aa57848d34afd9b58791e3cce8beabc44edf89a86a77452fe5157c91e9ce4599e2ea15fb86dee0e9137b81e1d7645cc9f6c5423d68429528412eac9135fe78b85bfd686231418b71e1ddf5b7c258630c225e229e43b62c89a37495a8807025aa9cf647683ebf2175792005f7b08208b65a12f07303ba547b934ffe7cd30c94962d3f78b5b442ec1f64ad7a49aaca93ef27497663b13553269a27b0b535ba0da5973ec3f29bb1329529eb1b54b7184bde0f6b7a17531172b13f6474fcaf62d7ff615df2c7fbf33cff5041b2c1df5479ac9ce0c537f435f9440b6e10f948ec3bcb1303cbdbddf25286611905372a66658056111f6a9989300985ae4c5308408132369718d74895bc52e5dade5fa1365783c4644f584cf55e25358af2b2f746f15b51839f6245c4c18a64eb03e14bad97dd6e421faa1461cdc3a36bc8c01ee7d26eec2e2925db67aa5664b63c6431b16cb5dc145508fab5c30958ba982284096e958f007dc81267bfdf6fa25390592b20339740ba1904d9891fdbdd288331950bf6c36165f2f2aa484d0c170e0fcd04f981263016863cb5672eb43e40892e74f2b90fb9a74b84198dc8c47d3786952240c4114a31f6aa32a45e6c43aadc828c6b07fc700c7ccf9cd6771d3d94a0b76f3c27e1f8d21255368ad68a562d2535c7bd0811ee5c2ddb1c6a82a1bdee033dd237cf1da1c38245aa5fbf96de900c500c32e3d69c5f05b17f9212d8660c572e3277e74daccaed82776c4018439c38da4210c1d3e0dcad58af964f49a0b84593794595f983b0fc1583f98299ec1952db53a0c991239dcdd892be607cd4b874738ee901aa8d3c5605b84eada143cf015c262a2497ce680c3a12516df968d58ed659ab55e73238a35afdb2e8b6af85ee63a3f6f96d470612851699a049c6d738c5c2d3b639da6a8d1c396f5b629805c1fbb24b719cf83f88c185dc1ff354861c46b1a84e27ed9cba5456cb2f2c661521293b73b4ab47da16f74963127f7caae2640e734539d394d20a3b0f8c9c827eb6f726b4e9229ea1632e4976a275a50a3224c17cc3f7f51b7e44d082993b5207296c5b57388a645a186e6d5df65e366fb290b20befeab9f8660cfd6e7f903f7a2290c3a3ca6901cedcbf9d5f38c299a10dafca68f19988f53169aa196524b29e486c44e2c74addc5582ac1c58d273568e989efdbf28ccbd88764bfcc747d113a4407c75a57b2600734b6c1d81f17728cef270aab1a4ce86a120324cfd425c517bd6a3555a02bf25b176c85dd1619b8d4c6900421906049737750c26aaca437fd5c9b7419cd3cfb8aa952f61f9ab66f0916ccc3857d5054bb61537fe52480ceb3c9a46eee046ee35d9373fae5d174fff389e4311f08a57309761344876643f103ab8c091e6d4712997dd47a76e6ded15ac5df35365ae60d265e98fa9a97740ab3ab5c2ff03251f0090e7f5f1bff794b0672c5b6139a9b89dbc2ea8764e29c808c701bc7ab7814e674ef7b8f1c45cfd6bf399f9efff14d51ee4a12d52e6d42bb56a3d1b9986a175aa1c8d0f4c1df67db4cc274d4408783cc279d17ca3f60ee23d9eb87edff2de2b55940877552f5c9c076b44c401e83c56250640150e1e42920dcf1444a28ecfd6064ffa6f916b17eef05b72fcae30d9b7b2f46d84e5a21791a295c10ba5acdf1c18aae386a56390dcec175265ad54f8e7f8eeca5abf33e697986d5f325def8444293f542af5ab5fec7719338d83e6e25d633fd7051f4637ea5bc04f671fd96814a467bceb06a4eda40dfbc6e2c6495e9e9e6223f27a5ba420693902087fccf2d406ce9e355ce2b27a3d196ce3e90ea601e71031c154d683c04d2227a4f26cad28ecde68a86cd76705710c963f6099514de9b470e033698f40843610ab1c2b0f79b311bca2bb0543ac464fe323d19bf8d922b971ed9a670f378acf6da9617a825cf602fab2cc0ef0f5294dd45f9069051a0ea9a527fe618c0bed688f2e46edbe39221cb3571426f76696a0da314192fea72a0f9b4de3eb9e34089c058850f71b94c3e9771e281fcf871ac3754749ac5e06e145b4cdcf57be5688c46165f42912f657d3a6668c4bc1cd223026103d179b9fe1069206255854d9da9c1345c4f63ce45a75d1ce952da6af49717d1a70574ff895acb3b59a400a346a6d9b8637d101d5584a79c4e747c6a40d01dac4a80dd3977bb28a2a72b1370cd4c37ac5b16c0a5fbdbc1ed8072cba51c95bdfad388ddf02ffb285f3632e73a996383172e609aeca07552176694eea2f1af9fc42a669cab1be27478ec01a38c12b36402c3a4c77cad1b0323e7220de928e76a12376241f2a238b4f8b3df70eba003837402296fdd88937c18ed6352032703c6eae2c3f54d2cc48fe4721676e1ab1d8875d339b8959ba564fe5fa0e37758cb5d5613d3df45214fae4611ecdcf59bc71a0d1e1acd2e4d1b64de2421e8cd2209d45db2d82861eaa1b92577aacbb0d8cae145cb15d43005bc23bf262e8a8eec83d607a71bf72aed82578a8e976a98caee8724c272f6212d4f4aa94c0ff0412002095ddae4752793ba307c3dfde237dafab1b3ec795a8b2c9d80a47e0b446e254e1566337bc9e04410ed036c225a156eb809f92f7229f56a6e6eb9a46bab9d632fa32b9b271ddd694e3627034ffbb8f0ee37fe74a48ae84f89bbefa7784f57426d5bb2f83196a7683ab2f1ebccedaac665e3caa458a6eb43b8104f6d7758232acfe40534e15ec5ab9d0a680ae157735ae5b466a5d6a486aec115dfdfb3ee8a831fe72c357f9dbf983ee69549d66199123652d96166ad41f86d71a9e5733713b5230b2de5537a1e99e7ec7e90f235a6581f662bbe50e9a58984cdb568fe5e4628a4f9122aa51e68155ec72dc87ff82293699864a6db7f39c9ced0094e9d89ab446958e3eebcb128746c1daad7c3d5932adc8f8d00509885211323af8198e1cb723cd1a618e15ae31dd997fba707f2838740f4aeb4f75b12f71a6dafe7378d2d18e30c65905c41237a6ddc2a1f927779115d6ecda918f167b4ac570f6ac2b559a027b0273e758f6ff2f0953f26ae8dfe30fba6f4c9fb810dc19189d9f18083d870d065f50a746c50ed296940a6a15c994ce1432afbe8348a8491aa1563ba1d31f2a6d5d6dca0ff4dd3e1013786b40bd2cdd8ee7827263268677362c9aab8abec8c71a6d29c4271ee0de0042bae2fc2311ca84fe435fea22ed1015bffadc25692a8f880f132a2e9bb01ee1b25055aab3f9f190d790eb8ac652a013abe542045aaad040c3c8608903d18d3ee2c757ceb83bff2d13c989c7a94d93caa0f8719a2bc035df1ba80bc8efbba562448e6dfad85e4fd4237bcf13143487a51f82ef6925012cbd87309050a7d504165813ec917ce770009716301fcfbde83d78431003fef41166970072d2c4c405a5be0668351e5dec4cdf273120142031ee5b8787cd120fa054bb8647a1eeff46aac6c46558452831137c3d66d68a31f15239eecb5706ca5612753063505eed238002ec686d89eccafefeb725a5aa39a2e383d73f2425aa8f2a44ad7a50cd2448e002ccf60745023659c723120ffccdd32cd9df67a72726c806ba4bd145822b1325370472981f0effce661f9097ea54ee889c75e96263c59d32369a2c8146681eda202182a2607983d77bfb45bffb6561a15c2918e8741d8b275a26d0a66271b8795e828ab8c1c86edf494495fac885e8e189679aabc084fe70956062276ebe9c8d32c61f4dab720d708e8a05daba2cc0d3b4cfd32ed192738868d55586d3d527805d6a94c3960d0c259c4a19d248c095f26eb046d44fdc96e954f41f473a2be5ed2eceafdd1a0fe758f2f346640cf7e4c807b78a4e63b9b51dda5b43dafa49543e3780b4dc9fe10b95332410226f2929cf105401ffe5b07a80796967c4aca40efdf81f4854a036f564dd4b0b7007dac16238f4426b2e6743dba2bcdfa6c9c252a6f108dec7b358314241d69cef3f93684bb246c012a634ad69f6b42fc3ba3adbc3b2cbecc851fb4bb8015548e29ed97ac64c9a0f78f5af03c5d5eddcde266406ceadd6f6b8f466b120bc55a41cae13756c488c8510953d0379d0c87b4876e4703252b8813c2340ee26a34612dfd5d7e4c8368cc58bfd7518e077e26f85341284a931ff10a467007f3486a529cebead4554a729451da6ddb0b42bba3e26d694d06ddc092984282bc0d4b7016d4bc0fa138c1ac0887819ed674f7cbe7bafd6e1c02aa175307def397f81b4d931e97554dbe8f201141ddf1aa92cdb7d9c82dd6ff05a32a1d9d4449fe7b6109b3c1a44340af5cd695c616eec02d6d866053232b5dd67003d6a4990f5b60c5ad5d070d61e2d3d2d47d5f531d7e0d7e4066a507f49e3eb8aa686208ca156dee407936f7379cf19724b254bc074df9a9eed20402ba29052325b920b604946b85caee978c4ed4d353ce1bed7b3396ba96968cb93c0468f35b7eb325ce4440213154a672f42df33fafd89f72b529bf18ec437b0bdc5ac2cf05bd3dbb761381599be4880f575c62fe524c282a957232db54fa89440a449f63cce83e28d6f8bfd96b857cb5dc6488d8e6319d5e409555cb75c59dabf04b67755509a0b5187b626a483c6aadabcccc941090e556e11a92b0f8ab9f87b3f683ce4b274aaa6124d2d4da133a40ed1c98fc7a70ea5a9e8a505184b578217ece5936544b244fdc7c77dfca11d4b3cadd53d6ccd993b29f6cf677c2e90ec1775a5275187c16ebae0aba53c03e2151699664ebadd4c8a50d48eeea59514aaec622d65241c208c8025601f763a30761f3cf3503c667717c10a79f72f2f5143294ae4e967425e22cfee9b5945c476f2a8f102de6bf9d7780cf0f71d735db5593098720095bae8c60ca4a3ff2523342f566e2b45b3f7bc0f6730bcce0c90df31a4c34b6739e64eeac8f0105d9ee6d660aa0cc322bee0b3529232018575793d80f863d779ce550f15775977111d8ffc5b164570f1e7654be6008d8bd028673eabade2bca4cd7787baba393ea61b7f04632da09b4fc7c5e44e24aba23a9ffb713627d84194a1ce675ee427dd7933449d0d42b6d878dab32adf8104eb3166a673a518ad3cb5f5da2c86979dea26df6114de17f08f199a8d7e3ea821dd3106e8947cd2e9d485342b25a64713db2b8a650a49ffd645be71e55cc00caaeec5eb327211f916cf7ee7220152751226f3beb0fbd57ce082b40b3b552820d8967c9e248b28fdac742f796f4e0f9421541c06e558050197ccb6c0ffe5cb77637aa19a3f5e164323790385534a2246c9f900dd62ad5d40749a133db38d1e82a3f1f169d3596e8c0434a7758ea45eef647c4eccc96a429c0f6175dbf6b9b5d54292d877910b961ad73d67d461db0a009964522f8a2d5986b0b93b162a0a15e1a7e3b36de8e3318204f9d12c8d6cb81cc137c7a0155506931107ff86ddfcb33a4c5b3e975b8ea55426007fd861c7edb6846cfbb90b8fde4398e42fa872e01231b86fc69e695c7603a2d7d0827f7b1f404b7a7ac4cd1c451ac0d447f59972b77a74a7e7ed82db280313e65f9546f4c16c9ef6d17deaa8ef7b113ed4f8b2131786f97a1eff38994fe4f1c2899b48d3787df7587c2ed4b411f712aa531c4d4fb6b9cf8cd86e0b05322bb4e2fb0f0585b8f6dd15f7522bac71113d9d4efacb9729b55f26a0947aad9349e5ce106afd99e789b8c5bfa25010615c0a9e24fecd77c4fc30fe041cf800c7c1fcfa5629a16e988932de5189d28e873a020371a2c3702ce0ed697f62139d642672ee58e581925097a3c649632355472dac83b1713dfed615dcff8f0e5dd1ecd9d01085092ea38417b41403d8d32315b972957104ad92350d88369f6c275cc66ead17671f08f0c79bbc5e0d556266976fec9f1cb792d8ee3a97953d26008c755762496b9191287f86550ae26341ae30b3832731247e11562f5391f4a689ef9e26885d2efb67a93089f6811f7d01587626cec43ab5cff9f14e74c3327823f4955e97991dd6ed017ef91977111d21f3dc3c37dcb5e618e1642a439f93055f49ff5208a3c49ea1bfaf66564373de140ed75656f71f5fe9761345788d72f8ac4e30b363f39fcd26326654057c941a5817fc1794a9f36da21683226c237eac8b8fddf5220f1becdb182844cf990e5c8e9dbef2794bceb9e341384396e802bb8d7d6b99db6cc56830cf69ab1d1f4f3ef81ea4799d730daf1d84a71b9141ab8022954e13f88338e9d7c6af197685e31c4509210f49a62cc7c16f542ce3d6d594db6609e5f1f8c2cc309c6cf25443469ef5ebc946366bc88e7f5fc409f70e1d84187e33a250140f99cbcf27d83efdf6118b351190cc2a5d8d97e47b05535defc87a3c3fbbab8b8bdd19cd743daf1c8e2e65837e817368582fab8bedd1714cc8cc712ea2a46cc5b4009b15b6852d056b301545849ad4ac54ff3ab4a0e0e961351a8dd3e0ef0c39049ed0467361216f09e12af9a83f687cb076c5fd18a62421b13d30ba9f1e127c1a2259ce4f3434a0069c171e7e0197400720cdd3c9a3aa04c99f0a41219417f55115882b8e80cf5edddb5a326a63e9acc577c2c7486be390fada6b160cf3754b45f2ebccd5d969e1fc2974d3f1e8f7f9880645460961894ca159d387d5beb2d46545154099a08cdfee00e75199031adcab36a5ee7126d3ae79a7e445005869272b7665156e68b0bf2fec3259e444facccb93951f341e8b1cc04f1dac115300ba35218bc9b8b47de63e65d64b5810f02045a77356b6cae83e31b9d04b8d210213eeb0c9cc0cf63d1b95e853b46919939dc5dcd1236dbea3792a72bc91d864f5bac4bedf9acfb08695c2fe3b03aba16d9ba8ce2f13ed6c256436f4232d8771442553a61dc49565d30b4211ece7745ae6808ad5fd96aa55e675d3c8b45d2ed885ca17f104c7e2a8bad2afbdf9ae67a88702d89ebd3a28fe7f248d6ae0cf132d334f9e4a45133bdb9682487cd1e6fa0cd7891e82fe6cedd85806b05528f1e8d1c4fc32fc2f3505910ea0b8b9161fb00a4099c92d21ad7d85f9830911fd542458b376829143bbe44b8ba48d0d26b70e336aab64e7d77a3c59ec2fe41bfe643a34a73519a423063c6d860411e3945b88fabe347e5d8061bef69863eded7ca0bef7e8be54af4da28299865603c6ef6b94d2a3cb7208ace279de96d56301289807152078b00d142f5b321500cf418865d64db3e6ec53cd7b01646feafff152c8c70ec70ad86816fb3ae9ba9ac0cdffe8a1ee770d59c952a9ca3a7c2b1138bbb1636744eb2a2ad6948602ef9aa4d6d652ac1765a526f3eced58c343fc4341a3c05091327021dfd399e1200c66d7f67c32496af854e04decb411917ff51296ab94332f08505be18e69c0b3c9b5d6a782060e5bb7832241e2aca92758abebb2439b7f835ef234fa778299508fde2d54685c6f6c2bb6497a6f2573e796675b2f0c549a507eec49651f82ff68c76648a79f93e10ebd74e251d2bcf66481ddcd67564e1809009505dbf6d9577f28d4b4fba85b07c5e5356962cde1c520d375dee5c1e67d0f8c82f6a98df43605fcbffedb130048344b7e6b17a12254aee3a5fc44cfbc3de67b3c985855720f9fdb6e82c0502226bc58c653fb0cfd29613b04a1eee04def2045386782edb1689f4d86fd35e03f27c08593b08751d0b7da52085c5ea409e53f72fcf0a3a760c5a6cb9faac663c5d0036a6cfd47205b848cc137a81e7b8ec4b69cf0a02522debb28cdff37dc2b4493d76fc8b6b4e8ec140af1090198d72b12082bca1291d0a99da7cd4c00f1d73a07cf1e1d695b2c10eaa779f2f578678d31b697dfa474414ff1a6520cb2a1d824805cee0181946a488d14b48bf0177d23c84479a7f246e5305b96f497a956ae82b20367ebac0b14215fc5494a8e00b86d2a3439c968744d09401c1d9371aadad2f15514522529ca09e72ba0a53bce89e7fbf860aa9396d9292388458697f8eda3e2b46bcb997aec80c7ca433265db6212922376c1f0392a1e9a7df4c778db4763fac3e6be75690c145623a958a8a1e18ba127f4b60ab5b067f96fb3fcb0cc88919de60db1559e993336ca6bae80dc78a19d8862dd4f96fc83e4dffb8ccc4711cb60ad593a9666247bde20d2aa6ac5b7f2ebc739de3b777ef0c131440e27d5835fd77c41b0d46a3e3ca0b9a6b2e307f00e1056e20f5ab1a84d332625e75fe25dfd66f56fca7c1537244307207e660dd131afda140729e018e7af0109aed107f1f2938b3bde19e1af91299c08638061dc3c1ea3284c259d415e996477cb37b0effde1b02e622a7a2821c8eaa6e8be8e715be1549744da13a22086b2e8d2d077b86de606c00d1a290144a57584946d0e113f9c60f997b41dbbbbfb9ee54c47b6ebc0f4f189258588fb8843bf39ed384b6c45b45ab7ab5ff60ebf6c6ae59e0a18eaa5a302e241e914575b283a3f699cc0c30cad946a061a571b795dc9725ea3f8457a74ad83e8b145a53bc788fd800728c602fcb0891e9f9b5298441d13f481ef7ccdfe63c6907ab775a8a5fe0cc703cdd5b736318d7b3c4d548ab3d832f6406900fe84c822cfa1c44930483bd5a51f4a7297ce99ffa29cd781cf21ad57ea5bff72aacc4d310cc306805132b4f0b0b6094d334a5c480b1de47ae421ef0b37210d3241296579ce5af8cb89d9ebe6606494a6082dfb0f3b5bdea058193fc5635c2cd0601093558ae6157b58b2531f4ab7671d84dde8ada9c33082999bf20f0559d8cd7636696cc8d0e7203c608d03b60b1b2447feb7bbece08492370eb85083a69b99f1ff5a181eb7d84aa358fc4c58ec0b5abff4eab26b30457faf05e53264ceefb671dfe7ffe317736b3bf02351a9e6c2115b54f419ab3efd7b60062b1d2f3f4fb3645c957cbc5c430254ea84ac0f67d9e8a893666a236907460873dc795974260147f9e5271112c1908c9ca2c4100bbd613634a41c7a4b0d4ff6f38bef6a0a1d309b3c498777b77996517b0032523ee6eb72bd4fb9065179f9b9f9bbe7e76d9fc1ec98450656d6c5a4322a2f6f2c6dd117fc91cbb86e18d7e3dffaeeeb381b2825aa926a2c44ed401aad1e82d3253516571256aaa2f80da18eb77b9771f29f40ec63bf2b71a867739a20cc9d16c311212982806f016abc517afef03814ad7664768682fb7f27d1da834bb8e0a29c8e8c1f9b837b4c0c81820914fd533bbf1d1d64a1627cad19a8ef667c780fff0809b1a9ebe471eb74199de987f77b5fae1fd62742e2016414791cc4416e4d949c1f2c48e237c57827c11f6cc6731308f0db294ec9963c6c9ecf0d2d19105bfbcf3b668d1cd1f87a9e3471335f04bcc03dfb814bc3d3800f2ef71af18202adad27eafad70a677d5b4dc05dbdc000cb0dcbdd689ec04e6ec42b9dd0b21ac9a5212caa53c7295ce6a2cd111f6c880bd05a511d69b82d5b7b443b2fb90f21b9e4e053f60bcdf816a6e9929340d0159a6f2e3427ef38897f17d7d4295e495577ef63146a7d6bf549408814c36c890710fa020b897390534dd7277d271af12468273204544321bf594606ea2dfce7cb24036e3dbe8150293c3b8b9c8599a6fd2f2ed5aa6fd77fa4cb29fe793f7c8cd0380ddb5133b2d869ceb7acb8e124cb6e2158b65cf9b4d654136ed7587455d8c4b19bd1dc8562c99379cde368a676eef5d3476cb2ae65e63bc67719ee69236c07451fda36202b8434c200c81261fa8202d97d6141da54ffca58f54ed18a6fa716571c6cf4907798dc3bd2d34c901a1533986d2c612a2cb38e4f4bde7854952a706c03f2ae52d197e84bc69d7dad7028f6949926b70a3782061ded5169543e66b3f88913b9f3c3d1f7865e7f3c36772dda5273f8a9f71febb0597c401b15b5dc4f80fe38addfb8f7685ffd00feb7a9a44d56a01ac07d40612b666b1303f5b60bb199f5ea00833b78e94d44bb4bad722cce158ff581093382b5d92c42ca90996578a7e290489ac5d6c8e2a81699848b17db13a621622783b10e364277c552da8a033f46e3ec62e281a594a9ab6ed93ef602e57516ea549b8c92e24ffa8ad913d9efd4b52d72981c09fdf7cbd232181867c3ef9f5e901cf565c281a773917fcfe5acec9ff56196cce03060712399cda1bd9ca66760e9ed2bed3b88db4b6fd3592db90b89d43feb9fa4eb835c27fc7665980bbe7fb66e41a9735c5c7e1a7c605a329295e53273f2eeb89dc4cf57e08ece578f7c4ac783c6e8a8b390e2494da34d64d83044a8946944abc5a95d2bcc8366ac96845b2cc0c973fdcfbaba506a18ad54e84f1aaf17ab2beed1a5882c3700a8e7cf5b235eabd5e5d30f3e68d8583cf4834166f9ae74352f02603dd2d1b6631f99885525c5bb8898d9009060497e8cad60820c442f4093a876eff6bf94a14735425026e50a664e07602255531c6384428d18939cb9f34332ccef64b11dae097472c534e3953282dc1912f193d99db05e6973b165d712c05874ccec69b53346779b3603a3eea6e3615420f9b509839d5b7621da31ff15a783ff37022c03b77a993c5117a87f49dc41b1fad23904cba7c433b17283aa72454fdc8c4a7a71c11263c674e553df91c9f7a2ff1f8283cc7c1332911ecd61bf36068d5b29f797d6aa61da3ff15887f558fdb7ac4643ef1c66d2f35f33819d63065292123505de7eaf1de800c008f10af5ce6090cadfbf12148de66a5542e5f412be7b4fd037ce1f9ce26075d5f7b3392cd42e3b31c86c63e1ae9c410883b3e907a4b972a01fdf3ff069d3eda79737166ac98109ff908f787abf7571a1c69fc831afdd1908f09a56461ec2f6c98a05094bf8f99ba8ca80d62c3b128ac57df2084d2a46a19f8c88090a7bbe2f9022a5a82cfd085ea1c8f8f3929bf3eaf82c632fa6ce86bac82610beba0b15d6a00381799a302dc19f3e40573a6c8a109e545ba4dae73db3077fdcede1477aaa8daf20e4105cea72e57d0f87802745aa4c88541e461eac28f1dc352cfcab5d19ad881c7e3bbdced11917befb0056d706673ad4e294df828b0bddc1e278b12d827420dcae58ed3b6aae90c72837658eb392de66a833943167b9e6fbb4f1f36c9395fbda0b1465c0ae1a6ab09591fe0d4044058 +MD = 1bca2f8fa6ced5b2d85c78582bf12ffd6fabbd547e74b07f635063ab + +Len = 81192 +Msg = 29874a203177a9b59afc11d576f9ad8ced028d3e24b5a698644d1ac67874bae65659c9bd020303a9b0e5ded729b210b66f7251aca4d6620728c84e360247f0398172b55622e2a40eb53d9b4fbc08dbeb14bdc649d71ee85b80c835cf500b918af1f996525abd91caf22fcda4f8a51512220b747d84363f7ab47555fa2c69a6c0ef17f219703cd3c7afe0fe3ea52ec613e283e2b175c56f4e0cf6391d5c0936c5c3f453132c0673eb347bb5858b4ef6d69c4e984b707481bdcf7466a2a9924980b5b740a858c47920c8267be171abae4298931eb53eeb7cb1471666efdbade7d90d894240ba1deb4db409d7ba20edf5411d7bfd55a7d16811ba05bf6eba0119b81291e0431cbad35a414e517861bdd4bb742ebc9572ce4ec57168fc850d37e6050df8a2194442382eb41a7183fac35296e6d3e3dc698c35b4b468a29e9ef657a846e5102afa5e23b35898c043b3a677bbb993fa9152b025c8cb2d3b2033e7738a0581b3de08b69bd074edc521560e4b1235958a1ef6e526e8fdde4f7395b1429192f3129e35f1a86d4f440883a9a5d783a4021aea1dd141fc93a464ff8cfdcca63464b5d048b8527332c312d2761022f74c01335d8e1c7dedd5a6042be0731ab235fc25de0ab2a2c865926a7783fa345477bb5cdf136fe3a10b0db66158ba339bdbe2e92e43889f5530da98d8980916846b571dd8727279017d000309bd7b1f4b6f3f892abae15202dbc3255f7fe5cf6d70fefeb074cc49f573a87189d75de7a8383a8e383966c1b8ad749873ff3767f9d0d888cfe1255b66342c8a4a6e09929c80fc7fc286bff65def16797bdfa7e70fd10c429e8127b53a09b5d6b44a26280e8dade42f6a93f9daead051e1e8dc5696bdc3b5831c78615b3a6bdc30325db2e5a97346e7ad8ad018e3cba70ce27fbc78da2467e779c067af0f752424f056360b1a792b52174d85fe252e03649537229c7158e23361a8cd20cffc36f94ab8bf6728e51ed870842073f722ed51c8ad8feac986aecd9cd79d95c4279b18092c52e11de0a4e17fd7a761a0cfee3b45890b4a2cd7511ff2f7dff5341fdae7f559f9613f9147d50dec24af695c8d8ad2729ea4e073558f2bad992a680b7bd0d5e8bbcfd8218e1ce26e9e459af253a6381051e02e8142870ea3d51ba814063a7280a1132eb7011ec6031e0b7bb8c7f83e0c2be65e299e6e64819ab03c62048d95cab116897c29438153abe953d771e6ae0e349eb895f3acf5eef1d16b1cfd30046df5be33988df4da074dc76c76d9d94fbd75f184eac8a98993e0667e6b778d881275f47332b6979bc70c8d0cbe883ae8c2f5c50953a6cce8187257bd76fc0be86138a190722a968a3af1237cd7056f42c4bd0490f6147fd924ac8c70661312ee0146abd38173577009037104e8d8e2256cd39461fb9a2a265f98eedf62450a609ba7fc8487194414dc4b5feb198af95862415fc48bc03395733d635293185b07d6647aebaba2c34059cfd67b94a21ea54d0f4b01ce0f03ef05a3d41020166eab5b830f4f16983eba2b99bcfa7ea8b8d2d643425feb0e02fbc0d32a6232c7a914d10fa2faf0821c4bf8b1fbb102242fa8a4e72b270a46988349d44b90f1b27509e10d1a3260e9c5bb691d79e8459feaef6002eda2553d2e4d4bae21e2845f3b53338761408e54a1d225e720e772a1536fb19d7215f27d2a236c6a939f145661ba6e845e6ca34b1858d517d6f5afb0d1ef40bfa1cb098ef6cb540f8811c82051063b0df9fdc756921420b3855b2456cc39b470620bc3f6f80daca5ea7ec94471ff41291a3d21fe77cfafc51462fb1aac13b6b89d1c473f9ab31c35a02f3e4a2b6d29e0a972daca2f5129546b4f5984da46eea03a47bef043834bc5926c50bbe6179a3a8ee5194322623769726d681dbc9a032f22d450925a47e260a87d271d09c63d40b1de07efb8ca810b1103506cbbd69e6e3b0b24ac49c5880bcaa9eafbfe42baf9fba4cc585a50ae42305839fa40c466636e3363c677c6e6d0e039c2da2c53b86e52818f066ebe6616b7b54a4db12a0418a49634694c11a4b6d275d644fbc1dfa5a0bb78805eda53908e62abef77d11f95c37ac01b307069c588a54fc0d353d8a8cb9bb14e906d1bb79da78568fb8160e0b4282f678ba9dd06ea1154d71cd24b7fbc695ff86e3e6694cdcc003ea4016e0360e8a8d2c585a980e1010e0f3e07df305c6dad065e17dd2d041843fbd91bf306ae0253e646cc753c53bca4f3a1b73dc592efc101cabe278c2bd47726049594ef85bd592a7746e8402a8b3f08aead0d454536c37119fcedb92b49c3488c38fbc8cf62e226bebaab964cb607d8cbb0f6b95f8bdcdcb399d7baeabc50e8d9ccd0997339156384f26646a38523ea6187a028c73633cc005d8c995278458e5319ba68598a1b6832b4c056153fbcc6d9fbb49a657ff2c86810b55e4ac4cbc362e6623f699d1cbd2ec961d08c2ef9f599d4da1821ad3e595379f90fb9e70a0d6efd70258bb93febe2f9f2bbef9803fe0bdab9a8e30a4205296101b6892a29f7df248b23a728ac79b40b1b2026c6016996d4fa5593dc23575290755aa1d551061d245b3fa5308cef0ec9830618001cbfa18c4424196c0cd436cefc04e930a9c490c589836d1a07d657f9d375af8e7c8696c8401f5d0223063de33ebb49825ab8a0cebdf7e72e44b5f764b276d2b74849dc51964d48e69074d096e487a9158b6ab6099ea2fcb36c1456d2c90f69c4a98ddbefedb6c05f7ca655b09670f12f6563383cd58c92f3a67bdc0bc04a5dfdc6dcfb69ed63aeb60f2536fafb7f0919102a90300abd92341b73f1d63e2f94aac8bda4893f5bfb347078d939bcbbd91bb34724ade43ee5bff283fdfcebc5f713d6b93e158ba68d1ec827a838802d4a7c76435e7b0b1671dc5434684670146e80195731d6784d4ebf3ebb09bef0db428682a5a561284d20d2690d9a797524e238b81fe594af57255efbbb6692b4cfaa7ffff56028e3ecd9eb5896fb60a1fe3984dc99c317d8ccf94226af267d73116bb015bcf998e3f9836d4a57f4c29da95dacad4e31269ab5b4b4e81fb147d5a76b61ea80d779d17f08a166d9eb66102d34f852c5988b9d193dfc69946fb8849b94daa9cc629354834fcfd5a34915a393a8aff486610c8a007c62d096c89725f5cd62782502ae150f403fbe3d7797fee2a01bba1af2720972592e46ab24ae63bbfd427f151f91bb2ac3384a30dbb4c8220382cd08b584c178bca7f25debc3e3f70ec3e8232105efddc004a103df34aa5bbb2d54d8100c5b198d16fd33859f50b0e72bd8d870d2592f1fe9ea3eeade4b96af6478136dd07e5eb4c38eb55a0a50ef70c279ba74c0a028c8304e6a637b54dbc76f6140339ad34d19f6ce6cd2cc8bbb91d2f35396966dd0a420f40eb4d36c30eb9536e7ca3002f1a5f7e4df56acab1c32a16e2b3c1e6730990304b244ae3c9f031f20909a5ab24f3e0df9974c73551a3b7811c8d01e374f901fa8de7bd46b2ff75546c40be28b71cd82351a1ee933be949f04b4b85f843572be061bc10da2e8af7fd10a858f375e3b9cbff232d6ed0f265e70775ea9f7eb252646f07e2089d314e5e8eb70285b1e6ea4c0a6f2022b15d7fd7d9728c43878939f91e61ad6c7f70ccfb4ee3476a2ba50e15fbfc53594d990c3529e8077eee4a2730f84fdf7055d80845c9b3941b139c89dc5c41236d0623afa1814cd8bc1383ce8e752904bea0b594d097ae75033a3bd1e193d43ce88b9bbe8f67f76c95b7b484842d839991f0b7d72e314a76dce0019ae84b3bfc564e4fdd51569e5f661b5aed9479f61ab4b65d63b11f0df5e2a59c3932eadeee30bede60b9c5981dd7eee56e41f2e7147171f4befbc96f9ecf0b5a3153eb338ef26db60d1b4d8b245582f28b0f10dcf362b43c3d80b8f5bdfc81da17edd4d05b35cb7526e856de0f5977f0c87e6c5e53f2ed8283c27626fff5998a5143204bdf55688a32b36a073b6e4e7eaaf26dd1a2cc9e7616437979b144c2e9721665fc87ebb563d50f0f9d350e76eaa71d8ddd5c4a377569864b749e548e75feba0e78e16342a0725da01698b471c3415244d80ce6590ef20d649e03bf6cce5bb09227884690be9f11d3f9b2facf970e333b68213b63a1443b4d5c8defee412d8c99aec920101cbfee03bd203c00e46232da0435b3f7ead4a26e368960738cc8c07d75306a51495924c7e77d028629f1c3a912b6da763a27d56fc2a2bb9cefc1deb5f16a9fc4d2ff6898ff05e8ffd61178013a21397f2db2469a77564beb08bd49ebc9b43afb38272bef6a7759be8765c2aad1013b73240878a6db20abbe65ff948764c9c654e744d133c02ddf42ac4335ee8dd36ae2bbaeedfd547e55b7662d41013907bc727eed1b1e86b5d43cb35e4444a714425e52fa090679dbd436a7aac1f1dceaa7c45d944c08249bf30d4b0b6065d3405c36989e6c6ab1c5a1ec991cb9d1c70ef2db11bef679304c9624c1cf3c9a98f4131beae08a92a2c84929c8e77b196dd1382719e1acfa20444823b63e1b8b5e8bf16ec884e606b360247ea59f983157dde228f480d2037b0f737aa6cc8f809a8481bfcfdff14f6a09de7bbda993c20b817b612030f81da72ac2a9f1ff2b42d38a4e8f5f765ec54d41d1718f99e0440f688e503b6691a14b129032564a612aafe9b24df5dc6110c384a81079e5202fb9ff758694964146cd6376941232b3a0664f477c2176baaa636ebcd93b1fb5fdc1b2db74ca346976b479e04fd44ca55ccd1798ba70c9ce0ab35caa3c11ae24268d2f2a9b5ae57ca976d267d60afcb8b81adf0059526a1dba29dada99bc14fd4292d0dd6aa51e1d67bb0977c724d7603af5f2290954cc1c213d55d8a288e893da69248e736742ae39c79b8a83c0412e6dd51d7d2ae6645bd8647a2ec706adaa4676a69845eff7b18842e52aac5bde95b94ead773e85d75f6845a43787c3b8831f51e39542cdb1c9dba392d291661418b5b92e91c4b17999294760ad553ebdc0ed7148000a7ee559bc60011ce35d6639ebab1d775e07df9bc3f03bdabfd601e6095b6062fd7216e3a31edc6412c0697bb39af6725ae77dd9a0c6925a483849652b86b928ac55daea18166132903d7250a61f562d5bdee8c5483110a66ec3d8c09c79aeeb978885ff941d5c22fc03354b4b9e98f2c16c84f132c613499407547b04aade063f88bc769f6a199fa6d016de1caf4b8d3c0ef6eff90c26ae68813106dc90b31304e4f2e1a2a3261331129b8b81a7fa371c349313f369d76f5cbff2f68cd1ca9ca81bbde3364f0e181b5927d6233f019af28c0dffca6581e6d1121eccbdd480fd699b61edd2d43e38d602604079db0e235f63bc25d695d2bf662618ebb82f72dff9f2a35400c932dfe1acc94cdde28c6aa35a1208b0612643ac7a75f624391c9ea9afe6c838948897deb6c77df80bf8db6eedc42ad05e193de47dba5e8a87eac42921a0bcf2ccabdb2dceff3630bdcfe0228d370ecef317e8debe5a97539269ead90665a4b7e819144f43b518205e9e336eb6ef2704b69eeedbaadb32f7ff266d39acaa02006d6cfdc3c39d963f84d02fa3f950f60a1f3aba6bc1b0b410148ce5ebb2e27754c2f3d21bad1d22f6b7023f42d3010e47a367d61f918f8d147919cf3f87a3573d9f5a5bc78ec860de7ba10cfbc273d265c9a2cc67a8ac308da36993c5b9613413491cd547e703b26f3939031f562de4bd2877f7c465bb50d419d8de1eb6a0909e5697d92d2473aa117636ac3deca3b7e6165402c657114090430408ab0de5ef075e77f1e7e57cba7db92672c82459ce5939c357de0b62823ac5679deb3db5c206b729a9f8a8a3560c8884f14e6bc48a8ef942718be103b84c0760285fb4749c14f7195bdfcc6c2f365adea25141888f0fdb6dda407699353c8faa128900c6efaaa4e3921def5b8893a6aff05133fa4e5466821cac3a879b94d491f6f7b1013f403704e7337fe6049d025585ceb1be4ae5113b932fbb535ded6cb4301c33d80d7e23f9c5a10c9025cae47bbd3a5938f74a6206e83b7780fe9ebe8d7877079fccacf23ea7f703ee6e95d39f111478eef5ecef50865fdd94f021408a1a88baed0f55384018a5f4553196362c2bfdcf64a9550fc4f82d7c03c53da936b0d1bc34581f5caaa22e6c693144a29f58569b2e940b49c0b7f4c151f01c4f1fb5d28a0a1963e5dabef0ba9ec0199f8540af8aa1488833c030764c040375b8a1941bb2d2c5bb5a6cc9bd8d6a708d936a5f790c61395444600c028a9e71b25c78f61da5230f9e20bd7cb55350b53914ab1f33aee2d8e7f21ca529fb85cd5ac0e246490f7f3984df5922989af6207499e40a7fd0aab9bbd352966d2d6e68e78c89ff3e204be5e7fcdc75d7c2af24f8a991abbe102d5e684eae5a4c7e9cf6e0f5ec9b5da61d976fff93c0f368f0551daa306d6eebef3945fa8c5b388da5d9cfb366a537ff68c0655e3bae6c0c7e135c424cda02d264dd0d3d7923c1d92d941c4ba4a74d9ab1f370af1088a21b9ce24cd8437c3a5232bc06adf14e68cf88b84f05130c1f169d930a58df0a4614c16467f2c0ce45e9bd48cab28135adff3ba8e0962e5e1ce16041aae1e38dc896a00c2618214ae6178915d1e1a573f1e6daf869757327d789ce61cad0ca9d99ffad3c0fbef17c6b5a0aa5b4c1ea73e4f4db3952097dd3df8e1c75f2bbe0b44aee3d86ad6dcdcd762fd67adbc9acdff7c7b0ce32e8aaec855cff10ab09e26c4bb0f57e679af2c8771750f7cf6f88f29acde029748986fc7974dab46c213c102d065975c6cd2cf7ee9f2ecef839eb664e860dfdaf729e6e1c7423c3beb85a6a5f4cde2f538ab8d65d25b442feaf60a5a37e8e9d3c1a5dcbfec98ed10b25c9b56302f7ed864a42ee435986063b36652b0a15f6aab31741a090e3606ee9f0169bd8b73b42f782379a2199088b4675858112eaba889ccfe65663504cffc3bdad8810d82cc1ffd923748862d044a8d33e223e7b5ec961cac887e6aea8f630d50af4bbe420ed27a58307d84561b4cad5fb98ed3657df9a8e449fab4d0904a9eccb8c2a79cc27077dd2cea1cf316e25044a5fbfaa4a5dbf80f72821c9e18da74b4b98fcf782f207c89f33755ed3d36fd4a6d126558aa649596c9bda93c703a19717b593ebf9e0b12c44c0b382ad86d3cd9db7a1b6ad5bb06df17546392e094156cc6c9fd575759c0f6010ecb932fb29559b5dc24c36e09d35423ee5289af0dee0c6187132aa2310f87d8e918108a2b9132c4df8949bd75855cb7347f0727cf2eb8163a881fc7bb86df9a44278a3000b7ccd02c51e60928a35e99cef1f58e025cdaab8a651d0d21ad660fc6fee76a5a8f8fa16a84819c4ab5c49263b03c2dcd01d9e921b10ebe880c85fe18a7118061a2e4fe422b02bc0243f56a9bc5c24c59a41d98a474d9201a2ca230e22aeeba3c7731b05c4d50b278d659e920377133cecd0e80beb6667cff94276ecb8d685f1497df805ff255c6d5f558d7970e30295305146815809d195fcc7a7e7bda66b910885733f422f83f41295afbab53e67710d2971a51d96641615d05289b19cf0e59d40094c2e62167e3f9c71e020d7d662ebfff5c1bcaa93a2dce2e36d3508da71602416a7245b884e4ed07084444dc3cd551b4f71b5a4e4deca75f6eca8987cc709b847cab48a6df6b8d82811a00eb412c121eb3f8913dc2c671ff9a29cba5c58f26309316f6d1c0a162a1512c4a92bf5c89a5575a775ee1e2b27680971fcfd99a2bad775a57226eaef3ca3f2129b9fc8c3eb2adeb1599f169f52be9bd8bed51b93362f020738133b9c86615a1a64841e5baab7b5072d73c82bf889c421ae77516c5b9c61053d755ea6ade9956c827d68f84fa8a3496fe08569af463d0d1a58dd66919c0d1fe0a1d6a609894e5973f03b12405a23d8af89e0d0dd7040cba10e124a7eaa80c7c04d36132fecdf91b76107423368a1355ab46cea19a48a0dc0eb92608954468d6abbff769770e385db544ff08f40c5fff0148c1dca3f7343f885c0413805d8e13e929528c6a1d4a64e5e97b5ba6eec991e1eb0f495bd96fec6713e75114ba253ba5589d2341c3d838ec450fa5b6f9f8123278e06d2ab5faea9126f748b925d657c795feb763c88ae2b4a0e46c8bf5958ade375bd279557c41f0dd5b82d864496d36289dcf38f407692344213b8daa4702cc70a9ffae7f9efa6b7f3c87d7402588dc59a3f3280ff8d52378ef9724e0b780e46bf17c33fc081ce956c1dd208113ada07038ab9be0042f9b83760ab85e8d0f0e6f5cd26e9461af54a8130e19efbae66ab48380f930d47e72aedd1bb1ed70b432c61288c90e52bc93be59a22c51c33a226eadf9aac70fca92414d537755087938b63a26aa3482498ee0bc1fc071d5b2b1e6dd9f166d5e1be284ed38725efe650888fd347bcc9a612d56640f3c159954fd643cf8a6ea697a4abee6540bcffa808b84823ba39f4109586778f90a06b62aef30f28ec005d7eeb2395f2fa872a3d3a7f1f2c38a75204bf75c2066910cd53c6f9126e9ce875180023b814fb30da265451974529816de2ef27d86dd39ee9e9066d1018f36397e37220d733e92699e3f4e423172354924ba3112cfe66a76b830ba36aa0a62e0071bfbf75e84af4e4067a8b550aac9d79af89c6326098c6acc24550949e2b847933473406aa7708430e73dbafa82bc89e7ef1cb8b1cf079381721d91089da235cb8b7332be313fd215c7f39857837625b4a8975898bf44b98024fc180dc586715627e41383aa8301980db4998e346073a829f68c0462a9a47142d9e480e1cec4de10ac2ce098a3d960c36703c81ee03d6c7c229c1d3e9f1bfad29b3e8a7ae1f6084fb5c5fe85092216f0f41f2cc75f49a7a902d00add8fe8c6de2c6e531727cf7eebe52605f81ca4619d4235e3b9466002b67d6ff4c7dfd17b6d73bc02400817e8ec26961c7a4427ead13b8d147cfb4a25ad7dc30282f99fc2885870bf7eec95ed5b5f5f6b92e9725894c66ee896e8cfb795e9125d98431a4236c3d1b4573b12363f78c71bc8734e54eecb22879173b76177a8a52c912709a47f9c2806555d566ba0581754a44b8386e833ef18f506c9ca5aa4c498f30b358f6bcbbde000bb293386e9963dafd7d99589e41ec34808ce9a46c4b7c9485967ac0339d868dfbb5336fa128eff7080182adac7f6b214e18f7b44f0c5e6177865a34eccc1c67ac69b1d03bb45c16fae07ece1c4c10ae0f8d1135a103717e9d0f71b546dbf235945ca90aacc04ac35ca6f84a8c4c5f635b75f0a930d558645c9e7bc1e051ca7059ea836f62e13e8493a189937ad4c9c9a850009f4cd6758b3cbfc2fb37a1e79053bfdb8efc7ba9c3368cad494699c2497ca7bb88739b5b8bb3efd1c1cb60ec2e18291bd9d8041f17cba4dddc9defdb7b4ef99be533987cce68ab32a5f9f34a922dd2cee0942ef0eab9a685bdef6b97d7a5a22c460b624bcbb17e602861fd7574fb395f33af30e1b486fe5f6d997179d7074de71b796d5b1c34e5d4c981d40f3f06b9573387ce442dca18a57c4ab5e3f1fa5946e5fc3e2d38495e2af9e80b8a68d6ff4170cc6baa9ee982026a619d78d0d560e626023934988553bd39f328598af267a86bdb8d77806bb6e0a88c9caacc4ed12f6c3a02f3c57f73161a31aeff0ddf8ee68533985d8ac743eac71a37ec7ccd469d28f2100d377e18c01b32040d7a04d1a67d7330af1692b56b4698f3d04ab71db9dcc8d4c37727d145ad52cbe747f8dc429508dafeac4467fc979754d8beb2e2fff82ce5c8fd03291151326b3f00220b556c62fbceb462e8193a73df78513722fa2bacb78041767cad975f66572b16fb5974101791e754b24bcfdcf831aaca4a12b7c6ce8bed186884f02851d2315e08c94caea2da9dc0530e9831339713d2e4e45ce99f3e485f6931fc2b9222ab5dc01f468d522b400c56cc440f261b34e77fe96ba3ae29ebc1fb3f0bd7bbeb019ccdd5f24a79e686bf1a1f53c52420768e778c64737fd16fd69b06afcb437ddca16e87f0549eaeca4f397247f1d259612e6867e7d788c71d03c5136864ad6d84f24eaf913a34e69333116f812395288d4dcee6665e6d7dabd005ffc6327e3ca305cab78569d1107a115e619fc90110436317925066726774d1da3639c31a6daf628f2a2d7207ded7405ce304508aa32c14def6469e4c07007fbe2143852663128ef891f9d12d844376b98e5f68b643bfc9918ca9446eeee7402e7b73f716df64e183698b05d6b336fae0adf150089476f7bbc009173f8191a9b79f3ba750152f10dc2b519e77ee3a636edc7ad4e5f7da35ca2ad68552618832c5f70b0486b6d9835f51ddf9a597c636b0844c35f2f061fa5937a1fd3bf14371f62d729d1f36ecbf896790a5c43252fb525ff611a400a6bbc570ec0d40d34bcda4ad02df8e07e12be6f70a3178606917c0a9f8e67dcb0100bb613524256a19cc7df02c5a57cc4f6ef46abb0b26848112880cd532e492095f8782ede04e3825f4ce816f8c00d69fef3e4d13c15321337214f31b757d08382ed64096b02fc008bd32fb3cf31dc94b333118b4c282b8e8ccf3f72c2cbb9016051434c0124e943aac37a8250e0316e9b159481ead39de2979b18397c704cc1b68cdd9fa852f1724384922b85b6541f4002375a1dfece36e0eba12dee2fd1ec0c06faa869745db5df7e3f5576998cce2a63c0bfee9107b3f028a3f71ff18fa9eb2662124b727536051948a82a7222a3df9ef857637490814ebbe73e179ccf21d956dc835734811a3dbd77cea92a5ec7e91da7cb878fb1c7820a32abdf19d97b60fe32a394a2c98c10d2926cfba78862d04695c25fcab2ae157f4fe67e51f5e008842a1c0aa595b204c0622d29d3e89b1a8389e5f50eda5d8e810496fc2b6b7858518d93c1232cb4a3efafb63995c69b513b4ddc504173fc75771b63628e826ad8cd22b3c205d7bb75c741b236d4698afcd5a74e784dc3b553cb5af7b76483df1060b3211434deef01b1dfc7257a1a8fa4bb60e3761813aeafe48af70394b6fe89730688bf978977cf13539d106e21d2d0544044518caa0f112a730e4e0663f0ca6ce58ecc151f7b675663ddfe98c67c08080e191190d2010105dce2a1a2d2dc5bb516db4298ea2552e3d82ff8e051b5d53f9409bf0bd1ac08dd8e1b03504bebc5b461182907309b1721793a052e09a4bd6198bd61e7f037ad1a52627df815458fd390ed89493a053e7710a72d6a37724ad6e3dd020b77ca7924ee5f16827911417969016b48508c4f4f631d787c234604073d10a75fae8ff3642ab9d6d6bf78640db6fdd6ebba58d3103c45ef4c1549725a6dfe5acbdcaba340d018c5dc2fa17ff93d88d31abf90522161c799c355a31c383d5022374b491121a626ec7d10b41aa4c74b69bda85c52ec9a4a7fc72a7b8a0a73ae088b418fc6707688529facdbbd761beea0bdbde55dd8b176a741def94536d8bf12af07a5499306e9ff2b493cf1d7031880004653fa4d6cf51b1ab747d426342c4a8be5b422f41eeffc0a30ff3d2f4571126f8bceb2b3956ce338fe8abf404f9cb80822e4daf988425022a94d2ae6aaa25df2d47d0b73f2860585faed8feef0b8630c085cf80c0b8b035dfb4e3f64fa53697268888ff34ce98be8f595cb97e1285380dd4504946e721ea270290412fd2b3fd59018c69c6a3d7c4835adfba2e893904deac686f97a9ea8d84e0701567ad3e605945537d6162be18f035ba779cea22359770807a2f7b8a9e9de0fbf993bf366e8bc666a0a165ac1a4a7c758835afc138ecc330ff9ad672abc686ac5440632c8684f73e79e3374246f691b9528564968d3306e246563543139343f9bbda438136c97a637fc351e13d8917ce7d088332a0fede1d04ee327c94889b7ca6eddae4fdbda25e18ae40294c76614d5e3ba60622c49b59a1cf387f7d1b1fad9bd783c859f61186db208c8b224310be7c9b27818118d120a385c1cc5bcf22f50143f89bc9f74a863db681872d73a89a5eb392452a6001fa908e58f3af1957eb8daf83efcc35bfc4c6ccd98dec8c9b598af160c1ad3ec05fef558885e59e11097776c024df35d3eb0cffff3fde026b7477e13d7778097eb92687cae3ada200d7853637eb817c393156bc6cfd70599b83ac1f62d72954afaebc718aad55d989de0d6a55a4417d62505a8ead5752069e0fade88b811fa4d5a937bf52338cb93e65968f93dfadbdb1c07ee32acde1adf560e3f911d5e98e83212eddbc2690a57136a7128cfe04c1da0a4a567fc1ad94343fe4ad907615563aaee84912f72042c4a9c59fbb90150e3d76235516f3247ddce5369271c211a05ecb1a7e1115a9f5cb3758837a362d074eccc07b8ab2d4bf42094034404a6d0181de2c091112ac52e787f66a7340db519056781645813ccd160497ff968f85de2680a366ad6e95de9be425c121509e51a4bbd0c1d1fedb4bdb7fb470cf020abacf3b07134099f4fd6b045d03fee5e4abfe55511aaa8c2eafe4d31c2454325a0bde65cd9b75155833d73102bf76615cb50fbb7f6d49a9a56dc4973586e0a0f265f6a97d6ba5712e066322bd60225344f14b76c25639d7de0a1d349714dece624d8a7e7d007c2de5098131f3728d4c6c0543ffb041f5b747093153c75ac92b38171c4d72f643bc1bb1c3e72b8311bd00558bbecfdcf7986eefc34d3cc51a37e2772e9ec5b9a6ac4073bdcafc0e4a15c066854c8763da2bc42225b97df04c84dfd2340b0bc71f6ee1d3a155bb60a0f71abcc3115d92f7c1c544eb00e148fa92aebcbeeaabab08848e5641000046b0c18dccb7c5e8d6eafb10cc75bc2d4b9ed1cd9b41e62be21c7d84700f62511cf415881ae5a28fac2e48053d7853b88493d2caf24f6612e8a5ca82c55ee5345fe553982bef5fd88f2c3930fc456ff9608406055649e2e74b4eec07aac211108bff1c3c74075649fc8f3f12ad7f59868be9fc2b4bc3f51f66726261b4db7e7c2dcbdff387f02e6a70a1da28a588b8e6432015ab27301531e6aace4f580d75ddb1b60f4bec2c20a0881e8af198f3f67f42e0f2e38d30bbb53872702f28da9fcbb4583aa3f50e0582af5fd1fbdc33aad7f7871492f228611fc843f86f9bb564bcb22cd2aa4728258762e03fa603ea3e76dd9ceb07da999de832a9d7af15406d37179e77bd670d19352f3a348e946a39e2519ce6d0cb06da84f41e9e5c49ee01a161378a5bc92f490270d85124024625911001a86c27f29fac891cad059e20daa23b929b13d2013d75e4550604d2007a098565a06895df65956e1e9429867b50bfe31a2a6436158f15d61ac38f881bbfb22e235f24894fc4f61fbee436977fec311438a8cb59ee9658e2943a42991a5f3176d5454e76a626351a580dbb458135cc3b98a6c7a1feebb5867baabc896ee0fe0bf5f334d28511e8ea8471361531a5e7b5a494d7c2c907c22e1bc55bdd9bdd8e3a0fd986415f00680ccedf258b03c4fa3ed7037a20df62f5660efabf0a23bd589d8d68a137b68a590d8178182b7a0b9a23ba632d4094a5c5bacfbb449398f8e3a2e931142a0e08324966fc7c5b06f23e00c9447fa69b18b998d8979b1e5e38b5f6cdc35d9cd8126a6cc9dcc0ae2d016c527e17dfd76554578cb41000eef5c555e5858ffc14a73187c4349983a96ec19b95636ddc3755e11602dca534a9f2473a1bbb076e05fdde110c31a343b14eab4245f3b6d35b1f478b97dcd7a4b3d636d8e5c8ca31f54e707c814b8a7f7a4f36f6e0b97373b713d01eb81f17bfb1140cc8f05928c6670bb140efdccf9548e2fd3ff22f343befc64345e02df604063e4160b7c6d3b9efd7e904947fe323c19c5673f6cf697a49b8f997ac73e31047a77d66a8ac3b8ad415b01e0baf55b968edeb397b1493dd796e7b9a89ab7f42e9f209113f73d097d8578f13d1e5a7c4a35a1406db8933d3d35931b4e41f2b3a61a07d1708b8238f510fde7c73bd49b3f5637952a4a7d9dc0c0bb47d68596755433551de80e3b4dfc2c136ce6d90cc25f39c73b372faf67477e89c6a62e4b43203232fee3470f4e7c1fe20702bfa9f891267ab8fa2fd0a3b9b8231f2804bb24f25ec5fbc9ffa7455c32914083b65446bd647896dd11885700b6b1dac2cf8c20b200379c03feaa3984ad489fd286b5b2cb3ce85c479f818d03c05c80de56663f4860af69f70cc133dbd831ad55f77347a4f6f293a09f604caa1e4b98e362f28a9cc656eb0ef1943a4bfa71f175d0370a2edac0c24fdad09ddd17a8aa39bbd708967a54a9b074ca56bc5d33f39adba805522f7771be18778684f4983e4829bec11fc3d02b465f +MD = 6ea631d59504b0b039535f22cd9019faaf644c737ba3e7bdb1b38d09 + +Len = 82352 +Msg = 2729e7cb7374b68ee04d0a3829d3938e977b005075b61504c4cefef43011e37a4232bc7bd6ec6732d0e8f72f0be1509f9206f1cd13a010e990f4ec09586b5f6d36f0b207e89ab63ad28b10e3f418d5961a2a572a52e33e77a385da5efc90b70a6b2b72768fc5cc2f50fcfd5ccdbe4bfb96aeda6d1cc9c63566496ffd05c914d949aba4d0b5b7d099b10465a27f1cd957705b23a05898d0ab3f0854ed595e9e633937ef1e41b6ebfe5d6bf1bef17aa8300ff9dacaee99866297893036e2977c2fa199fb671b0b45e8bcf948b70a20df11db50a7f4c5140ee1d795ace186bcd7c6ea9771b32bfe05de36761295b455a77f3c273025c75190b065f470f42f14d6ae7dfaf90a59d6546933a9f960d66228049a472065db973558ab6e237ac4e8a271c0893a758ddd59101b5ba321578f89275d791dbce93024600fca6d782d8062961d0eddfbaf593d5b5654b8e02124f371ed83cf33da628650fbd2f8f852243fa6fb4f89a5a79327d24c5ce1a31b698d68b32de0d1947683b1d64c69011b1c6128c216e77a5dd340fe653bc6742da680961541f59f00b4420a08016b9c70afefa4d9299f82b961af660ab80e5a3f22f3837c85b9a30663ece3f9b9a4d0392711a3aa5058c5a4849d92a19d615e39260fb551c3d1e78fcca8c4113cbca55ecaf1ac9c55ba4c0485320b94b0698603fafbb6fac1e87381389f36b8515c23c7e1b44717ff6f1ec3ac955849bacbdc86e6e00ee148a44dc6edf9c056c22c535cb385fc83151c43c741ef012a823268a832e6436c1fad7f4434ddeb5355d33c068a8a5449606cc4fa8c678f9dd24431522534df0510ac11e554733e17d3fae6abacebd6cfa804a842d526890c70a93f6d08f36a13e149098f97e4410a03485a3462d10b7eb48ff789635477de250a9adf234a6afe5b2b712c43587c94af669f8af46479be4eb3b9b67f18e17bb90f4b92be62692d46fb50a3a1f6781e9dfbbd93aacbaaf83c18f7b1719a504bf45f596c2163ee0a6a60afdcf9e7bc0e96b0bd39cc2f26924767b96281034cb69ea3cc57947482fc8e0395bf9353d0ce622da663a1b773f6374805b1f77b5b247e82ac3a5ebdac6b7c8b0a34b6613dc4c91980f9728c1b8ad462e5861a2907fd5da502fcc867f4bffaa11723ab398a5a931c54e287d5a6b8e65e60c93336d7a903b3d5871a9ae261d1edc274bb043ff787df290828bb9ae734e37e628ac9539038552ec29c7dffb7c916150f2beae5026f0a07529d66817e879a4839670b041ac43314959539d22aa9c518dc461203e51145f6a82dfde2e7a72bc536122471b06ef48fe84ff5e3233ba1d2c453a521073536fff222a846895c3dfe42d23b23b8ff41a7a310dabb0845534bad99cac7d0a5882918c29134cc6e78f943f178a09c40c165af2110e14290828b8161aa7ea828e17d0356dd3418a486c023b50472c2f61dd0f2cabedd3ae4d79b26f36ccdf785ea019925b7ced5c70c5bc867072094ecfcf155520d385708fa8286973a3d25854abfc379458b6b9fb5d01c4ea83378e907cec003247900c69248879539559af0a9bf6a98aff243f4262905b41032d8b4e6711c232c289fe447f61334939dbf8eb10874cb1e8cc38e0a6e6ddf67a51b1640e24ffb4cce9b2bc39211be709dfa2608a1cb5abadf543507a53b18d415a9d7bd2743d3adf25c63ab276879f7deb4825695558daa755fb0c5d857a77f09eabf064adef3761c4a54aaba02ae51e7566844e9fcac17d64ac8ed0ea8d491094695c3530aa2d0d4cdc56655c6a4a54046a179a7a6fe28887e45275018e7329d25239b48ae29e3a34d8087ff9ca51c72eef59ed73dcc061564ef1aa58e27894eef2f3733b2d0d610324bb6c16cf7de04b52b5b7fa85ed805638d6f15f3debfa30c823f1bfddfd1a4e4ef9ba21ee3127e020d57a9cffcc7dee2e9cea82d52fb25e4e45a09799efee5cb34ddaa9bb1e1693f613b5c9aeefb2a4bc9dd6725cb665adf1d30040d55835d4fe124e1c9a9724bd3f0aea1f17b9b7005f64759c39328cc66f46a14a14b8894d9c01a509113eeaf2682597fbcedcf397838b286f0f16803df32b0411ec93611cf9765fedb367c1aa0dfe4fee38ac10c0c56c7f7922c4e86b49fa9946a17b45c9b2fadf3905b4516a9cef6264e9b9671291a2db3928d04dd4b03fe146e7d2bfda3509b3896ca702aa9183700e66779f0374a8cc2d95caf900e2657ca1243c37c51c1d6d4d7cb26df08855193913890129eaf8e2d4ee17a2763d05abc3fb0a3620c4c07cf3aa68fbb2edde9e73854035ec611d9fbd8638b2bb4c8b2f4db0df4373bb7d632a6a2d24883e8aa05c404fb5d18381534612c0a2468d7057acfa2dd8148cbea040508180e706e39f41b90a095faebebe1d0822098e7c5fc5404b787ca9a50ec4d3e2088945b3641bc27401990d5f402090daef511995a3e8c61941a99990e831539324b62ad096866ce5c8fd6121904b4fff7b016e65d742acd81bd77adcd5865de868800cfaf56f9fa2b29ed172396ea90a779303698453432c598eb3e541344156468f727f0b47d92f6105f4ed962b4a7057ae5f1d15ab477a9d47db46c5bbbc61313cd1f942afb7e056bb41d0510192c58d8c07fd15ab1847599b577ddd8d1d9dcb00d1e625f79a6a06372ee6d482208e9be464860ee3441710e1cef6f338e3607673c8b23fc02f20f202328dab1d621005201b545be4496e45c3985e914fac5dc62e4d09fa89b4a99c94e3315f33d60e4bc782c4a71e96b18aa949f15221e6fa2c68c549e0c4e9688867c77e3b75faddf25331635af2ba85321b6a7b906011aa3bebd7fe8d022be2281345c0fa545f137b5bbdccf221335dee926039e68abaf256ffeb9449b20aab0dffe4a5f64f612359397e4e070a8fa01296c1d8cee25177104d76a7c154e4279cb62a99d9d7afa21e84f983041f3df030a115b4b437638cfa3d0fa56e7b66fc76be9e18ff7da8f43db6c5f863efacd2eb39c27a20da6fc867572d29bb96017e0e71a5afe1b1dbbe29575a0ac0ec7aac84c95e85af5be4ae0a14458133252230d687e7cb1b04b65483df2c5685a62601aff85053ba2c509234fcff585fb967c96169bb0725f6d75bbfc6b3583cad1d56cf2f3e80dbdc32398a99911babc3408c318fc5c07d089d284fa6958c5051ef3064d67f898edc17f87d42c157b1c32b1dc9726ea39aaaa66eb5e7396f5b451a02f39699da4dbc50538fb10678ec39a5e28baa3c0d095d51837511257dd7e70c630de823ff82eda9df244cb71bb5a74f7f0aaf948943b14d0b2facd03430c854c516339465d8f052fffd7e79acc89c6637c8eb3e84d416e76a2822c02f005971adaf0171b9ba650a3a5ddec4987f79a8c148f560ac252ecf35010b7bcac12af1813afa3247a1ac2e12d7e60e8b64df75900d56c15bc14942d04cdf79a3edbd42e44c665cac29463d2dfe1cdde1f32e6b287877d71032f700d06e0730270070e44b45de5753abb3c5c022fba938b4f6d7ff3cd0f855f4c887b9d72b35d083f6542ac9dac8eab385468e08fb06fc14c97a88ad0acbb9813e26012ab4014cf2ae21074ad417bddb2b4dfbf2a36da8bd0691695b8db7a752b88a2adb2a18d8d718c9654b62ca698d262a7e828d43caf83edaf5bad252bbf3d822bb6b05e320abb6cbd94e0f675a44068aaa3b012fdf60e2a5c26d610343ef0d6e175cc006a0db1886b7b522652c8a3cece37ea7985281928063c5b26febaed8eae322f0e9c60fbea89523544a4cda39afdeeff903c0d4bf093e665eff1fbdbb27934001032c9409a0061b0d8d37ce9d61e0e17df8b6c4d89ed6c1cf275c863482ac4688f9311289eb6f0ec6b479b1d8919e059efd80fc6fbfa16a7b7f3eb2d5aa82a8f1227005d009547118467f2e7bcd6acee478cbc5f4fa42c2ec6d12ae0efddae9c21565d84c884ae46ac9d4bed763cbafe70103cc08cd1f5dba8794e2410b098b84488f248fc6a6cb36a516cdabf3551b0f0cb5790ba6bbad4e4511fa3c4092f0a0425854ea631ca8146e91e549fa9ba2c5124d478e259c34102c3640213d0bcbbe895df41cdc010d8c8ce29031f7e3e9b1a857d1f0a83584b8a36e7ec05ed87f27940c8c77aff86df79685591469d2325d455182e3dd1c11a05126e07a349d8d83d8f0788b4d673bfe01f6aa31deeb1f106fb6e4c802b45d5fbbec2fbf4caf795bee8662e832d219f865c2fe4aa59322838e14722dd792ea4f2a4ab7100592b5084b4ab5eefecd6a8f1856df9f7c7ecf1f36e6b575ba3c2b0742bf011d0dfbe31155c9fc201fbdb02ab04ec8d0c1e2875bd0aa19402914a2108bb5b826b42f661fb460a02c04278d43c3f7446ef482edb211db281db2c0d1f37bcb26dd96c1c08bedcb4c635aaf4462aa0cdccaa2b464ca40f67c5ed5a55d18796be792343774de48564b566199982ff8dbec845b1b8f0d04986094104685f82b2474f50b15159f7a8e4775d78adad427011e2c6c1cbee2c31d7f4dd138ff2b0761596689df0547faffab522b079f27cb08cc13742c96f4030242fcb6d12b2984beff774ee9d6502016f17bba7457734b5f80e9f1ef89a95af336113fc39c6c29a9e1a7b8ea0b40a060a4432475964f2e71c70073ca198b214cd33bba64c56b6c9eba68564416a1e2695e58f77fce23faec29076840b901fc8ba4dcd55928cfd429b449b58c8afc7c9d6a1d81e7719a172b015f4de80ab6534c25650f0548e1e6b799bc3527caa8b57972117261230a29bafa88a3246110bbfadf74d5fda84a1ae4c54073aa784f5389e0c5376154fca9187f13e68a6e999d042d7cb8a6c970f72db166ff88f648ad4b30b95f6c8a0a0bc00971a68e85b98d14a9fd25952eeee1eef8a02757c73d494a0c6e48e7348ac85e243261a54918f298ef66bb4d3b3c91c5057c897b8d95ade2ce448265d727652f49c696732b00640d3859c83390b25d3c626c9478abda41b1e0ec9a6cf44878cff4beb35c9e3857ee4f36faeca208cab199f0e6e39473bb43feb70f611e6669ccbf7b46e6250954b88e9ec1dcf1a850c10699ef20ea1a60f572444ff6b819be82049cdf8451fbd0f860f1ab88f21995e752d81bd51f06d962e604da7253dafdac6e93dbdba798632a70c0168545b4e090e92c0b54a5f19b08b4894d7864129d9847e0ca30986771cb389a91364f32f75a44162c4401331c437832078d7b6914c24b04294796d1835722d1ba2080fc10bfee16fd17d373d3cfbbafa7061c3709d6c29e8775357f1e6aba15efe88d88e31e61bf0c347f1c57f9d9528a969914c33258e0633e06b8b95288c7a0d2c751d502297ec84e76952f5e5bbb4093a48b076178aa2b265d26dacaf9778b93c0ef6d17bfc6bfba5c96b069dd5a57a1b0f21ce09c3c6db2db31f91096a5fe9ffcda21ab9f37510c836991a8b8a04e3530e29a3c4e179967f372aaefeac3785bed8a895a42313ab9ada63997983d82b2b6e4f5d118dc4cba285156955050874c15790a903354cb461dd51eb2d68293ceb571b64b66fad62dfc7682cd81fdba05073e3bda0d029136667eb786fe000fddbf016217b2e3f447e22ac5e4d9fb7f0b353273b419db0b1f19ebaa9099364564262c7fa2a727f57c7c068667d30a54c3121e78aaf43eb7449ad45e4c12a5d2f6ad4b75889e5778401c924ae3078ac9c1402a812b26be245b8ba1492614df370996f6ca4622d2eb47665689d2d1fd4c8a220f43b11bd9c0d84eeb01cafa32f02185b70447bf2accd6cbabd9b3ece25b924a3526d96e021b2f670a0e874d518cb2fbf4ba29cddfab82cf3aa10292da855e1b34b10077d791e56696c60778ab6b425c383248f951f5efe36b864b7e364852376668c2d3bad37ec009deb826b12a54491a2341bc323a629ab6d00b099613230172b49d0c3c3e7ff5ebaf05b203387d24e3039070f0f77f77c544adcf6a84252bc22b0b8bcc614d9aa4bd9cb5022401825b39b1c20eabbaecef2ab03a3409fce8ed427accfbba8c00dd90d9aa3e5ba5e3cb5c1229fbc5997ccd18cec47312fefb4c81776a4ac8afdafebf490c386dbecbbbd15e1338d39fa9b7853608b84dcfc5686e9dce2a0a2d8b709f675550c8d09cb54fe208566431f666f6a2717408c3c9e9703a732a0d8984dbb7b100480b7fe9400e4a93d4e5f4d533f3709926d29f8b282cf9f3bb314879b8aeb2a75e941143d4c2f42024e75ce8a6f24cea4149a79bacfb38ba6e13eebc6fdae8b534f1290eebd48b47c6d6de83487973df63cc704df0719341a323e0df99d2cfb44bb14bdd1dd95c654b32fe4790ffa1f30ed98e448b1686340affc355af0ce42f0332ee20b337f423228a30a8090b43cfa2ff55f1f5508dec05f61ab1180fa2701c24846c7476feebdd5b2a172922d5cfa0bc6bf897b616d414b53b647d519741c6d4b322ba2cb949ec142f3769bcd47db88f34ab0acdbda6b79bb9f247594efeb3e1dee5fcbfcfa7df43c46b535fcc443af6449bc6fdeece7f382afcfead161163ca7c28c4a6be9007789e357e7229ddb870203d54dd26a5dc18e2b71bc3a91456fd1f6daa87f28d2510f128339a7984a18b3c221cd1f1d74e9c95e317136491fe084d1706c9f81998ab81a61b4f37e386a60cccb772dcdd5751a8f38932c4f4c96a69c771e35bafe2b6b451adf6e164f86f26bf9d36441286c6805adaa866c759920a01647a89ca83b10d9d643812a34734fe4d46a2d4314d79d09b93cab6842f2db22766e60ef40c28e1fbc6692809239618283c3ee9941bda0e384d3030b5aa8be6dbe1bc57b6dc9cf5ff5d20be20fe10e8c2e66100c582659db35f6f61d66c3b0c817d63f07d856bae1a80f521653714049ffdcfc64011bb039f52eec650d4c9b7aa928365d287437ecfea3d1e407f4de021cac1969e3a28d44eb014dacf84a66cc9b98124306282ec91f18ee16d36fd000ad5ecee3a7c6d84540f981bacec5f90616af3b821a7c87c132f613725eecfe88db7b8599f48c79841b9ef05738c63c7041f319e20b772a1a60c3a7c2517250e5cd8aa55473fe5849a577034bde53175145ee142a8221001cd00912cc530aae5dad1396dccc235edc050c205d677772f3492895242683ef11ab4fbb590dbb003aa09ebff9a603718464e5b1577c37359c76280296a0a4e03f181e0c30278d2ec2d0b48a73a9a77a8bea8b1cffc49d4895f476c549978dbcef40fd6c1b4888203e65dc5e117e166237be85cb1ee8b09326ea9a4405b444696a4a7443e018b5bef5879fa39ccd580fd1095b247b8f78fe96801ce9919fd3d1f55f0bfa48411bf1315c84c2dd3d766ba0f29691e062fe722fe0851bb7ff41dadba74bf71b68c29f380f13219977775deea2bd78130849d5372f5d413d7c976e6249bba32138b3b154c6d4299b2363cc01415843dd2a6111f7982ac5ecbfdc74d46ee4662156f510caa95042aae843a223f6ef5906704f0cb741760e8c7018d4773d4ca9e56d90a2e5e20ed58d6e1ec699e90b2256811ab0bf52c884e537547694df7dd233238d51ec9696480d5efc20ae4333069506cae356f4a98fbeba9742727bff4bd420f30426f07105f260e598a92cf06d8aa6688fc54ea097e1a4e9205b3a587a900dcaa3dc152672041be216d1cbc9bffe0afb9b558a3504149b52f8954412c92e921b1557303df90a38fa8270494664b9da8bef4bcdf03e2047dbb269c0b49f7856ed44dc673f01ce5e36c4cccdefc583bd2173f2425aadcd528b361fd6c76334024817b6e2b3f116369cc42d804d48245bc30f910efabae2616b6cffb0d27f2b3d34762bca2133ab68376bdd8ae756635d7cab6f5c58cb291f813c51735d5a25b0ba498547112e559b0c9f23124558096b512fd552fd4a6831d78f5c4af15cea03e1780a800c4adb7725494640f0b4de2c4c830b18709d6842754b695b15ed41ddb2ec039e99ef07a689528f3d6fd4aa49748f59d7392ef1f8615ac0ce5175f3e6338bb7c841859fcd40a046314a1e3569d13c07b7e163cbfba5a2a9cc2d5cc9c76e3e70278b746c97531db3440afc47356c705cdfefa6bdf4490d6c7d320a88286bee74e3ff2536a9c9af1d9c36d5a7554c14a178eb5e908b53825008e7e8fbb031810d2325fec5aeaa40ce6456101e7079111fa95ef20c67cde89e95d45ce908c8e1800f8668e04cfeb70cc2f317742efc4d1b9bcfccf931be299f4e82cf19d838f418d1a9cc512bcefc20de94517139dcb2e075c6531f902f2c985978aa54c789a41c8e1690def421f752e1c126dc362127b560cbef462d27d9d4de3e53627dc4d7d371561e504f0090e9f302fe7fd0d493e184670835afae189a065d340ba3f177869ff0dc6ee372af2f3be04120adfce0ad082106b5bfccd131f85cb317e1166b7e436c3402597f3c6ae2e2578875a1f5611582528e058aece2ddc33a4dde3d9b0083538dd2582f1fe30f91a97fd1cbba45d211528828ef51f5dd1b3076436def57872c4ea8898b40e2eb739dcd698317a068566f6ad104e9b21febfd5ab7af4fca787fe14a949a87ae9e129c39e4d0f4bcfed911fea7d09a60ccbb08c1e30aa3a07ed5ad802065dd914ff60f8ceabb39dfbd23a10a535b4d490b14bb736e86d322c0b41a14d5f228d127a55c8e254bce52cdbb85577cadebb3057c7d37012bc79867a790cc5d4b52b74da9ed073a889b5d552927adcbcf5ae7e27db7d74402684a9a3377725d78418be98a28bfd47a89477df6eed4e8c8842dc99fcf19de129c7f82e237cc807fdf9525ce777e992a7e5a6fa941937aa04fcce2692ec678634c80473b38a36b6a121c27ff410b319f63dc50ca8ab3295fa50e56633ca6b9fe619610c6e3bec941c46a17a4ed2f45e121164be130fd9f0e6d394d1561804aeac107050c9ee7400adcc51e46e5b27df99e5085779b3681b58f96ee08061dd22f561b5094d2e478cf4276646c905c80eec4d2291332297a5af26d62c39146fad6061c16e6e87e1b97dec5109e56f4f7c87ae35d3e5f9d30078006d1ce6cc16ae6bb50828b467dce6b98f94a659f448990a7cc497f8a594bc320a862b2fd56c9675c01b90a56a93b52585c3c47d312df4d35d6175e19267497ba9d3df6aecfc062d175e6eb7fca0a5406340bce5a27a0070b46ec6375cc5389372b8b22e6f3f6dd02f42fb728a7e3798acae2829d4b75c61167f31706138fa47d9b74bf0c8914e3d7c8bcf5bb096ccacc66e7ea024506932f80510134c3d0ed75351f548a5ac1793838b62d9fb8504eb450428ef2dffa754dd831aa68a3c06e0740b569c72ea6a90d8b45e83c7c350d2bcf1cf6d6dffa7553b8b998087c052e1c065d862bcc6a7a3e0a90acfa1dc410172c9dab140ead9a296811557e1647359acd40341efeb6f5b3fdc0044162a45e62b0ec341634bcecb830626930392f8c6bde85fa088a322054acfc7579147dfff2a032194219ce73e658d45a88ad643a75815561513985050a5e6d890afbf9fcb14796e302848c389c278eb2ec398f47a2fdd8f061d358acbb5c3bc75cdfbe5c85ec4119bd3f9d42c3e6b9f8c6a758bcd89c352fa120521b50ef8db7d788742758d65a43da10ab9941de7cb57dbd66a001a495a677e81c5cb25d8be2e4bec466114e0ae9c3c05b4600540070794462fb045e1fde4cf25d77c7ee5fcfe9485620989c7994df175750e6936cb12203f3d5c912fc5e8907be7279ec2e0650efd15dd508cecb96dc47bfdde2e901e0c4c237380853ae94efe757af9d23107f7bdd25b0da321750d9d29ccc889fe61b4d772839874d57d7727f2e514b6374e0b423811159ccff75d4a1ee9aceb5ea3b67b9b1b4d812e0b8572ffd463c19bad9614b78e0cec50b6d965cbd31fc5495a8da30d99144c9d1a1689ece78b86b6bd44cfd13058144c3a1e7aa11785aa36eca6e85a8b8119bb3f96b74a8ce09810e383be05968ba72b0778e33f3572fcbfd0aeb60261187af0c28295b943076842b6df79c52f1c176595855a06ab6c5f3cace18685c85f02e67966af99886469c4bdb48da0689dd7946ad02997f7d62445e7fbe4651fa923f49abf6f6bfb8c2f0f5eaf5427e1658a300dc5ec539944fe64086a5a20d59b70b3ccf94fb0eaf32a9b102c87bc181781b0e4f31cda0e4d400f8499522998ba5b9c76a0eb08f51deee078b872ed7b3860af86c4358bc5338ba0f325671fc77a47273e42abc49870de880edfb02c993c997479d5b0f96cac53d0ca8af353e04fe5ec6a5b1c8443a08bfa390eca09e088beb8249439a3532c1b177126a17681cf9a44a156a7b8950189af8dc22af5efc122d31d7c1a0a171753ed9da4dbe81a6df6d879c1f7e1fb383a1083a64d81156a886ddb19ec9e371290ab86721d39189f6e004a396780e4991fe5a107bc3c0fe931e0d3ea1bf021825409f21adfda1af8726499098125ffc8cd677c7301773db1b1c49e694270650b0061370bbe5b7ffd966decdedf419b2ba54e5c8497c30d78aa919113dacf80013849ebc1132de6136c94cc05dc54455659d2e7a8e9c01d926ec062766f4df1097e4c76d788d1bbde4771ad3b02de9ccd3dcd944c91cedca390e9790d5a7c367814b16ebb89e78fb2c97d06dadd60eff4c376f90c0a7fc90093655b5536eacef1ce3149f990cfc045651f6f51e65bed61ad677c53ce33714df8dc6fca7f1a38fafd448efe380afbeaacf15d5c985fe3984e2794a0578a53e023b74ce9bd7af2f81463b445da19a127036b47476dcd810d183fe89e30f4ff7bc67e794f5c8d9b7db607307d118c4e8efb15c3aef1253434ae08de99e503b255339a5b47e6e2810054a7a9e058c36297065948ffbd077ba3722aed2fde273b110da3898fe6ea420472dd873c1a6f6bb3b7de4db61be4d5ee070e9acca6eff843b7228a63d7355d0e93113eccf0e0e88981fd486ea83dc158cf3c7e0cb9be5851c28fb4802234409327db573f66b8577cf74edf85ec72dc884d3cfd4c9122f9bfa253be5162678b16c3a466ffd65646f27a3b69a8534466011378af18b7ae5b01f916fe44225f9b1dd8f4c48ada5b25ae9d4b8d2267031c379477e9fdb7c0dabd19320af4cc8d0f2cda55165ced3771f5e3179090b23f6db042d35477fc0b1735953d5adfcb6045b86a3dc302897bca6cbdf83a8faf69b8efc0e374f40edd8f2fffa16461c989dd34fb27610829788d77b095e15bc902ac6a7150a21e6ab8b0f0ab06ce27215a4446ffaa56da57ee39ab5d590ba199baa6a4f67382339a4d1b2c49c5de9c8d620952fa2f4b05af2d5d7c06ba3fed8bc24623a2f49bf017db2c373e773c3e48219aed7d3e83f679b6776e5f41f48c39d9f96b093c35c05e1362b60b836d98ec29777afb40b839423a05f6c988a02a0e623eefbbb30610e7666d0d3382d91903ea3d8fe6ee4e4ab2f897a9d7e6e93383fb95262d01738e4e4499b138fe054b19d44b90e28fbcb726a28b0bfcf5263534e67aa2cfa01484fd4e7746ae4d78bb8888302250bd99eb37987e71cb2bfdab9be37dea26075f917ee49441e5f9b9c6ea6669b8c3f05c63407ae08fa503c60313531d60c2bfbb303d976f1782ab3f19ba0f86c8beb07acbebaa3fca2d1515d845b5c7ab2821bdedc3e7665c06aa7f0071d3e5d693768b7183a70a95c5c86397adac0b3db8e5ee26ac452863e4a000379c64257704caf4e0c301df97019645cdb576567d0774b287514113e3af04591ba430b40e65264db6044b0d32531722e6f7d547fda646b16c5d5bb74fb84fe02933ba102147010c5dd1d331ec4cc3818fef194e43f7d441521b05910ca2fb3bdc9560d8342cf3a744b64adc495113f804f5e2d7c47ec608e534df2f9ef18ed2c273d56adb8976a5072c027ace0290ecf2b6a28313cd647e721538e19b26933b674988466bdef28c119daa8beed3c2e6e5abd8cea64667f8a546b35575a470ec3770ea0989afffd2f0a5938e2037125c3a400618f09c192ddb43cf09b31dc05bbf948b02a98f070020be6df006cf07d38d1dbaf077112084a086fc6cd7d50a007c2eebf04fdea0aa2e529a6006ee2bd34a8f57f3ce47f67371aabc0d687cb670d9aa7d20e1114517760c994ca526f6e1ff2f7d815ac30390eb099e59c9774e336491bf3301e97cfea436fb24760be17607788c37a104e053693e03d08f5739bea96f329526a9b0c6158c2075ddff84061ff514753570154178b29d002e8f117924bd77d5c3e478f45656b9bf51944728952fa6c88ca70ad195f1ca773b916e0942e6ef536e2c3e0ff331176f854cb3340372a3a02b1c498a4d960c941b1097d5a08619cc89e3887f58a5da14cd9b40eee7889baa754249d20bf9e3e5616f3764aa05777fbbace0c9131f723dbf02888fbdbc0f360fab945f5da7d0f9830fb54cec0f990b57dacf83af286048be04f2bd02977ed16ecab178bf2a643f1494a9e4d2eefeedf31fbd35793b24c46f3507ed32955b1af73219c4bcfc0e248a707dc2fb3e099621ce22352dd2504f36f54096da5034615d5435a9b3874f584935b97db17759a24868a72929884347a9d8255066329b42e5a3adbe4f66a828f556e55bb2255f80fb91a477f8c7ae2c3c503e9072d6e04e44c2ea78fd24994503567a1369c28bb0afcbb2b8180ad18b52ffe4dd6c97a3d1df146440291ba30af7b6e00b44c98ecfc9695a5003ec5dd3a229c0addfff667c393ab3ca7fe6460946eadfc9dfb4b91cfd0cf3d648c6b3a39e805a783998a8bbd788517e5e0f02be757491c5a71e9b56af2927b153347359bc760ac2f5dddb0f3e8fb5b23fe059a907e6de851761b5db54405e87cfb00d94608d5a24b1598de4d2d3592cb214cb3782b3fe9ebd28993980d510bffab3e2b23f28e103e87621db38e5c4344116c8085a6e7a6904cda5efb979d6c070dab351acfb07e707ce4760d5298f7f6960e09a0368ea8a9aeb6c7c6281294fde7edfe14e5667449bbc6f043c210354978da55b2255c759cbec7d4e109d80a4702ac8ef77ed67b310eaf943d26ed85a57e776ca1b97897d345b28f348216564f2691eeade0281a903b4769e4c6566f72728e56573b0b96b40a2200a8daf4017b1a43251c5385dace0b37771ee9747c181ac61bbaf23cf8a9d7bd2e235b9b9235a86b3b2e211542534627c6d4d86f33ff3ec8c4b428344719722b218e4b3391e496b139c990ffda87b4be5fefdc6e1d8fa83c592c231a0a6ca415e1d2f3e387efadbc26d7ea6c2ad31ca549553b99c0311fc8e0092d17ca09352377d59bd4fbc0b5350a3f7583bb9d48848cf03d19a64b6a1763358c530e5aedfcea818b2e75be76c3ede97a6d144efe0231a62c16574752cfe99788f55ec6944942bd0a187d51b80fd8bd4051bd4f07c73e614eb75a8b9f997b176b2642b5f1b1877061ba9ce142c1d2a311583f072b7cbe08ed253681191c209d7b0d438fcdddc284d93d59d6dd80e48333a921dd31c9b6834f88768f8701e01102d3e8bdf074fbe0b8c93d9951f41545ef6eeb3be35530babc079f1fb3efc35b469fbaa5221f386c4685cf9066c66dd18dcc268807c933957eca3b98638fd264909a40b02b868310cd9a9724e39ef40f55ed592b66ccc8fcdcfad1626089141227eb0246d250e3b493301dbd9223b3e88ff90c8ec807f6d71dbfeae57284924e55bc88d0e0266140e16deac439feb1428217c718f521c50e8a400d886028520160325bb41eaf039cff7c859fa1d7f60777701331b4c33d896ba6c2b6f41e5e119177025c5194d3b1358376b892548b1db62c7741ce956730081892d4f40ebe6830b3052e447cd965cbab4676d420776e87727cb00c3e4aeca8bf034b299f78ec850ded94be101ca1081b7c402ee1c2e0326aa8e73467eea394c39f835b7a9687d7ae40f586f8a44e36fca0806940755dfe3e864c0eb75c3e154beee452471f2070be89b965db79529b753a9d4de497cc35139b4864d79ba6717f77d7d5ad1c9e96644d472361a4977fafd3ffa27630141d147144fc6eb3c1f088c2c2ae5494eb92c8160988332c032cd1f20e309d491ffe668fa69f25ad79dc8e570ea3e58feeac136b665bf91980e9042032bf02e8d422347dd715a490b57bb8bf247d08168f2b6dd5c6665a73f5fd70e4d3164c181bd0a4c4402692645d172f816a03642fb659fddb916fff4349b13cc659fe24dedc4fdeeb489a983258f61b254affa2e54b7cec05303f9091664d914e2c3f3244ffe80b7a56385d019060a3332b37693d36dd61db099eb46333199605b4a11d516de353f9d4c98ad9ec9fef34757562415fc485e6855413c3985c747259ec8e0d0c88ddf12915c6c254fa28b08f7f35f8af7880ad0c2856b87d60521e84e72c81c51ed2eabde4bac5b0b8762de31d896a0c4379b807e3254aca6b598f9b5ba0b481ef596af8fe0de9e8220035d81906a05f6b9890dc4d278267c6b04f081091ae26419bfb422b6837e580ef4fd63a55a1913907bcf52e05673db981e631cea8789d5dc024033273b58d1a6a0445471e7588f5ebc4b84e6702328bf1da805d8d19cf8b +MD = 094c0c5440eefa360beae8a13ae7d1820d081743979f7550d07206b4 + +Len = 83512 +Msg = 12e8694a2ddeeccfb25a9b9b02840eb4a31c1280f160ffcd1030461425704affc6ae7128af047a24b64011c00143a08a76a7699473a5d274bf35ff8fc176a698f0511f538b59bb9f8af657b3d4c331a8b234fa38847c2cc5b3ae9d9ce622557c791a9c522ba5584716c496fce5cc6714410bedf48caeb5c6d2e247c4fc3afcb3475110adf5b0f82443f2f6249a26ead809746b50f3041681051b268e6b874646443ea3ed5342443ff7c79eb25d9863fcf4b79cd52143f7fe359f62829cd1d83c56287b99ac22e49f1b8cb72e95eb7a86e91ba70a7f36ff4448b82228f5e05d9d6759c33967197f4c988a6821a9e7d680cfe9b47773a4d75b28ab8e09df7b7b715e17a156eeefbd4f5406da12035420f1906aeda56654274bbbc3d0acc36cdac123ab3d77a86c48af394b34890afaffe213e3781bc10f961ceb470d99077923949e5dc024fd57c5742ea09f0e26a11c5a409f7d61ea9dccd79e7e7059156bfef3b77452e5557adfa71a4c432abf101e61ffe525004bc67284beb11e73530912e5563a1a43189b3c4fe79847643d10aeff38fc977f4a5230293229426f2b1d087263f541c5ae8384747cccd4450969743dd32dfc665108add0e22b02d6046d87a2c6eeeef480fa601ec130115489e31722b8c07c3ec7b19280b602862f45c3387e676d4a56f4c878569e0b2719264540b7d0fd3e8e1415864296f5f70258e5c30d2eb97d7573b47323fba73d1c48599603012b6bde9ffc321d6a4b7dd8a49bcf58041caed96687f98ec04a7ce658e5c20e34942ab7d22e3d191a4d3f3791af0465cfdc06083309b49ed53d0cfebcb26be0527ea49f1472503e8e4366aa87e70c3e7942ac8c4402495b22c814ecde883a8241320120ce921395af7519b6ee0d8cebe896c8edff3a63cd9032bc39252fd7fbebf868c266542d25632a81e52ee72f72062084b1ce79a8fd05c52e6cf86ee9533617010c458147f693abc6beaf3e9addb92706621886c0f26ac78f0dc10e18920cd9f586d3e1081128410fc9dad97834ebf57687442a54b4a8810aa4e7d80ec154846cb8783b197d0832848f15826f7d83d0fda9bc2d0c4ca53bc4bad29170e8f6618d2b9d5821421dc64f97c9ff27c26901c34fe7578fc14b3de8d6e904e90dd9b88166a801c9694d4795695f194a0a85d0ef012d6f861b81ce9c8196f81f3ae7d170f103fcb9f982fb818e3d987d5ebf84a948f63f98632e3708424134ba7607f38155141198faa32c388dcd446ac5ff671baaaa8d6ea03cc156a1508163ca2168dc19450a0f759820e5ee76e5b9472dbf6ab1b122afda92b1ab262ca7c23c1e76aac5fdaec570491fae3a9f4212ec31d5c1e574c604191852325a3d6e7ed7e46613e2a3c463f69e73bbf8b2241bbdf3f146cd59401566b6eb10c4eb9e3fa05c803ef7a115900c7f6335b016537fc15b5b21f1c95a89c854c370ed9ffeafa16e0b548c5e69f5bcd43644eb3397e400525a7bd92dda0948da23785bbf5774e103517c294287390d85350f2f71b8f383be377c0eeb893ced30535098b57136680198df57b53905087aa8bf07387d5351893b4b176d2fcbbf3f9b212ce7149e3f5229a49d1f4501b39bd77bf8f0afac7299ab117c19945dc6ed43139dbf08536ddc4cf484e874d418d1096c8c0116a8efd8d2f5c6597f9b0b23924d75a314fefa8948f793788e273f0287ba4ad37aedcf2cf7207c94ba2c95cad1f83bfd0247ef3f67d452385ba12e179a8cbacea3231a7f61b926310bba6cc8493b783498d553e8efb4498ea3ebeff9880a655b59f3d9b859e94c9a3bea99073f3fb3b09f512e6b29be01e32dac8a8e995ed2e0630513bf27d877361266236dfe2b74d9de6288b05d1b01a0c28d05c017ad89c78a00d07c13ad2e6d57d612e4cd2844171fb16a9fd3f2d12b2a366a7648221376968c18d76591faa7d4e16f53f35ea9d228e6db20d26cfaee2d4ec19876e2f7574f52f4b864ab624c4f3041a1b9f42d72c2a8e41ba3b1034f927e100de718bdd07cfa6b075924eec4916b90b86713585fb59f8c788fe874b8236d61bfe3eaee4be72c86ac8c2326786239647f45e2b101c974db1fdc3ad690a6c3bb95b480112f568f4c8f45d193ce8942c6de9a8ac0c1c6cfd9f8d2ceaf3fe42a2777a103aee492cbc598cc55bc2fd02fbdbdb0320d0573578fecbbcd8a2da548ab4df19b4ed26389f9b068d82904fda85204cd03213699b504e1dd5eecc2b1c552ffed6f78619071f1bd638263b3d9548c9b3a2583bd009140c082aa5f66cf4a2176dda8b4f9e32ab4a8037af1a62cdc736b3fbfbb0070914c72f0d86a81c97f2298096d8a02225d4a5a91e95b43bee70f5a23f95269b1602fde6f11967b650b5c4eb8e783e416b1bcba54f62af4561e695130fccf5f8aa4f1eb497d69bc6c97d781333e260787cf11af96cae520be298839acf0ba49c5069b83c4436daca5ca9c17c399fbd33d5e51239d8c142ebcaf74f8e0fd9c91282d348d2a8c2ab3da4db2faae208bb1ff0784fdb3654088195836781449fb9e7cc2c4f0c17f273ad1c721103cfd5d079672b3251e7df0959cced59f90ff62d8886c5496d245eca753e1f243b755fa3ecb46e68226fbacbd0fb659579b4556a716d4ea66a405016428432c796553e8bf642b23fe1508fc6838bbcb877e436173eca1914881e8efd71894d79c901cb1f129cb748031cb69fee183321782230aa4d37c4e24af163d6aeb7cfc937edbdc3be4cbe0f1c46d7ae7d0b696eeec0ad9a2930d2be277b6738468a5a14677b6f2075bd66f371415b88ccefdfff6072257d6f4fb2f6b21f0198c59b4d19dc5d57abc57922a3b6aeca953a20076161a930ba6beef62a5f5eeb8ec84549180af61fcc1a0a718e50d1ad7a5166602366c857e7bb890cd793bd5d70bb12bebd77c820180febe421e47c6caebf0d7ac3e461f36beac8777cf3ad0ff51aae1e68a755f1060397faecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c9189166d89b391beff97d77a7b2ec9b2a9c15a9a2869c87f21c8de0a50bef6c23659d722b46518b7db802a8d7d47056232afd41ef63bef71d25d2efdc37f2cad7e64ad8aca787de9ffd3217909d3c782ad1da385e1a93900f1996c00faf52524b6441a24205049ebc91b5cbb8577989a6585497d6f242d931c0835927bc368de8a629d8d7aaf0523b3d34cc38484e0fff8814654134f35be9e13fc40aa4c6011676ab8052dc728386c75723f9b8e4949c29c2aa8629d09ca0467209a2af2c383e9a6fa49ae4b2b804f7c5d7e2f1629fe703066f8d16fe26bfb5c52ed5278dbac6db1c4b990ad9791d9727f0da3af1b947dd86bb3e46a881acf7df3d8d52140d18015a7e36950f4f396d2477cbdab9682480ed968100f433d1d46a3db17ae6bb9ad4d34459cf7bc0c04365739c1ae137e7b5e1083e8b0ac695130b3729e52e4cb61c2ca5eafe46561adf91ec354292abf6420a1a5d3013c25f7e6c32dddb1246d3a010a9d26b9799b00951ea7e9af34ebaef12d3c63737ad99db3536b5a6ba3358292559f75e9710e88b4d765f692da79b869e3c61e89d11aaf30e4c998d4f9aaf7f13bc421e6e432b2c2c97c0f9673e02cd595b178a6e75fa8e9d7a71d7f9043f6a83da9bf543bae2b397568990ca9c558ee83ace67d162f1748dca25cddff870b21dbceb293efe73e935b9a2777e48fd8ff6e16fc5ef5ff76c84449db72afeaa1e8869180389964896afcbf3f6aaca63992956e3edf0f4743f2aefc1dd019e55776de90ccb490ac782ac91645476abee7329a31027fba9d0b529d37a868d61d9857345adc9a9e35a74d515dedb0b7205e79fd0e0bb3807739626f8aefbf6ce9f104384e545cfa86835d25e47d191a712bb33e33af0d095c5aacc674685636e0de084ae9b86e3e1598e4a74897f2fd37cb88ce6050febdb2fb9c0272b6afcc78cbcdfccb7d50e169444e5608a2d0e7daba653e02b60b062178aad4043f2eb63856efce5207a77d083224c293423562d074d2fda932b48b1e6e639bb786755ca5ebc8201c0bd48968def27d76da82e6bf874c9db25b8db5105950c9fb10f6582816f1a287ee5a6f11a721d731f05bec0e6e5c8ebc94e90c8da5fcff4d6344015544f6b63423cbb689274d70331832fb33966d51267378fa0cf0c2ac2ce1c110b41231eb9f408af835ebdfd928b68a9cd59c09859e7b901604b63c412830ffeeaaeb5da337d92aacae415362515fc5394aebbb8c7311d0e91b62d46ebdc572f3c05cb48d8c322d3c68d442ac6b7895692a11ede652eabddba77325756c13bcd88ad2e0fb0af0052fec111827c5955da4f98b3b13ac4aa9763f83aa05a1a0200570ea6d8c3297350fae946e650e3a90652fc40da4edc646315a00dc9ffcff5ef3090fa4b1a1ac4f5436ba9fd483dcd0223368e00a95f1f6a56d772794dc95cc39b9bf40fbc683c6860b103706f4f09f74aac65cc543324d3b10533584dee7fa320975acdb1fd21d2d9211be6ca02a50d4fc88ce65642bbc7ab92160f0627a5b848ecf52c02bfbb5a3725bb08633ce86bbbf1cdf5b7722b6ecee7e446805d172a9a028dd5b69854290124a97e41e61c3a168eeea17fadbeefa16a64a4c4761e209f42ea6fd56f3266bf86aeef6ce987a1e609b894b7daba73ac8460d2d95c00c2dd12d3a3682b9e3afab29204ed2b71c9b5c9f37367e16821789d9e78c7f50539dedb111975b6e0cd38121d64cb9624d90a3667e995aa10228c1ee83d972b77ad2a066d7807f74046040d17b70e11e7fa6eb8db9c4b1cfa9d706d04c950e49c4547f9ac6923d606cde30b47a7bf83015468b7193490216dbbadf4bac5fa0abe2abf1e9993d33b798c5f7476dae4d6bb0e809be75a6da0b3a4ca1ad4d99e8423841adcfb9f1e0ee2a8ffb16cf888f15d513ecc0eb6e882127f4f4618ac433a137ade9a99340d37894c4b28f1aab0bc2f442bb356ef0cadd374c5e250e7f114d83495c23cfba69fb69ecc42cd98661f7810ceb686adde0a3dadb3554231b0fab9dbc6bbac9bf32cb1c60967c769b10282dcaf3e689a68819a4fa107b73389d4fd97faedb1bdfcc7c1ed8b00a9c59a4d93d157b4c25cb1fb308517607695838aed8fb8c01309c859303bd873395627e8f4174d7e5d9bc15e49759ec849fea704d1ec889c99265fc844d77a2a40c162bbedd519060100a1942b47bda7f616fc2bf1d5f2e90dbdc9fe46eaf98b85b153afc53344b2753258831e24fd6546868ae594737f0f35750ee17d9bdb00d2cc01aac65a55ec83daee156c34e56a01f6591b03eeb676d9f7375b3313aaf0edba74953672d41bf1a06c305b9efd1eef0d72b6876d2086c3eb4c53ae79edc39f24b4595ea24aa6882bd9be358bcdead774dc9c661843a8baf753b038f62de0b0b2cadc86133ef710243da64022de3483d39fb7e818a94285c6565c17b2f1b1e80bbd08f6ed38755132a0d0c58cb765b9d1c4ed5795dabeedfe5c3e93d4c19d0fd895c4f557c08813fe0b240bf0e0e642165128f9b65d82ba486e3ef685250cecc05af7cc795f981d30858a5c77e21ee64b514f18a4b9f8b44b934486eca666486c158bc47c9c0d386f17eafe4844746c18c94afa877986a2b0d3388d32cb14eb83ce67238800502c63c82c3a8d8e529e24c301e78622964e1e3602517e1d7c9dae8b7331c412c7c1b5a038586b491f4218465c29c93e8f7e3ec58b1bf923072695569738595adbbe0da7f6a00cfc42219b5b43077954d9fbb887b932ca651d4ddf36bb7e6f60f4ed12e64f5a982f250356099ec8beeddc8d338575e01b6b27db3534c74c2cad7b146d6429cd366a2fb0f05855b5bf90fffb57c5a86b11be8b993e56a3eabbc8d6fcc6296e420f36c8ef12505016a5c5ad0fcd51381cd6e5b34ca3a638a042396f6dc33e04014b1a588964fa773397154b8f3d310f3b926805bf0b2c6cb6ea89ad2f0faad552119f47478d5db353be0642444e6b13106cd0ebb91fef2873da3ff7095075c77d894bfeef3681eabf4222faf6a9092ee28da3cc0187f755213be3b7c42fa8c4c9dda9e349066f05c04af1db6df61247fb1d6c1060ea4cd90634fd5428534ab380323e5f1fa62eed9cfefa4e70dc8f45a143b01e9ef0f79e6aee1636fd65637be8b394db37bdc6889b87c5b9c90387121d27f9608342ff8a9790b5c50b0cfc06498532bd5af440c0070dda853e140295b7f2ce3dd6886c87d44363691af11b3bedd3a06e50f3a37c26b7c21b98b709b6b6ccb81d6169467c682fa78af1bbcb021bc36757e161f7a442ae04e19e93a25d64dc3e68ea8e96509c7b0990591311431a7d0edfd5e7451fa11a28411a51d872074be8873a9f64edb85011e31aa1f7e6332a1d6df32c94d78b22b6a2d298b0dde8403ee01943b63a04d548ebfc0c84d4aef21c6b04d9ecb34aee376c901134864fe4c9dc4f22961fc7333510c7fdc0f3d3fc9440d095559b25a733061a646b56835f10e3a3e50b844b9161bb421bb42ce9710d541f09d877637530da38385d33ced89b5ede341d51d6185252360f67683a780d0fb9dc7c2f4d7fb84fb43513067677f3b3c8b6d56eb1ef923f6b80e18d0c3a1ed966b74aac2bee52cd550494b8c4669f4c29143ac42440a9e8a9172b84a8dfc71aed4248d445e987bce24de82f00ca278fc9f6553976301db7b87c4c36568e913a17248090e299dd8524b7185572ce14e670022cb6f1e978125f564c8a5e6f02a1ac06fac94b26de8ee3eb2b116297edb8e5e3ca24db934163674d346707aba4b7748fbd65c9b71240e691294a17503a6df13f34697d550111990a0bb79a6affe53668d14ea2740003f7501beada1f846d5cbf746f1f583f84bb35d9615fd39991bc383e6a1e863040dcd008d8f32c511fee0a901c09c483249576a74d9e0ffc25cca80ca387152a5d5ebaf8fcaaa02ced6ec9935a82c05659f1737c639f45b0072f6044df234877c445b6f33e46a39a3ea6a38210d3743e8b95d7608ba99e3ba1ad07ee083c489edb596b0286115c257b5c4167264509c5224a485bad064227590d451005183d270c62822cbc51f4540a594a49831ea77386d86e76b1fc58fc9919c4b4beff4e9bbe27a27ac84f93af5465673111a675cf1f07f3b87fd40940c89729e11b3ba380587174f292535fbfc1474026b7279c61569f7c2affd67c7d4d501fa0041365614408a09f03a5830bbac97c305de744b19167b4d21a49da3a920c4cf861cebcc3e9b4cd86018c251ca5b1c357eb2f9348392840bab6774a00fe9258f11ab5cf30af3da3b175526e78ebc8bfa44a47b4adb7aacbeabca6f556f9acec931710c72ffe6acc27483d85a9f5d6161e6077cd6871b5fb68151f02c4eb20b0e74127cb493e04edf0609692372aa370ce16070702d111783ea72a9ad23cb74bf47e410404d7d3b115a7a4bfa8f1f676ba553e89023e85eb745c0ee509553966c2b7a79aeb329fbd9d04b13286b499cfec03667cf020dbfc101b150af09c6ea85ad5a2b483b530bc905e031358da52246c09c50755ded9521ccb8532107a1ebac3be787a56c94e54f69fe38ba7cbea1d4050a353b7e248969f56a784ef581043055c7115ebd7c02dd8ae99c2faee296172bf4a87a193ef6fa2a3c329179c0dec2995d7adca454ff03d736ddfd9add6990a3d01cc985998862c9a214810b0dd5d3653f0697c7cc3452ed6a70acc6fbb6c0eb40f4a269c09824523080a60fa483d347d067288e5e4d3b2bf8e6d5c9d9e83880bbd28d2c40b0df526c29791e416342cfb5ff076e77943d1166b2d109d48857f2a538f243966cc458b95162bd40eec25b5430acfe94c3c93c3867571d8811bfcf919a6a564e2693c3acaafb434f90a2792fce81955236701ae276b06b610ed065f5696dcab478ce31ca88cb66b9f393a7dd1b3df92c76c22c0963757a0bfa2a547548652775cdc401779d2b8e1c81f675b0993a60800f2ffdf1a02ecfc54e3e196599f8d31ea025e1483ac43fe3c64b515edaff81f95a19ef4fdf44e339857c335ae08173fb9a542fc1040de2ac2b12d93c5305c3f502309e8853404ae53a7520c9bea780b916ef6b566b611cd24aed5bdd93d5bd0f71d48a1fbeb96d44d7a9703676d36fb3a058129cd37644f2802b77b70ff7c3a533a6109a7408d0c4d7998035cb8db797b11eb3e8feb60189755dbb6d39e47e52c1f5e07d05c6fc01d4c5ff2c0f4efec1e3b3cdef3f98c90385147544b41443a4a774682bf66c757839af4badc48f8bce92a7df040897020d59c053f1e10fc9f74e82264bd871a39480b5d41f8dd8050a586b65cbfc5952e34de1d5d9434f67d741af99410e7f2cd3448a4715cdb0e121af9ed0ab8d382241ec09598f7d5ba3d10b7d3fa00add67d0ef9d1304f692b690f292ce272dbbf685be977d78d1ad1451164b97ed7024fb1a0c6ea681aaf5dbd4dbe7acb3706d564b303cb02a02cc2ff3ecbb108db0de4cfb055f90006d62f779d61e0b04d7b4b7eeeb39700763315d16194c68056f71d40075105e0590626fdc5ba6476fd63a920d3a3e5bb575653254067fdce8ee7826c6d6017f05b66ccb88d7011068fe678b12c7bbc1a8dbd0362a5ea60dacc069cbba92a3618561fa810bf2cec484b2b3f99bfe225055f91adf056c8f68c577bf29685586a409058426e2195ff24795b863f5581266414fad9371ba7c7cd796f0c63c792bb50523a23387d545183609dd60db500ca1ff51f109fbe30dc83780a738b387f3230e4edd2d89910ea4b491ab56aa906161f4a29d990050a3c989d73ae77a0c8d6c88e98d7b43d72d3667cfaaebef73b144a5b3fbd72baddeff230d3458ec715b0009864bb36332113ba416446726849cb896f8a43ada353fe7b7951c137740dc6c1497805c442c6b231e08007ecc4d543c5cf32f3a989127019bf16a9dc715822f1ebfd3dc83109b9b2a0777895d38a85e4c45e55ce33c24db64c4a85e4849fcc7ac41aeca9c9912f24cb7121d55c0d98d09436f2856b0c9e396613deb7768aca421df899cfd2071c71a7958b152909846f87e35134f7986a8a569c3abd0ec026333dbecca2141288807d0c3dbb002452abe78dfa45a00db991640b245e16eae8346e950d8a565b7c3994febf31aa06096afa5b761e2e139336d789210254af162cf6a5e5ef628aff8436929addef58b1960a764c2969540161f93dbb1192b8ba051e15db39fe461a49a9f0552996c253165d0604cc19750afa105079f396acdba62e0e78d0f337d4703641787c69ebf5d23b3227710521b7e965e9e310283482f76eb7421c080635e125ad8c3d2e7ca2b2ee223c7ff6fe0f16403182d012f8b6e02539c386075b4585be5b18d6ae1c5f9ebdffcb5eb4b41a69e850dd9c1b9f7f499dbb8374b6dd0d424974a4aeb174367eeff15c7507ece0cba76d7dda0ad2e51a1c66094fdf3594010d1fb82dff2c2e3acd1f782eb74e6a22c3b0e8f4a838f13beb61dd80480be2ab5385ddbb5feb4fba9fb2a6f08b81bf588542a850bd7aaa9452d5876dba06002663cd9ac09a59a2e7add16f244c2ee753354b4558113f190e98ea8f80fccef55c852078a4781f2ea73ea55a30c2fcebfd1bf245726b30448f07c77e20d80cc93301a6fecfc1e5fce39b56ef7db594d23c7f60320894f43500e595dcb4146885951e86b4aa3d5212840d0bb673ed9da4faa8bd93815534f44a7b7b2fa67989306925e9229bb40f7a70daec387a31c0691edf30f1457498875311a2015dcf18d2975ef6d10bedc43c914a22fcfb4ba52a906ce1d3bcb9c7f805ef32d941debc740611d64863b1185ecda7d58a5c01f3ef3897f9c14eee6a4f475c5240ba6d1e1ca086b00f09c8b3ea0e372c6b071c52befea8a04363d9289200a22abd3046e5d54c05adaf67fa3ee73b44502662646ca1cae6fde26344aacb1a07e3d80b2fbaa4f2d5f5afe30f615e3c146943d7a0e69f849a3925b6f598017cd4a519b3f145937b3faf97e7cec356f9ef9e4bcd9a6bc0140c7b95c4b4993d0e50970991542da9cd8b04f0da000dd7591f17c5ac18a10d6284ecb8f54b5586b8c5e22f0b1f1beed1011b40246de6ea47ebfd39dbe3308d564ab419b28075e46279ad138a1cb66b6fe81d122dddf795a89a782fc4c3c149d9a5fa3d611da15ff4b5213e7711a727908a31eb5c18e8e26575af30ce7ffc47d1dfe6ae6ce8800056c1663738c7952a1a2d80551be560d966c4cbc361e18891283ea2f339aabbce71e5a3863706297df71a31d7d20e078193cff371e5af0e2fc40b5394322af9d12b6901b4da950b270d996dfae75986e2d4dd50c1c2b235278f8d2419bd32e3126d94a7488b3ee23046f15c44c38f850412370a3b61b2a6836f0e3b0b4488219820b0bdcab1c756a1886c253fce78abf0332648672877084b4ed4c0f22ef55a6c2a036dc3b3f91181bd50f17370dba1ad21f032ce80c804851328dc54e341369475d6ddbafb9cb8d8cce6e76712810f43c2ddf1f7d26e423ba652b6bbcb345f1ae7703537f078f6af9d7630a31a339bbb0037ad6a84326974ef9a78ae4e967a056a1b9ec2fa54700d1848f3aff2b7f01cc2448db000da2139d54847b6d42e325ee51d40e481fad1fa25a3591400d5b46eef4eba50ac2e149143a34e5ac5c52c2c3fbf4224ed30bf7eacd18a59ae5790b9719b5cd2f2f8e8841ef4b222892313776249cc0ba7bfe2a29518ad0663032b062f739abf39fe451a4f839e9688108d4835030820156fe46dc8c1eaa386a32e5c11209c9ee809d45cbe98383f2a5442a6a0341ceba0076ae82d136ab981fd40c4ffe98bf769e13c51537ba8a4d8b6dc998b2630f4b0511f19ad5855cfbbda0a45e1158f53234e2601f773174df8000029de1f6dc4ae13a80a2ed6d36e9c0133e79fedcf387e183a7590caadc3f4f8585f8168fae20016b0c399d70a1d8c3c64b222b97431e2061fb407c6918d32678c425d4900d61022dd4ad7a12564f35145af50c1a5c3b7e27ec645b0ec331c1444da5809a72945ffd7a9cf7c4acb39097de5124c8b786572feb431d0e53e18c927305bf21662067447e868b2a2dbc62cb55d51a34dd7547f4885b26da535904cdd4b4f4a7609bd4ad50d8c8a541b0382941df30f1568edd00341b2d053a0eb660f341a5aeea6d1492822224b881456d2c32fe1d608b4962fd8f11842180891df65f1a66aa7c2aa39e92e113e684c28e6e99a04405042b8626f9ccc091cf3ea7f868cd9c2c9e4b0e2bf3a43ab194de284af674397159abc326f4ab56d86ec5e0e1b0c9da97b954b0c534d9fdac69fea75bd9d85217e4508678103bdb87e785553cb7ad969e55ce37e4d6f0d1295c8aa81ba44b428b4ca06c94cd0cb302e2137173fdd754830c1e00154a8759cae52886f4f65b7f2dfb11d1f79b8c81fbc6e6c221e3d588f844caa5d1001bfc03ac5ee09230776c72583b433afc49acb50e75c3c11a36c850886a95a2a81d4c661a74315df32d9f1b1c735cb97fb2a7d13156f2dc0159874e5f645bf4a319af64a82ef5c2aeec8b7a90507b0d865607c2c7f0ebcd29ec4a24225e7561717fa981edd5aa6ad442b6036c692aa1b0a2412c4ae9fb3f043d8584899f5e53a3ddcf30441ecbb0f3bea357f903e8108f35f8503288cd8c10ebdde1fdcd9355aab295025350d62f9dced7eadee73fc4627f71e10773bf4ee06597cee76f90e2068c7f7a9412565132e1c83e76599e47eaed625142216ce1e33957addedbf38347ca030b7ed9c8a0439608b567f18015791e2e236b28330fa9e5a1f16cb927a3def9b4377c2da9a75059fdf21c3581b7ad7059c9faeece0294e8eb5be97d99de4c99f771247475c0d9bc3c872b9c2fa8e88269d769eb8a7544b1a8200dafe6ad0139616b0054b9a7502b28c6eeabc653cad2d2be40b4f4d239ee7cf021b68a6a9d5676678824f1a544256733fddaf262c4c018f117c199a3d4edce3ece27f1c1915fab09348b9a5536495c70d1a040305708c1124797e564b63e008e7b8ab93c6dd373b29dff3031a6e59ceff2a21c5701eb5f8468ae648f4e6dd841b2354d25834065161cd63fc506b89d23e9470341460648e9e38b939e1debaa0afade2a278234f38639c73589d600d19f1e057179a3d8119550a5ff1ba535fa4cbdebdcbceb0fa3958d38adeab57cdeb41974037a9bef5e292894038264eb4d8993d4d1501e6ef9c68fb0f571f57b0925640925deae9a6317e3bc4d6cdd5a0833e52fb48baca16a9ba9b6c8ca469a0555763b54f04c87d4e41aa549258f30eefe5a52d2ba06657a8773b0842e094857b6d8911d6a0636280025e56356fade362b4bf4c875cc19be0c6644b447be0454dbf390eb966c03e10e9de3487b90d0825d327c12495e3c89ad09c9d591e55c91376fb14c2fde9f7461fb25450df1a65806b65f3caf4d5c81ebc6e664871fcf915b9578bb70ee6776acc62205888dce2baa4024941209e81b4b35f0eda1bdcbd9ab1d6db6140bda4c41776fe675d5c681da5852d50c246dda4ddf9fdd7c5fdfeec85ff6c883c78689c2977584406a1ddef977606c182d6c33561c39c071668a2515e5aa6f4aa1faa392aed95b82ab32b79a15e3b5a07551ab068455131b72493126470f26c30b852e4415e1d8b719b3803ecc336e4facbcc5d1908851f4f39b776bec8b6b9794d47e5965458858560eed5a0305e260240c0849d93a19787b0f8c795eb5ba32be573845256ae6d0b0a3336e42a1beac8bdde6d1b6e0b6207903d4b105f4af2ef89bd099ded870daea2f170e03bd5f6f4490e60bc222d4876e16d4c58aeea6e6c400dbb9e9f4b2b142f0fc9bdeaf4132ded38a4a8366e107cac7210945fa2df4b124be37ef76290e5b9758aa3bfe0091bb0448206323584c2f833e0edfbdc0c33075fc9647a3404ca490bfab94302a0679a1a42fe9fec6af0cd98038b09ffbecd2832b579b2294f6ae5b96328fdc0a0b9b3a32cba04fa8bae3389c3951173bdc17caaefe526aa386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f24237d8e795ebf52368218bff3e9d5b040ecd2caef4ab1e7127e53bfa2b3b4fb74829f9993ac703192aedef79dd9ad24c2c976638b4575afbce22ecacc273ba43379ed55ceeb51838b0adb80585bd1b5f2707ee16b67a7232adf7163415b24b9ff9dc94b7197fdc89e2a90d2b9eccde45e965edd064dc0d1eadabe11b8ec3aad2742b5d3323ebf913a92817749090c20758f98aef2544d4c8b48874e8936d7ee492d5585675c214deeb74fd67c4d170ac5e0aeefa607c6e37abd4f8238e776fde3921afab75cbd8f392d3e88da057903ce2e140797f4a85737bd89455e6aa27c7535687b78cd0ea59848e006c8de9c9c0cbc7a9f5e977be850adc710503ce4ba7c7bd0b042297f518abec6c8ef451c33e030251f506cbc3744228b6bb4dab86877d9e6019a0ea9f39ed37557b3b5527c171da5f013e0d3c480a038cff2c087d6e5d41b17e6c8f90c334b5e2b9ccbe9d4efd99fba1f907d00a49b71b5a08aedb644fed24bcf04e71be67b03cd20d53ccef8f854f5e9f7f28c1e98a8a53496646713bebe15a93f1ea336e6e8a4e68de5dab0fe880bf983eec75d1c5027357f6669e098411e0bc3ea2293138f5b34425f78b6508b94d4c0cc32ee9afaa409a26e5f2a1fddcd6d5ff42a89755a58b08f243957a2e208e24b055f51992ab447bc06876eba169c545fa71b88a0fc15d1e0be9d334a1dd0c86f44bd149b42c07608a9a30d0b7e13574f8d862f2ac72b2ed38904d7cab194fdb9e4dcb615f5610b24e202a36866baccac01fadb575df11dd43e00a3b92fcdd8c7702ea49d951e7dad2a56c075730b4af1ceda2bcb2310256f28312579fad40ff471336ea6a44143edfcffc297258d48bd2ea47efab8f0dc00f1e6dba1a55009ed627b72a5c571f483c46e4861f0a95c6abbfa636a722bb83605c244a4b1ba3d0ebe776f2f5b4915fb3b32c04a66e7dc86f14c77af0119307aee23df17928b3fc50fb +MD = 57e034b83535af1a5a0c7c8e4dfc5f16c927a6d18ae0b00b8ee1d1e8 + +Len = 84672 +Msg = da063b9ede96f865d3198c91d2d0849062bb3080f70e4944b8dfd7d8852152e139d508892c7fbe89fdd79a878ec241a34f803c4dc027a0593150ee55cc10381ad62a85a13282771827d52b3563a861cb3f7edd9b444e0d6cee34eb5eb167257b3a6b7b8ff7886939d97a0743596a2d2fb91dda128c6cd7a678f4979a3b0e622cec02b3fa8377de159c2ef55878f0edf845c5fd5b9f67472e56f6bab272ed37567455f28bdf391cd4f759bf1cc922e94d6bde0c1e8529a52d10a41c4d5eedeb215bce03ea12b46b9d73632b3953e96857b4d0d002479839ca2f65841408f4c8b428d3adbe24d2159896b502541e2bb43da70411b0ec9e4a2e3aa0bcae77eb143863ceb7af1e7961efebb50b1833d21328cde097d07c222180b9bf8ac5b3bb18d49526ea67079396c7f7cc102a99c4ce40accd2909000b07e93529b7fec54a1cb145430e8be707fd4b4462d73558eb2cacce3491037e43429135460b03b48268f6fb8debc6c7bddea059e02adf792d7795bb7b956701b11a9f417e4d7c884a43cc3f6c48bdae9d81f1beaccfd00374f522f90cfedd8e3dd93be13947104a89f75b9a48ee1ba48f2d64fc308eb1fea7f07c124d930c2fcfc58f9edfbf680129caca9389a686b17b2b219ad3312a73aeaeca8ea81e9deb4f28c0ffd87e2cb5110542b39736a6de49c45120fc7ee269717835f3846537cba548f98d8c4c036e29efea80da662532e13d1c16153f82e8d795e5cb483283d5ba6e60ce64f0953559d2eb84bb00a8b62be1a905853ab1f8ca4f019d5e4b291374e11d4cc6348b1189f46c47a0cada7010f72175b43818a232ecb2f22d78d08dbceb598f1bde8d0ba19f9650f28e606a76c6abec0a005fedf5b51f511d83204a7bd23c1dccb7422a891991271a12e5ac479770f4ef5c2de2fcf271429632c35297dfed803f8753762aaa84547e1f0f3c69b29814cb122a872febcf4d004f5eadfa5a9540de1667f76a9c975f887c8624c65f4ad506ebffe676e762fbc3a09c648a8b5be3102b27b63235f4d19ff3f36c44e6aebd08af5407ba3051d347ee227d31b968f33c903bba6bbfc0322a4afe1acd8eed563926d0f0e10cc55ef5009b03d52ee3f8cc0b4a0bfb802608934a4e3848a12f2802171cabd5c4e62233a0adfb6030f5782765fcb2ccc14cdd41bb8ccd9c659bb9c94ce0407c9fdba96a94006fb908c6fdb566fbb6c4c95a389c655fe2b3235a94f78bc3b5c0e7cd7b03a53d66c8fe7d0eded5ec1fcde279a20c0f707e7422933ef59d6d1488e2e31e649b0ce9755943340a7b7af6ce52d1a2f98367a9c7ac6f402a4a8765bbda461cf73e14ffa8633ff5a1214b42ae6289c0cb87eb6b94071623fd59b9ae43151dfd2356feb049629adc0b8d070b575ac984eae4a4cdc37caf6fd894aaf907dc91474faa7104409f7b6eb0885759b082bb77bf623bd63d5363aa22c1034def76ca84e503160475620b35f9d9e335a1218420b0c8588fe8d4595e42a96bb3e32def3b4c2995b7d1f371b84c4a52a612814f0726e0a2fead47ba12a2148b31cb4729f5ece495263a99d67f12a14cb5ebe842b58a70c22d75f3ad4fa9ca0bd28f0d9f392dfcbe57999d6213b4a77b69149f85b142415f2426215b9cbf92929b18c77a8f7738ba54d7473cfb982484ca76ee4183b81b22eaa919eb814c35c8964cbde17f32612e25dadf8dbf28e012e0f71c9eb452c5b386e7238686b87c56ca1436fd92c63fc5d08cad7ce8cba2cbb48073c3cb7a09b903c78754346c2ce43f597cf54f9b9a255fd4f932fde833574dfa39d95097addd66308c7c12ce1019fe01d5f23f193af6d9990ad786e95c5fb34bb707cc107ac6b90c7b27a947ef9e0ef58a1ce8a9e7e147c529920b35e38bef5d3576c64f381c04429c7c7f40901a771ee29ad4b1688db03f9e8b153490820816fb4dc6bbaf894dba37a41e1fbc36426327958b9b86a41cefb1eb2b4e2ded066050b554bca6b39e5c94c60e4d3b9a76ab9f3493cd09cb94bdaadad6eb8073f2227ed6f9bae742fe10fb0bd533d5ed1be094a076b1b9ac1e91d07f9d7353bdd344cbd73c1d38df76beb39bfd3852d83ae94c00bcad5defc5536c03084e6c72b1ad80e1a64e62320c4e059d0ec37902d9ae107deb2bbf3c8eebc68d9fe4933b9447e41bbeb32de2caa839398e3e13140317273f8d92a53983412646eb9e92c085f941ae0cb56098b8b497990710e8b5bd0cdb6d294ad891ab3ed45673e230a88babddc118bcc5fbdd5b66e200a1c08e1175723048bb20ea0ec817e4bf19349caf45027d6b3122b44183f03f02596346063a35af714d44edb5c8391858ac6743f8b0f60a8c7a406aec157bd694a09986a4436c132c680e41a727801bc50191466ed2018f0301e7c6e7fa50cf3ede29f6f4785f830174448eeccb35158e827a4c19946d34592dde6f3918b753887bdc3dfdc2552879d9af7e8d9e9f2d3c96e9fe02de80231565ef0eea59f78afbdf7a04c80798291bff17b79187088c56a4a70430998481bf13e04b03a45a9b1e72cbf25b316eaf704e44e1006db65a64167d05ababbf79df9e7acd8ae026ae799d96b0c02620e2ff2ffda5e33af2beef5330a97cfe7a30fe6e853d8af7a4ed95c6a5e5ffd0f5e950080bab41d504e07ec38b99aa79fcd1a3ebc94208d01c7ef957be3a1e1537edeb42379a222634e999ce557d3d038f82577d0e850e53d6892db6aa5727df2c155946471a8e15ca01c8dc55fc3e86796ba18c1baea3681937ba4d31e321151e8a217b03d58e8a0d4f945554bfb4e903b60980b964d0f72faf27821a87159f5373cb483570296d46fc84a11a6ea714758817c1b04f9ce85e1afcbf2fea0a6514f9df17a39668a6be2f21286fb01fee170c54b7c8180f23efa0c26b36b5084ea844e64f16ed511dba11f1531b2d2561306747cac86731912a6800edf88f1844597b6857561defbb85ca7e88e58ec0550ac479637ae30b18569b3eaf3d21402f6dc7eb992bcf476666815030977bf9b0eb4970e8a435a4a1bc600518cc128af52d4ff97c5dab6307a45fedb4f79bd75b1c1eb6c30f050415a5e0db906f0bfe7fe13c1968b3584a87888bdf7ace97623ee56cd35a83fa345a57434b7fecb4a3b5d1b5d4c5f77f04cc5a2daeece316a2418d5b4d17c8bc3b5a1bb0da4d0cb4817f44e3b0fcefc79ac0626fe07100c1a04d5e12ae61a5f421fb384f126397b4a0c684ed377364d9134ae777ff70eb4063489eba7d9fe34aef27f8497a27555b0970d7fcf1931d5c7751336d93536d3af31c967a433b4a65acc5a1c69a020e52c367863865c4e4f9cebf8c7a22814e5859af8e7b879ca2ee60bd7cedfb5d8940d691d8c81b6f7f58217b3bc6366256419cebcee4d12ab38c13f7d1e7249e8fce4bd817d59bfab720776d8778565e4d9dc4b69ddeaa4d45e8ce5ae8dc9d2fe8a4292389866ecf54f9d97dbab80bddfa16dafa4591986d1fa998d008f3ef765c69785978041b541e8d4e931bb0db472652e49e0c2425f20a787a417a54a1ddb3c540642a762af3dd81de97f185510499f9ed8a3bc0d944cefd7b9387283bcab4628a2be8052313588091718562f27c1bb4faa6198c3bcb33dfa3af759746a728e55d96f9d98f1b583070091f6d4818742b15daf0b1d3f001c7fa7d8cc849dbd7f9c28da719f675a539824706ceda3e6b05450e06562919ff5c89e516e4ccce8944c0f838eede880744d01484ae3057caea932aa5a4c6b0f64757d0591257e8066e5fbff57fd1bc46f96056df35d3cc5784051613c3311bae2f6c249e7b73911520a7cb26f5567929ff3cf7608a4a03db78a6ba98daf2c4efbdd1cb2d46a7318002a1021377f62779ff6cdd4fd61d661d717bfe7e11921181998dab4e9c7c300dbb544d032e372efea0f6f2f440d55ce7158ecb0b91986c2b6aa8ae49a579f685f4c9954041a4f7808be41c96f1f94cff0ce60789828c3cb6d82bbb658826ebaf5406c010d9c2e8c7673e457f1011a02eff8b9c3e0cf7e8eb8d1db9ec6e0b78558415b7bc1e1b6a9add0a54f5c6a5bf3c96867073555fda8f2e8692247eb1033d2bfe638b3736e6c3955231413b3e11f178de6d6f884f796d666f2d56e19ff630f2c7abc74d9bc208361dc4ab9663fe154e9b7a7ccb4c2d4cdadf72c9be5db7f6817a76b687d368326974f57a009dee6fbfc67ee046e05ef335de49c73e74b0577f1eaea20e653e09d55eacf8a07349c8746563e42392742b1d749a96896b471b94bc3ad109d9ae5423e3d16b9f6d77e8148310d087ead7bc3aaa4d7fc6cae609695b028ca1b81eddfa0b4c1c2413e09748256dec9c71f06e36874aca1e1af4eba603ee1afe88f86a03df055358eeed9db855627f8aae2509b61379bfb8e1d987f3bce6c547d4a3c4e566e458628504c10b1ad7d3792adf546557c3a6bdaafca5f68fd2d3a52187b349a8d2726b608fccea7db42e906b8718e85a0ec654fac70f5a839a8d3ff90cfed7aeb5ea9b08f487fc84e1d9f7fb831dea254468a65ba18cc5a1263b3ee39a6f367f770819049db7ea39461cd7623d2b11be4bd4da54f2e3e0f05e25c96899cc0f23fe140edcf0275ba4cc3e58261b0a052f0d52196e23dd52782b92090e71de09a33456a119579ef8cc5989a1d187816f80702a8b2f9a42c34173cc25608a6dcd06ff16fb4239e369b9d643dbebe85af7b75ea35721c0dadd54201946e34d410254499b43dffdbf55732cb52dfaa65b44debe06a6ccfd6c45b818c2942120215196f92ea2790dfa64034127c088294dfffc779b9fb7bac2a675450e36a16cd662d3f7174097d05c3f70ffe1bb1cd8f7cf1a73aa6b6a5da2a6948d4755eb9a29dc132b9e44c1aead8ec24d2a473f1d235d3f997b316d50d5ed1cdab3188810df685e7d0bd77f0fb4f801124c8c775f975173d1561a49f9232415139ca8ff38c3adbdd5a5205a5b3a2636388db14f071c52be03824e85c253f38720482cd8799c54371bb548d9fa07c069a636df4c7b7a08291748f4a9122f017be900cd9c3a3104d53783768555e36da0448e3df824791cbbf6f0343d507df7f8550bb3d2e54b669e1157d3e4d296d5e5fadff4da6ae1367d86c237cae6067c074eb30502e1b2219a91798780dae7a13fb06f2b7ab679fd75b00525d83b9239afbc3eecb4962eded1a030b9e1d69f79b74e880b616e0a1aad5d0326edb7e9d6f885f58f716c87454c24c6918d2c860453bc70bc16fc5c342d73026093c2d2faea922017c0cb84fd120681380e4664eb1de26f6521c637f4fbdc4bfe51c4164d8ecb07ab2a1befaf2b2faad6ec8a01d51da9cf2e0b366302217e2626af257d79eb18f17436c48e02a0868892ad62256b5af7d6405bb2a705a743da01364dcf23096228996c2e2a9f78f26595db359755dcb6cec399a4cda69311b1b66da5d4f5f18ff24354c18a2dbb5d8707fd6a203aabccfdde4e739b8cefd2f16ddd935497aa89989a77e6785571ae370f9c6b88c3d023acba0187da5fc36de3500c8016b13c3661c55c03babfa3cdbdd53f9f979752a1227f3a4851c915cacf8484d5e3eab08097ed8b82191259a161826e6e145f3930a954811eca70efd1fd34cdf883ea0d4e80398dc95df799146b3eb240c9c28db787615f710bfc586ab4866d53be5a5b8766d2e9424e156d0d2230917d7c69571d05cf5ba9de16597d3ea2ee4c5ce2a3158fdf2753b315dc75d081958df6fb9f4c6bc6fe2e0966f8f2e1b1d84d2429ecdf4489d066569eee32bb5846d9ff216b2b016dce6854933fb1e6dbb1bddfd83ecdccf86be2fd59ac2d2bde2bc75f83c5a20eed55c0894636a2954703045596a1c77153802f71ed1d4e6a3bccc0ddc8b499dc6e1b9c6e26e4ae351e558a4e0c1eb579c397b57a034a7ebf96b12d429841f8b117a765cddc51bb108730b692e2bc7f2d6f39dbdf4339a371176374569d72a7d61081846c0f85b26cab1bf2e8bf840ed580ed0b6a54f4a6c9e869ffe17c518f9382315f1368897c92b29ea61a4b7c48b91d3cade1df83700f2e4b34abe0e6962f953f608c8e64ffcac34138ee2fae16206fad270d8bece88b14927d7b6f38a5f47034ee9e2b1e255b068d112d132261549dc8e2b60139f584bfc5411bd14fa5283c987010e4c0d58fa409999f9edf0f9bd01546a4e97281445a6ce751af337c1420f150ab6350f7acc53e380b79ed093e301dbc9eea9d73110b0fd9e6b1ed140045c9f53750d972fb90b2573a4c543884e467aa6eacc4b334fa377ea27e835334d2a7c77c526030c42eef5cf5be1c83b7157b79dad8ee28f5516b3e4cbf0023f7f0142e4112ef184fc77db102774ed11deae292ab1624bc9b353481ae1b696b93c7979250388d12e382e2bc2920f20c008c235ba80d6d5670d019af8e3bc8134e7eb85b6f6b4306c987a8e734610e1ba622c63e9b66d1deba4aa230b5c62402713efff1675318dc4aff5699e9e1ace658d554a24ac8583dc2cb576deb658622432ef5bdff99147cac1275391249d3555dcd54ef7fdc0b59d07ac1ccf7c0f55a0e77212501e53fcf37e78c3175408c50ff314e8c004af11b2b7f67b6a37e799218400b9233dea2bb35a723e8db6fdebf8429cae395b9126b1d03d194b5481ab2abb23c6d5f2d4429ec79c3c60b7dd18a35df515b08d17732ec2e88ccf6c5e1a30df53b1c4b7a2d02a586f233cf136d995a786a5c203b2756e12713c82e9ed54b86309009c06c662ca8f53b97edd9bbd43b1f9e4ea49f2ac14417faee257aff93608bc49a85abf6913def235a2e76c2241ffa749a5da489595d25c6a8a2026563e12f5e3964e0e518ac9c34e45a938a6f503174a613f34b08737afe5d6fde11a45344e64d23b33ca83c23f59e39d71c9f14ed26db8d3478b5d03d2a7452b50b3cfcf1e53e8bcb022b37adeeee92eb7f9ab45613a1950e1948ba97d357142f5915255fe27364d13f88e361a83d2f76bb4a7793c261f12935a87ab0806d7df5051615b66556766cfba78968aaf4d621d995a7cdbb816a2ed4bf58afb91e54af1726161df64e88453f7070e97c795094e0658a2b876bc8c5fe749bbc06d26305952f6ebc1ec3640312cbe20da7366576d8a16ad6ad85d395bcaf8d01f0f1709d891866bc641dd04f7da025fcb291dc70ca318df5b5395347155874a3fee34422fac9464551c595d187d782dd25f47f29bdfd3cb128ee0f82125899cdb911a73af129567e6c217b30385841d889c6144ab9ecbe328d0bd0efba9544a5a7e1608d7522de903d9a4915980baa17656f647ac6e85d9f6cfa5e3615f8bd5352bc39c48e9b25a34c99c927b0d805bf41573762edd95f204e2281fe2b694b00420bf887447d74dd2284c10f87a899fba5e655a935a50ddfb9eb01ef05d137d4fd34667da0ae136946c4fa742561aff11a8485f8a735af0138bda5b2aa16caf60da14b4fa9174a6d40c23cff93ed8fc9279990f749718db1500036ef2222498ffab86fa568a0611299e54e58d83281ac558d3f4d2541ee158b1c7d4d76dbffc64ae39925e3329f7fd894fa26fc1acdc22bc858a3438e1c55707a3f75ad2b33c48789937a24b34ddd85390611088cba3231b2a3a0a93e5d9a8780470fcff92cb03811234a330db353283b3bc3036f9125efb3eaed613bfa0c59975cc2e52c33b3e6e5123e1626190a4a0261e1f5ad9bc2ee34f331736b3bd26d274536f5ae90f5186c27fdd7e8c72972f64016e72d1d32b59b8715e5b867154b99cb140a668b9d560e2c307e3904d9297f9f07dfd7629ccc526e41c109c8fc7c53b604293c6cd42933e77e11031a42f605485fe893b129bcbf705c0f45a4b087bfcead5c187ac1174322909a2d4f8b61f001c4074951000c4c550ed5564458f444dab8aae2fe8daaa6a30d209fecddf2a893df46e18b4b4460e4011d23f01d4c49a4cc1c82405f6ac5339eac41385f3295c657ac43a72fed62e6daee94ef271638f292b8e18860de0699eb45fb7d3aa81f61d44158edd68ebc244451918b9dda788db288e51eb78ed29f9bf3b50195ddaf2e000e06a468afd563e54c020aa721713dd39477498e02920b56be570e9957abf3801a36160cd8156e65eacfb56f718bc99de280530ac3aca6c6afc9ea6da07d79ff6ed189eb92e40c6d30e1d41a552efbba7de68255588a3891cdf3dd3b408b882310bd462d64aa04a5281eafd352c299cf6a931f974992895f21bd3128bd3fe8940ae495f9d7cf1fb4d96f8dc0f2af6c87b26d71f71f2e60d9b1102c5ea10060fb642cbd7772bb25434bbcb809bc5d3c875e5ec29e61c586a687d218057335b900247f08d1bdd7def987ee76d73835d17a764d58b497bec46fabed3b44bc48bb4a54c4bc2c4089117f94eb1052ef9df20600217d604983e0dc2347de4403a02e82fbe322b3843a887c7a9dcea168fe69d306c476ca007ba294f9ca482dd0a5da4f22c3828b1053099942ebf7ed2bc1fc8a8f1d8e1b430ed440355dc326acbf875ad04e24df6c3a5d7ef3bcd55dc14c74d3a4140c7b9ba43c87dde795571d56fc4b0d6b4fd521594cd295faae1ab10998554c9137118fa5a412fb5207e9add202c9e1024d95b6179d3d318ccb4b835e32b98f7c5906a779d28996856104e49b617c55fc6448b3db1a69cd5a7419c0b508a675bdb8816b898e92b768ebcf4919e10d703fdd16a10f89fb744cf0acef75e4c5073d9cab643ba2d865e3ed7364b549243bb40026061ab39e2b4a892b98068cbe4ce24fac19f8d401a8deae18bdd56368bc4314a16d6460f8fc3c85be44d0c8384c9518ab1229eeb6884177e4dde3f582fdd563ae5b5557b1ee0a2d8f793b62dc103f3ed0d834b69e0ef490024b45c819065033765a556272099cc9c3c2af20519fc60a45f283f56241df41988f65a4d6dd9ecd21f1cc47e356daa185a494cc3f0214c42fe87c72a92aebd2cf32a951618ca579d6a922cfabdcadfcfba9522c503f0fb4b94389f71ccffe8acebb7b96611b4f7ebd08bfc272a4fb244d5851092a60a121088a114a633a01b2beb2423c7f908226ff980be8e2b4ae5fa439f92a756cb15547457c342573dd92c69f650c62f528b7c4e16f09a116acf628d5b359da6c26969cfd317d0a8078720f0b4ecbb251287a336a51ec57d2df3100b3e55c0067ea2d2f389aedbc6bbc9ac07e644419ad6ab775bb1a5aadee2d57555cf9fc9165e46229811e4ce03c9051027e0f3e3d10d6b6b15c331b4a7480b24e565501326ffc7cb25d256121f9dbe1fd95b780c68254be10d602f7d86bbf88142b63338d8b1ac5f15617f524ac8790d84ac4d35d0ccc18baaff1b6fcdcd222ce62895a4ac426830ff35dd0945c7ba7bc259effaab4260dd672671f60cea0c8a584313d111f08ff34bc5dba17129f6dd0afaecc54844ae38da4ccfbac4913c1c118c2a588a6a981863a807b55d5db2c3d6f5a02048420e206cf87128856125749a6a45a5a60ef5030f42edaf8ad172a2aee0b6861bb91546a7a022c9afb86d065b73e242d55c3b65873d0a1a5a23bb1c0b22ac71431837fe02ea4118d4255753fd2facbaa8e0ef9273dcc9606bd2f0726451de7c4eedfad9172d5880733688efc7f3f167812b662c4dc8c82c305db74852f4e901afb8e24a4cefd5bb0d5a763c74676ce3fe9a53957d8762c8483284205f6238abd5f772c42ca84503230fa3bc6b005bba91cc1c60ab7f45ef03dfcb7cd24069c5722810f93efd330324c4a60214455a55cb2f45003036ddeaf3d411d06405e908d4d9613bec450c25b327d18018ace5400b324216a4349756a8bddbad7d3932c09e69d82ecd264d052e97dac8e0bd8903e283b7f6800efebc92dbad769640d3973f87da2449f7720c2793064ef4edc20be1820b325c1c908732dbebbe47b337e728820bcefb5f27c51eb80874ddc40cd278bbb05c80e3e941192d3b06fa16fc5afa06d17149c3baaa746545fcf3b6e5f2189f4bc796fb6564a65e0fc325c28d4d2474cfddcdabc726d9293329ef5cc9e561bb322626d9917c7adcce85637c7748286a5b46ff9dc9e4bd72749e192c4516b48e07da88f509f2f7281bc03b7b26d67646085f48102f4e81ef7ecc198bd420b196316765e41b62bbde6c0606652872ae966b893f8983eed6eeb6266911f37dc942435f261d5246395e33c96cb0f8a731d9d9576e8054201d0ebf5f70451f986c30c22442074b07e026077cc6e523de909ee64c2d8b1c9cd4bdfeb9c7abd50b2ae012495238724250c45ba2bd8816935b4416ca251049af9e7af8d7f7aca03085cec840df37446ffbc7a4ddb9006d6ff267ff63cda667f2cac4423c58ce0dc2fd5b68bd317a5dfb519e878031e474cee688e4ab8fb3f3e0ea384f5993867a1d021457e101780b6ee2b7583cc0bae93aa8158b03f3cf7a048d3584a2107c71b924983a8eb7c6f9553fb0ab55ddea172dc79c470f926f66d8245a86c858069121e5457508dccd9428b909057df1f8ab32c59b9d10d40a46d63ff5da1ee2cb34e1b4aa8bd1d9226863ff3edb17957d01c4128211ca3126a67940b5d3284910e9632336038c453bd29172a0b0b540ddb76c4eee39ae525ae25bd7192676e39e3b30b186609aa9908f3ba3fd0ad97c913885cb3e790f900d96d8537e387d5ac986e4d00a278f6eb6eacd13926de6b13e01cb2801549072c5408946737dce070978da0f4fccdd1d2571b0321f4e8f874aaf86d5c550c382f86be930878acb80f46d8aefb5c4f62d52b09f9fe22116573d9e536508f20b393d6562a238d4084110f191c1daa47d27c533e5bd897a2db99d5abb563abcea1dfae9a00bf5ee06dfc59169562cefd484f3582d0b83de2816c0612919d915e2a9c7550bee4d3d39b5a8b98bfd3b0b9edd73a9d00a5fb1b8076d5e273062918755192410b9ad46335b20f67427739c3e89bca5694a7b993ff3fa8e202a75c43ab866f3590ea49d6638d4c4bc7574f6262234e7634c65f94274de8dbe7871029f3c473f4f5db1a754f72aa0cf679dbe083f82cc6870bd6641f2afe96c9ae2e1076910645e1762f881ee9917176e7c68372a1ce0b367d044b105e50d851259f415c7890f1fcc27057fb7a6944f0a9f69458a69a10e824d293226f486c27f34904ccfe79c1efc7c6290cae9a4b0bc5555a5c90fa9c460928827ce74d19f22016a1eead2a7a628d1748790c8c4f7045ca1fa7e65576f833ef62474ec6a65ab5ed5feb0c09e7fc1d4dfa6b1da817c6303c2960301367a5aa0d79aa2a1ddc09b9b587eba37fcf667e4e880a67546db68f95c2b0f79b37f5776c10ce05b983a434586115fbf5f948b8043a7d74f917e869bc30bfc157ae92a1f26edb660263d62fbd35929bd12e48d45557edcc00de03c699bbb419ae93213089ddf8d6604344b0cc4b8a0b7c3611d92b2981f5cf8ab0af14adb88408b04d2d18a34ddc3bec99c26dea24d45fd949cf6df66279d0e3962a154cf28ccdcbbb9f87090300fb277b6a885c887de1df99be0307b7e06ab05e4284e28bb866ad168ebe5742ca08ba93b205e7df8e690fa8afd4a4a9b004bbaffc49b5aa90391e0403a4d531c3cb6d88a1ccd4519061321fa9ca14607308ca32624c0d789dafe62d0423cbf972aa0a023fc66b050a3010a5b5cca103b0dda68e7b76341d6631cc3b9c2280c15f0e57ab95d9f324843e71e3dac391baf0eb176c4fad71c0742599d3d08a3db213601e28aaeeb6d586f31d8020952dafba9ae574e7da0b894df4159faa414af41506252487eefa4199b7db258f2bbd079652d74d4ae64ba17b0708473130efaeed6a354532bf088f44f2757a306d89ed0c7bb6a080b7793086c53a736d3f740924f21533b54b28e8100cb1260a43d887a57d4a149237dd5df49573ca6757202c41088f971878a174846d58d22596f4fde8c05b52874cbe514fe17af4265e3c3fcc1369196130bd5a287d32258a4c23785eadb10167e066341e10189ab23e106c4e7b6c609a5ac2c384a506c8404fae208daa13ca3bda1b2dea8a156414dde4d94ea76015cadef9d6214b9e624f85dd1cff204b550a2226643ab639f9532500ae54010ddffaa4aabc86d9c09cc0d8f7953c781f49dca0cf0296fe4b0277fcab14e8f03a6731931d9c3bb5351e9a2f46b2ca18584fb93c5d2f86c91526894c2f3393dcb1557795999fc949c48fe571109c336abe0eaade1a1293805d0e90fcd232dc2d3850d49168edb7fb3798aa889e7affd4182fb66e4cd44489ec6194f4dd394c4c98005170d0ad8d3555e0f05b3875b4c03059e6d43c9c224d8ac89e1c9872699f990ef5181a08d45ee510bfd225b5dc95cc3541f83293b434feebb45c4a03be8f0222c9728d2513ddb0cf1fd5af61febbb56acfc275e182a71271e19c3c14d0859de3d366732dd21c7ec6194c1ca1a39ab3a1981b4fad140c8c032ac4b7ce29e730fa1ddd12479982169cb41fb59f529a8d82a5e9061ff3cc354899bc0158501e840eafbdb49cf17742faf937c28093230db4fd16e361a650d5e9356c62dbcd9361c88ff09f536163c888ee7a8b6fee9df9e0a8882e98b5ff348d06bc247f29ad8ed0c75c1b9572af71ed9dd15792ec701aadaf292fefa94019dd15958e6bebd3d5cd5feb728aaac105d20e247011140438c419df2e8c087d4e8069dde7c89b6ffc685d84ea5994024cde485c1c15efc11bccee9472975d1d991f0a7e78bdc1e8cc48cb0ecd2bb5da0eba535fa4c603108a6e362f44392d88c362015e8973e6a60d15b073612797b2120d3717504bdb574e52fa98ec99022594f05567611291118779159aef76c1f02180fc6b67cdfcff2f1f42b7b2e1635ed3720e7f4ac14b91011a016bbe3fbbfe03bbab423373f071f57e1474dd36d99a4a8f35908aa89b8e45a07cce18ab0e4280654c86fa663e1468167ab7b7c2eb42bff0d1816af0097019b48fab43e241265f26e51e05cd6e4f50907b6886ad21bcfb3dea3a32c11d9f46fe40ea880bdc106aa880f29cd1088c74931f6f931f0371c61d89a32a426083942599732f4e676a679024ea069a95329dc86fb4263f1ac9e738b4a49a9c5984cad2a22e80d46b9b1f89daee8d4f9da993d6721f8735ed2d28377625c9f6910bb2ac6204c3c5700b5a39a9e67718a6581e673199fd2a04034fc2d40e00798e7e125ce1db3f49fc22e04899ba0d1e3aa90620b208d146e8b42580d847874dda47b389279d3d869948785fb2529789e00312abff564cb020a9721a89b8a699fdcc5ddc3d3005a7cee5ec26fd965d8121ce0cb02069b3913449fe37ef4aa5857d77d7fc2a7edfd223610244816fa62d8373bad61b2b5110adfb908013e3cb3be4afeb93f66d13302124836246c3bcb59058e4c6fa826d561229f29dfc6c61e0b9db5f46aae7e8e84f963627557ce542d0e65428c5584e8aeb3aea35b2ceaf9f8565fcbf4cd3a7223620e53cb5806afcca85d1a382943dd5c19641f03eeffd9ecfb48aa6e71899085c2856486eb9930a069e22df3b1e825f1aa5bf78a7b993051f30d1a280a003bf4b1852f4890da7940c971085f7de654f81ce2b72f513b8fdfd41985c215230728b56a1e80d66f0c465da633dbfbc2ecd7b7c4e8931e4b6aef24fa97cd1166747a24c0bcb02abb4c098cde3ae9aa024039214f1636216d33f85c2caa999d4ef661a60584571c43cb02dda5781907290174dffdaa8909058d83f02c48b7f7411f87bfc4f006198d0bdac68895da91aba3134a5d201c33a8da3a7775fcb8edf15254b87baa1da11b70f9ede3febee80ea7ad06ea01604fcb9c5458a6211cbfb431414695fd3e4163bcd8ba642d3668c6819a8c30e8e5abe2569a1a1970440b1e2ee5d09063c8890a21ff9275abc19277b37450ae211ce681ab54426c44df4ea3cdaafd17984cd65352e72c94e4e10376dfc2dade54967e2ded1b57fb294ef8c970191287f54bc7e3c227df4e83252a5848fea12dfdb2d14b9e67c1629803a803c8b8b76df545bc3ff23a310ee10e75a091904a3987228e7f51c2251f1b9dcaf739f2524622bb41cc5576a85298fd83d43c101c6d7b46141d99a2e9ad1e8dd008465e898d081cf72d8e95dbc61582c357cb06be56649df0cac89285892b5465ab6065b3bf100b2ab7eff011b5e13eb2cfa0dc9670bdaaa2eb71098f2fcc71ea752aa07758c4e67b100c2e00be7671e090701a4b48f0fcb91425807d2d7c76dcea07872af6b13f66aa65981f5c6fcccb4e9b48334b98f491b9489fd5feb5c3bb7e899264f54f865c0b7ec6c3fc17bfd14e84dee4f53032cb6f7ca0001002f914a7235abbf10a4be9a7da52a53a18cb9134ef56d6d23127d49b1439a20dde7766f8573876567c109df3eaa42972dd6099861d389f6f36543bb0b1d52244b2df30e6b7b44ab20f44c7943233c752f02f48c6b10c95289a386f64d80b07612a90f0f6a7669f805e7914fd439a1546db783d5b2d3b6e9ad754ee1bf933d7cfa02d25acb8c7fb3dc42df493813f79bb19ebd5c7f45d6232983a464a97f809fcbe144d7d6e40d466eac3f4fb9dbc9b4c15faa09198db469c4748f67526b02474ced6e6fd2a79b1883ceb7499db69c0665a152c5cad5d52145f118d2038049dd46cf570809fcb291e350521f2dcefaf9670cbe76d842c3b575a1468d04e6dfc7812e078bc10cd91955d915bab14b6af58e49f5058cfe058b1c2d21819dc44c6fc5b387e143fe9818a2110a0071557562a100ff5b2e31230d023cb1941642163bda06def0d7fb77f692a238dab412a1a869d8e55e0602a5a1ee77ffafb68ac79587ce14a2c42bff1bed31a730c4ad792fae7aaef85b9a14b1a98512bbc6c1e6e495b332de54b5b7f07b6960ebe74c8260378e62107721f8a4fc10f29e8e12fc90cd5f3f8bcdc227db04ef6af1661846a1cebb0a8ea0bed7e2acbda84256a39001f47743937879d8454f6ecd2c89384c5b39a9ac591f99 +MD = 8b717262a58b5f02f12cebfbadccdf4a2595132865886567901edad5 + +Len = 85832 +Msg = e2bfc841ca44c5e64da910d640bc4dfd78530d713beae840f58dcc6b2cf99432b6fedc922a27140d949dd4a96d496f3bca39cbe5d34570de77f2de715e9624491fbdaeebb4cc5f842be4e0e59d0937cc64849b65898586107c0d0d65080b6d7585c6e653507accd47846db92ba45cb37b0fc24f845f4545f6ca7fe4e12a1964150df2bd3e67b8384e58b6db9ab46530414680fa6efd8ff52af885c34639dc732e9d125725e15ad1cd87a3f615851f8bcfa9103776f7ab272ad78cd20e54a2ad2b6637d38a0917224bbdcf992a9b1e1e6c940a974ad229345cf3ff9187fefe4a8205fdb2d9437f925f579435486ac380ae93ba9a49218ca557ba48a2719d3203c908be65a234e6ba7ee19c3b0d78c22b0c24aaa1004a3802a1a7125529c3f04176cb147c63320ef300e8424ad8497c961bc3754beec0cdd4a156c74a3ee7bb8c01d97a679adf3ae4abd810c54751655a43fc950b8339c083fd25e1f21f8cf65bf0c06a97c7a10d07c63da24ac9350ee02b3c74606bf982a91bb0eced4a283339da0c5fbd680bf7c4e685513bdc48fba0280faddae7a4b6ac6374628c5d5de49e1409e428fa947da4934bb818ff119e42c0e2abeba4bfcf168adccd5fb7729d013565727b0dcf213f42fd3182b03389208c51e913119f2e6ff87697e7e71adefbc49b9514001064fd8c2677d98e031ed1f0ea0fd1cce7672112ce5cb57acafcf63818c6947ffccb57b533d5bde724f1cf84f76aa8251d0bd280408638d0f7a9790669816cec08c6e674c1f58069fd9471bf169416b8a48eecb779aef28815570cb60a401db2b8ea12413d31c16511698115d416ae061262e83ed621631ec87829dd77ad17928197738122150196f4f3561fac6cce7beb1a4d6ce2981af3759f48d33e02fad9f76182dafd39c14e1cd46932fc0108b8932794e82b7d7aa4a13ef24dc9fc38178eeab8b54afa7118fd5f43066f6ddd1aaf1d47371d4c12b0dfd9ae83a7f34fc9bc759d8687f1a1761b266bf0631dcc30936decc0448e738685e1e63b5472b26f149499e53099c2f3faac6c87739b5688f49bee1a1daf0dc4380a21db6c14f0860bea4647c16d660110739d320d60fc822719d3ab254851c86a94f9da3b349a9d16c91b34d6d70b2bf0fe9696bd092ecabf8a3609d7c4d0219224d6be6e6c0122d9c39122dd8112d310bfe11bfeee7db1324f7dacc1bf195e433c30fe5225d495a97c309841d61da4f42a05484f9b69d403ec230a5f818ddcf23d9110a2ec85842a25820bb050ac002fef5b923baa63b1c8d2beb92dd6be3c33cb9fabcd4a846cb0820e03858b1e7308528c802f660bc8e5b5b92f99091aea6c4885262daa51cdf0f42d064de0158c2215f098a788c287dee7aad44da33466204719f660968e16501e779a75e9f1aa117c2052307d188d390afc4da83f9b4dd449a6b2f29999d452436616aa23635b3b27b43366ad7e37786226023538aff01cc2b3d2502e05967c1581213706cb2e239af4b296a4741511bfc0887128f2fb4e34d9eb05be31cb31f74140c91e99815f389a666cfc9aa499665456e87af4de0d2271538fe4dee1188b3edbbcd56ef34292edb53610427473e849e407b93606ce2e32a25b1c4d769423d278aeb5bc02624c9725ae7a1bf335d829b65b6e3704058a665df3df0e0a3963949e0b59f12d52980f4e22b477bf53986c446004686447f9b4fce6a7b10a7cccfdc24f1cbed28837be852f39f61751ab9a2492164a8609ee76f5bff0a705d2c2967c06886590778e3d61408517c9c4a43bcd7e0e6e17cfcb54decc64806adfe6c721be2795f5a52e0468f3204d150104b9a5906743680e22b72eb85dadc8089c3869d274c06095799c12b38606a7ab3f9c5355bb5b154987165be056bfabc16542aaefea657fdd037ce50e40f4e037c76c4d5a75259e066b0aecf0ea1664bed47e6b6302f581c04e1f666fcb685d1b3ea1f9fb2f2360d9410d68468242a1356c5421d8690134f3dc0c0d5490018cea07d5ffd443e51c169b86447da9d4efe99f6c74bc571907fc1fcb40693920ee08a550b5624deb1e52ed1e07f2db4d8f3fd01fca9b879d692dabc5a5fa2176ff1bb9dab111b795e622c82d3932910d2d9cb0e699d2651ed72cd283b493d3543e8797bc898f1b7611ea8f4c4ed965a439a4c479790d6a1dd05e56ade2d2e9493ad0d17e9526e42c103ed4e3bf43c39341dc5d20deb9110ae3569a7cb713bdd6628bf9a96a759bf86f842b9c010e356ac4a81d753141f4669e8a00a8b7f2db8c541d62c57ff7cd9b9e4ee5ddca95258b309c77ff27548ec1608d3b8a5bdcbccb7e09cf4b5c29d3661b13a61162752e85142def17174d4aabb7c4bdca195dfc244ed571b3758857e86466eeef7f3abae8fdd0f56587b8a27622c4d9c086e2f41745050c8662afc5a308bd22b0673255174c2a2d630f1330c1200242061af85f250f1cf24c89eca726868ad41cb10877a09dadf98803e9700d4e0179134c2a77ddfb81b57e71db66d35c54957ce329bd0550b0dc5d0c97eacafb46d170a0e5d892a8e7e884b1089f3a08aec96984227fc603e7684a9fcb0b7ab646fd969fb71be37593ee07add0baeb09fdf26b0a6f4a5325c60fe913ef4cad0d86500dcf1a9c61003a486feee04436dec6a2e9ec8ca74d44b145b12f8148d27f997b3e858cf46bd72f8a25fa93c5ddf5ad4d6eb0f71114df5dac2b490d6a7b7ad4c1b1798a9e94490825e23787ba20fcf67481ee2b023a540f95bfe6f03c188ddcd60f0190054af4389e0d4c288ba043469a9bfab5052e416bb4f78fd6382a37263a9fb449b3206755750f9ee2c4ec672232456d11a48135e66c6aaa2bd930f52541ec17f44294f0d32d71b662f065e6fddde6cbcd3aa3a0043e71dc7da9bd467e8e9c933c1e194f3639dc1915989d315df0288d346235fe39adb58d28343fb97692f9bc9db04dc0f32c973d771802d4b70b633803a598cf1b3cae32d7e338bcc1d1bc0a75a373049e683baa0419275f8d922f42b76f4c811d5db473e93128ced4ed2bf3706249789c9f51c548f68b2066370533ac39d1c2b4a360b6f8c8907e2427f20e0a77319b72144235b24a9ec5c53c5d816e9fc8e285804b727303f029341486c0904ccbebb379b571ec8fe2be2f44c0c27b0b829ee486dd4cd46dd88e895552a1ce6d58f7d53203f03420f78808d2a76d5e079f2666298e9cb970a9ec985cfe280153993e5bdfb63735c83da1e658a9f8940e9f378edae7e88eb6f4e1e58de1d9d599ed2dcbc554bd7dc035aa4c5920da999ae330d33d61b6c09b39fcf57a961db7aad5548995680958b36fffaf56a4a9fb370ba0b7a3949dfbb7f9ac4ca5939a23f0d23139d25891731c5d1093d3bded156d8915c0bfe8f49c77b45e5f9152a5a716644230debeec39657d8b7e52d4fa94a8dbfe62e4e7612f64eaa1b2b06be6bd862c16234cf380381951ded3467278d56384c932a5185a210a1d14ca9547c3d3ca7a1b659faee3ebc26a7947312ede744814149492e4462dd1bc061bc26ec3865ddec09c39398db0db47e92eb552a1eda0fa5f2d10e3bb825658143aaa497c51badab42bbc3be443de4abd1e159659ae18b80750b18f30daf261cd8bbf8044a25bfe54989b2e9e014603537a04526c3209cdaba3f75f3ca4407970a3947bb314cbaa2067587a01759d024ae6f42f60161ebbca9b54cc355acb0fcc06abc45e05846ea61c76b6c51d6db811d95785bbc6a202d2ab4c6ec18afc853e2987c29c1110cc642c685d4f6512a536b5b0edf5c04e23625850bf57914f8a25709b2ef3a3eb43d91bbfe606e9365a282092d0a49f7d9de82714266e2a5e7f309058420b5a9e65836eefd982264337649e7fc63eb0bae2d29be94c8ba283d4ddfd61a439918491e19a7ab05788b3cd8a83ca472ab08092b02b428a16966a4b9c1c39de04e548597222e2f2ed9d229cf87524cbfefb591e1f69d277c5727c23d971335803c2543cb3acab29baeffa264ce6f1dd320dbef56ebbfb8deec333fe4490f09aacb522bc347c55cd55ddb4e9e65dc3f35a742cb92ca6404519051c4b3c0ff42e663a5e48632655463502ed68535e1d96deab2cb9e7cd2325cab4bf9b4e22b07bc6ce4171ce4f3c3cdedc0e12124c5130453f39a81e8516b88a5e785ee98da81b54ed86b8e44b6d09c9e58187b1bd2168149ccde43f52bd75be6ee1169cb55d858714989e339f8a457cac0239a034e0a6c330740ed8da69d5fd627442e61e5332d3dff1823adff6686d8bea986c282174e7b6a6786970ce61cdd5cc74444d0babd1bc1c15687153fb2321b524842b663ad88befc16faa3d919645341b35a5e978f71582c85af8057623f9ec8e769321914c2caa6a6a0b49fded1d55b848dd9ef2ca88d00b80c88d51e6711b06b213d5f0891580e3c70865ff38eaabdbec387ed1a2926e5f58877e26e123ab5dd51205d135d2edbe3526342e1019a0e69e6b2b6e35beb85460a93a5dba8e37d44e1243dbc8e15b6a02e91702f946df68edda0750ea5a685b27b2647ec91d2b0a8b88e248b8cd5477dec591065aeea1f3390995024711d9041c176ef2a36d0f711c0a93c09c036358175034a0bb6db2e63e7e76fac26194cfcc5ccc61bfda4fa88e0bcadbd900029b4afd748aa1606ce23cad1fb2e2b6261ea6f6ff4494f186014000e9f3065faca1f831d2fc93533a57d219e1c33eac07814a8a9a03c95f2d1be08e839e8a8eec1c9d91c2af17b2c5b78d497f942cafb398056c0f27a35fbf78de192a36fbfa2b5bb9a1d5ea950b8991ccb04bbe333da4b3862fd138d99fb77897154064d14de4ffbac68f6791c9e0772ef2d899e8d275744b5a82bfd27bafcbaa1768a080d6c3793f94518e947a74c8126598cfc41a804aa3609615049ff2c295a3f562a1413148a68fced82399b105259d1ec84b526fb74cc67de106693afdd82f9933b909a8ee9e0d49ccb5b42fdeb71ded0bf5268e3aa610ccac4e53f2ede02ea68c1e9ca4eb74b164d4d1363b95654c6603380386552dc3e4cf530c95135c35afe46866bfcfc900b2a8ecac8ec9becd1c66aa85c297624468c2aaef9bfe9ac937c51d14540c197f85818e9373fc01f4927ec309dd61d236cb3ebc7992102a4dc0b6b311fc00d48280273d67959cfd774ae3f82c31450c0f7e9c1e36f1e89957cd31a0ec227e88be24e25fb56e4cffb9c80ed04968d16e33155326a455f8566bcfbe9d1f71b5a486d64b8bf9585c97307c87e20dee677746020c8c4e18bfeffe4ac5de084446c67126db48900e6c427fdac783d62ca7b5ccd710b5a0b4bfc483c0d00a4314c25d019919fc35dafc8ffc85465c2ebdf2b81c07182928d4788290b475985c8d88e6bcaf703d47588dee3afe9cc1941cd8ecc8048b5d52e26a98a9b81f0ec0f93ad216cc8672410170cbbf99336a92c3dac25571d2c8cb591685332e44e3fd0228cd8492b541bf6075c6fef792ada74d78e758b18701deb2fcb6c1998fae7d1303379a7495121eefed6e7d9c43014e0423ba2656308f298a9ddbd98c47c4ddb63a8edcf4ae69ec1a4810bff9bd0bf3927bb962d237c7184a6a32ef6905dd8b563f51a09559bfa37a365c4a8279343472d17372b83550476cf27a87d2524ef29d922ea9d92f99d18a08af81d900009d2fd566fa7a91a1237cc701173ab59fcfd6d3544d22a87ef2c46f990a7fda077a23e8025e8bd53039044865321498566fac6380ff145cd593b3ab9758c96f9f67e999e4137e8883e46df7254cf282f95e88d3235420a54410c27d28d148595ef30b6b7aadc51422d24463bfec570dff18f692c9d0da2a31068b34dc289effcc87e3cd34a1f220837f121e9374a481de2b6032d2f9a35432f178631fb31ffb4eb31d4fa08478063c4741785e9a7d872d027023dd330eaba04e149862056da47be112535cc9e95da3c76d115fb25496523a80f647119e992f98ea454183eab3dabe5d88b7e6a89f508bff7a4550ac37f4302d2abf19b5b5275e53ea4cd31981c1877940507f4843c8e173037df9e6d4698fdf2193bff6883e0afc07d2679c96e6f8d02aa4d84ad38374624d8812b70448b6018b7388d37aca1b4d1e80b5d67ba17f0c98239622c706b137c8e23f7f40182f5eb8cce8cf15522bc1aec64249a8978689295b3d52a6c9348e062ad4b2004e68214a0e646bd07ca8f439119178962fabc05eca426cfb515abf75a076f1cd520d03afb6901c44801f4f3df137e5dcd05b6c98ef29e42d25b056a8119ab11fc96a706a63d062da32fb5d2df38a13d52011c87838783ac4bcb1de0dccc472701b2ce20a84c9d219dbc98899871c7527a56b7e6d4491d34a9cfbd0275068a856ddb0f2f097c0dc8c01166c012a739c4cc6c4f8f8822b60373ceab7853b0be54c87830dbd1b7a0499394e61e56c040bad1acac29a7f994403130b0e97eb329bb98f3face09e49ccd9eaee24c6ba6225c0f7c955d3ab500146c5c94fefff513e367b335adb9eb4a7b6ac720f2593f27d31045d3d3474042a7aabc1f5edd60c6f3bc20a923e7b4f27c7e486ab7297599475c702f32d981a22076b719b120db891420a21dd69d26dcf762978643e22ebedf79636e23f56068a755b549a1d14da36e1aa15b6ee22b4f159f1e3c3f8c54e0c4f1885b4da5c5db66d11e78d4f6a05d2832852994bfaa95febc44565330ce451e4c46bd59f0984482715b6ef29abbff6bf0b650f03a8cf4d941709a26d584351410045beedfc1eb26bdd2f3a4c286d15edd9d98295eb7b5ceb70cd261835efacec72cfeb5782918783eeccf9278e91a2a80a0c8e730141f07a57fc4ab4244db75f8256e55c5b613a07b11c963c3cc24f66128aad4ba8b7ca9933139ad1b1e1f312c577377ce5123c7fdaaabbfac1735eb099e0496030512df098af80f15d40f29ea2ad5c39ae392154a1d3b5039b29631ff689fd513682bcf90f2cb78394ef386ba065be03152a6b1ecd442bb74858fefcbf0433af39e0da1afd178908e75136f2453cf779b88a8c46b3587ab6579674df69cb76caa8d007eef8fc8001c2fb60db179f72fe06bdf754daad4c61374687407d6c514401f4e8ed7948370eb652588e8e09bb109e595ed1c9aefb4865fd88c860533dabe3a3df8ef4871870400a90752f085a51edd10535f6da11ec62300bcfc90ca652bc817e5bf1459ee6ee688b275127cb1253a9ad09f8ab2acdca6282df0e1525e8fb0227cd05e054d31010ab2dbac478028e6798c635bea05cfd29807ea5f936cf2daa7e6a98f3b4b5637792f0c28afb82ec8f5ae334711d2a78e9771727255385d2eed4ad210c490e3721b508fec7c0240c8585f97b6eeba6cc16e9311825f6ad7943ed1d44868c5e3993a3eeb62760565cee8c618104a66275566964ef77aa969f4e0a2369eee925b941c21abf0646aa5c2ef0c3dbeed7de031c5a2b23a6e9d1a361ce7807c209e554b0920540010d8088cb3588f269fa89d3dd3dec4b103eff2423ac53b49c492d8a64b6370f940f897157dd395b1288f6861da730cc50047f9008266ee6ca315ed8d29138643bd72594394a4d7c74fd94885208912de2f4c38593cf2214f85d09be8ea581f464fed57ff42f5ddd1dd2f4691ee465f6556a7b633af905c59326aea9fd759c269bd119732cdeb30359b38686d8cd57ac03e007b78246928f2718ce29a383ff717d18723c27eb0575d4e9db802425ceb59affd900ee3a50c820bde8cc1553147b551f703999d6cdaafc1053e3658043b977149fcdf346b9171c907effd755838ac06083d9d72464295bb1901f215f4f1e14b8ac7d15fe33d2871b01334e1dc5464b863dbb8446715760381091fc35595a10669faceab379b0dcb80014fe2e423452fb0e4d15df7deba62e45ea3a84eaf3e6a8d9cbd628c3089a120c037be982cb8329661cf031d22c8a0ea09680c08c8203f9fb585ca0d8605b93758d2bd21f7238bbd599c7f016b0a853c115439aa67af4d464e102bdf24e7dc6ed20a29a70cef00ced41f19cc40e7d8827e51765d15535c2b6d45cf2d9298d26d35c64851f4855a71db4018a62ac7636358460a49597433f51d0cfd1d598163db89ee6448364b604d74e7c6b6b012ec88a81a3e95bb7a9b4d634dfcd700095761d769c3b45aabdc0baafc69255a313c9976b75a6ac3cd5cdb49f015840f9775a62621adbce80c945282674a1ab08a1b3dc804a6effad53e46d6de904c0e9586537efd6c8869d652cb0610b1be3b86511ca8e9694de7fa093712fdb556866a520fe7e547416570dc1e3de0e539828da5df1d4eedab13a584550636cbcbff7ea1836ac1850f6244faf22fbd30b20d08e02e2f1b7832043c7849b9721cd2ff393b560e796f19eab976efe590d851655dcab0e73853094429adba3397ee941003e831dcf64d88843717be6642264011f62b0e4c8ec65a5bd2eb517d8e8a39b9446fbcda1e6783b926a407bab962a49939cbf06703184acfa1fab69e4038e88364999e12da04330fefe671eadfd4a8869072fc3e8093032afca1909e9440c9f4cb2e808c136dc010f8a5a5fd9bc4715f62e7dddcee7dadf34da9878671e90596e1f6094fafeb5144aaa84bfbd4792aac17f33946331f6fb3fbdb445dc17cc4f10fb8e26398c40e326db90aed743cf9f6175eb98639c172f16efd6f2b6b412d8bbb3eb2d0b4402062aa9e8ada625506c3c9f004a2e6abde350ed7b0f9578069ee4f4e229eeda9af5cc72074ca860c7a9e9770c3a52424da084333adce6d819fa231b1dad62945e2a92e0770c5c8a87d0ce8a89d94da758ef075d711b2958bf82dcb2f8180525ee2d0451b25d410733697255e3b79f0e723770c8c82adb7e89c19838fbfa24f3ad75976243cfe46b3cec6b45b445b4dc0c125701aa8c8bbdeb2eec39b3e460821e8cd28e95c4c52b16d21fe676143db488f8109492d0a89b66332f219a373655d3db2c2332ec41cb539316b493a3881c9b61340e1b67c09b8d66f77d299324e35ff93aeca5a718d075d7d64cb764227895e637ba9ee24242b342cbc8ec68aabf056f5537687588beeff8e4fb3bd69b5d1adfa236a7a0cc059a4f22814d28364d7696219ff5d83ffb448ea95cab9b614e9ce5fa1ec053cc6884f48232e662561326161682c86f9d29f5f1b9fd810302a19e71a5bf735ba1f015cb615a22a798b49657ba8c6a7c2eaf86ca9d4a56ae0e0a921b4bb53b290b10cf4c46639c586c8639e3641956be73106991a9bf870cc1fe0a3b428c725c666f03ffb7fbbe05401c9341d9c61776f8e130cf85e9bc9fecd0896a20a1d366225f764e2c6f022ec1fc44eb51ff27662e865edca84541e7ed3672107c81b8c6ed5678c02a4a03455089a148833100ec82945651975ec17521a456d69cc8ad0f16089dee18292bd97a693af1d4182e7aa38fb9c6c982b5b8489eca1537d31a9f4ada58309c68f66bbdff947fcaf11aa0ffdcfb94b57d8931c07a3e64a43dac07ea403a202da5fd7c89d1203aee685ff006009e43e19bd66207eb164d8864bbc972dea645224cab7c6c7280cba4fa68d8449f047ce47a07d9ad55f4284ae4d474730a4f1830e98aebe45818aa8513bfda3a0cd0782474a7f91f4f5a9d623a806979577701dfe9066b7ff65a401530ef6654de84fe38283150ec3bbc0574e24a38e44ac09a65e7b84b9dc1e824bbfe521d3388945786012e71829f8b08e9589c635268ae6a89521b3ccc7f34d11fc8926f44af811c94ac19cb711f6a004619e1692215b2caa0b4a99f9a52b2dd872c2acd1697cdc5ea656ddf360fbb93f1b2c3cb01e65063528bede475f0f492a89575b707e5fcec0dd9a51d5ff5022c929fbdf9406f29ad054442bbfdde7ca8ea912dddb72e70e765855a164d63d042af5d3a848bf481003f7a6286707fbd78d3ab9d71a2b5dc5087e4f74a9cd0987e8e57c3fd333af915679aa7c49c59299aea415f43393091affb64f73aacdfed28d63bd4b3d487145524219cf6d00f538794feed930913236e16a1f4671bc620ea1d660758ee8d5537ebabacbd99e6ddb76a40c31180c21403901859406847e62aaa62b64cffa22e3624a5716978940aa2e0936a2f4ee1f618ce34a056f0b9af7323ae7c00866a11f8758b658afa7b6ce28e736d4cb1e72c164773642b63bfef5c0fc5c333f149a2d744ea03a27e2196feca7d271a5846287482710f3e3faf183dd5351637eec5435b192dd630921afb403afd31e8b0839dcc15ba2c0fc32bcc90fa78ff8ccd51960c78e357d5d4cc2c6f469008583923de75679b24f0bcaa8f0e161df9b32ba2fd53da8702d294a98cd473b234e980ab8d18fea094b17aafb20d8e707f4b680dfbd9b4a551d770579f0858f0221cf58f0c1f4166f5a29bafd807ea2cfaa631071406adbaef54e64af5735cc67a432642ee00e65ab2448e2f8395afa01663e522d8531c3415cb74f812bdf5a1882c816b955644087527c0a3272f45863cf512e5bb57869d7fbb8ae36940ba1dd619957db497e0dc98ccd1af454d522bf8ea38d42f7c837377a5c6917b9420980eaae0ddae4e5353a7944fa860784c2db4a3c552b74a7942b80a8696cc30bfac7c40e22ff4d2021a2c2e89230b2899e7fac25705e54a0e879b5a6947dd9efdc7c97c17c92adb738c90fc2ca3a7e6d20755b65c423be389ceac35dd391247517650dd005db2b33e17607d88beb92b7ae8400043bc2daf916464fd50ff1cc25134bcc42a321f01b86735234bb8d17efb273430bbc82d16abf5504172ee6f88738f57c1f40ae24f78e8699de4466349e930bcb812eadcb13ffde872a1ab6d024ef2dc670c3c8ed50617884dc0cbf124bb914416e7b89ef7d3fab8316b9a97d839eb9523c14b876ac6710ba38fddfd87e8c564cda8a5f662fe5829ee4f509272caf62c78b1bc6e5960818e4fafe10afbf749895ce437658b15b2c809bb41cf5a888f0cd65c0396393ac56a928f698bf97d9a4c4518e18ec8c0771d243e02c107e932b0ed3eb5b172dbb94b2cccfc02f8d2340806c538b4a4753183ce5607fa03636db2fdc84722aeb9d98a6ed70d0282aba3571267a189b6aa6eb65871c5dcc59dbc7db8973c7c355ba2a2e94c110d1f4064a4087eb07077e67b0f634fc10bc6ee9b8b8e1a0a20bf47a14f2c8aac75375704995978fa0b50a003096f1e8df99fdc8766eecf34a2a4f461d9991133fd5355ef8175f4c2bce96d833eec8c8118b8edfc9a6b2550947ef840cccf7e4be80bb39216fe60bef79aa5781a6c084efb9aa9879083cac258a5a9eaa3203058d7b8f6a8a4534b535dfcfe5e165e104c14cd85a4d3b91e2e71c1afabf74bc5ef4ef3957fc40523045278cea1cd33431cf6ba18e0ee8b9dd9725b70213392bd83a04416a3e084766677a6acefa99c0f1603f8c9a84b6bd877dccb71c6d2a5659a9e1300a1a461b3de300f0f9435f8e2dbdf021e7774ea4c6e13aa4b296ee47ca87af8e9e56a2d79f00e0a6d4bfcca4ce2fa5e8ddaf5776840a97052b572e06141d95e190bbc38273074314c536890cbafc866ae4f37a3ba8410a63ef7692991db3bcb347115224a14050c3356f3ecedb6cbc2e650d5ffc1acebb4566bbc10acf914c8b2b20f6c610f3303a8d3392f017c96fbcc6c3adc1c2f9d333f8f0646111fe6cf2a4af586eaa680a01334a2d7c5859c69d71de0c90880a7ab50ddb22a4ca44446f1a881f2756e707a1917cb8798566ea58cc2626735448d7540d46a4dde4a9fd8af571f4f6fcb74fa10d91dbf0863603754162a0710efc139760f792134676bfcb9d337fe58521098911503de84311387d375c25929e6e55076eb6934fd8f2b1bb7b9667fbd76d5ee204828769a341b1f716da5bdfece6c62a9f4d4f988267fce1f5615540dbe375324eef607c910d976b45a5ea5fe0ac8e8b5c826ff62c1bc7c5745ef0bd79ca7704575f7127f2bc12612e857b1b6307d4af0b1f9b71be573bf06153e1799a6c8bdd869a6274af9749623841b6195b41c02016ea7a12206380e92209cf7c240fda474567da6bb0e665f5cba34263b2a07c65e3acb5e03b87bd38214863cf01fc8bc9fc908113ddf18da34f71c8014e6d2d06dc2cf3e3f50b1b66c4d74579177bc7ec11db00741effeaf32c74eff919effe8b6734dd243736c1fa75801c8250d3b636ed11ff965c59a46dcb746055f970157dee8a1baaea52d77c9b0990f3924e7f31f8fa25827d48e2999239c21dd8369a64d8f7547ef4a587759d3b4bd3c7324b659a5d1b3f6b12cc00ea8abe579d8ab6c68d4330a63f78f76ce5def22ad6c841593c0389d50cff8b293c30fc0d30b4902d7536592cb1124fe9daba3001a7588a9544b5154d4a59479ceef4234679fc5220f898741734bdb874e496aa5f222a4da11c396aae0c6627e26a9cdb0b5faa21287e302c70afbf5a966b3c0b4c2f85b3062a572e003970548216f0ce63cd0528cc6fc7263e09615cd6d772f9d0b6b3e44bd8d90a4bbbbdf6045cbaa256a8568c9433250d892cebe6bd91011cf49ffa07f88d85a598799534f1a3c0ffecd9e578083212875affa522d2ffb11ebfd2a34495b025a8ee5b4236d052cb8e2e48fa12b1d4563cb86ad6369d8a49a43a37f5c4abab7fba56490b2529d3a3f623dddd821682b8d6ab55c84aa69a93596bb73aafc1e55c84d72b3729858d10e0d381d5f1bfa202fa3ba8c187769855e25c38b82d60c683ad79e90f696ae8daf4471a2c87359efa52714b0a1494ea58ea15a3b9640fb6bede446cdb0e634cc8d98691286bffdc69865427eb1a88fa64179ce1837f561dd3bf419ae33ff521a43898cf12c6a5c6163eec22abc1db2f4111fbd95ea4bd638bf7775c6e25aacf34b886bb32bfb0c2cb214225943014f0b6813a7294fccdf0ae2fef9bc5e709be4102573ccf7fa73a4ed75d19ec90bba78c0f5f966cae0d2d040eaf3d31af9a5792bd133c322d1295680946e4fc0858bb8b62742c2de20680543dc12bf8a2e600f192c3a2a4f27a3be15f03700cc174947b23801b20c23e5268632c4e62ea742224296e566bf6659481809ea364e3969a24f98c4d8d733f0c0629f98db9afcc26f4291c3fcf605e0810151e674b9547354e8d9fa9bc209114f7372fcf43187772293bd5471a58eaff55c58ca30bff0ecdc087c117f4efbad40334d6fe4a4efc708b06a255920893e11939ef3fea4a73ca438efa7f7e0844b2f1c9f7011479e387e1338a528196e01624184f22319efe949f4a53c9a294b7188b9d99c0e9bfb51ef56996242d2a59063e0bb536272238939c64d3dea8bb996d9759c423134bf99f8d51cdb4dfed87192fba276216ffa82f018483a4d8a47419dea48012d9433771729237eade06f1b8beccb08e445cd7d1985169047a78cf842827d67582d0f8fc6cd5dcae749e2049b5ea55a2fa624bdf27748fe6d55e33163d89cd345719c2a843c2c5e9e7dd9a36dabb208780398ec37794fd33327f2737e4736e37a04720ddbe00f98180eae9e5f6e818231e0828e3505abad1d903334fe78dc066a5819703a638806087ee94c0d018455f1cf79fa97a6eceaa1211dfc60c7ecbaaadf0b182c311636c4410242d32f4b024c1307d7cbc7741a525d1b4041cef97e901bbf5c2dd34a98ffe792096e223605857d849c3df1e1ba9596c3971de872d0dea0ceb2cbc485ab0ff501062a94e5de4241a8ce8ac0a65a0f80af7751cef94fcae081c2627f67fb78dbe7df94f1db0b1711ccd52e8e3277148d274799cced4a095d90f19e8e61e8bf1ebeec39c3760a6850694695e53670492ed3ae327cdf6dfe9a74c6ec5bf421673feeb28584575aaaa016a95d5002f411d83d11d859400a3f0995c8b872af03f5a20fc904aeef8a72635d53e1492861033bbbf8d7ecafdd3f4d8c6daf6ce32eef078aa633bdbf08442c95fcce4b275591abd8e9dda17f2573b8b12c1d9540f0b7b2f7c09f3b4652946e590a70d0802041bb2c5b46025e9170ddbc9aaf963907f446cfbea3a20607e7ab3ef37573b38f97ec2ed39d999e9fab4f072fc1fa4bb309358ad6ed8c7e76a255804e58af41c208b148d960e1efbea77f1951f11be9a07b01b1cfe945205d891ff57176ddab8618ad12d32c45a26cf9d07bb7b985a35ece2dcd0003769bfad04ce7136c99613a5c2205675c6f5728f6f596b787b2092c872c350de89b31fd2c7edd9ab66cf35d27c2a8ec7db98e71335102d7e84b7bb81a8f924fe52d92c2f228517dd0c2e27d200166090caeb8e43375389f579c8b801cca6d4ca5a82eeac5cbeb433835af08b960d51385c956e07bc4b084523fa8f2e26f1e8a869576e32bfbf371792fc98e78637eb27593f8f480e1f31d64af64af2fe03e9024600b3a791b128f003bc28cd17bbb5c68990faec73f88c10b664f1349b045f3fba24c5f51bbb10259c41a72492c2377bb331b6dd34fea25c2eea8adc461bd0c78d6bad02a506752026341dd63f73faafa1c9cb019858fa207b331fd14770c602877f72b877bae248683c92ca66f785cb19014242e92f1dc565e5b7fde62cc8586f051cfdd8fedc052c020fe84f756035e48122876daa91b4b4a95b476b775f310fa8b4bb12faedbf382e9b1842161457caf073b76ef2e054302612971d7811f52d0e41d96bd79cde55673f428602289892f63ebc322e910ca105e4d54558690c92dfcb3f2cbd71ca4b55024e6460245f063c8a7d02872d46ceedd9e92b3eecde06c45bd59cd3f5ece2a1ec2424589116ec6a5fe225253b698087fabc175324d35164f7830542afaae2f305ad0e14f6240d28c5d3e52f43dd7f7b4e3451bf98543a69aa31ad31286d12f256cf69b9dbf1311cc53888cece099370dd3a20a9d0c78a7879c7ddc9e69e3b47e6737f72c8e51ff166f957296357840eb0b7ce395596093c6e2ddd3273a3259abd8296654668a14db1ff9a698a2e19fece91a199ae277f5a904bf59357e69892e4e2f7badce27dd9ac3099b5cbf61be83fb2e2ee63e4b47de7096d1418cd5cd7627dea9a13bb7c3c61759b36af1853730c00d863fd34704b7c508cdf40c238123f39b62d725b661ed8b7ea13bdfa86483c65cd1d037e7a6c56069c19572cf6eb8400a59a812a032918dccc757e057f0fd7c80747fd2c9b897d15e3ede3735c0938b9fd0ac891 +MD = 5d15564b101f31b4fbd8bba646c9a02ed9f9e46ff752251d52c578af + +Len = 86992 +Msg = 735ef5982de683bf81ce5bc3137e5cd3e53eb82ecbe202e620ad88e4b870e22d15f2cb64de94308f8c35871e67546229b17444f921c5b3ca93008ecffd93a177a5fe77ef917d6fe83fe7129a97d6a4081e08f9866c058b79e002c95f9206b10f894ba0412fe7695001aba53f8b4c4bfb94c081df96ebb17d717bde9c5f11397d2ba1ef639e1b46513b4be8162cfe7e877b66810c85bf4d5eac33788e4dfb614af2c80c5cc8612d73538d8226603366363bc0a41323c989a2fbf23d3e420e53fd45879e349300463db23a1c7710342b8f3c978ffe56508bd3c57fd5b32790341e8ea74df3e942ba37c01a5d12254af41ae7b2edd5089e7b7871a3e9f5e5ca2f3534f1c3a2b16db1e9e5f4eefe85bbe960a2db649e20f9821a6926210d620469cb9f2aa549d3ca52dc8a9176431acf34e8d6d89c6386aac84014d0240288860d67361d9eee36a1c69715ba9eeacad0fa3aec723f2b22f97472da689bdc3e9741926391549bc43a35a2f0350efa7f0466df4a71f2ffdc2dae3923b82da46b802dd38e4d6f5764dcc68681ca6d7b20b59d5e5a9d5fe69c90a01b57868361f98afbb21d1a982bfed1a1ca324364769529ca3f83be2ee84a686fa2de9b441bcffad0b779c0771d7b5feff66a679af1c6a8130b2c9b070dcefe465621bf19dad51bd76b0a07b338c1cfd89390fdb8f79b7ca049bffd905e109a4bbe86b9aaa7f334355538b7f481b96983280ece658dfcec9a81a3ac74e2f884a66276539e89118c15fe6c97e4024b74193d4ba24abdd13f293c407059a16f0380ca5a539e89176c9dec0c7029c2603ac15aaf400e8e02be7400fe11e8a45b60017f988251aeed1cf5a9820a6bc9de01a408a2725a0977b1a4584556c8f2a6e450089aa860007ce446bd342d5320af12e9ce8cfed6341860e0c97d08a19336d496edc68d7287aa0cb8ae8ca188ceb9b5b935d5ad2919ce1251dd0eef1d90f57bfab786f8304c60db7206f02db3dbe6313cc4e547fcc07f101f1b60d3e2f0c920a5ed41b34156879a9d4cca9b7c501cd099032594f62f14a3710bdb7c98bb9c0abe175e844fad0592600981b18a3445d8f97afb5cc07076116f36e8b2e8fa55826ebd4734ff5ac408e4c47d38868f489283b2d066018b8ba24323ed3c7ab4dcd0dd68638bfb64aa47500526f717690d4660320d7b62863da0125a54e3f5f1193c329f1a50ebd3a196cd55e4b8e6cb7c3cb78218638b6b73510764836f01b9f40e96ebd44d76b0903c833a1f419bbc7dbbb12b5be6234215ff47c8e4a84715558d30d3f94845025e82993e3f5bdd45f80c76b43ccbd3110af0fd0edd556f0c240229dff10a00d1f5b038e9acce546dd5782da525dc42e23c6c4fbfd84021a749b5a897255b4e253c0e87c2ce62a93cfc45ff877ddf18bc92bd65623c2f04edaceed684fb02d7071be3af510edf84ba55bb13e0ac9dffa8f42a687f71ebc0e635f5da2ddcc9447e7a79d71ed20c8cf0c924923b1ade9dac4afa809fdf3cfe9acd11dd1a31763d93411628b283b26ae53ec6a31d2f6a9ad37c76d449eee966125a8c07d460d2694d5803ca948a99c6a19deb6f1053089f2273e68d0506bc9f55c5ac7fe2d3a571b4a888e44c4d89462dcfd91d9bee8254a31592d25b8f7b526bf7ba6eccf0b7fcd017ec9e63364a9590bbd8d647689e605d4bc1ccd4f1ef265dd7fdfb1b21cfb3aa8e792160aca359d24832c29a29256c58febca3f794e0c4324cbf4f56cdb73e49f67595cb165e3bfc602d081e99de1f9d14cc7e4ce016d3f2404691055b3544b53529222dde41e215ea13d15b209322337737855c3e58fca59adceab135126df735ddee0c6b15f725cd2a44d8270a1c220d45e2ae146fe75442c782e1c2156316dcd924f325a12135f3bb8a1d140cb673c040bacbcb243b071f4f801d6a08cb1a1464ea6774af094b430dcab25161982d766e3839cc3da0c41bbe0ded95b1500cc4c768f2c0055672a56a2d2044d16958191981827e82c0951d5a50daabda98f3d44bc81b716cb1af0118dbee5724d1fd9087c02d48bd40810e6d726b14494bd72b352f6aefacc20c3f60fba4f1217a22c3001bc394b4cb90d43d9a2939c712c0b3d0c768a38d3090488ab5ca799209d29acebacbc93007cb5813f19a801b95b75363b89cf3d7a44302de33e9593d2912fd38c6cd4ef99c3982369f48520f7bc3f3352a8f4851c52e56a49a88f8ea80ecd48567528dd733e33bf0cbbb18696ced7b8f44c70bc53c582c231530be63b66707fec4e1ed9274cf69879d7938f2123cd4b92ecea2f9b0ca6da4c968136f748b7eeb0602d6f10607f5443e0c1c7212b8e4fb112c77b5ca8aff6fe1b85fd562612294543db0be9293c86fd6fc2ab11769949d1567f0c332a2cccc83a80a5e27f0d940d71be4bfbf79c9508ccfcc76c758cde6610977ea8f19bb03d8c17cd26b418c38b723d8bd36c3df2e890f698aca8c75201e9a73f189f8b35b078a1ef9d85a24c51bdef57f9e79f453f54368b6c90d759173a04ca1c9469e1d388c569a1445872d2bd2a3cfa0a1ef05f7f433c06ce4b68189a569c2f70b6392954d8d7fc70a9fb811894b73e445b78db7a931705a181f3a8730341cbb50eaff43572c6e9aaf52b0f28b5334116c36335eeaca903cb1970396ca1476bb1c1baf6d329930343e8a5bf95e25dacf1f533e144066e6b9b80823def97199a277dee939643e8d3fbe2e034b8c272dc865f6f800316d3c7a3459e38648b44e16691bf4cf77824c603826ee139dc3f5a14607a74b474758262d728bb73c435bbffbba1958f3cc3741b35a64771760f905ca6f941c0a5d0266ab3b63985f87884734a3a0fc5e86148a37b2af9f8465029afa14079c011504e2b79cb25238e89f531dbed1e24217ace3cd1616b46b3cd808dddf47f3b4d82541587dc20c4fcf668ebcf4f33326e7c7f27b6ee0de554c43f87bb89e48ab0f2c2c97c6d9ef2da2a79d1b2b5016935e2d624ba25644c9fd0b12dd8852c36f20e24a7a5f402359ca282b424c2eb410e4a5d9459ac00f4fb7f7fd0a35ac8e87750f440c303fcf5bb0b2de3740d63525e1f8ff703e66666fe2d0620aa9f4ce7b747bc152211d1bbcbb0c5e04ed90c05abdee7ed4778f72b2e65ee8e6ca72aed487ed6a561b243003520054b13da47d38e04ffb792b845b9f2c6938a5826e5419152ee71f049a36b8df54684417599546b2e32168438e48bf1ab9f94fb82fe8d28607dfb5c6c85464c9d141c762f8300c9c7295a8a8f361981915d4ed54fe9387413dfa2147f6b38e783f884108c9751304c3024140fbd0b4924771863d237cc1b09be16a716c7bbe5466e4bbf0148de2539f0e3cf5f0ba9beb1577225de6cd073ae83c982a71d37cc50dfe3c0221a002f2ce61a0ae184ad38e488fc99b8eabe247ebb2b45c4ee35133fe7dcc2637d5f94718a47553bda5e6e1a86084df6540d93f6decc4ee4cd4c406ff0a7344a05451bc457fc3cb25f65c4efc935a11b1b4748b3692d3c8b1ce5ea6d94d3a44a24691b81c9993009863bb3b0ecf541abb2f3b910e4be6d2c5f8a57b54ed280e86d342a3669becd960148d12a4bd79e0cbd8b7babdbf07f4d27b23ee3793468b9422ebe4eb2cd73ec432593a8704d14c29d76f6e0a973d161e7f60654ce69ba1135c14e573f55b170be5a81b7f4d64461c55eb16bf7b9120f22be349598f2f394da8460dc69e804c7e54011d53403bb7ed7ab418a21209fa96a7340327350a3c882f07c4abce4ec665a8eca8cd845d85e56d51de7c05b08c521cdbf97e8135900d18e272ec2dce6b0808f124b3c2d29a4a574ace14fb8bbf6eb26095251bb71f248c5c7f4f640724ae9d99f9cea1a3dc645f2852349da47931904c3ee6aa98cf14b3ff549d1b01daa08f6b8fe6cad7357dae72d1a29302a3e5df275b87d6e08a27b452579df9c5732705f04fc3e4768cdb6bb0b32784ad26d0c67756d1499837a3b8ddf119a75ad98927ae9f2c9889c8c7bf6b5f8b19aee83a6ec6968ca8c8bed1e6298ad7cdc8f20e1e2fe8ea8e16d389d2293f96f90cd36dfe9b83809e7607f967bd8ba11218a80012fb93c66d289469cb75ba10cccfceb09f7f8574d1acf96362215a3d1e51e1a52a980685dec4f3afd2d438c03c00c04a79f90432e9717e5600de61739a7b87478f90abf288f4d8a211d0216fefa59384b39168808fce7d1c697b070d2e9f812c696be9d414bf2b8badf0dee58dc92ea676cf19276bc9dffbc480b3d181c4b79cdfaf27f2292ed4b2d1bcd5eabf7179f8e93c80ef246d8a3c3976cf893cf211e119e6cf157047bc5fa3bd6f462da75cc1355f039f62bf6726f2e4c2fb06317742409748059014c9da4b7a14c07e72bf4b81c00b01cfc95e031452f4f0888ad1067c4bfa8a329de46af27c2d225adb8adcf6e801db11925819ca48cd2f6a040776f4894d6cfee9f659c04920326be8a5bdbc5e4bf6d0223bb23a4fb58253a801dad1d9a9729b00e5eddc6b57b956a3f836faaa531ab582f1148cee14afeb7da87a3ac37666b2ea9b6f6f6a387ec6146c8ed8557f0e67b96087e9ae527fdb8be29d58d01c0eeaaffe26a0cc2d4b6142e70f7fe6399c8fcf72557916d7bacbda988c53870332ec58f85c981b9de6cf3552ff17e5e88ad5cd0dc463ae0b286273b3905271939c60ed70577edef018b9f596a7c7dbf3a1e0ba1b1ed0fe5790495d19ef7d143513ec744d617b9e8da9c78b994fb84fc4a9599e83a9e78f21bc28a0b4f1fdfa4f5e3bf779c0b7e2de61a0fe453f12c9c26ae7812daed1e8d272a6456ae0faab4b46f37ddbbc59324a08ed5681befcd155ac336c0174b591d37b6b5225029bae8f93bd0f5b9f8a163965559b34159ef0e536e566e745bc138b9f20d2cca1098a850d40b4e1af7117134181d6488d21addad1a478c7670df561a56dca47036cca937b2574553637bc4164180fa46cad919d4518a98923d2bfbf57f9447e70ebf323a713579f7a038e2996c34c30fa6923945aea0115c130fa0c7b6d475932ae8f9c57b366a8c4fe14349f2a97d4817eeb28d7c2885389512dafda70dcc090de256654ada8565b4fd6ca46f4f778471471c18647472cc35de0123cab0a9bd1a33ee966a8269289205c5454ca750495513ec82d224586b67b9b9c69c5d9d23e24618c544ce64594962f3892531760b360d9a395fb8a4babd4e7b52867514d1f8a16bae842f255c5dbd6e0c538e775e967cabc86781f61ea904bc542397bf4bcfce6d8e83252ac6417d9b2b820ed297f8f9a7ac8440bb2bbd6503480e25eb05ca3574f1dc30c30b971c11832b43065bcffd0442205562466ce7c6ba80b026748a7f3874f9e2acb0b121479fa9cb812eae0f4845d6409a132a25ad0825b7002c92f42e8466bb364a4225d3dd97f8d164f598ea141082b1069776fccd87baf6a2563cbdbc9d1b0e2cac821cb9705b85b33932703969ac458517845c87012c785a46c16c6a278282fc62cea8dfcd740c7e0b5461224c1dd6332ca632a13c9c13d9072ab1297092332e0773feacf9d2d449de87436b3267c185698515b8948a4792f9c1328712caad35fd1a94adafe87b9b15438d70a70ac5f040898c49a367821cb13d56ef788c3fa8d61af15e3a3570d65201a5df24872208342bfcc0e3c461caaff794ef3c6798fb050d9b4b334a52a0175a2303356d8431c6f4edaac0115541487872f2b8dd17a11c5af8d125877f7cd7a59b89541e5b117b7cd583d2eedb053d388796986d5a3f8e9ba09c8b7d75c1058c65de0b2a150bc41c5ad896ad618ae0c049373598cf3ace481909cfacc4114367288db5015095236be41585ed9746c5a81e711adfe5077dd8c8b57c95e8e1f3de39f4fc448c523bd3e7c72b1fdacd6e489dc0d2a34a39ffc6460c1cb962b7a94a30c04b5426a75ffcfc69f0c4ba934d3a3da2e7935d56d6b9079a2a97b016d653a35c2cc0ce19124f887a617c951ce4e58493b4209cc294f983cc20b16f63fd52e8451b1ad13bf5342275079818deb7e2e92fd2cb9721bd30513e9976df33a0e095f780b2de747b4330e65db7b46d48baf1b3ce04cae8b1c5e65def88be1a438523000829544707055a4ade4be62d29c634dbf06ca67c0552b9a6ad475a6c67a925eb2bfec1483af3052ef3d52cb2bd9d19050453c8703a4f51a55d4352ce8fd5051546a3a3ec8984a7ef58d3f67276b814db545a9f59c31424c679fd15952e91471ae2b88aa87542d92857d8d20107afbeab7af1999d3259d9a67de54174b6567268aa8dd40080a61f468b545dc2c2dc8d11e2b945befa88b6b1f38c34d1c99cfd8ae8c41e892e36c0e66dc6f85c5ad6f68b26023233ae19628555628e30eaed6efe37dbc8a6f07d846469a1102212278193bf7cdd9faf94537d2df8ac067cc04d3f123570ee59d2d06d299353b88b36c4b80979b65781820015e7cf2ce6f1ae0eca028195c3dcef1b5d07ee2184488d1654ae993affc64b0eec0d567f470c1f2a3b8310b5cbfc1aeba09f421819cca32d16195c0a0ce087c67c291f11ab0e9c25e00e933f7b29feb7f45a1f95ed7a114f68d42271e352a0dd22a58982878b8d98641f59b13608f316b4b2d72973e34013c9698d2127bf3e998c1d465071059be8443004b990fba07e6e541941419ac800b4341c865e68a9a224fab5f9dc0f2f9beceb049720847f558d98568beb0301acb5de211fdbf17a8d79c858fd3d0ac139eaaad9f84935f8329f0a0f57b4ae955e4ac26b6c44dc4991e6f0bfb9287ae938b9ea055b9f72a3ac2f23b433430ffbcbff8b2bea1dab7f76192e4adc02f2101ed743171f87ecfa189a7fd5bd2ab99d4c20931317bac184907cbb9ad460e2ce62bf207fd286e7741e7d78f443b01df2756a749173c0c101878e332010d6cf8c8afe1cb00331049a045499806597afa3ce499a279cb42c7eb1ba2f6b3fc93ac32e008248300ac6e4809c6c1aa1260129bd2a8e55e1096644a5acfaecbfaca71a92631bb8d778a0dc19d16b23750f94ecd899cbacff3500fbd9c34014ff1586fb7e922372680f14f91670112b5fa8fd759723dc8d35cb7f2cd4a979849c886cde391a44256032b5c42d14f892df868d5c7f452b87233143201cac11ac0679cb4b5867f8126e87e5b5c41c7c1a632cc6fa076a531b460affae2857a30bdb6e24bb6317b9e9d1733746521325f288f05cd6a62fcdca2cbd070f7e38982479c9fbb6df86041c47991d1e7d8580ebbfa5a18b01f2061435dbfbcc84db8b766041d2b6344f511a1f4e29769ce017468581278f715d967a0fcc307dd29cd7822d3a2c41e7e03b73f716cf1746bf53936927614c9acee96bf912679bfe0916c84f277ad280c52daa3d979058f17fb062e90ce15ad4c2998aa052e39f5dbcc3c9349e40f0958aa23d7124ffb423add83563a62a22c5d5012693e24700781468f58c0301247c8d33ae20636fc153c6157b87879e4cd472caf022650457e39c60ed940a5dd6cc694c6cc9b78309185502a5c335c03187285147fa4f9e1e06d166120af899900b9b7709dbb5cbe3d7d71a648515426954723ece79f686bb884fc2f35f7256d890902df5e4d29cea18d8e7186bca775cd2ccddd4301e60c8be641201efec182911d3ebb1739288a461b6d331e5a9d19478a4d8f9ab1b9ece3faaddde5aea5009f5f33aece67a118b391d7951615803a8bca69acf4972932472a070e92ed180e3c36a85e8dbfdba07055943e78d496ff2252ead95a9b800740de195b2ba563d4ee0a66735b28204b06d16cd84c7f2991938c97c0d2a50492557ca96ababdcf7b40443696418db640fc6b270898fd7f1866de3a09679dfffc0e6d80e6461da22bb74ade6f45d3e6a8da8d8c786638e0bb24b2995c1e6bb76cf3196675d8ad240bdd8526a572e3f8ab299e65d0bd1796a2546f7e5f01f7750b8de822bf77559f44395dd8e1cda53470700678b7a682e8f67e7dafbd1729800063437e6d2bfd59fd533bbaca6001e220372c8ed627611ddf2a44f41c68ea2274fd904027fc8d9b5fb485960932e049e2077a6ed54b9c7e84e12c1725fd20a18fe4383194f3edad92e3a532454b28b2df6657e25b171c530e2a9dde7fddb546789fa4195d1705d7bd68015627b4c3653fdf2bb01095c7e4a48eff13d2108f5958b63bc02a71bd6109cc03cc567497aa29f75fa19ecc86786f94ba7cc89f982256b264eda207fe929d96115b7b938ec9c538597daac4425897c436e20791b6e89b1a896a6de3aeb4a24e95ca3e1a8f093c29820cdf86e1cd43a6db0c37eed3f54f7611fd340db70d3f7df6e2461081b4b6524215e2194d1d9bc312c401bfd68f984f646f9f8bffe69daa9c6b3c7d4e105a3c02625e856c90c8a241d00d0ba7ffa12bea8755677086e35def2dc769dd66516e28b9f9d32870f2cbd2f902da2e8d90950b0fffa9f1373a1e57ef90dd16fdc3701ee35b0a670340c72b07883453808e122fcd4457693fca763c7b3fe0e11fd7cb4aa82d321393db1db6c24922fe22c22cbe8bcd7bc2e7baec06977b7b2612b50616cf17541366eb55d9f2eaab17b9556a200f411ce37733091d0cecb5cd1f86a9e922c0764fc497f8fe5e16d8868e6e54bd214943b4375c53e9a13b96be8e723d2a67d1a3aff7078d8ccf73b033e93673fd8b8df71d6e5e54d3201026e2a7a0494367f1e01b46649ceb0da93b0611d54e4914b44006666094414f126e1fb239559beac9377bf8d6ad82e06181e850726e0783672657658b9a9cf8ea755ef664e99ab801afb7568449bb10438bbfec3559a1a14db2f8b406ee4de1404388bc4a8ea8984050b7a897f7fd64f660752e47997d360febd19bfa18bad3bbe1834c12cb2d532e2364363640b1a52308f05ed0b6050a54dacb618fa04d95035639eee52991b1742fa4478aab3d9b718c1ac4f7369fe4c585cc50ec0f6df1c1aa90eaeb2f3c7aba7d6024bbc00a0e89f3d9a8e5a3b58d09f6bdae3aed81ad9de672874b659776a7138116f00780c612451751c284aecec93587c4a0c0f3923e11c60e2e53086de4fbed635109078ab58abb08b562f26dad4810da47122a684d3374c7bb82f826193d8e53074d08241acbad15e6c4e9325c394238576a8ef7715563fa1b79d06aeddf4a303a5be95ae810d5c07e32fbe77f100425f7518706537d7def75c0f60108eb0b4011bc14f5c75f1b51a5349052bdd33deb4f4e7d5f9ab6a9eef2e0d4b31368b8cdb5f7efbd61c2670f8253103dbf8cd7d088e9d8c8ef05cf3eba60d048b65f391d4e94e4795b40a1433e16e36e2d42b91dcaaa000afa74d828f4c8548798d77678031c5af360e1b135000671adaefecb193c1a5eed620aaaf4c9a1c73962d85628fc16b9f116ae7f2df1a922c4eac7f50e07c05838d0cf2eea60719126bb6bc474620a683c25aef373398a5f798aa51f42522457b5ebcc4c51e2c31a164c96a5a35d80d19c36eaf64eff2e8e9636a031fe46cfc42a5c08ed73761cc9d1bd63e2fe14015bd8f1686e086b1f19e195c1138a0b480560ca8bf7964506081eb5da63cdb0146ebafd3245e7a7e46623500fae2ec817841fde5e540376083fc7dc0210585842720803506134d805df230e92e832a6c5a72e4088ea0232abd492dbe3d1e63512cf8baac8ac36290aeaab7853aaddccd9d8579711a3daa17530485a858fc06f0cee0b9ba40c37c07cf1813659dd7962db7e608b0265d5eaf0bbb100f1302f2db835507dec6b7dc5e35b6eefad674c92540012c6621a3936a4dd94762e9e79979f0d21f9a6b05161c5903a4b55329f82cbc835ed39a94fac18ffba6444bfe6d648df47b7dcc3fbbbacf8adf45b24b95ac83d91ab90fa5f75d487ec703c7dc0123b118b5e958cc3fd1ffb8f8fc627e443d3c7eda56ef5b1b860dff0451dbf4d72010db396daf2f14ca701a7c79f22666575ce1386db828c9e456d8e89ef6cd71f21398709b2e0ccd3cb72be41edfc88e735bac9f4df893a4f0a9b90e5ba6ea44123ffd15d253b9db713b69ca8b89f92f19cf4d89783f201f237d0bc0087acfcff90c6573a3becac23073509a209f2ccad31e20819cea52aaf5473dc835d0e2981eff5e249fddb413d3057cdd7e7dd7d417ced201fc98afcafeaeeb615457c72f0c8f63a3172f0a42d1585aff15a48efd5057dea547a8ac11a80a8135f46de1e74a430279ba2141c1c3e2579956a1b689255fb2c5deb8bbf189f09ba08681c7634090b712f962df33234a1f16d203e319ff3cdafe5247640cfce7975b9b31fc25982efdf9455246f967e5fe021839a9225675d3b922b348a6a95600a1a30cd4a0a94443b73e7e2d971a4c90d599b15d24c3a12980c0aace50f7c2642d2e60f5570c9724b73554e79ea2f4542bc71983b3bf3538dfcc9c59be70c33e58adece2cb2a8e1d83da64f962aa63d45f20c0c131b1a8ae30a6e69f319ccf0bbe91ef018fab9faa978e2cf79589118dfa47557a313371e62dd037f34cd45c38b98b05e5f6d852388cd12b56b9d793ed87ab263334cd377d21e8feea72dfd151f3e9b01493593c53be43de9b221e417f81bcd160bee75fdfb741ba0945e7e4f3d84e8c0207a6b498b646b52960b5d0b0730cd5a7220a618a588ae7c438b50d7ae129e822a63961540f6a4da61836982cc60bb16b20aed309702506afbdaf9173a8fc531b1199b932241f16859b392e410549e3211d5d2ad9a89095205730375a8a466b4fbc4022af8ee59e5c8c15f999bb37e95d8a9ddf776c5e21ca97ff65bc2f888f3508a54418ca4e537f4d55809352664294ead9776f35fe2b12f2658304e3433d6fa961842a40c9c472618069ca65556d5bd0a8792d8ff12f7df8fb35c15ff6f45400ed69409cd86fda5b1f0bbb5e75f816be736b4ef4c78d701e38e47df024528691b179f8390ab41bbc99fcc2c858415a16d2a42feef1e39dc49725974e4bc67bee461cbdafd14fcae889939d1d6cf7aa7c4eda6ce8f0c06b9eae6fa9b4eddea87923f80d5bbc814c71568686d834796c513074627d54924e0ee72921ee8af990c4c36263d73cf734e9993c3c733f4524382fe8cd169dd7d997c9e89c3593a5d943bd025dacc32ff8b3ba3b0a98fdf97683b5cdf93f2d0f82cbcf347534a861c688694e5746ff8a2c5241f99d93e0f4b7e63a8a636192a7ce0d7f83495629cc0d1570acfd3032943467b8fe520e98c57cb256b4b8385f4f3fff536b8534a832f15d3bb49be31ceca54697cfc46385fa498a72c353fde3644cf3d333c53a943537c242ebcffa1ed1e38166d4613d28f192c1173cc35cef65799d879265e28e5125072eb915cfa91293aa9ea2b4f60249dd18cc9782cfb3e14a4ee90e03c6f6f56d7e47b2e9ee5bfd2a14b7b13c189271acd40b4a1eb0d15633aa6fed0b525ec065ba365fd8d098101b723a96632f69f776954beaf3bad842ca1284d6091f2610a22d63164f00fde9ec25afb8c6a4f949cedf06f0ae4839157229d04f79780d84a74a668cd909edf920b17faed313b0f71a13e4e1aae3647cc052dacfc907458ad9b3b919f365f8ac3da832cf14f6216ddcc63e348616fab7392ffccd94579ea1ddebc3442a8f9e91a77c61b018b6db4cbb88ab6fac4d5c734113cecf57b3595828452da1eaf15047f29074f83ae04ee20abd95099a011a2f8c90b95b8fd5061c2d6240a9b125be1db396e4fe180cecec5ee78388ebdca44a503954d8a927356c61c5b4c219b728a14ef24a381c9745ba2c990f640e3a9b62507019fd301467d769e1e2818100307149351d3cd519d9d9f83491316da55ff5e1d7810fb1370ddbaa39627e83ab55ec16d1c672be0f29da566ca167a6977273a8d222a6a909a7e7b75ead0f9e1319905c5aee8053d1b629ab83c87d35ab737a09e267489406b699f5a43abb3cd1fc0c7e22fdec231bff468c2c6ef8873bc367799ad76beea8ca5109bc9417fc525d9ef0dc6cfca84865cf5cc91d4037d2f2ca9c6deb97258a43ab47fa319c392eeee648e9b4585fe1aa12b1ec5c1ab3fb7211d6de2c40e505c317550fabce8fc200610add7c75b6620cbf0ff893be883fd1ebbd6e01ff89b5c913a54f5b057cb642adab2a2deb48643e32eb905cc220fa92a6b4901539a014b62ead5bd7f77c76161aae42310f82429f0cc9262fbc1ac624e150d6de75b49d1ad6f1979b0afb8c0b3688c83e88f097afab2d3c8502d22d091a16b4b63a23d9779b06952cc69652828fcf2e9ebe1fddf0ac8c35e54cf399cfbf7abc350d9a345ce950c705a0c9742c94f5e7ea356c8ff26f6ac4d8e0db96e940015ff35674483b4064cfae20016b69d47186a975731845924d4bc875069ed65a2f0249ab4e8f734eb6f19edacaa2baccd67d44f4a0113a83a84d4c50112c275c6865d0728564c552cbef4027a1b49ffca95e4549900571d2004bdd2867c95cc551dd0052b582820b281b4a9d130b99d24e8c42daaf6f5bfbe9c9e36496f0d7335fea51b25b4349b6300806a19b2238ec5a99962e7ab9896fc949f77b0b3d271507105d27e3317d0288281cebb6a2edb931f8e7cb7e7e6abc333ea1f250f8dce8cbd18b19e9d79c7ea51de5c1d1d838b7894c80281718705f9c3a4b60f4de693d32c0540edba04878fb3c09da896caa65b4e727caf1224ac888af8c2d63384c70c04f507d4525e1800f14f17c49caa352396b272a89265a956d10ccde18a10721f8e0f8fb92c2f822652b254daf6cb3fbab4b06dd4b9f1034ddf085e9a19319cf3127c5f051120cde82012dc506dd6cc07f096f59b4e71c254fe15fe68aa904e72d863ff21c9d8022da1963590c973e5f2928990651b8cef52745b33b303d4908327edf8731c0029df1f67e900d2499063e1b3c89ae6eb91318a0188e4eda6680e4941d165d24048e5e0ac800a4f01d742263c24a27835b0d8882f826130aee0fc8489125eb23f69272d8e80150a42c277aa4c2ce59913542fb60fab939493ff3321ea44c685a6938d4d357388c9b558ebb20969cc102d861e5bc68ae2e1fecd9c678eee04131ccfff8ac8e0cd5502a184899e62bda72a4d8dc17fa7b7de96531fa09d9882244a24652a70504b76d0a52b76319f2124b3b2642e608b78540498a5123ecaa780d89aa776544a6af3c76dc9c0eba961506fbc8beb91bd8f0cefa414079a0ddbee6d39adb69d569296900044b0f307e3f30773ea403bc562cb008056c5d9e88638b10a5f3272fc2b25d366868e724111d522df6a74862c5b5cdf33519422e410244e14a631fcc59d6937a875a28fe052bd6909f1d19979e08633c5efbe9d87e27be95f68fd6238512a65cdfb33736b0d7583f8689d9d345b10a43f168a745c62042df48fdccddead3005ddff8a456aacc31ab4b821b9e633c3dca8b03fcce8f989bfda0117653d1a42bee168f02e669670d346c7a51616d0678008a426d0b50fd04a19a8f551df012a38df20ab56e6334458b57f71db4c9ac43b68da87a54a0da374ba6ac0ba4cc8ae1ce20e03e472eb065109c7cc3110f9a1b2cf3aaa762f59c8e5c431bec70ad99712ef1a4200922680654b860040eb55c79045acd669ed5d07463fe439a1a39aacc1102caed4cf4c783d82a6532f6416ff7bd21854a60b802a3f346b776f9f75b7d24c2c9185b0c5b781b60e0e2704a40f1b7f666d561129f777aaaec15a84d17eecac02313ebef905d8efa6784f5167bf1a537e66a187c23897a9945e8adc15cbb83697d7257f5129ea3656dbd0d5c8d91d57488aaef6b2b346390798262eab64def4d1ca627d33ed6092067dd1182d23cf91ad20a6e661312d63efb55703fa1105ee99541e400817e20c9ea87ba1ff67d50b936fb0dd3779f42e32fe44e26a9cd52bd8bb814e397017ab06a2f6f8a76bdacde4c0f5659c5542a3b9bb165363cbf8b37448b2312cc0a87727b369a58bf884dd865b9d05f88bbfc86c34f4de4d68138e5743da714bcf3c78e725fc3015d57b456388cf46b3e414a733b0070c9039d1c567f42094fd647cb72f3ed922accc680d618fb3ae3528e948f77976649407d75e8ea2ad24a949103be8482503b7a3f33b6ab772c7e61fe5b19ed56a6fc299d064b297a8a9b9449f0cf8890b59a023c3d9654a34192f90b1ec120d0bb380b962dcbd193aa9941ed133494ab1aece1481ee398e202a7645f501396880ba372d35d096718baea29f50b7c1d23f89a93ed483d0cc5f85240458f6fd30f20c50bef24725e7c23f4b8ec1a04a6bde739968659f114b18afa29682d545ab882f3134414a52c208e5f7b4cff7cb5bb6f3065cdc4ae455743157c31ca6f8236bad4457c9e0054c84260eda20c32bebee9158e0e08c31309b94aa52ce6f00dec20ef0ef331126cb5f8df8c65c0c5463aed5f7bd196ee025b460050d3f3a4425b6d89cc326e59d88c09f1d412cda2d0b20484cbb30f7da7ce81bcfba180eac3f6f95b29c4b6552cbd0e6e61238369e2a6971bda1cd30057d5e4f6f2200f4207614cc99424a982edcb6e9b90327278f0ab4d8b339971f4a703f834f0da0f28810ce06b97dca8717029b30ffdaa1b6e8f12706974937ce929cb240d643a013cc56c4ca7a157338f686a744216050ea9128ea82cf9a5445c34ae00d6c8ba75cd5901fa044d1efb5b4b001ac855dd9cb73f726d4c5f4978bc6c2f07279ae5dd7890606107f7ae30637c8d2f09599e76174a50385df1ea8a7844c0bf765756b8bd1ffa2a393d8fa3169164199b8db20b57d7ca81c87e22ea4e430592599a5798096c51ae0e8b3da4031e2772e55ec2cce77c23e212406d287cdb501837b092ebfbe9e9750e6d32b3a76739c37d695b4b448c0ec1d1d533b5a29242c9a7468334f32d34179f60096282212d73ca29c6070dabedb97dc911125dfc501f0ed892f38dbab3fe57e01c2111c0750c621c9d70913043217c888feeed7e0a90f4c35cb83a070ba1ce89f59fd4c9a305cbbe6c287ddd91a2549ffa8bff9bd4b7ffa34af376868d9a49aa200f59a139f87d8b9c8f31f87bb4ac7c0b79f2da410c6604e825c1dddc507fed261ffeeb9c4cee00c9254c1543c0daa91d4975bdc206ee54bedfba615a5cd7af6242630d5c8b93ba5c7b2aa89c6f75b3ba7ad6baea2fff0f2971aeb59a27c78d8f16f48afd2d0514c1015c46d808f4086d7eb4562beffeb0c29c4d4f0e49e5f3e6ee41e8f0b9c8bcb1586f64a935dc2390d59d1409ef83d614afe492492ba97f1468c9bbd9ba44fe97d0c286626e9491ef0fef88f67714eb9a3d2323bd55988b91f6fa580a970066df1b0420b62bc3efb29e2a09944f386dcdb47777ed4029a5da29625225d89192018792d7f6f5d07995f0db2a45b054d929b650035b83d35a7760804e9e076eeca +MD = 0dd8d8e0013563a14a43b64ca9aad42264d56bd0a99f62ab04853428 + +Len = 88152 +Msg = 689de0e619a0dc240719e001ef27a6236b4bb6c266117c67d3f39cf49e7a8ae5e3a655d55f90c344244ea39790175f607fa7d1e0c0e557cbc6c42a4aa067eb462c887fe4871a1d4cc72da5afed13348815c1f522f0773a5a74a4cba6d2047d56a90b071a798612c55a808f50ee624d22945fcb8ede0f4b9e465a270f1c98689cc3f695801d1cc936440d08837b4ed3b6644afa2f73f5b21ea2b0e78d666dd4a1e213d01c5b246b27ed9db94f7c1deecded4a2b0a95709862f16cb32898c9e8eb6f2861f81ce51f20bdf74abcd918c5ee962706292dca25f39c5732e99bf5cc04d0feef1c46a80eaa1ce562d27a8781a1c9a832932449805809390dd75539a9746f5d238ec3b55f4c722da99a47b2496eee9658506036d219a2daecfbafdca7c1b30da55879543b8f2798c91b29e046de6bb91f69cbd942bfce01755b9128ed7503d51c8252cdcafaa3ee675d065ba078a9d930e54c79f9d1f4785301e463a417c97e3112356733154ef72e69c8697ec410be32ccca5f1ed77e052cf58ed6f3306cd18b12096b9f68917ac3465553084b092fce262fd4da59d371a93d79c903475493d389b821357cd241d1fc97616894faf6acfc621e55e05b8371e38b83fbe4e98fb08029d11ed87a12fe9474dac3284cd973554b85b6f37e052defae4e0490928ccbfe44c38104f2b6f215d608448d68a1cc3ad253261ba4bd8467c97046d1ba51cb0bf13f8789a1f55687a431104db4165eb2dfceccdf35751f55c432e832c6a759af188c58eeee96d2f3c69e52f09affd2c55a40d1c799f3a5c087dc13381f561df3a1f31bbb43630d60239730fc8125cf7b2bef5c5b3800bfb1f9b6ee6d2d26bede74bcf9790722b0d6a563d2fbd151fedd3a2496247b63152f0408a25858dfe5797a2f19afa19c625d334c6174f14906f26f26a6a9c8e64e428f195681094839cb9993a4e57b99ccfeb59805f04bd591c3b33fb572884f12f283323371a62a63dcba32c1a3fce196c01490e5f646bf4456ecb5eb0824670b48c69b61af994d0ab4c65299728c3b67ac367c2a0e4acec9b504d16ff202f6df4b419c07c34879d75ca33c53d99370e7c804a4fbc0bfc9c8e8e1db6ab88cc43604dc7d4d361d7671db3b3818617949bf1e664f81950e79e8f56d1b03e32998b97980855c8f7e0b8239748d1090a78b97b645c7e4149da6d2e68ed863fa403b0fb413fd5c56d502af7e388562f18301169687524bc6d5172ec32e5cb1853b76e1bd7e2d75148921a2b36e6637097672e5c81639de311e96a39234ed160d810fd79aaa5dcd4f023103e0fe79b662e9a5ac54d8c4c7dfe1e9d95d88d4ba197ace98557ed58f92a8f9790bcf06088342631240b73a2b5884d9792b1259c4318e7dcdf6e1dce162e343ad3ecb5554f4eb74bf969ae53522712e2b05bac35ddd25e21d83bdbceb491bd54780d9adc33e4aa05c5e680b0ac70eb096f2685caca6a7c73106f9bbd6ceb878eedae1587de8c9af919e0bf5d5cfc52763fa046ada137cf2b0867d22ca7a22f44a52cc9ca97ace6805606aebbcc0fd5a392576360ead0c2b430c3139eed3c11104f380c26f7cc39461ab6d34e7241d12c17ca60871fac03c929ffd476b63fe97c4c2e611f8770ffb4c88fc1a7f828f17a3067c282b84feec4447c99669b23f4d31c9e6d36cf31a656ffdffe3ac63ba3186cbe1dd63d32f02020c7d6c0f46edfcf40f694ef3764c9a71155ed8954e062812d4bb70416dbc4773f7011285a9716cb59c55ccb38a0d61fcd5014163cbdbc3f028f429eedc0b83400f3dd0f46331651b799493d7b6c584b547d1663d62a1cbc8cf725092a8867d105d19ed84fa97afcead0ceb8583dcc94672b48e4c9cc00941d21f2d545794ff8ce77eb35cf80a117740a71ee577baf9575e9303b800a0420438e1085d739ccf5cb75268a5e5f155be3b4b73211cc7dc8f14570ba817aa41b909a228d58408b627d57f558647b6414aa5e2315efa6c39979be6ef446744cd074e49d6e3103f7c9547ebc228a8c09ec48653a1c7970fd916fb2af7b67ad7ad960ebe5aafa1a9e94f1780f6b28f7733d3e6860b817d1a85b53d0a6a23d8ccaa0f51e9fc62beaec5fd4d243b4d8543ca20ce63b7b734f3031c686d92b607898c1a1fb20424f0b6d747efc1d721118c295245d2ec8f42041bf2843db59491781b5e8101b91cbd29e8d3073e1355bbba191254bbf33131b397e09a611ce8fe001e847ebe6473b06fc04c9c8337120b356208020614c6896a3e8db0c10fd8d4885f331fd14d504ef02758b7788b7f8a66ccdb579b9776d090d7a2d145d58c9d7aa4146b22bcdc2115e59f5f0557c5bfb31f345b62c468908c2bc602d5b82de03db6cf6a99f93fb044c1ca9c12e20b328522ba1744e3c550c802a24d59fee326395d0b241f4ba083e685817687757a6c459e1692273bb499ab23ddb9b9f0d5f6d66070a29afc272364f76bf64c583af4595cefd4f5155ef29d58204eddd62cd87c89a7ebf452fe1724e0312349d372522b21eee694b9ebe306671315adf80f54939e580713964ae790077b06672e4a0f21b8bbcfee6f82f44f195d15129da7f383682bffe10f361c0f36f0a58cb0ebb2a5e8fd97e97f4baede36a757f20f1c3cb4afc6da4407e73d0833380aa1a27dc31e785c476f306f981c8698e1379495b88f3bd4a026c488d2e5c7fc3d8f4c27cbf43182e667cc163b71d0d9bdc7753aed7ad3fb596e8f3f630dbae4443cf612518edb147cb899671d46de11f38cfa3465de41e30e04b03479e8d4972992e866dd563ebd124ce08bc80176e9896c6aaba8244b35c7d06f919bdeddbef478694af7b32123ae0ae8aac40c610989510fc63cb2ba998ab9147b52579c00abd5c3e6280d4dee5bdafbea97cd6718fa222faeabf255b661aae61c25bbda0658933c63f7cd8bc71ea45f76cbae4fbfe5c7138b7d4ae63553882e9c9c725f7702991de9ed59a15601505d74e815e3a551270384382433bd683c35233fe4f3fcb2cfae9f901a57420bc73d0d746ce973462c46c166e706f7a9ae40d8977a5e3d6f1d36ae6b78773344ef4768f91a2ad0cdbd266b8efb258b1dc69ae32b9a67e1416bff3e03dcc7d3b5b1c3aefe876e65ecc2e9aa39c85820cd6d8a6d83add89130a14f76e2ac11c765f6f8060c1b7dd9ad24d8a5eeb6695ebf89579e281c77f445a76f7e8f521bba5ca42f99aa3e1ed518c93b85352d1eeffd034a9da14e0db38765a77f9234ae52a3a4b08e60581b01349a5a71969541788fc4ab9376aa6175ffc43ea174bc913741dfc30eb6d13a04097f7c929a5698a47bb3c2a7309a3de3b3aa7e0bbc508e123e3cb041351144879f61eb10c8d8ec18cbb7d602568467a4ad00ade6f25a6b8ba3a2be4e64800031ff26ed12a983047f87ba30cb70d2a861f5af14599e41f14977fb365ecb8738ab30b8cbc0c3c0aa7fb5a3192b07ebc8c2919efb8d496de8f5c22e6098f38cb29c3afdcd43a1f5a4c05f5ad74aa2378f6e8bb4a9a97a4618368d23842563f937ad26df3ac3c88cbbeb8cc6b24fc91ec50eebdb68d6ba3448b5dfc2ea2ca3348f86fb455c67c2ebb7a845d1f46204083149b7fa7e3c909f421ac0f3dad63ca782cec1167958157c609e9162e3addc5d9cc8f9f8340284efcc0c389e9b4bb5b8d82d803cdabe4ca57e767862c955d885ce33b8bfd2511e8caf3350ab76b296d1584d419ec7c0ecd0d8d802b7ec8581e98f31fd36a050e7deb3380f02b3336859ccd30b2487867f64376a384a95635defa76acf45e628664e9fc37e8b9af8b2b8fa6ae7b664398dc963d721030b17f600dd8736d4eb0023423d7ba32f7226fc55aab8dc3ca4019c6624c5c5ca98cad485fa303acbf801a723530988d485e8cf9aa665f29e900536a542dd2d8882a47de4c70ce4125552795aaa1435631964b1eeb51a31c4706ee2ed84c6602312cc7b8709c43b924a1d224d0a45b0c577c22db99e7fa2978c6329a7b3286685906b56d48bff47311f8728663a4403e0e72bc8642a3b4cfd2b0d913997ad489444a89435146611d81bba150c04b8369eb0c70c5521f738df9794a40cf8fb0d3a75acbf116ba1a07087de70a62e4a4fe61cbd80f54b5a6c26161fea889ebabd5e6d9e5ecf5957fddfab1ac29e81a1589f7136acac6f0df2b8f1d6ea15519361e872a7fad9a6302e0fcf97925bc56658b3f85919e357b7d27f70e22c1cd82d00bfcdef1a961ad63de63b7d6845c2405809f94f4e00c9011262da6b3803fc32a2cdc69d466e7cee314e36f3ccc43fd85f89bc3fd36d8e92bc487998973485474ff9a4da07c99623132e0a21474006d5751b885231906e14d71b9392d0153b16102bb1cde30f2e1aea6dfd306021dde0a2a7a7afefd3302c6cc271816b10e547ec4b339f64a80d7ebef55848a0cf8da1ef155f80959d9e8482255b8cf08c4d82ec42737712fdfbf598ad63908eb3debf634df9eaac557ec4212c98dbe8f1396e17f6b97e7474c0277f7d6531b23397e30738bc17bb65999451bf7297dba672b375504ddb127623be7b4da85394b882b4e1bcf22f4a34b79a1bc62fe84f15c0fa0e3876b7746ced5f9405721cbdab65dbfcc2e159e12aa081862918f5cea5eaebeb977d3a23bce6b4d38e0cb7b47209ff5d33d3be09af1bef9bd075e7dfbeba2d1353aa8ba6d0d6653fcebe4a017736c90ef50e86492bf18d61a38ee50bc8f6698e5645d3850e851ae0aecffe2d20b3e016f2dbd82a06ea02e08baa18d82b67466586963949e0bb7abf1689fabfd74aee7d1081dc33a8cef6206e13a8d050d56d9fcde5e679ad3f2de3ef32673f03c1984b394abcec7a65132a360fbc7b9d0885441279029ddcdadc551f136c350be18889547c9ddde277fe05c9e77c607bc7375d3d9bb43dd7542f1b9074322a5972663f4960aa8f49cb62b911e3110753db2bf0359324e20575cd3f289de0a6543cd973003e0889182ae54ff44aa3f88b0d0808e4a97b13ce045fc8d1d59f2f64068a2f605ee253b55c2fce5c6659bc8d2376aa3125e1599acb8cbf7265974ff19a217a53075e768a29e93e307d5cdabfe51fe0044e7d3bd190fd2bf395ef8d63be455dc182a479fd59bba758d8d4da8b1da8b1456d7841db1c59143badd071233b9ede9018dde478b34c12bbbfe8455891bc26dccaf9f32137498334f5618497d9d508a90e3140620045864379c0a18d0a0145b2ad29da09a8757ec5b5cb4d285f92e0f4afc71323084d0cd750857994501f18ad5e307dfc398410d63435553e977c705942c8e823930dab5f8a5f52d42bbfa7b624356463b01f3e50bbc82242473cbfc10e5b44c9692d6bc47075b6b56389f8b6496018a4d6ed121992ab3e9a387ad5125ca9b17f515454ec4af02c9fbf24169313da20297397931a010731b032ddbb3674dab6ad152a6fc060f73dfa09390637cbcb04584fc4c93b500481ebfd0d78139e15dcb97b59c328f9b36f2e076fd188b85b4d9b311dbd65c6c9b8b260b314932282a90c4c86580d5f4c4da3826f807024b08259e349767eac7f5d6f2477989d474aa70e4f5b3755d8e95cc241e01bd655f52bf92bf1fc6f4a4df98911000b1857955e274e8067eaadb226f10e6ba8a19450d1e5d2bd5821e85c1368eff775ee988a55c00f9df0b226d03299afb831bb29e9fb84a054917bced433748603de065352143f5c59db978a6b0823ed6ebd0b5ce9313e5c5faf6444dce2159ecd4f48cf14230efb5c2f8023aa31f5903555797578fb7bd085bbc6919ca6b3fefccf9c56f90b93b44ff45437b6347960b700edbbbde2a3c26fbc88fe3d0ab66f3967ea2e29533851da33fd0fb799162599c64f77e16d1efbc5ba92d3e79386b92c1e1aa0cb836498a4f362f3d4e933a686af87f20b2555432ebecc58c1cb8ba47cfc14f408237e53563c6b2a35ab3aac24c47e716490ae6152ce1ed4f4392df8d209c07207bcf048971600fe036792ff1b0c1a3f1438921fdaf57091a765d57cd54e0762f1d52140108a09b566a5a367148f44a342a56a436e38aad503d8e9f92ed2cf0bedf77902699f6e9885eed5acb756e5e4175d9c96b5a1b4e93019d337849d02b624a96058495e17ef89c99095ab68e34bbaea92e05837761555b0f9fe80b886abbd733e0858cded0299bf3ceb99ce282053d4b2e9fe02d8a09b26c516ca2a4532e1dd7bdb3ff7d618de574176288e9aab0ca16678500bc3d429029d4609fb2593b8707f99a6e1bb7b801907fe01b223330bdb1557f6591df728cceb57e534101569b3b30a34958571a68df74bcb41aa027809264c97f4d052bf0d161208dced011d2f7df5921a1a43783c77242f44165e7cb40320dbe5c22d174b863c17fba49ffb6a4624687864391fadf053d5c251903f63139b6c33ddd05711a3a0bd9a1c372cee775d5db74a9ac368cb9e64c342dfe89ebe84efe60782a8e4d505a0bf3f11d743766919e0b3b08bf66ece8550d1959fee6ca50f072a8c324e84326875f47525efad1045fb89c1a0de43abdf6fe6f98ed985c4729d2d361cd618f0bec123aa3e7c8219890eb3162aa8b0fc1b2b6952dae971aac0b0f8c88f05f9074aadb4f949725f4e8c2319f750dd1f8be08942e9aea6991fa249738ab2618f3fb34090aa6e57ab75f741a3ab3a04f71ed7935a06309763eabf6e86c4ae744360a1829d05d7b5ce577171397c11a5a07ea75097f0884438d5c12a19bdaac67b31be7cc451a91330bca3bac3b0fd488273f9c8e2f1df3581a64d8214becfdda07baf35eed80ffa396c34242990257605c47504244f5df3a4260e805f0f44431b061fb501e02ff1512ecdb75364b2b6913bc20b435329050b1da92be2f83280529ab405e7b23180e0cb167c2974cb918e9e89e529456cf31c53c98b86c1c11aafff162c86963e2f4e0cb67a9407998e64b6719bbc6d4d46418f14a931b1189b99fcee32c8d37e8703b656b97a6744357b4b2334e612f585e19b328ccc11608b785be42093b3180f67949d42c5daf30e3b2546b88d7e8b38633dcc3c4029c070b3e29ffdd17c344fe26d341c5ba9cea20d0b83309bf738e7313e8ac2734161d4b45ac8d16977fcd0dd08c24f261cfe7857c682a3f7c6241bb26513254fa16b3ee28a06a543ec9619be2ef0e40c7aab18821fea198933765b4e7c106dbb910537a53c028047232ab3efa766e2f70dfc0bf7db649a398557306d4928a39e5857466536646a5d63e124d63bcb51ce1b1ad81dc5972fef06ee21779604cee23f8af38a41d36b6df6e2f6ddb2c83a79ed2d075ba42cdf93fc64b6d4294bf66e8ec6c67c25f78c5f2256b06bd304a4dfcb5c211b3fcab30db0e077edcaa6232a8d3248a4aa79d41b3065dbe7672897eafccfadc45f1ab1456a8bed2843bd5efe83f7006898014c896836febb36db1b81caaf33beccc3e324728c9fee5b37aed2ba3c7631b636fa9211f2a14e08c6398c7b243b704e6e51900f0c15a8d9bd1c8e782a3368cdc1e81c74c04d08a590f8f458554e44adc302728a33d8bc86f6af1a06e9be73a5491e10dac98851d5e2619fa96bf3a1b069feb32b286f942a8b6f5eaca09fbc0677a2578935dd915f647a76b68db3ef21094d393a1462968d236443b1785fa9b8f37ed7ca2bd1300cbd4d61c6e41597c64af8eeff1e3a2c766797af5f9885a48264ba7ae4d3ee96a496e2492398a1ff67d505b9c26f7ebdaefe0f8bfc2899142e735c272156bb2cef963f1413d0df90ce517f81ca2eb6b0fe92d4c0d152246182c76ec6c7dcc058b4666eacdfb458b2c2676b3060846b6f2cc8ef35263cadf24709f73e1f8c8683bdad77f7cf6d93ce0abfd3adcc992361004a67d1430ebc3144e00079718f9416d01460df2a23184a6f00bee0569469ee44c0447e6ff1d98543f5905e050d7277b643334b3afd7090b9d335b1469ec27ebed18f23f30d8d560aefafd5222da91037e1f82245242206b0df3f08e3deb87937264fa717895f0d637765c61117c0481a96b54e94c0b6161bcde4cd767dd24878678cf4238dd8101435bb191bf43f86290c74b66ff8b527c4442ce847a29951463b4ef15f437ec8e5d0b8b686ecaf342ae83c421df4a6a071ed20419e7693fd6c4a9e8613d1dc9da0f165869a2697b9e6d516dae8dd11ebeb70c7c1c3214ab4b03d839b865f77f80b3fc86fa1cb7f7d2579086616db7e6ffa742a4efdca46dfdcbc06180116d93ff063ec5ae102efe8ae7c1dcef015769465a14fd196990de4b66e2ee5cc1d89dc1504d630a3f470624b875afabeb480c2f6a04033d4b7292d07fc03eb2f9d0f3542cb90d72fc88953c242c9d3c8df25617319055a004c2220960d8d1072bef4b4415f2139cda7c323dc54713f55bfecd9a5b3a430617f7e272d4ad53ddca7bfbfd96a913dc5b9a53a61665a27af7c5d935417279c4179c7a9925be25bb681f8c0d191e8ca5e25b700191f8d741c3d00f548ed9585e662840e8ee7bc504873271ef27e2fcae21481decc28110ce52a5e6848dcf7d599613ebde9966c06daa6d54104d96e2497ad8c3a4128eed9526cfe551e8c5473a29e7c206b12f963b4428991cf49abc0c6195f7d41c82dc2aa2b682290a6b4474942c69edc006b511e6ecc761a77f086b67f821094b0d5ae378e253967d22039d675a49f030bcbb75f522558af0b445eb1087e590287ee873fbebc006ab79e31905e9f8ba9d9207cc0171c9f54acb030fddcdac253f581340be3b5e163fe3917c1263ecb9612728a89e539b3d2023ae4e3221eb24ea4949de3249942184ef6d3aff40ac5925fc9c802e305fcf0b6ed62ab03d391bc3932aa0ea9ef8d5350df4da2f18ae265682e1e723a07e37870ce929da680c6655f6043d69b3f29daacfb6ee445468ad6d4a8742311c7ce30d7e75c0134adbb11bc28508122127e7509521cbc17c626af4b40b25b91ce26e2943fa91ed4e2d788f891b95865eef4ee0fed40718f931cb677fdc163e2a354544fde5f3dafa88291bca366a38d5ef30c67d3c34cd734d6b4fde787832bcfbe4fafcd68a6ec8624f6b0673faac1e7e396b90c8b951431ba708806ed0295d8ce9a5c13aaa1b405257d7be42db42a132c55aca18294711332b4be63db2a4748ebffffb80f762fabeeefc523160bef693611e9998f901460a54647053a4169a67c4440c57e6c8403e513382ae4f53a716a9118fc99d325a37befccf4f090257beb32c641deccdc9273b37a037dbb30b42e9fe0d38aa3cd611b77f539e75fa14e9f913a3419de5ee2009533b6cba5fbb9eb01e92549493324efa669db05f605a7002943a616ea337af5820c49b4fac3080a80dcfabe0d81735e44d1e2349c7a0e76c18aa0bd3882e2b842acc62204af2af1e4615ad136dcd7d018d4575b9a280c6923b629f61074a3b39dbd34fc09e8a60af51f4e6a0e6ed7adeb1b41623836284115704aa9b931444d5be49c2a529604bc7bbfdd71db5ffb5e854da830becceb6660600abe7ce04ded43cb059327dfcd6e3de810cee6d7cb49ae1394af7414dc41cc2d711da1a946fd1f1a7721cfee888a0443ee6977fdd0d72e150ec6a2338338208087af70b5b8e4b579fbbb94e9bd7798787f2ad5f99170ccfa1d5d8f5468b42600555a302c2b0acd8e9749bcf9f59dc12ecbfa4af4967d516bca5d849d141ea456e2072b3625d7310455b49045b664470ddbbf1c166864860f1cacc9360edc6329369fa7f930b3a8813de258f68b34f1bfb66394868e8f308f1b33a648de582b225a08eda0d306f9ad56bc5c33f97588e964ccfa6d90641a92cfda63fb0df8c3e9552c45519738ed32a82ae3258a8fd536eee496f2f74d0bc1418a47762226f5252ff1f63402b14cb53b1537f3c5ea9d4b5b91af3e4ab1cac478299be2a549877ef1414a739ed9dee118639ec632eeabd3b3bd8f7811f820427ca0a7661ec8429ea2038733f3196a5b46fe61c65a04c674fe4f7cc9d589d5e356d8b32b160dee2a4a1ff69f87d7bacecdccc81ac492b5d6452fbf591cceb1500db80759157f53cdf17cdfdce57c94e0b6b71aebf80241a29045a04f712e7c31a927eb17a186382da0048a159271c13908a6a1607fba3280e57966d35911fd2d330fa68d448a67f25f9e3e70171d0982cb80a3a2e02450174eb35b0f5edffdedb25781e485f3a6c534324515fde73363072f69d8a3a66210d2dbc528070144192ee7c444ec2abe4e29a9e52dcc390983c59a3b2b51aa321279d9ed49dcdd9a58afa7b7d40295773445e967e00a7a518b0da960c3719786c64c951b9866dcc7523e7fa1bd4e9d981f90db13554111d422e54422c78bd527d452f7973d2c6692b0e257cc2659aaebb9136730b5f8685af15753c76028ccdde394e8a861b7e4c41aa4177e38a92536a7d5760827b8e6aba06abe98b5cfe46f9b184e972c8dbc25378aa7001bc8744294deeee1d408f38ed6266dddef0885a7a6e813adc538587db09fef9af63e01d72637b904e470f7cc3b9449de355b174ba90c1d2f55401e942ce8d793f19133bc05e7bdb97e785a2d78bb38e2b05102244f8a5668032b7832546f4835364b71bbdaf6e447caa9857935a423338771aefa3d6ca49ff883cd1ed03b28c6eaf3259a4d6d14f8f18ade781955f317e34383951ebaf11b5bcf85214754618f3812b622055337121ba4cef2cdd88ed7ec50eabc987a24255598080362c3d9d8462f8c1babb034de6f7dbeaef935debbc91f493953b625050e65bd8cc88f7ae93cd20f4de68df3a4169f14754472ca0aa33909d2f875dc03adbe0e8321c02a094384a7805ff15cac38923a0f5699390ea12493502fc031675b2b62b2175fd38183cbbc7bbee4573dfbdc9644d8b1150dec6a4e7a9f9e0c783f3522df50725c9a2332b607aa6ecca08a0792dc72c34550ab92a11af117557f8263b4d37404ad994b3efdeccb98a31e0b9b949ecbd6b11f0725f6f6cd33f4c44b3e81562c1aaec92579f9f2ca69c4fda71e06538cf241c228aab4d8d9fbd18fc34df13020be4771d66a12e04fea1785851a4fc35c1fdd8035a94286c076d42811186d28f7f760d88999b18001218500ce16d7b6e4666da257ab0ac828ace6d65f275b0759cee147648f3c988918f4b4a99b06f4ccced970b5377368baa6ede3d2032495f049b2068fd31df18ed74dea3f304444bb60093278d5e52c1d6bd2959433319a6173bb5d33edba53b96479eab75df9705923e530c70dc8def9037e35cd3fe9de5751e59478667d86b2c95ffc3aaa8d3e4f1f56b2cb688544f877d80aa4b0b32878ed16f285c5cd51200ee668f0a06877455c42ffab6d8227c0cec75e420cf9426c4e37c08392117dac39f87500c6f2e3e2e3936090a5284ef9103577cfde22f2dc7c31479956b3d2fd547c6d93a49449cfbb2f1da296df834c46099e72ab96017080eaccf0971a18bc665996d0c3b472b4ec007e08ca108c60772b1b53fdbc37cf614c9aafe0ae1790787939e0aabc27377feccaebc92132dfab82369b5bfe5ba2273ef8ffb6d7972291c39deae1122e037bdd4b72197c3d6eeaf837724ec33790daa72d08a3fd5f19b91f0c17f1204fbee8ba47c6448775b73d7465ff5d749142837182f12e88381ef875cc8f614c5411ce6b070ed2aca262abdf0a6b1077325f2a833fe3e0e0ead957ad2679b90003a336d7d37349528b173d1f6cddef35e290d5c5ac053f6d3df1ddb062fd82a3261d27e8f31d33e0f97dfa1dd37e8316687d8e1f1080d598f90f9364c845439d8326aa85ae3317c0b43ceac1897653838ecd5c79b57b2ac7e5da7fb2a0768455e367c6964dde7e5984fd15f4d5ece7e21a2948bbe11fc463cafbab8231bbce350d8783041845ef133168849cfe08c89cd53858cddd942dd570191fbdc43aa7a4cb2fe9b55791f25682243ea24df47d1a87a39697f101ed849fdde249a11b9a0ae307019252e90f8a40da4bef0ad58ec3f8110a02648e8ad71feefb1010872cd01eb6d2835176cf173331b46a7dd684feef2bbbf480658e38b7f675f959a6e75c44e564719b5fb96623d280faed1ce6353699b1568bab810e319a55ebc39f52171d3bc04279cd56ddd864b789a4d23ccf9302f411ce8be9c05384a5d0979bf5697061ede033e82ce5199062fee81e0f34cf0e8d0b912b50b8e65c6d8f1ec159bb07fef33111d7c5e7b0fe87400228e5cbb266832e1cb33d5db1c9b3109d3a0573a8bbdb1f5ac3a949635531393a1949fe03b2de61b64c39177e74813b5f2d81fb1c40ac9158d35e75fb3d65d0d719c0348c99a68ba81ecb4e1305def8abc356b92b346e6e51306ed140602ded234fd4d613c4e4963b507b6a3923d32fc8230b179c402aa08e0161c7f963907864e40c4a61dba069b40ad1d3b87666c8ff77287b390be70e576fbdbdf0f1975ae300f0f93e85e0ec5e7656f258a7a1ab98e4364fc83eada0f4a20c1debb04879e8c9094b716aae0780b9912de15e8cc0db94bcfa1280843eacc1d54eb348adbeba6adea9c43311a261fe0aed1a422ef00faf42e4df7a75d0c8f5a1b81062ce11a309f879fd8812a54a6b4a9bccfc8f217e5c5075f7d3873e9065f7c3c9a6b15be9cfdd24e510b7f88328d89dbf34b73c6ec46f152134c3704c3a5fd7a8bb6082d5e3171344740a84545e3c5dbb91af2a280f262c27452f4f449b615c734ae370af6d2eade25c132f0535ff4188bb7ed1f464fe22cfadd6c1c0b186baf3fa400bbf97a859866ed9e2ddd4a8b3ed5b2c1b19eb7e5fe215bdaf07a35559f074813d4c870f81fa5564862564bf1ab419c2efe1ce2e4b2724ee02629a57a2325faeeda065ea8c04b7bc01260ccddea39c47349232964f688370a019be12fb8064cd03015ac2e26d3dea3d25f55966838dc3d475413fd16bd94b73743610cda32be866b88e1eebfc8ef5206d46eb1c1b933eb6d223b03bf9cf8762ba2bd981645b06000d28860e7b53e59445280b673557c1c2f10071f3da0d2d5435c4f37d899c30b8475082b6b033c280f4c342af978053e019ff0b63d63a45332b2ae82bda986d76b0309b4865d795cbc33e175d0ab7fdf8944805f1b5fed5e6e58440f221f4c5228eed582d60e6665ffac213d756a4c6f2a804e7073e03e755abfb8139245b40a52ab242cd6a093b23e176bc8643eeb6b69e5b3a0c3aee8268c5b7356aac73e7e5cca5df904ae81effbf839dd2993ed52dbe748468726aaf077adfe3ec81e4c1cbbceebadfca2a16dbde103b241f3b2c3d4f785082ab1d751a139c14276b57d63f41b65820b0772b9f844620e29e8ec2cf9b8e23c4b0afdc89d8154f8332742f2aa42543bdc5796634fa4dd376dfde9fcce8df879548c9ec3c11731c689de2d3722e62021cd1d5ce80884cdc46a7d4cc1a7f93035d3a13ae1b06dd033e764aca0124961da79c366c6c756bc4bcc11850a3a8d120854f34290fff7c8d6d83531dbdd1e81cc4ed4246e00bd4113ef451334daac164734fd565fe4377415d8da6d3907c8188dd8da167c590ac4e3607277e02cf8c5990029d6bd21bf7a8765beaf4616c88e95945fcd4014d1e000bc34438a95d5a87442f354271cf244821b7c88917ea26c5a0dbfb967e8a4fb125f04d692a9d5275f8a044f2c5a725acc467e8999c3e83a61a1745b6228f6ae8ec56ed196dd79dab121b7384b4ea2359c934f12cd7b0c6132fc3833cd7a3952ec8bcca51595362b1fc696aff28e245d996e68c4ab088189547a55c2e840ff80a21eb8c18d858ca101c52d06b08d5b4b2954560fc0f0da0b3ca877996111cbd045facdc77d22ffd4fdc9d4dd13c0c976f2c181649dc8887f5202f817b650f09a4eac562752d2122f6a3148b38abcf1795c529553aff41f4e3b1651de66a3307732afec51ad274628dd87d2fa83f665caec73ec6d661801006e5f3f5de07cfdcf88821ad6ea970e49de5a1e429df188d429a201025e88d02e525a0b06b242ab3bb6af4c47a9a5fd1ad314850c4732ed3d7a697dc2f7daff308d733f795aa8db2453941af458e87504624391b80e4f055f7526bd2fd09300bf8657571657f40011d5ece19d76b328aef263eee6618a63c29086399967256713c352ec7e28c8bc9cb3f63a8391ba6a6309f1d717cf898aff63048da02a26a4e5cb125a015b9b632d846ca0472842bcd91f79f4bcc6c0ed7e430e23c4a7fb3c9e13f24a504ef0863cbdacad68a900b279b968c245e5d4fdb7d71f96875f37b0b5249f17eb914ca852c622ac68a268cdbd5e5aca638b1a4e4495b55058be5083c373655d23c1145bf8448b37b792df812c84ac7776452551acf57bdbc953ca482196e184993cfbe3a5af32d9e5f8f95f3fa2ea43fea26aaa497cbfb3599e295087e59028cc835801d36cb60d64533aca7f5fa0ca7d017eaab2920d517a2be23f4f15fdb43e32ad291a03813cc320184554114c756200c5f560ebf140bb5b8986ff7e86a16ea98fbbe21a210282ee1672664e69df6e2ec4fcecd0e80b8dcb83aa01a5c78abe76644cb40711d9141bb9b42e8d6562c1ca1033aee77e0c71ea653b0e123cdade17cf5e1860d03af747769d0554eb9a2d812c3c3f961fddf846a29c6d4a531c2e1c256277adf892bcefd19f831b58f001d27d7917734a0a914ed040b7c4a6c92ee20aec6a44d79ad5735f3e40673a0edf4c886cbf0578fccd8152ea7607b45c6107e47e58cc09adc18083fb95bf0b41263dd199aea3493f1d8cbeec1099e86064fc467adbba1b361185c44a2b9939317754ed825ef3273c01bf88b81fd1df5f9b4da5746b8568de3601b4bc5a7c604a32f030b9586b9f9e0a9824e10c65e5b4846a85fd70b49f00bf62b9c4aadf1d15e9be5fa113831ebfa8a537f96eccb7f9b0e16c6883de0a381e4767f5a537ac0f2c0daedc28b0212b5c751663af5ca2b98120dd683d58570ec32e23c1d22ca9a04a6cb2bcf099536ba66664a256bc525ea5c73d5ed5b9f1df5e6591abaa149263f56a1fd613a501fb07279757fd5233637f4320cf1579673430ac26259595f2e48d742aba0a59c9440f0712d6fbc4c2628e030c3b452d13a7fa5045d24d07578ca31987db3d2e25e12ea38bb1da7a8bd642a574261d4ba3a50c009504190f1ce6b6d8abac3498845cd67b567b21e9fc394da8dd01e63b83a5f62b886d8213df6d392ffacf793f8111a70d07856a999ff5ff6bcb6138933045393f9461209bfb8aba8e1997837988aa00c713830d1fe3a6e88cb3d6acd935ed55bb4d716d2e1de9bb817ca6dbdd278084380ed691d363c6897a2aa48b741118dc3d1820d030a2e4ac88987ffae0da2f91de5e02816a9cdf62c2948d7d0a3e522d2398f1f25a17261e31f185690b0d11ca388599642bfb5c04e485e3f9f22a13d91d24673bf1070870ec1c499ee25cd19dc529fdb2be1bb6d05e733a8ad270f850685ee3259bef1655357d4f14dd35e97d129fc1e5975a9a559ee10398018f5a33b3bd1837c13bca3b9c9908537224c3e88f7b68753e5451253453d1aa25e1c3e38da358fae779be848ff407e337a5eb70ba21640a197585afad402749b624cff034b637e7a5254dc +MD = 1265bdc05965676145cf47ce565dee0e49dac5e81c26e79be6395f2f + +Len = 89312 +Msg = 69bbc883d6c202292c2bcb034533fcd3e55e9ae04dbb06540c6973e3195a9dad1f57b9661844a7b41da66fd87c62eb910cc7c13dbdcf954273a27cac155cb318e01091d0020dba3764609668c79a011a12d344c7eaee440d841ffa54b7ab23b156ef390abca4a17ba86126f94c61a635a0870bc3fc9f7d7ce6e7d72129ce574127fb995c6f91c64892b209d4334242ac5eedff7c1b6ba8584202f95c904db58ffb3d990d435d8f66ca5a2541a5c23d45f30c06396dd92b693f794a4c17b1a7657bbb22675f8f669cf7616487ca6b00c908ec09411d716f778653b03be38194894e7f1ab0ecafb2b3c1d0acf0c9c4f1ff4496f1dd51bbdc4abe98156f1f45e4c41d916b311146db74d2aee7c2ca5579b15011a4553240dba990516031f186fede90f7fb32f7db49a4cf03fc46f7a701a5d3650cf1e787d25ea48579c981ca4c9f4ebbb4fbc5f6630e63d7d3c47641efa4769b10f998182a2fa13c487ff89c35cf00e57cd3a41f9379343354846fabac76e1ba97b46f7c4ce5307eb49b7e8121354d7b3d04bcdf41acea1e67cd0b6ea1e3bbca8b6b913a9e48f854a7643a03789ade87ded434bdd3702ea1f4e9711135b3acd4d36629da8a1fa2c5092355a9a3c65a10478c3542b28da8c3e31ecb1ccfad5ede57ed5de57734d5dac021f7fb08816a1f6073e6f446cbff8c1cb53e18d99b76f3ff4855e2cd4d3a9ab5a346821093b6bb11d3705ef7f2db0487f5f48cba439f18b3be3a59f333780dd0f46dc523c3e5ec42f2fa052ec9e6340d281500da6d7f575b9834d253ae383bfa5b924daadaa0badb1aad735119c5239494c8fca1e3beb7df1f6ad65485222d191fdea00ba18e2ec491b12fcaaa23d905833609776c0541279805ec5e82ddea16897848b0dd584fe59f2dc1ff44a65f493b87aec4cffcfb1b4e2c9dd96b127adae188cdff59a526268e49b25aaff6bc4605e274f0d54aefa48808702d0968e64c6f38b562dc1eb970a42f8841b2bcf8e6286fe263469725a88dc1edc3248835537aae8a402d6b12a92b04ce1e17a01c10ee588085ea8da310a67e9c0184196fd94c12d301153339bb69f30958a4492fac9dc2d6bf88d273c51b670650f0c49dc52b8d190c5c1e348ca721c357226039a17ed76d77ea0e9dae34a6b2193131c5ff6047e3cbcad60d062cb98383588c43d9d9bfcc16d6ea27b2396028c20f07f26e3267b9a52600cc1042e1d2441076533bf6a27b05150d1bbb71c0f1b552ef29fceb1523023a4777912fc1370210c674af1ca703ab6f2180b025eb9458c2907490d27baa4acc5018733c833a252123ab1d94f6eb6fabcb5f789d0c99152793da122ebed5e6a5c6b69db14c63150b35026da7b8bbbb93b5bffd21498953489f646b48092d3c8d4f5af7d6473b3a96a580879a15fcf6ed87a826f9caeb79ee5d1881688239b54c930b69f29949fd8a1b2d54b834358782e823db6cb847f1e174003dd55181b9a93cd1db4f6d15c4ae3e12ba483eeed81a813604c33b2622e98d2487d99f8db16defb43533e928f8cbb736a2915aaf507dfaec8a477a0e74ce508a48ba94e6036056bd5fe7350902a92da2f5dcb1015772fa4a533d9e8a4f57643c66c15713194a19f341b37a404810495c99716b6b55c2295a48f0ce1f1b4e7242cb36119c5af3e05fc4dee05634c8b36e7898af76b235312351a73357407921a25d61e90a2d235207ceb28ed22d9812df7999a5a8d793b7ad57a9f5b926a01a66068908e3fca117f54875ad3c9a4a0fb883bb768c2aa46601403f3bcd368d0596adf895b22e36d8311b70641de5a4510080484aa71430e326f6b12d1cd60789383af4b9fc2baa3dc12debdcfc756f81bf57864883fefed9245f47f52d6fd54e5694c69c4b5ac5edaf682e3c61b27246fef0be99a74ed7ee046549b8886ac0fdf7a5b66526254e9103b380add4047749c43337649b6e83cacdeffea1b62d903e24540b3d16f30fd0c3f52b57ded3443119083bd2e8c4ca1687e4afd53e220db8e4890f4ba22dce53f91875610687a3a70557100b15ba747a3a2ea47fa8b0fe143f2c08b8523954c1ac03a7f4d58859539108ff36aab6489defb425c57d3e2df93d263fabae8069c3e59e0837d23f31dcc403507c2f220f28ae5e7acf44366010e75dfc4d3f6ad401abd1e2538512f2eba7304b042d6591c27d14eac685ff600144ba87c58c605f2206847b6f766a6327407738f72ce7961466bebed2c901f5735c25273c1dc8d0cffe9f1db42eb04e3999c15e7cb210e6c670443f1a96a4e60e388725da7b0bf0af9c0a0e4a344a79c8baf406bc4948487fa38eb2c77750fd7bdfc6c9c62d92876be7ae965810a2ac7da9fa78de78f786e708856200f16d006259cc5b29bbc45daae871ff064b1eb10070b9fc0bc88566a7a60f96ee8e63b86aaf7f232aae083915a53c8f7e6c284ff8171bda6bbf5ab167861595b9d59aed3ce8c969f28dc8e55328f890e5fb274d0da4075925e7de2eceae80a8884e7b67800c9174a8e06b270d798b4866808374e82164c262c87aa78528361783826ceddd24bf8d753059c8eb9edf002684a38c31951c5d49e894e234fc212ad4f8d649fb373afc8103f99094a1daff508ff15d8f09167203d196a982302829a0382241834dec09f3e4b546b189668f0a27d4aeab843a49b70be6c217ce325b12cbb69e1d6ebcfcf458f4b4e95f6af67cd6b4482d0e702a8e1ceef59cdd29094f38fc2770a3921cabe91fa0e52acd7dd023faf4bcafa05cb08e140cb966f47b82075aa625f356b2411e9cd34df2796c2b960c780070b22844e9c2cd15707bf9d1c13ae1e367f006dd7fd415c8c0550bb7b8539ca3588ed672b35f025903a6cb64ed03a253064960a8952f2dfe9b49a19c10372a4a701dae647653712c275d3864131daf1dd84708cae716e5988b3d78022721e89fbf45f73fb905e337e58889f9bcf0d0e8e5d3456afeef033e9819d6108377a04a4deffb2e05df1f22440f074a6fe4cf5c36d661b060235097cbc504eeaea218f322040057e148ef944ddaf780b4617322d236a2c5971b944c2b2a4ac5300b1941476a4fe2d5a8193507d1a4c213cf83e2c1dd51d12b3e9704c02eefbd8f196adcc30b30f8696866ae7add55391596c8430cb1b5fba2f3206893ba3dfd5533d56d9ecdeac126ee9ea7aee4510d411e0aeeba9c186c86a4f920abb77aae09c3209ce09ac76493a389c7accfe1651fcf108bd385c04c5eb8e8d3110beff73430141092590d0939efeeb77b874d693812a4c16053f6c2b397b629cba0e4015de27972bcf205da9e3b971f23f3dd43134d8c3867f002f60ca92bcce35ca1f30c411769644cf7fc4ced4aa5adfad91839ea9199f3432c11f1550e6160296df6cab5b59e94512b9acb6fd0f420868813304f7b8c0934bc3bea0629934bee92321da61db853e8e8daa127f1b2847e335982e612b8b3abf99b80214207ab9356ce907c1560aaf978e4587f7488e1c92215b6151ec6f8902d5a3a0f226888ff02f3a89f663e9f6d21e178dd231d40519d6d5546665de1cb9e9fa138915ceb1cddc8ef77d8f93d2a2cf987abc41aa8fdec89e6e0b326744594933b04568bdbd13176ec6d323a8919e1530f50202622b55692f14bcdc9bbe4595e93dc3b9f6006442427e73ea88d2287189734ffeab56124b0ffee7cedbe9134272e26063d82a360fb294ec2ec502e676fa8bf290d69ea9f0a9733883a84356c16964b800f4a91cb23790b87adda23ca81c959653846360cc94181b85a15b64a5552b471bdbfb6cdc39f84559434ebf676826a7c13552eb6148541d5f279fe1609eac8a1efe9fbb0032423f349656c34755b5a37459dbae414ecd9a7adb8f3185de6eed74cd148ba0c8f4f2b737590cba6dd915c7726c3ddf1fdb2f630db7f9777cf90dd7c7e863506686fc3ba6d3d05328f78b350f92fead241348a26ea89dd7f2d157928f89b671938ed84c8545d2841f97506791de853df3ec72b35ebf8309e86e574f84871996b8530364232d77dfaa4f11b999ad460427ed4a005e8b6d9fb6468959375ef1227daa0a1d30f934c861755bb5979dd592089c1b23fe8aa1fc04e06a6a287fc1c73bca58c21f479dd0dda07ae61c1ea85a4e5f8298bf4bc4c12cd276dcc8782fd77b5a7c1d4e87177b67671bc587ae22df31cdfcd9013d4a71b6833b4ba7c68fe5d4c0e0695f46363a972f9ade7adaf9938b6e065f74dda7703a79241136e96674a0a42240c1f37ea0f560948b5613811993962bb67aab605f212acdc8066f3806875abe3e071d55210ab08566b9e65dd3e2fcd95893351990f32e94fa96a6990df17b20ab9f225e3d3f85e9fb06c1e44501f88bc05ef917a828eb2613585dfe1d778bd6341ab10e781c572eb2dd44b8ff792fdf882e75ff274ae6dd9cdbc3eb9771e36b41da37ca4419bae0289ddd4075a0f9310a821a4470d1b848018196c61e79383c6f8e253633c0079ac6d90a1f1a21eb2ce21a746c2745c5d1ebfa35221505f0e6178717b6c997f3bb081f39b98f647c2f892812fabd2f9627b6962d840da083d4c4557de07819d5dd76c11a8437f132b57a6b5454a4e7bf95ebf5fe708ac187a51089c627c1ce445e9d7efb139650956b3034d72e611698c9068a165bfef172c366949f11291db5cae69979fc3cfb2a9d451509cc9424b82da0d303caeca8bbac40f657213090a0aedcb105829e5948d8139c7ad390aaa43025615521d66fe8ec3a3f8ccc5abfab870a462c6b3d1396b8462b98c7f910c37d0ea579154eaf70ffbcc0be971a032ccfd9d96d0a9b829a9a3762e21e3fefcc60e72fedf9a7fffa53433a4b05e0f3ab05d5eb25d52c5eab1a71a2f54ac79ff5882951326394d9db83580ce09d6219bca588ec157f71d06e957f8c20d242c9f55f5fc9d4d777b59b0c75a8edc1ffedc84b5d5c8a5e0eb05bb7db8f234913d6325304fa43c9d32bbf6b269ee1182cd85453eddd12f55556d8edf02c4b13cd4d330f83531dbf2994cf0be56f59147b71f74b94be3dd9e83c8c9477c426c6d1a78de18564a12c0d99307b2c9ab42b6e3317befca0797029e9dd67bd1734e6c36d998565bfac94d1918a35869190d177943c1a8004445cace751c43a75f3d80517fc47cec46e8e382642d76df46dab1a3ddaeab95a2cf3f3ad70369a70f22f293f0cc50b03857c83cfe0bd5d23b92cd8788aac232291da60b4bf3b3788ae60a23b6169b50d7fe446e6ea73debfe1bb34dcb1db37fe2174a685954ebc2d86f102a590c24732bc5a1403d6876d2995fab1e2f6f4723d4a6727a8a8ed72f02a74ccf5f14b5c23d9525dbf2b5472e1345fd223b0846c707b06569650940650f75063b529814e514541a6715f879a875b4f08077517812841e6c5c732eed0c07c08595b9ff0a83b8ecc60b2f98d4e7c696cd616bb0a5ad52d9cf7b3a63a8cdf37212061db15f44324372f0c7fd20940ed2dceca08e943f79c8d6ef44113750da72f5b60516dbd28943653e658f25565650654a9d540e7102d2c9e019a1633cc4a876ccf99646d2c5d3e91c91b6abd6a5f8b0a2ea68dbebf4e1ef753f79f439b9fcdd71819967efefda44b2d4da79bb03b2051d1034c35457dc91d74003b2f1c25671cc268707cf0e42bf29b56358ae7866abe3961e8e5434aaf72ea4a66509e69e7b066fc8ee1a2af2a2a9bdb910570dfceb1b04900395923569a1f1c9d42c2ebc4346e5c4e4794cd235597244695dc95c0dede3f1ebbc79642f58b1d6c800a09811b50ee3b1937acac0625e6c2b69b56e5982b9a90e74f11f907c6b34092d471b2d7b758e1c12bec28aec099a1d22d71b160211203463034ed535a84b5f5c282bdebf9f2bef9b20a2dc1efa34083139498e9570bd2531b6da47aaef8392354db16ea91624f0d9a752fe20b9a4b43de3e1076160eaa88713a92b04c844695fbd96236261dfe8715bba381bce50e9efdbccca91680f870d20a4cc6abbf6ad8380c0461208c69e0e44c3d237c2a26fef2bf01f4b1192886ae7b37105510126489f191ee0933fdc566b53139b1b000de4db374db7e1dc744670bf61fd11cd9c572188f5f58bb468f1d753447064d48d76f1889eff6255124bc1aee57984c2d7570ef41179788c0b8890acaddd2285b54e77ca58481c652c1fe46a45a130499ef16e47bb93e02f8dc39f44960bdf7b4e1474e7c4bd9675886ae1d9c99e9fc8bbcd4a683b6b4d05b6490b054721221e1f70f1c62a8358ebf0d5bee5b99859a9f492a93fd92a46764ec3dcd6074874d6f208f54fd2c5ea31290785755cb6e45212e894b4ddf854ea1cd81b9e20a85c0b8d87886a03a9d5adfea93e70fb21ca2ddd7912af8efcfdc9e931cf47d8686225b993b2ff0757a0c93663efc0de0193a01cea2b18365fcc7b7d7500b878b10e8c3ed47cf624f8d3ec98dca24c4d7dc51599e6e7d71b484668a04db6d947aae9a8e4f4ed37a3b4f67deebd5efc90bdeaf31a134fd485e0f5f81a61fa928f7c7ae273980eabccb292e6fead2cb8eeea89a268196af8be4f6094b258d3cb964e49a0b26ae538e61b2e8e91551368b12c2b8a4ba141290dbc0fa232db4a6ca649df4b6a127dc73b1653dd6e5d1bf41faa57138a53da50b94f8b8c6091665d0594c34c6338db4111cc883b5f6c4c44818d95a5efd63f560b325bb804232f86fb597d096583098cb16555102a2aaf411efc6da840d378214b8a0790e838add0d2bd96ec389b0e92630842c498414bd14020688446f18b9bc182187ad379e921d0ea955ca329f2396eddd8bf715628dd2d210da1c9d982abb43f15e08c8dea633f0802c170d5bd6b1c0d9e6a7d144f4e2e26e567913264386eec8629dc1eb87c653e66826546780fb3c01d2b8320c70a8b57773f65a53a2c35aff3bd8bd15c568bb548094b252b0d7c1ddb6b4d2598fb8cdd4b8f0eda0b6e52b0e5046150ddd7f89530bde919dc4dbf4d6293a1c9cb0879e0e9c05578dfe60d18e466264343e9f605a60609cb95b6c4783a0948b467189987da3b0028bf7cad0f764ba1519773cb2d334c71e25d32d2c4e9370a8f741535fba567d791b1187cbc251b9b23e05cc0365ef7ea073da9325cf983ae02fbe69564d2aba45cc0a2c048783edc61268e1d48b06f3ce23b012d66f257feb4027301e9e9712d30f102c2dbf71c2cb271f02a8ab01d2f1a6223090b5a1ac04e94a4c1b273203bb64e20ca9b2b1d53beca6a2f25e6678b58b7f70e72bb34bd77b6611ce8f81f9695dee41fb39baa182e38e47341dab61743446586c49c0dbdd872925cb3fed80676a9370b49d02944aac4463f0415739c841056b728860d8819cf1fc73a0fb25301b8ffd48650049fd97578db991e04e2c223b0eac7009ce5e1d6f0a6a6b21544dd1226c391a5a1f16453638f267dd3b1a6865d68c892229dd88ded401e7069a3b3bf922093566a02f266eda3d4bb46d1d840437654c40778a7feffdfcbcf17362ac82d33b3ecc59a2cb7ff5eca5fc709ff594c5f931fb33ef6310cc9d55985c6eb34dd431aee1c80ba4d820931f1bd23c3da5f69ac2a8eb76c2cfd4763961c1a9d0b8c9aefe4d67d43305cec30f990e5ceca63dec86d01abb2f9bba19d0d44fce956217e5b575b596f69774ff000a718c53142040e7172e170a02d1fac466632771c843886ce13dce8ffb97a988d6c845317e324a7bd4a224d273a09b8c9e885ee659d1097d166cd53fa0cb4512946f01e852e85badaf236f198cca6e81f34bdf739544db6e8bcf65b635747435b9d25ce820b71704ed0e505faca3f65cfb0a239a191390d9c7d1da641827995abdaec0c17622ef1a34ef731561b1c5761c6fb5da43c1ac174110bdc9c749370a1630b804b1b056460d3331cb3a985e55ddd920a4b3d39fdf9e088a67c17dcfbc6a14ad1261e3ef10ec6626f195bc2374c5c2de99d7cdee7b1535cacea529e5fa1fc73a7b05321c234914cd191191a76b6ad95a1a2e151a726d04e95ed0d1fc3bbdd4cacf2a3f6fc5a9bb9eb21cbd7ca213792db6255d966e0c027098e30a9509aaa9f86f3f404ca094c7165d4593f5a1762ec3fe6bebf4c668cafb2d4a4822dc8cd32ddbb309452c70c3be6afac9b4f1f966a7435064c803f9aae35c74ff284cdaccd5a533deebc1f43e116bcaa32d0c23bd5235713c52bf654ec3d6f1a437a2fb13aa4c2055a319659299e023c4e0686b9f5f355cf757410213070d5edbb3978424064106e20d9b6b6dc26894b3519f679928d3620a3841768447600b1a4e92fc9a642466287db06c3c2555abd303097e1749802f096829393eef8f84c44b1ddad35e56bc8d85f0ee6a2d47c7c8773f35a62bdc12697970a09f79ec6a8e4ba0956b5f687875c8f5788454af76e820b914d26a47caaeeeb0632270f71accb2c3b2cee1ca389589168127460d47d6920f92086f43b64e3a50e7645f4013f432efc97a700c5b5178dc9eaf5be1a9083d9b43d4b56043cbeeeab3d1bf47f4b92e8d2ffaa4af8f3e0ac037a900bd18e195f490a3d71e11ac6ed63ef6fb8f2b7018348ccbda1412bfa159d290ff0016173da40f123eed9e644cbc1f40ae7626bd827e366a9adaa45aef21f5e3814b3f0d9712258c674f48880af4ab4b42ad74e5ffb2d3535173a2a44681283d520ef23934c75a9efac3be8c2c2889834295a4ade28ada22b87f9c004a1fdffacbbbbe2e894c44b643db5ee522b0206548bf2469cd5eb1351a4f0f035c5683a868e2115227194a6eed16b8377134067daf9a82be22b70f1711726a321fbdb9c2a4028a4870a6f22540d638d7ba2cb248f1a83dff852c3a55187a3bf0e6cdf8d627ad8776088dc27609ba7f5a4ff2aa33b978b4b26716c95ba9d702d4540fb75f4e43a77f412641dd8233fa43b53e54ea617c857b4b1f42b730194d60e9eb8bca925558a8dd18d6c854c318187c5858c974343ece939e2ce465a17a1b0ae9dca49e6329971ede27c2fbf8773d27e91c4d8c303f00e32bee5f9510275759a32079cced78de98de8b69d24496462a691602f3e104d6bc311da558d5c3ca387ffdc69864e4c3dd9298099227d3b81640dc7655c73e94815611422b72ddd839f8daf7ab59fc0b5fa2c43e9612de075e08e6142c633aeed4f39fb28767e405d0a63e99504d0cf99187968568a603a86439b968d245882a19a1ef72e73564d79f009f3831beb63305a9955a8451f33feb5bdce101deb4fae1e9a70fe55bdec1e7808330ca1f763c3e91374a73971b2235d7b71915af2fc5a0234ce5ec5bb0596cae713f73ffdb79aed6f2c1b0f5ea03f645de7d9837871ee6f7579176b5980270f2efa0e9c0447fd8d36e4cb6eeee398f1eb98b03f8296b18ce3daf1ee9e451a6f6650176114fb34f1ef0680ff2a64762daeeddd361a53ed820857b3f7933cb711167cdb3535bb864222f9026a190b23402d4c2a114790e8786c59272d3e4e451ec6e822c1706f3da857251956c3c1e651f01e5d781235ec9795491339a9610ebdfefbb4acccff9f4a17f28d6b316c068880cc3f12812a3f060d8d40c2dc5e5817471d589f5253f551e9c825526af5cc0e64bc98889f5729ee5c8f7671dd2e6c5428b6d842095386e4560faab37645800b2458308171a4f47708b57ceeb6b7929b2a2efa3cf9e89c2ce52fe5355e436aa64907cea601fae6c89b691ce06fe31114d3ee87362af87d511e909b8129d6d1085a303c9f563f490a9d121cef0e9933e8ae5c46d7a56c727a899a973fdfe8ff59df3d4013785d6364941745c49dc13e3f40e101c8712dc3cfafb6a01689603ac06195a3ab703a7dff0ae25f0723427b4013e67eb09622b879174a7dae2e25cb6567a02c0e45c0de0386da3260a9063214aed186381d3299a049c0f7b0d621fa7179c6a5e4ffd5d0979167857536f4abe2990be1080d47ad6bce7ed6c4893b0e0c1f6fd4d7a76399e3b2f122f1d2f42dd35dfd57c76e483d032deee291505b515de203838d4351821071e0cf7a85ee010f810eb01d481c9190ee76e2c03269098d49ea78aede87d346569d55b858ca70bd8da5b3b4a4adf1399a80a0f8384e7fc3dd8c7ce37dedd4acea8e7c555270c006092c2a3189e2a526b873e2e269f0fb28245256d42a6bcd6bb41c0bf67cc939117e0adb3f00a3f480d0b77126cd38c4e4a8a2d028ece905aa3cafcc45dcbb250774a78e8410d8286f6ab4156b6c0e241ef1e5b087cc4fc5920bb085ea7d2fca0f716b0da8c169871a0fd295594f5b61ff8584bf9bd085554ba885ff8d640e7252ffbe1f541b3f5aaa4679bb997d05c4aeeee5c5090273fdfc9b9802d59b3e63f7a5088b302740e84698114dd3fef69553b4728a7c6a0205ce6d50566a29a9e527ecb11ae3ec557b178c0214aedb141c185d92d59a0f18b4e8a514c2f51635420a5a21941672675945aab4d8d31b49a12373ac6f0bf99e5372cb4e0f1e6accc0c779c0c170c25ccbf77a8f61eac67c6b9c7e2a2178307d2a966865058c2e55a987d1f7689ae31e195585fc769ae595c3ac0473b189bd9b817a03c16ce86ab84371e82c533bdd938b885261e18b7e7bf17b8fefe7e5a7e2a04624ca0cd924ddd7ae48c848fcb9a569b8692768669c183d30a6068d35f639ce2353e8ad0866acac65793410857e3bfa0c53b7d4d34453eef3d2206920b28755391983161c370d0cbf01d7737d343c87ad9777ec7980144eee99a5454fe4b67baffd0310bea0e83de46a18388ce49258c3bdd17a015743a34686fde76994ad89ad88d06396a72588fb3c61295b9524b5754e2c4412d2c936261e901717c854c65d4052d74b57ac352cfd190c924fdae6ebd1f01455f78c4fb4ebc79f018a937ce5aff13386b5658ca137a7aad91a9c324ece84b072d0753618740846cee152f16d5d1641eecb38d57f7175cbd6ff52e3c6cd52e010656c327b41bcd327d6796f1ed127c72ca00e57f134ea363405e43f7a57c16ed7bc5a8c05db4c0fb36ff03c1f938e8ee73ccd5b1d076eb599353a8f93f3392071df258dddc91ec21bb69fa0992bb15ec8a85f292b72690eae953d1a382a22c083d6b77a2c939cb306b36fe5b422faff77ebaa0944fd430a1a30d32a9283e514b8a7f69e19c22dac1d6d465197fed0389b0d984390316571850be505c986e8e5b55ccc40cddd387308ec0e2e6b4a9ad2dc17101e3695350b99305cf404bb94fa25fd20a76f6c27d26e38adc2578bc296e410f9e35eb21ca0fba61e3f6bab511dae90d91c28f7618ef75a0d56844baf4958003ddb320e83f75675152e27dd8814f81fe1e720074e724c5914311a11c9b6e3efc34bd733d0d950a6270960d99fa8acb11f507e235645153dac9d406678a42be6737e78a96d0e913f3e173d2800a1724f7b9f6bd4e1cef90ebce01ed124dad8ec35bb3bf6c05ec24b41a1e75111c7f100dd1b0ea157d6a1d52b43ddda3521930af14948a433918bcf18ef86dc3ce2d2cc2d0d90122025b59ae30ea509134104478f71c83b2c6e93d5ab494152e8b9bcbb53bd18afa483dc63cb899de72602d2abf77be34115be8364e2f7403a7c1558d63873cf014cb8be3acbfceefbd72ca53e12afc04055490285a540ac1c62be4e24c277dc8f7e8b0426cbaebfcd8c862709c65488bf54d7b93fdc6ead80017c45adda1068e1a3c65630b3e839e6aed9fe13fcb462477a30509a6fc76aefc117e67a69889b80242f5b5e6bf284cda6edd2649d15775f2f1b6e9e46940cf10a56d89255259cf3678fbcbadc14c70adb8a4c058fc0ef8fdb62bb54491cba0c4402c3fe883094c2d6ad214cec962b26b47813fdbcfdf15fe6cbe1c361a99dcad7e351c4e8f0aa76d853301b84bfd7a89b7ed0540a14a558b81f85f37481ddb22cc128ee5faf0796d447942f8dd8f318f7662b13634c3401b92552ed6beda14ca964f083d4b3d2aa3452f390ed29a9ff2ff6cb41aeeec6e252a7edb82f351121b794528c2e46343b5f3cf6478efa1fe4adf759e6d3428284e96b015ca7a156b8bf18f51057ae55d0bdcd445a56937d4fd8307c0bb990916ee83b34e2ba79989927b9831736335cf1b6cd86d42f3becc8186bddb64a201b28b5dd2e515204fe4d583fa1aab31f7226b20363ba003c94d8d56e24f26d39473bba1998b1568bb15bbb72f9cfb6b8bef819388416b1dc9c067702f8c40a253d2e5db91a0bad56d94bb7193390274869ee533490ef29642cdb66ef01360a2a268908835b6641ad9ca6b3fef7f5ee159a91c8bf304e521c6ede0bfde84f53912ad5224104caf9d825f319e7eb05f4687a67e1a10c3a134b8897ccf45517cea2709913b9bc3fbd1e9aba509dbac81f8831fa04a1cbbb543aa28e129bef9763a4215d42b42cce75c92484c0e80a4658bfe6d29a8915d9fd32e54c46bb5fd6fbe164aa19f9fc7e091fead7d18f84888853c1750c1f949df7797858ce1c4cdc7c9f6206ff52d3586269153eeb5ccf95958deb6dc02ced0e2857843a14865fb2d02742fc5c85596266eecc3e7615937569b58c422077cb357916317b7ec1405fddc12d11995b37a6fef83861da837a31ea13cb7a93cad418d2fda6a2769496eb8db44bcf1c9c152c13cd802e7f6e2ad002eed19f80ebb0c11c530c3763c90a5fc64ac3bd4e109afa8bb6ce2dce9e4b5a9890c63851a308383d618ac2ad2643c272c9be63977e6f1a50fb47e72dda86d8933fd1ce6dba84831f6f49ccbb74ea1c787a634a60b03c9448e415e305eb8351dd441ae83cf8cbaca8c471dcf77aa676c0a5dbf90f6ca86e5db960a9bf9ae9cd5de7ca0e262586bbc2aa297bc80220d732924df80e7b5bb276c14fc2c1ad6054fb6f09c993085cb65467993096d2ff47b688e2d0c3a5fe687a450bb575ec92ef9f26fe9feb6af6a74644ea83cab4ecce34d1c20898b13996538dbc0a422124a53152d21a9613fb95808944fcca6d8f7594b31428f369b346e8e1884a8f12c17f993cacc2fccb1489e97ece24ffc88f43be7701b93e93157f21899afcc6880f83bf2cb51e865ae98a6b6bb182d18c95419a64b042e0f8064ae6cc18a84e4bb6bb8c6915b69a8721a0ed97149fa980487511c4494b41602fae1ff42bd78f235f2fe63df312a21b65d3584b2001ed6e51e909ddf65cc99337b3b447fa0ff1d8b2e6b7ee77bb04df5c2c92cffd32071c57a56bf9ddfee058c8618d0eaedbdc3156e8e5c5cb382a98afb2846bd2ba5d5203af205e26b8ee7887c193906ec0b8f8f43d590a14117a11056e1667c71f59dafd110f54fa135bbc1edaac176348edf333eefc057dcf5e110766310a06eb617becd31f2581968fe935b4c1e9b4fae3ebbc01b5fe2bf93d5f5da4bb9db4a5dffc78fb3a17e2c9f3ca7358bb4f8a5e02a736816b3c49177ec4ae309e68fcd63a264a9347744634ed2681cd80910dfdb3f14a730808fdb18b08a210c0b30405dac10aa22d82d460e6c4061bfaf7645e5c8fa0e173aa6f50cbf3e24e0bc6f4ba27956031d68ab5d4476dab4b0fc9b80a674adfd2946ac97ba64c16f265e8f57e8969f24729d3101876e91864a94e30873aeaaf4f538f30bb84dde602b8632fd768066bec0ea70eb5dd00f46eafcff55f3f37ba5f9863ce97cd6cf888eb7dc9502c3571286d4cd732e27ae87209942e19dcf9a50a4b2ccb97e9c2f78be67feb6e3dbcac042e0b9217ef1e9b769fe5043e7bf71b5854334f4341a7891491b1bfbb0363c6873a2c67ed6bb5b685590a9f5583fac2529bc081243be3562ad45a6abee7f464ba77f77f3abe07e0a41f4a26e65cca42ff091b89c1403d07d597c317ff4f3531a3ceb402894fdcc2ddd9efc27a6d2f4468848b90a2b97e441dc235ec07a4f0d24c27aa185f88fc03376f3f9a9820f17093f559be500c6eb40b3df6115d4febf2bd6b22e746d02f4cbbc983d7c8dcd76d8a45ce3a52a3d500a6f04eaf89b6ef37fd80649ac58f3c456fcf02a0920aaae4555a302d30e47bd0f7c387ee1443c3491350b857652eec955d6a061e7f10327cfa1ec7be733928ca049fe8f5855d31d10ac26646ac1307e58d80d578165737de8378dd16a209a399d76ab8ed646bff77e7bdb59124a755dc05fab8d7df4781b1f74fb85c45bbb5e3780e40fd3ad7f6e2b42bef5d55529d23cfc1f7636348d79e5f8da1b9e5b92651ed71c84e8d08debb79f35ad5c67da961f3bcda4329c3034dc219e055096abe8a407d9708e8667fa93cfd3e1eff8e3f3f77d2a9a0ba1ecb6528dbbd57393644377918f752d059a0550731e56388ef286565edaba19cc3f88f9abb80e7fd8582ff9e2c2e54cf490b66e17796caea062c7ac4f4296f591852721ea1702fdebf3e8bb9a085376c9e8685d3b7987bac3d12279dce6b317987a0b7bf75d654634c4182d15c442330c0da5ae3d9349f56fba413f765b9108277ac05821ffa811595538def48b33fa118cf8c1bc5b25e70a7a8e6daa05b34fe503c05718724dc7a003b541a4c1ab4490c2cc483635adf83abe74a4f6798c47479195e93969c8d1cf6c37e5a50c0a9b005bba9229c734b166e29e55ca2bae96d5c0bb9f032a9bd83e0b1b4b73cee475c6c42e4005647c9b258355f0c3907ca7060d9be914495943524ce9d3af8ecb6d7a78a1c257a1c82ded1d5616415c89005ed4d147db5a639bc2ce2e2ea6c021da9205bfa9af13b9e2241cf936e1c4462b46b2d64bc6b25d5a05eb52ad08178a4583d7c2666a1ec440610ec9c3137c5690642425557505a8f67240e1ef21d95756e68b7479174779c13a6f425b54f91cc82db5490554b8c909be5b7655a29a2b57308d205245123cfd06cafd5034af1b4b19c2bbcbe4304ffc30876a8108ee78fed84960a261f3905c6c8e55522122d4919ee8e829b220b0568f7148f1a32ac296646cbfb9fc801657b235d4c1a8d8db2443a468af3cfe7ca111959c182ff39ab65b539839733c31879e6e063f4a55918bae61c7bce32e07546d60ce750dcd53e7339a7481748c74648773642b741d8a2015cd5fe3433402f9096f7a88ab0ca0a173adff226ef54156e4027906b485379a3023cba2eba4d1f75c1e0ad3a655e36d920a72acd10b4b075a77bf518a412c428421858c3af516e7fbf909e67e2daea4154c89813932d3de516f91bc73c5dac1683307ffcfa924336f9cf221a0f8650d83c0ae3006008e544f46aa780f87c59f72c4dd8df8359c721d564e15ad4a98d254134b39c608dcf1ca9964449c0b6f252a7370a7733ed21c8bc19842f198cccb0cb10b2f0790324f49d45982c7c55a0b05bb6bec9f0987ab317b4b3a1c67833024364860394b40b55383f4b30149f8a98b0929cdfa3a0fa6b4cfe15b9c3b3eaa20ff9d7dd9ae6adc6e24b065d70ddd9920e924bc0354ec877c5bf537ef8851a1899974e8771e231cf033371bc7956b426dd8074748cea0d5fe8bf14f94e38ebed4805920803f0c0f803bd3354155444dd8522be0492bcf0ac1fc50130ab1384a8830d4c68365782ca4ab2f42e2d1db03e6e40d2772d0b9ae5d19bc22df95d0ed1b47524b0f4619ecc40d95e50aafa21d201a457d5472133926507fef81e5fb0f14206c1e724543d874dfc17c47233bf1fa415f626c744e23b45d25d970461938f9588cc15ae798681dae1c7926f10b1afc05a577395bdcf69d8c4891491aade3315c3ec427918a2444d5117c087d9200abe3c21c399d423a386a42776af84ba652a7fca776f79b8581014ae58a4d533b60483fd1fbbd00672b73ce2c645354fae3c830ebc77e3f14389f23661ad4d133dfcf7928ee3fb +MD = cc0577ffaefd78d4ca9ffb64b6f31e563f46e1abe97c76ed7a957a99 + +Len = 90472 +Msg = 42c48bc03975fb2c032bd8d870cc7f81de897073f5bfa594941b22a40a02cec38a308134d99f5e604aaa631eec723e3102816212b3ad5bf1033f5ef6025525cc4385fa6090c311e6dc851a1e792517d58c866baebdfa34223363dbc6bf99eacc570c1dcdc7abbbc6a304266080acb17463e1b3ce7a6eda310acfc19ca996c4ccad0d1302e41d0506866eaf6c67d0b61671da61fa52d0f22572ca370028135cd32dd0038751e296b06c0ddccb9859cbc39db89ebbadea2707529e657ba4da59e9bf9c16e574c218cb3f27d604790f9a84cfc59197f3821ede9191749485b164164bbb73a3b7843060e605c59f74b9cb60ef4763188c6182b219ec8cd433612563b973444981f2887649efd024f0210660e6873bc6e14ff98cd1f7d4c217b243d7f10dae6039d2c815502c1f1c550df28b9acd422858142b73a1f975e6976b677bdcd0db6f49ed9845e306db0f0a4637e9f4619fc65a77c26f713c97c81c5638556006f3fe180b9e0feac32c8379947e82dc8a7b2850416388290660f10f395f7066f51d950ef4857a4dac390209be6f5f3b91fed7a03ab8c7b2a0fbe8d6dd83d1d7e782bd936ff38ff4092b13228eb187f7be4f5ab42a6933f2528e35db0a4d8299224afd0f459155c722293f2ccaed02fa599739f2d91ed4d26342618487648a96ef9cdeea3e06d4af3e5c0c8f3bcad92aaafdfdc40f7eb33a1d3ef33b1e72f1b495a0e78c22fa1492a7ec04b4a9f11371f9aa2d919331d713c6ab7367951cbfdd5e80a05eb9171e5aa300af01dc09b8b68dc651c02ee04943a7b0696fb50cfdf8906191c6cb02f9ed7bc094df9bbbd1e1af78f1bba8330fb408765ebd46eab3ed746e432d1f66ad3577553bb7afaf64d9a7e896e9c9d1334c3124dab8105de7a452cc3dfc7ee94318dee72cefe18c7c88bd3fc7b25863bcf569e363c8da0ea30472a60799b033c280fa9df0f1f7fa1ed539a50d7e1f90b396f9db83556ea5eef71b222a6e7ded325411a00e23b9a354a86241efb5e4011f172933c1c792c9d16596682de1adbf9b7c6c180eeff12c25e9813cf5bf705d085f4114a5870f2252342ca1985c075006df532c79bc65409a80debda7058b4d775889a5b8fbad597c4d22f5f44654497a670d04d5f1de85b956c1ed8eedfc7972e9490f818c33165498c38bc7075c5100fbe4c9adf824a38c5172f431e08d8804fac87989a26b00e4fd568c9c07e7119f831ea38638ff431b5a38f91847042332744f0c56a61bc03365221ff8adbd315fe804b9ea19370d6c5a5d24cc882af1063d26ef72fe0cfe49b6706d6563a5584810de34600393a88a37279ed40dc79b873e954b651406612fda889e6a91692e63e4f43b715eddbd7adbdf8fb83ca3c8bd5fe448b54fd191ecb7b2d9909dcf5db74c8df7a392dbf3452ccc1f017f8521b1895a0dec163437883736465df0a08a4c31f390810756f3f4143874363d374d6aa240c391d3f8fb0c415b0e5bf2a35f2b796c2d902615648f7a69b9dfdd7ff5f093de912dede5847fbc6b59120ba2845b0e41f65a55e2ef1c45a81485c926c14c457ca047ccc37be992ac4e09a463a1e4d6ba1466fd833ca55f3dadaf68f458859f621867d85a8752aa6716c823b05dcfbb1eaf3c87c1f231af70ade522b063a388d82016797251c3ece3d8d7f24f6023a4b7ee655964b9c91d893caf5f2489afea25e0da17d28043406abdbf770853e878cbfa68dd343b7491cf8196871673b0ac92813e1a43bddb8e42ed071ca5de2721a3fbcd7af91d3af38ba521024fc9aeb6672bc7ea8db092beb48f3748eca8e78687181d977a0a232b06cfd9399732b2f0ec05ffef780070b808ccd762a75a308fbe79df9e80a8382285284492b556c24268386d91cc567d6486cb70d49c9b0a2492479bf6d39f80be53d8ec7673dee99425eb99395059c2ab76b5890594147e2d49aad9073b9803e8b706594e97722cce69470c4dcdb246731fb1ab5d566d93922cc92239803bca89f8db1180eab995d87d744d370b0811a6cae85d44ac4d523b83cdfdf4692fdc875f7e9e76345c2b9aa999e45dd2042c2abf8127225c5cc11196ddf3a0bf1d42cc341788963d02f6fc34df5a29ea4e9ee946a5915f2f43ebfaac228ba54aac023ebfd0554acc54ffe7686d36011a8d6fc9a77c2463edaad5df0fc44d6bd28526c747cf8ff9abfa4d418b6c004f2b69a8b4292d67975e3889a905eac15b1f4fb54e163cbd0aa09be8f4e603417ae68c509115e1e36149960e3ed7bc70dbf8b3b8ba724068e774dfd9e6c15b7fea109b6f48b3bf1e2a786c6c88cd63e154275936f5a40317f7ef702701649b450774410ec04bf0a25bb161ab6e2e079c2f72e837e6f3ac52a2d8f3da2b16ec1839d92433e3259bf75abd1dd4d744cf2ad2a209c475a963a250f913fb4e207682e806ece99889e9a3916449efad55e412a77f63e38a0d528d6918769151ca600a7cc44235c7be0230666d8d02d7aa6edc14d09f9f0d669e9d55fec4a41c5cd3395ddbce21580d0d2643a290173d8b9411835f64fde6fd725a7d73a63d971ef695f31337b434be320b8fc9fb35c73f7e385bf25b07fe1af44b473ec362aa58f2a8a73425f641199b69b2ab75655d1055d904522bc43b044cf81c29c51e3d51eefadf0542f068656dc71410a7aee744417ce6477d3c8605a3e965fa517638521311044f33a992ecd3ae1dc038184d2469aa6998f978c86321a7887a127483a388777fdaa329a5f4f3a53582d1ab77f8f6eaf50f467fe767edb9ef71ad1f068c76b4b66e38798bc6f534c41f1a704d080fc5f2720d59cd5930a700a7cd7faa55054e13d39aa02aaa02e33260ba6eb89bddc2c88af50f608111fa25e3189d55455ccffdd072a66ce7423be70a5aad9efb8869df1fa7a88a26b939c5ef3680f0a5a4bfdc2f689437c7dcc34be8a136e96e37429ff9ca2c31924fec4791d03064bd04a417b623717590f803c6c138107f3d12d671df07a43f0bfc9b15928eb697d5a508182e4c450d8bc084c15cc6434ab042acbb9a06179bdae8cf96b917197335af72465e8a19e7005acda282f4d8300eef4ce6f36e8d2d473a0f32d01461df25496b091086f4eb37ee67d3fb6ad61ba1403f5bafe80edd991be4519d2c97c2ec9b7ac90ae8de0177a5d8ba8fcf45f2af5e0c81991ba3931ab2d55bea08c206d3ce27ee1557df110aa6aac106cc2e9d81713bbf78b0533710286ab87d4fea92220afae0f97b0003361a644f270898035fa0557f134e27b1c4a42bd11eaa174e21767c087efd48bf44298fcbbb2c8b0e9013e128339e25e97e4fa10c97c15222173b34cc6c85c02d7cfab29f8adf0fa55ef36722a04757c8865053d2af3ba2f64e80aa958aba6e3625b655325cca2db00f686fd422f2c53423d0c98c2dc110b20c6e67cca1455cc0888401ecf994ec18ec9982a8814776169ef78ca0dafaa33e9a2df2d779cd92b4ee8d3c3529e655c33daf270584ed72573fec23787e8f638240e4d320dafb16fb9df99175b3686e9a4ad1e753f58dc1dd4ed8167ae127586745bc930d8c77f27bdeef851460c141855a2849fb9ace6c9213e2ee10ca6b8bd3f3dcb90856e82e1ef897a27af89ad66db7dcd5633b59795dd63332a1020203af906ccd7802f7d0cb351a6f10439a3338a71413f4a2d5f325def26a945296c8e4659658c5564be26adba0743c086a62d073f88c1696ebdfd474481f5380cce359ba80e1561b8d6be233503a6711b16b1b63b1c732de434751e05dd745544e5bf5d752f0951864741d855348fa24185403be674cae438432846a581dd298c438a203350de91779040219d1265b0a47276fce41a4f48d57a9555a62766212d583478751c1bade73237936f15df48be5ec46d968566a8463b3acf7a26c5d8b2a43cbabcd937137fbd96a25db742c6e9aa9722804ea7aef5158718a41862ccc6b8018b7d10c74e8b92fbd2fb8f36a7d1068da033ce98b98c8a08c5b664d359a3f4215f387b22cb9542c5a9ab063187eec3066b138da04457194e5b23a47e1c04e92aaa71510017475d92aaeea4b9d3ad90afe7c21454fbff43b65d7e5fe98044177bf1aa3ab5cdfc33c13b58f3361797dfc8aaa1fb2d3cef89ef2118efac330c0fa3c955a0da3c4e760fef5c6a3cc028011f28459aaf83925c375aa5dc1c80a7222096061bd40e9884ad4b7b824469f8b4e1e52f8b426ca24b4d7e87bdd115b00f70fc3e14399164f047b438c3d371646bdf75c2359c5479d79fe1410d604ea1181340602281815e395dde16b770730586563e903203d793718d47543320b814ec96170ebf323adee05e1d97d591eb56a4e4b43c091f7289b9b40553d7b8de65fd67f4ac52c24a5155c6e72e96be46d238198b08134591c710929fa2638f2e2ebb074dcb75b82c602a36ef6d835c2202c0530796e92cc1c606b79ad25f2a13d9a602a6eea09a5d85de2c8ab71401e952ce2fde6b032b9f210c817b6623004bf16ed874886bdf5a3cd1f64dadd136195cc21e63e6f9c86642a28eb5d067a8230045f75b2b200daeefb642aca4336f4e8b4c9d2cbd2599d3b5694ddea395883570fbfdbf39659bc838fb802c5cc323d568be2abd302f0643e3b12d5a422536ffddd14a0545b5003283024d411a08ea6a7f975589f27e9453782adbbd5eaf2afea1666ae1d296d17a686ae88f7e6d296a2a888c17768cda6ecd26a77c3b8bea9e663bdec96273960c43a6106bfc78775103d26cea2ed23f127d453f1b6b53ec6b96c2242067e3b474cf44236b16a34aab96354676adf738dae306f12f809fa6e2ad89c98b755fb32045b5b0015f8619f65c01c74156646e2498dc6c0d0db7a0a034f34d6efd5028ab618b34d329896bbdcfc85ddeca92258c29361e4855347000a7bf1e5f726d7b828d3520351735c66e5c0978a37d19257e0eb4767609be8ba0801dbab176f03222333410cbab03a084ab45b633e051b476a3d802fa9d8e59ec48cfa1196d90c326ee0874eb578b909d17fd851486e479029301526a835c71608c257ffbe8b7c4fd3832cb38af35fd243c9173a9f339d9ae56d0d33a4d814899a4bf95ed5addae018c439228048b7c9673c1e08897ea5ce659c703de7e9575f43d0e8142469af4f064ab582e0a04657077ef7a14f74e8927364472eb79115ffcbf92d0bf3e5820365bea8bdf22296e4e937aaef393fed4fd56d99ed5df7d8d3fa6dcf298a49db64fdc71abafef72ed9d6103dd88e073c6e54606e622145274298d5d65830be42da950e14614c46969c96b0ba4698f35e55b8e5ce754aa08bb46cd84b7f2e6c40cdf73a9d9a24385797f1c128209d2cda6ec9a3c20e22328b913f1f3586cc7a5ca5e9f4be4dcdf5f831afe8904ee6da38204f435115ef23af42d9519c5452101fca34e47e6290a401d197cff9b7bb2301d2116c8472fa9b7f2d021788d3085810a5a0b1e5c1b56dfae1731e6b456332bceed8c7620d8bc184bb821902ea3677b79cf404fb5384796cc8097defdf282df1db6cfcf3cee9bd455420fe118123989c18fa84c9fe44f0dfee21928b6d503d290195b23f9e5eb84a61a56fbe8118e1488278da56ab3ffad9bb850849d82489eac81b914f6330da1c48da1310d05d7a424037adaa43bbbde497fc853106ec3abf98c5432a07a84a427384930f573a8c12bcffa6ceac016487ea4db14ae0f0772dd95c6dd8700e3144486e96c3fef73f415c976dc9d059154b1c41369c4e7769bef3a9ba6288aab6ab315fc535aedbba568ac9a9a3950af8b695a0b92f39cb37f94e71cfcf35c302fe951ec86c4d2f26d9ad5b0265e55e3752bd32e50c87320a66527f572761a33cc5dc744670c43baa522c162216a79bf7a7fdbe5f3a22f50a8e689af872f3908d896d29e74afc476f4a71c2aebec30a633bbb0ed2c1f05c5ef8f6895ab9d3d31dd0b2055401dc9b9d49e327516520f3a09960e8e4aadbae2f2c66152604e9b4132512d0359d4b7f5bd5ea0cb114a89ed94655153dfcca35a4b31e0604591d7a970df5513127333ad178ee3b76d3425234cb015d86bfa437e61488249bc2576fd312c351f1a67b1528b9577a49a8d659d9b1cb8767fb53fd1cd70a3694467fd9ecbbe5981d220b5888208e92d29d4df9f1801d5d87b9becf6f850e0696ed7d010d90c1ee5ca3cb4b1836f94bb8b98d7ba4be5ea58f01cdf407a5fb5a4ac0392f5c1ac01b5632a3350182016ca3047f2719f5f52826d968b60bbf39fb58c69bab01e04ae6b4d67b606a8d0ebf3d870b4479ac4caef54b775ba45c30b167088cbc256bc8181e983b127cdd890a2b491a1ceb6ccaffa45ee22cf90348431f8cf2abf041a0793b7ecb945ffcd816185292f598bcd7e2da1a9171333ce97b2a5cb7c189ec3cd1b493132e3a7265abaaab5d18a824db203f886d72798f7b1f2d80c14319f402e830dcfb2735c59790895b61cd422c3e817caf5c76f48566f8d3fefa7cc7df5c8658636cc97a7fd58f5e6a885b8e5d69cd399847c7cba512cec1e048b3bc37b172d42f4c5a2e27896ed1e1b80cb53ec2cc1d4917ab2777e769a22e952f1f8369754b4885237c461af689c7db26df58b246d1ccb26b30844e901ceec839194cec5766b7fd6c8a63f0ef2f24d8f23331a202fd29024f0d53ad0dd72ac919d219a1e0cc839e7d800673216a0197b8da53f8c94866ee9ee76d6da67ce980177172f2d725b44e9d87b80b54e36500c0fc461e635a8d5da2e558f724b334d57b1fdf46061b53f715c7ff204f4258fb51bf907a98dca539a1309eb24e2312b08c03e906335466802e67661adb2ee270b44ebb763076b769e4efc605ee758bf9934617982778f8d12d8f7261c04f0c4732cf4f78f2cfcad5b34b595aca51a798d80ff265aa300ed25d69ad5dc64edd68116bd2eaa790e665566cde18ac5d6f75a38701d58424b26b051a9e76b4d35ebb9949ce33176013011479dda65a44ea783cd5cc517cfbeb846ccdcd15548595291492cabb0ae85a91369bdf6e9cac208aea23db3f5b5dc205dba8c3a06c0d8c98c86d4fea48d0c2fd04f96bd73c3e1a91f796b708e9f43dd69ad30781c5124bf1fe03e42898bf542dc6bc094900a1df76a958e715ee6567dff177211e273dd81dfe7b11ddc45d1709c40b412cb27d77224991f3cd325b450928bc9ae15a363d0310fe5e719253137a460f9ce9187ceb7c1e6864977c7ce13a86c9f93125a4828a7cb4544ccb49506693efa1e6fb44426b7206c0dd9670425b54c7c6755130ad9c89c47ad637e6d7b7f4d4d98c227d84d98b93920646e07055dbdd8a17a681c820815758789dd3af53b1e6ca4357d0baadb2365f7a5574740e6034cb7eec40dafdaa947798c6b8e024124cfe7460e4ebcf2f17b1a08bd355702ef31412eb14ec1d4da45ea07b3b73105e2ffd8506631f264a5f0fe2afa61b628c43ea3b6ba60567b1ae95f682076f01dfb64de011f25e9c4b3602a78b94cecbc14cd761339d2dc320dba504a3c2dcdedb0a78eb493bb11879c31158e5467795163562ec0ca26c19e0531530a815c28f9b52061076e61f831e2fc45b86631ea7d3271444be5dcb513a3d6de457a72afb67b77db65f9bb1c380a1a3193694c9e9404973d11175515476c136877a211b0c87616744cd016ec1e74237fabc818243a4c409fccd930708dc09f781d72a9ea942774b2488c05e659d3a0767e2d1509d49bf5e2bb95ef356b43a3839376bbabae122b2bd58818998e9b09bc66e2d3cdf7563f8c79e7f1f26457f8219618b7728ac89237705ecf84012cc7c80293c4cf171d86139449d9361d8fe5b881f33ddd9ebd526ba56a8b24661b831fedba78abb854521e8736156edb5df4eee370bf5b6e62d43ee145ebf931e9942a74c15fe26f8d2be3bf3726fb4244be0b472bac6a7e5ba037b07b5280e919a38e2432faf1814a9c29c8b7ae99d6d6a9b4098e958952fa3edcaf756f49e01e09a198a9da57a1fefb572051ec98fd76306fb713fb4660d118a41ace82b2db896f0b3e706e83562cf1d2427081974ab5fa94dc465e104c72c6049ed14d6a2fce2c3182312812f256f841cbae0e13332850d9f5b02e755a51bf94b8482fbe416ec99af066a7752b0f771c1854d27b4b1feb957fcbfcf43ee07ddad37d9a5dd4eddfde257b6d2854a906d7b52f8f5df73f135df7044a0b5ec1792d9cfc1d974ebdd7418e09d9aaf3c62ffb2e789529cbf870a9d7f386292e574a23514e4a191371388ba67c8d8bacf94afce0da747d3dce7bffbf0441ec42245952bcde7041c78a8c02eb5df948d484e05378cfada6c133bdc5f8d0fdb32ebb3f121c4750bfef7c4a4dd9289d410f2ba8a562c2b154faca8ea331c42a1c488e64081bf34bc1dfc8dbd2fc56ea22b14fdc591b5e20064ef5870de66847862400509b287cc2162ce2e928d183705c6f5423e51eec6a2942373f6c8337e69f45c39d51ce4e642b5b7cdac5d518c06c9deaf7effa08003c5922004594bd77b6224a92b279d2a25fffd9391083914ab1c176c0c0193b82be0828823f97538b794e07e933b7c3fd426e9a7cbf79878fea8e8a270c18f1523ce3cd3da107b492373d8df95c047ce5714c331e29136600753997933a55c3ff2750828b20623b1cae554f5ba1ec77eb4afd35b5c3dda72cd067118dc17c1dfa0bf2daf32433619b1d39be789bdc4f8f5e1604bc3654e5958aab9a8f37e889d3693f592e22f7b28e226f6de8b0606e32291b4299e7058bbb025ba5001427720bbd8a6f64a33bc8764c4ad02465f54e841a7151e76c6c141de61b9398dca571137788905f3b5bfdd3f97087a443177af5c0acc52d2cf5092e944018a1f80ef17b25ae6e7641f4dd37b864e6f0de538df7aa421ec3af2cf57d9b8d96c3fcb09db356605c425d72e112178c90827e15d20a45c5b14369a0437b6a4880776136b04c7842dc3bf472a3e3957bf6e1c8fae1ce11ac4f44f2cb9db89ef57824bc1de3b719ca80cb9d50902c90a79c87456f57839c6a2b10c11b4ea5a838e06473b2a283a96bcc89beb9207db793f3fb59df8dfb4493e76f6b1be0d2f4775baf0ea17722a5ab21feef08ef2768c59fb69ce80f75b89e06993749eec122353c7d1366dc249d1d238384cc66ea32b0e2317505568356fd0b26ec31e2e0aff72546f88f3bfa0e1633c0466ff21693ea7e0488b3fdb4ae3557a0c04047b1fc3188a544672123673af52d7a804b3d0ad6c5983e706f8a3ceb8e9f7a1197d5a588e9107dab3621370fca33b799ccde060a5b750cc716647164226b60025d9c2a41c9010aa7b5840be9357b7418e17a23f9a2137a24ace3ea5385ad18bf03a609009aff820959cc447bc95d469a3381d3393c0c1d157d79161e5acd0a841463a049f1845a2c8d5a7f1be851857a3d95922d7bb75c1612a473490453cc1e1a55be924f0829adbabf2a6e3500d7456a15ff6af3bdcda2f6e6805804c9d3d9900c825e162346f97c8ac4d711e3b288339369563687c858b4cfdbbfeea79842fff8aa21e93e589c4d1ddceb11629dcf448e6e93b69e0283b6c0d4052475afe6b49aa4623ae1c502a718d11eb615ff66f7778d87e678d2d0875a07bc48ac713178730fb37d9622c904ec5fd672665e0bd6ef34c76890dfaba10be549cdc492bf96022a8a33c3e85bf108c7c6c8ec400a6d45f2c69f8e6f919e470b3216467aedb7d8a35b00138c38060eb7643c103c0f151c560a0dba390ec9abd809c4ba90483856f89a34dd84e99e6e9d135e6aa87688f2ccf635bc929fdd9aea355b89795b921da8ec74ba78ed2498e76882641bcd1339c63faa0e22b124a4a0594d4bac947f9d22b63202cecf531e24d84a851c9f5e81d03acd176fef494998ca1c69909f4b45f48bef7efcec848ee3e739561159c54b897c2170b0a6b60a321c3b7bcbb87fb89ce21f6799d1533b9329b14fa088d1f740884992bb63f5671ad44cfac49c97559a3d44551c2a29d4b0f464ea30a92f25a3c3a805d6c371d0a166a35f01982cbd6b01f0dffa3372cadbfba6ae4837175701c2cf32a941c5e76467e12109579a409dd4a760caa9e88e6283f9145dbf34fc090a21b1894b6c0be23c78d952378a9f8139ca7ff3e9e5afe341feb4f7ae0285281e31fb1d5cdece9978fcf062d4582ad385ec960c6fe4afecaa09f89c900aa2cd538287dbf2989ff891c00eb1aa9d63035d903b8ac87ffedd10cd67c2e1b7b5876e95e03bb914009e0b846cd526c4d87f3527e8e570122d333a9b7ae12f843de4a3ee8cb2fcfb90d86a9cc323d5690bc5914616a2f345ab9d7c06ba9de60abc43b7eef5d84a99b166237b8a5432f47d74e66d5d49ce750a6a59819f5f81b5a1430f39a4223e88f295cac33abccbe1adebc8f025506e4aca2857bea18caf1fad610e3120172543c505c4e64ce40ccafdb8ad80f74d5f115b55faf069cbaaa3010c5977e22dbb44b924a6774950721b1d5a08925ba71d733e81b7d9409320da6cc3657072dc5d163f80e3d8a888985c6d5e6ea6bae435daf42a12dbce599e304114b6bd5ab98742d889118cf302ec096e244420ad8b14d31cbd907a8ba57f4f1e8ec1a0f24bb63504cb9426b145f99ca04a2db29c0246e608cac537d0fd408165701adde1e9867754c6f0285bd82da0a43e8fbf1ef0587e58c0058666d77e71b69726c69239647448f9c9f45b10149fda8feeb8aecba6167d4bf5f895baa58a723279fd9ba1dcd641d2662d47a42af4c3accf31b3fadc48f6acfb00e61d525628f098e556c95bf7efef7935aa0afd39f023a5acc71447705581a931e075e14f6b4fe8106bf66e6393bf57afea9ae7f9c06316ac709e94470a68650e1d6aeee089aefbf133df90a3eda0a5ee91fa979ee509769318f03f1795afd2e7e552d7a434ac591a56eb4f334e61d894389078a3be856a0358bfa47c77e66761d0d43824ccb663fe4d90068c46415413370307a2cd45457f886350e0319a871e88459ccce25bc11f7064632965edccfe15b8c11681e7bd6a5081e0ed434ad640544d5226f61ae4e077dec1951db597b76d2831798ceb16462971c0ee3d65c9a9cd5214ad78623403bc75ce59ee4748c1a5d7d5363eae04a57bd97d8d7079d5ad6bda30caf9c052dbc6bfc5e2480154cf485e28e727cefd1ae01f73259cf58ebda86c5329fac3b5eb1f1364c8cb724012dd11a906c8bc63e8ceba5e511377596d1b7ee824ebcad1b43e271767d9189f4ecca8d21fa204ddc1b0407b9a646dda3e3d985c665d743ac9ac414a5a0172c6d5af6a309c4426cf283d38675c105765a3773f4c48b02e558dd2289a19d50f6b39fdfc50f71f90bc7ece18be3097a2902f60da24569477b68358137321b45cd10e20d59fda94d12a47db47cc927afdfe54730f710a7aded24c96b8620c2fc9bca4b07c999164769d15ed6c2f0c2ac7e4953625befec3c23d4c267de323b7f462a04557bac5eeef896b8cfc6208377ef77422e36a8e0fd05c047fea7312ed6b778327fd9fd294ba83bb325ef20111a1bb73b19f0042cf77c3081b649e64207d7fc000d495620645f077662a4ba169de95166adf1cb78336e6b971a2c16201c8dfe9488357dea4306432a0d4fb43706408cec71a2c56bb7c5bab2afb98c701cc0c51678043b30f08638f6af57d71e5f0ab1f5ed69b9ae8d6765faff560fd9105a9aaf631e589a71c52b03cf24eb73b02e08a8aaaf71e9bd3eb496916c6603ff42c586d3eb9ccfd0ad6778f51eb8ddff94d92e2fddb3c34d30eeafed645a97f1608ec54fd3cf781525337eaaad050556246caf045948e447275d6c9ca4b33def9c3c91603eb83c4614d63d74399c93bcc60852b28df8f5b20a47f62596399cffde19158c9420c46d6499dcde2a432e3a62f73fc0df8a9e97c1f57410a1b35d2c0e6b765e3dcfb891fcc4846de8c37ed6e07f9fb6b9c886fd33af0fe62ceb277b147bdf5ba18dbfbbc49f5cabdbe42c9a28e99a1d827856ec4abdef2da1a7a3f6d891760d282281f2a4718d1f6b6de08e227d577ca263b56ded663b7067b079a443f563fb3b55a73e84843e51012841b9b782ff5b81514c8604f31c34e6ce508d3beecfad40efd9a74c1e98ca03dbf823cd42b942870ac34178acb90386c8d0baa9c5e2aca1b9be36e488c311db4fadd44d03aeba1c55c1a62fd93b64af68a23276c3c37fc478fff2340ae6aeef4c07d5200e054aa8fbeebc12c2c9e0c9746efd882d9bae13f743e425eb292aa99aae2d2cabe77b93c5f38b09af8cfe3cb5db24c94e91c2f4fd33129d75b50c70004be45b217cd44578781bfde7ab4670f392ae206dce42d151778685eeb2dcab47860394baebdd26df2475d4b34f40cef63ba374d179b611bcb648c69f4823c4370690bebc5d1e9fc1a0a0785ba075bc857d0cafc3bba61c06985e46d09d6722987496c370f92016e593a4cf27c56ca36a00f0b88bbc9b5af7c7d2efc9dc332d32771a8a1ee86af414a68ac35ee7adec6b6d577771a31d3356e8aca8d12b0c4dcdb826fb0e5184a21681593b4a2dc1fd516c49d4bd99b20feda6f25831b27cea30dec1fe875df786b3cb191e31c02f40e3a4cfb7b6c5e45682a6aee9329b0a6c2492f47bd3344a0ab32dd2565cc77f1bebbef008a5503a70de93e7421a0b3f3b717cc65a38fd0595dd4e8dca136b3af82f61b5afd2613cc5c913a64b312ca1bfdf433f83ffe1b18efad752629ed4e73e79362494852173bd0bcef2ecc126ba61359067df6f07d55fd26f270644290e558fe548a006b766c16b6ed30d102112873d0a4754d297f96f2dbf169e4e9337a5391526b99c4c9e37b298519667442f9bbd5ae6cb6ebba526d36e26120439eb96416ec8c89108a189a8f6756f0eb79b037e274c2d8d9962ec8c255f4aae44b1906e9a35b62b12f91d153046814da3de29481a82607559b7291f8cca2f94db12fb873e7569b3932d5dc1eeccb26c307e73e3db8f4e6e242d45554a6ea7fe27953f550591cb70b2c6b074d710ebb285054b16117bddc2224ba8f608549b334fc2c4a09490c3ac984b7df593191569cbfb18aa644ff7b77a99bbca6d82f47c7c21f22f967a38ad6c442e0dcbf016d729e641687e128397559fe49822029821d63b32ccb15714bd573a2a84279bd844c850301504cc69a8dae68c2acedc716a8497ea3d8d303e2281b4d9224e2441facfc04c7ca185913332f51c461a16669eafbd844bd30c9e24113aa3aee9923b4067bffd64fb46e37f8454fab5aeba5e077e3666be2bf41c0d3054f0f29feead5db8d4ab94ba1647d6f98c903e31cf43eb1a89fa5e3cefa023058b28b4193f7e9ae987bed587fea57eb92445ab4c5efc93aa3ea6f3af0512b0b966b3bdfe8d983f23609eef0a05e5c0eba480c3a66e714757ded4442b3e5afa736ef9d5f7e1e2948de8b4aaea33efe4b794ab4de8078a4f49f0eb1a59a3604a5c2963c3ac4244e050a666cecf90ab32467d2d12b9312ff2a7fc533de13b0de79c215751c4b8a66d93221d22632501f2c0e76edac2f54879998a73756a0f471b5ade3e45e84bf0817fe5426f4bf9da6b4d58d66caa5abd2c4923b58a9c25f72cbee68168bf040a653c763b7d32141ce6135acd921a697653dc4e804321870663f1c38682f2eadd61f15d7214be7fb1ab3d74bb12ba295b367d943d699e3d5a081bfdb75b28054fbcc6234dfc97417f02f12f08b531a2551d527c52c4be4ddd63631a7bba0a5e49c0e44f36fc6662703357111c4328dc4a4f838e281c26c175bbf2a439693ffcb4b3736994ded3eb6b8599a45f8446e024153952273981a00c5af0235b2e70e876de9afacf6885e35742dc703a4034b5c9b79c51b7e375f38986841d48d24528798982894f6325521eb04bfc133e9963237dd31241e1aac1d488d61c681d65c6a3fc539e7b965a41a7170bd053471ef318ae071d2bfcca12d5a80fa723d679c9de7e34c1bdcbcdb6dac1477463236b6c92945ffbdffc7aef742d5747e1c7283a11584d7b7cc826bc9ff52571a99a27d678750433c3a9645e9961d5820ab61b2024d3c75321560c58defacd4d8f73fa39b29a1d4d41ca306a2c8ab2e3066cfa83fe35cad2123d27947f1968937c788e9e274bd3d2c029861815f115ef3db16c6c89c67d7eb84520776a9a1ec8d86f880cc1d04e49a88c0c723cde2730184c19e1acd009e27b369f0988c516760a21938c6770b53a60bc6d7f8998102dfd07aaed4f999683c4d74b53bfe179247c5655250174302d52814f47e569f76e55a8c7955a6a4bebf9f1cd5cf8386e5b95d676df7824e9abe5a25bd33697047c89f817e3b68b50a1844ccc2d1c101ea2bd689fc2b2c8053b81e9382a666b61deffbf43de4944ce2dcbb0f1cc11b2b1815cd678d798a8af668e1c8e545b2d331c21c5f28efcdded1838e5e443c1664e80dae6a825120c0db37404075aff25a5bf56d1cdfcb89dd4e831b24c9a12741d28a061d8b4093b47aa9c694943389bdc4e05ad7c2f63ceac2820e1d2d7ee234700140eaf8d637e86d36c13fc17f0d60351981fa62fe6b69c5d6c381d043cbcf4919fb7d6b70a1df2b74dc9c9df0e1f405076f0f3052a9dcd117d80d628e4874b61aa22f43ae460b2dda85558a27abebbd407e80db816cd66cbbb80a44ccdcc75fa9b18b21fdb8eefcde37d50681cfb9e64b3ce9950918d90148e023077e1d39ae4db61b86dd6f1d010680a5939dc1d0e89e26c42d6852473735ecc21b107e3e0a5d3c5ad2cbccf7e2d9dc31d1ea26e35cafc88ad51d9db367093a82002274672c7ea0c3965777120acec72411e56343baf69eb85c975fa0293955cd5732a4276d287fd051fee1fdf16bcdd7042e0b848c0915d704741c9fe65ccb0e70bf620154c1462b9620921e3f274cd509128428286dda516d1258f536da16effd3742876bff801fd36b0be53c87e0a8913161a1488b38d2172099628337a5cc4d18ca1c2b29ba277a4cb3f5721415cc4d09387244e7cdb362fd524a640c044df0f27d520ae650fd2b342ec1983258ba9d185d2db61a158ff127182f41bdcecf7952b0ab93abe0fb46cfd0dbe79925edf1dd644604888cc2422c5f83c4c341cb5698289b4de0e69c6d5e5ea7188f09f0fbc6c23dc8b9bff4d67b9cda35c329ec195129a3a22bde6aff9e0cb583aa714e0b731b776b341b821ea364b53d23d39c221c584738f334e17ddd7f79b161f86fb150b4a5747e1c148b222b87436bcb46013819186acd869a88bb3b763a4c1bc07dee422a6cfe5e06bc7675d2d1119d8447530079c0115fe080a5a53d86df380ad1aa3888cd4b4de3232eb82a7eabb6d164eb92fdc1750d7df62b61321f81e9895d230c431ddb68244fa986f0a490a3b7da704516f75f2bad69cae3e67cdabcd660e731ebc7253964a27546b7db66e092287f9b57ca4647094be291ed17500e7c8d454de551bf3e0ebc209bf28ba4fa0adf680a22c2a0dc1c2d311f9887787ae652ebb4b2661fe2ad0d29eb434dc15c9c5fd8162a791547408e04d18b35ba7eae22390ae54cbdc3aa05ffb90c9a5284a12a2e43b1460a3530defc5c37baac762eabbbb4f0ae2f5d80472089b0e9cf1eb3eef91769b2061247a07614208eb51df23ff24766e2cb2cea411ad1f2c49d676eeec705a6658f5b0f63109dc81a6ac2935f6b36ba83379e32747d2624b3440b1cca06a319a90c9bf2a74a5da0e644008c9a95175e17fb3de36195fad91e698668013654162514419bed81d84d9ab7544871ee4de4196c98878913c4829e6445bb24d4ad4e421ce85596559220706b3a4165f55ecef0221a996b6517b39bcae5909570230488bcfcca32441fcc3fa62f11f748de8144b25093790868eeaf13c272d38749db714afb6461cbe5a3311eaf34963731ad7f73c6f0428c4c8630c588fc7f887655946d70be755b6837fd2b3723d36eec96190cda4a485f173cd9569577fa025cf55a8ad9331d813c0d0c525 +MD = 275fd6d711b0cb17ce238dca1f3f5f855da2a3bf1f6562deb6a8381d + +Len = 91632 +Msg = 9274ea65d1a8c3c242f923e64ac9375b16242caadcf3952c64730d1dc8e61df2788960ec80c5e4ee0ea9d48c2e985464d93fadb12ecaaa1dff5842d78fac76e69a257dbd96f01f0f397c5fe43b2e5ced5d577914aa63bc58fd5374d8c36d1f2d02318afd9b903acdcc590b17f8f4179dab52d9fcd9249384664bec47eb90de70b896cfd7150cfed2ce27214dee504d1dca1a15914176f64a432af34d907f7c57c23a94718ece33c347d0e9ada3abc514c29575fa6cc2ae529bd7cf1239a1c1892a0721f38d3da14b3f3bab60a16e482b9cad4160e26e8443763ac8bd6e5e74aff8e4bd869bc10f10bf50af8e70ff9e0a5f49c0ea29e43dc6dc3b2877b81e5f7032b8b2523fc247bacef73c5d96c88f5813503bc1cb8aa482d6c235679d494875e26d467e01a80ff275189cf89d2fe3bdc0acfa0c50ca80206bb739b6a747f8660feac23269dc3060bb9b15850d9e61e36f4445f43e0b9847a4027a8b5e8137eac2176e9800c472aba868f02d6c7cd26f280064a11fb4b5a0878b410f495dcca902dc91d54dc99c7b446875174431fe0cf1c89e3a7a2f9fd21f3bd569f044814cd7217414d853787a9881eb6c1c25ad60d4843de8d8e31e8671f880c2db9f1c7b49ce607b2acbcc4eab9c9c537dc0a713d81c87d2c038fa6487ab884293d466dd61cb9b32ca97619f85a2cef5ee6ab3ce0578c521ba96fa13683d36109f4d271b26006d624021ff162f79ca79f78b9b3964813efc4e65e83c1c94d255877027dca156203315d06d5ab00bd808208b25fbfc1d3c8c050d8a86ac9aa438d4a72dc9d8b3fbccd00b7514103e3fcaf2d21abcd63505f866f6a89a1f35f3e20d59038ad5014556f93cddec58fc49e6f4c84126f8b2e269fa890c1f7d4f097bbaed6fc6a02647f819ca6e898f2c3c85afd564df6c7a1b07472c7dbececf2c2a63cd3a253f0c49dbb71df094bdb661cea962498f3a77f8f9d748c21f1b9da51791602c51bc9992265b9d2bb4ea8100ea6cd5b9df688fc1683246a4e96ba1bc6bcb0e0cef1eb76c028db2e7921f77610080987c7600acbd7bde8cebc5c7c3b84e9a3fa4aa6e4d1d97d6c4ebd6647fcb396b115afe09b5355b65845f5a36ebe3e7855bba27b342ee0cbd3b0027bf8188bdb7aa1b1c8c92712f4f95c751c001835f14ca1711f580278acb7fee2d3a66deb3ebca867a902bb9202226ed516dede1ddcff5830e3dee103886f87d91dc14164390d865c01d68555668a197034697458a3f42c5c69274f13f780e74fbad7477972d3e7e963b318cf8a86d8e0e52e7f68eeb1aa7e3fcfa11c6292a9d12b66e4bd44a6399a2f36ea82f6bf29a1c9ac63e105be6ef0a8368b9f620b2be7ffeebd82570af808f4c07ef22389882d2241a6338180c66e530a631f7e510a0ea8dd168b0258afa034fe4aafa97c710dafacdae2fa9f6d41c0a9dc1f000aa0bf96c0a419df45ccea603ed20de10e70adc24c5671d960a01571933b109faeac757a27cab15628dc522700b9bf72c60397fa8ecd62a68b2b43d6651486c59379baa3711f040f985a71c9e24616c729a656c9028437ca655b776f8e0cf3ea8f8509b34af574540ad3c3f9621bb666bfe564be463f53ed85ad0abd8c68eaa6c97aed1a040274cbf6b4b305febf10d9df2d3c3aa843596872bc8840cedcdd52f7b7df583aba97fff289e9a01684b8892dfa67cec734bac3a2f66a89e3bd4ea780c85aee6d82504874dfb2385821100d22e951fb1187fa979ce74c0959aea0fd0b28ea5d0afe203df402b73f2208a9ce3456954025b18b5cc70b873faf1596cbed55f8149182aa5906bf633502aff854f8ee9c2e62460f7bc7dfc6ad427672bcaddc1eb59fb43112135230ba787b8e29e6fdf12655b9d98d05d064c2b265d717c327c8b094076701a057ca20021fddc565211eb87e818bf91799ec208d583695d3c580860cf0bea0445c7a162df169b019e49f655b3199585378e74721c2038f4641d0b66904aa6665ccdafd6a94a4626bb4ddbd6a4e84236009d0971e37d09c910923b246c7bcdc8b256756367e3064e11e54112a4cced2c3d922a0d12e30265a98041a149e586b2af2a9b110127020008dbd012990fbfed54367e4f92984b4f98afc4e611d1faadbb10c8e8605f63c408f631dd6df7df03af51ae3e49e40d0f44e76df9aa8751403ed1a4f16ad2502279fd0c7b06cd75f6b4ab61e22011702e14f0e4e4fe4fb2f4a035d83308caf2a3c3b908f54ed8ab4ccd0b4044ff669b337291d0aff371455049040cb6238d70ce4ef2ce522b62a78f613af26bcf2ab7a6c594d960733434dca106e783a164f32c826f069a87b19146d701205f76a6eb1074bfa80165e2a420110312a16c97a343c8fa57d6490e92fa99267229de2260f8e9dbe599b0c1bfa5ffc235186a6ea79e8659690d59c1d2320e718fd0ede53de68baf38313e1aadf2d40cf7f1853128c22555e5479f1278769eac205c8d39ab62c20547d0f634968ff9a90033a3274d390eb6738c0249ac4eb19dccd6a564d2f5f6a3bd7ec059a105d461f9e6ae993f8aa844bae56dad9843af0e3c451dafd9268f52404384cff6dbcffc8a138dcf253d5ac76359c58761dc01c518b1dd62e97ef5da78282adfbe9951415ac1281128da8e0615f1f31f32a20d8a0723ccc5298491030f349bd121c8c1f912f867a770eaabca79b4dfbd311c3c27b1a1d420c2c0c995aa70bded46ef89ec59c032d824f519db37aa71a986d2f662bf36dcbadbba0657f4e2797b569610e2d82271ee6d813f01f6db922a5a4ca405d9e7cddc9dfbb1129294b8c27845bea337250c2f721887045e50288ad513acd6a6be8dce300a308e2f8e600bd585fbf61dd2ebe45c4158ab18101c0f1eae789ecfc205d8bb6fed9371d65a9e94dd2fa5322ff75452851abfcc2357025ea56e24fbfb1d4266b34ee900768fc3dfd6c2761f4716c97d6a36092192c0abbc81f832d372be535b5dbd578576e6c2dbf61d328c1f3189047a124ec0643e5161c87d8eff2ece54bff5a1a7a8dc46e2b2c8a6a120c131dd103d175951a1bb3d740565012637368dbd03629f10b2996c8cd1c68a8434fc0dc93aadf17b511eb81ebd1753f096df467a1068086600c6a8909be5b660807c6156f93ddde67d4f08877afd4c0752b0c721a31aa951ccb5dee7ad6cee5bae9721e0022de63b2d3575d6c37eb410739057d845e24c7a204e56b88fc1f81dc437948edee7d42267ba4934210252b6026940c77d27b7880379572cca4e9c4fcd43038914d16f4235c5cac81bf1ef9e0622c818d352b3247e1e2b6be57aa499cea3b6f82c557e449e3f42bb39b4537387a338f0cfc908f69725189c68acd6a2d13ff504aedacbcfab0ef73403b146db8ed4d87afaf57ea5587667e8db4efc13ddff08d523c81c8c621b325c0251907e219defdbdb3edddac9f96076c7c7dc93fbcb369213863a23cd4e3a5abdfcf8064be6c73efb0dec3cf1974a6fb47f3fcb328bc964047eed3bf48f5957bc1b48181197a6c9e0c87474d8366ffa28deec628a2707728017fc7cddc7d57b8814465f7d98d5a414d93d2986bf1540ad4cad010b8739e50eb9319092dcf7eda851bb8096d19cf81fa60f04041b8568ca314850be93a6e437cc521c1bb807d6a4386e26642a42ed8799b2ad5930079b08f586f6aa34989881b828cb7e414d5d053329f7f08c11aad618edcb8de8e201ed002f9cd750552876e67b42c56110ab52a9b29b41dd4f58938d8a06a92a60c103ba0be94ed026bd9ebc132cf8ff9ae71302d2bb5f07451e475f4f08b3ddc704d28ce186169d537f80a3b72f1d03313ad1a551ff53f03b2579f60576b6eb60f1e1dc7b1a379d2495a40431f33e541ecc12fcf70e24827894b1ba74fbb73b73b1b8139f4ebabae1289245472162dca9c4616e8c91daa346947813633dc0b5486bdf9a16caa6dbd15fd3d0c2619282194b4363d72f7e3deb4d54699be4d8412648dfd7a83503e83d63ee0b695ad52eb8884243a1911737b0e6d024e59908c757703e341c38dac86d5b6b6006b533c8cca4e577b25ead79dd8871ac0704572f210a87183c7a3265a970d3365f19b4399ec6b465d23f49ebba5ac169c9cccd61cd3e3febcea413a639caacf43e2f616776173876c9dcf1758f8547c4f5997246a236f0149b5d857364908104699f413b9cbff8125edcb0ffa3308b2351154fc4ea1721fd6b4e91b474ebd7cda8105c9d57e57da25be88b713f8416efa7e66bc4eb0c5b0d061e3e51af0238b7c52bbb76f0b14d8c86a78cb3aba96f91bdb4ce2fef3a25ac337695335efe2b2a869765acaf4cf23aa7c2baad2fc61e6f5b2881eb3ccc0742bcfe9c40c806398eb5fc6229dcdef41288e01d481303acf34be98be21ae88937675d5d613743e84b1804bbd3bf8ed97ef0aabe6a9e89a08454a0f4fad3b734f4fd3ce07ff1dcc3c978557794a0852be5a6c7a4fc198082893df5c51dae608fdf45422b803ffa4f719c979e53c6eb71af73e0d7e7cc10db6ccf8f0532f20b23610918484e69c516a94e7339f87ae734431f9d6011ff5f3194d217bc21e8e276e30f653fcfb7649fda54904f6a04a1fb0b72a54664fa980f690e34f2d2d80a12cb20d216ed7100726d7798e893ac424e6e34a191c704e1fa534a8fb02c09ae7f820407d78edec018c87f300c5abaf2b5d42c384a2167627cba50d0fd19c5f4437183ab8a9c47cd18553402c4a775d8b9a52313785c69451c06e69ee2815204e8ff656635fef44efa7b5eb61762261de14ae1da235f53af639fd5a1664af907f69371e2e29c2d6c47a1c4f40e7415e8b6292e3453126dcad7eee482915d0225f39770c4985e3a4f86312f63b0c38a62bfabd2c9115dfebe0259dde96ba2b58569722bb7602c621e3f9267ab0538cdb384389442642850b36c49867dfd015a50df8c676141eeef02fa2c347515bb25028d393d47555ba9d09b27a9e74e6338adde4def6a438c272240675e69e935dc776314957febde523d19590ccf66ae98c5ed1d8a7b6eee53a798abac2e888c383c8d3364932e9993236e4978db4eccc2c09464ff3ccbfdbab88b60e76dfaaa827693fc722a2675b3aa205db4b60da3fec55b8a1754619fa67ea0eed7cd48750150fed987eddc58fcf9b9ff8a06ab1d94fccbf79a6c38bd5d205fbd44f779d7fff054316a84572cb439c196c0743121cb8e6b13502b594028c75035f69295b7c27e206ce4969fd72491be8a1fa7a696eda3c347003acb0e4f9bfcbfb447a5fc9323e7f1bdcbbd43942a3a426f48126640625cf9744096111ac3eac148beaf90ba06332abdcdb8564b2bbc2878fe7e780df4bd9372e6c32fd168a2a5789ebe5a7f518b7eab4198fa93bdcda30172f1b49b816e7bc3d45952bbb1add10d8fd7422a29785551d26616b208f41bd44b73023430f81b2fb1606121c792afcf3b043002b8811875262991f133b9f8b7320c4a1e29e2d97d25e1444bd1d9a585474c0c50262e2de0e5e9559867a4a373cfc574a295b41f77dae2e381f80b1df95eb8be5c9b07fd5ab8ae49efcb3e82d0c9a568089cf754e3756e260b64af7ef1264e2f6e3e95f0ab4781553e880efe95c9b40f986532df8aa18af5303c4d3036471845ce375f6f9a396961ccc59c808c76fb4f9a19ed2a340440383aa96d9b906a1ee9c4afede0f0366f55e2ab716e7b79811155dfb19ca84697d76fd29827c637670497cec8ac75e89a19c86214312b794f3e12e0049db01098ba18e0553ca255fb7c90bb773cf1f4f296c6110d32641f6bbc19437195120a49c97cfa2d42ea6de23bf79f82f72c057fb224e0e5d8ed13df75b2317dec97dbb4ede549a7a16726242714a17244edc14a5629f8238a90fcb34f25d2b20b072be10c99f44bc1e129ca2a2eeace8dfed05a6b1e814fb21382ed34b94d97582aa4d60fe124a10a201ddc2b8ea11e3925dbb7d74ba2f2b73f4e970bb7cbb43cc8ec9ddf050132e5ebab60117defebb02b8a6a84f8849301dc08b8bc67739220a8ab3e624db285b80b7b60c641fcbb59d8847a586d4fbaf8b258592e116eb86a938abf82016022ec4934e33122ef199ef372ef3df12aef0488e4814bfde3ae8451302a26683292ea6b7ef23a6af08ae646fbd21ace3dbb8d285738fa73fbfdd4aa478636cb515c19390394c95f29989a97c82ad64ab1a5fb58578623bade2cc46674dc9972e408e07d68d1c64bbfca20af80ff5baeae36b6e18c74ae1bb3c3ba4c613339a5141fa9fd58b11974dda8e156cc5990425bf4268ba00984dea24b2025b693fdac0928db82793dab23a9bb455354415d4de169b31d384e8b4bd54b5db91a05cdceeaabddd4737c629f4b8ab570bfbeaa19681dc661ff49aca9714bd9d0368f9155df3019bbef772732ec9e9773b6d95fec1797c51d9a04d042a1d3fc32b23c31871240f6ff9534e322b47d5425e099650f165f1a1ab487dd5c8b6c2ea6351196ada862dc670cbd7cb8cab1554ee606a2ca8efd2b20f3d8bd40579dd7f66718a60ecc1f33bdfd1adc3c57c201b66f28ff64a7f962f7ff0156362eef5fe8f2584af4a4fe64c70f51e9f68236bf242408642788dc2666810a928538e92e457bd96ba55887d54eeb6c8d2d7497f962acadba595a2ede3621f957779c13acd4ada4ef6a1142ef193872ae2b546c1636b11fe7434475f42f86d88f5283f5425f2dc0c08bf7b81af29f6c36364b3e7e69d867d52d6f3bcf1959ae215f141856aca635c4503170bf9fc8610c97819498c3cb8c6a5e0207d7bc4184f5e678035285be0ce501e8f244e95a5918961df6ce0b32969020266274e0e761f32fd63e9cb01d4c09e543c71398fe5d427a48ec870bb48e2eb903d30e4cf24d038157529ef56cfd1a456b7692745b73728d29ff2c89fa7b2c72c0e20dc90b510d2623c6be1e5327ff6987872b441aa69015e9b6234eac6571938617d91fda73f964612266f179d3a099c08345d2e2fb845baf9ad5227154e7647cfbda1606bdaf8439effd388709e51d3ef147e45c7c36a7a432aaccf151752dcb157975383717cdd4b3ebb924cfb63c28599b432f308f41ef060b16d56303359aed1c0617e81a895af9973df92ffb40a643a8b7041f7570ba9e5ec6c5937ac5120c2d8f4cd89efef3466b8bae309c6fe238d6088352d17d2a830ca568e8c0255bf912d97e0f8c76c524ce6deada811201bf8dfd53d08cb0693c7e7b676abe9d9c3c35ac5696cd37fb1a28a9553693702e61355f1da18c519f511b1069215c75fd5efcd07c744789bbb1e208984bb8d38fa536f688cebba8f34a4a2b171683f4a7e6d10c97b1e4b62d6f62525b22d9814c13f98a3d5e00fd8eb0759619501963c25c1b294f568b057bdf114f45c1dfc38e33e4e3e3594297980b031716d7070a754941f04e6924bdca8657c6ff32b0e17d8e60c823c86bbf38e15c77b7b43631e934ad2639f5962745ee9d81317d362340abd603a5b262bd96bce87da3ee8d2046a5c696bbffcb8b119e494682a857d10012ac5a101f0fd9db230ef3828df31eb324f4077a91aa31591ec5de9abdfd32e44c4c960d175a5b2f9f399ffe9a5275583a9f401eb21b6043f7771122c30f8f15e01c7f43a32b8ab9b7ce4bbd1b916b5e6e2f0a506b0661f7b0c9a6c2c37530ba5686dc5bca6aafa2f336bd671b9849ed490c2db8c3537d9ed1226721c4175dfc37f077fc95ff1211dbd9bea59f4f572c529f71fdc2ebf960e2e91ae8cedd5e030ac416cf0ad2fb2ff81f151fb19edc44114e9ec770b420646c8888bee9af7af65769827b34ccb224d1718c7c586d225d0e827bc0d69739d3f766794c1e75fbfda74783a918d37e17ee35e9649da46f9dd2a4d18efb7c8bd409ebb53a7417274280c6e001c0d0a930d8d5f581862b0c2fe41a68d9e74c5f902c7f032ff47d47ea6d4e632a33ac799916b778781eea4139cc4e084aa3edfd2fe78a2cd3a58fa220f347d2cd794d377730453af46ac955e413a679883649add8c274f9cf8f36820a9c19f6919b9d2af5afe5029b74b19257408c823ca847b7b346a52fcbba582dd0ef2c971fa0839c381a01991543883ebbdb67ed0e02ce62e9fa86996e2fdeec9b74e97d1e90e6d36bf900c80bdf38a2376c9f80a54bc8f8a2677dfe61f5b10793b4b66f3773b018b4d54a552551a706f47c9c04aa8b1cbf0513f3254c14b7c6df36fc361252c8b33b3447080aa0bfb11992c540c4cab2003b8851d7d595da71a882249a563416ec29a15fab63d466edcf3784fe9c1172026b4efddca77f014f15219463ac22820ba6a1fa04d7f686003ef24004da67440fbeeb61fc68da14a94f9ab659bb23f457d9be80dd0f0c06338d4b621b25d5106d5ce9e3ffc1aefac77d75f1442c3f5419eb7f59fcb221cecee5ca500b2562be656cd0edac59049df1c83baceba67e8a9a046ced29693ac6196df8739c8316363f1726e6ccd9e3e46f58735117d2e97e1f4a0ea42edc61d65c4e5c3396e7f9604384753627e854b78854a54790578719f3e8ece7d2b29de6deaf7ff9c0f81424b9dc4444852f5efe86e45af61edf61415d048f1cdc94f7dee8b9e72be35f6e6be8461c7aae5509a1af3218c6890f7ddfa4c77dad152975a6c2931e33c7c40f1b19eb843f69035d894c636a1f9891e5dc11584000451a2226b467ac7734cd001e94f204fb80e1639ca4a2d569150da11eecdf607f340e0347065a1761f225485aa1842417b99622c30115e30cc62ab78f7d866390a9ae22efff96e957c872efb988c96df9ddcba2e7a9e41b70739131160b73d39d6da28607e843a9c3805dfe2290e8660ab427eceee53805fde6ea169ae0ce370d499137780988e00ce08d7c7c020a98b2055307c2fd392a1ce6dc6f0542c0184802233e28aa8e159ab1ab71b12656895a9af6fb49390e11333a0f433e7a71fdb66301a201137dd0d5ba5ee6a844f5c36839b9d16de1e043acab2c9a2dcf086ebf33d36bea8c7c9a25c54fe149a40ece46ab4490143cd646ed01db7dba8badf3cb3940a1ca5cb3f9f298256d7c8eca305ab73e40289319a46004c3f2cdf48a15423ef14d8bcc4b77a4fd898f294951730e2750ea902ed0e46b7b8d044e54c45b8c0a8e7714246c9ca3b92351381eca1ec9c221953455248f7830e0b825f1864e1165be254dac3def57979aba91555dbaf24f5a49fc503d2ceee965183a14f674391729611eabe7f8295e97d21d3634cef397a20ed0664243356fc42b75043c586de778326f6b913f7fd5c1a2c20874e23362a2ed98e15b5db58aa4f9bf0b817f139f53a12832644dc2c6c1316915487f1a7701ed3c07b201d501ad8bfe6fed73950561b4314988a95bf73e88fba3d62c10a06817a4216cb7009e88e81c79a7bb59e24b7572f824dbb030e1ad5efb46717da37f71b976b4079b27dd18ff71d8dfc9fdb8ecd486616c2b3b52aa7c65c1d6c949ed066150b07a0f655324919fa7674b2051203d3d66e333df38873b286fe45c5a5bdb85f58897c4209313b84a3ddc4911be1996635cc82fe33b4a858e77229f9e70fa0eae65e6222045ed5ebcc1c62a99a6dfc8416aa4891004fd41dd0118f8ddd56ae2c36ff0922c10bb6a3b5cab5680b27bba1fb9fda82e3ba7575e374fd0de3133eb7ccd3c7a0e9c84c4103615358e89f45345705ef4058851ae593f4e906a2d5e0f21a853438c92505483768b2f8bd3527dfab84cd55c91023016419d9e4971f138f927bb566f9a2702db4596ac3e3a9d1f87b951b3fc01c2c4dc66c56443a4f74d4d73fe197e5b12b662cabd147064de20349af4f6ae7e9952f5d54d481f6e753665b3a3f6837e18585e2e88cfe9f91d6a4984be0638b090c3a7b7bdb4a77975db8910335444aa42d018987f4571a260e40e9e354c6241aefd3b349e0fa16afe2401b2359b8b889706d8312bded007b176cb11e32ef6d6fce9f97377c1d6ec19f914c031321ec01fe2e6201303cdcf1708c7045015ba1a806f289dd0320ea5cd420c62b083c5f9e24d898ebf1a32a29b824ba0026a78b2447811d931ca113d22e72fc239f54adbe92d0aa3b88dc52a43cc9f0c8393f64950eafd5023f1a65d20d0c60554f074103b6cb18685c24f0c19cf0b715bfafd85aaaf322a2d0f97add0e5185689dc0a3de0f0c660ae2397f32571d7f71005540e5cadf98ed88caad4390f6fdb6122d50de1a39158bc1667856e9b4ac52c1ec58d6ece99a4abd0a87b633411bc63289d25456b5a973605856afc36ad0437ac16aae6f85c952e435849573d47221857293014326845a457ba4bd72848dbb717100cce158889e94d84e71c135935061743d456df04898e74ced0085b637336c67b5c2d0c66a76557f2fcba9c8f1cb7d1b1b9145a768b7dc489a096b546f43b231f410cc53e1829c76b313ac23100b3eb3c88568b0674f9afb364892039854f95c36472285804bd07b72ea36c860880cface9225afc6c889d13c3e983834ef984316c671dfb92aa7d9e9afd82d75da8e3c98382af9f9ab4f67266bfc56d78c1582f02f48c70ea7793e81d51eb6c26b3915bff7d723827042298f412d03f2b2f7a86ce1f5d0035acb05c60a6918d8c274029041b8b0f3a00894d16eb8b418ecc50fe77f278f09bd23bc40b045b82b78e57fc3b65e26cfc3193597451debaca1f435ea675c58b43709ee6c6733192ce6f409c4c625f97951ea983b54cb1f406b0bc7002af2d18560e408a37fcfb07f95362d1de1bebd72c50319482e4ec356b0821fa34a896defb34897a09a6a12762c1256399966c76e94d9555822278c621aedbc5e368ea265b6be17de27a0c3b2e41f11927ddccbaf59f3b8b5e0d3bef4f2a5399b8f80f389d3ab05a6b7e228a885b2ebc2df8f1ec78cd8d01bdae1ef71e05f03d5b5fef5ceb2a5eda4bbccc5e9698441456edc5539960f17e480b0928b5c6197b73a570da6ac253c52a3cf3fd807f9ce947c62e3981dfd1c9a72ee5c83df53819a8d37cf9448af8e3b2057db06f999c03ab8b16e458d294ab811f9820dd1bb4e0a4effa03a10ab3fb891e54bf8b6cad2a2842649d45c2a2ec7ee40c78bebff5980c04d13ea8cbedd757925e72fb82382566f500ac7036635447872718076963098b17ebf382540f3dc5668511e863a3bd0eabd15902b63faa8410d347e1a166fac7322f69562d7ff67aa4afe3799557bac86dc1ec23ca9eb8dc85f74e74f06635685c85ea4ddfa7ca1f54c631d7a2bde43b42b7acfafbe844f8f07b75e7ddcb80179ed5bc8ff1ee805c7cb14329123c0210329ce3b0d085178058460462f1fda47cff072843ebbbe2d8265861986b3bdeef4556d76cd2ddf91bc642430fb264693e870476925678b63c59a3d34c37243e7e84ced0578758b27141567a14aa6896053eb2eea3b88cc52f1e7ae06cfd5eeb68f6ec1899795f092bd16af0996172f57b2dfad89f9c5fd75a7cc5d2204651ad53a399f6593058c7f17e67eec75ee84c465bc47bad8759b4657b6cef9299654be894bbb1bf33adb46a5133bcc52934640ed0f920f603e223f7235780e77e028fced03b92f50ac4983f51b7a2bc4abc057c957f0fa19762edb87d6fcc4a7d903fad5f02e1203d073b1887dbe8d449eaf637b14090d7cc41da52909a1de11f77242f4af7e66b54dc659bf988d534af2501e82c23ebc028e7b26a64c1b9d4eb1f06fa9801e8fcd8addd73b1a4b20504d4ec370f0f678335bc3dab02cde94c6af1adb6510a31fb51e16c46b718c76ece6180cb61ee4d497b2943ba71a4f5712253e00c7ef9079145e0dabd11cd5c989733854d2aa7e53981948b42b930256a9dae69a326b6b3e63e12ef7fc9aab9abe6b2c3647222777ccf66dee9e357c160636b0e2551287c21c3df7235e79626ce444602b942474b39ed080457f603107afaf098370739ac6a5daf2d86717bea29385709f4a1fea99964e0c535fa1b5be1eca7ce8351d08aeb92eae61b71404ee54a4da1bc982fd8c4ba58e92bf887eabcc1f67ab136d55dc9edf8669beecd9a2a029092b92ec221e17ad737e0f62f0534ff476269bf316e2ff34175aff10a161fe988a4946b9fcc1829c478fdfffbf47130014f52f3ca05432e2edaff81df09ed869e9ef557ae21935189742918d3fe9adb8c0a14da89692d25255f32a634bdbb61384a83fbd86777798df30d4b9f6dd7895058587c56e416608fcaf068f178b203c06ee75e03e8ef2a38bd519f478752c1b504c6e21abc2668d5e4e3d0fe83faf39cd3c98818ea20ebf2999c1db395300b23d40513bb3a84c45d75b1e54326bab93641cf8200b63544235196cbcbde9cef0292be1723a659fc914502b0a8a81bdef480a453a19454bd33abe8b378acbcf6ba0498f73848cc99d81b7f37165344e94057ee03e5cba6df8b703adda045b8a7b3f33cbae467062299c1cf84736d5d62818f569bb3a552319168334f2cf2b98b552651680e4d2e1f3efd9b9fa93f90d21ef08322f268803cae5a7c1305fbe7280967800a9e406d182e988b8e9e1103c081421ea08c5d5a864a0fbd3111a86909357c71a67b89eb96d15a465b3c2bdeb4114dce1e68cc0599ce509daf3a4168b3432ecb478f70cf208f0a750e69d44a3636d93ca26efdacfda0e3c497670d0bb0994536f2c13c423fd072bfad0f556fcf58ad0f37863775382a90dbf180557b86a1895cb1f9376b7afc58cd4215f67406df92f0e298c488d4d3218ac36c61dfc0c1c2e28b1fa773597b8546d463ff8164345087ad8cea0e59025c7817157960e363b773891cd58164b5c1d36ce1b8c070bdaf7b9f4af22f4d210b4ef462e52679ee31b5b1d609be2413d31c11776957b2e37775c0bb24123a97f4b3633bec580acaf8500d368b5120fb85c8cb0d596eb20e6f1c19c5c7e0a7cce0506a88d81e1c5ed4eda524a263e0d69d80a28bd12ef9a76019b15125c01d2896cd1431efa139148d347f89971ced0de4eb9fd919be0e141213914884db2313e0d1661f7a09e853eacca54bb2a3ce0622b2c9df794779bf4db3bf902d5941f584046a38c07eb284b45e1f543b210b2b1f7c298639f1c30ed9a145136861ff364b0f27650b271d0db391f38a7abd2de3a2f2c5b4a0e3736b7d842bb77c1be63efd9aa58fa12cb357af0e2bd7b7a0bb9575bca752f746113d02047766b3b07d75624ced9ccbb6fcca707ccf2239f13dab5e81d749864125ec31ca330753484c4441ce0676d1ed7fcebd84e55349d93c8c26e95b7f95fd38e0d07e6682a50adc1164c7f803fbf8c4cc60ce77512f803fa0959e3dde6ca2d180a7c819bff11fb44591e0cc2d91ff532a1f018c06330dce4f7245854d53577936804e53a57faf5d4991c189dada2cb552c3c52d599da97101878939b39144b76a21bb1c1e96e15d842c1137f41fa571aa14c46132b47bb11e9a0f63fa6f92138253b57c127fdd3e5d2979df62a8920f9cd9a33079c1ac150e74820a09356915e7dee47c6783cc873e52a0870cbd1c178fdc0da2160c632639dd8837c82bf046018af22306e8d6c18e6d2f3adaa66b12ebe3a8c0f2ddc96a089cc9f11f98502d381f847ad7f62273b443cdfdb4aaa68817b71c91f37c066be17bef40f6c6b053f5644587c2f7d9251a9c23da8213f5ff7d20121d023041b12d409f2c35fb393e9e22da54b03122602740d8d82c27810184e5326d0843a2c255b483bec48013789d21eee987ed26aa43f695ff9a2f721594d02388ebfb5228bf9f43fd8b9d65895829274c31730c8ed6870258b572f0c415a78e7695a1796bd5c987f2739957f739022d87940bfd9148bcc6ea633a22946f331a40ec7c3e11fef9f6a362be134ca673a9a29afd213d025b8abe8dcd300f0b3c70eddad6caa4a1f9381a4152be0f094643a32a909f196a2cf5da1c7443bd4f8a378546f545ac288ff65ff99e83c9c941a2942b0ea0ade9f9b048f6778325a4e418111722d6affa84d87870ea88014e2d6f7c87bd4b82e8886210051e17cf7313bb9837a5a5377f9f856f907ef53f00d1516425e6c91fcda2b4382fb1274322e0c7228dc6dbcb1faaa64c40a1f30c47f7f153edd0410c010f4eca5e77dd0a1b10e5b801cda0f4426be215679caaee8b65f651c7c5dcd2ed97d7cd79b95fabc46ebc607b011b3850ace2d4efb7416f34e409679b0bc2f8f802f84a68bfd5ae87c1f524e3ac7522b1334d90bf3ae017aa3cd29b51eb1a068917584813d1689ccbd0370c2114d537cdc8cc52bf6db16d5535f8f7d1ad0c850a9fa0cf62373ffbf7642b1f1e8164010d350721d798d9f99e9724830399c2fce26377e83d38845675457865c03d4a07d741a505ef028343eb29fd46d0f761f3792886998c1e5c32ac3bc7e6f08faed194b34f06eff4d5d4a5b42c481e0e14f237b974ec372ff119040ec0ab97beb8e8ad54ac2dbfb6f73335005891d727018284ddeae926b46b92e5850abb9b1392d388ec6581489012e801d52a2ae18a502ac85b909741f4f226b76a4e1ee6d6611a8f43210a70ca4e7c73fb4a1a267f2a736bfc0dfe7139ac5be28333dd5e4f5046292089d120abd276f2395f698c4eb7e4d5880a269cc9c4bcce9962ffedc584debd4c44dd417cc75ee559111ffd3e1e056ec72e18abed60cee473828c7a82286ab590fb37b98654bdb6210a456098885e9f8022db87eda91b8adb3c8deccc627278b256e5720ea219cc5aefe39ca51c78ce7d8d771611c62a299738092dec5a7f6e7afcf1525fd9fd8fcc6bff9baa03da658418f542a1df832a701d08242a3a18ffb2966243c020ee673e24a344f2640cca5e6b5cf2e41eaff32e9492b9cd27c69320cb412c789f76bc79c2d67fc4689767d32db40e23a935ee9944b0d41f4b10928e4495f4d07f1cf646eea134673602a2aa06057da6a89d8278d6695d66ce7e64c2a9668510e8687d6b500a4b24f8d5e5ada05829b544701695f1c63cebd8987184a1bdc68001e3bab08f1cad43d39997a2a0b4f998a43414b63ecd5af68fe7229ed4a19f67f31413df53dc400cf1d51f52b122d596f274e3a464889dce1ef2ddd6eb1af80fe584f1be4654edc67a11e78579a9a5f953b5eb270cffeebdab410bf68e30b9be00b9bd170e8b9dbb96d55602a0515107f1819406de3936095f5d15c464eccbbd6c3dddb0538936316baad493cf22c209f45f460b813e5bfb61cd6109165514545098bb51be57a1712417c9feae25de4684d869fc9e1647dbda19598c4b737dcad450bdc4f6fcc7c3e7a59d0ce4618e08c77365a2dccae0f1f1ca6417ac4fee6922ef4dd0a4808f6edcdab9851adebb95e8b8a2c5e4601084cf67e970e1f050775ffdd23c70ece0bc2d418331f7a54b370d2f892d5de3bdde9b785260915f893db600b4d10147a4f3ff5f64d824bd28335f6180a1f058d1457e8606af64a283034d825a570099c25c7dbec541482e38d405d5f0eb45c93302a0186d2504c324114c0a2e9614ea223fcce50c350c016561271342d1033dcb5d28b6ef8a16c956aedc219755e643ace4175ca37c183d9521efa4dc1cd3bd819d3ee8f4a545bd0023254dfd5e1eab489284acf0de13eab25d830f28945c503d0c0c37e43f36a60ab94e19c877632bde933b5c5d23a511a35e0bdc8c0047fee7f0b72a2720948c5bb57f0a61695dca562d65f4501277b95069b09472293bcf67926a4a25100578dd62e2aa2efbb59098a92afc337431eaa1c999be41d8e1cca53a4b1d47d7317077079c8098f713858c4fb1fd6d117bac7ec4f0e261d3e1fc8a30822df33cc27f11ebd81408231eb21b66237f66b1fb08cfa4da883ae2e268fcbb380292095daa9457bcefe4497f1e2b38a708861c5c057caf813934cf8c16e42495228d04acfbe6937098952fded1a50b6622351944ac6d2e0d7cb76188102bb4c0174af65779f0e71d97849ee1d472288854db725c048b68a6da2b5f7e5eb7b0e26933a6062c9a9beb75185d332e78d73426e0ed4b15bca772daf89215067263229eafde601dcdf601b9b8367ae7a15f9221ac53b9e7e9319c0486c2f6124314a94025640d536f4188ebceef5f08d40acbcca76b5083fb504ae03db6c989110a9ed7ff01b6d669c5a794c1518998f91e07b03affb5f0d849a5f786383574c68e2ae9a47d03afa4c7873bf924a19ff7e46d53cbd593366a67d4d0c70ee2da49e875007c +MD = 2f33b1e189b154c896d925ff25d0d4f2b5bcc8d0dfbb014c5c171609 + +Len = 92792 +Msg = f01c0b97db88891b91db6735672f2edbcb436deb70140064acad92d61e3f6117937441382a01e4b7b77b58f6666bd1eca1a4a91b33d4a5c2ad5a7a53085790278d080571f253f571c69ff9ea0fe9edd53114f7571181c4f17be015f7c1467b43a57f5e2a79a544af85f150f7a9d209fd443c5e875443e659dee86ca89033aad1a582554b09205adabd1968067e4daecca1c4e693424192629d1a854fbc46a63b53b8f1bce8ebbe5b36bf4600d48363aa1253976324a45074821d6ad58ea9f6e777ca3a655e30f898b88af4cbf49cb0ff5d917ae04193a8f7539a23204e81223fdb5f382fb51491fb0b22795126bf1d334b2896f0e3372353d938b61a44f9b3a94620f40033c110ebf630dd78b11433aea4bdf37c50b848f0dca02daab736308f7fb475c2225ffdd0435c282adfc479d930fb9a6dd13da03624798fb7f16321584fc5c35bc815e111b84d634ef6f7781ab68792a9aeeeb28e786ce52b38a60e6c7ef8e7b56e0c43181eac96cc3fd4b6da000ce31a2ff4065ea12136edd5278033d4f7e8b65b6cab4c3c20c78c0284bd82d43096a79c77240f683f8ae5100fff15196ace48d95ca115dc520075872f1578fb9bb2373c9e950a936feafb3086117a14f8a2522e04aedbc4e9487115fb44263df63fb45892e0b6ea585c177fb340ca8e4a6bbba38d5906bd8ea868f513d4f261e94605387b8d7a37a3eb2143bf136d4f08316d801f2bfe8fe92640709d4d46311bcd12248024c040f79c01c5d212cb1fd9fc4f0de1ab2c02a1cde2ccc235897335dfc364c92eefcefd799f4d12c64cc665d54992fc61f6de5fa23651a91623f0de81003f7f336ea95c89e322aab6590b55c3435698d5c5eacaaf24497b777c70bfbdb1ffcab9a799bdd4b68ec06b58b751cf25a2db9002ef8bfb95fa5fe1fcbb809abeead14a0166c863fed77d6bb3920000d7bef01913b5498e6fad7edb0b98c8210f49bd6de4d7243da5460840d0640b5e42f2fdf86204ad719cabffed11d03f588c63b5abb8b67a6a91238a7119f519f14c862bb655a45fab02390b9f762b8e491e82e28ae6c971f3acb62a87f40dd3c2dec1a1da565c06448ba2ca7aa2715dfcabec6c94d4d9b2dfdc461109cb73e1d8e1ec88ecccf64a451e2c6305fd6a53771cea7a51ebade4360b1d667f05f0ea3b3b4f07741f38d5b5a221ffc8f0de19c45ac43448930fb001208152720a4c96f4d63247fbb6eb4c9c01c7c54ce19457eb4cc2c30135c5be4703bbfd69424f8f0a98dd6f08fbd75a022267de183955b4f2d92c4f043798b5109c138eec15c07a856b97a82455c3a5f0ed4871b561e9d8e3eb49ffda03503e64d3d02d83eb69026e36aa1ad62c78d56d4ab4a7a9bf186cc56962fc0affb5004c903c04b72c10cdcce15ceca6e9bf938221f1a87ebdaa18a13abf6e1c958ea4cfbb9d380f407e83a753f6471cf25e87365a489bbbc266837e48a87c982ca5d1f63c3cf4148f7bcd0776bf52c1b01d5891dd01a8e9351556647a654e072bc030c8fb615e4c82cf53f53101361c8bc6ae9b9264f98f807f385cb83d0df1fca8684de0549e417f41bc786c021ab6ec1f335d62b9b3350a6cd26cea7ae1dc0625228dd45cdd7bef9ab0990f0c271539f28dde334701643ba4cc9ff862f152b1ff0691bdc243813ba2d95f036584c3dc056426ef5709a27beecdfacb3e66da65fdbb6085cff7dac921dcd22e555b483b20613e7c31f37a32147d87495567fd8ae8ea0212c8221103df64fa7926d12ac00d2b2dc41de871c8dc854d5bf11d4188883a804ef8ebab50a317e0cc1e10f3d1936bfbad631011a50f8d54ea58b031c8a554e11fa67b3217379d8b1087402ad879c9b1214a92e132753ca5dcd34752b007df2d6f19f92ec2619f032ba788583c88ec56071b9669d5d53b471baa0a2ea975846c259a8e25b8eac55107c7110465887df2461f4632f7f831428d25224c1cb9eba7297162a1619ab67c8b2e03b6bb41238ec89bc8c301a7c79f1c8cb7346f99bbe663e69c2925381b8c9e2685f7a67a873074da44a459a8a565af26f06f0cde9d2fbb4165466c8e9b8a2af5bf4d8efd51e33223e35e69c3729c2d3cf6845950388c19c9e47e9e62df7d16e4da43db9028aceabdcc7898c2d74c8016f1fbc0b6350465c7425c237d8e6d4a3bfe5ef5fcb49584f1297a4d6b7b7e8ffc085da7d93b9f8783a66563a75162ad42522844089ea5e9071fedf288073a423663307882f36667453923c7a7d0652941ff28317e8ee4ff47d858eedf2286810b2bff9a770460ed55221db547b27da57f2ce622242b5baff87c43a939756c34c5884f7581189602fa8adb964da0b30a4502eb80c41e11e26432368b5da7f343aaa1aa7167d40e8c7e99e6d382410e3edba9beb4240e0e7ed123bafc15612396039f97f6f3e2d2742776c5d2ae3e962a8948e7240da45b6c88775664274b051617a99f6cebeaeaa33e4a00fd993e53b69708ef3a4688ff95d155932b5c0ca0a930e8483b18935c000a3c20bb0aea4ecb4c105d5d996102e0f3e5f8b97c4dfd3894841dcb42863272d575ac73cbea8e4ff189b9f4ccd86d3438510d764fb522ac8ca4a385306b74e3e51d2c8fa2e51b2cce9a8c69a894477be6be5acb9ced19eb607064cface9283a845b28765883fe482b6c5c23f53e989c4656681e2d9ceadf5811e7127ca8585ff8572990b56d3e8d5026b48a7b7d697fa041bed8c86b9b6ebcafb4b769510b39893ab645804be3e184f1190601fac10c3ca7e46236023682d37154243b8c4ab2812c58fd83c4f62e11f515ff515ca82b61af63223f08c202e6804ec3ba001cb12654962084817d5b3d592fdd314c26c45981c282aa2648d63d042afbae56891fc2dbf8164c2a83505146f0086a7244bf6a4689e94103cfe620247133de3599e29be80647a3660df594e3dee9c4750904dd2641bfca485f1ad708aad5134655e3f9a4491c50dd2532505983e606fe7e7bfa48716b0e9c005aa9d95d481531c40a263748fb1d38d2efcbcf6768fab4a90d08d5a157d5a8bb8ee0bf12f4ac9dee4069c88b4dd01f1d144f6e10d8664094a051f459eae713979ec2e15241a032dc6b097f9b7b32390c89225d089c1349471d1bce228c0b869d729868a497b89995744f85ffeb0b2faa368cc5d71ec978c86daf8b83a50ba9d4f2a97b915ebd7a214483023f0723a8fc03d7ce03c44f7521765552059dad2344073f43a0fe787c89c2ed1de436414d0cd9499f16f86fe75a22544b2eddba9df597a0e859dfae48d4d5d4ff75df2fc6e19e2c619821ef767958f69f89cbf9bef08b159144692a860a6782d07a6cb3ba833cc63b0fa698cb880081769bd0342f3ccce666ea05b3dd345f3db77c4496d2fb99605605f1328e8e013ef7ee553197e1415b90d21910f559a44edc02cf9fb5509f41da016985679445754b09c0b99fe8d1bc37840f0a778120fd689475980b8a34b3ee8c7658fca1b36e99747a94ef58665082894d690bb4ba9183ba9e477eb242fcba2d8075f8bd33700ab8ec8a2e39e7609a683df558fb5a5454fdb276b4ceb065676cefa201f0adc4c65c7d6304933b34a7a94575075de88c04e419eb55e966361dd12ca8bf4309b3f4e894e61b6f4c14d0d5cfb3bfe34d82baf83b6f0a084cb703e59d4fdcbd2f83bde49bdd18d401483d73427529946f7e9fbf81c97b354a30422fab5efd67087c48d9f90ea6cb4217170b0684ed7837c7dbc351c34f7748e80137be9fcc477ae8be4f16416b5bf7cb862583a8b2978da7958c14232ed72e2869863fd8f1686e0d46cc5a400f8c08aab14a21a820fa5a64f6a033b2c25be438a2a394d214cfcd3509da2dd23b665efdc101484ee0a8844725891438b00d5260d3162755dc867da62e00f7be97f2df0bddd360609aa9f5984acf217da3f561e825685f29f19468a8dec720cdca37741e2e47d1a7f506939f8ff8c148411af717bf20a315fc01748541b510c77d3d067cdce503eb9ac648a41a8e5b623284fd36c9c65de2a5d58b837e542f74570d7b6e0e355ef431f1fbee131959941f3b5c8d6de3f458931994ecbe2ce69b01aebd3cecc04b89619094c6a31f22a4b048fa64d1fed03f6fd5770628c39b062228b22e9f0d3074d2a9fa74f22a1e5a8cb2c1031d9f595fe00f1c1ae5a3b77b6384448c4fa4767b2d47174027c1b5805c8198b17a4ef7808fd16b6f1c54a3c36cc95a9d230e86671a6fd2716a6d4fdcc7bd66b81094126923224c4ff65cc6a6e4ffdbaa44d2c6ff402b1351e5b45438766f155e06f812e3450ba7009b4587eb732fb1fbda78a00d4882c226bd212c5a109f8cec84035fb69d9264cb3297505cc260c3d80c897b57d97dc8391d393f0a3e53b3a9b43b61aad2c26bf8e3d888bf799af989028cbfa79c220bd22b86f612a89572dfbc2a80868da0a4cfd89296dd40e53b55e509d3c3397b74390f8fb739f56cb1d4c45825147536f798364ce47ebd4a7186dd8821735790ebb5f2dceb46cee158d2f54cb61a338b4d9a288fd9699bd08362119210819e67598ffcf6fb02dafa4f1f768e9d616ea78c1ed4e2dd6880805932aaae08b3b80aa41054644d35c2c17e0370a640b1cf939e6c62cd58411560dc3dcf6571d34a81b67d23ae4ba62d3ecec80b1d09d2fe5669ccfbd8b2bd017bf2cda93eb4a7ffd27521905d5c1fc47825b46e795f8ba2f8d786c78c54a4ecd6842860c137f87c07cb43c4f8e7662f776d11c245a9a56382cfe1ed70a4be807b7b971b76638d6c289f2ae607564515438c252e0651e9ebfb3826950d0bd36271bd6202e6a030753bd81f1f1210811ee56c39db46be1cdf6bfc9ee9e9f2aa3dc034d13e9857a73f4a606a97a27de5f364f394f18c5809eada028e0e8ebf0cb771c62cf714eebb735c1e53753e05383cc80b8097618777b25132412f84dcc1788a5dba54e3cf34b97afa22e26f1041a0199b43f54cb32ddfd774fe7251af912916e0c47e8c60dab8abdc1e05bc06c9c8608a2634d544f41a75b00cff7fa244721a37929d970b7519f7ac9007ad4f985ca5c2717c84a2940b32ceb4ff961ba1faa04a6cd88d37cc836652c00fca537603ee2a6cf4e235d55916b63e9a1c84716aaf019a57f54ba89f01b7f6469c7b2b6545aa5fc576667fac2951f2f79b447c695044634357b1d115cfc17ad3aa2d7e2bb12a9116c89b59ae7485173f9ac38aa08afb11c43bd00f8cd85993df7cd239fd3b924b10613d2c05fe3bf799a26963b7650eea012a102aad25688b929bd32282e9cad5dbc8b5c059cf5cd82e3a9ece55e9653723acd9e91fbdd4a8138e960263c5bb779e856add53f0ce0326eaca95221fe83f514793158aa987338bdd85a048d74b798221c34b9a687bc0a83a557ec80e804cb485a67698ef6773211107c6d7266322ae232ad1d73f4957dcb3a752ecbe13a474ed7bd4ef995eb2feb1833abbbaecbb4a130639b27e220febdc28d839388a90b80778f737ae5336494563c59a9bcc8c807abe49d22ced31fd3d41da5483ce58a85c06a719372d492b560e2f1dd2eddd76dfbccae0519205395f581ee8a7c6446d738eab3c3bd631cc6bec40eb6535f654ca678383f6f8d3c8c9d76e9bad599c2fd476cc4ac23536530c65c0ad5f8e1e43c3273e642109e3d2032490159c71a7150827d2e8d532a2e9c1e1760ac5df9f6b5364c12bddac7c7e96a94cff7cf5ae48960a85c07ab5bbb513c82baba110bff30186d57f2fc9e8f409cc6c0156ccf9f00686ac7abba6cbe08982a737fa08c70356f5420821496d5de4f7b6c231e0d033e10211bea0ed1891ac77b257d9b1ffc5d91ad06fba1254e1b091f4eb15187b3caee87a323073ebf1021014b345f2ae5f125b475c020de5a7f402ec230a5c4131f59fb081731e8b2815b394f246b31df989216e76022267d838b1671319946c3b3f8f7b5171d7425d6dc9fcbce4dc95bcc7d50e66c13a249b05082c6349a842811220a24b338756b890bb12bb28565ccf53ddefd3473b6219e16e05baa3810c2cf9baef16c014106208ef9f941907ba5bb5a3d9669d0f6a79574bb8c02d05116379c5285a2068b8835dcf6af2c0d8f988768d94c7ca9c84e4ec080e1ef11d9b4f1ca916c15c69964215c23d7b23b1607d1d05e79dd6ccf7822a0bcf7cf7b2f01769ce81f17b01f1c8ba2fded74c7b366332729c91ca850d7a98bdc38145aa59e5e89d31928517133dd38016af431cc4613d3c794aadb10cf5be86b1d6e5ef1ede227ced4d839242c8e91cadab0e7e52a0c7ca477187373d1a25cf6323df67872c9ed47eca7c5cc791836b6b72b78727485786cdad61ffe81254fe9f0f39fcdcf7e40eadb0785ceac129d518ad46218d8076d7d5a742f15504d37d2e42fd9564667d9040a77f7af28064c27b03c133ca70ab25250632f5cb192bb2d865331968a2f0c4ff599a9e29f5ba9a5d1d32a527417ed9877339f39479e3076420e17230d3c511b46bd0b0d549b5c586a2a05fec1b7759c09660d3f64b83e29c1a1187041f85de25882a983fa3ddabbe3b144861251f0e9b16ae7d3ab894ad46fcca402cb1b7951b56ae3eaf2cb9b5cd90954ace88fd60df9c2cd9a7e79dcf2b6d1585efafe39d5e7d668b6c0cd1497a482b4c7a6b9ab853cfe0d0870026b01316f93e9742925eb6a65a65c06aadd18e0cde37aef77c7cc158d448202db7b8c69e7e536a914a40eb7991b6f16ed6b3d283b7f1b2542d16efde102abc94d94f0bafacacb1c596abc49d13644842d3590b56bd63cea935eca50a9a5fa15d13ddabee8c32b305fb070bbbe8580d0b2c29042cf9754a1e1a68ad847cce17b1eeca6f0525cbba7a03bc867a197b88f46a8d84ae71106ddd66f0cef3be5e68b8f17e1c9c7f600c4b3532fe83acb4012214ec52842f1a800ba0eecfff66f9da99a4627d5aa3daf2a119d13a7daceabfc0b2ad37553b7dcbd351c979517e86b77d8fdc59e8981fb4a4380204111e070bf4cc3afbc99b1f965b00e994910dec458b3b5577ed66199a7b192b22e70cf22de6ebfa668959ea29cb35b6e8671c15cdec2f36a01216aeec4f45b65da67d936dc096553f3d7dc4cb4c79983c79b2e896c7f3e59cffafc8f14742097df67ad212a756b3508d0d97c60652f75972d74dea4510cc335b394ef28c9a8e4a810a9766c5b27c5f1f134a60204b3b08f8932c0f8e0d512dcfbd283745d4ab8cec35caaf423218359e96c5e2c2e9cc0fb3ef6d4ec972de5102413e089b79ca0ae2035336465ef09ab09ff09416b612364df2f9ef1ec8da689dd078adb610528d097d1a43f8bf6a56fd35b3bd413976476ba5b63ab695ad3a476fbe6dbd21abdd09aa081e80dcef302e60f6a66efa5e08b80e8d77b964be8fa928f892d9353cc28b93030e073de8f1eb28a198c3823343d93766ed4fba772f6a020e6231d36f04373ef45cb56bbb61db969cd968585ebe79282ae59e213fe23306e826ee83ab6ab4b5c451b1edd248a7b1cfb1860445423ee8bfa7d1207e6fac3a6e2537cd59bdab005933244b936ef782226a450f5296d07e0f7b0e409d9f7ca889a9353adfc5c3259d4a350e689b710f7e4bcc00ec84d8f501a97d07023a4c581ff80f51a64aa52e77e00dbdb896c062c99b445f7ad2fe527c7848ff1608c350195bee9a1614f822ce3bd3e0ea288a83eda3d4b56649e99f6a3294b041d08a9a601afa9e97ea650a8ca4b00068197878d0aba58817b142e4b21d8ca1ec5c483edb7d5ae4929694ed9863cca49931314b5cfadf63f5d2b0273c81555a7d72a64271cc37f56dde2cd3dac04e54e5375e0477daa9cb6873dc72f0a81a635edb4cb00c4eb857928bd6c53a035e98b4f5a6a90b912b4ad85e6dccb6d90145f55fe18f934c0694676539c9a07326f96e31b244ff688e67ad590c3e765b3287acc50ee8ed0e48345633feeaf459cbfe7bb429dc3ba7faab4f2d61ce1877d6b1ead77ac204dca7bdc6bfcc2d1efd78304446b47aa796969c27a213868475154b165bcd25bffe4bb91fcf4c9c06a753152faefb252b7d8bc49b7fcb6ea29d16de9a1ab11a06bb5bafc82c253e959f8437a5b6a5e5afa300ab148e308d5b3602f1dddccca7c15d00282b9e001bb12c341e0f245bc21b511ed7fb95ebeb958a000d4768c6d7d82a61abafec853c43988b50d3c1c4c557cf0dd2b65da39039df39b9408848af346ba7c0bce05ba83429b0575b5589f54b65f424afae0185307ed57d3002fa39bb67f9efba402b676a28ccbb0da8515be05bfb534c4fadd160affbe17f9f837c566880c111d59c82cfdd06025381c5fdfcf84ce9f70a4e7cb3bad36e95278c80eeb463bd2a6757004a8f87b694aa8ce588850c6e17a58c8f10e686abdb62bc4e6994cb6c6bbe03e9c287765e37e94f1b6d4a666813e911115e7c3c21b718bcedb150e0543da14946210efc83a607b6a5918f8061559e820a87c41c5692103365ac30c9ff09d9d11e4e6a41ac48cc688dde9c82e0448c8a8272064fd4d513cabf447caff5352f427931e36c6185ff0edb3bb8956e487acf82078afd23e6e92902607bb9bc2b68455fb2c3a62bc56a4f958f2de192c932f9112e974cc92f5af736e77610de514f81d9b950169070d3d4c5c4418dd42f7ab138cf776750162edc63c3b5dbe311ab9fee2ed4e51aee034572c13dc1bce31b9ffed2707440052c8292db804351d24346a7f9953a51a8c249a56e69a7d34bdd6a6b1fcb9c1f631d8ecb171f70b2fbe01f0a02dc3ebc04d78865b30c64a0d087ba879fd0067798c9ab145fd9898df64ad12232f018e36b0cabba786f23abdae3395b38c6dbcf0cf87f779bf8b76b2a4905f46f1bf14e46275aaca5db0a7dd2b78deed3f742b02772b2fbb3c221d3ffa5638aa2a3f186fbf13c442296419d1ecc5e4859a964a151feeda88f80f04ddd2592ebb4d13f12f432fa89d7e8f19328ea5572b025682af266d88718794b612c933b1f8bed047a97b23b84ad1b42e857d81973c2b377d372701a9f34f75b9854b5052f113f67474e38a83b8a765b2312605353759ab92539e55bf9cc404779bd5399222c0e9100808ee9b8584065ccc348ab1bb32455a7af8c459bc99d388dd0379e00c6a4aa2d947aa503fdc2876cd159c8d2639774e23c2f7e8f1156565af328bdd1c647d956f4c584226344ea8aa45b53806d3c3d5c4994aedd8eb3c86a8fed9e9e144046040737301f700db5aea416f32db85bd99f3c847e8b26fcb7450d4fe86e98d71abe35974e010e671160395251e22e3c6f337fc795a3c3784a71d316444a3a537d0de6af89d124982629cbd615a7b626289e78259d2c4c70aa784b0a5939e2fe96788245869699e91b90c26be68238632c6a91663b2fa92cfee2dcf2d043781e8e877122f05857a2191e86d96c7d9d39a21e315119b3c2f46f35ed985070e4fc8cc21c0e6d20450b47597fe8509fcbf1b243bfb0dfc07f1025fbe8c282c90ee0b9b2e9d0a5f54b6ccecb155f3af0abd28660a549355ec8c747bb34390d55de113dde413242df510cd5fcb108d179252643fd4ae4c1968563fefe39c59b1d3dd93fce8dfae9e63f348573b9a9be41223314a3164b2e6f9e2a714b5f2dd127117ee70b33f14413fd2c06b8970ba95088431fd8714522f2fb65c92a0e3b597d44495e1c9ddffb6d743c7f53b1f638af419c8c27c3994526845b2d23aeb5db27bc82cc89318cb6fc8aac18cd7132166533868415741041132256c6bfa764fe2b637159db59bf1cc928c3fbac3e86e97a484b2f2cec72bbc1bb9cbb8561106b931f5e2b997c42d5db37ca4d7b7fbb5af76632b4f394875e39387635fe4581ca67da906d4b01db8a3b9d0939bf9e9910e377823bf2d216cf82822c5cb0b97ec2ad7b50457a5253e3ef44c8e40202e8b4466284eeb20fe9b9a47f06572526d1fb6feae6dbadd6718701124f79cb1370ed290f80f3bab4c6c2a8194c4fe5f5401eb40f9a586cf5ff1f78f1e51ea339f9649366bd72922776929537456b768c94d385d2b3e43f17c3525dc8d4fb11dc4ac08c4f8594c3d2c1d273c13ad4625594c1e91b7ba6afa487c9b77e623a9d642caa1cb21e80d41c6e2a4a9e73b131b60a91e8d238c74304112b8efdd800cf3967ca4c77d15f4d6c474123b8382b6919bcea8adf336e84a02921eb2c7e7830c3c3c72386e659b72c12c005f6d16a94e57475d82ab4c4f8de9953d5f39bc7476b084aa9c7a59599c3984ef94085953982f8dad99b03f129272868543a78189c97fdfae723563c7b99a194067e9ed5e15810c0951b671c9fe49d0970e95e91b8b06b80e4804075e516f53a3498625113cf86cf15902a6ee07bc1dd32e9935a221f1a83a9c8ac6960a25be78b771a32574f21b060e4920e76565c8da1205f9c624bd2ac3ce1e24073a59c4314010d9f3540a80b7efde824e9db36c0c5770c7f019b5ba3a7b52a21a78780f7d61f85c1360ae48778c573dabf74161fa7d6e12a86797c0ff22acc3483b0cfabd9bac8bfe1159dcd55227d568288c5514e2625c6794cff98232a0fa38f88510626b81fc2bfc99a851dfe4cc0b97e0cffc24d217a637baae7449c3d935378ceb1c403d2f2568fa556d9402941edc0b1d10c351d6fcb7046a45c679c2e58e60d54bb81297631cd84e890d05c01a5b57c6e33c460cc39929a777475759c253bd796141c6c77d5ec00e44a962d2769c5377f3fe434ba3549700693ad0f0542e0f41fd6bae21ccc55e1f20f79e4dbc158a8ab397cdf6148fd8efcc1f7b490383b2c980945d48e9d6fefb9e864c84736d6999b2874aae8f916bdff063baa658eb647a9b6a48af4d0a1f2e2dc3c22904fa8d0f714b4dd78d1fcc5b76b613aadccb80cf9e4bf4c77ed55b114f4ea3ae1953415660623c03857186ecef752ac907ba844319b7e623f7df2f5f8375658608fe3329004ab9b5113d080e9b3f4483522f0b7f8e3c9137308e08636ad68c435c51ded1e1933b5ea8d8dc2b3a53056c549f72df7c588a93c14862c755e09c589bf4b10b84aa4572c4eb8fdd1d7ef1d6778256ed648a36ac12b4eaf5d531fa58406d36105a1e4c93fddb7f9ee5117e64438e2413c75029f2bd49fd6979393aa4d211fa9ae25dc534ac2f47eb01991f983109670d1528e8fa198e16acb264e1d0d9895af5ade743d7586d554bf39469e4e89a9c13eea2d844cfd7d34a0153746ebf49f3db2d595ceeab0c442c4b91d1dca2984fd2b42c8c4538dd9f9bf67356c10bba4195e11254fcec82812679ffdbd217b8dec3f644898dfd05e84d02432d8a3780c0c059a0d084c56698a4ff5d0c77b042d5523579348184d749c7a5415d3cdb03ede4f79364189e3ef7325c37d83ff4ecc017f23931c258c84086500c6a3b6eda457e6b58742b0f62194900fec39d6e0d3b9fad12e5c2f15f4913a302c9085b6a53f6f56e752e71869b739e305312742a8433c674e4f5d712effa1ea31e46394a95d956540bb56d02ea2c746b0b21bfdb567eef0da3ed827981a4138bce5770e187afde979c327a6d91ee341d506da9861efb871ba71c7bf9ca9c321b6ddeaac5b5e52ea7ab37f22d0f335da5c738b9b13a141f4d63053c1a176ceae0512e3f6d8d13a712bd389cd7ce9641b2d42578e3547328016c3a4b60f470be592cd8b75f89b5d84746a6a2e45c8190c30bb65fa2ea7321e6271e1264de522d0455509b02383652e3dc24dce9457fbb44e25de67668aead5a2843397c518ba7706f4862fc253f7746e215833cf5fb31b6dcae95b45b701adbe42c193dea77be0bef02a7b3bd1be60efd0b3e760a8e84976f0af6033f820ae9ef4b4a1005c0f1553921c1bf8c65ff9a8178772adfa434752e057fd9813efe12ae1334a93fd1b1eaf2285975ff98547813dfc5a201d6c1ce7e20abbdcd1154d4b536714ff534a01b8e88c78da34d653638c39291fd80ad01f3df02067fa3bfae7907789ad2641c8582b5a45d03dfa24344a676614f5c56ce13b30b6a15608f1e7e18c31033eab7b76351686a9dd9ac2dec0ad9a663a47f61422f305f3ac2539348ece936a622e20fa4ce9c4ccdc5e364736344c7d703579a23b6094c3c639dab4df64374b5c72c1cbb9fb85a302ed8759f32304c15f3afa72cea0eb7a6aeddd511c77a50cf22065d3c473549517f0bdfa41a34b9acefc836c23da928161e949f28c2e6617ede015f9b47ab60ae20ee11466dca77086231b788137123e73d4267f78b201d21459d825d337356a2cf0fa8eabf5a3ab5058cb7e32dff11b67577ddf282afea73134b63f67d3581ebd3d10505817c4b3f2439a667cf9ba7f071955fce4bfe6fd0a18b730b975a78c5d9e2c42b56994f0348b9018a8adf2d219c3b6bdf4993f3b69aee4de1146ab1dd4bb544c0a149acbe0d8b57dfd25237b66fca80a9fdf94cb149e4432b76eeb39e93b93569e3f5eaabcd4127bc586d4e4b66d34cb2fba6a14d38fdf14f214f04966c7ee48ba1369f69225aefb46fb8e74d1bd61e8ea514b7e702abe6d0b6040b311066f0aa6b84218287391e6caa9d8937e95384a19cdbe71b116e8234a7b65e1b2a11d84aa5571764667c42297bb3aa9879dbfd703554c5560fb6520f78de739133f009f0e127f7ab6a84e99f5573c1eb27c0078f2127b9243833e4a5abd4c25fb8921411918f38b3fdf37312ea6675bc8db03162c2bd69023547a8bbb341e0c31268753148f5510a8b488d489cf42c69061ce97fac9e2b8c71621ca611ae4567ebf3abe479f2e73bace48694dfa56c8d4b76be5a4142970f9723cef9596276aaafc4368fa6e041b3dd67fd8c35129ca5a84e2e6723332217f0fd2e19fd06eb27d84a93b75276270f973350933f94532eb713984ac4f85342297eb8ac7f14195bf00741efff0cddab54e73e3e41d32694f267aa5998fab0faaaf8fd15521287b3717adf8e2f1cfc13b0f405020e376d84e4aad33821c2b1cdf01c79e9087acccae725bb36454ef8d515da5382d739be6b085d815af1d8dc289359ad9c14c54f1ecb98636ce3eb6a6c0e0a98154f629fa3c81053368bb5a686ff3116b3097a950b993366968d9aa754f415414dd94a67ebbe33b75f51e19785ae2333a25913252dda87434794d5560c828aed910749cd9f65683c39d6d525912aa082fe862775f1fa1477f4bc23fd0f13cc0b835bf9273b280e405aad18d735ff49832c03100e04826b832245fee2e9426919a939c11b4ba0966236271532e0968ec2cf726563b20dece354d4cece0778e29657334a004d59a11050e762bf2d7ad0b03d36b00da6f7291700eb2c150631a91031dafc7cbcadbee94f5079e27926cfda19d258623fd8909ccaeb9f3e41f75d05ad9340e71627304b6614d3335024ccbec9c7f718092cc3f2f77880c067545ee54efebfe5e650b5b54986f7284eff67cce1a9f4758f5e33a83af48941d2b33f4d8a6fd1efa9b4afc57e396e37c2111182e5dad9313ef7502ae9f2011910ae6e9cd4892f6aecbd9eea58aea0f865f46a8f3aed2da18482aa09a8f390dc9da07d51d1bd10fe0bf5f3928d5927d08733d32075535a6d1c8ac1b2dc6ba0f2f633dc1af68e3f0fa3d85e6c60cb7b56c239dc1519a007ea536a07b518ecca02a6c31b46b76f021620ef3fc6976804018380e5ab9c558ebfc5cb1c9ed2d974722bf8ab6398f1f2b82fa5083f85c16a5767a3a07271d67743f00850ce8ec428c7f22f1cf01f99895c0c844845b06a06cecb0c6cf83eb55a1d4ebc44c2c13f6f7aa5e0e08abfd84e7864279057abc471ee4a45dbbb5774afa24e51791a0eada11093b88681fe30baa3b2e94113dc63342c51ca5d1a6096d0897b626e42cb91761058008f746f35465465540ad8c6b8b60f7e1461b3ce9e6529625984cb8c7d46f07f735be067588a0117f23e34ff57800e2bbe9a1605fde6087fb15d22c5d3ac47566b8c448b0cee40373e5ba6eaa21abee71366afbb27dbbd300477d70c371e7b8963812f5ed4fb784fb2f3bd1d3afe883cdd47ef32beaeae3fcd3556d41a060394f5eaef37432a4fcdda96c60b7494009956ce532124e751eb76462091fefb85f58d2a22c8da030d3e2fa5704a0183ae892a5a79eafd0e5ebf8a0ad2da48776917b3bf68680c1e572d2ca04a3d4435e888c28cd214999c1b4892f3dc2199022397e41b0eb94bc4a3f75c379269cf334514b9c5fa229d091e030ba1aaec63145be2a8dda4212bae7a3938bc076405045ac96aa6308989eded7b6e94ddbf393668847c77b7342e24507f3cae179088118ff36fae33ddc2b2e00e363dd2fe8de0dff9d979c656c5debd15e29e2193caf35b3f433e6283d9e0cc57ed1d294ec39c28bf3a34402d852616b9c4fcd3d2301253196fd75b1051ffd8d51da35f149cc0e9413967b31ceea303b75e6a9cd06a06fe0e40297c07ad88bc122270d2d45c07882c31649da954ddfabb1937fb02db39b27a8e7543de6ee3dc7ba5f6232293d89bdcccbb7e576a2f621170056d0e0633270a857b4108f8c9b08e12b3ce73d6ac7adf65fcc3bb911fe0770d5361467d8bb22adf8c022bed82eec5e33a434c870bcba087791c2a6c47ec484b928640939bea47f727f59bafa7ddcfb1ea1011477f04dccbe0c6384e0fec01b5532a810aec360e66efa9ecd1b113e7e953c3667a6eacc08d947079d900663fd515fc8c26153bdaa9437da3d63707bb03f7cbc0a2532a185734a9437fa1f15f154b4ad6877f523928b40f353f924fc59c56979451d50320b321bf49b46d03ec1063b3d491b32fa68fc1dd35706b52841ce0b565fb6cce962bec40d119da2463311fb61af7391abf28ed46091b1a9662f036b3ba2172f2d51c04dc9e0271c95101afc02e0a79a9cf9ea6f8448238a20ed0b901154690165a1e0bc0e520bc6931fcc470625e0d53644b7f525c683dfbd419082bebed3c8fb1ac51bc6ad7228a92acce357c646cbe19d9e6f2d51fa31a5f4374a2c287e0e56841871d83a83cb3df7c5d8db0b000306ca47e48332b0073fceaaef41d9915adea780c72c416736b9505d2f7c3c37050b94595c0fb1cce9f5969179e71b3535fb4ba624aa0a45f183fb3cef20a0125a5ac37de0b915775f2e1693f105349226153731903adc468505c00b20b180ba89591f5a7669a8d8f25314595e836dcfb59434ca14c4019279a56972ca1624561a726f992907b01829ca598bc8480e156ae00a19b630bf5055cdbc18f637d40f960c7de1fe7b765e8dfcadd0373e5f8bce6181c580665fa8a2e483a6acfcd80d848e0fdbffad42d3a551d7d0b44ca85a688060777a4e28c3e65284c3f24d77776c62ee2e33865c9ef932a134465a30a9c0a371d6abd164c9ac7e8818d212fb75d6efe283a2ec0be91105d1a4f65140a15f347a8b1bd559e279d2564d5333aa314b9db38255c898d9763330c7cb17206acc99443dd2435134d7b5b8097d98cdd052d428d253034b98af258646cd95182b8f3c9795d90492ea4d8f74f4592aab7d74fc0a1ca4836c4e44429bc804b3700c31833b3b37fe642a64c953b7eecf8e5e387d210751324322bdf136f6795a6f3639d8f7d6f41b111ca2c91dfa4570bc9b26c0353c61f7183da39c217833705ed12fa2940e1942e0ea92f89a6464f67e5dc62b0e62dcb932c77eaa22f53ade85049c48db8dac5b18b9b9be919e55471ccca1277322cb62dae7d4830216978d2cf8073491f8b84d02b4a184cc50204dde0f3e1d2e2435d958c52f8f888251649bd5f8cd81fa4202e600d1b01121cbee0c4f2573050f2206f48a16357ee1704a19c2f77b723954610cc8d1ac29b96014edb3df93c18c9ad1f65e12e0aaddfd29f0e78da62b5df552bb322adedcc1e6a6ca64f3e32a42a622a568aaf5d61cfee8666d41b6750f2ebd3c6663b0f1e1668ceb89e9cd07da4de14ad166ddc8467e6fc47c9c1318f7068ad88d048932c0e7ae984b4ab722fb98f62dc0ce00490482a6523b2526dcbc85a2d4cf95d0650771f419d29d0b414e8d49965e6bc620fe147557d364558906b3eb7b539fef535d0c46b5456a302d7a37c3cdd3c49817db3bc41d6ce109e67f994e1442aa4dc46bc18cb6cc3a8eae289b4a194661dcf443007bea2c25abbccd3eb3e6c33c5280d997ae6291938d8b00c3c7c4dfcbfc80e06982073eb7a1d398aa033affdf664e4e979402b900958ea9b62314c8895e835781c1bcc81f55f389e624581e1af1f772c826dd6f060e7dcc7c445226236cc5534d2050f3e62de447f9008847755b44ee324d3dd92f6021101e14c524228c0d7ad7880de693936d7beb7e12a2790cfa6addef681f02f3421ea37ab7e70d28247426df39caaeee58cdc5853d58ad6de48dd2f5a76a0730a89d135d6e9a6ca7d3ea420f1dc6bfa66be48eff53919a +MD = 2a5555ed3d6ac8fd4d1aaf56d0ddb4bf0ee1722fb33c1b5c3674d27a + +Len = 93952 +Msg = 7543ba5c56fcbe0966c2c13b58939ef86cb848f1dc9a53fc76d7b6c48a95cfbf0617a761e08e7890b4316c57af8fa8deab24899a9b2b2dc12ab436019ff6ca7104e6dec88709b5cd2086a30e747f17d5faa1d9585cfa8f30200b860c871fafa7b5dbe8f713157da8f2eaefc8710af4c4a057be93e5af80319f052f4f0ab78649631b4c584c5bd9097184d7ed6cd94692e66dc2b3fff109acf0cab830ef67553e54d19251f983d0d8e67de3e52e941529140c6d20726831895c81a91900d62670d023434ce4356bfd99fc9b197fe26970725b464206bd00b029538b7103ac00c62139e6b0d318b160d22a88ef266b4b4f4783d58283987e099f67e4a0c193ec288e3c03e58fd4aae9d92e31d0edd8c2aeddaba246b0a0b47d08e63f0e0231f07e5e542353e0125e81f5311e259ad1d7757afc36f7567ea9f2aaf721238e2e17b0daa8cd628d7ad60e705bd854f6fd918c679e18fe3dda6551cfc314472c3366a74a61897a60b3197990d3e6c7c905f8dcecb8d0c12d5af183bd719fe2a6e8e749f6a6df031f662fab9ec2d0e4db90144b5072e7aaeea9546fbc2a4b5cc2f4a17f25a05865933a218be14f1f15f347eec2ddf5e420476d96fc16169e1d49009c3220777b0884d8f600a3a35ac1dbd28d2ad9694f8a024fc014115c228d02b3e1483052d054bae7b6f42ae5094f59d8f9698df6b152e5f6d99ef7255f14b7b677ab9b59e0b2fc10694ec03eb52936013b6941c290dfb90be9810e98dc1b2eb06641a9b6328813fb18f6abd6e5b639f75a103df877994535f9a79fde2108304ab7f4a48e4f3fc84fcbd333d4215e2c5f5e48c8beebe8531d0ff7f11eb645852c71aad20cbd40e1b488cfa261f189d5e450f82b3c7634a96a36594e812438f5fd9c4d7d5506f226d459d13ea4de9ffe2c3708af9c9fe510c573b5fc2ff24b486541c4eb94b1bc615445c251c66f086ddf1b5f9903ee6350d6d0f3444fa8e5450e66f764ef470858df548821ee2d2deba604e7349bec17314454fc6e09ce6db69d16ce328e4f3dd41b8f0cf7459e743f29fb87c78c20677bb807b6c287ed4d61bd56319c9a51c29db0fd361af34c46330f072799fe13bcf5d9f20a88ee8cec0e143008e93bd6017b47a7efd41fbf0c8d0031aff3184b7f69501ce0076934b2874aab3b629865613688931d6bf17d2c16a680081d0252169dc48e21881d6c079308cfb24fda864a951acba92892101096a6fc185fe5b0eb59de4eb35335bc53f9f6a556f828c12462a6577c532a001ed5abadc801e9eb6467466680b0d7acfe82bb340da4ab9f5863d33d7d34e0d3c09a5b9c014a358deb8ea3dd6fe72cc570f6ff85c09c8ba74c614a879312dd135dae5ed0a984f21ee7959dbc673f5b8e121d6c9e5829ef626923b23da83749475cda5d51a9f54724c045dd0a52018c904abea889bb91ff561773b465a3e94bf827e40028eae55d29dd660bcf1776e95181a35b4ed31ce50dbf17f8096b710bad2594ee5c539e5bb4a8c0cf149ee3975b20922ef38614c60fc7d82530ea17b2eebeb4d0f5cb676a4e881acfe0cf93c1368d54c882bebfcde2997ee3e3072268445a0a4dfc3c87b27de53db63b92cd8d6832b1d30262671f109bd1dc29aadc543561600e788d475acc28f22a2dcfd8237b7670f47c5a52e7213799b50abb8b9f4b3b7cba71a6ef8bc0b7ffd3bf6efdacf7c05bd5f78ec84b9bd49d198e2378700e5126faef6fc76ce3fb2c5bf8578450627a381e7be6137308d9a6aebec8ebf005092876fbd01626bc5c4367e172b536460bd077114a7a88efb07c1ca1932b47b8cc49d59cb126e0d3430aa280a8d7872adbeb86bfa244b2d9c0e70c3f6c829caf0350c0dbfa3dc3b1164bb1dfdf346a975251f68fd6ba184d71af26a13c3617731406debe93a4f7dd3ecc3f0600120814d8c96d89ce24e3d32b9b11cee990e28b6933d85064a3a3df2456f2fbf4ba8929d51c93b472ca3af3567476ce5dd8227f689f55965581ef402fb072c8a174145eb1121218abf346365a02fcaa7e5602d87b11fe9a4f880487c6a46875f188d13cd4738fbd5fe82f23a00d4c693652a81d09527b6338fe0a3c53f87c08cb3de94aa607b5ac77f21c438e5d0d136c133cd67a2b73f9fa2c28e83d75558b16dc8410909629ecdc57351c8db9e8b108e2e78b35618e657b5a8712ece39c05bcadc917f8e79685745fa43806eb854af107d0c5a4bf75aea5d04f42c80af87fa4f8e1e647c3a28029548e1f5fb98be611ca210b2e0cd0dc5ed5a70039b11200b605f406e6f2f5e4e27c1e5702eca38d4f72ffe63b0f46f890b2b7d5a7a29190da1b29fd3b3c38b98721796a554c7448934994dd3391800822b0a8487aa31e37f884a855b0691307ff89cae0c2a0a71ec59508787f5a2617fc15a2e21a7d61fef8869a95ac402dd734fc373fafb2e318ce9f833f8532df2a0629cc29eff801ecc26a2746978a2f300dc4e8118648d13d94af2cbbaee1534b28364fa762dba70a3f7876efd80fc01b722806ddae2b1895000d2b73622e2b814a8253e4d9f0fa5f55f7b018d997899f4b6fb92c8f236128fa00a9ef0ae30fd55456ff67bdfda3f3ed31fc4a01ea32c480e2288591f754ff6bd1ceb80cc6a64d2efa7bb877cb49cef06c830bb8cf6292fac97c701c71982139c9c155d2a099f4c0b6f05f6d2295f944f16ce66610c1129f6cdc759857d6964e2eab4ec2388fcff3d286e409c92f7bd308e0607373f84b5812711d6d72b5679048b32c465831e8ad9564d0b28abe5c83f8070348c1af450e0463ef038ade9be9610276c5c62746d749b3abcf2beaa43e0b08564bc18d09a78bd974c367f83a40bfbfb4a74b18f15a349afbca755d5ceb870ce1e53d3b9e0dedfb3213d0ac4d7cab136f53afadf21c9e424a0a30bc8c72b53a2d7efb610c2672f2b35c8ea2da876d262d33ba8d5007d1d21ff724b23abbddbbc17fc5a65cdc64e67f076a81ec484d1f79ae34601302147303f918e570ad47b6254e61b2951509fe1c7a29f288a79326d82ce4d044f4ae4d7d78d6fd35323a54e255972ebfbbab63141f969cb88c8665d4159383e9c7e88715dc24a3923100bd7ffb31c2e3b5903def5d782883df6f01f4d209210d620a4a538dcb7f8d93df1884a7f51508eb00b3339b963df2889625c0c90e53b5ad5cbdc0f49338313e208d7ac3add0364545ed6a43b9840b7043f7c1636ac1eb902509e3774376831b0a46e8b61f9a75aba6141bbca9a4d87dbe9f7e08e412b6f3af55447fa5e38d12e76856e8141cce056a50cf6e2e4661984e46802146ee1fbe40ca6c757f25560cfd1e4cc153fe483bdac80dc11012adaa3d144d1456ff2cd92190e2bf9ae4e6ef968e53a9a6e7ec353ea55d1d16afc499d1306f4bddeae72c9ace2ec7bec946a5f8e0f208d37fc1dcde0e47ea0ac6ae4f53c36e2ca25a58a0f2acd9f3b27b7d146b3db246a36fcf16012c5490b2fe73b20af4d0216ff5861b73536aad40a3932639cd1acbde5f1eccf0270b77d6001cac40ec1f910a63798663eb695c2ee991c1a8b7b2ff4cf6b7e7f426f5074074b1243bd2e2e43c4d39ca0b9b5f6745f47ecf0224024bb4dda14d535198a9b700380145cfa281cd5bcfcdb38cd3384d6d62378d3b9315e0bce4e855d17ec3024fbb2da40be6d285344279a3e64d360efb45e19225ecc6963a899e44ce2fbfea07418fa0ad363e2c819ab522d055c9504730b5580995c79fff9659666f320337d1d30f83de1a2d89e9df6879727459daf92a9b2910177fc3b4160005dd0ef9b154789593c51b0765151a7cf1f5314e75b83c7b4b61f955c9010e7b67404e071f3938091a8bc03588ac53d8d0811511e92c6d3d0726c3b37b8d88b2d4bf77974b271b535e57921dba5790645e3da708fefec5c9a584fe009f018b8d96821310fbc72a5ca8521828c3bedb08e5526f9c7bd64c076da531a3fe0420f4f4b2a9daf8c16c0a3fa3dabe6a883bacabe8f5352a5b0be0a7b1e406603f4ecf3577c25d0abcea466d746048785eb938f925c23cd136093a9acf9f908d591d06a2f8e500f860aaf978ea332cb6e75b9417345d17390f4eff8f28eba94cfb9581835e9a2e8c56b609a92fdad4e9cc2ba94d3b4e302a8ce315cee44fb966cdbf2820d06a4c8c461660486bdda6dcb4315de3631eee6c58cf669f2a5428a476a2e4c077dbc3c1d7d0e49dc5c50c5648749920d354b8c6191ad84a22805fcc9f469bac7b77fbf3b2ee7fef66186d1e30fc464eb478f80178cd5516f65ec4a6efb4362d03c65cea7f771888766131fd13d14ab32d1215e51cefc44dcb73c0fc0ff39e89374f4f6de57496ae1c25bfbb99fc8f9767ab773aae880c35cc49bc94a60bb908409a3a468cece3aa80ee81206b84fb4489ca86c8d5a117161e671e375d0571f4462f863b1de7e6c4cb43def331717801bcf8aa573a40cc3aec554faddce8ad9370979c15406e874325ad3efe92cbed1528bc4bae847013e85c9cb8becabc552fe759e29b9c87ae71b5b30907379b41c9f49ed1965c36d46796c3c032d08a500ed3fdc297da3d4394a4dda8d7c8e95e654926a4d76a9cf700c352ced0955988785b0ba3cfa1952ef519b38136ecbb2b314edd2c3955a965fb0bd14c61c231e4b7a70ced0d9a9957dc3dbefdec4b1b90742c4ad184c66504a095c9a1adfe1a4c12e08807176d50a790388584c08e1075780af6fc7f64d9bd368ac2357cf21da8d02e055bb5c1c2045b31907f7b5da2c283116713f3d80c7907114270964541e03ab80d50b13ef85783506854e55fda5fde682780a8c9061e5953d3bac3a08fdd98a7274ed28df98951bf946dc63dbf35d139bea966e0d0957578fc7bcaab0d853222dcbddf56cd800da39c30e69f5a2aa3a9b2f8f5c571c7a3a7461b740dc5c14f52b206a1407d26ff2709070d2bb1279ee28dd31c1ff19b2b083702896fbf7a385f338fe0f410626f706259028ccf15080cd6a4a49659f854c45998d17802963670e7c1631a8e1ba4a92f8e8e68b9da2a4e16d256d3b0c86703344613d196ff8fad5504f459003be7f8f90e796879604cd1d4c5f87efef2acec4e721921839b8b3f05c159596da9808546408b33158db6bd98e5523f4c5e6ba83186a911d154744e7f5e5bc3dd4db779a18e8b72984baf39eb9a2ebca1f4ec5e65e88c49891090014c45c23f580fd3fc8f5f43cc0781806d534c52a0059c763770028a70b3b92981f3dc5674e7d71e359a1c79ea6c1772825a638791803e535bdc3a6a2e553685f6fc8ddf0b918dde4d492bf673cef4cba0884795371bc2c9f131faf62d796fec87f0bf24ab5f195c6c24f582103602d3ee6460443cdd102122f5a9f412264ca85c55d9eefd5763e0b8b4e2e469ab28d49576175c45cf10a315b2ae2d8865b5009eb64505a98454b25c805be625354e14bd46d2a4fdf7ab96f3ef7369353d923b75986a3156ebd2197e11c64eecdc5cdc8c5dfae5095fc744e3355f6fc1b6cba20885b03aac96c65f47ed8ce568a93b742d42f8e7140f4df30e0bda09d5d8487d80047fe7558c19cade9e16733fa3d124c67d3272c40d26ec9bf94cfd19acf214049e3f01f6d5b1a36baccbc019d307348097124ec1633877b3871d143439afaebdd958503a7a7831189d12939f3fc6eb8217ff42b4196ddb7e3eb616cf876894d340339cc68255be0bfb55b678f1f493f58561184535ac6223a57dcb919f060f6d5836ad45f52f906c4dfbef4df17a72006a9f961bc1dc52cb45dbfb23886f65b3abca4b5ddbf0f0641c6c07c64541d0cc4c2385dfc4e7f49da4396d2c4a8ddecec0583db63d7f261bef0fc68af730f780b654ac3847b490c24cfdea55ee46c4e61f464cf922c47ab84e4ef3420f2e2e452d9ad5cf512b6e61c5913a467b845d2251fd40ce93a73463c19058959325bc433b5dc64bea34d5a3955b25a6f92ef3abdde6e1dc97109b46d13ebb2c8dfceaa1670548561ab70fb046c5731d712ccca94b68f6cc36e7f88605bee5ae049b008839fa2395ea9c62af6035eb55ea66304324ea49457814934ee6799ec401ea461f3aa51fb261cb17c8691556f36cc369a1eed6a0f0667fb4c4fbd7ad168bd0038ff16c0455882d7525ebcc7ca2ff2ebeec3493c4750711a310cc41dc4baa3881ffe7b8992565a8c6eb6dc22508ac8c764c7b897d7b64b0a75be11df10c66070698a2f2a7cb03255045785f19cd7ac6dae84d2092aa83450acdc3d4b500c826db81ac80f6ee678d5d59930b1f9a72c432e931c0cdac6eb9128df9cff0d0d77d48e38dcc4e379bc6334f462e01179a6ec676b0d1f4262df208c40b756a239cf494e6cb3c774ea6ba1a50193085ebfcacddb851bbd0c3c6da3499822deaa21d7409b1f03a38da904f5c84957974bea067c0d79ce629284358dd35e4613af564e3ed6d842d5b84616f40124171953a8c85b8fa19bbc700ab534cbfbc7820c3792b89410d7da6f322010d22a581b205caf00b4951a071f107b5ca608fda65b4623225561591e2cfdbed0cde4a0f91c7628e01edcbfef1a35e659d40e7eed17129e209d423d3d7c2921b856cb785fb295a49e40e0f3e0dc0b84b0d864b1e2ba2d6217ce2c0aa4c725173bff47449b8d2bc08fad3a6c68eed1e4f645b44d23def6fd9c7a8727e0a871fdc049f0ac5906c90b38d6517003bd49659e8e65970cdfefef1334fc4b8daaa05419a94005f4b9cdc31e3ecea52de1d2b51e3501261a47a8a5106ff3bbe82830987cafcde81b00caa6c448fa8263d70e21f9bc0f70d8a091ce188df61f9cab93697dcff2d928964014bfa76d8e32273c5ab595f91dc4653bb890318bdd17cf5915918c474fa9c4beab64cca02f153d1dbdd64546737a2016f31bdd1d7af5ede24b5c6743b20b26a6b9581b3aeb898302c9e06c8018464bb40c1ff3338f93a1df6942d360b6e92698fd0e25865a0bb39c1d485e3e82c5528372111666719d6590fdc96336a4b06ef5b50b7e2ae118293a1692acca3983df15b393b91ec75fa3b78774993e31fd4a4d9fb48781273b7e6d4433dacba2fe4beb5f1c5dd5077706a384b8e7dfb53c53210badc43182e20dc634c06aab65811364b32f6711a85ff8f5742ad193c4da13e0876bc6b48aa861b556accef1e7d8e0127e21876d2096e52de43ed902d763073ca1531172a4fb04bb287d9a37a0521c851eb7113016a865ad435980a563639765d81816f47866815838a73ec53589333cf334a712e100f504102f4ae40f686f2c9a0f49c26b57421cf5be3f52fdeabe9aba4eab7e163d1db2d914aa5721cdd8d175cd4c64f469d169ee271e499ff3393ed259b0ea2cb93a4a1cae117741207ef4e9b67144b9fab9cf80764e21623f1d89b9da39efab01f53a495032bcf3eccc17647f7afa12a665de6b2061630b2af61bff64b8e707a3b8f3fdaf6090a0af3ab9847cabfd94d96fe6fcb9da96e1433d56017db078d91b000798103daaddd4654ba83286b7c72022a9c3a72c258b145dd87e89b30d75d454f5a7272c6411e8b65e7e35bdb1100738774e7cd8a77f1af213b51d232d847c424ea968bf44d378b85244faa38205fb1bdffbaf529523d3848843aca3418b5f32632d3968d598f0e5d7baf5caa31f68475459c34c672fba7fb6a8bc95f1e109cfe3912dab8ed8edc95f3ebba58cd2fb4574f73d0895d95c5e1f62c18da72c18554073ca09e929cbcd494eb0c6b7b71080a2429129b9d715aa32f05ffce9c2e77cfa5373066cf2177c267989a0ac4254937cca44224baf92ee81effc56324c139171aedd2392d85d50873d8ab5e2fb13f8550cea84b3a930859c900b4c093e195d56e44ce3f33309e4ec194888f447eb29db78d8c39a7a9b19d3af1120e71f551b1aa266b9f698b9a3b57b57ac48bf46a2609cb351688a2f25d79bb287444673652d57af28257fc91783f21c7258d7b2ec94e6fec0966e691418c443e1b969e0c61f728ab0f86ec4aad81c2b7dbd17cc82e8f61f93ac8dd56f07d769c2bee029b851917de6f7dc48e81237e940edf5dfefcd489a4d236ef0b13543889cbd5fbaa674131d3c9c4ea259c2f3fa4e5408899db23cf35f93884765117714f23d2f103ae7a5dd246e4c8d7a7acec31897b636175861bf3d657046153d00b345c6d4c6c03c983220e64c46c4aa36d812218581d6f045527921ad792c186ed819e2e74ae0e388c0c48cc48ab2c1baadcd7a0ce9774a56519540a65d14242ff7d109ed29176ce5ed81da5bb5df61c8a8cd09a2d952a72331145ad16e87e0b2972db44ccdce493e2ceb475854a4faff8d8368edce03972a7578d8e539d1ee953a626a8cb59ff90003536c70e3ae0dad907310445404aaeaa32533282bacae465621a5338ce70cca157ca20bdf551a71662e885cf7c052c22ecbf230d05290547eedfcc7904de4fab7a990afc42491e97318498e25e11f6f9cbfbe85a47e453e2929c9bf8c3f22208e7ca0c33eb704644bc2cc6e6ac171415182c09d347a2d61c967a491bd2544c9ee686afc8b66f27054a0996432fbe8c601a7d0edecf0c97de41a05d4cfbabd557bef579246ceec9c324439062afaf68c01b1480e5a5ca9d11dd365ff2049fc619b93ef4afd594356493013ca9f491b01f6119e74f9283f19bb066d874b6da26ce1d8aa8d1b80a72d2dd6b2381c50d6a6435b5c9845edf996603564f3cd901fd5d33001cf3def888f34aaacc53ebcba077df0fb0ecd1889f581d2e4cb135bf54ae43c9d87b100480b124e6bf852f725940a75123efb3230a5b4817573b91b932a9950c64d314d961f3b146858157aa9ea6d5a0abf5cb5be356ca39f942b79a9f3670f24961b21d33a03bf3a5ad2b1d7694b027cf66e2d53130ecbbb92e6d08a33d1ea30e8fb479fea20815a7737571e9ef810b17aac03cfcd3f6c520687cab47a6e5463bc4e094cbe060d3143afb4effa090770b292d364d263081b556ac2d92590e0358670017a1428d557369865dc18f2591344bf16b2b11e1150061c4338d3ee003eee2daa989b0d6c44c6ade4536a488811979d3859e7c53a989f18e683e3ea56e849c37f38a12824828a4cbaf66c8007042199d29ae4fcc66d96fd071af3fa36ca3fdde9cac50da088d7f15435ae1d7863895150164729573774153f9e82a2423d26d994df753262d066383a819d853ea825304b5c7cef6f9ebd1dfa6efe86ebe99542eae7401aede18b8df87ab96bdc5a8bd31eddf493620be863c20ce60c963801a66662a43b9444de6ef8719025d3e33396650b5cc9f0f77c731108d797f3b1027091e220290862c557c516a037a7eaa316986504077ef9efe871e321dd76dd0e4df7d62247cce3d6e4d8ca6835dac950c0338b98b07e7bb9206f1c733182149b7af2cf492c34109972ce1d6694ff17d32fc0ef697972057eb763253a28b81010943d2df35ad091739dff8019d9675e80b1caf114a6fc2f9719f88df5478b2824361182cf4844eefbd2f782f067a5f61ff2bc4118ed6f42a8c499c723027df54cbd2a6e2b68e371a89e40a688e45d76d76f0f4ff4a16de71a43b16141edf2efd0b5e23096515ed1f07c655b51c3d0796d834e8e26675a956213e9dcd06e9c70769cc38aae85f98869e9c021d99ac15638dbf47c2c93c7d616b1ad9a6d08dd3fa4fe68ccc27b45ed8b530b8a9ebd8295cfd59baa85db2811bea9773a665137a5c2472c8770a5e6a9cb6482060fb0a6c0a90cae99a0921de0b067c13d6abc3e3b7503993b379a4e25a08ade14ab18905f4afd97ba3b5cfbbba2893603c8be537923b0396895ccdef9b1327a46ff59f1da3c05019c8490541aeb6a203e2edc09d764d9878009b22b8e53f7e11d8b092dc9d2df56a13ae0b98711a72a3d0ba9d3eeaeebfe2211eeb66c3f479cf8cc8ab696c5c91178bca29e78bbacbe90dd8c4427686427cf3cd7020ba9ae187932732ed97b7ebc73886a7568200757da1317dd0a27de7ed7e91f80f54997ee0f6b36f8fa7a4cd2323cbcc0fe053370694ac1010f73b77deca50cc5a18591883bc56a978238dfdd2537fe2372c1ada2dee30c42bfc28b9f6e0f4352b8e437717edf72acf93d9447dd08b2ff9efbf2799b8a7e3493aac77dec76379a73fbd6245927e38bd80f06acca3d8fc7bb0a9e3f2faf8b3913730773d8787e0f8b230a3b5b1d21c6a713a3766d34d90e5f740d9e2ba0b7d2c7d1a82bc2946b4466f05000e55dd1efdee1f73f468d135604decd00f02c8884294d46003b38a3bb8ffa242f98386859f7f07e51d6b4e311438158f21d9171efa02c4d9b9303abf77e971311d45b59b77ad5a568ae3abcd284223dfc148e0857c5154b586a53e86aab5d89423a252a6aeff808ee3d8d051c4f37e8897550b06f108ebbb141c7ed87aec4134b2a346ef6bfee155cf53a50512d28e524a0b80e981b0f0b4089ce1ff0f1513da734e77bed730e573f65a11303767bc05836f277653d0cd690d2e514290b8b64c0dadce5b1a1ff5af01f8ff1c5e3a6e68e98be8f590f0e99fc9d9b6e8265e925329c8330d5b5377d29832540fadd40d442566acad5f99ac21e4a5f63af88e0fb66fa58f1dc253d5a46212f9524cbc0261de0859e7e9517eb6079afa802fd0953f864ec8d378a775ed089fd62d647ab487bd7ad9eb55a3c725dac1aa02f2ac8cb417cbc877a5d7c17531e1d3e71d978a7e69c31201cc14ef370421ee076aab5cdec9227551706b1f0486e1d9ca9e9aee0d8bebee71762e5eb42ec2afd9be546d85455db9a902ecf961afa6ce1c100b47fecbfb54827a787d64ffadd3be172f277133847bc683e2b65553389c269a73fc17d0fa2b7d017ab20e20e944ff9dc5f369399da3f11ad3bea81aa029306558772143f05daa32bd667c387ee8e3779d373602b21872ef497922aee55f8299451fe3cbe5d15136c80274f075a9b4ce405ca034cac4912bcb4f8ab40f24635dbf5c2711e26fba3423ecbff0d56eb8c934cb6f78ee8e96f6e2a8aad727621dd95096b3bdee1f2d55578e25dfa61e399103eb6b75255ec87714ec48bd3400f6367f35507612c9f1c1eb4f6d65f1a37d4d34235cd4771c70d7ec832d0e3ee6379cd4a1c6e455554f9f6796612bbde4cd2650dd093cecb0d63defd521734efc2732d843ddb0bfab8f1754cdc7d912c97044de803b568d0342d2a74aec936a2a102112815d8258b4f953395b6817f83ab0ce6674baca61fbfcbe9b4b55189d5838900bc40d012956d4789ea80c8b781fd3ed71204e3f70814b28533e25a7ec6ee8a84975b6d6397a6ab10b1c7ae0996022c886eebf5dc37e7938588d24eb6154689156fa20a990090124091f7cbc64e6e5882d45d4cd61d8cc18319e1a8903f20072babd132137e9e2f91f19d8c8df976454ee8d563752798ded66dbcf2cda30f873fb2457e635045559d67257ab145ce655522f0e429f4703e280ab0b7aeff797bea399b3a19240a16cb592c10d0b1eb5b2e091c1974f2c781c0675951b492d27783a83f1fa5787105944e1de98cbc31794211c3ade6a0f32c680a336b8f0bceecc464ad7988bc0e8490bc876f25c3455239b3840bef9d77a06769cb6f9ed8a35e051552e2436d3726393ad50c3c65ab686d84e9adf036e980471c8dd85478143dce20ebd4560a7f6d063f935b4111c84e660c411ea90bbd4eaf98f7205068862e982dc4ea41226bcb70315ed6c4661056ab9046d87a9a676dd94593f203386d82fb727a7e854370b41fc6740946d13833b6d74765d5417c507cc8e0a7fd565eed50c5891ba2cc22d95d559f6d48c194480047ef3159bf60a9028969cc9f40cec0306d5d4c2a4b068dd1652d6d3ad5b91620489ae56862b8ea030d9bda798631ae32f0738a7c3e7053e48baa93ad7c1b109f7fc6dc91c9f965d6dc034c1ca52bf9a0e56851291504be2f2f837b01333ee9c6441f91665386df266b1cbbe91c125532b2b82aa17d384f19c7648de68998e44d4bf1ae469df5a85a3154847f69892340fecf8185c59f692ce9ba46cdedbda28cede97db317da43fad55740300bf4f654103b00368c8ebee11cf12017de11a71da063aa4c4f894470bd7179bb71ea40f49d66f14440aa92dec7a5c454e939646809fc9e72a3a72c64505f9b6239ed85ab0cf00f3f7057876e80448e258da95d049110d4b6c2986e3e446e1fd4d25356dfd542a4789a3a2f18bd69f7da39c6136bcc5ce7991af17c76f0199173c9c0171b8cfb4b803ca6ec8605628c138c340a16221d419a1b36e996ea0e7aef8ec858d6aa767f06c642320ecedad531e357b39c18ee6d2a51cd4826a8a94678afb09ea9a440b94cc580a24b903f4de5ddc59256375ce4ca3d48faaea2768ecf9b3d5afd00e684f2c8e6bf94e01c708fe9e248ed03c5230a6c2e73876df2ae54dfb3005946d45c693ee8eca334dec790865229b8e4d3b26b3ce2654961aa4f98fba64146fc96ba40960babdf1512bda83189d75270e50d5d4e09228d3409cd1c6dab703e88aa38f96cc38fa0f744ed3789fdb4323e95be610e075d9b4b9db15fa4272fb8818b32f431a51aa151d1b0beee2252e0845220070b61592c2ed296c33dadc23d5db632e17324af58bb65c2bedc8c25e60896fccfa4bbb7983454d7e7a8a3fa4593c7d311bfc6e02faa6d7da7d3bfcfab21f08f2b885aeb6812711f4d63ae1a59ca1c7e3556104faea5555c1a723192b876eb519b24d387244fc3b7650d20c4f25730be9cf475304e12b9d887266621866de40e9ef8c9fd5522d94abef3a06ca7c1b0fee9198a449699079d6e7ed1fead7d76f0c77282c063520e43cbb5b173d29ff9c98a13a3ff109ecaf530ca098c862c10c27520b272e753ff3d0bc1b89d0b489798f09176c234aa708a8eb6714db9004dde5891bd87498f18810fb63a2ada620707cd1157307b2294c7d8c2bdd4ae808abeb22428601289d6da47f1cacf9872b4707ff1e9bc6cbda4379f5d2393ef3363de428667bfcadad6833502ceddfdd14c7d79d192e881d23b445304671df37f45d76a071fd8ead884265777dae853242b895b2ed72742e6a6989456dcc543eabd149944a55dfb296c3e4fbf536130d1de2e84784b0b3891828ec3a3194c690c462060bd9cb16433fb255e47ecfb2f70d0c7963c52f6cb396ba1619790f5cb3a5d8550e06a65ce9ebd8633bffbf8a777a00f00e9839c8354be7b0ea2c873f31b8fbdda4b930d82a02feb4075f4fc215cc84f450e514ef989e7662b334429692649347d5daafb391eceaf05088c782596b612d3294090864f931d37e78898a5c10673aa9516c14a31165c01e616ff4ccc05f44bb8e603c1fc3deac52e0a3431926405f2906af24eada36cc7ad28e3df53145e1f4b961b2536346943854dae8500de65e5ce2c00aedad27bb6bc36e885c27ddabe3fe54938743313436bc74a28a2d21de4bcbe6ef34f3fe35fa1c55fb8a0bed4b9246800644ca67345700ba984eeeb987fcaa6afb481584e42ec58cbe06433e6809772e341160af3ba009f4f324b8750379689455b079816d0fa75bfa583998ab4f7aa644766dd2f11bbd6ada94f31ef7caebac26f489bd7ba5a809d70953c2bc6b38305ffb5999ffcf05637627077c0ef51dfa959dacffb4f9b1e07ca0fb8642689814ad298dc90dc4ca29ee645c57ee04e5c6cb324910c012ab2612a598aae64b819955876f2dc203f2026bd45a773ffe2a57f03bcab948f87c24c0a191f74f1edd08809e688cc793663715fd6aa4aaecd6f62b4096c0f4b40e22af1b503525e993a955f4e1adc37c0f0f1369f2a5d6d5d0eba4ca15ed6b4d4768069b3c2c12b28bc4fd1340595fc7d4d48ea05c436dc1007e8460af0a56cb113deea9bda3bc83ada19f83ee58437b9cccad280e4614b94ef7f38bccdd5c3753eb8fce3b64cb63e18864ca547216a05141998b727675c3a29d18d2d4302698f5b810911e35e85b0fc07472d96f813fda797951ee9a38eae4b91cbd2fc95bf6deed9a7bcfdfbb711f92f603e4162b5e1fbd7600ec7c0533fc9326d44570a459f8d15413b42aebaff9461203df30bd080854b822d3e282a8d2735fa07fefa9ca2aae67e136dd211d8524f2fc3185de427d88663e0b955a504fa1efa8430d11505ccafa6dbdc204c2ac73bb7542dd3716669fa9ddfc5d33335964fd74fa9185f4766f3640b29f3da6547d98f77a006f8babe2a8860e01b65ad906b18d0d44acbd61e343e17b3d73d16688af0941b62fa934998cc1a94b8accb8cd347ae2ee2fb3036e48d882644f4ccbdd2833ffc61f79e90c7c1635015791dc02aec3e357b5de455a6dae2edb781e69c42cfd1cf9e602b382a10e1aecc7b22fec46f17746e7470feddceae66c974f2a84e3f000172d4d78452230c0d4803698d5258b05846df54a71ba1414dd54e8f567749313e89b60229b28058f812a25fe037319f7daeef0dc2c32b41ff756efb1b3076ebe33d94597cddb14f0ba6e884bbf5724b40d1241af6769536f82466f48b1c60a67c28e04c12262e54948f4666651f933a4e882efaa698a786c46cb6da1a9d7ee785b63a386e4e60003f463c7370182ce2f32e602b47cbbac7e0b8ef3a4e362a257c7002cd0598eee878463b3a6171a7dbdb2e583b7e624760d98370839a690af6ece0ca686cb83363cc09e339bdae8c9b63128799af0ef5e81b66db5483c889c2337301a9080ec608972b94efe931539827757ec45e241ec422dd801b9eb73f1e0cc138fd6c1f2f4d8605f0db78bc856894c19e49f0445a9b8c521f474fc79370c535e0d3fd5bd7b90533676ae072aa63478166a929d201c4b45f09662b7c1f50e95b89db506747d1813e694cc5263b3e9c2f78506f7fdce6477ecf0696374b3505aca45209a4080da68186cf7b39a0511f4643ee15802456921be097249b9fa39693b0f66da480e3d1a74081871f82215d4049c0c09570bc40c0ee966b2b950318cb403700eb5aea9f0a16f18d5a4945b2b80a76f5225a8db0083992be49c40a089dd28267eaee986b448a9dd27c6e34dc07f67f27a94a218c5c520ab28894fee295d8670715c453d2c10bf51af8895525daae57ecbcb83e2227d86ccc5a8078434dd253731e64c3421a2b85bb41034d1c8a928f98bf3d2a0e053d4780522efc872040e61047586d45aa59ce280864834ca23384d033318bcc7ee11962e1f8f23ab7b48d833317a85a1c273d0591357e22bc11e607bb4dc9d9ff7450e89c670fea6e9db820541b0b0bca1460c88dfeb43b32ae11c3b9da6ab301578c85e4019bf2cf7d049c4ceb0bb74e91c7e54118bbf2a0689678a17ff4e42f1b3abf5b512d0054d2e14b6ff03109142fe0e07d1c0be57ff1f2bb24a6dee9c32fda1954ce497f992fdca25fd3015db56f3a4e84910a803bba94ff95d7af307815f92872d167ed06e455557efbf341aca03283e9e06e5f6e232bba879aec54b86e064148130eb518b0f9c95fe38d41549368252fb27ddf81dbf5706c590cc30e888008270bb48458e62872652245c9579959a6c86fdf9d1145a0b5d6aa8717e505f4e19213efc742247fe54120b3662022758d3670f9f486e0abff38f7e1afc656e3623bd416fa6edc5e9656773c9448df5a5d1c7e53827d3d85b125d9b3173d0bca1e66b4c09a397e430a278e67d03c20567acce082d34edcac700fc861cab385175ab54e83232c9acbc536eebba66486188ada3ffe43861ebeb0593c7456c46369cba9f9c521d2b2673c0700be836c811ee1c6f52c7fada40af6b4ae7127ea272fc5b75f1d12a64593e30a7cc6f3be91b8341598a3d44fed3fc784a6deda8f30d7fd6fe6e17221d4e06ed3ab9b83d54892d638a2eaddc75abb876bbe13db3e1100c72619b8cccfd0bb13d52572904b063d6cc29c6818be8d0cdabc5cc696816828a79c70099f2ad9a286917302b57a6af65c25fda2019ff4b21608eb4db8c376be3315726a45ad40354b8b0cb2700de77c28e54f3f24e61239edc4124faeaefd4fee33a9417cd1b4c1c7446b083c5ffc2d5782f985ff2b7602b6904a12e49e3c4c3d697d258132a7f67e30068a96fb29986c71952cfcca80baf4dffb5df70be431a549769d1f4a8a31f4f077affc69e03bdc539a8aaa5dd2a14d15ce775282659eba362e0e8383dc12bfe826eef916c0862b8b8225845fdc8413d40bf5839c30f1e0c1fbf07a692e073399acddf9ac3b05de9bd484174b1ea1ed9d5c6f16b3f6c9bd7f78f95084f08df47771d39a74c0496a071a3cefaa19a93ec4383a6863f784a4c11d6fa241c41577240e96481ae0bf525fbba659e74df88c0b27fe0516e3c14b3961f9dc29f94c3001eb6c8f092cd63bf84157029d3c2e59b4940089571bfdf53adefe8ac83080b3a380ecdbba053c6b7343d5564654992c63050841af30a95757fd042a96ea61768b778dbac7fa4085532b97e14d37e77899037bea89a231c61334913800975cfd2c27d5a89d8c80fe1a7115104c4697d2b917b1c070e145e5ff2e3c4fafb7d1cbf82a3b21b52c8c5a3bace38fbe1118af65aa608fef8e541b7e424bbdfecc6e4791e754b2a96ab10e394779ac0d27e87301440e957009cafb0309661f7865911 +MD = 6f90da072f10b784645b2d4556cc1b3a181d1073bebfc2ce623fdf23 + +Len = 95112 +Msg = d8d050cbd9e024788eca91fbed39db930398180e393d949ad7e173d9c65498339a6ec670d049058653ad48af45cc4cbffd30c3b54cf1b290052b1864bcafd0accdf9b8e2a163134d2c982c1bba4a3dafec288e3cfd0ae1934a6f0e39122aebbd7a586e48d495167620708664d31c740bd868c1ccd5f0e94baf959e81502cb00da87330cbf149d5a8381e9eb519a8b97acad7a48c5b0c92623b861064ff1ce8455f32469381e6198c7b8abc341357d6a4c85f7fa517c4a47df728ac09a6645b0ca77df7c70cd4aacaf19c280949919132dde7993e9181e647e964ba99cd6bd10b893c8d90187a5009a23d295d43bfb4cc0e583b8052ac21651b23813bfc9912ea0c574e152f42d3f1975309588a4705196598ad93e1ab1d82954b4a18bc56e55039b6837fd893fa2bd7c70e21a5934dc2e990379ec6e8a2445dc55d57940a14e5164273f59cd58e5f6a8281e11c09536ea22821c98ac978537d7a02220d1d6552aee168a001715834596baabf7813e1c69949b23eb4b86658fd51819eadf8a13f067ca8a791cd1d53ab69d0e43f18bd72d5d93322cc1c36fbe33121f5ff01905328fc7c33d452a86468663c77fc80b0195ec1eca05a5daee339042b4f88a1f9371b472c6c5168c00e984937a134b282633dea25dde7e397b907b1e7d3d240a593e747007990782cf944fa078a7118fbfa793b2604fa15b82453209daa64475d0e95e2408319e8b5ce7460f4593a19e3831a9b363b1c5ddbcd273995fbc61ce7502b0233b1752223352e654837181d01a929f49faad422c65b8ae416ef81290b02b48e222c2b8c3ed57cf0494b928c1e11ad2da77baacd427785096aae1cd593cc356e551bc390cd5765ea41be30cf0266ae2e97d326c417c91e90d75f1f874555b88a14a7c5959a62f23976b77a4c754e35dfb7ddd1700df85f61a62b12a9eb4644caa7f8ba036b9f29c6315ff96c3f7148284ebe3239ecad50641f397ea24b46e21655352a4109b61479b9dd34972779f2f1a6a1d2887b8ff88289b2ebda2efe995668879bb93c4ebb3a585ab336f70b382205ac37c383475fa12ebddfb95b157172261597d2cb0f24f254feffaf75d224a3b407eb54cc7c8daa5483e4a79c347252d808a5f480a35987f6f09f6c6a73bd5cfbdb76a11ed78b86442b810cb703a5dec5874e8721af62e386591bd39d990b3521505e144100601b46de3f50752911ff37bb18f377de45ec4c60fc4ed8ea1717708d2d13fc9e1453a1c4a4db9e4fbe9b74cb8da14ad50c8c8f2ec944e10ee8e82ebb6a081959b0159f043a15fa1cb59bc5e035f7623fbfaa99ea0a1d81ae8692a4019e5a5edb3a4886c789675039fde87222975e86c2642eb0bd48408072fafb1a88507194c9bdd69f3418376a4d9e68c3b83b3f800605ff1dcf0917a6014b0dd77708b583ce3ea632746fee0e01a10500cba90016b4a9072847d809bb0481ae25f74f8ef290c7a087ae16f505fd0da670826a0b1174592d184e3a7e8622a5c84a30ab64aab75face50b96b217e8ea335c0605c638ed1c59370bb9ded004be428f49a79f74ec0fb296b3758f0b6b41930c7e029b55c8fa73cba7dc926151d4043c6bc8a716d7de9ae0cd3ef3ab2d19b0c813eaf12eacfb641d492b0001b2f0f699bd98e4581fd44c0c817646bdd77a71d8ed432f8d422812751a2f9178cf1800ee689ebf046cf9b161f9a7ef0a106cbe833398bf383288661b426fad8d4f570a8293629ee06856af295a58585a81f87f130e6e08f723234856e874bd0adbb2fc9e676deab6b9f22faacf12e875d1259ccea54f7294be02a16f34c427b51a33be8a0c460c4c07d51a2e7d5c0722a9fcfefd21c265d5aa2c57ae4fe95556b5e1388ea9756a6afb0856fb8fbe1d2bb1838be7a95049848fa9545b616badb753c453f266836eda3c92cd592bc0925690c42cd6667f866717827ebe91d0999f9de5f5fd6cf77f63737b65927aebcf6cefc7ca107fda8447e8bebf1f08a280d53a4b07f8e35904cc48cc08eda3c63a3475924bde1de6acebaa65fec5ee68ca22d3fe722bf33267de628c9db1ceda3c78cb2f9988682d641d068023f96aabde4e10071cdec2080f616ac30c2725ad3efe98a69a56873615a3a3161503a4f22621986def597b66641d07793d97cdc9a68f85fd3890a38928462b2fbe2bc5c509631438d2e344d1ced9e2b71748f1b6ddf33a3e597de3af03ce43d305b9f5acefdb2b71acc645d3b55fa3848484b7fa4cf25e71e766702f1003950bd2f45b304052861f6748a8f38175f1e96c91471f5a54999cc9937191b6adc9de0d2520d86590cd4aeab292ba9ae474edb5b8caad6ee095c9e74c0f5e5c9387559f946b2dc45da7fa1d4c2dae6973d5984841682af25ff7ff29d9721d6c7e76776e8965b6c681bc38e85da15954ecbcf20d7448204d9a6a477781c1564d363e4c634c36fbd3c3b50b332f1643c415d004ec999316e75694a8b98e2591678388dc6624058454ec3a7ce608b3f222b8bad5cef77095285e1d2ad746c557222dfc30605bfadaafc4f292e931a0f0d49b226d99d708247879aed5b9f2ca2fe6fb414f37373f844e13865524f206c54487aed53781834b3f6eefb248d95ba21bb60041d501f90a97a19dcd80920df7d84309148e3d0892e50687c86a45a1372926e00f200053f5f436e003e35bdc10fa99d9328853bf82d2091f1f087cc37678138ac0027e73cbcc99f7fe37939c98114fc7380c0ad1a26e3f5ec00bc7eae77045a55c62c18117879389c662837415852e7a2d01ac667a226fedb2596e3e137a83daec2712a65e8cec3e644e738d11bdfe9b19517fa593546373fddcb9e681fc97d1763bb9092a456cc0dfe1aa0e132387d105e3ccb7746ee199aa7af00bb96047310585fed40219dab43f057220a41e90c5f89fdac4a5d6b207c01d5ad4440c5ca29eed292c6f7000c58da111eb4b16e31efa6df3f3aff69e6447ac406aa96a9ece4b5b813bf8b3a499d09cd0969073468513355d6c19346c58480feaf470e0d45a13b74f2925488fd810e0f74afb9e82a24cdf61586bfae68dc92ea09b22d8c8f1ffe9db1e7e98892b5554ce2e15fd5f1cac5347df2eafd2a8d5f1aa8746b9403915da6d418c0b5a3aa8e09d6b65f9a49c3b7a5728e9baf95471404fdf64eb05da5f704dbad60ac9ac106cab2873fb1bc9023ad95c24852337a703d9cc04d6df7de594c3b2e4fb9f2996e0418ec8698a4c087c14a2687717f97e228e75afe295caae2f16513f47a45b4124a7c5ebacbacc562951233bf89f43ff85b703ec77f168c2278fbe6e57a0e7192125f4642d73f2f227d806287081bd30149b9d44fdb90029667622f9925b7826bd0343bc537c66e660f174b447860e1bb8846c3edcb639ebd213a4695f9cb471e188db7a859fcf3abae49569e676dec857b897627cb0bc1155ad6d45282d430176fde4262da2d5f41ff890ceb319d73dda804738456f30a3d68da41554d4cede62aa8549b24e211e76768e6b17379f842a24a449a0ba3ea73cfc72624b5afd118fd7e76a7c6b5bbfa7a6b6c97b97dea52decd51cf35a8e277140ffb2748777a1e3cc3211f3c12be099d0316f45023da6cd200339a718c72a5ca172903922e59648d08dc67f173788363c26e5df406391f107552925ba91b9e569f38101f5eef9a52d201288372abf6532beb4af19fa6d81eaf473d40896dbf4deac0f35c63bd1e129147c76e7aa8d0ef921631f55a7436411079f1bcc7b98714ac2c13b5e7326e60d918db1f05ffb19da767a95bb141a84c4b73664ccebf844f3601f7c853f009b21becba11af3106f1de5827b14e9fac84b2cbf16d18c045622acb260024768e8acc4c0ae2c0bd5f60a98023828cdec18ed8dc298a306c38d1ece01509f3265b5f8cbf441f0525097e8b48234bf69f65cf402c7540a023ed231ef95b222a900ea4bfaeec02c6d8b3b01648ad7a165237ca6b557b1ce287b0ea137f4ef54534070ee793695a9078ec89bcea389956878614ccbf917b61f8427b7cda870fdd92d2d297154262fc65f28ff1a54b2651afff12d6f36ee8c906107bbda399ce5e2cf0a430ad0dd86520841757126bad725bf1593c7959f16221894f5852ddad3172fef866b3321755491fd44fba009b42ec0b6c4fb9e901d7eb3b8acf70e94911f54c538bd0559c5740042b6df4a07c3e00bba0934d92a684b39592a576331e5a44672a227ccef3e595ffa1146ac1dcee0a70baa9acfd5c132b361b5ceb519984b0ee00cd2124aa8acb50c9e574fb19bd99c8fef5407faeedb28b796848bb372beb3f5bde55ed2cb140b60a53bba2df471f330208b09ffb8eda04315a06d693aa53d9bff8939ef6f3a68de6e1975f79f50b3d484665e4ee71124ed794be3a2baa7b5b918e62a095bc5d46e401a0979641fe465640e8d4d43eeba9d0cac76c7b86d22375123b988585e58f86566fd190d868eca08aa1e66932d6d3b14ecad3efd9f8cfcf2696ed42eadfa642324d941602cbaebb8639a00a17542afda32117051e4fbf243dfd255a559c49ac37c265827ba70b0bc618882336f43e1a6a729c57be478008cae6c74840bbe828c976ac628d7b6015bcb705612c277bac0727da645480a0e14fdc497956aef05c89d30f22c2c96c6dfc9dae30617e6206fbd957975b8ba0524f563289e1f5f09bdb6fd46fa6117e78e854f91d71699fcfcadfaa7d4db8fcb04bed08d68d11677b5085b295c1d414cb12456c84c669737af6c33992a5a9149fc7f9330bb291d38f6bed10318081dde8fd178f02eb0e8b7d022c8b63fdcc867546035775fcf7b32c8fee83df7cbb28372b23c71459b9566a7f64165da0a3d0e538a3dcc1b6a384f75f0263dc10e0924a0ef2ab459d0a52b7c112710c58cf72442253396b8a25d7644be166c3e7828aa62b1ca1f32f620ed969b021ec609fe926958a03cff21f08f7c8d3d3235b219fb0020a51b97b60f963ebb58f7a62a5b41104c0b28b58cfc81668825f87064e401c263421152b8790dbc99b3032c9615187f29fcc1a58e86364ad45524b5358fa2f0a3296729a3663a585e9aa922f534fefd16fb6f96cd9895709c5520cdcd24c8d107e387e520de055a3296544ef1c1ddd43b919a4ff139861f06ae5280d5aa5aaeb8f7d74ed6ea56093c2e697a30c29c4ac145aa99a372f1a03ae72495f52a40cfddedc12b6e9115aea5ea516c5a4223a8d0a0073c8b4abe3c6188fdd6d4ab627c9f4eab468fdc2a91945274ed18465a368f291a0050c9d638a31944091b35a8fd26a1ff65e2d17dfa32ef3ac412d8293b276849ad9af71fdf272363f771d0fa99996e24510e7bf731a7480cbbefff7801c0e5fd0a13dd8278162ec1687f85409a203e82d2bcdf7e7d1ae5509857c42fce80299fe06182e74a97c0c624ed5b6246e59781af9407fb28b34f7024f42d36eb92bb95f72cee379ed363daf2625b48e60d0489b23dfa57789c0dd2276b4575a01c2349171d2a58bcf29e659b868cdac1c30a02a160c078b6faa7e0696711d43447ea2108db3d34ec1bf9cfe802f601212d335445a4624829f8a600b18e9b3cf13a9787910f2fb27676fd809e7ea1a34c7306e766b2e7ae1bbb919cc888ea931d1eb2e27c6109b9a12c31e188a196a98bbe0b24cc315791d26ef01b77fe06c3011ac39a8f78d233b7651e586d14dcfc2636cb713ecabadb97374ce58498f8b2e557531793fd9207fe484a4e147f7b826502cd3785251973b23e2b62b7fdc74a10fce9c04f97511dbffe3f2c46887c25904b99df69e97b416bac18fadad67b71cc320eff8def185d41ae8558cbdae6ccee38b8cfb2bfe92d0aa99815b3ca1d115f21493b13adeeafce81a23c6b1bc15fc8f2b171284e6a1fd65c351b0c82b31112f022ddaa78dcfbac9f203eeef415c566a00c2c933f06ff18ee7674aba548592dc8214b1af8e929242f87c81b0cebe8106b5267ba39c5b51987e38858dce1d1f8d0cfee2bd61d217e5a5d41bb0c4aaf0e7b0a8c66e5b0291e4d05bfddcf8861bb31b32ea5ba80cb02472c11969b3b02a7f7bc025feace44726b6382012544f1bd1256744f4b1b0ff81f7b9f7462c5c92507f1316df228ec5c0786378b871e69479c3e26f232f5d6a709d3551d08f0ecced52f8158a2c40a234af448449c1cb1a1f6f5ae56171606582ebb9a5836c454eb86015ae7a4ac87105b371bf40d49b1134a037243a0878953b5bbd6ef944ae7c345ec24e4a0e8496b62d71a6381aa52e5bdeedc81784f45e0c75b72a8c9898ea0387a47153d7e3a7c895aab58a1497a5e794052d7457624478c24d44c7e8932c887322b422478418af64a389c152d12c7a6803e0fb0050dcf2b9d65a35a53b9845b9c3835fddd45dfd12e28f8845e03686b3707ef6003e7c1cd4f8d7406ee0d1cdc41d7b56fb630c1438fe33196e53389f1ec1540fe789c6599c0b589296214d831a86e89220ae97974f4d112f4c98c726027d0c9316d1303b87a43a86cb8b800835a677abfe1584e8be55a624612f56bdf71a054a2e834e35105a19a77f7dfdbf9dd2850ee44658ab0eae6e833c855bb9650eda7f8f4e74d8de73526f12773b2bcbb1bd35639f8730d8cdd6d64f496abae4e1f8cdc96148894aa691683515bcdf37ba6caa0cbf953c752a7b9819e9f834ff39ec8f6d8a3dd8dd5a431d47c7f74c7a633ff73ff507009c5ac9431cc588ba0c6d226edc17c94a0f14d3e8db0c7ef60c3293878dfe513f96b54c61c88a90aca4f246d6a5988f5f785ce0655f51b85e55af03e5772a083bfcf0816ebd97a4af416fa6414a9ad47b7198e51d55463807ef4f0d9b7c06a0a84762e4e46c8b39147a4bdd594b8d4d40b36f5e6b4d48726551890d040d229ee70ea3034d45b3c28eb80d686918fe6e219636b8f9b7e6fc08f4e3bed9bafc778aab274913e9cfd570732ab3fb434c9ba0928581232580495571e56f6705f2af05b56642c2b93df65c443a6caa5b167a4040d2438206d2cefd3114ab466eb3c9eaa5e66cf4447c89c493a2eee0b0ea6e7329b37c90ec2d0142bae7fef265ae3c9c053e44031c0a142bf9faa728e5170cdba59fa8da361d94d887d5d6f58b409bbc4bd4548990653a04dfb841fd784ac9cc4cfd34c88512de212074dfba30295badf22f1af2522c5fe1cd423bd8eae429d7a862bcd649ab61bf0d3b55daf4b6f0f390c503d7c1bdea453b5ef145bd8191802056bd9e0455a404b6afe5b25977f02f902caba46f988d91b2350ebe4091b5584d4f938a45803984a5291beadeeadda488dc7ed2dc4aae69ca8ae0bd4492f9b297c3fb257de986c1615d44dee59e1e14d34af9fd7852b13fdcb713dd1a03d341884a30ea1dc0104d63a31d291df035d317fea98ec44f5a86715014783172e667a748f162c5c26a8b34a0f133d89fb971bf6e0a01507efed010cc7f194b5e87a77d56a909d65efa0d5ccd6da9b5eb1d73422f97ffad8012af43a2905a98354b8362e9c459f0044336348eded53660d65a38a9efc42be13a6672790496d875a67e0078dfdd8340dab8547be140ca9f88891b635e195c20daa8359658785cbe3d09ce8a580f009324e6550b0196e305889262f28f49dead77e6f5a0e859c57d53c935a4c9590879b6528eb2bc3230217b0897cddfeff405a6a54b2f50c58311af1ede4ea0660b73037f9a097d9d0271b45e325bec666cc7cb65ae780e361639838d10fe79907a0da0efef85d2420a84e905bb33116789526a9a88319d460f539586762ab172e4a7f305f7ae36cb88c96d91aada0b4dda3418c670e27a5fdede39bd8659e477cbe08e645af927843dbdd67489b72693efeb3a7be0e121fdf5580474ca028f39a035e78d81dd212679d0a830c050ffd43af6642d60d410aaf34f7a5ea9cb2e12f21672e3f4e0c00ccdb05758e74df3893bd40a5d7921e2e149330fddbe0a2dae4210d50a3caa60b1b9db685f7704ae2d7302b18e8261052b779139747f462a6610a37252b170afbfce905fb6f7fb8c2b6100ee231507f403fee88ba5561580d4de4cdf600bf9e9816c9da1e1d2b91a1d966d04cdb98d3be55fb77af2daeeed750b8b60b494accaa12441d372afb3d47e7395b9e0e867595a1a6c8bff8638bcb138ddcac2f3efbf89762b68ebd77247c89929620f1a3cb8dcaf9632fde0996b33e6b2621da25924b4e2c8d6bff28ae0867786919ad763e6d79fc304a06277955795a7cb17186fb6bdfa98a16189544b228f3bcd3698737ff55b6185799459b796a63c6a61cea9d20f1e296d62f474c43750b77944e5f1c09072f019dbeeb64e9bc8dec4605d8e0322cdd97f56cc43084f5c983a584855654366fd5659ea23c6c15e1d7da51d82c683aa477b9f896563a5134c64e32814ea88b7f7af760f18bc91e656da92b72e98bc03f1c6bfb442830305529d681dc6bccae66da9b2e61b9c97e2397fdb92f7f6369b470529c570c2d3b329487981d148a462cdb992d792e34dd233e1c239657b8da0d59b804566cf81ad5f0a7a0ccb3a8fbda673887c153d2e56c484f9230d752be52c1e35bc9af5a7446237fc072afef777665c264c18e6a3c059fde2e8368f9bb898f1cc8393d1bf18b1757219670275f0bbc7deb0248c68af929111e19737479bcabab732d7e033aaeb277eac05e185e9e56b2450beaac784dd0308b7a5e8ca1f2fcd8852ddad9f7b7de264478e1891a391aa89964dae5ad0b7a829c2c9209db346ceb26c1b967cfac82ad574761443be3f0a910968239d23b11507ab978b3ce89e22b7d7283736b9786544ab4460f6aa5c0fbd228496f8fe37ce24ca9775123f947e2b3c7a0c6737fd1634548f8b34f8672e706a296518b0da3803b82f6ad828c8156ef4978288e6d4d227289dff8918eefb5d58dd3a56fc06e726fce5f8d914b79cf5a7e73616468e1d9f70163a5d8c51dad666f6734e205c5ff0f1419bafb3d17971cf0fa389e7875cffc38ed84ce34e517e2d3bac68de3907143dd8cfc666a44f55c277376e4a5f24daab5e35b19e22f3a703e34231862b70e35b0201a7bdbe63042aa48e3ddf83e9b2800aff361d7e45f393a3d122a8a221f0a153ddee197e691f801df47327842019fa1b7144f1ceace644e3d5c6b64baebed944b0e40a62d60a3b4a26a8b2ee6c7372065858ab82bcf1a039cc985f765bc04b6b2734211a2e56e4bf7148e20133417062010bbb38eaa83dfc2211d4b0cd87702dad58ddf2c677f4f480ce658af9168db4f7b8a16faa6c66c172cde6998886f012cfcc918b530fe48fc1b39dea32651255c8f9ee8590c0c3204b26d58ef1414390eaf9fc5248614bc7b0930b8d83bfb6eae14a03192247cb8ef7a7520fbc48d34e9b8b6ed61b2e9352d9e72f035188e3dadd237f98d363f86414d9ccaa2e0037a26ddb89853fba43a7aa1a88ea105311bc1910c49328a7c2463f38a5dceaf9d912be74acee4ab6d54cadc799806490c8f5218c72869685c1bbb34e8e1667a8403629d1698fb096e0985158e184b2d4821c8300f9f1a1707f1b3d85e5f5289df5831c9c4fd805ccce413158e1558f90d598ba18cb52de0a431b2a693dd7a24d7160231fc065cedb26adca4229815f582c00333e7728a0b5b601f673066c69394c73c9e65ba750446254989f2a86a68d0dd99adc8de19e0560864e3dcff1e1d3df247d9a721b4e8b09cc08ea54d3f9c1e38b3d9d602c3a6bab0e8e240b26a0cfa208ba76b4301e31957aa79e38f7cd7955abb7dbae56ea7b2e1132c048692a6f5d870d35929453ba9df7013567709625dca17621c8f032963224d88cf847e3453a25e2318da663987bb7824a40cce859d103150a2096b75f8fbfec049b216fd3f06bd61515e4e25dc732c747557b3877eb56f0ff75a8cd397f48e9a1b1a434bdf8df553abbee347cf90f3ca725ea1b227403b66c18a508a699666dfedc4eb645bbe6ec2cf010fe6899934f0422b7e4cc039fc1ea9a29ee49568ec5766b6f791dc229075642fb94c311659ac8ec6349e732919ff56a95d2743f389c92ffa501a8a3fc4361351c9bff08fc9c7fe35a9f06697fcd171a7779c9dbda5fef098dc478ca070cb846d2688ee8dec093982c78ac10b0c5ca1a5d38bc850a9bf509685600bcafefd5e8ebaef52972a39e8b574b3ad0db1688fa9593cef34fbd2f7fe32ac2e47d49449b96c3b4536eb21b2d49ab4522653bce2bef1f638ef05ff8ed8cb741e9d5c58eff824b6eef1978740e920d5d7dd5a2143e98303cb0b2e10bd2a37000257fc11f552caa67650963439fbee5e64bb2f5f5a34f7a9d110ddcb2bfe609803fa1e8606d0475404db50f04613ec972347383ecea6353172847cfa815b2d8449102980c8788108c11b2e820f3802c83a09de86484726e3d5f17263664a860bfb2185c7e354610ad49796b43b721838d18989fe6f20b00623de27cf83d1537741b39923006ccfa166d7f14c73c916301150a26fec38bce483d4030580fb7c0e4450cf5cc7c6b4169f64a8135e46e4f821e58fa1669833c31e5a6ecf04cdea192c7f8e39df6cf6b1a6c521d1a5f06ad82ad0ba5c8646fbec1cf8d0f3b75183df21c93f83f1667fbaa482c64eefd09118549a8968f44cfea7a436913a428e30aa4ab44802a4ba3579c024fe51e5ec3fffc6ca668c57b2223bde9d196c4d8cdac0cfca127ea1720236233230a42f4e5dd6a9e8b891577e51f2f3b4d0517f54676ad99305bf8f96cd38f434c60d74fed4e5247ce7409dba72120b031fb081edc1f09096898c172c7ec85cb327555c028a74600f5b5fd16d6de44d136c53fa5fce9a1b5b07afe13efc2e8336bb44916469cb85287bb69ba02ab0e26b200093b378b0a26ae5ee94d331b29045eaa1b82c5832ba50b10fa15a90bef294a480f4f0a5794f4c8d12d8f4049cac681c367c603ef0270e65308ea38955a4145f9bc41e3f3e488865e357a85d33fe28b9c9820a054ef5eafde20883fdbe2075b818ac462d47b5a6d728b6f724c0af0c2923753194944c6ce2edb703d2428f3e19c1536e57dcbf2e4aaba0e9418be69dd40cfbded30a531d7c19452af12719f8e95c62a1a5458ea92632bb879ddccc61234bbc18aaf73384332e570142b5e52a8fb280e4ffc9499fd286afd81efb89e27caa62e701a5132a70f3988ead361c5c758b56414db21896b86f25e4ad2f44a848ef9253c05a1c959931addb1bf0e51702af8bbf774624183fb4c5b433c22539f0e3f665cf5f764f18b041f0722c69e19ee5c86665ce95accf1f364f96fa551fda4e362416fc48e05338fad39c32cf45b1f6b53f009193dbd07621bdc020fce270f8fa997e78baceb491808e7f4a40c8a3abf9512ed9452baa822d07977b410819a8e9caed1df6a3a1827c2905bce4f4ddca3da5d8ecd326c60b033405554d1b3c28abc14c3121e684d596aa15cfe250c51b2841e71366548ad94a4cf1f448a3433ee98684fd6620c450751b96cd6364c468632f4196263c5fb3ab5842a1592695b34b1f7bc9ebd8c9bcc28372fc8eb943779577d0bd3a66ae62ce5fe2a4a82e9a4e78961bddd896fbe024eb90a58cd6a811671f7ad0ca5addaf5a69b8455e42bad919f34b8056e3c286445ad80f84435cfe8131291600a1565ff87faccca3eb5d1ad53cf2fb8d458674c9d832849f89c8068ab4c4d802c27f3d4fa7a6809eafebdb557bfa96a446af735c6e864a052f53f12bb1335ef845c21008eb8eab7819cce240b74a99c36ea54ba522bcaaddbd64860b2f5ef00bb3869fca534c9358ae68f73ff9ca4c1444d0c44bfebcec4fbc658ed3362dd6629232b33ee6c98067f828e4fa4862f7bc5099a6f70a6e5885b3bdd22acf8857276d30140bacebbccd7e727018acfae1e61a66b8504dbb36a42ad417b90057bd7fc9e78adaad9b8eb1c8af62422d7a53b82ba0c3ffcf89cdd7a9122827d3824e9430bfdd53f2c23d3b5f48831fd4ca955a0ab08fab98c26644b9dfcc1d50f1538e2920d41d82461295caa39b58a8d3eff53ffce4fdb14c4913e1a3ca437e8c13953d7239e1651155e4912a7294b17ba9b153ee8a9d2111be6daac6eb40653cd8cff21dd246a4094e533d44cf7cf8ab0ab5cded4832f0f70d7a9bb0f7bd0de7e867d38968f54618440755587bb7844c5b2a3560e86426e87d613cc9b6617f768c83651fc2955325812b61d03fee5e44e53714b130ddcccb574b157aefd5c2d20c4c3245aacfd4174be5e913e1c98c7ded05f047e942ea87e45faf296cc0dee1b0e9c164e64bd0d8eb5d768929ef18ddbebc548adb3e860669c69140f3cbdc8dc0829ae53fb04f4fa9bd8f9ae109094e9f83c5e2cd77aa2f31a743254d9ec3bd8341462e7da75964cc2abdaecfbe68b7d782cdb788955dea832b4e4242e09b59424c4ca968d7f7ff9ece872dbdb73cffafe2f371d541a81fa67939fd99396c4845cb34bdc7e9300865d1757f719c8d106fcbbf787a2391b6e3bb8cc01c533f74d4e787d164840d676a5b0f0cb31464d15f64ba353fe223988216d0f291d31bc437c7cb4f05519405f592de3d4dc7c82ac6d66b0eee2663abcbb48cfac1640920b5958b9e73f7cfc84da16978055ec103ee485b6c4d995bd805bd484274ac107098764c26761fc699bcae3826a58157441de310b826e112087a598c317153389c2694984fd571806188e2d4b0f3d793d69ccf14583fa6902170aee12f8202898da817f6815a940506fa64c47cb8097c9fb333efb66091de0c30e7cea46d610c296527ef24cb315d725a5d90f4bbbe1a88a9372738534903b2022adcf8fb17c859a7ea0aa0f1ef918bf0f4c17fc69f7679c8054648df7707fa2d9f9194f4cdc506b48bcf5d9477a73b0352de849f54975b56c2d44dcbc3f3cbfb7078de202a0c16d630c6c47c70aa68dd9e6f6d0f8486149c9957afe0d4ce0fb2c2163f47d7a4735202783b70839ffcc401fda1ded7498ee2b059d5e653a0ad9bc0f520307b950373286c2b3a5890de01a30f88d4f7eaaf702f6129a5e7718dfe8f9ce7a4bfe8b080ca2afda09684f6dcab2d8ab98970618d3ff812e4394a97235a93fe6b4ba460c0123b176be6842c9c41df0f5438e48b8208a4f86df132b3514763cb4dc6d1fd7c2626e363ef97688b8fae7f6ea94d1598b1f04306b632c9d27e93b812d8786efd2e73c74f5ac592efba2142cf87b3e61462615c783051c1ec28ab2b812aa09b8853ab2df8ce169211edc1c03f781fe8414581a98a089783e86d338e6364516c68bc557c27f49350394e146286249702667fd79306e60cf70e74b448802e93c9e393f91ca27443b5af05a48e6b35261cca3beb83b271b906a566b6c1a02e6f9a43fd1f7531f52fa7ba3bf9adb850d11fb69f46df5852a596f76abf618b0fecc7ce2450ef9e1f5d0fa3189928331fa2f172d36f10be31d8904aa9599008771338cd3013f2b09bd7d6b3c30e65a54aa07b4600ee7fadb45bdde74b0bb6e10febd68749f1e62e11a5e22f65e0ced579d3a57a4e4c93ec86356316775d3bdc7e7c8746957133e128cd1d622595ca8d53445855e410b3454d6e0c1e55d887c26cce34503f1b419189596e932cb7c09380fa7a20ebc2497eb20fbf490e03025a83eac6ef6d777805dc50bc09a1ce1ab0a9fdf4248aebbc605c1f64ddca67156e68d72368480e4107c8bbf10dad603fac7656afa6ea1274b3f4a6e223b08a26c4c69d3506f767025df5a1f4e778f7974f8e0c92f132bfd93f21ad2363e9f69f264345e210a20a24d00c0aaddf291a8a619a27844c8b7a53cb8c3a0ee59c33e65a87d514cd73801028b5ff043de95280a941b06ffe1dcc4a21dc588bf0f2c765283b58b28690502d2d9786e148df25e1f02cae3a500f3c2607ba0c82cd133c825a07d3a4842102e2a75baa2c49341d15fe0229cd8a8a534f46ce60dbc5261aa7b69250d20c4f1f995da870cd880fc2849b6c2a10f4b5972da6bf5b7e1e54e73b0685d62469412eb91827e2ac4d999b978f12b7ebd5b99228ee36055420c42da610876e82e121b7aaa08007b2e0f930b4a19bdb4677bdcca9e8da6743159f734f9d411fd4be1442d3bd5ae7c5885809459bb09b0920eacc165a548834430c42a0745bf1024644589e375d8bce8fdeafb043f8011c19681ad90d4b7110f33421005f7cecf4c2d98072d532fab63bb2a95f621c1467aa5e3e58c96828bd6e3e98d7244c199279fb43b760813c63d5fd7fb8bfc3dcd21af4c0fd5553b725f9532f8e8c757fc5b5d028d6a1f15abfa4e6ba2524966246b354292f7bb3252edf9b6f8b5f9c2673bc83b7355d2b5bb1f296e10c573cada9bba3015501307bc2663ddf37656c1785d83a783d5fd7472005357cd7215ec5e57b0cced9b073c0c8d86208fa658a59e44e1df4566e9c27f627ea13ed4aa4b3e03bb51a225024fc287b31703d29a1f4766956b2e95122021a9ddd2fb69ab57e8443c66c98a9eb38ca98d3a1667757f125700a3a5cd112e074b237579ad93a2eb7da684da3826e7b96766f23df185457d8aa641519b614c9ecad201401cedacc6349c244aba558cd745f2e7c0ed4412e776089ca86c8cfc66ad5bfed53423e5f6fd9fed918d84f364c9938365d72c67fe9dba4e10dceecded6743d6af8fd0eefc3cf419452e4fbbf066db4d833bc8a511860dbe31592121a18d0c11359c7f1854776b6fec191066f8a23caebf77836aceb3a565705daea8018317471dc688f27e315829ecea6154fc003a4f6136f71984aaf3ec5476f1c1bbfe17e0beaa791e07ff3d0fcdfedd36590556781ee69e41e1d09bbb542194ff0f3270669ec4d9fb50359c6a15e2ce5bbe3603e15f02e37454c8ef4b05e9f2b099d4a3414482260b0578f8c14b12cf6599f6d4f3981851116c087123d03cb5a6da693319368ee7dd863dd4bdd42b5ac45aec4c27509371a975f3b3ce599638124f44a256eb2799d35108b2b85778faf89f6adc051f00dfbd212f49b2f88304b3771b7382e908b69d044e05393ba81a82d617071569ecc5ccfc2f857a339fa5dad0321905a69eb89b0e825ec8f72543f37d654fc0b7c3fe495559197c91289628e94d2587aa462a4dde5a31d0206d01bb13ca289f8f02d3c2cb504832a7ca400e20b10b617abb86260219f0f73e0bde5a27da342a6635d0c9cc89c454de015dfb25024d2b8e5b56d408664e96a67e34413809c4d9c3e98fbed78a002baa4a2a8054b56d5e5ba206a85fb39d46f030ae10b2dd8d262e7a6b128ab57e5fa321403e4e4ede72692c304386765f80b1cf963926c9efa81c84fd7554b0a1394f032975603332f04d564e160b4317cc51a7973b02535ec80475b157a3f02b71048c60d63906ed606ebcca905c9e589266652b96e40e6d1e7ce9112a16f84f7f7a1960c1373e703b53dc3052f8ec946b5664cdcd3a5f9d13fc4ba77d1c3dbfbd0626c3d6f94e6df9731119de7eb24dcfa832e85e83db6130f919eeb13234eec23f50e487edbb29236307d1834c840727d25c25bb4ee64c0df9c05176e7724f279c144d4493195431aa3d01e1f0d6331c7b5ce073fa14dff384fb7a2eaa7a634582ed889d67cd51bc9f0d259afa2d6415f991b30913fb7f9a0117b358f9b1cdb4ba490112fa6bb41cd814b6eec6fe1c9cd3b717fb3aeebd6a14b1b78663cce0ed78b36115c958fddaebc0308de5dcbf19a02989cacd831bdc3635d12767003f6864b903463339919f20bc2cd8e52dee34d55572e84a3d0d68dc20aacc72004bbdf4c671f4e66201b23d54f65033760c46e9e77dd43f9124a87d0eaed62351a846af7827d25186e0bc881737945f59abf8544c153f2c13d4139f5c47e4e958b79b0b2abf4ee30c9126a79f6b15d72d4f91baffa3599e39ae22c9a6106932a9fc438e6a82cb3967a589024a0b45298569db746ed2e3e467156e7258a2e3adaa08a8afc42cf7b32c904c2ea382b2c4e67d1e27361e4ebd40ac5f200059e4a8fd4f62f5a41824fecfd3e893388bdf47b50bd239e1dffa774ac56d6919afdcb30852dae6a6def36ac60306b675613b1095a8b022dea287b0ea1311a4213f4c6a5f95a8f938ebe385a38fff2ee6bd46bdfca60078990076d8b2f7f467a372a41d678a35b3c6b975ddeced6a6318fa92ae5eb67bb1ad74388d19f68e3a0cd4847ab4c3099cfcd20ae206adb0e96893af70304c5a5488784d1c93913781e9ef5dd0cbc2ad1b37c0432085436b286232ed9215ca54e7c6774525b44a98d5b72da0de10fb98c5040e9f17fd3101a6a232ed9273c2d3c1c40b912700a51aabf109ede128e04500ee178f46b3091cfa852e1fefdec85f992dafb19eed13458b242ea59878134a855265842b6b4e058aa78f0508cb4d60d44fde370bfe2791e9cce6684283070198dd831e346a4263dd65d02d7badc48fe9c71181ec9854985e57db969dee2e12d1ebfade0054b8a0796c8c09c70ab025600fd432bf601cc14f5178c108fe0af6b70a37240d9f0353d5183d1a6976a2d9cda6b0ca02ca029533564867f2473015beb4c280bacda4e676e54dffd1562f05991811a8455a889ca0b2c50c086e1ff86f882784a6552fe0d57048faad4d874148d0816df58621302e03691db9b72d373fd0c0a04eca06db8735b8bb4ba17e05536c7a7b91d16f0821d4bf2d64d70a2aa64b38541290cc2ef2a207b23b1665da5f488761b8c0c47d228331bbb832197b4933f910904de263be41d0600a00c138a2f112b0c8d8b417b6bb6b39225cfd718f478d765655dc0230918d5526e52298e4f2b6d9508dc06044c9b63611ac08d5eed25ff5c34d2b92f01da9021 +MD = c95befe0e07f08432e37856b112603f5bbc24ae271395e617ed2315e + +Len = 96272 +Msg = d8dfc4174b9b97cbe3ed8c6cc53ef84715ea5936544544c7eddc9e9a0afd0f0bac79b411fba81466dbae56e9bffdb140c21b23c1f4a66693f1952010b9c05a6ebba3339f335ed575b601a90a0b07c75f3d20b143ee344077eea4de0f0dd3f61b2de5a9879bc6c3409f6eed98516424ecaf816984edf7baba0c92425fae3dcd5a29c77e92dae7c40fbc7e8a5c381dae2f3fc7b54b97f8bda672e5b2c74506c573d7d21a8899cac12935b8e81b69394f6f1679fc62943e2f81492898117a37c8ad608de6317f75a3d733a56fa08cc0eef65b1fa58f8dd1fa94b8e05b03f4d6bd52ec80485535f25061decb88b248bb720a37421a9b2aba0427e89763665cee8ba8a234a9bb6249b20f5db499184531c5f4d269c24e1200378201d4180159841cf8ab30722caf80b028d9e80c9b2c2acefc531c056feeab79ec2a20e29e94a257892ffc0970c3a131f679ed4703a5ae7569e3e34bc865c4b4af8b022903b44f24a55521d84f48b31fbf664db41857c6a285a947fc1f2051cf114d0255f962946b9245264591e3bf61ccc790b9a1eb793d96cecf803dc65db25b98a8ce48467814992893bafd3eccdf65c53cc06808d02ee5790440ea00ed45d4937dfcb80703080226f19e5c01e281d288db303357d15dbad36ca2ed760b70c6670848114e3d2d1566c75976d4092f5a37f471cb8086b35d04910f10cfbe1b773bd1181ac22f6c1a119d53135d4ad146fa10ebf82af7161533fbf019b40f2e303861d59c0ce0ae584efcf3fb47ac4fdefbb60681fd2b6f2b8830abd1cc049139863fe860d358d918466aa3f53838916a5f6e2a30a32aa7e72cbaaa00c0a82cda4cf3b72bc0a0d6a22071cbcbd8f57f3251c1bfcbc1fca4914721536e3700e75bb306acc87bbf8e3e0599d143d1eb027ef7352d1b02aa507100eb10e2da16ab03e2ff2efdabbde8341d691e26c82200957954dce80b3a92cf80a2482651f15e1c0166a494f8a3cbcb8f691a3b68a362c000a634fa87b751f2efcd62004399eaec3ac478530c78214c84212d4c56751147b4b29e181c26772374f5c839581735bcb3a011038c44d1ff231ac01f3da0f472bc00800c7291ebaa37a1e199397229d39482d76c230fc32c95db397ec32df2884018439c32ff95cf615915e78eb2ad7b06f2325577e2df1b01ec022f9023f5d36a83509104795dda1aa6ccedfee0a8fa31798a8730c40d1490d681fa4d8ae49960c80eb28f062b12890e6e71320204993c9e47cbf7be355e6a2020a9a26aa6234a6fe4c97caee7c0d71b633cd223a8a04fead1e774d73f42b652460236cc25b951003c9c7279792c2b55141685487c5794e491a34e1713089df55acfb2b748a39d047df51a70c99eae43e7c6f37b68053014edc92d8699f84690c6d6bd34f72855030e9a1c9ac05e886d4516c5c354f44e024e1fbb2dba59d9abf1e0004a1a91a18359531f0044b3e05b97cca329286a14371d6f9d135c7580ce43b423019a26aa0ec5eacba83ee7de9643b134b3ccb0aa3ac07f7e4068926182241ccd615d2f982bba25ca9c9740aca5b38d216b280e3993a11704bdc7f9a44efcdea6734cf49363a0cec1e435076f104d28115925cbe9cb2601d7915ff272bb33c3573e4fbdc23ce0ab5b86028352607b49ad84a931e169b904a0c41ac4f350319388ca4fd14d40e0853e8ce5fe7a1ca4ba9df49d864af5c1e7075fdfb94e955f16e02032795df7092312fdc5be12cc2f4188b1ea134bf7a673b3699517ac1223130847e2fd1ae8c34f80e28c0c40f886a717c476200df8cf704dea26273450e654a84745a5ab9b77cf2f4221302c2910b3f1342bf5b880a6a67ceb79310fd6119f672945b838988b6cc9256c7200e6352fbe09f0d9731592dce972767d642c0abdedf4c980eb6869eef394551ae1b85de1284bac166641fbdc3c8a05525cdb3b76e3b0b843ea92771d5795c46ff926f093d50349f2ba8b496c1c380efa1f6a0a91f166fc4a5d9e1fc19d33a1ba70b8560b6d39aeb6977be555318679bbd461e1d8be1d7cdd6d14c8a16d73d4436ef6f81299f3c3a9249a355e247b2edea3492711f3dd2044417dd9866d5f45521a693c6f013b70158a6fa2519d1f16aab5a8440537aed0c60361bc3848fedd2f9c988bec4c189d40f08395f5437b17693209a07c339974acd846d87fa45882221d0b4e4f229332737f5c7411bf961a6142f1a33e8fa5f43feab695232a761d72c54beb612db217f65f84a86eb87908dc0beab512f2db38c461385beb815f9768bbdfccea127f3511b7839ad4d72ac720b87b3ec104412986655592a0511bd64c284f57b27c02720cafdfb10ac4b341756f2da6146ee2adcc1c93a20a44b3c4663324f6801142b72e712254da261b5c25588655d0d8c3adddb17df4f1002e48fd05e5101d7947edc122d3ed0aa66b02779d10b3c0e9ee12024a98ee1d2d94495ac51a0c525d19fa0bed7be363ebaa1ab2635329ab4a6ac283106ef95674eeb1c69c4c54e565c1c855f8a19ead9ee08c1fd5d61d58a33fa7a82a867e637d436787b2024f9e38463de66bcd86b0661640061821f8909b76a8b9c068e30def9b53e52ec465477fb043086f880333ec531daf57bc231bda15acfdfc9d921c72fe5d2a381afea6e107c1012c587d00d79f0d61b83004c109279dbd04acf158b0756d9cfa8d828507549e1ac9c85cddd002f8656303054ad0b16241001d6a884e076b8599a459aa989fc49b6e5d08937f85c40481c08d7dd6bde3d119796376f7bd3f2b40e8ecdd3dee1acc45a1e9ea8b2f5a833aec0323c45208b5764646e8519dd1d715dfa1e89e4b88f4731b67a99d09a22db511d1044179b934410f7aa704b209d04013e19262bdf65d2353eb9a5c1984491bb65ee8f639de979f59677bb901d060ea0c15a2324d4c4d7bd2db837169e91e936412978a9a5f27baae752b18940ccd3b50a3e1b501720da31fa12d8301b7f546a255d8a6a42429ba950c81c872a7605a69f51794e351e5c4c2a3603be7d8165cf88f75f26015e8c797944372a3876170df710b76fbcf1c06444be3412532c9fcee283415d51bab073b753abd309618a4388187044fd5fc902c00803cc3af564e0d88deb80b1cb9a509172e5220bacc1ffe8c51e6ea4ccb8b0229fdd4c736047bdc183b820b015bc789e3e7d87bddc708b8fa32c3d11ad21e4f3023b23bae1dabe43e121cdcb3d996443f2cf849e64f88ef32f2430e295972997cba7e2601e705ab632c2d86197b39c194c65a93bdadc72a9e590fa75fa8ae6b758adf9116abb2bbf0525e121a89d8884b7ea5614a29ecf1a52fcfa7a606fb4a835a7e83d5b0da9c4b4a5787a04a9d22ca1a81b9750a20ccaf3b2a13e5bd81c00ef403042640a3d4dedcbfed9207ae167b6298a5269a8a442446c9f5041367547e1e151cf1a138ed10d23f4dd70833ecc5208f2c451f53e06d185454ea51d68f3ba15cd41e1cbf6f48f37eae5995552d0f1a1156bae2a229f079723981bef5f7ad45823395f961e0f0062518fff63b60c319c42c6d2ba0a61631cbabb0a4ed163dd12c423f8045ca6fd4db93b1720f0d48e550b5464274df470708b25f49e574510f040802f994b42d2549285752f6bc06465efa2e6e485cecc5d15676f6069753c5b28dc7ab752792c016dedadf1af6650496010bf841a66b31cda0def37809a9bcded977df11aa066febbe205ea342cde69fd4c72889442e14a5977d886252bdbc2ff5f8dd8fc5f1f870ce121ab929a6b6227b484648be9b3501443cfdecf8f58d4de834ed1800bb244c18985a8232583ac6fc789aa59d1c5e87ad03994085bbf6e1ba1157d4e4ccbb28a49b6529e54b3b34613d6cc9671855e2dcbba6838176c093737962eaf88c85ab780184d4cae78013b28103dca7f7e3b8d94a6ae0728db30a1c535783c4644a7e9eb4ffac6a95d30cf52ba805e220d0b2aa9a2e7de26a97efbd877ec6d1bad1481e9a1ed84cbbfac73423a36ca2fde47759923982587434e95cfc1fdca6f7e3b2fe9d2980f8c3beeb76513c3a6ef5e7b0ee19d5185d1352a1039c82eccc84486448a467cef713e720c49dbb97cf70a0046f19486778afb8beb94eef1fc9c7c805049621e8d0153d1025ef67aa4cd6d81ce679db9631b02fe987faad9d272a2a3d385d9ff60b2f8861a12f899c6d90579f5a21d6cd107f7fca7388058d6d1438b6eee0292131cb8fbb40456994ba04e536d4f881369e82700888e13f1724edb8152d070790c9501bc70b194fbbbc9b4a895be823f66222c94ccbeba365d31c7305feba806d5b26f42c09938339fabd4d3ff7d90638e4c7543d468f789c020b312c67e1dddd6fb5e293429c4c35fcd3b800b0b17022addad78400b608e73a21ba327364670a8e64ada4bf1af4d74b4351768f59aadc44c11bc80146996c01c6d5c0272b631c3f9d1c0687f7c1496e77e1479bb9fc8f31e6e8b252297453e2624c7e8d1f1c3b0bc8f862a219fcb0edd52f1bddb9ad63fdaf06eafa45e1c5625de513ac26d98d794b095f196aec3751c7059b5b42077f2f863c17018427ea0b2069288c29e13d118f17a6f3d0db0321b4296e1f3a500c4fd253e170cc90e964119f6436117d715bfceade38350f3fe504643d318bd131e6fb14f24e0762eaf5995170b1c4f552e0fb49b0f180d111261e7eb0971bd2177b6944efa31ce617472145f3052c910727f2fec4259969a16a6c3f6e5bd49be59683ae8377f36496e10f44963b3099b8b84acfc1dc681f183c556f20859c73c4bfb31954d374248f4bcc16015ab7548f1c6c85501ed43b9e2141d56d1b5da4dc7f614c0abe876d2b0ec183db6aab0bb1dabee818f4c7045aa3983afe27fe74545df3104e41148991b15553cc74f306497aaabfc26529c37549c3667ab0672c55e2d22dc86303beebbcef4d7e7e778d7d8597d4f57ae0c1179b28218abf80130694666b1f2c3c555eb8f93b96931fe87582eded5a3ad54366223033d65b317390fe1792fba4a795142cdae3bfb8d35e5af913d398adf0948d654363058c62921aa54e6906d42dc835a0fa0d9ff77b385472734e58db1afbb2edca7ac05afbbacd1371b9e5c3b434e89cc183de57ffbf8a76742542cd39bffe402b41aecee431d1cfea4a4379252356a9970c25e14738258c7e22fd8a362998e8d07d78ef053f4d611fe4c6ff69dba74ee46f1c9b3bee4c3df90b321afa81a86d1ff9c5c6462e69527a4f165c66a5021410756a8fc42828104da988866c0f5855827c3e5990444f286152dc9806c88f8283e6b7c5c82de18de3c4a8d5731ace2a60cd8bb2c9cb246e3eb7c0bc308e7820a58aad4330469e3c2124390ff9ec327321b553d9db0913a9784469cfcc3de276df28f213e5bb87a67090e43de5cbadb92cfc3ed4ac47416377c280d9c11ef70d978a2e3dced4c65239d151651f006783eb6af6ad26ccd923a3f8ace3f979df6c36760ac7d2d980c8e2af27928ed28759c5c6206c30e2017264b096f35b96c21b25b52dbbdb11e091d5f20fc91c8b35c322da6717b1cfe1d722b0e614cfbcc7a3cb0f4120d0c50b347862b014b0729b4a6a6c70b893dca3da45c1434b3d34168b8f4bebff983d2c3935c7b37a32cede750645e656bd516c0335ab55a28d47d85bdb33d55f1dc1692973e8bf048be829cd5c2d6ffa177667db5a36c520a73a359c168da7484699ea8b998e7db8a108a2d9d5ecb3ab8992b9e91d2a3bcd745854d5a72208c3fb0cd8e7118194a05d757121d9495c71fbef8db5e44e5eb2dae85e8ef8baa1d624635bc64289adc4a779bf2dd10d0f5455d309c8186bd7d6c2317a4f701d1a8caae79aae946e702a685ab4862300765d7f8755a922494d42157cd1a177121aea73ddbe2a6ff784dc866177b339ea399361539ae068b069fcb9118b0b756249fa6890eebf3bee92e2ebd6313c7a9300ffe47e00f65468d30e9838cf16d2d551c3714753f7601941427d0109aa4dc372a7ee52ae724d38327f9939c548f733d74d7749155946403a06262928831c4137956815cddcbaea2f58a35b962c4a4486a160df5b6d562d2536cd98b5524ed6f8d13b1084bd054471a0a0e86a4734d003c616514dbcf6a7a9d85a94d99c4b4a5d614d8bfc9c950fa15f772668231e9ef9c47fe715cd8f756ef6b466bceb7a650d4f88ce5c01d212669e105eb9476e770ea485e9d8288a601d97c55685c645eeb1a3d320cd742417696453d7843b8e23ea6d0f9ec1564d305ec474ab5db613aff06315cb777ef3e451b928dbf288e46a3627044ff5de42add884a9af6b424d6e7399381581a6a743c7a577b02bb5da149ada4e449f48d09e34df4ca8d8f259f4e14c23471475a8f97331289f564ad6e8bd8fd4c5e51d5ecd19dd46dfcb4ea009e385bea857725fd1fc6423f09ccf42af484e7e1aefe4560030877d9c6ddf8a74214bf182732532920b4750eb24cd8531e21d348ae6251f0021e4da27e52c80ff42a6a41b8f168a0347e097d817cc07363406de5ef269219593fc45c75cbde870ef9ebfbdd4ced0ee5939e1fe9c523086e61064df3a36c4862ed8a7c5fa1b2b90cf3c2aae6ad46a19e85a14a6dce968e89f43ae52e717709d9b7fe669e6cdb2278b87ce3678b0c24c9d491a18fe18172607a8a50220918da082f9ecfb495be4fdca88919f26eb3e512010d99c2b68a506c7462f360e2e83588a4f9fc34a4e28d935455c2f9e0c48ef18b73b7a8b5f7a5187263535d975ba8d5c88e909122de88573c81830059b47ed2d4427f94587feceee4ea048a8ee9b07a0acb114c8808bc72d19abe88620a31408c1846282689a47a5c856b7a3228c8dfdc4df2d95d079680b3effa04624c32c51353cfd6988b482549c41caf498f6e91bd75a9ca1a31930b441fa9f702f11fdafa936122371b649a2d048c9c0d842e1a3ed0ca91384d5e6d129862f2ac7f44ecb245ae9d7ab0662376e52fb326bd63e3d0edc9c14f8145409ff8a969c76d4e84dae90caaebc0e95bc7d49a96fd81cc79043b2bccb893f4005caed1df0c31a94dc4fc0fcd02e34acd906141ba2a77a464593765261bebc736d92990c4b362c182010d2c86489e26d35109b99f1615a81030710a6fd1ff4b5e86075abd758733cc3f8ae7692537fa279a3c66b848d234273a66900c8354fcd1e3b6941bcb057ca6a103d4e841673114cc77dd884b33d4f3d7867a8ea873685b82b5d1822c74188bf5f65975f5925835785a829195c10700885f3e58a9e0fa35e383976302397406aed0f9b4ea5ffbf42e42fa76a0f046f7cd6f601d00043f0b76be5a40e4ec2b813c224a07781688fb4edfa97a054811342725642e5373b346ccb4aeae5d02bb961e78aef0275c8b955a7f144e2b3ef230261fdf1f1cb5e3724604e8fdd2f390afc632bd018098806ce1afdf559b5b66863acd1551b4213c08833dadd1df553758d3eed8ae1c60e3ec74e04f12de13eaa0e5abcb88c26c499404bd71acea9e3c0bc80ba678433c329e74cef8185bfefb0ab73a5606cfed888f3b12b8f17d450b4303279ad29d90f8ed71ba7ed89d83244e1007396e253b756496bc08421fd0219925c12a5fa3e5b373fc3137d63b36d2c580710a216acc9cbec837c4113ac61b789046c971cec0deac54d1a7938d90a31b99363cc319175ae8100490d166ad555be3471cbba6b8f7014c0a62833d06f1baca9545c5b8a26c9b3eb0e3252bdc6bdd8f30888fa414791d2249ed3792206b2d853cb99bb2041e2274bb3f6ee309cb5804a191804f89f14a881e9c2355635bee698b0cd7ada2fc288281fa21348bf065e3f8dc10118fdc33de0713d8df566067d81eb3ebf4158317c8b3c7de88f977819dd4acc1927cb643a481d8ca986005346146534b3db24f6ab7bf1d1968c8dd25a29398173af70c046c2d5f6b2916b6de95b04f97e33fcdbbf0026e444c707dec82d42273837549f0a5581c4d09f0e1c0d5eb1d447ce46a65d22c3001bc96e620cf04e078f48dfc92d090a3f2a3753285a24550c36366b202feab16b43192b27cd7a436aa169790558e656ace9e1a1587ab5d6ea75f2d411dd5fd66de33fa4f5b4d40b9696228a1c33f54e563425617512191eb6298ae8410f891b5023c4439369058cd495fb7ad7653dda84348cf947cd5813b87d860e776c71685a2c2f6fcb9315b06bc67db1fc97c6e37d119dd296507b9f37976fb07d9c1ea6d526088f63da0d5da5522f985370994f8af2e1542a468aa97d9fcd35194898bb0739d80d24e8f47dc8619995a699bd08f3ffdee7cb558b18d0be26051418e891398b2550d662d2f71d1a4411bbb93af400621ef4402588d6791b048835b3150fb2477ac041f3afb3eca6b7755b7919fdf94029e1525f88cabfe0ee2646c2271cbc935cc52c4194997d2d7a274e81610a25c48518c9ab94dcec326d470dec27a29d9755c761f4889117d616915c781a02cd13bcff6db0b3f4473b085354da1c889e7dec2ea6b5948303c912194d074dcf395856000517edfa172347b2e1330eb6076aaa62c42cbf578a2ff629e8d50158b1b9d9825b874ad6a512b2cc7ca00613208815cb830011f5f2304b28f68b3e857d5ecfed35a9d371392fd209efc90a8930ffb7d2aad9924583f3987e3fd00c3ee470bfa85c258fb11aa22ed2015525ff81f718dd03614b3087a165928b4d746b2f17321d98a2877f92944e8d79ed5c5e5997be56543d439c44613bcea2a97df4a77aafb3b0c8c1c4e72dbba42038b98c010733a366188273035ca0994c8d30c191c2bed26e4147666294fc7dbedf4372c170ff2e0198119b0cb91f5b50a193bb3816e7e298b2214f4bf299821b8902f8e0faa85dec65f7fea7a13d7d778cb1c8e39fb34bf7c65565ea6e1b19fedfff07a8ccb89af1283c821c3c846589f78fd1d985a9765323ed92863109ac308841855f0fb74cd689e911b2b17b7c4e8937bf63ef52c97471f0bc6962eba27a2dd05c4eea2bda642f0592b329aa2a8debb078c90534ad215967cdd92a4a63a276b572bd869eae63c398ec65cb9ad810c402e653f1d98b248259ac1fb1ac57700af7b1f40a972f9becab0911c0d2ec9dbd36f049d8c9c94396ce41831e9ce6ae929eff3a9f9fc5d45344d0fe2fdad0fd7e527df2e58ad1473acf744c999f7822b5b346d96d3dd8d5a06e2976413beaf8ae6177973da609f718622dc44c3f75951c3d6d179bf9d0677a2efcbf1e7ca455f568c5800ba5db1dd89254315d0345d06f445c3d525b1652898e3122ed2565defd714ff5750dae7f2264d1dcf473509855d1fb92b9ec105e7695b1e7d7bf94596b83fd3ea368e9e79ce28c0d3a18feb876ea3260f9332752e94b625603d19b8feaa7b7a2be3df61bf1136e0c5679b8f67b9ae9ed39b8c3f889b92db799e3e14820e4656aee153ce3c7ff5d20711fe41c0ce60883a2044d16ffe6fa51c37dce4bb542efdf5a772309c7af4292b390ecf0d0d877685c9e2b75f2dbb26da728ca6252c93d462beb1353982a06aa4356363b70771ee48e0ec7dd0b9e3b536d6b3d539f8237ea88f9748be2788fb04af92cc493cbe54160dd8816f2397f4b3ecf8fe74374c6129a2aae774fa2c7ecefff3455e2ddb5c5fb92d5e74eb3659d42db28e6e7a7d005890529e085af95a65bf2b8b405b474ba87b51819c815d490a017711832243e0c7c134e8d2ca7e025b5591faaa3580c662bcfb8740766b66d810bd045cdf2f96f9bda8348ed9392b226bdd1ff64d2631210671dc0b4aef27c0c40ae345f19e8760fe431d7707a9295d6a5367bf22963055e05afc576f670056a3d74ae91a2f26900b9c1035c64c816ec99b6e6f265f3893c31d64bf6451850c28a887b0b94018f95df999459591c7d9121b9070f8ffae4d274fa19dba3d2a53db0546374f7fc31f7e0235211627611ecc6a7a7efae625f495583f8ce18864b03363e2e74d4ca974e44c6052986be1b260fe88e3aca1242c95dd9b077ad1c8b3ba4b0a3b5325509c191e9744ccedce36685e48499ecf2d5791264097d697cad0d83118bdc1984cf7851f6682040b8b1d5ae0351b31aea6082fe8ccb89558ef9a259c9ae94913f309c0b54a94de73bcd9b15aebc325ee22a0ca9babd42773bb622b140d483a36e7555486bff7cc84b7edf3f4b8fbbc0c27c3e9a54a851d9692eb510ddc55156fae7ca8fa33255edd10ec9b64490f947729e4059c4545d8301a781000a48a7b3c9cb246864097f5db6c38201ff8891fbdad83b6e70890f7bec6ab1082f272dc0c46c8a5b164da320e0e632a8e63e2ee4e3725762c20f0fcb10bf6bb1b2288a87d31125f121c6683f39be00335f7c760b73b3bbbb20ad047b57edd781fc146610df011db1ed3c77c1a895152bd408117773e49004f42d9691a83e1f0275b26b61ce859924e27777ae14b19918acaba830cc4dfdc2a5556e17eaf868bc85cc3f848ae5c1d0693e110e675bb3804f2de33f64362b7f9bee34140764dd3695288a81f969be3fe85bedea88db8bed255669ab25e741c23ebf9091e6caa3f80b90f55e0559b8f9c994b2495f794ae696eee37cf6a76814f69228956f72e58a51c9272595fcd68472b20834d47d18f40abcf8bbbec0c8fc2b2da7288aa3c975cd9ec9de909b416a4d7d99b2cf2e1c9de989516f677888024559b3521fa77740e9d6838fe07e2133c0bc0acb38d67f6c9b1d95a0d818d1aeacdef41c16c418730c38fc426ced9d6535390687f7bb68e688406d56f9e7ca89c884148d5743d4969d8eddfe1c30dd8a13ba33eff425009518ba819ab22f9c1a0213b8aecb6cd232069ecdccd88e0a29c208390a185e6f00b4527873eb366ee9c0528a8558863bceae3175b388514ccbaaebc1e149addcafc2d2fbea8c46697f6b0a321de7db36f3fd0e7dbb14bfcaf7332a737a70596f2bac00b1067da5b4636c03587b61b1ec285bff8cec6421ad35c58ff6df76ab52fbd8a443cfa69b791d2905a3a9ac5185f530ca4a4f61be1c0dc8e0f31841ebaaa7b088584df072dd360cd8bbaeb20328e2e43861ebf1e04008a4e6112bbb61a2b89a73998941700a357c434992590efd78df1176c8fdcd41adc169f922cb545fb5002cad8a83df28a2e110f55d8bbc2d3e8a1d34ef6ece468587315204580e0c26497c3e589c055e06a20566182f53e0bd4b2340672a2b77175f05c5da4cd5cf93dd2bf1fc762bd5e829eb45cb2d1c3d7b8bed45381b2cfdebafaefaab8ef2d0852401707df798b5d0dd89397c6d5f6d02b341e96b28190089e0f5987f06ad388486c663e30996254626a9eb35d66498da29e8d4073839a77a5ba0485f9c4d2f166b417137936b4dd36c1102fd5272e48957aaaf1435d51b458777b151381cdcc53b3b43807c6056fe178a27ddc9d27c99a34e229b06358472cb447c60c26068185e7c81c6aebd68508fdc02db21cd8692779ed4a293a1098991cd50912262fb973cccd21110caaa503dcf3a0243a92bfa3a606e34c461d21340dbd6ee406abbcb3df3de6a8acf4586872b785717ae925b545d975681bc08983f36b57e04bfd33bcab84ed80413617ad6b763e48526e43c2d5df812b2fcd39ef8a6964957ab697049e4ca6466df24b5933ca4b0765748262d28396f3f675aafd2f321581f74a6f0243ff915987bb9be2482e2c3d08ae7a0bc8501761046c65235e4fdb24663b145c19184f3832f461df351c6267d08e832423df82d0de03e108943d35fb2c0b3f68aa212060d43f45b6671f8e0631674642718c79e1f7feb6f37d64a684dd3d38ce53a4c571ffeeaffe7a91ff96cffb3bfd3de16d12c69f5f9a5660bd4fde33a8e3c20daeda2a95191ddc3e37a7f09cccaae578ccc1de783363cbabdabac3a0f84f61d63d07c8c5099b085ee6a837ee80d214bd299db41bdad649c09f6411e7bf77bf98f0997ef10a0c7b8e5d162a42e11928190404dbfcce686d297bca4d8a66e337c089fd91ab82d8c2473b703c4c75d6ac26dc75aa9d86908250e05bdb0b771866d739a2c5471c966903e254e25da7a12d61138ec4608bf545d17d974edd688dc967b0377e763fbbdc5ee222b1190eef085259aeadf856fd0425941b1d92d3c9dbdc6e1a219b54bfa8c2cb782ce11436e9751f63bbc7701e69b7d445cbae11431abfc3c9433904183aba0eb3ba58400f3d33c53c92505fdfd322aeb5dd91d990028c61c377c1b66c1eaf1c63ede11aee6028fb97b6257ec7ccd093d9c7e075173fccc8a723e7f411c13c75073c1e2d4b1ecf13139ba9656cd35c14201f1c7c6f0eeb58d2dbfe35bfdeccc92c3961cfabb590bc1eb77eac15732fb0275798680e0c7292e5049703aca3fa69314a4eaa96c11857479df7ab7828c5f86de5f6c06ac4fd274c4224d68edd2fd5b503472672cdb064fcc3b6fbfb60a94d526eca0dfba4e55676f92a46dcc6d7af35d8edcbf6381365ccad2f0625b7543f733654b96748c5d0f3ae39acfd1dac46225fa513679c9bea25cee2626d99513f5ef1594b041d090750d5b591862e084b08ec0f956d67c46296bd539969932add64043a4b788e496a0d14409cfe94662e68227fba6e36275faddd050370114b8a21036a233b38e18986ce4d17dcdd5050be8787fae0642f41c9c2793937a02dd614637b7aa2997be66c884daa976551627a7fcaff7a8e56a978e222b316dc6c41cca8e0ba652c72f11cc6b4cdb4c8e3c43a9f8b108321480749d094099402614db8483c5ae96e514a15fe34e9cb7472065d5b7ad690a95debab023f9545deb76a45c5e0e4b5dbb141f6b3208721f4a6a981380cca39a302b71aeb97fe92add91813a660d030f0fd892d7a1a3e8ec5dc1e14b9a353d49af10a18113fae011c30e7906e4eb6114aa07028b7847838649cd4a654e12bf7ed83453107991c278669494a820cfead4544a776eff1bcd55d537da4ae488b2a375408f43336c15c98fccdb0862e228b8d449fa6a7e484dc2cba799e0a4c19d1f4cdb5b0288b4646b045d550ef24ba226f4ab92663cf58b33f1c49010d5e5085a26aec135c29134c68ef10ba31733e0877a19484b824b10111137c6c3c11b7bbcca60c8c4272a0f42f42d03ad1bc26b442f3a23ff987263c5f1a743dfae8c7fad029a789700a87c4700bb4715441fcac3dbb72b6bc6910cb55abd104de5609b959404da979432043d7843dfc4db73856e4637687754d1944b132134f6aebe58dc4945f5aa2df12d8c256cd1a127e525ac3763e30c895982eee67ab7c150ce3deae906d2b9110d829ccfdf2793729e31e478e3a310ae525e059971a29515bad2273cee77ad89ad88d63d44e98402c63180cf5eb06d0be3b1faf5adfc5c43a79ffc09a6ee6cddf9c9a039421d5b2184ade7057c1309e8350134c2d7cdfd23bf2dcf1ad53fe0551acc638981cd0015002e81e2e6d3ce8d6fd91bc8961e60fd2a0309352470ef39381988f6aa005a26633bb62d44f8a241babe17ce93f66d1910a913233b8b83d07a39754865bf539ed55deeb03d8b6f4e3e3a909e755d0cbe98a853acc197836309b394475911d2c37d1b91317a921cfa22d4eefee55b2536ea8733975f9dd73a0d0f4cbb2ffec0df84fd0779a318918e8f1599b78bf9a0c72fce1aaebca4679dadd6046b8e8e0338118bb8505f22b651ac83fa910e3e65ba8f0670b781b41bd4118f26201fca84164d4e0d7d56ba738da2a8775317335c5731b69c7b55d5db2662c219a28ab92bc360cd6cca31e7b088980c79c74dde6ee53e6608c2e1108fddc8f745b97663e18671903efd98b2558cb73569b3594981aedd9e1b54cc6c1f3f6ab7122d8bd18ca6a820ecdf32214adf26adade0e27c7ef837e73df8bff273957189e8c5720a156c2e04dc38a83f77c90efcaf16917d4e0c74c8d67862a9732604f62f4ad31665202bc478d0a111c49497a8d51c0e56d732bbca4e9a5c99083c4c854f8555fe630ac6e9276ec6a11a86e83b89bc000f03b134730e2756ca181d71beb03ba1c9f67128fa50dcbff65fe92a3d32bc0faeb9d3084e7ce6f7458c129a29ba375f7f089f797f5de033187d03843437e5e43de1de5fe001a1e8114d63ef4fd640362980dae001b543cb105a1d1faa02ff27c3621b60b3061ed036425899b76a1dcece456b8507c0cc2ee5e07e2326fad2804926d2344ef12658bd5239c0e9e097d076419a9119e645049ff570b731872595d6144b02392b8128ad674d8b6e9e76e4295bae2cbf8f74f7478339035211c2117214cdf3fd1df7e70e68dd23cd0e82b1f07bf17d822323ade371223011006f9a250ea12f212e503de83c31b08e9682e0d289a9ade90a18ce7ea77366f6bdf5d8f8ea10dd2dc553d444cd91593aa04018d86e1fe37dac1c031d0d74cc8aae1c75f2906026a94cca51290245465893820209109b48c472f6f4ca8b6d8b543cab161ce9d9311e2a7b5fa0c394a070d711466d58640448c270488c09a5cadccf6c657cdbc52714c72ea4b0f8c88f0ad4b58b0c2ec43e910550a76c6f65b2abd0250a1d4f6a2f118badc86189273aaff23579ef7b011f25a45fbb70a5f56b48a59fad042e12729fdebf74bb5ffacae6995bb91d2564ce8e056529a2939d1c3bb8a2f53b5e031745282b50c76088663831edf39e16357354922a9c0a22a5ee0d70f68ac9c985478cd1ba038c751b372c22b4ce7b34bc38fdb275baaf38540845346215b655e22afa4134361287f9654ad478f3bb69414313cc0f2b99bef3926b6eaf3e0aec60e719e06190627c6b171aaf010a669c0bbc1e4ac198d09dcab60885a5acce7549a7711708ba833eb975251c16ba85b563cca49351a95dbb219aa3e10c080ad8e391884cf35b7db32ba8f28181ab1e9b919b2f0f870547024066c4eaacf9c4fd77cee8e8e81c59c509d8094708863c38dd5046262d5596596e43f3084d2806cc4c851954b0a51e5b9a2cf3d774f3e4738e137240094052a7f559b9a3b63cd72dacdfa1f7139dd45c27cd37978c992034ee0e39c5e56f84d61bcf9d23b0de4008dd040a38d8ac84b2f8e35df11a21f7634366261d878934cd29cd28f003b64745281bdc81c97b35445595ee4ce43272e9d646beb0b7376874667de072776bf7ccd54c9d39acb2effa860b7110b47597acefd48be73f212ab31c054f11d3a655852cc1d7c74af9babcd26e6ea450927095d6381428e6ee8172918dfd36e10e6b58759f11956bf69f7283e66d728030058cd29be1dc734776990f3e7147674c402ef711d40ad654a504df9af7e10ef75c7a2c257b6cafd30f10dc3f33ae2e07dcedfb3da78e55b9d55a2fb39359c0917f452dfd693e623b56bf40b9cbd1fee8487fc94b1289aece355dba58ca4260a376d71a4c33bc5326538f85d4c21a9f978bcaa9649d63aa3ad0f3cab22305b4d847163e39624d4c3d0d66f1b79ef0d8bbadb8e3b0d18511a5ab05a5e9260885d5fcece0ed7d5813288c2ece8beaba72fcb730be563555abb9d07c94245bb49a459d40478f0c47728ed8cd62772be23604b019837e523c401b463edf8b4b71bdce30f9bc4897812e17fa2df6a4ebcfe978a05d7b52aea397761535ce477da8b418bf018740a76e126cf934d13ab1e956038fe3ebf7d3f079704647a98079bf48cc513ff09ec376e535ddcc3d600698444b86931e98498daeb1df5eb75dc8204192ef9b3f8b74016e19aedc803e71447af88c555b5b96e0fee2eb614107f1316711a0fdbb2e417776c1754be3fd7a55c1b3aa11e968445331ab6f388fa67c5c82f26c4dadb0b240c5d53a03aec5a933e124e7af11e8db4c0eb375cbe961f20859dc5b735d384fc423fc03eb29bd8746a2f24b171b03e1355ea304029760da9cb578765813efa16c58dedaeb9c0e9bf7ccc5de324fe0e075e92225c5e0ccbc825e6ec4e217fc2f9e2b24c6eb4edf6dac2647a9e6f4a85f7477d9dffc0ecd20211c654dfab08881c36676d0d3885986ce791eb31c5482e79ad0703a8f678a8fe1b7061a8928bb2044cf7bfe8b92a46dc68df204bdb597ff4fbb8e3e66342c912af6f83275c5bc93872fdc5afcb4e7aafb2a6ca5af600f2ffb02dbf469bcdaac64a2e39ea8d0b462f64d41ec0c364bc6d418339ddc9d11ff066b01638149bd6af78371640890ca16f8f350bba45ff748bb1ef0f42ab4c5f8d8bfa5939421fd524c61488e7f4f2736f4e7b4cfad7813b817064bb383ec54a1d9c5728d8b8dc1ecc9041023f453f24a54f213300dc9c99f4f96ebe1ce8ee68272470d584fd531c1d734722c4ee654db7fdc16e7ae9a3f84cd977986f3e2a224090b21fcc7417658dfb815b0774e7570dd6d64fa76339deff8d09cabd930b10e08db5482da19b8394759a3b756d37c91d66da6744fdb0c68380bfd566ac03bc8d57d4ef172a41eed78dfc14ad3bf92c6d2a3835a20dcb478f50e44928dd967dbdab9b851762bd1fbdb12196fd658de9839d8a4b6d17cbca697a218642ac55dce7d593aabcdf6f9ebd7b9533047e8898e73d4b08f49044c7b868f21d62aca462928237b06614dbc46d39e17950eb5ba31e85f50ee72bc8e7e2b9d08ef73314a7542e1246a1978459339870ba514089a0701412cda33eba837ec9475b7ee4290393359dcdfddbeba5a703dda683f28519a2441eb5b74dac22e323b0f37834441fd62544c6e95694424e0882ae6785f0672ba2935791dd205ec665b7f761b81844a39991c1e29bf0a77f12fa428a8f3e1152cbfb43d171998f8eebc6c7c9c3f82a61ff2f3f8820935de0bfcef35b52d0b0de0cc0dae48f7a4da34267f52f0c7629c7c257902868eecde96b5b3158955ace24017ebd599b6511b9e6160fffd614db1b9fb57461e985801fa239ad10ab3eb1ab36af4b8f29dc6429634b68bad546b6f3c3c35cc336da0ce9f0e4a70228ef13fa08bd0613cf32cd783692affe6eae35d6eb0ba9aab56eecdee3e6bfab830e6d8714328d85d01aa62cdc663629269de03b71e8fba709b67874d7aa678b3dff16e8d5aa4233f0f696cdb140abc981a83ea +MD = dae1930818a739043d084a232f5eaebff790fc7f6595afae21a28f85 + +Len = 97432 +Msg = d0df9f497e782add5b50940dc854e252a4fa84f46ed49235a96555cb85330994bb1de186b9ef4ce5ff3477b8c94c137deebe581c08cf4a1ad5533b0fddc3915a5590c91344b7bc41e496214d4bfd54b74a895608962d14082512ec30dba16d6266de5ed867f7025bd21c9bb597922d68820384a05f197867634b7018c7f62516b6afa9bd69d8a7999171ecd6f53126f85cd5eccdadb9ff9f55a5d0ade9e942dd0cacb0ab94813265e83b1c9aac03c8d0a1a79675c6353018c4c913d988a34b1e327c7d882e1a2b26a02334e8062f9a5619208881f3b6943a775e4183ee4bc843eec8183e80cd1b4381d03ba749dd25f38be9ccda7c64b16e380d6393610a41b3093887b3d2c0892653eb39c1be37ef0fc0aa6a66a966121acd7e7ff02a083fd64b73d4d16c1bfd36de1b371dad628213810a680fc2e53ca8ff58a084916c49147b22077e9507ffdbea093ba35e89666594b1d0bc0e08b97e9643cb36dd5fe8d563ec26a496ac187d3e5c503b18d2216fc148aa55d6f80f065ae90aee5808a381c97a3b2ab731cf84a3bd7bcd25653d98d277fcc162dcc9a613ef64944890028076734df840bead59e1d4c641cb6b42478de5d0eafadd6cc88800e211f61e8d3a328065f6797d3962c048387f530cb6e6bc3b2db7e62382d382c28a4baadbcd18c4498a0caa94fb0808c2d970056f23dc25201c106dd5932fc9dd662bacee4980f675c4221a2b7bb380e9b2fa28bd1091913da3ddd91b254325fa7e99438089db8ead1b20126b42ccf166ca06061d066dc73acd06701ec2795ec1d87eb8b91692559898eeda7bd7b923e02a7de5b88cd891be9f747b06f1383bd97ec053c0770b13df4274ba84c2e4de00d8450eb62a3ab571230d41fb3be985eb78495cbe34b09029229bfaae8cb3ea6ede48c93e68fbfcfc60ba0c2426f2049eccff1bdad6e8931f3e49e120bc900ed1446c5d78cf832e075e6422a93cbc809b84ccd83de41ae669a067b803dae213d1109b148de63a133926f1ccb305afc189a897da0ee6b04fae50dec77e6e11c2174cbc34a53589723bbf4b526a08338e113e486a7665119796549456ba0185e14bffb706e745d615b43158fcf5cdb1b1db50c6d09de8a586cbb673addf1aa538153274d27c9d8ac24d8502127cdc8ff08ee5fb54aaf7d4e3f27e62141442db911becdae08cc60e42aec22fdb29be3714d206ce3ec61a0678b6b248d281008fb20835d3773e46c95d7ef0c9a022fa0fe551ba27d518daa30bbc5c0f304fdc2764821547e0baa722da6618b7a98f18812ab009ee62c9be1365af839e76a65e0c6f31951c64297083830d40e13e99a0f4ad9afb0b2d004fbe4e3530ddecad0fa69bbfbc3b49b32a531e1c732fa7681bd034b599677ee6130d8df66ab4d98d765db0d1938cd77f5cf9743ab6892b23117c88a9eae89da39466ec9c390b876d1c9a751220f758b68edf4d1013d714f20862711ff677d15e5a3231cca5ca3c7687c3b3276d65127f496c71459101a8fe8ae9b6bfc6fd643febda2530b7d941d0414232bb82bc4e031308a78238ef306f1e79213061609c6fd1c490707620dea2d27dba7465e65469771bb86f118af36d4d7a781bcf8ac216945a3a34eb885a14c0de13fa20c96cdafa0d6db323b83b1f9d54842719611d5bba03ea231cf7ff5095cb04f6bb4fde7e26478cf777624ead98700dfd46cff767cd266ae51356137bd8ae57103c5ff17c822fdde213717540c634db445ebb9662552d8023d88edfc012eed2efade0effd962e2a1d01cbf800ae09b5a56a0c4373d87ff5857185ab45caf33e3c15bc1e28ebad394f495a1f14d85864c871ac46c2e08490b2e825bf328825629e7ddac7260812d321f10432a4cc87b1547b82e778f4a41b53455562b0d5ec08beec22311e75c6c03b03b378da130061f291766ebd9d475c0f8efcdde737b0f6436a7ca639bb32c844864e3adc34293f49b97022b861d51d8fcd0478fe38d9f5d600d06c9f61bdb3e583bdc0d2b76c1202fd584d92cbb6247a09547b1d60cfcd1fb406cc77efce48c501e852e52530a1c465163572605239794bd42e6e36fa46c590060ee9eecf508d08b7383c04dcb538f8932281aa1226349a6cd91642c328719cb87a1fe52794e4a112b901dfda1605beb55ee7305cb252fe04c3400c903acadf05583e5c3ed973d2e11f593b918cd4bf6530cb7a99a47c7f8435121dca457961d3ef71db7ceae1a50cb06ea269df4d048cdf551132c55926d477b4fcda11252a0c88deeb498ed7227bb5689bcad6179410b4af7c8ddd92faddd14f3126667743966bad130d8cfd5016756faf1c3bdb77dbf7fe4314b4ce03858b0b45180c17b35be007dc30adfa37c63aa964c7d440b6d3f06def2e11b64ab5ec0fbf17caac82412f14cd1ab977df714a4145336aef58e2e6210742bdf1d6563d84278a6adeb8329ffb6e33781b5100ee5dd7c9c48f65ef234513ba8128b04ec79106dbb2575e1579e547e4b18f945c6e26a4efacc9e6e1edff9bfd2303de87cf5fe2716bbc7cd106f9e1932e7ab06b12c3330ee845e2a28d7728736b296ae7a01646b45db818508b60c3aab585ae17225c0c8f41aa61194bd7418423435b5881ddb70c4ff13c795341758f0f589547e51bb8d87fa16b2e6e446f9811f8bac1b9dcbfe10a0fef34a5c580ac049a6de3a426be536ad109c940e83917fff18e09913ce59b57bb3a69c8136b675bf33ed2a7a5a667c9e342d207eb2769b3d6df1a5125b1a2fc9d23000555be2ade0d11fe36c1f97b667e1f310c75c1f6f54eb6db41beac5fc15cb5e2a4b0025c538ded4e99a13df9074ba6cf97ac90278f011a34a8305d3870a0f5f5ed4ebe64831edbaa176ffd4875f1e192efbb1b624798130dd0a24d96cf13ed2227577aac3666e2fafa50bed07819d8635ec8ea10e7bba94eff3d02e2a85ba4529cf3be9b330d0a26886e0af9d76b922b2afc869a3511e5e07e290682c120226b9248139944bc5b170af1682b5c8e17d09c7e7666fa43cea9958de1e0e20b70565281000e2f1bdeb3c70161cecd2b6f3cfc7742defdf86c928b911962d5c395fc24c40e62bdd19ae309c47c4af3e9a355920e736908d9c883aa5f387261f199444f39c3feb6879790166541079671b905a56c906ee18ee965381cc6774d3d85151d0aaa48e2e4dea0380a386e7e6abc327fb8215751bed81e7ef349d9624e6059d45c48a9099176fdb4dceae5727db1c6661baf8b20119b98c40a4bff68cd32f7bd5a278af235678dd502ded53c52a2a8a3bdc17216313cb952895353276103d72029ce516679ba3ae2a49ca7a29096c07ec5df74fbc3c26b6f99ea3c66b3dce145f4c5682d0576ea22ecadc16de096f63e5b91f99672369564629622ef6bc4fd73e195350f80a387de00988d65e9a9322da96069b0e39f1f7a0be26d8830c413f418c522d4924af85f08e5715154d75c91d4d32c11c105f0f6bc5386faaae30b0ec2dd9543e47225ea2d1dd7fac8285cb30773aa81b271f2239f73d30c8229cd0a0765f8251e23f6ca96c72629eea51adb68c64cc85ee90c48d9c9bd88609e41300ee6b242e86553456d6bc6a46e557f511f5678ad6f7826ac95ddad34eb4b50c700e82b62e84124a5d7911f33ef41715c55ab97fa8a232998f93809dacc37e01904f1cb4dc9be5130fec299a0196fd945324b127559f4fb542d613a40ab6ada6c438bfaca31e5c22f0a859cb295e9a055ddc04fe784f285285ae0a92f2eed2709e53d20a3c9bd60e9236390300bb7acd17f92b817b325af5ca83ebd6e00c7ad38118fa59e384e11a86fe3dde322dfe7043f47b4cf8d9662373e02ddc7c7005640ef0af18426a0beb2198deb93836b38354669aad5ba4c840245b473002ca1096ba8356c1c3dbc505147e92207d66286abbb8004f2e34ffe06e4dde6e2d6b1aeff64997f3022a9adca2280eb09c2cdbbafc71229eeb0a8b98844049e356e382c454abc9086806fbf68d1d9ac5fefb3be8992a98191c85e9cd38cb103c19b3f6d85832809e8fd176c727c7cced2061c778143cc74a3d4798e2ee56c7d4d06cc58073665501c41a79e2f4df2ba2aaf11cedf03046aeb7b0279e077be74a356ead5128cf9cfeaf52a3ce86ac2d72f9198abeaf9d7cb3266004432692e5089349eccefad6eec1cc1a52ee6fb748ca955bcf6eb4ecfff403c7bd76ce44579c848f225e7c04c11784c225c6e2991435fa282972a29746edda67c1ad60f89572839edc840ee19a5c83fa8aecb1ba0631a21f476efb34d81d14c09f5b713845270b0979e425e5f10d241400c43fb2954a27a197c8213e29ee3d52d505917bed36a54f98d3739a5b95ffbf15e20eeb47dbf54f98f2a72bb2fddeaed130244be40dcce1a7e65a6740a3615c38ca81eca4839579d9831f8619a85325326fbc20c038fc5035a15ce536a2136be7e24b3f21cd72c0c80ddcc5b49a45666718cb830824be2ba0790d8ca41e606eb1cdbd5b561627b4e2d771731a201fd2edcfc4eb227d7cd496f1bed61f84e2f514f17aa9a80a3eb6c8946006c0f66d0b45095ae1b59fd2db7780135a1f52156f8fd1e5d29df5f256d7b94b093f69976ffb39dfdf37f83aa0d0c88d711a12726e90f3a14eae761d159eaa74f2ec1639817ef5d66c00332ed5212fafc3a6427442b6eb0f76600709639c0c904c5d78cde05ea1d0f0c4cd29e8e729dcba2a7eb5bc600cb302493531c14e43ff7e1a0dcefd08e25205ec22b65ca14ba6dd3d03911c3afd2e4ac06d30cf23e545109841b7480c1bcc23fcd04e80de098095549da0e29620c3e87c3b80edbb64f3ac6eb10141e6d2b1c36d527d25fbe81c8ae7896fb0001c2633c30cac9d83477d99f3d8478b179bb58cb425ac9c896bbd268c7348051733d7e53b7d0e6f0a016571ce23f4841cdb19b867c667551508f4e0a9d7e4423a2c2b555bf940c2ce272dbc543092bd7515810f0eb138001d445641d613af07e759c30c9afdce492e2d38e23c6aac979edf7dc90f8288fe10a253e287d312b6ad4111837f171162d898398bdd4e9cb3289d52aee096f4df7da7701b3582b9ef0a76b9527ec1b4902bdc9201bd68fd9070d3b209388ae5f4d2d82d8475af0f117d6f0ce2208a1251b67ec4ec632649a026171e606dbae70ebe98fe96beb47cbe84ae9ecafadcd547f70354b455230b72a6dbfa5cf6c3726d7f8e65ca773f9d469e99d165743657b36beec3f209cbbd7871a6d8577a111291b40cf5a835acfb5a49c5675a1323245493b5952e07acda3224ec2ad85e40322bfab920b88088e16a14c5a3115e3fc57bfcdc3aa0c532dc302f20746819cd6b9c92076963de6019e67dff3713bbc8b5ca05e74722c8ea4de2fef8577f43052954386c4232a5aeff6fe3f665d9c26a6faf4d5b2d0c995fa9cb22b8169650a3f5f34c7c5dcd8cd1fc66e52fe1fbf8a17d9c41ac6ec6acff7a7929046435c9165bea5cabee7cea85ab5bf0202dc2c4ea4a21715f8ef97a462a4d7051b2e612d8c5b9d77fa6c9451686bfa35b9bf6cdc16fdf6ae8f01d87c053e8a714752fd467bdd24b6c094b332119127d56ced069a349168cdd549b6bfa61bb2be13d6b744fbed426f5786b2b11dcf4cc9649182f2c807755a10f0b8d50ee357d3c7e31890d433008a086b193853cc73f9e6d1694b9806253d891d6727053f8198aba0a790ce5665ef1b6b712e7c31a34d3dd5420c6e37815e88f9491b53d739f50636ecadb0ff7a87d8ad41fb60a5e5adb0c6959f104290a554ace81abf5286d222cc6f4f44d54638865a1106c7d1400186cceb6b46ce5bfb375dcc8d12587117458bb9df5081d1eb6f996ab9795cbc31080ecad8da83e84677357bda149301acb89b51c39daa2389d993d27b3def61257eb5bd4e920b41705d5b7f6b8da83e79c323bf65f3f945f80d70d3b5dd3238c630e84935380b6e5f31f760a645423067ad4b8c2c1a163e225357f5cd1fcc48fa65d0f8f5922e75fd3b33a4f50407e05cc03d3f7fd9a816edf270bf2ccc6699aa669551f669196030c235d5bf919f5541421e60c8f957d54334e4b93aaca734bf7c5edca1847737e210257a6bb5b397ff7c19776e43cd840b5fdb6b5f8638201fed53225cadee00fa6b2c1c6338ebaf7cb6530dd97caf2b2dbc7c5e0423c065b4019eaa90aa26c5601c72420ee2eea4a238f7a9706fa8d09093f0198f4ce80c640264fca644c98dfc6b1e74d47a657e58492bd49de35e7d1e2c5f246ac7581c1936d0a104437c61b69f583b1dcaf74685321715c89f7939becef008fb5cb79dbae70720146fe94876024a1d51984d03133ce5f4576ca20d58c3cb4cacd5ae982f5b34013d90b84a24da19a4d8ad0ebde9acbaf9b31281ffd5511978e4f9e41360da7dcde66d916fa870f0581bd1e37cefcdc1ad4459bd1a1bc102150a8f021935ae0a0b79cf1ac0ea0cf5c080cb74490de61f977209fe63135badaa8860afaf961e04435d7efe44d2f650647065682b2b3eff40a6e9eee4a56643bfc53494df6b7193fefa42e30349752acc5465682b311e872e46c233a4ba2cebdc29d258b09cf0dec2b8e3720635d2ab8192941b5007cedfebbc5c75ab38f3ce8a1c04a42b11e30e1aff2852548056fa0a94ba2aa2969630ff6e7f5d020904135006902056b2924a8b37da2bf5104640efc09f3c29c4bea2f0c6f392b013a7e3b74f3f733b6844bb9fc8c1a7f2cfeda4b9800afaee7a8d5c482a7fbdbd402366465fd946e2194289dd1aa56c52a3924fef3bc50bf8a14c878e04ed863276c2c3859f264051aed5dbcd954e221d767c68195896194f1f444a4bbb0394169fca23fc75ee0a921043d9f8a284725c2ff418bf4146c9fcdebace06b78a9071a284ad344af84bad25d4ade5a70e0416b642876a5d9dc506c4f93a476049214b67388ab4870daca8d7d27c1c0eb57f53f3aedca11462b575bb48b7971e0af0add62ee10492f5d58d0d8371263d418b1bce8040edce5f4052aaee6d7c5993a59ed7addbadd5786d64af31b18a9e7ad1772fffdad5f35a0fa47834838079ade72752fea036b65d1d33a42267d09727f96efe74d3e1eb1cca730f62222be6205e4f2f6a57279f6e8c04d69eb9819212ab09232752991f6d18c756c0710408b4b31e56372909f77162de2cefcf24f6018e4f86608086f514a1a93595999348318e9cafad3d62262f49ca8e5cd2412bbd4a480f67842fd6db0e20942bc1600c5e96d22316bcbd9470e7cee42cea61990e88fca783871c2b8807355bc812f4bd0474c798b8cd9fa9fce4f516a83e0ba8bbf07434feb1d65ae433ef72b5b4d6c4ebd083f7dd9992cd9ae9440d18f7c7c08e29b79f1e29e4cdb73b56c23ace8e87db500f29cb471d68149ec5afc43c1d494ddccdd12c18ceeac9c672319e88a5709c9f7215ca00c9e230aa7fe5f33696abc1b0bfb16fa51d1be17d4ca82b0ba2e6f563b4a224ec1ca3b7b67a98ee0db94eb24e942631f958c7c908eb10277f0d50b045deba1f32a0137069bfaefee80e9ae85d541ab83b0755470e574fdb0c6f1893ecf74405fbdd9a256c551169ef1ef82a8607744e94b32f2437994f8fd84ea5670107271c6e5aa19c6644a7774c70ce4171b61c392ce3bc272db8f68b0e355ff32b174dadb49f8e9e00955a72248d85f6c569f9c12a1f641a95bc2e16d4a9ae01132d9dfff434cbf3e24f10a0a2fb860f2a26f530b7ef8fc31aaede795234fa576054ff5c57a2be63b37ab34beb4438544af7f7ccfadca5ec6295eefdb25dabbebb915b0a0570d1b61b1f2ab92aef028fcae3e8df1c6d0e5b157945e719ac29feccee995225266bb3c4445d3285854e8655f2aeaf442b33d9dc62cd82b1aadddf3a72a27cdf4cf32453f43400248d8302912d32859b9c7a2d5f596d15a2de2d29ae255cd05d6bd3cf7334976a308f08cb269b5ca8494a4c2145650de714d182a3cf10b096c40a727cca0e6eb7d11447a9bd45156275bd127b368f95412e094517463a86153fb238f50089a1302ea3a764fe3143f9477b3204dcdeee6b1810dc4bbaacc796f3ea8d01bead181d70c490c39069cfb6e80e1684dc5afeadfb6eb107d46c59610b3ad967ac83bcc6beff6a901cf5a2e180fe24c3e10bae4fffa92a153c8426bead2a84f07112737241dd9e9149dba3c236d1c68891fae7984b4bb13c99fb15f50243f664b563266a21e5928fc025b9a03311639c942e8fd208dcad4393da0d4d310c988b227cbef785a0af5128dbcec59f4562c893af8f435de286f3d328f80f620ed02c5e67215f95945da12a03c977a1f62dd23686d03373e7a31401edbd84bfcf0711112c39ea7b4b05456ea791ff61ab2b8224ba39ec71726e6ec53244f16dd9a600e4d1ece25c4d0d069bce10a508ecc4a20653b1b5800c4ec8c5fe75a197b413c27e60248d6320dfac59812db0be4260f8835a22d5c83babebac5938db63e6b81f89e0c835b54ee1ff52c7d06aaa33674e44d67395708aeea0204b75e6f9f9fcdeaa5ac0207d5f7dc72ba8e119f549416af0cf8c3da17e7dadc9dd140b827546c98bd5f496e1d91acb8f2c4906c60c5714304d551582a1c1da5116fd9226e000a6d4594ce109461fd4245cee7946030f16ac59b6643c7a22f15dff18c30cc4913e2defb0481e2df6aa923fb9b99db6d2370bfa9774f69109b8989e4ee55da861593c9d08124817061582dd9210f2ad093ef639e08bd96fdcf9a7fd85424015d8bfac6d3c88ae8bb7dd9c3f62c46d711af4141c79f20d9b047a3524a620de925e37236734f2791171c9876c0f1e38896f210eae4af1b99dea04e8199ac85fa75b8a4992d898d0319ca2ec6c8366787d6e8d8bf43bcf05fef55e68e64782eadc3780c8f611c1dc74a0307248a4e458d681ff34f835d61a458c525e939796a7ba5ae1459bc5b6c561e63bc2075ce0fe1b0f40b1c11e4c20fa19a67226714bbfc82c756b8addc0b281d48b83b192a192d48019a957e07a3ea603234ba9bcea5a8e1604dfca4225cb5ad3e75e4f2e703d893b4fc4c361a89dd0b291922362bb9f957e554c63da2d3a764c19fbe8179526c3aaadab0c8b1e65008eb8ee9d4a06b764cd31585e8f22245da5e701843758770934fa063a4423bdbeff5f081e5c13ca846c60abc2484ab495481a192b750055e441fd7c567600cd936d5087ae8029ff7bc1aaee97edef0fa89b7aeae6b9d7eadb397fb66608febe06405114559e927ed336d7c9e56557601e08ce1dbceb235e7685485c75e263b8a0e02b571c9e94701332aee3b59acacd7df5e059b6f42dd93d8b201588ec77e2e7b5a6f70a6878fdc41df8e50e73927e4fcc7647dbba3d82b9b4cf89a90e84656528899d28e5864c6d5e7d76f9d8f69c1bf4598e33269b8171681c61df30d069a29f9ef07dfb0586965f053f7db13d4f6ad551d7c6208effed10d145333aa4152583ab9911933fd2c88758e8a2e6b0bec3d725ca9d915f24b612b4dcab144891763d793fec967a59893e3d1870609712ae629f0ebf5f571753d88ecf52a604061d33d08b17eaff4264ec7e77f0053a72b3de854c3474bc014cc826c52dd9209ca2cf7725997916b6def9e1ae29bee0075bb3a02b05b6d6092a4c46674693e37a8e7838b47a2906dd81ce2f652374d2f92d49b854390fef5874cbb45da4bd97c96995d9e0c2e419ded4d12f43e70d596fb209956ed8664d15b2ad394e4f4082b0b99023537a9195e25f6babf17c73bb917059fe22eba239696d599de35002ec5808d0deb2aa18c310ab046917ea8c4088f1a2bc1878adfb7c2b39a8c3aeed1fe8ddbdd2a85861eb913f05335c3a42327cbd4d98f78a6edb7577b4229671e86289c1bfc6db8e53558ca3d4cf68737bd7945ac0576826cd217cd632d206a2dafc633b3e84f353d8482a60db05e49d2179f95265c41256b214bbd21b81b947ad369dd3a2d299b0d70e93fd819f78c11b5ed32da3a69e2105fd57f2d8f7576b48586011537975ab39edee022d63cbe651ce4971e1c4b390ae247bbecffc891393aad37eba412e4fe42e63f8491b8614ab1383a889e7faa996d14dbf6958f74976731fa13df16ca1c1181c663c8d50531174aa5902d71a76a34cf57c0ed24814d9fd6b024553d9abb8f53ed46e82d2ac6b38e60db45cbcffbedc9c7e2734247da48ee02a3b2d1b74b20bf4ca47c1b426a1a85e4b073e884bd0cb6a4b1a44358abf6fa6a08548da0495a464d12f149dca9b0c3b9b63442562bf5f866d51cb204512e8e4ec8d6cbf644b06b6708e41359f42aca48530383c4c75e1196c329090b68640c297b960719bba791330cc1125ad7ccfc292d6e07411d8984ace275d2be401c1692873ee99b1cc47a398514c15fc32bebd49bd0476bad2ce421d97f899d76cb1012722dcdfaf67b68d3085baac954dc2bc334d6eea4f4ac928e0ea2a8397b059b11d2df3ea9c7510fa80d122937fb321e7d6efe576d627d325a087bb912db301a291fefb6380dd9b11119b4e72c24e2367bc0930c559533261e4d8736aa05ff1fc0bfcbcf16387a0fb6a4c04f0670412646d05187ddfb52e0334441ab7f89b70e6138ffe3d4e5b66df134d0db574bf340570496547713511341833771f3d4ec788321f88ef484137e69505316af466d3734c3fdfca16bb211b190d534b78623f0bef1423ae5a21593777db37b7ece135d68c4d4dafd62fa8e1be3b76e2b1be1e97d3d797228be315fc4139e9436618a255b5dd799db979ecad9023a88dee4aac5365ceacf4e36fb35a7c860db769f364185156293dc88236a8162eb1f439ee33682d6229cc6aad7b7baf296cbafe5ac248e72026370a30cdf9d8c458be9992f9feb3fbd8512986b587628ccef52c35030d00a33832886cfbca5e4e6694171e473b80027f2c27e0a8a51d16fb0ffb6c708e234626d6481f06403132a41db97a654a1bdde7056ca59dfe692fbab173e751f4d874bacc542f3785d8dad702898f9b510cf6d88201bbdcbacd3fd4839d8eee66a892babcb486d6c1dbaccaea8f433179dcb41a4eed0cad00d2ae122c804a8e0d1909ef4d6e0a2b1bc312447ed27f6ee9127e740f387e58f8fee53a5524017a11b54121288ca57dbc16730c665a2c9cca36beaf6eebfb24ccdc4a14a5929cfb9904a218f5153e16cc5f37eb492f300143d0db93120d6a5ba1f1466ac5d10457cd8d959b5b12bc3c7223c5a9cf5a75e57d693de8a4a6b243a2c742025ce91fd6d6d88074028a0938d6ec870ea1e2e1929f884c76cbbfbd24f4e5a4a513e3d7c2dc6dcc6993850c522141e4e167cf5e4fd2b67005305e7248c2d3d51b92c6136106d5e243b60cadd17bab44ecc829d3633e7a115c7a8eb9f6321a3e2c809abbfd7d9728c91225d4ff0bb10ff56df927170a5c974452547a756c4146a08668b6dc693b08c550db6922fadbaec5fe4744b35fe46a8560ba9d0e99d0543e4b37ee46f149e9fd173354836fb187242219117f649bf2e74bc70b09e14fd2cf780f4a853d4a333b10377d6a93bc03da817976c242089732bc83aaae6b47271bb4f8b2e076c64d45e3eecd1e8e838aaec46e5bc620b4c22d5af763446040bbeaa8fb0e9ec443a1e337602ae9878e85699300a8d12725d9a1ce2a1f15e7c0f604fb1f46084e4b96dfb4967d11a6665ad39538452c7ee54656bf24c46729514031566d43663d6594000397afdf159273b4731d1b1f4f7c6f14d6ee3b834e7a013861ebeb00b81a030dcc6ba69bf99a36d4d5b810f1bf70bea3bb8f6db17dc4a1e2c3a3271de8f04ccfb61b4c8d7d070dfb610f0decf84b99ca150f4139deb588f7259de006f571d50e6aae88fdc6605ff0c22dfb5622946a528c779e629ad71e3f2ee0fc0406250791902c4132ff2d947c9e17c07864d49804c9ce6e75d9b2cc818774655d43934a22cf9e61754ef714679ed7469ae7928ba6741c98bac2ccf887d7610159d5430787cf0bcf0edb44467969737304d356ab00356a04797eaf0c17c7afba42e4bda489397b7345cf9f9479a8f631fd4fa960dcb2bf9afa34e36efaff67765e978a8bf0b5f63561528d6531026567ce83111200962342840dee88f826911ff717312284ea85fdac8b98226720cafdc098182935879ee461315ac0d8e4339c538c3ad30d812fb36ca34731e4a92cda19b6460d432d3968d7c7af8064e357d5ba1d2e055221fd3feac222fb704694e821042226f232fbb62ff8732f62c804b276f2931f1c73f5896e0eb2e8d29f090e22ab34dd0a3bedb6b1eb30349b3e431bce34f48b331f227a40b27e61d45b933462d3049852f31551a4c96df9d7eb1bf8090bd6b05fcc89f8a7d40fcc3c223a422aa21bc093ff7d6d52b9b3e5dd779431709ec3f6682234eced9deb92d39e0721c24300be950a2df301e48960778bb6ae4b1642c515cb2a3f58349c1c617501b772dc3bf820ba2bccfa7177d26bcf8a58e29adc852f6c73d731c1aad1ae4f31ed829655d8fcb781de858905a382ea17157c53179e7eb0189ebf6e9b1881d59dac3998d5c5f0aa3713e954bc3c848565ce62697e79ca3c207b4c61f95ba4ae4fdae10b4327c63b535270f9230339477d6cdd03967cdbbb93551ec24b01dd834f60c01628654411df8260a1c36169d966d53349e91079d379167eba1a72f5fca3271ee20ae933d5e28d027322bfdbe228f3ac64fe9e6b2cdba5b471ed15b4c055164596741a5a2e655a9e98ca83580bccac927c5d8c7a6fc0ea080e4c54e1786d147c5beb6083c56fd17c374317a8fc59ea2bb88f436e4431cdc2b9bf9646cbf10b0a59f923744108dae37913e1935cd794c1411b2c0f523536299ccf44a962ebe238b725cbf64c385d1d86c44be1d34f929a3f89ae2442d40d86dc03c4d3e462814e9ef7c0d18b08427085debb590bc8ccfed9623077bb163a21a4e47f8cfa5fd09435f86bcda87f71259ee79bc4a94a2937372c1cce6604a5421af9dd9b4ce9b651a5af32b24ba6d383fb6952ea58dd948c8272d9f2eba5373166ca47ca81081ecf15a57e471b834ed4c1eb4893be8af244e2b9cfabf102d635b1df23df42c4ed54ae60b855c121cb5e1bf6e58783582ca87e8b66c020216b9823c1daa336260c29976a46a4e485336b2f11918d50502a007f6f06fb220cdfa0e3f7d5de06356396f94b92fc2db96c4125c4b46fcd78d4940cee17229ccb18961a097b5859fadae2fc89022544c460282697b6f3a1da12ab4e8f01fe396400c2ef8033d8d87b5a57c7ae00e6d0aef56a5a13ffe2747ecd8e6dda2c579ee17e6b8be267282bc2c93b8342f3097a7f154ee8bff703f06aeb86905701f5764979da15ba7e0ef9d711d757cb4354e940a71bf8230720bba856d9df8fe69f67a5db58b68de053eac018736cd35790c5f9931ab4c895ff7d40f4cf8309441f19fc8b2b96e5f4bfa787c857eae19985b8b0c19342350b69df38afb2a44d843b3656719bdc492419d83407caf87e70fa686f19cdcaf2cf26889a6ec869e40cbc63bc75f2b142d82b25cdbf15be3044b87d3d821275884bfe226e195bfb5546694a347f763c5776bb345cd78165827e88a023e7a86a7ee5b952ba97b18228980c93c97771a6106792b0e8375415f9843079272dd8d25c071ec288d21225e66c6be680452916f513783f7ac7d6f51fbf78af543dead5ab18f71adfb1c80c162950e963d1e7b58fe23489196f512e7b972aebafff269af2800a01c81c1a60403781477903f2aa653d9037cd170be795750cd4425bd44ab9a6202049fb4f49ecfec6a6cac4941eff8a52f19ea74d49f6bfe813143a3b0c89f4001f6d36b0eea3e6e9af5ffa1339e632435e95075f7c25df844f2d82a409e8d174a539b68578ec57b0093f8fb822a19e2b27b91f89a7aa3ba831961d576961a5425ab761160e50b9e55c7269cb02b835d2f413d713f30e3d1e6056f19c5379d933e8ee20aad956744e5201729400b45eff6ca9184487d84bad8575e8bbefbad30ff4e6dc8a0186f0b491f3905a451c837c3785c8668c90cf1c48fce9fb66abfc9e29a87bffad6895dec150ad67f9780b0ffeafd1bf29bf303450f2dba6e0d4bca72c3be74f0585cc968b21b00142515e81692d199887ecd6bd465fa80284be7cf4a8a706c23264fba2976d81714b2de4991f098a38cd9f297fd14b37587bf0a24b43f5c2a25c8d8ccb8c3c08ff3a970521c94b0be9246091419abf70efedf29875a52c0135aa89e5d912962df2381429df0ef983f1b4b876cd49c23b11014dc43a7754adc545df7094d384d8946c2eb89d971ddc99a42e40e9855d8004df8890616176ad98551793c4740df12bff6c1a210bbefd291d4b575ef6972711b02b63b40a98e9f601bab830a03a60001856b73313e5cee9469523f3457818809cbfa4f91bc54929714f46a1fd120d5be075f79d5799372048960d721a083c99cacbbdf93b02b578ce5ea5df339de0837f5043267ee220184ad67ba11c5079a463d7157c1359152a406f3cb2ebe3c2c21c70019531c8711775dcd64af457b8e88e6b144a4bd15188ee0b75e2cded995edf5b9bb317541266f03087334a25e2ae7410222a8a7251da01b9b73680c24fa0f19b7748d98deb4de45af425c5c3dd3e3c4da7e57845fe68a0026b77ad6acad07ab8ff1c1e7ce51379e287e70d3893e00fab0b43be513e79f46df76dfbeef436a13899f68f27e602d651a743cb8ceadc15b1b60c049ffa562582c4e01355b31a8fa5af9fd398d760242fbbffa7c8cc7975e71108f1351b485ac93a989ca7f1c36c86a8e093d7a1768a022de448f3200058d582ff2e1d8795bbcbc15c3fec957a5f64ec7f77ea2a8c315464ba5715ceb9e50472b8635f2885710fc2f6a42d878790c6e34426db5cea41acc8497b37bdec45fb4afc3701e462a41da32c7272af322834f5f949b21ed7e193c1585d5fd7e19f427093520da5727b7ecec751c1f5c34f368a648775579d3990b7b1a49803e01c624e455d8a52ff1fb9a98feb2441812c550a4f892ef182722b121af9e72930e4e24ada0081d34fb8569e4be5a27bb5e818dd80f7e4d3cfb4ec3a5c0456321a1e4ace19e2f910aa6dde14c5ea438ba7aa086bbf78a0e5cb265c983f6cec04e6f32341cbacfaf05a66d873c3a010599f9bab1cd6b4690fc0f102928adab188dc8af30bb8058d5ea6cccc220eaf10cde5e38c598b544739f43c669107f5aea6430c4594a896b83fd5c7428b6ec04cd0c0a93088a800424bb03011fe7c66ea4765a09e436307857c307ec315aa7bca487a152113f35f632d3cf58a3fb2d46d51886f8882b0fffcfdff1ad6288c87941f5951e660351ab1c8e0b259be71e840aef5a08ab9592624aa8ac2042cda8db23ba68207d935d83402e49007e1804a6a44f45c2d4e2425056b189fd4895d342a86a8d30ce4bd42f5c48fb61b12a9a1f3fdcccbf7aadaa4a729f2d9cea8dd2506e6a96a7eeb9300fbf72b4c1db8b295e4bfc7147235434a13ca61977aef22074e45ef6fe55580b94f81fe7c963a64d044742b60265726c05038ab0161c7f383088ac30bc78a4c15f74c516c0d0287f71b0341d69a794cae665918400a9919413e9d6d65aef2bfbefd3e6b440a77e3b57254519f56017eba5e17f27cfdcb5de8f76635a721f5a1596841962d15013faf504fa3e2e259828f3f597fdcc3c785203ccc63f6a9fbb991413c184fb7086590bddc7ec8c7e720d311060989e3f3599314ba3e7dcd6cd00b8f163ad177f41bfec1e32c798c15222fdc08d6abe5b9a3e787150f6115b0ae725ab944dbde2e2aa1654cf31cb94a4e4aa9462e69528029c49dc61ecd092f1b6cab0c7e97731c5a23b0ff1cd9d6ed6ecd7fa85bebb1afb4d35fb5b3e73251dfa189f72f2bbe277229abe4eed96c68485f6716a45a8ab00cbbd4ca16d7177fc1bbfc62a1bf47b73c5e5ce4b3440222a5a9687850de66eaf92504ee8ec6401f8b5f0c351a7c97357e67cde5b14221834c528ab6a89ecbc543b9f80765dc369b0337c258e389350701ef06d032f950f30703d5b9f4c344a9b11eb7fee1408059f2eb25b4440fa9978d9c0d8e7c9417da9c6452677c7456fe0dfd49bc4b1ba6c31f233d2f84367c4cea16ec06d739fea0d41c08a987da8b2c1dfdb728eb94313f548613b2ed25358ddf06ab1f8d118ead77d400685e1c6a9baac7082908d4a83757bcae26c5055cc4351450c3e5434e6a4d33408a4a647bb47b0244a9eb029312f16e177155fd7958b4e7e5d926f7c73d1de2d2f891d747dd5a57748fdd477b38ea44547de53615b12428714899577f8fb188bd9b7b9f557f0d6e9fc324cbe6110ae56f30bdd8b7374d7efdfa868800c9cfce0a5a52e42d035deecd2c08b55f0519fa6f74240ae852f79290d635b5d251405cc01c5ccd58cf128006b4d32d6b7cde2a5d3064f42f6ae90c32c4ed047b91ccd9e7cbe3835d4df4cb5342cb5d94de221e404cc3bf14e7ec93ebacf79d85ef3aee884e2d2ec4e4ca78bbbf3a6b6193ad7d20af8a931f31c8cfc4769ba978d55442aa8d82f416fb5e2e4711667f5a0347f006430097d9b04569c40b2150daaae07e55702c00dafc7696fe2198c20896b81ff8ef6ff4c9cc2a09f451d1b935d6a74991df7278984edb57e8d7175bf2b5c7b1019b1dd178ee41565a31f30d10c1714c67c29b85d959551a0d1b2d73a1c63e4f262f53576c7c50f90093ce73f4d3062ede01f04e2385ac8776d620329b33e3a0719459ae2fe02099ee60ab1468742d98ff84b9fc013aa7452aee39bf6a627f4de9b077fd498079df2b7ed218f40cb032d1333eb6f8e00ffd314dc04395bdd9fd966cf56c40c62373bfd78ba6200355a35cf7c6a592dfac5694d9fde5a5aabb5981b11a259e19e5fcb2521ee675c1e594a8b69af0569f46f95a7c37ce2193eb08b165304deae088230cd6d2017aae27acbe5a03c1cc89a58d8b1db82591df32b32e717d0fad85d58fd64df11fb832e594a5c9473d7d0390bb30a4c6137ef6580201be4a916e6f91e8189ec167b5b6e5f365edae8ef076d12b4ff8aac06f40259c3133defbb50687d8d8b18b02fba0f07207ac82dcad4b2e84f303ac53ec25612ac6b783760bb27e05206e9618125aceb991f0094e3de8706f21ac13f57d0dd353c9347f2af6db3d17f7bd2cd0804a476f0ea08d0d27b75f93e3db29cdab6044c041911b3e00e98db766869352cfda233c83 +MD = 2cf431ad00ad7083dc56afec296fd6961b1ffd0a3df505556790459c + +Len = 98592 +Msg = 2dee3a58eaa59512a5fb3875d4a2e1dabed8aa88de39882988d7187bcf8c9b48a58f3e984446a025cd5b8e0f2f1211d14bdaaa745622dc037e6deb3ed0a9e49259bcdd498b617effe332c055c905f5e9b87c09859ed80796860edee0741d6671909e9ed3879d38862fa757ad6a2497084ce84e22800411cce7e27ac9839129cb945d099f00a3d4a4f8e3da81d917fe17504301b5c24e038beb104662c5ac368aab20a613be1a5d40880ed138df8532ff0cb8aaa52d5de4bdd8c1cb11011794941e0ffe9888abd841254fc43a44173ca6c86cd25a89dabc49f71c8f3f01794bd33554989728fe4f9118ce3cefd07423f6cc8a003c9e6c9317904a1c558b7b642d3714fc7664bac917a9b4c1bf4a44efd65f38bdb333bc720feb72fab968c5e68c6e7ab39f05874fbb1f29d9127c31a82dcb9e9027127160194fbdafd560fed9d720ab4478d30fe865c4540e502ce157e556e601000134661d0653c5103ace45f696d2376b95f79cfdde5ee7e123fc04e5493598a6c9ad8b03565bc4d1c0df33d0181515de15ea736bb66eec2d292bb515ecb6de813283d7b388fd3282b8d6aa4fed9c653b198e769794ada69d0616745d868e5af9035f5215e363998aeb5eb35a5f90afe96a8bac6abf439c97816448a561e8957706e80512b1b28051211d55d9b4197c50d08a1eca8157568463bd3ad5c3ea156101c7f7903815703f21bb98b5355e52d81233d2a020115dcd74cb50d5f5bc6421bda33078c2b2f0bcb5e184d42a88bce9fa2dd2d5e59a38d87c33948d3f870a1d0225b9b395b18830a337221fdbbe3feb4e21264f181a6f0f43a00ee6e8738dbf97f59928f93bc003b464797e8f296546d7b6d4f801b88bd990b8c5c63aa7776e46bad8be3878219db01191da90f1b5625d95e6b7e89d139d2d23c1177b4c4f91d51c7f5f998f32665fe57319243db7a8a865637314f18fc5e08a0abff4899e920dc595f263a87bc7898926259435f47e7fcf5416cedb88b87295a9a8ed87ebd8b65a225edfed8526f5a4b2e42803f34dab7bc0875e8385deabeba5b8ad6dbecb98862f8d5584d7ec6cdf204027cc3c7ef510afae0c120e9f523506d97e649fd37aefc2660c95fa82b6e27720dbbb587722372a7320b0ab63311ad4f2a6941758263de6d14e49744e9b54bf6b8af5cea2fd9737bee184e5920e4318ea6e24adc26219a0b661c7cfbae3dd010b7da526664dd9e17798b74394b257daab1e3dea79f72bfafd8e38922d552644e7fcf1e92ad9a42d868d704ed1e5ff201cfe0655e5ad1afb8f1dc4460fbad790e74e019e586aa125d308d88cb26ee3f42556a8766f4b8eab52569272c7da98edf3bdfecd57c877d0475117879d17aa5dae6d4ad57d9b31132f81cb9ebf7d0f64f38f10ff8fbbcf36c8af54c7fba6fd649f8c15fb7963a83a0ee596535e6be7fccf0d5eba680b51603f6cb8d235e4830fe0fb316fc96c9e29d8cb1c170c6bc6be6f7f11894a7fa45595ce6a32b199e5685a02c5b9d77eb9e6737b8575314755b0bc2d50f19de1711db01e926fd98dca77f3e9f9620961a17bc93df8f235c53bdc9c5e447cc9f75fc17aa35a0f1487db4394f7f6f1c9dcffefc1599d1881ae204af85c15b1368a1748daa7e89cc951c0d42675e4ee7eb87b4b42169d6e7bc9ae01b96dea184c6140bab770649e62b120328fabebe18fbdbc9636be207c8ce08b09c5daeb3a74468320fb47f79b4670a366b9e1315366b36bd884974dcb1cb95f6a06eb429e14ff88818d74c91ddd56f2778a5fe1cc6a622f1a14ea4de2941ed32c63e714cd9655f6e5553f01ab8f2ab56dec6c21d20392b163cefe48495ad58e58c3188c4d601076543bf0c7cec4b69350c65219ef990a99bb9a1d6589d8a639f610c4cfa8dcf8afd727ce450ce4c03529ff57f3aa94938e2a608dcc29755b7c0c3134086570d44a750122a0f0571143ff81c4d48b5df538b90897a6b198bafea40eb05d0d866eee37b13403ff857164db33e1e61b5af8406f7a831baaab8d68c58f7ff627858c44231f4c94c3d7a740c4fdf551e1f4634e559e99529b159a61789cebfc3bd5f7f34434b27bc3b37d80c2c74a3d66930009715c21740c3eaa92c41d3a97d2de77a49fd6ade18782b9ccdd7926d130a0951acd9d62a8858e84a3b1fab5ee7307d4ff3eee87ee98ad24cb1efcd235c981eb287147a5178f6df23b471ba42aa6bad5ab286586c97d9a86268c369692b9a0cadc634432e8b143ba028f684f72f35f43516521f39bbeb3a7853010b9108664fadead7a51447478a5a290cafdefe35ce698fe0c168be45f4e8e107285d6ba3442d557d34a535f747bc05227f8c9fd1a8629fa0d36c2760545ec3645400ddc7a6b6a6736643cfa9f0407de698627c901ebab610b9c67fc0f5245aa6f33dc759d3e44e78ae828cd62071c3b76f031d07adcc73bf091a3fee43e4272daa66c0c05800cdeb91e3e61234eaa71387e1199eb232591a35b9e05ecd08a986ce0e4291afc6955aa4ea73d4b9f57899577ecadbd866c6a0c427f988fd2c6240f2b6d554379045345c08ae943c3cb8a7725ed9259ce45cf13906f40350a9d1caacd2f16ebbe84e072bc10ee7282af7cc5ce39d225c357c7a08b95844642b88a250f51f777949204198961d33fa3ab6867bbfbf58b2c4b5a9b7d1aec2a40be756839fc7d50c3d6c82270a42014f0665544345981f2d2c890ecac250049cd58e65a935732de13f73375b9025e582f894b46807b00c27e77727b61df490cb02ee4e5658b9d894c9e4efbaca2147229bb5254e98af962f6ff0730e36f4ed9b3e777f0f6bf46ba3572209a90adcacca6a57356b5aef53c020a58f47cfe97199c2ba7648f1cb6d7971cb13baf4a08cd6eefb5352d0e7bb76c3d6bad72b4ad3534a47d2778ca744a3a4309c74fa257dd484021d799d3133bfb424a450eb8179343f80022f9f00879e6903124b9dc3e64fd40bd254124453076c1fda298335d9d91cf393d5ab6fbce63aa303c352146ca569893076c2a9affa6618aae584c08bae5d22e61e245d4af783b0ef50a99f57818f0ab66640d990e53cbfb4f952c9f5108a8e974dac51b86efe8d339826bd6d40eef0b286ff4cbc644a7586f99faaaccc3fa725f8a5e59ba8e5b88efe3c06e47ff3ebd37d607b68f439ca7f5aadfb292dc70cf0b3a3614b31e3c35ff76bf473ab285c979e170e4d21652f2c911033e0b1bb10a5f3278d7d96632e0508391e813f06b35d8d754ddf5867240d3168dd69f4a662b42b94a279430e693cc525dd93c81980b3b02de27625ba49afb00a602b62f36389e19d48e4c4200555a2a4ca31b2db55389a8334c7f5d8f072919754bb894ca3b5a983f936965272fe25586cd1abc6a13ac127ed4b654dc8f45a723380d3fc93b5e7fb3bf536103274d1932df9ff55e558b88e5456e07323a37f3d7521df8dc419216579872fe3d4881bf786114a13a200e5190290e3f3a11e745ba1f5189ab54dea454a82f047d97678e81dce088a57d1db7a80700c49c1b3de5f4290fb9dd7c2a73d277f03a6a1ee7d075d86b724872a0005568ab5eff60221aacf8c04f1bc15ec9f88b1e69ade4eacb7cdb1d27ca0a7f75bed377d50be97c2d0a12cd140c2c62efee6e2259eef156c9bc6f5e6ed54aa25e0cd0ccf069bd356637019cd059c41e2ddda862d2d44e1510601b96110e3cf20366e71278c1e4330d5b4d974aa9927acaedbf489c07020de88e682dd61fe755abf5a1b136ba67606a9d7c254ca59c5f10453d3b7e3015289b6edc8b86b053b4a0e18511effd4da2c52618ad9cf5ecb3450eaaa242f7904c702a0118e96889f828511c9b6e329ee3651ea99903408a60b26f8ce7ae037a63aee75f3dc6f090078c6decb57a00630a93acb550492e7c4c9f916d718bfddb549ed07c60e6ef70cb145f7fc8da0fa3ff97f8c63a3668cc61539bd4a8a08cbb07880ae2eb120e322b074c5d3d570866aab92b63bf9296828518b64af4b7592364b4c0194410f5dd0eaf5f0c7ab993b4f3416d15472460a4a2340a56bd960b1a536918a7d5a84b795e52bd16e9c85796c276e5623ab56c3c9ff0be806b064ba9bcf03a1604a4b90f02399103f14bfd13ffa1bcd5000d65516494fb5066cfc1d787914fee3bcbe6a5e2ac0159f90c2c34920a19f301f4f1ecd968e84f17b914ac9c947fb5e1e47b46e6f235a26bd18d0063f92546a632b814e6b4ae04e48ced30e341f1f55db81ff7f6555665ae63c87f5ab60855558e63d173bf74f7360ff36c45e0ce35190f7bc2fa1b8c2b2a8a84b96088e9a877d29a2b68d263b1760bcf67a8b83dfe7cb036aeda8dfe7b470d69b75bb9f0c875c4042bad35a3b90a492829f61267d7ee65f9c37ef3d5dd6db62080358f473cb52d4ad82a305b975c8ea7bb15367448d7f46c0ace9538d9044b511cd453138ca1d4143bc80bb3d4d2a5f424ef6c8bd9a026368ab3ba50f87495a494224c7f41a083095a6d0dd4f7d655b66c6afcd413afc3004c13ac45c1255cbfef05c4b0e21900d13f027fe688cf65959c702d787d6d937156d8b13ebd80684d356701d1f7761415f270a91010259e3bbbe8499fa0425d32b2e8126372eb80f46e2f4c08081e877d799dd37b163fc84dd1b996700297ebea682d17dd6acf6e5ca345ed7d9e7921b0de73454f2287ab76e7cd5d142dd203427e8d07d42d95f82edc912c5a40efaa5729d946b3bc640e5c030be5b3a95d6ee2fef22c6f41a3e7121ffa51c477e8e91960b620cf6d3ebaa7305b7873fc9ef471ef43ccd7306302af766ba3e5cacca79f8df419ccbc7e780073a55c7fb0ff5c985a683034823b13aee8c96be5c103ac90b77a7ad2328a0e0fd6d1dafd4de670fe4648a0adbd95e0b67dfdf2ece4f5c095e7308b0855cb447b60c83a1659bdf64cbbcd636a6bd833703eef7d21bc0bab5624fe9397b0a9e4ec1970c4f15eebb729c2dec394136cd284328757acd0ab347a76ccdca7c88db40c0ab2c0b7e3d87b3e616306533eb9859962aec7b6a83e25aae582ac5f27dd7e803a77758f71ec0a32a24575ce73271657d44a1467cd2d448d7a084ce7540308f3b1a52ca28f8f2bae8d6a582e3a1e4b68924487e6c6df5acc3c460468d7651b0b78252d17c529a85a29bbf79a1b06ee71a485685c1bbb2e0e34251b0a396d7e7096e0c0179b2247dd7e20993b9f47c51d10f4fff0552b8afc688bdbf40181fbcb13bd2dca9ae2d1e0948288394d499911e07893cbfb95343de2618a4fb70b58c4f8a3bb5749d10d0a74c70abbae7431f81cfb6d149563f57aaa907142e3725e024c7cb3e73058c50425d968e948315778ca64d6f4acfc955bc6ffd8f60e1ed52e172f5da1d8ddbf75af9eeaeca6e6d139f49b1493c7c8dc8740950692bf7785ef62a401aec8cac4061b00d7ec4dfd68e4a1876f186e2f92a7203c453f7fe535ee34c3e73588859c5f70e67910c7dce421da1231ab29997e626cdbdb25d5d0afd39574575fa1780f27b63716819aed0d97a623a076816e69612e59116b49a0b9458d9f98549a09e506f5ddf7675196abef0da3069efd161b4c6da02f3a63bd1cec252cf33bfba2e5a636bf64e9714185d11778a94e26fa5cca32977db9ac8fa0716403b03c4daad9ac80c5a42f845564e3cd8bd2ac8280f48384264311ab7f0c7c530c1781178987c3dcd70162123a10d036c4c8e09b11aa206b35c869e8f32ab4f8306f2fe1a6b79151ddc1aaa157513e5a0bd513f9164749efac55eaec54c0c25d550271346b33bee7bf2d2ebb16efd642493f6d22f594a5197332bb3e0b974d8a64166d963fc2f3a6658d17e7deb13ff5644f15a01856ddf073a706677e77fe8546f44b928a2bd897b8298cae1860217b464d34fbe558987c92fcf0ed17277d58e1e434adb53714c19e48b6962ac426ddd581f1b9c6617fc6b978a35a3d71710b1f2d507126ae502d0034bd297da5f422fb32756422383ad5d1644735571b83a4e719c665465833e1c733c8ef79cb33529faae78360a670b2c0080307cfee5a2d20eebf117dfc66e7d98eff6f86fe8c76a92f709fea73c96370ac00570cb29fadb4f562fe34649047208d8b310d05a695000a383f2767eff2c79866ad762ff92d8a76d8b3d1565a07837794bd74a92bb78e8366eb7f498766af135c91752c11b48ab948b8be9b6b31e996419c25b2c0e43ae1232c5ae33cc80f670a8c71738e4a9c05db9661fb6dcc3c30bb5586e80f25ec6e968820fbb31fceda9925d2ca19f7a8a4b8d4243d05e1638e2a700112c0818c70e889395a9773d6b531e500fa5ac496dc09fa6e2bdd7746f8b575fdfa7b01033040b70ec88ecd0e40f95364cbf8b84ef6f391a68b9d96cdb584ede266e7ac37f6c799050d40345ec21af764049cdcb939a0203626ed46e00fc060171fac8a110aa4b787f057b0ae85bc59696fed36bdef382f85c47390674c915406ed73a379b30099fd3a7849e6cf0502dcd294d1435ee246fb2dda7b4ab51e531697e400583a03c8cdb34d08efe9207923f638b234d0c7ee0028c810719290e4afe7a6a894e7d4cb61237ef4af1b3346a8a382e3768b0faefc7ee656c42b0e9039a362a317029c2a1f52b3150fac67f2d1a0196bf3d8e10f57f7db552cc7c1dd1c94bffac7d3826e71089374f7e6e30408b7a75291fe6598795b4f158fb0d155c18266b48ea2af1ebe0cc618500fd004b4aed1a03a47c5d1cb72ec9fd72c65808e35fed953b64bc26d27f50a0070557a3c4e415ed5f92642b30457faea84a5e5ec743072fe587de2e821c850f1519bef0a5f9f944a5db3749ad83b2eb200ba0c4408a48576d06d0796c2e6f409fac9eb85a9924881bb91eee9b73e4415e7cc7dfcba011da56644b8dfd1f8fd32b208f415f3c384615beb3806690843fd8302c17e50ef3f72622a7e2b18a57453c280942207da4fd484e7db5bb64233511a855f309218f5c50b46e0e25d96605472585214ab7eb2c27fad5e4e66941cf9f57ddf7c4a214686aac1666c6972c91c0ab9b654a857b3119566494940a507dc5c11cac93eb53b9d87c2983204e2b895d2ca4948c60e5daa0b3a25b30d1efbe49669a67e377adaf3ea72ff9af58e33a612b49259cc4bb5752c5078f495a601f8edaefe05fd182d6e1bf9220d061d4537119e1aef84b5c55a3fd1cd74a0e62000a70857c558383cf7617e89f4fd38f33118b16773b4f594428be4a99af68660e50d9e3b2610820d770629bdb5a386477a6f14034b25b32a1359b296d05e2dc98d67993190ec9dabd4502345bac0b048fb5ef076e19f9690b7f1631b7ea28364e1fd20c26bb6321bf88894a9691c5dfe9c2d6d469cea46cd149b1ec10a883238c9165c741f34e866c9f5a4722c7e36724623b2fde3cd6ce9149f0b0eddd9df4d2efc75d2142f689531e179276ab0e2abdf89e8222011b0ed9e44538c5f5c34acf6f59261b36e59b017923e508a780ab150a7363eba7eb9e099d41ec3f8dbd95c0b4adbab62bb64bd62511976f69f568d82c5c5d819dc30caef95933a111c7665534379378adc31c6fc66322015ed6d465c2bbd78a5f3bcb387d0db7910e9b2d0b827948d949a67d2cc19b2d64f29f8e4c52145a7c68b06a449cc1d085f0835a421405336e6bdaeeabab2c1200c1d9e70a7ee85ebe46bb5a41dd382706441a8e975d4dfb9ea0db015ae788687b48f08f1e9dba6cf675c72bceb2b3238895eb3a89e2c609e0752125b90b42a92af48de6f7330d0d8b726e5f39b1d54e83525fde88390fd6ea4537fc448afd4ca6610c7f32d352a903c91b55115f11108cf602fb10c47deb02bd99d59bfaeadb53fae6b83ff31dd7e5e658bde41ef9021c1d5f00b219b2cec03ac1421dbfcdddda3ec732ad16e102a86690ea3085ffaba724de9ffaad20faa94948d2485e08bcafb9087ed8b32ec1d1a66e7a75088765c4a8fc2948f35ae734659b06ba6a1e002ad634ed615c699de8424bdf203b32d8eb16522d3b80c32ce81c224fd2488030f232d71ec57723ef52a6b398d072846d80f95b1c20e9fc244ad9892e3e9dd1c79c3b69737397d04eb7603037f462feac2cce8186c7735875c32a3a123dbe855c6f7c569c0a4311247ceb3c2d0a61041d55026ffd6dc18a99e78abfac7e4f0d48026248f8e7ed491919c441e891112729804170d0a268e4f92e87844d6eb3fc12eb799b0a9b1afa852477fc1b16e7ea6944e82eb0f3be0a1c1e8d12859d71b455914ed741a230a801037295050a59c044f973141ed0556c8b2e1804e5792cd8888a4e885e8be2d4056d40d766f9db4b55348eab6ac6b37eced3c4b5dd8039cb143cf51881b685f11a986f2d914400ee028c776f25554cd34fb5ffbfee512d2e813fdf228bc0be91b93b59f214a75f2ae547e9d9ef0aa5ec963b458d884a7b6577e96910bd28e13859bc9ddf71624a74761d32662835433d3ada12994c0aa8f230e02f7d965d925784a2a7403823576d2d730dbe5183a9479629038d99e03a6774baaec3b7ed4671b26402cec9591a7773cfc82d0b644c8e309e84b50289b4379bcf437d823672197b974cd5a571e82601a9fe4ca665a193a2a112ba06558ad51e949a25a5f7a9a138b2c1ef7d1c54eb2f881c97c2f64cda64d73a0725d232e285a12f36637f51bb822d1e8680a6f55985f0af98d194a2d4efb76716e19e50c2698b5f3a7b5c0ecad08ccf3580a02dd38d6a23ba62cf4815bbb82683ba08490722a9c6ac2e0c3551bc583076dda682fbae5b1586f714a11f416ff4b82faea0235982d2062c0e79e2adf60ec4f81879347149f198fef3524429355e3ea30fdaa966bd2dc2d5e120e01e0ca69a707495007ecd443afae9b046dbaecf81c49a7cfbe2af268cbc12deec95029481d7594b021f4b8a176b766f79c132c52bf4dcebbd45df48ae5f12186a9b5e44f58d252f9bdb4b3fa8d117c46f7277eb87c455cb4018c420b23f7d41eca99654701266a7405b52e159bc4c739a77d48f3fb3838036d4043b22cda30fe548313f7bf7ac4691f7e8fbb49d92d17d49df3cce32e4af03f005f49a9a21c6e6efc56293bd54820339840b43f57982aa510e808dd2f7ac2a055fe9641587fb5408b96a31d3fdee06a89a7c82446efb8435d8e729044b0c3b7c688639d03431cf3b83b2e0cc06ef3ebdb2ebfa1af1a0ad60c4cd1a574d439addb657664ab4febaf0bad92b061e09fdf153c605d99006885a68cecc3c8ce6da91cfe973f588b6a9b0d5597b2291c2d6ec03874010c8b1978b2b58c934686a7d412b990d613dfe0e0459905ba210ae5bf638cc33410a267d8b82f79bcf8e52f5544ff28d0e33397a53be2a36f4f930efb869f159fae2d98cd40617be7e6d14c553a3926d6d16fd51378993a7abd9df149b2d932e9ed15f57ed3b55abc173347fc7dcd538fe47be352832492827311d7d26da2e2bbd640c614f892dde293f46871942577a4243f0989e4ed733077d806be4262ecbd6f9753b63860ce0262faf7dd07a75abc99a48ee1245aa52cd3d8c734b6811996c202e38d1a88f3c38d2f3c675fbdc3804c90bc81cad5ef1d8ffb615c536731efd76ac0c1267014ce1a7a7f3823ce7b9744ecd9915ec51bacb1281e5fa07dfc6fb4b53079e481fbca14c20777db414bab89a12e3b6992ef8043474465252941bf63cd7cdddd236f6080f11d4d1080f961249603a572a334424c3f1c956bd4ca86ec98ec1698bf373868ee09e248f24d631cb2a0f70162b199d5faee18f9e75d6d5500c74c9dbb1cf9d3a1135d0eff115979df4c5a9e36302ee55f021657c8c31ca8ec57a67581e64ccaf283e7e70f0bea440450f6d28777a884569fb60ee1c43aed43e24da7775dd854c9a0a75d8a04bf8408f4f224be50b0bac70e20a599276f2aefb169bb074846790eb3c6f7d9c58041d580761d4181ee909a987da457b66569d70c213a98713d41a9046b3e6213d483523cac4379d2090db783f5948537c1b1e33a9dab919e66b582dbbfb88eb963536770ba21ce0daa3a0717affc8a732e0bfb8506965c9869dc8280eaefc57dd6b8fc63c83ca9f8781d709ed464ce32527d073384836027edbf8f3a136b7029d5bbf95eff1e705d1cc1db5e8b54b93bd512ef8d3efb05129a64925362b2f583076346a9864e8d023d2b31a0fd55b35860cf9bdb5d85b32319d57411004ebe5415b8cc8c865466af846558ac51ee244f9bbef46508aad220121a1bbd15c73163a6c2714f27b9652e98763acab0a874e92de6e07268f1cad22c39719ec8a3b87a638a1e399004f0462366be42420a0beebf4f484ca5e20401103c5dfe426cba5ff417bc93eabd71beca3dcb5b2e9c5126f8021539e605e675662ac623aba99fdb007131a55c6c4f5f37044b5f9de6af5981062d8253e3d9f5d50c96562ae3ceb62fa167b70f9af2f112c32594b6718b4e01637a6f1503464b05e9b4dfe7a1b1b82bae44112bcec23c02804143a2c44ece2122e34754ed933d9fc908060b6bafa999a0b2fbd7912707b04587b3886761a1894a4f54372a2a944bb57a13bec93050248098bc3b6a891cc419df2e91e32a8fe0e3a8dce7417117b0b3f24d27449c767255dd9d80e15041e50531fae5bf1360cef6d5288cbad29077ce58fe6f635ce32b276be6ce7ee43fbb0f6560ab8383dbfd89be804d1eb3c5470b946cbdafd65ff8fe29df4ccaadddef4263a80cb8e2c912a74b2b52f47e80c9748edf3aaf73b281e3ffcf234c14e529a3131a2fe597f2b8556473c4c49a87a5102fa10eeb9ba36dddd5007a8c7f1d103c5dfe3d920c1e959df19ecb176fa282e75df960ebb7fc64f593b87a13574f4d142a9b5d47a8155186daf58e73659b0802012e58382d83103222404b6805418833603ab88dd39e951807c03663e439e068048920596701169c68e01414efbc68a2e92375ebf583095c6047ea6c5443b2214c52ddd6cb3d213b4edffe9d7f879568ab9ebdea768a5459ced1d3181d822536c3d1ba38c301d718bc87308d1c6cb88d90f3b810bf7c1e1837a818eea7bee2ae504ddd05b613e03a9b1ed26b2d31791a7f698de83620119f8512e3765bbe9191da106ec80c3ce5a9d1ed0ec01c9f7f165f4965f74440d3f89e5859399f4cd9e84b6096062c448e6e483c0a13507e73891adb67c751a20c2b6cc2a4bedc2e62ba8a867c4980f38290e653eeec3196fc7b9767bcdfc60f653ed597ec8d7b2dd50f7fca4a186f116a179579e3d327aec3f5be358bc7094f853bc321582fe211daef127325fc6165ed0c3cf711519a906ffe778dfd08842a16291da6112b7ba218632bcb377cbeb8b476c3159fedf202a99faab63a299e68bd11cb6f3f09ada83872b218a820efd2665d111bb53097cd19df3ff969b2bed024fab4c40852dfeae1258fa3a0705a7bacc910517da1f2b966c61e9eb22b4e2cf3ecc2ec978d7b31bc83aab446f5687b2ec3a7ff1cc8698d395c30ed3e1db542d2f0dc311242e8457194eb92c23681999352be6cbd2d651339aa5b2d35105bda670cead9a2fa8eeea7603b873dbb0e9e847f3ee186594f110fb788a8bf8aa8be5d4ad52d6e3bd5f406f080d9df0d7553a8510da69fd38d50628ba0a4021504b55ab283759f90251e384ba4d1cfb3207da8d0140331238998db2f896a2938d786064bddf95c7ee635e2798db7363575e72b043b4064d2a9b022aa2d425a7c89fa0b1dcb00ce8f8002af8325d33b1cde58daf66ba45f675762de047273bd6782d90e3036d41c4a5b4a4470526c07efc2975dad8a784b6afa74b74642477c832aebba8d04bb6f37dfd84c48feccc136896d5b3181044f63f9af57778404bc58eaf7b43b1ffeefdf75736d131039927a9aa27c8b399094dbbedb639f20f3a86c28c7a7426de5c3c983e24fda70fca2415ffe69c29964425ab0c086c6fd5c654a4d2139abd8b7147d73ee9ba5065d18163f49cade88c88066372566f505871e77c2ce127d47be0984ab5ff97abaa31c7ea24a46e8f0037689bbd4ab341fbbf97cee96dbc0a140cb6595fd10637418d803f0ca86e7b85e4d4aa493fe8933421ee238403c7cd08681a8978f89671c02712c929132e3c8212d315b2b07fe2a62b6310a96dcbabbd854d61bdf0b8e9aaa1281ee67f1e408943dc746646d9aea64e9efcb5e64824a7d6c7688b33fe1d658e18b6d146bf360fea693ce05d8655c90dea6e2617bda65bff01046d4cd67b85406d1775f4917b8a98f1e5bd8f268682dbeddb967caccf4e4092dbd0a5c2929e5aadc75113359f8db21ee56a360aaf785b01db738f95fdf35de54551c942d0f54f532cdf2d0bf08dd848d252fcd33efdedded449baf9b0efa980d76d41f7d54ea0e5de9cac954d0f7df833244df0c3a816dd5c85994896a7b5ee088f8a221deec1ee52f61c51d38705a56e4a93e3cbeb6875dab3a5130d9ff5956f351c81f97a54c50097f6d2429921f90a22893cb65c4530e56068e9944d0b0f61fa73681655cc128deeb697089a353b8d68786c215f5fa6f2f85f2ca94348c4874c2974f3258a4f4166e600942ec2157e78fbe28b88fa4099f7f26cdaf7415d55b69918fe5e21e3d19d0fbf83ab5aff43d08e40535db78620fbbd2aa7fd872243a66cc4b6642578a4ed9e1445b46251740ba9f6274219f04e5029d67eba7ccbe7a7ff18a9dc076631f50baf58be6ac49586d98465da941778b1c2f0eda2b4a29847da85572a4a450f3ff3014b4de6c10ede877b9d8ba844167d131a636aa15efbf2798b3cd3508da33ace9a7bd778cf767f4e3c3cd9d93ece3e94b38e66d549792476aac96bccb8845208db98ef634832e59846d249b9400652b24cbd2bc30aa67a3c648b58114e39223c54f0fa68e3eaadf03bec5fab00357606567e2dfd1afa505529012cc0c72827d397328cebfaf434d08bf98020e7f2050b514fe1d5e2eb333b98b95e5dabd7ef5902cc1b5f25e626d3a7686fdd7fb28c3bddb0ebf00b0fbf5a1412713a84cec547283c2a44dd46d0542ed75313200d78125c3fa0ddebce415b3bbaea09ba83562897e13e3f898cedec72c4ee74815955194d5aa4f21dad659960013d2dd58c2e77a289cba1c32ebc07239fa6740c2cafdb21806cdf092398bf2183ff296e4faabf0864671e12b2e73eb1e60f9438fde4b2894f7cf746d7671710c1947edd5447591a2f74f6e0afebed9e367e5790539049e51639cd4f2f3d4b9e3881b0bb10a0f0583989dec57c26ae58ef97209ab43f0bb58347d39aa197b72a576b41803b33ff53112a4829be43fb629fdea1c0965d628b050bacb1b5030455bca5b3b50a7ce09b54ba9595ccb05f5bb5a93d9a8057f8d61a19bb1cf01b9d90c6c589c224d84e8162df79825df84494dfab6690f8db490740d67144e92dfd8c043f364000f283b5c9fd5687b88845be6c49af3c6633bdcf07e681b1e6d6ae77f3974bb735484a98f888af1e82eccd28ea089a056f1dc17dddbe4efc9f822b0523522c802855edbb8d25f5af33925574d76c998469d61ea430c24b7d79dcfdb402047b435087f78df649ccc251157922c2ea3021ed190fc2bf8709ccec3381052e029a69446af290a26896e041e2a2a32b15f0667f433f69c8910c638d126f68f5e10c7a8a7b59643006d691ac966c868e545cea86e107f9fa64b5c9c316135ff82463ff8945b6691da92e4ef78d213d4b39d7f69a6f0403b376a87834ab176aa3512350c736742fd9c3e08099437b48003ae4433069ae07825b56e7484de61995dbbd16dada2d18d2ebafdf2865d5274bec1438cf5d8085e56743af747af9dd3e38a3da2abd4bc4b784eea32b50c96b7ca1ea4ffdb7060f6b3ef1294fbedd360b0c79e33d4c5aa3f6341f74f880c2750110d9011212b8f47246e1fd40860aa49abba1fa98f3c4470d5dd4ed36924af4a7ad62f4c2dd13e599238883ed7d0cb95bbaae58b460332e6b7681446bf1ed3aaecc0a837682a1435e396765bce05dd4ccae11b6160e01ba9f22b742ef1c03d7a5114245a3afdbae201d011b156c68977bfa5e7b4459ca7c26c6e941569d395c2901bca3e0c14d768d22e80cad8dd771c813f710a5cff7f380f799c828e1e8288911ac36a443514d040f7ec2eba104e46faf7e2ee0fd04b13c293b5fec86badd63c5c36664c29192132757c636628b6fa111462e5c5d9b25b6c0507107f80beb379284cbb8ab88d638fee59f342ed5942aee01879e7e05d19f718b9401b265c2830c52cf068a9199f41abaa66b826dc25b9a12d31dbaef4554a11f31604252f3b497c008d4cc664dc2ff498422e9deaac1ba0c9950a0b1e154d3bdf1ba345e0f6ac95ed1ba0d5172241114b110e1829ddba25122edcbe8363e8dda2d65e4e176141581d21cb9fd9795f49ea5abf6041c27f773383ba91cc46033e67cf9e077b83f10cb82735ec53ea71e59ea6a93ddb6352e0521d0a4aa1c786a7548fcc39b564a2fbe5b546842c7c5f2d8e7c34769fc61ca6988235b2a9ec5960919d4eac6d0c3d6bcd54662e0d381169e364c8d534f5c3122c3ca4918dbf65b147818e284a84aba5988bfdb49e2470e1c4e6cd2043f8316c36d3beaff54890e29ec4f275f4d3d2f16de373dc864b62dd5a8bab2073d54cfce0cdead3878ec33abdede45a14019c9674e3306f6eb2d0a4ccdaca9d6d96fe0950b492c7ee99e702cd84cba15217f0ded7139c34fd63a37f435c935fd8432eddae0f1d51d071e283f5120f10551cb50fbbfb20f5dc65c1b6e7976c2d5de2c4be2367f33ad61f9e025e1e1770c618d5724a242278b2c01491df15bed0a47da7f5d7437c49a7aa01ca2f304d884c13374fac150c86287c8357545ef211541bc1caf12b1f48ec1af52291d018229016c3ee095644e7e6a2f5526df86eb615c5f98499a747fd4c776151ac87e0043928619688703463933a54c8536d9c879182376df940593270ca2ca0a7dc0ef7f052f99151ea42c2d74a87022d45e34e6d5a63cb367dbeadff1b4057ab5808c35d9b73258d4cd8cb5cdc76482406aad1545566e77be7de37a27084bedf813730270bb79b641f5d47c7f709e2603a5bd9ec7c2609ee04219701d3e01c6ce20306f7aaae3bfde939ffc3a4281708685d2eddd68c79b75ff097c34b3cbb7900d50c74813e4c8135d3b8f6eabb3045191898d06b807eff7db1fd90e080e12f65130b479750181788953d08d1aa753ed4f4df6d44eb61eee8ce92129b95d7b69827cc17f4cde5e86ce655a261dd2e1c2159ca5b68b36bab27ad1eee8361e5352177148da19bfc1c682ec76ca33ca30688af2343dfc2e15fc2b869cfa1cd52d4896dae51a5a4a5da05d65c0d9eb01c25925eb0ccb2fe0e3141553a5bfbc168bd566f610a08ce274ac944dc2e5a1fe0a0c6ce3a9fe851394a2dee5a3a9c266d1513e7f460d303cc953ee10f76e07338a0ad67886389a2a9d10eea921589e2aa07453c30fd0d2adae3ec15bc8e37926c4dcd9264c19ed8a7ef6ab1a894cbdf67b876d6dd86be2b9a5b5a49ad1d6766c4ceb1b594612edd7bcccbab645e6b03ec532d1dc3a6eeee542610e3a8cc79d5874cde3ae1ea41986d8fb840901c713880fef379a903a65a506b964d764374c9ffeede871305dff1c561bad8f275e3656ce14f525845ed59d55375eddf29602972dd3706f25911d0ca6958db5412cb72f926c9109915ccd32c06342daa2646dd2940741d458fde1dc5d01ab17c9a30466cf2e91b321b4aae9eab5b74a1e42dcc6c401a36d64e4fc0febd88c232b61bcb107038dbebfe6fd3716b72298a081de08305b3b86b3f6ba2bd592b76400e93e82cc53db98e66432aed6d02b62e3d1e00b5b6c70bcd093aa94acb8a366d49a085071c801be1fdcf9b5cda9282552939144b7cdc97c455c4beec3c2d6880104a8bea9b8a6aae681a0f04d9abf5c67475058d7e7cc318cb12caedd49d76420a9ae01d6ae20fbb522c6c2f93d4774bc7dbb9c3e52ef990122bb393ba61c67be0976de8b21070d0610e9c232f9570aaca711935d87ba1f5d31763271701c2f2394a1a939b9df7b73dc78528d67648ac24410d2b80e9210fb5dfc0f01206d071beb9d0654c100b378f5f1188b00067197d537eec0402e2a6618ab438d4f75abe17ee75a7eef11317ffdf2789e4ba36b97fad52c18d4e4c827e202645855cc7a2ebf1f2a2a8c97920344eae759b2d1b54d05973f24354c86ab5aafd614bbe7fe5e2c8309ba31fa41ad7b49092fcdf7fb1185fc7c74d9cbc28ae2e23d251a3ea4fa57d16dd067bfccd8f1ab429305acb9900c53887d4ae918210b77fe0bd9670a8dc188baffa65e900058702815e2665d42f95ad7cff13b041844af9d5b81c79b72f9f7958a766d37de10362e4afc9b72a4fd70decf7527f2db1f179f769bf6d45441cc7213405220aca96bc984bcd276305914220e3f3680d40b3e790f906b41ac6965d52cacb3e706849f8e659ba1f46fbcd3360ec7ed2aad8992be68f79b6fe5b162333903f90766423fe160116069cd992c8f43a7c25cd22a92e4154a1dbb9aba3010bafe97ee6662cb6706d6b442d46e9e923f475c83cc5edd6eb70058c125f45df244e517187156d093cc24041c1ebd87e3643ef25c06a6d0c2b0a2e2fd31f04a5c49600d2201aedddc12b1e6420706a6f754e74a320b930b9484aa22ec292e93b34af7d077a1cb51c48ce8c17117ca4a4283e8baa26593ec38b59ebefa861fb89bcc0507a5dc4cbac19d312c25eb79006973abda298f39f143c5f91dc4c344377a3f1029190ba39777c6338cbcdcb357b0a6b90f33f2e5c92a3831a5b78b1c7ee336c1ab6dda50763b9a6879b275d9becc8f88e06e3b37b2707ee10d6f28391d4b25620500a2e3b5a17c3869a3318cb421a0a3f414c2907bab2c8fab48350a91369da9cc7e0fcdf43dfe2be30bba1cc6348c92a0d41390532ea38615df3c11591a01d178227b8fa055a2db5c685a3a6399a5cd7d38b8b7f79f866cc390a7ddf389f4a19eba709958acdcaf5c25bc462ab57eccef9f2c67c76247bc3b0902d0feead8728692798b7b983e1068e03ac07a0c9a098e93e930511b59fce2a4c78ab9d13fcce64710c687ac39b6e9045049d0236a1bc0937992132f5f9760f0707bd2c1ad392444b0eb0b5d41fb732eb742db8e716c2c3a581d8c12ab242c789814c830731fc727e469852ff9668dbbba3bdaa2428337e4ff232a69df1bbba9a8f618a25409554d25b273a8c280af27f3a58c035ff95a1fe9538c996df675002d90329bb28e4530ef66653c3fc24e1fde003e261c273967a12f1135ca4d0f288063a48101172d8fcbe5b86eb3b3e0ffe3ec8f8f19a52c48b10666a39677e06f6be0ecf6d22c549625c10bc4e0ce1e449fcaeea2daebc93f9379db87350f8f612ab88a61a83670f09778ddb329893c8a8c1bda05d27386b +MD = 32252d78915c3e644830a57d21537436a878d1336b2218f9ad648772 + +Len = 99752 +Msg = 204f4064c13b4a128c9c27c3e3986d81372d34d77cd32790da5ddbc0a6215f09905814171ec8be6d59a0dc64c6a335709788b4a623a1757b94bc20cfdf47762afab72945492af1cc594adc62d075e6e6a41cc9f48c6916afb42585beb5d88995c43228f629a90ab7f464d0c5eb58a769c6b11cca9f7332b4a461b1970f1ec2d35892b932a88f32b692b45f96fe92a083650e542f4406f010ca384e62d45f476b1c9e8302ad2290529b0432dcf06cfabbe9fc1a2c636c784d90710125eee440e57a202f6d21ac4d12771af09fab2edd99bb4316c8e4ebf3f25dd674ea44f5d6cad9de647cea73907f8ebe42e7162070a641abef0bafcc8988982d4fb8bed930a0a0a2cb36f1c0821f48bad0bd198adc69e4fc4efdac576196ab3f399844da78f239320ca31eda4a7d0ed541289cb3486b0cfddaa7c4d3a4a4fdd4db90be3ed3450b56cecb5a0b121e46d63e3187e4dd3222773c10dd8a793bf6b4ddab144e6b237ed8b9b78b99ff8c5a866edfc265c3488c321b40e0c209e2fea6e6ee2f526813fa7f766e9acd3b4eb0ad7a3a367e2135b4f62040b6c47b217d739e63f592f29ee712adf870efeeecb213094ac9771f7f008bf31745d8f880dbe3af114f552f4aad5a055ef3473feec67fc4186497e7b0dab83bcd7745a88880bebe0025e54aa2b41f27a70d1c57dd56ba52abf0279e4fa946a06b3355b2c0d5cc76396088692b6528bbdba5b85e41c98d5d0b536f6fe5d5feccf8604e3fb040d57cc3e687b56f263f6803a3617ba087bd8a4177b780f9c6a5647ce87976e12aa07ba6a12a55f5602ad625ee60d684f81583544247f913e3061300b21e80dafcf619eb78b871457cb2ae4c70fd9874845cf04c9e6603bc96e87f8aa68584231c9ffe99527b33e8e09f987d107fe9f993597832725ec67a47125025acf5ab45f463d3b819b9c165f6b93bc2b630f09a8dd5c40da67569d85c4d2fd6acb81dc7ea0a4051b4bb434425c840224a56d6dfda987ce521f4145b3e61c4a78e140131685bec6a0bc9e20ed4934ea6b53ac250e26a47c2cd23f18d5516b69f3a527f0cd51f800e062ac54a6de30e54dd24dd760d13cdad914925f50934adc699b9c1df991ea3428d28168057802836ab5b4fd8c45ab7ad55afdb1bc38253259193ec321c20fe108809fa38fa32435407293ffe6d09adcb019e3988e9c94dc30b262b8ec5ed397fdf169bfbbec107b4dad4d57172e6560e7e5c67c3e5d146a9f0bca479fe4cfb977a9721500bf41e600aa53bb839ba5b7eb2318e541d62e4dd269b7f7d2f07ec6141d4b4c049942d6081e4965b2c4c63238667d6c4fb44cf69970be522bee4b5e41d147ad2e069dfba25d911e3b1661706e245669ae53eb0542956feef14acfe29f4a19e0e383bd978e0ccd1d732ce1f2eaf12675e451a2fa7c6c3f16c99266e36b0c146fcb9d2c6a2990401bf164d22a3d3170099829ef3695599e721b51cae1537bd9b25ccf64c3e38cac724c5abc96e389c5ad20493a5a2be210797d15466ce73ddc410d76e1356a4664b8ca7b0bb96c4e89c9133c0ec5be9a37a5553983d674a68e9454403c4f1c720b6822424a0236145ef5e77ef719bbe6667e3a5aedbeaa6a8344d797d0718883f308ba4ce221ef6f97bc238e6dc6a25b4f7ca2d5ee95e6ee3cbafe0a483d2cf0de0318f77e78e6b4d6744de6ed4d006d3519155720fcc8a62d6f3df3fe12784d0effb4de7977ba889dc6dd14f01d6490c9fc084b0f43be16d7ea2e018c81f90d1857146e6dbed94f501c379510c83d6a706e021e241b35d4bea434af5e1c3d958c81ce23c5bed19d9ffd03f3c9de095ecb07896ce9d3de546445e859fd41a48ade3838ab0be821e7cfd1c89d75bf36e23c5104a3db1df62a4b17bf9de482cc517fc2fa40cacb58c27242dc0ebefc64a936c30a5f625a3baae5b230e79e60239df3ca69a16cf8d49229c8d4d4000610f85ce610fc3a091d6ac6add2c3a55a38a4eca72d297cc123eb58cc4969e37caa741132af06acab09ee60632bbe73d17a2aacf1ab6564e4c53281c5805cd3c0bf80f6214b0b44c08faa355a923494867673b7227ac1dfb4471c276d30194b62cec37e3a6b769cea1d32d82cacc281c9ac34bdc201eb27b017eccbfbdf1bd4e336a00c0686e51f7840fcab31d1e4c61b89d20348d73de778b638e229c3f0eab2a59b41ee23b3370b898c3112b827cc0cadc03a3f7136997eb0950c5fa52507618a399289d87d9e0455460c37b5e82e0d76a3c51e5661b8228575ad05e924a56062ff70320bb09f0342de8f1951b246be72e1365dfd4bce14a34f36c5167c6f4fbe518daf33d8c488c0aa5c502222b060310d0076dc5135b5a8a65c15a398af7ffad43d39f772a8f55d2dd6549da5e5b31f8ba6118a1e9995e40f6f6017060081a6fbf16abcfaa6e976fd9f9f2aa87127bce1a9867d00642613eef33ce740ecf5513d5cc9fafd68c5bc8e1aa86fc6cd3e97a38d7e3ba32ff686c98a24aae5cf3b781cd1d047e7492a8c53c9f8c37d74582e55c4412c735787db23868fc84141d49a2ef3060a44d27874e34028cc28e104ef5ce077e60d654a7f818b06c5ffcf4125c822e3e8929f4ff4b0ff80e0759dd5593d549afebde3cef2681a023a8de211a98d03e2395d0a018a416ab9b6d0254a0a8bb322cd216d75b24b960a8c5804b693f1f89993009d4da429143ba5c4f1c361ac6e97d7b43cef6da08198320aa1b0837b83727c29d384e0bc8e7f43c0ade1fd33f972a5030c8c530b8f33d1f2638fe6ae36f56b355737be802c0d076f94164b96e63bbb7a46ed20f10155d2cbb4c53bee859ac6bf72e6ac189f6d670e5ee0cb69a76b91a6668245d57a86bae30fc0f1d0e1eb3524b10217fa3b08e93958c1fb10cf7ace03f5dc304d6d3f00d4ef23b6e9ee6f3d01bc2aa0899168147d3c4a6910d0f1a71f7f5b8ead5bf73b0ddd6df99e0d8f34e2deb0d46b35236f5653ea740e3e68d3556d90af99b937c01a54f01851c1d3b324a3450203889350314a12da5d6a38c9424b1c117727893676d06ab1c9adc53e63a457d7d72e607dba8953da8306fa0f62824e62ea096414affa3e445a13ec4d0c5c59b47a78e33e3e9c4e13137714fc32bdb7f256e140d1221cdb5e87b6b145ab35db36520ac41859fd3202835d22463f57e97e4241b80289c2c24ee6e8aceebcbb4ccbf2566ba28916d037570b9a43e4eb433530ad220f237693c3dc3c477ead673ee3dfde4253388389001314f59bcfe255d5a686278d9bc2c02bec24099c19d4121c7f24f0a104cdcd1b2bfbbca46cc7a1ce185f20d46f11c8059b227bbd7e5c76e454acff126a502ce7164267f42815b79d0aaab699fa0e2bdf7dda0669479acdc9f4e8b63dd5b528e2766b8011ae56f7a0f1fb5134d8f26c17e89d42160209974bd46ace79d357319ba0e98d734c05f2a862c3793b9878f95d8ffea74a3a1363d877a5906cefc0e7714a4ef89fadad28e1e1959724a4fc540eb870be7c5c52a3fe631bb47d878cab11b70e4a0d2fb71b0bd2d453767b171caa1685f032e541e82c0b5fa32247150cdb9b9a0a326eae4974cb1206a7a733b3ce0ec0d4f4716b90fff4c3d4f18af47d6d5c94b1a5d70d24bb4ed1593ea5eca9d92593e5476d2a4ed893fac271df958d156e60c8ddf55e4d5db29493b1f3ac7f59ef819982452862448d671419c192bc826590b851461c13cabade7e981cfd94cec11c7a5ba5c08bd2258b125fbd567c22c6a718a645b11880bc0152678e4a9ab64ec6f039eb9d2bf010f975ca4f6b4c850606622370d7ec1e2acfb796c43de19eed03a383a318b32cc41486dfd44bce17a8511d7f53daef01ab7c36ac5b2219f720750cef58bdb1e6b37efe070862415921f9b3006b4491d9a2a9281ebfa1a44d8d7d84d36916c8cc539b23e6386976c80772bb5d23af84e4a4d934746e370100889fa3b6709e383c48eb90e400abbef2cd5eaefc297638d1267eb433e34cc0bea64e022efbceb0c4f802dd86edb38a57f8000653c9231e1dac2c5fe3cb7d53e67b2af8936722a2e4e55362555c1b7975fc2949fa9f40a538aa447fea63234b065b992f9a4f248f1aa56fb7b5d83e0cbb5e1ce26728598e90a5699cde66e9069cdc3aff9a106ee5d49cba565eeeb5a4b6a26d781fd0d80ad4220e4f36233927288162e119574c47b14fc5b6870bfce1f64d9d738b4546da71b4950f68448e2d27dfa38c9e8057152f330460e4bc8e34d8d42f5d4fe2105de7b1b0460b377279193b9f5aa02819eeacfb18edee7ce42dfcca95adc423ef05a4cdc29b8568609b8b49a8c3b4bb0f24c8ec55a60ad9992dc08552ed8ea71d72374d5e687d73e324ec7e425042c5a167f1ab5d21d03f07c4d2b8f98515d836242dd4e64549d67475bb3e0ea8e0b46b18b59c9209c529ca8391c9fc0ce033c38be6d8ecaa710c9f3e862d60160513d6c79354869650366bda8c3cdcfd74463029f0edf4108982bdcfbbb0d92036707ef50957cd8017c1364a30861edf488c267eda787f1009d57aa9fa6cfc6fdb36ce11860ab92f7276e4430d3a241ae371f10b11fcf0116871306d90b62c4d89f34eada801ec2cf6b3e065a0cd9f48cb943a4f360ff9ad3be2898b3d20fb51b9226b39ddc1d8e12af4a51269b4e2d1776f6ccb9515fe3beaa5e0734e41ec14ff40be4695cef1e475d5bce9e684915d5d7ff300dda37055fb47cfb6427d70ffb2cab2546e8de9bf6dc3924c95c12d450422877f6e3ce273e424c1e4c8482c8a7a4ce1c3d68302da894acfcaf5df0911020374a7d546d72e4be9415f3e36613dcc33c7455c42efbe3ed7cfe59542d759bdaf550a8155c0ed88e1d8b622dcc1920f1bcd397e4202e324f70d1ce2a0fa77bd62a32810fe322a21caf269f48fc02fe9618e209b14eed1a22521e16c5df4f387e9e9710284ad6cbce128eb41e3ef5fb1a1648b511ff6125cee88c3a0fe497583918285c49d853da0e0d6ca896da1aa1e67fada3ed7db2dabbfbc441ef68a5656e628d6d5bd6c1574369688497179a77601abbda2e0e07c151526d334cb1a1e787426d4b448c48cad4ee294f0b3f9d05f1b11862bafb8863f9b730191008b464eb8170ffee420ebc2b645811d9984ad4010a6c437b8c5f4719f0b5fa22b5066602e73f903f403eb5af939cd3e96bca6bf9ef60855808b1f61bc6a3de6a00be74343b820621cdfe3bc8439e9c23ff45523f269b3138b9a9f66501a3cdd0310417e947e0697b3376d8de3b06746f9ee2123d77c64f05e56cd161695cd03c8f02d589d102c234b8d01359447b63b58ec9325aac89e5a6d5250e75c577ee9663dd397ca2901836a53174a226a572dd18233afd8b8bfd03d1fa360bdf9b30c6f5c0c82a8231746842c3841fa92da8cf8418b390de759e042013d08a7d719cb48dd10cfc388dddb2d6aeca3994bb0e731acf247a6beed1910c99645a68a03d4973388c588e4d5bfcab1acf58b1f6aab122711523fb9f9d92dbb47be368d1186bee1ed0a74a19f62e072e19e5c6878672e3250ef355300aefd68b9c8c45ac370348ab61523598b731331232469c15aa9ca61498524348209045474fbfc6d8a1fac706c6bf1773a5eb77efa2e5fb491c19b3653aa88b8fe85d700f1ce4b4fe5e36b4588758b852c9451aedef29abcbe6cf52417d5df6af693f9e0c8c61d7c577a157c82d84dfdb29276633a379734210a8cbd0e8d94c4dab1c1966269ff7d6f322f77f3faa56b9cf7aa1ea453f1c57a08b653903845514b7de27447206dcd8daa0dda44534e392c32414395ee26fb1a05f69a556c7d8a9946b11cef9ff4d7434055260c7894f0f0b0f074975ca31f9170e1f3b6a089fb74aad1f2e42f014520a389cdb4e1161d7b121c141125f2dd60e7fcf24c6b070e4e28a9889d642f7196321033c6134e393bd448c4abe082af18c9ac187f22814d863ecc60a3b5ebf7248a8d1ac895a9bea355fae8cff30eff199473d8d77d7533cd5baefd6fbaa3404c0b54c524deb5385235a702e603c457f3d6e8a5edc24f4b841dc5c189e901d78d330be57354fd10b8e1d1a596695f44381f7f121a979c1f3ae3955f6aa77437589016de2c9eede257f8ff4349ba3c4e46ccabaff673d809624bb2198a9c76fa4eb10a21c9231417bfd9a46e886ce7d0b07d02d1f9dd7fa48ab490a2722e767ac0045a42c177ec4b41025579caf7fe65f59ef91aad3b1f7b24ccb56cb9e41f337d189bd3be03e2d78c01970799f1cc8896a1030c791323f7c0e2a4eaba43cddea64c2337176da4571165cd9a7dd0feb30421c509f60c2994dfa4c3af0bc40ec6fc3da4ff560b8d44519d7da4df1be17fdeaf93a59c7c9cecd161a62c16eb5e76ef6b759f02642a29cd272bb93649314976991361e4fafa7a56c7c0d474304978e0343998951df761f4716c3a2bdf4a9a8c7ca8b167edde97d045b85aac293c478f46456e968f6197582a93ba2844ba0d50c8e8368dfb95ffce49d101174cb35d4d104da37f3f154478b146bbb42ffbfc841c4643df7acd0cb162cf7a4df14b449a00a6b9c7b37ed3d68409b137d78cf296e5477bc501f0392a2ee828d8dd7077f6b5e52408730acfe231413d5c01e979f9925040e7178c1f88ecdf8f1067af71f39e8d74a9f445b33c4771a279059e1d3cc21535ae221d2a5e4b0a3fbd0674cd1139041e34bdbc0835153fa317791736d0e2fabc92c80fe42ac7ec9d07504ce3c003eda32145da597d48ff91cfc2e161468375683d6ff0d77ec21b39b7dbb450908dae8608132d01654136010a8989270e0229aaf6804c6ebae80a9826ef378df334cb4941bc209a9dac777340137af2a81d6c0756af9f247f983f2add21330678a7c86f768761af86d9385b1917435ea503c0ffe65455932d612d845308535491452a6b1f2b4caaa155fd4afe0b5eb57573cd172e150c3554b15a17211b04f2cd9b75be941e5e068da13aa5574639a1a9dbf4cf96482f8576374965bfcfc46b8e291eec7db7225d9c59750cbd7e70adb2aabcab97843bfe22317ff2979d1e19636caa7744ac161a6ddd30e3a91a7034107ea91dda4fbe29b95e724031097e96edd48ce18163c5b762baf2bca280d4df43b62e98b7112272cc0ca4c124ab627e7e0f5abdac54addf2b514f1a22680af9dcefd1ceb65f0573daca9c17eae9660aa46b786e3e152adc285e8a6eb1367f3e4c9a171270afd3a75626dc96ec5a05f5f1778a65bf2be948da31593cc752cdf7033382f64e8a2977de9fcad0a153aebad5c1f54697ef55afb1581006ed6363cea14a99fcd854537fc4940b57c28cdcb3c1c94d8350f5fc7b5e51634f8bdedd1f974dc09876b50e39b8b2028e986c2c8b55fbf7ae82c64a3631bba7993b3b968465cb9b5bd22296102b683507cb57faac02d8882aa5e6cb5adbd5715673f02c778d328ea95303a79d8d253735a3f6e39048fd737a22bdfc639d5d4519be930b738e211f1371fe9f5c6e877daaeacf63c2a8c94e2f91e259eb26a19755839ab002e905c12cc77a09c73fed7cd9e827e7dd92da7cbd6bca605be850ec9c5b8dc6a01e5f1957cbec635881f5b93524b70c2ba79f83a628fcbc3052d9b950bed29bd5ae9b8c26e7ec289ac50eb76f38e33d475786f77c51efa9f306aa8205160fbc0e0a59ae1cb3efe60889b6fbca9d42f7bb132f5c926f19c63e7441db3c09abb3c3c207d39ba87e181c307cfae9ba4cc7e16b0707aad911ad5d1c4e2968022cffa15624b1364e0d3b6069cf394f28672a74df9cad08485dabe97f1df11b880a1bf1474eab7f1d13cc5f963c3b6d50289bcfe15e914d05546e5e1d4fd6c903d9756e15d446d88e285774363285b6da17986d10db78dbc8ac514567322ee31e01b8623253f7d519c14948da508cde2eaaacd6ce81a856dabbe119ed837e0c3f1941682d5c52e758652e47e2f4d525b6685597aaefc420e409ba5620b258a6df96acfa874bdca1c29a72ebf0bdd33009b70f1a167440dc5d1c3984a12d234587f04793a0a0e976d0b7c3cf741a2b8fa13d45f891cda2ebae79eb2fdf72826ac0bccdce3a0a2de91b637d4cfd7822871561a69dbd5a6ed170994bb24c20ea7902529bf493c60e6b0b242bfefd767cd8ceaa8d83f988f9201c00d7a66796b012c5683eb14e930f9f08503c5fe4838ed7459e8735c6f8064a29371b86c26297aa9254329edacfa5d7cb9e4ada533ddd1512b4004db615eac220a283dddd02f5b2f1bcf3f7c8fa65b7ad64b418b9f3dc14ae61a51637612b3a9ad9ad1628065ece5be90f568991d3b1362a247599442048714dd249db784be5e05303ca33db374f499ee1559d245456ee75088b61bd3e4313cf143312b9c1869995045470f013d84315265f94307c1b4ecbdcc4b3ad8a770e7be76c6db4308f3f163b6f7fe378dbc1022afedf34cf60cfa51dbbffb3a966b9cac8704cd5fd52496d2555a133dadc4bdc8b9e0eafa2d9f98747cbb66dff94be3233c950bd9c8230f04eb1955fbe5c5c0aa4c7831faae944e8e79e782b01837448b5f1e9d9a2919e4603fdbcd5a7ce7a2322f5dcf35c114a40798ea57953a58484cb64a8989402d9e501b498140bc51eac62c38cc92ae472347a26ded77a9d676ce0abed98d5488c43a450a7b96eb2c20d009b131f8bc5452b65e174d3cabd8577922259590ae51de8886c7c345529fccb78f6f05513464b9bd96917ece898671b6c825c37997b175a1a6285f3439d377e3861b50845e9ee1c2108288138b094febc2666d3055d010ed6dd4594ae7efa8bcb65c1b79822b512f959374f5f8897682d9919a9c30d537d4a374b971a61ce8aae6db6d18e832916aed6c495b1a2d70e1d54e53a772e872be0faf8590bc82be15e0404e49d8dc2adde0b40f2c371ec3727e449f3861334a137a2ec78e7248b2656a32c6f49951a3ee3613ce529884fa9b9c1c863847db463bac99865510974c024d59de0174b88407b6338fb485869ac6f67e108d6a0bef9f6d97cbccde961554515e9d58b139568f2ab9593a454c2d5a5510462013e9cba585d09ddb246e94c43de90ce198fea0ee585035cc22ff3bbf817d2fd9899d64b6bbed046a294651b8dba13185702cea8b089e2a5262c74a5c426bd3a01650423bd89608613647d599f12f162a83eebdd0044b40b44ecbe49b60833b5e002aeb9aa572b2a89398a7d0483ac3b9176a9f2413007fda2e3490e3a26c6ef99052e93de72a0928886350c3a86b3e1b75c81beffc65f0ad4a29d79dd1ce745b0ef1c48a696515c75dcd56dcd86a9136e531b69a88219a13e9d33f2fb553566ac22e02ebf2ccdf6e59004382a2dec4f4aecdfa8b7fdd86f5555a520216a11b10f3322dc749076e06c5249e1ccc70dd3c1ac36e2ba940ba3cd4e5987ebc60cb34eb24cc8537bdcb75e960f0141fc7e6f56f3c9ae2cdf340ceaf9c980b6f396fbef02d688f8496fca50dddc0d1638ce609f65f0719b59d20952ea8da12f6d30e954b75884cf83c0b7c79c396bb6066e65ff7553c3627e760789831e6f91ad8b0a34423b4245a54ffe47439fa3addfeeddfba45c1a3ec780a5e375e452aa3ed5dcf2260757f7489e1c4486775b6a4fb037186581fc6ccfa253151587e0b59bc1e012f5351c50c80b8033b768e977b0630fda5b5dd098e12bad82f47190603edfa21b125d25eebe48c8b968ece452bc77d6b5d8683d3fc6ad03b19529e826b28fa18f1fd80b3d95b6643a1d6bc297ce5f1a3f7f09a8bdcaa6f4256a196e7571425cc3704e22a9e8d4d13a377e0a93509958eba1da99bf77a9fd5305d899c90598326cb61802c012449e3e699c22e20da6f12f035386a158069dcedaefd0bdea01c0ef43de222cbc5629bb062eb2103018a18df5fcf60fe67d43fd6bb7c9b0891f96dfbc09172c41aa1244afde2e8a725eb89d1c4f7e579d5e9e633ad8db4d8d3212928111486b4cb0d64fc902fedd4ef9c4b0c8c37614f73afb94cabb9be140f9c2cc359f3c46380ae440d445b965106a448d9de183c48e82ea168de862185ec735c14bfb79699e08dacc740ed4de8140b667fe221de2cdc6e84d16e7e46f313ada3636ce7631d93b18570ad6d795fbed98f48c2dab0c3f9784ccd822993262b52e8f7880b92b84223b551b263817fae17aa7aa3cb18d5e453dfa5420e71e5dd6b13193aab8d3295e926b27858cf108ccd9f5eb07d7f29480727a1d7b549f9d1fe0b11aa50bb53330dbedb26d4cadaff01563c0e774e88cb9d0a0869a6812bae16ba27018184e2c5966713e55ddaa4b0bdb65ce841ebba151c72241f6a83411cb807a367c750a9f28d08a3dd7d67384708a9056464c087cf8c463b2288b503c5eedacc03a9876e63f989d335bbd95c6beb1780aa6733b7a1f56e969a88813b4ebf1bebfeaf91fabfe2d1eb169f99d9c46ce616e3d2ae113260d17daef34eaf6234b2487f61d715af51ca33a7b20d77fb96ff0c372e985e2bd45937864f8328a753882baf48bf86db4c5bf3117b9efdb86e4aadcd015966335aed0e4b278a6ec52683dcb6ebb217eade6c727b83b435a2feaf40ced659f1f3f975482500ca4965b58ca2bbd2198e850ce6f90e50b8e5624d170c6132ffc713b9da2e3b64ab812f068cc7e6865ab453e0afd0f16c10d6a063685aaf9fb5af3aa20208b6da95ddca246991608edf51fd61b03f4d5f26d003498c72e0a4e37310bdd61ebdebf027df140d4951720e2d2a97d18e4aaf619b3306699c1bcaefd93f113eb7791d242515df5e36e1bb510f838bfb040fe628fed9a2e920889742aa6ca6231d12fb99a0158e46a236f00fc1af4414eac58be5c29d26f345509544ad41856b96af0ab85f8629acd37b99af0957ca05889327ffaf26996e559b4c5dac66b5006b78d4e72c11b67712d63f9bb02326b726a241de8d1d0344969043f66d833ec8e496e08fcd5e3f91a76f693a7eba5f110c1a61ea24296c5c51580275ba3f29ad4831b6190b14cbe1da6f9ff43ac57dfa8222108b3cf3dd9ecd1a114459427d96e170dfebaedb634ff3fe6931aeeb895ccfe2d4299c225df254fff9c91235426af57ce26f7e5d0ec339435059a0d58a1e3c83382c0d5ff5402c2f416eafc08113cd7d470c433fd425f567dbd4d92b8828112dc1fc5752ac709ed1719af68a4178b19a9729c42cbd5d7091930b21948c629607f90142a28a6af20e11b4b13c8a81e8fb5930cacad254efeafe643fb89cb4123a67a396f89716700daa26a67d6416bcc915881dc11af0bd9aa648fd40c306cfed934b1afbdc5d60f7c3579ef6d81f732c539985ba9d1a21c8132021d406401349065f9754602509f3e5af604fed84564b9ccbca5d64bb629dcb52741b6f4a27764749d5aa2b58b42a9796b62fac2dad4f7786b35176b9c9405848bebe050c539bde6f9ca646dca9c36174663e1b03c05f6d32093fdcfe9ed94268c764d06edee1543bb4f0b89b30e7cbb1392545ecd6a4053794ce9c7029920f1c56b6d959126f3013e42f897b91be5eb5f78c2fd13946c7fd1ca7c0f9b19149cb355c27b3356efa61f50bc266136fa1e9681ae39b2f6c3bed69714f8080fe77dc2afdc26690053b8cb02e6a43ff231db353786830013eea6d42d552ecdc0222b9fe41b3586b5d79fcda3d89fa9d01587c824ec67af7e55be6717bd0270ec5d1c979d201730e9d3f193ee328723532dcadbb430560588916c1bc0ad1185d6e0c746255b49dc0ee124ba3c64d950fdd31acc7ff2ec96e51a464ec2b5ea713255c228375d5c0ca787cfad08e034a732bdde36e2b499f7f668c39c9857dbc7714473ba2d86bc37462048e8ee44f79a8446ab8776f5cc9d4f056a61ac1393fd060572788267e8e06d5336fa5703b0af74f6095ac72712fb5168b15a98697186734144ffd081709c8f88f05ddd9cee6a87445e1d3dd8fb96900b2ed3c7da13084b60519c8253c1c02f4a2b9fec710f303dda304b557bf4f3ad753969c4d5e6d6e0eb2eeb327f8affbf0f4f1cfe40a1a4faf01661a8908d96ec3f678919fd6b86f65a33784b350aafc150b1619d5c344d615e86fca1a723f4eeb24fbe21b12facde3615a04744ef54d8a7191a4454357de35df878cb305692278648759681919d1af73c1fb0ff9783678aec838da933db0376e1629fcca3f32913f84bc2ff3ffc3f261d2312f591cff0748259d3cbadc94441d846a9cc8aac55f3c5ad417a992ebd3b4f76d7a77c7ef5ec90f9a14c01ed1847539143c0790250ae37169c942bc907bf39779985a624fa6b9eef90aaee9b11efd9df28390db98b9bc3143ecc663fc11a6191b320ad667069e2980c58b277a3a3d18cb1a6a716794500329293e7175be55e71cf090097fa7022af8ee5fbf7502be1366a89d3cdac4264de428b1cd44aa89684379f3e5dfb16c58282c3399ea9c07f48cd632223871c6783d90275fb1fcc9045a763b51cf4b651bda280e9d2130a125054c300dcbc2b9edf90aa80f03dd9e23278e7134969d74dbd48af8b361e7120c99b19fe4d9e08613e33d3dc584748f2d746a9c787dd02100dff9f9c3f4e8e41310ae888fabf3b551c2d2ed697aea248a07b1c404cc0cf4f2c31d1ab5205c9ea131eaf2f58922cf115d70c1e32e66e5a3a80cf1c0cb78761a489f62712e6bc91dc50ee500ba955bba7dc0bf1be8115bde21232c94c13d2ede3627dadf663cecf194c169978875e1b4ea69f1faf0120da4399d7c68f882a4a7545c88e80ff88f8466ac87a239eae9666c145f668d92835eb723ea24b67061de6be7767272c63b3e0376460a161bfc3acb69104808b94672645c7db0442fece9436fac66d8cf768733c8afb56731a197ce0f0c89a9aedd4a08f13df4eae6cd32a49d30ad873bcbc7bd4ac88c745361e53faf5b0fb89ad04c6b8932d9efbe8d1f56190c2dc831bf666aa39b7784aac38de4f006c47da4a8e254cd65459ddeb31a208a48d0e2d9dccc027c305fe15e4ff5857b138f40f5ec738c64dd213a6ec78acc99ea7d1f5ca9624d7c8d2ad1968d86ecf78d5748b42466dcf8a2560f9852d720edfc1cc5e2ae8e124cbcc29d7a06a8e00d7906de0ad9250a2ebdcb6482db68e52f85941d9274b91b93c50d8d3341c42865e1834a1f9117deb035678154eaa7e2068ecf6f95824c2efaaef5e8e9c6408da6ccb6d41ad7a422261214ad3707fbe11b1eb4031360ad14298161f8c31e86d7794387c42430349c375db93153bbcca8153d2b2033974695c7463803ead0fcce854dde6164262f158c1d3d55cf8d83019df31c0f1dae7e787c03645286640c3973f2a3f40340fe56cd5a8a61d30686b25b496f19fa2dbc87f2c2cc2dbe631de2ea3abec528070724a11c879d89ac3e83f6460c84f29d6a88ce8a58dbba54968f932e171cfc01b34ab06c1c51170a133e17f3dc982c85ef44bb64f0a6a3bfe10916d59741a7b86a8ea35131c4a5a56ea96556c59fd16db3835f567cd4a12c65181a38247b50b495ba22d4ae3f5c07b58e897ab0df08dd1e0c626be4aedb248a83475da7141f7b9a94d4fc7b0a63b752b32a6486a1fa5e98a96da8107c7a2eb814464e09523d97e3e562d1816de33dabe0f11e2d2dce7789202817e986a5d35791bf13307ed290d674735ba6b004222adf85af8fcbadb1593a3abf5513859acfc359b206df05ecdd0bb0a3d31aeded3577901f93c3bf9370bf4ca83d6d420b8972bd3572bfff355f70c1b0f1f4c726366fb776205c2ba5367705db8ada03aeeb6693a35b64e8f2c46c4d8ae686b9559490a4bd20e01a6f142a0e5f22a3f00c5e668205ab17e7ac73c7fc3a9c18ec03b7a2fffc7a95b37a709f0e3cef1032ac4b3c3262492024ead64978c7f9f288b7076d6f3916c41f4db39fae7bd868f11618ae4cc21dc7c83454ba6639e75cb4faecb89d7edcb4857046f29623c4f554d32f85782e0f54fb1255e171994d9d9853ce4d31d2b4af0e6c8f606d3c9dfd846af6885dac070ee40d41873fee12fe5d4a15f2d23e86fbe2c8f8b1dbcf4ac9a963d781a447ed3facac8174784020c72b67297028c83ae1280ce8ac8ae2b3a1ea473836f404a92d7a787b70c5975e402933728edc7bb8a909c1c71a1f80c0cc6f9d8371f6ed232077f89843cefcb4b080355916965ce89bac6efcc345ae599461ed1ff852094462cbb440b43a760a6157f544cefd75b2ff3a9bf16fa276663fe8c07493af60f23a9d34dc8db10e4899d7fc9c80bacdff1cdad00de6dedfcf162b9cea0cb5fb16ef1501d294ddcb57a128d1caf2756cb53bb596b8efa2f17c61530ce92a0de199ca5da28c9263b51dc171fd34edd55bbea4f2745a5496b555688795d9b45f1a61139a9f704eeed48340db06443882a1009fbaf35bdb61324372f0c1227352af5812f781e892243171688d76619d254665743599244dab712cc9b5172c2f8fa7650e9ace5b24add3d07fafd4f2e26653d46a8af11b711e78fab3001f60afbe0a6f51ab1131cd32c286ce6ba961d0eccf34cae280a91160519379f66224bd86e1602153cfd1555b077d9de77c152f60c26fdc64d036f31904e163c167e11f8f331fc7b992a584cfa99b344bd576c769346ce839682be0f297cab889b6009e8208948b07e1142237b0cadac03cec5fb02e133688d0eea0921438c275d8e7020768a7b4624586f63a25f1d86e3adfc1dcb74c0e7a91e9fba38212c7ae540013c55c408cf44563c9810ff8767c56b7b396d8ffb7373283b9caea40105cb2b29965eb4759e5691463b376c6fc1219dcfe8698147ae63b23a1b153a9e5a57b645b8e1ea4645d39ff8c796245b25a0ab76a53ff739faf34337d00c5378db4368022e9fc3ff5833e8d0c7bdc5ce079b1aebea615056ebba61a135f49d152af6b6db61e8d00537fff26aa60ebf3cd9a962ac426e3b02e3219402b74e55f7abfa393dfd4d9d0c87a04332fd198f3c2e34294427c705d293c130d8feaa3ca4e0b645a65b3e9959a9cd61a6475ea42077c3c52014fc4f5a5ff1ee906678bf816bc392a0f65c439120cfc450ef5e9c9e48e0ccec948e85eeba6c13c5793a4d21af9a76ba68f72a278f3fe1af8f89d70a1413b6e610fe3824357856e4b18f640a1eb3885f3dcfcba14786503e9270f2085bc509c934bbd47f43af0e7aa9b892bf5b973e0bbf169672dc4b867a82a46bfd928d3bf25a47f9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a36e5ac4c3ee0c430598539e14fc84194141f8c08fae41a0c25fa4f433fb349246ef17144838c50d875f4a5750d18b41be286e07288d37c53053ddf8a848fb6db4e459f43f5f1f37fd2dde2d3b2f2c604cdd8b1a6f85f489e1b1ed5dfe45a9777bd295dcffcd6532e5a881b80a71f1f56bc5f262db05026f34fe459c7c7db9301a5e4d372000518edf43c7605536768199661688e1a6ebd5c89d995cc95db5380edbf2ab36944ebc288431beb1d91495545279e519c80b6e0b143ae75b7227ffc7d028a1aa05c74b7ffe333ba6f676913b0f9f1ffa050b887af6bcf4a9378be7d3df51a300b155ad33f65e6f8b0af715bbf1e891f8da46c5a6b991ed492a5b80c15df037c1336451e31115b2f473208335ae08d39cb457a60cd15c39a1c7016b0ed0a6c872089dfa1bd2ebbe69eb8d7a5698526d6c2fb89a2be26e7259aa28072adbc7ed79bd4cd63cc062da61c0986b8d4567b7dda8d41262415b2fb72039d583d3e61f6eae0ba6c44dfdaf629ecbc74839bb5b67bc54cf6e92b4ba60e5b166d85d83c6c77754cc50f02ea5e2d2a21e25f9cfb090d694f1af3addbaed47292b66dd137bfa95a2b7513b78466908b5e094ea076fff842f5982ce689992e10ba3dde737c79e75900843a45d097bbd71bf239f14d1fa418e37a7a1d7ef183fc3609be0430219b3873fb6af6f77814d6ffa309d5a9f179b3c4c8c799e13d3bffad22f7cd7e402cc02be18d1021920450b326a495b2fee0da3e88faa3db06bee1c8916f168c5d02b9d13e8adc756bf40cdf83f4798fcd3f57f9c4fb8394d3736a2e5d1027820085eb0c1b49a21c8d4ad32ac0e0c869e7fff09e83b281332cc461878ec04789b21d1e857fb2aa3e80706d3ce74fcc67d2896ed5ce07e5e19918907d2d69bfc9f93219e472ad3b01cacca2beff2bcbb218449845ace2f6c5a3d8bdb640f2d869602ca5d0fc229e90f5c83a58115b0e7140973897252bfd08d16ab1dad243d7916c738af126f91c1189cafcb124c7ddcdd3ec147341ca42d1ac373492e844076ba76f90f0f71afbad0c3cb172405780ee58aaf67f09a70d49bba70e868cddaf1c98887e75786d838b088521426df33efb5738a46684aaa6978623065dc5f616cfc7271e27afdbfed4040d14cab483601d5900e6cebabc54e59511e5bf9c7785aabdb236afa64ab2af893c52b21cef2e7be5698660b4c3615871da7356174844d501938fb465a3e8451e7aa2a1ae1ff03e83db4ac379a8131aa1e778c741519b791b30f1dff2cfe8bd4b2fce3f71fbee8dbbbefc9f1154b353ad9fbcbd1f7bd2be94f324d857b5fa4098c39c356d6c7091167b629e85ae882a1e6906debbac30cbf343ef469c3c66f68e9ed52baa58bd711b784566dc9ddcc87aaf20d21ccdfec9c0871bd2c74e7306b42841c831a91e56531e6c9f1e0bf5554cd8d0424ac785df84297023e2d26b9992caa7b50945db6844d5a1f254df1cf8194cdfd64e800a36c590b6e2f4af94d6b1ead09a3a163cce7806aa06850199d96b7215352fe2d8f50e24b5b606cf37e698f2851dcd0288b177175085b958b421c9b43908f5d43645e44d35481f199bf0cf488ce9c9f30938c7725b14f8ceb5f8bc7915f6a83d6b4ed173fd3f47750a1ddf56ada436d0058cf27d935d4b4ae385cb2a6fa85107c0375cfed64486cbca954f82b2f71c81c5d480a2c008b9b588f17e2d10c5f8197d290e5688ffe503247fa736618984ed9139f748a9bd4bf5ea635debc0f6a35bea4b6de3db176b06600370d9840375feb1e3e1d6172308f35104f1cc46e35cb54ec6030e973521bac64b31d3e10cf89b6cf9c5b6d2e2f89707fcc1396c332a0ff3c1583d83000d089e7c728b414d14ac0ba42c4fa2a323ca53725598f88f16511f65f2d9682139d82fc1bc6b6b6dd11ad60b9d094f0e92727c8e3652b39e26631bda5b4b0e3fad13c24095da291537cb1557a04ca0ca4c78cb7aebd06509642d2f471bfa3d03709f9f21884041ed4fa810afbd805e8059c5885bfc79d677d898a2d4b84dbd1489660e8d1a067c9c20990f3c7d0d51d7c240fb5cf2b4cd91898abeabbcae551c034f57acd592a2cbb2875925675c41788ed06ba254eb14ff7fecc9f1af84cfc0e341c1a5404d7b210e58379304d3f60ac55f2258aa857168c2a70cd11736f1aa332695a1e39fce473bf6f1aedadb373670d466a47deaad745ba1cf717e2e8482fbe51cc747f165e44147cf9d73ddcea4951680ae538190cc51c45af96bd34fef41669b40f3a906a129351889573f81fb3f0fb89fb7b4e118acf7f492678d1c9a0f915d336f317a26faa716990c6b19e373a6559f2eea6aff7421e664f9c4b12b6c4ea9c944ef891abc840ff61cc75e063bc3a1d5428cf12ab22c7996a9e0d7496185 +MD = ea372e7d5b8ea15757216debb24d6823140801c5a8795a9062de6c95 + +Len = 100912 +Msg = e67dc5f1d6a0c303bbd7a6020568ec87b7d46236b2098d9536d9491ea6abb0928b713d91dcda31687dc8362a05044302c431bfc705fee9d190a0770b73807d4a023091dd1da42d66b19f55e8816b792027cd9c195538b6fb6141572301538e7953a409fe20677da5614449640205568ae79241532d1fbcbab2a4318ed78da9c884b3ed1c6d8ceace949e5ac70f3aa1e80c66f59e121bc2b78ab14d747d9797df9f47845e8d793c895397d239317224e19f3302228e949299f150f2fc7cd72065ab4717ed07983b7da516f7e1ef15a51ea6e0ae0628f2f209ef696a4e5bb70b03b19beef16350af53920413e8d18bed472c554273699dabaf8de4fb93a29e2260b82b51912a085fb222476c755f3cc403367a0590d7fe8532d2a9eef3daf42b25c8df88f5e32a14435ec84ab12291f1face374186fc7b473bc7a08b958a20eff9e99fda46161d96ae4d6ff7c4a1f03ed5fb743c7c607dbb7172b219a23a8c3685245391ac4b49ad9af725bad564c2713cc619409b896da77dddc5e241729fc87080e3f34e0b1621af65d0da0cf47053d6350e930a01b1d40610c22c9bbbc16c6306374955ddecb9969e59a092d860ac4c533b7df250b30ab5119240d89c5aec06bd37dae84a333ef7aaa9548f98fc44452588487bfcd91032ea1b661f9ed20e00adccf030d953797992a73e2abdabe26ab5de3acc8f8db024a347e59847929bfadedcd15512b42fc55d3aa58cced450630a239d0e9136b03342fd076c22005a9b5950c67e7dbe2b83134cd3dd53e154d72c41b768883bd908d12512c3b485158c251117d3a3da345abdc40e44d539b76f241ed103fe06f34b57a64fc4878a92744a060c7d0b6e11f262899fe9db4440d2f9a432077afec6a4dd6a069822759afcd116eda43de48bf40a85cef5ed6ab9a8b3b9249b858b19b96a587f660daff5ccc12b016fc2a26a08bd9fe2909313e89b5b47ede7a615b63506580157d1a16b8b222c9107211276d584bf25e156a79751f735d614650463beb952d593f5b2c4e1fc00e594e29a760466cddd11bd8e8c72926b274a4ac1e9fc8c2e44410149c7785891453d8ea4343c6cb25347513090a731d128b0deb2109986d4948a7dd03ef53dc6f92aac9776269d54cfac98f66a98de4f216fa8409f3ab02d0d95f2aeef03b4874884c4db056a019c98681c46e4eca0cd59ae30d36089101ff98be84ba248c4bc7c735ed8a9afa072f8a26589c44b80331996ffd4192eb1939e93e50f216c754ddb1e03f6299d83bf3583f928d35f8469a94f9ca993d1987246d673623318cf23aeae3a9d4fddb16998326289d9cdb65751008fbc9619cfa2377b19ac9ff4db243c4a8c35e117325a69d728169e401ee659d26174eaae5d0db9ab60552ea7a039cf1b8026a8f20f78f09cd136e95ec3fc08ec993856394a99168ecec5a8da264bad499ed86c174fad75a7e75083cfad82a776bf72a3629e30944bed64d53476401ffb6eb3f52efae03f20f2ce353ce4617e9a5c8999d062b97d0b459b7c5e97026d5979200ade19f997307817c54d717fd57ef7e5002c9e1c17f55cd067ff9177df8c468575cfb2dfc5ff0393fba95bc6f44a18eea01d5841ab32bc6c5cc06d89bdbc5d4bfcaad07c11b41aaaa1f9aa1d2227470c414c9a1080e9edd82449321f4e1047db681778b7c27746c47de4666ba93d0da7aa606b71e043757b8741e820dbb18b9b80bdb47822720d495913989acfb3f127a402d44c1168debc4c509876acc7b1f50e458ba777cafaa1fb2d4891ddb17cf4f7dadb895c7fb0053d1f490809794250d856062d0aaa92342bdb7c381a6134766b8f8b1009b071bd205603be3aefc514a8992bf023385f6bb3c53e77d0e9a315c7cae9c96025ab4bbe9dce808652c2a844b604d90a9ce8ac5a9295364571513ad532ff9ca903e519df9ab33637cac176745499d006ffb560e7eb8a5dc322c54b5b70d4722b75a88e4af8b9c8937e4be5021bf0be60894ff0237723d4902387b2222b70312fa17b12c95de91ee397e75db4b5138961613dc2d6df6a83f49d1fd5f20cdcc3fdafe60d227249216e3c1e4654c70a1b4eb00740c7ca675339b8161e93bb1f0eddc871e71edee4b77e967709a8fcdb5a729d36d1c0e1212aa59bf2f4ccdf41fc1714a5098549bfc959cd7a0c79f99030145151dc87cca0f2826f3ebe66204b74f2ba09d91f5de4404808afb88e6931847bf3e0cbe632ec91165b7fe62a28445db7e226c0b4bf5a02936f9f75b1f2c43df0ac6b05a2bb0ef1aa883fd3dd9c34a1afb682270b1a29f9822bd1aca83c5345bba47bf286100df8851e05ed4a2723271f5ba774ed145a0b5d64cdc33cf0e583240297fa59d9f190f1445a9c386f1ad752fc1d112255f3226b411c2435b683df73ef4885e2bdc2a03422c5486e1c20998fbf6a647286ff25f5eb45355b353441ef9215fbea65890f97e1ce59b5d73e551dcc18d7a54f83fc438ad06076160091e11486c439794ec762a9fd37d5487bf3454cafd08257898f9d45460c4d00efb7919c234897a017afdda1db4a9616df5b4f67b5b9d24718c64b442ea0a99c0a9c475375f0cc82eeaf50f2effbc0e972768344b4f95dc6398994b01086529258264b6003229fc8daaf02c3c1b01a6b3d2a280c33f8eb7df3c0c2b174251089e13ee4ec5547da1ae4973c3ddad26d42476088e6bb1e44144e531b6ee3e5ab2aaecd5c1ff4c8431f124f4688c1ca81169801e9fbd3d32f32522ae810e52eea1cc6b9f920670ba3806ec068cbfeff1e9039f39473037f767f082d70be0068960732ec0418367ac1e500d0ea2f1ad80c573120d175d38adfa57745fda1befb7795f84cc42eea7c67f4cf6813db9cbf1214886ee829cc5c3349a758d5e1a650556c22c3838b0a785b58e3712cf70c1bfa6f47c720b8755d3916a14f41a540cdf834b73887561ed866b744d17dadf3538a0f7512c24a56f6bbb16c13891515db2896c0921ab8af0350bafb724e23d8d18b9d1a371606f88d7fc5108bf55aace3ac3944bb82d94461e1080e3ae78143fcc4c03f1d6415e28c4ff8969ecd9c8d4b4dc74b9a07e0655ae14a88138ff0bc3cff21eaaef49f9c59f1f205365802417cd3e5de17f3f69a5617276ee49098ccf9026826d10dcbaf5e2d5c653adfb54fdf063d031a8c426cbd4c48ca9530a0fa9b963cf86ef9c1a201cddebf91aadd3fdbad77c48b1ced62f74854a30db830cf8a83456a6efeaafdac971f1a2501a09ad7923b2952e91e056cd3f402367072d22f912c83b765ae49c655c87edd2c29e73d7b2f39583cfedb85b5d0eef79f8c8bf088994b3276f40db7cd80f3a1729eae7431fefc835cb56ea8b58f6f388ea682362f33cbc778a5d1e6c8f082591d2878e47c4e7abc936a463e9dd98de186e9406a4fa30a5fb5e81ebd0dc032ed73eecbf523c8bcec2745e9b0335851dbcd7c4cf2b09010e073e67aa366970c46bd19320ff013c9f9616fe16440b1c20cab882e381aa3e634fbc67000991d164a42d0329aa9d7a9cd8910b6c48b8fe95d6a356fa25584934195b1853d6ffb5ae24c3c55fe17be654ee74fee37de98ccb651aa969a28da1ff188cf43c0b0d9e0f7218422a3026e0466c2551324ff747500a7102b875d4e932a1e4731f2245eae6f0ad221f2328f8efc644aacf5b7ccec21b58eb6d1ba87f6d69d42d73b9233ce344f4bdb516eca0cf713554211ce483703c34dc0df082e50dc4ee7be04c400482c3819d7297fc78541189e5ce00c8f608c1875d01b0eeaaa24795f6db3806c22410d649de32e2d01c1bb4e82ca394a6fa6fe2d6fec96640b9666d16cb28f1f665a1553b6e541a4885f438d3d371c206a38bb9d24ba66437b1a5c664467b9c21c5e990fa99980d62303fa82138f7eba5b2a98ee77ee48300298a5467c3cc5fd4a37e1c0fe66b568d99526568e3a27bf4964dd48f0ee01d3a9f887989c977d77facc358c3eb3a605b3fd103036a0dfd83dcdd2d218235cd377224b852de2a7d93305dd9ef0ea1c53b7230039922a6ead3e4fbfb576f520d975fe3834b6840ccafeca201c9c72dffaeff03d992a3e9be554d1eb1893cd148ca97598cdbfe574f36203482fcbb3b7a3634a117786462f29873c9f24f51102951d6db17ad06da7fb67989bfe03156cf61a1bc2fb2fa8f320e0762301262bb09bd9cfcd6172846c8c157162b2cf00c59a1c49994facceac736668bfd6ae81e647e38432aa2c928c4b7577e472b4dc8c3871bdde98851e25c922fabbcb137d6e414573287e87ffd0e28e906b673c1187772260d901430225cb1a155e0adf850f300783f9050a33fdf968a53db8ee077f003519d2af6de17321589ff1b8990390bc2f9eeb663d97de370c9fa38e52263b7ab5cf10cd8b22d872e482bc00ca5eba8ec7ab48caa8913a458164e511f1d7858ea76cdc81252f1c66c4a40708f9fe554ed6915658d48ad8cacfde4b68528023e415d77ef3c46f07a602ef1af8ae4b29a4653a5e3948eb816ffff31dbcfe8bde2306f83e4def4a60daa6493cf972adfd367b8da7948c1afddc188da2347b5e7ef383b763b42f28f1aab69cb733cb8c9aaf20727b92298114b8229323f95363cbfe93fc37520b7180bc3ccfd1cd4450c9b55cd1205ba6868eac26ede8320d008de93eaf004f0b8dd6bb3fcad3ef626150f03892df168b93325f2a833908329f8b5f8cb807d3b7e5bb4dc87505c3af27f70abb9e00eb610fc97a393d5ea349a78e0686ff940598dff71adeb8ae6eb20b88a8eedbcb03ae621ba458039e2ada805e86336def0d35e451cb897b171bf373c975d7328886fdf3f08691bd43c66e91c3889ce85f14165d9208d1a689f0fbc88416808b7e9cd32c10c7eb53939e8c4485b4c7592d42c4b08278bf214a1551737f36f1cff66bba7443106fadd7dbbc006bb1bea9a2bec647e9c45ad4a2b37dda837b31e4381e3933500923b356a4862e3e2889be04b1a4888f94aba7dbf20867578d47b48cdbd9d20059114e5a227334c6c02e829b42e7dd3c8eb8833cf97981c5153e263aca20b71ba94164297c0a7bcb22b7dcb19a16adb75d8b4e0cf1588f93bb1b218915984b69a0b9de0cdbd36b15f52bb38ce0b95fc9a72cf294012efb8a26e88fc3e1c9f6b1e783a54b67576c6be293f1753d595d3a15a1551c52812c72ffad572e593a21bd25a7a02e471de79791f67db4d97d0ed24ef461eb0cdc8a13ed706112a2733253032bb6fda4ae425fa95c3f91dbadda58fb2dfc4b56c47d34993b95b9e7fc933c2919d1ffa590e78cd3ce1f546b712996c352108258c36d9faa15db6a4e5eaa403e78d87d734d3ce6b6520544b35263524f6d84d93b60c21ac9071b6cff20e126eb51b2bf356dab34fbf3d9aad8d7f055468540982724e46e9e173d0823ca9fb8d7ab490d14769b4049b683ce0589396751a32c0743953c63d04f2986e2e44bbcaa8e84af38f274d049a5ebf860eea44f18ce306eb83d30c008b7c72e63f74ffb0e034becc8689dada2c7fa7011909ad7420e3414ada4294fed560047cf8a123da910860eed61809ffd24967d41f784c5786b20424b5090d62834ba1b4d26fc4923c01d5bce64846d02c5a86918a9c8e261eedc40bacbcb1e6059def0065275e92518f91c94f911e158b1197abd30d0f6a69e5056219d44ef3ece550f2296e5e35722009866a88fc1a8f0cff9591402c9ee8465cca84c61106a9a05c0c87ab40060e51b196dfa66d6998bb42e13dbc822e2a601e979628c4b8bc5d84b20874a08e96933e5d076ffe8d489af60140f89cb290e0df6b9672c664958b5f7534410c399b72e45b8a5c0bf00f2a7d88337ac8a6cc4723b93e1a82a4e5a830d893a6cf919d6f6814d0d1222c6cf86df89dc9b2853ce16002d5a6a5f3fd32cd5e9efc77110ce71e1b6385edace2733bb4e85bd6d8536e38daf59d9cdc7cb97979ced8af427a889ad1cae0ab0bf0296b4f9ba7a20ab04c02942675d3b8c4bac9bcabc1b4a066b252ca6f5806942689714b3043a0b6c3e941e0e0b5e73365a532899e2e43b541f2ca77d9726d0fe621e21a3e965f471ee49b23acd443b6e01748834e94b8fb9cc8866c81c66ac9cf71325f2f363a4621bc62eee35785cdc47f701c159ba0ddf7b20b1b00aa7c4c3305e66c7aa9de3e6cef3da54cc609e2734c4dc69b8987e6b34dcd05deb50e11c13e72d4b957978a50eb8fd911965c8f7d0c46153904daa08fda40af646cbcb4eab97c1a53c602d48e3fde0d0a4efa4f624ddd7a86841595ce060a9a4a47f4a02fd546cfe27bbc87755aacc37f667f8ca37f8888fc9dc530fe4f8f38e8cd426e01307747edff012d96da707ee96338d1b11feba313a865fca115431dd8632268ff499224ceb69d31732dcd91e0cbd2b92bbd5b6b543a74735705daab81a0114b8a8f0be91d38cd3d8ad328cefe16c99d63c67c4446ca7d1f708f9a848d1a9b60238f6907420c3d9c5e48f67889ca7a1909c9a2b063eeec6b8e21171b43292d416ab91df1e5975af86e1ddb112c5d80968e458352240e4ed22048e4e25c625389b09abf5b706091bc2ac02b3b4e5669a051b8828c1fbf110db785687c313c8a93a5a2b1866afe9e6214be8b59783b91c1049124d0af57ef58b465364b5a3e4ee9ba7f99153dd7cd84dc875fee22739573076ddec26b8f165db746b2d24fee2d065f7fda8a7172ab8eb2a93d8be594e130eabd34d3cccb428720c882937aa281741531fa48ae65b50a67a298953a2601752f0dbb775b72d06fa1591a11731208bd6c247cf23d1776623bf1e5ac889d72ca34bdd74f903c6c718986eddeb1b31f3cd4c5d6f9b60e6c30d015c9346971b1aa9c6c2caef37e632769c0725dceec219cdf949cd191b112f0a49ca7cf45294a90d6870027fdcf411bc2944c112343dc37fd2f331c68b5e71c29e505dfb44aaa07739d063d3795a2a92470df8b47409ba8ade43e2ca373653df08d67d82f5c6c98e42ca3710967f459eff4a14eb378ec69826222a4ca7029b068f4425b2ec4eeafb8a47c461bccb2c8b58e35bde0434ae4eb0764f74642812e13c829db3b1accc66192d54ec71a6a6ff5bc016b663633c5686299a6bf512801816792daccc463775f8662dd940787aa20fc98c9adc833658b0215359e226ad53250f1dc5c686f3d32ed89751aea9711e7ce707b3f8fc65fb3448c266b4ce6039722db42825d3c726c36ddc7c45a15318aa00cd283e3691e81c842fb8f271637204bc3bfa74947c17c00b43818cc9e83ba2fd2722379a82c770bfe17a24767ca7e4a2fa663833da4d2c9c13880b87f72c6bc75dc9698eff3f36e021d2d347748018c93991fb17a9710f0795bb4b444a960d44b7445e7bd2f878cf37e8864b12a4aa1740a644a8b12a72341140d369a71f915e7dbc9ecac19b3d746be5c5ea20bca17656cb9c4eba215c0bce3f2b5cd76ffefcf658afe195d08eb704f1188c646f06cdc5288a718bfdd57416e1dc87a22f5c066b411b2a153e72804c330899a866e003d3e79679ed67e5572f4d6d51cf07b363249e6a0b0b8ef1b789d41c79b2483702c92d48cea807959c62ac6621289e0cfd699822ee3d67134404fbdd954abe14b1ef2529d88484ec2bf7265061739d6ebb8257cd3a7572e10f05d1d1533a707ef88cf4c0004987f2ec36e2b27879abe285b602f25779576200d47e821c49057dbfe9c595acbeb7b0c8670914ce02716f434fc21aad11bd9e00b82978593e2619ee4fbe3145acbd2da5d1c2fecbd6971ddd93becca4074c9ef5fbfb3970e27a5b6e04071b34db40726dbd36f9d7bcc4f43ccb1f90a422ad69c9e31b4fcbfdaa4a2550c9dbe013e98506738d8c5a7da0fd463e0cee1529880762b9b142d0575deefc7d2cfab01c60705a3bee40bce1d43fe436ae6f5fe58481aac4e798e9b73c50dbd257ff0ebd4c3b4f5d819c65b008c2fff92c9aea1e4ade874ee3db7de6ee77ab96737261c055eccf207028bdb2e38f7dd0aff81e9b8226e39dcd92f3ad1c6b5212a7dc10eb248dc1cee06c2daf0ead48035f0f6426d362a5face46b5d26e35ba8e1cc4850761250cadfbf11b6e312446da636a2285e599b5ad0e7e2a1d8bdcc951f9b227dbb4bd9a06e93ef0b8f3fd619de48ec18161d3fbfeb4c2ba581c6869a5672e5e31c35c5220d2db1555fc3f7f930905aae2ef185e35e89acd49c8e281d08ec192cf390a1c45dd51f00df5f28a05fb5644703671c999d48fcbba3851f91b95f22b7ebccfe0bb3227eba8861f693be109f6f3dfe521739d281d7114bdb9cea54a9106f4b486cbfae56ded56cd047de4a62a32917d4f0b6eee2936032fa831e5502d2f8bc0f7bd5d14dda50e0443132cb647f6f5403ba96d6858d3adadb08c7e8c65c126fc19d9823ba59855cc0e44e0c1b507b336cd95c21e120ebb42b8269786a283706ed56792e22c8ed42e4d5a294ddb2d7267ee169698c0b1d5f3a94859c74d3e0e2014aeb491da4f3331e89b2ee42330dadc8476115fc882a2ca693aecd6ccbaab1abcf711d117a219dec750180df4d7949c78fb5afa944acbcee144773b89bfed62b68ad0294b512e3bd3c00e51b6eb48afb3ee9af18ad0f707f9ae227fea157c02ebaf1b22de221b53f2353936d2359d1e1c97f8cd14decf7e9abf17295983010242ae174239de882b0df5c046ae7a3cf09a3d9d14993afb3aaac07bc13dd32468a2ceee14c24d1ccd0d49cc09b385cd2d1729b05181ad224312f979cffecb8c3ef558c81de2368040d8798506491df7dd7aa45a0933ffeca2bbb236dc0434e28c2294cce701625c8c58cd12c5d9096209abf4c3c619f8035e8c33dd6fb6d5cd5811ca23f9889a57ba738d9ccec912b7b99161120f9a600c7f6cc394117e78f6acaa42f4dbdda419d013004aaa83009ef31635706d1efeb20e45ac8349c3e3048fd54368166a484bd91f6f45e06d9bbec121b604670d9b9a12fe34d49feedfa00a7a17a731965095da7f22b4f8f1aac02a9b2ef785d0ff6f937fa4ac9b653472238104d8b4c8829edd1b61c07a76f74b376ae3704fcdf2d79ab04436c691aa21e4d25324276aa80fe9db7491ef644808ee771e984e6d3c7a2d795b97a7da095655554cb213e3888f07a7a24edf22669f59aa26960918a40257c233fac7a918b87df336ab009bebc73e673520d01a19b780eb45930837f4141d731285ac64a0f064925b3674fa985e9603732e4cb328f86923c1b7d430f25b89744160e07569a5121b017cf96859fd1763a5a1da555d0c1e38e329f46d677ca2ad08b4eb423b80907771a4164df44cca6f12a003687e98a714f312f0541a227006aea95335de29e58cf3d7541132f2b61004544d5454470a9d3999514fd5f3fc687d66a2b419471944ce3d391cdb98e32cc1e44282a7be51bdfce79ec55e974db9bb145f29b68235864cfd4fd6b7e55aac92796a583fa8845b86235f1e7eb76be3b1da13fb7b843f39b3401ea88d822279bf3b4c3fe3aba95f1d761dc1fdfb5fcca7e1459231f242474c2d2df827164379905170a05d6fcab00a085e18a30a305ee4507d56a07743975fed042f4b4ac6964de45ee1739dee389500ad8a388de67fb25044af8fb94c1134a72bb6c2c6b2b73d1b9f6ceedd1ede05878f7f832b8a1957092005c760649d12842bf354310fc4a91fbaa795d6618aa4c48e5f4d8d23131ca29cc01115942343ac8a50c834e6a4d91737fc3231bf24b8e031935e5ab95549443d483380e38b0d46d334e8763e41152c9fd28b9540958a0200817e3b55c726168d05f54859bdb97a8b077aa01f82a58678906aabedc36253849275d8fd51fb4113602115fea28e723c304759914fd04c4da0951bcd9788fb442e0ad8bcdb0fec57bf7d91db20d6536d19174a9d90e0a7a369d48ce8f94321c9be07e4974dab40e28bd362f720d748a729b21a4a2d1bbe0453f1a747d2dced99a832a3988f17653b2de9305a8bdb7671c8df72a10fcabaf7c6b213f1089b883e5653bec6899b82ea0b87a40d472808535e68faa81c34c2052ae178ee85c81a402e34dc29247fbf788f7765173e0624d5531359693da3ffb4e74480472fabca259a9ca6ca460a456c20801c8056bff38010a938ec5b5d988f65a4d103f08cc1770152c3b0d8853c4e25697151799a9cdbfbf13e375cabb61b0dc8132aafb227bdcb1fdce3c338cca708fb0b918ede476f7db514542ad581e2457aefc5546623805fcb996ced6b1bfd30fe93487dd41ec2ffbb614bab23206b76800cdbc6f0dd47271ea152406654db053ab07e2ec4465ee7ccce22c9ddbc3e09a31474ef987e9a8ae09d9da3709dc6ef760b3c88f5eacb9eb003e36a4a7ce464abac98b6a62e01f0d83456fdd31e48567c4c8975b1308f8d2fa79678b389e4f1607e5003611405c1cf0f8438d501e8a2121a6edd3e40341b116241da600ac6178a32a3be12592d668dd62f3bbf6b2f3b011df2a6e54342af1ddeee789928133df0709ad001240245da305feed986a38a10fe1db9ee613fb31cc0a43aa60b52cd5bdf3c1f769e0bc77ec51d396a7acef50965f7fea1c1b58ed7b36c08ceda0b2e93279194b9efd054403e7004bc6f38e5b2f9895d468c2ba8135d4dca5bbec6c860f1a117113ed955e9436137158c67c3d563dabf24e92a699b664f6893de0c038ae57591c8b3af30417bf7babef9e5f5384bf20a8401393936777acabf636447d8aa14e82478d94f108f3a75ffdf3ae5a457da28aefce080ab38d7d9267457fc13e986066eb2df181e2632511f66ecf9e03299ffea01a7a6c3506d7b123a6c8a0349d4d1ed8c4af533e9e83468b5859bb68237798038171346684499c9dc2b5970730533eb2ca04d1680630820f58d32ecf0bd7db7cab72ffc27651c94831cd1220e2113aeba6c889092abb3904d8a264b2332f2d9df0f63ac36d7eabb57c85be0c331587f5f330d69c7c91f00e606de9bc49ec22c9ea815203ca2ed867fb65d743a3beca6427f4669c9c432b7e788c4a47a0ad4f93009af1ee2cf0b3d246e41a41a4ab66b8dd79a573da4d6ff79993f2dee7d1087bdba976fd0652e276d796d390b639e1665c471fdce72f21ec4c0b700c7ff5e206c4437dbad6c3d8d835e4bfbb7908ceef4cd342122356d5def8594e3ae98a60a652ef52921ed20b78da541b1c3d8683c627a498ce1f5310423703f9f4b51d08ed1003b23d6eebfedb4d7b925da441a48d7531906b4ba255b870a1efc4531c4f4d843708f717a0277207b1a1da2da8b5a7ae10c57438d31aa44da9ac145406b84a17efb369d96d19cf819cc62c3a4a1ba73ab8b4635753d3881681cb8f287ab86553946e0004c14a6653937bce6aa45b0eb39fc9c327b314e673d0aa7f50d6d411bfdb85442a3b3db8e64c3f2b3f360830a14c821e4a6f5341ee0cd57f5db9afe1c50b95c0ca496849c21d8ced187d87cf7c3589df0fe7232cdd9ce909bf718057fbdb1be0655a5e8b6f9de16e96e97e3dbce13d8018b8e909cb174198f6bd19e6dc90843d7c0c95105733d93a2b08300ddbe6099bd563295b4ef26bc783fab110efe27b327ede805b0175d0da556861a261aa9aacc66478a3d1b4e3ffe7990a589e374d6a0e2eb4de06da64c9968877add6a55d1d7c3b3b75ebe536bca2367a307005874e8a9bb71bdfe811727ec6d692b37ccd786766064405f9d0884441853afde3c54a74a3eb96e515437f7ec222d38077584808634d90b8694ded4e58afdaa04863f86cb5e6d1cee8875b06f8d0e2b65ba9f6efb195de6bba0b4600da7e91ffaa0fd2c3602d4ee5e8697fa7e96562cd602f2f7def63af9872954d3c4565f3749f056439212370d28b5657f20254b65e4b643c436b2b66d719784d3127fa61a78e01270e875dea0d47ca9e45d2237fb163c5b7c0b371a6a02520d08000a07ef0fd6f85d3f1511d0eb4529d43d756019f4fd02c8656cae17c0c2b71c95e0cade973cd1b29fd918c5f477aef5c9070fe50761ff504d39b99d354f49b4dae737119779651611a93aa6777900ef08be8b87d6d11cbbca868524e9628d7bd50895ad97f57c329b6dc19bfcb5e76b03831e28eab31fb2e53b58d363614916902c2edd1f18deae480df3ce0c922b11c03f0ef0c970d1dca5417bd22bb64630133948c7b84a52311d7219642e78938849d8a406fd71fae2127e364ac9c74c6f64192c93e9f3a26324827a88ebcfe979a63828930e1d626b34dbd063c5fe237b8db2226a3b7b94ee64266060ca00f38bdd45e2be82dbd02014409344a8c292fd96ee7174354af177e547111453717a67f8e919b0e3150ea8b996c516fa7a629d85b363d85fc880a9b0cbd6cd0e8b45b4fe0a1790b832e2ad2bc3af0041905b0264eb3ebf415e0b29cc9cf7b384b61e1bf89222878a9a15d473b1992b076b45d53a7d4b50647258a241a0bced3c5bcb44ed6883bde0b46fc79846cabed373e8bd1051d2b44f6e31ba18c16da4bee015d6e574825942eab72ea26c8ce22e100c63ed4f1b128ab85c1958e551ff93afc47ae99e668438a3b7b09a0a25bf9faa786ed95f6d939ebaa16809f6b127422ea0d7ffce79654b4835f68708de7caea9f587dd69125f12daca4f33dbd54353c7709632ec0125023ffaa8714dff42e3754b56ff55509d6e829d75df7c057c4fe1fe5e87e047ebe6f1ce6d60c3d038c7764282490b70753b19e48315c189fabde310d8089293e07ec678ed5d519987e115a1b4c373b910ff076520db92a8e425376fabbceb2d2b5227c2d16fdfa156b9b832937476759645b3e9f53bd7ac620f44e380abd15cf6ea7a72c19f5631ced8c9bbc864faea2f928737aa3c78db9e047234ffde2d6966cf285164f49c9117c5ae05fa9be8620170ea19e6e65d7ebd8b2929cf5ce89ca5889a2763769a095808d1d8d22229233766445551426fdcea2dd18b992de83ddb9d37bc652d38e1b92a98fcf800a375f7fdfeb49457943f4b71d222045a17942f9666d713225f6063b26d38133d40a269bb7efe572eb5ed08df95b6b9ea5ce9cafc9142155cf5cf7e28b755cbe2e7f1b72b2dfb41cdbb2f4aff800f5fe59e83d4571fc312e3e3763115dd1ccaf580a906d27372fb3e8c4d395afcf49f54c7ab742d7823b3c0129da5004952b581f213813ab92d2d89128ffc77722f213ebea9d20804299ffa698c027162c2378b27774dea65f27eb4333dbcde48868cab6bc5176f2a9f7e99cf8a6ff09033f61d061d956ae18a96c9d99ea018e8c289a3b6476beb554bfaa62ee114063b6c9a3e774c7f4393bd1ecfebfbd1acb8abbf2f8776f503eaf7b9276dd71a3acb36ccf7624d33fce552becf519c76222208d756c69bde3f5269632774b5a915a859344faf69da1d3e131dd0f3c9b8038ca378215bfe4d27f56aa1ab2bc3e81e3b9d794e47e59c2e05c6e4dab9cabfd660424b962ee76b443bc11bbd7a4800ddeaca43fc100ca0b8a434baf58be6b22305aef7c0289e601d8d387864498e19da1ea73c62f3250f438225482a5167b973e3af25a42f6a533a519560a980db599e40fd0a87d877105507613680f393fe4c620c7d4c2c956c24f1a17d920778ebb0b6945573a84bcc789baf2b0059b3a639ea8fa6bf0865d562d324742ac6adf598ea34c62f49e96b33a6d8cfb16b0edcbfe3fe4905a923b37c61e6f076a5c1a0df42a504c2a599140e90a5cb9b12eec668b5220d27f91631fb01ae97808dfe130c28aeb834a3a3ef92c1dbc7c634998cbbc8c39b2cdf8874661d45114f64aa77a703198a8e2a4e2546a2456a3bba58574085a99a1c42bfa7451c7407eb140ef3383bac21d724e4deb399aa5d018d734f80529bb3ff0c04f0216601215d8372b0483830261778ab415f0fd1482093329b0298628ede249f778063b406ac9b1dd55e616c40560eec77d46d83d1a1b6dd644ec0c6d2c072d865ed7b575fe042598b03202a189dceeea79a1988a38bddbbd1ed308f28aedef7e2ed16b0d302626cfabedc3056f3a0fbfa377da864e6f0150b66528537af5043150a9c890b18e29f4917fe47a1616c599835ffabbdbad63339418d70a8cbb00527cb75a8ae2daa3aa196ec37a1ee1a51a81c09585510795d84074817220ae68640b809d56546a28529c40fc8ffa2922b53720278d5efc0db143fed434e75da0b865ac0dad86db2c80a28cfc26385bc2fc0c152d3e46093f41071e3bcd31375df2438037eaea9c24a6b4b95ec74a080a5189060312b6adaf2a026924a5bed9d4940db38889003ba5475b3c70fdbfac7d48268965a51157d1beee462b58b093b9003c9c9c12581822e4feacff3409b770527d05b15ff6965b81f36bbc40d7138fd948c1cf1162e022023781360498c7a802e50172cdd6f78105ea10541892d7ad81bac9be00a0f237216e3fd1ea1d4b68dc0703365922e9f6dd1afa8f2a643eb69c2afac55aa2ecb6b52b5f3f4ee7b157405b91589c7aec315a0e70c9f0dbd72f7af1fb9199e92e354ff755facd98a7e7c24b2266023f8ca51f4d1991266a2f6cc0a8329f58d43547544aca80c0908d8ee46e4ceb14f139e69f5f6b81258fb612efc6464ae1f4a04164ae136dd27fd0d1292d57646f20725a5caddcf668bcf9a66ad49d20ffdaedd7f399c71e6da720430310f84e5b5dd494d9c0f48d7a82689bb44badbdfcf77c6f83866c1f1cb6da5904a1a6257409cf0a89212892d57091677e93fe7e53cada6c86fc58ec4a1f9d87a067c76633a4c04ffd570fc303f7e29e0c6615eeaed59673807434029051b85358dbf2ad34cf66c9a8cb007a70990aa4000a7a8b68a83f09028683fe59fdd940a066ae56e1da110c1e05b145c5c4481ddc29a2d11ba312918f9bbf3c31646ed4199060efb5655d8bcf9f88a15e1a4960032c055c3256dfa17a3c4c58a135e7922701a0f439e1aacd2fe0fd19b40b7d1f078a48993743e4bd74d0b1b013d2e1ef4b02e4f0e9ef9744d172951b620851bf7bdcb2f4b4fad049e20195ef23dbdc50184cb3623fdf918736ecd712d29175a5b29bfb1b15dc00db54475f723ba14578f12782c4c6423808d28839cca04747865e307758e47814e64e0a74c5c5d39bae782bd994f7b7d95e270d3375359a45b5d142be5a9b4f8b0f21d38c767ce36d851fd22e5f5e9123dbc6c46ab91cfb0ed8be3b367cc4d2c19a922afcf0bb4139714ab30780657e761614463604c0f9f1436792865bdba2572cf1894cb0fb7d6e17ab36ebb4a6c06ea1a21b2be4cc179baa8fd124645a2eba4ad2670253c80899dc93d641489d176be2f2bbc2e588c47c62798f7722cae87968b75c9445ab733b34a739bec8a2d3fc7e88908163a181020fc7261513a85002fb12c2a903104dd0a457b9aac16296aeb8d641fdfb80edcb06fb2d74b37cf5e5966741871880d8e8c027de9baf56dfd1465e387f29b16b35ec781e2c8ea36a9fbf3751d4f287d4e20c8a21180efa00329b92fcab5aad79e124e0609301c60eafca056c092dafa25aee1119964cb6a8112d16f6f92affaa4b44a6ad4eb95f52946b5408aa2642c1c1f93f309d0537581b7f5ccfff07026ce2c04d4cb611d9e6cc07a5a01e88ebd3a592770ea2b4d660a006d6e0137b7042362c46d77fa7c03bd5237cdafca22528845e5afc3dd82e825d5807cfdce4a3cab3ed25c5f1f79cb23e433c01cb1e6960ccb14d91c4ebaa1d91e781e7c1ff1756ea975ca0b36de9ea75eb75cce06a42ed0d4fd157de6bd392ec39b7e059176577589f6df04a971264fa80bc84f2f22c5dc46e98c6f0d52592cac32c1208ca08cc7c89dc2d1defb0825ab772d27962901360b1e66792b43a9dcc18412557836b96c4cb29cfa3f43ef314d43b3dca1808ae809e5ca24a856d045ebdb972dbe01896dff7d94083213817a77b681f8baf109fa2a85e0f7ec54776f107d782fc4c9a1d1c746d382213166081219c003484226725448d17a5f04456319b3dee4f355aca08e5481f0736647e304b49783b33c885a7174c5356930e328efc5f1d2b36f50e23bf0c5da907acc1437cf2f0262a7d8b96852e3b1739ef8c678fbd8836ddd35a0b662c7c9e0359ca291b2b007bf4bbd98212a5475e3172d469e9dbc7f876804e2e7f2b045cb5f6095fca5411b31efe0fe8444400923632aaf48f2c44c6bd865aeb6e8a8d4b9bfbff55fef0ac5205de8f379e7cef6994a96095e4319747ff5ff0e0b8bd600121e62cba1d9348df45b7e80e85c26c3af94195dc7d8e27f2d877b09ce2463503e44f01eacabe7fb16b24aabb9ec71f8cc085cb26df948f3dc5580a7e7fb764ca5f912f767ad4a98ec2af37ed4dcd71e5770071037ee735af328b7f13e58387daf05705dba2686ebdf8a220121777fbcba92c27f0dfe8a3bdcc8c8eebb83d16ac52fb1588d60c27c589c7e3b8904925a5c363308d773b51ffefd5aa747c3689c4d407ef0c8a127d4bd26b034f2ca3780a52605b27d931e8dc18f1522c8622599b1017e2e5432dd7a77f15ff4461297b7fd29de86e8a7ea0d8d45a36928a631eb57375a19175b0bf6efc534846b24d986cc06678afef64427cae8a9844dd8b419a9adb9bafa63dad18c69d7eb4b4827767a8647c8a8ca5264e040d279213fd5ac0d2a4417e5947192b5a7ef31ccc6a60e6f712648cf693c4b3815c3528a25bd2bed75a33ac134f9c1d445245fd8e580d6148fae11591c2b65382f271772d0941eb0577d2b748c99e7500c207b56efdd56cfa7852a302b47384956a4cec089810ebe987af0e8e47a8b91c488902d2ae4170983539e3adeb74ed451e2815c98ac827f0043930384c335ff3507a347dfbea02be9c172617da42f3fe98a372d453e025b56801cafb39d6d022643be8b5592799ba276b08b4f3561f3e644f91dd85f16ba64d891d3ba30bc0261e4e8e1d6892bc3761b60a29d936e5910b7ce1398364704f0f4fc57e1a3a967ac932a31a8cb3d0a2c58888dafe5ded82e8cbef8cfec1ca1c37c6422701ebd99d0f88b63147f37d78ed43234cd5437d70a6bd1b2c3a81ef9a517d21eafcb7e0095ba136062cea2946238657f3f0803c06afa102abc93d3745e6d4d32e6d07604c281ca0edadf04a8712b2a564c28c9fa17e4824804d5c57bb527dd465c552d0e21f7b956c4dbe87b835688a13edc12edd9cf2ff5e2957c7473ed8a435a832a8478c2e72067e9d375606187485b4e6501776420179dfb7fc960665d0f2881f5d0908a5c550c324ffecff32f33eca34a9ebb4a5c977e3156e0443b5d930e78165831f821dbfbdde37e99b4894b3806492c6b29eb5ecd5c8923e71493b75490158622b33d9c7c13185d864e9c76899deb1350abd653d2a7a0f81197056441f07bc12d64b87fd7fc74035e66709d2590b7bb3276245dd43824c9896fbd801ec1d07018b39b6b53bf81d8e9a70ea95508368dd932dd661d379dfd1842c3f4332a9afdac47ed4a3985c745efb67d80612deeef0c880a55f3cd91fc86b91da9c85463cfb1c9b603d175cdb0373ec50c9126694a951fb2129f228a2e9b7bd5862567b24eefe0fe7e63b81b828ae5ef332d1c2f073aa1dd84685d0ffb1e31f372928a10e22e35cea337753924b05302df7c36c68cc4b3939598a6a9cbd9827d5756e504f335702d5a95d5b0fc713106f7c79db843faffdd2c7627de0692177d1cbaa116e9cd38248bc40006749527046356788d92a62dc231490539141297faa906e6ce2cbe35ba1e0d1dc6f3e3dc020b71f0cbe38ee54b8d5a6b3f5d21abfde682dbb524d010f7fbb85475e024f90bd7602dfc9d7bce7f26f17f7a4a86fb8dbb75a9523aca71e30a0dcf9da5202524af6a56a728 +MD = 89f3cf76bb0b84209504699d9945c28b1de880ae7236a5b1375d9656 + +Len = 102072 +Msg = 369d333d2de709e304477c102ef047a0eabc286b7d66421abef9c039d888bb8d4c205da735fb47b9d0f631a93b45d0647d66fd75c75313d6fafc990568f4215bdf6b6f9ae45cdec53c070034b1a285e7124c5e1b7c42221bd855b059a59c16bdf866b13dc07296ae4f6331d9166e2cd2b0569285239a359262ed4d5b16e6615a9df96bb953a6371c11f00cc2f4118ecc606ce3dc44c315e29faab733433bccdcd90ce435255e88b98b97d814d2f3737e2976974867258ab49775380ab4041de8b18765dabc03522ac441dffa397ca38f135cf7f015285bb053371608f2a71d292f5236cfa2fe5d1ac4d4679ab014e5a826064bfdd534527ddad69a54848e94445a559f3d5fb5712f943ab91cbf2302716b5cdb9630b135c4343c0c17f21f4ae43a79e84c799256113b591da9ee11c391e947eee4ad07cd2c6a4fb478c5c406afd8a458237afcd369c11bda69c646edb1a8adce0fd49ee25e83f9d9a084e4924d3bbf38ebea5bb2df2f663a83ce2a4b78b178c13e2dde3c018720c5b6b7e6b4676bb3d0cb4f16b91a8c24831f8e25a48f0b8e10994130a2be7faebee3e63435a5716668ec3397b1c3e03cfe678fa0bf9dbed9034997fadd3d728a0d4f9a35dcae54c248761d4561813496f3815801654bd33fe176b7a5b625689cfa215a51732b1caeb890968893fd8f1aaa9572b25e4151aaf4472a9af21f69cccc82aff0c0c3d211ff6225c80ddff9b06acc63197226400182e577405cd27e02cd99207a8d1f7dd56615526d98ce7a407d4db5a069a3a92cd47826febbe7ae26438f3557a0e625e135d1a5dffc721bb22941efae0a5f93123227c03ed6050220778b76f0c1c1d21db4bda7870174e3eeb7d09aaa1e03069de31acc6776d580d8b1b66cabba588d712a02dfcb6f7cdbdc6f213dfe6d360ab4317ad2e163fe323739379ef152525dc5e1c7d5140d310965985d6011bfa1a83f626f5a13652920235637942b50584b011f3512cba43c776f7bab8c4bdcebe727bf20ed6744fe518551ded7bf7d115e0d2d741d56fc442de3613447148cbdd05290b61244c724cd467253ee17a1269ed153ab7e1fddf231aa90201cd496bf69a91d585212b8449c4c01bf6199843e1336d803be8c0fee8daa519690f3c398bc14ad2f343add05c7814649b9afed02c62206a3640759df49cdebbe2dd9dbf1d17c8a634022fe1054cc891a7dc0a519be7e23b3f8f7856e6bfaa8c17aefa671aec7fa1bfe33e50c4e1411593533752d0333785d03c45942fd19cec7ff9bebc15ddf467ff7d559a2ba43272f6a7223e39e284dc70cd59e040611a6f745467488e6aab6b8b271217aa24013c4a2e477e59644ea199b941b5b8fcc787ad359076f4f1291eeb76d063b0df31d3f68f13bdbf371967c38689af09f318c78313a6d1ea2fe21488f33d08e04448dc94101356cbe969a186cb9e16a3e282918e8536e3ce755acefc129471a8e1baa89b77c2e41fe9a3e14bef0ba72749998827f0bd17124017b0bd5b93288b360bda851cbef02bb67ca98b773ebb04a6c22df7ec9606763e9d6c3544a5b7f7bfb0e4d98543d56fde486ceddab3ccbc7890d576ef7e1c3abf5043fc54388a8efd4e5a11280e3e5cdf9badcbb00776cf4d9a111d6fc1d30050d4fa8b00e82ab16d48acc49b7a758328eadead6db623ad74228363e40dc547719fd269d12112ff9e144f5c5625357358ba821b8a2c7de7bade8ed2e2be5d70c0157e015b7fcdc9ee45d440ce7ad89ddd8f3a8e8bf6cffe5032a5f2f250262c9ada5ff9f650d5b0fc61be2a8b07e97325ed6a8ee9819461f2a36b3c896f99db8062faac4840a54546dc7f721238d283c0399495397985a300c541282e6932fe0f23c0a0b7cbc6e73c3a8aafdaaa4e504b083b29e22b0e52090cca4e47d98c1495a1647fcb6eb5276af0824c6ac8976914edd0c57a3288cf79de59076c3d0fafc2703881f985fa864182d8d03910582ebc3ef7e0681c9f9be1de9ffc0210383003f4cf5fd8bdf1746e8600c3dc0e0b11bf9013134245bd47df71e184bfdf8035d8c39b71df835472306e9c9fba3e2ad28d65b4d68f4a6c43a13cd049ec078231cf511f6074527e1035a10edc5a1d31b1a4445f92b597172ff593dea41d34b8b44611ed944dc7e8defcc1da023227aa6fa2a065d04bb8686d3b1b8f3bd9c39e2ddbaa6895b2301f2ed4457099e8ea0f4cf6fe7a27b82aba7bf03844799850ad0f0e7f22ed4847ab908aa0851bd4e0dada1fd30f01816a97dc937ea0d5df585ff83d04aef3865af8945e6769f09c8897a78bb296e64df47b1fc35326e92547314a15df5f40e306a0baee0e91c0965dc035d911945e6464feb5de5a491bf099cba4f763d66de4c71e74a81abf0458dcdef57674a9c26b187d2f62f889f6c7ec8979703686d31218cc421af034245a926e66f25029cad89b90fcefc25bf211abf5380ecbf308d17854a3c53383a921fad92acb48a6d0237ab4aed32c41a6745489712198ad87d962322a2569302b3592b9816fa2a36ae21262a5cbbadd7c5672d0b5672118c86062df45b9e5cbf30bd67a3b5e0292037b1f157227d281fc4e8345653e09b7532cf6c677015db9c92b52b59924ed152274ed67a47627d1aea312620124972ba0859a824e8a257bf5fa83d62b42d68f4055f9b3bd451f3efc2a8ca139997dc85900da8d3cb2c1a5022fe6667236337305a4e0941d031d3c7d1b6ead5f2b022fb5351361b229d6a78601e6e10e8da862cad82e83543ec65c9a1c34c0e257e8c46d88e18a4f4dc905ea3721d040a789d10866300be3569f11eb938b96738e7618ea72d171749d1d42c72613bec9127c3056d591885af90bfeda17bf98735d5ebfa4994fb1c29647d0756538f6f86ce4133ebccfa31b849175fe2f6d418232f70b3452d8c5a9d7dd519d6b0e236f0555fc187246c6b597c409c031012bf0bdd39e1235f927aac04228a7ae1fce8d7a365d7cac937db991183cb8c307a26f4c68eaa6c91d4235fe1ad82ca4ca52e43a29b9f3b24232880f0281405c0d6f5e6d4b639a72d1bfebdfcbe284f5aa5b03d39493e629bf7fb160277a0f727ecd4eaeefbb45c9a2fb3ce3d9ca49073c315cc50b6dfc7977dfb642db797eacd846906fca3441440d8e99a8d911f1500c806f9d02ba8f3817bd1715a3221641a685f44e7f7105587de482ad2e3c167677d2acb9ff0c16dbfba2445722e64ef765f5cac953f41aad7087a85f6dbb10d12a72a4aa64d53bdbb029de95bf48b1249300845efc3fe98981f24b3dfc1188f6711ad7ecd8a866cdb1ae464ffccbc56fba40d17ddca70a932ecf1bd77dd1d76d0825c70fdee810189cca0be44fd1f41f483102a489ebe640d3486aaa476e949b4c1df271cc26d042cde790014d1de5d9c95bc871685115191c28e8250d6a3907b97ddab134e71fd2b191931568e1e325ca1b63531c891f9275daf4d624374d48cccfe05cbdab675f0452559f27d0a469a71a93c7faf65e335cc9114c206849b5128eb3c2bae64f4e22a4880cfe6c724bfcb3ba5ea81b69725d8dddf5867fa7031734c581a12a200698f28afd7118051347814775988ab9e5d493bb40cadfed89474c862824d9823ed3e6deef1455b566040ddbab30a6d7f47e7529dc622ba5de2f408614aa86fe4d6fdc04305cc80bcaaea3e76e25023c24979cba16e0c538684bbb45d5a6b4fcb8d95c9b8fcec180b7c40deb4cda2f6f0cdc94dc8ecb4f4dbe091735e9ade5f6178ce2f54bcee4bc93d08667c5c470e903a9d811b2862c3e55f3eed6df248c82d006f9a1f2e1a4080540b7dd47789922af8be0fa10a5ee82b6989cb914af3b1b88d42b4223ab720b72b11ccc606aeab476ff49e637bef8c36673bb5d38a254388880d2264c90f12f729e2fb59f1ff806e0706d667615ed78cbf1c52399a27a62757998fedc1683fc7b645b19520c43a2728be61b7a6f4f0b7dbf44bce6241011d64aea1c60c0bcfaf3a0396837c4500fa3ae2e45b30f6003f218b4797caba7cf0161300f69040e9371de4532aebc9fb70a53b0a59e9af2eaafba9ef9ebbdc412ad4925585374eb5e8c8b09093569a5210d19178bbb766a382d015ebea1bed755208f1487ce77f5c49a12ff4c4a6fe2e6226acd9898462864e0898e283d43643f119f980e28a1906e3112928c7c13eb7ef0d53d3c937ec00970bfa7d72ccffd18e6f72a6bf0765da3c8165d4a491a2143eec500e85b84c39e4400363beed9047b17224611c46ab01de57ac9f61fd716ed82c6933c4efca58bd117a3c6f1d30cee38ad75a002f33a351fdc63108ecf5ec433667ea8fc4ae86aae529b28e46288eaa1f523973aa44e61bd97b33a04874b7097111daed1f3fea3425d66b214fc1ae91995ea57d9f27f5c655934d32f837f6b14431ace6e8c6ade2374a0f332040561d60c34627f625f6dad7d526c5e486d2c4198d0882078bf63d844d47c9a1f0b0d8dc49c578978412ddc90a6761f4a973c957ef94ca64d6eecc74a7bbedba18e14975b7ca796a8c705992fab70e10e70048651dfbc5e7efbc17701f12a653ff14f894d7fc30588739d59a6dbfd52089a2caaddfe37b791d8aa6de7ef4fd54ee6f6e9f6f04a747bb94da492b27bd0cd780d696fff5f500aa7d02278c0bf8a52d1a32004889e62071aaef07fb96cfbc19c3f48843d83a65dcbfb2b411fca22e043ecc1d2a34f3ccf1a29c3ca7b412189792aceb75345291fc783eecd57200d8bb03c560ddadd83283a56950f52a8e09991687285bb3466b51cf2f369f131c899990a430289b9d396fdbdfabaea04b7566760ca5befb1dda25ed0bfc3987fd2ae70ef1f4d4a748cbfc6b85b59abd524647dbc4cb65b4dfc8befa5da56977aba4eea43516a978e3cf747ee3d7802aaa62846d35021a87951c651daa99f88b2fddf37bf6fd6fb7752c1d3b8277298f5bb36553e9b3a31b46be627e7c3fae6a90bf41babf11ee0b07cc40cbe9ff5e926e1f31b66844c91afa95fd465a0152bdd6311f8a15baee1da0962455a0d5e5deea9032bd381f5429b98b7e9dcd46ae2b091ad413826036944872130230638619d7edae91e3aa0cf28c872caa5c77885d3264a97c8d6b8f19074853fa200f0bec3d1eee59f14fb91d7a7251968ffaa9fa59f6e6eebf43c154e6002d64f8433afe250a3a3ee87522528c323388ee38d9ab84b8d3909e5094ecec83e9684166ddf8969bda6852831038c9b01aa90299df18bd92b78bb4fbd08a22b7cf3082e0ba8199b815feb6e34b7739d45021528685e80b6cdc0689aa3cd58e8527e143189a42354934299dfc9bb8e4871c17666591c4772e882aa3c6a1763ad538a60d7844e272377f108e36c8a3d3afc5b3c79fcc5307c0041f8cb8c7142e904ba56667820a58683edc11f999df0d35941ffc9dfe3ec50a980ccce77658719ca806d94d1a62f0c5b9b4aeadd7159a02d1808dc6ef2cb9f58b19e9ba76e90ae397f2eb93d591413638c1eeba4aec83fdc401038166c6ea6727706d9b8e71044c6091269f7b4053a4022a5889ba0dcf0db4c7e5382db46049b236e0f1889564be4a0a11dad4162ff560187580ef1f861cebfdbb520a9d23847596c8232aff34239e8634aca7bcdc139ab3cb08b0cbb111afc90e37c6293cfeb8b6af9b3d577c62a52c187ebed962e4f822e48ac7b956d34953644e2901b2a1c3be1cc088444263a42544b6df16ca52c18e486cfa90804c01c44801facd8d54ddd798fad56f900ee69840bed31b1b443f1e7d1812f834631e443fb70334d5fe4f29aab1ea806d4bb2ae95fc628f5da1b8fb0df4d79b7c00eafad3d90adf938962dbda4d901ee2024f8ecada531b9953754c806a101e5f0bab0f8bcdd876cfdc5b15b0368ff1f51b066267be7066d641be3a5ce0872ce66daaabeffc35a08fdf8501b5d5afa2b07e1f4ff5127f191c53dbed2bc0026b170c2ff488cee805dd7a27c47090b8d91b13e27ffb3d49db7371138c74714a83fcd18115ddacbb4ec095888969d0713d3dc3961a01a79655e483af40c05b271d9da4ea3477fc74234118f17629fea3771e7485478fb82e2e7671f73096e660e1006eb07adc27dc2b66ebaab33780162fc60ff52f2ed8d80f322333857e7abf762f151c0e9696bb0f39f7fb691bc0920c3e7d2ffa656f5ea01e82ab66007f0a85328376182db0d977c2222cc05e24dfb68da47bcfbde586884574a7fca55d0ab50f9e06c227dcfd09085584df8716c4d6bb6e20d6bda21970ace26e6ef47c87afd05013320e84f17013794cef1efd0b14d1c26839ed0edeff5db549e57645491a7d80e790690f7b52eb74cd17ac417a17d687991dd5929fde5fd38089b11e179f1c16c805c1e5645899304c80b849da88d2a7fcacfe9422b4ba265b812f70bae6b7f9ffb99d6e732924931451ca7ff20ecd09d90eef7e302a769521f678a4fb965513d4d38511726e94876cb36a4a8c52d095786b30b691e89c071c0f1220a057ff4b8e7b013927cef1f39bce21126efbe23320ea4aa60d95346692f5874e71d3bc8977db9a4b5cf244beeac9764061b20ccb1bb3c4b46cd94499cccf5f9538af94b5d518d7b0d78195d2a1cdf23a2d1f5545afef264a755ed68812c6205cbb968fb8f15d41d06124ea1608011b699ae9c58925c6f9cff1c9f11bac02540dc32eb67813d05e13c1834d72668e7c3570b96480c55fc3aba9c59e3ae1aa820f181f10de8399b9e2c145c5ce059b9a0776363b10d6e30f4562f8e4cdfae733ca8212a5d288e1d7a327125a122b51ff4575095122a2796207e70acbbc3fe0eea6c9af7e3d6bd042c0bc94152721d8325936d9ae9f6f4a4658ffa45beff8be3b0bb49da205758d819f4870fdf32f57bba97e4f5b6d867e42a0716e9d4e6da8a2610d851914eb411caa93511b5f9cf6239f18135f762f3cdf48060f98c2e6c7ac109a0eec5018139b4764dd7553b2dff0a1cbccc2a0b1aca3b686305431aa42e08024e122a3432c87e084bc16b8b737ad195e228dd556f71853b978da850242c71972a5c3f4b3b368dcbc970374f429df6e9abfc7fc6445c687669031a436efe7444e03d82ab1d1c4a3d2164571b1da1008474878fd24bd34bb571f61788e70cb677ea3682f85ae259d8ee0e5953675c74f2d68a8c0de88ea5552ce73e751eef8eccb2c7bea77711232ba9eebcaca208dab13c5602cdacd70bf20456edbc990f839fd471943cf4314ca1cf75df7b603e984c207a72b5fb54f5f892b5a3b3c7f51b8dc9b4b22d44bb2cd7e9445044348634203d786a5b6680e9f542840eff3e28ecf2fd1186fcfb274a3a61caad8b614834d9cdd0480280d35e64be627de36e234e8c0908912089fe2b45c38955d5a92d20d55c029a5fbcd4c9b340a17f24da7cd6a5581a5f4c73b85686a900d7a76e7d7ebf828fdfc77cfdc28d83f18127f58e1bdb74b74fb54ade42897cb1a17513e1a4d4bbf896de63c6cf4ff2b3326151ef649ae97fe10f61e875aaa92c41d34bd249c182ad4e18e3b856770766f1757209675020d4c1cf7b6f7686c8c1472678c7c412514e63eb9f5aee9f5c9d5cb8d8748ab7a5465059d9cbbb8a56211ff32d4aaa23a23c86ead916fe254cc6b2bff7a9553df1551b531f95bb41cbbc4acddbd372921ff8157b23850ba56263b1ff52203d3f9f71912faf460c29b403362af6eaa3da15119e31212dad9c37f4d90b6a61c9490a3c40642b6514ce8996807f1108b4581c199f9134694a86381a7648b2f68fe6cc05a784f67b6b9cc6d6b84ecca63ab8af60880fffd078dfed25385bce56e7a54f7e44f6b2d18710f6442c2e5c5b9d684996e621c5eb9f15b1a59d991efb66e12f06875dc33fddc7927f7a82728152e3751d486b392343d4302bf4a5176c8436c52f1d1ea9ff062d25e921df91cff1b6ac741d40bc000d77e318fbf46a12d622bc6844bdf9a766be1b1190ba2c90005e7a3bd346e11a329d451d11fb6996c3117f32bcb014b195f6fc696596b569f54748c508e22ada7990d078b54ea850d1af782ed399adb60a6444810ef9cec6570da2a03ca70bb9491f0fdc7452a8e9884941ad37df071d3a828dd90b57db2d9c2e026ddd0a063f07846db8cdabedc96d7b764e3804b36fbcde32d1d9355d183b05028e688facf45b6d748e3fbed968f7a26072728f5525f7e3ce1bf716e70eba3f1d727dbc6241ab36bedd29000e509d7aaaca75e35ec8821fda17e370eb89a048adca7af4b8df8d6ca7264813ff08e550afb6a0b522cfc20ec1463cd7ed11739e4de6feed2306689bb7e9eb6f2e0a55c109b7815953b45e1d2e3751b06e2eaacc786857ea335ec3408b98a1861dcd7548235d9664641ebce76b6bd09ed139cc3fa7cf34906c5123d77cd2f8dd40daaa5297096e4ad65744da23341807d8eb4e84767c1354308610dd15f95fe929aa8b8cdf5b57911d06ac81c050b66fc78ba8274f0f52ca125600cdd1ac554e4ac59f3366b410cbcaa54a6add223a5b3fc36f94abe9915694498a265a3c675126b44bf2b7b3f84f41abb4f1d438f23ea3fb1b4917ab4d7e48f8f382fa5a04b64fef18575cdb9cb0248262b34ff59cae96cb31d11cb4f5c572ccf3405c65cbd218ee8abdc08b6c82e5d1da2baaf8980f7a9c29b915a718b0d43e000adae01b29342b29b28d53f63bf81281c76fa252f5d1e6896dbce224c4dfd4802ef0697140043d6bb21db5b84ffdbd001318937be64f52c76b5d06a875e8191a4957627cab1b8dc758fc3121334949cb9b303c615515396a4e808522489f8424d65a5b7bceeca4d3039346cf8a7d315acc411db1c6f622f863c1de10c168ae464293c52d2ffa1af53e8d7721ba0c1c1422c5b7dbb054a7e8578b820254d5efe53a7e2fdf42b648d4864542b6566862ae4b288b4da5a330c0a66801558759d1881a840c20abb3c6c767552a0bc4349d8f820408861b7445f7bcc1eca8ed86ebb56f3fea8fcf750d645e379d70a7d3252e83c2d023864a50141733947adbcfa6d3a52c3b7b227c9521d7572da355d6b201acff52947a97f7ac5237a929e6a69b9958b37f81493ce6966f4e5b1262b19caf8a0400677cefa506ea388b54a2ae224cf6703720b8388a188297962c62f67d8e879b79fae1a3d0da3bd0db898448d3850aecf2e7d3e1e85ebd9d7f7fcb17bd3542001fed5d67138ce37aea16fff937c81284232540db99af8cfa777aff87d43a35ec72bd54bbd5a56da157ab9a41c78c89c05887638816a15d290ebc94d96ae3dfbb12c94be4afaa36eea4b5d7b4fb58ed4c038cd079d7caba93a5a31f8ed9e8abf660bfc7a3fa01dbbd41a43cc55ba3c961a483fc13658231d4ecccf41ac9af2728fd0f4c6c5d52c887cf153df560f38abbbc2b6b07387e3f6744a8b6ff82bdddbd38163e9041f389f8ad775fb793decdb4cad191a7d9055fc53da4dccfcd7b3c3db28332c2309a9c6a5d5916ae6cbbeed751250487bfbe0f69487fd9edd29dcf24fcc4bd74b18e7c675f18f72c64118abddf842829651ebaede56832ec6a6c030d6769332a3d65a67a335575c412861db2d67d910f618e0eada51c7c4ddd8c745182df38454ca6a70d7a9d1707e0701460c68fc39c2db2673307fb2a84a465af8bef95317857c80abb854e6f5a66660b423019346231f251187e82a213678df1270e29b315f7502deef3e7c35e0cde6ed1a3c877f406e458b87951878c9f7c05cd5f1b31b0a3c5ad2246f7c7655c5fbb89821be2c424feeabd98d65f62a4a639b962d831dad59ee4ffef0cf012cd507de45b72195504b883725d8f7e082f9329a5a9ff47e7055281d25c85b1e8e867228ca06980293e97bf8127fb881f88d9320ca4dec887cb76f0342ff0a14a35fa45bcf160cba32b12fb649898f20b58df0f48e415481f9072acafd9ec32d92e80542fbf06306562b0d3972fe6304e081b0df4d8315b20fcec33afdab6daf84a9fea4f79b872e27e07b4834e71e76a2f13ba9af191563e492a11beb31f2e3a02bf5486a1f5e7acc57e2ad374ba7be2366f91a5e0d3edca3de2c356e3539110ff553f7fd85d2316e18ab2e2432e6248a6852f9ff6777647237cc502fc12a81f88f817958d4ca9d34ac3c94a3a4c3f0007dae103d2da7447927e933d5dcad7a8482e59622142d04479affa65baa2669ac2f7525bd69b8c5e235eba7098faa46db55e916044de5afce6a5a2ef54bf7d8b7050f012a22912dd2ea3a7473e1092b2490f4c0a588d9e6f2a5b7f218901e854887e46c2a611ac473cc3e62badab27288bc6d5daecdf1f1dbd27dbc6d7f83b8883e5c2e652d3bd4ed65603887828e622e60beb5c6221517b07914529c230fb99eb1e00e858edca3683d06c081e283453e044e9096912da19a22e47c4c81a8cfb369d6d52f8ce57a0bda9ac051017a61e23085b6c52121d7c056550425a33744efeca84b0d303ea1fec682019ee75c00406dcbeffcdad9014b9ccfb1d190a55e79c4bc38c781d0606a89284b119d0f6880428802e3c53e67627dba4af550d8667a787c64058781ff77a9f266522a7de1cb3824b821e936512e807e983cecbaa319914f976e4b3ac54cb04a1908968cb549d607d95f4faa06d62d83634b6b325f7f969c98aad4e4fc1226972ddbea262a21a49a2d44fd83cf830c3172cdd527e0d30fcd30622b65eaf091406b752d328a7c2a437b79fda7f45da6f18f683283703e8549273e56a7d70f7baf987b67981b81f16b8da55700bd8b822980c48b2d55e87f7845e55f900d966b4b7f98a0402659807b29711175713628430e8ae70dd7f885c251004d0ad3aeea7ce772e112f22b5fd9188535ed5a8521a501624f0b40971f8f153629fc707f7faa97b131f6c92017ef2188ca52bea1f4b921f3ca0fd6ecd6475730fa4d2d30b23d58fe99d4f1602f240e23d98be6b129e536e66001e3203152e095c8e752ea0b9df2012094b3122fdfa6fd69801ade499307e219c9ad5ab918780e9cb127d413332d61ce1e575e9f8ab0bf8219a250db2a5d90fe4f7dc3f402e6437d93f3175165d1c6ab5a256d088cf5102c3ec52e67120098167c9a836c76f4db737500da4d9ca5dac0306567f24d3d9970d7cca075b2b8a16a364ec1a9dd687f863f94469041724214895e74e3354f0155ccffd08e744d530066dfa531a00bd6bfd9f883a1ba00a9af4b59ba65acf5f1e405a6e339bf8658e2f596588e25a589252c74b8087117b59a609e64ff1af511246a0904fffc2c5518c9bb0248d6fe3fc01e4f0d4ecc7f0edcae75983ae718081de47059679107f5a8cc96cae51adda19998d3abfa35ff5d7d1f267e9c7b267fd759220af9e7dfdd9ce46ed9ef580c56b78346ba9413614a869af840af3ee71d5bb368403d667cb8fbfb8d57eefa510723c5f161a5ce6b7cfe063503fb99238bb0d88a23bc76a62ccef8396b6867755ce3481cc9b4cee69ced4d23f207f2a170deb2d0dafd8024e11cc3bb3de70740fc01f20f1a497a99515c560a325bb22a75ee27818e88eabf81ed445bf6f242799084ad117bec3c4e44510934ee7f428642e721e766e61e3fb14a6360be1280eabf75606b14267bcb1dd74ee84cfc087d7ed187488b9e826c1b390814bccd295932dbf3660e7ea0d983f30d6d74586ed6d1b441ed2438800d67c51bbd19aea58f91be4d48917d11401eaf2e0c8f1edb5be599361e5a3d7fec3df384a4fc3a5c5483275859c4a937c89712990dc5d3b7d25f8750235534e7cf43cd2b118efbb76fb01cfbe3d08d7a39962437b83d016904ea8776433ca51f7f245af84bf7781caac1a81e2cddae435ac2eeee54202f5bb92ca090c7371891c486a2d49c5e39f4cb5ed0a97d1296f8f4c477a72b95e6f4b9cdda87f77016a46512aea54aebc7a89b2e9e851e97cc03cf43c84b83c5ad9ccb763d411b0c26c02c6f85559ec8a99ee2da19985795d8cab3e8e7c0a5d80cbbb9cfd2a77b36d14ddf452fcae01a6740680949cb703443b7685bdef0d9f58bb9497fa0a15f149eb3473eb5ee580c8af5f4643707b09b9330b543b5c16744b3ff442faf180ece155b2c001ea74ec399245093ea3261f3539f6449721d96ee0bf3718608f2d18dbeab563372df096a1c37423d6a35c963086b3b141febaf1b1cfe9a2db219f079220c8c80ba7dd2279b95930ac0f930143cfc034dc313faf26c8985cbb573b3b9c8e7988ffd69f1229fa60ba4f365e02d76ba839b677cbf9c85fafb091aea617638a24007438bae85afd271b00b6020d73f0d85a712104641efbac48fe86544d7fba74d9094cb507554818fd911d4373a1e5dcf18ccb6d6073032a80427cba205985c86d4f911211c151b2bc40ca86e7d9b122b979d56b919d2c96f10e006c427972bb578794567a27a080e1c04c40dc93e945fcc8ed9359d5de6e05c1afdf266817ba0271d4f6b2f0bb0008702105c45904b335ea62593bc57f3c590dd9874eaddb31087ec1775e9517cc8ad0c74a21a18a071f6ee231b9d4a57e45431bf91da333dcd40ee85cdfbd3d230382dd8296f5ef9df3b6cbb1469bd7a054e1f5a925e0c809ffb2b82ba8b191bfecd6a24376debbf47d62ad6c84739c4f229ae51bfa0eee44e60acf485c2acc0fb16cd40153b465b6f6e305a7d60459d728be78c60c564d1a11678c577c71327efbb5d140b03f7331fac84317cdb696d4c1dd0f4bdf8f3af62c697dbd6c3d6baa264228860ea87b1213830410de12d9c4986746f1e5f25e657171220eadd7ee0dbb825855e1a7d3c3cb93c74779a1a92316ed8e6ca2281de49b2f07afd3e9200645f6df14bbb613b37d7aeb0042db7b7cc7f06420a6a8f00ff3e39d3550d9a84030202b670f4bc18db3b90dffac38c74e15f0569265fd8b24364f5123b731fd38149edba15ee153af08de9e8a283222f3ab6dd456628e35ddbcc2d1ff798a855a5db35e782d1f4093e74c2b3449600519d2d97bd11ee386a901de9e2d1a3bd723961e223fec4e1ed8c9922282823af43d36b39b871d8603f2aff2f4311bce6920382fd58d2ef654ea3a4112f9553b56ca419ce20cc0fe246711c092afe0dac1dcde78d6d477b07944c3c98b0d54e9c33d7df5bdc6bba46e62d197e7fe1bb967b5d379a4aa39050274d09bd932e3beb023664ead49602158625a1962a02f12d147b1b2dd72e55c7706eb58ac0e9422b40875182f0950fd690225a5a13a9d5f751f13b4cfc32f3f4d579e5071f4d8de354934d2c18af08116bececd1221e8f7e98863e02a1f5925fbf34433b99a4419ba82201ef342d154f7f4b000440a8484a5201cd54aec058919769772e143489dca3fc15d32c57601634073ef9539128e1e82b8f4c0bdb7011c3de29e879478b2cade830e0e8750ef1f2e74dba441f56cdc0cc2df1a08e0067ad5c0072b1236f162eaffa1f50cf4a6521b4d64ffc9bfb9644ac4e4b5521311cbbaaa4d3a3105e1f8e191d974dad3afc293680be624d3ec2db929b6313db2ab75792be13365880d136ee3e50c556063d7235f4115d7c48dbec47bb40c00614c0e8daf63b5442fcb38cf60853a213d7b06479d950d7714069e19457ea46e816bfd64bf351e415fa4df9f920a7ca2cd5de68c9d881b7754ff2213f176a8bc9593d88ad5e60cd1aa428e6be315427e9274ee4ef99aee5ce9d001410a2c779f304c268c8de6df99920cbb90ee1639f91f68842b1c3de48c4511a22d1a109f7ad40d4dd631c824fd996bedcb1d8db1c6e6915e8d8fe1acaa194c9b348bb39ec3e35fd4f48bfa6b7242f8ab56fbfc485c6a97c402cf46952ab8d932f3e995e42ef0ac4263d70e219c012b6ae103e27c2e2dd45b0744ad3c92c6503fe7ce380e008e8b1cb0bd73d5df669ca2d5bfc0bba0a2ef9a27aab60156a439e88c740a7aed1f64da47a9bbf6c0e594f9c19a2785786c41f7d04bd191fae50ee36ea58dc94915d1f1a5165702c500ccc6212d776809dc63fa9db2805cf3fb37a6eabd4267a9244b0965adc598604aac9e70e440e1d985ce28ec7952c0e6795ca99d45c8e481ad4867e5ba98162715ace93d5914717bfb08f948fac97c26c1e67202b971be672342b3b1d73f0a9e04564ce2e652a545ae7ce23fd144dd49775d869792ed53ce28e273668e3af4199931200e368bdbdb12c27a3d776562d30c3a5de85c8c433b10700d603a1c514e46b6191ba430a3a0ca5237ce679bbb37f2f57e6190ef1b129c94082b8543a0909f5d8e97c9e19b4b27a4916f2c68350cbe275e8fba8639f90fc6ea44da417074f5bff70f120f011ecd421d9c304b6eb5e04874ef43d22e62fc713a38b3b63f800c25e8fe072993b02db342e20dc5d6c7ebc157fcc75376c4e53b6e73abe26c362547eac123c1c183cb6097bd2f67fba7432a8e34bfaa91b35c8dfd822d86850be39e63150257f92e18e2929a2f924bf888fc7e2397180da2b4d17de0a2f32875b991e8460d5cc903b8a1aa1558e546201fbfbe45d85c590790ae461bc6b8b50839baf0f0af50bf990d3664ab65c188b299dcb5180dc7f276828d1c9fe357c937c672038182d42b72990948b8c0c7722469ebf916a1eb6863ecf637e99350c388f26f96950247bb14eea2dce9e457a10a1255f0ce3f47295432624e8551243270400c3097c83bdcf4709b87ab5b0283b825b342bb306bc3cc1569b6ff9742948231c048062f111f95b14bdf799f4898c3068c554a1fb9b63fe86507c4f05c78333a34735cb177d17d333c5ac12baa5ebf5739af0777b18f243dfcc751d6a24c17ebc11927e9c0c11f7905703e8aa854117a43c68fb303ad1d88996c42c4e48e84a90ecfe452ac3cf0f50fb63e26b3074df243222f6bf09e905ab36cf44573ce2e0475fe1e666ac3a639e3934caa6ae6e951b04882fd38d20126e35002c2d07958808f3a42aface383ba09adf6602081581b13b017012cf5f46f91abeae79b1eb8afb2eadd98e31b2de7ea5ca7f284553eb0c5ef47f24d68feb756d7090e343cb2d499b65bbc9de919561e35edcbf6d0f1a57f5cb25b2aa964709b7809b12c41cba1abf349754dcbba871da034770893157b889ed2a64545ea2de7e5597af3cc87995248337d6331a5fd5142286e39fa0ea57a1c256e1dbcd461b4d574c61b4b6b2e351b861f8ec9501b6192162bfba461b5dc5b271d247cd7ae9a9ee82d132cead2bce3dde620e13d83b6f6aa3addf0a32f27d2542dea14585701c8200a7c1f8b196247876bba17e2a8da063115418d4763d528392aef01cb0d72d7b8f8a661c084cdad3f0acaebd40d33476735d6c8c3067cb3429e93c3c43476541f7222b22f87478b416dc3bb86236b10a936fe41ba89771a0cf388d8c86e74a3c001817f2ca378685aef45357d8dea1863733866726f6ca304c43ecf4c0e066d571143275c6bc8dad819bfb82e9f28b5428505c59f2ac604a67b1605c3b59417214bd8591332c1594577a3d21de9af8db2e6f6ed953e0bb58e92bf2ac3d7b617dafbc172f5baea4a2f838201cff006f831038c2d093bb61c09b58a9cc0f6d505c0bb8f138846bc43f2b7eac5b944978b498526224f864dcec42e18da5f9589679f05a1992f78afcd3b9f4eac6e5a09bd68c6656bfcb03b442a96da61d4264b93a264a9927fc34d4c66b41e1463a2b6151b51ba48753c26f2c97a5fd1d34b84309742f79ddda91d580070e9ac1da12518edb1a5666dac79710d330998e157dbc4da3b2bf9edbc8866a55021b200e7ef4f3c60b7443a63ab35826b882562edaaa6d7b7a7551450270ea1fc66e4c1e97d0e93d94040500444c6b58e2c15fc7f897d3c430a2de616619692b019b2c52846fd90a601096300de9b131585d8f28ff0ae6467b4f2c771d0b50425ca8a7f16e5929f3159fdd7ebc129279c25ed098168c0ec9048325cf4ece052c7f9fa7457c1443c15cbac232795076f7c7cd096165a4b3147246b0b022e8f2b111871394d72a8d3cdc682d936e29c57410b122c915da3df06ea0b564c1e37d99bb69d227a623712b3eb106eac027e7b8451202194eb61525a09a1d31524710ab244cce4612855557299d357f9ad2458b0df8939837c1a17baf3bce60fd9a12b0f438ee3943daa3894635a39a22b145b5106cbc90f9824aba448cb138ec66eb71d5361a4760a9c2873d803683804c50fdf7756547bb8178a90693ae03443202b36d4c3ab9917b1a19b586d781dd2bcf2c6a1c7606a64794119e5aae073087c141648537d700d7130956506fde61d7280a1068d815e25b04bab3e9978ed6ec8fe263e6f7e9d245151ec9e5e4e033d7c55f926171bc9645326cee4653de5ee9d45d12796337324d881fb64e20d07cb30cf3970f2a43eb8e84eff77bc83ff106f97b184563094678d4d5c49109f663f4678ec87becf108bd640a7590e0fbb7cc64041e52e0a6364d61089cb8899911213df7cdac9d10155a3987108b8159d7c27ec0cba9c0572b55987fe6ca8702adc2f5f74daa26e63cee6b2c717695a07971af76c851ed644d16df0449d0ea7a605ff956f17e70bca30062c240580319c75f60f0bc524d15c31a9f5d6dd19c475281b0dc602f62d972188510243ab30ce616f7f450b5cab1b6e94153fbd584b1aaaf825042c5e387d2be3ee0c6238dc0011ede4b2c814b824d092bae9be58a029172d77c4149dd0ceb7bf5f8ce1b797f3efd7bbdf7beb7ceb104c736f40796802e51172603c237b1e4d61021e32b5f8fc53d38115974f8de09627cb3af459075aad4aa173038d9bee558f823ad592739bf657c11fcacf5fa7ea9b1ec73a760272c83f91771b3ab7b188715c6d6afb9c554feae83856e966a3863d0aae934efdfdde76aee6e3c942fa3eecfd20335fd7bab8f38309fc0c3755e1740b5b9f423e4e4876663ceda7f24ae128f0edef2dca3eda081e0f0ac6464184e69d58aefe5806aeb563f399651a0627dbb430fee3c8441baf15a2039617f908fb3d2042e1ef9979ca04a5977f3ece6b6bd393e310767d064f068d86fa20eeb628673d0b8b4989221ae4cd3854d506345fbb812c42394c226e6d0c0571059544f4a81969591a58402e60d52c8471301b3df8833ae7a533e883b5b7ff891a8f1df67c5fdce9b6894c8b2547c49ca7fe786cf704af7f2ec6c1357d1be5b0e42ea994504ae6abc28ebfa79ebf90fbcda3e49353affa875a6754ea3fa2486707068064c095171db2fb020a2987222076d2d8178acf9c7eacb81c1859e5a839d7a93ace59b8decdfc30cc397248f8b9180ddb8008fe15f38a1b7f56684075a7fa8921576810ae2b22d276abf57f751445b767535aa5e7549714071af75d411fd418ec96984715b3bb5289d82f8537c06451f417fc71913048244bdc63968b2fe8fae4e246c6a5f62a238e448d14a15c18800a346acb940511eea6215986d446cd81b2e11019cf70f3e7ec879a885225c6a4223f222e705188b5ae7025a88d02e65fcf1960ab02a2acf23d07d46abaebf340d49ebf14b694112bdd4f746635d2c7e7a1d1d514d019b9e4e85bd7365bed22d889e99e18c74b5fb3bb25b25a6f34e6bbd3c0d9c1c824af3286d9ff65b5c7d9fdca965ba532e5a8efb0896bff99a7c73ecd5ceb4c5b72016d9128c99348fa8d030f2b54347a01913265e10dc025b9edf2f71c861efa8034e88fced2299603b09ad02f24511d1dbd1e33d30446c3d9cf7b097636a425cdce45db1285a31d51e927b60858958c986115b2b60bedd495e0394cf079968db942081bba709a5f939b3c194d4d4c591031bb5b20814fd86cc4b06a21cb4062d114a1ca2d0f79cd174b4a82749f100303b371a5a8e0c76fccf172c960a84c75b3daa55ec0debbf67b8dc57a04ba6b0ae15adb2aa5b6fedb34dae2e3539d1506bff885523c5afb6c2eb75f68741bd7d1478c4a42ad7040db42f59350711634c683e2b44ce5f0928eaf7c5af6595fc11694ec519626a957b065e606993fb016157e4dc497645c2bde8c215a8c1ae2c11b57ef838db7de8e2b1c10bf1615d753742d8e38ca2dea21ec336ac0923f4152800f0a52a1c76c7e8be3fa1f5f9a085 +MD = 2de0af9482ae448b79efbf60688456c133d9f3407af2e6995576753c + +Len = 103232 +Msg = c1487ef10766978bc9b04a00008c728e7ed397712433bf6256d2865eac3471a8ea5f8011333d02777941ad8c384deed864d47e02a03c364bb086245b3130de40875a16b418296f9eb8698fdc63767640325c0ed8883d03738cf3d460ddf72b7981816a611ef186096c6e1879eacdb1cdd0b46e7d45ffcde2d362bff61850ff5cbe1ca1a0ad5feebf7e996fea331b48872624c879404a3da16b1b0da44a0502ef2773e6f92d3950c8d732bdb7a827e2761df34152e0e5fbb73e66e5f3dbdcdd3ca4ce5ff50648532d5d812969b0bb28a39b6b03928c9aae2c338b6f6a339e384b1e74341ba054a0f5facddc87b29dc21589d236c0ae2ffe0931d1d591ba13ba227bae8ef36325de289560fe99189657d4d0710165ad6d955522823cf0d9020ccba5c49506b882b6cf1680b627496e8fe956908d08f11c1818ede4ce10f634d64e82fe70db0534d0f164762cbaaded145b05770231e204325a7a40b3787b72bfb1fca348fbb304d396698a89d9acdb8b32c46d8769e8ec8924b1dd13b0ce826ffefafd44ec2bb768c60c03f50daeff9f777abb44366b9ec57d7a051541592c8f3d63528d38d418368a352b97dd1b22f63111aa6223d3e08f6ebdfee1b2823ac77421eb4a6615eee6e9cc4898d15b0c3868708009b5887b8ffe6211a08bb372bead1b10a4ff58001fecbaa31f71d6850e247f856076f2376c3551867a55539e1def3909c38a04178a9ae5845546f555206e260390ed79dbce1b72a59696ca848b43631dce8f81fbcefb363262d71e43154d4d40c0a286315fb9adb51dd97fedb1af8195ed973674941795f76dacba1995cadc85191e7fffc416eb0036a3dca0363e7bb94a298d4a84f7eb199e4e329d4aecbb1ac3e8ce0ea83a12cc0a7e4867c4f539d10acded4445a21ee11e44ec98d9bbd347e588d926b12e0c62c1f12b0800dea425580bbe2c80201897151652d1ed3f0a54a8870a0e87f9bf0a8285ee4c9400a2fd5a6c69c8dc7abf83ab4dcb122c814988336cc890d3a3150c75c0f7fb28631ca0387754e102b7fded0670be213e88792dafbf7a723d35f5afc32dafdd6310fb571bb5e83e99dfb91c510795c7cc5c808943098a7d6cb6463c94517eb9ee0e256a2bac8da94afbdb59b29bb7cc7e0648e418d05f79092ef2fb0fb6cd59706584218fe6ace8bd114aec51b38cf8fb8db788559f612ebba6e0345de30283921effc370ebabc4992cf01d57d77c13ecf9b7bc23fbf8642b24f82fa5608700fc407d9af541f4058751b434ec8fefe4f8532fc7aa6e8ce201b3223310b6c29855d3e8ec4772ed732e8a7e7837644d34c8a206f2117f8571e458468ac66c1d1246e027028d0600d537de363261ddfecb03ee268581b74bd97c1d4c7aee0afe38766d2224f08394f54956c5aa91836a71523f76c8219c46e272091c4cb118cfd08e85c19a987310990df81128f0dcfaee5d9ede021ab8df536e249f48361ff7a3352decabac5dde8a2ace03f4a6721409cb12467d93937cf61777bbb5a6a7de79146f8ba054ca659049e08355dacd228b45a4967fb5b38791160959dd2836ec1ad25286c1ba410d7212347a95b5738a3d725bb651a7a266ed12e36206e556894d18dec556034a3efa2cd4cefa5eeeb6e4fb3f8f3b92e883d2b40bbc79048e1ddb8e1c30a75a6d60ee40c869cdfdc60c4b875807849e0b4408a48b517eae66108ddb13b0fce533db17f5163155bc81f639bfaf0776f2951356896b075c0b67ca29a8cc2b9ccc23183df4c810dcc1a9da754a4b7857b70e57850cb1c85d4218b4779c4d8ad038c67d28e5e6eda834c522c8d234407014fc775dd4677bc77c02344160a0b6e051a2739f6e76af023e5e35fafc73490932e9dda68a9408e3e0abb34d9bcd96143e41636c3a82403207fb7bd3720f796a395cf028d54156f9979d9a64f6da11b3282bb355ef118780b6245c1bdc10bada50de18ab5e754f51c8604f4e19d1110736e6cd23362c6c3473624099e17ff3a39ff6bdf6cc38da329c7a3cd3abb97d5691fc179eb6dad795683b8f162a630c0b4f2c47d2c892dfe63b75c7bb559b3ce960f5fb8d1823b0ecba39b15a5fc4ec5b88081f07fa8c47b3ccd95acdbe7e3808cc57dfb9030fdf8194e40f2d27aa7dda7113ab5d092df8e2772c5cd28e6a58fbfdac2deb20a74d9c1cc30f572a1ea6d233d4549c9e7edbba66f835936f6884091a7b4ce917f2e0857a5e1a9f11274f89f5d3828b6085d885bec44cd5077ea47b4b4da47b8ff88183d73d99ce84ce6048e0999ef3f84cd889aa190b63feb7a199baa99d6b30c219e05be9f2ac2a1ac2571cad0e9c0ddbc110507ed904fd1861ab8c179f80a3578ee22de98f01ac135bfed0973c4e48387d60d87b1e7facabcdf9ec1f128190c0cad276c5d695b1c1148525e08ed1516df2c16b98439db277cdcb004a5e379e03b3f85d063130e22dd633420f6eeccf820a7d315eae26b8844a68f01feb6a762a339b0b330799e75e87524fac43696a7dabdb5154c8e265db2a19e52722e1c03c3104a7d4bf99675c10287640750ecb68bf22f303f9986283572607e869662342947c5a71c3f80b305afedd526ca49a4a2d9b41f1aa125684b7d77dec29bf474346494c937a7e7ae14c1bac6a8ff27e2cdd8e60a84116eae7347370bbcbb5d5472eb3a4c14cf25c77cdc90c1048c22015b7427bb0286dc6b3b54407dbb510755734048b84a11e5bfbc74e25cdffda280da301b88fc5df91f021906bd65198ce7940822863e1c81d7421f31e281a033d1d89113fcf8233f3a662a0c334061589b73a77a4e674b94aeac3001faa0205074b51bb39f7c63396de5fbc387b3b4e4d190a292695c3b98b6595bd52d91fa830a1e347ce90f8a51fa0002cf2355a0cc3a699e1d7f9349088ee7e71dd40d9b45d2727fd2521825239f22d3718e9ca179366cde6de993005e88c6966e86499f038e406256732cb028adece26d220f33764618f8264fd20e153483be29ccfc52569e06606bb4c3b7cba6bcb414a613d34dea0c8fb91ae6aec7329dd2e2008c71b982331e94af63a8a72a10cd0a53410d5aa2a5e9a8c3378eeed3737929d97059a6cb64d163cb830f25a897a1b0e21d4e370073ba77e14b0af6c7a31553b05e96a8da0a4d5b81a857d192afb6aabb1f127d740456a8eda7cf696fbb4c121d8d952a4e91c6ee6a5a1f3588d7804a46bcf6688dc662ae50c438d13c1a61c789b3f1c599a9f28efe0ed1cbeb8da3222d8d66b2be38531aa326c3a8cd4f1af67d3828e53b9144dfb53cfc0f4b5073c4d7e6ffd675e89c506d561c6a93d7bc2170a0a713b5162233187b0a6a18ce96a4ce700e3e4545c2f217c89f911032e9db0c73f8cb86773f3ba03f9976e436703489bf3e64bcde5b722af4c9a6d2ef087599389a973052e04be4f105b02e468516820aece44d10ca432f6127364c7abca3af5508e13327ba064f45fba0776d69ad5009b637669b94078da434a9fd446ac7c75fc0441f7420dd4794c7c22029827b6c3206c8a9cd4d11de247e8c560a976479bf5d3a55b6b9437664168fd8f964034efa7b3277345a0489787157f70bc6fc2f0a3c3e666df7db544a5474025b82d770e97fef6f4f4f5227f6998750e67e116fb6f9cad208410759ae0e193cce635a6a758169f29ca18d324563b4e4192126a44bf25a1924395a0f05afe9c8d08a1e94352c3c91aad50820eb7c4b312254be754fc276bc305535dcf7a66066f06b96a69edcc1cce86e657c3f2fc4b8708d4b5b28f6bb2bbb093d5bdaae0777bc8c54ea191fb424d3e227bcd71abbfab23f5fbe6deb61f832d9d2f44523697b8360dc074a616e09fbb4c16b49a99b6835ef6e27953d35a2265b994ecd82e102e39d9e66894e6a1cde7ac4ffed78dd919a21e91f255880aa03f2f2c3ca59187e5b770e807c3332adda98a4f358f51d074d5b730d94b9fd706a2461ebc2126a7e6991befd99bc526dae82d3ee029ab429ce107e9b79fde6b5b784793f4b4b71538c822236585633bc98ede43880f64d79aac57e213b80e6ba7a87ab26dc70a7ce32bcdab33e7d711b482e586b4a844387520ee4375fef782f21a27a4aec0e982f0a963afcb2ae751a2ac8a30ec5c120d3524163565d9605645b696903f091acf662c2e59b6b75ca39cf41569b99398fde39f15e06cb1128fa7640f9fa908650c4d9b74cf7bf5fdaea942cd58a1b59cb1857b346b11eed6d6210cd9f9732794e1addd7e39a24b941bd17efb262e2ae7d1269fbbfeddf872d3ba963dc525cd6df58fdc94c0b323e7911c90e7fae85b4104cbf3f2c35738ae2d7aea832c4861baf1fa7ffe8c37e4c0b99360d9fd56ae71f27e5f20df0714548c69f0f355634d417cf7ae03c4b6f5e53b3dd71957008c414446cb8f7d75f52a9a9091d468fef8cb3f8d51ec90b6c01ebe23dbee2f6e5e77a22c1f85c32a44fafcf6b3708fa1ca1fe2c4510119c1ac35ea4b55a2ad298adcb336434bd9ad678a5da33f0df0d52b070ca4948a875e21f069bf2e7bfbb87a38206e1f29e886c8a263a01ef4b3218349653603cf02168719e0874cc23ea3945390dc9c66183ecd0cb6f4366d010e3aae96818618b16f4776faa999bea17342f4ac87a04c905ce08fffa771bf0223b8fe478d06acbcf3c7d05d2ffcb949afebe51c771421796868f2e6c2b634dde866011f6369d44c2a70eeb1205cf961dff6ec87b4e12efaeacdfe124cec12bbe5aa7ec70a99d8899baa9a9f85a3c70f8bcdd29647edbb3c6b767b2c4dfda2c3a3ed3fe78a7c009acede9ace65b86b7b3cd75ef03722106773cd31dbced02c1ea9980a26ecfc93a74b72b7e8c8832dcf797c5a3d8c6774a28839e7c8d54df8f37f11a82c3700dbda9bd0b992b7ec5530cb248c274ea331153422679b6d5c4d6baec2e1a2736f1e59455e687638db2ac8b937be5486c08de9fef077fb9be575aebd117c30a933a54cd1868c3c5638f5bfcb1db66c3ca5d1466e0ce09069d0b6e33468437de033b8dcc7afec8c16ebfe3d893f3d18763a44530ddc6903de0559329c2efc3220579f30b040510c82dc8d697c031a003e67303962c9dcfc026da5c47bcb70f67187a17214a38367a1f4ea6b2bd217cb9b14db1ff63c0022deeee4c15ca76772dcab07c7793f4a437b195d6c1e15fa2196298e2e4f9b9c1e79715c51c42aa94e68ab1a59697c6e4919342d94de328cac358e918ef74f7997dcdf579a3dbcfd311e6f1f506bc2b620822ea30af2939511822c2c6676c15f360d1e1bc74ec52cc304e061d40879eb70beed07f7e29eddfb85e9a7de525815a31618f0fe80adffad25e4270bc609d5e3d65ba18237bd2b1045ae4920157b6585feb3206759dc3b978664b82030db3c1fd15fb8d4785748f8ca645c5146941585ced9f22c63baab2831495d39cb55e8ccb7e095142dd3fd5c1cf1269c6e0aee4a8d71ad7226b016092d795e7f21e0a19391c8816bdf9b10e4443ff0271445b87d43639a64292443e282de0319b9e52e1c66fec201151649374934011ac0ad3bc5f9970127f47ffb5a395f942f1bca580e3e6aa0fd57ac72fe33baa39efbaa3ecbb6f42ae60f2a061958e358ebd0f9e71121f465872dc551e00ab81cdb4ba48b3682645cc7038b2cc8ea5498735fd8a3cf188457c920c9b086d715b5f83b03e8af65cfe0f2560c350ff4999cef50d153ed2a02c0e8b7205597a2bbb61d502f1ede681bff909314e895809aac882c4ac1166056e60f7b3308bc719167741490f56a9231fec93f0a0e03953f106579adb3f0c0681264f268939d4e7f0f220e8e34fcecf928c4e4586f003c700fb0c261f22355208b0fa628bde1406df852c692a53b7c5bc4aa0965d3357c15f28e8cce465824679b391fdc4d315043682ac5020ed04c4019a2379902495d160229615c76373723880ae3ea0c3484e9a8d292483862648e70d5f55cc3e5e75b84a9c8734c67953e9ba97cbcc293e6480073b5caeb9aca2f116bcb16e0b123ccc3364a7b8e91469e1c3f72b836f57e46b735b7f2ee208809448b412f1f54185206f66edc055c532d53f34b48320352cc173f1f270b9ba606515de00f4977ced39414bcfe7971c3d187ee91d37c656dc366ba75d008b32a0d7f0a2f1f26c14e38b6b6bc4ab2779e740257cbc1ddc2d411edcd4257ae111e0518bab7c57ddb9f6ab405f7267717ecfd0a5782791dc291a0f4a10c23c55d89d86294fe6a176cc950d628f4fb91f9b654e8163d65040eaa56c35d5e9c153e746da6c18e77bd1dd5d164473b32c9c40461e4bb84ec5a4e2a1da12abd2a655de6ac2b69ef523596cad7a58c5531e520dc0c456fdf76e62916dcd830b3357f62e77d3bb2a765477eb049e21dc962adb7483d5559d76b7148787bae96c72529f47fc81cc74017bd7e900e63221f2ceb2e4fdc5aa2f334c35357e16c8582622cbbb77517ce42cf5e3d711070c4e0f66530f9d19d71bc37a4f1bcf859246a545061966c74f033f7f1645b36512a932ae4634f0466efb9dddccaaea7bf9c09645c8b25967b549df63f9a56684d7ec02f306f585dfd43728e328735d6e414e7f81ae36bd97423073410886b8eade5ef6d11fd1dc5a9976fb370d0596d11b58a7a5011701ea684fa192bd5a191ba89a94c4fb5a422b31039b25c4c23558ea77c50c7bd3c4e5aa0fd0d5a2a0157b9927534b13ef75e63d857f5bfa49a74a31145e4478ed84fd89e9878632f91c9f528dc8d01411e5f011751e26080c7b3981b6b9c982c4b0b68a753c20f8b5bcfb57165bf05651f0fd5f4b0e30986b0fab4ef78e281409d6852e3b75326e7675240989832865304542798fa5f80615f3241b2f41dcb72d650dd794b9370eabb38dfc3fd4e4bb2d5183e2bbabe8eb7dc41858f65b43e69ffaa529297ebb53d616bda1b1d7c1e2b984263d47567fb312d11c9ac5511a2ce205ef95524c1bc8761d179c77f22c56657badebbb5c48f765c8954314b9bbf483f531aeb797e4e71c15404efabaa090a1968f709013c122f71907047d0ba5d806673fd7b1f8b33a38bdbc2bd2a7ab2bfe734f6e6e2374b03721063166bd6431d9ca5ea2e9c4e33c4c74dfc5783fc882fc8062279df1d039b69f076c5a4573ac8ead1282c7a31157c7b94fae53e965300c4c6c4eb8057029e5d18f17c03a60a2956df009c409ba375b1970490e4b2dadae35c24634d4b10b5576f1c6511297be7ebb8baa677f4a354703e627ffcb7e6662eb08a0acf62f5885edf3ea5554954abae429e74a6a3dec4c1715bdc0e0d3f4bacaa3e088d0478be7a50a167576e5f1ca966f32b55121c6baa1838cca21cad32653387840f9a63ffb3a88bd1a00162e3e30d03f60da825f1361b4279414bf8c36231afa6de8a7cf512d0450bb76826a7641d14fb54cdc0ff6a62be0b7204e7a5aa8efc98813e8c469eb0173e240d731135806f62b5e9b73d50d6f7aabeaf43814530b77f801c5a9a60304892705611c95d1c5c54b564d052ef5d347cacb2d4fe3c012786648eb09a5e39222e22adc776e4db22f9dea7d4e74fe0bcacc47662c596e796d2b4fb54eda2b1eb3bc2795ec0d3a30b78b7188aa37948d8608e63b57d5bcc4a8ef8cb0f3c3482ece0d9229f51315e5df9c820bc2f747bd0c193e294cf94978ce0b965a92f1a926d46ee104fce06f361a69a2830324863ecf65a59c9634830a4f07d33ea6d5ecbb69489aa39e25a4a5fa5b496af55fee774276b311ae07f7fdae7cf9c9a9f08130ef3325a2433364b9f1e9ed301409deeaf7e4fd350ef416b76ed3408806c1e54bf8b7288d769a1de683ae148ee9a2d62e6208da5333797debf2936df657daa750f83d09a1b2da4eb0420045c3e0bb72a6138ad118a6188c0fec45c8a1179b35e4704d5f9b827465ab9fa8f76b83d412e68ec387e1f141df77ce62e6f4c0942f7ae35070d76fe8f13d0ed0b0026d5d6564364b554b8f95d6c7eb535f7ded55e288e3ff13e1d5a87fe9023ff614e7e7b8a39c9acfa1eb750074f5cf88a8e840fd92d4918f574e5370443c4f301f8de3ab29343a5da19f7feb13601009125bf5df2d57c06984444a60b2ff76f48ee9d1ab69af9295b706170507acdd3726c2d515bcc0042915522dcfc9ee5fc9ef764247e9314bfe5ed9cadcd64e7fb972877f2fc5afc54466f25e2c0d6b6216bdadb5ef2c9bbf0e05651bd113c770066244449bdc998c5215af5bf3d2091671760a9d2fb831743b47427a9034aa76849273d5c875ffe1b88dd3b7b5dc39e550a5176887f085040ca0fc7788ad59dbda7f80a35406653e1e5c29f1f07090773ac75ec8667a18d6f88efd83290278186e86052dcd224c29c9fcfc8b22338f1496693b1d69c96f65957db03e0fc867c4c7327bd5723e270d61ecd5f3c989986609e756d80052fb585a09cf088b63bb696b215f5b01de78816ca830bc65074ee3fbde1c98a89b4ef7bc9fa4635a58d56ec0cf19fefa77d30e50bbb75563211516e2ca06cfe126ccfc43cbdaeecb3c684d6e985661aa8ea90ca493b45f726b7d676527a00e387a07ae75fadcfb7c72d6addb197ef3b0a77d24deccc22ae14afa5de96362a42cf981b6c9c92529dc9092d88cdf0e559b46c1bf65c36b485e442e72e629e9422d49cd8dc5a33dea7a2a3f860a358ee7d8e11964e0141a4837eb5c4ef1d78e68b7df4d9be00591cdb3843f1ec9c97b2ae80ad68dc44b59ab0cb5363a82e8dc786b2e7479af8ccb343743040b42074dbf4728abc288b593d15b163ede1ffa5e0195bbe4af9a9544ce73eb40e4098b80e574ceeb8bb3ff636b9192c8922f788d94f61c209617bb98fcd7f1583196a2bf5e0f622841cc9542ca5ecf760f47efd592daa38ad5dd6c223ff1d9cc6c600953896586e49d38f3bc8df100c9adefccd08bd1f6b5d722239b185029100cfc1be7f825b192f69fb73b2716fb35e69d9c09006a8a2422ac7e4e065143c58bd146e71aae56d5d6574c39162f034d41b7e9e96102e24840c2d8b59a93de4f716636cb618dfb0fc4f61f50ebb7ad6257f512fc5e4973a4aa0bdf8c45964d304651581f7d4322b33b02ccfd083f7e3791abb3bc289cd2cbc6fddf2c87b714fa82f9275dce4c4262b0f3c1a80c24ea1f77625893807b6420400f6400d194ba10bfe41100c527fe90bf4f99dc5816759c81af5e2cd673cc447db71ab3c3adc1154598c1930264abbfce7cb2248c72a52138e950e29b046f9b089b4fbfde70be6acc9da5aef660ce626711a6fb09c7fd6015b6bd5f5eabb2a649129f8f727c06a3ad59499f21cafb0b0194e4ea6084e2bba08e1ffd91d859f8e7b3769d302e3e32705209fe04f1a62c368cf84d2147f9a651d5d537c528ba054d0451838805d9a9ae1e7346208354386e506dcdbc7fa6b2b22499a8791b575de17bdcbcfaa14d7bcf2511f204ee89d2218591d6a2aa7e633a00c9ca1e0eb6555d8064b4087f1e2b4bfc72ac1291bb6be89310e26436e53a61f0e21734915b9e19c8860321fdc02abd0af1beea1b6d883c1f779b81c38f9ab25b7f1a5d31bbaa9e9abd14d7bbe80c9ae72bb4ebfa14999471124c7bdeb216b3c6fd3de86e5add64ad7683aa27da435e079d28a8ac55127a3e9d7fc2c71130deb9e91c66b5cdd8f4474eba19c03b618ee2b28490b083a555ee55cff73b017babbacf106896691fd61ea23297236fe9961ef843448534a4dff6f7a779a92759a3201bc46e9ec104828a1d87b2b00c4e1c02fb0f24b8fcb340eeef80ca7fe74d4da05b92d91d7a3972102d23fcf484f179352722c1ca2033513ca9f67a4db5d913b21b2648b0d9212d573d81c67f6e86463c0938ac1763b75976a3730981378f8dbbb6d93df7825e3cb5db4bafaf1d7f0b6e0dbb344f1ba1f2238880e8c8d0d32443db46193ffa42f8b292cc2902364e2171c1150acfdca593a9b59aa87316466fe0d4d76b18956219e3d09dc3173d7630bdbff080281b14b69fb73ac91e7c5bd8f95007b400084de8b0312afe6c9779a1c866b844d64b81f36c19fbbb297775f813b9718494b7691dae111e4b60d8db0d1831e6c959027fa2953a37ff329c3735c69d8f4d35274601441cc22aa2761ccb23be067e3ec4606cb1a47a25b85f121a6868db8e6fdc673c08a0d12c9003b174816781d3e605c6ba37e55c9f3944993e9fa7c0b8a34b3f366249a5c1b7e63b91a7db037aed4b3513ae8939ec23c12eeac2c6e96c8df84088f773ba7a88a20d9b1d64e5d3b3091df16becbc9d066965d78862a01a7e682d9c2ebba9b790dbc9f938a1b36ee5c3f3dc169c3f225fb1b06d46f7af33031f28f87e8dee195ed7d344a02df6bce410594c35244c0cae1ea11484f24146aa81f5166d66e210414acc05ea562a3e3c52a0ca2e015dbc6024ba75c8ff10d5d345048e81d3302cf68906a55da6b8736d1f8cce87a00ec214485f09995a98611bbcc9c9425f52dfdd3735bb90bc4bfce4eb5fd1c8acb9be391e21386ca14268f26dc74f2567b4a963c9bbb119f33f2b422aac6c7773f8f15d0a838ac96f996de5ec8f88b198f00a38a51b1e6fe81c8ee371f5070a92471bfe920899162227e064ad852e6d4f7f72aa7dd65bf9076eb86735cc29f8842e8e7c3922bbf94558410d154a78cf17cd8367a870024bcd90083c0a845dd7c609d97484649be965b5303dd832203d6e64bcceb97aa9ded74b2ee054d01b0ed4837d65f830914cefc91e755aee8d5edfdf7f6e2548ab3880da6ce2a911da343c05fadf093934ba6ffe7c4201d24899c8985bb4708c9edf66d872b16bdc23be691bd22e4bc10eb842efca32818fca84d519c2402f98ed49f5cfb0eb31817023e83f8402147a87ad24f798b54e798b9671ee537fc6f02eeeba1aa7ee8ec457fb45db90c907c8282f72b05858cd1214452b808fe1bb44dc643063e839d7f733aaee9a79019a2c78a5b8a4998b81fbfd275e7ac81480f96e10d515c25ba1bcabc95ed6bd3a5029e1b6634ecccc11a99ea3a7379c76cc705c9b24bae6d2806728cd232acdd1ae530bc80f097298d07d814082319d86d25c4059bbcdc62cd889232cb8013b76291a5f51187f2b80531a3d848c031bc3571f81d2f6c8e0c92eb5237ea9e4868634f244e81c2a48011df23bf60126c7baaf3cc99d5226b745f75db229656f2f80766d550386756899a588050b9e16f1eb6f26602f7a81ba11d70557b366eb9703420e1829f3eafdc86e5e114bbf5e5ad40b8eee0fcc4479bb222e8cb34af47d7d4c3706c1c115880bfce6e91ce16742e2f8b8db94c3f976b08d4ba98f7e14135ce98a99718a6f87d2b5b51515b0bc4ab6db46a174fe0b21806cdf66de7cc52920ae7b58afcc638dcb4d4afdcc89d7e2be17aaf816d7141aa9357c2cf6c3720f770f8bccd2e39c0a44180b3b87f944ab7732781800eb8eb2a99b84648eeec536be812e5e918c737ddb9a8826fe6b8cf560b020a9b9a7f599fff39ac5fd5b194f75a7e5865203846900694478967d0b6109152725a798c3211ad22199d894f8ba2ae853ec9b05394c40f8c288c69a6a6eded60e14513a71f898abbb788728edf74cc6dbf9e2fe1ca81bcd84d02540048f608747ee5d09ac80d804baeaaf93538759c7e026b05aa8fcff5bfdf728fa74432c8d571c1192cd4a8761c268b840e40ae070230b899768cb7a28a0665846341aa16cde3615424ec5f557446b17ddf9c26f33f700e550d6840ab82e9629afbe764dba2fc4eeb4bb73c039c36a64a71f7e54a7eebf3a037cc73f8ecb1f13939e06afd9de30f4469de4669dc1ff2558cf7f4f207c8f2e2bb60567213859ac9e3d1c46606c12cc94608856f7b291b04f7445ad52230908462cbf4ff3e8ee6b2c26578fc25bd2ee0a9de02fec37babc17c871fd9174b57ecf4b65288b4f45c5d9e4290a941009cf35b07c4fcfa3e2af3e1684ce82d40ce8339c87af6bede85303f101353a4b1fe69252cd35369991e01ef8ee8e9ae387db1f8aa732fa474e7946c780ae494f9ddaacdf538e958b511556ea2fbc3e05aeddffb03451daee00cf2ef217c435a00bf1e1b09faa80fb98a56264b8e600ccfa573087cf9a724477cb08eb571583eed2f2dd9112176d5ce126cdf32a7a779be2dd7e8bd95b44dd4bd3812d9f20b87e8b23fcdb4b63df41c30ff60ff518071500e71636d242e72ac59f0423705447f1bd2bcc09bc0e4b2ca6c77725991d33aadcfab4034abfcdbfad842e877b5eb6cac160c7b6e475358014e3ddde871881dfcf8ec49bc3406d0e4c095ca4107e897c30697c3d454722de85fb76955f8886266129b44aac63499929b50b23b052348892bc56375ed297ba8264edd482eb95112a422faa96a6e7d2df0dd6610b685c7250cff21fa1d6088682b6a03681c04322836e8335f279cc5dd48a3ae6622f45bc032abc70be9ff9e51f774a15ec9514cd25055b67405a6bac92a0a54e652594d8223331b4f5bee038b11d280d13e89e8367bd14d910c74a11a1e7a1e374d9de59269fde66f7a15ff3d01ee686a81924e7c3ec4be5e45eec5f7ac5bd6011ba66b198c73ef124e5cdc8f502f21d19c56c6cd2296d282b7fd6d895d1542eec55e273e12fb00e1e0ace0aa85fc72ad96bc9851aeaf51a66a87e0f8b8102ba452ac612a85ffdf8437eb55b628bf24a778ab0b2f6a7803716775676b46b558cbca7760046ce655a25b0381dac2dfff66490d6890de57b08cb5b04a0a8d6a930c36a96df550182ae355daad3fdac4cb9311c9f79b93b51f9e5c1fd1fe1798a20f9d29d025b8fd26f12c5a200df8d650d5d9c7007910fb195065a9446f6ca84e7b07dfd1bb2cfd1171e86a246ba47d56d5a8efcb51dd8f664ad738ea8412005ff87cb3b8e03480b20e92f1ff816721a43a8629a04c83dbce33bab30c66930a9d30058dccbb59eed26e31d9fa78c82a03ad7b5dc692894519b31701f23d772dd0c8a955567522af3939cd095d7850003bd69073864a77370e74f50ce43044d0bf6b71f39e35182baf186f6970a8850b145ccc53289cd618761b5cbb2a67845d33bf634fec24c1cafcb21de17b31f1b356e838e5f4b12c50195354f60b0bbe3bf46c8a52886aa8f5e7b1e159c53b1c61c821da1231b10447bfc2e6a5d0447bd2ca1bebe2b92e52123abac3b997ed8d7b33b0bcc029c4e364301019b1c239428a7d7490e8c998498bbb78cae9396fcc6b5f3ce6d82210531133e6f60026139bcbd41e804dfed114c63390fed1f3ea6197146e5e4365c0dbb692ec837b47f90efd98c2c3f7a1013b2d69ad675a0d86d5691aee2ee73afa04b913c9ca0a6c142488910762d0f94f462627750e6ace6aae4738635eaee8e654837f25d396dc8c64d4879664bf50e4be1b3390faea7fbf779b3875f47fb9ae557c9daaa405e08857494216d1abece82b7356a733c368acb5cce0cdfa41f3778f0c37fe4741c03083508930b17e168213965862c2dbd15af242f91377dedf6c899c13c9c430c4ad724f268c0d1f16da00ec0168ae1c02f0b5654aef743dc5b2cb92fbb421bc3427acb0dfd1ec76341979dd1962ff6d4297879d9d07f846ed74dd58b46668cc57c5b7d97da7576bb86707d167f7beb5db77ef52b8060be19ed848540988a14776b01d34c8b855e6e9eb3030b4d0f2de13b775ec6492b5f6220693f0c1c2d217d910662787a9eecf11ce7f62c894a3cf3380a1d36953ff6dbf274693a3bb0523c80c181c84252a0e763779cf6becd97082f9fc6f8ff3f02ebe63e9a4791c41538bccbd7a85d2128b604fa8df65809da94a4b0d299e17912267e1058d098c8f8f6979dca95358ad2f193e93fb7df7f662d19d5c675d69e82f01ca21b51cb4f6bfac3bfe11b66004e0e82bc2897dfaed83611872929591003ed645c684793c7ecb9a39aa1a75921d87143ebef32b3089f440e3d6130e37de382c7b7b62eacb2f9b7c9c682c5a95020de6a10e9f4f42d29db628105090028c034c94c8b735091218998bc0af2b12bb58a6793af7b3d7d0670d0ca9b3e39a11897eb735eb23a02e283b2f3b0bb1b04e529cf1cb611e988c388bb928a3cea875b0090c4b667c358bb4a8b060a8b418c5e20f2e4847572c0dfa7a5715881bd4c06237bc9191087332a52935b8eefcf127ef495b3910273d5b93200df9c990c5fb864eef90d28eff2ae106e6ca4650e47d63909e262456707fedc6045bd0f6242e0497ccce92d8847b5287ec1e167999ce252d1f98ebac6f80eeb364c30414985fc45a7cd53aaca82edff46f3cc740b7221d680717cdf1e266803154b9cdb4ca98addf272d30d3134a6f9496adc26be78233887e2932ec703a8a86fcc6939c61e0a96df35cde156ed7ecb08af86ec2d0f44fd7ab588266c203f3fb8571be950640a04d0becaa3961de3d9073a5320f1b83599bb72b252780c9a5d81743b66761be78c89565fe0993654a7c783c78186f34391dca2a83f751948765d9c3e4da19651a24ba4d414bad77fbbcc146a7a67511d7a50ade049edd6d81eaf479aeb6d73a6ea9a12edbc856193897774b2681d4211b7aa2ce11e3cd5b7bae90ed7dc242475ca1738f34483755e957c2d15f71356ceee6b883108fc9675dfad3a8bac70393cd5257f9b493f832f642c962b93e40fb362f75836b6a78980f16e831cb8dc126a70576f3c37040b947a1b5859caf9cd5dd9e0058883c83f67a4af5101adc2509d403f705c9a8b7f0c4bbadc3708ef202c97b8289d1cd918984de23ce0d7cd7433a9103b72e0306e156dadaa29ea1e98be40e229face54b5a161999f20e347edcc3fac2925a49d594e34464ac8cb12a77149e0921834b59701944800484cec2dd56845b1db542cb0f54427269a3855cce43755e97bdc862d373a7ff8cd7104d4dda79f7e0a8b6915c921c2c604be7289958d94a8ac2240e8c0e8a3f136ec3c434391fbd64996ccf83841abb19ed9d36df3b13f581fa2707a2d0356720b3afd29a5abfd630f12d2c8a1184471cef702da8d46b8604cd98f21da3efa03c0d9b1d8825a069cd19c1507b23a1f7f2bb28b6fc0b28259ba3417a066e0212eee4504d05820c9fc177f0e45da1baf422b78d78e4c894fccfe4e8456419b4e4bea1970b1a5949a09675829039721766344d661c67f3f53027f856fb3f8b4e3f34aa36ffce92a093d37a3efb16800074b0e47d498e7494ec2c4753459fae174ad968f5d0291559a001ededcefcb2bd461fe398a86033b956643aa7cb8d69592e34439e2633cabcf1a73857b0f4f0950509b480e0e518ac965937193410a45a12cea4f7abf59a11ab4dc2444a0422d2d9f4befd9a250cb4d593a772283147641f2df1ca05766b9ff97cf37c443730bae96a69d77e29f51a3b99f37a51f73bbd7cdb94dddcbe27af01ba33c6459203965ef21dd533f8bd27eff281f9546a66ad5360f3f8d9d6b489eb92eaecf51f81ad5f1542c0629a4a201a29bbb7dc92b17ec94278e5a3c5fc75e08980b4fde5934915594060b2188650e3c3087b8f780476080b896be393e5bb08295de705ec22b0a849807dcc7957fe734acf0f152348df38429051414959a28af9ea4db43d142b3f6a68df57c5a771f1467a39179b63ff8070f46064ee3f738e818dadb3df53020246614dfc045df2863d70c23de93f1f091c1d60f58a7e773e4aafd0a9dac57d1a64d491633f61c95ab919722e14c386fbce73199b2600f3c0dbb97f3f3754e4af4c2771337e9b3e9441dd109324d67e7d0f5e52ffc8ac323cbc11801dfde77ee887c4b615c7f3995d5e24661322624db76546d5c97b6a7bdb76219bea346594ee9c1128b0245121dc96563a57154e3cd25b9368a0442215c490509a4fe4b86ee913788ead9c9d1f3a74db5506058293f676add42c2dbc4921920543f316c75400755fb1b337bfdb9e7d1b7fc9fae59a4a40fce0163d215f1705aa607fd27a8e5b48305a6bfe9f9d313b7f7f48fd6199f740e956067c379fd070a6b79a1eb9632317524f7cf825ad1a356d1f2a15ddd724fedafca3f3e750745b6111ed046c1d80672d59902e3a5282f34e25184b429dfa03389c96a91abc2a4e43351f8b7b0299c2293f4ca6c4d691fe8b5ab9a67633a1d66cfc86a6b6291bd2b4edd9bbce5b97afaecb5a6aac7f6edd8a86b62e62e140ffdce51cf3a4e06f6e1cffc39d4e6fa1b724c36282db964218b571b6ebeeef0007f21e0097cd294dabe3348438e188e060f3f00bf43862343873e262e603a408751571d99a184bdd107154c59570ec7c35831afecaaa2d6dc42ba36226874981d1aca450056c9049252e272dbae4e49cbb3d08e30c1b3d1544477a5db3642692a421800cdfb33eb672837465b123b8687c878461c072dc53402e30fb9680836474dbcdb630d49e4e80d605148217b009ffca5420f097504f41488de5d6c5a81ecc4253f501b7f839d690a0e333a614a7cc6f41c9a371e132cefd58c37b19dce931bed9725944949ffc1a0e7aceba2b696cdc1304e2ead92470b55b3c8e6669ed2db729d44063b9a77bda17805a3a3e78667b9278b4e97e4caed85cf915939551479509c4befcb179da3a829ee00e95fc42b386ce21571ad310ce24a21b88a93e08c042eadcf7c23ea1a1197b671e781c89ebb6ad311af3e01eff7bdea52decdbf6a19ceda13c351e5977a2c0f7522f00c28debbeed1b519c61d42855bd6aa8519b9ede7616b352408923e614989201d17500eda95c427e2f60b3f5b06a2723c77f20d22c414560cdb90fad2053c638b72aac84158678c1c0a305a897b54ca76628903eb82cd8a9ec71a2bf8b2fd61ad96af978aa74a36177b3330ab1a4c17a552054ebc1df5573c63a44e3fe35aaf060bc4f90112daca77d17a3e3a7426ee4bdefd6a1f060a507839b5de3216c2a0173a91695f2b97cdbfa57bffb20943b2fc61b7c27edb9aead4a1d55859bdc3f973bb8b650f421fa4515fcee19c5a411a1972eb0475ff25aac43469592158dcff8e0719786c06c0d2cf78d97073e79d68459b0d9c7ee11904e97a183d13688c36d895c2102fea29fdac892248b321b741e33275e70432038d96eb3880ca7d4043e5e02bd8b55cc9795af94fc6e4a93d1b84e1da90a06263996ef060d090f7979b388ead1e86df1dca6d41a87772de8d799d219215ddf2c7dcd43217891178009142f9cc7e2ef19585560ac2d7083226c0be6a42e307439ebc6918c326c67f09ea87aa10541834cf2e97bd2561ff64a7a54b245384d70556bc802d0a462a6d11fb89280f5cdd09392ac4c156a4e2c66e8bd5f84a77a7988e51cbe74353b7c2b738c9fc1fd4d7ff520e4fcfcd1c3cd819e8e15e9e48037db410bec004cbe9307846cc8ed878b377b85dab210f34782a0840ffbfd5527545567dbb5fc53b5906c39a0358bfa4da12ca7d697d739a1f3cd82883a47633675ff40d440f1b1e61e637a6f0f23be5c65106f1fd3db099bc70f8040f94f767744dfb240b667ce19e3f32f237e3d3b802a2fc5ff8da4ccfba66f6680619ef7b06900a6653ee4121887244002a962d980989292bceeb8eb8a3af31c909abb4caa8c67058d01f2e5aab3fe9655b91900265840bc9f1da1cc1028a58ab8cb2edf2d541eb5fe2618af960f8a1763d5eb183812412df042e7d9551b8d99401d801701692ca000d6dfd8a542cfac76265f897f6d9ecbf787107920b9b22f6fb7385bed7499acdd39cdc89ff5d53ed4d4fdbbc3125e80fc12a6133aaa1c358ec1de15ba1d6dc3db766ce74ccfa5b3c6064d16cca98933460b31116c97d394e565fbac300bb1cc44b6449e737946f594e4d80361d928cc1e9b37da7c28e032bcc9168817e76daf5e20db53de9ac0ea869725e84c4a4132ccea42d632044af95b15b7113758a75472ddbb6f53db1c7ce447bc2e53a5df4f981fd96d58d419d0097266af580769a3c7146c5b9be46192f51b263e3f92070ac9628507b43f559e1008acca419bba84a7ee747e7e5c9713023cea7ed7b8c34ba9ddcc0c10ee074db6fe10cabbbda3df58935d3fc3ebc7e953d29058e5c01afa7eb539e4328837c4447c1b178e152a9c232aaf08343af8fb3004a1332f511500911551f7e2b6ebeb01ac5319824a5aa350dbf04097f13231e1faa4777f14ba432a239eaeea202daa37b442385e0538dc27d0aa4eb5b87d73addd218b9bb113ac9107a76f116d04e92cbc70ddecedce2ff02e649c5635e2a9ded5a0d94bcf28230deaf4a31e4679902aed646ef2ab2385f220a791411368bbba09aac85916ff +MD = 45eb3d3aa9ff1bf15cab632ab21496add7c5a19973504d0df139c908 + +Len = 104392 +Msg = 097a2ee9645edfffe7c61a37c1edbb50c6303e237bce76866cec826fc6dcfe5d219e76f39ea720e632e2ca1a41f511086fc5d463b33ce8fbad4a0de1392921cc44e694bbde1d1cdc9104aaadf1aa9c6175813485851b49e3d4313ca7f0e92ec0185870894d463ba9ab32a238fa96c423816d46d11af101068ca9f70814a38c0145fff3a513ade6142a769a028441f2153a8ff38e9a49782c7bbb264dcde0a35774e0035657d783e7b3d87a54b6328c0049f121062da8151d496eb2bf4227db8a4d0589e6414e7ce8f15f2a76b8f1fcac559bb97ff99842a09fcb81a39c009c6177756e9bfa9937e0891392b0b306a8e10793a44229a0677f25d87c4402f34ea59b3898beaa401e9626fc9b4acffafa6707e3c897e349ea80829f8be99d89591e6057f19678cb97d46e232b8b33535805fc930fc54f19346c5e2897d9954925946fd9606d8dc30c60098f2bbc089c2c858ea96016979aad0a6379865d11bc1acf6fc6cc8911b0e403a0488425755addad662fa2d0e054bd24379c42bd3968a19609261f332b188785db571c0ea317d3462c2cbf3c55cecd808299b14136d720b3e50240b303855dae61c3ddbfb95a761788a99ea21b9043e8ed76bd31309101ecaa611751c27ece46db94ae7fe0ac2eea20ad274a5d2289211f3d4dd44e1caa0a004c8c55908c4214f0d37698409463859f40427b410d05f6c1f64873b90285d591ca8706943521e149871f50009a7db1ab6ad77fefd8212e7ba7985699cbf81402e3f0aef704d3758db890f04946e436ec34ce9c900b4490f45a24c515fd6d91fe9faf93e07ec098656eb1bf422100dc0ca50f1b4c2ed5e6d516d40855224b122b07acfd782d501279b26a0714b23a6bb0c683444aca3ef6c5e4906682c1fa603122d036e798ecaa708ba30ee681f8aa829d105eb366e6896dcb4029c463e243b9f901855447fa2af302441ee117a3622a359fb3ae8b356675d3cc97428f6b826b922831e7c3e458a91e357d2cfba45b5093198964c0935784041cf925cdfde7eef72e83ca9310fc3be75e73f1b5615d9bc16429fd8d68224267199694a50038eb30f9c3223fe8e05065a84a55ce4430b3c66adba07a1c905903a9b8b8a0dc3e094373391a50d2cb91a1f94882cdb49b41aa11e6751017696ee0b5a5b945f9c1f13a832cd74d3884a5a23bb7a03a1968ed754394a5d6c2752c0726a6be1dbf894a1c10e684be81d4367054ddd69eda5d5e30e72b5855837b387fe203efaf975dbdf204ad472b1583e9142e034d8061433de3e5f4b513c3453d50d3047583e706f2c346ca481d5c596895af702d6815e131942537e59aeb99e183e0f17821184d9097be85b01cbe1e5bfbc16e9dde5e01e34d8e3c10726140cc1ff0111f1293f840775425a7aea399694f4b43c56ba469fa150a4a5c218f02a72cedad93ddbfcfa969f0f4545d73933b983438ce964fe21ff581aaf431dba61ab3be0dfc0a039c74787a38e0b096d479de6695e0e8c734faf3d9a5fe2aaff6ccba4b798121c92548a9da3a732f7424ca29c8a222e87527321afb81a39272b8664c7c394aab7833ce06f8423363754bd68242a7bd1ebf83706fcf860af38cb58f6e39948030778ead96bc974bd3021046f0bcebd9120e0f5bfc3dfe5cd465b5f02a6ad44b3630fe8e610f83e108813cc27c1eb79c4dcb949cc82e2fc0be65803187f73fd2470a4b1970d74c1e885c97f12d505331565cdadadb88625f38f4ddf98ec81e3eea6d3cf5cafe3b29ddf9e97c0b3b07beb52ba9be3e35e060ca7a95f045c5b8b6a8c19bcb776a982b8ec2fa0a1ec51b6cf39ec9f0f81beeecfc5f70bfb6d75763076f2e428005ab4b241d92446fd7d662971f01171124d72b570b360ee9e4416d91ddbe03ecb5bbb2267478d2055a81c929151bdb9237e14462e6af84e4d5bffbce7412b5c36412871c2e755be83464c831e8dde6823b5660a559a3cab1931935459cf4010ef9f6f38fb35187214fc78838ff10dde91a7ca6a9cad988580597447ebe2a8fd45cb01e066bd400b791f230c5c47c6bcfbb9c3ff5a21a65df12815001407d061d75882f09bec56bb2e42ce9619ee8363d06fd52124a2e0950a41e80578cb50ff12cc54e2014ee731b2fbfdb93f51de63ae3e9088628dd1db2a2b7fd07089a515969b1a5d4d515bef95af12de332e424cf3aa689dba6ef490ef394ef991ef3755c149259ac6903f4544c0b08d9bb039803f37dfc982b2b346b81fd7d95358a220315b195313880be34ef5493fef942e9def6b689461e5a87d1333acf84b425015554567fe9ab54c4a22a16f7d9546bbf682b995a6ce944e949f1920eee058db95ab9c93f5e2846ada5e5975bf33544c4aa7b6e9492f3b103d9a34f62598f8af31a2d51fe18181f21460821e8d202979eabcc7c6241a4697d8c31b7f24fbae4579e9637e49ee4a7ca8c7cfac500252af573080ceaff6433fe678413e757ee628ceddec41877f2a64d7f276a1c0504c5720b156654579bd92e7482aa68fa93cd3b0feb3dc32eace45527f2bb12670932bc7addd2c9ceb121b6ba14c69ebe11ed0b0da7ed0c487928888dc533d1b09a387cc8469871ee0ed43e4123adb12ed18aa5eef81b1c4fc03c8eb8891c8167219e5afe3aff733e1bba6d1295a8c8cf396cb0bac80e1acbebe610b024bc4915052dfd23a050f7463e9aec3454ff0b2bb25ad579fe0f2f4261efb67e805c5241aead0e3f5fd4278fe03d62af46faa3c9a51ebc348266833e8a1f27298443c47384e6345b61d029a06a6c788c55e1b831787e0cf33c5b3d46ce3d0cb917bbc634ef9f187d8d8f250142edd6d268fb71ec95436ebc143686e395130c37230a800a57a262b0cb58443bd28823896691f78162358999f23e859b4767d0aa8f791b8024b5b9f90372add5810708b939eb7278491b0691bebc63f94c02ff1a4350bf1bbea1c5621d268a57b6302c6bc851095ab0be8cac60f847820cac428f26d793658d2d2ff202bc004adbcd38a7fb0be4ad01e7c4f3c03a5ac0f02c41122256c0e5fa239fb1987c393557a4d373ba602cfca35c556dc6cac33a5e4ca3aa1e146d236b49bca8c8ad5da0927ea6d9ed9a09ccfee6e9235befab78bfd21160035ac3a849692fde7b999313f42258e07cffa2a77a4c251b65f33a037c87323bb770eafbfd499f5b97860417e55a92904fd820147f58b35fcd1c9762fb33af43239e09a4edb2b52805bdd833cdecfcf24f6caa9c75d03bf77cb3eb1da69e2f802f2c492c836b194cae8636f014a13d0d620569c5c47d64e959ff5dbde48f5bfbc461d11a263e72cf792846d52241feea71e9851ad427d73f4b4a16c91cd0dbbbc886caf63df169ba4ded326a5f94e68f656125200e953c013cda3ec9b82756c825e35b49324da514141b1f3734619e0624b57161d8913a3513f9fc451f5d742bc1c0ad996c1acfe5b5fb37c50772cd57982d92649be179e5b8ed78c6b93adeeb8665e77153208e3618d5a29b418d1c88a711b0b1c04ea21812fedbd3ee853c105a1932564f268b0e25f188414b7b33a33ba8f2d1ada05dd70b764df5260835a32726b6d2c8f66d75c49610408b04b9af3b3b814bcc9f51298a9bf5b3c98972aad4d29a6c2656dd73dd0e621f6bef57b58f1285a78413271678b7fc953fd19b30496607add10f8311589fa7665206b4bc1f75256e3cc386a6bb108923f0a8573a6e29241b32e906561d92079ea80f79ccd3ac89275e7817e23ceec5e645d54ed22b651a40afab0f4b142fa94ed4d34ded93feda5a51fa82d1e39bd865a42229ff686010a4b11f45f626bdb6fe401ad92847b5408f7d116e7b995ee928765590ca0d642fcda10b51613986553653acc484d717e24f4a8583e9447e20b824372a3902b79e45e538da9436d0af7f7550b70a2b6de921201d6a22cd44a69c1490a0572fa18694e76e899506e4ec600ed05ac12bfe7c8e67a2cb2e1df8a35cb02899297c6c0f400d74066e8f0a336286f254b1c014c41d87dd4d161be23e815fc6beb9d25e60d3c114f827bb89ac0b467f4ee2d0f5e956e89399e1ae49a0928834b70e17c1a2d56a1407c671ab80e6b43eef5d44ea12c1f28f5797c077f11795382b3035dbfccc6f3ddc5599b6d77839f9e029053b67e70e982e4138b25899ed9bc32812f597423a571fdb1af3d84b3e76c84efa30114fa275c6e6fd43fd9ff82426fd98569bbe322a7861deaaace6297e50d50a11388118efc88ef97209b11e9dfcb7ad482fc9bf7d8deecc237ad163d920c51f250306d6cedc411386a457c7ccef5f3b117bea491a098acca56b95554fdf2620b59b6546daa90833c9f51a5b7ba5fb29faa8a938c7923dc679a7b966a83500f4092826cedad8ea418125814270c6965f4bde8ef54dd010a2e855c5fdabcc5c8569d1d2d89810f026f75b15e474fb35c54c4422e6746d0a48389e4184224941ba1dbef0cbdafa21c873c05caa4eece2434503ec74030e34a1b1a9b662d357b87b6c18080f693e85103c7ce0fac840a4c17d427407c45d94939d9facff869cc8b0a007a20c0d8324e69cb6293da89f84273d2a43087d02350742a7a9c305c07941ffb2472a8d710733d997bddcb7b3885dcde3e0ddf7a51ce6eaea3716176cd317d2427ed1b3b135dd3c46263dbd21ba4b7594d3f0faed5316db8fdd608348df1860ded06945ebb6ce0debecca829422da7d66a5a84e82e1815dbf240912fba42df3afc45a0cc693ec94b095eacdb2c7f02c80dd6cba0dce0dbaa292798c2e2a3fd1dde20cd0ebd32119bbab046723b176cb0a03a6073622a4385fb118b9887a34438fb2e759027e54e334b6821990e855a22ea0bdfda4e62d211f094f60b29bf691edbd546eb29d6d3b443ccba9a17573f9123b1964002290bb0920844b53956b03208ab9d9a336536913c747dffd5fba18de5c2204f1dcb54f4680204014717de150a17f607e54f0b5c8de5e854dae1146bb8b40a5201e8424fdb18c089d361372a48b0fccebfc2b668b0a7861386a5fcdd151db0e34efe58457392f6b95ec14ff45cfcfe49138ecc686d1fd3d679c8ef347355b08d658c0b57ca27030a49c6ad05bf52972190f1b1bdebe55df814c850145c0285bae5ffd009374b921734dfc2d0d86843c2a8aa1aebe56e80f2f802c3ef578aacf630f84adc4357104aa07b25e8309480c6daf64c74c231f9719426bf47de7492b9e6d3d04396fffa2f1d274aae606dca88a884daeb0ac603ee6992a6905956e390683104d17a9cdc3eeb72a5b5e05aad8281d44aa137914cb3f8e51e7b6097fbf4458e6cf896c422e4cbdbcb7128f1966ef7432049d13a407cb27c8b4b7cbe686fff4a5d3b53fc6adb1ed12072b2b91188997fd05750176ba336e771831630956e06037a1c3aac106c64d1592d0627ab89b8e8ff2c4cbf4ab1e6b475d4c5a52f78fa38281dc359b0232e8aba22abb3d0cd05fce16b1fa85a435251ec92f362830b3c570bb2869bd699dc3bd7d61be40ddcd14a4b86515906b20a4e6a60382f2caf4cfe896cecd8d03b1e8346c9cf3ecf23db5f81f07a47fca86f0853aefc31a8efcc8d15bf6ea7498135ef6b703e3a915c648b194c02fb9860f12e5ce1c83074170b81553ca46dbef6e2deda6bf15e00c10d7b95fb83fa66a6411eca9b24921aefba79bc36f6b28d1685eff81f811f7a0c469f7c8165bae3d2df58415d89ed09c439e4bf610e1c506a9f7168fd56058998a075317030c39c611c69458b6097cd2f0a40d33d32e1856da0319197f8969bf09b8b593a6d9afceb98d03bb75128d19abc2c9c1e0dc8b89a387f0671e1494daea840585284a781dcd52bb863d416b391cff67e960738466ab8d83c1d98a40b1d4732b35b0e7fc7bf41ba301351f7efaea63cff37b796db69b1cba6fd872d40d708e10eb6739a4b0d6f2a37486332f24bdf6ea275878ad411a3d7db84454bab666dc9aef74c7d6831cdea3265705e47e3fc19ecc20f7accfd1f7b4e645b859745d65b2880019fbbe6ee88b60d11e06d116cbd42cfa7fd2286852473f0227190ffe32410033b87c277316436a1c05fee5ea1c758d0f97871386561e0ca429624ef04a2d9d342bbf87d472b48c5f42338264bd673887c7335ad30c219452449cfadbb660a82cfa2ea53904c40ec35e0c702bb5947589973ec3f97b392135022fdb697cc06842ae304b48d35c376fe0f376e80ce28c3d9010179dab4cf975ea84b940a637279fce2c3face765508b504f5e43cb3bc4cc39111d6aa543653984015c083bac2b6ae28c4a0b48c5a1413787eee3f986665e1aaa9f057007ada9590f8c6a4406becc73b7340eff6672b71c05ef719eabba1abc416319147f19eef017100dc82f26ed0815c55c122e0b1587302894c3910829a640334c9a92f130d17fb19bcf0eabf4290ec59e8c07b384007063f56e2298b3600dd546092a7c9685b037b9628b970a5e0afb7b72d8b42c102d663caa45b1df731211b0692e034993136a11878e30563071309cce8954343ecffa107ce29dd566b5b132c385ce71830f114b48ffc00126ab2ca8a701dcc413bee719eee2a2bec1607b731e192534de0bf60fadc68d32c920b748062a94061663f500072b09c20d7a391c82d150bd2b71df03bdcce0129f399924f2ebc320cf24ec6dcfa61a08d16bb1d4f7959632f2a895d280f700c9325c99e3732cb23ac66a93074f3b1cb9959aac44864d41bcbc18e022fe30377e0af2812d91d5aa7d849eb3778ed359fce271f11436e197820f29879c4060cb59ad6417ac55cff11090261464945417fa3e574aeb103ae1ad764354e74d6d0583a5182405c600cf1c726c7e776aa89fda34b47d711a3e666476ce0dab2d412d247a786fe3ed518ec9b3d6b95817b539c549f1534f5ed670d099327b92e9c28b63b2ebc2ecd0aa753edace8caea3652ce30774942de4eb451866d7664288da6669d7d8e3c879f4cba46fbbc122179ec25bf5a608b2b2632e66652696631270085e70a99b20f015d922fa051e5b7a4a41569bef7687d22873df1f85d29e906bb76906c5b29c3bf7e7e104136c02d450f2fb82b8a8544c205cad1b5de39b09b5bcb22094f0e364803c09144f72be2e981d73316764c0263531f8e117920185355f62467e1d9e739a22c1b320fa388f0a0ae5306673736a4e39e7fa19a5780cd3e7a101eb00746e2cdf3168eeca17ff8e007a081b9d162052bda3edcde4aaa7779e96d743620e5f1ebc82bb22ac04860c495a40f0a9514e2b0554429a193c5d09ca6a52ee0b134d5801dc342265a72d6c2bac604b61cbfec0592082e70ad93771b444fa54c32c41c1f6665c57c0a7fb96ef99f1968b2d37f90132341e80273b97a44d56de52014243e349ba2984adf972dc487a38f01e02be44b0e0a643ce7364e1adeef27f3958c50facd70178602de93ce18399584766f76cc30fe71b77e7beb58b4afa137d8b30c3b839456669a1e1558e94218b4f6b8cbf924749d0ca9e8f660ff35cd774e46a47956a5f146f5d437175363850e0196586461334296ea0bd3d63708290c76a5ce36af2b54a1b67f8d6bef046709f796b0806f810f00cf53182ac49d2091d26eedf5f57b1d215c9e7cc924bb3b43692848ffb8045eb4ba6d47d1507b6091f1e09829e23b973048bf79d19cee7e14d6c99614c323be3d4b98d76c3319557755c93154cdd37f490b3128f7a014bc28b1093c722965a9f4e3943b4e14fd6bcc6e876e0940e921e624b1fecde6c451e99855809a5350be9622be08095e9e300bac8982b9c3d32b9225a05fa6c983ebc1ed3d26ffc96b487b8994b22078823ebfa06e33e8cf27f8d78e9ae024d0c9f65c303e7415042bf42f78a6ce261b3fe442eaa3d608db6e1610aff014ba850cee1301c81c6c8bf92e2c7072b07c8f3dcd5feba90dbc70fc0fe83a4e61fa6ed35f80c2687478d97972fd21770db66cf25641040c3f56188842d89e045c46f6a3a72002ae10cc65134f1bdc223a463cf41ba0f43bef783a695b4c4bc06832a4f4716b32e775d9c76d3ef33102cabe77b999fa1cc692957f35b5bde3f12a4ff25c3adce3d3182378ddbf2da0a7338195c93db6ee2acd202f63fec7c724f6f177216fff85cf7c2be1eb4c25ab7e19321f998351f8d6f3baf37a72d495ba62c9ac1a7d4da95b1675ab2c5275c205c0328da11765cd59aad843ffce8ea04ff22b097e0f41bef47b732d078e9884bcdd156886466ccc3156ea995a7e30a75439a7f7e28276473a1fb6f0034cf85421d46d28afbcd185ec8c647c10ee74fb558dc32fde7345d27a77a38ca62a2fc0d32a8c5683c73e8af9bff864c9bbb61cb2830ef9d86e4ad15427eb6b7682a94b2f63f56ab9120e2bc77608dbdb529e9c29adedee46bfffd45584d104eaf2ff63b5055aeda619bb18f4230859cc3f78f9f952d295cff4df4bdd2306f179f79c9af2730f47d13adfb30e6b895722feefa6c0367f58daa953b87996ffb9ba0cfb6176519511d111e69a54940e6c560d6d331cbd26dfed5a179ab9452db611bfb657af158ed41c2b6a2f8550fa020be77c1f4d5b6b637e637572faa2138f276c37de0b335ef718e3c4f31f06fea08b1986dbf095dfbc047207d1dc52339d41bf0a75293f87f35dd7a175604a6ec07a1037e994f0e62225e24927ccca10791704a8ad679e8c7161736a37178fdcfa4f67e9d8b8f1013e4950a3f55a6e3c9b1df98cf774d4eec9ba4399a8934bcbb6818d2729bb1ac378e539c2baf3d31a8bacfa41d3af772194ded4ba5a7202bd7d970c7a4d39d2af6a8ffa0fe9278d3cc36a8341d295f9c74b258336cd224924c816424dc3b3bd277bb03df62073f105cacd111764b6e1425544ebb9612283841e85db3c1da74ebe34ec621fd147a3281a5b403d1a80a2155bb38a9cc6f1466df94c43afcb82ebf61eab02d77c4117f62a8b8d1d6491c0d2c6d7cc6b5f2d0644e0fff8234dd52941a1629cd791ced40283d45452c358d1ed1f484dafaa2447ab5e178531252c9b3365a99c7ab26f4bcfaecc3257c74439d6dd8b6ad428859f03c9095743e1e7964dc3e68e4b4e90f3d013e9a3a6d0f28d2279f7c0636aaf50d0da6c0af5f494cef344bfeec3d6d270964ba334ca80d230428d33daf7d12011a4dab60ca1ddc299b6708c4a7edbb22694ce9f423d4761b7c97fb606ec0c8665f2725dc8e22def7b19dfe20dd6ddaeaa5e15146869a53fa839da04f0ca7d20a24c19e9ec31357a079fdb37b5564d265054a7c923ea2aba75f62497151d93ad7b1439d0d319b4f0b3bb0b13ed87bac7dd1b0f23e1493860a580d7e2e04ff08b44dd6ab919f60cf203fde80cf2e5a6f19503a39b4cd16ec0bb8c7c8eeefc0428842a24f92d70adec7ccada6981fa82320cb11db5a34d2e692c5b7ad19d8c5f23dd6ce11789f4285e82c48adff730dd07c8a5c609a10707b87c906b71788b61fba528279acc0b0cb6ba5d51d6ef1337f14d5444edb2897b4d20adb6e51c73ad2e7fee8109402fbb838807d7c4c62bf38d0f4f12f8445f0975bd15f592d5cf912ac21255d992ccb5438056754018e5c01982e8a8aff2f222f0b65b90014119ce7f10464e82308caa8517bbc2cf53db0e454cd38e8b3aed681c81012eb6faccb599ef0cb3a9b5c9ebb6c2ca38d903763e8ec1722d0088ab4977b1892a3a4f62d719b2b82da67f1ef95725e45fe3a431e15485571ca668a63780dc660af1db76b36d0fdb250f18f663f495ac9075b2b897451ce4c5e35788c2c6462a59740b72cb126b08325a0fdaac0db6858305bb54b0cedccdc15dd1ad6bc6a3488e477bd19e8838b1ce0db0564200ecf1a02a2aa0ce605954876c638ea2f0583321d2993dae5d1d5a6090c6d3c68ccd9360498d176088272b90a599c6f8d1f99cbcabdff16b0f6d748299afed99ffcccd5bfa5f42f7c4aab5757fc0d0ede9fbc7a739dca754fdcd92bc7ed80e4cd86f11eb932d9df4a478849e718526f2b6d3567a130bca1cc6922766b6dbb04fa51903a7ca5492f785f51b8421634397b714cbbdbde9c3f2e87fc529d8277e22f47f15090680cc6107c4dcbee5c7b15d793489eaa0f34fa7e1dade7e6947b26744f5b897be1ea4e1985c5ab7554efaa46bb7337952b4a77c3127e5ccd0b9077cf51180dc77aab6c9c62017f5f6557a1d0d113af249aa7610550b7dadb4f7e7d4a366e03fb9a16caa0fb497032f67da17dbd712ddfc5135e4dbea08896c80de1ece4a693a0a8f5102d38e5a6787127535667d5da4f125516a244818f88de044bbd4407e73d0e0ee64b011c48b83d1e5e62b786defbea37330ccaa11639fa2d62c63edb245a3329f2033e387f7bc22a6caa96ce606bb67f5a9338494630824ecf0ebb6875807f10df5cd77f724868122234eaf38828dcf6354076c147f5e0303a9da1f800355a8a535fb43a4aa797a02a0a9d3e7fb9c6646c1a6d5140107a9b497cdad1ed042c5ef613bdb02e20b79a2c3495f76da6da91a7290341590aba57a7b24c3b65725d557280db2b473c30c9cfb8bc667a7882448d7621d8bc69072bfa47e180900955376caef4f1bc826af5bca0f8d3ccb62547c608b05f8eb8c8e0eb447fe795507dcc8fa6f14bb67bcee69bf433858ee82a60fbe8961efa7c673e21b010b79ccf3bdb806fbb815dadc26313ba54c5e697fb58d41cbd5d253f4b0d45937b39cf0ff82eea1138dbd8a2af36ccfc43dbfc4afff6f8ae0b643a88dc15fef6a8b554971d8b739552a150e2fe256fc1e80ff9899e0410a56a7a5fe0821ef5e07f7253ef10bbc302f01aecf315f9a4122ba805dc4048c30ac1e9bccea5efd159e8baf5a03b868360fa8fd55f5e7912f6f4f047cc4d8cbae4f7f77bdaad513b69cbd3613105b35bb7574832ae3f6f62752b2de8e02d969c3bf6edc18c020cdb191006c02ad50cf210f18d2c6622a13b97b8a80fa1492e1218a513b96d0ce858709f9b3a141557f172afa6eb116ed9466583a9e595071ec482ecb0880434ad5b7660daf6762c5dffe679da96368bdd2be674789246d02d5981b30d59d9e0228b343c0b1dd882e6c5733773565ee1759122745c3d3c0d227a1de2735275791091b11975d6c27fbaeb21d1b75210d86b2022699f0ffd24c6ce5f62289b5f683f14f6e1614abd8ba018f830efb3d4d88681ed3d872f137fe1fe4e19745d1f1477bd097a17a1500e61f4013a62a032498d5c8bd65dc506843bb1f2f0a1c03ee48034f4cedf020470c52843d85a42b3934958051e68fb5c9d9b9054cff6eb43422120bfc301956019945cc6f31dc0de1e821e62fbf2f79f31ca427b9fba07b69524297043c484ec7196379371f4433c52ff56aa5741e156a791706f46363b20444ff8113572f430e19362b13c27f353988aa7e6199ee20a69b6c239aeb2b008b96b35a980510fb5cf5285283afef7ae56e9b91d29512242de01dfe0bd758df65b3f88410eaafd02a49c470155c178d2f5e535576fa2c8866e3c706c5dc9fb72929597e0c6c4e69fc939504373b79d49de46c39cd2d9fc5e812d1ce675f42205c6330d8e90e9f115a4f149f67e298f9a78d40af53d3de8537f9e8c55ed3f29365fe29053545f46eb9f8cda235d5f754d2a57b3699517b1ecd15568c1adf2398ec56ac838fa6f0ea921d1aad1f8a178ea5e966501c3af82b2dd1a57339c55799461935f446b6171d8918962083737c0fa7b5ac9c4af4d812c0cb701b1a4b012d09925fa808d7d96ff597ca9d002687405e96b87ba4139d6e2c6f20f46ac4a2bcad6e744f2490ba6a6e0722832417ebd910f9146eb62baaa5c749529f79d6ced0b81a2e2a48852c8558e338735dcbfc2285794ae60f81a25237c66f6ce5d5e801a001e7f9e309b2595cb866de2bb74ac51283b6820ec9f6ebe482e1fd2d5680b7fbd23c1e62a2ee4edff35823fc7e4a295ea4f1c332792aeb53eb44b0bedd2b6c31e7950865f532fe692066f57e659cd7a069971a2903b0c91c8c223828ee3ab6d8de7d586b6522b06edc2dc2f0119548ae2de10740ee1b1d84d1e4f3e9ee40f057137f8ec167202d8763170d1016d604de7e9a1b18bcdc41535917647061d0d13322f60c269fcdce1961ad444cc9d194a7d81cb61ee486ecde7e340a6afd6ca203898b6109638e0abb546b0904cf1a6090d6d368d1f98d78acddc5762805771b3ea39a1dc856e37bd3c7eabbe67b13012fd768b3d050526d34e44608360e72855b2dcca301ee6089f91886dd40724deeeb76472778ad98431d2e2061239d0178df747d81349e77cda1e2c9fdd1393d924a1ff9245955a182bc17fee16f25868e32243748eeebbbbf54a34e9de7346483c250e94ae0fd20b4984e3c39773c840df999846a7f5a8ec787c66f2e10f8554beaa5b1fbbde87841381d62b9ea468ca0ac50ef56846f738eb1e8c63edcf98253398acdc72ebc2ac122120ce316d7f2beb0e6d2ad9c9f0c6d7976ce30b9bc6e22356ca73dd1ecaaacdcc88565bb6578e0bdd7c8c0167dabfc44fcf1b425b59b4144e7d8b045fe9a7ccebd86821673619f09804c4e806ff4a38ae7cb29af797c290e78ccced9765cb98e4d6af8d6865f424a9cd79968fa590bd1c3d511b57c9351e89c1e0a2ac873db8214bd0a6a12c482f769f5414eb15b8da01d8a0ce633634479ce26c2b889726b408fe7674fad23d976942fd690097eb18c51646ba0428e89188b81b8e11ddad1503b947005ca1fae6e87d1b9db87251fdd0bfece720e57886b60b92d531a0fb627942eb51addfa8a35d1a56b9faf011138a9b395ea0b60dae8ca37c08cf2a3723d2620b6fd7d56e572fdf58c3ad5754e25c71d6266de3cf9073477f2dd3c18ae175e14f63c0cb7589c695c6c6bbf041f1ac0b6a476db4e5b4d4c1434e24ae1c22cc875e345208e4c18a044bc70b0301c8e32f9eca8a7178a215d77172ac3914713e1ce1ea73d6e488e3f38dd085d8bbef6aa61ab6ab61afe3a052b1a252a99b5333677f8e0d7b9d64392b34e811b698efa7388513b8cdb3fedbf9aae5fe48d8521331e127074036e0f475e91897e7c04e04ac88ea98fdab7b30960543985cf4f54742aebd496dd8817c975467ffb15a97e8ccca423539c0e306ef69c4092e16c435628f59bb4aaad139591cdd315d8e4fbb5ef42376c91abcc4ce7f713706674846592c01451fd5579485e98216328600e42bad9543f4e091d4f9ef510b2c0f08e2ee2cc0cf33809bf3e1655f947a6731cdfb9ea184043be79d38606c6de7358d72eb389b41cfd426bf37367b947b5c6bdd966e4e213f524887557bcb4680015d5c16f79c833bf97f614d04deff7f8a357cc3c6a503ee4e3bfa16e7757c3f9c020a3712ca7dbf162e3feb7891bbcc1c17124c4eac105856495e454c72f96c2e04e218302d18a353bcc3db399bb2aa389907f7ad6d31c793f81ba854cba34fdee94e80face3a2ed9b054e4f004ca630744c48d8cf04f812cd39908a5876430d53bb53617b4cca9d09259cd45d5ed3eb09fafd5923b50cf4a5f412ce7ae23563b817f0330e7b75c60eb3c5fdf1502825b33319968581ef9152679dec349c80a374413afed70e18faf41646267ccf1783286b39fb54f9f47b4afaae4e05f3a94f10bdb02f556348ae81f399e8402a2685a229bb02226bd0150823d07e8f8633c925e3ec4f1a19794310a23dadfc0fc99fe8f529457e75e6e1028980f801c2a4a42c5a4bc885af1f7b28c8ae0200de95544534113fb9a6cd71d2825c452d4770528c975b363882cf9952cd676eef251e254f8cff5b645ce849e0a4bee062732b66df11a712a332fe3ff736f65f1761a895706630132f26cbdbc577154441e44a538c6f9be8463e2fd1ae7be74d2a12d927503670014a82eca9f9601bfb3c0931ab2cf7b6219212d8e0e12296d397b7245d57942bb0770fcf26e4f62f7fb15085d039408249274f8e0037c1916cd0dd1eaa0ef5cf7b151be7f520afcc4c5258bb5529d09cd97652b3920abf739375e33c8fdee1d7fba535cb7725037eeb9f9056cc773e425cffbaee28d29299c1f767e2815fded1acb7ebee3f7a87b3c7e985cc88c9d03f4e33e6923737e19082b5e9c5210a4348f8cdbcd4a089b3077bd0a7a12c6a3cc027a364543fa302d44061d738e156b5aa7a4716f36ceb0be671d584591a00ea9173dec288c49c9cf1a56bbed244cdbc72abc488ded706f8dd44789a78f406401fad467fc4489d16650c441f15bde7be3e07b6910b817600586e2a58752ce303c74e6afa7b4e1ce5aaff7b6667df3d317908adbdedfeb0c8f4497b5cc2373f7c14d1bcd13247a4a12ff982236d0b26cc90490a6e1aa13fa91d80ebf604a5643fa4d1dc826db7bccf8084e8e489d44cd630236d3ff61b8b27508eece2a0fa19b4e3b91a8ca230ddd7391c201842bd17e4b532469224b01bda19ddfe712ba798825e12276e6425804eb649b83d2c48008ebbf017031b117a27f5f8b1400920891e8057639618183c9c847821c1aae79f2a90d75f114db21e97515975cdce0763efd7035f92528b7b473031fd54432e5c4ef072af2b311481bed89aec88eeceb17cdea08be197f1b4e526019b53898ec072473c57ef69bb4bf4e81765efffe8ea5c03b979125ced81ece2519c4df28b542af1af19ac5c08c5d00c69728155e876f3f2a8979315c15ac501cc60b1f2a69fdfac4545008caf97d6b20ba2eb954fffdb080867f2572fb813e0bc991e1e52fc16c3896a7a7ff22a8f7568777d4271ed87c0538aae958b22401bbc95f0ea230146d4060a88aa830650c32a50b4c200b870c8144026656611d02f46f7b8ca9938165a25a59990c4a3d127abdf20b87ef92c7bc558f82b430f5a87d63ef4542818dbc272bc4bd7599b771f77634f7a4f182147d115a26b948335a204cc31fb522c2db977bf1dc29445b917179dafabe3ade5d8e206a3baed15f82a3d2fd04499da728baf4e6df7174b1dab06decfb1ef12e09b52bc7a7dbf20287cf9ea7db471bc40c583cadaf955142b57bfb70e10d3ffb80bbda7a5488d4a3d16c58c88cf7c3a2f038fb4e32dd0295889bcb7096d14ccb2968d48a28fd9fcac842a869fea1bec83a23dacf5291b032bcd984f301b23f296e83c2ff0d817affd41834911b8d33be54e1803af6f882a2bafbce020afa409ab6d64be2ea5e8dcb5db8a748ca034b0da43a9796065ba16ce9c953a499ef79a86a27183aa6da01b5cbe8a796f34a2e3c94f6c4ec69023418b00db8e196db0fdaf03fd00f2b3efe468671dc847eab03d38adcb1430935642f798da8c1e9042db8b1e61c6960d2ab04f61bf019546ef25bf0b506a3cd3c5938ab12c94d7bb3f9cb15e3a4512ddd317983ad885e5bdb255b2d496a159d5e3abbad64c38c322f9b9a85000fce7aa9b82d96f14f597c39c15ba960869f61e52f40e94b3f87f7c23cae670306e92f7c67a795adea14a0d2f1e3ccc2024c01176250c68fe544b3b2048d24b530a9359f666feaaa0497adecdb7cfe368521663df872acf75ccd4c481ac125de3616725ade0dfbb043e88dd0a7ada786b728769e1c2f034d4d2aaccca7d2d146bf38cff4f70932874f1126c67eff2f7842681a84f40e34575f61b986d2468fb4741834b7d8ecf6f6d11a621588f9fed5cbe93b35a897a5de3b7c5dbdc4a7c9f2fcbd8ae9aa3eaec671092707ec237c64fdb4bffa6152bfa988827ebba47ce6c6012fb7d39485c4bfd6e85fe2d30512ef7dd0901b47c8ea82ef7c06c69b4e4ef92877a5bdbf4b9fa9a9bef1ef6428263cf64594e081808f2f1871dc27d1a468531b9c3aee5217a74c9194c576c81322150e1cb59138021479aa69e8266d069e9b82a660b0767244703771c3bf264e6c406d5cd97593d7e3284e6d120a98fc579b049efe4953e3dedc425dd311a7626e85bc0dead5bb866204ab83421d790ffc194a8bfc0210f2dd595b61ddb673d68eaea337cff9d797fbd46ab660a539c6f3defc754123d627a9af2a83c9f4b1323681c9e3702910931562320b54ebffaaa5b2c164b7f4cc0baaa656cd7f1489ffcdc8d719b5ad8e011774ac8c0637f4427a5c416145bd1b2549058847e75d24c3bb4974df86cc78696bd37f405fd13f16dba62573d3c5eafdec9667f8ea19aa0967cd493fcbd0f6537847542f45000aae2e5615a34a55621cfd1f9ce86e8e43563b1bfe406cff3248a698d362a10d7a93dc35b8f890b5ab09e269ce1f5c0615349efd3aea51a251cf5d8da3e05c40b94c4e0bb77a8e2dec4c053ca6a69dc74b2af839a54663007e7105ef6db15ce1ef61eba0b9312c054d6ecc60cc8417190bc1b298e85b8863dfb50686d8de8b38435a1abb67265384f7f6a19ce7c1b4467d7f32e2ab32a9119c23c91a8d6ed08ddec045266960e9f3126cebb99f665b95cbefe1df95d1af53de43b47333691227e81bd3a766e7d79ac55911809e79f44d1a9627564f428071cd9e305873d83b4f88f12c0707c406c139447db6890566b795fe6d11818d06b390bba693f5c2324de6ccb80df3fe5db096b596260b0f9b1b61ae19d6d2b8276150227cea602fdf692b33de83d29dc3ae0334c497caa17ac1a92e956eeacdcdc2345c1c265d272aeb7faf092f4eaa2205a84a6fd06ec2ebf0930747a172d3df1f65f0ec0f93b3fb1a09c79edb0d2b61fbae7eff9aa07bd6f147c0993612d345c00a66566cabda3a3ff203064db72b68d93d59dcbd08d3230deee1f2f771d4e7ed4c47c0074ca5cfa261eba94ef5af1fe77c626f014dd2bb89b0f2b9aa38deadee531a94a61f1aa28b7f08efa56fc16e6c94211e2e178084b0b47c58180ef97f0a46673912cb449c4274e1411ccc683db2ad1e520b10e667c9230736099c2e458b4db71713f928a30e67fe0579b4ad74ffede27461de0b4c1b2419bb458a84e7b79290967051d0a03980e8a585d196fb9c7ff4eaf829f71cefe03c4f937f044dd73a7d1ef37a437c09e9268708c82ebad189dc1e989ab3bd8d7ff75abc23b55f32700317621d891dc7c74015ca447a99e534237609d846193d28d244891f9f06125aace986e1ab6dba45bfb592eb848122a7505c128cb81747035675bf1bca28bd20fffc276fb0532c882ad129655358ce0beb377d5e129ef2390a5629be3fae7ceb84b90d6ea0b663bb09d0585bef0832877c6f10f55b9888f2774d8eb1058197e3c486ff878380a804e51ae575617796448c6c94fa9bec4f5523c3b59c2487562f46ccc6626298438b4417985ab08f4169a295d014da82908b98216725a5aa01f892f42aa644e67c79b12f3bb3e4367d1f47548eec214292bb5ecd6cf78fd1df653164f3fc32529bf6b1ca94270656908e0210942a77149f0efb318cb8eae4399faa86e90b33c4e729ce506d5f1cd6c3dd5b32ab75e5e0fdacf9b38f11beca57cd85c1d47c4f24a93b8f298c02319e5e35da209b75728ef5bce0bd3ca9146d81184b7c7bf68e5a2a547cbdb9b94a96a9bd08432cd32606cf6736b65c29f3b4ffa88321a722f94eaf9a1e74be2c71a6ec9e6c0326370930d3d48506b738648718a4b51720a797e98338fcb76202adb66eff8fc9504824f4492c5414157f6ece16346ac6ae2f7111ed549fec6ce407ae7809f7fb73af7e3b78962c4a3ea519713f822896195f8daf34178d7da579857652e32e0357141feba93b940ff9536d59dcb37aef28e1f5aca1a850d0d56a32f644b7bc47c41d10ee244214cb1031736c34f2e539a55db1ee7c2f704fc45e131796aa27318275582a31d434e749e632939165f3dc567ac75f0dd6736039fe32bf8fe6f92758c2ff8918197dc96d1bb2b739342b4003e141e69bc3e36dfdf296d77893b99310ad0ef2203876da4477fcbe758815cd763a266a701e47ddd9e1474899d8f0dc70dd8c4c925aa88295a317928d893aec762c7fd5d210281892734ef83ade256a41fb8181b6a6992a2a460b19c95e2103ca5f530e0ac10d86f351b2d1a3cde0a54aaef678d445d338c909e13d7130537c3b7caafd5f587e8fc3237bba1cccaaf5559ff119345ede163b94a0e4cc2656bd912b8d8a1bfd039bc990b19aec0309c228757d4c1e1a402a478e50f82369b4309413029d84da2512ce415d5b5c9b87748dd99ff9d9a183deb7a0fa60be20f43b0bdd141ee4146b5c9ade87e4b4bcac7349736108ae1a2e995271a504e5749f48c030c8f581d65ee1f50e351d3c8dff2727eaca61e5adcac2dfaa59cce08d3cbe79b5280aa4468409a77971ee3b3708f9eee7e2edc684dec327f21ea0f6925305ff143b45948c683d77c8423ffbe14f4f6511b29298c4f203f2f2fd6871ab6d851af4098f9bd18fe32fa3b1f8c2b45d9256114139a5988fea0751fd0c970211a591fd9bceff3d836595b1c401d9d8b92b878e98cb33263ce030b82774b1bcc7d02ed8f8ec09f7cb29729b85428874eb80c031bd2e8b96814d33cf +MD = 6d3f79d1d128b3afad8a45faf0e1b28931b768d2b9e3d228cde00fd1 + +Len = 105552 +Msg = b571535d5f65dfbe6de7971b074e062425800897a5b87e1d9b86466fe8176bbc0eb6984f4293d36dc3c3677c6b89226b83d4c14ddc08a9471b01d8ad55561a68dcda809b58690e8619e1b4aaab6e802dab0b1181da454f417042595bb303bf74c7e6f288c86ff8d1164764ebf0858635452ddf7ac6f6d7d14051b3c129a6c1a979e1d55fbb2df91863ff618862579d4af8431281c9a4abc03434cc27e0c888cf97d31369582c7a21a71191c9286b2d336c5394de0bd632d5f3f58ed5fff07caeccc593ebc8f3e1b58b83def56b499fb94a684cd9b314d4da269cdf12afa7050dbdbd3d30320a989cb75f2f56527a59a43a8722baeae7f995742fa92818748bb615c6f97fbffa059ed2ad6b320685c5bce3bafec8d7d509d086b8d35d61df766f7ae5af1f964a928384737cd2aef24ac8ee08c84ca3686c51033e45fab3702e0195244759e182a61277bb497e734a4f92027a688e75288be194cae74635b01b340d8aa975c52ba814508cba7d7d143ee0c816c7d6769ccc47e163a18b1026a5cf8a1fbebb6ccc0252baefb719f3d87e7be8e6cb6ccd4c984d91115b0f6b5b359cb6ec6c72feed1b915bea2898fd1f772b09f25d97a4c058b94cdcfd1c6fd5316136f89ce4a2165b9cdb88f543c56f91b7d34066a120817254bccd6ff8431e03e7b54c375781d02a3ae3ce0762705334e9f0dbccd06b1650e687eb99eb11be11f6d9ee2314c3a2f0321bc6443d2950c88705c8796dad075837553f633ffe3bc5564ae84a638f15154d2a77951b16f0b55abd1053bf0dddf40ecfcfb63a341f86ceb142928b0db00153b9e9e2465fba632abdbc4410b41f8b349ca57826dbf1bb27b602e5d667fb1d0c6f2514042d363bbfb0d433a6ca55847265c993491a3ace2900322a8ac27ecf3ff532119ea8eda3e03c5e07cb7607498ed241edec1a81269c38d949f049c280b6f218c35cf76604570964aac4e0be41508a177056034e2b4805002950214e99370fe011854329c7eac0ed03dc3101d482365303d1fc2a45f510aeb4f275aa808bf491e263b3bf52620902fa5a91596aea7dfb8da32d9bdc6a01ebd11d6b5f9f7a4833203c70af0f868baa7785274d6b520819f815bf2b58707fbf681b2bf45dcbb3cfb259a1816420efed62a71c653f807fb42b6fda6221cf32336232def12148df6b80026fbebbf6dcd3a30697294f3c88d50ef9a5c79f4fc34ea5abacdf55b77112727e02ed7bd2fb6523eac1220150ce8389fb49e23bb7da191acebc4460e114c9701781960c7af4aac89dc2d7be82f7c684bcee3b5bd11e9aa9e237abaa8e6e9a62131442d6b66eaa7b66c1d0ef9caca6e785ba5b696338db3b3144999b85278c30bbe5774150126e258ce696fa64942c9a9ed8c9cb36cfe4b6010c989b90e8a7c25719c0b50e87fdac585bb049a3585f854f6e0deb128cbb049bb72f127559f4002fdba29aba7560fa1245a642209f4891e0a5b02fbf176a0b476ce768fd217ad38a51a7581a869df502cf014fa512eda498a439010417f9b54c534605f0e84221b2a35657f760be876f1e48d7f85958a7c09430c8aa356ee8f495d651165852d4edfa37ff18abca97a35d0342e21b9183a09c1deb7a18d38e855a1fb53717b4d2847ed3b94710ca0ce4b2bbf72b009e1e80e589d439682f8e48c9a8971acd7005bf56b1eb4a36c5d07b45f6609bb28962a896fceab2cf8bd0850bf96088238c53e5ab5affeac7c3cab03f3fe4fad65a365fd8fc95acf3ee3c84479a7949c012a640a4545bef68cde2cac81beb0f171781efd3133dee7c60ba8ca61448254e09e5166a296921c3e900130714dda31aca2d9eaec84a4113ea32e650ed37e4727af8b024608f4880220cd125b1237e8a7a21b592a3246d60928cdb6cb0ad4dd66cc656fb82372b477dee4d4a7a23680d30457ba62d343a0a62b0b123e2122922e7394f1716c893be048fcf9cf846294bf3813a13ede070ba6286b09c0dcd40fef438e59fa4aa4890bed59e46b2f488eecbbd38006c91d61799f72200b8485a1099ac5ebbb5441263b3a9046e31964f9bc0e1bf9630b035ca0fe94d766cea3f03e07b0395d000b9e0ecf4473dfb9244fcdbd515fcc3a3557acc457b27b01bb67dd18e1c527d4504ae709cb0da9a5230b92381825badd4fed0d9f4f23a0c43892673cdf11d447cbc75478b876d963cda7aa1ce50db74a9f8733dddfad808ca7ea8ce20c91cae0ba9df7aa7142075ba0ce65ba2c5a3a28c0a0d00e7dd292d195ea8ea70ee77425b939210da9e19c1338ca55be72bdcbee4fe432bfce1540296f0d1d0a3a65788d44236110a6f80010f2360a983c8ad51199abfc403508210aafec887a33ae409de7e748621cd7ebeb599bf4b60e53fe293a729d6e370daddbd4e381756f2454ce20ef47606013b7f8fb6694b64c9baf9b9ec2866868a85f338aac789a615a3da46bb5de9a153decc044207b079be451ff533657ed3e5aada81d81de47aed2539744d57e7da0a8f2d7c044083860a08daae428825b2cb721802a0e330b9c0f4f3d28c8c799970782b5fc5bdcb72f62cb54de238640b82053722ccc1754dd73790ca3fa1a6c6cbbe4d164d259027cad93538db1d42c6538abf48225ebc1d7a1796c330417749648c1c076421db8cce36e4d8f5e0c7cc862936de6c630c11f0bc8f252512f20a83081f9bd259b3894a6c4995f829fb03630c264b70776e11834d0257e7bc21f2705ade3a5e74200685a2ecd8ab9fe754325816f7f743e90579f278c33ee80ce772abe14dd21b2aebc8015607d7eb92a73a388f4ac86f85d51bd578d0f13ebad2d223b13af4f5da205bb10e8c44b504e5c4d218acada24a6ab11b8ae6ca65339cd9e9d56b8dab378e86d99ccdbaa446f4184e39856c8441aa83ef366d8f067f2bcc26d54664e4491b91a2893401605fbe7ed57a3dcebe717ed87705cd09c8a769f6013a35434919b0c3335c27e092572a3e8f643c9bf8e3cefadb7e6f0054b23d9ea38a9ff081ae3665b59d1021e2371f9fa37eea9bd99d832f442ab93c51a88e0b3350ec34351193bf4fd5568af70687ea3950b0950aa983c0da8f148468914686da1183d70d48b1192a8b61e47acc49687b63f453330fb8f5c437e9a141764c57c057cea1b05d76bb6d4799f612914d5e8f3e1f9bfbd509152baa9e5c835e88c60ca9345ac757ccec4191668a685e7b179d6a9a360a055d6a366e9d7bd652e21be7901dc9f93f9af6cef23066233abbdace6dccec09a69e3a0e0d4cc6e459429d7893f1b7ef1cc81f3bf15f53ec2ef5ee49d11c84a0c1b3ceda0f1507527b9095e83a19ec51f63db0b1175b196b41119c371df4c8765d846ec3fa5f04cbc0b44b5e0dfb30c6d6e3f057ea8c80477bf72cc0dabb7e3482f961f1589186f53196070395004bf6c3a12956f45b5029e48fe60b8fd86f8138faf18bb0155578d51f11fe5990048ac55fa1d5bd2e50b885c21141c4b56306886f64b98b5239fdb535b078e114242ae405a2fdcb6e499d6576f78902b9226b794003a570b0fa2cd7c12e99b6f2747d297c72f5a884047f8c94de0ccf4c735714551674e7975fac45acd1885f94b92c9baa59e6dcd6460703050ff2b6d61f726096e551786f322607dce26e6460bede4278a1f8edcedaddd1afd2623cbfef6565ecb762aca03941233ba8724ec04a3c27ce905265d387a8fe7c6f84eb70a8d82b3dd6cf0a923da6a3b06dbda41b24ee5195701dcc4c141093532d814a4f1572bb7388c11bae05fc8e227776eed9159bc8b38780a8a34abf971b5581e1c5fddc1c741660655a5beced7b10c6b561e5eb95121ea4833ff15a12be2fab393b27be562ac8d372ff051ec7a27ed57f1d5c88bf987cb1e488d18c0d230328d9175cbe727be543ca06cc39247f09cad77441174e2febce54e6b1fa8e32192049c264877751b7d7f3d578e60dfafbce42ce5e434bbeb1235ac15a4fa0d3b8ba12a507bf6d9384b877d6d1cc88fb9a084a9379b1bd2d17d97e81953148ee2a1ebb270d0f5c29950dde709e94a06a30a1762c5b0cac646518488e2849906bb575ccaf3d1e4dfa32ffae0aa9e55a2f03c04effccfa214ae3074151db3e7f32a2e7cea7609547f0a2b6710eb868c0325b8e5b75942322c9d9cff03078b81d2c399b48763e1b53f22f59aee394c4d95c823324f77a31bac88e97dd94c561733fc1bac2849f5978e91f10eef105a2ad93bfd632eb47c9ee304b8891e68cde8854846bc4394bf6bebbbb05b8a0d3aa45c0599f0bbac395c8e758ca938c93da6554c8d7d7fd099b2d514b5d9458c583a8cc99b739cdb63d4fd6fd846bf0a3fb1025d6258238a3f0ce9317430a81a4d6de9dc746448be8698be582dfa27883e993b1f67e4e52df9ca86966dda383384af01d2b73b25b21c085fd2e02bf8efd4df6de6f0ac2b38648c3bc8253e6c64988e5320c670da728ea44044a154a99d7cf3f968bf066c3609b2872b1ce5cb39f37c5c6b44adcd6c690d0e41e42cc01da1678c09059c2eb343ede753c768bb0010099c06943a850c35a3283f2afcc2dcecba844c76c5f91ccd8edab6b72fd26398b6808747af87ce7ef71cb0e84d2877b95d80a7852c41fee125efe85eb3a7e0d7f3a861d1854c4f9f895a2b9ea6676a81d0ff9eb3279fb63943855d408c81e46851722ab45448fc31ca7f23d0911621f0b55fb6735078ff20583979ef23170ac4408c4682851460b04aea2e0085ab3a606b2f73683f541650e48ae2cd0fdda066514549aea024f9a57b29aeb0fcad206b62fd69e43cb7b83568e81c6cbb2c61e8f44ba8ab2e01338bebcc2a648e72507c4d37ee89e12a413865df8b30bda9bba6b9fde80a972faace1d20258d93c1570d8a7d85bbb5123de45bdfb3db7fcc1a3a02da8c3f7406dc067ff424aea4e0b0b99b1cc41c31062ac3cb772aaf7a1a0a1d7f6019dc3d2d23af9486ac5a4a76d9eb0fb43e0ddd7c84412524543f550a07bb803cf5435b192e33eb7620f2ecea4f2c48d2382322fbd7070975d50d69129fbea5bfc3177641683df531270b14b19cf7e6d566de99fa9f6fe8ca019c5eca3e716066e7cae73c5e28324623255a733fc86a5c2e92bb0f59f633bf7e5e8ea7608e30d0f7d056706c7d3333b9c41695943833d514020e8073348ac4afe67120a26fa77c57ca2c643fc768783f59e19f56a1e3beab8efd2487a54e682aa6bedc709024c7ac0ad1be34715282486933f6e3afea9749bc1f3203c30f185321c011678a49415924feb4e71581f049749642c7bcb8ed92fbdd5f84083d53ddea1d95d3c88587e3aafc0eb42e6730d6fe80f97f52ff300bd0cff364ff69a91f523fa051d55a09d00f7212481682c255897c9176fd0dfd18cd5f94431314968c1c9ee77e3b4725a2b4c9760f8855336987e1914b3565a34e6414c88aedbeaac88bc3c1a564cd89d05d8a9086de6ef2778c687f6876a6d1111787f6c8d9c834493236c553ec6d94ed4c3df82a93308e040979b25b4b41e5056a11a56981e1e182a27069262c97d55e135c1377413a7493818de0902db77d9fde4a5b09506c21094f093388bfecd9a7455d88f952ed24aa872d70a388880944e6aa9e14dff78141ba59baf810cd005d54babf3d62d94cbd7cc0f912062406a915bae5188af470c056ea45e0c9d8f7f4b40c2c9fdb8f2b40e4f0c048012bf410ddf3a680ebe37e09b7438aff45610ee1f5ca67ad376f6ed952358cd213f05030b1cd78ea6d5507825dfde0900e15d3c9ac6de6f2010a75eb46f7b52cb921b96d33d0c2b1a9c9bbcebd71fd4fae67e4f01a7f20fac2d0df0b35bfbfd45b208e4ad6861a730ba1f9534838179a80c79119f266bc13e763189d91162355949d4d3e1c65f6ab1d8e4e94a0b8e5ed2fc5868bb6cd0efa0931a126fb63761cdfc884db67e8ddc649df3a27398ceec425e233e9ca0a900982bd074bd7503eb6a752a3975b8746613b253a6f852c88bbfd9e07a8beb7f5cefe65c950b744d3af85cc57e679e9a6e84be0cdf216004a410159904d075d86b6d6ec55fa1db9db63f585e06d155895e806a273335ea0a9dfebb55c4b3653f94d96813b9c6d37bc70612ffb8fe08c99ccf5eab8c7e1a63e051731da27ce33942fc7f4f8ac48470d51732af7c35dde0923941a0d1421696d3d1e4f886721950da9f5980bce1150348385f773abdfc58a686bb0feaca062be045b7ee58de2d0bc5889eae3666aebd8832415ddadf8eb9427d76ffbe5e13aa6e779307000847f26b80f7e1e09b7925fdcd816c45e3bb89cde817783745659ce42d214c6638908e344e0c22a2c79bc310d0c7a96111aa52af8d49823cc92389ac3009c472b62f6689bc847864333f1f2705ba1e17b0849b4f34b226b63075f72d48f2770dc94d03d09007ec0e288bc2ac3203d2500a70ed17a7fa6b8bc38470cf3c846e1dbb12eb73933f8588eca73305204acdf26597cf6eadca5aa4ca787bfad668b08bd2a5a8d88dd14bbac7bcfa9c973618e60a21c9bc0dcaf9e98d79a116dc464540572fc2694668468d03f2a0d75f6fba154135636a90a1524253ad688b17c5362391d7bf8c85aa7fe7e770ac203f9ebb6652fb26defef76d98663f5bc24f8e8a1bcac629ab143ffdb2ba5fa6de006b24c0849c99811f7650d10c55ff214c4949124823872db9d0c8d4c5e616786a7dfc0d204045bbbac405d78e18de11d59d7cef5517627a3d05e937502e8558457d4b346e0eb0f59989949034af7ffbb4322a9a37ca41fa678567c1a25f7be55912191db62f6495826e03e645426a45afb15bfa3663ac1501f94a5c05a07e876ee56fb040cbe9053e1a5cc00bfb28598fc217f99c0b2b33d1089befbf1918a64b9d54d55309c5ab9537a705cc00409d1b0c677eafe947bca15b616119f3d0aab9e3d174391182f14e6aea9fd1793a7b1d385272b92687183799a49c5b562efc805fed75380ca73e335d2f75628f9f5a5bede1bb00e974af5b6b6c87cd69bb0268b8b0c09922bdf90ab87d6fc669f5a19fd41b42cd5b94e9d779c20ab755fe253997223da47a4b8c9c22dd754731c7baaf9508ef67a3722f726aad0d604180cdbaa34cd5a03dd95eb144556f2b0c9a0c53d7b0ab18eb93e7f3e736781156c763b485356ed792f0d711c6f045bb24f8ff55421c5c2658817b2397643312bc5d4defe4e5f18fa2175f834fb3e03fa168fb7c7f53ebda14c351ca233f27ab9acaf5336965471194d65ed087a826ffab73688f365d417c47e1d3b032cf3a241894c148bcbc56a591b53cc018d60042689fae570e4344541863679c6d1d55c460451bf584f20892c13d611ba74556520377359cb00cdea9b0d277577b3061d497646a03691044224bf536a9dffe1175a2806625c4c0f6c537b66aaa0610449ce87a163b151df19b58652132650817f46e44a7bcf16874eed495a85ab3c6e864790e87622d21f9460f168b7de46b52178e4a6127df0a3f6daff999322c59337472a824435c25436b998fdd530230a9252a1afd2f37b1418af169a5f919d10f13fcd157a5482fb7521d587d7c675e03686c3de19ca162618cc26e34762137638b3f0f884f994a3d42c4fad5c0bcfd4a267a3a7736c42787bd498fae72ed92172262ed1d0af87bbd85b6fc4be7a91665a87c9926c549079b63af547bb525ea12218df07f9e0dcc1f611ae649b8d5af3c369be35510d70b86c71b45030770473ed0eaa216d37f444b1f184136fce9d3b717fe9f6ee017392e31b6ebae3076b282769e8a4a71f6eb2a06da947a7b8c87be95cf55d8fdb19b7ce8a8cde5f7e032c65cd430843f1ccaa26085677dfd67d539f6338dfb2f4c39583618730e2656d0f2cbb21d2a0696e89c734443a64a22c4108354d03f3e9019ab612e6693837f93ef0960d8a68e0f4e01893dae5f29645c2b845aa50cf127455bb2142ddad70483a35e07e95e9f2d02b7e898321064d5a672416d95ca11b6c55271ef504de98ca8f714cfd9bc01980ea8d87e571fc11ea9ce01b327e166e89f76e6ea585283c00bd372df2f267bf979baa317a4f509e76e250e57e3b9b862ddb1592acc536b48b320bf607306d7f84cd7908aa1fa03d7fb61ae7f51bacfcf87ea11da34b76acba8c444792ec3db3c8ee6e600d69679975a682a54fa4d73d5a309572019e648f2f3a94953e7c5506e47cfeea0cc3231cf9324cafd65d86b1c3bf573240148cd649bb515152674fd35807af0930a34f526ac7bd5a21ac5804d5698ad0f7745c1c9a8d2f2e87338ac3a40cf330018068b44af57956da27a7a10fdd94c090045ebcb23e726f4577923258fb601107f0ebbd2a39f50848461210c37a09a3926b0141013dcfa60599f2b9d7517a0eac6b64f78913b4f0f48e03cea0cd5ddc870ee04408099b65502128c4afbda59b875650ddd8012da377761955184615ede666783047205a2fad83a0ed528e7749f1582bfaa780e3823984bf2eaa82a65a191835904f20a0678658079e6052639c92d772b868216b3fd33061c5d7f193a3c78ab4de7078f29f6314a9424987ff05e45ab1a1aa41391ead0fadb51111624d5a4452955ba7d549dc2012838ebdbe085e586530ee8eb1b14f88ff66f670a6c959bbbb3f812bacf95a20efdc9062052679670a009568799a3322d375e88db5ba3e773b475172fe20559d7db80ef388e2cdfd1c7b3f5cf53bf073c64c67c7337280fd7f377d1c4d5156dc68a05b009dcfb491191b5cdab908efe2446514cb8484b9c4d3aa44962efef6842d1ff517d84fc5b98c6b7e6049a3b9f4da5a5ff94d835153f4fa486ef79b8d2b27a17d87bcd599dcf2e6049c0b7ec721f496a9dee2d0d0214fb209054bb9b31804bf44fea0137971c9059fdc930ca0003f9492fad90fcec3406c0707afdbe0f130d3fbdb466c1d2e8b6490a054dfcd05f7fe9bcbb492a5a07382b2d488749f3d3879f2bc0441cd59c66d9795e55aa6a9ca1f44cffa0bed4f5590acfa5a065662883bda0f6e573289e69b151bb92fe5723280fe861dde0e26630045f7b923aef7ac740243e90ec545887789a034a1e1e5bdbe496c947ba0dc286c2e3b1a3ef16311dd1bf808cafe03087d75c20c63247ab841b601f2771dc7123eb662f1cac63b54b187aa422e554903375a0f94e635b7de95c4e4bc530d8dbcf28eddd459b5f6f19bc5c929ab639df51fb6d7629d8e138d44e6736691d8768522182a365e191c551666e333c491585aa10cc7fa1bb61430b99b3c65b607381737d2c69c5a98120b9bdb76d4fc773ea065dc4fcfc31630856e63ae4e222248cfbe5f417ae19b8e91b6a3f291d57d8762d895dd5836470ee7fdd0579488b21f3b300e0956659bd863d140e50ec22ce91e63d9ff37e7c0f5d4c251b6bd3c2f21c6077fbcb35921861e7642dc80550dca3fa21933c35a0c9bd876784a4ccf01f71cdf14aa165ec52e0e301a37bb0088b1432dc4099eff92577f64a490a7b3c3058c117d7003d8ef26df895784f3572614c5417aff2f6afabf16277718727cfae3b0391a9ce04a1806fedc5b42edbb7e8b32879e63090e9e3949295040219d021815c06c8f5034c854e8b3b60ffebffa8b178abef3906cf56c8504d0b629a680f92941e3d5b82b888719a9f84aaad7128af0a54d2f7a08b8bf662478c91f0bf02d673820feac80c1142e29826166936f013a71d9551a5420a84912a927663fc81b5c1da46881f71a8282acf502d6775884717ae422e5f1f5cdca59e22f93d48159745cdeb1fcd0fd68b3cec09d6ee5779b122aee07814470864664d4602c4ca44e4c80404961b0d22d3de965af9480449bb90c678160de596869cdc057942ab990412279cd551941569d975497fbba383cc289d11f0921f8fa90ef66846fd12995febddb8c4b7cb35b3f432e14e905dac4bb3dcb3eeea1d7a34854175523e28ce5d1bce624b95db0d1af975274f0f594ea2fa2a66f85f08df91c96536834c14bf6769a3a15232eb2207aee5256a7fc0f038c23033f637084627a20bb3c271fff4e39e047ec1d724fee0dd2be2882ab91b75d69521d0bb44385ed8dbf3f8f311f63b8298ff80ccae280e4cef668f566d56c1fd02396e33e53c9e327cfe0b1b714cd5dd082f7759b028fac4d8ba694c032984fe1f82b8e712db4f7997dce531487e1b77fb138fc652870b0c8ee5fc54a41c26a29304971ef49cd975d3966c7dbd1573181ab5ae5abecca8eebaef32b578b80fb107c7f122b307a5eed9328a46f99847870d1cbd5e197f3b3004e1f1b9a684a8f322d4b03976a419ac50bb26d6248ffe8d7b50a51a8e282b9b13c223a65709572f8d32baac65fc9e76e1362773658200f20d5a4cd64250e0f7909aafc5b2cd852fefe9f9c3aa969d1634ad7766e4fab57e6a419cda607ec20c22717d5ee05a9bb9f10253c56afa7c52f027fdf7ca7f85f83a0d7c6d0e3b39a1725075b90838ff963b84b2fcd0b1a5f3bdada16d3f97d82a27c6d3d9740ead80273e7f1d53ed1b8e7477fdae01427ec145464b126acc16dad7758b64bc7f866fea4483d4e903566844e31c24283571832dfae32c74a5a7d1f2228b570b162c3763696924f10217ee55d1f6a66b13e40320d1510484aaf3d721d3bbfa8c5c07a039b519569370c8e64c48757bf2634107c4d47de2c36463b40c92039464d87f7115307bb1f9d7d019d45180ede6adef58c10a500d595a5d2f5a664b6fbe13fd749ee3787f48be974f93f3ff426f7a56bec07cb0cf6d144a11b3587bd1c093e76f7dd5f606abae854f3136dbc3b450de006930866e271b9322c16e7b0392e2a72b590ede90482e02e35722fab8debaefe86330bb33b0f69e2a29b2334d5d88a370db97196347c676d1adc04569143df13c57843566302dd5f1962c8cf6490b4505ab778ec7d1fe49e2da17a41d7f634cc5ec32de4fce499f3eaee36c487df5f4b470b624060e5fe3de872f001e47b3684bcb449d36b3d163db19dfbd8922cd1743d25dc5672570ac8d5b113fb293b5ae969bc15962074d8b8e802865025f1c187b7b7358313eb90db7ffc44b228bf2846d05b2fc1cf1467e208bc74efb5d695e241000c4ad83c36c231a500ab659f15399b11e6dac9943a459e1c35ebb433c51063c0df3231a15329a55be66b5223a84e3460d945a28cc65002b247f8c3a1d59e8a5a0ccda2b38c8e45815466911567d106d88596ec66929df10f298b46a95de94f3c4371cdfb294c9ca5d91184bcca8ebcd95a42f9aa358bc3936907cfa2b48d0cf7e1c2f5d0d0011539f310bfb246c3b0f3f5de6cd015a604df8512c1368ff65e1d8635cced073839ce20d8a47e730c7da8b6cdb860c9793f53ec20cdcd36b1bd0d9f5eb5a8455e84d2e0ddc579c5e58d783b956ee4a781cd912cb647ef4f5b94489b82428b00d080e8b194b54cb5db6ad2e2d9f2d4563c5a07b547b20530309e7f1954f61dc05ab8502191d66fd95a90594aefd6a85c154f382459aeb79ffd15e1874b32c91a4995d9af59bb4b86ef987be25bace90fb92792d860907ed4fda54073e99b25552993c5c950d6787506ddab37b1c80f07747db8600109b375dec6fc4d9491bb37775cb4ee2bba6efa3cfa77b966ca82d9f3bc09599f7cfe08fcf57592f0b8e307bf3b17ac2ec9a7acfe5951f60f170cdda35d1613a05cc6f4f4ab5cd27273356c7dc96e81eea6baf3c784da6c0f5fe5a8fffb6f2cc83ba6c04263129a8e433acc1f7249fdffb4016524f76189dbe7a5c285f165035b9c15f152b72749c8cb6bad20e01a7eb6841387a34b97ee1950d590c1e99845fef07d1ec2121b6ea65e30962e7d5082c79989c1aedbedf73c2dfdba304e895306db74af0d0e5f87ab8e320da4c49ca89756acb9c432c433b8d176955d8ab8b927af7508900674134ccde87a00304f6e9a6e24b66feacb2213edd8c8a64896e6c60ef6d1f784f9900ebfbc71ed4af94365225a6e2e6e5350d1c5bcaaa6e2b47a565c9281a014408c65b6267bb89f2aa57c25e6376c280d3e770b6ae1dbf391d27d2aa09e363ee976e653cefdee87442343eb30b8c5c2495978219bd4b1f5af9d9efbc99e066f64de051b1e8f1bbde63b50d4c258b7a7a81059aaa819d5536e2a303275f7ad104330467e8d95bc8d716c2795239dbe529a21a009181792b76e06d5813e4196ebf4fc2ef0a4a84d8086243c8edd0e465dafdbcfbf7454867c2fb1f34a7ae2603d0ab03303ec3d4b2194f204344710dc2359cd4d5045673d2c13ca2e00b470759de4fad73adcdb320b1e5413280a4c0c3e1864bd4df3b60341caadca4683726389241aa007eef89e8782d8eddc8f1653187c30741b17c79557b4eb6c7e604ea68948be01fdab2bed3182ef08b45e162d4ce5cf264a1a225fc842e1893ac38bab08b353918e99dbaa936f04d861ffb20745f58f384d834cbf3e254eb4ee35a00d920459c32d238e5327d7c8f147dc707d9e1bff1ea7dbad5003bc81541b2f323acfac5f0b6be0ba83592d99c7e87ce80cafd99d6dfb9bcaaec389080b4428a8beec2bc1fecd49f697c200f5e0c6797f1115bef89a9b4c3b27e80b612eebaa7a06a1f33101c3d7b91cdcd27bb0542abc374a2c8f29095565580bc42b53943d3c9e7ba31ab8e202789f141289db343905fbc7b2df9de85fefbb8933a50db0594712c3abed88aa62cb8b0251aeb5c8fd02bb18d2586d9ab420cf0aea8cb1d2775fd0248e27f57f71185d121068d4951f3911a81b881cb30aaf0eeb4930e47d2fbd6318ca6883e3a5e5a1edcf36ac2af7ff8c0feeed2fa3bbe0f7b4e0400a12db06481ad11db87989c9e5dffe96c0ed1fec86cadd061aff507d25e24028b73611b0fba542c617a3852b85731f07a77e0f768e435651631850c9f61dd95960495c440a328fe005e430812d41b117c4304f342f040b6daca1455df4a21c50a9df2345d05d28fa17de046139c65535bbb6479bd5a73c993c0ca6bfbe29a9bcd86a0f2d0a8f9e72d1d38952376b6bffd27291141e978a82b5cced559f1ee1ec807c686ff54460f8a87727caa2bb65b4bcf7a433664f75b88e6491b633fc557e3688c7954d1600ea203b78410840e312dfa8098059497e894a662c68093c84c07f01b5235e6f1ec5bd82f33be4666498cf263971441015935e3425d17b69e071ae89b990c5d9eb19f5001141a3c65a94efd4ac9cc32ddb655e710689271f090059834d740fc116655b156ac8d2db45b5d645db49531d205dbf8f570588a66edb1480c92398cf2136544558580e0fb679f6fc6e2d8048850af5f19fcd1c9a72805404e555fd4e8beb6512726591ee1d3fe65aadbfb74a89eb964a39465f85c49e8c720a51a9e9c713220f31782af0ea9619034256849daf8e14ebcc07cdd2c564427aa0cd2b0b633c0f8e2e1615b2bf1af36894a854bc5650f678b097e42c05900a61511efd3dd0d48231c0b60eae0b1d2a0d4d2bc4212ed2bf539f6d3edbf59048d893dd9cfb905b3e7c81de523d4f3b1163b4374f568981d41ed10e3a6d25f38242d16f86cf326e78d0e9f5acfb0be34dfe627142d706fcd93d0dd1737a17284b22a26b5723375cd5c171a26b61b1b4345fe0506b2d27923330ae7d567d39ad081a8f576a820fc4d9e0b16b1a0be10c68eab66b14c35be0868c2b686fd11df04d7ce09a4d763c250991219635540a8a50314d17dc34147627b20d093c2024a08fdc4eca8c7a4cfbc9752ada49c4be8c8ec62ced2de9f1b1bb44dbf627e4fe2c43bb326e8408a2c7bdef659dc3f84da1891bce51866f742195b710b5df89fb020d8c33dce0abde073b624a6730495857b394b9fb724f0c546b8b33aebfa9bba051e1bbbc1ece6f38e69041ad1b426f1da2e378317dd33ab88133cd6734aeb0a5953e42828b0ad6eb23ec03f5e17de271eb6a71aa15c68fcc9b334675fb136a806c0450a6d1cb958c97c7d9d83f4662e2d1ac3eabb6836c1f0e1c27316f7249af2ad67ebf7f9b3b9ba6c66baa614650ef1a2b57dcec84501e5e50e8400e45eea076171522e0e42996d56a020314084d05195a25b43453ec49007412185408ca02b268cc87a250f01ca8256578a3e6b7b343db50a80a7c912d98f83d30dd256c24842e0d44304c1f8b937aee51bd6c11784e01314efb68df4a8c4fb200063625a45fe94fef174018722bed0544ad22fad28c7e701f7393371e5efd293c6bb5b6f0aa2d1ceec3d77b5ed5fe52c81f95c43083a5757fffa629278582fb1c7a2e70a7f76becd9d27ca8a026215f32712f1e40c808ba071bfc35e49473b046ce0ae328cc284826afaa30e490f8733a3e695951ce3ac63b451fedd40041e131b3c59ef19cd4a75bc7da94aabae64735f3df16020a9e2293078ba1746d6ff663d8090490ee0392ffc7985450e86d33cc2deac4c001b54794dfb9f15410706863b72fa495343793790b7de075ce0fd1534936f61a4812bdb73a456de1bdd5dfa7bdb40f6d03e3115e2fc5d997b040a861d22e2a8f4238ed70a39877abaa1294a67820a596e1989525813aa02553a2117e654ac28d948a6f67a83daf2089a95ff6631ff78131baa755cc36c4ad0ca6a51f5f176ea393a9bbf2b4af54deb12c6a0dfaec75da88dbc0655d34b7ad6fb0ebbb3c1e7f4fe3f94bb865683934d4fe7b53cc20b1016b7e68eab0cf1994e1735de888ba8500ea0b970f16e2acc159a1ec6e435739743e15194c53603af1f640640dd19600653a53368d55c92012b3b935c3fcfa6fc195325a00d192cc5332baa6b1831b81cb3952a2b9be6643a777a70feb5584d477f54893aea7c12e171b349e7a39c589c18bac53fa9d5487de09fda35ae970f7e5c2ea5ebc4285d0ec146093ae422e78d695a2d2e69f0e5d451f1fb88925595ab9a27a23a04e6b6510b2a15ee458a0ef88ebe8a804101e446afb9fb7fc95a86d52088a8b0107cc5b437a8938b2c9e74e46e2e03bb9bceecdbe34002a2bb6e8b05d699ded351b2313e2e08ac970324c259f3f1c069de21a69cd5cb377ad1594c42a4a16d2e2f52a2f7d692879c31e59f600451ea1172c0ba906da5c28e71e2709472ea7d461322c2e8188e4d211ea9b4ff8994a93cbf73cfc09415cc6604d3a00328ba35a563ec3618dd4325af3238a8406b0324712d048d3230627d8bf3f28398ae5abdd28976a98f0bfa38cdd559242b90e6843824399ef02ad5fc84a508c25aec123e55eb89c1568bfbad036fd6d0c7e185f0190cdca7026bb672d981dc0452cb29e0b7f3ec2674468eadd96875531c4627919d4db3536eda4d0613f138f28631e9ca7f076981f123fb60d828ff5632a8168f4b4f87473e5ee1e1b95be233000798253591c67ad60989ed87173b8012ed9811ac7a1f2e7ae1bb2a5329a370c8367f1861f8ccb82ae2817d6e9ef37ac3fff63f463745ae284a240a6ac24351e4a5e6cc8ca443e4f5952b371623edeb4dc47842a4ecbf6f528162a9858e8a7d5e3b14683dfdf3a5400acf440610f27cb92665424b03561aff6dbd2e2cf5409d3ee25315fd6ba3a41229b5cbc6cbcad50e0c0766c5e2d25738f87fc1e75f2c588a81e9fb53561d8973da25f5dfbe3d9d545da4d798f3fbcd0409ee8c3f3417574cff1f41c72627fb6b0566ead84f137c930385bd4f9c99256b8954b4bbdcc9428b463d10e1438aa20392c1d139e8131cd4e5f23f6f477307755ef764e4c00ac0503d8b8f2a150e2742697ed28bf007221eeb3285825b52192b7120c24046a279a2cc51e729057a323172e51755cfb5397afd8fb81040fe0694aa16f659d7581689dbd63f6679986ad6963dc51fece507ef034f009f5d3f74b8f12329b7dcf53f0d5263c06ada2e783bbbd00772b1613485e5bb84b91cdd0ca02f8d83e0bb429b37194091bc91050368cae403d485f069448b1b6de5e49f75534a9d2b5ede04d30e19b5dce504e5b463acc2e1d0d0594e35deb7e2ac1e4e57d92c9b4ab9ab068e9a380ac66b9d95333647b2caebfb658a5fc4d60c9430b25c3bbbcf07778c0f75e45f8679d8c3df27e985fbe6af6cdcc6cb26c2132783932a80e1808b22e8e630f377721db3dd8939824de75ca38c86a97fedc11eed7fb969b085f8fd41265466d06616d985555c100b86bc554fc32adc85ff1c556d8cecc2d48f7d865db021bf8116bad6d59220558b1ac3f83c7a9206e5461be12f13f3dcf3e6584efded15e5106da63c2bfc9daf0bf0446ef11784d0a5a905eabb7a97611574d17ca945f77d845521320ffb9ac792f087def604c9e1cf0f24979a2ba0f642202f39ea209132e6b575e00af7e1442802d371d4a729e36a62be11538cd64583d2bcac46e6a9a93d74e86fa35838cfd50e724e126a6b7b7f891c806e0700f6df72befe47ff088d917cc30763866810a2fcaa9f38b45953156c860b7303e8b15fe97e5675d47684ebb44ecfd1ea39ae96b4c489cfecb91334f343daebe8541d0a1d44dd57cbbb365204d0f075ea7252ba1f07365e7c5463e4069d165e1d0de2e8f758ba754d9e4dce549392d7efdda31423bdce6dcbf2e92e8ddae7520cdba9015f011657c3e86e678cdddb8062404aafa92c7884415b5019704374511c851a5e3e8819869361432695f7f6f7a964ee909a9e5d2c46563eae9720e6e2b5d5dc067a35ea8927d17412552909c42e1138c1dc59a5ec42ac5cf4eab9648e3f919801fd50b2e8e500a933b5ba3d70570ecf4959a6774d9d2551f3525517db2282f558ad21982c37b689929df4b9828e255d30f7ccfbd6bf89c5b3b53e2753c7709c1274f0c5dc84babc36f61da6823a1c877ea0155b0f11a0623dfdbabb7e942334373904618033d5eb28a67e2bf8c2bcf73c3bc7bc80f932cd981012fbe3f26266d0e4a693a0aecfbe6e975f716d90cd5572b02b49b2e006b1ccd88e100a4af6dae35c1e83c55c70dc12af089f690b174826e789272c2fe5b4e23b75227b02a8377b8bb45a76a57fee1bd8c0de729b617962c72981764c977ee1231158bf843e259d58b0403cf1c69b92f9d05612a875902d3a527d19a1e4b8d177a8db5d36804e53ab595c9ea80b8c7efa802ed09a193490284d439c94940aba1f83d3dd823857a46cf8d724321768e7c2188f34da160d917763fc878f6e1ba502ea67c8cf2ceb9983d5d856f8b2d8d63be0a0c7ce34c43b10d9d063f93b94990a24bfa48425b038d93888bd60a384514c208a10df3a0193dbfae6b63ac31c9f1e7b04fc0beb4e8b54690fe0d3b41363dd1f749875f26ba3c00d670bbace5cbe26355e55cb466e9addaf9447baab2e11d72687e5f922ab72a8597ae7e024fcfe0b9bf4392cfeb86b5d543f7b7b517c65207dea81d1936908792748d4168ca367b3f5ef2f96dad309ba9e3903806ea666a16cc6f4670d4c6e1dbff959c4d0f902078b76c071a46879ded6aa672fca531c423b43c42258fcab7a69b4ff50b6a8d6efa4b27225221ec4af43ba30f22c2c90ec31887b693b22c77a6da14c230755eb548acbd01a1d9ef3172f8fe5305ed8c98597bea0a67f66cb0412e9caa58aaa4a1c83e85fb95c8f0efde0540e502600cff6b50cbc40ec6fbeffa2b4013e094ffa31d831a968a99a1b489f2f34bc4d4cab28d39b569f4ae6a855632978574aec0379d1cf3590ca6724e2b448dedb9b6364023993f62b617291ed9e71b75617286edeb5ea8b9a889d30b267c89415d7ee026b2f1b254cf9bc82af9ab346a536ab4247cea934ecabe448a000d7ded2cb948e4dfc5b696ad96b8283a118aeaa6f1e879b6235b7f0fbe67394c69c457a3dfe0f8fe97c4dedca289a51f9c876cf8c2946c4bab69c0d4048b97602405075f6d48d193ea6563d949bd101ebea267b537386a91e536caa41b5222efdea882cbebd11d343000ec2ff6b2f7bbfa746158ea54f32d534ae31c7d3b7a5fcc373055c61a1a53fb3fce4d341bca7bd265f070366a9472982ea099a4a7fc14af39b699a6948777ce6a80cd7c4816e2d90f8b87b5f9dd06065a89a82c3826b2ea188c13e7d0b3140c29ba0d49d85b6560c9a90bd3832b5c304714c47e6c98ceff6c0731144f4bbd46f5c0a9273d06981c3ccf7939871de9a88cc87b05a5b0ad619cde9db670afd801473b0d9ef6b6df6dc1655c32760342d1842b386c841cf2b323789648d55df8bda69fc71b95dacfd800012168e0a9dc3dd5a3891d781c1366b84bd735fde4a3fe8c5542178ae0cded7139654757402a6ff9c7e993025ca3eea3eecd285ac24e2670f22b2d46777e008d64a4583a84c1ca590ee667a34d18dd7ec7d47a6c757bd7ed0cded778fd44c3cd294b061ad616ef7bfeebf5eb7bd695b17da9b6a38c918568ebd97062e0b6a9a8ddd5fb78b2be41eb0e76e84b5781b9e466a967b06643b16d45a7b2c4d03824b918e182c4a91c542eb42399336e9eac70195ff7e390e6de7270c608ff2a6dc76660da468f37a5b8af965e93443f820fed1c3a01edab1f7f1113b0dd728dbc04492c4cb148ed0ec1f61ba460ee28d046d3c5c3f01f034215b194f4badf48a75dd9f1954d8217ac129aba717ca1e90dd39ccc8a5cf837f334ec8b0e2b9609b44681576095bb66022cf6096260ffce9f48d09709a319c7a75f1a4c69aa273f7750d7a42b046546a563907ee39868681918f7abae5ce410d2f6d37fa3b10358450f658e5124004 +MD = 876e0c69f964703986239d5522cca015f115a884e5dd73b767966e31 + +Len = 106712 +Msg = 701e81c1b4f4577630f053eec481fc24cf9b41de4f52b9e049a72f5f6ba25db8f0a1f862c4efed21e898eb7d197c2173aca3496abdd0e5698859c8861735d9a21e571453233ad122e1be49f7ef3256d19db27aba1fb323fbeddc2d8c6918a9cec2e9dd7c19ff8bdfe30977428fcb23a66870ddb7bc22fbfe3ed96657a97055a6a6fe5bc6f063a4c2b6217c48416e105ad6877947de46f6da44f779d11f686690913f9717ee90a33221af60ef4c43a655af9c5653cb479bf7c7df70e1122563f64a5398595dae1097ee5b2b21fa736c00bb5a7dc4cc4c73bd8f38526eccd2d43f9ae4667283e47458e3cce6c59126ebc1c166f580297d059563ab2862939541d349970a4ca95b56dfc9ab99c35a83a9018b6bc6712a03d9e50ce0f9a4b096331a1f168bcd163b3e93679f4a039db33029df0ff97e17067716537ecd1c6bfe327ce409f1df14abb4dc8751036ca2de089f86fa958e37ad6891fe2eadb20bf5c4615f174569e9d34122ef68cbe8b02ab7cd48d5a28bd32133bdd5979f4edaa2733159e98e52dedc6ccd688dab5f10c2c719ec48295c338a6001a262aed81e2ec6549a27d4843beebe45ba68a9b70bccc0ed3cfa30e99f0f77c72b36df3820c14532ea781fe64830bef3ada0d0d9e77128b0fe94c21a5fd8017639bc3c5628817933118478604dcbf43d09de25adecd889cafbbde4d7ba0e8675949bcc1a7d99e9c0d6f4e6da91e7e88c95c9b21b642a6aa3fb1ea008fad98c2e047c976d692f1e3f0270723c5daa23491a0a7e0c958e54a3c65ffd9565609d085107a635326c9e1a5d9f236ef93f2cda60489166c82dce322327046644cc406b42e3005c2177f3b7af2a0159adcc8ba92f2cf413462e60b8db1ebb63de44febfa1b9adc87e79a480c0b814e3c17ac91c4f5eaef954ba929db6ed2c757df15d6d3430b66391993adb58f265f57c706d9d8785c7023df9ed497c3c5f8267fbe7dbc4f12213a1003c323e80fb7827d7ff93a14948154712f824f5b25a73e589247218a3f9c2f8d532ec3b09de520ad6076663543819bc2e3b97e9f827313fc39b9afaef4457dc41a5711735176d6d960e7d964b9ff8e2743f081fb6cea3bdd2d4bc307d0aba966c1c299aaeadaf983e9b4202d98599020d8be0609355b0a7de573e83f453d36e7d1f7c8b19a802d2f7371c6ea4f3e46320a8887437c642440ead8abbfd278aab9c36d2b421114d65e96973a354f0c14fd61c66234b2840dd8b5d06a03f8fc797f3ea93db6cef78973bb9b06a9285180c5771e435778491ba7def1cf963927278a7c227c9a24a6ab116af398906b9d1e3ca2e697162e11f230beb339010397397e347f6466c2a0dfaa1d477c85794d41c57dc5ca0b547d1605ddab22bef8bb23ccdff691a729848bc05afd2f12d1e09ff2802278a17bf8fb89c440393a79017af8d74e60c5b9b033d69c9b3ca326059d4622831f7314f4175f0af8d90e1508b374c2ed6e5cf3c26c7f6a8801d0c61aae230d7e2afab02cfdd80a5b8ea45d4f41d32b4a26d78829aa0d3d6a3b06329e672b895a2792cdd223975adec687a233caa668db06cfb7545102adb824be0c1f3cc22edd91f5cea20d0f65091d32945492311446aaa031d1061203d87b82a30bb389764ef67e430b2ec2c140ff3f94305d35a5e37ee3683e3d9df8618beea7e24fe3f844c1a6cb7c1d33f84cf90932456016a657e023caea7c28f3d9f24c8b4186541d459009b8833ce562537729ef026f468e1a9acbea6426257eb83b36bd97eb6c5dc7ce01aaaf2259981b060c3af5cf57d581fb564749e0260172c337cf53d3af5251e839025e420311fa324aa6ae04cd15448e5d51fa2e9d249026ca2113f36f736a8b2a602f30746877684fa299a418b5c8c03baaf3561d40a6d2586336bf5f397803304480621ff4293495cf2721cd4f953d9ba2d41b08ee0d528d066a9be12d110ce51ff04b785d7603b77cf5024d3b1052d7ea0ad1f2956a23b27afe1d87b6bbf4d362fd71100ce4721f4c71ca2b10f0ac8ad1061f6cdf13c273318fb8c58edf4765ae1667797b0aec47ae2bede9598ca72f085447da13b0bb39da8e022cee01913661d99317203ffedb2291e20a8d6aef2ef0840fccebb78a90d6776e207cb95ea01e95886ba52a16243a324b011501c1251a03cba7bf9e9cf2a5ea6132b36d0c4d44f8bc09722fcecd759b9d5f98e7d98bf562100d17ec7ef9d9459ff61a9326886561a2530fd78521351c3d988193a4de031d516f8d17bcf0d1175ecd2ad23a0c006edfeae6a7d5ea1952b02e578b9f95d394144177a6b3823dee323a6c90b322a68ed9238f273d6292dda9939336464dd764dd2570201f187028cec048652e76b83002bf71bc283521fb7e5abd3a25509f1e207dff0a4c4e085578e146b60872c600f0f1370d22dc575a93064dfda9689b1e62cd8ccbb77d7702b5300009dda14050387b3760c9b2a379ac08cdf76ed04be4389691fb0d313caf281edcd72a7cc7cc2dbffb7d697286b71df4a5bdd232221df66bb6feaa03d9b9361055b45b8fbcd365320ba99e7671b16d3c6dc77008ce1a40bf547d1a6fcecf63b70317fd34afe45373e07be54904e70e429e9ac4bea0678bf402ccdacf9c4035756d789c16119d9ce8027aba64b0d695c9b0be4cee39945ccc4a8467cdb2ba2fcded6c94ae725d9610fa1caa53f5fe88143c9874f20a0f278a842a4dc4b29bb7430b5a935852b2d3813fd8219154cd69d4aabfd974926670c15834f95f1c7360575fc904ce232bd9bb3c43ac974dc19f6d739ae6e05308ccf32f1b06f740cfbf8d534e655a74271d2177d5c7e05189ad413fc039bfcc8490b28162d317d01f29577e412197b63312468b04f0070074181267b62e8d7f586061e7a2fa5b3ac042384947e60079ee5dbcee57b175cb1f744373e341b3ec02b0a3da31f91bf1717ec23cc91f2f2fa753d70a5488b711fa2646ecee2fdd82f205dac1b63be484a14367d15b396e580c99377771e2358582b2af4b2d2564e4d4d47946a65f4f74be44abaf64c168837c9240ae465a8b9647bdef1726eee471f9a121d168bfa74246d7001f8c43882275e3a527385e33b4c79c88c971d8c6caff0046ea93f9a66dd99ef7aa184c57c586e1b77ace69987170c2feea846fa65043567b0abe89a757c4f114e7cf2841dd3e210a017f09545cd1e5d3f2d53fed92653810aa2edc34a0b771ca50e773f0e9fa361f53d0c9e1c779698a6afab61711e309ba518b8dd8d91f859a6e17cbcf6c498569fa5a07bb41c5b294bb5b6ead4f3b6fca994b0b0e617bc107a7c67c47e4ba837c6d716f5b6c4575857c7dc63aaadcbee3d9f3d03fba4aa894867a11f4e3bbd4b915cd4d4ca77716cf26d85929d5559b789c0c7a07740aa0b392b93950d9cbedb29bb44e0973e91af4330194153f147a0b67fb64d00f3a4df754fa4ee6376922fb67ccce0c6209f6773970036748c7df1ec6473d33ec6804e235b3bf1fad2238f5f28d69efe2684dda92ba23aa92be3f252f864fadbc0269e6cd7c26877b758434c46c9e0e85726590e7268149ad861eb11c2f2897cea7f17774ca019852e1992a65e0d6f2cbb6e22caf6b88eee9adf23504a854acb4a71036d423dccca3e4ec695f80a13715a4482043ffb6e4d7a45e33819860370ebe5a8753f014beeefdf25409d28935f3d91bfe5d39a7d617e7b73f1b65b7d13d2c450b8cd545d9a49b5f8d0d4cfb99f6b3b22943cfb83cfb0691ba2a96e805b09f4415d739ec97655b6866c26674bd9ec2cf3390288484218f823747b26d4f0975fc38dba4758291acb193d1a5812b4c94a7afeaba89360bd0ed28eb3ea407b84eb207028b7d25ca0ddf76b380ad6d9097fff09c1c22dd1a7947118d9248da4d8829e2d4756ffb6f0d2691d08e55ff0b4b2c982cc40df3ede73483c763b83129c0b87ed9f8da6e01194b77b135274a0d3cb219252896f4f6b919f201197ea6ed86e21d7b6c291810b0929aee0b7df916cb14f61dd05a5ab55d8beec32a08a5f9293b514165e8642e71b07def77d666c8a4e9b16f41c4bfba42fecc961be2b8ed4628acb47ca4ecbacb19832e10dd2d932894cd9203627e6607d73df275994a2a5c3ea25cf6db1c362b225d325cdea7f6e4aacd4e7bb031592ac99550bd98e440e9e1b4a38ae76d21208f6e94b2778074579012cd413a52f42a3a75396a6e11c15db66610af767a1c39a539bdc824218c0ff940c6ca6d5dd764ae4034e2855d1c5621392cbaf4ad87d5084115f46125be5c2ad9a39dd5dc738899a8bbdc7b10c231b6a07053de81f4812d0745cdaae78beab94fec21e04948f480f136becbf7439eeb3e53f0b091c2dc881ec5ba8de1653a290618fd291ed846f8dc4dffd45b20ec435570280747a335adda0e5176cddaa90eaeb2962cd791de65ac5a1640c6daa833983d504f3df63b02db9818f1e77cd5bebc3173480e16495be3f3987dc4e1615079140ff4cf4c3b3b85eb878be89c4edd812e1b271cc6165035a30d07dfd5960e7aacbd948605e49c8b8113b12be952cfcff10436ae31b3c6f3d0ca6b6217b4e21f6fffbafcb395ba3ef143ee3bb4a029eb32b4e31ce9a044c115870506285c6fc9c63cb49df5ed2922a49eaf82beb560555ba3d9034e6a3e0fd9998146a7eafc1c480b2de41d494dd9139a71bb47e0f7a0e45774cbd0803742a5985c7de6ef3b998dc19359ca38bcc4d6bde12fe0d17450655643012070a4fc01f9f34695d79293d01661796d49da78667f5a6b29f55ae64716c03dbeba2bbe6744e22b154295cde77034cd76db4b563b6569f783db1fd5122f78cbfbcb2fec4dffa585e5aeb99a1c4569c0879b73f0ddf67c5f7ee1379f4ef6d946783216183e80b9f1978a727ae72c9cfd1fd8e8dac6a92e0d8ba636b766036e37b48d92c4b17e9bf8ab5454f2e09c2acd90321e767e03eb7c2a9891bfefdba41a211c1a743f5fc805819ad59490fabfcc992589566c8d2135ec46ed1b54f627684e8c11a9409adaa2bacc88d260eeb8748b31bded2aab8bc5412f8d5c2dd9449cad4c1cc65db6204ad777c32ee8dea15ff6d520cd30e577a4b9b106e4e2fb9841cdea906dff484578481b292c815106e96c8e565907d1715ec689fe681ce3aed210c61102adb7c6b58d253f3dd2dc559b4ccbc32327f6054de808b8382417d4d8268d2326d18b108d273459e555d71a00182bfbae09a9a00c9ecbe8e7a10ec6be7fae2b4d1348af6996b72db572d7c0927f1d747c3582de157b21e4e90c4ee11f6c97add7db671fc56c2c0f20b264e5dcb21ea1f034082bf2edc950dede4ea055add83f69926cde4b181192a9acf4f63981be18bc7daff62f6710a11b8f84a10b93ee3474f0d057451af64cc2cb0e8e533e6a5d337af0d92587a64a41a8975fabcf58418c5f28375df548920e8527fa9478a1d3f7c461516fbfe8d0c3b1ed38b0a084cb1235daeae02796f6ef73c7e797a103017be277db789056c91423fcc8b4c82255992d6eee9632400fe81f64b1b747fc8a224dbae3da798e97d5874c8c12968f65a3ae6abecaa602317ad095057dedfcc29d7e91170ffbdec16a4462ff64ac4a7fa42144d807e32c003a3fcf3f7603923f4ffd90d17397e5da64f3c69f2569d1f82d2e93c6d87a4c0088c579ec1a194b74bc23409fcfde3247380dfde7df6fc483a14ece17b6ebd096f90a3b87f4af86f764b816fe5f1f32ac660b5f75fd2e809692ea5a272db858480d667a9f7026d33bcc048a69bc0b655e617481a5f91694a58489ce81975051982872bd8f272fceb674a1216e610348e1dcc20b047db87f3508b5a1c39e544b1bfca78af3742ac7fbd1065278d8a76beb1a7c322dd5a4bed971e66a49ad24a327dc8d495901986d8073bcc415ad583cbebd1bbd6eab3bc1e752a48ea04e5208605a8caf2c39f90dc8cf2cccc1399639f137290363591e36f34d789543fc6cd939f93df2f997dd474965eef3081801f2071b1c8a9889ac6c81b4cb04c121c594392b19db2da5b5a896ba6bcd56c30be384cb7ed96a9766f1271b245394790cd7c28298be44ee0280154f4bb249c5148ceeeac866761cee6337f30d083a4c93028a724312dbcb548c6996d7583d88cc6c99db71c83784a31158defda91f2708a2e58c918f6ee82c2be823b715be9893f13a2003652b6915a9ee217eacdf82ce4768341c7a5aaee9cd35786371598efbb9345b05c3ce34c69b8c8cf899e80a645e870b3c6a4b9a1e0ec5f755017ab664231cdef17a9c622644a853f3e6c5085b56c66489e59e34496f0e33143cbea98ddd584e4ed0128bc553c629091a032723ceaaf28d62eef7fc4c92be298981f2a9367b0b868acd1c14376a7ea0aa0eb15e34a917af689a7f9745e7faed8e510c76dcf9a92101289da37df9c7432d54615b174556787d4d15bad9727c08a1c861571f58a9b6c9c18af3861895790a70a1baf5042161076364c785c6a3e36a449bca9c2c7fb04b045e74ee3b5baad7ffecee3c7a2af19d79e75dc95925165e521651d1c9bd960b8d92b814e69c60fc3ecd757bfbb5c2a5fd17de12ae5209d47d6b8d4ed4c5d091a9d22da88eda340dd9add1321d743cc76960e8f03acd469322f5cd61b23b186405675607a8978c833d0891dd63c8c8684b6cdef092e944e0ef6fa2b8f68fa5f90cfcb1c0c856d2d2f58837fc53260e1f1fa640822b589d643f139dc3263631d74cfcd142728acf937f97241d503e76425277be23787da8839e9c2efeb5c1147531d2352b1bb5ab3b57afe69f0f548978908b98631edb0ec58a53c6fa19a2f65948274de9486a2e410a4d001fd52ac028364c7fbf62f338b09ef50613e66e3ffa1c668beb6d1aa13b03f9010e3603a2e7c024c4970958aecb28da6cfa908559ee1b1a8fc01e49ac8fd13e69f8c681ba2ddabf1798567de98bd48e5c0cac8afc9bc0adca05b069b8c5fe778b5dfb176e60c275e921fec561590e8b53d89ed16099a9bacb0ae81d5e53e84f15ac4857483733e3a9c256d1bed9535c04dcec1b4e5e32abe36e19b6f5e02b3f796232a3d0078b82ea07f3254a732f7abf8818ab1e5ff80bd39dc9d917c133a3272e4e9f8e5855ce1a415832accd1f521468a91359157654fc287cf65c9d9e14cf5f00acdbb01f3fcb3cfa8c5e3d9f8c840d11e677251a11cd8ca7810ccbd72ea282dd5e508544526d295e84c74b2c848ed3f796f0f56fbcd838de1bd0d25b3b71184926857e51a080b4f8de808c32d4a56bae976f0cf3c0acbb85392157a6e58badd887e2d1e3a4965e5ddc02676ef76812bb7a49e222c7ab93314b76b2569782b21004d14666d92e93f21fd5632d573787b2c20a0b993c654e66c55978c6dbd6b36420093257a8b9d45a0c62060a8ea43908e137efa3996a5b9a594221941cf810696bd33c42adb8be0a4440d663082e85425a4c14fe690b295069b9333af57787844ac7aa9452bbbf6739ea4ad35e471ae3bfcf01f615f8560d69372417dfd557393f7f23d9322337056fd6d9d7fb7e585164293d173a926045ea348ad746822e1cdc323e8db69fd379589f19ed5a44dc3ff9f33cfe4179b67e6f49bde5c41e7a9383b9413e7a721327869b7190153b04f3e3b57807c50ee73b5aef63cfd2faab31c84cd247d85a54847c64874c96b16111b3d874c02fd270e15f8de2f1edb75e7c3c9568566ab936349c72a19f69588f1decd4b9b40c54c224cfadd1f89ec4f2d7430b89c6ac0f26ac795e76e50780cd7ce152cd5fc516796a3dd7a74040b416d76e17ad3506dcb44095707dd9ebdadab343ab162ff487f5262c93e9658e0518f12052491e25925db573610cdaa0b7055586763ab11539d3ed1e5afee4d12897b90c43e3de62c0816f95a8ca63a0b5fbd82c2c816f91ac842385a57e2aa4af1193845514125907ddd36ea02cf176481ccfa736a0c81440846de4fbedb392f905251b1e404672b8a18580ffbb209bfde6807a3d1f66f7a65320ced6a42c06a6e0c252f80ee73a53aafa5f0feb6d7c47f7af37a833a8c63e8ee0a5ce57d08a29330fae8ac6713a7928b66b693434b1a6beb041f0a42a0a8986220c3b7f6d98008a71904f0d70dd99c92e28842c12b6aaaa183bbee7473f07e77964a6613faacd457caaad4a62ae25fad638f9498405b4586b875b53acce4a013b31b7c3e35cdff2a5502e13c326be3c52ff2103152964381ea76e9fb752b081fc05b81de508b920701359e02ed1b31c08fda3ff229c2ac7962e5111e346ebe840535fb5a149094d5176b945e239b5088cb6fa7448c88895869ebb60dd255c828cacf741c49810d7edfcb49b99b9248032bd8d2904490e10545b05f2f178730f55751738bb70905e9a17e477c1ea9221bf73e483c1a81bc683e5b94eccaadfed2f3e4810f25ce85fea5ac160d7488e5b776c88fb2d30422699e15deacb56e38a6e8b025105d7894a5327b3cd665d699bef19f31583ac01cf0ab05c3d79e73e85b7cdce7f625b03bc69216433db93b461ab0eab698165eb1e5af54cdd54e6415d8f8904f2a461e81490ba3b3ac3761f5b2fbd2a4d92e85ea30f029840f8de8c805a4f6e61288696e16e64b128aa8edae6e1a7f85824bdecdb9b7ad6feb22a708cac7333317b2390a166b35ea3fd48a77365418e0fd351065694b0716d2d74add0faa72bea18e385e2fe18ac23383de5af2f3c63eb1b4c4b726f660012d72794fbc96d91019e20c714a927123ce7d915e8a3db0260690a2cdd9fee0b962bcdb67b9d190b0e5775d4b50c4139478894c8be67bff20649051ae6bacaec5db7d192ceea3c0266f15d4f527c0979d9971b7eaeff4dab4337e7a62c248f3adfe7ddaa7445691fb1e831876b9ce26c699fb79828bf26a6bdb20c4f2c81ad6fa3583c7dea1312ab6598bd2d6ec35e898e0f03a5ca3bbd6ccc43ed86563698033e75988dbef7bb4df8af3aa1eaa3f049ad617a47e2098476057a25dc37d7f19e07bc5c4a6147d56ff18844755da32a355e33a5df2e8d1e5adfa13fc14fda2c8895b902345fa7f399d6b0652836457ec4f701f0dc0e5aed73d16585d61cb1bb5b7ee824fc287c88441eb4172b02ff60812e38f5deefd774698143a27b1cf3209f19c62ed24a5a2607300fd50e525571e26a652f4861a7359445a81030df12eecc0cdfaa8743b53f5bc1201942a2dc157111f307c8f23eb39cb52f5987c195985abe91025b930246aa38916e5852f7edb5db8f19a1200270db5635d8f062ff9fd3a586d0ffb6e5de8b1cd04eb0014d4d191d85cf816996ffe88f4838fb31b577bf583d90c43dc46966c46934fa2c20c6136e63b3ea3d60b34ce6f2d418cc5bb2865d01bc49862279d5e5c8ab973226db5d34c5414c19f42d60e3b244c98156c2c11a8fde102e847240f78b3d07c1c41f2f0716f2079dc5e0dd1c0305ae0f4b4ae817445088956ef540600d43dc499ce4316bd560dd275a5009e6618106a48d9d63e9abce336946755cb5eb6a8537f5ececb98d081d55260d8fd95a61840fb24cdcf842a1a108bf74ee6f821b732b837bb9a6aa424895bd6bc76b5a01a6af3ddbbbc9857551f21e767e038dd15682aa133089b9ba0f67951d5922ecfbdee1a4cc88e400a3b6c3f7eca3f85b168fdbfe65e9f937d9a2492174ad868fbaad656b91acce30d74fece059c8e466659fa5d4d63e6bb12bd1c8f7144d1ccec892a916bdcfee826a9deb4c40852e5c48f66ee1d6a657921aee559a7eb03c06901f0b2ab34adb91e8212db033315c993b349599f9da536741887d60166f8ad3cba32a1c14a60bdbca6a4290a485e5a9b6cac861b222d5bd1a10bf0c7de38fc2b5df746f5479f5ccabe9b88206db600a463965dd821854e01f1788e407a4913ff9248898e53f2fe0e7100df8fcaa423753f0fc620c33679ccb1d698b563b55c7f002c52d695e20b5268da159d89b02bd7a91fa9392fc743f9892df56ec0043d7550ab891336f6eb5c4a311493cf62809249cfee6c8ec0135220868fb3babc20a729cd168e5db707f4c00ec3b9c7438a6ec6267d0108aa539d1fe84dcc79676cdf349be18f33abc5e472780a5696dab233c92c3e40c40c6aa32d5c1700248c89e3191cd25ee05c8ef30777d1b367af5ea8f9ea1a71eb6ec02cf3e9d599e4b4df7b7f58d2428b52cbe828130019604bf796ff67f7dba458bd0019976fdde066d6710e58c7855d13e28c7c5580cea935e6c582acbfc71853c9e6466ece15412ad68c6f239b6d7d293da7ac44371a6bf592fd2bbf587d6fe64ca72277d8882e8847934ac13443131c42015fe80e47ce146206a2aaac45d09aae0b56b97680d009914f463b7c4e49725b613e4aed9cf919c0a78e75a16763f657da8a3c91434e341c880c9859d845b5ef90f071bd60158c13aa9726212a5282afdc65090f1ad192500544e0b5272f6c65571e6564dc49f6c2d566c713d8c2c61fd99027da4d81a99690951c77843020277c702fcc58bede37f1a35f5eb7dd4b0d98b39ed824850454efa753873770589cc78dd6db1b9bccd9c5f6f7ec10cb98e2e27577f3e70628f3eb238dcd88169c2c021e627b6f0948101b0596a42ab435077f7eb911dd2b9fdc4cb1d230bf4a743ff3cadc939a30db44b97b446e4fbfabe237776c1c4f1df076daf82b9b2336693d643a4b0be5370cdd68fe0932c51481ddd20899fb8503a3285da19ff3fdff028f1b16b7cb98476443f036eed8d5dc3f5f17d84796c706405c9c53372195d0c89be00529bafb876adf19cdfa49c73f6ecfcf907ed55d4e507960b7fa0d33cf42ca7dafa7c25620a617ab68366be3649597c2d746a08e025be77175f09f1f24f884b8bd3ccaf039a0546db2a82771743c1eb856a8dfa44be70d973421c0a0f872325bd7edbb12fbe1ff28505a66b896ebcc79b5ab7ae5507e559a9c96560073393a2ca4c47b048ef07ea4ed540e01f32b09cc9b58599a3aa7264156564a85bcd406f4cdc8f30e19553ba92f9c0894b2833d7bb0b5650a30ebe8550a698578fccbfc7af9010b78c4999cffbe3c3db9fd7cd04c9dcd847f5bd0049f5fd8ee215aa78688d178ac89b9430b6d433c94b8f99c2b080aa59f3fe2e0e0e4feaa6cc7ffee0be4fd34bc8a1ddbefbd66a2f4d8d06eb4779e479f93eea3e5ef8fe7e9b3122bf357243d24c31be9b0b5ce784762aa77d46002ba6ac3a7a07b87b9974c2ebce3a5a9ee9ccd7cd8f6b61e24c6749eae41f38cde06ea17345f0b7324c37d7e25a08ba205589efd7f8968bf0f9263d405537ac4d93405d7be68fb7c797363eb74e90c0a0e797e8d362b306238e6fc4cd635cfce9b4aa54a6c44b56a60ade8bfd24790a8b4085776256375cd46c9274d4a705c72cd53b1b9677a9f05807bf34066417f459c0c10fe76b9a0c9e244cc21898b887a1754116cd692231482e46db8595f42a9718d916e4eb5171eb45dd30eba0ebaac2057adabe214a8610df13c6dd2293f9cd994c20ed8e04394631e245d06815cd291636dbeb38996b2caa849a8fa28dfe67c278b2539c18cf3988fa756946dd5b2118139ec707954d061137cb0f8e38a4e0451d4fd9ce15b02fab745408d5a8d1549b8f97f426a4c83793abdcff5e2a99e161785dc27c6168a329ee46518ceecc2e01095bd50e6e592ba23f54b19aea29c5d83860b02fa2753e74c6d0b5e535a837f91f5efc37487c7ced80a6d8bcedf117e9cbfd25605f425c2cac97b86703f1ece44015cc29d9ae85a61e67d74cac6c4246a18784b6de7c86b1fdefdb9ae035c7430a24e76e786be09c46fc3fb2bc17ff5f67a4708bc6603895396d81f930e051a5dbe0b06dcb411800b8f86497837089947cb85b679dba0c46fd856dfa9c8e167d43edc9b048aa96a3e2d1085399028b965f57b7c2dad65c6798bbd22789ab7049c0b095de6714d6d6331a7d8f733a7fd59de71835f441b347c99560f87ea5198bd0bda730ad2c7318482946a388a4d0c2a70aef297088ab97de969cf5e2175cc40289706f813dd5fa80a1f6287fce28fe0917cf25e6179fb86633e8985a8ec482c49873d399e589fd8b08fe969f12d2d842b21ab3ab7b1a29eef1c6685e57eb38956f34154d9ff981b5c2e2668d1f78f1d25e644b672fb57ce754d8ee442f2b660362339d12e9cf379f642420b05085cb36713e657fa1dc21ddd17282d2612f8b8d35f4e3904f557fa671464daf3283d4fd9f0b8a7b7df8a930fc35ce5f9a4229914efa812c2d46da795ecb55e041fdaf763c5e32d120b5738f49854962271db0be11a6ee7d2ffdd8769125d1ea0b4dab6edd98e717167d31572e035c70b41cc17222ac93d9b3e4ea2cbcd83a330b1e6915f75e2fc3dbda43172e12a011bdc9cc4bf65e09e855b6901a4664f731adca592a1e10755dfd37294dde558cbba09f41ba114dc91f81cd5abda25ea18c8fdc0c09b652404bd71e6479932eaad50927c22ae7ee49f5c4b3aa857527c1aa0dede23364961924161a7519010062f453ddbe3cfed214e19ae420101352cff0c46a8c458d4e786d26a5ebaa8c9d5da02d3ba66eda7ba29970e93bdc216235173fcc5aaea4fde68d753b38bcba47e35ed1bc0b1eef5d8b53f32d5e4813c89973dc9deddd5026ec1bae54dcbe0e829c96fdf96cebc1fa37c77e4b17f26f0855ad1759b66ff35bd17e2e8d582cfde001cf1e5e3c53d6d4205a8eace95987a3f2199c8a34c5230f6f5b724f2b880ce28b8d9f6509c5b27ded83b0dd62ec122e074fc8a9f97b53a3fe0a1604d76daffcc2590da855dfc949e7e96156e52883090db628236500f9dc06208668ec3c7bb12e97f5929100afdab7e23ca400ad5eb76df3379117e4a9fa30254fc5ca82f48228e0d3be4bb6caa2c6049f4f45d909cbb07d837d8294d890d49edeb5f2cf8ef259ca14760680ae34aad6f5a3254a28b86dcb784325900a328bd3cfa40570bf84399a546421eccf02decffc5a1f6f10000e53928c7174b341ce8a7f3a73150aba30f800135e69a18fca560fde94b664351aac6ea406a16861152979c3bc3af506e859a3ddfc75ca5e060facab35be99ba0b3c793455b49df2e8175bfa514112ecb845bc5e8c9fadd00a635f4a72f63521589a2eb7df1cc889bffa7228d2c5c8ee3932b60f9f45c0985fe79426ccebaaedab3c1ba913487c98154978e99147ab8de3a72d5ba516b7096f12e7dab40d8f814b98ac8282c63e90806abca74d351f4e30198edd2e70d5c5c06bc6d0b8ea377ee2467ddebe24632579f4da0c471cb8a1a710570eabe2b13fec58bda35bf05758e7abfc0825d1aea97a7e4d632f7cfc1ac112126a9dfaedea5b6038cd0dbe5381c46fa3a94a5c55aefa4d835656c44e3c16955d6b8517c0579628d4a85eb2a09c10d7f13c9c331ca8820908506d814368002074abe1c7fd0a1508fdefcf5be30a459b813cbbe448189a2768ebc4426031263a14864499d874608730edc0488f5efb10c013f9ee8c91bb3f11730b762919f14899952dfc0718f139fa3cd1d70a0c79ee3a7d06c04e866da69ea0939b02a4e9e29052fe6cfd7a5f87d65794a5e7856a7a6cb242f7f27919f46cdf0d2f8144788e753a367b201af3f731b85923ac6c454bb36e3ef43cec58af1898d8b2298b35a2d4d58685137d671eb8f9cfeecd2392d8bb0b6b437252924d0e6876b16feba9d62b9f3f494c142154c8764945de4dcbb7e0145874374e6f44cab877abd8e83d8ed601f1063e61ab3fecc855e7344d585fdf0376f4f022382cea234c1fd903793380a82c6a6f087d36926a864173a4d136e46347543180957bc913747bf4bfd57aa7ec41d4525b0fef55c75ad320d6cee3acbe6a007fec0fa7f413715ec08feaaab868e1e28cebebb0a389341aa06599dca47f2f884fc6ff3807add316a0f6117a3e888cf3732d8931080ab28696d3da885820385a05a3ecb2603d1a523a84f23fa6d593a5b9b270d6ffd646a558a3f98d243bf50445f5609d8a6ba79fd1bf05819dda9677a4fd2b18f77671058a488f41b54ce605954df35002940b3e2af6b3d6600225c7d970207d8b65b2259043f44c77bd9bdc58100d805550c5db9ade95a4a9e6a234dbbdf98b381e9a63ff38d113e818870722ee2794ff2c67e6a5d91382e7e29c4d00390eb86a1b9a6f4b79ae1e72e828046a3ada046c8161fdc078c5e78690845f0b73e88badf72295f988d3f2c4970f52b2788d5529ea247f9f301549227aeb0941e10f8b801bc3868e08eb0749cf9d808049ba1db3e15fea86919a3e280c50ca4812fc2e7cf41daf7d5c7be28edc630c4800f8b496e154cd1b0fcd2d23cf2620728c26eae13a617f4c15df0ae057e0549e40c1c04f74a3a5c11d169c822dfb9a75bf285779396f747ea7bce6facca5f7e78b9da74a15ecf32d4c0f12efb34196b62e78ea918b783d99947e1d3a952474b833f4f0133f6143941f3f16b8f988b3b84c811ab6ab1c29015e9b043c6bdc4984fc6031477bd0f5a9f8ff1e7a6b415ff0bbd96e7512dbd55a88ac425c9b4df4d22757d133358ca7e38bf790a0830c29f3df0a6c495d37a119852a3e27bde9f534574456830724d8b52a9123c7cb397046386c8aafd4a03aa2e68d7e3a4e40c9000ece37936b19e6b367543e5cce59e14c4aa8501533b600ab2f5e88f0c6d2eed9a05dfb00dbdc7042c4c956dbe70deb8aa8264325d4d97176c205c4d7a220e525de6c2747c3fd0407b568f3c1bf95fd95b36eda3e429b2bba312bd87b8aab3a88fb8142c4cdfbf056dbab9baaa2b2a5d20efa8bdaf76b8dca1f292a48caf25d579a25b4245449e3d48a19b5035ab462e41d51ee888ddb264ace9640cbfd66dc363cd211d2f1774cf5532be648224bb32060fd68d3506a73a0d1fba2619c992589460ed25d2ff4aa3dc96a9605b3c9253b7c658127f989f460cbb1c5c61309c7e568448c2f6a527a125f4e4aa869bd2779b212de12e3ca370f0e6121561b2941cef61b95c62b013b17775f8accbea8388fb49dc600a99b9a003c725badff8811aa81ec85bdfc917bb1c416cccf4d1ad6d1f65edf9da58ecbe8b87dcb1a4aa6b5fc9e4fd27359839a75a7fc874c7f7590e4f9ee913682041b2d14dc063786f5ad59adae1282cc4835d7a57950b0e058f53d31c57157a9ac2641d42583822ef57636329fbc78bf6fdc5c3f259f98fa25524f206bf69d96d76bdb78d2c996cd369f16bf8d36a1cd5aec87f789fa51377b569f684a9764d4265a3e658c4ec1cc39968fb70f27ba50a9e4cf411ec79612cb60a25c09ea49ec198fff3c8a99afb66eeae5bb9df60ef3cd53a6ce3cadc436860efc8df255b939116ba2607620cd16570acd3fa2283c2145c7b2d19c0367fd3bc01260cc703f55be7bac73d77a96667274aab5b444ae63a3af57fd957f0de16d126896d0b048cc614e91e9170d881151c712a05cc1f22557792ac4b157028d9a847372a79c7207ba42e732cd603ec175607992042693f0d1c39fb99851f25c3474d796c99b279219f700d3631916d14ddf540d32f8f060c2fd2b3e82c659c7db81e975bf42e5e610e9935d607eacdb5ba2467471afb3cf7bb441d6394ab57af03a4d91e11a499e3f8903334e276d3a1f47b56a48b14ac79c579812f44571c002ec587de787af04e653d4f79499c498093e154110a421d3857582777c4d3b418436be8c2b21a2c4b5d88d1cdc5c7f5fca040abb620ed56dc78c956619d85e7a0497d45f346ea1581e9590057dd5ca1bb217fa1bc547d200e31b4571556d77c4049e3e698bc5472991098254019c4136521867f4b2f5a4376890173bc77303d9f4a8513da9dbe0d3adb2d88af016714a3a53d8d8a38ed87bb8899ef7e88f7f066544b14e17092ac0d500071cd1ead6b1db78c12a2f79cb4853662168212965e3c6f1d30d4bd3718b97afa28c2f7ffe27a5e5b58bbf4d0917e9c452ff19d744fcaa4e3b1db0d1519e75e01f4b514c33f62a392a5fbb8f2e74cc12a81f2aff98bb8fa85dd20e694763f06fe1fcefe634b7f8c19428dca687e97adfa55aed28dd9ad7aebfdc8d31cf96879daef373c45ce7624d87797b29c1e08699bf34d8d9802512bfd58fe5915680bbf7bad1556d390f270b78b42f9f48f46fcf7a3f66882cf4d15a438e802e78ccfe1cba093d57358997a9fc8b526da98fa6ef5add1ecb3054940c6e3ae55fa2d5de6b112d6408fef1349767419c1b503ccc87c5807a0946fecb54ca279dab7135cd61449091f8e1e09e526d89552ed96631176eec00d8bd4df7b1fbd711a840575b9de8e52fbd8ab2357953c5262ea1a6851cab523b901fbca9a257cbd9ccacc5098f629d95ad55e08a6ade777781356829060f6592e5fad531b482786e8f230947a4462c7c7ed0161da54232d1dd2145ad720f889f40bb225056f05f38762f9ea68b08144c7885ad5fc74369cd88e1a982df205dc916fd2e660825f2d0084eff96922cd77e40e330d12f469eb31b031e39bbe637a8ff1d53f34687d5bdbbfda6a85828f89a5e752b027bc0443b09e21e3286c5b8a76fb82d78a0ba7a6a17a81e4c4b810a2927b7f6740b44fcbdec1b241dce43535ccf4a25769522536d91fad102fac95e8343284da67c492ac4281aca5bf0e39a21b44fd66da253e320b152695cd476986127528b0a3d4140d6547d6b6dad2affaea525bade46c3cc2c0c4b41da76fd3a2b5aa3292fdcc1e17cd79f91d3419de64c28884d38f0f65107e941f4dc30d1a65a33b6b277b94f8f10481dd82d5c90f092a4d3f81e3f70241d0ed2ecf2b0a87f6668e9b182814eac592c54a8bc6cc8a10aa09565fe90a5a803b37ab4be74c627d860d8a0c09353cb8fdaf08e30e0897a2ca258f14a831b7f349da5c68fdbdf324891effac28dd35f4cfa5de30b5677ee71307b34928555fc2813e09cf77448111f92bc3a08cf51ea18f11961bc4d086060c188aa5725c9b166bcb7c285cc8566c5d9b9f8f3d663fe6c65af64b422af8283ec0dbd18d30b31790ea7c1ab533b85e3ed658214416e0ecfbe8c769375f1c742f68707481b7efec7701d04d896cf00f2344b9ffa8ef49dbb623d01cac563a1369760f3757db97bea97a416ae05b45a6944d89d171d8c2da8073db0da7f79a2c745481c21682f2b4acbb9719c3e8014b19598f3ea7b89211df40aee3332a84e8d6688dbcc69649f70a2e9a0138fb6a283bd094ef537902a95df2134755d73f6f191cfdce70fee4ae4a3911cb4a7cca62811a608c7d025aca82f1cfe117e614e8c4d7989f1ba20b02f546c61efe536724749fbbbc2b3be29bd5a5ad58803f4b7b600025d8cf6a061b92bc7fa35e688a949ac76d27670ce145de77745598cb2c5274016d20943e1c20a903050271a37ada7efb3d76385da1ef25cdeb7f6870fe928841382073069739c38320e23fed811fa5a1f551a71668c23310dc7ff7170b6625284d7f73aabd9067a397ebd12ce58b99235b5fba1f7fe68fa90dfc4ea999f4d21e76e69d12d74a1dce34c62e4aef45e1e738497b602e82c1fe469f730cf164178b79fdf7272c926d69bd1b5e2de776055753b6f2c2bcbf52795110702a5bdf7cd71f6b8ccf068ee0ddfb916abf15458dd9764f262b73c4c981f5f64de91e8d8a6a30d961f3ab66fd92b6d159e6c0db02d767bc1f8499baae7df9f910338495c8ad74ee807c64434cf0b683338c325fecb8efa4e5b677c88ad726c2c3efd31fbe06b353f050794d5660c24e0198b1fad1e4d6b081a85517e3f644f96d055455f5deb4afb95932aba248a4dacaf286d43bc3e487fa417bce44421b46175c4f5df49e40abe47dd786b91122d09682f914b1bde1d1586b30163223724fc8de0c5f43ac1fef77a6af05212405d86d3051e3bc3a9438a30dbd17370112bf8872d2846b7219227dbb035164e7149958e4d868e3a2c662e40e6af8da44c43c5f00ebf3f356f5ecfba41b9109c419bc5e86d4ccae5d3ff723587fe2a4544e6e56719dd563c27df7fb493fee9922dae888fe8e36a5d3c7a066d244fc1b9a78ff74ab3152441d77e88492b7909b6921c6dd344ecf516c2605b764016fc97c0c94c297ef911dcfac6a9f67ca9e9700b4fe65105cbe399123cd1df6fd623663d0d8461d1ebb7640e42353b0c24016515b37287bff2ce5a888a0a17081fee8b88e700a2607f7d7d8e7bba855e5a09fc3e0192f5b8041de1b1b2849bad56a69e10c071698f36ec9ff7cdba63e7ce3babe0a4e819a2724ab50a50a1fbd41cf41481343705d2848d31d6d2b5653ce34efaaa07b261e3cfed4b1edf12b5f0d55f6536acc225befac7e9a8052bf7d25b9c7f06b4b27d107f6e2a4bd8374898023126cdb4b347c8fc251de7ef9e9a2c79ac9f633638b99d0355c93db680224e3621dfa2c68aca652b3d4512ec7ddabfd007e25bf6e5a60dee3cae51049dd167e399d6526ca94c37ea78f5b5a65a2810f136ce5d9129c0d7a27b40224ce0e4999d11c14911af3ba5cc50b65c87a400a45fa1d9f47f75a88ec29a352df9e9ca37c52217135ffd2733436cfd541afc030e7de19b9d2c69cb97c121f3d09628f0e6fe335e3d92238d64e2263158dac29da3ce6e69d42276888720aae2b69c1ef71b9acdfd2472a2dcbf1b0508b741883f08d3b0eb15fc1c8dd1538da84c864c5b3a3d6a7a645c0ba3a66081da1be9bd7592204195ff13dc3a0aec52ab0eef218be758915c89c8ce50bf65352be32de2cff436a8d0ebf4261b985d82617a314f17977ecb29e1435b826e6b978499a898ac93895f4259279ab10e29a5721af7257ccf028059174643b73816116acbc44f99f48acd50e328aa88d0d334437d9b3529f2a64960a86c075db0e74b44e60b58269bdd7b930671c61 +MD = 7ab30cf6af71ee3d9579b8e5c3b0146ca24db6cd83e79873878b0400 + +Len = 107872 +Msg = f66f9b41fe2b298d77ed9b502637fabc8762cb9364e3418da7ccb0fa6d9645a85b1df50735ecb38bacbbe65278361a07a700f50635f86dc0dcbb39612d6a85b1e0adea3869f79da6cc0ce772b1c1d5c0bb033088161baff54f306c0b690e958d2d26641ec1d551a67ce986f7f96193b16a7463622fd56ef2a836313f470bdb04e9904aff660d35536658ab2b779cbca05d5a76dda9ad13808ed27044efe7c1ddbcf384247f27b37432643e5454fdb8563cbd503fac2c0467a90e11638a2daee25058f9d535ac32d3881227bbb709ef9baea6dbd05fd8aa6fa2f1fce440620ad94ac6935ab0231a360e6c4ea8c94aca365b1bfedaeb3c6d6021831a0f38103c8b554639fa1714d2666f799b62b247aff1ec27a1a378ddb601cdcd512b9bbeaec017dfd3fe9207c42b5141f7339988079209cfac742d45eb1b4fd68a8290f5c74038994aae4b85574c5dcd4861a6963be2591d089532fb76764ea7ae5a403cefd2617c84526715f3933a24783503f8b1a985189b4eb087bdda7346a3fcd31b8e403a916a32114000c6904e6df7d536d3af34c84ee7cf722a0f66bd53b0701a0c506adfe4966f8de6ae095411ef47d908bb0f360aa7b64223dcce14a4be3fc2d2cb9a6edbc5a9840e134b3d4a657e68b797be69b5d88e82120b5451806d699a467871473508e8addebdfe1102a0a56b4a09e86938c07eb75e629f7ece06162bd1219871dca75491bf73cbd920e9e26a28da353f7ca7af6b6faa58a276d16dfbdc8cb6f4b6ea14b71aff5a9c8c885deeb9d24ff268d74825adaa26c65f169794cd8274d9ad1851a7552752622ec5407e65b8db8ae397726e802cb2f1731dbc7e0dcb7a27a87b32eadab45b33eee7b0a394568410d72e55cd50f6a32b992d023f052f6fe68e59e0070f6d1f18b438d7e4ae72ef8b2be518ca85d2a27cb99094611c76fb1f49fb82865e1c431868feddc91bd5c703c704e4ed878657edbc8c986cb967c7d9c0a941f02e87723cf282eada4347b28193d3e0bfbeda6985886a37e646cc7b1cdbab45cce677528b3a0c24a08f8f580b779935c79398814d067298592a6bbff08248b5a2f0b48b0d28e4b6a2657763ac5ba00a8d6c86464b1eebe44ccd0c395e9dc9b9fbb306c6caa551c6682ec57869272e889ab26e6189b91f42489779946d14767b5d9735abcb979c7d7b5342414cc38cd675ce16790fbd54dbd4f0797626cf9720530408e117e80e02623ab6665c17021ea6264637e314d3d67840d3888fb774d362624911b67eed7ea54de98fa10bd785b624c8430fa4e45cbcef5071b3b255ba1419bee2b1438118cdf3a263248855352c2f63449b57ce952965b8d997a981fdf09130fd0f1d14f96193ab8aec74c25690aedee28d13dba8460ad36a458541c57e336609d8f6ec48e997caad01b9670f6b0b02c6efc251be9b4768cac42cdd3a47652aaf14b5522eee66c8746c3d8c8944ad9798c84b79feb18241a11c889d83d2904297cc428ed3f7686c8634ea79eca3fc65ff21969b910f2424985680c8c9a71d77680885e85e8c05808c61a6755f106033a4018bff9e3e96da5678fba8334f7291cace66a8f735a5ca2dfc5bc90a1441ca2f7012ec4ec43f2b848de383ea51f9586728cd15c87bb014120cf0be163607f3477713acc92b86deca9a1fa215351994e41da278f6e58e24e2994d9aabff1a74941c768536fad5bdcfa9974ddd84390cecb5cd19acfca7c246ac5aa5f0f6e315c06923c0bdba938e3cc133cc6ac5c38925f93640104664b8e64bff290ea3c8a0706602a488f2271ab8ebdb66e3801ed337f0c5354a4d2bcd6981246c2d8e32db4e1afc7bbc2afb29ec2e7764703eb2b2cba3633f839965c87853b1b773408a90028df78b84eb76838092ef0e3b85e7ee8918f6a8e3b07b72bacb8e520b40368534c7dc1e06bb00ef1b1f2bac69e0254e185967b6911cd393d8f0a3851b16a0838bd1947a6a25013665de138625d4d49b216e9fb2b665d7f379cad898cc4b2e51afb206e7d9aee12008d690e495eb5c9d4b5d85e47911ee59466216d245664ab9497219af7be00975a90f880de1ac251c3f30009303aa7f8ee6bf437dafef5b81011ab7197742dffdf392e54a329f97e0a4effa087bb8f45b02e949df316ec9727eb0c76cf55ccc808b668de3b04d1bb023a05a8c0ac1b48642e90e40f46cfb54693f30f11fb739c51c936a20823d1756644d0865d84f27d74dc67cea1f715bef69ccdcf01bda8c954c226248d1f7f5980efdebdb0ce9b518cc887a24db03500a2761b2b0114d2fb8c31a5fa5c4041b3fc9b9ed38cf18c60f6638ef3550ac426f4a059a7b2a9988f62a83487d84ebf3133f88f5c24862c285c4ddc566a5f399e47bc17c978d450117296605193834e3db1572ecc3a05211438e7fe3ff0360be32629c404d64d900e267ca7dc109685561f67fb881fe6d1b0e6b263148917c1721a69ecfe5d4deef208db79abd1f0eb06b88b842458b3d49b103db978878ce0d78f0cf0fa707db359942354354a1ae5cc2732472566e4901f2ffa5fd09dfdf0901e738e9db25583a152f4d60cfb7d1c12e60cb31fed019ac9b078d4b11ef35718234e045c855dd665cfc06da768bfe4776f7b66583d936b372c29a69e9cf5aaec47ecf0cb7c0f321355069979142bd5664dfecf72eb0277c40d9d43fd9a9d6298f6e0e24f08e21d36ad37c8068079656bec175d0477e7471ccf343b628a22f49aaaca477bbe6f0e4c12e497d430012af4d445ad6166aa6f9e0b9f0b420e4ef75dfdf99ec60f0e7bc0309d8776955b8c9d911a2f3e29d447b42d3e22207979d17f4aff66a26d68ec3f80b2f54232f100c2acf550ef53fd661bbe821e926e2c296b2c6c2db57bd6d6267dd58feb9b6a3e107277c0f9577e41213a0b6efc5eee55ae1c9052639cf0dff19275b5b7311f8ae39c11edd0b6df7f612a5a81e2ce38ecb4963c7331534f504d7903e55986998dc894443629f4a9675809cff5da2e84651b13a11ea3214add767c00bd372e509d4bc59f38598364af72430c49370259354e3f6ea33da96bee29160cabc47aed5fd9da7372e40589ae4c707feaadfc3003ca5405bf653e2af8b1f1881fa60eb83bef3d71645ddd90ea431c9b58935ea1271c0c06b1be621083cd78f3a7405c59c81859099b3b8e02e9f2a1ff118bac1535bfc1d228adb7b525c836efc127e64a7ad1c7bc75e1996833e7ab1bb3fb8714a6220ff882b7a171353e95cd0bc12ef2caa803fa82f472394e7e8261ae675217feff610a6e60a1ed688d202bc5a0a8eb4df7985440e8caee9033e2617f53afa7b6844f583a4d5b720650507cbd4ae6bc6b6cff5a4e42e5f0bfb425bb9544f24c537d359274b210b7b514c15021246abea964936cf97765f8135bd6a08ecfcc6e5c26be29bc537426eb46dd16bfd1a79a8e7b1f1cd11acd6d31b76fe0ca389096473d338e6f85f8382f731e50d7b72fb8912cdcda73818ec8a1437bdce623d14c9b1d50410cee1f63d8060f9f0759559147d667364f602c72d87c64f551262109ce337ee222e04c42ab8c2b41dd4ccbcd291438a0c32b19244deec5da9993e246673c29d23ff1115ce071ebf9b7e5f4c49b62ebba8d46e735880718fd3e11979adc83eba1b2b5010b3d63ec1725d96300355edae3ec38192f0d51d8cdad03d36fc4a73ec139909de608be863ab58b89188d4490ad9e932189445b8fdc650f184d86129dc113184a65d90e54d4d560f965e9d0a787e2dc92dcc380989a0487c8bcb75273220db0891334bfd266041e1680f16f89f37778df82116d9d96f9f27725cee3695457fdfc76926f797ed00772e23a9da280bafc7a21a47f0943b3f3a6214341ead8a054f6f87879d47fa7b191120bd7aba03bebf52403316630c0ffd8279afa723f655a1b215d8b5df929a0f3990b99efe258abd31194313eeebf7b7fb15c8989f91581db79c800806ba45a0cdfa070f9b7bfc09672fddaedcdfdfb2f470e5bbc864f40aa7a4e75e657c6415f5e70e953a0dfcea1b0a6bb0d6f1af34961070d6477612b2a9b3757fa3dfdfb6dbde36f783e173aa763053e283284f86087fcfb2c3d09b5be653923269eb9ecba467e7ff1d01478f9f2bff098c8ca8f073456c17e578754e850ba6405fa9899c7b0a8973b17562e2be83d5f09825a0b9ffe8adcd55788ad3af6319722c2089718650841ce643aaeafdbe3f5e50fc202bd3f2fc9bbad8c0318ce4538e79598491edc041c2657509f18266a31a5b18118c18ebc04abd9e01b24315bd5ced5a6345d9e3262dd613663d75026bed63815925f55960a205d4349cfd7fbda6312d0fd5723f9c24df23a817ff1bfe9f0d40e23e93c6466b3b814138e1a8bc32ecda6f89df5e0c712bafb9c74838c4f8035c921f1ab9d96d06ae0fce181a23c9c7676aa849c8dcda60be809577e125c0eddd530fb1bb81700f6288a6c95d58336adeea7cd70376282759e5c9b49f89be72cc0c588053a63bfda593071df7c5387c46d64bb29940232787d0aa29f858bb3b30a540b009b097797f183b3c72d0a0a6a8155e0112a49209502981fb76fa7ff01105106965084c2bf900884d56e3328f0b91fdedf4083e74bcd89655a1d8d23877160fd2f01422ba1a3137782965b7df7731709ec9d6f011d4c6315d00587cbb6bbf8714313de1cfeb948fe775bef840f5ddfe3b18756e889fd99a3b1be34422f4e8be56b0eb50117211dabfc155ba588b7df0ec6a4d808025fa18187ae2f3151b79fdc1f6873829b9915e2b9694c8cf44fa8edb46c6f0a16f12f51ca6bb513be75b8c7d8a7761bec8fa65517be2e94e253a202d344885948407776e26d8263d6074b3b1f4259379a5363559f8a7e47d3826ee0dbc3b06016dc3e737829f3ac28eadba86bdf796025a2b166c954c820384a640a167073c8f302c8d9e437a55737aefe8236c573100efc352b2db378b8911a35d11bc14efe7d72cb0ccf0d03ef82b2087b089ac2e1b6ae4305251d1c7b6e8038e8644cbe6b169aa99e81108bef8a929dd579d5e53fcd578f7748082fd3310b01b288592eb94ef8d911b2e8c9d1cfdf3333e2fd5694b3766f042eeb3f7a791904c1e09d2c43870bfde8dd0c3a30b2e65d08dc77837af999663e125ca7bbb748d689158f43a46f427c8657e15976d4466fe6dedb187d102f0977cad315217c08eb9a8f85e156684ad99ccc1ea43ec48e003062ae81f597a5cd6390c4e44627d7a858c737a1d3f263997e920aa6d2e41ba287f0583c8ee0ac26640cc8b1844b33b156451af1a7ae4b30ce523bddedb37dcb50007eb4a38b80a90ba744f98676bb8b1591864d3bec6033ee7528c5e9c322ef2b3b6886de18e1c9ccf8d018a70add9a193520311b4d3127618367db5193b9726be9dc2f98e94e0d2a69e0bb70a7f862c3986f39c0413c6fb9f56f9aaf959029b494102b5e9d13f7a682fd4e7dbeba79b733d9c3c558e0817a53a6906e49554977d2cae6a9a4d1fdb3cc9c4e18bf824366bfe66b94f4dc110526b339184f6766381e530e049106a3e4bf3436fc3aee5454651b9da9b57d72fcd70c1137e8450477ef4eedf9d2306ebbd35b9572b16d3102fbefd68e1b434bc3fd179547d47ca8a9ce2522f3e8ddd2ab9178e626a37d4df4cce9a2cc86dbeffcf17c51b2748cd760235c297d556d54367222a58291ad1f9c508f8ebf9895f3fa6c90c32248e3f51d978a8e10a87d87df0ddf6010fc5b3a7c3f57f701c10fec6eb6fb55f1d210a6448306bd38426cd227cd05825c54260316e1b9882d80b82dac7922a6bba0a14f778e77336ec3e9b783284b98bf299c2dfed04a9e8d581d5c462b9d21ea2504752912428d1e9d42cc83b8082fc3fd0c0f869381c6bbc7adecce36c153f7efb89bcba70f26e24f26759bf4c194053f141c6093d57d335fe853973335b98f514c47f1b5239d3449f3475e571e81fd8032f8ff69dc4e8e716b25539970cefb0a1dfe1dd5265c9f2e47b62d5765561730f719c57e0c9717bc94d665e1f900d56adc22b28f8de18d6c82469b8e3cacdce1cef35558cd03898203eb5095450ba903d55a423cd0c88975318d2b641ae2c913291a2182b4003e7216d8a63bcb2bd065b8096f75858e1de8d3de5f617694664593f2ac744819b10d6c32d94e11fe05f0e2b47cb2128ea527f7ceaa1ed63e3ed9ae1168a60fbc8ba4726e5c34b00e9445f3e00c8b1e56c9c30be28de4c03cbd7fc5fae8b0616518d7b7ffb1880bba15c54a109168ff83063a8e9e8d6bab3c5c888a13aefbe3a00337ab7b7bc0abad050f83caadc43c7fb50f0e672b0c1db9b68458f02e111cf9b514cb461d771633ec750f72b4356bc980b0f9e0e95e9e113613b124e87853deb92fa6041903b20b26a66bbd3724f3ecd3b0df804adb92ef65872106509a4ecb89b8aa29f10f258f6e1416eec91b6b46488f3db9b1fb92a0bf8f3729090f644ca170761c27f1d72d0d3e9fabcca1488239cc8311c14713d1ce6c521174402aee8ac7687f30445d809e867458c43f021d31c94e1cfb36ad0efcdf004424c5090dc02e1fb7ac7f1f169c9c239a324d2e73cb35fd3fc252b494e537d0258d068536cc24fa59ff1a925b71e02bd4b964242250732efeb913c12ff207305a3fad3606194c96daaaaf6dcbd8e30b8cac1c99a57c0141de4202691cadddaf469f0181e821f563be2195e7e41c2521469ccee579b870e452efa70307932bab6f3dabff4990cfef790676b730c6273b870df3ae1b704274f1246a256d2c61c3589e1504c6c02c989fcbba524e615988c272434a173de6723d82d456a9f420758732d548dc5aac0d96e3e93f79683cb78d5c064fd99bdd6a9c8d6e0d6a64d8407f8e5531e6aacead02e18bd55e6551364c4de525eef4b7dca2969fb01b0909a2a6131d36923af50548370aba79c3379383aa4872d3f2d636c45101e5384b351aaf63a5ed5ba5bf84eb76ee65381c403dc803a8ad04f0e907862f1d234ec5db16dff287bcaf55aeca7103cf5c35db1bb38dec9e3b1e7940dd7c9349e0cae36c35cc423b3b09e513445d7ff605df8a1a9359b791b36d167e16fc2020b4393e78e5f8d528cf07bebd61253e2b08b193dd4b90171b9c9d430142a9483a04163181a5fa1dd90f055cedcf5ce0a6cb48a2d44ad56da45d1b797afef89dee56fe670704249ed4719f3a24dd58ea21c3f111801fae3db47b64343b9a5e73c6233e39897f2cdaa38d31f10329cdcd0489677a71486f09d48df40dd3a36f7c4a0f624389755753beb879fbf923100bc79208381843bc548d0b6760c3b89019f26216ff7795588c8e89b3c59757c42903645ff4e5900a90365a2ac79c2864df47c1a8d7d44d9507bb879be83e465ea71086db1b89bbce6f6910bacccda1522ec2b4b467300c8137ae287ede7e5d43f89760063655359c24adb593cac881ecaafba1a6181b60c1aedee2f912d83b18a000866dbfd89be8627cbf525c1d6898b64b1f1a84e6d8cadfd64d871fdc3e413fe4608e22943d379b4ea452eb4cb3eae339937e1832d3014d1cde956fdaf5522aab94c3f918b80e51abfb2212d6f267a45f854d5c7fee09693b1cc08d84eedff2ce89bbcdc68ad1080d3a5c5d3cb2739c259b04cc3e9847c6896e84f34a892f2ad5b5e1fb2e342430fac84e14fe62a31d241b30e1ff5040f7a06a5f3bac62d42559bfb31bd0227c6efd4b83e48c918ac9b3ac5e2822b4894f1886bbb11afa7384b2fdcbaa2cf45e147d3aaa4677ad7f048cb4e9194913956f5a5a270e16be61cb89f67820c5282dc3f2fc1da54035145ff7db6e4fe32bd9cace3b2dad403d436c3740650a192c7fe017264aab66b6cf5e8d665a06813bdad41cd04c1907e58cd953520ed0997fd91b223fdda36bb12472d60c390793e22d2dae8feedbde4592a556a1c22ed690adb7dcbf3337bfa2a82f3a3397bdabad253a0be0926043ec1962c9c64b5f511d82588f1ae7d2e309cef65262d28338fb778bad68e330d93775742525f6ec8964db6fb1d9680f66650d6a87108602bc6b88950b8f3dd7feb63b5be1475170f0053d8ffd813037ca32d7fe70c33eb6a65bccd8ceda2ec024e6dfac86a0e767157d1d1bca88dd067ef1d31488014919977ad8d94fc012840c57d6c8add925597a4aeea59186cad60520835f353151a60017211906d7a58de577b5529f4697a28efd46bfead18630fd5d4d411109d4d660df3a1a9c97346870d4ffbd038fcadcd3e2a9cd5f1f9ba1b7f6a53ca3c13f354a21885069656b8e1ede1a7a52fb1b82e9b98c4036b77792d59b2fd4561e1d4d1c9c904d15f8a77940219a0d063f162f20d062db3a3fb6aec699419ab066eb88689ee672fa9774b4951e0307a5c2572c29d5c1d0b22eb5301b9f9ee23b422671aea6ff74afe85fba8e41c9dcba0b3b1455182dd336fb1fd1351c7c5d6f265a836f434f94ae51c5158c2b730eab905e7243361b55412b330cb37e8e6ec489f4582b025b857e7a41302f39731002f81db064bdfec96945bb3d17542998c3e3804a5252b7b978b850a4d80a6e834889157949fe5cc207c1050cc13bf26de5d98ae485b2c89355927fee270ca9caf4e9c21763a5c9b1b5239cd641746d40b2c280b125b112b57d9f3b768cbed9798080a0253212aa2ae9f40f3428bbeed3b344ee2ac2cc3a926944ffc8899f61f183f42c2d35e392902e98c8a0e7611b795fb73fcbdd6294bc911a496eae3cd7d577aae299ff76f783ebb855a6fe1267b420b0022ee622a5968d85b4e35b15af97c41b5ff5ff7b6d68b9a932a0ed3e5806aec5b1ae7d7b01a2d72daea110985dab01cbf0bba63f58d11101ec4935436103324eeac4f3da2d73e668b3228f5366a1a943416594514e3f7a48eeea56c0171c83d20a2cf9de7d8c33cd5f01f7c55efe3307de8e4a4fa2166df4b71ec242eec4fbf58c30efe6965e57d1feaa1a6cab2327900490289918e8547bd151283a5c9f13000d6b5680fc6cbb0d3e9547c7dfb30f626015bfbc0747d664da1bc924f50d51a7fa46be3c1429f5d58b5e0055612042f57d798026f1975c461df945812c924043df5d9786722860c1616ee4a3e3ed8acfc9561a686c696e7639542ddd77b0577a290a62eeaafaa4675d426511bc8d1f67b015df0eec30859b98c6e2987afa1fa163f7b0e302e3392ddb62f24d7f819943ee435e78d58f2a2cd8cbf4508ad1f1501c8001e22ea4979b686b2cb5816d80eab0591944ccd7c48055ddd3844bda850cbf4dc68a82a1282680a564c886a35ed2c2e17fd1369d0d5cbc6710a21276434dc8bb8f4ab35b9355b0bc4b14d3c59b72825722ccb7613d1869023c389327a489c553bc81154641af750a30291d36cf707b348295a3a70c29d839a6c63271314741a0eeec4cf3cbaa5a39c453b78953230a042faaafe0d327a677f0d974e5621caa1d86eaaee689ccbca57843373fcf20db407a9a20912a8840479ac0cef6cf607b3424eadf91048d38e7bc6610ccabe05b7403e29a5a8ad23223153ac527c1c9418f498b4375e4723b7b014ad8b271f807094bf2918f7c8bf884e095ebfaf19d7989554a6f17820250da075ff373a9ce6a8ac3689ab2681c0ff79d70a7d2d773afacd886d6f865b3f58f1f13f592cbda0272faa31a65d608f4f5ac398d51dbd2408463ef0f9b181db5f4b905539240a14b5c6240851c6ee924098d8f10fa774fd88a57d17d7201960eb575b291f4b0cab1a19abf8f386b23299dc1bfb73f5232c43954eca50fdab36c4bc59a353c94acd1dcf47e9d6c834d724cd969f482c521b01bcb7f1ad6dbfc5b22392ac1cc54ce3889000c140b2fdeaa71450c6d8778a318ac2c374379ade747d340f2ac4679b532106df697a6c94d1eb58515669fc51d6a550773b33ac8fadec96d70791d9be87b1d7ebc9cc1f81f6b842a23944e332721c0edd2feccb5bd8c8f2f229cc403de5ffab2dc97df34dbfd67a4a55b155b26db5a3fc36a91dc95bd9ef697abcc7a1d7d52bab52d70f7f960ca75194f77a5b3039b8dc39b1cd619fe73643e0ab9371c4f9fe6f4a209c9fe22371c0dc6079b4216ff486214d01ab0cba6e8845dfcf351434cd819ba1c1360be4829e17327a45a9210001d4c5e2300b19404190a1a1762e4e40e72ba2a7cb79147ff32cb6a797311583553c61977702ce5475a93931ba7c0ffeabe46b75e6937e13c7033426311f14268b406948085a9f512c78efa88c653fb0d5ac43540fc3e9e42384f41f9bdce691aac7241f6c7c55e06ee40b2e7151a5fd6b6d746ccf711c9a0e973dbb5ed1536bbabbdb412aceb8a844d7d4eaf3a80a8e770e44e4ad03e0de912459210165235cc403d6d9caba8f52b539930599d3360a0077fce532e2fd58b3138e7b0cff1d0ece875d0dd5a7a485caf091a7eb38f11a0f90e396e4763baf7c4c25ee08090b26e32fb805d2fdbdea8ae513f672400366ab4143204e27628bf4b765a47ceab34f08e32eea4923a328fd00641db5533395dc7262aaf55e3996243d98c5f00add2f478b08e4c2831ee82b2acb423dda4a50aa0b8a5d6381897513c40478ecd1536ea70f8f1ac684f5d21d498f8e903b113e1ef401611ffa1ad3c935f3e6f9a7dcb5315708b5dc8ef28dda46f92838e04d083f150fddb12fb4564f79ab379ef43faceb4bbedc8d09dbc26a0a5138bd2fc9551656fef9a28a1fa6ac767592642045fadfd4f8b8605d7918d67cdfe8a5924ccea9a014df7871226ce816981fd293b64715d8fd71ddf394382583ea5e7a709d1b02d99bb4be4e87500c405e0870b55a3d9340162e8c31f4c95f09bcc2c33185e329ebd9a3f98814f91fdc0d72c6eff88263f58b17f68060748df59b3d093cccce24bc17d1b387921029d1ee875da75abe8ddea456a249a1e1b52fd0f7d3fb3a86fd369c6973b3c83c3309496fbc46469a17e2a91018f27fb7e29ea217a9d596b0bc40b291c2748026436b66526b3585bd0bebe170e1e5c29f192c5bc51332aaf767c19f712732807664df8c57f3dbdfd170e0959b8488324064c0422b9a7a3c0008a3ac332a5591d39b4d04a6db9f1b7b4fa80dbc89459743ca429e6ec5161576a6cd21fc53457be5f29d1768abeb0365af2d91f97983b84f549bb8b91d6cfdff4a2746f72b6a065570b70ac5ec265d379856697adba95e0d08b1d83229e5bc43fb996249392dfacb1d8428e425b7f298130bdc6837215124f06d450171e919ecc10bbf1d05f41eee02eab8eede088a31263433eb1652593d14b7494f7de1dd9fa465a39918283b6726d2010a9f80edaadcbab72afea43e007a782a44d633d006ad8f57e5f93219dd92254c61f187e2aa3a83ad4e7a7fc7142c9631070349bac9e371232a307880f94cc9e11b5b8532d94a78607e0f4bbe2232fba6c18c8a63904ff44e90466438635ea8085f66e2a5e1138117e34770e9d1928dd199fa5d9302f7fe223ec25d08c2cfa90955980703679d8719a5a95610ca5636f9b8d32c11c7e578e55d2ccababfa8b32b267c5a1416f170afebbd66fdb586dd6845a25ea688214be0140d151401f0b0b8fa9744a093162621dd0c067739286a6469ec5b1aedb15d5b8ceca5df31af87f6f8732e6e89148fb7a51d9f45fe46c4364c3b8a359d9f989eec51e2e2f6ee202e49977e479ef495b968789a30ade7d526151655be41f3e3f05dc434e7f9b463a7148b9ef37abd1f6e51a65d00ee14847bed06237f80b3259b07ce03b4e10938ab82d8f43ac677141f852e527d68d4b97ffb925d3e03e948e511f6b71357f58780bb05eae42a2a5e142f98e06ec42f5c78684269c4719c3317a4c5b8c90381386fe69ae6b84ddfe495756d6e9da92d56af5b9eb0d973d5ce78e7c26fa18cb433c02c1f527fd89e8eea7f3466d0c0d78d6cfd2f9a44b19b0152037542629b9760bbb41d9501726d445a76752fd0b134eaf7757c90cfd2f6b4eb1f669ad3d730a7a8a71c1706c456ee2e82b93165234c5597ec0df8407feecf8d641ee0bee989f1ce2ca24056766074afca86d456be28b7958a6b3b605f8c3a7efa247ae978aa24766c3978b82f93be227767806d2bcff639761dc2f71bd7de060800d21c2d992ae88e6827f697f8b5d2b0e19d701249fccbd9abf4cd5ad8a16fb63b4e21b060e96cbbb8b5d657963f069e7e93281a9faf93da9e38a9c5956cff2e5c58bfa8074b4a1baf8a211776450569c5ca5decd8f9d9a27df8550318280095eb57bdbd9437c9d5d70e9e7e9eb018383eabd730fcc1e458d09b97bd69bbb81670b3e49811943212b8aa173518668733729c5d8d14effd252089389b8e0f70d674d3fce1854ccdf9d8c452e4ec519a84e806b9ab276a6c31f3290044910a6f007f21cd3ff946e2b3c1c61932205899502852b1333d1c79a3d4e5b6617996ffba17041e5b746ab967fb1632c7be62cbc2bbe60ecd5eec6ca4482424994f9a662cc6e4b8ddfea09a3e0c1e654ccd5979ff282c972093c28c5bd94f10951afded80132a646c9fd0cc607e447c695624eb32f78a16d5e38622f10ecc43fde2a9dcdb863ce8b060e298f4d9f23dc560ab6981b16a51935720768d6f048578b0857b67a8830c5348be4622a38f7209f3d63b14dd331203f679d058855f9dae8b79114c00679afa604d1e146683e1dc178da814034d1fcdc877787ad74655487b6de8b21751584faf7567efa93553e7d5b8f9a9ac204098d503b51aee1f73ee884946c073a710fa3d1f6bdef50f8fd2343f77fa5f143f0c2606d1605053c047bbf5749e9ed288a312347007d1785f443d0a6730a491e3d2c2661275874b04fc1b5aba75203b89f1379abf92c5d889e5f701147203fff392b10dc1811b6e07b4b05e5f6d7f49da8cb33ba0a85998d65e6a0dc5e905c638f3fce125ab9223901883eaadad4563451d8efd5a71161e0e579e14c1bd314e7a9eaacc881c76d469d09be7ea5ef9f3904cd0ca371483d3f9779cff51150fff803bc3b530fc4ee85883013b5fa7246084c082897db9291f5e676bb7bd192842147150836672a3c726d9bbd054b14d12e922ac22758a8e6b07cf13234df3037dfce8572072a6fcd99b7cd38c11a3fc718719547c67ac3c1dba559d2a49c8291a0149e3739cc1e1857e115059dda6bae5254e84819b4abb9f40a410b6f8c3207feb3cf9642cebda3699433b1e02e20dd68d684318588a9157616274aea30972168268a3db694b7051b2b79bc3c67e80ac85109a29e89448afe438d1f992c5a6458e76e8c09d0a2a3f9218782f72a398cfd6ee8f9d9191680d93cd30810d1d4576d60dd1fb0e4f9168010cdb4c4d78dfa748a92d5a9ca977db34ca982d5c39d61023d6647504432b34c63bcb01a126dc9da2ea79495103ff8090d612e5c642e17b3d79ab14c90e830cab4f5036b4d41717ae587d52f7c887646f9aa5919460ef1eec9daec1a4d71e5676ed72d3d0ab197e329c405ed71f98ef99bd591a0fba8763f8ea7465dcc6867bf0bf3ac13bd3693bf75dca533a31b989d5e836667c7931b1280a05e6ba0542e4e16dafe63d738fb4c544241b6626729aecc3455e26c4757145a2692e86b9daf8119fd92b20b3145363f9559ca4254b8aa7f58dea54c4dc09175da823880dd61e47fcc1782abc7f7f9b2365c03b56cdc1cc2716f34da1ede266e0cbaf0727bfc04d2c6eb6a5b6589f336a5d6d75e27fa82300e95f5a823164fad6dab94d2f1d45e9d8e8cbd7c9281df478448d98f1e9a576290d18c38f2ef79be5db28a04e7615e4a838a1091b7560a6f22207edaa94218b498a04d0f26e0410b5d8e649ab54980543651f82d7cad01183ffc3bc3607852b09690dc9d079f122efd8da8f703e361652772c8c23acd5fcd1e4a94dbdca371e11b11af554d528993be4ecbcc2bd57dd7c77b26d27a5d73184d8a1e76666a12c086a129da30c0f3d40030417cb5863246a6c986e0d3c3e7645e493d35962291d979ddf09e8a610d5a73d0ae7b397c2b1c35ec6d7fafa7294bc0f675abf4639b8655168814929922b179ae675a202dc4c305623f01865db53906105c2c09b38c61b8e954dee1ffd0539238109bf2219bf595a99008f07e27a69e2555383e88e0f605c4eb4000fb82cb5dfc1ea327ee2d1e5750f518768edd3f19b405731b5a25bddc47bffa7822d6832d78f62249e9d497dac6e29270e6624cd93ac14f18bde7239cd04770affc3805811d4b7bd0bb4f0c8099cd19783b336a8d283d3ecf0a91c1d80d161520ee23ed1977632244c8d8e6f938291004f3ed12861abdc496f6b2031e3cb08a637f26842715f1b82e992eb195208b08af86dbcf5470e77318d8d471c01d8b32f035bc756a575bafe6b29ce6f4f17785c08aac1b88c92ecccd4755987dfe1a915f98623b33da256c159bc001891952f9f075ca61939218241cb8c1e1987cf337fa2d9440140cc39f23bb24abd206c1e7a7bea34bf55a283b9fa3a5d7b0088999584bdf1e9b7dda9ba9a73720605828d16eebe3353e8fc355beae8e05452f62381299bf412a9bcef41fc67409a47c1c49ae73f6b7cfb19e15022fc6d4d8600196819d913261e5153aeecf67e22ee0f0a2fefd5a4e394e0cebf2ae0cd0ea28dc275dae117ca1f841c29ef88f2450356a9fd8de8a530be3946d18bfac83eb18767cdf619c7a8b23d94dc8f8565ac8d7de72b49e0370a7e0c8faeccb42585b8d5509bf5ebed68e26401ed5355a0ff946c0de2ab262219de41f27d7575ae8dc15fc5055dbe4fb2b4e1ac84c36068e5210b62493c202e06e5c1b7670fa429fbd30d0e33b8f9b72c329cddca680e88063a423089833722799b72269321ab5f7af7c7724e8d06eb81637edce6c9c8c60beaf9bdc908d3c819093d872933f118b034753a7e654cb3574f6df0016ff4ec9c36185332545de68f360a2153cdde1b4592ffafeac733d957ff526243e0fcc060288738ecee3b45822bc23d3778da32e2194d16bb3b2323287a167ad3a6460b00c72eb41e5ed7ad9bee4b23fdbb4d232fd247ba1849845b72c89f80da493c94231bf511f02d98e682898f1bce1f9fb7d3c4d6e22a7abe47dff2d7bc7f4f4425722dc5958be2e5b7de03756dd22b38b677f7e0d5195539b015ffa576eb42c8849504848a170528e95865e460306781e8c2744edc0c635e5dbcf7f0f545a92f7a33a81c36bb1fc84497b6c63d115be0155d42093f2b2a93187de3a282b60de1cff42273e2a0b72d9044fe024c9c90be04ef69f8469f3441a700caa26566f5464b827973d5ee55bf95064680d5fa8d847e21f202399009d1d3ecb4d8e67ce9c6b682b50359cc81e61b8695282052da984b9be4115f252fa964e9a92c4d2171c9d79fdf0ab462c40ae96bf3e275cd00643304470c0187303322a1b286e17c16b7777ffe722fd9a593c85e68961b93864efe0424da67de94d6d5b9d6ceebb65ff85eca1a221259ade98007fd2c5bcbf4c073458265d951e1f944dc1eecb3f6d5f454293c02a5096274d90db98c7d9dd3215b6c69949f08a10638b090c88165fe1321436afa30124e9c9b19a59ec932a9d97e24e14f002c5b6479dd374b9d2b65be8cc2aef2fa9cf9ca8dd2c74b86b20150a413f37e45e5987bcf0c185b4e6f8f5b5f4b10d24cceea6478e12979fe4560ed95e1a60ab75adfb302e53de1de590654608997826ed0a9d424edd3117711501a183703d99bb4b874d90fadc69312510f58214beaa8cbbe80599fcbfc3a41583ff7bd10d43c1aab261d3370f0b6c2f8f60ebe34f342e7b2d2df9f1b208ffb01c2f81ad7e3e1b5413196f88f498e90836f4c065b83834b0b307d94cb67bd67d10ce4f660efd1ad01fd0c0711b865a57be4d8a1c783b4205404fd26e1b80eaf528582fbb1de552974f24707fe24812968bc7b3880dc1d8d12b525fe67fac8f80c959ccfd49ab55120790ea15e772b43d05ffd738f7406bbcfabbec46417346d86a5f81ad109394e8ff82b7d3a98ab1b3d3526f9fb35b7d1124e8f20e1f69a33481b6085ae15294849d96442996f49da36a6be73cc0677f8640662b8e57f4275da6199b775a5cc66d482829884e44da8441a8c880bce90584c3bfd37789a7359c5dd6e592ea06bd1ba5d4d2902dffeacedf959e1bf77481852552943a22f770790f9a613dff04eb183d08c9a1b48a60fbcabed25f0e8e861febcae846c2694a8c31c088c927cbd2db5450996d7078bf8369810fda609b75ad9d854a4dd671364e6ad5e6d4e2c006dda238ac33f04f590e5288a11eac2ff2c6a12e348fedb3c6282166e5d1ce85e9a79d2d8c95a282eff50c42208c3fb06fe39d0221ad56856cb1ebe0105039821dc1bbabb5131597d6cffd2a28b3a9c16f9cf7bdac26df7abc6430dde0d0b248f5a4743fa03ca8029ff7bbcd041568d7544b37cd3e8cb71817c786bcf1c3c74f13d85d55f862f867be24be874d31fb66b096d39d533f9bc211545409ada9f718eac5dd8b0836851bb3af7c058e89d00426d861ca84bfec2d3b832f408f13b01b0d058b4b6a17bcb313208aa4329d951409a858c13d9e269de8dc8efe106180d9dd1fdd1398972db24ef0510fc3dda93afb8f2f1e085ad9b8cbd8e9aedc43f7e9ed6d59701e25468de9c76594ccea8acd5ee56b2d5f6683f23700d5bf3d0b73afb07676fd5552a5ca55fe3edfb814c86fb653839bbd51b3deccdcb9bbdd5882bfc8d3bbf7e8afb9ec260d534d100cd07684520ed59c9cc7d2ffd52c31179bb38e990d9f0c528cf167dc8d49696f3331966b59636797b85e634282a39b86457480937ca6b70d8afac1dbf667b110187a33bdd237ce1924d624274d9677a3f6445a5ab95974741a148ec6c154b0bd3d08c30e64e275ab72dd9a20ce9b31eb2eb160514c2db140cb0d230f8686e4c1116be8df8a09fac922b319d16e2876e64f2a37199d9a19de0e132328be74c9c6261209a3aa04d9fca525379bb4a4a30fe84d431626350ab663e503a4b1b4dc36eba9a9fd5d697fb08a7277e22ab642d27a6918c98e84f0645ce148f638bda88de2814e3f1cae687f33495f6748c3d2d8862c2cc63ee08762699677bf9c059b45ab476afb405a30c34008627d8763df8c9bf4f37eaffe2c3b1a82f443640340f8965a84b490e34527213e05a77f0cc5591c6201656a245b48d0256334195d161144393ffd66d032156768dd87882520d887d1db0ce60991363afc29043469a72a2561d1384ab7641883073e604b437e857ee2f4f7bbf47a6dab85da363dcf50adca72fce7a4ff779af497ccf430fe3aea6213c398549b5369b240db3cade4cf06a3db279e1e1ed9373ca8fd95c1abe271c1c2db713864c8a4dfbbc0a9fd406edf3208c5ce0e9c0557eba934e785d311b62e9eb114dfd746c994651ee0b478bc91f59a7bfa0f0d78875217274be61a25120905d8f5c3696a2270cb4a836be434c98efe9ea487d9cf40307139457ad7a92fd176a7968b918f59e55cd8047c1963d03ea3c2401197660ce755ef56aca22a6a188fc16980f642da72984bd66d8ec660b5387b7f34bcd957e723be1203e0055b5eafaaf15bfe012e991c1a9bd8cad8d5631b2e9459b0a5cbc07929ea1937e67e1464b8c0751f66b0d946c8a7164417b8c8ca4032091937b303b4b75145003a3cca3d9f5954d0d02ba3b6da9ade910f8566c474cabb6d1ba81164eaea1fef6d21f098b32e73c8c9d998dac4e97a183cc5cda820e0f912ce357a083917224c1bc8181498a26a6dd05519211c1571600be45dd3d8f73ab0dbc5ce2d366ac4acb299b11fb477a1167028b52854916d0f097b97e6019008ada0f36e324747af97ce115c489af0a07925cefd6ee2ffc56bc1f62c4d4f2ddb8fda28dab600402b73cab969fdc0bff0fc6da242536bc302fca1ee5b77f6234bddc3d0a436d5e6c0f7351c6acdaa280b26b45d3474335dbe6845ced5f4ab32a1fe1aa54b235cae18689994ef26cbeb676e965a345ffe5240051a020c51d2be96872b014009e9089a6e64cd6797ba5c9e6a9023d265013340798b426f0e114991ff916f23692f78bf6f332054aeda0e08711e448f220063283c35ea8e87cb461cddda5955bf8480ffe1612846cacf723e38ad26db1560747fa39674eb6d8546af98625a677b7cc3f47b8b5fae79ef2bb817d96546cda5e9bf66297bf61dc3bdc2b5c5ecc93b9c8415842e410c4add9d0e950f6a42b945355fea6b5a4f16fb3deecc717b0b5e5873db91a656e0ac0f389a46dbb06f46c2e9e9b6d8ba46f7b0298c22f1afae823505cf3aa00bbc1be890f393aad21d14a369d531fdf68e2e7713338fc2d51315b6ac58d597fa0f191e38a3021939ec916b47bb1247a97529b48d7d396195d9a751ea20f8ea8c4a320492112883624e4b8f05f3ae424dac77ecfab1d65a5c72a5ab41802b345d0df5303fc65d95f5c2b18327278c8a4d94a7a4ed89dd29b37e9f07451ed2f1c6bab125844b47bd4eda51ec2dbf236c43be2760c85db43c154e020a575586af63e1145922184d65e815bb3e7c330974aa9985b52db6021e1c716d391abcbcc9af018d4f7ba5f52c4bd53bdeb52bb54ffca730f6802b3d5c13793ef7e1ccfbdd22ac8a7d038cc57d04b972514af1ad3ab477b7b96215cc52a4d605db5f0eba564942aa764c2544d48d32fd4ab03d57e16c7b8872461e45be3b184067e4ea8ec19d545bafd817d9cf5fc21b1f77575bc07f3331c59e9d2feb60a07d1205e8dfab99622c9e19dd2ac9f6f77a3422e81f44873f3207ee2ae156901f2a5e54a22370c7ec7bd593dd8e60dd43994d25681909fee007ddb73010ac53d4c6c1337ef0cd9363e7cad8919b009d26d6bf114fdf7d50c6319b8c5514492671d0df34f7ddfea658ff025aa1c7359111d10e5907e91b27623de5dff292b98266e70cdba531905b4c0ff09c86998c63a506af6f38bc6fdd448b2114a0e279e23467de9a0f923f3cbdb93a00a898518f50f636e65adfe80cddb7f1ece8aa06e05ad1c8e28f8637c51e793339903a417e961e2930d6ba1010ae22ccab224fece75ab35067ad74367efede70a9d5f5c8bbf4ed0af +MD = 43c60d1de84e34877a18f0a9da86a10e8bf1ecfbe9eca9dd7890b1db + +Len = 109032 +Msg = 9f433b56eca483829c381a0774c384e7b885d08693101d17b8585d544a095972fa1df6546fadb6ffea07814e2a02a6e68d8e1d6d798f0ff7faec97c1ace2cb22dc9ff6beea0c28fdf1eaf1bcaa2069428e5373753bb8434d19261e8a3d7061a28ef1c5fe2668e165fb07f1b9bec6d5e103fd5d06a332c3025e2f7915c55825da583ceb7aeb6aea204e8609ad2c9cf3ac34b3608877a697fc112f30cc0c451fb381a8ee9c00ba4a153290c100bd49ca8b689e066380bbc5257a4dcc16d9dd5613535c58cb2fff092bf14da21a39766267e9e6d6ff861a5764e1b2d45af6c8d2e41481b06e3ee1304cd2e4336368cac426fdb258c5516a54a08d86d00229af9b0c0d3e7feff60ac65f1c7dfc4412eef7b2ed2a151ba854c5c3c7f049753b3aba7586bc4cb51f1fd34b18428623fe8903f10178946a5480b1b4d718c61bf4103605c6229f2881cb60fa0e595869f544f1cd80c15d1b1e95205b0527cf5c1bda17a6179900b0e3b4735345eafb7fbfc7c82db430f994cb3c1ba09945eca07a3f653fbf49f8b50f82173e071ef5cb24b990f8e3eaef3f261ca86bda99a64fd7e829b707590e9fcbde51a39a1cd0b7ecc25218561ac783f6ded2a4114c84d1fb7c6bf837f2cbd6e0702b6a470d13aade8b157455e60ac702299e3386850f8eaea431e9973bb6c216dfac7c5619470cc3bce1f427763f7513a61600816dcdefb70885726f5d57cc34d3dcbf0f67f34463fdbe8016f3eef4f1fc41f44a2c485ae04f6e7b067f365a04f6c41cba209fbc86f4b5006885a0ac64d427f528e90838ef22f5eca5cadcd64ced6b7b9e6bd4dbf44ccd5c6653db0534d6d1ec65cd93f2ad2820ad9466d0a6d563dac50471180974ab0f7c58862a6728a946c247ff73eee20af9a71b7a9a3467fe17e0345af6aed0ba81498645123a0af68e5d17a73096566f88c0822ec3e6ca662cb6764df332ce202da937b91de6a064b2a71cef5051d000d4e110abd226c544202e127299fe37851b85b50ad2d3b39cb987a0fd5d861a65e5f30e194f5b2140fc2f4ff26f78d29352c6465fb9690a45abe4e9f9df9ffa45c3dcc4a0c2eca601c7a377f5fd0969f0da5233e05b116f0891a8400c5c03394877867a66b4431c308971d0a2cc19c244bb13c4b73f31a88d72baed5e5e1a9f1708d77896adc74b744b81a3226311a738fdf04009ee337e7b560238166c4cf35a7eb9055633e0fb7614bb379d4a57de73a9d0f101ee7db97b4568695c0f01ffb8e1136bced0f6f3deec07d63a0a552f9ec79d1dc4c979213448d4c75acda189da3accf0280b71fc53db4dc6212a7264615d3e0d7d068d7d4f662e9b3531945a6890cedd896cbade7dea75507b32154363759b09522e239773a85e2d18c0423a09ec007a1b7c3761052067bc70aba8964d169c586bc8a23549144cc5290414f065554a0e06c2514c93860b52271c9223c6492944f15c722078b5e1ab9084704625d394e372c77069ce22495ac90d3bb377152a130c73fb20a990032676c8bf02f16ec63f8611fd7e5ffe0a1b7d060b0d0882870ee394a4fd84af9b8003596aed702fc96b6a2a5e54ed2234de6c906afb2098287d9f47d77eb01992ff5ebed7cf4b1d83af479afdb32194b1ebbd32c0436760f5a86714fc6cd6d6ceecb07f70702a41dd5245e74163a35e678a997575ae87e1d7d66484798f9def398f20259c97b3a1bf9e8b9b912b1a88400328e0f1042523b451be1eb7afae6bba2fd737c20e914712d9423d57d42f18239d91fb9c0dec2f765f9c6a1e94b0523815fc3d4c9b6a3bbc4c9156fa278918f7a1fd4edf90810c034926f117054cac9d8ab8bfa107e783a73fa16de2e9d18fa657936220578fc24557863a08cc2a82d0d433462919af29b9f9990a77e5ae8617077cbec828bc5a22d0e1ce5aaff1dbb93b94594c9b6b35dcc4a2b620e2c90432f9dfea40ccb0db84fe623376774ac0400904817253c2adf7e6e4f748a7c911df75e56fef0b144d52272ef3c2ecdc384d84aa45030b5d9bf2a8865854fd57b506c2b6d43cac90b974947096a8d5504bc8f6af2d6789e306b552b15eadac1bf98f2979a19179cb26d18d4ea28ffb4d0199a53ac10696fdf7272c8c93bb7cbce462f2575f55386e9c5359f0a1df277c63a8da748a49f95375327e407ee635e37f68657795efb22023e1427f1aff1f8478dddc840f967c8c88bd8ff4a7979e37d187c902cbc9af8ac4638e239659ab0f4921f593d856e55038b1a8d197348061e2a8681f894af75486c286039c5495c2dc5a6bc96ef2fd498ef411ffd527a308bab488f758da512572e47248b458a4473b72874d58d08c1d916f12a5e9d6cfd5629172b1bfe186a58eb29a1966cd9f466e4f91481e5a5a744a0af3eb5cabcc6fe1296e7647c75f7de414459f3b1c4f667bdbd1e149f72ef7bfaefbfab50c61803f62c36e76f5a1557cf3bd02baab7c506cfc8e41600ed14dfa4173fa7c6358ad8426bbc0d7d117d45c3548696ce3edac499c128feb090c1f03aca3133a1777a0b95c9c95efc488a38ec42ffcd72c6c2118a2a3f4734fa515e0d8d36b75908701e6ecaf144837bb6a1a86bae585efbf57e3f68a987f4864d69bac4b2db8364f7711bd3c66699079d006653049fe92aff7b1800fa2975c130b3c0f527f887199ab44b98bb2da398a7d5c48db53c87f04a98b28793b43f3785bc9eb32896fa92b4586c7e3212498b61a241601286d1c861478d6128a0c755d6f4c273174f446ceece0cf8edbce17c54f64b9ebf375d3fde1807220b8794a88eeccab9868a0b04a4858bad207601c7ec32618e1da660b30b7abe4ecec13dac181525faf8cf94f6702f96ef8cd6211aa1f711b2a05ca2be83f0214be4f608ed2d0e52bbd09898cedc2c8d447565d5d110a4eaa109d289ded218ceade09eacc82828df70c07d8cda32fcfd409cad9687b2dc3add9ca09c80704514f934139fd984052abe2ad6c7b52f2155784515c9ab02fdb0cceb3f414fe905a29261fd38addb13d2f8823cfffc2b3a2430211705b77ba9baf378171e9996eae62dfcc42d9197e556b469289bfbb197f82c9359c139a730d7f5c5b08afa14655e006700e54134ea3476322202505ccb3fa21e3692adf043862846a42cedfbf588de332bd6295ca2dac29fa1e986775469554435d080f152441f9d6a6ae1882be4fbe3bd96a659afd80de430b7fabbc4139a97f0215f24dda0501c6bdb817378f10deb3ead64c651badcb246d449748abd067bce0ba4f556194e5620d52a385d4b78cc1760d12d38d1938c6ce4ef4c28c41d7257d5defd4c1d8edd420e58314942c108d07777f8d5dae6c50b50589d1ec7441df63689b7303b860417eda808dd757b240247c5b3b9352b1ebabd1201ed451ed151a4119da2e1b88d4ad976298a520ba0256846d8535ef4dbf371a7f504bc022ed285231b04aebabb23786f1dc076f6ffa23f77e114d6c89f3e1486f105aa9298f1701ad9e600f1206a40ef402042c1a51163d568ae2b1adb031c3b80608f44a246fb8544b766f05f67a9635b1a53f032eb4bebd96fda6011db0f422d95d89cdd4b6deed6097f3cbaa43887a92f19072ba87e37bdda533cd63e54175326150fac676da4184c883ae4b864b8c4df007af1d16125708e24058a9581378b81d321923361618601307f401cc473389aa8d017ee9b41bbfbcb5eb1892d3f414981571127ff9399b7f67e6f39ce436ee2808b20589328da93c7aced81ae7b2eddae34bbcd8eb6ede148bcc4a7e8a5f25716208dc7df2766f6977491078b977ecec82ef49c9547dd1db5bee2dfaa174d68d814c284d5e9db94c95a4e835af0eb9d5dca5e0da9d2f1bdbc093c599913ea9854fc51482ddcc2eebba2689d8333efb9dd7b5a9942c4c651da0053ae2c2854460b2bdc5a3d6c97650cf181be9acce5a4d5d66cd7e6a9c56a7e58ab35e9d115226947a6638b35d3a83bdc2c5f1828780ec55027421bfe69783756b589388a979dfdc451dc9db50228a6a6cb0771c311282a6cfc50394f4cfb93af0520bec176194726612dfb66ad56fc05e0403e494bb183a16e9ae4f8ca74f1a60c94e3221b34d3e256f01ac73fc3aa6dfe81d417721b4f81e08aa5a77c74fff05e4e2c090171027ca59b825323ef10339844e9ba3ec61c831487d1b7dd6c0d025cc51002b34e7189cfa8b8970449ec1b2011d5be1c5249295d4b1fc657dab7509a92358bcb3d9f6e47a0240f5b548c7938713e7f754073e93d2ce63f96317d5f9a2de32093beeaaeb01a5b2893af8fd243db6a8ad4011b5736b5abaff310cda3cdf0cf5dc752f1cf6b6fd48f47bb54bac4c9106cd314add7dc6df68408e936b1c893409fb09a33450c19168fd1f879975dc296a1dd1bb9ff90ce4d58423b270dfc8dfd62e9e53db404be97b6ecf76cfc514083a67c56be42e64f269939773d2cec394c43fdc45f70d7c8eea0d328bd5e51cb5e071b8629265f7908c3493de7731a3db3bf46d8371007b071ca3f1cd931d1db8c20450a992e6ec46a631bffa48508f3ca317f615326171dc78f7b345f2b43f9a4ae73547cdf96c9c1f50c2cf2d72b040646e22012178859668d321f9d8f4a9e2dee410442ae69f1b5f5a45650fe12e6ee6c29651258ce0bc52fde2f32e238418e8c189a990f4ac4ace16efc5d4e3304f91dafd0d28e6a9d6a03e9f3bdd8af7c4cf47477de96cbcb1d54e69f666c1de69ce80fd3b11cf096db95e00d7cc712b6ffb3ef3c81c96f6d9dac85a00abc36147037a3ee5c88d28080525acd1e21f47a0d46e349311ba8349474d6bec8d30e16e9a91691234682d2fec5b4c3109de74e0c29eb3e5b0208a8982a544c1f3528568f98d26cb3faa406ad6c787fd28f4dab62d9818c6e1103422f5988c87c46f76bb8a361c17d0998b422b32063f26aaa0aa7d220a3e8cd1a99b06eeeb46ead0dcf2b354f4fed07f333e536471feed48ef441a05315699ac107c1f6e0b074cbdde92deae568825a263e7b7256f436416ee0d6c093615f0e9914ea7e291d1d27da425720de8beb84b41c3bd3da815735cc68cdcf5c18479d05698061028ad645a5733d73955a771c1f55cce73c57c02619e49d09379a91da884e2a3c076a2ea9a1f4274fa434b384ea83a53906e80f96e9fcdb1a9078ec2bb46b5e8bc23b84c8623dcb3185bb3f63882e3b25d4a2a40cbf09fe800123b514fc2973ccbd8f772668c88fb5a44e691c8aae1559f0281c0c0bb48db6043b6b3ad201307b43d68458281cfb589a6ecf34649bca2213d8d5f95254ef4904209ce1d89aeb240f912ab212b37476d2bce02fa86fa03aaa4570691583b9a5ab63c8ce625f2a337b5fe8d8db24a1ace7993a82b8a25df01dfe69efd7c9634844855d4521b6643611832d40c3d9096743843cc237cc49def95430d21b8e82cd79f5e8da79492fa85cbb866e7f490232711e756288560a73c6e743d4535b8e91b645ea12eb7ff316d75982d6600d22aaeab862d83cd8064b0148314b11b8ed3183e5ef72fad344edfbfd810d089de11d2b0283b7c7bac3c122c777cac91f25295d66577f29db9bba45082f66fb63d425bc5d5675ab86d972c61595c80bf6dce5cd37b09beb017de84d29dc989b076231194969967ab49ddc458309b73ce86af33dea895dd0dd52146ea3270679f111ebbc572b9e97dca76a3bc0423cee6c65de39ff50395de7bebb44248d351aa969a230072b0295578cb9133dedbd92eb44134bd693b2f4892a39482e7da8ef98eff0fec9d646f5cda425665c5abdbcfd8c1ede10d26f275a1b3af52176d68b581b44831fbbe03b97844b9fcc17b1ef1ba46d8b2e7aa288d3082cd58e1742506f523967894a62c95da3a839dda33e8bae339bbd902b017b7c778b63f4cd70e1374b3c06971053318898a7cf219bc8255da005ffd6321091ceffd31ad617e6b0585cc90ab99c160690c9e6ca385fc34e827058cc714e344e42f79074b27518403b1d6cce714c4fbb1ebdc1b5826dc459c53ae09de1ce01136105400c0a639a0367e393dc4ebf44c17afae51b80544ff98e565a0ec83feb73a19f6e4b4e61c09c6765eabeb253b9bc4df7bd56b291da805659117965127801ad2c87bd1f0e405da21abde03ca802fe003aa701a9b4d890a5b9937868f42b2fbc3308dbccb77dd9a06899db5e3ab5192a3a5ea6d61beead050e7c864453796087597e1207fbfd92fad61b1a976a3490248d30b0b8556137ecce292d779ee74666f6640a315a240c19e99e3868e525f59799c9a9d0eff4b3d55f25c88354e9440390372ed940a5c77629bf9f4309fdbbfbf6861ca05a0db35757ff01f80413dbc5cd83fa704de737a80cdbb9d6672045ba19f263b71210b8db3f1144363afb8025f4b6f796d06cef28099f32637b32356a7a9b2975a69236e97b1919ce47e4e3bcac6c90ad869b506eb66673aac4a80d759efcd87c9626bffaa252fd30e97448f26b016034cf16fde479be07fcb20630740d73eb3c4f32b6973b6b590e6e2e525f9711e0bd28546a31fa2269d9e1b140ee3cacfc25604aad37bcced7a76477826ce71a9cb710d807df8e2013d2d24da13ca31465d847e316648d09d3ac5af44b92a177feb317266935cc339077e24ff3e7e726c2b5847084964288e78db00920797cd67121a9a400ed2ad95a29c01c9b886f709d5d94877a5573e88dbc124aa389cfb2be8356e5615e308dfb78ca581a96a26e5020f69c6a2a779530b7e01d473c207911789d6efd1153cdded57f66e39b369c75b03933c67de40b6b11a8158e08f5a62441ebb556af3b158ed06deda8ee8277987bcac221d83fd7a759e8b7da88d5c6519fd03ce0702d0175ea1440bd391c7c12f429dc0eb1f1767fe11068df34475643e2d98a3d0ccffe4e92e0f4a2e37b368fb9e4f5efa39f645f57bdccee83b0e255bb6601ceed8a78536b729dfc761523692d7a944725902dc01e4f489b0fa8d7217a1458089ae31c3ec437912c7970cf29df592ba7a08a3f4cb55360572095c111af52e19c8d70366b3dbe72b56614966c301f4073acc4154fad58a8c57f1e1ca0dba022dd4da873635865b719b487158ad02b674db3044c5376dd8648739866798f9ab05d53f24fb174cbd2dbfd3ec910300c04985b9140f2a2408d62969b2ae62b910e9f28f417c0435f5a8e98b23d96c04face5ff119fa7a02022a6609cc691402192053514882a24aec2742f67cf790144c4a925fbb4ed00faea865a23e5e55dcaef4210da0d5999288f5f29e60b5183b9e07458b63d2d354f5984fbb6f56ce50b7ab844bb13d9215b259200b38d9ac7ed84ba1fe774f2cd8bd414bddc71827651c8ea394e38235dc539af5c36a2cf3e7e25fce3f618d82a3f0ec828fae6e0724c5e5a76f9e6b29ee510198506076967da48bf3d687547ebe74e11b598c1e16939bf8b7654ac1175496d6313a807f3c480616394c536cc83033683fc3c9f1fdbd840efcfd4f4ca6140861ea07340e8e51f14ac7282b9c070113c91656cdaf64a769719ebf15d47f3891e9e941e3ed349f4b6dc6f279ade33afe4bc7990120f25b3367c433052149c718b8566ff4e2d53afec85d33a46806e2db377b15cb0b50e0c83996e285faadca84145a1ad1b6192bf0a3b5711492150192d55950943a263e122f3d53fe295348bf461dc9e131aa790b46f53731f6bba00a6d8ad4c5731b7df890e10ed974e249b095c6048c1a2d2c35f8460a635b9ec52d473529c47fd7a661a6a99c7ca403d63f4b7d543a3b4d4d5802d0741288667be2ab83d5fb2603c137b7be8451815df554af6c3f535ab0e35bacbafca646bcc711e09c62d02f47d4610c484ebed299b1d708b84f3f40fef6263e2d2b875d48b3a22fa758ad644ae9c7ed6e832d615e0fb09f8c0c67b5e08fa10050871d95b1467ee0cc3df98bb50751a158aa05f45519c8bc0efd3180fdb4b43a4c9ad1b69f888b3b359b1c6d2f37e7722f4bae5425d605a666aa066bff70473348ec0987bc82b28707f97ed2618071a61bee9049774e50a7bd9b4f3c8bc842346d032ed1ad3bdc0e6de08782f2ead786431c139af38a92053b5972bc4cc68d85e269a95c1dbbef168dd79f448b7d015ad05c9f114091b109076bd9b3e771106ed0a6e0f0b20bd5e88f662ee1d442d76ae9379c74076b97fb4a59eae907d1b4375f403d55143274cc9c159c22744042fdb734728cef212a232bac0f2552ef5f27b6c12752ec38b609dc6d51cc147f285d62db8921a1ba54c8d3ebaf3170d2fa87feb106b1e22681e976f5b5aa5b0873d011b449fbc43efb34699e31d30a826e9f5e9641389d03bfb292353083f2e2099fec481be101b609ad164dffd4c808a1b7fffa42b0c6d757ad5ab62b1e8015d4121c1e659c0029657c028180fb516b7d17096470e004ab3122f4ff0c44aeaaba70c9be90f5689ff7e954c11c124eb3e907a35d33920086355988993dbd24a8a5031ab105b1e220a73b35963bdf66e9cccef56cf38c62704b993f0a245189177c11387e2b9b15b55dbccc87452c421410b528191897d1715b2c40dc2bc8860027e34bad697aaa6501b2421ca2bf893c9c0464ec0a7bf5924d58b496b9e9c26a8dc17ac7291548397b66beddbb60e4695803d06e320077da0966c3c1357de65d98f2ed53d2359837b3206953f6d9fba42cf99526f6eeff52779e94e4094c99e12fc0cdd9cca2416992286a05bcf175f40030da9cbf0c3400804750879c1e84ff3a7142e17e24ecd7fec5ea7b766ffb62bceec859f623bfee0aaa1e3356bb4ebea24e73f452834188e040113e8a1c34f5487c87e401fb4724fe10276e9feba0274d9f8999af86e78421e106d562c0c9b58c223ec54a5c75a845bf93c3df75224024acab59fdf787d3a7f0f2c8642361aa71271685370ef184c50089b77e227b130fbc02bba59cc87e5cb5fca0fa0ca5ddddd536ab32d862c0681a31d4e4ba54a8f719b6470d3d538b27784de48b443c55b972c6bfa28471621557b4a17a055405c209ee859ea4cf05ef800c1c7e94d01aee47f04aefd8c574b4fd3aa6a6ca24345ad5d2fec098e5f19e1662d13dc20635639cdad3809d07fd2c55ea6cd1d36b3da5c58b39dce03d591b8277892f9688adffb9ace2bf9ade0667a7ed7a64e6d2268d2041be58457e444e0c72cfbcdafe8aace58fff1399f3964c3b6b58c5cc01f9f9301b169e8f51bb1ffc7c284c540fd55169abb3e460edb5c3588b8f5e4d9fbed03b42c814865dc57699bc1e47cd6495d58d27859bb9756bb44775a69630547bfc8ade5c24f14b6a3b2c5b38160ea5d222992bfe9e6a33c107515225d43fca3a6465165b359ac2b256fd80ff1fdc79941fd5e1a4563bcebea4bc4a958240a602f013124cae476ba6af5454f9cb0288e4b4896f022bf6ef6b74d0847d07fc93dc88defbb7f9c1ee4d2f79ffb082467bc9c9fcfd9d86613dce5dd72965cb3b37ce140cf9247dd0f2b0bcb3a8acad72fa4c4677b4ffcd4661f2481760d536c43ae37ce6331ca23b1fd53f4c7773b24cac741342bbaf6a6b02dc1ed95256b0614520a8b4d226d0cc1ec6a18a958ffb9d3a4919a53b35c398c996c565266fa1d8008f81befdcb6f49978bc8b62a88ee2c4bd33ee85c1a42975d27270305a971f21237ed4bdd92e77b312a9e175de4f5c3881b6b5245e54d2f68972bfb178b88772420d5a59a03a12a95ad0af7572d77289928892c1f1e4e278feeb894839d4e2fdd5322125ba6031e6b1bf39c40eadc2425027ebe114dac487c35b81872672ce2e6d7badb4804761e5a7d434f3fa48b7fd4b2345044fbcf5ad77412cd0b728857e6b487488aa463f40adae1587ce2ee01503f912ae0af1f2547b1aefc7745cb5786f370a0490e3066243ab5ff202c6c723eb17f940cf2047075f674ecdd685eaa6e9b5c2daccb473d50a6a78c530a6d994911e5d5f04be605094a4ce76664a71845b43535dc620e4035249f463c05593f1766aa36b5422daaaab61e333ac01069b347e201015bef397cbf857704a4992c50b8b8ff835f41280040d21980040064625a4bd9423f50eecc7c4165d27093289d0ff678812b8a46b4f350e161b9dfd2f7f85804c7959b29ce65bb58cff0b0fba6744ce8d82d71ce6ed480d30466147b1d26f1ccb9e537b02a81dc9a23ac586c12eea299afed5c86d5ed4a37929309277aeefe7740b88c4b87d88a72f52cf4458986e0d12ff4b4389245975432c8259eb657674e839402c48d73ae276df9ea4cb543efd980c9e2aa4de44d730d8ed0a77a691499ab0401e2e5593102b59aa44a3b2db5f9c9f54ca5add356dc4a6c720c6e2deda0df8df16c3792f94bf2978806c64c1b7833fe5cf05a1998d712eb739339aadbaa48b93a2b2a27f04a4f79004afca909a0e56e7955fdbefdac8d913c0583e9c4010d0f44e7671ffd46f2c673dc854b68b707cc0a9a3ecb6ca2e2e93329f6f092eb5817786796820789030949850a3a1e06c3a17988c447cc023a78c1c938c92bb14e5a3c755e59f859abc7e90d337f15d53f742de7383a0714bcc84eabf17c799b195ff9d767abb7ff118abd3ca721336ca3cd8e7f41ac042091604398ca0f62f0e1ae18565a802cc35fd92cda0f2862121834041788a6ab6ee0c806586a8cd0facdd0ffbadfe03fecba3d9eae129d8910c632f779b42fe446d28901b37bfaaaff064c18cb9dd4d8c44c3d7b81598790aed44ecf6b6e5097ef8f2a9b71a262d848b4aaca513d63df913d612c1b8bee5e346a11f4b65e10acb23e333b5989cb411dfd737c1366963c9cb531174451daddeab202cf222b770bd7072c4b35d83dcfc50c2e98dac174d72ddb36a5c45354f418d1a9c6767e8d9da6139e32cb37c1698a0763856ef605988bd7f73e6238638b05f28e427cfe5b48668a1158e34c5df7b2179bab97ac516800d2fc4be7a9108bfa3b3aacfa54e8f561940b2547c21b6286635c721d8b612dd2f4ce321c4d62da3fd4346ab9273c8ddd571601be3f03904e143142c73d3cd14a64f45dc6cd61611ce604e6812060f623feb9540f6b1c6a52519f835e67ea3ab04bf632b0d01508d999338619e75b1a7baf7d8603f06ed8d943309dabb474524cd05d1ba1ff87b8bd1448b44b2335df2c92e8ff627301c32d116bf873c9e1ff651cb07f6002be571180cbd7dd7cf72f80d18427f49fde1194e4d8fc8151392b455677c6b680c2ce1d044456989ca8f1bd91d96780190cac57e400129cf284bd32a73b576b219c0629c93c9b4428500d2cfd6d25d08c937abe386aa08b54cb9d7537829c478e53e67df73b0da9cbf76a153acbcaaa9e7c6510099e10172016b3562dd7fc126fef5561b5c7148e2ba6f2c07378bfd7f7ce54977e25c808fe6be71cb1bfdf936b793d1c2b6a18bdf0658c74cefd6b1f40912e99c086322695d42111edc4ad932bf885f782ab81fcc33a207b73e3354921cddd5ff649b4388e58497b066dcfda5774153ae212b8144c2f971b8bb2871f418b483149f7b80890ff47a32742ab3096f5d52d722823cd324bd79d3ef0c86749d35756e117a55c44d203d176ccaa5d9084ad175b742bee1d96c949b3275feae0abf218e531e3fd52d8654d1b923428ee288542c47f3841b719556613deb670af1d01bd7ecedab3611a565e3f1db25a58ea45f4d6cfb38ca5db643e859e34c15e306c8ed375f245199ebc4d0af38abb75d0d576b9ee029892e4dc1732ee41a494ec1bd30dae937d246e8163a39e2613eee51d1094648f2d243da73a425645e2f95af7d45301252127928be533a6ec2a6a2e05098fb7c11203edabefdc5ea8433681e6d8cef710facd10c41ee19146c892b576abd471ff11d8fcd27d288fd38ff36ad129a517bcd0bbf21255d6e99bb40e81563c8819b3f04b73022e4f702c8ed71ba10d01e9916b9c405fd1393553b7859a8f05d638447803592548798a1c088b9e3ccd0af6f892160092db33fed699a009074ee4551a71a9b62214cd630cc4b7fb8cb1e7c5570fd13c93bbeccb8b2206d5a85fdaf89da3e493e1da7485628b02387800c1df17a876fb4ab98b24dc195f06587fe1aa35d65df74ae296788825145fe704bfcaa126ad469f1d3991304855a501f721f14ad1bcea457359c2e45a9677c3030a105c501d247a2e1d9bf0758eb88a10c158445da874bad6e8ede0f23089f346c938aff06f9dc33560c98269b24adb0fe9648b42c99e91546981e2b4899c5f1525cb04cc4bb9627a29a44fec6a60dc3fc39f8748c86fb233050454694ab8efb84650c2ae57813f45a1b3bfc65e0475e77490a0364df005bbe3009dd91ae58b76534f505c3efc42deef7e3bbe353d8e4e27bf3fd6ff2773362cfc25cca22c1b987551189ea632548c3d8d299d97140fbd02b5caee871ee2ea0781540a8a948766d3dd813e382c5b99b069f22b2e8fe07c2df9ab478cdd3b209d16925a7926b728967bf3029bf1404b7299ff309fb9e9d3d11348a9b76a67201543478617e99326e5b3d6b47789ecebaba5b7749597130a168c0bdcb0cf4d329890db540de504a8e90e931a76fd46c0821681beb633446823eb5ba71e14d49e4e86b68d0322f0f5c91390fd3e5435142072c7d8aa94653621b89fd3aa3fe6ab5eac40f9a0a94156ae4b36247796a32dad44f0881ac25fbd377c4128fb5a6aa3f18ae25f8d81dd13c03ced59cacc775450116497aec618428ebda86eba6c47cc2ea9028872b2ae7426701e62defd99d131638acd0da77a104d063c6d8e7e676f3e900a3df5459ac0096f2f085d31f0ec79c1ccf1e06d6c6e9ddc65ed2097b1d348c76044c1418b4190bf8a13ec7066ed50b491cdce20d5a3a6c98bb517bf0d4275d76e657cae683de4ea954b35c3e21bddc3422780c99ff88f54168e1cfe6302ed479a6acf9419fd2c78ba78e0314dc0497645c89d70b1b581066e40d75d9b5cd79f4e1961fc85c991ef606195c38d22bb550378ce1bf322a365fb93efe39e985b68f13cdbed96e93bd9eecffb808b895ce9e4febbd44d861efb264f0d9952fea329eb99e47033a451bdce8aba702f3f54b951240ba2a72b1950553bd885a0d6d46aa3f9258c4443fc24675a7b9b628bca4db0b0678ee957bdeaf120f9b1706719b483234549b20e63952107e60a0ab4e62e6a6b769efb53325363c61725abfa988df2e1edaf634daf986458a2c41003d2e3e81de1dcc5679f1312f5dbe837d7798058f9c5c7404807b5981658d15dc0b3f4918e4f5030da2cb06575ec01fe46e5121e347498314794752509af3ad833b4eacc85690122f603b4c60df47be78f04cdaa5aa32a1f917d5f74f9500668a3fa4c03ccd7f7840149a79c87985bd9f9fd386533f986f06febfcebaee23df75ab0a29d29403a3f44290f4ea982abbecdf9dbb7861fb38e2906d2f3ef0ee86c9efc7502654cd33907c976463c5a737d541f3f091dbcb9df07f56bf5867c0daeb8064b9948a4c95c925163eb07c7b9fed398ebc1be79a1cd50e14f5739d3b7a7f0f7afcc99f0248f2cea5fa5d4728729958b674932fe723f4ef10483d1bbeb3e8df7260222d7ecb91ebcf1dc6903e4e6e1213c0741f2341c474e14df16deb35bd92d3aa4a9022ac4b1eea1f88f21d91dfe81f165b2fef04e841f07d5cfe116e61ac27218f719e6972aa8f7610e746cb635d50ec94fc9adbc4d8d63cbc66f1dc899de56c7d4c3261ad4147c80aea5a799ce421c9ddefc734eeac0b22bc12ecee79ea76f1907a8f435f657b7bb375c92ae11f2a248283e4aeca2df7b5c89c6332c704844775a7157d0d79c307b704034de450d2832f5383b7ebe1347c6e6e0547f59e75e4793c658d3c009702922fa950fb4ba36c30d914dec86839dd19f2437c99fad43f27b4efd26f9c6fe2b1532bd2aa422556337f2891e425805e57e39e6f08bc17de1dab250b2cafc62eb118fb5185e6d0c7a3d03f5fd3ab9076a49c869de654b947b789a595d7bd325cfdeb984bf2ac2e470e56b9c6fb6cf2cc8c978c67975750e271cac1f105372ce41435932094f4964adf8d3835dfdc1fb67c6f207ab0265754f9093aab49b02e5a80a17c8dd172c14993de2b4b058b8fdb008dd345b5643505a9af5022f9caaf36cf99a4d22c8907c9d7e41364e0fdcb80956e25371b73828b0037b306b9b937ff4d98bc9c2ab9f251f819711216a54b6db79a96ed46e6c84b992cc3b4ee3e411aa719144a4088196890f8d4d10b0497f8f3ad98c6ec306ecdc11912bc2bbc631f58b55c7b0275e5741f0cbf3022be2998b5f1ab626fd2ee884467108ae6a61683ded7e59ce4f5df1b1ecf80be121488e39b016f3e4660e0116fb15dbf939dc3deb60b503e6caa6eb3fcbbc9b94dba2e600f7724b9044cbbefbf624ac8d70603965aca2cce0de62cd5554c1ad03a1192747fad9c613e090a89b004781515714e21499ecbca4d4b9205a50ac4816bbd5db7882f16d538283455ee026642d3521c360ef3cdb1bf4d26ab6882875b570fd89fa5762473972cc20ad60685c0954ae61b27539322b85d636d0c1db3bc809baba3541d55cadf794beee46b571cdfae44670f48cc8bdd1ec0912c66da237ce33f59108f2b5985a03a98b5bb7ac6270ebf90435dca5ba1e3d6de35e87b2ea0791c276736059e0e44068ea671314aefeea02d4fdd2d208b5f1e9ab50d174c9fcfba94c4cc8506fda7483753274b29aeb09ea4a17165691de2f06d365f2efbdf59a337b59d1a32b87c6829283808c0e817237cc4a4f393be01f4ac165932bac3995e76b632459fe325feeab23dfadf3064a74c45d2584f005ea3fde185b318011154e8431687acf22664f27db3a1a2fc3bc269919423e9793b86d9245f3081fc542ee2f8d460f85a0042b6e7139dcac00edd7b3464b6f18d3b05b46b602b8739d4352d23d661f0af4610ce8ad83fc5005080e7aaceb1f5b0dfb916031314a62e041ffd70a6fb24566a479fd59c182051933545612c8574789c0974a7f28c5d6d8637fa4bc0ad01e3ef6fb153b9a74b2859630af418a1ec68e28f66a688e31b6cbd258a31bde827dc37e19981db7dc3f925b2aed02da7dc0655b352ab30b97ea02b5153aee94cf4a3e655beec5bfc19385a7ca781b607b1b5780dcf12a49fe59c5353bd3ffd3c06df7d2497ffb5b2c98a9a599b854c320c0aac0732693ed6eed5c7a54d514445ccf36ee6cb389332435457a1e1677ab7497a6428333b7a2ef8d0eabe8a8f68eab5643e04bf336eeb152a051e1f84ac28088952f937f5e0e8a2124f17db46d5ab5eb65d16ea5c935dbd803506bc797ad4b7cbdae2c724fd94692e6739d6041508377e6e95e330bafabadb69f43ec2417dd5968e8d57454ac2cc69c5acf1639171ce00c4fa203c40528ba0167f1cdb9a63f09dc0416ed332f42a68ecd9c3e1e588810202cc27fbbde5be72cd0fed420027872612b7745b509921a04f58a3eb8bad0ed69a7470dbae34a1d7e01f16820d4907e418581e4a2e2240b45f9237fcfe6fb6131e9b81787bcff42402352f080c49014c239bb33c264fe5f9a02ef692b831153be1a9d04eb10823fbb5daad609797f1b2e70ae98dd352a004b387565933a1baa5a607f3cae87d9fd34d88081839c657dcb51e07cbafdb0d4a0c23dd9d1b31f504be6e42798ca0e63f6bb5c59b6d44b21e205db48226596c5e0c9cf2eab95282cd9d2572d71812958482fc6c669ca38efbab32762dd14e6ba5574b4cdea893b264e4d5db6005430c6715c4730662634cf9d844a34b3b4a89a45ec731c56366226f07e802a0ee92d94ba6966ff738f47a9d1a0ce246ceae24ff9589485b645a414098e47f163eb27aa6b7fac9b59ad7a659f2e3b9ccf609ec0b9e19f6fd35d0ad8dfa43a73c70027f0ccc5a06ddf29d4eb4f561703a5bee3d5cdaf1d4276279a5bbae9e21802d0344e2464cadbcfab5d232942ecc1b6abba767ce99665654a5e83e485c649db0456acbd83b24ef0da1ef67517413ecad0298b0fb89042696f5e39a49f6f6c1c4495f2dd4be12f095f1e4a7a009fe1a9d53bfcce439540493ea166415f63eb8b37fa08cde4dee4e3e1660981238d141a61f5b101b32cc7cf5e2ff004ee2c2cf1868cd6d57531d74609fc19d2a8933fe71c6193f02fde3fc17810c13574529915d954443c26636ef97fea64b5b839c8d6b08688e3e03110e8334dbf1c185b98c1d6583b4c21fb13c6ea38d0727b0818b0c26c7921edafa30c38ecd40003d193bb28a2a14b8b812d73f3ec47501887973cfd1c4ff37fe05ef52ef8e72b5d3bf1cc753a60828f7d24c94110b098b73fad44069df0a1be4baa6abe76dfe34d221abc66265e3952785f907dabf29382b6c38e88f74673d178f0349070a671fb0d7653a27085b8fffa48904ec6f7869f763fe4293338b0e1ef961b4bed231d90846d59d220bb46bc8946905d68a6bc36078b0c9158ada2153906e798f63e2e340f67959d3cea2cb1afc15a5199e77c70ef0dce696e8f8f96dda6601e92dfee0e37ccd0accef9b308f321b4d361a20d74b82ff4597ec5c08b63e04e86c9eea3478304d2a6ddd020e6ddcf678bc9bfb86be95844088e377d1d541b7877a35396067c7763347257be75f6313b20d827c57d0bef881fa9cd0e7436bea79a29f60f74a88d4bfe9476d4ddc5b0f73b97c07cd1a55e8645d46fbab79433a39762c055b991af51ab4b15a946d3b565830c7324903f0c07231905ca0ff3e134155797b2fcbf433fe39f1c86d7a6a64ba1412907e16261d2617f7786a3dd3022bc0e656c65b9b3db509973b3b8c8ec723c3ec86bed94c5b1a60ead369cd98834359110cc1e0765ee9840027812c1f0a2fd093999dc60a06a9acf8f222170513328e8811a4c31c33f639db21d0d1719a28bac65d9d54b5ac6e6c906925b28f3e83c19a19e1abf33985ab669e9d054ce3c902f337300df5b8d3205f8cd718cd6181a2e57a0ae3a1fbf2495102584ff7936b1988aae86a30c8725894f1c8c21638e6a2e8a67302aee7d6a42901a50a1815998f154d38f1fd37b685ff1c7d4710011d322243cc915089ad4c3cf0d5dc14e6ded42782a42dc1933a38fc81670031668fd110c67a085d5de0922b749d2e7483a5791defbc86147757d1fba50895f0e5c91032a30df01bd11b2672f15d89cd7877fe86e8e4936c30a9e19b1bf460e4eb5370166deab1228fa76981eb89766631e0d4e102aece4f7baaf8494a9d097403b9611a8bb2f3e7e62febf6e7b36d054c5a8ccac19d9f2494c58694b574e824bb5573ed80d90102711f2e306a6de5f1245f8682aa139e8238a40cfbd11e958d6ed218dde1df90d8bcff90dce81b69d0566a62c720b344fec3a10bed41fc99f4ba99d08a23390bf1264bb44ae53e71195ef5a206c9ff1ae0c256f3f77c815e211b273b60d977dad2597e1908e6698432baabb4b01a4998deb1306588e55f6a690d04a9f0590e95f2a3113f95600f2bc2d5d72b517645374f1cc7d13020e937530cacacc7367fc5e8bfbf888ee6a1d0305d12766972548ec86177b78b93b15d6596a9c444065dd31aeba39443eec40a019ce81676a309f7c12bda88e9c24a3527376680f52cfb560fd397d362fcd831cd31c28bf76cd81adfd87ad5d93116670e6b7d53693f0ab74de3f6d64a7570ffe9a82c576a5431606af3a32ed874985b81af58cc0ea0fe8f4bb93b1d88fd00cced5c90095dedc850f90a1de475e1529b278f835b53e739368fbfef09ad081a215eeb9802208def75009835a7202bd7ae76687771e7965d5580648d2b050b2f7594c1aee280d92935280a74d7659899fde4d6cfa02822dd64d44390124f9ab362557b4f1acd440829c5ed6605c4dc0c11f966d67694113bdcf1d9822feb2b385fe774f32b84530ebb60cd83b2bc5ac0733a753665b9e5fb364f92fe04462130c6e14b2585348a9f729f07585eba8939aa1eae59ee18158df9640c4e000f314f5fc96a60c86c5f5ce7c7475e7a4e0bea1f1c5edb802d2476aec5a20cd394cfc653165f3f658a45a9737ff9f085f547545aca2315bc779747beeaf0b4df855138693e961bdd1cd217be3f8bc9124ec00ae59e87b30365e273b25a74d0844f6a380ac8bb70af92991a107c99429f990a60380ff91df5a6aa8d118abada82517f27b04b1bf84d99ef4312bd9ef79e828b06da94f3b0f38833e665021f4d2a3a0499e21c53fd478159055d7909528f89c66135d404368da9233225373ea30c779f0118d2d00a1de77af3394564edf31d4101e233a70944780cd2cab07576a988b2ffdd053ca9414aa97f3e993e1469cb9f6b584a58938873355addf4703281ebc4e8a709d6555219890be5faf17044031600107e957ffa39512cc789ab61162f594dff775988b0d27e4bc7d12b8c226259529346ea28ea28d4eb2fd6737cd6b1f4b25ed422cdee141d914cb258c27547ede56939c31908c024f86f6184f054220b983d86beaf8a4cdb9efd14e5adcd42283b0addcceab69de5f71ec14c661ede22622425a977e5eb3ca7418f6ec88aefbcc5e09943f874208c49b66c36488764bdc29b276fe1b17db55cc278608d4e8f000892f2e4dcd1e68c62bec8df023e44522c1b127e675d82da11e866477688ce86958a810c02506e6af4a06da34d940b73f12c6d51634a891f893befa00eba1cd4df4fba46036016ac51f3d12f65391887c4379e8570190efa05356af6d063086f584b050f5a917dc52d3189dff38dfa2217d52c87184972fe285d6ea856040fba931507e462550249c8d20e3173133ec76e7dade2c64c5390651c6150fa2d914b12362951c53b52aec76db4d05e6944ec2aa9890504922f554e0af97d47303b954816efd3fdb4dd789b6d34193fe0ab04fed1447a4ddb74b145a19d89c7cc7d2db73fc1d77642111bd74902887229dfa63d9d76cf1c58b248de78a402e642c478e23955f8c9637c1ced8986baaf9561447966865ffaca66608ad8c3754d43b00b5b6c02a451b99d0050b7570c42c3ce7434b4f9c963811fbcdd7a625d474fbe5985706e76b984f24aa35afa19d6257599e2015777e11d3c9248b617277eb74df7f2ceefcc6b85fa7057dcc65fc44b053a23e41607ee0f4ba55f1438605e2aed4b15d00d21e20d33f5d0c5623ab794ebe95cd5bbe604d7db5a733d6c94600b2ae7713c4d13b7bb2d6fc0ad54570aa3a80c0f4ecf9eaff75a16476a2a402ee87531976c361e56f0553289ecf32147f7a836bdc7b79e59fe468d2e52e7d005335addfad84ebe3a4d39e2af0ce525f +MD = e8ae20b9c93daa47ca7c9aefc423be7453e4856d63e774eac8d32b42 + +Len = 110192 +Msg = a9567df28aca233a403d498d3ab6eac67884285240259c371366ea55dfcc98ec7633205f3fb543382bcda16bebbc87df612c082a54144f9d67db33804cc00c9e3579c5058b1a3307e339a5842e50bd6c2f627e7f33e2a557fcd03da9fe256ec8ce71966ad7c39baf4fc97f5f69383473cc6eb2d84557486fb88d2f585dc365702863b8188976213956c55485063d95ff1f98cdbdf13addec85593216d1619aa02d9756970bfc70ace2744f7c6b2788151028f7b6a2550fd74a7e6e69c2c9b45fc454966dc31d2e10da1f95ce02beb4bf8765574cbd6e8337ef420adc98c15cb6d5e4a0241ba0046d250e510231cac2046c991606ab4ee4145bee2ff4bb123aab498d9d44794f99ccad89a9a1621259eda70a5b6dd4bdd87778c9043b9384f5490698b55347f0963459d8c532fc5f228021004f07a08207672d1db23889de3695f54d0fdbec4ca2ae1142ce3d6779c5c7c0c51a5f78671bec6230607303eaa499fef3d463d02b6641bd10ec4b0a28e9ca6da0e3fac232b90eff4c37756a6ee85c0ad32b745b5589f5468b46e34f34369011d8d262e7ac8bd6edb75fc52733a9e6ff363d95f591b4d292f8058d9d64562192b6111e509d394b12b9ffeba0019040c762324e06a88fe18aa250d15d81ee85da82c5b664cd6b75579c3f703f9f457148a03127f663c12916d05038f553a9c4cf8419b28a03c85da4a648db6bd76f816c3762a92d88f3b21fc92d49cea22ce75b03339b2c09f80ae22142b48b6fb6791971ee5b14dfcc858bd60e8d503622f665493bf9b1a5a484f75355840930c4603994fdc51132f5a9443f1b8ae3d731f7d49c5a5281a074d4cd85a7d14ce23e3eb3e9b6708d471526304c7ecaf04c01f49245b73004c10f014bfe6326bc4dcf1b6fb842e3f1e7d50539455cd5dd5e3bf4868b7c1aa2d21e135808af08c1381d005549c9a6a3dadd4d4671e03114d5870098b8ce99c3994813dee9b301c36dd0f44de372420de8d4063e192f68fb798c1fb013d734cfe03608c4ea99982ab291003fcf653e95d963390b857402fc11f359b6e3bf732e6d8ffaf25386565ed0082b1356cb22a57431ed94fdd5857e6763b69271aede4808fcf24f6ca4c1c78fdc7db1becc77a482e72ac1c97a7be941853f2d05cbfe857b25f6c57c1b63ceb6b5fe014f8fc4facb2cf87a308c6ba46801fb6de63e5a4e8db1113bcd13c4d90f3db7ec533d910e17a960a77b33de19a47ef33b5e307a090549489aa5b36a526019af5810fd674a2e056930f3965bafbca42d80b3c9e720ac94a5c84d23df9f72f4ee2fcff8cc15d8e91cfdddde6ace7a1db3222e3028f94a3b2fae0d8cab2a0d747d57d8554bd7dcfd7ff7843293dea48e8d0b178ec5fea7e5ee342c165459f84163ba733d69f903e89d042fbb5f4703a2c121b60a47958a3beb43f4e86496fd04a83ee8d8b0e115537b0d25a155725fff594e52cd3528bce42dc1ab2b6348e26555cd7e4da7f8dae523fbaf0bfec5804d5c7835fe171e0689bc989a06d7d6700b714e7fc5d6a619479cb41521e0a92d35d389a5c676df2ed2a1ae09a24aaa6f9f04a83167c6549c20ee229f0d8587305ec568eb4dd8d3fc66e3ed4026432ba7c817c5dd5cfe682919222c95f475c54f723afd4fbac8623aee8a3b86bb4bc1e02fb08ccacb064c89da3eb93e0136cd53163b301835cbf4ae119f822589e9d4e17cdae542dd6766840a4db3e359520503f4cee990e86bf1217829a963b7a5cc73569ab88bbaa820e1515401cc2751d729b4fe10fdf92fc15ccb3098896e07125e65faedee8951e16a595d8b4191b9aa8bfed08da8909fcc24b1bd37ded5980c6a52016db373eb10e5c76f398abf14e5f3784e48d9d6447a44d2d66eac15df235ec5b71e229ffd171b4693f3eedae9f227cd7f2ad8f2a53482d78625395564bf046525e983350f5dd47cd0a1b60ac138efa36b19ec0d4b60a868d244cfbeb04922db52b61d5fa94ad7112e2b2b76231f15a31bfe5e4fbc687c2cc4b3b4784a2781ce476e39435446eeaeb5799247970f5f7496c276df82b2c7cc635a30aabac3e9e70af71f0997b9dffb6e7336a4a57097bee44b7ce625a850efb7218d7c898422cea53b17dafb0b739f60025eb6d6aa832b0e83b88b2bb0e13ec9f111173ed1f32a1f2169de07a47243930c51a5b125ec611b5172f71e344061a0b006a3611425a481905c3c43eda48e107a5898bf4a9908139cf151859b36ff4448b2477bb480e3d272391d374cd129de35bbb7867f54c9ff4e7ec2e94d8bc0be9f5e2c1319cc901aae48a86c2ac0bb0524c22b902de34ce64e6172d1b2074e159f517ab1abd152622cd10669f03aed8e2eb51c65bd0f38d084e288c532724e512fd558ddd257d2b1d41c5eb6040767803ddbb18b95a035c5d8492d4d35936b7b3630ee20f625b70f8e71d9dcd0efd0e3387d138c1f5eedce32dd88f223334b9a9eab65017f04aa8442179f62babad0c006e36af0c21105f27ae7c23b641a96b64e8ee509d5bc5319d857d7d02c2f111e9155dd3de580283a98af02b16010f5d82e2195be601559d53879a9af8d173805c01b94fdf274fcac747d71da7fdd0f0626ac9eaa88d765c14ac53e85453af07d7b7cb8b750b52953f79937412a488e4a1e762855b6c91ee3f782beddbc60df8faac171f4670b5834074a7b6bc71b17acfec85a4650b42d4525fa513c5951ad423633e63b9f3e31598dda65e2c01c5533aeea5c05c06039efbd731d2c86d4039f0517401460155bc9728f1e2d7b14ede71624571a6c95ebe7a8364d34abb389ac00b8a60712597f8c9cb2ced462ca8ad01fbe730ebe1beb37cc8b07dd2eb4e6730f5d419d1dd244abf58a9c5fdb08d2f7afffd7671cb9e0e713b973ad78a0c2fc1b4d395de948532d6461b15750946d63af30acb0f03972fd640abb2ef13ec74d0ad1b5d0de83531ad07d35442837041c0899196ea1614a83a6c404e801589b70c631dd7c654aed7a23274faccbb93f2ba082472b97fa1080c330796211b4e66d35b5daebe467c95644a72719a1e2c59761335d6e3acb6cfda2963f24871c514a41a5d4a5c5a08eb51b45e612127a3f6832f384c0f29e04012b3e81b6cd558311d148f2306ebee4a09049b420864854a7fa0ce4a827398394466f65a1492a25cacce75d164989751e8bfab8c96515ad5ba3c4a4ae41658fbedb73136c6562df7b1cca3ddfbcc8e637f4a21b9817a9f18c1464ed5aa8ead088d290b49f88c4582ea839b9113145e2f3b387041204ccc9423533e635c490f0f9130f70c2191a39ea587cf9360fc60f5bb0f19cc19446dd86ee7bb8c6fe1f941a87386e5e822a29b814da26d5be141576d42a0b2c30ded45f27828a95bc5e66f11452d7fa2abdd19fc49d6877a6f79d4d057978db3e5e57d6c892852b67160e89a3a7d21f799ad9a7500be6a32f364fe62c250b57288c0df2b9f1d00f680f34e71d7d8854d78be8d8a06dc9e1c19bd24b3277ee2754309fbbe2e795c925117f15681d2121ac56a63b9d0a38b9c4eccf84fdb746d32c14b4392cbef9e208e4971a6ecfc40e60c4bdd72d2c5cb4a0f2ed97772d3ee416fff5757dbc26e1784f25fe15da99a45b9dd2b439195d59bd75d58e8720fbe17cb80976bf2b444edd1cd1c94788c96a06a990dbaa1a6231833d2e7014daa852c5089a44d8517ab29e114284eb1f7ce9c7af9c53667793c35b11a14608a16bbf59b74de8b277f19425f72137e9e8d9a70779a12457781997abbad6174abe6cb1a08dcc6933e4d17cd99515e8292b092e2fcd455764651c35dc0174ebc279d4b00252bfcf45e241f222b5c7a192303406a57430f37485c32657ac24cb5819cb42e7cdcd23cfb7697f681dde690e3e80b5d3360b00712137f183838dbdf4e878f1b7c79f6cb8ac72aa13960349859e18c51fda7e874281a01ec75058cc7e2c0444da08ddb2ea0984fc8be8de47dd9922bef32a308ecfed25358dd92cfdde2e97c3b8582efd4c16c6fc39db166eff75c726b6ecca2000adeebf3ce7b25afc3657f7b97f3a56c61b6132833754c3d37a2e87d0e9f342bd0824443b4291eac08b6f674644aac4405f7d26d2c33f5041f28068a9e954feee48ef4af4b272b51377059cc5702650a22b40618f48801c3223e452a9b4955b7bb3765bcefffdc4db40421ca0cb5501d4c7d56a208ebe2f8c5683cc38115d624c92e2fe31f0d91e022f4d713d1de0dfbf7b62c9ef5da29239d4845ebec95419492c5abc854fafcb6e8c4f22062e6ef2498f1007627dd44c1fe21090a3a4238a5bcb071b33e226d4099f6fb861c6a8435b4a06abe3b5fb6528cb4feb4f6a72bd68b511a5a172e740b9afd6bab8ac36d9def56d3dd9cfbfe63bd568f62ae3e8b859339fe238c699176806abb072a9bfbcb8d86c45ac91cad63f4a84399dd72e85178dd95960a8e562fdea1723f785ebf5d33b2c4cc3c4c13d1e70ca3d0e0dec2c890be89282de732860a4429aaf08648b1566d4d988304f23bf906389e64ec9b396f5f4150431ea71797c539d02f9cf8668a08d75629c1a910af176a68e626d242892246b5069f34530b972b45822d7efb3337fa7b9d1ca8ee7dd2c1a6c118186262ba11bcc4e35ad6da5c968194922cdde65d1f7f69808233e9aad6fea23ade2770893ade2a759b018867d40ad375828d07faced7fb77c57f771202c6f5f983f057121a9f93e065719a5b9c57cb4220873c83712bdf6cd32faaaadda628eeba5b7ae739878d9e5a9584aa37def882876ae8a9bed181fa3bc2f8d7e002d784d1d7506b202c9419daebdbd63f26c7a1179690bff07f9f8a8fe7f62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd07086d5e89de160b52b96637e983bf29a2b083228db2e60006e6914e9ded9c70c000e93a867623b08878b6bb2167041e2b83c0b36dab153abdec019c879565f195a78ebdf0d9248061e0c0e57811f63ef31e7c2f018b9fb762fb67bcde6a0cee1c6ed62f5551a8e983a42d2d5a1ef61abe130dcbd5cec6149a775c45eec601c4a8c95825208a215a7215542953e8942fc0f40e30470f28c0d90257be5523e523ef397d25feed1e6191c6ce3fd20940ecc023e5f2f1a7484a830ed29c9e1e177a4441bda82ce5008d873af3f760eb9cd020353d6a5231a5204d0f6557261f29363c84b232471c683ca6e47dd69d2a088865aa7d2ce538bfd08b76887489a18af65c44d34aea0dc60d9555c453c32f047404f61da1271708d9b2f6a48b353fcd19183499586213aa6ec6f150059f75210182aaa77d947700ba77e241e1b564604cf4c68cf16bc875dea059b9526e96dedf632a92f8b9b347e13edbf94e8699d4d0766d169c53b6c8dbd5f168c0dcfeae5c2b0878d903663eec7c4632f8255a9b6211aaeebfa64903f4cc5ad6e7472700064ec6b1650e0a663aa4b377951e1134606b024de1f019c7b7f7f88c1c59ba847c42e7e543460a5e6a6ca64f9bed783059c705dc99bd837473ed4d010671039c1cabee7cea280077ea28811372ffda0fccca18134d6b20aad710eade0c29acd775fe3cf0c0306753487ce67bc0d1d13327f8db7a73856bcb4007346bb3e00096f69e75e97c0bb960f3be48e0fc1fd83af9b7a28ab298ef664d34cc428430c97b3d110bbf63f671317a712adb8b166997c09b1fcc7112060c6d3e04eb039841f4b80a70fb1ead29354b3a0ed40471ffda0b27a5a8458d5a1e1e6790dd98831483d5df3815128c3bfcf48d5752eeaf256237d1c6a69667562bef55d292e98dbbb934f3e3a5d60043f8f4cfa6e0a01a54d0e51e156fea3c84a63e9d5c934d249205540ce625dfc5bba9ca957ff5df6018968180f43cb789502daa82915759c451e8917ed20d96391d8ff453451ad30ceb339b9ef5b594ba6312b1ca136785f955d39bce19c5afd6e42bf0ad98b8517d4728a1cc9c62f85c1805c2b8554c58402866c16f2ff6732b9a0e4de8dd66a13da6f6229e5acd58faf9777bf1c96e57154412b0f6a71896a3c9977ab9a5ae68caa51c9c88a34d4cf381d83bfaf255f9053357d8e8f19470dbdd67e58463e80ea0ac1c7e10286b3af23bb89138629bb48c70b6a7cab20298305ff04cddaabc195c367655c93cbfa963a1890a3e9c98200776afabf04adb734dcbb0ef29dc82ff69deaaa21862b32ec43dda057202d3b222cfb3640e2e97a8909b2a6afd9be54735ff39f1823cde21807b1c117727e6e15ae6625e78ffcf9e8568dd3ecd4b4b875d3294a2ab1da92844e3dfccb29e4a341c552cf9d520dbcba89f49e91d8d3e165bf35b53d7a79ca97e028585b8b86630e39673d4872444c686b8e0d862b4259a9ecbee83ac4d313b9841bdeafe18d35e4d14e76d138ca3058c4042bb3152aa8ab226de90ad810f45204be95af7220a22b56af8221ecc7f0f45cfdfd00e0b354d128eac293fe57f6ca26b885448868314b91316a1fd66215a3fa228d56d204e785c8dc7bbf7dd09f8ab3b2b654698d6aac477d35b23dc426cc681be29b3546e92ec8eb1a759fa47af8725331c85eb6d5b6433bebc46b15abd96c8f04b94fa0e033f1c0a99daafb0c7d2d44fd89af0bfbd24c12953ca67c2d31cf27fc96693b56fe0b032f1ee7fcdf82aa2c227ea4b5636629aa3a013721333c588ad11cca3fd2f6de5cb5e29ed07a6db2b4a98e85dc95dca3ace2fd662d4562d1608b31bcd3dd83317142d0179e65a70d8499a399a71a9a82c095177ac8eb0b005333bf851ffe0dceedded0998f29998343faa4293f790a8e8d5c37bd19ae9faf09cfad6e4cbdfc7b7691ca6dcb4daadc99d4787dcc3a928ebc3e4575491586a42a6ae3bf82a2b901b464a6dc795941df303009dd75e69c4cf4442aeb7fa928a85f0949c0e836aa28515e4c2cc2d5c856ad153e9162048f8ede75cc67e4f0ee8250b6c7b9a70038b7f288a5a5cd4aa607bb8cffe0bc1cd31d22d91430a0743efca47845f1e688cb7841e89791c34043ba009c3414abb6d0c16778ea90dabd81dc0358abb1ce57cc31e6890b36cb3d0739244dc573565bee41555b37cdbb5120eb175ce14187f4a1ab8970eade0ecb5a4bd0a79b46e69295679589e1306aba81f1858ecfe938e7b4aed1a71acfb371a4b7acb39cd482e42df9cf0ad2010f800eb6f8f65ef10ab96c0266358551e3b84d465f78b16753d81ec0aae7f088d4292e01169b74a024f1306ef12211aec626bdc092fec34581f6d084cf27250ddf3f489b8785fa3fae176abb1a76a82c83455cedec4eb8b733c6ab0de6d258d7584ac64df4bcd916d2b481b1883a3115439d9394166f7a0591d1182296f1712f68d00fdd0549f76db64fdd18e47694af2db4c87fb769ef77c49e7d8d878a575d375b8b1361333e8c8270e6b8d530b9436a14647478450155f4b5431462a8f4a9ec72a2b9b18295ba5f9f0459047288182145d03c010a97e6489fd380cf502f5aaf9ebc959c3ee34175659fc21843e9787bcd739ff9c09873e9e39398758cf0baaa654171cb701267eb491fbcbaacc4a9a036b4640870ee44ff09ed26fd631f0f02529913e5200975e9d4ec0f92b301f4b708fd55d72180a1b19a48f00edea5a2e2ea2c439354b0b2998c6e83476388a1e8c9b5380edb36d2271d0cc0510368bb70b763cb7d16ef6821fb0ddf82c141f85d0343d655a6f81e8a1aa05c6edc51a2d440a4724a6daedda9a932edead714413b3d11f7528baecf02196e8c0c71489e370d58ffa362d55b5a1d437328aceac3ad008662b091402bb6a3dd1ad3c836f8c1a7e83b2ffb4c285bdfaa3ae348a9c7d9d30ae115c1967bcf3f55cc6deb01f99995baee9742fb8cd577cd0ac4b43b95e73e053a2a21990674763e6c7fe293e6e85f38df823fcbd1f06e16ab73f7867500c9df3696bc2f16cecf01c0b4b3d20ad58ec9d899f9a23dd34aece4971974af4cfd019d019741f105d20491b168a8ac89a9d49f84786a1aa796b67ed823ec8af261d13715bcb8e04007b0a62109fc132b38c3feeac409ae93d7de42e01cd54f1a7eb8cc77327a2ba7f76dc9aa9cb588e4c3fdba73e66942c097cbf5540c1947eeda1f23d201711a6329a4c0f42bbd53dcd3ea9ec8e5701d565de562dffb9fb793ff6c05cc3283f59c25bb54a8bdfbbc3aeff27191c908897cb2945027f24fea3475093a0dcb9a0379741c4d6e5b570b27a07dfa759a18cc5a1d4086d4f81127f7c25c8a3ed79d8d239d2d73ed0cb987ca6df3021d61872f192651cd8f16cdb50470cfbd075b74dbc228588eced809794cdebc5131263ffae1552fed00536bdd8407c89a0f6107357d9e0465b8c72f29d47b40af58ef2775d93342aeceb7d3e79f0db1eafff03ee37c8698c154e214df8bcde8e43ac627e82a47f3d8a14aee1b7c0cf1757e11012ce8687e6a4a309ee3985b1ab780b2279afb19a8322315a2c0448bf00335cb385ae9cc1d2841b9b67c24ad3ff2d2bc0fd47532ca85fa1fd8201e13165ccc26cbb3a63bddc3e28645f4574cc05bd7eac7dec019c299ce707981332bcb47ea2aa280483d2602d49e319158bf03bb384638000356f73648116b2cab5b778e37e0a508f65860aebf0a649c508e72d99dd848826772d0240f099869ad2b82f75d4fbd95d916f38f4dd0c45c6642747faca7e0ab13f4b72acc60e6806124544b017fd06d19fe486d24fa3b1bc362707310bbe9c42f641312271f3fb8f0cd5551ce79c7d9dd98c510ec8fb01f8e76d07e6f1c4915e54b4ba2c74d8a5a82aeeed369448b214d6dd3404e980ab2f007fb6872d3eae65b30c9a355f2afae3e5085977de8038d9204dbc4f11c331a119c59f9c0e6b27fb99bf4dc781795fc4d3a8467b06e1665d4e543657f23129f18bd52f902608b2728143417d9c2268cd7f45109aaddaef03a9974eb9db68f8b2ef24e2fdf465c28d024f11a20fe49a503075645143db277eda7d71ef5db92247ac4b56400a20dc8d85293aef4d0e691f9faf9e5969709421597d3c52f9c03b425baef600c7b85506827829bfd42e696e255a4afd7f29d99d8f2cfaaf301ca81565d64ebacdaae08aa2a27a9e45b2ffde6a1be6d805655c4613f3593e711d0d436337dcd88c66f37c4e3e8a05123aa0e2c65afe538cb190ad6066c49b6d4fbf4edc6a0cd4747b026deda2e47eba33f10dd29dee0a85ad1b560d0dc940652342ba29e36b59165591e219862675be2d74d2076b525780a650b2623ed3b809464bf7d41a84b10295365b4a4eac848e8580b1ed29b7e4fe4be55518a0708cba171f9a7395c58699a8443c08630325bbeac93fec8f8b1d5eec2da088a92c18f814521480ebca347c1d5026dc79a6d3c6bb92de9dd3587b3325ae474adf62f763dc67f87462ff650a42ee9e2ee924092f76920079bb8c891b86fb9bc7a9b1a26dcde5a8d6b1c172c4d783f48837f75066ba2b67f89ea3c1686e7a20a79ea4a476674fc8204edcf84c4994dc60ec9d23fce4e357a2f33aaeba6ace78333498682e46fab8d9a09e6000f7b5b8518d720e62854e61f16fcdcb820a4d0512f21977f5db9b0d6b4d824473804b0ad281326a2829c1197c5ab9824fab9a59cf5db46e5d9395386dac25102471e9665c7e4ae1ce30efe09c4aaa7d73ed2ad8b0edd595c60d7dbc5952f34d842b053d57cb27efb5392f49e9c5fd17af4d631470191988efb7b92ba6b87967233a23026cfe660e8da103d7ed434ddb522af79f8565ecd20b10dbe8ee6323f7721dc758048e6198b81701fd0f48f952fd244cdc496abbebd8b75a8688e98f79015456a0a701b748b4f9ae3bd85dabf910b7d75d648e2340b8f9b9871ea22866516c757edceed38914d76d06c0e7c2482d642b854f46af7b2c768d5d18236b39d2c498350ebc52c4481ed300517dd8cab3a7be06723abcf5b3bc2a9afde3e47e15fb4375c4d091a4df5e549b22865bfb33f1033365b0d84aef2935a3387a00bd8b8eebb397e23c853b1476599ca7c8444ede9faea27f8dd52f4c1318704c6c42b3ee0570e0679feffbbfccae2848aa4034def7caa0cd4a4f0493576d0dd163d81fa7253036b7586f91debc0b6dff7e89a6608039f94099f2ffad871399bfa3d83f28df642377d27e8dffb913d622b15b1401dd5f046ff97b80d916ae7c5d98bd9301789f0f1fba8740716839e958ff6efe4173bc6aa1e53328d47a805e31af02abcfa54382256d2469f23e002008952fd59dc7d4949cf9d467fe474b97d27341e9c1c9f4051f66d06ae09ee902c82f082a756e3a0aa783b9ced4f162b1c671f5eda67b2300643415c3db2f671a0e39927d76bb5f45683f6dbde70d685474278927ec1d431caa515ee53053fcce4121594f0053a6cd35696ab5b2ffbec872009628e144f6b2384b267f8ea13ca81792c70fa0bbb31ab5be3b66b74cf8a63699874144769059c48e16d3449b893fe7ea664fe65806a65f8a5a1162798876385ee7317426b27ba5968a8100a774ee38b4a1702fbd1408a97a31764309f0b0fddd305a0ed9dfb071f0fc293169823b907e13211b5f6dba19fa6be5e772c3df0d70fd2b63046a60a03a060c653633b065a335c307b36623278763e0be587458ddc698361f3af534b6be12dafaa20be55eb083e6935dbfec689db407460f74c6e55aac0a91e212853c09cce580316d42b24287fc3cb2bd6e43c9d6c9fd1c57a1ca89a309799e24da96b97eec9478ea3126c5bc847256f1314f8836996213af61e3f017c324c3aebd5d29b33095cd056912b68c1fb2beedcde2656e061369ce9fc80a74c831f732a605f6f451f2c241331ca1811e9c6f25acb2cde7806fa337a3fd5544690fbd431d179ddcd169ed20278af336119dcc1b46273e3da8f5449d26ea5cf1563c6a429b087ab73f399214df04381589156a4132b632dad032b24181157e15f046a2c3986f3a2dec0075b1921eec99f5b1de39faf64839a6b690d75b15552cd79cdb48ad9248ab785cfc6919219d5dd7f18c67f75dfaf49cef54c11d506ea06ccd9834434822ba548d9aadacb2a6bbb032e95dc063a776134b7291305d270b30574e38e1c754c51130d511f548b54e1f14997dde8dfa48ba697eca3c921ae7b2a881a901b65b762ed530286b6a258f6505015aba534fe6e2a7ddcebaa5b6a0745fc7173b8ba3281df93043778d93ea3292a576dc5a34cb3cb5142102fe86dfe5db8305f7cdc8656efb5a05b2297d08f83c1a54cce9358018efb663de1317f097ba49f7bed347b8827a11e1a3c43d46266fc47704a6ce8017d639098469c67d0a6a806f09528d8c08f3fc69b4f4713c6dbc38400c095c55a9f720849e892effae6acace5fc2167a52e78df07e20a5561e8fea625b978b7b5fc0e15794f7cdd304398da83a888eee00c32b3857ef461db9895f306bc7c85ba9d20015001c0fa19c654d8f223c336183156883eaa6d01ddf071b4cc5109f910899112f588c80e5e76c8ee59f53c07f6a6cda75aeeddfb0ffa78309e0087d960c84791916cfae1a65cdd64e0a4592822727d5800d2ac1818bd93b1a5525eee51632cc64b33c03a9a7e7981b1ba8463439d50e358df4220a141ab7d08cef7008c6127f84c6781e3e1e6858ef1bf247e01302d8f8b9c08db518fa6ddf0fdb8d7b8ca1f70bb8fa4a2249cead3cb39a0420632fba5c1926411d1ae6e1985650a3a7ea7fe77c13493400ba68e9865b26277f7aba46d2147bf89c8a6e979ee9056f286ffab5386ddb5853d0e5b25e7b1d1e57fa30f2fd445820cdf800145540602c877da0e4c3112723863dc38c17abf55534423243302141362be439dc4de4d7881fa400faceb5c322324160cb64663568bee32cbc0d13adc530cf7a43fb5ef1ee8b63a96b9db415d0c29c6c14a72253c5326d9ec206c4143a771a400fe00745ec454cf8bbd2a4b5bbc1af33ec6268d7074941f6f99f9b1b22597539849e8629fdc7b08d6feff0295fb9ea66b728c2458b6df0c3c74a1109096230c5468954348f9d4eb5fc583ed71905de63095c9715de0afa83cf98be845c2c0d51ca22e9ec3e306830f59dd94584500bb757808fce7bcaefc556fe0c0397114b8d841dcfc7762bad5cc04367fb3e02f2d22646f4e5f10820f7020c721d46bc7bc708bc6e4cc3e98eb7f0cb637e82a91451f9f26ee2ba5d3e9765269927e7782e9ccc915de2a3e47cc11ba844361ebcf0a54715664b5434a934d4eed9b9f5fed48d542f072f92c70806856c92b84eb9085aa24273964b18e14df5c7cc49fe9afe071408029a1ceba106e28ac78bbf17dbc07ffc0f49fb9487412c33e96e6de70ba8909ec8a8aecce83097756b16dc73eb955494a1dd02120bcd0cd5a98dc05dadc06e65d1e1d5053e1238def5e01337a847a4bec3d5eb2bdf300c0f953e9289350ce1ffb6bc0c1f232a3b09e07e1fed923604dcfdbb134c8218ae5424d760d431ecbfcedfbdc06537f71298b3574f005a0ed961a7f316fe84e55845e10e97d934ce3c55c56dae81dcf7540df6f22d0a3020b70f6b1462bc6834be57424ac402ae400c16f02202ff92b973cc23e53685e52a1218bfa582f0ac8534fad0f251eb2ed09394f8918a38e9abf675b296f7edb9796f200e1cf445b23550c315bbedfd070e6752373290b8524d507d3b8dedbc5d9d42b7eef1332619e3a62278fde4a2e747fbd1446ba3185d1c16551730947c22142142caa8cc1c540e89ab734ec297401bc594a8c35db37aa6bc9fee356897a76c8f5339ca2b82f1148fb0bd152424a1f8590eccc01d242b6bb7a028f2e6b97e04e15ba4dbee1461a42cf48ee775d56d7c2ac238f86de50fe9ac284fffab3be67bcbdea444602b362bf5c9914c34443305bf3165c2cc60688eee7acbc202a9914fa35eb09a4e41ef1a5ec24c99ebeb73338aeeebb5b540e5ea132a34d0a98d0eef1c5e4243e4f2dd0dec5119870925ae74124d2347b4e108899eb913a1ec50bfd87b5fd1e7e0b8b06502f8906a189d6545f9feb50f47db30cc05a9e0cc678f14aa54c607dcbdfde9be574b49d996bd082786560962ea9a0f4fcc7f04a697b2adc34d332cc8c94cf9883dbb9e4c100f37a75bf5a8f929a7f483779b27c6e945fbc1a929e902bf2050414abc0637f0fe4433ff501c18617f70e58b90a2b3f8c38f041d1c9530fc129e77f2df3a33c624ee5bc4f7cb673eab05047cf20de432a5c828fd8de9ca0c9e24aaca9782b61bfd769d615f4f6c2d95315ec031d1de2387479eeee03f446d2d9348366778354ef27d6748e9007d9ad88662f9c2970847c27de455d60e269a3b5adecae19347fbae7347e037973222df64af8e46b6091c01eb87b6b1fee71051fbdcfc785c549e7bf8bdbbcd6c2032346c92f210c7471ca000f7a6165a0c6c0bf6d14fae4be194056e47501d07ae6551febbc9c33358d6276ec29875d81d09c3cc4a38f5ea8598b5546331a8f25328d2ab9879d09294b52285670242c18f8613fca64ce1a0a709163bafd4e3a4a4f910f3a786cb6da1461bd553781fdeda4d66f8840ff416cc61a2947bbe7fa72a5297576785061d05156def166e7f6893dc475051d69fa56c3ee4ff5552bf6249c1f04766d93339168fa3233e69c3f732cf3f84ae5556e51cfd47cccb46357e89c3a6541417b53a7c31562229de80133d82ba15d7e0bc5e4529558d5bed644460d4140dfda51e99ac86f15c674156452a8341848d2d32698b4f98c175ccee6c757fd3c59225c1ff0e1cff428536a8f5706d50413c7f5b9f45dc8c09a779164f2e23602b6ffe61b3375fea64f232eabca59d80dc447b8a880b5ca9b67f568e75016b33afe5b3505eaebc5d443caaadf340803dc65396618c425c7c685c09b97675c3e8b3a1d92069eadea260d3226541c7d1f19fd844533491386e9fcbe729bc21a9d9d712d4546d6223543b441e9310a1ff36c95129e2196e8d0abd5d9351ce6b99919ab7396ec1ab270d440e13d9f8656497b34cab80a330d6db417f72b415da2faa7f0d6cd20f2c56180baf968c6198ae7f1e294dd15a9e825adca029d33ae3c88ee4941310ce7c3d2f02971b3cd4a239674a758536a7fe3c03ef7e1d31961ee0b97bd990bd5801589cc953166dda2891eac8cfe63323d65050ea57c151cfe224a4955c7a3a646214ebb0720c91da8254743986f55956cd5bdc6dcbbab640e3f0ead18b341a5c050eb65852824b6e45dd9ded49171ba939db00da486dc1819ad1f6b0e452dfa760a26731a30becfde9a9b28464dffca3a24a68c06c5f261a5d3452a3f66aecef0b8c98dcb21e0911f4556c6f88c46ece9d267eb096033663c1b4892b4fc0e49b7c09a5aa2e1d2242ec4d263f2348f49290fbad1b63fe85065ecef4c74f09392528c6283a659dcaf9381d7a53a2e2208814369e6134b5846a9ae0300872b86d24982e8afdf71465ad7e22d34da6347537ad63ad32b6acd718eca4d55f6942f30250cf6875612574f81519bb9daba464f9a31f64003858df89ea692f4c812d5d56c9152b3122258b31935ebdc401a66266cba65d4a585e10461ab9d85058fc1e8a979c5da1b8a91b127f6e344166df00075da4e38185011bd5e4135afb5f23c92612b17a47a334a6e34fc4c9a649a2c043ff97a1464d0654a1dd1211ae1238cfb1e1110bb3604cb15c7aeed853089625b5180b20f92eb25d426c12a6f9109f94a679278c457e45bcc697690ae8422da2c33d5bcd1a88b9882027b1856cb8ecda8c516166ae6bd44bba1bbfbbc674ddba06e626003b197077d3865b37699994e3cbf05b352ea76cc0cf7e6f758e2f2afdf898e684db2f7baec50e9c2780213c62fddc817276bf73ce4f35d4c2afbf99c100cc09a56b593f9f8d26e0f030fe27ba8a7c50a8f7228dc6e1e89c2d9bc4aeb5c7f62c0c7c1530cc9475c60c0c6efb6d0a665543205f1f3cfffd2210e2dcde4ea6bdba047df1f3a86371a7e573122bece6110bcba2f3acb321fa13070556bcee35893037f16dfcd582812316f5863ddcb602f0cccf5ebaabd045cb8a83c0af36eccf2b0166e7b0b66a4ab40b0419b59ef2c280a1361ecd998386d815dea9399b4516071b5efdb3dd9324d75c4f6b07b614c657f347a25a0ec433a533868ef09dc6e450c04a2e7aad85b6096507f8c8b4a484c32da487e46e1ab2df6e1bd048b0fac094aaa8e889c8ca54c6cffe215d1d1a947edabd4e0159efaac31fff1bc66759114f350bba4591c9a7abf762935941ff6bd764f2531534cb721ce3a0dfee435a7cecf9d32242ab1c25057605cd31e5bb716966f435b49126bf3933c17b14b7876a0a53afaf15773a437fb6381d7b5ae75b915b337443f199d8a49aa1abfe46585f03fce1bf12889c8987527a228a240b610bbc208d67c88d54eb82f1b0ff7255c2763029e0ee51cb6d98b55c6b02d3805825045bef74a889ca7a7712489ccdf83aeda7e8a2fd553f7640695f6569dbfe7779be36291ef4178fddf183c15aabc83eb6ce9e73c4157129fad8e39023cfce6576545fb8bb4daf4b829cd6c9bdbe4e248e0ecbe1c714f8ff44ae9979c5018898b761291cde17c95404b38bb03a57e2b2c002e16b9ad64f7caa34d180d223a587996f32d3fbe4ee5fd0d00313551b2e3ff9258f7fa3dbed0888263c53bfa8bdc8a8d90d5c993796b5839cdd61a26aa94285f1169c76884a598add3a50f20339c2622909453a724afb79549b3986e8bc5112f02750878dffb61ec44c071db5921b61f9c6fc543783a83eb1acf986f80ff21cad222a5b3f65c4b095f1f4a7425f1a04a5b7007af9d932501e8320373aec9c0f72a798762f24fbecacbc98033c0964e6b769e0133ba42039f5ce5bfc040ab5680b28094ccfa5d22f930c6fd605298264c94019c17f7d0878f1defb69e5c2d4b2b1141b53b370cdf5c381fa743027d92b45ea2bea27dc41898d458ce572bd808c1f0c4d3f5d0e75dbc89db6824f9cff96a7b88501d74a61d812929f132d433f309f60fd443ee7305e0cb02274a5f15c33794bb3bd004ff0013c36906767fc775cdcc2ca26db93a3d92a79dccfe5bd857e351446503535528164b20f56c561af7d3192323bb58c36e98c4b33e88159f1f36592ab8fe8c33fd526856a65c7eb6dfe486fa4175f49601bbcc4c6730b6f282f855751b08d51ee78ec314008d222396c8bbbbe2e2b43c5cc364702e3e6659e8f0ec2e756b56a04e940461ed4968e785475f6ef04bc13ce97836287bf94c5db9e7c75cb06d39409a2ad24655d6788c13291a1952f8421e0fa2ea7b36aa91855ea58e07b357a3873319d5ca1e7d7b9aa73596c6f031606b3508287248995c5a3df2e8376671befb8228b6f531869997ab34787cb23e43aac5739714970ed663bf967df5b102b226ed211dcf7639f90d86ef6b448066126326abdf690c5127284c58f6487c54a790ddcab161d5dec483a02b152542f3f61ec078a9798fa976314d01fb39afadc4bfbbed1bb237bc218261b31e27e02b1664fba29d4d0960eb07285933cf3256313ded5003ca821c3991314e2f5242579bbc3ff062ec60bcb03147284712ed971792ddbc0fb2a046343878c3f0af51beacaff42ba15e7e06ea371036de0ac9b79e44f1f8ea71778239ff9edb0845f3aa72c4821b01ac4985c4a2ed4ba1c0ac00eddd93ce3a0ff118706f0b5e201c1161148351882bddab8364f8452e383b80b82de52a04a895f54f020f2714df3d942cbb74c93ac6f98b46f2c480a84a832b2885e21e63db0a6a7117675bc4eeaf62538f2053f87b09d017978b05817fa197981e5ed6b37c763ac4d6000d38f47a651eb70e558cf213643e7ad73e81819caa4f1fe0bcbc32e24c916861a7369aa783d55cc639bcd2222e03c52f926ff57c4e97b1f13745a655881ff5128f87883da6bfa5d16551c33b16ae9d1c6915864a6ab6fc18af187fd7d6b8a49c2ff36544b525bbb643136f6804862c252c39da0de5f527dd8cfb66701ea29d86ed41d9c5984fc5fd39c97bb0e0d49ad241a499cda99c5bc837b7032948260958333b8ec63785ec2fb13d921c92e00fab111e6c929df3bf621614fd093c8c109b68a729527a0f58d312355ab203f2b239046ffb65a9427c3292d9fd18e31cd9d6f34e556e49343071c47a7b7c1952ab03835eed4db5d0b9c014d0aa5f231e8d913ef8b8248c3e9d912fd49e82bd482391f4b4ea53a9e69f9502bfade5e5d95355b06cfa7b2b73c6bcbb0a6bcbd81b426cc0399c7e6dcc5638c56fadb3129654a8b174c47c0e1cd479d0e6895f50142f1b50b5a8d6eaca0531c6a853cf909db715a9d6be2d1d80ee51d62ea1460f7b13260bf0b9630628d4096c3147434936a521005b8f9841e93dcb35ab5a88fb98151658b1752eaa2dec471ed4301723a946561fcbdfc5609de86f55255d2efeb25e72a1c2843ebf2275734657b651083dc13b6cee58ba63e518c59e645140ff1215c24de98f9b2b4f96164b8382fbdf3b3f58508ca0813309f556792fdfc4e501638fc4ef3e4ed8fc78b795203c1c90ebe736346c5f22b651a6a94c4fafc49ac5705f6d9c385eac7143de8cf68cbd0295e25c7e573ea3d6055446808d684705a663bdb2b726d391f51e1398cc18e51f8157529815e40e7a6c26b67eafb2560eee642efa0aafb66ed231df216c8b9ccef76fa1e86efb6a8acf4580ad7d37f89de39d3cae5b7c0e2a4ea5c98f9c8beaf73e52d0d82a28c0ed76d82c74c19c359acf336e347334e3afb2a25a4a25c0d8829f2767ce1015178da908433d418c15edf8514cf51a803de4464f18bacfd46d586216ef34e96a7751b0fd4c6fc6ada17fa71d5f59170825b151d58d47616cb25fcf49ef717dcee921d2decf7118a7e03623bf2ec93473a2fe1d5c415aa533ad802de5efed94ea73e559d354adff23dbfbb66042ab376abdb3f00bbb5961ce68a4c6157710f66620858b06648a43c998b7a6282168e9947db9130a83ae5ee8ebb1e0ff10426ae9f5eab19c8670ab4021503c3e5569129aeaf6ce8221bf64273c91c4cb41ebba1bfcfa12c043c701317eb0c0cb66157a230c53689b1df63b33652abaa29373aca63c9ef89822f80b43b5bd7af6dad3e8d8ecb82b7c00baaab56e6609ac8d42092fbdbfa94cab69921fd061b1e83b0d2660910e5d4e52727a555d2bfb10b7c0986188436e0566835d6cd682afc8102afa65033b4738998873ba3c63d6f7995623e1a4148febdcae36d3d00ababfe2922d8c4b2931635f635d8d12f5e388bc6a705a191854259453e3fcc5e01bf538ac877f70be62f62b6b0075e8c96aeca7664972f03905dc16d82d8ebdec1a919ae2cfe67ae4241a8608241bc5c7b34ae2b074d1305de937eba7dc32c116febc909bcf687282bdf7f7a29026b1d705cbf6b2b920e16e495f9a26b88fd746119da3404dae5f8076b406a10d3fb5e1aa976ad2e2070b536d7babbf884e0a64995d5a37126049c5977a3b6d630ed7cde8d5c67ab52db7f49db4a7d916165f58df233ee9e625383b68701f6e5a3a218308ad9311fc3bed39213215db2890e00a2b18d6be90a535c931bf390db96c9beb514857ff7dd8b30a401c7d2f87639463c563aa1fda894757398e11b04a4b4cee0dce9dab01ad134f449a673cfb388349f42e42728a7977cec90630c1d3803c728267ea7f4f6214f073d65c6a4cb7b6a5019e2720691ccc14294f1da61db27360fa39c8e2319ebed516f5e3214187346034dde0923f1b4e12a19060c9f08afaa1bb6fbe3c6d091ae7742285c9a3510560d513f52fd41d05b079f1829014b0d81b0d2f55f6cc4c2f0cd783c9ca3abc328f2c67ee5eefcbfad7f89b0a6550cb15b83aa11376160f062d8540378dce71c2d4810254895acd346d67b680af6d83ba5f89ef832513f9a533c78257782717bd161b0caf17dbcabb5b0e696dd53482cdf8413e2a6b8ab31604e571b2f40c572c3f43ac85703b6b988a35dd58416a6d596aabb992b145e5618a2734cf6a47d91636410a60fc4157d2e1243ac95adaef639f0f85425d0a368cabd5f436409e4483e35d4fc722b736714722a748884baef57eb5cdc2d9a24ea15136d870e0da417b2edfa3434d63b27ea6794c5e33845216efe4b79b8bd5d6a763930904b0c37707ff0e2d5be20f71ffe56f5292c34e84cfdae56b54dd6a76a7c934ae7a1a208f2e3e3316974a811bffec4de16da071ec2727011275362bd5a86b61f05b84bb30f9d396857fed825983a35b207633b53126bf7dd486fdde9cb23162f72e585a036ea67fa39c33d9d395f2e03835e2e2fbd488a4d8109c4c72cd037eea7bfdc6af98a03698758550303cc126513216bff43a6bbd479b7a3d0002c9fff1cbdbc7dd7ca7028b9249ad1881f87391f63815c25f500f48adff79ee586b2b36a45a243524a42da47ce9b9356a7f102308aeac0d4b20e304d093c7e3d8d14bde91e2a75e9780fd0dbacb3c2c023e452df0e24c7e07c181a38b9ef08789e3a61417db16 +MD = bdb42b1f3852c8ca2cb2a04d50b74da39d8b4a0d79c75157ce92747c + +Len = 111352 +Msg = 1b0e11609dd9fa09b3a2bcab5d3a772fea7f210b1023321e3cafa1db27c710aaaaaf448bd30ed7fd38f2311e8b15b4136f5f37aa8aabb63edcce47dc4fd550a38f8ff8711b4cdbbc9de302bd77fa12d49e81c328ab80948e2f13beac47b2665e71b616589e196e0d897e17d04671f9391eefaecb9a2936d3de85ec9338e6b8a0f92d87898400f8b9a4ca589f2302d10c98b1dedc802e02d8902cbadb4af7b034cffb314cf486e18997cfae7134360213b3cd3da284186264ee1110caa46fb5e19a28fee9163592420a95ff90a194f417184db267cf6ebd3ea03bd7aa6fd62e6e02bdd5a7139471afa425354293a510df6e38247188b87b2f4db2f5c1d2b285a4b1c19dcf132be7970e8636d032efbc355e977d0ad87f03ff9d7f5458f68d214b4c3c40a93d835dc1f0c0ec82a5fc61df9071a478e749bf763aa9dab603ee6a2b7e37a57dba2339f6f0dc3d9f155468a6abce8103dca1165bc9387125205ec80becb8b493b293e4feb9e11371a97d375258b7fcf5e00c7078f53500eb7564a3b441ca55324c5cc7a1f1d7553e8a0138ab3e32fd941a14359363a76f512b8863ef237270a4b00549a741c6eb4fdf68d278064a6c2ab340ce75be96a69f6a5270823bbaed2f0716d1d750b7bcecd1386c83570431fdd218a1e6ac0b8c1d594b333530a9b41c7918c9fac7b1b25c88fb7092da6a3455a02517aed50c0b1321fa12d2aa47aeb32d9298d84dbdb4e92b38456e36835e7c45ee9994e3a40ac8e9e7761f539dc13b4c0ca6398be2abd9e27853df145795b9e8fc8d617bd87285da9bc8e6d0b2d6fefd0e5be528287d75d74202ad1cefc253b1d55cdd47b229921c9d6eedcc8fd64269211fa3cd9713052f1eba9ff552ce93c9036fd0ef391837d675d2fded3aa750b7cc5a3d223855d11594e37e48889fc1580e2d021b7527bc31ac5adddbbd337010987479ce122b20af2de512bc9a1f25857cfd3b726f3f6854c970573f2060e99c0cd5207a2d7e3c25702823fa8f340679d749429c2e468467547b31c169180582b0e5facd92346ba0e61579a96fc8ae5ca678e042ba265894d6e33408a2420aeb0c0dce704837f6481512db7243c2635572f2dd0c1cc52c01d60f28bdd2c641fea9b3660a576d2544878813fd120a6e8cc21e01a15b0d48d6dc69d587028cf2e40e418844c8c03fbdc4e0e7f1e488172a1e6613aa7fe4f33c7058020f397b65c4c31dfdc6a2178eda528020f7c124a5570e31ddce9134775b1b4479fd7f7de1c751b18c37ed5958c4bbd286b6b2c6623a1be825b698e41a5a649500f8dc79b0153f63ff40b270e6a2873ce0d7be5694fcccf1b4099cdc2561d4b460a8595818d5159d1d88f843809d3c28f801eebc84c4aab55270a604e09af10761b6fd0062305cc6adb8c7ba6ddd64fd94dd49e07abb3c9cc693bc44922b46f7cacad15ad54d9b45787727bdf78986237d12d7aabd090a0fda19e984843c58ed658bdb4ebb555a84466e213464c92b027b49a00397d59c7454ab32acfff6b14ff8a225c55a6f21eade44bc07fdc7da02552aadd14e477b34fdf0a1a44980d8864cb6b7a5fcc479df0aa2011f0aa81b8bd55c05fe2b892eb89d913d54aa0355fb297097d8e77be9cb9030f662d3977605c188b07076c03d67fc350ea46ca7b1155678cf4463bdfa173995a5b99fba74d8e255b711771731a8e1851d7dd693733b9d7567d3bab23229cd7a160cb8399c6c006c21c776b490e5162871c52ff023d7c410656c32811c6a14865044643d7729e374f67cbabfe58561c71266c0e5495094f0d3f615533d42d6625b47ecee8b7852163e178c61b5f08b0a0946d19b6e0ed5bdb85ba94f1f1adab53fff987363bf16fa028034c18a8d5c985d4fa93a19794f211d82379e4958e9280453aff58467f7c74a9ffa09ebc69b1a166792e9d3f9c9c2095306674366cb63b32a7b9b78d9bd261c5c255e610212373d78d2d023f60d4884b660d396aa480d546e428ec67c30be829fffea73aa8798d969b21891d8e15c97938b0ac98e27ceed064df5f6b718388350ced5a924c3e5f2227ae9a5070ea648d2d0336478325088dae4f990f43c3b2757db478bd98ec5918b726ae8eb5ccda15b7776efd22f382cd24ec21d9a6570779c6e67a231afe0bc8ce2c4e1ec927aaa16c8fcf303e731e2d6d57725115b7e7a07cf5d7595f0df7e0d111e19737a546aec0bedf87322e1b1cebf402ec0e60f398145528c6b176adcf648a116e6da04e9c38771848aa8f0a1a25546c211cec8baf0196e701ced28e02fcf7562af7b312f8585ae21b04007ba3adfb1686bda53073e94d8a8113ac291a0eec18534258445184dcf564db4ce057ea5a9a936d4582851fbb9bcb1c6dff732edad05df9fa4326627faabc9caec8957ee550bdb827e23139938356358281bcb13636c17b33bfe555b58a98c4b0a4eab04dd18c0ac6e026ab57e9a91ba450454a908414327eeb2cf3010d7fefecf5d642d6a584e1cd0cd4096b273a2b2ddbab6f7c70dcdc46754bbef4abe88ade4bd68b22452ed994b8a7c85fd49fe099846d745c6571c524eef00e130e4901ef076a1db328e06ea874306ca87a20d8720afa1db2da798994a88884be7d3801a9c91f5efbc94ffd82dffc6ad770936f31afdfb002585a96004293a789a13be6990154e38eced422be5c7a476f503e4163139ccfed67ab77124d9feaf6f2ab4d3730a93fce82035ab56a2886c2b1a7cb90b6afe1b670d2a9251a1bc378ea2c820ed79ac84d8b5421f29985ad83fd567a2509878a000c76a8c33875c5920036417a8698018e534d05105b1020259bc0d9aa9cb22d5cb2fdf277396c75d4dd3ef8249e2f9ff3726460793f66832a258d668be0ce401edcdf22ab9d3e38b3c9cd1277becfe83f5130e0a7b6e74b041302bd63662a66d9129095fac48992a16e571cee49078ea47818f2264210fc35fcd72aab9d65062ddcc8e8cf5fcd284023739412cd54d7d56fa3116f6181fb524b515adf16fca26f93de77a3cf774df29199047fcc466844a055cb0da5a8dccb7727aa78335fc010e047ef128426884b313dea7fc63ab474b2b78b6b8ef4251418c0b601a30cf3d44aab9b961e497bbc7ad8c2ad3bc040d7ff2edf137e0258be9892e9f5c692921c2b6029990e5e8cc8d70009829d75a2011e5242900341dc4d8f34d2ef1e7f4f4b1b0c05a5d4e42fe2ee3a3b9a8ba93c627898326bbf314423551cfd382b216ff38205ac46f268f9ad28fdd54f66f9948ea6873af0f26f14f292c1c57b7d3798a808f3a9f6f75b6e8a0fa1733bbfe52ee81095d8ea4d49c31dc0b9c81375103dcb185c7b304439f30c1aeb71ca06da8ff14f4a7892305fc307576b71bab349e3ff28869c8d79932ba5d3327d84cc682c5cdb2bb6934c1fb961df5d5ebba8531f96b2288a58f7e57cd9b0fcd2f6911c786d2cafff57e1180a9fb115ebb0d4ba35345da8c13d5fbf6b3a3cc13e89c54618b4bc4ddf7aafc74b33851ba514b8ede95a838deda5117f7b29ef160cd8f99371c6129bc355f8bbdfafb3e51751d56c907bbc5e4c2aada4213b4071ba4eae731803b7f037946c544c76d5e8bf12bac4cf1a7080793894cbf1e0c95ae365447370103511c8907b2f161b53cd18c1c974f9a938aaf149576571acf23804b76bf31e5de246e2d495aad12fd5d890d9920ba4ba8d1450e775ff051243af9abf85a0775f682612fb4c65e206a4b1d3d494e754c0e672f49d60f73093461811d811da2f973f25d56f1fdedd4268df3e4d52969e5ecd4d78d5b8fc98b2620806ab912e8b97dfdca69a807437659ab75cae4b97c5e6a9ea3a2aee6d81f23ff5e5a4a40c2fc3a29103180ed464e2a2d09b61f0797feb24ffd4f761c8a0c538783b5d9af180cd501977622b6e0a3c29c19712d1aa30ee96e4c5d5b3ac69cdd3f58431168d32f740ac8ff366af8bf49800cc4b8fa86d63a84f89507477315eaaf43cc9772d9ae40ce0996631276e8e65f4a7465b02a9ecb1869bc1f4b7bc0a160ad1716d514d160d4c30151b44167c1c33b4cde4375aec4b2069d4e4fc5e52bd9ffed349a6bdffca45f09a95b438403334713cbbb514d4edb39ff3a5939ccafa29f1699c8c5223ec74376130c6386d438d690d321a5c591196aa98b74bfbc5644f75aee670ce04cc4d91036d189b75b59508c9f7c595cb4f7ff64eaa53fff48466d81db8027624e23889fbbb19d5dc11e1dcfd7d4545bdffa61f8fff6a1dbac306b520719fef06d6db7ea49b588c12d0fa5212231800a3cacf82d716ecd99aa8b58961b3d79d1d029d0ba89e3302bc8b5504a289cc4b0f0942ccbe815ac806cde9c15bef1804fa1df3ad723457ee2ba978711921c0896263a66990ef424da17b19f97993ffbb005175d09bee35a302a3db04008ba340504270c6088121eedd68dc8e4542ed23d265aa11802c3ad5b4030359d317d3143b2e288e801788303cff881c396c6ed3e2c2f6ecb99ef5dac26f77cf1b66de59859f340f91f2c39622a7c32fe071034fb3f1f2ceb286f546b011aef033e92394e21e39e5b8a382a5210a1415b501390bb85b143405a4978e0fc22f49d72f515ac313908d5eba33c1da9ee17a319d8e7c8296d1b92d487b3533c96f585fa9d62f9b27de831ea76590a1ceb1c9d0965236851db1ca94131ec0becfe59847d92067ecb38a5352eb868609220b813c9c42ae42684af4d474d0b5132e38862a4ddeb83a5f1a7aa60715168321654cb01fde684cfef3a458ee5f76d36cbeae71685f74f6730565727aafc6a2554568f58163d8f74a4275abf009aa72141e7db7b92142c3a7d1a062c6a51ad926228257619194f3f2cdc5482a7db461bcae7057d0d296046615b7d17b9387ba2c93055040d610a560ec3fb7ee1a2944bf0522ec2fd1e34b26381858f9f991a7c10d8e9aafbfd09e1d242165cb6d7d7da3a901ef26adbf0a70cf4e63c255cd34abf87a70fead4940901c36fc32e6358f030099db65c47dc4ce21c68c75269ee315fa459dce2d0f2f522adcc5c522c5fb35b2573b6dc4c40ca6f62d3d82fa8b35b7799c5b8ecd86dcfbd68f6cf291b344e424d6799f1d163483b2cee16c2016af08fcdb44c0ed54bbc5a5cb5c3bb181ee76ee74307a4bf8eefcce3822a155d5a172fa8ed4052add5e682f1d0e1110c66a7655dcdaafcfc09e7acf057bb30a2ccf9e0923a3bc0495375bc8f11d032dd55b5b115ce2701711c5763b9357219ba08be29f361e55f910d91919e3e382675313ad9790d29bb060f6777a8e4f7da8b568d93332be7376d4a60888620c3f6ba425d66ef545633a4294172242bf17bfffe8ea5ba60e950c6540d29af7f17a996d247dfe169567031b30adc94d40902fd47ebe7f1c892b38271befc8123dc47f0271fccb615d27a96f5ed3b62a5e6796c7bc9e13e2a8b678bea9c8a65d3bbd9af8a0eb6d620725abc371019f56731e736e0531c0a507b74c707ce5ac1595b66bd433c24a952dd178ac19bfdb5e1915542beae1fbe000be3200f7cf4fe7b66f6019ad09e9773bcb9e7dab7700addafca785f0572c003e3bb7d4cd0e18502819263d7f2ac084ab649bdcc8cf95c21324ec00a7e9e7a21aa04c504f0a8bdb55640cb41ccd764a074cdf3dd41201377c3e90206412a522109c6e28004d10d5e8d0a212183a6133d9d507156fe6d97a50aa4269c779eb2cda70abb0835e5dfc3cef84dbf42a27de9dad71f7fed695173ae861414488301eb2dd738e3aa6b9aaec01138632f510a6cd36ce59f339ba7ab5898b5b6db5fa7444236415b8deba5e50b5dc855723d238d2f16abfffb8b0213afe1efc959bd0ca08f2ebeb603ed6a3058e4e6dc34ee2e1597de59e86bc2cb755c69ab97e92298c7bbc7973d36fa50594faf7b429deb95cdb2cad7a0abc768970638d266b418b3806f09b5384e99bf2697c56dcdd4bcbe7a29e50d6fe422434156574a7fe226c59453fdfeef72531f61d92ea6c602e913e7a334e39f3e5cc23df3cdfd2a9ad536cc0eaa5ba9cbafd9d0bcf30c754efafadbc9c14277e0fc4f5287a2d1af04ab6eee4919b4b08135533ce91b8921e178dd1d4393103ef38a5147b7deb0554932d5c2ab50f24abb6df66c07ae0413e2eb2376b8b2373d9e8f30e52d8a816591f2d312dd59fbc0a1e02a2abfb564947ad934aed0279dbc0a9253f491ae2c270372d1a4863cb95a5d15583cb93693ead1cc788d34f92c025e1b243c8a5098e3c83a35414fff135f1494e66b9c3c785d0e4b57db8c30ca59c3b20a84c17aafe107d269b1e0acf019f1e63e7f10ccfb375adf395f7fd5610761e06d96de335868e9c3d3bce04a3ace1992c640bff004bedc0e86e2b6eed8555f2cb53888847bc29693dd2af8e2d8c7b720e8764eaf7b3cbd63a62cd986178be61f4b336773013535cdeec2cf7bb24cf1190be8681248f7246301058fa206f11d3f954e240bd00aeff66d4d0e1db0a4ef04965fb31f54383a98ff35804c8dcf2d17fc536751d189eb98c4945cd0ba19da69f3a3d7e0854626890983558b946c3d2ce908d74fecf9523a5a5c629db8f1dad0897c7d5dc46b11be85b8b66803117608c2371d0c0aa44b659770c78b927516c2c0b24d9dfaed23c0dd9c4ae9c2060032f0a6e19011d0ffa0e39734a330edb7c6000ceea80d15831677f7ba19b9930232dc1ecae4ebc69573a69851ec7aa1e465b1530986e72b5a48bd91adfdd100a491ed66800f7ece3666483cc56e59d8c6263b4f45406e77cfdf1532cc9ff09410d68a48ac19b42f0a02314b3931b3dc859107c84bdc8c400b62e9a1bf06ff986b891d8af60b733338ceca8d543e72f3482e7b86c26528d03659a0a72d3ae754e0320df505eca520e95379c9bf9c7c663786005053e0296d774ca20cbf448e10945ac25182c4313f4417a7c92153bb7d7c20fff0a6577960f6c457981c2bde14b288a466149bffd872a4bd53236c157f3c84de2c62d1fff1dc492712ecf7bea760451bfb647af7339a8221306dee74b6a23b07cd2f57a36751617a44d9b01513c6188fda19680197e5373d28a6e1bf68d3cce09bb7f04d0c7c96b8f4895fcd9e0e8968c9dc6e054e7b4d7802764ddedefabfd35d9fa4e526866f49eba40ccd915d200e915593eb9e834c3988873bb8603d9d46dd927b53fe967495f1d3bdfd34de66e9fa2bdf9bd025baea807eb23735c4eda3e1367e7fdcd52e05cebe7c45ceb6e261cb075afd2b8b21f2b306bb42a7b837513233b452076b24ff490c508da9101ddfce900dfaf9da08b9e9c55dc1fc4104b8983226b2c97fdeec2b6542bd0b129dc9c96fff78803df8a7e963a09d7d86da40dadbda886839e5353c7358bd3de4ec89854b38600ada78247d898cbc72b04451c2d5dabd2dc2c04044db9c7587af9285cacdc19bddd910986bdf2a0723e6c75316c92e376042f7770b4816ce309b15275f9da1104163486b7c0c8166d751edae9f5edce049e013415860cdae82cfffd60e62e0a680a0a90578b999c2d8193dca253dee9f30c59b05f5cbc9ffc374d7f99dc48747e1b7bace278d7b016c653f10700d6b5b5c19172da83212a73cb126fad56d9ddaabd0032f51312e0ddc5d7ce647775cfe160310203a3db19035af73407e022a4627150d8ebd4cbacc702b7bb57323c86fa6ab0d467393ada0f5954633602e37759dac5f54348728286ff4c4e6bdb8b796543a96071add0ec1c68c273b4297ca4e54bd82ea7e8a7f0823e3e0dfeadf325b68d833cbf9c2dcdaeebc9fc0eee5eeb99671fcb663fcc753d21d560ac53f3fa629ac6dfad6eb20d2b64c352a2ac1a89ea9ef5722ab8509f3c5cdaece1581e95fe0dfcbfc7affe293666572e1bfd302e5d6601a951dce4ccf44197192a14c356ed598d639ada72804462edd4d75c2037765ecce77827f98cf962926c032492dbb5000141a368bfc0d9ed0fed71336b33a9ebafa2fa240f5db052655bf901fd82f993f0f05df526596b5725de563d91b17c9f3262745b76cdbd73887f783773eb0f77c4f636ea56c87d43d83e12b5042f62dbedbc6338f04b7558642d0d3f96827b4e05a9dac2b17c84359f731344631c013449f74336ec657c73911b2474c5d7d1692ba19618d70424aed413f4661ee5bc3adfd990ffdb8a475787905a919259866baf74155727fdb3121ea71294983b185207a9d8de3e484a66c0431bf07c962eb82977c4f834b7c3f1e7931a4a7f7a9a1c5a0e976c852e0a43d399e52bf50c2ef1024311968dc0ebd0c76e68023532a5ec5f6e3915609a1b512a0b429e8c29fb88c26ca79c83a77f31369f785649e1e064804f4a83311ad2213c2dc0e2b28e38f1f23ae384b6ea12959dbce7b13e06cdf755384810772ee336a267cc7308975bcf1a5451e9a7f72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed3d872933f7f25d75d4b4495a6b5a596bb64670d1c29d3660ab60b4d5c8d81e5c2338ef562c7e3b58ae9a417701d241c382658d11406ee1fef80cf73044c057df0f166d944c88dd31e79f1b32fc5b363248d5f4b1dd232414197c30edd89cf27de96ac878bfd9eb07690cfc13c5bde0c1f0dfce390082a6acf6f88595ee36963f997c2b87ed390ce31b290ea3c2c0e87762cb4332135510cd77c71eafed54ec2b0794bc4b3f6fe8cce53d79695c2bf65d86e17a237d620980843324c33dbf9b4c1cfaa34b1b4528caaf9265eefbc8b17944699c94a6723acc0582bf5a463f4ca7bef5090fea8174e5616ef9b8085dc2d585aad00df64c4bb9e2fd16fb6f9ca746d6cf162015ec7326e41a5d51e9b3d0792fed3f17d5bae34f03ec522e229d53304dcef105024ece941edeba410892846b2c7a1039ab82aa9750979a7bc70bf96d093bc3461b6f2d38f801380eccc286b562996cfce06d4a98b245176bc4ae4006f45eb36cc71636185acdfe429c0a7d5fbb927be7dc43685a0f40f185824ed102f57eeafe6d0d943e2d883564e233126f1eac648207ccafe651ce4f5169b35369f3e48f84771aedb2577b04fd0506ecef72305055cacfc4435e385958e2a46f43d8d9cb864c06ea7ac2ee94946d48b4e6a16666e98b16527920c6392153ebcd998ba3c68d549832a054280cb182c4115d9296cfc5b367ff917dbf1435254e1472f48aa720f79a6e2cf77395ddab41ac5b2d08b271ab8b73925f6d151ac196edd7fbd897c89dd245249215579e53862ce85a043876da4a5784ad16615a8d8bffcf88d3bd0cae0a60920d57797fdf5c3a0c01d1895ba76b53704f03237df3f4f36283c542749208667d50812405b88b7ed00ab8cca87cb80e5d2c7c81095a9a7098d4f44d88b19500ee42db7fba46db9f3b5d012ae6c0f731532ec8a3882a461f7a63a907d17478d6eccdadb325f1144656e3f4ca9cdaf1635a3c31b281cabea70f182b97d6417b8f7fd83ee7ce22fd1a2882d8d552346e4d7b3efdd67da4cab260dcc4261f8164d3af4cd7443e3f5fc4b923f77290353697bd1d7536031f34e57395badc359dfc4c850fc0f2fcb202eb11af97cadf4510e829bfe1fb9ba3c3ea522d56e09ffb0ba0080a411890e1ae38390c0104c6ccc5e8c50d894ccd983e69058ae05be50559774125a2de83362b5238247d49ce321e409befb45222676e099296a0749022ad7a36492a6d5c1740e316dd52c17de0e098b34eac3521761b730337dd5427b9d050f15c22eda3eeb790db21ca935e3cd6971310b71c532e0c4f6057e12232348ba27a47d286e122560390d72be8f6afc7e6c51f1e2f3ef70b44afddf2073afaa418d7f3825e9c1be6e43de7bee7cfa27a2dd16129986c3adefafab1592bc673e35912477aa05f412edae838cbb9707bb8133dc01f7c655d4e1a48bb5eb55e07120e332a0172affcf88e9bb49a8561a4494013234a06afca234ca2e348ce8a1ef7de408661fc16b40aa85d4272742b83f55d5b71f05bd4e725370f11619dd3205c724342e0671bd12dcf37ca9dae558284121b945aa65c1e1c84972def4bc07507714346c7db47bb29ab2f35615a6707bd065d73d00dcdd6cfda421f3bffda85c084497a5e7f20dac6e5506907a0e97c69e228f699b8b17607e219cf8de2a7b951535cc6ec7c3097cc259f4fd6a96448504d8505ffd08f688c4423252d1cb17781858412bbfaff58021226cf189d60d33af07a88487df01326a7680a62d4802817c3c946112013863155ecd213a46385ef721267bde65bdf9db3f16475329a35dcb4344a3716f68a2196f93e11e4f7c6367d528aa6345834b811c51dae5f89049801cc06750530ca9a7c56fd5888a3fed9b644da4b8e6f7a4069ec1b5583d5ff12519a62121547b064af0af530b6f0959ec7ef3df31d2919fe626f48b2c5048d144da447586dc5a346d81d10e39664f34e585b9ce8090d79b7a5558a0d4ea015649df49b8d36320a0a9f9834b8528980b11091e07079a40336daa6cbad463101cbe89248fa97144f76ab824bf60fe7a58e9898efd495741d42a86bf2dbd43db811d68434e7b9f5d953a5e33ce6f804c8ae9778b35c870730a2b7abe7df204ea2fe10d4499bc35c106834c3efd0326a53dab63a134f74e5a51fb06e920153eb275a3e8a6d60ded25c7f012b4cfce8a1acd89de5f6f78794e2813bbcdb89959dafec08ac8a7c32de255eb3223bb1402f3d70f381469ae59e5190ff9eaabe0deaa27d14448738e608d3cef3b1a438629e6c6c6117ea81b98b5913a51be7e9e45d68d50d594cdc23d8ce9769df6fd97776a3938eadcaf429e161d4d43c7a52417b69bc99f4c1b010d77f81bcb484dca73d49ac234ece3a5d2ad39935084b414dce0efa601ccefcd68c4c549538cb89197dc580c7ffde9d7eed162b708742fe30ddbd560bd95b079c7f9ed79b742d28f6bd81d723cae263b4b392522cc148d01130df9a4233501a8b39ded3776f90006586e478deb6c2d52603afd511bf43011850dd8cac33957dcb417211d031de5a8f5f562da1cb663bfd65d57ec8881dd76fc41df5f2e01278831fc4564fc3fd7e9cd03fbc1412b6dd60616c13f924bc9b3b14099cbc43b053db5c3a6d9c2cd7b4b36108eede929b027880dc5d4c9c0a94a7c9084bb1625555fc7f3e1d5e745244fc9b178ba854fbf46d498d2467f7ed0cd86a81c87947eac70e10372d3da45875a005d55b195ec0f96645e830f53d4f49f97fdedcbdfa58f138988d66e3c3d091c728aa25dabad05a8bfa53489c7617943090864f2581851ba39ea790f5d9a1de988affb39270155f05f2373604ab2d35a526e1e958e65b8d77aaef731eefb5a53cb53acbea86754ffcb5fdc0d6e4797482c85772ff31c18edb44ccd6040bf32ddb31c5368a06da7497c90bafba27e299ecff50b1c1689e68f7f5a6824f3843c09b8406bc19f72b14ffb8cbca577e53eb0d52346f4795dc61f444e640a87b8da4a7386724406250785c0aa3db56f0b1b30d496b7438bf62c2fabaf2d6b7deb92225d54e38a64e30e8d545fda85e85e53a146c5d883def18d330dd330c2368b0823ee125bef4c3b5ab92f340fb1846d7c549447373fe2ce6dbbf3811ac9421580c19e6537fd1cac60bbc9bd49a2c3a6f9fd45813fc227eb424cf50f57cb4129a08df6b4043e6694b4e7bc6214d416a960fde30a6ed52ed6af487af454628425fbdb7f954d2daaa2dbdf6fb8fdeffdc325c8f55950c3582f0940fdc6bd09bb98d74ca17f7f3569552a056c28613109a2ccf0e4e472274442e4c905fcde3b3800d753f4d91700231a33fc2a36eb619ac6db084a323f6b63c0d6332c1d546189ec8083f238a0f858608e16327af8dc518dc4718dd9352a47073231c89e9c3731ba575f2224a99889c6ad061d5b161b9e860dbf383fdfce5ea49d2773f73206c008b037fd139d5b27caf52e336dcf9a024e3b53c1dcbbd22b278b96a6bda26aa5464fb0fb8c08dac2dc1b011d0991f20d24c1e1c34645d03cee7201e96869dd61f17a5c96045871db78632142e4e99e1fc835cbb4f30a42f487d4eba47df4d976a8c49d650328cae23e81f14d565308ca96fb740f6975a4f28248d67074dfd963cab2f5d10ed640778cec1384f44acc9e2fa79d3b101460a74c3234d5d38777b9d5c9f8729e0d7cfbe1f5ea92255d53fae0be89e09d6310936415993d10881ed9587e07c2271adaefdc53f8fd9fe7397158b4ec6857ee3f475887762eb25e4942d143b63830aad4e3ea7ac11f9a94d791f60f176ae6224723a7fc5e134f768196cebf864d512a15488adec570cbd2c8bd5731ad40ae8bc2b8c0e8b3933e7d4245bf45fa99ff14f6be4bf498a9aa2d8783eac1008237972c8731d1091705bf25c0018b757690e7f3959c509d229bf19e662f31d3b817e0ff1f7949d1274bc886a653d4a99bcd3fb66efa77556437eb77e4a318795aa5d5c4d215b7ae3c6735ff5924c5e951ea78a9bae4dd53f6f4679e7fd4c973d28801e85f85bef2eefe63fa68d2e3c731af2f3809fa071b4368028c9832e955c834d2040847a4418757fef2560c92c5c351dffbcc98690de1e928ccee5bdc919412e2927cea1c0cbe2a5391913077578f98e76f835e87ce5b1e56d9c2ae37a9dec8a00e2ddb9ac6fbdbfe32baccf61eeedae20dbe9af7bf077e193db5a87f20f0bc86e18baa8502b8f37b602350836e799e5c40eefc1d627f7eec6347e91779827523b716b58f428df747a47b59c3d8a869c2c384f08d5b3b975cd4e9de85260c78f2f97faafe08e35def7a13572be003b391e020f6bbfbc45dc71d3bf76cb8e73e7112f6e975b8419ddf4b9bc7201704026631339d1de69248d7a68ec22294bb4c2abe4d0f7af3214d93b3652844d031ec9c315d42478e3ddeeb0b72dd4b6be1088c35b27b622c1ad3a92c1ff90ece05c8c05ade94bd652f869da688974b81011a1223f7bbefd596d68c202cc7e243182d6f3857f2e40ddfd65c22309eb78683f769036d5f68821dbcc93a0c0363e1b190e53459eb5fdac754a2e8fb41f3eef216dd5e83c460a427fcccc44e4a181c8a89eee954ec857e8e87fe75492f952cc3fefb8ffb896cde4e1d137953ea53760b7ed8c1b984f94b9dc6eb51bab61fb282165022051ce172d8a449a3cd92ba60ace63f5828332fd46db7e5f8c0840822b50357bf510d73148018bbee0ba1c18ef7668f0701859dab86c17af4eb07c2ffc53c9eb26fc97635bce106b2aeb5ed3373664468e5eac733618a16b0aabff4ac4b2871a5b1df7f48f7a3968c173db200997bfbf835d140fe965845c6702af1baaf6d9d03b7cdf2e0b8c707f4f5a79468d20e123f71d77f8f9dd294a0ebc76ead7a626d46e203857f88c1c7679a8228fed59333a94a7bf748d08f6fda6e13bfe734ad5ef9d12e8b87d02a416e966bd414eca1bccff02d2cccd6d543cd87ae6a0a56a50e97058d999c3777227479c32a5dbfc02a0e3369a48e294acd04c8d5e18958ffe8a8efcf142f173ed713a506903b976517fe64cfd2ff4056482a9258dae6c404799a0051afa307c7dbb6b8c49a313c06e31b04be5cb2a49e61897475aaa520693e04d7c3b0aa81c8acf8257bccc0f63c37eea3b3962ade7985ac0fdad536e684a253e683cba80da7c7326baaac7d5e6b62e3c24e13da567e412c94e6ef2e9eed4311ad10452e13ebc70ffbbf9dd8ed1b1084d0fc4a4395231065d4385cfea209acc8ac07d1af2d1b08eb665925362ad1bd5c603ccde912ee6ff22e2db329a8702bd363b8e5adc1ac194f3bd5d7478005c5d4e09e035d6866dc5c035566321aa75cec54d1f59c6a2574c5dcd4287f955dc688e28e8ef30df2d20e044dfa9a6115cc5e0fb1960d9efdb7c9d9c2ad30c3102be2e68cd55c6c38ed82a155f4e51451d6b2e4f62b73c8bb3ed5b32fba1da1e3826d5d175afc1b9f8b445b3bc984bcd22885850e3a618fe49673e989f398ba3e66a2b6cc945484ad37eda23e0d0bc31d1e40506847595ce04b2eed5fce346497250da40b15e84fc87fc906eb13dccfa9446de7a2e6bda854b9514f1fce7339645a1875516449d5a7cf7109d1929a1afd2788ab3c7d110aa88d958f5868c7b14c724dcb4de3dbae91b3601b8ffda66d8f240b2b938ef5ec6224661e8811c464b60a38164f3920333ca830cc54a9941fe5e67fe956a0ded6081a4d8d2d7ddbbc279e41e6d3b8ba1bff2a4d9cee4ae5aa87db5154e4473e5000dbb64bb6f18030178b15ad8a06fbc15fc620fdab461da5eb7f1a0ecad696d2f2e53aeac31144590c7d0ddac09887bbe4e8556f2a2fae9a874e546788f36ad734c335dac051baaf8cc0950f15d1c074152d5581d96c0ae0f1c57b0f9d123ce57cf241ac4d3735ac0f1265bb0867488266f1aba6378fc521a171086775b78f8601fee8dfb83657c709deda5f06bd825f60c1b27cc30f7fc52ced86ffb157d5218a4595d59fd3939903728d7b9f48f063893a14561a7f6d53da776138be7790506c62d33e62937b8a9299d981309e354746b74bc29c34405650bb41b32b9b638b2ee31b6abf0a72242da159107921a3732fc5c352c6d28b35263582ff5737a14a5822e8faf38d09ee4b2576a9c777dd6fbae2158738ee9088a152bf6defd0ec166ecec65faebfb5516192dcadba0545a56e98acc050cd02b978bf519f43fba667d9233e195ef706e60775d59caf6e7eacc15603aebd12544012b7e3f3f21c52c73decbab872e77124a34b0c0745f7dafe49a6b492bc3307d4e5f8d11c88c793acf367b6ad88e58695db8eea7dec460d126e073a2cfcc38fc088eec3796661cb919040cc691f95a9a206cdfb5120ed6771a5040ecded387e9b61f6158b199f7d0daaf4769b956c6ce1cb64a93172328c9495099d061bf636de17cb51c220b52a8989ff1f8588de42cd7fff9e9f5ed9ef03a4948f65f7a15b0100cb02df0a67568de3cd51e7785fcdddbb0b25eb4537f1475a41305e0ebe4d9cb3719302350a73931eeba811c285608b02f3e9a5d3c155c83c7c3a6edfa1a109b65bad0c4f331431b1d67c9525d3ad6dce66546f892a6f1eb1c20808c8ffe7f06fe59b3da765bad2331a59f1e0cef6fe93bee0a8b3c7bfb3509f13cc892d74b966abf816dc16da0d2923cab8a1dbefa5f98a38d2022dca1eaf80081a6ebee9fd312b4e386bcaf43aea8f4949d79ef9fc4644a78be2c100b915013f830838ba1445cff802b4f69bf41dc95025f06ca88a207ac726e426162b279f3486d40f57971b16a026762e23b1394e69fd9ad96da80e99124374c15ced5db681a650b7650e27abb0e3fdd63e0aa39b01012579dc0e772c1352132757683de391621cd544e201dbb4fbda834d59034bb0012ea25605e0a034e34dcc98343ea30e3a86cd89ab204326ae8ab9d434debcf15e25077e26d1920177932591c9e67132a02d24a5d2095e80ac8cfe65267c8b4f7896fdb6f9c07e137f71d6c6a1bbdab9238e5f2bef33aa4d566fa56296832314f0f31982f743c0b57b6834c954254c0c4518f17e6b25a3073c91536f1d89110c57d7cf8497c20691ebf4e3fc49b941a6755b603fce55c528df909ced13d4c1700da3a41e53c1bc23519648e1fafe680244d44fc2914aad3cbffbc66f221cd0fa92e52bc2d3d96dd43ccaf81cf05b0bba340204b95c8ab7ad4e218467c0b7bbf6782acb14706f783f1e1155ffc255b948b3632386788c71151aa04b69684bef1e3dd30685b20a87ce75f8072cd9850d08537620ac8dd665ee96067fd6813fe6bc547c62892110f90cc4ed7006be5f63a384c980bdf4ef02b450b2b641b40a3f6b4c8563b1363968749b70252fe94b4994d7cbc81d563cd3e0cb33733d793155a5869c8e7079da42805a1e8b0ad2ef4b46bd0b6b5d1a4665fe76073b2c395bd5f5a3104759648a03ca9147361a03a1d543b4e6eeffc9a21587e1bc72808cd01cd6229f22de7ebf48bdc188aaf004097416400cd777dcc67f078eb1bdfcdc34a6b17577b56230e07dd47b615e0f5c8c9438feeb9947dc2a1ee7ed9571d3b00010222c58539713a41fa91f5fd3da65b1d22641f1b8f2405351b37ec632b7a0b8c5a2a7bf91ffaf50aaa63de280e3c80faa58a9bdcb0991c8d3f4c2c2751b16c553bd87fc04ee6cacab465777f9bdec0c896aa6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b9517848fe7258b28547804a9523db7c597e3a984dbcff997df5208e9aed8dc762262c760ab36433f4cd421b9e62de354b910668728e5c417bc9d78a16ce9c3721caa4f9f63a9135391897663f1fab7284b2f8c8dad9109676bb5c405658b370888d9657598e8c1092c7e4bcdfa0bfcea542764bdf33c922ef480343e2027ffe070d6510ad05a150b249ae81f89ca7941dde23640814f25155de80f742523e4a1db895b859667d90181c79482269ef8d6ed474a3edf308bc4b0d49fcefde9aef4d2dacb0f6f77d3924cec981e5aef3f508c3ee7de96498ce2f52b2a752fdf25805cb1e8cfe5f2cc678cf03c1aac261858c2af56482d01ef1732d7f991436f10ee81f6fbee7f418d2849bdc89ea5a949969882e0a52cbf7e0d71bf5449c20039e549914c93c6cadb7c8b3a84d4cbe19ab1159fcb1d1cedff69b9cb82c533f9660ebd6a23e740f6810b5b4fb8e2a936d55242ef5fd784f23bd613e3cd2e1ec46011e46ac812772d457ec0e4abf0c411c0202558e6fcec36fafa85ef7bac0bc8ef95c777823bf3d8f17dc3e1a627a6d825c4c9c3a6b3dc21037d1ad7d566836dda426c7a9b8a3a5d4baf6b2ef1aed6f5cae53319e825dd1b2008d78323850d1bebc1dd5c5928d6261cbdc0b4d4aedcce772c6d40f479768c1743c6dcad30323ae8ba2203053d4f992b4eca59974f41cdf6407e2212d830dcb1d5eec8ba9079329ad44159e6f02b20420b920681b88c580ecb6ea68a6a9273b667573094cd6a6cc9b84445466af422279c1fa4db1245d9867245b3a35624b9eea00afd810e8d4e3d0e32ae6bd33107a3a87919ed84f4b727df0c33a7c56e1721290e15ca7b6b41bd7d147e9e526b367ed7a94fff37225ab9bacb0ddcdef9f316a96b62b73d8bae13adf19c270f291980d3b62c5953562a04aa88298bca4cb696c92acb8f7c75fb0547d1f04e33f3177141a89a43ff198fcf584d6ffbb0efc9693152379c5fb2925cf3bd625be6519818cc88800463f2f1e46c21c776b96b925788eb90240fc9d9df58bbda954fcc043e1a5dc5e5a869b8098d0d19420d477b2876febd70b4423a581fd6404697ebc4abd32f532ef6064c0763174da8d30beba3a591a6c875a61b8def137cb4e5373e27a0061127745215a5974a4bf034404a91baaf33737a7ce648717c76276237db7a29ebe7174bd47cadd1abfb62576dffba605d4cbbec4c024f4d1817e93673036b15e5bd48a214e7e5b8444546651a74e63da5d9e6f39fd76a2aef454188731fc40cfd7b00a29bbf17f51c12e385cf10ddf98ec23db6fbcd63b00ae97680c0954bb83a0a8873f06d09303b4882e0153b663d20ef085eeb4c018870ecd148e1cfc9bea450283c9c578410aad16b9d735d4bb164488f12f4bc0b5a29349a055e3305c94336272625e74f3d7093e6e572de52fc61b619fba0854acd3eab19e2c02bc97f20a4cf581584346095783be0982744c6201ff040760f868ab63895058d1edb88428366faf395f9212267b1b5709ee8b9a76d5a0bfec3863999c258965074048db1b93536488467271e47918d7fac087b0086a081c1071481f033a8be8e940c36763084329bb8461b9102238f4fb96ab433540acc4644f60ac272cea4d1e8bb2a98ce9b1674995ea4837fafe4672ed70d46bddf1415e3f57d17671272a0d7d9121f7dc10b5b8f766bfda67db34f71172d43ab6980b74ad982f7fabb4d84c92d9514243f39d9025817065fd52590ecf2be3105ee39b3e36ac06b13135f0426805c7eab5dc7755aca51a792fe62b106306519b3b767911570e07a9a60d0a8579a0e65f963ddb8ff95c1e72741913a2698cc029c0c30da47b2892d77ebc8f8c24354d1f899a5295a810ece06e6dab3b6f49bf4aa34bf15e3f9648b92fc6e7dd043d6cb8f474450d155e164183566a51d0a7af8c4793aca500d199cd3daeabee9613b5aa6b4e5b5cddbe1b243755d98c3a20f14d221ca82f6b64f6823cf654376662c872629aee1b7d9b7bf70f0e71210860552bd7596c33dbcaef868210795dd1b5059f5eec75bf5180a9388ec2a9d6c7d02ba6bbdc7188de6e0538c19f73b884550d8fc4b59abf160833771b251c03f4eae53c54184064efd8a8175ff5ebdddafd30c23888c5a1178cab2158a8204f1c2b325b348f617e8ca578b0d1b63a4462082fe53ec87efbf2a860c5abbe5efeaa1b6381e1c44d2c312ec783ab42f772a5f05b572c073f2623c5f4e2a8fa40b92b36295ec0397bf47a0f450e614e9bef1350339694c77eb6177ff7f6c4ce4e052bf5c4307461767dd3b151bf881ba02026a249321d8bc6326a30ba7083bd0f4908f4f4a552deb51ebaaf7e25844cac9c7c611ca81ac6ae218882ecee5a48dd2b5e9e1b3c0ff3c05dbb643adeea5409ea71172e67010a8ee9fed0efdedcf46ff2a96ba852f06310c1327a182a2eb44060a12eef0d84b9e11239c533c07032104565e83c88988f3edfdc5b86b5c60008b58922eefa0a675d20c5ba6911b8a466aa008e484b8cea930ff57316f044a99b4fa59daebb06955b9c3f3af0612aadeb9725e84c2a3207c5e83a7b39682f23a09562f99ecf0dc654fae2c15a2d2ac117733260c8a32c594fef07be7e9bea00913d5dc13fb4846ce1b36cd806d44d8062e4a2923e24d071898ae9c756fa09c2e59df27f11fa0f1b7a6c3a09a705075e665212f72d4dc2c31b525d20431112dd264ddd9db61e0234976be6b08b2dfcdd8a51f00a167c77d06dcbde43c35f79c1dba35ba78c7f025ac158df7753bd7260575ac6357a3f642c095de9cc7853c3236e55192715cb83f070b9a0c871422c9955d30213c9152c38668f0c04a29c634466d97296d2520b882de4c71e644a6feafe51302f938c14781de5b1970277fed74d87147152c11da47180af03bd34d0c7b96bece36a12c18d87e876fde894da4e9b046b3117871eb7b403e4f2ecafd3d22f7974d9ad27c7cb4d0dc8a3f571aa0cc7c7e3608112a3449df4f576630a0d7cc910747ced597bc3d5dc3313997cd2a46c58198a30022fdd77ca5d08c0d1d23a0ea77837ab267209aaca22e74534e8a7f12b6a1894c438e4d9fa882476a5c69c78c4dca456fd3eff446e247999285089eeb871862fd732ed4d1c035404e45f169fff3e4d716c27372b1ec45505d5aecccd85bc7d81c9c26949855b01fc1c002acc9cf99d9ae1ef23d7727ef40bbb57d30629b7491afa5bfb47fcfbc8bcbb5e5bb744bb1f340ceb57c1ffa0f12b47e04f310ade835c1763e5c0b96212c750ce3bc88cdf3ccd3ba045832cf6b6e509dc93c6bfaeb6d57f7eeb6c612a7abc6ad42d88bbf280d6fca27f9370dcdfa98fa1434faea45e17b1016e737ab15b0c7804a360788185d1ce66586b61bfb61937d2d0245e6bd3834a9fd1ae6ca35e27e6e45ff83908b65e3f607283863bd49490f5bd0d4541c1a8baaec755cd5cdeaf55d795a883f49cdcbe25506444cdd5bc396e8c3309d2a3186fb2b202036 +MD = 33304e8f20f70d5f405cace7fd5950b7e4ab660dc6b5c3a9258fb49c + +Len = 112512 +Msg = 7bfe85eb349d859099acd85840ff51da3104f51935f75d5851595c308d9ee2dff92620e3f26eedc8a288693ec6c8e06eb4c1f18e9c6fefb30eb687e7bc0ba37c82728fa0a3a85a3156a180d28135c53ec41664dcb90569947a455ce264501f281bca1949ceb39573bde0643cf8accaf169eb982a141f95a29eef22460cd41e8cce160806fcf76337df2d5fa5b396b52fab28d3a136273986819a233e3dff6850a23ea201b4dc8f25c571b7353b5c4fa293b55e69a6831ee82b2fa5ef7e39c41ba02a305f7ecadfe47692b513176460f0287a81a9ec9d0c6ea597f18457eafc95cec2f94be2291d1dfa7aa168cf18b0c1735f838a91dbcbc3f6b84f23507ad66736ef47eb69610f775a0fc35becdf06be7a4dae331ca7228d267c06f5f2521b39e09760679ada7e9b9d3b6215f5202c8e472a48cc1568da753eca6021c4d893b2d2a38de8fefc3130cbe5c8bd7245e8dae2e09a7f0585bb224589a3cf4f75057b16fc16961b30f2dfedf53b7cebb5034a5155ec7273688d3d43a3182919913a3cb48843987cdc87500952047ae9d845859e7386cde778186d41ff0754ac95fb9cb2315c17a66ab92a2ae66bdef3167534d120afb9e91d245b4585b87b90e70e431adea83a234050155598b7d192d75dfef046b05e02bf78ae5a1d72c44bf13bdaf477702a79c814bb9450327a4d83c38c05ccd1e3b9c6dd0f85af7f57671a4c0946e3fc0e3368cdc1eef62202ac827085179a5a70979b1b26d023255d6cc907771a0c940fd68a42d26c73d090373c2c922f98932f23a4fa9a4261adfee06836cd77d98055ec953c9414ad844d771abe5b54aec446e54a4214e3525f614d5e9fb266320707fdf183aff08d8660f382f0878ec434dd65f5ba3bbcdc82af3a130bcfedff734d8f05dfcc08fb1df233dd88bfe5c22c1d2c0e2bb8d4e8600f30ef41cc17280a502c3b189362e0922bc0944faa6290f42dc1fb5d32345f3faab65a0b50e99615385bfaf5ab08222d32210d0df10c16d436ac261852e22768a854bc2f036d2fdb2da5ab3fbd02ab3630deb28a3bec3d146076f524c0e82a2330927d768eaadca65690b4be705661f54c80ea8d3108ebfbd2a6d248234e4eb76af905a899a886bcdba67e3a6d0e2eb2af8e1ce07b6a09d2b5c4244d231a7d6e7f10bc8dcb701366e56f717b5b32f9b48090b249c01a80e1305853fc69569e8e975f0beccd096dec9c72f548e3c8aa44e80f1391a81e36706cebc71b9d099960d96f588f467b7a962737736badda28aa0f92a780dd8015c79104e772673c562c6ec70c3cdfcf24acae4651aa606f5d2e1ca1d6dd0448042ec62c1dcb6df6bc3a7ef090bc400c51755b28f9cea490301838c40872c87ceaec33ead1ec5a3fb5d130704bd7103aeb3a5464d19f234489af8a84a505ce26b14a01c6699ed41f293aacd1a454f862d943c18243e48293503c3b68155fc14d409058484ea9839ffebe1b9a05fd9f8a03d8cb0ab6676c856d0772f9c04847fa7f065ff9e8d511c61da3a554d598aebd51419a8592ee8723c95858bd0f87083456f33f609fea239d6e3171867beecc00abc5557b3e427b744a77153e68e6ae03ada11f06dcaf642ad9b2a8b861c7a25df9ae2472242bf180d9abd004342bde6f6c56287105ed7977476c7173eeebd7db234230f4ab7091505f3eb195dc1f42817b5b822b846c0d8c9ea8f53d8a21148211caa1883bdb02ebc276e17bc68a8240c2f854bcbff4c66fc8ae5ba19d32015bac8d9fb73c32ed59ec9c883e5c3446b52a74c6aa204d4c2aabc6cc248fe7456ddad55107163ef9a3c3f7cd6405e435e69919027f0d3e48c531387050c90689c184e8df0232c7cfd031d1d9772864f7ddf82d2dc2f0916246414b6eacb157745d930f7230f69516e81d70d4ff2f7a35a230f972fc300c41b7c249efc0b0a4af4bed923218cb6f77f46e1de58281ef973b27c5f7b435788e1f9e781a152fb3e1937cb946421a1e9afb0e20348a868ac4b2c7d9e472679cf087bc211832944db33b26ccd636496b2605e4c1ea9ea615650ff77c62bf2e4210f6048b109f483acd4dd5120c7dc21bc41bd8482f47495621589ef79921f23095745e002be5b442d6d070d40e9eebf91b43d2fc2a0bd717a197a692b0221b2f280ab2c6918b3f2d77cddf5a04212eccd487ba270475b81e8cd3f695cf4a110771bee826691950c2574b0aec178ff25b96ef780fe40a54338b15764820203c80179ae868db1851ca1f52d9d26e6e9e6f0a82f5fcf354142046640ef3c82c0562c3a69ad4110fa90e76eb345333499cd0d748173859da5eac64c8a6ddf2f6d2741ce9e7b23086c053051c03b98ba55346a649c70a3d249b9e8e49264fc4070c7fcb6bb5496305fe6473ef2e4aa00c2b991f8eeeb9c7bb34bf6bf0769166e61c4b7734eee2d015cb08696c9d4f9a058c90e91e728e21268fd7a4c47feb011b68a0c94d78c59f3d8f068f9a380fa119def5ad013dd170ed16aee0cd27a5bd2f5a4669bd3d3af906b2278c81e8d4dbce898e124035cadf99300bc8145706c1a95904fe8c238906f79c33092993e473aff524c1e244c093b144b703a0f8573611cca430c214f9ed98b5f2ad9b22888f418b7e61ef51fdb7bdbc7b3a7af0e143f01deca968f7d3d771662b21de7e08580eb1669b7043c77145ff1d15a829e911ccb3a50e86b360eb0b15a80cfa8dacf59dd0a2176c0467e9d275653b3489bac830f6970a2232e552ed2c2f17f839bc8e7651fb7ceb7b2549eb861d5525fa9b8fa14e8943465bad339f1189eadf697f4d229a3973f59048b6199a0b0a8463d38ea9234461f916ffb7aa2e7e2cb7053e58281524a3932b1a5ae319f90358ababeecfdd910d444b220595e9d58588f441d7102983b5cc34e15dd16bade8a9bc6bd79be436ef2de25f47e8ac589f5b20d0f3633d2050a993e6e76bf8ef60807d5b7096a1fbaebfc4fea22cdecd1f377033d3a7bbc11d3031711e3a298913e4d6c2e2477aaaf2ffd74740e8e6fdb025ccb1a1670a2fc36bf4c92dc56441aaddafea5437d80965f7048149a42eb0f82c1c9482289232eb62c5383a9412e1cd73f019efec24e2adae34f6e5e81dad9f544822a074bb913d1c8d046e309c2f23af8298dbf0c4fb722c4dec3a3d1bbe4ea539a423d2ed1660a13276f02068f455984baf3fcb221c5d7a38ac732a90a9ad28d56133cb9087fdf99ed6e9ece0f70a3634a54303a40f159fde7eb638e43763e405a3f6e60cadbb2db76c801d6b02eb9225c41122b49b43a326a92bed803019e1b2b097abc9504343677fde3a70dba0b30752ceb0b9878f8ff777fcd4ca5c7628c2d23ca230383c4694592acb594bd0a2c098a5331b9ca06a3b2e4e722b8323c01f4e0e54a72c4f3b28408d598d1a23653adebc3541a21f3cd9174c510c6cc7b1af6f344897f6242c0a7d2f6b741043065b6c3b3d9561b30db97a1bf8d3e00b045c7cd606695c62202258378976f5d58c0d894bd47ea005e6c39fe6efeaa797c00cbc1e178327b2205818cd3bfb908400377e14806429bdcedfcdd3bfb78912eda97832024f1fbb3394071b0a6baaf569c194bdccafc282cef54e0aefa44e24941af93a4f330b2661be6b467d2e0bd3cf92106e3dc834fceded68b40717bd76bc47845f8799b49ab2be8d791dac7bc43b943d515d1546d433af64f98f7a9fb06d1864c831e8e3c02f7cb5da704ec270b3ae628bb3ffc2b2a8238a001034bc7aaf75df9fd5885e40dfe12b91007aa78142c8c647c7ef6e3d553221f212addc7a8b463f09fbe1edc1cbd336c75599f49cedcbb2ab224b141e41c273f61b4dc75b0873ca302c5b5aebf93b1fa4f5146f6bbe9d6edf4b7c7afd74bcc635b57c44c32fe4c93cef5e6c6773022f4f6a51e196bc27420ccaeb6980f70963d767a21d5b07828355cd52eadd410eabf13cba11c5ef51765a28ffa852d18f9203b92718ca983342a14d9f9df46949deb1f1b6c99f600451f0ec1f01190a389ae13473feb8eae04c4bf7ad4d55f59a0fb813accfcc16261cf79eb53a7eabebc59a5fee96cf0672eb7953e4c1a8ece8852d2a06ecf519a02096c7281c28bb905956c301aab4f3cf6454eaadc394571d8939bc2be8c2725ba2f6eee06fc0420e9f3ce6120012b9e10203436e19c13d20630453838bda283eed3e9b45fbed494fdf75528b628f618e0caee6908cd8a6d95bb576769de64330489756bf8758d63a61288fd296d3f1c0c97f5c7ce4819b30b975ae6ce58dcc1bfa29a8b6dda8f4b76c7e23516487745e829c2c99e963220dc46b81cd2c78cae64c1b1892c386a8ae499f986e9653ef50802dde4e63274658c5c079013a4e457986962fbb029afc0741b27693f2de6c7e085bfb0519740cf9049b1e70d7b846bcf0c17399628bf7aa9ae0432742d1f2d0654d0a25d4f37ed8c925f783cb5ed397d1c56e94aa02a1809c5089924cd38a2edd2d93165c4ca3de5c858ca0dde7f7f273c9a815a4a6036f912bcf3bd98d3b80ba201e3f792683f104e46531d7fcb7b51cf6a88216202460bf989e8cb0a70dae4250340af32927fa0b6a0b9c7f441dc81574f645c9170d3c6fc07dec9bc808a0bee55cde91fe96e2b73e054b9e683013a66a1ac48534c4e9eacaf4c36098353e75071f231c4dd88f5189dba4fb0ff87e16009c69111f535175df8b7ac8c19b71b1dc04425dbdf6eb2072161160e27ef2af60059b377fc15a5b27cb779be8421fb88f93a119f7f7dd6e223df89388c955b7afddc1bdfc17eee2c93b23a1b83331d44654a91ba3e34c81c1d8c35daae1917718aa456c3f5cf454ee64e6a1d675904a29d0c22a68c322a3766fd986f0cf8c37c1f68e0cf09854f7bdcc2965ed102265628e550dee9e4619698ba2d6019a303fd2480465b7d4f6145ffd52b3a30dd16c1616c88dde7ca02ec3b38615864a63d674290f3e3a17c2f2fb7fcb54a07384a670f18572e0651829ac70ed0a26e80f45ce2017612469a0dbbad8fa108d4a235c95a6f2849b6296514b493f7e8a7b1bd50ab584941bd27815c49249ae129b95d7b0bd798ab87a02f0c9c6e4395a0b6fcb4d70bea0c75b32e940341ff8d66dc45ce7bf814edeb6444c4d6f45033da1f372c2da2d4dd20bb69f5647e3b482c8973662337196b61c44ad00cdc8a4db438f118e7a3a62e1ebec7f3052ffabbdb4f6ab4aa1b32be8b7eb5d0a67d6e3ddfc2befdcd84ba99f01bcd1f3dddaa5303ac905c791aed51b8c1fa392c5d889ebd1af55d27dcae8b1570fdcca71dc6a8361f88a008cca5bf7a5c9c6c070345eaccc038b98f01de8c2f5cbe9db956dc15d326c831e196f872609d20fbdef542ac9f40fd957b9ae7178e1da404ed1f57366b30b3748c1051f4dc020c6b1ca9eb5e951bc873761e34b7b2522294caddc4947eebef0a70bf4ec17d39d33c48a7cc7b5ecf0dc5f6f263d74c98decfdb28a08a8eb6ef4637fa5b629492f9d1cb65527d5cc9421f86bde100bd302d08867687b30b1018da3a57e452e2ac04ee4d6909ef0f9919f29de728ce74d681e1554dc69884861008f06e860cc7e378c427397f4ae7ccd9b1b4f4c79b13ea91fce024f9958b8749851294cd1ab4e7ca05e14d1f1b95c3260f546d39f10afac18d9f82ad44709249c0e96105e74a177d26141a65cb6a1a735e04b6fc6ada759545ebed3e2fd445753f1d69ed0cf80106973827eff5054136104e788b52f2e981a86ddb48b2371f7061f705cee63f22fafbb60c1a02d7c602d88a186353f4c51b178dc33976196ebfec3ecb482d9ffbcea6262d708f52175e19502d20e850a6c625d43bacd5ebd1b8003d30d52d8af9f638f1129ff514b3ac55291d208a86fd1755d9bb0f6c3ed6fd707acce28090bc0626bf31d4de9039720e8d6efea518469329f6b7dda372fcf4af8ff61ca141a072e1e921cb96450743c7e59917e27501ae04c3b8841638a2320fe552d00a0e55d11cf768f0c6a3bb95f3da3218ad3dbcdc98b943bf3ee0653a240349a945572a851a725dc0ea5cb4ed24d3b05d7fc2d6b3385fcfdb781ab4718e727104cddcbd237cd296d87ba081bddd5a9a72d4b4fda6762fd3757c482e8ca1ab3f7f2ddf8c10b690aa83f54fa09c7fd766e54684804ad491f4f995e921cff0262b74c00ff5f15a54ef7fe19aafedaef29c113fa20cf4c62e9ae46f8e3cc00c7bbb823ebea929ca77fc18bb11fe35cd04a0a33a9df258ed6e3bc26397ee1169046633e49c144ea97246dafc561a196cb61b07d1f8eedb9cd95e100ca6a4187858c1e67c08a5c459ec66532fd791ed005f71bb601350f166e88869d52afd69bd0145264f84fc2f6e4ec10dc006e4452a993b2a9fada72ede24311c67a56869c966668fe9b175e45901ed6747748fa63ddbedf1db0870086514eec41ea663bd0020bc6fd4eeb1879cae51fc40910274cc9ff0ad9cb43a028e2327dd649e7dc81398ad629bbd2d8dcbcc753925fcdb55697de99a6f4173a1dbd762e4f40e251f5666bff4a8ad486b48b4edaa720878bc66ce3f54cd309b7ab0ba26673765d8274af37a82763f90a4a62021dcbf54691e7739786930f24fd1bf43f8c09946357483c753b89ec4a4ce6676a82c58613af00d181b443506df5b59fd40ada41f9b8b836ad1f38d0ce34d0c20e725f7af5cd58b12ae82340ee87c035e947ae26298d0bc568bcfcb58dab4f9c76565f7af5d338391888fc85ae9c86dd06ab4ceafabe8a102c7a9d449097ac1d2b948e2d1aa9e891d5fe96c7b51a4dc0b49e7e3675337d4084c1e224dee2306cb496b43c6c38b0e2e9b0b9af0ceb5e057a880ab2a0d42c7cf5f994fd7f7220b299c2994ef366d854da082de4baf501d5e1d1b905858adeed098a7b797c31c7166382040cb81ca70e326cb90fc7227d5870e153d82c3bdcbb47dc5f3edc056cc1993dbf1dc2436639784627d83c581cb5af21a0d29bd06f0d375708f4a7d856dac35a902b19c15efc35fd3de62081241526f7689cdc32dd0b62643e44e691ce8a694340dbc680d480f0f9c4e27b84de9f5ecc72ddf7476edf4f69c8d6a0181cf9145f97d7d06613ec31a283735549927cde09873ef2f96cae86d06f51dd55884e4b165cc73f5d626981604442b7b888d32e146f67d72f1da390fffb5da5305ab297d059521c4c081f669bcdf7a8b907cdd757f2ffaed1cbe3f46034a30191d94c7ff554216e1a4e356abbe739313458926038d7af7dc6bc993a59e1cbf8604e458bed16dc3db17cd415285ab05911c4495121e81e4ef838ebeb54cc7d938501c44321672a91f8da23ee4aee052838911b3379ebf4284e89018eb8bb60d9e83af230f70eb373d7af4b7d8a6be0a691072f8ca8a9db14b0f604abed771cd27141f6d9d8d520ea3645734a4e98e8dc0570aee716ea791806c61ccb5bc85a86095df9c62d8219fffde2c4deff3ec6d17a12bfc92b76763f384270756a75c2fe96d823805cde45b914cf66c00625228dd9378bbc4f147b8e2fb229318248fb4101f89b8ecfb14d2064548078c915a2190b253947ea8e300fd15e6e870b07ae5733068a78ecc3d83cd3b83a8fb2d6f17cf724f2f364aa3cc9078d68006d7b8249134917c71ddb8f164a45bd8c282fb5be847ede46253148c4ba883f23106c201e880b6b02c9c31ab5b24131f792ea97e89c7924ca95eafb09d0981a785ca22fde7c92adb157412021f1f5be595acd3e01265fed071c9ffe9f33032188bae45891d628065d311e4963f1a98a38e7a15311097660842316f88ec9117eda90fb43407e139e8dbe213f8298a5c01fa12d7d212f07a6c9101892df7c0c56f747b097f35b9b9cc96614a786d0308693f03b65377f59e65e4d6d7499323ad46548c9fcb0570a299991bd2c788093041e3c91b25ee1b649cc40dd45c4d5e51daefa0e1c8159a66c86a7e6745f90176447edf80d9b3d64f79a5330ad694c535c59c4499c6d4ab98e1710552743e701cb966b381ef87bac1750ed2d568e7fccb7ef1040277c1089b6d535d3ee2c6f9c63941f198c7c84d6d176759ee53e569a56f745bc63b7945f0d467c2771230f2f54c86f63002f3e2a4f955549057eb90462f9ca85f825be82bbf44e1b572faf01c6bbc4dd211a92f0b634f4f65c589051037e09638fcf773ce76714754859375be0f387519844686f31dcba6f92d3c3ca600d691ed0bba5d3b92534feeea89085cafa1e850cb6a9f0e5140f7b50f73ab7a22e527d62f331905ab8187eee24a0c7ad58f34126763bbbfd645be13ecdde60f0692c4aee7f04bbf2a826bdf3d55069b1936c4f8e8e08189f54066a035c950c7347604b1b65059ca87bc882a3c489b2fd35f376eb05f74ff46d78de47ad4804534f544992af1b7aa5bb6596a6f831ecbac6ef7de5e4efa723361a05b4c6e091b70a710bfa65309f11ef64c2a579315d0fccc82d2532da69543852a6f0b143f9c7fe1f5bfc8d2b5113a02fcc4850724d25d1e54e53f79fdeb1f9898ba3765b84adb5c7ff4031f3d9d3552d7c3684db06235cb0a8173c264b5f03287a761b0e7c8eb7cfc06d58727f7a96c69c181d53cf32f69002170857fb89de953c10aa4627958aa1662b0b8f8a30ec62f29524c4ef7a25ed25fe631a3555103a991b2aeacfe7b8a3b9245132441cdd694856a015af227430da72555740eb237e583ca4e2baafc93f81fd3243f367f3436402992e575368bfe71be7f665749fc8431d1f16301343dc8561b6abe038b6590e4217f72f348b0314a320dfec180a822066a36e7b3bb0e18ef6e65053b8ad1110be23587eee64642baf09fa1dfeee13b8bf39d2e25097b86464c91b930f60d4311dc4398ea87b4bf2eaa8303f4fd2e3d3cee72aac7a81c8cf5467f4ea64570b38080382a58b591e33f907679c323f5a393eb75e22e0f579976ec9c49edf1b1cee26e61b0cbf8546b4872e887ad0bce0b1b5b1568cab7b338359f671f8aa33711b2078ec0b6b872c3e3a237c2251d1dd04dbdcfa32029b5e5cbef6e540ea2770879dbedde9b7e83798baf029dcdc06b9fa5a40335b0ede62ea44d206beca8083f946c2d7f0cc2fce8cb09d79f099e4dc5bd7e5e750f7cba8f59491beba70c5113ac38bc066d2e45be0c43053a5b1f2aeeffdd4ff5ae4eb9645553bf47b047e8213bb218294f090455d9db39e444cb8987e711464bffdc495a130d9904aaf333d49d68d03c24fbaf4cbe42d441591bf00cfdeadfcc76ce00ed3cd72796f986daca7bdd62d3817ead0f240a72c60a98e4fabeaa8b1bc56c767a1d30e9932e9b336f41804e63d6fa841995a283e6dbcaeeeda3d0c6ae4e6ff0ad4ebb5d7dac78e43f78e20181a7f7daf8ad9b86283f1a5432480e10f8941125d34bc701bb15c853b79c830aa1870f0828b665f80ec70fdb8515b2f87f19288ca88ef464dfdd02087426e3f847d6a8a2265a92680ee623db42875ffbc64ffe7b79a2b4056074be78d1a27528e9194d1f7e049144ad2efee9f727758952cb0b98e3019651c17f463b6c99b73b09e174f6ac3ef32c7e03e97e0f70843fa90ce85b61360bd8875f31b6a1673a9d2ea1b8ce1d84287dd5f78c0e17fd1c7d3d781d4970ba9508268719712cb57fddcbec70fc5e5eb1b7599c4f209d27aec084af02d99df9c27f339966014aeee75b66243607fb391f678d44bb3c0b7aaba823144182459e049c13189fdda88e11c481eb807750add21cc59348e6ef8093a27d4a41da03f1ebed69673f6ca20d7f77b3a4e8c11b177a35b70a8087b5b4073e07a39c5755afd8f18b07bd44e40791035fd2c78ba7206840b60cfab50a9f76d966c2b970b7226c371c9ca1ecdae6f6e5fb17b53d71332ccc673d0fe53a9d5312ff3a11ccb4f4062c827875caf336019e29c62a3d25da58473efd489ed2583c69555c3da1bb8f4750413db175b97f51aa4060af2121804b4fa1d02d586e3a934aedaba5b6476ea020fd5eed53ba2d5788f399ac7ff0cfa624345836987adee8464ccae270f52c914d0b5e721b61ca83b8a7c3bab01002d9835af7ecd5649fabd9d71c6c482113ab02ffbee8034cc186c7c16152580be455dbaa21c8a5d7f76e743132bbc277ee4e014ee2d7c1d7bcb114f504fbde40cebbab968852703190a0b3df80597656070ab67d7c99cdaf16935ea7212fb95b3c7b51b47e02cafdd5d3073687bdba37e851a10feed68d1f69bdd35c48568fc7b8059c6885522cb95185ecdadb5124ba1cc33f8abbf696b520913188dd18b7f2bbeaba3720e90be07e29d330edcc3c491ec000526672610cc5ade7b171dec878d2bb59a4f30fef0fc64f68dd2187776168e8920b60e28292e364746a892147d676d7e9465e6f4c93b4670c34290b5c9f85ad532a5dcf51c3e47546189588ac7822c0e77fe56fbb18e2f14bda66d0525fef7ec2139f81753c5320fb40296d6cfa6116e2d60a89a10bbc7e96446d6eff2f20ed6d7bb8b16348aa280285a7481fb9ac3a59cd3055a4e8bb7f79e69f4fc989a469b3a72bc7829573daea3db1b12b528ebbbaea195c2d3c6a7465458efb37fbe484434a8b4c799f2aba10ecbb311641631b949107f5a07343edf6f5cee9d0f28bcd9aca39a8aec249561527363076f2d3ca6576aecaa539c25c9d5bb1940b19f486089ad974a89b5a3f7551b547b4035b58abff5033b1dc8040c70bd9926cbea97e3b50cd38eda6d7c6a010baef53ef6436d69faed94ce7e82b126ac96d7c7d24f69170875de4614c9c23d8a98fdd1388f583dc0d13dcf8747bee1ce37da0b1f19fb97eba6c235713107f0e13a1c61c241522391d8bf87abfc3e886da5b601999ca01dfb8dc30f4d5d420459bdd9565d006403b329a15db1493603cf08f60f078160918253683d70f47b603849bd19d17495c56fee6bbb63d5b03a3c871f9f336f43dbc61f3a25a29fb8ecc6054f10e646ed510d4ca6088749b315fe4abb18e30f52e4101ac030ab0603904d1a17a4631e748fd56dd9abe64c487c5c7a51e2e0099492a76b82c652d0633413b09d3d12a333680f798c0e488776579d3f6a65f20412ced53c085060a6e1c061ed6a44b97e31c20297479875a1458e0ac08d08e0a8d281e0b2db349e2f831c7ffc051f21577687f7f093b13443bd09eb264236749ede9111f782dcd1145331b503f63812d40b9d36acf7c14e15e7b088981254748e3ee8b03385aec4fc59e54b2bc6f654a0f7ee07f2fc308cbeca6c283f83cba91ff86c058d6d143e909c21889bfcc0ae614260b2ea2867b4e76e2314431f03dbfa1607572ec075067824ceb67c2000e9c0f5dd7ebe06cc8e37dcbe95cb6e64d2c79fa0f03e0939e55bf9d21bf5ba1dcd64174cb5931bc8e4571b26f1fff757552d9c1e16e4cdc7a3e12417ff2f537f22f6b0949d94f1c47cee3341700842422ed4146b1248968908b3ac83ac51728eb01dc99f7ee60f261fa52df95c0ed78e23650f6e2c93ebe6db7999006984a0b23f826854a2b4fd5795241035fb383fa4fd88960fabed5546e6daf3757df0645396cc989b502444c0a612e4dd97af01ea83e4af36d97d5b11ef7fc3c931bc46d97ea45e5ccf5e6bc81a18b2d8769ba5ca7f2265cbfc6c85b0bf1011e6cd11ceacbfb2c47f688bfad6b8dd8110e023b3abb7e9bdb65de15b891e34e3b399168534219dd1ed63d37954490a596c1f6fb4f5f5e2c1df44056605d4934318dcf4f2d96c0e8d8c085d71a9954642d47aa8300fffb5782ff8002d8ca8d638fde0d29e0467ac01459e526a3d643a453038f6ad639d09ea8cc3f9388763a5ca4aebd90f1bdb2034016fd9ea787e8d6968a280b558998620dfeb18105ccda702e74630cf8890112ea6c11b7bc2abe8b765006fcf56bad52111b9873c75ae85e7bd390166b14e28f81ddd40a483b2f3350d9aea84c5c79ef508756b4438cee782b20b715a00dd0d994f0b6fee235c55ed49b71a5a0e8988a5ae67efb10ff573d9af06aa35db0467192393d0df0a71b7e702a027db97c83c38ead7380a61ead4f79d70d47eac8cde8180bc8c01a0b9c02a1e9e388fc94b62b6a30c71d79676b0e1629216beda3e1bd850cfcbdc4efb19be87f775fd0cdca128c34fc0a11661b0a1e8b4997ccde0c6267a14b4f67a0169ab23f307adc941a19531e84dee48737b3d151e8540ed3a8774e6d370d98e9159f9dcdc162766430b05d51f41499673bac0d3170193a21604c97c54260df07491b198f8c9f44daa8780973bc437672b142f09e835fb543ae82d24deff180a72b8db4191499be43ebc0f5f86fd42246132949fda4a026b6fd9a8c6bb23844252767dbeedbea495c753b9154615f133debbf67c3368304f7d7f434a31b9d902de75a1f7544f98c70cf387a1c434ccfd6a585e8a3bb60c682c84059889ea9db1dc5a4ed41024fde1d6457feb48805ceaccb1d3b03c5d1e1f448df7980bdd5ab615d08d3d68665e4dedf1acdc1a242863ce6d5dd67c85eeda8c451f33febb977b517d651aa33d4072199e135a8146b9ce363404e444540502cd51874facabdd675709de530ad02db822f4be4ec70f9594cdb0d1c3dcf5ea00cf5c37d55bd6b3e2f11d00d0e548ac87cf9db4a132a6461e5b87cb598c8e253a5a0c35ae5463a154e561d47a7ccc4647e93efd390b3354d3a861fb8f9c483f1a36098bc0df7b2f25fc7c6137168581603882a20099e0451a7be7674e534abf072afc41f54346e6befe17aff0fc9be83b840eaadd26d3a35d9ec0197cfbbd2d69008d5d34caeb4d85b3d9c78e7735003e958d1db7f834f503d7951902dac812a77e63e964ba93ede3e36bb0f7cd7b53d233a50378582cc474ef0e6dc93894f42b6d27ec6f5c654c41557472154696686025fe65078ee39717aed21fb85f485e5c94806f3cf88af405d29d16ce2caec74e34414a4ce280f656db8a37b6960dd5a2bd1779b3d6296d99228ea30cc5eaf9052816bb2f9c2b699840ddbbad240be365ae9312bc3d6b3d630dee21b65b7385eec924bf98030e7946a374b58452690f0d309e423f7778eecd5b6599b43471f370de145e6f604eadc6cdf62c236850e1020bdd1224ca77083dd39d12ee980bccf2318da09cfb168e81860c2972aee7e2ad07fa89537f90111d3e3b944bd16996de88388e071c8ca3df955eb3586b579974ec9db0b5dded93d464ea27b626b4dc9bacbd2f990bd87449c493d2c0e9c78fc0816d8d302eb315ca0d50d414de14239165c38c380f238925d9548e8f6e604afa8f132badb80d20670115a24e42b0f5287af2abcd72956bdc9d48f0ae43495488de368f15c5213b1307e29a4c9ab1d9c8b5f496417a55a1d7d818ff05b0ab35d4367fc34e9b17ee36e95fc2f62e3e58d9dc6e557a708cb37d526bc47cfcae73445f96ce428218c1386d3324344580f9c3b80bee629c612a35d2ea45fc717998422022b8d7c44c3d815c06c8ef289f44ee11706be045fd8c69223d8c6b55352c3543cc89f7a8dae9797d82b40d20c2c1c3af48d3dbb4876480080ba1b3f109b5858e3b4a8975ea4d899a4df2787311f9a859392f3d322837e24dfc8aba8d1ebd99ca17037574a6f217790f8a1669b57306d9eb86ed05088ff6b9b9516a719ccbdbbf0abaa3ed345f8de37182d14cd6b746f508e0d3754ef32613eafea9e4aa68b234ba79fb27bc1c51a01ae490629b4ece763546d7cc23ecda253797612f701a86f2cf47646c67b2cd78b4b83bf52dbf08231cbee150ae0178b54626799b176cc0c2f22dc9025ca86733e404b94bb4925ac66553d94b18ba698cc2b2d96ec7e3c66acb310f32c486899854d2f4ac57502e25b80aa703889f1572514469f0a70901b2015e1f44c7d59a71ac29d3623e80eb0abbed33c12739e42e9be3116be065d9643db9e1808c1c028493123eb492aaf93b190365cc1c0f3f8a4997b925997fb746264c3d2e3ce3289ab2931de97b56c0807854266e90a98c4c03684967fbe00122651e1c95feb3767ab1b7584a200da8a381e95cedab90343d705fa9792e0f21bea13764fefb1253ee3783d81faa56196adbc9f192944ba0253983c1a359947de283a0ffb15b8b27bcec0183b040ba7b9f2efccba5746237cc06dd792da5f87f58b260d3f645a35bad7a3842440bc03608248bd46e725e60f97e73ba5e39c28de7d77fca15e1e455898630fe2433f0b26e637df234b7c68576494f6a803e7a11569a06cb5558d57e18bbf29d99dfd2579893da0f416b220d09107973d9dba9726ea2fcbd00d2fe3e21be8509e937ef8e505dab12dbb4fb607b7bf7bbb239d618f798698a5c76e8fe6e3af1285c64cebd5c69f7e34bbdd7e69331d32c527f896bb9235519b26d1a24c5d53fe43c8ef74e855ec66ad9ac41071bdb15ad03d64ad37becc95249df1c1aef377623cfdcf3a793e4208fccaabe2bd920c3250b66a2b8079bcc1d6bf37746b4099ecf5f7749324ea50e3a6eded8ba97a9e77eb356188223d767625ed1b212dbf3c0cf328781557e4697530571161c1b1d889f43cf35999848a1096ba255e52e9ce20b9033247aea72c4c2da8a00b92d25af7003f87f652d9782fada8ee92673ad0f6bc3a3b9085bcf9c6f35521ff9976963d93afa804fac6c121ef3bcf53f73cd4cd71200c867990527425df1fa452090acc232fcc0bddb6e5a5bfe550197f6a5a337c472d9fe6cbd6d249c8e1a038f4392133127c6188446619a42809596c4dd1b73222075379c9f77fb3851059dad291eb480a21ac96d9c2fc408663aa4a41cbc7374332379f0524cb17a63457942eb578d679644365f17cdbf982e77295f0a8f2002d26c2d317ff42caaec6201163046872d2bccc9215f42753a01d58dbd509b601326d7b927cd78561013e29bf0a1f1881c883be97d1d96cc3607db388696e91cf057ec869ae5df15f4014fb199e562797ad619fd39f9d2aed367119382837f3de28c33fc526e31539dde30aadaa5a143903cec6f1e9afd025a4aff0479c067a92fed3583161176f754d10eee7989b4cca6e33ea6f4a91fb013d72ef432f5a94a1fa37984b076b7e9610270e53e38a5fe04f3960a83cd419f463725cc76c94b06fcd68765e644fc110c9adef7f35b7cc0f1937d0392af69b93b916cf20de457c70cade89081234b579dc1e08c5e993ff9b7eb7af9ebf6a2e53a0e8cd0bfefd4749951236b49bdaea35b9eff0c499bf8939c241554544bf10b8ad60ccc5492cbf5e9eac06005b72cdd8f5ac2df7a09ae75e966d67c965660147410745093744332449f48d67fbccded811cb26db98a6a87e5d846da79bef6e640e54dc3453e4412f49842357d729abb790d551ed0c633b1daa3ecd4c42cbb6a367c1d8d3297d78040fe36e4c8819a2fbf55365b856611db0eee50d34147b8889dfe6f16222802616ff9ac4d2892d6329a1bda8aa2120cedcae2fb40b6b8f429bf92c8c5dd99cf9ecab02dd7644d54aa5487cb15ed712dcf56a77481ec267733e261b2042a91461f994c40ea46591e8133c390622f2c7b6afa644300ab3a4a904f92b43bd3b86ecc24f46eee945f3c9d80f4b1db2feafea4fe42f123ba9c74264e4e57d09eb74f8db2d13e4b1706b4e88245b6e6b754bf66a9680554e3f3fddf26bd212c5436f14b8c0b386a97f7904883dc28ed8d12c59945fe07faece7eea121069cb7bddc5decfbc9e4b1dcd9d8a7c9e18f577acb1923182e807c9e224e56855250d9a0529a5a4533cb89ad5592ec9d7d718c4627c1ee6b1ef744c14925e59bc8c4fbc640b07bb272745bd313c8ff47d758f4b9d0c7e085f6f4b91d077c36ab918083f84ca8398cae678d17ba81c80f19cbf79b6b32e3b0dfff4379015a31fdd40cdbfc21897b190e2d893ff2c62e3d6853fdb3a30bde3201a14a9fe2c7bed8baf1699a655b28a3bb4db513659e1c18ef776eca1d59b8548361365550cbc5866bb6979cc1262a70dd4f7b5db91177e9d3bfb2a884245b5e8dc87064f36f2e4d0ee3ccc8dcf368c89bbc42e3962728f83fb331157e75ae98495d5e9475bae176cb006fe85fc9caf51d1b716ea5e9178d59dc53d9b3539949dda869ac7bb5c648cb96eac2f1b1383e8cf472c68d5e2cf049c181bbcdc604bb7131f976b066c60d362ca41f3bb29aea10d0acb3f78e506838ea218571d6d7342e8177b8b9d7c70b344b05c6e4d4d842d03587fd8b82693f4ee09dfd498cfafd3b1f493b4110b28ceb7a7581951fdb8ef5ae6b6bf04160bbb22a5becfdef565ec193d9c7ee1770d686415c16f69c8916a6c0c0c7cfd31e258d50c5193507d19ee8668e2468f6e8312b28224eae52cb210cf5eed7cf418ac506db414e98dd5407d71fcf1958b501e703b82ff1664a8af84ed45d6499928be246523951ce78c8dfb746066f665aa53f3578ecc7c58aace496e57635d4ce0bc5743d14eb80e1136faf639aee39efbb80e9f1bf97741c1a2b09b19f1429fef1b7b9253ae4561e1fffe8fff35e7a7b2af349a9112b1a07bd15d1bf41c7402925fe3d901304f739d2d78aa17987d007dce07a2a4b4960547cec1697c517c0578ee2270907130c39163ebcd29431e49ab88fa7fcd3baee0a3ef6ffc291cc529016ad9f157ed83c27d27ea619ac235e3ca647f6a513466b31ed7db5c70fae9ddda4a5cf3ee01c300aeedd71fe2926e5f58e518faf71b480d270c7602ea6844a452114dd0b95a78fea51a44509730221ce58f59ba257ced4f4af1c2680bd1800d17340f104054102d0e51a49c3f27fbbceed7b42042c5a109f92c63244be306888837234b298b231c29189a6b30e645bfe332bab5f5821dbdb010caa021095297239f1cd9cb7c1c3cb3d378362307ba864134dff3a43ebdeb1e435b7431b0fec977d07e54bc83861f0d16d0956be8a4b0a7528651e5580c028238a808d4766590038faa44535ddb23b36736019225aebf842050692f6a72a49a6532e6bfc6117b45013311464795fb35291af33c2b33135602c0a1e8e2ac41b55d8e862a2c9cfbbaf9ab53fbfd30f600e0f1e2a085dc5c9b9e5984a85cf35a61960d7fca166281e3bd7574facb56b4b5334d7885b1f4ebc3478d89f435f26f2d83422c06100cbe4de1140cb95e51a7b074affd422c27516b82cf3a430a13e087c9df3364b5f5f157f92973be12cc5f81397c197c70fe1e02f4b11e2b45f26efebe16fe7c54a8dba06a08528f85214cb60644358b1cb3a22801b59df385f85af0f48c05a388bfdd95a843219421faefbd5f8ad9f48c12ae293e5f425226a0451ce1c0e170de8567d6586c596275b3c90599d28f5f4b8572a50f00a3cdc484bdb12a380a7aa2a41ab0eed67270fcd6593d699dce01d7769019f86c2aaccc10158c2273f917919656d3d033f55623ed20b3335f0ea2bc7097068ed44f95c9dcecdc6ee725de07c6bcada0e76a788762b0058b98c9b8670df7d936eb9b0f3a35c4406404294491cfacbce5733a6e93d177b2d6dda7a963a923308514958f89c50c46967d7bd1bc2bb76ff269fd8ed5b3e829998ff0fc4edcb97afde1b78d5515556d9aa5860be3455d556c3e2c7fd974920878426e2765031b3705d5898f18711013e50ee069a3b71f0bb7523fb7fbae05adc77757c152c6d8e34152741b4092ccd7ea2c036179eb7cd17858afbdd8caa3a81ba14640a492630e14fb1f9869e4fc282e8f7789d27ce76503b404f7dd550c75e952c22bc6f05a261531d4bcf0d22e9326aba54949c5ff350df6d7fc95d79095b4fe53f9266b1eb9a6994bcf71f4c49766f325364c6114afdb9381327ecce0961326642f6f5d31376d93ed6669c76ea374186fc756d8d854111ca940149f7ce5684d8b34fe61323dcea4220854c47d55b26dfd72f597bac032e4b8abe3d9b60248e621b04ff1822b3e5c922baf66811cc67656dfb5181c52b59e27bc69062c8b1982d007f098b18e512fa656e6480a6704b3f453f1e4adaa0dab7f1810af60de7ea61ed27cb130d59b9fe700a5c389d311c96e864887cf24cf9f3735772fc37accb2567640f590af722fccbf4a738fdf62091dcd357c01616febe8ab0921f4fea85a1f89e9b0516a7951dff960d27cea6a159abf353bd4de6303fbcf430055c885efe273d38be3a515989935755ad192be515dc2b441c9fa4d89f948b1556666e9f647ca9ae2c7dddb7670f9e4973e56c35eef8e5f18414383e0597dd09bb76848ffa804bc5f8e733f7dffcd5af213a51d80c8688239eb58baa9a4f52d4db92b278e9ba8945ca803c611be163505f20c218960e7ca2128983648643533d60c5e0a058b3ccf54951de3c4046b0f4d3a0a73bb5192836879809b3f0fb460def14f65070f17d9e1e6102d279b3246228c1e88a902ef6a7a5eb06e10000950c3389dcd059fe0208f1b89169ecb12764048c6e4d50d54dbc15896034e0d9a602d12b7a683a62c5fb695f714ac1c721c010071fcc1c96953e7f7a01f5b50ee3b77402b8603ba32c3f2e5d8cbd217e7a3ff33ce44e1dfa37f68ac7cf6baa28b3f3c2177fff864ba19be9bac809345d9aa95533a61d7a8899a9df77b4e0e4ae7d7d6371b58f40e28bd9427f0f7821ece9c6e0f34b7f5cc924222692979a8e28ab1e0018445694ee52bfe0b3485011b3d05e3a84bcbdeb43402806215fe2ce1ea49e4115129da8f95d166c5e5bda2b3bb5380beee21e4e805682272bf600cc19d0c5cd6f09aba48a16a58d882f5e980b011dfc39a4ecae08ccf932b8433cb2a1975a4d2e10cab12ae436ec3aae247fab1dd5b46ee96d32610c55cfd12edea53c6127685b0e40f75f2f8f307cbf7309a46f28dc959beb03157c5ea57c9f2dcf7496f2c7fded569db4607902544a955d7d61de1cb4a1ac48ac86db5dc37e7258d09e84111c9454cbaeddbc0acc38d0a5be5abe1bd5e3f92aac91969eaeb3f668d8e1a5efc0eb82abd70f20efeb6f6d06f0c29182ff4919d19f0455114427fe2515c81c09f2da2762b65e6d5ab9d8b3aa9a001ff83bbb56640c49e15e8dc0d5ba0eb9b306b9498d1bd3336af23f5becb9447e30269021f60c7cc7022c9167c24d4b1d308f1e20fafcb7f4e06084e15e5a76a38cb4066342f076e67f2359050c07555d5c4b2847b72de90b984b905053b6b9d7fa49a5698239820e22ecec80fc0fb3dfffe3dfa60cd7f1de575c6c9211f59482448d761bfe0e28a7b12f52c2da8eed0de1fe4b26402258d7e83b1f8de03e900c302a8062fd98f119f59394b1eeab8c4ec94575ad9d35a55c128fb12b0ab933de87c5cb24c9fe64cdb6c1b9377f8f1709815f6424693960d79c002b52d690085e1009604ba8690a29bc61c93bd66116a8cff62074ed5512af4f3894ec8be894f5959b46bde3016996ce1acda43c4a12927cafb28371b2424cf3dcf4e072ec610bdc268564c1ed0b7db694cb5cf772922f5034213b3d77781650975416d3c1f609af5026268c5678443a78ce4a4f001ee7122d758398cd3c752d0ebb76f692db55d4c130ed8a633655236edb568e1c3e228c41b742ccdc17d153ec31e8228599591322aba0053dcf16381dfc68faf07b488419ee621fcb90928bd7be54a0c2b77c361ba027430bcbf1432e3868dda15cc1c35d22cadac330209b776ba2b972bd250353166a8df6b04d0a48983e7d5a6af511b45b6244eb7de34b763fbab2bd33be447315502a260891571422d323412b4d35c6a212a76c014465794384d6caa2aebf22a5c364c25a27f03ae00d167e292ff93cfec2496d44a9af2b7de96cc2925d3d09cfab81f32f769d61dad5a03aec0423be785a7417cd7bf331f7cfbbcc893385d09aeecae00ee628311714079dfa357cf317c26e922423f736b9200c111198611e0f7587b27fdf57549fb094cedd28cc84e3e37f05d10784e0c9c2a7b9b1f4979b342800900ac9f46f7a938ff61d47db18 +MD = ba074e01883b70723bdc5be86ce1500a04bf8c5368b2ed33beab75e6 + +Len = 113672 +Msg = 9e50fb61ef37f4ada395b0380988a62804796b4e6cf234a0b1af97eac1f791c02c2dcdb786a223d50ead60458cfe454f802fd288789cc446c2755c57431162f3a7856aeebb765632162b1c6dffe6c9078b75c65706045a169435711418739c295583586f545b93ae05386c1828eb3b376e73d123dcd101f871185f8708c4474c804c21a119fbe43021fbd9aed1b3a2c772537a54c3acbed49f46ad1adbac6c436e0b4cebd4fb50a1b49dea97c0e6069edc3a4952833d9b9267e6e33458d511f667e662b74b06dfe70445283cbe2d6fa6f752c786e42b9f1b1120893c49e4414db505ea6c47c29aeb5a1c19039230e6c60ac37b56ae1fd255e51e289c748401309f916c7190d78895fd4a4755069672e65cb5ee2ba8c03d292b0547bba15b5b876cb27130eeeeb2ce37f63a9be0071cee364fa66e9cb7e77f2a006f019a11563a658f801029af1e7c4e48783be92debc7e0b92d8550abd9402b3427d6264ffa31d251217908c1d6888b698b9fe9ade757a21c0bda8c45195276ccf7a20cbd5055fb1fdcd355cde2db3681fb2da8321887c4a0c6d31a2db19f53ee67cd15025f8c27223a87d67a485c97b74e4fed6287408d6ce8dac10aa80e0ac300bf09c630bf9f82c2fb547112f2f5340e6c81e53b6847a9f95648840786e27249e1b0b3c9d7ac66fd98965948879a20c2eb2d643ce8387e7faf7844d5f12423cb99d16f34ba94f671c666dbf002cca2f336b78793a9a814044c19f21a3619000c5036a279529f5ca8ee8a9f144ad4e228b4e7f54792e1920f97f336df3d062e966fa5f59e8517bd2a76cb4cbb49fa09e9cd8757608a2a2129f7cdb62bee36d8f15ce70fad3d42447dc8f18aeee6853fbfe95d54e77bcae9d8d4701d0631f024a381c49aad616a162b4ac403b409bfab30703395e34c0a11a797a51178ee7b3a3645033ba7d9d55ebc660c5c159aee76c6cacfc15ce532c21ba6323a8a0d2043320f6e9ca28dcb42b683904019825bc70960f9815a2e8a23be6adf42437627671d49cb65a66596eaa3081955c9a74ec780987b7de60f595d174b76ceac11d8cd815ae33ebc497d7f0a5f6f432cf20e9eb3db1c5c0770e997aeb2bd89cbc77a9ee5aa7ecdea21c72974ef5ab34a4be5732a92a3c7c63980fa0c057e18aa7e5701d2a164bd3ad5bd0f6820a24d2c9b196e6e23d965295267aeb8ad7f26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a138959c693dd2064242f5a5f71cd310e05679d59bcbb797a7772dc011444a61b9e635913c0172b1980a559432a76bdd18975a3b55db9d9530a6405858ecb3be2b5d7cf4090ab6877238656685eeb263e4f0073f49535ff18182502cef7c1c117c2ab6353eae00005759afcd7f67593debdd0b41e4b761351097e7ae4396f5f432ca8bc56b5ff1b4bdfa9f097db5a2c373cac0f3c67c53e86443415d03a1d3eed5b968350db50e0d2c77addb0f3e21bd3355e2c55d06aa74033127c99e413869db73d5f4a431b782196d6692b2857853a0eacb27170ad78063ddf57471d985edba864f94bd5a80bc1b5853c0f61ff95f2315f4a982ed5d661ca624de3cff5ee3096d5f85b793ec0388a4fff6486247085043f9bd3f22cebd842640773e1735f23e95605821727bf107ffc5a327e0c417bf1134e29a4f8dff30ead2d023b58d93d09b0c8c997a931d0fb53f48233ff2e5a5ea50aa32d82da3a94056695c5ec83045eabe837e10d3e01661d765b8c475facb5bb7848731203363d345a3667798602510e0ed5de9b0d2a272287c6712bfdf85d1e3f205ff0826e7101b2ec09450abf48a3e1aa749ac7d3a82ad0cacaf230c7be960833d963806a993616c0939936c2ac300abe8c54938550fdf96f7fe51fa040ea7b8acab425b31b992db8edbd3293e67e30190f0f9ac68762a9bd794cf30b4be43f2c182c98d061f3a0dffff927ba5c55fcc4e3140321b52388bd9e6fd390474afd21ad110249d10b163ab2953dbf787c16c6f2abf71b42063f76d795e8b89ce55c726fab8aa7d5ab38d3ecd89b2ba1bd2527221b9e3e97d476f00d075a0ab27d052648445971d499aeb1960c6a863eded1ef5dae1f111a54d434260e500ff2da9f451f22962f369e1fdc9977d156b9a8c4278aaaa31c345002490cf0f24dc2c3d3d8db8e6a6a6282345ddb61f92579e3a3d7915851e84d8ea837a5f5694e8b0149e566d0fda8c20d943b4614097ae65719055a0052fcced86d07db67dd9ab65da877a7307674bd07e77ec1d72ade68cbccbbcceacde01df4f9c0948c75b7a99c999386f6fd53bb37d72f33f184d867096400d15deb1da4aaf56abaae5a2fce89c343eb69bccf24660a5486ab3ef04bd78add50a3d43acac4090e3413b48a8cebcf8ebed2d86f615c28f8a14d81ae7cfee6583202afbff608dcb3ea03aa4e4a89647de7797cbbd8e1da206c1f749b63461f7c5dc3a43592401761c4c86405722c2b164fa6ce3cf2bdc8d6cf68403e6676dd4eba2ddd2305326120aaa90b366b9ccb63dca1f67917b79921b2720c1fee58cad8318a7f11b7a763f984edc76a9da1ed6c77b11dfbb099f50afd8301c764b28c21ab20b5871066c5f33addbf287003393809206b482329869798e447bd2e4dcb310e39a50e78392e17b4c11cf84c8956cf783407eada30f1d26bdd0589b6f13011441b772d57e6466cdbe1056299fded39ae361a693b75e1c35fb563b4626562c8330e546d1536b6fa9584a3efbf25a57e916dcb4bb0c2fc715ab68ac59c730a5ec55c64551af126c9cbf31e2626c927a70b23431aa0ddeae44526a244cbe1d0dce04bce6dcedf3de266779d9036b31bbc039ea95d738f5424094ed2ba56785b496e25bb3d9ac7a44c4c5648b358aa27c36028269d90a0e23a8c7643aea70054ad5630524ee473030f67d84819f275f6c60c07e26161d83b2db8e61da82541621080b5bc2715a901349d47c54a6edd2eccee8304314dff080574e5873038032e7bd4fb2050963246c1d8e9e6cd32aa78deeee6b595bcdcf0caa7bca9cf480d60f53a4ca752ced67bc1ff08d429a8a47b03f4761c1616389c853bb4ac0cbd289f879aee78b4245c4839faeab7e93692e043e87d623bc4dbb33e1713b870001c9338dc2abdfe028e5433b1d7b692463e4ea6b241ae8d2c8ddefb2321f48277b1e510e8489bb9cf3248b60c19f9ae3f6e6e353b0b2993b716c5c6472889ca8bae3d17a6903c6cf211cbcbf3f7a9c489ebe8f76922fad5cd3d0fa66b6e9fd0a4dd4256ff4ac89fd5f386794eb8ee5d8c7d63f525d04bdbd7cb65a4773c5c1d2b049dd4d9bd66dadfa020c805a5ef00afeb8735585b412e3b896ec653daeb3886ecf6991e323fa678df42c00006d5355dfffdc1e80c0655633cd316e89072a91f5df3aeb4f17b8a0879946a2723c785fb7f6da1bf2bc2d8b5af3b9c1ca61af95d1f3f1a8542410ff737bdcd6343ee76f2347edbc3009c409ba94f5fd8630aafa7f980e5776db9bbaedf66f19aaf7292aae6d979ded2bd137cf1b76705116b5367b45f1874b90d19933936dfb5b07a618b5d2682f7eb4ddcc0501abc89f6646d041883ba637062ae0f0fd69e9d8c2e6afe600cfff5917320ce8e20674e5a1e86e6ed95d32bd8e3048b27ed36388bb73569b933f7c20d57691073726f3a87c02575fb3c6cb639b5a26d4a24b070f73d4a352e447245a7223eedc6b8dc37c473d3190a218bebdd03101e4023132c16e732cb88e77966a6fc28cd5199b62c585f173ae1eb3bb20bf3d707d191675432de74918ec3120d540cae18dabe06008cab7940494381f30aad7e8fc517b5cf914a98f10a814822f77b58372acfd49da88081930ad16796235a8d1de35c04877b522652c2c8208dd870ae90097326eaf405b89bec3cf4849e228c1bf4095c633a1ea71c8041a4363f14398c3f5206cfb763a5c0b72d30a3c32c04f0c0c5c54b15d7a3b60a94db06738f809393157b343bc1d16b324b24dcd9a17d040f39482753a5a08a2868cde3be080b0ece648d01c648c202263fd7182aa87dbfa90cecdf3daf28ffa46583b666a76363b8e6451ea11f02ef5bb0513dfc6a8e8956e7ba5c1b1ec27d45340468b4960ffc1944aa741470199899479b34980f37cadd72b8843519f76cd27d58dff0fa973fb926c5e966608d67a8acbce646be01ea0754f040d2c94d3514e7880562fe849660329c66e119e8c24f86bc3a4e9f72519c366a793b564e3ed31b9bc152c75d68d5133ad4cbc3b113577da417f7db146764bf2d15b9e782f0d6c199fa0780aa1de16fa4196d8571c1893a7b678a9a6f95269841fe92a470b3e7808b9aca4ff41d4cefe41f0f88af34ab6549114f030941ac68ae1a0eb6a0f0cc007888e35cc1cfde3a00ccf9f4f3d485a617fd8e3f6cd5bcd87c5377459a0d4eea68ac9ad09c9d5ef9030a72f0c609e1a3ec138f7520b71f90b48f1378e77435e663ee36d30aee96d3f2c0c3a4ae3b8507d03b99ceab519d375eb82c780e8b499b7236018c952b4c71d7d6353935d23a78cb5df6729709fd7580b5086d97bc52b29c6c4124c4ba497ab9330ed7e336c89ee661ec886c4909f4246eef7e0b6e17d2ea783fc31f045597a1c196a53fcff723282fc439b078875951cb2bd3f00861a46242438f2f713770966717ccd1068fac9aafc6acedfd404f10b40395d1f4f8d00fb395b37b6ab9aca00dd774214157e442ca390aaa42fc7c6811beec3399a4fdf6b17c558c55a1f3c79b1fc3b8e918702a66677a70ae828861caa5ffa05f2dd32125429ee89bb8ef14fa37e41d679afb5a6c9625c6a99c1c03c700f79fae5afc97f82db519a5c6468e1067fdd821a52bd8c50f32349b10e057f117fbb9eef41d601086c2a7da93a03ec6f737728101a8ae571aca42eca77b642e31347487c3e1855794ef18a1e6a62a052eb972ee751be40cfe1579052996326797ca5be28fed0db4a162f66489ff5cb356ac60d0cb2c80cb053a604c5ed8ca8592e4f36520ec000ef343c88a4254dcb9b537c58ec9828c7b7562802a0eea336e68aac6793e84664fd3bb177bda4db0009383279238c60f0697b45f080073750c61455b87b05d485e89f26a9e1991e26f3ab71143df9f1253b359874cfd1c9945c7dd3af53f20ad235d0f495dc6c97aedf1fc080988b69c4a11788060cd8da603e099ec2cb3759e86973a3c1fab9c7e64ff7a964cf9b2b5d3f83ad0aa386da42df6a2f895d403226f7e9dcc4d8eb3f8bbad584274fb3d65d6b2c7019406649cab4f20e697697341c65b5d804d38b5efda43bf94e956fcb53b85469b84fe1c9565333a3f993c6c037376a5e188714b6ca909d61514d299aceabadf24e4e93a9742ec1889051397715e179b7666001d760f46c64c5b37bc53cc98bc261b8f69aa2dc1e34f42b79c92708667c750afd215f744b6c2274c0cb0c769022891b84fd70bf9c316b8f0226f8f0a325cac4413514649cffde1da32cec473dcb3ae2c9425c5dddf68cf85d10ea4ed24bee3888733e59e3887efa9d5b2ac00704edab2e19d43b560ccef405379987564745e43d7c2bc8b1ae8bb819e666556e6817d14de456dc96dcb80e74db851eb1b06843daa07b3579da6ab2a35f1d9bd67d4ff1832272b602fecea436ad1b99770fdbc3da908b34ce84b296b415bee7f1bd0c887854b66c3ceb7951c4fceb7c08cdf700d7ccfa2b0245f9c0e6bac8ee329fc402881b7043b71b4ea3aa7b632af96370773ca646acc78686cd95aeda030b9e0d0c5cc75ef0e406c4f64189214adb78ae9383bcdf1e80df00095b6260caff505de240e8d0d8464662d644a69440017627d247814214c0b7ec20a295dbaa803f2d40ef00548e7052aed00e743aaf0dd462dfe2941e03f999b19ff599c92620b2f184b19e7877d4a41f50194292ec732bf6190f65a180adfcd6d3deeea7b27364514a3333bb2905c32af2efb21b8cb3d547fa08569b0f6069f278d9150603dabbb2edee307b06663858151c4363046278df0f7817590493696adb5ead426ed9319d0c3d3556b4786c3d530976d7e7e17f21c5d9087a04b963c687da081b67f16e8611cab2cca7ded7312951ad08abc360c6b995aa6c8464f18c0af5c5cf83b5baf49af1295b54fc11da046f8663c47ab62467588daf08088b21e11c56fd4698bf6ef45b19614042a49e70bd7377d699f7c13b7c22b00426a93e86d84c13350cd46bda5303acfe54f804fae604c33683ae33b28afa2e0d41d428889405afb394a251a993686cf3a594940f53aac488da31e2790f846787ec847642da243166c2a1e6ee76b84fa4b6f2d22aa0d5fa22003b53eb74520b088942be62351836a3194b62258793b395fbab35d93836e2b698131e7643d367139a8757432f622e1d0b0779cb405b375bf6263597942e0c9af46198c618892a1db2dad782139296290a7e845c3baf594b48ec57e23f2bd663c7af59474cf3c2ab44a5c59b9c19fd4bba191854c3d0880846662355b3c0ee956434e6766ba3af20d28097fc2378c2197c5fbc51939f41f7713c1e4e7c8da3a46ccaa6dfef096e32dee3c520442f8306d3cad6bf054c25bd7bd6af5903d2941543b940e061a58e45ec57d3a468bece9842e2fe19a36791aea8be6ce1e4303e6c7b991b244df86dce6d5559f52ba6f3426c20a8ddf882146faa6bcd959847111e96d2bc182e82ab50e454be9ee768af99920c5d986f2c3c64d36747c09a57aaa0080e9a386dc4b561e3ee880e36744202671e82c591b65822b629721f5512799551953c01864f2a75ee7b2ccf836a59115ddfced1eac1262de52ac2fe62e7fc63061f2800228269015693336f78bb535ae8b88869e4ccf4ead2f3b0ea4e48a19d8804d4c0bcfeff98debf324a60d7df239a4145ea1a4a62edf21cc25f71c507b979ded8afa0255ca0c9679ffcf6504b1fd4f28ddef5c9eeabd4fe8dea77edad2b3e058a4986861ebdb914d30383b525b43b54d6b4f1bbf6a8fe216a07bb12f0875721800adaa1a444205f71daa3670d653fd0a708a8912979d01dfd43c5e5703257bb508016f89be881aff30ecfe650c7550e854684f9e572ed5cae0b22c5bad0b22b5225b60b43ff7f7eed0c83c39e3f1d66e7fb1156c938b865f2da5c442ec6f90a2b88424a5b0d5c54c640498f5450eb6245a2d828234fd3b2623ddcd14aa98ed0331456464fa6bab9f5669b9a0191519924ba43fea20ca1ca82a21f0d9cecf6061f564c8f70301d2710dbf4842474e2641bbddf4ac413a526cab3bd59a405c11436ca9f768b5df6249f1ceece4b60106b813a148ce7d9705fa0cf1235fe8872931fede9abff74c82b06a5d4e8c5076e07fb9b8e35abe275cdbb70c822eae98d0b313c95802b0925a2de0361545fcf5dd1f17ea6e57eb34809612549c117ad62d521334da3bcaf71348bb1fea14a2c5251f93ff91ceec0499b38790160f348a699566e5c8712cc4d58963e175032b2fdf0797bef3c6a9dfcebb7d8a9b30c4fcab0574a4c9adbe40c77941445d197d7b34608af03d47090f47355c08d17d12741c28a53b85f668b5129fbb0f4b5e81f14bb0d45d165af7db2da98bd360fd063ae4896270a5541269dd833a0ce6db1fd84d82ddcd2705588aa89f74b3f1b989952aad110dd1cfa4a551ae2701d797407a615b0c0818521565dfa07e6f2cb781cf161e1cd8b07006b196a7e8b7c59aca1db0c5cbd5904916b4fb3311d1b801d82ed263e99aeb3e21d5d3f6e7f659eda70a614782fe37f143bf23e1959f3e9f74fb8304e21a2941db5931248a853b97bd899d6a9749b65284cd803172a265973f7d54896d2213821d84d7b83b2e12a0f6e18cb4737fb574c2273aab11a2d6f31ffe6b7bf4785108d0a0ed3a61b78611385c55af7e68db60e31678d7d86738bbfec4f062dee58adcdaf39d3363e941f16d4021e320cbd11dd1e0623e30b834f5c3180cc49331660425c60d2aab8ce8487cd617d7c2713fb372cd2167825e72ab5642e62b7b248f8a976065a7a068261f4d666013ca23cb2bb027ddda342299e49f8aa81efe86aa751a0bce32aa44a07dc838231fa2a7208c7234bd20b0ca51a985387726841e62ce950d705431ea016ad5938984b0c5e4de9f3eeac05c1e4401f3937eca75b55c9cefaf72949d20efee5cc1bac95e47c029218b8c42a2e818f4cee4e292391343e71239fc7b57af12124508dd7613f35b76df63ca2fe9ee758aff73ce063800bdb8e5f33890c55f14dd78b11a1336935eccc110cc0e98f904cc6e8868afda44721650244c5b50f79a58dd039a2931ed7034afd9bb6719d16cc1036bd81488a60c093b16606460414f895d48853f6bca3ab59105bfc3d33e5671a76347bda8f030998e0f9d345e03d87adec603de4cf163574fddffa82e086ae540badd33a4e888cf31582a52b006e03349c73a8d3c2c9422d2a9a4a192f64f24b7b6c1fde257bcb20d393046c0120dba879155d4a341751f00b1d53367d2ae36f5a01ca3cc04744a08f9d799f5ef07197f6c7a3be9f9ad55c23cbbe815622e24e1c015aec8b957a00be246d2b664775818a2d24b761ce5cd01937d47046f78f5625dd5a5403c0dbbff3aa6796d3a057d3c7a848bb372c48da3ff45d89dc033b162c083109b563fa4ca4a1e1681395892d23bb88406c2f39f91c63824461f0861c832487841cf9561565ad7325a29199ec12e98bcd8d6190ab43080b268529f0c7cf94c639a6fb6fc89b2f95460d2efaaf39b49bd9274dfd7f387450a6c229fba655db65c0efe4b7c4d99ab05fbfc83bd4fcaf60f9a65ed0d3511aeb5b857b1736da8aee80543fbea895915cc936e7ddfbd02c5385a71eab46418e43ab6b97c407b205e91e7076f4d2538603190f18418258cdec2385f7fd567e20f21cd0fa928780fecde1c124ead087fb4bc5a4d40716fb06a359ef9537726b755f36423df344abb80570c2c41131c7538f6594a5af184b69117f3050fa289e1e137e5bbc76bda6d43851f1df08548641566f5af7aa14ae67af29f4c5a5e78a7d975b7a008d5106c5cefbeac020e7492729597464787aa884e4d0a96ddb4db506636429a4b7ad402f41e4fa320b388487809a5d56aad8ce334b19cab3fab9a25af00ee7138630f7533983cc8f17e6dce4f4c89258a1bd94055a5bd52294c9d6edd5e23ec7697a70e40e7ebe41e76096c1ee6a9fe50d877e7d9b1d555439ecc7317d549d4ae1e86154492c6be4ea3456a0d5d6f2864ec5020e75d4c7a34a9107b86efc8f1870192d2662233202a0e0a0f463b426a6d5f4b33a7328a8aa5754fcf5133080baa47b58ccf1e9cd059be3ea5ee07898d14394f6742b7f74c3d0b73b8a22972eabef8d68da60e689784bbca72304aae5a00834606e075fb8aa572627c9e5a6c556c1ddd1b147bff3d530e97bf328b1896d9451756a8f2ff0a84b206636f4d5f165cbcb17f41ecc98a6dbe8cd31c522f0c4985aaa0c3b8699583d445b73d8ab4f335e03c0154e92e467bd390f817285b83f64de72b594fa3f34ade09be2f9ad1b5a08e65e876fa963824568d744b9304c288a4b641913d13ec80db39c26e04202444d0147ecea86929114e6a90df1d9292a893ff28930c2348cdd0bd0921500707caad3109857a0fe1eac30f94fb4e6dbbfe20aa2988433acedbc77ddb7107f027d92ea5d2c2f9f02856be64c8c9adfd0531569f8c986bbf474fc7608286b0424d1a595621aeab74c6fd4550736ec2ab38ea3ac699ea0b1c7cd4d9504587d3653f34382d3e711a04828863bedf1515dd1bd0d60798a7abb8321004356b9df9c1c6d0d3127032ce06259f1d9352e42ffc778c314bd0f6d4fb34ab50f53defa9bea99630ee00194ee477e97db81503977114c553788a000c4d494ec57903a66bc4b22d59a7364f2204400f8a15709bd5a3ba2445780eecde1638a16ca905e9c73ba73e56275afcd2d048b84c92aad472f931500e31a4e3cfbeca4b4c6d8ae1468b51702d54b447e6ae578dcc180dd5f5dd40f2b68d940d69adc7f56daedcb56f1c786ce8188c59e7083436118ddfc7e6b6b1b246732591334cf746d852418eca56e4da8f5a295a5d45a85a23db69d1ceeb4a37c5caa098b50121e794430294e0a25c602802d471cecd7ba10be8f31c33e6d42a3b7c4d4978350f7fa96766ee3866a9a9bdf7d5c6c40875b5d09ec5d0a00e1632b07074cd035187b720a8b7c55b0b935b55237482c65e5d3b7ae326149acbdaf82d8e5d4bdebb523700ed3b40cffae21ff96df9cd5d37fdde12a16010ab85e624b9be50ec92dd38a6511d3c881e9a5e9cb0bdabce0ffb1b449fbfb9ed5aa4035d5de894d8a61e00ac1c2200c4cf52cf7b82fbd3ae6712801529257ad32f90f94b20f47236a2e574f268e3d01d6b8cfc63770fb994eae4f4fab9bbeae9b3b290970aca322e0f9c5a203d48f3bb79afaefd98e2a5a922d93f9a556953586d7090e923531cea74aa7bdea339b3c58123adf1ec5adf15965a289f0817fb47e633c0e87475778f59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f8709141eaf23fdb69cced5e81e9aa2666b9fb3a5e81da36daf5fe88e6085ddfc403f0e1d4d4b61db8a9fb40b4beda8b5b73018468a2b4ecea2f15f2a4e1a2a6b370ffb071dff6429a0bbc4bad8575ee959dfb3289bfdbfb3103a1390aff565f0be0461789b90733581ab6e733e584365d5d71ab89805849f8972cc4e10b81f2157a4e7ce30af1d939fd737d0d860e4dfbdbec57308c32c086133dfdf0ac2b4619679e48487bbc1b87dd7b7304111b1ab741f49e458c714725a05d4b018b5d455fcebee480b371e088e15433e02eb485d9b40fe892271ec51b661216da4f1fd62ed837b6535b1812863288236984df76a85ec79ddd064024b18ce7c744a177e1d0ac9028891bb798c7f79fad66bca6d56d67a325efd0df4b2f3a61c407296f4f8b7451a1e99a585a94591f38a17d118a71f72be8902e0322dd9a0a76eb8e0e06a85503893c8102403480922be070277ef934e84f87c8b59102d16945b8795cef6e792d474a77be32f1937ff0ec3df097504961c09e45fc80e80a069a359162f227085745db25931811bb6fee8d8b74bebd5c1ea49b4ee1d7d56b6adb2b7f27f8192909eab73389dadd1fe98d8a02bcdc8796a864478a6b7e121c1c7263eab3e78e05cc9ea548a8609de87535ad4bcfd7f71e86666aa2a25de746a4c5a27b0fa9ccc427c96f0cf992993d9b4ebc0eb599551d4014cc3d8e5d9b118b3eb3da42241b8da3d3db2983591847e44080f27708e9ba5fd53404386478a458435dae5442c588c625b2444e9b642dd774c1a01c0efa1e6a106c9ea75bc428933e679f4ee911df1b25bb086342c318fd5047c0ac92d170e92f3ab5e32bc8c4c5969a57370346b7273cc01ac9347e30dc3dd9f9307bb7d9659967eef5bacca175b3be7b1777ad3b74d28725885bdc9cfea441f3aeb3f28165b6bbf3e4f218e62bfd9bb6f72d8e908950dacfa99d2785ebeb45573121ca8f71eefd6cb8baf3bc6fdcf8adde0d31e1ee1c7fc033e4a512297caecdbead892b11a9f7007af9a74bcab89e0bd4ffdd542ca03ea12e17a06c42bd43fc5f3f757fce4f6f5831997abac3f95676e1ebdb11ca43e11aa31e5ebabe18ce8d1bbfd8b02f482e1ce581b532e307e6960eb97441506c2ed299e1282523f41527fb15f8e9bdfcfcf39e999fdab04a16156251ed0c4685ef72184745d5fbb8e273052a1e50fed4a08565c982dbb42bb098e69b919935f5eaa1283afff1cdcefb1943e4910d7c36e47b41f9a45c77107acaa080a711a524e808d2a29ca2229d28c0bd2c9b49bf8b8e7d3b114f8680623e509ae6769b1c7ab04f1d65650f818d33107aeb822c4d3c67325af9c981578ac2d5dcb74760245f0c1d126ca2617206e2b382078fddb0af3743a69a5a7484eecfff6cd96288443bc21ab79f9bbf7d70ff4edd6a0a85704ec65727da4c878ff82c7654360f3a05769bef16e697522b33508c94fa3b4b1380db17e6a2e5e4010fa3e39cb4969eed785f44372ae04103b79e12ada1695823ac402beadb6fb0629afaee4a3d3edd86a9d6c02051bcb58e65b08b3345ded3283cbb3a3b6b30163803fa3e68b8511f5872c70cdb4574d652a3509d2bd0e0e5a89715ece23c713c0db16b7cfd0c158be939fcd070ec4fcbd9da44f09f29b8b62d2516ebe634794a680c154f1223d34ac4673bb3e53097bdab73552d9638ae6d3e4e85dc4f3d9269d27cbf60aee4d2836e654d5d44f892d34ed44bfc19e50933647a2b6a263e02c1d2693357d9375c5f709afa77952b8a364c67ee042f18132f2511d13b721e1279f03b37db9b04b706536d09a9deb3c50d2d9306eee0b9128a0c7b3df73bc70ab9b45a9494fd332c9f9f48449a29778c8177bf5a6134b04f6b9e203847892032aba72f122b06ad0353da9271f37d5f26bab455b30634e512fb656989d36511d17450207848bf5884498eb2595be353dddf6bbcd985e741a361e8bcfa42d682313f379690922e1df7aa4212c47b613bf719255c948556aa49c6af82513ce55b9832e5fa20b25de5a39d7f197afb02ffbd8f699dacae87094d524324576b99844f75e1b2f14f5496d14bcc2f4282cb88776abfe7e8aa8447f72c2b08d474fae69e31b328cb121a19c9dbb1bce5b8c6bc6dd1afa2111e554a8f7def9890021067cc8ee4c275a3b657d376b6282c46fa84e6edc236efb500fc5d6c183b52bbe4f023b3fbeab9a93337374464dcdcd46fc92ce57f0b4a158f44a9222d58e3477d6ae9c980075dcd96a03c6c423ec0092e7185e26f89eae60909bac7b6590c4fe3bb67f7fc802ab6e97c2b17d9b79f8e3e653a0c181997d17735d9823ba5937b1fcde566f6bfe80c34b24c6cafb0400aa78e928a0421187de0af4e7b45a440723886ab3df62b5f797d2ae7944e8f6c2672d3d785bb0b36944c5f61db5bbedddd36d000a5842c56a3cecc44b63ebdeb8aa61b4f24c33db9bbc42d5aca065b306322922ec6292a97322e80abfb05a385dd4b504490a621699c4e01806fcde303ad03b47bc76c8de8cfa62e638b2da802c86a59fcf0ec1d0ddff5c31cf338be1c62e11d30d1d6be12223cbeb58d3e3329f2091ec06d1b9b6f2cbe5b767dcf54432bc4b7940bee23ddd2fa18e929beaec3043387d72fbd025529b3b1d6361b0e42b0b569f19e3c251088e8244789378098a5ed7c8b5d59ba8881dbae8446a352e098bb1b8db1482c75eb0dcb16d23011707e41e52220782bd0da3e38c7d4ef89e48cdfb5b26d9ba1d2a471f3a02f32c9133636aae59fa1bdf4dde538e908881c17332820a6fabceaf05a1c852bc6c4104976d4b31c035cd8be31d797300bf57141369e42b17f337197b6176a00bf6e4ed9e624e80f7331e4f47e1c3be505bef22a3c49041d24899d8e5f69886743b8eb8c2d2d320518a9495f6ebd0e4f1d6c0699ee324e301345d59ffe1ac9a77a2b4f2af4f87748194b6fc7a7c1f7b87c861457f460093471ef83903b33140a8b4ee27be28ba11e9fa0bef4d130dd664a94862df5db1b6f690f0e2abdba50d69ea90d46a0f096d0d22f9fad9513aaa2ae1fc3e099ac6e2a202ede352dba6754ddc53655d52f40a5d98078bb9b7145b4d0ae333b89dae9acc1d35b79323840cc6e29c76e2a4e85e7dd1bb2e78a5296e4d9c93e056d6d733f7287edbe753ec386795d265a47574fdc0589b6f70abe857af1f84c05ec6ef6295bd1fccb9ed3d8c927eabde1d35185ce7a51ebb3c5befabd3fc4c504afe459b3a639f069540067df9f57f2ca77450f0363fbb8e56059ddf6ecb411ca5ed78425784731603fcc580e0a2c2fdfda3ad5c4e90f87538698166e1f51981fa04f5ec7fc842778083f939f90f2dbe6a538be583416bfc6dd818d6a0121c3cb1d55d1e057773a78576101da58305da87f48b4096b98c7060d1f2b35baaef8957ef0c5bab4a9d32ad33b88068b6e1fed11709f1db71b09dbbf77d6167180a0476b29209b39a0585425d4116c5035887c02ba65dd3f29ec0d9b9377544f1d24a78b07cbcc0ee633bff5348555d00b001ffb2eef912c49d863487af7387b0fea7e8792ae955c03ca33ea64ca07337bef9ca4d32581a50435a76f343c0a1dde5c9306d2b13d4b7d8778ac6bcacba00abdbca4b1eff4d3e06c9fb7ca30125f10e1b0b1d0bd0e02ded155e4516be83f42d347a4d03634dd67e314c943ba97672fe09b3093b84eaaad0f933a1f97a839aa97054b39e087ec2103cd4ca7c1e35dc3c31d2a238c466a73abfa55dc3551b6ca72be42f3d73628953494e9fe2f3c6a52f1fe48891f3e6bb70c52de902d2cdd2bcd3930060188b84bdf2f4851ebebb666d20631cc5b7ed4019a637c436781d7540e3fbe7b48c7c5cb6a6710a7dd376886cefd8df4264dcedabdf5d8feca98cccd9f9894599339769e3f04e909ed6aa83b4daa060a6af581c8ddcf99c840b8e31fe60c59a8c928f44bc4ce7d7e03cba00bb7d642140ebc145562ba68aab12a44d14d63b570d4da665a638d710e07a175817449e91dfaebb009b47eedab0337186b3a6452ba9b98f553830870c1e1355222eccba42a16c97c6b3be3cfd31f25877617d8d58d06a9c9bf8b0820a079cf5d7888241b454aa0a10360b1b72aed3cb8794b87e9f2fd570926e55529b2b7b6be0aae1bf5757eb6465989af4cb955c6d4fc3e3934f068e8de0ef8b7340084349e60c77adac39a5594f620a637874009028758b65e8f2fa56f012cf6e990c68f25033c07743586c3b3618b5e1f9c944e6ba301c510d73bd6e586e9d9ef6c67107a7a738b68d62a48ca22349fad013bdd36d7a130f2d172c367269729ef9c4dffc64dd6cd61ab6e2e01c2813189bd1bfe8caca0bdab84bdb31e679eae902662a43005cc9705be3bbb81c8dcdb5ad81ef995a96635e4f905f031d467307b148c46e129bcaffc16773972bcac66c85b2b1578565b5f443630c0c9f25877576eb52f004110deefbb0ceefc27589b7d4d299c5e3be8057445276c0e4bda4acd3ac4a5b6d52fec86b6e023458f4a3f1eb602d46ee173ed1b2ed33b276656738582a1f12b6e81a1680edd1f787fe91d569f9d06d1cf66e0e2f71b773dcb32b8264d345b86936ec53ecbea2cbb7c9dfcca0fe279ae8d27a671aae6667703d8e259a4652af0cd5e1faff6ee903610cea3250eb9772ea420076f4e1e52fe95aeb9c58e1ca890a3b9786495d39413c2e4db0da40a46799bb7cb84ecaa81f9091e041313411b8f9de79804b38080771a476c2adabd2fb6fa56b9598b723c91e88e8dea3bbccc144350473855dd9c8ca1601e26b7ba7a0e4a649b96335ecaeeb8681af30f7503481e5d4da885d22f7ade95b9a643e96fa8114937e3ec567537041374d596540852b57471fb4a4783695a4f0455873356adda6c55e6bf42839551f76339d842225b90ff7cdaad24de809bf7c8d88a7e76442a37bf4ab30a3d2f297caec7de259a8b386437ecb45189e72bf3cdda55b418968b113cb5d196eb2e130a1f26afe7b809340d67da69b6ccc792addb01eebb84ca846293d020ced5b998097cff536ec4fe0c60d74bd43cee48568bbaf55f7d02099e938d42a89b42f93ee18ef9d3a4069149c74ee8fcc9399101f7315fb0e0da7b5f0af2b371e37c1590fa1dbd366fc6eb72a99359e946f3cb1b580ae7e7ce534751308acd8490c93613bdf1f284b94b330f6d6f45a39c651d2a160b340e2eb696fc6d1c35e88872845190d141c669de92a97daa5433b1d7b0b899fdef2ce74b8fe72a7296a5b5be26d1dc86520367c730c7400c2fa06f91ab4c48a7bf4ae35a5b9acd5296c4fdf7451b0ad9cc439b4e34f11e5d7ef2bdda376f8dd34d6f092b219dc085dd4c4a6308b8808f588eedbbc7af7f64e83182fc7ca7cf4741a341060a7969d31445834c982fa8739ded4555108acbea1666a83da17f77cc42ee73323eb53203e3b790f81c08e94c44678b6538096ab7b09916e6cf7ceb2af85987f8e4d982dff1ab59b0bdccaae1f405a73366b5c5935dd0b43e2d2894290ceb66a0246dc02de728c5bba30255fb56ce8107c3144246c5156a8fe40ada9126adf67227fa56b66c37be63f532516211ca012977b04a97916f201f1baa2629eda520b51508ab4229df2ceedce406dece0110e0a911464f69e7be38fb91deba0addcdb3161d2799c628f5a57fa1dc37357c947681bd9c36f4832c20ac466c0c245de3b250c33282ea1a02d007f03b34ed427631283eb614db4d521f555136e7e42b4cfbee8134c63dbe3bb79b5a8b9f9f5b9f5ac61cfab1c54d197f1e3ba613f251eed616df952d691b88a16466343ef2d0f63882ddd2d55b8a6786308b2257f5d7b38af166bd7f1339d2d8899c9eda8fa86215850ba547450c267eb3c9147d96c38161a69d1584e521ffa23384313a1debcd37f72ddad02adb3cadce7ee34b7c1f42a15d0d030487daf9488aa7562845a11ee7ffccdb38b300935caa31f78a4ff3dd93403cf0c6a16ca611b58c736aafd33d6dc56f0f47878211d26f6ab801b9453a7f74b44593dae0f047ddbbf2c902891111729edec44f69a05944b18e7a601f41ad24fd6833da3dbe3029bd390de7c9841b2ee2b079b2bd2737518fe1bbec88da64769dc36e4a8bf716c219b2fe059d7dd220c1ed2c59878db5bf8b198e0689edee921ebc0cd2d3853fcf57c363050ce58071c5fda6ebcfbc1bb62e9eb956286291a108bdd4191c4ff47900d6068e1ea26b487649af119b9bb15dfed804836f2196cbe12d8fc86e3d7ce89b52ad49dc9ddbce5b370f73f512bedd853039366612453733740586d1372143b09f21dd4dbe1a2bfc308db8e4098c5e4b0c1e16141ee50e85fafefc4e2529b3c7252af37aee6f86e19df28871686107d7d57dcc812bc077602642d2ecefdd5f694b8f336913210793e4068da2178600b1f41cffb5221c9b4b6298afb47e85701d7b1a44241679d8996f916c81ff437261cfc358b9ec42a2ce16ca3bacb8690d6c1d91cfb3e0bf1e7ba45bd01606df856fd03c7e946f7ab371a89e1fde86d05fdd97bd7b1c583b04c2ed2b5f6815a460645e4e1b4e950bf6bd81dd0352d1048df85266f1696534aff5b1cbc17f15d82cc8e0c0d4f0453f9439094f8e0f7f4bc045b654d9a2f1f44a9c57019f63ecc41021c05b5380675cb56ea8bb691d79ee204d2c4edacde3c1fb3f4996a11d84b035f965e74009e2ab80e2c7ea3c84a834d4971a1e9cf423e4ea67ee526eb3c3e4c2d7372c4290a0741e1fcca5ae4cf36705abe98ac81e98a5419baefcaf3093a7e0449ef1021f88ffb7ad21b2677e41cdda12025b06542c4b2564f15e0b99db43b7c7020028bd829372122cd910227cb07c53cb58fd9dc620c0491f3e2bf883fe6ee8cb1f5b73767977d857e4513e8b5612f6ae4b56014e6a3ad2a065b65472212e2f611743484cfaef860999d1dc5608c58412fab888ad72bb87dd9b55b692f31e252daf8944ec5c02a5a9c23903c50dbd845f2fcc3bc9806af13ca7b025cabe675195b1d56f3fe7d7bca12530bcc0af217efcb03a218bdb6f9726536ea902c8303b02e3ced22be59753588b5f0e2f3419fa5345a942dbcdf3010465384a225ba26cdd0f1d74999c69f336bb6d01fae5cf81cbb8c1a7a29c1eb83ca6b51113bde56b8cfb6a5d72557622a37f039d090a689accd02b57c691174338de8e05bb3620c079705c969c58e56b079dc9eb44eb0fcebe548f5a31f4072a5ed56a2f03107bf40a359b2601eddf53cade66f294cfeaa40a0d94b9c90d15f61852f295d3911f8ea914d015885c8c64540a83badf0021a416c3e37b78236a2ecd1fce4114033416bdd3a36c18ec13250ee9c74c0fc4dd564b3d24a825802d5ae402a53bacace115ae3bbb329be79d1e5e42dbaf0a6446431145fe49b86a8703c7c41f8985d54f12e314c16ff89351d8addf66ebba2783f2d1a11965182aa0b0dd2de53586c5a695c6265c2b173958da648611090557bdebf11a1e042f089fe98e049f4796c60d26be38356fe020d9ace9008410d53a1bb7db78b52ee44bac364213f5c59f1eac4e3314f3423b92fdd7a6156608111ac6ddf58385ec1f3df12061208db98816ac948d803fad10d5ece2018c60faa13de5e5a9033745c824932e53f4122a39f635813545c1b74732cd55642f19ed6deca1585ebf7242c849bde981572a2199066e9c912b2068c8f1c8b936c43ae95c6e22bd7b80dfea05f495d751107da5928e806d0af905c87b5a0795df146af6580d8f9c6a0e2645686d43822ce9b4be0bd5937c097917e048b5af71c7e7521d490f107e9231ee5bd9fbf0727ba87774ed24cd52f471ffb71849ebd55605996515bdcfe95bb1df3541e7c42da4166dd01ec3597634aa6455d15fe14af435e8d7a55ff1682d55a2da867ae63d11fb3fd987fa5d7032ecefc35d3fb9570940e779e13da18070e6df5292f97f2a281f9598101102c955fe4808a2319c85fdef3d55b19e05bb8c2d3da64bafb67a53491513a24f6f0804aa162c8a7db25b38089373fecc45a0eaef65dd9be3b4b7f9436a5423fdcdb5a9b60138fc6a2261225390d9ae0d8ab7f0f7ffff69dca06881d33a637d634358abebb333df41151f239add91abaafc89070cb2159ce3a31655c22e4696c9fa7a7211d1251d4bb21ea4a321a3dbebc29d97f526251e40e548dcd7ed07587719a266f006179dcd22e50b3705152817057b097b043ad63b8d867edc20aea9b4c959ef4ff70f47128cfcc21e31f17978ecacc366f459ac1cc459a3976e4173ca322675f84f18036119ec2f204c3fb554a0b72f7e9d8c882ab147b3d280ca9dff7b9160b1b437b901f03cbc05fe05c6f44824b48aa8da52ae7dda1653fd500f9ccd221843cf76513b3b74d094f14d93a00d7cb954bc4cf2f04f9a35e38edcb1e84f62057647dcb3571f1dd296ca1e049f1746a8a282e85138500e7649db756b2d2ad88f11c471c89dc6be2cd43481013b8d0ae83da2b855cea7be424f8b2325b1850d1fdef03e765458df4513d57c72ba9751e1edc3c4e7f97e3202bb46eec7be89871ba3704aa6c6fc08851e551a3f655fa1fb798d12f003faf31c56b6df399a5dd0ed29ef9e4139dbc254bc5d6051840a859eabaaad56324588fae881fd638d2b70fb3813402df61d941ab495588e5fc3823249bf9a03cf877902394f512de118edaf98843a5445e9073fcfa409df3db0221f1c77e2dd21e74f9e10c9e180dc4ed17010eb949c6d67a22bd5337b2c68f9eccdec778ece728e91353696b742c8f5a3a569f054efb8c1ed478ee9b75e26c768a5816aa6bd08a4c72e745fdb5deb34ecb86b3a84346c1c70f9c16fc45bc0421f0da2f630912d5079f390cc53b78e343310de722b53d2a3b4aa386caa0d7e91986e19c3363426ba30eb5284293af81d00158a3f5233327b40c3b989725ba7dd5b31ac7abf8d3e0b737e843065cd7316dc2f374a00bed4cf9caa0d6e232c854df1bc24c3d484bc6bcb14ec770d5745474dc6ac3b3ddbffc551c9fcc2c56a5e0ae17948457c01e701bf1554022bc2b7d9dd42b2b91172fd85e6874d2d61fc7b3bb3cee2a9bfec09f6d7e98279c6f511f4140b116c856c1438e34bca59fdca2409f025b896a52d68719bf93e82e7d89bbf798991fda0af8d06d17f39eba4bca09c1fe594b537ad4c9b94ab52c895539d639425f9146b24b016368a638e5bba391bc8763cae7c52ff9c496884f1d84e5e08ed451358ecb3c4919dd410e82cac35ae744078287c05c89b42999ea6b8b127d40d53a5722d45139e8bc507a11e7add7fa9ab12cc40afeec008a4668e3e6440f27bb5780936c0e3668ac51262390c79b3f21fd041cf36ba3522f3a552714ff188bfd554c60d0e7d11213cf7d3864a51 +MD = 4a8981d31f6c9a7fc8ae6cf661ff4cd9ff584134b6e475fe3c32d986 + +Len = 114832 +Msg = 7051c5135b606aedaffa12cfb71372ebf00316ee6086522829077aed5e1e553b1557d09cbe35f04eb3760aa2109936a2c49e01f6e80d62095039f06760c6516a2169f61594ef0540478197f52526241b92893b51b8fd771d1bbeae4674796b7ebc0f9f448797930993a22192a1c2249d834d2dc7775e78adb31d1e5241408bc10dd233f33d3381f2c061103f2a751e71bf713e20cd384c0140dea652702299793d391ae85eceb743f646cdc56848fae06d7dd5236494dd61e98ab010a8287eef73cdbcec936d1d445cdabeec0542a030b6f95c9ae1791215d6a8a3529259206bd81482c6841a9b3d1ba44c7ba66cf9a9c16e3a4beff0d36430c0e7e1d6bd68349498d240d8dc19755a2cdf3cf5cceb95b764d7fe340008981f5ae4851b5c3e94cee1152037bc7f3542fbe0f59a6d5f3abf619b7d58b199f7caff0205093f8bd1af75b42f4bc0b5c5fb98b56f3d543ee202efee8f040b6fca5a36a92b496d35345ede1535b9f2a36dac8bc872858b6ed3a79538fbe0177058f68841bd83ee260503a4a2fa2c5a32757e5d80c61a19d955d7dce18a93dc85ebc77c32845ecb448cc84dc2454aff482498954432a50665b2ba4a5104c66297c9f59ae448830b7911d363dcdfbbe9cec322bb7e7fce5afc307769f03120b28c3ba76abfd19ab6acdb4c6e5a912820ad9a465895753c1e851937c127d84ad34e8905752ce64ad5c5335cf4a32139adcbf12af3f1dc985ae8b321d85cc3ebcdc3fb384291513b6eab612b7f1f5795971210f614fa7c89140d475e38f8b8aca9d5d9685957d8168c48ade09636fde5e6693ed343181db856dc1c15696480356e6b6abc43e7448334835ea3c250d9d0a2b7c5e909b386cc273d7c6ff107e32d246cf75d87a75c297044be9e89d5b5ffd4e6eb5fed33806e9018ad945a48a83cd4c2c873ad01eab1477313f6762d571984ddf95d7800d3469755f8ab2c91990b855425253e5cb4c2c2f9a6d60ec087c7b884360d308247fb47dca5dced497c423f0a569bc1208405e7bcbf64dbf70fb17ac3ec959f21a336a595fc5127d71a890acca2febeb42022c0a5a6c86438b67ed182611d4d46b19ebb68452f61a53b86ef825376bd8250c0559ca22b31ec43d7c6a9dfcec15737dc903ec7a1241aa6e4f514af2a47f1de87ac8afcb5cb7c7f635f20accf83befe972cfdcbcdf79e2549256aff43e3699021cf55fd8db94e32cba6cf10491be1ce78988f99db62997e5e856d8ae81a523033c6e7eadc83cc23b6a39f5564122a6f27dbda79f4ed737aca20039a427315846897260ec9b25d1ccd5d76c147ee00a84bfdc8b3402195e135fb157579761855654cfcb07dcd68e3b8dc3e9e1b3aca428c07408ee685657b49208c64b4abc46ad5ed50171f5c57421e28dd32077bf206940029530ea24c10ab964eaf1b9b818d5e80098cd8e791fea74a3dc6343bdfb908f06d4be2feb3670665459ed7cdb884a80f1157d0f77ee2fc4944a1ca01f92693dff3bb872300490096577910c9cf185ca14fc02e1386b5c52ddc0df056a814dbd6a3ee28999d7e412f6e87ed183011223fab0f1bc4113ea9feec50cec1544a88dc652bebe6f0ce723b711197414137a1f00d8bbe91874651c55bb38dca659143fa21b9f89463013bbf485f36cc6c5282bc5d7d40025095658a137e55f943b1b437bfe1782b5cde43c5dbb9f14218296cab832dc89fd4f38c53fbf94dd75672829b27eb9331452e33541267f02aac8508c668e37ff17c286e2afb6c9eeb079c552e421f703085b9b275d5b05c0c922efe14f2e78c7faefbb416fb1e6fbdbcf6d7f9f6c438af8447692f0cde5d7031ecf59d0a8018d1d3360620e358e9d6de49ae032c241237aaa0008a9f371adff187966a99f84b70549f0b4e9b6234bdd65d8254cd85274f5f8b1e8e7604bce13ac6888285954ce397ff6caa0c8477fa0bfafcf5bf309f7f0bd26b44798c6afc747273eeb8a044b2061dd13c1c06db16e4e8c3edec6da14f163b91b391194dba075301b418605a6608c3e00bb42f8798cbee80443a845548e88f35e3a4f18da25c31d8de8f1fb78604b7441fbd48a30827d6db0393bce4f1e99502dd9b5d513cd9d4a0730423829a64c2a3801d9959ef5f667b31de5e76d282179da85fa5c111e704027c5eb6e42b8faca637be6acfd4dd6709d603b2327419dbb14cd71106a8ef88a500871e05c0ed3df44a86032d3f08a02cfbe900415e18abe4d2eae948895729330766a30ce1e63d36c45fab9cb848db8da67a90cb18e54dde418274ae3d88af519ae38f2216e27313aa30ac44c805ded4e29da9f72bea8948a186fb614bebe2a9bfe6286ee849a83406e14c4cf6a772a8b43a95ed1e8d29cafbddc6893be789e38057b819de83a440df59d4dccb965fb1263a9ad67938f30b56711d4c96e36ea7e51e854a81f82fe03e828c1ece3b6d983f8301dac552b1b4ba2948d5e349579bf524d82a571111bc2a43bb3887fc640507fe12208943296c2fed8e4aaa800d6ab84ff8e1ea34117bab84aa527e420b9f879314d14d7224dcbea539d474f058ba36882f96c2caf9c5c92da2953c762b0fc62b51149a4969ac6e398f9ac701ff3478b8c371653c8f448d27e92848fe8cfcccac0f12f62fc2834892d9c52e1bcc7f85c5fd9b5df09c9dfe58c7342a44f60fa20097f2ec8cf50952965e7c2ea685436599253c3250e77b25a986e16bae31f04f0d31dd01c9cbe7962e68e8510af32a211a837b6ac33a8408026d5692a60446dbbd24fbbf4c0cc51c433d301eafdedac0325e818fb05b60b14cc3bc279339ba4ff6ba73ad7e804aeabb267e1dfe0efb4ac80076288113b8286dd13ab2dd96f3b2a2396e53c7ee1f0a806bf7d75d4a36c8c3af81be9d2a34734fdff9bcebe49a0ca8ea133a9020ec847854c5d3355b33410db4cad86c687b9cd83421cc27ea5666f0158be93fdc585e8d291099ef0a99bd8d577afe569536abf21ad96bf872d0c76202fde83eeb0ba2a631ffb2f11d10442bdfb9b9c3780ca684d74920c642af37e6f892c0f315ae58aab5bba5a55c42dfcf96ae8f1bdaa69776b49a73fa249cbe644172f8c821e98683fd6cfa7291d49561c2820ac683ab85b0f9f4ecfadd3f65c423c41823d963361851383abf82716fc9ac5cb22c3bc47919ee7e142f383f33eee7b1a96e03c56f51f94aecf6f8bf73ef9c650eb6ca997a9bdb617201fc4531cad460321068b63a163cc8987ebb66abbcd9c5a6caf7d1901d07c48fd9f0f8654134f93b71d0df9e4f64dbc7bf930f1f16ada302d28b15c388bbd0f11dde01d9394da64cf903e7a3e4b7aaff214862d6e75e27ab344f0c1cc23fad22378c07959b698dee10c87851bd7e5ecb0ca106d815357b285a085fa2b4db82aa8dc2b39f50ced6a81ee837b1c3001eb0e868a42d897ac401aa81b55e46d7770f894aad013fc4aa038b2ccecadc8713381d63e3de2c752dbf8e81b756617ab6db91eb9cc34f953186bf59e5a4f15964ea135b6cf1e56edbe96dcf0d94eb0d64950f6c28eb6a8792b9233a2348ebbf3a4e3217e6719bacf907ae345e20ced8acc66a96fa8377e4f6241d9631bdb001bdede361fa633878ada1bb785200f023b4f50a31ba925df284501634b60b2a67144e8cff50d1a31a1f40fb63923e3b36a4aa5705102106fa65c477dd5b3b3f3968fa97ba8fc2c4da796bd6bcc6e29558a56eb9d9a2375943c008a659c854d9bee0776a5a5f3f83ffe0abb44d96f2e8d3dfc798761bdc3e17bea50d70a45edf3fa54f6fa76a4fc8d37e87fddca8781bed79405ca521189dbc872212ea98623904de090c6955fa7b9c7b871932a77b16ef9b5e6d2c5cf45e7b42071f8e4b66cf55b42eab67cb4884a3ff3371173904c1216fab33d376776a9c17dd9b256675897a4f45b36a7242cb3031146b53061a04ca1aae176414aaa7672f2aee7790944fbad6d68c3af2ef398b39b170adb7c5c733c7ef7fa5e193fe24b2797f4c72cd095f726a9d9ff458b4fb4092e9eef40df2a59cf7d460823c571ac84fb86cb3279faf4a885061208325c96e403cde64fb6d66c14d7f5ba2ad9b929736009ffcabf9f387b80c471d7a753eea42d345b09620be5f79e65fe7edb0d44ab5bfacf55fff7250823a1a94458aa0dd2014eb80e7f3f79e047333f903802807555e5c454d9a76ce6f40a22cea4e376e6369987af4cf58a5758da181faf2d6f69c4377957db045280687a78e73a84dc692391349c79a289d549b6f27d7ed254114d7c58cf52a2887cf77f161e77f280c35eb2593683eb0ad2a076692a45b5f0d45820dd3bff167135378474e4fbd1169d5e99601dda138fe7d384e6b6923ca85b6ad1911e3ec4af319f373fdb2495005f99a2e3a30ad07b8d896ef592c2daeceefbeafef67021950aa4e3b15180b2d072966b4e769486702c0891005f7615513781f9815551d1b518cf3683f8aebf097edb5f2af8e5c9e04bf797b16d1a7067ada369c2ab424991f4948c2220ed1e0dfceefae3ba9d0f5e75ccef635c3e7082b9c6d82d78dfedbe169b71067afa54604537cb132c18cb4d320f04a0ad309a44f462b14c3e79529c072a71cb5724f6a3105c5c33ddf7823ef91483f3c0bf5220e60d71896cad0cbe4ee80acb561b7948c6a30ab040a7c8a64393c9c747393ca8f73db57fa3f97087464a9890e83c60c3d0c26332e4a803059a0352b5912cce3fb069e99954cd22a995d8c7b69e062196d73102164a76c5ef74c9cb294f086b779a288a50ffc69777a6090496e8174054425543e4d2a285c66c7d7facc15aa8c32ce01451154453840f51dbdc46de516e9ac5c5292da9c72cd9950cbaa8a21ab4e12713f435e4cb412a49b9d14ac9b9585908e25dac0b1e854486decd656d15cf4f6405c4c21673519f672b2054780ca3f57547ecee24d05255e9827f781a4e74c03d664d5a57f017c720bc440457bfc408b1527154a591265633842b51481937fc09c1f85f37a6164a1cc9b6cae7374afb338e65800be573fddb406ba164fa9b5b6f8550512429df9091efe328b527bb55827843f0a621cd956763bab8ff871156b53cdfc0abdfd62346ab63ae3ff577a0149c971722fa95b55e5a933876333c869165013e4d5c9c8aa168c2bbe62502536067c97400c45ee636917f8077837f638a7a6f2a7714852f18c45ae2463b0df80c667587ae03aba076a4fa2161fc4c55e7097405b78c3299332ac6a1eeabdcf65f1505d2a95cee6c95017dabd40246065d7eba508d4827418728808b3dfc11e6fef004e57124a9a3184384803c39dedd54669cbb76ccd5c06b3a02fec2a02f326293fd20a3ff600c86c7a93f09078953424da577028ec09e75cbd88cfb3c9771105d4914a04193d1571a4638c90fd7f0cd906f439f026a242d7a7ba67635dd1b8ec89341f49fc7ca0fb8062e0a973d4e4cdb5481cacc550a08b266eb920082aa347246391f6e8e3f273d436f3c424bb4568affb20440f3a88e0024ccfd310aa5b7c6ec5a9f3239a923f6987cdca565db612bbb64da04d89823e02fbb065be7867f52f036e28f5ca08c907fe77a152e1bf33a321aca9c664160df02464bc5abd4f182fc4e97ea89bdd787542f8336070e8332de34445c4f4cdb5926ef4c22ca09c4f35b120db833498b37dfc5866c732ba7a22a41e5d8d602e9eb082675d7b4ad5010b721d29cdbec1e4e5d4a024d14ebc70490e40da6ad1c2311407c57791e3829577aee84ecf60e1727671d754c4ed777d6cc7b4a2a36f0fd485a616f7b4922b75420d8734d1437fc5f87c05dee936710a5177829f80619ff0ca0763c52d7f5908343904c11a8e2345339c32a98852347dc1c7b0b749d0faeeacd1b3c944d393b614d766dff46a555aef7a679fe9684840845e48d445e3a634f3ad0feb40b662e7ac92b675a5ff9e6cf3beaca753a133b962e651ddbdc32d2c67427e136b4f4d03c20ffb6a767485e3080f07a910257f522304d4baf997173dcf3908290bc7dc721ff93da8aff29327f615828e661bb3728e62d8534188eacef539b5156945979d8bf6851698a04ea08579243c9eab58806da86590ddbe30499feb8ebfcdf207eacdaeda9c79a740b67ce3f59cfffff5e6867e83591460701596f69a0f7ef6b3c2afcb4422992ef1d2a5fafe96d33c120ba18a3b963097339aa204e2eec678238ef7f2cb90415ee85ac6674613608d38578877942f778a00408aba6c42eba0e0b46ecd78ceb95fadb8a8d2d5f9f018ed3202eb970c32625f6f18c242f53697719edc0452c54958c85213e1b432c905bc04d68e4b15a846d88f12c46cedef855eb2093f615b3971c292cf3feaa4337d2a35cd0ab833235ff4084167f0145e92305abc25ae79d0d421dfa3927f3978a8c12daf04e64ce9d43a426d54d850cbe46efdbf5e400857a670a058837cd7dfad08554427de4943ce33a65e332c8b7da6a002d89320ee1612343fb6b9e868afb487135318a7137975659adbabf2acbdfe4fd3d06c5415553df72385ddcbd331e7c7d0a6824990d3f05a87ae64349bd31402d76e90e6635c5240b48d962e00ad6c4ff5030bcdaa99689ad69d07f940071141767ca8ddc27277985a968d18d76a6ba7e8335b3a481204abed713c4a83a01d9418c05b4219e1d4867d67699140b20d5813fe1b985287ed1736f1aa2e4ce85f842504521c4fef939285c9d3a123cb79e9dd2bf3efaf404a6617e7faad83250098050e34734ee5d944da84735168fed8e2ad848a484985441efa19d3cf10a0275921a6aa50fd0bd125e460f0a8f79352ccedcf89aa079e03c94651de9ddba1fd4ddf965cba44a8a0bc0c25f3aeb8d20e2e04d5971ed1d2aeee6355c31ecc70aafea8a5f1b90b057191b89a236c940335905a5e5dab8f6b6e16b9ed295acc5455f4e59a12553a6b6a2d518829e9716dee7a5732835929af6ac8b0e3b85ac19727b5fc3e6697ba20b31740b7ac2e395962756318b03088e7cb8cb0fe1925957f47cb57599686716c75d7ecef5541d20fb908e6d98c39925ab8ea2105f4c32e55ddbe5cb3492a4899d8f6bcf8cc2c26d71abc483dc07b30525a6b6bc1f03d766013147513288c27ee03fb1a99b8f71bf9ad18f10cf4fe4b15d896f6fab69a53ea0f570942dab3f7b21f6e6d9cc1a89bbc9ca4490ecfcbc9ec5bf42a77eee2af39f90e7f0908a79e2e53d81cc790498d6a0ce8b90bfae9941f0b0b70023f1e7196fac2412e5a7106aac8c091e3cde1d849276da7ca1d6092f60f662e61515581493afab6797718156da5ae33b7207966a215ba7c14df39adb9908acd5dcd8fc79ae03e46b408a4b5c1132a6a0d2f181ebcfe57a1b1e87bcbafb501b6be5bd42ad1141659a5b41ecdec3abd9eaba5c6e8e109cd7c69e12ed621a752504ca22d9535000b5716248d453741ee375a288bac575ea37704725bb5578d0502cf4ba1ed0fc9a4a9cd00f905ea51469de2607052672661f9494209509990a2360efd391ba79a6ab592ef6bf44d914c390bf77cc35989906901fa408f2fd8b253d261fc074599e4e42f99e9fca82a88719d92b8e575aeb731f441085a608cbdc1e31ff29931ee9a9e6aa77e04424382ae5fdc2aa103be5eb8eac06a9976d549e709de23bab2c2144c0dc12ff56405c3591a7adce04ae00d66ab1f6d34b7dae02f0c469850123ddb54de8e06b55698d2d89617d688933d4da3fe051a136cc40900b300584497867620a6b70a2d602337959b591e8226fca5d7ad1a771fdcba4dc2c7b46b7f8ac66d162ce34345cace7bf6f1e8beb74b479e6a7e078f3e51e532de1109dae8332449a03abbbae6dbc325655f6dbe0e4a43bec53a746759116c42ba56a8ac66d9c9902596e776f6dc27bd49af90246e6a1a904ea9080959657805bf6139e9e3c5dccd0d090e7f5e1525cb0aa7f8fac1f4f4996e926c7c2495310255f9639946408685bf5bd8de07cee2d810104e48ee30f8638dbe48c8a4e9bec1e5e5cec57790ef42a554ef9ad84f896bc2b13914dd664f7514f643f6bfa948cad5ee23755dfd3e8b26bcf8bbb8df400d8a54626876de20576900050c5f1cf6a68fdc0aafe2d19ce9aa5a9e4a91c82f45cfbf704ba1df9492f6a437156b8bf1dc79772a7ded5230e399f7864e4a50809bfabb0cc646b3d3ad22ac8116cb3e60f4fd862ce667ca23015c5b5bcfcbc058977110dedf4da0043054de8a19677d6c7682d3b7f3367f9ccb594ec3d6fc60e2c29d868da09eef50a3f604fb2527903deb702474aa43bac4caf9986669c57743a3e6e5c21121e8de8f6fe47b43f3befadb2e420b1576c2c285a400ee930e4fa6c3b5f42439bfd2d77c2747b37ab351cccc26f5233cb7e1bf84c3500059bf2e31a8707c5c205ef762f086f44ad24f8fda48bf046425ef5de350bc4e47c5c05d0cdc814511cee79da875f4b5e953afc14dd6613978da047f5570f9c368def92460e74e17ec4c430dd092d9503806bb2e4cff745a0463e08f3e6ce0760eac52ca554f41ba95a1588f03d09d8edef25c2000496030b3c669d5c5cddb31df38b499129ec0f5b3d5106a69b5a837841f78dd903e8e832a0d8998131a51ba838905d7c05b3592eef152e829cb6213d196f8ae2566641b144027224fdbaadaa3a72fcd860f0757f0fb054f6c9a34e96e5ec5dbe7484bbf17652bb9a2994d59e79b18c38d419e0d5efe13e859a98483027fc5acfd6cac39db867ca634daa4fff66caa00fc79627ce3ff63fb1980bba73602e269905aed4f09aa04312c2916947922cbcefc40bb6b2508ddd0d3a7421eb2ee0359c79b78ca49daaaa1b30b0bdf17c66573b51c11a3cc2069aeb0a77fb01d4b10c5cbb6b371421d5640f00aeba9795f5f384e98cced8150efdfd806dc242022f0f5c333080e9d7bf0540cad1fba46f5a165f039540fec9f57a9724fc044627a8d31d89bde6701fc61262e7c0dda27911342c28911d1b4158955a60793d68c5bcec132749c4617a98ffe7f001ed1c4399d17ed0f6cfd81ba6e2a9eb8bca345cd9becf849ac718789632427c0ba66c4f8272b9853cb59fd97ec727fe9a57336d9dcfc539f75b0f8a4c5df4d454a63d0d399c7ecde97afceb3ec737423b50e068679376a005fcd13039e781915348e8fd4db33113739c59c165777a2ed543b5edd5be666f3d28e7fadd437b4bae2afaa02d5b72ee6176310c913c434cfeac4e6e468506e0136bde4aa516446bcba90c865709b6b749b53d1d30aa25051df6f45a589bfabb0f320ec03fb47f6a126f892069226f1682c5c883c225b1ffc9c052428a779448b71803dbfbc28edf38daeafec24a1e84a3145dd0d4536c857874d2a73a8c7621719a47fe67b4e5339577bc81f0f5478a314d7774d5a7a73eb0911009076f12dde51565b8120024ffceb2785a83987c7f93cdaff0449704a3e8b174d87f73fcc67825c7897928c09c3b37a8d8e8c8200d711161c3afa6072da7328ba5e15f9683a157f8030bb34aa16163c89d9ef8c49c2fb5277f8549116472a0cef1fb66628e07087185482425a7d7c34209249efca446258b845414d5c0b198b93d2c4cf35e0fd3cea0ccffd40814d2bfbc084f1ade4aeee862aa9da6cb0a76d4e7d267cb6c223669e5f8aae85a9f2e9c26b87db172b47dd89ae72816fbe3b79ca2ac4b5d40f49ccdc569c9d507ed1361c9b3af5329f96ec6ad9858a8dbb3f78ace086c2b74ed9374bf8eb12ca8753dab159858626ca01e5d1b3ca3ded311a339fa854ea86073a6f934d60551b4ce09c2aac50d81b34f18e654529e2b8a7346f498916776ac2d43c5d5de3ad6a55e1452f9d83313863cfb1cf968bc015a6f5f7528bb4af8a080f6651315d64df2bbc9d673306daa5e10114b7aed6202db5c59263b616db0f6053b416d0b4c0a455db6c7b76c11b8b36f180c396f44a285c0c0724132542205308ef5542d20ade5ba47a126e9d3b12e805bc9e55cb862d23321f3ca9c72ee66896dfb5909d89b8c6818fd52480846181a792eef3451c64939fa25480e5e58827654cdfc1ff87581cd9726c9f543ca1893ec85c794953f633bb5813a168b02f18ddfe7adddf4ae6e814ec7ee7ffacf98632278feebe750b8bef08221336d703c467bc2fed241b8baf99c5b3056b1c9202ea77305a8ec8ca24a17c28de39a22bb26950a6f7b8426efbd2c5b5007ed39384d080e6c6a0955c853b7ace0b5759d06a4d8086068207b95326b329e0221b25954b095a39dc23e93623cbbca17a4319757915771f6ab29140fd59baae3e3a70bcc3dc33bb2abc98c0c33799a889a92f5a57d7234c588a2049c07d0e71b9799b81a0bf1a5472a691aa81850d296cd339a14d8d2f9434d88ef6d5e8cd317d20cf6c4b7bb70d9c2afd7cc77fc22a0b0960d3c5014600e6e403cfa562a0f6717733062ad8b1ed909004bffceb5db64e93cc7726f90e9657f6a65d98b32fc97dc6f0d6a69db1fc3720cdfa879289d21db8a415d83e2f606d569f2717a221b189542d6428945e43772281b5d23cec8860c2113543985266114c17b588f81eb77d6a1339168361c939dd477944b02edffff73a60cfce1faf2c1f3690547dd0e24150cadcd9336197669a48cc45b8f8e0e2a0481de4aa3d43a418233fe4f9dc3abe4e79d5da6c07b3e4a1ab393d1af291f10462f5eaf2552a637f074a9f34edc7daac48ad80f5fb279d3a9945949fc3fc156db16f496f0e6c4f9c093aecf5a9927eb160eb3298e4fb77ad3a7ab30f132934215c1369e9111252b652963506b8a293a6e9175a1b6a355c41b55f00328c1e37698c69b2280524531609e6e12dc3ffffd30aba5f4736df333f337ce4d0d4e5078d69fa8df393a8390557b3583372b2ac80ec5ba9e4f000e4efdb5ac8b093868ad51a4d601363a8eec9648301e06cc280f5b782a0ba40a15699d680129b7207aa89c8ea94511c2b59aa57e146fb5a37657992b7ac90ccc973854b762c5918724ef09a5a9273663a62f258528e4ee31a4256a58335303f8022fb63c57cb22fce5e53b924c141ebdcf1e79160429fb072fed2196da3603fce4b4246f46c6e5c24c1fa4cd088855019eed32792c8b76847833616fe5ee974bcd6a31b8b6254497b612d7ce7510540f941fc4570895eb4a1b8cac3bcce938851ac660a13c82d9edb253471f0838a6185d3ab1183ed5b3c8985d549315b252096b3d33d1305c1024df556527385dc5bc48a27b3525d78a706d2a1d0e56e69e791d431d91381d81ed7b9dd47f8c1c3d7bf4fba54663f7b9e2187747f5f6d25824cf8ca099ba43a9a84590f7a089e077d7c0baa1c45fc2dc8e18d977e27c2229ccf05e4f334d6ae1d59be35102a846ff405a4403279fd56ce4eca52f6c5d328db20e5c8bf657ffe4f60ce9634e7dbc5e56204c4bf8aa9be577027ec0fc10affe7497ebe96b707f0daa0727c0cc60ccff799117eeafe672c0c508caff0a4ce6e6952ba0da0b1d64d6321932dc04f7d56d3b4b5b5dc5fa16a94f5e2e1c2f6863e09417fff04db54dc95ec17f2790a972120bad6b3bc34be3e99670fcbac3d9c376e20b7daebbdea671508e8135f80c2fa87b45ebeb3062671c0affdb5d703772141f649e77ce0feb48e7decd8993867a7b0a9341fe95c40cbb3d492e66acf7fc429cc1d6ee0cbfa8da6540d8950baecf142a1401e85be76131adeb8a88e2a1ce8cfa91bb73e0644b80594316dab8fbba0e6a56a02b0b42f139cd656416b9bb654da952b09bf1a46fd544542cdd33e3a7c43bb9a1591c7d491e2c354fa28aab5d1f39935ae8b8e66263b6f27f1ef4fd34c02eeb89d517ecb5694ad991beedf8127c2bb21ecc9ea0ef9611bc821284beddaca43ace317627d2a599c0fece4c3821eee05d70ca1b7a5406f510da5a6b9efec44c45e2f0cfa52d4d9999db533dd217d207f3f553c7b93c10c17dec49021434b1778b7c957ceb31ebdab2bbd02b5c40eff304211c2c13f45e17723c80e0b50bfec679df8226606ceaddba24d7ad4d5973420c6865b0e13939678c4f74a007e106b9af905924bb4ad5030e8adc3c1bae16657b4fe2dec7675d222a99a698735053b18b438d10426834fb2e6250404ddb43edef5bf63e2d0b13d7ebbf89629dd6705e9b4d90719c318516984fd6526a4d864bc6f1123798a108093e05bf76ddefe7016e3305b12f233ff5eab7c0fae79147ff90c3e95370a5a436a0109b4dba19225a62885f6781d9e019841eb2a24c331379eb38de3a7b9572d09074bf6fb8cebcba16a1f00d3ab1ffe1f2f92dd11e9f836b14c45324effcee77ad869e55608d00b109347a0a9047f9ffc5eb951fc552e213dbeafadb6458919c55eaba8737e0b8dfa8a45fe8490858b36b5a8ae6d6e9ea347f3137966f14e6af07f5968da5462f867376143ebb6fb6ad51ba61bec9c0f62d9d2b9c1e66de6820525ba4c14f49ef55f82e39767e1a7e6e27afdc002474806fa43e8abbf1f190a0b37177da8c4872beb5312217f7653a563b9f3c636d71238b32ee95f7871aeaa0b9db8221e2ee4431292370abbdec54f63c0d15511b435a00b7b050699ca6f090c3fe564ff987fe4dd279a79a381c68de777df941a4779e50a1381c8aa9122d01605e66bd26c1eb752fa8397c0c71d07f9c664acd9f6a6afb8dca8cc343090a631d7025e1f118a637cf43a8c99199464a095aac5d62a83a81ebfc13bbf0e8134669d83656fef8b9160fb067fb6ddf14ce5ccf7059a4cd97643a4133cd193bd22bc3fafaa486ee8e908f83198a07dfd69ce539497acc270c12f74e7f8f4270b173ca5cf5235f66b127bd40101de5f80606612c9a194f61032eb158597af3234bbedb72a88bbefdab5c175bfdff8ed42dcb2f1dd4cdb4e81707e7135408a1c01b7d75e0a7264c1fe79e3c5b25d778d0a83bcd91abf08348a24f06f3f1b0e4d37b30280b538b7d49f07e8ab24a0e2a9a1fd8bb0c623a30ff5f64af6ea51c22ea156770674033c918506d80e5bd3c1a8d0f327602a9f3447888d93f0800a2f2506493dd98ffb7c5e771fbbd8a01c9df25d0d99cf8e5c44440c92d344476ddb9b2d345cdf4e47fea43efa9af03ba3fcef10f2e8e739815a6d48ac12da88a350f9dfbddd02f9104acca23e7c3e74916907b34b1c8e7537ff2c0684599a8ad316a5e48fc729d77de93c6b946aaa930e69a20cbf3eae88a6bae80cc2af6c9726b3090450223c31b7625e61a36b1cdf418628e5f7542ebbf5130a230d1d38f5c4b18b07a9f6224fe53d994c14877ca1534701049a69f6564d92f8130daae6edd49895b4414cc579300354f38ec6b2226c3495315182eea1d5c01ba46b5e5ec77fee8ed4c12b0cf7c03bf91fba31a6a7b2d64c36c4a9fee4b624db9ecf4188cbec3dde2fd09cdf10bc6def983fcf417b50b48fda9ae50e661747a1c8e05c4c41440cec8d17a6260e4c229e26c7a969e56c57c4e47c3f067021afd3eb47b69370aee422b63d51c9379ae06e91f7c5072c2f45551d11bdce4afbe6dbcfac5743a1534ce771eba5b1d4cb32c7a0792d0499c008a84d026a4e3ccf741f3cb548461c5acca388c9abc42c0a9d111df5e946744728273cf64b6f8ec2df09fa0d908229ececbfc17e6aeb897dabb4ce12ffb705ee2b38b1966a1787feb1ffd05a37e1103135a1e5b3ea0f314ce3187b79793e93db9b45758ace2f70ab716b8845464a18502eb2bc0f34166da0cda5eed25ec26836ffb551797fa091f0a8b4e875c4a48a72605a0d3b4fea85a1f2c4eec4b72dca28e0f00a0b865032f6dd42b993b9d9aebe5102a2de4371c176d9db42f78b6602d9c55e6be9ea299be5987dc2462ed0cc5d8b1041a1199569480b54b314e255577036673bbbb31214e462cdcd3729712c7696eeb32cd83cc43e0e9509c3c5e21315bb734128e9f2e41bc19aa00db5a41632f802bf2688501b816c080cab3af57cf2ddea46d995b354b33f4c0571d751d1b93bb62f3832b8b638ac1383754c76dc2c23341276bf3cacd4644bc10b9960a632e671ca09dd5cdd8c572038c8004d79ee16b96da66d7534a5b7ff9f8202b9ddc5829a57429124d8a5f496f14d60629c5e3ce11f11a946334fc0d1667f1a45be9c969b9f8a56f8eeaa0bdd77ac739d8ca42015ef607a97f3f90727dda9eaea90dcaadb6a8a35c069c3255d928c41e793e947bba73be950bacc156acea979919db047c27fe935648f1ac97d0995d326f7553b3d0d49fc59d1f07103ff26d0232b3ef4b8a8505fcca9d47fa8a6703044010f8301ea33bd9a808ca35838c9f58683ae3925ab67b9e1fe1ccf432fc56027f940a77105a034fc0ec934d3433af2a4ed299e7151d54e89d81842b76d3b6cb9270f2ff328396865c5ceabdbe720cf63b0d7ac04624323ad7df05f6c287b5be0d2a5a4f119a661beebc490d7eb2392ad16dfea47a658423636cdaeca282d358644298ed2a18e27f0c9d26c3118ec45696569e0a0e5bdb20a4bd7b83a34f80392c3c473fe889ac3e2a721c5503623ef7fe69f1778e6197b13043504221684ccec989edddd96713c7bcdd8269c0d7099d6e1a716387215a637a9101beb947a987c0bde53d793bb9aa58220147d64794a589ea9654651593960818f83fe77826f2a63ad5e544622e5470f21195b04e90aec64ce8d0c4b8c3f75d5dbc6c186435adeea3285bc784c2648bc02bc9eb666e17a7d3d15f02756bd5eed1b6b9e8b666080e6965077f1e16592d1ec86ae4098d8eb2f1f855caf61bd031178fbfc4c928af8a00047ed798aa80c9606fdf46a29f625c39c66b7a952464c891afd439370df2e6099f386d8eff99e5379abd6febe441181db3f69ded461219c28f9da26a8670a6e88dbabd5b75f304f6c18bdc202c897b00598da168d156a94ca782bcde12a7511f687c23a8ae3aad308ca12809a8ca09941f97219256a0fb72a019d52c33155920b8035cd128bf427744b3bfe31981285b8eb99ae4568f84e6d1c987cf8839439ee4d6a57f461f793d923a2056df2d7ba92f5b79f95180da0be5184122528184ec876cb9fdb6d995f5fd8ad5cf6a4d581f6a034b2bc8137f74329caddf529cb19c084be6f6db6c3d22df4c6cd75b6f6210c7378b063ab5c99242bd0a50d8d93e2fffead8d52445e356cff541e922e20e4fdf6eb60319f65cf8ae0ff31185c5af0ad6cffc2331f50d0437fbf18f4163d10f1b1f58ccf643be19dcebf4bbc9e078cf1561cd6b85083ebdbfe6e83447534ee0f2dfffae402c417847f79b9a15c82fef3456c9188deddce5c03cb272954edc680f16f731982eab9687b9344709eb38edcc157bb4cd148c1ed173dcb4cba50e06c85afbf16eb940e704877b4d16a8284d450451bab31ab0bb6c12c3954af4583fa7225a68245aa5fc5708bd16bcad727027c9e7a4e07edf5e0890037ea3cb4f8523f3bf0059913f48e7b3963e7c59ac08fcccaa0dc5af8c793f7228eb66785889d74586448eeb915f4efe831ec63b397a2c83155fe33b3c9f694f8065f3aa078039ae3ccf34c830a1f56ff0423ad0af464f93b615c99064232e7eb668ebded13ab3846eeaebb591a3637e8a434aa871ffde6518b9d94d97c6e786478eaf755a0bed6e8921f44238f611b0ad9c663135f9418d99c6a2c14bdd3d0c9021cf0be6663fc3182f1eec9afca89cd6b81de94fe51153d5d6a6aa04e897683cdcbb012aec3338985cac234c3960999210f25f4425d67e39346556377b7f2fba1a04037c00502586253c64a12f023d6c415401974e0953509a5f6467f86cd984543a717e453f206e23304f4e6fe60ec1c3e35eddb01289986305331b01d8ec1835bed9862d28afbcd12841b85e84744f12f0e56c1e9a779d18f760d50a5bde021901ba481ac52a0eb9a4da538d761440b93d33e6cc09a3cb36967c0a845e35ce88c37228b09d25b0371667c47f3345532108a8c25ad8a4af4662c340026879da0f44cf9c6109395df3fda86fa634ae02d4e3d2834d8fe0b5c2fcf4fa06f310b11735f137bea1cb745adaead99502b4bc5f6f3f9e16a7ee7b26c58fbcf49690e02af7a57f1bef527fe62ecd76be15dffc2b0b5e9748b9246c0c4cd1fd6dcb80e3d50a4ad72b5a74fd2079ceeb93f6a65ec238adf3462c3904ce038a3fd4fa57388ffe6fd44f7b9968844c4d9cb91dae40af87ac46b18982d1f68a06e8ccab9a5ac64472fb0abb363eac06e80e90033e3e6d78d7e5fd49a8501030e6acb777a0c7126cf2cfefa1e20be24a1cb5bb4ffcc4666ccf658bf4f00ba59897e027c72109eed86da760b8034cd1766a268d4c506f3503e14a0014107111319927801291afd63752260076407df42c4ed5a880ef9b53bebc17ec1f800cfd9c68f762f2690542ea3ec03154f01bc4dc39477fa610d53d0dce33927fb55bc52995b442df1dc6cf61821a85ecb8a2bdf6b7f084f46aa97b618631a5dd26ca02799df2a2412640d64dda797095f0af5a0c59754b245384795a72a698805af4300cf03703c1192fe1ff968183f94e9e23ad8c2a549e71f2c17921f6ed31c846d8341b05d9c77cd09d0744b7328f08fba52ace9413cb3c70ee2e0297064a055e55bf9cc3a6dcc7cf41f5737efebfd6445934af571b43299b59e9932b9631989742eff404fd6960988b3a916d5b143d14ba2b9cc7dd9eafbe8f4c6218ff90d88e2a559f5e4005fdb8d3572cf6da1493c932a0158add26556718b6ede3b4e06baf76711d24113ae5acb4cba4affe4970ee6d12b7f49c82b13160d995004898b877a1d2fbeae360cee0aa18a6fd3a1b5b00c3f3e2b98e2c298a01f4f6134d22557356eb9a3729100ff11dce92631012c88cd1d4243e349b44fd66b99f812535a92ee03b968d64d12f5a9a4e057602c8200f11340af7224899e82997efde531b5a06e8336f52292ca389aa176eaa949427f3fc83e578d9cc7ef6a510759f697bbe97d9739329e87b130ac7cb3c75480f16c80e547237cd9f8a9573a3bf28dabf6d6e2e7c90791554e46a6dd9fd6a9fb19317c1160fb8602a33412fc22b1f195edcd671aee5c452329e0526b4300efdf4135fbf593c7f53f51f86040c47e6c7e2837d2d8b019001acb6876cfa62b7057f2e0c539e76f0fba895d0cae2a42448e307deccb18260b62bb44dbb1d0407288b39aa18465db1d98d3cbdced5be3c2ec8c057d992d6bae2281de49b7ca283e9d0ccb597e13f36604b7aa9aa65f4b2ec1c4394deaf8d03083a69c888c9bc91cbc85dbb3d0fba03424be620c803f60d034618023677f3edbacb1e85fd64b0d530ea733782225c8cd206f5bfb24020cef6eea41c9b7cc9bf5c52a29973ee3db2dbaf939701b97547a2153fd2e39b036d596e7e60583e7d1c7f89ac6f86b6a1af0e8045662645b2d834ff0b16f6852c6c8d5e0d6a073d6c6996b88294a06e8b4e5c24ef217a5793930d1d1dd8459eea311535e79622ea364b3467cb955b66690546d61765885f762c9d07beb36b38fb7f837e837125d56915cb2fedee124ea968514c548ebacdf8f957378414d1e3ae9c4aa07787aa7f537ddd79700b5f77faebfdd00d298c339a8dde34e499144f921bfd342a460b58a3d7edcce879ad82ac04cf09c7b29720b94e9478869cacad3472fdb21238d2e1c8b87e92cdc586ff5b4727621aa64605f3d01c8ab0bbf5bd1445de92c5dc9bbb40940283865b763e7727a9715c913363c8a6d8e4196399df9fe9126ecbbdb04599ff1bf7a8b7f5d08e3ac7a023ffc9bab6374c0d2720038555e13b9e8a38db01335e1d67ab6770461ed4f486f74e838b2b06086e406dcd5ed4c2acba87ea568eab35996c14f6801f979ad28e5d09eb55c59770901bc951cc7b11f84b5b5ecd3e701a126d6bc1afbd9700c43ebbbe8b9ae470271b0fbf2b4ed733a0b96ae2a9a110701af4167559b07b8b5c1099d8cecb26048e67a2cbc46677cc389d3d3276471aec1598bb6e1898d3bf0c9c7de53f76f8d938fe5b5bb793bb20225f58baada0ddc284b3b13856c73df0483aee60582edb729947bffb7f673ff3f08833d7da4ef7a7faed9e50aecbf8e3b18451d6a3435c4531ec4727864174ac159055366691f710ea9ed9439b27b2fdbb014ec49b64e9e59554776c56c2d7bd14104342ed1a3a71d650088d866aeaa2d72a4b96caf402b83608c7468b6bf79b7e807489d868506f40a9928afb061e779877ced99c8145519671bd227e9d42ebb7596f77a2dcd75dbbf41de88369bcd071725f199a9d10262947dfacbad7581251139a98f7181db19ac7f1229a364461e49252c34f97f1ca70d39521caca95a3ce379c6a2f7ab22f7fadb2a5b9dc43a074506053161278a30fad744e18b78a14914ddb67c6a5231bdd1dd8fe6ccc48f0b344fe65a88cf344584df37e4f5ea3e94cbeee1e5707ff0b3580ea992da6b2e703e8936751782022ed3da93eb90081a653132b0a4b1394720b8f5e0276cc2ff7e8a3b5c4bb545dc320e50bfbf04d91b046e338983d7881e4e181b9d6c2dcfea7f41edc2a40b22aa9b5dc72528fa652ab8a979d54887745d83a106462ac29cd8b98a28cf48c02054afe9c92ced1ab530cb0a8afdbc6b06ec087b404529d631af758e72ebfe7d47c2b7dadd3cd80bd01383baf067a72b45b325cd5100310f9459fb74567e8feaa0ddfa588cbdaf76bebd29e1337dd16f3a9b21bfbfe10a15cfbc936559f0c4ae328bc28a5c173b02881404a6d9a601deeb8a467b144e7b91eac2858905aa637206b55598d7b3445835025e326c4901206269da26d7b14e2beb521807e11234dd2244fcab85f7921fcd6e7dad74d097dea72126eb9171498adc53960875910198901effebed4cec00593faa3e77a28cc0c09872f0c9f63557c4af45b34a90904a582da67f971b1ba3e05f2d0dff27a76db7b8065d07a8d939ac4d6e31e775aa9c8057398f0bcae8af6ab54e4393c7b28e9468295bd4efffd99b1558a9d4a917361286ff45d2c318cd00295508bcea73ca5d8f2412b6336dde99ef4d449a959fbf15a141c7736c76a4a8a3898300f8b4ca1c173fa937dcecf1afc3932ac0a00ae09290473d762fc9dd6c0b34ddea593b35d8e7c248df5244bae3797382ce311f40903b59d06473d81f54499c3dff75d0b49ae7f51935fd3de03ff935744db2a788178abfa7c39f6c13674609ccc9b53def69ff2041c1469f0ccb2b212ac48a6b5f3065c0ec1e1d4d60ade8c5b2cf7f498d4d178aeb0b9331e58ef87fc9bb21306ee1b4a6c4fa5443af2e181716993cbb374e177c3d9c4dbc149046967cbadfc15c345fb759e1ac16a8f3bf4620b0555c9475e73e5ffbdd0840d9ffaf694a2ce5d2314e3cd35a8d8df203c39bfa9b30f44dc970187ab0a9dd12720912b8f2706378df697c5aee5f7236660e5ec9e2374b09529852b6441b0332624e07923b1304f54699c114238a8b1b2586d7b80ed128711948333a3e9a4147b1b4d61fac7d90f26ec4512c8476a14a47154deca665542c2569042f268d61f96725c686cd16cf1660d375c8968c7b6ad4a20a90325d98e37fe10ebc855e29f28d8820f02647880a23af7511e332e324d51454ca3a20ba3e2d9a960ae17462d72bc42d8440768575bf3e992ef2d19f20515574c2471682e4397ae741c537d45347c3326ba20d8c003d6a29474bd27805504cb2a2e0a7ba7eaa6b4888b60f460ceb6c7accd4726653a41a6c86779b367cdae1558f8e3b28b3895400073e6481aa1ea74cd05f0fdb15fc36ab11fd96a12cf8fca7b3d83a962cdd1c58e7e49e4ed6e95cef9eca4ab2ee4da52e10652a80beb185ee36460cca91aead9850302573385273ac609d8db588a0513dac38be9dd90e64734060198c8905ee0869ab62b87764d5cb3b613faa88fc21200cfcbcbe2615827ef7afcaa6bce9c7ef5bdcbbe73b246894599dc75a996afd1e5a3c8bac4cd0c55686ba85ded36220974d4c99c62e9c154ee2d98f8d61f1cd81bb7d932ff44716451309b3fe7678e1466881651ff6d3c543fe9dfe0a8899798f59493c0ec6815e91c725bdcc4c34f345d40585b83bd15eb9d3727c9bb76aea915c27ee1369868383c9950911fe9d3cdcb8606359a69fc9f98cdf7106966d06ceeca01104865e6f6342e1019433bba5523c1865ccde44ef4b4f6d4514cca9b6902f3b0daac412087959920c1f949716f18ab7f5d88cc8b7f644a2618d0226e31d50804acdcca8380c372f9178c93878ffc7c57a445834084495092b39dfed73bf75f73135452be5660340fa6879a7b1c51ec85cd9e98fcc7b67270ce00c0550bbc72928a9d8a0f9cde64eaeb74ceaab8bb54a025fe8e1eae4e586 +MD = 8f246ffc453f064d80ab22abf3349a8b5e6260c3b7ce0f7385ca0d81 + +Len = 115992 +Msg = 6af79abf52064f34754ea007f04ba833d983621c1a0e1a2d7f5521c00d1ac53e96b980878aad70941055075b55f804f22408a2f8b8a30f31ce5f1f70fe4742ba4a21b4a8f8f3f30d9dc576d97ba79c3d0cf6e310dfdc5a72a31659af82fa6f66b0b89cea43e0c0e84524544a0760585cb9d78c2d38bfe33927013544413a3489ed05a114137cc06d2ffc0976a4292096523207176a5793cd81a81cf9e40f796c2c902bf012d0d9e384d4fd25f80cdc350090bb961ea95078da9377941381265893e2a344e6e3f4946b35981fab10747fea781072fcbf03805a4bacde759923934a826fd937bdfac60da6422b663dd0bd39726e72aba0952e2857259fb35e58657af8f977ae67d1c291af6313d19cd93614063d60d454ecca6d3f489f74d9ae184bcda8e5f2e863d020d8639d93347534a4bde5021ee4f29c508c7fa561100bf3e488e3edac489637e2aaaa92540e8dfd101ece2032578debfac5317b220d593d6eb1145584905441feaca0b9be300ada81b26184b7b5a7019372c5e75ed87e3f10d1a2e621c784349d67addc77a4d2131fff04f556062724421ba5b2bd776441f36ff5682cf50e59e6613ac12772cff0118f203ab753f59d2f4938a4e9f4f18a3e1375a34c22d9f80224ad3177a0e7b980ea1e1c81a3f9b48383e68487560f641a458a5f2a57cf59183870f40e3804b5939664635dff1bb06652171c42a6a515af8e9c636e9cd7c35123e9d296410d2d731d5cd7f26e43dbff3d3332bfeb9ae624751378bff7d980d56f8293b4c4ea6947076d3fe9f8597b77cca28fa92dd81fa2835766c572bed6cba3a2fe12c883b138dafe65e9a545d9f587cdfba6754608503ed0f529146c0e5b48b0dd5855c04d6e20790f9b7eef3da2f71a3d5ecacce95730e6ec93e5cc6fafe516f62e73898410604506a68a3feea6a3f21f7b345209dee10215aaeec643ec023b113a2bc6a04723ca12b4d21e362813be67a2bbc0b10ed88a36173643d03d2887f827845fe73af070fa6a5c725b50d0e4de7d68fe290f9de81882c52960c8dd62729b873ca2124f9f88723225a64761ce4cb442f5b908b8828391a46239b5ac34463e3b4518f6c8bf82745c1d5f354ee279ef518ba921b2c23fefdad4a32d1a653dbaa863930fe438b117e044ce42208a2cd59ea94084110f13426f69e858b15d1fb4d67c59842a72dd04c8803b945e2d2f0e3038c75660d0c8336c074f5df885b4d7ce79b37e23d6cee31cbbed5690324843101e86c2246f2669d8981f647743c3c89743e92555ca4b5be2dc2dae3f03401c4445c5ede753f58dbb03a197b700163239c043a04ab71e1424cb43c4f207de40d693cc0230e4fd461e301d1c3f2573bbbdda09188a060db7e97077c131a6ec58cdf2e227888a063d0807da1b9718a30b2a7882b49b1de1ec3ab310cd8448300b3249518476add719817022bd48436ecb8882f79d0766615a1e7c580f745574020c7f5f4382b5398391533b29d90d9ba3dfdfb0fa564757aa9db395b088357ee4637e5589340af42341986e88d2ddf43a3879f5f40e2a8983bf4010d74951165a402d7b811514d0a098270302bc1d3f399a370eb3b976c18e8d0b11ad3d0f060caa741850ac3c95a39ee842be1e3445470e01425ede93c5730efce05aeed815a1a93b752181e80ad35cc473e5808ace0d9bbfdb1e06e95dd94afcc405e4150ac2456adb1a1d81f8d9d9a1dd9e6a87a23349591f1ab8e053684af107d7a52cae1687ea90630770275c1e69c9126593886020b8577b7ce06ec915c5eff7bb87c94676a1dc25c71c5f0531027f69f816493c29c2ca68da5175a4b35ec58dae8c23f91a780988e6ec687c1c5647caac78ad706b60c20a5b9b31a02da6d0c304a583d87c575eb3eb4a0968e74b695d08217ca4ee7b858886266a668a835abf4739b28aa32722cf5e9d0c7198cb2c4c94797e7fbbf95c0be45ae79ed2dfa9a9feaf79b897ce9e03c84c374039bddabcd8e97baad9c48fbbfba072ef0ea106aab2719e0a61361a78b0c1537dd108b9d75dd73acd50c266bf565ed10145b1b9eaeae6e9270845dd559e6327d0699612c5aaac848f29dd29407afdcd7d7ff70a902e7624b894e531c31a9a7ddf084e2cae47d121986bfb1f65f1e62e0bc45a41c4068915640efd5ceaadce1b55b61851b9bdacd9911e0691574280bc521dc5a5b0fb8786d47d75a7f1de67cad87bdcc70e93a774224be5c73df5323ffb911d7f7994d93db0e9355a0136cd52106082d7d65129b9f2f980094092667ead294b174a5ae5029f5b24bd413c697ba76cf3c939809971aa30bf9f88a2834211ec37b549d4149f49d92c18da78a10d42a815e55ea76164f1f88ad03cadf153cfe2c9a19e8aceda576e34b2f372decf8c1ad1736e4ee85a705ac9e6853917798e13ea2272047c7d711f25d4b5b3898a2acc10ba90fd961bcf5d64278ad05f7cf6888082edcb844e3ef6e5c648c20806c7c6b803ed3dd36eb50a43dc74f93023b04874073666501667fa5dd0d327c50b090eb296ac95071dca674f4c6a3df237645baffa765d469c9333753a7e6b266198aee7bbf78e9aeeb77f6ec195220e81b9ca18a3d439d0aa6baa164b731595cf1dae3ebaf3aef5aa245789811c32eac6589c9649798055069766264cd7ad791f40149edaca807e19b8f989d528f5efd1e9d913358cbd3d79be6f8e85d5bb3a17a8eaf164a4899e021c6c5405e1f28569138976b03675efcb88ce373e92c84080fe381ea0a853bd2ef8b8d4596eb115557eb5a7009f32d5c49f8a08bf395bf221e9040dd6ff654466f3e6ef19f8ba055ed3658d6dee7b562ca8abe84ff0fdbac41258a64ed0479970b5fc8f8ca696bf4cba9f12414cd9daca4e3ac138df35ff2f203bd14f44822614e7059bfba1cca9e7da6d1dc2e0d3c967363e7ac0308b2a2bbcb67623839d521c3106fbae10e42df6dcd6973ad3f18ccb0bbffb300887a1808ecf7d10b420844e3a0997ed1c66b24367e366ef4cbb89be73c62cd092b2cdf63d90ce5f00932674ab155700eddba094249a732a74ba29081659f5e7f3931655720151588e7f9f542b33232eaacb5eb2bb05a6327275d4709e833ebf56b3e564d429ef42876c57b7636ae3c17cbc5665d32ce7516f74f3c0b049ef9ee198a0ec0c108e6712e0b664fac27fff8a38ef7414151fcd9340ecbef7b5f0cdbcccb1b5c1be170d586524259943df31fdc691a928ca34ef0560293318ce299410d77e879c3c737d808209c0e8f6eb9efcefa4cab45310ffee5c10e6be9c823a053f712a459188ffb3c0cdfe8ee28c90b03990a063b6994575bd0ba18f28e409c28ef06563c540da19a5d8a7340fa84d402ebef3dafdb908c30a812a33793547704b65029ee18258d9bb92838186281ed556948bc4305792ffcbda4a53975f3d36ff37c7a0eb35bf1c8a64591e4ef54b97387b2fc7555b2952897dc9978b48333d31ce7d0eee43580999b4f3b26ff51cad5cdca98b76ac16e4cad46fa65cda70ac6992ec93ef936bc970eb17e6f212d9404a1dbfb99a34a1dc1946042912fb3eac30ebdbd5f80d408397728e62de33c9778ba83af9cada1163fb3b4fc7b695e3650c41137c10991e6097af20cd3b40357ba6e3e1f20d86b0a0fa1b19294f8fa8fe88fc5d31401f4f88f60c94d01220657323387e4d6b20c4bc9d4f2af6e5d1d5a029847f9c8f8719223ff0b4126abda1888b0ed7b1ec9196de6c3d4ad78143b2727941416405b9c556f7c3463c4bfe31e264ccb6c799bf6e2ff04e417429cd879dff9c6d31aa9e9a4ea8ec13f5bdcb5ca839dce137799394d7b0ead674e8579b4843fbc9ad871ce22fd9d5e3e6c90c6c038fa520a894f54ffd357ad380c3c9379ccec71f7ea31ce32413e57eb676a9a71af08f3dc3f3cee8c90564fe3fc40ba3c12769354c0687e752dd84ab0ecd8b5616e302fe2f9d04a764aa121f5af20527ded647d3c0b94334e4bf1a3496d498c01ef1662d949a81d4f6acea007855a00b1b64cbc381c33a1200410fdff595b92f5ba023909cf32bb7a691566842f6c296a1585ccc382c52cbcfeccc75d418d7e9f47ba1f0edafec989de3bd1e5fdc5411983a61b58dfd75a67847b7bdda63d837120749142fd6abbe032987eb780f3fc428934447273d8aea23db3981b080a661ddce81c60b715072ffec1b97359869f777e96c4aaff479e0fa2ebb87fd7727af7c57b2cc2887c2fcb9b3e3ea3d7ebcf2b0c74186cc2a2ad022caa3986a4e4569182a45ef3020eba45a0646ac39c91ffcf9b22bc227e88401c6375a7c9f0fe6d6d8d0a0f7c844b2b20a6daca4d082795f7a3492c8683571bd0cfb49fb43c2f43fe5d02dac9afcff6df0717d9babb0b4615dd4de5e361ad94a1ca0d7ddfe6d56ec66b253d64e4fba1e35992259725bb74bc71b774d399ea2f11fae6be97a1af42584ff793c8c46cc0d006e01a6cc8b6a65e28fc65c1ac9b5fa3dab6fe85cd0b632673e09a7fbe81b827a77834a6149b5f6d6ba315581a3faad9d214aa34f98845a36f76adf433d90c5cb3c100cda9c8048cb2421fe15355952689764dff97946e71ab204ac0d4d131d1a4511b5df8db3a1e853ff217f86bb30c5962567027be41f3af83fd601218dd48f1bec0d1723364a55d13184679e0690dda5f50213a6464bbf508324c6c0e43054450bdc2b66f18b3b2621f0738624bad84c3c77d40355b2d043385f0532027a8e4bd4eac25ecdabc2d8352c4e45fbf6dd13628fec99f79e9658c64f6580cdf968b6b1ff8514b0f41171d7029ee3758c1483cf1204701555381795bc8fb12ff7080c09e21c8f84ac51796e380c6979c3a623ebc8c3919820df080d6e2acd0fba96d8445c2ed72f1ca97662973fdeeee5bb7b1f78d2036647b3b4972cdfdd548b3b9fc93563f59b8c42f21ae7e04abe387a14d1ecd8ce6912dba299c056e7e8b21eeb023565f0ae43437400f096b6d0050c756bea7efb87c9805a7df036f6b27769435623d9d0528bd5857b790a290c939926533b6c91aab3c965a985270f9a2241302dc96a9e6eaa20acf34ce3ab5a2c48b0f3a74998b919df4a8747d33c88fad039f0edbe61e9e94b71d02fca44a216419ab1f5bd199c43e9917dfddf8464483ee605587d21ad907f5c7beb67fdcc9aad6cf7ef721a3b7910c3f571f6f01654b3bfd5d250e6a1e7e3f65a4861ddc000b4af2c5b0da67e037c675669be868766564dc823dfb9ad36a0c6d60d61ec67907deab70239c24d28540508aedf509dc64f174712d1a1b9c4dd5458040e33a79231a502ac9c789032c1257308025641bcc7a5b868cea7addac32946f311b9694df7697420decf2f67ea50ff3ecf9f5c8fe68084ed80d271c07acc09a31187960af8bc7528a8d01210f80d141aed33d488d32f14698c2aeebe29c50adcb7a314115b296d8aa281217412e51a62051a93efb73acfa49db70a1cf89db065ab17cdaa4935c40f73ec45dd615f79dfbe5c7f0cb92a1c655982ae2110db620894eba71dea6ae37fc31964910c039959c1028226028665766892c31699078a8b1a258cb1654f30a23c0e67d93c59e298b5148386b9d6119d73ef2f43baaa8fb7e6cf63afe36c144084d537fd19eabd634398697507a388a322a2dcf09c4bd954a0f0145f8b4af8204376ba45ca3d908313981e39147331501cb2b0656772d02af09186098670420b22f7daf978dac4c1cc1b891a07d1766b0a2795e942a7dc007cb9a3f5fb665cc9c8627e604a4ac2e3162a92620842bebe930a72c6557365a0ef70526b13b5ac22dfbe8ec36914f1b19bcc21574150720f60622e42c95dd3d0efbe7bb2f6e49cde0c14f16afcc0b8f500091e43d782f8271837b3a6c6ee8e5924ac0613cb7b92c4f96b919d2cd78175f0e9716cf560b9ce6491e83a73acfe033841dcd6ba03f89d4ecb55a421e0b3fa1175031bc1731dcbec79b545f9218b95d086e343ed033531b23d25c60263b54c0bb4ba9763428de857f6021180d59ed9978104a18903b148cec7e94df7e8f13387af7f2a04566feb4e11b7e42f4f9d95323c283ab98bd4aa4a74897f2af8ce772d6c3b1acc352c9d78d1bd072e17f2924cbf3554a324061ecd49eea5c01ab4dfa4f5d4b0e2692dc67e3efac2a6b503988b1015386f55af6eff50fe06e4d70b35955234346f7ad92e0760575cbfb13a6f9739ae2e46a737608a90a2ecbcb63c3fa78941ee9aee979cbc40bc1fa094fede1942ea7d50a106bd1311c39d703fadc683a4e5258c4fd1da44e5125172e6b6aeb931af6fb4cb844c45dc476229fac791d0aa06236c24eeae49573f3b5c2dcca71e10e74a9bad1ad7c5f818830f70f26a37a48e2e63f656e1709f2d2587f3a791f1e679572cd02e243e6d1c48492897176099648f994c703b63c4c2561abfaf34d9bc4dde90bb2afd56443df900aa1c61f291708e35aea683cacee8183e1a4c587f994b27eef67428b58461dd5b7feb1096959a7260a45f834cc686b11b8be6c48a855b796f0a766d0435723d832e6aecf3abca8541b7040192b3846ad89ae541a389651e3b7e9696eb5f57619f3f03bcb2dee80d016efbc6449dc98b9ecfb19772ab515c79da3e69110bf891d83b1d4a7a33dc53c752ad9a098c3f5c94b3b28e9ef5077c51a7d5b01f413d1556a91f5cf4b48e9fbcea82448989cd25e3cd51edd06f6fc5ec6bc331bc070e34401173bbc768e73907bee38e6d9b5b2db2a5f47eaf20728172b16fb591675338befb802f9c57cd68d256363e5dcbd2bd2ac40507e410f6f60bfe43034668f467faf0ae801b8a2975423be41d0020181d73b1ea511647e46edddca6e58212d90a19776575eb08e4a881f456f3ffa21695b4f40d24eece252f13d20021ed6eeb6846190dd7b5d9e449b709f3880159b46d1516d44814ac9f81d369ba80308310cba75d0e6e200613a00b0222a3af4edbecbf9ea9842fe93cae45273acaf35a317964cbd102d59658f5a6684d0eb188715bda14f3a1e78ee3fd9397e9c7ddf937bba6ebbc5b7b919a8fb0c3db8fae0f5f028d011968e6a17cb5e23e2f3e976a08d995463840bb00c3b7509934ef4fec8e2901ec859ed12dee1f5da675f9c9b58e1b5863ae7b3deabab5ae74c0f53b26e5185e5d9e0e53372383295621be1ae0afc918ca84d2a85767d1f3dbe66b1ac54b16cbdccc7f12c9022971d69d5632f5552afc04240ea54fb2534757111796d2aa6d70f277b8b6ea73585baf4f89bafb67872d98f4f7dbdb8382d16fa6c35553e96376260782e8a35e590f68a11e5afbcd28d20e5e54f302c2a7baab0e35ff53f0410501e4a550fbab75b689fadfb9fc6f5514efc8ef94cd570a2993b1363dd7a74f440a77e995fa43f1789ac192800635561bc29c8e67422af347b0f78db7e9f6d45cc926165fa80c187c246000562107720e0f41fa136c24aa3c8949041490c51a75c65af3580eef31ebaf3ef1e456cdf3155f1ffb41502b762fa60d61fcd5fc67b58a7c492633d483ecc1c32dd2ac6f1f5a389e5899f828a14890ad6d19be8304479cf2e0711fa457a8e4577bc72cd53f022526dbc26b0471b1ce8ff01056423951842680e2db45f5479f62a46bdde79a38ab1f4a65b1a52f8fe81db28ca2214dfccb7ef1206ea1a5f07a4c7167c78e7a2254f16e29d3f5220d67bd7a33ac098a6ff864fad4e09fafcbfe7da763f2b025e8a7040fb7d8db9450d2d911ad7be036d3933f65a63a265a01b25e11066736e4b32cc1f5b6c83ecb83b1d840a317909a4f2477f83d8320f0ba1f5576f92d09ffab6c8ee7cfab0810cc8d22cdbd89fffe0c34747c42c374b71dcbcb9de44c0fbef7eed4aeaa8a20ab53ec1f80a2d817a9314a9db85c020af85340294f6dcd3269c03afc12ee6c6ee441593723fb0cbee5e7ef5c763449cafa8306d5543fb759472dd96cdb445ada03be59d27c6f2edef856aa187c729f9c07d6a3397400126ca167528ed1535b4c4ff1765855a7445e2ba5033a93bd0d686574a1bb7759e652bf952dc9bcc477ac11033731744a5926c6fd822883bd9a165d8488c524f13cf5e9e0f384633eb6e2921c24c5a101721e1185b04b141b4e8e372fdebe44711b3c67702b298f6a21d61762c67ca674992e5466140b0e7f31b83b9c2d0e9f808c0f806c5d1f08efbf71eb00a4bf4a4ad53ed6c737d138904c7cb1f4fc1cfdc796567efc12ce96779999551c47f4542c2f36e0d19f035bf7a6c3e05ed45226ed41f9a74ad09e01a7b5379cdf35858dc1adfebaabd60b3f5c477311033c17e19b95e1447b22f710291d340970f8d8bdb25a7eac7f644fac6538768c0abcd3f8799bf49cba8d418da5d976e4f71857aca63b9ffe72cf396abd80b2999cdcef312e5a1bf92d9be43ec2efe7759e1b6821465a47f7aea12f400a271180e125d15563da3fa1fcd348eb29696e038b8b75e53abe5fe05b619bf8f5367a88001ee22cbf2446dd50bdd55e824ef2d8e6efe5c1296fd001a098e45825b4d4fa22508a7deb3f1af551e2f45e74a75d3ad8d0207abb7680a2a6cd722943a9091e6e4132128e33a13126c90bb2a77b967289b58edb99da590b9588ad32f61e003c0d7b40b15109c5d9f8fb8423c4d285c7202697ab6ba342849452fd3de719a19c26861e23dcc86c34eefec57973b51283c5aba3b1d8d92254cbb1ca10bda5d486e2e8322fd678808b315c387c5b2a25eca2cd1ab68985e3c4632f7c7521c78141692be69fe822e826e89c43f3253ca64cdc13648226af6c1c84547b31bb899016e2d6a13ab9cd8c4d3c4750a878f07de99e06e9dd565da5a455a72f0f32f2e94d7572cac7f281544855e4c661fd50920c0e2c118fc19976a3ffb001d62f0a752e4c86cb0f3a46285e5afb0de75c63cdfc5410455f106ac763a9f7574d59da1a008c9a0bda3a25f0d973158d023c3117039937eb17ebd9802a7c059a3e5969c10d6037f2ef992594ffcab9ad7945c35667052b6d7df9ec8941a061336fd6c0539beee4e818004ffc19846fd81620207471bf73315ae3adcaf03c9388a879e5b6f35e29551b17a9116eccbf739f75505769f097a17550242c7e792403b3eae2d45dd98ea1c1853eb948c832e7ddeb5ce997bf1f2398e95895357e9b0b57d0bf9320879c34d2f313ddeda04f9c982b4b1042559421895651ee5b7480075bd382dd868fda7716083266a67d9efa98dd25b6b4d97e02113e172039825c61889c3599d519d0d0556da23abb87a86aa4a8f3c23374632ef84ab31217d1b580a6d3dfaf564f07a856c96b4374e5f4528634bc1c084ecd0d06212cab3d8816cc7d20890651570668e2c5966719c00b1b042a88ac7b8e4307036b8ad5f2d004add4293a880e595576c1092990f13f732ee7325f5ad35d4e84b6d2d5777fd1098b7499fa1cd47e7d3cbb3c2fa5458bb6f1f6f34a0e5ae275ece8fc16782cb2acce2616d1aaeded05209706ad8e5dcb5bcefb1650b0564640a7619155c2419c76deb048c81b9fcf758c1f11ad338128eb2cbc427a2810b0371de93a983c06b6ed24dad9e655334c56e71902367cf9caed730320cf5ed049e3b6489fe9cec3299b066e6e3441f18b2f994e8451510cd8e90a9658573ade38cbdb45674f60bf1c08ed32b2b8c720b5880a863d059a047a685b3d911aa581a677f2aa3ad3da43b8ba42f04a7cd009f1e9a289d55a3f27daf1cdc273218502bb70653dc27b2497243b6b6ee18842f568dbc91ef55828be1d0cc8eca873c4a99e3d9ac7a45127038913d2751de2072a42e5e70f45083d106e41b482d51848be7866fb0f8b5dc9cf0fc8ddcca69405f1a69064226c716767f319fa4da519fb897074eedf1da6f342dde4f63d25a62691bc63a820139b8c09d41b0015bd7dc352afeeddfd02348ea51cef848e421e5054ade61bd0e18f953f3ad02fa1c84c8a605d5c2f32e30f8040f36fef88a4066d80a1a125fc7f546b514dbeefbb6c8e37fca1464c466840b35b8bee9ef3f465645ebf1d2f6a94f2f487346fa929514cb26ea3359c0138ce0d3e0cf3fb97d9441d3630e19fe3c9721a29186bc3b4208ee3fe8cb1872bfcc178319d076d3bfcaa80501c75df2fc6dbc47e2038a724815ab2f48440758b5b21db7b66b15ca9049f75f3aa6255163235dacf7560bb411bba0797b26cceeafef71d65907930a79a2ce468022f6b60b58943643e6b69d397b5ca303fbcfa108c4a283743e752fe6657b5f84d6488d4f8dee985a4df18a19c53e30752b861c5ae23e339a68428760f2ad0e8b38a133ca33cb37acf462f74d39d3a6414e96bd10c8936b2e2d71bd63ead1d835b28765e5eab898ae6271814e49ab78fadd681fb4d8409ec1e6894e89ae785106ec61802cf3453ff110b3a49765343cf4408090c1a1c442d83c0f972cce0eed613ec61f2a1def91f7a79fddb31cec46e01056dcd1a5ad0be3966b33d7ba0421e7323b9f57ab2643346f9c991bf1524b20d571303f64593e767e22b1150306730b5f288d203b67a82a0130634c53049e49085657955e676ef36bdc8b5f397475403e23652e3f42456ae501c8cee251d4bb118c9f6e0436120cd7ef1f30bddc8d2827a2b3dc2744bf598377461dffe86319997a9413f663dc055ad1091400bd4f15c42d05b4a3dd5a88751747b43c36edc708a6c231957f018f5d38c583c2752fbb9c28b732156acb7a32485a2c07abc955d7a7a64161c6470d677cd10a43c2936c083c54fefcab66a133a109dfe2d58a488ee3bccdfbf7f101f213b81234f43eb9a0ce7b55d9edd09001b7b35a6e329511a6e17221c482b3ff9593e725f6a87616ee5576e12dc07db914d2f3260a519e43b82763074bd4f468ca83ead0094dde265977f42b78c1e29ef5a955cd37a0fa412b3c0bc9028d36dff95a3f8afd62db4a7a9c6f8f4b4093b41ca147aa86af4dbc8885d8f18909efc7aa9d51c14375f205ba3935a705eb059b0231356877daecf848ab571b3fe9a3b276a3ce1d6bf5c6eaa0e502ed491fbcb64effcb616bc26c86f3f302a0979ae722c62400e9d760ae6bb70643dc756d2d884b53663002e4410b1313781c309c2e8b1194a6d136552d0b754374ff2b41dca38fe2925ebdbf1ee71e8303f89b6bfe6df16c0c4de931c73c53f312cfdb3c4e7aa513dc380cc13a9d7eb852c02898bb4dde10cdca60851180ebbba9b8f5baf78ff36da076608938a0dc29c10d7890f9ad402947d14cdd707b94f3a6550b5c7c4623568b745975ad938f5dfb3b0bf33e0ec01c26ecfe99888ef841952eac8f215f9d74f9cc7824fde830cb4dd3331e0cd4c67fd7980647be3d8e0bf2a029c19b1eca3f77e92d059e0149085550be9fcaa1dbcac64cf47675f9bed94b5433a25e16422c9254e8962291309b9e4deef70bf868639f863994645613301bb52a9fced89da2b58a4b651ffa9fdb85255492554b04f0bfde562ffdd51396c03daf1881d825586e13b5e0eabfef6ea67170102b1c39e8a3bfcaa7a6f94873e56811bafb9781b4386bd898074397bb7eacd1fee1ee6fc1e7a517a9f4351a5e07cef2e5b0892b2c810cf3f91a4821587a51ea9d3e241f02f818cd956a1b11cb83dcd327353f9a47f461b892882034ac25eb3a99846fd02251954d087d0dc723061c330dfe2d479cef2496e2d55e1a5d0de3326259242ba680a51661a19f932afaf782e87fd4cb71fda01f7896647ab19ed4729620e37a1601c2ca3f7c430e19cf0953753ec89e8d9c7ea2b22fd5be6065297b93701053e76168d8f0619ab0961ecc1502bf6b2936482ac12e16145ddfdd7cade8cb5d31910c21b33305f8f31656ba583f765ef4128d0f0b4aedc2e18674288a04970cabb98e67f965be007e21035e9d79f7f6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e238a3ca1134550b8d48c3fb4c9d4b13329c7c35ed491d9b1ed2710eb967ba58ae4dfcfbc92e0323d6b4a7da0a564f7b9e71b469bd9ae800a03396ccf83c8bf98c6c750b2380ebd0a4d4ae927c302f9040e451b093176f6e4b5ca118cf863b3dc3be9763e8d215f83dd05f8b6bd4f23c5f1eda713967bccb65751a5907eed30b9d6ae969e0cb8784ead1432d9ee9a0664546d7167533d70137a88af6681b5a4a6098f486d2144b5df3ffe0e1df1842f63885d0061023c6f6091b7859bab6d8e455723e2287556969a081c10df409ded381034ea9d2de939423f66ce9c56656c0c41d51a6c835e79239806b1ba6637fe768e7d867820d46c1cc62ee0e51d4dac6f5c4b5785b5ccfbf05236871bdce2a19345af7a8ea57e5674d87873025a76fde2f8df002087329d84d933e7901f4e9512f8332d4d0657a6dee8cbeb70a881af0bca08cab9922fbc459f778993a7ac3779f8b1153fdde0cbbf7991c0cc81fe5e4e22611dad4104f6d71789b3b2f0bc174cd991c8d396ba439b0d828952713d7a2ea4705f983e62cbadd3e31c6a94de92e01d6dceb4bb449cf616f6abbef0df8131c2af26f6c4b9b93e470c2a270e8458e8369d8d3fd60036551866ae6e7b4511dbff85fa458e8a2e0d036d4364c85dd7c9a7b98ae1518dae3c946b17fd8b1e9a91dd8d5000e654c89e7b9f1ec05ccb7e18f34a5e55c83d73111d6c6ec8aabc9a07cf3dbeb58699e777221a02b6264dda3aabb86de9a4a0137715f3197c54bf7e82571f9cdfc9ca290b8966a5c2cf657ac3339c303971461de31097be651397d6b6079b70ec3a75fbd033fd5e52b292be272d5e5bb1a8afd0c98fb2b43f51c630f74339e167532dde799446b2f27a6632fafb8736ded54dfaaef5ec9157a9cafbeabc8354ddae425f4c3ceb4a2e814077a3109f583d6190fa17e59ddc4a9626b5f4b60041cb9663ecec90537a6351c1dab41f1f4649e8193d78d15f0b848169eda9d2294e9dc5f305bf3107ca4d866afa92798f7780d36753664ba89581f605117e9376c1d0978048589170b029799c45e2b258627eaddbda54b6f310ef8e68bfd77c715210959c132d2446d2a3b5d65b195c129d9ff21710b895c6f42995354768ef9155ca4a96f4c17bd29828c5c998aac9369f612a79b5267aacb5acb4db46a77f5f635a11117baa0aac774513b68d1b9c4cde6ec1a42612d81cdbf567cb4bf7be43f16ca38bf64b534cf6754a5da6e047bde1155206f202308fed9028a5b5ee0ee7966e5c772329e83cac35b40f84ad5e122e0146129779068e510971cb22fee3a2b8cbb65350ca2be40ef2fb4c94b741e23b9f387784ebec80bcddcddbf1aeff1ddf214bb12da0b0db75598aa555a28596905b837648df351f6769a728c08293a18ffb87010841f99b95c5dcaa5603bba7a2d2c1bf61c782b3075998621dfe53e621b6e2d37f2278acd6c48bbc043f36ae09717db35e3957d4130a1bf84896b2446aeff9a900d6a087ced1f26aeed999123ad411f2acb916faf117ac5bfec03154920345e22bb323a4c47abb278447456c9d6718edbbab62b047eeb41daf2f539f5dad322f6e5c548c7e3b4082532cee25c7971d052994ad6c7e1bedbdb8288b7d142a48d12746c5b752702cfbd9eed5d6400078e9751969b81a1b93acc8306b865c17148804e6f9bdd7c5cb0496f1aee67d2fc70b0c8e2a0b926a507b4dfb5633ac000fa485d162f874b8b53d08f9dbdef57171da7e8760df7d849e99c7ddee1d7a51a4c7087a93ffbfa585f5ae5bef383f7223e8498990bc41f6f898b45c859c4d987e602b66ff5c2f3887df059c5b8ac1ae37a4dbf94c2a663dd8e891fbdf48ac50f6f05d1b177639ce65498d3f933f028247a0c47af59270c5ca19ff303dab0d07a9082c0b7ed665f398d5c3ba48dda89abe5c81732f8cf82b46ad3a9e332be618ff0806bc98054a348cf44790cedefa540648a1765c9252dad902f29a5243de2173807ba2f57b3cfdcc35776797cb9e5ad9f592f90f1b1760fbcbb5b91dab4badb0f2095309c0e4dbd109d183562bfafb93d3d47fa9bfbc3a1957e28ef79ab51a01ed1e41674ea84b35f1e4887c6896c2be73e47eced8c7d2cc48076062caa0f310c248f2709d1dc8658e3efb6d0a085cc446517ae0feb0d78f0c92f1f193a5c5582217eac834abdfda2f3f30baa8b6064fdb9a0882aa0d94dc262398268e2a0d328cf99ec0ade8fe2e6563ece79d267bbb942c8c266344b73e2527e77422b4374a536c931c413bafbcb15b64768fe0198210978a3ea2ecab1f7a1e446cf9cad00a25ef4c1dc74a611fa3745bd9c9695c4dc159974df16bdd1a957553636bd463fc65003e57886bceb1ac4d27a40228d08936f117e6c758e99a27db890a01677f8ba13dfe5c1d36253d4c544c47a2a502aee1dca06bad1a4d2871bf49d3430a6f525af6e09dee2010fd04185e4723746f29429aa57f1b567440337f3a21b923dfcb02d9a99f73b02e8b5407c2252d0d72a2e9a9bb838a63fb6bcdb9cea7cc4a2d603944adc3667cba62cca11c53f7e6b9863798470b72e94f15a0ed7bc804f3f4bc5ec661bc1edc611dce82c1763c86a06dccd4cc897d4cebe86d98c5f4eba7a229e3dd59ec0555af06ea1b55ee6363c3a419edd08002055e3e842a31c108dbd25389081ad5c28ee0d89fe94e3f05049fc39f51e78199b92282754053beb516f1a38ec5190bcecec2ed605b2eea79ffa166cd9f75f0bcceb57eb149804098df7ca495a2d8e0a2cbb1cfcc0f5c636aab54e83525007fd3cc936de8c45be92c9bffd11e1fdf16b6dc39fa43746b5c3f9e36e266811b61871958fa6c3f5b3ae8d2e7a3889a9ff09396c7e76718e017715ed3cfc2423b584f5b528ebc18e298362ac0b675a1a010c171e831976b3f379853981ae8d6c4c685093c9568ff9693ccfa176465d363e9c904174364e9fd3f2d13104e3abd5c2ec08953c8e341fbbff5d75847c99e600df2b3d1a740238e909823c8f448746613aa725483cb8e766f49291fdb216138d00707a3d7c98687ce71fc1e87928a86f77b5aab4082438b445f95ba98fdda32f25e761a5f51b15d6b3302ad82997e135ceb88c49997ffceb17173c50bcf5802b771958198890293d963ede27fcdadbfb653a32cf98d11a5495769db9e06690cc1d8dc863dd018bfab8d0459d9cfb7c0964c2060eac227a37e49de4ada439bd593fcb1a499b752355406ec702ae01aea6f4d96fcd7e7b04dc2f147bf4b075ed19075cb4946bf5d99556a0cc1dddf5581b3d05d5d6b6e3a08a9c64c856ab220a559bc7000cf488950424efbcb7cede62b166d1a0effb63368b5314359b3d49fb5623946478df363fe8cfe2ff982cc4b3ad97c239e1f502ae257dac288a0ff1a861c84c4aa1d307bf8a8202fd889db0355afa6206734dc8f0a142b40becc922f9c1b17619507904fd3263d51f4fc9a8cfffb438706fabbde447c9b5458913e4d6bc089a394b7934e2289ae5cbb45ab769e3f0cce09bb6ea735e3b373e299340279cf240125a7aa054b350ba6a81f5e2ec4fd4a7bcc117568330bfc05e94f43dd4a799f10c47244e3c1cadda657c44333e8b88506da77609fd037eda0d91dce4c52625348fd9204883acd8cf226eefb148df354f5c16790cca20a00cb3eaf43ce360be9203d716960fa8fa210b1e9e64f293032df0d5cb66d0cf4cdeb865e34d149f8a92d00aad3eca5b3a568756f85525ee197190ae121ff957aad984cb511f4129b4bc5e3a8e4a9b0cc1f8fddca58bc739a0a3a667f7402c02e3847fe3e8bb53486298152e61c16902b68fd7794e0ec1bdbf4c99c921d051161f6812774d283041bdaf5eb0cdac1e8642a17cf59be7fcbf9ff3d19c39d74fdc850ba34d2b6ec25fec889f867a12a1e08db85418331d5f8a6720b6a8e65e109c3ef79c2f2896efe917ab417911fbda58be5bc7aabfb8d165405bb0b4d16b7b9e71b463e3eca6a12668a1ad513a70b136fe133d72e6c13c97522d278aa109782947c8623120a9bf5f05f14ad69c770ec174661e39513f8769c41d83f0ff3def86e8bdffe36ca431dd16237fd0e01bd94249ded2c7a73a9a23bfb42caf9311c8fe7b1ba4bf77a1dfe5c4c0b606ad61fa01a403c1e491bb5d0d6a788a8f048cebd72968b88feaa7b1c2364f5641ac535946ae5c5458b7c8b86eeef30557fbb64159192ea3196cbf8fba9658c74985f8df598e71f1eac06c939072ad06d11f98b0ce74f4cc26a6f06117096370e6df5872816dca026455acd6b91f2df3c31939217c61439d7d40420f1fb9f9bbe0627cfb0873f0ed8c1d9269321dfb36f690a27dac09a27de8e1bd811bcea10ffeb76b6334c76a1c2bc1253443939f35322dd9aaa79399d42d316a9f5270e4d409862d904e92c0f508e86d1f33a9a15a3e98e892b228b00b15da50520ec54973ca76cb6c9dfb7be2ed3b73134c898a0ce478d61b18f070886881778095f8585206304cde6b2b2249a0613ef6d458e2b2ea75ac2f1f1260b4eed1e812312f99da885cb8cdfe4a3d94ea03d6b214412fb6193871b511b709f76e6faaf12792957317a11823a07f542a93c9442d546afb7f39692d953406f1bab206c503c24bd3867aa773c796f2f073635a8f51dcfbcd7512b0e9b7d128a263803c4232497fdb797a17d1a12bcc98d7225fbf04f31d2e006bb3ac032f44a45ca1b92865035936b6df993a99a635d5be977fdd30e2f7a5880e1d7e6198837d0bdd267f8439fe6ba371d4b7974e542e908b63f0bcf2b3ba75c19467b9520db7dafb2b5076349902aaf7714f836d522bb5c6b300906876f52f4dc070f3a609d930c56fa225395084323b170b4549565496101616948f6bdf1e7a4ba0f7dc9f6c74019b7d78934b78a2036ff1c52a893299313438b0aeb7ffab0fda00ad3cf9f7107856e95788b3666418210cec5a134c27f0b671cc0c85dd3cd61896fd0e3c026bf249efaa62b0d6df42d461a0201b2aa91644c6d0f2fb023b95aa6cd0999316ed371c96596769517b4830facac3c955856b8541a4a841f50e153b8a0c2624bafe0e76e74de0075ea0f4dfde538c465425b722e93076803e1f1e71f69bfd17760640ffe86c14b186b60c861521c3baafefc2c2c65da4e066d478f4ba636695d26d9660a39f4d90502559d0a81eb04def4d540ee1117988f497ea6dde4ea9c6579bd54120cfd1cc4456a3629e309a259ba634ae41353ea170cf3d8468430dd18cf9c84966e2ea8ceaafb2e7ff41cb6d3b612b49eeb23c5263e339e06229dbdef9ed36217dc2ddf8cb994d05d338894b58e80187f16eb8c4543da62ad3ea5c1727e0e6716d55f53a6e7d3e6423fd1de779a27e125153fd1ecb444c09c46dd5a29d3ba1e03e8579775bc14badf678cf6a26f7698f164852895060f3263c9a91a7e3642f16f938b0da1bcf3d885591e6fce74f8ca94934fe2d6cf962284359d74f82c558bca658e388350ddb9c4730acc44512ad06f1014a31a67762b8e192eec101c4e47a4bcc5bac31e5ef92d43d67ebc7a8954e16967ebe8743bb7e1f2d1f26e8cb9af7f27c5d6c98be3f1104a06098f67a0c2ac0dbe2fb96c335210412b2a6c04143dca25034f0f1ff95c2e041dff458eeda42f8b8bd115b60974a992aef68108ea7d064302761c412b74d6f082b27776dc63dc51559275e82aba0e55b1d9560198e7c3f047de79a5e6d59bade8e58db6099c330dafc66289237ccf08e8654394cc0873bb47fa9f94b818ec7a94eb00a2d1b7e40efeff640f60475c2ac70ce218e049a602875d06c41b996a053b4568e3e1413fd3c7afe2e18da44649b242ba248245db749a78378a8df164dc20872eff94c2d6faae4a67b5f81e1dd45ea9244e0e67747fd5ceba7e8b9b9d4e0922eb3c88b729f1f7718ae32c0f33590092b8ebf1391182ddd30806910243f9399b06412988a948479794ffb60227466cb1f084d735233c273798b94ab0296c56720893e3c1e56c233f4e6212a18a3ae76963af2cd639fa264ee51cf54f9df5d42a7abb63fd6eebfedaefc0ce37aca5053b7ad17ea6b64b7f8b95983d1b12443736d51e169596365efd2182356f3ef33aaabe82293138be779ff2b19ebd46c5f429903278150bd9b8086c3d04a291c41c39a737d8e031b1c2deb50f76a07c099f6534af051620548e9f2847b86c45861e5abd78ea3e21c3d5ea24f8716f427d9d9c5aca49f3842567340e38ad36dac7b5a069bbf9c599732524fb030b743a9073114b3ab34797cac63956866f9cc1e7868d44777400f92e35118fc59149c4e0b476be76ed8cebb32041c9c77c088b93e583d641d56ad1838a525ba6cf6a51fcd63f0cf5352df08d09dfa0625f04982b67268791ba7da2e19959f72d025092335cdcbf3c36c536a6e755a2fd950b983c8fd7e0ed8fb3fde6e68aeaded696e622ccc25db27ecd3eaf4d5629df9a97ec35d43a6abbc19832f1f6779f12b8a7de598a92610e59b068f4a053adaefc3404a5b8a09d92fcb4f2a14da29c9f24fddb363adf51967419561594d0b6e2166a821ac1bce1f99d74bd53509e5baaa8136d4731dbb7e13a6276807f5fddff95a5d4f363e1e0662061e3a6b3bd64ebbe83251b2449fc8539165ad3d4437b7dd6608dce33a2115f22071619cb9240c8d4c77310669ca7e8eccf637e483e27d375451d19959fed4b2edeb50b1ccf67c8875ad7c59d363282b1d840ee2fb25ba6eeadf3542e1decb0835351193ba7427152b7d3b92cb934e944db43b21f129f5eaf15b10c51be8835dbff6ac28cbc8949a358f7599998279302430c587b015b613306c6a0a4f45831a54d7275a49174b815c8a32568557306769a0b4fe7f12865171bb4cf9c51c53a5bc808c107a8cd53068167ab1d73bfca1e6ab116da548eb0c7af0bd7ac4967c68bf98e332a84cb91121dc5692d655644661fae3bb6bde6fac14b2c67595db85c924c832a719827f8a4e84cde1cbcef0bea33532d219fd9a9907a96ed28112f632b5b783591554b005b9b6e886fecd287274030699f7ccf33b1b7ebd79ce64580a380ddd2fe6ead3e92819ae69b77b95c89b0c68f84c7402fb18d9bb52c4f831b976744911d36d709e645527723effbe29e2f95fd7621c4f3fc5617146adf70ca73792cde72305108c35135b8ada822bfe0f72f41e7fed6370ebbfe63bcf886e3c430f74991fd93a1b62fb5397d52c65adeb1e2eb5ec0fc5f7529b221a74d4e1e0619443100f1276b3b5b416827524f3a03ea61585f1a9fd3ac29b2ecce202ecfb5bc944323bd74cbcf4e7ac3403935d3dd0b1b174d5e394a3036a1138613b18f5f7557ee8ea51459ee83b1e94c6a02cee68e80b6be2e61199dcaed3453ba7eb36fee1f91b65a8e8c1595973890874e71ad0f32a535edafc8317107dddb66def263714beb1f503bd8d0fe8b3fd0f361628ce79161292e7decb7a3716e71cb6ac2d6c97d494e08a4d6bd191e6d7250f42822b22d892c6333dd8cecca64ab3a9a9b4631143aa6e671fc168fc15ff9027f28fae9877b942e9a412da7636f0c46f6e21e52b14dde9bfbcf89dd0485c98a5aeb72180fb714d2f98e168deccc0962f83deba8d4e1397bdaa7936b585d887b2fe624a856da1302da3ad3eab73a273127151aadef936c28673abfb55d65aa3756bf8f34dd431340d4cde2586307ea140bfe47dc61e2db0459ef5b65542cb36177ce1e28038089ef41bdce5170d3c69e0f5fefaefc3e0a920b4c12d60d11186bfba86e0c7a110b90c9910460511c5131a9b06ebfef337f73f3c76291c8c15dc96ab4db4ca1830cc7d4de010f944ffe7183a66169eb31ae1cbbe7b72317abf7fc4d99f2830a4501e6fc0b50a9aafd32dff598543750d71aeecc33ad048a4f8b970cce502a14e58f80978f8fe9159292cfa81cb3c2b0824a7c9d21a0b0910a6d0c20a850bc71d31a273ff0fb2854bea2d2e39a0c869ac1b148b7383ea1bc8b20de31de90b4719c164d6dd64ee1f8bfc78c6096caed7023f3d592edd3727d405b8fb8d77cacc4af1865a985d7c07234955e87997b71c1176695c8c91b8d43a861931e0990ffcb9aa4f26ba6423e41ab80cbd1289abe0e2a9e1bc140536cb041c77aea0b6a37f6dd20963cbe0aa5e7930e46c5bab52cd7bc1eea04fa278b33ab11c9a54354ffe6e52fa385139da1e479b261ddd637389e6a4d630c3d04835e22c4e1c8580d921c5136aced6d67bcc8ce01bfa1e1ad8bc2b3ce196faf86cf90674565cbafe098f79fca34ce121551051e70828a839470f506f59f77c80ada6ad737c837b17a9f192f4ecdbfb812f909d9838d2032689295f27847ecfd2d3e4e01007b951337fee19e58ca3aa5ed2f778dbf21eb54b66b45f4bac507d54a65da6334125c2ba552f15b6cccb792107ebea987d34480fa55559c317980e70eeb607c470f05814f15b8e4ff47ced309414fcb7223d44d910b654770d7c088d729a0bacdd419baa1b1b8c984cdd90f4411cb52029612f136d7f584fd824f512fbafbbd1d04112e29d1718791b17e9d5d8a81ebbdac7932485586e33bfb95c69519d1e1c901845253ef639daab51803c +MD = 626fb502cd6e740abd541acc879f0f5d01417897f767edee02f062e4 + +Len = 117152 +Msg = 5841db7cfa4f11f67b411c7a4233b0bbc60f267f4668cfa4baa6886109648ecf7c1694a873ef134e5702e20fcfa706a73720cb064e7c14542ebcef3382356c44f335b0ece3e945585e7eb4be4d8756e6ed9f67ea804f5c3a433276e29f569810a3e656d0b2064e1b79ffbb10249c4781d2d421b146a8505cdf4f47f8ca91b93b7671aedd480ed79f91cb1e8cbdae827fcd0622e5075197c4eb5c87fd6aac77ce531de19a0ec987ed8c2b06bb7e85aee8c57e910d2a10da7a50a16177e6707cd0213317906aff070c54679b23d0e874c5a48597b219aec184f466fbf0a8a56d49cafb7745c577fe04cfc7044e1ca07c1d51615c5b3bf3f3ecc1f37def1713f54135bd2a4388fa15dee7936ac4c8766df8b45a0790f8a619ba9e8f10fd9b81bac14ac158121950f4a18312f40b3e2ff05eb5bac1dab891daf47284dca19cb964d0f14e2738e24142558a8dcbade496ac583cc7b1bfe37adfa42718086382819c7712aec23f4995a702e64c163224724aed31cb00c9e12ad0d1a494bccbb6a20abd95274fafb813cdb17e97fe20658a71267c0cd5801b695484d14022629ee455aa6202f70e9684596a3ab6ab010ea7ca0905d3596bf7fe13c496635fafa30e25466287e1e64bb0f63302f0445c8991fca1b567b312deb3b699db469e3a2dea249a7bfd36be3f5f4a16be8ff2ba3d10b0f372120cfd394ee50b8832058ca53ef8ad96ae1d1fda59fd1a56d9dca292ec8e09251a8cb56e984723856dbc2c71d349879ce0bf908465b847b2172b9cf0ec3deab7c85ac1e75985e8ba3feca2fb71c03173dc4399a54d23a6bb900630bfda669e0e649fa90a59466310f2bd77aadf04b205ead2c2a5d7e53e578e96e7677cb02e143682f6415f339a6dcd5632e5e7be1238519494eccca6186f570248509ac4a1af852c2ff335f497bb17e05b164f965af65bb096e2f3103aec3473dce3fe49ffc99bc5dc87a13062e019827ba4e03391264e4f51ef16c9aeb46d1129866fe85049be7485676c8f01c61b6519f7623ebfb073984b7cfb797cb14a03b9a2b4499d173761b3fa5ebb7e5364b0bd779d5eec7b12b40eef6bc9aac9137214a09613ed1b4eb5eda83e59e0713e8cef8c593c217173ca22b22e6042e60f85c0e6ddef493d4a98bcd9d6143007ef21389e5d806679dd030d2b0ce84bef876547de5184b8657531a7f5ec9175fcc0961f1572d1c17b9a8759c4cd06ceccc33931efb97b427b15a93664497bb73af9142d5960d73c60f07d8de43864d2650b2a0480df7bef677327f18fb578ffa8e2c2e8d2ef3bde0e280d32f217aa5fa2a7604afb892dc811d7d461dcf730542ec3c9dae8e6a5af6e8961cf5830807d6bde028ac78038d46188d80db4d94dbeb4e3508b040fbcb8685d9eec7d4b8c35a8fa394d4c8c461c40d05a7d80217445228b80828c302900e5eaef12c932798e41412c1af274fca694f5823aa6984ff260038147ea12948fcb7a7ac7a4aced911efc04792102047c474079cb900686cc57937a62847da36e04536796768090452772e8f241fc06a63ff967b8a433c1dbed83935cc43901a476bddf04a7770cb245ed010eba2ba92a6668748a4ce6a7280b1af6bb110d54390b020a9b9f5906e05eb37654f4579612a2d5c6c8efe9e0ba9aa1c80ad2c24536a9690fe2c7ee29d85b0d704d58487566dd8788faf402159a806034ce71207ba23a39166185fd1aa12543177f4cc5ed2cfec7e0a9c5faeecea79f5f9155ef9f85a5bb49a142508443a29d92743998a66eedddf65cc9981260f5a674dae6f758e8d237ce2967ad0dc7bc630ab4888749339211f39b68a62a5754bc99328c004fd2a9f4cd815add5d345adca6c59f5b7e84d5aaffee0aeaddbcab2bf620afd12b4b123c6f3285a81d9264518f31e8dbec689ef241de172ed496e139b52cb733955bf555dbc34fd5f5e9c10aec80c9d13ce7d52fe2f2f738b6ede02ffbde0cee350b3a883abc1f2e8c425b4fe638ac03150962aa09b313d02cca8f55f3bf16cab262c91db4a65f798ba41968a5e3f83b20d72dabdfa7d1c0de34d6f2c2563e8fb5688a5c7008767f9918e39c5008153f05581e7a8c589acf73339d4f932bea04e526668d976acc085fa5a13510306bd76b941e5e374ed7c494cfccb58cc783f2eba343f75054c9dc85533b790ce262cdfa9413a1090fee68e8114c6ad5b172216ee80be3c44fd5c2b22a9ab16da662e85b5fe78929254983180003b697711e5917fba4991be258838e33a4245a04d3ef36fd805fbf184eddcba4dae3fa90ee628ee6f8617c96bae7c275421cfc851dab3277c86af56e673daa06b93825954c037ab1ed830ff263b6f6f85ddf7ab0a8e4f8d4a5f4f1b1fb6c5c2d89fc41089f0683626d46fe7ebbb8d1c5dbb6fd0edc61301c0143db6871338a21307875724e3152035ff46ec22bb5fce3a6e9ad2522ec8158c3a0dc1c3358dceb98f4ea5ac34d8f9baad3894719741f5aa4c0b180e04b938fd3531c54a8a3f992a7b7c7486521e233382c7794eebee133bf8332a47f470fc919a4c29838de8a1e470b35c49c77f1d2f0466031135bea75dd79571b68a89d0e7cdbf6704bcf36985f365c57d0156780ba6b6ba7ee13e328e8eb496c0236e467e73fe2654940a607d781638869c4ea457ee1c07de9ae7455c7212f1fb4b98ddb3f19abfe9bf78273973473e0cf4c222a24f1883b6bf34403626332bce8f83f736db17cc4a7bc71e58697b3e66b75b93695e3eb6adbabfc3aa1f97acc05bca336594f7b3ed6591b638ef24c22a3075472b7ff1091a39e43026c2a2ed773cd612ceb3bd0f4909429f8968c651ce0c99ee4738d20382a94c264ab40776399f3205d0cbca46e3e3743a987ae275d8b843c96b2d442e7d855216746817cfae1f688d2a21c1f354608108047a0ba6c0a00d9905a1d9f2715a8071425366623b29d429296a168d012d03984bfaa45d1c7051bd854b05e7f49571c7131a65c6774b1f6a5d194a8c7085665bdd714f015285baa7889d5a978dc280989501b874c90fb4b143a3d06a392643d347825e5bf97c92f78e0d4a59837e476616bdb0e5c6c40eae6b8e3abea17c069f0882649577b1952de40f47c6ac0530a036b2f1a1f714b7b2335cfbe27ff3390f9f05f47653c11bab4937e5673e03c6e76365fd31c07e3a5d3984a68dfb1855a5899180472427a1002c0ba5a3dff684ac2b6b360db97cf10ffc99ad19c977e71146a99ab05f41bfbceaff0b14f86a045f0d173eae487d865afaf0720e518e67a354a2962a7bcbe242248688231dbaa070671e698c041c64ce934db7e439c8420c4231251df012932057369f66c684e390f7d5593f62b616cb73f5c123d8b2108c8dc9aa2352c25ce80183d358794568310dd08020eaf706e20b9d4055b4e85dd495d0a7a31a37aa0991f2a660ac6888c1379470e9034bdf92d88897e254b7845508eaa045ccff04f5a7079b27d68aefd1f395adf05220eb6e495c4a624ebc2e8e357c1653d184f84cbf3724069e18e7d3d05889cf5e02c4d4fc8cca4df962a700da099c85de75ee6f3915c395699f1b574c51b6ee6d8df657609eba1deb57a82d351785342a2e61eda3081c4caf89e4ccc61597c6271eea65f4167c5aaae78c93f52a72e76b3afd388b9270a4f665feb4dc18beff01323ba14568937caebedea588b6e82818081ae061597326c4bfa3a00cdf8ee192644469d329920c6d2a09026e41477e97324575b2a1965aa0f38e0ec6eeaa263121af500bbdfa727cd5b61b246e33438f25f758fe2f4cb8f1ae186198aa73258406d6c47dba2f57443e405039721e2f567fcb0ab24728ba5d4bdd3900a78c7801605567a792c31359c042521c117a8a939c1b2b5d7d9ce74a6937058d7a58962fda9599f7dc384f33f836915aa0dafdbd07720b8e572bb83f62d0479d7769f865e231dc0ceb01634962978e63c4a1e1394e6a5b935857b5a2d5138fcf43332749f394be4563b0e8308befb9c5d181edaedd5e7c2af5a3581b4c8b4e8152369b52ab48b14fcab9565fd099940f7bdd7b6430d8eda3b381281f15a1f45228f6dd0655b8457a84ad264ddd3fbd9f1827032fe57430ac1693ae04ece221c02bf654dbaf8dfb5425eee0711e4c86f33af12d38679ae592933d42932ee64749ffb7ab590514336b33010d6ff04a90ba58ce423433b76cf5bdf08e105808e55e08bd48e4e3059e3e108615a10fb46b32f610fa99e67437440b400922e4d47c7adb69a635e5bc9c3b52e091aac904672b975baedfdc3bf51befce1c3171d38d3eec6f5b9279a3ade17e92f9f3c8d524d2b110e78c919906dbefdd6fd27b808808b010c1a11b7553df082fb6f26b8114e6d7d33d16b2f5ed0290104c7c6e560d76db0080d8478c1e726419614d4d92c7c6701508049cdd283e54e96a95c6ee8de7a1a101be8a726e4a36e2816acba4adf02e58d0ecdbd938ddc2cb22b5119479f9b894dcaa50a2e3d4d51d8fb18221480247013025ec64af6f4e581d60eaf2622b943e6a5236a7ff90e32cf4d7fd83166b6eb0ae463af9fc717c02a31f9f72c6dba910431cb8ec120cd58359349a54a99a19e9a3d464139072c04d5c57bbb028a88bbcff803409dbb720c3156dd510722cbd1e9936e44c1be1bfaac18fdc14f8109096e813446bad1e496eb1da5a40f081ecc22714380def4ccead4b4e5d2bc5827c30a54c769c26a0d3e8c7008660b5381d66b5c2dbc39b2261b78219cb6f119c830cafa22715a8ed44c3cd76e5ea20cdb39ecde94c27aff13d7bee58b3595ccd699d7faaf262c46210722db3f557d3a163bcf7ee05848e47b64ce8a19175077384658dcd550e099dcb86703e41344e5192539c579474b68440bd198ad23cc24d67f7629fbb61e90eea732d8c3609e15cc3f5439c8562c935714ef95b122aeda988c59688b218d323d1cace1450433d317d04864334f936d9cc74f0b8cdda1a266b42821ec59d587b25ffda6d2c6ac26e2223dce23f827fffb6c1a81a6194b8328410cdc86269f9735b74cafd36fb117157b5afd011b91505d4a778067a15485c6792c22c150936baf6ec185aec7e9ad9824c77b337e7968a8aa8f8f373c65b028a5b17a059e580a06ca86afcd96fdf05365add023ea8550c6d48a367eb1260d370cc26dbad9977c2414c0b596a494e82f8534823726600f9d108ffda4c93ea3d9f8888248c9f7caef939a2073b9579e12ce831bd9fcb0ad17a6c66d114c567af7af2a41173621fb51913a76cb9cee19e686c32370321e331bdd580d2d02159b7a7ad1328fe8bc173154c8420616006191f61b20649151a890ff6d6561b2240d48a1a5de19a6712776256d098bef357ffd66b49c1ce1f21460522cfe13262ad84b6ccdcc1b3ae8310a4c5055c4ef377a101db51e02eaa880721fbe5fad24d00569237284ff6ac840d4119bad18ddab5ab465472f7d731cf3aead4b109575be9b8c0dbb8f2bffb959bcbc739aef833c28d0849256f546f575fc46fa9a35e19ba29b73d17409c16586aa9402a3b2a790eb4bc3bd1bd229dc0e4430f384f32f0f237e9ddbbbff7771ce86e27050c7124fab0f6af1067de579c76eb45f563929c4241dd302ed77eb883a38eee529978c227003c155a05c4273a7621a66996e955fb0605d6e91d8e350d0a90088b78addb1430f101270d80773b609aa2fd4f93c8bcc2f82462f8a28719abf60818109cca32b1b9e4ffe5afe20fd49ace38f44e6ee82728cb34ff58294a06356f90f7a22a0310fb435d348ed23830b67a953b65a30d911c1dc7a81b861e97e2918ea46a7525cd39aec760b9d23513824aaa6b762fadaf46aea3796947f7df6220599d6235eb450989b6f0cd6c96db62b0d13afc4f48b03ce040f9cdc9764b589e9a4915e6f416cf66a47b25fbde16fc4fb1f0649c5f627375389fb5950a6a1a6eb94de1f2b0c10fb82856402a6b549379c5425b9152346ebfe2d1bd3534ca4c034f027303a1c25f00bb18c852cef2ecb173972dc8e1849332e836412475ea520eb40d3574579911d2c5491b1f89905c99556567ad6df19570b143fddd5e28b0f390d4a5df42c3eca0ef5db4eb2bab6793d343a5a95809c9fbc6712fda5e240d346ddf30aee3c123fd91cd224025b2823385a84457401bc536a04463b5e65abb4393b3825dcb1f7c3b451defa8e83450fad509e031a6c60ba3c74445da874b4fc3aac80786594d4a0c71d679a013af485c59fee5c31c8701d5b3e732b2d1643f173ba34c932ec901c3b07d5ca01881dcca8cede185e1ed3c4eeea3a6f925340dd09ecbae1eac11580389890533676a82d7d65d4fe4b7573f71e0103ef8233930627ca7b88361b4a14e55600fd4a0b7ef06ced3ad7a0d537fe130a3574a3bf25b5f3dddf85be03171f6bcb8d8fe250855d9fed776b04470720f48d37c69dfedc3195ac4fa2298064ebf27fa0d3a94ba6bb3bedf38220d1cba7e91273ad19f9a1c436c031a5209b19bea1f99f8f4406ca546b7516e49c7e6bd91c2250f1bfb65db4fe9fee574a5b1fe1a0c1f48c5e89d76e550e48581f53d0ffb2443659363ff64a14d3ef8050c85c9c185f05929ddab752213ff1a8515ae060d6018daf279c56cea1e49be8d9eab936315b3c69a9035048f891799adc9a8446aee0beb939d36388cc5859568eca1ef9123e00d82b0c8c97028b48f7651ba5f762692f4015ee07bfbeb99394166f742be490b8a8cbfb518966b5c68697e629bc1b24490b62f428bd9e8eb0681be1a115ced7cea130da89644d975c111702fadd019a74e4c9eeb0c89560189b42298ffff99da98b03b01b71deba705e9077fea23b521991f2e38629cbb632f5354e24308c69b12eeb86eff842a56c37a84e1f53f2d49edb84db92286718683d9c584af2b0c44e529163ed41a0e0b662078e43374da96d8a28dfbc0c920e213d1e50e88b8d35e8be9c4ffd9321f4b8a7563f54977558ec6685f5ec1f7321c6bb643de6444a44e73bb5530738ed68d8d03d6939bb9169853644280aa733d8bd8016272b651079b3918475f3762bc480a36315daebca659fc40c7dfeedf9bc6f54db16a136065db488b0bfa996039117ea714b1f6f48d3a1d686feb039ee5444fe5b132fff557753e7e23911df9e55056b0e11f08e323bf53559b209d33928a5483f25bd07244ff678c1ea149b249bb1efe3713592b02502a92ea1ef0204c0f8f82f5534979c6e0701f6da9810bde8853d9872d6c1ec1a30faadd44b0f74a5a6d7d2aa7af7e55bec4b281186888fc6e81fd41cbb640ba1e7ef7d520642b35e18add12c786f269e0f1e0098c749c5bc425b3f78cdc238438f51472306e3e973b542d3e3164787c0d6422676419b8553fcba828df225998790e8b250353a3d6ce45d81d83dc63148ab7e41b3dec8f7117c04456413d356f5537c67e07a8fd8d20fc88312d3354cbef59bf958851745812b012f03191598153ed50ddbbc29e22d9d498099c1dcffab1b62f86b1ecf94287178e974ea338770baba4d4ae5518203f6a92176f00373968798e3f790390f90b7331bbf70754a8d30f5cf34dc4fe0de82af0db047f2d007a0086501c59ddb4063f86cea91230af4064c3aa1896b2545a825ec4fadf03d86ce792493a44323c0df9084ff3784ee2ea6883799d4ed79c1d3d1685c0c47e29c79b2c8b415720d9991c30c0549e11fc276716d25a51c03d9687d27dd4b3de8d0097cfa6d0073c152e358ac05af82c438e0ce854ce441ec15d0efd1dd521b77abe69f62c54d8f68733c190b0651af06194a69261779a45bfd73f00f610929b6b479e3a7c4e50b2a8403ccd21017b00dec1e08f98c4c8d791ab947897358aece7328107172ae322e0ea23aa82be9cc0039c374a5b646446ef30bbee61a27f4e7705ced6ad8914b9d99802b3660af4d0789a175d39a4d106110cf1bce5f5e4127347e4338fd769d9eab056724b651794c6220d22b424a3b7afa6f27eb48e5deb946f4da83e946715ace99b51936b799f44fa85554b5260be33851aae2e0a413c32e287af4a5e70ff989a4debde7c9f42ad5a1c4f7fbc7c9c152df6c5e2c83276e7580eb323843bfa2648eabb9d170d4147e73e8bb1d17bc3fd17f3405366b64e1a266f4e6aa41c97de8bfe1b5fc927fdad186894922fd2e823c9bcb7f054210453d415fb804c874b39ca04b5871183ea556436f48126065b51b9afa75a1f274c1ce79f24f4dc20a6c0997b04b37eb599d96106161f52aaafef7e4878f1361d87ede7676548d16d1cfb50dd73656f118e91856283cd442458556e13a74627983a3f49fb26eccac12052a6b89bfd714c3b2647e8c80b6907e73c3f9ddcd9620bf59995e7046136c1435f0178e91c13ba11f03ee55d6a4fc9df0c3943641b840d2c8541a7684693e21888d7bae521c4efb597c104be5a56ee923e01a0f79cec00517ad3c8dcfd70a7f268bfdb1abf0341987574b3656c1ceab35a1f32e1ce388a06f2c2a7dcf64b8773672075e4346d743d21d06ddd000042c4e8e875bd3fc80ebf75a4d0e2d183051e1c8007ec3251ec16255ab09fc6bf8b194303e604623902ed8be0d0891fb5a554e1750d9d296f1da5e87a18281099385320e81041c5fa0b039e1d332a2161ecba6e65e3719a038d8ee3c501009e3bbef4eb1b60efeb998ba43490555097065fa10be94603f4bdb013cfa207b39ff5936119f4747933760941d800d396e11152bb526591bed9fc39e6d4c798abb6756a3a2629a7784e4e086f10e51a6770218a6bca61532cba5d6f6acb7c3073723987e2982196678c501d8e4793b64cf4a54b34ec6316b8064fd531fc566b85439090fd0852adb18e4a9d1204b313a1cf1b39a930f138fb5e421fbeefdca65bbb3909dbdf5379f0c48c1bacd0b9df207001ca2b2082466112e283742e757d8149814721859a77bfbf932db1242e652377e7614d43accb73d49fc4f430c76d806f17fd40a3ae2348d00e27c187774235573ab38202b744ce03d838b18f38d2c39c5b80cbb1f50956b64bbe50732af2c08e8a256bf6582eba313a733ea25069d561ca761529059653d2da45e06fcff37f9e343b6d870605d2ed24e8ee02847f305ff341df715656baa63842e3d5bcc0acf6f76a094d27469288262e52386baf6ed744786d437dc705b0f459ed5d97e6f3391235b1b1528d93a2cca80dac6c56db786c8e60e7d263cf839cef6f6fe7d2bcd53323094c0e3740bd76ea72e71d2220a3a9f83d070ab9728e7077ec751310944bc8b67275c0c01448b36a2470e48db8f9ab4a64096d3499323d87d715a03d041d41748fe700d498c500ab84c258f61eeadef96867a0719e2f4293d1ba159476ba4bc1a3e844d148c2fd233653f0f7cce7b399dcba1add1bd63e204eeaf9c386b33632712213429eb2f7659bce32ff3d70d780137952f37cb76eb1b120b3569e88af5b5a0ce2a525259de7376995a90b26a960bf1ddf314b5372ccaae3d8aa28baf580d1013975569b3f3c8bee9f519079a79032201632f22ae8e58ebce05adfcac76778b78e3fbd7489ba2ba5c69577da60b31f189e552bbe2f70ff0450d51e289353a3986760c451dbf4792791e12bd9532dc87fee34328db5035e62a0955e54c7fa041c4b9505a3c48006fc87c126f6fd84e0be8c4cb10a18213f4066382aeff3befcbba128fbfac1c1579d2ec1e3a3de4cda6cdf0b21c3d74f1435f82a0e5a9517001f1ea901b7525ced71ed400c6063ea28037cfc0f3b60d17fac0ce773253a86b09f0aa1c17a04973b2359d7ebcd2ce15c0adc9bd3d1437cc42aeafce3b042a280b3fb8fb5b33724b319db061c4a97c6d8fb84670a45fd95943b38d6eabc4beee30677ef58e39879f7de07370859430f414dfaea2cea0da062456d020289b4c079fef62d158b770b7bd855075a89ad2f078aa691b63df241b0e20e0aa5a92bdb9815fce5963b715db1a15ae36d4c44aaae2a1dfa30c229ee0289726d4ebb0f74dfe40295354405e53bc17f57db219806a7b4d78027173309d9b45086880fee30b3d19db88d65b3366ca138c10eaa15c786a359dff39d9c2998eb2ef2cc482693a67724cc08f0f7c5e6c92ddb72364c71bd8e1b4640c5d3c1d2a6444ea5c467223a3d3e4c327642181cc1b4f3c056ba79cedda27f79405867196e56d68f352e40f1ac50b5847620a180f364a663abde643d0a75c8176db89ddfbbdd46f2faca944f4cf294997121f6a606b36fc67626a58aad0bdc95de72ba98172dfc6b85ea70b587aa65cbe7b49c1e5437cc737631d23a2deb099ef30551c4f8ef8373770c8ab6e4dea5a65a56e63c645828f4fc7e5ece1589fb7d4bef07f8e99868854e8f26e5fd05d0a339977992cfab11b5a96acfa8fc6f1ecb599e21a6519f182b6d00f9a538b6736d15e4dab3fe87135fed85996d3b00e003aca1535fd98a0ed062f0678710771a4e6fcd6e126992ba3e396d408d59f5ebb0a586f187e9dfd91eb0ebf50e2cbe11d1b7cfc830a95452eb2d80598be1b49e5ce4bda0b0fb16f350e74226ace5f216918e5a6d81262299e13a4d48eb6aa37452dab3d55d85b5ea31669170d5c4c9750843fbc29678a3dbbad042931e4d690a4d0817f3f022332a1acf68682b419ad9a079325be3095eb4d29ffecca7126bcca5ed48a11b59154f878215712ff4eca0e4ae8cbdf96099a1b2e9d05a18422237f80ad4513182e2a7021f4720265745576f54695d4c170b1ee65e75cfe46532d8bde13988c54811dd05077bf9d0d12b898b0b56be4d8519a8e76e4d929df4043b51f0e6bc6901296e2acb1272a20b05a3c213e35590335bcc3089d65697672cbc6eca6a607f56afb6cdeaa90f0c5d6a32cf3e8db796ca37f55c318e608336f2f87ece43298ab10b5378d6ae438250dfb2fccbc468d38234b0b515f464c3fc1d5bdc8cff5c1d98c2d0b62fa094a67dcca0c55c05cdc923d88ae577a6b7ec2ef27332770d8c9a867caaf0561e96eb5cc788c35fe06b0a07a9e06806f3fe5e3828bb0b2cdc3fa3f28f3ed1da76aec34646d77147e2d4f8a61f6db7148a8cbcb016bfb11f09f9ac757128b52d5760b0e2c12959c47b702797bf6f5d50d9076a2f42eddebe152f2677d8e524ef1f4156baccdad73608e11954e071c52c4de2f8fe43c1ee8a6c64a4821cf0ab606cb50726d078941d498c40564921790777a3eba58fd86b149e1ea91cb3d7b3519e5054cf629efafa8bf63f245fdaf382d4beb4cd8d9dceed28d196b03406c7134297b20cf99a864e6e9358377b1acf2ef3b7e6dec38ea4647b120fe5240a7125e7ffc1781c17c09960083e18417d665c4313e441d827662b23547713fa5f2c1a0cfce5993083246beeb9533f496f43ab41675faf21f49ea1a00d6ec53d7162601013a0d8dd594c26892b3a24d95d019c7d069b6f4772b8588fc1599143edbe889fe885cf89268269bdd2556197e30a8064862a1a9f2e4db03104c9e0c4208af40ac006d5aa6771960b43276dfb8dd927866aae39bf93b959324c223c34c67252ff4ea693e798944beff242a28ab9f7d251388a352f2f95b4021c051c0c2bef05dbe8d772973664fbda6419c7bbf3d12163543095547e6d413ed8e4f8b0ed6b8d2f332c0a5fcd5e16591d2f1605c81f852b5243f2c5ecaa913717446ac9677269779216b397c9fa2bfa91e545fea31d7e17c736a5fa16d824995ba5eabc468e1b33aa2a16e5b8c3cd2d46feb01d11659cc7178b576769705bb42a7be11ff73922e1dfd8aca016454a6fb0bdecd79f8241a7b7a46fa470fdd735e848f66ae5ee11109794dd7d6ef9544073b564c4b9fe0d384c345737b9eb079d299f8303bf27563e85f131d43f5a4b3de477b04add236007399db677a0c27d3872e22f90df7f72ca1f70323ae3d2cfb6a77747f085bcda830453060ac21e98b648b35488c350e741c8946718090d32591136a45c5004fd3a20e6be579a49fa950f858a620746344415d038f22b641383d6284dc4a8a6189b33eb47f495ff03335bcb39a317b9ea3f8bb6306fa771f3c55adebce01c0add34a1c35b484188533fa206fac2713669a29ea8e5c729b153ac13cc6a3506cdbb84fef130f929805b0876cb4646a046330bc33ab1cf1e9ca3869573ee1a1549341ab007915dba719b3c4e8a94b62163e6d99dee2cbde2ae74135467b125b417c7544978d50c80c694399db77e878109f59a8335df3a326135a0d50a4bde6fc3e5c03fb7747bf919c68ee8f45c312bc2dfdd279411ba7a5f78dd9bfe16baa4a82fed076608229fc5a2aab4a3c659ae09160fdfab9cc526f3be181d95ca30ff6f064944e708a6f164d92b85584557645738a12fcea8d0c4b865fede73aed7dc62f9535cccee6f7a71ba7fdf8441b10b37984fac8ffe63d03800d0530a6d15c84e8999d38a31e2b776c72627aa540cef24e559ba61e5f4d5dd2f5b2fec6d814f6c279b2da16bb724de9f9d025ce4b1ac99805dfdd7081a522241fda97c2890de5663c5ef9504433f339462d3fe7c45b01009dadb71cd3ab1a1d916644c36daf187bea88df7841d82f056163111a34f8622d24ec7a4adec80c66553f4df10a6359aa8c18d2b73ac8caf55058e38d225bb4c8a2866f242864c1a7734bfa73eb8f6e9b28f51b35b86b8cb01df6fd6816ebbf782062decf3be80287f1749372959d20f5c909021942293cdfd023a6d498104be6a4680f769fba95aed9a15f1592f33760743bce8c616aa4296fc927f931321fb93980493fda4442c533baa78568fb7b863373c9b59c968a3704cfc8fe68b9049ae492d65276edd37405a6b3e9a21bb40c0d9939bd7b15b7b0961dd10bc60ec231af86fcd8fb1c0e62594fcb6ac5bda99d0b9667cb864ff33d2e9b8a4ad2972125a14404f9ef3bbd38369c37305b4823df33509b0846ad0586d3313be114bde91fc2b536dcdcb1a69da5753e62ec24ea7a8fb01d9b4295b7328dc72bf814e8e1c61bbfd9aa49e6923aacc22a28feb8c617279e34ad0270cfea6445a3b85b81d2c3b34b378abf4248b7566b41ab1b6e7f5e010329660fa716556193eb4870ee84bd934296a5c52d92bba859cc13caaddcf627c544edf0a0541c8b994bd1db99bf5dc18a3f23e30f36eeac72128894dea688a1cecd6b2dc551e6eb400b7b25e84b4b470d7a2ba150fdf9699f5d31ff67a5bb75040c074f7dd45c876e726dd545ef2e2db18ee58858af84e7c9f33695b1a138ad5149eadd2fa726690cc9d0731774ae7960c57a1f8f14362fd61dc0de2462a6519ccb3b5f4590eb990358cb87c6a37435016512ee5ef3b848b023f76128afae67cddb235e2658531d3967879aba4228687cb7d47e2b16b13a3d4d02a62652f8f9cbc1ca613ac708ff983e2c335a19721bb903e9565f43ca0e67e3093584112b0e80c557f0e9a4af470725e1db10f2f8559f9179ff6343abcb142c3697acb5efafd32ff3939bb9f3fb6d63ce194493651e18a8abff9edefb792e71af530406eee3ac46c5d3b8cc7925b4411c755cc55f7e0c91a7e077db63219cfa9cf1f6cbcdb2f353f637a8a6ecccc307f377c1508e7e6195962958048ac9460f26f9e9ce3724909ead48d30ff2f982fd7aa8dbfc9c2500faa063a81f197c14f875f445d5d2426c6f138ca2ce33b3d96ada8f12912e7cd108ec15cef5b73feefcb06a71a946136d0e508d7bad5902b0983ab5cfd6ef89bc09a3c7344e0d1cbc65ffe1d7123c9f7cc28bd3c77209eeefcdc3a078948456aa43ec0241f2c21a66798be3ded75cef82d5ece4efe6ed807e529dda779398eb81fff04c5da87f41d4817cf7eec24d0a658d9c4a59d1adbf456fefeb329bd14e2b85d630f039ec9aefc4faa66f99b8f80f33c38d6ffbf1b42d6be1591374d7898e1dc733626eb02c9d8c2c76c92544c2660e8833982b60651c909dae80e553a4940febdf1c0d7400c71f3af1652e9a6f546814c63b2ba2dcfb244871e3b8eda524a269bb84dedf1c56c64d9fa97c6107c0878fcec2c16021b3700d2ba3b34c9625206a4f03ab9a8a30c98d07fed6429391b420d194b6423a2abc1263289f197e81cf1524023a4c523f7021b1cd05e51ab137ef5919d1ef314a507fa1da43fb661ff893c1e7549e7a690331257cd2f1a4075825edb9dc100efa737d6e21699b55e7e20bae1bc1380c98c9e7ec75020f3a7b5fea16dc9d4cd7216e345065d7a053c1d7a6740749c10fb30b698d1e60e6e2f593655aeade4c96a989cbd10e56b369951d8c9a12b4e28ca211df90e1b31fa65d3ebf444b65b752790c6a7984ae7c9d4bfde4a8a3c9428a4d23727e25c2618e9ba61f5967fa3614793f3bcf2fa7a2f9cbbfd62724518a119c8949dd515655a19813ae23a76771e3916a635b7809ce85fdab8c9efc15612a778a8e38cf37a2e73acf942971730fc7a9d40da5c59ba748ca092b9593da70dbc6706614062df1686a21f8f32ee5b9c8a9c65f367f26d64a1820de94516b5e2e7181fbfb5e00ea2d1150020a478616ef798881950f720293d139cb249e8fd42b600675743f77343d15a5dcf5221ecf4302629c4adb47d42cdb9c1acce20d7ad97b46fc08115c78a06068ab3c29758bcc2a9cd8de4d6df41c2091f41585aef740ab8bb63d3c755d5fd8e19a68c352f393da7d5cd8ccab096b86608186ef3af468d61bce9e288b8c816757ce00577eae9ffb4e51c0bfcbbb21f750e8a78879185ae53f6ab03e65ac0ef414728c4fc265f97358de1f9093b4475aaa5200b9320c1dc13fb3fde4cd660f665eac9412e4c0a72ce02c7ba6cc99e596b7e61ae82f77b95063d00c8389628ba77ea4a108ac66b30c31635f693e150195bccd7c7f3602377cf3e9658462478a9ebc843a99e40024fd92aa5041b0cea53e042eaee410559e2c3628914d20be14335f71e82d523503e64a29d896eb6cd879d63239818517f64875b317488b6e324eb195322cc0ae57aea2097ed0b898a32e7900a4bc5cf047b7f8b27fdc6a00ebd7f818a0fef413283fe272ca57ddfa0c4536c277ff5f8a9a63074e5270871b48b67d22ba0bb60b7f80528b459422391ea7559d3bb1548af633eaae166ea8684fd488d909bcd03e6359397d76ed51fdde3a1ebb7739049b640fe8fc563d968e0a17606814770855dcb2e16fe6cb30f056e7d844b3013763ebdf4b5d9745193681684ff563a528f8f273908a1b9789b88d97cd607770b48a938b59fb63eef808bbb09ba97faff6ceae858ff69fb722fd8b3043354cee45b964fc5bfe41a0fdabc0d58dabeffb3b8017ce26dafa95c368599b83eeb9e3b0986718988ebac3eec898c16d243bf3beb535379c5eb29736a0fec1d5b147b7becea3c85ad155bf94064c5a833becfe491611a83bac5127424e828980a67cd3370420f5e7f29afcb70ee28a16198983a24bb20a49e95facae1aeedacef7e39de3e1e785891711e31f87653770e59aec92fb21430f40628e43ab499e05c9017e8a0eff62856943da931ada4bd7c8a8a0e1ce643dd5d7e434c9aa9bbc6e4760dff3327072260fb74add6f4bad94ea3a07576e85dee3d66c0808beec1c51968726e7f6439fb331f59cc32dbf45ef72d889bc808b1080668371c79045a6f6e1febd2e027fcf73f986360efd3ffb2f880a8ed7af7fbaf5afafd7d0c8ad42a44e4e0a90fd2cecaf8df1828686d2b79e56597e71a068c48bd87ba2e90d2dd8a505fe77d58f53ddb015bee6f271806182014cc152fe4e1587096c3bdb07cc503f2f966ac461fb8abbba76cc1b6551e124b46cbf426f3a97346c0c086d5f9292bbf49e4d261b2cdb1ba3a09bca0b4e1fcc953fe1099b3231d926e27269bd8786617b9f87c365eeb816fac4bbc50b7e04c2cc4f8d6e2c41cbbd6276e295c8b41578ed218063e54a09f6e46a94d40cea764d82242c3bc76c4e294651bebb2920254a71aaa0ce4647b6018b1b8ec1b6985eb6df44273616bda065fafa6fa188d39f1d30c44fcb2eeea780175e1153b292a5460a39e428c13baab9a7f95e108bd66c3a52f6f5244646c5bab0bc8551a8e031422c8bcdd870ee546d75d7f2cfdd3072e9fec8fa9f3557f6f97cbc52843f88ecf56cc04910cadf87c88b1b92a824e99b715cc3c605a3292383a6e6e0b42094bda6f362bf9677152913124da861090ace1c956ec11d3ac535a254c297a8f30b8b9ce8f999332098239731f69bc3339af330d15254b19f32129bafd9e02a5ff64020740b3eaf6d715e99119dd3964ba1f1f637f5e5877d78a4b9deb221000c5cc37abf2216d205a7c164d9cab8a2f828b2b6f0e1de697aa0d14309d5c3f3a345fcf2f0c589649142333fb205b2aee3351db8239ea51d3eb083805acb2fcbccbad3d0307dff2cb84b9e71c4d72984b3d31a43f9b2a46b72b3a1b9f71bcc502ec1305ba6d0e0f323c9e94336c785ea110791a09aa7411dbeae1337084d014a7265fbdc7b48948179c4fcfd315e2ea9a5db6a182d05e6f9c9abc13fb6ea38803fab1c9bd66d839e6345bfe7dc228c8916568df1db52fac93cb1931c2879d8bb3e9d7be0e0c6161289521a48609d07510d80e373cb18e553bec97114888249c3174201f3c0dbb3a492f6f56ae45708cb316252e826de0e60f8fa4371fb8df26071a2941b9f34c41e2736389391d7f5bd2b03c396132ddfb7924cf179ab233d5af4c61da2a55aaf46ef1ccb0c8fa538f0a26c1fc6bb8cbf2233c76375c0cb917849b585cef9d4dee593af961d0549372c3fa34cc145831667837481ac620e56831877b2e8c42ab7c2baf7810d1b4b5c38aab234ccda9a4d4f2c5a3468b773f54408158e372de5a4a70dfd7526fb340ede8aa0bd32a25acaa2d38162efea82d480c29600055d8c0b5a33c858aeca8cb4e48776d139c44af62823f2f48b21c35c02ee02ef987ca756a4d56014eeb3d9b8134a3b572b69f339a8c1b4d38184bff5913362453ab1beec4d9bce8f2edca581337bf7374eb8dbfcec58cfe51c3dfd08f439bde930245a351d2c19b3b66d77770cc2b359ebda8ca5ba8e4c14a37105fbf4a91bc3c5fe0299dc314966cd8fd80265c576a549f68e9edb0b32475d4b6038592b84bb40673f8051516792bc694f8a082f4803b235674d1778896693f09525eb6601b9e886985245357a1ecc256477bba6315b6cbfa11c357d5a588e8b2c2c710399a50784957780858af242e89f3147d23a95c0bbc372ffc1ac079342aeb4b5a95567e388be58cae8a0f669dd8920745d6a99f65156b63bed875aed3da2247d013be7c4bb9c5beb06c2128829a9ad09ecca4f56abe152b2a8f339e2a590e692b3560ef445b6e9aa88fb2ee6f7873ed02a609f28eeecad2c9bf98cbca20061bc66abc2ba4d946bd0165032cc6dac3d8fbc3672b345002f716ea03bc15b7bfdc2c244ec5dfbbf472557cb0682b39f100f4d54ae40d6a44048c8f12f3af988226e7128752678bee771f4739250f2e8211883c03d17c960487a51f24e6ea3b03886185f435dec19b17c9450bf7e5210d6720684058047bcafd0b2ad81a7827aa7d362f2404a7f590f0ee06b7353fa9e99e47fa8f0c37841dd0f932ab12bbe6ed81df4e85234570568ee80cb9718131ad1379632e52783763b029b70c4447e14312c794963659fa523e51b781416c40de533f22ccbf590e32f707387a437eaf51bc7971d5a237dc2aabb597bd09236fe3fa03c9d8c76c9112220c377374f2c98ffb8f66d1fb719e36438e4dbb5d7907546461b8e0fef54877ddb324867d3698543c53f409a699c90b92361a0aa2cfbfa62ed38063cab59cda66968031a0acc4551b71a9fb3802e5111467bd396d89f16fb5c3a0dfbf1016c07920eb03a3d7a5f8f552e915246f6afd467d87b6324a350795ccaab340873eb061ecc55aeb59e5b6769241e5f011d316a4f20a0f858303145b590e9cf39d8d20dd449fc5eb75ec240b9a34ec2faca603cc6fc4a3dbc6d40c52f33ceb4cc58aa837d2eac328ee21b810f542a637926c2b09414821a97830562915c63cc091afad0e1226e128153ee9431dfb92ac559e12f800f4f7733990884a5b2affd37474a5bc8ce49e6d7d9c4e0e7eb0400288a45225395ba3cd6d8d29431deba30a006238efad94596d99b23cdfb2011cbe8e274efd550ca51c968eaf8fe878c4e8a800bd03eec6a0acfc296c33328ea754e88f800cee5879e5470d81ad4562e3d3edd8c8a5eafc12b0175a22a59a897e4a2a459bb06fff90cbe1825617bf3a7e704442e2220c951dfb6ddd16a334b1e022c601d8a45442981518a5834ba05ff3223dd78014de3220f3722aaeb8ab689b533e2ced4525c1ee653ebf9fd5a343e08e5d1f28fada43da4cd6bb5162594e0e70152f300f6f0e0240d669023242a6d509048243407b5a984bee07b51ce8b297fdcd91578f9a87821c720a60edd8c94f26d69975924bd6e9952ab83054b436e650d9fbba3232bedc7c944c2255005b9d5c45dd264cd6595c9d3f1559b6566b681dccb6de93b2247fd5af86dd2443be6e3dd4c5dbfc85525fe87dd7a79e4990abb9085b4b20b348faac3642e7d80d62203ff5dc1d0dd34261fb8947909908671fb73f71666590accb84db28d8ccd7f761d74b88501d6aba114ac41dab231d5f329cb461d6dee4b060e3d071268f3dee81a828631b97a619cc5ab0a26db8e2e982de19d513092a04594de8e4679ba9a83e072ef4e5f90ff221aff17e4ee703769effd2239150cb19232776cb027ea5b4c588c1a635de12c38fbef919c529f9b6d5767fd5d852625f4d04fccd9db4acb4d6a1730f81a3591e850c2a0d76fe300ac4e665745e9a6a57456afd447fba3908dff5d5895fe53d53901c16b1bad040f2fba43587aa755d819acdfac84f1bd5214fda4bbc37105a134f6341bf374c96ffd8547278329fb67ebbb277d182360baeb4e358009db119ddf1763d7e42cfbc81e95b7ede8d560f9f269cf6f89fb546f19d858d0f0a44070444d95c8783d62c49bd4ded132154b37379f1ea961df601aa68554d3ff345ac36b7e1316360fc6097b2803fce85086c8c1465d5427394e639b3b73b0bef4273d5a9326e8a60aef3fc67b6d9592edd7569844d5976470e4f1ffe4fb90b54a6f871b7514665197a50f85b465c5b8560786c583cb9b9feceb6dda67359a6d9ff948b60a25babe1caf21bfbb33b4e3f2de024fe98a8760152a7e34ac69f76d5c8e29313ca3097503d61c7c781f899a2923723e60598430536bcd169bdfce3de7f6d296f2d47effb2e2a8c4d3716d6663a07d9bcf7fba950e7402871cde4866aaf9eaed14023ee3939b6ea0b47087ce081bcc6d1d455019ae0ec49017af8d6f0b5e1a3c897374a90cc816170365005a805d07bc34f36f449b01bb38749bc4e074ef098d3b6f46da87334832a898ff92342ed590fbd13e9d3d1590871be816424c725fe71140dcfd6ba2abf88b51adff8a55def25a26e6acfd12eb85f4deaa1bfbb0c653f32d5f9a20dee77194d83128eb9ccbe9393c8ef941bf733be8c7a9f6e971e4d7c97df73a0eafa5a5ac74b495c0c9447e80595f0d72e5d1b0dde93a587e7d617e7b79cb649ddc8d9db96f5ecf6fa5f0b817c6816ff94cadecbc8e86cb229be64df26904a0352f4660a40f565d62f8789fe7cb1ba73cbcadf86efcb4d63d951b4e1495c9763e6e79f6569dc5c7ff8a833bd6af553ea5fd7cdbda7bed023731a788ca44436f2062cd68b660d296b022ba95cdbc58bb9bd6c09de75559d578383303fdbf9a1243d3ebbdaba2a651dc8ac5b4b5384ca6851122477fd01fd9687166c8934ff5e70f897afd1fa96880ea884ba0746c5988cd7449e0893668966fa6e9de763a7c77ed4b2330f9bf41ac44e5f462f4a0a5e7dac8de70eccd5b93f69d634d8cc8594943e28e5f212a595c51686a011b1c5b4e14d4880092de2158631f7d1ebf43b1e67a1762927e32d71879db5285d327a142e362f09662b0e16d20f4df58f5f1afd4fbb047cffa21e468240457f7030a9f4daf38bd3d448dc45b93e43003181c789d2d75e7207c3da7d5baad1f5e930e7ff6e01f98fa20bbf2a926b718280f0a37c87730e78cedd049e6a39c52c26a7866c5dedf29d7de8392df403441cdc20312de43a7f21b3320f124489a992b72937e43124017db672dcc85482550fd19513166f8a3aed63776c8150f6e9ca292a6eff7e20a0b0ea101ca24a850f0bdfc3bbde8fdecc3c4e119f64361e2022eb2f8e16ab704ac797547b143c77dc7175308deedbc4adaee1a53a236a7bc73d8bad27b22faf8a323cb46ac6b0d767d120601bbfc9c859b5ac86af47447c599a7937ce5a911ac97158c47e023e202bbb6fd6e7d9d0564ad12d4a71587abc519a3233e488766e831559e9278f3aee8290c21974b585fb1b91e27522df739849ed45360cc425f7619edeb6f9a63d9f16e1b58c34eb613326684a8b3634a5bc9ce430c299864661df6e45a266ffccbe532ec8b3bae3e87b05d4e3e11e00a785d51f734e3d575e2a47043d2fe1e45ed8c1f85a348927924f24584d3b6ccbef709d0f8b4d4aafb3bd430113d40cfc7a5addbf0863022ed52c2c72c4ee84eef4293f34f75444080d875de568235ac085c120e351e3b88247ae68b5096f08e24c0c361035e7dbe8b234f221b8922da927b81615a51b3e9a6022738f79516b5e5d963c31c56c64da58329a2673a5284ed68c37b6909de70f9544d762a32a1ebbb +MD = 6d9ef20b491372152ba56e3758f885f8e40e282dcc19908b8493e7e3 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp new file mode 100755 index 000000000000..14eb097135a9 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 19.0 +# "SHA3-224 Monte" information for "SHA3AllBytes1-28-16" +# Length values represented in bits +# Generated on Thu Jan 28 13:32:43 2016 + +[L = 224] + +Seed = 3a9415d401aeb8567e6f0ecee311f4f716b39e86045c8a51383db2b6 + +COUNT = 0 +MD = 90080c037bda5fafcada98e8afda62b10ffb5781b97f6e7aa3ded6e6 + +COUNT = 1 +MD = b56de7b4b405b0bdf23ed9c4593956cb4231846f278cd8d8699ab7c0 + +COUNT = 2 +MD = 7bb3d3e02bb77351e26efad816936727495cde19d398c6432944d4d1 + +COUNT = 3 +MD = cf03895afaff496ff32559e84a079f2aaa6cc8ba46a6b72cc096a5c3 + +COUNT = 4 +MD = 25a230652528d153e1450c5bf61675b972ffcfbbd19777f135cdb1e5 + +COUNT = 5 +MD = 3218644ae2c85ded3161149ab9884c1e0a8d0f0de88188efd5c801e9 + +COUNT = 6 +MD = d1b49d1b032ecc662a480e491366e78077b303787a78cd98393ff873 + +COUNT = 7 +MD = 083c955f765d7bf20203a95bc0cc090004c11ffd1efa7c5a329b2f73 + +COUNT = 8 +MD = a9ae11ba02e80c72ad5e2573ba5bea7ff48fd77dbd39eb5b3027ea2a + +COUNT = 9 +MD = 29a9d5ac6f46afe1394f3bbd74cd54999a0767e255e6f55515b49d41 + +COUNT = 10 +MD = 3f894a37ebcd3d8812fa792d4e4a084eb0032f175bf01b49ad2ec69f + +COUNT = 11 +MD = eaac419738758661f476379e479e7ea5f21824fcbd215a6e6145e938 + +COUNT = 12 +MD = 435737ad0627fbf1a0979f7d17b89186220e31a90ca3883a43b0f0f1 + +COUNT = 13 +MD = 066f23af0127805daaa28d94753f1e48a73151bf75ab9f3339ca6e77 + +COUNT = 14 +MD = d8a40d99b2abe9472287e947d03e440b146ee5d7710183065c58ba94 + +COUNT = 15 +MD = 6ccc002827eb48a89aecbfa72844d4fbbcb03db7c5b1b9b7fd11ccf5 + +COUNT = 16 +MD = 451b356a57072fca7e5e7e23e4773f3f1ee22063a5df6e730927e1fe + +COUNT = 17 +MD = e35bbe6d8863305c4196cf6253b1586c0f817a48f84cadb2d3a49c5f + +COUNT = 18 +MD = 58bb223cc8e93af3a3589b4e2f90c154dd5139e25df125c8b28a0969 + +COUNT = 19 +MD = 76a224d6016e5c010b08e95e58ea013145b776056b12a74786c6ec2b + +COUNT = 20 +MD = db53dabd8bc94c957b7d0141544368ff4a766d57dc2de0bff4180f01 + +COUNT = 21 +MD = 7e23f5119ee2df35da2d2df6d8b66fdad4f370ad923ef0ed3d2712ff + +COUNT = 22 +MD = 4cdf60e70c5e28624b2ca2f6eca4406ec98822f589fe67f1dc6361d3 + +COUNT = 23 +MD = d707133bc8872081ff0d993ea19310927caad364b30ec0c8da58455d + +COUNT = 24 +MD = d37d8170f36352a36cc59e383b6c276931818a46250376892eab1cbb + +COUNT = 25 +MD = 95674fcae84071c9a036092593860b69f4a99fa3fdca7c6a71c5860c + +COUNT = 26 +MD = abdc447cf2cca7ba783d5222388170cdb1de87774a90ddadb2b331e2 + +COUNT = 27 +MD = 5fadb07b140543f9a84508eb288dae4c1d218108eb6a5147763bd637 + +COUNT = 28 +MD = a466716335f41a3c35a42a7e39fbf8e8ea03c6a9919cf1af16b3af5d + +COUNT = 29 +MD = 927aa47bc75cf6ee96a5828998e0e7bfcce4d252ccae06d93ed30219 + +COUNT = 30 +MD = 478495c0916b6757f2548d249e2d85e939fbe3280227bb5d773ca986 + +COUNT = 31 +MD = 018253a61c3357adf9fbf6d44a115081e8351f02cd25c3d7cb2adf46 + +COUNT = 32 +MD = d2fd3b6ac00d79dba3ed43df329e922e524b5dccf7bafacdac5cd1d1 + +COUNT = 33 +MD = 1619c75818e91d4d3af0f4231c26c26121853e805078f419559a2722 + +COUNT = 34 +MD = cc5b0ddd2428a7b65204b5773fa99905b2ebc88cee66716e76f0868d + +COUNT = 35 +MD = d69405b098b209808835ad97fc34d264f6196c583e3bc24c070313a7 + +COUNT = 36 +MD = 1780728c3e6417d07f190dd38956fcb64d267c9d5bac9ffb199bb277 + +COUNT = 37 +MD = c041639a463c32d8834e139fd1100da0c6471d9569bc07455676fa4b + +COUNT = 38 +MD = 544df2a88a44d63bd105bfca65ce779105cb894b1a970ce85b0d98ac + +COUNT = 39 +MD = 8ebfd10e55c0417f19a1802e627835cf9eef6c791d5afe02c49c9fe9 + +COUNT = 40 +MD = 0eb2090104b4f60af3491a71b057c8b4ba96e3ccc0cadda9fe46c116 + +COUNT = 41 +MD = ebc660a5531465692938196be72c0e5e1f7d223628188a9631b3d249 + +COUNT = 42 +MD = c72bc20c3bc323423e474f646adc7cdbfbab9ae607061fb680e30042 + +COUNT = 43 +MD = caf7a240d1daf7e982138ea97d13ee38984d2f730b467e3e223392b9 + +COUNT = 44 +MD = b59570f060067d5e950208fe6de5425c684888d9f27732634a752f35 + +COUNT = 45 +MD = 653975b8176264eac60492ba225ec3a7f6f77a6b31a0e2e853c51f59 + +COUNT = 46 +MD = 367af381af7731cbd5b985c1a422d91b679953370589654cfa7019b7 + +COUNT = 47 +MD = 9921860a82ba4f5da944d4116b966460d32ef26c3f4d036a5c168751 + +COUNT = 48 +MD = 4ada4057b4db83d50e587133afeaf856ddb8814d5c7c13435ee007a3 + +COUNT = 49 +MD = 535a01d843cdf600ec37397c8c92f5f6efcf990456a2104db39c322b + +COUNT = 50 +MD = fd078a0681ff88999797792edc9499ad89917ab3125e71be6d45bf42 + +COUNT = 51 +MD = 0de5b9de4a1467ef9dbf30723431ba5e06979809101727c1836a586a + +COUNT = 52 +MD = 1131634aecef0c870d6d4fd19427217d9cf503eaae1de358dba780f3 + +COUNT = 53 +MD = 197e7f3708ca08de7f245f9cb395ce484a042408051ef2c3418cd644 + +COUNT = 54 +MD = fb4e16448595bcdf1df6ab016ab017cb3fb4e8598e78ec3822d83349 + +COUNT = 55 +MD = d46404a3544adc5a8db45b5d96698afd6284eaa845c817d0773c9714 + +COUNT = 56 +MD = 4d7ac8006d42de927c01c823aefd8ecdaa8da0b11bf7ee76d3b47969 + +COUNT = 57 +MD = 90ec4505e7f8d2ca9319c06ae84de2b40f9c6d27c395fba6a5e31119 + +COUNT = 58 +MD = a1c2a920736631d4e77a7e61b4843401e5866c1bc6188e7093b4c8f8 + +COUNT = 59 +MD = b6e3132fba32608d03abce8a9e83613a9f40b0cc43fc730ea627b9ba + +COUNT = 60 +MD = a97413901377f7b6229858e1dc6f4b06535354020808d86bc0683f92 + +COUNT = 61 +MD = 65ad1ae8bcfc92d2beec8ddbe006b07c52d97e870455e4a34b41466c + +COUNT = 62 +MD = 206f7e464cc2ac73e381ad3c916e5c8779d4979fa30efd79ea798b14 + +COUNT = 63 +MD = 95da7e5da7a33d3cb274da965fb1d35d0c4924e481f11e84486fae5d + +COUNT = 64 +MD = bbe6ae6208e5632fbce2db1484d9bebe340603db56d76bab0aad410b + +COUNT = 65 +MD = 08bb3f982529839e8f79341f08fa005007fe78583576175b72192a48 + +COUNT = 66 +MD = 7593dcc53ed5a5ce3c714c02d540e372b35c3e7b24a1f640f0a91336 + +COUNT = 67 +MD = 6668b8ec65ed083377d41d0b11fe4010080228d0f20df3d569fcceaa + +COUNT = 68 +MD = db726ea3e26c0efd3fff6526556a93864f486d4565318b1d3488b7bc + +COUNT = 69 +MD = b6a493c84e40e22044461c2a39860744760ca1cc13ee2aeb7883d9dc + +COUNT = 70 +MD = fafc2292049a428c572ca462f4ee88a4ee83fa01354a9aeff40541d9 + +COUNT = 71 +MD = 08c739c2f2324a52d8117c61b2deea380886bbb9575024774cc1cf3d + +COUNT = 72 +MD = 7c36db605e5d1de18573e5bbf21b0644f68966beb9b3f7b5536e9ae0 + +COUNT = 73 +MD = 9887beba2d80223b0a66a195b6fb26425c2518b3d853f30d68835007 + +COUNT = 74 +MD = 9e4c2b1dcd4648885261543c5906f3a924e1e5daf6f8503168c2840f + +COUNT = 75 +MD = 5c714ec41987c96002a46a2c7caf9dddaaccee10e8d383a93e77c6e6 + +COUNT = 76 +MD = 7e6dc237bf496e476bf74ac440c19816225e1bde6cd89b4bb16b185c + +COUNT = 77 +MD = f707e3ac900df03ecacaae9c0aed27068ca3c5d2c02ebd12be337792 + +COUNT = 78 +MD = 988229e5c5e818157180d4cb9614f8b15866019ec99c63c4aa799ead + +COUNT = 79 +MD = 50374b6bae57ce6138ee29b0793236437c0ffa2d58865d156df30d03 + +COUNT = 80 +MD = 877eb9ef0582bf8c915e3e8abaa79fda32f115e3e527ea50e99dd5cb + +COUNT = 81 +MD = 7fc8125b819005f2df346c4673177c9bc27f9673cc1ccd2b3d81f61a + +COUNT = 82 +MD = 3bd657ec60bdf3ba8df364d299db12314ad378538b133584ee7ded32 + +COUNT = 83 +MD = 7b229c62376d30a6bf5aee6d3403c47ca4ec65ae7089e278d71e716d + +COUNT = 84 +MD = 22507acec0175541447f801a7fe23aa4c2dbc48c31bcea2ea51f4586 + +COUNT = 85 +MD = 93f1c6c78c70307d97adb4afa2381698e19341642f3228e96b067576 + +COUNT = 86 +MD = 43eb290d20a380ed9c3db6dc66f32386b23895fb01b07084088837b7 + +COUNT = 87 +MD = 5a1cb63998776e62493d9d69da0fcfa214e0f8bed95890e670c7d429 + +COUNT = 88 +MD = bcf9feb341a37c046deb860d2a1e987269ac76fe679629c3508a2412 + +COUNT = 89 +MD = 055463231e3d43efa8033802d3328a0cc3cd912ab482caaa90db3fc2 + +COUNT = 90 +MD = 6de687d5276326d1d7111290b25622a24bef182c406ce9e564ede2ba + +COUNT = 91 +MD = 0537f81273d9203f104a39e74230ab9b7606f162e40a0b6fcf6cb629 + +COUNT = 92 +MD = b0aa14135f81783821684ba0f9b810daeaaaf4760735b717b2af1580 + +COUNT = 93 +MD = 00c6f9b93d96136b6d1a959001fe60f38dd87ba196d72b644d0d103b + +COUNT = 94 +MD = 89f4b63aefc6c8e49936d0de5ed34c223a412bbb4d09407fee79dbed + +COUNT = 95 +MD = 8acb501b216c83d3e500daea16399afd1bef508ccce646ab9199bb5b + +COUNT = 96 +MD = 206f8daabd9ba1286cda89d0cf33d8fb09bd8605ca865bca469361ad + +COUNT = 97 +MD = a9fbd98940441e92537d9abcc3d61d2b665348e392f4de25f07a6677 + +COUNT = 98 +MD = d40d3d93decfe44227f5c6d8ab98cf86df9b4ebdfda81ceb0554d7e3 + +COUNT = 99 +MD = 91defbe230b514d7db13d915a82368d32d48f55db31d16e3ae7fbbd0 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp new file mode 100755 index 000000000000..1a903e355afb --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp @@ -0,0 +1,588 @@ +# CAVS 19.0 +# "SHA3-224 ShortMsg" information for "SHA3AllBytes1-28-16" +# SHA3-224 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:43 2016 + +[L = 224] + +Len = 0 +Msg = 00 +MD = 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 + +Len = 8 +Msg = 01 +MD = 488286d9d32716e5881ea1ee51f36d3660d70f0db03b3f612ce9eda4 + +Len = 16 +Msg = 69cb +MD = 94bd25c4cf6ca889126df37ddd9c36e6a9b28a4fe15cc3da6debcdd7 + +Len = 24 +Msg = bf5831 +MD = 1bb36bebde5f3cb6d8e4672acf6eec8728f31a54dacc2560da2a00cc + +Len = 32 +Msg = d148ce6d +MD = 0b521dac1efe292e20dfb585c8bff481899df72d59983315958391ba + +Len = 40 +Msg = 91c71068f8 +MD = 989f017709f50bd0230623c417f3daf194507f7b90a11127ba1638fa + +Len = 48 +Msg = e7183e4d89c9 +MD = 650618f3b945c07de85b8478d69609647d5e2a432c6b15fbb3db91e4 + +Len = 56 +Msg = d85e470a7c6988 +MD = 8a134c33c7abd673cd3d0c33956700760de980c5aee74c96e6ba08b2 + +Len = 64 +Msg = e4ea2c16366b80d6 +MD = 7dd1a8e3ffe8c99cc547a69af14bd63b15ac26bd3d36b8a99513e89e + +Len = 72 +Msg = b29373f6f8839bd498 +MD = e02a13fa4770f824bcd69799284878f19bfdc833ac6d865f28b757d0 + +Len = 80 +Msg = 49ec72c29b63036dbecd +MD = 47cab44618f62dd431ccb13b3b9cd985d816c5d6026afc38a281aa00 + +Len = 88 +Msg = 502f4e28a6feb4c6a1cc47 +MD = bbe61d85b4cae716329e2bcc4038e282b4d7836eb846228835f65308 + +Len = 96 +Msg = e723c64b2258b5124f88405f +MD = d09da094cfefaad46b7b335830a9305570f4f4afe79f8629ff9d0c3d + +Len = 104 +Msg = 0d512eceb74d8a047531c1f716 +MD = 29ae0744051e55167176317eb17850a22939d8d94ebb0a90b6d98fde + +Len = 112 +Msg = 3b9ab76a23ae56340b5f4b80e1f3 +MD = c0903be96f38051cfc2a5ad256aa0b8332217f450eab904ee84b6541 + +Len = 120 +Msg = e9fef751a20297ad1938662d131e7a +MD = 48eba36dfe0575597d13ca26133267199dae76d63d1b9e9612720d08 + +Len = 128 +Msg = 2bbb42b920b7feb4e3962a1552cc390f +MD = 0dfa61f6b439bf8e3a6f378fe30a4134e8b2dfb652997a2a76c2789f + +Len = 136 +Msg = 2254e100bde9295093565a94877c21d05a +MD = 6965256463276dbb26ad34a378c4bacaeae79d700283b188d44d73eb + +Len = 144 +Msg = 784ef7adecbb9a4cb5ac1df8513d87ae9772 +MD = e918a5d52a0d42ab8ba2ea386eb6ad83cb8dd9a6bd461506be356ead + +Len = 152 +Msg = f4e68964f784fe5c4d0e00bb4622042fa7048e +MD = 765f050c95ae3347cf3f4f5032b428faeab13694e8c7798eafb82475 + +Len = 160 +Msg = a9ca7ec7aaf89db352fecba646ff73efe8e4a7e8 +MD = 65d6a49739c0e287584ff9d1f3463ce2e555ae9678147e21b5889e98 + +Len = 168 +Msg = b2f7018581a4e459cf9b9d9816fc17903ba8033f13 +MD = c6837f12227bfbd86ccfe794053ce3a54052c8ca8430f526fd64b5f2 + +Len = 176 +Msg = f50086b4dc7bca0baec0076a878dd89571d52e47855b +MD = e39aa96fad581961bda032ed33dce36defde958baf9bae5dc558cf89 + +Len = 184 +Msg = 6e6ef963f5000d0b91b0ad537ddc9697f8db8f10a3d5ee +MD = 66dcb292b4d6bb4cdd4099b8e7bfea9658680c92c51562c091577056 + +Len = 192 +Msg = 12a7b1a73b0b26a66362ec2a91ea5ff11af49a7a148a8cc5 +MD = 6fc91ec8ad448173f591b865ed3eb89115a278003376523c00e22f2a + +Len = 200 +Msg = 8a4768add4a9bd7b3f27461220ceae0218cf3322f4d2a980d1 +MD = 9a88bc64e743f2acaa1670cca7e201a299e1cce6df7015b0d2535213 + +Len = 208 +Msg = 5c5b8c1902c8608c204e72a813e2b625021b3182c48b00f7fe4f +MD = 31802a0fa9ae7ae88626604ad9ae41381d6f7c3c90effcfcf70efcf7 + +Len = 216 +Msg = e89e5cf07afb4a58ebeee17ff596d90b3274ba348f14f284fff025 +MD = 3bc9b7973f55735b612ddee8cc7907a3f1429b06df7cb1293b989802 + +Len = 224 +Msg = eb9e1143782a0f9fa815261c2adc2758fb1d88ffe40a0ae144189a48 +MD = 9d70d22520094a113297a192ead33e316924fdc7a2a9f8ea7098b84b + +Len = 232 +Msg = c4ba3bff885fb78357221a9a903bc7ebd11c771faf5789e5aabc993a5f +MD = 7b0212b4ee0b14dba62c2db7a765ac56db46e0b06eb744ee35726ddd + +Len = 240 +Msg = 07810e6b785177e52d0feac0394f3ecc41f35aa08ff1ed8162575f85888c +MD = b413d6f0cce14b7a1044a14bb2803d53bef907093769a5aa63a8e316 + +Len = 248 +Msg = 01c742dc9ab0b05df925d4a351e38bea7ca7ad783594e22487d5b8198583f3 +MD = c42c707ddc7b630939544adbdbe567a333ac88c3b5e738dee8f862be + +Len = 256 +Msg = dd0f85b55fdf56ba254e06f8c2b650cc6b86bf28a14d714011141a86b8f14bd9 +MD = 0fe92469297c2c34911eae424710db6d312047898b9756edc5c2deb2 + +Len = 264 +Msg = ddf48f4cdc856c448326092dcf6bfc4ebcf4b36fc2e516eba0956807588b6e827b +MD = 6cd83ba70e1bd387d603ab14c9fdcbf9862d2ebf0987215f011abee8 + +Len = 272 +Msg = c34d1f8729663569569f87b1fd6e0b954ae2e3b723d6c9fcae6ab09b13b4a87483b2 +MD = e57e1d24dbd9a30ab311291f5d6a95530caa029c421dde0b487a577e + +Len = 280 +Msg = 808de7cbf8d831ad4f17eb58031daed38bdab82f467f87c6b2e3a7c5de25c8e8229413 +MD = b3c13f11227f4386afdcf7663a120990f27da205ffb9bf83676f86dc + +Len = 288 +Msg = 5204a0a63707bd1cab67a8797994a052ee73884b325fdf37d86ef280b3f550c9eb4e7fd3 +MD = 6aa1060f84127bf2c988230a907242e7d6972a01c6772ba0f7b8bc86 + +Len = 296 +Msg = da9439bd090dfc2eccc1203a7a82c5d6467fec4e5b0a2b2c2b9ea65b03203a8ce365fbd98e +MD = e8f0929f1f6209d41185292d35ebbf5a3bfe5492713b06d56579458d + +Len = 304 +Msg = 668bbd38c0ad0881a7f095157d00f29b576b01ba54a8f1392e586c640ecb12b2a5c627a67884 +MD = 75dd056962c5bb5d6f616a9f57892992946d048df57c0a36a40a365a + +Len = 312 +Msg = d63ac3bcfee3a5bc503cf20fe8ff496bf7a8064769870c8fc514c29b55825b6288975beb94ba56 +MD = c694da941a7a506cef471fdffb5230bb6c3cd2715341033ab7268e9b + +Len = 320 +Msg = 985f06121aed603171020badc2075fd33256d67d40430839575ddaa7a3f1f22325d06ea40252d5e4 +MD = 29f8846aaf234281b515ea1d45674535a6126c38bd959c1995cad7c9 + +Len = 328 +Msg = 8783849552be4540cb24d67996a10d16444b2d936d2fa5fcff51fb0dd5ee03998c0454289215fce47f +MD = 84502256e3f4291ef4d15e8705e579951fc0e39a2d58fda74852551f + +Len = 336 +Msg = dab31c7b3f40825aac13f6772771b7e7fbc09fedf6eff778d51190ecfd4b0f256cf189baeeec507e945f +MD = 97168a9c3b07ec4987a4cf1f2478731fc674f56a2caeef074590ed6b + +Len = 344 +Msg = 1119b962bed5815734af7827ec536701a494ac5d4ab83eea1b16ecc80ce4e5f8694a7d11bcba2e34f084dd +MD = 205d89e032f03c8519cf43b720478389b1788f3522c3d347febd2c70 + +Len = 352 +Msg = d2c45e2c1fa0c44efc84e6c0654cc0d867a3e33733c725aa718d974ed6a4b7f8f91de7d3622b1e4be428de2a +MD = d483e39b7add050eb4a793e54c85b250746e382399c74736f33da890 + +Len = 360 +Msg = a873b148fe1807b89cbed930a7802abad6ca0442340e62ed21b84ead9a634713bb4de5648208c0eed6738d9cc8 +MD = c86bcc12a6ab792c149aa83a6783ca8bb52b0ca4b2c12661c0a25d22 + +Len = 368 +Msg = b3008f6f567d1eed9ab5b3bbce824d290e66f66bcfcff7f9b8994835b4d54a4e45c9b8651b37dbefe5e3fe5b674f +MD = 23929753ad07e8476e7bdac8a0ca39e9aac158132653be10ebeeb50c + +Len = 376 +Msg = 78d073b4e13f6850dc1ca36683abac72336465d790eb3575c942667d1e3ecc849f37a8d73604cb0fe726ffe55744a2 +MD = 6229233fc655ea48bb5b48b73a081897d855f6cf10478228fc305842 + +Len = 384 +Msg = 45325b80e043c0cdce3ec421ecda529481910c09730128b4bb927dda1659ddd8fd3ca667d857941e6f9fd939a1c57098 +MD = 776aa1f54e038f390491a5d69bde7a2dbcba97c35574ebe60c9a772f + +Len = 392 +Msg = 3bdd6821d938fac52101fbee5d6ba191fb3b6cb634dbf42cebaae57bd897481ae5ee04e2d871a4c333ab5ab6588144f2f1 +MD = 62f8f3baea6dcf5af25d53ddfdac0bdcde88e3895df567c6c416a541 + +Len = 400 +Msg = 86fc66f2618c98fe9efa1e3ac04e340385dc2b746cbc0f7c757b88342810fe70d81200952928e7aad0c0b6b19a044537b009 +MD = 20a21eb1d3130a4519ce6abd5ab6817081ae1bef3603056476a00e41 + +Len = 408 +Msg = f2a6168e7f92d313fc30f9e6f825a480916216f02e0308db70773ec165e25e81ffbf0220c5ca0cc6c91d3a09da99fa6efa877f +MD = 5d6e5c82574f5e5c0339d3af1f9c28e17bcddc306a15187aff5d3dd7 + +Len = 416 +Msg = 5e3b6b75b54f21b8016effb39276f5e7f493117ac4c0f2dec38a80ae2917dad83c68900120db1325f1f4697e0f5c25a8b92a9702 +MD = 5dc2147f1cf655dabb5ca4b2970b4564eb19ec456e6f966bbae19762 + +Len = 424 +Msg = e7f17c131950c06311f47799a0f5a6b4996f4cc890334450e1bd6cc6f5670771c0dc607f8eceb15300ec4220510ed5b7deb3429de6 +MD = 4ce80dab9f933112a3fd78c1f76434b197806eddfe35cb0bdd845c15 + +Len = 432 +Msg = c9aa3d0f6d878db11235e7b028f8d67e2ce26eee718f308e21132e377e3170e26ece95bd37a4bd7f873ba7f8b71517ec50297b21cf94 +MD = 5963b41b13925a90c9e8fbcded9a82ade8aae36dee920199f6d6ac7f + +Len = 440 +Msg = 0f170afafcefdfa8b0de328dab30b4e44d98d6aea2bc39557ff4658fce4fbf8526d8b5359f173c14e4da7cf88935c9369fc7d607863f25 +MD = fe7e59028c7855c37ae3dc5ee324864cfee6b8bccc2c3b5a410b65d9 + +Len = 448 +Msg = 6b2b92584146a433bee8b947cc1f35b617b73f5b1e0376ac8bdadfe5bfdf2263b205f74dfa53db7a29e5078f5c34a268119736ba390961f6 +MD = 132cfa7e71fe0991abbd88ef588ac95ac9289b1d775b42033567dd33 + +Len = 456 +Msg = 39f7a94312bea1b4fa989f5a6775df538f01704120838c4a3104256478b5c0cfbe8b86e2912c980b390ea412edddb69d461e50f9f313bc17af +MD = fcc59655b8fec1a3d878345df9108bd99f4dd0e5218a55fc335e57f7 + +Len = 464 +Msg = ac582b5a4bb0c5e9c40d8f277bda9de3d07fff01e820a1cdaf88708f1d60be60b9a5e83b5c593657387802b4182d1df4e9466e6d7ae6dc7c8079 +MD = 5c2e10fae8f4304cd9361690e5d2c4cd15f10a7b14ea60208739579b + +Len = 472 +Msg = 072753981998453438a520d9de2d5704292910148b8f794ec3765b240c7af1b79462fa9a2f000dd94d592d3a2a069dc244daf57b12c57675f3f89b +MD = b0d290a6ebdd950811a2715f354b0d8935cb610a471cfc5dff5e0660 + +Len = 480 +Msg = 66a9a6d0a322ed2852378af82c0a2c027b1082098ab750925a4dc2e8961d0062c9db02e8cf42a6b48afb0056d6c1f1fbbec3fbeef049535f6e9b3864 +MD = d683488c8420eb2d61e528ab0a7b73aa780a085b9c7982293b2ac6ad + +Len = 488 +Msg = 18419a8498d4e9bfaa911748186c5753d5da5aa033371ffc56650d0ae9b73f430f0d1f3c9d40362786c0429d977b899b64016eca82e64203f6685c12ee +MD = 51d0cd33fd6579b05c366c6fcc653638b7b13b62798b99b36792cdc4 + +Len = 496 +Msg = 4fc52009d58a0fc2573e83fa335b5c1df8c14b2e6daaf05bd6e13fd5722f28de4816772424c2f94ddc3de0d3d7e26812d014bb9fd83012dc9abf1ec9e3f1 +MD = 630ee2beaf1c1592eaa6263fc562a260b6054e9eab1aa19536fda170 + +Len = 504 +Msg = acdaa28692f334732088f5efab2c7951fe0f845b9e2c6f1253c3cdcde30a4e8d2120e38c26422219df41eda2c8334e13f669a65f5ba2075b467eded32936d5 +MD = 7d4991d54c78af5809cd17024cadae783c6f5a1f0feb365b532580c2 + +Len = 512 +Msg = d1593cd338b7a25bb5413f112a639fe31c981e505c81a820e638c25209e2ce56c8838a7c8117dbadccdec959a6f7cab0cf304315701d4ccf0167b4026a6744de +MD = 84e18330723e4f90520d0b051a9bf9bd7b5c7ec0177803f15cf740e5 + +Len = 520 +Msg = 8cf8ea25310126ae1fdce3c9195395a9d45051a2a3f08ce154d8265b54cca7031a7ec840c3a3359efa4c91c41b74baa698d54ffb9b0170f2edadc5201650c2bdc6 +MD = 75de14169d16a9902f6e8a3359d94594a889c4aed9246caa6cf5612c + +Len = 528 +Msg = e0320fee19af5bfd511a23cabba75acb0815525a3734305aafa49c1d8bdfbd853579646a36a7873c4cfff2eabd7e3902eccff1192aca1f6dce3cf1c988e6aca9f2c8 +MD = d7f2018c303ee045de4b8cdefcfb5395674e3a8770d65f0757b4cd5e + +Len = 536 +Msg = 1a424ecce1a82c47742171a701ad6e0ff1a762ce26f8e332818a7fa1a800a4e506a4bdc813a09ee1d57222ada79a12e2399549ffd80f1628ef55e231ce0913f9ab1930 +MD = 277f96fca5d9ab055fae5d4dd10cc49c2237bd38d95bd8dbd168ec21 + +Len = 544 +Msg = af172809570cc306333c25523f863c6d0e0154c55e404722f0d4ed419713dabf8e18493a0e0b53b220a36535b1e8f0bbe43e624fac9f566f992807b6f2d70bb805933e2e +MD = 9581170093600cb67063a314d8decf109ff9368ffbc90ea2d3250577 + +Len = 552 +Msg = a62f4b43250cdf3f43c1da439bc5e4224b15185b60d615e38e3c512425aab145401b57ac3fc0bcc178eafef52a2b7b04b2b89e760212f96c4ee694990831858f0fa7c13c24 +MD = a0f5775a2d001a66f0882ce1415261994021988690840c6b4a3470c8 + +Len = 560 +Msg = fcf81c93f917bb06f278f48826ef9ca8ba99ac8f00129fd9f8e81ca31750d5e54818af0331dd239eb77ee4b0c4d0c2d84794cef27da6bfeb707794d3bdbc7b349968f2a316d8 +MD = a97a74fb01fec5caf3477220eef6e7c36d0ba4199ddc755f7ccf94ee + +Len = 568 +Msg = e61d24b500581734c29902ade4c5035c090868df9f24bb330609fcdff4a72d6f18001424fd813cea32923d8aa86c3d215b2ab7d134237bb62e78f61cb9e9b4ef5ced23729d019a +MD = 40758314f1abbd43e0bc9c73a1c7e24719d56eebcd967b39d355e978 + +Len = 576 +Msg = 37b14f04233dfb4da5e5bd1852f77c41e25c4926936fe414c8108200f6f3cd78c03e2dd9615446c14bebc2c70d65506a7a5dec4808806291769e0dbab200e576f9fdb9e240c8b8ff +MD = 2d36af0dd95619a96c5664d8987bbb82d183466ff44151034fed687b + +Len = 584 +Msg = 45efb0a3d8fb7bb683913459727e8756d67959cfdd4f5b80e13ddf45e09debdc2cc68ceb632d6d45a2d0a869f6d4dc4c136c805849fe77b4b381e4c6b22a3ff69947a9b5aa6b7cbe42 +MD = 125e983229f65bf01b59a9b619810a88f1c53b4c3b1960b52a205d99 + +Len = 592 +Msg = 9b6c3c77746219dd88976966c68ead59eb62aa3cf6647798dc06d4fc7ef8bd44d8903f1b7b6f8bbf3d6249052f862e9ccfb0d1957f0bba233603bca0766286d17eb9746bc002abd69583 +MD = 762629518833ba68333fc3e3b4d482c60b4e0e828872826b68313315 + +Len = 600 +Msg = 9f452f900219017199edfc5d7d86a162d9750bba4cec77428ed1032e5711b6fb7c37c1a65b3d041c7aa1d4f16bbcfc54f35001436b60abfb6544c0b393fc1389e5c5bdbdf2eaab1d99dd59 +MD = 19b432f5c38f665441d36c472d386008a5bbd82aa4eabeaabe3d28cc + +Len = 608 +Msg = cbfd186592fa68dc3a21d62db1ba55121f58fecb11695859d70bd7ed2a21a2a013a699640842973b571bf4a7c8ee4f617d5e8a4d1e8c15ae33e77097d146eba27934b1e33d8a041f2444ca3a +MD = b32ad13ba4a0b9fc1aa9a1a57bdbfbebdfab71cf5a16e06040f75787 + +Len = 616 +Msg = 173225324c6c350ddba227b89a651e576d1ab6a96895453c33ea61ddb37fa253e666a84d0fea609814688495246161eb9cccdd792cb1b88f36f3125d766e2eabe84175cbe66dbecc91a0ccf173 +MD = fc8feecaefffdaa966e9536b91dfc85ea5113a01d6b320677d727a7d + +Len = 624 +Msg = 6999f398407480cd43bafdaedb8624d9ba0972aa5a2f3504a67fe54ef744b7bb41ea70cf8faa771fac6a2f5823de83826af4c3865b6faeeee3d1d0edfe7f0e9fe3207f917b467d841850fc6e648f +MD = e7abcb4c0f218814ecf45fbf28a3f286d90c5e740aafd1647437c1e1 + +Len = 632 +Msg = 2727eeb1d51098c69fd8141d78f21275b2bb949e7115fd3860526bbda25547c20cf31b79919fa37bfd4726c4e77906ffe0ca9705f1782da0454e799422c815e01e785d418fa881f84341d8cd71ec77 +MD = 2be332c873ed4fb70bc1916c76bef2cd3385e674b83aa1ee8ad28a01 + +Len = 640 +Msg = 1f48a5b401d88e6cbe37f3f634d55462865f7cde7990052a1e4a1e4cb2e58c84c2c7ef82923447d7c068b6aa25e388acfc05704e46da14316d37ccdd2706a7b79ddeb02dcdd76f342c9cb2f490c18dc1 +MD = 448b70f575a8a1eb74030a985e9c504d4eaf6b1814e1146f782c9af5 + +Len = 648 +Msg = 6dce9a9ecb48b9da8aef51a89e7f7fc1a6a78966b7bac0ac5ba7ab18d92b616bb74537bf7eeb9bd3bdfb40a450747c3de2e6eecfb12763049148fa9134c7870ba80636fb21fc7134f92b0364f5d27deaca +MD = df855d544e17f01125022bc18e9ffced12f3cd39674e68184657ec7e + +Len = 656 +Msg = d498b6901345afddc5aa50cac77f7f794d7929eed571d95b59c289a0c9f3b812b896bc7b566f5a639ed9948ed066c2c622c6e4dbb2ea37e7c06806d61a22c326d72356ec48c9b5182c29b5f923af20046605 +MD = 5b225c29e4547777a2c6a1a2bbe9da2dc6a8c6d0d01d8d8022988be2 + +Len = 664 +Msg = e958b80489aa6a38526244da165dc4464e7961e457f763abdb23f7e48d368331197b37cd5ab1e515ceb1124848504d8be587bf3041d10437ebd53915164556b59106bebdf99115122d99529e02ee155138a13a +MD = 364a988400424557a9c60e4e1f32f0855a3383c90b007d30ee3ec333 + +Len = 672 +Msg = f33ba982bc2c3308f948a1b64c7fb68fb891bc05fa18781b1dc95dc749f7009adc58cca2bb0cf790ebdbb4165bbfab9304a2a6f234688dcf273094dcd8d7b38416be57cedace5783d8b92993548256b5373f2b4e +MD = ca37e52f2843a0f65692c5aeed0169601da3275dfb3ee6d81b467f60 + +Len = 680 +Msg = 8b5d77a906c7ec7563af7551a796e5d5dcf02c42121d7b13a49aa9d4bc79d637190e4e6510ecaf92d1104fd4ec5bd8351446350722d1b2775dbc5e65f8fab473dc637b5ca8a9eb88f68d11dde15275d7c472f9db43 +MD = 9337537de482f0cf88cad6b86e195a1e422e59cc60d41d0eca8b0091 + +Len = 688 +Msg = 3a564a84c2b48ee26da138ce2d1ae3c7933bcd65e40288406e56f30d1c48690a4998389dd27b55376f9b4e7f43607fadb16e8933726f00a3e41264cda553532761fefc73e86ed79b849b94e0895451332dc80fe39a4b +MD = 88eab3e16ca8da5716542bae3c7c736b541c896199b2cb941213767b + +Len = 696 +Msg = 618a53989ffbbf54a76f01f9b87772491d87c8f25c58eb11b18a04f5ba8ed62574c351a466df64731c911458d765cbde83e7f29de90bc1bb26cc56b35c140555a7dcf00f5394d76a4cc531d7d5f57bac7dcbd06a4f73ba +MD = 4a727cc6b4bd93d5ff2ecb81ab5057dfdcbe3e0c49436a58b9ff3ef2 + +Len = 704 +Msg = 31857bb4e82497b526e426de6920a6063d02264d5249feffd14abdbbf03563d4c59ad1f7572c7d0efbc46a65dea9580bde0e387c9edce27cd9b20a46f62a70e6dd5f58e40aac3a22dfb6ba073facdadd58cd6f78c02bd219 +MD = 9e614fc139645e158cd1b216e2623e586242af64f8483e6fca20ed4b + +Len = 712 +Msg = 14859008c83f2831be4d6e54b781b9fb61dadc40c459a93ede11b4c78a7e5a55a71701427526a03b42d883f247904813cd812e7a947c8fa37406aa6145aea6d3fd9ed494186f35333d423ce31e0cd473a031a5803c5593e9a4 +MD = 545fafa43afcaf38063d8a312c3a27e0d74bff957f8ef4d51cb29698 + +Len = 720 +Msg = 267a14bad702ef0a8468b31c72715f0533f6b97e6e943839dea420719d6defc5a399f84689e64ecf931ee395ee49f1fe362199b73cc6cb0105b3654b16f19f06ee8aa6b5d5418743d4804f9a059270710d126765e6a49c4ce2e3 +MD = 9b9360a5c747e6e1288f6f9d971051ffd84641f6d64e0a4b5142e4ec + +Len = 728 +Msg = 6c98a8eb3ea4451401e0424c10cb722683b23f75ae254d62eba75abb9aa9698e65ba1ff7c9f86d36d1ca6f0425d19428441b00450e9a2ef685d5da1cd4de1e779184db743fc95a461797333808ae6e42fce1e9da5d82f90cd71b54 +MD = 0c6f33f9534fc52f3700f37b9ee678b4c5c8a90b1a2eb1574002e377 + +Len = 736 +Msg = 4bae62a008d9fdba351a1903c66d58e587361990f7c9eea05a2f51f90a2892f60e6c14c4ed36b908c4039bc89797fd88e54281b37f619b3d9a274587229ef48351e8cb1881cb0fc83e6ddc90a05b160fd7d0a1eb0835d57158e42c7b +MD = 989c156ba1fd1f70deb378e46ffcbf6f2cf9cf977a92ac51643c97b4 + +Len = 744 +Msg = 83ca6d4ebdf1c04062ca1abb977670ef9bcc889906935fd64ff4c739912e541b8f8c7932f595ef66e18256dfa1f51f63bfe7a9df3ae2aa431771d19318d6aa3bccfac1a4c8aa0a0433ff807a881e0d5a9722aac6cd57c77eb6a9edf8c0 +MD = fb831f2456595fabee9d458625283a80bb4f8f031e9abdbf48b7b51e + +Len = 752 +Msg = f4c7ad8d24ed5a682c473463e85391050c026fef0b0e6dca388e1a7e2bc872a46746a63f3a2c1ca6e4c8b7c5fb6b58850d77a58988ba091bd7fafb66ced184e548bcfb1b0e6e1485fb6a19cd5ed07640a0777b82273d5e80799b7fa7a57d +MD = 13bee617474b3fc3447025f2a488dba8825d46a4e128b9a8bdeb1b85 + +Len = 760 +Msg = 5f81c5aec92385bfdc55ebd600f23cb04ac9d5c7a1396f801ffea1a6b94aa617231761bdeebc9ec0f4bf9bfaf5ebc7ac82a2c96f1a74c46d94f0dad0bcb9ef7b41ddaff8cf63d2b278239e6558dbaed2797ef3b7f4cff8fe592f6a3551b3d7 +MD = 143a6f0a20d5b4dbc5df64a7e50f9985631453eb09ded71667709083 + +Len = 768 +Msg = 0735cecaedef99bf4c53242f0552f49f56bbe589a2f611af75f4f3aec366cdd6702d46391512580202b869097fceb8a45889fbbf9852472f94bc2f432bb8309c4d0c4d3fba01f6e90c5c2ea3f890ed95d132c31f4dadbf268c378fac5604e8a4 +MD = 9f5e9f7429e5488a843c52ffb46ae2e84228919d32330a9193af3b21 + +Len = 776 +Msg = 9b4e4df92e5152fe1ec56a9fc865f30bac7e949fc4f62f0b158d10b083636b4de9bb05db69fe31b50103fefc5f8daf3af7156b4552ca3667a9d720bbb2e4bcdabadfd4b7f4fc5bc811faa36710a9d17758a98d4a0474fec27e9ef5b74f5c689935 +MD = 487a6f2f875cb253de4cef18ecb4f2a54388ebaffbfc4259bdd97f09 + +Len = 784 +Msg = a61bef838867710ff4341b26b13b8d7af7e461ccd317b160cc4fdaaec7f1805a28ddd3663a4210a7d1b64a752e866aa7224a75bf77bd0d618bcc3b0a3eed6bfe0eb2b882819e6a4cc437bd38915ce53c55d94e9e9339286483dc230d0049777ea1c4 +MD = e257bc45b62d0853ba4b0f8578698f4262c31a778cb6a6317b6e6d60 + +Len = 792 +Msg = c0bd79e0c5f72fcb1de6c234bdb67bd0d3f481b962a3a01f2d8c483bd7d5d98548d51d27532716b195fdfb0ea0b77db759b54e269e69e48e2cb07bc9c06259927d2755f48e8d9a020c58a9c9221a9d836f03b30eabf9099c8eeba6abed63bb38275b28 +MD = 92df7f848ada8a9698ddc2e7452ac8fc43cf83d2ca2cadd712c595f2 + +Len = 800 +Msg = 77823af9b8796c63baebe7ba9dcde12c626b840ea04f42d878646970ca5bf7aba94eaf110da36ce0c834b654bcac93264a349f520e505f1ec903d3589e3a4adf82687a65ee6dd072d6bc05acdfbdf257cd70a5183a54b4fe8e87d1c22b2e9f4ee817c57d +MD = 819a4340938497cd8b1def8444bb03f8429b9e87bad8000002d60b83 + +Len = 808 +Msg = ada5651b4e240335600940f207b98371f7e743988957bffe0de8ef0862d1ba52c52b6950e7b05c3542c2fb13acaff0442d33940a0e3ea67232f8437eaa02128283ffc0cfe254ac8f542be3f05fbe4e855dd22ae98a81b9a55b3d3753111210048f2b50e068 +MD = b6177d179cf17eddcd8988c9108b42af9c41adcc5942c4d33b0f1be2 + +Len = 816 +Msg = ff4704bbbd719b011244ebedf2f2355338fcc7d64844c3a0f36a21569b55f74a9710f8f3d8d83b9bcd733f5885c32b3d149a5ad137d016c03b93a4d11aff8218e8eeec6d6d12a41d1441f3df040feb098ca2f003c4c277fc71300cdd2a399a7bb98ae711c446 +MD = a1072b28f3453422e611421309aa49aaebba0273c72b835fdeea1132 + +Len = 824 +Msg = eae4b62f697cf0bf40a1c2c109143c1dde18e24f1c289aba67e5c83eef52b70cf1433bb98013949285969630054e074ca2e249d465cb383dba51561cbcb626f0b3b1d542db1e1ff168f371c7c6764b4f25ade9eb351622212e99903614bbf1fe3914cdf203035a +MD = f5273e4d0bf9779a0975fee23c447b3abb1cd17c34c723d62f3a2fd1 + +Len = 832 +Msg = 0e39e0e6933c6104984fffe115dd8cde77edfee495480aa5e5def424f066a5770345fecb28b16caa5416bc79e2b83145409bd4bfe9a00c8493f06ea2a99dd658fb87b71eb57dafe58da55fa0411e790341e31a8ba8f35bbe71af23b4e8833fd65ec8b4e621e95340 +MD = 62fb7d6b3810d0fd7d96b4ff5efe7bd283ddbbeda4a21a62f985a3dc + +Len = 840 +Msg = e32bea9ab02de7d893ecb7857ba66df2c35ed258123065ca80e2a067fabb7dd4e79839ea0b3c58abace8e97bf42b0b8d97fcb09bb606a1da0243c32d24cc98985df008f8698362f2aa789e2a82b3e5b5011853d0c0e8fbd20c4d2b5f4733f2df8c5ae02e92a90d95d3 +MD = 278e06fd12a3e314f60d59a323673ba0a22003e42ac48e1cd04a70d0 + +Len = 848 +Msg = 4157752d3d175a4bc1334fd42c204111728e7059659dcedf334ea7ce30378798d67c598a0afacca5a1c5fba923d54c72cffc9887df1b8df10d96514955056815fd2dd855d32e8b58b6fdf4d45715f636416a0137179f7eb01d786daffa924ccabd523bb31d1b5f0d05c4 +MD = 1cab43635d501e43ac42beee263755b9a29827e2a18b21d7be42e447 + +Len = 856 +Msg = 2df12d8c256cd1a127e525ac3763e30c895982eee67ab7c150ce3deae906d2b9110d829ccfdf2793729e31e478e3a310ae525e059971a29515bad2273cee77ad89ad88d63d44e98402c63180cf5eb06d0be3b1faf5adfc5c43a79ffc09a6ee6cddf9c9a039421d5b2184ad +MD = ee60f0d01008cface49af2ee5780ccdee37404c37642008a55fafaf2 + +Len = 864 +Msg = 03be6940e859f9b072660dff28a187551c2425481dd0555d2dee4acc36164f84f8505b6f467ae6f772eafcc9065490d9b4ed12a690d044bf7da14986e571fe34aee28e1d698c4136cc9f95d462c990b6815a54467da6f41c1baa86c448f37ac10bbc2ad1b957b17368ce01a7 +MD = a8aa80d4c925889b58eff41b89682b92bea60c1c3995043dac312d2d + +Len = 872 +Msg = 0baf1ac243c1f34ca5e00aed4d867f967bc2b963e93956c35b6b68da7737de23d7a1405a5dd4a099c663cdc182d4c91bc35f7d3fd5f3ac35ad7a26dbc45e3e86264c7decc538984214a1a0a1d11679ae22f98d7ae483c1a74008a9cd7f7cf71b1f373a4226f5c58eb621ec56e2 +MD = f12f7a1c5c1c383a2a5fff8932e2ae9dc342b37652d47356ffc1cb37 + +Len = 880 +Msg = 3c29a8c83e48194a7b87b69e376a06063de2449bd171fa91e58ed2bc904ba853bb35e3f51e7c06e96b5482aac89acfa383bbba3701d20104f8101d69de615f45a24c3e02991bf0d3bb3d37390fe87ecc64032438424218862093a69dd7b99008573661f9996ffe8ed50b7e54f49c +MD = 5c6b29c3cbfd1d2eadf7c791513b27f21c934de6378ef748b779b71d + +Len = 888 +Msg = 68a3c06e0740b569c72ea6a90d8b45e83c7c350d2bcf1cf6d6dffa7553b8b998087c052e1c065d862bcc6a7a3e0a90acfa1dc410172c9dab140ead9a296811557e1647359acd40341efeb6f5b3fdc0044162a45e62b0ec341634bcecb830626930392f8c6bde85fa088a322054acfc +MD = 58a691524398a5746df28ac083f15861750e0cdd1fd5e5f57c982c18 + +Len = 896 +Msg = d4f757d1c33b9c0b38b4e93e8e2483ec51b4861299f1d650961457496d86614d42a36e3696bf168fd4663efc26e88cd58d151e1531467b73f69dc9ce4f8d41ce579ce1c91e6760e340e7677abdf4fec1040745aa5144640a39b8c4f884df80753a691653003d634fa5bfce81f94ec3f6 +MD = be11259377f09821d9dc358592b6565d8ef2b414dfaa7db5609fb751 + +Len = 904 +Msg = ecd9e95f7c5efc8336f80fe67e113657b31482bafc22dc5b45073482846cdc48414d2ea855ae75d9f28a0bdbe30dbe511503788e578f20f25e20bb770ca1d787f2f02911139275dbeaa5ae1aaf155f40d7134915dac34d0938358dc8be97cf1005a922bf3d71c331282f41c86993e0ccff +MD = 6950ad0f91398b39965b1859ea918c531212face1e51d4d390f094e1 + +Len = 912 +Msg = 834ddd8fc7ea0c3385ef8280d3a7b22d59ad17d710a51a544a293544f30659e816a98d38a2d4d92f6f96626a7c79d6f17bfd0a558f45e2fb541172b720ec629c88a7971326050f2b9ab80d30cf8c777f80e37c98fa61797523e81e1bbbc7cd6ee22e4249dae679ce0f3eccfb54495d7e7046 +MD = ef21ee8d568c009eaa8d1ea770968cb718c4d56e7b2d966bfcbbf398 + +Len = 920 +Msg = 6ff611208395d81500505dae050ff0c29c0afde2a8e89c96192863ea62c17e292d0502e94dcb7f47f4cdd574264f48716d02d616cf27c759fdf787cdcd43b169ea586c8bca25fa3ce1a08eb615655e2471a0faa81d2edca28eff4030fabf36f10fb5f50fe4eb727c308f317bba995b6310ae12 +MD = 8a29f2c0d564935b8d31b7d007f58138489d140917a28ee85d43b6f2 + +Len = 928 +Msg = f977ea38076328bb0ee2297cbe3b2a9755fe8bb95ae726298e04df05201a7ccf2046b82836e092da94a4eb1c291450121718159468e8a330fc2b1272c661fb62397e874ffcd7cccbe5425af725791001c0c035ea41c8c48dabd206ddb217666e2b688237c2127e96eb049d941b34126b373e1345 +MD = 15180df5554387337f04de2f37a16b28125adbd02b6fa6cfdb24195d + +Len = 936 +Msg = 22a8fb43d54fff82749cdce98abe8adafcd443ffe16bf0e99341e1f7064fc07a5907c816abdb326c30fef0f5846e9e313f32b602c9e00352706358fcb7fb81eaf1857a7b0ffddf27b741a465961806ccf672c17993f284b2aaa9a2c854250a4212aa7937a9bfeefc30ec5f0067c3aaf34a1dce2ee6 +MD = d11fcbbb2fa03109f952a56e16867c70904552eb580a6659314bd5fe + +Len = 944 +Msg = 68727636ff38c0ba8999dde3cbd9503900d5ccb01d3c9b7959fb411eedf95cce1805cef6670d1e1133901cc06b55c41d945e654c0d18035498d4f92d167ae21b927cba3a810a41594885a00bff354ffc753e368274d01374469f1b3f7793e436ddc0822ad698f13bd15fb3ed10e0b97fac5f8778d9ce +MD = 21c71bd09ebf5d09155347c4f476b8f9c5aed4579573211887ab6084 + +Len = 952 +Msg = 167cb772f096b2e3b1599cce3440d1af57c5b7df5d2f460b91acc7e52c9fdb19793bc0833751d09f3f664a4167095586a564420a7810125b832e38ae7bb3a0d14403ef6157c20d3d67e6e13a44115b19ff1fb8b64ffa018133b6d532d9da69b9bffbcd74189071a57101e7239401ea50ad1ea04aab961c +MD = c46cb2dfeb8b961e6e84d72e05111e04d62e3f93a055164b135b9072 + +Len = 960 +Msg = b88ff728c8f829841a14e56194bbf278d69f88317a81b4749aa5fdbc9383486e09bff96a2c5b5bdf392c4263438aef43334c33170ef4d89a76263cb9745f3fea74e35fbf91f722bb1351b56436cdd2992e61e6266753749611a9b449dce281c600e37251813446c1b16c858cf6ea6424cdc6e9860f07510f +MD = 8891cdfe486a582e8340bd8b893996d7a4e547e3bf50551902e722f2 + +Len = 968 +Msg = 520f27a4d096d4193d2bc0983cf83bbb5084845b41844800c1f5669b4f67f5785c9c886eac51b059005cc3caf2f7dcfc205c230a8c924f604386696f3d5dd2a68509879d991aa49314d7271a8a8ef711b42825d3cd0071ae3bf6109772bfac1b167fad995f99b7afc2c573f2ce6493e25411101dca79b6d2f1 +MD = 216ea50997596f71edc94ed96e2b686628640f94a3c64adef05c2b63 + +Len = 976 +Msg = 75c23e556178f00440533bcd25257934d0c6f5e68a64f1aa511bee9435c5277b02145fae1fdedce3b6b7b47015c547be55d00dfa3999920d586dbecf7ff95a775160d057308b32c661c17e5d6a772166bf69b9919ee91fe93877a50711939c85a9cf1ab65c28fa94879623faece20e1458b8821383fda2253762 +MD = d1631028a8e0ec4adc689cabba8bf681d11e2e2a5059f293f7ef5be3 + +Len = 984 +Msg = d23373b9405024d0c4b17aa503f7e2ff7d308083124ed2cbc4d990b9bee0d70b9635872fcfdaea58a2b696d1fd8c9492cd2ec11179ee755aae5663626219c0981348a8be50c9bdf77b061121cde246649af1f30bd7e84a93d952f8025f854d7bd3d59d0ecd07e6d4d909b23c7ae03fa06fe1de1c3424999fcc3618 +MD = 726f6584ff9ea998ff326c9f73291ace8726d8697e7aa94f1ed42f7e + +Len = 992 +Msg = 6f057f91480fecee8a7e3879dbf8c52040f96f5929c6b8b6aea223b91843ddeba387a2288264df3d241d14b5b6bc7defe9bcf174f5060a88de1f86fff59fed52a3e574f2620922dc0c12316e5869b779a18e8697ea0a50bf20a50f169ed8a308f785bd98efe6fdf4cac4574dcae9bbe5f3d7f56a11bad282fc9c84a7 +MD = 6b40e5c86db3d9c384c22a46cbef5f8e8c427bb6bf43268edd918aeb + +Len = 1000 +Msg = 6f77874dcad9479f5bcac3763662cc30cb99823c5ff469dcbd64c028286b0e579580fd3a17b56b099b97bf62d555798f7a250e08b0e4f238c3fcf684198bd48a68c208a6268be2bb416eda3011b523388bce8357b7f26122640420461abcabcb5004519adfa2d43db718bce7d0c8f1b4645c89315c65df1f0842e57412 +MD = 0228626c63c20465d5139d1af0b9ce17e334ebe10a5eee2cafe96cb1 + +Len = 1008 +Msg = ea841bd41b22e4c98b223332918eb791f51d1978540785f9c617675dbd02721831f7e7fdfa7714af7d671b588a64f49d8556b5d1c448116839771faf51a85dbb1bbff59fad8e3fe3c4eb8631aa050f505df85757ed9e9d1a26a8a0e96feeaa7af204cd23fd0e6d4ca8d5ff25b91a0f94c42a887297b230f6d5d57271e07c +MD = ff33c64231dedfc247e11e35aaf82d283a9ad62034102ee2bb5d4609 + +Len = 1016 +Msg = 7216a825029da1c9a9328d499b3ff98f6e18b8af368e2b19efc1c0121b35b965ab282f55232356d7fad002fe3f0b6ab7833b2cb6f2e392b0c37414cbd3661e538c8613ae0c9291928303f775dd2a2445a27e825a1a3544a9b411eb3aa87d0fdcdcd85c170511db620e747296bdc3afa39489c181f5abc76a8a404e47e4a214 +MD = 9440d3710b43e79899e116987366b2dd36b44b2f39e377fa2d4fe143 + +Len = 1024 +Msg = 44a8508a3c3976d563e933705be4dbeebc726304b511203df7c7d1efceb6e06e91f1e57f3d8e6c105dfdf8262d984816fe7ad8f8dc95ab596fff48301f8d03137ba37dabdc4a6e664583a26b8edc42d3c2405516c51386c33a7f2875a3087702ca6721f56195053fe5263a29c8d8538dce6ce146b8b43ae520ee79a5a450c6a2 +MD = a2743d341023ff5f775d90185d3139a7756b0a65c19ee876ebeb92ae + +Len = 1032 +Msg = a8ef4107f41ebbc5799a716b6b50e87c19e976042afca7702682e0a2398b42453430d15ed5c9d62448608212ed65d33a5ca2bcdca7728037df2e5f9fd9e974d0315dde8290241e3e2b2cc06f8c653ebc95bc2195c24d690caed42fe7d96589f3a85eae9bad995ab829e674abcfb8efaacb1eee5703f52b979d5d99a1c1694855a0 +MD = b411a28ff46513d0c3d63cf78a9b6353466cba3b926a8d895ee14fdd + +Len = 1040 +Msg = f649d801b4040b7b5152f58a01e7852f565efc77b5dafe4607eee953b0ba6774c5573f1c79767121d94381c3ba9013ebef2fb8b0bf9f081f96ecf13cfad04e44c11ebb358160a89049bfad5e8e241d71689ddeecff0278063fd86b0ad475c6a25265f556b30ddb50078e216267edcd4a2b7016345d4b76806d7b02c625f3f717e0f6 +MD = b94debadc833d5706cd4736bb1dc75039827832ae408859e2e6a6941 + +Len = 1048 +Msg = eb71b45a494e76462edf41a9fdcbb3f46fb863b9e259d0c8f4a79898516eebe8c90c3ea5a675440f3c7b1a18c14dc20c5f3dd27788c66d448acd73226327f52cd65cecc8beaa2acfa34d90ef8bfe824e12ba9870bdc4965b8ced9ff9ce13a5bd39e824893af410d08ade0cf802e7dc02b0b71d6c2a5c3356229084e53b3ae4e51b384f +MD = fbbec05ee1fb5f5cd1106ed7384850059cdcda474ba7cec0407a272b + +Len = 1056 +Msg = 4eca0c51d30829b9a1d2712da1fac31f52942d77c9f20c2bf6d3751028d7d4f0d336d3dc92b27ec368caa4444b3180c1e37e98b58f25e647a9a6361f0b04cf78d17955766168eebaa993a435a88e0b39307423d6ead87f639afea75ba44bbc6bd0fb5ac84a12c2c6ed9539a7c0f9abb0c1dc9483e2f321a85244926dfd95e2f05624aa7a +MD = fe313eb74f955c0cbb1c446dd4ff853f32b3232d93faba7db6d1fab8 + +Len = 1064 +Msg = 97784d14db62a7f98f5ac3df742e013489ec0b8777b05ef82bba06edc5c3a807b191c65513ca3fc7690615e56c2773c036edef29aac50c2211e20392018fc33d83c436f274f7c6062c3420025e7037993f1b8cddebf4aeb20421fc829c7fb23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a7fd06f1218e5d1 +MD = 5504f39131773550b6f459f33a5b57a2ce60ce8bb78c574fef83dcf7 + +Len = 1072 +Msg = 1ee9047351e2a13e4a2d5a826e304fef82241fbab5100835e1f850a20e51e34938b93dc852e58aab8adb0c3ccf61be9c90b53713c77ed0a5370309e6f19b290f1d642550f738c36818ddff74f77cae04af55617403b08c7a9f17e8fba0c21523575384b44ac4949e7c9dfbd1ef6a684f666c67856f8f84dba19cb38a23b0efad6eed229c536f +MD = b8f253512dabf9d89d2080830f23da5893b0f87edc0bd624ea767f14 + +Len = 1080 +Msg = 1f363d2f7aa89e2b6c5e172f530d1a35531d0083a5acfcd232d64db06134b8232da2368f7a46ead9a9ce55cd6af8cdbdd1582b6bad56c52a15769c3f43dcd68da60f6e7232fd2aecfb3fcd00029f8e5c4ed7ca3b3f9cf68920dbd747fb43f532b1034d9f49d546aa893be68fc3084658f22343b9068877387b8f68903071fe5877083be068d626 +MD = e59a19686df36bf5fe798a9565722b8e0bdd9f8eedbbb4a34a9ca7ab + +Len = 1088 +Msg = ecf5d9e29c1c04c11a9503cc223d0cee4866fa26df2b4f7c1a017939718f545746c0f137c9169692194105b2acf001e2f0e70f2332517a20c05899644af454cb8e00e5363593dc83f78d66bd0670ce8faa7244ff28d0de59e964dc68d87a30ec0ce03e49a73ce07dfea2ad54fa667bdfbe2f2222894d830dde4dc9aee3caefa4088683d7e8b9a966 +MD = a886eb94f15df208be122912d4edf02561482278a9f847ddc91c9bd2 + +Len = 1096 +Msg = 9f44357664b5e3a958780641cca52049f3b49f07484b5f762a5571f7c9541b4346f81fa416f04065a80003864754b3b54114a77a4938c8b21a9e4d3e5d59c9fccd4d68f699f975da099320ab655a7fb51328d2c6ff460b9b40858e99f88a35be7b6a97d6b4778af2c559e616ee608c32b018a753321e321be333bb6f618f666f9a7734ab3112859323 +MD = 8839f755eee84e15c586b52e29a41ddc640ac432cf31370680987a44 + +Len = 1104 +Msg = c1aa1266f223c148bfa3d0ab29f278334d8fcbfbf0f4ebef5c1b7a766b415155e1ea75d0fe2546115411faced7a04a27339b6bcd62e740697d06ce3cd2e0f00238c44c1d9faa85efebbbb3880313108124c5f3277c1f03ddf430a4bb4d88b67b6e3f7f96fc39e5aa2ca7e11fd5d1300aca144c5166269a1168a2e53c01c00b872c63f6833e5ace09bedf +MD = 439e3c7a0d655a30a9749afdefb7e048814335849df76d526c287727 + +Len = 1112 +Msg = 0a367d3789827ccd4bef5fe8eb78c20503241f07fb8c41d81e97fb53f3891962ca3c976395ac11d1f9ba7b20a52912e8e3ed92466ca5aa808166ade737ba8a0213e8fee8d67608ee9aed9e821edc9e575f1f07c3686169656ae09a0a0f70abd10cc31a8ef6e7496d56102fd8ff984e9a9f44e54495c966cf028f2a8423b46419de54541d9a08bd9654ac98 +MD = 40318036a595630e4135f10703be1d759a6c7e5146e0fc82abeba184 + +Len = 1120 +Msg = 8a05b00ae2d5f652f02f98a1b035003f8fa7ba1b17fc3778cdb1cae35ae1f768ea16ed05d25f515f75a23db468348911d4a749c51ce39615c07892318233a667c7f00e973fae98e7c8e9a8b7902480d87ac5bef8c4252661e6e8a2e4bd8a870fe83b1aa773ed5352b2abe193702c6dfb4aa8239e55ea6fc507a704e2540e23c917a01a1cb4420b07fb90ee2e +MD = 9a26f054e57aea14242d7801f3d61ddca1523b738fc26fecfa5d9a6a + +Len = 1128 +Msg = ba6442c6d2139201dfef32c1ffb0ce92dd64091bd507c250595395e993d9a5124b5199640c2fe51482774b6a27d1a1751fe0d4fe5fd02dba152ed3c344fd9249af06da85f96f0bef0a8fefb1b501885b97f70dd842d12fa19befa03080c3d6b8ae2a0d13e2fc8bfc3fe1277ef0670cac0e52bb93c4344f6db13d05188d53fbc6106538f50ffdeda2e915fab921 +MD = 58470da58476bcb89450c521fc396c6dc51b9fb6465c979aba5f8eb4 + +Len = 1136 +Msg = 96fdb76f83bf12b3f4f322bf613fc38b2c8e0678856230418b6b062fb358488d6eed7c5c0656ec48c9bbf2da6a1473eea43faa68204f27239928172a3e49c52b58e861282c4401702337e5ce280aff00528eb26ac368db0cd0ad0eb262af226a9b16ef3bbd325614488f820363ca6ea77da4a7e8345554e57623732ee6326534819eadfe81c7f51d81ec51e1e3fc +MD = be92d4a6946de0e93d5bbe420651a8befb97cbdb5d63b22aaecf453d + +Len = 1144 +Msg = 0eef947f1e4f01cdb5481ca6eaa25f2caca4c401612888fecef52e283748c8dfc7b47259322c1f4f985f98f6ad44c13117f51e0517c0974d6c7b78af7419bcce957b8bc1db8801c5e280312ef78d6aa47a9cb98b866aaec3d5e26392dda6bbde3fece8a0628b30955b55f03711a8e1eb9e409a7cf84f56c8d0d0f8b9ba184c778fae90dc0f5c3329cb86dcf743bbae +MD = 98ec52c21cb988b1434b1653dd4ac806d118de6af1bb471c16577c34 + +Len = 1152 +Msg = e65de91fdcb7606f14dbcfc94c9c94a57240a6b2c31ed410346c4dc011526559e44296fc988cc589de2dc713d0e82492d4991bd8c4c5e6c74c753fc09345225e1db8d565f0ce26f5f5d9f404a28cf00bd655a5fe04edb682942d675b86235f235965ad422ba5081a21865b8209ae81763e1c4c0cccbccdaad539cf773413a50f5ff1267b9238f5602adc06764f775d3c +MD = 26ec9df54d9afe11710772bfbeccc83d9d0439d3530777c81b8ae6a3 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp new file mode 100755 index 000000000000..4ed57e7d4c7c --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp @@ -0,0 +1,408 @@ +# CAVS 19.0 +# "SHA3-256 LongMsg" information for "SHA3AllBytes1-28-16" +# SHA3-256 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:44 2016 + +[L = 256] + +Len = 2184 +Msg = b1caa396771a09a1db9bc20543e988e359d47c2a616417bbca1b62cb02796a888fc6eeff5c0b5c3d5062fcb4256f6ae1782f492c1cf03610b4a1fb7b814c057878e1190b9835425c7a4a0e182ad1f91535ed2a35033a5d8c670e21c575ff43c194a58a82d4a1a44881dd61f9f8161fc6b998860cbe4975780be93b6f87980bad0a99aa2cb7556b478ca35d1f3746c33e2bb7c47af426641cc7bbb3425e2144820345e1d0ea5b7da2c3236a52906acdc3b4d34e474dd714c0c40bf006a3a1d889a632983814bbc4a14fe5f159aa89249e7c738b3b73666bac2a615a83fd21ae0a1ce7352ade7b278b587158fd2fabb217aa1fe31d0bda53272045598015a8ae4d8cec226fefa58daa05500906c4d85e7567 +MD = cb5648a1d61c6c5bdacd96f81c9591debc3950dcf658145b8d996570ba881a05 + +Len = 3280 +Msg = 712b03d9ebe78d3a032a612939c518a6166ca9a161183a7596aa35b294d19d1f962da3ff64b57494cb5656e24adcf3b50e16f4e52135d2d9de76e94aa801cf49db10e384035329c54c9455bb3a9725fd9a44f44cb9078d18d3783d46ce372c31281aecef2f8b53d5702b863d71bc5786a33dd15d9256103b5ff7572f703d5cde6695e6c84f239acd1d6512ef581330590f4ab2a114ea064a693d5f8df5d908587bc7f998cde4a8b43d8821595566597dc8b3bf9ea78b154bd8907ee6c5d4d8a851f94be510962292b7ddda04d17b79fab4c022deb400e5489639dbc448f573d5cf72073a8001b36f73ac6677351b39d9bdb900e9a1121f488a7fa0aee60682e7dc7c531c85ec0154593ded3ae70e4121cae58445d8896b549cacf22d07cdace7625d57158721b44851d796d6511c38dac28dd37cbf2d7073b407fbc813149adc485e3dacee66755443c389d2d90dc70d8ff91816c0c5d7adbad7e30772a1f3ce76c72a6a2284ec7f174aefb6e9a895c118717999421b470a9665d2728c3c60c6d3e048d58b43c0d1b5b2f00be8b64bfe453d1e8fadf5699331f9 +MD = 095dcd0bc55206d2e1e715fb7173fc16a81979f278495dfc69a6d8f3174eba5a + +Len = 4376 +Msg = 2a459282195123ebc6cf5782ab611a11b9487706f7795e236df3a476404f4b8c1e9904e2dc5ef29c5e06b179b8649707928c3913d1e53164747f1fa9bba6eeaf8fb759d71e32adc8c611d061345882f1cdeee3ab4cab3554adb2e43f4b01c37b4546994b25f4dcd6c497bc206865643930157cb5b2f4f25be235fa223688535907efcc253bcd083021407ea09cb1c34684aa0c1849e7efe2d9af6938c46525af9e5afb4da6e5b83da4b61dc718672a8090549cbe5aadb44f5bc93a6b3fbdc2e6d32e2eaaae637465179ea17f23ad1e4f1ebc328e2c6dc90c302b74a1edbbb0676c136b269d70c41040a313af06ab291bf489d9700950b77f207c1fc41884799931b3bca8b93331a6e96b7a3f0a8bd24cdb64964c377e0512f36444bb0643a4e3ecb328194cd5428fd89ede167472a14a9bf5730aff1e3b2c708de96eff1ebaaf63beb75f9c7d8034d6e5471e8f8a1f7efce37793a958e134619c19c54d3d42645f7a7263f25471fbaae8be3ea2fbd34ec6d7aacd7d5680948c3cd9a837c9c469a88f600d95829f4d1e4e4a5ef4ed4623c07815a1c33d9fb3b91333ff04eac92806a68a46cf2e9293f8bff466ce87fe66b46fbff7c238c7f9b2c92eb2fdc7d8084167f6f4e680d03301e5c33f78f1857d6863b1b8c36c7fce3e07d2a96a8979712079ae0023a1e3970165bfcf3a5463d2a4fdf1ca0e044f9a247528cd935734cb6d85ba53ceb95325c0eaf0ff5cd81ecb32e58917eb26bfc52dba3704bf5a927fee3220 +MD = cb1c691c87244c0caf733aacd427f83412cd48820b358c1b15dd9fadee54e5af + +Len = 5472 +Msg = 32659902674c94473a283be00835eb86339d394a189a87da41dad500db27da6b6a4753b2bb219c961a227d88c6df466ba2fc1e9a2d4c982db4398778c76714d5e9940da48bc3808f3c9989131a07683b8c29d6af336e9aee1dfa57d83c48a86f17146edec07869bb06550689ebf4788159ed0a921048b4a6e3e3ec272413bec15d8e1f6a40897fa0e11d9df223ef9fc270106249ae220fdc6ebdef6d6611805421ccc850f53ee9c836baf657a94005883b5a85def344d218264f07b2ea8714afcc941096c6ded0bb6bf5b8bf652fd15a21931c58c9f526e27363ddff98c0a25bc7af9f469ab35bffea948b333f042cc18a82cec0177f33c3bdbf185b580353de79e51e675b03b31e195f19ba1f063d44def0441dc52820426c2c61cf12974ec249fd3502f017ffa06220075ced7e2d6b86a52677ba3916e8e8726062aec5bc8ea1c18b1e4137680b2c9d002191b423bee8691bd7e0f93c3b9959bc1c14d5c5cbe8f7c9c336aa16e9de9faa12f3f048c66d04cb441eb2bbc5e8a91e052c0f9000856896f9b7ba30c1e2eead36fc7ac30a7d3ddfc65caaba0e3b292d26dfba46b5e2dc9bc9acadde1c9f52b2969299bd1281ddff65822b629cfba2928613200e73661b803afdcc4a817d9361389e975e67dfadd22a797bdaf991ddf42db18711c079ecec55925f9978e478612609bacd900172011c27e24bad639ffc24a23877278318872153aef6893ccb5b68b94b33154df7334375aadd3edbb35272cc7b672dec68faa62900873ded52f6049891b77f2d0311a84b19b73660e09d1f1998095c1da1edecfa9f741b5fd6db048dd68255085d43529279021d59ed853470d6863b7c8e07fcb0d1e6acfb1eb16f7f60bb1f46ce70493010e57930a3b4b8b87e065272f6f1dd31df057627f4214e58798b664e1e40960f2789d44ccacfb3dbd8b02a68a053976711f8034c1ed3a8 +MD = 5ac9275e02543410359a3f364b2ae3b85763321fd6d374d13fe54314e5561b01 + +Len = 6568 +Msg = a65da8277a3b3738432bca9822d43b3d810cdad3b0ed2468d02bd269f1a416cd77392190c2dde8630eeb28a297bda786017abe9cf82f14751422ac9fff6322d5d9a33173db49792d3bc37fff501af667f7ca3dd335d028551e04039ef5a9d42a9443e1b80ea872fd945ad8999514ae4a29a35f60b0f7e971b67ae04d1ba1b53470c03847a3225c3ddf593a57aed3599661ae2d2bb1cddd2fa62c4a94b8704c5c35c33e08e2debe54e567ae21e27e7eb36593ae1c807a8ef8b5c1495b15412108aaf3fce4130520aa6e2d3bdf7b3ea609fdf9ea1c64258435aae2e58a7b3abda198f979c17dbe0aa74253e979bf3a5800f388ea11a7f7454c4e36270a3083a790c77cbe89693205b32880c0d8f79b1c000ee9b5e58f175ba7696616c17c45673cff25d1221f899836e95cc9e26a887a7115c4537e65ad4eacc319ba98a9a8860c089cbc76e7ea4c984d900b80622afbbbd1c0cdc670e3a4c523f81c77fed38b6aa988876b097da8411cc48e9b25a826460a862aa3fadfe75952aa4347c2effebdac9138ebcc6c34991e9f5b19fc2b847a87be72ff49c99ecf19d837ee3e23686cd760d9dd7adc78091bca79e42fdb9bc0120faec1a6ca52913e2a0156ba9850e1f39d712859f7fdf7daedf0e206dff67e7121e5d1590a8a068947a8657d753e83c7f009b6b2e54acc24afc9fdc9601a1d6d9d1f17aab0ce96c4d83405d1e3baba1dffa86ecccee7f1c1b80b1bbf859106ce2b647ae1e4a6a9b584ae1dfc0a4deebb755638f1d95dcc79b1be263177e2a05c72bde545d09ba726f41d9547117e876af81bfc672e33c71442eb05675d9552df1b313d1f9934f9ddd08955fa21d6edf23000a277f6f149591299a0a96032861ecdc96bb76afa05a2bffb445d61dc891bc70c13695920b911cad0df3fa842a3e2318c57556974343f69794cb8fa18c1ad624835857e4781041198aa705c4d11f3ef82e941be2aee7a770e54521312fe6facbaf1138eee08fa90fae986a5d93719aeb30ac292a49c1d91bf4574d553a92a4a6c305ab09db6bbeffd84c7aa707f1c1628a0220d6ba4ee5e960566686228a6e766d8a30dddf30ed5aa637c949950c3d0e894a7560670b6879a7d70f3c7e5ab29aed236cc3527bdea076fec8add12d784fbcf9a +MD = 68f62c418a6b97026cc70f6abf8419b671ee373709fa13074e37bd39f0a50fcb + +Len = 7664 +Msg = 460f8c7aac921fa9a55800b1d04cf981717c78217cd43f98f02c5c0e66865c2eea90bcce0971a0d22bc1c74d24d9bfea054e558b38b8502fccb85f190d394f2f58f581a02d3b9cc986f07f5a67d57ab4b707bd964ecc10f94f8cc538b81eeb743746c537407b7b575ced0e1ec4c691a72eb0978be798e8be22b278b390be99c730896fdc69b6a44456be5ee261366e8b1351cbb22aa53e45ec325ed2bca0bfeeebc867d7d07681581b6d56ed66ac78280df04053407a7b57561261dd644cc7b20f0a95709e42795b5402dd89fcb11746c597e0b650a008bc085c681bb24b17db4458e1effba3f414a883ddfc4bccb3ace24d9223839d4b3ca9185ad5cc24193134b9339b0e205a4cc0fa3d8f7a85b4230d1b3ee101fbae9ee14c2153da5f337c853573bd004114cb436ee58ab1648373ee07cc39f14198ac5a02a4dd0585cf83dfd4899df88e8859dae8bc351af286642c1c25737bf8712cb941cbbb741d540feb9f5d831f901fbe2d6facd7dab626bd705f2fd7c9a7a0e7a9127e3451af2ae8509dd7b79dce41c1e30b9dba1c38cb4861dad3ac00d68fa5d07ba591c1c3b9d6b7d6e08099d0572ca4c475240601decba894fa3c4b0ea52ed687281beee268a1c8535e283b1fc7c51aa31d5ec098c50fec958acdd0d54a49643bef170093a1102a1b3bf5ad42fb55ebaf7db07385eadcd6e66da8b7b6e6c022a1e3d01f5fccec86365d3014c159a3bff17d614751b3fa0e8e89152936e159b7c0ea8d71cd4ffd83adae209b254b793f6f06bb63838a303b95c85b4edfa4ddcca0ed952165930bca87140f67f5389d1233fe04f0a3d647050410c44d389513084ad53155af00de02cc7943a3b988d8e1454f85153aff0816e24b964ec91dc514c588a93634ff3dd485c40575faa2f254abdf86fbcf6d381337601a7b1ba5b99719f045eb7bf6f2e8b9dd9d053ef0b3126f984fc9ea87a2a70b3798fab593b83a4ff44d9c0c4ec3e570ac537c10d9e3c4996027a813b70d7867b858f31f508aa56e7b087370707974b2186f02f5c549112f2158c0d365402e52cba18fe245f77f7e6fbf952ec2dc3c880b38be771caea23bc22838b1f70472d558bdf585d9c77088b7ba2dceaeb3e6f96df7d91d47da1ec42be03936d621ecf747f24f9073c122923b4161d99bc8190e24f57b6fac952ed344c7eae86a5f43c08089c28c7daf3aa7e39c59d6f1e17ece1977caf6b4a77a6ff52774521b861f38ebc978005e5763cc97123e4d17c7bc4134c8f139c7d7a9a02646fef9525d2a6871fc99747e81430b3fec38c677427c6f5e2f16c14eee646ebf6eb16775ad0957f8684c7045f7826bc3736eca +MD = 7d495ddf961cbff060f80b509f2b9e20bed95319eef61c7adb5edeec18e64713 + +Len = 8760 +Msg = c8a2a26587d0126abe9ba8031f37d8a7d18219c41fe639bc7281f32d7c83c376b7d8f9770e080d98d95b320c0f402d57b7ef680da04e42dd5211aacf4426ecca5050ca596312cfae79cee0e8c92e14913cc3c66b24ece86c2bfa99078991faad7b513e94f0b601b7853ddb1eb3c9345f47445a651389d070e482ea5db48d962820257daf1cbe4bb8e5f04a3637d836c8c1bc4d83d6eda5f165f2c2592be268412712ae324ef054bb812f56b8bc25c1d59071c64dd3e00df896924c84575817027861faa5f016c5c74142272daa767e8c9dacee4c732ab08b5fa9ad65a0b74c73fb5a889169f645e50d70e41d689415f7d0b4ec071e9238b5a88110856fc6ae9b9944817e21597d1ccd03b60e60472d1e11d3e9063de24a7b59609b6a2a4ee68238690cf2800614746941c48af9566e07494f0dd236e091e75a8f769e3b179b30c10f5277eec7b3f5c97337189b8b82bc5e717ff27355b2009356caa908e976ae1d7f7a94d36202a8d5e03641aeac0e453a8168ee5a0858ceecfcbf11fb8c1f033201add297a0a89476d2ea8b9a82bda8c3c7ef4f55c3295a4ecb7c607ac73d37eadc13b7a2494ec1928f7a80c8d534efe38a3d9ccb4ccdab9f092a1def6478532c5ad3cd5c259b3812600fa89e6d1e228114795d246cedc9c9fff0d1c1297a5ddfc1169c2efb3800df8dd18a8511214785abcc1bc7eb31bdb2f5f70358dfe860ed5a03ab7e95cc21df5ee7aee68be568d6985e5c1e91408e4432663b1c4e6d613d6dc382b5b900a4fc1b7a9c27a1138c5e2356ab9026c34465006602753daf6ab7427da93c307c901d0bb1ddb21c53bc0493dd8d857161e8ffa51fdecb75568243205aa979c2e7ed2a77b5f8edc34cffb0321a8c653bc381f96ab85a86bf0bb2c9518208d636eac40aa7ad754260a75d4a46362f994c90173b975afb0ee17601311b1c51ba562c1ca7e3c2dd18b90bdebb1858fe876c71b3ad742c4bcba33e7763c750098de856fde8731cb6d698218be9f0a98298630e5b374957d126cf0b1c489c48bab6b50f6fb59ee28be6c3916bbd16514234f80e1ac15d0215852b87f9c6e429eb9f85007bf6ae3de1af0202861fd177c7c4f51af533f956a051815815c6e51e25af20d02893e95442991f1de5f86a4397ae20d9f675657bf9f397267831e94cef4e4d287f759850350ce0898f2e29de3c5c41f4246fe998a8d1359a2bed36ded1e4d6b08682025843700fee8cab56703e342212870acdd53655255b35e414fa53d9810f47a37195f22d72f6e555392023a08adc282c585b2ae62e129efccdc9fe9617eecac12b2ecdabd247a1161a17750740f90ebed3520ceb17676f1fa87259815ff415c2794c5953f689c8d5407dbbd10d1241a986e265cea901af34ec1ded0323ca3290a317208ba865637af4797e65b9cfcad3b931bbf6ac896623e2f4408529172911f1b6a9bcae8279ec7e33452d0cd7b026b46a99cbe8a69cd4d21cdc6d3a84002fab527c4fd18a121526d49890ced3fb89beb384b524015a2e03c049241eb9 +MD = b8d4b29b086ef6d6f73802b9e7a4f2001e384c8258e7046e6779662fd958517e + +Len = 9856 +Msg = 3a86a182b54704a3af811e3e660abcfbaef2fb8f39bab09115c1068976ff694bb6f5a3839ae44590d73e4996d45af5ceb26b03218ab3fef6f5f4ef48d22839fb4371c270f9535357b22142c4ffb54e854b64cab41932fe888d41ca702e908c63eae244715bfbf69f481250f16f848dc881c6996e6f9d76f0e491de2c129f2a2ab22e72b04644f610a2fabc45aa2d7b3e5d77b87a135d2fd502ca74a207bddaf9a43e945245961a53c7bfcfe73a1ae090e6606ffe8ddbf1e0f0d6d4fa94526578c6faf282dd592b10bf4bce00a7b1846625690623667e83b9b59b465d42c6944e224ad36698f5f2ee938404b7775c2e66207bc41025adaf07590312f398812d24c0178126fdd334964a54b8353482a83be17cf2ee52d23b72e5f57fe31eebf8a1a64742eb9459bcb0eca231a1658ab88b7056d8e47554f0a46058d6565c6cbf6edec45fdde6f051e38255b82493de27ffd3efbe1b179b9642d2166073db6d4832707420237a00bad7125795e645e5bc3e1431ecbabf0ff5f74416626322545c966241cce6d8f2c035a78f100e030741f13b02a9eaf618d468bc40274db98bc342be12ad4d892c2ba546e571c556ac7cbf4e4c3fd3431efd40457cf65a297845dd8cce09811418c3cef941ff32c43c375157f6f49c2e893625e4b216b1f985aa0fd25f29a9011d4f59c78b037ed71f384e5de8116e3fc148c0a3cad07cb119b9829aac55eed9a299edb9abc5d017be485f690add70ff2efbb889ac6ce0da9b3bdbeb9dd47823116733d58a8d510b7f2e2c8244a2cbf53816b59e413207fb75f9c5ce1af06e67d182d3250ea3283bcbb45cb07ea6a6aa486361eb6f69199c0eb8e6490beff82e4ab274b1204e7f2f0ba097fba0332aa4c4a861771f5b3d45ce43e667581a40fee4bebe7fa9d87b70a5bb876c928f7e6d16ae604b3a4e9c7f1d616e2deab96b6207705b9a8f87468503cdd20a3c02cc8da43d046da68b5ed163d926a5a714a4df1b8ef007bca408f68b9e20de86d6398ad81df5e74d5aaac40874b5d6787211ff88e128cf1676e84ca7f51aee5951efee1915dcc11502a8df74fac4c8451dda49b631a8fb87470f0ebe9b67449bbd1640ceee6101e8cd82aa1033fa84f75b28450e461b93f65da5c43759b0e83660d50961702bb1ad015dad42e600117475237cf6e7279d4a02d1f67cf59de0108355d03963e3d84ce7647173dd7d77a6b3f275d7de74236d7bbb2df437d536136dbe1dbe8f307facc7bc7d0cde1abf745cbeb81af1ab2c46138cf007e901f22668377958bcbbadb7e9905973b27ff0c5baaece25e974c1bd116cc81dd1c81a30bae86a6fb12c6a5494068e122153128313eb3e628d76e9babc823c9eb9d3b81bacfa7a6b372abe6b1246a350f23e2e95b09c9037a75aac255ef7d4f267cad3ce869531b4165db2e5a9792094efea4ae3d9ea4d0efdc712e63df21882a353743190e016b2166e4da8a2c78e48defc7155d5fdfc4e596624e6a19c91b43719a22c1204b1cefe05989d455773d3881fa8d3eefc255f81dfe90bd41dc6f1e9c265a753298a6e98c999acd9525a9db5f9f9456a0f51a93dd9693e1d9c3fa283f7c58a9c752afcaa635abea8dfc80e2c326b939260069457fdad68c341852dcb5fcbbd351318defd7ae3b9f827478eb77306a5ae14cf8895f2bc6f0f361ffc8aa37e286629dc7e59b73a8712525e851c64d363065631edc1609f3d49a09575876a +MD = b71ec00c0fcc4f8663312711540df1cd236eb52f237409415b749ff9436dc331 + +Len = 10952 +Msg = c041e23b6d55998681802114abc73d2776967cab715572698d3d497ec66a790b0531d32f45b3c432f5b2d8039ea47de5c6060a6514f3ff8fb5f58e61fd1b5b80524c812a46dad56c035a6e95ecb465ea8176d99b836e36f65977b7dbb3932a706d3af415b6f2549b7120ecb0db1e7d9e6f8df23607eda006436bccd32ef96d431fa434d9de22ca2608ab593eb50b4d6a57f45c1ce698c3283a77d330b876ad6030324a5c0693be7790a4bd26c0a25eb403531f37689829c20546d6dc97327131688b3d88766db8f5d1b22050450c37e53951446dd7155a3e6d7edcbe1354411d8f58154475d74008937e8ba48b706066c296d1a87936dd023ac8eebe7605a58c6c40da774cf9df189db0050adcf7629e66cbd1cf9824397834cb13c4066c26e6c8ec950b44fc1c8db8ef976a7ec8c4f4ec9849ca7a07f906223053b80db24b946b034ee7a30880d0ace348acba0d0ed21ea443816706a216ce9eb682d1fe9dfc1d2e0bf3b1449247413520b8d8ebc99fc298c6dca949be0ffebe450b9b79a387a615d617b8d9da5b3e8d2776208c7cc2a11bdbc387f9d4597b380739b24ae59dcd5fb63bfeefe0746d9266cfda18afa583d6891e483e6d5c0db305f5609beba75bb5b447ccac2dfb94ede4a94db6eaaf3070d8d5353f107f7bd74528eb913e0b19bed6236a3b48567c46a9eec28fb6486f92d0d09625452d8f4dd1b89c566533cc2326b820c2b9efed43be8481cb9ad809e47af7b31795cb0fbdb18fbb12e8853f8bacec366a092daf8f2a55d2911fc7c70ddd33d33e86c2c4ceeb9390ec506b399f6fa8f35abf7789d0f547fd09cb7e6fb6016a3fc2a27a762989ae620d234c810777d5a1bb633744af2844495d2963c986ef8540ca715bed7692c77b9dec90e06acc5986b47dd4a8d3ca3300b2bedf9f26ae6d1c7e7acef05c0fc521c3309e1e70771eea6e96b67de5e3fb6833145bb73d46081b074539498307929da779e003c27f0a171035458b8c7c86c905b23dda74c040878d5a05be94821537724ebd5608ec0754c3e3e99a719bbb6d5320eed07323fca637429b18378936364c389de1e9c6fce8af270a713b4b829b43e7d761e17724c22e84611e1322dde45cbee86a0e16d01cfb8910d99391c39afd8e5f5567c59f219aa8c19ad158f287cb6807ba1fe46d38d091639a217766b3aa9ded73ac14570ba236225218305d68c0be6099c336ba8455c86b7c8c04542e729ceb84596c33ca6eb7ec1091b406cf64495ccfa2169f47b3b590477d4073537c14c05015d51ba527b3869ae4ebd603df906323658b04cb11e13bc29b34ac69f18dd49f8958f7e3f5b05ab8b8ddb34e581bde5eb49dd15698d2d2b68fe7e8baf88d8f395cfcafcdff38cf34b59386f6f77333483655ee316f12bfeb00610d8cba9e59e637ca2cab6ed24dd584143844e61fcca994ba44a4c029682997ab04285f479a6dc2c854c569073c62cd68af804aa70f4976d5b9f6b09d3738fcccb6d60e11ba97a4001062195d05a43798d5f24e9466f082ac367169f892dfd6cc0adeef82212c867a49cba65e0e636bab91e2176d3865634aa45b13c1e3e7cdb4e7872b2437f40f3de5493792c06611a9ca97d0baed71bfb4e9fdd58191198a8b371aea7f65b6e851ce22f4808377d09b6a5a9f04eddc3ff4ef9fd8bf043bb559e1df5319113cb8beea9e06b0c05c50885873acd19f6e8a109c894403a415f627cd1e8f7ca54c288c230795aaddde3a787c2a20ac6dee4913da0240d6d971f3fce31fc53087afe0c45fa3c8f744c53673bec6231abe2623029053f4be0b1557e00b291ebb212d876e88bcc81e5bd9eb820691dca5fbdcc1e7a6c58945a2cac8db2d86c2a7d98dc5908598bda78ce202ac3cd174d48ad9cac9039e27f30658eef6317cd87c199944343e7fce1b3ea7 +MD = ad635385a289163fbaf04b5850285bfe3759774aee7fd0211d770f63985e1b44 + +Len = 12048 +Msg = 01ec0bfc6cc56e4964808e2f1e516416717dad133061e30cb6b66b1dc213103b86b3b017fa7935457631c79e801941e3e3a0e1a3016d435e69a390eaac64f3166d944c8eb8df29fe95fdf27adc34631e4a1f3ff1d5af430f3d6f5908e40c0f83df1447274dfe30bbe76b758bd9abb40ed18331c7552dcc6959a1303e11134ec904bd0aab62de33c39703b99920851afd9d531eeb28f1c4b2e6c17c55db8296320316fbe19e881b5fcb4d266c58ca7f31d9176e26f70315330b58a516ec60d10404a78393aa03ced7acd225cb2a83caf3ab5888406a69a534f1ed1346e9b5e68831f90b872d57367361191c803eb7e38b3b9cd601282d5efdbf082db07d89bd06b093f986d08d3a7b12aa74513b6eb241b26ebf31da5726d59e315d1b4ee53ec6a9fdb6583bacc136e90e9607cab01e5d3853ab9727ede706b6f10b4e04d0510f45c0abc515bcb5ed0bcce86a92861126f4d502fcb8f988d62ecf9d124853de2bab633f9506c6fde8a36cd4413cf773e50f7b2d283482f18e2f547c2fc275cd60056ed98fb8d0816fd777c1566f0c2ae3b1cd92e344910a75e006106d193e06f7786ae37dd0e529cacf74176fd4cc1f6500549af5902dbbd56a70c194f5b671372edec425f90add40b4eb3d55123f3ab62797ad25bf5eecf4f417f86b00e6f76a4f52e44fd949851aae649dd0d26d641d4c1f343c7a2c851ca7851bbbdfd57ed6024eabc518a909a1e4689ea7bc5f83e19872950368a06e93ab41944c3d8befc5705b814e5f33511a7f7ea8a4771c804b321a3a3f32c18fa127d3c9e6c011337dc100ceb156ed45d0a62f238dacac44a3429f89bb7f98d09043c42451106e30471cc6fab7a4e1ce0a8202772b0218b631f287ec3ef82b1aa6299a0b54d6aad06aa9346d28f117d20f3b7f0d462267bd3c685cca8f4584532dfee0e8b9bacefa3092d28fcce7953a28f82e4ba6b3a1430ecca58b770dab656bed1b224663e196dffc28c96a2c65ef9de1989a125ecf2fed47eb96bef8a636a91bd521c47aeb8bc011bf81cc688fd8b620446353cbf7692201b5552cb07fb02eb3954dfaa6f5c31bf91e20b84419dcbbdaba0c31a124d8f4218b2f88da3eba44dbe40eb290052538dccd0ff7670de5f33a83ff74895b66adcff58c9c21e93b31bb49ccb2e026995ee155b5517b72daa76526a2e42aa6fa94357cd42e2a8a1d3e7d4cefc33d5d07d6303d798d2551a21f862b5f492d0c7cf078a77007a02847b34675dfad4fb457e9f20dc5750fb127a3c31b9d6a3996d50ac3ffc6ef29cca1d8414d0438bf3271dc4f4e00cfe19a507b447dc310f74aeb2a3c0b3fae6d7d13f4935bc72c35df3efa6e879164421505ee32d93b030e32a7970b53430b1643855167278e5058c4a48a7840e2fcdb282e45b5b86c0b2756f19b595f3bcfc926df35e33ac26dd1e88cd394015a5f54deb4c9f4a0bef0eabcb27c4eb88dc2302f09e92f1bcc4b4754df1eeb536154543c7dbf181c9979fe6ed08311e5a3acf365ebb5745212b2630e83b3a5bd5fa4834c727248b165700c7435f8cb6ee455bad16ee0da68fe6acd2062dae9c8bc178b157b29ade98a9bbbd4c723a3dcb7852c7978b488e4f73a2c9163dbdffae175119f812b6f4b70c2b498704bc2b58603f167f277a74e64ec296a6dfdb0de3486c0f36ac1b55f80af9fc817ba4f84b898b2a3c5725e2faf466bb26a8a84f91e123d182033a7ae2029236aa4b673ceb50c1733d7edd60e3f119b7141c882d508e0331689c96fbfb9f7e888fe88561de427c721123036737c1460b0da00d3f958b948f68fcb321ab4e297290f781ff8afb06b755d82a7e6ce1963761d799eed786524bf19801b4877b2d856becdf7e87d71aa359f2d51f09de64bcbf27d0c3aceac70790e314fd06c2f5216f3d10574b7302d6bc2775b185145c1b741524567c456d42c5826f93afa20ae7196ca7224c3b69b1eada9eee752fb6d43f24170fcc02af7e1dea73f0f884f936f900165800acb9d57480a31e409d3f676ed92b6812cf182a088fc49d68082aa19c7be0711f436db1d7be44d97dc9405591a8d3e7f6f731c6f3e6c401749829b7624497f5eeac1fc782e7d6988340541f2617a317e +MD = 2a6283b1c02c6aaf74c4155091ff54a904bb700077f96a9c4bd84e8e51b54d01 + +Len = 13144 +Msg = 9271fd111dcf260c04cf4b748f269ac80f7485c41f7724352a7ed40b2e2125b0bf30f3984ee9d21aab6eb07ec976b557c2426e131ad32bd0485aa57172f0e4f1798760f8352067ac023fbeca7b9c8bf5851c724e90ffff44195b44ae73c9c317c85e8e585bddac6d0f2abf812d02e44b62eadb9d0765683aa56af8e9b91588c7b49dc3e146866a02dc18f9ca680f88006094ef29096c2d5af5700b4aca3dfcab462c48bb8085691671efb5ceb22b3ebd8702f71a1d7c184b1053c3fa30a7e76b85f3650d9140714fd4993bb496becf2ae01d3a98ccfdefb6fefd692173bd11af7adb61ffff214a550ffcd3a5993004ee72cb02ca9c577b42c85444e619e6411e2bca86bb548ebbd12a02c5c945eaa3b246f595d817f3849875429e72ac894160a2a91a6617f18e6b2b9258472152741d62843cebc537d25f0daebdedb410d71ee761662bd1b189ca1c93d648b5d141d8d05e3f2b2d8c2c40997fea7eb7e2cc0000d8b2300936759704ef85f38ad0d08a986de6bfd75b5be3209f6d4d3f67e7adf7f8469d47e81979ec8dae7127b5eadcc09779cf4b0a28efaaf58e83d307f2ced4a8699b142f3f19db5598e914e9577652c63f851203580d40699548fc2ab30a9dcf6452f673ad1ed92f8d84dad5dfff55e18107b3acb6e4e8e3c9c34038f40a5c577fe9771c2c31ef03d36a00e04a20d2d0877db66f091dac4b741d2a997b75182702881f9284fa23b9b3c20e715f80d07b9910a4b3185f9489dc7d3fb510f4da273559753d7d207f3975b48df2e7c857caffe703dfac53a786490c09f57d2fa93f60810186df4c0b6b616a04caab9f70a5002c5e5d8da0ed2805f20fbf89cd8d57ca2b4bd37125ce38bf09fb6170ae21f4e6043a9483ef6e585756d97cfb778e57bc7ddc8dfc54d086d6bcfa1f019c749ff79921ec56e833ff8660f0959cd4b5277e9f3b1d4880193fefa98a6c2512718e7c139acdcd324303db3adb70348d09b058baf0e91d52b24952f832b0a3b81fa9bc9a2e9fb276a64e9e0922778b4992d892f6845b4372a28e47d27b53443586d9015463cacb5b65c617f84e1168b15988737a7eda8187f1f4165fecbdd032ae04916cc4b6e18a87558d2ce6a5946c65a9446f66cda139a76506c60d560f56a013b508d6ccbbaa14e24ad0729dd823bf214efcc59e6932cdc860306687c84a63efb551237223641554940a7a60fa7e6ddad64a21b4a2176b046dc480b6c5b5ff7ed96e3211df609195b4028756c22479ba278105771493870372abe24dcc407daa69878b12b845908cf2e220e7fabeeaab88c8f64f864c2bacba0c14b2a693e45aacc6b7db76bc1a2195cfce7b68f3c99440477ea4c1ea5ee78c109f4f1b553c76eb513dd6e16c383ce7f3187ad66c1d5c982724de8e16299c2fde0a8af22e8de56e50a56ac0fef1c52e76864c0ad1eeedd8907065b37892b3eca0ddcdf5c8e0917dec78fedd194ea4b380a059ccc9452e48a9eba2f8b7a4150b7ba17feac83c61604c3cfcfe6655c2be37ef0ae6fc29072f9b1cfb277b64a8d499dd079ad9aa3d5e9a7ccbec8c100596c6fac51e13a260d78d8cd9066edc558e2219cfcda1310dc1fbbdd36f348756855349f33eb6b82186a8c1a55f361305833edd3e4ac8d9b9cf99897c4e06c19ed10765fd0c8c7433851445c5f87b119ef913b2bcdbf7aa2ad19c672e53a9c6c3c309d549513edd7c1cf8a0a399e6df0939cc1fb146d6ad460e2ce05144c69eafa3822141d473fbe5927c58a50c1e842f8b8fad85540ce9f6d06f7b4dea045248b999d24c5fd4d75631caf73518cc08f73684e2a1cd4266235d90c08a0d0ce8784c776fd1b80978b83f0705ba8498744884d5496b791f2db3ffb5377175856b25a643803aa8b9e7f1055e089c1929cf0cbba7674c204c4590fb076968e918e0390d268eeef78c2aebcbf58a429f28212a2425c6ad8970b6a09cadddd8336d519bca4820556d2c4b8cd9f41216de3c728a0774edf47d3489cd29cf1b2a192bc53325d0bed7d23e51be7684297f9d0ecb14acbf648bc440c5fde997acc464fb45e965e6f0dced6d4568ebcd55e5a64633b05a2cb4d8263b721a252b1710dc84d8a5d4b43fcc875e2e7281f621b0bf8bb3465be364456bcd990b26b3e474486f864fb85f320f68bc14c37d271249b18552bef50dfc385a9f41b831589c5a716357cf5a12520d582d00452a8ab21643dd180071d2041bbc5972099141c6292009540d02f3252f1f59f8dfcf4488803f3b0df41759055559a334e68c98ea491b0984f2f82a35db84ea0779b3801cf06b463a832e +MD = 4e75bf3c580474575c96ec7faa03feb732379f95660b77149974133644f5d2a0 + +Len = 14240 +Msg = 075997f09ab1980a3179d4da78c2e914a1ff48f34e5d3c2ab157281ef1841052d0b45a228c3cd6b5028efd2d190d76205e1fdf4cec83c9868fe504f429af1e7c5423267c48a7b5bc005f30a1980147a3fae5c100b95c7cb23d43af9f21d87311d9cc826598993e077015f59ebc476383bb7a78787d915c97039ab188a2a618f7a8d7f64542ba787e9dd7d48c4c87d2aaea068c1b00c9711b2812901673c11418096d0a850fb36b0acece56d311689dfeceb0835009adc427f6d2d6b05ed26f5a43b6478bc72c1f914a2202dbd393cb69b1a1e78162e55ca4b3030ac0298131a7a0d934c032cc9dfc5afa600c59b064d2d9013f15d1184278a8ccb5ad9d7563e666fe5a8c173cec34467ef9cf6d6671208ff714741fee7c8d1d565edf82570dffde4f3f584024142056d8548ad55df83d1babed06141114c95ac88dbea0ce35d950f16d8a732a1ea7d22dfaa75a3e0410c546523277261116a64bcbb2be83e55e040f6c8c79f911b301a8718cc4b19a81d5f0cb6312d87c5b4b079e23a61d247541cfc2c41a37f52b2c6e43a3db5dc47892d0e1feabcc5c808f2391791e45fb065159f99c1d8dd2f69baaf75267eb89dd460f1b6c0badb96cbbc8291cefa370fa7ad6997a4ca2b1fe968216032f02f29837d40215fa219c09161df074e1de8e37056e28c86d1f992a651e271dfc4b0592ad481c613fd00c3eea4b6deabb9f5aa63a4830ed49ab93624fa7b208966eccb1f293f4b9a46411f37d7928e4478dde2f608d3851a8efa68e9d45402bc5124fde4ddc0f83ef82b31019d0aacb4b5121bbc064c95c5292da97981f58f051df9502054bf728e9d4fb7e04787a0890922b30a3f66a760e3d3763855e82be017fa603630a33115a02f02386982001def905784f6ba307a598c6dbaf2946fe9e978acbaf3e4ba50ab49ae8e9582520fc2eb6790deafc77e04a8ee75da92d16f0d249403112c74bc09102b573e110ccb4d8461d249bfe2e85fc9770d606be6fbfd5ec4c30ac306d46412f736e5b696ccc9fbe4adea730955c55ea5c63678271d34b7bd6f6340e72626d290820eeb96a0d2d25ea81361a122ffe8e954cf4ff84f4dafcc5c9d3e7c2ddbdf95ed2c0862d3f2783e4566f450ec49e8b01d9d7bf11e92a7903f2b045c57ed8a65ccbfc5b1d2a38e020a57b38f2e4deea8a52354a7e7be4f977b8f5afe30f6738e955c8bda295064586b6827b245766b217fe39263572b0850965c7ae845611b8efb64c36244a39b9fed0ab970ee5ddeb8f2608dd9c963524a14050c9101d7f2d5537b24d0b0f7a45703c1e131656ec9edc12cdf71dae1cde2790b888ef2a589f03201f8bbfad71f0c4430477a6713ad2e50aaefa1f840cbb839e277389454517e0b9bd76a8ecc5c2e22b854c25ff708f9256d3700adeaec49eb2c4134638ee9bd649b4982f931ec3b23cc819fbc835ddcb3d65e04585aa005e13b7ef8fcafa36cc1a2c79ba6c26fc1dc0f6668f9432c578088cd33a41a778ac0b298fcac212edab724c9fb33d827409fd36bc4b2b0e4e81006fd050d94d3271e0427c61e9ddca599a3c9480cfdd33603cb1a196557281ce6a375fef17463893db293dba0704d4bfda25e08beadd4208c58ea0d8d9066448910b087fc13792fc44075a3fe42e13c5792f093a552aa8ebe0f63e7a807102d5bc145468a0cb469263035c5647049054c18199f7da6d6defd51105e2125c605e327aca137ca85e3f7f46ca69f92d5252f84418293f4e9afeeb067c79576e88cc3c64f3e61d76e1e9e2f72cdfc35261a9679f0c374d7436ff6cfe2ba71650810522fa554a4aded87ad23f0b206b1bc63f56bbff8bcc8849d99e209bd519a953f32c667aa8cd874ad99846ed94b92f88fe0dbf788c8431dc76ca9553692622077da2cdea666c1b3fee7c335da37737afccd3d400a23d18f5bd3784dbcd0663a38acb5a2beef03fc0a1c52ee0b56bda4493f2221e35bee59f962f16bc6781133204f032c7a6209dd3dabd6100325ec14e3ab0d05aadd03fdfe9f8737da15edab9d2598046f8c6dd8381aaf244821994d5a956073c733bcebf9edbc2a6e2676242dc4e6a2e4ba8a7d57ed509340d61fae2c82bee4dedc73b469e202cc0916250d40a1718090690a1d3b986cf593b019b7b7f79ae14843b2e7ccf0fd85218184f7844fbb35e934476841b056b3a75bf20abb6866e19a0614e6a1af0eee4de510535724363b6598cccf08a99066021653177559c57e5aaff4417670a98fe4bd41a137c384f98c0324c20ef8bc851a9b975e9440191ff08deb78c9fa6fc29c76b371a4a1fa08c30fc9d1b3323d897738495086bfd43ef24c650cfa80c42ecbadc0453c4437d1a11b467e93ca95fbae98d38dcb2da953e657fb7ea6c8493d08cf028c5d3eb0fcbcb205493f4658440719e076e02deb07332d093e4d256175ca56f4c785d5e7e26c6090a20429f70b3757daac54153bc16f5828dc6c1c9f5186e2117754be5f1b46b3631980d9e4a9a5c +MD = 2e07737d271b9a0162eb2f4be1be54887118c462317eb6bd9f9baf1e24111848 + +Len = 15336 +Msg = 119a356f8c0790bbd5e9f3b4c5c4a70e97f462364c88cad04d5435645342b35484e94e12df61908fd95546f74859849b817ee92fbd242435c210b7b9bfbffb3f77f965faa1a9073e8feb5a380f673add8fde32208402fa680c8b3e41d187a15131f1028f9d86feaf3fd4b6e0e094d2ba0839c67267c9535173ec51645343ad74fcfaae389aa17cca3137e2588488531c36ba2b8e2f2238d8415c798a0b9a258f1e3cef605fa18977ad3d6707c3ecc5ea5f86ebdaa4b4b0e5bc023d1bc335138ae0de506cb52f2d9efa0ecc546468310cccc88ec08d28c3602e07257f41bb7e4d8a0956c564f3712761d199a931a39e69c5a69aa7b3257931dd92b91e4ed56fbf64e48bd334945cfa2aaf576df04614eb914899f7df54db4012cc8261b12bedcab69876feedbbf7009dcf8d076af89b797ad71217d75cf07514dc07ae34640055c74c9faf560f491f015ac3e167623cfbc67b8e7163e7c1b92debd06e9d28b049e0298f4c38395a40a0778162af2cfe5abe5b946c4d9a54f2a321660ab521068c4957cd3f5be0324cc04f50f209fdea7caaa0ac705c1fb30abfa550e844f509074afde1ee87adda29aa09b7f93e7d064ad2715ee5571ee6e7c9a01672124cc2a22b4354c3844759c1a6ce3fdf17555cac7df73334073ef3730939410fe6cf37463352ad241958b7fafbc66e0d592df48bf55ab2c33428e494c6995826892572d9ab52747b1085fcbef318cfe9cfacd4cd80c164fba584c1344ae7e321c4f77b44db6b322f2f7831f4d4ede7dc407b065c6754cf4424f9903adb4c6b675ded58700bc36da83fd95e84e76c404f7342921ef23d7d07772f5b8ec2f077601cae13448385b04e074f895574be61a831a87efd68a1f6aa67cf291847fa8f74cbe3b4a78ad780895183bc51c30ad2514255d4e013abc097bc8103c0b1933b0b303341836ae167c1e31dfe5f1b791cb06ef29cae398065343eecf06e4ae2048d1547c4bf69ccec5e86c45867c633c62f7d27dc51234b6debb5b9f80a5810716240c64443d0c098c80220d0520a5f5834369b9eb019325e23e88f237c24440bf27959caf7e7e4f1671fda710630255a2962f7e9b3625dc243a0177aacf6a758a68aa85dc3f56181a4a59a406c7fae5575c9e2c64248f520b5a5f904821661e2e43a5a058f445fd0e55b07476c4122d18033053b45112201e0bfdcc9e7cb9931155018ca431a0564930aca8defbca954b2680753a4060bec2cb668d2c15e77cba29589b5c7c07bc7177a8b1adb3a6968732f9213476fd96901514626fa17243af1d156cd037eea81d773f1f71a018d942b524b851794b300c7591ecd783ec8066ccb261bdf9b7a183dbda42b92593b614297dcb0fabcc23ae69797d0251b8ab57a4da2a544615216b01f4dbe2d8c9b5520c7ed9cd9312e9ec6d05a36e7f693d1821d727518169b03976394b9d1e1d7fa2daa25529d391eb5d0cf0f07a8160be2ee043d9345037c655c4f2023689f14d8d2072dd92c1dba056a5b5d4c4fc4196e25caab05b1701ec666ac9a04d90f7d7575a7ac3970252c18fd3bec0cc448e5ff8f3765d546a4a8ad1d41a9640c79375b80534b7b50989976f238654fefea981c9413130beae943a3e9d8f64ce9256d1259d1b2a6b3c02ca5af1a701db8f25a4e9c255dad8785172f323728c3585a45206ae988c283e30a2f9ea9b47f07a7521b0f36e9c504c14bd96027e8d24161e70f196576d8a74a5e9c26acda7cc452a90e550e625a49e50829db70de808c827c67d00c23ee073d4e72aeed891dd73b86acd6756e753e3975a80cdab1d521052caef6a5380f8b03023ba0326a6928aa127ffb33b51dcb05bbdd592d0ad9e8321e6ef2f95c401be6a37e634425689fe7750e2a0fe05ad89001502b309095ca517b2e2ed0388b9f2c59c45feb61222539d6e1ccd397344d23708aebacec10ada96a7711f173f7ff1e4b94fceec6a0a0ea5d814a4581b412063012ff6ac5527b8314d00326b68c2304a276a217fde9fa4034750a2e47e10f816870d12fc4641a27a1c16c35a953f32685f2b92cae0519848045765591c42ddc402dc7c6914d74dd38d2b5e7f35358cb1d91a9f681fde7fd6c7af5840663525ee1d04bf6d3156fed018c44043d95383d92dada3d1cd84af51d9bee814ec8675073e1c48632c5f59e257682542e1f7dc20b56b5c92a9e2cb2be30cb1512fb55fa1de99a3f5864ed3acc19d79e6ffb0da3b08ba0615157747d75c1f308fa0202a4086f34e9eafa3e071dfbacaca731d228aa0304cf390c0a9e6ad7ce22ade758965cfbfc4c9390d24e41a667447fc7b29821464ad98bc5d65dc7f9c42bd4b23e174015592ff92c905660a2722f9fc7973d3cdad848ef88bf02b1b03dea16699b71dc46b35bc4d96069a0753335ae38685d244918e30c5fb0d45283a1281c1659ea591573999d9c2acd2ca9141d55230d41011b70748b518e1cd2fa58ad8dc05fcbdf0bffaf2c7fd6cb2ac67bb13b8f6d31fad64ac113664223599dca411270955c95aec06518894dabc352d2b70984727437040d944da7b42e0ef560ac532de3e4a4891e8509c275b51ed780f8660b0354e12c21b3e11bcc88198980b5f7ff31ad342182d5a933373164dced3cfb2a081720d7eee676cb7378a3e19326a7ee67fd6c00521f9de37c66bcea814b6feb6a061b8cdcf7b4bd8f45d48602c5 +MD = c26d0b064e409df64819cd7c1a3b8076f19815b9823adac4e3ce0b4d3a29de18 + +Len = 16432 +Msg = 72c57c359e10684d0517e46653a02d18d29eff803eb009e4d5eb9e95add9ad1a4ac1f38a70296f3a369a16985ca3c957de2084cdc9bdd8994eb59b8815e0debad4ec1f001feac089820db8becdaf896aaf95721e8674e5d476b43bd2b873a7d135cd685f545b438210f9319e4dcd55986c85303c1ddf18dc746fe63a409df0a998ed376eb683e16c09e6e9018504152b3e7628ef350659fb716e058a5263a18823d2f2f6ee6a8091945a48ae1c5cb1694cf2c1fe76ef9177953afe8899cfa2b7fe0603bfa3180937dadfb66fbbdd119bbf8063338aa4a699075a3bfdbae8db7e5211d0917e9665a702fc9b0a0a901d08bea97654162d82a9f05622b060b634244779c33427eb7a29353a5f48b07cbefa72f3622ac5900bef77b71d6b314296f304c8426f451f32049b1f6af156a9dab702e8907d3cd72bb2c50493f4d593e731b285b70c803b74825b3524cda3205a8897106615260ac93c01c5ec14f5b11127783989d1824527e99e04f6a340e827b559f24db9292fcdd354838f9339a5fa1d7f6b2087f04835828b13463dd40927866f16ae33ed501ec0e6c4e63948768c5aeea3e4f6754985954bea7d61088c44430204ef491b74a64bde1358cecb2cad28ee6a3de5b752ff6a051104d88478653339457ac45ba44cbb65f54d1969d047cda746931d5e6a8b48e211416aefd5729f3d60b56b54e7f85aa2f42de3cb69419240c24e67139a11790a709edef2ac52cf35dd0a08af45926ebe9761f498ff83bfe263d6897ee97943a4b982fe3404ef0b4a45e06113c60340e0664f14799bf59cb4b3934b465fabefd87155905ee5309ba41e9e402973311831ea600b16437f71df39ee77130490c4d0227e5d1757fdc66af3ae6b9953053ed9aafca0160209858a7d4dd38fe10e0cb153672d08633ed6c54977aa0a6e67f9ff2f8c9d22dd7b21de08192960fd0e0da68d77c8d810db11dcaa61c725cd4092cbff76c8e1debd8d0361bb3f2e607911d45716f53067bdc0d89dd4889177765166a424e9fc0cb711201099dda213355e6639ac7eb86eca2ae0ab38b7f674f37ef8a6fcca1a6f52f55d9e1dcd631d2c3c82bba129172feb991d5af51afecd9d61a88b6832e4107480e392aed61a8644f551665ebff6b20953b635737a4f895e429fddcfe801f606fbda74b3bf6f5767d0fac14907fcfd0aa1d4c11b9e91b01d68052399b51a29f1ae6acd965109977c14a555cbcbd21ad8cb9f8853506d4bc21c01e62d61d7b21be1b923be54914e6b0a7ca84dd11f1159193e1184568a6134a6bbadf5b4df986edcf2019390ae841cfaa44435e28ce877d3dae4177992fa5d4e5c005876dbe3d1e63bec7dcc0942762b48b1ecc6c1a918409a8a72812a1e245c0c67be6e729c2b49bc6ee4d24a8f63e78e75db45655c26a9a78aff36fcd67117f26b8f654dca664b9f0e30681874cb749e1a692720078856286c2560b0292cc837933423147569350955c9571bf8941ba128fd339cb4268f46b94bc6ee203eb7026813706ea51c4f24c91866fc23a724bf2501327e6ae89c29f8db315dc28d2c7c719514036367e018f4835f63fdecd71f9bdced7132b6c4f8b13c69a517026fcd3622d67cb632320d5e7308f78f4b7cea11f6291b137851dc6cd6366f2785c71c3f237f81a7658b2a8d512b61e0ad5a4710b7b124151689fcb2116063fbff7e9115fed7b93de834970b838e49f8f8ba5f1f874c354078b5810a55ae289a56da563f1da6cd80a3757d6073fa55e016e45ac6cec1f69d871c92fd0ae9670c74249045e6b464787f9504128736309fed205f8df4d90e332908581298d9c75a3fa36ab0c3c9272e62de53ab290c803d67b696fd615c260a47bffad16746f18ba1a10a061bacbea9369693b3c042eec36bed289d7d12e52bca8aa1c2dff88ca7816498d25626d0f1e106ebb0b4a12138e00f3df5b1c2f49d98b1756e69b641b7c6353d99dbff050f4d76842c6cf1c2a4b062fc8e6336fa689b7c9d5c6b4ab8c15a5c20e514ff070a602d85ae52fa7810c22f8eeffd34a095b93342144f7a98d024216b3d68ed7bea047517bfcd83ec83febd1ba0e5858e2bdc1d8b1f7b0f89e90ccc432a3f930cb8209462e64556c5054c56ca2a85f16b32eb83a10459d13516faa4d23302b7607b9bd38dab2239ac9e9440c314433fdfb3ceadab4b4f87415ed6f240e017221f3b5f7ac196cdf54957bec42fe6893994b46de3d27dc7fb58ca88feb5b9e79cf20053d12530ac524337b22a3629bea52f40b06d3e2128f32060f9105847daed81d35f20e2002817434659baff64494c5b5c7f9216bfda38412a0f70511159dc73bb6bae1f8eaa0ef08d99bcb31f94f6be12c29c83df45926430b366c99fca3270c15fc4056398fdf3135b7779e3066a006961d1ac0ad1c83179ce39e87a96b722ec23aabc065badf3e188347a360772ca6a447abac7e6a44f0d4632d52926332e44a0a86bff5ce699fd063bdda3ffd4c41b53ded49fecec67f40599b934e16e3fd1bc063ad7026f8d71bfd4cbaf56599586774723194b692036f1b6bb242e2ffb9c600b5215b412764599476ce475c9e5b396fbcebd6be323dcf4d0048077400aac7500db41dc95fc7f7edbe7c9c2ec5ea89943fe13b42217eef530bbd023671509e12dfce4e1c1c82955d965e6a68aa66f6967dba48feda572db1f099d9a6dc4bc8edade852b5e824a06890dc48a6a6510ecaf8cf7620d757290e3166d431abecc624fa9ac2234d2eb783308ead45544910c633a94964b2ef5fbc409cb8835ac4147d384e12e0a5e13951f7de0ee13eafcb0ca0c04946d7804040c0a3cd088352424b097adb7aad1ca4495952f3e6c0158c02d2bcec33bfda69301434a84d9027ce02c0b9725dad118 +MD = d894b86261436362e64241e61f6b3e6589daf64dc641f60570c4c0bf3b1f2ca3 + +Len = 17528 +Msg = bdb13d9509e694e748c75c966b0fae62ffa91aadb022498c0c5fe11e8a8ba91dcb54eeb21f57258e4bd8d1368ab7a79ed19ff0fa578130d1554105530aaf51ec03b89b1999deb37bbbe5952aeecf904b910ba8e566ea38f04e52dcaf54b68d40ed450e727e6288d61f5571199f40b190c8540815e444aa1280fa2ddb6f8aa54112640e64d7cdeac800902aaba6f05296fde2d933d979ce5e71a2c27e6311e116f97b6297ab062279e5fe8b890ac9bb85b81de2e64e70ecfdabb06141393589e82bf4d3b402f5771056075b5bd3b23484826dedd749114c16b68ed3ccf8dce4de2e352963e58233b5db1361c8099204bbe13ac0add54436d218a2dfc6a8f03b218ca82c4b5a959c92fd8a6679b55374535fec2511f7f1f1595b564fd85258d6d8ccb3a3156c16fccc43d43216dfdccc7484ebe1abb900c6d20611eaa9fdfcfd2c77c0586820ed998e36598d468d155445d79fbf222259fd65a23a77e2b1c4f845143611ed8002bcfe5c813fb1c9e653efe071861f3ae5de3cb63bbf2a76980e4a2b7d974c933dac4440b50f009a37139927c7fd490a8ab07cca7b8a2a5560896345fdb22c6187b389675bc7db09f0da6c350aee499931bd5067629f895504afbae91d2935f3c617f55bdd2de91cf9f19091a31fc6f0c34bde1458c8f07f6cc9749f48c61050e421afa3a10ad3dd3aa02cc3f858691526a34e59c5cb07d9811ebcefe34f6580c719e0c7112540549c2e69547363da12440dc9be1171756e29f8b862578ddb8c5947af4f9348d98805e56ecb7b07c0ef03d077cca482e3434d9d907f0c481b7b80f245c4913946815e0b64b0770bc3b24d367f0ae7c6f862d6566dce6a48cd552664c9ae72c12e4790e9728cd1388c650985090040055dd2aa6b77d8da54982332e364939ea83ae382c7c1e5f056c30f1f063f371806b99bb324d524c23624ec8cb83efd7db6115c1bed78463c2d10b976014736d892b5c6d7c9b03b8bb41ab81c2b7e7377b35bba45a2c0341d84196af8be4985e671f95900a12fa39e97228fca834d7ef466c205e72fc139fb24892a8c846eadac6b2c5f15f57be661a6e37a7e0ad2a55c98ec46e8dca2dc3ed606011a9ddd359047f6ddfe0dbb8b3eab0680200636701711818532f18ca64e6038f88b4fbfa5fccf01dda331181b9c6c32aa98c0a0678d992ac8acb6a61d948ac916c5e33c8657c9f266eca9ba1de3b310ffce80391326f88f193e7319cb761e5e64b1a17b5f09fe7481c1bcc8197a464887aa8e28fb4bf5577fd06f0c385de2a2e837d0a5b87a362d350ab46a98cbed814a153196a7625a2a034af3a8eab2a03aac40b9e1191239c58aafd7ca213d726351f5b2aba0d5edb2ab9447146bdb1ed1b8b2a5580b39cee588986e0d3c389c98a334598e6d0a77948197b3794342250d1277da321557bf3538adc05e712432c548b86e68966bbf7b8d397ffff84d7c96c475a196c0d4d25ca1d717e3496afd95496b3960a45e8f0dd663f2cd1466ed15d69641ac9318d003cbfcb9c44b70c5adad33029f1e4dadf264fe550c1ff43e324ec0049d168b80d1bf05ef2a009f51b87cfa104d8c9fe2d33ff0f0e39f5f389436dd3091d195ac6f84db013dee5f6b5cbea7ac9176bcf65870230b7b1e0ea3e495d40eaf4d9f1a84226437249f19d9417c221e93650cb128fe7deefc236b47c9748de620110f93b9a28ad9089b336410be53ae7ce1f7dbecf1e8e18d37ddebecdaf0000ca54fdfb60b342e106817d4718a22a47470e53b4b514b2b56e1cc59f4cfe5a39a92c5c622654a7f65902bf10bea7747a29c3e9aee278d1580a9a0578a5c5418f25fdb10a5b9b3142e9bd98387e53ae02fec6ac07c7a98e73317c2ae568725a83d94f884e80e5935940f88518c8353b742e8d1759e5353e996b49826ff5a4098a3ba83ec936c232abf769f24c3cdaa140419db81fcb9a662d2078b862edd8d334b58e60e4edbf93ad65788c4d4ca273f9d06f1ab3db4799c0e9804988a17f5c05ef688b2bf64c3af013baaf96683b37f343879bc0a4cb4dd73f06922bc105e86031cd1a2910e69cf6aa96d8b21fe341ef135dd7d0a8a406e299623ed6bd0b2ce635329a56ae2d4e336293941af459462fd8783b3e675039757129bc14060d7e0a522f882f3e6ea32904376e4b560b99480b5d5294516e69f26ed3865e3c7b704f312a602d32494069e808c3cde558dfba14839a6d073d1d0bdae61a3fb0d388272aa9bedb2a4bba58867e411cf2ef6e189c719f12f96ad7045dd8041303b44a14c72400b3a6d45587781e42b33f3de8c60badcd3098760c8e503fc082c57c2aba9f2fb2311861c679354f552b0aa2c454daaea14064cd420c6a73dc0946c99e6b0b335ffdffa261a036a804dee5dc854781eab7ccfefefc00f51ab31137fb39b8a3c57654dce4db9f04bebe5961399010a9e87d20c789befe989ae224f9af7115e15c71e020c778b817d9fe250d589942bb2e6e064edbff67cd8ae5df0c44d9255c7eff2a7bc8ed9df8a050cc3aa7f5402e3306c8058431defc513a89f069d6497d936a8e4e479eb31fa842a989a648bb8b8cd3f08c00eac6ad945cc0467cfd04bd3030a608e2009a053830677ad1e7f74ba2521a32e0aeb179aac91c6efcc1e9a3ec0dec4c16b7b541f6c6606ec96785f6fa0daf9a91e221c92b0be8da67a96aba0d4edb786428874e5a613f05eb4c0a161a731b3393298a149ba1d0395c280a784a7ffe2e48d7a282e99d5db0b619e6118a0ef79e62f96cf463074cec38c23b56fa1dcede334979a81ad7370fc8359c71bf5dcf2b9fb64cd117c8c9638c1c8feeb2a4b7f8b1f28ef664ab75638033afdf20cc0c7b97f4ac432042d04fd47b7a97faa1540e537745265d86735c7ca8928254f63a0efa390dc31321ebf190838dfb48902daf862c5e907bf4cb7b2bf8e733c248d2361507d3c976d297094eb93c8102fdaf2cc8961dcd3672e8200c99004c0f505fb196c5a0dec1c14bf77d70f8b1d0465336a9591545239d53eb9d2d903392994ce1fe06f76b6a9a853c9b6f55163716b42d96c9d790a9b0894e6c1af992d280245799504 +MD = baeda8f50d302bb2a30a5bd5376af9aab5fe9f3c306613de91e5841eaf1fea17 + +Len = 18624 +Msg = f419d39625deb2ac11d7d361e2d2de958d3d94d0088da7cbb7e0cf3227e01aa8feeb840c3272c7fa7a9f7495023b438463cea73bd208a67c975fe81dc2fa0e0b19ce458f54071ad08da9909af2776f5dbd14e079666837b81645101c604a9ddc2c083ea9f3645235323c4ef6184e0c28825565112a7401881bd86eb8699a70221ee298e17752183251a2d633de87bfeb9cda5e8b88f6adf38f622b7845b02ee5d9a47bbf499914ced22151d8abec32b0f2ebf470e7b4e20258296ee55c54802d44960ecccf01ed119d02e76ee6430d7e6ccf4e46ae7849bc5f76608516500e0347007a8f72524c039a8dbf7cf955f75ef2d0969847088a298c9028e3dc6b7f6eca29e6919a53d8adb209028a4bea99566c34f1eb192c4c51c8c1f084146c7c77b55a7b58b0cd3a16cbc0d72144ca9b71c24489c98cae373df94fddf2281cac25f0db616e1a881946cef867c84cbca4b4dd4886b90855f4f4088319b47e43b88064f4bf5b424c1e46a4fad907cb895c29a3881044f5e82b7edea5cc5280a94790f7edbda58ee1f11d330e566629f96dd7fd4b4df0bb3083e461fd1d549415025e920d85d6680e39d3657b066eced47cc6d3db6848c2f5a52d7bd23543245090f11e9d3c75379c9e71218b10a623e234ff0e7e87d173fe3961136e3ca797239b5181e50d0b6354cafe4e849d968eeb3a89947dd3153415e689111759065553c887a52d1e1f54fb6282d6afd4c778b6396c4f20739b6e0054ab5c16b4eac6abc19a70bd9739715c1106a054dec04a0cd7b126ae8feb8a882cd2deb376da52f22e92ccdca1e2243e7d9094bbe2096ab5bc5f0071518eee7516037e35c75f61efb678a0d464a0d5684e2b9a2b092b4279917ec7afdf0b048fb94824e6ce005b6b0253d4eb07feeaa32ddc9aee7bad3820fe1762b161ea339ebea8b80cb445a82eba2b4f6ab281ccb7c2ad7c4a5f17b671aa30b9bf00b4e269cc2c23f0a0b6b0008508fb998fb3e36cb4a52888ddf223353ed4b420e3f07bb98cda4bdabbdcdba90bf3bfbfc31b978aabcc87ef1fc5e73461083b1e34266556a6bc19112d3e92f0f5f38325794151d8512b7fc94a186a36bcd636ff18de0808c1da75df1d643b9feb112f14d7ae771f4bc9f95c89741303f7458d0cb9a1cc97853a488ab3d7407c9454acd205e9732744afdef2025f4c62b95d288d3ff619ca9ce6785b191e075099c4e0a72c7aabb8e2e314d1dd637d1daa27efcad266576aabe6ef9a74c1fae2a169b4dd74ea899acd6f854143080cfa73aacb0a9878ee3f5d40938fef497ffc554c10bb04c07394ae5a178c5cd562c2bcefa297bcb4461157fe4e82af3d00645d74dd880584d3702dadb4f94f52e73c2cfc5eb764a2c7a8442807badf25e4e360e9018d9ebf10f4f16f43cf450703326cdbe5b3b9cbdacccac4a680a58a934107b46612f8f892e9a3a8ac57657d1f6a249421d3e2b6e54491dc121c29f27546f9dcf25e3ab7c116ea61d7d9d83ba1aefb2df85e07eb52d9427735d694e8f2bade698fbb8d8405456fa1ac9cc5c9f3c499b0549e52f38753859ef6f50ef172646064246f19e8c63cda7013ea55b07b74a7241cd9e955ee7a01583dc3be975d0d25d499c3056a6cc4d2d6f409af77a388cd923858f499ed155fadf286cd611b7dd5c1d6ff7a935fa5ffdc3742fda6d2c6b2018f639c48eeee46a5fe8763d7147c1933c26b9fe907a70a89c4dd64c66ff8ff790b4108e958cb5f49470ea682b0d29933474f9df6cd929be683220e5ee4e45b03933c6204937552a0b663c1e95846fcc84cf29b42172d59f95c5923f698536fa5109acf2107b4c6b233cdda9572a2eafbba9dc2534e41edcc38c9ca16f30ce36968a479c91c4f6488a7951a0c68ac0dd377983ab3db96fe67fdbb2c475dd95e5784a288833a10d329f804a8d8a02d0a586c2b2aea24f435d0957771103e8088764cdc24d8c9bdbb9d1060ad8084ec8c92819eba7e93233a11e645c0fafeca0acea899734f311fc6edd5f1508d7ab3398a9f3814f98feab432da6d418c057f8c678123a070dafe9a203101ba86ec48b947ac425de37f134c3958361e4ebc67b54abdc0d1c32c22df3e0bd612f34174b5d19104c0c2cd64a93047ea7cc889492e7e46b92fd190523e504ab9815de1ffd53137c66320e0a6741e91cf8683d5ef9e0b0256e1216c585e5dd8f22f4b34b1c06e85d06e8420a0540c1d2d6106091faefadbde0f3b29fae96d9cc94345a2521f9062690a77f51cf201d34e38d98ba20652b89be3a8300184897e86e5d393a999a0b8db5f80c7e0f5059b793185c5404d1b80d383efe834d9b766703f7e6f7fd7a46e6c9427feb606205df574911dc02c5d1dcf1798b85d90013cd076cd9e9c80a76c65d1f40264cd5b010b2a85fdec4a2176d7c82c0a42516fe8eeb54988c83dae9a0e40703cb2f1bd6f037beacc8a506e7332bd3245adc3085312227895cbb6c3e0ae0622126a1b4f90258e46f263e54dfc2a2032d0648ed46384e5e42e6c92ed268e4e92ed52f2184ab88c24d73fb2c5f90516b4152f5bdb018b2715b9747a3554f73e4936341f2086069c09e3e65ede520cc9417bd8d22616711092a0ac15a1522ffece53d6496f2d55e77f7e1f92a0f08761606a259abc887cc7e349d90c3c087eb7a9ae00190e25ee950d10b3f614b9be059a4ae05ca541f575901ec6060b5e2e9163ad7c36045819cd3c016b314196f8de7684cfbfea27244121853aac183d86b383ba114a59ac1eb792b90dec306f7f147c7ebb6c922450541fe8fca66a8bcd46913c86fa150b447c99a061cee72d99ce34a16b0aa51fc2d512aed59b09324c71169ba4f0415cd444d91e318070b68f342755a9422cffc3ed803f8d33fe184b5d993e33d4e5871636d99c43a9d3f4a970dc033bbc2dae99c4f303ec1750271131a28ffb4d0773527b218060f216ce2ea7db11ea1fb3138c81f262baef0745e816b9f5c304b10ad03a39345003432b6804ade97e13c316e64d06c4be622c5c163467d855a1ea33d79caa1edb8361f59dacd9f1bf42679fed4fb591c119c553e4b233a077cbbbd6b1c9faa8c91b791316cae7937551a696ebb08a318bbcdd129ab9a6b6f22a2adca4e8b439e172926d1b84603667eb89e326970a0ce4f27981807046808d67422bf9225d38ec31b4ebf302cb415eb6166fe72dbf8a9463a388de009e67122a08acf89e7f0fb3ffe775e86db01e225a57207599301462b8620ffb9033d4471a8647e885a125fb8534f340ed97347b8054 +MD = 7dfa7b3eb61c13390a56bdb01a354a51066825378ce22367a1d118d4bc47957d + +Len = 19720 +Msg = f67e0f8d70e59ce0cc1096c1fd3c177099b40bbb7feaf0b9bdc6dbbbb13ebc806e27e2a8604bc26b34bbf48bf2677e876ceb5512dcac21c3c924410e2a7a0f73ce5665f5fbf360ce56766361027e5f700cfc528f07450ed9f3653ce164b6a0ece0b29f5d8806fe70fae7ec2b77a94392418e0b1b47dc40610432d41ca51bf8516ae498c64eab24b9eab996d19712b155d349869ce6993dc5c53212a836d19e0b3593581a960b5b11ed926a3cabde312189d7cdfc2aa58f6bfb0efd6b5fff1a830968e83fa84d2ae0ca1b6e52fa384b5e2cdde8215c28bdbd716d9e4e67cef520ad0b4f1fcc9b1a8e4afbacfcce4688748406ddf5c3495021eef8fb399865b649eb2395a04a1ab28335da2c236d306fcc59f7b65ea931cf0139571e1538ede5688958c3ac69f47a285362f5ad201f89cc735b7b465408c2c41b310fc8908d0be45054df2a7351fae36b390e842f3b5cdd9ad832940df5b2d25c2ed43ce86eaf2508bcf401ae58bb1d4707828ee2ab72689516e5301c202693c4f7775788b75993793b071b6332443fad7556b5819853d32dbe9b01c9b2a66f1a340003b79191966a77225fd9061daf662a94df532985872a785df15cd3bace288c7527be24e096a5184cb55afdcfd73acf44f6a18792ed54eb32e71caaeb18b4a8e0abe597cdfbf0c78e052c3fe11ef00c6ce1b3d9026c72c022cc5360c0b5873048767412e12d142cef3798f3dbeb52881688d1485b6b4e9f3586471cc20d69cbb672b3bfa294d9ee7734e64246a826ec49d343fc2754ae2e74fe4007778822213186eac49a9806b52ee25e53a8bc35df0eaa501ced8e5b18e61c8849698f79dbc19a604951a2652b1d2a484f8c8f470a6cf542d036811d0393c96609208837a16e975e774e18bcf64bf4eb5d778924156b9c5f428995bb9884eb216f23dd241a41632c751964d4bec02990a6f31293a71387f0976e32ff7ec06b02a5faf408ef41e7126c3aec752c85af7f5187925d686d9f3cfa6dc0af5d4f3251d02d37abc8770b5884391a66e7a1700087bc714a0280ca8d910fa794df3a27561b440cd54be9b845e49f5571981c535b701817221a54f12984db4f76aa883158acc8dd4d23a1d422b5f4045ce7ff3fd73325ecad5bf2fd59fc5a211d66413aa1ab4111dcf6a748371ebe91f07b511ebdf96b59b36a61d46521128350bc6e29774135104a6d01fdcc488763f5fd1ad755e971c4fbf2a960951a8dded95316e623962e425f2fb9da295bd6e233146252e72cbf964e99d3873110539b7ed54158ecd1b30fe2e5d7c6967e347672693277bbe9dd387407e633802aea2008e7f7691c1a4ddf9d3661ab5ad9288779a4912e1949541035e5ea4bcb91dcd73e334100fa9b821a56cb6170be953a7d116c885f4874aa8859dbe8b75a6cb126ea612605cd79dd28d64bdefd0adaf2c002691ef291916a07a790e65f75e4ef77d219af61dedfe371e55fe13a86cfd9b814445bcf3cc819f4e8adef2b64212031bf02e3fa75f31e5e4aaf710f799d76ce0ea547de914341b9e4d908036e4acbbc7ac4cab9d9dd1555cfe296642d6b5168ba33eb08d72769bd63bd3bcfdd877980c8086c8654c650bf3aa05821e862f3f0de974e33589f1a682d018f77f702b1e57476d24a2cd658055493c02ef3aae3cc437978485ad0db22094c0de305e0fb5344b503ebaa34b48de561d573966aa966b17f723026e53453c146bbfb4e4cdf32026e07531609ecc1b5b2a0d818cbce24f05443d10404ad631b98a3a81c6ce6ea7448e768b87c89088b2f2746c3f4d970c79ef3153b56cfbbe0eacdd0b56897e363ecaa14d7b612c9317f74a3dd0d52b1ff068be3150221c1d8e33f5c62697b859601583ebdde0f6e6d4b8fd9af40c24e60331222d8302cdeca2c03356b971839d730faceb01d085e083b7ece81b3b0b1b2ce90bccd0a767a7f6d21411819f965ec2196abf99b8601caf64b6c9b8ea441bd7e0e983cb589fec04d9f6ab118a3739e7b37bfe07f10bf7a25fe9944fa266649ec929e6d5cedd0537487977dbba0c9b5e6e2f1acf22f00e26f9d3fc51fbf881dbf27b6a725285a008be1b0c52b76d1f90ca129a71b6a2cc87d32456624f60f02a0d2c83438c403913ab39cd18fb0f132927b4f172349abf5f6c4936f315464c0379dbc5abe4932cc280745e910d3932723794c453154e531835c11287060ed1f2b8f7a62df3d517bfee49255d6691ea165a106796e144343cc01a7d907a213e725b0eb94c22ac76463536b5c08fafa6800fd66fb01102bf578bb3dc91ea23edfcc09f5379097fc50005ab848ce0c8e449d95541213d0060d3092bb41dee9d7d0c9a18195700d58067d04615f512944fde46fb907ccdd3d549b8f09896efe4482c38178f48b13435081564feab9d8835a7c957b2253be369262b90fe9f769efbd63afc09d093125f4b45a68302ea2b4240e0f84abd1fb5b8f2c19b6a9a1b33e49513543d811ef66bbbf17957bd70d3d2341e3baea6d1d1312a2b5e41093639bed341be7eccbd66e6d4a95bf11dca3871fbe1b072750abc5e56c978267f6016d72b4679623606da5d2fcddcc3b66ecfae02cbf52a9a12ddbce31c779f6f1151ca17a2337c3f83c74b17ef6a6419d6ffe2d34d583b9892cbc96994baf05ad2810402e56b215bacc41d477e8336ba8b4fcd07e67819f302fd0054e2d0edc52c1b0177809ef61cfa4750190bc5d01af435a8fb17c36a3bdbe7fe2f5757dc3076966f0fe43d5ef5f4d790171790a4adca58233751d890d596131f73929e301f4a79a916b0c4e06914db49cc127248f5561da84745162242ba14e0abf532adf4203b2c3656c42ef8d2e8d9929cf921842ffcc495320a9315c053ee432fa39a51905174e946c97f37c776ec250773c2dcc07bf4cbd92467c1316694d3827f89ba03631faa213365886b1bedddf2a0a161b021b5358b0224d795a380c79e14f08001d688f346a0766d263e4b37dede41a56784727cc8123ecb65b11eb9f302636604325d4f577f26789154a0cd3cab283a5efad90c20d32a0f1a15db04f1c656be92ece928a44e0a1d25057b088c85c9731f1b455e25d38b352b2852433aef4f0c368cd919ed9b75dd69a736645efca9f2205c440d3781b6b0218ef0ff3edbb0d15798899d73c61e3bc7e06f7b248e5e2a0b445173e66c511295b053937e2a30907e76972dd77c47bad81782c76da93aad2849fa3ca301cecee012e69a693922ec33cd6e35992ca6dd12d32cb3aaebd3de0ff3bac20dd0a467a94d169e80a71c26eff39b6f3935a004f099a9ca5ca4ce4f3ad7ffae7757665f59c58ffa64f290e33b9f9b152845b7e509d1969603826e73315d454c8014792869f2af48868a05a38f17e9d1f6cb72dfb7218f81200358ec7bfa3836b8867155527af0f355fc0eea52f304101545556790ffd1264285f21d73352507712bd368bbb4f1a563c7011a3fc7767 +MD = e0940ea2d6369a467e4e044f65e15b28fb67bd9a8dccccc3b4291b8a14a60967 + +Len = 20816 +Msg = cf046868508de9c8c6ac4f9895c2bc7e99d0848f68a1921cd84608cfc2c326f705086d21cd2304e815b35a0e6aa00dcbf2090b64ae7ef700fc70ceb860e5caed837086de7c6164794f392c72b361f593191b4953e9b884a90f0c7d22b61f68325325fbc7e6b0d0247d250bedf96c3c7e14ec8781a3b702c019015e374dd7ca6e7d0e140692791191a55f40a7c32baa36ed660c1963e338ec2339b91fac76b64a071219c00822ef67d2ce12c799050660ac702241b2a4f0d6339bd6025b65f56dfb1b5120d115324f095ccb7503621aa757f10f211762f026540ffc07e30b4f816010054b74b8a2f054f0b2db8aaaacb0f8d31ce31a8501838b7d7456cbcf8b2b3fd87d6c797507f3ba720e1eb546852696fd91ac4375eb95e2cd87189b1b73159f5d01a969b328ff44cb28690d9c6daf3a57b6a71b9a760560e77a75dc56cde78886d92acbd9cebdf8e148e219152cf3ebc9d2f9295d6a7b0db4989415e76248033b4c182751c1d4e09db5b16119899cb13b2fcdf5248e9ef21a289ece38fae11664a39b0682c9ed04e7b9ff6d114d4f949513490858ab17160271ba8fb05d5accea27daeed4aeb06aa89af4c66340b69dbfc795e962898d8255bc11e1b7525a2ab31dfe6aaf37c41cc6a1b7f3792a79d3a193da20a8f0a93cf951cb4bb5a2893aa8d02eff7b2ed2222b16717cbad3403f24be403694a8134ed8780f5612159103b1879337a0598182bd4149ea8d03b2e72e92eeb28d7872bfd97905883773178db789559986807a46666968c35c8177d5a8550d1cfa2a6f98e39bd66c8a84c6e1a01f9bad966d65760dd8f5928e1638117b50c4fd4584b1e0e028aa877410430656918dfc36e7e9189ad419dc8b8a9da18dcb3cdcd54fe19fb766a8635ede3904bf27550dcfb5ae36f4a6fc2bbaa54d8fc80e9c411252a6de509ef987aeb74ee4c5291868caa05dd70596c506852ef1e313600db46457a9a49317c47bce632aad4fde01968d709e04b4eb9df653ef30a3550bb7be332491f9681b32c824aa7667448f351e82ed18c4e9efab828daeb3d97855c1e6e78307e5b7f06bf51a54da1a8e84df8810de741f8ce818329934218c638754b5e839b37168df968a1628fdcf1405255d9e0d591d861f0b8ee04923c5fee897b29f113ca46330dc0f82ef888ebe5a2f24964070c7bddcad1fcab4618b31c2b36572d24b87902b640dc571225d74ca26655f4061241a67256cc03f82e6e45bcf56ca438720d718570c477674461e9e32a961d5d33c85079cfd28b02fdefffd140e102e9979213edc9270c62650a41f7a7604c66e18e7053a5b6bd00f7c6aeeaa14aa59289a54e61c29a828df83ee922757b0dddbbf26a9260df267cbc70e76b8f0028cdd895a583e58576647e8e54260d1cde0c2392c3b899b243d0ac8d1df662b7e91605019dc6ba8e54607866f764e6ec398ca8fdf038a8e681975859c6fde4c882f58f77bbacb9fba91c766757519b5facd9cc82949526d28c5b308587045db872d6d84673985c73e0e2e8ee088e82edb47e0ecf15408c0cb076d59eb28c660e3544801c4a2c2a8da87e50896f7e362cccd3d041f6dd510b9a84b7e3fe08664036c91757c3da9c8f4c294dc810a34d836295b179adce1e35970f4813adfb06f513defe9765263b1f689e210880900188221e32d4ce953c415261169c66f6a07348e0b649a2917eb46a277ae923b72ab167e7d4e1cdc54385494493fcad6dcb614288deed00aeefc4ed5fcbd89e9af185c07d083f2fc0bc97f80450a2d5d30035ad41c8f003c106e74ec1946545be2e7ba8685d3b692a1fefcb3add2d94c8b766c5860501208a4c922ad7550dbd931a19ac1434750e63d5f34f528a0b5eb1798b37c0338eeb6d293bfe2b9e306abc4cd6382b3e6a94008758f0d5e7ba981fcf0970aaa507d8ec456b3518c07bd18c4f37d8f7db8a7e82ac776c5f86b9d58620781c8ff9fa5d79f9965c397c5e869599c50b048c53325cade4fe39e7879b67063d780aa2d4fdb8ee53fff82246fe7aa4f44afbc16364110408330f7ab25e44e8e02f8530264e0b7c1a8cff42d3ad7e094c15382b2968225777b74ac0b8a2a25106bf9a127ca2f42b508f995e7318422f32f6342a13d31310b9e7764a08ecf1d6f794a3ca36b105849c8460e5a3d3599f5f6a8a3ec11955b825300c8731a1d5d3593b5cd7e2dca21064e7e078e44316d217eea4e9afcf8cc6604d9808b175a0ee92300fcc0faa7c4730369278c2fc1c5ff2ff0ebb3e5a0ac3e18c833f16bcf571490f47072b9ed69194fce175be72dc91872842140b3d62293f79689ab00c4613d4259d29c52e53a7e9b777f0353bda3f3ad6c984750e256ec090b2cc3bc8153eca1f7c944acd75c2c4d2a058d5ab978194a71f9d3a30c71d1b5eec140894d56aa1595fe74b10bfaabcfb05400e6687310af5bece9949c9bca6609f32b4e7292fd06fd183348c83a8187d11264de13b96246f218930bd9fb608122678bf3362e70dcf5c08a59584438df54e8c12902759675fe26d8f00dba1a6f02c8685fe25388ff469e7fcd0141583d037d20b17dcd35a646bdc12b7eff819871bccb7cbd28cfd7b8591d8a0c59670ba47a885dcce9c640938654a574f31b6436ebbb3111d6cccd129a6979c1b3efb00086021536f2d1abad299b4439be733c1bff4066248407471e086d8267787794df4a95c10410df4e5c4d9ef114870e86e69d6203405b09aea24c308e47cf881f096d494a7f6a7793689a64954c7676ab606f2af1ab83596b670dba83aae1a9b945982696ec2921e198baf5162ab53214511d9f16ad237fe435f4144bd6d662ca5c73358e967465a1b552595ef669ca28814fc95b90630483d3a945cc14d53bba17a57d1ac474cc39870d9853f8bdc64eb7acb1a89a6c6faf0bd355f0ab06bdf13cd70623bd51dd12d690bbdf77d7aff0bddc5ee6156648cfa31a4d9de5926fd893b0d98fca3221946a86cae9bddf0d755988d8fb4779184d642834bd08a1d9d5e6d9fd48333f1e270b95cb5810fe6645545828d179cb659016a212375d5a8451fbf97a3440a25e348065c816b95b44c875f3554ff287ba008133eff32ce6f7b59bb9593d39806921929fc80aff202e668602675cfcd39c056c81d4d9bd6dba678ec1a14a6504c55809ebd41c2c72ad874d2c67e2ddd79507a134c8d1571656d19cb85a420d53fc3fadf0f334877b4893941a5cc8debd2c6ee6f5d4c3430952598d478d0f7998964045572d3a576387f221734ef647aaeaa2046cff97ca6f366928154198f1f919c29bc78a16e552f20cbce0465360c8550bc340513532708b6836cb7ec5bd9e0f2d75e913b1796f12492f094ac9703ff712ea19d285c333d8be7f104c7e24b0ffe89c65cff15ae26e124195653fc137581d43a18b70c7e1a5d2cb8db4ab6f57725dd8e2c7bfd2d48ecdb92d9c9e99d7fe96947d83dc84a17b0ee2e9bd34e7baeff3f0080104276dfbe46078f9cc414773e3a658c2b3439ce0d98ccd7001d102fe12ae8187a6a2d43cbdfe1f83b201b03f6e41d851db4cf95f9b90e1d3fb78562722d8f2618f8b32d9c25bc94238203ae89d2ca5373ee7e17dbdb7ccf10823dff38b370695a52aae5b593e1f3f47e80cf8da31687cc25c7cc4a5c937cf1119c5e9b693632dd2 +MD = 4dc502138df8ee935b203ecbf687e95bd620d9941d9cbf2da51af7fa22326b57 + +Len = 21912 +Msg = bc480d705dc5ae84846ea21e93e68f9e7f1e2d2be11efb9a4a023191d742f6ec0637d45fc8db695dd8d15f394aa59e8c6754bfd6b80fc468613c0781b1be71b7f676ec9896091b925be448100f7e9ee649dd98ef865cb9f47bab7ed0aa1791d2340c3f63eed82ce9b6b145eb08faf775ccc29ebe728e410841587cc8ecd7bd076701b408f8cf042b91403f115da01101990abb8aa52cc36a5b4aeaaf9f855f1c375e32cede760b2093971ccb37f8545257bdd69d47bea9e37089b1ceeaaadeda4e2aa3ffc555aa8f65c0c661be8b292fafe4d73d7fcc5a3b281eb76df6cda209516deee1d7f54741afc3231b19e0f6614986a5b375df3e3a2d10e6d4eb761371eb2ffbbd3cdd4cff18a61d40718024b1ccab2a47527ebda82467254af02e99d9c279b2da1c951f8f48739b1aedf11ce4e15b4d403e323f4cb82c5b182d7b9c0b7e52fb829ea62ab9e83284efb6bd45c52f9ff6e860822cef8f667287cbe884cdc8c3befbea97d347a0e9c208f36b061b5f7e0d85e1f6ec59511d51ddf2fab9e848d3e38e29f084ff17a23cadcd84c9ad18017b60e816e752a759e062c93ba324a58a5283833aa4abf664da266c8ff544032f26c19e6b86a2392307607932aa4887f0f3221ffb9b11e43884baf714f2a8c710f7ef2b7c2f10ae82ae1d2967371e980eaeb226bed0fa8a2422b2969c27a10dacd634b6d14b66ae7fbde20263b06c7deb6c7dbf08ad2d8f339c5673aefef77d0cacd667f3436ae3211cf72cad7ffbe18f13c9136399749d6adaeeb3d2de71be375f1e67697de5f270b4a4cecd0a936a038ddf4a56fc9559d3c5c281902fd97935d954debb639e86746b31114cbbfbc04ec0078b6a3f596d75431a03715af5550f00c0f4725c5f45362ae51cb1f9fd8c789689fe25c88881583d3d61fcc58efbccbeaacf15cfeed7bdda0a18842b5f768af6accc1200ea3c859c74c4bad96b1274fa599a2c2614e51161e62c4ebbea258bc7b91db64f46470346075431fe5643109c167b40c899173ba9c1819510664283f3f8189b1e6649da253e38eb9d1536a68b299ad81d45144298e53ee4929b747b61b1e648d310eb13206099701c719241b1da207c8de0852e18998cc0a9516479f92cae45d80dd5b51eb79e46e53200e6f57135b480311108102493b3bd4fba88a3b0991b9325aec8098970f75e20279f3f3500095e0161d767cf7a44365e1dad4787cf516e1f1f55c81f360bf102b073776faa028f181ca307e26afc7c4635f2cdf7776fcfc5cf6243c1190805a2426b86675a287b3eeb74d7a58a61f7cfab5e1d49bafd20dd67fa62b7417801c6868d526539018b3b7653bf5f03fd10c027f920c5bf84c8308e220d48d5e24f3723e3c4b16f1725d66447a75afc582de350ccbcb2af8c2f86ede42cbdfdcf56bdc275c49223f2b3d85e5977dc9ef8b8fecfdeda5ab19bbda72b47a75ee3c67e1f0b493b527e189b0a0b90172e106717da4b386303ee3bda5af1536673ac4f2f27a5690f37a713473114f470987b2db43f6de03df68df3ee68e711514483f2d19b39dd2a8ac66b1d18208d686107d0f5f5dde0527bb74b619ab48851198e38cc446eab729205a68786d864e8d3dbda44c3424088d994cc9bb601c14c39f5a889eaedddd1998a4eeb42e380d93420d308724506c95a4bfd058475c22bede1cb6e555e7b2ee57deab315ebe921cdfd41a8ca8d3cfc44056705ceb995d77d7a27e44c678b70bf070346c795a8aae69bae8e93c3e909e0e990045a74423731e7465499b317816f50200c208bc45ac722a121958e16d77620026bf14fcf325051b02402e826483d7fc96de875451bb7b9a3c99897ca504ed145a05bf246b224dfebbe50afc1ad71bc87d1e6fa34d400883bee63850d5baf25df0d6004ae9ef3ba81884bafef985231e0a0e3c3986de8b8f1f8bf01e7e0e3445a18c82e10dd0609faecba91b8f129035e42a77879cdb8714d5074b361c830553e2b5a177359a5f5dc5066fc24a03e5d8920fac0dfdeb7dad85c4a4282f9df8011addf67dff918a6b11e18993c8ed965e8a0a443d3872f1c19850957535c37ef5d0620c85da5a64300bd961007a14243032b6caa5cb0665e98337899dad982c7a99de2e0f34598f45295a8088dc2c020622a1b9d8341a5c9decf60b1215906337edcf057acc236e32e0e1829d7da9d248e0379c34f23348572bf894630c20d59632a11d68d02c8351c90ad1ceccf1f760e204ec5c83c5bb9dc6dbb010dfedd61e0ef0c05a0ee9615a4832e89d58b8f3f6ae7624af675628ea53fbe8ac2f3be747d94aa8bec6ee8a94f4f641798f435a62bc27dfbe2b7902b549f5988578bfabac37fb311796b0519a45c176f3ff458d4d818668093e82fb871f456a3d2acd85a3919ef3e50cb368e2c130e39d17241f0f950e68011f1855f85a67b843d409f7c68ca25bb7878c3306dda131c5755392316d4c5a465bbdb46171d91d39f2e984ad6fb1f2ff958f426f11aecc0d8878695b80bcb93962d7895afc05f37015e0be90d12a343dc551099403c62ce5cef706d665dbff5ac2ea675d5f9af596ab83f8495797a9f285661b0e0a63deeec7541d4a9326b74b0a8ab0e123047e1e2247e41f4966ceae5422d945bc245c78e013ff108f295b6a982d087edcbf076728a0e48b4d340cc1b03bd6c39f742024c7bb4ed0b0506639fa45d08ef3372c020d238c25c97c0efd380596100acfb462ecbe6ef3ad486249af69abb9ed09569f6e444d77549b2f815a1499b3a4b393c3bda1e201ec5dda1a35fcec6850a2116fca87aae8653df92e74ed4416e3bc48c7b8ea3a73e41d281c1ca4351294add7139072270171c0f63536f437b25e464ddf6d0bfad22b12e6cfd1c3f8514f69222b5e78344b10c091360ecde73e6aee1d7b589b85a537bb90c5e3e0b89cd7808d17832e653db8b974b16aded4e39010223bf9fd7d558093b06ec18ef86dc3607258bce93c51d017fb37e9bb837a64590691cfc6447b9c17c05af9232a4ca9a57c6f5a5d2c1ffd68af29f9c8754b6e25450d586a7d7ff0d43afb0951e0a1d0abf5dbe9deb6f0a7280b18299a1cdf0401381f127e7aeb1545aacf607f9e160f00992efa025f8c53e29972d7b4fcbddc798a478c66ef357fd87a589d20c5018b3fb0c8e95ca84b8a04d4daa28d97603e0aa60734a82cf7a72934272dc9f80cfbb5e74a663203a6c01b37a018a87f5ecf1105de99d6c6aa11a462ab80ffa990c70f9713cf4704368ca24c73888a07120649344e2a674eb545d6706635164c2583a96ac5a2f01c7346168db59096e11259ffbbd664de17b1ba3c07d7c8c27233a81fbcc07fc1ded593047606bf737fe850c106f7e7afd417f54173809a789e53aadf17a4c430add5e9d89fb7739445fc811990331150e6607d835de158ad330e026405e30ec11c0cb12f55684b7dd5d7418602088065d113c98e218a51d4c2bb554b01fbbe07abe29f654199a594a2013882b6f8935326ba4fae58ec3483eff40a00966f5058dfeffb16eecc107d2cf2cc9c3983e8bd59cc96708e776f3efd3097012dae74492a9d5ab0b7502a9be924843f042afee8dcb334811ccc706a8d0992d94249886d0e6344bf35f64275693ee5e7915e347a3206803c9e4bc69b11e774058eb10b190dea2fbed50f069e2f7a68228bbe27f5fc4f202f8d8600452e42b0f23d858ae1ab8a923c3f0ad57aae9f917c3d9b47c09df59ab664fb8bfd34b3e04c0937766b69dd1293be9a3daf68f6d85131a6228e9982368daf2ce837b7a3786f5c375c0acb5a1761ee0dad80d118c34e023f26a4718daa01e69a93694999efc8c105ba34327a17233805b3a3898de8cf29f6f29 +MD = 66ac482a9eb4ec96538a6d038f608b5bac82443b7dfb8b9bcdcbde84c33b2cff + +Len = 23008 +Msg = 518710e74100090fce8c103db4c5e190ab5516893c719ab4d2a3608b14cd5597726b93d8fe18d7677e54355abf840ae82c3a33ce9eb77cf076ae5b44ea4bdfec9c74e3a2714f8759a004e12109c4ef4cc90ad0cf0b2034eb20e6120cd3cf99f1f62c680d41ad012d5d247b5c3b8d7803aa4c575529b5abeaf9d1ebaa775f6beda91a8ae1173a2d2bdc3d6dd1fce78d57f8882f28a07dc73829f94fe87f063d2adcc6b2e59afff49b46d61e49f5db168edb46c0101980711cd7e6a78c93c9f7eeb8b946e273033cc4c278f68bce70fbf17a0f72d53cc792dd2c1e595f5ab28182657ab0a0494eefef79aa5d612eaf24c8fe6aad3eb05910c44f2bcf297dc8c32e0a9156e7c5e9f36492f4bb91bd9e7a5b8ee0d9141e3fd51968956fb2a313a539d087a27f8fdb326b36de78e42448e3f153f85e1f2d7fc724a1e2a3c1759c10eddee3fa2f4e2c924c8df1fc220bb248d4753aa4278623d02c209cd2209b6aea905d2dc8c0aae5fd4ebeb4b01319e6924a1b2e14f4d032d77b0d4a6395bc851d6b74ee73fb4d0d5abaf2b0fa7ef7eba79c6d5d144db4b5c3579175c0e980f68fc64cac63a5dcac91d8506b432d4dc97112944e0dfcdab37e09d4a450e491c42ae90cf2008902cb89f0016ff4e6c288d7f3b88968c7e934efd8fd5f7b4d94f7d41bdd45b26e65702c4a2c447372fe31c08900978b778a41fe0e342fa9ee349877a5e72fe11bada6612efa702a99aacc161a95ffe0d464e093f2a39a428d17aefacf5137f559837210e3937d7f226e5fc0ef9f49cda5201c96cb6f2aaef3e54145e144e656f08fde21b21ef3dcd7f1f4a65045febcb465faefe2c36756e8475a4023e7c26ca878f17de3c358a87edc92b084afa514c7dc84877fc5d8a033e4ffd3dd6355a049e6b30abeac364be0d642c6d506c63da72cc144e99d05f59e663be656df27589a832db18afe142dc5880bd08972e99f1cfeb90f6a7476beef721361d784befd64f4665b91e47bb6f599f5b6e91a97a2edfa75d14872b461efb3912ca879a4f86fe466ee1984f24e37b208603d2757aee4c7fc70ccbe464866cebc2f11e761af83f936546b06015d547b4db6cdc0b22bc70e56d63e81b4d91c6e9c535af67b8c68dbdd73cf93304b159bcba1e00e2f815f768ce9e6e2877ed8393a7ecacd7cf6e53363358c5308803fbb8a07c039561874a8a5930b0a469e64d79d99aa95ec55c4a9d180ec6d10649d8293d2b368af58ce4ba9baf72079a086f1cd8d42755110cbe42e3e3509d05ff699ede802c3c3aa3408a148f04da8ee072fd340da963591c38d8256b051d1da11a7a033f57319746f8794243fb95cefae38b69cba201f3f734bd6b0a56b9a3bb755b599d3a0391f486f8a362c8b1c0b45b57e882a3a9882a5c731345c7fb4ecb04b3304e671ac1484698b66feec71aa924d34eb710c27c21fa99bca1cb6a553c430225b740ff9baee1ca09cff03e2345fa9dfafd8bf5467aa981c5a2f37f7dabbad8b86c6a2a8784d31d0c075f9f711727087bba77ba7d90e3cbdccdb2b31e85c69756c245142b8684f24baa9f538aa934b34f72667a981133e850869badce4700de8f7d5444ee1081fa272e3202e658ce2ef4b9cace1c581467df6210b7f38bf40ec0e23a4545bf54854d16ba160ab24dcbf9f5371d70e1ffbab7f4a47a24b11ab8a995499dc8df77342bd88a156e522e2addb91df14c5b60619892d95ce852ef5c981b14a6fe1d648731f834899794f9bc0e79f1e1f500e0ecffd131e894edec7b2ac82e094be596eefe0a4bdb0d173b000abc5558019efbcd3c4420a5e0ee8c94b030f82d48c4a8ebee63329235356c875104aadc08621b82fc40380d22d15a29e6e9f59b6b46f4fe91b78b37b69bf8c28fc784d66016ba9ebe79da86f132dfbb3d67c8dc29c905a7666bb843f7a77a32058955dfaf197380d145aabbc29f87b9021ec4580ad775670ae43c3f7ed47b7650dea0705be6b0c9f3380b141d53dcb3f3938a9794febecdcdd59992c2cf56d0002bf710ecfb0cea82b58e18780c692c804a8e234ebb3c4c4da452e649e496ff81e5cc39d8e2d2531e62a6415935979316c831839e798852f8d4fa92aab0d65554b08263a62acba414b3e627374bf288458137211ad62d826debf3303bb07f620700cc26eb3f334e042db022a8dc046c9af9e1943a3d964b0b5dcf3793600cb6074b0bec0eacc3c16b34a6cc145237b065b6d355733c4d2d5faef121385c18c1d413c42b96dfd7aec86d4c9c003b2714543c8edd6c4edc99d9540b75a0e0fe05fbef878dfa54e9569a3bf41b03133cd8d4ff66947bd1af2116e170bd43ab56f2fd32c86bdfa893696f353fb18366f3ae76741d2328814f5386ebc360b7179e294681f94d8d57404795cda20807a2e5e5973ef501f8ca3791b7b765f871c25e197651acbba9cd9a81dc79ad7706537e1ee5b490a97318e26c07e8faecea17f133fb26552eab97ec9871ddc49715f546cab07972921df9fa531604d4c6a6a502194384852f0922b10c144e89d0ad04ba79a6021d446fe9c9e7607f961e3dd5fb29edd0bf35591aa24d22606fcc420e539c24c2e348df64eb8955dda14bf64766f668af55ca01cc2afc2aa7e8e26b7eacb2bb408717e307d9c98493a8e88665b00f3284fb6599d3a5699b7977ab8fd2204de81f5b2a112f1f286b25ff7c54bd70c4d9d6128087bdbc360379be9025b558de2993e1f7f05716168829276ff7ab23b7dd373db361e6d9e1f11d0028d374a0d3fe62be19f72c79145a01b33bd5db4378ab0cdf76aeeb88edc2d7feee0faca2dfe4f032089bfb92b25f44257875ba5a57c1eb7a32d53833ca173efd4830d9d9526bb1003c65610d711664f0ae5dc4c305c04780706b5985075cb6addffd68becbf1498b3dd9d933c0fde89736048727e3149594c7d7cbd71611d3631dbbf5cdad241e45856fe0c032a443abb7f08df3703d7a29a1a10bb476b519cf79f2fd709652a3c19badf41d36780a809cb825b04da959b1866d9597b9e4fe458d48ec51e83b7e71e90aafc55d07a1b86cb1fae8dbf6b8befe84061b5ffff567b0143eec431d02f9060c603316c1bdd5a07479f79b941bc4628ab999c98493a89aeb81aa1795d5a97b39b1e0e434935ac0763f870d1ff7446af83cbd97016d7a96354115d6246b15a0f9117945eed6aa454d97f1c0e8efc170431bd148f4c7604a97f9aa1f4737c02ff10b56cc4f0c56c7513fd2278d49ce0b01b38f4fed55fc107a17f1538cc03b60880bf3e7d388e29f277392d17ba9bca39ab0321c497da0906228660353a8d9fb449feb192af0d06546ffde3f42843fc2948e844e97c2f042c6b782af4a364e48ad33a6e0a3c892921620fec1607da9e0759ad05766ba5d904e21c1d7bf1ceaf12873a1dedc64cbae4b838f1853da9da5c481b0b724b85b113f03cdfd40a1425d5cbc86544379ce222d8409a4ab4f8d6af7cfaffe50617b3e3fd9e1807d87e705a08aaee1676c2c8652cef8e6c520fba885d1288d783a308fb720b711a4153b829a7a9616b6b0696341b0d76f30135af6f532a4f51aa71d7e3b54b91172fdd24cb0e8d664bfeaf71180d61f9e8a8b3ddedc60cfb5a63c94924302622058962ddc7a71ea4bf170783986ab4c0522fd16b891e7e35fb96f286454a64c9ed372b0ba5d924c4ce9e54f43c9bce72397dd781ccc349a53b2b35b5ce6acc30d62080d4ee0b666d817bdfec8c0677b8a57c0d493d1e35f2220adafe47fa28ffc82ea86329a7ad48df96f0921114773a9f13bbe8649509c5b81c298a39613edecc48eddede14c1fdf0d7ce0e522d959f2e2a2889c9918fc5064769812c07d673e856956e96ba6a33bc27c389d7ba9a905baa9d52f57b8d9b1374e40ba654ba692641e93ad70170924c6c152b29214fb42d79626b6fb9cceee78ce04e31b0b1668eef316b2c519ac4a7900d1bcfcc79b4ac80bffdbfb514678b75a675548382122749b5281a12b16ed579f3825121e337e0a7fc306ed52cae06197ea69835f617f937bc9a2bac7e3bdf110f87388a54 +MD = a1f7dec21f0e2442b55c856ebca2692c69a1b27c55a4b15fea86f8622b42e62c + +Len = 24104 +Msg = d5b4a5143304b71ba84744b16baa5410e2cca159b77a4b7b2ebdcd57b6163022be087f0ac9d77a1cc5908e6598490557fdaa7b6f8eac911521a1e5c45875416a743312126aca1cc039126d9c7a0a8f53396402bb0343e9b640430458c4bade4ca03d48733e6605cfadd5c7a039755bcc3f0020843fc6bd2533aa135c1f6d718eea2f07776c329e11c8e286b7fc12cf8ab689bc146abd742ba1defb18941661f9f91039641db74d4d3340902aeb6a54544704bdb1abb0769033e8a2d4483e165576e8c583787b7b4d95f7cf41300453f49a7b0da42a282b1c90cff2d8666cf86a08bf931ca60891d797102943f068323056f5933510adfb96609bd26b14296fff589e8b77cee6f5b4e192887a561f5bd1237b37ab85c54ec84d5429d77afce3de0d8c95db199b11ac1a85d32c87b0349fab14e150b0fa8c78fd03e162c26dbccdd0929992afb14c86eaf1f2a2aea3276193c8796abad31d6f18b0e1551104629549b77fe2b7b00d0cfbdfcc24f1819ae1869fe742cad86975476111f8924a3dfe1f032f14591ebe04f2564bf978d1f7e52aa213200992d952322059926ac6b5cffb7e916fbf85c6377a5f566b6c1ba53627d8e64b9f88d3cd80f4a16dc40133d284318e3d0e6c8d6d3901d5c0f5e80c9c264a460db342c0afd9e6d1cfc6811dcd63230cc4715c7b6dd744b1413abe94decffe1cac6d4909c0e7fcd10198d0dd893f5cf44e0edcf801fd30d0366428a5c6c9fe5171f62414c84f40894b6376d9cec1e52f210d746cef53ce1be79aaba71abd52cba4765b4b8fbcbae2f44ff97b6391c5a48597ac3f0080257a9b05d102a35200748d147715dcd471c24683e32a1256043ac4d40dd9fc2d3dd69ccd211e2931123374f9ffd9793f6d138728bb4da1b8abdb25eb1ea2ab011f153019236474018fefa04d7b012ca6b6bb00650a4ed961c16eef046703d5a5d221a011603a4b6b80925a3774f4beb155a4f963579482f64eda6b49716241c05ee034df5f097717ec03eadf711af70751b4b9492a8764225b09e1e0c328b8fbcc3c33a8a83ac1acdb2a986efadb9e51b2d58a400b8f468beee298f1e6be02fe231ce797c433eed356efac0c979f7d3680eeb2708314f2d9124ddaa5608ae7706b6796d13a5ec933633a6de0d1ce5a5fc4e67a00197e2eb5cc32ed23bbf62ff9ad078981922219750df324132fd0fe7386a72a195635c3c726791a947e69a142f0e308cd55e6a540590219cc3a0d311bcc180ae2c1a179b6270ba920324b06f33ce35add0a14363d514f943478eebaffa0216284e22b172ad7cee2ee5e0326b499efc9da39139413fcc3dd7373d963c609aa7926413967cd3fab0d278afbc92b10ef9bec6b4b876b62443bb0b337f219109b98f167352f44668a71f23f9ab703a8cb193a2624d7ed8cbbf814be71309fbbdc070ddb85383a555457780348b7e26a6b8bedf5064b4081115ac61eede50114560ea125934a5512ef07e1616d93715cb8392c5d59ad0d492caaee5b15d9e623eff5d5cec52d3da745c954de71115788986a20e885c3fbedf62fb6fb50d3f7ef9003d25d85a89b1b3de5f904bdfa3cf6f468f11df256b37456334488059ddc802281c05a3a841777bea2f95ab715caadb579c684082ddce633fcc08a9efd3cde8bb7c74d4b8958c2b24a7c68c82ca7b5c1e6c7a630121f4c77d3538782bcbf12b5ed0dbf227f07040023a9b758057b1602f71e0ad0cb24ad0900250919a20e23866bbd38262ecb469076a9ced06aefd85ff3f03952219211d1cb5d97cb76d119e878fd3ebf5e4d8f4a8aa4359621aa04bf2468b91cdc1280b77c23ba0002affcc25ef55b55d635e716a9c17514f255a20cd0ab1498c44b03a35aa1f8200c51d5fb63cf16505f2a56dc192815b1a798b82d40e4d12ca0e6a17daefcdc935d5fab7dd0b0f719c1d4e58423029dd4061a500abc3979423a8a632dc05febc1bd80872fedc28716c4dc9bf60f7796e7d984718b8bd2934158e04f9bd8f0af13f35c70f9012d4db02fea811a25ae8751e67d2498f7d8a791c38f70b03ed7afefc99c6ec35619d24fcca59dd8add0f87af6ae701946733e9a4340cb52393d73be05e8897532ad9c5c61b6f919ee0471cad0bf5df6c1cadfc3a09b6a6a134a84e970e7caf8de11353db7c49dc331737ba93e57f317b0061276a14754e1122569d6d2423832a26e255c96788fc0be449d7f061e3b645b4e5f1b0fed919d7ff7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2e7d09b9aaabc6e91b226f00e71834fd6af4bb0c7dcfe2304a569d652c52689c21e62419108e2414ce94836370693b2f098e6db50238a65920335bdb7478d8728c3e84b9e61566b3fb8e1590ae013067484b99e5338e772fc0d3c36a863676c1dffea208a5e1ed6b24878c14ca80a35aa9a4d5f9ac61d348aed05a7efc1bd1fe7faf1281ca64468ecc095d6c8058126da032987eb73359183c8197952089688cedb84cb1ee2d00b3749c1ff45a07fc14ce6d57f0fe7367331c9fe159ae1fb8f1ccb2c7156b9c8a6d90b82a78a200cee486cdaaececb28c1da153ee18ff3f31c17f170828ed436211b2d6333602e309515bdbf7befc71463c7d76147f8e786170976d8668cda216445d8e90c8f72f49efc000c503c8201404035edae9e64bc683881ec85197492569f339e9adf935ff1455e4a947ba5f7428c576c7e4a139ef7ed3b3548fc4a90e171670945183a7a7738fe00ae75d7fe50f566651ec29b33ac6fcb3a15ff0323ec029bb276010e4c161c09b608f2c11f52c18a61f8cea68470085a8355e84753609bf8229363b8ddb73ba6f409ba0b613139eae77338d99729fe10997180c0292384a6e00606df3543dbfe4319945ccdd3a5af7ff7c7de76c19a1403cf8f14ac1e05cc7435b22c5da045382aa0495c69214d00b1ec425d291e248f49d9ddebe5396692678a2f465cb8c17d3206a2b43f03780606bb72fdb62ae4a8f4f631eeda5dee21406b44d73a7196f5e1b4640c576270e905ca1f6727cb21888b8d54c49570e6a18742bb84ffb50ec7c2105a0bb7247bd03782104384eb255696080f161e5b963ac5765af7b46b6f1c5a834b5a6933e2e3224b0f38d371363b9ece288c7b074612806fead8617b021b3376fea17575ed4c508ee2ee1e459d5f2a4767cdb65b3e54439532ce0ccc0fedd44f3c87e1d4e33049b1520e6c4fa2e9c2db9682d73ec5269350fc82bf48deb9c578cdb4b7370eba931e2740c6778c02eef27b52e49a25b0fa080e9c81d6b6a88f5779d1ff85b40fb83b292b33a5a5d137f4e0e6e756a41bff2531c35b5ee1e2b9560886bfa81e5a40722078bbc1337f24498be5e75a8b8f2b0f2d9f53c9a58ecbdb417a018794c1b12ad3ce66b37f333e5944f8ed8e2233042ecad974fd4bd44d50ed56cc0a5d6c95ca0bd63d63d1160b8dd5c700dab03014ebd019c3e31addc81cd4c12919c38473bc903847b97150154b05f928267faee3ac06064a635cd1c4a7be641e9c0c31d4672a9b8c9ea608e4fc9b376d5ad5d4f7da3549106657d8c75973e6b67b819a3f33a1a715f8b966fe096028d85efbcadade258a1dd255185b9abaf1f69e6ae83c88bc05e9b1f293edd81c75701a39b9141e9e707a919cbc07d25d2ae8ee0f4253ce445d10af99b739d396c53e76d6c92b0468a32e8974ea5469223b9351b7d10d6d025693dcf6f9686198c1485b1c21a9f74acc41a427cac8c7d2ccffb0acbdf1cdbb99791e518204e9e81198af51ea165e0e93bcc8fc86ed54358435f4342d88573aceca5ff17a95d54f5c365cbe4bf8a37a9fa6df3a434b79120c3c0398495871469c8f861f08a18c954a2848ab6dd92d579907d02a2c689c320b1cc7203beb84a6abcf7b2354b2768284785d5f7740646c28e7831466ce275e2ade271328c9f923a4922645874ffbdeb22e812492b6b083f54fe0401c05805c11890abb3b7836852fe06fcdc90183707c509e40e6c27962a746cff5749311f467255a5e9982a594f3c23e02414e760188e89bfc9aec27d2e7d5387c960240f0d5bbfe456d6fad17993f7b2d18c13c5981fd60a0d7bc229b5d03031dabda77170251deb8ddc5b5d8c8600e9675df3d400d98d574c4bbd385b0d81820dba11d3097f2e2fe110e279d292cdf858132e27ed4c0e2c08a70a058895c5fcd4de199043ba3f26132d16a2f64abd642644191da7f7d6fcb5063f2db8f98c16c2a +MD = c7f0d250a44e261835b0d27c290c88cc8169a8d525ec034284eead1d532d6279 + +Len = 25200 +Msg = d9c7762f278a6ecb070bca56c4f7d7fea31590df217906d47dfb058c76e7f4e056f6fd632f7d6e3b65e55f306c5b9603d3c8a70182045fd7404763a878e0155d3c29b73d8abad3bdceddda99a9420b23f1f496dbf98c024112a5cce7518f51ca9348ede2bfa765f84bdb82b80214ff070480a6970e79b5b8fbfd86718b5e6fcf643ae87d56aeeb95e3c7a1b6ff393a5714541c5a493341e40437da6dadb43913b6e9ed34d8362f3b9f897dba281a84ba2a58434f33226e6f343b100340f8753f913c472fcca6f79385095eed061da5d84c74629b53af03fe94f1705dcb94ecfafd1b3c97ba680c45a0308e7720ab645a8590c0693140ca3c2a4142a0d6ef66ed036e16942ae336f8f5e4547ffe2d8ae8da94a6df563f89ce0014cdf7ea71abc0aa1d1b4da57f3c548e0ef72d2909df2955685c254912095f1e505a888e82821afb1194ebb2a4e8037297c0aa28a92bc6fdf42a64922312958adf317b4a8ab4a3fc30c895daba00aaa965f71e83733666da2158c4bad86c184ea79af9a6f10a04b7630174a4294df43c62e4b1c3d1c8b2f5d52d6c489bde917292dd2a2b1f49e5349385b0985a97863274ce896f2aa85255f9f285c4d331a8fc874135607d3ced7aa69e703eb3a60b9385ffd10fe59fed0276f036b7e72d04f66d0f42cd71aac5918691dc1f9d4129677cbdaf2c6c752b05326ca8a8419a4e672e907bfb645a158119a91ec2813288b741514b4d26f2b66517b1021f48402d58b1090671bf158452492d5bafc53fd18abc03cefa7bdd332a0c066da464e74ad0dec50bb7e8a3ba0dfc64be6fd331ace9d51a60bbd3004d5df8b211c0fd564cd79d0bb35649cc60ba1c976c8911cfc0db74e028199621aa05c5fe15fa7b56dc75d62225d548581e5f900f9085e9e3b668819b4f9b2c09f22a5a32a2db47afa2b371538abc4f0e9b06401150ecc2333598e494fccafe80ced49f96dfeac729459856e60a94c5b780b614e8d4450389e6748513582c724ee60c7c71f5af648b6e2d6e23cce4121b7478f4db451816ab71034c5f8b4bf13ae1d9d90d0bb2869fc4799f51f9349d022053c831cbee62617d4e22c2bcafe40d67449eb04a7c962bf084d2bab80dd0342b4f78338d4d4f75b25bed8214deb18f2254b3a3da94faf89956f0a432f512783e74ec29b4c045adba3497e8ba62c288b711002ee2821cce68f8df588f76cc9801cb0d5b67ccacd33ae1063cd6c37dc0d1836e988acf63750571891ef618645a1b5bc110cffbecaddd6824c692874cff16b3e32bfc0236b417c9d43d8f624387352cf19114d46d0448d3d7cd1438960c2ea8482d5da3ff544608aaff83dcd1e7f64786275ddf989f262a099b845dc2b0c26a86e7d83a251e3c37f2aafa0e764107b36618d2a5d3481d73a1760b7f3ab37a0283a1925010d79e5e94871b819b5e0f787bac9dad87c5d5b887a7d12565ddfd7729a3b66c274a178377de0fbca607b79fab2de37f1ddff800a376fdd7abf5f4d15f346a17d43e4db085f7fe470102a72fe0e1cfa4fb5e2b54dd2ab71e74c506190c9dd6d87f7ae8eca5190fab12178630011286a38b0a18bb1d0d29802813dc561a2724378ec79140bf8e6a6f4310fdabf606330434ab673d4b6578872fa81d90701779bc6aedf0b2bc9c381bfbb4b3a6a705fc505d08c0e24f7bcfbbf24c72cff6b800f07bb4ac4d828ca138a1ca512cfc59090e70eac9b3119754a3d7c6831c9451de5a29e46d16faa6cc4d9f1b7e42dd4983c6d4192db779012fc747e0f77e32293e83dd44dd170c31e2e25c6fe3f2321c9201f15d92f6700089afab6077feb88946f1fd9da257a1770a7f408d2743e31b5d452f7ea179dcdd8ae4690faaa30eb91e2ef3b764de9fbe6dadb33ff33ed88e0d1df6430147a7e159edebb539751d01efc2255accb5f04f32f31d4befe9f9bdc90eae755a68b7511f52971acb7ccba9e133fd4e81e37a7282dae67ac24e2fefbaa2bfdc56e5f678039cd70509c101f81b0be15a2c70276e85e976941575606d086091409bc54a9d2e5212409a4ba837c6d13b487565dd8d62a836618f647580dad08c69d1109d07c7fcaf912822a6af090e72de03c98615429f8ca9d925576e587b191fa1cfd6fff72218c1584fe5a50d49eee57fa4094f4c57e1339ac0ec7face89e29b309ddcde64db498d4d94b64f90a172490fe4e83a9579ec87b3b1efdfb9f8550aec69ab9bb04ebdd44c8c233f6da5565dfe03df98027293024a0d42e7029345c3a0ef50b9fd0255a4f2531592c3f106e1451bef8fa50ec333cf7f65c300d151500ead60ab938cad59ef77f1fc2c3b008d65ab9c93f594d986c466bcd66d38e42a86125ff32c44217d94696cde1ee9dfbcd0216b576cab6295b971dc9380409adda7cca3231fcf6e8a71a5dabb0473f0fa251bd02c82c8eacb1f1f39ace27ed1c3d42adebdf694c0fb07cbc005856ff0cfd4f96f85c053dea185dd58751c4a25879bbb6726392ad569d739b1600a343b985058ae15be02bab36e1abd7e964902937efce0ee6ff82831608e233d1b774dfe37a7f03ec42c0b7b3885dd3bd8e1f561fe7db099039315fc24279a0f319fb46bfb65ea838b564d53857d4c3f6cab7a9d8aac6a988c724b24a2949a58d513eb6bfc2101666c07fcf6d58f6efbba0c0e80b407837f731c14455c53889c7e8a7f78ea57c959fec796bf992ac9e3599a2dc5fb2d8fa040072dc8c1f2f96ca659dd0d267896f0bbfba72850ddf198c3cc54d7d07cd3cd8bb9e44973e1712be50870b341121ead1c3aaabb8d275a9e71191030c4741439aeaac421d2ad646cb32cf6e5baa2b501a80b1e03be858946ea16fc5b57a1b597316069fc6ec567a1791dcc2f03a8ee70d7d38d7b5576e224b73c55c20a943c48bc613223c8b7df6cdf816ce9aca34f8d342a559cf28a19da310fc91f4dca0cc09823b95240f350113ece55c026004ca9357622e3162d74ba1fe7d2ad9191cbb16d2e6be298165e411f7b132cf07e6a77645d51e820dfa766ac7afef796a9ed7d93f7c67f1e8f5e8f1a0e219aac4c2d5a49368f16a32f16429f2f9aa79d60f6a7b506556244ccc52d86fe0d93ba1809d44c9826e93d7a45d0408c521846555ba238e0a546bb5d46df0ed143a29a509477e6f8a5fa207fbab23907a1d40205910fa7fd1286e2cf48061a1e4041dd8431b7c0eea8a42c7de95af127f66550e03b328ad239cd4b814d25314b9febe431761632d09b719213562d0173ec46c383cedd4a0697645621cacedccfcf2b5ed6d605e554fb0cf1ce85bad261eff2da4ea0426de097f6b31f556575313a6a9df2e61920d243c0dc0dfc86fc787de3f5cf64147f16d7feb2d8518ba3168e2431f40ac2addf0227b1603f13d82e12b4b6849ec5f61fb3e705eb53a3eec61702bb78d894c4d1b2bc0253a1d40e095acf8ceca4d95b41d83a0cd6e030a0e681708aefc4021e60d1f84f66d95a068092aef9860ab12743a17238196bd471fe49e820d7418d02f2fc6718f85a284a3a66cd7cef550fe28b9c3a28216ae1ca53dce42dbdf5a81b1e7e72dfa688a1417d43c597670828059044dc5d9d71eb22ada6ff020244f5ef29e4c603f00957a4efc601d9ab88ac08e827d338dc0573035254934e52b3c8c7cbdbbb364330ddbd084a1ca41b7b0e74f9b1d95a6b8a0bf4f8523b431dc6c36d7aafdcd73eb386223d6c70874543b1d25b7f3922da94087fe62c61b0c1f268289cfda58730f6034d1589a813a777589963ec9d3297a80afcd25fb0f7edcb1981c9319f96d87cb7c6274e2da9b08a4542c9865ffa213a8604134883890fb56a1185d845a683bc1605c9166be9ff011a56f2e8fbfa05c00c1e4f8354049645dc50397e1236c138c084916efd34f1504a5e66611bb2c3dcffb3dd9ccccb2ff0e2b67a8f9fc82f7739db06d45c1b260c47c19a9b29a4d9e5f35d4401387d1b5b0fccbf8948bb0cfbd471afd3031d0b99b51906039050c67f6983293d416b06c8d5fb8ef7a7b0083b32d0e2e78cbb209cf4cd4f16fa36f80dd4cde3bd524570deb7db5f572727afb9d781468e4365f36a9976cc61c1d81d15c7860a1df57cc81137e4a724518251fc34fb4133d1bdf2a7157e045081a4742ba44412cb95719ae4d89ffcebb1709d86cdb77974b213bcb6fb7b9d8fa43cbbc41d908432dcd467ee1c65d719c142e0ce144e45dd6f17a03ebdd7ee6bb401425375f3d50016159d8165eebc3b0ba9da46bb184cba632a4b92cf1b7d714b82a67e5fd69bafeba5ca33579312dbfae5d89504add4a828dc2d57b1cec12ca53166893dc13e9ec8156c9863eb815909b76a1d839794334aadb3e2085a601a8badf128924c345935d503151d607e4ec27f1d64da3e01c8230f7de63566c0b75958d4b0efc0136baf751c3de69a7039bfad50ff5b3983f35c81e9c8bb4c798 +MD = 20e819aa8988e4a3c491673504b59ca44db6703f01094e0d87a85ce9c4d9ac4f + +Len = 26296 +Msg = fd614bb8a438a169b6d1ae00fe18bc6c3a239911cf17eecbba45cc30ca9988160c35c9568759dfcf2a8656ad03e3cbebb2dfff161c182a54647c92a617ad5b6aa6aaa1241aadc47d034f038cb1f24d55a760538f4db0e2abe56a7011c0ebf5adb20afcaac3fbf97d2774dd26710fe8b203f0be05c9a7bed627578ffb2f18fbe7189b0171eb0d25d7803d0b02a900440badd568fff8c565df108d16ebcbff1820c0a6d900fba9f191f5f1b6a8c38e0a678d57780542d180cd8a532e6afc67f2619272abdf599805b56dda05a12581e2cf8bc0179f0f95b6a97cf0ffff2a1731b17649a0976fa1084ad23e217439a1734a8f566c56c7d7b07acdadb032bdd87e195471e0afa48ea3590b6631a965b666e08163a0b1d260154867d26a8b1d7281a0143392af5f267de9009a5ec913876299492dda3998f88e1c31a75493b3ade14e9ed7de1f0a303f029922d05baadd107ecffd43748266c3fd137397d1e551462bdaa5ed880c7590acbe45aee792801896fc1a03ecf6745bf3f5805acd1c255a40b0e5e772cdbd19f0574c20f5323821eab6ce41295de8ff06bf14c610c1f2c29409def463b5cf81d54c7f500ef4cdd380e65f25b1208b563f597803213a80292fcbd93ae52c757164852663b93f06d8627516d80ea52509a5acf43888f197351ae01ee47f9a7591a4ea89847f7cacd598493b82c8567ebf409ecf8dce4cff8e5c2ef518ba6798889d64f0d9e7118775284c164a659a5d211918532b7ab57fddfd9fa6fe1cfba6ff57d9a28a79675f5d1c64ee596fd88cd63703c63a1493e1ca061a78c02fbe679ddb33e8c0bde6fc387b7b0dd76e7ad187a34571e1254eebfc7e86b5837b19a30b30580aa33cf626ac4e78b9ebe8e7f5dc63c89c49344e661c6dcda372877221f05e32505a7d00a4619c433bbd6787c07c81728f9ac9fa19d1dcd68ab2db32aaf56ea7010e086a3f016dc4db7672c2f910042d91fb6cbccec4d189b46effc206c267a167e6669ebf31cae3e03e92006a3ff5e0eb94a6fb4b9d57ce68cc7c88fdfe5107c80b1e02ec9bb988943c4da9d9b25b73e68efe205903738dedf4d8ee565134c16da4b8008de7459b3d992e250f113ecdc811fd91c09e2fae8c0f9e5bdb6519b69edabdff6cbd7304247cbadcd403a7d8d94429b7481792198d45533752df07d0a3d5b4674fc34dab910e7b37ef309c7b63500dfab916a4b738bd81e9846a07f6c3bc259fffa4da78cb77f89c2a41289eac5d2ec3da426e6ed4a0afdb39ac201047b79811440622541cdeb9744bde5029fd9216787444f727ab156674394d5a0777f09624e5922e25ca6b47281bae1e059e174c834fc348cb03452d1c4bf6bdc19b8ca640acef05d51e48291e625a9918d715584a3368674025588c3b394f5227fbb651cd5fc5af4a609ae7c0e889c94bf0b4c337e8db5e7059750b39c9ff2021df941e33c7be356ed88c0a7574e4b787301b13b035c33541e7c4337fc4af2f988e4e95dbac809e27ce4319a4d0136ab2e173d31fe4c9f29d166e8b73f1068872510d3e2bd6b3f25f89ea9cb7c2bdeab549e388ebbb949f6b2f9b9c7e1aad329970f9a28c0c003afd52a71b15138a4079b094bc7c83cd43937a72ec09054b35f333394867180f7de971a21f268b2473e560adf63a031be7fc3f1c057a7b899a6ae1f6b822c087c30b2e052f52f1308be0a057bf8d05279290c6c16f3a440f68e5c4577b27cd10144bd0f5d4010f599154b7ba9edd4f984c365687b0b22884a74b228518dc06547991a19c959bab448c28eefd1b92ab171dd639995249ef90608644a717ab35f8f9c5e722fa888e9c84448d49be14df4c0e59b51ddd6660dc9a7d72e601fb20a79dcfebaf8b3080078290dcc510cbb3de26a5133cd77345105d18f46a5d3390076c97f569d1fc482d8cf4229a9820f1766ea39b1dcad764d4b13f115ab3bd4dc06e054d7b5352b0b8ad58a9efde795fbbec3b94e93dfa85ce9fda12de8c001f7bab023a0b999b7e4deaa4b7ed6b3fc756aa5648c7b94472a92ed13f206e64cee02c7405422c407b964dc095bbc6dbefeeb0dafde0c51df20b670ce045e4512196f845f74793a76f3bdd948b8377b39f2c04b1fc5be9edcc9d50743d78732fe246175b5643563a22e4a208e06a0731a1b8b0c18d61ad1cc906f4ef9edfa566d79792a06a5dfe605b38a505de9afdbcbc39bcf4f71a9a12b1ee58664aa2015ec93270fa7dbe1280e4dfed71cb3be1bbb7572e3084ad37374cff86c28aea0f807fbeb953d58d1a0483828236f0743c985bbb105f7a430cf461df85e9a6df5832c3e47592bbf39f5301c96d3a956e95ba700d69682203a2afba365dc5e6a863dd5b4cad9f771828d5255bb56702517489bef44233c41680d11dad173d916eb8ea109d696251233df2b9e162a37e44616d0c19a2a8a8a32fc353ebb938f158e0bfaa7fafc3913c661283027dd8526fe5ce232491af15d335ec24994ea04c8f62c6f19c89aa7e8d2c9d4d670dedc7fb8714ccbc183055ce1cb3575fdb5ceb3ac666ad99feff613b16fbddb71aca2310d0a7cd893d13aebb6b82b6e46a5416829506a52116aa8271ad94fb9bad57aed547f0ee350a4069c2abc007d10270158f5610a2dada93295577d171bbcc7cb2737455f965879fcd0d63d413cdac982f8891eb6c6c51a29e0ffe1806be82217512df3fb4c3bb1924c11b28a2816fb4ad95cfffcb8084c028c8cad2814dd42e40d81117e9f7ae94b4095c237c9553acd7e096b487be79d311a86168ab0fcc8b5bf091435ea968f9c70bac2d68b06068f58e717267cd3ac49fd64d404cad71200e80e72ddc80f231a3ef96ae2f7a9fd04fcae5a13456cf7c1b7b16c42ccecbd5a1b19c3b2a24532390de9f0e999d17cd2dba7ca9b6003ee2cdbe425b121be3935baa37d7123e93b6d80051b66ebed045d686bdf2b57491ddfcc85b6cc73bc040869440685a76bbd4c27c330c7688d322935730e4f959d057f1c0e96114d76ac668963f56cb73d164957acd7979a0274aac555ee849580137f5cf72a1bf97ea0b49d9bd082ddee04d9a24a8663eb1d4a769a7ce646f192e654e1d8094902247f9738442e8485eed7919a04b398e61e31f117608c231435ec844d19aa2512189772dc0545de39c02cf59163e5c31585b9ceee99568587e9a4a21144933c83bb96cbeb57dcfc83f2637a4af0a35ef3f44054629fcc0ac74e9d22b0d13afbe19dec26f8a44a6bdf062994092362e90bea742625dc530f4ca5349ace5837efc6300608868314b8b57bddd76e94aaddb7c8b3a8aae7922fa2be095eac31e0847c0272e5176cd24fa1b3fec8ed9cf1c9922f8d706449ffd843d999f2ed06eb66ad85c1411dd9f9ad1e5f0acd08c4ce29257f6001d46bf295ba8854fbf33faee2b54a6fa12c43016da5cd906842a49678ec48e9d18dc620e4715ac8ee7154a1954dc0ec89a5406fedb2901e2f1da4e135511c7973f300f140f2c1742ec9ee7a0ab179b66f2b4abbb9df3702960c5e44eaee5aad4da674ea37d94cd5417f558e9f9ae55bc620ea7b6e8632fc11913928063e83d3d31aca72357f6d6adb043255e054844b3318780568321459464ebe1113ac38aba8c25a3fc66f93b33ffafd766998e7131a949c00238d4ba8989755869fc1e993432fac996724603d04b62f5687b28e31f107cee24cd249787cfdb7ff071a070916c54a1594384366bde8407ce74bda266af4793230bbbe3788042de0f60f219bb825bb4aea05cddecfe3c95ff4cf5b7ecced33667ba3ea643e2d4fe2c92bc9c98bc3689fb5276ff3af4b22863cb7a299bb5485f58a258e8d03eb966b1d0a5ff12610ea9a92279a43f080f4762b9f1005aabcd975e8aafb207db199e04e0554c10bb0a9a21d50ed4e2817b7b64dd054510f98a64e13ceb0bd0031b2f8f8a758b791053e6ca36dc980ba91d4bd1005cffa7e8a851497eb5fc13fce7a0b898adc237a910140b0c8cf7a2c61e3f11ea9e3606be4fe3fe19b58cb80fa679e9d0a4fb31ce6aad4e1ec5fa9021a5df8c6374f215c3a6a468d592c3a784804389fc033d4fc78938fa3530a8bb02dbb4ab33863cbc41d61bef79f4a9c8a39c8400e2719179db943d771974090cb0e845d4217b1be37e06d0fccf854703b323c7b54b97fd9753b3452c923a256b75f31a70f7fb9872c35f4cf59deaa441fe3c9112fe1c8c917710d783682a05c19724bce87bb0ba5158091644accec868ca106c7ec5aa434f8fd07be362ebb0f45fa4b2a2763f8969852bb64fc4d7bc6260c7df6166e62cbae31eb9b44a262eee159b8408af530da092eeb580acad871508887324aa7a4eb8bb201a5fe68288950131bb81f0924fdfc6799a3e2ef9316b0a7bae2d590eb1325efe254affa8c5d36b8cde74ffa4560f6bf5edf01063c34badc91be53b495e1115e163de5c3fed8f9ad7754ba5322a16c78937001b92449c3a9a3fb417d45c3b28f15a83c7f009b1d738096daae4d4de225efed5172fbc48f915a403b756b39adf5594a206631f206ad72142d6615b4dc69bcdd7cce134363263d138e1786c15813699a1e23f3ac69bdd4532f152c74dfa69296e0251b24e2dab4ebd5ee28e9358bbefea232d5f8ab272fda5c25e +MD = d2fc7ac82a34020dd5078e6d7bd60b40b5fa1ac12d88c8a2c9202485132c0542 + +Len = 27392 +Msg = e580b825116800923ec193396829edb882553a9bba4bbc2cffd16e8cc025e703f7ee80956773b9d6210bd9ff4dd4d54027a87358484daf6427ec5ef4dfc5116433203c6acf8798ebd032c51387c334a47a34448eac0dabc11fda183f96dc17759fff34cbd10c637a53209f9d9e5dd28c83dff5656ff178ebee81e4946ed2bfdd4671b0e1f66ae32ab0bbafc71809769e4992cd041863dd8b9ccb091bee0fd2452d5ff7d3c509e0a4f1ed3cb77f31ea85d43615942fcaa449329fd1fe9efb17545eb252cac752228f1e9d90955a3cf4e72cb1163c3d8e93ccb7e4826206ff58b3e05009ee82ab70943db3f18a32925d6d5aed1525c91673bd33846571af815b09bb236466807d935b5816a8be8e9becbe65d05d765bcc0bc3ae66c25320ebe9fff712aa5b4931548b76b0fd58f6be6b83554435587b1725873172e130e1a3ca3d9d0425f4632d79cca0683780f266a0633230e4f3b25f87b0c390092f7b13c66ab5e31b5a58dbcac8dd26a0600bf85507057bb36e870dfae76da8847875a1a52e4596d5b4b0a2112435d27e1dc8dd5016d60feaf2838746d436a2983457b72e3357059b2bf1e9148bb0551ae2b27d5a39abd3d1a62c36331e26668e8baabc2a1ef218b5e7a51a9ca35795bcd54f403a188eafafb30d82896e45ddaea4f418629a1fb76a0f539c7114317bac1e2a8fba5a868bce40abd40f6b9ced3fa8c0329b4de5ca03cc84d75b8746ef31e6c8d0a0a79b4f747690928ebe327f8bbe9374a0df4c39c845bf3322a49fda9455b36db5a9d6e4ea7d4326cf0e0f7cd80ff74538f95cec01a38c188d1243221e9272ccc1053e30787c4cf697043cca6fc3730d2a431ecbf60d73ee667a3ab114c68d578c66dc1c659b346cb148c053980190353f6499bfefacfd1d73838d6dc1188c74dd72b690fb0481eee481a3fd9af1d4233f05d5ae33a7b10d7dd643406cb1f88d7dd1d77580dcbee6f757eeb2bfbcc940f2cddb820b2718264b1a64115cb85909352c44b13d4e70bbb374a8594d8af7f41f65b221bf54b8d1a7f8f9c7da563550cb2b062e7a7f21d5e07dd9da8d82e5a89074627597551c745718094c2eb316ca077526d27f9a589c461d891dc7cd1bc20ba3f464da53c97924219c87a0f683dfb3b3ac8793c59e78acfac109439221ac599a6fd8d2754946d6bcba60784805f7958c9e34ff287ad1dbbc888848fa80cc4200dbb8c5e4224535906cbffdd0237a77a906c10ced740f9c0ce7821f2dbf8c8d7d41ecfcc7dfdc0846b98c78b765d01fb1eb15ff39149ab592e5dd1152665304bba85bbf4705751985aaaf31245361554d561a2337e3daeef58a826492fd886d5f18ef568c1e772ef6461170407695e3254eb7bf0c683811ddde5960140d959114998f08bdb24a104095987d3255d590e0dbd41ae32b1ae4f4ea4a4f011de1388034231e034756870c9f2d9f2378872327055a7de2b5e931dfb53e7780b6d4294bf094e08567025b026db9203b681565a1d52f30318d0ebe49471b22ba5fd62e1ed6c8966c99b853c9062246a1ace51ef7523c7bf93bef53d8a9cb96d6a04f0da1eca888df66e0380a72525a7ecc6115d08569a66248f6ba34e2341bfd01a78f7b3c1cfe0754e0d26cba2fa3f951ef14d5749ff8933b8aba06fa40fb570b467c54ce0d3f0bed21e998e5a36b3bc2f9e1ae29c4bab59c121af6fad67c0b45959cd6a8619414b90b4535fb95f86ca7e64502acc135eff4f8a3abe9dde84238fab7a7d402454a3f07adec05ec94b2891e0879037fae6acaa31dcecf3f85236ade946f5ad69ad4077beb6509928538ee09f2bc38e5704da67b5006b5e39cd765aafcd740c7dadb99d0c547126e1324610fcb7353dac2c110e803fca2b17485b1c4b78690bc4f867e6f043b2568889f67985a465a48ebee915200589e915756d4968d26529c3ffe3dbe70e84c682ad08a0c68db571634fbb0210dc1b16b8b725886465c8c51f36a5e27d0f78e5643e051d3bddd512ce511f6bdf3dfe4275900c5fea9d248c2b3f36911ed0ff41a19f6445521f251724657ea8f795b3ead0928a1657f308dd7c7c1e7e490d9849df43becfa5cc25ed09ef614fd69ddc7e5e3147623901d647876fb60077ffc48c51ed7d02b35f6802e3715fc708a0c88b82fe9cba0a442d38d09ca5ae48321487bdef1794e7636bf7457dd2b51a391880c34d229438347e5fec8555fe263f08ba87bb16dcde529248a477628067d13d0cb3bf51776f4d39fb3fbc5f669e91019323e40360e4b78b6584f077bf9e03b66db8c7a1da1c18e0b95ea41a8e1db2afa036fc65c7b6fcb7ec6b6b8ad9093b154266f8ac32ab022308addf2fbb202e53701566a657a1bc882bdc6b34535601ca2922c4d927a8a34167b1bff794526ead6163a55db75151acc23c51dcb4f0d2556090aea11f9166fc651ed91aa000fe0e22965af45d3266764e2fc21c74663737a725289c90f1e7847f29bd0154c847060211d9f2cfc165850e0b3e4c2812aaf15b44d54402568faa1486de342924e425ae8ab4d1758ad949a073291446a2a8030b9407100a1be9bdd3aaaf3b93835fdd76557e28e4fb3c44a3dc04ed3682a8fd268760891ede60302af9c2703a8014ae08068861949ef8f666ca643f9e3f48303a93642796fa8db189189a8a7487ad07c21286041ae2a9ef87b2d9a3d434e05cb64c7464291cecb28c7ba9d2d826838b330dd998de62c9807529a7827f101bd3381723d73ba1e7a3839772f1ebd92298d95d0588659bd269cd938074053d55242e97f4f9551629153cf08860060c14c133849c6b26fa5f0bef84e6f0fd2916d018236a32fc060b77e71b4c95ed5bd494c028f0b9b91ab9d759723d81dd7ffb57635de62c96ee195c307c421bd834ec741d9ec4ec92599d5c99e0069f0c8e5d3abebc1b3ecc3acd3297980b5a7d23c6ef8a7a6b7c3953542c3f52d4a120e0c6ea88a25bf1e278b18b8af30aea32a4ee77b5206701147488a6a84f2a40b123c2f73fb53aeea02440c79911c333af34ddad2c3549e3ba59955c734979f613b3cbd162793a7d5bca05873088c6df29502ee03e3d86cc915f24ce0eb63629ef0d6c299f52dd269bd67a4affac783567832cc1899da0044011916bf929f16499bd0e3024c68582d6e61973351169eeb05a81c18cca18234d0d75c6c1294e2eba3f3ca5b168d61a93555da09f3c1e63ba22b850c66761b1feaf4c6ed5187ef0b70071fac3ae414667b0d1539ca1082cdb882affb4ea1f28fb738fb4c39c364316ad489fba0b59aeba94fefc9bc4a9b29b07643ed6c6a310b9f6ba491b18f6ae6f921b15230481bc025e410c3b3b958d8f0cfe9eba818fd1c0a5468c2a03229b085b83fb8d2e4be6e5994212e96a3e261e25548fbeaf5814860bcf0e9f0f5c81a765fda366ed3ab7cab26ca134d51604cedcf09281a47e21a096be40d882070a934df2ad2ec5b0b728564b279bf0bfb227807d37720574b176d29eb3750fb48e72700d89634c506d94e148268d619db69edc34ff2e46de2c9f4bead6e30cd795bb7898c8a2e59c3386effe1e979c227acb3cc25a04fd1cfb707f1d3ba10e02a8d4d44edb5c35e6b174ded7802904f087032eafc8947ca3b690c8b0523d87a84064ff7a41fd91e25fe53a6efbd0408a53fd2e47cb6b5a14e686d55eab270e4af4d276b59d059df1a76e8f1ed22bb3527a0fb844e2e829f2f3b90142b6ec066d2ea3b68b3d12cea710674971a389e1eb51c15901af99409076adf936f60b1471566f5b65a29388753375f611f07950b783a88d18720d52afd7ec0995f8e29d1a148bc1cf7e067fde8901114a49789439782bc0f3eaa2c493afe9deda302114a9e18f76332ffa0965799f27b50f1600f3b7c1a12e79f80ade572dd58e2c452fb345f1053b28cca98c9da6b5dcc1c04b78cb108a12908bb9f2762e8a2c4dad22c89a36eb42092cf4c65dce281bf205b83b1a8ef86acecc46728572693f34e7b25c86f794e231696fa5426c0b0d2064fbad3e938871953834d0fd9fff21428342d174899e9642207eabd406eb2add5c7a619fd496d1845e099056edb89d26ee48d9eb8364c8abd0a63c9b3524ff795aa8dac6b8cff50cbc39231a0221ed22a758e8746b8403ef087afa006d64f594ee2b8b3bb67076aec1481bcf63c7abf63ce76f77b878d28c2661469c161797a09566f5776444b0db1bbaecdf891653f22d78d18dd0bfbef3b8fdb4d6d5a9603ceeefac0238a95e220a0618d2f89a7fa6e781d12f6ad513c63eb4b73912b6e9ba392a0154aa1ab9144ace223228d079a4f996c0d4ed359b64360ae03b53bc9eb922aaa7f73f155c122c578b85a034ec4cd22c3306be7d906e2d74a2761f26f9aa29e602527e25d1ac4d46d745d554422f1fb6aa3d74f9ad3483969051eb82851dbd60a30eddc8a4631c2077eb5e9b15cc20da98f1a7564c67e6c51c573f5bbb846bbf0c74e47a3ea71758fffe9295d1a483ec81cbabfff878b5a4a90e911f176ea335a13d18b71b18dd74c1e827c10038c770e71419732bd77e99e8e07749234d0278f3bfe10bc408ccf8804074991bf95a1c5b73764c6104b0393e655876699fe80d8685d3e4b42764489d800faa9f76ca23315228d842a0e8f73c15bb0344e7e247dc2777ee85d532099c3f6f620531764a0b48c7c31b0c8758446a258c6fa58fdc670d33659392c4afeed70a5be7aa0cd56bbfc98984d819d0f9eb1e8e24692f2fa9bf9d0677f08aa007df66f4a150ec79c53fb4980a742ef5bf010c651da36ea636a72b2dad7f028e99c10bc8ecb6a39b9a410f7b0661253b265485cda5d +MD = 5d07368c1ea91a707aa5bb20b2cea877d3ce8cee690442a3309a594d29d150dc + +Len = 28488 +Msg = a4a7396144b873af9f174a8f16aed34d1549783af5edfaa4216cb7057836297bf372b078884d91bb4e923e7fe17cd8f208c8f2e8950d98d18d508fe889d3dfae5c2f8f97f6a2b00389aa9d6fead380ed39cd18d1c4c1baae29e59681bb4f3c2b27075f25585fd86f9787edc9f75cd426f081735e4ab16a233c535336d64f48da9c21a68a742c11e7c250b9f4d1bedb85750b8af5ee84af1810c24f70a17e0ca403a6ef2d12af6453502e865840a29df30f94e50079e39275eb591098e5818f6fa3bdbf78fc93d89b8a48de5d0bb0235607440de5b4751922164020146a03da25c58fa0d2f97e76a7b8c7486bfc8f7498a542890e64e34e07d9a0074ef8aaf3acb14319a3d019455f22d24dead9e8989f31b7e1e154d4390d7ba14bac571ee4eeaf02b3544a0b4dac0f9273426b629855f3ca9ec84bf1e11a466a76984e08b5d107f4f44b2ffc9674c92e45db7aa67ba033a4472a10e24e1780241079a7106c3f004066f1479629a196cf481ece5b496a386c646e6c4e88ed72f69fb728dd131fe30f91ae597e0d19bf9d06712e2a0b9a4b4b7efe27dd98826409adba9a18b158f888fceb2f5f4ac68bbf063d63bbc818b4691c41093885c09e84c1e9c4684fd487d42f0e8fdfe98e445ed0eb36b588ccbbedc69fda07578e679064ae7076f47ad81ab28142a6f15b30a1ede16cc1539ea800048061f116d309551c7064eaa83233830eaa105d6a1499b1e489d0863276c2c95f4c679fcb79cafa7498696b73e4df37caf3c0ac5ca1c5b53d4a29ad2c3c52715e6bb4b97e67f3a8f18c47a15e78255d6ec31c3ad0eafdd6818b3edd4ad8a01f8a4610e63585cb861db5c63570d74d1d8281eab0cdd6883c37b6d8bf9332f4fc694343cefabb9cbd7f7baecfb2e79fa08f97f3b55c4fb00ee732bffa0f32963085cb141ad4f1ac749f47c6162a91620e1d6cfff2843dbb751967bb37c6c1cde266474c72cc0f45d4067fd7b3e2bee08fb268d60f4d86f29856bd941ec1c5e33a921db37de8fdad053b8da94de2545f49d8f33fb3bf139da0259c115607271e6193b711e432a32c2ec6d7048d303d286716750386e3cc04b40f6cfc88a0d0c77ff17b2e4eb2ea0c7730c7b01bd65f830ff456ea32c0996efd9b951b5b95a725bb32d3d2646fb8930900c3749edca4b76afbfebc5c5e6325a2517f3778ed93823ee026c4ce71f70b0cbe351abf48f20e9fb2d641aec6106fccb9921786b07e243082dbcd33c08dbaa7f38468252433ced6a24441d0ff8a95a35c37852ee64f54b8a15cb53c6564e90326182778784e403951b1836a11b7de4ec1d4471898ee5afec41044906762df48df591e624a2baced4986d023058194f670d326ebce427e2b735f41d8ce71e69da6af1789a4b25a1d1229f0a3e2cffdc2f29aea508e35086737b176bba278442a0482d8958dcb91ef3204ab93b08863dbce935beee2ae3fd9966ea9e2ec5e4218803a2b2f0e5e9b8b337dc99b78960c688c24406ed1966daa1afea3f4b40d288fa33fd6ff2d53be1a9dfe116241e04192b5b7637763d3d8014bca2c9a006c3eb6f3f9a1acf49243c4f6ee4c91134e4981d0b38ab2a14ec807b0380c7cda63cbb6fad156df6b0372b0c8b542cff6c86e5c65807ec692ef87e4d1b10a4149da19b7402dbb3f998f92079abbbbc5f336f64cfc86075c3f9f5cbf369eef9156b96ee04c769a75861cedf0f5677f1b11802a781e2cec1cae448ec06865831607e81359a615b9283a93c99460235578598f520952dcf7ade9c76611ee708e756650504bd670e001bedd6f1b63570784d149b62621feeeb8f8112cd75025d8597bd76cde64f1d9a719e027ac86695be883979df812f89ae4e109283d17ee28684d66b139d9ff6bc45386386f52c21a4c776251a6ad33c3daae96a168ca32484ae4e66585bd015dfd75b6ec8d4eca0c57b49018597a17314267a2e183f158fea8483dd1e9966178fc8558892e03e9f8b2420a3b39020dabc312142eb414ca132a82553d8eee8684698e535879f788a70529b9016dcc7bfb05b9d4d123bcef4f779814f19b4cd849eb9591a197b40de2f77184b41e60cae7b163c912fa702f79389564343939bf8e2ba4f9acb0c2e26f3023529a734763386f19dd385eb9f25b147e2c50903ca31dd1c273c0eba76d1659470dfd9508acb5e6e2f78d791ea0bbb45d548bc7ddecbc84f8e72670ed18a11ae39c23ab2b0f28bfc6ff577327a162bf39c32e07a40234ec4d3d27681b4ad61a01e755de39f357a1cddedf745c5e18de1b6380771a4e4cb2c95d09fbba6a7f02a8d6da56b9c00c35007a6da3463da4b90a1bcb40c636ce7e7430145051e26279e151fc3a33dd0d2366bc48286ca7d0f70ed35589302380f7579c929068194828b34001b22fb42212078cba2c560562412f73687be17e2cc6798ac9e28877f8b6268b32e836ac15aaecd309d78dbd233e76e44a3e60ad9893e2e3026f37643ccc421ad701cf2dad941c777e509839db97ea0c43f9351a8d059b8d855e0048da1210d53828839fb1789f6261c0ffdf52f394d49dd4e92bd2c4ab729ad8688b9b2f97a59c83d96beafd7e7afa4e4b194ffb7a249ef8034a31791a798905f99547ccdf704d3a59f720ccc0a99023034e9c57a6e5908d0bde70ccf189990c3acfa690f12091768bac1a8d6dd66d66afe5ffae20fdb9ba8a4f5864378c1416b39f7f24d49bb15ff8f2a2e78ee9d740d84841a8ee5662a80704b1eaf469404aed6e9c2f90cbf41c27327e822ac917d905de2aee1ad7d27f0a674305300866d16fa5c35a2e96a4d6a0d2770749607558be0f8128ac6753661bdfd55ef451cdd2c1aabd4db5e607b4ec3c551ef39538e58b4310feaaf02b85c3d4319c472cbf766ce752af2da267df92d6e06e3150aaaaf5e29d161e59a30589ae1d68328182e5f7c249299fb20a7e1a0ae0a00a7911cc8354f11b0f8a030ef6d6626abc385f46eaa56c6212fe39ba0d3f1c5b87f9b676be02d4b3866a93c791b2c849ed399ec1cef781038e6d3bbbf2dc5d48afb6e1ce2c520d868ae39b59e2ab16aecd6c87802a2051b31be95aa8514b6b0f8a99dafc57ad663d23dc62ec712a164065b962a88688a41bc25adca9b3f30e57208ae829c77ca580593e31a6c7958ea8bc0976646a9742e28aa60ae89e3c0ec87a72547d022593f635ef50b26b55478dda420cda5fb5f2b17cb62c8a9d8e320b9f37671f9212f848bed80736e5d30998c84e6c32ec4a7d309e728aba355143c897c36638ffa99c1efde19e5bbe769b718d13de959abeac06fac26b9ef0ed0aa66bfc9cefcf54461ef8f35c487da5c7bf317baa2bf07945dc988f195e55cb4c4e22cc506d8c7ac0f3b9f48a26aaca532abd6d171b76e310597ebfda23ec51d468c41ac9d9bd82d04348ce701ccd4c085c38d06e8eb464d726b63cf7153ee8699b5acd505cebd63fb7ab6756536f93aefaaa8ef8ab336560ea48ecb85bd2f8d28feacf2d1e9dddd4f6eca984f217070daf1c8efa9b7a4c744e3ab9641e30ead8ed7f07a8465bff59a9137a41224e10ec2094b8bf851183dbfa968a4585e124435d1e5d09fdaea4947726c4d70b9b1615f81df48e9281705d956446a1b96c10db86d1b9976a1c344f092f6e8cd486814eddbc2aaee9517dc2c7aad7c1e1591567119f039bb62f1750063560a9a697b960787b4268b40911d13a7224ed26319ab1a591235d086fb66017418275a8572613706124041832935393c3156cb07b097febad022589637746e45abc3a034d302e6d76b9ca3f536d117da69288a6bfc99a8bfd863b6093c3cc1488f63ede02407b19c3e70151f406d09e218387308642ca2c8998e6b78703b84fd318cb62fcbcc0194f97f3759dc65b9e3fd0b27856dcd676572170b3c89dd33f440a27b6c50ec61823b2e6d4d7157926056251a3baff881372071f7eddfbe58ae2b49a04e59c55bc451e2396295bf1de7d1facdc3713a6a8df343c404e83b6d8b6fe6e71e2d035adbfc5f2e21c008c6daef00a495780f9e0a78e0e20a49f0dd2c6d1e92746112d94998d9ae0376c127ca0bdb512a1ae4960d3ffdf4766b6b31f1c13554e98c60619d96065ba02084bb25c6ff3609d065ed36b6ef5dd1c2f7168c0aef80d615988e389259995053afeb8e9ec0d5bd4eeffdf75c29a094e740d55b8881b8d28317b9bb0c47f9cc96bf5354f1e4b2acdcff62cfbe513f385ec4f8d0e8b05f675b6a7e857245ff4d504f6d297ecf4f61012096304beabc448ff01b9ca9e006fd150d473852f81c8b16bca37c83d52e6261d012c9935a9a42015e980f2a85220c267c9e442cc2c3ee60a390beafbab23965aa52ec13254ba9496d18b90934432d2634fe296e3aa7efb480af6060d48d4e82fbf12849df62f2cea7f82ab461ecd89ac2e158a5d41b1788c07a2225b7122a506157fea5ed52a707abb0b4ca928186eaa2e2625203affe640f6b449cd6d355446711efc5e39d4e9ac4fd17aa4aa3c09c616bd7015dd8fcbcba0d7804b86347d579997c1836c551ee9017a3d1feb61e266b0817124718ab295cdb1d1bd0247a9a1559141b6b5d4979a9baf9d0234ad82f4c21b32364017200644ea430b2a985e8c6fb585e05b79dd25e317a335cd4b70d61532bb31905f9f86cf2bde1d464c2780adaa94e7a76e77f4a25b56a0fe613476716f12ffaa8ab67d341cabdb9e8e89e5d91877b5e1d8ed6d9f22bf2c0f18573a9e7a4186d6bfee533c64b12e79840e23b9a9343051e2c8faa415e4bf4797608c63fa50b05b26cd70afabf9fc21563da21603d5423eb18f0277dccf42ef07d7d38998456383e8dd3c559b892fdc2d9ecab7ce61d2f270caede11e889e4f8f4476d9fb2a89942da620f6da6badf331ba0466b3e1c7b3450222aa8315b9af5830df18cb0609d71caf825910a760ae8918b6e9595c0bca58bd0b9ab5807d5789237511b2e2cb94de80cb47e6432e545e414a096ada857fd2860f7959d1d18e4ba3a08b56c5b7139aa164880349012f +MD = c92259dd4bac6e4b5845f21e1001610baaa767d22c0fe7ad2ed753207562f3ad + +Len = 29584 +Msg = 30a2b00a5d727b328265b781d6eae5fa9b48023d4633c5b5e09c2212accd12fa0ab496fb9b7ff9c5a66a5696bad55bf5959a4ca3459d4bcf8da5d6898a6a917996ef46d16d112a808f6062a9e52fc553a6e7e4627ca147c6e3f3faf2d209498f9ef8c7721b5095cc04f0e0a19d1fac7c96d8d06033644201aa2f9534cdd4c0a5e87a21c8ed63c212cec2da682bcd97d82d141a87b211c4eaaa00b039c0f180213e1b5dba2a7339b8b57d57e5d7620ecf3344cabd40ce53e8aa0f52e8f688116d6683822f1ca7832881ca6000e80699c96f0fe6ec26c3796374038329b6c2f9ef285b9811092827c8fa50fca1a8e0c12eaa1e78fbad1abdc3ce854be447c6c2114e4ba8473a1dad02e8b833b05d190d66ac1887d21af8a771813db301f2bdf33a9efab8b9f7af9e3d12a90d1550d806d93da61c59b887c0d355d2c269ffcf15d1e211d34f880680e041cc93b8c94632ef25703e78ceef8f5211ed8102b623af40e037fef13449de553dc9cc820f8b1b112b1df517a3589d577f35f6b55ee249ee6115438744a13d03ce47c1596cce49a51955491e80e9704865532b6b41336c432c53a9f900352752bcee782726374315b5c24375adca928e8cee280aa53f9ea70b98382fb02e23aace67fbd286f091c7c80aea0472248b92bcaff37bd32e6a82c48cf9119cb3ba73cd5a5243d41ebb2519d547b4171fe1bbbc3d96a71327553c20d8f3880ced7215826e836358ec499572cc606be3e21e7056421975ad52e93de7242f7a4703d6f8b24c98195a80c48199963f121f96c91b506382cce8d8adeee117b3d1961e6b85289c984c2102b45057dcec9214626b23734adb960de129b5d55a89734166bb22ab058ce6f69b9f6a74466dd1076f8bf0879f2cba6494e6fb8d95b94a90024d38022f7bce21720f37b87bccb943e4b1ea54097b20351a6b29cf6f493cca1ba930f6c36deceab18b1feb2411310fea6679a131d2b0c89b40a56490433339d858704f696b28987d9c8ad4e84220b2a9300538bf3852643eeed914a1ae162362e162d5c87b6a7501c8e03c70697075489af6df5ab6ee532bfc2ba64a93cdd1e0cc6d4f89a89ac7629a89eb648d08a0f029b45faa526cdb8bf205e432f93f8b7ba2f88753f7a0d7cb97eda96bb7d07bc867a7805816b4458659ce9402e856995be96d43cf7264ed6249743e2deeb04df9db37090c0aaed943b8ee7f6169f942a72c334ca520cf514f378771533a9060aa0dcdc46d3543deeb97cd6df88210cf88f0b26a7c09c74abbe98c0b85a358fa0486cf77249f599ea57ed3266f3d848825bf5264fc363521cee8edd56a32f0642fcda7ebd950d95f9af668716da23bb5a7207b04ceae021fafbb1094abee40e6526abbe83351ac6af186f4179ab81e9e359c95109a79148987ea5f13efe031c795e67536daa9b807d3b7dfe19f87158bf8ba085107a055aa7dfe4019df0ea95121c83c9c7760e77d68109194241709c317023c8fbe2aacc9ba7e1d6d238291ca1e9877e3b27f2016d71972fbd071e08fbbfc9a92671f002d65f25dd86244d27bb4df90d3320c4a18495aebdd4c9c84370c318821a9883b1fa7e26822445a52ac0923ee34a0124fcce55c62013fa0db0331286f062c6c44e7a8d7a61373cefba548eff9cea396167ad4a640305286cf3a5369b80799d303cd8f597f7294a8b4ad97c81969e4a2876a3dc0ee322d554726997dc9ed98c5601985ee5b0952ee640d1e38b6cc0a3d8ae34933d2cf77152a0d2ceb0c7fd04b4312b120a29e52aaf50e07c638c0be70072f208656cfd9ce6238333be787ea6c94013c76bcfa3fe34ef677fb070da842e694e941e1f9fa89d6efd7f6c4cb8d313b2e4d7811e5bfa2570d985d8b7b6fbb0f5bcdedda16834e6e7a40a30a1562a020e10daf09277aeef89d92762dd1bce36bcbf311abee1b23122095ca212b11c42c62a3a20d871acf19ec8dce53d936c3e02e8335bb496b12aa2afff371d541a245f838da83ce444da243b0eb6759866257caa7e172ef1a221ee0a5a762dd9a4454edf4ddd5c4a2717bea2357cf1a53c8b9e9859e38a8d15b568ab06d5c0ac6b14287fe356931dc428d290f9af5e446feecd145f3753b38c63b7047cec7236af1f50f7f69a9dd9ac8be489c3a3f7f070bdaca10699171f66ab3da93510bf1310d57cc9e02fc90830cf78ef1c117b23df7691e0e87f412b450a70fbb7e903cc00c4f088487c9113f15214537b7e44690cb831366d507e6197e0058e8ddbecbc2f6c40958807a2977ec22b395a20d04aa8e0ff341db30b4cefea4fd42f7fe68ddd3a019437676a0d397e420340cfcb13048f504c622d8467ad87d46f053b6d9b9acca7e6df0253efa204dd63b7c1818cd011d8f1e316862c612727a1b7950e7ff882a80fd76efca958e471cd37bc90027c26fdb709046d15ab66ae3eaf2325a5770a8691c903c0e4beab93924907730e692d332e5c8dc5addcb4fc78645c6fa686b2c7ff1c774d0c53b8a7655438a71b37a31daa56091c7f85a086f16fa728fdb819e0ca5a2ffd9aa89a41b8f1c6a8b3681711cd7e0ccdf526a7d23c39aa0e057bae6565faa45f1a3ddee70f9a4804616af7b40a3d0f7699403962bb5acb7b6851feca64865afdf583e50bcbc62326afb0c378e32b9792e652d3bce13b81fd90db79943885da36d70b4b249ffdee9be8fa18d4eac23baf66ef1545505463f11968bd377461a8a619447fc5deba10e0b777566c7399422885656c908b5df8126c8a18388aa22cd846b001641a83207195e90a842ff9619aec665822f480a4cdf4d0392bfddffd29e9ee6e93d5d193eb0eafb3d0729b0072e66256712e9500905cab9e66407390377d4015b9832df1998c3bd0b5edd6b54d1dd9e61f9be381e60eac969bf4f56c7d6b65a559c500b029892defc8f434d685fd4d8562bef4af4b8523d0117dee08585ebf8c08fdf25607aff67f7e185e0aba0f2dc30f1a50ef3d5ad1c98b6dc5fa74a1ce482ba06b69b04b15fe39ec8ac865ce0b1d593080d837fa16f15e2705994eef1248565ee451bff51ceaa0c37385f5a455f2f593fce0d7dd63d60e4c258b43911c2afd8bf5a473286bd3373f70c9f63caef248a73d9f798f68e6104fbe36ff225c5ea5aa07d8967f932661d33b0af3f17689e70cbb7ab98a66b008943832de3d4361d34b937486452382b5111adf5b6d3d2845170ef8f4590da25bdc1be56d2c71c30af330fedf238d46a56b989db8fa635be7689090d665ce6b8e69e1f5288a67f0a11368eded953100b7554cfc8943a9a33273f8e8cc5b294a14d012b89cd186895a2e93a84e14cf3f6f60a04248b3408cdacba05742838eec83a136c6468c5ddb8ac759e47d2cb85142102b2563d3f88734c21f62c5899fb15f4fc69492356e95b75023f907377cf4b3d6560c87201210d509ce91e1d7bc371c5e3aaa1c473916646b7a7c58df9d884945a97e1f222db84005567b13e874fc2f3f0b8d514c3dfc267bc5d50e8f8a9a86c0ade09844bbebea471f74d8564a6f2c74d1a4bdbefda55203ae9974c1d489d0e9dbda8f224d3a4841b225ab8bad0e7891f586de19e8a08b959d4048110bf4dc23abc260254211ee8796f40a033d68b8191fba2ed79f8c47940a4fd4e78169ed00964ec7d84b01517b366680575bfc4f7c88a51c9282b6faa18e4ec7dfe537a7f333c602a5b896f5af28f38af28937c32ef8de43b522bf292081938d44980c818e0cdebd382b316f95e731965f55b9a7b2c8cc20c9f01367939cd491c02a470e3379df63ea036f03c1e9974f1841e061aa7105304b9b422a9d287871cd0c859286136e7345e1be76a5b89af197ce4a8578aa0ffea454c9d69fcd05a9e5cf36d2f8620277d6469e2cd3ccc34a685b56879fac52e88eed29100df2f2a684d2d933fcce11fe15928c8abeae9695f499a2eca210648a4594de5b7a22c5f444c7eb3a25e033628e561834d8c68b80e6d9ae29027ebb50731c581d66e4f61f801efb69e620ed319b11bfafb4bd288799cbe6c1434fcdd791c434da56a21984c1387827c0188607e655e15fd4fae40697c0db49e6ec229c1c2cd316bbf296d0a2b4f008462fb441da932bc9abf844aa6b58fa27600c4ffa9cd6e157294ef46f8f04d18fdaeeee7be23a0d71bc3dd0df8f04c1fe3108ac8f7e22be10012fc8ce00b8bb3310ceab12b7eaf4ec8853ff127d54d112ec79ded74ab0e7d5e60d7a8882311b766a5760a2b606809e92a355efa0b9962a04c84d4e8d01ed1d4a80800b8e1e50ee5a01a5a8572d1f1c6dd44bc3b3b38f87fc8c7e71bf963c5a90f18fe3aed119ef6265e09025bf5eca7c4f673b00c33bd1362ef8dd4cde64227bf8e09d5ee9d51e05fcb7f6ac3d9e3d307d2eb22279197a643832dddf4ae2e94e0f288508c8f0ded72e824855487bf93cf608d58335a707e920b31fc17c3733999cde57470f1bc63883d611ab406662f4429bf1cd9962fe4781000fade2ef75e13a6870942ca458bc8539cf38b5ec2ef8db4ea34c14ebc201d19029ef0f6a44b7605d6d7a92390ad5bb13ed68298ba1ad3897769928aff7aa8ae9fb2f6236047e9723aa54e03851168e0b08c40ba35fa3d31cc83f450e03a41573ffc97be159b94761b3cd9720cfe186659dd6ecf1dd5f433534a91aa47a7129d4a467cceaa90a098e165f1790dbe93cda090b4dc59f41f1773860e9f1c0a400728564c5b076c3561f4e63e1e7097009cef6fb9ebd19fe76693fe163747abf61e41f4b06e14777a58bd876a6b1dd2875cad4026036d1e74a71d7b4f7bb0d25a68feea500db9fb9805a2121a68fcb6529441cca22d15b8ed6278c561723fc7946fc5ffd343de3eb7f00c4df81cf68d86cc15dbd670b1b67a200ca4f525ddd1cdbbfffae2156b89fda26402ac8ff19d4e8d90356ad42960456741e0b39a703a2dd215a4248d482495a210f7dec9d630d05d1aa1056165fe73c27f4042dbe148db3e6dc542b25d57a5787af535d38e8c34c71be84f204dd82fb62e8d4bf0194400877125e38c926a56ad08c359b400f9a350fbd2f218ca369fcdb68f75dfff76c333888bb024d0a4cfc8242bf37413c1458223279351c25feb8e7f0e69b27a254dcc19c05081fd4f395135f3ab1cb12b41e4f9afddd41f9c3c81f1d2ce71749ac5da8e8d6cab03b1bbd0a3e428b2c17ebffee63275a8c735ba2f75a24d22d41e54e34eb8ac +MD = 582590e5d2f49a92ef7b5e9d8de7e9d4fc8cbb14e6ff6ab1feed7015abef3e98 + +Len = 30680 +Msg = e041833a8b69ce50a63d1e3c93ac787f1a679382523bdf87c59ec7dfcf88335d4784520c6106961dd3ff002337af9d83b1ba5125d17fd370bba5f97685f6366be071615cfb9ab71da4152484b173bed49e4c927c778ea402f814313af47b37bbf33138931fce3a3a61a812c5c7a1e25c2944e1ee0c115a23c614f893e3bd4035c8eb5f1a964a265b51df535042e1120299cbc3e357affebd6bcdd4e91b6458c1a6c85f5728b58368bde36e8be9da55ae3808c2c3211197b7306650a465198847d7f0beb49cb85a48eddbebe08635b3484c2465f732de2df95d08f12c8784d7afa18a0798bcfab2e529f053b6df9934b91e4634e552bfc96b3ada41e9494c4de14dbebf6b4e249326b94a2c74beafe1e7f697b8f6495c71f50f05c7447519f2c622b670941bdd05f3e4100184e91fc1bb1c3f7892de5c307f23b00ba3d195cf446a97a17debce1134f46b574d2890dc1dd765fd22db680bf1bf04966f2766eb446b8cdb8d869ebed12f82b83745ab3bf67031cd0c06270c332b29ef113d344eaf6fbaa52cb3f615b3de7eabaa0617e52c2fcc72ba27423a2daf469eefdba8016bbc4c87c23c7e1cc04886b90e357ce2a95c5e749208609dc893832c73cb690b629a6809b7e7dddde1b7c368cb98843b533f0e59fe702a3eea1e092004d420747a5337b4747dbc60ff715c4349f8d5f7142005ab652647247c99000209bd75459d2ee00f5fc5c2ab00bf7acff11c171ed3466bf12ff36057674c905bec4f0f85b2728ba3e18998c8cee9459629cef3b978fa67b4c39f1de0917fdfb11452973ca16862f6638fe5bf4f37e41f5ad410cfea84217b8bf225c6e47a188fe98eb47252588a924ba052966df180f2edf71868132cc2ceeeb421114784617ad3ca0f30ac892eff028487570e5e409848ffb08cda3a723554acb8caa1e7e2fc3ad0507d994574c3f1032b0a1cc74d98d5b4824427f5583925a393f8dce9c59c86661e6201d284687fe5e6b57e74ce7afbde3697e2a69d61ca615aa3dfd32fe31f5521e6ca79877613f162621cadecc72144748ef4956836a9aeb4d392ed4a576e640211dd82a57317f04418debacf06b1afe330430ae23f2b524991dd7e3e82d95d69eb223505e9f2ab37e0ace29ebf12e72b85b84d3304b814c2e4a8d033ecc906fd7d81dad05f0ce7e1c16e6f827aacb4f5953ba5820db9bdc7d5db29501ba72967cee3b82d5ecd6feac30ca7a2c0e7dee969b55cf7e39415ff6b5ed2bd99d98c4fe62e18456d9d0afbee6ed327182b2cae080cb8bc0db3e413ae1913a3eec9f85bce4c424014e47fbc4b7d3a380be067ed7a2a02f6137cf2aaa6f5332aa0dd34368d237e45db0a97d4e11f26fe206e574dc8f581d07e59076d5cd87c79397f0a862b9d147c4b771aecb83ddda0df3dc477f9577f70d4b1ea04d7ac34b9411640f4b1a14b0eeb93d0abd9c0a847d0b57612153742fea0ec64161f57a4113e0a9f2726166d2343c780ba4b8ecf1b7c3f34c7257c13a367713d4b3dc314aabac2efc892e6c0e2dc79f4c016919a436a41c83e2f103a86b3aa3d4d38d6cbab3ca8f87efef88d743d13f26643af51e82225f81e3edaffd10bfe2bc1187a133d4d2381f271341b01eefb4354d9d23b312d518d0f57c2aaa9f8d5d152e6963288749b54cbf382b4b0789baf31e0e1a147122f4fbb84b082380198f5a6a91171b3397837b28cca9ea96259fda561c4cb51592505c7cc8cd0a6aead606569d518e72423f34f45f42215349ff75a626301788b9d79de383edc1b877dda382ec96f4bbe02504925e8881c77d463f5eea68be42ffe71a6ceafeebe15702bc701d5be088e7e1549348f18e5b25f0a210a75b0bccdb0b6c798c54eb7dfef1ab9e9e14c451c000cf67bcf1a996daab484c0b8ba29ed1b10ea9e69442f6d6070b6efd5622bf1eefbf90191d55f311c28c61757ef5218a746b7e784174e482cf5681a9948e294b1abf9cfbe9260841d3090183a9860d5bc22d57bfc103bf7bc7174721646918db2e49feb3c99c3f115928ac949fc7aadc26aed62bb771f0277ac85ff32a46065586d935ff532b1fd6c175b346d65c92721e7a6a4a79421f2c46d41cad6a978a30a107c33cfa552328b87ab618c1974cb4161a94aaaae6a4e0d7e50daeb9e01cf3293026db439cd17d8aa24568f61a4218aa09d5cab0e219eb9a55b3757cb227237bfce178b374b34bc486c1d5f8581b2656b2be091fd6f6b30ab0aea04780413815c88383ce7f312a0282bbee2cd3205388bfbe046c17c3bd95804fad8edcf3a7832d8d9ae91ee38ea130a3f0281e0a26cc9b463b1a26f991e73f26fbd71aa6f84086401cb7d632e04d1b0aaa6e8b2126aebfe72baea700a66c67b529a4ebd3b0da8d7b87af37b7d542ac706b64bd1dc99b9831449dfa9181a1748aa56ca31257bd8d706a33a5eac44e6f45c19f2648860fde85146cb3f4aa02f007fdb2e2eb636610cf42e9b33433acce1b3b925949f297dd83199f45d2861d64cd910c2db74a60b2089045e22cba0a536137d2c89a85b02f9bd2ba3293bc5d3d4c1ddcd61e9339db8ce0bcb55cbdd399a854d4e6a2b5d54f3fce21fcb0a35f03f3e2a99e89d46e17fc92c29f1cb5950b60f11d55fb0993b6ff7a7b26c1e17f33659df6c9717459d1a8450c221537cb232bcb10792c0767f15b463a234fdd4a56019e58f96df9a9a34075ddc0becae26b591162d28e25ce78c3dfc384a31d5ce6686224a0e7daba073583dc0d71d5776e798268e4c9fb33d7d9a5cbcd7428136efa87fe42779e2777f81d6b6ae6fdf6872d8ca74247ee4478fd1697602b63fa4a488e4a7085ca6e6018a1205b869aec5fb59eb25d80755ce6bec0dadf41779e22c2d3ad9daae5eb6a179d7f71c932c542d246fea91c26f99b8f22eabd4ec96b6319f67c3c4f574af06580fd20375c2dfad40400b77389a721fecb6b6cbbefee958e755adefbb4f99d92ea1df9498d62c26b544d0b1f03f1f48e18c17011418434b0ceade8287573cc1047566f883d2053e8c65816872c469dad998169d764e8bb21610a0a6e2f46067e173af56be1c309dcc8965c34793187eddc2fac86c078b340eae3983538ecc72cd8301d7d21e75ec7d9ac5ebf612f4dbf3f20da97fac097afbacf240628d498bd18da6a3463e9ed3a77fe90707abc49a2610956936a3ce2ce5f1130697599f5af379e4e1a2e671f95320194003c552627b04db2f1a55a2f1d467e4fc7b5a96863d2f04b96f7db80789659dbe71c764dcfcb62724b22a4c71d1f5ad4b95f9f5b8b7974d54336b39a44f36bca8d91bc3afb00fc16f868b9655e383b51a6d9c8697689a09da7917bd79af7bc026c32837849ff5f03a1ede464513fa45928cad0fcc581e7e73c6eb0b2eb01cef62b8568803d251fdaa038c25e86840a5db799259fe8f0cf645a44eed6a5a0192813f0d7dd3500c30e9bcfefbe7ea3e1d1cbcb52cd6164db77b9aa829d5b613f0aee1b5df9d210cd11fd19b90e9a1dcf57dde7c50fcf4c7093b31628818cb38530f25b676084e3b2873cacaab979603742766518c17316436adefe2d2dba25901cc93790abdde807d0e30f51699d099e342dc9ba9cfd60b85fb5f91cfc5415f430eb3646363d9c217188b83979657878af5c9c170cee9a43d4a06d7467fb23061fd0ee048a348eb3fb861dcf73734b6b169b42da6b97516a7c56e1d01b1fdb6a3c02b56832532e23d163c68fd236e0da0c62546163b7f4b0b911ec9c60228d75180922cda909f8f595ba38e73020d739e33a47487fa112ab1d99e455e1a3d7db264cccc168d97dadbaf1fb91f7e1ad2f5d8ba1fc09e329be0c377f791a2438f0f95609cffc323ab0a39374ecb3d9b11ebdeeeaf8ad0eb86e1773049264243f5b03ad6065cdb4aea2f2273b63de79b18c96dc98cad3843d3fd1e51a2e7a14497dd7cb770f77c157f92915b593e251fcfd7acd21ff17d426b79e062699a684e5dde838a44964f8a527baf789f959f311e5cc491ce1e47f034a0e4ec08083e692ffa76d7e902fbb44c32a451f10cfcd8eda2dd8e02fb405617b95377e6f9cc9ef57b7d27c703299853fe976eb569e41d24ef1d5224510e7bfc0b54896b35baf497a7c200466081405029b05855750106ab8caf649ae85967ccdf10acff83af74fdc76aedcee3aab32cf9199637f8f89e6ac1b94cce88ca236d7daf670aac53250f22a073c7524df9cdb7f7b0c5ba74ea49d5649326f908b6c92d5842f4794f0fb6028a1c9976111b1daa752f65821bf43112d7c00c02bc28c73733c625af4b3ad8ad506fac179f20031cb89a811995c308be3b5be76d8e824ee2697a0619eeaf5e6c1bf469fd9e106653eb7980488b5fb822b7ec1f0025cb487822e7fd7ee1753187133436efb7f330983455cad5a5d1278674fc1c842a0b9c3f859373a5cc9437465fb67cb692d24833bbb4c7888a203f31991245c0444a3280bb08d15755155af12802a41ad6b4966ca921df2be354e66d4fb7047e1c91f282ebce7d5c27ff81cf95a114e32ca2028b26217a8457760680be72c0845ae7c48f3e6be17ce85a9429cf1a36d93ba374d7593e005d8f8c86b30dcbe29ba55590eddc69637f412e7a47fdf571c4acbfd4996bffd97c32a14e4e654ad08ba5e23ee5ec506d2cd9841d7148bb2c6b26fe0a1a84ec6da9e9ba4699ed78f31c0396b6bf97a6664c596364efd8f3d1975269fe9fca8e24ae5ce156dccedcb3166779e0c304f5b6a768d43708d425c710d7079973686c6752321d665e2fff79407894a4395cc4c405afde7e0664da769e5fe1c1dd840f9c5c14775e683967ab63dfeeeb68c69cfa2ed589212fb29846098ffd5f2447fd2d95a9f52642139eb347448f9b996b04bfe983dd09cce3ea9f1811655c91d8c080c59aa2a634e72cf7b44d809e1472847b0061e31c242255e9958d219e6c5fe0ffb48e83c786da97e172a5c8da2104a4973916a2438195638c46aa370ffd06e310292ea26f7f1669d748f26f390849ed795d4b226729649bf0f311b1968bf3531ded22068768c3294300dd7ea21068e68a34a76c6e65b8857d666a961a604eb78dc911b7f88908608c600dfcfc828a183285d387427db9aa9c665cef85c24098c882a3bea82a0e951a312bf131a6d609da1a767bc9b98e91b3ba8fc3befaf17d36e381228193fd50553ade6628c47543e8b93951ed6160c32c2bac1aad4f88ee3fb353eb6a0cfc1aa545cf61c9248e4ec62bc41094bc56c66d815bfd3a0b2d734bb9c0214adc33797218a5edfc0e4ab0da37bec0a8139924e08443724d740a95c2be71cd0b4ccbf7247d090fa9c9d1f38ea7d06a10ae5064ebfb0d84ced444db0c8a0ef794a4ec1c2339a3d1b89e4a9e4942a115b4d5a40ff8b06038a57106ce91e53ea5cd2cbd6f +MD = ad701bd6fb598f12cd765944ecf4d618185db91447d67b06c85dc330bef629bd + +Len = 31776 +Msg = 740adc5af02defec1954cf8db63e0f129982bbe8c723984ed964aec1a2dd04b812cfab925ab5fdcd511b277817b3e5ebf8a68db593284fd63b4fbb2f9d258336a3fc83ee9901fe178f142ba1fed7f067ae05ed1ad606bc7b86c077ce42af7b8bef386c56f43a7a3199e7e2f1b2d2b7ee8248e2ffdae468a6815eeb87d8a4741fbe2c6fb2b288f785373b544e7dcbc2e93d17744ce5ebd9bdf5d21e43a92bf45ad87f93ea1c12ff7a33b88aa1a5ea9abea719ace94042992aaac318e8fb6d85a405dae1e77a01197854078bd37359c6d788f791bf3313305368dae25f1792ae650ce55f8f147ccee761d05fca2f3dce9aa8592cb4058324a2f7bf839145c1f805b64717cb31aca43023ba0f7021c13b71cfe583b100bcff7d1e190365cd22e9eccba911841ab925b9626ea2ac910a94c3c446a19f6ae6484ea6906bc2f6de0b8213b254a018cad9ebe5942065c64361f850228b648c28887c58cdc292091de630550be8097107472e76d3928509922b783b224beaaeab466ffa7810bc4e06005c5b5bd5a56d99f7ebdbd3fff3a21f78aa4dede71718970a8f54395e280dc2e370eb4b235e56a87188dd3d6f97d913d3f84d2c6ad511135d4430b6b3be8e7817d2ce83db1a725b3e6f44b9ea59f596c1c90586d90be247c5f6549a1766185122ecccaa05c30bdbe506d8ee792140cfcc863ba43ea1d45ccc0d898b9208f5758e24ac68a7406750eeb7618523d700e77b95b82da07e2d7afaf197312d8c6b0be3e43867cb79cee1e2e9a625f1637e06565f44ca088c35c8d60a4636efdac33ca793364c78568ab647037077e9ad0252e64ca6237db2366fe8c15e3fe1da452f64986fc2b7bfe2f8a86f8723169ed4f6b2c5a8df07d87697b87ca6f70975380da15dab6f8f9c1dcf8a94b3d07d1c3b18433010a6aee63e66cfa4e7037191e6fde749b1fb08d5846277dabc26281081e11ff6a7227bc5d607b4a2e90e21179528bdc44b0f2a525fdaf6a969cf1e63ec78d08035f9755b86a0efdc74be1ff08eb5ab363f53fefcf65e9069837067fbc505de3582d3a591965a09bc50bb750219cd3907566e8bb99017cb82d2b40cc253b2cf7c555911504d5c89a944ae2b377d98f0a05809d972762d325d1e40149fe0a52dbf7832c37ef5cff70b1a3f4776043d57670dcbf110f1c74a602fbf8779b2067f65b107c304d4dadc499815d3a6f4e5f7c53d5dda79470d9df4cdd76d3a12fe4ed6c98017cb32a6becd87d9d6b196b75623af669c97c028b282bf30cfc948b521798844c9ba595a28feae32597e32dcfee72c8f4050a6401170ce73b40e9c5280b8b5fce1b8901f9f44d7c963f5107b777b7c80cd8e3f7c4327c24825f156fdf3fa1a4f65af1e1dad07c845fcfe77bd474567e04b38d505cf106356295abde003a87de65f864c7bd9af4a502c81b1caf8afb557c336ae033d927846c8311a203728a768d6256262aba4258ffc6604c9121f2d8f3c70129d1614cbbf0a5eb5e818e3607ed374a8f9ac4f21ac7395b9e21bff982dbecd4bfbe000226af8c9d65e2d416fd05d5a65696316064f9af7173f9db6bedc5138a04626bd46ef995bc5aafeab9e057cc2e3d959629b1f777268051fac6742fe9658a66db3fff5f6fac9f51387b3c638916872149ca9c515eff25f2a495b07ccd0bc423f4a1424158f2c67f53e77ba9ab03d5b1e2af8e87957ff7345f561d4c4ce144323ea4f26000334272b39b28aa907aabdff765031ad90d569f8184351ec78a8d0a2fb76a0bf3c2a5e3ddf2cdd6e7ef6c03de67948b884bc6acb1ac7254eb6bf1243e5523d58245633b497ac5ceffe6b8b62e43ad4a219fe9e4763b6f8f271a2318e10aba2d5a2ffcf16cbfcaf366d4f47f6d75d7e7339e22cf35bd774de8f9a540be5497a3d9d6e59eee2e27d4bb5eb1b7f27a8ed34cbaf3c576bf43f1cfaeda343caf36b99ffecfac144276e34bc8730873be4c9edb7aef8fcf9d301b498e347bd28731df0afbfda1958932bfb6c6bae957dd9bca4e52786696f3d63ac53c66801688f3a4a952f207d88ed5ca8abdebc32544e6c633d610e2633fa0c0e12dc2d98f01067b09986f5763cffa941632982e4280c8131a6a6b9bcafd2a6e2bd6fbf092abd4e28a30a808bda8fb8d07b95293662dca4170b3caeb2498dd62e3bc546dc7c6097bd9b05ea44cb66345cdb68d9ad68847d1b516c16906bf246fc7626e99a50bfea7469bd5a29774cc3ee6beab9d3a3ccb348617e19df7ccb9e5355dcd0ca0da4ed57f57bf9c346080d8d1365f22f7b7eefa323bade26e4de853cc02e24f41bd54b6d2786ee99a164bb41bb1fab495960d8367f688eed0af4a4bd9f630da0e21aaabee8286233ee2675124b610daaa33c17085ecf50bd58d4a3e1dac4b257ca3db3531ea77d1a9617e209ab7340d9c3d85321a6384d1c354829ad5a993ca03b040d33b34c66d502ffab2dc39d6b5e1ffc358a41ebad950916de2b052ad2049d3960668d5f46ec99a678877b27b7c22172644a153097ad3d076c62c4be9d0a58a256f5962844e8c2d3f01dbc584b8c2f0189690c4f33ee37e3785a809ec53ad40895e7b4ee8950e750bbf96c7a5044b3704cf00d8faadf6072ad1c1f13711c7932c544d1fb3dac6fe3822375d3ed73148854e6ff3a2408207bb0af8b63c939b0ea8f15d4958685c255eda1bdac4ba0ba114a53cc96c8f2e0c82c1baad6f618dff69b61a5058f61486da37d2e4c91530dd3d53f5becbf24061fc76966b62041701f90302c937ecb69f54dbfaffde81475959eb394833126fc4929a0a5496e3dc92d168a51867c488db3926d2705786c5a214db65fa54581280efbc851d9099354e8d778fc28b0621c711b9180ad68e2243d8951a49823bcf435e5ea51ac19cb7718780115bf43a07ef58f32a13de1ff3bb2fa8b4ba5f45fc7888e0c8d0ac56e9c84a42e84945c8a1b07975972fd0a490747496c3c14e0f308cd9f39ed3d35032af5010631ef24a95b71db0ddb340c4af1c61efc602d0eff21cdbf76598c9212893337910417c384a7fa0256c42c0e8a5ff520449d38a70b795097cdb93e04232006efd7e65660a46569b53c152b3990ba9ef84bdc7cd29f781ecf45f59cb2bf5936d1e1bdf2238fff879bc8b67ab4e46b874e190642b84486fe0ee6f5eec56d9b8a84b6733435cfdb1c5d018f61a80ed879c9b701d280810bb9fcb9a27c64b64fcbb15eee64beec63f0a2f089273d966b3b112cb77453df6f1742c5e28db821dbc1ffe218cae56cfdca139b8a169a058b97cf800e7059e51ae088139e6ae936a8341749d7aed3d91373570c7b74e8e39f53abbcf00db91b75dc75a9bf5c1e7d1eeca09b1557b0ba0cb4174b458a4eb611384ce744949c09e6d3b2912ba97f7fa5b043e0b90ea3985053fb5ecea0f508480e5b09f24d2938d68ce7d3cc9935c3a64aa821ab1bd4fa4718aa4f00fe0560ac9d7f2be180892faed0bb75887668d187807666d3c66c6859cdcd26c2eba547a5ac6153fb75e376d467d68149863f32b21b55b51957936aee380be9fbb1fd449b05a88c27746096b219e1fef613e36d8de3ef18651570896e230da2959636dff66efddb4dc42816aeae84f577637c0a829fe9969f492c4c41547b5877e378a01eb0084a56ae627e32ed666db4be3192f819ee37af3bee3ccf93fc1489dfea107c9370e0287a3757a59f306e946e2a8c5717a4047d33dfdf80aa38ddb3d4b5b676dedea5ac70ce276f8c890102ba90800662b304f17927c0bd5fd8bbdd08001a755bf9a2cad75079f87c1a2ce3e98bf66fc2c440f454ed64ec7c84b6efc4f4c5e2d06ade6bf9e4d2a7378bf920444277f9fe7fbe6c0e595577c7e3d7d150b93e2306d861751cb3bce6848370a113de8a0ce08b8843ed951ac4099e256cf4760da2c5ec34d289e4be1d2daa984e9e86b8102e91a65f3ac63b3d095ca8a6f854bbc5d44e5e6888a061b2f8a9790f2c63886db1381eaa3c17404891c66968a37acff6fda5e721600f2b0eae281bcd069d828c3129fa0a3daeb24f67846f9b3f10d19c0699d8e35b58a69917ce876e755b2ed3760b426983b319b9543dc32512404a1eb8d43898bfa45abbfa44c4dcbfc515ab4787fcae574ffbee20996bf06530c1e6dbfb0f27d51acedd2032dafd2c04be7d6d4532c101a9e256934271e27f08be5b37b96678e5e38a65523ed2bb0640b1afb1eceb8ac9eb555975dddce5aaf1c9e593b34473372616bd5613b3fd93a077abd92430f0f73add5f8d15b5e02c136becb994b100120cfb4bf45785aa1d4d97d7ad9708ded2c101d0a48f03ba4e952bd86f02b507c0bdc079f6b350acea6f999df7eb7b39a3a5491482f6ce5d589f92127ea559708760edae22ce1dea422d06647dc891eab2113d93eff01fb0925b2700ae27a423b01d0a514251f34c6faf659308d753d9472b66b5b325fd9b43ef720bc62d9f08821da0cc1ce3dbbab81e3e9460bfc8eeaa1b4be3953f7006b583fb9b9062500847883686792ddc1c64a21ace4d29f812220a74835fe380d92e404b19d26bc109458655e720d6fe5abc627fa997bdec2bf9206affd7bb36fcf74de9eb55f3faf4c63d8457db87495d0887f88d0522ab227584b4bdc66f995858d35d7be1a001b210d84b3e70e8c60b90380ae261013de0df5fda27f3a7b1d398fa30303e1ae02a6b7d3204a8a07c4d9b9e3f107101ab4c7fd865a3280a875601e9e971330a9f432155c2114b58740c72e01e7ffecbfc4d9c18dc9b2b4022cad9c910a8891844e7798782ce21b7b42e5e282f98cf0638cd7f46c776c5f28b1569c12d3c08ebd9fdba3bfba1f166469ca59bfbc1ae5b68b3718baf9cbec8c821f9fac995782c656c2d9bb3f3850c313f8f630963617293e7b80f1a75de69e3d4d19c6b1ba182f11e1acc342da3527efe66a8e1e7b1f2c1509cf99369ed7ee31838ce9c364b9684fac9f906b514e034c070910cb36684fad867719fe0b2aed1d478b8e34e3d1026e88148aff5a05d5b6ff747113148cf47665fa1c842f6a2b4f0d783c8cb4097dfd08be1b9530e72fcf241f278c81e7cafe3ceaf95f7810194539e57d3151cd3b89a2fedac3928c61e3196b8cadfb2323b35fac38e671b747ae7145b8d94996db82fb5940e0eb402c91440c48ee0ca9af2452c063cfa8ca36c9383b87db07e0de87565fd693a7bcd0583863c4c322f5bdcfbab9f26199b35753f31952cd2955a4e558751442545d0db66af498d3da91e013fc1b7d52a12d39ad3671b2060a4fdf4b762b72837dab252a50412d769008b6afab476cf97b724e5386d72e3c4749de2843f589cd8011c7328cdc0b51efb491e12cd039ec653d15d548bc1fd64cde31fa2665c287084b645d7527aacc4630125715487c921ad810a100930f4aa7777b3fb1fea54672927d09bda6946c3005a88fd9129d90e8fddf5552ee952fd3900a676b22aa925b9181c5aaeb40a839afd4ea0cb1255f7bf8c250944119ec4dc2700fa6645ae12fb3032fe1785806df9917f414c69c5430637a21591d361692993ca718563ec96b918196d5b0131e7e4bf24c85a57b25a2c8675625e552253e5ec0cc255abe91ab977d991 +MD = 3f2eb4d69cffbbbe28b9eda01e8b34629d7a89ae73b568ffbd5ad117f47290fd + +Len = 32872 +Msg = 7d002e726d958766d9bd092dd805a059c52e9b49922ea44d5e78f60c4a7dca238973120fb7556a4d6c2b4cbf108b8352f160e2de92ea354e47067800feb0476f60c6960f190ea278737b27c72aacd4417cb6fc3a7f238e36b73b474de88226d4298121393ac9162f1736040bcd717b6e8db85125ffe2974dd89dcbbbaffb4f9b0d2d1a56c38eaeba80e34a55a2e060214def4967ba2e38ddd2b66d11fc23ab0b3351eb2e5b635260d50a616b51046ca2e3e24dc75a0f592ccd0e93197603206ec375fb89ab52ea6a3f33b11581e28538781ac30e848de283f02ba799c6a2970ae721b22f5a625e20e5e7a21dda84942d341d1504e2b1bb2a63970f5a9308f929c5de78e8119b96caf0ad9c4a06f182c73e75a9711c82cd694fda3524863e2c118533b57b78067bb0870e0763aa31354fbfa9e91dda08fe88dc7a7fbf474b1a0a50a9d1b136aaf31ad3914b31714d970cde423cd0c34c37ce310157f27d37a95e4ec73452f490e74ffbbed07c004c8f48c4c709517f55618577f72486d00bc353a615472659be4098281dfe0b0236044998c0ba69b72c62f3d5e24d44eace4f33811b70f40e3ee43d82373ea81d13e05983b6b6e013d72460744c3cf17088354406621886ba18bd863093f619f9ec0abead30657e3a608d167bbc58580d415dcf5e71a8a20652b2ba5bb990273fc86ac03db62f0ad5ce875c13bb09406702af1bb0d086119af6aa232a32729a97b0e8a95cd07c4e8b2af97964d0b77026d2137225081c9a1d0b8f07c685063aa8ab6cbf3107b410057bcab69583cab1f3ba711ae5a0d107389a48af563ab2cf1bc1de4ce5e23f19eac9e45bcf5caacb76c1b15c17200c1f92aabd6303dae02097fa26969fea8531e31d2eb039e4c08656efbb80e31037a9d443d66bf5ecf7f6c55f2ce688a5ef1f987e90fcfca272aa3b4c77ce72f9b96ea56d7b0e53f85f194df7d983c89de3adb0f4f2893f1e29fecfe1cd8eec63fa36ae31949545867f51d6cb13b7865acaa1d4873c9d2be14e4bb7b5a60779d462c896960948f51fc16608e1c3c8ea620dc4ab405681e87247599ed0e8823fd659ee06a5c26f884a8c1f8d43d2ff1d3f12dede26297d9d597ef02a3b7d4769f0476ea665a752299049450af926a4477943b714419bd8721f59d803fd4b9e1dab94111ddea139fe785ea02a09a9ff8f960716f69a95dc904b42d8d21e3ccf838da89f1418966b2f8a34f8927d41571e20c5c52b3800cf1f65a0ba3fa73721c520ebe0321c7031e54e3315ed5cd8f61c9fe78a5c24c2fa46f6db44f19f23de08ecc69c20f115d3484dc3bfe1af5522b099d42e3164c5a52e855b3f910eea4c77789f9a859f6f997f0e4dbd167da0240298f4795102ef18ff9a8772c6fd73b3374cdfa30a2f64cab31937d836cea1443b23af3265052a9ae0bdc9a73972a65d73f0ef7f57a8deb00bf7ebd8e6ab40c983c36d2314765d74f97788a492786b9151ed35f61312c491b02fcf85d01a65fd01fe9612075c70ef734f2d327814aa96f9c91bcfe675feb6c9494da69c26f826de5f92c8e6bf4a5176ce1e1993504bb5940f08d47ada73677fcecc05f2d4e18d416bc90d58a8d5e2297ac4218c3336364a4464cb74480decfa45b468782e087a53aca4a8051df8ecb5de87120bc5546142f2967d7fc8b38c61366c98d93b55343ca9896396299bb5427fd0b3b70f8b7da5a008b241614d90dc295e5dbb03b10523eae104b3d1a686f7e705cd3918c4d49ad72132621bc44095a7f17ec78f023330f81554031f02a7fc9d902838e9e8ac4a1e49c48bfefee4b1378dc5a4e632078d5a8b1b2f1a95607a29d78c5d88dd4eddfde8326413e4c45b629af8fa1027c95f98ad21deca48f9991444c150ff8d027afc664294615e28b9af80e07316cbc1d13be22db93804b980e43d8eb856de1049a42cbdc4f05557f3a6a845b5ff043708ca9109686bafea58242cbd3e93babf737ca06a9bc9af9a32cf78ef68d3bc722fcd247b926b32d24859781489c00858200d2b13c2f356399eb359a5359bdabb6ccc024cdf4176b9790d895c42e4b02377dd367ee076307c5ed9b431c45e465ae7509344f9f462e912c7c75c10089968a17627749e5b27aa9bc9ef59bc24e897cae03f2a858cdda93c109ade9c33ad6fc66067bda4a9220d7c0c74e6c5f5a8b93a056ec82e12d1401f6f6aa88d6dd37f0c215f21996808eb2a29a99f89da6e0a614688e4998d25f7e26c9f848cbef3e29e43766825a1c38dcca8f84eadda22d0672bf5477105c116ae8fa138412ff6dea24e1359f15b3a3b8b12c8b9dcfeac54743c1db95c838de5aa61d88c53c7c2bc41c8a0bea59e553d8fee80a9bc4df4deae026901020d71abff69ad4a6b8f40c4a23b845de972fcdaffc48ae6f5cfe2b640043fe90dae55b2d42f8638308d583dee2e27fe63e0175b031d4d38308c5f2350ca0837226b2140523ccc204bcbf3714c2af16bbeef8e08c57f3167158d516e07dd2db4eb4ebd9ea017e8c86351f7a6e5b64a6ba0a849296a759e3a4bd9a2e08cc41428105e1114e84840f821254e25e05a9ac5b21131061d84fc7b7b7838bf0807275b39a305e94f583e7a2d51de36669e49429b352ce70436b3f04c73fd53a22fcd140d268267ffce49152edd91209f0bbfaa0319231347122b6267d1d7e683c36d1d34ee6ed42032c890cccf4d2db22864c594c7ffd30fa0cd98739ab0bed24b713c5703b379d90d25b4b031fca3c87da15af446a66f8469ff5c19d66f24b850403a1e6e379e53e6c749820a85cb0893dc33cb9e022fcdf42a74018efc605d5942de3036e48bb6451617e963d0ed9bf17e16c2d8fa5a13c9b7a9d2ca3fbae8eedff23663a08729b27ae58e43c551a820f0cc80fa753a7d710cc33490207a81977f3cd7fe55dbd4b65b7c19b24c3e58a6991dae0f5d153473938ad1ea87e752dd8a86bc0eead0e0d821a531b94dfed30de0d0f41c99345f57b3c64edf5c4a804768968c9b47ac75a134267e5eb0d740dc2faff92b11df27a6d33e567787eb365e8134f0ae54b7ba98fdc7aaab5d12c79ced806643ad5eb4e75dbb8fbbf0129aa83e2a904df93bd845e2525aa83cf692d4810ce26d55f82da2b805a1b27f07d4af053f13831e7ef7304c8d385c36cdc60c551b16b0f1f6ba604ce435651d110dfb3f3a2255abc93de2a442eccf31dd8ecdd075aa1469a085a78120f3dab07a6d1255e464cd8864d5e250371e091670109d5ae145a1a53eb302bf80821b21881b7ead0582f29d97e5b8ba357513cecc74075b288f608d186ff66ecd8b30598440c7b16523ccd2aa96ed480399f44039e3903b1232580a76df0df6cfb51f3fb60373c8cbf06410e40f08646b33b4530185c26367d391029f2bcebf4ea9f2ba658d0c590090c13d8f79917533eb5cf16b812439ef1d145fdc7cc131120eb1b4da051acecdaceb43f1fb10e32468f201beff3e2672b5e80775fa6fb5e28d62145e94238ef8eceb0852be0e150653816a43299993b74615e4b2cc5fb188ce0fc23762b10149f7c876fce91375a1530e164225bce68776a4dcda1b198fca78bfa5ad964b8f8a768a7436a5a56abc11a3ec021b2f89aaed9cd9370e26b571337ba70a597aa081103ae9471a4e5c213447d4cd347be2e85405c20fce0d8d45a94aaf94d2c49cf76edfbf786f95b3966503b6e997275b0953e87fab82567d0d7f34a6952ab4ebb53881dd11cd02d8e44cde7a9f6ebb5ad4914cf753538aef936041725388cff58015282b5a5b1e31d390e00937dec04912b739144f69304a9df27afc17159f2323addd919a4270272ada1149f911bd8f8b6cb7bde6ebd0f6f4dde62c28f8abdb64a9a7f71ba98123b3d17a232d2f3a940759cfda6101f35b60ca8debd05a7b860db18f4523b9d78b341e227f1a5fbfc04e26885408d520e1a861781f5563988de46c9c63fb99fcc87668114609cad57b277aeb11238cdff09649aeb1003a8956b283d639eb7378434158505e4298032d5cfdfefafa51b8f0f02b378a1908d64b3e9d45b03a6cd1635c96e6b10df0d23eb358cbf7d54a34497fae1c90e8f408d35263f2ae32ae918f91c9db26b2fac916f5335af1fb9fda630b7b64adb427a655b47de41c19613f31a69938a478e0701dea35b1ceb57932a65c3917c8c7c9383b2d9223e338ac64b064b00415a9c74fbc5907da784b00c57b39913ec9670146ec854ab8e9d7b8877493b347608bd9ef590b51ddd5055b1a486b2be097ddf759d0844faa183ead30e5fb4d096d673ed75ec9bac0cf2ab3ba76bbae051c71d4f84ff2460157b4b2e86b63245324841e8f3159ea8d4d042f2b6eeec3b53f6ac0acd196dac68d82ef356e95e02c6d2ca0a03c838a4c36d9f8f797cf11f9e812e2fcbe39b100a4f18da256572a9d30a5ec91e511420374f235a5582541d8ffaf63707ea373b78347b4b48b72aaad55382bea96c9b9bcee970fbe1bb7fa5b6d8a6a90799cc9f312cc8bf575ae0764c42d8534b675987e8c10aec9474ee58918eb20e518ec5bbd39ca3bec7cd2e9ca65cc21f5addb865236a4394e44b2a96ae919adf6c15ad01ce087eb2109a8fae8205c28b8e2c42c3ed49cd8d679abef06c85e384bddb0d019ef4cc41d82f6dfc5de27c102bff7314d4e40b5e850015f669e00e96dd5b405bb4e61ee67518543698573155dab3e3f848cd8f50c307ba0915148e9e30f2f140ae60e9087dc1dccddff894c500e5ffbed77acc3ca81e35b8fcb7e6035f5e8a80e9d9bd3068d85222832b18d6451230f8ff50445abacff3769f2ea76eceea967d05c4fde6bcb87ee520833001fda522372ef27a3361798dd26b0d4518f6138f9570c74da3efde9d8646856ce0c12b4de9f4e5e06f42b75f4ceec831ca6b85e07ab9350ee088d74876539631fb06110e91df8f1966b5060256a8e40fdba5ae339d5db2b434fe2f0a45d65a21a953030ebf4d7287a25ef1f18007d531c52af8f36dcca4f009e6425d655d35be842e5da8d2dd24adbaa6e7b749ba304a2f61f2aa7c84a034e7a7bdbc6536bd6b03fead777cfd0a1e080373ce240e79bb72e127b33a2428e556d8fd91c62155a9b15a5ef50e2bb73b231b02a09f9315f8283f04b837199393cfe08e87f87b931d14b80e9c16f7a097845430c92cd69992c7c21623e3d394c2cb64ed097cc3fa17969e18f717cf5ab5b4257ac24c57891dca20d880d0e090f4c1bc9590d388ff3bcf732a7091414a183b253d068e7448fbb7b1d8598edf1c9c5b7e24a89d3926fc17edafa303cbf32171ca141053db6dbf191b72086e1d9c4be12ff6db2a62e5cb18641508ffedea73f09a8c7a4cfb6bca56c452280f3a94660b28a8831b84c04b395cf71cd6159482500d029eda32d7c00922d542d2a4998d221e964ad12d5adf035ec24936d185dee89813187c30161298dd97b368ea2023de786c9cfbaafa08fed0032892b032ec52c23a51b371cb448e5af6242279acbc98ac77f3fbac425b945736456a20303d0721e4e500564bc872019d0fafe1a3d9d94164da41afa8396c6ad80a3dbfe2337e2dbf4cf37c3c30cc87d8c051a0b9ee28ddafca7e03b044df7174e17dcddd72305c05f40d5200fff64455f0d835337bffb7a54ef166eee076117985baf8967bc61365649e562e9897dd811b742dc505d68601d25c37b8aeb8a1624165ce91b2980a6a395717399d29a9e6aad5e8c31e45bf31ff0f0492022fc7dbbf1e9e43a93ea760cca803a670143ff3297df4d217b5d9b22f9a4c2f8d33fb2259460640e2125105a91 +MD = db4c07333bac4705998d4e084537a4783e8870fd1aaad5062f42cdbd45a77469 + +Len = 33968 +Msg = 9500a99de4d90de3fc1319d61efea974a1a17b0fdc09354546e1aa33dc4359e6c3ce36122ff9ae0783a6e5e0bafb42fe056d2db5b51d17445c68bb0b2fb9a4f8afa2f043892c535bba6b5f20f65502524bd45049021982e7c6343fcc08e11bc8a1a55e96b91a06c7e8870ffc9cb4f158bbfd6b3589a47f16cb6cbedd2d63c53fe1ff0874896cce3357257ddd72c218f99c1006e0136715b9b438bea866e6ab43b6d77646bfcab4874d6b322c42247e1b3837a9b2670a4cb9c9c1c9947d12d3bd6a55317224dbbeab1381b54fd2852ba7d598dd134f342cfc522f66093891479643a3c0628048f687f1908eb0ea8b2886bc5b296b918dbe6b97aa1e6f61080fb48ae6ab7c9bb864042ec046b554de7c9e35a91622f6be09eee059772fbe22310186497b2a3cd40f08143864c8d7272fd987aa2ba0466f156e7464fbaf1885b76481f1b7d32d44ff7ce92170503a0e4a1efc85f04e4947ebd19cf4325836d9a8c4c109e7de34af3c49f6a2f2b5463ad454da63ed92c6ef9201a031a392e2c70d0b8fb793b51abecf5583e4735ec354d5656a6babd5870f12e4c842d6c6e2f6ed20332344bfa618bf8ad80f7bb579035638f4c6b180524e74645b4f535aff1050ebf5778164a26514cf3c4a90212ff05db5c09b87f9f054bf68a382a3b801ba3f541dd8d30cd44fd60bf9bd3c0aafc3f5c41513b6aa29cafbd7e6014d46b09ec043f270c11f067c0e28559106d8bf23234d3d56c5f9c458319b6df4d96ed464dea0bd67d305fe94c40d99ee76f428b8f1387e8b3c508ba5689b8084cf9734b49e53c6e591278540fea20cfb15c4b12b666d21daa416445aa8bf67d8b82899340a44551184eb6228c6cff8e16ab124248ad56d6c83b3b81ef9ef691a1c8bcb8f295cb21333ba5ff3237ca3c7fe24484a6656ac69648faf9a6413cf6f8127926b0381251426fd42491e9156d65783e44601d924f9cc12f176f013e2017164b671a19cf53ce61ad4d4bdf65936ff37c1bf64471f4245a44559a6d7e7f873aafe480a966bb2fa7bdd390a94f40e7ea9a75e9586e36f56ad74eb8c48297c106133984655cf9fea8625230d516f865a405dcb9e80b8a6889547d5ad4cefb3cef11d0b5ec3692a3fa57338cd1611c81d63adad861be80f61c483bf0ecc80c838c3844759c7807c803f902052cc24f94e7c5dad5641bad46ba2f350b9b125e1d33d30f43f485dbc35bb4584a459ee4476f2367215d9751a2e985e31b5e1262729c8e9bb19304913e783580ccca7b8cf1c2d00a5cbcb620c310c8b0a0a46cbc1c1cd7644ee668aa91dfe915fd19cc9c2c89583ed81ffc9cffc674382c1c75cd723b2a036c6d268a55f94ba26bb226b46039286f33e5cf28e17124e41e04b2093d8e12f39a95c2d2f35ad99089220e483538cd35e0acc246f0b7374f072bc601b67c0ebf7a0ec1f7128b1f8ae5f7d7da043eb30d7ed37a89a5ef47d377c01649758b99b15b26a8890bf089dbf2a237ec558176606f083c7389bfc30bd080274303432093ee8beaeb7831b50e4f9f92f1c1c783d921a99c67147f2562b1da7d80d8195fb1848d0da0cfa50dbc5d6e7d7ca16767c247461f06cec40b728c4d8d758ca493a4bdd8853b7ae100509c8d5c0face7aed6304c38c52114d1b5d047dba3694b68e80accf63e127c49559d8ab30d2cdea56f8d4a8e14a3f814a71e57ecad16944be5fbf8b50b2ebd2545c0c51707a9a30808aecf6387dfd440b0d6fc34c51d05b948f1da6635184a40abb6eb0c81bbdb233c25297d913d3fe28d9ab348bde5263d6b9ce06e4e77aa07e1d06ae7fddbfda364810710c334917677ca0bace9e76c44d84db951b9b53307a2bda34dfe7270f53c32e6e1905e8f7919f563b5cbcc4e6c1994b394f9699bbc48df52b2e627db850dbb27547b237076ee9d6a07e5ec432fa9f26dccaffd3a925ea5c79b5754a3ff639a66de062bfadc50327d27cadff0ebf3f7465d2ff8a6165ea1908bc49140b0d8511402a3c06525f9451b89ed0fce3d9213ebcb0be454d4c3632be8b0566845d66fcd56e69965f05455d392cef431a11ec8cc9ac638cd4a276b28569d2c512ad856e14f311f73a7dbe523f6d345d192d4864740d17e75e2e519e44a0d8bb1dc78a6fe5035aaf4d8fa638b1aac5d14af5dfd0a51d01df53b97000e3763ecf0d711c0730e46f48ff05a618762bca27143356d744224afb1c0b7bdf49342d8a4a74e33fdddf764ab7a665f978386ce8dead5881396519c41fec19446021cc723c98891ed43c983bdf398ce39e19d29b122c8bd76c2e97c1c524f2360f8744114ca4b3adfe43fca5de87c2ded01526c8177897e0c5c5eb7a767aafbd3eacbcefe0620bf3413ccb0f1c58b0f3f6758df7555925a52d713f779bb8f8e1d5d95d92629839f8866e2c020173fd29f98231b13497dd2c8a7bb8419aa474abbd564f84380fe5c4b6224805f5a25289bf813a7d1cf9667fc62b805fdd07cc22dc6bb94dcc8fb660b7a046a060ab571931bdd0e4754969a6c7c9bf59caa8a84f1b60c37384e054d373304f5baa57b3e3377d196da74d8da7779d9cb8cb51ae38627c9780cac96825d01a8bbf3b6e0fefba0840a01ace7b8cbcef400247c889e79a095afc05139a5eb8a521537bb81243a0a76b053693da5d8006d3c2a6d6df64a94d376d9c869187121a3a9fd3fd65e9d3a2c32564665320aa2b7c7d4f4359b57991545df9eaf6a8c6c1fd2ca904afe939416f870a0d8edf22a663bdacd79ee4f11cd953830770c7bbe2938166969949bccc97b3925132a1d0bfb109245a57f9f838efd8a2a5a8eedbc52327737bcb13438a653262fae76f9cbe8eea1f932bfa782bbe73be8b45240db2d6a4367bec4fb5c4ff8be4d057506eea21e7054bc3f1583e6dac3f82f07239f0d482195da403fcc28d467e9b284c2e8c93883f4ac6e580b9240b8e5251de47c8444883eb9d39ffcc38ec9a22026bc4ec0b553358dddfd7e40d1911c30f7320824e7fdceb7cf8a62a27049f2e8eb61852b2d74a3db0e647064d5d319cd336aa661cae8b26ec49d9238416f58773341206b095ecc0e602b8690f5f56a74431cebbd35dfa649332800074aa04f55aed9b4f2c1782ab273b105379a8e9aa0b6b75cb9e15906d19be830a21493340ebea99774ee672c41d9a380db3bf506ecfec85dca35cb50827f2ca86b37aec2fcd32f6c4408926d46e2618dfe62cf5bb39bde8370abdd1ff65d83ebf52c6978ba9cd987f278804a2c2e898103a783e59f1e58424fcbd4c187a77c5fc24b49a1c26c469ef2e6c76f8c2e6a1ead62a950f9e6c43eaa1e68f1c0fd7488454cc5eaaed1e4f5e7abce39c152a19b3e3ca61a6e85b0bd320bf00d2cb01b0a008964bfda5e334123600b35764bceab488e10ae779b9c625a1d0080457fce398699bcadcf71cff5488c14df157a2fa35eef6f897f68e5b294ea210785ad0cbb49e6241118bd0986c98851b3295e6337e3c9192810ae2b2274dbc7ef77d864f3ccf7319620807e7a28fd784e2c7907bd69b3a426c5bbeb367c6a6bb49682556772657bb9817c9d33e953cf0c894a6bc87337a701f91294630e2e93036c2b5caaec8958d7b5f1f4687d13ec7ada532ddd72bd88263552c53ccc80c4486333f9229e0b5f9d2891028c66c647259a13bc60facdde1004fcec281a2975e0065c99630944066673ca55f448e36579431ca5f76dd0ff5be26177b989513e86efd5ebe0b0cbd3c0021e5d4465d3ddf26fde69056e7f92665820f6658cb074996a603f20171b4e266dfd86f17040072d6ac9741f5f120ddbc0dbf6c0b6cfbe94006c21a5bebadc2611f8619fea908796de7e55a9d240e808c6c2e73f79f773036c5a21e62a13143b889f8b84275db5ab455d9c394a84a799d4a6464668d04863f8cace65bbcc7cd35c435352c8f037f709f7a6422a45c2eb74d6a289e5e29532203e65a9163f8c89e794579041f084e6c6cd1259140cd09a21d47a5e8396fffa8d15a634bbf4b9cbc4f316b124f70316f65e4ef27a62370256303c58b465df2999e10e7d0f848b257ef00f29d45c58f4032bda82efbe9cd0ac7a76fd1af7b94bd140ecf693577703700baf8ef298ed0a87a643aec6aa48717f03a8b0099514edbd95e045e9e613f232b68644e24545b6fe5df8baa18de061587c400612e6886bd95086df75d8d88e418101e035e9e9a5d1d3885af301eb2cb334eb83c9647a529f112f17c9783b1426ebd0d55fef4f439c7770f45d8edf3039dde9ad9f97614e894867a3477cc2405d6741b8e2cded1cd8ea210b238d231836d7f8e7f7e7e3ac2286bef6822ef47f5f73f2ff512e599df17c3723f7a55d4144a367c774de67e7e52ca3760c37484da7a2531d1d590b5380de11c34c3fe447edc0d4c0a8f364ae6bcaa3c6480e4427b062f0a6ba0688ba01605f6d93e56e989cc0be67d6cf705c00e13e5bc81c6e8a14463a00b99f484dfda36e87510e42cfdc238331b0bb016d5ef0e1aafefa2e014dbcbdcf8e8bc08bc037cda52643073a1659d192b95e9e7ed08a1c386f201919c746fa67cb648800036dfb4b660c3273e5e4181f4312adfd001d7c98ab1696301b755e7dd2b2152731d685eea2c24b19c542d54bf08fc664581b512005565be0a4b8785646ecee8dd601ec036f1db7783f06778d442e6e41530458733057a0a81d90d6a59a8d7a906a70ac3e1d771e3bbdaf9d77b0671c108b88e106aea32af2c08ed7c0400c5fcb699324d35056d5c0bb9ea58fc7c2366e6be9896ec2c1415d38131a5ac9f1e4bb4dea04778a457493d3643e29ecd873977ed6cff02f2a8a540ece1cc9bac6dfdc91f5c9af3dbb81417f80b5fab2122a383ea1135f46477c53af003d91750377abd046c2ceed3172462a84ab6699f7e0dd1608f1e0aac08de8835a1b369b306295834dae7b1b3fce1e5ed09cf217022dd2af5efa48cefe359f364c244d9fc61746158aeb283a4efb36a704f921abb967d565138aec158919c43256f73ae54d1c2a217ee74aece7902b7d824e79ea963531d1d7223f20c9911401faf2832e2dd7ce11aa4177858213696ce90b6f36210c94701a5ed6736831fb1fb8a4babcf0d08e708d7822a6b70b7ccfa9ce7620d25459ba4daf368fcd82d606008c56242e9cf7c8a909d0b2eedee24034f6233d32a31e2af191d3d861fa513f7327c9f64fa396748d65065ca20416592b20faedba8f4e4c968532dfde0ee93680f59aa5cc7af72e9b1837e669119564ecbd61b4e27f6699bd17d8189a470a85aa744ca53d8976316291ea02bc9dfc1e0a4a0c1532d9f39cd5b838251f193197503264871b65a0376470911414ff96cef4553e91344571b060e4d757e52bfb0622ae56cdde8611ab2122d19cfabd11f24b4d9dbb5f386d9eef3c4a5374c5c33c9246b7ec0f6137071937002fd66cda427fb18df62c394392e11ce59a569d26b51fa9ec64169d7cc5cd0bb12f50757c29f22fa3d423ae9046e7154d8f0308920a3b3688c89c817f81ad3f793dc16d640342f663c7ce2ed0155193f6b3f29ea1a6757b017bf9b3aba54a40acbdd1bb2e78f2c4325394309fa8c13755abadd5b2044ef5eb00c6ba8dbb249de031d9f527f58207b40a0e3a3b5bb67e0ed8bd345fce282599f98bec823dbcc5982c72a20d03614f5d5da4c25fc891b676cd7931174ea188b2c8a1f045978346592014283a1d20f992c0e06f5959e39f11ec9a6255104b9db9f0b13c347308ae979f371e3bbd4194f8d65977d48a3c8684c8693eb5ad76e313f42246eb3acd5cc80c73ea9e7e33aff3f078923df40d1b33e39e2c9590c3e755558d96b66941df8efa2313beba77b918b1b6451201c5bba3c081c29144a328f2974ba23288f6b540eaed3028fcae3edb9c9ae6ed5e06e658e1bc872553a516803bf50fec045c6c82413ab669df17bfc113bf1e2c433129c7b9b6e0ce284a3e62b612265f85f363c7bf942d0dbc64aa4da96b414b6be +MD = c18c4cb65c4a0c5d3a5c5a51420821dcf955112348ed462ec60e14679ca43073 + +Len = 35064 +Msg = 05b29d75d5e847d4e2884f4243a09dd7478e2782ae65c2931892377cbdbf9ad85ff7d7ac7d0b8eedca352143ddfc0b0d2a5773a5311500e5f57cf0eab0316417c558fe5df6fbaebad7b0c90082765cd88de1bf0639776defec591258e226e6701f1c3a11a8805043f24070029bd838415872342e2f51afb8e66fc84ebb65c8ea558cb24ffb621c8f042f3ecf8ee8494e7353faa4796c6e48c9083855a3b8b18e4ff08f9f5768b9a6f3c35af1c56f3409c6cc38f0819053a87f6a8af402e54963f690f889245cd090a945edf0a634a47a3a24169bad8405dfeedde7b440b5397130b31696ca0408550cfc1e529b013fa8b5a5bd2c67122df500ab771cc5f029c0e6a2114db1280afe063216a10b9cad9b2095552b160073f39b1a61b4f95ec05901a6103741927e937e2dfc645ece975b643d052121177ee0a974ce0445c6a74367053bdae3090a1a5b37f924fb5fa5f167e5f695f21ff7c411ffe5950ff286860207bbc0fd54599d879635684c177e6413d5500ff0e085a7bb04cfeec0a8042bb8f6b871f93c1123e992d7b8b8becbbc4f543a178322d1928fcab397c1b1c938731859743d89dbb56975089ca71b330102abdc3613ac838c759bba1979d57eb81ab7c75033035e5aef85ef9d81f75f3c16235ff30847429e55bd0bfb4fdbcbb095192a904171431a630cb542af1af6757202ebd7cbbbb6cf1779d0c5ad8d572acc86a9b9d19d31fdad508114974ca1b2fe90a769c2d08827a3172e00fab1cb2da7486c554a4dd10cb69a7c9aa25508fda217bc31564d60aee1df4f339d10cec20ea69ceb144acb4e6431cd5c38fcd25d46dd52b7effce56dba195be6007209f0e9e76104975cc6cca05f9ee2c20aa8dbd22b8f84f6a3c06b140c79a18a9f23bf2054e2273a4a6a8c536a14b5a648317d2e499e1fd10b99b0d901d2eda35ec5379b3548dc68de6098639b595c4e7b164d437fa510eafc1645ef408e51b378976142d2baac86de50f8ba3a955f206efe53f715cde0a83ee2314011d45622b64044fe72611dfd13e1b23e8fef4786e8929633523d167298a37cb2bccc8259de69e8b55e65b93545bcd0d9e1909ae7b07a1ee0801e3ab2d3022f2f88a060beb8b95650dfed08963c8959727aa0e3ab8f5df3e4e597d4cfb7a6519ebf7575ba0ed995b83b219189bfef56f0a046a7394de31e29c9d16d310c38eae6a7764bb6a670add3ba2adc749896ce3d9caa70fbb2b5a69576f38c409a5f03f188c869184927a78ba63071c08d27c940b6f5c558857b93123326ba6429c4a2a6ac965749bfa68ac7455ad9d6674a50e1354f2fb890dced8747927e05800ed2ed5a069eb2d0945e6fe1d19b1ceda6690863df35839981bddbfb5e608b68e698aed940c5ba449a2c6ac0bd3ffce9e41f9d86ce5f2269120bf897b3e85ea9f4fed1726d54c8e25ffba22a454ddd21ab7788e74335fbc836ddc563b89fe60bdf0b3f6db5d346738cd3fe69914e275fa47bb1ce6740777e953d2aa6960c8b5650c7de123fcb9bbfc8bc66c4caca4169773201826207fe52d8320faa74b8b651ee3b97a834c42f8ebcbfc28218479507cba45e4d5b12f90da7c45cb57b29cdc5626e5379bb446aa80fe3faeca24f8a0348dab1757aeace77a9fcf910d2e93a7a5368f8cbfdd5b4d56a31f74a9169882497dbe343e916e75887e1cf03a38063386a326fe722fe75dc75af9fe40c1ef73160afdaffcd1eaa78e97cc4d51374b2c74fd3a11551481586d767db013cf440f34a5f80f1518b819f75d3c1d04c4f8deea953759db239fc9b396194ea4975c932fef2bc619ae4d394d6f1af3a76985e7620bbd2c66e5b92e342a4b0e85a29fbb524707596d3b10820b2db745cb8d88c285d12a2d9ad3640259b38194197973e4663e295d9227b880bb29bfa7e3b967fca0860cc1e96506c2beb25b53d2947fbab634f0372afc8ba1d7d3727e8275a9f24c9ae38dd523380bbdb736e2638c198adcdbfa7a9a323081dbcbae5e1a3ad54004603ce5e0867e29e132b2a42eb8e7f14493a69c52611d9d516291bb2d71506242a6776e8e172fc9c3a55d3db6b3516a87ec931105f1c960b348eb1a4ec1c1d591be218c505de347cf8f75037e03ec7311573e7d077cba588bdf08efd0a4a0167c17d9c3b9b33f408f71b899e7132f976b541734e96a66f145a589c0558261a16c63fea93ccf7a306dcc8665a469713400739bdd2e2365c76b3cdc206ff38d12ecf31ea15bfb4a83f5207cfb288f87f57b366aea48602d5786f57e84627088c76875985089df16d7bffdfaced5fdaa48360cd2c0ba89340e036fef60ef61fb4b793c1a1b68d3759818b58e554f2c7ea8cb6782051716f0677b2cbd5a69704b2b99e712765b80dd41b9f7a622f6a46b9395f6e73bc0820900589c56b56303fec444e6f005e45fb460fe34e0cc6eee0795300b70b95952e455263f5a166ea59cc204bc512e95d891726fedbc960a71b92a2445cd223421f8c25e961601decd9b9143e7b474d2840b02899298246bd826deed064afb0357dcf48c2138ec55f471beacf9786d4cda777dd5b4120c1579a70ff4fd7898296cf7581971314a46a2c5968a523b6c47547d50ded2a89179ded049d67bd4ae28e9ee6991067db02360edd576926c16647a6337ff6eca790b802928fc01fd91845718958d419ca29ea780e7ec2a98e026c4ef7fc1f906076d061809e03041e6ce2d0c8858c31c860afef54a759b305e00bc78b4c101d9e0f0c933792d87501268d430aeadfb5bfeeadfd1798d54c0e474d975537709b48a5951f2033e6796a8d7053b84d76af961c0b29bf1ae07c91815a48bf85e713467e938da248d61841eab0873877f8263532f2fbb4f51f4c76d459622ffd1f8c80e22d66249b4f5a6e857868f3300e23847889fc5ff13cc3a589726b0f68bd0edd1b8b3010f2fa48d9a6ee7d513f60ad6a35f9b326d6dfea07e7cfedc68e6ca14870d676cd167fe96b953a4ebb6e95ccd2b369a9726bafc78238956fbc37d24ea62836bdc3cf85460a99856397835688a1380264ac795565ffc2ef7a592b971ce08cd28f5ae4b4659ffcf7454e474aeac00deb6e3ac878c967cf039505316414dee4d373fa1fb6501304b77b49821af9177a4d4f8620c1fda0a5f9482813e13c887860f20b46300f4cfaee8deffc6dbe8ec6508df649d808948cfa1b2a97b59ec68fa293f522cda83426c304a77cec3f0e3b1bb2f40a64f229ce2e97738688428172c1de207b3225b2cf5f66dbcc3f867d1fd746e72d0ec349b2bc436ba7042e9f6ae45bf5190a8dad3ee93ef2b20d9bc5bbabcf37787d84db7fcca77bc4cf6c0abd3393dac3fbe90fbc8a1154f7fe84cc57c0d74bb4593dc77e884c09a39104a8b3d70d3843ad40bf8f6a696863bb4b7c3b3ee58da94cf4f5f716b97f0df3fc6396f851785fca9aa5ffb0cd98bdecf8bbae4c82641efcb34d319e7643ca9c5e22acbde800e0f700a95685c64ccf399173f9123438dc1181b676490cbfa23632cd3f4f593a8dde78b3da10dbea5f48208b65b98672ac34671b0c3e02595d667e4b95d62c8c30270dabd57a94db36c4aceb3869fd78540d6b613ca6e07bc2d64c86f679ea608f7ac4798dea79871c533e7bba4923b39c4398714ea92f8c9b2ea365ac601a1d747da7054b891356d89ddd2335827f8b4e7ff3338a6e76f4ae158cd0feb4442ba5dbbd37567ee9b1344b91cbef3b99693068868f381e3d1ac4340daf339df0f2ea3a0ef8f8f283fef605625b319dfab30ca7586e9fe00d68a43331ea9442a7da0d43a32e770d6aa6e77259bb43d029d3a8e371b608dd6c4518b9fd6a69ccf04bd49d83c31cf62512cf3b7dd36dfbae2fccc5da51bb3de519e66e7b15fa6254ad09f0b69d2fd63ca97608d78bf747123142f49a250027fd4dd7fcb2d48e2d5a6872e645a6f8d438d2a3806dcc28dbdc3fd119b91c1fc33e47b308aa906e558ae4d82537c4be19a0f7204b497c4ae094c340dc401d5f3a2f70423d6c2fe3016c89025594e1cbcdfc7fb3127385a37dc32458e4360f0ab458304b40ff9b335989c0ba1f65e46516d5d2257df1cd7cdbf0cae1daa3dc665842f098bc6bbaa68668efc62bb1b5d51fb1583d33cd3e1c21a31da3658f6bbc4f7416ef57b97686b09180ef20803c630e1b79c5dd0fbfcd786485652e03a453c1760c19b9f0b519fe8dd9fda6da61560c989d8322bd37d508bc6af1dd066f75d5d138de8b1861a999e364b867c80cf840b22c41abe1907df832340d19a1b468b30c0405753a617ca91b87e80851258fd3f08ec51f82b10d714f4b828adb5b7584afd7581e5c9dda55beac54347e9464ecda2bd727a982cd9a991717d9bc4ce47043189d2f89fd0dc5533ac5915641bfb4f96b416b5deb049c9a0196ae4c70fd9e4f319d4fc6695c22629903c7e114e753d4b7ca92a6d4fc9eda6fc5b094ad08375b8920271dc90e947330d67f27f626f0f47539458c25fbc9e0ca6e889bec4c62ef88ee5f95056c420f69066131cdc2b3df0f572b18c64a44347b57de691612489496ce9e3605be55bdab5a14068304c51febeced519f31385ee849590711a210d11b898c09b24cf4065f9b41aefe344e3c73c0324099f7cde67b0ba17cc744e32f7fe7d215f25d4871eb918f32289a75bc0d9aa3eb9ae62a559b675fd01e40e9352ab01863ae3a7986b804a799e77e63292343e75c8b447833af233b0c00dd496b85ac05f9cf2caecd2ebc30eb2527400a1c84a79b555ade062108dc3754642c59f6a342e13b790fcfb580d330c9de33e860238baede70855858deeb59021db988e65c7723dc69c513b61a3871bbeb644a57e83a9f10ce95b0bc6d0f7bf150197fbea04bc59846f821975006b6e396fcb8699d5d76d2bb3597b57cf1a30b4573c6e43766d15956cf82c2ebe505292723bafe089b390b818d94abd538dc3744f0e6c2e9714e06e373bd9db37f6875e500d97ef39df2a566c62f063e8d2b5d94b866be7e144587330c5a926f79e6af19bc9c51240ba887b308f02e80989a667ef2ce42bdf6bdc48ec1e208e97e87bf0b7e8cdf638c6499af7a608c630030384ac7a7b56fc0bea43ebadc67e734548d036f2f907ac82dc3a4450686ae6ef5bc405e777f5c1951128a20d0163243540149b710cd2f680bedd8906a852b89f2daa7e0c9084caa7cf3b91b467f92549004247db4fc4c1406ff948415f2a0fa2e7bc97422b7071b493014d2c709ce0f0e7cdee9a587977327e120498e33d668b185ec430cf65413c0b1e36eda1cb01bd853bd256ad4d92e757cc4065db2957c84e259740e2dfd3ae85e6e160820fe21f66f0a568b4dd9ecf8b6c8e40bd5a4deae785830b1c2c839c91ffcf3d87d81c86eba0ca790586156b978730a1f06cd353731309f7b1e7eb86bddd62dd29c01b94a1a0d3e025f3714bfab0fa021acd62928f32be8f6a9e75ed77e45eb7ee3469b9279534369c924cd1335e2d09a2e886488a88f34aacbcad414ec8f5565bb17174cbe27df4bfef029bb0035c011f6ab8b5f37a5aa1eedf0c22a0dfc940e8d3dd582d1d139326663d2c1f24f980e6b0749b688b573da7522ce22cbd6d001bf817c3b9a997ba569456d2cf57a8119f56343948307b666cd26a3030d6330c7bba9b48000c7ca2d6f5da505f0fca3bbfc89240110e29c4b5bc4e7d5baeddde7e77d2758eea25151e0741f53ca1e257be83f920517904d1089c643a0bcbaffe9adc77bcb497335992452861e6d282fe2224e35a98057f03dbef25e6dfa12bd56744d58e1fa82a18da3bf806fc062eb77107eb7f43380ad5a6112e1435c3f3fb5a3d867a3e917bbb6c583b54dab137fc21b96bdef1852adf0dcec732bca88ae8ea4304f18fe7aab9bf365cfc01685134bab60f2a0181718869649bd2c2c34326ade1db94822f29ac4932f73d0e9fed09b29a2fb11191516a5f7f0664e6a8cf2cfb9674d3c3bc9b0ba0fa74b860cc7dd39fb25834a0496cdd467ab17996dd817489dd5b2fb32451404cd96ffe9682863ad8bb13051c2e0689b4e4078161b60c85af231918df0afef2a37c33701e3688a80400eaa303a3b0d82147830cc5d6b2e8f204191fb5c4f68b5b3f89ad766d1793981039aef53f1e512211be8c41c42706e8fce5b4c5d6ca82cabfbd072daa95960b859a894f74917d2def147 +MD = bbb91988f2a2bfa506b090715cd93390f668338c56450acaaa17c199a5cbaed3 + +Len = 36160 +Msg = 98fe6bb7cc94543bbd847c1e4a81da47485b0ea67723f478b59079c672a1ad2f64841ae87cb75501186dd2ea7a33fc3579d3859d7678fb4892149d491eff6c6954e1852744d1adfd10be2ee55c0ee21c01868d26016a6f12c0e51aff71aa82dfcedc537b0c2c87b80e413718d95cb183483ccc48003f785fa7cb99f151ec16193b3e2cedbc0e09b878bc968ad76394f3b6bcea0b5c403db5af8dc225a70b50a004cfba833cc05b87b8f8f2433f6db1f3b3d09077fbb5e79f40f53ca55c5059fb8f57a247748aa6ad34bdf44cfac0300ba73e6695c6e69da2c2c9b079560359b2469e8f414db312b056d244acefa43ac3facf136ca51a88489dd2c5a77f6c774e906b2778ad85c61a8501896b0563f7a4144b4004819bd01839d82439bed3dc56d48812f47e46eb7228106b9226448e355d7a946640af9c9affa37436fa7fb0527cbbf9bda63fa841a9c89428398e27fe3e24b899cc9f145755fa5ea71db91acbefcd84dc0fb8260e6ff1a935258aec881d1053a50bb362d6a4a68a930ec9424895865a589ff88c61e25355c2d480035a63070e93e732ab9f55709f02b5f75151d6ad2439404903c26ab53ed52db794fd79d1916a47661a3bce1d46fdfa8b6f6e1a0c8987d9f1b3ba6fe10c791879c8f7c53683321295d4317978268ac5ccc328c969324b5139c3d0599d68b37d0cc6d2b1fe8cf432080409bd48e8b4fe0376064b8dc68d92695c8d90b2fa8d44b9b715a4f055b78e07d04c015433808d78af910840ee5383c9a5787ce8690e56c8c34906d586830ed96081af65b0f85a73974f694952a70ca1c71986065d3e998111f53e75c7609ac8dd302e4306234e3c56cad47299901538e9f814d68026f62ccaa1b698be571a1a6fe2e6b6de094f1a138ab2816c1786d7349e901e77cd551015d6d506166f76183d1d3f86e0b34657f7156c3f724247c6d09260a7ed3c9f761b1a038675b1960a706ca17ab3281c3929f56874541b414de45cee398879baa604f8a8e2842363382f54745c0070b709d1b210e8b9aa5ab49885a09cf08e90e8f7f52ce0eacfc3e9a35f20f26e94010e19d2cb624af67b421594e097ce8208841c9bf8494fbd9f67f4140d05a69be19227df00acaf078d40831115f3ca5e09c19c7172e45df4e0f849fba35c4f8d3edb2361198c8fe576f60a84a6788b297de99fff037bba7c6ce5ca9d4bc11273023236de7dcb929920acd076fdeebaeb4b424cce13d40e5d2d76a1816bfa975414df88e09431612a71aa006f811dfead5b15cc650bb9029f0af2f3306dd085385c2a40eec685a4a05337c0f59acd007695a9474c51f03d4beaa3eb30b70b8527c25b86917b910203ad9d3892b0c5684ee148e40c4f416869b7cfae0bb3733e2a2eb9844f1b1b245c662292cd2bcedd3d2738cb2c6c762bff58bf6748c7cf5948888d5fb30eecb2b2680ff32e74b0074c4fc225340f552d17b5bb3c705de97d8ab81f4242bccc530e9aac853ef1338f82412e1aada2a817b8b60a550adc8753f6a6b753868e82af77e44070840b1e1de8e5c4d11e8c3590eb43f6db9eac7282973b9dba06ead86ff52e15dc892a3b588423cc730f35c541b744c5f6b53572b3725d18a04a39943b906071f0d3b750e960e48d2708051fd224a1c0cdd6de4f8e91f5722ddbe47fba51639dd4ec182677840e501692640dea3a422f898911d0bafbecf188405161953f1de1b15cb785abf68b5d6734ba5531020f5a515636bee0b828deda01ea0274637784afa9fb352dc041fc43776fc05183f1884ec6b3e1a7d193814aa71629fdc359d0f55d4bfda4ea1a75d2e2eb16efc5ce03a860f101b84d142101b93ca0db69ac0bacff11a6b97afd0f3bfd961fb6d1901186ac58e6ba34920726bfc62db45d567efb18b4f9137ad113a750d9a24bae1dfb10335157568ef77ce2411b9931a541710b2f9cbb5bf180c93d641a6959645f09707c421e34642ac65dc8a3abf94b532b03cc31b738e8f17926c0c23a86fc3c82cb109401fbbd132dbedbc62db55776f60c78dab453660c6b89ec3ade7a7d9eb04c75b0c954a29afb2e03ece50ccf91184eb902795373b9e78f71e91ddeef6cd91835fc3ee61aa776d4c77d9da7bd8cdaf01a0ecfe117e03460d636be5a5b8e465ad8e2275a2d22e8d9afe11b2d284f841b20677ea55b699b23a38b8b95c8eb3f38e4c94d57e3f397644380284719c15ef655754e46463c6401614f4a383e6d0bdae31979864502cc9e0cc38b9d97ccb0aa40a0076de142d72197e9c4eac5fbf4695c39718e5a37ceae91100ed6aa57c15e695170c133613baccdc3c154667d400dd893fd192b7be7bd5ad0779a5a4bda3b59ee52eb4482dac98b44091e28dc38edde8ee7ccbeb45df3f06c8f93b08e436997e175921c8efaa15ad463ef14fe2432f692f6511dcc7977da4a1e67b309440fab90a15fc46be45bc1db986f30cc4c03a807f15050a98372a0d4ecbe6ca425551e659ef94303e02049c17147862ef7897d56a1705d35c30bcb71c041e1482d6477c6330aa13c351878efb31f1e0d6fecfce5ce5a4e56806be28863971cdba5643e1d2a37e6002d6ad9cb299efe4ffa53ae1d3fb62bf604b96d839e692546d57dfcd1492a1b360e3ff1be9a6d30dee1e61966be2bfafc951ef5c9375f027205d5374a598b48c621be4a31cd34bca06ccfc7291161c5507cc201c2f620bd467d977af021017397ae106b8a8b9aa87fe23340cc010193da01cc19d6a5555ea984e94a2b6b35a693fd5cdc339c47fe628d3d0ab956b36d826b65c56d0aa5eb8564f33163fdcfe8a155cb2692c8e4c630b312af56d81e5a3004b48eefefb96ec163deb600a07642a90085d011d71906d39dddb70d4feb62cc12e2fbc41a38ee45cad2626a1cd2ba9444b16216908dc83293c4a84582c18d3ede16955453cb74f9e1f6bb09398c5b486a77640bbce91335dcef0c653a49e46eb079e208641a07c5ef734b46bf4c2aaeb9005f5723d4f0c4c2876ad73f2b6e44d0336c4614ccaf913e719a8775b931ae7b74db628df765c78bb44b02590e33a9856bbb772a8a744514172e35247c7731f6fb5e94c2f97d26809d364e509a3c83184955046ffb5fc9ba8d91b9943d041d74bb725589843dc9e96bb323eb7890bcd1f6c453abc8770578fc4b798da3e15c3bdf9e0dac3daf990e454ae9f350373af89a90cea598c5e1958ce2dfd75615d4938d6b24f1ceda7c3654840831c93ae7d55c3fdc27144f465b64e05239ffa86fc6ed5f0221dfc65babc0e8e86a8ca0a9b0655be4f7e41f1a10adcd397d46a3131b29040f04177c1fb3b0fff26941716ad0dd6c50deaf3d47fd8e2ffe69d20daad966e2b4611f03ae974c4f8cf58fb6117eebf887a41dafb36a309008c64cee1b49cf7f57019e63f29fbe621fd51e768602b789f111d77f489eba77bf5b5b4e4eb3896562ad3da5d2122bc014d297b9b1a46aa6f6ed85b5ece3556d8bf2a8362b5fbf1c3b2ba4d0353abeefd1b4a2877aac2cd8feffcf57897f29f9d451daad9a94972a4c437aec055d9c79c043e6e9c96124a571105b6f06bb5da302419abc839b3919fbbf680229c4f0e648460ce6860c7b98b7e8d4044bdf1af37d8a906acebcce71b266151889b7e0bcd087bb8799f55836384fe01f40338772aef463bf633f7eb8d8ff2a390d7d9485c2cc9cd3ea64e4095d0d27c7cdffcda7fb47bcc32a6c7078d4534e6a9d6035c885de57d261a147988ce95204da8a131acd4a427f0c8bcd38102a2ab521a6eb0e8185938ce7f3a86b2ead09de4f1d82548dc69efaefe3bc81f34b65218198ddde1e88f80a62a42f0bac1ff35e140042dca184773cbdbd66dae580a8b6a57e34c0c4b12f53bcfa06ff6c08b98b117b7a3a7349764e5c61f3cb4e8f9b7d75a0173cdbc6e06fdb3e52cfd82f036e2fd652f769e04337b6178adc9741e57dda45afdbcb90b367a9b73e04575e780d5458f39aed1085ffb1275396265e2fbfbab72424fcd74e420cafef25505bc072694a85ab66a0e4af37d8778064ae2049ff3c9da0d7635c08ee6c90ba2def84a557f42fb33c590a4e2f741e23b9f861258f1d42d5c2fb83c13637474b55e26cac049e1a39d6039ce480416f058e06995b54a23c4d26696b76cc583c6130fc1f915a906ec59e66457a148893b0499e71f13412b3906c73bd2f981799832605465c401152dffb49ab16d290b2ac548991f119b7ce24fae221f281bc833a9fc488139d6bee10557576c3a2a3f27f158fa062ead7b6933a7d3ec9728e240d03028ec05be46bdf15b34f866c077eb3f677474d8fbb9365920ebdbb50d6a484ba87ff6a61c5f1d5a1c9de6918057cd05d0b2db9efab8c206c5b45d004dd2b272c1b841a9756a778627fca738fe5155cb411fbaef4eec94e2f2e7f1176e8e07fc286c5d7e5deb653c09fbbacb7ef70e16252583585ce7376434d13858e42eb13e28f69a933a746eb24ef5b1d796bb6e6cf96ed548a91b2211080a8353532756bf500199869f77ecaf4394fcdbea00ef463a56115ec80add6fe91e62751ffa610649f7cad6f1786779a4342c46cd7a19286465d8091e38d1d75467765cbf2a58996353bef2d4f877a7cd6da0b6c589648a043899c6202797edd6900f78c539b5ef289fd678ce6a95c04b9bfa9a76b169e19628c7147249a829ec02ce37b6aaf18e2656b1b722613a498b69aa60458491d596c0f07299318b02014a0337f7e0a3ecc8f2c15c855eedaa293130b6a66564cc828b967ee951a91cb2c07ef82d8d3581ad0e95d77bc61868919d1dfc3de66b3cf6033988073c8ab08d2071d6bc133ef33f04af966a39531b5107d2af608a0dbd4da24a2c5754b893dcc48c7227f528a7fb7f6f37c51b1628e40bef5eb2c2d4b415f358ea7e2cbb0d4e373f48e5a57b166ed9653a310dea27c703d478a92348b7cb70e630d046faa33df30ad999c6aec5059d11fc2264478e76aa228bb82de24efaa5629de2160fdc48826f92a8bb5c4a5c45061c0dc0a6c37f494a06643539d0000b5e80482c634eda6fee02a715dc0cdf6bb20877a5906d4d7bbb8731eba7e1980d5a9666fc8d41800606a7f948d6931b7b965fe4858cf26dbc077ca5b3b50a1f45b73ec2f8e67ac5ff2a0123d6b4537cff2370d8e304e96c74be65342009a0022f24f7e0c4175118b5f89cbb31fde48050f9e9c93080b8a65030bf71a2ee49dd24044044c0984ae4c4d2d9240d2bccd22b8a293a0098f6b7b91f09c2df0b7e2ceed5a66380d1eed6a6595502aac652cef944cdafd5a61a2d29c9d2bc16c9936dda2998c1876ca35ac4ec8ebbad463cf314ca35af2250a9532cd188d1fca1501c6070a5f346b11efdbb0ce4d38733e1cb387aff9c78f10ae62cc6ba88f33b0ac52c3b4c5d3157981bf35b05cecb07c7d3cee79a0c3c2fd542c409e6658cff49d497fa0a73f9c8c54208375021db4a759932908382fe658ee56d2b7aec4c5683d73e2d4eebe27d2d0c642252615a6461781df65a75322aae6a929c067193e94f497955a8099ded25d791bc9b01aafe221ceb896d7779f7aa3edeec07ba061012b7f3f3a4718ea146400b5688775f702de425ea5aee385508deac8c0d1a1573648f1897a2a8273204b24ba0a956ea52eb6a4769916defbb40c6760c7516447bbb5b61a241021a07f7cadcfb7c14ce2ef11beab7bf6b2292f882e5ddde3305a19d8969c3fe33b9ab85d639e78f359d5cb5756a25235a538486905680a6f4fb7d71b58b4d48a198953580dcf5413dba74cf0350626bd00508817b52957dd07887de5c60ceaed0394d8d4750a540a1b7ffa45237d00750b9876fb0647cb15a1f2949da64c89f440e3d03961f67fbe61865cbce8afe7450d399a7bbf6b6f00641fa3adc11cb9871a9fc3ee9a3bdd18f5e3fabe4b46e315505b7c00aa3c49849a37327cdf22838ed7f0375de88276001ebf5cb415e7fccd1a24a5f38d63648a8961c972c809eef1c0fdb6ed1273535f25420b040e3c3b56b4bf9cba3187c5fb7bc6f1f7437703981defc706e2b57b1b52938e18feeda7966652e9bf5e5176bdb68e31731915c96b36edf3101ef1f61eeddb6d56ada2487677061568db687eba83e0124e128a48535220c0738fcecd4e3e413128e30227de3102a71f7276e5d829e41bf0f67e8836bbb0b898fdf507958dee61f567b54bb7da6f274be920b301f2c4d4c28d9b92feb7c463e5300dacda210a85240264bde7bb741d530910f11c24a5c52a9f866d918f8448c3efbfc50543bc251f7cb783581c3a12a19aeea71108b27791f3ea21d98b19ef9b03b358fd3b2cca4d9d55a7f045e88e9c6461dbc8e6107160526db7bcf2abe0d3359070ac5183fb162ce730997da717 +MD = c1b6ba438acc1f707bf459622868baca71c4dc117dc875a0e3f075af62d8fe4e + +Len = 37256 +Msg = 75522faea26472bb36b0b1ccd69ad7f4d578ebe7a73c2dbc995362f1c0cd6cb02fbd1d506de34d1f27882a5f21aad08e72591aebf161b735eb2980b617db0880cbc575f76f008f8f334f17d7fd495ab7a5bb06f565483bfe8b52e5e4711e4aa3af32dfa88f026094c2cc1f3d51c19df5d6655710eb38e2a0e3963a83b8dc58a045cc026db533e7b53cc8eb980558c0d36b20b6416b7bd4a259bd279cd35e5afff45b874dc9d94d7a090b23f00057ebd6cdb4cb92cd57388c578e5335aaec794923a61551b43db96b915d6e4d2c06488864e93d0af91536e744d2675925cddc053c76557f5ca754113c8674b870acfc709887b4b1d8fcf83a88510a0d2c4badbba693efe1aa5e46f3734dde38b4923216d255da905056a30d8bd3e55ba7ac11f3c9c58a7f86acb6999c7c54d6e0011003781c54ae4a6962e9b420a04a7e3932360dd4ce5fd9d7cc8c21d97d99dd3fbebef4a4cd14af7f5b546dffe2e2993a380bda87658b8928b253682d0289919465cfacb5ebc865deb6d81e3a532ce0f74bfb98a7f40b80e78d76db3f8aaee54a2dbf0a1756d456ce9cfd2d979c2f3cb7918daffc26e5a45c887ee0d9be11c1a83d157491b73f6899354a03df65f493c43549874ea023dfcfc8f2e1c146b90ef5be5954edb6128586a84708d95581cf645db788650dcd1887785a45c0c9aeb27ad71411f1fa5494dc1e7ca44f15e0d6e032601b0913e937cdbe3f749ef0f9977fb1cd13662c0d7de4be7240074d199280dbcba6015a8123e9c227d62362a1a34b730cc213f34628e6b1b042cba432e98b808093168b9cc623ad9dd317c7aec028465986c2f8067d291ebe1461c235c54b4b0848104e4307c2a726d341c929d55c523dc739e35564f72e251c9150290d0662ea2fb74a7dce10d74c3e6a0e19ca30be3fed415b3bc596086cc425f617a905edaeaed22852035366967c5a3e8687ecb3e860a208c1884fd61b73e35b06809015dd2f2b8fca8fd47c8cf5d90278f3d858be882493ee956abdbb909528fe7cee01fe198828ee58db3fb711af02f8f83cd64bce8fa4cbd42fe7d3850104088469db99d4b29bc547b0da9e39a3e50d7d5f541798aae25e2de67cebb9f0982a8147c836c8718f57449a73cad37f53c06b8afba84f3ef6b189d6a38b94298c6e59d1f25e5d8cadad38e233c14909f618a805f3885c1387ccce48853c7e7687dcf54f8198fbcd9cce09d1410d010a731d1d18633f25f13eb5e6844a85df9d317b3d099d6d0afa04c2a1adc635654975d7b20b735314a0c376b7d219ef1f67335319466c64f2dc8f92e6bee9c2db90a24f50254d4e90e7bd172b7a1a01a69c356c725019051b3be345c24ed33bcda5a28cddaf16b80090d59e29c37743dd04decf2e6dcad8eddfa8e31ca3ab28a2511e9642f1f917ce61b21598f7553d2a66d78337e6a866d18f8775db069a12c25cbe7668331cf56123fd83625cdf78f68cc7907303da362d152702e9bfc880958e293336bda7d9219d5df16e3a3a7baa3c57ffcc0b88d06a3732922d165cfa83af08d593d6c34c76997b66a4db91ceac3f2fd72948dcbdf1be4d2e8f537e08f486026569c898d5c8ddfeeaec860afa665df6207100fc84297122dcf7bd583350dcc0e99fd94dfc7f338f852e82cd863e5d55e28e7c10ad791a59a64d9d0f02ff79e96c1d520a490361d640521803fa9e09f326670441c14b7f9a94793bcefe692526f3cb7bf945bd2f7a224090d4dfed2779f3e4dfb647066a8cad64dfbbadf6a81f88919b3f7713672434e13267bb93808e52ed5799c711a1d7f9f4d1fe990fc97b3257fb07676ecf7b7d1b45e519f8dcdb4a6ab20fc9d6ec24801258c04a1a51e3fa05e4779e37312805d713757e840307e3433942d6bc151b4ba7be29478109fee6839cb7a3d453d2d4fee240749fbcbb2561345a752be2636199496018aab67501b96bf0feaffd22f376fb6e82b1d09f19aaeb7e2f8b1da5cad2428e45ff23ef508f9b4a382ef9bf6929a6263122085ac607a5d78b458c888f38f1da56e61715ddee73ecd8bb0e533efd2b90075a2a953560ac8d11bff8b5b7b59d6dd4c9598fafbc3aff66bd03837adcd1d58ec1fef76c9e46c7496228d34a308f6e470fb204cee339aa6b9ca1f926ade11d4ebf4e2975a7bcadbc96e68b519010063520ea1c4349b8166ebfb05d4a58a38fcebde0d258655669f1c4f885d2bf665d2864c98015d8fe6af790f856ecc45f5496217d9b1bbf5b2070522768d8a4d99aa74317d84c7655cf8e76408d16db5d932e55ed2cc89c15fdc2aa3bdc6827b3e63b259bcbf10d036dbcd952aacf84e4751fbff82c66e6ca256e32fc8b8c303a686a721e020a84516b0821f45420a73e22efc96644fe84c3c3fc54321a4ba7b849bf926825a2c387f2fbb7ef330f2db1c129dafe1b975e48fdf577a434ae7473b0bfed41dbbeb2ed291b010af0a7fc867b5259895a395ca0fbe0021b7fbb80b4c6f4eb71cc6839cb39f3680f33edfd0577f4b0d0a8ec6615e6455f5fa37cb1c2b2e5f5bfa1a74068490855c4a3eb1875de964698aeb964ede6acf53849f9f0e79d1a71f40284af0d82e42ef3e9a83620d7c183ac13a73e71229e2c6e19392669af1cc9d896056e020c0e5c62ad2c3d4c8bfccfd380bfdce9c3a26cc8ba4439910f7263330635658f0e0e48da9680174221cf92d49d08269df0411d0fd52213a7e6a4a9cdf9197dfcb06d59224cabaa4ac2c23478118a05d4d202a70b11dc9af35b3b016e18bb9c901cb2f60478b5e0ab965e1d87854d5fd8916d73841778b8bc97bed5dd0b22ab9477658946c2a79fafc42ab6c9a05a1eef540ae7428e01544cc2b58ce379569350ec0e79b1d188d19c75af65050bb8286243626c0c1f7c55e903a88e480b603a0ca0362e0d4e605dbbd07393056d6f677988fc6bac72f3a5dc822043d468478a10be641022e0372b54fe00a98f6f88c17b48604ae82e6d2b6d68a5134e38136aa36c2187b7301623af26de0d6cb90a20b2ae177389fbf3cfe3ddbd668025ccc10fd2f4fb96e5042d1371932964f2fd6b64dfa84c57838c798808f2a430d57b799a1a65d485a80a31ca07a9643ec2698ada069b3f196b4011a212cb3527f028798d69fc7a4d212f171a0fa825c4d357645c4979b2995e177f7a22d0812d1fd9a930ea4255b6f77bc74cb116d6bccacee331d0c90f9d021aab58618af10a0a98f1cac2becd87d3f629a7177ddeef52d7eea3c413bdeeff507e83f780eb85586c39a51cf94b8a5ca926756664a52511796df84de02454fec2de450b3ad867b15e69071e7935853b9ba4fcc9549325afbc497992b6ac96a776b4e4c5412178bf746939f0c8f54117d48c8666d410b9d5a8686ebc20bd7ea176e9a94e1c2c8027b82183bb6ef186995dc759656c84a72b46b31ff2a3bfd295ca63dcce53634794327a2ca7f1931b693d3cbdefa457b8589d12d35dc91a5b2a780cc56c6f2d94ace95a7edbdb42ca2e7cd2fc2c05f1b405b56ed4251936e1098acbac51f7f13117e5abbf80b365599023735d4316ba63d997ad68711b7c2cd90787d8a57319e47e2e5338bd026691393906275c5f1b8d7d4ab9d86958520343f82a928f6c0c7689cd3c31bb4fac3acec672a3a1697af998d6786c3757212fef649b22376932afdfc94cf1a1229f1cfad3a11938bb4070d344d46b00a052798453c2d0c6f2f356292a6dc29803a7fe63667ad049ded6bad69bb41fefbc4ba6abce87e4648fb7350ef886eac87b2caab18ae512fd58a29f48e3ffce293276810bdbd2a538c9e612373c7eb2581196e68d44ca257bb30ee7d1259fc1d98a3ad14d858b5c6b27e8b64bfe3f62714e4d7b9f9e1152ec7681591a687b40254dfe5d18d19a51243225e9f344b0423ab9b9318e9fa3e1782a63becbb47b9235022cee15c9e7cc8c700672d718b99adcda43cf024f661a46561bde8c11870132312b4ceb745b15cb6bf11b9e8142b17e39511fa5b743457f821381038887d34463633f43dadc7308ab4faaf18833d0495f4de71cde22a94a37b26fdb206351921e3c8fc50453306cb689e87733743f65d39df012cdec8fd0fb606fbae203c345ed1e0318f9a9921e16059dd98cee46f91dab022d8a873f3959854b49d4507184557165e5c1c4e246532d91be9b872d2dc6dde5151fdd01acd689c92f0030a278e09d7bd3658e670ef3688bcf67283b2a559d607393d51d51fcd5b2146e8ca049150a0e8becee6b9c801d55b4f8bab91852523cefef56da5152cfcda2254db11e7c20e5b45ecb341882b6b5145623ef1f456341303a4a82d460e0e47f2d591e1f9e48caf7c40f0bab7f9a74978a4d2565b73a37df7c985b01af70bd538e9a2f7602e883fc25a1387d01315ae69b1ea315303ee6a3be28ae01c6e822c750f72b48316ad96a896903b58fe32ea99180b05536d7162507e2c2fc2daed9827c575cc0b13494eaf84fb47bb218ba87745a964d536d8e0d5faee1196d2caa2d1aa408030cb07c237b3b92f9f038c4294d939b270e681702ce7451800dc95f7030c5783cc94458be1915e654d4ab153723150808ef3179ac5d1c5b5a95ecbef2c8a2f491715af262dbc5f8b7e3d97558ffc7251a7f2e7cb4138e47cf8eff915ce923c32a8b5910b8c7331048a72bab34e891398545c8e7c2f9b25d067f699e559c302f309fa97b67e848762fa7078174e65b8e71ca67847d1570e528f092ae86e8b17ecb36b2fb1843ea71956bd6bdc0010d6a059474198e71b1265c69e28897d58ef922d7db5873e2024ba27c0128bf429016692d556f9c155b69cb73c1f62f6bafe85e0a8e591fcc794a7d61ee8a1ab0cadac61d744e500758f69c9597bef6b3fc93a65733c7c50935b74fa207ab7954a4fd44ea387e52518e15f858cca996b45e412347306a0ca220da3fc8b352823406c90a1e08c649fbe70e0743c87fb476bb3cfd61ee0a9d9e21fa765a5949e05ad98441404eefde0b4a28f0def308fb02fdca5b2dd56f1f051f601be0635639ce037710d971c2b88b9eacdcb1b60b105f0a3465344e603bdf045557e2384236966eeaa070d9048082cde2f24577529e95ccc245fdbfa79935b71f52e940d47ebc0024188dee80ddf9be125b219fa34bad29bb2011910ae00e2006337ce3d6ba48a36fa1b917fd78f759843ecd97c7bfae0b6921f62d52b97327542324890e91403e11637abf42f8848680c4d2c686a3a059126d36f947cb6bb44f49689a46acaeb953855b4b1806a82d4d15b793a79f8cfbff2f595fb0bffeaf41ced07e44b299fc7d30e124474a6c3634580468f45a79d8788de5c6563c340070d9e49dd14c0aeed78b96b2976bd7897db642ac337d6fdac4af649602eb168f25932d60b4220879a9bf015dd012f20f7056f8c62daf76e82dbe5d367a73ab44a723322db7db9b843af3aa8eb9e6c4ae5461ae20aa9997eaf9e25910867efc0840b27b6da01fcbf8d3501aab1b90554f73feec2172e3d9c97142df8bf0b10fc1366891893898a1bbbcfed81ebeb7addb13563b314c34456bdd07770f7fb6ee59d26cfbe747ec24b63d246c4d6a04d5387d9022b80134e1b98558a904fa35a1b65ce741f195c35dd19eea5fa2e71ed450f9d52a1e5a8cb79bb05efed32ad52ec21c00ec0ee9c652f526793883fcafb209ce4dd9cc1ce4cffaa841fde2d73f9f6359e083a50c9c0d081ef97f5a735c774d461fba2812e32fbcb3282f9ac81bfc835dae8e20c7ee96f3ce92bd8e12cf2c03a774529b0332e1cb1a3b1a63c7104b096e9396e6e064f39f7e6a7887a2b0d9133a732b8eb679ed0d25a448a69ac696ddd5b7225f1fa52ef376ac3badeaa684644745cc67f45f596c1b8841c90ae6e4e7da41baf34e5a4fd6fd7e8b68b45a37e01611bd90858c2fcf46128b36df183e0fc45ae60a332a5c325d08f220c674f96eee00876f31a9771dec67b053e103ab3ddd292f0c98be5feedc73f73de99bd3f6193ab16ec05e374056b2388ad85033596bd71c6143bd5ff2c3e72327e577cb61dde6c3f3f952791fcc19a9428ba6de4bb78b3671fcd065265a8bfc4682b1ec95832c4568a52e44a295c48de2c3aeb5fb096e03a58d9f7872e8880c0388f13b7b5235c0348c99a1b1fbdc6bd44810bf51a9a80d63bdd1a0beb706dbc4bedec2fb9429bcbf763c96344489cc7fe2730436de60dc14530fe5f20d2ceff2ed2188fe8f30bf712bbe2e13b9f2374b597f8d90f1bef621180050f63322d2f6dd62956a8d7053b272c96e36a24034a074dd61492aebe5f0d44de8b271110c365648f229d414ffea15026086479a4be6fc358847d10f31eb4e9db60e0e21231c207ba621ac424c81da130be9ef290585ba2e0b742e5160795099c0f35479a10f02a4b93c5f22c0df8aa47748e415e9e57371f1b689dafc01a0e9104789420e76c66b346034dee56ced5cad8c6c85806ff2a642f729d28ded0734aef4f6a3f0bb32771e77729b4391cae4b49bd0a15089fe74071e576099a44d22a0e0e3c5d1450f717f68628460b4eae3945f5893e39c5e8347135bacaa8e3a5cf0f597cf387c +MD = 3c95e860400867fa8eb59980edfea1944560dd6f5aff84b79522281f065b7b9a + +Len = 38352 +Msg = 19fafb782f71a97857c48e69e151a62db6b031cf46de4ec4c19bcb718a103ceee9b54a0a00724e8f00051fc79ca3273ebee2bdca79d6afc9407a1daa55528eaf834f3df010f3b4a4eeb59c9c31a7d410c656c09e61f2e490b7afb15eee6a9e7351907b34493c023f889fb0f088a5d32a34d5e354e57a15a18f002e953da095c5ba40adde919461e8388a01cc89e54c147127cef3ecb56c8531363d57293c9b2a26267af4d245f928663d37371cae6857e614288360ec0ec3031985ad9c85d72cfd0b8b80f395f1867881fb3a294a4e7afa64990d286726e36f70af9e7ec47252a8b78789dccd728bd71ef5dc98ff280514decb972c6eda6edc056233b54294248df217187534a3bdebdccc2551161b819e4c632c544952ebb29e47732a44632b1584e334a614ada71c83281d3cd65175ff740cd1883fb7e258040566c5150aeea83492e557b3b7ced3dab3cd4289f2699f1e6c90b09931db38ff45146ffcaff6afcbcd33705beabc76aa123c497525e5e6142b70b4a0e75fb956af860e407bc990123b27d9526ef86fbbf0723ae413723c1df27a7c9902f543d3eac38b2a95f1b5ce85c87ae06a0a24d5f378fe1ce497090069b4f0cfa9263e3c9fd3cf0225f684ca521f3b4f067bffc0c3557b66bfddb5863728f9890579125a75bfc110555e67cd4b3205e56cd1664309119b09cccba87704de7d0e3e7628f5158e489b4bb3c59e180bbeecc197c3286db5454f35e94a9b7adc65a77ba5e6d526484eed2f7c060660b250aa30527d359648617e1fbf04b93f2c9a9ce48fb5c151f6ba4c2a4291cdcb2da168de8cfc332dd2d6dfb4d63c9bfbd60335a3bbfe823e9e7401648cd0bb03869b6df6cca8e9d95c8eba1cb55b0757e087baddb127e0944b635304e22a97adc525039e9be92143ec70577fe4cac6fa541072bdfa9aa3fc02718c32cc072b74f02670fe8027a1138d64fd04ecf0a08e3985a6681dbd931dcd85f318d3cf3dfd1188fd4003ca32f04452f5d354345cb898cd9e09a2fa78a0b387cfdb7eeb96f32f32f289ac3a9c821b228815a400c42278d2a2c612b8192cbd6069a656c1fefc530c970404dfa77219bcfbf265bb9e74e17bfac7f45e3f6af1f6099fe2ba3dc084fe33d692221b68460999911eccb355dcb0ed35d056b2015932f6eeaa3e1ae9caf0102ade69bf0babefa91b579dcb6e6f59c4382f073a9afdfc7abc36b65e1c2dca7426711d5c044f5772b79895ae67a55fc8f797d99fdde33ddb310f88d103b674a8f2d2a7bafa3b2a3d8e6a1c23e783a83e9b9334a87115db6274bc1e3b466cd6f4b7896da196754e52c8549af396131d714ba8801fff9bc057aec5df648d58d99f9d1fd9d98007adf98cdf77e61e5ca6a8306025ca2e7bd20206b332147f8063f3cb1b52295ff82e7a02911cc424662c2a72428b71a7bffbaaa50c8112c4ee5d366a053f5bdc51b81c53f5ef55533a954038d61bde126f2299b25b332705aab0b1a1660a359e193529a790596150dfcb32aaa53bd816912f155625b01beaba42ac99c51a804e588ce725ecc3afc65db448f23654265b2f0967b9f45fb61a28fd6f79aad7039317a59ff69093085bbd3aca3511cf918a509ad7024faabf3efcc8416a9da988165d689841043334b70644ff9ebf12e14bfdc9ac5abff800fd3c8a6c9427f8d57e32bd1c2fd109fb8340b93052c787de453d7e30e8cbb23f00f22d361ecf2cb4749e8c71e87e7f25677383a57cb1954f2118a1a9d5fb3e45ee2598e8311eadeaa0aabde09393fb790aa889a64206a3fe86961b6048d705da70deb3c9f49be442a95d38b15998e7c015e7b37bcc4d1bb11dc0d29d6ae86fc52e24662390ce378338c0e52c6116aac22f36e96b430e64318e9dafa862b5e5d0cfff993c2c3f0f74f4d9ac99d495ac47019f13bfcfd2e64680359ac859c6cdc1fc77345ef177d5df86b2763fd99b5517332919c0971f09b79b917c4677a490615c951fcf07fdef8a9553296799b20df96cdce3b3c480354e88b83b6ae3d69778986043d79559c73dcac2af593b613cb754c15ae37d7ad2d1efb2c17cc6e449ce57e186c0c314c3c2cd09ee5de8314a1794df6497eb9748097788f4c447570d2a421ed1d0bbb54de04530d0bbc8a89fe2d43fea16365effbec941be8a8fb64d5600210d51a2c4cc5eda3d3cba0250a3dfbbe7d5a9855760b88de50615c58970183af22089a3c9a805353a19a3bfb1bfd8f2e10b98000bd1be6a7db4ae1259de399897f4c1e34d489dfe2e51be265159932135762bd101bb9a0810af9d9eacfe81c11a6f408dd816eedc22cb5360badbdaefe9fdaa1dc1871210a6e12a900d3ab75e827b50c7f079bf781d6faa9474ab730407875c0fd49bef2a47319d1101f9a516d8ff37b91fd9d97a27250beb0533260996fe8accc161f8fdfc873d4812a4119223e23e8dec9f058948d5bd8df7d9bda69f497c7f103ff732cccb535ec7a1c47a6b0ead68df31094d896709a1d207fe8229507a4e4a9fb270c0e5277aa8598675b96acc7481f8ad70f1c3374f1c24b3463cfbcc61f6e8f360dfbe01c53e341e2b14dee2d9595cbb9789d28fc15f98a299e032b9e19c8280aa313c2967109b5645845239bff0c6f96c587a581c22ca94241edd8af6c5d521f5be48e687a7f4f46b11ae174dcc9c319766a4dc8bee24508ffde488c7f849a0e98fcb824d89a8c144c4dac5ab774729c0bb3961344a0da081862ff87dbd46c42fabab43e240208579a4bf8b027930aa8e601f303fbeed4aa2c0a6253f9c34546f1ad2726e54c308b1b943b07a58be7ba95c4091d5d22d179bb33256361e7b1950e52656184bf811950c4f7e3a9e5866bab782cb1e0f33cf1467b9d28aca83db7b13913909af296acda4cc3b6bd268316979cf2841fc683ab4e524e26228b46198acfa616907bdd9008aa030347d55a55dab0eee6622341f24345ccee6c177754eb948175fdc1c27d6c4b5a5be26878a3f552766b70700480c5c48de401c32dd454065a313b5ae1cf95cf1e2305566a8b67d01d85935327b1266cf5a95c24f62264c384dae1ada7f0e593e2eb3935ac66b2d868c77343481e159db89103934cc99e2a95d58930b1ac0c483d36f66cbae056c9dc9378a6c221f3d53b4d60b4be3450ca01a38a9a6b3b4a4a8178b5921262d432ed9c1c14425751a1e2312bffa6fd3d105ce77e314139501944330f1c4f78bb822023e6122548af9261eeadeab37ea3ac0bf3ccabd0209e4319e85b81ce9c6d65f8dd6f0707507e152ed86efc504334dba35b0e40947b8546672b33592c387a2cec2b0f8955193db8ad70f7ab09e5614d97afbbc61ac4c591b05e1f08c4f752657e8f500f9b0d7eeb625ad08d3cdfa9706d544d72bf76afb38a1387273533969e348cc91045a7a22bf2087209859c7dd2a8db3bfd0f1bc43a68ce042b0987a73582b5e321e16257f8b0dc64a660967ee2beb72fbb962ea384b0e00e8a9e6e14da0d7d36bafad800e0337910ea6a67fd2f337a6134d129ce21071c0edc80416fea19552c41fe832d60fe511f5bef8ba9168b97a8ff3c8794addfb49d874bcc08e45ac03c6d68de4df985e6e8617c7bd3474b814f8154e29779bf6c33114d4870672660ff83d643d3284ebcf4a19db33c3fe7e9cd61a6a557130a856811215156d12099ee2ba37e6d6bdd45cc72cfcc244ed513baf6ae5a541865a284ed5470fcb0cded70db6cc86d329613f87b9f112c12b7a180d6d86c0ee84536423c5322028482de3009aecc632b2da9d122683cc419f405d778b174f8011dd30854a9dee8dae3eea43cc5f4efa3f86a1eedd7a98cd31ed2f762c5ef900173eb4fecc5221012658135fb6edc533b7ae70a5449e1d6cc9c8b891b82567757dbf1a15b317628d98c486dbbe5ed4e6049a35bfc5b604264f182050973240e72ba8875367b55938eccb6c3f4e79221a0d9216c2c78cf403ab268f3b314d2d5f0841253e50f4ad0a0ab3ed14cd0758d7bade3b38b2e6960cc63a2cdbee40d6e3fed11c60d79b060bdac430e1a3d01d25f3c5cda8ed8d9248869b1fb737d2e27ef4a2944162740e4445485e2e379c1a0da090f49be2498fc0d493915772cafa35d3fab4675b456abc31859e84f333f696a988d798f8e1357a9968aa4409f1c5128122a45c28d7c57b88c419693e5d5ac9f6f29f27971f2e80bb639105620fec1ce7628da833f2c58a304df66880e1eeac701973d027c91fda24cc6f22e7ec165bed0197d1e25d12f013685e062288594afd447c1c10a8b38ebaeb6b24fe4fecd87c49e9619fe255b5175d79cd8a1a44a886bae292bb8490a66707ae921101159a7a80ace0d14736e226736e44215f56d0f4c4ccbb8e255e29116a5ff487cb3aa9d1ef07d4df555c7e27f466f34f1e38c92daa621df252c620a25aa7d3c873030e67de23c733d47091012688637d21919b1bb4ce4250d56f920120aeb53cc117d026952740348c19249e52fd1b112e0a4fa52a35b20e74038716049b254b7f1ff7f45b3cc84a45003de5bfeca3750e4bebb253c2f396f82708c94d96a85d73c28cbb7a8ae6ddc6cde7beb77e840f89fb7a2c789a8f4e28851b0245c9c8da66a9966238382255d827271180db454966c201fae1e80ea0cec5cba9325a0c2a217c1dd1de6f041b43b607c6632a6e8a6f4a8a04d6d2f6f3b08f1da65d71fcb569e22af0b3561595cf238ec6a89488396a381c329f80d1ae98891be10e3721e30983c3a70116dc2c4316c4f797401ac02037c06c831b263b4c5ecc438dd3021dc708f3de0ed6e1486936b2427856ac8659ed7d9acbcb7e0194b438b2216e28c96d19bf7d24bfad52072c5f8f9200c6f3dc025ba4c0b760683a34681713301951c15d316c89f9c7b0e69fd4c72e64f16f731f6272a70854d80485635bab405f1b8c7d509385abb7ccce3817d094aab462e4ec9beccbe5e2b9bc4f316431c78291952024da62fd060d879f32940cfb9834f8100dfb73779373283cdb1cedec0819a6efb62a66183bdad87b2cfade7f244d7734c085e6e6ee6e11f2686a27d87b1d85920d69db24de9d8a750ee9515de01629ffbd736d597c133e19e03526b26204fbb03181074878bd6534df4baebe54f5d61a0bae50f8c3c8795a4c6733a34636d0f12b5833ad90a23161a7073dc90953452cb21dd7ec4df6885db3e796d3ae1bccff02d8a67baeb4b6a36f0546a786993fdebba74a5da20634c91d9d9769221bb77fbee8aad95a5bbca33e2d117f532d8cd82d36f072485e454692717e8e2a9e581c686f85ef1dff0a081c67e67af979f4c110b11254c968837e1b4b92694f0c787c075780e67e08697b119b0cc0ffe33f416dfff82bad8bb616bf131c2318cddf47a387e3e606dea1a426b1cc78edd534024b0aea1e7a2ea5b987b164e30e49552645e7f6163be97a2a62916eca4cb69ca9b2b93055babb190d790db2d2b7e8a2c0f35f019fa791bcb6ce233adfa2ee3fe1aaf411f9f499dabaa0104e189e138dbfb7d74ba9d23f2eef705077df7ae5e5503ca3d632b130b06901a07fdc4830e0c899371d5b4359997e52fe6ff25902569e6fafc82778e863c2a6a68f463fa96186a067bfdd8249c50a7c16683ec9af59744cfe2c01d129ba6c960bc47f0ae4d99ed44f795817757a3cf481abee5154b87ad9794de7445b7e10d9b567af314b0fbb3dd893f48b4780bcc42580287a573957200872025ae67755788ebffd3c44cd83e4e854d864259e31f4ec2e14ca21a5b32994e27a9a326de47a7d1692b439d99ed068052d2d799e438abdffdccb1ac338fa03e6768da72864e769b2962191fcb50941ee1a6baa469b907f39a505aa5d8c9d3fc61eb9ae6f7ec73cdc3009b4fe70985957c8a8205fe10d1c259aff3a39571a2eca9ba8ad0cda23dddc88f60aa776849a885e6b43b0bd0a7b0be04130214277ba3a15e20ec51f0234fac76ffbbf70d5ebc8053d7b03d58e8433a253f6daf4beca5db3ed3763f56d297e15fdef0d05943361e5a5301ed4a11fe406bef22f16f7457c9e5392ae066ba4af99264e5adec85c99252bcaca604b346834098ee7502815dffe9c856df7048dd77c75806ea2794db9ee57b1cf2195ab0555bc31c9495b21cefa4e7a6a7340cc3ce56fed11faafee0867b24df5c1866c04915f429faa975191baf3d86b20284926fd9efd0b8e7327d0b9c30704e52760ad0f7b2b2f1ae58d6f67120739a6c3eddfec89192305cce0570b1245c3377e6d47f8975342424cbdb229346f9cae1a9eaed9b8a72308c301e7862870fb5f967c1c733c229fcad4c9a027e0785be03345daecb411d13e5f72c6518cf17405747672a9f10010598599828a9e8a40e318cbac4f04bdf550a81b3c96c62ef6d0224192c23e555b9768169f79f60d1160d1166c27301559e5a6e5937a5f914968a7c7c4e5ab89492e8426411d716997fe6410629fc17fc4a662b61127de8134760bee4f3ac104a2c3e1b2ae9e96069a66dba0d5dc3e65fd3ae37800c5cb6681a256a07dea072f2e0188a32f23ee4ce23f3dad0f092f2ecd4b3111a67bafa7f69391c4941d0670b48d80df0cd400a436329321564c1c42fc7e556b4c7211ae5cf2c442ddfa4430fe12d1508dda54745fe7e4e3f3cd8e09527d566c39d279e27a66f502a0aa4bd8d23684ddfa5d7225260538db2eb50deb97f03cfeb7c26fab1a982eeb2555a3cef9a1a06d9a84e320513598f14e2c1f50927e10080c6a7c71022f76e7b321d27c3bfc2deab6782ecca8 +MD = deaa55eb0401cd20f57c0d259013d78c6e1d12ecfa89e019aa40145175691ce8 + +Len = 39448 +Msg = 2939116408b1acc879cb5428901be2461c09ac753419b3fa126f1db82592e50d6170d1f7daa2a47b91f295478d1a01962ecf5d54bffe6e824a56bcddb00644baf8c86d35e81e3d8ad2dbcdc3b1e6fa94753b5e839a327f4bff044583f68bb27b9749cd675bacdfbfe690e2e5230637099654974aee3d4c1dda82a1f31ea89716e6fcd9d45ad5f2e07219bef50c021ebc3c22f0f0e3a53fc083d7b67551e65b548ce87ac60e1fdeb6217c473b936319770dae52bfa0f4befba10b6e50b7cb66fd321596839e140c0998c367fee1b08f00b1ffa3fd4eb13398dc27b0ce77e120d97f8c1654333ce2a182f605881d71e820d11dcdf31465055dde316335bab0f2af1c54e381f51ec945851b091f702f8b9f1511b6e91b979c134c3471cea7bf4249b075e3520b422abf493c5a0c0270e24524e248268acf6082d135c1e16796796de4f8000f9e306bd57760e297fabf54daa79869f48a96b971133e3bb621bd00e460e421ffd571f650b790880781a14925453c039943720fa9ba56c794febd3d76cb412e6bd98c31f7b0d334a6bea029efa7d5fd5edceecaf36f864dc5261c9aeace180e9bd10986940b31cebada435d00746b3f8b7e8f5215dad5b58fc0657e0a1070abd7e6715ced6fb23f8cfc124b205507b16850df0fd7a24be73bf41d519c3a51ec67404a1acc855f6d644d965c17f2af3b3d7b656a036ff0cc10ecce7a69f3c3b992061f2af7f53f418af556f8acf26ec55126a9c95febcd4a58cdff6339e4cffaa26175f336665aa3451bdb88a9fe4937ed7a3495b5bce94a59c23973d4b47c97dd78d6dd5381b97cdee7ab72d4bd4a79599f8d37cb8a4cb55df00312010cd3798c74c95014ed63b29d825020f5d87873ddbc3c1569feff71aa82e5a88a94da86f67cd7b44352602fca1452f8d6f6db0ec1f9ca9959bf0968889e679d35f39ba765b98671a65ab9d9adc437643ec07c304c7fbe2a62767280416d125acbd21ec51f5261ef06ab759a8ebb89cbf4dd62c2c776a02f4bcb43a31c166d4513d869c66d70ed972aed9c59b421cf95c1f695ad7a06f912dd6583b860c101c7d7ae8694973bb4cfdcc937fe681d92296db31ed7ad554f3ae0ed3aa756985449ddfb7d15e5da3d00e2e64d70f2d759f1c0bb042aa88e2d0f1c0a705846c0f031ee6854339f76109305eee6999a78ac5482b74f8db2d718f958652eb277645de8d29d15d40c36b6ee0d860a60a82813ba7a4e08e715589a605ea67b9f33aa21d75141c8e27543b67bc258c2ad630e178b71293622173b3aacf4746007c0bac66533fc734422c498a1ec0c156814533f302ff0e12501a58145e377e4d067bdd4f93f7820e25be2e5c7524a0c7a031e140f7c4a11d81bc0f594f2580fe370dbd1fd3e5ad6a468c52457bdb9aec978981d9120dfcf23acb420ffebbfe928233b47d8f94d9e729094ddb8f501033ebbe9e21ee25822eefea98aef94537b87c806bdf235f77f341d789852c2cb13c11338eb1f8b5d132157c6b9cdb7bdcce9a663bcb3bd0081d25598de8decbfe73bcaadc1fae395a9a4003337ff1aa5e434067bcb835811ac34811d36d13a8486922672eb19b2a9ec5f41198cef86b1cc52307672cacdd20943e82e298675c3f8b070acf1e2c040e43b61a03e03c28c8b296c7b39f0e5ea9fe5d4f43e146523467bef865cbfd5039a1eaaefd7a598dc29a302b2a95d680276038b96fde3d24d77dded26b217b89a15f2622fdf3cce4aafa7394449791ec19786563dee5b84e893bdb0b47e5232ac5d9dd287dc302d7d241c5b59a1adced009547d119ae5429da302815945d70be17b09422058e87d1e90ecae183a5f42d6d457483988e7d614ad96a83c91100be3761cf921dace86d4fcfe7baa9bf9407c0175ffde40cb06f4bc606d87e964f95756c041b3eb490f486f3a09374ce1916a9798e9274bf79be5d548185fd63b9fe824dc60fe12c1e221f188a2e6d681fd479ea74f3d30d55d910236f0eedffec33ce7579f29d79ec5088ad08cdfc03f4bbb1f8a794777cb139d4a123e5c8c132efba71b465dc24981a543fa104b928545702029af6ea94387b4b6c44ad165e3a8ce6c0f9dc15c28de9f23ee7652d5bab10bac6c39da4da47f7c4c355c74f3d6f95d3f1bec7e2ca4a39f3295061b10455837c83b5eb2eb56c49d164bbc6dbd55e84f27277abbba269a4c79d508cfcb90029a7e7e681f0bc11ec01cefb2e54bc63e4c2d1b90a18f14894fff97c3958f0276dcd51d9d48364d548d650a85042692c3fe58df765832d7394fcdc48096e2037ea6d6004656f36230abf9827ef1d5223f0ab05c74072bd872f5e94287f94ffbe0a0870faa70cb6878c3e041e5d5e0dd7a1b3d78d2d6037efbe95dfb20e75b526571f23313bf45c7f57c222d02d7d02a3bd7081cd7ee41309ed231d593889071d5c11f52c76ae9e76f7fc8301c202c734ce61831cc776d5821586bba270375bef83a14550f9a3f30ae73da317cd77c1f73f1759df998105d4d241591258192a29682db253377d00b79015e176b25499679a0284aa67ab1a7eade3642d529708676417ca87b2823de99d15ecc2f32193f269a381e1b45d89ec02ed7b47f2496d06120fdc82fd6c012d78ae137102577844188ad039f200daa96baffd16b998cea1fc6686c96a83010f9d4f0405826e8cc941190e07c33d933362db680e1b1db3a78ddc47cf9c7fa3fc75992cf4d5ff680e5dee89cf8a7c3a1662d04a928940a2a340a1adfa05aa6060bbecfcc39f52806fd96bd215ca4545cef62f2348969a1201af7717fd38abdcf8baeaf1f621306c7a4e21756f05112cc9976870a4c582986f34cd143da7fc60110cf3bb111df192ba16aff23fbd787592b0ecc11b98b29c387b04313fc60490362c97a688d81e89bbed57c70c75e3b6c6fd5c7321727293f9ecccdd78355ce3f4945752d2022fc7dc1cc97259a0db56b2b708256b057b16200487a77b588de1c8deb32e910eadb3a73f6572bbd0c7dc0288a0563ca414a9474cb4fdcdb1e0002f562bb82a6000f3b9cfcc46878841bd12ec95643ae0d7b3dc4fd56ec3c42bd594b5318e22a8d20e70485e6c5129d170805d57fdca4e4cdc5b6889690221a9c8a55654fefe4b894a5723ac62ad57efacc74578818f3eec794131117b1d3ce25fbdc416a931baaf5dfb0c26b8007504c8444f777dde552f112a243e2359887e015a78e70b4198acafc84c7ddadf13a939a3d5c5615c039d3a82dc3fe06b96d564080f56a3c24819c64b7ee259bdb655975272f2ca7cdcaf6bc7a3c730a7ea70ee52d1e5f1285b7f27e11e14a300cf8257dca17027b542ee1b853544a2b2f5e906a77b0571e845354b459485456ce1c801aeebddf799d8c1c027eb38a4f13b9653926545b48687e4a6d59ca4cf467f9f1b45ac8cb89ef0d3004c3023b6073e114b802b171787b5f5d12d71039f220b600b3d7e1cf9394d9a424ece9654597fd2551d270a496031f14099cc22337417c357f2db0f17fd21700ccbf0f11e6c736216b6038f98a49e5f8bb708712ad1272198024dc3b35f2efcd63061d472b4bb48f6d72b27a3c95da90901a070f3bdbc1331f830eb59d3b8a915187ba0dfc6a9ef7c1d1852e952f2564f164eb21c9e3900bc214ed66a0f710d7fd0b8f6d416e1ce1ce455a1d7b5ef0fc4414db514073082ad39d2256246ca924d159446ee29d58d6fc96d950d76b60e1f2f37ea686d35117b8e7548d12e47b02343b8018c740775db38ba9ce929e9f9a64c97d28844b925adbba2c1453a5b1f88e77eb74d99ea4ff5bed739f923fd5af015e7fdf2223f37ca2de52f2cdf7718f48d62e89fe0105435c84deccc19629a830792dd449a29d04771a6d2f6a24e34dc820f1601fafc2b11f18935c06ebc40e5be42f0edf11b87ac13725d4117331bd771ddbff25f104d10a7139574885ce69e9652c95cdb86b67e7fe24e7aa2b8064bd949570f60ff32c865679c671ad6e3f42c5cd72fcdfdf5253340f731c95fbcc034fc7bb7c51b649fc91fbb068abcc1acecbb9ac53ce3cc36ca4917d51f9c77caf1418e69dff76b0d2e8661d15c71181f441984bb9cca9429a15500f309f0ffc2bac30fb43605aea72246315604965fd1fed145818234e58454ef430a1cef9d5dddfb80155bd8b7e420d99a13178ef15b499d3d95719548cd51826e98ccfad8e2f745801bb5e30f4ac6ab1c8709dd8511c0b7dd95ef7e367b23b8e41d9eb54af8835b7025d8b72d51605529305004739bf0cbb5d15052270457fd340716716c04fe87e0c238c79a8eaa42508d8e965560563356f648a3a2ff4ac9dee3a8e1a4aee565427f5a86cf58f10d132d2a05a2f57da921633d0532c288996541da789d5cc47e25cbb2973456d11ff16d96c4d4c1b377a5b6a1d93f04adf647902f98ae75183d0b25d55b81eec6e57bed6976636bb439744f1ba2502c076af65d2cd460ae5d1c532c375600b74f18031b267cf749dc68edcb0ef2feaf4162021736be5c5f0fa69e3d5d096916d6023775325ad8e2b880a288f03da314c875eb4cf1b8ea0dac765cd7cb0803a3f84e799a3182b0dcb50b13277404d5e32901226cd2569240bfd61f89e5b468d5225759e898a6e78e7e72b014eecb1f90dfbe48054d09fd8ec67046d241a11120f0b748eecc1a157e616219dfe502d8a458e7bc94e665845e3ccf733f7350952dcfd8d71b606ea3330a33b0f6db4ea9a42128009a22dbbf159f3e252fdf455d422c46850cea171922d56205e855f0fb06b4e9a48386ef166b7a56bd3209f1e204a28ac321cda5fff45f979922c9bc5552a0c728ff870212c63aa3dbd477d8bbfbaf1022088f9dcffe052edb44cae3410e612b0e5ca7d74c9c7cafe185ad7c538dce71121fa450f1c662b25cacce183690829fb5396db12c749cd57ec40f5f31317d2823d5a0721dd3f4ac8df947cdbe8f619fbe044d322ae537aef42e31f3ed9d279fc7c90883acad3777ff88cc7631619aa5994bcadcd044c9a6f212a9dce1177a528e7840d806c8a7cf21f9c0a447ad9a4bd77e6b13a539cf57e92fdb6ca436d1ead851fe11e4acd20c85bac8ca59d9fcece92aa279222aa53c59c44b45af81cac355f474b3aed022aaab5a496af05d1f135ecf156fcfae07ceb47e7dda8b6ec17657be592fddb93633f336c70893cd9d59a8da187a162a537999bcf7ad9084526e7e3e2ff8e9ee69330e0ec625dca1d42a37ea402a8e2614e77a1e2d218738fa3639f24da15be658224c10db450350700fbc6e00f3a027d872c60092f8b81325480b5956bbcc176f7c4e0b5ad8c07fdd6486d3ff67f4b5fab61e02dd75ab99601e72f1cf9a93183bbb844cd9639c7698e337ca8fe9e447082bd2a3413aea323744014a0ce0495f397a7f53eb77efeb2ee63fa0270c07618d3e945082bafc84274326d0b30f6762e5039fcee58843340bf81ef37940c67c0688c398f6784af59c865414468a75b9cb11760c7c173ee7bc834642eb2aba1ce074f0fb30f56e1d239829833bd3ecca581e929b03a72b8cbd3255fcf12c4acac79dace5a6a4ce4138f317bc079e351b187565f900aa91798a6fbeb02fc800ec085d47e6ec18f42869219f0d3e2c073288c070b517a41954a0b5f0dafb7075174f5e628d65c46829109e3025442fab97258a435dad262ba49c7f9cfbe8c80fc2f90b7d37a839a2d9ebe36b62bdfbcacf7b3d4e3135a330dfda5703817c31398581df087427eb3ca1477bb1640022cd21f653f1fe459dd16cf6c6d50a3a4eaac5965384c1694b8e15bfd1a297bf272b653358ef03519875d25e3972048762ac09930382bde0fd1fbdb18faf7c5f9b7ddf9ed695feee05a6b68d497afef83fe5d8045972b8235289ffb8f0389045d23d17b537772f7f77ec70105140681118c0a766efe55ea4fe255262cdee62267dd193f30613338a61af9563eb72be469fc4fe37115afffa42aa5c1b53316055f0e3daf4bceaa9a34578ad149282802d377b42f178344a77e261835f3a922978dddc5316e67de03eb5c01d9ed0e05c19625c2c228f119cb23fe35eaaee911be38733a2f5fd4d75c1152e6d5f111c80bfc2d00056c063854dcdb8448ae9beb64aaf72410e7bc9d8eef60c22f1eda7bc74bb7f65eab6ba828f1e58eb8ba66b9702992093ccec83980cdaf1b4e3c1125ddcced2d36acc77131aa43daa09cf282cafe6c731bdc9fb219f3667c9a135ecf34c7f52cf638c39c554f1ef1691ae84e5a71ace915d9e91043a8ae6a7b6a6780b684f77b0417072f7e279d597cfdf02508c97bf4928c505be535af6f590ad7404a4a1ca3ca113a35937be99c3f0cb110bc50001bfabe7a9ce6e290129cbc5417d8638b2baeed04b37c9329411c11d4165e4c64e6b5370fdb30f77adcac46860e49156d9b1a750fb321b786d17ad20040d606cedd2bbfb81eaabc9453f270172c83a9ea7c756f003c6a2f28d3c119de950cc66789c41e1d6f3c790701d404ac7a6f67295527a482573f4236cf58ac161de8d45671e91be5d5ce75fa6ebbc8f0fef59653ae98dc3b0b883ad84ea9534fe05377c41d0080b85948f99620108688c2fe7f8f0f30dfd3602d5d38d71bd831e733f8d91673134001924d02a139041fce706b06015774f35e16f47bf216026639729fbce3a89d22d795b96779a00b5b2835a0e00b7565430e2b46cc27029893def6b4960c09e509e33785ed2eab62e4da336744b6f2786a77559d51ff486363dfa97f8e1afcb59b2c61f8bb4ac4d363ec54075a89367611a17a3f32014e2b7b437148cd94ebd380bafc5bfa55522480647eca4b0ca926df95837598b67db7861238567b023d086195eef6d1d5bd1ee24c9bf63fc7b3527d5a5987aba43dd12a54e5f2bfec5a1ce6c6211169546c8932ab92d45d43bdc092f8e2bd9255f73f0f126064c1dbaad7b6547bf4ea59c92d178a4bacce072d39c77808 +MD = 44bd7e9b27fcfb301f251f7badfa340d789534f9788dd1c71f1b682c7e3c7f9f + +Len = 40544 +Msg = 544af9e52688628301198abb8d1202649a18af65bf72876d406295e435b64321e99ad8dd81b040e7de630c1ac478b98d3be5350935e79fc0724f4e3ba11c1695c84fc6e7e5fbf503d69cff6576a94a66096dceb3da12d4fe22fffdf32c64876eb712cceb9c910b3eb06c6b84ecd03d59cb55824bf41cad8f191aaaf31fb31e147f8bf1d1ec990aff367d595e6e131bcc4b4859b9cc2cb2db1f495b23c23464efe8613d811e3b78b02e74d0dd439a6b294fec5ce5aa6b6c4bfc341a6b5c0ce067b93db8e379a1dfb861fcd9e8b58eb5d7a0e992b8d50162457782eeb337661be5bcc66be047f0c67f97bb7b670a17823e06e8041897151c3259dbe0e399689bcfb7a55d5ece53b66d9759be438b5c58c64891b8ee36cf237b6ae9f6e3cb3aea8f7381964658f036ea2b7faa628086c2d7308bb823fb58fe8672513a9b1505908bb8031f812befce5e19d548ad31bc45d9847f0c9d2ed835bd39beb4f4bef1132d4dd3fff68f7906312a029f0ce5276b340d14ba461776518786d66bd41025fddcfc983e8cceb667cb26afb768e6efbb5093f3cc05fe5bd94b2341672551cad5ff8bfae52d2fcd7894d58399a77a3bbd96dec349c12aaf5573d6a8b0cdca072400c3a3fbc0f9e6c1f5ff274cb3ea33fa6cb52d3a64e4994e6668b34fb6c30571466c38882c752bcb546b42d8727e01f93be1d9a6d574414b8ca1094bc683eb44394e64955bebc21d1ae27d46ce7dca426c2b6e95fc22d0d44d4853ace754e2254130cd2834a2d340b02c809dae31b95e65589510c1366e711127387a007c129dc6dc1b4c9fe487ba7c11f2e5f9e0f3d49033f51d0cf742ab400461bef844a2333018f70684f70515e8597b2799d3a32c548337c7c5ae750942a87580b9f4bb70e7ad0960cb2476d85bcbc46a7552efef180f0213d4a32e147fdb1dc62ad484db5363f8615db3028c3d3075b675a4ffa446a0ff0b211e96526064019a332c26fcdd016c1120ecd0b8f55036138113fcd345fed5b69567d54d4b0dc803bc43c85beb510f79fd1709e4edf3ad8a81e50e057df12d1c16c5128da99c1b0aad629381e71986a0dc7bd4998ce185225d635cc05641af468d827698e3daa1b5eed1aff537227c8fa6615a5d3ae164e4fdd50f8f38b5023be3e428f85f8f030e68d8433f4534974c4111c3bb5fbdf3d64a834ef78b17cf03fe3450358783e81d01bf77e877177fe197d33638633bd9022ab44282b72dbda7c8b918d5c27df9e9a2cd74773792dd558fefdb5eaf24be7086b213b724c0752e28bda6627747de7a344b6274ec6e59b110acdbb4a93f4c2747c3e81e3a979ea00586226410a73ed89d816967fd739afc04545ec2ba56292f5330e940627ce106495db561f466c10cc7b7afd9d469493e522d8b114a2ffd90944140a40235e667db8a87e38b4c101d98355f52d8180d80e2808b28c2947152f13d12d3848b54cba355bf713d20d313fa429f5871488fc99c94868f884b2c7e516e8a534e46d43a8906859472acb1f6d428977507c0772168b3a3cf061cd71c9e1acdaeca2e0dbd75e403d292b653cf0d2d713002496c902e230a6fa3d11a32bf8a066b5e0aa85b4f385eb6050761a58f9a5211cbab161fd62de4f7c6309cca9c065b1374a44c1dff4ac1c53367828141b764a1c8ae1ed5481959f0d90306eb1dd5f42d73c2a2096d625289859d5e6a0bcbcf6762192cbb6c2f90e14310ff9e2a41fa41c32d512a82c8398961739e68d520bbec01b6e7d72ab7b2526c2030eaab9095d8ccad028524c39f4d30afea8387fc4fb60e4bf8336bf8e6cbbcfa41d7880bec79f50a5d243c9dac5e5b1ae9c40aa8b34fefa106d7153b55d59b68d96da9fa28aca80b090eb39c8743487c4432446c103f0e80bac912c826f77130a0b5f6a570f94d79af4b6f095984619da3d61e8f8e0cd2b0bc1348e782baa61b40b65853ede94a1cf6e45a2c49aa0d44acb6805b5440a2f8b3bda1e091a5a2f15e78b54ec70308bc87e05b4c803cb33b0adc53168b62e82148cd04fa7a40cd7aa504f7dc25cfef21094759b225c2bd4863507d095afb0bf4224d587e6613907dba6104462fd6681225213ea761c492346018e87cea927336ea4487b47ca751c44897c6d40f9fd9598377f1715ccb9ac6a83e7ab662af88b247bb78e4e5837915f5af23cdeab3abbcca505a583d5e3dc8e4ca1d01ebdbb12fe2b91356c82f713969b0057beb984704a3b561a62d06e300bbc2b8a3ad9c5974624640524e34a0f84da2532437d813f9b5adeea1534af438d63033e5cf7de54a706ae71f9f196d19498ef511f9fb7962a940e993d8b2d836dc1b760f7a03be79b42ef006e2664266047bd28a5787e00826763ac2e3c6f7c3768c6869d5b84cc9d599434f40a486a52771d4d67906b0b4d558c9779d0fbaa64c8af33b0923f7027cb4c942e05aa09f5978e23f88ff502c5ded7ef92d1487a9051dfecc3dcc28eb50866826eb10fa1c4399e40bacfb2a38683e4292bc5dc792494d72659a3c454dfa170945884efbe48ddbc3830c81a5a29b51fb887273e32ac223354e48fab8f0216f95e5e09d0bbede4765efd1192931a030932476dd413916a630cf6e8ee79c6e97f24f1a849273dee3b397224b1eac1fe3f0aef1234b87eddf4b3034813c1988960acb5f8cf8cc36b995c228a0eddcbf70fc6e0ace68dbf0d46fb8c35a1d2e1974c3a0d73ba68e8ed1f4ba0b9ffc8929e19dabea65fffec68f82b043a1f4a5c6390718a91c02848d31b6c5f2d1b47a053ebdafb8707ab918186d60dcdf284439eebd79feb47575dce3c52c05bc7d79fa8d43c09d7840d28e751910b49a21d41a9bcd0cfd8d682823ef07376eeac04cb0d81727c104b911cfb06d08f65d471c10461e19cf2e4166095b662d52e3e3bcd026212c4b9c4d4084d1508fc8ad02e6c4f99ae89b1f6af73631c958dc2d50910280491664c8642554deacef5214baf8debb28c08ae949a3537917fe31526d93eded772f3311668ae8e1686ebd19d71b0595b0ebc413483208393a687cdaa48a3a7593bde1febb35e7e16c553145c117e18d1baf7025cd6bfc7b19dee34b5c3d902085099518cbeefae7a0ecd51ee0b41bae4f55b6a74217d8469ca78e2ffc7598f7355b78e5ff7fc9faec7ad22e9dba5bfd3524bf220efe43a3ab0da60deefafa018bfbb2efbdaffb22384950fd5ef04884b566b31e99e8e6982e56536e99945d4670306abe6e4539676c9f76118c1f8b4ab861ba214b9d68300dcbbcd9650b69cfca43c8d87b0a2ad270c56cf4900fcc57245ffab58ce4737030b40ad6ba26c7a3837cf5c74ac6776a2c035b2ed088b2b4e3a69e61c487ac62805964ed00ae1fca812319134540c73888a06b45b652e568db7eccae5b4cbd0de301f3a79f6c184dae805b42d342c3426de6c3c3a9340e7bf631ac22b9fc4e7942f6df8bff255b33f0dbe4de5b921392c11b8c3010f8d5f61a066847465f06af867e4f2289a49084317bdc6f47f95e306e88ed125564e1e0314425a56b3c8eb695e26bf2a3b05e4958a96a7bfe3f4c225a750ff3df41db4122340ec28e5c8d96596a5d85b6106d894dadb68ce82c86726f29195a16566a21d51e48281988ac58b95d4a632b8d664cf8cfe9296d88b42893ee34d0626d3789324afe5f728693039c055d1268eff19a41572bdbf51a7e4ab00a88dc2b4ce98021ff56ed031ee99feca8bb1cd7feb57c108ca328e8ab8ae2adc63c06d9bc290f8a86785c321a5735908f8f09df815bf94db77a9bae0383f7726a79d6d4859f3d55278d34694184cb7002ff5fe7428a1ae020d7b9afea0f92e73e66d5856ff2126a2abdfb0f5a196c744833a85907ebe6b10fe30c5428d6baf48a2c8a5242cb96b1d72f3b8b2ebd1d84ab546b9c992665a8ccc61b038481778195f27da4c5d1d213760c7b478519e888718a3118c0e29fae9ea76e25c8b8d176a8e137e4c1adcd764e7b44aa26d4d468e3fc813543c79da9cfae8e23ba22d1bb0b213f78ff068fc4a8a51d1cdb97e90c49d3e35bec7e6683a505026323687e3806d91dca448521e3ccb28e056a0a305ceb36dff281af022269d1524fca32e1d6e1315a405bd28abd02c91fce9cd4b041104efe62cb027a70623d074e7927007be3527d440b94d238921259dd399e72a10243c713921dd553da6ea8c7f6efe51055640e3d1b73023ec3b6c39b090f7c66073cc36e9eab1bb5178fbd240a33987e7f8e9693541921b6dfdde670d3d0d876686178d9b652547d62c6cecc7d9b1faba9f99cad7e2b37872cae48c561888ebb6ddb70bda4ba8993033b642717ce84811bcda8f561544d9bf352730079e0a41b5dd233832e8cc2df4218069da075cfe71c3142d2c43a69d97bf1ef8be4802480826d47911d70054867823d96df3706c4f64df3ac708596290eb142cc6a0f15d122d53651380d5cb9b9a3907a9dbd3302ef4a42ec2eded973f2bdf62dd23680f686328829490cce1781a387b1a2ae5d885050b8f8c4ed3c9f703b9314e69c6cd6f6abc3831614634b08aaaaa3b6b38d3e6186db39fa59c696d0549feb6ceae15bb96871c669ce243d93df82b9a174ca0c691536179aca7f3e5a2fa4192dc7e86c1992195a08e218d56d6a96592a981cdab2254efb6aea708056f52906f1dc87f15c5144a7bbf748fcdd746eec1bc88b9082ddad4b345ea0450bcdb71a80d0c8d3cbcc79154cb5ba982a2593db3aab20162265da71bed11773c2e0d5bda14cb3f8ae2c400c81c678929da48c8d50eae254dae65dd3d1e9def3c3550b571ef84f494d9821f424cf8ad37e1ae169242cda33f188bfdb344efcae5655e150bd7ba4aeef39a535fb7bf64215ae1bd9801a0e99b17287efb1a9798bc308e010477eba10de375337cf6fc6c6a989c1432a5b886f60cd3d790ea25e7151958fff83a89a5560b9b4626756024983d25b11eb98509e47c069e014e0b24a492576863ba24b67bee74e1f8dd6b0b2ecb272aa8b796c0dae74948c8b0c7dfdf3df1e0b3513d52c40eaacd40797dae92a518d76d2a5e6a3dc1045e53bcdc87297ec0ef83aa4418e2dea53eb9e4287d585d634dd88c5c64a1bbd0553ebcc9a917d73ceb312fd9674cf0ecdca1a7fc0604769ef47748012e9b1a35b3e65b1fb42ed9de7a685c5dcc56c7fa0db43f58c71b634471c5f7fd467e7e9cf0e6f23f36d2e92e0375ba41b6b4d655784e14df3f11c5cc3c4116a13ae05b8e92bd2ca8bfa897941d05b445c4dbae7772fbb2ffdc6bf0ceca852e8d8a5533732fd564fcad1467a93d84f4aa653fa2d8a439a41b3d9e86a482eeaa12a34198f31edc25ab9daadbf5db7fd61026557601828462e1c12de9e61bfa03e11439ee76e61e0925efe056d27d42d2f776b17a8a745879c4059ebd1bfc43d6795ba2b6872c276a0c32398af7a99a95c0d4d832cc10425342897552be8a38ac3bf810839c4794d2bf032acabdc6d3891ccf3e315edcce79ddbb265d366c64cfb96817d84edec2ddceb148a89d8b8a176bd467f8ab406967f619463f2c1934eb622a0d26e7385dd5bbeaf7a72f3e3adb2e72c9eb49c18fa84c32397af7f74579d6cc74e21e0ab274f71edc38eb75424ee538e8abb2f6bdb52084948332ad02e587bdf3ac5bbc5d1610ab5af04ab74ced1075589c6f567019138edc0a5490e9c8e58cede818d3da43893ee84fd57ab72040d67e4fd757434ea5cf7452e659869e7097e827edd7a687d13828ba04462da2e6daee38937fb3b047b4e20f605d55d0d98d56ee433e4e5d793580c16f9ffccf82d11cd92c362df899ddc9924b12d3fa50cbde9da17e3e2ef1a584f86feec11095777ec3fa213e81eca88f7e1f208d95a6e1d3d8812df296cb06a9b19dc8f710bf2ca86b95b741e6d0b3a84544ecef1d1c5dcb017ab4080f75d763af61a52b3a307f1e42876ef481e67da86a64fe750b519e48baf6b6eb0382a647247409ca17b9dd44eb37beb30d9e75146fe7dbcbeac731c1677d9d281d61e1c8c31d7d4013bbc5b0b82f3d09c4592850c855fb3035eda6c98987dd2ba7a4287cfde66649c8b6c6e65be6605550a705f20627d35e67556bc5b3adfd725cb9c8b857675b33a11b6f5a28f5af423d189c7c9be5fab3096eff4a583884a88723711f4208c29a378a1d80b1c5904cd42e6a650c18e7ba96baefdbf9eff91ac1618026605342e9e6636ffe88eea9d1d048ee2fd92910f199c9abdf1b1cc1659604944214df42af4847c52810c9627d9c08965185af0cd48d1bb1d82e5783f56f7d1c16e1f55856d797bba1dbfe30aca1de015e940341ffeb11a05bc618a766d85b85f94a3dea7d1ed3b1d06cf5bafb8c49adcb86de46c02e4be5ee54e8a2264af0608dd0317f9e88ac5658263867c6b5cbfa1cc09881b1d13b00e46d300aa041fc4a38f6488e17af52078daa3ebdaaa8e584c6e3ba89617e6f6ff27197578157dfa18f3f1bac84ed9544056b812323e026bc4e62bcd44b8049a17d04771f35f70ae4f51cf34172ddc6aa33dca83eaf05f03f37c027e8dc716a34088867a83a9a1ea2ff1297e34dfa6698bd900c76c864d25c078e844d90ec31a6198fe1a90bdb8b5a21a2521892ce059df7083651ec876db132104a69053b4066248d6d882615c189015eba47cdc3242874b7be56a807f2cd4c07f2c1a5f906f2ae0373cc25e3519df2ba48f77b6432d6ab20fd0b7741321eb9d805ee0fa005ea3a848cfb67cecc378a1786be183bc2172ec67ac6c6dd8c0410030c548ebacd9b4e83218c782291b43c28ebe220b44278643ac04f3337613bc31b7e8bbfc3beb45e71ca05d3a932b28d50f13a21684468efd065db38e962245773c4fa2f356993fee2fede16ad3fa102122efc86c248673639c411446e0f3c51ce7836399a4ed88459289b9db9190e1eff0dcfed4cbef1bbd97377e22fb912266e10b68b6ceee09346efc4f5574f68587a161ac18218a6f531ec859ec9001469e526f17127ba4aa03ebcc0aa02433e2315c0738fed05e576c5a7a0d6a464c170b6238da74541854f9308351834a4fe23549540b4f7d73bc5273d80265c67b7ff737ed18a60051ed5f66a88ec78e536cda91d28dd2d2d2844b9067a1a4b79665a8fc16386e28575e7db4c428349746676a5c092651778299 +MD = b28a58d2d10c45c3da7121ca65bd9058bff5440665c20b89b91fcabfcaa889da + +Len = 41640 +Msg = f419d39625deb2ac11d7d361e2d2de958d3d94d0088da7cbb7e0cf3227e01aa8feeb840c3272c7fa7a9f7495023b438463cea73bd208a67c975fe81dc2fa0e0b19ce458f54071ad08da9909af2776f5dbd14e079666837b81645101c604a9ddc2c083ea9f3645235323c4ef6184e0c28825565112a7401881bd86eb8699a70221ee298e17752183251a2d633de87bfeb9cda5e8b88f6adf38f622b7845b02ee5d9a47bbf499914ced22151d8abec32b0f2ebf470e7b4e20258296ee55c54802d44960ecccf01ed119d02e76ee6430d7e6ccf4e46ae7849bc5f76608516500e0347007a8f72524c039a8dbf7cf955f75ef2d0969847088a298c9028e3dc6b7f6eca29e6919a53d8adb209028a4bea99566c34f1eb192c4c51c8c1f084146c7c77b55a7b58b0cd3a16cbc0d72144ca9b71c24489c98cae373df94fddf2281cac25f0db616e1a881946cef867c84cbca4b4dd4886b90855f4f4088319b47e43b88064f4bf5b424c1e46a4fad907cb895c29a3881044f5e82b7edea5cc5280a94790f7edbda58ee1f11d330e566629f96dd7fd4b4df0bb3083e461fd1d549415025e920d85d6680e39d3657b066eced47cc6d3db6848c2f5a52d7bd23543245090f11e9d3c75379c9e71218b10a623e234ff0e7e87d173fe3961136e3ca797239b5181e50d0b6354cafe4e849d968eeb3a89947dd3153415e689111759065553c887a52d1e1f54fb6282d6afd4c778b6396c4f20739b6e0054ab5c16b4eac6abc19a70bd9739715c1106a054dec04a0cd7b126ae8feb8a882cd2deb376da52f22e92ccdca1e2243e7d9094bbe2096ab5bc5f0071518eee7516037e35c75f61efb678a0d464a0d5684e2b9a2b092b4279917ec7afdf0b048fb94824e6ce005b6b0253d4eb07feeaa32ddc9aee7bad3820fe1762b161ea339ebea8b80cb445a82eba2b4f6ab281ccb7c2ad7c4a5f17b671aa30b9bf00b4e269cc2c23f0a0b6b0008508fb998fb3e36cb4a52888ddf223353ed4b420e3f07bb98cda4bdabbdcdba90bf3bfbfc31b978aabcc87ef1fc5e73461083b1e34266556a6bc19112d3e92f0f5f38325794151d8512b7fc94a186a36bcd636ff18de0808c1da75df1d643b9feb112f14d7ae771f4bc9f95c89741303f7458d0cb9a1cc97853a488ab3d7407c9454acd205e9732744afdef2025f4c62b95d288d3ff619ca9ce6785b191e075099c4e0a72c7aabb8e2e314d1dd637d1daa27efcad266576aabe6ef9a74c1fae2a169b4dd74ea899acd6f854143080cfa73aacb0a9878ee3f5d40938fef497ffc554c10bb04c07394ae5a178c5cd562c2bcefa297bcb4461157fe4e82af3d00645d74dd880584d3702dadb4f94f52e73c2cfc5eb764a2c7a8442807badf25e4e360e9018d9ebf10f4f16f43cf450703326cdbe5b3b9cbdacccac4a680a58a934107b46612f8f892e9a3a8ac57657d1f6a249421d3e2b6e54491dc121c29f27546f9dcf25e3ab7c116ea61d7d9d83ba1aefb2df85e07eb52d9427735d694e8f2bade698fbb8d8405456fa1ac9cc5c9f3c499b0549e52f38753859ef6f50ef172646064246f19e8c63cda7013ea55b07b74a7241cd9e955ee7a01583dc3be975d0d25d499c3056a6cc4d2d6f409af77a388cd923858f499ed155fadf286cd611b7dd5c1d6ff7a935fa5ffdc3742fda6d2c6b2018f639c48eeee46a5fe8763d7147c1933c26b9fe907a70a89c4dd64c66ff8ff790b4108e958cb5f49470ea682b0d29933474f9df6cd929be683220e5ee4e45b03933c6204937552a0b663c1e95846fcc84cf29b42172d59f95c5923f698536fa5109acf2107b4c6b233cdda9572a2eafbba9dc2534e41edcc38c9ca16f30ce36968a479c91c4f6488a7951a0c68ac0dd377983ab3db96fe67fdbb2c475dd95e5784a288833a10d329f804a8d8a02d0a586c2b2aea24f435d0957771103e8088764cdc24d8c9bdbb9d1060ad8084ec8c92819eba7e93233a11e645c0fafeca0acea899734f311fc6edd5f1508d7ab3398a9f3814f98feab432da6d418c057f8c678123a070dafe9a203101ba86ec48b947ac425de37f134c3958361e4ebc67b54abdc0d1c32c22df3e0bd612f34174b5d19104c0c2cd64a93047ea7cc889492e7e46b92fd190523e504ab9815de1ffd53137c66320e0a6741e91cf8683d5ef9e0b0256e1216c585e5dd8f22f4b34b1c06e85d06e8420a0540c1d2d6106091faefadbde0f3b29fae96d9cc94345a2521f9062690a77f51cf201d34e38d98ba20652b89be3a8300184897e86e5d393a999a0b8db5f80c7e0f5059b793185c5404d1b80d383efe834d9b766703f7e6f7fd7a46e6c9427feb606205df574911dc02c5d1dcf1798b85d90013cd076cd9e9c80a76c65d1f40264cd5b010b2a85fdec4a2176d7c82c0a42516fe8eeb54988c83dae9a0e40703cb2f1bd6f037beacc8a506e7332bd3245adc3085312227895cbb6c3e0ae0622126a1b4f90258e46f263e54dfc2a2032d0648ed46384e5e42e6c92ed268e4e92ed52f2184ab88c24d73fb2c5f90516b4152f5bdb018b2715b9747a3554f73e4936341f2086069c09e3e65ede520cc9417bd8d22616711092a0ac15a1522ffece53d6496f2d55e77f7e1f92a0f08761606a259abc887cc7e349d90c3c087eb7a9ae00190e25ee950d10b3f614b9be059a4ae05ca541f575901ec6060b5e2e9163ad7c36045819cd3c016b314196f8de7684cfbfea27244121853aac183d86b383ba114a59ac1eb792b90dec306f7f147c7ebb6c922450541fe8fca66a8bcd46913c86fa150b447c99a061cee72d99ce34a16b0aa51fc2d512aed59b09324c71169ba4f0415cd444d91e318070b68f342755a9422cffc3ed803f8d33fe184b5d993e33d4e5871636d99c43a9d3f4a970dc033bbc2dae99c4f303ec1750271131a28ffb4d0773527b218060f216ce2ea7db11ea1fb3138c81f262baef0745e816b9f5c304b10ad03a39345003432b6804ade97e13c316e64d06c4be622c5c163467d855a1ea33d79caa1edb8361f59dacd9f1bf42679fed4fb591c119c553e4b233a077cbbbd6b1c9faa8c91b791316cae7937551a696ebb08a318bbcdd129ab9a6b6f22a2adca4e8b439e172926d1b84603667eb89e326970a0ce4f27981807046808d67422bf9225d38ec31b4ebf302cb415eb6166fe72dbf8a9463a388de009e67122a08acf89e7f0fb3ffe775e86db01e225a57207599301462b8620ffb9033d4471a8647e885a125fb8534f340ed97347b8054df1a04e5101799bffe20498f2df6e0c3e513fe4ce28f6aa24d44a909eb31d014951c9667e87badc03d955339dbe524c76cbf3207ae36573a6b3cca8dab0bf19f28c4763d02569d70b4a2d5b947dd8d9bc635485af1b7f403357077acdcd28cfd825acdefc87010d44c8ff798d8a5c346d9bd69cd13dbe8059427d9ede64e48378926c206a091aff6eba3e35df5076fd08f9ebde97c6adc486eab18d83247ce53276f7e09f48022dd7a27be9008c93942ce226b35952c77d5ad425bf52685c55c437f29802b061091e263b3b978b4c8a3808f9c3ac4e862b33735cacd2bcfd657c49ceaf3adeb221b099fe761ad90c5fb8c2e777e726844eaf6cc8fe7aaefa94e940fe9ebe2f7ff82d923850f0f25d752da47258b0872c683d04ecfcb09abe5489a204ff032f14fce3936b34c063aa7b15222cde9eccf9085af05b502b2cc324ebe16448805a3bc071022999ffa99dc1fdc06981e884749f87a3766130b1a3a67e83bef3dc3d3ec36482d619053081fa5603daeb443a199e4192d0d867e5ca29b00d57996d44a8763c8a030a77950184ac60d363384a72a52732fd0e4715c15f2ee2d091ba0d0369478c3316dd4396e16f6bf5821b51fa1497284d7b44ee039759a8bc855902da1d340dd8969cc8aca11d89a3e083dd2a9d2fd764b7e7cb1b62bed36decb0a286f2708386324ca0dd34455e80d6f8488e8f4fc4b54cb6397351dcd787205778a4899b81ae524348832b653eff0dff20806b7584c19216b595e512397ac8c401bd62f38cc37f374c48e6fbbf90ddfef1cac23f7c1c30bfcc1d8d1d8dcb5e7cba3bef370968219f0899078764c8cf7e38a8241c2f2790e7e954ca5d28fb59e82eaabed49bfee1c129ee0d86b3096af361b2f18a12664b4599e61d3fbf8d33accb74324a991a28641cd259781ef539050975cb07da7ac84f5a4c0653a5f384210d42ea07a52c7dee4dc07bea2d0ea2199c6b0123cbb7806bb6f1062760b0c3eb8071569a24b84ad65943054b51a83ea7a70d445c8abf0c311c6fad3994576b72b19a0880bc4027a2bbd4561a1164874595c6f5107bf3e42607226bf8a559e34d1d276049b0468cd9e1ff1ee500c5f469f532a3fe33e870b113c3b2e3183ad3d12f940e53c55df2e2681da01a943f0e9b51dad164372f6a78ae9e2297617cb5a5658a533d5fd8f262bada8a5940524e301829fde0ea1b09d3544c2b641581f1405b54ef74d459f3c156904dff99822beed4aa8a02e14e075791484e07a8fd2f287d9e2398e7538f94c7e96b9c0451301e03c71638a13acb8bd20cfac09040b7d448c0aff7fd581e438b4053ad2541f354221a22f0ae53ced6b314c24d6fff33ba5956e5308ada38542d2f96a150d6de17ac1e30c96d4b99cea0fa24fcac8b2b610beb53c1144c564d0a21c5272b8268df2e4da0316264b4ea2827a35cba66f76eecd88c382e3100a4cea13f9d19c71c21152321b72241989fb527cdfc2e35301a88b8eee43d2acfe1c7389681b0277063fd2915d92164cd85d464f5498c585e1a4c070c73d59c0c8aa0524a5363260e4e42ea0cf5f440bc030289c9c33952d9e4c34d55656c074f15c688cba0c7453e1682c067bbff57fcbdcbe0ac07d9a75be07ae66a2774ef1009c636aae8410788734956b699b73d080c9d142c75d1e83cb3cf8cbb3894c5f7dd1bf668a854df85dae3079a0dc0425675f28ebb9ba677f4d55d8ab917202e6f062442755f975fbeb3fc7d62868f1a609078dae9f7ebe92cab917ae451cb8ace2b9ba5617c7cea8ba4f202a0929827ded27c63380906be4ccd07d7dd66db6dcdb3de99ad9d7a1285147051e4b06fecf9c299c2164d8b69cda02d1c04c4f439c6156999ca21135a3388d3c59f7e6afc79c73d721533ee7e27db7dd1eafa9a914fe6c91047a5dd440f88b8d8415b3db8a776f3fda56aa45e03b57674008622e6e39e79a7969a3c42718a8c247ab54cb43b4839bf5740419bb9f4a38ce5e641bcf9a307ca378cb4e81204ba149c3b1c718dc19b519b634ab9e2ef8186fba96b861aaadff2baebdba7699def43364b21631769853ef222243af72cacecb23e04c4cf0c7eab91461502d0ac881ac973f02b70a683e1ec3b72916f226248ba12a21b8f5e607f4b09f58cffb71115d6340d1d221f13e4f9ed9a4fc3675e0573c5c7dcc3f731c858c601983f4416beed09dcca9429a1b2abd71fe89c720cbd6fd5fa9b058d4f213b08adc727ea05906e63e3b65f5cd9c5627687de42c8dadb1eb19ed8dc87351472207e9c320f6a14dae0b662dc2f28a7ce4a46a36ed264e900f73908b15b701c9ecbd889f63ab0c6d2fed942a326fad43fd0f0da6935275196f55dcd1c907c9401696012ece27620b71ca0f84ccadcd547990ad5da578ecf715a817886bcd7255a6799b97e9d26bd27d8c1d621814b256600e9382ab0279d009528ad78470c5afa64d9f033c15ee675a1907ec9f0d23f2ba73083e2d57e54d513d7de79b5887f71dfc55995056b575105b154ce8feead090a652b9b4dff715f74f37df38ed83d4146d0582acfe86a2a8388ea77c50cd97e98fb91ac70279d1037202e8e49680ef9288f7e5d8762a96299abc28e16c95f0ce16878aef2831287b8d242a25be45ef9f3573eb5d2569fa9b68e5f4a1b80a8246230230b3b9e9c36988e6cc86ca9b7d435cc0bcc2720a76078a5236449ef3f6599e74359b1d6749d44b90f78c234a4187e5277f8fc7d7b174e74b14508519f30f6f23c02fbc7463c5bd6ad2c1311ae272b8f05d4d8b9654ea6917b64fd54522717e58faf8ffd7b943c8bc86ac5cd3090dbe637d8325100671f70045c8f53d2a86b35a0a7d4c5af25653cd3ad50d3c5d5fddc708b9ff0d7012794ce9444fc9b557f77319460cc3b60647e617c5aa1e8770fe66257780553ad4d844c94a4ab368ea30e94fdca8dbaf5c8a4f45039d412e480a86fd4610af0bc0fa300e624ec2ed494805d3c6866a835f0550eb174c6dfbf0e770b7ad17e48bdcc858df14c3bdec7c250fce8c1038da18a031318a216a956f7f6c7c35fdbd63322a0365e9126d0c89b14f67b7ad0c5d8d443940e382ffa6cdb8c174642bff3bca097bc868a19af67ad20cc7cec4afb3c8d7b140aad9f6d3127cb9c6c50775baaa4b062f1ad90b525772901559bfea85d142e159688d15c647b29a9bddfae689dcdaedc285228ac72678217ae105837bae6e11b1a30625277442ad1a366d1950689c78ab33e5ddfdf1cc081eedfe423c69428973e6aced9d9f133a6c57c6d7b6547bee0fac88cd9dbf568d280512f1710aa590c5b6e737d1d20f89b8c86fe863aa5e99197675224f99fef7c1b1a956c1978170cf9d1fc96b141de12712ce1400722cbfee1b12a4ba86ac90107a2b3bd51abd6fba22bc6c126e258ce1bc4d2335b2cfa9b923c91b878e489e3ee70066549a41d6aece26e86ee610d00d4e52dca9742e9fa014014e5db9ba6a7281909fe720f5edd227c5052887c4f6d350470805bf31e8cb782106e510ea3cd5ce44b036b3c1fb4fb7028be8562a455c4b936ff09cc0ce63d6930bc79ac05c8f588260e85b8d4a4d064341555d2a07d0c79ed91311c39790b7be25aa5f2511c7a7b376a6204120f39af1f018a3ad82574ad00e1529228c79a20a1c3668ffa4a54140bb170bc5c669fd7560d9309900175e91d5a0e9c5f5471fdfb714bc385d52b08ff7e4230184d8b735593f0dd8c73b8a49f8595b951a21b6a5bfec63b684f67c0af1b471dda1684e9ba3f241501fe957603dea86784230f0c4fd65666361b82b187330fb4267404c0e059bd4eb52494b3e6dfb7257b79c54a43628cc253cc147204300cb161c8939f549e2cf8fa785f04b5033281bbf8c6bae35dd9de65c39588c2acbe943096a9bba356e392665c2cef0ad3bafaaa328bb48c12be28d0a47e4c3f0395baf760cfcc492e81a97d52b6b934dba0feeab9acedba1baa2028e13752d5df32b44aa96e37b27f77aca3fe5519ef95951ce1e072cd09e33e52d30c6923239a161e8ef31d947be4462a7eb1b087777c07c31469a5b8d +MD = c9f2202f88385e0ebb09cbe9a94b3181ed9563781c5ef2013ac35c48c8fb802d + +Len = 42736 +Msg = cb0c8cb104b5db2f9044d19f89bf72c631aa3ff32c700886ed0502af6fca197825b1870633a1a61bde1c02e0411fb3e24249ea5ac540c9b120517843ce56756467dd2ba0cf86c747aead472a2149d39fb01451cb7fed3420c87a94248811847479d9a009412ce5bbe940c60390077b0561539dcec23ef0dacec980d906c3efb243ed0dc9f05ba97e751da7f6f61f531d3e4ef5ebf6fca6e71b8661eaaf345d26ae609a6643dbba973c8c1388bc5a02ee2f4d82ab83effd5096f962e0ea2b77d7a07c716aa473c21125d53243488031801d976b95d2df9e1c2669a8422172e5cd0287b75d7aed66f1173f2bae035987dcee75d93249943053b5205e98bbcf4e10bdca97c52c0f5041fc13275155acad098c2ff40851d55cfe2a64aa6b200b5aa9b78d372c24a22809bb9a4db5a7434a0fdd0de3a1536cca236c7eb441b7eeb29fda18bf19c96d954f3c19c6615fe407f7cb56cf85b51f21cd65b6a5a5ea3ffefa0db25815833a401d67dbb9dde7588cc83d54df3ae1b70901fc53a51c20c8e5c237a42aa7bacfd17a24274fb2a567808a1a4d3c4a3dfc2cc9199fdb30c24f100042375c57d6f5ef6f5b44af6703d88c464c8a0d3d33b52f2ca4e07068369d27bc15b016ad3f744202f47b038467755703ba537b9929acbd33865f8c4ce57ad1fc985a82325e14733dd71470923b048ac94cf0aee889a77ce4a564556537adb6cab37cc56d999d2a28ec572018e64ecca0eaa8cdb1ba6f1449ea36f63a95007f2d4e5d0ae659d60eca1c8b3b9ed01bc6917cc4017d24cc2e6a3d1f95546539d42e514677260788c82b4dfae8ac61331fa3ea8c71d32f85724d87655b3910215cd3a47f34b4097b005368ea50cb015d80df1c48463b436487fcae516f73ff80c02630506a18c9775d4b56a49b821863914bfb40a73dc82f167f9c2bf98a991ea82fdb0141dbad44871afd70f05a0e0bf9f26dbcbd6226afc6dc373b230445c2baf58ed9e0841fa927c8479577da4b1e61d95b03af31c5ac401d69c8136b6d36a1803221709b8670e55e1b5d5a8a3763700aae5ea6330eee2b4a191cf146784003d8ad2218a94a5f68e3600ebef23ba4cf8c4c15caee673c30692f7de61ecea98906e9210135d23f595f00f1cd9bbda725671f7042ec395ff78492341a7ad738da11cc6952c788d75fdae24eaf0c27351ba30eb637b5ed2027a22c89b4e2fab79f01404134e7d3f1235dee6d8ccddf1659490031d0cfe94568cce4c3dcdea2ec7fde2cf0cf1e1b534cef0c958b674f128661df2736c497966409a22cbcf734a123b177bf4af3c9c683992410d461ddf14af192e1901c5eddc0614e0a79b4199c32820bf6ceef431270621e249043f37a4f0301a7075da5e027dcd1a63e9eb9a65557cfdd8298f2ffba52e21ae796f8763a9e14c1c311d6683f831148313b7c86343aabbb8f793e550a71593a00e054aeb6cbb376ebbf583db05df7387a16cb06763287da1c1790db07c869cb04ac6ee76991c60fa8f0932723726bbd42b40cecc3474b8052fc4e5a5a5efb171a7fb0ecfbf835d4212befee40cb5620b19fa901c582e0f659afe29baa3bf8646be381841508e80d7ff8d459ae6f9eaaee5e080d21ea2c8458b8b263a06846fb1f5f49765fcac702e9dfaa3216662da0227993d88288187177a0287de4eccf245d7c718b8045bbfb8869d93f1fb9e94d7478b0298e628c07e0edaab01dcf79264dc05f8b2181aa3f831dc949726fbcf80de4c9c9ed83718cb82aa2c3f31a2e4b18b57c3ee9877e170384e217b6908de81445458148f0ad492adc777f10d4d5d9e6e3306b815e1dcb30248d7394254366b2218c1747b22a865b8d91ac19055619ded1e4dc900e71a331883023b435c8ba0f02065391d2ce8b76c45812b9b599532907fe57bfa060e62f3535f0bdc8032c526f1bffcf58839fa10a347896ed85cfee0de8a5b61bd4de51b502a258e6dc04a4f133e1a84a300b04e68da758b404d4566c088e1c87b4d1c08e01012c983b892c0fb6c3c5b2bd18c9e0cb68a813feab89abc8d999ede808a34b98d4e2e5080413510c6bcd97110b158056812e11599dae528f50d75457cb237131e521d62bbd803f9da16902162f134f96ba91b6fef0eee9c4b97bc4eb62688a33fa92728dfc9c62d12f41fab3cbe8d4f4dd790ad5ec70f9d1dd30458b14991e06dcdcc114098e4111dcfc87d026bf97d6b09016c6db5d091d849ce01f2adfb31253a8cba92b7f64c36f43b15689be21a5fd7be1ba03dca21075679c90ec61d3be279e9935ac975451b1bd812b3c0df9ca8ae57397ae164b127a3a82c4a24805741f65329ed2fd98216a13fe3887d5a7ab1f74d54722328c8b59bd98a494bbd29c04a69ecee6dab89d61ec3165b23eb4b286d00eb0a759ede3db97e8180ae3c09c9e08e6ab2f553d2b60f1209b046fa74686a226bc87b3f782c8707a094be759ddb534111ff797ae352dcad5c0c69108cee6922652086731d1e8f2545da0f025c711d1271184c89322911e58bd41cb60b46f471559749e243603c380fe5126abc379883168200e755a5495af7bba46365fe96afbbb117f561ae08b06d2a6b07337b701350e1194da453ed8e4e17c2912371ca2e15f283351e648f3ecc3e6b7058c91e33eea9f804d4b178fffd6ce9d7ca4cf98ce2d00e19d0003a23cb85b62ea2bd0d751e414fb53d4a6620644f7cafd0eccf4ca0de3b2c0d2d942fe984bdaa97a3c8478e4b62c7648b4f7031240d71cddd95ddde717ce44c29278384dff46cae39c93bad2cf3c3d0f09f9fd28f1ed6279bf7b10a3e55cb13af5eef4bebfcfd5cdb9ab2096a55230916d0efd6e5233564b45f76a2995848da1cb4c39d3d39d53a05c75b0198097d836a8de0accaad280b93579f3616f70625fdc39107482d7ccc34b987441aa33bc6781122c2a43f1682c56a8b434bb45b7dcf05e7f8915a6c6a04fbd74f76a4d658ac2526b7063b9970d6f2db488c02e157fcf6391fad431cb9e2f8cb724070d59093145d086535294c249affc47c75103b240ef4baf07a16225b5ac45aeca9c224a979462545be3e7b5acd7925718d609dd0daab791f61d149da7c6267ffb2248b7bbe72ac2c294194c5f4d80a2fbe6af66fc3edc86e9ce676ece81637de2c651b667e42eb9d28fb1f12cb8ce0eb8a97eb6d650c27727dbe501f2860292c6b1c7b16136781fd1f9370bd9c182859646fd35628b724df96d16bcdb7c0ea5f10b310f728310de08fd33022f0fa6eedee5b54b6a94f3eea7ac8108500c8c9da9fb18386274fcdcbfc02e3df64b4130d9b02c61b4164d4479bfae4e1ade866437a90394f9b046033e6db026f61c5c35cccdecdd0ab78936b6cf25f4019903e1e33e7a8bffe0f639cc2a3f24f62bfee402647d29321faeaba8036f64cde60cfcf4e205853bab1268b21f659fc01f2f25c29e65abf4f7c48d95841304466ca89db4bc2dea76baa4773976a9ff1aa1f7e053a22ecd1ae7d4c3c679993e34d4dfac69f5792278b4b34ea65493adcd595ffdfe995ff66a96e435830b8a795ec5b9115cb47295094248d544e3ac0fa1ee6e650bab818daeadffcb14626c1c8de83fb4d5229eabf10c6af45a4b7b8e5d092dfec2ff1bfcacd32a6dc0a5ca9189e5787e1b6787cdf7b921932fb48993cb51a2b16abeb5aa2db16f03d0fd293f1a636d5578aab561e5f1759a0c455c84b16fd7674d0fd8fff8efd5758c91138e080a24233213afd1815e6ff139267ecad80ad406b11b0a63d73464ab3c8a0fe61a83a7ce92ccfd8394a61680fe8077ce08cb9f77df0ad63e9028258d280fa6af1976fe3fe0fa27e1e5717330a37bcdf7085942a31f03c1f8ec741f0498495e51ce8a2f5f64c8b5513e688ce76f3e0aaca25ec571b92e55f9b3c05bf6d35fc234fe684415665c303d65326b8eabf2b5579c7f2ec8f4b419aaadb3df4d227a57c174b844482dde200c2378180ea0be575fbf66879219bd9571a1f6b5efcdc2a75ef72138e202770b2640e2994d93cb772cd3bbd8b6707052b75931e5c61c5e39744e4b27ca2d4e7bf38417f835cf409d26a025271c41f6d7e59b0b75b85677956c42df19e8f68df7dbb7c03dad9b4652b5ed4d7eacd477ac61302c6fafc53444ac9b851724a4590846a0846e9c3e051c4184dbe44e701a5a95e03dda92afbecd9e21e4276681dd349c080c95ec01a486322b7662ea5f0768e772e6bf495d3cb8a99ba55496d33e0645b700b9842c4c15f0abc6fe68e7675ec1b0ce25bb17d78e34d36fa39ce3a703a97507e34c072453e3cc74c2b05162c58a609e14d225b7d5a98feb1e60f93eb5300ac91a2cd955c7735528b6aae51f24aa4bfd9575ce03186f98c1cccb5d2ba3433def660cec06f9091089e13feac703893994ae8c5be4dceeb698b5c356975548d721cfd48660720bc3404b55aa81ea8ff20b69001481ab8eb018e2312daa54a9a1065e6cf08bb9e337f5fcd56b7662243d09ceb741030cb750ea5afe2b8b27cc60471abc72ae56f7344ffda876cdf2b0e336e49a2a9188d15cb625109563561bdf8b0cad53f1d2b182f655b413af239bad3bb3911754a6449d234c51b6596afce57b3a25dd7db478e8930ce389447c4d60c043854f73ee78dbdad6a8d596ead939bfae0d567a84b32fce2b1c22b3852ec76c9d5c1b17e8d6de83cbfc39415e19a4fe704e0710cbcc1f4eb8462425c6a7a9e8c800c3681dc46dc534372b834e24eee086ce38650f2a80bcbe4bd8c1c81ecddbcc578f8d14ab52481840f3844362df0ffa7731a4db351abf421286b012fcfceeb24bc6af55f453b57fffd96bc53b3e30d43039f3b455b5004e8376192caafec981c3b2f5690539b4715c25615a17d5ee1ae0997a24f21826e986ef259f8e9b1341a69988d748cbecf73f1e8d8c5e6aeed6719a63b2740cda1c033bfcf2129b75fadec48f2723d30618900d18e278c6db0fca82d3e74359c4eee2a0c5ad9dc596b5527b33e20017a9dd373a29e4cdb15bced399f449c7c78b670b67a95996e21f7aea069c8f46617e4c1cede91bc5f3161a7429ee62691dd88f67d7cf7d67bab74f8eacf1b65d772d70286e7f0ec953b6fb9578e9ba8f25526fdc3a5fa17715073e26b65bdfad215d4e410414463f9ae0791ecf0cd7a3a5a20e53d6834d2ebbb64e9a6c01939e29b6f050f9d04991903e9df7767f430b666f74b5f5610af4746d87d2160c599856e25d3e93daa125fd786e09b56b86313062aae8dd215f3107d4f2b7fca3ba036f869df11b5bd565a936f43ad4f8267bcb23b7d6d6ecd54d3d92962f66ef3d473d4db953d87a6eb85c1f38731a4dad53fe59a3652aeaf3b0de507c239b176acc88dcb84b1460f385dddb419dd193a32092ac777f1f4241c3b2b5aa7ce444c9fa17dea2c01534ec36f513189e3ff18e4950c63a0bff1d47ec806a2a20899ee33ab4f97f9c251fe2326c6fc360ac90f838fd4cf4f110a28e94121604f9d24c3ff225d558c68a495ce10a964cc96297685464e9ad199bfa9d242e623eee0677658c331b34268cd9e2ab9631bac3a82f67054c436e6be74cfc029df6e2e66f46de6ea6731ca475f8fcf8dae71635c5807cb37c023ecf3ec134982679f7cb53e23102468417288bcd33309c61670602b12fc6bdcf262de681cc4d93948684fb72e6aedbf72d9a18810ebba546b520a7eb08a6d7522d6d28b34c88abee96f9af1f86dc2c7366e2623b1601bd3f096afc5590bc92325b774c7f3cb335302f12b71198f302a1cbe8b224d16babf46acc48184e6eb617b8339a0e2535fa0159b75a6fa45b252963954f64c95f390ce02ed55bca250aab4d895a888f76c20a1dd0e161327b5db237cf832286462d307378e9478d4a57932162d31500de54f282459411cbbd72e44d7f94868e8950072c92cd041e43657a3ca44edb02d57a6291febba4f6882b69af8ecbb96b8e6a3a1265c9b9057afc06a73913051cc3fa0251e39e453c4551e665e270e3a5bf43702dd7248ecb55e4df69076ab9d7109d79cadd851a245aac067565cb2bc283a25286d128acf73ee4ae8af89b1fb9242b7004d2b74b3630046ee9fd23ba4c415187243c1b3b119cc61b13f3ed614c676c8e08ac7d01fa2f21c9c894c2b8cb6316b810fe4662a2d750cd0bdfaaa41842287cdd511f64f9bfcbbd1b11ee4cc550ba8d5001f14a31574b6d7aa61813a41b26e18babe59bba49c9f2e95cf09ec47005adee2b641b46837ea2692f7fd3785b2f661ba016cfc533e4123a5d10d74f2bbec1f166e6fc69c5b315de62290f1c6b0bb3941afc27a3e7e4c217fc951fefe9af706299c0152384b06ee4275ded19b1826ffe00ddccdbcb91ac8621c99d2a129e6348ac3b8ffb293e5480666295f5975b42613a02e5f549b27892b4f27a8b0e5442ab869d927a1a256fbc0781303b8460d6c6afb39b7ac811ce409d59dd974599b494112e4526c02d689ff202e670e057d034493816f1b074549ac446efd8203461093438d18a831ee731102dde1e1209dbb4efd87de268a4b5a71100d8d505eff215d7015e2bccbf937b474941cc843e9d4d89dcf8d55a69976f6dd1bf165d900fbde2d2139301d9158480a036039dbebe07008cb153ed8aa3fbbeffcc2491e05f0b3ef318498c341455a478e64ac550e7ea3a30cde389d18052eed3298607a78b06d1ac96d5d39839f4991a792964bec0ff2010770e9604d67ce395fbc429ad3ab68445b5c040cd2c6b49ce1628e2cef04d9a74d55b7cec4f82878d6d675eb9152440059c90399a94c29adce5d0a84920dc91a30f52a451916bc003a4f60d95c457eb3674d028c91aff768b0fa81cf6f7b5ebe64e7b74fb443f783ecbf9a007ee576e1e64057420652cc424bc39a79f1edf9285ba5f55b11107968708f87ed83b2db20595b985681e506cef1309b20a3c626cc87a85b03da0ca0226837c0fd055e09e352e73c368ec7455343da2a300fa4763f6b775eb659890a463660cbbb6e17819f558bc96ea789f693b628ce34900955e5998b870f2a1616485d631ea548afe0d8c3b1b66b469d98f4ba84ddbadf554443746d5a5ab65462ad6fd720470f5796143fe189b90682aafae3a6ff2f4818dffd9e854f45a8946de9c035771d3cdf1fd62ca3b9d441d9bb2aa3e7a8fe54d477687a7bec4c5b86a682010689945b86fc931c60dd4982f337e88ddf41c4a018a9189ab9a7cb598b9b0aa4a2ee58d5ef9adf71b15a95647fbfc903e6700e9455e38261b7086f2d13b9e82dc30bb75699a91fef0db82440cf914098a5aa38abfcc53a71fc949440cf81befecf684c37e575d8c6ee8c82c2737af3de8566df71adbca54e12b2d73f1f90d3aa309a940473af9eabcc3e4d43fbdb37281e2c6f7fc94857586219a4627455eac28f090b46c4a4d6004f43c04fd910af17c8616510efd6d523930f88757e4f48ba433a3e7958f41356b043a8609bd9a0202cac5cef721683320e2affc28dfb91f3e5b49a06912beb31b7a45210a494dec3b373b365f055f5f63be276e433d93b21fefe9a9 +MD = 55c6caf52589ba999cfc460e1a2630c9c3a8dcdd88f37114849f0d156f3c1710 + +Len = 43832 +Msg = 50ef8ac4a34daceac9547056a4adea981013fbdd18b525706adb9d8108cda22641f10e9fe0332bdea3a9c747ee778bb4c1f188bce800133571c7d3f7638618e3adbe6e245d9673b5127de523b411ff95623f0609acac1fe00354639d6d7235ea7e9fd3dc833d2c770016f2755d41ef43dc469c4dce81f07b07cc76fb8f58a2429adc654dbaf2ff2d54bd15c251d003c7154b730eb5472f0d6475339a2f0107f3ebbd4b016b7b93def6ba7694f786e228f799b2d7c9c6839f0498c301b7360a065789ae80fca19292cd553e72b92a356e6977822d72c69538ce7c4db88dbd5682c88ab550d72ca151c3d695e5fe86a3a1522c0b9a180e0ce0aa6bfa481b5e916f250689fb62e46a24bf84a2742f60d5ca9c0174a52367919f80abf238c7e364d55646510907919512aaa98ea7b28172f12e3ee6d7fb99cc7e38855c10fb1276bd429236002dfaca246a8b8006f0b1231cf02b88b6086c6484bb4160591eb5702ed332606a3be8b061e872a11a51b79055ca0f83ccb3a802baef27289a9892f931f06df6ce9b23efd10ca8196a3e5d60a3a434fea162144d26bd7fd95bd072bacd818c21b5b473307cbf740f7e1d693c0f66e022bb7e79eed20d909e25301c5a0a6fd708a6eea01b6be71dabdf57a4cb9ff85c17a4709f8cc6c8a39d7e1f5a82f0a096d429b17157a56dec171455d6b65d42f004e49f4ed009d400fef105f2da88fd11acc665af8d323a2978a57ec7a4512de31101724e61a21befea034bad09d96e90b9067222641b351cf91b393e3e829f7f68855366e99c84b8893e5753b8ebdc5a227041928567450cbffdf0052cf8810a2ef8a9600dfcf6a2022992ac8ec72db8108d38c7971e5443f5d30ae215bbbccd8ee0db0277cc5bf67e4c647f34744bf2abe3c08843494907c126ef9ea1d43610aec75315cf149afd2430369651fa1c501afc429f31ee0ba14b7c0601794ad91bb6347860bcda9bfc1d5c6eb78e628a19866024d208188459bc60b9d245258c35cfb0b2ade728463e905876ab93b37c971695d0ea70cc9b763c576fdbac6d36a721c269c2f805830aa6adb43a07f5d910f325acaf13143842f2eb91e2572bc1bad3f20568967a3aa786e2922b93318bcd449822e896f7430307a385b0ee6714b30dc8ee67698d535e5a7f7648de6e79163274985fa47ea502a307b40d182717ddf9cd8d871a48b677470dca5791b48b33e54378dae3af4487eca086c07d75b27fbc88489051b34b3a7713f521530ba96b848c2922fb9409d90df56493c658cde081818849b5d5fbee12195f6ecd7cbb0738d813ff9535dc422c8fb44c9bd950496e41b67befb6acdd3fa77006a60ea94f28ae9e385998a60872f4dfb4a3fe2302ab4f38eea75e474d274690b087ca5b8b7d963297eec74d7406ae4e9387d12f536133786a84d6b587f27d273618b6ba035e1837e2fdcabbce104568b1ef5a5a84b876dcb72e25dcd3c7d59d5e00ddacfff4bd15e22da7d65eba3f94d581a08ddcd79fce9c4e53a678ced55af1e8441ac6660c345f2768886b2a263cc9e8abb1a4e736b5e38c69fac03105c6b677f5eda1dd8efd219215b83f8881c753ca83ac250fc4f9528f6ebff115ed4a7756f70bd881c9d6ef17b44e20fdd99d3cd03168a478d001b2006adf54a4164cfa2c525eb3794728925e4f3157b1b5264ba1bccb6c49e237ca8665413106073608a20ecd79ee905cd30eed4b2ccb9dc94ae62cbfc4ab820264ca68cdd063486e6960343f74072ad878cf9783e67319f1ff46892bf3c639ca46737a6b78e2625ee50dcc9eeaed9f06494b54c1cfd3b203346adcf642c18ef8392aa40373abdc6c4451dcd124c7774d10272ced2d10ef68aff92d0af9c50af20597ed7d07e73e024dd66ec06abe3814930e27f049555988399c824e60f9332172615dc17dbe1187c941895304fa6cc59ba64eb06bc876cb99fbe5aabe8694ed4831fcb81d57db63813d367239a29ac7f097a816db91d19a99bd5d065d93b2bf4eaed3482edb27fd3a707c0552df4b825a8a3d0ae0d9ef5bff8af24a834917fd4d81e95afa717abfbf8263f497d8065ea1271675c3c85a78940cad5f79d04a110e5146d7c7425e10d71cf32750b653c38c153a3dcd85995720e8952b874fd36156c7f3a5de765a5849e63586c5a0ba19e5fdb14c433934626bc9b397f4ee3b57f08bf7ae8734f700de8730fa3ebfc4c872868488700bb3ff3c550d8b0ad70859a3445ad809a4bb6e5ea8ec69023af838fc59badb9b249f985c34aef00f2fc5d1369a250daeef300b91f072bd5a3adfd14a1d5b2c0bab8094940f9bac4c21f72672375f34bc3dde3f3e08c9dc8ee7fffc267b706209c9dc5baa8edda909d228c01fc010357cb54c732f97f9b0e668e31f561b0067dda63d5566587dcd8e6ddf0705e040f83680020d2a460b1fa9e610a4a3a41322cf692aea921683022218a563eb3df86432c58877f8bd0613218810f1d5bfb17b273b2c82f46ff52f0efb013c9a7f3f63b7ad671761a3f27394776970b413e35a2c43ca85560cdd3c9b407bfadb4f1edd0e6026572ca0d8274bdaa6870749b0a727aa8c5b7e9442100e0c9b0574559cb880054d9e235ebf168eda4ca09808214a6097fa6c34b02d95b28aeac52d38c1dd53c564530c82af2aa59fe5222df93d2c1f339d204208a5b2cedfefa3d0a09534cfc7f4e0b0b7b04ad750f9758fc30c33aca5fce06f43b24fa9363205233721a53e3484acd7a3cb5e6d160e01860f96484e169f12820a5c558cb53c54f0a26c19e6339d1f48ee074faf18ae2dda85e4544fae0f204404acaabf8494f9fd8c7e7611edc6a1cd416d03e57f606352ccfd3df594d3707ddaa9378accc25a129b60a60589879a2c4403635772ad0bb78de9ed89f1736cf4335ce435b54fe1f977198f0a3068722e9ed3574d1a1b8bd16fb14a52ec787a73b8cb9a0766c2f579c9b11b6a0af2919bf7e5c80e9e344c681b5c3e9aae6904c011003f4908a3fd593931316b3eac603bf93f9ce32780b64438f2b0a75fce71a4e503bc44c27b63626ea0b857f51f45d64aebbd14dd86322c6f7c87c3253029e7dcdafa3dbdd18e5c11069a7456d1a93392f111e9e7ce26ea6800ad342b1594519f8fe07f202de60fc96cbe0b8a4cf51b7a5782a96ee0fb44ca89094297081aaad62a55511417d3423fd90c63b8188f56a927f79e99451a033e1c8337928e23b929b143fac118bdbf1b556cc609bbe1acc969570e9184e9ef6bc30359433117473e2e91c34eb70c4c04e8c67aa5bf51e57f238c427d25d2cffa8571f2d3785e1cc0a827f4e47d28b2a29b02c8b3ac49c8755f7d8286b03c6c926bb54869eb60005528edd5aaf17ab89e7508f85b08301e53241216d4ae8f8fdc7bb8a32e1385bba5b5cbadc99b6828a07ec052c75d6eafc07b33458ea732fe7fbf604d4a7736145957a9c668035bc94fbf131e1c326b43656ac858dd218f82243f968de4a0d9d519166f66b0b2bc62543fe7a385108ea2eafcb997e8a60de2730243aa2414d8c48cfb05d6c92ff1bc5607262a287e4193f636ee4ad8bd14e813104ded335d99aa5b0d535eda02649ffe1db6fb2d04ece0312250b9d4ef0c5aad719e9e3903864e2e5541450bb47bd2f48b815ebd2af54f45c7c52c05c25d01e82e1c055d8c057aabd9b8d586cca01fdf596d9b0079c5a9d72d36ea92c070a56d4db169c88280f47da39e5470d23a4c688d64f91d78c4b5925d8c3ca471ab0ee3d94414a26c5e854abbdd0bf44eb12236314dc13cb05a3d1b5ead6a635c7703f3d7bc4c12d307f5bb275b4237c96c69f24c0f3c87a7f0071d3883bcf6093d4d4551035a403ee30c77f1024164cbd5e943e794af24e7ecdd3ef4f579860063b4804e008655355a922721b84fa1da5369d209c3653bf8b8852699eaeb3aca53004dd79b177940d44e72bd67b516804eb346ba84a5f560bac77e2f4c583bee73f953f3bc57d3e8b90901cff6bced442e8d4802bfb679a95c6deebf0209b0f42d673baa4b8c8cb4718b7b5e4da94bae5cc080ea5ce1f05a053d1d4ff446c265e811ac0430ffcb2d649c897354c75a473e149579446e82fc1c01b4ea0a5799c70bc04f0a53f8b9d9fa04d315f35d42963d5030b85da556160b7f5a952c835ca5003cccc39dbe7e429c8a004c12b22b24c23ef8ad90cd95303980b85a421334842e4dca38f49b41f0b0f8b820990f3c7733a49662c63066d30ecb7640344f48eefdbbf16f42d52a6aa014a59a70bc9d19f94bb1dfe514f285f22a3b4fea7fc16ad54dea726db56338d2a76dc17f0177927dfbf22ad6c261d14d63af904cebc6811ecc5d495e8311e2b078b89eaf26f268267b004d8282da3c873f7b0a43db80b94001f1fafe875ff0a0512f37e67235255b958550d09c8550088647c6b596169da3b14f8f340973eb0cf879960d2e6950860f2639a7578b943900baca8c65b1b2b0a71f0fe750755b5b363fc30da3b5720eb28d12f1fc149080747d20ae907982cdaa088301a58ec6f5d329c4cc1642125b4662e395d347cd46ac38d0055f95946381b2f26950e5b64297dea334d237b8d5934cb27b244dd2f46e92e077192e70dbf5c6640799a4b2aa4a07682c1ebdede460f4898b374e27f083335aee086b9f9bceece2c3c7f04395b34b199b41fc37f077026fad537155a4b3c445517275a80dd4cb728524f4ef6b9b53c06b841b21619e1d6dc9c2dee376c5edaa88a0731398ce0c1f35f6d54194cac764832f43309f9eed89c7cabe59d08355907ada8e69a38656eebb86bebe78084e0ecb8a9bee123f1bcd8fb4394019b3a5ff1168ee3098c252e9ff1cd5f07f1d90c52bdc4ce222484f4109c8761fb91e84003491baf3de4ba817ea00425e12d036918b6f7d94388330ec1e4d9e7e188c9b99cb9e1b37dde9ff8062792e9097eae87ad389578dbab667d6b48dd8e59ec592d4bfd73886fd63ff2d50d0c10f78344d89eb73025412aa9c07b4ce4dddb39010b9f6843a67a68351259d4e22621b730ec5bb75a571a6277688075924edbfb6bd4f59ed4863400f9d702f387a11ea72d2372cd6686de0f59d609376869e2a00429ed05a8b0133d08a17f0d9f0a54bf842e524e074cf27dbba97426c9b775c3347ae44122ac9e78ec121c778ada5a8cc06d98cd9f11fe2a27536fb858a00bd1a73889b5e4e43c511ea969b5cd89968b7c51b4d0a07e67b127543a5077cc1b67c6f33bf861ff83320ac7f56ce9a09f38127b14dbbdcaa59f363c92a3b9843ad20e2b796d2c46f9a85afe3df161b7eb1f2d6a576349bf6e40de6cd7169070d0bcf751d0a89663063069cca1e7c82800ad177ffafbc6a4f8428a75962d9f0a73951d06c02f52cc4f46c1b3cfb48f89566e8b5c5df9c713fa10b4d74e5d27c9a9d6e9aac655c3fb2b77ed3425ec1a4472dfd3501f01dda4da37f8127e29ed36da1ee7ce51d07c68212066de32f30af1dc7d9a2bac985ca02f24ceb7941831ca8ac981d20113eeabd6fca902856dd409f9c44a2f9521c6be4f63a3272eaca80d4253526652949d3ea3594e517bb1080561406ddc5732ce57d1810ff1ac6ba2678768d3eba4d6fa891cc2a14bb471196c998e6fd2614fb6055be98f97abb9d361c06680e2965f9923a9c54c419e027ab818eada7241dd203f25298c999b2b9da483d8e3db9592fb86e0ddc9d3b6f9ce704602385c876f9f6de3ad9167f9458388583c77472115943b487894928ddb671dc74103f1908b862a1e023893547c0785a40da5b5d76bf5a9572226de810be7290343c7d1fb9576fc1aa3ecac2b539c350dc9099816ea926983670b484f2fb11a9076fe6e3721d44c802f1802ec40d41eebfb1d7e7e25ece453b3bc3036ab777ae5470226c1c540a3e4f0553825e8219bc5205bc95bb277b24e94a456d5f38cb278508dac39d42e8a9f843edc56ae27442fb53f195df4c55bea967e0cabbc8369d01ffb6eedf2f07936770f3ffd073790923651def3815839ae1583c2365ade097301d5df7c8658e8303571038787e51983301e9a9adc92e40fbe6027f452ff09d7a2978e5422ba60234bfea794a4a237791f0fdcd25b27d395dd9dae743988f3747edaec134c87797626f29c92e21182fa7f900628a16990c71f96b62472ee4eeff2fa892858528caf53076310c495847dce69b71c33ea9419d0e5ef8393b18490ab80d601faae22355ca79b8cc0b0a47977e7501b872d6614bdf5ab1010552d1d0508634e97fcc2beb05d96656af56b74288371a51fa48f3e235089687d5bb0cbabebb15cb4b0f691da93e43927d652044cd88c4761d267fcad810aeb4f27b842ecc530bad58d265547d525868bd5f0a051511080f24988d6a9019026ea6b9c19540f71e77ec3ea8f94abaacc1b66cfbed2779ed0457c8a62c25cb989e379d4958e34e5711507bb972d8214783b1b27d64cd697c3dfedb51775ed07a2dee50a6dd7d01bd64ccb02029ef2d3298f65c17d2cd89bca261fc17b404cdb00113fa608ed6b75856a7056684578674e6cd90529ff080b51cc8517f49df6d4004eec2fdd2b51931d02ba312edd7d515577e76b433fef76f917a02119fb755341cc6d10710e4ce4fbb9eb2accb39c21ed25038c7f6bf95f3ebc038551e54309333e54f06b2297fbbfd4959bd8643f4963e8dfb1351fb034810e21bd42e7ea466309163801f4dd47b8074c1cc86be1485857bea1faa79e876ea28d21538fc59b4fb1335ffbf1874992a6712613271c9f48e622a736a02ed865fd986a0a297f9857cb3ee0afa51081ce5697304f426bce9418ce697fa5eba7f593f5efed61729e29bb8b62a38c2370d98c30c3e33a3956f86404414c055f669bfa083b63a4493d1406cb4e5e131aa732bbe069658b1fb8b45c56c7026ae494c79451c5038e5df5d531511c65d67095685a08995c91896476664873693335d316e76525537c4b58bbcfcf452142cfbbf90b1bcc1efa00faad165bdeb6faad71f887b4d4c9fa7bb65636986136f4728b4333bc8a532110ebc6f10351921dc621fae9b34bdd7579cf230a3ef90d48239405684d5c6fb323a8626ac18471391a438c81f2f30499cfe3a0cf45651aca3d668e1d50aaeb0cc3c0fdf838dfeac914572bf4f682e5c3d8a46dda2e3df6073a636bd768fe4bba7bb6083dbbdc554a3eed57973043e7804e71d8df6c0c156ba52b1d0af8df0828b607ff8fdd0247391476adfd32ee905b7bdc70238127ff84081e103c82c5b6f40d3762831eda37121f738d9b70cb66b1fb64d26b004a2adccdccf3f0893abe88dbb4df9bf3ccbb71ca7475066c62d130478b6dfa6bbb1dc280b826ab9eb6b573cc10a55eee623ab49fea02a2985d6632eab0a17616234ef1ab5026d215b2023138cb723071334b672a54a5148713ac464f852b52a1fb34d6b825831880c54b4dbc55b4b52ea84415d434dab0bb1e09f700795a1491ab75ee31c8b9d38258e725b13ffb417949db2d381b222b96e505a187fdbc3067dc78a4928a39878cf57c55d1faa489e3907729c07809d9ccf135f25082c03a86d6c396751a90c8f323615a79064ee2eff48ea807cbf03fafdb0145e4c914979142dd3033ca4e0c675b3ca030f358e1111ea814788783e1c1fafe38df0117dbf9a92c0e6949cfc65c1564c374426118d95759eb8d4b2354a5e9933789fb587c3272368d8ff9a48b43da8030bd63e5debb46fab9d0875d0cce2f56be8ff +MD = 1468d2db8c7750f324c76fccd25957ad3052887cdd24077e49470e79f646235b + +Len = 44928 +Msg = 7f98b49be5f624e958c09f338f20b399b6de19c366854425d4c13a81490ca3add2891f963830dd85322c6aa1da81c6b65ef2bd34f822747b20f943550049c2c428b227ff83c3cfb789611a9eb76d7c2a3ca1d196f6bbf12b9cde85bd3d351978e9d972ddaef52107c62858330e2afd7fbab3fdf24798e3bdb237a9c0e816cd507dc7a838a00ffcfd4f47cc67c701703c3fefe84fd50171b9c9ce5667e93509d54c447218435887228d861d42ca3afdea321e3bb5873ec3a8486935b928daf38dbf1878867e1aebfde8aff3ccff1dce10fd089d2d4596021299d1edbe8d4db3023c0a6189399b4f17c988f80e4ff208360775b7bdf753567d23ce277e01d572bc2ce3d52a5c25dcf696dbd20fa000d6e5b82d317085bbe6734e288b026abb5842f86b7e70d0feb924b96e29d7dc905ea378f7b24bd817db7b82a6c051b2488c1b066a01637b6e10299809a66fe9eac8fbaf9de258d6ae5c1e27116f73bfc137d2c0a8090b46bf068b9d76f0deb1563d72c5e56a9e68ca92e2a5313f717b7180ec8dec3c711937c5d42e7cb02c1a1ce5922298f22577b1a55265ced952cc9f90f3d400429cdd20758bb5e28e620e83e7e22f7e21f6e9acbcf3cdb0e41e9c928e6fffaac49478c03d399971318774d46bea525ea018a803ff4f469e09ddd293a3e675b36a62d460466542f142a333589b33f40116939afe97ed3962f09856eaf7e29ee3db0dd847b897182a68bf35549d447e302c70a9e5ac550cc2405710dfb1eae201c09d6bbfba5883e34ce1611399a556b18ab6bcff65102987a220e8bafa87a9d7c01b770e742eebe696149fdcb8dfe64cd76dba95eba5f679bdfdc6c2f93f5b2b848ee37d0fa4b8f9ed5dd7f6217995cbbc9d8def669cdd5f3af59240d79d60c6b3fe9754b33f52e5f9c6f1aafefbcaf4e04f1c55fd7e4402c010347cbb262070f6737adb878921716356d64074eeef91ec8b4f0fd8d1952bf85794bece6404f0f5f6765ab4098e67d3156c00add96b6887570e64202037a089d19a4e37de7210578e72186147ff8df00c9c31d144a6425abd419efdf0922a1d872f731f1cd396c544575eb7ccddad63424f1d07b708e60cc4d00396cb0e90597f3977aea7904be61f0b74de1f918dd3bf6b0a78bbf91e4674a3dc1438139ce7c3a1a00b060ff7632777a2fdc881f6e98cd9414cd7e1b0b0d6a3709ec009146f5b50375fc1ba62e36483303d5017af4db0820aaa942865f1f1b6095de958c1984d2d83d161f8530fdf1865c53eba82a6334dacba793605b2cec5ed793e686b0ba31fce8a6d30948f9f1c8abe1ad1359d1e2171a60e73589a73b9651944a2d97065105eb26dcceb0aac79e74f6dc691d978e89f93db482552ea78b965856cd56e99e77d70e93321280f15c4a1bd005e0349897fab691b36813bec3186882f25ad498c71ec6acdfe92cfda69db95e764c29aec59163f5551d06cfb15a4d55492d67ce6824f770249f0f4ae1d267ae36abf72f975fce55f3fe7878face6f541e4913bdffac1993acce9877b2aaaf65c3aa1d9981a84e49fc86d938f3f756f60e3858d5e1f6957dd4d268e28d68e90ba9a11d7b192d6c37fb30b99e31679cb18575b7a4c3b703953954f149d6afbd16553b7752c231b0a66ca68a073791992d007ba0a8f94fdc7046c0b1ec22d183fc62d3abaf1167b42bcd32db027b07d4bf2bc4b461072398a599902b67f690e6443ef43afe8b31df2e89701d1e702ce7ee53eb635b71f4c09b8e6dde3bc6404c84563795afa412aa254de8d0c9bb934b31155a2df6de25dcc8a1944ae616823f1354f85c50d0ac9da677078682b1bd673dec9b74d1802945c38fbde1d56bb9269797c0ef80a54232389146bee7f71dd45b4619e86a1c81a402854543b83a57ab87bb2bdf9da68600422940ea57f0270b2fbe6ff92f17c1700c4ec4d0dd0700364a1b83ad2638ea7069ab608951418b8411b21817aef66b225738a729d266254f755582c8b8f0d20af5a4302c624f9dd7a7cd7cd4582cd14369cf86bf26bc596f9fe583b2a452ff48ac802a34198ee06e586d38bfb94fb65bba9fcdf1489dff0f0038110b96d3a4b1c4dbd940d593f5b0ba2dc62a50c36cc3d015f770c66f98b66ce9b533fee774cef523a7c324e34057336b9fa4ad1c771430ce8dae1ec5a8fe2c66eacc5b22e208a3d4204b95e152ca5ac33fcf2cdf67d553261b09b014c23ed53c1c152a0a7ee75779dd4a97329f72a6a1210a5e70a18fbdb90a3438f156f0edd5e3deea029df396913930a74b98f89da1edd6c074d69be6f3f59df7dfe9ccdcc0bc6a19afd1b5d7a6ce9e4480d1c4a621e0c4e1505992556347a7ab34fd2b289910474766cc969116f8040d96dc5f66cdc4454fa7bcfb9f838af19195038467ab8a16e1cbc12e598e6fd250e21b2145f1e2e859cf73400be12a0c69749f7100847429875351d5a76970b9ccf700c2ca3ad72e9e4c0f0840e8cf488158136989b0891f867211350134a50ac04a4fbc6a051b788ba202acd516c53687b411e679cc13699dbc61b4dd7c9745d9503a66bbed1a56b075d0b61f07b676cb1d1d704713bd980ba6e5edb2adb20b76bd636a265f7e599b1c0baca5181d59e9f7988f7843e21b7ea5f03817447fcc36c64d2f4fd891f1aa2915f90de4648062e815ac93c92b64555e133c81dd6af8881f7a3e8ee50faf7c0182439fe9166ab4430740100fe4132e13e16368d50e20e93d5d106a0141f37f59d2f4f182bd795cacffe273a4b6a8678bcd3552c7d3c5e884783d67b9d36e22867a85a96dd44cca9a622c45141d84a01a593ad6324667f4a95e1e1e8b2e60141bfb8e0df6d5559c7fd065fada83486643f7dc4980f0779bf0714ae4d1dd79a27ed876b5ba3b1430e1cd280b648254089d3ba243404c855d1e544c513a4b2b8c4393c8272490192654aafafd4e9548258a87155a0cc511a677698afa3101f60ffeaffae8c25ec4eb3d1c5756f526853b908cbdd432f49d0680339f36328c59cc04afa7511011b80e2f73b59ef4c0abc9439f04684f45880bed44f19bdb64d73ef9f526269a33530d90539e4bc9fe2c3d1840718cde52731503101aa18805eee753232fafcd3e3648042e99c3e139773583138d985c85eeb0662772ddc50a113384bc0c7335bcd26bff8710bdd6fd2d11188ad131366a5b6c8aeda2a70ecbeec2132245074029a7d7e6df9b9027d3ae7e4d18b4de187a29b7e5f52293e1c5c81182e871d288ff372a5ebaa2d130378bcba53fd1056f200a110bb06b3adaa23d8068811b7b8cb7f0b1cb8abef7aca3358795729e3da7165d1660b1f4f255cbdfbd189e9a58a7ee752cb1c25879d9a14c40b25374ed5ca7a316996c4860efccff26376386f086fd24f9b61407ee63bc307560550d9afc6e6ccffa61edfd15004c3a29a259e9968e90972cd235abc74e729443f9c0dd12d51a7118155e2d4210178783cd9b9a42fd4883aaaf7a6860e2833bc1a4271a1c765cc8870901780367119cca37b48938e3ad4d93ee3e7aed2302ca5df6a8e885cc7424abbf7073d59faac851834d3cd4ac3f639d210a79b85a41ce9d73eeaefb3221141aab3397450443b8de32ce3ba2e18f540ada66db5f22f0b6f47e30f3c951c425385ec358be4f8cdcb4c8affc201e1d9d819ccc264e077021f7a8485d9ca5ddb6a93c984ecddbe6b279b77b04d8ac5aae85caa2d10162408e1b747d22c1a8ee76d1d73adfd033d1c89171a7dc3926d7157bf6936215ddf269d4554809f4d576b446b1238281e1ee8d9099cee8ce181360f8a3165ff7d50633b6dd417982a5f71d7c5cdaed4f508d7ffb9248b103fa8fff7052943123e1ec7a377ef1d817a4f000e73cc966851a4f2e46fdbddb8748ad6f7787a57c368f15abeabcc1cc105ce21d1bc38784efa9a406e73e86bea47d0c2f72a4b2978c273257250949bc09385db08ea39dcedb891c9860c74bd0f8222ccdf64c5429a154a2fa8b06e23e6ec1c369b43f64bad5332961584a75c90eb27fa976e102992291e804911833b9bd73a3a7210984df69224ae0121a8cfd34b885608905366c7c698213bbcfb6b471e87f075984668303e0f1a342ca09e4269ede81812b782a0b45f1968f9fd3b5287ad5f8d252926c31f9de094ecb652440ffcb7b03b630487ba1c70b610b13424db518fa0fd690e18fd740a0bab1372400360cbb9547f74e3a2772f0f4840dd25e11e8997692da895a03c9f80afde86a00ebf2c19a5355b1b32175d5aead2bebe63b9545bb19d7da3d09ea8da424017cbf8c2e3ba76ab409933a5027f3e8e605527cdf8d31de214ab54412c03aa61ac298910f6820f09abc46cc827658c9d4a54f7007ee6f524f513f5cf33e22f68cd228952705bb7782404a729d2f61c27042199faed7e808aa9447bedc65f1b7e021ebf2f562cb82034c1aa700e1935531726d5644d82073db7a7ae45eb62b4cad485f450b2dd582862633e44e0b621490ac975e6a7d9d265a7a3557facd34475cabff05c8b55e0b837522b4d52b6263265743f27026d2928029f3a43119a11a66d347bfcea7e98fa3af739346bff8d36b18efdd0662554b14f05233721a06486434d5dd8d63fc714f3b830a1337a9e7c757f7588dbe99a26163cd906e4cb843dd6705d975780b62eeafed73bb30fa02d39ae70f86aa145b0e0ac24566204bbf2ae0645e17529ae71a832f7abf2a7dd708685b5c81a359b7633bdcbd0a4344fcd5178db603923f504b4ba5898f8289b6ee26b0e9ff48ee5a19ad7981bb14189f7492ce8b9aa54d3109600c2abce7c234ed8c84125fe926a589a6251df9115b1981e8c3397d1a592bdd76afd8c7b89bd39ed051703422a74c4bdc6bfc64d960fd756ff86a0b4fe7932fe62d0e20739b057ab8858e1c83f490c8a6baa76ecaeeadd7beca77c5d48cf98934f05567b7246cf99bacc6696b7325a89bada9776448cd214bd5fd4d469dd161e99628fde1ec5ca3f033a3bb67c77d3431916d2f43f3bddaad976501f4bebd528a7b0363824766f26cc6c08307460a13ff127cf6d894026c4a8b49748d440fd38e3b6f2926ca1e7d57b28740a8935ec05abd635e909e3d6ea92e15257ee26b5d7b43e6cf3de8e59d47a37274ea23ddb1eade9ac70a76b15a5ffc4285280e3258c820e4b636284eeac2f61ca04a6c197116128de0b4b220a7b5726c24372c076dfb6f038eae0cdcee4046d05327f0948662e5d70c1dd4edef602cfc731ac05d058b6a9db9140af20045f257fe2145d14a67b4e0d9b4538b89e6887e02515fa5a80eb04db5f6a730d95aa4fe11b4d052658b2c45b9f6b28c1faf216b52697e73ddebdc8e15d4660bc1e4cb4d2e61248a4043a8702d7386521920643ed3c1913a0fb95bc9491bdc05527ad1cfb4a4b70b7337b5fab4b9239ffee0ed7316f84c7ac5dd9aa9d05b5d90238354f034fe0c3866bdd14fe0263ea8397709b28c8be4b898ef358a3c117f5e9da4c1494fdb98a3a37c86da20491c1d71496547b4eb0e75e16498e4fcbcc5a32945a34535dbf0cfa1ca4344059050620ede6cdd10a42e3537b4516492dbb5006efc778ea76d893efa4d92f7f0aa80189abcacdd3025d8692474db738efcb218d72fba50150ed654056cf27081d61fa37d5a91b2940e7194001cb38c417e613eea55f863ff4e7cb16baeee3829d173855f3ea807acccae48832266296aff370521059e24d69ac0d99599f2d968fb404098df7c46eacec2f9061c6fd56bed97ee03c5280d2b72673f0ba48cbecfd1fa67b2c37afaeea3742801613d1ac4d8286c1b0b32977e73b45446653862bee4066d5571208e28e916481da75a53e63d5cf1cf4e2a5e400d5cabce32626fb6bff8b3c97f099b29ee4dfbb335442b708baa31a9149bcc00adb4b81bb2b73067b445fda733928c42417f955ac1871bd441948e30e4e36b40e3510ba75c835f126f728d773557ec32712fb77ca29f8f820da079ef35bda6712cb61909a67336774002f5b1fad6355b0bd2d4b17ef9f12a3e62873c9d771822185862bb16f360e6e47bc8d00a79f22c600d6f61ad330b0d623f38b162ac3ac404bc6b24248068e1bb517959dacf9d371c33fa35b3b717dbf7ab00e65bb988e79056b4ed6596b908430879c7e253a10b9eeb17863902c1e68d3a6243bf4b8cfd39bbb26f40c2dbcafa155ca2c782a80a769729db93b273ed9171ef3223ceb1857f5ff6324c813b9a6f1ca462e0f91cc421cca3be5a22b83192c60a6a1fbf8110bfb7e2ceef6e63071062c390c50379c93ef037a702fff952ffcb463419aa861f99682aadbfc6ec816cac3ca4fa5e496a0cb6481e1496d1d266e6252887fc3b129ac51047243732a9f24d9227e755f6573963479c0573bc30369b19d001311a8a12634633b33bdfd13fbb468212771af143abc8996c3322ed0d7eb6931be59ef6bed73efbf3413ea7b399dc5c125e21d899d44dae9f41a07959f56e1a2e9652d8fe856cf85af3f99dec5dc61e5d67a56dca913944452bbf558a93a2adbfafb0b13fe252c160a07b14487b96315a20003154473de2c45dca123dde16f645be4310119272df8af34dbb6677cf3d9f13ecb3a58aae02b3547b2fd2392d6c672e8466020a5fbb5048ebe3a4d6c3bba2bfa5755cc01c3c88ac2d1ef63948788a9cef339fae7bdd573dc03db21d2603fb8fd4e6d88c0af8cac16a6ff8530ab326760df9391359cde63e8519ecbf68df1010f598b742fcbfd040bd83771ae6a4c1364b276ccd7c05a3c78518d3320e8566cf720b6789640a5f868109f0f56eb5f17a316eb931450d06555aaaf429899f8627f4af67c3c350cf1f7f53e486f57f2dae5b1f8ce3675c94847050cdea5c95f4c6d8053686ad3b8587e301c0243d58ec4f12ba8658356cc4c150aadf091a011908a69d62468423393c6684126188eba3d912d0041441c61d989609961a24598989eae86987ea9050c9746b69d37aafead8b5f0a48c0ee105769b0d81721e17cca71f66cadf430b429b872824de850e27ca868cd6341f5622e7ea173fc569b4390caea8e491101ca54f393ad2073a8ef12b0f1517b0d58dec790dc71f7889c77517331f6551e41cff40e5140fd1fdbacd86ba19f766d400d886708daef000b9f743274acba631b4970d25642cb3511a234a121be3ea9d575dacaceb7ce07114463d05bb65e28b5c2320747bb74fd71578f1918b6b9093ea02682d60f7be3d6ed85158d1e2bb537c1a175cfb3dfbf2455529c2f90d1d5a416d258c7eadedc812242c8b3ec0851cacf25e39433f4c35224e3f20e536d542e5d48114a50df3c3b6c02b37426dc469673261b3e429b50214aace35c0774cf05ffee78064a66492b512d9c79d691dac2350ce376e9bcb0bc511337c1b4d08e50842e54a4df5b4d7a5b2b4c6a030e56769d4004e42f3f2949c182b5e76368d938726f6ccb18a68e4f12658beeb63b02dc3428462f1c0c04f1206026731c24f8e553188924fb2f55d3fd4120adf6002519812d70ffb80c89dbf8155210e5ec327eae93735693dfe92da428d550cb4508580cb74cfe0c25ff30d0090164c8a8d12c0c47f20ae59c94868f83707f3df2f4bf5e2fa0d21f40b01731a4fb17cc401b16f49ccee8fb4f9c0647b8bae155ef2f76fefb3523f946e2b9a24e07d2f99c5965eeface97dce14ad453317b1f1a2401a67485d39aa31dde3dab6fef3d58a5d24082c9bcc09038e6193b547be0957ab477493441de24afecccd46f79fff041d0d039715e0a203eb8fc888b81cdccd78f10046f499884e2538ea6b66ec0ca59993c9a5a7c1e93d907a6c13d578ec925d99a2da0b170cca05daaa8ac952aecd676ad2eede0a3f1f31d3f6ed1c3ca944adb3c4d2e420d03d0504963b9b8e3609eaf4b7b905142427340ee17b18e293330dd1feb81c418315a75925d +MD = b19aba43e2658d6251f9b3e50672d81e3b33708532122f5653485bfe87706bbc + +Len = 46024 +Msg = 8a73cb7d6621380c78e7356b9cffa14dbf73ecb5f2e2cccebc813116b5607cc250efeb5ff9c058b5608e24f0147f6e0253a6884321ccab5a9770e9617e0c64441c9abe6a4e57d098d7c79f12f8f98b03410cca1ea6f21586d574a1ebc77651f6957d2ae88e6e077e86998e1770f5621830ad9a90aadc73181f9541feb927aca2649f181fe08e652e140cd948a6fc5a0bc892e1df55132bd91cdcb2e07ca6db0e310871586d3d52722a2868edbf95dba3b2c28554ce1ea7917550dad9377b4803a3c11bdb5c06361070f6234ee6494da7964570373e854d08d1faa233122f594862d100f0d66e79d18d7df3b2419f19e01b2488d0ccd18705d9e0f234364978a7174007df03ff837d2ac5be63f81fa516ea66b766a189bc52350cb326cb510ce66a1717ef0a40bddceed76ea734515a10ab13e443e43553b58c86cb4ff8d07dce025d1a6a14b98db582bae9c71dbea0980534f7adbe5eb6f7865424f8e64d3227881af79648f35cd28d76190adaede074a0d0d7ed578b4ce0cc80a568bd5095b9a35696bccf7593f9b814e4ba9466806d25ef6e4bd6447d37061235e9a4610d4bfc1adf23d0c798f3ab9b341d72b2ea4b3c99a30e6311b1c6dc10bec1c30902a73a6dba157472d5880d13f07d9d5884d68cd75e80287b5053f484273943cfdc9306580fd8e3fdb07f878500203ce0b8d6beb087e74a09c2a7f97558994c3c04d808e2c6b544f093a2c0f84c4f78d3ed12792d078cf444708a91ec382905d7e03ee713c7f4bfd4e5b76174bb5179b88a536655c4b74cb2c0c364f0b1319728d98c4cf3fadd7e300e87110137706617f9612d30a7b07add1b1c1b89aaf82ab7588cde8b47b8a68c76da79a8a8f26779a10475c698bea74dea5b5ebf0cc7e40dc30446e297cc627085784070f420a664ea04e620802afb889349d49bbde6f0b183bd2b00d062d865a3280f62044248633c282945453d9d1880ae2624a69d742b017f36eedcc230f238b38e84c0a078fbff39e63dd13cb6851752fc63af349904a4110fb3a13493a0ace264e010815cb69b00c4110a726d55c2fcfc5ec1f286c3d33d5d57090029f6677b3a7edd2f1c1b79426cc8da26eb12e876d11fc22064f0f8c9c8e3fb6d197cd146b7640df0e1b2ffca866a289f5743f08621ae9c065a137a7efa5e5ec48cba520d849c8a0dd304965fb900db26da7144f5951135ec91b5c12498d01c4ea9395396482e3ace1998a6c8ad90dd039c234b8ad452771a305d35834d421c5099803aaaac20077adcf698ce0b25157ec4e16d0f877948d760943e62beba461583177111587cd85b43a7d2397bc46bdf7b34124a558c926d49e1448b964382e490875e93f34a94b77732bed1a477c76de8a2a205e7953c2212ccafc47be2b804e7576bf8259025d79f1fc35d2f45117134b58506e49b2e3fe4dde7d616a1d0beb20fff0798587203e4f748a7c337313386f52416f5a7500be69d54890e87b25a16388189f1a963826e41b775095310fb07e9e5fcc2c08ad041935ea40b9c47203d595b47db8ce09e64857790a9a39411de193182f2eec4d41c486ef1b7e975574ffaf406fc07d19dee4cf0c04a2fa6bc350d716e2d39e661a042ea36b775254973a3b491fc251ec8361c8acc94fd2f46314e0b891daad8bdf40b3c3cb649403cd2dd03af84ebb0676180ad7e311815f5fc63699b68488230422bcacb5a6bac79942f49273c636dc29afdc19cc6854212bed4f16cb61ccc04af28feab4be55348e022eec2cb943e20071d2eeffe4d9ce49e2a0dc3b02c9f7f658c3fa332bf1bf0de3d5a48da860bcbd0675c3f7e790db5c5ec2469fd82e1eb8cdef47cb7ffeebbb808f6811042bd091e63b454f1117ccb5ba29d2746267c8e4ba787fe81afb3ef930b283416cf3a23199a9cf5fd1bd07087d4e2c3331e56b1cb6e5ff139d652d59acf592b93356c61e8937dec4aa1f3e9710b5a056b74599b34bbe41d867db2b5f2dbf22c307d3a0ab4d6c0ff81aacc8142ce6db797306c96ad177e4a11abbdd7c6b7590095ae8b68a4eccbf74a3f437f22a6839f5e5876e85e08953f82685a823cecf86f69d049c1e15c089b4c67402a381a048769f661da701891c580bc71007c01364054ec5b5e92aeddb5302aabccadb25835601114b40bcfdaa4b3b0eb97af7e7a3d0008a987e06bb40b9d906caba8f6e871e9b277be56b4d8a4c44bae90fdec2e2c122f1b83f31af4673ca26c0f526f1a05afe072407a4ff48c5b96a3338dd1b9d63566999cf243058fb5679142d3a457b758a3ed819f2894261f97b2c788b883030fb70b18056f4f4bafe7c48b521d08518d03d0caebc82238b958c4961526f47a4829594056243a65d32bee31f7639399f509036389b6048bd0e1bfe65da5740589c46b5c0aed2ea3c83af57decfd625839bc6e949f7aa4e70d388d0088bc6b6a7a9129b44c4f93cf361dc3b75673db550025faa5569d68141867142cbdf44172c2977c8f42d4d1afc7da3e27604e685af34a8dddd5a6bad998763eb124d35ee509df4a371403500c217b50142f15702dba351085451d01ff366bf1d9e6e32a8bf96f7df2eb6478adec07e0c8ee505b97fcee6ce5cd8aa44f995017ea2bac0e2c3851fb09ef80b25cd187d589c3889060617b874596760d8e692c972d1ab5708f6e8daec447de64df770219a0d643795093e64bedc769a387500859eadc86b97d44297c6a1c07f8ff88809355500c7d2f37379f2489e9ce01f4eb456998a752be612f4f459581d484a90a2bef596804c4f8746a340480f6c3fddd43f177a1a11a6fa60e9bdbd6623684a6c9b818e176d87ba796635fb5839614e73bcba1fa10591397a1b5158d08ddc15f55f6b6fe3c336bd70afac310dd42e10f15403d3d0642f709efdb6c2f3040083ab7f25b47bc9d6e0dae40571a6d8f0b5fb99674efeb9ec304e25408434128ff41d8f42d455fde2c506a7f445a99453bdf0f156d9a26351f91616a1051a35d517b9e43577f8dbd4fa826fdb159ca2b1896000751c521cfb1b65563ace2bda7a4f0f229ff7eaf047c1dca04c79d690a4b8c72b247f94334247da488067df9cea1a9bdec4ec82b795db83edaadb0dcaa7bc94e6078bdf42b1eee372143aabe99efade5d56be76be59a806ac78c1a8dd351567d570b999c7e4710f6768ef175d13604542c7e63d50fdb7e37158c61e24d743ae6df2915a3f349ebc9ce0ddb843e20b7f039b1c2d3c1c7b88b0ad40f45df8e7d7042faba7253c9879973e8ef54a853cda3432a8eccc1063850f08dab1d53442805c6a50f6f6572ed4cab48b54dd7774e5394114e28d841066c0ddebed26f40418cb5539d03f3e924ccbf55b6d7933543ea728f8b4ece2028c9aaf0cfccfc2ad3ec552bea96c3d934fff736795ba335b34f26cccca86b4aa84d0eeb6672c1a9e30fef5680919fe826cf9a14873fd01ea66af8ef999d77688de283f60c2e88667bdccafbe75a4dbe0123f21666ede29824232f207a95b921e06f4f3947671709a23b3043a55b9504cde24565a0cba14d36621589f8f8fa1ea8dbbbdda28637396114675644fb416292f6dc28bd43d4e2e30ff04f9a2f0206ed100f0aa2f1b09ebf4fb85b4ca1177f5946ff8843bc45023412099de9a09982b8f593e7d1114ae1c4d56b7a43b7e10429baf5adbc9eba532f53a8996cb4873a10728f9db64ecdaa788cc8ddb3a465980b3a08beaf50fc7ddebb156babd393d5fd6f4a53d91100a0e45d17a923d06ce406ae7ee3a53cd3294930973c2e6687fc87d40d32c3c0ac6c0f309f091ca3bd9022fea04625c906ff779b77347ed32956b7892062fbc599b601eea923258522436713b60cb75f5fa670e5fe7a2284428c9477cb0a09868f25c37d7d1fc6de61a5ded30860e366a4c73cf47137a2df994526845653766d56615cc763268716435f8e27dd6832469e09e4b21b92874ef82a76990864c9e0b513d4b3a360f195901980f77f4c2b6815156f0643b4573825e28b9f2a668a4976e3342884f48bc3107aba2c34355732d192e5d730c49d05e9166e7c0480420f5f7883104f0add098a2b46ac454b3c0d99294e0f2bebde1c0c6e251adedb789a397bc9524dcc70cdc8d42c61fab564623682b3957c51a4e75691ba5f009eb452cb930ed6c360cb78901c72329a9c579771441b516b1d76cd8f283435b1f27e9fdf695b84fcee7773abab22066f279b1610178f2b4078dd367eda9c833bff5fe93ba4b7443f9ffa25e12a43c7bf7fba45dba5160b4289608aec50f931e4ecde98a8ed2bfed39adef5f941de5cd3cb3c8e9c93b8d9ba798732a1325326f5e28414eeecbe9a0108aa4dbd97faadf334a758198c7d7df06fda946527b34cb508d7c5d54878001111e794f3d59fa266e2850a1b366edf2c94e21900d7208a6e87611425aa61184bdc1c3164a2d52376fc5d0e6a3992e8b60f262939eba2c86686aa67a5b982cbf692d18ed8a7a51869aab8cbce3ef27ed5092e2dd90b41eee72e38271e1ee2ff5c5a8f12178c166988161da90fed948ad3aa838ba9de06e537a695bd5980899dc35ddc25e8f831fe1b651410f4ed82f5f619acad6e0df8939e17498f1b88808e74c3432f1493fdbf6ac2256847e7c4a5877f31f9f33f1fe166a9da072fdeceb8b7b3499864068295bc53d919ce826084cd039bd9ff1d84b7d583d28c5c297b05d45578c99df9c8665b40b78b5267607912ce71b4594f2efe35ceb9856911905c12d257288a13d81c8db248279a3dcb6b9c073bf2ca7c259cccb1155c1f4014a4ba526e1ef2fdb99d9bd1125370adaa44b5d782fa1a4c727be3557078465b0fc714fc46149c5f73d3cdc49f789a5f04eba366cc3611691c81c1e25141a60d8aac68f9667051df0fa46ab477ffe1fae148aedba40d76782b98b07f411f06fb8b3bfe71569bd92894fabcc8204e0d274a43205f8fe71324a8a7f654c77a2fd01d5c1d8b9ffefce00abc092924cfe68d45c43f19172cae129a96dc8a6bbaea3245f70f6fc80082b079d29afe0be933d5ddb35532c34510ed094daa49b547fdca0df41a465908323fea23b7705b03bea617f8a8d11b98015bfeb3a8b82e8a303f7c3b8738db80d5366499a7a79e874da9fd7b801fa88e49047fb21e005de94d399ab59e6cd5cf333cf01bb4ca5bdca98596252744f190af9297315348cacd1a627048a60bcf5d14fa959224011b6a9ae3eadce4677f04fcaa4b1990b9fe9f615f05dde93c519240175be440766599e86b0289feb0d853f8f6a5501d7b80c5e8db625dad28e4d67e3c4afa504ec1d15ac4e515be4886e66b1eacbf42b5d8a9787c8dae3bf60f9198116bbc9cb4b77ab9979b666c5711241dca684e47908fb1d8ea90badbcf5b2b543dc5126bced0fccd8b2d665004ff74d6a1e2e673332c47d2ce7367d4db4f0c7b6960e507c493bf5e49a2fbb178da405d4b216d0fc637d22cd03c9f7041739cd53c451bb6bf892c3478020fd9db29ef7b712dcd637339baaf97f549f52a4f44295f7b9ec1e738a916c156890e5475e9f8bb0fecb760b96623cca54dacbd6c6a41790a5470632a9fcecca551990b45959cd0ceb453b53f4050165593dd235178e333fb270a5ce7772240f74fc229215d2e59720b7e9b53affd1e0c02d08386d4d83555fed9f9f597dbc6546bd0d691a878fd04db823a7e1bf48cd284cc0694e8e72620c02363de69c105c58d0d391edf40658b0ba5b947ecfb07af001bd4021adaaf655731c12a539ba6519dbf7b4f684f380f833040378bdb37ac5f031458d478772baa4b3c5fbf335001832fc3adac6d1f992b6bf9d45e5cc5d087cdef1f7d88277aa1b8fc07144facdc27a53abf1361c22feb9d0aa9ce45592461c08cde7cd3665a24c228a9bab861ea7168080d06f5c8dcab0f9b3b44609aaed526141d3b21ddd41bafe8ce193618334ac2541febefdaa5530ad51426733178cc45ae64213933ef6ec866fd999079c098f9467e2b189f94cbd4dfbbdd47c58a2c67833c96e511b40655c7bea2902b98455608b12f38c0b0fbb5e2b8d2a4ffeadfd2ba2c02eb1f29c99e36999cfcd7c33721bf405e17e401cbf706946c5187a2cbce7cbdce140458a0ead917ef9d244a58a296b41f7cb49024e172d6121804badaa5f175602869497383d8bf033bbb348e21b393dc31d764ecba4f062ebf1f38f39d40df21eff5032baf5c1a409e4389c3e53e68fcfcf6850dcbc4ac270f7f26fd0092807931518eaeb78dae0f8d6551de3760b8e7a6b9fc6d5cfa5165d0cc8be2140ee2d1b524f2e6e39206d6d1c995c75f400d04f7c7d0f6b4197c50cab0708922dd8c8f441737ba7a94a7fe32165d66a508eebdb6c9098e1d48b650c4d1dcda7126061da6d26611c6ba1bf078f5afa350dde479ad66b01fddaf86cd88d7d7bd4b12d9e1a3fc87d50d2de9136b0d9566aae976a1a247cc903d77742fdc6b6a1af6c98c45023da0ed981499ced3071697f9542c9b5e1465c985c808de89359bd9bb72a7af8d3fbb41af98b38b778a3a1e86468ed0a97484b2fdc9cb4257dc74e2e235b2890aa7dfb999e1c0b1203f0ae399e625a84a0f2f33eda344c30d09fd1db33b363a4220153da01648a896cd8dce7a5c788c0b8e71349c7dfcca75633d7376acbb2afd5064b50a5fd1d7a1deccc870d10fe2b2994f9d538079bd55933cca72b0c7c103dfd40920e5e5a80917cdb7c46d731308d7d3565ad445067640020cf06de4671b766d212ad00b8295229a85bf572b88d5f10447f9a0e80ba013981f380e99840fbd38e57048cccd0fa73b18a6b8bfa8e18eea59780ce8369ab305ed92b96e80a55b3c3e3974aef23d4db65ac4b7b8daf3578e721e42cfee2eca515c4697ecc3a6f98112cf7c3b57e7bd1531607d9d88d5f4f77b3467249a22fd85569bcf9ab5d93e104b7889fb65d79f6087c131f6194d0c2d5d02a670a43ff6a7c2da8901bf08d3f0cf7dc37584d49a9d4330fc4cf5244739fed0253a734d5dc2874cefa747f95f29882651311da556d64df5062584224f2248e60c0a6f14d9db8f362616b7758bc45cba5bb796137c128d58760c2d0ec9f0228b8468005b13fcc1e359d67544ffc835830b9059e6b45aeba174865bb160ac7309b5dd8eecb32c059aae6deb2e623dfac78743cce6a5b54f172a1d73d4ba5d25a6c6f0818d607443a24d657ffb5c2c93cff75859daf82ba103be58de3d7f0b1fabdf2a4107c2da63445f469b72979ce7e38457678c54c4c9ad58bf04b558be49602a12362282694ec80c96a65db895e04a56c95dc26289af5d21db4d03ed7f8b0ccc30c9a54826ea767bdf08826a1f654e9436a545ca813b5b403322f1e555cdf8f00c605abb1b2095d5a828a953435f356624a6dd33b456eede50e945e849f76dbc2f6507844fd96f417a709c1b08b448f51dc851452be66023b80cc8a062f1b158203e754bcafb4ae8dc47226b774dcf69a8736ba9edd4f736f5f142b2a8a30ced67556cb7956f6ff2561502eb961212ea4e0ff1070209fc408f027bc923f6c8a38d10b470b71e2686704305426feb589e9504ac06736cb6680ca53a8bdcd02ca119d9141f38efb7ccb337f3180ac1ebb008bb644f47e46fd7f64449a0da1b7f109317556c21c969eda65a94176d7a11462c9ae18a865b6db4d4466eb125bd0a1783313ffe79968511d214afe5a20013898b0aea5e39b8fa282f137266c6a015df72919a7e483d535fbdce0e2ab13939a0ac74497367e35c5b8e131c66c4aae790e89e2e9396a61b00f1ee778fa00fcab3173ec47218c3db7479ae365a27c5ca516bc0c3e66cb9251cf6deb3bb796910ec55d224035442c19c784c86e9f8d8044a855f201ed15eb8da52048a58442e5171ed9630cd244754fa1455d6bc3ecadea4bde30ee4ce7d1e628fcac30b0748d66a67f4b2798fbbdeb7d431ec7a0185a0879bb555e06afe9ddd3497287ecc9ee7004c5370ae9e84a5fa414890cc49f0921aa83bbdb9adc97e73cad27f599a18cb5a221a3415588bf2ece1028c5a1ff3fc866bde0e189fc6094bd8e591437a9ecca274b3c456c5b80cb43fc8a7cb8a7625f26d060fa449de858ee63726e5721830fdc785e818edf43d7ce000a8c8 +MD = af47fcd5f2c8dd20ce9b83ec045e2e1e25d8bf198aaac93f6eb2d14e22954710 + +Len = 47120 +Msg = 9a65a1c7b4fe5d37ba32359917cb943a3993f144f321553220f217878abceac00afe1b87f0dc1329a42a234a8ec781d8342c8d3da24459d90f7f69afbd22b75e21e1fa5444af283e69d53ac2f0412f717a2153f74eb1c195fc5127d240dbc96d2833c9957920a55c505a016a05e4a7ee549bccdbbf1095502e93d957d99029d3671f0db457d6916da0e100a89455f0380ac27e4fbc08dbf1ee6b08a851e9dd7a26ca5018a67af458a294c0e5673f1235e4bdf3bc0f419d6084013b2c6f8def48ad5f19292eb3d7059e99c88a444816cf2ab5b38b7e64e285387efa4bfd2566274304f14fb72a415cdb18a0fdf41803ed23d14422d219b348510acd6dc1584bfe32e15ff208863a45a33ad1a83f58e177183a30ebd207179119cc3dfa85cfa5b4c020eb7aea70caa83c26e2f2ecb0b8545117ff4c48d71648d6edd15a0f317c3336e61d4f2590fa6def055b42c5c7916e169137affa30b855d19412f62727d962dc5e7ed9818dd17c04ffc502904673acafd0627bb2bb06a052ea86349759c329f9ad9581c61057bdc33ba79916d467f663fb071836200711a117b77d266e4270d6feeaadbbc0951974e2896f1f1a74347c3bafee4e06c39105422d3a9b0f5e1fbc7706c6294692765e1bf3ec73c0a24e40b7e165c4154306c8946ed1bfe3201ff1407035d84957beca0f6e78d96df92df89825e55ff68e5a303404ac5a938f56bd82b0619072ead700e6817b1ac982b7eb0503d6e651ac73864a773134c6b3ad6a654fb1196955ab48c7b55dfe7d44d5632704a022cda63b11004dca1425950c3f10d48f3ad5a020eada91864d314770a625afabdb1383981b7c10dec3573c5c83acc762bd5ed1202d499d5ecf8c946efd288d5fd8cb4b74eae647d40a05b0837f60b19168adf2925b39614e4c3732b9b0582425e39c07b6c7677b16afd7fa6b7b551986046a0a5dbad466bc8bda293707dcff63c22ebe46fa27330b7a7421fabeb287a8583d226b93423311551c82d24adda3823e2a780ccb4df71b35852d1a92a0835f2ecc41a32dab50b672a54470c0829aeb1f383def82014faea6b127b23d4796134cc26fedd2364611aa1e77fbb2f46b052dff16da666dc42c97a116aa08ce472c7bc5b431c80b9c8cc52f245a685a9e3730280ab2c0b6ddfecefd02ea3b5e1f12837d19575853da8e8a7f52752addbbebef5a2260d807238a136cf4591e1ea52e2c94a548ca36897ec2b7093440a54b88333e65ccf6861d393096f2e1f93761e63eaf61ea66db30c6357e517ff1d9d676c47cdbde625b5373eb24076913d0dba380795326746b57cdab7d333e87a2e21c6abb8c7f63af4da10ebe38dab5129ccebb9785e53b0d86fbec5cb6594827f9e4eda3819543aa94295f0b8f1a27252bcdb7b4ff0d04ea46b8bfc2e3b87d91a23514ddc1094873af75a7b41312b130100a3c76c78717291e6cee57c0446d076677a81154c4bb3326ebad60ccaa9b5bd4eb1285e73cbcf4977f3fc458e362b2cb1372e643ade41182f53bb8c3cb2cd0feda008a67133b70375a7bb1b07ea2b95b6f370595ab0a3649fa1764ff5badb4163ed02d4df3dbc789636ac5d2fe76459ef4c21652a876c906620a0b88436632a47f4815a3c6e5211203d3a9c549267e1b0adac0828b71f33e94dc55676c9f6f310531eb7173a1a55ca27f059149fa8b5a1a46ab2e3c41dc7bfa55eca3bda09644375256bde2577ceea937803fe43a95e38acf805ea22eab44fb3d75441db0cd667f75ff91fb4fcd507ec1c2d5042dc33fc43de718a7828922ff5b9b5376193c1e44608df4a6d0c10b8be5745e901c3ef52e58876632839d9c6e7803d7af210df4efdca9efcb2480a6376d3edf704f2d8d32e7094f2c7b103ab15c58d8b0116570e6b1fb88529131a9e91fc7628c0eb98f37b414dc7bb009842ecf405f61316f1b92a72ac92360fd9c0bc5b8eecca10a84a5855113086bb1034e996372aac8507c5b86dfba26d90b080425b88c184f47f4e32368febbf32f3e79816b1c7320331caa15c162444384753c087043586299655b5600a57c92acbd1851fd62a47f3e81e51d79c963e88f691b35871b7420276174e5c10e348e500991cfc44e252e99357666aef76c0e556e0976a61c54d21a6f969a5543c93042a94ec465e7de756dc0c3b809f548fefd0b6e91754fe0bf9918293b614c25c0ab25b5f78b35b79be2a836db32cadd00b0c9b24f9bbb0131cde29591902f2e86b2063032dc4199ea1f773596d07e155b962e3d78c1689d6edd57436487f6cec980d3263b00126aa84db42ab38b1ad759d6c477d48e5f9dbff2ff997cf1a9ecd33c14ffdba0b0141e93e87cf80da40a409913c92aaba7ea6c346100a0744e70ea0f5222da64247d941a9a932efb27985906a29944bf486abdca05e19ab8ef41572113f900f3758f510952d71d00a868ec46f950e8734b07fadd73a2306693496299e2eb15f6ab309f8999b08cc231624180a057df6fb7a86a9434ad2b26436f52a04460e014cf4ac4c2f58644e9c96e9fdd2014f15a94355618cf68529f069b715dc3c02af6e8c409dbf1c10e1e79745085fff1e5ddeb950690cc3d6f7ae4b505f9e674bb43fe86b6fd12c9b009485c9a9fc855859fc3b2c225b493485ee5a6579b35e25ba41a78134fe206f2513e0ec65300a897492473d2ff0dd1a7f41254af6c3973d2c1428268fae8e19e9e63731bcb3151e48216c07d45626152e472a85594798fe741818cfc25acc07a9ac071e32ce2ba34f3a2810d2038aa11d50d8a903a7e9f64cddc7e18f9b70c50eb5cf164a19c4a4f43cf9ec8b71914ae70ece3a986ce090f0c5d40049e902ee6393fdce84fe669fc1ba600f7338c07ef5c1699e8a1f337b0a70bba083bbf8c042d7218b561487f05232d8de1bb1aeb9e41939695b3758f1145eed56cf8cd90746efc8f13fd4af430026e2ed078492881c96cc0f8e3da7bf98f0f7777fe41a1fda5e5274c4c7531466171cc0a91a426619aa801595aac622f2c75897275a326667a36caa775509c0ee73c4dd82fb04e055c4f40ff4072ac7cc528f4a5857c897894f65f6ba0649e523dd99b827af70637b86a6533bcb5c0a802319e58545231fb9c2dcee1f737a0d80a509c509900b7bd5500573df6fc087b8a9771d30db086b739e3ff519f530869f7a73a8ab553ca60dd19006517cfebbd0662545dd61bf0731421d902c3403fcdace85b77f579a5e8f5bd47f347b6d1351d9b2e40d71dd7f9d5ee463e8984aeccd01be96082f9b21d47f5142ead3a22ac7849e9c23a3da30f23532e4b19a9bc2e0b46cb8d835b58c77bc84f5f72e247eabf746c2c2404bc7ea65777729c37d0ba0773e9462128fead393fe1cebd37a6b799249fc6bff88b0d07020afb3ab4543969a92bd384e70e982861b0c3b7c0a8dbae626ad733a37686ee5ccf2e1aaaaf74dcf1797bd320ef50f036a5868805b51da735b5a9a88de6af026eae5365a049300652bb88375b099d3ac6a85e578e36462ca66882453c4452ec3f90b1421f8a388fd4d940d721c447ae1aa2954ce4911ee4bc6bab323af63554d75b91daaeda53207fbbecdcf98815f3397971918e306d787fa66c980f6621e03ff93b55d5a148615c4ad36d6cbdd0b22b173b4b1479fb8ff7020c9f41fadd3b7e50f7da1c47e0f9726c3fb301cb4092f9623aa5ffd690d22d65d56e5a1c330b9c4a0d910c34e391c90a76d5401a2d3caa44b8c5d5aef3e928b90d2ee233e9f9a2cec4a32cd019d06a0dc1fcb1125f5746a4fbd32169ed7bf0e4fd065fa7c8ac97c366380484495f5c5b6850dd1c9d8cd6694cf8686e46308ed0ed1f5bdf98cd831339771db63de5a7deb3f84b9eb183607df35b3427c6b2096324a05d4521036fa58689fed0bb0b547cea1d830261e3efc738260cfb34a66987ecb2ee402af7626194962f388c796a1f54e60eae7654882f637e79525ab7b7238b7d95387d50642fadc5395878d6f1ae3a7c730cb880359dbb8d0295fe8bfa1e4a28da95e0b77df7173ea39646caf211e4063a82ee0cfdf9897b2f2ae9ca3a6271dc45c01cd4b6a11b2af55cc0ff73309aadec7ae2a3e92b1570887ae31d7fd648c05f1ff94e161501b1b811ac1a7ff3a499105b5aebff1ca79396edb42cd26217fdaf1b3ecea53c11fa731cd3c61b4249f12e8d1f8c49b2870ce0ec239e3aee25babd1db5fb6cfc932eaee7fda95105d3dece78f92fcfd6fd04eeddf91bc062bb20128b247e723ece74f2d9f16b282488877984af7c987150a34929fe4d6ba6215735ce54fec0eb0bf5c55a79b5a987b115b6190b1aac69c9107839fad943a39f86ae4f0d245ce992d8b2d25b2fda1695af0e9fd3b213a8b0740374b56a503f7dd5067516985022ab463ea96080c5ba7e7e087ed0ebd5144df67341f6a69b63026dc4a73901a47c9e67f34850507259b2a92c1eca6efb97e7bf4f0a87352bf87776704f3c075ee1b2625815f349e7dc7a5902e789e28d18c7f61f362ec008e4241793d4e85388383060f57911112e2c1eb61342d4f0917e36c46c2db4ef3b115179b49e058d2969608853dd71504f2fe6e7e695744011b37a51bc56e169cb6546c45b155b5d4a5b8a03f9a7dcaf50cf1a1503493279149edbc49a1b7cd7c0ca4a1f10a1b169f2f8f6f86f411ad53bf30167f3c7d443a327a3458be34fe02327a7b25caad15c2927ec903e11f36c1783e4063d762248c53618fe1917202dfb63a3a6c69881dcf7d0b3f3ed812f19ed660b1969bde62d82b38414cb1db86550688723d7d38a9165db944804f79586c486bec90006e69de2862db2295edf312a1d9b5015c3b4257a31d7b70cddee5ba4ca453e89b8eb3eee985cfebc425c39926a26560ad0c63d3fb8c46a8c9a023f961ae79f8c3abdb8adcf58200b32f9248f37725d3e638a84ba59a2860c9699dba05eee1491f624b428146b419f947c9b2a6cc58c38e2c69ff5fdbb3614397bd7cd7ea0c72153e8da6550db89fed1ae456af2680b80b74339f88a55a02deb6fda226346ddc3b9d0d16e69f11fb25257cb57afa3039e48c9f8c9eab9ecde143f8ca9f327810090a6424b49f52c437e3fd4f98cbd9c1aff208472032f43b01cb19769178dd95f4130d402d62fd737bc2d09597100fd7d430f86fbbffecd2a6b8ea06ab8be0d683237309dfae6491876eb117e47b24f4f7b5fa66a0470b1d4699d52b5bc0346a3cc82fd239b64a96d133f9670f41cb91611d88bc9bccb18367fa852510da4ac9977dbe49da3ef20bffbf23d386286645c6c42de1fce5829d913754b4691e966d19c088d12f9d0d69595ccb0dd773777a8f4654675225f0d448fcee39d321a9dd3a1d29f8a854ff2774b9497671d791b8311096cd2a028ebff5979c25dd67e7828f001c30e2fb39ded841499df3b9278742bf5f73e30faec93db3e918e675e2057ef5da0a4df46fe80a9125f4cb9cbb503aaf290c2ba1f38877be7f838cc02bce808addf577d4e3eb7205791b67e6cfbb8f6c8df6426ddf663a33a9e64edb27564a2bb272cf114841b52abd62574bd711c773f8b2e5c7d4eb0ba012c1ab2b67352244d212d23e0f933a7d5d6a2820640b6961e3d28444669f4280249600355dd3af82c7461fcfac487889f3a34908e8f0eb92f9c59c7826fba54069e40c8d9dba48520c9d062a90f9f5bcfaae4879e87ad4a3851c9cb778887a8d4d3c1e988971933f1c8833e36ff04892ecdb94d7e501aaf020380396fdae58b368feb4eab36206a66188179e9be3d7b844cbbcb7611dd52555b87fab0905b65f27ac7e089e342924862d2f90a74d29899cef2e9cef27f99f901e5f482d0729fd13d5c856cc406135f4d7fa8e1484b4734fc6790cd1c87eeb59ca2112fc2b09f9b80b3269a01f45673828f6db66331f21f7e21a6bcb77db852d4c738fe90a0ce18ead2ac5cc394c14ca80a2fd0ed0c0020fb2814e3eaea5e99535a51365fc7940f24c3fdfa326fbdb168f9d8780d62d9001c85c38ade554a4fbe6643205aaf5a4ad68e03bc750cb36c6a634ff6ebbde586883f9af9bb46e33fc0f0f804a6df868fa739a4eab5f3094355507c92b0a48b7ce75e8077a8459130ff02572a6edf82a73fcecacb19ad29ffd2c8479484a036a8e3eb5f4ecddbbce923a348d9d838b45a47545ca8cac1796888d498438e384bd422ec1ec4538fcc33d5dcb35a0c71866f67d442c9efb76345207b57e8f7f433c64c6ca52262ea29d6bdb480f633125fb046556476b1184d6041c66ccbe65c56470a70dcb021733c9a823398f275a3a6e38ddfaaf7386ba17f94bbbf3484f91c1e0402abb5b9b26b47cc61e199f9adc5d1e37afc93ab38c66bc065396bf952ee15e129fa7b522f1fa445474432e8b82342f12f4294320824ec6ec9c0b76cef32f249eeb1481273c17a93eca904694a28fe5f056440f76123c946f13d620559527ee657b8652405b7915e58f958a5ed3cccd4054ae01fce2bccefe499b2ee17b4815d6ff71aae6d6bb14f941a76c428c775f836dcbbd5d4a4bb12aabaf04cb1c2c3593b56aed93443a20da7f6a6ed8331c274a0031b3ffdf65f564c8a634ab0e20b80c5be6bcce1a92b419974304887e278f04ba54685d0898064d1f0550d9b7e227a141597b0fc041693737b5bfebb43621340ab85d0d5c6e6e341d30cc0fafdd1f030457bac0dbc29aa3cf57137a8ba478686fe20489513587ca41dd18956c7de8a22345fe99d392d2ffcc9b81ad4b0eef125845f1497d99fd703b5ec90354411eff1cc8a8e33e2e9c9bbdf79d0c98e20fa26278a5d6381839b6583a5fe22dc34c8a5f346c458212721821ffb800fbaa54c90cee84a8271cc71d36f44fba2f70dbc4793d9b3935daddf587188532c9e458d6b61c2047b134200546110ae3ffd6674dd938c826cff44aa46bd6671aaa0c866bfc760b2d6ceadf1f04152408056059772dba75a6b6db42a53ebde01112af57e95ea0a7d1c09d4ebaff753d9ed6ab2ce0b5372621910c50887e3382ce7a3957ef4b1088dd42e80979a6b589f0fa137c1b2e335c3fd503fecea8dbc19b673700de504a10986a4799cb886acbd6d645b176e7337a4a096e97d85d1b2f105014ed46fcb1f19bbd387a4122e96599019e57948ebc12e88488c645f9861db5db7f77a9aeec8e7f9237254ae4c5d9cfe2a9e8e46331b883fd0f04980c8120045fc32a86e56e598cbfc015696c94aad41fd4eff73338ddc4d94ddd2f14b0d874538c906f4e9bd57b6c6fe52d28ba5b4e1fcbd73d4d45f4f38fe1baab9079a99e5d4823b33909a4a44e92fef687cb6db648db29373fcd80b8a747177e0e6015eae3626f03334c299fccd5cd66283c448541af60757944138ca60a9e26fcf89fd27c77dccfdbb7e6d66da4fafc7871923380a52768885e2fd812989926da97b9fd9ef4e78980f16ee0b79cf21a072fb9599c58b880fb503833637da30e25e1f6b4a17639b0c16d2437210a3d4f42bb3c6feb36ce6f30eecf271f26363d7d5bd8a04a582de62bafa9524099471cb9a88ddef3cbc383c77e571bbc2eed452f69d238f0374e9a1e1d50ba7ca6aa02ea7c402f4c84225f2d735289a0f412a5ea9075f71970063d175acce85bded08233aad5f96bfc7561e1825409841260e00d6426634cbf0f5fb5dc7054548e452b53b8d195c891373c821fde13dc062284265975f5f060b4626816ed970d51925e992aa5bcf8eee23f6da053210f4c01f2b3e4e727baf18ff5ac9e9728dcb522ac9274d4b7536200eb22b845c9946079cc34aafc90f30e0c79f1d7ff7249258095ce2bd11d9ea70dd03fcc486601cfe46136f0189a3f02b47fe657a90be92f369aaac44d68010a838f2350bd9eedf6fc622968eddc057c0267e892067e232eaf2bc6b28c2f4128ec685bea27dcaf820c3f9a89cebedcd690d2871baa118dd074d9909b2fcbc56eb30c67fd1997ccdd9e69e8b74dbb2baeca402068f69e8f81022496c2aad6046861dbd61df568dc864d71b295ed697861292172ee9e5dbecce18d57ed8fc68482936714a16db8450883d7868a1042599a3806cd20e3d782109d8442503125dc69a23ea23bc51e9cc0cc0bb32878ce35c67150bdb479a47ff890a9e4bf516c727a28b30d51adf45a6b909ee6e5696593526fafb2fdc24d1ef1555ecd7f4312cd309174c4778ae1e4557c01804574c108da7d644b815029d57776135b1498b1632976e45601ee5ff11ae8d42dbd2d48fcdb352ef5c3a5d34a075d781c13c4b0cac1438230a53ad6d72851673dd0f565e5b12160205925c1c33d85fd8ef149a97a9471fee2c602e +MD = f2d1ac4d7f4fc1fc01f18aab27b0480df6eb00c252cf348c3d08b4074029801c + +Len = 48216 +Msg = c54ed4d44de8b85199fad72f8cb23d99bc1d4eb3c731b7c6e610a49dc48b342f90e5297e50dae5be79e092babdada07425f9740b5f855ee2595cccff0f59beb1a1e97a76a812811bcab5c1258c100c706886c91620a3ea92515b1e264b92477a20e22e85fb9875b0b3ffce39a0e26bd6ae4cb69caf92411ef69300d9213fb6d03656ad73f272aac55d4820bea22ba4ee1ed2a164b75a4dce6f8edbe23867f3fc0bcf5f0834aa07a2f0171f7c39f39f00e1a0f337de04f4eae5d418073a12e545c6d4ac0b6a48738f93f5333b0e4344541e3e15ddcc9720b97feb1d11cc4876f58feefc463b52d8d36e69c4c2c9227b32fe356d1e2a1bb884665d54c798128d5390a3b77f50d21db7aafb3ada11992ce1a90b65c2a099a493c1b223f3467712a6ee7e457f50cf2a836f33fd4b8eaf3faa464b6490d517cc2eb970f45b7e80ee37d4040e0ee452e77fe49a75dde96c9cd5fd7ad15172a0189d76212ec8e734074e68bf7bf3b4623cf232b70b57cad82baaf82216cd1e3970271f4c3903299b4632d236f2f86707112680122583d8fcd5705cca9acc82ecbc16dc7a7dd1edbd932d3bf1dce3a5494e61f7342d27bcdf807154fbc51646c0e4b0d73262fddba3d785cb79a27d1831dbecbfa4890c1e8915f3053cff7211bed03e35fc504d9a54f883a955aa8e66c6a00fffeaa3faa4037d3f9a15b0aa8bec68072160af8bd3d8e06ffe0d5ede37118511e08fe1b9f9549e9d390e40845d549555c1e7e77d2d387591f12a25343418733c891aad10c38462540bb018c92ffe3d6e3d1860ec517ba130ab33665a04e550d622136ec8ab9cb0ae37829e41a8f0499bbe7c829fe6a94b9653b08b1650800628d5038ba958a36ff1e50d3bb37134a2246c99b66095cb5b091229fb31c0ef7b7ac8716e7b73a189663fd757e832d22e516efa62f506e7b8d210271e73fb3c991423e57e06a39fe5556a6a5ba992d0d76aed24f027e0084c3974315ca3aa6f463d0fe7231291a36b06914eadbc393884b610a1c6becb33fe8567d01d8b748e6c3eb400c566e4b803c0da09b7e9d0121d7e00f74e827172b600108bc9f102a3f25f39b7cccb45e395cd6d25e0faff64890ae4b1ee3b77cc5cf098eac89efbb5c0e8c695a1095c2e0973732a8fb56d38b2a2e55410b0884ad99e2675825a08cdbe218521aae8d0a047fb149e2ee4c3957f8e2b6a1baa4af21352e3b560ecd1f2d4529ce350304a4138ad770b244da884d815dd7b77f165cef354f631c81efd2ceac23363fba8711ac2d0c5f8d9b9c50ba581230d8b4d82e661eb887123b63583e8ba732a1419ee32ceae25eeb5efc235ce1826aac18649404660c1feda7d2000b68283bf014b6892458dc07420b946073c230ed9806361e688fbc85f533b67aa3c628caa2c0688400db6be1282ddf98bd5e9032331ad73e01104c61cf8b8b18a63a2b674fb12f64610714650432484c882b42c0e3a2c2634c7c3e2be30bba7a6118928a4d83659ac340580b7cb568fc62ccab12404a823ec948045cc620ef1082f600bc22a3b597863bc95ce823bc18eb974bbedf7e911105f8216cef87736b8a66f865659ea9fb484dcad1dd19ac32713fa72f07bb699a610127e4d59bf1ebc5cfec2e9cd09d3677faeef2d1e3d3c9920a4fdb5f9d963b88e78a5d0edae531e3b55e702ed609d9a3c7a8485d2ead5edcaba84c4d718164dc3fcb2df1c0b7ae62abc1c2a23b9a354a28894ae566a362af78331a67f3c5a6e96e6ce024ea03e1a107a89e8d7da909d9b1f462e1185065891482ae2570dd922ef7d20c2eb3344c4d7d857c46f8c0a7d0f88c28f6a02ee807f519700c9523871b60ad1a65b8d37eb661eae465497b9fde40c3158cbab95a8a9e6a1883cd52263d3d508370676bd98a594b5f7eec3472403f1bb129b46a4dbf74f7003185c3d012f26eefb55b57ed27c81955ea5d859fb547f8744419cc21e51d32bf9c4b03152b045ab7cae1424a1d32f7504e29d9a88bf00be762775987b9fbcfaf0aa99a75e3f7966427a59540d92e47e6f0bdbafd52dba8731b499cdf9c950067231de472ec50c47d3224db81fa1e9d8298a5a43ea84f60bfb50cf0aa0b7d87706c149b8c9284477b90cb8f8dee886aabac5e2fccdaefc715f63e0f779529b7535c2a0a337526a1e7ca262bc5350021ca8263b82889114e2e255953b8b80e327859cacaf8129c563a24b12ab84bfa7587d132c7e231786860e8fb47fdf2af6b580b83585ae979f6fb56e926d7b1ebb83c0f67f98a42799846a77056a7b391d48ae7c03ccc6833e6a3d75a8ab405687c8fa36fa7715a897057e7652a56993a0089651dd2dd2d4eb7bc0c71d0dd94d534db23b66c47d84c630d3f561d7b122c71cc0a08c50d974eecac8ccb83a50ed673a706d8a26e5a26f2ef05afba959ccdaacb4cfd9dce34a8f80dcec43dbad1d0ab8bd34304654ead9265d0ee8c36b7b20e2fb48897af93e16c5858f8497f6c485ef1ff81ecbd2444e41a37af0ccee16e2e41c7167d12138cac0491d451735cc200620211d5e689814a74905db6deb8568da9fb43a8a6520f59ab3fe4c02711c23254817f5a71cce747fd716704d69b0faed0d78c94ccddedd7a489a6101b39cd6761e426e4df8ceb6f1d6177815707fe044ec24ddc0605bca89925a4ebc0234811e2a0b50f904802227cd6fbc6c09da6109c7223e8d267d06ef18a4dada66cc6b48f4d8625247cd0046448601fb3aa9c76123d9b45c272dd8d362e1cc04e74cdd1a05126d01c99b9779c3c412690dd458768ab107d56c54875df97aede18e9c1fbce42239ad92d430e6d391b65f8a435d708312fe9ffcd85cb764d5051a62a57957196e8effab5e13b5fb55b485b8de1d7797646363dfa39f062b5cdc566b4d33132d60349f1b23880fc478d5829f8ee2b14c0ffcc81e9b9875d776393eb27d9417a75ff234ea09d71cb562e1ff4739f2492d7b9277c0aa8e29ef8ae5793e1ee58c0fd2926620fa4703567ba0a3b9c89665bf11ec17cdb7cb4dfb02a9b018166f99ee23dadfc6dd21ed2f2cd917fc24162e8c37d4514ea9950783454b8b464f7767cab99344e499ae01c9db56021833bacb1b5610cd4a6a357f10bb93b1d2af481e2efc854080183368abf2dd0d16dfca64f4d76932c9e1f3df29cc4bcbc32029e59f547779a441fb495dd737e0fd0f8d23a020a729d3f6164c57e03980228961e4a729329757fc4dcd68f42c22d5ab4c2ea69b92597191e8f0215f2779f6d13944cde37f43a231701b53af837ba69a4fad8eaff16baa9aaff30fb1db5e47e2f92d99ea24258bc8ad5da672069579c6dec9e1c38e0687f9b47da93e1dd61ea3e9c694a7e9e41daa4cb8eaa47b15551641a925412fd30e973fb4786fb78982fc5038458098285dbd9556a6acaba64372bf77e5909d79495a97c303aa6f207bd578aa35def79b55eacf5f62f45eee4ac2a258a618a0a1402b06d0d2580f431116a745ea2ad0e30c1a44fba6e35b9572ee3076f241fff3faf3d2046ee25d994da82631eecae9a88a333a50fbe16c44c3dfb2f9507384167f9844865eae22cb36713d95c9280a93d81efa89e85657a3467b6f094916f5b3d704a47f2a262580d45a339901aafd4bfdc4ccccf6aae55902abb1cc64921b710b1d3a165bb13061304b526720ba8979010cf741ab46de0fff58be6d294fbef921cd4d7478b60916512de024aebf75c5edddc51292900a6c4668e01220b6a6f224fa27c0099f794640e626fb31218ad6c8217c6430f13119dec55ce4d22d9a05198e0e2397d3489903606c12334790559abf65620fd21abdcf557d0ac61d64da0a704bc5a9ba3eb9a481fa913b9b4fe96b9fc831b6998e0122028aac84efca18fe8826cdc7bc234b2a3317a1d2848e3b44a9edfcadb0558ddeb2caf495099568febee6637941befa9e5d0c6a7e6a17f32cc51be97d7d37080b4f860880d58d7111fad5b148b1d86b07e72213cab5b0b82cdb9c20ad6afc1ab2c00710cdb979dc3f2439dcbb7439496db89ec43bce22324bd3b6cac5dd6b6cdaed9235051f225090245b0f5bf2a93ad9bacba75b1b340a9195b20f4d404da68bbe729eaf6e51760de28370ae94f0e651d4f0e1b105b0e80609d816cefa6a70cd1bed75530eccf6bd47f9273ec0d5f7e0ee549dc5f55c73b3186f08d0738a70a9ec4ddf79675b77a939045d93df22128bf14001205102549fa8c10cd91375512619d806aae1c8a1d7a1ed3a335a9de15cc3fc3549826833d2a2144b7342f2b94d8ad7126de4da1d5168fde5a8970f0c5a4dd062c8f157b655efb1ed2568cb512528912b4bd858931f7479877a003f3b8d7704b0260596882f75e01977edc6c0b6d95077cb250baa47afac472ffcf715fe2adf46ea25ef4f681ee8f7f239acae08865a217533bb0bd300dd4e51f2fd42b44caa4d9cbb28b409d113b01db444c52418f94fd16a2f5eca4e53c3684c1a6bb7c6aeecc52e0a5e1976a76c81c758aa1175722a6833314a358357cffa7116381081304cece65df6a0f4ed52a4d8ae08d78710d9c1f487771b86319a91c9b950c6647b94994be923a7352d8b105110857f341a846416fa8e843f294bb4bccb5ce156d6ed54c5758e3420af3e4d9844c90f66d755da0252377996870becb213036a41887fa6bccbde529dba94e117127d92049072aa1f571900739201bf135aee680cda711698b1bc069497b5563444490df68e035cd4d1dd24be9356b74768c4e39f14ec2dc1f0d05aed8fc83459a0d48a241631798b872aea5fd2315cb6052ee4e27e17719f50c15590e8f601edf0c71076732388ab42a95c3e97bb35c9f9d471bd5f1b6c9a9838ff66ea664758fac9a8d4eb03119cca0281442a1bcae60b5d9518011fa61b92dc6155df418d0187835926c8f69cc5e7dc6157d27aa377057255dbaa4ca688045682460dae5c525e9d2b545026b29061df0560d90049e2adbabbeea3caf44bb74d6b22bdd63bb249be2646ccbbda64ffb4744885d44391ccdece3934c018ca736a22cf38e0b2890e8e53e483dd9da98a03b6f51f1f19ea298596a4a4569a6fff55b137c3f5494076b7b917bfb282c8cb73d451ee0854578e581c183db603a125b51f40a93d893d49de60c5c665112787add5433cb87b3ec1fe677b4505dbc7ab3275d430dff9e94fae51d7e21cd22f8959c1b24f5716098b207fb7056ea84b5a75badaa20422ac4fcc933658ff4e48981ea188710cad1fb4666db2c517f494fa26f63a45d38aef13e32ec873380cdb7ba47cace7ffc9e804773856cd28460a53ed32dc6275bb1861992b777aec944efb945a06fc59f1cc43fce88964ca27152c7075a840113d910296912ab4466f0be096437ef742ae33389c8635d3241e1d4f5ac78629d096c0be8368c96a6b2478f25140fc1fe18785ac0019416360b38a8251305e63da500f5c08b93be5863bfff86e5868be5f042a67d0a99559a36ec48efdb9183756f2e5a6cc8b6a6abd3d07bc9494aa1ae3ad8b31b33f190018d8333b08699ced6c05a96278e63d4438b1f7046cfaaa7b960b0ed251e1b59fe47840501749d2cd4610c559b3d29cb9201f39999e95512ba0a51c11539a517d32d65197d55fa21f099ba05326586f139d0f3443d16a857128031eb7616fd5e3287bd0d6e7b5f52ae02fa218797f9e98d60a50c9ad832f9456ae7a8c226a2919eeee23d6f853b137f153336f53501291f497f5f5dce738dd532d9a583f923567adb7b45fae3fc08e648fbb215cd1b1451e3f8b8d039e86944708e4e35fefe2158d5fe939b1830877626ba2f73d0c64fe7d897a5acdb103015ac8c2f52b8a166ab56d2c2baa27733a137050b69e09140239fd2b24df27956bb2f49b554b6abaaf4e69e4fe4131e81e9e252e2926cfa79b792304b3e408261c7a14d6cc6697b72d7fdc787a1dab4e6c2b12a2177e66070e65846ece825c9d5ad8b1dd22241af329714d5267e79c8f6de4c015474ed61aa627a7d23f612ce26ef452171f2ffa58ee4b44d98d460d9266efb6f0823d27caaae41496cc2a7fdda0f77fec8a2c3fcdc3364975b4e3053fa2747c9990f362fd61c754243e855e763709c0c42dc6f239ef5ae58ea3658c7e689c9b7a39198f9d14f5eee25c19d0957d519e07cea31a86bbde9f8c2375aa37ff8e9af94557b4910c996a3af08fdd22b8f8a01d366bbf9b6feb00d8fcbb6852b07301807b54dbc18ed95193c08e8d0531254f6f2dc7e96053a88fd8f6decdb7c3735976a4b90b15e5dd2a5496bfe926300131637b5fa1bdae3ed4f5d887e24f80b52943882d4d7558ce7de738caf86dfcb4d062e7daee9acad457976c5dae002e62f94eef59a8c92ed4d3b36e56c3c3df65b4d53ae0d9dfed93a127780939b317a15201a1e424f9b016b220020b500e1f3d63223c1b697460a3390bc5328b51819bbac36577c9ed26bda596ba93a938056367b3b530a6416b2ba7ad1b81adc0b578bbfd05baa08ed8f0317d6093d627d9ff48ee6dca982f55537474429ea6eafb5fdd154754b0c20dd8e03dbab6ddc5e33b8c3d2c8f4824684527c701307eb59a78a774f4ee01720e9d393e91a1c8f86a3dbd07b927bd09ea26481021df3d0bdceca182d42f9c872466c4e9acff9faab82d62b3dd3bffc724215fb66b55ecd307e353a7aec088e7955b0aa4d57668c2133404ab607317445e5bf521a43793f56484464c4b48cd7ca9a692d8d2ae2d28c47a2a560a760c6ae0ff91b8973038583bf801d77470742caa6ce4ee6c51f5c413265c1ca2ede620f133bce50be6e5e6d4670cb2efe084e1ded8894c6b04c97e47602365f27fae4dda1ffd10c701a18676f8f043843f05828f0f085c9771b03eaa520599c0d56bdbe4eddc9f942a75206bd334f4fd3600f7033ce985b840b2ec82218c20d59625b154c2e1fb3a09679df921602c216c7b288285b52e9519d77018f84063f96be4b775c9958c814582e3690afd52b78a81fd5612f3c1f7a228b2b4fda8c8f3fcb1d58e277fba3186cbdb03b592d08837175ec60c2ba5a686ac9a9e584cb88df093f3e60728ee11764c6d0e4ba70d5c1c4733199be6426a6b6b111d32b49c8df093f9c68f168eeabb0c82d4f3c471fae0186498e6aa000bfa6efd7ab369dabca3b8cf76e7d30484fd13009bd672642c2c93d98b16024750dabc48fe02f2dce2b20a5e3e38e7b6a7e56ad1ac1b384eb8a8be7a3a52737f02b35dd8ee48d708c7c4918c66aad80e1b1a18db4feb9f9767fba330ecc38710e92f5a9795aca1c83282564235643072a7452508cb6e2ea701ce4ae1ea91c562cdf4ba6b3a57d783ed936069f48f764c150e9a3e6acb6de74ec8b9767de3b5dd76aa853e247001a0bea1b7e7ec5233032b1c7e67722be4bd1692fad8ebe1e0eaacfac4f79c20a7896e5164a662d6eeffb218d96a2cb51c9220d315ed7cb5cdef368c7e7eea8f52a5c54d6e8ca1422fa871a9b32fe0929ccf3534109f7a840456dd07bbbb56e4895c8a3ddd83f0bf7f663278159ed6e9ecda1d5df5d52b790e85691383962848d51687c8ba72967564a1bb2d069f55e3951da0f5cc77d9b972e6a259dff7a7e2bd3b82970c40dc8b68c1d56f8f1aa6a81efe85a59b6cca6fb8df4f81d6c61cdbc9334452dbd70a2a132e48e6b7f7125f0fe796146c9e46c169da3a3371ebcf5a816795a02f1e6879ec50dc3b861edf31f13f99ea46f497d70c3e2916b74e08886e3d3c2911fd3da17b905916047755454a6e57d1325604da2973e5d2b0d70f8c171e0396885cd3c94854861e3aebbec4a5dc986f36acd4f249e13610646f2b8f0473b08f9d23701adc052cfc2f6060d587f1246c5dde5046f3f0e378dcfca6b9bea20cbb573a5dbcbe0c1358ebbf85a17a15c271acd5c0ffaf08b6b11f67c631cc15dfc3be8ae2d676cf03d877f1734f05b03c262d776c44059175643599d420b632f14edaf946908db8c427dadd7208b12a5832e7ad9b3e7ef3e938277917ad05630905b470d3138a2e1deb1c6accf404ebdf3ee2609615a196dad6fceed901400ff19053d8cf87f598d8cd4682c73a885b98f12776a6f0f6e210e5bce26043ef9d6f96bf1783145760bb745f0cad03c5e24df4bdd911f70640520e6f3cf69c9b774cbf011737e036ed8f896fefc47642e9c4eeac6f1f54581669f91ee4e134cb044fb520be33161da71bb37f1555bc87d6c688fd221a2c75cd1e4dd1c1693207ac421d24f6bedc91f6299b9565a7fc1c131b6ab7d848aae3ce37b28ebdd8bfd7d7eba216a6215a1c427fe8bcc7045f8a068b3be27bf3f32c807cd25fbf7402c4ed14eafdb6a5ba45f3e643f923b20d5819dea387f26132d74ab7524bb087245556839de10d8f21947126545661fa2d0eb3db4cac25da8d6d96aedd5a76574c137b0164ca952ab9922507c2da6a24e7343b4cdb5cfca82c75cb2a1995fa2da384c255e7c135bdaac67551368d247865531bf7fb9c5f12387750f3ae03245051329449cdcdd58f1cb9ca +MD = 8f95bfb5f6dd784b56f92c1587cf197cf33efe3c909625079a0619c2a4b70873 + +Len = 49312 +Msg = f3d17a63ebb98e04afbbdc5d1a58b2148d753252dcae54bc68ee2fa5883c74812ed83b9dc787020e622bf2e8159665b09ca0a6134477f7d70837d913f9bb879be3b2c4bf2df5d6350118d353ad3e1b81493226ef9ab4808337111116eaf7a2df59869d2fe6aa145fd3a90507aaf8dd71dc533a4ea80cf5a73ea460162598cc35da7d4f57ba4fc4762107126dd46bb2679c2a6b983428602b65174d7b70470e85acbf619e708cec61335982ecf240a24cd3e0403507b0c8f6f49261ad94ac6fb718735b6bd208960851c8dbebce1fb506c79c428de94b36f2333f2214596ef7b466c2c628a66cc953c37ca7d42eaef47ec087f708a2a1b1066a441a188635ae62ded3283cb55f8e2ad09c6d0edb98669c08c9e90ff95b411ae0c9d122e5ab9daac8cf0c0fc78aec75c250b6019d831349e689a008b721ee17def7ce983c76cb746bddf709a495eb1cdfc209153b18046ba1efa35da49ac1e3acf599e4543e40a910267392132793077017eeb27ffe40eb82257a74886fc16792ecba6cf5ac052fffd10712dde8ed1fbc7aed402fddcfb2d150adb72b48f78bd804b99ae66721f080073cf1ca82004a0d118f27145fbaa7d69bc48c55cb6938c5641fd5f1189cd3dbf09897a29ad471a9045bcff62a08b1d82c485dcda32154a2357484dc677fbf57b3a56c2ddb727dd97cdaa19de6c1ba212bc1915c7627c8b79e3e1170fbd19e3d79ebd933eae154e5a19203d03ceea9f7c1b590caed817d4cc807e3757d9a57d569f1447b7229e0159a0d5e59d39666a316aec2dfaf395aa9db5662b394e2d267ac3f16ce195307b190d31bfe55c1d86c51338f6265574616feb4f6f2e9b2f73b695db8f48766b300aa6aa0886777e99c9acd5f1db6e12bda59a807f92411ae99c9d490b5656acb4b115c57beb3c1807a1b029ad64be1f03e15bafd91ec08dfc8f42a08d95b6837daec31a66ae1a6854df95da856cb5e7d8a5a724082e99e721111ea87271066dff5646ff752992fe15e5f63f165df61ba064f593894c4db4fbc489974682d6fabe4a1a0b13f82637af5739edeca2ff18ff91df64e8e25c75e11c3c13964598883eeca4b3cfa444a39595d95d54f6216e4adebd1e83ab36b8857a7e93de33dbb4f5d07f9004888ec06d446d03fba20d8a168e273705e17ceb3d81f9ae8ad810ff777823165f4f652caac56d885d41340ae732a634cc3f9f8c8da505ba289cc8d6385607bd3c435836b2ab4340d65e155f316ea29e631fff2b0a665b4d341c63b7bcecc5fb282ee87d396896c4135322058984b4ea470d4c35184842de39b1823289cec666af4c867e838fc09880bafa7c6437459f0471e7395bbd64f3b606a4d5035e81763e36c2a9457369249b1fff4235d8dd2317f860b639582a1415863bfdce2e9fb051681d8be3d5e8feeedcb0f592fc042cee0b392a258b0ac5e4aac83b5eb1798b957b07a4e309d88de88bbfe4e01333031324e103c4d8af6faffeda1c1989979e56ca1162b791b06814a76cbec1b0e24c13dfe8e18bc35097e40cd1fea319823f31efbb73f60ff903ffaa57e19c47aa6e6c96c121eeddc6d50d3f40717fd3b2049356662712c72af8062ef1dbf459f3f089d3fa73627a5a8da800b613045abf651798c21a9279beaac48fdb2c5e6a4768f82205248b4b8448311ba331c510f3071b212fbcf97a3c92b75764413efb1d4e440b71d3cda3ec9b24ca887c569905313a7a3f9ccc5b1d465b103dc91a8f0e06d9fab0ffae25fbdd1fb7e6412d556e99e21e52186f9ee94c3c34c81275987229367a5306b1442aa47e4e3d3ebdc887a7ae8807de67b8190ab75f83bbd499e22be5f4c8975b710177cd080da38c84e8c0ec41d15d4929350868db0123bc15e69575049210115f08dd886fd84e1dfd1a9c47d64ef39874c5dbdd41b0f8909ee7ec4024301f8740b93c3d001d6cf6a395803dafc15fba2d33eb612e2398f6977e96f3de32f401d89b1a57434dae8b0ae2234a48e8f042b517bdb0fac9936292133bec9d1b5c358916fe63b3f9715fb578dbda3c1633a6aed9d93922235649013e31b6db49b676c4b56eeedca153f915c23079f3e9b87a7d02b4565ec1702e77681edf234e716a3e0ed25527c5d4cbbe66c7a60ac3fd22921ad5b4eb147f97671959c21faa3b74378bcf431fe7626c11def7eadb455033909ac3c1619cb2f852da890c0aed632953a4cc154f768b3eb28347c50fee7011fb0af5085cead8e5cd2413097f8896fe14f24f581103cdd812fc3da0f31fcb6233d3eff6275f5fd4387e9e6707ec3556fdfcdf981f1f98aca5c2502b3f59d098dd9e1b177b9a9638174271a11eb8cce8611cd341c41a7a40fd5e15a04f4d1e2a4ab21ce8a3fd3aa5fc2833243e5ecc26f0dae0d19a94f1298c27f4cc9d3a029b1dc85be64b27ab925998597ce14ec1773fcf7ee42d0f7bcad4c873fcc3d12c6fc9396e9cdb8a7781b20b6b17a2293b6d806313e5d5faa8a969b829bd3d830a2cdf9dab88cf961cf88809de80fb4ea87e652e36433fd6d649ad6f8c7a74c01a36c36db916b1fb0a6b6e0c3a55475f772e70995ca8c534a3203256f2d10428db2207121dd30cf9ce5eb69ae4e120ac4602152d0d7300848dc17b17134d562ddb833d23205a4b32e747043e84d111e5937dd561af3e6c56f4a1fa28544c053f89beb82986f8f736d3b8d95f9081957bce1633cfe867732c865622034c597bee64591a9db85b9b76223898767e9f25df744fb2d01f8acf65a132a52041f234ab09c6c6e81aee9261312ae43bc5663d9124aed51adb24bba2e3dbd607fbb2ca05d8ac6fa1451e9688af142ee7fb9367313da80cf891a1c254acc64732dff7a67f5f6e5751cd87f26cfa98eb3397931d204dbfed01d99e9e0b8a667b39554d44881c712061faa7408e820dab871fe1d9fec37ad7bf298789280b50e473f2303eb08e795d5a72f8fb5df406e25afb0c181d4d5d6f98f7d92e4a8dfa157b3d2d0f7923db60b3bcf9ad6bcf091237cf7e721c39dc0717cb1ff7e3a0e670d7acb001528b1bdd064f25b1285178cda5e3b5526c177b50c429d87073d29a98f1b745eecd02bf14ba8009c12449fa771dfe4d439d74bfbf268a8f228ba18af051e37b12594939ca59261237d006f2a10875a2c020b01db4a76390788b8c3c1980c7bc0677cd10405a77db8fcc26f5de1dd05252867819d3cf5ba8fd03f12276f6ba7545b8fce719471bd253791878809694e8754f3b389f26c9253a758ed28b4c62535a8d5702d7a778731d5759ff2b3b39b192db680e791632918b6093c0e8ca25c2bf756a07fde4144a37f769fe4054455a45cb8cefe4462e7a9a45ce71f2189b4fef01b47aee8585d44dc9d6fa627a3e5f08801871731f234cd1a59d6a49b0295753a2b4b03c24338dc95f1f8804258b1c55a9a917a809a784bc007f1e42296675a7e8e96c6918a3f33517a20ba7eec23eb7a8ad66f5ae31bec3d6e2129dccb9273634d0e3f80b6d910b941d09b02e6a2298fd93c3ee75485783a964cb9f42c7e89926f9db5b44e6d3c744df16cf7ce9549418fad2e4e751eb75e885bdd903e9463b2fc2a7258da65802ba76976842d66113ab51088b8ce4f70524b37ddd98b3acb6cfd9cbc92e228a2865522fed2897c4a1f534c954ce87e6dbde7c601f69ad9876879dddc8aef1e6a2c61024f096d3fbc9b6f4b9a334a15744865f2910ff3da604d78d41a6a88afa2c6d2f3b0505e172e5413f4e2947c7a4e9bcca2d44e1fa31ec40269bd57364310fbb1dc68cfe66c69f2462fb4980717c35d24be13d9a59e897420840f7b80427e7405a4c0af8ca6361e11e4576672529a36752d96d80d326806d90d56feee14b2d9d6350018d82d5b807afb142845959dd0c8d9a574e0c6852136ecdb08082174d12d767031536aa0bf8c5d3303094792d024a988d4a4c4a66e3d0ae6bf57d28e04114f572384c3cf834cf0fc2145cf42e192858622e4939494f84dbe4e628dc61b8aa8ff15f4a1ae76c49db6aa819775a91955e983259b173c6f9eaddbb1bbe6bea069ae30296d073efb4dabc64506f2d0c101f721f144f60ea9e6f98fcdc5b4945c7bad9cad8da083f9e6219b1a8483ff9272f924cff6fbb1ae0beb913d11f946c5c44480086b41eec75161548779eede958e36b44819ecce86f7cb0a89097c7be32dba04c06db4266c77b317154dfc14d13ef8f7e315920c3a90e1213a1407dcbf9e59525ffdc0d4f03f5e0c4a69754a4e6b85182852b514d0c074ffd79960116000678f6d822ca05c90ac5db133212715fb273d9f391d8d536dcecbe80250c1cf392de67064c131b754e32fcf14c8542dd8238fd1309120c88135aef6b69f941233f37df20a473009724cad2e7531789ee8c43545a0db7539e3f2d0881d153433d4017c7ade86445ad22ffc55bc253c7115515783f2c133ad7b4d58269f7a4639069e0c91474516b35cd447cc536c48ad45111f148c0c032d318d6e58a495752db01355bdad4e4e1bf882b41ca0ce435a624db37fd8848cc0edfc3ca7942f6616baa97e897867939b8e836bcc0d13d581534e3b4c3cf0776e97e0e79ad710c4fc0ba5af7a11598d3a061d95640002a7290059e00422196b3f17829abad50035e88d52121adeebe50048995a6ce364615a51b9c92ef1c8113c552a7b8df7c761e027f7ccf048e743f53c3fe16d1d01ab1c2eb4205211c3116c3a20b29da32cf2efc1db0884b8134e22cb5653ef16a12b787f940af8ead212d8acab687242f98d1a4447ec5f9439af8edb28d778360c8c752c9fb1a9e4bfbc869414c5923df4dc6b9683a008451f0e4155fb9692e509741c1d1e3dec6751b880dba4f087fae687e9a0d74d07348e11442218b8c48b628c743b58d64adb4faece67a012d9e396369c4a8b1be5c84d639e28c7649690dd7b856c97a24aa88245762253520e5fce908d7de631296826aa57514fc2915c43e9579921cc7436b22682f304d9b0d5543dc31f31b85b7edf8f7884fafb3c575b80f3ab407a50eda6f9f9c1face47aff1e64619b5d7047141b908a90e3720eaefe5608839d567362865e4767e5a59546d331f54b7b7aba914d10fa7d49dc37bc5c3a61a57044077fe124af9d8a5702c90cb55b7827fd88e207e96689456af74a7c0ce47e12f6319f1a9333250d6139f2257f0295d5813882c69a3d396896c3b5b84def91e805985c9d2a8092e16cb15ea7ef9948f6ae5ff023941d0215f803aa9b8e117571da9224e34af66b98c1ef6b1e977df61dcd55b689775477e0075d75b04dc89d52edb57487853313a6196aa3f3f72f21bd76c04272b4920f693d37c370fd937dddc788e7e459952f9bcbb995c29f3b505823062079cc443cf4120900782df09ba4e072eb9448bb13ec6142cd04f00106606abddcf93ee995131e67b9104f7e7b2ae109fc11d303751a629c96258a4eb888a65de49b7d008c68caca49e3e28b90f211b485e7790ca798582dadcede42eb137e5cb3bb171797479fb75f5d87a6717d1b19358fab453008ba8c504b5cac12a35b30e6e28dad5a4215a556079f5d913e659e7764fa3bb2cdf22f4a3595d8c3bab570daac511029fab51aca5c9a2f74a889cac811e65e846aa78cd8080a5772bc15932b63020eaaa4068e38d7288aa06dd014b420e03c4951333ba65d3ab6b44a142e45c100e7310082860e019afd88d10102a7ec884366343da2118f9764ecc709a8a620de487172a188c6669206a294751b200f4f025f662f56c629b0e0a0c59e78e91d0a90d09cfc1cfe607e2491faa4d4b8f39507b98970c020b617c854c82b357b10165ed2c1ea9922a9efd5bba638b5ef23fab1f8e0aa84bdbf2c7a9d413854d8a48210fc9405a3bf8d47a8a41979351f2af09f923e450af9af7f75ceb35e6d8e34be45b275c5c34195160bdfb71ee8e573172f19e4d8d960f171588da0f5d6086b5b6b9909b35e355beb7dc3116237be96cefef466ce66803fb2814eacb724d392c9f114a256fb273c388ce2cb1ba826f0987db656ae38d3e4b38e8608ead07c558a84b9e2191083d07da7d31683c0ab3af439d416e0c6e88ae4eec878397f6f2e3d84fd4b7244c7933b5d08b63307a7b07291d22a1ea71a9cc7008a6cfb783877238053411afe8f0ee21af80cb1e3c90b94444522b04ff684ea924049d95144eb0ce550654ba436ae127025ac88eb7ba6c99f81833e2818edcfe28ea13ba130d42a42891abcec5afb4ceb15f810953c0c83222bbe10d5de31d79fca059ade68dd3c2641e3c72d6860e1fa5d81f16786c7716ab845e0cfd2fba21886e98f6f796092ef3f52f2edeb89720c40cc93e8e841e4d79bbd267c73a5afeb59cf81eacf08cf2bb5ead8a450ef8dbf745a808fdd168e076a865a725cca6196971a0ac6f620516a6a1de0f734dd95827c9e4fc2e1bfad688923d537eac46798d36b928a7b51ca09b05e944d140e19e3ae2a4a2872a7f3799c385f339a3e1260a346a1bbbb1789a81d3f6b1c5aeb9b51ad5108371c59d0b90816310c0791f29c6b0dc0c151ec20b42542fdfb85e09a5aded522655b6fc5b5515ff317af6aa89abf536831cc4a1fcc5cdba5513197876dd718f1399c3452ed0c782decfe1274ea04aa108386bbe74f289bf9b3ca7ae3190a8f2d3a7b5208de9de149f270441818cf64524d1dac07bb1cf673a9dd054deb0dba0ede553347f88a4dcfdea259e295942495e4fda5019eae6d9b99c5c12832453c4e9bd672a0c955f037f800de64eee76d63f1b33165785173ea0a3128f2ad455845096b7a93cf858b0ae5284c2f833da134e9badb93c6aaabe7819bb74daa82c08a9d70d5a1899d70c10c652da3010b52913380fe2d182e780c8661f689c881f797cea2fe5a760233f2f453ed5fd6d513f165a23381db315ad18f10614775c75ff5236e5f1f23686709338115b6832f47ee06aaf6428e67e6cf124381f730c77c1b123f926ff0146c8c20593167847e70ef8ce7c0dfa0468e6d9667c3298806de82419312ed8abac6e46168cab35947216e6f052dc9cf31c435a209cf5efa19f9b308057ae851a008aa7d1c4c5a702dcbe3337f979159de2aafcb85e0f7f5554035fc031510c388a466ba0030ad7776f30660a388b6de8014346978b295085d548384188bc77eb91c81cea1022ccdc719107d3d8baacbec337c025ebea6b1a6b91436c239ace1d5f384116b4b68e1a2b0c9ef9a2b0db066eaef2ca45fbd7fa5c0609a7cc9117b53abf638eb76e2617e5c6b4e45b1202a84bcf65ef62039c0ff0d1115b49495c9b6b8509b9e1f19bbde7ead0fbce8b278ba2c3a0fa0babc33f7117e3f1636ca4b73ab1bbfff9e8f5f3789e7ba8c2c15499bbb22b55069b5374250308cfe29ff8f1ee6b02c8c9fa3da0e10a3c53fe5c90b9ddc38f661b7a549556ba075f8e8c5f31d1dd647c17d07aae6b589b624b05e4d3521e539714f1cf8a4a6768082fdbe15f292c6b83ac11b4045bad203e716456d060ecff4fb8a7ca3b4930b4318c3486633f839f465066f38afc34544f3820f19650551cf5ce4550909d3d72446e3d57255b08872bca7740289512befd68e1ba0e6a8031f31f7266718db72aa89da15b8dc5e3ab9be4eba2c66d72e7b1c851bb20f596c6b073d716c660c665c5e1069a84c43d93ff646b224ccd7a55d12116fbb53bbe6394911b67775f91a90302151df0a13ec8bd139ec7a2fd5292c73bd882b38221910743e7626cd24181cac775ebbba50dd13fb92d99b1452326f9de40590413e6d7714fe30d8d01fd7282f9ce0ccb15d336eb1ebfa05fed1597d1d2f5878e3636be3a7eb672c333ee069360ca890a3cb7802b09fde5953c4f6fb5dea0143b3239cdca980999f4b13cc465c40f695e61e23666448e6f3c7bfa350fcce909f151168c8a65838809c40e3460ed45b4b1cb7be003951c463af33d724662776d9ad9f683e0adcd49ebb28cdfeda31573eac3ab066cc54c7379e941adc269f3481d13003b35378ee480c3e04c72ad27adf1919a31089cc8fddfa82d6eeba804a262475d3bf2cc6f5fb2412f0359d4226aae7d6fe83fe138ec56772a3e29e9538451bd340b7d3418c46872a48d08e0aeb209cf53b4795e4349c59d60a3e4f288f5d2bcae344037301b8aa06471e999748eeace6d1c1ed9921b1363f627848c4afecd8df33da19c606aff119a3762c61c0539c3e6a8961bcd6a2a111552717f41a62a792aae0a2d4fbbb10d6c68dd314e20def6e5e04aec9b3ef1efe4ab139316f5d1c67c10e2b0a51587de028bc1a0b1e6c1af934da013a4a050448cbad39071f3aabc10e991ee0c8169cb852876dced5fca361776015a91972f5a3407173df9a99ea50fc47faf2a053f1b1dc864adab93e2d29ae3d6870a2c7677051b4863571e93c7a02614bba7acf117f1f2f3da938befcd441d8563b6660de4277dcfca335a726cec99b8d92c7b68072a2e8b2d4c4eda6d3cab78b63e4ddde9c1b5123a336624da1aa4d3d3617c8a33ef04946c7fe48cfbab15154849e9cccdfb4c7b7b0249905953d0cd6fedb640e269fd7660d356ecbeb8e4c6e08043c3dafec97154460b9d33bfa30e767931735dc0a099d1f1abe1008c9ff2488b62ab56f2b45b8fa8b535ae85a7feafacf609ed1b75658780eb55074ece0046114e6a8aff96a3f2cf4e3f14ce6405e42f0cecd8a2054349291e2f1d27fa5a +MD = 7836c49db6320eca9779a863e6f75489b7a2fd7461f5bb1c840d987725713aad + +Len = 50408 +Msg = 55fe75714696a81ea979276e91764fdae5ebd6cac19657061aa90a6da11cd2e9ea477ea2ceb048720e22a29a38ff33b3cfd61ce7a6387f608dc842012f9210543b9ea1c4c2c43c0de1c17af09f8b4c2b18e23fa8dc28fff592721af4e1df07d49029673feb798ad5698035da8dc3a32b0a36c9772a0ddfab70cf1bae7dacc04f3010577c11783cb4f0855dbec94e3f9cebfb42bb5990256c7106cc98cba041ae647cfae1fc695a91bcf879061cd62864045830db3158db1fdb40b618956494da7495d6d773f2ea53160212194e00676d9d761d417a0e08acf7a45f97a19fc1baa88275c740bef6e446cbaf5f2776039dfe7d9054fc59b5fa0d5b517eb8face35476c5f172973852b947ad8406fe004de6e94127c7fe2e9f3658c1433a21dc5359b7a1a31f7baa01048371624ede5731737e32a21ca50ac7e46602e2027afada1ead5307b723a4e7ba92cef736a2e57309f9360aba64c0683faff29ab0f598f607da4295f619c9754007eed95ae63b810efcc3c83db7e00ebc7908d3e21c2725c9c108b438d878383955898f3812b9ea16eb5470f318da19cf63be04026925e7c8f41e091bfa41bf1b0e077f3ab2e12ca667708b87022f27fce2aac19e7735ca89d5eafb0bd9b6684993e12fef3151b731d3907e65fe4f97c99827830290b72c80f8f81084f136c25979bf17d2288c284dc24cd02c77cc07c9d6ecdefb702abc52dfedd013fb436bdf41f9dd6002e0ee6eb60e17270914f65241432bd58010c853fd04b035427cb32f6f19d7355b0077f9214cba022ccac21749c2f02d3b09ff18d3053765514346ee63a79bae9b5b538196914f2a5d5e196d52f4c27f1b66bf15f447ec20b2277570c21ba1584e621fac78643d2c053f6ae91f512927abc786efc34534f3efa9ed7afcfe7ebedeb52abe693e0a73deef14fef1508ac3669cf4ead295b86b544b0d5186b88a3ed6b5034bcba74d9e24fdc6336b7b7ddec66777bba4b1ccd3aa7b638901e25a74c0f247e922186d0781ebed1af05a58e665a78db6bc1208d93cbb7ea5d10475ed27ed570aff09ef3c602a081a2245c256aeedb5807b4ef2f8959bbd2c768753046606bf15d5044ac96a4895b563f640cc1caa7d9d84b0f19e4f9cbd8184f3885725fefebe2690163aeac8147157c43a93395e44524af0ab56c52ede496ec17c51c21684587625c7ed7c1912d2503836687f79a863407686ae90d2bde8b689a580d4edee79463de66d98bbff5cffdabaa879ad283507caf9f22d18dae3dea49a70d8f59b951960d837cb415875b9244dcf9239424c03669bee0471a3df59bad18e48ce2a20521743d88e19bcb11e9d566a63de651cb5c1d2eeb17da71faa24d1459ec808dfa2c98fdc4bc58aa392be6af568ed2f2ba1654570be8d5339628b10435573c5f76e00329f9ed540a1a7f001fd0be5fefd58e95a10862146c0f55624e40771d01c2643c2bef1c97d5fd0eaa1ede76953064e96874a92e9e02ae50e75c42f12b5b26e1cb696ef02af12a006c14465e7d9eaf525538b7f47bdfbb42c89403706e55e97f394d3e111448e97cce69d11d1e1ffeefe555fb5bb4e97e528e604a9aefd855650c3d26285dc082aa5985475c819c98e89f333a0c500a3ea9c027e117b5cab0bccfa3f0dd0e433cb394d170c2acfec6660c3a3faf5729456ee6508e90c81543ab07e662d72db861bf07b314f8a92bd091b2d3d1ebd22dd9ca89451aad319f565b3e6e45bfc50637f53b94faa5800dfe901b64b768c80043e5306d4d15f75231f4fba3603cdb17077eb7ddeb72378b978ccf57bacf4189cbe66330ee7122141b9dc7ed7df779d2188203f4af06d88ce5ac5412a2c845b0b8f6aaf6c768bbcf5e7e29b46297a61fb428a8430e0b6afa2e1934ff37fadd5d543c8e279ea3c86a40c0a960d8c56be621982d30d026f6bcbbfaf784400e1078e5e1962b3cc954cd0a8bcf59a729cf0fa8fb1a25bc0183bad478230b87abe7e9b40c4b6b698364e003062407976ada839179f8899b4419dcc1bb42fbd27a689809e6334dec79028b755a2fd37031942824394ec43597c00ac9eadbbcea239d6e2c97d83a8f5235b6a6ae7823f92506e7a964a43e52a0812c352d77b6974d8e516446c29b18b70649df2b8860fbef37a96721835eba0a632a4dae9d51a0a0422afa1b77d6504f7b2c68f9e6f33f362f54a799718e347b6fec5992d5f5cfc6c1e2363f8155ffc39f47893f1a428aa3f7d1b1f3f8368a9bac5aa104a80aea64135f60da687eedba77828a26adb7a7de9609cd58a0bc8214225d6d2a9cf8ba25418bc013b2bbe1dd0dc6b2d526b95c8e14e343f0f089e58bd9db042c3b2707ae514d9e13e973a5d468f94b740daf735b7a465ae270057aabdabdaf330dff99aa4e8c4102940dff4690059b2deb03b2efcf1c5b57a8980b192cecb66799e937bf3d32f2073cf3b8db8ed0eb26471ce2ef1b4c8e7621ab5e80d74f61ef674bab952826f94a688c983c69448287a962cb0666be3b6862a43d86e4cdf7f3ff8ebbd516509ef4a04066112948aa79993d34dab95aaa54f3ed6ed35a50c29dea1b30271098292d6d77ec01d7c3a924a015e6131b0823635decb91041bf0813af59d1321de6e11c5599f0b5799fc8af4552aa5a95b0edbd270be8e5a101127dd6af689f45220feae20e3bd51ac34f42115c46572e3a5189d9b1c1f983002804e787bb159034fbbe9c3f9508bf1786078b9c82b1ee8e97f0fc450ef5eea392d06b48943d0704edc10a92c5f67283b4233b782810dd94071917319580ebd29708ea59b9bfb17b2d1bb47095483aef23c1a959fe1e0435e82cb2dc1f43817580d4ea24f242977f02f32242cba6204319075ea8ce806a57845355ae73e6b875955df510096ebff9b671dd6e30b72a67df1de1cb5ee117e321b4890f5b1098b81ecb9285c4ed33d28fbf6c5e8c246243bd2cba2c76e714c20877d5679d692a2763464aebed64fbf0d6025778a794d0c0fa5c7231e03a68da81c5c21e029a75aaacf5a3ab4a7e1d3dd265272648b07bc4e0d4904463831b15d3c6d79c524b812a4000272ba4e1a3a0cd0d63cf39206b38b5bd9cccc66a365a48a19c4a5523578d68905ed4c23594000d2593da408ba805c23e1e31d296c090267f998ed2cbfebd6ccdcf0e6e23f947dbd33fb1269a3b114f809fda4fb0c1a1b68757d193eb7ea094de02426e52d95c7f3ff0bbb2f42b46a4aba731055f427440e25d7c5e2ae02027eb7fd68b6c3c2741932d60ae41808b08e6bc9dbb4c49f10cb733f5fc302b246f1ecf348d162b9069f47f08e02b42c7c55968863b1fe100612f62a635a66793b29d79c23cfaac7f3e8c6d1b12587ae4212d32544b7f0f89897271f5d0349d57399005ea60c0cadc09837f010a7030c9658aa270b414dd74caa7e84c9781d4574c20fb13c0108a8f12013d23911c6a5ed89741403d8752a96df650125036147b3374e4a42590f680a12d30e76e04328bc47d962db0807611b9882fafc4fa65ab35b6480757eb1598fe2fdfb66bcf8f386f632aa0d4a65292f885108bbb76d0cf9b0bada31ec7efbd7130d2f94e258a4d227283ff70a2ed157015780efd525ccfae9d9de042cd8dd841589216e0b029b225d22bb34d1b50836b5ef1a051351293b3949f268aa4f6d2b7cea677e9157650c0aaaa2533ba81c22f8b02a980c7f804f5183cddbff432911bbb968231ff790d3b2286bce9278abc04c2349153b11908bb4ffa6da9674affb546eba17f1439d2dd6449df39097257342b0dc08f9b7a884c64643f10a34503cc982c3b9cfcbe88f0957af8e909427d06f0179eff2c256df17dffb9bc502b84a9d8e1b751601015bae0a26ec2ce0115c136da946a0d219df2c355447517056c952f937f64e83863846b48a98c01b707ae28dd0897e67602975ded4902a0daa2d6c5c9fa9d3b3d58955ef4110f496d3b15eba8634f5e2d8328734f2e2c92b20eb4c10b90c60227de37e22f0e124f2a983eaac30e5a1d4c07ec2f045dbb959598794be1a9a5e4fedcb01f7f085fbaf608708bb76f80ccde782cb7933c77538c286b8dd4ad048acb39493c6f67bc33d973f4b60af08913e8bd3033843527719ea6d4ac6b04a99b96df4a618493f262dcbf135447f83c9974be40cc60ae959ad4fafad32f175cc065b5fbb848f4c9ee06d5128df3ee62078963a4a9ad118774340c2628a64ce7a142a3a36642f20880609d3c88983cc3043094a3f4f6c5c6a7c9c49fd35a0c11e534918c96faf679bff0ffd86ebd492739703986d2c0321adc980baffdd3c0a1354467fc6ef966e254c0e42d66eb7d564d513a966d95c04abbabc79cce97ce6038780d3c16c6ac0ce6d8328499a94017e9db7f18edfcd720eb09e2af6d30a01697da6c94b7e92ebf1e3ed3252f7ffa34b517f0577a7edf6215ba423003269c8af9726a4b79eb56c2a4fcad584ff51373580c769a3aa240d9e0c7d167b7ff2c860746f0ab83538bdf1f1aaa652194f39d7bc2f72858f0624df537759bb245b7d06961e7fafea934dc379eb193cee3037ac5425c4afaf0ae86fb1218161b7fa531c6c835811176bb829592a92c7e6ba9d1df938e48492b8a4b9b60a11e1b365d71c685c488e5408799e1fd7c7658b24e6b70bd746a6c285f657d2af8fcdaf14958129e7a57a19200e9c2e811ba85425b1121c9f5f88b6f969d487805f87f38d0ae521e41356ef18e39e15a503f2da336899abefb39d08995b9a450b05933935a3a2d0a006c74e79953e65b214f765b499b82a46d7661fdc6813bbce1691d8b4fc54c6c9f42dafb89fd78f36c308bf4fb11828432f7665390bfb2c3806e66a71817574b0500c9b6c6003f2b192b92f6b3b24165340408145a39b46d75b135701bf8f5b01ced689eb824e50a1088b4e7db45684f5ae56ec78eb8e7c3a87ab36dc130cea2cb53e03dc8300f993a8f1851da939e4a8ce1c2f49304f3cc0111072672868b29fa78581b5cee67df7d88e7bb18648c5fb2412923d1e5819169bd5b2397c4d44d91a5f9bede2495e4c2ba48aefd7fd995b54ecdddb0233918c6c7d4ed96b050177922ebb0b49b41b0f26e64b1f1ae2ef57b4dd6a99885c26b02779c0bd913a88e98375579481b124cf3ec624c5cb73385ed896c10f1d5c5920315db05c6b484bbd72c5f9f006cb0bfaf7c6b07a6638f4ff349b59923d9e993b3e9b864c75d8aa41e4833ac4655c4110c66a76b377aeb5b76d4dccc965ad778f83b5cae43d4655356d5f628819ff64af4f13dff77c4eeaf5c730731b21f3649bc52ef6ea2e2bbd06519d3991812ed734e66564bcf0941558f6e5f51e0f2af0ce67798294b4f3521355df08975765294020d19d8a5108b55f50d0bb38699eacb5ef27f69a8e37a50ade8757fff93ccb3f72eaf2d62a275b5789833df0edd8e8d0c0bcdb520663365b4048b041e3104da17113fd36f87a77fff56015ede86435bd80aaa961b9f076634f75a9f3a17a11049fef2503287c8bb71909bb7605cb33caa363d9301579f5d140a09d8bb0e4c5e753cf02e1569806fb88e2972fa2784386ad8af343b56a2513c85c0370adeadca831460f47ff779a5bb98d41816ae5e57003827012f64b94b93b0a9458d4f6b5f5cce6a2bd8f7586462f6c3301bbaeaa2549ece8346498c5203d2e989ad282f22e6b2385a8732c8b595ef20427113cf204e52cc41e8ccc26e7435ab8bd233a01d0a07ef09f6706f9e3ccc10d68081b6d9d79b48c37eb703a7cc1f15d465366757b117bac18c79f52a3fd6bd75afcc47d6d5c36a926ed0f906f4d94febccfa2bd8c128bf08b114035e86524fa668bb291e32105c3522e04a92d4ab8258714795a924832669cd0b4144fa8beef2131705b9d4cb433400ae9e5454dcd6a4bae54dd1c0701869482456e381c8c0e016a882b0a53b4a1872049e525db67256119bfa587f36bd928b28eb430450f0f8da36490a8baa9668dfa8f196d57f7ff6dd324447471f3c6bfcdea76d6c6ca4c2c78901cf705e52acaf634028a680240d8673d5a50271bd7c041033689f6405c7466853083ba0a46d49fd330eb6018a227423527a97756a4e0c84363c87803a8ebd9de7bcd4b8b431173e7152ef4ad8bd0e0d66ceee7369687a0359f20b086b9f95ee64f323eeab8380eea3fc37a23766bef8b7aaefb3e252b75544911243c283372473b50f8ab1e8ecd470127853cfa6ecabed15827cfe952c429e21867a64c10907bb0b82d3edeac3b9819e99a3c704feefb1188f18e4b840920fab4ef57ce1755ee5fc641288106e657da782db48095d8cabbafecdbe435a0c413552fc306ce2f398919b90aae253a00d361b42793b714a8203b7e4b1bfe47ad9ca7ad7a8e9b88c7dd1109279e9db32d9524c228325a2f1defba2a4e7b345a2826faecd0de05ef23bc4ab6320ac6ee28803fdc18d4c594869aba85788a7e54ce22ed62787d93eed7b72554ac5b47579c3511669c03afc18c81aaf43bb232c42a10eda2e3d5dbf44e5e4f48e918756c031457f604476f529a650a0b2a9b0824b6818a22758f349c120217178abaf7b7c7be620ee4088aa43a95664ea7ad54f2edf52165dff24442ad531b5503bb44a78483de15ddcf9852e7933e134551bfbb4adc61f175b771848ab1da75e6b1c2d7b4150abf3424fecb1bfef01d76209eea57a7ca39c94742ee34bec2ee961718b4c0e2964fa971549962393ab1dcb2790c9f07a8b35d1a3ecc35ca6343b453accb456d0f6b806d003a34c26c74cb5fd4ae7b5cac02a3a8dbbaf8754a09a4000577bc14b4776b40a82a1e3b03cad4a1482c9717429c3f9b9047074fc5a4f7a4a9669f9a4417bcc4a2e578f3af488b2f3a135cd7ead4833af2dcecaa949a11aa0f045a3e3cb1174196f8ff9cad625152210f470f2360013f8a091326057da488acdd96a0ecc7ed4fead0fc96bcacb9a2a36ce04d7ab34be1bc381532b6b412e9195ebf32f2e0b168150a0a622b8c369927a8a2e36f32c5fa00066d6116d1df13cb144e94dd8005f2ac00a38f98856abe246f29816f8301c10be07621b46b7bc1487acf271b2a5da82651528f722c988a301ccea7fa1881df2642da04fdc57b5a080ebb6a2a441ac10a8891e246f67275c12e1cb7ad67b8bce5ca037b71844046804c8dfe8961e005cef2dc1895577b195e3f9e40d7f528e2d0d28d05be2c8d2f47c0c124b7082fcefa3caba2dbd404dd6dbdcdd4385564d95df8d1341232947cd4e7ff9d41ab6c8502d28b019900b24a862515d21ceccf1913a96a773c1b08a7ae4e93c8a7c028d07f30f4c53b4205e92e0210cb143ffa1a6860d35f9a6a5c483a51283767fad739d5f4736e513c7221dbd1494facc36865e2bb864d9b8501c71f8c2759e0901a199d89715d6944898cf62f29a0452b8c840915fdd1de1f8bbca47c0ba0c03444083c5c9922f1eeae9333583c9d8bbce8ed421cc48cd08e7c819f9d5fbc856bf77e490a354f79bf73dce9f8fc67df1c000a341c64cef15636ce376c9e0d8e8ba6f43a0ee0436f2b5bb2a09dd3cfbdad648345a14918defb5cfb225641046a37d4f285d7149f50b6d8cced936d15b60588b0fd57fc0ae8025180d706d341a6e4f401b2ff6cc3bce66d74279622da46a8df4bd18cf815baffa707dbeaef35a307a6aa57e43341023eac50f4f29f9dedfbea8c58dcc7b9b647efe8978edf610d344f44db2222a7cf23f7ebcc553dd11a933d2af9b3d577687f7ebb904f3e4433ef6079c3358568823ae29d141a78046af349804a9ecbcf401ae5e95cb8866fc59d7ca196ab05f3b9e7fefd62dee8b85d909224b219f531eb8eb80a6357324420c31664cbdf1ee9e4bfaf754f0f0a5d40ff9990c6a1fc4fb95f67873ab7ec51d3f4a02bd95e2aab712676ad3f275773d394d25d0ec34b69380166f84936ff295da6cc7f55b4d3c90dc0d6fd99b45a9c73f4eed1d0fa5d1ef62948d62560f52b3c5dddd7b75f84b318f352ff05327e27a09411a7e3b3cbe1621b8f9945d268e7ee9e56bd74dab80a01527d19f82e5ca5f8071d378d8bf2510a7cadca20f7c4dff2cce9992493083e7542b7e6f90450a7d8a2541954ef7ade6da125d15d3d8383c77de9133d34efb0e36895ee6e5104add10a48c5c05acff9fa4d8a5741304f63fb35f784252cc901ba288988ee90d3185fb37db5566a6c343ec63db4736c63010c69779472e73eb187f7155ef0506687f31265609d7aca0db9afc2817a4e78eb59acfb9cbce0bb40cb78cbc8f9fc197d39cb927ffc1883e6e95ebb46ac42fb738154e63569c5c92003121f6f821086587233873bf8d004604c778a6cb006554a0215e9d6eff2d2efbd5782ab2f1a17aa5adea65d2a1dd60a517eb27bfbf530cf6a5458f9d5f4730058bd9814379547f34241822bf67e6335a6d8b5ed06abf8841884c636a25733f263b8b23351feb1c3d6f0ad50e45e5682ab1a1748567727089b4bb3e5db7770367cdd737104d2cf8c77608a448a5a0a61ecb7590661f346bd710da4aff7e1b26cf2905e55a6ae1bcda215ab7f4eee1963da44fdbfcfacc213284f0afd7e2294d67385d579dded00f7e5847379a886ee08f22777dce61043ba2f847956e4c672236e026b26010c29abc03184cc3db0f2b1c2e349d65baa2612f5425234a229f4d440aaa212c6a7e059b0a161df64f8e1fedb1d063476e6f3ae280d381f5cd9776999f2fca8853cef7245586d3bb4cb265099191f8fee6336fc26599d8f7b618443e85fed5fc3378185eccb3959a3a42a578b8c0841289b6a7d7e9be50d644e95f3aa65f6b107345115158e48c1c810786430ca42e09bebf8b2af58c101cded47095e899b44d79fd8a05df60e0c889c9b17177871f6def18c3c272494150ee9f1f5735f6d73aae68 +MD = f65f672462adca962f14b2a1ad3d3f4b21c2f86b929fd1e0ca5566bd13cf2b14 + +Len = 51504 +Msg = e2215cb6b501eea3429d96816a2352a2470e42fb07ab14ccfbd6bf84eb0574dfad89d151f51059a76f6d21ec0b9ccb899900b8b195f07afc447288520046360bcf27e4543b4d75d55e3603913da6d00d57ed80b47d68867ae34addc0789cf8777383fb892ec22b74387fa338a64a4a74a95b01cc661b218d01e72494fb10a26cbf2680b6777664ce24d16babee8f1f07b8d4a3c0f812317fc6cfc79733a91c30db97d9a4be7106294bb3c2b1be7e380eacdfce5adc549f96598c2c91c56f4e0bf05e701baabcfaced5ad1011be1d7dd1ad05ea60bae9541be3a6bd4a5c6a21472604abe3e35e2905e947be949576d697e1cc5f9b39da37558ba3e0899ea37b2ba410f4c3125f7a16af0a3202eb912caa73bf96d3022e2f8e7a0dff18332146fe930ab284dfc8d448507dd5236a7465508963f5d0bded260cd76b81bdc4ec68091a7a4ceef1a021e4f4290fbeb8296bd24c42e55911200319cb46ce41f90dcb9462e92cc9f1ef4832c294499d7db82478e3e3cf38a6ceaefb7e254e6b798b55e693dfb9dd86bd317ae348e98662277a8976ce193325ff0efa17906905ed6ef049d4e25bf25913c4047fcd59420e80544f2f8c2d1336bb0d60bf0f87d5fcbf83034d7c7acf11f8e917bda9ff992bcb991034a4719f800b92739d2b10a54f85f55d27347e3d577588fdc56645525e0e3315ad9e4fa1acf6867dda6b6c3b8dc8309f8a92d004d39189fcc08b9237515309a6c3032edf6185cfc49d58035f5f901b119d1fd6ec2c54d45dd6a14d0eaca1030a9d59752348bf56910f783ddb6de69efb8962f9bd0bc651682e2fe0a01601098b652b8e3309ac032b575683765ed1a1a475e4a13e17f0e964f1bdb2b53879036f40fee0d74b54bfdc9f773bf7db5a0c558a2b3738f9d9829b46d42b15ba14d9ff585cd3d9b6c070ea0c65cf278b88c756f0c121735889055356fbb38743d77483d5cccf00f3f7ff9ec8a7a5ce1763bbefce2ec9b7dd095bd548bab2d47bccba43dfd73c13aa015540fbc527b426f3ce684cf895cc30606a69459990c40cfa94869c0382db82e75818cc47bba06141e90894a9ef79f8961c567521b51f9b69ea9637db092024b0f26d64b6cb5b6f54f518cbc83e87ddb458e6ffd98aadd322a5b9d6e43aa938640a89eb9abeaefa34d8e01cdeeabf89c1055f0c497536592cab38a2a87b40650c88b28879fc5ea7ea7ca8ad725be6a1c50d0ac3fadf81d88fe65bc2ae35ab53ae533163dded36207dc7b8a60cf8c7d0c9572f4d733157f6543d695e7ed1b3ab55554ea54df9fd0df5a35730352b29bcd3cb16d13cd1805b8297aca0a1b520150675507652887a155bf7cf73735cd30dee510678de29c4b021de6aae9e4bba38cb9b81fd730276e1b6ab669651f18e6c1fd1496ae09feb9d3af9ecb0fdfa49bdabaf276338cfb9190ea665c154532281703325ceca9dbcc9d3d07acf4729944baf9a8bcf29570b646bd2141e06ea57f3e85fe3cc258a00ddf74b5b320342648bdd42f56acf02346ad616bad2ee1ef56a8f3eca8e78ce7f80ab52d903b9ac81253f90ac5cb139fbd4565aa0089458c3906eb624394bd1015bf9cd3a67f1cfb3c0dd6cfacc57622a4af4860fe681fe8a0a8cb037f827fa4e16e8a4c7883413c204bdbf25e24ae78773b7834d943c7a1283f2154df192b32d5880bfc88e09e0759be96f76c8112edbf8a737a23b4d3223a1a6cbac4c166468c9ca0685a1f99e952a696635a334a1ed80cc8b58033d90850cb2bc9c323b73c512cd6245e78bb5ea5c438aaa9e3ca687b42f67b61393faff6d1dce67cb88490ddb92b9528b478d3cd681c51ddeb0a76f3cd7b40394d7da5b6cf0eb543e854e07cb1ff5f2b3b58e53432bfed58e180b6ebfcc5888ad92975fb032faaab4baea7d8b7efc6e885e21f749471d1bd4fd3a4ce6173d8d874b99d4e2ebe3b254b08635c3b7b80e31c9acef90df0937d8e59cd158bf4959498a4881a9248eb447ee88f91ad00f19d67e9904c1faac71c35b99c5bdcc66361cd70c30aee4e3f7b4fc5a8f38d3ebd9a1064efe84a1ed10bde499efbf477b6a28bb4da79933cac5c46362bfc6c73394b8e835a580dbb45eed0a04180437703e94bd73af11192b649eaa0a536cb5cf9343acb4c05eb0e9a17c54420834a42dfa8966e610be9fee1d6c59b911d1a4a61e6bdb3519c5287522924abb87f89699e62e3c0e9249ccfb3853f9d6c39e9ca27c57fc1f765e4c3e295575d75df8169e4aacc954fd5aa93afd7d11cb2f7aa6aaf73197daa0d1232dfef05cff51db2b236d2a951e18983c93b41229ff1e0ec8a7d51e34ce5fc5b52ae88988992d49de1198d126d5acac8fefa439c9da57020c7f5f485c637ae30b1e30497f0fb7ec364e13c906e2813daa34161b7ac4a4fd7a1bddd79601bbd22cef1f57cbc7b8693bc32639bdab5ff4934c52e0c325cba7196397f36b10e83a2087fbdcf32bf76bf5581949d19a0e79541da0af2d6595a9f13fd4c262f8cac5f0cc0cff80a13e986df63323cc165573f59148b03feccaab0a98de6f03212919a3a89ce9f9935398aa83bdec3686fe8b7c8f910d812332546d54fb20d6f3cdde4102f1c1e668ff14b4e8ffcf9554cf68f3fec5eb7b70944d215d74fe64d77dbdd3c154b0d0880ab4940e41f273e791b361c82a75b63cba3d2e9991303433035d60cf0dde3e5b3c1f51dccb7d57a70b13cfd408d0b9f06acd9df299dece702568f0136472b8495dfef339e499cafc0731440aa9270cf26da5754fd632bbf7ac838c75a194c6ba34f8830fd66e534e4bb4c85254a038ac8b6cbe978e52822f5f583add0b6ef1168ab60745e7237a05a14563945063c4848bcb80b40a66ab7f088f0433eb25c0c527df8ac360e0c789cf8c1eb8e69938e43769c48d9297bf516dd0f25f89e4bc2fd31c117189cfc3439d3000a65e6a1d3355ef910a6d0c450c58c20b4a2dd16bbc5615a637a915f599d5da124700fdf9d9ae04f013e5efc5178f0d57da1f1457d5777150fd09dde5f43d315b81137b573e0a51e8904065c7dcda5adef8a6d608e0ffd918abf24d1cbd9fdee33de10bbcca317d8169c798d4c20351a98d0c3f0547b7f40429aa8d215ac188b264b0d6b2e5ea31c387c2b07331d099bf7f9776d670646b1f5f79c67c356bd8d1dcc904c0f7fe15b7d079d42d910bdb28b890a403c5d1e56e35a920b6b46775478f74bc6f6836d0642d332d894b7abeed1e3ff014acc50bfb9481c256417c091c63f92645a0580bd3863ae30fc5e6eb159beb83928f0785cd6248d5e443713958429f6bcc072c6d0ac4d41d47681609a816dd8405d560faec894780e9220faf0413afb38c057c9f13cd4a03ba9cd4c1af765e1cf3e6981261efc6ecec451e1328be71250c030e48f68be4bfefcae6bb30a5b473e62a7776337e0c407516660cca2a2dead467ab11b9e5e9766e58159e368a27b06509c5ce6a1c63a50cfcae43f4412b296c9b1ba266c2a353c0b02912c60d01fcf9eb49c10fb311433a5fc060adeab20b5d0526a2040c587b6c38eac1ea16887e2838ccf8282a5f4186a7620afe0d0cb82d0f94ba9caa5119fa5a2050a98d065f7d58161bc06995c8793d5de9ed937f5767202c913584d653f37d926a0c5ac1c67db3efd1dc58fbff998778a685625411909fb7d0d7822e51de0809b5196602dcb2b11fc286dfd90f71ee7de9cb63d30d32f6fe1e8a8ca33c43654dd9da9710c8a3bb6d97c5e6761f86db3259c97e4374d48cc624578a7b3caafb267f57d635b3d837a2f8a2551b5862b4619f869cee6dffc9da894564ff789c325c4f970cb7c5da8f868c231410e28ce2d0630aa31a213a1501f65d027719a072b6f0a21fdf253029e1fc530b9de48cce484c5e7d10b70dd80213a64c2b463f23fd0b80f9f5fc626f7bef37230a86ebdf900289101858007aa687282b622800adf9473a804171f9c71c0ed9429ef2307c722e9346792c9c63b5fbeb8566e76b79724dd69e0aad7c9b8b014051a24de30fb47885057d5a68fcf716f8447daa08ed30c45f3a9ad87352916f74395ec28cff1f8766376a0bedab3381564ef0996072fa55da3b37196654f6017ee01a76b4b47b043ec38966b1d933e30d8d07defa719aa8518b2a98de09825e65301e94e2969096159122943eefbde526e7099e5e50d664cb11bb7e63d9fc2e3110b1429f0d25e6f4897dbc1c539a2fa84640041579773151b531f37b2c2e1bea671da87281049be293e107d16f92689b91f235a65245b9ea5fd61eb06adecb991fa8f0e35af35ee897989de7aa6c3807b0685c994507a19ef7f02889fbd5e6461f9b3f7a00bbd70d7de8a5e66bf249f58aea9f77b887947565c8388e47db15f74f3ec0c0db24ad592d1a47541cea406c09bf26c7158b387891a67748b7b800b697d8983c53f589d48f75adbb241dc87514311a11c3dc35ae64d10d3eb1334e8adfb3f277d1f812878c43fca2eb5387179386a3de2a423420c49321f89e15a77c0f15f4f7bbf3f1790aca5f92d953255a6f07e8b4b284ddd49a32dbffe726b5920f47c6467bafcdb2f254fc1256e74b468efc121ec36cd7d4cff764daf22e1dd6c79191ec77f44f3b2d27fbaacad5a1e4d9ad48a1c5c0cb28492ae41129f58a50203a7d6f19891f1ba28b85e29de6ce3b3861b3c7204960d6f213822df342a207008cb159c838e45a38cac24337e27b5394627b173ccf3fe8b1fa67b5b7df0d0351cd5631ebc74601d92bd95400914f35d3f6c719821a0f656d26bb31df92744cf9469380ecffef176cf5f29d61bbf3e8df66bf5658f1795610e0a52ad2247febe23f91cd32a884a4d87137a7c0270e749efa8d55271d25c281704d27f85dd5e7f2ff77a0258ab0b107e7cef9869e49e2faf9569e5867bab1a81edcb0b9041f4813d06e812d6c1944e09edf1c1ce84c39daad45ba5194e12c6d327a4d7de304162cf89ef9b21867684be09396e8cdbe81255c7f307c6f4139b8f34e87acc02d5a24c02e8f1c54432230f311f1541547c3c54f2f8840bf83e371aa81e5ae64411ce57047ccd3e9557c772082b4c7879006a1ce7b4b044b4e2f809f3af0eb97e962565010373f9f447d09af0e68a9ec4152a1208b0032dc4b27cd1aa22ecc20cd365fa8b258c93db82dcce8dc94610c02afad8f882f313a21d24163e129b7c9949fe8bf54b7d78d5b95a91315c059af7926ad619a61692d7938c2c11e691558e7a6d9de1fddd355d2bc8877e075f89d51be89dfe81c427dfb62397e82744f966d511a4d3b51235ec8ab525d6639a69d308029519beb24f14e578fe034d4cb4bcfaa9454cf9b3170e368ed0dcf97cb79bf7276ffda5377531b1faa305c11f33fb4b92d3b03446353cbfd43cf4214cff7a59e5630cedea36909c374b524b12e39c585ce4900d323ce29713bebe73a1be08a0cb22e9f1310fcc14ad4b9b23ee303aa1660c7eed0d8aaa5cdbca8e79015fb18c3733f747a26d3eabcb1822e407c630a74c9fdf5c3e9afe618b0506a9e2612f5cb7fac759c4eb82d22f559c13d60228da8f3333b35c0a5955afe2997edb6ebc92cc0bdcc00ee713283878693bff708dcb9c4b1ebaec454599c8e7c97042e503dee1db99e2f70c7a0e74f51cb4da9dc9faf26be2bb45d84dbe54890926bf407f81a7dea16af3a82205635029170de687d9200a423d1f3fcc33d14afafab72d8a3b8ca96590ab66a59d921e00faefe721f6b39a9fd8cee85b8acda1f164b0f8de6ceeb0692c74a46f477fb346a9271c32d41bb16de6db7e7623b8229f0d332ec6866c882e76f60e09839ab46cda19f234e1d6d33f0fdb4ea6af1f41565cc45bfd287495180895ffeee25195e5e65f1592a0637475bc34e5578d7182b9cbdafcccb3a56bd869daf699d462ec44565cd2f6a04019c4748edf233f3d6b3be2ed8dcfc86d70c2134b8e94ea1d0bfab299c6bb61fb378db12fa87444f17f4f2a728b60d73b48778d5e146a940e899b83ac7d6b56036243fabdbdd52f3c13761b10724a509d576b4089447552a5f98931fb43810ce70e89c9bfabc06e5bec432d3ddec6c512221fc5539b5fb671b056560cd596f724a0b1a68beec082ff4e38e9612d70c5284cf7945365842000628558679007852acd7e09c8e34ffd94ddc9d810ead2a14e1ca535ff4f8d3fc07488c181ff7d6787f9217bed45d94e9b0f6861c393671a02358b12bdb5d556305ae319e29042feca985e657f7306e69047a72effc3986fd30c2bb32544e713deaa36da0fef02cb414f876ee5f72366033b08883bd801433f2509bfbc595cf939d6d68a7068274daa632ee0b74ee93d724e0f15fe5d1c14b4f49760f97f8166c0654493aa984b066497d77379d6b2ed5bf52d40bddf5354c31f777f43340efd10da239e24fbc875ee41f39f845b0ae62ec4e5a100cb4193e7fa0c334ff3501c99a9d5f2660f4a2cc5f615bd9d186bc86931babf5d9d5152a218d8557659ef55c958fe48e44f2a8b7a28b065faab5004a9c02ee42ae22d017fe06e3e3cc447292e6beefa2637f422894e56114380521b5ef4b4c80f261f30d005205629cf021747573a9eb266218261fb7957fe33ec8d0753eec360c5b25140ebb145b3c68a9092af539f0f365d1b92a48c92814279ca21422f7ec66d80f35108738571674b45aee8ec839334e15e99ee1269831894633b541942a67a05977efff98dd91dee76da7847e4f4fe68ebf61cad456a42c6d8b41e1ec79777aaae3916b5d75156dec4c3f2082b9adf5e2425c4bfaead3d8bab39e4b2660fe2faa7fdf13aea70ae86bff9caafdffb743b97b77acc0dd2855d4b2b6c76b6864880255c13eb4fcd9180b8ca86a16aad497bc709b344fb6096a65906f9ce317124a5a6d203697fbe8c575fd49a7f6416bba922bae2ccffde0e11255b314b5f86e4059cde2417e2da0b6515a69abc44ce675e4b499dc683b1480850a69750a90e131a87ff1a8911869b546a9efbca954ac8e5a11458c40f60d1066b779080969d4e4ef8b33b3fa46ac88fcf4c323cde025cd9b4c998482b933585c62ca15db0aad22d5f792a9de3fcff81c42cd285778b9fc506d7c0b5409ee22101546e4a7fbd6b302cdf5d468893ccd4e9cf51270a4d0e1207ad86bde70a6342ad7d4bc96c5b55f1f15437abdae59cf3909232b3fedd246b47d94ea4975c35751b15ce7d0efb4eed4d566e4083690c686913fb9edda27f1b37d98d1bda1ad532da9c7ab7c013927c817455a6fa74879dc3c3105a1f437aac683cc68617accf067cafb51c283aed3a4e2c8231a8be8b1e413e15784c16b3b959618f65e8a89f6a719e120cbfe7aba0f3fd7893269da36461d37f7becb296bc7be64c5dc594a2c94a06162bffa05a4b2345ad2dfca85d0a9621c2c769ada010503981b026d785bd766645dc6fdb75934cc394748355147b5eb763fd4b4e7c6f66e9c41f8507c4b1873d05b0691f8a03f0c5c309632a66213bf2f7801a3b6824306587fe78abcc4fed08fa2aa3d304378feacd5f049ecea6be62d1f25efb1fc93d4b41cf7a1a28e3184877ad88ac70889a90f7d7f038ba864695a7c671e3ffe8fde99624f1f95705a97a22db8fe25b81a156e726be7eb61a74f9cd7f0bac74edf2eed97188cfc342112c6027423b21bd24bb2fadb7e75e0dca0dd77e84bb3b52acc9a04796e41a02dfcdd403181d7f85a52c15ef74e8fecaa6504a576576afb18be86f19b4fcb7d275dce301a9efa18593285e6e9e1a24cb9a5f9a9c26854e8520e9ba5a5b60292b63d811a5404854478f4e5d9d6bf17c9b268a4cbf505d94480c4bf6ac02c4ea983a5de460a3bde425f9fc881e96e542b3db6ed5337b761d64ae6dc8614381788359ccdfb62c96fdab53b18244778c33a0198bc88af045467567ed942c862c5f8752b368284389ed623d1bc0b1b65cbbda715f9b386771abf4f939ee60532c0c1eb5901239910d5fd50679c7e8bbbd37ed6368c1ce3951ba6db2e13baf23171ab3e2e1626c9d77b16e508a0c4bf04454337025d0befe8c0e4a2562006b8e63e7e17b25dd33b17f7ea89b9b027e0c788d5728154c8d2f76f404d13ad117ed990011deebf721857b341e584b4ed168d04fc2ebb5a9ab34a9184846da2246d93d0fdf9e9224a872016e2a070945f88dd217f13b955cbba6a8f76ee6de787ad9b643b52ab70a4b1f98897638538c55f3f4728ca822fa111decfdf341a64826579b680d13d8fc8be6a7126d6cc8867c23bdebdfb1ece65dd2ebb86fe7d025dbdb62c971ea669fed5fb3a58a04c6d8cda5a4e074e961c5e49e3ba35f39ca75fded93047e0eee48e1e3549f56a0ecd7ecf23ffce69f1ffd67a8433b2bb813cd1f06a2957bf1eeabfc29f07c5db189283c81f5adaf73761139b9990c6ff34aafb1af27f90653d62dbe9c2dc8f9c74a2e4edd4c5f29e70295ed2aa383967bbd72585f899ba77533328ba24311d542ae7e967cca9e006a53fff474093d39a20ad975904e19da06947ef5e4f6c35ac4047d95e8f6f6ad8de8b3e24e2095c416b1398bd9ebe0086858577fdcbf7a04cc0acfef9a37d59bc21f4638e19029b03a2f072d94f98acd1b2d50abd1e3826dbb1fd9e61923d74597865b5af6ce65989cf2e6bd69ed86a2af51feec9d2998e021c2202bee4158558eac37daf631d5e7af9b4ccdc14e40039584b6c476f80a268080272371f6f52607ff704b6860f727f296add12372536a5e242cc607b5728b67d8735f4cdb2a51a40e98feb5e255d406638e5a19203d6169bea563b8085e9938498951e7546442e3481697672c5e664b8062eb1aae7a6368c2c52010572ada8231dd8dda093f74364a8d9804a58d79427bcfe69093770aabcf107d993863c9c64ff4758d5018801d64426316f47f677bc429ef1365dfa1d331fbeecb1295d184f242ab89cf8bd12943e99b068f90cb67e805672b9bf0d35fa9fbf61e7c3dac4eb75c9247de0601ba67f7a26bdd5e0f8765f6d141bc7709a185a5261bdbc794740da6bc5012137c712ee11baf7453ce6aac52dfee3dbedf59537bf14bc7c034a563c5ac3af230bbbe272a5959dafe627249bdc5999654aee7a +MD = 925153994e2d005d57cdde862500067c938090a8a77f09434ac2f90d8d68d4cc + +Len = 52600 +Msg = f372d342b3d401fcf7f12f24ab954a02c569a4aecd6a9a269c99749e64f48c17f0a6b3332d7bd048ea96cab3dc66a86fe5d6f7e695c46c06f2b5cb9874c707cd54e7ab1a07437846050250c2ce3353382f044766c1353d2db4cc71e5ca0973f4a69c849f47164320d09e89f88ae591862b5c5cd959a453c36a452f2e6ea416b36f2f0669f7db77fbd3d03cfe1762ab816244fde563f8f8ef9c8acb1b667e39333607f9211e7a5d029701337b7d94e9505b25f432e91b71d9d3020d53bc81239c838c256ec5da3d5aa39a3418c562921c9e680769f2f409aa9615bf7f78941e15df2652f9f3e55f2e7f01087df6b3f00cb473ff32876b078a6e2ba746a09e70c6d03d476ab0820aa4b4a077511871494924b0a334af68b2a0e2ac8f513e8962d8e039cd68049988e4c9de483c3483e6fa7685bd1872d354157a003d48593c3c739782ac9bf8131f17462245e850d10f48335c1385d8943310be9079d1fa9f46be7c80acac93d61865b4d634fa77430b5be29c6f24ea9497ba37c20d97289ac8e2179c9443decbbbf59961de1daec1245a0bad979dafb9ca3b6cffbf40eb150907f03c2e07dfda4ff0802b0bf7ff33a06d37f753972fec13bae5b059754bf8525390ca40a1a0ec1e7dee9c82307181c8beece26dbb7316b95f2b3ba1dd512bebf17eac93b829e76ec56d1c0d710c93e472b5d6abb0821d0554c50a602104961c07424ceff580b588f084137262d9513cb4173bd71e65eb3fbe3b835de86d222dbe65101c00af3cb425bce97aaadfa417aa9c79b7af2266afc8161062db92b5653d6e62e180be66398c9b06edf12772bf7ccbf81409c3789c97dd1835a27d380dade5a9071eb319614eabd293e1b7a57a532c20b5d44f08505618039fe436946d35524c5781983f729374b6342099239157485a64b9cffd112b50386849c3afcdfe3eb5965174bfb5827d189756d5d64cafa60ce75f4a41283e0b21587b2e73752f314b8f38508172444e61852c71a4f284cfa00770c8bbddb8d425371f7fc7acf1b17609dc336df1006ffac6497777cdfd497c8c91525377c130accce0bc92bc6c489ecbe5256b79df69492257ee3623439e0a3e6ceef14080a91ee063efbeebc77d2b9efc2f635309c2b861fbdfc93d7d55b0e5a9a77d7e1ec6e43b531f32822bd8854ac9573dc8a505ae4adf511763d4f7d848f082df7ac30f64a55655d6c8bfe21597f3a7e11edcb793a6ab4c0adc700be930e789007c950d07e614989207ac22414d2327379dd562ce3d07d989f278194b6539c3c6cbbf4735c537f04e851921723300de288fb98dc9d799fe7deb14aa65af8c381ab16746570c6465f28c2f65111233d49a3aafc1eb3c0cc5cc106e45a1d689f1e574b690d38145006662157884b2631176e8e0859c3306365fa9ab7266a1d7f50d5dd3af13ed82c8924ff4e235db399ea5df736144862f581efef6b91dd91e4c7cb4e62b7d17c3c65f9df4298a555c820e6791dd4bfb3133f15675a32c4608ff18c1198a7bc9af00b3923cd7ede776c598ca62821a5bb1cfc1fb50b7fcb03b15cbcb925674c9ee807878f573c55b2c702d4e0dd7176d5a357433b07df5df5f967b1c7916d0e0294e949546867a772889b43dbb65abfbd16cf447bd7e7f9b1d8b12faf753f6d60870f13258977404121b14dd93b23ecbc17c277f9e4103ab1dfb77ae3494507332f07596532e1ac9912b3777be4839a7d06ef7227c4fe7d806ee92805761457f50d50a0b5ed4d6904ec3045263af0255a6494b7a7e2e95ea806c4bb788423dc1092897d7a10f0f1ff1ea63b8ab6d039dec150acdcd6873a9357e8a9df1c0a00206f00343456a2e3f21a93cefbe0ca3494ada1e649085ebdcca2b3778b762d70aee353897726a99b886077740c314491f67a16e87f00b644dea7c3a9105b148a16a001d1b4f99b952c90cfdf3e20b5fe9ec71e27d158446c23b777b3001345c8f22589a17057ef6d592c0b450457b4c6d805362902677f8046526e39dd3737b9bbd4597d2bba1b908882c859f11eb7874cc4ed6064b6de4db1191581fa4f60e8fe4cffc959a8b68b45457582771e44bc5786a2628aeed710ee7bfc3ff9c467b313effb1a8cac36da19e4916318bed2d2a2baf3b3e747f07678eb80d86e2ea2c4a74dc9f5372d12e970d0ba505878e86698d26fb90c8ab0eacaf841cf99f6a87a12d6eacdebb3e155e49a4efeb8e4fbe4b47d64f65d0faeea6f12cdaa3fa4ff60012bec190cc9188bdfb1cdb2bc8b93d9801c81f07b4f3101dfdb72ecb1c1fe02dcad3c7b2ce52f17ecb7c500c5c536b18620254bc9d1fdad97a2dffb82c65adf1feb6a48ce80ab76760cb38d772a5b192138ed4cdb304b5a1119637b353a6c414566d42664340424163117ad5343875d0bc7489821d2c0a3e6afbbd04b96c8f5e79028788067cfad37b56fe4bc893209804ba5a22041f3f792c6379f3853e7597107c5d395a4647e751a3ac84563f1bb3936a2ef78f63be18ffd753c8e0a5de86c2e4abc3672791438cff6cc707c2cde9128bef47e782ede38d5e33caf12832f43841596c54a640b0d573265b02a69d012926845b330436a47b000142e14fdaa91a9b4e7d4a4cbcf6d406c2897072f5c57f42d57b9c6f002174c5a578d7a23c6d0ffb743d709f6ddd30c0289979af3cfbbde7caee4a4db2231eb607b4fcaac108bf68b2f6ef29bc2d92a940d344e4d96c8a1d4bfe6425b67221da103e77eed141d3eaf0eeee720fada1caf37efa9936e08fed40f1128073d6263aa65d71f6d5e1f389166f9600cf26062a27e4c257ba1f745e91107ee55117d5dcb25b124b33b1c64e0dbf0e5d656168d1c54bc5a4cdf0e07926a3cddcb8fcd5ca1d7e81745576f540bb267f11372370c8b6fc2b0bd71c7b45e7f22aed104fcf0ccd0fe7f9a1fb276709ee11a2af37c616e03f1b11406ceecabd44bba1c1d66aa8ac556b63810705ccdf5deb9a346411c32d5cbd4071a5e1108ee3a87f335a4fa8a19a36395c61377626bd36812d71f9d8849a3a1fd092fb2044151a10cfa2251393246f039ad2646dc45419dd0427285ccc42ba36c6fae501c52339dafb7895f26c3d3f4aa22234baa36bbd38204e4357ef9c640ebca447bbfb552c6720a2474c132bce94de195164a9494a19e9aef5d2d4f0612e1859c757ccf21c3fa7e9e2297036436cb57e6073c038e709c70ee3d36386d91e43e110dc224430e8f6150f926ba8c7578f1b0cf0cf7ebc8f2237b86584a5f367a604c852e49191ec77ee758decc781dfd4b6fae2be64f23362f21a8d1f97d790a88a98c1fa2266d3913bbd25dbdd9a8bed18d5517532b17def05b2551ca2ae21b03a27324b3fd823abc68e5f203039e340094346db3020f6323827c4630fa0a328dd1eacc12f0f662f559145a30887703651ecc7daa66825915521e2dd26d49d773b2438433c322384b16dde4dafacb938b77adf59dbb09275224ab8702e7397051ce2ddbaac69e312a2cb32046ccf47ac049293411821c64769474d0571a4193a48ffa30cc8de2d41f0534ab18618a0fb00deed78a5e3486df0c3aa853590ac7e86249222d8b6897962ac2d3d46b04e8e7306f4e7ca1da0518064d5d6c35ed739a0f9b3e4241c7f22c17fe38ef4bfd9cc25b2b076cff85759e0d2d8e2633723d35c250d3af33698a4d573758ed86cc71cde892a0efb9bf4efdab6bb8f5c4317b48351a80d8f2c5b676631ea2339e0a2e865336995972eff7a34b884c7f8a93b44dd248d433e2751d43c604a376143f197835975f5ebdb0162b77f3d717d9217ec3147c3c6494f00511ea99eb196bc3d9100a357143fc8810e2bb4ed75342534124961527cf8cbf247d6b4ed7921730d3da4b816dcdb1d07e858fe9dbb658b1920eb1b434f92c4af1f2a283f774a91e9053641ba3306031b570506542a58eb4e7ce01d9d266161bd3fe3ae9c93583e595080e54c030aa246c3fc741aac546e5c90ef0e68e8abcba611c9ed0db595a1e687484dd3332d210f9403eff728a33ccac2e297ad7fb929f2fba38e99c547e31710572057abb8a8ff33e31ff4878b7c207c805f73d2d3a427673b3849abb72b75547507e153f3619c0664ad18af5557e725900fc2c94064cfbc5794244f2da287bb69aa7713257271764d416c8948f4a624db4ea24c4a907162c0493299f070d5aefdb024d3970303ec6882f6fdae7ce5e329c51c43375096c13e007b724abce793f7c2ed7b923ddcce7b19c0f4cd162cc9411b379650cec541986108c081ae46d32087dcf35c4783854fadd254efeb043eedf9fc2edd2f864a9813e06dde7079d740a8f8233d4a807aace732075a22f4aaf30771f1269e614404bf0b5fa92708061fcc49f37f6e5c14596feaf356e485761ceca0c87241df97a50c92802afe7cc7849cd84c69da9eba20ec02022d593d083051919b0b4087ab43a37cb6a91b5b8439bfac1442b7ced6c707801b25a8a7c9f7dd4b5337c4e2e8a62bd1eb6da630a404decd35532c74cf17676e2588fa48213939d6d63ff576b7954d9906bfc8808faea14495e462190dd8b4d30a9c76aa79bd0c3a0e6bface7ed9b1ddefe7a8d5acffaf181e3c8144f8d298b8b1aa4554374cff7fe202fc6fa63afea58e2d70b665beb151b6a5b07ef8ccb92402f98ecec5aebaae394e22e39880ddf7cbd845ac21b54ef84765174e7590bf1fe5d37aa189abe4cffd9595b1bb73f5dd8e32513e49aa2f14b8c5df3cd7e453b2427e3154ed0a25e815207c6176dbef5ebf81bcf44366fcadf10d30d086911de30143da6f579527036937007b337f7282460eae5678b15cccda853193ea5fc4bc0a6a9d7a31128f27e1214988592827520b214eed5052f7775b750b0c6b15f145453ba3fee24a085d65287e10509eb5d5f602c440341376b95c24e5c4727d4b859bfe1483d20538acdd92c7997fa9c614f0f839d78aba8197c5dbe841655d7b84f2fa188f690bc71c31a84dad5011ff15df4cd53bbb10bf1b7ee23c0dae7e284a3478d5ac0f235eb549b238d32a9d0ae2ad47bff330ddd94c6f8108b0b3a8fbe047c076612c17a5800df8b09475178f83402e208750e97632810074b0dea29b4d151a213628ad438466c1dc769a4535fe824c1f8082fb3fd69aa6aa979636b29984ceffb46baee1c93a57e403ffefa55d59e8e56530dddc3fa3bccfec422ae5cd7e2337625de126587300f1c30ddf87a8af4999bec155f475858a0e384c47deefea62f1c96710bb38f7052b3d2cdc82e56bb864149d2c2f8126588d021b55450aafd4576fef014771b0aeb9f9c5ad3e1e757d6eed2c2a376a706e74d2171cc123b7be8ede5f7d730c8442c37f3e1b645ab5e0ded4d516b1384a13ec30a863fb44e96bc19e1d4ce7105d0b735801ee9ca21329dc4e03b948f49b911da536f49b742d22163593364a85224fef0b74ee8dfd779f92e51bdca2a54d2e2eb8299548bc6b2ab52d27034474bb575f2001e2e073c98b262086456753473347f2e90faa228bccc70e437a7fe40f6bec1f0f943c0cf135c087acbd400671e892dade2a6ab17650745e4e65a0dd08d2be9105ca4ad1d7e589a3f50bd5c7b39434f871ad306e12fee3a7b08a52678dd6fcfe4d4db2c963e3a8fbcaf9cd9df58058d40862a363481d3d70d0b13b8b87bdceec4ee51bfc7e764618914dd0911ff524f70d0f6c9701f7a94218a40350dcd05de570592d730ee88b80b4d088aa1939c0e8e67d331223d250a4ef2a53bf7557d1701b739135fc7f9ebd994a9af0cb94552ffd749fdd97f75a1ebd0ad3de3a9a5216b7f9ef4a3184a857aa83b16b1e500b55b8bc58ff46aeee38eb0d2ab713e0065dacb4eebb943ed0d44d427324f8b409e1811c0780173f347bdffb0052e97318d0636c378f0cf73fbeec5188224307785bbf5d5469f1f1556e029cffb5a299aef442e972ce83f51c9cee76996de5927f4bd947e6c1be0d799abcb7cdea289bf153b2f24681e08290f7bb7a4e0ec89d473a39a2669065dbc785761612f961c108741c515baf0be4c356bb244e0cd26ff8b046367bdecea368b9967f77e837521bdfe6cc5a60eb63dc41563e426fed52b93368cbceb4e1ad84be86bba3c19198541d7a2ceb9c6a490440f48ed140008cb24d072806198640421aac92408c56d9d9b53e38b56c6fdc62dcfddea486f2660c858b16cc16a5a6ca5772cbf34f705ed22f9cba61d7e3661f9cd9f46249ad28ef635d5dc8b2262545fc3f306614c66f6814fb7896e6ac2d6209f098b491181a8270e3c5a1f5f106db927a8741e24053c2eac23cfda0b37a54a9aa9442671b84ee33861600e7ee91b3a08d992bc2c6540a3c5bcc3e0de0941c0770afb3d29ead5a35ae178c91060df6aedf2ecdba40b8658f2df000351cc5e4a8a8b0b0db89deeffcc491eefa1fc4cb45d80ecfd596c8fd6da072eb214d53d116bc60e089c45fd5122e4ccd2a22fc5bece000d818b1ccfa5d1c19a8d85c870dd81287ece4387833ff5610d22af8fecd2b5fcd908d770c84e809acdf6232a9c07614ed7bf4cb713149a2a5a50187124a8abd3da13bd1cfc194cff437c8b5011178285936c26691f97a7cd2edb7b97ffa926218b02aa75fdcecd6b95911cfd62967b894c455f221b0194b605255758f04cab7266863e202fb7587c2ed45677230cb2b67cfb5556981af77187ee2a28891ba222f6eed680147b948d99a6d651b4d2ae997fceb79b192c368bf16662ab3c8eb0cfa6dd023a4e73f82c4088fb01aa80e5aeff5fe44410bdd8520c5eaf458d2e4de500b15fa32038f9e4ce0b632b76afee63662f6a060158638023174e8bfd62dfef9f0c3d4f5c5320239cae7d239bb83f533eadc7458d844e92c020fee2ffd4fd6bdc5e29b3353af18536d2c78eac224efaf36b7a86f7ba2fe67e1c0eef26fd1cc64327b3635d58e4762728c0c10a8693c72ee8f23ee2625e07b7691d04e533b4ab5de948d437458f62d801077f494da4444b96ccf1d0357f73068897c8cd116b779723888a457948f7d40be9fdeaf006fed3f57934337bfab4e5fb0dbf313e97b78956c0fa2a8ca791a5aa06d1521622634295757a9ede5659c050fd3cd3e3cfe7af03a0a838c821ccc75bec9e31188cfe31f7503984b528be3ffad4d607d98a7472ba961902d45e05b391e9c8ea7fbd4c0c8b88056798d87ebf89332f6f683e0a6edc1fc11b39a2d8e50cacc5f0d429b94cd28b42ba01ebf7c96c768d5d1871161de8bc34e460a6b2e5fca439e68e58e26d5cd8861e88e9d5e8153d945372ca03ea70e9f8e0c1c02031124e793e36d134089b0e43f78648758623e6b9050f9f606f053761b30585ad50be2a286a36194a891d8b10c7928e734e19108fd43767b806060323bd846db6cf80c5bbed3497827944dd511126324b8a55397d3392b9776a03fb9372d6fee907ea8fa8499ae27853b183a966c9ca6ad578c005b59a1b3ae58f8f557565af90845c066201d16098a2d40c6e2ae5bd5da9e452bddcc5f35f22f91cce27b8f669df65b89da880c86fe12cd633f01281909238500a0b9ed8708cd142822c6979b1739824af9021506a894c8f8f38d8cda008e5467ee49d40fb8db88f05d5df9023eb53c91c7b2bbf15159386d47790e808886ba480da39b37cc01f60cdc683d01d91391468ac185afc10925aa83ee377369b3c08b46f1ca660ae66563e710ec02b2fa89528b57fba8c04d9796ef138d1b6bbe6d18e158ea033c33dddfc57c8d6c8f132d9b129aa64416cd971bd3119ae1564fcad726028278288f6767c0d6a8a73906840a67b50dec8a302c20760fe62bf10dddb05d171a2c97a309e41e43c51b787a9687d1ceb906e61e5f8e2136f76205a1b08ccdbe3a875017cd3c28ed6d3013186cfb990e30fcf041374b1cae57ef5ab24b51bf206bf11d92bb5826fc274ed4870d4c089cfc34713ebc40af9e8e38b8e9b4e97b6534d2c4bcda2060987cdd816f816464a1a41830c0f655222e22a7e7eef53a49b41e920e3e327c1de7f345e37ad129f544b10ef76dee73bc889da3ae68162e7135b099c3c0cb55a71414eec24e048505aeaa808cedab80c6d18793d7001dac3a127250abe9ae9144456740e693225fda0617d5b8e93565883466e1285d149bee70ec1d8d62e21a3da375a416f2349ebd7581754309950b4ad7c4f46a2802e5d37aa76933d26fd6da55c5801c12412cf6236fc8f5f4d25954e228346408f07131552a9d63e25eaf6283df3dbe9d51f0cd3769369653f436ed7e1b09e0a6e527522cfd1fe63ab68c1f574c44c5386dd28ad9f727edcd048c5fd324dba4a9e9ef7d25a95984817f5457f793fcf88d9bba7433a203c30b0842f008cb127aba04b1f968b5b10460c1f1538b3ccc2144e590d46af132e0b40b40e945981628813f550f1ea991307e854a5b3cd01e0605533cf2a96d1c0c71126e92b4145076a5a1c3076f0e60ce84d247b631d6597177eca716169c290fea27b4327ac6262ecf33e429826a86a719b1d0ae94d6e42842b8b788d908c2b0c651fa12c2360116a6fc9ebc80486b83e629cd898a5829f30fbf558f1b394db8ae99287bb2ed4af8d304da0a902d772a924226903de58f9c860a6a7504b634f0490526b37272679afd538159dba31263c604c40bd5047ee94ea0dc80bb07dd1d40a0dc022b4dc2c4cdf279f28931a4f72a788d42793e5ea4108995f969b4b20a3a6f32b20507c140eae8ac1dc16095af65a56a7c521a989373ce7b283545197ee07c110a2727ced5fe3d0022abb64d51209443038820927f2076785448437c40dace5f51ba35504aaef95f4870bd34a5024b011d42d8b52fbe8973c6c9364219cf6d06d0e5baaf68a425b0d838fdb275b4d48a13a8cb696df61053c7e1a4d3d16762eccfd13d52f788c9db1a2afd3087dd37c82de48017ff7011029db81797304bb4fb95a546a3bf01ebc7566f4514a4267aa2b21b7f25aed39767907516f6fe236b196c8a5d0987b8955ed42e5dc89437a7ffec7851fd42c7a76aea412a58029690309aa80bec1955ce87db90ceb21fb7c5c921207d0583f64bf3f143d925054d29276826d7b43b7f9f2ab5bd1e3c0d4fdde79a3e8ba739058aeaefa4aec5cff041e61e2d4acab6de0e30a8dcd8cd25a6f6419ff8044a2b9f6d372a8b2ea02826dd5504e4ea94511b267ffd1681cc306518bf77766f55226afac3eb21e31ed897075c6274427bd6deec00fc92a3a3f7334b496ce15432e60e3b74798d54a8a6ecc6e37f04d7e80bce6a9bec79c5b93fb998c7c4 +MD = 2fea9467bc8a3fc983c635001a0348f9f946bd7e6eeeceb4378ed05150893508 + +Len = 53696 +Msg = 6c56f62dae6d602371739dbfee51434a14ca5bbccdaec28d8350d0c9e3393863e01e2fcbfb10d1c2c2f3c06e97310ea9b3b05d9f6b014498b1daf512ddc61d13ae1b0cbd8b2c16230fc1395bc5c400d5303da6ea0f817fb8dea5942ea0398d63dc33d52ce62af8ed5fc550afff72e073925b80c641963b96139bf544b4fc50fa7450d13f92703fc9bbe74c92cea3782ee2f1315b8aa83fda58a35f7d9f752e827d59491f1968b35e2a0f772bb9bf8eab27e602d0711f542bb3a51c01eb0eefa0003685f303791b55b42517a3482eeb9569243b4e7f6342312e8a72f71f2e5afe04cfcde4d60a41556111752103595792b19224fc3adcd195d038aa87c43c3944910c691a1c85eb073abbd9ce73a6994a061805032cf2c8ffa1980bdb61a2521aafd5a0bc5c51e212460b8ad21f7e7b67709e258add0ef116aa92df187ec76d266712bcf31fd6ee208eead2548f4ac38ef70ccdbad4961283f20f6c69a4135413c0ab03e6ec7cd6d6183ef77c4c703a69a44a45bb99f4f4ee81f5fcf459eece87c388bebe4bab64deeef14273dd5aa8a07e41d5b4b48e5ffd602ed5e128c0a22a779134a2c4cb5ee018e9fb61ca6ed5db8dd7c5cdaece1b5b96a03f5996f199a6e4afafbbe0448d839c106a6e9c1688c1daf55c300d1befae2b3584842de97ba012c87530267eb970844cd7c0dab98bfa6c84e3025cdca49f28d3eb89741110c30ac5cf2a1fe2aa4fd88789820cbea42f4c6aa26e207b02d59464bb90f3cf1fb4d38f05d151d627c79ea8c9dabb8f9c088091e199e35fd1f977cf3dc3338c721e750c5f4c46c3fa80e097dff06e933a2c12dfe8ae2cf0d9b2dafcb948bbb1cfa7f92625c48612e923a53c13edad324844093efed38496e2a9c4d3764713a4fff766c49e609729bd58f67facf900d48cf76e956d3072b9b3853d3cbee9c4cfcab7c4ce134903723dc6da48f43bf0e1d0ee48cb7bef7ec115ef4d1fd7555599f78f1b2bcca652533316597f31dc04c1dad09fca71353016d08ffd640ab44e69502674c511a00a3665ef7b0cac03c5dd72467c79972d1120ac0c54f39f2e38a99b25d6832a5fb5829dfa49d7add9b99b62f8e6c034fca848710f5ab4deea9ac0a1334a4d5e0ada9fa1dfcac87c866a64718de58791cd7df4e63f18900f11fc162af9d70bf7ca02f5394506c8603160a166ae81b6f7c6198dd445956d79cae613fe1f85a53bc6b4ec2fd406bda30321b80a02c336ac0f037c03c8da35653ee11fe44c5c04732778ec4a35d1918b2337132532b2edf8d1c3283b71edce1b9574a2a528650ee614d65d51106f2a61b92a187fe556c42534e2f844e8d822e3f62804095ca7acdeb657a70d0ce9726cef8031dfc4b8a37a5fe756e5d4a317058984add8902ac7a134823246d2464ff6ebc3c50e76df733e7b5aa9e8dd5497c8781005da6bf74578b7e066c30a8eab45d57a3bd5a4d31abaafc45813acf58976e85475d7961510ab67f7ac4e5bca6da2d62efdfaf69d823624accd2fe98dd45503d96396b98c0e826b526aad6d017d5516667245134491f9019a6f033c2562aef12638e07b652945ec7609a9e93bc3a6bcaa0280a4d0314d6f16a6594bc41ac8dac35d7d84a7473b11edf20a778026ddf0821571504a497896a9daf7c172e4ede53938357d5a52ad033e8c98bed99141dc7713e2c0b9c1c39dda73a64437a8633a0f33d00e8731e3e9f13e1b674de91ba51065999c258176ad32d92e7c1c4e7302cdb515de35cc25ec8e725a19e517b376d6715e8b9770d9ed3875571328bf6565fc25cd966c0bbb349e8f1e7da803517550a0fb351578348674ade9ae64e1818a23edc0dd34d6ece8a9fd2f3b9e953dca065a3643aa80ce9f6eeaabf8d69d0f9aca74b65c96150231352355facfb6be9e8008d95d5b71f061af95669688dc56bc792277bb99b04336cc6b5862444c1e194710aa2a3231e2f4be14e23382849f19b95fcaa1468ff820f53cff1c0440a362e2dc725336a9ec7f23d1e775ca7e32d8119379b6a39b681639fe13d0177b96a2d9d2f87f6fc1562a67323d046ab357230a264aa3bbbadd411e1a5d2586e43f00b55c0657e662671f11a1ab896a0a561f2a81061093d59dc82ef6a2c45862e5a5fce16283a2726883a985fbacd06a76f6fc0a75a435d5f1d4f1fbad5595dfd1b839c9d5aaabdaa181b746f314a6bd00d0052a5e08a8a0218dee91457f45424c62f17b27740a835a3ec44c5c6af4ea3cd4cf498ae4f420751aad2131ea71739ccbae61208bc654dbe557fefd55c0d9722be1d0c2df223b35a4b6113a3f2159091af7e28894e7346b9cf9c6a07e1472eafcc325cca138dba85292cb28265bdedd785566263a760d548b310b0b8cf79deb70feb270d341e7174dc8b5c34629e95e0c4f55c3227ac6dcdc873607287242bfaf19de781d4247cabce039d2489263d6ff6d1827f7fb474cb483ad5cfa8b49ace09c10aa2645e309c862be1fd39f328b7837151a5f0278ec3eaed9d2a94c9afb2c0fb2d09751a31c99d7ac7090563fc6a036b564029541039f8f2231debd1df4bafb2bb0176f6f4a56c76a8e27c172ce9ef160cc8abf8adb02aff14040e5bbdeb3e8e3134fa62fdd28b862413fe8b3ed9bf07f1c9c853bba8d94acc878cc5a033e5c42c0e6fecb1b3634fb5080d1eb69bfbc781ae3f13ce968c8bd912d7ae3a984e1b081857f2b4da9c29d859486008b31dcb58f040a75b0bcd38a6308f83f19acfe951cd43237baa8ebb0a6200fdc9b1ad89c42aad8ce56b13b7d06b14d549bdf3c595a7a1ed8ac5c359c7ccf7265e1a13997fd7b6430256e8afc41cf810c7645216403204bf469ec2acacf46b985a4ef860d861fb581631c4771de0a9d4ef405371edf6dc2743a8152a06730ec232e2b4766a63fd3ab59e2fb43a30ca7015b4806f0b50a8a41674334870b331127c57e05092583c7944fe92dda597aaa0ff43515404f9eab41385958e885f73278b2104660cb9298268c58659ec8ffab5f07f5ec7773d22e5ef5ec46299b2556003d0895d260154e475a582cf7b741b4d9dcaf13feea4e1a7fe52387b4166586a6ad8f77c7abb3f2e1ff11084defe8cc65ba8c133b7cb9778c5127a2efbd5ec9524ccc76a775158bdbc4aa8408399dfcebebb47298f0bc4e6c811f1f445ab927ec60e819db86e2211df14c25905b084b53b54ebb7c10fea609bd34871ab31da85d320ae8c9a6c3bd8fce1e754d1dd0c1856182734fa228874a4d8e60d89233558b0a5b6cda9d606519a349fba8499d666a367a24786fe1f917785435e8bda3355f30032c76326024a3b7f43f07a51943e87e5b55613fd2055888af8bb1fc1450c1eb29b1062f6cff155348cad3fbea5fe87f508f71daa2b2f5c3c6ec9b192faf9a84f581f05a2b0057bf6d237511b8c253837e591007fa09d772c2df0eda9b59d04390269e7b462e51438ad253af2c750fd0103ba6908210e4dccaed720900564d702228765c6491ec27c760d79fed7f06ae2cbd9b3be1d1054b079c2f6c08aff753d20de2c42e320eb24d5468a8a4e81e67fb6858d1c0542305a077adcc596bb834c95f497a4b18a02d44366d91f9b94142a4c34319c69f2453be0355f09b92775a2fa51347644b8be0d48f502393f956864f57c5dd9cbcf27d89ca8da2772d1c0e2b68a7f321d4b51323e578261bb0457c26aa47e3e9b373cb2853bea894438e98e52f6f4629ba080e5cc34d6238e6f66c4e462ff4568a9185c42651cb9cdcb7408682d20825056b18a5ae379e93a4509df2b3e6d88b4b32f284ccacd334007e4e36e93800bcbec57b26309ea4d4f13d593877d5572ffe405b91cc398806b8cb091ced09f797ec007d09d0ea3aa2d6a5e6481c6339eaa9a20812ae5fb2ba0b86ba6115aeb55e97036773178329a55a6e8d4b2af7456656404130fb8518f80298a92cea8d02b8c7b6818e8bd238868581966927fb44480c024e133a158367a4e71ea6f30fa64d85011282b63d31ed5fc649c99dd6ff3bd4d076e2f376bbaff95c61f7b89c68c6d8cc6477202dda81f125ee9413f03be5b59203c6ae10887909dfb946c19d11cbc9ffbd944f0bfdeb4287ccf112b1c3eeb7303be6f44bb26ddd5970bb977869035f826601cd3d60d35ad22c0921815effe292676b4c8f00327cb0cc80c1973817a23da7e7222dccdf42f05604c8c8d3c03fa1ce7c3f443b71eece16bac76046ae9a19c76ed44108ba01c792098feeebd8d543ba4254d22bd13c999594323d5b7150fc10bd6de3de0a9f412840ff5b6ef0ac6171e413a198fb6dfb933488953e08cbd0c8fd757a147825455fd29f7724afcde43c8b04194a9689db56c254d0b81a137b3855726e73ab9aba81e7f7abd4be3fb2635fb0a3084b992027671b55914f31e7a8eeee26c34c068ad4a6905d48c40ab52e879ea59cc2a3b44e4a678e91512cfa5fef700ccc02729ca138f1f7466a37d3e52c5689cca2b27e1395bfe27fc50c9ea78181875576e5d82fc5a2df9758cdf6cf7561b56193cb66be6dacb92556dabac6cca8ff284f6726c8742c7f0335d405358b4693233ff85496fcb57c49aa9d3505f76ddc0b36006eb26d163d51a955e85f958d89d94b4030e46a6291b4695df9ac2b5887c7d3b99836d9e8834b5e568795bcbf014d62ace2f0df3b612e3c22ed038ff26624cd998c9ce02bb8b7f9e2ca1f286362452a42530282c9547fcbf5f9524cc2e2e9cda8332ca966435e25fe99440001148a4b0c69627b93d36ebddd05e0895064e07aef732e5d218e0888b4dc4e6d217fe46e120d58f32144c4bae3f9f66f2552cf7d7535e923e5007cca0b7b83964c0b1a3b5b282b12fc10496c0ebddc26c8157f7d4362a624380184940c5e2ca40920f659efa024ffaba0c578663adad5c116b8235fe0ad87a5f9e68ebd6d90bee1263e71d65f8be3b65b0089f35638a499bc4117d3994675b1506b5f2891f90d5b85bb2a184ba8e5a6a8c145befa3dbcd76ee400a773b916e66fdbaf55b0adb8ffa5352dbe4ec22e02f1d254ce0f324503966786e1584d91cbbcfe284ab3f5e855ee7421d04f22e5529df95f2b7b5f66a69b93528b2f4b0fe8a09c70118319c5e6c93faf543511331f14ff0ede280c4847e5300cace0fbb7c6847c2fb2066176399c5f7f54ead540efbdac08eefc81136edc065c4d52a5b2ecce670e33261524d6d09d38d755b6334d02c7f663e105eea3e8dce8756f9127e2e825b49eca7cf646cebf82e65efe34be4a1a7f46bee2016f717c5b2c1e073f31387ecbfadadf1510fd8d0788edf36dccfe6b4c9e7a5e7559dfac5b7a474e2260283af8503d86a8bcc4d16cc5eadf03fe84830473ffc272ea9a359068d2aff7f71e20e5a7ddb9d8d38d515ca53d0821dc452a50cd34561fa80adfa4fda872e67f84f93a07a1c0cddcbfd67d31cfb7edefa927d8b50161a51d97713c42afdf197fc18d9e7971e2ae5fc128777086338fbe194443324e2d2cd1aab5033dd03db57f3da4ba033569a3e4fd0ff36b4bc630d2fb473a4d0300db4ba9719ef8f4d6e507600636b0d59bd6f4da53992807b6f8b1b8f9640d0923da13fe6eb87b01f0cfa0927ab9853ac16c16c0bb10b1a04c0ee5b9226a7a46de52b10f74f7cce1d49bd13bcaeb8c4a2290d31711010e00d09bf6658af39ca3786bad464b03f57aca7223c3bc76ccee0868b2481b13450d8ac66a23f8a87c083b4c900aba85feb6197c1d9219ff4d0fb91c3bb9a2ef60b1c1b8cb5d3630215e6d1ee2c28a25ed7b0be04710a83118937ed5f6d36d3c66d2bf98a07a0a35938b570829d8838accb3e6c729a633b134649fbb6cfe46a3605aca8f72e23d5cdb794133efb36d5da245f3584cba802aa96864f524a3f3cc55302bc5c8fc974f000e72c6bbbb104578197abc37b65942808915aca6283d5e4d3c2a612a32dfb60a3434ea165834eb5517c31a720084a1c0adf9077bf7ec0251660e8c20ebdf3802d2cdc787f2a0f64127159b8602c9f071be592f2a76c85f6796216d33905d7eefd0868496f11d0f4531ba67fa22f2d79ba37d4b3b0f981e9ab4a92dea872230d915a74acbbd73de671df8a556cac5fd4744ad84372926e6efa8eff3ce39f6f5c88b7840afbe6a0ab1d3187d23610c0b7d893102a52b3860705a3be8660ea075c519418fc95dc93c2b3b6118e74f8da8435a50ec0d7f973324b3d5333a6fea59d7a7495ea1005a1bdc3e1d9e2dfb117da39f546af78c0b08139904fed2c29a49071ed9d6c011e350ccc292377acf5f32a44083a6ecba5c8746f5116eb77079ec5c64391fadf62d8203b00a095832416e4e2526c573715157c4b044ad70e24febde62b160f019005a8af1cb3f4e8c7dd9aa3784f21519b32195b0e5e3857fe4ed950089c112e02480686b1dffe546dc1cbf5ce753591a4a8cc2df3c377eaeff9b8a27086b9ab5609ba5084a71a3c626df967d9510c7ddde41522491d2e4d96a9dc4bd778610ff7d534aaf99bf137523c93583d752e7c837e74d662bdc3f67eb9a4bab1e39fd2544525d48510ebabb9a83a654f54142441c27bc8f537c15c04b3b28da45ade8917a3de9babb89220155b5f1da37045fba57a9a68651daf04c51276231340a59aaeabff3ef1f55d2ad1a061cfbe5c4c690ae1413336d1f5772c70601973277d8d85b7e85cec59d5229b21e31a146a80030ea110b7eef73d39d73820ef6891cee839422a63ff4872bdbe5a637b3a3d99400d347974f1efdeb321f418f357f2222135e545f2af53be42d7a463719447e0a6a305fbe8e43e6279a91eb8f3c5db1fdf081bcb77711e205863ba538bb71c0ebd4cb008923a6550f3d922913f36bf00683c501b60f8da4164dee6c428172c7bea86ad3fef68f732c83e9a32542f008c532f2cb64d8b4a8a0ec5c425d538eba0b4dd67f28f0466805d56000cc113621c266cfc4cabbcd172bca4dd092190fc15b2bd7ad0cf7125b2299bde81148836186882592efa01f183d4f89bee8bb3b0634aa3405b4f43d740c39c905facf20f398febcdddb70f3d460e3d7b368215bae2132b72e27d00ddd4a1b4cfc928e55fd80325c4e971191731bee00571933b6e4a72b26d16d71cbbb64a90e78de6d69a8c78acd8c2a6d411cf6d8cd5303da96ce50fd4a958fc1be39e349d61fe855a61bf470d6409c6b4bf77a09034f2efc4194a310eb2394a7307c4e656d99b72c527f8f4b4112f6f2f62d2eea6df2a382005f28cdd122840a67af2d649c8f53dcb6fb2083d4a93fec8ce69be1d2e569551b57689ac33b67d4acf809ae29a9c54b1ab8308058ae7f4053494757f9d0885bdaa3eae08a1646ec477f68abdc8e1463c5dd46a994c8bed6947fbcb5ab59097e856c3608ee5a283a806dd5c37fe7480a0193eb6852a0059696af8261b02bf3a563d9d578b7b016a69fead55ed85b6a2a1402a62458de5b68a3021fc5d0ec4eb8bd134e9aadbf1718eb1df2e4b19380aa4751ff466f29c93401a01d47d345229edb4129d598303378ad2fb3bdd0369572e2a97e345f2956e2f9b0045180dd7841058cef903faa72ae2e48a051fdedae6a2d31ac57f0870a5ad35b5a4aa05d5788831c27356bd6dda2b38e42080260d57a70121017eaebed84d7c8a99afb6cc85b9c18592be45b7b3d872c204ba636118af27333dd14fc08484d2078a859b3d2a29aa80eda72e35565f148c380b0186b82fc7d9b0f3763628f7c8a50de82d97d45c3f6ccaadd137103380bb111e9ade94ad657d2171bc8033fad2fb8a33d87d12d60271e03ec95d900a59c7464199e96cac82b605b88d1f4422836385f5465d740b866894d69119542802394e3089277eb1a1ecb4546293c7e35c8587b8d1a966715d997f01a2eabb311ca97f47d329693135a9d3b1c76e3dd1c0da15db14f168bbda8cf54c795253a9fb707014126faabfc075da7d461f246242c9a6e88ab6092f9fcb9e13aee0abe74126b711d15ab1c1d4c94f0349170a0964ecc16d9d77b6611fdde003ae06329d6044cacd6a7b2ccbe52c97e05af65d5ba9abdbe6e7a6fed4dd2c5178e1337620eb5311a378516a5274184b90e62daccd839f7cc0d3d4511f5a4f790ff308e51634ca2230757df8ea0404e091953d56d385202aa7fc804b8509afad155df71de1ff1272f0dc4156e7077add6ec2961a0220e64be8bc2b4cca7dd584458c7e6f188ce49a61275c12fe00f2b88518d834ddd95a772fbd45e344294984fcf91f872e8088ff0de12ebb8383050870d27455cb20e522d96a509d869e8435c84e4ac4985ca8275394299f1c001a33beb9eaeb5e9a1ee5623debda06401e0d23d690c5ea83aa89debadd5c2bfabac0db29bc641ca7802576b2682747a06f719c3c81f9998808cd1bbfca6137f55f36329c596e69cb816973626613cf51f1199dea8ede39fc5b37773d715cc462801a61ac5258da98cb37e4b8561e01b76b5b955b17f220331a7f9d9e528d55d4c5d3f4b427c1f371a607474ec8b4835306be4f28cdc400debefbdb6cfe9160ce88f9484e5a1828f8aa5e17703e55d8a78bb7f7be10c23051c132dd13c60789a25200f8f569ea0f9050a2d1d717a0564742ef3b95718b533eb9baff4d594e1512a9717333c7b5fbcb318c02edf4f29094c4ba8749707dcde8110ade5428d3a77207c13373f3ea922bb560372f46eb2c2299a067449e1825005fa8e6d2a536c552e586d6408f16571454c5cb159de86d733a4768014af8ecfa0dfba5436ef5e337db18c823f9b7bf27b8334b2b5a78f9091f05e62a078e8a47a4999620d68f7593412d8598c45d2ed8382f43eb1d2b3356c0727e096447817babf935f57c6210e7c00b9b095f654aa85d1021df565dc0deb6f3ac39e1b266f89ca1012be11c39b7d05975005b6e870aaf9c817286bf16137b2fdd25f06daf60ef17844e852c4485ea8da02828d76891981acf3f2e9da797757dad7820c7cf272bc33bd7d910e5d4872ea8cb484e73bfbf1187bfde97f9dd4e73898ae36f4acdcb3a94526d4882262e930b645a221cf78d27375ee72c81576e97fdf8c8b2a6c755f42a48b251adfd597124adaf00d8db7ab25aa708d9d2884e51672c413067a644767a1538bacdbc804f90e1e7493bce10496e22941e62026646719fdd6711dd2f37e06260f265f64b64eccb6389ca51d652ee5c1968b4386edd99edfdd519ee7ecf199aeb770b3d037774a4d440e919457557ae19474dac908d4c8142f9045cab92623908d731f350fde51899ed3c66e61736b3144892c1a3dc05e41d4145aa4e2876b779915ebbbc4e9a81250d18dd20cf07e58adb3839f15062911d5c7259cf07a3b09e23f5e89e002199162f22de8df347cffd7d82580170cf129398feedb6a6959ee70dac1c8eb906aaeda1cf0d962a72ccdcbe15be6cc3b7d340856fc89d8bb8ecf4bcc5c9f6bfb6410c2391ccd1db1586b90b76df9bafb97d84a0398cdc2d8a2547cff7737eaaacf60 +MD = 5ff1cb878d8aad04ea9e1e09431c52f02caa6a4cf60e076dedf16a56c973e32c + +Len = 54792 +Msg = 56df8cd96321c378fe32328be16c1473c147557a8b87f7adeeb4b4ea19cbe539c633a25f77f22bb1ff218627459d6ab145005cce57d0185ab4f632a73671fdd05f4bac4a9dccb7bcccef8111fd1237cb76f1fb9afad5422d4a097a48eb8ef1172a0ff2c25e1731416d826872913243685c037a06fa003ccdb7d7d4f3c08a87b52e68bbee403c5fe7e8c486718a645531001c203ce1b8d0e4034688d13ecd8853733c51f6cda10957479b22376f1237ce692536613664c4173740dd09ecbfbb980275fa038daff93992f183ebc8a3afe69f0704a0826ee11059ac1cc353c9ea2de2f9ff3d07cef634cfadf2b61e7f8621aba8d21f4c3def7774718e29f951dbb91bb2a8cbc367c7f008b7b7c0f70e842994f2e8061c39b6f38d79786068c157e5b6863cd549e0351644f71a30deb770a362cc8d7e7acafd2daeab2593287f2659ba5f058522a3084e8c55632e58e5133a1e1d0bafef588ecddeefdce8bff510bc2f244901d516083fe7b9d9e4effd3694cfcfa8c0024b2f7a262de487b789ddb61ebd5171eaa3fc925d0bc5782a689f597dc9add93c0ba9dc8c4d869998a554f18e1165fee9b1aeeef6336f12918e173230f362242400c49c1b380a46e8b03f12870accd05ba7e4fcbb191fdbadd765c7f1350ec642934762d8d4b8b5311264c4118fd00ec8ef6764b3a51dfa05ac53bfc777faea1e2afcd5cd0ad70ffa328bad3589b7e0b6f0ffcde6c0b0982273a7c2bba16fb6412fa99e01c3b17bcc7a7e75fadeca6faf1273df5d5022dd8a962a7ad49bb352320817657ce58c222e5104c5697751e33abd8d431f3eb9f0c77ba48c1a4d0ee7791f0ed14759b12ca81fe445883c9464e05913a13473befa618cdda395a0ca9d9fda568a690868c0c24de79c6115da18274ecea0a5d67822de2f9c654e7a2e9b2ba3b639ead9f9060541d572fceb6d2a9a0586e9794e3191c8ceab7a4cc5810aa5e1f786d3b3ab27f86476715fa493c0bee40324b8c52f6ea6d0d08b97670c1195fbe1182b80c74b241e913f942a95031d540cf86b22bce2019dd440384a17d9845b3c98fa2795990fd8f084a363bb1a3ebe6b0d994d1e15609d7e403654e98afa68d0ad48905d3a43f859e992394c2da988e60c4a2d9d2e4b389834996fcc4b7d8a65001ea3675648e895156b939266e71c469d86ac83564ad6e8c36a8206449729c2388348fa14a40e6cb23658d3eb7fe0526756b116b4e6df3896b074e09ecfadb0fe8067609ce1d4a565f97258e4f93ed413c125a071a6bb4e54732fa281ad7ff7fa1ce8df1786a10ad8bec8697ade9d9248d0ee67b413d2f2a6bb9a9414ba055fd35fb3c0ad1cdc61b38c424dd4b46456af8af5b4a6b38cee34919dfe807da8b03251b04b852aef739d6cc84e1c06fde6f0f722ce6e115209a5fc2027ec7fd0b1befbc8c7c83841083f6442b27759cf0ab21f5eff36b28a0aa2050b588146e62b2064e17e9dcf3ae8417f98c20f37428c9d0b8f8d23209ebad2b346d9675c50e6ff94e4b62d7642da4ac2b3c60c27be335ac29ec15fe2f4e1de0ebaf2c54978aa0494bab89fb5c1a70237790696b2abc6914c74e31280f6476d1e4debc393c43fd76b49cc1c141f1713e5d3c9d35e710ee9b2f73b63820ab328ece80b8bc49e6c1f217b39cc1cc4f222d4a959eeb678d30bfb11107b719aeeb67f749b42636dfa84bf3749d6541900da0de4fc0d3f29dc9f2fa9ac82d50dc1c1dfd7e313f999b2b04c644263448409e0976afb5983eaf34c57a7559f34cbf1ee15fb2b240d8a5948d0ec6d9a756ed4df7a259ef90924deba79f254fa183c49e728c6bb9d27a7baf754b612a46e402a7dbffc2c1559406692a074f1bc08c890542022daa7d05a9c63deaa79a8b760d3626dd6efd7fca4537cd114730d8dd78ddc06f6d26a8e0bc63479b0e9cfd93897378c9d2d6579ba6d1f16ba24142ed10928e12ae90dec2001132ab0ac415b2e3ea425382fe758e97c24764e4afa731ecce0b9a568b86f0215a8fb920825c5ac8f503e8f3d8622984732fab92ee6e4269eab96519795a119ca9af33e46a3a01953e4e28a9e695e3197f2a8e118010a5147318115bdc909cde8911a9dade573dd520716119cba941b340c8aaf4f736c088e1b81d9237f2f87363779958710c6605462e40c7d9e4cbee627a80b1d6392b13d119f8512dd9cad7d31170f1a4f2209219d53638a3f0f8275eb08dec8f905b61abae202d00bd7a9852afdf4b0c80d42805f6bfe0bc564cfa802b40e995f4c7deebf5236a53268e116c8312a8fa311733b5035c54858d40d4811b485d8baef7080c7f70adb7ad8bff8b3bd9bff09b6021819b8a1881ee6a41dc30e29cd3577f59a7bda66b90aaea9f294a82d4a228358e062fd78154222fcefbdcce4c0f56b7602830233860b7209ce13fbcab71500dd5ad20a3435ea107d86aaf69df825535a818677578ba4ad4652d7bd598d0bb5f95012e9bb313f3990aa30923cbeebb809df2d42bc10fee6c84789f6c2152b2b1588caa2f75168249b22f7aaa85a6f20ebe41f6a485c40a5f774d0afed979ee997cca13bcedc8d5908b7a845cb14da16685804f7e5b993723ba355efc25a8b77e9e23fbe2a1cd8613d31eb6c8c33541fe80286f27a6d1fd6fc9ac0be29a81b5e71924d32f2576fc3a4586726d30104c5d3ab4b62efc10b58a222b8240ac7752599a673a00ed67a07a3f3c57b88c4138f911bfb4f2cfd80819503e52a4d00c354c8e4580f65e122b6a4ccac7394c5a9058a1a3fc11869a5d73d05f0d7da9b2a746516a587e1bf8e570ea9c517dd4cecb02670bfc19d4da3e403f0813499e0d40cda02011169bae8724953b86e4ca10717cee42256a2f0a1304d8b3f477217e9a48e7115b3e618558fbd922c80c90b20c3e8401089109bc841849fd31a4e8790c4e92a89773e22ff37d22dca563dd3603ade4a3361cd9640a111f4e4b51379f2f553f704655a200ef1f0ee39f78e42ee0616cb30e6c22930d85a521b1eab3537be349e2e84225aaa467f9b216ba69ef3aefa8ab220d79cc06cc981205ffc0386a8f4e8b0dc7e17f9bde7fd2cbb6b2f96bbf0515f18f5361ae7c5489a80f02b073afb9d327557a126de90dc00eec73f00b462e6dfd5024063d1b57132876ef4e4fcb2855b58933e5731e200450ca1145821b712db5fe702c6b003c28f7e5da842767f67d48c1c37b53f4630a41ee0f7c78b579dfbbf8dc4690e16045a6ca78d4c31cb0d4419d8d4678f2236c42b6e307579aa4fe6fcdbce747256fe3a5a33eb27b4ff3d5408b15c95a9dfd84f3b3207897318f0451eb86710652b7ad84fe90cfe8781c0ac608e196916e6dfea5714c42b010947bf2e0ed9656efd3edb53b137f733bb5ef3295651095d9e123f85fcae85ace51dfd32c46a9a153414ec6e73b33a3f13ded26bf34d9d066e3bf6cfd20ebcfb143aa635c263d7e238c2b3a917c9f033f30af02f4c554e9ac020b73d7e2cfb77fe66633cf00c465e7210d70b85c14198c2a8f67c49b043a0fb8b29d6e95068a60b69dc5136ac0c1048c8019da6e354f4e8818b5bd2a8a6a08642f4a2f9c22b12a40ab87b7c8c548023b0d866607652d2cd5d58d3cf839c22cb0dc1a997c96d432f12a0c3aaf544376c92056e9cc462b7d90404ec288a4faf31b638f4acaf56c0164a3b2fa82d04bc89342fbd4313ad2d743d38aec605e7ce2003008a1eba0d11bf7732ca5e7cbd97e45eff5c3bac5bbb06d19c228f3c8b0800bec273d733bbbe94642c99b42c9751e3da1c526ed793eaf789d74f6c7664e43aad25b8bd62874ffbd8d2a69384b971f06f30a7c2dc7d40af2b923e45fd9aea3499d260ba8e9a4d5e9accf8e1cb4c7f72e4e06321024247967f74f5031754a257497073b5001b402473c197884a7704d102d68f72920a87144f267e8c0dba950b87a8fa950133aeb52b598c6e4963877491ba339dd4fc8792614fe1ca27f64ab91922fb44d70a21798a3dde7d0f3790c5593355891041cf767e9824a4ac2d49c7c88581a9cac720d85815959be61ca72b21eaff208e00e72a6ea95101e68a1b9f5c7991ac2493343a5c88bab2143a550eb387384995625814f9296fcb1b3247a79da835352b95e3075f3f53a9e2b821d6d5b109ec6f8fa89ee7c187e99450554953b7742c29f6b8a729e26b6898bf94ec501078f262ae622fff18a043990aceec4551577964dd3882821807d77e7634b6eb4d9041b7e80b2e0ad7c2c1718839f73c1ce4052573ed00328931dedc068c9d701056c2b6642d05d1a5f54b66f31ed400c025b6b3df5e8a00def065f996210aa500d45da64b4f1b192b42c9be7305ea59e62275584a1386b5bf4d541e4f7d6354c611fbd1c4fad8ad10b023c22f77a10f36e22b5adc955e19d34e9393592711430a15827df8b5a454fd4841ba50fb61e9576dbe02bc6b78f4c3fe0aa0dba77d3b73e9dcf30e08e7d59a110beefd1a92b0f2cb1898131d3e0e3662a28dfd860e03a994ef7b2f7b09f98e136aa55f5b9c2cae051f640834162fd58441a1e94b2b65551ea55c83977288825644299e46e8253421bdadc4376a1e486bd025c47e3e271f90e4e031e38b4a1de383c0e163dc632b2ad9bd6faea1a4361f3861b9a7ae12aef1964d62e8ba0608c10db3503be1ad3c255ada3021238948a95f9ded4fe3eeab49a2ec3d2c6886eaf8cc4a155560cd0f1c2a4d2f19589525102f218bfd4583bda0f005eb39fe906c91a6cc5539bf894b16305e951ea88f755c8f34b93a3c988dff68e09397e2ed369385833b7068aa981c54548ab67b41e29566209f8d30f7c26df2c45ecc7e65ef0650b5ec81c1f8a0357e79356b397112c49e2b677e896605f376fb746239bf3ff2efab93f4343a08699613bfc44ae8adf11e9e3695afaefe98dccbfce17ac5d06049ad5652273a7bc0846b4f49166e5c22cec1375b0a9754640c7d1ecfab3d475748025d2204be9f4330c90e8306cbc76196db8f5702e8b05fee5804b633f04fe0d3f4d1ec328f1cf9837424f980c695b55e366912006bb9926ba6d31d7aa68e02d2c9da3919759beb63b6b833ed286e270e18eb126ae6180469adb68de826acc52eca9f8f2137c41fb9d5f2bab6b9fcbd8eca3de1aa2274bdd1b7d38de53a5231cd3f4979b29f3e9f6e1afb154141e481c694880726e776c68c0a52a5d9a8284f9870ff7c3473b27368cdfbccf888d17b9fbdf40a48fcc62681ee5c5d2c39d52677a4ea220f7cc7a191361968425569b2ff8fa874772b0be597ad193e46b502be532532f2ab822633d09d7e708672542ed050cdcc1a3aed0cb88eb0cf8fe456201239fe74714d76300c49526c2ea53bf7f8498a9b9bf216a2cbd84998708e7a539e297631c7a460a12f83bce5a1b7c61661c20868611b2bafb7d40e224f7a155fdd3dc4b016508c8d2093e46247709c92f1026ebbd47dd73c66ca25f49571d04db9bc0d79c71aa1fcc7c1f36b889766739253e51c5cdfc04fbf01b697ab3b532419f07c1540c748f70c551188ccf6cbc12bfb9514610b8ef3aac3ea91f7a045ece41f360beb222884d79665427b537485a343a52a4bc7ea2d0f56e86ce3684eae049266e32ff2eaae10cd1820fd7708c7e4733ee782dc7c07d603d9afd65a17716091322673fe357a9f4251abba2a308dd5d387d26e12eb88e812e5e3383f483de063c25b210fb2f26c3d39691b3394e15eaba9737830dfb82bcb338f70df891a6c523f0aa0ed081d6006f8e4865cdbca6742cb52060002a08876ec3be8028011eca4d1bc5860e00361e4b5a4646bae51d8e116f88248f947e75a37700770d82948a29ff7b130e2ad5821992f1e29b47c99d0b2ec52d16fb631c03db435f0376b6894d2461324b5222e03cb0f1a5e96559357c6b6e0630af34cf02692da4c46dd35c2912ee606026ac9d373ccc2d2fbe4acbe7adf92c672082232198f5e4aac8995730539929c708e13d8bbec7d4c8c30cd4cf7eed2c150fc9ace3e352ab3117771f156ee7fafa895f35cc9f9b296f141df4a656b071d4cd89b0bbe0ba44e1faeb282abd51506518750a5c57bcb76d11fc800ecde98a20da30f33c19935e57c363e6f2c77bd6b146d14fcd8f82fb5d4d372b6b2d0ef183c65dd8c6e68453ed017ff00035bdda4994e26a92afa461ba364c3b4e2c973478027ed5feeff3d23c459dc7c550adf7a87326ef4e208786fe6daa541a24f8cf782f027f369e6835aff05bc2d4d0a29b58721d42528ab2d7b443dffa71aeca2efeac8739206a681ab2a23895910e5251d402440832669cd056696b82c74271df85fb7b982edc69ee0edb92a49c92239795b429a5701cdc0d6f4ecba19d58866da89c6e10c47ce41bfefd187459e4acf937f84cae9e45c6eb69548ecb66798e35d11fcd3783c47d412d9728894b7e44e3155f0b881f5a0406cf1b1364a52defd489f62770ef3b8be9f52a515803d781e1c84914d675c209cc2b12f801fbee31c65dafeb51695a9672f0371164f588fa71cb56c6fe24264eb7e7dcab27bd22da97a6bda76d749a2378994de734a2fb050f9908b073ccff59669fc8bb5a7b6460a50f9fea09a382c9677acf414b9eb63837abcf5febb2a5a034bd7796feb93b6a9af2d701da789ceecbff3bce1e4b330a868e2b23aa87c1b9cecb69dc98e9103ed5faf3ad3466511a12a133dc312b0a0258ba9cba54becc1c8133ffdabdad7b73d272664acbff47c1d80b17fa08d0a3a63abba4726eba3d3ee8a1da3fe158e5903d03bf48f595d97c889788b629be886ca90bc2ea4d1c8d97817f697a888dd72a62395f4635dc9ea0b0c0d68ef85720dc30158880946845bcd8373df937bed898ee5dd6b12135ffe4cd31b1e3193d256b4c8365e3c90ffe255953b85a535e52623e1ba6283c3485af4a448b60e0c2dea06abfdb725f760f57817f791c800eed2ccded5e09eb5ab866c483c37703aae4f2273569cacc5d01d9ecf4e09e3223013f4a3d5ed4b31b10b1b87a0a93e637a0f6ee8e814b94076e12f87e9f7dee4d27400f96391727e827068281c1560d0bcb254d15c2734b27bc993056f62a18efd7a59a827d5fbe5453dbdf55782bdc99abe3bf759dd0561065d321289531368d8af6778c8c0ceae23fb81b4faf83f953cbd8b23883f149640267575dfd11eba8c9a9231ef5bd42143311b2eac7fcd7ecb36ab1b9054499850abc2f818e4a9cb40c3439a43adf385ce67f52b16204fca6fb205a71b258db15f748261dc949de41db3e07c6dbe1424eb257673e0e2aec24fb80091ceb8c627950a1e79d5eae04d4bf1d39f14962044c3f406cdb1ced0ae94d004a05317de4319f4fc08a9ed5b4ef10582cbe13efd2e7d5b0d0231ea9ed66582799b524abb4d14ba86d600a6f62f377857c87bbd952a42e3f3db09400081eb57c84b7257478dade523aa831b9a3746d1b85d8c1bce7f3a12211de1d8dff94ed657785c48684a0dfc3a4dd9562daf46980f54b96092778c73fd9360b82184b5888fe9b82508ce5b873588ab5f98df5f56c373ac95c858618bf0042feab06b48f3d8682df40e5fc00f7b21a13cc40fb7913c830dc2586be0e46337f67672f631a19bbb63bf6246641b74e062f7988779d4e24b83ed29f83205bcf55c62516c951a3eab038deccb6e33888f9798fb8ecba41d95b72025477e76650609b834179fe42b00b567943507df1ff4e725d76ed58b55275162339fedc0c432a680023d7489c882205442ce56a8a1d9fba8136dc010f2caf8bc3b4aa76a4341dbc0a5273f917ff9ed5cdedc841576047a2897d4b4bc5c465434268ed3fc48fa4f82041d2682b72cc38750a8b8af063d0dae4bebd815fb630ed5dab499fe3d26abcd076651e6d7e44bde807a1bfcba4e5c4117f955a538e9cea4400322f9898d96aa964ce94449e92d68569ad586f8fe0ee9e34853f4799f3bab40c5967594f7b91f991516257403102dbb4f0dd52914ccae971ef988274efef1c3401df8c62cbb37f80aff10c0fa9c3695e2eb6fb6593d991bc46febabbebf7eafbedd0c87f346f79b73cd8d95957a8ace9b98de05950ab15782dea56bb7255bee8501383f16ff696b98a7245b9d52314cc23caa808fdaff339f6e3cd101d88f66ddaf05565b90944ec0b65e7adbcb34f99ffe598e1156899865463a4463812201100ff9348ba1802d3522c25a148e9abb7a077596e126596c1a8f272ba7c81da5654b9e416ed936f13d12d96413436b7c9a7f8602c8f17799077089f09354873c23887ce6cbe1bd8021ae29fe9f91b023488d12398e5fe9057412eafaf0ce68ad93f119896b601dc429203c917f207098cc59a3a3fb19b99aa89cd1b185ddc8e0fdabff9417ff5fa49c8d9a867c99b3c36e0cc0a8d7c7ef3eed37c77d1c2ab0bda9e1b66d95668a07c420c9435ea4818c76cef2b0e91191db890b53c67b5c272cdeb9c47ead3ca6d7e7fe5332ede8e3db2bc6bf23fa9da958c53ffdf46b1c3615e55bb32d292abcfb4e52c0baf00ee098d61db269d2163e9de9fc4d6fb412e46006f00be4d0d7d25b4142964231bd81abbffa50ea392259923d69cca01ee539f589a0520a69ecf3df07f65f34769ecdfc2e86230ff769011f09af01ed713e3dbcb6921206bd10246fea97a2f78859cc736be9b23ed3943e2c94f574bf74c4f99ed5efd24294ec6ff3304de8f32f9586f9bd4a85e0974b18a12764ae7ff02074812dde1b25b527db53223fb89032fa04746ed1255e093598660a243693aef9b64f07887417ea6a707708969a365b314dcec4a8191ef2fbc563855c946573f8c8eeab156580f95d37472a79164d70e269ed08f4e98a1945a881e034515b0ac5b14861ac76c9aba737accf11b53d3ab561bb81e01e0948ba47a662d5f4df3a07794371753058c8f1798c4186fe6e81503c1e79913f024502acbb54670558ca6629c922991a9618e203d1c6ff7a490d5e02003632d4dfd9c6dfa9fe110d2e838cc8c1be40bdeb6223df61a7a4af34a585bb4801e96507ccaee656a8fc93c82d1e5e128b919fc0705b15262c9e2798136d70de22de7be2e661cbac9a501f9090c7f4a6d2b54a7b0833ab069c156ade1dbf29aae13b9dd8ef8896921b3439ed732d9064dad44686f353abeb4130fe6c8c23ec9386255451aeca4def75d06a479ff83d34ed141947f9621cbc61186dac2740c38458c627b5ecd0faadee4d3907ddd100fe51a04d28e109076145f53f04b8bfb562a0469e6c7141a4b3cfd32f93f360e3aa4f9e6a8f75ef73c135eefade0547ca16a7cd41de05c654e96089d254a94ced212f37f6e67bbd68c6782b28a1d8810b88b282997470071137e898adb2c93d264939927b94bc1aef5758d550b5f7157fa00c8d2d9479abe385b128451619dd970bb5d8800100af0e5c1b14fb822aaa2f47fc1785a7ea5bd2bb016024e663d14750ea308e950f23cfbe0a0fb0703be82163c9482a1689bee7c12168d18c6dc43efe21c32cb8b01f3a636deff7e7f0795fddbc47a3481f7d297f5969d46e005c85fea2b8e2d2ad4b56348cdb584f1302f19e1d3d78a4733fa1def08bb6f6e3412339b538384bcc4e2b19aefc5c106a2edd8d345132944fad55c430f5fe8ae01c2096a26bb78bd6d1c1fb1d7a8a92bea22d9148ac587e796e4f1a5fd03494bd9585fcb078e6fa927b21 +MD = 143ff57b839fcb4ed1fc1619d19d7e115cdea9d55e3505b8eef7d776dbccc343 + +Len = 55888 +Msg = d3df549c7ca8ef241876d9aafe9a309f6da352bec2caaa92ee8dca392899ba67dfed90aef33d41fc2494b765cb3e2422c8e595dabbfaca217757453fb322a13203f425f6073a9903e2dc5818ee1da737afc345f0057744e3a56e1681c949eb12273a3bfc20699e423b96e44bd1ff62e50a848a890809bfe1611c6787d3d741103308f849a790f9c015098286dbacfc34c1718b2c2b77e32194a75dda37954a320fa68764027852855a7e5b5274eb1e2cbcd27161d98b59ad245822015f48af82a45c0ed59be94f9af03d9736048570d6e3ef63b1770bc98dfb77de84b1bb1708d872b625d9ab9b06c18e5dbbf34399391f0f8aa26ec0dac7ff4cb8ec97b52bcb942fa6db2385dcd1b3b9d567aaeb425d567b0ebe267235651a1ed9bf78fd93d3c1dd077fe340bb04b00529c58f45124b717c168d07e9826e33376988bc5cf62845c2009980a4dfa69fbc7e5a0b1bb20a5958ca967aec68eb31dd8fccca9afcd30a26bab26279f1bf6724ffb08733c9a2f4575361e5458fe3fe5973150c7f4edbf6535c51f1879858f285d14e6956001c2cc3d976b1baa05e81f33eeae9d29448f3900fff95967d7727291fbc1a4cff7fe8e2835e47144365a2f218d4c95d7522e824fb43b66d4727ee570f8303dd6dd310fe7aa00d1a1ffe49a0285a14e69a72bc5847a5bcd59f6d2f56c92a8bd1f3218b5de6c46d96dd345e4397043336ab4059741cad0f962d53d26f763919ef38704347ee52ce4e240cc9248c5a8c154f92a6c0a1e4177898e0c0ea3e381700e5c81f06bad3980c9d90728b30e5884b2e728b83ffd13c43891cdf0f48b0eccca13107e173cf3296f0c742bfab2c8f9ff1e7f0075dfde7bea7101825bd29001b15b4e31f41cc06b4c4b91f0a24b70ada40f9bd92e4ee7eb29bc35476c429bbb5e8589b094b547b30c16ff2b2c30f5fc4c2b1da6dbb2e6be70c3d7948863a8562c32618e7baeef9d190f0a400b2bbf825201630e00c451425a38770e42be3c6e94e244001b523e85ed9441b3c16433bc50231a532fcb9e33408a82292daade613305cfc9e6579b1a0437441ae1a30926c0e0822adb5143edbe2a8769abb1e4da812d63507f27aba5f7787fd9ee30964e1efa690975fdd8fe3d9905343f7c063709b99d18583ae6c621d8536539c5619ed4b10d539219d3d159667a3d6b61b913274adba5e409c2f73dc77d6166ba01958cb50dbdb24dbb037c1354d9b1fb53db8441ad6da52cc6c585c64c42f786dcbea166c88c5901f5011020339da5b18d1c8b4e80f43e1c689da4654e8e6ec48996ad56fc63e8cf2856dffd84fdb91ccb32b6c204bdf1413f0c1424f2a82efb6eaa2af5e7c8f40dab71163bc77e5ea574da913ca74f8143a07d5f75e724da84127584d439201d5614ec6d4b799428e43050951ec71d409c338de0e88a88d4070b6555625efda730fb254fad29d38a4184515d0902abb1a37eaa32ed6b48bdfcb0061730d7d62416b4b837f146b10555c749335bd87f76f1c84ed004e7e8fabdb6d434c0223e368fd821b0886eb12c899f94c2b7c70cf31fd70842cfbefe1cf2766c5880cc9a3104dbde3402e068526563e0858d4cd8a885f153059e2edc8713851adcf3357eb5fe465a4cc16a2b3961caa8e64cd86719bccdbb92f0d618eba9497c4cb80b6038049e3265746a8e24172a5a8f86f83cc93cb2ae658833479d1c5a1d222facc3399049d3187c4015b4ee0971cbcc3ade397e56a80794c4cd2de53d69f7caa82c3d39efd8d049a9366e6eee8b357d0eafdd0a0034f3d7193e00bc49df28296c1fa559e6a0177d0484a31250135729e236366875e1b49f9f0ed7ea26095dbc86f22488c4c57886c0751560c486ab436415e801fe1ac48ec4a3f5f74864e30487581d3f10a55de78b7c17e2c261ac69f2a3446f2f5cae0528b1fd7c377e6291cbc5f1f530ec422fb42e3d00b040c4fe1c82de187033cb9349ad50e169a256d4e2b06533dbf6bfbfe8fff75334809f8050193796671cb7c995fa92bf559d2a5e6a9bd983485141288865d942c5cd96912bfac3518a83fd18ac2e356e81bb778ea20cb16c2c8850ea10f44567ca6444910e9c23e2411605f0eabcab978499a8f647779f46ef087995112fee3ad90124008671bbc1213f5cf2d02a7792c4944915b960f5bc065e258a177d16247800af80121ffd66b15c8c8efafc2c18d847d27d865d57241905ef5982606fbd0e0f51603feb8b4b5819ff35d9a63b722620cf9e2cb126278d7c3183f08e4d8d2179b4516e98d7f7bbe43f87eacd283734cbbae81b31052eea3d8689c03b51ed48dc42b43c7c55f42347c7e5bcb564e08a850efbd02156b295d668eba00bff85faa38709181a97b944b112dfae039406adf94639fa16ad4b36b35319ee84c8cfad6bebd09ff81fcf86bccaf65d4c180205a4fb32e7857b614370dfa52a1a2022d7920bab1299509f7fc73a9a48d3737b2804986736f2339d227b691dd15098380fb240e93e72ccb1866cfc6bdf5e38ca9b84985746f188477a5f79d472acb377cc49361b7228f6ae311a8abbaf30ca88b6c19583b5e7cc08b189ac798ca2f45a83c345d23c0070de066c603a26efbb2e3037fa6d026981494e865b6d9dc7cd58cccd1a8e1abdadc98cbf0747e50f9d336e5441739adb4a91c7c21121248fb11b1da30eaf9c9500092a9f0a655804c330e79305480dd18a7aa3e968549f6f41f9ed01acc7104b3a156698c432fe63cf9f2290a05ad9c0b35c7958bb588ceae27db1457f5534349e66d718df0156a134e6b5d9cd2c6d4d67bf9e9c94ad6b77352f110af0fa76e5cf85e2bba570df41759007bac61d56cc2a2cba319ed3c9c89c7672aeabf736c32ffb1fddd20226c924339ec035de14c15d2c2294146c06239afc5cccfafc1271322ef51bcf359baca339e18696cf35c173268e409fc6df2cb32945d2887988649899f8e2176bcc60852b867a536128412eb443c3bb8483487775b45bbee01711b5d491cd254527893c70e42816446ac4c24de9a9d215b10b5a7a2eb518d02d0d0c67563973323b9b5bb280fc39e97bc0e06bf64f9e0ad6f9ce9f2b9b10ca68bb1ebaccb3abc386fb4568f37348b0e9ca0b96e04159c46378566d116a512f28b06f575bc81969884d9bfca239cd4b2344a6473e0b9fe2f52b846ca6af347f0b6170b599e36694bde6c1f613ac3218c6c54305762afad6fa67db0621e6455a7f52b56dfd91fdf5a67b59ddde37019a22d0544a1f0be520e1d1ccc2398c0e11f318bfe8fd5059ecc05fb62c5886d64fe5da7c9d9f4ad95159edcc39441cf966150802af1faaf4ea9a28896a19080aba8e680e688d5451d8b1007bd3d815819743c50028eb1e798fa25a25ffa637296a6aed9c435fb4e93785de3e1a7c1251560db43afed607324c67692e856690acc029ff98a68ce909ee46cb9585967fc302e17a35996711c99157da057400a12f6c4a02a61a9b6d2e7d825d04adbdda612e5d6b627124aaa9fef2213d53dae50bbf298b271811bde165b7072deb689eb648d02c642e855e5e05d4d3589d7bd8ec49671dae177657ad27635e53c71d592ce2f8219d2a0f8950166e64c9c959f92b8b712eada14fc6fc3305c728d942865f7d13ef7fec39d81ad13d5a135ffbc24405e632a83de48849291cd61f9a8e92a887e1eaaeed8ab728a6b027c7d9e7c0e04924ce1055fb283e7a171faa73482aa283b0a79cb678a30407655249cf94817ab5bb559871fa03269692e85c0c05aad8012eaabbdf8a183783cb7e3b9998606dec186d832a57b5bc1f0ed496bd4d9fb380aa689eb145a33dac60efffc04a0a444cda7a72d79acc4973e978fd1f9675bf72b265b7e421c070d1b44c18ec4fcb98686000ea1239936925c129f19b66c96657e53699d0b50c8ba433f719761040d4bf57a54b62bac785a5148c16c9450742b0a13fa71f65c3e8847e9573e611e673c20fbc3931a4c5498251f3df21a7bbdf1d84f57228ba931202e28bbac4eb49000116ca16178e090f4e1815ad2d056395eeef0c9d7529f692900e6e409af2d5140d0b63747cbd2f5158c5561353e47b01b56dc96b8d4a6ad4cc50a1b7c0df170a463bfcd6e9d894ba42e839a42edb7e9d018fd06ee9827c731867ca82def68b5d3d471abfe756d5a48d0f24d22640fad243a3963a126887d7f4b24d345ddfaea762bb3181edce6e9aa788cc2fc2bb5c4bfc67af3f8073398de1aeae4ec5f0fd5346e6c5ef6595cc271313841f9cb13f64ac3a7001cc28ee0f8fdb62249fe0f40b6a786c3af7437ab4600de1141cb8f0b6d3aa8d035df031c72fb70d6854162f1a4dde89071b5df6dd1ef677bfbb393cacf3265ab6ae7f916f71c0048c7b170b0a5197a0c63a5bdd0b905b9c7500c86fc19b3c5dbe361d8942d694ec038d4a14761622481aecb379ba74abd3d675cd069f2c6b3a7c9d5075fbce9428600355e7c81c0ce3579afb69842c75b24692ed9d90371145644cbf03f4da5c5e146590d19ad3b6071eddaa38d33837cc67d070814f4bed1317bccfafb88a3bd1b32ca18e48cdcc27d32d3644321860669cc71c7e16cb5d280975f8d5d14ed147aee0fe5a6c7aadda16f226382b5d9e3567df37e0a135dff8bbf0d112b9a8bb0479fb0de2605ad9725cd5006119783f9d5b916935592be40991c5dee2ec1837bc97035692eefeed95073e4b7ba6e8c322da8606f8b91e07ef3d6d78d2e32df5b4a8727f0842d748c6c8966dd43e2fd74a8715b7a74b7cc9fe2140354f394a73a100c0edaf1664896bf395fdf759ddda98c3d8f1cd7ad898dacfe6aac4490e1ff6428708f3d4270e192a95627184434b8223383be7d1b1f2e99bd93feeace97928e02d777306bf6532c01d31cf4820b89b27cbfc62fa7976cf37906b0aef5d0dbd6c4cafa9286e1d6d76a5e26d0fc6904843fcb9eb3fcf82e00594c2c56ad95c18493d2802a3e3a51d90c80ad765d5611dfa530acd1c04a5b0a86ecd8aaa0ed2fdf9a7671c13808ab7b0ec019ac4bda980dd6755a539c95dd57286e1e7474e00a30fe3e351f1f53ce0598a7d33b6efe8154f9220fff37e29b2f665b657ad1763bbfeab2340c9924a1bfd4bc41eb70c9b4fd36bf329f3a387ddc683a148560b8aad4845bd6504e820cf0e887cc83f644194fb6d52df94ca06ba55793955dc8ad3fb7f4c084b2e875f7e2fc90dccdab759994a1eb67d616214dd15bef4fcab25de3af6369a4fc0c054adb3960da8f34661a121f8a48fd3fc30ba99bd4aa94c6d17c06f9dfa0f4643bed24c67e2c923c1f851356393838708e8e7540cd0e82ab10f302dda9de63981ec905cc723c9e69a6c3dd71809f4d518bbc7d715fe35e0a2231ec384fc81050b6c4c573c5717b6305bbb896e7e50589c17e08571491ee8a101d0c315ac4c5330cc7aee2fe32f0d34454eeeef77228c139bd5f197380fbd4e19ea9f1513c48e927bb0642a5e9c6616978c6a037af7ea0f95fcbe104194c8f9d9e0c9fbc97621b108616ba42fdc5b47e0e87d43002cecf0b4d92d450c2ab644d047e64243ddb71cd1226735ed6b5758afd7ab468d4e2f57670fc1cdee4defbf8b845680f967b9268457e9580dc5e4b962fe765698e80bb43af53e136e8aefba6a1a9d2080a0a27e8096547317788dfa98b1612bb9671c979f1dd4ae134e30d5fa9f4ca94014fd7564525b1f80ffad9cbf94ee1e4567dc62020e480663245d82cb76c7a3de3134bb9e104fc5d0c7de00461d8fa6e346b5b4123aeab4d499b0514b45b088a181e2a19c44b50e8d6d99c5dabfc86e19a052fe3e283f11fe0af3b2086079c0308381d7fd841d422d5d6b6ddc002adc3ef11eb0e45ad7d636147235716b95f311b29ccf10430b192713bd68d8632969e9b5836ca347375a1332c64c14cb8789bbab8de7a305e0ec113d2a373e6d46af906a2b920971c0262be26a766104e10ca4baffc1f441414352161c699c82f505d98b71b1756f14b2c6afd944f4bc14f4438d4cdea299aeb7805b1e607158c7151b95e05b8593a798a9f78d283e35a5c93e7f0fae2c538ba12258aacc4b333f55dd1611f0a883fb301c5600a0ac261603ec2ca2a0f0136a989ebb4c0d88c6c030948861015cc47221b447de3edce1e82ce2f2c067ac6dbe267bef6c94b877fc3de869681e10b9bed5f84970633f1d8ebca98dc352afa718a33051970258bb35e63f35819772f843e55ee761ae412d9c2ba64a36027863ecc762ae65c6f8252fc21f79681de1e483a86e8e1c80919673027fb492f7a538bceb79422353153a2c49efb16601ec22f0b79dba2b8a8edcb5d98c596492a489fb87eab98a571e6ecdf6465a15f400183d9b6307f91cc784d70952a52573f4cc4b354d70f5239237775fb9fff264ac58acbc64d41fc7aa13492a6924400c24940e7bf804ee490f28dade90ff85c47f58e0a309cb0a0bc50caea546535edba265c7b490e1e047f3b74afb81f54a93c79d5bd7c839326996d55a1260bedc62fcb60977ae9475a0ce675a4ef36dab73339a70d336cb3351ae11edea5ec34322a209465d979918d42dbd8b417bb532b331c4e22dcbed97645926dca5770d2d9b10c3f0aee27c4462602e506b71888b0450c1123ffe1cb9024698a8dc6008e64cf7aabb14159a72cc243e4c357b43eec70f13739253d522cbf4ebc4e7a02317b894f1e805b7803e81d871c1280f74087bcb1098bd53a35f21c2a4c35fae083c5e974e19fc3eda0213fb4d61cb849552a3135cf4297403e8945e3826bce004cebf6d13c37011f468031b45a088a12447dd865d185f3b7339a4263a6187ecc5494b84e76709e75bdacfa6df0ff7bbad627b829567d7207ddcc1990006392aa636938d4d9712159cc4ea2c9e02915a9d3d1d96aa8519b9804c8d454d875930440127d49ab6312323d0e32af71addf480322440e0d2af6d270367b9675760941b4368f97356dfa67d693b106ecb461fd2dc300ffce300c1ee8bc143e208d7ac9877d77a4bfb85f62608627b8996524311b5b1523328a64e23505a93321e2700481913c5a916ccc8aa28e9cacc0e9af4d93938c64836187871fb7415fc09e725a6917e69ff2b0c647665419caa9678ab75e136ca907dcfb766e7be5a945e9093309ba7e5d2cacd7017280a5fa9c083ed94482bdd908244a16eaf89cf9f7eabbf727200b7b858986208fb94924e0f4521a0c8888decc60fbce5bd76e371fca130e8cf195e1466f5b0c85a70c30be524ee180ced49f9cb9970888bf634b05b096e000d62577b685df2e1cf3f6067e4abb9866fca904bf57a52b3a59841ef1c5ced54b76c1251ff499ec1c450f8f680620a687ba0ff57f61ad9f394dd8962b314256347b74d3c7e312af4c4460b1c3ab0573abae0f5a220038cb4d42679cfa1b7ac9848a4369f77bd0e07599f055d964f2679983b01bf15bcd193ee03a19a8abff98034e38cff7e45de55fecc764f05770ea1bdffb21349bf4f0d3d058f37b0b5829796c5aed0f454128d2e4eec451ac0664f76bf65233e735b8d5bac914bc600de6ae8fb1ab87c6020f96296c5f448c3d3df6ceab97356819da0d459662b2d5a7366a5d46f2a6912a047264491b101f9cdde0b022d9844527bc401ac6c7a78fad80747e20a8b6cb416e303d8ee2ff8cabac7dbb62fe66a7e8c739e1612ae1b9a72e959b47b7fd9fcdb5965b429b57fcf213959573ef24b6e263bf417072a9791da7955cc405c43358406d676d2e6196fa78efe65d9505999ff999e2fa8947f798533c689e7c52af69797c08178265834a44545728d75379a7ef906d0756035da09a5168dd03f13c89c78de74981abea6ae08c8fdd9c547d80af6c8aa0c125d0bbe49e038a81e7023e9266ab0b127af4e3b25f3784ce52ceb49ff5e0cbb2f47a7399e9e2ace07d281343d0fd631d1cc83c2495f723549393cb29f2189211b9834f21fbac4b07fbd68d4093855b8bd790fd9df576c41660f54bb42dd9fdc6bd13d7e49c0a6fdea93636f277eafa42f471af85485d6efc001cbea76ccc13ba4550944b93a4214dce6d95c144d5482bba95d94356532aeebd2fab6c7899dcd39c650dbcaa21683cb4a63216c1ed4e2e73240341e701ffd4dd579b6a19e760fa0978caa0a72a4d93a1079657b7db13346545b5e6c30ff596a9bb1509165ea818d3b254605366d73adeb848eeef469f23da21789ab124141c6984a1b139a7bb13433a3262767e0e19b3e2d0412ed7fbe518e0d3c57be8654e65d9c7ca486aa1d5a139ec10d819fa1967adb7ba3f362e6067a94fcfe705ef15e4e310bc0c4e634435d60bd140e0a420444084bfe90a407e11a47221be20ba5730c903f04dfc084a463a160c787a131790c4bfbaf3fb3a255dfbc721c7e4cffe8fb429ccd31c98ce1d8c952b46914fe79460f11226b3233f92d3d338ccf635f04acc08b965551cb703f5119573ca6176983da12f4ad703b3f95720ce9301f417a8382a20cd4f9aef3e9d11b2c7cf50aee48257792712e369daac354ce6ab1559f3211767d1b31d5d16ab1dea09482476bf589b588409ca497dfd9a188b9c9fa071ae55f83a29aae9d547bda503dce6b573e7f6342a67c03b2970d89c4a7d9ad36c086e39cf584b7bc19b7a4b7b349d554656ef75e2d2cd27272d763fedf60fda2a56ea945ae907fb24ccdb443af8513d81ce0f8372f2faf5c05dfc683aae059df4c14f70a183e751440569f808cf0a556b76dcc6a2714e8d3928f281fb4e8403117127346ecff1666a6caad0ac61d1854e77e0a73cf4d2d7ddb5e1f1f67d94f6cb8df94a87752f20dd292832f057adb570f8a38c06268cbcf32d5120f4e43e5e683e4e19b41ca968e7656b879a59a7cd1b22acdecaac8622c2b7c876bc2b892131abad09bf6c6627ce48f938730ec6b5951d83064e31c8f3937cd05b18f97e286efd9e826e0f6e43dbf95cab431f12562610b06a5b5b5815aea4f037cef6235b675ba9ec8baac9a656a11c4ad23393961823bb74b8d240725b56b172a7cb82a263ee57afdce880368767bf7ce7f3525eb1802d8b2f3f88f0e2ba99746b20a3e6acdd2f332a6e99ddb574cfa84c0756973b4c8e16864a36798af932a5e29c8c0d8851bae13ce71f812aefd438c716a727fcb2647f869a54f49d3b046ed3e8470140727e1fdcf9170c2c01549321c84ef83dd8392df7d8e94861a7953508acdca81b670556d04c8b6504d2d92122c752f045e69488a1abfe5f1f667063478f51ec6359d7efe1898274fa89ea4a91b8bbf95e05fef84bbc9a201e9f1a615939b0b45e6f7a50d7580521554f1076374692face5dfee5bfb3c573a87b1c96065301e756d278e37a601b545f4bd10ddd17dedade151cb7c33787400322ff6915854a6f91a9590f924accf55ea6b87749d3a783d655e0d620f0e96f78bb4b4450769533581da33be6bd20ec9b874a1c4423f5dcfe47d3ab9e87f2e94f6f868e7dcfe91bf256e0d13f6220215e17116595afd1cd9d107c9c04a4ab94d0653aae65374f0fa97b973865e1d37def7d94b8061e423efddb63121cee1a5943c6ee0ed057cdf7c3b551d820e142e695e25b7e5d18511764ce1176ac0e4921efb92b1586d76ebb892b9519380a7345996eef20634705401b110d2e7dab40d21d67782b4e5e37444306eb63740670834348d704e05066a26acddfa4576e065515f75db8f1943278396ddb1e9d7a4186db999b949cde7c23982a103e01ffa2931f92622438226640b289eeb27b11ec38a988c4375e9750acef4f276645051f73836010d8e8b0db85f881ab87d6717b80f53ed954ef23e926b565ac83e92982dc8888ee3acce59a2d517e9b057642f54506e36255182b4f77339328fcb612d5b877 +MD = 04cd3ed7eb0ebfdeb7d02f3afc216f14ab5298fe98bcffc74ed3091d675dee86 + +Len = 56984 +Msg = 65a5fe541f866e1106bd4362e008141594c2a2768fb65ec466312be2bd5b644f67c62158cf48b68c96067d717dd2d67586b76b2756d1b9a7de62cc5b3a2349e4d9d8b251df27e692c7aae72f4d43e03a8bb06782625fff091b83e1b84e67fc5203023aa718cd050ae3d10a0417043c4aecd51ced7a0638d166baf260c1cf837f2d6d40c142df1bdb30a26c59a5bcf28ff14f14d1686e6de7072f88bb5b02e8559f414c09250831eff7469794bd1408efe146d797f240a633460c2a31e4a933bba0a5e6e688ee4d2d7fe5131f28b4885406e1eba5e124e99c6b76612a236b6a987ac197c034397a7d12a56660ae4379a5a649da65fcc1400dbd97b40ee1f197d673bee600f292bdc7f6b11ac1166ae4ca0aa62c3d0dc0b26b8597ab45e6e2c15cd4c45c0c88a120f3742fb7a82ad0d0aa7a1f6797dac8479f0c9ece37fae7f112e5fa7f4dbe0daaead448c37fb01e452f3ddc15da2d82089197d3a64de5a82ee0ed89da2b5e7e63925e23c8ad71fb4c409d06bd6ecc96fc29715ebaed6ecc80ae3699f20f2e9e54d45ae94d9a3510ebc5e0c5e8bb7fab2c50e16892805ffcef640651515ff81284990fc1dbaec4042ca74f401d2910699eec2e19b76f7edf84eaa6d97e858285fbc7c6d4f951e58017cc32a0e420457a5ce6a198b021941e46285e5a01e7959dc247c7492feb622cb31dd10cc508e8836e27820e05fd68603e0775fc63eff802e0025a4905e401af088273ad4949bf2fda9619a23f6dc44e726d35e62b03755d5ddfc7fc04a48bb21ee462abf74b9323aa1aad7de5d76e8fec43e441e18dd25642c55589b393c7dcfe29e42d58762b0ae69d87c67fa52fccb472cb340df4d894969e4d199a1a7fd6af3b425bf233518a9406f0a6963ecfadd0e132e838a04fc06151f7d3429f79473900c45e50e8cb4bbe3d2e45b10a16d94a776084e9f9ff81acc69be0328c7ed8a562b15ef7ff62f66b2989ca5871ccf92a1e9f31a967af807ee58167f2475631fa48538271dede33a4b44b5d13dbb8b476bd3517ff522965df96f1910b3ac9f94099f0f344ef07a970c5ba286bb0a3b3383b6b5d732233d7d7c1328604cb9fd87f3fd1d9fb98a501d7452050e758559e7782892c8d3f967e6f4e8d6d65649f78c0213e5b1b437fe3e11ac300103c961c3c79d7abd6111a03ae254a6eb76c937e0a277ea12e575ef5972dec5e6cc22ed58e089d03d501860e9d2eb1b3814b41956639dbd4bc3c0ae20066e2928553e4727517225b1275a446425209614b687163db3f9b1c4b594b5024adefc5e358819bf98eafdc16d63a54a7779ca39e2ded90712107a06518e9e80ceb591f0c37cef723558cad688d11dfd486b09f00017cc530c7678991e0ab51bf0669c78a5a902ffa5501f89100f190cf688e7dfc4ce5aa211a03fe581a5a3345e867e6e52792ea867456e21799a10fa2037e661777f1e64b002228402cbe38a7779ba3a3089bd1d09bd29584bfeb035541c782dbe86822b7620e2fd37f9f06ec9d4c274e64728cdfb3be395fd99515ee09b3f8cf0812056b290d3a997bc5451c41c4996da2e0c2bca262f5315168ec774288f17b3fb638713b68711988f89e404b4922892cad1b6d5206f2818e2c31f7d68f9468f61e62d18267fddb0fffb85fa224ea2969a141fca9f258d7f8a98b77ac100a1d93102c91e551066776a33d81309d18d5c183d970916d4ebbf7a6a3feac537a2280553dbb4b70b34627acd2aedcfbd5169c1d8ed2f1c1fcb6f3ed2094be9f0d0023b53f569e0a2dff88e221ef8e88487262350529b0348b4f5444ab41ca3eea3ee6f7d76bc5689c1a030cd24b2e8a9a737b94e97db80f230f8274ec0eb8763b6430e5af01a8d2271ffff48dcba54af2a15002e0d7f09aeb7de6458a02709025fb68456f202f8ff697e460f976d91079834747923e401c0c21e67e2e26dbd3d28af8e0bfd042e9320a1919be54b32456a1c92aa9ba90dfae83ebe97f80df896a99477e451ac92603fe08e7856d1bcdb2833f74ca53c829f72c5e4c261b65f814b0bde7ac05ac8f90fd1891f6cafa54b5b20fed9f12d14312a3a570cafc566af958c2e29a9ad36c028eb1e1b872360186b5a35dd0fe917525702a1d142d98254118be38b8e02605803a3b9d746db91c4e14618c051ff106591c531aabb51572137919b1addf8ea133871e8ed1c469ed3458b342e57ed940d52e8a31399cb39897023b15219ff18a43ffc37c787e30bc6108004618223269c22e362863ea5ce1f73b8d2cbe293906d72a902f10a3f5d0fdacaf614714e2ca47a4bec8d3a8f79358ac75be29844c5e178fee6e423ca0722fcc2a5b1a5ad3ab8d198cd931de6cf7e5de5c920db814da2cb64602b64f18ea1ff1d8fc38feeb54bb1507232492a355c358ab7110ce77c13e27feb413e74780f6a2210b4a07140cfa1e976d55ce83f51da2c823dacd5f5d746b804a0109147cdc686d52f77e351c72bea4816c99f61e19451d7014bdb3f4f709328c2abf6725f8ca2497e86a36cc4a7c962510fce419dfc8102066a65bcfef897e44331028c47350aea3c4d3fe64abe0d622e9fd332f98b30bfa77913e368374cb38c7053fa17482743e34c2772cbc73ca40a0a7cca56c8f75c7f0854670db5080318ca4950424e9dc2fe03d886ca6bcdb46ddff97c682e2b64f788b5ac720a807f72af71035ab0c4f406f4f196b904471fe470f7cd90337365ab8aa62817a01c7524a06997b307336378afd1372a391f52e87de642516135cb058ea47e710e5280a94d71920dba7f7ddd8515cc9062dcd9f457435f3e4009218ff53ef410bdb92e6af75766ad52ffcfa0252ddb8e2a0631928dad98b9585405c55ee43d7926c6db044e59aa24693ab56af087e875f701e64d8173635502bcc4204c22bf0ce1e212efa306b0f565c6eb8887c287da4276547fe3336393d789f93b1d790d6e77c16297a5fd3fb2b11acea34b5c1e3da4ca28b4237c0de85f62116063658cf040bb5686b7ab9acf03accb25cbb320128683cf84b2abb6e502dba95abe66d244d5564b57687046bcb6038d9a897641fb7029b56c214112fc5a4d3d648efb51debe18cd643909e80e40a5727bf503e85afa2276d4efda96a0de3d2a3845a1a0106379694799c6e3364c091634aeea77b37d1480598ee6b664f7221c2072e831ac5e0e8b7c0b45ccc730a4e57f07a8948771566e547ee3f6db4da26fb7a73d7ae5163ec07c2df50923871f6c95afbcb3598f9e9d604060dc564a24b1885320006d248094c242532cedc7cf1823079558ac20239a0773dbdb78652f7dfcf72e56a6f18a64d918eeac986b4a84a19fd0f8f1cbabe0b479b378b4372911a013b6e21505a2dd3af2361c85f9f81e8bd8de18bcfa8e0df1d286389c28b838fc29583759e9605a626eb7d168fc7e526c534b3c8025408e3a0ed2af92c243407bb890cac8154968e9fee27fa3db43dcad9f76d8cde479ce079f17222a8c60c49941ef10f201d4853c23548bb92ecef9da0e0f7208b08069e4f3c254d5ff8731ff45d1ae6a47883bc36c7c6a2b5f96567c3f639cc301face5cbd729c27842d14f834c707934eeaf92a4ad8bf7ce6305f0e9411bd7f615f87d95c968c91c2c8ea2eaf6d90ff906349db3ed7d0207b039ffbbca868b0471502d541ac8aa733f12e0d1603ef21b487aa50c91860a866a685ee198602e83bb1ebeb0d333aca402c6d1df948868c13cea7256a08d597318f9d302b393099a7cc9f953fb9018d8fe103cbd999dba136beacb3a237935f7435627c6240564723ab9a3e29ac73636b959eb137767303a5ce37a602134e73a72e622d7f2a0873280568708b9bf4ee7bd0aa48836cd115e973e456fa2a5b6632d118bda254ab903d3086c6b5e62a812928930c4dfb6a7a6a561f510afb4ec9afd3f2c7ac6ed430dbd3719b394978ce0be4057707a0c383b0db652ea4e49d00968d8cb5ddc706d77c54b578960464179cb95e0340db60d4557a323a68a4ca9d5f844312b6fbb7f6a74acee95cc57100441f295b7a29c6eeb0c9232eb68a5c02935ec268d88b6c10d50c2a67edfb341a9a6be3ca240a6a255b3ea4562f23d5d2ba636712a2d497b89e3f647eca1401c9284619e9cf0bcf3acd41325b22ffac703d38bdcac695cf405b5ae98891be7e8e46243834eb9c6a718f7759a8427c548da44542db841d775aa4c5362fa5491efcac9ccb35fa3ac07c0a5786b80e38726d882f72df9bfa2469f324e6dea5424776a4064f578b6565bcd6584624d6a26aa2414dea414eaa5af0def0581ff248ac9ec4f731241fbaceb66c0014594c48c1ce7826f5ab4cac9f81c09e266e1cba92d797e61d3617997feb43d57ddfcfa9fc4485514167f68f468f30a4ce339516bea395696fd8138fddedf64eef22e1349e9701434a21dcb0f48bb7aabc2afbfb64a535e7a5b4841c8d10ebd2e4cd11770d5864736c437fb03e09bdf66c9ea1c7493ef1e75b45f9bde2069d180b28e0ffeceb37684457501b678bcc3e7c193708c0e371ff0cf6d4e291319274aed0d02da1d1f2a85ec7ee4125846ad957151c4e60351e851751b638ff14647f5c6f5f8ec0af1eaa183fbacfec86026d8a3cd1f6aba6502026e11e1fa0417baea02eff91cdc523f40d09362610f32b5181daf89007a9cf36982f6d05192b507906ca20e52dd69b0ca9def0d2576e5e2bda89e0a908d1d45f07973397ce448b64ecbb73e76535fc5a7b0b6b53145a1352f0c42ab0239117ffe1a2f236242f7508ee6d59270875b0640d191626dc48d37d71144733ec7a02afa2ed396edf3ea5cb786a51028c186fcfbca281dc13ad26f1b7f4c6b2c7ff1cd4e7d069a04414a623173cec28749072e416222ed15f19765641d0199b5a82df061cf71388f723fea6375f9b0736607247b6028db512f05a21bb40c07bf8b7b1c9becbb7777cff07db754cee1d561ae670f8de1ee5d3d44ada60c14bd337104d7649c8d60a2a086a294d7f45d9682237e67b1f62e21637b0e6fedc2c1faa0f0ac24a68ff9f92d28e262c8142c9c118ff1e9940ea386e8d34edc1fbe1dfa61662043d3684c64bdffc48aedd557d1561949fffdd256721673f45769afd91dfb8ebd29ebc161cc9a33d0720ee0e41c99ea0d10b5e94ece33838847953efb4ab8910a3fb6413e170aeb8e83f5dcde642129c58385fd9383882d931469128d69de978febfb91ed2f564f872569724a9337fffac233b32e785d979c25aed49661b6c7d596845876fac68842c1314a32902394323487b52694fae92be42b2b1f1c884a63a9173fdf62a1be47bd160b9d432d0ff8414bab83c1a64cc8b8aac02f819c48c18a7dee324e31181f83e05e94949d99d151453c4ee6aae8fc09f13ace7839e878a37e0c77a5bcbf517957ea1e6bba5947cc3e118eea4ee44e40ca4204e9a8520f5be141b4518bdb6509425843b0cd78e11bffd24bb7da6847c3fb80dabc32af0e197037f339e693e49a6b4f0b4b1e1d28a44d268d34969e6dfb4c9b57d91d27fe47f1933b45140f559398787f24f571a2d0f3b55d49caac4b50873c8429b1e1664c2d00955d5f78405e927ba6249a9cd907b728c2debdba662b720a67923806ce90ec2407690df62d6221ff893154c555b26327c5dbb8f148f2d7ae0bfdf8bdbe7bf5a79c5167b0a5070cac2e346d149c37bd596d280378780f7ccf75533a2fbf75123259fdb5cf2fb51d2b9f162bb238008e67c2aee6787ee82916af7a468358e6096d48563f7a54d41a24e4bdd7c7b1739df8cc53a919e3e7a82ac05c64e21236a3ff70424cda9bcccc3e0313b87a8dfab4b5940093822e72c0b5b0e0dc7474cda891d9aa26178c06fb2206ff18f456fc9946219eeddce7f3385c87edf5600613e0ca8c771358afe86f78f4683d5d93e115527b13ff4e96d1d9c94e6df9cf50711353908f5cc58ddbefe7d63870dccd10f081ab491101c4746ba40d472ee8db4d08d3eddc4987ad484517b356f9998bf3f27db8266b1df844b694ca63ddd42e1088f3ac4521c6979537b193aa20bd55f1e3ebaa9455c9bba981428fa94dbad1235b5bd4b12ea9d42c8e5d7f1c2d70b3728a768a7a162d940b96566301c8c34dec49b26d0ab659eb7311c27d9467d92edeb0c45fbff7720bd2bb774f53941729d51aa0803702fe64d48a8998fa18214d9e1d7d314d40c0a866b94d5987fadded4595cf13205abfc8b5bf59d536866f9918994a080b393ef42f57818c85423e22a483e431ad05c49e807adb3e30f9ec99b5ecd3ede1291576965fbbed35b4614f59ac8adfc64d366e9c81b7dad1bbc0d5ddddbfe7b75a6cb60197a2867f986ffcced8672753783dc1719c94b1ff1312d5f936b6ff75126c3dd9c9df5e4c358fb16acf23103ccf001d67951acca3480a226fbd623c049a3d9287bb1a7d82d4eaf7955867a2699aa80de633f232a6a3d243a93b68a64a3a063e7136faec0bbda755b73ddbe6c2215c16563dc4ebee6c8fc00d7773453039f0c7010127b2cd38ef54384426e330ab45c21f7c370065eb6c22053b29229ee122b79ee64ad7b28dea7a8136f0a299828a98a9b8f478f2678feff84d32447d78c495afab0b64a103bf52f8dae329e7ec55205db8a35b7c2a20b24e7637b3b34700ea9e19116081e3976106faa5820032cbe3a146ebb2ed7a48f06e7ee0782a96fc3dd2f805d33c759931135cdeb5ce9c1668de2874842ca02e33c22dd49ac8ade016b3108ec5b901ee4988c937c837715e377d27e7d921e4fc02b14bbc2177d3d5fda928553fe0cfbd31cb0957c525fbcad9e40becb9b48dd7e6a39f3f161e51037b1c0a014899272f7246e4e8b37f8083d57d9c2a2dcde5e96600f20680a56f9117747c3be9cc506c9360228f9b2d49b1b3afa24a3c54325a0a310cb867f375a75a1947ab2961939b1c808af684169e7afce1e4f3ef31bd525a9cb5fed3f2ab6fcb7433f8104038e49510e6c57624c609377d2bce4d4ccef8dfaab580cd89590ef2eb07cba65287708777fca47a3e0b84ecea3f835e8dac7420c3d3e55ca0c6af57e78dcbf47dc7677a1d9439964cb314a490e8b92adda1efa550d8d689203b7883d18ba101aa42f1f46a782fd43707e0e5d7ee18ba22f391f7b78dfa5bef0091fd0fcaf4d5c23e347fc66f2c3ce54f113a27184a1546eb819d62b7fadaf65d234d0b126d79ab045ba29940d8d53fd3ce28e82ff4432fd1e81fb7217d0e1d9a56fc2b2ab4f44fdc8ce64bb4dda72dda403982fcc14dc7eded0620922c004dfe5191d9dc704e940defd14493e0ba98ae8ef45d44563af486b9d904d1afb76cd23d947cee499064e1aeedeca58c176695e1e1e1d25e12a0e67320cba7ad3b635e418d7b29e9c1a69eeec2acb186c581d86189776d7fddb2534464dcdcce951bea86054055f5e9428ddad6ea8179cccfbf357385dc61a41216542ba138bbcc7bbe3484323a18101ff697b40fdb0b353a91862775e8ad6fa877ca0081831ce86a227290b99ff83f272150e18488e407a9987b2ead590b445cbdce68e48498f2d25d68b33d4e3d7e41552be6b050ad4a031a3d0f97f7222d16328aed3204d8f19ab83f74260d90d355dc504cfafa0e063260f35299899b31be1c2316d4cb84edaa7b1f5bdda599484cfce89bcc50ae441db2c6801dd91d583cc4c46b30a143eeeaee2ff1c8deffe40cfe1b598d18360cac57de208aad51ab78729375af4ebdfd425898bd507f6aaf7e2a1010a41b4d64c79962ba48cedf315a6eb8bbb9999b219a038148dd5284b28ac7f0477b219c5656be7bd7bf046ef3cbff5cc6b74b8563da351318d81df2f4191fe28779f2cbe9410f50fe5716a6f7b16ea71c0f2c22c9ea3776b7a7a95f7d11780f570655812570d40ab778ce3147f604c0472b041b5eb251d1adb4be71565c1b9f3f8a136613cc55d08a8af2b4eb8006d0cf719b17271aca4c806623d086e050b9c76df423ba3bd9cb00f54bdae939bffe3a4bb9bf2e0bec11ba24a22515875e857818c06023a6aa22a021a1484b077673122025bb7a6bfd45e25801180c378f2cd9f13fc454f60efef276bca919d47256de58a8b2132446138169095072da29d6736139f857114e877f5d63a35987fcd0275b0a4d021c0fa11ebf82764f5775aaccd175a434e1b2e4ce3c60de15085c09749013334e3da01741c23431ac96bbd16ea7bc6ff14d813e687c7903543fda284d618a0cff6d409e73dae72a907f4373e14dd601983c05bcd38677ba1f14be563a3539821e96385e3a6f620903fa54b6ab298b033098848799c121aa7d6f4fbac475e63bb19fd17e21e96e750def37c556a5a31dc24847c64194417c7638d67d72875adfc3705026adb0d316b74635c66a27e5f6553496a254699dd812579bc6cdd45d1759f10080682c599508e794e26d191a37f144b94359a7ff645ab4e6be5cc4b78b7d0a28b1d9c5c79a09ba9c40e9e20a879e60f7d0d8b52dcb5537ff8ca7c02fe236a30fe488e4e7ccc0a8970965ea7d8f657099725afdefb30bc92d5a362e8ec48da4fe3ffeef7fd43797cb646a993bf74d5ce75066e60fc58550ba4d92779cdb88f53deac25058597670817a7f570b665f0c299384d853a8cab5ec8f420421cc327e140e5c6d3a04831c01722c8cb784a268a7623c3b8504e2e10c48ce3ce5429028cbd355b0ed7d68829375f9a005fa1e59a9e617786b83d6bb619fbf86afe3acd9a9603480386b2d897fab6ffbbe70dbc576469cf5cecbad2a35bd9b4c49578d7af7de8144e477d81b0c3b1505aa8de29657ab541b75846f18cecaedf579473bf4fe74c566b948731f844e732790fa3ab2943dc5522a57256c75ed3ae9085bbf2d034b864d7f87057c2d0b12c7395feb0375237903b3ebd60e724e0c8fbe3a200f518a4f61fedb971c509b794f6e62fe6f4186f894d9ea8ae50d16ea51628d66812f5aa50afeed30e634253025f5ae7ae0428dc86f64f949db8e6d5d96befb996ae4e312b04664d8c223d2c0b396e9673dbe6173fa1cc21cd73c7aecc7982dc2b4b94c1dbb9fe9979863cab05f1bbccd6efe29819fc9ed0ac261661f4ab9cae946f6be4f93d12476503d3488934aceb55a4a0e78c532221c8243587e88e97b1408e3602ea0a4bc7cd3f938d1b6edc826ebea38e2d3200859002a7992e9efe84de2c75b444be05ab207df001230ca51290825ce46335b47c92460f1e2d695b89bbcecd619fa4ca51ed537b1d368aa12c59944f92d4cab8874d72ce7f6b5a194077e98fa3316b146ca2548769dc854b202878fe01e86d87363ffd58357efdc23971014ef1c08d7e4bee05b75f6b792dae8b84eaca149a9af9d85a4ef8ced0e0e555aa8dc5c37862801ecb8d6699d2a328015c9843efde7e52a52e1501d16fffc49459be9790a86b99a33a7c27be3e561d18648917e0a5abc134dd4d193d176967ab73740fdeb9e41949c7061b6ef8b10e3f412fae8d9cadd5f5dc49775883d84f099c20670419865f40e5adaa12ae4e6bf4570e805d0ffef166cfbcd4ba21a6db3d4856658733acfc473ae56c4fcb78c6c63aa835b58c09b4161bf999e87d6f9cc4ec8863feb4d270cb2b5fca8cecea9f23408f274dad789e6235923f49e39d142f1d38eac109814d2b3b4f5d406efe65aa2d15ed8bc0a60109c1194d8510a9d1da4eda7284ae53f205ef668d00ee3ebab944fee0d6822c8c4b32e14cf071304654e5ff93a01fa50fd9bc27e254c725fedf1c8cb9d44e76b0c50faca63291aaf23d972ab6a9da0ee72525f5e5a2a63eb29a3851c10ba20eeef5bbbdf1b1de8465f2c6be540869fc1856b1632f70e80366691ce0aec3097fc76bdba7b7f4c45701f2f95d14525bf7240ce2f1f85628fe9aca3ebbdbb10123ba75c3fc4181ef8d56dca379400e0c8a9ab63f24f8b8d59ab03c1235c04c15a538c2191e56dfccb1e50e59859f920810dcd13a6ea91f7a62574d3bf1050ab37ed2df4fa04074c84f3d1680146b94eb347aec495171f083efe06c10700263670b190bec04a6c77ecfbf63bba83c7d026ff565f05ffbe28e8dfc27343550e +MD = 64667814f43419ba8587628c6422b0facc4b2181a1b82dc4673c052eb0667320 + +Len = 58080 +Msg = 43dd8df58008a7132368e86d0057d2cec39aa4c7cbe6d0523ca2afb54fef74a9ede65fbc7d2033f4fa7ce9b5481ca6e4c8b1eb4d2af90b428286e3859ec0c569972db533a7f0d8c63a90298048fb6e5fe1cb6b680ac75549c7ad893d792f7e306a3bf824a77f7fd30e2d1095a7fb1285386f8bdf135994ad33a10ba3874287478e97915524d611619cda06be0e257a9ff225b67ceeb6b2b7ede9cf807103c8f62ac9e68ec7fb74b90c1f73c1257f8ff43a75510543e695af1e0d3f9bde7a2a84675a619938f892238784bf67931437ce36e8c543b9f227dded95c1be77ae933b6cd1693d1ed551e63592527801e95b730e057afef9e14e88830abfafe4a7ec6162b6654121989b4c3dd095bc1608e42ceb54d8feabbbf4fa07f4a037cc6d1e3f7092bf6eea4b579bc7c6eefb7b78b841f55e480a76890079a2d9cc1ed809101dbfebde8c21f56d1cfdfdc6fcd741c1fa53aa30ec02525a4e7c43ab2caf82a943764c2a636e9fc41705fc8688d36ce59f2ec1f96af81eeac1bcb9a529f9e0d3f8be3a0bba775046d4074b946717ff0e77ad290c4d00f598198bc422dc602b7585bf3fe95ae710da9a2c735a614a0523cbf96ccf5cc1e04ca010eb8a0e8a6c7632a0e22c0c64e768b39bfb3e3d14830ce33911ac61e4e6ee9c74b645871fabc0478aac3c9696ded9657d6baac51f83b10796a10a2210106656deadbb0fc8ee3a0ca42382c027fc13f9fa4c05bf100cfa7f38a35169ee659c167759546e2d3fccc917d16454bc4affb73925b7f49227cf92469fe8fc26ed78246641796bf5a55ec50a3e4b1800ce85e6637e282c4bdb188ae81e39a35fb0e3c7d4ed90d0c829d849a6f0a0d698928ecf9fdfc02fe330bdad48a7ab2841b7c348e9e6036350d1229d1271c9542f9e00bb16d1e7c4032ea6448bc2a652760902efccb338ed32a725097749305b6bf8c5f0f0db05b553debb96dcf792e8a3ae8604a6dc993519b3c7d5fdfe3bb2f4aac3b7548682c87a47e5ed61cfd8b373af39cf9eea8c05abfcf148cb1a542373bce4576a59c6c621710a8f42d1de7b8b130198dd647b23908a8cab0a25e27490340e1a5bdc3976ef6513c5a8860d0796e2c8a68bd2cd5871657e46e1a54d6ef21c2b464f9743a28d2ae9d7bb74cd213a247542cfbcea6cf696b1617924fcd9427b22246d134d10a2c8720da225878f1fe2f0b4d1ab3a27c6240b44fa29597d275adbfcded7bd89d74898af8621a11aee242144ba2725518a1776378b3dcb214ac03e16ca6bfdd5d4b142048eee858a4ff0f03ab2b613b1e977d98154e7ba8f52b533b9585873bc400b5855e31699a7e95045dde0e26c108c4d1b6b7eaf8e8de842a22eb0258906c35fc1eaac214739654b08766d3298361aa0263d311db0e4b46d73befb5aa67a06b4670b1295f6076ae9214d802effeb3c79e13f94ba865c5d408eae618031e2b11231003dfc0ddaa13378aa425f09f79adf34b8d00d79bc8cc3db49091e94046c81071054ddf67ab230f5d5db4c1f21dbda07f20c9ef2cee8fd43d61cbc36a8dd0ad1857fc118af44e98115727ea732a872423371f657581af6ac9cc1e27f98afb477a5e82fdb41ff6402b42f7b0bf3a8b0cec4279c1123c9b600e42119d79b8888e2b9b4afa7f78dab62f83bcdb129849b91ed551889f79e4625f663e8a678118cf8080ec9e49a93c6872abefb039fe33c74f524f3269b41ad051ab1d854f8f1caa2dc1c06faf2bcbb5b91df8e671c6e995f26bbb44fd959f38698307049e3d04ac97b06ed52c7ad94c477c70d4767cdbc3bc643e36e778e2192b70a38ee015813532ef50752e11159ac229e000a49a7adee1ee309ea3e8a3d10c167b8a9192f2c2a3d11da63088e10fadb8bf0188aa4726276c4ad2bf6f252e7fc6e79e3f5fda034f081f0ee03ccc396eab664d9f26d157d160d579967716501b14802055b6b745b8f6ed1599b7479679748e4b548aa9e2945e78f9c58ad8045271cdb751420b28561ff030d982e3b572a69f8145602134d4c7ade9c934eaa9ba8138d9de8c5629caf5d1073c2a1104dea40295ee21e7ed173edcb01defdeceb7a559fe49e028a87c1af80f2e076003221f6fefbb5a6e69c0268df3302624d1de60999b1007e342edf1ed9f1bc5513ec15b20053974154984115a09ac724d51a3458046ed4e2677951d2a5da1ce452640e9db5ce5097cfac781a989ef4eb8cc8ac696682e3d52c505ef26b14c9cec48256dfa7d5a7515fc0ee9f4fa853617b1096654a55f5008a9b50a6b4078bb9712f349f5ece65170cbdeccd4c1eaa2ca9da3973354fd20b89426d18071b294e6251ef0561235290df89bacb176ac2f41e0fdebcb1d8419d312dfe6decb86d349ed1d03b383a3665df0da0c238f26362e395cd6745580b5e8b454ad0eb461d132d981f666b7dd93e1531e6da3720541dff564e9d7a37f8f89e709b678d2d0295188d24b1825203c187ded33a9d5b5fce7a39a986d6ddd0107297375a59d5e4606697264206237b993ffab00bf20a4a1d5d252549e3b25b5110a367d2d8a78b1c1fa06f417f570a6c456ec574bc97deb1af040b0f291f61607f7a73f79009be724c8f45d7735678e39f235a9e8569e33378bda3ff2f8aa9e8c706a3f00b644709f44cf12c6c888da55700b7b1d4e8214ac03835427d5cfc8ff12d3fe6d121ec8b1fbeba67f155105b75ec24d4327c609f905d09ff9bfe22fd04d98e0068a6769dd5cfeab08b25cbacffd1e82f268d67daef14675f12d6e3db08f1d9675a5dace91f66c831c0608441ff964ceb3883ffa2e645968a684e07d1065d68422fac5817046b9b0f1b6e04c17c239830f0c6f09f7cd8dfa728cd5586040583ba6dfd40cf8dc7ac7521b713d57f601425d7be027ab9b58aded7ba96a30dd172f79eb72db8c16043895ca478250f3507f374d4fcdba5c4df59ff7f92cf26a97c204942e87aa81fa773539bfd58348abbc14f6ea86949ee253d278311b35975eb5df70636be4aec225c8e056816f64776b8f1f6cccdac19a6b5d82edbf7ad1d05d82f6be22cb0b0fa6c964b82095e548100e1d231afd62ea8e699e8b7422b8913b679d9b26be15178caf2d313d7739924c0a76c9fb5d01674fbf2196f3cd9a15c225db87024e5b9e49f2a07e3283efea621cc2ade8aa1b7521a6b29c98ec14e2a426470e2fec5ce8612c74eb9a5c56c514ad776b5d451fb896c8d818ee0eb76c33e1569d1a2887aa54c500f5ff512c96b6350b7ed3ce9c96318df8786d95d02703ff90b04b736a48b744db49bc12dff3d96c0544e6970082646eaa4782221db796d96bf45e6d8347eb346a436b11cf40f09aeb7a004eea21b2034402d633fe726ef77eb5ad77411c731c447f86ce99229e4a247abb46c7e8acb47c46e43bd10bfee21f90c311525ae154e05a89b9cbfd250246c3722f084bb72ab96016aa53d8b911e4f239cc0577a886d4610e53b655375bd8e0bf5859cf53be620ae81ff56d301f45767c27f8f75b1a872f6f3d06bf47af415f0d630ae824e82c93f30d142df652e77a04859b5e5b987f1236c62b9fd87526aae6dfba2a8d407f87a1e25ebf7e6511995d957b213c7922b5ff9fa37b6c65ef30d61ed60b0f5fb1729f4023863ace7a40f1b7f6c4704528971429fcd675da019d55b0ed1e2d8e88d125971116ade7880d6b6dbccc9974e7123ee59635774a044cd0267db85a655c2fef6785e56a48a14b25373bae0a90e4c3ba630e1cf34e7ddbeffff67e386cb1eb47322076d27a7ca6b9a4d1fd5621b8382112d2f17c4fc4a70f9df5e42a1d109fe7774f5f88f5609c83273e1f0e9fc7cc0d85735774d67f5ab990da6eb1fefeba2aa780e3e04203a92c4edea796739a1bda2b7dc37f7b144378793292627ad2c69b5353b89ad8bc391f7c120b8035b594018530a9ee961a1db6a79cd3ae194341b40b3651fb2210d8d74f96df5e6e90b13e235a8f54cff7360eac57c71762b6b80f2fb72493c6a804ee29db877376b21fca7659f844713228fb0811d110efa3a5f74144c4f73ed849beab3e9871f6a02c40fe9d5930326162e64b49863d08a07826d06d9797e32823e3445e76dc66d1633c4cb346aa8bfb605ae67d5afe5623baf86da030f85c1e0fd675a9c7153fcc5106b13a3515d676cde34a1bb3d750b3faf6797b058b22308a12bfbefdbef9f7725afc7098f4aa5a07fa16a3454a70b7a4ab745ca9d2bdf60f22a2fc8f2c1df943835f1506d9801b8b19bca283da3ec53471fed3826187d52b709fe0ffff2438412a8985f336f031d3ccaca7d41923534704695e23ba28545ba7370ac4aa954af7baec51e29f63437e8d8711ca69c6f848bd548b024f180a1c10e8e881b0f987e3aef7f7596561b6e7d6ac8edb4e821aa61730b8a282cf6cd95825f89ba4c99571915ce4cc4b6412bc22bd5d8b59fd310bac9e858917b6d33fe78eb986e87dfa3dec5ba8bf93f2cd480c0a2c6efe80e1d5e7ee602a5076f3ac3983b9e81e8f0cb52a94c1a7e1966d37fd4379dabec5839143b0d70adf8834aae895681399856353d698be19b6b778e870d9a4731d23ccca5a8668bf07632cb85f4442bdfbf994b67ad80c9975de56f6013d5aac9c33f3eda6cf839b8a8022511800e82ba843f74971c31b8bc193adcd18ff0b0bbe7ebf87930cc634bb67dc11ad6bb701410d217975ea89750c4fd3fa429f1404e65c7604a9be8f2f2c92b05689d53dc338bda9e2d1ced4f9c89b7ff9f88e241cc665bdf175656ccf509935ac27edfad601cdd7022fe06c6e88eef848b55ca9d7b1130dea6081edb9c9d3d29f12166cde3eb65f53dabfde67cfb2d362f37b23ba48fcdc3c05a46052fadb1d8be2df0230421f99548ccda969ff9fa7d55d7a1038e07baf72df4d834f56378d1ee4b86970be622b80908a3bd9ab0dcc1c3dc9fdd83a280e3b57ddb4f37e5197a4c222e113f6166c64a086245b5475d6a42efb5b1c988a6ee209e583e3d5b1c3d9f5bf279eabb5027d1731e1538e605e09ab8e967a9e0b47f35fe56e94fee0a81ae9ddab7521b654366f2e0156bb75b8b93de45e76bd23300bd46dd38b5c569ad4291edb4bfaa2f83d32daf2d96dfe7d4f50ad1195788aad8811df613b60ac42b23de33567b90354ddfcb93450089312187e394e6b527a16f462ca7629ce2a062192db486cdf4ff0a51759445f2dbc2db12129634ccdaa02dd71afa0dad7787baec26792dfcfe1623f2d2bb15b4fd216b5e3edfede5c7307afb90f7fc32f1009b6370893151d801fe8a8b0f9e8e18d637331078f74816d8be7936a5177278946d48b4ec7c14a74805e14798c6c8546aa95930683c3df021611ab30c47b732c9986199abf48d96749fbeaf5f76a9d864289745b7a20c7d92cba6b03472474a2a8477c8cd8303ca0c33ea6a6b977acd4c1bb7f76d13fce4b364e5d426816be63c9a51e85a10c06e982b2e21c50f845aabec7ff09376564e0c959ec8e95d6b2f8940b9a25b820aa8a0ee507c73c80ca80702b8d531b263e226c49b3385ec8f4c98df759ed7c32aa0ade418227fa85ddfebc52a514db168c9885ba2be03181f65f1e04e83d6ba6880467550bcf099be26dc9d9c0af15ab02abac07c116ac862a41da90cfa604f0b6df409bef1cf8276a564f2d7a82495822e455df1d3c2e4a12fa3a477aa7e6a5d913e082c6a234ace850a2ca4d4ef4a25fcb098c8ac1353242e0b38563c37f3a414acda60cff4db0eee56b3c9365861e2be83dbcb4666ff33cadecc735794d2291ec6e722c74b1c7e07d1f00e756ac30199478dc046c2cf162aa2ca94a49bf034d515983cfa2ff565f902493d392a56cab78315705730ab1478e29982ca56330c6420537411a84e0deb72271c2ca2038440bfdda31fb77b77d923a10572cd84fbf16f8194b4be0fbc06a7f375f4d9b3795c834c20465f278577ef4ae44407cc47a58b8b628a7a21bb722b130e39d74cef3158cab1753098877acdfce9e70cf139a7fbd7a73ce36a525686f1afa4a5b72feac5bf1c5433b4c40a461fda04e4dd192047cf2a7101d3c8da3ef322dc4add81ad53932a8a6f64864de11b804298762f37f8dab5d2dd446728dd832e8acea52ca288afa3c0ec91136e2658a34a2ea6c215955f0e077ea67565eb089a563af67af3ef794f9db321b5939d3f0bc3b1531ce1a6c8feb7eddf3bbceeea2fe795bab1c50d5af6cacbfeb1e5cf367f56266783c4b47c4d8a30d901537090b5e6e7d81a436cbb5fee3c0e528b43a6c9ab97c940e646e3c32a517a0f52f864f4fa3838fd92930253b20f3bdfad81f8af690b619b6ee465283c57acace20fcdb3cc91c2a2dd0a999abe4b6b9f751292fa398b17db84166a436b4b56212b3b33bc04f95e504a5ae6fcb9f888db097dde72c21ed34a52655add5c3460b75407fed54979f451010a53414b1f79dc914a42deadcc7d2efd589dbeba1ab1b385f897c743186ceb2ba246301dc726e736022807a19dfdd0b0789bae2b063360e89864599bdeae67f0aa2992d7f877471f2cf7b6479a3b78914bbd7557fecd05a26ece55f9d3a20d77ab632f21ba5442765017b147ca206ec85b69dae80d67e9de023e8104003124e92d5ccfa116a52260f6f0c0483692f97e3008a78338ea55c2dd1aa7656c41f66db67c3a0213522d07a7eaadf2e47a62db5003a2d2893c917686cb8dc41fbbc92cd02b37eaba43ac93ea6d3feedec1f20645c0947d0746e52385bafcc72288e64e02d190021261e62c48e13de42c4dee2897a9442cbaf099f1634ebb197c8e95fad4d60bf1239225f848ae707bd408a168cc257c86ab23f407a7ee946035b71d58cfa2715ff5bfaf22723ca05ce0d952ef6e9b0233e1c53f8ed9044d4556eac8917a9d89f691d1ced04ef3942f57a748e405759fdc64bfc3ad82f7af6fe60fdccd5e301d5bfeaec72b653c169b425ccc70171a1b293dfac58d292f8287ed0da23301c1f3394440e55a3e7dec48a8df26bb2ef23ec1735d905556148e3474ce62ecedbad5366c6d6f85611fdfdf91189eecd165d04d0ecf6b2e910e9a1f8139641faa8189fa7c1facd6578bb70806ef7c2c89db9874173a9d40638570ef1f36eff5be80d72e7f3de573a7283c6a0d4c07a2dcbc5fdf95856fb253e1d64d53ad4c96b31d897a7aaf6384d95d36aeb11788775470ed35909829adea8a95e12786c42911c26585775d6b3276946c7bf73847d2795f0a1f115b1358aee87552a2a99dd75ed635f87d2f48a40534a77ae9978cdcd2f27e451eb674dc29633d49ccff1fc724c1bf7a950d40040ea5af538e1d9fbce78f104ec2919660e364b76dae6e9422eaeaccb4c6df9d77194e4cadeeb0c79b40a08ae302d4bf0d6351a9674fdf420f39bb234e188da527af99463012394ea1668bb2abe867380b3194dcdeb83b72b7989b8eef93ffa13c57ed648501a17af5e0ba514f7b324981d593187bef686d418ff2d33f401dd8de9ab26f54c3ce94c036932e76c31d3997d7b824e6fe5078d6a629bbe826d09433ff51304461aae329f18013c9c9115277c06acac6ecd9de9e66a60e8f4dfe1b660e306cfee21cb15998e7c6ef94f4da461810d0c3c2ede5c056d294dfbe90b79d4fb8ee2a4e0b4478b33210912cb01a2f6514ff868773d765ff15147d806fad004b517d6fae61e6adcac8b9579a2b5a5831dd1fb74353fab4e7d858149b8148b98964e0750905dc20661189e8e54fe2e903d3f8feff7597d69881264a18b0cfed9157e0e567df71fa0e7548ed1502f90b645e5101c2c1f5f29a7a47c7fee389c7ec944567d0d7ec634b5cbd0d332ee8e5dbe6f46b941f5e31732983345502bf6c2181d7a24dd59482a42eb1f146baf8a1f0d3a7e27d7718bbadf8a13926f4ba07b8885d3fe5c1b380a153ec41568e6e642b8d330e86b16cb7cf4e6b7d78a3bfbe3a10a1e5a1838f84ca3436a46c929559157c6099b6b5a24d6292a7a953f619b92e80693d870370b7a83757c28eaeb4a53509f528166b02a7ed2e1e64bfd50e211c427eefa22aa041c2c51644c7ca1273139abc66acbbd4eaf8899857c528e81e8cbda8a2f7de6649a0473cd21ccef8e938997bf8828e5f410c0bdd2a6cd7edd70759aefe900809f7cb23911397a2ae2f2b6cfb89a0caecd2b01cb484bdcb6675147e5aad7491d274cac3ddb03f2e7c6e747d04bf0c59c3c56c24e60dbeea9a1f3c947254ab5f09e8258de8501c5baace9c325e42d0212c43c88b3c6e791dd3fe0603bf9e3e5cf67b65eb7a9c370f7f762af5d0bbf40c6f744db97b4ff64d573afa340930346ee05311445a3c9733448fa62d23d27e01d37f82176e573c6070faa08d18b5957f119bb1ff51d744b0424099411f2e78e7a18cef0bdc2f534063668177b3d36976cf79ce862715476cbeb28a9b8c78e9a822c51dfe8c7f43d37ba8245ba432b93b6315ef40a4a0a751030c01a23257da2b9b50935947ee1403ffe5119fb17b8cb615989c958f1d6c46587786bed97452585755d982d524cfb63648d1ada356ebcf2c2a5dedb2379f32041ba257487659179dfd78e3feca7cd669f6ebeb416add6ef2f2bbb0d39447ff501fdcd54806f750b46ff7e28a88214ae11ae7c355606a7bad193d46bbdc6c9484acbda1a1cc35ebe5d4dee94005c8fae3da4e9ca5df9adea6c66c1832b816d9e8e9cc211b6f1ad07854b65fe9ea78ceba5ea7ddfb90767f2522ce8c00d04eb6c3ff91be7d98afe8b51606ac4dde3aaeadcf7af01d1b05467155ed0beccb1b135f1594e091eefb19e3435637348a15820355503cd327501cd48651febf5186d802545ef01d1a064c4c022f6a669511320517af29e75c5de794de80cb410c96edf5e47654eac3d86a367c17acaaa836a6fb3e221f1f643691fa8404dc3aa1533a80ec6476c0927a59ead99866ca6b8dc72df12e8645e4e3004ea0659772bbc5a8ea94b1bd672ff303b0403afe8c851d7be2595dc61f876a1ed85c2966b100f51d7d06e490a6414b4ecfd984ddb99feeab639e364776f2d5d1dfdedab0be18ea827f67855946708a2491cdfe6b19600940f9e7417211d02c03ad4effdc62acacc039e21c7f1066b96c3c44301073717520ea5c07adbac7759b88d52154656444bdf39c326ac9c8e00e1965a33590793a357e270f61377fba81b99bc77f8fe7b963f5c04e813c4105f17059de4039216165ff6de1f751a2029d88c779c5a7de13998674f92e307732ff8948699b3411f19ab35906d5d0d556d73c81c08e77f05b46efe0bad96c126e1fab59cdac49f0f2bbe41005657cc2bd171ff32242c5c69854792e19e8b9bbc23920b491dd42676db0d8bd660e1d113f45774229495a07d2aa69839ec4df1a34362e823d95e61d6861d786b2377a6ae4498d995d0cfe5c11300a0ad2d5a6d6cffc1eeb5a3bfcbbeeb62b93704a5c73b50ba91e45f1786d5ecea3e83c83d697987438166f394de804971b0d28ae8bd7b97313f9696192e1c06c7b48653736079986c32c04f6a14db4ecee1c63cbcf3cf86a125351c5126140f2db50d3578fccd91b0954a1dabf91059dede7a709f04b7bd6ef548683c194e5480b28104da98e601950b7cf4d715d009260977fd0b5ab49a1f3238f056723b75753f9a47f4cf6376ae17c15b77d59abb38f537088e7046ab163e9f4b1ccb5be05fbeb155740ab65f404ccfc80ac2c10e9c14404994e00e7f08acd3ef1b7f3033b4a25ed3b4c56f2a100cf0b10c67f371a3f92c26bb245c744aff8f42cf2848de289d0b3953a9fe7571faccad093f9262f52643266db7b129719919ec9431264e00113f0ccd02d4b00a78cc126db43e71140e2ddf3914bd1d011c1c4327342911ff7172b48d7a92683e196797b650482a651364a789b5d0bd7dfb0efce4abe1b85b603ec7116ba80c815f37938fae5fdd8cf85015fc258c894cb85a6058f2e0afc8500bcaf570962b78bca49c3628e628e00fa8b0ecee410ef1d69723f0c39676bab36216a603ed3388a44728665a6b9b02eba6fef87aaecd01c83dae4878839b971cca50afa00dc335b897be7cad608259ff03568b452631f11fc665cc9c388d01febd0f7edf7849047c0ec505bc559d79bc266e31f847ec444fb9e109a915c97fdba299901ccd33794124e28de1bb3ad6c5889c78ee744a7fda90b66c19abef652623859fe27d1108aa627d71c821f8f59db267cca23bdb0842d34c70887b5d5680a859dabaf870473a502c5dda0a365a973c66a9be1f1c820b0a19c35 +MD = c51ec055972a32e7858f1d80301bd2c21efd5afd85545719f72df5ed015d9997 + +Len = 59176 +Msg = 9266751385400f10720b3355ccc2ff5eae6389b41151bb6c41f761f092af80024ee2e9fdf3700f5e9b521684bc7e2cb4110a1c60d89520a93ee3f72218c738d7d346e68eaef9444c26b3eb1bb264190bb13d4c77a1151089910c1500d96e843108da934c1ea358e1fc76daa3183d6e6b75444180d39a311523bbe1133d6b0c19d5e519c1ab35f02603e30da355d1d2dd45662203d5ec2b54da3783e2ad88779622b1a075be79b7212441a9a3d1e8ee6709ed178811d3a74f9fca24f68f8b6eb1d7844fefbd3552dc48dad92bf44a6a14a91f4a98ee174d0c5bbaecd54c3d9871dda74eb712326c5f55f4c3c426beede90e45e0bad47fc495f45002094d669ede1a62c6552338abb035d88ff5cf0e1ff01ea604772bd5b5f254d48f1af9ce270077fcdf515a0fb7d9cece66475700aa30c28cdc565cdfc729618eba8eb73cdce0dcbfc0341e7e39e20a1d7041265d33b1e33d90dfcd66a34405c5aceff17a648532f19286d64ed9d1cf0fd46ba4ec657c6702499ae731f04a26c38cc40e4e69f75fdb7ccdec473eb007eabb4d3a77e59838232f10120a5744aece83967681903f4dc5a793c731118699f74c704ec45e0d3ce869c8b7b78039842fb9ec90db8364e2f63a5fcfd4f95c6d7eb05b4a9d76e45d99204a3c011231902e554ec623ea6e08b85eba6cf89f396bc70e9694c8d524817d7b1f0bb0b635ba1280447f236c66a6513b2b0664aa257b198faa960d24d592dda3ce8a8c134bea25615724a1b253a40af83a05e1c32985be5b1eb6360bff7701bfdf235cd27e08ad210e1b66643de92bbe6fd137924b71fc997a5e0931ab1831f8db3dea9ad3fcf3e7f2cd3a292c5ffcb453d22ebe95271c7147f5503fe15db576493ffc1454ae3fdc8aa2e4a929edc5036d718df00f8f650c0be3d1dca72ed460b1935be70807d9275e032e8d3b7bcdd245141ecfc0922192518f55b10773d8de9ba0cfbcf7ed08f2f656de7d6bf25d4a6425a704b016962b9e63a3660814071a90ce203b2a491562db04bd20c038bd93510af136e7040efd7cc685a2b2f9aa391785150ba80448a19476931f423635d4942dc40e6e45cf337220c10d0e0b0866b92d77d57904e9d7a9132821f9d40d35b6f4e8344cbf21f309da205023306bc7fd2e0e40a633402ba24243cfeefb8cdf3ec9244f895c4e65c75a6a13fa5119846bf1a2f5367895c6086daed12891fbfab41341072e039db3370967fd99575bc68bdcfb9b31ba2fd063fb2fceaf7fa2ada1390806419c5502de4fdeb70a2879b5e658e0dba0e3577039548f6f8caec9218ca53ef1cd0ebf7d469599e955aebb7803ce1b5d8ada55ce14e0955bc605b87efdbeae73d7432349f6415e3a80cf69386aa472c8f78771137b060b3a656bb6eb7cec1f326922c99176bdf6529575ca1ca444aec5efd2f367f731b7b672ca0d90929758d68a93f87b4f6f29da9b87274d381497fb7ba322f10fc66375f3090396c6272208437ef92f08c1be7a9bedc8f2ae7ef413a2e247da4b2ed51ff310e125a10445709bcb15d6291a7fd99c8ff5348fe88fb46d77aa4933d1d65d77c7ef64aa9789b59a6391983ae132a0a655f63b62bc2e87e24a936750172dd78916747c6946b67f482cb89cc480a076c127122eaf619a330c444a5c2969a43430e5ba95667a9378ae0fd10b4f5e9104f6ed9335ff3f9b61f04b164f462d011c751c07d52a9ce946d3f4230c61e3cdf24c8fbf7ad8bef8b99848416830cd0d395ea3a4673c128091bfc4f7c884771be7ccf5df22c5467be20b2411d16eaf9030f662d971244620027b6595673f82448b7d073a584b3fea8551c5cfaf883d52ac4241ed1c6b9e91400ec145101a6c118767ae1a42f4110e497315c22d07dd1a534c292a8f98849af480bf4feb9e9d478392d0c5084724afd778fb347072f9b1cd1b00d6f3335f05c6da46fa21527eb126075684d3cce195d6685e6ba351f8e0c3b7b03a6fc497985d234090dabf751619cd299fcb0cae87ef4b28b0ec2d426ddd291f9e2cd4941c626394573d6beb3d04ec2f5e178ef44eca2a404b738c3f20c278374951eabd587ca22a9873e049ef8d6d5209e0da1cb20e0c8e8461f957c31bacde85078f7c1654e9ea9aa3a6f5f45f5779e74d798c7b64fafaa3def9f21c8fcefe98764a381c923fbca7f643591420b28c4187f2ae7173fb6cef111678f5c7e47ecbc5a35a33ddad88059441db177986725fb5cde95ce417ccb123d751146af946661d224823dd3a36fda428e5c411dc15890093a4035e5602323cc4e54121123eb1a5506bb43beeaed74f7edee491bb5c0790cb492f8ac1f6b782669c4694394ef486b42bae9fd1d8dbbccd2e3fa02c2f208cfd3fa80f5f918b2044dfea6a755e76e7d7f1d8b0ec9c51149c3c9de736761e1cb2ee369739b9f53ce714f44ccf5680f13f23fb1746e3807e7472c60de119476a70bea1c755573cffd5a52de14d1e5acb762bdf7ce793b123dc3781bb3501e49bc217b049bd54a99098f85dd2fa9e4c9f046f4c85d8962c2a5cf398993b143cda2d612dc579968417b8774cc6dbbf9e926f590add20d239bc7c0fd14efa3b994d3b04dee28f0715bebb88c166fa6797ce414fe02ac7312001c5f1f5837a5f411c73688b49098ea3ab2b95855a5e7f807b01bb9815d69a2820be02ccdfc4667d705df5fea2ee1278068f0561490ff0a1c03804f84554f49a42f0aa1d0bdf3a95718214fe94477ddaf870401adb16a042c66d92c9634929be8ee152b2aed3c1d146692b52c71bb612a955ae7bb97a79abb528cdd216be20dc2d1b605171a9e579189ba4c3e472a56740c6b74b8b436224b4f21ddd07b9c13c46263ec3fc688cd40e9ee51993553223e54bc351f87942f4eb51eab0dd45f426028852cff618a02b51fc581c7bca458cc26d3a56a925036483cf9c154167a1e189cb063f08c208c6083c639345dcc6ecfcb38422464f8cbca4f49bd1db29b0b60276c1dad96daced5ce7704898909d89bea6097d76fdc54475474faf529209ed9512ea67122174e87584e6011df0b2ac2ecc312fe13996431f5021764faa95ce6c26ebaf5ae648fe7a9b2d877c03ed9c74b065ff300ae703c99777ed797a3aa0ac3a2b7a5ac5107993b5ada25cd137a3b9d70bb70b79a0ca9ca5bade7909e1ad80d7128fb9c5b49fea59cd196563760725cb8d1d198ca9e1c001530ff660733b0e8408b820ef1cb9a40ff8b640c09411df1351fa034dea905c33a8489985d6937ec975bb3749310eec5f933f95f077091037c11570c44c1e99c423530a82f4fdf92ec161a5ded9e8e8d2077d0bfc0937dfbf433809f8b5d59e3b2bf7f05fb3c0a73c547213b3fd8dc0efbc384beb30e27534412976f10efb942027fbf322fd26af7a97b628d286469d3e1a38fdc5d654f91e22b15eb740d9a2fc8128bcd5b9753970f0f58d425a5ba7488a44c893e2d394034e986a5332b7f155a046f37fcff66fa7c8f6e90b631405947226545c3ca86e6d2da641cccbdda8b6ec1d402926f177a68882e53687b9e0ab3ba44a28cc1baee327a38b2af592f0a4cd7449daa8ae79f5966129c9b0915f134e8752ff7a737deea456f275971ff1a9ab14b99a3c749e1d5c5b5ccfc5e5ab56119613ea2efa02150c881cb698ccd24ceec63671ca8d0da54037264daefdebfbee9b36f0d0f666e0c701b1f5e2e1bc16fe5068683b3fef15acbf314d5321488b4c5c621a48b0d0d73d895a385ca6d68d447af98675d36cf607b922d69c99ea8d93a3406f7e706983d6e8bf89ee63493b260e8ed46191abcfb9eea4f171acf8892a3678f75a7e586bfbe587ef805f3ca80dd2d258e7c0d5282a265da5baa49a087bddb1bac521c617124a5a73fae3d85a62906a1cf0a91189c229f5fa5fc7fa91ed6293c1a5a2db1085dde21b443744db8b0e01286295887be9be15f8485e3dace88cc813e449beddba67c4f147a3a9b3f2153d8227ca628507af65a85db08ee1d422f5b8685e98061bafabfde96f2f68fd6cc6342591c63084c28c11870713b91aedc5b91b2990140e7f3d4613e2fd8416dd45464631dc03c8c0333baca9f4bb20b5dd1de3f2cf8efd9d22d4ae453c8fa42e62be70f4cd863b70012fb5df5a704f41e8ecaa007dfc4fd203afa0e0130f0f28c4a68d20c141459c9ff48bf16d5e0f5b8c2e579cc1e66ce688e0d3fbab8ebe93140584fedfbd4f0ab4921427540fc9c971ecd20ec3d5bca1586e2dde2c931b37f9e43dd65081bf83e9123ac9380be354402e039eac51a7cb1c6198d1bda78ddb1c4aa0f03c15ffcfe67be41e40d8c7c4a1fad294a4e0952b7bc1fb1b86517c49243f9593ca0275b652d5fa6f9500dbe13b5a2737d20cee8a1e973d05b0195047bacc040822cf8b00d52963045e0b8973b755ead05f5c1ab0acea48d76387729e86f7d5986d04a874187e0925c47f3841bcf303a772588165cec303d9c62448162fcaf088d32a33dcc3dcd31aefe64f14f33d5a0434898b712c29565202773b765e4d3d237bc896fe7e4ba92a06c738b4043ad72fcd76a19b6d24298c3e08b488ba87a5b08e6638a2efd4739f31ab5ae996f3636f64a829ac3abc64cda3601912ec800e76338c8192c17e19bf9a191d7b516ee40e21a58d6d3afaf05e5906d3dd9b4062be93c3d9959a5284d36699e931dfb544522df733a316e5b38787824bb170d087d0d592a87223569a22c0b326d4e5d06984b02585197586968f565de855133767f4238256f2039444f6cef03c2c0ec53debd1b8e99600e381c0ed1e11932b7de872a21a4bdde2146b95b8d79401ff9ea6d1b937c9e15f065d60754d303160abf4917ce2f0fb6addf548a7f1941b63638e7c902a8cc339f710b81573acf85cc7729bd962ab1341f6cc57c3c4a542e01adc357d1a9a0436bc8410f617edb0c4dc49d6e023e5ef0f6ad60a33da303d1ecd7844a88e5b6cff5f9fb03fc15b2143ef638bbaac07557d3efda920bb9bd5c68349f13a0e37c23ce84bdf19f95e127f0aa7018e85770e327c277bb1ed4fd2804539845b2296d0945d6fe6ac485e4d2034fd8285379fe2d72c3ec90ffab5fcf31a2f443253e05cb0c8f30d1f35c398cf764d54c749e698145429db616a341ac80a147be8287d2f3830be9c9a49f5bc34d77fc07b43b3fa90fed0f9d0c333f6a71dce6fa42ad511d39ebadb470a5c81f65f7c0ecaae70cef4311b6b848f1c56365c46688fdf50ca2919ce124c0260aebd162a86db1084dde7f6f278a455560320ce64b0d1d15721e3a9e288d1b96a0d33057270d7f457ef12543d6a589e49c50b7b118e918850dfa956df86ffb6e064fe333c13e5df51cc1d53e487caf15d63a06c3349f78ba5cc2229ab54fd812c7cc6a871b82e5bda3baffbcf181fd6faa786a8b32a2d62bcb0f7292f3af4a2b41d346df7a7d9ef5a057055e76482d5885765377a795895ff53d05f53800ca1e20eef89b8280f2439f20a6812b519776f3ce7226f7ea3acd47d53d1006d6c071d19a0049b83f880dfca223c39510c43171eb27079803430a5f52b891c4a3d5ccc04efe787ffbb8db45563da458184c2e9c56e2982c933a9d984fe8f905fa6265998833966e581d3215b72491c8da97a4bf8c456719fc99dd8f275e945f4d0ef2b9d05021f7d71d98ca3fa91a8bda2f5a6815bfe2e4b1e960a0737a12251e33eaadb1c4a9a0fb4275ef6a1bbcf5998bb6326dd29a014591bd78aedbf0ebe069c3e1a711abfe37145001c0fce7ba8b252e8b0efdfb144a2b5a7453e49f38261904f21ac797641d1bcd8ddedd293f319449fe63b29482223eae2fed349b8e61da245b97470a770fc125001e3d0ff82f419ee92690e4df50145f07e53c64532625a88aa71063ab919d2cf4f98cea79d6c573f7a2197a906674b398d67c982ae574180bc4c4317645081bc90b5d7738ca988f9670acb429d7b8626f2b75957a125de96b6ad2f26b9cba9818ce1f04b96d2338422ccb20101657d1d77ea7eac55f3b930623bd350ffafd1850bc52317050fe148701054ce7c4eb887e2a8406910ea5bb8869f367b80278230d50977bf1f8a19ad1c7eba92545ec0cdfc9ba8761b324b94eb816090825843eab154f52b2d68631becbdeb33d2bc1c558d69bdbbbef2112e59875a784e6d9c1b694ea34376d447faaa76ef9b3e9154895dba8820405336ec985c2b192c8c152bc3a08bf044f44eb21c50cfb0e004f1d033370f8eeb7c41386fa6db5d63de378388f2b518ddf0ffab0bf4925cff3e7a91d9875ceb0595ba79a70e732b3d8a898980eb27a48af1e34d3e094086e566773615537721d7c82a16083bfa6a00b894a67234eb7d931f80017f38e216d8a57026b0436616a93b18795ad67804f592de422775098940a1612d94297ef32123eec972fe33b4c3160c096586f6e0643df1c6685587b2d9a00b3b46831f0708077887222de6e16c828e2ef1f47ae695e45598fb7c6fdfa54308915deeca39d47a97c88a778587eda72750c5c70ffecfad9022a893c9f8edb3de99a1148971cfa3d2f470851a8d8eac5ed7aaa8ba105cc02ccb39429be4f91718b9da9a63973fabb1739dfeacdb97b9bc2c683f85048246b1fa7430ef8d11983b5bcf2b61946db9bcadd98b445950f8c8b5c73377c28a67a5192306ccda7d5ed1e6496d894ea1f67c0bebd4e9ef018f0adb8f2d9833bc4a928f0c6b3bb3849062c21008e5ae238978f39d80a385f1a60a0687d4f13d5f18ffc4f808420070567456eca57d9c3a9b38ceb5387a036966519f78d189c9bdf87520ae85eca987d9910ca5ec57012f544505fca37751b1f6660c2acb69c01c137b0bf8893e971241404b02847dc34adb26fe3a6aa157117fd1b7656b9708c59199ed9cbc42b058b60a7ccc16f7ccd3596323373401fed1291b06f1591d8b0099572e63c7ffdda35f7505cb49cb0212f585dbbaaa9d2c381bcb63953c032f14533e3615527d0739640b4fc7c6034f4fd8138d8d747fca8f7e69351abc4fde4be8d56d7a04c51463ee54c28834a79ad12995a37639afc11e797de449820b7feb80a43c5986deee6925d7c6d53cbdcbe11194843ea133f72d3590d8e8363efa3d4234097c7fd07b93301cc478864fc9c7b89798ad56155604da2978bf80f13789570c3da998a4a52937ab2237b9647ecb4526478afd5dc5eb8fd12e98062b1d17e7b541a979615272640d4adb7d05d135e1c9f99f41112b297c0f623973f4962e19b57c44c90f6cb7ddc9a22c7c39aa4cb30916b2c73b7207ca6b7a6b6d548a171596554131b7da40ca6794f15b08f159e46d068c3ae281cda16ddff69c54df1b04df366a585f8455546f87f4c57a8ea49b7e31f5400f40c3289ef9a2aafb7e800e198685e712523ea36ae3fb60986a7501c200b481c99730888530373c524f8e5acbac5b85d52c42dee00fcfd4696b143ec3d993a7186e5ee8abed7cfd5f3a8f117d12b4dbb2faab2d577538caf57ac8790925585704ad937196963a922c28c95ab81f5890b0a4bfb9597cfdea4580dbda1a4dcc3b963c184bd09539a6c1ff855e023b0e4dd712c7aa6d8ce8db6063938a80b7b7fbd503359de15041df24a90b44e6ce9fba302d0a281c0dbf464e0d39b1c3cde13fcaeb318f4f311ae55f0ca335e940d47ec2dbd25aec674bd21864147669f611ae7bda564ba49e8b617a12955995fa73429605656867035428c5526e02fc9911f0f2b9eaf667015efb7ba228d7716244adb2940c7b1547a2ef5dbe8d7d0420a7ae377136bb21c1595a6ca3a6d805e11168206e0fbb7d9cfcd0e98fba0e07f29c9050e882c05946452754ff5583dae0a01ae87db64f276b2b7370af3ddd8f77b73d4708162d97f8e9093c9d7e0177c5ba6c10a7495f9b1af87ffa055e132317c25e24b8392b643f0fa92b65687964f92706a2d60f156213289d907965d84c3a839aeddf34e246837dae293f5d142ae5af8fa5f1519703bc867438f399539048c49aac674f79c72cfcc13f13a3fa50f01ab022e0570d067fd9adfc5b44ad7aa94b056837d2186fa2548a73c983525e812f10208b69a0f4c3e8efe499ac0d8fc5e0842a3705e9c54d4db0cf494544dd02b758a7dacf7753ef7ce3f796199c59054dbff94f30115196afdc5b7b31fa54da7b2fc0b5d0bcae6d5d303d38d5825fcf595ddd679abb9be341b51e488f994b71403e7104b6948aa4537fbe6827e6298ccb07de678c0d2c9dcce42096a64c4a2fd12cc4afc72971fc2678830f56f040a56c6405374e2f8b2d1810694fbf39da7cf5a2c19e4ca3eadd9dc29313abca2b80041d59c0284a40f9ede20259228882c073486fb98c2a7eaf8206f65e6e9972875bd9e2e86286d46b1302f29e1762cb6314c5d6e9d1e4b3da9bebb5d6e7889e213841a998430aceea51174104e6ef3ccda0c2fe1461fc14c6b11ad7655dbc36b564fcb5b914ffb6dd71c9f775d6565d66dfe6f023859826dc8b3a64f21a60c2ada8b30f311e8c15ae39c21dd830c0b69798dab3ff85e17382f3f46564649aca70ca0ebdeaa6da71c472a7bb143d54d0c695454f8ea9fe8221aff0e1a58492d76692b4c9caf7115587e423d713423b325d9cd0cdba3917db2288d5e09cc27270f7ca4e3abb5858465f56dc7bbc8a9c64c27623346a7c5607eb464c6a31655f1e8b388319a410d7ceb4917aaef75ca0ef5febe58c86bbe18de6b1fc884cb783688aa6fc6d6c68b774ee5ea679acff6e5a9ac2beddf53ee0f57a908e41d5fe06d65cda613efda820c0758308e2c3bc302dddc55830a14d7cc80eada99eb48310f0699c59953e18393bb2c847f425db0bf18fba588c7130dc8c0ccef6a5d28ec73f1ab68c7917ff2b6c0bf70bb4b8a4292d176a69fa4d2e2accdbbc1c601566564ad5eea3f270a71ddce9d6fe2c655eb269df9d31811d918b0de33fc4d76655e399030e460831563811b52fc6631553ce2d4e1a5829c99f29d98c1e9611aea197b50ddc1cc44355a495d5c80b61aec9a302ccab87fa3aa12cb73e233916d39399255921ce2d8cec88f0b369762f19095c6fc11666fd56debc30611456eebf73127151a4034bf5620ca8b5dcaed43f5b1ffd95249c3906a0ffcb5dba94a2588929225c2f642766015a4745e85c5807061432b19dd2b6332d20109add9c38881c07bfe18899c8c80f9755ca5428c4585465997b49af7dc3cf4587814515bb3576d3d04a78493701d5ee58ace9b91f1c8b37b75cf0dc95a0cb97b978b9a83049ddb6defec71c7afb9b85da526fb8713af4b516bd590006b06c3d2de803fda1ab9ad870653dbc9b9ca9846226aeccc29ad7043d044dc4d9ddf95f6b3ae9bb1543f5600ee7a2cea1ce4614798f6d9e1b247c4fb49b94d0150db927fcd4348b95f9357640ecbdfd9578bb5da5f576d683c02abc04e8f6cbc22af5bb6720ac1428b5a4448fdc57ee7e82518671c08f1b03562b73b4553b5de91bf643348418ffd65f88ef821f384c64d34db762598115a2cec59d4c482a2f91c801e8ec6a41f3a7df2aa2a21d28bd5055fa1a0226136d68104162542b8ce9c21961d11639f099a41dd283753fefe948ef9fd4d8900fcb5d04e7e95565293384f65c283a59eb99d402c8ba85eb547a578983106c003bd68a93fe5bd75ec9b3e0473c12e032fa9a407453705a8a2115820ceff447dc6137f6a3d0df607e3414ddf447b9912ce744ee5cbccd7a851c64d35e2ba8f08d4796a91da39e7a2d31fc84e5c645d4af7940e8a34cf86f420e0f51687f55ef7cb699aceac0c0acd38a14dc0300de32237736362f481ac12bbebe04123323cd1075eb06f06f6c7ed80503ed343faa32f0aacddeeafb5af6a7f618f5458e3911b04e32bf19f7ca79a46b71bf61c9d45c7edaaeeabbace1981d7cc52be7d9c043c60717e04ca203249f83085b73e8823835ce816189a2d62ff7196eaee15ddfecb969417071b63f0832176dc850e1dd4f7e50ed4c3e2662419c95bb871c5fbf93f13c59776f7ca5abc3ed4b0ee2ff0c28bf269ab2c180ad5874b853bd7f2a87c0d64806fe303c5e97bccf48360f89374b6119319bfaf8defbe74adf58f10560fbd054f10b9b3e915483830c46c1c68841cdf15a10d1d61eb35d1206615c3772cd472ac1a998c9676882d14049dfff25916a76bc172e6194063ed971dfa709e4bda3901fdd0f26085d1f838c44517d36c39f7000bbf9e2697ef267c7dabac3df544c4fb3b1e89e9bbbc45f9741ff85e460d6a6cd011aa1c4a3e184b15b7dad8a18aa2f242c0b774908d82f0a47d16256ef76e1ccf379e6cefc74f8d768d80e0e9325f71b5661f939cec3b98c5faf5ab6f8e7e9a598fff9ae11118ae00cb330924d26713f38d06e9494ecc6c69081b729039086fff892218d6a2204754cf6593fcd136339d9411c81e3bd1d60e22fbfd999db80821c1ba893900d2c3d3289d23d9b56 +MD = ad0dc37fee3aa1c28db25ddf03a56dbba8a2b92bfddb1e62a54536ad687006e5 + +Len = 60272 +Msg = 3d42aaf8ab2e84d221fad21321f33e0acc841520f7fdfbbb8094de62e2aa2821084f392f5f0714ce2fce58732b5b732747a2122dc99cdbe5a34a5ff000f84a951dbfdd635a4d9f1891e94fc2a6b11c245f26195b76ebebc2edcac412a2f896ce239a80dec3878d79ee509d49b97ea3cabd1a11f426739119071bf610f1337293c3e809e6c33e45b9ee0d2c508d486fe10985e43e00ba36b39845dc32143047ada5b260c482f931a03a26e21f499ae831ea7079822d4a435949515dc033777ee570006dc02740b8f67aa6a9fd16f9768109e2b807d5ab1ed1c246630178917d01ccd81821db9b4282559268341cef819b0ee389171e6331e3aa2cd53e0905aec963444931c593370d74f4070a82037145a07bd4f833fce359aa0c9abf0e5b7807da4be8360eaf005f7fd36dc871beae4867b381f33afe9bfa69ed9cccb01c4281dcf5dd79dd7803401d3884b510a6a06c0d9278505cefc38d90d7c2ad16cf76000f4b10425b75a978f62a331b8845b0783721a257c059c2dbc6d2f4a96afc7b4c1b5469d9af2e5aceb3b16240002344368f67e5508fc300acb4e71a09d12bb92da919d185032b7f0cfcd5f96da1c6c66cbd6c2a82f0b6e5c7011d1d1675e5986b61a02e8f7cf57ef8789fe1ea93b89ce369385a360cb9d9f6567de3157eb180cdeaf36a3f4413c15bd01600fffd8130633ad45bb40a5444ff5b0d55511418d91ded1a6bdd830daefcac433ff407a7e8b4d8471744130f8eabb7d75b115da10b21111b1bb1606cafa5b22c8610dbb42e9dec99742e4f731fc213e3de9c84d47ea2ff00600304b62b1c8ddbbe9d9e3069e71ed25cb9e5075f0c1637c43baf399a675ed1241a97768a2ae358cde17ba1005a15fbb62efe53b75169ddf7360759c83ad7944e3f403133975da99d2598915dbe7a1c6ad5c1e08d58b3dd5dd5b3bb6ee11253c6ba2771902ba2d815b01d87e7dbf43b5ff657354aea9d3de060dbe7f625b61574d375bd08ae5bed1ccc330c06792c627fd9e7db57cfcf07671ea966c6ce6be340d2529e03e72fee9cbf02a7225fc998b1c69a581acff043d95843bf48a4dbc412fee59be99fc7e57cd2b1e0a35674e6dd049836fdb1a8f72056d17ae26facc0d2a0573c239ecad9a44d683ff226d552ebdc08fc673fa12d23607c20fef686df6800cf0917ace1d3fb78514d759793e7c4961233c03f80eccabe6b380302122abc66768b2e91b4da6b9a9191957057aa4e7ae0626f7af03dfdb7c84a595bf7a8b61a7449d014eaf6dcfd5393ba7bc8a572cf9711deb89726a494b8de68c9de613f63f0cb66ff2b2f34e7bddc4d7e8fdf19df62c974c11db2a79e657d97146f5e3d8b129a5618218e5ca1f7f3b442536029f06710995c2be6ee1af7ae500351a69ad8043d0a28721a3c732a60598fbd318c4bce71b55369cc625396fafb5f2d413c93eb3ce8f6c6dcbca47eaca22d75592838c071306c7e6be99068e8fef0aa380d03f2205a4cc6dac57e1a5ef9e322e0e7fe659a737013cb6c189800c27e7192f3723e70c7f0191e3d4727fec57a6ccfafe7e473e426cff5d4344ccaafd12957d826fab497ab68b00e48cc156ebbfd2d6a396584ec585bf0072cadcf2eb07b90a3684c7531455b961ec9322a5c6b7a02ff3d1256f4cc5ec4ef48e296a5e50f443c805c39ff8699da571280c5f6558e56563b1170624b817a73d013a77d368c7b8bb6538b6836cb849f6adf6ea640df32577b8a5a9f9d6c197a0b6a8b1f6c9b3d775259f0d41c989ae01b77aed4f3159dea44a69d148ac6a9ee420cc9f14fe393ea9b95f2ab01a926016b6f0ce637d9a0f7e08cc028da3733b6bd24e95da60d84ccda301856ada52feaa3f01145d4d3426695664b425469bdbac4d874ca3bc019035852ea3be835be830a21435992aa8b1fac59c7ccc20152e29f50f1a0d4a559785a21f1c37a01dab4ea2b2d8a3906830a6c8fbb2deaaaf71695b5e8463a634c132bc8b4562ab08b6589355441909133101f30afcd940ab63eef2fe12635a3fabd126dbc5dc1ebd97e316842e460f0a2170b632b148ac99642f6e565a78c0d6c5c56398f3e0859cde728ec7edd71ced8087a51b86a9390a00aef00fb310948a9d94053b763c4a36e88b6e890928bd1deccb222dd377607da7e25a72c2c72fdb91d18e3bc32c070c5492584016d76a1bb49fcfd23e3fcd54e87df037f0090d3a50f26132415c369d813bbea57d4f9e777699f0a11d6eda2040b643c7c162b737496b10979739436b1ccc23f1d31de4b1b13e5732f78111802f3fd79abd40b842e9c03ed42b4fc7e585e80aed8ebeb74ae2f145d05322fdd5228f2e295a3f7afdc0862e8083fc3e9d3af3e5c126ae90b38a475f21c6a1199fc918ba1c1ecb89c84c21722527eb1212ca9437452169fb7c25c505afb897df5061510dbb71516f231b169c2a8d88dcb6b33d91c2157d721523eedbd2af83c987a9ec8bb0088d95ae8bfa2f092b521929634467c069557f1f3329342321e162c5f13fc6623abc97bb3d309d6997d331bb796d3be8938e8ceaa208b119a62d256be5bf407a8e8aefe99d5e59944998c11d540c80732a8526081f01e53ea2e3ac09e60f8c418a64f8aa3ae7f641c6ff41af91a6d828a4d5d507f8a9130abe91412070950c5fa4c75c8d7441f5da86833de2a0c09541890d146acd72fcf64fa29f3023e4333d644e85f3f800cac70ec100770fee6a864d775e911bd3f599dcb410c95e71a3635f570f8e34a907afc64543ad3d84aa4f78b12e2b52508f5dec32405cbed1ef59dc7d53bc98bf1efd536c7215c827e70581570d8a1f8d3ccb04a9985a93694999922decffb29783282cc316412e4ca350fdb5774db1ce8069ac8693439abc749ae6e555d810e6d6c8b8d5aabfee7751ba5478f5e6d7b8fca25a55cbc8234fe2e6613008c612018c479e00a9d2671c949a1c0df3d5efc1040d74a3ac28cba80704879a705a549c063d22f08e2946b0ce88bad11bab786b2913b1dcbf160239636dc0914705570af7021e11d2350be871fec78eb7c7f03bfe5d687d7ee055988a8ab290e74777d2b14eb5e1108605082174b88362cbe5a7d6332f1256483429ef03c425cb915577d77ba0dac38ce0b45f73045b9717d733534d6c17ef9e3c8203317bdc7e836e8edc01558b55ca2d617e823173ef4c3362e7f4a61aa552cd2559cc50017a9e317c21885a6f61be2984212ad668b5c988bb26d1737712166478650cd7514a323cc46a69160351e983b0c9c559a6a52045a0726c4ad9b059911fb7ab783857ffeefbf93c1ec3b0ccba6beafa41ba07e108b76d1d929efa8ce17fc400c9134e47c6976069db3d08e84c19f722152f887c3064797de1536b30d41d1ca5309e77ba620b328ae1dbb4cca74f90e54a5391626b3c29f5cd838cd5c77c141145267ec83fdbe207b93c6eda5a712aac57d2ad23f7a2f12dbdabd9fc5a115cdd8d47cde1be8de178c7bb71a1d42346ffd4395641844d517e1838dd14fa7169525f7edf977ca5c356a3e577a3b2da585835d4073b9f7fdd7f83b6f0a027109c2862384e69e8980a19c456eb60651ad13df35f3a8287def79a76a2df2e7e8397b80c0074d980f9284aaf7c475879496419a3178ab6fbcf32677788d3205f2ede99d363fd56e42da051dbb2060c4dfa6393bbb9623969e5106eecd587265786c3464edf427270ca04d7cfb4c1ec71b27204a3a14b8a30a504096d155590d63ff835d4eeeebcb542b834f1e0e58982e5f214f16bb13a0e739fdf7ed4e900799eefe11bff4c86302c4d01f8c2fb63d029761d3b653dc941f5464978709bf5b0481cf07a9d066f6fdb35c72ac77dfc07d160b5e84a4ba8899e99e0009508d0f8b001bc775486e8c2f404ed3e8ad7c2889264576e77556833d40d2bad9e9a22d15b20dda8925882d7fb3cfc7a79b347e0d0d37a5478f588df3a1294b619ca7bc8ce0cac74f2e5be2d55306d85207b0c9f0140b720dbb67aea353cb3d073344c5d7d27d162d2d90b219691c8d4fba98111c83e6659fbf2bef359fdf183574204fded04c508de8cea6333d386e077c935f78a2f20766634e5791cd8d625229e46289225ffcd629bec50c178304e21449baecb857dfca7175efa025ffa5c6183706c00fdfa270b608178a3f25d6494c632a600f3d7634af4abe48ee5a68f80ac2446be0f4cbc35753a496fc456da2ea89b7bcedcb520ae775cc7272c93452c62d2372dec5fe37d6477519980b4f56b7626ae89b29fdb5df9e2107f772903b161facbd4e7bc334fa8d91f959a006ce7b974acd6180ff9e606cc6edc67d041bc040e6347b3da2228acd0020882c1a71fecf5f5186f8de2c3187c20e2713185b8d39d9c0ac3424694faecb746cd611a607b3b25d54b824c61c981d50615c556145b28d472888d07111d9f9df4fc775d760eb4ada11e958d6e747df9dbe7f4296b0520bb238602ea297f692487727cd6bcf1e30ae06b203c35b3b11dc84a4686295c25aea24e4c765abac9f962d1da2ca1df46ac37b3cacf5401dbbf5fcf54d2ebeaa82d6343e222013a326b3b9d17b5c121702ffb8aedbd45e94e3cf6e977b60f1b08c5db093c83d98843286636ce088752cff4c043119c87c49935422b57a62f77f7f69df0e3f2202f7c8f7731659b910de6a91a9edec3964e3d26b5f75d09a98bd63e10ad4113919a3f2ee30f66f54a9d24ab6ed09df8fdc0ba9fc6fff07729b1340ac7910c5e8a531b753e435a9c209b3a7a219ae7732ad691ef0987ca750ca281fb474e8e4996d48200ed5fa906bf8278a3f74033e8a9fa43c2d2314369eeba507e04384f5b33a9133084b6eaab73dd6fa744831bb007965089c58ee3ec3c73101182d0d809ed4b4fa2790b9820fa26aff29db5f76fa05538c257e334627267514447bab0ec103587d54eb029dd9ed88a14677b6f8e10917cfb1de0ad732d018484d768526868f25c378a371857ee7dae9b4625ec81e4e58d926c19c784c8cc3a51963c450543fc5d4790130c1675808de59e47e6e179cbfb36e6d11b1dd231e34918d8f1494dcddb8414d64d9fb08ba881e473e7336baf4646f2b900a4d5ed0fc9d3b0ffbac2e1877b6cf3855a1be97f0ebd1c75ee2729ef41342410c0403820526b46c8c05fd1b1ac2ced2bec344471da9cc41b7828a656c40fc4d3e6bdadb581241cd50071191a94c945a9cc86073173e7ed40780cbf3d3e09fdc28e8ad84fc4b2a5acd1a32202a3b67f97518dbc3e79430a6d443fded31da741553e44224f9b7b73d8da72770a77990d6d31b7cde949229e2a933e8fe8e16c32146c862645840309b1814b92a27ed561b3d390d6d261fb3ae0bb853ccf37cd42889fad5ec20cddc9ff4cbb0f6b37f03ed3cda5417a6251432843a08ff67f4ee51a5e463635945046eab32d47b5217de7657661b851b8b95989b21cd40f3665ac421ecd4720c92f033c5b3ec620c9d2ede1645285e8d397e05d9d56b379eba61aa857cefc0409be814c8b5c252e9f93c4d01df434b051617a3c4beaa8b70d8492b5afb7df6fd4834393ea01cf4f21450eaa19c36f4890ca79ae64551e471a85a6e27d146bb4b811bcbaedbc3f02ed4b1dd7de5c80024027812c7d02aecaa13de9c746512b8332ee6f2a1d07feda622a94f1d20c018dbe1d032edc9fb4822ff1bdcca21a994bc37ded59ee6179360e77e680ab7e7e3b88ff822e2968da3e1565a57af6cd3f8ef84489d2d85558c6609794fcb10050ac2f5380b2ea1a8a3f0fee334aeae578cd2fe6f71d615ff7dc072e22de895e23401fbd715575013f056e1fe9c4c50fef7708b9a7a22fede1174080129eaac450a7e8a1f67e70d98331be5f3b713b890e2ce1410e098a9baee8cb51d6c58bff7334088562a663ffd1448f409ac8a4fd5f4f6821acac17c5bbc0f5f801dba35c1584fdfc5855a4d0b3ae4f58aa4397d94d6efbb006023e0882406f0706599766921b475b4a14da18a4ef7cfbcc6a9ab972fc1a90acc483e0bcd784f366c7beab73576346ba5c6a242f78a6ce83b613fa4a875338033b8fcaa616d641a59ebf9753d9d0231ba4eb8fbdea3b3552ae9a384e91140a9c0f9842e85ee1763546e0b69e032c950086c4b7cab4d8c4dbcca3dff99a0bace98953c5ee301505b878e885cc73c700eb6a8c38e058ddf16198b77dc60278837e6148e0423b1f74818d2d8179ac3dfb4ed8a89f9946d94f968b4b8e5e8b0922cd0fce1e6ed03f4732fc2635f00d0fe89d49b038501f4943ed2ce67e0d642c0f57ed79ccee7012f24f5e791ffa169b5d794629af9f42ac52d7e60ee96d5e6fad9192c2982bcb291a391c8cbbd2699ece45467b61f1418100e94f2b4cf8ba32821c984efca121e00372cee776337658bfa3d33c0bd0ac55d283e0c2152a0813216b5665670924e6529eedfffb77bd77a5f774d1e9c7d3a95c4a2379de9bd8800fd065ac63ae349a9c1fe25c9829bf6a15b293d3a84167d9e2ae8fa905a8ac17a21e3e8a7f2ad17b24785483f8b3ecae8387b8c7b3d7d9862a239de626eae3389c97599615e9ac16a03aacec79c0d5c383c96c1488e5992c874bd6a7bedd2e6133ce4f45c47504eb83d9641cb7bb0b377b1a2640b405374b7e79b26449f9de301c35782017477c6833c7028b2f1ced78fddc6fe2b1b12451944fc9a234cb8313ca6f6c9b6afb832b549610ce4c60fd166092b1610e73f0dd5d3074f81bbcad8ab2dea53e4bebb9935ac9174c9c21da8e67cf934226c81d5d3dce5ccc7b57ce135a05ba8f46a2703ebad27e8c9ad9d64f68057e0c97281a4fba7bd995b027653c446704e4c7ba478bf944cf04c4e3a0e7d5b6da36dc0e682357cb83fa76a5f363f6852cf56b9dc0199a82715ba6e9aad65566404761f597769a2fe4511b5df938d4e29b379ec74a56132e1de7bd5654995b9648c4c57828c7f62b63303aaa07198401c801cdb176dff7aa1d4f74b44ebf5cc94c1573008c85f040892e41247d8478653c0a94f6b5f5bc8907d9698de996dd71d2dff729434f1d01de81cb57fd08267f7fa871018865e64d664c183dd5de5212758ade4cdd61e0d1dc0135bee62312c30b71ee6c7e7ee959a0eded6e63f45f3d9c9c74f5cb8cc05309f30cc3c953d1e257ed699208cf4a504055757a44675955b08b77be8e2e4fe7c0fddcf12728c82ffd717f0ca7c59da3dd092cfbc7a5d4fd69de3301a5a4f412c97822e18ff07a3e54a49b46ebf037d6df7f905d9e3e6697211b5369a2af31666c085aff54696c80060d4adb35edcd5bb02f2c3a18af62a56ea93540f5abac452104f1b514f223878a020a34260cb2c507ae7cfbc7676dbabb3e75421f08b951a114839d620913c7493955ec2cdb7c854e73ff2d3af4fc498f118fc79f64dcfe34bd8d32ac3cd1c1cbf9ca5dcad8af2eecf62f48e3e672d462e8e15bf73eabbd84568aff540bc2099ae9b4238092bf246bcb89d942aa85edcf1b1669b7049a11e875e97e09d489013e8fcfb7de882108535a9b58e7bf99e83c3e9b9b3f452c9e099245092e458b3b1f3259953537794d3c39d03233a4137632b9ed4b207ed7a440420a5b41dd3d29c5980e46451f2c557ecfc50fc6e6a6fa3b138803eb102fe724fbc5dee4ea335fca273a355eadbed3a3b2e64c01f5b8f6cdd1f85fffb799b93025f3fe781af24f85468a0d1261a52a3359b071855fcdee538bbab9fec3a9acfa5701548bddfe7b8f9c6a17e0e973cbb64ab01ac1935a6374975bac38d2e434dc159a5b80b1bc56518f56f04a93bf5aa4fc7192372ee2d8998b37915e43bdd36dd81b8e0724b08273a5dd20c00ecc4977e551926690fbd04aedeb13dfc4ab2b182501568fa57f625e666913e1993f0aa7abfc75c05809ccf125f2ae3da4408e7372e86f7ab27d888a4787641fe19c20dca6beb6e4e2912144c9cacae880f28008483d1358ea4f577fcfb47beb76482e5f6c34f034cf369f8e5ffff460d955a23f1b7bfccaab4971b7757cd5c4a5e785d872dbac408c4e7a564efea5471bce578073218610740049c9cf4d0c4c1eeeb9a0413f3588986d64351d43780bc6e13284d5da49fae318521f43a189d23fb25c7f5dcc369d71f7cf93515ac71f7922a5b4c9e2a2ba66d62d206926c90796f6c0ae2f0f29cfb7922f0971c12d02a1073388a5e74b0f7dee3d85a629545ca31098b54b7489bfc7a0f50ff5030445bd036e8910648d4aa6b505b78135c631e294473d3998d0ee20c8d40f519d07694b9bb93e9fc6f3fc6fbf082e90e87937e3f64eae5fe889cb616e2e802dfb80ddcb5495f18aab19a53780c7634bade7cf05bb317144e02ee7f7f5771ad0ab1b23cac2977a876d58d5ac9ec5fe17e2bc77f657723e7f1c3ac453134037f02830dba84a40121caa5bfe1d6d86478c4341b3045f936e64f937d1013c1c5ff30f6c561260026090de7d9f38718ad82f3c2210de381769ad03a09e90d46e0b5fad283367a850deaa7648295c4f36387729d801d27560e8add7ff9d7070a7c29c9deee43687ddf4b00e463d175b3ae0dab8de168fac2243fdc2bf5e3e956bfe406e3af8fd92ec3b5802f24ae829eb59e055aecf7420be13f3706a4149b72d46d17a96d22b3e1e2af8f0c6c35d3fda1c1e8cb48d1e97a6c1454d8af7206a6e14c66f8d105e0df63c19544e36c501799ffbcaa9efed557ee459d69bd05103a0f0a5998833f466d6f73fa9f325de236c6deeabd9587f0ea8e5b788177d6a275852e5a502ad8cfd62e4e26e501106fa050e8d8cdd673207a75dd4fe785eca5a06c40d0ea6ed96260c7d981def78be09e5ea5efa108ca4f51ca5389648e4fff03ebc8232cf949e655639c7452bdd81e78189c9703d49564b5b6468ec03a089ae62b4fbadf703045fb29206508fbff1076a75539b9e2db47ef613dc6c3331e5c91535cffcb7e96669b42ecbdc958069de033583b8cd9a4e047f2c099341e992f4b8c7859b7c984317cd589e55d7cf7affde32e074462f8170491576fdda682fa5efe2a306cf9018ee80b7d438c10d92d16e05e03a924e0d470688bb08471e0a510d0faedb3b71665250c52411ebcb5fe7352709982c863ffd19ce3c4f227bb17aa2b70f652abca9e7cff8f46da27920c5c60ec3099f58a807058e813ef711b3a733615b4117c2521350cbdb989fa783e19325b2fb4545c3f95c2200643f709f5b51a708fbad22fd6985d6304f3dc707cf1f145009c8ce12488021503b5608c30b6fe0af01357f1a6ed17098ee07680ae2ec5300a1946211890414f730e54add3c00b693de6b172777b6538bf1870b3bc16d5a6b5f32a2501f6a755bf167d73c7196817e0f988ba338b6d76ff62710e8ff24a2e69f1dff4c9035bae4d9580e6f2093f9c3f1485d2c065574eb688219b0d094b518edc0e9656fc86e58753080e3ddab57ec4014fc108514c454c5029611fa501958c7c5e14922c4f7fd417bbf490d2f447d5878f8ff19774e529833168ae0c9485cc99787563dadf069bab419fd43b247edc6ded45657ef6b5b6e9e0b9a0872ba6b4fb03c1b34d5d0246d54317ef5b6cac407c10ea4b4ffa3d5949df5bdf5eee82ad69a80069cef2f93c5e6965cb7bf558697ca1868a53aa067b6cd55651d906a020ad0f3b6da5c675e50e5a904fe2e70abf3547220ccf2c97851b6bb3e0409b88738ddf7aa71a00fda9acbfa062da694baa6eabc4b80ea878dd1c497973dad4c310d2c1c3ff75c91af0023f9eeea9a3a192f1757776574732ed3716b0f1f0dad85d445c205dfd485222d68391da98be97df844c402ef1304c1c367b6044cad54fc4aa5998a9fba630a7f132810eefe2b2f9f0d829c8258d4ed1df1f9253b0ecb1abcd5f33cbb70a39e71bf57671f6367c48fcc2392d3b83c176fcab4e06ea47847c7617faab799df74b1b7479edf5e37c3572b278437b3c2c7253c69a45bf0f539e6b28f4318986f139bb56916933103a26184feff32ce0172dad1980f8796ca379753c2a462eeeaf1ac144c7cef9e63f84b842a52698960a0fd14b07075e85fe755bf8a2d0b2fdba57f6e522028f8d12b81832a2c205878e808905375ab783ebfae70666b85bda995622e2aaee3d2c3b2801c8efb0bcdb2ae89bef19dacb8df370df0e7ee772aed4810de2677a4bec433e3aac93d905b967afd0b0b46de4cc9c3f0cb7f0443ea0f43f7e8e628f00f4b1618d8596242749cc3df0f111fc486871cf36aac6b609d980f73f8ea213a56d0df8c0fc01786cb5e1fac35936704088f789248f08271981001316892ff0827ee06d9cb8dbbf1a222e4f10912daf1454b8d3a00dbc7eb8bffcfacc27120cdf50b027e9622ce07aba3ca2a140fea30cf53b1670cceca32cbbfd1429115251040a088e6fa1fdc3d4a5925c3c0faf32709308bb5d759f7dbd9e8ac9f4eff7a538d56d0af51e5550700bb8e6aaa64a468755a8282fb0def6b5902c81f7680af2c5d9690345803c6f951337a6b3acd6c69a64a2c7ae24b0f55ab86aa4f825911ff13d83e12570ba088de596061eca5c9af1e87effa27a1d63f63fcc9ac0ce9714052a440c5e96d8039eaa5d6db5a7e3aad408c537d2592d26cf4cdacb170a21b948c732edb8999d48118a15433eec73de8becfed9076ae9272d081da0c48139f6043dd7 +MD = a44aa7cd5f32a255962f836c15e065d4c0b42c457c7fcea5319f1f7783dc3787 + +Len = 61368 +Msg = 77a410e54fc6edbfa35cb50e077ab9278cbfad4392da1328de4df705ed71dd9d87bbf8a7973d9c753970f6d51530fb35ec089e0a70b0467259d47f17b517ef577f588da374340d2522cc9ea642c8d8ae479cf0ed37092fd9bae7a29971231222880436a08fb2281785f8164a36493adcc8010cb590eeb6a72a0fc851c89b2d44ca455e658fbfd5938b7dc5899abb080594c1582a2266c322d0d35909638928066ca66abb1d63fce05ce2122a16272a72d6643e1396793e94d5bbbd87e9f4ebb097acc36ae1a785471faf67f75194876bb4702539932f0f43604f5c9403e55d8a72e1d13a82925810fd6d2bb6f40a0937566f7565c2911e789a189ff7596368dc26ccfcf3a92d5e831da3c530a6919720e5e8955dcaa6537aaa9dec7a9276f3eddaf5ad5cfd7f7de7a8d99f2d1032196c8964efe955779793b966ace35626e706b7e54a3e27909e86c5972075daf47864696aead3080ad009effc48fb4f7c2a6fe5233d61ce68aaa69d66b0cfabe09a50ae82eee28d69e82573e6268a237fa5708b37ec8d9b10879057cdb7042bfc68787f3463dd8c9cc52f6eacb0587a384051d1aac18a358f1f8c1c559ddd0352ca230509b28daca9516f07d74d2cfdade459e003221f46ed58e11484cb1fdbeaa99b688841ba969a722c67ee64cf53e877d1e0ca791673321cd966e5a7955acaeb26cf3a792bf27712b0b5795f0a25f1e201f9882d35666752ba3bfd9a0629fc7a0d62a5c2aa674618411a01a5a31bce0e3151c3a645c794e2cdba560d39f0883c984b5385fd9d116c28be0d9e62dc89e2a913064c0d3dbfb35a0c7766f756741b0eafcc28ed3ddff6adc825b211112a45b065d6875771f2afa958e80f0803cafeb9b9961542efb99e1761d1497661b721906fbdbfe90b34bd01c7326e34a092ccdf8e3bb2c45aa64cb0b09acb5b753a5d8f5a425c8cb28ec5ac81dced43d5d26fc95943693b27aee8bede07a086f4bae1f64eeec6080e06b0f0ad6ef2fc4994cebf4034a16efdd95a8a12a130bf8740950d72476525c8a764167370e728a5dfd1086b98c12685308a5c75eee4d0d6d3611befd7a2ab8876ca65fc6b338f90bc60ee03f6332b67ba607c2f782280887b2d6aed26e361f57dca2770e73ef9b33163b730d75e454a7fc53167c753964640e14093ba9110b8c34da2f76a702eb549c2ac19c2aa3cd6889fc44561e0dbb72b65e6091d158079503920b77e31f540096515e73f7fd7b4dcd87df2d02f178443a1a478d7d579df2d78e7dbaae918f97b353ac1d645df8c8356a4969caa1154917dc1086e3bc39261f03f8977005d8aa61862d010641d05860381584bb893d01be287e06cae253bf48b72e96bde8d9b92f7d73c744456c8ecc55c6167c063a0ebb63c2959956982ef2fc72510eb70d348bbdf2c8b4e557dbd867cd9782c4a6b09e3290abb5a550e59c68562ee90cddbcf4ac3c8dbe8e1cb022d2ae7046310d97b4f96ac1c64b2883a37f5cb8b336d5a2f8ecb3aee7bc15ac2a2aeb395cd7d934be4ca36031b47979a6a5f85713e19f9716e3ea74c70bed305cd5066b2d2594181880fd1f9e7dee482470bbb281797609cd1663a7b2da0ded3965828e4da6b8b2325aba585303d16f9b640933628af36b8a18918051c2f2235e50d20b14d7c173ba2e7d92f5e2dd6089f473525d72b24cec5f06c72a4324832a2b877a4935490d0e70b967fd976ccb6ea68ca7d8ed2d1e425e35c482c73f7d3b5a1544214bb9cebdc5f03fe0ae09f0b7feb7ac4b46be605a9a910111eb8d81f0610e0153979e393692b49335733f80f46186c84b0bf0a36398cb154e1ca931e7d4d43a468550ed076b68fa629367ecb2837c944ec96e681bdd2679add71cfd8039fa4770a19c5aaeb49fee0e9b2da460b8fb88dcfb721ed1dc4596a7a7434567e502b17888baf2ab02cbe68fd70b388d96962e6c1ec648241aab04c209d6b9fd8a6020b48747557ada7f6c6cf35b29a780defd72afb574911cc93c837b21cbbf7ea4edbb49bbf3acb02ce83c5cc7f83d2c386e873ada14976712b67277cefb3c5633a1033ca34d9f0846f2649fcc14bcdd34fa202caeb8b56e3a0b058c38a8e285beb312cc77c3e05760137c28c20fb5384738c401adc159b68192c334f98540a188cc6095b4071f320ab3f9845469a4b201a2f95641df12b49be611ee7bf0d52e34357314e2878a0ca96c532efd8309ced6b116a725527f0ceb8d98255a7c2e804386d0c68db5df6bcea51fa5281c630348fbc250a2dbdd03e2f1cc85ff97bb4c3958f02710228dc3dce6b5735e762ee3caeb830f54dbdb5e34ab056ce5d3e9d687f467b3044df39976a9cb161b20fbe4fee8bf1fb5c2e8603321f96697a158e3a2019df6e4a8cf710e76b719f8bd288b37abfd2e303192be70ff1eefaf9076c82a09096f3bb36fdf16d61fdb51ab534b178dc3977e9858bd708acc847811c20892733088740e633822304be6b06bfab911168907db77a901a45da8b1abb5d9294dc8b9ef281a3810a32df1c8bf7f8d39b6ced3ebe140121faef029f394fd1aaeee71fbefb2575cfd3c27780db97699517b2f2ab02a92026bd2ead6c6ce48151de7177d16cd5640523fa5650258b19da4c0a003f111de188ac29625a7d22736daba21c400b38790b430203f62f7e1088839d9e62b2194c2d0f09a9d132b3b1e79ea19572a1f7bbc97b0306d8c21657880492547caf4568fe2ef50a39553c43a8ff976acef5b933281225e860a5fbf5c31712aaf5ce483de350160efaac682f9716ab24bed127e70e528f30f4a2d6f22004452935d8cbd3c5bf943c7c00dc7f9b2a064aa8fbe8e164816a66fe7f4f5786125258a49475338ac1961d2718433b9e84cf64f63ca52913e8dd12e5050d2bdf8a62bfabccef641c9f443764be4369876d2ffb0f5c06c502cf11bd11fcb97612b49ce7b046e06e61a1c71599b884133e2b4e965b23b2bf187d2deeea2cfa4107d829571dcbf15a430e473c30cfaf40aa0653bd4259521f3f3c5a2ed85c7993a63e30975823ca2fa930eb368fcb6cf9b54866f82cc58deb5e52c0044356de74d72eda30cb1612f57a4ddc89207462454637b1d081300c2d5c0886f893e0d0ec82ef4fa9dc6c71b4a0ae42c049923a2c461d59cca96277ec23a6d59230c3f7048fcab68af5ec9175029b446074ec9cb69b4089750d2375319a74d45b82c7fcc3e607375c7d60173f885b0af3084b2eec2ee96751133bae03a9baacdaf2b387326feefca6dc8eae1b1a38bd016d779bd5e75f1bea2471cb6a38bf8497e6513f5713c62af0793efc10a07885100a388979aeeccec8a98e746e2fcc851bc767cd3cb8d9ecc3be3aa926026489aa4956a1e16cd6a871085b50187629d6edfebed8e9476d68a512495e652844f25691988a140766d06fab9d086ff61ea196f11e0964a9cbc621dd32c3d6fb60e79d4bc7ec1a69e46f4af81f437b95f30b9c0a4e08b7c43b2fbc88be7f8061ff9105ddab71fc7898ac8859a8aa453cef3e89b0187cea8204cb0079b53b6c436b1818b00cbfc11ec9b0b335ffe5d4d45b62e44a420e03ca70c17419df9ea08aeaa35e2cb27e7142c1a252f3ed9b31437f9e364295650c83c53aa0d00351261cc55a5eb9655715ccc6abeefd3a746273a31b06ffd92a0c974c5d0d07ebfb06e34466a0c0ecf1b4a321f30ebaae1a714a0f01dce9d6040ced4d5342245d4546c6aeefaca710f656b11aa13a92103265b20a774068539c136d1043c79122d6f0ac4d1c0bd8990b03ddf8defbed2a674792dea5bbe41a9929ffdc5625b402580b7f671644b94fdac40f05d1d733c25e1ed1d1b4d4c5f1a4568bfbb3e3f7c470a0264505dfb4f90ba02f87a358cca1c2f2592ccc1473a165a3f9b38489c132c8b6892f1064306146a026c77b06218f39cc1137140257f28317314deea079120855906c5f5c954d32cbda0d826898546bb3e139b526d7aba7bb1c101baf892dd88523461b4f4a86772934a1df069ab702afb17cd7085c967895a046333e584bde4f2a036cc3b9d4bec21ccabb689081a3c86946a0314f799fb0a6355dd54e34c5ba8dec794249feaf9f7bd13e17e07af807f2e03b28161dc3111727c2fdd3af33cf34496b5362cef1c737fe8f9af46aa9733292ce751b4a8dc2d9628a3d4f85d1950762697f6c0a2d423a99d77932195e1412a382a1c4c7a4cad62fdc1e2a7e4614ef7e9c4ccf7b0a196aea3d3d044fbef37a5d7e337b5eb231f4d5e027cc623a54d2e72c44f4e93153b139ea6dd1d371175306ebb3a7d55cff1d9ec0e09ef9575e9ae340ef411c49f8f6cd0691006e208983e7f0a9aff54c3d38d0a1d1060b42392dbb00d41fdbfb1121efb831fbe8734ff448b69efd862af32db4ae836d5fa6ed75b7957bf7efefa419e728d6290911738c71641af8509d27e4920c7d3cbe2983581e276c2f21ccbcc8fd7f07f298a3fc35a923a3081a4ee344b2e647d9f07302c03add3031373a5e1579e54dbe5fd0f3d6391bc395aee52e375b626aaebd2d729451e04e63f9e394e8a2812ff524415f5769730107d20911a5d6a86d21edffdbbcac584e2f316c6529c17c35ffb09d489f8154e5c74f6292746ce1d89c4790461f936cb9fca580dac01efde745cb8db798c9e5f83bed99bc8d623534869489baa74d4415311ec5f996012dce2d3cb9b229894fc1cc735694d803cb07479c91403b2409ed3864e3cc91b2347120cdc8443a08b9c9e2ab40243d96ccdc472751dfc35ee3c6783f835b9a78395887446372b48f4c96e65b0073a5625f38edfd719f2844f92a59774dac9a9d640cc86a31467d662fb23e4c3e89f6b0ada5a3e59888501e74a043d3e8ca7767de144d07dbc77ed58ba55446a16f1ac8deaad1a96ea324347bb19e1dfdba1b1fcff87ce308fd9f2488f58f11d12cf7f219d0dd0f9df78ccd37e3d21b33856c0c5f41bfc561f1c99a4d2c567477c87776869d30e0ca8c7133d0c1479633345478b4767d778daae28003d113383b4c819b4e9b32e39f6bb9ac6dd06655a4cfbaa9f91f1dbf3530d31ed16d2d25c4bffcab99524be2c49b4e81369a95222f5c85e854c50966018c85bce0870c03bb29d2ec8e49e4a3e12416fa54a63dc37ce59f7dedefa83498c5dfa258a7189ac792eaa7560863f09d0ffb5eef7cc7013271efb0ed2562f0a3e3c8186056b9b291032c231817328fa063e4f72ea599a4f9095dc97cef9f64c9ef2a65201a5712c08380aafdffb7489328b80b3aa81d747bb4d10fc1d6c756b3f0ecd2c17e5a83fd1bce822d475ce51e6761e33b0dba395d7a33cbe561428f09eef6a76b072acdf0d2fef4cf77882ce827c6c7585dd7ba4a636b460f1979d772f2302c453f2fb840b0f8480c17a2e79a70cffeb91fdec0e87862c56884d2f5960282a878add10c96bda4c60bb014dcdb4a64d287db3613dfc0fe93182cb6b31e29d4652bd979909902ebb6f5c945d454be6d89ea19477bd84328f746998ed7b26c0ea9874c8d0df286b35ff1eb9d96add3d26c096279c07b0ac9381b51c02af9d518bdb48d774b4851e60a289d84ec8d927bc30d3d34a96f1cc79fbedeb6749c6bdae9d9249d12446c6affc167629c9c0151d61d33e0ff5d820c7457c8d67d42363c741f9a692a8ede2986e5d19f6f832b3aec62cbe58aec427eff10958a0c943f27a8ad76415acdaf09e7bc64a32dea151f4f048dab12c56607870fcf39eb3a8d81cbac408f6ba9e8f4696da7d79e78c9e9452a019b5f8ff58e567cfd4ae0db2834264381ba26cc90d1552123a189d64e7e17fcb01b38f3f8fab280a827b41f1926019bbf2a50dbaf88f3ff5e6ab8acacc80da3219467997635e44357372fb06741a4db8547b4814e008b30e29bf1a1ebae6e47dc6fb228772633ec92e218331a6b562c58791964732365db379afd5d1417840f6a12e24904b5e9a3e29039533b8e60b6c228462c29d8c929e3d1a4892fed952452e7bfa323ca4d92cda958b6d1910aa04abc04827507fe4270a6adcd4217eaae1c5410dfdf4da6dedd953e04e45c9c13799d1b0e61984d4d6683e2d0577dcbd451c39fa43d263db29abdb3e67dd75e36d5335377f474fe724bcf093b75077fbe789b329b473e5a348b877e03a2ea9832e8e77465368159dba9f2ebb5a59d50951944926b047b448c385c69055e7d912e3a1f458230a8a5ad075450e7ee278481bc2687bd7cc645e329a53a91b678925351448f73e9d22c13ee5d0078588d64a9eaa9d839b808a361e7c8ba52b4c3e3c8b7bf1ae369e53433e575c211ebb738362a354f86bf27a72df92fb1ed5f46ccb6f4f6ae78b9cb063574045f5ab08d484f0532b24d990d9970e740e70dbfea95458e5313dae06aea422372a0faaef8db1d0208ca354fa0c1513a652358dd95859c0f3d10b2e6ac27827b274a9aedde3bc8a91f5fe7e8ca66f979052f76c030e5e4ff1c6fa8d477071c038b28e17629ae7782df390a6c71d28f2c87d11070a4fd44e457f663b1b5d0384306017850bf7d5216b11f47e47f4b3cdb55d2cef6d715e548586e8c854dcb00c4019c06838af082ecfbda4657db1a280fd6f95759b375efb2869eca5927409a0de2c23418704e2f8c2633aecd6d877a4f721054a11f6589ab4950c6342b772ea7133baa165be1807f9bef284e1dd95b2491dd6cd7022cdbba094a281e41b7e518facf0f8532ef9e4cc1d95be3d35af2159b2a480246130e672e55971f514ae6ea01460c6eddc1b17bffb8f093775068aaf8bd8f2ad2624a3a2039bb4043765aa48f6748d8439fe095bf538e67f104e46b115eea578e61b6bc48be3d88ff8469cf0bfb6ccb4ed053216873de6529be8fe14cd7019262577b740cacc5006dbc3af2dfca1f4fe59e33a762e0879708c6909312ef7be2368ec0ead5cafaae7665f695729c0a6df04fa8af1462320574631009cc6d0150f24caea70ce1859c00c8c4412c39d42c582cd9c2e8c187b656de37cce01a3ae37eda6d3217b90dd2f42ecd7c75692695037def6745c42db2977f2c63b8becfa3c2802413601a3b563bdd39d1b5f3a8aeda8a11279335cd011d8e1856ba216798a785fcd34dccb732bb1e2fc554a00181c59a68893bda0eacd253222e500aabcb13331cf94896286e5e38d7e2ba38da16adf71c15a37b99b99d167372e1424243efd0ac0db84237100b755aaf5083da7378e7545334e21533651e32aad492d60824a5d69805968b22aa1be0b47c48aaa210b338cc56d62b1f14b4885f93c00c2399fac021965bcdab2273907aa751f1ab5ba3f107721e838791209d1785948e9b35179230d558a4b45dc593883a64589443fea78cee83c472c4aa985d12d80478e243754d2957b944425911669b4a8767af0e81e434cd97e9959aa2b6a25215c387c79101fa1eb363b976319d34cb252c8619a896aac4a3f3ec37e2ac9dcb6a830beb0dd3b1773b19aa651bb46caedae9b268442aba2f9198b1ca81c66c0cabc058f7114cb428f96ffd6ff833aabd50a81a437c29cbd808e0cc9ba68d75da7f825533c7f26cf9946c9adaf0a358be2c70a6f1781a4485b1d425f27a8721008ed2eae7555041b4b5196aee2a8bdd7a194a3ebc61858fff347ba517253ed84481b7ff5ae3eb9c1f037c53f5cf73a1b9bd3ccaea5ff2130e38de3251ce3a0370003a7cd59a4de30427a03e3506e30c42c05132c499ea38796503b5ea9d01084ab26249a0a1fd8029c88a14f7f86486dfcb8e5e9238f4660a64f41728bb1d519b40374f032183d9568f44bb83cc7d775686fd379c63990587ddb93e545016442a51c174464268585523d51d21abb7477098a5a32943607db9775814b583724bc18e09a1b02b3363ed2e452119bd995ef5aa8e8b8300d13768dbdb80957dbbcd269f16bf8a056c64e5559caeb229ab24ad63c1d8f0c174995cb149693a667832222bf0b41cf79bc20642e3ae36187502606c4570b9aed20c5ca0abb9ed6532e17ddaa06aae2a49e5189d2208ebb1805ed56c223d26f072f932500857f6a27044ff562dc788c6fd35e30d5fa41a1d53a1d50c61267eafdcc6a46a682b9d46bac270449fb5f2f2401a2e3ba46a0a83763428f409120b1299dd7b96d41d2a7998c3974fff1b33d699fcc3cff842050c727d96cb22eb134230a47e7b5215e46293af3d1d54e0949b90436870641451e0cee6e739b598df67298577c2edfb152a32ef2a56a6ee5d69ad57e6c6eec8372612d6e2e8c801b7a80de62c12aab703f8fee926a3fd2cd66779a0047aa146ff07c7b5507d660ee22d633167149331f6f57e06f9ac628246be7b878c348276f1aa74eaf9a394a7aa1fb3cdee70af5238493aae6a18dcd8f7953b72449b9b405538a1dfa5005cb455a6862289cd0600101bba4a438f74162f1542caf658f38d72d8d6fb1c3cc51d2ce9629802d3a124c59387404abb3125376617f86813924391b39ca62500d7ca7711d297202b87a7a0db28fa48411beb57af43626373814cfaf07a488af49ba37e455b87aa7dc06fe91825de04cc3a51d6194c72ae20c78ef5b8f94911bf189188ae87d069705566e87507564802973ffecbbc8f13c36cf3ca339f128309577adf73ddda25ad4d73e41854c9da8b399e15ed1a2058047962c088f709a77c5e48c9bee50ea5dcb07d2729979f8310285464a9ef8f468af5c220e0869747be37e18fb428d2b3a4876ef7d1553f0b396d4b3325c243a5fee8fd3262d6242977ea2f797f2d8f15add92d9d3718133aad0f69ca891ba43d075afa3e376e1916507d18ce477cae94a0aea261856782d815169870fe821ad54e54a18c86d6dcd6f0fa86d8339e95f8250eb58ae0cbf4ac188bbf6eac800d377addda647897d731016860dd6c1aae09e3024e6272cbd17f5f75c60cba9ce52934fe8d0d353871ef28d08e261a78608f8391552f63ef821991dc9492505f0a7424bea2d0e44111d70f39f7fb63411251acc4b23adbbf6d4257c813489850e5e0f12501f5ad3a21b35eab85a372fc2e1807a24dcb01c4fbc259422a76b7f7dc34443b93c4b9ac0849bd2f1f686d311bac3c330e29fd8594603e51c163d8dc583ac4093e84301f2e61d2cbad907d6941d5f27fde9ef88aa1e5affec1582188c2b81a96eb7f3a19fbc548891864c92a085bd18fa3701a5c881a5350109dba828077edea83fbfd24d73cc571462c7affd805836a47e88a82b3c4d34f977acc52fc3fe60eec41a4c72a8df18a2030b76d199cad18b04e718488aed6033e377f819cd7ad091099558b5c8176dc8eb7a9fe33e9faa2c8eaf6eb719f0575ee1bfa96ca09e9e3d54a38f6d5e0f96f790b77398eb10f0f7503423ed55e08ac8d6f6619ed9b42a5259e7792fd72254cc7724aa692bf9767a1e37c051cb486b0047bea926c566256e7db37e73dfe9f7a62354acea8da38b233d0cdc9ad69278a3c87af8ab102eefe034aa37bfb4e1201309c9e3836c99af913135d10f24594411cdbdd89236791a56033e0d9a02824ea1bee6f6ca655664429f45365521075dd8bbf9b152a4cf154e8de198695557d3c0a75e4f35e4644995dbad74d35917167737a11b82e7bb6138292740b419dc6ffe4772654c864db0297af1352039131e6bb5568f997ba89e8169919f10bc7a73b933d5c174a76d486bf192cfb25d85d624b98c860ced212dd8d3931c05d9dc7f9fe0fafc54e46d62dbd414dd0012e9ce30b8b5876398bf8f9cdbbe4fe9ee5cf410d3447e53b9a8a00796f9c5a005b9672e37541c241ace344bf67593535686619a8f64bff793b9806dbeb41208a26f416bba0aacd4eff7dc74b84b9ec8cee358bb79be49c70f1a748ccfc65ab08585ed87b52bc1dc94a6b895a5c2bac0a3fe49e226c394388835fcc32eb3081e0b97bbe0bd49f3c18565892d235d8fc17221a5ad1b1737c29bb6a9cf701c92c7c11f4d3536e7ab2a5ebeaeb9d58e8641b607fc8adb2b9cfbb5f6dc0018359344228701c3b677505d7d0c99ba10d826c7ec1bcef9cb634c5a638133e3abc071f9cc698a3ac09babf15cf9eaac89bce9da90d79d887070be5520e012088f3fc77f1b2146f8c9a6e67c9ae1121f84cf57e020c5d8957eb67b727a9e26ed56f5fc3a9b58b88c563bc865a36c9071b661f98f286110cf2ab70c48ed05c2e0879598c2c97a6f73daccaa3302f6f6418327371e2423d69428f4d93ed4d176a09591259e1200cc3debdc046b361aa41d7f81a93380988a62ede27adade6bc29c057b1b2321765f48eddc7f84b9423a540003c865ea39acd9de225983764f37415bb5f1f86465b933755073f608f82983b91ffd0bad81ce579e170def28e6352f0cc4329467394a6c06ea7a65a1b6e22b0f48efbb670b6f7a9242f06452eb5cb39d38657d867b838116dcfb2a1008f4c87720f8fb8320f0a15f38b999a0a91e7d8184f32a5ea704e129da9ed9d068e1da851ab122ae7d026a596ac1e58ec9dafb5e3c74115c464f2ab455adeb6f4139efbd9890e7357a0534154b91de69a842ab87c150c91bc3b2bc4ac0d0d5594c5d56954d20afb4a289ad176db1faedcec60ca2a631b7f9b9d02451be803e0ac4dccd808ad8f2a8810023d4439ab177c7e5ad137d6f74829347d16da1347c105528b313e432468d8ff946d06fc498940e11fb6e99827552ea5a71f31b7615e677d185d3ebb511d049d5749044b816cf2bdb76289d1330d729b854968fcda219a767d43503e9eb1d29353ba864fdc2958bc2bbc5ea8a4d7bcbc217ac609397165e4c2cabcf4948c0b8990a6d32fe1263b8482abb246001dd6b0829b940706b59170eddcc904ba16772617f7341419cc62bdc419 +MD = 00c495c3fb8fda89c667d2cebd93c8c3776d633540b6e1e7f31475e4f6b61938 + +Len = 62464 +Msg = 93105ddb2234bc9c855b9c3f1585cce6b816ee3cbd2c7c67073008386eabc8a5625b517ad187a34b4b8f66ad65c773a65b859661f9799226bb3d668a332dcfe3ab790eff0c79eb16fe40fafc51731d9b9c5c4aa1233a8f76fedb5371786dde4bb6921cd499b29de4e495e195a231d3afc2c093640516783e1a3256550713fcc5cacd015f40dbc19f47b7a2de1fa89cc917dbf81265b657665569f79ea6c632393052470acb9c5d2e6dcdc541928180d1e1d501130cc133d5f8a9beb41e2e878f314a753c009c7b799f00d325c16387b069d636d0c2e015754a19340036f403af13dd145ca9842268247853f276f7ba4cf70520af4ebb042d95e2e0e8b8c0ae821e32abd48cfb5be3465ccd0f77e5208ed28a46197af908e51f2b4ad56a3991ee9c72c20b72aa2dd24bd4c9e68cd4c15e448e30770c432985321dfb301608b3dcd3c4e2692238a01d7c0ad0de7f6ca6a59339672fcd4070f614e07a5f82d51c350c519156664ebcac2123695f1756d64908b272ab8599e41e0d9b4fcc7747d5df8f405a3a04948a67824a1dd11b3a5934eb22d951fcf58ee6677603ddbc06e5c4a4bac27dc5b11137e6a5739d54bf384c84b0258bf9fd7436689a1dfc1bbb54cb93e75387714e5902975cf3298a8e7a7b1a85ddc04659a0f75a2f25905a0e2bdba3ee94c1d0126bb2db9825de844f27a8f7c88957a9b01a0f835ca40142a671de1ef80d91a9a64e2dfb8192240ca948bb61a2b2baebaae8682c4a21b69b2c2ebb4a2c4760c6b10a5d3e3ec164e844e49ba13bdf50d4f014e99c2124192d476a5a70b3c997eddca828eef83a04e1c90332ffba98812b2aa6791d083591bfa02ea3d7b41b9ce7cf2f7851d6866ebfe0ad67c24765b5ba00a402f527dd861bde817ec958c6d97c31a734b1012c084a30eb22340ccf544718186b6da7a36007aa6cd38cc751b473ab194454a0b43c4a62c44b9b2e5dc69b1d099ccdb010884cacf68a6928449796e48c9083dca771861d41cb40d898747eb5807c5d69ab64b28b278ba8a328e9ab8508ff85dd8c0ec70a69886b3006c4b78884f565fbfc5d00f007be916284127b35957ba4caeb7dd5d1446b645e311f103f1dee2c8e8bdc00829f0b6c8ae07ace9d3cec26cb4d257819da5c728ba1ee4f825350fb48e14778eaf65b8046c4896c640438540a386e788a3444dedfdc973df82f011a54850731cf149416bcb9a71c33f64876ac37c09ccd5909f1816c84a24ab8ead1d8ff85f3da02a07614463ca7b21804d4dccf83ad8a5195f09ad91b4620f7f368fdd82885b3c765e877f4b0d6887454b5c08a1f746825ce2651a9c6f020f20526ea9757b1016bcdb40d4a6b6f5e12216380effdb610dc9edacf66ec6af5b30654c8c47c3d6cf7bf21fdd0d53adbf851244586833e2a7eec533b97f47a4542e03abee7fef29e722278700e5601a830ce4137d81ad35d149fdabec548e9b9a57920f58945983ce4e0028d8d578a6cc27e027d6c2a3c51a4a1b780774f7ef8e6bb4e9431b9f7f156e0047dd43e9ed0b44bae40ca1c42af39d932a8357103ab0d8c0bc468c2d662ce0ac9676b75057c101c8fa77b56ad1fd82f935f88163e7920d6a1adb5c8ff3a57469874db628717ded8ebdb064245488b8b21ccf6a6f90b29805676a033381ff67cb8cbab6fec4924690b03f347d1d359d525180989fa082f727348b16b4abab59472966303fbbcecb63748cbcc1b674bf5e76a49280a193b943f4a71d8fdb29b760efa8c857d153da7b6d2153be9ad67d4afeb3de9f0e654ce04a567e218afb00bd421ad5f3bff2024d2c859fb044db758c5c26d357616820808801cf2655bfd390b334ef8fa209b15d152207434ee436a701961756251cd2a9504166eaa5b89e9fd57f7b88520b962fc9af00e403811f3fa15a20f7d413e1cf158dfc0b05a5d04f0b63107a3a87ff49bc55431f2d52cd9a9e0b76d8f8cdcc664a6ff4e3ffe7f702d78834d1b60f7b1f6fed145106a9906c6a228f560dab0103813fc821feff917fcc476f2b6ef2882546bf1b263a2616098827e11b7d4c0e3b3c960c317d6d3dfa4c2915e3cfe1a4fff343be0b3228dd169a940285d2116251ff0b278f05b13b26f9c5cfa7534d6013d823738c89525407f3ff6a11b6abac0c2af7b0b7225c377a3775f2c283a637e577d6e2069a12f94246b28e6b757b29ae52f42e365ddea16897e235d1fb7c9b0954c670160eeb5b79d555f5ef98f089dcf988f68912a917669d62ff62054117e3e18aa447325be9035262271abbbc4b0ca11eb02beb5bf818baa0b5df4b942cf9c08c04f6bee53073306fa879382ecba1cc2dc19b3267c1e362040fc638d648df545308c0ff07b04de1c6e087b8d8aa50ed4ec153924d035b460553a3478809f92f6826129d43e6f8091065c2984a558e86fa35e1857c4af4b93d27e31249cedbb443f387f41a4305f8c4aec650d46bbf2ba885c18685f7244e140322036c35fb757ee78dbe0b630c336c31ef9d374b674de237800ffaa67e77125bdca59faddd056178903597b55f6b7f85bab7c3731b503fc189ac3ab767b6c0c87f7334b4f4c6943d3bf53fb883f36710c45b19714fe4f9ca6ac5d6c884af97af86e6cbd9d74baf8bed9773fb2e5dbb7978d199d4797ed8a88ff74f5839a41f978f9ad58af906ec1b2176c4eb931d051664c5d50b2c8034e285bb14c51b46c106f5e9e256de8b0231743da31876b3ac7df4924b93ed9ba71ec88bc7bd8e0a1484566e62bc0c3a6a855236bee02db44a26c4e17ded111397a3e4d3c8a0265082762d92d738e6b78d7d480c58f14c813697421dec954b9a9f18573da7fb58dca372e7f1d03c1264f38fc21901ba47cd2a45f8b2082b019315e28c33d64db9e0f0012205ce53f3d535436d0759b993da7dc9454850fcb79fa4a91020d405be1fe0974839221f2f8abb2e8531b16dd54ba977d44b77a8f212b3d27fbf41c1d9ec0dabd7168bdc09e80db7c732c945709346081235bcbe358edbd527598ff091d7cfb56b285c39379f95558f84d1eefa33dbc08b81c08ae6868547a37a1f107a55bf5a50e933a52cf3faae6aa28ba8d6cfc357acc9f3bda97c389070ab8fbff7f854e144d372be5e979618c51657319aa9a5240278f6b4e2e27e461b68523d9f421910a361b9d330fd003b4b4ac4e7ba63f9bc09192a1f274bbeef103af737d4a5843ef92e79826886c17c59ca3559ca8119963d250e4aeb3a82e1db9dff3d3c951ee2a294325a59e742527d1f58f62f73bd391b1733c6a31152d4e9fbcaac4bb351925c3d54a999710b6411b4804b6dde3d2b3f8a0b10e382b71ed7eefa036662b4d47284811e8bc6a517d4245bd81a0321c2f6d814c820e1184601e1fdd12145c11f81f42827b55a77e420d93c1a9894f3b6fd9be14aefbf0ee1147f56a410befeda0726ba43aaaf2c5f945da1818e062b7d903ff127b49f03566c1184eaa930d69a7e76d7f0d0271af08b2c4cbb4ed9516d7b5eb4ccf3e38e3c953329134f6de0e7647ed1bdda74cc3d81cf7e167f70ee2d0b52acc9424f17fa1c7e83cc97a89637359968190dfac89d14b1b621748f5a22ccc659ab041429256e3e455506937f107e70db810f3b98a5b07d957ae2673df52c244bc0dde54a35070cee7b0090f3e9ab7fdc8432b9a4ddf17d9c713dab020ac5f6e3c91424f3af6354df7d3a33ad495930cba13ce785bc344c2ba2eacd3eda16b8c2126b75ae0b2fc0a8fa07edf3b5e41e29567267a3a71563c38e7e304ce99ad4574b3839d1beb8badb6ffe427f95f8928612679c9744f15f14a26c96d4cfcee423c1fef41760aabdd75d81b3a98ff3586263a108c91c74886f7d3a433ee33f62a8154436e76752442d3136c3fa0a50ba3ed8a33ec1740b9a648d6bd813da48da64c39c74ba595be85d8991f5e97bbd528bdfe291190222ef743175c7dc0b87b5ea4b6c3018ad2414e8c507cc107a859bc9f7e3c2283d47021f27fc94fffd787f991b37eb7ad957444f821cb8d77d460089af2b24779c047cd5df44b20826a7b201b1841969744201023f453ed70a7b1b4b642d4aaf94d7aa38b5f2b18d2d71d7a4bcd54c6cf490d5a15b25d0779891667fb57ea708be3d34a84a9b25e768836b028bbff6edd0a03c9d74131031ae255c972173cc4b7ea186b50b8251bf6e38d69bac88ab74af1ca05708b170adb1a3783226b11cc06ca12adf876cf76db52ec4e0add3cc89d6429b7e87757444599843d143bb3b0ffec89b983caf798ab3c19061fe35eca5ecdea8748ec38d8dfc7049e4e7068992bb64536f99be4a8f109dd3a02c038e41693d31c97d403ee310d7e4fdaf079af10910dcd62d3dfcf32200092b95e123f4c1ead1fdd1601b0c4d1bcf8c0a52e1938e6aa26c7593035f8eb4ab54ea3340288d63f37229a77441f7c84400676ce002b1be5e82f151f01cad1834cc879e5565223530d6f48b0d2cb779fcfb64aa38b6f9a84bba3eff45c313a72fe30c76f63336daf48cb08f3834e29d54ed70bf3e38ec94f492acff66db48ee0748d751850b21c1c913fc2877e32f9ed6572a0072f10121037cc9d6e5ddb369556e76a294658986290d25eb5ecfe51b1bb8ef127987bdc8d309141a4532e98594b4790e96cab4949ec8cc4c5f53b98e7f933e69a46598e8fda82a3e078361df4fbb4cea2eb3598994e75dcffc0703558c66967aa603192dedda6ac6af37a2d2d0f360c9aea7eeb195d968faa762592cccb395c9d0e8c4f42e2064289ed8231cd2fd5321b920cab92c2f6c3103ee3160bb0aaadbc7af12d8391a84e878ed78f9d029a296b0a6941cd249d6177413029dc1cc5424fc9e894689196b9aafd00b162318cd7d27b1d138f2c945228a7973308b791039e26f9ecbb8bd8693b6385fde763b3259a0dae8ba382e27c6b979d9c582a16d9f0b7ad9d4226744881e7efddf34118fb09e7a610d0cd8fc98839cccd911d5caa8fa48b0fc60b743dc6b2c5b84d73c24269328d09ddb5a420c6b6ab2c7e376c60c1161cab0ee1df2f50eb8ff6bea0b9e00015e9e093e428686e36c222e6214de1cf35e6d7e451be0869bbd6fe0e7006bf17b944fcbaff238bc8e09a1890830717012873fc0e0318af574a203a058db0c5f54625c51ab19e701cddba744503a3e89e184b83559ef50c62bff8116a9cbfdce4e315a37a9f9fffb255aa9fcd4c283ef02cf4d281cb5e07d443e3eb07483ceb2ab89bfea3743120d16ff302f0049e003d8df8535a315988f3fd6b30a2362eda10ee3f3e5ed659bbc3531c0476d40d16ce62df6da779f1770916174904119d91dead89cb716e21b8ce2aad0c26637e67ebd42f87324a2bbc5cb56f9cf57f92f7dc1c020ea4e390ff3b1c2f84c95af8dddb0b720bc14d113f3403fc923d2813f65264316dc1ddae79525029d32760845fe82e2f601d29aae9db284594a3b62b7587ac9e518e06840c5aef2361081e29d65865efee0e87fea0984bd308f0cedf5dc41dd223d50319a19d20a596343bef2874da391d5c0f164db2942c57ec1a399451df54495c7f7621610c38da7260de3e84b29555ce68f9d9722cdaea5f4240037619ac2dec20a172efda63958c35ff00d0188bfe2d3baf2a203b652811eefc927bf463354c8ea47e8fb3af2f486159569f32a480412f412a04e85378cac5762aa79700cb4672872b88bfa3106f8df4293b286743d2edb6bf655c2e44516fb5b1432a0b56a07450632425c7a0c960d95fea235db0a81c16d38dbf7df36f95c11197d70d3e233b090da90ea3481d830fe2f54b0c2d8a656a4dc238c9edecdfa330ebc48dea9770b91160a1c06e359d9e98a4c7fe234270b9154def999990f462f8871913c4c4ba69579107a57cd7578f6b3ec0bbfb96e40b13760d7561227d064fb2ff273371c220c68467dad8cc59e9420d5dc91b4f6a682f84bae5ac6c21981fb69e529f6830e64880eae8ecdb4ab40457c7b2ed35a9d951c11d72e334891f4fd91d1b706fabc3c4cfb8561eced3f99b6525fed70f4a6561735fa36c435ca3c764a40b0f4fdbc023b7f8acd86c9bbfee7fa03343a7f41547e3a701b061432d6f9f5da8e2d069e44b81d373817c4b0ee5ec60db98c350f0eb591e131755e6c32fd16e7d52b9fd382574703280c78aee68f68c7d3e2c05fe351cec610ae9ec70ef43ff0fc8d43ec299daf8713f1501685fe34ca29daabc470e763873efe3fe39973e39e8aae7d58c90f992b8252d5783b2fccad11d041dd45cad2ad22f0cc3280f08438f61bb699ef01b67909ad935484a892b922604cfac090aec05332ce4443fe9468c5618a3fea3869e8006df43bd0dd29a6d20707bd7fbd5a394620b08950f2b6a68f0c52bb68f826011d20828ece41e3deb7311c85e1c567a082370d8246815d6aa968ca8ce9e59d5c9641c8dddb7b73c9387af5f4852d597e7e025fbf830eeb3dab233c34cb751243325e319976fe3c0eec412e79d879922bc00f01a1951ff2880ab83233ac1b476d47d257522f2ebf18293010965a2eb440ceb9add90b1905e25e944709fa6c8f236d5a948862a17f6da5a456da98b13246108ebeb643ae87d50d43e54844dd6c1e093383bcbfeaef87b82a6ba712a59ec42c1aaed9dd251ac8ad43875f09e250a5a219af6fa55fa1eef74ec99c36704c1387da18a446311135a51fc7beb81fff62de597201b194191bd97dfb1a92a5ecdcaa5966b60d471db48b3500f7edeaaade049f6613431cc786d5247ab2a5bad38809f5238f90db92cdc62fdd9af9d6f56fbb381634f85e3fc870feb2e4ee23a2ae2d49d9818f6312d9fc6cb8088a69619068dfecb73fdcd45943594e31ea74dca79ac3e33c3772107184781ad11e1671f8a3e3644a981d47a1c2c0a71a1922e40cc90ffb20578d0e1d04ee90751372a900f2ef174f8f93ec3a55b1582e08c24b563e6a6bde3e187e44d41c937508e26941bc5f703684d5449b92c7dbbe17b7851c717fcfb679a8e38198aeae416d0a451386b0f9a01655e34df0609c6ae49733b7f8cc915988b2d04bc8f14b7ace3ecf2ed8803e1cc29a4aca051834b4fdc5a9c13acd5b27e9dac70bcba0e5719b1469dc284997fd0826dd88276b1f1ca1e789b0cdee77b22b652a6a372a26e6520fa7b40c79a1d155603e00fdb5b6129f51461f18cc9188bbf68cbf81e96a1991a4fb3eeb9cd62a48facedcfe94b43744b75154a1d4130c1a1360a4428b39abb868e6d55c3fcf78413b1274908483eb107e4e0a0f9186bcd4204890ef7c101d64b00d3fb4bed83bdcc5ab505a119faea11a9ea79881673b68c1a70def3887def53ea0a6abb69af58a0eebf8b1a872026510c5a603102ed8466bfe83c84cfb71085973d2a7938235c79b76f64dd5a586eaf5558da5fa58440b73d19b112605740c94e92c1ef2286d13efbeb17505a49c913cb0e7177c8def169da2ac405010488075631b983ef80c0d7035b2cdd4e9c3f65b7a2ace231a39f63df43fec57b66ee27f8439a9f66bb302b17e82beb00f8d88d613c1308a97c528d948ee6ba96267d127cf0eaaa51dc29247eba9de136069d7311052f51f71113cf4030044d19ec3aae2a5f330c768eb3a982f80a29b96e95ff0f248726e509e9112c54e0e4ce5f2fe449b9fc2c9d77d7a369caf82a51d7c81aa2c2a4ed390cdd3ba12003e97b28639d2325ce74903f9cf87c59f14cc5e93faa14070c10bcc4f635e5bcf4c2e9efdebffecc304b168f0b9103cd7cf7df4d0198ab1a49f536d63ce740513bd9e05ba93323d6aa19f60f2a56464e229365ab16cdb024e3066fedb73afc0761942814cbe2da6ac447f966032f8c02698820aa87306a4c60a92eaf70146005ed5d88c34cb36bb0073be73c9e051f14dc3fd8f35ba823bb4a483dc46e5fb374679bc910358d1dd1fa5e883b01be45aa001e552e9a1f2198284a62d5b9013e7b57b5b3a28d5a39f52618a309364447ed5f8e5e024d7cae0c8317668a5ae4494346150e225c01074311d2024e457d6d0480f8bd177ba7103fe217108a58ee1bf4bc22a237aa6acfe445f26bb33453fe17ebc238162c878f58cdb22a7ebb09feb53f44378a807dd9004ae2a7df0dad4450295698a768067580cc507a0d8c1c38ae59e394c2e5226cbea6087e7cd87285d5c11aa471380b08de6859cae0d20e120891678288e241d246e3ceb72f9b8c0ace3b78261da37f929b2835e09e95c9d4eb6f39c9847ec251c1889b1ca260e21b6420d7e452b24859de954c84f0dd34c67e7cbf315dc18d32571ed6737d2e5cffbef69ea8b96c4fa6d03506807eb33730ea3f6282bcb38abd2f2ce985670ee20006483738fad97cc09893cc9bef1eba5956418a83485da239723a3b1a09065c64619b095cbc01b8f16034049cec27a58aeb08a0fdaac6bbf047d134fa0b21b274f9797cdea7ede97f4da2184c1cd5e00bd11e0ab889f6be28d7783cec1464cd78f669f88564a4f8b389646e73283054242f0b327c8ef6942a49b7bbb9ccd993b880f4e5189b2eced53c0270d9b740e71d2d557e1161cd233ec6161929dd87ed7bbda0ab60f394512d8d048445720e823df586583ea98355ab761ebe04ec76c30bd8f8b22515dd6b02a5f3148000a10ecdac2527cc0e2111bb80561312a4affeaef781632ea911039eac5787530b0171157dbb53843aae3eb40d467e1baa3984ad43c5244556390147c9b645833837955d8ecf442bd232c6df447768e6a91c3f50e34b5e30c45b4c46249ab6db314a60ed07e9618c81b690844e703a3c476116deff9b7ab89c82cee3e68a42229e42bc0c1192146eed4084eb52b95ae52c0ff0a1c13edea586b36e65370f511f26289004d450c598bedb8a5b79db32a9012eb7df4fbbf4bf29f814163eb04b9b7203c41b77aedad39d8c8a1eeb5d28506ec752e1d19a23ce2e58a83c24f5985e2adb3f9a2231bce7325d6c7acfc7a6a11ae0a9ef7064d2993cdc13201066a030f5b8ebc9ff63d39c245518b84da21365ae84a45053a06be9fc8a3b0a2b8ccbd97ba3afef33cb87ba1b7c771f8f75d764d1b82b4ea4d65586166c09419dee822065a37355e9f14108c1db6ff9bac85a662c86262f888ef838318a650f8d142bcf5bc11f44475e674fbb79e98cf924033367f57d3c2951bcc7f5ea38ba238730ac04049c0275996357b45fce22720f3c92290d18bdafa609fa0c96688b89cef7800974d0d79c2a9be8529304014d136d4d1ad7dffa4216479a1b96dfcae471ea121119a40de49a79ca3d1f7571b3b8fc2ae35abb3a0828de6fcdf083bf5ff96f2cc5fc00eb747063c41e0a07bccc8552f22c9f92c72c643641c7ae3eb21fedf094cd24cdb87534c3a09d5da429bf02d76c9cac4ee7d452b7d8b4d8f7ea4fd5d413d099f1bd0e6f0024611f33ffb5b7f362dc8bd5e3297bcafc3a7496b0153a83717764564268a8821913589c87d52d0f9a944411035266d574018c024c99a26576698ce28eaa67b1465a11c70948eb91de6bdde88e779b4209b22725060498e2ea4e197febfd34f575df519ccc3579e3f4096044cec2a37783f54ee6257ea16294d014149f8998b66c4a20031ac5606ba417d40c095905deaa71082df32e474d3d958489f3751a5cf44286e4391f2793b83d4228886449dd45cf5de2b63d110bad4571c62fea434fd56f8c27726d56c2f622b17f930cf8de1eb655eeb7d38704ac89e3b29b0f99f7d77a39b40dd4765f286f29fb71789948fbcff9373e1632a00209e3377f0da6bdc20b9673527e0ed414cbb3836cd2b483a5c250a693319948766c783c220bf2075dc9a94c8993a68883df5500ca3fd1f7e4366223fd4a4562d25aabaacd32033e715d7c28f93ac6e33c531958d4e9790c7fd43897c58abc58dc7d8367c8aa63cbc66e17edeb9cf74d09ce0774d2f8332a4043d9e8341888905d7a085c5b9a9a1424a58085a7e1c02eb0f8263c0c9488b9ed2b4d00901d30741cfc4271ce2a2e8353aac1d67530aaeefa7a7e98c9e3ff214f369dc521c03d6ae3a93a8f6884a97f1a24e2ca9db13cf5affc1771531020ca2e0ad021312a36dc7829f79c72cd936f43bce948668efeac9725faadf041731c524feefb0682a331a4258181343072bd9419e0371aec7879799e2e36e99f818082ae003ae9f10dd12f45e127f6d3d0d0d6e4ce81fff633c51f0ebbf28651d15c88ce0dc8229ffb24e1301e7500de3410d0c4bc0d5dd1b6f94f1eaacb0e7feb192a591d8cf9b3f592828f4052997a27e54c62b1c37ea8897bd27602a8cb53582031f4396eb6558383d90950a80bcf30b71065b58ba9a135b570bdcb7003f39fd864496756a0af2e5faf47545e9c04d7eee676d04d25e4410df09c0d0dff8748a88d00b12c00e67d8eccf0575c9541a4f2943d0bf13b9a35ed1cbad1660738dcfa72c11fd81e25f978f8ad5e8a3eb0202ce2616d5f33eb9abcbac01e63622de235dd33b84342922885fb2673d0de76d2029a8bff8055fef6e29355fdec5a90e2c094fe8453b455941e9c029d16bebe42dd8262c83ae8fcd4c76f2275e9358664055fcb8bf1bb97c5a9a4eae54427aef926648fd076360cb9d316ce8e423c39f16b0842d606a1804290dc8551425f6e7e4306b91f1d85572f6e4f0250e0b7d1105a550a6c78ac379339097cecf8ae27599e3089be151e05bd00e366c4a9ee754a3a10cc553125e5400ef676bb4e5e01139daca6b448493decf19ba1f186284e2674ff2f9a1754b1d1756a1cc82db62333aa41ba099c4e2742a93d5ce05faf842c6eebdc421480c4cfd82c161a7bfdb6412cb66ac5fb74ec4990913e971dc93ee4919b7a550ff245c29e050bb9227ce1c68bd460f14c04b4890e61f020a6bfa4d745d9b2dceff35d302fbda3ae087bcd492e6344957746a6898c731983e4d9e08cf36b2cdd9ec934a3f31c87001741a1527f2bbdb76382ebd1709062c6be5e178b011a8f6303bcf1a252ea5fb735188669e5f37461fa00aae9248073f31b98745dd9ae83730616bdb6b4eed2dc4c46a417c885119a23 +MD = 4042fda4cd190e654376c3bf7e73a98c2beb0cde43fe6229c35f93dabe083162 + +Len = 63560 +Msg = de8a1b5ab782ec00c1b4a818d5a58e75c8e4c537939a9ef7b1631a44c95cac538d7e3ff2e22a7bbe410444965d05844f06cc2ba94d357482e92d694ad9c5a9b74b8569babd02b9b162b208dec700eb18b69c1ac05b15bbf7a5a9e40eef5c5b3ee047a09a8f332d41eb66fcd85bbd4a38a1fb9b630461febdae7f927953494951136dec7aa2e45fd7a6c7276d606529178f92b47a9142c23ccc567b714cb5fb56ad9f55423c3ed8d9597e9183201f101d48096fee4adf91dcc6d6a8df23c8fab77784e4daa6691fb1cd334203e11488b29307d4a57761f20566a820ac21a9cdda36c5a02a288cbcc5ca8d43d6ec6b183e3934ea8860ef6e1f7274ebbe8b81fc29b509921b09cf387f18349be2894d49290339b97f4db28c92b3e112ffac77100abbf9c093935b1a467ed15211ffe2a2dbb6be497385d1d4c6f1989c56cbb490e70f3d347b0c58ea81c50c714a9851abbc1d6aa34a5175ce24f44191aa2f5f04277a7cf6bcbdee319ab58cfe749ac3ec35ffe6ceeef9c603128383fae521a1f432c45e0c3cee4375f816fa04794e5feeac23d9d245c5ebfaf96806deeee9a2e970b58d80e5e7824103b0fd8840fc4e388a52ecb839fc0d3b42697345adcf896b4914ae5a9eefd11a234b3e94b1ecb7523854c787b1e8534f534f72370a1b7f0025ab6ca04e4f588ac0ae642fb465c3c51cf1114794cfe6bd96e1aabded14ab326c406c5cdf50411842a2186231b19a18a0f17300ccfaed0d71e9c4de3e033688869c59953838b14d11ef0234101663d32b1b94bb40b191c84e2d67a3e530478adb87d954414fd2af955dc9ad39dd477f24381d80d83cfa7594773c12cae307c1d3c994a0e2dfccc837b316d5954d6da3f510b5557ce24f9cab8deb36d6649db4d7293481032ec7205dbb90b50ab0fdc7056b054414ecb9c5fb371b14effa32ec4d705eff8c85ea3d713be054814c2173bc11b45488a25f79ec3f74b6feefeeef9f66bc23652c5da9d9fcadbae36bff3082ca6b8dc04c6a3fe66ca023ec89f84733d3f6f4776b49ecffc6a0f01653bf85bf5dd2f8a53201a0518544639f11797b737fb47aa88ad68c496161fd044c8afbdb93909c1d9c4d2395530b7f01ce9814c6329dbee1d02b13219497e993a088193e344e8211d175501a9e9a7ef90a7e9993b359c70b877109ee28eabdad95e0675108b3b06a1aa2af482d9c686e0b529244cb919e0cf5cff417e604803975bb6d7ad668300ebffcc988cab7454a1b3d884042ed49ce626e5e06938a3a1f8640b42268140ae708aa25403b931e74806702efe014d2371875ce22fa27f3471198c3b2846044dc3cd54bda49d9fad482f788b96caf40315e0dcdd3e281b4995dea2290f3f4e8d4a5a4c4bcbc31e2526b16a206b0659ca37b5ee281124084fdb45f5a267c77fdb9894017505c42ddd681ebd93e72dfed74b88f9594530d6c5b5c1ff2dbe9928c7231d0ccfcf1b5f3480e9fb4c97bc43b8e5dc96e746d90739b9e51721601ec9ce7e57d6c2a42312c905859bc0f93bd8fd8b233f68a2870a1a5c21d62418b2e3500ed6f7e41185f9196a84277798172f03afef6b43c4c55fe6110ac4bc350ff5fa590cd8aa93be7294345826f6d0f8a669c8b3930f3a0e993b7d026b504180823be17bf18c97370fd7d79402c5403aef9e69f25f318edd1679049b3266caaf08833ca6fb10b88a2132d8aa434972685b20083e28411fbb882d2c4792863d06097ecf102dcd64127753cc1d7119c40b898d37f976b489244ed6789a34251500057d1d4a3229367a42b9066014bcd19eeb345da6c31237a1daf35e057fd9ef377d0cbbb780aa8c2c43b13c149689178d00c3fde8a5d0c7aecd02611bddfb2816e0ac0eda91c7e1a2cafab19d8f24f2705aaaad119776a5c59592163ff72f5c28c0e9ab35fe07d37878e42b8d67171ec36966cfc4008a5e60b510d20423ed07e7ae33f55c2df0de17be1bfe46a6b5e900bd66fa7289725e1abc0d48eb1caa97cdf91991bf9a097dfb0af0ae6bc6a7edb2b74991af9ac5114e0af5df5719ee98564218e4c2dab81fad0000b06f5f539943f77d49cdacf93495324909fad42f961b19a0832858935fa80ddaa8b3d95f785eee80776f3895246ac2a55d38b3f3fd86d04ee132ac119a76a4ccfbfbbd02074e1ce1af16d61f7d492c694d8331b25b14067283843db97c8365862e898311c2ac031f45370e0e8bbad0235f7ce6112b6d4cc9de9f96016278c064b4ffb3d536f321a7fe4238c8ec3a6e5207884966eadce3a376e74d7fe8a1260723c0d7e2e0adf8fa2eeaff051b425773ea37c44a05fd9badd0edbc8b6ba736dbff6f67b13c5709b45b73c919a55d1c175bfdff212949b53771256bba87f55351bc7ddbc6b668d435088f1f9cf6f53caae16d4292b14bc0deec20f393ba061c16cf5eaca9fb6dd91aca9f6af5aca529bd2ee847053a6e5f028662bc9d7e73e189cc9472c157d098c3f62743ba12e773ac790174ff214be050e46d5f4e41a9442918b196a3783b83cf2fb93260e636ab17744b44e7024ee5388aa3341ca020d4835838b0d6c8f93aaaebb7af60730d208c85283f6369f1ee27fd96d38f2674f316ef9c29c1b6b42dd59ec5236f65f5845a401adceaa4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afed86bfe535e90b01ca1221da6d3660ceb0cd991fe2aba83aadbc83156f84d512c155b397b5656525984b2c98c5ffe87ab36226480b6e597b100b2719ffe9b4c8ff69ebe085f27127bf4d7f82a08847b421981344aa71fbdc146736903f35a326da4bbf3c1230cd8cc1b18124673ffcff9dc7e6926a670dd24d895804a7f93ed0f463a4270470c8c9221fd7fa94b776b18a8a16bda5be1e020dca01d3b4b4d64bd05a412db763016162e0ea71b36f537e7a473a22e6d79acfe7b1aaaa0ff907fbf0980cacb567f5ea068d4f363dc7f1badf97b77ec85412a06dc8d8e3f4364265c7956d4088f014c78fad6c94be720ffb4ce4150da4a3f427f288031e0bdd241dd7daf975acabec9e50a9c9299fcddcb424c4e96c2657dddb3867cfb4d18e1b88a3f117b89afbfbb30c1afb716c5c067a09a29b26a7d03e1e81f08544dfa9a73abe407e85ce50b0ca246969e8aead0bb16e25a0a9a3bd738671aaca4a70c035b889716469d15aaa281c2d9b1bd1315afeb496a081c4703c878a0f05324f52756697ec8fd12e6a567155c015776e7982c69f9e013b7488f7b62d95dc98c5d0b4d95c1a47584010341a83d95f77f0e6018d61a449232e681376fec7a6ea7eeb92955893217ba0dcc1a808c1dfb9e31755d7bd31fef56cae3e6e502cfab3c4e38d0f1fefb497eb308d9e67222ca9cf8e0e1a04df891eb9cbc6f0d42e5e61525902cb1478674969bc06622172bcc400aa88e8db057e0b90315ba2fd54388f81cca24dc8d5b01cb6cfca97ca2c0695410d54a8923c44487a8f5af93e272faaedaec9fbcf70356e5cec28a3c3b69099eb170ffddcec8251e3364368092f8a3ff08018797ae05ddac6b1cf1a90caf14e8968094d2daeaeb474b6b37400d5feab24e0ec3b6d9e9fde8e811c60c3a19f2f8660df1ae6fb3fec898109a197a2e3991531d3b61a1381d60f0a9f1adf0300b96ca20feb9b4aac769c45d475401eef762c035d7e02e79a7dd29ed5ad4547ac88c6abfa33dd257acf4745a2638cc268bee3c5f7f7aa73402273be4e9c98e818fa1edf5c880f142162f520e200f005e5ffd70a21b7834f29606cf9787d3c7cdc99cfcc755cb37f46ee406811b1fc81fda5704069322ff39cb428d0c1a3c27e4df463e3f3266cff41ad938bb00b24aef64c39f93cfc02d9409a21c4d8b4ad55037675c644799dfca84d78fc5b80eae59650ae952b79ae988b8ef2562c346fa993bc7fd3e7cac90ff12a5b3a62a7b1de245f48c4a34f8599f40f14f51a978bd45522dcad6bae6091a2e0d4d663d43bf146d492d832c21a56009704324242747dee3626a33e79173a33fd5050edbadbb7643d17706895ef6537b34a8e31e9cbfec582f865dedf3f522adc682a4eb00399030540fda31f77401ff0427947e204ef5185ac65db254b820dfa86d33548563eb9d99a0070e3446f1fbaa68412cf91c838babd13a20fee3253f436dc000845f0ef069d096065c95abd9ec12f10f6f501d19ec50fc1e389fb7345e2b55d6445581938c478e03b988b8ff93cdad11cc134c2ae3eaac9349146026c34ef9be0f6ecdeccaaef7ec91489fd767437c19568c9626594851697a69a77d387fb5a02bd17965ebaddaa92dfce8c72f19661057e486751712f38713c714a286669064e1a80d64b6eb3e21d5cd1c39b5fa73dc1542a17fe2ef9ad55c5530fb75aa92f379181253f4112b3ed1e3c294bf8cac66d9cf71ad85874f3b9c3c82f1ccf4c3333b4b0f996dc6a9e76865624016771896eab27d65c68319a11da393ed55eb2c0d6f698c9ee9b3c104e37b85a58264bf5592144d106f8b01ef25b3e955d638d4695c9911ca30807a7e8a4fb22bcafbaa89171d6a1746460e0dfd930e921882c3304b04278509d4dd3ba506713ab8e3e01bc2f45be0145d48e3ed6d8a0de372024884d255373e57f0247ccb4a3a12c569f4dbc2a8d5a077b75a3c66e32dfeb0989b4f2a244895b2bd2157c4c693a1484efaaaaeda5db43d645834a8a35933e38d10f4341b20d78d4c1b7d196cad2d15961776e178df165756c61b5b51fb48b3ea8eba1ac227cc8fa3f837f3c4f07ed3493289830ac58f6c958d3aa6767a06cab6ffeb01a1c63b61cca2cd7a57c55b2b703329bb1876e7242a93d9b2993e35cdf94acd134163edabcfff87d5ac928dc512019fb12b5ae6291cc240a742af9d67bb57a9782968ab14b2f9ac2d4cc0dd483786338ecad954207301b6acfa35053e050ec658e13b3b447f7786a9bdb8105de7a92c7a7e5bf8b4383784e9473837fade576edaf24665e43e605b7289e1f1ab2b52d49cce489b8b724ef387b420f9444f1ae726e3eff39cf59e74af37a247db0a69711d4208054d292d49aec65514c45f3f7a653ca0ab13ae1819895065d9948dd74c246203fea365bcce85073f502116ae6fbf86c057f270b692285b91707fbb82addab7a24e352fe3cc35fe4674037c4f0e5b47b7bde0446026b3e08ed4439c53db67c84bbcaa8e8a89e533d34a149a0a9e620aeca68630fe1e5268c3cd89383220f21d6712aa8b994ebe2f4c98f977c869fb54c9d98b3f78c22f7a9a23f99808c2a33f5f16df2df863e8791b275d1b6fb54fafb5209976b65a6f9e7a9d3ac3bb0aa3b59991ee7c90108a99a6bfe68fe9cb86a2184155dfa12e3d5ccb05f5c135401a077f4a8280479dcd1857273cda1cf3c7b65b0569811f86bf3df621d19b5cac30be780b41420651d87d95290804f2753a71e4347d6419a91dc861ba77581a960b61eb9ad3c9b676d450c78bf2165298085e1c96389178e0808675978e005645d67842c0e11d3d52e81a5716a11723a559026bf2430f227310fd9a82bf9cf802b78ce4451347852d3d61ac92be0f4fe454e73a1245e601aaf4b73941b232e715d62439f1104e7451fab02ec7f007bd9d2294efbce71ffccc553cb89d0ecd0dc65cc8a98c813af405488c457de0055518ea91f4b9d1c1fa235a12815e7c72515d71009cdd0d14ec904f7f597b3614ff9cd567afd1aad4e5f52cc3fa4ca32b9b213c557aad5de3433b3610d28a9939a3730b9d8acb1b61a48bf2d78d2e2cffd35be64eabc418afe34e26c81872b17e29e3b3bbeb71cb6e1f2dd5d4a1cebef7e253967497eae780b311462d93fb27ea7935f6493c8963063e23fd449df20219ae51754da7e7725f9bcbbfc9aceca3857cb1fbd0e4dc8a2ee9b491aeeb639f6f209dab634182605383c6b824c90fcc58189eebd84b32e9f00829b99bf2e93e01207e5f3ecf845a6553485ac4542a4b6a3646ede7d953275383ca9f921a4b87d5973eba64b7b6079cf39acc33b306c7c4bfef2a87f606ed5f42df681bcb5321f56b23e35f63dd10004c0437f9506be96c99e2c93f0a14e31d2db03fbe6dc7b569867602b739c41c9944cdc39c9121596cae67f3977d46b0942d854a046870ea37ce7e41f2a332d470c43f97a6e0efbecce4c5d018b762fdcd28a5b174251669692d85c69a07eedf8cb5a0dc9fa49ec19225468749213071ce07599d970a81da078ad1b936cfc1e7f5fd39b90d44f609c8583041b3217ab5a1b3e936f38078e317ccab434f627391b48652577a2abf3f7565cc25dc2006704e139da312f0c52fa3dd5b8c6c28cc87d03633de6dbdc10aa233625c4e879d4bdb0ebc0d7cc02e64b2a429bb1589947151f723756f65c41356ac3a0d91bc07ee528e909bb75a7c2b4d095df8d3ed92f640b06c44078a8f0199b79b612b290c00ba7a5f764d24772b7bf43e6d2cbc8fbfa4495474bd94eb7d733ccf80a634742a1cb972c5c688e60d444d153faa5e537485a9242d19eca02fed241c918a4706137f3511b1a8ec9278b0fc2a99d53ca6bcebba2396a4f876be0e55cbbc5dc98b63ebd584627dba4415c8eac5a134bc503fdf639bd8e52135d3dfb8232ba922ccc4698112ffcc59c28c93fd2e7f4f4718a6688cd21a64cfa41566356e03f5b98edcff2104b01e31d484191eac5cae46c7998f1d1185aa6b8c2dadb5f26fcaf89c53b89ea29ffaaa44a563368960da1f25bf5bffa0413e5bb5c2bc1ef995af46bdd299de34f1e82cd998782b0bb25a3cfac1d418c775a809e77d995ac99d2c0bb801acca02d1701f5a0561e77b7bb6030e460251ce4a71dbea064e4faab0c9b05687f84a54651beb9093245021e277de29f7ee93fce7203b8504e3e7e6f60f9b5f0d854771d570f843ebcb5044102434127c9fc49b743d90821f5e08c49685359b3a5ca7a24af8af3ab55dce2d2c456c927c1dcdf11b5142a700c99c8bb8b4e6d1b784542fec39763f98e3b1255f62f071a071974702e3b9bd4f2b8a84862217cb2b053460e2bdb6183c64e372d10427778fa209e4517b5c8bb38dbaf725592e4f3fe8317c550cd88e4ae84b5ca9b2796bf1b80a1231a195dbd5f6142bc0e195269b3432cd6cac42696a78d12d10f54e1770bc8417cadecc735d6e806a7d40b218e6f11e9950275e71431a5d2b2d540e41b2b55e3c43b9671cf2fee6fa8400efecc827df292805936e7ed8d7a0295721b25fab80c9c4bbcf9e3cac2e24fea8b36cebdf5cc51dcc4827c2ba27d22b86f03220a6d206776a6cc1e582403013c1655ef4217db55706e765b8c7360a5c6ae1899daf3b3a8251a64d92880466ead26f8b8ef32a40fd3ad7f00807ea8fe38a5d7e7dcda6af0df5e609edc5630eac6338bb5f5f4baf37f1809059822cabe96ecdda6809f8ab41e092be9e41436f80fd28b50f6cc84a2fb24a0d5341e5a4969f9765086a1a77459914344d048ed28f27a743472289590a059d2e9f4bfbc311a425e702f8f45b42a8d233a1172a7f01691d2baf8a7724f372e1bce5a858508305dd2801bb6e9e60963683428101befd4bf236eeab78f310827e80cc61e293134b29efabbc718ac6e9a6ebd94af9d7ab568e2cad8e750d89bcdc3ffd7d83d3eafd7006a802e3659d2c8c350e7bfc1134115ad5933957bb87a963c42004225a2fa31933a195ae780ce44f27881af1b6c004bcf949b6044532cf7cd6dcffa66e0bc68e3f3e7eb80b3c9b578af032bf0c76b81d5f760d66f3b1b88d3cd975f958a6ed36f226c4eb6655d80c25edc8505c7fb4e6d0c344640c2dec00bfc06e026027a07913026f2dd07e24d6c228e68bed03807d14d765e5dacdf13b2739f2a9cdb767bf6c79886893df061d274893580929a54cf35c77d3a3ba51a83ceb0ad6e97dcb70c3341583f5a106491df6d89ff619aab935f78315b01b94adc57fbd71faa253f4e1da21663fecacc26cdabc48fdfc172ea1529093491940b48c9c1462494d88b48e14b1f9b8e781f0dc9b473c66fa75120015a635b6dcdf2457eb15911ea7f016918acf24aabb0c3c35e28161793a4bcd1ae8cde33e8bf865ef14cae7c1d81583b4e382cf5b8fd50c3e5673a07ee521c7b7710e852a4e14df1cbe3b4a79077f64bdc8d3e2148c65c9c0a024e2bc2280679f5b7003c24fbafaa5916fa38f5cb41f75e0c8451dda43dc84679c0d7c1aee17994cfc454eb3721e54376edb4b003e1ea4d46ce0bea0f7ab4f54e40a06f4f53f6fecb93316a5c5b3ef5540d8f51ba5c7124bc49b3f070aa0ec0f03c2a2d91d45e7e5afb6624b39213f96ee84d5d46f8486eeda5fe7360322213f011c98f1ed92cadce6b479cd58d00c9f7ec6335426bcca65b51200556a98b88ce7ff2f63ed8edf7c6716a454aa281e1bfb8556c351d6a4575d9ed08ec86c77a0bc55b058a5a1f06a39c52b08b6923cb06aab8748793cdd6cdbe9a007a4052720880563f79e34c35164a8561004743006d51f0e0b25553d4d36ddb7e886cb90b753f790695fad22d7f1a66c941c37c0c643c93335dd898ba276615f5af626790b26137fd57076d3a4e7a9b7be8744b598bd913eee2a409112a45cde857d7eabc4084178645af59e614e987db4cc02d6234a5f765d92e21546c6b87d90a23bef8b0269c23ea4944db62e5a079e73d8ed10f21b24ab9fd7e0e6e75c84a3eec50b081b73a68ad6baa64a90d99da50430c006bdad90ffd988ba990c303be8e885c7e25b476c7179ce73c67bfc87f1087119aeb4fd0282c75b6a073f1ce98418e1edc1cacd5c1a143a7ad1f8ab0ca90702beb0def4c25cf1b9bad98708d8a20642434f71eebdad2f6584140ece75f5874d77b3447817b4df0b70b7eddc4e683b1193315790d95452b75837c54e0afe12b90e5fec724bb21ab75548778094fe3eb4a312849cf6350698c0e1251113ec2fae495ee0cba480292731352fdcf28d97953b9801fb5d78d27082ba3700d8e76794f25528696b4394c1cc251dd9af3dcf1a256bd59356463fa7676b0203a11640d4cfefca36e726e4efedc1485d15356dad2834084e28c7d4a5379c8e03b5a144d4a9d2d019624ea0185eb1b8516a9ef9b50b9ba3131d2219d3baf4e4e65db1fbfd47a641f922e650a3e59c759ef79ffb9a9747adc97b809697b71c0b96e16eecb7731426c070147cfa4b2b882a0461fcc394e12e5a8b08d45af8bc0bf989ff9f6bf3c386559400ad845705f8dfd90c849aca102fad95e35a85437bedf99c8c9c7f905d69a0d6d46aa9d3d2cda4bdc71986007db6aae138b07e6101b87d643f6c5d1287d8897eb53cd1853c0f60faba45ef00d0ce39b6305faf1af7746c273e966b41ebd9f8d3cdaa6437e9c7fdd60e8f3d90b07c425ef3ee7e35052ab02eb1a213e53177d51e443ccaaf81fd629aeb7fd979c5caad1fa8e5557cd2e130c1c118bcc501b708a7427a6cb6adb7778d789e2982b8bf624277cd9bb507a1d4289581cdaa01a379b6eeedb01315ff24f9de73967531634a0e892cb8a94b7284aa5765b05cdc421193701cff9060dc512444878919d7bf4bcd068d1420475d28902c4acca3389cb686f18fc2f33657e657d360683553da4ec5167517e2a369a8233eba8947beba51d699cf5f054176cbdab3889c924cbd3c40df6e29b6069feca8b53c4f0f15a3cbcc8f63408e2643e9f50b878ef86b6efb848cffb2651805dd6ab95986c4e55f0ab0fcd3cb5690c626f003e3a52e58f775d943b11ab882a661b07097962ed8f7f8ca07a86a2425066b12c52648feba5f90892c0ac974ec8761c10581e81594727c61d96984c18d0ba1a576d7e12e3aaf36db71942764fdb2c6e69e9ce241c1d87dbe999e80f671ddaeef417fd7877fee4e1637d79d4f5e2e76676472ed7a0832e52a70d0c88979857c394ca592d13224c083a95a91fcb7035b8c7e8a728711879beb8686c3424c0af1cabfd17ad4fa5a746aeca56c34af3a5c9d146cd73183df87490248d9eb9374f7ecc38cf757809751132b4097bfeed960e150a186400642918e0c9e724af5cb75e5805c71246be341c58cb478651deb51a158b0e57c44b9a100ce11f6291b1852fe1dcc500164462cc9378779eee475162554215eace24b9fe96d28cd4eac63787fc261fcb713c9f86855440121ea8197b56d7d579a8b01738f146c608151b2ceb099a5dd0e1f738ee70e7077c7d816bc99ca4a3a0ce5e1053be963158cb20f3cd8c71f5bcd314dd691899545a8553d6d1895136ecb98f63d34149755367681aa417757dfbef05db8adef3ad28c0afd927bf35d5b9f4d4504c4be90894646110031cfd6cfa705ad1d8267e8863b9e5e130b0eb2694facd840310fd41785c9c526f1f72395511745eb591a26c97cba68d80d0e9900a55cb6dbc42eed69bba8a705c918c69784cf2b0c7a307c03190624c9cc1b9b886706e7bbc54463e5af8abf83005a483f07d569662dd0729cd82999cf8f5b3f695e5174ca7c78bcf52b181389e0e430f4a4d007e3ba2291fc82cccfd09df90d0b52e664ee30f38200f5faae00afdf061d21680b6a684f608cdf96cfb53f1b8dd70b6cbf112bdc3c6ed6d795ceb672532447467fe2817f68b2b630a067bdea4833508c8d1ab35c73a69657d2dd3dc69d70de126a354bd92fd7d0414acd5f8dc588eaeed7f1119bae12fd236b138c026f69ae73d54a0f863f64f672d6ce6d2c8c3fa239a57e8dc07519d3e36b5aea4f4e777e12c70914ae20bfee6b4b542ef126be3e15fda96ef45023df3ed799a1d5c4021897485aa477585280d3b146eb021a6f862ce95afe5ec898eaddb9b8f7bb587242a96025050c71847653118bec87f0b944237079832764e1bc68189e352a932fc5f018528093f3bc9792720d79a931033ea59aee4676ad641d86fd35a249fba1691677c95d356464aa39dcb3da8f64b73d5870a18f742a8ad5df6f6488411a31f5c08673e4194ee378ef57655663113c09e4f97aa64863bbab1c76132d39784533984c365d6838a1c95dec0b364ac0fa6af23e62d21ce06069e51a2ada5a9b47e946d1fb0f49ab06642aa28ec36efa59282a453f5c152adfd5e16492d7cc0d9de0721dab43e52e7a13ff82d442f746c10a3318fb8c5dc8a2b8b95b316cb656b1e0c3392c416349659c8492c6fe0d2d9adab6bf7caa1c420fd91508f0e140fce9b1 +MD = a9bc5286fea48834b1a9ca1c91825a0983efd9f5e0601f9726156b537e935f23 + +Len = 64656 +Msg = 0aa29f8a95bd5e6117661178815fc7b2f8c2811f213794cf9c6a4ee4cebddcebe43a6b6d14cb8ec026ade0233422ea0bae6647b7a0e5050a38ab4f9a831c490577e53c843632f3c2912265eecb77940ea093b49786a0903b330e2a035f42a19dcb8c58f7825a550d5face7ffcfc88c66d82f11e85bcffb0a967a2646ec97ac5ee91808ef81ac7c499835b07ec87c9bb95e23a6d1a5dc0f1e68d98c8cb28432edd86f9494b98e2f1f45a406943cfb89b03858bb7bee2e9420b112a4fc386ffaf5a07b440db46938366de13269b5ad1ef270b5980ebd2d52b7790db6bf06c1cd1c4a226083faa65d3818d37b24bafa21280e2185b19b41118cc9b20afca4e3730add4e2f1d11ab67ca4e642bedd44a5cf91886c98c0fd29847a8e9e8dc9b3bb46861e6fa0483e21d96187b89ee8905950e98cbadc8a148b08f1f9a9787713358dedfd2095fd8b149447d00dc4c6493950e95d8798dd90b210c35ad6024b13226135dfaa4579682b17c86dc6d32ea5c24a2189575024083b367f20a8bdbe09fe7b0e646131447bc1ee53af584c6a5c9097228eae8505d192d485e9960d688e4635c7f9e9dbd72c75927a13468301c400e25cdbf1c9eb83359568243263a306862c032ea8c7aa00b27ebc3816399d72af9630ffc5715da3bfd3a65ee27326193ac840612267558f053d9a9c5bb295ff093d6f789e2dd4a97e29c0f83a9e3a2cd084f04feb4d322dea3985ae6b9073bf8a4248c4e051d90b1d02289ebf5787b7e40c932967dbf863de1d1decea55cf3acf4f5d73307fe35ef8f77da0c5317740e1a9b9ac3cb5f0d75d32b3e63c74f10734af2de2132a7c0bbe6410ad00ae916e65f6d446be4db3eee424f818f660919b470c2abfecc40b97c9e29221e6415e86cd7e63677115ca210f5e4af39ccb196d92c0e46b41ef3a9997fd629dda7c3730949af7ad09a0abf44b693d1493f700f49477eb52970e6177c51f127f71c1d3d257e70185cc70c20f04b04eda6086e0d6c89b902470a418b8cdc2125530b48d0293fd01605e08b4a7e7dde0e3a6fd217aab96835f4332d8d31e80f29d9bc6fb47b52777eb22caec75414c939ecbbc5b66ba132541a34d2a6d33c623e7176b86f857f0e584bf49e1ddcd86f78a4366e711707c069a055575ddaa1c36903834b8bae903daab78082d77c9175d24a26f6d016b4b97b6edee43bafdfdab4772951905d4bab7ee018837a9e068650c7d4845bd070c6936c17a3c7b8be4e26b5b1f204fc7a01dbad04c990a90048f80188419bae028fb88248ba895e06c8c7a6635571f2e3e6ca068b7ba1054763d4e18a54171634bbf298b85109097eefa03086a35ea74f0351d3f7c13319a380ec4f21e65771ccf34996b091d022ef6cb83c6403548385007bfc8ec4d04fdc474634961fe42893dec66478a1650f21e618b3439edaee4f844d6a99acff0eb95fec76312645a1512570ea58aa503adc06c67b6c9c78507337d1035fa149bf0371e6ff3a240246ce6f501198d41a09e874cc7e2724b611bac20eb02aca34c882243ab5f940a47ed1656cbf7f464ae60cd732a2bb5e1d99eccd0c5a404f4a92fe21f282b6a3b2b024afcedd5629683811d7fed172733450d1ffd4e7ea5913853f0f164db874b4468df47e5465a4fc67c01d3af2928b839f30016d41701016090c97acfe48dc33a7d5dc820af4e08fdbdf51eded64cd93ecd37adf4e1a9bdb872f61be7cae03b63bc411e4e94b05a8fb361b20aa3062eba0801333f83022ea656e1453b13210c56a2138acd8b23ad0318f21da103e72142400747025f9cfcc0d925874841c2ce89cb6fce0be70a78ee5b00e2309d52494df1b449ebfbec808e563d728ddb37ea83949028a85ce756a7d6288037d3ea0f538982cc6adc7352657a83677a4402f8ca9a3f5b11414ccec626d378352c20fbe9941d3eed75c3faeca2b2069c10b661d548c7b5e538ad39dfc99c5aa71a7997869dce22125c50e29a6b23b071d5c4ce1a3cb3c982a77b304b3aed781c23565aa0f3200647f49c91f52062f589e7b0962fc2ae267812593aaf073180e2db69cdcf50bd6c1cd32981638efa5642dafc428c86f12d340da9c1519b12d5b9b706597822f0b3ff7c6a498bf344534b342a5b9706376e54fdff6cf9830c170f2ace9611e6548e6e54e152c4f9fb6cf167ad59f5aceb6a4967cc860d3b87a531cb24fc5317635bf8011135b50f6a13d40a07c62f0787a19fef83a4e3411000effcac048232b79d1ae59c5ab2a02ad8717fbc1889928694a6d9d76232102fca9853c64745d4abd25586c53a6468b83b485d5cd9bbca82b41ccb1a1660455162a954f62d0459ba8c16793e6d40a59cacc7174c823c3be6906047de6a044d0f59b164de3e444e8e3afc116a6bcdf332bd8c221d9a61533cb9ffb496b58493c4203f27c0e39c3f715f7503dbae62ee24edf622428ae1acef8169b5d58167b60a46b10250c562891e79ffa504ada5d2fdae938c5dec23a599973cb00d6634206c4da588f04c3dc7e01b1a9968021d6df78ff2c4c236bdd9a55bc727b0dc506f44958b2041f0948860a3444588242ffbdcf2726001e2f6b5bd5fb7a1624c62ff3dcee06ca85afd371ab31b3de78c54290886b0e2bf8994c62c037ca1943ee25cb25a23c2a5d3de4068bafde708b33061f4ad3cc13d82ee877bf794acc94c45044cb7e3c6ccf3ce50e53b6ad56e212b233be664900e778a8647ac8e2773cd01926778aeed805333d52aa4f08d7a7edb0948b2c6b3c4dfef2f0982c7a61669ae638d0cd3bb624aa54973980d73dff49670a5a2d1b0e31482fe2c2adfad338ab20437f4f094d572992a8a75302ce14b03f5dd37242bdbbdfc8039f544a15da8a300f2b1842e6c4395f4c9dd071d30ea9a0549d02c692154a231bd828536f75bf7c647d31ccc99361234ac3fe0c9315bdf2b961e591d56411aaf21431fb2931d36e0a1da1913eed2a466bc0e5bc584f729d52c62489ced3bdc44ffc782b8a354d6dc8b270778dfa1b30773d8d6768e75309e875c698c487d5d8fb3704ccdbaab5e068e4a668fde1bc4936e1fff60c03e59f4215d3a501abe150bf6edec465b79431b05d4c4bd7cb95fa6f5542528cccb2c52a4f5497cb65699361490cfd6d8570c769c26a0764df2fa9ec405e61306941e466cb50586bddf609a96f985d3e3cd40a5bbe0686e94611c0734b5c0d40021a65bf30cfcf293d0f1a618989ce1f0345624df72aafb127c3a5cd1e433d03c1c6aefd27d9e44caa3d2e4f3ee83757024d370815dd6a03abcec2c2601bd9c2cccc29e857777f1e4e07ad3d37bc7f2f6273f155c1289f26f9b97d19b9ecc8c54bb43d4769b088e551f5fff11c0d90ef4b3ff8faa31136633b0c409cd3bff454670751e4048de7eadb8f8c3394e451dfe43ab5bf62a3180296507211539b44b7474bcf85d1148575125ebdcd4748aa4656eb8e6ea6e32b4b340c7a41e489a035150b1ef3774f48cd21e9f885de41836ec8dbeccd19db58853dc8c2f42c90f018f6cca6f69f46193c2eb8a62501d7c49d639038a6619288fad90cb1f1d3b81ca61418cf55f100e108625430735713561c4f94d8bf2610a1f02e61af0282090d28977601da1485867ae444fc3889fc1f33b36f36e0115e8cb0674e24ede18ca9e5a76fa44bb1ddf2dadd10743b3e9a0829b7a7b8d3c9833282aa5c787b9748d9276a8a20716f110b707441ff461ff6f94885c6c85ff7877aad1f1114744d4586340b4fdd14f727bb83d25e041fd417dbd64254cd4b43734b7bf0f85ea0aa8c9656b04644fcf02ae85d1eefed8f0406941c19d72f60544e8f324296bfc75724f3d282f8bbf0031f7c44817d215e57c90e6230d95566d3202d1b4075a0b0fb1583f3a8ecabbad8105e81238f0854776a2ff0afe1a92567f10d7e0f1c67243f6830004aaa7d201604765c2bad0a3909f0e10dbf789264b9ca17a3da137eebcb24e04092bb97eb6604ac1cc15f8fd4b8640b02882478ed71b233d1c7e34bcd46517dfca6a663e36f17e80b0f2effee29cd95183170c38636b24952fe13389258f8ee7daef347cfda45126f3aa1c24f07336694e2e1dcf8b0d1416ca82bab01aa201b08d32bad784e9612916d4140bff89f68c1c501290a88170368edb30ee3e4d1ece83cd5fca77413d0b9ce94e206a41782e6ff571386668c778ef434c800ae13496313799c22f4c3352f85240eebb5a69c4abb6b0332f1398625e6364120aeef1ac37d9ff5b175af273abb792d38d0519f361fc65fd8d2251677ea3fe10b8f6c474ea4d06f1e9fdd8f239819a8b39f2271f253ef903eb15810ca29d91088f793b84db09372301b575633438ee525ca20fbc6806eff2d34db5d67cb8b36618f6b5607c97166ae912562afe5604e55f95325facecc136c06b5e396f7ddbb5cfefc07c615f1b361a84d9de2a5154a0dd3c4d8d5649033c5cdee8c9ed5580742ec4eb4d0bf9bc11109d9ee13ac374013007afaa06b42c9fe328f3fc98e8382da036a466fedf7f8855cd03c89214e9a30297d74a40a6b3ce0dc9fe45d4ae795eee857a3e8c88ec187483b718d2de0bf2cf6d62f266a92f433742662a3300aa644461db58677e782dd75217467f87717cf0e8c1271b23f59bfa12da3e369761fa6c3c56290228aa4508c8a2d5fa99a0ae11aa704cc0bfad34b0cba8e651cb366da0755944df30090a8357f84bd69d20029c130ef7e9d4ccaa15cd80b707247e5a8bbd8320610d0adad170661c85fa56170ac2ebad08fbca6873a8c024d93bc02da87532404a1826227db2aacc9b49d957e82a94d0a0ad3cfc64ee05b45a69a273612d0528ccf9f19dd28f04d088f42041becaa90743517ad263fdbfe9ed467bb860556a4e9c1ae3998a7622ccd191b170f92376b553912a86eb685d4a044ad269007ee0261a1372a200087326079b034211b5bc6f73d4c29685ae7c3951ff3cf1dc19f543e94c2533dda674508d889c51b301b89a06a4c96dad408b4c38cc220f4db7182c6c4d81eb7dd0b4e0f5e2f30c378819c99e89a598dcbf19073b4a180dffc6c74425900f255b27a36bb3229dfe29c94e72adebed849e8a83deebe1857a4cc9912f97bc337e001bce3557dff383f435c529a74407dd5d337a579d3af0e0cf5ff453550a8562171da3f24663aa5a416e2c633d4a9affb33a5ae5f1bef0bdf1ca6f33c0337b5ddabdb317216618cd7bc2d293b2381d581b0fb42e6bd5fb7e5ec970558baf8bddf57c7a085b5fc57a1de4565fb8c4e5930f3404858e2887ae50ad964ce9d74d6ee1ca776a76a936dca243360bb359aa2d0a47ca8fbb1f0bda92174f6e9d63269d1a2829a1d5daf361a35fe04c346ec18296bb84a185321e6f7d771a5f08abadc519260f432b7d71a59baae375ae8cd2302eefb16f6efa35f98d4d7582ae495993694496c2da094814e5a4ce3c942c42b25d84df4dfaefc8e54c1aef7e0094a06484f46ea553f6dd3c2bedfef597e599858cfb6cc19b8b6ddf246ff695b24618d4e6c5e56f4bdea787d8e6f434fc114d2647b3f86ed3458b33c0ad198e05b639512929a98504193d9477105c7f6367e411186ef0aa34a6b77f8b62c6bbad6d7855a6a0098b1f4f15ce80fa76395021e4e2695cf4083247693eff118ca2fbe45c7ef9c9b3f61fe8b6a271160ff73507c5f6d53e510d5e7016ee9649e9d893b35c299cf7073a786e96ccd1f3583d94621deac653b63e0be9570aeb7c5cc0e7430de1fab891dcab494c8a2e030d70f0c9431ac76d91fedcfb901059196400792bd834bdaed2613b113e86efd58e35dcb5dc2352cc52e4442f589b79a17dfbbbc6519e301a474caa5ee32f91db5900bab05f70f2f09762d40d1708d7b5292741baf08b0cbb7f137b8ae100be950c460d3133a0128ade1f0f1d61e4cdc4f4278d723b97add2d83a110dae96b093068a56c0ff2d4bfb756d47c8bfcbf6415d51117499209e20e1452d8fa24e2245d65239d8286509b31bc22097870adbcac358403aafc2480628b9036972b38e2e0a11f8ff3603d6522fd23c226e3dd8c1c481cc5cd60955f32d0a452386535edc006e469eae763c493001ccd1cbe187b6df820823a24222885cbd655653aa0ea057bb954ef838a618bad5852e2672631a82bd7657ab2948364646d67a6124384b8e7e5788b9c79e312ec1e7a0148cf57d5cb8a931470b217d683b3af8455e461e034b1fc459af9f330a5b56c00c7db95fabf823790c8468de310ee56866b4c2985496509a6e6d239eec06651674e119221ef04777721168c93f3678335bd4385af0e49c635e6cc5c53257951bf443af751435b7b50e2ecbdef14665f17b1911d676ba45c7a03ae0568bd36938f111e6b93a3ce6ca3758ec8fe5b3212b6b0fd98b448c0f2fda542db346ee4405f1c8597eef7a472f941c454c9b115c39a23509e9f8de3b147354e87bf21cd7fb8cf37226a2726b4d8ae580956fc559b497052d92f2256c1df199bb011bf37792091fbb50f1b9c5bcb241091af263bc14d01cbee6cef61494dbbf1ff332e6b5621cb9bf8e6bc4e8e570bb691dc150f5d2e3c83885edd4b711a82181c2c58b13d43e3dd92f6f0837606cb10b4e3b31999728b424d0ed25e63cdd5d7ae042350560d428a2c47a0843b5fcce79fcee6a09ba355cfe583b7e044ee1ef75dc37992ca07506a6de2b59a04ea7702fda598ee8b4801f3f9c5751a3f05c441d37241bdc1b97544fece150bf930322b746eb04992eaf97631ddf254799b2f7ab519631a62ac1ae18613aa1f44b86628ac3316fad810a42034d218d61d37c66daebec6f1d667a50aaeba5a200a0a7cc24ffbb24984426ab8abaccee75162f3e1646b548a457280851eca0f5476afdac102cf6c7dbe09b3083d74fbd03da31e9d7f27f42cd656111a7d4bb005ad2eeaed6fb62ce0b0ebe7d6933189da0b82ad6aa8fb8e21b19ac29374462579da0f130e3eb8dab87f726eeb54eb5f4ae087091087ed0bafffc6fab7aac156f823dbbceb17dd5e4e5626b10f29aa656be73b9a57c308511fe863204dc8c72bccb0194f4da02ea0ea5b8e1609ba7783844525c807045149b993f89e1e755d8c3caa5133fc84b288d4b63206a3ae59a1dc25cefce7f4d2dbc4290ddbf25a8d618f390cd0c06971ff53909aeaa3ae59a7bcadbc9cc03992f08ad12a3f901e5e920e84d08e61f874ebb0114f28d2617e7d6c0579125a7b996e51b4d832c26ad90701b428d5a6d8c2363460d82af870d00c34568dc47d63f03f62f99e1c4ee604a8b0f0990d58b163c624a6bd56dd82573a5cc87e1cf1989e4905c90565fd39e95e6261ad9e3f2d6085cb0a871648401cf02b82d6807dc3ab76814c9475970c900f602febf023f2c05970b5bdd103512617eaad1c5aeb8c20ac20a9d3b5e406ffa4f381db6bcca88b2c5acee7eed45f7d95e270d911019a04d528094a8bacd04006617f067802f8cae5d27e8dd7840f2a5458f4940d88965fd8e2938260b6115b1bf253f37d8c8a846c20ed38f3db0b343a9760d5b64727399d9670029dcb7256cdf0222ae43305c1a98c426faaa0fba331e6dd257408f69b0c8cc752a8b39b3b03a1173413bf1189845ea6bb649d8680208c930aaf91ab8c0d0bc1fbeb363312a54f579874f857e5e5dd40a3899855d2eed2a90ecfabed15885c8684cc1be3e19a400dde6da57fdcb45239af815a10a1850048b93c1e643d65c83d75b52c52b2ccbc5f8f68903177d905b867b5ab5ef5cc5e97925eb2b90c8c950f570d2f288c220d7532cc7f14bd3c3ee6548b52e7d7ab33bf219e2f948ae50b23b03ced0f78847a784f013bd0b6c545eafd6c19544e0ac9e7ee625c9cc05974a20baa2ead7cda4a906f6f8c0e6a5d61edeac1c64d63d166388213027ab5ce16b3edbfbaaaa30cc6e4197e3976e2eadc17a4f022791de853da641ae9d6712d3b7fe0e358aff203369dd5960caf2555fc8fb263f5818438d8f41cddd956fd5f292d6b7ed26473a5e2e22b1fcb623b870a7e9c80070ca0a73cae33c69aa5604b28e617f8ee702ddb11dca4813f362d674d0bebb11fc37a1ec931303cf369a2d882d26ab9757c288e0cb3c72430d402dc0f5f265d074e1986c5a59ba6ae4bccf07d18ee292e2f6da41c8e1c7066e3c2d096a1d5eb855485c57932fd6e91f2e57a63e12bb0e332030787952ccea80c752a2cfa81c5627dc7c52dfedcfb6507f55d7a54a8b75a2cf29d95f27ea4bff724d21792b1526573e66c2934c3b5f13105830b9aeda45cc6435090ca9b5b744bd7af9f90edfa58dbeaa4b4fa3704ff191bd35dda82e1b1a8fd06be48095c8db094ab0e1dbd250160dc541778c25055664235ba3df0d4217928a96991520ed2d065adaa60aa3b2aa8c3649bd8eb01bcc17f9168ebbee774e1cd20d7d0fdd80d50519ebd823ba4995ba7bb853f3a7ffcd2dccfb00b7481718af253502b932404db60648daaf9c91722904320d73833dd4060d8dac59a09e219a22a1eca9b5980179be863016a106ba587e3b3c86c8327b413922e43b9e98d39e28d88d69dde49ac091286af18e25f8b9383853a5fd8a1d5fee6f4aa58883a90bc64d577221d2743b3cb40db8ba8b97cbd0bdf54979b154c28bc7325004eb3c637974ed4b17de2849ff9d7ad49c842220c64093e9e3249c09afdf4d938a3bf845b0e3b16d2664116d785944edcacc22288744b21fc0705da5a8fbff188ef257231b2e4640d400ea26358bfe6ccba01273924ed2537801342725c1c93789aae37c06990e7eb740fcf4959a09c9f5cc6d7285d3671d9073a9fe94b53e8910c227b111c88c7f3680d46936f7e99dff9dada5c05702e6a034199c843ab175aae49e82ab4152bae85cfae4984a30513f806d9dd05e18370dcf1d9162e6d485ce6ea2415177d3ba2331fb0717f5507c4c3107cb446d19975f91207dbf3e2a51d1dcfd7da2f082159dbc3f41547ddc779c1c06ae8af8a9700c46ccb207a4f5327bcbeaa7fe200025be384213cc6836eba5ae04c812753a69aa4c6cbecabff7d022980440e1aab092eb52adfefe38e2410f636c9889873eec901e9b2476e394934cedd4f8ebe535b5cb77dd83586481001fd8c8a04e9339618449e2639ab44df47129c7008b63e236d5345b11697f75b17d7a836fd02dbc70cd3abcfcb4a6968c35c875183eab487e7f049159affe42cdaed52767bcbb3a82f17d8570433f00c2e16649a0742ffaf54f552aacaa457acd1a554f2872c02620878ef63ed4e21f212a7fcf39da666c43bcc2818ad6f970384687551280d121c1f5fb69e8c844343f67717024bfe30ee25dc93084b48ee587b9f7c3c675629fffd32f7adebbba02663ee7d721b32a654998d5b22ad18a2d33fb0325a4aef9033295a783b12dc7ec4e074f5e9152a101f1f47470ddac5fc9e57055f54dcc08fdf2b4002ee07d02645f571480f40ceb6763f722072da3944de4b04cbd122b16d2b8c4b5c6ed47de0d02a4d3e8ea407df828276aef8b65ac2bea4173d7a26ab7440d3e2506481cdf48d08709f0b49bbd46b6fbcb9487512be64e9a57ef7ef94ea46886fa47814a7a9a51642333138d3de588faa09091f487ff8a21657ef855618643459215197f24840dc2cc2a57838437168a965e4bde44ea357d18d0af1d746c35e088f9811981985e394131211d04be08422978156cd738c9140ebf13a01bc8b8ee4b6f48b80649db2e3ef1e0c8540ca6b7b6587f2ed36ddd7ca384c68bac1e34c555d0e0c9271b0d2821e71703e685aa31e989f992bdebbb2d73bc284ec9ef321c34e8d9cb687e5c9d768b445e30db5b671f870546fb550a9cfbdfc947e9ce494964f1a43d4f064214c958f935b75062cde4ca32aa101c4441b86a2a35801de2e36295d0ad4f25661486ca96390e8738bcb5edf24aa0b3f0b215e5bb6621508750ba4fdf89ed6e31233b6abbc69b0245da2f4cd49701be8874a0dcfd784228bf37e87a3161be432bb743b3ca7ce144229cad714a1dc79e73ffe5aa70da66e8f30f59cf66b31636ce475c3052ba75bf578abcf5d34d66c65bba60f8b61b0423bb3d9a99fffc99db8169d16ae50dcce64d1ada3500b473d8a84a8f222d98ae6b704937745daccd83fd754fbde1e56b5b8bc381d942d15357d216ecc15801ca22cab89ce9105205d28b2023c3d9efb5818c1b403d2a22a9a671a5e640b5b4fbec23025752b87af749c2c0f9f74d7b4fead69891eb1736cb46ff8e284ad740981a01cce36ba685f64c3cfe4ed2bd16af09f3b1f36daa7c5cdbe4261f2a3d23335eff7ebd7e6b01a77c422e7ed0995037715c0df13f4461c2b7b804377947db620d647e6215968c7f3c8ad8169b72a69d9377e2f7ca8595817cf3befdb297e788a7e9626dcb8984e21f6f91a27dd98825e2eff783a9ee663d9e2f9cfe609dc63bd0e6b13d0ae469749778d1bf122e8385022cb23167df824b9db454a60dc9f5e00af4f15c4e17c89b372f1ea8d2e2171f53a6896d5ee9483ffe2a4c8104cd0509a89c99482f9410ea610aef1c3aa4b17979f603b4298c468f221a0b1bfff7523d4c361f8d09f9e0d6c794b975d3e6f117c793b7924248fbbdbbdc06e359d99bef6869fa9777b996f4bd4504321919447ecef7fb74239fe6402e18c653acf410948f90c103f343d1a8c49465fd94cc2a13129b65f6580174cafb38dff963d77ec11452f93ef728ff77602b4524b160107925067d855a0e4592a5b4aa4108e424f9b91909b51df99ee5324228440985a61568c1b8ada426d74ba024cbd726aab1a2c06b8912b2162e869da185d7f7ad497c60459ddbc0eb986a9d019b0827bb8350dcc2edb46e0f2cb024a1f45d26378912ae1a939c2abd0753dec3be709667388860a7ae36ac55281649cbea4fffb4d38ca4a9306b6c2ba2bbf7f3ac8ced6e4fcdee8250f5e7789f0d7f97ee2cfeb5b72ed68a0ac5efa7f8e76b09cbd9b7112775f8fb6c9ec9f9f02a589e6670adbaa28dc63579382fc2888aca8eb2d36df05e24f27b578dae59d9d14737e9b78724343e0624123ec70bd00a78eae8068c9c526f7d7ab83f1f08aab6ee0cee7e0592da93f8de4c563fc44ddb18b6e1df9d75b299fc81f54f9696e13f9f75fb10c387044410dcadfae4bc70910c7b26eb1b0ced58f229952baf751bdfee1b862c2b615fa300a7bdb96034d6b0c6902da58fd26110e0ca1e5fc433c91c4c56163cb7b22b552ab7e1fe3cddfebef9ae6c9b5656bc465aec07586f5367795cce31bef30a25cf1195a155d508471ff81e7a39191a6d8dd317d6a21b44857b71dc5f1f57d9ad7537c9a23cb3544e586478cd1b428df34bcbd612d9528791973e28f4fa709140ec0fbc3b3f723272fca135eb9e6d31cc04a79f324aafad1a51140ca9ccb7d17e982be5f2ca7c33638140ee4c4ef3a6764 +MD = f583bd7efc35c883cd8473920f07a798ffd489dcfbc27c462c3ef77b776f2ec3 + +Len = 65752 +Msg = f61c7b1884287222d71d1016d4d611cbcaf9d731b329c42cb77de8a3f231dcd4779cedea95627dd159eba749531422399d2468461a0117a5fca4972d89cafdb11eec2f8c7472497d222440b663e1c62f1a936d4013620e6f8c286c87f42515eaf2f58927a9be9ecf3bae23858ba5c455482e2d4727b473336ff3afd6bbacec26fb9d43e3bdb0446fab7398df54c8e5522fdef281dc5f0c98aeeba84567c6490e42cda4e737af02047a59e7ec45b2f1cfd7890219bdcba24750fa9ef97fdaf549ce6ef55c9f22a236b04a57d3e6cbb0734918a6354f61fce75d07db1d8b52b980a8667f697e73eaaf562d31bdbf7ce9e78c7426fe1c87e421def9a5d713955b5bd69f87375a09a31474e9bed1592b66d2a883ca9baba6209ddaba454fa00ba38162ff58eebe4c9510106843383b42eddda62fda3484277902593103afb91c5b9b537039b52fa4874934910b19ed2747b08d5f9df33070b7f96346261ce7304950b2d971b437794267e74c5d9df8443cf265fb5cfe36eba22901e1f8c0b1af3749862149145d338f13328180ebe3ff934b36ea5f7d1eff013b3aeabfc39f01eb2ed73209fd293a34f51b18bd2d36c216650916ee9971139ed61749c44d398e2da6aef3f99624f7f9b4adfa5c887af48be5e5665179b5913fa39ee74f8408bfc759124c6008d5d0a8f8ed0da52636fcbb76d3c2cf4775e0ad49d9aaa79393fa7ff00b25887ac52e076be53adf2ff2446ebeda12b2283668b071d07b16a062a81f13a166b7157a7ae0b39c6a54cb36336b65023e404682910fc38a43e2d4fe326d69ddf836017e1af9781a834a208b317c14532fc2c9e0c394e60fe85456eefe329bc6c14d6559781a63686e0a5978a66773d6cb7fd9d96605836754b44fba76355064aa436991fa0d1b8d14dc9c86faf52992fbc19cf4e22b419b6d4ae6eb014031c09b6237b00a9949915c07113b96eedf8fa8ce3db99fcec9b11d5d44080619e6e17df0f43e0f85957d2dd5e222e01a3cd6b8f0e2b006b6c2b44a379099ef8916d03636cbc1719aa658718c34c04141e96e156cb4627daad5a9de1ef32723586993b07ce2c397a0252a0f75329f222a8d5fa58dda566d74aa9ac05b95390a4e8934d10a61cbeb5fb9fbefd80146e99ed1b2529a7c143fdae88ed8369d570c331bba83277162d49e0bd4f9fdcc3d00655d6e02dac42559a5388e0ef6330991ceca2ead1c3a0eba27c3bc152bb90dcd47d89b9f96d810259d41a14ae581d801e83b973732e35a05c088bc2bacf03dba0cea421017e05d0989accf7449ac4bc44919fd08ae94cb1e3202db23c69a552d7b3c6a3da205956f322020746bdfeb42b90a690adb77eb6b44da21e5c2dfdd905d761b0e826e3fbe61469d3293403ee400b6e12400b14155c0b89659e8e65e4a7a405d6bfd45e35edcc64d9709f7ce10e5c7703e646d55456c4343687fd860c39a40393c5daf09b76b473989142d232f32e21b4150d1b0a112242ff8d1dc69638521b669e8d63a31d87167f1fd0ac3aaadb1ec130c05d9d2780362f2241b03920289dddae7e2fd34eaede1b80db538e71fdcea9de03258416786e53fc1bdb5b8db21b578a1fbdb286863afc489570a504f0b1dc71480b655a658bfc5f0e9073dd690462960475b751b7ad7ffbc17bf4c07e58e7aef167a75ff1ff86ef8c78289bc7e98d66af10583cbdb6350ed1ee1420d12449cba1d2c0b388499212380ad045495b468091f61ba3f2e5a9e6393f89c2a3b4716bebc557e1a2ea9c6b73c1117687aa1c582faf883411ac5d3679f8ac12608a0d1401c7c366dc63044fd223428bed867d720a951449747abd6416a2119c92056b48b64299bf9f337853d5ba0a120550f842a54f4660a5e148f391b440cdb2c71a6e6bde415855ec470bf0edde854999fb6e7256a52620709e697db7c0223d3fa91984f360cdbaee2edca647167224d2254a0423a6f67e990c3a2d14f636abef85cea41a6e8c18c96e4a785e68454199d469ed3ec24e1adb40ea3264797789473ef24bcbd1100a0ea3d9f98c4a9b0a41a74260109db97fa7aafe201ec0615fe74328ee701ef6091e5e0f8c6913d0097a0c683f318fb5279ec8ea78bc51909a4010d6febfceaa8088fb6fa36d7a80a993824fbd3a1ecdad211943aeb5a361b2d256811ef366ba2acf1a5ef111d519753e976d8c62c15f7acf1a7e24a33c71542e52bba1c36d8142612961d7eeca26e6dbba460f642e071af95b0e9d0d932bd8a4b3eb39a849bc71dfb72cda6cb02598eb696dc8b6ab40f84049895a4d3e1dcae5e894490a81a833ab21f48b042d91e5ee33493ad2df99ad346452fefa93a395526f4b4262abf0f254187d3c5d99086874967cf821218db4364a1fed8e4a79e28ac684d8693f13585af90b90d198d59aef015d635a177977d65934c880b8ed1cef7cb55d56b17bb02052440af89395f7ee127f2ec627f992951025f27a6599bf00f07153e389b6a454a2ab2d4b2fc5f9c238668cfde98a8ee31d881dc3d6fc436fd02d5e784e40af6868a55a31a3f23b3be1883089c2b8b740cfcf7cf59381447c8a6ddf8d65a63bdc22c72454b687169bbc78abc249e0b64ea560c29811c53cc78d9749ab7653c4005f850e1cde11266217ac416ff5bf066d3ce07123e83486c1685e3f4ae6d5f2a57d639a02610ce53f8197a3bb4c80221d04c2fb117d5bcd0a991733043da9221c0ae73aae05f6cd8498bf556cb4f083ee8b8ce2f947a77a039e56973fe149ecd496847268235b69c1bba7a8dcd57cc6424fa2ab33ddb4183cf6910e868834bd8f9ecfd3c95f97248768d54084147143c8afa8b669b5ee2217105afb4089060e7d922dd16a015698362ecc9f0af89a96e25a13b70356c21232aa18d0266a1a7a5eff22fd92bf063f6e8bf236d9f8453a1fad581f8936ec731ff25f3f80b20e6b745453ab0bff228490feea8a69aa0d97d137fa4263eca9cf2fa7929be7e73e6c8e30147c1e3837f23e062a1c4274505ac7788ed23bdea680f2285777d47046f7ecf109e341f0b312c610155eecfdb9dd32ed6a4179834f32f7f32255def39498113588732fbf2070d9cb40e4d19ca6a9d4153112a581205fb1a667a85fd7c3b7ab7c34ae300a0c66e996412098d7b34afb7e57b8284eb651bfa0abf1ef9340e11c1382e6eb57e39f65ff7ab49b354c3b498762c4aa426dc3627073d4f6cc88aed3b9e7cfba2f2274ef6571e3514bede52eced6aa8412d32f4aa433941dda277b72cdf7db45065571e666ab6f737224f31bc327ec4e2672fff8aa8fe1bd4299d169de276bf4640920db71abab4a4e6dcfa0f2db0c70f3c9afccf1dd306d9c5c4b3958fb2440ce9a0c3f24d7197e4744e55eec647d950143d968289ff2a75deb3351cce786c2bca49e91fed24c57e326ce960e58d212e57de73aad6cbae2fdc33453a870f5e2a49552744e11c69fa8a005f6d72c8c8306d463b4feb7fbb90280c8bf8a2c04391d08b246b119ea9e1e3d05e1d5541f5dfbf3d9779b063781f2806ae5d07d343e9c6b4899b65f5adbaa4a68f797640d1c1b38b2f310dbe0e6445e857729f9085b99398fdddc5689e0d37489a88bd0c8460b2f7aa7eeadaa4e7e77c2d3e503e32899eff2938193ea463037e265313ef3544254ab0692ffd63317788d9c9032771e251b1b4b449c0e6427012dbe05e2f0df3724cebf9c47073c95bd5021ba1916b4a137547593d368d35e6ca6339881533f703c50036917bfb37fd2b513d10c5484b4d158a30dee8c0c1cd70636677e9cfd83e7d9a287f652304c4526e363a0b2f6d65572440121da8708dca866d15f30b1c8d3c5fd8747815b71711000e05aa4837c404be91c21e6dc98ea17158487a0d4d57c9f74d59faf6d86031afcd5becbc31d2e4ff2cd734365439bccf2ffac8fdf203ed0b8f1734f1ef067b257c2317b3e3f7be901837a52b9af4e546f812230494fb7043a7946e2b8571b40723457454d69c5b185dccb9762228e27ebd78d44abaa61a469cbaf0cf2108a700c8a84bc891278440047cba3c743e7c21851423f6ec6cb2bd767001034c351bb67536e4379c02ffb01431eea8199c7bd459ce5730b3b5024f3e9deaef8d60d7d131d686c88093940f95d29fdf98aca741408eba2295e9d0a5fb2bf4bd6cefa4fa05707ba3c4440d069047130c79d5c810423c92f11c70e566b5016492714b4ad9f7ed09f1f07c313c0b789255457ea5e967c028c8d0b3093b7407859925dc9115123379da8da2c75a114d66e283110772b802c4cd381803cc41259ef70f0a41565b2b138522209807a7aed6dcbbf5b6563ceaae28dc089dc02343f6d7b83e2146dcbd1e1b375d6cecd783296b76927a3bfb612d0244ec9dc02349d65fa6defa8b9cd2e4c354c10ab0a8b4a8b63a501bcafe4d8a83f92acc73481f86b7635494cda350aba602b43cfc23299be6929760aa4c980ed2822cf2829aae4e087706b7b5fa21bcebc89ec8784eca4a2203cf1283ed28fe186758d79421dc767a685e2beaa82b5fbb2fe777cb3380fc931760f9ffeae7a57c31184252e6924534c0c2b715b558db3ebef7119eda31fa6155b2ddc44abb4a2767d3fd63f0b9045f069c25de2a8e7a9bfd375e9849c68db3452d867a158e344091f0ce714737fc22c3533bec0eb782fb740d26628a28fbb1703abcca5447acf037d97e21f4f672a67e4fc2e869ba3c85ace230a3a53d8c855d3f465c0ecefa5fe2f5d51dfedcb112bff88179437ff0622c1f4504a0ef8a5494a6edd74b0b66b419ac9a0d6dd3008f0fb64248a5eee6b97c2a2d2d85253b499ed579e313e63818656697984ac2a645f4f1cbfd96ef65b3256db0c55cc7e9890236b2296f47b7b24d8b92679c90ec5bf811e53f1f6ab678ae4e95752bbcda3f482f5f5166162cab598354226b271afaa37e58b64747222f9f37a6e4fcee5691f92a4a03013bdf2a11b7a570bf6e78497ca0ec0b166eef01818fa9bad644a7a79c8e39e6479e1858fe8d4cf9a14d4d710be069e694c76515dabe67a1c2a614aab9c3f5a240271f5ca76e136618ace399d8a496eeca3bce94352ca83fc6fce4c2d93146e0f4bf3b5f94c3c05f2d7380ea6c553cccbfb070a51741343ced2e60168340f3486c4cb6894ef21c8be78a6d8c4e5c23287b0f95710a65d2413c25d0cf3f58c681afb7d6015c65ef934edaf2a6061f13a80741831f95004cf6bdc77c1495e18534c5e9e4f04682011e6a4956601d08d4f76a2d82d8417a680277fdab0e0e43f908b7c9277d95b319d544c0e3e31a7e2dbbacbadcc4943bef0e72b0a6e531e6eaa68c3ee9d1d05f0160e328df5785e8e89dd6d2d70a18aba8c1b7c6b6c0863220b54c3270137fed7f664f6793e4e7b0cb44ef5cbdd355325dc44d2921c7969062deff8c066c2bc75c8f916747b0c63d9f59ff3fd446d239d4be3cbf2f24e86679c9ae34f1045b545f85b00e43e6adf72b830f65658c1726d6588d722afc051d2e1d6111790297fc52edb446ceac2146396b25b5b7ccac632b3a4728587a731e47821e0de88f6727fb72a6f6312aac928fb84c17142f1a569b0b72cb03c3bcd08ca2ef0f84d2543d24ba8d06b58ad543f6138973c2dde869ee7317427102679ac722db0097f4e5a6936d715d9ff124c13624e6b10afd9e03eb1c3c75ea5dfde6beadeac6671ca3cb11345ae53a89227517926aba34b7c48b5cabec4cb8fc051b3ae9254a3d73141265b75185cd7a56c561061d748835e36b07cb2caf220807a0037e93746021c2e4599d5d259fec491adb2708c84e9c820ab42206866fa98cdfe1153d2d1a4d35aab38e87adf90681dd4f9e329ecd172ad02d5881b9e8061b3f9c56295bb11ff3ca3c34d60623f088748312a4df4ecb62253916a530d5483c28fbe861e76ec086aebc34521665d3e6493f2c647119e3b2719f047bd47e967702c874edba995876bcfb3903c607d721c24d947c3e7685a21c28c90a8b2a195536c9a1d3bb7a0e495ec0e9f2ff5023c34974f1f32daddabb8e9c0d5b3e22f95d2ac7181dd1580b89fbd4ec26a78ae054457bebd22505098430c37a74d6af5d18478980d3e67d77bdfa00eba7a7fb355a1e2b2b2010c73a866864b65f39176d0cf5d982fbe12f796ec50a8e7ee8eb4b5f3b4c59e5d53c97479f49692451a253c39d7dc69fa9b73923c3ba7cb251a449ea06a61d2a5ca945513e383cc9049a34c5a53ef3c6285de0645cda5e4bc96d5884e6001df68d596f2cabfad6583c453b9877e4b179456896baf830db523a8da0b34323045150933b5e5057e1d8e0ed8dc67937aabfe82282abff869cce8b4d480286d878438d9ed17194160252d8d855d715ff83a0f9d1cdc1d9a248c7a4f579f615e521d52cc35aedde01e3cd0c4eb951b203e72461be9e84ef4c88456dcd5a195912a90e154afe5898de2c516499e1beb70c7c5406311e7ba74e0451ce1c14f2ba29b5f7307be43c297685e7c800f6a58ee2ea37d171752e6a6f63f2af2cce09a1f0f096669d3520f991949520ca208f9e4ddad5aac8ca25a1764e31f843b1e77431fff59dfa188d70f70465544086034f15f4377a7c45e9b22c6c1491aae5139cb28d1cbed8b60af66f7b5f4caa51890901df6427d61001075966a662a99115823c4011b280371ff3c2a18af050a8a934da44649b1e50f506c5e3ec5387dd768d96c0de5f3ac254cfb820ee2979b4ec3868ca40bc9c304e19378cf04d8ef2bd248ab68baf4e7f32f2199d93dd6e9dd97e731aff7498d693a77809b93604f872b1deca1e89039740c4adc382f5788af96cc3dba9aa596a4c1851014ff832161e9b5ba3a1d4a23206ae3c37c25adda3d26b1fb64746281501d3871cbb796075484ac9ea1b7a73770d168da45bf2e512eee45153e02f4dfe3b42e50304a3d63d7826f0469562be8fdc6569b056a7dafcd53d1f597c4f104f81cc325e325cdb95369797601674cba2fc049803ba60028c0de05271238db82d5cd935d44e8eb8a50b0588dfa698e1d7f359e2468f05a7e72033b242ded18fc253d1b70e5e20b6967ed8896c4db64a564bce0f21dd7d0f3896a00675b403db36ee1d80b46dfa1b90187863af14b64c488bcae63badb282a5f58d18b1ae0ce5b1b523586d80042fba5f4dde4f028030d53cb5303d068b4a56c764ae9fd3d2f55a314c07e1a1263c3dddc0c1f520fd3e24e5f6b5cef1f0ae74938c91e62b3e5359e90054b9d74888411a37d6487513bd5e0ef73d9775c9f527e26d892fbe3846d765a8099d2b525ced9d1be3f109abf7aa401f90409afe68963b6f5d2295a917fc2eaaec34a32c0069eed5b197e4ae323101d6757068784fea26fad766b7770fefcb70c6274abebcde95cb08e30f02b71adc84b6cfe81df24a2b76bda42c8c74d9c4605e1d25f1d8741a67af7d9191ce8e5691190621d698dfd34bd883fdce8ee1a2e47ebf3eab9b520610700c7241beb5f96667bd1b8c8ad1a5e1f0ac3127a730ec63ecb59cd54fa1e12d1138bafcd1b64c69679bdf2511472aa1cdc6d07e05ed2a4571a647583a8831285bab72a94dbad703e349748b7369e8f1367ae3baf141e5f1d53b481aa4308068160aa2307be8239ca16fe2a4f860693af47070c5b354a3d1e01ba605d7c055550a005079a369b79d6bb4325aea5435e5d04f8286934def4c5aee69001a613957fe33866b0d641b6c07c06b938f6cd2588fc01ee5d9544eca0a5e9af2b43bb3d6bc4b4bf00002d8733d3c953931d1cafdfc6a4ecacc934ab3b9113fc5ee754b3a0af1a8efc66b7519d7d0b93316aba53bdef6191db52f6a702faf6360103889ebb1cda351a5c67ac59b23de698621e979fc0b88c6dc53366734e10bab62abf652798647fce63b70e153de0cc3cb5b20211f52a1ae89253701904f418e2bf719d529c499d9d0f4ded4c5a84b292c82d19a0f726ebb04cdf4a60aa00cf1b5437add8b31a3d0ad164c06ba2aa483f0be854c9414f7d69474f6bf6c7c75bc46b8a2d365736ccac3cc42dff90c1eb96036c39f76e043e88342c3b27c8d82d7277e181d8032fcad5c3c49c74cf5c2b3c41313fb7c7d5ad7175ee5e903783d2aa0bc6425a4175c63be8ee826798d975a647cfdc87094448d99f1e4cac8e8ae9ef89a0f5198c993d231eba864497da594879a0a6e18cc09f0502246bf9583dc197941a00b26f1a9e4ff7b10e9846df44a7695c1553cceb2ea861a952f30f1cf8469d99fba1437a77f6e65a81df2048d657a94abe5a64247628100588262db8fc8118995c52b42948dc8d2f8695aeb77cbd9bf4e871dcece3f8bfd181ff3e925cbb97a099633bb78f553e9893386caba66db3f34a1681d516bea395c70abc29877a9d48394f4495b9f58d3e2e43c485f1cca3ce59d50d5d7cde6dbacdc520ff0b328be8b27369546731eb78be5450d6cd7ecdde8e19d9f694dc90c90cbaf7735667f60aab7c0474059efbe0d9d69c2ec7e8b4bc4d717220ed3d9f391a58ba3707af7e367ac5b065239110fef736f0fe4f9edae04e58507ce4760b936d3ae3aa9d6d66f4b6fcf7a83fbcdd4b9d1219b5e305a2d2d75b1f5b191a48508bbe0e5e662642bdd66e44cdb876b32f41e450f610b1cf0c9ee6195c09aee808ec6e94c3106eb40a5fa612462c5335327c1a412f6727a205fb85e8f024885d1505c901691aab1d62b9310a9219e6d5fda24064d244dbbe5783b708a8084b3a2d6e69eec0f36ff13f89ab7841ff8607d95ae3367f38428669bde5e2e4037be18a9cadc75b1921d2293751f5d64bd55d6e1c7f2096bff09cc500cf2244c47ef5d50720f5a81a75329848e10daf9d3949245d70cdb95a6a63e202af214ac9e8e9953440242875be951544c52a6e52465d84a464a84786246e591a127a56622e3f33baa7cd6ca9726c18a16ac67309610d0767d72ad1c1932e92dd9598084bd35948e0b44be524454a2ae56e7c6e313dca454e24cfd8ab4b3717c3a504d0d56cea4d7cf23a12748b91b4873cb6a0582137969dea21dc91c0fa5052dd3b30ad4f44a9b5de127528d9d55e1d520fc9ecafb7a3fda3ab4e1378eae5018ac5a8221f0ae641f46f9daf94a7700e4ae23b7d5dccc5d3cdd6bdbef7ab4e564a1eb7d240af9b97c19bfc77607aa2e083d88568a009a4b6d53eabe2b19de4d7a7b0e04c5895323dc242021eb1b16f2a994d286d1ae0a92d664d892d3b5550fc0016a1decb7e329a72dc5f13fcfe2d42f7caa4c922d44b9ded8de60ce9441b3a0fda8d381dad25346fd563f5c6b375c02bdb8b2b5c67148ec76a32f06fec9c181356f2b6c3b47291f5c7a1129373c138a1fa3bf23c1b9c76a07d007623d15c2cb73682f95226b349b12d9718e7a1a802f6a147bc26643bfbf530cf0ca984e3ee57d3be6e5d666fb22e61c66737ef82c5a65b2ef7bfc38b8532200f326569cbb391b8f5842a15f061da1ebf8c089ff9d71d9262237cdbf388e3c53175ec026c32e170c8e95c97edef20bed305de4565dde8e171cdc1f01c9d869ae655b1e15dd2c385b8fc797ed0a0beccb1533d727f4074c2ee6533b26f29970b9e303b890929b452463be53d112ce0c2db028a997e856db13878569553c391a1b9b3fd5c068e4070e136445557fa533b90725a4d0c331026d0759f1b62d202f7d95f8becde96d46c2a6a0b59ed8f7281a25130efa0c028ae46fb61a724fb67786d814bcde9d9fc9e82459ead7a52cb4f60fd8303c4c303c21c6862db12a64b9df6c7d151b0be25a2796792d266fac9ff6cf5e52bf0a23decc14b0729a4490bf2f591911adbb9fbf2703e7c6b3bcdeb1c16b8bbcabce43388d621c315627a44f1fa7d2fabc353cc191738bfda7172cb100ee49b52721f8140ab7b2b20c5b0632575f8e166f0223280dee4d192a05fd695a5d7f865b89aa38ee1b5a3ce56620307e8937afefa9babc427d15646310ba9f78c215787090c16ddf96fc1909d258103c2bb40b64b26b45d927cb247bbfc91c0124f2d18ebea57b8531808f9f27189c3b4fed72f5a69d8a79f557a29a9a93a89e8c00d9dc9abe2a8af3cee7d0ebc79a20fcca2eca0bb754cbeda126e62a800af70126da83ac754293e5ce69c3a8ccd3963b33860c6c236b771a92f88af6f90cb38b4c1aab7c308a4b0d695ca1e5910f431310c1e34e48972481105fac8764747a325ae27a9358cb5775850a912b7d15cf8c4928763b8ea07a2c04a575632a0bf6ff397a1b7856cd62250bb9bc01f8afe3aec603eeba5d4d232257100c14b499cdf9cf2ab4b390581223e4b249ef6aa32782709a72541d67c46befe9992269e6a729053a6ecd70340f79f63d617d3bba420f2d342b8f36b60810b6774613b0b92d95c4f1704d5d28022f2ba12c34d4bcdd5de61a41f61102941893043971f3dc0647f299e3bbbffe934b6a28d19b9b719f758495db0e1413138b6dd69ac39915db477878eea0fd7c69d79a18793bf9a1315eedeb2161a8b12b712e3692920a2d549b3fd6ba82816b2ddaa5ba4b9a57133a200b643c7636a384d3bd6c4965adec184d2efd6eecb292865d725670421b9063c4c44a54d524b2c7b802c0e6c4ec19d0652c343363f8bb1d67e9340fbbafe0545102e39007dba69c29e57a91372e7e23e923c23171bbac9900f29b518b79cbb4cfac791993c447aa2d4ee17447dce1bae3faf08f9d632ea43075d55e3ce3192b47aa521701465c9acc253eb47b5c0b3c5a9906766f5809e3005a285d56539163c0e4b6b1dac8af130e52d97c5c17c45257e84c0d700305007789dd765f33fc014241ef0fa4b406befcbdfaf27175d3a4e1ce097d27caeaa39eeb3bd3e1ea22b0d5ac445aea712a439d4fe93e42df02d9003687ed1d167f737b668c9963e0cb16820afcba3167e349faeeed8957bb179abc050c86d8508d1919e316f36e7dbfdb5044605603fef878198350fb3972db8e1e24e16fe2dedc3c7d4b23078929c5a84842b857e79e337a04f758bb6f6d165e2d7b4ed1c32a3485b184f9fd3c4ca72570ec4ce466af5af4c3304ef2811390b1f2f29ad4019a5d9cbc78e0fe0f4e2bf9d22a6326079936915c187ac7f8cb103073720f9f26981e28a60d22328b971acc76e5464552c48ff6d99623635aff6083bae1f35bba8b41d2772d06c0378f3b4862033e68cf992dce419192ed32164651cf298f2f43db8c4138bfd3d09b9f5813a06e91b7077ed7bf9df3108e05788b42b8302b444befc81df1abd28c402d37d5380c875b81dc5771f4a3e36e5d8cf7ff7fe00fc25931bd10a8d94b1aada3a13730c76a7cc51c738e4e8953b4c1bc51302c1f82d0f60832c0673185a26a675ee0928680415ca4f4bbb48daa89ba70637dc5d7cd96a8dcf0d5359aca4d00e3367a663113d3cddea1a22c972e14cf0ef38c54ef393dfa16c0f81bff6042f67df1aab2af695aa03044ebc18f297e88ffca08e04f0ced711c68d11f4590aad49f561a80eacafd5e04a33e785de1ee6dabb09772df8ecd9757b0074c55a2ad23b02f72d7c980e48ec188415be99f8d077a6ce111870906f32f6243a717de726a184259c034d238b8cfb99f711baa82ddd5c88fc52fc3bf0d0d442c3a738c22313e5878411307216496fefec2dc4c +MD = 662353cc2a4d1281b394b3a51954eac90586ef0e55d3aa583395e97b167beb5d + +Len = 66848 +Msg = 50ccbbb995eecb6825a3b7c7e21d763caa8f042670ee12c192f5fc4a666bfb6316a89cb8af5670e37475058d78a116d66c98fff7b5f77326c24471bb9c317490be1febad28e2e825afc41c3b97cc03c963405ce3ec68dcb7b19523b76e62effbf03a90e0271a9cf67d98e3196625a5dd388f03303ecab43a07eff9880485d36a53007399d587f21d86fa426e0e3465da938ddc26d2a363786e5bdb75872288a68f797c2059b0536473f12184b681a9871b43d00fd17e51398cdfb1c51fc276774dad94bcdc1d2891ec8668a18795daad79b8c53162e0e645098663c1f3ec05a435a5a1b78657d76d98c0ff0ea9f7611455f4a4d6ae538a638e55dab12c289df7ee688c577ee5cac020a7cf13432fa48455005644dc5ea55dc356fcddf1fea63621fe3ee5ed4f67522b43bef77dc60dc524e3c2c3158a9ff94f90b28c6bf7882a75709ea8fa1e18ea629db5048043039e68a5cf9d815de000db0be507c29aab9b93c593eaced944526dbc9d80742eedd9ca4f67184761d0390ed07b971d6f7751220507f190085250f3a85cb48110353cf1e8717e901ed76e91e65e82a4ff5513cb38e1076934acad9c6adce8cd6f42908678d415831b5e650b55741081d1abaa3667097281e4b9301209036483d67c9c30087a2649e0cbe72526a78bd96ee2df0a9a667affa0e1a3fa8dbb6fc9ca4b2a989e4af809f588bc8760dd39d75c6378efd7e2690cf08cccffffeb52c7d5170065452cd5ece3fbacd80b0064a025953d8f286485cf5d2275c7667b56a77e48e7400208031a318e7fc030f7525f50dff88f94d518716e0b64faca52c08e4d46a7d1dfc6cbba67a8fce9d5aa4b3a66ab6f9a231b6819acb06241335adba6cb7a08bfe34f75f40db0edf805019959ee606b56de1fbef09d773644aa7aee177f4ad2b3168949f2ac101898c5e483e57065b46bccc9611ecbc9aaaa369a4009f21fcc54815d8fd9cb2f456f1f3b500675241282f6029bcabe0f841be0a21aa3aa62c04b2bb38ed4f3753e251aee49e384044d4362b0b21cfcaf8d41af7bc40d3179743f1d748f08ab4aca63bee5b6a5256d2c551abcef3d0f138dc1ab0b86700fceb0d95d86daa07b16b0d11409df73e0c77961260f9a557fa14c46dc3ba8f4cac73ec1f5d3b7c2eb41b91623400b763e7bfa0e8c90fb8bd2c391764bf471c0eccee59eec426e978433addaf47383d6c6ef78055626590892e025f9ff1c2bfdfd4a6c184bba4646cd5554c78d8b90ba018cbaed8cbbfef4465fd178009c1cd283a39cd8192588f74f0d7583f86e784a75ba8a6f3436307677aa5b9b575d8c6808403d865e6a7dd490c4dab63d0683b0ace2ae33587e38b6ac288b090b46c5e6138b17ca23716a021ae349096239fb112e6aefe0ff7d5edd6d412b6b243e0e752debf14a6f229aac75d08b2371f1269881bc151e321ae913435d0168ab2fae3ddcc894b14a6554f827f568ae71154e6a2f3ee897f83d237fb4e4d7a9a700ee65ab8bc9a5bc22df0ebab9a74f6b8db9b2c05a30f059ce524a4a3e73d5209916161f9a56cece418417b68312b06641af96ba77b4d45db6bf9b8dd49d951ee26e77c25e03d687aa8b3ba1bd6f796a197a3ea7fc3de90ddbb29b040c1f91aac33db11b3f9a62f0453ca105ce875280fd61d30e5393d770267272374fc070cb24cdebb2a6e11d0ffbde72691e22e1aed5ab7d78e37e478e7f4947ae0647db8aed644e10f9a2aceeb2bbd5561508d1fe89a1636c14c6e170cf7d42f2977d79ed064b02bca1a3ba955319f3531b00c878018bae724e324c1dfc578d8a6c2af3ff57ca2e3e07aded0ac741f4e898d36e2325b18512f98b319df01f4dfeeb16f0c5c828fa1f9287ed57f47bff9df4496d07de5a11d57d9937f9911dadd77e08194942af8fe6a9fb6384c40f3cfb972a6a2c12cf7a4243240738c999d39c8cc91692aba5151bb6cff7971e44d489e93e109baa59e7e2b1f448627fdae7d57d228ea8ed53b34720cc509ae963efcf534d045b8f3e803b30d0a3809b29120ab8d82994ee0192f14fba17940fb4b4563b1ef174a7c66fd72982c09904ce7bc4a7b6905d98f7daa1ab61f38e777f4ca50a7a7defdc3bd93e02d046b5a4114c8ab1836b0bd17cb2df9c888d8f090cdf45292950d315e3e9f62583dedc6239aae53e0661a783d942348af98c9fada294bcfef313283a08c489f8632f172690bf5cb6081b379557b327dd7a99c64b8b9394f3a06ef632f0957fe537e26dd85cb377825141c6ef3c2d41fdd45c0dcb0d05546ff70846e7e3825e52c99ee761e6aebe08a97a5979d0d70852cf7c7b15711285dac18a1f402bb3b0a9df0c8ca776d7bab1d86efa1b5dda064532a21912ffe1ae9bc69b8a250f51fc5142d364935456f2e5a5c6b0bd295ec33cc775eea8fe9b571ccee48e7ed684cbb2ba9c770dc754ee0dda2a84477d8ac6a0549e02c0b86709c4a10d3333c973a4340e0fcefe18f9378f3d417ca1a18697daa2c45d43736e4afb06bd812d30470f3f08d3704c906c54d597b4a3b3dd7bbe507990081778d7a529c79c81525327943b6e9165e175d6cd45af2afe667991c36ca0aa0a260fcb9fb6aa533a8b793cbc9009f0b6a30f5e2b494f4c97a0bcef2f95e1b96b567f72c20b788ab4c1ebae0ea6a1996a7ca82df5483dc2754af0be8a320265339112f3958ef8e8f8daf2a413e6fe338953866ab3aa4233a04d5b255aadcc586bbe0e77a0a8f4160dc0d44651b6e7671c0ff23eeed62648218f454d296d07371bc5bc256cc132bcfb59d9bd527f25dd299a34d12c36b1a8fffaf85d7eda7bad498e642680427c81cb8f4b319eaa813cbbdb944af831abfb4275bb7ee25cef60ff004ea16491980d844870c9bb9dc02dd7ba5ad1d72fdbebf3e7d5d8dc5b2df84405c1bfa1184e092e6e92ae33c2ad57871fcd9053980a1e183a8f92f43ffb1e218407a8be3e681dd2e8f7088e800f63d2f236acf3d5003cbc5531d5b270227a9c666683436aacf0779ee7fe523eadf8c11bdd503f4c85eee42003c89f576ab3c0912778b906e42b2578acb8096650bf5a830aa2c06661dc9a834c94425a9a7192ee91b1a779d675e45e8d5f3a5fc05fa71005cafd8b5bade566566023e27c5e1c65ee53952b4b77bd38d11b6e91c581b0ab15f17f243d09ceb16755cb58d62065df84890b840ad9b7eec1132c6427cd7c3d843fcc97cd9a5b4cc89bc122715f75429d7992ecdd42db68a570fc40adea13ac98db6e4ed405961fc1598daa15c455787f4bb1cb8a5a308fc559668d21817de29aeeedaf19f5871399b7b85689f60c677228f189dacabe4968f7f3b34939c2c5d19fcf246610350e9adec990979ea2f9c038d98e953a8d7fd7722a1aedbbeb3f87179e1481fea8f90af648bf05642014afa2f1428351a61a5bf1942ad7af0037027de1e73368e8bd3226be4a9cef8da2898fc10e6bb810003a9cb74ccebb07948cfa210444f6fe405a97b29b24e8f18a9426d2581717d31bbc9c1de6998a0a406bb6e5d57c4ff16cca71ac1965f654b41990ab894d15f8512b194e6201c21022e7d8b5c1a31cc928c9db342c27c2bf085ff4d40ad65a858ccd3ad126ce0c22224a89193080048e5ba0fdd33c31f4396eb07bd6427a8f85b3ec282d9cc80f4728daf09a8adcb049ef980010b14c33cbce524c3898005cfdaece0bed2ab674871ce136bf387fc702cbf70c74f440277c108e9182763268f765bb0a963a62e2eae6a58211a031f2bfd70548866bd579541cac6f3d43d65c7ac0fd4db2339202796f6ffd172bbad98afb0cddce7fd2d15bdaf410f066b5df8fa7dbfdc87d0f7c3b9d86ce5941e1236a1f52f3d49801d69a33ae9c2349979a3d029c426180a1f73959341f5f4b6f79682b20b0211f2831180d213a5e5344348cb9894304a30f1b798cbf15b2af2d828a07be3f3c7a108add5296132aec835684b4ea2939512391051c70dad9d7e0e7da9c74c6ad138187f2e8554f0e7c1da82edb071b89efa301e5f38f965c29534f60d08a6efd5143d35eb9a615936bdbd1911727427ae658121ff76470c40f4d63238c475eb39b1d1429abd18d3f22837ab54e93c6969e0a6dbd12369197f095cb2bb9f5bf575bd8f35ca81de19d07dd4aa36994ce657f81bac62b4f216034f42e803ddab871f83c17fe97d4363283b3ea625170826ef284a04329f547a44232342b023e728ada1129175f3cb788ffcb01faec6f0b395dddc73bf6712bed84178633ee6b1429691fd0b0ea9d8926e1ee387424db914e2952d8b6790bf6c2616acca0eba8c7d70d2eb5cf1f41d79492e437d7e0fa3b36bfac7bbd9a0ad0ac41f5ad7ae03cb31b2e057f7fe66fc75b7b75a52b0816327885b2575641b8e0328c7ed2cab470ff7d346dd7c5276e810203692b7983759e9ce52e158c565b4fdcabcee398518cd485872e65abca872e11918770c83b5fa62a46e65c64c13c443204ad87ea9ed859bc8f10d038b802f6108f981d20171e72ab10a4d5e86aa3e8bd00e366ca839bb7a9b4dbc174d72700886464d989fff92ba7aa2e281f3ad763040737293fe81f15d55f56df68103d750178b34d0cdb37f9a47e4cfc111722dc8f82727851b5aa9cc6f64ad31b4c8e7c01334d20b09321032cf3c8f9c7eaca7be7d75cfa09d2857306e37f449571603e12fdfafb7e10ff72c67169c8489c186a9370bd586e28f8c41d8cbddbdf68fce3bb3e81867c38196dfb60f6119c1354ce1bb35d3a899d4ab4915bcc40001aaa92855eab68b4f4b61d5129387bcc39c6d2080a0446601ac56decb6731a006eb273f6c5404a2e2d1faa5232f7afdff5b69be1dc7927fe88af17b5077b11e84b5baf98db08d3f1c99d3b86e4fa55dd2e6b542e91858368cd51d975b5adcebf9bee6ef309caac05b276f874a70b14cfce2e237891f003a8d3f3dcb328cff98d45b3d78db5507c72cef20aa4e4f094bcbc47304543824ec480dd48f7c8a93a5b31f213f04960ec40075b999e01727eace0fea42011020dc7be5644cafd05373047f349a42bc3a47843f7cceb68597aa7229aa78e623ae7b674a7f8b22fa99b146ffda22fc5414b226c10cc127f6d2fb66a6560199ff0859b8a198d39c65e0c0f915a461b7da1894469ecc19bb07646e0a0a5f8482eed8e7de7f22be72aec322a95505cf0bdad08e822d3d20f623b662eaca397a378f9ab65757af943c31bb76c63280d34ec2b6d157f0f27f4fc8538a676a763b3e5db845a1bfb20d5fab340dee32a807171e463d468e7e9d5e81c6453e7f987ffde5dc064c1bbc825357b7886fe9dde2eb6a0902cc5a240378dc8913ae5e02910c945078b4f0317bcdd3c046e9acb4ef422269c257e8953a45351676559a6726c0f5c03d8ae1b38215bbe8f9ea0faf94a1d4030c77be44ba3a27e90db2c91899d196a5a52c44b51dc15c9bf1cf97306b80fb4f41ba5fb4fbde218b1a444ea962b4e37b4027adb8b7675253cf28b7e9ec6604b8f28e21588787be775c98bf8c39c158abaeeb9120d76e299af284062e9fd79cdaaf61b7b1e5fd6b38151e805367ad82d1320673a0064c4efc0c4ff690ee4c002ec8e397638f7594480444257174cfee668a06d998bc982ed16d0afd936049eb2fef7224cfeca6d6218aa83378f9bef7e6174b477d72b865c5a533afb88e37ca48739c045995f7bd4f18c92edc6ee12bda5a6231e0b153703335687172d0bc0a1305df9ab313ee963b4f157c1e3cdd16add3ea1d5500cfdac4ae07e754c04d471a16ab7c4edf020d709e2bafb0ec0934fb04218e3ce9a401d46f9075c0e541edc8168e1daf6fc89f89766a3e27150c132c7bc6f91ac46681fd1a90a169b8508aa78605f3374ea8b8d0785fabf3104c1dcc9b38e271398dd7a90f96fe91a1ff8a2305919178e438d600047a7da7965fc155f305ded2a1908f62df01e1eb3a8588d4e5bf6d06c8df9372bb5927b6ffadaa4313ac32a1a504f5b509700fc90aa8f337d6ee1a5375336db30d6a4ea3b4bc453e6d9ab280ac61b70a0f4fbcdd6ac055c639bbfdd171aac14b6b3c36e06e020e82715fa2d2301d5fec612f8d7b03722d0a8e979c1336cc3a96552d851f842572c9bf799828c8be3cd69f6e06444d24e56f561f799b4d0e364e7bdccd938f8d2e7eb86706f6eecafa532aa99baba05f1b8f20921adc1cf740be1fc854fef8af8e1becb673bf1aa9f4ec9350d213b5873bc46ebdf4483f0de67fe15edfb448130e1bdcc67303c4f1d8fd59f22e3ef543c2b990f1aa722bb8940e312eb246063e4b19093569478639032fff0c247fd80b4cc957bb81fc5b8de5e3bfa66136abb7b17de281eb0cc6c60fdee31d4948d644469e039a3f294704388acd648118b0e5ddc4f91a5cc61f4f4b94a6a4013c98952c82251c168b86a2188dead7864ebe6f1c88cd8d5305f82b62ebda1ee0cd77648b204c9fccb592ee1247b87de54b1caa1a23d059423ed9f0d23ede0c6c6dfb38cef2dab3b619e45e925286d622b0643d5340a1eccee33d16161822eaf8b0ac9884747ff6674b036a3528f65ec2f11d8f344992d64da5aa31bb1259494a17f3fa282f7cb644ab7897575587a64aafb11649b9539442d8a9aa1d97e185a51679d4467e7191f2bdac7c9542bb1b2e2eb769001a44b542fea405ca134c5eae3ea6cd5c0bff07e61417706b9ae14be200a90df3d6e6a7c2aa31cb4d3f0a02c9f2f33bd53265969331521946a8caa70ab7fe6ba199c9ea464dcb6123559b308cd5f7a63e9c55ac8e87e4ddb2f6b7bb1cd7300875bd6efb426be97dc91180567b4a1ca314944fe83c9a38443d2f49067cc0e67afccc36694b871467cadd49e2f9d1ea98e3d4a4a831ead4d3419cef07cf177a29b340c0a2c621c4b585136874ad0fea2e28b7f48ae2fc33116cea1a3d684d739b25b59e4646ce82fda47e5c79e95683a96fc8dffed430eb751b717b25fcd55b55b0851fa251dfc7968568a66153484fb1058197729a3b6674d9dd624fd131a9d00059c5655bf81b16c45cd6d96f47b6cb967ceb94898e2c9724786019aa04e790818e300de989e604ddd55e3081f7515f9f051cc3468ba66297fd0521dba17d2db0acefea6f17c0d73e6cbd055fb997f39bd4db8d35b67c5d80b5c1e6eaaa02ee1a2045a971142404628d63c64d11031df9468860fbb116ee9b4d16d75b80f1882aa2e1c984219812e6a1f301de802b3553e4a3dcecedfeac242d7471a2b8d1526e8f34a90ca295993764eb3688a968e01839ce5fadefac0cd7d18b5454d41af3526fcee69f2994fdd120ace2dfdf4494d2a06877a318a78702d39bede64546d172af00f0a0292ec7407fb88548a456ca0fd2f29360fb69b1519e56bcdb9edd734bc78b65b423bb6c01ccae9c579b18061c2c0d616c2a6b0230ac2c3fa943576f4a63cea44f9bd372a1b1ff969125f0cfa4260930291833f02c878ce4d3c54d1c0afe3b3ad713ff718caa1c1269d7898d245b86ae2c375d0191bb094affb7171fe9e16197ef0ea7df3f3f948e56123ac519370629ea1a3ecd2cb121e0617b4dc183c7c259fbfe551245ccf968fa789d1dff32f831e73361a949f45733cd9469c7451bedef82659fb11cecab40ab7d18ee42e9dd64b8155e3c860f29b37894f397ca5834d726c6e03241092a940d9246cc80c63620b1229ced4d6c09fe16ff63996ff7478f3db4bf2c4ecd07d1755aaf2f3552930476fda6321c9588620d364262c28386964b9195058282c3979728aa8ced19646e8e18f2a17016158defcc187a5e97828ae4fffa34a8d4de44d79ed16bf4853aed4ae70ac1e45841d023334e56908dcbbb7e5267501e3dc867bb2fac52f810870f51ea6709f5f69de74c0e5c7e04d0b2c69c3b64de5f28028ea65da3c87455c92317b59fe0015b7a31cebfdb57282ae83ab30d6b45e81e2d084dab4032d5cf71e720bb0dfab301672e2fca437876d6cc66476ae31d45aa9893059b1a38b8e821b9f18d49a06783055ae3a01d687d8eeff7edb674caf437e58d629f9a307a3a592a0e8edb77bb4aa5368ee3d19da89dc35e0a8298d570509475f93b38b0b62078a5dc322bf71ae2f74f8607f89e848dd7172241b7d3568f15db1df08e4fe94510bbdf39b39502c65c146d8f0ac19df99ba1c9966a3af33dfa2b5551f3448012a1eabbf81ad7ff7f4413a9eb80dd614b918c64d31872e307a1f533c210651713bc90c6efca368d785fdbdf9fe3185b1e5935889a5b21b256bdb74de35df80ac2c16c94933a47293c0fbb533eaa2907cc434ba95eaabdcdb59defe8184493f79a40dca984f3705f54c450c92a6e75d3eff02d5b927fadb1aed31db6e35cbf6a24bb5f7a377e589c3d2e3a85f578856be3d058f3d85287ea9cfdbf1ed71ee0bedca1638b1d43566c6f9db73e1280de1c62746d1682bbc2f52a6e42a456038e723c938760b8eaf05c66a3753623fff681c65cc8484413e55db1a556cc02933f20cef2497faccdbcc8bccff3228c4e652899ea08ed7f137570dd535a1a4f567946fe5e185c4b64224dcc839f77ce04807d57ac8d9aa612e9fb07c8cb03aeb5b3615537726b1756b768206ef8aa6baafefc8a34e4b44b9ab948cba6381ca34973ec7dfef640b31de28462d28d3ee7ca2722abe39ceef22369e6834c1fc9cf7a3164b345026181124a4eee5edb99c4baaf8c2769249f1c458250e95ae09f75d082469f8a253223ec45042d84527f7524ee9597060a393c6989144833290258e4dd2ebd4edd56fe046960cac380248b616adb757abc61d507f4bd3a656796cb1fa87976f3a93471e33dd1209ce33d7a28aaca4d17c99d78c94b983a821ac15ee97aa37729075f420128c1d9810a2ec3c334ee886da0408a05f441b2e9c11676eada59184f863bd0f6b0df5000537cfac98fc4a20cdeffab4685465e3cd91ac59c3df6e4e7945e913c7c762eab5dbc71b411c94445d42f3f13852276cbe122ad762c095771b03c153ac222cfe29741eb1b7188c9c93e53c7e56a42a74777d2b0e11b0d0a8e6868df8a5861ae368eb1a958156fbd076c11d844ab436a1febbf5295817e589e3b49529375bf6427a2904f02740a8880ebcdd2b9de9139b5db3d04ebf5d9dc11976200fec0986c2681524e9323c5d6b64bfc69ad6aa880b9c4c06a6cfeac0f991b577d14bf8930c3996c1a929b4e0217fb31efa7d615e99c170de580f2716d85157e399dc91e4c7f5962457940ffa53687e2e721a755decd6069f8c087a66076345aa8c283a439ca5fc961cfcb573a9250a3e2b364e4dade2f5926c404c7a2dce6814d4b65c763350b05d20e70e13cac03d964d5854f683ee27ff1d410618f39ba76b990e604633fe99c18ae082a25f40017dff09ef201701832eca930e0901d1e9f502b9ac7b45b7a10c826c79e70fae3d3d69d087921123f16699bcce15fe7818fc383eaadd1084af8432155bab8311d91cb4358415185c59f0b246ac0393991bc66325c1333d6cac73c06290b66271bc6308c04e71d4b5a3143eb9129d673bda9ba9f7584773787e1f54db80d055d7d0598cfa4d6eee35b81a659b67a923663dc5353bd9df5baf0ed1170993c10449fc48696ae9d30ee57e4a4e7613f06e222c8b2d79abc49c1944d03073325016d22876c6998b6adbcbdeec22d17e3af1788f34ba3a36bedfbe0866c8a2c34734773c2ccc0d99f9fef1c0470835104f536f4e090304e295cca743d9071cb06c054221b2a3507d491e5f0da4292931f63d105152316217100adbdb72146b5f88323abd5072ea9d22e41cab4bad3549f9576280576bd93df84262ba7918163a626267f94e6161634cf8308484bbe1c01e486dc45fdaf3bc151b45c6363aa6a7c43ed2bef39a3f368e01a37f977bb6fe2eb93903b3a537fc2f3e8be9f0a3a210746d82f289420b7db1a87d83cb163b6bf051cf279cf62d660e523c0af17a92dc3b987f7e56844ea27e94c77a6ab4f96f2eb9361660f25e60790061117fe8ff73e167d24ba3868f0cba6d894bba7c7673ae9876ba47c351533af000e5e315703d2e818240b770562330ddc9de04973cdd399798f99b918ea817c9247065286da2ea8f9744dc6b2c4fa78a911b8f2dd317975ea2bda2839ec5d934d2994c4a7e0adc381a41589f97f8e61ce8eaa565c18790949feda6c2081448d81448e2a22cddcd25121e74332186b63cd7338c679097ece19471ed7554fb2b5ef1656d59fe8385fe87c3784f5261df9264de8d5cc7ae72ef8b31bfc50be44b6d72d936967d64cc6a8218ac1db1f129c59ad3f06cef33eb638b1466dab43671ae9d8a85822fe86a11090457c2c69f5c7e7efafdbe8f9020e89d0429dbd75963c87c61a2459e78269c2772c36919d13f641a3bfc7b2f2cd624c8e94ff1fdb5ea641746d406527ac9b3e147363833f09b20757f34ca586fd8bf14a92143adb2cd2a742264edd2581bfd416cf9579b65385997aceed490c1ed62892de7fa6fb8d6c19ddb9a23a678e4234ec954efd997deb889ac72c0628adcb5305de93dcb2fcbd29a5bbed05644eccc10468e2876ed55e4526508b753326e5f10216e354a7f75047188181b6a22fba190ccf129f9d16486fac1f8e1ed216b093162c00973109c002c4cf02d6b7cd84ad541c31beaaad5468aa78965b7c09b5a9c0625e2ce4a086ed38e8d2ee1b94c6ee78f4d25d2df6ecb09fe046c3975c5fb58f7e6e8e49680f46c36384552411fb5cf9cd77037daf8be7fb0b11dfca9b3936d1b4a423c5acd3d012b399a487c19c99452a924a4023ac6f4a4d8a187c52bcbe45c9b195fffb7ef9957d8564ad2014f3e970a689ebffe8c71c2c11f622ff64bc4a11f94d3ee06b33da15da1e1aba1f2d6554464af790ab8fdf2b4c01651dcba15d120dc228e8230f4f10fa2936fbf5863739d415e9827f1a11cf8ac2a92a4c0e0d6e418d346f30fc62f3782eb862429edd95e2733841ddf6428d60a265918062c97b4716f8020f7bb431d686e58980e7d6fce3db7a6b42b4efe96029310fe3401fcd70f7da3d291dc16097da64de3ae191d37ac7164b47d678780bef81e1ff267ed97198517d185308e43e91aceccb3cccbdf9bea27e47cb8a9db63ddeb43e667523ab81043e57abf9412d352411cc29b610f33a8580dd1484df11ccadf31bb08130913a591d6189211c063d7109b8690c70f9c355df7241f5c080f4862b31753194c53cc686b08b0eb93c330a111a4b2e527fd19a06a1c46bc6964dedc8fa34e4a4b9f0d306df2210cd418e55e46c709a39f7eda872e61c4575c4415b58e06038f4d20f152a57dee5aca8d7fae02959eeabe49027c0a9ca11328d7745578e87ad19cfdff34d8521ebfbf4785f80cb678a0ce8319e6c875e6da1744832415f3baf67e5fc03fd119b922f9717fa62dd39faf1557a52d2e939a936fb4ca8b2dcdcbe73c6ebadb5779c86ac131f51f2d941cfddceb30b8059fc526794ed2f0871eb58d1d517771311a52815faf70cbd4a0f6746a6741f114406f7a7d3b22bcec8f80cf6b317f6728a55f4e1b157812e9a035fb09f4613f251fa179c3a2425824c735946c35582704c2f8b93d88935c363be279ffba160afee3630a92acbb2af76fdcc66a868c178d1823aa0c324b11811a04d895e0ebbb6835bb153480149c2d2f7b4cab4ba3a18a50ea09d13b279993e4a3ff138e65b82bbdb383ef48d5158dae1c0e78ad232cc51155bed5cbaf5c3442c7d6c1ee0e6a0f22523a0c2987fde095c6f418d4961f04046bb25d086cc32bdc7945e6256d39dc0da023d24db1bbee8b82e6d5e783e410d134cbb4 +MD = 935c4be2217c43beb27a9c6a4c42f1b8b5e17ef6d9bb44f696cab3170986b026 + +Len = 67944 +Msg = 198600839732cfd889c321167d2581a30a21e3b857d44373dc6088286de1aef974a324a67e9273a6f9f121763b4fd531c7b7bb61cc282a14ef4485334a4c5f10b54ce23e449371a511668cd53bf6f49b2e8f10d22511907ceea45012eda87f1864eb00f3f21f10ff598b2add8400270ac80faab66a79bbd361e7b26c5edb57380ae7476f8e1d9adc59c6c2341d57b6a61ba051b3a147f440d17573e9a3cf2f992ea87f57237455639a801e8211e1e996b1abcc71d46383ebc5b65b32c66a4f6258967056b60e8abda3220470658808031296e4990ab4b0fdc51231efcf96febc1019e11251d28011fc123da523325a14c4ca61d34c24c39e59f1bfc7c43a85cfdf999c33fba881882eba91ca53c928f251b00bc6a19a03f50abbcb63af3e2cc24c7e6762bd78d34ac081c787fb34bac441afa91b11ffba2b5fd81e6b97893bbde0300b479e2abf7e3acea983255b58b31a2e057aa4392e67e1b080868505faea21175089a6a78d4d250bfd67d8264ae76697e5896331a7d216abb95c8099b16f999bfdd0ddd585de079f8cda1d7dd787ac5112f355cf6f9488329096902da774d025dcc64c9def5a6bf21e85fb4849bb75c4545e82fccdd4bfabcedcbdaa25224d1bb311fae712e8d66c7b107a6fe6ad48587273f39e08ba42803bd510f673a098e74b59ef9c37b1d2756a22a2daf782ad7536d9af9e697099179f2a90fad91739ef6c4734a2a6dce675b4637c72c3652c836638bee5381b4cdac283469e9fafb89ddd82d0e3a7929bd4217d0f1d947c4eeacb3a295abde6e32f6c8638cb0c8f9e5868b3cb4682fb77fa791563c4b0ef9a122d85f7e43ff7e78064de706769e07387d3822eb27e3e044f84d6815060e7996454c1306d0876e0347331f65bfec9bd94e7960011e484ca3c0a6570a7ec8cd1460797dddc5e8c54b36128d090137306e66c98494afcf45027d26d38b39c05cc2110ae05198a61cd65f66a08edf006d5e52a2f11450eb71e79a594e25ab87b125e35b0b00bd31cd2b2f9a0a659dda9b3f9e90461ea62f4bc9b4b827586871529633f42e69c83e5ec023471b0be2184278a70bf402140d4b3f38ce0f91e52fc9b9af50eb0b3e1e6a1bd6d86300305c0b9008807b7d2ef7f89eb3056770a6157f06921bc153834447c4b6d862d10d185f1c3f984cde5b81cc9eafe8bf532fc4fae3a89f41e14c52a0214fc1ab0cdcdfa583b8bdf8a42e3d3f857bf287e7e6b0c5f74f65dd22ddcbebd81e1eac022404875d105c0f6d1b8cea09c3bd417d6f5b58a7f319f396cc02834f8e69d65f77496d0eb31ce1a7b7e3248203a38ca22e472b8c3ff635bb9bb91efe2d1dba734af0df2f3d5b2fd267f2a794b84fc9e4a7e6d70a82b5141fd132177a86b4e8fc13ad5624fba14a7bb01dbba85e0c79c360ccb3a967b10f21e11ff53b07c9c24865d15a869a89a21234d7093361841caced5b79ef5b9497606fd540b64cc6d6f6b5ff64da767ef7244ab0f8cc6f21332fb2357252daba3d69b1f47282b226a76598a9fd873beb9a20862e12e9e37e5dca33cd356a61ac719c7be01316c483a43362438d13476a1ba56bc0d0024af5eceaf6954bac8cd5c477124a9ae910486deec76ebc151574ec115ffbb8bc121271208f202d7fc8e0b6981976827011ff64d61c8de2f342969bf2f741555dd56e8b0941f0438a8237c85de6066252461319a7f6239a344b499bd8b6340e8e11748ae3d388362365556a672c7ca2f6291e0cd2c8b25a5e9c087c1111467cc332aef16ea84a6df0cec41d12413bdce2379aaec528ccabe8b14dad6a9ceb0873d5786f0834c963594b0e710dc8e6689cfdf3801d8ad4f7592793b013bdb43a36668b542efd87aef3469ed6a827eeee8ce8c3113a636dc5367b7524caf8149a81523231618707b9256defee8ff2c7c7388483e2ba46f9bdf7096c6beed09ea1cb4527973e55cc1a861d8c09039e039b366da0750baa0b2a116de405fdebb4d89aabb5e623ee373b9bd1fdb6c19e24c2fce0c338ad0104921c156673868de9b765f277be90b4fb94bd17bf8848779de6f29a46be1ce0889e8dac7e45074bcfb6c3b5d781334e6bce807b4bfde6cee17fce06b565e9cd0997dc7f95eb0eb9b96f2a627fce5a2f1a417c691d784ae891e5d59299d0822b0a268f2b47e5eb3c49490084baf693bb7996177dbe97e37921c1afea6e7e849f0cc32c1c0ec64b67f1ccec9923aa6e882c24c805a9cd2ed5138bc36a9dd04f7d73e629ee44fcada13563551c445a4929847624ad6998aba0e9bca68fc276615ae2180f0e94f9609ca6b4c08a9776c1f42512b3d1787ae85106cccfe656c168cbd9c141f9895d22aea839b5708790579c8082ec1e40f4436a0d44b5fad541a424cd8a793b7c98525bcc5aba4abf277867293f33f07d956b406fbcef39c897c21a3fdc0b30e93b8e2885a0358588bcb30881a021d468cebe98a08dd22f9b044100a32e8e967997248966a2cdcd8ec085d51c7e4c56ad00cbc742400548e7478f6c89fa69d8886bb412d1cac97f3bc36f716c0209d3b4fc0150b76c0f1217a22bd266d82353a009bb596980df070a45ee51f2d3e0f80ae0fdc9827a4617b6d494c6cc4041a45af1b8a1a07d651194b860fb437c682039801f9635e350c64f3f68be2cbb5b4713d42a9ff919021b45ab95d1d06415e8ab39f55b444f95ba3b43062cfab1c6b864f19fa8d5dc2c70a78fcb7a1c1370adea7f0d6d3017ab4025affb97d8bc2a84b90a6650e94f4ade34e59058a902ef0c71dfc6507bc4080478a6b7832942dd189a5f3d3c85daf3a0783d72f1e9cb0770cbdcceb9a9dd1283bee7d8737eee7500839082a04e179d63dc07e1da60d4407772e674ed2cdb712a62e3cced4c0788b90f2eb540a47dde94ead57b8690b7308ce19d578f8747aa850f2b136503266ece978a63722b860db03f169e6b1bdc3e2da251f4f53b9a05100e1e2a5f56e3bd9da7441bd945c8c152235bd90c44bbefe63fb4cbd2dc5b37480a3d90409997ebc2d8ec2cda75ae8fd7320599febdeecc2314264a9ccc03b7b96e19e3cd5deb8fca86d334ea5dbfcfcc05b47f96e9ed4970ba370fa79d1becd0b433733a163700114ba9b2ad406517bcf8d8f8895b2fee6bac6779a7c20c6d2a670aed3b5502e33381c03487d046ee0695f3732a842f215075281701dd6daf231110b0358ce7bfade3c7290e7fcdb94567949e1ee78398eb7f09764a41b839572cd54aad305ddbeccc1f0ea5c1721005e82cc7cb07a5ab79547bf5e58164723334d93b26e1cdee7cb54863e227dc78b4923c9eb3670ddfa6800034683f0b1043a38cf02713b06dda39d3a748255559cde034716c8834bbef7c26b046bd046a04f371182248cdc081c431674c4c7549de6cb4ee5aeda2a6a0b36fe8158df90603cf2601acf34e8d1feef222630fd4bf52a22e7402f9f05686c03c4a3944516aac810c4b2b95eb29e104865730e1cc20c6fb1180f95f7611fe2d2c553662960e7ba3a45322b30c3d81bf7e741a54f414a801feb3a260cc8f7354b0a7a15b3f780db17ec826dd2a2e8e7a3b07a3ebc5117241568a92b06c1582c159afeea0d62dbf350c08bc76dd7343cf5c904218b79db223b9644eb0dd5aa91d97dc92d5c2962ca8cc9338129eb26e29539c996e542fe43387df4b0478a552a3ebcc126cbd57c27741063e22d6525a02a08afe5f233e84fb5259fc0df6bc1c0ed5ed01c7fed90d3af9c0433a2cd98405c3ea055d9d4010e59972e64fbfd571a8d6bdd59a3f90897e676fcbdaface988d5e4832fc3adb247cdda8ae4c4ca7d02c7eccf235d814b39c1a435c57d887f413a023fbcd74761c4b8f6998861599c3e43e890c3d50ec181e730959634ecc233369ebe413e29784bc3f44598fa321d97a86707813527d23901210677fb5d1a256fc2e7091fdb5da596db755bb9de66d59f711ca4a255e627b6806faffa65efe08d75a25ba3e67a9ad8b3111ac4e4e1c0cf0fb776461f6515af54b7875a8ba92d39c0d77ef1d135f13184001d43ccf51fe148c03d490db7c994a5c8474357b0d21ba96ebb3324f8744b572cac5f1f09bc7c251f42d3a7440b0c7c8937dc526d97da3b505a8e682ae9cb337c0f3f63875d49acbdcd0a7675a5bfe0e29e4e0346461e7b63a32c2432195c21d88d0d23d6cbefe780251901b05d56d9bbc6c0f3a4a5917390dd35e07acca4282870eee45ece17de519426d05efd796ffcf55ba8f07ed92ac052d12469c94b5054fe0c30872d699819605a6ce84bcfab8e7447ac90979ea8d948267967dafaa145808f8eb9b28c1dbed2dc5cb4100194578bab87eeb889f6c4085f66dcc55924e13d9f875c2329752a32d5282c13b6324081afbf70ab411b6adaa27430530fe0117f62a2d849e7a943c86c59b71e978e31a07dde80376f1fb2051729cc4cc5ddbe8c036795ec6fbff3dbca76bcf74caf132e3a6c8523bb0b83d3e81016782224ceaea85efcd468c220b51607a5677c9ecc7411efe738cce6c78a3aae779fcfbc2b2a7a1073c87bb7b49c7995d936cf6146ba28f10d3e4bb86573388d588873adbb4ba004639250a896d91ba7c02cef026748a7f961fddf8945d607341ffcb700685842c235f88e9caeb423c5c21181881965b7904a3c31624ffbd22b36c343bc18988ad34fc3de9ce474b97747ac30fc435a803c30c5e94a6b29bffb03a5bee9b5549ebe1bbbe7af20630746b7c6a165cd7029887b5eae4a81aaf62bf06ad09026d5a60bffa752dd4ac732b97a277fcb9eecdaf994d0286979c4a04363d922b85360cb436550c62e4ae96559f8977037a019bd19e1e200af3bc0e5cbc6bb5c69244034edb47fecab0811c6ac9ade1cafba3ef76fcb5ede24afe6ec4c80d826ab81bb0b9154fa6c5b6d877d3cc6c32d3ed4a2b383bb0a69d1be7dde4ef9f82687521b75b7ad89ed475f92b391e51048e9d78e17de17b04abd4ecfe25799e307047fa69ce827f61775c77b9031608b17baa94a4b07481629f0482221f1c8606f2bf0a5a8ab2a0893ef8e8b3ba69dfd42b8331e7886b705ac7395bfc3a3ee3907038e5fc1891e8609bd9a07dd78062d71eb5d52c6e4cb447e4d1beeeff5733476943f1e0d096b3920e5d53a9d2d02e54b5c102d5ca8eb9d4586c4f6cd70bf1a64e6ec28b7b379e98171266ba44ff8eb781232f8635a81d6aa277721869b3ab27b027ec7e50fb05dd46874e119665208a115acfc0283f4b854371cb542ff4dc660efdb40c0a6795fc0d3a9e525f877046e6e677e62aaac0becbe9afb28225e1cbeb5edde6fff3ab5edb9acbff08fcfa786244ac9aa57119719c5db3b618ed77e3b5d9ae81aa25c28042265b7a1b2c2b9923f3c2403128b238452c6bd14cb1eb27fedcca5eb184880ad17bc1561eab80139c827d695648279d47043c86a5f9d8033706a5e08e865858f9e992057bd194824c6f22887d45e5fb2243aa58bd4bab2ffeb5c5c999a1aff53c2e421acb54d56fa41856202eb879ec678939d9eb2df0e8a688ae4c7b7d1b5a0888560875abcf36442c8cc2d2f65feb77336f6cc7f735e7deedc41b9c6f1701ffa64251133cfe70acfa3ad312a60462e1d0cf83cc5de687f863ab9994fe2f8781f6ab871c8ecf993f3fe4f3564e140d27ffbed170b87f539378c968cda0b1552ff7d60d0a17df3a8b3c1f862644eb24ca0ec1b84dad8cc5309ba1ebcf0d68f55a386675647e89bf019d4f1e0b211654389c8cbacb938b77404ac9a5118aa2d2a126e132a4197ba142c1f82d6d6902160407546b6300f7c44314a5173dbefb879541bad7517f017bbf48af26c5835ad4bcfddd1cbc7c6e46d977d8d48c00ef9e972777c5e525d7c8e7afe8bccc167d3ab3de6b71307c3b7943e2b94fb4f6db5237369ca0e7944af34c561931b998d5928937a3eb5776fbd642f3db0b21075b7cf5fd8ddad140f7956dd9d53846611086bd880b0daa032bd82719c26958c8ec6943faeff62ab25a29ccb98132db25aa81c14e053a9087581990c2e41ce4a21a91a1ad27555c7eef2ad963c1b3e04d001e35082704b399ecf4f09dd4882d294290af82c8aafefd23132466fb2e0e5dbda66934e4ee7bb17704c6f9082dcad510e0ce1a48598ac3926d2e41b213adce3fd50e52c37a614462c39462f380162be20c7de22ad37858b9a367727b176715030474e0471b0ce95cabe97a1b31c794526e4f68e4cb502305506077ba7b92c8a3cf3d7be452c706b148269d038537b4dea0a32d0a839ab911fe99dff4e2e96f9e9fe8742fb42832fd02ec4a312ceef3d32e298d009ec0914c0873f9bedfa3606fe0d6778db1c8e4bc769b00287b65d7fc7143377b9f6a322ff89f837cb48941745cb7d482ddf1926c1dc36d5e1334d7a714708abff7e0124a597cdbb313e399684ddd39b38b6ad28862f5d04666c4896f723215522acac807a58c80f6704ace984ee715745c7d1b9dd092e785f8ad53b2352855e6ba92ba04675f01bb5c3757a0da45d669c3a0d418f12af1713b47dd1bb793cac229d06ead1954dc863a31dafe7a7a1ae8538e92865f3eacacc13c7c088434f298fb0c6c8e361e8fcb8cb2bf2d9a0451948e9eed62454e77ad0cf3b715255c5bbf908f2a14381c8a0fd6427aaac374f8e2c74a3b497dcad0d690f614ae15aa64caad012dcba9cf59d7b959a3e2813c9f47a0190288534446ddcfbc2b4fcf8fac3e82eafe3105a78d977870b1815ddba357bba3e9bb504b48074bde5186dd7ca08fc4a501d0d65583e3c61029f3b3c2b3874c53476f0f30530787a52dcfaa01d032e4d7df278629db3114c073b62d923e5b04afa1ffea940632f5d926a6cfbfc9cc55fbeca1bfc501f3d70a354515baa2476721900a7cf6d03e28b2c288a8f6ebb0ba79c0dbcd9786c09f45d52d16bc8dd0d64187fb30d92f7da2fa8801e057b48464e9e2324a11d81bd01be9eaab186f8be497f06e90ab9275c6f8fd9ee042b2bbf7b4d751bfd4746a1be4d9ea4d4eb5dd149d7fc126fe97bb373689ac435874cbe572f696995ffa3fc5492bb867d00f58e8ba7c9f6e32bdb2664bb2d664096938a0ace68d5104c8018ea155d1a53cca63c3877d45d0f862ffc6a11f99ccc61e96dbbb2db281637c53ba95fed26ff57592577d0870f9a025f7eacf0663081ee34ad9361282a51c75aaeb9f7d17328a9f78f713849d32da753f453e3dce809475e93b965b9a3660427b9416573c977cb66c34e398373707ef4a6866fc38e09744d675546f45b00f615a369323af094c49009355b9bb50a8e28db6e1e83e82c7beb71918a431ac5a60ab65be58daf269c5ba84e25fa62a4dfd8dc337784bf17661ef893bb0da75d1bef383c06d6cfd55bb1eac21f0842e57aedf2fc022fda753dd0468360b9cb715dad72371d7c194b0a7915b9d12d1c76664d63f148ea03ec06e8a18a02b14ea9752aac71b3e7522db19b725ac4d2b9feabe2773cd01e0024cb4e52d0285cf8ac6a502e154f7e452656fe49ce7f5de2265292780222349ac793eaa17c5a22902344063f497aabb9dc038ce23d8a385d966247ac6ec792997a67a4d5b6216be0b50c332835bbd675f7bf2c84ce6ec9f2f5e3e85da546a2c5e74e6438a8039fae0bc9c132039a65422093c679a9b27a6becde5dd1d227cbe6b6501210778a26c3cc8397a2d89fc1e8ff854307f7deb28f22598e501bf374c38f7596a64e3e69e7a1429dc3df53522f3ba08977e07bd825405f6324a831072518c6d84253a6cee1320fbbdc3d3d80df7ce981118b1056f6edf5c494a269ebd4fc4ac02cae4abe7b26f1d9341de6b4bf6c6a131c212593cad22599e731248898e10937ab88b2a27b26f1df14a5d45498b12a28e2c942f76896f6ca667ce84639700c23080967e0aad916b5c4fd91ca32f331a6a9acf0ea9ae2713f59ac408d7e505a6e8c58f0e2d0e868448c4ea57c55db8877baf1b6d4265e9ce008e8b1c53029fbfe7c9ed50eb5faef72b4c096d4c91036815dc11d1dd5b18196ba59c55617a5f8bd23029fce20b8b428837aee38553b43aed944ac2d6f842847b82703a8fb6a5891c8add589dbc9be4f42a53412c304b8e478a1eb6dbc7e97dc4b79f323a4202364b2c6ffa6acd715cd3a68f1c9d9129c0d800162438448d83eb9771e30da70621d2a76a58f5c87c28cb0ecacc5600ef7103a8b9a188e89f3534a4b0b3564021ca478e550abb383cc72ef58ed6e1f9fd1d5ee681a55a3eaee05481a429c0b7d59e1e43a876278733b693ed53d2ce06e3344e4bf6a608b13d33bf90f4ccb978921bcb69ed31c75fe1858e48b22676923244563b913a30eabaadda74fb02cd0cf7d1d3538bb4170cd6a262aa126878365adc0b47e9c84f35b79d29805f6257df774ecaa31c739328839bd5840d1f4f6dcd59d20358d6d04ca4a041457a72068a90f115db07f6d83d68d04b68faa168a31a4c4ed076fc507a0245a656d4a84578c557496de6c432a5f6fe38bb73956070c221d631bc8f4c58710bcd27067b913484efd9de21524f1cce64221df061a34145891cc9a236206251412a288872764860295b9e502799ec5fb09be309acbdaf24d066eab057792223b441edc313611ee7a22340fbca8faf1b520abd27cd2c14e09659377f89b30278a3b8e95ed4ee427bd8d5487ca1bcdf91c7030ec3495b1ce959781258336aadc0bdd3ada43d7a3dad3bf6276b438df8438df94a64b7e721df88380de2fb0c6e8c51369d4bc3917aec59fa5030369f73b1256212948f4cbe13a10daca82714df4c0c664abdfdc084c9a1467573e15dfc6b1be1d9db35e86c36428d51006e106a705dc748634283e5b5a08ee99eda35dcc1dfdd12a1526696a7db2bbd94368bbaa9b3fdf8d448680840d6284f2997d3af55ffd85f6f4b33d7f8d95d24cc06f32a48ad5edea965c976fbc0a6f8ac90a3deb7ea4812cdb6dc9a99dbb6392055c343edb88e8c2b3134cc36fe7f78805b2305382dc0cf24fbcd791b30bb5d29a998920953e1640211465282ce36615d5ddd9d8748c6f70da082ddeda6d1235088cf9f1c0e1c1896ac6aa48fde50258c2f302205b9cf3d003b9943917c9c0e3d69f4c5965582fc81590e5c8e9d6157a535c71d33ff3dd375237d44a740708038c3949028a8ba823abdcdc53f89ce5a21181ef9a287b78cf50ebb5b8f81032bdb2c1ba913a6276c2b311588f3320bbf982c8431d1f1b0bc0843bff2cabca863bd1a165b17ac5e0ceb5962124a14adea7309a37032bbbdd327790794d961e4ca270401208549c2d6f3ad5ffbb4b0398d3a36091f45543374caf53edc4c0f4cb1d18068b3ecfcfa6ccc935bafc37312fa561801a9aa49c6136b6ea213832354cd1505b97fcf346930eea1e198e6fbdec46f4649a9a20aca31914bfdd52f2c717e9a0a7fdeac9ea3c5c25f8e61afb9017dee472d99fd15c451d4f38ebba0a94748b905286af58a1e8df032ce747e191f894b7149e4fc0958e69f1bf12178183abe0a9c4faf3a954e0bf0b20e5be2ba7d691f7b1b252f43dc82682bb1911607b030f72662160c2ec6d23c63da726e1bcfbfd2bb0de51753d397b8894c951ae66c540749ec29cad4fd533baebf72809b7adffdc7be8f44c7e29918db1ea7f732b3a9d35d5a74f7267601971939b6cad7f35bf917998e280e7e28f187c4443b8b2a74b3f749622171a58fa739b5c99d4fedb66d212b8c4195fab9eb25c9e4384e357751ae158bca6520301466d0257871be61c28ae0e4120d0cbe6e1b9c12adfa691414c86b5c726f6ab53746f5550cdbea00819b564029c218b8e30fc769ed1e39cd75fca74e8a0ee961b850b1d29aecf4f532f8f80ae953a33bf248b83476382c160db145fc91b220c7fffa8218d32373c24f2a52aee13030ba047cfb0cf9c6b480446ce3c129f7a57a76cad2a2262dcafa4e95d2c6a1f645a5a2030c7db858679ea2a5fd46b35debebc5384009045a7effb9c204dc9c0456a1437178e1624bc9b3b0e2fef7ae33688e63d946b80e3804650935754b4ff8e81f715eacf2583f3f81e7ba655eab36afe4cb145339a4550facb57680ad2e227e82b411250b3aa14d6bcf82ccd61ad62681737ff1f8572fd54966fbd37cc74f8e7d743f8da669f087e3d0d292087d8060e6e572af8ea72719cd663bca349bae9c523a40334e66cb538c8420516063c3f377a9a2e86704e921ab6bccf15f2bee3cc38eb9a28dc19054c8520287783e1f32c63877491c00d4a165c015d566f87cc423ea0277cf0acdf019d2efa0ba9d00b3650a762e181b780d7f0bace2f671d8e705c4c11f9c92f2aa038f4e49a1d10709b6980613d5c551ca69b6f896582890f9ebb76c06710a9d0717dfb4ceb8aa908a3d89cda6ff9ee05cb84a9f8c369d2391483a69c8e6c23b8bc95ca9bc796a4bd98c283333dff8a258ed5ef8210c400f219db640d3586a4cac9a8ea3af6e90876c052bbd67017316336b3ca8f133a1c24f6eb397b260534eedfdde18f402cdd1b65adce29d0e8eca70d48c18795742cb6f4dcac4e2792db0c485c39046d072b93cdfe4496241bc2d959bc5cd35e1a3b9059d646ee01d5a20c4a4e79004421fbc8406ba3833657bce2633723d936d34e9a6d008dc37c7590d62edb2aeb8e2354a1081c755acc45e1a873e09f02e5476fbc7a830b365f1bae533c2ad32c13b43f066c3a4182af8c3914d1df57b6321fa5dec68748ad746e0369bb64fc2d9b7dc3dfb3ed9063a7d5cc0ec45dd35ee703f9e89a33cb9181179701f5b02e55ee26e814265ce9657bc8a37f95829c60ca9a71c23eaf1c4b4fbd72043037ef0cd356b68e0db0d4f0f50cc54d8d753926a48d1854fa24c341a6099d58b520caba14b53633b010d96cdb4a3a62f25f32163c83f38716ba48dd4da31fe7cc9444c777ec6fec56a58141f6290ba40c67109a5c250c41d99834860e320097bcbbe79cc5a369a2489753d70e523ffd25b65a19ca1b6a6b8de70fa3af5e4852cfbc3a9fc5812d3bcf0dd897eb6cde54837398fb4f0c15ee78ce5f9ef9d100ff4bc0c539412fc2a1312f96e75420f1906fc753a7b3a116b0e276aedeb430308679ee11d2ff5530bab626173012167e9b31da1187be81749b150683cba826decfa16fa5d3c99a8070a81ae3dbeef5905c11d35d023854379658a767cd9c5914c10b6a09a265a6b9a94d32804ead662cbb57dabc80e8c46888f281e14c5a71d946fe08c6a99b22e34fef9778f31a105ca04a19b86997770d5b2cbb79b0a8173645c471634f35b60749d4715331fc9c27f333b5d8260d1531f64e7eb7614ff331a7a3cc68fbf9092c7f44e7976f1ab1969c5ad9a41d1247d941a0f124c817acd552e4415e17b1c45ad98921ce173df8af8407aba5b76eb50f24693d474bc7ea272fcefacc0a238e993fea487f902d187c918253625ce806da87f389a85329573126ab1c3a3c1810f299ae843342b2ba05ac12fa64754ae2435284fed0490399fa20c1d2301557f26ccf1efc7195948651be01c831685af3506d65c446931e588a035a4237fdaadb10c982d9c1f19a2368ad95e4539fe1de0bc0de02929b423deab9bc94d65cd773e5702242abbe8e3a526317775280a64e7c3436e03dc736ef21282ff1969aa763f3aa4560b864367217c6cea8b47573e9aaafb787ce81c417373afd81fe1fe2534260345b6f4b5a74c0c004a003e50e579d1aa71fcd30b25d35d56c6b965350eadb7b385a59dbc4e85538ff86c63840415d5e4fcfc33bc96822e3c6d8e69fb8d1c5e19785fc7d3b74dc15098386d5d14ff361f7c0370cd1e1064b51ef7769e4b0087c9905e29786c35f4168bfca268928660de71ab10a926fe9f556d9d01a9a2ead32880293936e7be5a364611a923075be496604b99dd4bbd4c91cbd791ba3f3baedaaa396d7bb4577234792fe818ddd03fcbda6d82d5e6dceafedc4fbd3c7a83a94491172cd35c81ca95779ff5b69093e1035299522f92ce08f0f15dda9cdf532 +MD = 00732e9275584e2bcf09fb67cbd67841750ec94a2fc74a850bab2053958c9639 + +Len = 69040 +Msg = 00402a19316ca3f411bb2f2a23ae1676820adcd87fe60a458c02329e595a2ddf3cfba799d616dea2f453a60ab367b152e8e90dd9be61ee97a1a3ae0d5b5b127c7de8cf56016e4cf22d26aa83bbf9024b364eed0ca7204ac071533b897a4871eb8bafaa39fa9c774d86dd437c828c91ca36e085598248a628c4bbe2fafc49d3932ef7402a08c9e71cc52079de5146e735ae48dca996048a376282aa462a88bedc2e689a12741d22c5b396558f70528bf5672dfae22c7a7f5512519c564c2abd2e52abbfd787bfb2b218e8de7827d605732938e8ee8cd20cea9dd0be12aa5a55f16368b76386d81f49bcbe1d81befbde16bb11adb3fe35ba5ecca61a628b3e108d2a468b9cbc8feff466be18937ce89d45e75f511bcacb1019657cb82f39fe756b6cee426c700dac1ae093d994aac6ca6a73cadd0d37bb968330f99e5ffac30cf1f408e4bae979dd22f0e3686e90bcedec28fc58708e2ed404f7c6d6dc17b55e88893b7a6d70fc0b765f57cb0776f38f33ce9aca2e184b5305808a688cd8fbf298f22f0a6f4dbebd7df4960c49a49237a72d4f3c2e1a3b9aec94ee5a5984be508af88d9fa7c8e67b9f7949331a61c26eb00cc0b458df253123fb9ab62a652501c463fd3efd299dce44b4174664f7abbbb635983d94ae32a1107d3584e6c1598cb0fb26f159b70a3cd46fa94f0eac74a6216e7ddccace89711de267ca77e18179b587b1bfa3bb564fb770a65500c946b75980189be2885429b1f1da92c40dc6513ad145b1c37da88f5680b76122954877c6331081c424b852337333e3b58c509ba99f8bcda24529831766847a5c5aa36dd04e0d9659eadf730d311dc632a846df69ba2b1d265b00b363ecb4a8965e7e22e09bb9e38721f114a6f03e4123a7d0a6e2eacca9380657a7a3d8eff3b8eb021c5ce0b96f371315bd667b3e5f70d218767cf61677c19053e83df3df64aa4756e5aee6b843520674f7b599c625027143da9fa8b392a73f1efd9b052a0254baa4053c755c65be433649fb117e9dbfcc7c57b3c648ffd45ce06e23d678d69e8e110270554ddf6512823ca0ac0dce902ae977201980c72e2ec0c43f2d72e67109c766b14d34b92dba80570c321cc05dd5b2c14e6900f39fffe78656d3bf3cb375eeb86626b9f900855a22a86b527c0f1300bda67e738b0e157d3ccf9108e04e18ad81f9a883a9c5b93525da1e58098c2dfbf48e1f7f9562baa96e142df5d8283b2d48d19b3bd0649f3ce90b15d56fbe6bcaed6f16cc1b853393a58c6f2d2e2b25969556c78877c47f94f5a41672b78c149630b22903245ecb64689f2159ea3e200ff1f0f413a5cfa168d10bead7e8dd728646bd21ccb9d5c94440b50920124872c0e207e984626c4cde06aa59ab0a9bcbc3b6fac5cee1d2745ab436f12bb03364d2f2036f82b683ca1e1be82a9626ad687408cfdfb2a43d16cf4c8a9f22cbe63e6da94c4eb5aafd6151982c274242fb91c2c5a6351f0afef5ca901adbab6c4948b88e4a4ec645c05a9f06e01654696d8dd574e691be1cfe5974094c6f719a44cadc2966365d90b5fd2feb6bc077a0eba6d49df7b937e1238cf53e89211a5dbf0b010206d02191c4912ad235ed51f15d22e7c94175316156d574b73abb4fbda2544da294e2bb52d660b740a6648a63ab4a387e2c8f55a5807b19fdc503b7c3d5edeb907635d2dbd1b0ffbf26efcbfebd66ec4720cd4ab487c70e9794c2fb76401e015416910f329fca2ad61d54bccb7bbe2ea985f9b8975501780d0dbfc2dfcc2fb877dabe1a6126f65f0ef35c04d1ce99242ec3d94954d07182e89ac4b5045f6737802c839a70507bc6ed10cf4b199c41f65d4236a3f5e25e51afa2977cefe20fa7f773a9386503a388fddc753ba9cffccdbe6ad76e81721210ea8d01bea83e6f2f6416f99b4a29b4cdc6c0167a8b4d13d1daa486530167d3e522c2ca233559cff8507f386b26a9f7bccf2279b0c700ce29385609f97cabeaf8ddabba55a01d772943153152026bb47ea06b678663ce74fe61ea290afa259f72a6af99f9f171aeebc340abf6e557333ac104a8a369a14f77dbc6ae2b84bd397b02362eba2e3cbe665a686dffd755bb19bb5304b1e060a5bd30546006205b023a7ba8423d6168edc18ff54016e14d954314c24355d1f3bff7e7fa0743d9e740d8986e9d2d91dc8425ea4fece309270adf57b82c394341e54e89226a8ab4493c7de1ee0730c780cab9f4df390d59cb6016099d88053e345eea9d335281bb6a3e4fdf9148ee0a3c09a6340bef3dd921df0fb4d81f61cbb374f2ab9587d3f5308d7919bf271162f88713333cd51a9012d1f3dfd3b9f3f0a76d8e3cafd1266a84732118e16e3ed79c8e2977dbb44d86847ce913f51e66b7f692e8d7ebf823234f3670625de31f7210640f8a4e547dc3602a1ad7a6156028892b2504b0c37127771f8d819d4f5c3a3c51eef4ff7d53508f21adb34e68894a4880704b67fbb87ee676a0fd07799d38099fee3b54f77634f8a9cb2f55dd8b251bd8ef357668a2318283d35c052b89725d9436e9b7899077820c9cd4243d0bc1eb7dca4946d2d547358d4c28fe2bc8f2227aef858ffd462217904729214fb4279eb52a0f3f01f9c8e5de33e85a4203c03e9740984419423b9e7ff5b7b5dd2b5e1ec93710c9bdb7bd7cbcb1258038e2e29b3452a93ea62ccdfe1fcd0448ad1b6e510118d34dcdb72de170ee66dad50c621f984d40e46babdd21b9f89a43892a6021a4f6e131faa020fc421133cfe12a47b40d58e6a0326875ee949d010c37003b75fcf8c0df0c1a9eb5794214c723e39a41d99b21d9c10b9c4dfae5bf0d7f4607344f47fabdcbcfb0f45fab922a64e062ad453f7cf8e13b5b2631f85ead2ba4cc48e60a1735fe645da13a7134616cc8a7e2996c7c635aa0b96182fd665301c19398096a9dae6f84aea453bf83d2034472c71d49ab83f4e3bee7351c5d69cb46630cff8f1690e4d5a9e5f2bb06e6f1fcca4419ff90c077ac729e927fcd564fda458c12a0094226ff584d5f8d4505fd97b741d4b5b383aaa2de6fe14b3d825626400088c5ff2efdabc3c2e15ec898f1be41a697949d32566e094269ab3655a7d25c50aa287fbb3081f12dc15618059318715baac4d53743b8fb0073c53f370c85a165c0ee11518928ea77489cbcb6ac4e4e49556ce3f83927bd8f47c1e0904be7182512423d58ce49b686bb593c110307e056e0b550df006356d92dc8a1c82da1c879e74a8c38c88b5e4465b4218062ec306b92c6a3525f15cec56d020b477a5bba49892e855a3f97e9988dd6f16a8fa44571b4c864bb20e52e3a4e96a575fabcf47e3e17b124fb145f697ae6373753d8284e8ee21c81097a7d2219acf7bb746d80fe4f2d96ffc3abc8a1750d784e7630dfec683d520ce37dc364176e8a7fb21666b30497be5460042d27c6733e19c05374318a008ec4759508e88d02e52a7a5eac84a47eb1899bc695e3b53f10fff9eaee073b545811896b5596c690912595ed5c587909f5083a9909bd8a9a7768e89c5655c561395be5a6b156094114d7cb6c7d19c96114370527909d8cabfabc5612b3036e4eb80a52ef25109d3cf8a7e38318aeddad9680c615326b049b21640bf40df87f445e8698eeb8accbaac4ffa7d934fffd16014a430ef70f3a9174c6cfe96d1e3f6ab1377f4a7212dbb30146dd17d9f470c4dffc45b8e87176b67c4b6a99da5cf8e93b86cfac5b2a157e36e34ee40f7580deb70094bb0c7a0031c05ba3ad5c9af0e884d94fbb7cddc034eb40c2e9df6a738c12bdf8c06c101f2bc85f43cdfbc071901299c820dc1126fca9c401ce50bb92f8779b396f0e1c1dcc1dbd13a0c0b7c1086f2f038283af8dfff6d7d23a6b5025476e021e6ffc87403b46dfd8cfb26528792301c58a7aa03e655de1fed5371174a47f5a71693e37d1a1cb2b5d01d9b3f00bb479d9e0c8ca8155634a4e48bce7c635330bf804da161725350b69df3e895fe5acfe062b75179ef7927b873b02b86522117d7ce9da0b5cf00be6c311e8d0bf3093f713138a6edc7471da7455126e9794a219c4bf45fde629d524343edf6e5613efcec9420eb684f488d0dc3ff3efa5b36c459a2f24d6fff91c2c840e2c4d6db74aeaf05d09d9de9e60c686a1ad25d7a6f96ac4e17e7ded8866687b2bd6534b442bb3500f84be329b80223b2149f67496d1f10b7c5bdaf8fd3e3fe03ae56a3ae11b91b0fd854dc813704dc36ace4cc6aa7a4037a9c4d56a8129197de6627980b6a1ecd9d2176ee72db9b0e622440e130b7ec1100fbf56893bb15e18d4546866ec452c94343f09d911e2b26cf2b324a4e065db5d5757459f545d777aafc31f34ab8fb9a7cc0706e4e873ba1c812475c152b5f5e828918af2f3b5ca6b1db885321a08fcda41764d51daf532bf789eebb189f879772b770dca4142c0b3c63984a862375bf73b94c7680eef811d7e2a6dbeacb5ced30710b771668bc219545103ddaaa43fc4646a5a70ade90ffe3ccfe42ee3755cc465646e2e891936666c05eb1a1bd8110b61ffefb3de6b442a5995364a58bf8b12ed7c1b48d2728562b85f22a7dd5a3792dd5c6f77cafe88687e844c5a301bc384465fa7086a2018d5e06691cc17b21b227e87c0059829438253a50ea696116ce31915f8b679ab56878c2220d1f2692382ec8acca57175dd3e7fff6475b02aeef70da7f89a2699a640639cb8fd9506b97cd06d799e7d69be65ab9a3711a6edb188cb1c8dfb9a7472c70ddb3f99281144d6d236b13ae38d4ebf7e7f6dc0a1e31e5efa7ca123fdc321e533e79fedd5132c5999ef5bbfcc69f613a1b5f0cbc9929b4043d01b58760f1b627dc9be41c293d8cdce9f5f765f861c2bbb44a67a458491f84e1fe3e32ddfc706928886dd1719b2fa184fa5a7c56b2acd753579143e41694cc271e10c4bbb8f981b2cdd08fd2d21a72006149a25a086c2778f50e3db4f890548cefd1af82bdae2bfbead0c9c588d9e8ecc9696a8ae9ad1685a122d45385beb873f1f575bb811aa2745dd2f1b215ea509a912e5761cccc4f19fa93ba38445c528cb2f099de99ab9fac955baa211fd8539a671cdb6728662b965fc551eb9b15dd27b1579e547ded7e153fdf55baed006c7ca999791392f7269b4f3c2de6106792e56b9ef5c5945cb84e9bd276c8340ef5b1e738a2ef82ebda89476cc0a03ace2e36403b22aa7385f8a967d99fd15b60a9ca8e7f0b637ed0b1f0e6db9ca280b609aaddc0c76b91d599c5f259437ee981d3372de0f507ed3237529c0d248578bbafb3a2a4368185d82614e9d5e41954ff1c7843e31255648cf53ee585fa91894baad12d7a02a4b61a2826acd3f4492444e01e4f19c5c46b4d561631ba818f38e26593dc96be1da9081a6bb9d81686edefb899cdd981ed780fe4692f2f4bb71e1c7a6c4eaecb84e51e6764af66bd4b084c206b4ec6f938f1212ab83c58dba19f5653dae206bd52d0e9b991ebe44b1e0a06921320567e2f9d3d9373d7db93e7432c8c503552f60022e66b83fdf55268699b981200fca349a2b1b93c800c16f0801b7e7cb7081825219107bb63fe65c2bd77ace85f4deb0fc839f662c38ed7460c8fb4b0f59a962a73661898ac83e7b56c274b26a9bec7fa6412e59710c847601f05c98d7f8ef2a88ef208bc360a7aa90c26ed3d6ec3bc820cf9014a063d09c75e2a27729359aff7eab17286af16711603f32d9d1cf15b4f3938d3ec127170f4305958f0ff8f40b10d30c098662c7d94ea1866d642cc06ba6f7ec7fda3fa2f6f3c0fd8990294376c6cdc8d61f9b0f2ae250333795eb8514c1617781f593b97a0d7da10cb4b0d068280213363e84872ba5b401de6ef4acd7cc3bf4e9190ba3c31aa34ac18475e308bfdab4d1e90577051e35b70bf72f7ddd50ec2c624f8faaf8a29ac04f0760c47e12be75502b0626dfd63c1f653785404ed5dce7929e0714412bc9cb60465abaf3a9141c5b096fdde2532fff9536dc3c52e173ed210e5b2ac73f9a339947490e8f0d4572998d28e4361f782042fc1eba0ffe1905b8a77334b26574bfa414170979c5ba3fb3be198302c27d4a15923102b0b336f9ff72377a2a26bf3929b5aaf0da59da4b50a42b026ec2a844b5ffff5c5b88328f9d7690435608e467cf30ec0ed9520c5d194844a8a4a960d8cc4b6e10390675903bbb64d95e9549113f8fc3aa9f37ba3fb6b14dbec9fe0cccff7f686571b467c3804a9d826b55570121da190b53904bb7cee72f8c084a16e9f8a1d4a42b1b71f2152a2187a5cf76fe1c17d57a1ee6278e09f3d05a8714e5f75fbc991691c1f9e3a163da30338b0fcfd850df3f28bfb68c11dc1a706ee4e1bedbd5a100c830695fcdfeaec43d11883dfe8c1fa298a65f788baaf415e642720515f6d3adfbf0272e4102878dedea4b1036d47deb96208d1b2266459317b70096b526176450879d18a4774cd1699dbe10272fe1614cb7a53e7c17f73028caf337626e556cef7f31e59e66e5d9d9b24b047aa5334de0f210a741c5f1354104b3b1c4d4750e01604d5cd9d639ed66b159b6d63e5bf77a59361f1a781bea8ceca8cc84636092aeb05847facf325438234fece40341a743757f6daf395d962e0a3b4f4a20fc401df9ba6cac59b7587690976f4cfbcda562cd545ba70f9f8252e6d204bd15325f77c2da93957db13f487e9807b52ee83800ea1bafaa03c9f71e09d7b18649eb39e39422865d420652d777ba7bc7a578aa45523e32621cc33bbafab01f4dc40d148af6f90cadb19fd94b0265952b676641588f23ac746275964f41c716b98f81399470c7ec2dd0641ccca8011b897c9b46622934e58bddc8520567825e72b130f0288af5ef84a93d6280eff6d688edfe008aa6d7a44d96a2b603f34bbe213201816ecde9dd5a4413f59262ad8ed1c176b9f99076b36294ed09726d89ff6e1bdb338fc00c7e59a7cc1b28868c0b0c00edb7d66e78d873df8f94795da3e90073a84fb3ecc69927dc521d6be5fc14e0b34a444ac945dc2880729f414c034480424f1d01d780f86ceb8b4382066673f5e175a67d284586287e7c71f2c210d89590b8e5a20ba061d1da61d4957130eef49255259613e0a01ce19754b345326de866cbefbe10909dfdb3bb1aceafc44e85ced40bbe127ef0abb2aa8eac5fd1ca20cb70827c6cb6749a7e805b5347885a4f9ed99e1cae87407ef89c68069755b8e6c88fe804a97cad4d419ae04cc1e6dcfb094d28d96e63563cbb572ae97527ffe26410677f4e4912c006f0f1e2a6459a301816ef1cdb7afa8e03c21c7c82ad67bba7db4815e484699bd46ad53c7c0c5e97d21d3c0e7b34f61cd9c586e84550b81a99d8d3edf2977b85b4f0d684cea5eed83f4a56d6d9fa118d4448af544778b9a643f04f3000e91027ac6a3adf2177129a6786879e7a32128a4d33e0e90e8e3308ac09060597e2f029c7c04a77ffea948553b7158be846c2bafb6e61cf24f8eee7dc0c3e953eeae2320adb4e74ef663b420ac649c7aa9ce9c656e27a2d1120b2ecdce240077d69afea7fa18efe7a53ce79949c6b7a489e4f556675732b5b6c47bfb3715484dcc71ffb2dfb513b261916d1fa1fc3cb4ab2bb10341093f38c46740769a3c134e46cfa0a1cd1e1567e20dbf3433998e33942f69ec79c23aa2b15026c075fd13e1cc108c2550c847507d1e48777d134ea9db5c9a927ff6b7bc141ba98948ccacb0c2c11c8df9283c14b92fb349fcfdd07fc73f9d65d23b38cd53261301814f5023d16dcc7c24d2661d1cce6a2c11adc62e0e451cf70ee4305ef4fc2df9cde9a0c36e832650724b47d21e86e7ae89c7924d070983c684a620f9802a44b26d201107f08db4ab5fe773fc44c5b64193cfb75557f95c44e1e5ad256b3ce1cc1d87137a1e09f1fd4c5b5cd416275075ee2ac7cf679111029527175b4c809fb72d834a923d6468c6d60b74f2091840cbe76d2623bc6d4c801cdf02037aa1d9043ba908d8d54973886b7c5eeea404f1a42e1b64eaccea693de791ffd69c1d2823b66ce0b68c15bcc2ab226d126d99fdaf009a069d2f94f19c93d4531d175f07962c5354d3b855aef5e3924225cc33cf4d2d7d7db34b09603c901abe7f72f3e1fc1bd0f788e085c4a2c3405061466ee0ff033a5cb5a5945f9e7ad9a45645585195f37a2b7eab129859b8b12a7d72a7dd350065061cd5e22a22a2a58739f518d12451c3830d5ea8847b326932d2c77b0eafc3621c71425f6a79a5e2d9a30891eb07952170bd91b43387dedd0c09cb550f9fcad6022b71888af3f3263e2a067009b05c387717eaa200100c91086ae4c25ab5651559d3f9da263228e41727651fa7cf055d28a4b00e84a45a09daaeaa4f7a5140c485d331e0a6b4a5b0e733ab1d6fb43f23f7dc88562ba525cbd52d8258e923ec5808d1b02896ebf7f130c75ee5abf058115737da158fa31e3b9a70138b218da64465380b1e7158ae49866ae704f713eea9d93f3bd90b2ea1fd9d0ec432adff2d0e2d7e893ec07b270e4a86d9f7cb8f7151f06b13fd48983f664f521b0bf908df39c42de1060ec3f0d41fb3ae3ab3d37eae2f33f91ea270652a44029e539d3b4b4bbbce7900a6e3aa2f5879ea4a2a80651308326199a357a1adfd78b4c604f6efb896c8d7bb333aa174973204a2aa06c324fdded41ae5be8365ee2cf4bfbadc3b04c7b573923e3975485e8493d0bcd7275882b1c70ec40578d698a7e4cd494bbbc4d11cd3222270940f10d9fe50dd81f0223923c0d1e8dcf0947f61fb6b1ad5f05d45478ce78a709c5d50bacabf8697cc1683cd4820ae9599142503af15ba0b674296fdf76ec0a9eca7809f8f593278f9a9f516c3679fdfb0ea0bd57659a14c8f193888b9048f8d1382330092ca7bb62760ff88c913271bf66aa67ff7a35b29e655bc80286521ba9f51ea869b9fcccfd3b015abdfbffecad82a876b998f6213fb6ca56cebed3182eeab198a0025a0366d3bd9f86dca616cc4ae2120e27a309b3ce265b76a2929a68ff242834718908a7248bee709cf09824a69f61858f05140393b7fe83985947601dbe82af6d5082c818b36f02a3a51abd7f298ea638e4e836efc7687c0aeec71d2ac8cb995d791acf967c4cc45a8d43a0bbc6bff98a082d54c99cc0e95f1ac3a70f8a2e78abca77c68530aa3e276fbcd444bf1d07ee388c66087f2f53ffa5e307b54cd1d6be0c42b4cf15b4f973152c61005ccf57ca3eac7396b8dd415257ce440356dc3afe0622a25b738f7ca7453c50d9e4fd7187e037835a8ff13bc0f82d66e0ef782dd382c0971194664f29c894a8b6a1d1de8ee7d29f3c4c93c9b14fa7763661cd36a546c39bd9bf5ffb6366db717ed97125461a27cd2436ed748d25e57aecf202dddc1cd4b69b3ba207bbe6bab31bd505ce1643de17fa9624c3bc428e7deaeb3faae0ca9bf13f5158fb9b12d87774ddb66268289f85a6b4633fa66e4b841894ae261a18bf53ad49a9606ab0dec47138ab68a393111e11d8d06eb371c4995e3474d8f0d0e9e5ce6bbcbc908973a3fa300e682e4adcea214a93da4c12a0c3a414bc48cbb8c0ae88feba9a7565401bf70b04ea7315a9f1bf51d50bd71a880bd27dacff149aedb6c44cca7f810cec345012b777d9be203cd437be88be522377d0b56c84313c17056b9b15f51c4520f6ee8d4f96c80be8d2464275d9677f1a128604255f8c66e7a46334c383aed9846ab7c4f3d0a8c6aabbffbb23863c6c14e1dcb4ff198be2049a965ffbb29f91bf9794feccace2b50d00e5eaef17a3e0baeebb0c2139987718efea64e50857337a866d8502b2dca1baa8e216021506a2b4400953b4471aecc8ab498aaa0f3e875c3d2b9fbc6aff5158bbdd888308cc7ba9dfb0d2dfcc790abed79a1a724fbc570ec6b495225db38f9042bd899b765d3341d496d1cb4f1c99a27bc55c644f3a693729f2af5e1261210a436c5f72e921922526a5979f586d611b9db198a9971e86806ccc3495116fd06dc9d1522fe88060fdddc36e846fd329d247481668afd2769199296ef2e3476461d9d4acfbfce2647002da9ca21db6bb6f80711dca20bc0111b7f3a39a0f4fa5907d5db3fdabaf67279bd16a20e97edd995114f7f77046efa9cf111cb81df15b9fbc54b15e804f31cab39020275c9458f8c01aea162ad70700e86b217296944d399fa1ec45002a8a004fff06defc5ef335d8693f50d3d612bf0ae9f9f0019f44042c2daddbb5a83a717906646e544578f89eea3eccf5add98d3d73ee5be67c08a86dde3b47263208c6388d81fee9b2ade81c852eb317c321138af146dbcd9261ce6a9de0b2db2ebda7957ca6b7450b5cae5923592cc280b5f8f84b4a973f49171e2a53e2445d0621bb96bb1bc1efb94bf25daa05607d4c5ce5906942b8c309f13fb5e68a243320fcab463228436f25435b31047b76d08fdd8259337665e23ab8da1340207be5e6161eaaca15654eb60b91dc17039743b101765b922dc7234434964d47ec70fcbe37bdcc69295113d36d3d66cde4eb5f1a906a9e6cb1060e902d1c69e5352cff122630b3f8ad2c46e62f07d80c6899ab3352052bab48492b846b13720145d77649ac1e6760e9216f561a9639bed5cab0620ef009353bb80389b5246d826298e9cb9130f1872555178bf69391ca74a5f4108ed240f4d27d1d08d5f76452d597e1009d0d5857a9f3c5ed8ba5e8188d5301a69854d9ce54bd016791335e58e6fde650975da4b7bc2102e4a075479068fb5f8af51edbad0ba33810b280647cdcf27e2349cadd8ea80755d8ffaab51a4cc694266dd74e783d54496900887da6019d33e179fa0cc6b3cf46316eed3b9e83dc2ae1c7273a1733fbbcdc42f0b1be9b278cf2f0953946269e5d57b6e6e0045364a922cdb8a87135be1acf426308acf3b711be76446af6499f23b29f3cac3405869753452f9f708ac5eaacc6878b5851764baed3afa9be63f71faaf098a716e06c7edbf83728fb7c39b4da970441abfc8cc128ce7dfd86bed1daa873a1da932e3be522ae764afa514201c17d83338b3e20fb9530566f36a053da12ee004c91351e55902e940d56520757c93fac67e15d5a825ec1e405b652a5a9522a5c05f93f3b558d423a79f5c7b1415aa726e796a263dde949ccc9ee1cf0cfceef5e0eb492ba6d81b01097c0f86744dc7b9abb90556394a090b9c3c7455cd2f004ae6ea976c425d441bd6e9f2c52eab784afe9b9be8130ea5d51fa2717103c1f33f32dbf358106eebdea067bad9aba538a0e7bf825e6382e7a3c76f8d83594c242d554e016189737ec3e683ac1663c19555e7834d1ba34d6ad233f20d1f26343fafeeaf360b1601896629bc6b1def96fac48e9570b24ad49bfae5e894a7030092313f7df5c76eaf782fda705c52c78be5874d5481b4c2aef7884da198ad6837c85bf848e528dbc3d79b895e14475416f228944ef495b33309f4ebbbadb4de404e7a897e7891e5f53433b6c4178e4dde8cf303f34dd795074feb3095383fddc0913763bd24b52599fa82d340ca79ed3932a10ccff1ecd0a235b5ccdcbcb0df2f3cfd27537de50348b7036f62c1aceabd7fad2f6385580e8a57ff00f0cfba6af2ae4644ffe8b41777e62ffb988199aee1b061dc2c7cab973623218d5fd5bef9a161ad3d0109a4dabe047308508eb2a23c9179a3a94c5a131c33b7c298633113b2038c70053539b5718e7716294daa7d248f5f065888e60ac2e64c3128fca331aae08eae8b0fe5403900a6859142c39840068c84b896c1d6c0c73969900697ec02a50e18f0fe29f38af78c071702a07bf5938caf580a901f7c6319cc4c1581ab4fad957fe5948a57cddf81fb3901c3a0ebb2c9d6a568b33d7c2667e9dbbdf2e7e886bf23b74788e5a82542e255d4af9f68e0eeab2f15bdb946adae32cd446e2a73ace5a504aba8157065294d1bdfb6d013aa458d63b6023b425547478f5d45fb67ac93844c256a6fdd2bbf9bf9979beb627b790dd1be431c15a9ed98907d2cd33af253420c39326d34c5607f6da0a139dbd0e39cf782d2d43737eb967f08854a640aaf5eb37bb2961dded647e66f7943f6573fcb53c8440c0d7bdbc1b9a3e1a98972024ad0514d630ed46b85f27886b2385ac81964e3192c2ee238baceb3c4a911b4f686f15e756c7e52baca10404bdd287826f7a967c4ad02077ce22cdc90a1734ff6a384f7bd1 +MD = 4f9e1d625d8bde27baa224c74d54f4a3ca4d40ddf3d8f26da2253c261a958111 + +Len = 70136 +Msg = 4b6daafd15053691e7236a9155d3a921fd0ea08a1af37b975654593fe074fd83bf0fc69a669be14c88cebd9c2d60bfa9061238d6fdef942911d2d4f161283eac86f75227262001e7c6e11ac8e09d05e436e0b3b6659ed580bdbb4ce950d0e1eb492d37ec801afd2b4b63685e9613e19a367ffb727a86a7630318ab70d6f55009b0b75b319a133fe0bc5c91a67648bc92adf7f6526331739b8bf0d8cc1b1ef2ce629fa83e9c922ecec4d47ce8a9c6ff9544518e9e49279ff1fc4bbb4546d32f0108ed055aaf2032bc09d4116c5715106ba394aa9d53ee952aff313c25809d6f6c49a759cffb44b37433633879a6bb59dc71c83198aa10bb113bab43b2f0021ad5ced78ee3a78619bceb8ad959c14240b056f50dd775157b6d59c0b836bf8c98053f848bdfdb6ecd5dd950dc52ce322faefc2425a2dd833c05007983f714c352c443b7380bc185351fa4bd29adf6118d9f085d61410ae465a2d9dc8c3e182eaed982777dae7e52bac9f4d9a9b26069c24b25a6a9fb23bf600c8bf4bc52f255150ea5cc42113d5dc42573ad42a835c1367af909e51a519d940bbfc6f97dcbc0f02954be6f7d242fbcf9c740ddd99ca251f42c8dfde4bb0569671d5c2c05cbf8a5f33656ec385b4f080e989a638bbe937b80673ad9a28a7f47e74cbd3e3319849e34f49ba18a0b45122c8fc4ba07c21c1ce85219629be5939655f5f1154fdeec41b4359677bd5c9a411a53c5cc95d1c59cf294317e19f5cabe77bf019ba141b9f83aa24d541875d5fca28da57f7c13176367d58b1662e1ab271553f4b6706b722a90e3ca22e27f7ead8ae56dbd06af99d90ebf2d13bfd2bf3af958d25006849f3e7c9f15c764a11ebb9b02246d79ced466b1f8215b78f08c5dea77a350a9b3c89ec77e342de6043c8e9d8dd2771e974e7316286fd8d5629cf9af58709ea22076b1392a313aafcf608e582d7fc23d33916606f81d701e51777711a2402239f430df994813d8092b1223948b34381ec925a9490f350d9ae4a33dd8fe1cc4b5577f90b183e3ee3a40dbb5184ff9c0088290a2a717be969244aab5cc130b6c6070ea2c4780a8638b3542acad20d44245865cbbe8b5c1f34e981446b48a15028068f91b24ea6a214433d0701ba6cfa71bfc105bd393450c160967575a0a426e5e6634c61067320fad610b692a8af1d5d30c35e9325952c932bf2d52843c9b9842932493d29f07150ee87dffa17442b5b4e052cfcbaff012e9e1ed9efbc72768731750eb343cf11baeefae9b4a0bcb2f089def74663b28cf859830a38755efc73b194037fce3f809d69f25a3ebf8932c156e9540cda801e84c0b7dc9ef8bf99be0c17dddf33e25c7ce206a814de3a2922579ca9bc79c844587635c78fd134fceab388e47e1f57f3ede99059b3872014b7ee619ed1bbfb8ce7dc755187795f946e4a6fbdb8eb00e544e327f5b7450b73d68de079e92bba56c7860f11126b8fdedd3334d03c116dbf265155e28c823cc522d891e16f4355305be55b7cbd22565a9c0050b2644cfed016c672d69fd944970140ee5be09d8cb8298cf30af43843964f247bdabdd844d67ab537188db4a35816495e4fc984914cc4ef6e223407c7f05b21fecfc55dd010e6afeb4ec2aee986c6648a4396b3336c928f1579093b5417448b51f80738113dcf1937dfdb2277b19624dacde483c3a636ee9175f02d88699fc32de9f01198abb873855233b9ee5709fcc8451f80c27816705a8f6568d575c15beb1c1c54c6f927615c3c68cfade5967eeb5fc434c050b5c6e94bf567bbba5dd80214e89c3c94804544f4e6ee46ebc00dac646f0a4dce8954b6320cc4bba5c9aa1b5ae1325a0c77a1a8123a9049e81b3b93f96c9bbb5025ac59b837ea45c699548f64a2b1bfdf62092e2ad05017590c8b3a956943a9740f304c64f362faab4169e6a889b4de7bd3de1f9554a84fbd187ef8bed1ac88b8aa72f6becba94ab2565cb9bd12a6266041a324e813f34392d38966dc3230e98c8c06f13c2d27a67a5c9f6118e9f0382b300ab6a9aadba368a22cfd74077b4c6e284eb45394889e71a8c485225c3d744b33574d4095cbdfbd28ec352ccdd611dc13ccc89b9e36a326ef4e8e8005e87b3ea01b6143514e68eebc49a65cf1ebda64b2f3967aa6ac550874afe5b8538bad741ae99b3859dddf9bf0c7b99b102716869a75b6874a6414a4fd5b4311e1819b9a083443863be494434ae8e75da51256b04ea59137f5f8727acdf30f432c74b60f0c7e02b3641d27534f1fd81b2d380b802415cf1335c3fef88ae9a2b280ef9d417c3941565ec2196a61fed45a2502b564df48c88f96710abca8b1b5f6ab3cb1effbf897d5a88deae717e884a108fce4dcb4b10633746a2625abedb175f7e68458e02e6eb7cdcb1c67f57f617655910a6668e110756c29e1c208f01db6f397951aed6d4e733b240e5b7f15f340a7699680404b6febfa3ace10346b53302aaa54b46817bfae7d036130196ea2a65ae129b8ff628cfd9b173baee2a21a8809b953a3e4c02ab00ff3958458cbf80e0c92348eeac8e020bb49caec6846ac152d2f1267e7f9283e607f1bd6b1c07bee28e7376096e111fbf73cec6749cbb07de176018ed62520902b008495c8eea6dd2c6ab2dc884d9af5cb7b209e0ba3a018d348a16753d6bc5bac22305fe2a8f141a39727513350d3a4a48f07ff2260f37c7ef182bfd57043f7704edf73a381f3b21af7157d2cbd646f0ee2f3093276331f512b25c6ef94600a23f0b29f9ffc16a4ff050daed8c5b5db8711725a9075e787d63ffb3ae6b598fa13b28a321c89e2a0cc3b6074cc1c506099851651d0c2793c9aba837a6f56474dec0ea6b9bdbdd02c0f24be4d8b13bca4b2c85f8d87fe70a3fb154f03edf8f38bf96f98b5080a87bd343b87c77a6e62fe7f65ae7c1a8c566493face75f700462ae84fe0b27ff241bae7fa5d412e6edbf43bb7939bfceea2d4e1b5823eff1e87a1254a1f1079f7b6db76eb9f692ba7902c8468af6bc3a7deab60effacd7aa660853cc8947daa9d5f657d79de9dd6ab27fde5e34269f35a722e8e0498b00e3a395d9b55f1587655940f683f9b5dd3ebfbeeeca1fd25005905f4e59e0c751e4caa80bd6ca61f61b30d2fd3b7463787ec9475e53f402b6f25f284f416968b1f401ca53f973350f138134d2c5b6f99871f7a398c15bbcbb463d06535f8f770a5d708218e40198ba9475efdfe968822460725902dcfb0a46475180c27cf7fb43654158c3601d93dfe8348a8b713203049361f1066b7df3403fc41e05604cfc445599d4ba356f2c6655e58d3d23bb862052edf30b3888808f74bd6882d33483f575a37f662b9e6d3724b1805fc9ac1260e53ee87909c5b71c2f65e7a29d57963e0c84e02f0a535e3a9dbfec5829acb0ac937b58b7a7dca2cfb7e322cd855f40076467807e99350658073859900c6467eca6cdc92fda7449905660a16c55f18638c372e5b9a1ed6d77ac434d6f397b3f08645bc5486935b2485204ede5d3b872b972cd994aea229b80d209525d7a9a40e8164ed36a1ec9e7ddf4f68da2c8590b72b9a124973c7d995cc2b1efc29569737403cd7cfdbfd5f039845f0909fb7f594bdf160c0a5fa66ef1c464ad06538fdf95750146691504d3424a66ea8436d0652d2e53db091a4422291f4a12917cb58c31b211bb17e8fb9ae28d34b77a3ff436feec8118fe37ffbeeb1d8aa8cbd88283310326636d00654d0097f0f853df94d4a862c74c507c81481e044df71d2e9fcb7eb068c5d424e8f284aec33676de584811d84efe67b26fcbac1dba86ed48b36cfe01fe69b51e2c93551bd5f74d04e79923953db6aba1744c7cb0fadda4ec676f9b3e11d776b4da375d264dc63f19eacfc4e3bdfd841036d576053484abe363db3caec89881af9ae783165428b4e408f3de08f6595ac85d6d8263910468f54eb8c99a4c333cd613aaaf3511a7142eea0c584d0f559592921d881439e345e9d10f294ac43011f3ee88c9c9adcac8bf37221afa31769d347dec705e53aca98993e74606591867ccd289ba1b4f19365f983e0c578346da76c5e2228a07e4fc9b3d4807163371a52b68b66873201dc7d6b56616ac2e4cb522120787df7f15a5e8763a54c179c635d65816bc19485de3eb35a52040591094fe0e6485a7e0c60e38e7c61551549c7e9549b19e54ee62f368c100125c2d1be0d45f00052855809e5337f3320ceb7de832e490f76d3ab25d130081d448d2f4026aade3f0ac03cabd000fca943b67f0db73d0baadac55d78bb49b2f4e4c6f236088a1162c79152cd30917512125ef7ebf22b537aa596759e315391269b02c3164f8e2a0a3d7b12e4834f692c214acadfc053d10d4bc97becffd83330bbb32a5758119893b100059854a5595604ec508fae50e4c151d0e90b63320991db6a907faeaeedade6b2934f012db60e11c63142289d0f354c3f4560080b94c88e9b9e05dfc089a732f5448f25631fd2fc6ae5bdabb2c0e79f7709914acf655329c88b6057f10d1e2a5ab1bf4dcfe743094cd648b41c9a46b01aae05c7f7ebb051741145a3bad87131553375c6debcbcecee9b79ee451bd1429cbb33fc1fa86e8a10a7fc4f788c5edc6772493d1a00cefbb29dd796c69615bb7fb9a253911bfc2840b81ab7d49925a023d6802d0c43f7da4b65d86a1bb9928f2611e76b06c6d7d066ea1779397f7420fcd8d1032ff6a5fd1b7bf2c4bef6c632326c69beeb3980070586890021afb8b36501b24befb977d8a558cd231ade3f592711bfabb8d48330af35c5f917ba61ebfee98a83d5dcdbf17b84be21c9c05c4876ba4fcdfa286fe1b67074a0a6200e3f2ce8e0378d0150dbf0784c3d464dab94a3ce909219b5949eddcf1ba337612c21719849d34fa764fcc6bbfdd21ae6abc220b728a4a20cafcc679a018d660e3a475f603de3c83f86d840b8598cb22beb65900c8e522d8e0ffef669ecab9c87b6f558e922e5714a34f30105d5c9967dd8d35457284716ca33ab0cc733aa554e30dff09b9f54c5580de17a1d0915426cf2bfffff8cdff831b9650d3a5ce61af2264bb8e009be4ed960083e7659fc4069d76fe59e32a94c651f919a2bef0b77f405ed145f088e785ed9eba09a4eeb1b04e587c79b902f7dd4c4d516246076d6d46e2885710241dc48ea1053015e6e3cbeab8bf8705bdf16f1478413ac37b4c203bd72aece8d84d5380efac8441f021007a7d10ac4cc24a24b2643153bfb31c412727fd2b010a41d9cb72f72caf7235f70491b70f187bcaa62df768d4c119a57713b94a3de224bfff78102e51e7d6e55793dbfcdaf04f389a8d1b30e65214ae6b0675584a138c906d8eb3981a7282fac82c4327325da65eabdbb7cfb1f90c01c4084371791dac7cca15427eb0d7e03cf4d9b17f41e6e9027f1eb28e5c3e69642b210bdbf287ea4abe16a5283a9e567280a10d4d2f137eedbe5ef6b510a994a0485ab5dfded9b0c4f397c4dee1504e66178d3fd9246ccee711a36a8cf4c3f37dc2ba29c5659c65b00ea387e8cd742fde5fa3306b477a41b820f6f65b3113efc2424950d5ae5770d7ba3fd68d259261a300edc64bc0c44027925e8269ee21f1396f101057e2923b019d75991712324c7da373eac1b8d231fd0fe4f6ff54765fa8f216529228d62df55f4cb8ccbbdd5833f03c8514572d7d02418f3a658b99a2d87264ffcfa9a9ae7da9cd1bf5491aed8f8e507d8dc45c8dfecd6737e3ba1223919800fd568c96265f23feaad9e372735726b7bc7428e7c8b95e74d3c1096a499a0cf4366ffa22fd6474e94ec2b26c52545f792811aa5795fa9abff746a1287bbd754890621bd79c544496edf6dd90f24ee29fabab73335e8b294f8cbbaad423c07b02f576163c69f73d0b70be8d66bb0d56312c8baa038a32b42c78684bf7a86cc72c4cf414d9cd150552c062ea771658643592fa785081b8e35fa595ad18728901cd7d243c3731754473c32a1b4a69f8b4b5c73e05a0aae55deff98af8bfe9dfd1ee6f4eb7ddfbe0a374635e49671db6edb8b29f787e6f80cbe45e8e53747535dd960cbaac53951ec95f87459b579b58b7473b67f96f3753d447bbebe6c07e55d0cd3bb0442265f7603b17283aa14aa6bc694adcb2fd6b24211ff7e7da2a6c05509be477a7d1d5330d11fa4f4dcd916aa126c748c8af71bc5974fccb573ba70e0509ef58fce84b997ae81a02fd64da6a11869af1660db2e3254eb1df84799738991e459b6bf031f24fc85e8972ed8c6fb292ac20b2a096602db6fe6a8a6ea44ab1e3cc881e70ee0633baae2bd3f00e412c51e31cd4ef86fd18b3cbb691a2370ef85e6d663af0ea9dcfc4f23248f5caa828cc282ff583e8808f4e0009c09cb64a1399117feaf88d7fcbf112e4fb85276c4e09649f3de225b2398e86ac3fe48bc7ad9c9e1954113f73ce46f78a11278d5445127db5d396a65bbf7b43e737021c4d6c6dfe7da0c2684380cd876bb564642ab6ef5db9e027d243c81d2001d07ed3a4f81617f3f79470b58b8dabd10dc315b448a6eaf38b1b1031fd7d054431e11793fa9fd3c2810ebf92948e4c0241cc06bba4410eaafdfccaef05a2dbf683b34fe31a0e183465b8bda146d950477a07a00671c7af285d5167438a948860ed7ae55cff6dd08fcc1ad3ac4675a1e8e0fd4b5f5841b7b3d4a34ff6315cf6ca98c040c652c3e21cddbd67793f6a252d9a35708c01b60d948a79e9d0a4010b7bab0cc8e9ba193623c128e3d2d7c1c65ed1377556132e9913a65b9f988b8bb1bd4fe7e58de076b4ec9fe3ad7db6816ac2ac8cc48537b2437751d1d8188d03cfd6acd8ff796be244bea0772f4285b2fba254bbc3e11448f30ab264fd1653704d0fe9677e760466cee3ec6bcfebec5c6046f04cdc3153fb9112f29b745b85da12b02f1cca4c53083aa1aa47f73e928881f6a9c8763f9bd005d838ffa6afca490801a5804bc3ffd2704102940e05203e46faa7b6f8d195d137a4ad17fbd9cac6164a741a6aa2b1cc580a1dd87c063d849799119eccb0e80510be786bdca32e5824d2c3728db310fddb46239ea80a92645c1d0f0859a43d74766dc383afd39e081be2bb111ebcc56ddf3b3c6bfcd8c7e57dcccb7d07753c2752fab3e8dd32c1dde1c2847e838677244d338ec9df3a830fe2ef6a843eea8c258dad7221cf8840df5fba454126d9cf2b0e74443fb9f66eeb74cd17a666ccd6760dce28b6ec9dc2167d1226e36d7d758908468456f3d5318019b0f86ae7e3c123bca5fc2f9b38f08b241150ebc239104625f37694f39f74d7bade35582af7f633817a1715462372453a00ebe18cd6486b4cc24484221cdef640a0f7f895d01cae4394a1f05424ef4ca8271e4e321dc7fe65fa13abe81318e7913e66d39135dc9dec3cc1462d0410a957ce12b91ed3320a57e40e93ae4ecab29700a97087f0de0763ba9fa1398a7c632e3defaab7c334940cc85ac3da939b5d382ee957ddc7c9f490566488df80db8214bbdca965b473a66bee22c3d6ab33f25e0f4d11fd83466c5b5838848aacd70ff392013f906d97475c9d8c1c085e3b78f0ecfe254decfc78ac07421c9fd81610b20887f3a0b74980c71ec055da735bf8d60d231b37c9941f6bacabd887ca40903966964efd5a315894bae7f6b3b43a79f8bae57c21e4b56a808f9a40aa4bfe9470f455d7101ef6d7acb62987fae781033e3b6ccf7503085fd3f838dd7022f8263ff9ed163fcb4005f55dad9119d5d79e90d7df9c9aef34094d2fad364219d54d8ebf8693f328b9eb58f69c9c7746e553d6d8666cf870e26dd47b20d386f63d12458c46d795fe0790bdc81d2e7c025329f8842bc5f74dba955126b93da682da7b4ca958698b15d2fc0d1c59d190d0c829de245332ff506388ad76a2fb088551938b5ee2d13f35c3382e3a780c1b79ec5a70ff0938783f864eceb4009516c74d5feaf20d981726814b0a6aa16785c668c4975f7361cae3caf09e27fe94360f74e952af00457dafb53d88f4fc6b367ce46f398ab9345d04d8750419c17fd2266e38a9dbe460d89a07178f1fb29f976607643fc904399a6a57e5e7d074de51d5e454d9bfe07190ad1ee00935eb8c0e4b7aaa92647cf9e7dcf04831953d3a1be27e46c8a31d010db1a3a0dd7cceb804f2e54918a348fbad234ba7c9b044199815e31560cec297b66d3d5ff33d84ade224ee4abbce91c755070f099769b2063038bcc9878af8bcf5ab952633bf34f30ea940b4622c7ee64550e5778308af864b11b06b271de7f7313153fc854c0710f249818ff50638dfe7c674f875d46223516a680127d0b6d0d3c81eead12a258ef4cc5ae35ba4e63aa23165945516f464aa098b966feb8ecf41389ef7ffa2b5f57ef972b97e4eb180dd585f530b178dd1beb6c22fe7b6967de4497c2bf7fce0cbf7997218454cc13802040b3e7f1c53f3f53bb5d67779f76124c3608ea180cd9ac774010998e53dea78fd105c9a707151b85f0b92077bd8046a6df129e576a5e95552c8935f634d1fa70b18b6425a0d746de96d6c7f0562ec1c10d803ac258f410bfb6ebe820c1b5df7f6c852602150e27ea2826ac75fbca3a474bd24dcd6b42950369c92ea29cc2fd085ca3add0e61255152f397c7d110b1686146955fd13b298ccdfa187d018b1a9a82c6769f6968c550c167f868a3839cd29f1e5d1b5e4dc928862f5724de7ea8bdb3630c907a8f48e1b68797901c3fee48f5eb84fac512928a2ae457c806cd60a1e04a069788fc386efafb7b28856c2e342d5613e34db10b1b81c0214fc2a1caaed3236b9bddd71c5e566aac192631e5fd0d0611bd3f53bd43526cbca35a226f4d53954486bf497d198f7c334947b79a0b5ea48672e31f2e6b678f30aa1677d6e42748983f777ae20770da17a23026d5c6e7d77be9813ee8f986d2864e3ec988dd18e56fae4c91d390c02c600b29a51f967248f60a61d7735778ddc575193f0b9eee14d2bb88b6d81c4619166b795cfee3c59e02bdcb1355eb0457f509f002e991717cc74e71137a13cb4a42ac6974fc15aa82a4ea061a181ff4e91ff10b39a91c68c6594f51cd40dd1767ecb54115a194e69ce6795b13435a0f3a4a15b20dd4a99d998da66e0fb3e2f2171a6e496674c84493cf5212265f031cf37e5d2da6f19fd69e6d3b11ff598a2402d6bfc890fd1a8b10675e737df384e4bbc3b1c32b8866dc7d00f681c5bd3e74d1279008bac4f082bab783c53d87442f3b22f9bec4226677dd4ec0088a6464ac2c16c94f0d52b3f33ac6aa5291a4abc41aa21d649b46066e66607fec76d86692baa952e6b12ecca4379dbc609fd1216d014c05fed57cb18bc13d1d76b0a0aaef24ea1315cde0a15d5a429f388f960ef098269ad39d4ccc9496ed80ee61449a8a11e1f5238af19ce84bbf3d228a7bda16863bc22d193fc0528c79929cb04c9c2d2a95de5a0fe8240cb11c7c65b809eda77490665271dcf58d4ce839c7c6411a9e170eb700854da090345f464b40c7b06b092f6f8bceabd30d7e425fb9caab7ba67f54695e13a97a3d7d92821a4a3d892aee1fc3205835c399c990ebb8e510270d0b70dbbce28219db34bc181b00f4e1abca684c5936012bfbd5d9c50d3ffa869b6269f4621963e53201e6ef96887321b74613f07e919874f94b25d500fff000182c479e97e1d146098a17f1d30a42af160a2699d69080075cd37c03d84e7bfd4b1312c0a46256a4297a570519afeaf590bdac2eaa5c434aeb14e737df5322e5fdbdd341d1c379675b77ae13b29ef259ec07aa97421c68a770b76d595b376d20f6d2920b662dc3f765292504e400e245f4922abce6f97885b16317519521e416fefb5505abc7babd0f3ac3bef8fd43206e033385de1bfa4c78c1ec07d53a102fdde02617e8bae81f234f912a36bc9c522305ceda71a976638b79f46363a978d45a280c29642dd58667139530e5667543db3e02a3e9cb7534b232374e8697a46b3f7b10236849075ba52bd9b94e22565b5e56d7c88cab7e26b794beae872c1d5e528338ed3c350804a34265abba19c80273f65531a36e19a16149906dae8f6a135ce58e70281a60eb2afe3ff06f7352a0e4c685c6753fce0d77f6b57143e913f4244c1a92742095760107716eb6577d9d776d6e704c4426d3c24636a48e61a167745ee33c676e310ff206030fd6edd061f59418156ea5a8590ade1aecd7209bd612c3f1574a2dbc1dc3a3fbb9195ed35425e28c9e248bdd0816696933654e89a8c7244cc96584bc083d856356c5d20eded100d1f4b61e4b48b08d2b608112f3455b29fd7c009cbb37285542cd23700a68bf95effd6c857c829ef2695b7394621596790b56639d40144cbaa1067b614e58b84aefa38ee9f81ca9412b0c83fd5e8040bd7e41d6aed406705d87e915cd621884c7d8cd637145809922775bf9756dee209c5e24a0f7fe755ee5fc5e38dbcf0eebb3b2633446ed14363c57301c2319c7ffbfb4e60aa146c9dcfb094d2db31ca4b5b6864c498f78424838d2733530e973a5cd87715cd4346bb347b49e3d7ed141a9795b72ea756c7196bdf00c8cc3655ada6fe0acdeb751c1ab700739ad64774c91a439bc5f205308e974bae3690516e4664dc67fd77324348b1f0a06c88c952f33df2812efb7b471090537e0141e837a100e41d2912f352d1dfbc4eed51fb35157d0315ce4621813be1770ecd4353582a15b598d52140d1227ad3dd71b44591ac7225b82844b0656d0526bedf372b266e2db1799634a334c72dc7dabe32410f24a7baf6d189706a2066032cdb7fe848c983782dc0cf82f44c6318d5075e65f41a7843303e771a05f29e6cd726901325e8e16a33f94478a61ea5474b019b4cf6fa7e4f12d3bff5df5018f42c650a245428b2180aa455ecb0aa8ec3ab117b3e7e41243f1d45a69c4cd56009bafb60a44a25600230665667aa9c6a1e83db60d2f09b04b3ade8dd85e4df0e4e017e161b7e5b85a94393d8620a50d1d843b40ea2f4448a2d3351c74b1de97e117e51ace277379d7d92d15e7446645051992fb7170fea4f0c7bf4f6447e9129f4a01a9791bb46120fcc835b06e543604ac2c30cb79a08ade1b666ed1a8d42ac78052d68b1b1037dd05f4e40a26d7a7c047f0261fd290c313d910c0e25a08a701c2c2e92cafefc5b5fa986b1df55762e1f1c627960438173809a78ec0e7ee51f41738298360b9d151e59c1210623c2d10b396795896ff4df5b1122092d7edef49879de0b9b5d62459cde7210bf6eed1f59448658c104c2ff1db39be81b06c4ba81ad754f537ae8674bb63e03837d516379cc5335bfb8983d58e04b0b5fcd52bb7d9cfcd606ca9bf4ab6f797bdaf59c37ed3f32becdd1d1248d35b3d55428f5821cb6d9522de309684c68b8dc2e6e3a27442bb95684170a4f3b126af890b029a8cf89af36215a9d4caf3080b7063d979bff005b8f6acea017e304d4c7bde96b8a1693c2e48987e41c3465459eeaea51107e5baddbfa8f3f09058b85d5043b37c07253c8ffeef15a518c658bf654fad32f52ac04ceabcf33ad132502933c2c1ac6634835ea9a2d8c8717cfc85fdce5ba330c6014da07152a7ebc5fbfa4ae42811689ff8e374392d72746e29f2ddb4162e61c16428094d78ff8319a216bd305073b36d8265853d7e6acca6c54f2e8945993024d0244cdacd0a44372ec6b52fa29aefa60b2e043632791f2cb9e417d352ad44f62f8a92a0ba90d32685525a67844dc5537a841aaab1671606eef9c11ca432463f68a20226a558dbee9102d3625f56dc7bb7b0ef2363fc583e4bd654eba3f0dd0763b4c5f4f72b0298381e49a89c7bde26a9f9aa28b0ff8edcb7c3f7c9b7afb2570808029219d1f02b64ede3bfa185705c3aa97342003a5fe61c07d23d48366d363fe6e28971124eaffcb8ca31d83b3c26510774f7bb73746661eb0ecfbe4eb5adf0958d5f69b6c42de8c72586a767ea8bd65ad2d2497374636eb7d30781bf32c3035e2a9f6884f9ab10621d4478cf2294b2ebb858120208e62bb3486ef9518d806089e1ced54596345cd1daf5b23c8b48cb024c137fe7d8f68026968b8fcb6eecef5edc761ac142cdb45b8320bd77cdaf0ae6b68af6ec8b9b555ae4e6a9f77c109924401e9ec0a680004a404e014591d157e11f45e0d7c9dd92955b08b19b60f34425384fc90a6a5428e43b06e6717fb79b39afcda6713cc51f2023780d80c29dd9a7e99003663552147299d0d4c13e68bc378da9ae828a5ae44363be276e481741f37e69b49eaf80ac3b853433ff77eca423e26162d25ba5c9454463652d9d6862511d62447881e8d98925bb6bf1d14c3945d57e292858acb770edee318467982608ef041cbd539281a2a1ece460f58f65e48f876a +MD = d078b9666e76f83807c8268053ba5d0e520a2207bbd12cecfc528853afde70ac + +Len = 71232 +Msg = 34f832dd0682d674f6cbed94abaf7c7c750c73ade00edf4e8ab062ce317fe0cb10a17c336c17c3a96a3f262a239daef0fadaeb962e0d2e7eab3af8702618b18368189d41eaa20d06a3a2d2a91e43f75ecffab0dba7c78dbae6b8f31f31aecd9ae4637f4fa9ac1b544afcd85ac32ac0909c74a8c475c365cbe3313d247ac89cd82b8c08a4d1bc575a065620853bd96f4c084ebd99c0891f7a49adbdc72aee8605e69b228a895b28e280b79272add86e5bbb92d6a1afa2218dc0345b4f69a9f3e8bc96b447f910f6b25f27166842b023855e48da256b95d5ccf2cfff065e7f4b4a5687a6244a632a944cae94b122e8f8919976b36d1ceaa2018485913232faf6f35b75e069a4dc2a4def55f49374085349132648c1e82aeff2215ff91c0ca25cab7469495e2e045fa8ef231e5761999e73755f8169fadc26686f631f0c15fee63a496acb4b1162316cf521fa44102240d8662a46ac7888ae2b169bec497596fa6781804d77747f0960a85571a4a92ba1408f8e7fd48bb7ef03bf0f461d53f202fbc5b3b82b80e14d4eb1c969bd563c2973979314275aef51b812c617ced79b64bfbc0cf2af5d1267fcb785cbd93dde40382841edee0ebb3c11b6c845a52b188a780f92e44b329abd32638f803e86984e58e7a1f370cea018d8541db9ea74f1daf1654e764727ffb9ba5df16f345af3bb9c7eba0cf7c3284dd393ce5ce5ddafbef1674691ea66cbc15b4cb37f05e176efc9959421c914da43cb1ce115de8bd99d3fbd841b7d14853fdcd8db9af742a953aad3381b2fea3e62879661cb1ca9f7dea40e10fe485cb69a06aa73a754a6144d06e1ade0716ddd13d1aa5368e85d91ebe802f0209364e53aa16a828d62344046a466fb5ad7c43ebc6f00c1d38acf302bd3422e6ba6549a8775c011366a15b4a74d0b2b6fa918eac72a3fb2f44a295b062c76d2c5c8555ee949522789b370f8d6c97844092e90679aca0f2fb36f909be4bd46e218438fb7c8e6cbcc6e876e953de0544e0faf553f9f171a3ff8432e772d4c58684b5d29308c15d108cd2c3712425a485269748ef93cd905eaab0c2b7749a2576b465f4b4e9d9c0ce48eebf2f74ffefb56ffc5641edbd77b38b413af23a187e9f4f1911f9b634326679a0cc7cdcb951665b9eaff35e3da2232fba0e1049bc3b60a343aca9e47d4c49ad7d7df1a1ee740847f2a86c6bcaaa2df69fbe9a1a01d67b5f7a377dfaf1591832e946269afbc22bd39cf225acd0fa448e46bf082195ea4fd22154ce704d0322c878a783fe8dc6317cf1ffa7880d1d07355391e306c4e14eb9dd6713dafcb529dcb024726300fac9b296337a83cb7cd6aa5ae9a3203b56086502e0f6916cf97dde044faa5ef1ca54f2fe200726a8a4435ba108d10445b30d723674ef4a3a3a9f3b098b7458eccf53dcae67e5f7012dcda7ea71e5399082ae4ffc85565bd1131ea2246a68c73e7456de0b5d8f6b7173e63d8bd76826983f9b7ca984d44cbdfd7c71d95f10407353ce55a9837bfa76111d7af98bc251b9543586e205d1a37d642948bcfbd35b27d83af21d7c343a8b7fe3fed8119c51906b1cdd1a8ae6d68be1b59533a35a6dd89c1d31cbaa30923e3ada279c0b5e9ca9eea20dd7768c8c65f091c5d1e7edfee1f9f573289009a7eabc5083b9db7199624975978d7b2b0b980b5e791c5c3684f08c5454d8b017c23d8ef7a1b6047dde5625f7e8c0eb4afa9ebc6c1d7762aca660cdaa45409cf397832d2fe01508fbe1f1eeb990065974cfe66e5b31778db8c9df2877d2e4b9159e780179fd5b6b443ac21e2b1bc24831020babac33914ff365b8473d7c5997062d78c65627fdae1f5f533edcfa8939f8178afecfb2592be50078846ba003b94deb01c6551e7043c5a601bb4faacfa14296c0c2463c33a3f630bc7aa2fc7782454d9f9be73f67cedfc56a3de3ab0a00990659b0902fc53abf6ce09453c029a494dbceb19d092891d63409114979ccea73ccc2244e0b6272992b815bfec99e72a50c0b91e71a475f41584aefd1a58cc16b7076a7c05dafce2be31b5c14475a8f0e54d2d745d1586999c8cc242cacce27d89803b5a7a511bfe02a1aff34e7c24c294cb0dc49ccb053580be958ab0e15804389d5c864601cca4e670ccfc1197a5c9e6a222b537b03aef4784ee7ed27d75d54ec897a771d457fcf306d48595af712c623b34f035ab6cf07b4597c53a8982155368b26504b1032fb0cc8f35e3aad11491fc0b1c9ea3e45fa3685608f0eec7efcde4766a067f1965a628c5b502720da9f94e6ee27b82eb654857f4effa928c8946a6ab5b7f28e1c55b833dacfaed6d12249a26ead32fc72af1793921625f190b451519e37793a3785946c0c3d40539789a46fcdbae92c0d52636ec47303cb59e539987a8f7a8a7a628d716a297a1b802e1bcb55e1493208f70f6d7086a10aa6af79abf52064f34754ea007f04ba833d983621c1a0e1a2d7f5521c00d1ac53e96b980878aad70941055075b55f804f22408a2f8b8a30f31ce5f1f70fe4742ba4a21b4a8f8f3f30d9dc576d97ba79c3d0cf6e310dfdc5a72a31659af82fa6f66b0b89cea43e0c0e84524544a0760585cb9d78c2d38bfe33927013544413a3489ed05a114137cc06d2ffc0976a4292096523207176a5793cd81a81cf9e40f796c2c902bf012d0d9e384d4fd25f80cdc350090bb961ea95078da9377941381265893e2a344e6e3f4946b35981fab10747fea781072fcbf03805a4bacde759923934a826fd937bdfac60da6422b663dd0bd39726e72aba0952e2857259fb35e58657af8f977ae67d1c291af6313d19cd93614063d60d454ecca6d3f489f74d9ae184bcda8e5f2e863d020d8639d93347534a4bde5021ee4f29c508c7fa561100bf3e488e3edac489637e2aaaa92540e8dfd101ece2032578debfac5317b220d593d6eb1145584905441feaca0b9be300ada81b26184b7b5a7019372c5e75ed87e3f10d1a2e621c784349d67addc77a4d2131fff04f556062724421ba5b2bd776441f36ff5682cf50e59e6613ac12772cff0118f203ab753f59d2f4938a4e9f4f18a3e1375a34c22d9f80224ad3177a0e7b980ea1e1c81a3f9b48383e68487560f641a458a5f2a57cf59183870f40e3804b5939664635dff1bb06652171c42a6a515af8e9c636e9cd7c35123e9d296410d2d731d5cd7f26e43dbff3d3332bfeb9ae624751378bff7d980d56f8293b4c4ea6947076d3fe9f8597b77cca28fa92dd81fa2835766c572bed6cba3a2fe12c883b138dafe65e9a545d9f587cdfba6754608503ed0f529146c0e5b48b0dd5855c04d6e20790f9b7eef3da2f71a3d5ecacce95730e6ec93e5cc6fafe516f62e73898410604506a68a3feea6a3f21f7b345209dee10215aaeec643ec023b113a2bc6a04723ca12b4d21e362813be67a2bbc0b10ed88a36173643d03d2887f827845fe73af070fa6a5c725b50d0e4de7d68fe290f9de81882c52960c8dd62729b873ca2124f9f88723225a64761ce4cb442f5b908b8828391a46239b5ac34463e3b4518f6c8bf82745c1d5f354ee279ef518ba921b2c23fefdad4a32d1a653dbaa863930fe438b117e044ce42208a2cd59ea94084110f13426f69e858b15d1fb4d67c59842a72dd04c8803b945e2d2f0e3038c75660d0c8336c074f5df885b4d7ce79b37e23d6cee31cbbed5690324843101e86c2246f2669d8981f647743c3c89743e92555ca4b5be2dc2dae3f03401c4445c5ede753f58dbb03a197b700163239c043a04ab71e1424cb43c4f207de40d693cc0230e4fd461e301d1c3f2573bbbdda09188a060db7e97077c131a6ec58cdf2e227888a063d0807da1b9718a30b2a7882b49b1de1ec3ab310cd8448300b3249518476add719817022bd48436ecb8882f79d0766615a1e7c580f745574020c7f5f4382b5398391533b29d90d9ba3dfdfb0fa564757aa9db395b088357ee4637e5589340af42341986e88d2ddf43a3879f5f40e2a8983bf4010d74951165a402d7b811514d0a098270302bc1d3f399a370eb3b976c18e8d0b11ad3d0f060caa741850ac3c95a39ee842be1e3445470e01425ede93c5730efce05aeed815a1a93b752181e80ad35cc473e5808ace0d9bbfdb1e06e95dd94afcc405e4150ac2456adb1a1d81f8d9d9a1dd9e6a87a23349591f1ab8e053684af107d7a52cae1687ea90630770275c1e69c9126593886020b8577b7ce06ec915c5eff7bb87c94676a1dc25c71c5f0531027f69f816493c29c2ca68da5175a4b35ec58dae8c23f91a780988e6ec687c1c5647caac78ad706b60c20a5b9b31a02da6d0c304a583d87c575eb3eb4a0968e74b695d08217ca4ee7b858886266a668a835abf4739b28aa32722cf5e9d0c7198cb2c4c94797e7fbbf95c0be45ae79ed2dfa9a9feaf79b897ce9e03c84c374039bddabcd8e97baad9c48fbbfba072ef0ea106aab2719e0a61361a78b0c1537dd108b9d75dd73acd50c266bf565ed10145b1b9eaeae6e9270845dd559e6327d0699612c5aaac848f29dd29407afdcd7d7ff70a902e7624b894e531c31a9a7ddf084e2cae47d121986bfb1f65f1e62e0bc45a41c4068915640efd5ceaadce1b55b61851b9bdacd9911e0691574280bc521dc5a5b0fb8786d47d75a7f1de67cad87bdcc70e93a774224be5c73df5323ffb911d7f7994d93db0e9355a0136cd52106082d7d65129b9f2f980094092667ead294b174a5ae5029f5b24bd413c697ba76cf3c939809971aa30bf9f88a2834211ec37b549d4149f49d92c18da78a10d42a815e55ea76164f1f88ad03cadf153cfe2c9a19e8aceda576e34b2f372decf8c1ad1736e4ee85a705ac9e6853917798e13ea2272047c7d711f25d4b5b3898a2acc10ba90fd961bcf5d64278ad05f7cf6888082edcb844e3ef6e5c648c20806c7c6b803ed3dd36eb50a43dc74f93023b04874073666501667fa5dd0d327c50b090eb296ac95071dca674f4c6a3df237645baffa765d469c9333753a7e6b266198aee7bbf78e9aeeb77f6ec195220e81b9ca18a3d439d0aa6baa164b731595cf1dae3ebaf3aef5aa245789811c32eac6589c9649798055069766264cd7ad791f40149edaca807e19b8f989d528f5efd1e9d913358cbd3d79be6f8e85d5bb3a17a8eaf164a4899e021c6c5405e1f28569138976b03675efcb88ce373e92c84080fe381ea0a853bd2ef8b8d4596eb115557eb5a7009f32d5c49f8a08bf395bf221e9040dd6ff654466f3e6ef19f8ba055ed3658d6dee7b562ca8abe84ff0fdbac41258a64ed0479970b5fc8f8ca696bf4cba9f12414cd9daca4e3ac138df35ff2f203bd14f44822614e7059bfba1cca9e7da6d1dc2e0d3c967363e7ac0308b2a2bbcb67623839d521c3106fbae10e42df6dcd6973ad3f18ccb0bbffb300887a1808ecf7d10b420844e3a0997ed1c66b24367e366ef4cbb89be73c62cd092b2cdf63d90ce5f00932674ab155700eddba094249a732a74ba29081659f5e7f3931655720151588e7f9f542b33232eaacb5eb2bb05a6327275d4709e833ebf56b3e564d429ef42876c57b7636ae3c17cbc5665d32ce7516f74f3c0b049ef9ee198a0ec0c108e6712e0b664fac27fff8a38ef7414151fcd9340ecbef7b5f0cdbcccb1b5c1be170d586524259943df31fdc691a928ca34ef0560293318ce299410d77e879c3c737d808209c0e8f6eb9efcefa4cab45310ffee5c10e6be9c823a053f712a459188ffb3c0cdfe8ee28c90b03990a063b6994575bd0ba18f28e409c28ef06563c540da19a5d8a7340fa84d402ebef3dafdb908c30a812a33793547704b65029ee18258d9bb92838186281ed556948bc4305792ffcbda4a53975f3d36ff37c7a0eb35bf1c8a64591e4ef54b97387b2fc7555b2952897dc9978b48333d31ce7d0eee43580999b4f3b26ff51cad5cdca98b76ac16e4cad46fa65cda70ac6992ec93ef936bc970eb17e6f212d9404a1dbfb99a34a1dc1946042912fb3eac30ebdbd5f80d408397728e62de33c9778ba83af9cada1163fb3b4fc7b695e3650c41137c10991e6097af20cd3b40357ba6e3e1f20d86b0a0fa1b19294f8fa8fe88fc5d31401f4f88f60c94d01220657323387e4d6b20c4bc9d4f2af6e5d1d5a029847f9c8f8719223ff0b4126abda1888b0ed7b1ec9196de6c3d4ad78143b2727941416405b9c556f7c3463c4bfe31e264ccb6c799bf6e2ff04e417429cd879dff9c6d31aa9e9a4ea8ec13f5bdcb5ca839dce137799394d7b0ead674e8579b4843fbc9ad871ce22fd9d5e3e6c90c6c038fa520a894f54ffd357ad380c3c9379ccec71f7ea31ce32413e57eb676a9a71af08f3dc3f3cee8c90564fe3fc40ba3c12769354c0687e752dd84ab0ecd8b5616e302fe2f9d04a764aa121f5af20527ded647d3c0b94334e4bf1a3496d498c01ef1662d949a81d4f6acea007855a00b1b64cbc381c33a1200410fdff595b92f5ba023909cf32bb7a691566842f6c296a1585ccc382c52cbcfeccc75d418d7e9f47ba1f0edafec989de3bd1e5fdc5411983a61b58dfd75a67847b7bdda63d837120749142fd6abbe032987eb780f3fc428934447273d8aea23db3981b080a661ddce81c60b715072ffec1b97359869f777e96c4aaff479e0fa2ebb87fd7727af7c57b2cc2887c2fcb9b3e3ea3d7ebcf2b0c74186cc2a2ad022caa3986a4e4569182a45ef3020eba45a0646ac39c91ffcf9b22bc227e88401c6375a7c9f0fe6d6d8d0a0f7c844b2b20a6daca4d082795f7a3492c8683571bd0cfb49fb43c2f43fe5d02dac9afcff6df0717d9babb0b4615dd4de5e361ad94a1ca0d7ddfe6d56ec66b253d64e4fba1e35992259725bb74bc71b774d399ea2f11fae6be97a1af42584ff793c8c46cc0d006e01a6cc8b6a65e28fc65c1ac9b5fa3dab6fe85cd0b632673e09a7fbe81b827a77834a6149b5f6d6ba315581a3faad9d214aa34f98845a36f76adf433d90c5cb3c100cda9c8048cb2421fe15355952689764dff97946e71ab204ac0d4d131d1a4511b5df8db3a1e853ff217f86bb30c5962567027be41f3af83fd601218dd48f1bec0d1723364a55d13184679e0690dda5f50213a6464bbf508324c6c0e43054450bdc2b66f18b3b2621f0738624bad84c3c77d40355b2d043385f0532027a8e4bd4eac25ecdabc2d8352c4e45fbf6dd13628fec99f79e9658c64f6580cdf968b6b1ff8514b0f41171d7029ee3758c1483cf1204701555381795bc8fb12ff7080c09e21c8f84ac51796e380c6979c3a623ebc8c3919820df080d6e2acd0fba96d8445c2ed72f1ca97662973fdeeee5bb7b1f78d2036647b3b4972cdfdd548b3b9fc93563f59b8c42f21ae7e04abe387a14d1ecd8ce6912dba299c056e7e8b21eeb023565f0ae43437400f096b6d0050c756bea7efb87c9805a7df036f6b27769435623d9d0528bd5857b790a290c939926533b6c91aab3c965a985270f9a2241302dc96a9e6eaa20acf34ce3ab5a2c48b0f3a74998b919df4a8747d33c88fad039f0edbe61e9e94b71d02fca44a216419ab1f5bd199c43e9917dfddf8464483ee605587d21ad907f5c7beb67fdcc9aad6cf7ef721a3b7910c3f571f6f01654b3bfd5d250e6a1e7e3f65a4861ddc000b4af2c5b0da67e037c675669be868766564dc823dfb9ad36a0c6d60d61ec67907deab70239c24d28540508aedf509dc64f174712d1a1b9c4dd5458040e33a79231a502ac9c789032c1257308025641bcc7a5b868cea7addac32946f311b9694df7697420decf2f67ea50ff3ecf9f5c8fe68084ed80d271c07acc09a31187960af8bc7528a8d01210f80d141aed33d488d32f14698c2aeebe29c50adcb7a314115b296d8aa281217412e51a62051a93efb73acfa49db70a1cf89db065ab17cdaa4935c40f73ec45dd615f79dfbe5c7f0cb92a1c655982ae2110db620894eba71dea6ae37fc31964910c039959c1028226028665766892c31699078a8b1a258cb1654f30a23c0e67d93c59e298b5148386b9d6119d73ef2f43baaa8fb7e6cf63afe36c144084d537fd19eabd634398697507a388a322a2dcf09c4bd954a0f0145f8b4af8204376ba45ca3d908313981e39147331501cb2b0656772d02af09186098670420b22f7daf978dac4c1cc1b891a07d1766b0a2795e942a7dc007cb9a3f5fb665cc9c8627e604a4ac2e3162a92620842bebe930a72c6557365a0ef70526b13b5ac22dfbe8ec36914f1b19bcc21574150720f60622e42c95dd3d0efbe7bb2f6e49cde0c14f16afcc0b8f500091e43d782f8271837b3a6c6ee8e5924ac0613cb7b92c4f96b919d2cd78175f0e9716cf560b9ce6491e83a73acfe033841dcd6ba03f89d4ecb55a421e0b3fa1175031bc1731dcbec79b545f9218b95d086e343ed033531b23d25c60263b54c0bb4ba9763428de857f6021180d59ed9978104a18903b148cec7e94df7e8f13387af7f2a04566feb4e11b7e42f4f9d95323c283ab98bd4aa4a74897f2af8ce772d6c3b1acc352c9d78d1bd072e17f2924cbf3554a324061ecd49eea5c01ab4dfa4f5d4b0e2692dc67e3efac2a6b503988b1015386f55af6eff50fe06e4d70b35955234346f7ad92e0760575cbfb13a6f9739ae2e46a737608a90a2ecbcb63c3fa78941ee9aee979cbc40bc1fa094fede1942ea7d50a106bd1311c39d703fadc683a4e5258c4fd1da44e5125172e6b6aeb931af6fb4cb844c45dc476229fac791d0aa06236c24eeae49573f3b5c2dcca71e10e74a9bad1ad7c5f818830f70f26a37a48e2e63f656e1709f2d2587f3a791f1e679572cd02e243e6d1c48492897176099648f994c703b63c4c2561abfaf34d9bc4dde90bb2afd56443df900aa1c61f291708e35aea683cacee8183e1a4c587f994b27eef67428b58461dd5b7feb1096959a7260a45f834cc686b11b8be6c48a855b796f0a766d0435723d832e6aecf3abca8541b7040192b3846ad89ae541a389651e3b7e9696eb5f57619f3f03bcb2dee80d016efbc6449dc98b9ecfb19772ab515c79da3e69110bf891d83b1d4a7a33dc53c752ad9a098c3f5c94b3b28e9ef5077c51a7d5b01f413d1556a91f5cf4b48e9fbcea82448989cd25e3cd51edd06f6fc5ec6bc331bc070e34401173bbc768e73907bee38e6d9b5b2db2a5f47eaf20728172b16fb591675338befb802f9c57cd68d256363e5dcbd2bd2ac40507e410f6f60bfe43034668f467faf0ae801b8a2975423be41d0020181d73b1ea511647e46edddca6e58212d90a19776575eb08e4a881f456f3ffa21695b4f40d24eece252f13d20021ed6eeb6846190dd7b5d9e449b709f3880159b46d1516d44814ac9f81d369ba80308310cba75d0e6e200613a00b0222a3af4edbecbf9ea9842fe93cae45273acaf35a317964cbd102d59658f5a6684d0eb188715bda14f3a1e78ee3fd9397e9c7ddf937bba6ebbc5b7b919a8fb0c3db8fae0f5f028d011968e6a17cb5e23e2f3e976a08d995463840bb00c3b7509934ef4fec8e2901ec859ed12dee1f5da675f9c9b58e1b5863ae7b3deabab5ae74c0f53b26e5185e5d9e0e53372383295621be1ae0afc918ca84d2a85767d1f3dbe66b1ac54b16cbdccc7f12c9022971d69d5632f5552afc04240ea54fb2534757111796d2aa6d70f277b8b6ea73585baf4f89bafb67872d98f4f7dbdb8382d16fa6c35553e96376260782e8a35e590f68a11e5afbcd28d20e5e54f302c2a7baab0e35ff53f0410501e4a550fbab75b689fadfb9fc6f5514efc8ef94cd570a2993b1363dd7a74f440a77e995fa43f1789ac192800635561bc29c8e67422af347b0f78db7e9f6d45cc926165fa80c187c246000562107720e0f41fa136c24aa3c8949041490c51a75c65af3580eef31ebaf3ef1e456cdf3155f1ffb41502b762fa60d61fcd5fc67b58a7c492633d483ecc1c32dd2ac6f1f5a389e5899f828a14890ad6d19be8304479cf2e0711fa457a8e4577bc72cd53f022526dbc26b0471b1ce8ff01056423951842680e2db45f5479f62a46bdde79a38ab1f4a65b1a52f8fe81db28ca2214dfccb7ef1206ea1a5f07a4c7167c78e7a2254f16e29d3f5220d67bd7a33ac098a6ff864fad4e09fafcbfe7da763f2b025e8a7040fb7d8db9450d2d911ad7be036d3933f65a63a265a01b25e11066736e4b32cc1f5b6c83ecb83b1d840a317909a4f2477f83d8320f0ba1f5576f92d09ffab6c8ee7cfab0810cc8d22cdbd89fffe0c34747c42c374b71dcbcb9de44c0fbef7eed4aeaa8a20ab53ec1f80a2d817a9314a9db85c020af85340294f6dcd3269c03afc12ee6c6ee441593723fb0cbee5e7ef5c763449cafa8306d5543fb759472dd96cdb445ada03be59d27c6f2edef856aa187c729f9c07d6a3397400126ca167528ed1535b4c4ff1765855a7445e2ba5033a93bd0d686574a1bb7759e652bf952dc9bcc477ac11033731744a5926c6fd822883bd9a165d8488c524f13cf5e9e0f384633eb6e2921c24c5a101721e1185b04b141b4e8e372fdebe44711b3c67702b298f6a21d61762c67ca674992e5466140b0e7f31b83b9c2d0e9f808c0f806c5d1f08efbf71eb00a4bf4a4ad53ed6c737d138904c7cb1f4fc1cfdc796567efc12ce96779999551c47f4542c2f36e0d19f035bf7a6c3e05ed45226ed41f9a74ad09e01a7b5379cdf35858dc1adfebaabd60b3f5c477311033c17e19b95e1447b22f710291d340970f8d8bdb25a7eac7f644fac6538768c0abcd3f8799bf49cba8d418da5d976e4f71857aca63b9ffe72cf396abd80b2999cdcef312e5a1bf92d9be43ec2efe7759e1b6821465a47f7aea12f400a271180e125d15563da3fa1fcd348eb29696e038b8b75e53abe5fe05b619bf8f5367a88001ee22cbf2446dd50bdd55e824ef2d8e6efe5c1296fd001a098e45825b4d4fa22508a7deb3f1af551e2f45e74a75d3ad8d0207abb7680a2a6cd722943a9091e6e4132128e33a13126c90bb2a77b967289b58edb99da590b9588ad32f61e003c0d7b40b15109c5d9f8fb8423c4d285c7202697ab6ba342849452fd3de719a19c26861e23dcc86c34eefec57973b51283c5aba3b1d8d92254cbb1ca10bda5d486e2e8322fd678808b315c387c5b2a25eca2cd1ab68985e3c4632f7c7521c78141692be69fe822e826e89c43f3253ca64cdc13648226af6c1c84547b31bb899016e2d6a13ab9cd8c4d3c4750a878f07de99e06e9dd565da5a455a72f0f32f2e94d7572cac7f281544855e4c661fd50920c0e2c118fc19976a3ffb001d62f0a752e4c86cb0f3a46285e5afb0de75c63cdfc5410455f106ac763a9f7574d59da1a008c9a0bda3a25f0d973158d023c3117039937eb17ebd9802a7c059a3e5969c10d6037f2ef992594ffcab9ad7945c35667052b6d7df9ec8941a061336fd6c0539beee4e818004ffc19846fd81620207471bf73315ae3adcaf03c9388a879e5b6f35e29551b17a9116eccbf739f75505769f097a17550242c7e792403b3eae2d45dd98ea1c1853eb948c832e7ddeb5ce997bf1f2398e95895357e9b0b57d0bf9320879c34d2f313ddeda04f9c982b4b1042559421895651ee5b7480075bd382dd868fda7716083266a67d9efa98dd25b6b4d97e02113e172039825c61889c3599d519d0d0556da23abb87a86aa4a8f3c23374632ef84ab31217d1b580a6d3dfaf564f07a856c96b4374e5f4528634bc1c084ecd0d06212cab3d8816cc7d20890651570668e2c5966719c00b1b042a88ac7b8e4307036b8ad5f2d004add4293a880e595576c1092990f13f732ee7325f5ad35d4e84b6d2d5777fd1098b7499fa1cd47e7d3cbb3c2fa5458bb6f1f6f34a0e5ae275ece8fc16782cb2acce2616d1aaeded05209706ad8e5dcb5bcefb1650b0564640a7619155c2419c76deb048c81b9fcf758c1f11ad338128eb2cbc427a2810b0371de93a983c06b6ed24dad9e655334c56e71902367cf9caed730320cf5ed049e3b6489fe9cec3299b066e6e3441f18b2f994e8451510cd8e90a9658573ade38cbdb45674f60bf1c08ed32b2b8c720b5880a863d059a047a685b3d911aa581a677f2aa3ad3da43b8ba42f04a7cd009f1e9a289d55a3f27daf1cdc273218502bb70653dc27b2497243b6b6ee18842f568dbc91ef55828be1d0cc8eca873c4a99e3d9ac7a45127038913d2751de2072a42e5e70f45083d106e41b482d51848be7866fb0f8b5dc9cf0fc8ddcca69405f1a69064226c716767f319fa4da519fb897074eedf1da6f342dde4f63d25a62691bc63a820139b8c09d41b0015bd7dc352afeeddfd02348ea51cef848e421e5054ade61bd0e18f953f3ad02fa1c84c8a605d5c2f32e30f8040f36fef88a4066d80a1a125fc7f546b514dbeefbb6c8e37fca1464c466840b35b8bee9ef3f465645ebf1d2f6a94f2f487346fa929514cb26ea3359c0138ce0d3e0cf3fb97d9441d3630e19fe3c9721a29186bc3b4208ee3fe8cb1872bfcc178319d076d3bfcaa80501c75df2fc6dbc47e2038a724815ab2f48440758b5b21db7b66b15ca9 +MD = 7a4a3e7d8c22a4cebe2f2b7b0aae9be6e2f0d9022dac92c5f82ed0a0f998d659 + +Len = 72328 +Msg = 5c651afdfdf459c1709d93ab2465d1767f6bc1e0cf1051f5835a7c8f9b9b641e5d4da2a54a41da0550f9927e415244738465b16d0bb079638471e939d4531486c14c259aeec6f3c00dfdd6c050a8baa820db71cc122c4e0c1715ef55f3995a6bf02a4ce5d3cbcd790f72087939b05a9ebc93a905ceccf777a20d36eddfb55e5352afbe8ddf978fb8be1fcfb2e4b24ddcbe57001e25d79c2c8f22670882ef49c94fa3239afc74620582ced47239f5baea90ed1e21019767b4441c2aafc38e43524fcd251511a86ee9c345bfc120c3ca51981dac1549527e962bc326e98adc7378baf66a05067cdaebe94d37a78162a49840b15203e551095aaade04bebf1f02c2f8e69a72c338cf945caee42d441b7247ef6fb7f2bcdc31892b376b364ba018b871655e642f24746a84306f5a513659e70c2184eab83a1daa1594045a14a7dbe38d3b5ee43488f2f7ca9b803790fb83ff018d60f4c0b5f745d0be7731037c76cab52f41f9b9ab70c394b6becae9b21817357cf416bd93e4e2c47d6bc300660ff64f0bafaca7d617544b4ad21d45a23fb710b5e85a951d0e0a59988919f4aecfedc5955204e4510f34581f63388a142168fa02e3c8319b9d44f7d9783ac59ddd397d96cf0959647feb21fd1a21a250e6b15b298d677955b9190606e02e5d796261e1d5d1c3ee578fff10ac9fe2739eb51b9bf38f3f55928810eee86bfea28a85ee571cfe3b8c7169fa8cf39983e746b62d22289158ae9c35b11747bfb17e1a6f674931fe7819fb3264fc9cb10ae58f136f59903abb6ab9e684e9eb844fd86f47541edd7a827e3d15c3ca6d8e8154c3f169a6f2336f7332c412cd9b63e197d2363e3ee81a62a47f38a15d2fd9ef1e287ba47218237caf4ff6e22921036ea58b64ac111a851f7209c3851da9395d2a06d6a726c8b3eb0857a47c66430efee9e2f826ff3b64c1cf22dff872a557d260a72dfa28cb8bc36594f869edca299a4b1f1a3470125e51a514b481c4e9da56a852a626e2e9520cad4c1830257dfe48b389f45fcc681cd5db2569a87b3f6bf1ea4e69b2bae9b1cecac82c59752635120969ab2e7b054558599e26f5ff6db2ac0ee49f261a954f12a3505d6d478b760035076a2ae5b182df07c715f1b93b568efc5c700b69b3d5df202bd2f30276681920ab57d972347b74cde75b230f7300a09dfe03e70f0cea3e29a3b5730dadb365b09d9ac58b55d71e934723136adb57e9d711814574683736a6fe2b75d2f800ecce245c7696dd3fe64130934a333d047193df11aa008f63cf7f855e82b821f7b7638ac573fd955ad2bfe8d34fd05fae40baaedca01b4817119d80762127ee3fcd5515fc442642d1edf5b70caaab09fe5f32c70aae2d5cfb05e6379adb872981368e0e2a717baf4b3ccbe766e42a059bd5e572c25d9e94b6b243f1f337419864fbf4bd768262a371c92abf0884b71a2faab9f72c33d6b6f1219cf8a9bdbb0491237169090045e5eb9bf8861b12b90f5fe6989d71ba3d8a5358da92e3f55e34afb6ec5b0a738b3e60ba1f85c61798add59269adb97a3bda8561e308c96892f267bd4cdca2619c76782f8504321abbbc39b6146f2bfa396c2e44a1a2859dc004613e7b32f954e055dc01144a86a38c043258802bf0c29d09f707fba73c1c4e33444460a536d3bfa33438b2a1eb3a724c698297292f5ad17988b4d861196ea647b8d4e37f8267a12727dd494f8968d55e863b40b0114b3b8488522216411a2e0867f8ec060496eeaa5ef6c09d87b41d00308c630abe1b45f2a0eac00fdfa8503ef6b76384e5eb0ef4818effd30ea7b3fb0f7be97d5d55568a77839a9419a173b0101a303f4ceb69cd37aaee3945c7fd16cc13b852177ed515b62598ec178cfe275b273c80622067fd28547517559f641b0f59b9d113202c5c04d8a26102f15b6b7fe86d8e4e11714bfd937cb465b451d07f57d4417ac2c2240aa5a0390258f1442565acb33946ed805e70eb599e902affc514f2ec73edff386f937abd3e4a287af5a5e2354b484564f2f1aa4e28ba586e8998f91827284b5fdcab1835df4e68d496b0f55dab9edfbf6221a1db2aba44e672ecd30ebdfb0e60f9f462e90ced191bb18ecf7382d025595505b948cc19552e281766165eeeb0046d764120eeaea317ed4856bff7677dfa74a7d8dc385ef21054219c77328a9913e1399b24ad196f90f3e4748833ea5169670ee7e0931185529e135b7b60563255fc465a3b70b6e34e6a6d10185ee1086fd542cf9c08ba75bdadf48d6811dbe19167a464ae5f0e6818fbe811b59fd40ad4674c7658bce22a192acc19876c9f0f91c95ba3c5a4a867b84e5f61a81e4cbf60c433c65cda100c2ebca3e7209a2c251bcb74fdc7640c46f40ad9e73904d18fda94ffa6ef88cd83c30c82df7bc20a89f815f65cfecac36f95d75f8baf79e9e20c81b8fd5beea0f7a2c170e9df0dbfa5f04ee9a7b0fb5448635ff83554a41e20bc3167b5e63611d0918476ed96a3d5e0ca1e55c62622473b2547accd6eaef7b1b34c14b5d985a87659fd9bd3e6abd4a1502f43a0a86525aea53a833b46befcfdb97bc5e57c06ee51c2d3e783184d42524826ba1f7dec750ba9de866724fdb66d9666842d16de6ac993af62e573b3a95a7baec32aefe0bfb9fadbbc3a4f93ac6711b45875f138a547963815e241029021b16d65a944698c2060da2e9a11a76654f30d4aa5533a253191170760c865800fb10ba885c5ae62a8a283e270b0616d9d041b60a5850c74f14df340485202008c453194a4bad8ccb98a7de2a575ea48a80c83a45dcfd71aed9275c98325019800338732ef6b0e4fbbde71361fa86a7fdfd3f01eb678c39d8f2745a9f8898bd0d344b4894e1f7975166706e4c891089ba92008d596caf7873ed60ae88ec8c8316d4061a1aa2041c532ede5f68778ed236dbd73d1e70b9c5f61656c8f2f29df4236ef3583e9b48dc77838b57343a4419f9570da1a8f84d9ae629d15a5c2f3f88b9719d936f52485044e0f1f64e65e2b988802e5b9787dd7fba846aa322e6f3d95f685f4c2b4b853031d3bcbd057eed395ae3b3bb5883dbdce9b28d63f5de5d4e7bcfc2f3010b71c4c4e8560bf7e9c621e6fe28516a90eb4afa30a3fd2369ce50a52463287f06b0b6847b2873a43b000bb33c16ae4c236e42728b68df6a1de99841e2ba4cf3b1a45de728de7478e71d4f5629e9328bafe74bd92f269b086f117df8a732d11db0df53636dd29f1472807536442a7ea7bae8dfa49877b0acd1e88a2fde57654b78c41f9fa69f43d561dc05ea1754f30ec8e5665b53d6a0b5fad1456df4a27a0b7de51ae28faf135a398289c82fe3304f5e6f8863fdbdebb22e6e282976ae8fdc34d4edd2758c7e017e167976da7fa6d7efd9ae54d2b8123ff111bae8f0d5f74c31f600f5f4b1f46983fa4d7cb364d746f1c650b49f3f84ade75e6632efb370c9f9daeca389ba1700ffc08e20574d31fb08b817f99fcee39a85b6c27dcfb16ce3f0f61991a0ff465655eba42812935782a9215c9a70e09f6430bd58501d7a5c08cbda0016d71c12d80aee27fa91d1a87c3794972d9f1f18b99cd480205558bec6cee948c9987afd14a33aa1fe4172b5364874601996c4fff91e9ed28513e705ac8ec65c1061a6758aa3738ac99e110e4f60534fe4e48cb5b12a6ed7e4b59fe1189fd3a281cf190ca8700b4ae324170425f3b3bf15f4d0ca6064e708c5c70db19956a3b4a44d6d330cbd747ab1600f376897181633643bbe854279ddbec49af7ad67b92aee48fd8915d04192dade642875aef31dc3af27f2ae47a9df264ae233c337764dd66e546f525cf51bb5fba057dbcfc71e2d32201739e8e98592a65de6893a8dc5d30a0c6640b8017de9446e36096e269ff699ae9cb6aadb599a8368906e0541fb8ac88ffe7f75e951cb4508539cfe743ba6423de3a301d1c3945ebcc1c01c4587540649a85d1b2f00027a1930f5154249b2d8588c9d827f6c1684a4eb4de40ad1d56fe3e4781c4530f5501b4eb0371362b2a88907f4a136bba7b1db8d55f0f4637551c9433efdce4d3a73790d4cd85a1f1c4f39e656e29a2abe52ab1886c7b4c4ba58743540442cbd3830dd0d297da8d76639059812cb1c41c0e3ae2d4edcae7e2ae07f4afa63d319752491ced49b6214070256add6df2f8955e14f3c1ca453e83d7644f4ebe173ea87db41b2ecc6285d9517b78811735679f3d828b57eb347ab68a65fb383516198d6a16769c0626e2c9705a2c7314c238c1134a529f38dfc2032fd3a175f183ebce8337d540e0496096348a2ebd4ae194844835f2a09a8d3ff32c76e80edca6dbf42fdede20421526ca04d22567a3daa36f440b1062f788190dea16790addc61286d5d53c4615d05dec4afbba7706f48c0a6f9457ee391677d9d17bfb71db2cb70cdfe295ba3fc32c856dce94f75a7878dd32976c4b468081e04a6c174bc021f30eb4ce9282aa36bc1cd5105cee89ae8e71f3defa81080e61a9bbb375a173ebee15bc60daa83c703439ea8cb9657adef74d1b2fa79965073cbd8d16bc7adcd2cfa85f621634dfbbbd65130954631550daf913531b9a47b53da2295e95dfe320bf50059aed2c7a5d7f26bb4ed4f0424c60fe4212ff8c955e89e2f553a7d7701be59416d2089af59fa1074724e214e919b1e30f33fb78374b4b055bbc9b6a6b0d6afcfad00e8538c94c8d205326d8f200f430e480b66514c4a991c26218a0bc3c7510195da8f62a23a742aea347434549526e28bfd95b1610cb10920ec7824bf12f59dc407ef4b5f5dbad59dcee5ecb3cf22442b90b622479da0932864f170073bf5ea9433787c0860f568ac5c2306a20fdda9c36f5832645fe050c925a68c40c4ea7e92c7bb7341f6cc6a7276cc10b3f9a189dfe3fc505bd5e8b87fc8d7b7d0204bd05c4f48df7081a841aca931997dff267add89031a72923230b8b925a159e082763d34810f28940184976e041f4492c4e348d90cdf5d174550006110d7228836d6d211f490dea060b9ef3fa400cc571569ae6e8a3d7fc7aaacf36b19a7ee89c188a75223e317295e47f088b1ec59ae90548a840bb36f45da9dee31b0b1f257caf2198f8f9446a152b567f38e30912bbe6a49e3f1bf8ff44db96d4f7683f294aba9c534a822f1aae698a1eab98bf73107e178f8ecd076657c65fd3ecb7c53a2fc2626cc0dfdbca862483ae8c45cf060f570a42d5d94971c0f4a2a6a20299a1534edbab011a2fc2c8e7a9f682f02013e1f8e380bb45a867a4edc516c250a3a6dde66fdab63b12499a3764c036a39ce2ade90c11e81b0b922e3732ebf4aacb90f61286bf86486ea9249e1cd250652aba9cb3ebbd05635938835c4feddf17f9a9c55b88241a4b2a288fa339f5773fb2e5d6ddea4cba237ca2cee486e42c9f15377348ddcf194b2e0f03cf23f153371da982ef6f85ae655b1835553e97824a07832762ed882c5162a6a7a8428e8d58514fc871e4318a30dee1e039decf8a21b7d50a2f2119fb64ae34a4b8ff94cda7371ed1ecb018f58ded47f817d054ec2b0d754439df492d8cfa032287c0caba2eb760c5e83b0298827090a5787bee4f70f2aafc0890df6bd12e59489beef9fdf4ba5bccebedb71a1a4f050ee347655bf94cbd5a229da45c3c327f3e7ef2e93e0126590c7f2efe255a72ee5ce09c80b9cd05f687116c60a9d4eebd2db83262245ee5a0b02b66a15e4cc293b6f7e20811f4039dab5d67daf9a24a5a3dcf182c5712dd78de78fd666ff7253b45b181c60a7730faed8cf5dcf5ac2fa0954d0b0e8025f82bbeec5b16006384303195e17f4d5d725576287d2c45fc83d55eba72d247a01c007a11e879b899c8b8a12c6bfe82aeb3f56eb96993909a3042bf9cb73e538a333e376f0d5640a0d71cbdfc850a5073da23fcc520d97e8c1c2fe17d411b4deb242e208c30763f809ba4af8f986a5fb3cf2748d60ac6b8dc31e3ebe47830dccbd7185af2bba25e42fb979c6d0de758767a497b738f22e69255a8065ac447a9333444102914a045edde3faf1c4a49e3c4c3d1bd2517b4b0b472c45a668d265b2a23f968b7a5389b892ee20d26b958a7a6920635720a45bc4c6f800e903b969bb98c808a26d434091fd2c9e113c1db4d23cf310ce5d09db56134244b60365f11e757219ffe0b5b36b5b23c5169c99c7c44629a6903d18441fca9f8385fe74964bc6c24cfc5b174cb56b68285b23b61dd103389755676c20824b644fe14b41c3d40b3d141052d486f07c6e5a6757ef3188f2a465865251eb3e1434fc407069f437c15701e45e99fcbd2caabdc3bfa1ad4c9301839b84762ea3b3862b3c1469b1f7778488d0e4c4086beaa1d4e8b179db9c72b4940d84554543b7dc5f3c9dad97839c6a2b7e7bef549d34e8325ed3d467090051f974c85bd9ae8fac0aba72c1ef7cbe5c6c458a784bc1a9e2588e9d4dba12ca4e3639c7164644b989b03e4a2354434bffcdbe970b6869a834aa0084425f4a4f2dccf517013596a3d9d2407a6e5067c3a8c24237f53505ce33c95d1f5ec0fffd55400f2e990214fd20f36989ff5e5ac40bdc88d3d23c166a8418ecd50f89d453791210746a4650240396020f52e8bcbb8d9efb012ed82c2b8a2b382bb10447effdc5818ee17cd896d63cb260f589de18926c012677b3a78fda72d7a9ffeacb3157dcdae49b100ee43d59f32573bc6f79ded643da293928e5d97243d65887eec61bcaa50bf3aa739a9d603cc349eac13db7503b92dfe320ec2bcbf517377622fcae11487b879697086b01f7d0e4af7402b08c30c6e84c1ff135c27403392ff863b3335da9c37ef9dc4a91ccc4e08508375eccfc0cfece86a38c084920ba3fef899fb35d1d33ce0c74a0a22425a9e5fe6a16a4d5db6004e561830fdcd6570068dcd823cf4c550e5f7001b58659bd4cb7098ca66698d869ccb9df3ba7ba8c3c04ebf0d71ccdb3ba634ce23e7c079743c294054416ebb4779d2ae53e4233c62d44257e7fce07bc4ca869c6cf7d85d445c1a825007f3a80b8e713396a34e8915e9727e5706b80eb5faf5523caf37ad0ed04a4705df81bc9a82b215051e83f7a6a7e41aa4b7ddfdd4dd8ad8dc3764d39843c175bcf29f5fbbfe9d3ae87e4aeedbb8a2141736d6afea1c4c1694b8e735ab5b88f5bd67d5f938aa398b87ea2bd67ec1b455f8ac2b8bbe5e44f5ab5a493d0ec0a6b05067abf2d72d8ef0298baf17556d20c48f4065fb1a4c785b6b4411518b1b238dbd1aaab26130a45218895d192961f048231b0b65c48df2311a9fc7dbe81408734ba759a19d5a84979a0bbe44c1482ccbfd64a53385caba600192f342ee525c4c43374028555435a9f8395801e7c8da346644bccc25abd6cf68461eee657e27ffedf1e8ad4fc5bf6e7a3cb6b66189046ba4e3d7986cd7506596e2cf47153f727491fed89a54562bd0673c5dcdf834b157ff687eff22f7300cd58f8fb5c53e4493778598552caf80b60960d7ac7471eae2c1fb39690eb27cab6b75e5a03f23a544e7afb1489f77c607a6d1aabd9de7b6f330c6913ef9b13e29a1bb597049959d6f28a4aad9755605ad87b761663b3f1d7396ee0de6ab9c7d70bf8a738dac3c35fc838b0b7275f6468ff439811115212748399e36caec1a42670d09bc5f30c174d3408c5d7a69fc9095347f9425f433dd5b62fc925084d394f6d361bb4f9ccc63dca7d127591713eca791b2220aa02046945830abe13a707b0558b9f8c3ba040800ff7ff17647e161ad51fab127e18e6adb656309e6d799ff7ce53afc2450126d2592c1443bc30ef78fbd7ecbe67f265219cfbd32c524f52943c20b4edb279d9a34a6bda60f5243b6351d67f7ae418f0534df65b0e8e62d00433756774e074e9516849ba25abb28a788b9dcbee8f0718b16dd840bb5e8e88c628c40fde7b7cd68b17484bd85c764d16ed806a6fa5476eda51141c996f1cfd68908f36a0d01c11befbda081f63ea03dd0c40d394d354432cbc2c574f2c88ae5a1f4974527abd3b4b7a9167516e883f197c318ff495b83626f3a37933036c0c2909853179f7eaa3df07e0f214d8cb6f7a91e4f7f568edc8679bfc0afba031973403c5067dc42efbd8485b20e04f4e057f01ddb41dd95f6a5d09a884ff7f73f029728b6bd46bf493d5a0628c3a1e6aa175307e4cd44397bc75e13b6fb4fd9d7767fa3aca145bc61c45a4998c88e2bbb41b92691acf54210f40a71733c2a738cd8dff75a9c4103de5a6c952ba6318bbddc0cc00b6556785f35bcfee698f08b032f9e6ae935a25a6907783408e4f4cd55f1331e7a80d1a210915c00389909eae783a64581f5d08aaad4666c590a3ebb2d8716880585cd8acb11d3c090c7de58deddded04963345b48c81e8643a1761beda69d45d4fdb2f637bc078617a9d59d90442e526a073494ecec89c9f03006b63d56b09f1070e7affc9ae19af4c75780a7c07e150c6939ff3d468d7f883f5554c3a037dce164d67dc3b3494350a9cdcac859b65f5512ac62e4e113ee3256cbbd2a8b1a456e63e627341028ca53d89d439d18bf797089f38688c2046017fed0b818204122e0f47f77f6b8647724db31b3ce047fab83567833d2f3461b5fbecc0e366694bb5ea00933b2b3e792ec3aefe20325df3cb702a130697bc368311f27872b65fc5711edec240f0a9763d27e4198e384c7763314d847f762618eb5a849eb9f255f4021659112b6c45e32ff2e8e9c1628209f2014843e21b00ad715e19b023cafa7bcb5905ec54ee923469bd23db7451ad000a58a0cde916ea58976528394a70aba14f5f5bc048082cee8cdf2b8b11860c1e1ebffdaefefa41aed03846a688b3e82900a1c1498f4954660bd1766523604d98a19fb5539e258514be1feb9478e54e5771c8dcc4a512d75f694c8af61480d02425804e583139431eb3b48d6f95853cd1352d14ee03f4f42f27a8efba8f5842352d0a4f2972a5fa41437eb2b46924321aad56f00226805959b96f0b2ede6702402a862e43bcec2920ffd6e1ef6e42cc985cdef4cda7156563a11763cf9c2d9ec9a09c62438a7c3e125b65919d0f517acec61da99ce054b6d1712a8029432c865621a5918565e6d7a9b8a35839d6e0bb426b9b64ec7caeac37ac20f6a85de4376a204a2295c9bc545bca088c425f611c87dfe0ed58d683d3eab4932dd966d5507a1ee2abf1405d52acf21dd44303630d037586795e8884cc7f1ce99c48d880301a80177434445a4121b34b96a86d670b59dee4bf6a0d21d479679cd8533d6574aff64131bb5033ae3e902a6a0ee7dd95df7e941607cedbba4e073558a500058cbee4086b12fe6a08781b32b4e32d374b18d70d23b46822bc818e4b939acad0e6cbdbd566c7a96dde42b6ed1da18824899a6ac84efc438769985f482fc0e868216b3020db35dbcf9e42f5b1ead692f5dfe8cc5e2e4bfb8a50171c9373a4032bbaf193832f0a100fd6ed4a39c2fec84bcc685e27183fea9c0e7228e605a085ac12037864e8a0e09f069646ed3c86b296cdbda2bbb324bb4cd32e16986c62fa69d525515e8e96c80dabf25e34ae1acc67523d3c9475a6c81d6ccf68230e57dbd562cbb0d8875830cc357602b89e07902e088b7e49d642ab7e29ca902e61fb948f495b195b7961b56b4195c6d182f9885b4f1d0a346b64dfefa8a421130dcadee80777ed5fbb4fb05b4ed63d28034d1f8f945642fc9ba9d00257e08d697841f5801b96bf6df37ecc2ccbbbb824859ee03b86ebcb0aed7e2626b60447aa27fd82e7f43c020e887b635036bada4f805b54df853204d7e74e3cfd4183f24da36a01703fdc57aa00c210561e58161189ff07fc1dcd72ec0fb69ed698f3efdc50f3ebb93cfc12d8e2ef5dbee117fe0319165401bf12b7cfcd33c6431ab8c2ded737cc33aa1fe603a56f95eb3d8ef4aca42dd390f7a625fba6424dd345570dbdacb20d7fd5bc23c2deaf637b72018c66c1a1f12a45fc5fe8316e9007b763130127df39ee6e556e9ee54b40d02d3437d9e81f572e3889c82de5152740df418531ff3bdc1fc27028e05fafb899dd7b896e8df2501d2de2f12547d28e2f3b96d6c899346e747090d54fb4693538f16bf3ad29c78687c47c5d76c0233f133ab78a5d6c755b9d074c162579e4312e076a091e520b64fe6aca8f9ae483b4ad7b4802490f6b4df9e4e64e1a16cd46e99e1a2c2a8d4a75d1af61e9fa2b80894e6bbcf113e872900b9813ff862170f11c13e0ef6a41e123b1f0b70f1d1b8617869a7ab9569e47dc42af39ad02007b9a060752c545f67c191fdd5e618c2b1109e67625dd8987478d5f88ebd9066a49dc67f6d440563187a06bc3bc73cfd0cdbade8d32c01539fe1d82b38ef61b956822924109e303897064265245d840b2f8b4ef5e2623823cd8278ccdb796ba3852f715a4582fe644e2dee007aee197384e828947746a78e66215be25ea3d5ab996d4726f4379771a3b6b29324c323bd71b9e4d07a1f731ed2872975a9b5c85afa045392050622e7006b35280a24c97260c829aed336c75b7a7c8b8ea4f76b3610bc3ca56137c74ccc1220c614583319b8dba0386bd3c9ccc4c7283337b1e7c9445daa67ee12b02a6f741a762aa98a3ae1bbf075283da1f91932aa6f4a2a639bfcae47e195de02085159cc3f345df65d4330c26df3be786ae283b647c5ab0832a178b81a3fe5e86fda89dd291abd9e0b4601be29b59c76a88583f7c5907cfd189c83a81ad26d88e672cbf63cc411abcb52f88bb05420c23a6cfa12f093e56bd55397bdea38bf0af581e8bf811aa14426cfdbd20aba9285a8fdb0b2d0b72e7aef307c9f91572397246fa9dfff05b492a325733a40cd3ae67ba26c7d6ee29e51f09af9f71719e057fca4d3ffbe6b94bdcabc886c59775f0e3ac2f81bd1fd7e1960f9d86d85644071048831c6c73687ec23fce20f5d9e4b246dc41a3501f116f9c5b4dfa8e222890dc4838add214cd647374e48cc552c44519c129b7307a4ae1aa935d751363a0455c5fea5ebd497c9f78d18834b480893bd5013427cea008ea493e3870f8a94f96f8e5f4b99e9fda724adc35c333e1a808f102fd9f9b2ecfebe0c26b98be518b083a810448f6768baf520b8982d3f4a52f065ce2691684f45909b66336d4fae70ba9977587456bf48936d5e02e054805307d658f3ed1313ac43c80bbe5cd03e833bebfe4ff1bfea9a261c1c61f584a4c9fdeb3506b4bb1f7bff1b7d220071b02f2f250cf0ada9d0f8d5b65c7c13d89efdf92cce278f685bfaeb1d25270239ecbdbed00804511c5ba9c8c2851ce3565637242289202623af70305569950a31da750f735c53842072f728c8ff090c08b5bfa554cfb820f30327f54bb233bf5f639e4b966fa5efbefd281d50310b37f6a1dca54a09b626e13f65638869cacacd6d8199c2a9c239fde585cee385ea0c2703d74c8d9de3dff44b73a293f422d283e167227d72720be610566408626d32a3c4f8c1a4f507f4340f99d9f4bd038087a8960e52327c0d7f67e30648305e5272ca872d1777ea0ca9741e31342a357ce3a85784c651a9e6d2d273dd2a5883139dffccb76f8d53d05c604cd1daa57f6d9fcbf1ac6337c13fe73a50113640a41e2a4a0f88339e0be754bc69e16e95abfcc1f8aeafb04d8cbfc485c0c9f4518b1a249297c7eb11dbfb9971be8b79627fd05317d4b535f9d10f739d0c2dedf3ffb090c1ad9d205089b1346693f58273c4925c0face57ba45ad6fc687c66a88fc78878be993258c2ddb32c823047113241e9e5ca7e6809b7edbd65d0579cad8bac49e371a3ad1ecfa1a989afdcaaae06c07ef52f92666798536cb8bce7f68551769cdac21337f7df9b3a54d4e046e25707f894262f061eb1548afd13729db747ed28649930f76d5a940f94d88442348ee000ca979e70b569b7bf3abf41b9cbd7d89689de431607a955d051a510c62d11113ea06a28cdb42746b579a79c714a68018d517994bb4e32a3249322ccfc534962591d871345a455c711c1b3caedbb612eb6c5526b0fc85e49b36337000a319e9dfa4ad7a7ff0c5a037e1bcb1556a62c28b9ec52103aff950d26c8ccf3184c7988c82d402e24749ec2a28dd7c3d49330b73dcf5fca637b40b925cbc9ee4f2e40ed6cd1abeedb6489cb2522bf1d8e0bd5a2ea7462e3b2c2c51357731639d65e5d928d3b01304d6583e8b0df6b6bad9583b369e544a1505e8ee465c89c1cd664363fd475283ca1fef4dfebcec4f558baa2b0622aeb4d65d701f3f6d241df77c935bee8860a5a00b844797df6b002b8019a627c49412e18b3880ab39aeec9e014c0d673768ed2921adb7e0f5f18dcf5f2d491604c2d8e927c8aef44278c233acd414e1a4d9beb7eac21b64812e5c93615b605b63a96b3fbb96f6b50810135ac7c1fef87141befedf67fe9d116fd12a3f3a985251c66e67af39e467fb137475faac28162d3f52406815bde51734aff651316db55f9846f37b181487bbe14a17bde92cc529011d3f2d41e5e7132b3d7a4fd63cdefd9d8965b7b7f39e9b0828b27a1f79700555743d8773131d95a1fe4873afa249bc54aa30ed900e07490684c8b7a59ac1429afbee1f3fa1f30f3786c375141a700c3c2dd77546c06c265ad2dd0f120d13515018a35cfe3f01e06a5b8dccaa220c7de288ebf732c737b373b761e8eb4cf0b1f35f0fb93536b4d998e109d2e8355971b64fc0dbfa6ef480ef96f9cda7d6d3f5233385cc8b25962b71bbba2044e1019845e6f8abf4342d1f3cf5f735ce47579b3e3aa7ff567 +MD = 5a74425dc75dc97ff8db946583b5f3ed4b980bb122b6070bd8ae2fe9274b196b + +Len = 73424 +Msg = d1051cb099622b508f3ca9f77e03d23ab59c8cbd5b625653036b7b66800c8b9afb9f0bad43836ca263653a1e7abe9612c79de69a04a7cb25f55c54d7409c712b7f69aadd94ee10073cc0748ae865d8afc813230e28b919afff448970c51bc8a686eb5f0735aa01c842d6c0026efe805adf84abe16fa126394aa984fab8917a5337ae93f5cdbf252c9c2e844fb793755b347ae6db8366dc0bfe16ac3cc0066e7abb39af6d0536667d73512939692ba1faf07c3cc30910216c4210690086838c63391419388516ab01eec518882dcfeb7f3b131563aca8dfa63e21230cb20fbc56dac83b1ef467db023614b804aa863b313cc5d9811235fdff1bd04229ebb3e69ac6dc7ce6fa32e0c672c57075895879591c1df0e6e3bf63c001a52e1fd976f27824d8435a407ea196cb61aaa2714d8d3f02a0c25ac84ff930172950b62560c8381c45fa406e5306b9696fcd540b6e602b17d8b7a568eba79986e30eb677795122d8aa08612cb9f77973774153ffc2d865834c388e6d9e5541755cd1e676ca737d7d8fd58520b95c1c12026d67f451de346d84abde7c6deb710d1a020fcb5a1793367cc973f55a1deb6d97bb5892245be2fd097a5d4062517176a707f91e3126aa29fa4cf551a5232eadbe92ed824235b55d620bd35e846f89d78b4a6c1658860b7e90c6d1dda0542df9ff5aef6cb356f6b217c80881db2d01584c31305bd621fe5ec79fd04055992f7ae37c27f780a4ec27b118c44f7074202374260c96b3ddcaf1263fba22ccdb7e57f15e5accb009e1e1b762ce704a2a305d8b90ca6ff8a4b95e350e572d0c0060b9b26953934b6c1b0bb110ef8d7139773117d7308dac5d11ce7c756f071df11ec8ac05d9f35ab4e3cb2789ef4eee873ec5a2620799d7f01b6884dac9580797ffab699bb394e4cb8149a235965ac8fecc41b39b163a81441f55d4a62ec9d2d94d8b7191aa1ff1983dafaa7cab5a07856bced3e92719b34365bcf4426601879e4e8f4a51863c8a035f22c5c6f8f5b403619488b400dd75d434c66d1439a92ed04ce07e410f92b5f42ecc7d7b43d4d662f7ba5d656a2fcddfd69ac6866f69cd568da595cb0cca7c53f3d55903559e75897568d7622db7c54d916287ffcfe86e185a071556478be708f765e1c6f6fc996023c88014111c6404ae4339e722cf18fefa2e8849867efdfc7fa29e2ded964bcf48ffdfe3de07b2ed746763a530c5d4f0b741750e924bc615d6b7179e041392be2e387c385b1fb8f02df68da3c173a9d6d769650c33994a3c43cad482011c77151b99e079510d7df61f173f489d819f98a3cddfab3010925a0d045e42ad5801bc584a9210897809e594f302fc8b96be1e63966b535359a5557d8c3c44d070389b2d741a63c80965a7d2b25d27555a0f505feb916c621c8b17db8bf6f2320b249be13f01dcd9689822217bd931c1779917def5da5e26004d866f2815b39ad2cea2bed2cee1833caa40cb76fc83989264592adbcd9267aef28c808c20eed26c3d990a5609dc8d2da4e717cd5183a156790089c6f36eedce821057de9f0da08379690ef23b34c0e58d014ca55d9aa668dff244ded25b7f0706f93d471b77cdbc8bf812cfeb51e4096d75b329aa306d739e19a24af4c2e701843178ef1b9421c17a305e14a19bc1444d2b947ebfaec01dbf5bed33e109eb65079f50fd27cc633a4ef839eae57a1e3b340b37cf247a650e49a26bc01f9a54db942b0f99c7875dce1037ed794056c4992afde34262fe24ef44d5661a38dbe90a35bdfbed842dd526c7d7c0e839977c0437e9e1ff00a1c768b9dc2468b436749bf13d5e1ee52694ea7bbffb6059a50c2464b77a2f86ca1420af9feed31912bb35d1937e5773da62c134d7e50826e83ca3b84ff3fa7ce3d5c02e050b83f1d68881dba8a4beb4b20653fb07c8092ac9d6263c9997876b53d0ef3ef8c59fc3eca1271962177b32144a49d737ea8aedaea058f67eadffdb82ce56e860625018bbcece93aa21b77569f44bd14f95b4f60064def0e47c8952d8969d33232bbd77abd91e5069089a031acd00f0370fafcd28e86332b54d4e5abdf26b282a680f682488c15885154b668d9d113cd8a0a2fa8cf58dc2d768767a99a868cd5d616d738ea55cb3e890f3262c2c25bd1892b505965204aa3415283bd4813d2ca45d002151f69a6a78c1b9c95e41e57ce02b1277adc971f2b29c8c23d645924de8a6eff9d54420831fefc6d98aa6f98019b5ded838207ca03b44cbbc07bc0e360f82638483569909c36441de1a2108d1a97644aea120ccbeb6570d8ed0ad5af1033a8448c1f6ab014e66535e757bba787ab76a834f910a530a1b791f97e21e86aa1579cff8eafe75a73e24e3037cb97c72bf78deaa3bdd6821d938fac52101fbee5d6ba191fb3b6cb634dbf42cebaae57bd897481ae5ee04e2d871a4c333ab5ab6588144f2f10aef638fa11a589138bc7c48ef480759e52f35624da6f8e0c5abe950e4428594120596999ddbef3709085c58a766d95d69f102bdf489cbeff7f4718bbb23b1acfcb63798f8c259a3c5d10550e72af8ba225331328dd5a62ae83f35522f6ddd006f0a2ed5d954fe9e151f5e78d91dcd38b95cab094110f05741931dec68aa7359140a6398691b47efa1fb4f17a2c6be9ed615568a37c4103fa9f911a38d61da7f93bdbf29cf9e9a60106cc0776dad34b620841bfd987870aac977f9bdc71b7a3a932c28cf346560b70a7b99de605b984640b3e3a98bb577604918bd833d5fbb52bc5d87d3c0f902bd392fc295a3575017ddaa94d739028d28d0e1463d18b5058eb85ac57d9ae1e63a429024e45f29c6f1a07017cfc9e71acb06dc7a337fa5c0b72c2bc815eba576f6d0a6a512bc5a609b310c55d964ec8612941042ac9bb85495c3d67ae3dace19b8897a2e69e17188df3789353d329a3ac2228587f2937529f02365c22f90e336491513a82ff7f6a5835bec9e425a789ca657442f4b9065a790f4df8740356c37721d79f9ad25721e50443f7a31050f1585dc542300ba0e373ddf4db35ff0f183f949b50b2b946c5d0e9a8ab0525ae50e2658bd4c5838fa3fbe8bb62dd4e9fb82a640cec4f16b6cc98507d328ed8284ed527488919d33b129dca222dde749119c43abcc0e46d3faca7c3124ca4aa4741bd1d8bcd915d2b95b5fc99aabe038bc399631b8d074f49fc8bdc0847eb1e93b016b2b610e0a3e9c3f0faa247f06dd83c1697b99f2c1f5e22b0e5dfc2c69796306e8168017c29ee23bb3edcb41a261ee9c8230775b76ff4c5c38b092bcbb7b74910f401fdc861b11b9153a94d9fceb8532a9f95af5da3964c103605016ef17f40ca95249459dddb320fb37892f5ca4d1eca87e4ba737ccb2c336163e224d776dde7ef3033a510b4fd82e8fb12c0ab4593046665159d3dfbeca9b7963c91cc0666f56cc57a3e8ce6e4976e814b64d42a5674a5a75f3f89b113ff832c7f1a61d6827f9844c68ab4d97db9aebbbb66f763efa7d01be5eec28328816e8728331b4fa6e2fc4ea71e2b152f6643fad15b679ab4fa7043480f7ada90fbd446d6806ada4acbf343aa6d52127029a8cf2b96b7374d0900adf426352ff3bb4edbf866d31ee49727b43f0cbc69f67057c938cd58b22e4ffbcc88c7641bb73c58c70c7ad6861ad10420e350ec7418d6db597753eea3cf2bdc2f6477a9f6521b6c98912107984406130a15fe44d96dc9adf065becb84a6493c37159b59785ac504b104edc8cdf6b2cee0654968025bd53a3e928281cd5a1466742ac704ea47c5bbb10655acbfb943b2345fe6b87769661a947c33a3e6411a1577027f2ef49f99fc08e3ed25c5f2554786443ad8b11d08d9828146a477f1c6b3b03b185a0fd8be40394c18c67938440956d0da2b37fd49d189403005fae2a6bba04346f89479af12c29d6cf15201bc72167439428470959d3947843ad7aa36a7d7a97f9d4af8e8fe25665e58d8d50b0c55bcdc911f1d68b6e2f5b7c5a6aef302c6dc26ba6bdcf86cd225614f8628dc52850938a9705a5f9946e94f48d0776856ee59c0d2afac59e969591a57e2839ccf34e7c1ee20cdd6ceb570bf06fd7a131ebeb0f2685edd89ee5b7ffe04666bb8ecd5e72cf198ee5ac1bf5a9bb2864d6fb4c860300e21f71506191860c79a47dd35f865de365112781cd4d549cdf367ead39bf5ee16716f67ab32a0f723e6be66250d023a3ed1f0ab3a969f5dabdd3020d599d09123c5cd1e5838a835bbe415e054944ad57da3ff609565075bee9c5c8e45528ecdb8a79685978bac80d21b14d82f2e9e34753fa534d7d0aba908b943af9d468ef8379f3259e3ac1c8d18e401ba2f2c7adba81d68a45c5a0ae98cdc6bf167f66fb5430546f7b72a769ee2d78312df2e6f4fa8b5d01bad719381dd5e5be01fe29f694d823adb9c87595ae27e0f5eb994f9e4d9a1721735a7d3f69cb79a183f8b9ca8c98e94920e3323357a400d0a4900995fcd68b523af7d4adc2d808cf64161f5d84992daa786ce62b32cb612b1f7e1cbf4e6641fdd556276971241cb06cff6299c4027738890a996587c58a6c250c91068d73c1880d1e7d5bbdd63cac635b8a6493fc505b1b6654c89eba03fd7ee26f51ff24945daaf7df6bf016f12b10d4a0a83baf3e7bf5271e3ebed15544f2a7be87eea241e2748b5481510ec1953c10aa4c0242cb00e0f600af303207ab49038692a0145081337fe48527e33752afb7b33831de7f52a47b01013d06a1984aa0d0595ea349a1ae7e975fbbc0d8ca3172c0540faae1d9095d291d2b75ac75be23a3c46f77b5a9ae2e76f755cb2e668ae9db88e6cf79fed74580eb42a6afa96d3708bb1db71c03fb3788353c2cc08c81c30bbcfc74cf27d5da0f53ccc2329c1f820626ae8c04165d42d602ba0c16a5e0a859d89bc26cbeccc5dd3e0ff0bdb69caca5ed6b1df74a9cf766441593b91a6d42cbc409e1d72984adf2925459d95fab5eedf99c937c077ffd42e596e83051f1366c688ef898d2c53b5739e3240dff1640e73089151cb5cffd72cb853403b4332f41ac742f381f57171319047ae2fea3f99a7b79cc5dbc549efce02a9ebbaafdd3547901af3e7a01e82e1cff83dfc41b320fc3b6dfca85d689ea0acc4fdf9a15caacb57fa0324a8c56b1291b668cb945924cee8677e8761d654433b56ef7ee44bd514a342a9df6c10ba327a24c7146ebc25be532bc41f8f0db10422b248b0d52544c1e697305e865ac0c00da5c17d1d369449101d55c741993581f7799245f0736a41b65a6f58743e4f59b0cbf05c4c6300dd93debc1505e3423b2e1f4494c2b0c612872e9f23b225865e07f9cc3858cbfc0a42c25f9f688677ae3b05e833c857d8c2cd664866cc9b364b77d1cda7eedbd64dc18ac8bcc5fd3649a2efe5997de322b11da413882019bfa084c67d115b1d2026847a7ff3caa21e9bfa1fd53c5fed249bec6a590e592b830bb35a430b49fa7a130023fdeac33f8113a5282f92ead06eb1be2ba17fe44b40db880fc80c281e4491c909cae86c001e5f389b6d43bb3761b1075a85433df3499e7759647a71d3102143be5fa311ae36cd28ec06b52d7c9e085c997d0ed2ae3dd315c9b10ca3b34d500494347150947aec0a8c946dde2a8436224ae1195ee66e07c7c326095a598c9c803dd1f9a54d5b4a320f9ee429dba4a8fcf15a191f368abb21e84c16f2203e754b1dc0928c53485653e77eaebcda8fff412f5084b018f44b98ab8bac0791e368c9b678e27220d29ec4a6cc23e3d196a7a3476cc29e083b57b08f7d4f17390be5908a734ff3407a9228cffffa5b4b692077fbf779557ed06dee0699568d80187a142c38618c3cb0ced4c592887f9277f8439f991f630753dcc5935878e701b9a4e8fe409db97005a37d1a1c54bd51339daab4ba0b431c2642cbc8432cb0283fe46383247ae774f9ce764005f5b1022c9ef1dde2e37237d82e5517d1d8858e4bb7384d4c7fa2c60d9e54d9e7d1e72fd36add7d9c2e6cd4da0e16049d02b38e4dabbbdf311287fda1919d4a2a7fcc34c88fb2065e52bf9dbc507310fd31e6b2b620829b6ae9e3566646b4135655dcab6c7c042aa1d6d6dcff93f0cf8afc7b9625b41124625c619abc3c3db7e40a950e4fce683cff515f2d04471382ceb90e931cd4ebecafe07f2523d09eba6bf481d7e2f542cfdf2895086af85fed20fe0c53fc117766bc2c88702db25b9d46ba3f92b66f2845b9e324f9a4164a612a31e13353e838151f873a164a4ff8d31ca20ac93aba8d5128078b7b403f4781530b49cba4d7c29a3286f081fa07fafe56628fd5f055e654920c44f7bfb1ebb033e092877f5eab48ada2484dcd78e6617c724b5377dfc7e29077ce09833cbb90453857f143eb36b2d97fadd435212fcef737a9cc2196a66dabc0a32b2b3e1b83ef990683830c096b5e659dafb18f4b796f4947aa9e3906583c7d40d72814a01dcb792ac8bd4f97d4950a945ad311de034d2d81793e357c54cb1443980a7ecdc0415f313b7314667125c52e400a674bef093b03b2920a5cc5e01c07d832db190df9c1b65614f909e3792bc809d7ee09bf3c183ad13a264c4e13fb2a324197f6794d3736a3337bd68e17a4fe02bc14bbd65e3b836f8717af3fcf481710a7540a74b4361ead5f0b70e389d74ce53779c6d6d82b99e8196d1a2d8a795b0dd49db992e724eacef8264d763829110bda9bbf33325edad55184f189de05627479b388562eaa37928f6ae0d8bb1106f105f8f97e054bc2a1dffde9f72272ca0ee753fb31233c61928537cf6d7b357b3f59f02a19c988edf8053657d7f057fe17aded86a64d3215498a1b5dc700fd0a41373fb588e77cb92271dcbfbed01b7b494dfebf480541af220e943057d4de10913e26306df7bdb0cb965fa61e4a43cdfe47e60978f3e1bba67320dba27f6f4ac9cf420f1b62c2715df31d9f78b74762a11c51f9cb9178b751684fb429691705357b21b613c111575418b50040bfbce5fc4bc104b2569d2ebd4e7f5e7f1a6bdc7eb233ca099b20ef3867a47d28cc1aa44a46a1cebfcbb58e44a64e3ef61bd43d001506cf5f4977b585607a6a7354d73a35ad729c6659684282002ada30d5f6935413f91a77549c26c5b3855cc2e2792428d0b20228981c07efdca3c4b1e1399c052fa94ff464f4df73a173d89a0d76de9e60fea48900474b089c2762fbb623b37dd895e458c3182c19eac4425b3e56e620cea6d80a1a706846df444960dd3b56389f2d6c17278cb912dfe53ea8edafc74a9a49311e4f3dfc351688fca3bee700cff3fe3ba1dab8f318f15531e5a3e7ee662464345826f6735dc253d116e3bd4fae7786f7ab85235676df92a0a3e975e81e1d66562a3a406a1b73337b4ce434af4e8a3614769f527fc6fb3c2f6636f030dce5fe0b16e1825d08a9a66fa828d38c4aacaa16a581dccb83c49012af04dd552d0e69e7a0c552a8bfc62b12db3a10730d6f4162baf518c627dc6d1ed0eba3c1790758605a5e37f98b594ff9388082001142aaad1931acfc4d92f1989e53da026b613809960488abf5e383a762a49e9fe0b7344a62efffda4f98ec1449c5e6945e9c9747f650eb5ca9f54491cc0ecccf164d7ccf0a8887ecb84eab0675ca5ff3dd19e4a00ddbc677f1ff214ce737a30a0c65e2bf8293dbb01234cd0394c9bcbd5179aea62f0db07a8871983d36b7a7dd5da114706d8a71a0d7ebb080495c733d763c53dedc5f2ff0b7ed27e75cf741a5648f70961dd4d04b93c3f400e5eb1a0095c2829eb8589b671ad24edfac7f071ebb718595361b7e2cb06e060a1d0e27b35abca97a2572994a1bb17b8ab7d77e95ecf7d20228c6e1a0c83a7510313e12a21f8b3705b6458016551b3c7d01690ea76392d441785f916445c9bf97c4e361796eaec9a5ed3a16583170102b1bdc4dcfa9d30af7a75e03c3b38c54156a96aa85b297cfff3cd8928c4b4085295989a28b3a28f479383acf6b8c02b11d74d04473a5e6b86627a9ab2f0d1d09dc6cf9a3469f151f6a9d8e4ab859cd75249628c5bf931c216f2015b6ccf1562cd8a8b4c69e3327ea3069b10c26873d1eaf20f8b4c61498899ed8b54bc2829c5c82af4392feb0c1f36f0f5b9a52aed1fc31b7d88813a4fc5f6993f0e0bc5b40178ed31e8ef47273b96b00e66bb93b3cbc40bd40b644cea81153f4610c26c5f1fc31d6be10fc02cdaad8e0d9f6c6a6dddd40c3b9c5c5ec3c5de26c7e247e6d2269300c9adf91ec30462d11aec2079c35bdd64dac4d13a81983998eb0d04fbb41ecfe074d3132993c29dc35fd63f865b4fc65cda0a2ba6cd030edbda185f72ae105f0393dbc7a9451b46aa01e4315ae0c0773c63f7d36b4f0d4538bb8bc21567032bb24f4e7c65801846cf2b9f5fbdf8b7d74c9c122f51aebec6f7b6ef94aa88ff1a34d0b39926edc0837a038d2f764b3bd0d4aee3a81f931e7960f5cb3dfab80c16d33d9288b4341be6f3b1380a4f8254491bc1f2a79fa53646bb9da725cda03307d5be74b0d7fc3157815e28590e450a2b6afbc892978d0d164fd90bb4ebe77bd3837ddf7957ed0bbf6d32e3827c3b665c0987ecd2d0f2abcf65cf80521b36ed63259f5e4bfbb0b0040054f3ef610d6fc5408be6d0127d195b45a78d6726358f9f034f768e8ced28107fede00685632e4e57303ff324d65ea0378abb5bd58b6b6f64b3b1aad34b7cc935243031afe3a9e0959d7ea2d0a4828883a09196eee189bc92f396089573b31969226dd7a938ea6143fb2b47dc8f8efa7010978039deef6cd338ad0e9d0dd5e7620e1e5f3908f9bba971ce49114189dd47035581802ba76970aa7f25b2c0eb1a6911cc3328fcdcd40f28f010375f7b1b51a05402896fb999b17093b59b34fb9cc653feba3dbb9d96bd47180416946d9bd3101b691d532be6ddb3712721121054c1fb3c5c42ee44e7faf7cf8d75856545187a3220047f07373e9aa2e10c022f2aa2320f81fd3cd7b110609c131edd6e016707228d069a55731a4ead4d24ab6206b01ffd91384e60db45a907fed7428db707de721aeb4c1b84baf61ad230b6b0d034eb90f4b9cbe64de2fb98b6695dcc4f4129aa2e7a3f635166bb72d7faca227076bd5013495c72ef2e7dd8a39cd532b15d0d53307c1834c265c53cc64890becfbebec454afa90ba973584e2d3752c7c6a3b4f48aba8297bf013b0006e3b08ed354157420b559b963f7b383bd047e94745a4615a3f9239230804547ff93d19a657fece8e02114840504b7fdb9c9fea0a4ccea3ee304a330fd2b0d97191f9be86e8968a9fabc847577e08b468b4f7df43f3fc9f8b2a2ab760f4ab87bbc51b883d4b8b33ed84e4f93a1d359e6995ea1962bfc0bca789ae36e4c25717850efcd708155f52fe09f1de76b2746634dbe1290524bd73d9db5f21f9d035e183dc285b85ba755057c769777be227c470e3679ea9a7355d889bb8191ea2ea7e2eb9285644cf8fc47139c644d800e2319438f7eaaedbeaf23a57437cd1cec755ec327787c3b8e127d0cda2d719b3162625691c8da32720aa657a7bdda1986f0152b4804060fb3be2fd1f69ae9f5d462a9ae04008151d891ea081ebac0cb443f8e8cbfd10cb2ac28e6c9b852bf783e4b76b3b0cda831386976219fd788196d8b514f5288950bc479295ceafefb0bb94452cd5dd856bcdabdd208f3bc39ea4bfbe7dacad1aa0242d981f25245a3958b75c364d2c993d905b38727e210db2824b8d797ee53527f6d6f75f3bad0c100fd0753e0d847677003731ce5337b77ba41e9a9ec88b7956a8f648dc7e8475c3357228aa937fadb6a1a2619a9b0a71388eab7e6435ea47babeedf51d7a4507d16e1edef27b78bf6ad93f407dd1f39ba7a664a15033ac30d2bd2094a89b8962b91e3910ac31fa2c122b6046ce849dc7178ffc9be94e2bc52d0850aff46eabf6e8ca43663e339e642b1ca7fd332f636426afb5c6a5e1e3652834e09f87704744eef6d0283f1cb008343198cc123edef3438a32d9fc9b8da162d742ebe82cc5cd4a28620f1539e978cbee954c023f8b04fca3f61e83d764fa5b440a3d8d10b20078d37b635737a54630c83ff579add219c081723ca22223d0802fa8dceca8867f099c8edd8b727df12132fb40ff065e922db7299cfe0824e45fdea1729d70dda95ac80ec61896cdfa1bd349b6e8d58b0ea299aeb7edf5f28668f5766705f602100afa8dc585012fd16f0dcddfed97e20fadcd5425f878073729f8ba52bca4ae3398b88e44573e2e07b966da2473d9fdf5cda6cc6fb41afd87214ccfae37f93c84626682db15ca130d7963011d01f8295180da79ed973b2fe6dd8638d1ee8037a316a90de24721a9733d86d5321e8f0eb345bcdf38287528f6bd29887676c629e023e4720241d14bb96446c8fc201b188baae28ec7ce3573075eab210437377dfbf89d71b3bc5564408c274ee3cd08d16b1edfeb251f1898b9108fb4f3c650be2723586f6f0d2a9db923ace9815bf4c3a2200986c8817b048ca14b96dd9abe65222299ddacbacd5283a94c3b4d835b59e14ce3e43aabf930f25f63592a2abd0d5d84d63ee55bca2d20ab8996b0a9a91ea8f41375f3e50fb86ac97b7e420ce91139b89225b1568d8820a8e98e43555a8c69c40cde7cc32b05866dd868eda7cf0b673c5204894193edf41ff0a48e0d0c2d841b44603ddcc7a2b5bb1ecb6591eb76368e9a7de58389d92b7f135be9472a7cb8883ebddf88821a894fc2f85231aacc483ddfd44eb2bbd42744d636fd8a31e457996049aa5cd6c7618a49822c2da9881cb896aa3d55c669881fcda8234cbf1ee1bd5d9656c04243def936fb5bec4424249d638239c31603be5e5e2203052e6707628b164d69311a722affc689d4274ae03aaadebca1472d5a8efc57155a1c6709278d6bf6ae3fb5ab8e28661e9bbf46d03ef1324e66c660bd304c99c2a1e589978ab8e9fb05caafeb91257c829978b28518bb0f579a102876c0b38ca383266902fab222c3166e63c2e29b5c6e63d0187f368cd870a1b0ff17eeb58220545b600bf5eda8d746a76bc1e0ee983a7171e31f36cb102214154f00e8e72cd1bc0128f31aefdeb02ce232591a93b26f48caacf5881a68d477d9b2d26dbcdf2020940e58c82d56d61fcb51f8fe2f2d755046c082b8ef2500236aa50cdbab3ba408a08abd8c1a83c1b5af45421a158c053e72d85737ade74ddd54a000c136a4d5faa34891d55bf7fb852a7694eceb306759eb5ed382fb2215dc043e5eace3bd2e7d08a266425625fbe4b98091f514cd4448fcce98394b67e0c605da86fd46e715e66d42bb419d804b7ad8dda9a126b5047233a215b9132b4711d60f1a30b4b544ed3d83f16196b952adf4f84c9fa58a206c2c63cc80e6dea146013678f5c1aa03e7f5f0b910d613aa04ba6b0b4ef5af309d53ae3d2f3b0497e8f3fb33aaf2280b7d230372ddd031da058590662daba6bd9c25cbd822843f93614ac7dacedac1a4034156af2729963b26e322ddba4c131fdf3f573df966e21c455226ceefc0096610dd44ce9b26b375ef5f7ce2733b46efdceccacf12379eab1bc692807c6661da2c536861986c0bf2d5571904f71de4962bdab11c1b8ab7b84af485aff3226d78cc403c08bd6e223a6f7681c5a4586ebb2275849563e4dfdc59889aadf2787eba67203a1458b178c5241a4195096f37b78749cfdb99ba797fddef2bfae8fd2817838fdd2518ba822b79cec30394e6e22390b3fd5f0b90172b3e94c42745150c38b7cbbfbb7c0dd0c5f7109091e543f087f560978057ea3b56f215eda395546d766a703c37d11fd73d226c44b0690ae54d1bcc28fffd4d489b9eef2300683ffe592229ed2ad65527e9625e39efaea032fb8a531c1e7a2de161ab8ceebe2c3c216955454d14ea6225635d42eac014a85c0bb791fb7c4d0078319e7bbb4d6fdd691f9a4ec6869bbb622379d6f1a23987d3062a154199e4598f93fe38133e919847f457c303e058c560b22e76c9368bc33a63583988e7eebd89f1214e80f23ff14080243e6fc2a0149398019eebdd99eef4bbd88b3be6ba9119e1ce3b8f18c97ce53b760d749e002d9d3d89dbd407d27f94681186c526d67891de5b6b8802dcaf989ec3dcbce30774c01b3daa1c55d3d98c0099c8cf28c0d8a45f3f6b1650d7edfd12a418a332148ebed983862f47fc916e1de7adc45d1845a3dd00c6c47349cc654f7d4db1fbc5dfebc0f1fc774edb4b9d0871c21f443b2412e045eaecfab0df73ade5e873a089ecd99a0f79aeeafe4cab68ce826a6ea808940155642a579b7baaa6447572d0df49faad428a109cb4390ba7648b204cfd6789a8d5bef70a68457cc13f810a0d345be17321aa56e4bb85505cca38cb6f99d5865f4d47cd83b5b15c972d77d3a637b700943366dc4362a5fbe16617d6370bb6fc8d02bb2873f233dc9094d65a4c47cfea88de2c3b49583f80edde94db33d1a06ecabc75922bac617f361c38f86fe32b01b9a876de66faa661da7a5c45067a064f90c103954b52beb70019fc4861a83cd8bf28e3401cc87f112fffca9dff637d3167c6e19c2363a0168714acc4f1f599f1f1b5de0aeb502e3166a56c60bf3c6996b8249c21748dba0023a2d6f87159b6c009f5e399430038250721be1796535ff21a609fdf9f0f61266e3af75d704317d5506f8065c487218e99eb4c3d4546c4d607016901138739dbdf437a5e6f5021a47d69211ad0237eb08768734c2c952cb4f69d94306273a8a2ff62fc85deff88afe99962030683a43d683fdfcebcad1c11718b8e080c53421e370fea6e3fbfa17a1d66bfc8c81646a7b4c7fe2f962d076df051c2d291b47a902ea0c072120f1075816796d6a559ba71e5a73af91963833d0b96ef4a6305c6cb3ecc1b3be66c3a34de0283b72edc841e733422b5d70ef4012bb14fba20d5cb01fff857163d55933a5bce02d4b50d481ff61551e05f7dee5cc93 +MD = c3d2857baa3896925880fa8fc1ebfb89e967408a3f2c5f8ec76048c62919af53 + +Len = 74520 +Msg = 97c48db566c5851f70158970a82b4b617524809e63ab39ca191c71c38be9e228703c1e19f7deda3eb5578d0be2573a42c65489b96e751d5da3af22771d2e252ef3f6294d56caf7477f4cb579e667baaeb5eaa1e87c759c5e26990bc12c3b4ec30839d7daed518341b53e2a411b2375ae2a2defb4f5745fd48923562920d904f0974f4f47223a27353f7313ebe85510490d669ca4413a0ec7b495283761d0efbc887eba1c5f4f8a2a053499ffb7c3368846decf41c88f503f8e37ac7457e8b82fc30f40e20b565528eec8e406ef368d71bddab111f33bcd45015007676ae80751314a08208d182f38e4791b88f776bd0f5ba56a9e28052ee0f52a6499039a832bb8763b5e4f5dc160cf8d670b394b6f6706862170d0b71b19500be99088c4d5c441dc0025b8ecb2aa954def191c7d4b83a7c4ff0d54173bf7fb3cbed6632fa524b5c580fb308fab1e1f01dc3908d3f86a27a82bff1aee3782de050cf3faa39a54fa77e36b1f0c54c355f155f465171f246c7acdce8c03b6c2e1adfb6db7e85c5bfa3b50faed2c54a11f6483d09c0f67ba60820f00112061c0ed7eb2ce01c594419b58ef3203b754c066a48d5713847933ea07171f100be083e8be5a9d3f03ea0fc718e99ac775fb2910f79c11333dfc97f1530db3f38dda13bcb61a63db6a05cc65c166baa22ef2e307a6d885640499ee5fac1a42216ef8794fae1ba73cc28e805d9c8d1bfda9e0f631f8683b0f9ff8411b5b66560276e1bc8bee84f1cad32c3397f187443eaf6e6b783775bb9ad7c0970da71876fe6d3de456bd7ecaed6588eefa087cbdcf084449c3a9268e6f7499f91dda582b7d1ab6fa9a6531b80d3f49b87028930f167c0998f998a43bf43e2d6e333b50fbe746f2043e2cc445922a189ae19af4c17dd36560044a164a93fd21fe37112571a4b9990d2a5b60f9e4ee9d9b33a7c85b6ad402aacb08a543b37820b111a502121c3b541a46392c5b6b537fc34f9537664748857d361979afbb78d090a93f0d68b894cb357a1051f39021671a1dac68697bf799e22dc7b91615c5d9a2e7266efade8ba565ae26f649b91ffca9853684ec6ea9e4e098588efe2827e4f0b4a44e50f7ea8ab3cac544e65016e7777079b27788260e7f5f151ff15c669980f6ffd5f36c772425b6336351bbcecf8cc4be1b933135c0c76b46957619499f5c97802a6aa3fb18c65ab87a12640f5df16b4de6c7d1a0a2c1a2331716c7999f8c7d6f763d063d119b9e9eb1b2b1a139ad4b6e3c9cd02d5b74ed23ce57ce1e40169214e0f5fc07b5ae6b2b31b80c4b0ac84e69459996a594e93560e1c497a02b04bcb69119ec1fac06a7a922acdcd6784b5b8528468bcff426603079e288e7075ee59fb031404e9fab3c5eac17880b2d3d590c0e2b1875243557dcbe3b0aba7d2af41566c55f5c36a61093f57f7aafcea632441ed1a35dcb1e03abd75686e33572d161db5eb11118fe0d8f286f198d068fcd7681bf965092e74be7edbb6228d63d64cb36839e35eebb1a9c6b6ccd6c7aff12e95e7d5716219a16d627f308520994959aa0bd8e8f5fe61e00e600fe13d5fee9e7de9450771f3e4ec2ae85de29757e4c184093e9e814850304c3b2144bbd943ab6298be73b34dcdaf1a9f94e74c303718b3f8d1708b4a3b0f0270a77dcdacaed9f66ea8629097ba2ac41d8befd9a2bec3cc43380b7e8450d0c3c91908ed6a7eaeabe3a940b46238e3a9ea8988aa3ffa573f80e8dbd5875029f2acec529563319df580179a793dc86e5e7f443e48586847802a5a4e1ab3a77f3194a7f74057763c65dca9cc596af72f3454127d3e9c872920b802fec8a9d544e308b2738887aaee6f41a672ffaa33aaddf19ac1e77ce550a3b2894a79ca481f9971b233d8a45e488467b41ac65c1c65bde033a8fd69f1728b9243dd78a59e63c7782dd4bb1deebf47a7492038010fe45698839ecaf439e34aefc9047fbc46c5ef846bb2aa54fad72b98ec3fdf298cbb2a92e11fea9c3d4764139f7be98ecf9a941f127a10fa0104a2b4f3a62636113ecc5802a8d6d269f369b62d90309d976637b0b887a97d7fec3f74160fa7d74c039e603ed61a274e9bbe3ff9ddff593ccd5cd1a467be4fe5e2646ec9d8ce5d8b8e23441c041f1b6994e4299ad1a0423e14760a8c96d9f1c17bb3fd75ae24695e52ed6c10cf602f39737e0b7707cdf909f015b3c78176f3a13ca0b8afdc246b42d67f50b3a497c33cbbee4e14ecd2ee2ed4ae75fbd43fd5f399bd18df0f58d3c7ad3b8a8b0ff087e1d2b779fafd49821b26c2c97ffb7f1937176ba699943c435b3bc481fd8e34ddd75c5c07afb5ac656d8ad516fa73cf2dea3a2eea5627393a7c068ccf819bcf457bbd5e8f99a27608946567f6c1b9aa849b76894c9b24fa19b89206dbcda51a4f5d7a316a5f5030dc0e4aedd18c499bcdb9610d45df09d9718f52b53f2856b06beb177730472b675059aff94fa0a01d69d26e2d7ea86261c27eed3a52281d2c1ba319927a07a07415f508fcb9a56999d955025c5f8dbb2d9cf5c5e8cd4364e7ef14050590176bf19d7eea8ab810e2abacdfd23c60d5709761825152f910ca7e56cc4e631adcca6a4735c905c369c7cd44d132200b362f29a0a3240b7e06ba49d32a6a1d82ee6848b3d828f05416657941b7c6b9e716436edae6b274b4abb0f4f4bcfca760c2a21753d49efce2bd683a2411e46c6cfc59d190bb811145664aea2c026a832cd02450b7a97f6e07b52c7a5c7e3faa156edefc3290248398cce4a3f98928535fbd5b7f5fc56ee63b944ed46b3b1d1568d45f495112f12e37461aacddbfda7a71d0a40dacb6c1d7e6e13bb2c0f72110dfd337437ca29b83a978698f5914e57afbc0ba863f0c3cc5a2127faffe30d03f02c2036515cd681657ca3da5fc36ddd755f3fb7377241421f5ae87169356aef24a475038ad020b78dab2239b2794181228e0e34ff59d0c9f4a1beea100f711dd4ed98a38a2deea0d9ad697d97b9b48bded2e0e962ad57a7017f112b9c780ad4268df3defa7b27867209e26eb58dad42d0b11d9c0977bd256f7b49feb6791d5e420eec7c82c3b5af7f47f3d3b5fc15f021b52d169bbfec8b661ece290618920151f8ed44c90c7f6429f006763e0ed2dbf866791fc18bcb210dee0874335f51067bd15dff785e6dec988b821df9cccd4b7e4b677f23e5422e8d7560a9e65642b5e723a47536c16791f3a0cf918d3dee8adbec60fd68d439fc0e3b3c8ec6044e55be752a6eac3e559963b7559aa36a1edf36d1cd62386198d1b7c705ed7c715b30275056b282dc1f4d0f597bffe3594391b78314763d9247f6b0a1248cafa5528c4b3b92085fa4aef5200dab8af41446e988899f011c712fb32251ff3308a91cb252be463aeb9ce8d9bd5c4d017fa3102fce6bd4cb8006364f355f00ac2e849fea6361d80ecfceb6400fcdc72d2b0c88abb4b21d9b0f58451410548ebecb3ec57ba6adb14db34201743de882d6a15995a45fe5e13b716f4548dcb8103084e075af442939bf3effafbb7035e6c489922164fa8c87714f531c34c011f0cb037097cc655ed82b190da95ed03d5cbe8abd1331ab2f7906510db420e5e99557f0f9121b30d2f75aec74d8a484874a8e4ce453549a571ec21ea3f35472c7679cf280d0e4ce0ffc155e3c23d7b59b19fa780ec815f18bde6c5f20c3179034ce61b20fb86f679d5122176e713d8a0232cbb6445cbbd55421cebb890bb367b73270d8adb20322025c49c012ac202c43fbc8ad8df69070394faedbe8b36e1ed8fb8f0b63a6e927c88754012ebbc6c2e6debb06f17edaeac2d0d56644a291de1f9187f3387c6a9f76390981cc86787574426a6878dde26b770d0b05a6c263ce155d1f39341cccb295d932e9f3f57d6d748f9f7c2bf9f01ae16c176015fa2e1741c521855f6f5787acd195e0acf01fd16e2c20ea11bb4b1f8756c31e993238e02b32537ec25b55474388fb0ffe5fa4c9ea83b559320b3da3f134d5e83a52cb525c0d7fcd64c90c19e3662b1df12a557f71fb287197d20ccea86c166501432d955bbc6b1a4da2c52612d3efb38d397a188afc40db47f601c733684e3ef5eba6d0b0a9e00c86ccc8955b370d79db745bbfbeeec43f4a6164b71a8e451a1f33802be43aa54b16315d8f43fa4e16e2c43f9a943a7d44a9f97dc5e648c2a2850301cf7ed9848005b8cc3c54847a33aa0f70d1944633936ba8931a1efd8f7e314473e406ed43535c485cc3153e59773c3f348d467badd49855f0dd4a1472552bdc1c9105deab6b22cb574d0e8eb28b9f3ad4f63341b5ae39e8da37f3f734cf79b545ff021384715f280301c8dd4f16dbea9733e20111c955489a50a00d9d9525b6355685f6960c1b47a908ca94f6c1f935c76ddb218acef45f784fd9be744f37c636bd16eea8e55f1090899c1970340005aacba70be8651e14bb5c267283a5b5cf8e5c3e6384a3326b02adc7d68516f8418a76cd25f335dc4fada11091903da9b8865c84bdf0ef9d40459cd231fc10ead1ad95d5d973e735f894431e8364c21a6966e57165b571a777a27d45949fc9dd9d5c51488e2f2232f8b96dd9b1c7da11c9761e8cc19bd058f86178a96634ead98cded2adabf08fda356445c781802d95c2fe305d3a69b5b8abcab7850f841ae6887d3f8c9a7ed63598ddf3725c5964ae3b45436c39e9c7d078255f61f757020d797fc06ec2a19e4b096ba062ab1827641d947d4224e1afa748b99bc586754955452d7fd98b218f257157741dd4861dc04e330966641a144501cf913a24a598c7d5cfa1585dc552cab6ea962d416befc9b76a0d60625c9fb38daf694739b0976911ad5170a0568f42c2692f1a588f45884081b2b9856ef8f8d2a14c752d5fed45e10eb5abbc9ded967b1f666a83b9c503d2bf1ff8341ac61cbaed624b687843632e3cf5901a5f15cdcb5364a729b31a44536d7da5d926b1282cdad25152c340c9de7d3aa72067afef994c5058b143ea53add3f348db5b63230fb1c50f530a8d81db1aac79377c6205cc5353068532de36c639aa6aa28181154dbb620ed413d1930b5b728dc765d6154eb095380c479df788e7c9929660b607cd3dd2d53ba7b5055887b56b39ebb42a06ab3d76ae4cd09ed92479491fbfa7ff77823cecf28ee1e1a9e89c9cf3d6a449dc8c7449d3071e31a33ae216a568ff0833d1c9dc5f90fc2fe5c450a75fee4d7cb89a6137e34230bacd6f2b8190216427e971a02cec75aef5f664f814e4fa58ca821e2dca46c3ad403f0c7d1248b37f6681abeb640004a13dc310bd6ce9c46c3c2260ff8a65533ecce158ff5235e6f7cce3c7cf0d02067a0e340fc736d81232d881a800fea6b98b659b9ddac8bf817461f80d76ae5c44e47131ab3dfa18ad52a8853e57ae72bf3b13552135fd4f4ea02ea6c408cf7583856ca22a4741115d73b417692e22322bf6def72e39774b13203ad636acf8b58e050a6fd50f912be93d022073aae34cc666cf690a0dc01d999f8e71a98bb2842c0d5081f4ba75ce1b5a9d86a2f5782a5831ed93fddb602ba8c3305d66cd844a244548becf737262b96f8a333f376932a9ff415d51c8dddf08342a84b599f76f3f54f90fad60124f8c27d20d91973fce8079d1b04cfec1a0809b84ccdd17925b45e36b5cd8a9dcfd5c277efee23e8165a646a77238a593d5d9a0441f2871dd77fe99a78e967758d5f11a96ed7854b75ee40fcb8d5be4dce8dbea7464dccc6029311fb48b30f20f3d12a620c19d006923007c43e7fee423404e221b834253a4daa81c9a3dee41889e89732664966a201bc234196a68cdf045faef4263a22b30f32939628b178d4b611c2aafbdaebb63aef4e055fde3c6cc5fa7faf0ee447f8cda7d1e135cf5fde1ec9473c4b42c1bbb445c27fd87b5f73df61ceb2d0b6f7541f96c72b59acebad1a9b8f56c3157b1af45c4b21bf22789cd72226901a26d35d6b7bddd512cebeba3fe5259af1c79a6c719f229b62581a4043b811c759c84e8d37b3a09edfa94b9e0552846955dd8218b29ae32d7080b6f69b901ad90dffdb6c1afa99b94ec104c0f15046527ddbc4b84dbc27885830d13845569c45b5420c626bad33e4beaa9cbb8a6ac5e6c826f4c3998f4a1c87eceb8dd758308dce334418d0480981cdca55e6470e8d86c35384b32c90e56a8e19784fd8315221d75834e7bf577510eaa4d2f99db827c30df5e70f8d4d63e2e94b0a26be5e8b926f053167af58212293ce963e24f40f1bf662ae512231502617f6138af05c476fd3eedc1116c6783767ac125c434ecdf22b4e4cf081c92494a8bf26f52497101ac459976c9c2ef4bfc4d1c9bc9f24cf05fafd459632917bcef9eaa6edb1bb6013bef9e5d285fe212c49b44ed78f129ca804141a8aab16a035aa1d25ed2e25c1fb022469fb8ab0882d44e7f4459994a158c5175e7651c54c5937db266bf052c0215c8d764010f2941364c16c8f553797a8cc6b63c1dd19daaa01892af2beeeb5271c89ad38af10cf7f27f51a0d3857ca0878a4dcf583a0d5c8b5cba609e0464b9cd0ad715dbba7a4d0ecd77f57c991c31858482c9a1be6c805c3071a29eaf5edd3076d6517cd33bea9420d2ee76f521d28f9c9c527dc581c1197b019db557a066a2f4deb0f6a217788b5fa8b44b03532dabbae59176b715c4cc27b0786a64f3fd2c6c385acf91d69cfc72426e82297aeae4c6a3af13fdf0347c1bc75c453e1f4ad4c62d7692073f00ee40e845a4d15db13fa81fd4dcfddab7323f8d70cf4eecf4a4ea032dc46c1b4c69b3e1613862c528c649a1265a209bf5f57b4cdd8ffa22a4a4c002a6ef27322876b277e9c6447afa808f70d014cefa98cdb74aca0eab8801db31740a9aa24c3a1b26f005d7de44cd7563d6f89370c145c2dbd160d2cae7b451239f804e44312d62f595dff29aeb4aaeae19c75d6cb6a6ddcf27c665bd07640e7fcd319275a8a75308ae9c9fdf361832568264fc2ca263257b94254feeb0ba1b2e4444ee9d7b50f54783676616eedf094559f7f8164c24a3c862a516c3aa5d7f174ce2ea2470d2509a5b66d0a5db493c61e6aad7947e905d9cd76d44a6bcf742212f330f7350d26cea80c164f5c5fcd29470a3230dfe4f5de13da660feb02d6d36335ee4f0e2fb521d38a1aa6e74a0d3c4410a63e9950aab7dda77f3334ca9063da28cf204f0f2091dcc2e2b78b0de48db9f08208f0b694d5af70984ad5913181dc2e4bf17406299d0848f6e7c405e38c0d3c5e16928134d5edb849bd39e12a8c0dc8fd5929cf10b20a7edfce0edc7ab5b25682edeb4b1b273d00fc10fe54fc00d37b4bcdbca4766f47f6f5b0e7fc1a994dc198f5676ea85801cd27cc8f47267ec1d7cfa5c920db233523e156cbef63b5342028d393767cd6c08f657679422a645d40f197cbeebf7c76981b264710b68809d48aff0bfcf9221dca3d7528d078400a594a1a214883e970c61b85d62ab390336167ee1d6cbdd86e00086f2a7ca0906d83318385e8d8e8b8206b1bf577cb4c4559281754403b5835c36ebafaa133d3db51608a562a1f08b159724f11926e3ac42e44014d01e2200976c8ef25d89298e8462f851e96d6b7f0b3c9a5d7052cea14435432744c52ce5dacbf82189d5d4e18c4271a4ba99074fad1f9a6a23a87c8ca4ad1314669fdc1a6d7bb0a6f69f461f16dcfa069fcccce44365ac80fccff556ab733745ff55398898a33ee76c8e882e6a581bdf5eaec32415395807c17041e59eb03720d68e4b15a36c2b4eb34aa1f8d0df5c97c0e8f3f86ac127673b326923c88b9c0fb5f31baad5fdfe41927c9964909946968d2265488c25a00932be74f7702dec79622bb030777f3f2ad3cc7959f1ad60448d031ffdc18e4c536ebb6a48ddbdb2c6a6df138dd11977703ce148c13c43320a87342bfd5224b1aeb6d253005864735d49b74aab2bf42d7b96640e83ba85454e455d9132870e5983d3ab3806294ab9a8135a5f70cd37e9b3a8fcd387b09920798d255783a775cc388eed204298960b0ecc7159c6fe0b33803c52a0b569a74cf4283487d7fc809037ad40149ced71f2f73ba341940898944a180d7cf52cd84f26de332818cc582fe6f84e1bfc6f02f5cb29991ec23105937905d6702f4053b37676ca432d602431af39bc3d4a67729cf35efbf837c27bb975cb55834bee41ff4ebaa0dffe000d1cf93635826e1de86fd5a270d8dd02218ca63231bd317ecabc15705e0473f33b7a2bb85ff350d98df7dabda0c59b3b209675021326c93815713261abba7483d5d2af87e297d9e388bb6a7634c759b39f5f4802a2c7fc634ba60f55300ae9f603adec6b6777ef820243ee96d4e6ffb4c76d88fb87a7b04993e4131495fbba95ef924a2c96997b002318cce6272b7684bf4a9eb669cece3016b1a6658196cfa8be093191160766a312c16e2bd69da46bb07ef0f8f1453f61fc9830119ce210779b9a096490c996b4f8c63a30884472b3c28fe88cc713e9246c1e19e18fe76649acce3a6babe5f57afcb09abce629c8a21c07ed399240b6c18ecdca9a02adb768192c2c6f10656a3f4706f59698538f82e76e66c6fad58d7f8b2ca9079c3ded1a0b3d48376650dc490050b38745caad994a4abdfca9d955a78bc31fef069eeea8aa87f48d56af35e250173b5795970c306e2559a34454f881b51b9519e8d8a45a1d94993788895c505fe1f7ce32c1928e7b86a283764f5d5532bb714ee8f4f5778deca0fea3e639db54394eb3c15029fd98f60063e4d06c6b2a2b1c56b1f9cb4921156faa50cfb4cd58a4a8d0ed4db8c3edfcdb0c39e20d0ac4f4fff9e9ef0d1602997003364ab56c92ac6deb5bbf2729a3209b471b8a287c289d81ff39dea32757000ad0fe6224022bd806cdb6ae5e77e2eaa8da33d2a5077fae092f48cf74c449d0a4db4f1ce9d54ab0d93ea42344f5d1e36b8d28c16cf4f1b00152bfc96a340093a8ead282ec2d18bd4f06cd24c3eb99924a2aa25f668ba52ad03045d56cc1a3d07dc62e9b1654bd86d1ecdbbcc2a0617fae774bb57913c4a4de9183fa63b15a108b370c6f4d916094c5b973f02a5d5233003ec8ca8ed675a6933d2040354d4fda3a0514077a2b296d94353fcae16a9435a645c4a78e1ae1b957fbc5afcbdda7b6f2f7ed6a866b419ba728e751d00f4e0d0a55e5525f282f6492951a500da98d2c1bd640a05799d0a6655a138ddf94a9449235d3d5eb488830acd1c62ae3f827c51d6ab4b2d7fdfd1435936a87f740cc61a8af373818c114a40d78724536149d08607bf2a7ecdef16f819a9446fe5cdfecb389b981d0ddfa481d52c5aaec43187e4dd1a1878086d43eb0383ad2de300c6e1b8c00bafae263a445266860efcec0ad4a336a5b7a3bcd0a2a3504347d04796e4780b5ea7e197641ebbe026f25fdbc1fc06bf52ac246045a56599973c5204e74a12d7f1a44ca5ca679e03ce07817355c183fe9fc40efa2b69e6ba2979ccbb408905a0751333d3c5b5555bebacf6652eab878efd9dc7dcfa66935c6a9ec4fd3b37cd1f59735b93fe9e9e42f0511303c530adeaeca7e3ab2b3207daeb09cf2d2fccd58f0f431888dd79b5738ca28be1a1f7438cfd60e6c7464290c01b494fdd96cecb8a07110f04dadd5758010fb5815d46050f906745c3c42edaa68bebcb812893fb9ae15b83aa8f4fe05b0df724555fc35ecd561985233d4d41e8bd4fc6aa3de2f22c2e912adc5337dd06f3f75cf011e5bd50aef629581a2473211013c5cb4f025bd83f30693cdf2bc9e6639ec3c41c33ad341b8bb6f4d34acaca34a64d76e4987509a3d7d32e7b922363cd4bfd53f723aad22c58926bf136c55e8b95c21f870bea4aecf5dd43c1117629a19d7e220b3c32d541db60301c6f0f589550c827bed338168af90bff38103e8280e1aab0f0e3d1980c8284e38d59f542d265c441f494dae70e7fc3b35924f918dbd7177320c103a4dcfc94f8fc9e0397d3535ae0b0b73f56d7f8b922aca6125722ec490b134a45864397f4e2c281d6e20897d0768bb0f1c087d240af9b4a26c7e68fc3cb50f613b6c0e3492377dbdb9bf2a1e985de188ece8ebaeedcbd57a2e5a73ffc46623b0aa0e56cf64d94d28e30221fea91306462db5d01381c7b75232ad57b770ebfbf76ef21a380c3922c5b490750781b2b1b1a719353a0f16e19041201c0b876d1c9f4fbf6257d28183fef3122e1f6a616b3121ba210bdedfdb9e235bcbe253131011151e3414fdd6f93a6a2f5530aa48bb2e65409c6e384b2ee2a0056c261a065eb488b69a57d7620be2df90f1218a9029103954af4b638261c67fc605be256d8eef70309b08a64d415c1bdd0ada52613d3f669e608aa8abfcb08a48a092bc71282c94333f0fb3bf2311e6bda9434ae28023b4c5b9134fee870a8730448a263ab5d2bd688f5446df3a6907d8d444ba3c7924ea72c2cea0748b3b3f29fa8eadefbd49b37692bfa7d50dcd48d796c5e996b1abd24c82a4e36590ab7ad9c98697b8c6f83e0751391dca24a36f62f4ae2019ae1e32fc017b5fe91cc200e8b95a2dbe5a4926c0d2a8f1e608544520f8e7a7edfae7d329473d5d26b9e898ffd2f2b72900a3324b1ff66c50404992baa958c6391d6c7d7c5dd02547ee850cc61d367d21416e2c504009d33154e91ed70feac5259d17f79c4a1eff72430122e4a10fc6cda313da763bcb71b0cd9bb0203383ebdb044f0b33160d33d041c4a3026663dc55b0f804661a228df632c9123d1c0c8180d97b7fe6ca8708886f3656c7751c05e2f08674c8e5f86e2a0bda0ad5d26ecf3fa5051c5f6c73c7c256c005dcd5208a9cea25f143a2345d75e13661905e8f1d3eef54aa4607b8b9a87cc876e88e59b3aa263e427f5bbea2ff3a45df18c759b3a53fd0f142a040235f6bb87294a9adc7342c373025177e85efa16e4b1215b3d89d1de1b8fc41f25012abf6c1882d061064857a83dddf5c4e6d9b1c6e295184d64e12efc91cf1b687e7c2ec2b6b224bd460b86d034eba4044a3b2b4110382b6f3dfa562ea49b9740f063a0078e591645c504d7a7721b012b0b76d9ffa48b03078785fa2e42b9f1431989b9c6fa08138f05dcc08a9fdc9badad15445f2a1e3daad43c7177f6bae7f35c56b27da41fab1d7afbe7e5f8b0e200a1af00ec0b6249cd965652a82b1eb9b63b434097f7304b65b6dab466273862c88b9c8632e2e7a5e4509c141b7a46051028e7da926dca830c2bf19c77a5c39c79bd765aa02b1ee083a5564c6e4ed148a5c7acf719924ed0555ce92696eee30d78d9c4d4d05e98782fe71d51fd2340f2cb7a1b1c89ff4dc1e5cc29d9408d27245a42f0ab2ff7b4db4d9869cb649205a205c2bab16fff47b631fc3c3b00eb007fa29b92443b812488715bc42f11159fc4f933f45c482cbd4bce5f78a25492ff8dd63612166f75481e1f93a4e3af188fda0a4050838f021ef12f8897d5c81f84cd59c508b8586e9ffaccc2948f8b25566fad6a67bdb11a0d24b9e9f21bb7eb30bcc1aade9072b7acaced7b0b8921c673e47724a2715acee8751206200ab07073ea927a1c454afafeb3162f82772f7678d6ec018924f8bb3160ac6f9a195e69cec540954a3d4d92f69bbb4291dff0bfc5b57083946ef74988560d78c8cdfe11b1db408ed0eef73a34c56176a20a120cfb1ea92d5cb5f3044de3a9d454af3c12cd9b36e958d0d43b29de9d1e3bac0fd87960fa513a7058761297f5e4a62374d7629388173a9961305635b2bbd72c46bcd13ae8b1b644b40946c1963c35c154fa2142c8bb0e9f2a943a6966d20d01632492faf8a1689982587b1eff4d9c1f48d57a375d273d689cd156e81df335d1c1aa2f2faeb2c9f53fce2ffe958b3173bd13eddfc9fe5f6c34923c404c91fa03feb816477f6842de68e4c5fefd97be954e1ffcaa9392dd409e414af07720b22e76c8d8e0ff247bbb8a36ed7e9bd56bca685417265ea75f5c1659138722320697d666f77a8299cd23103f072bf4d6e1a9987acde16f8e2e3559541662d2486ff67a1ce272be1acf9b97579355ad1eb8a95aee915a5ac9e252b3ccd4121bd646c0fe553a781639eb8b8c2b12aa091f59502c1a01ffb4ed143ad22dcd13436e236dbfaa6fe90f79b9796b242587ad4b2c148897805fe26a2c5410e171f4fd62ae735a76e3442e4cb1fbb0dd1c7d0e44d99cfce1ace987b3a3451c925325be6610684b553527e7455d7909b09808b07eca200572e82b097c118441cb0123eaeb21c30edff5f2bed62477b248f8a9186b86641ee5b2a2ec05ef782cc5dc8e27643b0a1141763339819f8e56f0eedcca9d86cfb5949ccf93f395b73a4d65b2d863c4a3ef546677dbda37137452cb223b7743c9761a173fb5c7bcb7f6bc3d30925c67371573271f1a4273ad76e91e07dfab65f7bce0b241b5e4cd00ee8cb395d9d09b1a201838c7794cedc2fb2e67fc4b8c45c11682ee9418fd3f188e4979411342c8f37bce2bdf7d7c0dea5d9d398df3ac6bbc0f7b3c9553539b65527cfec0c3357929950f70e59b324c8a3aaff31b6c8e505ef4241cd4099a5a7dd791a4938e2b444308569868571222390ee135531a948c1081281fbe803404d88a220b47c88682c6423e02d6458e476d46db60938271977722f1b5d36ba322fbf698a34c06e9ed29ef1060cdcb28f49d7ef9157b3887daf9561b6fb1208a2d5e89800d2ecdd7cbf44b8802ad6c54e25003c4c468a159ef2d970fadb6533b8c86df52995e91b2a7ac040f9903bdb4790b91b8edea516a4c7a623910715849e8fb449ae859d70d18b78511744f13aa2146a56ff28ecd3b7b7644320870c4379b2275b36aaf126997bd6b38250e22a883979b3482b4893fd497b98526130b874ba2cf56a0dcd84a9d1402de3bbf4f521864ffb11f09fa0a10553eacc9f6b2bb42e2dddf2b51ad12a152089e28e11e2948354f5017ddb40c97354013949a4e3649691dc75aabe5643d0dd8d26d020380ab8f06bc1dce2bc9e1ce7a53f65c329aa7bc0ba9cf5a35b1d89df0258890940aaae8c23f9159e5c4787729d86fdaf45ae63223f0e9daf27dfc88eaf1fc2b4429dec8ee7502ef567ec3c5fb2b718527f99d91f3373aacc04b215525e248209850afa607d6e31d127b7c414ac7abf931e93621f5d7525e138bef993d50fd1f0531a +MD = d0cfde393faa25a20d103185bf34171d2af7f9e14942d3f13e1744e4628ae822 + +Len = 75616 +Msg = 35a413bf41daa1c94a914c99a652ca1c657f44e89189b815b4649c4e9b38c4275a5a85b1907a1b4dec1e48bdf04f3e81f591bf6070198345733bda4c7722921d58c31b79a113e9120a781aa03f7e5931e3cc02c0d556860ab2d4129d9b726b3238c91d3cfc0ed4c1ab890a691a49e2d53717543148a88b0d78178b688f92170e0153d2252ad1a402d8385f410a17a314f759ffdb527758f5cdec8fd6dce85e5abb488359b2c6217c986d634f965162972d7c49e57a2bb76bb93b640f09de08be6e9278031c5412d8f3105cbc465de805e0677b78492c6d1745ec533a9edadce12318f949f1e241bdf10a93afa2a4fd071902dcbb46e345a078e7a4802346a36ce2c24e53b8da74d49b415051338e6845df35b6d7f9b606af5b149f0821892506b178be4af9a374c5f89edbc98084f3663ae84ff3ea0e77ebf45b8cfb200b2a589a2292563da5093710097b4011ec64133203f138a25462fd4da5b280a6347a0aa4a8139e0a48fad2ec6b79de6f2f84f3d06ee2cea8ee8d8c6ed85ac03d6cdcc3d7f2864bebf4113f93aa1dca21b61baf1b126adc8446c0415ddecce26c1b1a2b3ce93684651114260db0af2dafe8f1ee1cd5d38abfc2c5c4249d500fbca9faebda736a720207cc2e6363772ea22ccd59d9a06302e0cc63bccbff2e6fb37e45abba79693d493e01009cadbdf681ec79975c5c64696fcb61d158ebad29db02c212e2e47c0cc21f7b44c075c8acd48fbb51adef1ceaf42788acd5481666bc9e3bc95c9aeb07f61001a1d8a3e179247d5c2fd243d4aaf847a0f54900b14ddcb876783085fe586c7a5dbfeb1e5085f71d24d8d53ed3d403957153bdfac607c5ba3dc6648cfd24acc6554701d05df7d8d9daf5bdca638e9b78c26f381e9dbbff0a565b02962f963f5ab2e122a050f84c18482d93ceca004a585cf1c2547e92101289e0118dddd3aca03b34577670afdd4334295e315154979e08806384b0b48238a0fd9a584f067bfebae9a73a064512c0679126dd40af0ab08cc424967c48dde66159a4dfcd5535def5a71bd45ae173f8a90cf4b9df3b2cf7b0670c722a76a783969d370a9fe861a7b617ba2db4ac8953c142cfad752084db3e0e240102686a7705705bc10ce887c1c3e18c2b5ccedb3a79dcbfa14c869bc5fc6373294b43ad29777b19ec5d7d3094e4ac99b7996ef2139782cc7daa94f71bb40e01d34f32f903b3667873dbcee388e320eabab5b45447e4dbff29d87222462cb7d6e8545bd56c83d8813ecb04280587e6861af6c98b3f28905f8e1e49a4af2d05fb4ea3e6c9ccad793b357846877397a675c1a5d51f622b48f492c34103bd7ea077ef84fc5d8cfaf2ae4129bd893adc07c09509ff9617b4acc71e1181c9d7e93152b13ec51a1232ebe2482591b5c21eb26e806c707ac88d64df1b4e327d673460947e1b6887c71d0be033b5e99373244f8769145052dc7c17456fc37ba8d428d4463d610d2d1382fbafeb21edacb6b88514374ac6a7bb4a6dff04b885d1868d3670d659de925f2b635757b1c787f1a0fc1bd456fa00cdbf1017c0757780e52b2d18304b004011dee9e15ead9cad8ea55da7278015e579a2a5948d417a3e59c96248357f9ebf93643854ea5c97a4f38f50bd18103fde2abdd77f5266b6914a317c07cc3cde954b85f6b8e207ddf68a267c678f4d9f7445d64bdff72a52042029245eddcce84ca308cc152df6992ab9328aac74815e2e33b6acbc63d6771c437a02535175e56c01b76174b571f1c9ea7a2195aff2a3955c25a01f80b14c631becbdf10e80fd7bcf585edc61c00d5a84c7ea2829e8972f28eacf0f3505fa601146fe3dfd35570374b46a56192a1665efe18d6fc8ad628700cfe3946a18a89b8b526c4106db1c8b58932ee9c5f834739290b17275882b224a9a81b607347f9df2d6b00412bb739ce3bd519d4e738e0bd79cfe3819c01a8a6f14537ef59fa7edaf9b718e071e85bd7df97c7a9ae04db525cc1ec99a9e5946d80501f31aa14713286958e8cf4a7a768e105789928a98f9e5e9b62de26a0ddeec35331d5f848798c7070d195088794f7ecb89d11eb898607dbb716cd76c61da126b9005ac8e9003f33f3729741faad1b5f0bb5a27b17571560af48f63eb7bc3b471c0b2ea098adc13d77e21215936839c47942d93be56b5d89eea9e6d318321390d6c2cff3b9dac91988c08417c45ed999abd514c2763b26b3ff99fdc84a27a09083c7cd56deff9d44a06e6bbd1fe9815afddce3834c6f278b4c99c9a2dff588c29d7a953e6ab4e44b597c377a08a0b794f9dad412da4fd65c6039c8e73c4422a3ae6bb60f0f73049a0e5a85d3111ce2b42a5f54e5928599c3d4fa8a0a016c14b0110bbe6d1fb294bd5989c55cbba6a95509cae4601779083e154c7b8fb1f5c5748feb0ccd2e1c0b21a59a847b7ad661d412be1136dbc2a8479bb01becb079bb6d557a2fa3bce7ee638d0d31b3e134a2ddcf9959ce51dad06cf2b5e9a59f606d070c49a5754ece94ff7a425b9a6149f2ceaafd2c9b1c2a371a94de735ed13260de3ed9ecd64638b561e7da60937d7ec8233f4a08218d4932cd0c9a375ce8682d6f579b943b55bec6177055ff43b85b9967f7108af637b06a10c469b434678a2916d11f0a28dfb92dac8e15760f8458fd296cd1138dbde8337246cd5889b110fa8145c4dd0356b0727dabc9637b740f49d40b1c405c5269256e2e55b2a16785081b203d7b6f5d4d3b2753c255fc09d735f44c527ff6c7abb660c563513ffd6ed860fad963c145e7ce160090bc25b8591816bb0450c170387cf6b6a69299e526f1df203934bdc308c1e65cc5046d020d8697d1b23150de97dfac7c701563a155db024acd5c993738bd04a2dfdd56695cf8042adcb039753264de81504801d463fa66e5164a0824eff5ed8d31956670dfe2e810f44bcfd69083195fd7b918d0e9e67969a49b6f1ea7232d767acb019afeedc04e8962a8755ad0f98266d70d395005b642e8bf5286e6bb30f90bfcdc5a426f091e1ca347d3c9d4db73ae2053702f0eaa2b632436e03734948f75894b2132ed4f1a2e6c126495e55bbdee338007df37c16d9478a0dd1115c494482ed2a258feeecd2f5bbcba17a8d6bbc76f1783093798940d1b14bffcd54db1e42c07302d0a84919fc09b46f795f917ca618e5415749c493d8a071b62f9ac62da2f5d6d17969d221059329d9e132f3c6789590d8c7548c79653fc61dc094d21aa9759bbb13984d8f174172073c6d5b40f650c11e6c02ac9a7e76945d07abc68d5f260ae7259f830e3bfbd622117a8f952732c03acdbcea9f2e2d219d8c476c2dcdf16b7d37e53c4478a99e52e9c0576b1321d45573e810307a4cb706d8d18aa3fabe05a7d1d23fd9d63313be4ba77d6bc3064697e4f0e4f46cbb9cc072afe996ef76218b7cce56765d817a8fbf97c73c3eca5e27aa3a2f940b6218f2e24b51afb2ff0751bf4147c3167b1eeccdf8ff868c53642e4d30b8b75f2975c4b10c8a964d43ff222393db67080a46fefe32ebf3b68ba0d35338490671f9f95f66595bf2c72951262f2cda0b3b1439edd9ad5429c3595a3f46bca82948b8eeeb899c8d6c299844846b750c56b88240e0e7d201d0bba4d999ad239ec7ec509a8fa33ce8ab7a7a21655fd439f1863da3ffae07bc91a756660a11d5f38866a746743ba13458c2b630f094b22883ad2caa73b8b54b148e5649baf93a6f16bda739c2d933391a0a34b94e9178a2b536369d648d457700788ccad0edbada16f937bda0055abf9a59dc04a6de8c6f2f2845c3f9b31d08fd6de0317575bdfb33233e1836487e8d7fb7965921045857988b40655bb4a7c6b5763ac5d01aab9b1342a693ad29076c722c4affe78a422298680ecbb2184a79cd9a82cf0a63ec825e5e56762d315d241bc1e03f1ff8b497d9c6993d25656de8f0e2a0974ad9e878bd803609dde6e87d217d4061f1d7157f00adc803dc257adcc4547c65b9020745d7ae2e94e6d2103f2d6952ad86adcda2b825836400dfd81df1fbff817f69b2b056f2265e707d3e31e68bff6a060544c8a737b2a9b91cef7320dc0f32c3934f83df5406b0a26ed81cf5ed2de29964e1b975ea3e1b2e6327a6f90195c2ad0a48841ddbb6d2a42d48c80197c55b65540e3ccb470dff883ce87d23717a776655037cb58f1e0c9f42f4fdb38fb01e955c331b515408a0ee2f9ac14734a49a16fcea32527827a6bb364683b3dfd4734f05b61cae1b174589c5a53a0c53fd72e48763709a9fb7e71f8fa421a88f1ba1bbd500088aa42335818571b01bd56c49f97fd8fc350bb718f4d878a13aa56cf2035679a68ff512b9fdf866eb1bc2d8657d6cb09fccc41081619629c9122baeac4c1089c06318ce1925a4edb2b5222b0f97d4532107d3a86a8f531f62d828cb18c18a991cae153d9d22136ccf91fe4c8f6f41294a8d3f691ba596c23334a5aa7e874c0f8419f2498d1ccd4d08565d232d2e3a9ae207103adbcce87a06cca93326c9de55bd4bb9d9303a58f626ac489831fc480eb01c4f02f42cd0afa14b3c4e57adc9d192ed72d4cfa53ed1f13dc693e200f1ed7d7503abacecd6c9cd5766e35b5b94edcaa72324b285074430aedffc8a63c09f11b9341c4c358230529830da78fcc7102c20d6b0210139b9adaa9bbb6f4c3a8c3491ea3d1b2e5d4cf8b8a11bf7b8eaa18201926064415e972ed703b8d9e4e91caea52ef66300ee86875cc28f20b6860a92f1601cc26efd467cdd1edc125354b8469c072f6ad2bd44c62e991c3a1f22b2259947cc85b09f2e5f65f50d61c003c6c61f7ed07acd53ef7ed631ab8f1a470102a14f58f32ecbb79e178e340d537fb0f4d59ac1d91837f077fc8f2565d07c5ff3b080a855110949039af33a5f364fdc986763eacfddf1ad7947bd7005694934be6ee3a5f280e14c54972c059f8efbb47c7ce134a6410a904c5fc276b70c36e82c857f3514a4dc285ab53f7f15860c9e67bd1d85a46e0900b7eda61dc2e1cce3059a5c4101a58145dd9d368f0843090420d11ec7138c76658499714f7011928e115883b202aa590ba5f6181cc2f07a4d7062ece039c2da26790a2cf307c4114f1764fb6e5fdbebe37969ee1089b3e7e11f1590ba5f39bcad5fe9dff1d021cf8fe169cc5f6061bf33229ebf52a6b4d928f594113bcc19a461fddd9031135156b7350dff6c4d645d64693c93ca611cd88aba87774dca891aaa1d8f499a187c2e2ddcf89b7c6d0b4edf14ec736001136a6f3595cbd79fb1a7f085a6111626c8dd5b9ed3a879097f190beb5565fcd0c0193f2f6714c094bad29bfecbf18d8660eda742462f4a69e8464fb8207486144c6c6270a55af2f1cc241350a6efe5816ae67b92f836d7d56d5d1541f4a5e616dfeb40c0f6a554fe0e24c143de16075d0f4e3e5492c8089536e7c44f7a02041e9f1f41e702fece03a95a0b9f1c6bdb6276af5851bbeac5f06c6cc3aa5992c873b78fceac726c4847c54e5a2b07f849dac89031511ca6f63037727c1a3a5d1b5f4dc44dd8eef8aa13888917b048c43a0b2c7a311c5d03839bbe835667c56ce3288a4428331da9dcaf1d92a8f686d7943ecbf4c079250a547a2a26b958a1c60a179599c585a887c763aaf177c56a3a41bccc8646311cc15114a2e40db777737674974a8e96369a5177582feae59cf427ca58b82b0ceb3263b34f43bb4aee7c1187b7e0e92e70eb63324ed36b1dc30d30b39713d7d23a65709d59cd29daafe8c1971ee24014fe81e6ddb5656137878e43bdb01eb24bb060611be70ac02e61bf70eef3d8fa118764c0c0b46d34f9927e4732cc61253ff62d1f752181e810ad0a05d25f4b7fedb39ddb2374744b2c89e5265812659675b4d491f330ba0a463bd0688c8ac237702c331d4e1c01109817cbc778abb16eb6915b9edd3c3d8c99b21981649bc58a61972e7088d59dea04e23912d9bece16ca35cc307a6c93d8d1bbed38a1badce08a9f97bb1bc7cf41399236efc57442f479492e2e13e94354b6fd55758d1190a1b1ea75e64d191f7e00d0cb4682f597728b758a7ff0dbd56a0f2158206ec568359f20d0d867f415071f44ffff596854f7c760e70d5969d181a6ceff218d01ed041ceab07bb07f3a455e95da0292f502eaf6b34dbf96bbc00041ad516032eba577f0f01eb672e315a0876b643775c628b5e015c57deefa2a51a96556c5a5ab1af4e2d92171f3472f816070a6874a004ebf4d2f552fab4e95dba69f16392d6ad4e4bb4dc2947dd40e4eb34aa7d858cefd7005a908bd13de8b0600039aa213505ab043f6080856b13c7146a16f14e856bb30cf2ae3106fd3933a7e38e9eaa08433be4279fbb3c6084150e11e072142c01367755af00e065436dfe9e70bf7192fea788081a37e17fea3554e6876e9ae358a7dbde236a0228afa5d09b709b3c9780445c4b409518fbdece65428c45274ddaada706abdaf099d6a1da651ea04f7880b8cd8ba3415786da36dba06fa46dbdffae756998e2104b40b85885cb6d4ea8687b7823c2cb01835515149a91fac2c63020a3618b0e05bf767fe7681750aeb9bfe2d8be2fa0cb83e7dfac9ba3b6bb0934bacd98e2bd2568f05f13a68308e42effa56bb53a5109fb0afd002e0576dac955c3608a408e13da46dc49ab8ef4837a9029ad93835a317b2703bbbc479996b91bd0e89024ef4575d28e15f1ab82012f29f61af38b3af666c46a3be0eacd734b0f79e244f05f2ede3bdae513595fe1af1571303fc261bd507bc70d165f50f4e19914da33435c5475eb49537b28dca98cfb5189e2b96cfacab570abd715e2902f61382cc58e754adf596fcda38a86cd4b33ed8486e0bb2337fa1d949dbee0e986c06a76964238767d0e94d0370efcc16c67cbcc86d8eaeb2ac21463f4bada458a5f12340ffef46bc1838ef780169d2a62ff62ae8cf26aa70595fb76568a4d489c95c5e1ad25579f6f5084a02951f67cb17348b6e3ddc8fb6afe49585dbda8775ffcfc0be845c085b8ee3c668d11771cfa6bf48235eb743ccd63749654b57a36270d3b1f6be0cdb340c50cb745f5bd9f8031ec7cfdbbfaffaf5e039ce6124119944ef9988286edbc896d8c1ece7f3888f57d9723a5bfcbb883568cf87c548ba62a2ace03d6989ee615501109910e565dbc979b02b877750bdbd56725a1ecb8504b291eedd2a66fd4571562043833b57268285e86c073754e2b632890d15b659c99e262b30120bf1bd115c5ab1e8fd48b6aa8584c38244b13f47857e69511020f78bf300fdca82b0115d9d24ade6311fd56801ebf9a0a74d1c99d5b8367be1c1d7a381d30ef9d324897ea0e7fd25e1c4c9e48285d60a6712c1d3ad9f3c3a3224b10e570d294804336d9ced0c6a4e141eda478fba21688ce6751e929b42370a31cdf4fd17175f1fc704de0df9bc09d31752b9b1f2a4611fb382a20e14121971d0727cfc57a0e52bc7976d8718bbfd259677616f95259e26602e86a87272896fe9eacedb378b83311b6e71e3d02fd312849368510b6dc7acd5c2f3e91d2b2f0d647b13221ea2e038abd111aa88df32a2c7ecf5dfbc4483b6fa8510577e05b252296e735a74aba5485f087563aa94c3de48ca31a211717a4eb7c1067cfbc7bb47200b150aa06f79691f5ac6969d162ecdef77442170be557bf4bcfce0fd3bf1f2329922ba0cb605a4d3112ccbc92d1a77a53a55e442f1bc4699c01b09ed27fd5d4562c1f21f48f0006373ce8b96a12fe5505a8c74f0d356b58e138a813154869042ac1b3b41ece386b7c9d55d6c39161ed9201258e02cccd3bbfd72d0338a359112c0581cda6c863db75a68cab3be772a29d40f187cc4c5a508c8fb7c5990b26a9be69f1e528e802d4c70b059d3f9f91227beaa3d2b62ea355eba4c0f0d30a423c76518c7121b7a5e5c51d59234af45ddba250c4e54d0e38aa31d8e11b630b3c27d87eca280da1bd9d046fefd3eab0393cc535dd361d457acc137e808bb598851a592433405950ca5919753235ab4da3d448ec455b937efa49e51837e8673cbd726cf44070a12f4ca868cfd8bee9172e2091f695bc4c0527924b287fa7e46245dea8618a2f51a7c51966d24bd640b748a054e756dea39283339a41b050b9939ead8ffe68d2f754c41ab81ef4222ea883d1f62101393681bdbc76d67269536b586d881d75121eb0ba2ac1187a192f655043fa561d62717d177b55694e584e33e39d25513753244617c806514621af684e64d5d913d0e0cf212eba7caca41697c0caec4c181c947f8d811c5bd0e24b4bcec32d3c7d1b01027b151a8305e3290190654140afd50be75bd4679aa2c17f6a61dd44f2c1876ea185ecfa1ef28c01fba30ad8d15722e6f833407c804445b85ea811c18e89cc6646c204dd92eb053e009909f790b68cb22c8443cfcf3de58292f20f27822e50944cb00b399167f5499ae31131e13658fa1ecf5cd5b9e8376a91d033fb50379a853df04e929cf1c29135118f2c656f3e2b3984fa32e2eba1dcf5d31e918b2e209594d36d7d1800f3c16994f22b7fb992c1f745ba4bcca0cb56197b2dae957a8961ec09e66d952e1f46a2edd8d392be0d5ae2720b94f9b00a628728ff8701c51b669de437c886c19b8d6b9ca19960e4e45285aa6cb2dc91e58ec97cf2df52767d0034f2d0227f63ff223e21eb014cb6de455b4f6c09f7bee3375ae7a60bfa0724eb5bc64e1fe1adc091950e239fd8bc51bfcde1782edd9f9a08a5e997917b0f89745cdf1ff55fe776580ac1e9c9775dc50e77f11f75f0cc605f54f325f457f83137b29db4674ca986e209dd8c12bb23cecdc40ed093d3cddcb7c2a50fc91349a2a21792a9da2a7c78cc1cc1a9000696d58a4c9b29fce90c75be897f83742f7c644fd64e6eb29bd8d272ae0ebf160c3f5fb07c168a05b310b1b003d34f8a2f28dc9d993181a4f3371a7248254cc91e85e3cccd018f62c4731758ec50b27f74a7a217badc8115d31fc74775a5b09dcff3085bd9fc98889f9c2d058d686ad8a2a12b4ab5bfcb89ae1b4f6eb0f0b908930f13da0d6833eba6f45942819ab70a3b8dfeb3345bef750692395474a6949e0a52bcb3e1d4e0006d24228c43684598a1c682cda1215b6c5f1d1ba55b27f1c298365995f1a33b6b74a41f6f4d41950867f35e0676b0add43a245cbdbf054f2abf5280eca78394813fecb65829b703ee009cf70a3f7a35410a30732a2abf0b1af21fb9249dd699e631767dd34359309e1e1bd42565fea03741d9f55728c5c437d2f668da2f2c9a1eebc9ec6d4478a9bce3087c0474ae7d3b938969e133b9f8e5d48f1679e5e6437fe16f789287c5bdaf21db6514061a1aa251b72744c5fc17c9794258905c93f49d94dfa8cf97910b094d1d15c074c207202efbe3ee6a0cbf4723a89599fdd64c0c8882f380ee9b104fb73604b66b26c1196dbff66aaa8c4dd3762a640343fda8213ef1ff5317244bd702ceb85223b8e712a08bf535d1cb4212f3602a78b9aa97902ab512c28bcd3c53b24fb7206908d78059e856dcaa7a3a79fdb27f46d94da8bdde44d43bc706503a482177ad959711071c4da1cb8ef9a57d27c9d91a2d573a2ebc19ca4b536035ff36fc805623d4220b4a245c8ee9ca0190f3feae4f2067fa5756bc5b5dbb5b4c16f12957b6ae5098f17614ed93557bed59d4c985725cf037cc30a50e0f696801161940644b9f9ce47e2297db755c8fb73c5cc2f5002d7090f1dc5c68ccd806f37111ca3c81720972f5d215bca16965fdbcfe7353952c79846cbc4ae20291c8a1cc7d3f5704c026e2fd0726f7b4069f2f603c43479dd46b90914309006d212d8a6cbe083a21f485a2f824341309aebbdaaa88cb3786bfd73404231f4a5900961be646cd5c75a9a6417bcbd5a52edc2c7e008663b9ec494ced39bee63652baa2e4ddc9f7448c39f92cfc608414a01961881697b5353afb2d2aa689065ae6a9c463979a0e78b2300ee40e84b7e7f9e10b97314f383fff6ff88adf03e80e81687b26c8498b6fa416580506aaf9a588cd7b1a051f5530a5f25f7c57d213e7bf71578cc44ae6afce7744fe8935b1c3f929408ee68a94cdcb3c927d8556126d0d5eca243030b8af8dbd863f1ac778c9b7aefc747a038f5ddb99621cfc125c04d78b437b807d69e58e637c451fd2d73d30a8ff59242cad6763b31ec930995955ba81640129a382f83d03a7bf2cea358510b1d9ab79686780dff45900b75da2c632cb9c43b0259c4e161888eba6701c37c4440bf9de495620ccf78161e4d1c0dcbcd47cb1a8760e5da61ca08930f703cbc7fa16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982e8a6518d4b2fdeaddce5ba5f35cf5f86bd839a0cc2ec3dccc84a15b0207a1b16bc78ee794122814d5e3f112a5dbf5b2df7440b9c6de277c8d4238d38b04f0a03c5eaee7e2a7d2c179f9aa581201a5712bba9d2699e85ec537482b6f0f252af11ac0337e52ec946d548fe5daca967bdfbafb9d8bc7e5b0535506e771f0c0b700819cbb2f6748d374d007321f21e2ef4b17e7c03dc35ee28350fefb80e2602b6afb34b47f8255166487002d99da8f864fccefa3c13eac6be1d590d610669c0eacf238adf35689e3d8d40b26df36e4b75a3483c6ca7c56930b3d8d15b4dfccc7230109060f366fa23e6178cc63d99b28f70934979e1ef61e4c031428c2b08aeb89a2366b47b46f080199d96cac250b21a2957294d099036440b0f69ddeab5ef22d50413c1153105bdef7bda62ccbcd57e973ee5ce67cf6eb75e184c36d12a161aa85a9f71084fc34030596077a104a22382ee84e642d593a47ff4f5802790ab07ddce13aa9ec7b172a4de2eef8a52a172b20f0e7ce4ca2c75374c6ca1350e36513a0776561dc257bb12b34eb4cfcb5bd1ee4a8c7793d5c2914ec8b78343cd405f88aed05cce673e844480c8acb89957a9ff4705c1981edc608c0fe00c98f5509b8e6a2aa4f9dfed3300eca2c18de41d63aead81413bce024ab9caef267eadef6c16e48b16e651ec320f9fe6da95d33665c12408dfc30dbdb79ca0eab83b1da43ae6c3fb9adce6c4e739429cde198f29190056a3837a02930ffe3adbaa186ef76ec8b0821825c6fcbc457dcab761407ee635e85915a6d60ebaa73fc9e45dc8706e8153297807181c17fdf77a4cb50cbe332685337d90b0b6205f58bd4d525298a3dc53f7a2cb05ad622759b3855d1e706a9cd337a380b912aaee2dbecf3f35f675a059f57eb8b436048c4a7e4aa09c1cf25f7a6f70bd19aabe1b65d4516b98134d940c29f5184d3f65f473e283c8af4b333723e3ca91f706c6afa907bc1fa4759182159ded31fa50ed277be7181b7e8395ec769a9b427baf2873a060f6a381a6ab301b594f4de1f204ec0c95f1e2324f80451a9cc919cf2c4e2cf3e6e83f562e0166c76304b22aac120ccbf5f764f2345c0cb8f13d5e18059ea549a27a3b4b93fdeec1c5f3a8fe077f50620e10ebe7bc9107f7a2e05981c382a54b9a95de8a5f058fb0870379858ab37d79e825bd386e87ff80b599522fed61f3a1d81f71381983103caf1e6be6bd175eb78c1f230ed2a6bbfa354f904d0ba258f264023c804ade3a0e472bc84a2811bac501e465917157050e27ec5c01a5af9ce644248788797ed5ce5611d6d8540a584a4f5ecbe8d200a3649557fe7344ef8726826f9a782ecba924e5badeb9c86b01ef7f739d3c7e0b5ea38678becd6fcae05a26c9bc79f22d7db6fb0d27140c9a7d5c980d22b4fbdefe730337e334afa8712a361c37b34b0c1a2fa0f2fb12a9019438a213a379d3e34b7e137cb7d28bf1003cbc4f514dc4d04935dc51a0db26060e2ca66d68b28d800d69be2f80cf8b0d563bbf4a536fe2e1d070b8125f960b13b2dfaa03b988b21f0bdf0c38875337653bcd48f585432fa7778a3b1e806be18f49fab9bdde23c9270e86067f1485185f779a5e382eee328b08286e5b4b832ee29b24d8831eaa5a00de06b3ed6f8db564d14b09fb979b73f349f557b208067d737006113dc346ee1143081c68df9496dd1288512609707b480496000bfe1c53ac90476bd3131e0cc4053447d9adc2443002f83fa1ca95d1f3ffb6714f76eb3af4c390ef2d575b3c80eb313e29223e46c76944da542233fd5a03fbb164b89eb9b3d089a333d62406aebea8093e843124080f142b275b7288e7d70dc7340c5b595280d991cedaa2f3b44640ae021bc2675dbc0e3803bc79f9014595bea6ba4aa0379b29c1e4a9fc8afb4ba2375c311a962d37dd0bce8c71d80f133b9ba1099518cbe920395e8c5b53eb9575ab330c6039df4927ac721481ae7b0aa6680f4361497631670325cbe7d7eceb621371f5bdd9ddba9521d59cd201acf27f2dd7aed9baa13da52720aec79d67171176fd3459fd8e52ce74e16b8c5c0a936df0e19222f3b2d383ab367d242ec2df29dcbf115b2d5ad87bad7ccbd644fdb419bb1539677c13bca999517f2510670c534e9fd4ebf1a91643d29002d843ed1f2a955beacede2ac0bef858fdf3cdbc6636d285c433d2e3d2cfed0459bbe0429a49879bec7fa061a66bd1323fb5ed2bb47b73592a585770d5c605c018a7a464ee1e97bd88a34a1f38572bc98d94f61bc0c936034e8509b9e7d123ac87c315bce350cfa9066264cb3c2a0e042fb872f450c9256b78e06e24cf984eb0ee38bdb040883747aee377cf7b8e83cb6c48e81d2d22477af091101a57c28eb4942d24a9cf6dd680c74f0a92bd2990068e6de1001f7da416fdc1770445f8eba0c2cbd01056a8b43a9bcda67cc9a3409ddb4ee404ed824528e998294862e16e5cc03a4b4b9ee0d95e7086d2f569a598799c14799161d83199fa3db05076261ed0d6a11dc46fbe4ed58fa2166563d7a28018e6280f4128704f79d99482496e04e54c28cce190ea1a854048fa3480e0659b99ed7ae656190b34ae935b48a262268169f9e20ccb0b4558cba007ca8869e9b36550f67f6854092fe0948f094ba98e8d7639e7ace6c9d83577d3c490431937aec53825403f8072275803b72c0aec44f2bb136128aaceda038d09baec7999567601cd8d92a2464f065f095c1ba8d34e9680addaeadfbf53ac55696f47f1904ef16136b8de5a4ea7b33bce053ded05b6630d2fd9594d474b17171c6d0a74a728092d9c2e8a303f821634793afaa02b8440a9c2e7ddbb0ccb2c1b4a3c9bca86eba5ac267500e9c2e817943384ba8becbe149e8e8bdef3b6dad3a8196264bbd49fac27fd17a6507ee29ea12369e574f16ec932ba4dc4bbee81f408b469cb0f394c08e6489ce62c1c7793a57273e324e29b46ae6eb5f8dc5cc7778141d93a8d5ffba031308a274443b0dee647 +MD = 55e845b01dccad4b0fc64c76727747c53ccd71f3cc57d59e3ddaebb34888af82 + +Len = 76712 +Msg = d283a6892cccfe25ad8c374ef4b31115dd7c6a3155f1b2a16db19f93adf12285aac199aada90468fa8f300fec4a22823bdc3dfedd16c76b7046326286f280257db3529338e844023655220e92323cbcc0906a5f6a71ae11bf151395b9574e26a8c67bfeeefafd5280d31ffd7ba3ce259eaca24147e03d9145d033ef5c7ddaa04e6e0c1a1a619ebe8c718059031f756128799c40efe3047eb70029fbfac6c426e112799155bca6ba9bc909adb2f5c0d3f09faedaed0a814e951d5c27eed2892f034c4ad12b5cb3eb4132026815c72f028977607ba9c732653290411fd311a83d1774067605c234a51f551114b6141e7155a947afb099a67741f18f2032148fb5b03222ec6f9da79c78aaac3fee6d1db4d79dcae39c024be935c98cf5765bce3d400f2690d34f9b260f9b3a465922bb2191dd60c3c691912f7070c0fc2a47e2485963982fdb486dc626bf41d470e5656c16e0bfacbab824de949fc1a0c8694a4b6eb7de05e228ce11607f6946b015aad8d9302e1b02e6656b14af158fdb5084daf2a49ebf82510a8c4f640729a1440a1c4b5432ab19bcd15973173315cd6e206b779220b93661c19b45f5a209cef0f19b0fb573b979abf72e327080df39428b6170092a8f68cb71c2d6bcd043939cffc978ec57e29d24555dc533a548894e44718e9202aea40ea9979422088399b8834c295155931ec66a6cbde906ee4811da0005955f9372abc78de0bdb1363bc43a87939d036758f2b4df8ef92c3cf01dca9177ab77da5f135a1a5ef870c8045084004a27d7cbf649a32abafc9bb11bc284aa774d01ffb3e5dfd1515abdd58dddde4aaf7a493d513be3e2c45bcbf715c096bf66f284503b83d7278a5cfedb32dcc7cb461cde37f439c57c2daf435b88687f44d9245598308dce914c97ba459dcdcf06a0781d4879c3e66b796f787aee4abcdf405b1c144d5424b33a7386a12931528141247ceb4c8ab5451a04f1b1b1e7cdf33f1f4e70ec8787e1b678da7a5fa800dfaa9a839cd6ceb07d921835bc7dc0210527e9431a989856c143203c3dbb8248564f52b7d9b33076996401cae7ac5464998d31b09dcbf71fb683021267c760a79991d5802e6c20661d226a17bfb814f734f1911d6701245155d886f3950db38d2e24ab73075c4f0d6d3fa9a2c13b92674bd77fcff2e2c08a13d6375621e90b87687a4d17012dfcdb2e3e590288a15d1362a1666eedbb2c2874ee8bc0ab03c924fd0522d2883bba6dc480f0ad7283c5a9fe01dd60a424f7bafd940cb9acc88cc44047d53c29101823c4a9f90a1b4d7c89926b5d5bb2aa93c0125922a783b1c703c6d4ccca404596aba33beaaeef88d240b4306ea695a680c657c07620ec49f852151e81f38a46a653e4993e126ba0775dc80379d7c9b35f4c324c7fac331ba14daf978d4e439dd7bb0d647bcb1c3ecc3f62571765cb5b8fb0366f97afe4914244fad2574128a59b4f82001c4f7dbe517407adbfe727098290d8ac56a29d356bd68b5178629608719fe70ea7f61c99a78a2c69ebc24947d86c9d85453ab9827e70d58759291830fb1ab0d2a775557b2ee0453e138dbe8111b1f98cebdec6030ab26df6720b1bb9885e541e8343c4bd6814e67cdfb0035f9eff8115b2e54f218109b9217b9f3d0ca9b95524c3c7f6ead3a684b8a8cf943e00a3a8c21304b18881f54b9aae4be894ffda4897f198488e0203b473f7330da6c75cf514b4a399828df399c4b2a7bafccb3f82ea953b561163bada214390bc245379da8ff05863b9f5833832012900aecc37b89f17079c0f894a7a63265f4c214588ed965e79ac9969228b551246662543713e180fa376f2d321299c17f52a481e1892ba77add0ab496027b07e8657faf16aa807e7959345e1ed4c4e8108d2e33d975e8ea46b8c6a26ba71d6ae7f529a36927ac127346d8335ed76fd09f0d29d3483c5659d291c4071901e3a1a87f27d83772ae6472662353fc01e2a1b4395c0837c5bd19a6d1cd8ca9f614d5b36942f88873ce9dfd21dc67ff3c6482d77b917bacf867554ae1a9d92270fa2d911d42a8651253e59ddfcd16706f3e9b913a8ed4b2bd9b33472720958c56dbd2c901ef92d4378763d808bc095682b91569df1cba4efca0db230df968ef9000ebe37f105ee0cab040390472e8b95c1b18e8d003d58a9dbf7669fafefc5405b1a168fe6fb48eb317a3453bb75aa2e7accb94760bce6d88402c9e56f5f6c29f361cdfe6d23ae8da04b586165207170ab657f839fc4dffa66b244c88a7014245d683d09e029bf527be9e83fb0d9823ad7fe499829df949dd8787fafadcc3dbdfdafec390c77dbd838f85c453aeb5cbb8509901b7b77b5216de7c31135ce495568ab74123e88949d4bd92d287fe051914719eb742127a233ab62c783bee0d78902ed3d1bf2f66a00491ef34fdc53114a72a1c4389769fc22f58bf57da5ce68d760e7dfccc62bccaf953c1721fcbe0c45ac33b2ef6ab9239df0c5c56586c16dbf072db49b24a35d09d4b331554d7bb32168322feef78fa90301a2bfe1ee7466ae7a11540daaf77b9d6c16aa403b36a65c1b4fa3edea780cd0cc955d692941d4341e45469aa592a8d8efc91a796259465449cea732afecbfa5a6202671d3d446de883c04d8b0ff755ac45cea674f6e13b88831b273b46841e022d593728a862f0c2c68073e69b861818e4492a05eefbee74b3b4e179465242eb7283d0199e20d5b9f4bd6321c37edeba212cbab1d48786ef73de2a4cc8de6dff79a8ba59e72623b4579ea6a65087af7a439cdfe072300ce30ac1891c92cfa72589ee7b514b1be29a354cc3db094b944094c320fa8e9b8737c18486516ecef845ec809d6892a71b55d7ee422ab86f94f45ac90567f173ffd3e050a95322836948e884a8058373d5cc85adacfa239eb87eded6168f635e7d9faf4c7b8a76950114c6232292e82718e787b188b2137e07c66810dcdbab04078375a1835f34adc992ce849576876bec8e24215ebc50b789b440a2deb1930fa8677c7649382272c7aa47d0881928e55aa9a525b77fa2f24631adb2a47ae12465330af4567e0a8d05457b2e84e39540692052e71963d1d74723f869b79f5eed48cf6842319ab2a58b49b0c7103c952222db738c0fd0a40d93746aee9e86d2125823de8a62f2e2635fa02fc2b48cef348bc3503f1e2ee53d320a496ae199053b9d17b3f172f0646f8b304048f83b6c1dafbe3126d0e55a0e2dcfdd04093fbe0f209431a1e8fbff7017e32a8165b1d48593b55d69ac5dcc298ba970e59ddfc736e8809ec24c7a7a0e099f37948256ef1641911d313aff02355482483425e3e659fdc5437b27d79ef26b4eadaad7938476c038b9a60331c6db9041ae1a2ab2e420684968f5007933c444d7d5eaedce5d4d189479ef8e5cdec348ceeabf33b4883230f655585fc8012b9d22f77d4b704044528ca43563e913948411444ac8519c385db251cbcc2ccfd07d175b8a7ae2f6027407849f0b3e2df64af204e371f1e6d9f867a576d00d665bec9e483a008b473089ef5f560dc5f493a45971b4b7fc30be08fc9a82f2d38f73f39f08b567d2fa76962b7e81f1e53010992ed4e221da408e95597617bbe610c09802e1223621d97ba5a329494005a8183159759838f3def2a866815cb2afb1ece5af1ca9f6dfaae8bd3fa8d6818f255175c29cfc82b0d492470b057a5f943c9ce28e00742e733664e7e7424f3cea6f636c5191368977e9157d3048994afe777a9688d7a8664745982a8340dcfa7e4ef71fef9b6fd5b1e4244fbd93dffc562c2e0983e77027c29f2c8efbeaa741b38ab5948204cfecc78e66c79a2e77fc02216043687af2f74c0bc71b3788d59cf1ea44d5f3127d581faf84ecaf6187d26c1fb74d20d656614d5211da1f629190a0374dea2b0ea2a1230f25c6e4743807faeddb2e9243c5ea2d3cb4d29cc001a7283977d91140654d3a75f25e22aeb122165575eea50b671c5591550b94e94d68f1b86bac8cefefe6cbaa92bb4f591bab271d2d964375637e2b199f8ef1269e5b637cd06b866467f44077aee555bb9d2a950eaa2c53c8e198189c376299bf1c09e74c4f1ce6e8f6fd00a2eee51a1c6028c7f095bbbc4d0bf385e1c88f76fceef9e3f290c994c1c48b73f3f9c288c68b2d278b9548684c0716d8b1f81e6e243db3c1343a797737f82501347884860047bf1ca653dd3e0cfd897bd46f166b8130c0e7dbf5357994bb54122b1234fb11bc680e0b768126d716d5d412d67f5459f0a7bfaf6b04811e349e0ea170d9d14211af6580a73d08f379814d33d56211f5a4f0af7741ee781f8c8e5d5f3a7befdb6f1c8ace8e18cca950154cfe13c6899d752421fd22fb44ddeaa9672a17223d24fd38e3bdd21a5b41c01a3b3c39b3a6998bca7c07b434cea1777995cdafd7a364e48ad9141c4b9b03f31781b5ee314f300d6a285e9fa0feb25a854d0eaba109e54b9bd59d13b4753711948631db496cab238d8dca8c47bd5abc55f8b7b38957ed5bf13d1e605cd1244119b278a802e652f7ba13122332f1dfc572ff8e6e9675c53b167a60aa4b9813ac2f6d51fc65a36dae7922000b68838a9c63c85c85d04bb51592f52b9a8ab04c7a5d1f867f788c447352225aedf15ca36ab0bde89f3fc2040eeb1546d8200317d22c30ddda45891f6cce7be970d6627256e245fc65ecc0fc50ab417b0b1578bcdc23081fb5d48345c17495753d1e7f3e8980c75e7fde2ee30359e390db72f682c2ca0f14b72b60ff9bccd8c6fbd19a512b12add7941df5024e7e624ef23e67b3a9a9ae8389540a95225fada353f89bf163205e2f4cb2fba15aa1267df581b295bb494b35d357674f7db47ad5ed9a69675933422e51a42a084f4a97e58f43bf71203150f33c3a6174d554a82570bfeefb36d2c19c48fb697e54021d4d668d768e00e923836c07df4e51c5a058856f11f422864340dcc09f4c914f207f2266bf3682fa2ead0cc6c8231a91c939d3b3ba9c44d630e3b3fab6bb2fbc08416cd782afceebd73bc47d063c573f8a8f0392d139c54af04d75b1951156ce3d5cece7a7420d4488f33b3680e131584d21bc153f14cc6aeb46cbed24962d0f2798499e1637678ea89f1af81e5ad06379b8a743ea7582bf8a965db74b94dd062ebc2b04b7d6034f9f0508ccc8ee5be8761c6b24bba30fd03304d216f2518d3bbb923c2272660a12d4eeaeb866e6fa70ab15b1c09ae89a254f5ad2130116663734e021ff3031a35cb121b3c7e08ad782826b2120708a4b47475e07b5602b9081036f85a3d77df7b79d68c1fe1e2217a662e5624b23d24bbd81d91604f8d832a18e070e1751932eaa00897d6709f6e564b34d1d499d08c20f6792aa08af6575203f6f646284bb6fbe434d9109874e6745de69f923c474d8c6605369ca6e1980857d71308c5a3de279cc7ca5ec8171c5d049029fe0825eb369d3e2fb511e3e7c58afd31a9eba60b06604de6019e0a8288e5ddfb688be0d7e802a0809a5a51a90223f5ec99f8b6d010a533a6b978a3bb80582cae72460ca5f94cc8d3bcfedf5e56994dae697b7acfcef225a6d6e69729cbf2189daba4fdd7e2c213938d6dc19a2b8160f188f2565ca9cd7040fa76494fd44a0e53655758e04d091d4a9c25ccdf0942dc5088dbde09299dc01f94962eb021a69a6a4fab92519088425359c5458f78741c35e9c67647d6f9719d25c4dbdd4cbe294cbb303e9e45d62f5856bab03de18bad2c1c10b3bb3a5721343e90c539adf757654873b238e56930c40374b16ced000bad90691ab5bc3d3b9f3f687f57ddc8916e67f4a1b3e7c7f320f081bd9ee357b434f72e1fd9e5124d18b8ea6eba54c853a2aa116191d558f2f9ae7039367d19434cb0de479a3d8cc24b2b6517c39b6d3abc7f78865536b29ca88dbeb8e602cb157f4e0806693e0337a117870f161a3da31668988460746b7cc82edbb1002cc3c7273f29e0e95efc19b4fdbeb92479a0293af5dff06626c9ffe2f245b62743b9b4eef4c27b7d28fde4e15e7aaa71023b39b497dd3eb8b674b253888b4ccdf0138b311f401aa7147f25c0ba59578e7c6550fddf1ee3eaabf210c4421ac956ba4796981f4162f9b9f658ed81c954df20c50b812bf3646e9fa8b7afcf82c073faec837e6544c8d78209faa2555906d597c0d5e91f1954d6ea2ef3607141d6884a78ce6e91a8d0e2f51097899566f21459ff2c9028ff299613eb7090f7d650161152c3e3150c0f8e9bb09c2dd291bb1defb68c00b9f3473eb574abbb93cee1aff82120767fdcd94cde4084e98d67b654b1ad80d572b452334741014af589efb8675a509322a9b2a04566fe573637684b584a8768c3a0cf1631d71dc99d95feb1d774d0c3bde1402b599a44f16daf65843bf42c453d57125a0dbd5da1ec81834ec0f72d729211f63093311542842e2271e550cbf53035c061534a4d7e72cb11c1cc57c33a5fba49728ae1cbc52a4213a6dce702e35ccb5dde7b2469b9c0d11ecd521d4e857758ce439922f4e3b079dd959b0d4daa03864f241dd24eee47322eb3eace0bee696bd936465b1d38b733d4c0a85a28c3d50528d493ca4986767cb6380ed097dfb6720ebd3b10a14ecf1e9daa7d4410ab41b65f627572f60cef0f49ac26cb7ec3dee9d36abfda1d6048789cc5826191caca1867404b62e0fc11785d92db253d455351dba17d2e0e47b40066a4702928ccdeb9e5108e2076de7e36768e94643fdea4486c13db72e05fa2146fc99f01421c00093d35a622442e95c808f1db0f12fa521c2914534f300293432ca797807a22de94f4323beeb566e8ab996f279c3322ed6b77258d1989eaf80b21c0d23d3d8bbacb8e98a7fc6711f76fbc48f2823cd2c6b4fae9e1783a7350daf397d78e08b1353b80cb82c1c5aa4272c631c4578ca47e6708c3e8d1de362e40f6af2009782dde536f5d44d54daa4a535b9c3592aef2851045360bcce19df0cbcf794415e87c06b19ed076ad8b9c8f9ff0faaeba10577b3f24c2e2aff13538d9c288ac59e6064ec4b3a790c0fbfb72a71acf98344d3db1522bfcd61169767709944fd14c0d67270b32451ba61b3194072dad9a97d23fd7e7cf368e97d6ec3bc9a9514b42ab1920039f5b8fd365f9844ecdf72e6b4bb85f6e83225489a600e798661f82f46b96ba2c5f3d55cf689da3dc604ebc14f641a864ec22c08d734f0af47f1d00d7bb6a6603f68d15f09fa8733e8916cc3b7e6643496eca6b09bb41367c48dc5d4306fea428f9ad38ed87a482e3ace1f7254090d0aa8f8bbc94da61ca9e57dff0ecfade04f9ed20472c9d1c537a3022a598e95ba106c2e92da57d3b67b9208a542bf38308f52578b9245c6a5550e77b5fdce51154dcbd6546b200387e7b377dff968d8810a94739176b52290916073e9e87a06c6c9ab37280510fd37f43012d7ba32557bc94d6c3ea77fad30f2823feda1fc7c758cf69a372f8f8b6faaf121b20d8576c7d3638bb9ac0d2f2a805c23eab0ba7bc99f9247a9710573d712dfec9b7ac9040d30c0182b0dc5702943d666089e1ecb6a096986a553da7e1633e0bbb88a66c8f4e94a5bbb531137d344d9526ef18e3301d2619f535e7674d516ddd531c4c4872505eb9b9205584ed08a4b2d4534747d360364d9dc19421dbbc1bf832fb14b0c488c8a22d7ab017bc91d1640b4ec376fb0a2597e680ca441713e6c0ddad7641e04870e36b3ce7687660620d3e4a33fd218ba27d41ec005a79e95cebb59c0758401fd61204ef51e3a4e4c532efde0f46d1550b82427bcce18ebccccd4d5f4e807e8f66a28cfa8615b2af79598262cbe0a506ef3b5ab88655cffed4da275f9236f617a11955f6fa7b4a110d05b870e056f701bc0d1d1ad343b84ff3b6b6259908413923eb125d3580b5c9debbd490e31651e6007bec1b2a17d1f0b7d78c39c950da745d9c24a5bdc2902a9ce0794b4aab40244b0c5a41f16e97a18fb11c1489cd4c49cca11f5909cd63c3961808f89d824c3cfa42ea27dfa483d2e9d7e84e70c9f139df9e64ff8fed9b2578c726314247d0a09c941e253b56210554b0633004d373c524f89801d6bfc0b0a372337ddf4867efb08468d29afff9996edf2f61cc764e6c3b241af874c05f05b4adc346db108c8ac4a84ca884fe783f86b8af7c2e2edb9f70b5704bc07bd0850ade5824bc4cc8f247544c2f6ffe17484ad165b7a069c5ff64313a84606ecfcf4488648ff93977c6c72ce9cfd27b714419bde4dcd9b377dc840bdc3adaf5a734c0307af128834378b2a6a81252d2f0d371e2af3410987be76ec9d7c776cce1662c7afde0b0a696789846099f57a12046e1c417560b854c7062efbfc2ea4128d3d7ac8fd728000b46f67f70bf57627a4ef7e6cfcb210664383ed1e6b59beec7fe5069836d054bfc844bd7800ad893892c12df3b0be7a84d8f2134ff081242594635168afaced6f48106d2b9fa61c0b79ec101eb80c5c782e5d87d6b32d3d8575be457f908eb3d8dfdb5f581167956aff790e343c241f08eecb31fbdde571d3cafec92702fe0ec133ae7b477d785e1bcc6f117f668f2cfdc045f906963228d93a2cc4a62d8566f3ec90a9400c62dde689d600455cd4ea1e4bd2c73e059aca5d6e4e204538aa2337b38ad18ae6ac7c95deb6c2cf467bc035387a83ec53a7bf280e6fc44c4bf6ad5330a3db6e32dea2ee721841654d0c18082e451558a7e17002c194980390f06d0f0ae3af341981b6bbee03644f99105961d63c65ca2acf43b22fc784b12c20c935e9523524c21c22c2f98013d4510fea06d8665c8a04f9a102010f70a04a0e2a8b77f9568555374dcc3c96363d9d8f35bfdbcce0df5ce7f3b8df7544161043f9db59dff8a1fc5a9fa05f4db6d2a61aa1568774da135a229f9d70ffe85ca6469ceb3a0c04bedd0e800809ad79db943796918668336c28310f795db744ba359f7d83c089632520da58cae2bf68a08f6f7c3a7db0d133eb9ca9144da54177e5d7026d935dfb1eee478faf938a6b69be48bc1717529eafceecd735e9d0c5dddd7595705c90b6f06fdc8d7fc4166b7d494cbcf1fa58812af6a800a6d940b93246019d53c32b7be5ca21bb021c6c4e255903e58fcec961ea8e588b2dc4fd06bf470382df6f353143289e7fff4493fea916f49fbb3cae2838bc84e293531092cc0904abdc09b6c253b0dc4240e4936151a7a7533beb0ebd5ca8b56c9f2d8047a1b48c821238b7155d8b626d8ba375616434a467d885f1089e7c72911bfa550c856f216e48a53e12a9e0b866a92940e52ce774455aaf60f1465d44b9cd6497c8c2624dd748f856a17ed86797621ffcd4efe69e53891361609b75b24c7f114f659eb69725d8d804aa269bf6667d2db218f659aafb2d59ff3de6ec44b2f7a985ca629387c1c1ed5215e750ed3dc4fa6998896920a40d293f706fea8254fed53fdf5520a611cae047ca0a1fd583fd2f293cf03d89b5f2292be17e96f5985b3d878cc1867b7ebd59ebb2d63134a0f173faec72ff6d98a404ca795b1824e7d88864b9ecec8f7161ff47b395ae95fc686fe59058d452b4eb60241e4e9997aa3b5edf4e1f7b68507d7b62b68dbe7dff2acbf110ebe6c2718fe642b99e41d7474d69fe33a25b9084da7445a408877611fe2e2754705d4437573d2b3394376b28d64ecb51bdb38f764093f6634c34079aad408d453261616e0c0de77278a4dbb39eb84e8eb8abeb8d76807fdda1ebb90200aa2ec978189f7e76007f6092afb0526c4d8ed3da6d2e3046e2e7f851d412b1bc140fc989ad89d05dbcfae42981716c09b593096d1edfc97662379ea3199c0fac253a2eae46a4ca89e960e58641a6683e996516b7e987bfcfa776b6dedfdf859786b6de2f0c7ad5c230ba4df218d8b0d1a10de401f4ad7a195aac284b51627944df8bc35426925acf390f03b32e8eab8a7492599267d9621c22e2dc3294ad547cd7c2c465bc74bf79ab67ef11aa50c133bbfc5fb46b94df9fa81fb9dbd3487f071661c8a9f8a96e882ecaf956b4a65a921d53ddad2864596c936ba98d34bc60ad4573b96900b8cdc46c4109c87619de7143a0bac6c5d438498cce9491df8f61360cfd7eedfc2946f40ad307b11530b596d4ebe0476a69e4ff3b516030fd4ce9691209ff7d15853fe2b389db57bc7448c9793a367841adc55647fbf6afb6785f0f009e2461725222540d696d03916bfdd4da97a4a06f27431559d53e59319d2df07dc5d5e03d1b5613c07ea5fcbc9f3d7e9e0912091f5fc70618e520759742bad43285fa439b6543e775cd6c8c6698718e6e9968f977deb7ef2d35854a0ff06e83c6e67bd3b6ba5197d460a8f9b7dcffcdf14d8eb99f2b7d993fcd5321c22eb1c4e2f040d5b6a1e8ed843e438cd6f55103d02f6d91c0ce7fccf7b37442d884eb612eac3194c3a370af2e6f238dec6bcdf7b247ebc80250274ffdf1cef5787a842051213757034751a679fc324420c4dd73409bf1a88c38dcecf88f4b82ca99e4caf4573865a115f39a0eec56f89b8ae83d22366877870e05699093d230f7687427be571d07c395bf53944779f38444561eff1d367e1a5b0c8f6e074a4927709afe5828cf8592501b98b415827b047b8ede7f5a45056ea558263af29d138137bf1869d2352735cd7032165f59d943b6fa454bf37b54aa7751f69b5db2d72e474c3e9a5e3635d49427ea612de655687d011b0bf3c2b2f7565fc63a4f71dc5628a73693d3bcf6992ea6863d8511369c580b27665f01697dccea60bfd0c26c1f603ac8fb39aeb3aa2257ce5471c2c606d08032054120bf63605a8ad1e88dcdb4796cbe7b99f3b42ff8a18c4bf8e14bcf6cc90490a006fdd29b170d18a0ba483bfba4dfbafa75415139eb86cd22560e1eb54c65ae859d6af10389b13eff3125dd6c4cf261641ba2376c9f8580f809571c32721d07f7cc50e922193de80edbacc156cbc017dfcd1e0b1924510c81e26ef06ba3f344fe7bf5e1802d7bc0d49e2510408911857473fef2c8e2b21ac6ca9ac4e848b10da292a202a32f316e5963d7f1b3eeac522af68b1602417052cda724bd32c71d09ecfa9f741585289aa5130b8d36625b270a3c0a9f4ea9525ba0635405d08a00e1e399345e5e9928ebc194090b514de4ac1a2ec6b5358222de47e472c44af7213d9058a9e804d1f909b4d019948c17108864b4067e3e34a682c814c62129784ac3f91f453c9197629d86ad83507028a764f0b71125f127a7f02dd99845f374411e28d7527f8d522c4f3f158e6684e871e7c41d30d0d6c3eccf7e1d2f583353cff4256616dc7e691fc6e8ef83ff50c036baead0aba876713fc8c1c7d4816e7cbceef6b6da79ee4603ab8923aa425d16bd846ab6cad45897668300bfcfe82e59d0b3a5aee57e6450a0a528984b583253cfee4ab9d57c049f2aa742ed68b6fa51d3ec3a35811469efbe5dcf38ae6858e034a094c013ca03ef53dc9039e7135bcc8c40bb35f463848b247a85ea1b9b5523b44150b2cde4dcf1a9ccf18b9326d832c458329587923d8c9ba55396d919b386167984794bf2170bf41d6dcbb518f9ec43dba63d82c91c5beb863f243109f97024f23afcd51d3da7fb770ce195104660d17220142d32aa5edcc4547d6b93b049a4517923b38cd52c8783d7b57b3748f736c5a704cff26efe35089787cfe15f785f414ad62c69670260e8d52fafb58619397b43f5b234f0a3c0f9122ba4188e671d68b3fd89d97b914e4f0e3878b1882fa43cfccd1c1eb9b64340cc523463c67da66ebf8013069a4019608bb62053d79f3db2db7556d8509d8784cde2c5e88d22c1fc73470f184b7988c25393edc5fad3cd83e7d5a88b3dc2546e1ec5a0cf6ebe38bad93bc83717a4641e6eb5282c79311b5729d5595f098b72a6c6e10d41eeb9d14ff84285898527751be50618b3dd23f1d7a75eb37b3b62a8d3cd205366977c5564d8458d391d6b8362bf6c077fad1015aa6b56fc085baebf9d3c68bc65f06d8ba0822d296d67d8569a04d13bbb716050797da77d2df2d780ae1aa38e6681f53dacfde0a14eecd7b56cbd1cfd8db27a6aece3377e138745b0ab6fb81293d37d312f51483d0333ce6a80f135951df6c82baaa7f047e1a25f1a3f438f90126d6b30d2874c45b4c4263b7da8044b94c8b15b5cd1b81fc0cb8f85109f10500bd728023da6d3008b2848f10cea70671aad9dc1a9677950d88b3db8c68a2399a79a1d6f17b6c7b7ade69a54d4c06330d62ff4263a731a205069cf7c0a0db0b50d3db13f08c00fb24586862b7e31c5eff1d51f52b6fc83d851eeae99842f9fea67484b39baca933979917340b1467ced9327840dc60b9cbf02a042d7dbf8d881da445527d2df3b94718ec9591606716fe2ae8c1f12a74d1f8c0af3feb77043c190b836cffb04ef0a5605ef3f54798cc009f19f4f41d87e3e16b12ad5c2a0c9f4b12c56f9db4397e4507e4fba14a7b6272e792666fca61766c91f4d25a18f506064281d6f1aa31b6b86825091fe99d5eb7acc872dea1a00ddcddbc6b6ff45c14fd235f3f8612d63e421985a8eb956d25514742c69b43b21eb496dfb5082cb050723da405b58e7579a4849d577eee696ad24f97be5011262da655e56bbd22802d17ea06c61a6dbe0d4241c29154452083bd4e1de687aa5acf04b343dbe9864a2f40b0edfd2f311e4d9dd99bf3064a10f464ab6bcb9c7fee577207a1a237c88ccbaf4ac0176e98f4cf29a48fd90f5db9518aeff7da18f25f7b50fb554b0259b68695e023b142e5f016783b24cfca00981f7294588e87a20c8f33d6f532e3ca55d4a7399f3766a89ea80c25e153d0d31bb2ce30f475632f94278d52f7f6468af95a55bf892624613ee857cd4be1be35e2afe03e521b25cb84c8efd7e401c52bff7c23ea781a16907f7bddc9db15ecb95b8b7b14f7ec6a363cd7bdde3fe1ca2e06be8432f27fb7d6cec71074054ce6ce04c9e17d6c658ac04af889fe6212dff17d9609217eb37274bb4e9284511336f46cefa5a01623122a2d9fd680f1117116e297354e7371f11ab396d65354f547bd02714a559b819ab46332263e736a281ec4366b1287279e3946245e69775fa39843d341e6531d8eff7a53eb5f5f996f7991084d061030e440f17b8d4f3eded506cf9a1edad353598bd179b89c1c0ba1a7e7614da1a54a6dd22400f57d21ef5699043a53bb92df94ba0717f05d4f4d793a25e5df6dbcc0956d8c69396ba70da2cf6048630127fecb2a99b3351b5feb5090eb1a84d2dd3fe56368f89ba364b6340a8228df33f95d675df7dff96ec441c25c8553d0797d14e8546843ceacb175a4eae8702adc8d67f3c4b002afc0230d48fda34644ba22ec18d0f8df34f033c85fd0e192d8536a9afaef30afeaa7e29a4ee4b356541d4531f139993f5116522acf6d2c255a40f782d73e184c1c9e89656eb243f8712b8a630c2ed7c8b57793299e10269c431deaac2341d57bc80c9e1b02d6c3c14e6d390bc3f1232fd49c8d21365a4f6c05528a73699ad6937f8a8717b5d2b1352e4af7a8a35109b9311d96be12a +MD = d757dc214367485cc997b5a663908d52710772fa64aa8cabe8b66526c241738a + +Len = 77808 +Msg = 31c9278b15bf9b6df7c6c2873d7a56fb91ab77b83761a09f9e1ddae535622fb87f7462256a60dd39dd3ceb6690b0272920b635ea639daf24f95462c523e5bbd8d8407c61163ab38877d5edfa04c2a78d4d240523ba97c7d01c71783f8748e85164b4dd08c25506a4ed18300b42b7bc6e417f512ae456ceec2ffc83190991a06d4a58ede215babcd3688e1d61f1975016244e80c88ae2aec05c7eeb1c50caca72b3b415b6b870bf5e10bd1ac3ba6b4acb1d1afac554444d94c97e171005fa4ea9c651bb4e527ff58d0c2f90fb453a92d6546a26e9e98395b09e8471bdcf2a145aacb649708cf048a7856ce8cf390c107ff2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac0d1fb639c516b9bcdf23c34c6145a705498ff9b9747f15e1c08c63da6efeda4eca02c3f00dfec06c82220c9de840040118dde76be788daf84e6a2f44c81fe6defcc474f99c51c4648d297cbc48f081e0809dbda505d020cbe865e430e0491644ec8c52bd3ab8ce8c4862990f49fe2588caf804ce9500ef42d5a50c057c257168e283e4a4aedbe4ccfaf3eeffb212f9e23d15434d60bf4f455f512e2b655aff3225d1b217c261110cec0400f54dd303d6231d028c2eb649bccc91d30a6391c88bff9d447c3cf35a3467be5957e0ea4d4dc237c9f2c68ce48f658f820a3d72d559b60f233ce538c92cb148808e34fedf2d648c21e7f2ea29a77270c393bda42d869351d6c085d965dc12cbfd0311b8bf604f4391d378781eea3b5f1e0da9d0d8f8de88e56fe47d362cd46f591d3ec0f7cccb85a21f21ddcd4107821ce0ca9ddf99dfdfd9b0c9cd45053e5b1b4385bd8f5b227ada31b5c23e9420014474e8b4494fde7c38edfe70994d97b8cbdfac588df49a49c472fcce78cccc051f31cbbc1e0422878d8d490f3aee28adf1587c38fb7e7d1be54abeaa83cf54b633803a5e669ff4295df8735231ce39631616bd05e0e31117c722c2fd6787003b0bc7fe422a089c89329544e085d71102c1813769450a9f66f160d1702cdb17bd2c6fdf0f722762d193ce83623eeffab17b01b10a31db6e2feb6eb3abdbb2e36320e1a56e44e48d26090afa7f65003a98cbfef590ac3ec89b3eb230557cf6aa566e841806aa2767b21bb26fe001f11ae039e0c9a4bf1bf3d271960f16158eb5bd9ebf0080abd8369d512cab2d1aaae2b14d0ff6ee705a38fb0c801a98b0624cc138fc24834fdf430f33e1760db913da3290f34415c9e3df3e97da1780545ab68ac5a24db89f24d62f4a399728e4144a8c89f47ac2d29e30c49b0bcf790a5e3d3fcd1943c6a28f37251d9dd827a69579e6c17b629c927473b5a07b0a29d9562708d6c8ce576109ad1a3473ffb2047eb069beeec24c114bef392c929038c92abd0e6a19b610e27881361824d57008b7373d0ab76379570ded76c9b8284fe2c247791073c29b2fc6fca05019220ab92856892d3c0dcc6da0b597fe559c162d060d71513ebca050d9638164b9ae271fba5575ade787ec5aee8fc253d1b234b1df561db3e36ac64b9b0100dd6b407043537b2b141f9b8326ddc3205194335276336ca5c0c894b62af21d464299a28d2cdc11d0e94b0f36da5798d87f06e61785ec953200560418f5c8fe7a1baa9a25e23e5f8fb5d5acaf7c4357126690952ce5f01aecfaf58193b204edc5f106f1e06e5fad8eff243a96178849f88c9806389e2943fa360ed2cf6b8e324f4a156f68d72943f54fa08192b010b3af7b8802e4b97d57843c07c075274e153fb13edb62258368ed2db1484c51c2e062bbc651d83dd6a0b4954a132def2cdebdabecfe796154669e22bf596c01861737d2bcbbbb321b64b0c83d939eca10d4f3c284a1539286832fb5327a99c9449f564ad00835a134eca05d4a0771c0e240077d6f8a98c00008c86f72747bafe4c1e8ab6cfff0910880addcd8394dd98a6a21641582f1f3aa3d93d7e70fbbbe4fc5157bf76a910a8167ffce4eefdb1ef09a6a00de5006346c69b575fa1201fb6bf30444d90fc31486ebbdbb16f2c396fc1809d833be7e8a2ed559d11147f4702192de8d79b62cb800520f29970aac49972b27757a9201fed8caa57496743d245aeccadf412974fdd5e51ea239fe3e40a71dec5d1d953997528ec1e5ef62841ffc47f1c1982f44eceeec12ad6498228215347f1a828fcb5d8469d6ac86d9706af0ec7bbbe68f448b33af13d3809e0017cab909341348625857a50c52c1a1a90c1f238f5594121be48c75479af5d97f08adf3b1313687a491b1898a5e0a81d80d70345518088071ffe288d98d2c11485ca52ca09b5516390f7c5c7958c842a576ca66f68baba1f0e21b2eef318b0e031b9caafdf9d7bbcada9e6700c862acb74e17029a37e53c3e9721b0b2107b97574e79b7f1d4243ffffb01f248374287b79d3e5068a21f1b0326da5649b16576ecfc2499a4b3a4697f798b44792dcf9b4c6b27988956bf04e8953067dc9caf716b2d84983d1ebf03f35c26a7ba3071b01fc1ba2225db2fc094ee0a2d955ac3517ce983fee59dddd302adb96133ca908dd7a6df3563b7d517b1394fee9a7207ddc6390811c3b966a355732bbb0d8294fb1d237e1b6b741bd0e47ce9f3136ce5dff224fc1b00f9c23993b666fd70e0e6c2993f7f1a669968b5d7c1bf8429d1c41da7b34562c3e6595d657e516f836decaaf202ca7b7caf238c320fb9e803270b618eedcc2f350693d973d4d4596fb00f7bd1744786d43db61e9c6fbf69cbf924714fda79c97de4d97464bfd7025b32b7fcdd9edf8297cb8833bee7b94da6cc76159182357ac50591f5e14842b370794df6bf8778b9ece2019340828fddbe2a6917fceee68832f325259176fdb4d60f37311e37fb71fc098905c9452a613b9a653e3925753cee35fbcc1d51f14db47cdf75a3b751f3eec88852013a702145a5d251f02fcbde21537db22ce104c63246ab8af60e6087eba7664292684a6402d11819c815ceb6f2d5119e672f1f667af70537be4412741b2f8b9d21d7a0749da99f5e6ade680b8a44215975422b76b1165445a3624e04a5e7602b59905b973cb2d0e77e928027112814ac00220e3e022c007d4f6ffb7db2574bb4df9a61160876117eab3afe50ae07525cadd8b20693c071a4677303286908b5ff5efd9c39287ccbe999dcc9cf896b4334266bfd168c5a0e8596774d4df38107d57cc2f347c44c67f1f183cbeccbdb4ffb13e3d9b5168341e78281c134774aa7fee1f04d8a066f4b5e5b34ebee9ce0de781b492d2d59c17291d39c47241eecff42368f9448146ce1f87ef9111f23015874e7a4e1c47c9f074c32cdc76710ee756923a8afca16cb908703d925c589c625b71ffcdcc3a7a269e0471e294374d8733a4f4186583515bfd291dd1029f5b7ad096a59087204540015b99655017233607e6365013998d1d8a2d10bb893905d583270c44c18b83c34b3303d34e83486a4fd061908b7698742bf6b6d064a823f8ff9da4490feeee26e81561cac42df59a77fe1678318cdbf65f1060be298f2e5b82850e2bc6dcccf1448d03aa6559e35d0cc9c565aa5ee02a9004aeb35c308d83d8579a5b9ab7a8a90d049a00b6b97a089abdeee75a6f4d776b3e117e514ee9f84d9fe956d00219b48e16754c1caf2243ae64f38bc6307c734d37097dcd3c9c2f7eb86bac1b6e98ba643d260b2bad8494943983b18234d594b28a2710048c4cafc85ba1d9d14f9e110bd33cbc48571961f8b61006f30f115237a1caf3bbb043efd6d42c5ea617a25f019329ee172e4932485518dabd01983249189597473b4a6616cc5ba8ee693e0ad1d76e0f0c85ac8c0fb11ecb24cee2cb7358f7593b9fa8b904aec0573eb6d99af92a899d9d0fabe5cb349256eec9797422dd60d7fd5fe73f2cf5ead7fb72fd85e3f6fd284d2edfc5e77a03ec5f73c4c2f420728220fe9e9efc3c3ba9c94022522ee7492d9155a0a300dbe41a1b707d4e43ccacf63aee372efedc535b1c80e0963655fe1c0e36a71383d4c35e9721eb6cbe3c6092afc13985a160a25a69c7a0b896dd7c7218244b8e0d1f2238571a97a4afea4de5f3fa2e298063a9263586fb4fcce844de43b12678f8f57125cfcd1a9cb570b56ebc0b8d81185fe84cf44148a24500f7af156f907ac41240a585abdcab5b4a47ab4c77b032d5bfe04d4a892176abb2057301b231fa1ad001460d5976570de1751a39c16ea554fe11959cb10e334d65eea89d2b837d59c94365db38402649d0be3a086af16ef2b4fcc47f6b774eb6a723de5c2dfd7b0d5887a353dae2af9b8293994ce6f0d65b5f2248471af54f83f03582a34c1889a2283e8d1bb3d6497f9185a65bd7d591db66f29f9841f0bc11dba41427086d1fb492d8719755939a626804efd99028181f571e38e772f1fb0cc3f0213be553b3b132f5ff5b228308e080b1e42aa250ef73c9e5b2c91091a2c1339a38766564dc24831784ebcd5d1b7675fd11e3a0f87e9519e98b91bd2849cbc512a85afb38ff9b0dadb0ad986a4890b246f788fe774befd1aa21e5db5e36a8d2ea1f4e391894612d38f135264326dbb030137f2d65ede08ba82449fd8c1fd4f790fbe481bc41238c39c4f6f9602c941a38e45ab04ccb13a253f122963a5bdc9d97dca2676c7c6e8530ba877449c0663ae1e890298469f5b04e16f427f1812c5f7f200c7cd1ac8eb2be305b498898deac9baeb3fba541032fe71453454a164097a76487246468209f22c4d6cb850c59d9e6853a9947f6c88bcf57b4509c81b5f0b118a6e09d25a0951ee6ae8cc791546d532a9894b4e1b25e578f9bec6159f8d52ccae043f46bab5ef324370fd8de7ab1620d5270a4a85d122ffa7e7b511595bf6ae9c7c102b09d375ffc04b7213a2960839c0cbf7f912541b946d07fb43af93a0c03d1ea307af2c8a5ec9c35593adcd538550bd3ae52b75773e3367c3330afbf709773121651488d756461ecb957218a00c6e44fc9636fddf06e150336ad35da49133ffb1caa0af03ef1fa5fea2584197d703aa65939db5faf25f08736f707f4e605ace7cc0bb68b7313da01641c70edfedf5359c64c662710d95d7acca4b299e7fd2e7aacecd7c9b2586573afb274921562e2eca911bcfeb5c6b070604ca253bf58592627d3eb456d2e3119357e1b8041b94dd16a202c311e9cadfa8a4573acfca5917cc5376d691413c1849dd5b2431431189a920e5058bbb98a6bb32592fff0638bd11daddaaf3787ab28315fe544fd68c7baa932b5e00dabfa5663738cd75b209cd599adbfa258183286988321207ddecfc42813c96184f2524d23a5bdcd9d6b48fcb1ad98cce6441c225bd6024015e1b52997480757c21b46a26c32c24d278204b90e23d2997279bc7dc3cee53e46400c5d6f35fc3d45852c18b5a126c09a23749cf7a719928d47881b98e466758f4839f22874147c7fde96f2988757e265be0d0b16bdba42872c236e13ace2807188c26a4b68ecafe1660bd27d4bd20d0ac032a5e3be512400a602f7fc8f05e96d703a4850bae1421ae9ff3aec7531baf9b899dfd75f6aa17a33ab4b9c113d0b03ad05fec0b09edd7ca8e59e5e79d366c335872b79e75355645380cb7ac9e47fb47dca00240071dc8741537f5bf043baf7959f1b340cc7ca4f84281a211fb8b1f080daeee31116b9db31cd405d4f1f01f7774611ae26244aac54059a2789164c5854cd3d9668da0fe908b793eb0ca1f6534920c130d9f580fb31addde6ac89a95c58255eb68e58492114a6ec8daf88e29b89938c748eb7f7ccbb8557f6e08f436d0957d4bbe7fdf024141fbcadae406120c732e5d1bae8099140209ac0db93b51ae6f9322f0c579f52559686c39f54ec8370636fe0e50240d96e1408ece43378d68f6df97871d1a14c778fcd87e9230f4413c97d2aa393381593b444d390fb0930414a8d30af189072e8700333125723e33fb9b0076d2759c66fa5b10d6836e0a8db038fe01a88f75626fbca8da15dd4d142d88b1fb81b107c404ceff2e08389b08b1d53ff4aaf4076c16785c02ca39caecb9a70cbfafb1697b43e544c807d8ee7f01c8be6c5f806453667c7a30ac4e5cc387403a4cc53b6b949de7042ce614aaf98759a4f12ffa341f460f28ed23e3aca27f9b622a2918b516fc1e6ae30fb5777f2bcf1909822c21d89d7b8ec097c2619089ffaddf4510ee0947d09b74e883ff18d574443ec0dcd1875506d63170b124968db643f580eabe756646c267db45e7cc6d8e4e1751d3ec3455f925c816799dbb73064bf44170cf6340c805454ec5daa3db665e1c9dd91be5859ca60ef1e273072338ed62f268c6dabf9d8c95abc97ea607449dd60db606a4cd367e8a69b34f82859353c9fa9b4ee3ca0f80df591a7bdcda6f33cc073154781511d8c5e7b6d8358261a2b0c1d10d85496409acc0807a4e3a314786f413ad6a4573da45d1b1b72700e805a0afd1abc825e54e8248c2230210d0018d3d24bb8045a5ac94916d9360e872a2202c65d1b444da78ec59aa1d0245958a68482c23c4fdef773a8db215e92345a1b8a05327528f8bae6f5bfe1156bfc80a9f7ff3903e569863bd2f47e5c998a92bf0736454a9ee3f1995b687a60468b1a8bb4940a8f536ea97a7def6aa082ee868510d6001c14a40e1e5d20d851627988d430ddd13f1872b3c7f01850cafcf497f62d60fd5a389d42de718585593e3c4e1bf35907a3a2fa479ce02bdb5c5621398ab3739795695442524ee2fbf84867ecbb8282285d9189d771b48664a52ce8fddb596a594e254d8f323bd5b6bf0f70e73b54e5bdbd5285d5dee3b48765ffd0574075c1ccf50b0d7bc6ceea500df1ebc023e0f022536492e54cf432adff2d6bc852af266d2a7908bab88e7d2275ae3d0a0dbd3e10a0462568447c8d62d1641fe39a4be4b44efdb3ae5fe12ad87672e91741502be33485a1e14dd321209d02611b7ff2a93cd317b2d9556d6fdc911e748a7730462470a1bce2d1ae9a71b2a6d3e28c29d05167457ace1199a89945df63d607e4195ef508caef685555d0a2bffcdb4767f6ac7c057fef1cec81a915543b8c8bc221ed324950698a6dffb7edbc20682a2378a881d636deefdc7786700b70107b70dc79a8d1e1d3a05ed4b21439f31bbce2f2dff94633f002fff6bbf66385f44f76b56ed940f3c052be913986a7e958683ce1bd72c3fbd4eead8bb4190af1ca802a594733f50ab219f391c8e59487b0c477c1bb6eedf2f01b9ba2f9485057e5a622149d598cab2b5e9472ea916e32b75a5a1f745e02cdd40210d91614d20ce829f493dbaa76399e992791191ab39ede822a5752b0c0c0e34ac39a74ff1ea534a3f8437cb7304a7e621398cef1f31098d48f15e107a680c05e1a63a07784a57d8cc3901b0049625d41eee686b7bb2c68d9eeb799e31291dda48bc1130ea272054ced2611062ff5bdb11ff6dacc6a66e10acfc907b39358adb6ae4f673506bf7e7cbb620939629912183d6635b08f4473dfb8c694f9a769b32ce84af78b1fd24b94d4d06e2a7fa0fd1fcda121f4a849a3d1204cec35cd39704fd0605e615c5eff1dbffdaa59d5c1c11027342a1933eae3879ca857e8833c87c7dd0c06684aba0b7fe346683803602091f09ba89eb0acd55b9485629268074bfd84ca89f07977e353c547025596f07e3da04437e5ad03dbc59e50b6c3ca1e4f895e0843aa571d29020c7c1332ff174c4bbcda528e9784796e1086aeed47e604d3df61ede6721e4f32ff521540ba391d64bcaa8309fea330bda1b3d58f5ff2fe657f53c34538ffc84f3475730f46da5411164133e850e4942cb854a51a80c9bec6b45a7e374a4626bf3232d70f237fa2d9603b0f9a1ccd1643cae5a82f48dea87024e2794cf465dd1b7f269bc0de9d6c16010450afd0d1298b5fe3493e16a65dea37784ef6e5e37dec81dd4bb4e6c8225f9f19b18a1b75507bfdda22b778b541ad62a859b58d536b9ad0a3616bca64682e9107acc93b4e2d8e1b36af2bfd8ff6223cff3419591a38bee23577560806900b6d4aaceddea0134a4e85592c03aaddf13cc96882e7cc67b14cffe7e40e235c6eaa4f2c58743fa438fe42bb08297a8b92d8a36192a7de6b2a675f5dc66b5f0fd0cea1b5a97a6142c2a0fb4f70ed93617f9719b9b917b4c572c7f0235dadfe3cca50dee3417fa9818fdd2b70c6be6a02100ea8cb76b6041932e54ee32a24a565c3c7530fc0e29ce2e9193fe9aa1a82e01c95bd315c1130b8e355c807ac8dc90d4598aac59851afe976dbb4f47b90527dcdd2d365c9a7cf26fc8ff82b6547fdb5d85b329f483b5707a19b373bbbae7d5ddc2c97e35ff83405f70a5ba8d4c1a7d1f465b6e7410e26c001ee2329fac357e2902957347f7103b85b4b6f2a8ba95bf4127e744823489395103af539b98d76beb25fbdc3b8a0b2d0a1c9af0aea5d8e9ecadc073c6f89220945084a05685b4e449b16282b8c05c5c1530b97d4816ca4347624ec3e763e569f28ec8df797bb6306b30322e67a2eb11cf797c601e1455157bcdf9fc8e7e6b5c9244e2d9ab82c4997a29d2a6ef37a0935f7e4963d7a760a6af762ae562500a409dfa3c5695a3c6659e25acb2fa88642ceec7894c1bd7d43f0ce647470ce1ab5f3a383d1edfe5a5ddfeab271c2d9b1d22a4dda5e494ad9728baa4baea333937ff92874df830514749c343abab327ab5bea84703f3e83092a9e038e99680619469cc6ed4ad30ed95f11475a026b12d1248238d0d41bf69ad0aa62b3e139a60ace511763a0688c3771c1aca6f5651ba1e083c382a95c25ed19235041f282b3e65ba8925e8c8e0dbd614fdc97e03bb2bbf451ccfc1b89819e48ab54bf69fd803a9325b0644bedf3b981fe4fb36f49788df49eada3c73eaa2cf3a4e892a3e4bb85f93b09eb7af2eeda786f7e6fff38cd7655acfe2028c60ff7bea264423ce2c656f26af77aa6275f9e991601442c6422239c1f36e7bcba13acfe2680749162210c033811883a05b654887440d6536627043c67d060ffa565bb2693a5704e0d6c33c024d09ac31883babb2ce57d20b94ca6bb0963226df26680ec9c4bebcf2f085cada3cd38bdda583f958237cef0d7f3799c9657b2844ba6bca482fc3d915175f520576fd8a6c5a431cc26e042604ccbfb55713687defb96bce2fa3efc311f357bdc9220f0fa54e85fb38d575deb7226aa7a3c7828da8cc7102c647c8e2ae2d78f16f689184512a507e0180597eef2a4157f5aa4fc1399b844e5444d89fb46dc7d73e710c503895ad8d67983770748c4bad95e4597f69cdac9a23c2a760ea5a4e57806508db2238a210b045981b0eef9092ca9c2830ff0bf1ce79e8bb8e199d145a7b6c0b8dd7ba3aef25ae03e785fb19ecddfa423dc4fc5cd29fde9e9209de21c679ac9fce1ec57a120efc003ca059eda51627310c8049f48eddcdd8d282c47e85c0504b06c1fe6c62b356178228b114a3bd4b7d07fa99c2ea7addefb84cf7327d987e989d860f17c55be5d121e6aa97d01a8dac95fc95cccfc0356dab2e2045984b5e0cfb36a0832450d1b5819fed7d127516481d4ce51c23f5feda12f2e7c0bc201a31889958b968d8414c0b1e22ce53150ed909b330bad0625fbc575ef3aad35ed78fad76e0c0773c5d1c252af0937a439ce5c0f91eacbc4f819de13bed0bc44ec0acd096dfa03bc44faf388affd36f47e8f6aae658fcd1038b0418507ceb7738fa125bc2fe629bb73c8dad07f8961a691b932f4286b2f5c8a67a64674953d464b049b4c0e50d7e5f4f3cea6983e463f15d45b7d450d412e4fa862d46fb4ac31908d745583ba9ce02ad46597847c63226d592aa655c6c0fa0aeb0dbb63bd92ca02a467454a93f72e9813361fbed436f51ac0570bd5581d444eb80d67fb107f7413f1eab7bd6d5525cf18969bc1c6402ba092371a4e11c4918d87f876904dc0c446fe551946b7656a225d2db817d30d3a9157616e2a84456649e34543cdd6053f1e125cd680f27660546951e13b8afca66f885c53e5301e36f6427a6bfe39cb590be6589bf6bf26acb7c5b9a3a74e9d038d9d8e7828a5bd88253e1e6bbbf9718682d2eec6026de4a3deeabb7bd59e7cb69e0f8e574f45b1de593e97af9185966c257075e15e9f3eea3c50ddd6610b0a53f376c25dd3a089ae04bc7cc3e97eb85e6647847a45c3a3e45280974fb414c440303bc1184046b38bba3044255e4545f1c7b0910d626ba236a4028e44594c492fc6f711033f98addbdc4274605a69cdaacc4431f73f07c835c35f1950caf1f7574a01289b0c16f722fd6b83f1585cce0dd68addd43618648612eedf0183d65d7b1c127e6c40522e0590040954e2beb58f98fd0b20d22e258c253a25b30e49e9ffcf8388e376da90d836b46af783d0129466032079bda989dc7cd9a3f1e4cd3b59d6dcee9d1a00ee3f53f52f75b66173d0d045d42b332aefdb7c45d05a81e0c01dc4a705f5a475949f6a3ecd4be4c337b95a3d9cd1ed22e62dc5f711397024f6a01b4a75899099026d0bf9dae6a9760cb28632c0ea4611fb37cc760d3b29fa6db53d5fa3c578fbd64c9bcecee28f0a3150c6fe06f0c888ad8e024b2abc39e18391bd5f1735c80e7ea2ac262fabeff06418aed7d5620ee76b8509ded0590a6ad6da2dc1465708517a03bf8853bf46b9038ea06892da63ceb3d135a9b48e3606e5f2d11ec7b5b46546e4387e01994dc49e074e18e5b6719f24e738443dc827462f7079c001be46aa63c8c97f8fd64fc3a2270a713482b2e91d3b6436e293589921e77a6d8aed59a15f25c4f574d2e706ae7257fa15cba22d2b525bea397c64704bac457fd9df47daa78fcd78473b8e3e115dc92bfffdb9ebdda081e6a8efb58c2b437d6f64f0abc6cb6b45807d5cbfba895dd07f599584a592ba78a4b769e61d4f5184c4b2bdefe6495cbfa69dd2e60c6507007cb92f7cdae90492bcfb7750d4064afe0859b3aec98fb8be431f1abbb432dddbaca5281d0c4f238297db9490110e843bb2b05e42d12d13a3fe77b08b428136b477941bdfaa437baabdee4e1e84c6b1d04c5d3a56ada00213213e20ef27cec63d760c875f4554918d978a10768fad486e4dc6c454bf66f88e63e8e851e479f0d91084d6f65df0e9adcd6568129240bc483f7388c777005b682efe735df9214b19ef83a74f64b7087dc7d6d18d4d1f71f089e9f429750acf52faf55e5de64339725b8f54c4fa0562900f74c94110a82e19b59092e529c4b8b1505405fc3c5e4074fd1e8bf17e6a7c671ca5dbd87d6935066b1de19515ec9c15b79106935bd0f4844ca7995f6254da75781065bdf3d13b68e2d86cb3c9d10df2a932dccdc559ca32b2b129596662f14d9a1b135c147e8593e566a0cba62072da9dcff50619473602c7d1a899cb035541fb4c514d3fdfb829cb2f0a473b496f301dbefbc6c837cc77147f937b30c47b15242aac0c0663478d0cb815a109ba578591863daa428a01f1f11166781814d719ad1c7012e8a7b85032986f7391f1c05da1cc470b28dc5b26164dbe3ae172fdd1eeb869fc672b9ef5d5265449549e3e2ab6e7b473dbad4c65dc6af72e3d6d53d07174e612f25d4ff05d08806cd20e357f697ee27eeb5b6a43bc2fadbc8c728d97cde881011abb6fd242b550888ac02ace01d87d76d88519424dd25e704f10ef8a6c69a74160d4531e1e936116ff62928938aad21613b8fdd40a1965e405d70e4ad59ed55e4526be2659492e82a0541143765c7cb73d457c9b695b608231137e3b81fe97b23820f5ad7b3d05660e230b8f3373f9e4a5d909eaf41edac5617493eef9ff6ae7ca619df60cf5a23b993e05cf0877c628fdd24a5522ea4148077903d7b617db596c570ba286f9717df22374856dde6dfe95dfa26c8e341064a37f32784ede4591be7fe33561beff977961fc34cc1e5dc01e4fa6938e82e4b5b61594631cc9562b014aa91135cca932cf87f17fabce1237e7a0cb5cbc6d1ab5dfcace0ab85f698ff555c1e86b890aba34f3e8a8955427a09271854a80494edf511d33e1aa071c2b0b1fc20d8b9a90a87a34665211570aa4af4068cf92adedbcda7b6a8a5a56daa6b3173e030e77e787efd7ef0e983d47be8e8bea6e3c1163b8dc63d65741d5216d7dca7a6b7c975bd3064ce720a27d4b48c0c29e99050a6d6dd7650bfb09087cf9cba81ba94e7f7a047e01e35ac89d91fdd662d9f285ff57463c0d7fc8184769d63d3e963f0c96dea6879567ff5324c828401b30ed2766bddcaabba650e838647d430c8eaf3f83d633d385f9910a993a628e2a480b71e70d8b840e14280141f9796d80497c4fbd1d36e241fcb237618537213e63bffde6c2ed68634dbfec0a95352d387b28c5a8f02a3457f5c57224150099b6388d13fc7a7cb859c77b10d8c44af2a3783729ee1b883a46796d3347867978201ae55c8e90b3f45ff60c185313256e4fe529f4e2ebcb648c0bfc034245ec1d0aaf7b5013b22dccf47dc55b0fee5ee09c3663bf2ddd7e53a702045aaacfe318e45a9167223b4472a5a3495155c2420a26e086d1258d1b88061018b1f7a0f8fc4ba0da3a40a882b5e22b0aa3cb4b894b5e6805d370672d62479aab91bf5598278f16b811e59672e748597bcad6c6af14d151634e84f81e82da262f82485a3b3b4d10bdb687619f8736d33f2f1ee00df6fe2121aae9bc895a4c37270c492b7ca7f4434d70bcb663263c1ca758fa042082535bb3610520d8690c4224882845b6ee2322f9d8ebe16844c69a56d0fecfa1176f65ab196dc1962f98cbaa9e6c45847e381455679b9f095374c0c01fa39eea56b0d37b2c8a2b4d2e80582ba79b876fe8d1abb2a5523bd0e2b544659d6eee76a0a639a622f0aa57e6316c2a4c2c97c3be5e5dc40a864459631689d9e2e75ad085ddecbe9527db60d75a7c18e4a5f34a5f5caefc1fde450d6507057f8873508286c67116eb964ad2823a1c8a197e364e5c4b23bd4d90aa6769055bd8e6b96c0723de7b619ed25537677ea1f0433bbd5a35a8309a2c6400e1df9fd178961009c8ddb440013752a70a0786b0ee0a6514f86c027a1534bee52739451ad10f2db66224b683884d9d9cc4d2e0cdd5d760c9a36fd844b0ef17a38226839c64ca48fe4d89639a594a29c2e26a2b6d3a22d537d5c19844ffb3e4d89cf7d9eac650284df58c5a1916957da60d2db4f39d85290c1a01d0ef443bccf0c24dc66a58291231e49e087422e80fa28fae1c057266e2a2ea91009840ef3688bc98c7bfacbdbd26b54edd20109a6664f46bdf275b508898c20fa5f45836a81cc6695c3f36967fa8c21f66c162250859d5d76ccdbada815a3ace3f780cba98099a20028d784bd044a57023cc9a206bfd9e81435d135d7363bf6d4b97c0d38cfb825d491f04366566d9e1a2a62b1507ccd8ea0179e751b541ba5d48d8372a0d4f19819e584cfe95abda0451e2876b7243ff821598b96ffd70c62ec5bdb2268f90ea3d80edc50ce7702028b00641ac21ff8ce9fe3e0c00827d6d5230bcd4418a5d5ed18f340ed9e14036ff4b85fc4fad6c0b7239de51ac0ac41a58185a101383f101fe17cf7cee09b898d892f5e9de5af5e5bb36fe1cdaece157b0eb19f80513185e03b914b1c1c735c04514baccd0d139c635a411e005af619fed3780feaeae2fdd92f1a82ffda04447d54f5907bfa6b40771dfbe2dc4d8a16d7d7c038668cba3fb2c4ffe59ea3b609a09b1651d0321d133e068576890ef4d4ad22 +MD = 16f6d454971689e498f4124c95a5d2843f5c70ac74e05b81de8d0e59ce2ae69a + +Len = 78904 +Msg = 32cfc82138bf394c84b6ff383b5cee015ebac3fe3604aa39f6b504229ce1668418c7e5b7b0a79118a3d33fb60c078c4e0afd1e7a1e3d2d25d4334242a6833fbd1da1a0b2399c00de133adf53c14aa26f7a36db0efad8cbff288e26b5f791153f8a82817b9b468f861d14677620cc3a4cf68b8324947c8daf3af135e357b2f1f1a79411789e4e45f809896089f3365bcdc5249d23b2d2791d5282f9358d8edabbbbffd712095c2b1c1fc051f3002f0eda312ab1731d819a32b869f91163ced88510eb5cb1a61747daa7e2c21c10605a5b80c5487c9d32f5d4b3cfbde09f1af337ec7f26be3b28a31be8163b6cea714738fb1ce9a5fa8d94ec8ddcce0b0a1934ba98e3bf9f913647c52b85454b5809dd59ea581c58fb397e638cb7b3f86c74a2f45c40afbe70ea39c2b856672120d025a695a069fd69dfbb1ff989f4118dd346ce7fbe7c82a0ec83f8d7b22a560b702608431d59fa0c26540a1c791abd34dc26304b84b052e8e32d51d0c11552e18ee8653ef773b8acb7500b3cb0ac632b3a4c0306bbd29811783db4eaaab07d6ad574a7cc553f9f1139b709a255326d3893c02df98a6bbbe452bd086e9683406dead1b4365f4618025591ee97913442249088986c1a0223261ab437a4ac1701b4780776c43f0f8949b3e7a1618c3b4ab6d8ae2aa6921f38a2772b28d415f32905251fd3bd1a235bacfac00a486dceedb8143acdf11b4b611f1229c346f89f21299920b56b1b08f7f4d32511965d7693f0eb326893dd0c096492b6f0427ea450e87d1203146748c3e9e51d9e9183baa42806a0e3d5ffed953aa0da970fcf891d0979fea501296b2952d9b09983082288260c8b26ffaa736e69e49ea0f612d6f25634eb827a87f790f856e6eab21336a7b3a6fc18590528fcb90509f33f7014369557e184c6a97660a405c87967cd7f6a967cfaa32b3993a7f2ac24793210ca508f89e8922fb86f001c8d5d2ee95d843799358daebc6d3cd8db80f618161b80aa0c730994fbdc6bda2898aef282eccd778279bd2255caacf53d2a87b935b8beabd4bd4b73733cf15592cbc1ab78a2e3931af293e53e786a68e051df45d5100dbbae0eb715df0189d921d0a04314a64df1294616e0bf9efe978c9e07a23f4af442630e53638752bbce9c4f53a09e2193fb771d4ffb2064f1ec09b806babb8ffca8bc662945b258109dccefe0ac5e3a3e18cb20441fa8f3cacd1e49e4739007ab567ebe41a4aa3b0fac7959514d9b1ad5afeef6ff32a07311a495f6a9b708d98cb274bda166b52241646a35ae6d9fe8e02aa948881d500c4fd834695e6d692e2425650c53751c352c2d692afdf3b0cde8f0c2bee5c900e40ad1c44a0b7dfc2dfd1818535fb7279e5a703ce048c717f1746901ff201df826cdf70c40b6ce09ff9ef15639cb161d825393ac0096d11c7b0cfd30b441007ff81db2d6f4694ad8cb8f1ae766a179480c9d008132f0f90694381415844e5cdf82846ae80e2bd8b0ba59f99383e9c7ee61c21d831d5d271f6381167a1851185eed89870b350560dbf483f82238a9ea58ac4a547a6ae543ad116e6b2517511c4561b5710711fdcb9fa0957d5b2cebc9ce13bb0c2dc09035f9c5887bde2a5750dc058e90a44b1eff45e617f20708b64c97be9fac65c867e54ba855af6ff96a9c6a029e4daa8b6de514ef92beee73135bfdd67d9eea2a713bebe25f6d9f2b92e839806d0ee078f46556e38e49d81608de4683de49848db620209a2e1e3569d71c8fa6813c0fbbba6851ea91fb8d98a0bdbbec4915fb993f7a33f8482bfa5a4220b59c6440fffcc7d44f2a253cd4a3e0e0a43a466a16f713336c2537fab6a7dadcf38b9e8078e2249396ced17477dcd23049945db09e4f3a31134983f530f7a838909bb5664215d88b6efc1e0b3ced7d93f123174f5c48bd5e708bb28332f3b21dd6f33359243eeba621dc9269ec7ee9f2e60ffbaf158ba3a0cb144e0b824302710bbca0c0e80566caf698b7f64f361f366e7f923994c0f4e16b0cdff7e98ea01e781d8205541150e13455151b2cbe2645d29b6253a08eb908999aebae2f7c920a653f638f310bb1d2243e323e4cbd06095a8df566009df9fd9de6fc981cb6e21f1949cac6469a91850e7898c978dcc8694d7ad3db7d96bca8bf19991d78e49843de6440125d67f9e23a2ecf2276c3734cf58d8218df210af1475b4ba50aaeba60fab84cdb3c19f0d1ef865db30e190f9c98eb8c87eee5ecc07cd398989bba525db66c7689ac597f3a76a8cce20a87a5407fbf798f718b69fda7aa0b5ef3b367225aa9468475cfad0517bda41931b43b20f22fcf9732ba8a901007295fda3f02972e9645355f22821a1aed6bbf4a49dc2438631809f71b5661ff137c0418062aa47a5cfa0232fb0661c75fab3b1eed8d349b84db4c8956d558bcf68bb374b1e7318522ed54b50142c3663cebf77549583861baa1c8b0120f5e8ed7ded5b8e841269811a794b1dd3d263eabb45a16044418d32cf1e533f70d59bfdefed3aa52416bfb51af28ef36ff7498d58dcccbc759bc3903530bdcaed633953572131398eee8f6098d7a34b59193bce2feb55a3aa00cdb664fa271df72d25901c2ffba625186d161caf04b02fa6df2f98f7e8c0420f1007e6e12bb32ea20526d77fe6957702bd382edf4fbc442e88242c98d29cee251f27337c3824d4503ca9e1877e61f55c045947eed0ba372eeb3e6334bf93fec16f76c331e8edb8b6507bf2dd4fa63082e6fbe064344499166cf0d5620c30048265891e889a682c42d52f63e7c6dcb8f5b99290c5d6e5ba7371cdeb87551b8fe6b5d0be06d94eaf943f36bd4d707fef4310bfd18a55184bd4be382e3b0691014cb4d02a3331ebc328f3248764d90a53f970c61b282b46ad9896b215f3bd4b09430729db7410da075f857b2ad46cf677674e67d635c60b506d9fee1b27c5a3f85811205a601283dcc69a9d3002a8deda3b2df7ab29c1e0e4923e2ed66ddc266f0a67662f8d9393c3ec771d3f76192decd38408028a8b41dac4f606b03c4d6ccdc86e6db33330644d3fbf8da1a53a6e3fdee51b64be9ea893646c0840f9b5c1a510ba998e17659fe94ed830ff26991a43abc5945a6c78afaefee4a5f14c91df7581c09c2890af81288855d9a06091ac88c8aa255beab5a1ae030462599b6e10cf7a14c81b457ab27b8accda4de9c0bf8fb40720d1dfb248e10f5fbfd27ca70003883bbfce9c53ce52a481a55038b2adb90c612954a21ae018723b210456d917c23a89e5cb0bc71f6e8428dd4fc3d401a5204ca16cd83c1194ea3b3857b070e28bff93dc891a414fffa836e4a5119145c4ae3e1b82f8b247e6c5e46855100adab145edf6915e5ebab66f205de8b89704a7e49a1a2f79fa1d9e93bb33850c037ae2ac0ce67c3e7bf9f367699b931f31a8bf81f50fdad29fed2ce2141c5ffaf73d80a0550e92412578672f97302cbc1dbc8c04e37f0d990041022fa3955e6362bd2bb17ae17becf7d062062dce2e25a7ba9dcbd9ea4043c7b3cedade30f8ebb254345dc301a1c84f7c74a991a81fd26c2d55653cc40b5952bfd3822871c7ea82ad4b13e1d1ac39b8e72f7857506a48d78f536fa0bed7503dbfc0a416da33e63022d0624bf3e3d7a0aaf301037995ff764b08299a1d3cbee55e16bf2ddcd575675f54c755caf108b3325fc21a664b7cc4faf4417d7193fbe5f53631d1ec250e74bd48b1b3d95c734d17d63a10c8c3374019a835ef5e859dbc2fafbaa79a9b1804b74ccfdaa17e7dfab5f6d76af3c5c58421848554367a2ad467f3a8136aa03883f7a1603ea5dfaf38a712389d89ab8dedad19ae409bfa19db28a298a9defcd67ed917215479088d8365e8cc2ceced16f906e81f38e17de11d0c2ceaef59d97841d5fe71b07d817f577ccb009db012f742d97056a1b98e27266d033d388dfea49998c7dfd735c31b415649847455b58537af32f31f86934293d5b60e29cdb4c1d28c13ca3d3455d7cd7cd4b625503d6763c2b06316db45d9c1d0c5bc47ab9486891a62df66fba24b686afd144532231433ee69250c29ee335cd8b2e5f6aa263939de257dc8ee40cc8eab433d387dfef2447cddc773e51505b177fe19db3be2704141ec33e7aeb9f1bcb8278f938639a801e88eb8f2af52b75c1917a659f341b24be01770579f66517f1c1a89db0d5b9be8cbec87eceb1fded9468039e742dc75b62347d17d42de524241acca7355ed5485917792e72ae4d2a58ad83327bd0b412ca5edd5ed3b9a7ab2b34ebfe102675854d3d08855e14a394d5070308fc4669afbc289dc1bdc23312cfb90d8c895421dd2fd57c6dd90a8793d21f8a083fb66e9c0139c727dc6f12c3d84e3a38e71162b8c98adecd2db8828f199c201a8b494c3f613b627a76e9cb240e9d7bea7484be7ee101358ca0471bf07027cd262a268a02a3d377a1d458e69f384ed78a76d6bf9740e589947bdfdb1ea0689a146277b04c91ab0d843ee3eb9b20095701362eed6caedce3cc06a7498271068ecc7c614784f16b2c0bfbb263808c750235fcb5cf63f38e4a1c88c8ed82aaaab237bf0ed6148cbbdc1e55eed6b5453ae00f1092ede5d6a5c66c4b6a4f8715fb0c3b75a6e5632a4126a592bfcaa41301f977b9eecf5b20c65fa495b3f8fa78a2a7c1e450fcd993a81188fb4cc9b4bd72565640f1fe2b999b1eadafce6f419c4688b25635a4de8e96a6afd8be5a4d0d34fe92edc201bf09cc0a6de1e13cc64990b9f4117d64dae4b4ec02713c06d7c9f0f915088a607d38012bcd7215e8ef462741715e4fc5355da9eb6a0def53baba4d50c5d970a4cfeee18ab5ac91fa265db5280f84d34e57c11dabcdf6ffcb5fa8f40a8ca89d541cf2142e0ed57efad254df76b8cd3387a9d8ba35157293f62c5b8c2f51bc39f8cb0d4320be3603705af44f34537f94f8916a259028cad35b8a9abec8fc5e6b1846071666af1749e52805ad6ac8e3212a783e09c4f046e882e22e32db74d65b3df4a8340ac7c077e1a34fa01eff41ffa4c71d0cda532dfaf39ae08f73a36c32ee3db74613f078b6ea3399d15adfe159eee4cfd6d93bc930371c767d95706818b489fef38a11882e8a40ade825520a5591391c10c98f60b3d5ceb8a64bc31134164043e4761238064832518c8840051b142ccc62b2373bab551a70af9c84b0af9cca4fc0dfdad067ac724e65898f1bd4ff27a6739d1aa23f40676443919b8db0ce90ea30ce5398783f666c1c332891a8db9173ec9122dc971c1c5d0830f1f06035f8dbdc4964d862887772598bf3b2be2ed2fb74973633dc74a323a6836c21e7586bec6b5bf5d74c100d2ac39bd8c53f835206b4b63eed36cd637ec692f5676cbf52e38609efde5f5d915a036ac011525f785c54f62353ccb1c4361063750c17f31389d45d3835c2f969cbc10091df204caec4fb5fcbadc7a72e122b01d256117b18a6fe5eb9249e6cff45a4663577d1d15c0851fa1f434e3809dcc071f68e82dfc702ab145af31b3cba9054a392218c77e8ee00ce075c8aeabd5a76bcc7fb92a88a64848804e960f301737abf922579c4bb3fade36c42a348b255f6eb2fe7675dc89630c19d4f96183eb7bec31ccac1423dc20242343bc0d75194e70615982c86e85e58c70e6de434d824c7b6175a8c79d641a7f24990092100e1f213605707ac5485a4a3408b73ce37823ea06d1b01f0ef8244fb9189a7ad2802bf1cfa6c205673d3bb5c1af16b6ec399ca890556492fee4f8066f66dc20332c0f528ca1fa00cad0f46fa83e7f39de431147ac7528bbe3d6e033a5f8681ac84e33c40b8b8af566a03ec8665b433e10211c37a9b59f02642a7767fb31a0d2f88333e6bac7e74bd12755607a7a154c58502809269b1a0ee67c4813edc728e14a578a0b18eba18c80d2e2c8531f67eced5ccf3c919a3c29e138bcb7ec1d62be442790d1a46b5c200c4f61509ebfbd8865a37c32793777fbeadc6fd474a8d0c26c9ff2bafbdb49beb9d94b999bdf78b747c0b99b4bf75fed79f3bbea15fe15a62a1d2a277d902cb1301d2c1408f34be20a40f1c7986e5687050b3b795e8183d2032ba1b7a83e679005976d50349f89a13380cf57dce0ee41228f5902acd7bdce9e47f3ec1a4a7ce380b499cecd38c47d4a2cacbc881399b448fcbf069f65260441fe8b253228ef1458113bf021538eceb4811476385aeb48eedfb7f584ce5f0ba4bbe2039e7e30aaf219ce54df743b2e194a91155c4b55878aa4ee602b57bb5d2d0c92f79d9ee43fc55abb7d662f7c03dec59d0a62496af8b2e8ccd6c1a5ed71416d1881de2f6c2b6840adda43c9a3f87baea2c5f8f98e04ee27ddba064d47d08869ed22ce945af64157ffebf6f7556486525cf87ec04144a2ce8b9a57926cf3786f7b6afd521338f72d3c230e1d02e0655cf5e262322720575970f83439cf6287fa6dcad90d376be02ced3fe7cf3ee4cf2b384451b3a230926508442a97d1a63da71eb2e01a29f792d37d6312625bf9fa498e7eabe944edea5dcc0eb92136271fd218c3b10d8d6495bd876d2c9afc989d3452f20f3781c0a5c036c86e8a4f7d9527e66daa5bc45b4f47759e84cd93391e78305eca22db517b18c3019927901233f4f2216a895114460dd277b97eb2640481a1158b3fc408d0e41b3ae78daa7d82e5e67f401ac658108d28994922dc91c5ed2fa6b0f2de5f2dae89e4c820e117f8671de7e994967f2521d263925e745af9273682d9c08ced07d4a98fc985f68a0af512ebb56b33f1fa788a8753860c1814ac405a743d420ae5f2f4ac5a213d4c311c600b32134169070d9b44db3e16618ef8e76e0eddb0615e85f5baf88737c711497fc6fe31214ce13d9f5cb7eb25bfeea9966e08063a68c80a174c232c78931208ec9f682966060fa5010f6811bc9bba1ad7bb0e6b5289b8fbe3d078857228c9d711050e80823ce8b06b0d6a564d8d57e925d570519b5ca7d7f5d85736a7009f3097886fbb084a130c27b74d0d4afd6e80fb5ddc7d675a2b2a97d44d94a9b308a1eaa9fa5d5ac60504e19d7ebb4774647ee2b4b12368faa9607444da43dca89ca784da3ccc1c29352703307df4c57ab02f566a8d07f2b6a91605ba7ba8c259d1cde0a9b5abaefc2a0f1710d92e4788f83ed0ffce8fa736b0c7b695a057fd5f3e619898e36095b76a1987af0eec40279319dcd5042ef8d346d21176f6b5d021391f2718448f62d36bd2ff7b8da341cf274cf49abc6a6a14e1e1a0dedd670d386862e6b8578c88e8b5c7c8f6e3d7bee81b4492b155c66d83f852ef2dc2dfe71d32c981e9aaec9a5fce649eb1901e2a1ae59d41a96ec7959910c256f4558500482eaf733cad23f9b11c35cb2c10db15d01cb38be375e254dcb1ac62b2f3eaeb31c2a12511ecc7397525c7d8d6e49304903733dc0ff9ab3dc7616dacfa2c95fa62853b2219c84adc248177624299da68e3bb7abc8f7886b2d196a2902a6e0ad062ecd9f4a4ee335437a5d0e1ef9f15d533100497d251194693c7d7b6d446bdefbb6ffa1753ccf524370970c24e72d9bc16eb7e088931b77b768b798b783533bac4953804a6d314deab32b39ddfa39a90079423890498f5d40238048896c7e0c426e300370e9f26e5fca835df23afdcf37da0b193e4d568c2cf840528b05d599e4aefef490b8f8fdcb3d05400aaf62548f1a784b3aa9564da26c5f7f64584029bb90261951e32d4255951ba9ce624e822fc0f3952b6579e7ca094597bd6da806ef9c0e3a5c70788526592c61e55aaa9f3f54e3c1ba87a6a4cd565b623d4af376a75a1f21586ac00d65119f31f99f5ff4e95fb0958e19c5cad3db07a78df90bc20b53c195eed6ef233b46dedfaf3a54c95368c1da5022bda20321b2305482d632440e5d5dc6beec0fd07e5033b1327066a5f78057a7ab787486afc5c33beb3e0d7a13594287299f194b445df7a78f9d12089454d63cbbdd88840da629ea3e2a9dd4eb1f0cda20f089d51d6df1385ac216a4c8a51db65ad42524c4bf2a088381287b1d158366aac7a69593e8ea0d9ac6baa01adcf6be9045948e5b778d3dc02df79731a56ed4cf0cb9b42d37abce57934624135f27fc66181eeb5a351c33ff15524fb03697cb97a70a5974c0f9229910025a39977817e33509634a639d8f472180cb212fc4f40b80e1adeeec9fb16925366817ecb3b810859d1db268d9fca139cb340cfabef7328086d825236324ceba297632c79e86f3ee24421aac9820134579b2f9fe4d7b158d4001a1ce0f23d1b724ad148e032a9759e4f90a97a1a3a82dd36c71a33828ba905950e853695579046f3444aba84b01af266b0b91be2e65d9218bfb5149a72b7217ee841c3a63ce8a52344a8455923bd632bfa402b5695432ab36207046a07019c303fd8f49f4d82f15d5af83d4a64cb8501e5e524ffb7c1eb8966768f8ba8f6fa4b6d91660b1a0dcff3efa0eec313c3cc8b0c0e9548de58692d358a2279e925b0430a21845422d7a5998b38f64d81349e19c522f8cc698537f147b849bf480c42999dffdc14e87ef6b0a626d0545dac9e50b9c8dbf4f9c6bc88159771b6362945c18192c9c7db7257dbd9010972099a31a242769b4cff9b8b54379e471933fb2e5d5d70f9e79c402d7d9c4e0e21056bfc9107a2c34efb8218d826331632d1f060cf9a10d8fe7b670c1858745adbe1b0539f61d3f0757e08d9a65a0c8bad90b7819acff8e3672965682e960a7c2d2ef5db4ff9908f5ae79e62215b70f3d3e09f053157afa5cc06b9b632ed76ee7f3dbaf805375f1c69c8c136eba3070b6052456045d99bac9793d29ac7c7402e5c9e5e3e619396141cb1ffcc67b9451ebd5619272abe534454614e7a5fac0cb83fd18e12e7a6ec02fe03d8971806a1ca657ca8ce528e5d198cff9bd95d142328b377991a09d9b755886eba2b9f23a38ad33662da7fc21f989bbf393c628829dc31e12db84ab48ea8463332fe4f98d0dc8103d5bff4e2115e2b20b517e280975f55beaa821cbfd867b1f1c183bbce903c19658ff34466e8b695e48e006f95e23e79609dec02643b10463ae450664d9825f6ebe028f0e8fc5e764b226a6c20a0d62767867a9e3a1d3e9d7f29e8d18e2f26940774a58cb0c29236f510ca5ac939d2da33e29242ba054f022ef0c17018ebba8b38cc1d7a86e21e7252e7a4dde833a12c6630e7926c69de2ecae75ee466445e470044e53cb3b14f92e5059e480614bd787f0fdeffb9e1486df35c35811ecf9e41fe7d8165cfe6a2233bf8fb3bcb63a458decddcfd3ad22a6a18edc9e87af3d72673e4966843c8a2adc840602b8096e24815f9861d57d2f08dac1aa08d2347a54f010888c6a7fded9d0a6a4199ce24f3c0a5115ed2a95a47533d413dd1a03195363657dd0384ecdf7b82d533f91c94554d1cb3cbbf97de7b553d1016786a58037684510791332bf4b3b22fabdbf47b8367dd4f5136bbe6290e4bf5bec3fa119c8a6b929d125b21c9e028c81db4de310a8b775283ca8df7cce8ba709b56d7f4bcec6c8b01e96564db8b473cfe16326b57327b5bd7fd7689c36f290f20a36c87d106f7b8da98ea6b861fadfce172b97105f749c9c2420e12c92c1820032c50319574ad9a8ba342bc6617cd965c5cabe87334732ae73acd393a8a0861a7740b8866bffeae998b06cdf7fe1687c326b2383b94780d9b3a3c6394035a2281fd0702c1435b6398d2bf16c84d295fca7344f6db71d8d062e2d4086242be013739cb1731a94467edfcd43d339f667cb6c4dc9abf670611e2a70cbe21b2848c1bbcd06c344c6a1a2d7bde97e63f6e6d2c9df19a73ee90507f097eeb5ecd4e11b3f8af4845b70cf8bbd246bd3cd791af90612c8c7563080abc8c8326760d9b30946fc051e283dd923d929523c3e280c296a0d5d7508ecdaf0f92b1d603fdcc6741a4ac0f970d2c65072f525207dabc3483ef960181ac51cc0cdea390851882342019dad7dfeda9efcd2af6ce753a9473fcafd591755654d028a2a0ec85d82d15d441d551399fb690e3f80b0f888caa1f75642d1dc8171759e791622062d75d8ab2bf13f2108dd306e029077bde4b7d8572af050ce66949c7be2d3002b87074116fd42f3111429fb0463064c9d2f18f4468e2e5c55cb74cb830d8c2da034e013850437fa498587d0b8a90ab4003094feaec9247fd97ab90a9d416732ccfca956df86f9db33239eb9721ec6394eb0d4fd7624fb40c2390c5fb1c88c9816a60a120eccaf1e35b517bd1a085f62f07780f986e7db2779d115d4a8e824e7e8fcaa50f91e824cb90599e498b000b74c4d3ffac65aebbd640a7b7068ea57a5a9c4321888c39aec26d9cd37d45ecfc1cbfab9091ec45489ecabe63bda164c5cc0c74970a3051e86e4fa5bbdb65af407d545972d766f3d14797e003ee6b32c9397cd9862322a37a35b30ea7f27eb9812d3f7816fb6a1cfe474496e80750b1ed3959ec7f51d7b0ccaf34222830d5ae3682bd81ed5c6a3328343d5db096d644ba322017d314c40c68314faadd352f0fc9347b0176a8ebd8d7950eaede2b807db8ba6bf621fa8c18c56261e3077dcf20c1b8d471333f636084c024f4c123c3cf51389a01fc6174587cc9177567595ab3a866765bb3ae758cd86c0cea1a1e34ac1c4346c5c2f8216de6cbdcdc4d76362af5e3cd1b786476901aef42d9498937b68250debc060d27ababe12e825a5305e922a7454ae1f00b2cf4d0535ccfe361512bf7de5f463edba434bf98f1fe5e3e80c7377b6490ef87b5dea5baef2dbb361e618ed21a040bd1ea09ad88c5aa1644845c0acbf2f5a190cd30d5e60ad38f2a70dbac3686bfd29edfa3418a57fe09bc664997d36080b49ac5a3f7613a61cdb2faf2d6982fda41871789f22a336ab70aa928651e57e2a72a41a060b8e858f5640f2f74537ff3c74f043655d4d2609cb3bf610919237bd7b3d3aed859af1994b2301a2c14f19ce24b3820d306df80294c2b9bea306dbcf4cbce2794cff9243a22102b64391f26110025e2005c9549eb3870219f0091365cd6c3c34c885119443801eb935c633fd2025ff25432be0e610d2faa8e0638789e6946da561f3169516887c35feb683aa3c638ca4515947e193ebc8f3dcdbde427f7ba0548013484c048345b106298b714c052e26991b2f97251996824a3ac099806afbca8bab50c3f3b7a0b6b5e7f35938530c32823b4111aca689de9348d794d1a9a68eec84d502cc6db6cb73b7626be8954f50747f245611d8cb8e20cdc83e5a80ca280966800f78edae78a86380ae44131e08d7b1806e3df8841a58913e9c04378f214c19f9f4de7fb145bcb1f62a3515a2e31497ff62174ddb0ba25bdfb8b5151c001c64e7b9e56be7bb176a6ce7a1e2026891fa47398621f9e768f5539956639a4de010f36477f87761215689ee72c36720b7a100fb74ba063911254347d06a309102e5c4ff7b708abf433cf6468e00f991ee56d3b1c861298605b457cb096f0752e9ab0391d819475ee3e55bf7dfe1df459fdf67626a5e8a58ab6a362cebbd461bfd2a5723783cd7c56b1a5e0a4bad42c43005661641f952366d0e89725d9b1671a62a69bc4220617c41a1aa86bcae49940b9075d5377aa9a9b26af7a546509fde4c72e0641e0f0e0ccf42e573192a1d3f96483ea83328b638e34429ce902508e957cb6523f44f06fc7bc7b8d94a6ae54d3bf569961e4da26b6665c6f522627a1b2ffda002ac2970d4aff6cac136b6ca44615e9ea8de2f94caa4957720e44f1cfa3cd038082fe5741dd299c432c756f4ae6f4c84e55c16b5de059be459be331710e70cd63e63cb3c5e4c764d35e4918a12cf87c355804c2d2ef241b4a7985892e5967821aa3123ed1f84560ed175b0b5f9e8d7040033182342d14d90135a04b6ffb2ddc2568134b2e9e400ae0e63fb9cea2204efef5bc1bfa30b881fa3ec80abe8a403604a3c47b142d33ed6f494ba686de5d52b29e1902bd809ba0a6136149828d3b2a48d48a412b5b9d62e8cf135400a991361b6aecd8c6932abf8552107a545a6b235268f93fec7ff915ddd62b44d4aa686389fa9c00ddfed22928693a3fcc987cabd20f85c9d020b370cefd07eb6b475f659ebb9b0d3c1a4e980fc752ec23cddc4e1806a4616ed4690e2cb21dca4d16c2b6ba2c8e70997bec669bfb0f122240f664b50cf9a9210186388783f163f27f4ec17cdbdabd5eaa382f5d82a34420b8779a3980ea138f4ea7aa5fe1074ae40760305727f455f40bae5cd4ecd3f4a78acc4905e0fa03120229be2667e3d1aa45836dc9cf8fdd0246db69929805963f4e611bbacbae2a41c2a8fe7b770bbaad9044e44500f1a501b23bf00712acbb5069d26cc89f7aeba71681e5bf9cd348769e013e798ace606af45c6ab2fb5de673639cc6afeae4b9aa6460fe7357ff1d8dc564c6a7bb7a71b673994426b08d7a10c22cb3d11c7026e432a2c32726d3ac6b8ccc3780219a6b7cb68f16c2b0b018d11c1ebeecc2a1b5bd17e3be5b87f577987ac3eb733b82b00643aa4d179a6a350cc7cf42537bfde8bd7a905a70f9d8f18d05d86cf187d7d21b918771a5cc10415c5bcad89596f9226dd13522180af2bcc1c476369b950e640536830efdd446d0285eadfc33a2081536b24eafa129d73bcf2d29c2d1c1aac86b89398f70217263f936c527be2bbf13b0a4494dbce4faf11da66fbc24bc1181a720277dbd52377f577acce585a292b0641db1a6cbaae27f25c6b46d14e2f7224091c95435e4ea84cba101b02a95077db99514254e1a02388014946012b4a02ce0348b9d5a481006be3020022d71a1ce2990ed53c480eeafa5068c3fbecfc0f3eeaf0ad3cafa5c87b7ae94760ed6e6445c97a9acbf9e1c571d2318566992ce39c457b371e87a049a3082db663f2339529b1fe5baafbfffc150d0a53eb38c2c4119d512024355cc80c143516d4ee53f8b8da00de805652d70d8b5cf632d3a5fbc579da2ff5c0bf90dd266b2e5ae9b5d51acbeaecf612c19d82d49037e271bfd0df617d2e3a30b3e83fc636c89eec4174770c224db43833989b6e0cdca31bf78a87dda5e39a8d1f175a7dfeaa47fedf1cf62612c961d0920e81e33aad1fd83573e776b718bee0ea6655d22c9dfe287717bfa02028a5e0c5485bbb8174fbb061d124b31c934d31fe1d594e26696b71f1abfb02b6312a72b48e527c48f7e2ab64ed691d3c1df08642848d7755d635e13521d2d53bad958d47288eb0f9ff7ad2240fdc3a7f7d4fe99ee21ad821ac05802cc16b9f1765913a665d36defb546b2c8a7fa5954e7d1161fa8127f6f3b28257bcd2efebb11ec480f976738fb6be5ec17e84edb30fe3def63ea7dd5b31b1556dce9e853e73a3d667e8bb6c4a9205fb9ae967dc1e2c7860b1539d648e457225ca4b6b5622c4bb70f71b744a97f7f0e9beb171995d0b043c991fabe31795ba9b7719828a1e0c2d3a397ae934fe4d49d135c0e74df8164f1db78b18827f8b545f7b222b48bbb4c2db34ee625308fcd65a08fc141f77b320a9117f2e6b4c8d0718de4cadb87f2242fcf05d26ce3c6c602d3e4f3f38634c4088b2e433c309059a6ea9815203f4bf754476b17ece2305aef1dfa0afbf444878639fa070b53b5ad60be3a86051a2f3225ccdd0b27b43308a4ff4d6addda00f8ee2e19d2d666cf4839494a920c9102713ebfda40afc2753baef84db81ba01094aac81c1b201233b69b4c46cda94c6c10e9a0f13cd7a54d807789796737dee9e766a87f646ace9974f117cd8d6d94c2bdc110a07451c5425399335efcb4ff036d8c3f923328f4570fe53c3d75bc12bcb45f7f667b80bada418e767ced0578e393a60e130bfd4bf2e3f23a251b274ea0b10f4dc1b6f6eeabb6b1d341bcbbe500f62e8460432a0df39d829202c2419115207b2c30ab26e90d4fcdca5be04abbe2018043189d61e2ef9910c45 +MD = 72104c05b56b060ea141b60f847a2796c0acb0613d99e9cc1d93bb73ab59682d + +Len = 80000 +Msg = f80fb533d454a27e06ca5b3f3df5a73410a26db8401d1a963da5431bec1d8c6fa804c82587a76110de95fa58075454ce61526e7d991ef18128d8ca1d1de719071de94a06a8f081bf9deb3ccc0162340ffc67844624c90cdfff8a180dc2933d1b5fa78401bf96cb354cb367c3b3870ea0e8c7f53b6a843556c8a27314648bc0537724be3b55010417f3d5c464a62cab282d5c0986f2b8328e8d08245a8a366a566c4a40dff198f71098389bd861b7d450d40c0a4c44cecc3155a47306bcfc02cd460051131cc56bc645c634476c924fc0e4c13eb8e92ccbe4295ea7408345525f0e2d3aff5df027e10166d6d85023e41f6562efef683cf751101e0a32657920b5cbbb44cd3c7ff40ad500cbb394d45d1660d7631c4965182012cce201ec0035768591b4a241db9ae9c77d5901c00c814cdb08e265150ef5f9375078d8a043594b4497d5a9f56ce125e2c3c9ea5d32176ae1ddb6f253a15782889214dd08a853dc11b5ee07df9a91662bbb6395f2b0e817773e26ec8b8506660c7afe38ac98edd0f3d346e788ce7156ac4d6e2b07edbcfca713797b4622ca4bcbf17d12147cedd0f3d9266f766e4a9b6c6234d324515ac07844f8c60ae06bdaceddda93c9ba1c8318afd6c733e4e4dd73e0fbb6d2448c0cf3b9ebf66227b0ba1c285ee252bc42926a3e9e18479607c5cab10cfb982e18881e5a9a32d35f6293bdb84e2837e827a4f16cc68a38ee7bfa78bbafcbff77c7db03104ca3e7f0490fba77f58c01a89262b62295449052072585e82b4e8e8761aeaac14a7125422dd41a4b9a3737634d73c049546fd62c75eefa1ecaabcdc7aea81956ddc315bdd68ae51e845061801e8117c74c3293e38bfcde47d20b449d76725ab84bc140ca0cda24d7fc000769ce31c486c2b64edf12f8394a8c957c7280b375cddc952dcf966cde5e4a6fb285252dce6c01228f88d189130f4072fcaf9514707fda6464363de71b9bb6c4e93cea1d3d63509fdf469258757e36c94cba7d3d55b58b596e65c9f3e376882835f6e7a81a52f655c4811b0d667fb5c3f5fd00d52c573999d2c602393fd707c21d1be2776c203c6bc8a1354feffa06887edee585fb4c2a4f18bfaf6136a67cbb2913a4323bb76a0a730ea8c617d7723f6fc7f6f4cc7ea6a1c9ba9a13d1cb2f3ae147f5808ffec8594c303c1be6fe3f11511ff9caa6d4f7b76c1e89f6172e6868ce1d9c0971dd9d81db70b9f66457b525aa4eb7b1923664ba895345b210b76f6c77fe6376e83c33a9a834e6fe9acb1ea405bcf84f968c34d2a9c196f0c44f8b6f6453106ffd03d0fa3ce58cdc8f40c0b5e7d1844cbdbeb02653d043583cdc06991e826c9bb71abd9c1eec73384b9fe581daf522510cb520df0fe816917f4726112cf53fa31e6a42b6d6af63b8d7d1d32f65909c068d57cc246571d544957934001612512e3ad9a670ed9824073abdd2e8110ab812478dfb1eded349188759778d654369e5145033f3ea0e7dcb7c4a2cd464cb3f1e4240f6f501763ab65cce39e1a0ef5170b3b82f67557838ada662271ae83bf8d1875606d056c270c51cc2c0234f7dcf761ff7e3f4b7401b54bfec0de325c2add41db971d76620b2eecf1c567cfb57ac9f61f797c096cdef69cfcf2456a2c924ce0c4f7f34b8f6c9d97ec441142be4af95809e93f67d877b93dff5b59ce7b626685d027a0cd5ad7e2d31a1c912678ca2fd84d61ebcf1d6897bf54507dc7cf37b4a17b8a88a43ae9792ee9d389f37b74b827686813a7c22dfc81ca7643feae6eb1b425b53d38c60dcb2bf9fd4e224cd74ca5d96059aa5d34623590312edb8f93e83e7d2c112372a1732ab90e704b536e37d41edef01f4518634b6415a0d6e933b2c0c053a6dcd760ebdba56b72c735b61442a758a99f20567a23a4a84c7941bacbbbcdc080cd5ab8af9f5da8d83e4a2b5c721151d8a2655b116ed04d845b3fb57dbfc3f7218d730538e6304b0319274a9ad2db5effc19aa2b37d8589eac529a0432d616bfb95c6f31250dbd6a5d053a039e573d4916516d9fae022e1d27fa607d6851493816ebcfec66f9eb012fc35a8c44a69673005804d322746f9edb32b5892675c025580cb84bf83177bed0563e0c4422a6b5e3b6d98f3c340169f38201ef144b64cea647921884bd4ae968464c4b49d35657e7f1529da44ccec69572ac78d9da1b7a2925c619b1a34bca1e19ee10f9c28fa03393d9c401c3bdfdea8b1eec1d2bce72092dba1728ed61a81b598b24fcf637daf024d5cbfba2b5551954c0138a4466ff6de8d7d990a376cd878d8a50fb77374b452aae7b3bf0a0174a56f8b4c62fc9677ddc852992cb717f893e555a9e4e783b5b2fcb9c69b5658ca7172f9979f4e1f263932dcdd66f390749f3530a8c82e1f459ba96f62dfaecf95521ce884c9994ea4495358e0396b8adf034ec2a6e1b59bd685476502dc61da97ffc3b4ae628cc954b680734c149d5b8a68a8880eb22caddb083d3731421e0e34b2ee0a7f1a8703d9d960987ba8f7872927b8fd6ac9e1b9d58d2162888131deee14124661222682865a7a54f93708921dd9169f25897344589c6a53531a5bc136abd6e51f39d9c9ec9214253f7f4f10eae547f9c9815fd1d6ae9e962b9dea59a0e28282e3c21f4e9f18e475c8c2496812e4b379e14215e6c24c24a79c5c7c0cbf40cb9c695b7585006751e32fa0761c185fefabf73c23f7cded931400066f6ed45f089e1a465b01a305f2e9deaa53a18daf531c65e018893c1b704810fc52d4a285d00471435e49096d3df6504070acc55b9427c7ce421faf5e32c029dec4e28c6da86bf8b2fdcfa61599951ef34b72620d197a97676f2f9a1e5128c50e142d047ef8312b15a80a0b879c42a54342b6e60c59615f3bce3d7ed461de6d0aeef8ad2245f0830beb9c9c4bcc8b8da104cec401ea9879cc0ddde028db4dac65b3f9e8f028269ad636dbeada90ec32acf04e8e66337c81989c6540842412edaee1953a71054fdd35285c89ac9fc13eb793aa97a1ca8a1111f888226ee2babb37164f242d63e8c4792ea2db3a2fb6fc617d67825d163d72c8b09b08518da19faeb0ac387dda6ddb42b823522be74a163b0bf9d0e0bd23513d433264d48b6405665f20e9facf5b9c026372a0ca5cd6f694cdf605f515c826e02ec2ba50627e770e6041bb2cc94e8138af0529cdd70a281f31d083d2c6985e41e1e08b5db95d8ef762831e7c3e932565f95f7f7f0c30252ae61dfd22361071e2eb006a64e68d97c1d469a661b5e5f31ad0d5f486630568584932b46beadd0c43d8a6ba0e808b3bfe4469c585b5a364b7d42d2b5c51d68c17e9c35c185b3a87d50947fca2fdd2e5fd21080e50c45804dd61b9a6697f4feafa362456a01dc57f171b68c4dad501105f08d8e34b58605dec180fe84631ce1f6fbcea369b990a4c9a7d8d851eac7265845a30d6ede878da745594537b2fdd93f8ec896e7353859adfbe2acfd6dab3301d93b47ba10afe0506a8eb8a60bffad326539670cfe3a3c4473bc5079be6501a7b43e8241d166c58038089ffaf68a277687075fff9b0016371a4e0cee655b58f3df92072aac1406dfb8ad425afb060db4fc1cc4e994f0ae2df5812884eaf7ff8d61211e9e26216916f166e8efa3db2893cd5edef17274cecf0e3beb62d6a0c01c42d10ec5c9f6b7cdeb1cdae1757140bc01b7f740bcf33cc56c659fb1b1bd61488a8c21c61cf9b7abafb56157fa311dd6a00e55fdfad5c1b617e88a9801b8abbb42399dcaa7933359441bc379b881868ab34a4151b581254b18aaf44050f8661a72c0cbf8f32cf17fb234487039ca4480405503647361302b769527d025e55a102009f379872dbbc402ea3a640575205f5216e35dbfdcaafe39906a7109e74e4356fb5d74ebfc57d03b23df7ca2e8dfd0ee7529641e5a5a6e6a82044b83660c5b1b805012a8038d4c65c981e19a8d4c7a1e5a1ca31a4309210f553e851bca5a01787f167b45a927e089c366bb75cb2e06e9ad053f3a007fbf33f06048597b01dd73e1f5d64a55eb33aef9d631b9094c1b58562c6306f784f1db3bb2bbc6e2c996178c364b4071a3eedc531b6bf0b16f62713ed9350791e05f111e7b07e96579d469692004ae6415b81bb97c92a12a5f823e4b54ddc4365ab0dc8105534a6ddb417360fd261c960a3a741340ce55dce424c766e484c64fbc8c454c96c87263b5833c5a13dc126f491cee49b046932fc6f01378d3529342cc9d5267778ee8add042cc3dac4c19579c0592431423e38bcc8d2a67676eb57953880dbaf0cc34b5f4272cf30e9eb8b6c99d67eab48ccd58c0a4141de901b45a18f87e2e48aadfe1e8d9636281fb78f4998d7524d7aadafe68dcd980a032164fe593aca9c951709b760179744f8be079d47dc4dac6a591e58cde827ad62a65bf80019f14b9e96f4a6447770fbe7578ad42145df5caa47b75f65217f2d1102812b2eb5f58619965557b52641d18e2c8f9aafb475b29cf1e176dde9ecfdb0de8af43f9f55b098ad92683cb4885a3f959c3d6da8af62b4f0431b82d21fb3a492c00fbd26807f9e4532444592b2fa8e3b2748c582fac1a4cb52da0e5a75d36eb7c6ca21fc04378ce5bb786a516036ec75b75951d3c673cedb871edaf39dd191c605bff8705f6cf707a47105710e93fcedd2db9d2bc0edb5b94676732de6329036135dbb3400a47f3373cab1622c9611fbf03bf1fb4893dbed475d5179ed7b0c90663fe4a7966267f1bff1f8a538b1de4896171ab2ec0aa3dfd0501058121f495d84b30f5b6f2b43badf6345cab17bb42c4ae951f319b6c00997eb1a5902a3e905e56395c01963b50758ab13432558363f751f422c602ca302f48ae9fd2d8d5e120ece026613a01e6fb2360b9f12ebd6faab4565df4dd0bf548cbc09a501403b2a676eefcdfc64f23c82a0794ef88b08d653e8377c31478766b6eae3e10c70e28795a2c8581226d3263056f6d344da5e6b15742193b8f59dc209c42341cd73f6d20025f6a5137a339541e60eac963e4a215675ceb6536f64ef0ba42247c2edea923d4525257eb396124dca2b6b5b4b5e81ad69a9448f296f5613177b536b233030b3acce69a2776d15aa6fc77002660e0460dc2bdeca982f9fd69a990544d85a45e9b94ce22d4a4b27ee637d6b3a32cb424729c0d5a4403814ccaa05ddde61eb4a75f73b1f7d8092b18031b7ad5126389396ef22d99ac5fb5d5bd23c3da64445a6bed3137221ded65b165700c6e5a4b8a0f6a8ac4b1c7debe20a8fc6a52b140be34af9609aa899a87d074fe3387652cdc2dcc2d7bab7fcac4b5f4f1fb4db45a09890c69cf970657bafe988d98261a50aa1bfda3fa8ebb69ee1d0acb1ed455d963f36c7430f17b6b26c239e4e25661fe1a6266b4e862630565df50517aed7c07f3f9377dd5c1cf1ff2a4bfccba1c227d54896e28ee305ee45183304db8a3112ae223d64d660fecbb472c920dc882451681187cc6b3ff964ed99111857ffbfc8b57f9afac8ae1b9874ce31a6fb38fb311c997fa57e0d7f28d25925bc378ff25727b042b62e9411eca2a50bfba244b52b6538f4fa31cc05ae85e0e75cd4bb6752676cbb2362c3603ce08fceab5c2bf0b4c4888e37210c3b6a6ac8bc96b9f28d2f16fd6adf1fbc850d90f6d012936f2c71dcf081e8c63e7ee103693be671c5e25198eae825bfd00ed34662d6ede27ec6c6f119968b9be35eb6e25adbc886b5f57e7fdda9b3cdbe5c32737c4979c3eb6e38b36c229c0c9b39308a0622b9534334ea3e1e25e5c3d80b8f9a7b8e62b235715b9650cc96a2b6bcf25d03874571ee3f495654f3583c9d7b5f4e093c1527dd7e941c6fdb07f8d65880eddb9fd96d2763005aea887782af5a35e0adc92daf43f466a821f46c796a8a40cee6d2f19f8f4e93ae775bc0406df68804c1cc08c3196167dc1faf409ef3c0d652bdb72aa3766097d363f3cef069feea2cfdab32edce440c2aa14200f3f29a961bd8b2f0f37d37716c38c6e01d13b1b0cbb9ed3889d32ac8166f7349f2f77624acc05cc11a1431b4db7e7bc0110bed90537f188641a8742021c2b9682672f1e667fd2b3781dbedd693ad58db96a2d0fd66b593a88feebea8cf536b0808e59c7ffff794a0c524da5b473e04aef8892a5c8806051bdef668c6919a2e8604cfb445b7482fb95e9f75b748b8f596c11f482219e8e35cb950110dfaff7a8ec4b1f7dc205762dda89c5e7f2aa6a23f8ae5c9029ec6a4e7a9ac35e37e0bb57ea30cc5a7edadb47a4dbbd3176f6fa105a07d1b62a937c0592a3b55eb9d3785c23a60bc3d61c3cb3bb87ea22489ac6895cc35bdc6abb4cc0da5bddf9acb1b5215f53e3a011f31ed8e73451a0afbc57f4c48a02ea328a63e81b6745155aa1fb0d65df5cd978860b1ef08afc94f58533ba5b06cfc9ca2b48e61d72f59b09ccd188fff37e5653fe8aed9d33f2e7601ce444e9ddc95f7ac48320a822f3740259bffaf3375200ea8224adb7d43b7f39a9f2f936b7f9958a7e9d00841f49868d714dcb0a52dfbd843b5fc60618e046c756e340093d655441801ded7812ffbbf13c04640ced2d766a51c6a152a4e823544941832c161782e9f38b4f4ea31bfa78e16b2bc1af4514e5ebdea463235bfd26aa932965eb1708c8fe708dcc79a72a68890b89f1412e7d3b313138013b41be86a2629a7d646bcf26ca5211bb3daa350a5b6ae7634af09bb44c46c6f394a34dbc59353d3c281dbe4d7ebc42e2962d02a68012abe07394549a64a5b402d7889210f6947c69e035bc844333880b2d3779841f8b3f3064219233a0d76bf6acf975caa107bece33b9b31241414bfca9d082eb615b091bc49f3cc929635497bafdde3184176c31cab38a409f6df37eb40005256e0c73693b173aa227d1d6acaa9cb58ec44bec5b4c2a2956863fe859f3d0ea786d26e3e173907406c1aa58ff23dee2298c2ca7146227789c1d4093551047192d862fc34c1112d13f1f744456cecc4d4a02410523b4b15e598df75a3ab36e7b8be3b17a72c0a53c946aba017a536ddf394e126f52e9d0c6d7fdeda6cf834bf6dca933701b26529a4cca01f73359ca7e3d99274b67aa8c955c96a8e0dd29e97366033e0d0feb20d4b066d38e4888e913a00b09022b9eeeb4317fb26e2c4c4ddb731759b915b818d20867b72e838ad487a8cb3ffd666efd0b9ee193ba84958114490d0cdcf735407c9cf4363faa0493c09e0251a3e0c1c282eae4d12aadac8c08300edfde7b09a2bab336d72986a12ca8cad7c85b604043025faff6286e38769d72425b276adc467596552254df06a92673732a8fb0938a71436b8a1b91e247bd56d0071f8b5832938e789f297dde1121e2fd02a696619fb9df3f136bdc51084f23e06b2fa82370fee1c7d70e27cf6d83609ed508db5288c07b541b7f182dc13b229c10bd87e5089cd76b516ca781c433337e2d1c470f4f705fd229c10d2078699b2a7d33f1470057ba8c95acc39e1e19a3c4914ca140fcafd2e0c69882d037c1d5b23af7aef06216d0512c3444cb841dfa998a00b38d95671da6786c40e5052a1a5dd073868a36c163e39d6ef1b2fc277e249f9e439c247f894dcaa61008eb8fb052c60d41ba823fb96a70c094fb911f798e588f1a18b0df5cfd41acb8e1efd5e0baa42fa62a507a1a0d2e94f34e48ed31fe3d3b00a7426fdedd67e700171ce5f2bdf3407f82a759d0f45e51d8512b79ef9dd70abcf1e1175916c3bfb25377a72e823aa8926990c42248885f09af41abfa92ad65189f95bf13cfdd9d943c0a03dc3201cea88811a3573134264e0e926c9c0647b2da59664f55313ee7707bdce243f4d11c888735deb8d6eb0e711727a21b212e5acbc65daf67646d070cb7f52aacf130f9fc0d015e8d60347f38710737c00ae9c6b38f81c7918ff26330995ec55f51a9cdcac27f091ef698e16dc43a11d3ea005d5a5cdb7f1bdb5665a6c81e99a43bc101bb50b6c8b2c19e9cd6bac91a9ce8fc8687d471c04c6f207335ed3d90c3d702fb975cae8492e9ce183cf9bb38622d64ab049f4d706e74d8f7a4b0c491034ef324269170230795b0bd662918556fe1c03397667779c7110758bcb8ba83aec81ce42f94038f57edcdf41ef3e958092a998609d1f5c1a06f34fe45ae27500a6c06a47c106faeca1aac232aff35297933750c2187d13240b5e751073913df606338cad3abbd6aaa44d5b453f404b00722df2da93113b3f10ca8b9c9028718f7d53ac0fd0df4a93d92d10d617a5ed5fa205c516776c12bf99c009e55b18ae319e995ecc2df1c55cd2d27981c3b4c809c5476e025ffe584a18c766871ed25280cc7d0b8e9c93e55a03d5fbb4cdcd59933e7b442a97386a53105937fe65e5fcf1998738b3c726091fee902e0b808020808009edfbb7bad76f12edd4b7bad40c0888407cc81838df13159976e2965dab563c8bd1f25bf61df2830de35fa82d0e4a1b213e581a3ca5d80b6a6cd679b65888b67986baee6aac820321ea329841821ac4b1f3d047b21bd3228b7643a53ab6aca04b8291d9990191f5d24fed25c1f60f076b33cd2b399f990d6539d6a35b54166c7a3c33b7f1cba6ed878afbbb2ed8ab65c584ab2f23af9e2e901dfbee88af7a8d9e39fd041559355cca21cad2d8b85462495cf6de00da670884a93ff153272d8620027a486448d1b612aaf6f75003be8f7f333cb2619e681dcb51ff563b69c3e8980c17ef7ef8e0abe99cfcb335492e4fdf9de946c67a25e0dcaec687b1d5b2277edd7273b607f680c77e3870f9074815d2f399059fdc35042116220046f99cb54ced068fb9f497e724a556cb0bbc808401daa8796e52f9da313e9e4a7b43d8247ac1407dfb2d294199c8c42bfdd76c1cd4c9a40cb27d08d5957ea7e0cf52f8f780e0bcc8ea304f229f4f0d1e3ff65f42d4372849fc98c6a8c65cbb4da3a573a107c1d81b17ac6dfc9dbe9e0c5277fe9878a981bbad54d7a63c6f64fb9899dcb377eb2ecef3dffa521d8df390c60abe804aa76cdc552fa070701d11753ece989149d32d7f1f6998a5a733aa261afd138cc2a726268497b57a09ec6d34d6a23bdd06005085fac7bd79c3462e46c1eda220692f6a14ac1b8b255263c4d520b33af92509347e0688dd30ea4c0c7d4b4aceedb6b695314c298624e209b4b08d801a783f3445e1c31b7c8d94aba12427930e4723b33406d5506aeb4144a9617d875edcbd48113bc0fe1fc24aeb98f5d764e4bf48dbc30fe80e7ddaf8ab3f6281478c89178b030680af3b818592604ceb2ef6d88e66beb6f4d2438660b3d32e392f082fd693b7bc72bd544ddd2673a3c35f99057d0aa3867c4a507021e5014ef5cc761392e88bd827970e89aa1e6f9500856fd88d2e1e18eec5292aa4c5462f57ae3ae6a4f01bd40fcaaec784f0908b232ecfc447576ac8dcd1320871cb1e59cf22eb0bb540c45aabd6c979e633a3109bba5d4b33fd2620c6fd1fac116d0658dce8eb152c6131b68c39f333465e03afdac67cffcba5dcbb2db72697fc217aa6f16edf7572d7d082117290664de62ec380c1c33486e7fae2818e0b3e9a9ef7bebd032cbf30fb2d47dbff45954552a0f5fe3ab49bee2a1d4162e01202852c1a1a90645754df61a4726c5e6732c529f6b1d3afc59879e29062226bffa6445f3e550bf0e3d8f691d29c130e99e155d29c71718f7abca2a810af7070187c40bef0d8804746bdef12341f909e42037ff30edf8858486b00f0fa83bd9ae11712b1be1fbdc6246651594587357be42b9bf1ca366898b3461d43daa97a4b0de932de12b4f4fbd17495dd836da22614cc32656b2092df4fb040172d6b271ee36519aa8b12c656e26b55157a3d473b4867fbb44e28b78a724c11e15f635475063d3f9d73c3b275dbbcf7a796709519f3713064ffa91738cf6c1b490d0c72fbeac42d2d894239c721ebf5fa74923c40aa9a78fdfc4c6248cbb2c4a4a2d11302058c6ae12818dcc9696ae884713c7d4dd2264df5d06cf958db92a69abd4ba525eb08613edcb21c0af6dc47ec38b9f8a00eb717d2f8957ce783ae1981b8f6b9d61fcab8cd139867fa6e928c8817a53ed5c4cf7f1bf1504d536847c5f0224cc1a0f845c9e26956511645303eeeba78b05d78c1ec474727eb4aedf2146c85c84d0518fc2d354a5657fd0f37c7967dceedb5af50d7db5676e73c795f9d6d5ff3cc8106604b2c3322fd0d110bcf05fdf2476cecdeda4ecbd7c186bed2b9692d59b0832524cc3dc036a0c51f3eadb3a79d6df195de5c1803c4fad812edf0f65a54a9aa099bf8f05e2bf3c37e52fc36072ac1c25ed1e5dd9ac9039f0a13fc7b739f0854383879da795d6676b2cb32e39924d37d8c5c0ff5fd5e6c5a28e7048f15736d2025acc752be55695d4109da72da162371c2cf2307a7ffa587e3d9d1a79c8c488c464b5a0f79ae8ce5cdb15b3a4669225d86cdc77927174fa6cf5ecc3b95441af73eb6ba5757c331bead345dc06aa8608f4cba75c0f74fbb354ff85cd17c25650f635160c0c52e083674253a9bb35e5e857927b675950378c1ea391c0fddcaa72358adc5e23e6960fb96e67a22bcf58ceeb087f21d8cdd18cb3293822d268e61d1834e82224fefec6c9a0aa50be4087c09777dc11f4b271bcf9d9a17dfe2fb159877a60e07663bfb07f1f433add4f19c94325b9c016c9be22d9fbf558e9f9b42f6aa36d2181dd82d5c3355be9eec6b7eed75b3fb4a4d861c83bd65b3cfb8e96a6a9f8366bad34ef3e7e281ae35b6b08393c61967708a801b608b3fcb09cb500c72cc1e449622fadf29641a7b28a07b5b1587fe591a80147f326da003c34389a99db469e40089765f9f5c82bdde561655e14fd5488eeabdb877f938e682bdd0b249fce8dda0734be5c8105cdedd243c14959220de6416d647afa26cebde96dfc705ea2d89ec7ce6122243fb669bb7370790d38353208108bd47edae9c2d6af1486020ba914b12df553c5c00dd907ba1bf61985f7f5ad5df79ef5f907005a6dfc6d714f25c52b1823f84ccefbc61ee06ac9665279b6971950e046c94ffdde6d5b2d95b676389e599317a0b2a8b768ad04f9dbe6e3fd2e0f40a05993ea43c878dacf548ac4f573b6ecbbabb43b344de9928e5f8b5e53da066de8169e005a825621599811368510f8d7e9541bddc5355bbb91dc87123e03c57fbf6534b8c872cfd7d64895f56fdfe7fbab8331b5f388cc28093923264811151f2e2e9b3a1702aba44b4c5c283b464a0108203cec45ae0481fe5ea7c2f96cbef53b591cafce99b132c28caef872afea90091485a9440fcb6d79335b10d87c88a8f1ceff3f769eaa2642efd58d9b819051b44554157613e994809f86356daa3be155758c11967b5f2bd45f180e3e2402eb139cf1586523259f1e8d725c405c9e4771360b4eb69795e77fc4bea4e40009072e01a39999a5483658e265abdafb7a834cfac31d5f5a17024b041076147d6c4d0b5db30099031a003887a84ac2f0973ceea7fda7172cac25400856ad5603f564b49669b6eda363a6c564836280a2bd1b6027011369751bf867b8d87032fa6af531960de31defebcf07613d1b9d78b4c7a960178ada9d2d22c7fcdde831ca94a78843e7aeb14d7a240767209ca0dc43e9d13c8734f40caa4c68bdaf3cdadb3b23c3873f403227d74dcc5c720e11353429e1a298383e2b5a1d53e19495b5952711ea495cc128e4cbf15e2a7c9879ea4d2ee07993bf4060043e8f52d51b4b611f170371875819ec1eb8c6b786635e6557a1d6abc0f08314725624f6b9f523a5ece018e6082d8fa7984c0bedd8974b0d1929cb1f67f48eb06a0e1bb78a4cc6ca561230922769117d005235b2b95bc54a5d6fc8bdd0f2e99ab50e7b7c8e47ba392556545c2c3428d620754df073d75684e91bd46d43131d3c1bfd4c2c0f0f895921538b2c5eb55a1abe5b5a8e4c34852386d4f817077fb1fd638397b153cbba9112b2ddea061532b1a3ac64748d9ada8ffc423ba3655d2d44574963f2a3a4d64bbf1a527e6c7b35039711748a7d30de31130ea5f9a5d51a7bbdf7b8d746c264eef134f3d1d810ed78623190b8661f186f93e03e020f11ff095e359e48864cece270a8c7c992fce179cbb6c3e68e8e11b2435f0fa4ea36645602a91e2da96bf78e041dd64fe166996c9b4512fc3ea64f63ec341fc8806fd1ca70fe3f6ef8460c5c753b294c0f769ebb9a8987e2be8f5ce85607765717e2cfcd72da0af4bb06b3b38aabc7a6625677cc902729805670c0ab497f1d37f8b7e5c7cee685a53ad274fb0c15b847232bac0945ca00be4e7101128d441b526b179c204dc9ba6abcd3d89dc42005159920c6d981181585edbca987e9ff788eb72a7b40b72bb12c8b3066ff7775b5fa0e5a4ca30bb96fbb7d76407127583dd526170a8fd4b671d1ed12a78af0bcd0ddc804c6d1ac56164a44ca4c380df6710efe07d1766c1002422ba121a6f69c5fa51044bcca2c9713188bde574364821c218821595b46e16c688c045ebc50bd693c2e42b7f653236d0f99dae8fcf3a346f50c8e29a72bd2b72a5a64e632c7c8f6896a283fbde8a32c16b8e788ca8402f874d275c9c3e38aec6fdbe83f7223650f740c1bda87b5be59142e2dbd15dd463a8521ffc21536b2132159b9f3e22c3bbae55b4512bc801dfbf344d31246c718121043539b07ecf232271afe8aeca9f301c4a0ce6ec412671a9a42010cc30a208afe7e9bdc00ccf1536967e08af76434ecf924de76073345bef170e135f56e05a9351bfc0e689f587dcf87877d6a23a7826d2c9bb3eeaa5ff0e015981444bb70779e61a0b8a62dceb941c41aeaafaff4cb060330acdf415cb74f7b513119b808fd219aaf62243efc0ea764c25a2dd0c2cfadf0c3e943bee51c26e83215da2e7642a70c5094499a8a84e9b0a6544c4db9974b3a7df383eaa1264da56347f1e6614e1601acd77d081f23eff0ef6074f0822ac62a8551058d39ddacfa0d4fc4a5722a58bfebb2285263f4a16cc4060d7fc5900808048b336f54492c2e58b6bd3651dd538e34aeb23e00fee86b4ecf7fc329d2f71c212a74579b73b38b6b034260a56ff1b8af5184959b49aa37b442338457f77dad05b52f0fb5622a576fbebdea16e918848626041edfded1161fe88f8af7078104d7b4ce5d4c1e7adb8b70959d4e52b239deb29ba371c44351b747fc9cb00bea6ac0b0b80a05b0895fe8a03241f2b2a620e27fb1eafc03ea2fa3e9e3842a09a225e83055de8a1f412badd6fc9ead12dc81b714afbd26a4acfa0c56aa080e0c907d76bc0da083738986039a5b7b24793ca488f9fbe297ae73f81914bbf104199cbc92dc481a97b548ba1275b7a102efaed07bb7ff21f8292673f3ad7c06b33aae2866196e126fec680d01ee78d9ed7c1a4eb8d52244f11eadb1c1a95711c476ae0b17fae751b320d0c8f98e06e98d29686768dbcb112994f0fbac8eb3d8ded684abd0081b9f0a59683221dbc9998cfd8060b35164524993d698dce6f725aa601951b7c973c31ca01895a25f2ab38f014a84c0c054cdf82349d278388dbed01e5344f4c7558792fcc837a3a28ffd413baf1ab8b0034bdf4d31efa90ddc6bf7181bceb08a2ab1147660624d2b614147b59569c2a7d993a618743896ec4cf6c7555a3513985b0a4915c85cc88209454c77e6ba072f3e6ff48dfbf5685d4525eaddf6c2447b4e5adae1e96d3b2fedd2f6878855afcf9aa571b2ae6e46e82fc205b8d9bd6cbb6d696ee2a9dfceba77afedef6582e11055fec69175ea59167293c3efe96eb2de1ffeae21f1f8abac0ea6dab76389c578d7429b3239b3c86e7661c988101c3f6ecbe342a5aa02f78d197d65e56cb184918839979be00fbc79a4f3c28e34113af3dbded176ba43dde302fd3583674446e3d1aa63d654475dbd621354063f93ccf3b6b8039d0b04833830eef3983b8832f4185fa7eb7ba2d2c4198727fa18eb1df8c4398221838c11130b18462dd2c6714fc61e0ae03f6a44163218e471a76154896d28f30a0c25b0fdfb42d74913452a7944b034bf87e5da39138e3374d43c9a2f194e01618d15887d68364ef4e64f86fbf9ddce903a5dbdb726b1bb0a87c616703074522deda5c01bbaba5236332aad5e4c6c80 +MD = 77ab5121aad5f92ce694137b4eb255faf7b8bf73ddfa44457ba8ceeadd76611b + +Len = 81096 +Msg = 8254bd11dbdda419cb3953094a0935a9d470335424c8904f40941159b5b6628324e3b542fd53acc38bbd797e3182440ef329cc40370b526acd4fb3fe2e19d45e01ff42f2e4bd1a796829279c5d694bc95163203e5375de64fd66805fb19d22e32291ae491681b7e26b65a58b58241381f6077577ff6efee6d5c2c1a5c6aa16b98e823f6e1d094ba79b593b72aa1d64dfebfe1413c35e78985f49bdf7f5a876894db83e8a81bb9e6f01ee3179d9ba058b372e453927ad1521a2e4be7ec7ff0bfa681df3c4c80177e3a30aceca6f65c02ce2815011b4c39d2aa67c0a61c3189db5e698a5457c42a0aa8b965b8af4855b6af5de7cc4f109d85a74f7eac97259f461cf109d3424e5df6dc17b20e4ee819fef772c127a67e58e5a133fa6de5a2bd7a72c6f24ba4954fdd44b9f65fee7c3546070555a5a9cc086d18b3a86c705f70f2f049c80ff72f6c28633ec720066b24268e8409c8d1a038968e5d2d2adfb2365a05f7ff92a2733f52c81498e13f4b630ade8d5203b69145fc728eed1b7c2199ea34500d964f173606d3b9d035f1837e8d777fc2d8a0f5dd0955c75cc0ee43f85dfbf0766d4561ec9f26bd2170b5a9d308f9e9d0da59644a47a89510bd9e9ffe1fdd47ceaa3e09cf96318cf133f4251d17d64a006b28633a220b869d64157c079a48d47abf81756b8674b7c3f2559b99348d1ed61da6591932cf1a5756eb8e9167df050f2fc82b2cda60bc1e2e2263e3d98ed6d6644bdc63f493aed2f8793e4802f088006d6a91902c9608645a131489917c1065c19153a6e1d9d294eb571187f63dabd31af14f41d7852b3b18803406d6b54a18d80f655e8502141181fd9eddbc170f0b9af4ca9e75aea306cbf238c823cae273fa2e77f748bce1dd6ee53cb5bf0d102e7fdd8a228182fe5be6f1996a033d87ebba67020dc76ada6cf49671ac99905d903c24045a8592abbf1c06ec58ef7d99049b519a0e6b8c5c24d599e42eb63155f55250dfc2ec6e1984cd9a9801631b94330f76b675bf91f5a96457fab89f7087a244fc62e84075e6616e35231fe898181ba93eddd02e3c157f33693be6dfce614ba68f34270c3a90b9805f23f0fa638312db2286aa51cb59fac5460e15e1bb7145d971ca2bba2c8711a6810121131e63bd27ba2770a4c031c09c6707d23fc84625604cab52d4ec57ee3333412ccd19386f117e56afa1cb1b452b54bfb854654e6edd884e38d6ca71c3d8fe6a7082f48fcd2ad79ad3d33c951ce4877c14ca23088693bd394a5a777326ea4af398cf30d84bc66e4a69b3b52dac6a87e3940b71f3014543e303ba43ca7bf99163021c4e806f96ab0bfdcd9553782fce8ca282e29c6344c4d1f180efe657897a4f48f4ae36bcfe0645fc7b7d9504a6d3bdbceae5632124a88ca048bc653e1c5dfed9e2e059987f089ed267de60d662301d6f8e0af5cf6777897c6c39b59424c51831518567968c4a6d3bfd384561d45c1226f6b3b2c27fba4ef2860855fe253821fbeafdff3bc8143785a5fbc13b9fc0427fbf9038beffd943bf0078c4d0a03f9275f9ca7f0c952e944c1cc952c806f514d632f0d5f94a5d1e1e762b90b02843e05c187b656d95d1e9fbbc01889bbc730fc71b763925f1ce24bd519138212fdd91fac16150f32ca6df10fe34c12b12b299ceb390d0a988a4fdf82d4a298829653dfe8f4cb011cc25ba286df39b0acc4c5959a5c11b18717a107b53a6f36997932ac3cc7e016e16d721ae859e749f2b98b4f46c9796d74e95f2a38f38145a0cb01ed71385d34c8f239c2fdfc5fc6cc330433b7284d28a62b11afd1a8e1abdfb7450c4fee4945187938008c6da810825ab6a7b42093c966034000490195529e6288709e92ac301a2cf83d5f57ca0d5c552b1407595538fc99738467a5a72025f7518126cb8fdd163100e23c60cea7a24debe3767c9a5db01632a3f53d1effbb9c29a7af42f93453b0d855ec30bbc59b697c7aca316b20c9a205c5b97003d6aa79974a009ef21d1bd209003770994f90d26843ca1fcf69916475527de75d8c38b823d2e2888280b4be1a4ae4c8702cc9af37a440efce204e8509b20749340bae7e55a71da8b245679d939abddf49468e296f07f248702d492c4a4e1f3f913a54f6b63179a589547c97fd5a885e2b8427689ad3aad3be78ca82be8c8f717b017145cdd9be280f953bd3dff10eec1fcedb933f702e38bfe919afefd51e86fa484e962205b3d84df1ec7ac1c717322c0cf4d3e746461e7b697dda6592932716f7340f3e1e215e4a4ed6b32b446bd85a26b84f19bdbc2dfbde402ca629b7fbd8f769d8a88dd0610f9642a7a6d0d185b10570305d3d570e4632a8cc3c0452ab472e351ae8b9888aa2af787eb9d312e13a8f639d3b2ede69644bfee2af892cde6b85e2fd870911810d83c05fedb5f695fcaddbbf3cf81ae55e13899885220c3d4de4b7a80ce732ed58f86272c9de4549ff481ebde703d32b3b7093144836bb6ff434fb44ffbab57689f8a5e1d5b6c7a44c4675c0c5b7d0e3034c627e7f2c021d685bf7f8e9e960c5aa6ad3d199a6444fea9128f05c7ddbb4bf8e3fffb36ea7efb243f3ed51defc82c235326c9e1483f2e10f7f7437bbba46761e72bf6b63728cd9d2364abf005055da430bda6b694d343aaac275dbda364230e443e52f732d9de5f20a38bbb726e4f97ba543880e6abdfc48381ad2431750f5c7fa9987069ec9df8ab5dfce6b44da27c54ace7e69a2362fd32a8ca35d2517ceb2de05fc848fb9ce8280667f8473dd6c0940a3d4e4bd47dc32e0f2d68f2840c28a384e1556c615bac2b3f6576a7b95d12fd0eb12e682970a4da275f343e772da38509f5be20b84ac3196b6dd8624ac5d2042cec1d6bacfc10cb83d83e02b561da46e1e559128aeaab971cf993e36c719c2de73681e2d96095769710ecebc9493b6daf38bcbe33cbf418b6813fb78910bfeec038f25a395eb16ff3a1a7462d34457db4785f906d6f0b22daad426b3af3dbdb3a5be53e4746e31c0bf313ce5bb396dbb42cc81572347f29fbd6325afccb7e57c827e10b7da9b90f529da8d0cf579e1c00be7cd9fcccbea29c84862348e7f5f8fc156c4e66f781ce59f9ecfa0290c9c33cb5e43a578848213f30c430a9d9f14348ccfd737dc10bbda4a036b6afefb855ca9ba4d33d07ba3a4683632f8a21febb3086fb273c968561a5193c72f1d4d8382ce81520f7cb733254c4e96c84505cb535fc1bb62dd8ad6eeddd64cba2e0a80ee613eba0223401bdecadcd7402d5b9e5db94a5bcbc17d219e165362d2d83a63e98b76ecd46d1f441707695d2903294b193d94fa771d4921722392723ec3e614b974b3524d045b95182e7c8f4a6e75bacf1426012f98f7bcb22d1be2c798167aa6437c53358dfcf528659ed76d1749d3c76588d6b9da8ddca55b771c35ffd07ffa215a5753b30b4e91d4569c58a5ac7e485943e3dd8c166894d62d86509f1e0afb35d4c6701b8f8799a52c47d4c1a7a39c18de8f65569748c7c5c58adf210704f3a872095470908889fda83ea913402a09c9e14117df1a648651c78fac2c945328a1bc86c7581739a90753ea9f4281fbd895d463bdd0a6a419a2bcfd7d69cbe0e3493ba6917b2a8240e8b4b37ef772fe51a3405c1dd044f0c7df2c3b1b80b6936bc776d17983d44b98cb54020dd91a1cbb1cad940088fb30da319db34e185d540a44f57049151a7cf7d6b93d1591813b6027a1732d9fd34c98bf99ccddd9c60c06e841e9c7dc06fda6316dce5ec6af4486eda6616ebed42c4ab2a7ee926dfba1a8dae1a6bc7d9fb6ed05f81bb021ad20769543c6898d07b837315081337904fd38435d0defa3ed8f137ae08ed34a82b57848010a47b373d9a9651aed89a8e706fe4a3e882af4f97162b7af8d8ee836edd32e669570d92075e6758f9b5c9faea641180b7e3318ca4220e5ec82aba3d2afd16efccfcca61775378a37f1740961c44bd44c57d3b868ec962b20d4f0255ce2b8314b2122c35fc2e4cc9958988c064862a78a7ad27cdc550cb2d2eb2613df70d19edaf13cd7004235623d3992d0a719cfb94b51f80b2d67c9a18a2f1518604064de31a8e08b03df7275abfa287e4b21da311a430d0e63081721d10884dae93ab918d8afd7876f80e22c6c05233efb47ca387cb8d82c87223c5a2dde3c0181461775586ce9724c0dceb007c04ab7be73e9f5fb18220ea09c817329190636314cc81d3749ddf5a36d7e28049567929c8d7d911eccb35bb65e2e954a21a8210034123700ad7db77b8a3abdeceb40769d7ecf336d3a53bcd2508be71a5eea69f6e63eeb38008f61dc4b4a9745299f0cca2c270471cbcad9fa5ae092203996b61b4b936369a9dc9ace98f5dd9ab94afc2a80cd2cb1e7df59396474bde41872b278495bc41a122c0b5a5985b8700209edc56208d2b6f75ce594569091ef64480314c9dc39d4a2475b8776404f516ca688a4bb211e0661072415187c36c886de51f7b460e71ec1f4335ed86fcbc45fe774ce7160392b8fa8bfc39280d3f7e4fc452af02df980d7fd3be5655953524396594b6e0d4bade7095da6ade49005e86c86b4678b95824c281a26064810818079e12498707b12d3f1a7c74fef9679f9f5bd9dffc4e4ad893e7929a48229dc7e59b260d9d1f2e4ba27442d61ea0ddb7e5e92eea21f0d88f406fff42550c7e8a6fd74071877d8aa0474dde0cc1d1db4e170acae37e3389cf64a559173fa122f5e2fd0223dab54ed18a01ae976d0ec8a89f3b4e5a6598f6ff8d0220874c831380fb56db82fb58e346073a24f494ba5e8deaf519bd7c9378b60610f5f12024d8b2258f5d1d8ddaf0743b51e1a2cd56e53486b2cd9b17a5b7897c5c4a033ef8db1fde00d751f6bdfee292d355306b86f552ff1eda61eb621bc06c4e8d3c1d81a310a155fadeca645727aa49001c13ad275fb073b0b06c3b1e1142623fea3051b93b0bf938027d70a1a9fe2d72c44a4bc3c1476be0f4fea346f28b21f2bc1beb96056a551f7b946556ffeafb1dc773e5730e3051fbae273d2ecac318161034b1c1f66904019883b4ff800d3c61a424fcbdbce7e0614a7a6b2e2076cf4a951f36b58474808ee7dfe203d0d15bfed8d2140c53ea71a2686cbfdd8a1281e0a9300cf936195527e80d6efc68e3e445e40fadd749c4a04f76829da57e230a78cb1b86f591c3fc6d27a0de41ce916fc744323ca724e2d6c8f330972e6324b383793647431e00d0bf151e929c6886590377ee43047be19f8f7d1b3ed0df9407914224b05a415c8cae3efb3e34cd1f3a7afda84377952d55336286f72549fd8112a44b74b392338aab13ab23d372e88eae53d4d0692742b2354228529448cdba981e2ee6d78722554621c305d0d06eb01e09185c61a8be1115aa63c3b642811e822e53994e96a576ffe7c736b59c1e593a8bc759e97ffc0c44f9bded03cdc41771433e0e8157495a48e41c490a0c63e4846a865b7933790e53bebb10f550e35fd5fb62b9083f6a99b18556bf36c7fbecac13b9c38959d191b277dfe213628b3230c5462b5bb5a59fba79fb0be44532cbe215f644a2698220f1a390c2e6790849122f7cc7e46066e6c4007db16b1aa52cf6ffb0315cd9075681c07255d71b070eea986b214ab64b098ed7533253aedf6a3b2f6c2c012edd8cf35cf8fd6dbee3ee2aae95c9e72dae624b5d101136782e1e2f23ae9747d1814ec6e7993c22db4b8172b08124524d2dabba1038d08c0d2db3537aec0589777f166ceed7949f069a43237cb1c3148b35203b7f41f2bce45ac448a3a8f95e77336e65d148992ab74cbded31ac18966e517a4018affa418441bb6f2c69d52f575ad1324d40bc6e63ff5c109dd4b7606d0f14787ae759c2635f133783a33b84ae31c962a16460c2a31e983e0fc001fb1dca7945049c83b8181f665237e99ef6d264c1678c3838dfdb271cd615f29adee710332644141a8b091f2f1fb7b171ee6a7053c14c10a70ea2a534792ee0d4746f7cbcacb80280c3bccad820817f56d3ecd0eb008fa23de760158987d92f61640d6c8038decc58eab99eebe533b7a05fcff31195c5416ff2ba048682a312a416476c286b36f5f5787627f4de3d0ef0ea8a7341f16b92afa906deb619fb4f2f13a3f81fa45f03f8e578e26d8c0bc9cafcb2ce06b4010a8f82dd10929e604964e4b9acc084956ae5ca485ac07f3e9c911ecf6fda5e141d8208b35696807075e7f1eed6c58c98bf2e9f4aed981833dbe5c936d53750233029b31ffd4c708a792ad3ba12a91cc76535cd27374ef78a2c2b748f9a981aad06e90a79912edf3cb79ff2b1fcc5b5bff1bddc33b47f8dbff1f4a9402c974e1ff64287669eb84cf5b5c9e75ce1a607d0e9096516f1845b33b1b3efef079f4afa82b8b25d92731a53e83b1a115de453a8bfcac0375b07d0840ffbb0f2b82a91db30ce03c4f8d9e7c5e3661385edeb59a5ea54a61b6d749e2f513e84d1bac3d32094f4f4435e6735ca2bdd6c110e356a670d496f49a54514a429eee4228be55f7903c02c4f2fa574ef25f37c492b5d065a7d0b8438af13c470feaf576bb829c72311a1e44ee91f3583666acc94e1ccce0ece3d9d7ec74b3e2443d24703abeb7add533ce4c9173ef8556185f59abe0f21d2853213629a65d22cae0a3b80f3b51b062cd38654367f2da3bbe75fb11c8e9264169b7eaaa4fe30f871b9bd6a0c11081c23184166c37a461cb9f1938e89e5a03216dc47bd637ecb16435345257189c2adba7dbe874a9af21ef0571979928ecbaaea76f6f14252111497895b59b079eb397766562c386b8229036a5a08a2f4855d25ee150cee329361f2ae787d357be22dce8490cc1956a6d947bdedb247a15db73dc41a56b37ae28cc94514e69d0a3819443b06ed7a06a09e51c44d1cfd3fc557b67b8f753ea55f03afefc94c43af6d7a6d0c1116b6d63fe6961fe09f400a5cad1486ecdedc4c8954faf0fe04c5d5e2dfad7a57ce7c6fb550a92350bf9cab7425dc78aafa38caf1ff5f1b3bb6901848a78a08337b171da15aef6106048f9dbc6072b3525dc0cb197130a10ac83ed0ff6087284cb3336a9463fd6b88f4755b85cb7be96b8010a770491434d3b02eaa87a9297d0bfd3df10f0a47a542060a5f70f55c6d6ef784fa96e56e493f04ec0f71cfe558e9bfb32b61cc52a0d9cfab33fe4c98c1c53aaa3eedd4c350954cf37a3e634f5e6e812f944d28a2e0b8a7c4539e5fb58916bffcdee5a5a7ed8eeee1655e01cbe012c80fa6118dbcd757250248c19d4725cbfe09752ec680627461127b4119ffa07f2acfeb6f8a05173dcdd18e1883a21a7d7b3c7c29c5f161fe5a2306981a3ef20bf00cceb79c1002f518be9e03b16ae973ce126e57125f6e85207fa1b3811e7721de32ea7a32623ce58c25e303951615675d37c6473a3eea915aa4d733fd2282893bdea927fb8017b7aea407a8ad1820c0af091e6aac1468ab7f1f1199dccfa68aaf7c955145de45c3e6b5765378059e0839f2c141f6845b4bf46adb45ae9a75ae8f793986bfe12992cae6b9a47452efb694a1796d97e344fb5104aec7f107628d82610028a84d45bcc1944c0c207488544581813e0ec5b8222b6916b1229aef7ffec073c7bd572caa715a980b1b0f0a59a31f8343d9b02768da247d61e1b98f2e7b242ee46db340d440b64821b276e83f53d7ea0f77271537e3b37d8a8d07c3e17de87bff17c624d2b613b6d08540a48dce374ff1658ef407de92817ba2fa20617da9f5786a243b1e581f7ea801f0c1cd88ea0fba337c6651314e13b5b205170700c525f0c342062f9d160a08c70bb2670a3cc3aa4f63cebc7242bed948bd2a4a9de677f8c1a4187efbb3d38332f608f2c8bbe64247d9afa2281ced56c586ecb4ab7a85e0d3cee4950a558597e44437e94ae3f2228b428b9ab94929aeb706a0ddbfedba597826fd0a3f977ac7397ac1c3174161cba832d51eac33fe419b91191e51dc9fb32d40b43701e63d81d11e3918a460df9e1d2f3ea67779c5dff1caa80f07b3a09e71a0cca407ce48681982f04278aea61a689c0aaab1972aba4817c018280f677bd3cb88f997bc15ea915da9d91aa76fe0f90ddbc3d0f897610d1d03d2594c4ecbd2258b70683c4079c712a864f0c797527cf9246a5c3a9674cf2ee5c601f6d10eeb4336d0cfcb32a629268e4e91abb71f32e26716c9b9a255fce1e85bb89ba8c58db93d7354e576e0462dbe2e83a03987d96e36419012359514ca8e0bf3a7008037dbe1d08e1787c89c8cda5d3d61a92cced0f48345c0eab2b53d396f39b5a2bf883fd680d1edefbf9ab84583255c908e81df344451421c2f4cde9cfe0123f9e3ed698e0cd6b50945cf549218e1fd6a2da0cd781d5912547b4a130b20c08e609dd5cd7accf3197efbb8d64286d9c0907a9a402266b3ae1e173b7f16801e61812deff02f59bd97bb31d5b1d965a342ce05dcbbe5c90791f393af7731847129d6448a660e2bac9c4898b47bc93da4f05d4ff6b514bcbb5a5f7104900eb64f63da523393a9cb36b3a180c39884677555e8c956b041aa4573cc2fe95de09e2f8c07e779fd84a0e26a509a819cad8b8aefdaf2ab31ff2a3c5ac420bc356994982ed964dc282155461cc0367cfcb7125c2aae6c32beafa5168bd203fbbb0c41ffb8d96ac8980250c8678af5243d03747f92fd96abbad5b35a83704a26534b1eecb68259ddc19a1befc71b4705e2455a5bc532f264baf3cd8eee1953da92a893d5946ec27a397b1f32b7fbcca060ef1c871dd9100c339c6c0a0847c1770d973950fef9252c6407f317b6a6c6624d534368296a6fe0b93207728e86138a08a987d542ac0262e5d300354f96e4ea1c245795546172b0b057485ecd5eaa923851f7d90c11eacc135efee1ef66a8a631d4c1954b58b8cacd7e7705613c271df12311d2c7a53eb6812e27c41270720542e739ce5aaab2bd450a3c2cc698f98be79f6e68e1e08eb0c3a31342554ee1a5b3ce08c72ee1f0f6cb9d002b8a1fa27a701955f1f75e4b593f6059e3247c77f5f91bb70624a8e405d5a95b98181aa2581f3371147469050e78e8643d1c739584a732dd11d83a0c78d7b1b6e8fd2489a369703826f5bb3c4ee4adbaa689becac032b5e360b64feabe6648aa94a5b7b8fad35223cfd7af61a92722d5c618c89837200752794b450f44f5d09f31ae6ec0ace15bbc75b6c0159b94da3df2262b8e67f3c9a2c203a3daaafadc0d267394216817ff7a9eff87b894d2466bd15e520db1225f7ce17bf6ed6f09dd8d0991e26b8aebafe6c23e80db3353f9d7da0dc6a6d1305b194e10b8b80f9757975185a40fa3d0ff7975e035ede59e671a82d113da16a22f307e6e63baeb27dca484cb837e316c60ab307101712a1610ac5234a4281ffc5e3ad8e18266a03fcf4d19effb47b2227614788d8df57f5f78f5cea502114ba35a9114268f5bbd43c1e9874f65ecb477921db48235fb63df228f6eaeb816284bc6eb868a050aa0d8371263767deda6e0675f8afb83e366198ff1a8ae20a7443a05a2c6a86de3d961a15025018dbb180148325256125e04932395035ff6551e12a94f4aee3487e574931b425d1fe5663ec73ea12e4bcbade07012050083a0144a245989e7e35753957eec5205cefd301d66ecfde0aaacf06617d1344c6308d565094a0a0214e29228e73bca880553040199c5df19b9824aa86d5b07901f0fcfd7baa951e923ba2fb34e9212404d8730aff241bb45f2dc3b3bf327f57812256236daeff7f9aa3e8ad92777dfeb121a646ce2e918d1e12b30754bc09470d6da4af6cc9642b012f041ff046569d4fd8d0dccfe448e59feefc908d9ad5af6f79ed89c1234e8a8f86fd38967d3769a6a5fab34a6cc725ab6aa734b2f56cf86def3999b4e344040c50dbe2cb45a5ca7d2e2bb587ee96b30a2ebadd0af4548bd07790c78c32cf013f37a604d8c62a289d1e6bc9cd933ef984e14072dec017ce5fb8fbfb933776e9f1e1678505274debcf1bc2d76682465de02b3edb76803c2be45b811d0f1bc124eaf6264f9a91977bd9cd39c898e43649e8b6be001a5d4c0925072b154905381af21fe949df2b8e4183ded782ace197246227c7c9127fced0ec6500cb891e6433d104ba5b1c1ebca397f3a5eeeaa0f0561729621ea50d4ae7ff1d0827178dccd84e4ca06d9891a90adbb7a9f4994ac947cf6296e71d2f49b826d64b123a7bf86f339fa4679caddbdf19cfed7d0206aa5f527a6b0cc00f52aa2b38d2723b10716246a7cc317099dc8817e6796f6efd1c06671ae975d7d2ed25d5eda4316273be17500922b45c7e346f9ea253b42357a6a4d8ea190aa9a3a291eb9ac935f7cd67f81870aed6a88469fa75ab85326a3bd1a16b9102b480a8fa5736ea4a684245f56b688277809bd2059366aa17d38ad12465e9b8ac59a2097cdd7e822eb08b04efda06e7859b7e9190a137470f7dcd422758190620e258efb18c8a0d7df71932ddacbb48e00d99e8908cb129771a79b662e2c5246538ea821fcc24313f2435f647494f4d91c034008fbb9cf95691d7545e6cb3b98341a0e9500612967d1f2778b6198a9d9f9a97011498c05eb5ca2f45a25cac6e83e7c24dcca01de53fd037e1b28434e112850a12a88ae4019badc9b1b61c78eb6c1197d519040dc68b1fad59c1f214c0f268d45bd2f9d2891022ecbf2312dfd746a768aac198aae06bf4d0076dcbf3e3482a3e051a4d509f1d11e19770a8a9da1a907df34cc6bcdce637e9143d7799f11bb5903808ef27ebc862f16225459d9defb61ed940f50a6104d040a7b95ece9374f0121b25451f141bfd6148cb5085c8cd009384278c5d18cea71de96ae85a715ac30bd7f8b8ffc31eca7c70e9332703bc56231b88f57da94ba4c802d77e0432d516c59309b1919fd8b2890307554bf4c5a018c6ec9732bb84b088198986957fedd18678e1969b51519bcf28ad1ebb46efc6b8afdada44f67fb1a756066ad6ffabdd97ae07d0e680916f970864f63e9f43b14cfbda267a0446916be2d8908c5b1620405c03c83ad5a11429cab3459ba8c7471bd574e39d8ae1361de58662823a3783c8ab5ee55ef88874cd9823739b0885716f6331797533568a048699467f4514ee79c29f8e1c904e75cb973be8066785188ecd9851caa4af736aee98a64a24b74a99ca4e2d3a45fc016af1830da46fce22c13c32d16488f4db95450be9ac7e287d71eaf42981c198fff4ce83483cc6677950d885620b852ba9ceb27b776dfb6d71494b18eab9a92d56af55c40298145b0383c81b6d86435ec55d5d6fb85544900c691442d8aaa8c0f0e4afcda47e02afaaa2357c589e6b94168a6f6f142b019938186efa5b1b645bb4da032694b7376d54f4462e8c1ba5d6869d1003f3b9d98edc9f81c9dbd685058adb7a583c0b5c9debc224bb72c5982bfcdd67b4bdc57579e0467436c0a1b4c75a2d3cea034119455654f6ab7163ed9b61949d09da187d612b556fca724599a80c1970645023156f7df2e584f0bf4c2e9b08d98bb27a984fa7149c0b598adbb089e73f4f8d77f92248e419d0599f5bed938144c0adb36e4a3bcb2183dd3722e7b7dfd03121066c679f71b91613ccc5df31490632348aa85acfc126ba671618567f494c95749817456ae3eddf860e300c5ea74669adc8ee874c3fd4375ded6304c96cda00eef5a2c49180dfb21a2c457d00e22cec8235e7da988d52822985abf97e91a3fcf7e4b4ecfc91b41737f0ab390043e24319993c5a9cf3c92331a6993e8400ce10f72ef5c6945d979645200a4847128df6dcbc951040b961a2df17d4dac50184c5569b0f593f2eaeb8ac850cb3bc97588d316698026d2641889aa205d528dceda17cf3a7ade64a2104d4e7578146196991825ef03a0983925dc90dd43894d8302ed1fe68cb72fa1903260e93bacfe2e88a366d43c0fd187ba7d621e80af33e76f4be84f7bac986be3b08c169673e38fefeb55b3a9a322d25f028a6ea532c56e67aa94cff82d5363736e3ca808f7b64d37767f07cd28f0ab8bf2764811b2768a948fb1f262c7c52ad7c20ef823a6dad8e7cb4f3b270fbf75b9d3b23566bccbce6e61dc514bfa821479325f91470fe5d5796042e837a603b3611ccaa114a039ac6dd7506724340ec2e055cafe03a15bb584bbf6798faa51f72a342c259c1b44971b36daae8c12cfb895a2bdb8e9f9a0eb6264d6798f7b2eb37db0533d6d7c7120ef36c781d3f54968118fc43c6a8769f9cac16f62c7a6fe7ac427dc53194243dc522d939bac8a0053ec936b02f5c8fb6306783dbfc8ac45afa5f133f1200b312c0ca1eb56661f88fe7f441eb71c3ce9a9adefae0af2f998e48ba2d6b20245dd82472a2b4ca14447ea42285b935e51b950399e4cbed71d6c9bfdc350f040708d91ca3cdfe8ee86c189fda6ae523cb5fed9321aa6560596354874c91f466b19d5bcde4075a59e658a6fda45835e27c80eb71fdb276aeee2877c792abe2ec2b05a762bdb892d314f06fe908b7731b0068d7c6b566c67f390d79a837e9a1417c260501b6486ca57c1dbd898fef657560fdf9b9d22d1c7c40fba451c2b5f80baceabcd35820b17726c5d605c068d499a3299873db6e424c0dd83eeabb76b0f3c43816ff2aa629f018d10386248a872ed1d3fe1b5893fe98a88e909dab9391a0cbf759adb5439bb95c2a8c3441be48ddf3e371dad10319081703e290197663bbc911ce077f5fd07afab6b936a26add4e0f403ad8cf265b4364217ceb8d86eeebc76dbd32126391daf85fd2b5ccf80f2830d4a13cd9648bf297cea5d78f2bfad9cbf36e59f6b5a481600c1ed849cea6135b86ed2f782573bcb6f4a67ca8cd4e2ce08b28a2b1bfd1183aa5e6c89f566ab99a3e68d833d1d94acb7ac7015fd4b38d0b1d3535cde8e2478c1172ac59f623bff4e4586092d08643dd48508e3da9f1a45691db3bd2979db5603a0aadfc1898d0726106ee1d8a4250f546894dc9b2d018c8cf63dc4636cc0bbd07f6f3122392921a9bbaab5d68d4191a5cba648b58189269c0153fb32c35f0ac607da5237fd9adf67bbcbed9d0064554722afb0b0390b9424a388da0e1a10d332de9ebb59335ca0ee95350192b9e7dab70223bd21c01365a5616ed96bdd70a5d5680ee52c96e9168cec889a6e26568283eea4b670933b0bacdf5881c28a18e2fc48bd681884ba90e106390075b23afd2c4ca545234eed068951e86ba8ac541b35d51cbcb3995bb08996c8ec400a0f9b2eb0a7e1c03fa3e6e98d90ef84b0cccf00a1cf4b642146e5c4f2baa6638a3efce99f1f04ce01ea1d4bc6d485fd33ed7eeb43279cc0c906b141ce80d746af63930b7c8d36a3223a1a0eb245d768a2309b641dc8395ffd15938e7eade76005f7ee02ed74efe61d2e7dc0c4475c5d9820b4f9b623a98839ee1ce987a46f561a766e4e4668a91d5f11b8f0716b7d5262584c1a80cc55d01c1abe016e06d78f5969b46c3bdafaaf548e5c2c4e24c2ddad21d1552224c6cdf005e754b647a8724f3c20eb224e4d22ba1eb7c2af05c565e527e527febf94e8724a2961e4e96aa5688864298e25190dfc2d8c523870ed6196d4e8019b0f28a5ff5214a77e5e86af31b8cec5f401f6c777452a597f08a3772ea36a807b95fa8d13a80993e72994e63757f13ee8676ee5c7f01256c74f900d393ddd0314e693044bd6a8b5b3dd0df0e5e05c02dfc7d9ff6ab8f4c8b5983baa32eec037fb738ab20448529b78eb6a35d9dc6fa04e95d06adc0a123dce74fec49840a46d93bf3a1cc98797a38ad7324b6fc6cc95b973dacea85e2b04768861e2f5de0a32724c298b281ef86c7e12eea82419c351a4c461713c3f7fdb5224fd9bc81152151b8ce1a39c68f564d740f7b2a3500472951a0d192428b120c5ed3a358b752c83f403faec93100f1b0ac3f6114a0400670ee7262cdca44f5366439076bc83fa1da033dddca88eb5fdad2e624aa4a047bd86ae4502e23cab0197caa8a5d7d83b3084bef2da494f7a9b12d2b4a53faf3ac470f20251b14c64b9fee4eb6979cc707b25e7d28c01dcdd61f07375d767ab5a3a6234b68fe67e0ccaf014c127fedb2a3c185105684eb14ee0ba632e57d90f368deef90a23ee2bf3d30ffcd267e3aed911b08d03e59c575fa5c534368cf055501d5bb155a434e0ca50c2ef87bfd491fd9aa2fe468a8749801fc569270d4a0827875cf021875726e0d2ad7f69862e3f1815442745cd7c1240bd2f74884f42b23d5a57280653c188e7c7241ee0516d00b930388aaa35071c221c67e8d2d976cdf1e4cedb7c7000613faccb6094b82d81416 +MD = f0f1fdaabc6eb2370972e4eac9bd7baf93f7c624bd8272753c2459deb3b94620 + +Len = 82192 +Msg = 0fd5525de5c95adedbb1783ae198216919dec0767681f0e0889aef3f962b4f2aee17ef5979722a0792fb4e9a18e75086c2e1be6fb34ef48e4fd593554c1f2f560cdb48612a067cec5369fab857633ab27fe8ec1822ca2edc7337014d9d84fef4122845bc1f0cb757c50265dcc49247b5f8fd32b8e87c04949dc9226fb0e024cda707ceb4820c420e90ce754e87fee056d427789830ecdf7c7492dc02aebe09a9747fcb8f788e87d95dd51355c92f6b5ebc6fa60120a3285ea19a1850bea31550209824962b1bed82d420283bb2ac529657dba439e0284500cbe9bf9f0919b089545ac211c33adccf9cb69a4669fdfbc34e765a889903a02a9b88b738b7a7421db8ce8b486774bc8a5e9f53bf17aad0b04845b03873bd9fa6b87eea63efd633d5f3fb68824050f679c1e439eee33b3724ee528f9095ddac3bccd33e68d92ceb77aeea41097656f0656e8c361af6399ae6e8a4ddd728eb2eb07c8f9d8e9e33d2cb90a1ff23300e13150c9f318c772c60bfdd43845653708dce72bbee1e6673509b422a88199601c7534426118d8f9af17775386a553ff3305d565f19605873cead6b8dc633d2b675e5be27c063660db5d6598a791b13fc8125cf81059c9dbbb2cab4d0a0b809b5839421ad2556230c14a4314197f2f813e7ed862b9c1a5cd366bac5fdfdf266875b2815bd28b0ef2076a8a466ae2016c1ca7f2364c521be445045451bc7270eb363694461b1b7f1cf43ab5bffa5ee948d92a14d3568fbeb94da33dd33e5a02cc1051f53a0a8b552a4e375fe1764a49b00a81caca46eee0a4e6b4b344c3fa5e63aa811ed83f5f03924bece34b3d38a52a072b7e9bcbd4344f76a56f36ebd7d64a5b308b81081b1cfd93c7ea5dddae8e2f8593cac823e42c019411dc1a14772cf8a90cc5c51323f3b4ac64cfa9c6105728dc6719c00d932a73b576547eec5ca4f71a625824ef1e4a6ffc201dbf9502a2be91f20623d775d20e614f92c5c1fce0be35ddbd20ea7e638819a65effa8f9f3593cd0fa641fe0954a1e0a019f43dc62c671db5f3993a8e1857b440dfaa06acb71339070f15587f6af42321b6bd07fad9864e7c8ef794246f097a5a520e9e99d9f2cacf45c06b078b674545aabf66b13bc758f84a319bf06420527bf1303dadc5b7e731f14a21e8df83aed49e0240357ab2a4f1d04d39392023a66a6417cc31a0eafaf3bbbc606c8dcfc796398f7fccbdcf982fc7565549cb9addf052cb346d95136ade4a1d12d9bed4f652246d09bf2ca79d79d851d6668c0d5fd564555ba9c9bb9fba47751e789918a4d206a4c856f1c11c99ab48a6d98b0594e141bc2b2d6769014f59cc6c9147253adc883da2d831a57b55e742aceaf10ae4db91088b4095a6f864292be46cef831e39523f818f17dc24763448d0e0e6a2b78dfe41622c7bf9ecc35e996e50bab8bab10bb24cc1c8ed7dc43c61fa05915775bd2e709a3743ea4532a11ff287d04e750b5b9eebb76f60f006a495129f1bb08634c99d1aaa12016b7a9ac4585758cdb611ec0c45b932bee30617ec00f7ab3552ba78cecacd13c7c663f09088097abbe7896303440e398ec08a3b6fac556a6f4217e30d92e76bc3beb44c8b6ae460a26f3c6b8ccf00ad58ee5bb825ff0080e5bc12b1615a42457ebc3755bee7322f09b6f2aaaeced5b6a5d5413717df42141f29748ad30a24c77e26b2b430e53912792472c8712ad67bfbdd03604b35614ea6f20518698ad6194d66ee10e94d432f7921866eddc94b25e56e6bdacbeaa657017d8d002dc2a06473e2b312f20896ae9115f444fb947cdbe8f03f4e9fe45957b834d4ed279bc9d07604c86252fd7ab8496885f1d273b0c68ecb4863cd0dc275547ea1855efb9b84e033f7a7111339752a82011e6a4f310e5e674ec25f4c29da5cc2be70dacc5ca938d6068938341a0cbbcb3072cc0e45dae02d19125c88d5ae586af157a3f455660757beb2ce4764a584acda96ff9a35529d8370fccdab0f18d1dd03e2c25dcee4d41de7c7db33606a0e8bc6310bd949a01cd21c28b99c1f404e83bcb83eed0e4a2790497368e25681e0d1bdecf9b5c8e9e583e63d28434d4f57c4e3821f8e5fc18818ab5c7b3b8d1283e7876fd015fc5881fc93e42388e16d740842e76d270771801dd72a1f264f467d33ec6198e02b1277a7eec4b05322c12eb79f90319f4f8196079386598be244581fb46a5a009e424febbe86da8c59740c39c32473e07f1a533ea81833528f359b12a6331d5c9d0e922fcad1a61bcead97f6764c39d1df633e2ade87b4649e41cf748b64e9dc6f9ec7dddb4e1ee8c99555577fb08d5ab785df34fc7be4a7578f7bac2ba5c6685e1b765cb9a449dc9254d0c2a8f776634ea7bec2cc9ecc04024827244e9cbde8b0ad28142c7c2fdd701190a0b7cafdd4edf2643e14957363e6935c43bcf4d544ae7b636dfc7ed9d4adf51b5a75d02895dc8e580e9d0be2ad4c99a0713c531764a0aeb2cff0514eaa8f27fb56aab2018f63a2229c2fa61fc87c827e1698628931ce6d9aa2d29e96455fcfb8fe1e1790a8ca564b4e920e349ebe757b9a96c835917fe1a54e680cba8f6417d8b998a8dcc958d35a8e8dec28165a9a2166ff2d236dfd325a3b7b44c16fe825e5eee20deddb5641d7c3e9e80417971af7e09a3b5aae8e8741d1d2edb3cc31216707c2edcbc40cc84a546ea9cf8bbf1d85713198e23a7b08e37937b099908834e46b01f07f6ec28e3cabe4d8915918ca54818aecc3fb0cdfc79970357aa23586e68267bf10bfc0be352f131c5369eb4aeb796fe005d88831769b46235eea803ef4b4bb0286a14d7ebb48c31e1ca37fc5d2bfa61bb1b8392976e581234d50b1849769c760e9fbb3f6585ebb86f4ef1e6292bdf746cf8565ec51e1e9dc50bc0f825509518242b4385093d9c4fbe3350e49b2da2c09652655a58ef545f76e16e35db9fc221098b625b1f422a625f25d98a3ba7d0b0b7d83517ab68b5f1bb046754048aa02b1f4e8c243049f29ad284f049833105ef51e84a093500afdf11c340d518c7cb80d5d32562e4ab9143b8ef39a4fa4faeb6e51118c19e4dae820bdc9f3b80cd80ecddb7c2b9a4fd831762a31a2f195a37b1f1d125b34fb63e85198eb6e9e5027ca9976ae87ae9965460706f263a58e73d5b08a6f560b1c0cc52cb783c82be1d2b51837b1b392b2c61c952a1c269418d2c3c8a010c5c7cf3f4658217a4786463f97f3256bf76f22657bc99c9933e5ba280b0f68ddf08f9c64347edeb634d807d838d249c59a6d6fa92b4b664fd2c1fddd762fe9bf1e8c0ce15745f721d748ad045f5ba9a7e6b323f9f3c290284b506859cccd2b9c99e6a61f775673a277ffbf2ad6394ffa216ac5bf9cd7200be5b98304d594375ea7c4f2865c585a205d24c5b4631243a494b9de62ef3120dfe925d647582914eb914e797fcdf4b485d2e04709cf8f8b8f87c9f54ab179978e9fbbea881f37ca2d9faec27094d28ab81c5bce91e15731a141c192dfad568eff4fa44630f064620a180956c27799e3a183bce1b463133dc40cca3e88aa710c1a410772a89458e36c468abbde3ff2c828512c09da1b6ab5df2e0c7fb06f7119c7bd0df757d3bc553a6f567b2ab4844035ccd2cd6bd305a3daf0aee0bcc5ffbdee0ade5ca47438c15cdc981e109df853b03ed7b5cf518b0e9d9ad9e61574c3017771a129f941732eb9d5762af7c3f50981ed62496e5ea5ff0f74b41b234464ec4a3a7fe7bd0016a43ba1182947ef246b90229c12b1c1fb7d1ac668064efd8b8750ad9f1d577ac82bc98aa7a267e72c80c524ac97fe443490a5d71c2fff66dfd96f112a53317732cc4bd64b1ec173b751093dbb60beadf84099f0f91f9c4809ea90b04711b2bffc8eaace2b24bc5d6ae442b3f1f65ac5f196dc59275d8f6bb0c29cd01fe04219cd7accba703cc06cef435acf75e03854c599575acd713e977d6a79bad947494e4d969ae241ee3567ee7637d970a6c2221c52f23b13e4139417e911b69ecf2f2725ecfc8dc7c384170e83c31909d15ff69fc79643223d742928474a0b96fe5d69fd84db052a421344f874e4d669e87699f50229bb2204cb20558c0e03e85f39df7c641d9091f44bb55451845ab77371d4c70b94eb3bc27f3f48c144e4bd772c504b96ac77245f9434c9208aeb1cfbb76dbde8c01b93fdf84fa9eed4f73cd09f8312226e020d0d5787ffebded2c007b02c7ea3949355409e171f19a5848ef1f841780e4d787186fa779fb96857ca1fc4dbb344f79aa710d961534ca1d3da62a152256430237b50e7cc519310c163cb5b4003d1d37ab1f711f3ed8eaf2b49ac007ec22cfe4950f5844ebc80be5ab294dd2517540f799c7cae9694e8b7d603567f8df76ca1331bfd3bc589885a68e001b25096d493e090281812f060a21a2fe884466b2e002902ee73f85fb3cc34149b4289295a47f7b481b72faa015640f5ea7972c77903722d5293b0e70afc0677e8f69a78ed13053111f4b56ad0bc8f7ee5c5d9b2569258c5b005b5c994d2263172344a2a95df542f60356bd7d7bc51f261d043d5cb9521f29130cfac5937db69c16560e85a932ad5f4e31a9a1d3fcc79e40278d7e3f416db7c7cc63862116e475bf2a5594517d04b57678a5baa2b4a39f8c33f62a3977fa9f9516116b64a27f4ca41e1265d538eba112783c1876a115d247b621b1567a483901769ee5dc84e9896bcdbf6ab2fab4aa88dcd74bbe2690bf192a7ac404acc92ca36a76760752b5a45ca5d7235947122a6002f1d4e7d9c6be570d7bd2c2941fe2e16e02ac637066361d22d420568266b93e773644921f1a78a7dbaf5e2ed49ee4520dfdf97f826db723e140d2395134cf5ac5ff0b3b8afe4682217fd697c2d8a95ba6b2ddc9fd4e9fe75da7b950180ee56b6bc6a94291f4d05c5b77cc9c035fca84d4bbc9c1458b58fdf47356596b4783d6d5179f45c8907ebd0631b0ba0a86906424835df3ffa68ace423e39b3af9133339e8c6dc39353da2a9e1823603d0fc35ff2a40ad08022adeec352d3dd795e7bf8247f853a86a15b0baf95852d3f3dabfeeb9840f57b722ab5f46b95554d11b69b037b8629171b79f69754668f75a2e2c76bcaa0c1462799ea51e32ea99f5d8b92b80ae10dc924cf7201cf37e574d1e02fefd59ad274b563c26853e058e4945385cea81657115fc3e46b5089fdb13d2cbf0423af978bae20f4b4385ad1b158b6da93dda693842eefe42092cd06bf6730eb354f5f8eff7459e7a1fb0ea28a0d1e07b4060251a614bbe7ee0081bef3c2954affb31b27549a6711ce367c49d33401a3bbcbca0fdb93a07610143874f2e1b244cfe9630f0fa2d119a555144621600a24f7a95e2cb93e4605336861c73147206f227cd794a5004055a3e17715f913800213f94f46a377151bc4579e343365582093c7e95699450d5c66561547dec10bd17d661ddc4ed086205f7c3e3a8dbed21f906518d370d3c0a4594d6f3a26eb1609b06a3a5bffdd11c94140d25884d626a2a4dec689a05ed2b3e911e58b76043711496025545aef506d264feafcdd2dbe605d9fa2e7cc28ec01b25e28ba50aed79ea4f28f43d4a9ca927ae3f8b5db3801bf07121e7c48d45514318ca9252b4d8ff84f9ba8a8e17ed8bfcbc77c122387a9354df099c5aae3a671e327d77a8a62c8b4c5c6320225e1136b7544f5702a8f1d69ae95b55266d9789143ba4428e2710a5a93fc9bce0663032c23f6f57e74d0c6a2858bf180f1281408dfae6f9eb81acd6036b9469b079700583457ec8b86df4d968f3dcef00e42213f138eca6a9fa29a5c3a96d2c7addfc39642d25b35d51d1abc0845be1de2ca28aa8bd5d50afdbaf9b4fbffc0f26dbfa56cbc10b1fbd41ca669ad1e3f69233292d1a51e200e56c653e1075e8199dbb93e222c7d914c28407945da41d37043ede85b0bc23bd33f474196e95d952c5c5ee67d008369b5364b1bc71c3b1ab1c98e919d0c5c78f81bd04b1d2e579c38741346c3d4ccbba5827f0673ef6465bc3887371e336777eb70d3c90a22f6d73cc768c7ad15b3f7bba16eb1c2c07844ddf55a41652d5da93bd2d443d4839606a7aad1f18f4fc3be65f79cb63a3bc158b5948a38f846b99d57b6545402accf8b17a2e14ce0ef967023098b7c40bdf9e1d1aa99964e0bf5b4ddafc6722b2afdd4fb541942487186ad715bad8c8cc36ca0909c0ad1ed09bc901c03cd16a46acb84c122ec7a3c722ed6df72956f64e8a3e590dd40844bac58afb166baca0508931b1783cd4d236de97cdbc2b58d7f9a2a515102ed15e08064743c5d21f4c370fef85d1b4e4393d1611fe4e0906f13648a543f91731f52126a8dfb4b953f763069bd004de1e6142900208930b89cf6b42e6edb0d550906ded54d9ca676f283c36dc9bf902abd1af1513f4757809f60259111a1cb055b75423f439f1269c682a665bed9868b211ea6decc9db9aadf06155ced327f268f23e8f2f05103c023e9560c0cec9585caa5d60348facb79e43f2fec41fb8e1b3ca93faae470ef2c832e5eab2467419d1236eb6934ed218047a1b1c9c06b8c75bc6bb2c1906d59017cc82cdd95e81f438048736b30f3405061a4676fe900dea8b6f1fed174b4c5e1695d4d1de1dd831b9d60faa39d9bac5ccaddad590c6a093694b2505501d5ba4ee1444bd698c61187e206ed8d0b54ca27fbb3f01fdaf59091de4363b6d84eaa9c6d1385b21b105f0ac6a0b881eaad2e247cadcc2eb532096d0c2bb581688e1b6c7551971af96aa036e3d5084cbc034ce4b641be003bbde80aa6b1a25f2322813182750c8ba433997ea1fa49380ff5aaeb4106322ecee7910d269bd67aa89a808e3d04328ebbe9bf5489b6f7ce5702dcaa9571d514ef4db8e71440ae9e59547dd4dd65c58ea11b665b1361a08a11a936953bfaf35d3d6ea42ae826b724c5feed980c302225e44742e4d7a0bff5d0675d5dad28296219b9073b2ad47c987ee8645a41e9c4cf05dbc9a43eeab29c03abc546518fe3ce04bb46ba44c05b73d4bf569e070949f476675efbc1a624d73c04e2f1c188befb9ef3e70ade80f04167c258d5d4051e30c668976df8799351da015ae285a9276538e15cbf508cc78bc8bfcf943163be0e666df77d5bcb6a767e0f818b166799a583023c4a334a4dad47f64f4b97aba5d7e6d5f3ac541236cf88adeb7dec5aa236ddd4fa2e0f5fff4096144c8e7f536247b83f106d89f464c7aa5b1d1d8fe8bd93c9e81afd3d1458c003883bbf60e17fb86b07d25355d890e923a58afc79986836d7aa131a552de6b640c0b160e4ec5ab47fdebdd0603537cea50bb99d21e02eba87a98717d003359dbe6c321563ca9fc65712377701a0b5c2aefc2d6211667d794a54cb78462aa1e0dcd9323f76029b589150e3a9d291b77fa1f55b0dd091c10d903a64be100ac81a4c963661942aea05aef9270b5b8ea9500e95c6d2e7d8b5e209c8e74bd62a24b45e21b30e26ba183810a985fdf4fe07ee754bf563bfc1b881179ed7b4011f2449a21a4ca7d626827a56b0951447765f9556966b32d0d345853a1a9a8919406344b8de47c10af6d546f1ccb8c0cb7e1cff32f39cc2b393e948f1cac43d97344e3002ec48dc4db16d18624c8595e98bcc868ae21e85e06a1056cf3dc943f371619600d2c47c06dcd68948be6ff62a15eac5cee0451eefec673932d23e3ec67e39d133105f02dedf9df3e590fc8425a304379f8cc4d02a913a6abd26877088b1238c2a335d132e301ff2e972afa234b985564d35f25c28ef1655deb9399ba2b0db21569a632f8d84f900c4d1fde30fdffa9c887a7215735c979517e8b912ad03bd3b38d3e5ba6544a5a7f81d6bc8ef7ce084b1d8a88e92601ab2e963aa7810104624516e79365dd5a24303d36dc68c16b3a959cf2a49fea03c19c388723e747d029720d88235dfde7b8c7882985e4e440074f0cc6bba2083583456e5a4c832907eee3790953b53b59dceb6b97002ae7b3372175ee161a0801bbce3f9b6b7e2f117a3f62516b961f195944ec669663522e91b2e051fd2e73ce2fe2b432c8ffe157952fd14ab327328df77b167f8cb7ae18deab54d9b706cf03a827d308ab2fc83f065bccdb7391fb1e7d38eeca2d4d81d9e6b3da6d8ecba70aee45a6035c366b32976a5eecf2fb0334b5227e2fc04e56d9717379f5c8a5804ac9e5350c223b52990e058c66798ed03865e2cd978ce1b27f4793395aaebbe42b01af860c476606da34d3602f5071ec905620e3e8da2f1f352fba228288365a155d4aa4e911e00e5fd17de130bfcddfa65083c90cf2602463f3903d569e3d6b70a75f948dc9d1f28eadaa17510eca2fe11bb386e91c9b4a6f59bf91be37f99da4a5955fdeb6613bd18f030b7b848f66a87e592269a00817c22aec26a39d927b1920950ec622b6708f412fc4946a450b65421da673c5d015c42dc105eb162f8a38df06a92c53fb192f89d74a850813a77f2fa619eed51bccdd2ce63580ebf85467ac9136f79256bf1b30a3a637a622c15e0d9d83c41610c376ed03be486416600f4ddebf1127efe9bafe3adf918c9ae16aa4a9ecdcd1d882f53abfa92dc8b136998b944b615aef1f74ba45fd7a02a2900bbc735d1e4d9a91c4d9c2fd1661f05f6b2e5be3cf737ee9b12e6b09dc4f6254a91ca2dd72d47f794992b5c2ea75fc62effedd8e43b9c3d0d920550a9ebc03b8ac8ddf75c0acafc1ee2f4001934dfdc78cc3bf54a575e75b5459ab08a891ad417cd7d22cf01e51f11a760ac1f8311a17a944ac3dddf011138ba1140ce216877981c2220aea728e913431bc0a01687bd9b04a4a52d46f6a7ee4bf381c3492bae72316781796f08d2aa626fde4963c4995089d419a703d1a26c87dc043864f6d13cb9a7b5cdde07743d71e76589ff3acd319053a1d9aa14893a0a15486c093c986df17d4e0a58973652fe0cf6d04d6cb1c4b4adde43be21d4bd2f49befcaa7f6c7c9552aabd834aa171636af2cad2dcff70633d1f63949c0d8c83e3e858cd31b5eef1c26c65c2943e1f4e6be9b8340dfedb289bf5c7e1e59c2e847e450ee5e61d4bb3470381bb0674b31b9a5c56c562485b7144e1cf0a9128f9cd63659d992efb09364af09fb113ede35770caf51b9c6477d9c2740793111c94bb5dca733b5ee7ae1758b42e693ef2169e89a631bafecbb6de9f1cf00007ef75caa7d42e61085bb0c30aeeac37fa39d33d3f8e8b081be6aedc255d26c5c82a2397ec133d8ebddf97c5abd097a1d81d8fc02ce46fa7765db66f1fb50a78e455149f95281f38e1dbf99be63a8f2b5b25c2d3bc385e0d80996413c8a5198ddee8cf4e2d5341d406e92cb2346cd158f5db12c477fae49eed124e46cabde2793a5dca203f555404af8fc7a500e83caf3ab5d63eeabc91fffe60cb94905fd3cf794c7bb2258eb43f4e2840e0e64cff928c4ea38f7efdc495470d6269a41b9bf50e0d7a708a6fe0e8655b3ef25f0bb8a77cfe0152cf2f1af35960b9529061798e7b494cf7d88978948780f855d594e6628f4c561535d0f39e980326dbcfd21b00436859948a5bc9c827422397e479073835d238435d73fcfba57d3161ccddeedee8e326e33a7782f7b7074714f648a9acf2f81e69a098859ee4376f8111f5638efe523b70433d02a7c958b96995543c4569568ef4a9af2bfce6ba47b629b927a4d63e1da84f4ce75cd0af11124c5c3d75eb55f070c3385e9a2f8e407d9e89999512ff3417b8f79f8b6f82e48b85a13bd30b7ee96a97c4abfb211bf043caf737f4372e152b1afd99c7f87c8a51dbc3a5c14c49d04ea1c482a45dfbcda549729126b533477edfaf7476fde498f1a94409e5104f5b994bc8710a58a63f1e949c23c10fb7317f918dae2cf26396e798a2e69319e7d1d7203105b18393cb1c36c46e37c9126999bb28a56e7861ea900450ba7fababd984b9aeaf1e714d083a9a9bef1f53ed5679c701089ff2782aa786edf3ff5823e93e6281dbc5a44a6cd64a8314dc42a09e8c3f973655f31ecd8a8acb3196a1c87740c56b2a2b8f146f8bd10a7df317c4984daf6bbd14fcbe59b5aa88e1da1b021a585ccb08d4b42396d798a288f835d1ea3a70ef1b4161df45b540a7833e167928c19311f645960069363bdbd4504f40fadf4ea1cf8fd50a1805f79794374686493902e080f2b7335d142526de9fa6aa40a873144844c8c7472439d9a35a0dc1e21b16a727509a24f91ddf04163aee66523288c71404bf8f69ac81fe2f1aeeb499d458e65803a15db3afd403f9b6891db5ea1a3ac1441bdae5eb6a75a5fe6bc6c711441e91708f561346ae9717a70928d24b91dfce878022427d4dc08688f780f04e62c0722b96a69e6ec94dfe60d1203de37a36aa436f0e15eeb67f6f2f246bbbe83f6c68a969b7cba4be990c88839c6f2e4dcfd30c4af6c69c3ef2ce6584ff607b3482f35e7b121174e8f8c09292e5dca8871bd746a664db2241db02d07bb4b473dca480cf4d3e165bf2fdb8f381a50cceb09b2596f3e0d9fd6998cad48b13fe6ea231bf7042a430d64708644fd242862d44de5c51d5e339aa00ac85062595c4c82fcb0df61decf7505fb930fc0756cf30ce45da1baee470a4c196afd9fdc29e2cdfc0daa51160d066c770dd7c834a4e65c7822d68f18d257a06d7c9c45622e0e92cc3c421dfa8628608df9865e8a59a58aae3d4be4025be865af05149d12f4399b13458d0db3c144a8e56103ca9f11975e30b5e701d46a2762860e4fef1502ccae7a2e75686946c00d264c36549a5724a2a692942db7877b619b9e348393e02d94a901e178439e0657f9c30744a4b0b41cb7dd39b1d33b4c2895bdaba0b317c61547c6b8836a507c4e05cd5ee1e4a6af950c9dbdd54f0d03811d739c8f9d2efef8fc83e4d206e48cb9f372237483c07ed64dda0ae153860632dbc9ef997aad3c0772424cad3ee39d626aba3e45a88787a4219c071d092cbe0376c68c04721dea084e0ad85b3ad4160f13ae979c7c8133ca30ec9cd1978a93be97735c18ac056fc43be47026233f6189965517c12738ea0e23d1b1442525ee29e5d6451f51ed3303dfd6fc5421ace5989ab8a4fbd034153aa2542ebfdc87350e09fa305f885d9e8ce2eb642e5ba40a03c7dd27949ffb1a14547cfb8ae337d233aae406217ade1829ed2890fcfaae3894c6ce89d2bd176365e25101ed63bd2b60719eadad4ef709a0a89769062553d7113f93b0fe521056f4f3db263084a2aa5f052f0f4b2d31d9baba3fd593051a4f43d932865f856c5d8b3023539a6d6db5f7109f13433f13f03fcc28bdedc28b09f23db5f23f7fb5dff04130717447a6b6ef37f6a0dcab25b6f7855b0a5a832e6be61323dbe4687244eccd0a660639d51410243da0609aef94aa8edfa223708cdee602852b97672cf3477cba1c986c8337227f7cfa1533faf01f8ebc6f90b22ccbbcb2e2c9a0a46a56c9f8477972083787edefb996449fcd331f2efb58e87196982ecc429d4748b4d43ae6b967dc347a6c381dfe5c3405f0c67216a34475d453af05f8ae8fd47b92d561f119cd1d18d34ecdb152342f8eec0fe0edbc1d7d04ea7608dd2c878e648dc107bf6e927eddca957252be067b624878315b4fca4929e3570124c76dbf2c2c01f4f8c0a047abe7a9f0a848ba61a88c682c0a6233216ac7b8b6748429adfaf8fbf04517dec0a9b3f20e5cfb38298941479a9f00404cef1d03f1766da3a0f77818c34e7c343000b5d99616dc681b2cee7c43c52ed914e16d9f78d289c4e24b34c034baf68ae1d775c44e7df5327fba1b71ef22f6e6bf6840f4132fe072ba1db45c0d318ec819577c1c003a4d7f9c5a508d665e5f4f96ab1c6a8c357b966f958152145d4bd721a8514a72f5ec35bb3516386f2271fce1d38c69aa8d61194add220c12e3359d41f17db46d55db3e2472f4dad41635d5e807155934df9ae1931a1ff0ce6e5403c05b86c4b80221801f3a73db5be1b2c3f27041a2f3d22fd89277016812a4b1f1e80df6e11da5c6e5f4b519a4cd2bf1ac493597acaf0f27e58e1a4edba42d5350ff2f547262e6d354ea0a719bf19ef87a33809fe02f3e8aefd12b91b14db242064eeb29e1506c4fb44a62002991e0d113f976e2a43d0661e0a1d34f51d5db87fd1d67fc95afe042ef5ce450b673998461e341e7619f0fb39f47391225044f291bb4cb55f647e9b4ec68b9e8ab6072174a380936801e0288140b876194a2b7304a5a40bc6cdf30ae93b608506e201294b842f558678287e82734e2c50676baa57158eeba5f415c37cc8efa11697b230292472ed4809345dcc00c74c5e349018f78f6fcd6373316587f37b7b203394a6ac090dc323219e56bc7d965e994e333f6467c92995c7e061894fa66bba32131d3296525fbe4db0e9e24e4ddb97f0cf9e2c532da8a37ead37ff31f2fb4b3fd8045b70d34b600a2697cbf7503be0d8cfb5cdc60f9312e3e269585ee3b269a93dfc951d22febed369e0d80d3ff7fa62ae06b734d1a16aa44a66330aeb299c0abf465dffa3f23135f54595048fa84b3af5118734263c214c2fcf0dda9bc938d0f6a234ace8be4dae53369151a1c569ae4f56ac287fcbcd281cf4475257f9e6986e70b78963cb9aa8fe544b9928c7cc58e756949640e8c4e49c868de6b2641bcd71324529a7927eb260ff222f8737e9a78781df021c1bbeee18f6302c3d705eecb9876c0216bb805735c7c3a94f8e58369a78fa0053cd01c13cb3dc774ba70672a1b09ab7539f3603b71e9e7ad4438e728aac63f59a8533fa524ff17c8f90c8fbc47e6f9dc0c606449f941138d7eff2e7e28cab6652cccbe6044b0d905b961cf48c114949f0c887a649a8ca57acfc3bf33c9a4ee71f1c4030cd058f57425f58d98349b620660f20853fcd385bd5f0a040f365bcec51fc3757173ff525d6253327246844d58312678dfc81e9b9e555f64da17f73da9dd4f7c56d3aeda089b00279f9fd63cdfa6ad30d0a673cf64d947475b1381256453f28085986d74bcf685d3e7e89916e1e80e9aee3ddc0959154c155bd3006d3faa33e9c46b4208c39b6b9d11c9d5c5a71ed11c00366031c32ef537a2ff7cfd820a9a20dcf4377f63b33aefe7e9933079717f20d038072feb4fca13f83efdbd759ab08b95da53bfe56678302ff1db3f9e099f0d24ecdaeb199e541225388c955f83fc93b6c59eb191dbafc7b288b3da600db94bc5fae04d95431a9cf096306d8aec07a0095f213dae3b661e385725e905a656427b09223ea667a51a2200f22d3cfe571b544de34c86ad269c89063854d6fbfd5a0dc1a6a495327bf2831dd8bdbee1766a603aecc45f5a76a96c3cf4031b3536fb45cc7669abcb268edb96ed0558bcecf7f5cc458f826adeadaaa162df1c7b898de9cf9a732d5b2e54f21236ed51b73f29daabf5933704e6100bde89ce20f67f78c27518ac660919ae903abd5ef3fcf967d98004bac550173b579b72b971cd9f249863fafa9dfe71037cb6893e84b0a11bb8f37bea7677f894567f2389552971f9334448471961bdbb7f2da2774dfec0ac40ab610d90a11284d033a62415327e605abe087a235b863e614811ef960cdd823951be0a5cf5eb748c5f0374f90f4dbfd779447b031453f3eaaedd90a70280056b8c9bc9229c0dca53aa406048e9677f701e033201b3ac44e1070e40c709329d9e05ff322abe00f0edbc67cf4ce75209ee554e876561199810fdade93f4979b29964f22dbb814a4c223e7fab4b3298c418c52c62764523583d36c07258e9e0ac25507ca21e107548bad891db8ef1c017b817a5ab7d8851ea315a52c35711ecf30a71a6799c91094a7c31a4475d4d536c94f3c14ac2512cb7b41268c487eb27ef1070779a7b2d8cbc31f2c0d7006ed82a76ff89278dc93b278e060c5d2f9c1808fef5f8ed030b8805a1c2ed73be7bd7b824e6042a261706a386dd4576964f47a79ea72f5b7e54848d944a3403e09dd980664e3a3cd4651591653f1cf7052a3d32b62f26ca322f09bcd2329c6faefb65e906e03443e1d8f15af3d697c8c45581130f34e52368c59efa22212e9f70be035bca43f928939a2167f847c1d11bf99bb0715f724f683dcbaf4ebff17b6e0d3b3e7c1f91d433d32d1f3c3d9ffb523e1473a458d7357ac018431cb5edecf01196fbe21e052e08aa9ee9865e3b2cb04b73c36fc61cbce6760e1e55ab2ad83df19bf8c5e65c1d5c48fa2fa0529c4d7e4940079b5247cef38634a8c148b1299ed6d39eec1f9e8b75d5cc5850c2ca47055f04a9f0a36252eb19124a273589c55be8c4552172d45f9c7899cc5f56ce008ab645103662742f1456316a501aba96bc4ef8862a8605811959ebf295b5af6258758ea43536864fb7661872059d4d820831f797d00539d834a14934b9887554b6c564cdb5c89f991b704fc80c69497389b847f2db94784e35783cf9957628bdebce51f37dbfc7f58a9d5fd62d24b650850c72fd13ddcbca63054baaef28d18740b7dc7e56c4064b4a15cf0232779c +MD = 95b775992f678c97b3b16fbe564802cc77fbb881658c40789a6fefeea90d08cb + +Len = 83288 +Msg = 619ac10388c792cdb7d2e7a5e85f2b5e6a08d89b2c9bdd9d388242597e820eced3a969953981feba618aa3ca6ee73c2dfc58dcb661682e7932e814dd0a9b8df28633dc04947ce770eed8ddb6e1eb1bd0539751c2042be07314d787bbc6643fbd832163772221149766a3dc90c8d291ee77af7de69e4bbb32e539e41c3a43ecd8d15c461669d64fd8d2d5e981ac04662f7186a94bb630875fadf57327efa15bea78cbcd0af3045edb39554cb114e9623d48061c19d4420ca175f37c056ce7559c8155407b48140a47a30b4d4788e94dbd0416207780e912a1441b47dd397ba296f3e4e690ee6c1bc418df346c906cee5aae9dfb8d438d600622551cd8dfc70a7fd65f08726f7659fca1b94847b5da0eba4d85f684a496bf791789421ee53155ff33adee4953998c944581d2017e9b7585e9b559842c6cf7a22c9f02d6d3234ac011b8e03c203c7b370d1f1ac17417eb648b156cb46177d028687fa4283204b2677867267360c9ef8bff7b68b01db638fe398d773dcd1f12b4d411703d883c559f70a207179aa7b038267e04f604e123fdfd05c147f8cd84ed763ead3d6033fb0e0251cc50573e86e7870e35baaefe7606df6593f969e7ef7c58eca5503f506c5c355dbe451ef639402c144524a577f7c4e695357ba8d71b0882049e9caffd6f3212ac221f773790ea1c797a5d70b26fdc1a7deff63d03d03afa6fe14c37a2ce389f274305ea69548e5f231d8d9719a5f983060992b1d5d6baca13b68660a54f15e6b6682000f44dd3fefc75dba21263c12a16ca768ab3f42ffada6472b06fbb71ef42d8984040436200ebcc701a076fdc16967bcb5307f44190ab353ab168d9f6c0b1dc9433b5fee26dd76874875f92f34f6f64b891389c99966d6f03ebf8734a63edbc3c5fbc45fc4daa920e6f8294aede87cd66ceaeb5df130a5bf8e5884f15e0dcc0b94ebbe258a94b92665cd83db4cac8fefc91d106bb1069413e277e37003d683033881c9b9d88a2b0a5d5c955ae1b193ea3630959d3947269003944f0b2847853d193453973f39734f363bda343da61d783cbbe74d2a70d1a64a44045d4bdf372bcf9a08484f11265778c1cf01c0e8a0fc35158205e51229e92efdcfd0eeec3d51c429343758afb8d5adb4e04e0bf7b2f8c7d3f251f9b993bb3a27fdf0721cfc418f48840f1c63af2c3d5bba738f51c7e05d8db4bbf8c5a3aef4590b5685dff87d899e6419eaeb7dcdb04cba1ccb9554657e9955ae32d4ee36d617945d8ab3b6585b8150f24495b95caefe7b943120ecda938d31935845b7d567da15800126ba847da7d722ca00c64b71e75b946092f5d244efe515d9c6a52d12270b5889a7796458686315eb9b390ca1adf677ca5a03cefb27fca037a64a807d74e26174b4778a8449816619e39622d6a8b8b8eee49b234ecbc4cce282fc82024a371552ec495979c1be7de5784220596e3ef23ec130918851f9f66adb5fa4391d75fec4ad4373b17776d7cea7e187d274d5ae4a8e487c5040f8a7411dc8598a752b881a760a4bc3c1470e4610e8bbaa433937829a67663f1f4d7a05c8eb348ed7d44bf4e512541945ab8bdc31bc5e795fc6389773f1c19d5354c9197b2ca7becbeca4b468d02f2a6b20cb0198f0c2a821092bc9b99c210373cb2f0ca3013582a7e14d097fe83f8fa8235656a51a9abf4d7e8bb9c9aaf709f70d064fbf0d6083126e8f44a8bf07b1833fc83be49e49373b92d2e822c2d609539709634d95bb3891c0f5f661b90a2892e27b31e5f040a851e28bc56368208a2ff582d7cd5e97fb8ca51baf398ac96d4da7e9c907b5337b46ea20e1f9ff7914d2a51d2dcccc997489675adfae98c7f819ecbe71f851743871163cce551d4231f22232d5aa44421c1ea45df81f6788418e4d43bd0659956866f339db03361e59f5096e50146a046a92d87f993a7b8cd22136241ad0321963af0da29892de600551a72a3d69a252d8ac704a235e4938327923da0bd47f62e2afd1f197727aa9cc9e97e0ee3881dffeb208483719553ceadcb2d01081a6244dffccb158309f6df842683cf2ff9cee355a0cf444ea23ed53e25fa0c9762ab01df57a6c4b4bb12f40d37498dc2d381024fafac8cd5f39dc161086b6871091a8cb47478cf12264601ec8698f1a5007f8361b5e4030c70b7b99fdc4abe9ef5f70ee5bd09dda530da2faa7938a3df660d8f131a3f52fd02d6e67e0a5db527108aaefb98219776c215a5ce7af04a78ef764eee468521b08f407088f86df613401a957d6f87a58cc5408ce0f08a8e798200e779a17e172b003e7e450f41286a6ff1eaf3a904aeef1fa30b6843cc19e906f5833c94f2dd783e18383cb7a3f4358455d6e6ae605aa8ba864befda7f90d0659b49c085a81b9f3016c7f55959027b678f81dde66353be7c3173fc1f6b9e36863b628cdd6978a6bd8053f85b2cf94400e71260b9d43e394febac187957e924511cf52905fd9c97cf9d03ce27e4829837a4b1f78f7dc6221afe1eca500c19a1ae882b1d632c30794db600fe23494480f410882bd0249180c5b0f09a0d53d7b685c52cf261bedc551e137210b922e8031f71bc83e492475b374a4b1016f2cb6abe1c1f2f667a47322cfc808c5039152aa0107888338f91bb5a1356b5d4b19cc541d52c5dd9291a185eb952fb4f5474fc5f35e2c026e317a915553a10af5af2cff6387d032493fc109c9111e5203cac81442822b52355802c50561eaa10b37791c68d37a9ae809620cecee5d02ab966c1383061ef93ae744df3602b095d86d112971b85d8dfb89053dcb6f546d5934ac52196c7f5dfb69d13e7b988b70099a85a532b8d161f0291aeaf926ace8991ff94e9a37b4e6d35a08612a95f3c5fb4a572e00577eed628413b2da96bf1ae7c2e36769ca685a7f328ae5d7ad51ee4a16f6128f16ce56cf049013f452135ac1c7eb4b2cc6f1ff4b7db94b07214e7f527af2f1137948549235108ceacb425ec399815837affa6bb4b613ff4db441efc0d0de5851e1655d6890059c0274b46d49b2361d3ed7da2667563b70ffb8c4c601c308a6bef1add79e9fffbfffe0e22cd09c8a0896e12995cfe8905eb1b15f8891cc126aaf3caa69b0cf5f671792640404d2fdb8d45e61505ae7a306f8207aadfd567c22c6f4c37a5bb8b5300e0bb28932dff1ac7ba209dc94cdf40827a89ebca0ecb64d8aec818fdbc6919937af4633072e1631f15e9ba10a25f3e0e49c341b291951796f767d20dd736501190fa787de47cc07d9d68f24276a331fa38de37ff246ce04e9150ec3cd69b00646af5efe44a7938c99bc6d0c79152212e8f02521990f8c9e8c5adeef17f3f3273500c51cb6d7fd3eb572ad907bb15169196561c689ce2d94ddba361969ccbee268a67249c16379acb19bd976bbb94190d95031c5512d218631b5ccc92f3e63a655f2ff3be0b48945129a691595b763189d330da46b86f8f13cc00b74d4d392018198c4399155cca66ce0e4f3a616467ee9906dfa45862454638b6aa2f716ba727fea59e95fb1842f0521d5a779605c2222fadb2d8b85242e2a5a72ea02925d77a57a38b1a872606d8fbfa3976c2024a0edd4cdb48a1e88fd05cfbca083b0fb9fa6bad93907f2e1e0712ce74a1ad02079aeb0ce35edacc33f9a5d907cf70d0548d84ec3c5facd79064dec0945f1eae02afa01451812da53644c7696c5d9011b11ce88811efd6ca66d6a9f92017dfae4233458dad18601ca1980cd5811a6379d690e0a897a9c4afa847b9a1a033b6a9cf10229e808d3cd87bdfba42ce6fb0b1cdcfb47458f3402d5c9e58df9c1a6c47b22c7f7050478982cc001adadcc241609ec3ac15db3610ec8cc3ccdb9d34c931f271a42aa8ae0fc19de374c5327cdc2f4f5210b3a8dbfd953f9d5dbe2ae9940f97c5d8f50d2a953ef570102b58064ac6ea6627754848cfd07e1655b0cca19788aa1265f90923e5a0dc8f3533d7c653cc76e63a8442e74e445015fad80ac49845313f915d2301c5905a282d053626beeafcba91081e1f429abd83965f6cba60ee3734a54ae42cfeb678233ecafd8d55c783ca742865577279cd466f6c7aebb72ac1d9e8e7d20d58b93d68b1aab563de0c13fe2b0c9ef9a78a8947cd28bdc064a1d916a45d770a9a42b2dfcecce50f2260b43efddd516ca975f86efabbbc9f31fc86d31fd35b8c8ef8dd71dc5915fbe96c6f7234c3061840e122a43d4cfff1e4e3d1f8a37204fcfa84c8042578cd8efbd74b8216e54665347610cfdd030f1f46fdc06d7661fcc0a78d7b81ef5296301f4a5156ec6c98bb4cddc9d82309738f1ff35e1ae0c9cb425dbcfcd1830ff7491f6d88d6fd7f858251be55a85786b3ab376cb0e72bd2f7e8e3b955da29d67941c1e7f8eb934794220cc0bd26c1a158da5511c0bd9da30a1c032b8e8628cfa281ce61a97bf4ec4d03428c0839a883e983438a958280658c4583baadbcca23fd6f0d82a46f6995388dbeca3ecb5654ee10c77e37201a3f03ca2c0fbc6455fa0f7448f3f0b03a6ade29472168c3113bf0e8aa96af7db45af915c6d2c265127b62f9455b9525af94c63da4398d0822607673b379048395def58d19abc8a949cf7d64cd639cb5103b78339ebbb584d1ec0819accf3e1807f2809aec40d517421de81ea8b30c4aa4867d71fd4fe81e65072e425b42662650be21a4093cf197448e2c909ef2edcbb49e5c61899c2fbe28d871568a788294b96b601336452411984ad02177c8471f88ab9d69094b914c608858bdff199d4a8a21c5503c03776d87785c38fadf233068d4c9f3470317b1563e6cdf83cebc300b07d9c1e320f1935741583ff1dc88e59c416766096dc8d352233325dd3fe92e844623cff2419b6c50cc4d9d226a7f266b1bff2a1831ac9b9b5f37f5d7132b2c3c052be233107bdebc42c3ba552f0fdb1f8a19a73cf6cbf17b1900b837f28b127c6d7a636c359cd2e1ca40fe54d340ecfeb53e453c642ebe387a14d7c6860fc88ca697b866580331098d4ed1e6ff1a4251c5f56ce224dce81ba9fdb84c74c136b4d70a4be920bae17ab2749bd25ba6c35fe1c784f4dedd596cce43c59167a9453c295c83bd35c8cc7c623bc4e18eeb5872323bf53b393af773136c655c05cedb6bc314c7a94035d859c529b4db41f1ead0e0d9277fdefaac789e02ff76f638e18acdba8176e909ef5702c8d3881bc15fc21229828875255fc2978dfda8e3ef40e171d718ecd74df8c042a08aafc562a190f0b46f1da5c4f89a2793c6b874fcdeb8d5f2f4d3b309dbdaac373f1ae6dc9682a301540816dd5e48769ec26e5066a55721937df3244380ee69175b8f273828e053989a0f717b7b14ab35599420357c057e421b14d305cf43a0c847d7307d3ef12702aafb5ea33645eee1f3f08b714a0c148836fd6756b0237ad06abaa8b3bffe48c6ea93845f77256928f84c3a23f9b20aec3677893f0bd41fb92bff37e3954fde6cc4a18cb626fa4195d06ed453704088f7834ae1c6c89fb60bf4708614a72c107d9feb1db12c0da1ade31e020797fdb82f853e16f6cfcc674c2cd33d4edddd0680e33be0566fa6affa9a266c495633c01ea41ad1d408a35c063af104991fa9e9fdf7577dafd80d93035b4db9209528c84c49a8b96a5b6cbac0889281fe55dae17c45079bc44f8976508f5a92953c26f940daae77bfb16eac037d7d5f8467b615863415e29bbd63806a9f169eae33737a82c1f5b2dbf0f25856817c44343d86aea22c47fc3e08e4d8d8f14986756257749a644513c70240e641fc55d914c091d35995678eb51a51a722efbaf1f2b21c0f112d66428acda07f4c56d1c52fd621ad32d83b4306d9f514d10033882c0908726d831fe62c3b5a4b00f8b8b08a687c64b55b8cc03b2f17486c8b7af32b5165c639cd39a7b633b571e448d2442f5feb1f6a8721b05c03fe6a7bfa59d9f7707932fa757d2f2f9cfa1981afe72625a1b606dac4c4b96f3cf3a386b495e299508ddf3ae2b0239f60726d5d96be01741825428c7b3b837ec43e1b1621f9b718d7e8f5807c9d2e0e6662920263207b25aa80fb08124fb7908227f9b2a94c007cefd49b55ab0bf6859615b3f880d53c3e410e58d7f3c8fdae5ef666e3b45564cd7f97f940d7c1230bd8d2f6c553a5edcac4188280846efcdf40f28930aadd8c146e7a38c968885ea914e083f3465836ce1be6a18b2f095d2b10648b21f3ac2059a6c58078c6284f663288830abfb5be542ec0dc815b60c79ab694933ef78ac7a20ec0f8d659699d4a1a121e9028852e63e5ee5be96f3ce3351bcaca101f3f29f98eb3c96a8a13f05db5c67b0fe8902d0428b7474bd5655903254e571ed192ef650ee51abcbfedf2a8e9ebc30e679e643edf65c82ff4a3d00cbd6763f0764dc1ef769f145561c049329fcb1d160d777b19f23e051e34bef159cc5f160f7736469dae29dfbcd9549d03c0acb2ae42e2199d498b27a0fd7d63f1387c97023a1627799fcba2798e71972432d7aa5e6ea9e6d3cc93553bb7a9ceddeb070f5129b40c8b2fcd8615e7dfde9cdf942caef9928cc264a0b879ca0adc23cb47a585abda9bda4776b2174e651b73ad2b60274b66b072f7f878e19f6833cdc2868225274e7f6ed00f4e072acdf6b286e36f50ccecfdec6ee4bcfb9c8b7be2b70acdb907d95e4fb0e0846ee2dd1660510581b1e5ee1837b2acac502a3b5d6b911dafcab243e186d1317ad3e05e2485f6d9bdd3fc32ac5baa987167b23f806f3a0550df9054af19194a58be8b17c72a5ca74c3d7b825f613df033c89a608ef6990ad78009d47113727247b74bd2a8556db75677c8a4d95055fb19fc4b662c0996766d35858ace79c3f36f4788556f111050020a4d60c330d9024c8a2e1904ae198f39876c3f6f55f413f7f5aa69c3632dbc787d7080c50ab04df4faaa40beef0a9f64fd26bbfbaeec1b074a19d64c55ad41e1589bca86e5c42437d526a502d451ec15201bc61b8d9553c9cd3e64b3ee762865243508afc9fccf40a20c0e7664d7bf7576b42877f9d60263067fdba03671b92b68a600e7be409535e9c344c5a7825fac8957a8b6fa9771fd7d4502ba36863b5cac557bd7cd78c03f33b30f95a53b16e1e16d108098c0e9c0bbf9a2aaf59ef81f79ac4027fd8c96850644368f67eb2a3c045f267fdc3ab0d3470183177b9f369d5512197e57656030edde835af478e4e67c93b358cdeb0e5fa9c76daad1733efdcbefcc84e1e965676de9bc9e54cc8c07d1737eb674bc4d8c6ab1280bfe00586860ac22e2a501ef5310cdaa0590cd6ac68966513fd795b48111297be10a30cb069eafe340ab96441b5df21535af65c54c2ed3f29b005f8a67269630d5fee9e1fe0c61d745f98eade9dcc1c5d6b97be7c147242a73f700186531600d8ee115e079322ac59a99d372e216a08191b7f6164c5dc0c16fc262a6a4bbeedbb5bb9b119e997377e7934bdb3092f8120eb0c09b15f70f7f366b6b7b4c4baa61f19563bc96c8a2b3d3ede030fbd83241f4acc0be459d792c71fa05e1846afb69eb7655298847214206b179b86a71b4d4ebb3dec604d8668fc775171e749f49b94a66599f9d9f56ec29e7fdbca6e4e8939dce02fd792e3e71e1e6897b4572fd1bb76d5768fd57ab78e4955684d7b93548af0414a9cd29699a665443401f6b7d54da9437cacff786b0dec56b58237902b9cc5efc1327514fd2ffc82cb52913322f5ae2e10e3c08515ac07e2480b5abb9af9ae2a283b02d59e154492e228cf18473e0603d7b6b11733f31c96943b3d7c1f2c19aef409045ed8e0cdf30ce6f8edce71314345b849a5427daad22eb4686824aea8ec994ee2175a2d0921b02fb70a0559c08acf4b12b5cda623237be953e647fbdc51ac5f24a57e6476bd50658213a8322448e90184df31f73609005c98acf58e147c81cc647fd1f1a714722ad2910394ecec375e18781bfb240160709ef2b9fff1cbce18fa0cd18f0ad599e220e8c41c8b032eb35626e83c9d9af0e7ef7e01abe4ddf5c78de31987225f4c1e15a146237f2c23c3c652230603344604f295692c7e018d5a688906648e3fed40f941263439a5dae1d1806911e57be46a50df5cec1e04e934426514b19ef611fd745ed0d95b2ea8b0103806dac4c0308a82c269855526bdf7840de0f8d4f03ea5ff40d28d54150190faff98bb11afdee7f0d4fb62b4056016a5f9e7a4d0dce7dcf29da7cab5079a170a3dab4d6ca92405339daf1eab1f741440af9530131a81f506dbcd0bde64c6a4b6789b0c363ac454b362d113aae36e62bca576451c17b1a0a461bedb60bb1bec98470471fed3246908eb2dec53efb3a49262073e3c72eb4243f5f9c3cc790e31281f54193710c8b49c8cf2030692e83c6a6bc49624aa936c6ddf0a3f723d1224de68265c6f5225c9f6dee9e2637b70acad294ae7453d4e81aaa36ca91265dc3a23c7e7c61845c01ba0476214db17e177c330e6ac1e99711452d9adbafd91a0e3a09514e0b23a2c1c115cf714dde6cf204509344f214dafa72ee829cfc42f14b3dd862a36ddcdce6dd296056cfc767e28bb18c05afdc85ecc77657d71d6bcac1d32e1b432eb6f2b635c793987b72583039df5f759f4a802d6c4c8252bd5c8eb92295e3f6f7bacc7af277cffef8e928253561765c6b65b3058af869d6821c237b5594228370ee52793bc17d51ef34bd07a8bf3782bb3606be4903762a14b2734f92b441b3405c6dfd392e03590759011eb9820caf35c3629fd0f410181c29657d017ba64e100c034c1345cadee962dbb491315caa8416adef48539e664286e04ccc73ba1c8704fdaff28e3aa83c56320f57548e3c4e37d1f7d8a98add2dd3ce061824e5e44e4e446efe92bb7ea93ef07834740c2d3c2cb4ffa97c3b45861816f1101590700cf2bfd15ed8b62ad821fc3750183d45f5ff404ee3571966f45ba055d9ce21866af655203be9917270073e94d2c8894b22b85b2eadbf8c0720a6547c9ed702ef1064f0a2bc4bb61f1af99ed7e20c58096a5defe52f3efcf2b1001aad85b99973a54377a00a888bf97dfd0447aa6d124576f8e3bc925bd1ed5072da2fb6fb50d9d29cd1624c287ac7421e582d4f721fc8ed901ffbfe9f73c1a5027c4b5a258eeb3e76e830abb1ea53106182d1fca4e85a782e8bea9a904b3657bae84999bfba6f91d9a3524fad436390d06a7bd789d3c2bfd90fd18fb8bf130fa206719a523e2e75ceea0f5fa3ecc06972f97308ab49ca699993f7049f382274c1bf0a866581f0905ba5b1041c4f32444f1500b892b3381f76ffa522cb1f292f1ff95e8481eb7c8a8bbc7e659fd380c970a76c0fc477d588793b2311c6daf1e7c49db3bd2de49c0c6318bfabb4e0749fdc98fd34cbff694da92fb9f818d34245b9945259f1d416beed9fbbfde3ded46f9bcefc502fb1bc150fc4afff4770e3f105c4837f5523b347303abc84b53569e0b633b18a76f79589b1e04c50dd1b9e92b0178e57e2393b5034d20867b14efb9b34ae630b2a38be50996cd910623b39d0c374ba0a1f7f7680024de8cf608f52471d265bfad2dbfd13cf519e6a5c377d5545c250c0955b2c80a195a4e44861358d7a85e280f74a1b7a5975e384557932c63eeb98a0ca3624f7199084cdf32d6d1552b23ec520ece02c41c2f086d46820ceb6d6dad34879278e7328d0b3e959c386ad95b7f0d52913d28f1f0c99626c0e13b66b5e81978afdedb644cfbdb04ffc899316972a9f697e13497381e586edc63d45926bd03dd36ebbeacbca14d275e3c50d1d249a0414e79879a89591c8530ef56c334bebc4ba42a017a709dfd7353fe32292a8698e92170926a591c5b007afe3323644f8b4a9404646bfd44745f6d78adb5d69bec54cd60d5952bdabc76f71ae9f839f20930731527ffb7374a61f74633e66b0c230a8eb4c1997606894f41bfebb03a48aeb3cdd6fc8432d8d811ade155696c49c570f206f6e5cc3279ffe777d8f9c9a5f43b00c432b7f4cbb5f4edd4928d3ef75c2ea3b1e60892f0e71f64bd12237cbc624cb8676af971625c72339a7be067775fa9f0500f806ea45914260a27cbd7de815f512b15c73d4f44101b9d61f18a5c3869846be3dbb3cf5874c7e99a614f9ec9e967a9c3bfccd4f5550277f53efc188ee3bc6ff38916f46dc7b6c5da72687fb471684de53184b5f8c784949637513ebbbf24c6cef6eca5f1736f49787d96e3d99ddf91fadb0944b6de1e7dd5690e2157424a2ad6c3c9469c0e7dcef4f17f8d91b53a0094fadf13c81f4cbe2342a782ea1388e69b7e1168b60f5ed0c06c76bf856e0434243f5aa5a4e17bc01052a1b5dca98d948d64798ee7ec8ef97b4d110c1d0eda872917207cc5eb381e2d27814ca78ab4bf4d35461b9a2c8aa37611c2f5d13e098423f0a50bb3931e32ca2fcab9e32d9ab12b5f2bb15545de695169210f3a723db5957a7cc4e65f7aa887e9e2701818ac34d8508ec2a1def6a59db1afaac121c3961e030c4ae6c6f9e9d6d46d21aec26594a4a7d3d1f84e6ff2ab69c37b0de357affe38d8002d600861477dcf212fb1536b40c3bf61d12aa6db0b1010d2692d565dd67a6487329112c94a448d01036c02231d4295f4b4da37c94d32fc536b763c4a374636429ef0c56c6fd72b43d268de469a92fc0d2bf39f37e240fa60ad4495df912ac1b4baf58cd518942e5c152e54606933560d9f0d59c15ad89fac771eef8854a69b702f25d59df51a1adc342310ead9a23888967dd3d027586079817ba5ff223827e753f83c1155b75526b7fd70508c7e1800aacbb9fed84ec17a34c1559e6a6dfb9cd1e32cf9db1a81de29041f3bf2158908347d58a7ce3a570109b67ad09da68af3117d2491f5b205650fdd5a07ab06e001cc195c65a99975a0889182405c706aacab3cbf8425fc745dd4ffdd3e07d0c17ffa0621a2daeac1fb3a090867f759ff0bf7985a4afc78332af0d2056998f1b1e516fa34f9e2bca063867389b22ed1cca39f269150e9b3e64f1bfa5ef4eef815d3db3c22d5417db56bf66762a9336668060a4dd1206e1df24c9eef667a7a3281ce8f6267cf87ac6587226b3fd7d58635a5b194a653fa34eba5f217a854bb5f6a37dbf3704315d7354772e58da865cfda053d919d462e8736edce09913e32cd53922975d8da8c7ca91f606cb8a56491b996f6ab02817b9368768b3bbd71611ac28ff0500de04c0b359183776d59627a58ed8567928051d7f4f2a23489b8d6b62b63e9188c0ee5016f20448c082eefe82c7b525da9ed51c360c4bb7a825ef42e12c04c35dfb0e80dba5e3c1105b05d79c8c2f5d3d502ebe4307f2f8443de59f10d27c24e7570b57eabadd2bd02684b9da256e880908b90c8e88486c82ad1789d7efcb3b8f9c8edd2b79190d67ac12ad24d9992da68c1e0dffd7759dcb3c2c081ecc1c90bb913e1b872ac0ef3db558ba62f2d9d57ca404c97f3ba01388b1cd24cdb295acd4ffc418e414f959ba09fee87cb65507f31a1349f4fef2541fd5a1e6cde75e1643aec7dd2c80edd4466fab3f5b6e364b73b5f494486692eafa70515504b3a0566f66f07045b6c4e749b007c8e561a329643c4fb261bca85d7f4a84795b6083f5bfefe7db19fea51b2b94bb8a03d9c52a2e78cbac29475e33182ae35bba352e7a9d1053268ea0b8f754e36f8d9e1cc3d5393111898651daf62cd915020a79ca6d7093dc578ee327032c65cada9c73c6b3ed2ec9516220442d2220c37631757e579f3e2b78001117c71ce27578e726f64ab3399a0da4fdc56164c595c0197173bf94dae890cb70b2cc8a21186f657d7a25f1182cc434308519599032e7a8b4d02db62ebba8d9492099dfeb5ac800c07bc91094287efa01abdd694b43f3c888be296d044ac711e389b68408e38a9e3620c079753643ddb85f35fcbc6fed6033653c212240f55b8814acdf405cbd292892919383fd1cc89ccbaa7aad5fdc58feeced3a51433a9f7ee9025a5b6d6a88def8c4c5862610a0f614c34ce4bbc898317cc52059fb9fc50e31405c20bd98a3a07be1794558284e0e6509d8292aba07143c4b3c02122bb68014ef4c58f54f62b6437116893c6bba2ce403874654b88fef5507f4142de7581cb99694cbbc97ad6777fc041a7ae1cc98b939c101e2cd1709ee81b156f7d9942a49bd9b41bb796cfd4008aac0b9926d990d33ef247cfe88ab3042dc91150b53f1ebecc9829afc87bec51f7243a1878379087a7775c955c81d43d1db8d32857bbac8ac86550029e6f32fc8c36adbc7f77ed195c3bd72d9c0a74eb61812f44df5cd07843a84950672e3a58c05fe0f5ab2f1910c39c31e925891797af9e8036daa72d2fd4dd5029e11d850f1a1c8e4499b1a6f68435176897922eea4e8d608ed81f14e9d2811eff6ac185781fd8d039b9940942f482d22c509a3d2bc4ca6abd36191a5ef310003182cece3c48218145896ac27ecb020c94ef15c504a8d1e9329349bff78d169e70b779c1c419830be8879a75124e2f2132d1a958dd7130769f7e15783c2701543d777702980a89ca9342a773a61486baa696b96b4ea4528d443500d5a5477cdbe8512b0330918257e649064092a4953330acba6eb0c8d4b7d176905abb64c57001b32a361655293e51e95b8e7084d715919240f5ac452360b7a14869f71597bb2a4be92dc1bbcae856c20b9fb82bc8ec19d5d172b9afdb2277539da5e0c05037c259ec5cbb3c03d07551ab16e20ff72169e5e078316f487790ec0470f0fb7b505a8ba8457b5c50a12e269e6676a7ce5fe250f278dc1a07da84f9116db02d95bf634fa17a8aa33db4f19f6a10fe99caf213858be6e22695c5d40948fe96ed2bbf6d246c5e51a71796604a9298d24c79729e2211651c2b8eb3fe8b2f962db0a9eae8986d8378be9acfeab6ac80aa36667bb2852755c27f3f3f74fd19e6dcfe9cbc561a296c587023bbf1422c4aeefdfe58214d324b7db843c2c7ddac433d4d70ce4628248b89524f05349b766a08f9cda23ad8c6b8b66d18e877bb6b4db713c27b3950e35373eb7915f5213f6090b030d49fb6591004e44b1b0504bb68e2f80e5d9012fa76b0823e78e351cbc10ec7e489a0747e03d1d436c4e04831174940b0effaecbe47b7dd1ba85fcbcffdeb97451bed8189e6b5a388909a0450fb42a456acca5cb35902527d2efafda099afa4df15e76c214b18e8ace8b2a78f6777997c0e9ed18e2d2878ef672545e206d3870f022ea2b8a3840a10479ad060fe40867dafd8e9833682b6ff0b6f52f8d7ff94716b13b3d4727f8e5f37e2ed6a2245f1e7eb19135707b99308664993798f7c8392bb471de95a73fbe6240b7d0f75e062575adfdd6e0325a3b8124495d88fe2aaef6d295f8bae09b941a674fdc55bb86e28798da63ccb6f5f6a89d0c89a7bba90e40b4ae72fff997cfe49cffe2066365bf7b1b31c37c2ef2cbc578eaa33b57ccc2d101c434ac1bb8d78687ceca507d2e231bdd09e038c3da219e5ceb948df91b307162e026096d8814c8cfc47c7c3166762d876aa1489d335ffdf21842e5ca1fc1e87f08305e188eef741ce9e1d1a9971f7ac05ceef3e388efa8e278968bf25fddfdff473af24352ce501846df990a4888ca31e8af83be5e3867d31378c69864ed7a8ba22c0e175d1a2669e25f1a7f0218e58115cc3e553fa2046ef2d1dfe4b45725ca23eefabc363cbcb7c54a9e2d4c379259ec2e6dd1b295455a1c871effd985c665d168fe59659adaabf8866b3fae4d9b6173bb57594079f43f9984cb115bdd2703b4836216739e4aec82fdc9dbb0c2c640b45c46166fb6d7c772ae2e41c0c90f4dd5256d1ce7afd3236b95022adbffdc9fb7fa802fcab4b798aeef8fb892b045ea3b37689349343cf8bc385d53b66aa425827b4ecdd6dc5b5a552e359e58fa9283eea29ba322974e127ccd217eca6ce87b1fc9f8181d948db67053691a9b0ebec0f74c4e72f83fd11ab33c97d59d6e6e4896cac6372645135306457354e25691485d1fc92b56948db7696d077db9d6ff35ed6800537958b6db1fee9b75b539d3c4280253f4c1fe4992a747b8a1a60d63ea2e89ed939f333ef3c33529a59c1f4bdb61dc36f5c3e5cf5374b4f467ea7c620e6117d6201f407345fb02640b2070c2360f97b858e3b1e5a1d99c01f70f8ac4498cf9032181e61d79ce3d95d0c895007d3a1a2242aaca5424dde5287a9d9e5045b917bcbf4e8c033745cf041b1df4cd57ea4dbcdd9e99e3858878b1181a22cfa7ef5949220d9cee26679ef915a6f6f16c2818cd5149845c6ce23de4f8107d0a1a37a7f171467da6ee3c93bce6eb033365fb639fc633f48580f41c09430617c64498e9fed58197f338cc9694b574845cea6c167863e252286ac5fe67208558cecd1a07b67547529dac2090cbaacadf34a28219a150e0040bd25dc947b814a8e95ec5e9627a1f166bf13f67a7ef747e8336455462b6b574f75ec567f1333b6fde9fa278490b924b26b0310571a9fac7114dbdb002bde708b3b904beadb882157637b89ab55127599690ff507003e524a690f313cb8c002a098922b8c36f720279cf0f38ec7366a8833ab032ee23bbfc09a7ee67034c8841bf77283c7a81929eaf0eb03b379ad7a0b5554c92313107b70339b692f32405b59e2a1d311c166a52df9da289deee03aaf38adc5782564ebc5cee547ee33d01ed6e4b0981ef558384d323ed0c2996712c0781666b29 +MD = 75047887be4e0e48e1a3e33d51da42511e385f825609dbc51ec823c3c3effdab + +Len = 84384 +Msg = 29676768d5f164e8347630b76f0cd6c38d2e3c6d396b04dfc65bb1a070d70b65e569c42b04025b82e4eb412c18fe3be63116078685c442462f44896057afdfdbb4714ea44efed1e089c172815f55b017edf823e9313d634512012514a09fa7b19e684ffc3e4d8faa2bdf0bdfcc7afefec8bcd9c0c53c2e837679cde5d4112d92ab340d5a59575a87d22d546de8d3ed42ca4b7130ca2b6ca96396c9fb7a6c3724e4bed1e72985fd1f879394543ac9448cfb8b3363c771e55ee13f607d1a188e0f50eee2ca353d3e1b51f915bb4bc5cd83646567814476614bf95cdb933d7dfafcf7ad8a2c05e8e72339471dcba12d4ed00cc154b1c9a2a818b2d682676a034293e2e10f3522efbede4665f5abc66a901afb88431cdf5d816c15939d1e2912307b1873ba0c13b88cf5803be58542e55b0a3aa07cea0d0fb6ef287c74e302128a5da14cd3da60ad180fefb2347e9b057648d0f34742dc200d4af5794fdc7e6b19e08652a2c692352cd59cb02cc05b31ab7bc568ec4cd3f84f25847375312485a5adce6f6ef930b78eef8e1e137309d3c04b22e6b2327aff4427db502f0b7cc8f66b818a819bc29d0704cde532be2e527e62ee57e319599eb3f904fac5920f9dd3c3a88b21d3d04e5fbc62ebd1ca5116ad6531a2c52bf93b654307577fed646a055d4a5997c9e3325ec1541a38bffa8715fff3afa190e14023acea51a445049855e06fde2ba682b1ccb8ab59aec4b20d7dd63d66be709913b3dcb7cf7ec1759088f51f0124923633704c708f7c01ff10af9216af66f2aa1edd7c76b8538a41b9694363aaccb486201323aaa6eb9f6cf871dc8772df3e9bc76b342df66cc7ef7abf7342c16935fae07de5618541c67e2d8c5c9797727df47823abe67011a1083d512cc52f443c1adb763b9d14c69dbf17c8b94e0667d73e98cf8aa80e8a401369e817f3daa5f26f7ac6cd673bc44db61eec9bb4a70673ff8f35787cb81ecb98664cdbd4abd37f80233442c6e281fdebabc2acd262967ac2c41e1e6856166a209b4521708a180ad53f8a42c3f146d6e7241091af2061130ca1512377d0ba4732729b91d060babbf7378e7765505b0031f39ff553c7ad67678d9831ae0e5287565215d2fb1302bb6d710986b4e808a2517e377ec741c39e5af0b9ed17f9265514a37d8df98d3832bf57c21ab89f95e5d02f9fd41274ebdf6e337d01b9777ed7f5ce9969d3b4a448765083d97a5e49f0356da1a03c4a6d5229bcac159c71a1358039320f90728e2319c3126b010e6eec089f038a4eaa902016f40ed0c9d0d8983e4d0f2638ae3dee301a387955954a00d22f8e394f7b9d71ba436adb477a6b28b572fa57d450facf44bcbdab7fdd255519840a5647a7dc6c9f128add1e59a20c6f11b94a6a3f0deedc1169a886cc491268063f883f15953a4cc7347f5754c46df49015a60565be7480810419724cfd60441df5783dad100249cc3169f9521b72ca59d614aaa95589b87455a54c4488673731f3ce4c5794ed1f8749420c3ded447bd2c43b63f319540d5225f51b9b334ec8aa023171fb6b23556243b399fc830a8f65a6c4372b53fe06833cb0e73b463e80f0ea49b681dbcb73c3e963a67725ed8c7946562f3a4bae2c6f627fb80b095ee56b73bf22d12d0e011401fb3e961b15fc756a9a5106498d057f5f0a97f3c3d78184643bbdd4a91388bc54226641aca966c3db37a77895c31b19faf88bdbbed0dca18764907096039023aa81286021d153ca61d639787677f6a7fcf29dab40727c2ca2e3a28e3e059fb1cbbf8bdbc2b74af2c31f0def36d21c8f2e9fd44b92e4eb8b7e5ffc17e7423fce7e85979ad780d3a3cbb92dc31bfb173b55a838a4fc4fb128e381a4f1dae1f7e28c7b5585a85776453f4da1de6e1a6f113cb4d19cc5db546999f1a4065f0b4f55be48cc857d62bc40e8826f267659aa7baa6ca81c37af5eb86756043cbde8d08fda9505809dc92cfd8e01a1857dde52df6677c40d98f4577c1659ca7d3e9f01f9a809065f51b54fe2f9723fe2c9d1eea7397f2d5531d1c51c6ea100b028596bf9f24dd90be14eab58f07b4f24a35b073aeb29ecde4a6f320237d7adbdc43d94f87e08866b95bbcac83dc7db3553a42400441f088e2bf6259539a2da8b5a74065f15e31366b4253498a6fceafc21d3cd610c09894f1b8d273d3cab8e04322549947f868ae688b36f32f4c3856155108bc50a8e7808645cbf620799d10f9379e3018498f2d2578e05fcefc3b34c3685e4940757dca14c8c756c6315ab94c7985e0cecc254116add7e605ea57ca50d576236cb0cbd011c45d1c418c7257c14a9421f7eabb78d09c960c40a10e85422b18d141e5423121bae5cd0ee5646adc3d415a103fb232d7c7a3592bcad0042bdb9ec94c8d717bb93f09df9ad6b17101b4361fa445ca1d90a1784313a24cb552697071f903ea0e4ca321ca71cad9e8d661bad9106743779fcc8d6094c1c5176a474661e3f31c775099d624304c5e50dea8782d014ebf0f69ab7b282bc3d9b8e817892f79d5793579859f6332d5af476f1ad671e356ad1362c09a0045130b08303ca121472590c70bf8d60e15f15d1b2c1b5e4e33099e422fae928f7d29d993f73936edb86de3aa9c66229b3629e86a7a2c88188ce1f30a24c7dd3c3082b5ca819fa2fb6a18f26ebf4ffd813fd9c1b3fde0ec773d7a5bd9f69ed28d0bb8303a83c28dc0c8a14d71c938cf568fab79660bcae3d0d13d294ff9a62b087b24d95262544fd440a145525e933091a1f9801f483d06cbe494fbcac2704f14eb7301b091d771ac8e938a9ef3f1a9b9135e763e27c9edaef43c33d8c58fa758e90d49c3b6ae9bcffef27da61dc693334034bc512ef3d1106c7d72089746dc4b006e220a354c16a51e389f0620a49596d536d2e6c23d8996d9e336c8ac584641ae102b0292528ad268f08f4dc0fe296a4ebf5a6d86295f88a907e29769168df36e9db52b523450ce6b94aedb6345b713f948a363ef29cb8c764605f372140bd6be616102f98410ff92af7e3d8c1dc73a716d4e4861c16608be48317b4bd3584209f5af27fca433ec8aab8de2afe8f2244397dba98282b793dd68c59d5ad6fbebfdd50ff8e027422b90135e793329a097ec52ac05c5e028a4703262b823815f2af68a03f4287fb4235f61505fea725adbe8185fdbb06c41b1033f797a3a74fa95808f1ba84a30126a552004150a359986a3636799b6798b5002da7a42042476a2285eb793d9cae576fdda0a2726f5d51ecace53ce6caa7df7fbbdf5ae15122bd75a6378353bb295cfd5f9a304c535a60aaab394f82771921f5a347c2cf1c0b2ab9347de0b0489bbdb5a099f3c696784e0efbdab959b61503caae86e3d0eb283a56f864993a8b2b03016743f4c982dea17e63718251cfc30e66a445c6cd05a174b4b795b5dbcb02b5487e403a3b5db5e464ada6b354094cc9324d2b71afb39f613b3cb83c7a52475bf1ab39cd0670249c279f205249aed8bc9471e1ee5c3d4a87544e7437fe66237e66b7d6b6100354532f02886a17048e70f5d70e45beebc97065b471ad5150bea50e6abefc435e6d90e49d8500a854976cbe485b7cbc0445a4d83758a65a583f58518b9aa785c896dcae3ac01ee3e51b38558c6f9d3dd2e5a9139fd12a01c5cf1f97e411c0c08bf7bef59fe0cbb001415d246bf4af2b9bd20980b483422ee19583483bcc4ddbedb9be21958e10f7ee316291ad8fbb6da8334c853d17f5c9f2ba0bcc597259be3704649ae472f4a0f514cf0619eac8eb4131f88c04344cba4165408c06ace951b0ff39c854337f945e122dea78adde8daef497fccf834de916bfa8ee0922077ca2d3c414ad7ab9b9715203a59280053b36a3b03d67ac023fb9f0cd5b2c7bba2753a78de4b6eeabf876fdd99f2f0946dd2266ccb7945673a2711f373c35600b3a0ca41da138385c3ab43a383f17f3a85bba6772d21d29a7fb87746cf7ed78009d15f2fbb4fcffd4657432a6ef11e4349d46cb2af6cccfa6334318f6f61c6ca438b6b8af83c7ec1c62fe0cad17e784f18b0ebd7d8b67ed7830ed335d9f8ae3fcf3371fc27864a73b1a9af1d51d5f7de70e5a63f1f9b72e26dccdec275cfe8612b7df4ebbfa99d739749009a56a42741e0c71e510a88437b61e2b6cde9442fded6af86d227030241f57277ba56657149f6e9c6c620096b333dd4edb09ae1cef95f6c8a68044ef38f4ada8705d796802711d23206e6ab448a2037f60311455041341981f5cdd9fb8c05d5b0f560c3be99c004e28bc4ca89e0d770623dd2db5e56e35af003ea3084f8b4f888117859a6f29fe64acd40f385e7b212b4d9561033aaeb95772aefef1a35e6b77ed284e4b3c1f01afd63f1c2d30f5e93606e21809aadcb4d69d3556235c4099707c12cd16f986f075cc84da4ebb82b76e754aba8ddefe1075a85a1367233ac1ba565c6cc54e66b2ffb62bb065a82a731cc357af587e1fb47cbba69d83a053cb9ea28e921ee2c83195bdbc08389ef50588179160323144883300a05d3f7a939f648931a6eb5eb3547f09c0499146ec55fa9a7f33e29f7774e19cd0b9655902255432cc12f269300304c1bfda3648164cba74a9913271bf60d0babe1abbe7a946b5c5e73dfcac46266d0d3f25ef4b7cd00fcc97e3e84f25344680f3e90bc98fe8d16c0a8fd0cffda60216ca9186f724ca43cad28fcde0afd88c16f68c1baabcf4ee4dbe7038795d690b04e786c1f618239c98e1ffa9cd6734eaa54f6db330395355908a48fa526f58d0ff1f6c6aed60c1635b4c9944bd5531a75587f29d030deb4e5ef77fdf033a5b992ef8ac4787028edf3e9cc7655980b50d4d2585a0cc40a620df8c7daf34c65badb9fcac216a08715a6658f0d649f0a962b6b18d8333db6b153ad1ab328c1c3e55c9b3d5bf3e79511afe087b5d34adf6efb7b3720fdfe52173984e6f2fb443eed986a48febac5e18682c34d2c3c3c082fc79b49b0c7966b283208c3270544351811757436b5bbead8c18655ccf9d3037d1243c7242a867058dfb125dbb13255194a4545708f5a1f8ceec22814b6a05fcb5dfd15e7815ee02d9506856d999f0d55c5724358a1f10e176cdf4a9fdd447b8f2d2fdc778680691ae481787928facc41f564e43b9831150cbe5623caf81ff55ce2647150848b49a560ba656ad9d620826c95aeb5dc9af2d165cf4a2271935ba920337b1f15d020517c09d2df46a1988b9d9d0943d99ef609f5a32442e45efcf85905601fa50f7ba3a8f85732d9fd92c20ad39a52299dbd1ae06a5888bad377cf1f62b6eedc99ba206a1e49021e3aadca26f1d88d4747a698b88d4d708f814a91c5c3f61916ff7a3c51e45ec98df9580884402a41bd0d40e7e09479a6bce8f3e4feb1840adeb12a6bd2e2def5a3ba1001b567261bf56f2a9ceb187377dd9ae23d2cb40740ae4f59438f726012e9ed744a0cdf42787addb23c4a71b1806be7b41ed233f667003a6537ca4b78addb03d3562d1115e3c7d9762a8148ba3ce28fe7ee81b9b7da6f02fcdd15b69f2301adeb9a8884f6ea6702f50c21f60429cbd3ec30addde20765297e88144c2a1ec84bfb9b91d39c08d2caad459f1215c392543f99d8e8fb9a6d2e78ed3894cffdc95ea1edeb654bab95910d5b6b156586e091506e75937afff1726a60e4f8f75c7f666ce5f7c2ac5f2a06a3d228888a00111bdd431645d6a49ca5c187bc11269744f3bb38496424affa9bff3e39e3e9bbae44249c2d789524c9292cc62045d44ac4772b4952c24afa91b17df411a00b1632bac4fe4db44cfcf18cfa90b43f86f378611b8d968595eb89e7ae98624564ac28d03cddd9814499c031b99bda46c50ddb523a9997068bdf4dcf1f9f8e6c9cea1b350aaf635842879fc7e84c14f3f51667cad6e1d6cd936247a83f7e185e0a5c6449bd077da19d42fab0150606dfcd99982b9efad85352f122339cb872c2438f9e9ea26a8b15db586b7abe6df26284f3f704e1491e20212847d195d33011bed044a4794d0dfd73345c9852e89a14d1d20ed75c510adcb4643302e952c2c4f2dae0eb902398f0fb736889510a507f2aa04a235ea730b153317e57d5cbcd64861bede495829e78ea71f9de5757a7fa05eb336966b03266a41c744109829278ceffd61fd7ee90fdb6dc9af7d435132dea1f452a030052651d81df4ee33bc46a5413340df5dc1307e6ffc676364724834db919e5c21c4335360df9e1f13bd5c1bbd2722f7dbf87200177f6da1be25e82a7450c1d1278773f741d6e9ac22749074cda3b04be1d8fce8cc1c683f3bb23a49d4fa6407289511c5e3ca7e9c46280b3ad86d92e658a7f7bef5990043c260671864572e070d373345af8304f76923f4f4464e6fcd26ae8a0bfcbfdeb73a7997208a2ec8d8bfb502000bc824c572ab742b7e0eef0a3535de554856aaa28d43f1e7af48d9822557a57d6062860f4909b366ea75bba36b841a2741260b0da2079ef73c6e0a0e26654444171ad1ddd685d82df14b7ba3b2e267064ff6aaff610cc6d897660383ac2609de96b6ad3501660c08fb57d60ff199ed7cda902f80b29c8f102af86be99ee31ad247fec421b2f67680706275f110efd3104aba41987dfd24295ceeeb49e3e49fa891bcbba8d17b3f1cb9340050f62d424b073d8850aa78abab940f2aaa6571c1e9dbb63dd2463e8e653c951e358d9a61b379e1aeaf21554d1c3c22d1140bd2a71c8fb5f0a8f9878ce2624d77a7bc8059d2096d58becbdc3106bbf0878fbd4e7bc914817c31d29e601b9323b4ae6b2551301dab30848e5580f07941f524632e6278d2e28a76baca349838e17d5282d272531f61de0953076163dedcc2dae6bb86b231a0c27d97542de2b74d799ceacfe4c575580a55033bfde6528b97ba2c3a0ffe9982cb50538475807a3051938964ce0e89585b7184397b013d141cca1ef625e572524ef7d4a234fae751ad4048d958b4c1297964c049043c0740f814a436eeee24d6f27804f691d9687a33a90f75ac4187920d369db3c02018d7d4a0a74195a117d760ddc9c8b5a364718ed8c782ef3d425cbfef05bed634d8a157740d604086b31c3f2e0d5fc8e343ff64d556464c2e594f3698dfb36f00b0662a9ac0db1826616f3871b704f11e6cec5ea6a60ae99e36331b3913dab20d06edf41aa6fa44088796f3b0afff58de490023559e15ee1440d015d8887bc8e243ff5efaa905ecb48f5a17f2dd9826aa41035cea25b18419dfeecd7f28ded808d0641044b0433ab3df834c402917830bbcbcb06b2524d3347b54ea35da4b0b0513e4b100a2fd548ce1d93ca17bc3968822f4c8e285b702ed7ccb1503860989637646e934697b62c7fb248d1dbbe588a9dc734b562db239cc4b1bf6ef146179a9605462eaec058ded972be7bcd1c580f65001e2d0045da25a4e0c34046d9b036039d4c12913e3fc851cb7f387a5aba7f8e7663557f4ff621eee65784777ff510f688fb1fac65cd917f29058851fdf25360969ebf3e5e2a4a093f069c21bd4883e574dd863edb9492b817ebfbe28a821381fd4acacbd4c8e69a673b07c4264d3766dd6de6f7043764a3049d03ba650c3878f6d228b658648008db7f47dd2f5583d12f16c23373f88fb69b83203831d35aac3fdf397c5d8fbedb284deceb5d03f1eae682a892bf8a7c794948e1ea5589c29214bc7d9c589cfb97ba21676d13db19ea901bfa832b5f93517a58b95f648238d132147574ee3ebeb52d8437d1083d6476c85d48835bda9cd5bb3d26f5c37ef5d00451a1b462c780b9eef0dec58ecd5a05dbb10321d59dd17c8860ab4c16b2b215080e92d97ad9da2c7b01eca93bed631e56d1cadd0d1be9cc7e5dc6d0c2dfd626a9a5c9327ae833735e01b1fa84203836d619f01386d73e3be9af0a125c58da6b85b1a57e07751524f4aaff37fc0821d5b6042373c752474166bed58f47b0478a18bcc81a84f307b7fb5804f00807b871832ad56c330fbd838217c9a60978a5d8df119176980483b2de8363a13c9174a0d9f8766b7e71d968a844470536046dfe456aa230a50c019bfac7abda0e57deda16f7870ffe2b536765beee1b51f61850f8226ac7308c19e9ec9f4df8f1ad7f83b692a7a8369e941637021f66c1d03d7743d36bb8cef725032074ba8c8b14af44557428f2bc4e13eb98986b6619f525e7c4f82573d4ffcbae32e272033f1006826ff6bb4df3ac6b5df6fc4297cf079a18f7fb1886e6e86611a053250b92421dc46294bf38714c02e3fea8457a6579e2916966c56079639cf3d55113f4090d4d80d9f8a530b9bf63240c16e49c51bea7c775d5acaf00d3d8bb6e66ff5b17f42e5e328d1dd531491484abe2906c28584241c9924eb111bb91deb80f27bf537938a308bc89747cab8f9c5a75e9686dd94a96b1571c2520ad50e46eb42d8f201ee505c91168bd00494cc1945b402f86b4491ce98ea559c20bbe42dee081492247bbecf0263c1d4094d49af60d451ff76ba66ace937aed5a7902a0a53ec38bcea645cf1a6593f3c220af8edc0658b85481eaf6dd1ffd5e7e57f6544e0954b5899ceb22b449e0ff197f3623c2c10b9712799f57818ead0b823ad1f435eac554d7ae349e3a6da39dab0320e056d7de1ab5c53bf3786a2a932a845df6f94d85f85d5cba88292b6c3deb5ec84ae4b530e1a2e739511e2cc683cbe6d2e304cc26fe7f2ae5771d1d9b7e7ed4c4da18e3b45a8e721ff6ef61313bdab4d93ee4c12905b18b3df172bed1cdca177f044fedc903cce8786b6881cb49fb80f96115d6fc7c99002c7db6797fba41998f50163dff6be2acab152619252c92dd8bf0147811e19a3c497274f815b299dd5e53f84eb8017441509a8491bf62352d39726d2f19c339621d862a9534452755647652aa9342d648e1521085fa7956e25a5e9c6674900b44011f33eb4bf07e844a3dd1dc01ce9d15d5d2565086d07cbf971b0ea8a2e66444aca44d64dd2303fc7820e25d94033d5ab691d29bb5061af7584e40703524e8d668bbc39c688b6c3066a600a9ca6f4b6a0c26f1c22598b63c165eee579bea1d8bdddc32ec6e67fb92ae63b93b05812bd63ef8506e58f6d2f069c344c9578456d7747c17ef5f6746c5a7b078abe5e77321d78c6afacfbf05a6cb22004ff8a2494bb521ef1fdbf7d23bfb32cb56dbe095df5e699df1ea3fa2e1a2e19d45efb2595b184434f83498325811512dc6682b28514bf685de39174f1399886865bd42fb782689660329d6cbbc72922c951b259f4a18e9af2a4cd47ecf079d1e09d1c2c44568380ecafc2222db978c243d554e6f0c5d89766095d5967685861abcddb0382545f6abaa5c08bc381895b119a7240c2a827c681b94b94aac8bd9eae921a9cbaa583ba93baa091c544e456fc491351b27102910a5d9fdffc3930f0b395e0df337077da3f96691b7a2d1219cc8a40000749f25fcb9c5f21a7e33abf807d35b437dec43086e223102b619a0e490400350b577e998a1f9544f1ed6273dff321030c17f1263046d65a200b049c3a605bd804c42ea5108d482f23803174959fadb4fb42862204698be0a151d92a694559d23bb78aec258f81ca84c32e2b6d28e0af4c880b8ecbf44a8af65ba0229c5c0309f8591bd690cd47fd5edfe1fe2e37c3dc471009d14d8e19406652e1eb9c4d606683d168cc1beea2b0f7fbd2569f735c233403085352e002ea3a5e25ed31bf78d12348f9348c9b9acb99408a9c8a85b56d5a888e7ca2920c70bba6f290225a543321e65777ac7b38368ad69036b514d6a002c825b4044b3fba2e53d33c39c7fb72c5d209fe433783da12e46c8ee8c9c5a674ea546342b3a4b1de8c4d593cae7578573597301976849d7b92a70aed4c8c65f817a4f12273423b127aea4ff4b6cb2b1f368a74f5e141680b0ac8148b4433c7d6779bc66d332241114531862988047565fe6934a11fc4240c7157138959c0b35531c34aea9a4aac2414aa67a3cc283d70b4bcd7e3d915b7c4f2dc6fb0343d10be6ea4e66351c462930fde582929406b89810cc584b73a0b7cb2e08fc87db1c85955c4009e00984da66054c2854753e6f88ddf654c603d067bdcebdd99db25c26e0fad02654ecc54a52c940e7dcf699805ffc021027d25920b9683c0eaf7a0e645c3e7527ee36a5ed79e27a2da698a68f800346070b5fb96720832a084792a1c269af85ab168795585db94e863bcbf3e18b7c58b5cb1c6f9f95c7fe63008cb4c58bc6a80c8850220f70e6346e2710f02ae4dfa088f198ea5e8b7f2f8b44c8c5e2450c52e89e10ca7755d1d261d2f839c02e95b40d1945c818743143fd8ef743ad27e8fcbbe259fd247f049efde9f22f55cb4719be9ca37751d286c2366968cc9aa7052bf2df8c389b4f06f09eb69f4f304d6c382a1642769f48e830d24ebdbf1f34b95719f0381b4058518dc0c34017f4176da5bbf0a3445529cdf63dc96699bf73ae14bdbeee03b83d6cbd00ba852825dbc3c8f0c6367f1807a0a8e543f3eb0fc63bdb4ab60e906730c104daf6eeee29ed173875018c756c6518cf7558d63164beeb114d501a3fd204e6fbbbf2edd894ddd07aa53d05c5a6b49eb05a628dfb72c0445d4227a1609d1c57182048f285db1077e5fdc342fe6b989b11f11b9ba79e6cd025a5a734a10cd999d0a463ad64814786210b5ec47e3f63a65af5ce8fc46c3706f0f459348fb5df17bbb4cd7ef31bc583a24a49fad376b83901c505cae050915155baa8317b3c9f594fee00d7cfff2ce8f0372f567cc608db9ceb5bed89e01e67aa753ebbf1f59cf6f39c884839cfe02e815e7987f881d7f682d53b580f8f30828590671492655a495d6cde50fef281dcdc1ca2dfc55e98226a1f1eab0fd27a6a7db8cc0bcb2049f8c3bb7d825e0b847c672e55fe71a0ebe799259046f94e4e67d93ad7e20aaafe5ded24e04cf57f5a75c8dfed347bfd25aec6851acc6a574f034eb30547df59ea112015a12143c2966167bde34242b7e7f048ba28abb191ded5449dfe9dc7d19f9b132a2a9fd779aab7da44d28874859544b63144559d62805631780e64429681542ccef7290f1909f1770125777fdad0248596e86a5c5dd5febbcdcf2bee1d21e4d370915d790556a6f48f76bfc32c0b083d37af4a9ce832473a0bbb6518da03c5bdab839da3d30330a92c2091ecfdc87853afe386cda637b842be5d905161b96f31fc486a0e1682272b73cdbe6bd47afd5f7c3f9f6cfc68da5c52104e26288559d6df4a6316246612e202d895be2494ffb7091e05097f2825ed638dff15a32a0e12d113e95aa1215c6345dbb85272c8f800f2f958118308137c6f31139e660a048c5e3f9d49f1469c25a93186d743698eb3b67bf913cc7b2b9fd1843c2ef597d599e327cf72b9383abfc99481ab2b192c45bff0689e9013e6be46f1c955b665e9d20c6720635d98b098135f494c7e3a594d9c0147009244dd5e1c245b914cf6b9ab3678107a42caa625130c4e49d15f7e11c728e4e837906805dd7653600dccedac0dc510462d50740d4515f111b8eb3368cdd1f2b3f4892f3c177251509d5ace5adee8b04561bcc2a72626e232898ff1891c86d1025d919b6736a2d5d16013041e465d71068481ea993299823ae79031193fd20041d73c252dd7824160ea97f78cb09dc2f80a327449f708618947ae9a8fa42e1100f5fb54e6569b349db15c412cca1436986730f83fefddf0ac2e3d6662e60583be3e61b32750481fd648d25954ef7b3c66201feee18984c021ffcf4d1971f2c8d814e1c877412373a9159ca8bb9d1d54ffd951b0e550b7506950c6b739e46050ed1dfdfd4ca5b7c084ac0dc7b74f8510b3d768e6a1e1d01210b5d63d4a99f8dc7bce38da1dea7f970770b83eee934ce030bee808ad99599586a35037a22f069bf28a04d771abe55790083e66b7f4cf43d504319f7f03ce4b598dd73ef6f0244feff5f48dce568392ccd6d2e7a9e0a6dc3f2be8038c9da8b3f7e9ddcbbfa9dc48d2768a55ba76c4d8fc71482a3ae34de9ddba7ded5ce3735fe04bc6664298891738a038d79c99338add4bf0b6f1793f2d1f1465a57651a8bfb13843874668d54b80e7828c0b1a5a38bddb5f16542ef4f691ee21d45f84c343d913b7b731872b5659d0e9db7c86a3533cb3f5b0e95109d6c48c54e27ee96d9cc682a56e7a6005b811e0f15e676a997ac84a571f079bd85e359351686afbe22b17e99f25a7affef1478c1b7d6242c70fef22f5d9557c0aed5387b9de8a38cb6f3bdd07653fb371827956dac0e38b96932fc25448595dfc24acddf0ad832ca3e9a0b160b5b91707fc05c5a1b161c192a4e89ce51469de3664b00a885dbc43e61af52b5d9f9a471cceab5d22d7736145a5d8373a962d59344deb920387bc1b1c83979f307b59c03a6aa881b0ab8f071a164d15c7761a7b9040ee08d493f91ec1b406819be17e2eeb50abd7ed961b1faa96d5bd1e1c97a1b4ee05d38e0af9cb401cd076e25a8dcfaa2113d43c3fbe075177f091a0f24b583c85e186926544ad422e63e3c65eff3ee15c7eeb2ef0de7ab96a3c37e2af9c2b71d8ffa6842b504122796f5c9a5748f94b535b913851f2d64cce071465ad1087ff37be97c5d5b3038b8e2145f0ec019b22b6286adafb91a67613efbbbc633efa5f32bceee9fcc380c7cd48344c85af7111e573ec99364167efec5492297a7dfefc4a692062f9282571c732ac0faca9379371ac7af59a7896f4b7e43c6f4b540270ef41b0c363578e03fc7f11dcc9954b21eb50ba72a0bdb03ef70d2ee06e67a137b1e5348db3b80718ed9c1a1674ea1837a2ff1f92e17740293a3dce1f5c1f57cb12b2102472e04d0b1b08096f371e4b5f49160ec8c53bd34de204ae8e8cf1a2958236c81a1956bc64f541842978b841033e242c96d471c6179ee054b07964fe4190f1e0e12f91d1b10ce6fee7c23e95ce02a7ed8f87cfa500b15f4527ba0fd739cf61ef1c2e182979e256fe1cac17b61a272fc615679c0ca3d9efe456c758d9f88e05472d8d502029e61ff65a8eda2e722c1a4acaec6d497b7900d6b019b653085d5a8d97d5d0523bb8b06c03e30c6b5071f5e0129eca07f20f3080d639cefee3dde026dd802f3c39baa6e3bb5114f94fa9412a7ef728a4a20d0d673ba0092a155024a77124b34aae6c61e1e3519a54ca329a8e727e0fcbf612e61e52d4db510784a683f52c130a045e8feb1e5ce30a5a9e50809f9bf5da7881590abe40dc2044cbc440dc1ea4f6d5f16f63ceeba5867b5d11a558e9515ca408d4b0c08c720457963c7298751fad8de5aee06786586596ef3c7120eed8cf02f9f7a51c104379ba844d7dacb7b97ab67bcce58aa5620447d55f58aa14c29e1fd5206c3364b6fce81695d6ab5f290aca5437e7aac1590f089ff8d036d3c566453afd5a7902430a5abd9421f6e3d4ba43df7e6b4a72a3c253bf778c69d447b43d9bcd048f617e2e9cf9c6c421ee4325adae0ef4ec31e8eab3b479c1b57edfe443683dfed91aded6294bbc51aec6fab9822077f8f2777ec4930f7e349c3bd4830120cebdd896db9d8a33d34f101672024bd737fc0fcc0c0c9c20d349a0b3ec1ce175dda6105e0ae13a32aa00d8554f8c7542cd829697e71f19a93765454f8d1e8eb8096c12d8c35da3d8af3b79fbc9b498f3b7012973b678a609093c0c972e144367d05452afbb4f7196614377729717215a731c3ad7e0a5bbc0d72268f3457aca15a113524b59530dec5ebd53622e20a8f780283d4d0c22e5411fbced1c69de5d321a1d842403e4e34b060d9043056d8a4b7ca9c34b8f7c9d3a416ffb5b119ba75da9c77ad261919c52e5b8a08d935a5fd6b7354f4be11f5dfceab03637c35f22f8bec5a8def8c583647c4326ba8e739419ce4f43d6a787a2098a22004af5854a83e78c9092101d5320383175422d45c195205c3364594204009e39fc0d2e9aa89fa280c4946df565f6b8081ecd164d62d96be0b08d6ceafe42a57c8be6e52ba79c8e46a76e58ea46586a4ba5b3c006e246ff712daa58ceeb601e4e2270afa4d21af942db8877687ed5dd509c8eb0eeea7e69822d53b37a65e997337222f492a29b7209b36b3ffc69ff6fcb55b67f81c5d028981201f389f84f7ed0dd864a71b38e870fd19f1912b225b02073e3724c0efcbb277e5d9f5a1cf2538ad71317ce6f64b6d9a88c9947c1f94cd4796e3fca40449fc4e49f2d874e72a3e5f141e30540de7fdbcacc470823da747bd8ef4e68f45854d4c76f148df750ee56ae9b42b2d22c409a9ad698d05259e57b04bf14c4859868fbb945eadac21d91718197ad639e0eb7aaab24153cd7e80e46af8629598ea54a8e1cac26ea19294bbafccf9973fec633607e3d32ba1f156d831bbcf29479df8820741a4f5877147b97829b7d709f134270869a77b4a26271a4ebcc1701d1c790374218ca92565f8f9bb593eff5d956734f56c45ac91c4fb920924c0d2e20fdf15729102f24517b162c084167504800344151336273c74db28a91b52b75d1d339f47b98f38ad2e79deced0c5a3c65b1041b187015313ddcdc478c8018757ef7c883cc2bae3265359552e68d5ef6ace971211f02e97e0a8dc4ebc5454aa982dc2ba99d40c5b782e57ad2972cec3ba809e9f7d75455d697c0daebee7d388e87e0d1ca6160c096b667ecf051736867c1a30d03d3ecf0c77026accc6a707890f8a6696abb14253c7a4d3a30a7e97a07943528d9874540bd2e1fa901bbf7716d4fad410efcd36a2538f601182d0787979a40ebed83f5ac442c2c5e30755ac9500766072bb90715fd8d02c02b334627944e56b4b43c66b9e8f4dd4abd0922c705ba511a457257af01e0e3f5ce6d3dc08a1ad721c22320e0180292ed2bf9d810dad30ef8f0bb2d9bfedf2a20964d4 +MD = 3b37a688b4218aa1a7a508b8fd52713045afabd130b4efee90863aaca8bc0cce + +Len = 85480 +Msg = 7574049938b1f3171e227f204047aeeeffcd141d9ac8fe0c003df086e2e352a20d2a66e7f77d7db497c46bdf7a2e389d142d18a254c29d897bfa2c752db9aef9c8b68735f6c7cc427e5fb0d16054400e20e651cb62feb6dab7b3b6bab712bd77501f51cb5d1748897af8383b1743300acc01a5dfec04afc85d6f769da779e6e34a6dabf055f559503499ea68ca836e59c085fe281c5df21b153754662573940661a97cee06ea67615449ae9f9f9a64c3a37a43ec1890e59b8612385c5b8a2ca93bdaae0b977dda8281116c27be1278101de95c740825f20f59080ac86f4517928008289030371a7c63f70c4950731407d8d9300815a480413521b2f2892cbd8ad93bd2c5fb9f8f17a306774d7d439f727952a9ef6796f6f7c3661822d2c88658ee7c94f11d3da21ae943937b6c0c8117ab5cae732583befaabde24a071a0dbc666d2565dc199b94fdcb8491a465521be140028da77f13f129491bfb38f3d229ae94600520d3c3e7c256c827432a7e9315c45fd6d866ae1062688cfa55425c59d21df7a1629ad976a6c6724cf598940372c3416747a750ca00aca3dbce7e22a97b3a5acf13e742ee158b21874e3838e972cd35b377b9b28a6e85ff24171fcbb504aa07f2d741a69a9915447abf71d3c1a032cb4fdaf629de16750d57b19f9de8f8cd9d911f226b289c05598bcbde0b08859470a104155d41930a4cdb40863fd1e2157a4e4e120704a8dbef2ee5e5353a9d82a43b657f93316eb63c43265c17fc3b222c6ef68900ab49f963f8a02ff8d4426df49381ad8239f3f96a13f599ccc47e743297ab0ffea8f9fe566d8d06ac723eb6e02deb1790d7ed4444c210c7b4c7167c1b3cce1f577a334b34f20f11e670cd0dd58ef446457795375ac20a5e6670bdba44e2f22f819b80709e2aa8da3d7c87c3632b5fd226b596431ab864d6585dbeaf5e1e99b923895bfee07bdcb7f7d1f99817776023aafe5ae8130992b810eab3dbb5343754a3c03056ba6a3d33cc3d8ccc4117b7b348de7da6c24a368c16a417bfe8e85d8a88eca8187a7a2ce6110bdbf09e70c91996c258ffb6dea2bae01654dc679f7eb3594b2da4af203e477cb941a57e1706befb3697635f4b79dce3be15b1cfce1d778b783b9bc6f0e3c055e2684b7e7f133c1cc793722a151e5ac817c4c07ff8ac3fa5f04c5e6070aff93303ba62fe1d50e941e1d79ca5d022dcd39fdc9906a3bd841f5fea7cfa04154aaa99b28cab76526f2111fe4360e109abbcd2d79be253c3ed7df39067f23f964d1310db18d52e9a3620d46216d9dc456fda3d4059919d51c44877d8bff797b5690305ae98298a9ad6d7a59d877f366891b25ba14292c4e9a0e5392de56880f536f0e4a7ab072ec6a99c021b05df63e5a9db9a64f7747eee2bfad3fa68c3afc83f733a5091fc8fc0571476652269093f20cc9615d8a53fe19defc4d8baa768c0daf083341d8831fa47a78ef66daa8af79f0bcb4e86a36c66af4a88537b723051a1ff3bcc7e2899e703eb986938226d816cffa649520da8efb8819ac4fbb2bb0d1d05d074645c4c1904473f18124f157f133eb3c0eb3259ef422b68d7ebf75d55b49afdd640a1bcf2c140ff9d9cbf37433a3f703fb2b013d7e4be9ef6ac9e9bcdf124f06c93875126e37f366437c137604a88680039155b5c1891a99bbe46fac86b4a74a1ed7bcd07c348900664139a78bc9007ccfec094ce467af541a15efef78b61d710bf0d7527e93388feb214d4df18ecdbf0744044b0f6a11e82f6651cbdca01b423789aee09ddd67da792538b15d7f551152a130fa6c1ca81da1de7d89dafb08864bad29c1009980aab953e01bf825003a580c74a02004dcbb18855c709c4e4c05ee61303fd14feac753b52ed2ea073701c28cb88656aa16893e64d4ca47214f87c9afaba035870df9ee530a205aad6030382ae4f53497bc50b882cedd06fd78d4849e822d56ca510832335d4b70a0e58d61ede133e25238d831e833f3ff6831b3c6369d2e5c9f1ebbc95f0d9c56672ce1e6dd95888963f0e94f9ce9525aece2ee3780e4eb6f8fdcdb58df045b318a9ff36e02e93e51534e4bbaa8da424011f14b808340abb521f3308ab928d02c92a48da265c59c61a9b8c51b13ec0dd95ec793494897b859ddcb8204f763436c06a5752a0d12e9e2ed98211ae609fa4c5bcc8d39d5d358814bcc9971a19cfb1c6e0974ad02b66efba855255e281850c2906803f934dad456f45f3d77bdbb4162533852d44d9b73d561579a90e10158628604bb316d9674ff5fea35be55a75d663b9ad746f5a73f97a00647571aac5a55c4067f8886ed7fa414d74aef704a9751b197cbab02c41c6aedcaf65cda019dc2d2d815a689c93f6f9c8c44b2178b364b3a97f5ad7dd95076d10b6d4729e86bd239e045347d11fa867e73ebae5152847b60021ef26dce24e2d33175bf0f490aac8088d9da6badf91142f2068c2687c70aaa400e22da8be0d77ca4d66c950cc37a2f37973f5a84843971735ff39e134820a0b98de6ccf7cc7c52cc58f7c219de61cf54490c5280e225925dbc8cc2dc4fe3cbd563e64cfc30fadf12c3089f58a38be749b5e85c885dff2d18e6ff99cb247eb2fd57c961815378abdcde4632b15a20ff7da47c7e853becca0ca5f32bc80e17de973337146f7e1f3c93725a850d4a479f58dd70c25dc516f2a1c01181bc56d7d50dbdda6cacf9171ca047eba052bc2950422a6b30f943a52c3f0100a28d45e521c5be5771210c87d36925a2896af8ee99a35115cf41fdc1014e2e689625216a4929fd592bb6ff97e758d4274a3b46bd03e31b17a71d3a90f83610f3666a328dd69f4486a3541971e2d41b21ebafeebe156a5019c076443d995f6f471946c2774f915986e0e1a33a4c44c43972ad371b57a1b8c2233261ee6c31130cb7a0174f3c660502ea46e51dab129516e91c6bf951ee1abbd73bdaccfa15c3eb495f7a3e268610a2ca6c274089a5576157e6d0838cba40abe477f7feca71498bd66d336c9459420d873ab1cb6d65d1c1c5f2aede8f6ef03b53d0ffac64ae6b9666b18a000e4763ec2997cae7e0bacddf3a284f35e270f3132b2d3c005135f2b10213c7221cb83ae6b96dbcbc690c1162be70faae0e2a11da7475f420186da586b07b31fc471490a43da3cd7190c367f359b2f6719a0211393692703441bd4ebd7ad111b316c32dcdc021462edd47953a14d68ca70e62bdd77a6bf865558fb3fe68fdaf72122dd90a47cf6f1dd90163def6c40478f3b1db5d47e8d3dadb4a9ef081e8535fc1ba5c03dc958f630b579b880865a60bcf573472a6f14bbd5b55d53bcd7845a2add37d5f865bef2bfbb203df519fb9892dbc90bf9e6ea6335d1a20885496cc645ede05c74e09d89b327b658cd95b87199248b7eb37472d666a00497f1f2b32cd5b45bde23a8790db37188736a88256e48863709f7965287e096f16c7351dbd042c6e6a5955bd5f1492f33186c7fa6f12967584836daedfa2c3cf51099e56b63259c3d7d3a4938f6ecc722d233dad1aca45e6bc3e1a0b99fb1f89c0ec63bc657e6aaacbf931f267106cff42b712819f341b1ede798964a0b1a5032c198b391111e88d0d7303c02e23fa0137e74e604579a285b2dbc0a23aebdda65c371eb403125bd366e822e72dceffe0d55dfa3155c16283020dc9abb0d150da1aef251484aa49e49e00974dac3a0203e4c11edc1733e28194b6ac694a8d85082ce9a643da013c287d6469dcf28e8bd42cbac048d3f8aae5317f6fc34f4404965bccac284d3ebb07cbbca07a49f322ba74f1ea5fd1374219a1101ca0092156ee6f403cab278a4fe94faf4511f791501d860ea30858193383ac10baeabe49027630ef60b4ae0c7e36d2e65e88458f9c6528b8f42bb2c6038d1a285288b7e79098667e1f2b2cedd3561c09f6c77b168ffb2397e3b125653d9eb2ffeb623c2189bbd89882f8e754d3b1f5bf12b6e14daf453e547b80fa1f661d3d3e8d60941f74464fe38f04286a08af25b0bc3dbf5d87ac4397c181791b0874848c406a090ad9a3930750353656f9b97385fb445c6d9c99f807bf9ce982aa0a4c920d68e10a40396cadcd745b412e35a8e6d8b301a67872274d7cba947bd54760f7fb4265463270a27d0daadd53308d8c7a5972f630a2a0961100c1c02f1093876413e0dde736b0fc1e18bd05b38627e7ea89698332a28c0efa549bb6c5e35688815c2a9114d5614339f6971b8ab86d81dd6d81f0d4019d56b07f2ebe66d6f82cf5de09c8f696eb3f75b01e67ff4fc522fc0fa08440463a38dc89641f3a72e13b69a163ccb501b7b87b4c3c303bd29991ef76af889bf9cd7a267b2323683e7a7d84ae22e3789e2b76f2d5d8c066c950975daa974410a2bde5355c551019c329b9ef0c2c5667f6b0408350d95da7bc52fcefb43e00c4ca7241b234e12f748757b951c36b6dac90afe0d6c72950263407884c9b8e04e2f85456440bafc8a2146d4353dcc56f6cf48e1c9241afe10cb9d7021c676e9790b5cbeb94eaa723caf2d1209d5e24a6d2abb7bd5fc7535781d12a340920c503f6883fca49d8b18715a7ed18d6516f58033c908be760fdfcac0668e4b9cf7d8e3ef918b90cdeb53eabbd28f2a6bd8ece2a2f834dcf149516b6dff9dbd47c7d818d90be8185039b8eb3bce978b7ab68506d0df6cdc2eb03eec6e445e1032dad240ed699ea5b4f4bc0552a9a70ae22e725f45d53d166ee2fcc059eb5beeeecf5bee65211bb37caad1bbb91a2a3362bf297e8a70122632402f79b94af393cc03d99408d8fbec07daae90a7869d9f5cd71ec71746888629662b9af4e9c1b95b26dfb420d79b99f6f28706d6857d993104d6db64af0ca0b4a38586955e52ca3c86d2d145c39757ba810fa0ae8d46db9fc6c62e0b401b2054a6d1df230f0340b0c2577df0235bafd314bcd0980485b0f9ab71316370306f99ee750726727fb78867e20cb85d74fcd11c03193b81b6c3cf116c7815d5e8f8e4c90391083f148903d5e72ff6f86fe92505670d019b568e90972c849ad7a156d5e4f20f50bb5e5fb39afb3a447a98df4f7f7d1e72a7e17bdebb15c95afc0603ddb0b4c4987dd986282572ce196aac59d0d8a9b0073df41619ebdcc8dec9637a7ccae063380d02a6d214025dfe3f06e329af617457d3ead7c2a7c605beb656353381f96db7df663c31d50e5c5b6e3505ea7258ddccf0424b798d85f243496ade82746446a06b70a0d7e71b6bc97eb32c73afe44edf29a6ebaefb81313508fda0fa20b5808a37be9f24c8adeec0f70de155e6986a16c66532c3703c24dc6bab56faf5619dcddaac61b9082a67ca5da1af1184e991fc7d29bb579a3b5fd1e7e05b1590fd00f3bac6a2f52435695e291af037295c6908a450dfebc7f3449e142917ca51ec5c846e99dd798b4365e4dfd65f27327551c3e2772af087f8659967022799d6b403084ca26bb6cbd8e006e87036623ea8eea6adf9270658bf556c56f804f48df896f7fb5cf82d546a5a2cd9553098bc7b92396d735e7dc8bc768f7a773a7ae60e7acbf135ed5dc37c46df3911b80b2a61dee4b7623bf746745b6b280c329d8d7a410ca4d9c5b8778338967e12476a17003740f24239e3607b7698162377ccd2d06c22ac951bde0f23a1db1ef36915e0bb3dd6d49ff2d285465a8e9b59949954856ea67f145a2ef8b21515a211979f3617550ea4d7d135434969c74e1af373912dbb2072c3fb3bb2c2f4ee9e194d7675991f5109966f8c290946da94e42efc072df4094e109984cbead3ce6967053c3da4ef5669381867951a54210641918324fa8bc967a69f8aa27e343d9a775940ecef67874a49863815d1243328cfe5b98937f4f935e287bde5119894b7e6b43501ccfa5c3347137e29e239a962cb760f925ac2115f50ecaef229739c4821a0792ac22a5daacd6aba4fb1f6cc5ae0dce5ded7759a3a7e28de584a479ca1b4a89db6636a041728d66d05b50e44578c84eccd3281fc6dc6e6bc85e8a71e7b1c271333255bd81f05e116ea8fc27a0f4b0874fbf069d04fc780da1978f4ba2ac4b66a2f8c524218d135484c96c605d888c22ed995af8e86fc91b7719fc2c8375ad1031a0cffea9b072d61ca6e8b5059e26c6af496c5bf79d293c53cb193e1372b018e712bb73a2c345403d27b74e1f9d441c9bb784ecbbef5f183c952da9d90c1b26cd36d1aa932d5239f034235433edafcbbcccead3bbcb35583a5f82955eabb8e1e9f459cc0456626a3cb572efcaf62f7c176ee5397f9a71a455115e2928b84df245359a007da63c7b2992ed466b1f8cd7b686bf4690c5dca396940a8dc199a300e9dfdd6f8785aa13bfb3dc829ed28d83a0fdbe2175b23efe04ceceeab1b882b4dbdc6a40a95b72da070087caeb77fb29ddb92bf3b6cb5f5da8a8f1687e7cb2b62512899c6c905d7a08623547db749e7076a44ee3dc770666880abd2eb24cfaadcf6b82ab578c3398cabf3021f5323e0172a56e1a6e1dfdc4aedd7865d4922342dfce9c94f2b7bcdf5601be7fc119a383d9a3d4bff4270a1d22076b346db5f61c5f222080c57abff4b30e2889c892949fb388c9fbf6fcf61aea72dec4041d38e456515696593b0682e9d0b6699103dbfd093b93f6fd0488621004183c2132b441cd4286ff3563572f012daf44a5d53e44e2a47ad790a78a9e9ca763c54d5b31dccbddf8e2e15b7ba3020f5d458a71861d47abc8c7384dc275944205870e03765c580af468e68a3a87f45d0691ca3d7b2f3f38c3ed7c5efa9002bd47a9ef8f4c6a7cb1c1b9cb575b83e0fff353eda3e423d233b572e442f896ed00715475687bae40baa8fc182ca83ecddc6cb1790a8aa00884e47df86185305ef2cbaf2af6cbcfab0df15a5670e761c3deb8d3f8da364fea139937412468065c7d9de395a10476c693e4fa0c8ae193caec21e2f17aaed77fc81bc746f16bbfef882e173ed2ed4a9832c805c2e45e7debeeed06ed54bae2d08cb4568f3154031ffcc774aeef4ff429d3e7a200e526c72dcd656673cf2415e345aa0ca54dec7cf5bfb0226c62f21b815f87fa4ff50018996fd12b0b53b31ac2dd46100fabfbd078ba314800919e68a9bcf134367cb51835bd797c3d482e99753ad08b55b549a7b1d5920ef3e61b82a8d46d793ee20e700b9fa48292175e39024690a400d29daaa6f91a9dccc73013868d42f1ed90d0c823fe9c6591260ba373e7cd849769c080610c121d139ea7c04bd1bac3ceecc6c783c0a74cc3defc7fd007d152a2e47bd2eaf7c2b651d2463300871b18665fb71635cf0e5faea7fb741f8de237aaaa944847a3728e0ccbd614ad97ae173f526a5d411119c8dceace2a6a61495b3623d38982f76ad0cff11e0a58e8bbe9e02ba843ad700facd50d3e4ab86b4ee5ceb7023ea3daf1a21face8be0b648ab5d154397083d33a361f7a137c129338fefacee70eb036512c8664fad8cdf262a49b33e58dcb21e08b449715677fc151cd43d04ca2b3f2d0978b811dffa77a8ddec53274428b444ad6ccce0cb407dddf7b3025f7a1b3f6b70bb76b19db9fe5518ad7b7ad36cd23c03d3d86bf0ab2cf2b2f4a35b0b4b92a4eaf908ab615c019f7d0592c591298a689e82126f712897f7d1217694183cc76dcaca047bc550fffc6d9d4f8407df5b5ef00ff187c7493d51d4c212771b5f4c2ab2a6f08f242967f08cdd0832a20ea3838ad60c316d7d8ba5204f0d807f339f60150833621855c8203d4d335dfa28217ad16cb8f8de3611465620ae5cce4a4fa2746663a11c669ee0114677626adc23a9664c8e4a84135cd9e8ff9b488313cb66535a07a8aacc6ad48b813aec9e6b48a3bbedf2a30995ccb45b345af02810a120245b76054df7aa520e660458ef75fede34d99c9ee92dff8a2f5743d047d14f7489d355336088dc0d3c6d4a33e88cb4cd8397d29a7d5c53afd7e10c554cd644b7d66a2bafacf08e4a882f930a140019060a914b3260a167b9d76a1b1bb1802f8eac784ff66dbf2fbe63f57557ec8089fc4c5e4cd32d8dba2cb04ad680106f4e4d7e9658943d553ecd62874789ec7e8634cb777e092e71b97cf50be52ee4044f98bf3ccc05864339fc062da03cae6aac33fa455550fe0de42f1835bd74a6efa1d500e420c6f319bfcec18115cc8cd55a6e7b70492716b2c8b79c50d5fdc381c3a6c624ed54ee392eba1709fed6023f1f68a150e01802f0e5aae3d5a526d44b43728167883be23215428920e1c5c91879a71e9fb0903d58b97d914cd18c53dc9fccc53487e87994f1fc9a7e65383be1d7ae4595111c404ac2a4271eb19acc96471a040472f71ec2434ccd7adf99c53be7e2a8d9a83896578fb317d3ebeea908c7eec06fcfc44c5a87b7949ed7570f76f8e8dae5dc61ba0f7f2ee604d6d463b490bf7ccef4ec7cbe4dd18262d31c7533a9253e42342425c31f8c041a08f8a72a3000abba98ec3a7df40f095f694680e2672c556735fc5412ff3f148c08d7cdca3456dfbb1220100a18e4abfcf061dd13b162b2dd5856ef8f8cdc79f34cde52250c268b38f74467f33ad6ecc40efac448266cd90d11c0329946c8b6b84b98cecb360430bccea5dcc9c87a4e3d1b8de0e024bf2a8f08c4d7c0cba84d739b83be1d205452cefee0d8ee402342c0bc77bd8c4abe49db93d1497679dfc08da31b8a9b79ab73e80e71d6d140865d075854b49ce70e996b5982025adff3929ef8ecced6a08e168083d5613338081f7985a150a2a804abb6a0338cce6c7846000363f55f1350bd30e5780254951cec8faafa3c2e0c54f3562e726341bdd25d59691d988560b7da71a9f634e5f65956c25eabb1af6253f2c25adb006542964b23807622fa1717e0bb47cc6347ba31d0ba17526ba768a64c739bb9fea9792891c6f00a1f1d84e58276556727fa8f3b0cbf4b6ac4967db042f287bba87ee03db3dc2e45f77058c5124b49630d8eb3d94d7a8171470d200688c7a53cb866061a33db91b64682f12b22a2aa2c6e74e69125545fe28d6bee0d805b5ad988ef5952a44dc0d786d5fc8c3604de3fc53d860726e51d5ae2433659bc263f0eb48b687b579b423632e9c96cbefa8c19cc49108fc4956036f013a76fbec0b848a5caa1f8f04c8c3ec52ee6414ffc0a56ce4824af80fdbf03316d9fb3eab36d13d71da46ff0ea056dd825d1ae4b71ff53658b20fade76904c20a1addad266b3fce2f4ce24cbfc545fc65f2a0843f4c1bc0cb293d64fa87a7e38605029086323603400adcbf3ebef712a4b4de3cc0cf7dd3e3f0bd656fbd416032a1532ff2131ea6491c1da0b413d3e6e6acbd5362318536480e78f86f933affb5f6b8d193975f7df5888c37484d4342d4e023134cf999b3a38b55652292fa89b80c1ac091456151e95810cb23f3adec155af9c2a7af23109c703bf3af41e9c5e2ec5f4213a68ce9d09493a56c8d7bad522228a99adb8a16dac414eb3f28707ddc9d71a04140490f5042fc0e4ca4144d333e97104e06368d068fc795f9d0f5774d273622449efe89116c334cebbfe0945fb82d3eeab78f3dc7da3c3906c0e27cde93980f44451520bc191fa77066474a7f98d47d9777fdedc6ac5b1f8d809d5437e87eb168bff49cf952aa690321b1363ae473137dcde867ab0d0c8fb79990c7ff2ecf4ed99205c56f1ebbd8ce79862139a6f149c341b8711d0537d0ac92219dde6d752fbf49ae63c7853b3ef6f52ed324e53867925bd5d4c49dc42b93f3ba9d7eae579c4169593da98f10e1a61e1214a2aa2fb511a4a75849dc9be89445c29184f85ddc877c6d1cbb45230a047a98ac5bfcbe7b69a397c454cba44fd90fa13f9b546f39ba0a52c8a8ae5c0038932962f8e3cd00c1e00be28c70c8a787d9be6f69c975f902996f0916d2a30d6bf12eff2167448d42e46c789ad5ed3ac92c83eb965f576586b32ea7aebae177c51a0d4c7d910b6a1336234f2502fc4ec58e577acb1efdc56fdff669176dfc876d98300eb5680bdf5e5f962fd6fdde2ca38aa2e3b00f5061e4a63018f9f3de858cf3fd1070f42a3448e52fdf55d0791c8ca5cdefec3936800e8e427cfe556db949b1de19573e51b0fb5255294983b765a8693e6628a5986c1521955dcc9a936acd5c3af0124d699c9f2d6fd35b1c7f511e5d5e100b595f6b20e791830bca37e23f7b785e482a58405bffe7a632a5b826170995b43e5f71c657679eb664ee4167c897022ba1db08e4584f246a77254c2dbaf64c1c68bfb8c5e32925bd7e0d984290373f1fc76a5fd0bea58ee7d1a522ae30abe90e327f1bafecb58c61032f26bbbee397015fde474bb4898de4e92c22f1a0b0d65343a981ce99943d6a985cd2197b24729b1440a79f6284892b66c2343d338e79b34544d468134d9ea0e79d84a6ee8038b38b976612f11dea82f16f40dc10cc3cf5dd59fbc6826819ca98f924a8408151126feb6eed89dd18b2323c2e1461f286e3b5efde300d6d15b253799b6898af26806645a678514b7c83d030e62e4b89be43750e65eddce5fa1ebf24cf2e1f911dc518acf6fa72ef7cbc74545171f8184edec5be784718582fd78402a942fcaf9fa82f2846bd14518127c5ae552790279d7c4b08ff84e94c1ea54b1b11eb589115f250c17e075dfaf48a6c49db963a3e13e5b2f3e2ed764b2e4fbc78f0725bc0e56b2580872178713bae102acc081fe618e0a08809cae8dcc79f7e202c1f2cc379db566c47538b3ec05b5a5b0ec367a61436bece5c636688515b3a1baf3af422370a8b8da7e4bfeae958f1e38b1039076fafb3cdc4ff19d5344c97725f0bda6689c06bec8f1e3bfc206f7fca2936bd909113278d27e8294dd93a3e2c26da0716d6c49e90e84728fccc66a918d27f1dc9e32ac4176f64bd78a6edd651ebeea3ba85dfcd8298a8ad72540619d66d317e3acbbc2f7282bcfddd042c08ea9690d5da00d9a0c88989f3e72217770ce2950b6cb29013a64a3812045cc07cfd0e08c5ffae7abe6ca13221e39d616ac019f3e9e6016f16bcad1f24751472d9953d9e9cb0f789d075caea60ec2dab9bfcf99343301e21e0bb95bb5ab99608c7b70a9a827643d07decebfad88c3abfb2c76cbc3fd3736e1aabe952dd57484af06d5d439ed8fa156ed8ecaab04a2c63562a5ab70556661e6c94912dd5d79402f9be1ee2195e84214a41b44211ae6c602f2ba9cdbe4161f87d7f749469c2e1f68db335bf1a904abcba302d0a2241607ee6d54243921dcbc5f6737ccec19e96ef52528b22caf7b2ad66ab3e4a0c8a7184232d0d64a8700c4d7e79902506f61db5f0a50653511a25bef5bdcf49f612073c8d3df27729c58c58be9898df604fdd1010b48f99d6810cb5106bc950095f8b6ccd0cdac33ca1b2ae5ed87d45f6333ec85a850f3e81b5cd5b5ebf12a76cfb63dd8ba2ab910a8ee8160541259ff129a8a475236c887b3dd27888c09396486ef9576e084f29bb13965a5bdc793578ba836e0a9390c0eca181d435763465c53eb4a21e45acd376b922400ab0614eb46c37ecc0de612dfc6a44360eeade5b0af5fb854461acd76306f591b7c5c634cdca2ce7400dc919d11f8268ba2377c1401a38c98865367cab8477140c248e2dea59cb263128afca9648a230e229e8df8e36d2369158310c76bb1093b1d4a38233a37a733c35fa89716e0e572e051afd1dd03194084287cdeb3229d44eddeb7bd12fa294093e949e8a182da545bef4631570bdab942b1f08337128a18a48505fec85ac523f4a64510ace67e1d05c5d599d9fde43de1ce104750077c00d1cb978ab2efe75866252ea191824d576e83f26dde3fc238d1cb50bda687cf980610d0c37b102c5888d46b0de7fcc47e0698113fec77f144a3483638a30a1168b203664b8961f0aead328ec828ac700b6e70b6828d0cfdebd6b3355ace04dddd5601bc85566bc0b573ce0e72cc27ec89f6bc56d828854498dc9ad296900e7180729a47f36a8439175d157e605ad576643fb97693576761d6356d927e819d98dc883b9d384e41b64ec99733435d5bba44ba269a668229e21e61ba09752b28a05c177420a67a2ac4c659c1d18e3c213485f65236a4415321ebf1fe8c0ce5462479a0c276d066b5e1188e33ed938fac51b264eadfef1d69cdc956a9beb8586c91dfa4b50448ac6997afc75bcc05b073be54964efaa96ed422311059f609ed0274d893aa6d71a3cc5506a5b81157471db6e6fafd1b55ce38ebbdbf7de6742bae4a0f0e40f6ddf544a5b799b7320adbe0f7d41383c696a3fe66b9a483e4899cd68ded74e745001969063d23f7c282c783edc6706160ce989b4fcf601a94aca901ccfe582bec6a78a00301c4e83771926cf51882149e7004a5f37992906b6fe8c663ac387d318f9b9008900d16f539d512ca54c92bb42d8084fe128c83dd45c47afe919659d8e20aaf93826cf2a05e080bca05d605665984eecc54ee735ec0d4b60a28e24036f44e5540335509bd4093be7096093009769a19eaab18cd8463820df2ecacdec058cf377b3d65daa0a400b15aa0034a321738bcd57f9c20d2a064c965576684296215bcc10b0fc3feeaf76ae49e34a264bdd93e195cf8ebcdf9f59ebde3afbec6b2ba5b9e16c3842c77b061aafb1dd715dd042422cdbfacdae2acf4893bd90d2ccd15aa8f0b1169bdecf43c2a413f66c9f731e58e4c40d29dfcf34143aa82edc003b01000328a0337bd1b40cefb09bff59efb18c8532cfb6bab812b79ca2def251922229e378ddf0e5a9e1615a32d712d26b8344d6cf495d860af0998154a7fc05fe458b584ad5bb6680522aab3eaf8d53101ae9a04082078df05722b16591e265a6f38e2946917d447e90cdab7f2d58240500e4ab30829a1590cebaf37ea48cb9b3b39a2013181cc8ca22b4229a585b8d73bd9bbf4552006712ddc91047e9e2494c0e17035a72823a8d9045d83a387fd682d778a427f91fcb9f0cb7d16767cd5c9a8b6d9bc2a895e2ee63ea9405d6aa4659d8e2217f7fe1885fe4ecfb8726333cc5b204b0f4c13f0716220a20a339c52621484100f5ed2ce879ecd0594e2ffe2ff40b440a97c566f32c550c42bd69b9be01adfc07304aea3115accbb26589147e4f1f967054bdf4ec59845ac3fb6f6c5622917dffd99e02ac5dad46cd733c5f71ff7560abd3b0d03bc5385b6a0452c836ac7b2baf97f25ca17776a7732151c54f2c950b84bba6e22897f87701811ab4a6c6f46ee1134de0588b90586c17cf3062fd0800c0b5a712faf84d164e19d017ed9883ae5bf5b77618c281bf80fcbe87f09b55a62a68bc48fb0fbea01b757bdb544bb053e6e438062b43d346777927b2422e0464897dec6c7105d37d2e3c23e7230703c54a88d978d7370d5418351198a0dd9ea4a49b4066a50114164f17d023a2f3056d4f8aa1b465c6b8502cd9842351d0aacd446bbe1edf2c0ad148ae8b7718383db1bd9299a21d175ba47b0c883a9f30b0473194707d67ad3c17e0a85bcbcffd33fa5b47c72b46537eb7cd7726c5d025387933bf5e6984ad3251deae49070d6b70b1f252353529a1aaf1eac165ad2dd6cbcd12948fcb7f5475e50b675c131baa7b3c4a5aeba90f2a65ba9a934ed8fe6cf0aa95ba0b8ca0c98c3d2f7c9cd741e1dc052b08ef703e163a7aa495e72f8b0e307886dada922f35ffbf1294113cc6391c725d044b70ff8cae99d16e3a9a1be512a0ab9b05c774bf57d57b58c428f4d9c2eda7f5079399b44b7fe9c74f02f8191e88cca69212b7901be6336fbc8411e956ddd38429c056b79895b4472c4d68d1dc99b3a28c5a3fcfd35903830139669361aaa758bbdf7cbd1d41f997db65b435d53b2738f88955a50898b1399c2e3bfd6abbec1ac4d754ed63ec825e6430246e90d7ef10e086413a400a053b944ad84ff97a69714d922670f1ff1545cd98ffa495d3d4d14b394bb50617c931f17784b2964ee8065df73a6e4fe07bf420848ffe6d999e24428abb3fdf27c3c2bc9c884eca9f2f80fceed70e06f97c1265db1aa59f8f15b0cc61d8ff55a2bc97fca02c4a1cd60888325f46789db1df47a287e9c1b31f001ef1a6eb1eeff17d58b96db8ce155939c60832d0d59c6f6e3de16f447932b02915b9413cc3367acbacfbea74043b918ae1854fbb4d8c9def99297b72f5a3a9563e2d1a1317b0a6713bcbffa81219e6c582b29f4f07f4a22b068393bd5e8e745041541ab842e7dd35ae30949b2034c1b0509508d62c5ce6ea2af59f6bdc7b78dfc53727726b6388e1ad33919657168815f4397396e34cd1f3ad8a87c596f31dca72dc2a8bbaaa0d3bdfdbdee1de46a5ba15a3c9d8554dcb1038473313b57dcbdbf14d0c495846d60ced3064c4de4c7e675cddf0e4a9e63c0773368c9d60a2ead8ea92b3f56dbf491b7e3a09877fb17de670eed20208a08ca1055e78aac0e9e28a04b109d6209bd0323b02b671e8fc08fefbde567a9a0223a697c7e084fdda1cb9e8b4f5369a64d217cc8f54cb42b58976a2b56393869469ded07aad713efdfe2d3ea25e5b03a1b793d8e9c9ddb46467170f7ce397f5dec711597ec5baabdbf1adad842e8e82dbe66e0719ffef67920aa9ea3bbdcc0e69a306d9db12a76dfb5e03dd614c173f99c9700326dc4983c6daf4daf8d97bfabc6686f99a7b7face5abf57741a03e6363c76171184a332f893fbf88bd1febe05f795961c2e78c8f22424c232d124b16c14808fcf830f49362a1d49c917766e9db4247b85b40143f3989cf882b8a857f3cb42e4acd75d5d8d968f9bd7dc9323db72b18a66e6d60e4b2ea484f46f036c75b749b039f031e2676fcf79387fd98037b9b93d50156b8a516cb7d1f832ca415a7ee17d076c117a4c2c595c7bafbe064b0fa81ea1fe363aaec9638a1ec261792a78b6a595b97077b442c9d011bab5287ddafaa90cdfcab1cbcb23f7d88c7d966e3b35b45556d38d28497d5e8b4f536958a24d66d1589d6230f875a5a5ff531b8e3cfb43c6d2bf0d20b6f07258cc2d3b53fc0cd29fe722de66b7d53e07a9966b030453be8aaba78a3601df960abf8721085eb566d909ff88e5bfcf1b8e09cc178517fb9ee1400186c0c0774401a815bcde30d3be1d4f87f42646cfb8a99e48a35 +MD = a58a99535060ce659b0ce0c36cfcaadf38562ff95a7d0e4f61cba05c095dd808 + +Len = 86576 +Msg = e6cdf8c69ccadeb81e7d59ca9c2637e56d8eafb1a64698feec33d963864b2124b699d8594a87554d6e5c5125c4049bc2b7100ee80cfdc19fb9b97dd9fb637456a3522fc5b05ac92c234a5b890fb9b7baf003599a3d8e9a6d4152277e2698b2065301e750f8cba21be6505f40a5cff294c06f781064818d2f2906bf98307143fd6eaee743476248e35f754590adceb31ad15d5292a75f00af1cdd2d7040768f039d5f17e6c8a8234c35c1f5c24f3c6412c8d4d1672eaf5db3c0e0594e7f30ffe0881e5f80a0249b1d113c571db5a36c4550dddcd922f90b04bd162c791526f95bd6f2a75bfa5f19209aef54eb048a337b0f7f5b2eabc6726abc888c3b29e0e63d2fe4d7bdfcdf031b79e1d272677a217badc237aff09cfaac653c62dae3e72f4e3dfad7efce2ec3d7551abafc04fa9e0fd3ae56a41a060b945f3c979f6cc23a56a53e8f3999d4bf1cd7a3f5cf039212fd294ca15550890de8539011d2ecf9711d12b8e8e2855761b1a7836a338dcae50e56a30009bbaf6871e83ebabb8a153b6a2a6fc834b94110606cc20072ca2b7f0a03bb5c0a83ff84f7c75079a26f9dff07956b19755e1933efce69a1d3e13c48b9d79d9b9ecf01ca4297cd35cec31927bafcb4c1ee9b683427777f349dfa85a9e37b50a70ec73ea01901bed888ad121a4c0753aae799b57ad00c0ca0193f8f084f96dc66a2953d6f45ad2a4918550f40855d4fbaa77f886db23819cf8fd6e1cec6d14ac2a15e86a08f421970c6e498012ca7b0db7876697594a1aca846e7046410d4a1a2554da299bc699435da8235c50b8c7ef4a0a6e1fa40efd013889b7e30f546e9ed048718c497c9a1809b566ff4e8b5c2ec683677647ccb8af89b19d99c3dcf2b8df7377088e70b4b395289cdf68cc984ad184fb41b11dde43fc88a9c0faf186e697683334c73d697484742d833bf71ca1ef8181f87c7cce5d1571650f114c9ba69c893e87a04d38f95c2aa161448559e2750ba40116540959490e47ca9348a17753790177962a93a090be911fff11c07b0675c9f1fb5e3fd71bb1da8a1d7018e7509a249b15501a08a6926515d806f0ea18627c51b7d5a24501fe85d40c5d9265187f0048aa583ca01268a5c97bef5b9e2f543396b8650131a056e21eec5b8e8f1f9a3d36c19d6bf57883cbc137357125cfcd78379986bd0b5b5d77f13a147da3ea7e23bbf7ba38772d864f93b673c21f5e30b2cab7b53650b774afc171f2d061ed8d6c6eb91912b3c5d2c9976614ded96f108bb6bf6b1d90393ef22630812747ad6a7fb582449b29c61ba262b2b327e286ff6b820d22d358450ef785d23a02b3be77c626efb7224792a3628c48b92dc91a5fdab31d76e8078f872866e3a7d3347547d8496e0b58abd01c925a84a1510bbdb431d08cd1dc2c6d19fd5fe1351948865d4e83699baeb4f2e9ba73f3064218c59f3960c7ce10456249fec7678c556e561a617b8ef284f17f9d335f1042717ee66339ca5ac634d10389a533c2f808245921e9782aaa8befdaa9958269005fac84c2bb93b244ba5dc57b793ba002b20923e61f2fe92e141e9881796469aa7d30151057436ad4014a2c71e3357b56e36b3ae9aaf926e7cdfc3dc727ab9ebb5a983bee655ff0feaa34ad1f8bb7a14f0ce902aef57a80820a173eed589e74bd68535dbf8e5fc12f259bcbd6db48de75aef11f98871a726768de106664d3981b26effef63ab967d003fe0d3a4a5f7f453a21e658e85f79125aef66c4d4d1557f26cc9444f30351abb5b9e5bc616200484ee9fb4291c0011d6099867b311e4933e877b20e3fa42afccb7df9cfa8f70de95db7c2f80bd296e31a8b041c0220ffe3dc8fecc47932305da5b89df69994f4c2d719d1ebcf0dc6fdd9227409b07fc6098363890a48342e48e4d866c3abb2514f4b9eac9043d81dd83cfe3ad6d481581f7da12b3225006149097bc8b967e5aff94ba4c77812d7e80ca68ced05d6ec12800ba747fe884d65c87411584a56956d5b27ca9725b473c205b64cff09400671f5ee0473a1fa61c851c51789e8e04815ef908eb00b9132385ddcbcd563986712cb754712dee3f3f58f6d1cc227ad744610e65f86ac31a9c76f9a5b24b75884618b41cdca07ed6a79abec8fb58906b05a89c9bbaf8a3e30dbd57fb6515708f4eaafc426edaf6f3bc161b3fec88f9472df949b317f17ef7df209ed4cefc5122f1ac38ce11257f1fe593b63d87fadcf3251dbdb4f99f7fdc7b687739d54a41ca97e40fc6acc741e08dd836cab4f662f854dca1a64748cb1c475d89316245670ea81c2a34270963c119ae44ee5bc3b3dd21fd9d92e9358d3fadc67dc45d37ec768c1a301f6a330e47f2dd88b264aaf62af64a587fc6aeebcb146cfafaae66f78aaba7ca905c8d69fc802da91db7f354683a897b75c8fa0d4ae418a9dc3d1bb1d36e8aa08ee75f9d672b6650383de6f41e5483ad7cd6631c4384903171f29d41d83b8d5921f2f0d1105c4f240adccaffd4ae00979dd82f403f5e9c3cc2b636d0217b769d5166892e8079b1ce9b7de99c12afc8e1dfb7a7a0c5d9066fd56f2c8637970e16272972dc3eec54f5f30989f461bfa2324b5913655d5d9574b407c88aa1f51d6aaa24f302d21b00421b66f32e48465732e7a7bbb68f5210f367645205e7ff6b41e33f54c8c5707d5c1a7e6f7350acb08abd89e6bce4214093f470121e921cbf44d863dc579e5192edf83744ebff5a72e2d5e8de9fe330edfd65114ffe29b3e21a9376d4d7e528099abd7bbcbde0b668e135aae98615e8ded9c23153cc342e9d6c1c618470235ca80d72311d1278295930e7b9509900b1ddce11b764b13cf4b6e2790d3448de5538ee1f41b011511c0c77f3fb5b022ef4b0845c8bcbd5c86df523b4612c8aa17b80e4ca92bde3f2f54a5d5f5a51e6271720a4aa95d05f600124d8d544b35cf1364a987d0e8cafe31edb8a35bd7c707184f5d604bdba788c1809a8e2a013e658ee5cb23f9c649eadfd87a77d0b22c596a1f7c171ebd347d51a6e3ce55c92515d0b7fd919248fd8d7fc165c3d2e8c101ed8ee0ef90761f5c26f193be56079c589f57bb5118f5384e9814f507f0d02778f90a164a4f9ada9dc7fd24eeb941069621418ef32c3f9ca6bf6fb2c4a90cb227330d96c7ba9ff8ca9b3631dfee09e6672d11e2f81a9c8d3e6c2e297a79f313a51225ece85ff9fc6b371934f262c6de44192541c08290ac7e24dcc3a9c227ae7b2cdf831cae4d47e8222298d6b60c30a55c0835fce2c05cee5ff81bc3401ef501d996f3d533ee7dc9c2fee7ed664e90038c473a0db98030e7940c8c77424d89e1aee8a9b27f720098bfeaacb6e2027ef7204ec8638574ab225786b0066747df8313412f34ef5c72dd7f9241b3c7cc4ff89eab6b9ec4f22e0720f301111d72587ebd3d0ecd122246f0687261746610a5707dd98e2ff6ad5c0e66de0a27d361a73cf33892fb7647ff8a20f766796b53f2074445ca97a8eaa7c0bfa435ab37aa2e366bd086408a51ff033fbddb23462ac815689c8b564a5e839691f20e2ba8906ff36d71432cdcc4d7e3fb223a0264e99a33713a5afc596d822864240e19a4d8ef1c9ea74410dc151ca509c10da76634dad9e4aba3ea549c25ceccd6c005cad81dea75ff13ad06c73fded216c082c8712c81496d10b0da6ee1223266ae7079029f1569c53c51eb5fb3f9fa9fed24ea42e1c205fb0bd0495a36ab1b7023da3e0cc4f600b6289008430b7ec9c8fdee6a1ead04a0d20fd93fe2a8c20e6feab3984b3234d13e52f7dc15b8e5f62e7d7fb668e0d1a08e973c1c9cba1f81d25d8cf642693a31ba65e9e54c4eb7d63ce6396db62fa19b9d3c696deced1bfc33e6d70686cc7ec8d6bbf6a25b3f7d0080c2abee8aec0ce86a69f1a257b43ff3f12112178cfe8afd0fdfae91c70dadfb768d57b75b986c1d829a556871a203ffb696dec7c951e754c24b6232242bb32d9ac0cd56acc757b18258151eaf28f085e0a28d85c0790c569a79b211d73c252d79e76d5af2fb583ac63da13384cb9e1d0bfebed006d67278f5052eaf74919c61707bc822c2a6d61fea859a55770c652b94e5e34500fca2326e58386960de51603ae86e5ca05c59e74bfa60e31a6dde3828028b43534e242962fd6fee40651cb025d7b046f07e6c1786f6856ac36261d911df2769526d70b47f6f159c77e826c7bda43e90479f852717f4786b267ca874fed63805a2bd007a2027f9f29bba381d8ee879c72a322dac7b8eda52a83f1aa24b724dc6a8cf5bc0d1a26d8f106da928061ef239fcd8de0e1e2ffbbfbd0c20c7945dc92af916fb4f1088e0d07a74f28dbfb2288753f61ec29c528d10f976637b45d34a80f816677b792604653e62cca5184c9d3db40c58606280eed4d1f05b33fc8d42874a6018bc5814489bc0b96014ac38b0ab81ae137e0d4591a9db2c506804e6319c546697a859ce1e02d5db7542e811137f613de862092b25de796d1bae1b68a84eaaac6cc5dade0528b25b74b658602617c74e4fc2c28c1c013144f57c8caf070ca1a3f07b77ae8e7bfacbe6e579a079132851a1f6d5e2d4a0a7468639f503ee54fddfcb5facda2a8b137f3466d85c8ce008da97a4bfe9e03b2fe4368cd111bec603d265d8e6cb69c49117e5a0d0eec20ced6b9922fcebef4f4fa09edbad5308be580e588db1fcbcc70818832a0ff1c8f84a671f17f983224b9afe17bce6424ccc7ef60bd49b0893e0cce39578f1eff240a46f91ea522a59be766f4997185a0b7ecd2c08440e59afc0641b85041343ee648fe7aa10735bd62676769cf0b024c533d712c652888a30e47222ea51d0880de27151c030f98228022fa69a504a1cfa8a213cde9695f4f7ab6b9c2df8d646e128dd506cb23157dfdff671ca4c42bd2be0402cb976b33434a3a4d9d85f70eaf8c63846181ad7276e2e5f5a953b367fc9e49844df896cb2a86bd27e61fc5cfec54926b54ad1478b436beed393a3a1ff64f5be27b9253f1aa342690c6365e6fcd7001d208d8c0efe0017197f3e2bf1967d920647ef0086b6b5e5dce65512ab6f9ea9700a489199fa14ce63b00d2ac1ef84582517e971f02160b4929eaf8916c19ca3e3f5149874fa01e0521879267f6519a68f3a211fe7e5344d4eb7db3fb58d416ddd5379f72c9857fb691b1ab5a6919e0b99013e40fa7c910e55a480bd043d3d85b0b7d1342d3f777e1d2a6a4eb3ff81f5f71f99bb845217765c0708778f5be17a2294c2d5f369e0f6e2d8d05843f986041de7bbb631f03813a6320b05c363cdc9977cb7631ba234e45ea8e578c339eaa471ec1ce77fe15374d8c7e0ce2cef52e283d237521262e3d4e51d3216be1b506597bf45c5caa02a08682b2257384921537c27bb2954466e272a981eb8811837b5f3b3ceb79eb70c4cd8fe5837821bb99ae4ffcb6f6da7447973cc33e4d8db01141a7c005388908ac0bf93fac576e17c3752ccd08adb1ff74a650bfa0211ce5d0e707a931004b715f2609e72a7a304f9a75a118312091b06f882e9d9c6c85cac13aa31ef83afa53e50807068547320a2694f602b7b9412f42231e86b7979106eb20c248e04c5e5847973bc343283bf170bb72b524df8b23f56167a27b0808425782ae4f739f3f268cbdec47ee8412ac7fd35e59fff935358e2953186f28b2250b49ad5a399b6565bc6164b90dc280e25cc20215d171080c176228111b5f5658115b0891b9a898bee06be942294c4d3b0d72a61221aecc5197f62fb40816be8271a2071d7b2f9fd8ffc2c40ac98941619cc99278771849ab17ccb02abdb3b04c3105f1260796435d21503d3875e123f910b10d6e5b1746c39eccf39ac2a0f55d5b6b10d3e6474cf24efc9bf5b6bcbdae7211611c56138d4034de3f2da043555ff6beaa4d9fa882418fae28681282d525c9d0d4abef74e4cbe1eade0ade0697f70be508bcba23acf2eb4e2aba139b34091dd8af43afa2140caed8165b045085cfa1c87247bf1f94ad6bc5ea124170a20077103a0b1d06e5aaa29030459b88e58fc04f2f163704001916f9b0992367e7b2de60bc2cc1061e4ec6fb73f22a1880df70628952aa39b9def4d3c47641e9cac95ab07fce230b899f20ff298a39671e65bae9c6239e2887a50d3b6dd2235f14eaf3e8c917cc7eec46bb85983450dd87cca5cc2fb09d3831166a1af4d5522f8dbfb2f1e33243c510ea9c760a19f8e282ba3af30c222ed181d81256a1a655c3fdf09eb11545104abd34cdb8c561b8ded8d88046a5a0da5b3d940dd9bc6eb4812c25bf11a679bc73bacb55351233193951cd7fae4153273e2ef164898d54f8d3e2051ef9e0f5ceaad1593cd338b7a25bb5413f112a639fe31c981e505c81a820e638c25209e2ce56c8838a7c8117dbadccdec959a6f7cab0cf304315701d4ccf0167b4026a6744de68f3481733784c955e49246cfe372f0e0e62dcc0124f6c4afb3afaf34badb9ac79517e8c97057e7c322d58347a4c5666a2d6ef388a3f91f89c589e0bf4dbb527c34432c3f5e3f8cb11306e97615ec71e5433876720164241ab6aa734ac1abeb70d756ea3953d42e8c3fa6d7ffd940ba0ea21a9341cfc088df2171e55bc925ec4218c3916be39e53d10345dd39417a9522c4a5f87c5186a4437080a566c6a1cb6c5309c04b9ff6830c086467b6f0f299ee453b0486493f0ce43e4731e04cb80f6c2099d53cfb8532b9a97315ed6a314ebd8e7a55f41942294de546297ccdc13eae0c047ec458c2f956710256610fbf0a0d1ac44b5a44489fccf00dda80cc65cfbe6fd9fb766a282d6ef982b7a67404827974a9730d5cbac6fe08fef390bb0e4919e67af9c7923d756fad84a82219aa1e7f26aa6b91b501356d7aa9d3312c33115cea77e84c536b37c50788a6787308548aab47739c0fb47177df8f17c6926cded3f6514559304a0b2b81ff30fe12b7bb286cf15960af5cf1c9a22f2fd58024083b9487af92bb52560fc758e6377b20c8d506485ba426633cbf6cfa89e277f103e04f8b756d570cbece224624b90eebe41ce1ad08baf76fc8e58a81c481dc4c785e71ed356d95d18bf33d177b076071c36c99afff39b4bb1cc8a5455e183faecc22b62d7e07ea59641b626d6786f24abd5088b1ad94c10daec527c5b52a148085c986bcadb0e70cdda35cb868dc46df584559627240beb005879c83784bfd7a2bbf6e2b431cfe544f376688fd5bd0b81ac766330be2004aa77c7dff05e25cf42470d6e9dc90a2d83f243a4fa3aa126d7b634993c8ed38460b1036a8ec71b577168a5b88e8b066f12416227cea3bae5800857e0547c6c93aa6ef7101aa9e897b58685678e5f0dd47a469b9a13f74e71030ca7e27f7032581116697a9bebd5b899097624a62d6584426bb8a5d220a6f2e829ec44c5526efc1c11225019752ae2a2594097dddd57a6f2177fef12050a8fb8c6edb12e0a69a654c8ea399d2f2f3c5adeab673b572b6312b1ba21db8ec170fa4d73cfc381687f3fa188dd2d012bef48007f3dc88329e22ba32fe235a315be362546468b9db6af6705c6e5d4d36822f42883c08d4a994cc454a7db292c4ca1f4b62ebf8e479a5d545d6af9978d2cfee7bc80999192c2c8662ce9b4be11af40bd68f3e2d5685bb28c0f3dc08017c0aba8263e6fdc45ed7f9893bf14fd3a86c418a35c5667e642d5998507e396596c50bfcc85eb77496298e2f1efa3ec9019548ecf32c44dab97ee03259009e13b7716b5181db56988693cccae420a96f9af19a6543dd38d9da22750599fdb6aa62b241170cd74bae84a93df3280f1005e923be89a452c31a6aaa60a88fe013880cea35b3e5ed073534cc4a2e671ff34a808e1dc0a127640adf993b819732253b3a9ba1ce999739bb0b8f89e30dcdd39bd5a330b0a6b5ac399d517e376c7e6c4250492dad943023ae7d65659798b331787d05afc031a80c154875a1206c2f792c027522076272859dfee075d2a44a8d6edb17e375ee58f42c55683cd312bfac56a592373280c8bfe82483232a9d0e47fd647c6458195304fd48cba9d5fcc9a660de32d5d57b9d334b72c005e60f7901a2cd85badd6f20aee69702908f86b7d7c900d97656bf7a90066e1996bb58054add6ad65f7c3c3c62a6c49f59864d14b0fdb1f8a14cc8eb56c77b024e11235d742bc0e0bacb2d20b08c56049d50cc6ad28d6612df0e2469e7fd3e1c946dedcc2e0c64275530ae582925dfd4b4656114acd691ba98316e70c4160bcb224813ebc90dc93cc7433c5d2cf1a672373ab7ccc097c942555ce38a9bb0788040263236e59e6473897953aa4c7e5e8fae474cdd8e1f715caec73021af4b18fea69ec537f43cca7e045980ba083a7c6f82217cd195fc2e6bfd26e0d0af444178ae08495985676fbed05a4026d0a464a44b4fe44348ac54f2d8f25211fc4aa690cef93b2619bcc8b866021e5b464acbc07228ffad46ae9983ca90206016bc9cd991e81738119b79ed4dd777d1c9abf6468f534b69f08140813aa6c8359f18b8a59f6b69da1d81d7eff040e924eb3698990b454423d6b2fe8db1acb62cf5fd6ea73fe9afb68e1e8712e5d4eecf1b79075a6e75664579b2380bb7f86690abc94330fbe95547f3bfec08971a052aeaf1e6ed316a4e595a1d618dc630761b310acae57bf106f8dee49b339c76a8d2da2fabd3fcaa58c9e8432f8664db511716406a3718871153b03af9166e7156615980caa118ac1231b4c1e6880c6f843edbf8a5a85a2220e31811aa4375a0aa20f993c7c72df6070b30281af525538bdcf29201abc93892216707132d5a7b00cc2ae727d8950ea3d0fad45160582dd48beaab02d3de5101993d99c8468566e6bd7de96f37f65c750d65551e5c1d54fac624b22d9311f1eba4fc382e217f0ae86f53290277ba66071b1028d64add7f7b164135e67c0ca1acef3360d930afcd726c5b04861a69c1b6a48bde1daf20f3b1f6c0b4c1f116d6e1d263a24e16a025113ee62a7e927ce6102428d3591b70584bd2139d5484d90816f91d8af125f8a83151950930627c49b00487b71cf25423b542ca7df2b9bbcbb8cdb17976f101dd7f4ee81f501ce072f2d018e7ddd644dc6ac345d53112477843cad00c240a642b47714fdb622431e875116ce41039bae8f8de2611a40104c4446af9919cd4882826834ccbcb1af9109342e43a688f3eefcbfdebd1a0186c0637388ec845d1f64aa8df5f7f1f639e91f9df2f692b693947709cf793d9bae5d498be101ec3a537092ae00843c390aad305509eeeed3a32867355e9b6a58b1aa5f5661de37aa0b2ea395fc7e84c14965a3251d33a3284d333409322d897eb72f0b9bb18d4ff66f27450992eab3d71f9ae2d3d3ce98fdb73c454ef4368156e775b62478161a66a8e2e1d16ad2b0c3b4d25427d5c6b49a09cb04cb4bbf3c286a03c9b75f7f8241dee7ddb62b3d63cd2f9861ebcb23e1466c68d84ae0cfa13c6861aa1d0ed26ed138bfa3807e34b43db97171e55cee064a089c29915a6e98d90818c31e2c17c55cdff199f70abe8b5a79e7ecde312e0aee04ee606a62a4094872af7b816154712bfb0529e278e3d06d98813b9ff2ebd77a88e7e39ba07adcd2cfae391057935986b384ba0b6fab6bbe3dc8c4ed462d5436be0d1becbbf7f9bd479e6791b3db65b42ff5b338981f44959142f093d5fd696acceb70275c24495101066ccd20357dff98e07e329b46443abc7927574862fe5dda064b122a07b2d8266eb08c44a789ad16cd82c11f2951f4e5f5d2034765fb5811e81277ceab1d98dd5e9b95c73c7107d04527acccce540d343c575d790d48a398182f1cef1573da4f5f95b252f91d55efcfd5bd4b3f36cbd2d8202e8762ce86981e08c9364f9ae6a3f806a98de876df9af4f4ba4484dd77e751933d186c7349398307484a607c0402b256431f1062ecfa3bec6c5ea333589a2d1a54d5342033a2ce9260d550007c9414ed48b179cac6372c269b42a61fb814f61c3966c1be8dfc8713d87c270d9580a63380ea2c97b3784f080f989488dd7d3301b5721b339f6e36f179e9ee8d99eff091b37330affce52dfb8f07765810fc6d3090a14b69b12164940bc4ad67ce087b6da8f38dfce9a74d68e537537699b92b13929d58460b3d986456b46a837df4ce3028134c65c1e637b5d7d133cac0ddf511830b4ab4f5e95bc921622fc9edda7143fb7b74d1cec9744c2e7d1f3ccd9053922a962a9ab64d342b3676032168e3ed0ce9d20d2a56798b93b1e21db407f9cefe50e4ffdf9792abf25b97ef733437c9f5bac02057a21e04f42aa9381ab841edbebd9dd16de0e04886596df9a79afd8d6535efb340fadf68d55f797556268f3938396aa82bd95e944ff7a12ca5e25ec2c42304d1cda5e43ea01afbde50990c39d58cf38d01c93516b6ffdb8d555481ef794caa7fe6ed560ebc21d77af15be075fd7ddf87d7fa8c562137c2269f388f9cee7887c773185d61913cb4511fb3327519d6d69f95b28cddf969fffe6cd5af518a6f43b05c6f20bd87353a6cc3e82ac28f5d82dc243a5d32a75b3a1da2740a97b5f88742893ac8ad06d312d2c643f2e3c9db88466ada26de91d61a8c2b5dc7f5d7ddfb86e2c17cb676dde48b0e0caf602d1793e550d9106721a14752edd80ff458e44683504b65623f1c57a0858b8cc225db49c2be814257be866a77d22d0a1aa1d61042b922aa38c95814181207af8f18ed52e49d18e435cf4b2b04c1a3dff2187a03c9078c75c07d58c3fb9cca40526e165753d3e7208abeb93100a183b701269ac52220d2eb83c1e60b520d1a68908e1e00184a361cddf29825735c15b9d133fcfe55ee3c3608fec894244c404ed3e2cdf43ae84d00b6d3b0ae65d9a10ee9a869576857117ed79dc7077941841ca2d1ebdcc19773f59dc9c875df006fddd1eba97765459bea7904ab0c59d42df786c33f5fb63ef1231b3caa21e8b9c74f12668408539f20a3759d3c4acded85090620922620c50fb1b7941c5b89ecf08c3380c2af3b4de9d153cf426adc74d27aaa51acd8071315c7fa39e7cbc98133bbbca02a1624363e9a9c0184138f515d72fabc551e73124b8f6b94d318b060d804353086e516446629d79dcbeeed6c6e187fca55a06da9f92e920ba7eb4672279027979cc41a5eaba48c0adfa3fead4c94c0e37305fcc066cff7072deb949d67871a3d3459366c533444b088d9cafd410f457078f62940db9823f12bc1a1cae211948a184f7457a70085f78e385a4293b197d72d1afb0fa0b19d2f6a1475e2de541fe60f4cdc05ef31da47b86ab5668ba13d82571a7a16fd43ed2bb28d19cba47b42b9e0f8755f73eec808cf14e34f7108bfd7c19dae3d3a769c4bcad4946f7cac866b54fd474d7a60d9a29ce1ede78d0da640324ca06d9e7131f97c90eeb4ad0f716433005ab84eae947de476da1426d9792471cf578c725d349c8e69308481ce8d0c45acb78635018101727eb2c08693c0eb47cddb83fe612d9bc90961c63e0e62cc51a665a1788129970d9f7dd2f36404fc7cee353b8aa6a560f51589622dfa760a21996cef5f5513a57c814432b674cbc1d8db6c9b5e542452da38b03f96b7542f7b2bd55a31a6c79588cd0fc817eaa0a1233c888ac29230d93f18df47c17081a42804a7c9389bcecdf92be47c5dee080424b892f2fd88535dee5d1e61f54b86d0f0cdea23ba5dafb79742cd36d2aa8d52a4f891ba585f1446adb073757c70ec1a9a2ea6520013f2b929bbd1debc43b6f46ba48dca1b3ffbfd45b9e86c9c083becf0cee43d52e6203d793df85c64e40b5041638e0a8e4f91e87e1f842c9e3bf9adb856acccf7fec0aa4d714b9812b315cfeedd9d62f8b85d701f8a4f9eca30b0c4bb6d04e739825a686effd17a0ed85bd939bbc1baa3a1e8fdf2a452aa6710e79bc1bcf6765e9b77dfa48e93eb9f7c66d7eba503fad533b8f8bd129439bf02279992eb8961af709e77b6c697d10ec7bc2fcc42690ad79657c7497f1d31182ff726f5a1c590742a57986e51e716a4e0e74ba43bfed2f1f14dd45e91f67cbbbfdfaab386b3ecf5f02aaa92d48ba0a6f06f913b37c73a6a6c2086c3f02600f0d9678d94435a5b79eba015ebfa89595f1eda6b59dfce2b8c315a444245b5a7fea518386080c3c64a4240414168eb271693b240c5db1a8b9d658278a138ac572f4c7911dfe4f416ae1e92965cc9b9f412767e7848d2b344e6332189a97012fac9f61381d918f731eea71f7d03c3f9a79cf0c77baa6da23cafc1bedf2296ef7715ca6cf115c4d40152046e5c00feb528fc2914b0b353ee5d4037e1e2d4514cb65bf10ec75c8f916d215e089c1923f45f7a48ed812a2c9f8de0be13fa874a309fe393816d7621385ca5dc73a617dabf345e76da55d9a2beb6d87eda8f0229a31af4d64b492b23d0b824a739e1c1ca1d8fefda6495865b51bf719ec1090e95ad0fd7e5f6c5433d6268e7e6e1b4e19c1658769d12a7faff6390f0464dd073365766d5e60a478516f55436c2f4893df8b2773be66df4fd37f911a0a0084cf9b5a80734020d39ba5791645963f9c79f84fad486defce457ab1d2ac8d179e567baa9da3c608902aaa73e8097f078d5cdebf5579fac47e0cf02d6c3af04280487ec60c83729050a1daf05903992fa1d8fd3abe9cd7ad64e2ee42dc49e5f9e0f1ff4d7b76b840ab9db17ed7c87700606afe525705a6d32973cfb2815dd0a6270f8791690219a1f77ab86ff2cc9b324f8f3c86ad58cafe224c1ecd29eb42efc8dda24233ca192ccac57a442884782dc5b25248201ac686e5c856230486bf3f5d08d9d08a2339599c0a51abe794906b7980ba376db01bf5fa64f034cf94980d4a0d88bcda91fcb0f1b5e907be516663c156eeb4d4ad5dd3b6ce9772d9a97fe21648497783bac5bb5254aad82b6f7cbf43b15a40f386eea8d151967db149e9465865968133f246e1347301adad2345d6572ca77c58c150dda09a87b5f4da36b266d1fa7a59ccd2bb2e7d97f8b2315431923530b762e126eacaf5e5ac02ff1aaef819efb373cf0bb196f0e829e8fe1a698b4790a2a05ad368a7102ad06a1cf7a452a9e0dd006d445d04595ce1a00e2ad688f0419e9fb2e8dfdb65e1b398a8403b2d0e68478e2c3f260d33609075d5e81131abce2bcf7dc9a8ce7384d62d4596cbddb3f0937b803ea507fbbdc6d8e9e4921bf690daae20186bf6a59ea896696deefb371441670dd5428b3eaee557aea2e18e5d242bca2e3781ea8899bb4288380cec044dc1cf3995871d68de8c60b8a5882f3c028f920ca9932098f08ed02677be46b807a52277f20b2506a71c928c5eee653fb676944001182f635d83bdc8cf6b91aecc5bef5d7d173884a3265b9e419cd6c4ba814f7cc0796d541b4a79e381ad33651666a45e8963de8f4d2a2a72f00bea67893031f75a3f70f7c433730b40fbc2877045e00fb9596d732fa88d8eecc416949cf3da5440f2c0dae2ef57a48fcfc572648a10c58f609bdca52203569a4de1d8705ca728170bd369f1ce9653b09192a26d93a5347e21b03858171a6e8b11e2afadcb36d74f133f116b61ad7d7609d0b3e6134bc1081560f2b308314b21a88f96afdff7d64b715a8dda490b9622610613885942efafa414a84065f651008a5f09f0fb68c9bedebc2ba8d53f42586f893daef64934e76641c57ac0c834aa3fb7860bbe1815fb93ea776196c6e68a6df0bed47acd2551c48ee6ec99254a81214fa77a98643f94394bed9f1e21173ae4c30383472d3541574268f06fac2717e78dcaa80b0bcb1b47871aabdbdc48dc7c86a855fc07e9688702e830b4bb4ef0ead88c2e864d3ce346f27b324056eff19da219a709dbb629ec56c127f8d1168eb3d64878bac709aea0349bacfc3f912cb0abd400e1272ff7efa4a030bc9c3253cb0dac00e8f7b5bffbb3d8866ff4c0b05e0a63fe1258bb652972e205606b16e2a8c50371c16dd5a9b1f6ce590bf4f35f1e5455f92e0eecf3f25822f094cc38bdd5b30b25b477cdfe4b83e98f50dead7b4a00068c94b83926f2badf9cba3e1c37ca4e1fa732c4131050d1c6b3ef00538799940212d6d33460a3117464514f35f30f0cbd70dcd149a24a76c24137188a166596e53674ee43537bf28de1ea6e1a720c65610d130de606a0c978c1b965b5aa367f0c61ff67fa51f5e4888ff6293e375aeea6f665f85ccfec6066bff6967ab594b3042fc6eeddfea95df0e904ef25b5630efba7562f326085d208967f292dcb08e948fa6bd142bbfed55367875e457ecd5cdbaa53f0eb6b2574cadf938c534cfb78674c6ebded0c6ed12c960dc521e5e24ec379f00c0c3223ef4a16043e9fcdf4e6dbb04013218291d7e8eef8d25f9d5a6b5f90aadf09780997f2b421be47d07dcb12a0706f7490d05024fce8f433079e18ec78f4c8678f5f1551448c9a0fc70e8b98a780217ac9c2e04d2a4ea960b715fe06ad6e769afa9cdde23195403c441faefa2fefd7989fe1feee01aa605d1e6a814ab86858384c3b581225ec4f71ca39aba3c420005285b602641d8cc77ccff429050472fbb3e6b31a9d7be21634bbe51821eeb12a3d0da7a16bd8564d642e5b7be21c3ecf927cbcabb0ce2742e9ab9a6b011a23c3bcba3f4241cc974097cbf8f05e89fc425850807208771c54251bd22aadd0f85b55fdf56ba254e06f8c2b650cc6b86bf28a14d714011141a86b8f14bd94ad9f5f9d5b6293fa1b9218b5cf2847d731ee6e8c3c08e8371737de2167eaca520a994f0754ff31b59b5ceaa919ab27fc80f404e3389e9527135f53eb58bca7726266b8086d33fb512e8143daad7633a3202d54238d10713d7028a82db412fb525f981925269927797fafb2cefd01e16799faead1bc072306c844597d1c862c9e6c9de0f1f3a76c8af948b5fa8ae6b7b648dd275257db10ff8602d63df47eb192e3f8bdd366e7210215ecdbe1d98d2d1bd7549849b314c1a43414bcf4ce6530fc8038fe6df2c0fb8b6ffc83296b7dc804afe1cc0c803cbb714cda5c362cf20117bbcf210619cd326362084a15a3210f0d4d15213f31cb75034ac46286727dd890e12bd4506e748c369680af5b232f7892295f36463a3984c6c8733e4a4190fde4aaff76c1435f6f716806114e6df17b4fef3089a61c1f413820675e161ca4078f738a86dd4ad642b070f91e83e60fbd72e93989f359e550d3ed01505e665f7bfdd58d8308e781ac502bea35701de285c7b1cab5a276142a26a8e1b3a7a10bd1bc3b5909c8abda02fd0359e4b798028a9ad3749b37f33443acce78d6766f319 +MD = 06466ad3a6979c31bae14d0463f38a3b0f8e2cbfdaa00ae6b3f8ec444e60163c + +Len = 87672 +Msg = d5a04a5a700d8a4ad4847bb3272219b1e4094d99db55128c7a52d84c4aec254fbc668212264f95b009b28bb3958eb92a6f8582fcb1d87b7b3393cd3c0905db274c7325ca1e0e6cf2e821187de68fd66ae67d85324c4c535b5aca234aaea933590c30fb295e30583af93ae9b8220fb998d1581fe4b597e353775ea21d43bf740d8503cbd8f09e9fadc563c80d52f5abddb97e18baf2a3738c13b7125ecf2ee76d3d555f7edb418975d3057b247d29f2612457385b0d564b2eb53d3bb45be0d49ebe8f7dc4280060baab89cba4ab92d64b9d4b47700d9ab260e658e5c8eebc83cb9017ee52dec26aa3d6558036e41aa1c3a9c20ca0fb56f24a2d70d74290aa3b1a39577acf0571f159dbd3628131a899f3d2245094de72511512eddac9499245b343b5e8e4a6f43b04426a382e992508019fd9dbf3bed518e91d37b605225ce9bf369b0238c83390ca9481cce42577341598497566a4698eedd7b6339f22f16f6698708e7473163ad65882e44cdc87665846dce6959615fd4ac7d2183f52371fcff39c553faf85804e16d4490dc63de5f130fbf5279fc1ab2776f42f8cb8174123ce871f428568a95b57dfc3d0eb81fb09df0c6cc5c455e1ad6a823e2f5e791c89b299b424fca7fe24a10b1a3d543ceec8d97911160fbae7042de60ecf4c46f92a263adb8e1d2ac7d27fc015fb08540755a8a8adc387d60553478667158964202eb2d25e28efd94c8c76667db30fb38ed9d3030773349283c23ecc11a91dbdd9bcdec903997a9dd47b10651a0c723fcb7be3f0e9cf1fd7a87b9c1fd33210386cfc3387938ac65ca8c6d425b4af38e205645fd9197e4f8bbea3e8e676596abc20173874d5a2dc0011974a0f1343698386bbcf256029cc970b65ab8bc3c534333f3576f8938ac36f5513fb89fe710e0a94a9bc3c86789fe4d8e76c757f1e76840f7d737c93e98393bc646efc3fe12d5e7856ad865312cf596c51b30c750e3697d918b9669e68255290b22bd19c3ad1697ae92a6b8fa064dd11cc09b86c3b7e54e42ed0207cafaf961724bb6ede25ff12e18bbb5301c9675a0d80f4e12b4d55a37ae63e10f5652c469be3a53dcd49c141f763e9a67236dfb7a994feef7bedc46ce1688da0d132a14a621671a4304f1ede029a3bccaa8fd4dc2d30af4a24c3d19762dd4437d7c0188ab4e6a80dd0de1fd24b573a2d717b4fb1e17e8e5aee76870c456dec3cd0b498eddb7bd1df769fca031ac36c318fa2561d0ca32388a1afebb3d23f0c1985b92a5d1efc7482e839295ab7065b41cbadf40bf8caf63a04150774517c2c35bb75d5c2c4921a5eef5544bf69478fc3ee442e60eb1990d9e051e238094bd5f83d90a10216644adb529b211b79ae8f21c00e0e052eb878cefd0a84e543d58dcad2b396065c9b8c61dbb2ca542f64e3c109b49be209d0368023e9f6654741df134186bdb6de5e685850434754d391130d91dddddfc38953561a953f9e5db8503b53b01dfae3d667287af59e01ad5ca76b2032dde5a60a56baa9b7677acd626aaad0dabebbb52a10392171d94505ee28457d5ba2daf87cc7139af777e0de66b4c980aba9df9a83ebf30d5f0007226f1e0271ff34a802062fc8b3fc76b7d9edb6fe2acce550db0981bf0565192f4d060f0ac4c69c350cd11443bd6f6ce9061ef9b298e47af4bfe35903d22e2ea4cedb85c53e5ae16b5e0501eb7ff7615dad22044e909c71b5903afc283c604650ed17079ba6600b303fc97b28c33d5efb16205f38db9cd17a9435f0970ba46a1af2e21ef4c683236ef9450c624fe96aab894193da418ba22a15fdbfb707a1a1ea246350386469300cd2a23b01eca28e554dad279b8911edaf59b9f0eff800f3a8ccc328cf49ba3af21308906d6210d1e1ab8ba3e27dd7b9f0a9920ca9a568683c32292b213d1f4a08039e940f79dc3b37eb039019e3850ed54cb09a4cd782098f9ebee396083f6636ec8dce4df9aed440553f75a784c3f4468c3a224056f6dd8758aad79771c4996414fcc790a92da5e23064daf42837742baf592decea6bec0da7148f8a4153e87ac41405415202b506c69d4768968c956cfe3442ba5b893f0ad52494d940975d6044fd12c6bcd50c955d10456b986860f2c1f4e91170f9dd6428046dea3635fffedcde7689af4db3753ee55b65f474dba340c0aa59f263ce05e9d9a227ebd8d63cd4dfb7f0f312b190b14512be73571068c2c10efbaa6e1bd35fcebcf72726eb03732a5f654fcd0eccfd58f1deddb9072a911e9c5d5dc3cbb8d40842c1b1c7453903e4f64f8d26d3136c45802dfa44c7cff300dde8d60ae69b8eb2bcef5264ecc8ca38021673c4074c44354714929e5840318f5704dcea7563d6f2b2e8d2a5e996114c0d21ca50b25fce4fcff96c6fc26692f2941a360b7ffaf4f0ad14f931438d1f489eda5971dc3352bc9f4551600d2860521c90ad160c4730d635db8eb102943e553ea8ead08eb218a33f610918426de1d675d009b32532d2c9d0a55bcc2f92b49b73f34314d0c3672d38b35c40691f5fa729401289d0a321f308da262bd171ca41c8242de6a84e898111a51280882520ecc04a8f411782667c64e2b875f018c86fc2a170ee203cc4c9529ef27fa9676dcec0554a8202b7ea8c6c25d953946ff64febd3d4d33f73612a8406c5e6d3cd8d75b3c809f5982bf249a90c506dc65e9b06ca22213e0ddca7ce2e44535c0f3fca08200d9542e1c4c9dea2fde76a8dcd01bfe7f71ed6935fe0ddd8c2648a64a56ab0908bb610e56bb671df6164f3f2a46ea0cbb89444d8e5527e0ae7c018dae7b6948aaa3307ad09002be9a190affccb2bd1fdcf4c2fe45447da4d1b2ead79edf6dd96d2d6d04084f03347233347b32a807b05a20b40c096051928c678f14a9f72b23c6b6513a6c6ceb2815115621faab4c66c9b9c1f7391d4622450648e54e6713c05dda977e8b5e2cf2092fda9493111d9b920c673052ffeddc722bb299fa83da278916aa50d3b73b3ab4db5c338a8dddd749b50e47f56cab49ca2446d34cf1c0d1eed70451d3fca85aaec035af4f861f92673031ce8f07f0c2839c9ff1a4157a57d5a82fe21a8306ea6d6b0138607e5565610a7c048e46610f54f108a59e835911f416a781f60eb9626738498f5bfb11b8cda047ba81ac7e58a4de3b4faaa00fa8c08ee5c224e4324b22b469149070c715039e1f20f7aeab66f9908250471fe074a19d7522f5a8240d266c0a58bc640802b9507d085ec16a92d9d47867f2479e1e3daec01506cee140f8cb87dc2e6936fa4563fbb125894e64bc06a7f74abb7afdfb5f7128c6cd1c5f005f7c1f64e4e6744e44f5bbfa6ad96516937b7eaee019ac411be2cec42717efe3945182fe6b88f91a7ff5a93bea6e1c70278d7e9d49eca1c550bf876d71765bf91692a76961b101508195d9788caee36f2f3867947d8666eeba41e34110aa2bd732da0d246bd11586d630fd1ed60e626a1716da32ff597433a51452ed9945e804857224cdee8bbe13fa7154bd3aff01d77b9346e723e8422aadc156b18fbc18e79b057eb46e23638e7ab1a0d240035a5dc9582e3f9fb5693a30b38f3b488f2716c00e8b767f3a9e5cb38c41dc69bdd4538cbff08ac74341e8da853ce97831ab18b0f7cb827653c705515bb85a3c80f86f32454e773f0474cd0791105a73460d43da4bcf76f7e1962ec0ca84da1cff3ee7568298837b9b6a4d447179ecee2ed64e989507b28886543f7e3337baaf7b207265f25f1de15aaaf02d910a4f2d7e8e9f984df4c38c94b99e0630319a58a74596fd0f12c524d4bf3c0f9a21cfd597ae9d45e1173898af1ee0e54c12e79ce606ab685354179a8c0fa776d7510d6b1cbeee2df90f701127fc9e97e14c3100c9fc5644498363d70324c90fe32876527027f8bce01e08aab1eb3d9a8a5df518b58efe2d6c21585ebc86f7174818a9202482537f40f370b9bf633469c1c8a2495b47197035ce63863abed84970920458cc4664e1a60036b2b2ed1982020cc7170dbd4ea920eaf401e024e302f7351660b9fcd38069c4c94a3ee1537fd59ae2065f4a0454d7f7a8465f618dc036625ddc800df5d816c1a6d4b60888cfb70371abc285b0ffa584eec7fafd5f2dc8ba5920b102626527876de6aa9b1fde10d7045bd9e8faf62403460b6540cd9828ad86e1cf629f9436767cf4af418f379d75f8ab07fc38f4de032c8500e46f9bd0ac75742db703f1ae1f628316746d789770ed2dcf2801683e0530c96040aba55b37836c6e78461a0902ad1682ac20fda9485038a204daccbe79c15d05fe084112ff5f4f041ecc59d190bb33766140534d7cb060230b2b9ee9d17c9464650bfba234677081230d5d927a1b4e543c51f5ee8e7c48c4b37a5b5abcb113fe2e3d3183a71a95681d9f81b60f5bdbce85cc7226ee424709965d9e5b9c0d6055a2028f31a807122b76e952c6c0eb7027e61644612c70df541c3bb496efffeded79026136b7ab6b3dc7716d5f4f488002c5d5d937b9a69646cdab4a8738f721381b93640d6686252177ce2dca0b01afe1bd71cd151651f0541302dc96f781beb7f25be4102515c479006610917495344725708c83e2e1720e94f8c750bc3e0b0fa5c28df993d8cda709cfb2602c71d195a65893fe8ff39fd8bbf3a74ef77a8a819e4dae24035da53dfc718f908335fc7fb8a0700f7df6de45006a08ec29c5d1d05473e12a13f2ef9040e204cd29401947c4dead114d79b1c60ae258b2d3be655e50dba366466701508f97be507f2eac906379b7be7edabeee23f3032d75a2b99e2bcb81831af88ef1210918c505504adc0cf80c6172b85a2fe3f2b4c6904143024de9f7eae245ecf4bdccb0b55c6368ad39d02794d991180de387da18a3e8964d2fad73186ccdbfddbe48f29bd4c68a66629895e303e38cfa7b18ef9e312727b1599c8f95fafe5c0e9b046ad31f0824ba2fc7e3b6922e0d98433c61c1b87b7be1442da9de2d665629dc9596058b96dbfaf9d47d99f4df2e49b458dd2dba54075f87d75e7b648442920b62e0adbaf0f4ab4944e007bc85739146f4be2cb75f5e8e8d2019d830d685e9aff2f7361da5136d96afa77a49af5201839681592febf5e0dcae688f32ebb48322dc36293431bc948a6b208c3cbb6e0cf2c4c33d94984218eec8c70acb2243111c751a019f1564d26d0e079806481c360cf5f04475c2e7794c15b1d56a18a5f5f5543f69aece8089e70eb93826b3d0ff3aa0a4f8541a3a947d0bc569a04d71b43600029be3dbb43d50f3b1e72ebd40db246b3de3a00cdfecea115e420e2f2ade56ff0042eebb645f63438e2f7e92d05c32ac4770f9f92c052bccf908f43c35d6e0a7b4e92fec05827684aa7ba6f303f4edea3e3ac28dc35faaa53208f2f327306b909ce917fc3c29032d9346384c5027cebbaeab8a292a7eff2085ccaaf2736d405024dd475a6cc5b1a4d529931d49874d86f53dc169c5c581c550ee5ca8aef0175ce9303e851beada80ec9047d45475f2d2ce8bf8be29d5eb0a4fc8b8943e7b492d568c5e0abe0b16584614d7000586573586f0a094bb129375cef62f23a6316e28094c2669e798cd817e11c12ee13ad315ab16499c1e2e039e4af121058ae4fef35dea38112d3698a3013186cf5bf60ef9c7676412c76ac3ca60444e8830f86415d10103aed346e0135bdea85fea5a5368585e70b72b6b4ca09b6a084a4cde45e61f0b09818e5c3c790a83a65f20ea58c7da860ff7cea216a758ccdeba43190d0a7472ca37b2e9164a79caf15b740887ceca58924325a1aa5525074256983b21f99dc2b63fe56005ee461f19c3784758b3a4509827c4dc80109c83c3bdd0b74d19e7956e18aa7373faebea90258219443d0508921430d520800bdce34e710fc701de4552405675f8e6c7c7f5004610e2b148eb00a6de0e142a0f6d1186edc728480e6cf3459df9fd488631a8d228a0bcb6fc72744e40f9d36513deeef5cb5ff932e476d1a6c572098693b23c19ae5b2ac4ac295d78ee1ad6c7c58cdc298e4cb278fcfd6dd2817096277cc41f454ba2c550b48a3cc55a03a6c871015980ab0fdc70b46b285736683bb1ade1d2f3751a14e1c21f92a20926bbfdc2d6e7a9a63bdfc0a73ab1b378eb629ba385e792df13820e3153ef9d60169ece177826f3044354cf41f67a55bd5c936bfa3addb1ee31952caec1a4161335b7b00b6f67fb49a8a4231128e2ec784e56a91e7b25cf0706d6c376d370ba8716af4a0b175b20eaee7632914c9bb63e2314c98cc14048cde5cf794613a5e9302bee02831a51126c8723945edc0561739d6643d1a7cdbda750d7a4890ce430a307ec702fe2ea3e42f534beb641a06cbcffb3ae69891eac27fa97dbbc299c1f541d32f95e0b971312db32184437fd467eec957fd0ffc382d42578855bf43e03c7ee4a2499fee81f308ba44795099c6d3dc6842e84764cd010740247e4e75a8c82fdaa7860274dd14098f3b30540de7f7e1ff83110872b228168bd89e39d7227f9cdcc7b4d2f48d7a785b8e1316863cbb47b6a3de1aceee88b7612d1d4610554a0c13883bd715970f9d45c68960aacf0854b629b9441f890b32eaaa633ec94a12c9a67584d98005b9bf766af9f821a7c452279d094f0d8c98ce4dd7d8e8a907bd19be13f5a0dcdf62281502cda794ccd9873188350442fe16d5b33ce50e5996344583ecf7f3d22bf11e4b166c35ab472d3cfa70a72863e76f8d4362f07680ff60941c87f39c0af34eea402f3e6a0d1faab8ade0c6861b508a3f26d063e9c7482850b26c4f612b3e61d41bd4ab0e635c3745705dfae50f404f32830ea42fd67b73bf6c24750bde151223058e1be85407bb296b71ab0ceabfa6b083a51d10549f2b2b7336cb62ca7f492125e4f6c1892620adc8a341c452d577ff4e1c3454e9bd37daee2abb2d9884ee14a45ea461a9c44d19ac7b24d5ef8baa680bfb53c23edc7f150689ab36ef2ce945a9848d905de62ab54182bd076be82733e3cbe124fb04eb23e3d90543788022fc5ddf1a164d969fc8af3f72226bf4d6a8fd124640c83d634eaca5301dda878181e7f6b1ba20db949c1e3baced9ab8a00f825be9de4b90cfdc8a72948cbe49ef1b7051bc457fbef177b5fcd4319d3b6baf992b34c82f041716a4ca9957cccf52132079a18011459ea29c0c50b61f8621d16b0c8ec51aa223442334a748ab2094b11ef5ca307f7a8365fcf38a44c69fa8bd1f855f9cb571dbae2e39262504449b3d934d9d2070658907fd37e8a33a90eabbde1f1016a779289bee5f7eb77e4451ffa60a84178d0d96d2c662d49a2461cd13d06007fb98c2f0558a3117c6c2279c3f80b3e6dc7e7a930c80fcb5f32c183b0c1cd2ad1332551d222b345a1a77f5664448d02a38eab469fe528bf374f9bf1befebfd6a251a39954bf9f2ad7a46b7965727eabaf379c4fef06599f6e6345d54046468a7fbfb7642171bf279afd77414c04588fdd5d4b13c2ae0ad251084fbd093b09bca5b7b150ad0babc2782d134c8c7c9325ba6a3830af3ec50eabc92a076e4f61e3d0e421dd7bcfdd91db8ddff9ab4dc703c2d8d424f95b108acb006542e3f5f7a66dcf99690250dd0c51ca2de72cea5cb08333bf7f5565660d4b5871fe0eb1336af8c48881d5111298675c9d8385e4dca278055aae37f04ddc893bd0a743139da7fe8d6fc6689326dc78af9f6d4acfbf602dc82610157e209f112511cd359f9ee3db64cf952149823f224db3f2e00d8d5ff0f6a263728196bb7faeb5ee3ab7cfb53bf5188cb3c6ad36e0b16bb2ea20cf187e0b6006d38d08b831232d68d6eea8928cb8eb0b947d105a3075372bdd9bed203180ef88bd130f2bb23cf8ebaec6b1e24a2ab79027ef442f9e03a6dc1ef16fed97f191479396127c9f5698e506b2544af0b4feb8f29fc11d85d72b3232a3dff73dd805e1fb88ab21350a9dc3934438231cf220f489010fba848a44cccd35b5d37faeade6698d31c03fc37825b8feb6012b6ceec15fa5987d1677741a331979e8f9e009b341f65ecffc0ba88a0c34667ba88f88adfb1fe3dbb8394998f8e1a4ce2906a9d739768aa7166dbf4ee1a7b1e920d4af28cfb28a5ce63a25c7a300cee9799cfec094603dfc0b441d02fdab20e000d6c2b0621ff4873d14a924b60940d1881d891e0755f12547394244a4c15bd6d4f063d336aaaad10933444ea66da30cc102c93de6ba4cb956a7ef627b8c9b5429cbf31fd20525c0f72077a3e8a07df1b0d74faed72f992eb63a550ae66f97ee5bc3f0e4b891eded6366c3a311443a36d4257cef4d086f0be24b139c79dcb9ec0772fdc04ef37bacfa70a8eaa4bb5022a757e18dace746c76774bba5aa7679f399537a41298c478608c8a7d92798686ba6f90e089b4eb8f7b221bd94fcaf609baddfe6d5ccdeea1f3af930fcfe4ddb786f8362ce8ca12df35edc8a08e4fa062aa182d3fcad5ddbcefd6ce4d4ad4e31cf4d81806df5712e60da2fb17ff7e8c34710e6b2244fab851bccae23eeb93c03d6dd6dd7556a5132c69075b458b9ee3067787611fb282a8e8c25378eb9b689ba25abb2d8235fa3c38b2e6913218f9cc61234bb73dfcb6d40a6838385a409a9cd4214fb233649fb592510544e68fd570ccdf2114850bde653e1843c995c372ed5a2c5a1192ccdca7c2ac2c1d6ad97bf7cf13d320fdc542820d3a3ad4a40d38b3bce1a4f5a753f83a502d25c3c5dc3388f2252784af132954fe34e6008d05341983aaf40479e23d95c53bb7e0ff82444bbe7ee6e8a3dedd02996f0ff65a92ad4436ee14e61062f1e1a93da91921b2f869ba86d8f3e00ca4b566537d5e139eed5f5d14ca4474b95d45829dc4183154950a6fa5c44e6e86c795ee49f7dfbe103a908086dfc6aed1c9eadac2d0853a4f6455634473a155358dc9b8b7472165d0ddff28ab1b13c4907df738149507418dad7320c9ae939d00407a4c0633cd0fc51ed6dceb45d4c1e0c09525fbda4750f5b88c2e9e3bcc4fce26cf339f848bc5d9443a25ae27b0aaa8dcec28df69ed6e6fccc71329e2f5738989f1f4e801028ef399558a5c875089d01723c92808a0a4e3324c59d46db60f18af07174b74db72fb634f935d2e5b653fba63903e8008f93933448706a2b62d63e13a252fa3bd79daeb50c81ae47a47df0cd3068a98ce755915d726264b9ed45266b2a5fc5851ac76797fb2f970553697579cb2721a9a202c202cbd9e2e150dcd88961f19593f12b85404d8639c933a4fe1e51c5fcc1303989e6cd4d514c4dfbc8d0e1bf06e2eb388c608c2c12edd5beff4d7cdba78e22586d5bef433c4525207be4422e861c698cf15b3f979efdaa260d69a4ce9e4af8edf0e4ba32008686e96635dbb69f9b0c8738a2c04f5a7331688cf552156d9214789913a6c04a6ae3c51c4846fdbfd944b5e6d9c6b9b1e8fc0502930d5671ee0576ea6b4d44767cbc32128dfc5a736192a76062ab7d51b97a6a02a54ef867d95c67595e1655113680becd99645336ce86ca59cff6f0a68f3d2611ce9f71abce89d85a5e8a68b722c1d9c1dd277e866a919d279421ba1cb4a4c794516768ba480e38820f21f5b4bc000173dbbe42eee033ae5e31c44040d441ad2ee04f340fd06a0654c26592a68cbbc478078136eca9ed6c523b5719af68a46535edbf6a38f21dc0472addb618ff65a1230328c0ec323f55c81342acb4dc4d8e3dfc2071b217aa04dd9ae2d6689e9e1629310d878a13a9f9144c1f7ffdc9ad66cb7e1af107db8f328cb52d8a31e4b591ef33b7e122c8add4cb686619e69b24ad52f6175ea6984de7d8ec1637e15c5cb2e96da06462cbcb6751da8ef10bdb73b068f6ae212ae8668346b22566138fe3e7ac516f97b687733f5c2522abea04fb2e61f237dee14659935aa9d3ab34d9fbae9c717de18a9645bb2edaa980ed922b65f27b5cee762ca7968935c96dc1d4f4765e6043d87b72b3695e6d8c36932d94f58ee485d66625c11b56e84f24470b7eed668059f2f5a73cc86f4053338711c85babd02b3d1dac468058240d6530e7eb62296448a785ae4266e60596ee15f92616bdc0e579193a9863e18b6cb71be4da832b8e689ca7e274b3373fbfecec4e4ea549392d10f55b4744a780e580649cccaee1616218d8fe443bf72146b6568ba295d2ab7aab2e78d390fea71067a78a2263ef7fadc2956c217f8a8cb3b1012ba246fe8a469e113dbdd77b6075c351178c40ba5ba4107986acec85c49f8368c8fe570168296069f46696923f7e29fdcf5aa3b667fd88d20847016d5b5293e9cdf744afc78b9885478e4cc7a6a2020a3c2e2b883712a24b5b706c95c3857920b53d7e3e2af5bcffa16568a04879f212c86746844b7be341eab96cb39fa0999a0921825104e034359cbc88a0677e60840ea6635f07a1c2624092b03b422c7bb25453ff6cd7e3a4c383c40b4cb617d3fa796c206d1e1cd608f79ca5915d91a6060135240636787526114c9f09a6eed2c293190c22d15584c27a27db5a34688f01ba55bea183072bd9af96826bac5bd398e63d6534d3d4551b32d4bffa7929bd31ca261dc350283f5ac94273e749075cd9dd69ea079821dd6fdc13d1f69e4db722cb36dfe010443625f8c0d2010f49e4f1f2fef91f80c6745cb0759fe3165cf3312808638c65f396c7a8922b5d61bbf29dd19d20e1402ab05e6a7a982473cff7f98b0b472ca3aee7cc7356fe30d2d60c29c3a4dff138c727e16483594f293f3bf84ebff9457bee8f80c35fb93ff510982273a6b4c3ed442182292031d7c8f34599fdb7086b312b14a1234cfaef2b043d145c231deddffa63bd42f1e032b5a49b7b1260e302660d1d8a1d8f11a2f729517bd7aa99b3838234ff2c48b30481cba3f8274e27afacdce0c81c96bc1febe88bc5809da6c96a543bc45fc538a1afc105bd96ef24d7583324d79b04589a6bca328de18cc39416e8dea957c7ffbeb23d2727fbb488fe1aa84025235855c71966ec4174e88eb7fbc8942aaef176a01b988eb3d04ec2a84694d95d4ff3521a57171f6ca54156899b7c02a4bfb21bea6e5ba30d9f1e404a7e9146dc7b75cc08b783527c1d17b9ad786b90b4248a7e11fcff1a81b293a07915261f2f30403206bd041c0c26ec3688052fc4e557fb0bab7a0b4bbcd55f61a8ccbbd8c208f312b8da41d2796d3f4b9de4212594d484531b5808cd1b51c1e24de7caea31500eec8381a52c605a71677377f8296f14a6d2e609600529d27bc0fd08ebe9f9bfe42dfb65a6704d6923289d430d46b0b2e3099020b98a64b1ed7c2aa2975e87a3136594d8de448d33e4ed7fd7e9142619b965ae106dc3687a77825b4745ae67a42d11c46db52fcc2507549f9914082bd3aa85a45b055681b6da6203698f50262d91c11e96b37876c73acc712906993e5b36d7f78318aa5cd16699b77bdcea2fc9d1d207d661e51994dfd398ea395dda1adedb2c1b00356674bc97ec0096e300e37de324cf38cc210866f87b6f44ac8bbd131dc675549e1afb3cfb159a75c12614e672d9c3b0b429bc70a99d2a813bcf9c640e3b34ae3b06ef7821c8abd20b2bd8bbefbb666223900b8d7572aea7521253423b1edb459296bbeeba89b744376ea96ed82e29b5a0f0800ddaa05e0fa5f05c5e02c5dbe34b670b1103bd3f34cc8af16fcac6702392c7b472578adb229de621f813e4a8dfbbe4378fbbe7b63c30fd5b4f15f8fc449f82137b5ab68898a0603ea0dcefe4c36a9adbab41adbeb30b22517d685a00912dcc27697297f8da640b2cf8dc3bf216ede761f41353bb41c1b64e7b205e3f81b3e25acd3dc3ae504f235750807d63429c76651acf9e3e50fb15dce8ec7a0baec8713826faae0ba2d86558686818baef2cb45f5fd4d1aa78fdcd77271b31f760d20549f757dbb33a762daa7101925b74e52dab63a182a222604997b63b1a755076fb0adec3c1179fcf08c82acb7ee76c7c4ee396d44597d5b916c926da9817f60deef51ddcf2bb3b39633bf65432c14e48a49299db8f0e1b6eb185f9583f61ba3d4d8354f1d510a55be960640a528b92d0ab32cd35c3675c07b6589e5274c5255b934014a10caa669cf7efd47c62a8b2badf4ea1618756200a71bb9657dcb4b00f4cb5dd78fe0ae7731b34f818c79b565dbd30d6ed4f3cfffd801961c6ebd2f2bef65effc83d94a084bfda2f6e05f5d64fd1a3ae378fae54377e0c912e068255f11ca62c3d2fea4a387249fafab22acae798f1b7eecd0cb56ea80f94fbc165623c2c15c346597e1d04cefedb3d30bc9cdb9fb584618bdaac09ba9cfdceb0de9ff6a14855624ec2c170327340a4262dc4923259944e50baa07f023f2c05495077b71898731f744ab0112941ebdde6f0fa821d7857e3900f2b553b50c03def8d82040e907cdc7e98615e2fe51d3917988741ad7c4fefee6ab512b29c2ae737c83753dfbb0337a21e6dbdb2d755441ca6f3476eeffcc1a03fc64e045bec7fa6b3103d189276afa35f3dc65e93349d8a8ed719ce4deee77a00e75dad2a8595a0b09506459177a2d6dd49fe9f933b93d5c2ab2f681086efb04090c809727697da534e65f35266cfd10b2adcd261cac582e4d7feb8d2653907914b23c5ee4014a80d94d28e3fc475168b48c7b38962a11657e60e3cfdfa61d4557ed75ed8728a9e6210b292b421310bb03c659f74b3c504be7de4610dc6e89b1fb48940db7e7821d34aac9d7a0d82452c6e3d12ae0e9fd26ad807d18c4b3be052848ff861c45bd6e39b26fadbd9f747526694a9b003a003ffbcfeeaf407ea38905771f205f4a432158a98577426fe86b4be22c10513541def752029df8d62085bb5c5ca328fefa7ebb1972fbd651687e5cd5de527be4a94bc99121a993c31d40717f1fd61e6acbcd87899e02224cdcf481cbca29274f1ecd9a14b49dba4d82035069ce82ea959e55e7827153ce682c16e44b575cfd7d89ad9264213f147d371680a1d36f34875c5f018b53b881ad412caaddedb5a476d334d808d2584a5a25c128af9465a349eb33fd2cacf7e324017efe09f4fac542e2a795882daf03ec324c711c7b2cdfe2351904ede4d99dd455530658d4f407eaa051f06d9c0ee83c47fe826fee8b915a21593e57632657c625f5ea51f66b1375f479123d863ba0514d208430574c61ba963ad2f191a6b8005aaad37dc02790ebc566228353ffd4342afa9ee81d35f6097e05e843d720698cdabbe9629bef2754fd6149c46a222cebc8d4f91ea80ff94fc003aad69b5e12728f70538af08c80b983b2af8a356c4f800df6bc5a60a1119444793e3146265ab860103a7d25c742213fa17b5c1ba5e6fae3a71024adb5e7e1f2b2ccdd4141e96834e5c5c1a46615951976d6c38494986231311d05f711223db2f57d60f3776889f5351de0d331a31cf978e746d8020ebfdfda0a84a67e6bb16c897844c38f7f248a4969621cf291bec7f0d76d80b7f019d4eb002a22c46a4408b7e6101b53d540db69d2cde66f8a836b26cdc0e27be579faab267dd3abc6fe6ec7ef4d628913e5d0dc80ab98713474cd62f2c8671695e63864a50722fb28e78601ba82fffae01b51ec9a839cc03798d6ec6d0c774fa968765ca450757b370839ac70375c6ee5eb46df48de59243cf86c0b67147befc9079cdd4cde35f49c686d1238f5e0adca5c97feb4433765eb9a78090869d9bf9ccc932dc43bcb2ffe0f0b793b42f37e36772c91033a9e4aeb88e32c7792fb84cbbe419435ef9df10606fc2aa1a9fdaad143ede0604bf69de5ca93bddd174709fde58f5cc78015055c54266d91af66fa44c8c332f1ffa7248066720361812715db4a65cba1789a32a701738a33de9733370e94d1dedd19a8656667482c57026f0df4ac2bec5f933f8f16cac8b0bdf620511e4a03506eb5f03bd159d2652140e03aeb4ac2cfbb6af5be9a127030d4ec883bffcb116f38e1c6abb032eb356848300a3829d97316861cd99535cadaace2329db9014362c506f05d0ad9d9c4b2842727e22fb700f74f7c8b101a1ed7cc3ee71d55d2e0529d8d37f8e736e4398a5b8c36f146a69de72ddc7911a9b44fbc696f66da28326646dc6325503156bd753529e26e55ec726d88054ea3cad36905cc921e50ea7fc74a5d3c8b4bb27577fd7ac4d06044d2a811c8c0b0cb65c54d2ece18eebf00109c317789d3e3a18b90a99326abcffba0675b55d3489362d024bfd6c87d30512d0e819114a41de6de2f01e61719c4619ed6d49806bd02a93d16414e6b74aac71d45c415a3a70369b67d8edc5fc24560141e03f723b72023544a3b9dc97a36492a68816aff839c135da2d7dec5505ddf496670dbf0e0f6b65ce9352baa38dbc09a9f41f8f0e1f0ca1ac56552126811c786d7a4ad37dd8b4b9f1ab760d655a112b6148b273e690877340ebea10eb46bfe139926d3be59e8cb63064aa4147a9028c6ece75fb0c2eb03f4a66c3481dc726d38d37eb74efa131cf1d4755f2e4fb1ea1252dd080f95a154a2b5f77233882efc3dae35bfae68162891adc1f9ea7b0b40e16cf68a238933548662e5c2ec5fa8946951d255a84cf9d58ab9b5da11a7a6137d62b94db447a8e9e7d6c08e7309e71b05e4dde0024ec20d261fd96a6b7a8b492c5dafba8a7608fd0f390f3d912ff37b5991dfc885157bb7ab08b512bf9dc1cc37855e376cbf5c7744b25b370e79d59aad7e5f74f94a2bbb629bd238d7b75082e601502d24caab3fcf692be3b28e946249d3e54e2694db019301b7467971415580fa0d05783efd3df88707ab441738b974b9f9bdd39c92708661eca26e739b2c4f971b2531c45a59063477f68ebbca8978582429ca0a58f282e4fab67d6466ee990104f71703cb7b4397042d562351b99bd7edfad185356ed1b268e870edab85a75f50e1f1a4578bf5d935b665f6d531265edd99b1b532cdb9f2bea20eb571d8c1da854d894e0771652193fa83dd5fd961177a6c324356f583cd854b1e65c0cf2e9a2da2a5aae215db98a5617780f59993284fdc1bd7aacf766a444a69a4a05238c6cf480e5ff05f9e66f3540b86a25905b9e15236183443dcf28309b71b1a492586f4a78c163938f8b2053905986b0100f3ba3449affe3afb8ccaefcf71359c3e042327e677c6862fa464792e5d5a79cafd61eb1d43109a1d61a2647b4ffa34cb65e430e6299e338c66977d4e7e76a9ab005ee07a7d704d889892d0815d6ff714d4bf2a52d5c925571d26ac2da2c779ed243a7a27052839845a239caa429ece60773d7df3225046d8f49a6d927256d2d7907c20ee8240485bcfdb2ebea78fa1f976e59191b93a7c5711792a47952a9ab06dac3c959dbe61531e45ef8533495925fa40cef4418fb11b9c4e4a12b44bbbc1e25235e5fdac6bb670e647c78fd4dc2d2bd49de36357cc6dbe9e35bc77c21b5218f773a64a1150caec489f4b62381459302c6427c79bb5959ef3520d8596a4aa37225ea02ef6f7d8bbf25dda557de8f032cd8c88146354db +MD = 0c91cc284724e821470065c00d8e2782649e861733b30f15e6c665c4efb2a6a0 + +Len = 88768 +Msg = 2eae7cd46fe32e0f1243753dbbebcf7870df0003b59e5780f5f934632424c7a6a30e1abf64ee52cf4e1e321ce32de0c12030eca4a4588ea915ca2f25c0aa2b967f79d691e0a2bdfb834f2e7cc481fa319a6079a1bfd0cff312446e5e39d7dce08a99b7332c26f6fd797e7147a710a430a818afe24e2ba2c6b310f8f4d8d261ee8c13c58d90a3853bf8520463d40266261000975099948f8ac1d6d5d1e5c442264d9208875341f31fc873eeba937ec87b9bbf38d1e8311fa7053d0edba8d408f294bc890abf27c60fb08a37322cac539711fe9b4e822ad98544eeaafc682b3ab92b394ffc1a7e89757a3fe8b5e6b58ee33a64c6b0b0a8468c4991b11b6ff060e2d8b26247ad6dc1b8ec39072a0bc101c5de9ac3ddbad3ec25dbcd2c1f034c03d764cfcbd1c01df840cf219f78e1f735a6c4479abfe8d255b6c14a22f26d67aaff973791849bb6b575ea9eb589b180b1efb514513d81ce09a9c4b19b7bf568ddc23893bc46855f81bf07595344c284fd0679a8f23ecfee8e64acaa9fa2e2782488118a5501c840e386ecf980915e2aa255d8ad84ac185b6e5141dc374f7ebe08b9e8c5629caa82633262274558cb9a27429ac8106ea53c31d64af06a6a0f6310bd86ebeeff744d892b318ba98152fd143786a39d6cbeba5d5d918d41dbde8ec5fdb3a5fe126dc8ded921ccb4f53b7bf29b65e6338eabfd7c4ddc5cc28a3368addf369b9cbddf1ce9a5fa936e9ace3b48d6ff39dabcb32c150ef405f760561952ccd974cfe8107032f58387e05953669e501c429bde1f6fb108a12fe8438ec83c2d62d9a07b49ed42328551111b11237d7084ac7ddc37f0d7a3aa829c1c249df1689a71155ed2bba0c5c99809c6519b6ba0fe1d899e43d40f47d9a81bd460c1fbe749e53979f301d4141405d1435bf5f248543dc60c8b46e25cf4466d518a5ce21037dc11b4f4e867893140707b775a9ace4cb63c0f576cd64ac4079b7dea952c4d2bffa7f81c97e08be6f0ee55edf2ea9baf2df38dee6e75791190ab3fc8956305eff6022bb536c781fdbd54b804e46a17444df46f99754751a38ca87e6b840e9f49682a3705efa5d53c51a98e0559a2aad5bb469ea0a9d33b41a197241c89b68502fd280255e801ee6c51f5be38781bbd2822f1014b31a19db577821823cce21ee25e0376ec49633455684030e56a5cb60728fe7fe13539e0c5b77042c8761ad2b033c37a143b530fbe3c93cc5456edff38757402acdf246d3a096a8a53afe709362371f513e65ae77075f57acd6557fe83b25b71f255e9abdb1477d80b9ecf2b3ad713d13271ff2434bc6f2297bf211db287bbb3fcbf100172819f14396c5ca085f7b4f5b904cb2ed0b908acfb8bd3c38b9b9db2124621d9c5f7ea26254016d1df2a5949f0c9456e0c13c80041f2f657d89708557c12a59a9e1f61f6174384240f180cb51ee5f54ab272b706b11b11435f220584814a24abc3a10b6d579d2e02df6ad4218d83632b8880dea7922eaceee9e59b276a162476fc24f1712c759cd415c8ba7583c9187a58e244c92e554fc03d88d2277f9f2f62135019ebe0f357007ad9c49949df9b9de843f155cbb6832125b2b26a080dccd7cecf8dc4b941e6f0d646fc7527ee74fe0049ee34b279cf79670b44d94d88843df74655e20084d10af1b66af2641e2c036a9c424c2bc7bc30cc3c8f5c9637ddfd5460772ffce7a1b892d215f64a964a16ede5f5877dc8d1ae1ced9bdc2a42617daec3fd92f78fdd618342056a1f7f569e50cc10ccf2a3965c1fc5713f52d29826cc17eef237a70d6c8aad42372c00d8035cf89a02d08193a09c6d186f560f0960780553390555b94370bcd543b94259acd9129b13608951e35d8d98527e203c947834334ea9c16a4dfc16c5780e6d61038fc11ce6eae4578e28ccfad2112db928954e96196b15a7f2f8631abd72a8766f45ae2363b6b92d07c6d245d65960098697f885829376f99a2a4ddcf92f1b2258c581bb720b315cb8ff4881459cdfb31446dc0671680ee7ad5c7a14168befec26d5e1e9fb33746b079ad6b70923d23f3c6aa224ce3305f9935492cafbcf4c5c423e76b7e674a9e25e6123ee0936623565caf2e4813c83b7b5db3e04904259fb12c7e92c1b17f84a241ad82e2d1db61ef62f725072cbafaa79b826ccbd2e3f50ff3ae25083638a29c18e9c7f5d1ff8825961cd6f8a28b15948b5f1296ad925e4725e082c04a2870a9d8518ea81854de7f528a949af9bb24c8b9847247f8c343dd1fa04c7871a177220c7f4768198dfd7324cafe7ca6bda0ca82ad2c3e48f94e585d77d2af51560ebb21bd72c459dd6d978948650c4e1502009333710822a6c64f7bd1c5b34d98dfcbb4a6912b6df5a762fc9d68c83453d10147b21133fa5e4408e7389642eaec42ea31d5333baa59134bfb349a4f1dfc86533c936d304472603b1c36b4cc9de2d07d2593d943a36a69e911a859ff5f61aa6cde61e58ba5a5734ca736b1cefb0f211b0c9ce3f1fdbbf390bc6328576d35a5b499b82aa4724a25c404c30db876b38d4a634af3b4fdc058f967ff95f5ebfb10d11ae0ad295ee2d027b16639179582ad71a618890b4819f279b0c8234940047438ce75dd78aff20aee399ab47adbfeda2751900473512b5898036740c00de4385221024c110a1a4e9e09cb1040ae8acbd2024bf66b9d6713eafc577ef8aa3cd5b3bef06980e1ae139dae91cd07a1a8db1814a6ef82a16f9cd8e8135e61a950f4e3f4eac656bb3fe29394695b3e59eb8040253b5026f1a75be873153f898fe2ee596f3bd3011b4233e657cc4b631bd56410a063b8e702a0e9a009f7c2eec2455a9a9a6e2ffe7657a02c65350e047bc8fed002ca9a3158eebe76391568efe50aa20de31c3dcd50d28fcc492e23a0fe68a924e8da64a468d363017d08923b6c955d49e5b07cec3f658b4c80321ca718270b75bf1db8aeb7014fa8424bef2fdd97f4d52eb57de996630b3386cb69a56d768e58f20ef6bec80afcf12549d05b9c6501160aa5a123fa6d8807e9648b2a42e9ba352e18bf531022f36292acd63d4d9efaa3260b9749efe79a30049801845cf31790cfe5731a241bcb8316cf714345a85a02ed41b0c9cb53ba5284c06d61f0251ef253dfa2628847cdc92e3c221c3913979bed029e02215450d5d6981f41c0f238e05671ddca9129a2ab457d79167c534bf491a8bfb1964c06306669978233dd0dd1544675c0e343c2a0090dd6c0a409df9377be86267ebd3308d0cf76c1bd68065bb9b81ad40328b65dc557dba93489db0efbbe81ff6f2a7fa592343d7ee205aac603512d72654ae62b16f5f84ea265c6bdba23438acc1634cd27324c28364873c6ddbc3e3a7e2cda9e8a72ad2f72201b262f874b8739f30ab60c34334c2e92f9d48533cd8ad2312c3e7c386aaa283b50dec844fa432d636a16bdd483593f978555b6524be1f60a337188b1d16d3939f05e10f6e06d1ac9cb55b87dacddeda8dee0ddb249ee4e1a88de2c9941d7298e821aa6179e5376a8b70988aa1058bd594f0c57ce37fe6ee4a4eac4396c767dbb7eaad42174a4e572a588aae47e48232b6e1ed0f0a690ccfb001e0c2c91d9aa435e7537af03cfdbda2f79aba7173ac391a4bec5d40643ecb042ee50ed526f33b89a004d0adc32ce21ad52e78c9b9ef32e9b52a2e2e79642b6b5d23ef63eb5be7dd9d290ef6e7c30fbb78b0aef7be34644aa80f497baf67380f17022d1b72b8f1566728fa72b1ab8cad6a8625a38a641866ab0378d00f2d3718e3ea8fa4c5f4a11e856b5dca28caa117331aa57426659664466e81d59f9f73ae4a43dfa7ecf53f5d7f58fea65509962159d2f6129921266d01b82d3169a533f7d375e3cbeda5133ade59a7ac3e50b2f56618df26eb7e10a96549448d7528be1e06e864b9d2ea65de28d51e87ed883fb8e253295824669b3ff9898e90c90e5d496b042918a3ae7c71e8342cdd6a97839553ea9c4f4dc0105845e1d3e36f4158a18b32fc9166d8a11aa3dd9957bb67c7b2434700b46e74b71bd2b7da2d6fa7f74dedd8a3cc25501c01e33a2d9ceadf523739d11d2e8d69d8b127746c17cf2a82751960e770e7fe354f2fb2b055ffe66e4dbef0bb66b489bb41cd81514999b1404398309025b5ca342c10ade9290066611c590ca103eabba8f44a44516ad5237addf1b26695969c60bf0d93a1c1f74674cb928d98ae38e7e6f228273322896a786bac4c3166925c0231aecda0c4eb6eef82f1dc680fa4f5be62ee91c11bbf6d82165268b840b1f262a97bc1aedbe5c51a6bff5fd9cd39ce786c25eac1fa7e14e0056a6dc4ccfc46c850fdd893aeec353cab437fb291fc585c3a5499fc6acf47d9627cc31db17a407c4ebb7a16e408a69f6d45a4bd02f77cb1f103083a11b8eeb65210d28b9833c9c5ca3d10012541fe89d78e37c0c93123c1bcbb9e439744f1c0ffaf01d62930c7edec0c001a1ba0264311a59e848db233d2c102c3dea578383c91e0bac50b78243adeafb42a6c2c0615441243d1f783962d2863dfd5e35eac75302c6521e713c6f5c5ae92f8c0ee8646985e8c6fafab321a1a635aeef8fd33b2021a68b2640a9765cc92044ec0ec8f203410e3255c32f1e0bf8c9df28d5db63a32322c402b647dd418e271f2133007e941b0afbca621b9c93e650ea849871e56e6fc1993e3296288d42641ad62c2d8eae6c758fd377f741bbf7616dad582514e4701987235622dca26e7db4755a8e86b4cdc46adb454091f6c481e4ed856396a7cc80fa7c916c6e236aba98893ec21b49a77e097c8a8601d6b628ccdfb0cbdf2add9e7f8464d15182dfd1238c596690cf92090821984615de44cc91fe6abc42d04bd892e550f01b433627e1e92acaabd9160be354feff426008f3e0c403b3864a6fb5b119d6574fd6f645503a338cb0d89bed07913f201c2e6b2525cb1c500dfbe1bc768c756563c0a8a00af9f41b4450ac32f160d947077c03d6cd6e34f04e672a634fd7aeb8dba2c5ce5ea2fd04dac3bf543d4e4dd298eb3b9f6447be42cc1ea230a965f2b02bcfb636d7cfbec7e8c45df747b40d5144ee9ad576c248960b74f1ab0fc1d1e9d8da226002caa9d2f2b4f062bd2cb851a018aa1f71684488811c91390f75dcc4774472e07c3e5eb48d382f4cea22af421edbd1d3e0c43288c187f97114ec73ee6b81301e80a53dfb1ca0630c7b3082a125cabaa94150a3254119a2d9bcb027b63a22d290dc69d80525802427ccd0b30d6947ccf61f8816cc847415e9634b78ba77abd2edcc26ad713c79eb357b8db0d53de57150d7e4fe0d1019db16a528d779988ed96bfc563eadd5d0409be3b21c973816403006f1c965586d6ae80ed2d462013e3eb1d9630c3966459cf1b20856d1dc7cd21a29392943d1f13dd3ecd3e002665c7b45efe786a2822c88ad52dae0039f6b7f75cb157e472147cc70db969ae92c4c27ae9c5e3e579e076c4542b458aae574c0e9493138edbad3bf3567a56564c79fcc428b31b3e73e58e0400e1f1146632b4edb3ff6f985f3275e97fd8ac033bcb9c1a828fc57dfd7b36d341195ba448cf171c22be120ce8ea5532f29b14ba4904ca045f238ca8fee896b87f992b453c759c244898a6f15d1e0055158b35855d6bb00b273515c96075d83b222a08fc2a6d6b8c8c54d050a516a1da5270b86b5f4773b6438e0be70a6a21e492949ad3fa00addc58bc3a30aa1a5e4a1011447538e13e8e19f6140be40f9c3c379f8ad194738a9d13968c9953725f2cb63782a9ce81371a1235d83cd6ab6eca7a1380fee111295624ab6d948865cd08aeaa19110a6e86e296120182c888c216c1b72363c721b38ff5c38627313cd0675f32b2b5d4f2546e0e5634e5a2ecbea975541c072fea4fd0eda67f5d37408fcf3197f59b1553c947e0c91b6e4c208a0affb212f302b526a2741bff3b80b633cb8ca089cdb3da0cf476335e24ae6c4fc1c599ae2d26ca608cf2ebaecbf5e9e3e0d817175398cf46fd375ca510b117355731d198bf85712417cfde36147e20c8987dc24633aa7a9eeb8a0c97383b6b6353aa2177b006f29ac974bc3c1e04a20a7ae369bf77d3223d44d90adca635ae023d9753f4099094eb2d474d6bf26db8d00e73d62a27fa114a938b1f1d628829399e622db6d10da13fc8b1596897a3aa42dd93d02e49078dee5d081302721a2431fd72786610645fbd241ba7de158cc08a6eac1e73e7e1df512cb7ae32e0d5e711e22ffbabcf7d178ec8eb0073751242cd492789a208724f9a8702b756b4a0b902d501802e154010d93c8b2ccfbe1c7736f76ad963b5a124f2f750f815f462e42c5f50cd96ea9594c70961f39bf891a8eaffdfd65df556a880030a3718aa05aeb60784ac8c5664e980b6d71d7f2b5b1d14e9ed4739d079216d33963d06dd7060c95605e2b86295582bcb53712260611eda3efbf69e4ef3d8e00f5dd288968b418cd33c3ac1151029f1d03fb82d9f8bf3648573a93578aa150220c7bd46dc3e9b28068f7b5078bda4f94e02ba47eec1e3db46bc29a6558720faed3dc8e7b771b4c477676c0c9184116ccd043f1957eb37670a3e3e98ed7240f1fe25b9142f0cd689af2dd79e6a4eb771d3ad0f4be1f1382f5761afb34954be0fdce859744df7479f354782ad0b01df31ea65f18494bb2b5cb88d46a07013e27b0eef70b0181b4f2d911f35e27a87d1d39994af6c79325b15b22ac9076a99f45e1ca1c66f995e385b4c1bbae5c1c6d58069a20fac973c0f83cfa0018f40cc3cdf8f65225ad6a94853eda5d85de8a83360e0f7daecf7c28ece9657b6e1f9960227eea54e18d9e5c93afc2456f2f514329a88fbd7d39fad211d8fb8b0a59dde8d5dc1c81052aaf8013b0100fd4df2f11b57e917d00a99e310984329b682358c26aa913631b04fcc397b85a09516e62936be89b18b39ed4ea36939139220c8871536e45679d9d247b825106ee6f4daa3cbf8f233d207a1d522b5f9df0a285eb9a2284592af763a53c85f28d1b790d547222cac036b1cbf5fd4a70cf3e742ff0915a939519d2e90d7af515731d192dffd83833d8b1e214ed60264f9b9f015b45fb5e04afc09aadbbab62524f7fda100ad35252f31b5be5721f4174897ef4a84a3cbf6fff9bc9223e6250017890165413f81390a5ff69ae128f2e682f7aa8878bd9f12e0b17e8d7142440cb950a588a99bafe7547cab5ef4d344f92e40eb789796795d768c1643ccb65a7191b4b3af41aa075997f09ab1980a3179d4da78c2e914a1ff48f34e5d3c2ab157281ef1841052d0b45a228c3cd6b5028efd2d190d76205e1fdf4cec83c9868fe504f429af1e7c5423267c48a7b5bc005f30a1980147a3fae5c100b95c7cb23d43af9f21d87311d9cc826598993e077015f59ebc476383bb7a78787d915c97039ab188a2a618f7a8d7f64542ba787e9dd7d48c4c87d2aaea068c1b00c9711b2812901673c11418096d0a850fb36b0acece56d311689dfeceb0835009adc427f6d2d6b05ed26f5a43b6478bc72c1f914a2202dbd393cb69b1a1e78162e55ca4b3030ac0298131a7a0d934c032cc9dfc5afa600c59b064d2d9013f15d1184278a8ccb5ad9d7563e666fe5a8c173cec34467ef9cf6d6671208ff714741fee7c8d1d565edf82570dffde4f3f584024142056d8548ad55df83d1babed06141114c95ac88dbea0ce35d950f16d8a732a1ea7d22dfaa75a3e0410c546523277261116a64bcbb2be83e55e040f6c8c79f911b301a8718cc4b19a81d5f0cb6312d87c5b4b079e23a61d247541cfc2c41a37f52b2c6e43a3db5dc47892d0e1feabcc5c808f2391791e45fb065159f99c1d8dd2f69baaf75267eb89dd460f1b6c0badb96cbbc8291cefa370fa7ad6997a4ca2b1fe968216032f02f29837d40215fa219c09161df074e1de8e37056e28c86d1f992a651e271dfc4b0592ad481c613fd00c3eea4b6deabb9f5aa63a4830ed49ab93624fa7b208966eccb1f293f4b9a46411f37d7928e4478dde2f608d3851a8efa68e9d45402bc5124fde4ddc0f83ef82b31019d0aacb4b5121bbc064c95c5292da97981f58f051df9502054bf728e9d4fb7e04787a0890922b30a3f66a760e3d3763855e82be017fa603630a33115a02f02386982001def905784f6ba307a598c6dbaf2946fe9e978acbaf3e4ba50ab49ae8e9582520fc2eb6790deafc77e04a8ee75da92d16f0d249403112c74bc09102b573e110ccb4d8461d249bfe2e85fc9770d606be6fbfd5ec4c30ac306d46412f736e5b696ccc9fbe4adea730955c55ea5c63678271d34b7bd6f6340e72626d290820eeb96a0d2d25ea81361a122ffe8e954cf4ff84f4dafcc5c9d3e7c2ddbdf95ed2c0862d3f2783e4566f450ec49e8b01d9d7bf11e92a7903f2b045c57ed8a65ccbfc5b1d2a38e020a57b38f2e4deea8a52354a7e7be4f977b8f5afe30f6738e955c8bda295064586b6827b245766b217fe39263572b0850965c7ae845611b8efb64c36244a39b9fed0ab970ee5ddeb8f2608dd9c963524a14050c9101d7f2d5537b24d0b0f7a45703c1e131656ec9edc12cdf71dae1cde2790b888ef2a589f03201f8bbfad71f0c4430477a6713ad2e50aaefa1f840cbb839e277389454517e0b9bd76a8ecc5c2e22b854c25ff708f9256d3700adeaec49eb2c4134638ee9bd649b4982f931ec3b23cc819fbc835ddcb3d65e04585aa005e13b7ef8fcafa36cc1a2c79ba6c26fc1dc0f6668f9432c578088cd33a41a778ac0b298fcac212edab724c9fb33d827409fd36bc4b2b0e4e81006fd050d94d3271e0427c61e9ddca599a3c9480cfdd33603cb1a196557281ce6a375fef17463893db293dba0704d4bfda25e08beadd4208c58ea0d8d9066448910b087fc13792fc44075a3fe42e13c5792f093a552aa8ebe0f63e7a807102d5bc145468a0cb469263035c5647049054c18199f7da6d6defd51105e2125c605e327aca137ca85e3f7f46ca69f92d5252f84418293f4e9afeeb067c79576e88cc3c64f3e61d76e1e9e2f72cdfc35261a9679f0c374d7436ff6cfe2ba71650810522fa554a4aded87ad23f0b206b1bc63f56bbff8bcc8849d99e209bd519a953f32c667aa8cd874ad99846ed94b92f88fe0dbf788c8431dc76ca9553692622077da2cdea666c1b3fee7c335da37737afccd3d400a23d18f5bd3784dbcd0663a38acb5a2beef03fc0a1c52ee0b56bda4493f2221e35bee59f962f16bc6781133204f032c7a6209dd3dabd6100325ec14e3ab0d05aadd03fdfe9f8737da15edab9d2598046f8c6dd8381aaf244821994d5a956073c733bcebf9edbc2a6e2676242dc4e6a2e4ba8a7d57ed509340d61fae2c82bee4dedc73b469e202cc0916250d40a1718090690a1d3b986cf593b019b7b7f79ae14843b2e7ccf0fd85218184f7844fbb35e934476841b056b3a75bf20abb6866e19a0614e6a1af0eee4de510535724363b6598cccf08a99066021653177559c57e5aaff4417670a98fe4bd41a137c384f98c0324c20ef8bc851a9b975e9440191ff08deb78c9fa6fc29c76b371a4a1fa08c30fc9d1b3323d897738495086bfd43ef24c650cfa80c42ecbadc0453c4437d1a11b467e93ca95fbae98d38dcb2da953e657fb7ea6c8493d08cf028c5d3eb0fcbcb205493f4658440719e076e02deb07332d093e4d256175ca56f4c785d5e7e26c6090a20429f70b3757daac54153bc16f5828dc6c1c9f5186e2117754be5f1b46b3631980d9e4a9a5cf3c8e9597fe0b0155d4c972326568c4dce32c386c890fb207172043fab3b7e8ec809e330ab45c8fa29795fdfb56141ab3d446af54f84854e80756bbf0e6be673c417bab01e13e60caebb27ddbe3fbef137f6737fc2f5da5e2ce1d5750f015a73af9776c0227192b3b4bbf60589178b8584f0e50e680a80b63d5e4a49f62662f650342047fd8755570220d43f5e1231d1ecd9c8898aec01c07b96d3230a0187647094bf2ff87eb6606193c9738458373b375925d770c3e5e3ae2e77eb94bb5025d75f5b5f5b7e3e3699bcde894410252d2c1a03e262b6b2869dd13f89dc7b46a14d3efdbf6eae734172421a69e662840e94c16a91a8edf213112531e52a6aef409ad8ab377937dfe9b4ce86fbb277da4637f962cc89912cf1d2d258e8c6b0d66b85d76fafc3410a9726072828ef77b23ddd68f47b4ecae988a881b978f7748088d8e0510f95f37bb191960ad6e78a915a4eb6278740bfb0405bda5e7e07de7701599e583f3775baa1bd2234eee0d60107518c04d6a4990981b2844ee33c17423cd1b68c27f1f04fcd7254ac59238689acb0929151c57f7cb37628918ddf4769a307d3f5b00b8cc39f78d47cfdf8c0b2af316fd8e0ea9a923e6f6d30663795749cc59b9cc0cc709c7d9649acc4a6ac02799dcbe16c5a12d28a65fc32558e2aec91d1b688407dc565d1965b429577740372bb50b2db5e0ec5ff207c9f412a2e59e9f4cdc11966b2a3023eb34857b13d3d0255a455173eb6f10667967f1454c8410cf6885031cf60e07857f9c5f49d323792316fd2064233e00504f2dbb554202e629f8e3c7200f6a39ba8d5c25383787988195a2f92b2ad1a66bd37ba0c725fa753b7888dc3409d75d3fbed465cab3a8b4ed20c76a2d54b258f5b0d2501f6ad3547051d4c0bd97ddd8816ec59f75c9ef64a272eaf1df4368beaa61e237c27315ea652f6803411bd6322c278030ce0cc41e6df68e0ed5796d4dd650fbc654f14add866ba312531868f09c7394d837dedf489c16113f9469286d2628bf8a4b47da745091267c680ffeaa5edd93e447c29979a97c24f2909522b306338e0219e95d65503a62bff4851fb5ffcfddf3825a7b38327329d65e7ff4a5f31be7bc55784c1711b1d84b8cfa34a9dbb4f3645bf90cfab3a5a04952ac16cc794c6d2762671f0ff1b207bd95f1e60c8f3774e54940b747a97e28ca118bf18d053f8eb1d5284ec69c956174a3ee9c4496c1d2c4eea41295808713d71fa22d6e238fbd0a324e73c15ed6860f3b42efe86eee8da190a5a76ad53af20ee17112e65097889eee4bf686d51fd5ebd0b1297e941805f9f3c7de3e141463cfeb9b5a9c18f161ce8da37f9d7bcbe1a8e89bf16d92c8ec3c6c7d2f95c9adb998a2636ce5e927e93784d7476bdf5529b50785d03be79ba0e78f5823f872619407ba7bb26a4da57f58587a16786c563e9e91e13e7ffeeab499c0cb53ec8aca538b7846c38fc2e4a4bf9cee4549af4960d43c40a4906540a7c1a55927c88f62a892805728ccc57ff9cbb6b65c6614a950e44b16ab13a727eadda18428330ca4e3cb572f5aa7d1e1df0b3a64d45438f08f4d62f5aa70312b0e6c39deddb26f1b95845121c1b78494d50c9c6c457a88a96c8e08402b4c9fa472ebf2bb90ad43314e5c22e106624a036c2e515f186f804e89149f98b5ff4f3ec8eb60bd19aa05707ec130ef913e8ed8151efd9fd599bc5a657fbd61d31ecc5470c8e865b13f427397320fafeaa2ef6d502cf5b1058f9957722dd63dfb11a38ffb330e280fb37695385d13a47b45d84dbdf6de3500c7a3c03fbd7e8fa67e414bd88846767dcd1e6fc270e15fdb9dc5f3aefb1b8e8fc8781f3e9d1ac96dbb3202895725f393d2a66dd63bfd5483f154f9b3a8424feb1862deff5b3f8d996f025e9e1e3101da7aab19e40ccc04fd06f1ca6c9cc6dbbb1e1089e266514ee1f01eba774bdc33ca1b98ee6c71d1f3bf3528d02a373dc4686fedaa984d048fbfe503a0b57eac1bdb3bfc65dfe9a393331266c58d05fb9c8b7476bb717dadc29bc43dabd91504fc9652421acef2c586010547f4f597a4c68cd228371e86c179fe04492642ad9b8884050677ba2b9c2ea1a428f9045aadc4f4ff9e97ffe6f4286f2ba2ca82b6c4221cbab60711d2ac0f8d75963c29cd9b3a4c533668861c9a5057a0d6e339bf037bd8e9ed4376a689ab2ce01c58e67ee1790b838c2341a64884501a421aa824fdd83128f8a75915a984187a37b9cadd1513baf70c52d3026336d0ee90db8e8707d9cdee74bd298e702cd8aa54e93766aa9cc32433618abf9eda62a43f903d63b5e2f7b0fdff689f91f7d6071061ccaa1666bc919dfa094c40018dc1aae335398ca656f6d0e8a6b77387a906d6bdeb25ed242fd5a866bf26fb2eaacd7f5f1686f0766446ba036474895eca203448235893376556ef421cde14c4522e094e51ca85e5981705ca124567efa1e9a5baf5c0ad2325abdf16b2d041550c79e53b6772b1766afe30b740a883bcc8d99760e2ec9f79c92b045f11bbf57342279fc0c81e07ab7552e755602c6138b776a5e46b3aeeadc87adb75a9efa5818bcda559143b0cf71fbb862f012f8505f6274db00f3a2f21bc11d104ebf9d62251b2728ebc4815dbf2ae99aea4506386fd81fb5e4f78b5881c76918778591bb82c9ca3bc20c3d6dc76829e4eba0d914e460d3b399c653653520f7977af8bcab594e2956bf24ca47b140e00a9b2d572be583f89ec868e05e605731550220077ccf30ae4389131233a63776d2a3f369c79bc7f63e18e61c8e29f17e19b5065a740ef9bfc9c9e1fb79ced75305abfaf82e2eb7365b3247ed3cb97845ad3bb19edd3e30c6af27976f6050a7e06b5a4beaa9c5d81ebdbd933daf3774f0d73d29b9fd865e2abe4a3c5531542f83cb59ed298088b4172b62d2f330cc6be6606377951d0f0a53bedbd8943504f8a5ee4fe89bfba0d28a6fc90df707a0e78f1054a2198401bca977817416b18689af9de5452a6235badd4f994c317cda6f53aeb9b22c7c83fd94b0e516c2f0026a079ec30bbdfc6ef57a947b9589d7a38c9a0439b0b84bbd537c33afc98039a12417b990423b12740ac70616f2e75f22c4ccd87da3a43ad849c9c6869238d38a3e46b8f5f28eec6f812e6c136a335d80a251f32c93d891fc64e332127bd207e740fb6199249dd286e3158f19055519e4ab911def883b98502e323efc8b371dddb3a07e25e0500ce1b6e638d1cc35db7769f51d6e8bb797fd2e1fb4ecca4d5d961e9cd5402c8fe1a985082de2c6bbeb6063e3bd50a333d52aec105a8941fd0e3a09572f9312429b06d5e337f6fcd090c821c4c33ed9989b00f16efa7cf7307af0fc3953c59951801f30df1db2745a14d72c01f8df34cc31a7c4a25a6cf4cce7e180aa0b7fc9a4d91d1d64a9c03842bdb40b0024dcbcb8df46ed12430241ba9e351c121d69ab24ed2725daa1c85071d488462b0fdc7944ed06f5287ce6e5e3e71359d9522a46b70666cea9ce71c2cea07a66e980887459a20e634bcfbfe82e09a3be67726ba3466a02a339f86498406bb3f2a14188b4dd4787bfe2023653824e0fd32445d3c8ba622229f3e649dab17b5b72bd188341ba24989257def22dc9fc7c2079920bbff936eeea3d62c78e081a996ea4ce2124d6816a62112b9c7eea5c142ecc23ba90ed2e8f6d803286be2d8e956fbe2b0b641ba624ba78b1db4fcdb6ff8486be89417c922d3a251f2f71071f78fc73f6e9096fdaef1ff43758a75a5265aa102c20dc90a9efda92f16ab080176a9e2bf9621cbc67f31bed87ba8e79776d29d035266810bcfed43170de827fbc92dc4efa1fa3e9935735cb67aa0c126f3f8830a044eee41382b0696434efed58193e44c2c8a9dea744f6f6a0d02a0d80044f97372175f4f6a2f7a19413ffb031264c7519043383eae1e4d7fad3ef52f3e4076dc0660528ad863043c924bbb18fe28f4ac67b4bc0a65789d43c5c64c91006371904baa6687f57e3b6cb0f2ad8bc758e2993d6f87d21cd6d5630128f5b1e936705cbc6619cb63d9862627b540eff06d17b46bd43a2a56c16c69c9e7aee67b21f98dd313dac985fd8af561042399fbde1a9a8d73217785b0e8a49a72d6b318ce83a01a443806ee62a056e77fb42e5c3451981cdd0c4e2c3dd0cffd6aebbc549495301c77a007ff917cc7358871219408535994622912dcc09b285d307c46b10cb4ba341ea1515c1266c2e5aef90835b2a64b7eb32679f9d1ce6a54540706a09f48bb0bb9ba57666df4d64263aa36a3dbb0da564072c825f9e0f25d45fa60c5d4f79efdc9699eb0fcad7e0647035180ec09a2958a9ca1c391594ce296e4e9734617e2a4de2dabce4707369bb9a2dd3f5c2720c702127b6540bdf68ec744f54b5b40327b5874f310e5887c6d3bf72e41a48fd1553762d97d80757bbc57a938b09cf6eafbd8edf92b50a7dc055e7ee93a6daa30ea9b0c209ec92648e5a870184573a288a0dfe7426000fbb1fe91a8827c100ccbd1cd8d052b8336eab56a38186c87e9a804cdff53618eeabab366128ea9243e0ec52f43ebb6572ddd85fd6fbda84222b592239490a252fb32be5c3b622422a4761f30ff48c1bd71ade1d2957c9b2ae42dc39155aea4e5b3d699d491b18f83e69e5a82eda0d01eb8b853aa37d997baa49d3367a0f1ebbf9b02b07fa3d14dd05af3f195bd886403599945b4d5692069fa704c47150ed9591743acbde055d19097f39ed9dd63eff3dacd52a2dc8fe7c15c437890105a104abf15e90fd5b3dd3d24299ccfdbc7e678c2d0e4f4ebc23049208362d3216802fd08f5efe6028fa34e661286081728ea0a9820872b51b4bc7a0dbc8590c6cd33f87b604be0e52dd63cf42ae4e33e0b6d11c158b3a6ccbbcecc6a5b4b598ede15b59ce16780fc32e88154ff3411bef3e236e4d5f4f7ab6be9c8dcec3e8dd82f4accd3f5dd36c6135cd3eefbedf40856dbd26914b5ae7c29bff7bbebd9be314525a6b71a1782c163a58d489d8d0aa8b8cc7cc4b1803bbd9993c1add6a75b389448cbbccaa0f57c984515f870abd61eae36be9e28ef1ffe2027cf294911f54cb126a46b93f3ff6625ce165501a4e6e88bacf04be75cdbbc51ce68949fc40cec0041d939e2ab00fc80a30704cd02ad84f591ba547953ef56a30a3696571812a5262cd2ae4310bade5d66507e3f6faa726077854e5b6edb7b985da1a51b98a6f6873a194f41df8d5a007a8b37d5265e3f40e0e9a009f81089a65b422749c02a5e980c25834b51e91e1e723fa82ae1495a3b404fe0019a3f1f516590b35e191d5bfd158fe0ec326e890bcfb675ad0aec51a4282094decfb78b2e1f05dfe52e006d1ae8a0fe90db7e396cf5b7f6d80dc7941ffb2414fe030a8b90ea19e36b59740075f80122d5d7a88d96869cc248846bb0035ba306ebceb86f2e5965844d35e8b492b638f417917e142cf4dd5e5af93923f2ac25e134ad31c45aef4129274dbf07f5c5b0e8f2935f6b94b302219bc6c07e628f352a45091719bb0e655875fb97691388f187e377ccd27253a3c29787820dd7574948b97cc8dda3492a88b5e9e26670828347669967072a692aa7bab60e70c596eac2ee72d79ec82209306373306ea134debdf8928e7841361f4791ccb645c1e0923f7085c3cb7e2b99e60b31f2100a327c4225ddd3843b7cea38a95629eb30a6c7f4dc100de259c8552029a0a7c92fede47a5ae5a6d99d9023e15dccd9dfb67c04b97dbc1681df7ab3652b49e21896d99fcd1434a8e6dc0244d84bbb3691a7b2c0c3f1f49e1863c53d3b9c98017cb38806c0ee653a1a6b55d583ef7bc0bfa8fd94cac523d514ab4a7afa0a05b6642a7bc1ec55d1db02e00d5e8ab5b918a81eaef92463f48c050a4cc546d02d517d402759a5c +MD = 0429e14c7a340fce819834f6a964f6ed19f5b54f8697f49c3f78a213c8b85b52 + +Len = 89864 +Msg = 6d429b74eb7633539db0d3c0aac908ea160707fcf1898a9ecee5dabe770f2d90df7d33d35888ec570616bcbc9476c17c258b642c8e2d2efec2ccde8b8d56b8cf865b1f753f706655bed1e43c314a46ebdd572962588ae95ef82db3208b29e270482688e206f44a58ac2972c8e90c3f3f25b27f26b76760c558508405d74e537a0f2495a017dd4065b8688ee824865381e4e68e01138d3e3bca7c77c3db8db4f5c29f6f39d8f2ef86cad462254a7e2bb804397d7ad4c529c836fab4e1feb0adea49dd3d35b3fd00c2cab71306c3bd6fec6cf4751a62d5c975841364e7a77de5608c27281a0fc41a22a057cc14f70bc625045e9d672585c8499c0caf5d40be055f72c458725311e6ac35fdb3d54f2fd86cb4c11eeb869fcb4d6630bccc3039b4efe5fef4c4e9aa0c6a6ff0f0d331f34ec864631f2eebe97d87cbc6b4bcdfb79b19cd1b259938573364377aac96061dd042fc8ec9b7bd2d8301b115beb3b5ff62e410641278a8e203a176e10fa4377605e16488440e653188c30266033b1adbb0599721e4e9a1112629126e40872ac696ad8599b7bb49be32d3a401abdb76112d7e4a9ac2748bae4104f56968c749d52aae450b4a46d39b293b812edd1c316a825d1116d5a2ce7fff3b051aaeeafb6a6aed8d2427386a9216037f35c184b3ae57fed5df44fad24d05d42cc83b7aa74ffe71462e73197569a131885d809d64a553677c3b380500dffeda50bd36ffb74a8d42566f596f5ee971cf83f042efad161fa2f073d949beff90525b3fc8ff9224bf69a730ffc48cda2fe457342e00f4cb63b717ce4e507573634634971904a0a53eed1fb88d9f67048279ee726d5ba28ac6acdb96c0a28e0420bdc30d50954994afd6a8512c89572e13952ff12685201cf08b231156c56f7a6fc0f0e8963bf5babd2d29410409c4228a4002fb8207d5498a5cd6893943829df756a372127c0ce00ef989d13ca716a68e824fd6a96a28d83c25de4490a42e356187c4f1ede3f6cc4a42b249fcebb583c764fecbc2368393adf0228b846eda09545b3bae4ef51b471a108bf16e5e0a81deedf822f6f14d4086c48aa53d2bf0e279dbf0f15e3ce418266cfc10b7877b677b2623236c25eda86eaafedce262d788780ecc02443fb709155dedf002ee71ff451568164d59cd930ea866769c9cf7c3f8fdb5282986fde08fec46d7751c550fe5c4b042c01654c90ec9aabc9260b85ba1ae94ac359a1f663e20ef0e38988d60023be1f0eee3ea111512b3f6ed3682171d2b52d68f028363c701d1dd74ea83ba4581e468fe48f734cb8d676cd4a6bdc0117cd5ee6046939fd597d28b519b9de4569da2f219cde3fbd941af657039d11e28a7073ccfefb6e10eebdb62f63245a8dc9a02d667fb172be736742be87626f908b6cf08058453f21a04d5a88c37e2cc807deb5b0f59f98f9c759c0465e6241959b014992a8dd49ba2eaa6a63a33db19e95047ca3a70f2eea10510390f0f3446c49ec0386592a0a24ea638a429ad9a57bf1bfd6b0fc66b0f9deeb9110d7bbc47f087ba2dde1c1fcfc53f71ea802d864eace4f586b7e5cabb39397ed688b226e58773eac0beb2b9ecb0bd3bbf683b07c556b51763595578ba1ded46cea73ad8e82e6b38392dddd6bfb6297d6d0960858665954b4a1e9cded4f012fb43939d3c188f758cdf5224de12808a1f3a8a236857828d79822e4463d15bb1847b7363b83c529ccefb560f39abb5e8086f140d190155a38954b0d56e7805d0c9bf7012b61e1fe5e6d560264f52fe4b2253cea5fe4c85e16308ccd56992977ab256b2349d849c5abcb599f289d103bc5430e17380ffbb4fefe6accebbe7b8b4278a6050d537740239e329fa4def6b42864c74ff07e49ef416357547cc3f118810a1a3efc6ff4de543a637c60473dfe6a0f1b0d2fcc1d7d8be3f52c9046249fd55e4a298d8a3d00cc348ebdf172606af8b65bd73c55f0d03d04a69dbcb18091bde9b86d373eda47ea20f6eccecd089a52df0c26acc86e97e359fe2058928f9eb930e7628ffa37143c644e815ed390fd06fdce74078fd1250d386e6cfa65bc0745d849b20e48ee164192e804381284139396f567c308e318194469dc28a7907bf22471c428a769ae882175fdd0f66c7e774f334a65effee1a5f292e659d4a75d2cc9d2217592344d7e845ad6b01bc48e206aeac466919f0211b75c1404895b3b741cfd526ba5c883a35019176beef6c33d9e9e3e5b9a4e0a1b27380dcf12468766b245cf713ea0e1850933385aecadce1d4eb040ab668659f0b6b91c002bd3d1530e6e012cd967d792143bc20391440f4defe353ec82d28250ea51c74e129da9e7a5b880051267d65905954cfc7943f75e1689e0857bad13aa3684a81f830e61830cd7d480662b8e5851c221bc013826bc47269f0cbd807e7b2fe426ead990a8c3a82e6725314d300e8d54f8b8c59b1de6f64bb7e8c4f723323ad2dc36a2eed0180c3ec06a20279bfa1cd02a8932e73d6c986bf3b02e7bb26debe330996b5387fe9d7b78d5af55028984964f83e5a705cbc1f9aae95678ac8cc797bc798f7920f5f086e8fe2b50046b6949d05f3a4517730797760ae998622d3252e85dabca4b7ca9c3a92a40a321ee1f5d4571bd6be300bda7cd7b343583bdc0b73ccc3cb158110dc422007bc8eba02b332741fb65e8e368bd19d0e2ea81bd0747322bbee8e751a10afc07392bb210217dee6650dda9999d49f3a25221dcb95a656122aebb79ad080a8fb5056625bc769003557a2d9591cfc0e3462e75f5215ea4321788b37f81a73565707ce2a713bf1c2e75c3f04d7a84d45152c4417b8368762d90e96b797e133e05efec3bc6a45f64a86dbaa031a230d6d64ea02ed06e2c7dcc152d4de800b066f989efcbf4eccc2c09a3eac7d2a7785adaa06e9884300f0d961ad0d55ba82352b8c4f43dc25ba9b4da9ec0d1b108afd2e6ee7c19177784b80428808c34d2c073bc27a5ebbf8f6ca193d4d9584d346bd1738f552afaa3220faeb498ed142f3c6c8c2851603ce68964bddc90c607b910c919198648be515b76fe45a6727a0beb8f915da335cb0f8490b12c83959115534c4ff38becc2f0b5706b6215b6c6f7427f742df7d70a58e2a8362b2e5159b797bd70c3d291b91fc49e7e8083248b7ff59e9d1febce4b51280d858efd83c24e52af3400f6d2012ced63b0275b365814697f84a9eb763e86c943579e7da77b181883f22165282ba6a442a8dd2a768d431284c362637934784aec04f03b36e4c35dfe43abba0ea91b8dbdb1086d6fcb9a8560c1d00041cd94215a161a92ac8fce9750910641effa0a0e57713f908c7379367618593e6a7a78f13013742092dca8594d72d7b956aee0ba8251e93057156daa472f847a5dcb751ee085a371647bcf182761866cdd283df6d0ebabc94a31e665568fd8408621372efdd51ee1abbdd15870d598f8ee068067c596edc7f05981dc26a1db2d8e2c3d85ea9a4d1dc3432d9edc4795ca03ca4661d2fc35b8c3ecbe832a1de39dd03cd6d8393dc472658c526fac4ff37ca8d3fe998b840a184f7c0b0ef34cb82df6e3b17a5c480b7becf9de2f8357387d57b4276341b6d162ed77d5b3f4c69f3a6ca15c00e63188b6d42c2f72d3f5eb38ab0b4f43b81d22354870cd26b1142f5f9c0614f04992c2afb593d4be2084625aed19d4df311f82ebcae75febaaaddf1a2f829acd08e45fc30bb15c85ebbb6440c890668a5f466a12ff5bec67640c24d671974bfba69ea69d4115255eb7e33786b7df62d9851a4e27504f111e5fa7a7311cc4b700953a4d9ae02fdd9cf7947299258758416513b5b568215c951018cc968b8b5a70773fab487371c3e53d679bf4ac08b55651cb2729a1733d5007c80b93386ba4cfaf274622757ba6bbfba51a25b5d4188ced99191086c521d3b94dfa93cdd62472bf79a4b560bdc485b4f583b8dd99e0599b1611f6a297a8949712f034966b680e2abf5d8dcfb8cbd6ebd15f0a8d9aab40ecba88486f6b301743afb2e23c8bddf67350c6f80ced1b2422c112a73086e7e7550f1272479066d0218c89292ac7f4d01be677a0b2db40f1dc3d252b70bf1491567c1720e5d7ab53c3220975dba05b0f96e8f5f46bf3bbc48aae2ce3c8d3cff3739a2cc0b4818c16ab18aa54e9956f2976c0b88f62d70a10b0ac908ca34558623ed1b9de2e3e779d4bc8f242bf27af923e1635be61e5ba7ad0b0d6629a846c821acb54e5cd5efc6c17cb57cbd6c7aafe5f42042dd3b03b478d43852209217ab799ef64541c6388e7b188715ccb05dfa25cec9a4a22c70b1b28ed233799ace1972ea68eb5960cbbb48b98a5820652bc42a96e6e8fe98aa87a4606171fa6775f955b993a86b48af33718748ab8034edf43d750078b927ba1c96736f746ca213326a32fee54129ece03da94877b5c5aa72a6939ebb9b82a75ad0ee83a396f2b1aef97e3108a1a98ba8f648122588bf6a26ad1748196c51792899fa2668420056544ac4b47b54709375e28b2f1bbecb35f89a2a86faf33b386d3bbfde2a36740a0ca52d10a422270c2e4b9b26c3229014d0b4f3e1c6f9e9ed13fc6436523bf5d5be51e1ccedd276febb779f7f847bb70e96449be0e54603a0012512b346192bc052970770bd2e047204afc0c3c590e72c3292490cc0a230571ffdf0df6f98bfd2b1bfc7847bfc7a6ff03a2679f02ac9758ce626ebbdd5181c55ce274135805914c1114a9191057ffe6962f8296c1104f18c885a0745a664f68bdede610198a08c6bd4b81f6611bc26576d5f5ba10d41a81bbf0ce8c1debceea9773ec839a93d44985239b462e8d9efa0a48298f7e628a31fd564149745c70a97df6ffd477bd7442ed1f3daed517d612d4f8a67d66360e981108b1531a32e543d5e988891d61792179a11186f155085e6b69e51a64e92822ab9a973f5c098d4843ee1f28182a53839f5b9f650fcfc62b320e7ddcf6d65770117e5b44d64ae9152c573c27d46283e7e2914fdf8ce26007dd78c93b98982cfed746862a0561893913d7680efec49aacc8049b4d05378682a21b6fbcc699092d8165a04555f7de227ec11b53e3aaf860d4080a43e539aa1a4478d9e71d738c8a946e223d6478687fe1b6de8d2f902da28b2e353ab9534b3d19038030e99227a484c28468ad6da89fc11b2a113f0ecac051e974b80e2eda79b46e0b20d78f5b09c7055f5d9d322f00b18076869e913068cccc71423026d84e9afac34d43c5a708ffa91b92b0805c4127694c63caa1fefa5039934febd5d52a215c510cdadf8c408310318e83b2c0ef8748242f4fdb970380d353577db651ab0be52ce5e9278b3f05fd49c78353ed6a75af965f9a8898f2d30c49ff8232ce3faf37cf7f1b581452dca2bcd44bee422067020b5b37336566cb56ef8e85e5bb568fb6b12eddcbc83a8ba3132b29ec6fcfdfd20bc8b2869cddde45acaaf549998e22046a7bad0d07449790e532b9c8b6b744b2102e78dc9fb6904b19cb5cd8f9550a8363ec0596621f94ee9b81881db7853a04a0e306cffe8f65f9af76191e5b39adc6260663e26909e80eaeadf1560298245c368cf8bb29c6d3b3e621d6742fba904f3941649b7cb21583b70ea20bf88ea82b5982ab28b20b7e1c56551194e73636810633840c2da6b1e01d29f6aa39d719e4826abab317bba995688636db225b14fe25432eceec3631a679968bab26f00e3a39bb93d4eb560aa1954bc2c16197c0390ef6d15e490f093924cacda94068097ef7fbb2f87d7905e3750c41e2156aaca43bc51834c49fcd3ad73d290f26ad70353581b4a86e732fbd805e30a7ce424ed234447fdcdf46e20de9644a574a4ef6ff8b04056f3f02dca23f982b9cfcbd3b3570eb54d0f9b2ec34d3e69e1c1baae23050e921b75f76b1341b607f4c1139e6608a20439bb45230424f2a90b82b7fe66a3fb7960b506d31e5ac4dc81fac56c4c5d899d8a79fb372a883b6ced5ea0c682fafe5def5b244d3295a9672823e927af7f4ae607f0c4517fa3a01a4dfe7feebd319fa68e0e5ac1981aef12b3e485b6d5956d497ac9a859499da91bf4095b5d607166bc0676af1799121d44e8e4a30107c87b2da9abaf38d19eded8aa283dfdb2e1dc081e3c2b377ba5bc6491cc4af08c40fbfa5e3fe2d45fcdc8b736032cb5fdaa88f0a008d60a86fa53dc7443836bae2475175f2d48163a52ee216241306d87f3f2dd5281b976043a6a135af2555ab39c71ee741ce9e6ac56d87ff48b510d9ae5a338fe50db643b8c8a710a80c8a5e4d278e667b4ce2dfb010f37b588987e7ca822676a1d44bd7419395e4e96e43489eb1167ff9efed1707a1ab36de10ca67563f7d45f8ffd67f7080242ecdcb2efea12c5d9038281bc53ea8159e43db66ecf3eabe5a44e0d4c0c826a85adf939bf4e6d1ba53c0760d4ec78cd93e1459cbed062c50403037c53fbaffb8f5996818aff249b3172d6a203824d85c82ea1c87fc2f7cd98425653630bb63cc9b85a933a4360cde66c974f305f90315f91f84297eb244c092aee996686c0b59991ee76b563493a2cf4f17043c96a5ac2d3f210f09412c9be83745643b2f4ef68aef932e5a606696cd08c0c2309038758bc383c7104e9cc21158f92e2d87b719fd524d0b056c0e20cc9112bba678240891372ce0185d0dd99a7e8562b3f7cc3a4cf175700b99e2e76a728d5ef2a0f0dbda248cc8a5def858e0326a90631206ee16479cfbc19c9d410327813aa9cd4775c2f6040f3d56f4b68eff2945bf48ff9bc5bf341ccbc685c4432aaecd303f605ce836531243578b89034f41e12d1f0ec9f7e2cb418eba44f796e656953a8a0407c66fda804c531536c9ad34f13106bd0f193cd3087eda53416af529110d3f8aecc9fd0ac7dcdc3a465e8382f46f92a2c1a637dbd030c929385bd196cf3cc26d927f8874576945633e4e8cac793d4528882b6e564748e93f52d606102e4da5349f637ca7bd86310894f60321ee3e80e6c9154ac2cc0bcd2e07660d25ccc46a7849f25405789821c2d0f19173c1c7e8461af047b1ed0de74dfc8841581915949148c8a92e07239a0a78ddb222a28dedcee448ffa408c3ca4778b95d2791d586281232e681f7bd0c580306dfbefed503f9cb8bed09cdc1d8832275cb04d568e1951ced8681a8d8eb23f5f994993551cd5f27357a63aa9cb4897059e58042642970ef4523ddb8ebc906c8425b41f4789c578dd222320d98c0d2e8b2672a674bb033ffc628d6a68a2868f06dae69aaae038b65ee9f05856a9ff8022bba53c2742866d50d101cd0188bd314d80840c686a55355f72b4ea066a4514322499cc291f481f5766400e43b65cd9c1df397e686c457c468618dcd3160872242af761619a70dd79ebf33514738c10cabeaaf692312f137dedc438a4f76f235e956700b7fb27301e26c1485e09755dd0e7827fce003c836a6f5f066053a3ae4a2d90b31389949eaee1535108be3e483b20671e0420935377d4914cf173cb9b4fb91b815d8de0b191e25057fadb1059733202dd1cda5e0b0be304143e9f1073d403af737d4f32f130f261631ca71219e0e5fac3fe76c2348d655d652f1e9abd43d1f58f5c17b3e5f1d82e7c566c6d0fea00f7d8933ce95567234748ac3a900103ec95dfe02d8a153d5e5eaa907048c4fa4da325c173fbf600e268c39d391ac87c1c366bf2d8e1097d4a99f5b2fdccbe7692a3b171651f9fc06d68e1ea646298162880397b62dd4a17658966a4592087c898a2858c587ed90f8bf0a77c038dfc39da1d546111a85f7577d4044ecc6ea7562746a7f895402b5503a81f395ec6794df8b2c18e2e6ad0fd4822d898a0dba48a0737219f648c1efa9e37500abc3399ba4bea89e8004a26199f1ce86b1b9108cbff1efb670c8a3966244642d767fce3e89b6ab559d171e83045693ead87b85a80d8a33b3ad76404025d7cfe89a54adf40b0dd4dc8e7079ea903b2e2482a7723135a6debff0b3f073410828b06bf45162851e9571c8c33d0ee9f9fda224df7eaeb4d25129ef146cb6507fff138fd140f094836dd3f051d0766e1d73025376037707972b9fed19ed7fe089c3906a6e0524c5b6de6189deeca799303ec3832d9930aa6fde709f372b365dc016a5704d0685753367b8f9bcea28f7bca1442848a84219b6ea4a69ee8e8044bd58c155d0dd894f738a38c46e4161063d5b22d769c941d216cf8bd1c28fd421cc0a827fabe2a69111c66f7e859ae6411cccde050374b66009fec37b35b7a86196cc475230ce7406789ccb8c754f2f44d556e435a82306400b087faaca9e83a087eebe71f1f9680c328deb82bfe6b26e11b9c3edca6cb80e847d2ef4f39cdc5b2a12265381ebf91eba1a3dd5e7fa06393c45fb91dcba420820bd3fee334b48fdf7b73d7b431ebdba79b2310a7fe19142df9bf9c661744ae94a59410b2c1220056b4e525dc82a0c6c1bf673a4da35f9f7561c5cfffb53290e7bc1d0b0209a180e1f58037f83669baffb476419998f96e34a5783a30cbf63043f974d91c34b87746e64df55078cb1f2b22590fd3026fe7316ce1c6418219f47004a3604869f04d4e2e53482b6e505d0bb3168a430c4a74365f0659790122463584b28acdd0cf6ac1759b16d3407fdc680db79c30db117c0926f1dc2171998d5b22a73df592df3667652b498e17e00409d8432ce49a4c677368aa3881f90630ab858c6306d7a81a08a40dc7a51bfc3eb8bdc321a56f849c3ccd3753e1c2f299ea5568e349c6b17c6bda497a60735af03b633e65bc823f852cffa21789f3e52fe33c44a5068882c559b0e548064883845b74bcdf71fc08890ba3f36bc0b5655a5de027918544a35e9acdeb1be1c1fd60e09546770b056410a0643036d030fc821fe9198f0d239dadf6db62da370752ee9270e215d4c4dd82b4e76362ff8b310ff2002387e74df61c357f536d5141099439ad9ba11262fa480fd793d696ef8c699ecd4b615ce939121e63c5bb7798abbc9cf476030e0743c879dac97adc8396f9ebf79b05b220ebf77a2fc0aef034bfcd84eb7d2410d9416bba980c361b70d625a1271b5b31199632118b4d2d063ccd2fb93db7ea5f037b9999bb64f299ddd5568704d24c23fdc12dab1d7221ffd85e4903902c3e45ab7abbe0e8d996a0f319f56637c8becef3f54f109039702432f9852a8de50908fac43755c9740a76d92c680667059a7c24b900078aaa03bd6f264af5dbe931f117e377c1063c3663b896192f3d92c973b795a85ab3ccc212ba6d012d2240a0482a5fe1eb473a03b1b8dd6ea9607632fbd511afcfb5a7956a3957109a0cf33c555dbedf9d337457a6008bd13b7ab9bc5ea6b67e2f3543650f146be0043f09ef5fd68ad89d72f41c8cb927a9af306451e2510b7b41dea918477431d933638a9fb0bd4a34b4adc238a90a3a5ecb2c7dd8d1ff990fcf55e0985b813263ef217f368e3b875aaa8ce495461c4b5858160f3871d7e6a29f45f0cb9362f5e7ff21ef9b4278c8b447b66419aa17e2fe1d951f5b0b027c9d7b54e29b364003cb2c0ae2b6149b95a953d449ae1f2288bae452b728e6a7e366292abdef8e42e2793e84606f4bcc76a1958d9c3beb65c3f373f5de874cefa167717089aee1911c57fd3972ae3135f404d68a64a757091e1293259d60830240071dce4ec2785439cf30ce1f5b0cfb963bde72a9dcab361e7d0c8afb9bd40748adf3eb15129bb4bf48a1ee705e2549e5ac75ee74c12f134d9da6cd002187263fc3bd70e58691d9382a163f6b9fc44568c063a6cc3e2bc932da2996b4d8e489afb04104c706a4ea2bdc58691a073117a7df6f41b93be67f559d5c8c20a933551fdc4850c27a1a0f21c82f15857cb3e82a72636843a0a95e3f4c08584b7cbbb518af99fcdeca3c72a15562ebb3e793e07adf05c27355bc8e7751f5a23d3ac5cf2191feaf23df523833ebbb92ac311a261e901ef8504367368512eb11ffc999cbc2ea3d119a9fa48c5ff200b378408de39eeb75b1e250f27ff2f9b24d98137fd283221fcb4af37994aed2faf520fe373e835ad4963265a490456c11ff10ffbf0ceda16c853cc31b78a7f47101ab525f605344014e476bc69206d5d2cf7074a0a087cfece676f8d061d3be2d7e21234c709911c5822a48a0acbe9bbb64bf5c6bb6d91566970278e177b899f5158a5b4797da28e8dae1e67a07f4269567059e69786cd9a440e82d96e1e0ee926eefe198fda0f332fd762b9cca30de277f4a22df0cc7846c882efe36c8d323cd30579d87c972d96b94f0014d1efa2b3b5597d0189a737f8717ded20b5317a26c03cb775c24d9425a46584fd72bdb759790f3905b4bf631bd96ff935bab36d1379152575e355c96c8bcb5fd80185a2404d9674aef46da01d5ad9a286ff7b81af87ff425d625833e7d9e0ff2910e00a04ad8fae61db4a6599903b6798f6023e47578b9c90c1bd6a041936f18513453513134b44c2dbde3a0cf415b6e020e01967722aa2b4840de25dc43dc560ab3dda081969d646788183d400e91ef1228d99ac625ce34d2bb223515575e9402b226f301a5be17123ecd9ab41361e405d634572a2a2ecaf1b52a39b577fdba835ab4b37a0a1e4b78068b1ef3f8d235244299356bd9d0d6ef567f97854ac2b1d3d21149b56cc5e9df09d831c464edcab791909c50d9be4112c5a8b94a79b45f3a43c51b7774bcda906f3f3bf0ffb98b06eea1f4a3d300f1a32b2d05cfabdbad02d556938bca0a04d35f45a440723e61587f55a52a6e9cd0e9af97e5db89408371af4e18b815b751f00174d579658432f76c3317ae539cc52e7a6dc035bbeacad1fa3511c5fdcca82e7e5334667f94e829dec4b3f62907b7b8b337fea6e8e16868dd91e87b2c50f0d6fe6a2ace69756937fd8edfcc99e690d1837e06f6b82e477f81ec04a2474b1330a8422078cb2f9f69f01b04f64b4037bf12c842edd5d84d5d0ecdcd02f9c6f884a5627c2d4bcb7006e0f38b3de61d94ca87a01952e4e7644cabbdab62e7c7871a1d52a7b59450c658f49cda6913868f3c0b8bf3ef906473928043068bbc59a839379b0ad84cc688a555a05b427981105bc513388a7e566278b6e746461e81432b1bc40c5e1c359e362a87758fc119ff71debf51ec59c519467531d359b6494036f255140eaba6ef539cd78f1a925344c47d17a4ddc7ba7f44e4aa168c2bb887a3e4d78cb1a2206543d31a13a99539c79ccba49a25703b7eba2cd975a925d601ba18d1db0fa8ace750f6d7680571d27143f0ed9c8bfe53fdef744659764eac94c2b7cb69f066515ec02d97f6f6cf262800137b10d81607e52ce57a2bbd4b412905e84d9e1c8317b0dca2e12544573ed51a5cd45fd462611cb9a7fc5144c79ea9c9d4e0e25aa806c6ec7a3d5db6b02161daf482f2478a688bdee15435d468c9fa57a20b9d747d278838e033061583d7b288030d30f936241ae3bc0b3d34d6cc06f77b573730a981de07fa4c88297769b26cb0fb80b20d9eb20f5fa8d32ebaafb3f0874b1857d51cb1a3f00f4bba35de47cd24d64c39b7dd39abf2b35e88bc78eb8ced6fa8b1a801e752eb05b890643e5bf58725fb57dde999ff9fb5460b83319511d64b5005cb376a5d13b43572ad92d52a0071f5d427cbb8538c35f27fb8e199c86968761de5c6200c8fa62b2ab8e19db5b741a1783c8a80efe1bbccac0291dff9cf4d84bf9fb7f3a68863037e2c339bded51d690ac52ed71ac7cf3b590a484eec2f82e0b4a111ca7525712337b290b7ec828db45469c0a71e66faa750780ed0e8b290f4c392dc8cbf8f5af51df101d929e51aeb1cd147d741e5c37857f3eb4c3780fe26b61b2123cdeda6dff7928de9db274b742ba4cb4fcc6cb3173723e8ab1fc054e054e3e776e768db4b8f3c3dcf4b6fa9b8498b55f7072550eab8b10cd3e99b1b896493366d542883a0ab981873c1e6bb1f3d2eebb73936255aa14560addc38da88afd216f05e542546144d26bd84b40912d1349877abc7b7d0bc86ea2142c01947fd4990e74b144aa592046f96de001bf7cb46611fa60190b2cf1db418615a602d159fab3a64927925ec65fce415f27a37f40b5097700b3769a3b1c678832f38a2c17d70d2f1f33a2eec17d49172b4ad3b142c6cc7510e345e00eb262bee66280ec78be5953a62152858c3ff833d6b3c6af350bd97933210f8ad73de17ea28b9daf070146c8605937bf91086a4be42b02b58204cf07d9e529e74f0f626c19d716c04d5053f1f043b8f97a770da3d5f8fe80d4320b8567b82ba1b0b743fb9ecdb2dcb61bff74b8896ccfa2fc50f01ea6408d86241d967f028b36b6b62491c3e7c850dbd4a7a53b92a9be9518d2a530cb4f38225b839f826cdf12cb8c72e30badedd9190aeb27fbe82622db5d1137bec0910d3338cc25045f8dc269cacd53e89889b2083f38616c0238a8e0299b2c1b4eac99235c55ab97432dc20bd18268dd20229823e22dd62e6977cd4e1ebef6c89e08589d26ceb79db0259e4c3130967bed5ed7f6843a1a959659fc7f9d1b2c69572ad7eb3885cd9a3f0bb3857a66612758851dea95cb93440155a2ff352e3150028a73a80219521f4846ae521d725d71ea3bb69ab770d4bc42f17d376766aa2f28adc85e0407e99f547ceb3c8b02efee1ae95e6139b85350d3c3d7c2b462fb59221b4267bebff89cfc04f69f53969cfe732461e8cd1093c42c434f2b9c91a96087498e7fa2d0038a97856d14f79bf9258b736d9bc2081a68b4d63fdca08148c7d0bee8e050b69efacf549b17f78168e5cc3cddf4b90d5bc11613465030903e0196f1fe4438f22f600c192d22c3e580c19e073f7e229edc6fc870ef10ed6d1db032794b15dc01395cc6497fcffd46b54ba9590eb29f4b10c7448596b937764c264bbb4bdfaa625143864c2f69f4139ae656a8c81c7f80ad5a02a7e9939f2a6e063b4e6cfc34a3eba6e4b7a8ab68da86243e8cf82653dde6ba8b7e343a9517d7c299994b160b347d093a0267ee9c1a2b77b96c1b5aacc1714b577f1338b9cd3ddddf2252978e9299ed2ec309be2e30ef635fdcbe43fac9b19eff1103086d98f4ca8480100b3f5ca6c51b6ffa949fed3689ba353d5cbe554c27dada90142129911b22190febbde14823886fb70c517db52d212c351f78028568733226f684ed974220839ea35acee27b0e48cb7ff380dff05d281206b84011f370ce542a09637bd2082678dcc683fa5e1591a489f6851b65a69f70acef9c663b3bf584291f19b33d6197fb02619f142f26c0de94cb08fbef9618bd7c8e85f6b23d4e536e467ed1f6a54ea19ebc7eb470ba6cd63ae16af600b42a74e0358b37fb0d3f3e8400015c904bb1091c47a15fc568ec27e6ea59ae4b892b2392451ace68245e91e4ec5fb79cdd759df593b57a8f8ac55013462369227db145ed6db31eac0b231a1b6bd8777ec2f2ecd511199941c88ecb6a7576cb181a43485bfff2bd192a032391ff0a20a8a4cf5215405c309e8abf163708b258bed767c7887c480e4219954ad3167327ccfb418a40c1ebd4d849ccad13706476694d853fed733196b9524ffc795292013e2f1fd1e1e646fa819e3e1c8a3d1bb8b9e5221de5752deae16ca9b4df33e5518ec8b0e5735dfc264cf099c105cf36a42326c4fe1ae2bb7f4ca119008f2afb8d21408b116f7989cc8cd9565700b743bd378af43cf84c68d87dc8447c03b83308b83f250250c96e71b3c0fa3b1585d158599a26670832946ad72a8263d76c2a78960d0524a1de189a643ffbd9beab5e2a1bdce208b515eccafb50796464a750416d42b1f4ed2826cb10bee1df66a84896f0bb9daea966d05d5cc2800a55fa32f78078a1ff8d2807683bc642a8a7fd2f237acedfa53fb5cdb66df93ca205e540ff72075ba12c6e391667de74c1fd2a80541c8f2ea8f273535ac18d15e80ef908edd4874586255b4a4a07601eb7c0a0daad4864e1066c400faed9d69228cb9609370a61061b228fa967ad0396f6ad00ac93a0e8bd69f77c3147296e3800e65cb07fa63d03dc8e6bd513cb31741b1cca64ab98930a304ea886a832cc8dfcc9adad0c1a63d546c3805bc2e4624c719a5e9159a1fc6de5bc556e467869ea6900194d70e98dd0e68c6dbbf98b2e76a6a04db1225f7d4f16daf366a68cef03f2042010428603bd483374642c11ee9926b90852aa13ae24302512ee4cc294311440429405928dc0c84344f2df2b3b0a8e5f2ee43580f793ce253493adcc12184c6ef1571e7154a203464fd687399c612a0d11e46909f2044d45c8c55e0be11006daccc801b510c765b7058dc8cf7b33a64d61e1c92115fc3a114011b20489ced00e356563d04aa78c1ff686f85f5fd86f9a9f5aba68ebe211125af75e38548b3483bbcd99555ac8c2dba360aa5bd2e6026f1abdd133ec6c6ec349e4b73a0a0ba0d5d05f36a6d9b1c6848c9963574cd2fb45649992348fe1bfaecd78616bf296b16f1398b0674ff8f3b5329f97d45635b6c82d6c61cd5ee8603f2610c150b6d2c2d9e6189af915e4d6b805f1dc556774c131a5a4e470c1f70cef144c7b8abf366180c83d4aeec42bec37972e855cf916974c9de18ec161842248f899e46c74382a0e4aa564bae324a0ae66a4474d93a1c5635680c531a6162cd7437780989e6e68dcedbf6cdffb759076e50186c9cf8cd80060312c341833a9149563f471763fca771209c7e06585383ba2b4c833f56e2bbe5b41286b3053038b6efda4999422bb6768030a4ec9da0467203c702ead9c4cf7a85f4e2976fae8962083157380cda8184049b88d80ea8183de07331c70bdb846c7da020154a1b4df6ac2cb81b4873d144b2c372f334d3c1c3cb3757fb738fa263a4ff87571ddf4c19e0b3b66c7e5d6e5e9491a965968a08adcbfbbdb19949f00903f7618270624e74aeae975036002079b2ed7755bc33b7a3e9a7ac0f066f3703a171f4c1cc0b1baf1d05a4f1f9c4af3d12c022eb2f38944c2c246a3d416b3ffc87568a3ab7447a7135a025774e11e254bef0f35176ff68519c583f64d2a3d09abb8c6915bb753562ff67620abe4f8263be6732ac19f2fa59412c75ac4281b28547fdd97b6004122b8243a2d0d0e65715180b2727a177140d2488533c186bac66328f24942d5ada74c71a2ff40c3e290fd6c61ae795f87c154c55203ddccb88e5852c9187aadf54e4d4d64f9cfabfc0fc007f52177ddcfb18c17925d617080ca947bb677d5ffb4a24b35d4bf123d2e4829c1e18dde28b59bf8cdeaa30508a015b8024ef9dd51782dc6c996b1a0edd5c49b48ab4614a6d5eb1b46af6720fb92ea2394f71109399c6b30570f63f434af1fa4fad6ecc40ead296410753c5dcfd5d27792434fd21ebdc5188cc368a4b7f6b3d766e8d46496a7c183c9c075140be5492488b828d08738c5ffc947121ade692b930b55bf6ef5525ddac115b3dc264dc8aae6ca1e7cf9ba0856ab0f02cf1e52d17856a1e05b913958d994e97b2eb57bdb7b4afda35fecade6ad907fbd4a0e606fe7d761f9b2f0c94d10b3a03d741ffbfc2613c759c1e6710b75183d9404150e31721bfa6dedaa8ea510bbfe7d54ec5aa53befbba46b6dcfc13db0bd49a5c8b8d0a782efbf941505eb4a0c48ad39a0f4511d1d4f15b4e906b277d88320779ffcc7e8aab6512ed6abaa2d33235faab4659a5a4b061026eeb249b41e03cb12114671c601f2d526460c4c5abef30720bd3aeb63f7553649f55f1162ffc3ac0db32288b01709ce0309845c230e4c362421c0ceda80d0fa9683698404ec4745c30c1d5737588f8e5d87c04446af936f2d68b3bf2e95eddf852f6e2c2a62031aba729377ec54d8988e572cbf16217d04c5187026c0a520579e4fd97443ff9 +MD = 369fcc0248022dc42c567ae4b9658501e66e80ee87786a5cf9e4004ae3625af7 + +Len = 90960 +Msg = 8c254defe9cc5fe0dfd1dc02ee826cab2586a767f066849b324c1468930a70d21c5df02201739d88bdace905649e9e88355b15586ff6a8b1674369b2d6df157777704382d22ee15f52a3e1879eae308626cee859fc9dc61ae69bdedfb12d8ddfc8e6b0d6050413abc63e2d5044bd0aeb206888333f64c61cd8dbdab6cbfdc25235459de841fe1cb541053328fdd014ff4aaf5daedf529000658cc500cd569b1ae617747e2f23e2c5ea815cd771f1360ccd2dd09185700d0eb43506855e41007e04e39c61767b4e23e939102449275858d16a47a6d8c5238dee5e070d27c5d9c5b7327d59bf0e481667b5b8d92d7b622c7ded2bb38159bbc73a902f60d0ea0e38268b7f2db2e5b9e78c7ebabcc4f33cd0f93ee5812734be02c151e64500b8881f7a760aa7f60787df7f1b8096b79ace8c6ee5dbd8735f1287aa2c94865f382dc2da7b868d347c9c446914702ead7501a8046a777f0de1a19e1ea6a1e99671e6686f235ba8134dde5e71f2f44e4f8ebb6be25620409cc2518e454976374d6b9c5a61f5f1c03c813777c03c73bc45ece51f31313de1c80a0ca1469c79372b2f35e1d77ab19d56208ed57d7a55413697680a1881382b3bc2b91d4a2713b3d9c49b43f93801060a33cac1d13501a5cb982a74c0d078e69af2404b7873ac71ff32b4c8f0b94ac400c0d583e4f3e1b0abf615a750a565da90a08973f907ad3b44826abae485f5a0dfd29663dd3f5c2a7eb910eaf18967cec3d67bddf46b7cd750bba35ffc22685f506ef5a9e49edadaeeea0284cb03e68cdb9b00d09228830dcce54901611a0dccfa9eda9c239ac389a18fd5be059b4ada81f8ff96fbc529a7600943e63bf54bae86692d85bfba80ff3fb370e0c8d9fb815df3617556cad56bb32e7956b13989cc9bd8d6ace3867704715bbb323b46624916970cb6cbc0f1236e5cd39beb7031efe2f1be59b5871160df919efb8769e5f954e9e9a0842ee495389b39fc1221aadf02becbd45d44b6da305c0185d3caed5bc1f3e07da69c168abaf493c04ed55c64a447e6640446cf3c0cc5cc1648f2e33503bcda935c92efc99c6ec930c613af467093f853d213c24c1dd2e7f70e682d50c24cbd2ccc99d71c8512c394a3630b4c0daae7e7ee35f9d3088d3a704cb43574a7ac738e1e3836491de76a340c4dd84024949d698134da9878feaec82a5f616859e3e2017bf874190df5a4572a5a7ee85c590020b296cf65132c2949d1f01bf681f9f4cf0b60f954fd445a462511650c5e02fa56aae53f00811f943969efcae4c7f78f3ef5f82dc294dd754a24fbf576d297725190a892326bdfd8e119e5d5fbd2e49d986248792a7bc7dba94f9e97ed5e1e4f5b8d682fc37975db890a59a6034bc8052379d943565a0a76abcf84b138ada17bbac9ac807b52e8877964d3a4c4d9abaf286332f40cd8af2c9acc35ad206527ddb66bfcec229f40c3f84edb3706259683ee47dbf5159dbce7bc6d38f16d2fb95d999ce0db7f0785764ff0fac790d79069bf4e5dad39523c8e5bdb14e7e7b25ee3a983e1b55b33c08ac773b7bc2b96a249e19f3f833f9f3409bd3e54f555971e57304986e37ecaf9e6a6ff9b7f9f0ad30b9d6409e1f12bae402abd7d85818501a1741558cbb075367234bb2d76b4dc2b973bc2442e159fb11bec8019fe312510aabe10ded6b9dc8116bbd0f50a31b4b2d503e377d174a246824ab0afc82e1f52585561a06c60a6e1ba81667ba3e03971ae3def2a34d6dd745d8b75c84b401ad094833226f66e7c5f46cfa348aa87146f08300de5be03f74394f8f6ebee2ebe90478ea8f9daac0501a2edb2e385efedb4cd256631d7c299bb0fd95ca01cc2b49c57bfeda082dfead1b723b9d49ee06a49e3642295e7dc6be5b676ce703ac2a4fcae5e29a354d2d2d76bb9e1a45c2236353435689a561a14c8721675e1b1f735b632b3838bba4c661aa7f651da267cf780a6e060c68d423d6c2902797de92910d4cd0524de1b144ea2542432fe66b7563323ac34a4f21c8ddac48301cc4a20dd5d669e3427dff331775889ab98839bfa5592e309b9ee72ad192cdf35553da3435ae4c4daeb6db1b7a29d6de531e5f08ceedacb0a8fea0a4431475e3ea0287cead231c03eb42f16892a091a0750f47eb307e5ac5cad4cadfb2bff4a443574717bcd34da89098ce94f1786d73a7e180d18a69ad02a9b7d237a0e3be96e9d8a4b9e54d559e373ecf4b071fbeba642b96462d6e17e9ae2e63468e2e385e55fd0d1fa6dfc877379b7fd55414f9f72243f4c3a9ca2fdd409eea86eb0de64d103b0cd382391aa62a356cde68f6c3bc7ac128d4802c5960198fc46337f16ce59119105ff7b7c0bd7792f2c0a613907cc639aef330f339149177ad76057720da512db43f87fa5f2fb84abe269c19e4aaad03f3aa4cbd236d30fcf239c40da68de8ef54dcb36f5a6f64b32b6acb6834e887c6a35423f8bccc80863f2904336262c0b49eb1fa85271ef562d717b48d0598fed81a9b672479d4f889e0ce3676e90b6133ee79cdea5990e2e02db7d806db4e6adee5ea76cecef9119e8393eb56beea52d3c08ebdfd7677d5a1bbc5b6543a7b744171cbe36630bb642a9404933138820e2ab15b4b3ce236162dedcbd003879273866aba3d79539e58c49eaabeb4fa550b8f4d79e637415e5cfb50349573574601341d2fd5769c1467d30ff0de5088e5d397d1652f6b0852e2807f8aa7523de8a5c125a74bfc6ea029fc6471628248c6eedaf99787469ba67f53c84865fe800cc9c400cb11696fd417a74896fbc8de5ab5bf22ab7e689fdb6bfbc6f861f6e224f5a33ae5c64c0422a94a08fbfa929e13d0baf8fb753f796430cee8151bb9b8c3b1e53081db22c01e677b41faff7e2ca4c854c9121c39bcd37673c81903e5985b77108e49a07c2829cab1602e7af9ee6ff5233f89d3e5de9ba550d39eaad8f56ebd9ba087e6b6a0c75b630000ed9477f7ff9ca8cd2cd2534f360ca6f0812254800e0d13d6fe60ce9992268e0cc7bc4dbf4027b156977dbf40b0fd9ec917402a11e0eb54b1581905f2f77286ccb9ffd4285f6ad5a094567722aeaa3782edc10a96ceacefa1a43deb7603bd76ab04cdafe5a5bc7245b3db1f6767a90da875136aa13fc85122335de3953f8dca3268b43569cbc333b076aa2c81a4609dc43db5cea3bcc405adb5d792c3135a1dfd3632091739e5867b4d1202f3cd774440a826ab20ae3689be7c595da217b8de55fdc59f8068b9e700a7c147505b33adb864f494aabc8669df2751b894c51087f73fed6d37e0a6d1db37267e09c64c4695d49dffa4403a028a273f482d93f7a73b7d2806a02a42d3754bbffb9297279b63779150afe1d80049fc9060df1cd4b8ad25f3d04bbdf46869860c647d663c089bde5d4c1009d6df8927f3b71bc84e48c6dadf6ead14621d22468a3d4c9c103ac96970269730bcfce239b7af861ebab412fc594656b5e24e3a3db7da62a13a9e56b9788487ef00d4cf927aae8098b0971c1aefdbbb1b1b881bbc13e0622e21afde4eb4fa64ad2913bbd2ab58adbea67e3ca701b34ccc646731423cd3cd9b5bdbca89d3ecdfe3cc26216ad822600922b60f314d41ae4253482570812907614fce960b53c04c3b3088badb7f9049f0bbfb0e4a112b32057eb762c79f54a21873e4eb3393392c1c1cb7c2950026be1db899b441fbc49a9e3d4173a7d5eb10497ecb14a330ac01fed73fe348085a5ee8cf3e9bb97ba22a751562c2a1c350e44cb6cdbccaaa9d606bf68d973506af8eda66361f310f486412ad87fa35e62a90cac2794e2a7f81c9dc013d590c799ad06af43cc919251bf9ff4c4d64e4ccdca82c185a33431ded90d77daba33eefb0b6331faf24025bc14ea3a81fad3ed5fb9ce92efd2695046577d6d264f03cb765c29b3f09ba6d21acc4a8177b3d94afebd19a7cbe72a0c15dc1628605da969f3e683be8d8f6ba05430e6530ec8086993208b8982ab1e6e34b1ff32eeaccccd5bf397d9399538985288e737ae030a5407284bbf7de6ee7d8b1e61133a04150194c98d8c5c77b5c0fc1c74b6bf2a8413401e82d123604142026a6451aa2d2c0c88b08e5f5efb89223a33b657a90621ac284a5748dbe0c0c382df2f76a8eeb8f61df2c2dba7ea5cc6f516d5a2d45f8629a6f3f3aa0f30130af1c3eb0a9b1162c73dd650879f0bd8b2130ef81fa9fd5e91a1627d822616e11f395fbf93eb5cd188cfa360ebaf28a3f07e6147578ea74fed03e01e55885bd20840fbd49bff98ad41bba21c903d0765881c57ebd1ec270144b3b3fead9cc78fcff0df52a9418da0f8e91baafdb371c780d73a0c152c431e9e99234411cc21c07c2f526046180250b7415532ba772e70e29650d1acb4c44b049d7a190a80330d15e79d26f8ecc06585aa9add50f3060ab641e3631dee71327ca7fea41f1ec31ca4ff09cd4a2690886b0f30d2468dc13a02bf39eaf040147b119ff90ed80f9a98305fdc7dc12c38616f55603a24af26aad0fa9a8dae1473cec86db17ebdbb8027c2ef5e5de76780979c65723d73c0ff0227d95074ded158d1abf96f1d578a3c716197d996433f32d3f727ae02ba2812e91044a2c808df892fc12b7a122de5981f153f934f5d1d14bc8a835cb2814e28089123d7b1b4a6ce8e12ec1c86c7325ad9e6cfd5b1be67f0fb5c62c374519c0807b55e38566b8ef197a7229ba1aeda4b46dd2fe7e4ed878c3775aa2c71b0797c8d81de0de0b4ffb8f187b7408a6946330f0147110f72e3b019de45dfd1294d4a42ff899e761861ed44ba91536a80dddadc5bff9b5bd6e526489e1924bb41813bd0364832411e1c563a499a1c687c060754f140ccefa0f3b56dbd104357827b17dc2e0412694e98bc793bb8e2ade42b841fcdf0eef458772430441183ce73a4a611f0a38715303de6a998d5ef6140b317e6f7f9479187d83c383a032e489c64af14830fd76d4d749e7369d889aa19068951754120efb47ec52ea7d08aec8624fc90ef2e4a9a2ca3aa7fb5a9f9b3f58ca10751b2c03567d187b9935fe0e3b84a532b3dea2ac45534d374843087a25fad29b19333718c2839498207987755ba407d8d7429bd12518de1fade557aa0dcd1e7f641ab791c801ed5310a639969156c425f9cd54dada7189cbbcc001cd4f660a57f6504210cf6e8f16da5a88c4750386949bed520bddf3bcc5c5519b36734c229f30625b18513ff66dedf4f9918f30bbcf2e0117e6982603888828888801e5f3bfb2df671ae5dcbfb2dc0400804874c01030d71b1d917eea9e55a35e3483d9fa53fe15fa8b05eb57a0250642132936501234add0036264de71be5080be718eb2e662a48a0b29e23a90498a12ccb9fbd84fba13db2a837e4bad32bea4a8438a99d1910999fdda47e52dc9fe070f633bc523319791056d31deab535c1e6472343bbff9c3aee58f82f3b326d0a36dcd8ca3272ba796269815f3e680a772859631f50c1d513d54c229c2dad0b05c6a4154fed608d26f008ca137f95b2f258e280a72406c40d9be1aa2feff580bb687773b34ba69966015c359f75e3361cbe090041fe776f0e8a3e194f4bb3d412647d795e14ece722de8d4a6ce8fb9ddba2f76d57a7bbe0ffe88cf763078f10f401ddafb910d97d43d0c291e2a084ef194bd44e50e87b1fc9fef2cad5ec303b4888c09d2a071665af1d239369642734bd02c72c94875f325214991c0cc23f5df6414dcc1ac04ba7500dd9d76afe8c75af0ff88e8b4c0e238472a9747051637fe574adc3f2041f490cea0ce54b345abad7ba90fc9d0131fa465f495b696045a7ff69070a189b3a55cdfae34676cf39091d4bb7fe326c6fbd7f25a1585fb98ce02b68842af64d45d27a8787815197d36c6909941db2577176190adaf3ba22e12f51b84caaf2e2e8c9fbd7201e4653cdeaa33d50e08588df2cfb571cb4e264ec9e5aa286127621ca413832d5a6bccdd28bb32f12d013c760e80d538e24404754342c6e5bebe9d3944218e2cea01bcb885881270373c4de9cb1374859ca3a92c2f9b064f2bbb3c0edd5862e3494ca169758f56d4b5401933c8f617ca42e390fddf6cecb740d3cb07e00675d2f0a3376a894f84811f830b0e88a733898d9a6844e326fed0866eb6befcda4b8e68bbdb2631270027de9bbfb47ab55c45d52e7babcb57910d7502ab8e7442587829ed0946fdc47e1b9ae083d02f9f0681a216679d088d67d085261610e6cd2122accd4e275fa632eeacf813dc07c2a6cf8cf898832b26c7cc4f5f62c0d4d93a0079c31651c72ae303bd48cc52a3dec171ee3bab1893b255433bf52e28cef517a419650e50d4e0e31d246939be8431fb3b4e560ba7d2ce74f7c3add4b325bf2e9ff42972aef966d77d7adfd88a197a986e45ee26cb88c9cb3c8eeff2ea898603369296ffb6b50b24b738f3254fd3f74d9d4d5aa8fdf632bc93e62215496ae81a0a8d241212986c5f5cd769ac7a64566f3acd21feb9dba7cd9071ea986a2a63f7ae4c57365d03f8ebd0fe99da941b0691e95dda9479798772b4aaa018a77878107448b6f8d0884f4eb5e71a3c1798964a0b77fb06d78050406308f8f28bb592e91f1ab9b617b5ce2c6e59514d8f3d73ec2393f9c23e6090bb4e154bd2a1724305e13ad61abcfcf3d97c9dd58b65aa2e1cc43a6d63289ad747b8481f25632f16eb6d11a2831ace5eea635d1d72354f33406ff3bc4620bf827a4419e9576b5c7d0e3537957bcbba7dd3b4ffaf9e789d11fb79386cf7a11f30c764134105047af3e2cc2525814a31cf29e3fdf27c9a3448a29270f5f4446a40c3baccacaad91b0a0d8462e92010d4c16162e08c79347545da2e45fdd864f150d39aae92b543ad2de3006936d4ba1402fed44fe430b1f0a806bf1fdaf09d74ef8ba61189b0feb1de17c2b0c51b906ff2669a84801fad36ddccc77713f958455b604fcdf82a44c9a8f04dc1ea615e591e4d3836e6b270b85570c9e44f4f2fe342e5fa1c648dc0450d10f4253d425e5ff5073fcf9e75c6e5bda758dfd35e7eef347157956557fbc4890e6843243b2af5051903c70df5fa4f64e4d6d246c3dfc98eb6dab1612551b88b2d2cc435c83ea8cd1736a5bbaf9565f99dd654100bccf2d01ae5f8fe525ca1a20193f0f85623fbcb765af43e0f22c9ca56d9edd592c10b97021bf4737b97005c303071d271556e7ebac33aeb912cdb75845407fdf556645220ef0c871d7b65282da4cf5ab65d61554901d27ad21e2b79cac72b0faff7ad8febd1d9af948440844e43520771a684edc5b953324e612a558ec5cf712f1f47aec756c4339d4c12ff36beb25f5fcb39b6a53c55c862a0688744b27dc8ff47b33d47f054d9742d6d076b5968c8cd26003e7c2d3293bb56568d712fbe7d9d0b70c9e2311407d5c2af2b50a5cdea366168f39eee722ab4fd84e6b88ffa1584d510c33a9b8a252e8669d98b468a2a47e7e4649202ad03ec0074017f75c917432f13c795921fd7eaf31d907fae060f6e33f30ff9fc3ba5dcf9949c3a5394096493ea2597b75d8697934afea23eda1015d025543b5db696e46376e57dbbf342458e148bb56dbbc7b0e16262978b6eb2db46fbefea89a63dbeb88b9bce116f78828813688337c301c358047ac4164c9e2af2d7216c127320a873531d8ff65112881c773a65a80bcb4b81a195bc61ec08817e5797548ab5d65e1e5de947dd4086e2b5b07ff130ee8ab5d8ba41f4e0d5a87b43edc01854d6d52c341c9d9a28d66c1ede4fa7aa64e3d69ed7cf0de22581e474ee1a2a4bf36e93bf3f0f98db8b5b288900b54fe5a6942562f9406828b299431ad75d345408d59873a9b76990577752ddd771e75798780daed7cedf1cfa545ab98a378cc4e7b469e60ea49e6d2f9361799d060c649cf7d5eeddbad1536f6b81ed9139720322837e82d84795b66637dae8fc020d9136ac348f85a4fd40a4475f3366c3b2b34bbb4cd69120edf0bded35a86ed68961e80da02d6a1d91891b60590785769d49b5d45b5db3b115c0792be8345ff3fe5b43848f24f5756c81575ef5f677b2b03b13573084ca889b9a3a6c891959faeae1bba97822b24cbccdca8bbc6ca8188a0bc6cc52e84017ede274279ec3e75bbd99c2f4e1931b2420c2e78f22f6a1089940529c48f4bedf9b3db9058fc0828714e7fbff61e2aa6c26f550d1b0110d134c5d495f6936914001f06b5ed2abb61d5f50c9116fbdfab54df988ebea4826b931c71d8e5a3a51f9e0df2dcc0dc1ec7f1b68bce36171567ff443e2464808987ae8123191925c8b6d862e52b5a7bfa03cc7a439ddfda9782cb8490f694fdeccd8bdd338019839a80b80728ca427017bc6e277d2797ac2ca5c088d62dd68375e43416e9366d23e32645e403e200223d9be0a78193e9f59b78e73858f0b27aea75b1168d639d6f6b4f87e1bd9b1df8344729e0970a5a1dada2477c5d68b14a142708c3672e31cdfaa487e7a01c205cc36951bc07b4748c2acce83d2fbc5a5bbba34307bfc0b2a757cd4cdcf28e91b5b4a9612218b8beabda9dd36114153515a7916ac9dc41a8644b71deaafc18f96acdae60f9133fc0e084be0fd2559bcbe19f9783f107d8996c9e38463706e3dee5d721562b40700394f2d6a4763975a3256c60986688ad0f2718cc8b6d5817cb8d99a94b9fe7740e30ea8e9b370acc464ad692b012a7e991fd80d2b53239db45caddef483d5072691a358efbfc0ec73ab9a5d6d4dcacb4a856a0f5cd70f357d604699b54edc3939dbc9b7dccac8f8f09d9a1d30bacde35da9a3edbda0eccb405a30654789787ff317de3031731d34b3a1192325d6a8695b231232ce4f40d1a5a0f7cc2bb23e5ddadc4d7c9e372232456cb3f9ad2feecfbb5831791f40afdb05eb1938e257925559afb3d773857c642e46e71b4735158906df8e2b11038e69f98ef1360be828f917f89deb51ec806cc6c62f0284749127c61f94b3643660e0e9132c3df8f246ab6e4d682299ead29eb770e849d56cf61e619ec1bc5927cbe26cfe36cb49f4800ef514af07ebfee78c68cdcf5bba9cc8ff61e3b1a0907623e0fdc68d687f6d797624f4df25a8a743b8633330a2b4726e2d6f74c10a7a900d6f0402bc9ff9db7783765474e660525ba52f47b8c9538c7a3ab2c89c54a803ecef181920dc49bd2eb971ca0cd493aea3c53581d44a0859519a04659019895056d3c2907697ff80e37aafbc037ab31ac0bb0e67ff7f5357a8edacc238b39ef3bfdf6c0f1a7d8bd55a6978a0f5436f1516d92270a703c505d488446512cd696cac44accb88d76f18e7e8751f6ec9082c2ab21a126761cdf2590c43c4aac1793980b5ed7c3e4029ca108a1d9dbc661ece80c84de3cd03de9bcaec23776d3a3ed8f195a687c7323c6758c0ea927ab5237aadae466b247487609eaa8bf3d6823ac963867084a048278f452f54943630a6cef5b68bff2a3e58ff48c9b5a07353ed994aead3d955dc6ba05a17f4295b63293a1d9397362acbb3a65dbc5923c009d7b73c45392c647989290c3d31b876c72b2a79a7e0a6c29738144204eee4492e79a1ac2818c438aa00a7efe1b5c804c71d3e9e7600a77e4b46c79a45ef687b3c53e71f061b575ee8529b59b7c8ee81fd8fd4f0707fdeaa32702edac1b336e2adf7060951894c43bf0f71ee1203826ad4e39c1449a6a2f2f744b8683b02c5fc1dc37cffbd1b19938887da11a2fe2a4be7c8e27e442daad50424f2d704369c33e659ca668b2955aaef6c2278cd014c91a0a04693026d4cccd3917cbbafd73036a21a6cd25e3c77166e1ce96812c57fd889fa36f706fe0f47002aa46aa05d1850db95d2c7a8dcf4425f2aad83f6b32a8d2e37421ec44868dff45108888840bb3efd4c9acaed8363db6d15dd30eb42e32be807e68ebce4fff43a952779ca1aaf4d71bf3330beb83c2e025ef71382fd104151bc92ab734c2b304d777fd2d8535af8f35e2aad7ef3e3d6a9669980406a6849e5f5e51969f680f0a7787018457344eddcc9efa5b0bf0151dced232b95e321b23f144c3d137c77c1c308b6aea4030388a853009df6820b2c1723226a062ff316a7c836aaf23696304aa8922a568b0d55e0a9fc1ab2d567c1e2d925c0137942f3da6242c7a8cd62a888e8c10fdf63c8d2003f30906831adbfba4f9bc2408797b62172ef37899943b7184991c3c125cc89a1735c83a92f53721826f2e50fb377fa178a9a6f3732dfc8633ba2ea8e699ee92ef6ce88d816ef8596dfc9ace3855a2c4719e2d314129d79144f62e8b977a67d133a05048790e86690da9e8e7e85b4b91a914707b2c0e33585e56042b50889b1f8ad9e8b2a15b49190c7d00e033d1e4d2c91356185c6677a52ae099d13749f3439c20981522dfaa330f81ca044040d44d78a3c952f8b80d3e509ed3c47447d507127c48b723220f7dc1bb2f9a383083cb5fcdb16f298d5ceb77989b4e300aaa3194f6e0e2cdabe1c1c73515e9422759132698f4b8166ccc7647d5dab59318db8ac99548dc480289c5ccf7663a87afbeef740d7b75e8ddc5a56a5d7642c4fbceda5a6169edbbaf6d52760708d52f4f1a25f1322eeec668af428538593dec3bede9ee62295f4e3af72f6d6fe5026190d57e4611f56ad996f213436f69ee325e9f7e2ea171782b2c8e265a37e30945f857c21bb2b93348eef6e14908909cbfee4b63c2252a82770d99fde565ec31041108b9171b608f3cf92473420eb491ba735b5e51f63ac35d63827db503e7c4c663512ae356d4c7dd3de293d486bf134c733638831d8b8403b8b06e7318bb08b27498df276bfb2252449907a77a986b9d7844b902a1030c91938b98c6ad5246f1cf469e8a60bfeac496b29864f127e1d409eda8738a8ca5307d7bc257c993c5aaf9c430b43f07655ab9930eb3f454bc1aaf99ce81e10d9508fde8b6ce7466cf067b795d4e10badd3d37a6313b8a074696f0b0f4d2ad6d25409b3a3ad2b6b3aa2ddeccec00d9c298949852c9a5bb28c571579ae00ef6969d00dfd9170b98629f46aa27a771a406df8862fe9d988f9f82d269bf5bdec46f4572522e1522215cf67a65f1544a786ef9411f1476bd0f54c5e2b0882cea20e064bb7b9ffbbf5a87f7f09991bc325ee230e656fb1cbc4230d6c8b35b1dd911d14406e295938949ccead1cd71a7d25c4acaa0901b573c3119fcadfaa1f453a02a2b791079a329f81416448af8ddd27d8e109654dcefe5e2f880b90ec37a02d4d3623c8cb1f4466f45c472578e25d9c6974af12aa6ab615fb6aa137627778bb5b53178dea74e89b5483c82bc9b488f414bc0d89ae15455b039c2e4ba37b3994bb6df558fc1789ad106c69d41870f9df593b9742df5b26cdb6b1053635af5d29fbfb6fa26693c20ce66aaeb6fbb3fabea587fec6a4a8d4cea33dc89f8f706deb8b9fc902b0660c4b14f2f93cd9da36029805869da48ad9de4786dae0178af669e8afa3e27ffad2d84ab9ebee4960265b9f48d130358da08d2240ce90644b6125a1cf82da1beeb034f613f933a0f2361a29d65116fe0db34bb1e016290c3e389f3553e8421aae2f018595a3b596ecffded622a8ca64a79cba74e9442265d0074711f136c2f2b599ae97b37ddc91ccee1a12a22ab2efc7c729f9c0db1517ad37add61c10d54a91aa9c9af1ea21082e8b4c6df97979160acd3a9f0b3d6988226443e038e8e178cebc6c1dd56b2b807e51f6568cf7757dcd096d032cfda83ddbf799cecc318013d9599d7ed283449128cc984ad137406dab263194aa9e49af366c2ff06a7d29922e0c915c7dc50490da65b2e96aab628c118e08e20891d662de5c7703884e567a493ff8353ba30425ffb7c680bde6444f9cbb8369db7ad6ef1032ff66aa078f32b78e2287a09f9bb7053d53cf4f5a7e3ea939119a77abb3aa887a39a8445b4c620551b0c2213d63da8760db13938a68cfc371440271c6f53bb3aca636fb9c167e9f35137341eed4f6f2ccdcfc2ef8ac79781e8b206e3f24090e44d591144c65ef01a2db2997366792d3cbd9f77627a1c2337b5772a186c89914dd3845330eb349c915684375a6a434a6f842841d89f14082225987d0204b7253c05ed1dc35a70542275b5f81a21362e8dcb73069b2036ae0ade1ce6ebe351b37a8b9b5847389a8293324ec3fdb2d9415e3986b0f1260b7db7880b4c1931dfa5d00c96ea02b03a8dad34557f4945b4eca9776b2523d91adef0cc6e99d515ea620330e7bd3de7d9dd3824d51647045095382c2a4f7860eb377e524cb467b7f952dea095b83f08fedafca9d36f3f1534a6d101c9143ae406f12ac1ad85174094dd2804a8c2523932ecc16c597279a0e8853d9e525eaf8cf475bac199f42dd8436ba80329c5bca2fc7b4e156e073ccef59c44aacc1421813c2af6fc19e9f0a68f6427461fa8c66de4ef6c4b1b16d2c6e251adce401ed6ea6677a817344ca9d3ff306d759253b8bf72b0e3b6678781b1370e42b1b56417f0fac696bdf305a1861c3742378aaddac32f267bff5a4292b77d3ac9fc33cd2bbb817e89945cfc1de86ce26e3410a0739ea2b9fbcefc304dff3b3c0b56c3435c72830649447a1a68217997b8152b14cd7b54d22dca5637f9b2f97ed0686baef03e86c89e765245c958cbbfea82e4ef2e80cbd7d79c6f40dff74067dfd935f43046142b50d2ee6687b6e8c3ca22421adfd59132c2ec4f3448f7965f025229fe64b3b49726ff5566eb625a09219e4d7d28a32e49b661fff97ada86ceff7b4eb4d4acef74eaa68f2b3d84a9fbb69d0d00501228867ba38679bec7951c9ffbacfec75a4b2b626ea59fc5465b0053c88b8ca1490950d85bec9a5be64db2aa7b4bc587e4522257009ea9cacefa7fbec7ce076171580e96313a469b6035f6e8a234ef5a738cc29003823096440ee2c041de5bd9b19e2a7dcc7764c45dd55121196e66892f8073d720591e6fd11d9021dfc46e5132620b55d5abdc1f04b62c1c8701105b3fb69ef2ff2c5a9e9db1f1a948872a111b2c19e6f3de96f47e5feda295f6d71accb6a9aa4702cc6acf516d20242f75609585bcf8cf19798bf358fe7beb54a20cfd09fec7a0e45c1d8f866c4d1dc53988c8f35c5210636f2b8a2ac56f3023587bfb360311b4d9f2fe07d656f9d94f5dcfdb0061bd5fc5601d6b5cac460c6be3adedc5225028e976545ccc93ec00d8c97ef7343301644632aabf7619c729352aebfc3ec24ba71cd068b9ed8bee3b6565dc43163ae6c6eece18ae0176bb2c88157c502a4acbd77be88244c3a7c732001933e82edf342ec51caf5f842aeac06d8caa10112498600da6e925d54d3e8cb0cdc90d0488b243d404b9fb879d1c8beb77bb6579b77aebdbf3e785abe61df17e69e8db219f29ae226f7ca9923719350abef876ec6b3920ebb5c28ccedb2a0b70d5d67a0c8a6116b74341922e60a867d24aa96cf1a89ca647d6c361c5922e7f91f9db114db322249c6a50dde28093c94c01166e11d66c26f73c322d1875f0f8e6bd41c86d803480d8caf1b337ffa0027fcc86a5d25d714701d1571750eb3a1c790a4ec8f35b5ed1734d6c3cb44598bb74944338bfa673b26f7b7948f45bd29351c64c3967ab69bf76da089fe1ba429b313f93505d173a0e4924e2e78c2f810676db814352d71ef4e8580f0546c7684bc0b6bf1536198d0495b3d81da0ce0f1df12f360c3a494215d1b1c7956cd2d07229e20eaed115363c5d10a412b9a0447fc9acb2bfaa68a0cd3acc7978da4543b972aaca44b671fb5da8238eed5e0de8d506393f82279cffc12a916cd5188689c8a5f539fe6e97a5107fd4ddd7187dc2c6b1bd237d3b4d269ca9e8ead5afff6a46c9ada50580edfcfce90bdbf76e589bfbd022a7da6de3de04bfb939a02616aedbe7b9548074ddc7caeeb0ce76e8063b1b6e4f13be45c6efa175eca25d05351c3006018f98d3cdd02196abff7b0eef6acf902caf534c5f211dd2696d35d5c37eed2e6d9d752327ddaaeae4b62f697cf0bf40a1c2c109143c1dde18e24f1c289aba67e5c83eef52b70cf1433bb98013949285969630054e074ca2e249d465cb383dba51561cbcb626f0b3b1d542db1e1ff168f371c7c6764b4f25ade9eb351622212e99903614bbf1fe3914cdf203035a83efa09caed6f2d0d170630bbd16701f0ccca5beb57ec9e2dd8a566bf07f2c0af124855f0ebd2c5e7889eaf7718f41f6a79b5d28c08348bf36ae5df765d7fffae20f8b010f018abdec7a2cf53029f27099a3aa1580a9a051b0ae13b97894e6f1ffb798ccd82c76b4d64b0f4d226ae9558aec72cf1c7b3960f4915ef9523d48b6f024950692c6570dde027d466edc8f6d247f9f9cbd7e7cb4a95f28fe1a5a8c125c5e6bf86455958eaba95d293d074c7f0c6317c58b3ccf1478215811f9741ccdeb6e00ea77639800e647963eb6728955eda0c491ad3c9b4909ded67a17125faf465b3e24f277c72a36e512cd02a5acb56d3f8c4a4c06491c039e8a819bbcbd80152d0cedfe1a8cd6448ab81e48281f68344759368f233f520f695c6eaefa9e07ffec518fc3d24ecab83e7079b1844836ebc0129f9f1ae7b6d448348877556a0dada1f750682a76cf39092225654091e63ab29fcba373a80ffb42fa181f54895ac754e57916a76aad6ff4b66b8be46142c826e803c4b7e9242b609666cd8064b6f40b0351f4d3932c030615934bf81f103e23d48e2a6d14be0da9f0baaa5f61e9dcd039222b3559149d4825e5ce05351943b24db6fc1d90a54825f05cde7be9ba28aa6f32e255252ce4c0cfa83c930a2580da3bc1634fc5a185dc7f93905c65f280a28dcb42bc5d3d8178fc26bd2806fc9da384f8868c1b7a6cd783a9e8883b598bbe7b3373f16b0f1b7892a5774e9165411511a38e5bfaf7a41de5e40f89d5b7f20821b29c7cb56a5bc67b6e958c13291439ca0aa245cae2d6b68e8d2de799d45c886892e5e6a516e96c9dc93d6af410c0169774ebd1f301a9ab65eb6928f1787245361977b6a1da6c72e2fd98719ce2eab4612b9087dd1dc6035148ecd6446adc4775917a7413808dde3054cd2874673c1c0e75baeff0fdd4c63ceade78f97341960b4015a962cef3ba71140418e2675e55889b9192956b7cfc0d1a66977a5b4a3be26f71dcf68d460e8c8667c74fa9f867b5e43cf7322d66aeac20acba2eea9e3de065b695378430e069f21bbf24f6b15b7f9ae4a6310c39e40044d9697de7e6a4ef6c0b5c8d7d573af0a04b88c7163138cd03b028f8d09ea4f3ce152dcf1cc978f6ca98ba603e632309d71da8a2d121068669c904f1413cf86c05878c8c4ff0c2dcc886361891fda49ce1b9a91bef29ce941256c28226bce7543358101c49028a8baefd591d3ccdc3910448139c37f097de4780eb1549c579919eaf41e8d2a8d6eac424a9d7077a8ad089f26c8c721f694c4f6f06117000b70c8eb5a656b28ab0e15124b0afbcad0141b8de3e53685d4cc6744a9bde6414a8ad4d92c7cfb04f1f589f25f60b210d2fcdd8351059e1534934fc3a32e4edaa555d226d2cbc959f2c37f44e025400431c5a331e6b05a5a9677e3066548ad26ac402546e5e832924dd6699c75cf31ff6d0d10fc2d6c17b06af8d58f7883addfbff852cbfe48e34833cced6b98c4e46cf541bb549d9f52d122747bc14575cd4060ecff28546437e675155f24c1acf3f75af1e6ddafc078176d995a3e648568032f7c7eeeb0d0cce7623e437a78fddd192e9c47e9dc86040dacd605794e391a928c4546716c050ee58ba64ebf373dfc3cb0bf432bbc46832e50a8e1e47b07517907d60a731e776a4b61ebb57574c3fdeca1b96cf5c79871e4098084127386b911128d2f4620ae8b93858d3c3fca464ea3724919ea76d26cd937fb7075b02d9e153cf9297d1b20df5856e92770902b6afb92bcfe7c52aab0885c782ba0c9628cdff7987d8a8664d1f466be2baa7ef9df4f93a37f2de388095be7950a0617dc11ebd2f9bfe0caf10012254aad6fef281839f58b106191d0b3ce79d0b03833e0a9b34f8b5532714be61c233d2113593ca22528e256c9e63b6c7a8399a2999616d0e0ddcbd1d211d +MD = d0b32ae843378ce30423df5496d381b3091d7d4b935afd6a75664fc8e6baee19 + +Len = 92056 +Msg = db0ae31a6232777c1e93d3271ed29c7d49091013f2103c13acfb6fde5fe3eef59beae9192d79aeb1f0cc1d6de6b15c29878ccc14599f3b11c1885b5d190b72720212542cfcf28f2b34f0e5789c04ff6b41dd5fccda2497389c05b8c656ec0eebb98c0a9bf72680b1910813916954ed0c1f02b3849a28b750e57970613d0c28266860f5ae489cea0daf1b8e0075278dd4c805ae83c433052143ed6a76f7f52aedb694fcad14dc36053731400de708498ae5ed3a137ecbe8725f688e4dab2f7a064b3206df866fca62d1521000e87c88f81dc33e7af07ac80ce1f2c42e82408239d041fd8dc3dc10eb2487e6209f0db3e4198ea10144c70eb87093f460a4b2a850edcac8fff6ab6e6ad9d7aab63542301781564df09f3a203cb454062c380d561149d44f7d45654ea5974b440ad1a36859fc24298f2b5c6760573ce2da66d7f3468d677a4fd891176607ea9d649cb9c37132ff1d2510b44beefe5471b2589ae7b5608b31bcd8b73173d1bc9b0cbe0baa29ccef11fc76cb35ac53a399fb33dd99276b495c0d6d6004949cc927495e22834772fced5a84278b64fe3143ff2229736356a8e38bbe13f893101a2a65a484b794cb2f99886252b6dca70658044b05dc33c8b1ae7bf4587537d6b68aa6b9bbafd8808ffece39d41fddf52bbe53d6f93c5d696ba52836b7e34796a53155c54fd2db3824027331332d2e90a75f34ec8dfcaae2deb1d9adb9aa8cf7f005b9efc687649cf78ec171f94799218221eeb54a82e2db12b8d581e532cea29ef01c60aa383d540f8bfe22add7e450c4eecb58b737cdfb10a365d9c3e3d43fb7d9c440824c2c0775df736bd844d8c476ad11fd5d8332ebdf5bd1dddc26687544a7fab6d72bfa5d2f74687501f63d26a04609cec2cfdb5387c761b7b76150ec4b4406ea303d6f0047302567b055db1d48a0fbf070818ed911ce5d8cddfe554dd797300515e95295c4fdf16a6ec9795278a52f8eef031428845a0c87d4633f40ed88c02f0e9a6dc7afc216a6c1bae16c373ceccec5bb35e6e852b7cd26fad66c97fffd8fa4b5863b0f67da423490d9148e4d7cd87c13b8bc459da6895a29e27adce4314e5ea3669cecd386674cb32af283c125d59c716751a42521e1f95a2a11c51fa293c5ccd5904ff0613c938b9cad217e30edab3f084e0cd170fd8af477da589998875f989abf3fa5b5ea9081f6ee6d6de54733e4645a8689da06955f917d9f385d52b7707fd3c4dac898cbfb025c71768b0cbbc8431e1935a824a30240a1a2e5381b52ba4a71e677e46fcd6286a034826b63cc536d41cdbe237e3b474cee6889700abadfc443ae654f971d1f4b61be77ce75ededa96caa0a903de5957c0ef90a4e497648b5f1238a513743981948183ffa6aa6fec047b9023a88295599a65d521afd0e5ce5234dcf3477c837b7fd49c038697fee7b79018e688890ed6b619c471c510a821b80351c3e803363ef2759e4cf9a0125a0ab8a976165a1c6bae4bfd39b6bf32421b0e25ab97a0c83876e51910926b30cf7845d036e46e5484edacedde17351a9bd5c5c6feb8ddc01487c38b12c351d094aad81bcd753e2dbefe9cf4c3492aa79b82cac451ddf2944faf6162b81eec8855fcdfea8e4b622e864b9cc0addef88fcd9c7d9c3969b7eb46587f3e7507a3be9ff8dddb1dd942dd576f3ccfe23b4729aead6ebd0a0e760b950d5d8cde101fe9bf29525be0918890ced3fd8105006f1bbb100eb5681eb59bb8588ccc57baa9a05008cdeb6b167c0f39144f728ab0f8cc7f8eee03c82d1f022ca49d8b7679d968df11b11831dac5af429ab312e7bf7cb268547d26aebbeae56e8c0038bee037a9d8ce9c50c950ddd767f1b8e0a09e6364020b4cac704dc19bfa79455295604cf9c9a9f023961b2d3e1593d17a59d03567d93ddce3d1453bbc6ce6dd679e7c71cf2e3e4d0f2c8c4c39c80b9d3e57e76b246a569e9b3654b1cd127f58f64eb75e9062f61381f136b3611bc36cbb3f668d2011d0120123debc24a78d187d0a835bf4246bd41a88bceb3a7d45c05f84b013f18c44c7d40e55b37978aacc6a76730240df0a1f4757516c2c692d58b9ac66880f162f30726a5c40322252c55cf708da3cff4b5576f1c6aebd6bc466583afc61df6bf9dc6acc44eac5110f93b320b75c1f11ba0757cc7f3b73f1b5a99994e429f8da2f3c3bb8c20bc8e15bc80b6801008d92d0b5385bdd9ad6a77b731c6ea058d20d49c05394363bb40fa1d2d451685fff0f29dfb73474356bd980534f0cd366f161e419410323e2fce88c349c617fd2e9e31ff742cad5938a145edab013dfeced7468a7926a1daa2a28757dc20c99f1e4cb4d8c69a3745dd7f48169de0838530cb141ebb65d85e9b23bf80ef3d7594566041d1faa42d2ccdbd672a1275e7f2205a52a662b31ef3a3b9f8e7880462035e44a1921631d6398ec56bce13a8b06d23ecc6c977fabdc141ccf934b25dda15bf5e9cc2252b7b91aafd1baca6612820c3e939300121fbeffdc48b0e723023f20018f9092c79645fa9cf416cd688953187b97483081021a65f0a761dd26586c1a9d982113503d9c911a2a3b6a80540c8f7c43c6995af760df004820ad9e54bab4308fd7f47b122f76cdd0b3026c0710e9c725c8aaee6444d371b767d8f96bad7550f33fe6b6b861241ea3f8557a2702afd2c9a8f5e9dd18dbcb71c1dfd611b6d6755ec34a8194e421930075b43918445a358c020aabc67f608413a932a2eb5970142efc906a3c3ae7b172d5bf376f687146094e49c2b4cb0a21f99861fe6d17bac3e06668df12a7fef07772c6e3a0e17daaadf843bd2c8e212bb019fe26fb741efb1f7b346ebcedcfd68af76bcc3141e7da068a78f9925b4e17c3a867db3af1253038b57387af6ee2ea29be3e6fb50c383a8f9f6a169a94f96c90be2f79901165f9c8afb6b84e9dd091d0419f3c90a2f762c581978289edbb90c3d5c5908f4749be5bc46e8f2f0d01742b1c0eb148989dd934eb71cc04a7fd3ac989baaead1558f44e9e1b6ad53efde776c81d7c616fa4145a3789617f6646b11e448f226e0e0c422d873dd9c5a63e825fb04bec6f9aa29aa1f06ed17e9b209a3e90a3aa4693ec1e852a566a64d54bdb527f0a8fc7ac01d2a8a0629a76d9035ca6f8a894cb4960efc1f1f58b573e9e38db8ed9d50e165a52dab2353aec82678ee3d6fe706091134c80788bbb0154be41776a5a6aa75c04a1b4b037216439d59771c625cbaafd7bab2d288987e7ba248ba29bdcaf27ffa935c324e8ec6261d61cdd40bf150ef0f282447c9f609ed1595dd98e01210473a095828adb0a6b9cd16582d11adb011e107852ff0dd38b3cc55ea8cb484ec15a93277f5c7de9e44d60280ef1d99c25d76dd3d52a855f314f00f48cde12b6f316f9922604622960e60adaee1d6bb6f1af635b47897672259a94c5f23100c7fe2b3c3bf33cf847660929e48cce51d9d9289945169651aaecb1e939756e93105729d3ab8340d0b2682945db878f1c7350b55847eecbb777daf786c582d13a1ea275685732ca5bf8ebc8f7264ada3bf20ce858ca3cb41847850de5f0a713764144a062c5ae242a89756ab66b633a30f44233f3526cc9e4b87f579f515eafc836d22d4b7d3208acf27970fbf14d198bf8b51ab0570b87ad493e571b5e1600b05dcf9e9af48ac253b27c8e408e8512ad5dca2f386e9567f258269ed28d69b0bf248156d9c204fbcf4803151c69979025b1e5c3c40f97053483ec915d45d62a5529bbf8704c3d1f703181a7f838f12c8583bc8b1ba09cc9e45ad4d1243dc7f812ebc3f5f7199fa7d6fd9cb95c632e324d51a2e777c7f340922b93d0cfdbdb8468d93dd1e6a0a92f740aa8bbc18eab6bcd9a3d6b90ec56d3be949e02a8866d69c7808e1ec787e600c7f72a41c001f513b6cbe079df94142dda2447f956e41a12df60392f0215d2d65331b5cdc06397d4796530b4bc45d7a975394627537b4e09e0f6c3a53f00fc1a9648cfc25b2a00288604a28ecf780dc100620d1f169295d9acb2b1f3c6afce4811aadcb1e8dbca8a8d18ba7a81a1132f1c2d014318e07dec7332889d4198c5e955e6613f01ef6374cf2ffd0a6b67a42e1908c725e2db62ccd4e4cc2438428f68c379f1ac2edb4761ec98cea0f5222d589773c35a0cf9e0f55257d11b03336760fae402abd835f2ec6611b3f0a7771b2917fc8a31efb274e07bea4bd43af20a4c5ca318908676027ecbf9515c0accfa3a0b018050139b9b38a23aa0f267f4c4857935a7fcd211d2937ede0b55979a46e5e1315a27011bc04875c754f7e2b242c6c11a456313a00fc4ff2e667fc6658dc75afa5c4940c980aa56fefc5763c0e17ad4df5545e397067ddd68d72d1fc53b58a8cb1b195b1b58d8d66ffb8333974d0c14e37c37ca6d53489a1bf2001c2fec148b322b29a897b55e6488c72e0aabd20521c50e9b20a9629fa5c63b7b441bfc7542bde0fcb1b5329591e8039a31751cf05c02a0f29ec1d0fd90f618011ffff9159fccf1051efa3d28eefc256a40998a58441ab7c09d4d1adcdc0a1c3418627e5fd2fdcfd548dd4192cc33a110c08fa6a77a7bd7a794a1acd7f790ac86c5e9d8ce8cbec1dfb7e4fc4dca3d0b1039adfe585fb474fa1d76035964186d6b80dcb4ec3d8e9b96f497b9b45956c80b049afdf57443044aa020baebb21fd36501d17f2365fba19d876bf6810a4f6c43c9cd220958a62a1bc548300961f55315a16eb42e86647855d8d85f1e4d556c6cf1bb070e6d5c4aefe5431f3ce46770dff7eae0482f87845261734ff6a3274ce8f4fb197f22e3eb3998a7b4f0c9b4b1266dfc801ab1a35a05c9c335a49c23823a7bf3e5c629cb8f7b57ecadbf728b98ab8c0a1010cd666e027a2ecca2a8d8b0f3df4bd88de281ac378b9876038f4aabb1caaa1cc4d33f34baeb3c617b59c53d87a7498e30dd94c5f0dc218a6760704eebb243029153ac42a1a56290891f67ac785c9353598b737139a21e7755a6ab16cbcb6b6e10cf1c1c492147d6767a3e624877afe4626cac127485f5a958c24977a48e89bbcdb62d3633f732bfadeac8137a71059de601bd3e23e03dbcdb33da063874347822a95e04d49fd998a9f1831470e12b0c4eeb1568da595d1e777beb36da04e22fba090d1cbd73a30de51efe09ee3086ac177943070a49da4a982aeb7e2bc9195efe65d8f2511b158c09d3a75824f7bef9da3cd4bd364a4bbdc7915960802950625a40401a320ea7af62b00d83c7af2a7201c638dfe0c31804807fb37289be1de66818b0e8d2c6dfc49a249f1148bf5fa11875ee038c5cd5ab4d2698289aefe867a25fca02a5cc34881ab1da851aa0c503a8fc72bcbb7ffb1e982665f7564726429395e9ec3d973c466ed85e53d01c01161daa556fd094feeb0c0fbb632e5c7e23b65baefa0cb05dabf1188901eb598a54f10004817e44577cf342f6f095884677750177d095901f156be2f913df11d74ccdae0eb606f6ab50e850a7242e5325aa6a37d2f46abf070f19d81d0e2dbd5e7a0e04e2622d34510375b94a725b658259005f5ed9eea5ac159558635559b4a6492c951e1a3375ff11060d6f7faf07e2ffd1f859f5b3ec54b568f46a9dd5a04546b3df2042dc43ebe633ad74808be2de0b599382dc3cebb76b0f3ca12c3408a20f3e6387806a16ce1f6919f849846eba07f1a13801fc3c3aa2e28195a5074632ef2692b2376f871c0910e3791f2b043d7254a207eb644664f99d73b67c91f1ae83071d3eec7eed3c5fe58a6595e25baed6dd26610d27a2acdb9a73923796834b574a439c13fad1c560418f4c224cdda4a205aed1fb98d9a8d56411a74a7783bfc88aa6485285dd3dd6af62ab68bcf2a570689be91b4a43bf5384ce6449a76b727322c5c20c82581c1f9994f1cdc53327ae608e0500be7976e2671a57a9b8b2e9d3bd22a7c682ead6a79aa6bdb60837b1c897e5b42067f3561ea5860fef2df2ac66b43d5804fa0df40b2d087dd5c858ca6b8943851ed949d344aa81fb8e799320a89286513c7a2a0ab6bb4a9091b81ed7e39f27e64074d58510f0ae890c2e2cfd15f28e31f165c76136efedc47e4a0270ed43f35629dd3ed1e0125c56ecae18783b3ec568b85f7ece08155257ffe09c1bd53246535f74ee405e7a2bd3a48bfe5884e1bc63f5c9b877a6d618e99b2e643f27c4817c45de5c66c8a28d8dc84a36e48f85e3b22e36fd149f9cb1e7e485c3617195453f717c019bdb3601f3cc6b6ac2c785dbe1e629c51b6ef3bdd1408952193f0ef1fb66c08685f28f19942561f269a98bf561a20498f271558d44439b98ccecac285e9a6e538bab2854fd77b0764fb1e2d0cff669f140535cb0af725efff306e748c780b7e133618c147e17f96efb8d34ee7b37cc667b9153b871312600321a6ae3c4be4fc803b244f8b49a8f34e377fcbef1faae510a97e51548149341f0938189e4b788608319cd723f83f4709e2ea4b2c2b3825983f37b5782a1292dc50ed59b95e11453180490015d58bb9a920db77a7c06dad86e20a0efbf5b4a2c15e8d1a966df5618690f3736bc7d672b5581cf767c492a662f9bd05e6c9798e569be0023b616d018cca61d82db8669ab5f473727421ef37b5ee19414090a77b2370adbab220c14dcd945dd6618f8558315ba990d7bdcc890528e66b11318793b143bee90394396ed057ad15113479d4b2f586fa978271c3dd0fec2a629461fe877dd93834a31d8c1d7c1a3e448e8a37bf2ad158bc56250ec20bf2273aa17de42d87c74f4f37b4ce3d696cf9038702a9e16254514f2332923e84c209a140226c2cc750d55b37475db7886bed550627519f05d58e56d0de76d8e222799f599abe0ba73b73618b1e611340dfc342f44358817b1db7dc4572e3198ddb1f3dd42b03528e52d0681b8101daf88f22d2379ce50f2cf473e66a350087eeb5a282991e638ae45b9578cfb865931a44b30eb87a21d281216a7e2771f6ac6b77ab7790bb053a101f69998f0ab6c60dc61efd5f273451e06e45ab646cec106debe122a24912ea7c66f5d443c11cfb39dd0aa715ea4514b2a1ac7609700b395dd7ed8db512b1228ff8e030d323bebb06511f15c00a7ca4608346e5fec37ab1a10476c0b25c0b6bb19cd3b62779c58ddce9064e49d0028850dcbc032bad6200a33a25c18270484c4a1c766d270a58fa236e675a9984ff48ec74b5d57878ebacc940a29a0b968f4ec23e705dbc20a08943a9e942976e9a6d9b12da65ce6a3c3f7de09453371508f782cb6a8ecc01c5c2a45f350d2ad5fc7ec480d3ba13cd7e4126e0a3f2ed37dcd2f08a0b0940f6ee2dae5bf3c33c034d03d18447dc31e7d8382b097881154233647545fcd501474353ca64ca6db43eb48529e7dfd40e0173aef623bb07967f34377ac2e4faf63cedbb5e41621279cf598b347042a99462772aeef6148d5a3608d265ca6c81061d14edd4bb64ba75fe659d5ae91863a9540b357b49291a48afd6bd9f253c711b31df72929a786d8f12004303180b0b371d575605e6a5b64831c781919bfbd21cc177d102a64534af55510697c7c1a725068415f4932e69420503a5a2f451acf01504928aa67416bd0d816d7ebce2425b57bafab1196c3c1e74b1b139f7e8088175ad3e9464ac1ca283b70120c017e1c158208ea2400936c4c4fa2dc06e65edb6299a5c87a6964d44ff1c48e69a088e3f51df5830cfaa601d3d05a29e1f73647778f474cb35dab18cc8d8cc36145c50bd891ee0c390f9c00f29fb983bd2b874acace30ec8d91f506228121579f4bb30234906afc4499e6183ce0395ff51dc253d0b8eb3e6590d33af65f3a91803cf3459d9bf4c99c34148627646235263887f13de1eea8d7f4d6159c8a21279093d664781703facc6897f9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0dfde91b10455e175029ff8b3016d862bf68200c812619ce73ec385c492886a9fa8946fe7eb5d84ad63bddb94ec89c87ff9da5179740b33f5d72d7e66f62d3d24e20c4bb9d5405a426304f6b1ea3259eaad06f90a2be65ac9451ae0a0c79c94012a9ad7bf58bacce47f29dc929103a4ec9e9c7a02807f5bd216f05eea7d5309c4e0c47650cc0976f41670ffcf675a53f62cff56fb3832b190bb624bac8ded08d0831dba26c5c8c301d79ed2c0d3b2c1a806c4124ca9ad1695a0d5297f7fc71bc4a00b0599dc854b9e20f7e80f7cb988728a7f2e7f6b4ad54165bd9adbd97dad01b6110b3256bb7b198100b213b8bb02d646852e2bd398983488aff23a117d472843c41d88eac7cc04866dc3761e53eb53b97a73aaa912b9df8810d212ce4274a8b798cef60f56d8ff9f839e9f24008c6b61d3a1a42245b4b2c284ad1e4669bff3b00392021ad50c6b3ae6a5f7504d809dbe053a80f5be335ee6700595305f73a99b990955b3bee0d7e70b6c272987426b4c93a0c989c8a02452675e1012a05a2af8cd97395090f0a6326673a7166a4c449c0366f6550175b3a4df392753b8be084625be5587e7a6869b8c3eefbd5328ba0ae90f9ffe053e7d3c4c09337a2529b20215f112b02f9cd990e1307974de425c37991d1edb2064f1a73240dcfc5227c8cb32d1f96fd52e2f9119eacce368437ba0b7e20b730f73a17436928c60ec32bcffe0d3821d74e4e94a7ae0627f9d86c8b4aa20de6c1f051d11ad50ba2e4fc4ff1ec478455f9b5b96fb9893d2afca969402044c101ccb73c50e2b2dfeeae9690fb64222ab9c94fcd943078785fa8bed9e174ab6390bb16a29c8146cb2fd65a98f44de752d6b0e42f0af2c3df4f65e162742d201c1bf5d22bbee1daf8efc30d0ce491df2632173b8ad9e9b29b819cd8ac0335eb142be2b680bde8b58eb5dd7a97d3174fcb57641d840afb8dd47db36c609573547247ea8949a18021b40a8c68dfcac7826ccd0152c5a3129bb1cc14652633cfa35ff875122d7290649275389e8cd089bf2f1a54a2f6af15255bf5258ba5e4311f02c5eb1ad539ffc7517e49e547ee454d3cc8c7d5bf33ec73fa8050a686b081118436b469e9feb79219ad2705b82be375bc5fc0b2c7397fcdb5f6fc7d709fa7c10cd338c710c79f0d118b3ac6868f4b7fd765a902b7c8b67bb4de90d90cba8c77c325e0fcf29e9f80629febf0592266b3b464e98d36e979c420c076820208167bd0b312cf388a9f323371a04adbed1a587ce3e81beda3b0f221241540f9912e145c05370a8a94876cad8ac29db2f750b8566b0e7484fe434bde93d5db9a5ebd8c8fa4b8738fc23f76f871bab18648f1196b83c35fa2021a1880951e1a8c76a9299017fbd3f01eb0983baeef4e00e9e3c4e3b36fa6efb81da02eb058c677e2dc3488e66af155b0c01a9fcac83cc7e11001e5837a0f1527352d116eeba705a83cf49e9a6c97647f58434b4caf4284385e18997c4c63b957480551564085dcd2b3b3fbba688bc893615c67bc0b2adff7b75028254d6986513f7115f0bd28a46728b7c6cec89627f4c1ad1da343ba7f2502f2ba06e6eb211c03b985c5cb580670824a285ff3802aab627e9388c1bb0dca274676a87daf35c07b25ca5cd3dca9f4abb249f4511178be2a17f1f3ecf430ef0d9485927c7f68468efd0c3d3b7d37fb8a3750154a11ba3803bf606c2c2f919a9e240f4c492162b5268872f16c03558e0723664a4647971ed4c0087ce932d8d6c13d3b5f4e5dcc152a0f25ffcf36adb30abcb21cad7cb87a856010aa8bc6aca85e293152f1fd4e6f81da4defcbdde7747b4c5d12e778c453fde8a07f7ab3b51a5e2e1aad9cc78fca1531104ac7c2abd942198eb55c0364b226a0e2821fc19c33a7951ef9b685382ecd5c99972dab9fe9486c6e8b75e5409ee7cffc3be0b809fb22a664bda7fdf0a391a20e5e64616eac738c251e98e5ff1f28be1632265fa37bb7a81581d6f86032494d9828d4acbe2aacc3daf62ecd493dd1b659f05a7f13ba4fe558cead3d30e2dda35e7be553386cdc57b599a063c801cbfdecfce2e000c0d0a3562a939607bc36ed89e2ff208379e991df9154702172fcdbf8de284a1396242b3620f0c98dc63a7240e28ad94759bdb98066b4bbff994d9aa51f9285f44331c521352d9f6b0ad27cac05ee472e153e17bf9e270e087ca6811a468a584acfe1b83ff3b0e04990e751f4d29332deb456f2c5c3142fe425f0d780db778dbe431a4eb7e1e254ce5e5f3a42d1e262ff3eec94ba5ce5e73c9c11e5fe66c1eaf7a6c6cdb2872bc2a37e247fbb8b419e3abce743c5f201feb8e7f3f3bd70cf389e00cc7e576ef4f470f81c68898719af373531480e0cd03cff107c48e5800b3e5a5a14a9cf1da3b0dcd2313dd44dd35e9db1b1ebbe32ba69ba1f962e9d1fdcc6d4bb8696411ca2bf8f164a45c366d57114384f73fded274c901a28eb0dd4aa96b32b0a8cd6f457e932cc4ec97f5989b046d3f32af2c37fae2a0b1ac85e27de78a0b288d5b62c2cf56dfa271130ae56e5d8898556c63e2a572ff9540db8a0de314359e8b7084c87ade7aabc65fceea3d67563ed40a0e6900f48edbd0242c8138c4327127bf5ddd2d749e3f50d0ea0da4cc3671330a9421a9e1dee3fef2526e5504925ee68a466743c3aaeba508c4c620f6a9fe06d09da2ecb5504c11b8843bd44fc5965c83d6fd5a46312f3789f7ba3e713133a41e736365f99372ccf94a5013205cd5de1ea805dd76b1788cb6eb3059c66ca0bf26bdf98239090665371d61be00b89bffdd122749cfcc56192227ff0f50acc39c9bf5cbedce31658ef465e7116b79374621adc82bcbb256714e264ccbca821ad0e08350e5539d2eaeb3bc36d9eb1f56358ee37ef00523e809bd7ec01b7e7d2500971f3f2553bca058e7a8f753fa0b7732975ba232d6918956d289ef7af70e509021f1dd1a391088f212849f3c02cdf8e1bd6ed870ea7bc8fd3fe02166bea65bf403d3b1208e29472ec707a4eeafe779b783a58816ab531541581a1c7b5fe575c0cf1d51f4cd674943778a9ee85be868186c8847a083a7fce7bd802705354c5c7ae63745f3716b2df4a685e3b5914152a8ea9f8dbb1dfafe34d2cae7b0e93b6e86ebd9f3a904a56396c69229d2da62b7dd7043c0a2d4cc87dd2a42b4eae6333a79324df18211a668ce7a37b7cca1fd062ab02d9714428d28353690353fb6e43ec67c2bb61b02cecbf013df440f9250cc150cb5676be1cd6dd18a2bdf0bd59ee9f30bfbb7d062befba035f12518060e8820f863b8362cfda736978e28fbbcf3ca8374367d5ebbd786535335f17277a6b8e305b11fff9eae92d8e13f997be7636efc47548cf278a8ea8dede62fbb8189ecbfb735e524b1408f3ce9a8a708ef6e35d1f7de5d4813b396b478ba363f9e58722b8f6ade320f641ad73361e81f3f84cd88f84c64dc2788196b960abb8b486307bae0c831c40379b43c30e3c34b52477495db274a0b2e86f117a850163afa6a1bf26db6a6473801f9d074b6cf09b216e99d22e763719340ac4d2232dcab3ebe1d4688ee9238079d3a38614361e6e9839ae34215478bf045b970b62b85787fdf7a4bc4b89c230c9c13e8a922324f630de72cbb297cd6cfe68736c692971f585ee166a3ad0a74b19f15459ecba6bfb9267cce10ac69de7cd3b3e3c61087fc32bcb11b985483b991069ce3c4b835b4565dba3bc50694ff917dce2c471deebba96987ff35179e6e15733957bd7075c9b5243e1a5ad094d6a8551454cc2311ca26f5d475ec9ea11ed9557905eb7cdd7c701a66de4492dfe02bea4511b7c8c7a435d2051421223228373dba62d145e328f190c2fc14b5dca886bddec7bc6746d6409eb85e957ac836c99c9c12f1540d7bc437e0f84db2119c6330200b2c8735dcf1ac5cb9abe0e9a70ae28c8ade3fd2c162602f57423025382bf1d7409ab10b24a39b70b9c6fd0d1565b01a2efa51d9b646ba3c9da4887e085b63530c897d4d49e0ec72d38937a8fe8475b393d84268b70b96673fe75392997c1531c37b3452c9340ff19b652943bec1a3e74dfa8a26400b955db28d09e947f887e209e28ed20f07867b75ed3a73f2b7eb33b1c38188ddd1277eaa081408a07b2be24441d54197f5d06f0773f3a026d19c0763e5d1170cf6dd486adb1a774f5e81b1072bb00800698e4aa4bbdd6ec7993700d8b3e14749d727598998859b812d19ecc702a7bbb4ed009ce207602651995c8e94c04a90111c86109aa2de0c026164e4086914d341fae7e453f9246d513c7d2f0c8d6587ff118a0bf29c9c4f2f95e3455fc18fc5140da4af5f0382aa430d0950b49ddaa5606093ba45e838bb8525256f119e9127c7bfb75c87b90373a38591923154026ef1844399f9084bf79fb99befd2629171c96b908a527c3f400f309671e752855b0ef70a29708f3e79cbadc74626b0391985abe0a733df9ea5c298986e6b1bdbd0252367f760ff98c8b58c37e06309d0a5a8faf831c05599fb7a1807e611126e84e0a3ed723ebbe35ad9df5e6d3bd1f09c9fd377b87c70c9d7a24975879dd8c5efae02fb286e4696a6a501bb4b059b2174d6bfcfb9ccb3a6c0b7a761b155c16a57099b218874423b42a3bdcee844e7ebb4ea3a60a43580992d46bc4cf1cd7ed4716006e120e5113995524e19e39e2aa7d346bdeb164b8a4993bbf297c789638cc56dc0ca7035562a353d4d2cbb65e5ee5688c4cf7e7313109aa3d4f2b10e120ba97f433e04e96375a8d13567ee30ac47c50ce97e4b40cd96888aedbe4cc00cd9b40118cc3d75dbb4569a815bea82d01c955f86780b491c3403dda78ad943a66f6bbfbbe5b87f115ec505db893ed104054dfd466d4cd0718183189cc9050d914546f7a72ad449c6ed7abf8e7059afca7a657283ae7e8b8ff79cc837f94e823fe3cc45650c3f7a4ee8fe042491d97375e4623bd8bc1eeeaa1ea768f3ac144614d362256ffa48952bc9b590387e2cc098ebcad5b026bc5e625f39777a5204dda28caf1442858e0ee01837c03485d22bc5f915cc946ec57f4b41c970167b8e9d8b88199e672e8e6c0e4d0b30935947f97f84c97d1004c8a5b76eedef6289201a124e28204865b810f8e0965dff691cde18275c839d894486592f0d41d92b47e7e957615680bb99b2527b6f94b325cf2e3249556ca75cb785831abe1404b2846b733c3b8d9aa0a1b48d65fd91691fbd8e50733a94c80f9027d7aa56e25fbf643942553d41e0b57e9c1c38d6c08bd78652e52d72987a026cd1c9668e1954b245b5d94aed200d5a7edd817c71ae85bda83082e093e437e5bc37dac7ca458e2bc7859a75a1847b1030fd4fa964b80162a19b9c3525047c2a0cbe7e5671d366ac581d187e110bb467237ff93816796936f0e8a3839c75c13fbcda469b3b6f788485e0d5bcb21233dfc4d9f0b10d6f37db14cc3b6470b4a1976b2fa5fe7d662e64cf7554c9eb2493da939fd89cb015f7af9baac640284d97d186032ef8ce4412cd934f182e42df3ef82e361363b4ea1324e408d6bf49ad0e7e9c09343294a5a02f7fd282424f9eafa8e33123ae726834fb8c6adf2a5b6f9fef2ba6780466f750eaf3a445be77ef608d6125abc57f2cb763f3455229c3e1a6b3a37f4d16cbb5cfb08d38b4eb424debe60667fe414184251ec72cd23619cfcd6c91d845c2196d66f0bb0462613536cc63619cadba502b088c6695d1c7c3667e5a8565d49f068aa12bfb9bc0a8c7366c8601183c99216ddc3d5ff4d3576762343dec8c7c15e99a18e2cd73723a8ec956be438f2d664be90a9221de498d5c3f796735d0cecf59183885af0fd98ee26c158cc745f28a26193e2b4ac6b6a2484ac8770fb73f13cb918ab52ed5792e78ab23720af11ead466ac1794922ad6e8230abddc8c43f8bb77279c1bb78d39197e2fafe6d051428337a4f0c8b96901ab07d9e1bff7c52bfb347a06bd34e7b40e6b026828bf6758363b42145a077016f498e19a222441b08359d78f414ead2c4ebaf10bed649b5575da502c5166863b4c3eea910cfbfeafdb4c07dfaeec26c85fd1c5403ea73461c87c94dfb6bdf5983a61bb6d856446518c77d29f0cf69bb1cb1a45ae22707ca3b889d8d690f3035746691dd795475fbd1d41ff776353540e1afb3bfea1a7b944cc69e2b8e7f2f99df8bed877458c921c1611580ebced9908d2de6dd7c334346b8d857a2ec4a11f95d9c8b4f49c1b27960051a30d1eabb2c77d2aa5e291ff354181436ae02ee8bc6470f079f7a2dc66526268a91b9275e672a247a9c712f004ee320c79752daf1935459cee2760b89779c4be32e11f337f32ca9d412d4ef0e89928496e96c9de7f2ee135dc2ddd950132aebb0607cdcdc32e7c9437bc4ee52b6be96012ea0b5e3477cb240bb0225deda6a9c7ec34a42cfb8f4094521d19b9138bffbb2d1afa1580398bd0435935f6a3fd3c4aad10ad366e7c9e0559f8b752e921f2c087cd9eecad9caaa04cd0204a6b5ef0ac1144efd4661e1f4f15f4319af45748d9e7ac00cb02c7affeedbceb3f8df14c55e07872ef299c4ada4eba8e777e538b6d165e279bc6e32251f0c59cbf50e0d8ade2533f6d001fa80ecbf2d6d3cd3d42e3dd8c1b4242178c001b943db1fe501c1ddf7e5d3833cfbf54564312952a3ef6a502dee5aabe8c747537d1d5fcdd6ba10b9ea1d4360ad31a12b55549a5dd7e2e1a4dfb8cb9816962170b246d8a3659eee0e863ad51cd543eb1b1d183eb2e2472aa888c1859d5d7de4e61330c4250428b05856cef6fc379b59a125fc84e65584abd7938927100fe7182ffa9ba0c754d01e03d65a27a356b0634a0a621b9c9443fbbeaa801e94b05a21bae2c7fd0eba2d7dbd8f6cf596b51b9e6234f9511a30dd80da1846da9fe15fa8136646476fb6a955d1dc67df4ad54561a62012d3f3bde9e196673df986155001d5ffb70e7edcdc4cdd57eb433439c66372665f02bd9dd1848031d5da0bcee3c55f196ac0909f2eb95c8c57cfe745071a53723e6bdc532ce023e2bf2a856073692b3e01ec59702921cbe44de3d8a99fdcb5de217de460648b0e145a39978c9773d6e7ed004de2441ca7fa3e1d8cb9e9413604a8c74a6810fb8b2127a596a5c86bcea1bcaac27818107d2898eb78088bde407044c682bcaaa847a3b7ed174e7eb79ef5d12a6ba40d93b819eebc3f07e01a61bb85fa31e0aa17a0067b7e9de922fda45ecb2dbdf8bd2ce528b03e265a9e6c2650dce0cc7687d040e3f2e8aef87d949b371b232de87f2290ef8dbfd2530f69eaaaca08a6d0dc4896a6bea9af0eb712d03941892fe5ec4b27d8c7dfd793cb9a3b53ddd0759200171dd92f30229e97feefbfceee58838cdd266f0f0c8a9f5b6394d678d6ad4cab9232f5c52abe2a68cf464523c12c43c97f192cc3c48fd8275c939d2b99b2433760928730e7c634d1fa6053d0801fa93a978cac76a63bd0c7eb9422769819182bf8a907c2f5cf304c16ea8665c9a72648bcdd489800330ba5a73300ea30665e01d0e2e22be35dcf3f9b313743fc573d8c65a78bb890f9fb5905dcb2e7111e67417fdcb0ac2ee64444fde0f10ba6a4717e18680058a6f5224a8e1da30da8b5e6735c02fdf436fd41c4b5564e2d371344864b8b20e8d0b91302a6627bbe75a13e0ffbd22474aa074a67681da9194c28394d75ad87f99cba4019f5478789e674e08fe5d6ceadd698b0757ca39c605457c22c3d3b8ffb797d2be8f12960f099a5606b908d47207b2636a779948282de3661bb08b1b37ee576590800a492730db7503b8272484cd6342f55c54d06014828ba624eac8ce46f3a39efca358681913f127842022cb396471d090659915c20b31eca958896dc753d5118a458d7cce281399a45d97ec529d38249b326bf04067a114c63d24bc7a5f4210b358ae0857042382a0444a9220f6de1903250e99957c234704016262660034c4fd4484b7ba8d6909013f0563ac58add652a449b7c934feade90c0b08931cf154f272d72e01ad2c574eb58e07fda9eb840f19e6f2e5767c6dffc6e7550a9cc2e91a486f18344bb6930f0eae271bd3e14ac3ebabf4ef29e3b0ce98bdf2d269efabfc2f131b594f4de6cdb12d6b0fbcd751f5826162f2377c9ddde85786f369c0c120908ddf7aa03a780e08d37ae04e14c02d46d0e7f3878f5db41f7bba76867d540ed1a30d9e28c5705d7a68fd966fe2c0f49fbf29fc016417dba6f23662a76d8b4f5c1e4dcece35f73f6fb39b3a098779d0f5f7d0148d42f4dbe384a1bfb4d98f6a97c546117ad4343e4f7dfdd303 +MD = 60b5b847ca9cde423c04aa153a53da7f8ffdad63ccef9aafe035d06332cb195e + +Len = 93152 +Msg = 198be6f1e86f8a560862f0a2e9a89f4ef692f65118f1cc367bd05371946342f3633a33fcf5ba49312ece17eec5dabddd90f154c802478dabf2e9940e9dab3b91ef6254c9fe545e4ad8ed65057eb423d5307d6b54ebdfc8f331e8614a08101fac456c12ff0a2411ca8e27a1901c1d195d5f9e039edca1c435c03780cddc79386beebe35462212aad9d8e49536a8ffe69da3bce34ddc75cb9a283cb94021cdccf771c285484d06709e3f8c07a02941d3be873fd40af443234af061d64be0f6247856dfcaaa93e8ac424a87c076a7cb28e8908f9e7d2bf3156ca00d9d9520db8815267ccb17fca0a7ec823e885f2b852d424814094d896de929c0a7d8c7e9643ff6680351359117a6c56d172603bb5729f53636dd231699e7a8d9994d8843799344a4db24ac5933f4f5957b640b62296628e25ee1a6db605712724ac5813702ca27626c0c255cddd8a382d3081f25e32a04d5f2de7fdfa8808e1422075acce72dc62b1ed148a3fe99f8ba85dbe60e6dbeb1965c9c552a5bab454689ddba0b10044a86593abc357c801bc7fba50924af6a56ad02e3d1c55f205e90e70d49fa6697dafc85102a1b41d534319b2e2f6f91751ca34e7b9bb79e27027aa460b0a4cf2d9f140a1b395b33e06d7ecf3d01f8fc292affa62b5a08fe08598d289e970e3410c156502392ff3ce8ec38fe9c27c6d6cca94974bcb6c1690a8a50dc8fa5427e86674ac0f0dc0e4337d9e68f1148e109a7c00a1ff759e9c676be4c26fa834793d8b979c049c0912f135d11ec650c527b0298c80fa1e888fd941c076fa9d9255d4ee06ab9f8e68feac5a0407c601d201625580eac850ea7f5accd0b20624ee4c32f04a514c3f5105b94c9fba7c92053c05729615e6a714c9806f8e09fee8a8dacc54cb33773961d6aca00cbd56ac0f463e1334b8d17b982cdeac60c561536280256e11b8cd070bcffae6f366e09a30ae60b9d53a1558f4e7c9f5f19ab9efabbac2beb6579a12cf802873bc6da6f719d311d900202ec9bba8d6eea8f08537d50928c911a68b071d65b9e8f038264d3b62c5f33de18a484cde99f8ff4d4fa68ee9cc0fbc1c0c3e860f33b9174ccaf705bbf19af714c45f28f767a78d2775c629eb21152e2e9a3389db0a569a1211af297d2922b4304968f091d46cab059411467bcc5be054b180a957b264012ea6bfe6f4d13d0daa9600042c74db017e2712551a22566b34ee906513d043e508d6b3fed18e4c5c0a46bf0425ad5508e7ab33e644c7973735ae0d3d8dc888ae274e25a181b4d337d5b7f0512c027d29d89d007a9a2090cced7c31a3242fa4d500598faf83f9642973864e7b9df8b5fcc779127278d1c5a4b2d5b826855a2ae23aa54c5966a061998a2e13f3fa1481fa4acbb47e6f3fc8572c470b481ffc7d6e2cae063f985e6e10801c0b5adeca839ac90190eefbeefb4cb04ca578526b3ec15cc027d29797ec16dbcc7f00aaaf1d56c8b722549d43e0fdf5630147db4ac19441a83bb2f2c16e2513dbf995ec26c1d6d068d33fc1f31bf35206b937090fb85f81b2ac41288f66c3beb6f57b21c6137366733e111850fec55cb447b66a2e857b837c141da746686b42ea1d30da0184b50182cd78ff022bdc8c0807567d2bab80dd60ed990d7ad58436e1bb57736d882417f40bc7e47b05b1566ea287c08bbcf7e60db353b9b140b7013a6a4f8c6eb0393063739e77202eec424493dac2c31c5933deefce3a7e3c7c3850a48993897f7cd14d8f5d158609d5e64645b002665c1d4d60fd790e362b3c52d0f4a617425867810ec9944e311906a8d042b7ede9fecca91086e4b37d8f8fd717d525962ddd71b643bcc48fa5ff07007f154303d276dfcd7a0681b8b8fbdf3ba1b0787eb06133e778d37e68590e5f839f37f1e29446df2119e6e09c7cd2b3071b212f5f5e9616ab1aa81256ded968b8dd2544f8b3f1435a5cb271cd3db6a3bfc0a1aab69cfea257a5a530e98be2cb06a557acb4c60894cfdef3c5c9701a19cc5ebc8af30fed6fa3a6455a7ef4bcef038469a9a52eff5bf7fd254d1fc86f9dc321dc40b30bf4c6e59912efa5adba5d2606b5bc587347f17953b1884e8b49982ad67b5c75359740b3fa9870fc2b8d9de488c6652d27750dba6f32f7c44d1a9169d9344e980167758557407ec0d28919c5973624c1aff8f9319c343c1f92653216a67187b9f3c7ddd01b9579b2574f595fbe7f8b8491565c85871f95ceefbbd2a7bacda849714ad23ac421e24f0e42e5097afd0a04601fa00cac5fb540a980fb93a29310d52e630b1bfd5058d58bf64559394910bf90b75c6d789f1b1374472560ea8c61db7fa2e0fa03bb4e0444fbe2d595ee4024a7bff9fe783827c5c480e8a5fef40bcae97cec6b93cd2259bda655f4fd5708c2198bf15627c57bc60ec0adc96c848f21f06385d719f076247a98173dfc0deb166abdeafb13d18792d788ed519f986c8f290955c2f2efda12f0439f270e9d57901fc83f63a8b6cbbaa34c4fb514aa1450f7b0d4c5daf59e93b32b5636916feeddad3d7706631fb8bbf68d2d9a68542725f0fc7b462ebc643537d1e4e34100114da7802a79df56ef0545be0f481701055c896ec1ca6aaeab55f2b9c3b389f85f7e7322b2348a16df3515617d648d5b4f93356a30c91b36d4a478556b3dd8a329cea4b7a6acdfb9f9b9ea19e06657ad5638998150d8bd0f807f3d3753d8b9bb10dcc09180696ccadf024849e0c3e271c9db0a469a6fcc733f64c5d2062aa98aa5273b52d7f09db3efac9473f713da630ae92c2c8604c61c51e386a80a9a24ac471c996e05b90f2fbc27631a8bcc8bebb9e163a5ac2e3665787a044bd9adc79a874b5f65a2492d78c4f148b02754936627523534654299e903a6d31febdbeedfe621e1bc361775398a9899d742427d7cf3ca357b59e87d1193e857a6b9bb16d6d44ee4e429ba62ec7d9bfaf2752ca69aafb7d8cce2963c6999bd2672dbb1ec39d210cd7ff598930c3e69c0943869ab49ab8993bba7c2646b95a3b3f6ca56bb5370160fe2323872131d80af3ef49ff7f487ddfaba01f39192182a74c4fe2020ce3edd20bd68108c8bcb8f0b4532261945c513726a99b0207781b00d4fff9498f48eb4a453ffc74ee0a8d3595989928b97d3d89f2fd77ebd8662e2d20a472aa080f06b0f6871b345bc35fc3dee636bcb75347bd58c33b5b5395c1167865d68b3ddf43ec64d567aed7903681d764828555877abba02470ba41aadfa3236aac56f861ace6d752674b2a191b57c73b04ec5dc1db6b12479d6f6a508dbc6bdc7c72ff3d48879926a3731b05152df892445795a874b5f6554ae4962dd54996e3cf471a1a1fb5f178a38f74fc2debb092cb2fc7e54c829375ff808de9be32eda62b3d13a03a592670f005fba86a7a386320ddb9206bb832d045ab162d505fb84e1bbcb178a05c8138113f79aed4c0d82cccc73400da411b8da3cdfba194b83f02242cbb4a59a44af58ea3b5b973a6d7165557ff2da00396d5a24e02ec9126c9ebd0f5fabd6e1bc9d2f09b796f50147f4845f4e450c5e8ebd0c897f4b6508fa030a67f367ae6a845f5bd8e8b7872f316ea2305a91152d761a5a00e98a9d7dd0afb2e333629c932088680e4b47de129e52678f417174eb7417daf1cb86b30f65071f177c47120a358aebe04bc26a6a03422cb28f60bc172d37f7f291aa463c4babc76b4a6faf2e27e9401586b1ac83e4b06a4090e94b3ef5fd4979e87fd762d8f044553a56d47d7c262d04789024fed71fb8bff265b2d162da37fe1c71d731b1970e7ba8972276a6b3db439dd854494ef290972080736cf8515c05ca2ae61759e29e3531ab09b83c34f3496304cae1b0db7a5ca7a41d702ae52e176e05549236757c18520d0aa0a10c0d8c74afe956913cde86f45b11797f1816a9648bc320cbc200ab762795de79bb82832f3440168499559ca31fefe7696cae326a48b241ae4af4553a954bb02ac5ead40f3c6fbfff734804105d19488e556d58dba6a2834292afac0bd09cc438adaee59112b8a1664d5e53d8bd1e2b3254dc83352ff4442d1bab266663f98937f5573e6161cb796d99e112789a7efe0a0d7428036f5822d2586f3ad6c9e28d8d1f7c54dcb4089659eb78b65c8fac3f89c1acddc2df2eadb6db748fd96d083fcc9e76bf8f540086cfb49db61107367e16241f0affe9e8335f17436bead7ab1e5af4eed4d5fc33c93387c8a8128bae2853a72346172a35523f8e647587a47bb7dcb53d4b6d0722ec39c771f2fda763cca6bd51f5a51a6688ecc340233c2dca8aa641fa79a0ff5e5e2706322d2ec4f7e9a3f943b026352c55cb387efb750e48056c4d9ee61e5f369d9fc671bd127efafdcfcd410c26f4c7377f607974deb054b6831aa32721a14c39188ac939653fbd778ebc024003f3f7ac5dddb815b5ae712c8f4baf9377601faf15c5a1288381efe55547d022599d1e330af2c354b6633dd5e5530ce17c16216e0c0981e0f9dfe2d5d7f362f9a46aab59fb6213c83d791b2129b34367ac2de2048fb8e41934c436c77b31134c60e73f8f938e31d6d75a89bcc10f0bbc8421e1f105665027c0b96c18b3a369a10b8d4b4287e99606f07219f74fa89e46a09ca1b201945e933a39f36825acee9e20e74f213d06c8ef357a3c6f2a22a39c6df891c608c557f1edc05d2425c01a7a3d6fcbaa275842e602bd7192e50f943458c032bb8f6be4ba67d709db488f65ebad91312bdb708c81e4c659f104c1e894fd7e14f10a1a7d633508aa0c025d69591df62044cdc21e59582f46181ddc2944d89cb9150d339a62e1bf8e24f7dc8d58fb09197372df60c2d942c65674c0deaa56a68f760d59c45fda7656b47d6f5a51c1347d366f2b0c54e4cb7b5ace22615c142618c28eff73b0abc77449279858da0d12cc1c273769860703a5936e4369d07d95d559068720ebc21d67416ae9f1583b2e96831f7710ecbc96057ef9d6408e1f7055c818a37487aa02b03bdbc6bc62e7e26d19cc8c8aef71fceb9bd54d9e0b66301a8e19b6b70aeff1efa6ded122707fd8a02ec2ca4004c3a2f878a50bcaceee6f8419ae4390fbf0756601087bcc177f7be05076c2d8d33e129c73dda36f5f148933092adc7ac15807c3d8dd3901ae7336ae2d7d08adc12de6483be3a6f422651797cb33e3dcf1832379acc19b7bcbd7a359f439fe47652f789c2f5b88e1bf7c8522de3dec40130e5307eb5a1592f6394c746322362e15cf5408dca9cbc08cb77c84c0cd684c8c5600ff130b29cf93f49c9de8ea22da7979f30eb252d20920b2481df156fa4af3f6c7bfb2595aba4bb61e3703e656c4f6abf02e4eeb4e3401d9825f1e6ee4c3b06d11ca57c93acb83da3bc032ab448623f1b5e800d792c9b6a9b5d87679ea6f682579bf61df2c8bb2fd8fd9f3ad7e9677d7deac86ac4242a5af5d1ab80c6d7671bc5a0f7f0fa2637f8c84d4c561576e68bab51c3edddf275566d286419ad0a163ae5d2aedef5efb3003b551366b71868d36d39797f0bc004c4cc0abb1a9c658c457dda25cd294ab8aff9bdfb5205f674bc8d4bf30698b3600dda21b66bdb1050a6565f64a6df60cd6dc92c0d02473992aed12e386bcaf5109a5f1260f4b234eac3380a71525f587aa2754a505ec5084a11038a5097eaae9cd22388be9e69f9e306eb8356b8f15b47b6c3c0cc4fc78c254ee90944713f058d1ced29da4f4786c2d636711bbfdd91bd117c3689bb94ecaacb4c511be0132369e2879dbbf095040f9ae27dc6516a21631b6853908c755162f1f30addceac30bb8bb78d696a9c9a53bcb74e6155e234c13d4ec0e8a8b2e3d328a8dd93225353087f46a1eda3a17114a37d8df3b28bf160ddf72599f993c987d9317144c450b4da25fc804e85efb0ddb7fce18552ae81c7652c28ac655f2c066a5770f89beb7cb8e7a0d394f7cd803360fcf31e1c920b7e3bb37428d66033d645e27fb7916cd32b2cfc41c7e08209a006446ac6f881b80ec954af1533dc0781d09a488a8d1ae0ba5dd673f02a5772ab119def85cec1b0fe75d9827b641ccf8f75477378783fccede0f71017bc94e4dde9cf2a64869b1ad6a90894635068b4869bb0a88a3821be4c1e27c1427e8186bcf6a2c26a09571e1fccab8ed4e108def0a99e8ec7b608df607f2d2e7b586581d2a1de60a03d3de660468817d7fe43745409d9cd37da3e57b06cd3fec9328afca7504aab0c0b9597217e68d8738f629f3b22290ee28d0a4dc44bdfda35f43620c16caf4cb85ba65cebde1278b07dad862c5c56f9d1b5b3e925851a69c586b215aa5ed5eaac16b95b44cd50a096ae6c52af1f27350b3b82555a834c5483d04602ea8d842eef2216bcb7b3e8f82e0be72a4cd3656b9808bfb6ebac3d4277bb390f076084bf886905a8c9f9a3277f7c66378ce0d8428103b2376167b4dca82dd5668b419c4782d2ce47040549d691ea30a0f6af4863cd13a2fd431e7bca1e0f602cfe97966be244b8c0ef40a2ac6d3b8e8e13a67d758422d933193858b3e14a238ce6c938d5b2a90c3c121275521a59c829692e3e21af179dff6c1d143ffac466accd414b2dfae813e2f6e48c6fa02a269882b0550f54d93789c2347717706771b43a66961ac0e912db221cadac0898ef04e69288e67e52effaa6e748e34b1a8bcdb6a0e3450e94544e1e24a1b1598a6d941b3ea04e32690c7a9d9d514a93c4fd1fc857f856ebd12064736230259be7e671ab1a65f17a06d83031bf58f5514f10d1f8f39ef46088bd44a84021b1d799a3c21e909e745d119945e9b3268c8da2090bcedc9dc773a1741845243efc1487ecb0fa061582e47398e14de283b64da533f7d37bbd782e048d05d3784daf5a990963c9e690c115121d2ae6b4361b9b40d5ba8e36c6af99995035d9a31771b1b741021297d8d9fad76f4b3b9209647e5b367f87767f13bb4904d0df0d64eb22c9ddb65e81b5739baad86ad5e2c239ffde9f6c47a4b14d9cfaf3fd6d1efcc4b4b725a6340cee37fe749eb03a0d2a4124b158a955262405449563e50c3ea6a5706961fb1ca04dcc2d1b0a44f47c0925f7bda95f3966a0e2bc039db043d52c365cc8d9dc9ea598db3089644e8b96278d80e8dab67ccaed8c0b2ae9859b4b541e83bad5724383980b0da4f4f885c24b1fc61b32d5a5bcd2ac39f48e8c9b08e706ea289ce492a21505ce5601686c6a3f86d13ffae53ca319ea4f48d6efcb74ac959bfb775b146bd7707b86d5c6c7f5c968a93a7b0dcae788ed540d07d3b3f86d749d19aeff4f44a5f51a1cb63b1fcbb26e57f6fa76d6efe85e502d6a62dcfaf04af86c89f7cd96483cb5ffedeffb54c13fe259c247e82500e44b8f47c4cde4fec0b4db4f6c16ca89ec5319c209e3f7c084524d1aa988f09a284e1be6210e1c5f7eda4d4a85b0462eadfd517cb15f1f75e4afb949c43fb87cd160b98ea0280cdb2b72acc06b2574ff29ba8f6511f831aa08028498bf94e66f888a518969a21a3a6f82dffa45fdbbc60592bbc34e3596259753984fc310e03bf5d3cb1da504b043f414ce403cbe8249ec8dbedf939fb6af3aa8dcb6f7390fa8bf430f937cd735bf5f2f61da78f2335184b47e0106bcf90f990b3814849adb7e8fe2063315a111775bdc800f202035a6750ee471cf17c80f5b8394b391b8ad840cb9964499edab308e2213285dd1f01068a3d876173589752818d8d9471deb83dfcfa8102f406db5a009026d568ccc57057c435906a0a60aaad3edcfce50ff44af2c25dd0024becd3a99352634d93142f3a00b63c3df859686bbb9dd4dd94f8c25d9f3f43420063f04db949b1e40879bdb171ad9777a90e167d9254aec414526e9ddfc9df2bdaed4a5d608143d4a362864ea560649f92db2f3331960d50e47d9a240261f62811c54c69277d8b87ea6b23720a93162e5c6d2d2d47e652dcbbf6cf80b5bc4adf6b9870e18cb30b8653f00fbc1faa1e9c6c20aadc13aa21ffd14a8954582d2fba4ed34266fea6465856adc59d6309f072289202c03375fd02eae551ef6839273122125b59fbebce6698d0cf9663573e48383dcf6a35be46be5f53b3e26464c3ec8bb2064b12d7f649612598279f065a7701808b4a9907816ab51219bdeb248834e25eedbac21f706965f8b9d1749bd7972b06a0d1bbd64f9072ad0dd25b1cd6b2dc557c198816af5efde6af14928c28110b3ccaa03caf13e81e811ad042b241eec0522be7e3521582cf5bd271675bde8d289f432689e640aa1f3aab3820696c3134c197c65246458d20e4ee68718f6d5409aaa4e53230888f0b36396a72b69832a0102a055387b1d6b90e3d7a3fab571e34eb8a6cb4024ddf59106fe7b82e585ba8ea6d55658adce7fe345a1720142e3420ee5e1d8ddff3438f3599507f354f24a5acdc1716c4394946f3cedfc16e454e540f8a882e3e2b3424226005267fcf163cd3e0cad5d8596349b90634a22e5ec554ebaa2d23815829ae733ea64c427ab8c4fc35f1311bbfde6d108aa630b8bd2199ef378cfc5e0cac84848f946f41b474d482262a9712df033796d6b4fbb1f2fb99a6ad182728bb355cf2fd5ffdd20ee2e2024bc79652398a1f9874d1718e82abea8e956f1285d64c8e3af27976980c8b83f91158bd6e41cbaba1ef9c20c30ecaf3236af26cd9f06a9eb8f97177f81fc720e3117e5aab9a50624fa16587e3d9d149f1a83294a9ac0815198cc86066db3e5f3cc6891cbea5b0ca0e24de255596376575d7a008893bbd77c926fece88a14975729b0971fbf655494a046667bca695bc2c73db56ed51e33d44527520c214812a31198fd907fec6669faa8efd7d8d54e48207450e3a7121dc1789dbf5a7976de3d4cc7cd057417cb88b91c8251cdd0d4512fc7d7d150bf1eabf5793bbadcc7818fa2e70f65e40f0a57a54929d1ef817745bddc541f194cbdfa8262ce14906385ffdb9dc99a18fbab4085d8eb3f8811be8c925eceb54ae28316e8008150de7172f7be93058b580436aa2270d183dea7318e76f34e7b2ba8f768eefc5b560e19cede1471ca20ec5234fd45bae186396c59b33143db5903c7a1565efe640e6885231ca5de21411b0c2da0b45d252ee388bd648af77d371c660949ffada56134daf819398310d62e5ba7fd3802a5642322e6074bb73cfdbcaeb8aa98b22535b943d63c9808a2c76d662c7b9851681140625a063a2a21932cc735dff2b4ed7440e644ef8914dcfc205643829ef1761b8371a3c720f933e1b4d80852d55c030411ebca9ad64fc85e8f52757a108bd76c347749b4c4cc7bcf9b09ba69085271cf747bf0a345636dd3028348cbb7c694ea9b9bd233f049ff462b84d28e553d3fbbb1be3f739ff5d344c01046de5b4bb37fff06c8ae6a1bc92caa6ed82882c673b20fdb3e72abb0039a1222f719c4c13f12aae0b28cfbe8e16b61f2549f5894179bd7fa7608333904bb40e1e2e5b9d13d8ae25019356b594de99835cf5a9f50325d52456d9efd3bde9192748fab0323b7d1f07e8411821517909762d1c31fa1cde2c5e2ad9ad35c9a034f0486d16a5eb4ce1c937b8808c54746a59fe0419f30ef117bf9be667b443ff8c1b850c1b62b3d69adb78602c410e3f50b14863ce9a4a0d2bbb32668bd9cd55a2eb974e1af31598aed112ee77f9ff58412eb4a1cc3a6e80dcc376f0a630c6510df2e7a9b1d19101922cafa9f011984dbff49b44af6ded0aaf7ae20b3333bf5021c40eb56c78a6afe95097392122799e21d584d2c4af35f928440c2caf7d290182d174d79762d70218ef71f287a713b81b3409c2b868e9eabbb14dcb975783b3a59da2b6ef2aa296b54bc88ca009e72a008292ab0745693dee353f6e776d60050e9b20a9c03a89ec2317f36de6e564627653a7d21daf44814462499bcc194e64225c6746b71cfd5106b68b0ce8a43c0fe129b1fe7810fc5332ab04ba02059f5f8553ff04303c8d83b4ba17e001d0be70d5775986b31501024d81f97fb59cd365ac144078c823baf2c194f28deee56c43d7cf06e14b15e33d0989802353599b051b1fe3faeb7cf60cc1d9d36cec7cd5d74c8332b49cbe3361eb24316b67c656cc36c942311672df5029fb1313a6e17bc9b8467567445841ff56d495ae7f6d8709a3b2f381e5dfd75b5e6b3a189acdde99bf9b378fce8ebf83f12d2562e6a9bc6bc66f7083b60e6e9cf3bcc0c2349c7ea5a6c4018497cc0c9e3e90593f4a256761335131ad137905837e623fc700d7cc9c22835bec3c9aa98c93a0b98a264b08685efacf649aba4cad52fe2f8d8c0a58eba74bbf3d296526fd94d0ced9e795100fcdee9250984ca48915d2e89c329e93f2997fa3ddead6055fb692f1b52a9e2eb5f48f32e7b8aa9d853ba32359911f1e6f9da19274fd47b5317d89ca924bb0b509676f1990684ea85038c1387c240658a118541368dd44b6f15e07c1f7e79733688b00cef113c3454891cfc04a67eec3459e099f4007579b3ddcaf706c7a9c3a51f3e6cb60678304fcdb21336ad932eebb9324ae8107ead2757de34e56714a2a6426738794c01867db89680a44046d4b719c57b9a26b98ed26c635c44c682b93fd97499bd4b9fdde6300f6cd6c56086a061df5593a8ecc5bc02a396ab4cbbb07acdadb60c6b19dd931e66ff55a6aaebaf79c9005a00e0faed02e40ba361862e5f045ab8ed14392f8b6be460a849e9aceb49cba377945dd46e556fe2b36dacdbf567c3c6e9aec57bd6fdceb85718e8705dba2c6673ce2bfb46e18c4464d8f66044de300987a186687dbe6f2eeb796ee00bb23672d51511187d9082593d0a29655452e8a84f55449f87950eebebd642a4ff1a2fef25d0d8d31c499b48c66b10912ea934ccc933c7c8fc69f216df962d6341db6005ec6948d329f31d3a8764728dd9cd5c9d7ea1d68ae52464d84f21f7c5d7db11dab04729c1af785156095b16005da4a842f5083b8d49adac59c4df6874cb048a99fcd24344b3bf7fc5d3b9c593c3185fe4b6d1bc7a30ec12c0c6384715253d126855725e053fb0efae6de747ee1210cbaa4a6222f9a2c9de36db945e53eb6df26f458f41ab5a33e83a604b64b8527332bd382534b1a82c57e28d5b73d3277e73d85391b5df0d30b491334fe49a8b2bdd440880bc4b49fdc6ed63f54f40e057dbc808e082495f8f99da6e5a8e3bc61f146843dd806e8e24737ee5caba401fe07269eae470905838e03e9ad32b440b371f5170a34ac37d89a6be9c427c7beb0182e38306465d0014d0e43e24835c605b4526173ae0f22115a7d40fc65c9b4ca2515e5bacce576009b3f4e2b45e2ccf73cf10c00a0aa27faebde9c7bc23454aab2801f840ce277f00cf980eeb845b5f670536f47b927ba13d32254a8e9923ee044ff4e4280f7465e26ef64b31bd92181f2fc13af53f278eab4caf22a286dd3f960e60a7ce59e71b95d63620eed079038495d81be0d84b4ede54b0d662b21b4547ad6dc7987428a8034f81168a86b7277c7fa41ea42692eac0914fef35e58409007342cef027de141223ffb46da7f58df0344ccba9f1a169384db5f482e6c092aaaa08443d3bb168ac98d78200fbda3bc9fdf9aa570023d32dce096db37e78e92b98e6afe6794babb8f83208a9490f3bed22d344171dbe30895e74e32f7554146d85059955a651e51e8937cfd15b3b9546eb01204f0e1a8933431edd5e93fb1d56bb8c89f18d6e1ec6940f5ee1f7074fbb9facc6699ce0e513c52ee3a89f160bd081a40822f5485f9860e13d3fe61b733388fbbfcb8fb84d112ecd7d75634ce7c21e759d50a587af7c37d6f555ef1e0898ec1792dfaf49c815c422342da546b813db26d0e366d4175a5f160d8adcb917d11427c70bc43c5e07d1568f382eab86ad00e0294300d79e1a21c80d457493a7c64854e7b9953817cf9b9017fec6245a77d5ca31d93b374ca4c5147df07e55c05fd0c67950ebe6fc556bf952e834593b59a10d6f0bdf9c29e09323e6f2c3a66a84f3a405388eee148288b9ca5c42f1313baed06b42b3b03eb6d31dd0b30b2fae1dfa1613d846f7683c3cf707c3b6954405423caee78018920fcc2ac19b1d9793122d462c9adba9fe6ccddb8f8659ec7d9fa679bf600e7f2dd1c7704312c387224bd459d7e514aee0fb848eec0bf39fe3f222ae2617258b18e60c1add80c3a762b0377a9d22baab16cfa938a6bc4c557ee4fd036c728de45a34e34e184de69e5b2a9ecf05b7954ba6d2840043002bb7575e81a118db0d33fba594347ae1f415159f5080970d6d339aea5c0f4d3e5a6c7549f4b0b2b96f20042066f68da4b5b399f996b6db8c0a0ef9017b8d4ce09f1de18b9f57c37479527c8ca3b9d9fff121ee1eb8995a9c3482ccfe27a1c64dc372a10ecabfd274f4726bd391a8e5586f061cf8fe509ba6b2371ac9a97345ed8e12bfb8bd106720a727dadc78e83918f80b2c6daf0426104dd7eb4a492c5028c7a64273bf710ae25c1acf8fa2a45da854d8256715dc8444cd0748694ef4706638d53326190a4421d9f355d45602da6e4b140fcd76013ca8fa71370e02f22b0fa74899b914049c46e7597193db2a36d4a467f2871b9ad6a69bbdc321ab4f0c8bdda77c13f6879bb74ef42db47a45fc41297bd77c4cd0dba57a93f18a92329842a299e51e07bac7ddd66d901f7b7bb11da0f5c59651cbd20d5d99cb31ffc4599dbdc6dac191c6ab20476ca2bd26f3dfcfd280c5bc71b243450d7a58fe392dd602f8d766e4dad3cce968986c74c2d60dc187c2ded6f5adb6b752dca0da8a9497da19748e6f2b08b49e029af52d994bc45a876318cd25e6b4caf368acab3821258ee9445c4bcc8deaa9dd1946d1f17b8b02990c7b874982c4e6bac5835b8cfe078430f0d75e058bf670c1be6546138eea21876510eda9ac6f736d9b2dd0ce50c526b61f07911e2a615d76315c7647ab691f1715dee78d8a3cd9d594b3f44642e8db427af5cd5e91b1d6c3193347d5fa916512c5ed5e3c44b381ba561cad3cf9f70a9ea9a8f80fe97145721ff0a304a4e9593f1c4638ff035cd1e48970e5f7a07a1d905328fb7759261149ea9d711dd1fa6468c3f05f1eefc0321ad6b883c05df97be1207ebfde0a5aa21123419968a84aef5361f3b9e12f660d26e5fb6fdf58fd8c59bab12b8e2394609171e5022d526360c99f58308fecd6c8ce5d41919cbb0db8bfc6c926cecd5db3937d9096b4f7cd20922526ab724d99cddbe692d13eabb267ddefcf9ae5303c03ddee4a3c44bd0e98769a6511d07b3682142af7170f52730179daca6e1c73b9b8396d1bdc27cfb02f3da61e4cf29d355143ce774b55d8d8ee5c32c28abbbf5c3a6da20c5fa3533b4caef2584320dc1fa12e7d1b55596569964e9dc0d60a3baef1413424ab0172355993261bdea2607bd99eddea1d631faf6216c3ca3a501036467fcc6ca9895328bdb2ea6f05bf50d1635b96ec8bbb3131b87e4eeb9ed7657c9fed11ea41821f9be0d3e45da0c0d4aaa62d512988a8c177014ce328eae563096555aca85c36fd172ac0bfec97ed168c0adcb6aafa73f80aa6492c8b06c33164017d44aee0eb162303402125d28e3b02f72f6c76cb65fd710d3dd11bdab9f915d92d8202b7ea9147d31ab30e3aeb6e91d5f01c95e1c4f934a0f07ae04e0ee0a5572f0eaec77b970b02171cb2b54cd5c30ce56d1026d813dcc629cee34b0c109be24a8fbafae550f8f8ff04162cf8981f04d708ee80eb74f0e6b2752bb7f9b17fe145ad2c3672e3951d9a15448838e02d268d9437d94343f86a5118c07c1eeadabee9110e6568796adaaff543af54d576d8d1baf31829a97db9cf5fab80c3e433e0fe63676e10390095084c1b8b949e818369222b25e5ce063bf3f1f3ad30c712af4c4a4039b24cdeb76bc3d5033f64d6901e73e7e8bfd91b588777a0e9acbaff939a6fa0ae96d98da9a10177fe9f4efe65b8552d49fff244785198bb1e80e583f4b17a8fb5030993d272af0c66fa85806cff720730ec430a031bfd4b33f571253a5a12163643047a99a57599229930e40cbb6f7c85cff1f461ab4d581051866ecd5bdf3b199cf1c96804fa281ac478b3acb3f79430f0278bfac931eb9ddc4be5167c8b084657f809a655e7c036c38574b6b0b05819970b55373f510ac2e0e9127b87bb85a5bb43c1ba61e36a5edd7eaf917a42cf280cc5dc7ed454c067a3887d654219b91f12f7790ef0972d7a5b8beda5d9560246967ea8384fe312746e4eaf3d774dac9aa23fba09caab117285d6b45a9594f7597f5e3fce79a50ad189662f69ecff66ffb5410a13b6c61e2ea3848f1875a3b84a0d8c2ba61a43af663cf685536ad6f0379125f4947d905d96fdc00347422c4d028931f42afa64091bcf273a61b87a51297e14fdf4e7b3d593dbb09a4fc4d6bc683b7420c1e0b121d98920d5fda09491bcc636af9cbcd48e0b847cdb98c34a0f636a7e39d295d1fe86b40ade8ee8ccb9dab0b291f2c49e91e8414d4e8a072f4edd5f76c7c7e26da80c960cdd7c59c9cf6a83b02b5fc7b6e5105a4b7c8e572e7fbd638550078d2d2851774f5b2ebb34de53885a064c8cc7926d179dec0a7defacebbcd35efa5eb8853fa1fae00ed6b4eb7f07d6a91fdc77a1e5bf6c26683f19dc4eb28778081fb7c7bd5b36f28371f200d5474c9c427f6e19629cdfb30e665418d08fca279996d1f7b2ec2b1bf55695243d92e5681b3d5502cbf41f1a66ba4a675899c3f1158caf1c089d00e2cc4b46609f2ec89414ded465081053e3d602a0d1cf1a9b61e4caf93ea6b6decf7119adbbe3641fa8932992490038a497c808015e1b5879fc6e155665747fec6b4a88713df27c0f2d02e738b69db43abda3921317259c864c1c386e9a5a3f533dc05f3beeb2bec2aac8e06db4c6cb3cddcf697e03d52de9d854f9eae440403ace3c68b2d70c7260a74ddcda4c63c6d280b455eb2a1455cb287f22724c0ec8caa424697fffe8df10acf9a327855ded262dba1d0295c85a54c50679add9ac202a49e12b496e2f4efb4234fcfb689a885d6c498b6a4bda85ab364fc7449302908445dc76b92dc70749f066b1fefb03dfa2c5c965cc54331ef903c4d3de82f95ffd1e7c1177439a52213ff788d948803a1bc1a274cfb9b96d65b5cc6724af77d7bf5e28c62ab88f77abb64f4a3457fae0f0e73c801c8156b918d3ce49be21653ef28c4a5b7a958dbd11ddd6bfb62e571a4abfff515ab4f14c3ae5344253e0acddbd31499911e17e6e783cf5ae08d7813051d254ae325b726cf273651a8bf532fc49d48d4894a449d00a5c12e0d25a5e6a2ca7a1604c7dc0626806c9991067e1e3befd7e30aee6d62cefc4971ebbbdd80f04c74f304f22c576c525c887873ea0d94335841805b00dc94ffcea2e6b0ad66900b8c7e3e45268ef3159caab9b835627000207ca4109d6f1518d75d88b493fbe49047044b2169117d32937cef23ded161eef6f0c0bfa19ea1dfe9ee6c380fd570632b11a62752834d41d77b834744cecc58124a70b8abefddcd7cf1ebab9f77c60cbf42c9b78168f5bbdf2310a305bf11c428e63e8c1ad72b6a16f4a19fb15757f56a04306264170919211011c7a026f4cb915074aa7ce91d2e2e630874f3f898a5b1d274a87921e9e233aef115929ac7c6e225ddb4509a159259b99adbb5d01a963d2a010a3f1e3a9f8d6c591d6b8f1d5ea1b2b40a247ec72eff84c324a572506f5297600834705da9a4e4946f897867fb46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a900844d5c7afb3a15475522dba684efd3d47b4fcea809114d75a58fcac748351626e7de94be6c06453a63a03851bf6bed10af8900c7e69163805f458061b6fe799e7be288d25f4ef3864bc4f2f71f8b10c13a7246ff80cf443f00d7e4359d942bcdacd3a9455996b8b169eb9c1519bff79cb895f1cd7c3d781846a156b15088d53b173c8685cf5ffd526a9e842a228d09d9a65ea1a01d6e77829d5c6873745eee7d3787a122450d49cfba585ba4ee74b02e9056c71608d4bb24814399da6d88dffa8a4f79993f4116bfd5a37323c20992f1e2f8e2adb2f2cb747f015b84c09932398bfe8059328dfc79490a7b0541be1aca3acf84c5906b10d903103dd102028db0b90f45f0b33663a280e7d3f7e1f4c02de4451dfc458033e899faa16da6473b069e0c4aee25ecd4b219d60e4a27602b839be42ec036e49d29c01b36a921e9d291a77fffa02f13d83e705f8a9a8662a561ae47279fe90ac4f3021c5e22196cdcf861d4e4b5234dd68e20eee957838ed64eb7c8a919d06543facc589846d142c28169a59aaba6ed6847b7feab0fb34726b134f3139c81768297ab6a65a5fe0e2be30b5c71e22e94f5f1822930317a1e2f3fa25107b670c109601bcc56cdf4116193e3741b072eb717f23bd9295b5c9648208c6ce5e622d760da99e8ec0d681f1bfa6e96e6792bd636e02198e6fbef221a2a5f914 +MD = 8ba83a0095cf77f144e9b37e315a4a2c1255cd1564ce484fb6034ce9fe4c2755 + +Len = 94248 +Msg = ebfdb2842820fccd1b1ebf90f1812bccff58e523a88a07d6816969f1b38a1fc3a1d54291cbd8f48cf2609eff7e4b7ccd1c985c1babc0a24a594990280998c467f907024ea13734aedea8af184f86b84dffc647f645720b95e941adbc886b597d3abb7b2171e6c61c251b7b412edbe833f10b2f1c3e4848a1797a4915f8ace5ecad1b3373058cb1bf0fe389e3e1f21367388f9af55ee96354511ceb9b2102719e9a4cb4ad23d2fe7ee6286167317241d01c7913e96dfe6398b84e1cb6cb16047a497986359460b440f0118c33e6047a58e7f11f60322e5154f83863cebd90a66801c82f7520dddbef77c791b1c84fc7e6df2148c2762234705703484bc0175f500b6139d38ef27c72c172f8489efc2f634e2f1577018114d31ed753959c53381aaf6d2cb9a8469eb116384a5f32b2bbb57a430ee79bf4fa6794db0d1419ed38af35148e8e34824994c0440e604a1a72c5ac86bc7a0c23ec130338fd30fe8d68f5e57de9bafb4d850306bcccb2afdb5c7b2b1fa6991bb5f5bfb115ac5215daced507d1c4a5c5505be62fc90dbd299e81bf413755aa92531a53e79ba0e0247d7437e237a8b75a32d225849257e9800bea7a34f64f1737a465b8edf26344f41d6204bfd81c58819cf3a84d40359e7bc99e924d831e46d351ddd40b417de44d639f22e6dca8f00436c557d2fa2c44e381a5f1d40749a12d018a9089b0742af7f7337b9f6ad4e7a9a7501b5ae9c64380da087d11a9598e0f5d75d5ae69d27db98026f632aa29a539989cda2e348a031a7dce204b92d5773f0ca589c4911e445ca7807ae6c52e927bb0b27e970500ed7911ffc1cce945c386b722951153e1e9a9134af105e36c16399899eddb81b167643fa448dad732daac06f5e2ded5a2d3656c8c42d52b699a39f7591142d224daa5afc39cbe84232479a02557723fe96a5b5c4c559fc6af844476fbd01620e1af020867a7c017a009b52ebadb17ba3f1652899412aadcc63e22bd85149d92714c44f3955027b931f12757bd58136e2a3f119b6b614094342e9b7302c421515b1b3317577f3d915f4498c435b5af82344d613bda2aa71683be774077c8e8842782961db41c48c8b16ad01d2ada331ee5a80a11e755288b3a557dceee083a545eeb36acb5109185b0cb9709a5afe76cc4b8d4c49dca0b1be25a76c26e6b61e987bddc6d604160f1e2cfb530ac1b129159e687fd017198ed02372bc700dba46a2a604e07bf98fd34d1dff13b4a09feb82c98ea631d32172a22536183ab404a00d03c5523dafdaf75056114d2845ef107c637c69ff8f6cff9cb16e39e77809cd200b9b869b759bfdc05bfe69c640334a6ae2ce3589aa3098383e878c16c84e209423f418060927592595f2f42f1e00fbe6cde09370c230defd531e794933464cc1e36b611dd9219bf89abb76b33ddc97789b400e3555c23664659f9bef37869441d06e0c3343ff38a1d0946c033e3acf88c188f057d38931060c876e894393b98c617873f6f834b1c9ee3a3e9f8d8fe6afd7180458d9ea414aae726b97f5d20f1a1d1732d9645689d94a0978d8aa608f46526994a8c759f9bac1cd0dabbce6177379d6b33af6d933485a8ea54f23312bf4aa1a3bd82a7ccccefd03ef2507245510fe138fcc4e21409fb6364e8376964f337496545771b73d0fa6c36aa473316a8b206a22edc8e33457d39ccee612e45b7b186a98b74b9dcce555681aaa7f81aa3a6757172005838109492ec11796cff3342c0353780694fef89f8e79978a89b6b75956d6f37286a91c6d68af7860ad890715fd2f0a413135b1db92f1fc32ddf27a6cd5ece89e612f19e6d6f4890f019f6c6cb485ee79f7139990023e58f6e2f00c2870b36fe7a7857a1bf63ada006098cca6d5f2a51f5b1b186378993e453d21e502a3d509fcde4ec59342ecdbc34f27b04abdffceafe1bed6bc52ad1cac412a8d81ebcc473c59ed84d359752ef621aeafdee8f7bbba0f612d012ce454aa935c7e3ca5039824bed42052867e13e78ca023b9f3850cbc48c4b3d863c9a6bea84a2f898c157d5481b520a776625b35e4aeb4824a223225323be3b893e76367047629fefd6c773a26e32e3885cc355fce2ccace7959bc933049351839a82b121c62e6037583164432f0718c511662c3adacded4ed960c74e77f308dc1965e6e6482fc4d9103cb111a5fc32954db44101791895c3351b248ac306e7fc83c7dda8178c523bc39161f61a36b85fd7559b3709d22cad7374e9d132f3764ba0529d4d796e93c63cd87cd9d4e0328d78f242c6d026387459121d0a0ae33d3238ac2ebeb7fd0de242b80ba11c202886f8333f94173a437fb09ec81d94fdc517127d98e418604af89cd915383a1e23b21fbf998b2536d4383fbff2f1186a9563f76ee3a6e6c0d26e13e4a2857604ab79b43f589244437406d01ea470de51357faf2618eb67442bae6f81bb7018f74643815a8590ba89a9512962e6812ddb2ed1024e3f9de515df1e785766e167217e784cb9276fd02ffe821334be0c4f2f07c3b88e5ea3a65a7628f50fadc0acaada80de034616ce5df8ff563c36fa8a7748bc988d7fe5f33c7633b05098f530bae2c3ffe1ea6dfc3d2131ba21553127d87a246bf4a94b13e369a66fc32e6938771faa76fb1c5ca1f40080078c239a6d7c2462f96ae5bd5076d6ebfb1077020f0c189b0df8e3cb07ad1d550424a91da68bcee00a983a23f01e46691cde7ba9fc9f55ff8a8148a2748e01167a92eea3182c00056626b0653c02408899d5434746595f3fb63d52c931bf332d327dfa120d884339d4bb4f6b7c4b4cb03c9ed6c23661bdc159d5092886693b00f18ed654cbc71ee41eff201df820f249cbe13c0414e0f7ef3bf075a8bab4a2f9826d894f9a101a6e0a9c2a64f7aabbbb0f457ef328fd963023379f2f17c7ef7eacc11bedc48bbd4061377526c3102e6fd073a379b9e121ebdb518ea6e3cbaaf936329514906292c0ea7b0a4da27bd4cbd613b37d10b3208a29e84af667e75cd1e96afeae45ba1e576f0df0bfdd133338e8ccb7e6769c1c74d6a1dc05eb448c6e8d0e5ea22cbeeb6db6982f66bbffd51fd046b59e31c49c11aa264bbdb709c238eac9bed88d93806b89c2d028866842e6542ab88c895228c96c1f9f05125f8697c7402538b06465b7ae33daef847500f73d20c598c86e4804e633e1c4466e61f3ed1e9baadc5723bbed9455a2ff4f99b852cfe6aa3442852ade0b18e4995ddab4250928165a9441de108d4a293d1d95935de022aa17f366a31d4f4c4c54557a4235a9d56473444787ddc5c06c87087aef24fa8280b7ac74d76ba685e4be7dc705e5a8a97c6c8fbd201ee5bf522438d23371c60c155d93352f8fb8cc9421fe4b66ffabad46909c2c1099944fc55ed424c90aecca4f50d03311532e2844c3ff8ecb495de7ab26941cbf177b79ad7b05f918b713c417da8cf6e67db0a2dceea9179d8d636191759e13955f4244f0c4f2d88842e3015641ef0417d6e54144e8246e45916823e2c6e39bfa3b90b97781c44981710689f2ce20e70a26760d65f9971b291e123384618b3b56710dde2afaa2d46b0e2164d5c9482729350a0e256b2aa6b3fb099b618ebd7c11ca62bdf176b502aedfdf9be57a8e4adbca4a4d6d8407984af2f6635f95a1e4930e375eb53f245ab2ade5340c281bda87afded1268e537955c9819168bd60fd440533c75c9b1865e03fde3a301d165f97aa6da236cf39cf3e49512f6350224f8d76ff02d0d3b9a99e5f70b23b9fa85f72849fc98790df246c3a0f4437940e60d42b4317f72e2eb055d343a614f7f96480051e4dff186dff476462d9ced24dbb82eaa60cbbf6a0026e64001da36d30f529f48f3688b10ce9378ef3f50f5106e5007cd0eb037136254fda4f20d048769bd51a9d8d09a1e469a4826aa0e25b6267b5a96abcb6e919a362fdd7b683d2f2dcec40ee5969311c07f6066ee22f3689ca08381c85bea470040e9541e7a451cd43d62c2aa292a9dc4b95e3a7c4de2ba29663f38d5002eb64ceba6934bb1b0e2e55fba7fa706b514ebeeae1be4dd882d6512da066246a051d8bd042593bd0513e9cc47806ccdc7097e75bc75b8603834c85cd084e0ade3cc2c2b7e8586eac62249f9769f5bdcd50e24e515f257548762db9adf3ee0846d67cfcd723d85d958809e6dd406f4c2637557c356fc52490a2a0763429ee298a1c72c098bb810e740c15faffc61e80cf6e18f86dc0e29bc150ce43ca71f5729356cd966277fd8b32366f6263c3a761b13d544a631a25e1c4c8dea8d794abed47ccb4069d20f1dcb54e40a673ffb5f7b2eb31fb7d4436fd8252f92dc35bb9a18fc55099b17e0807e79caf4f9641ee4bbbc2d6922508bcfae236475bf78bc796548bc8d60659e816af68e5e43352fa64b5086c97c22c60ddcbbbefb9d9ef7cd57c64454604793910f4f90aedb4fb824a86061a93bb79c9b0272a1ad0d24e8165f099ef6f14a6a4fea09845f280022e061804090d7ab79f7bddcbef264b6f7d4e9971eddb9ca7d0e79a8dbe7cff2fa59f514a608d66ae8c44d5e69745aa1b19995e366812064567d3ca209e12994c901d1b1f489be7253615f7c339b5581afd4d262e879ab8480ecb18990d3db61f96895dcde9c065e645f52baafefcbe34d072dba373fd1c786fd56c3f3284be7260eaff9a6a8348b762ed59e20ea443313b1164db53c3989c32fcae5b366f190b9548e8cff46df961350369b490354ed8e530a91f5072967eff45c63540862fb2deab02b3ae05deac65414368ac3549f277da92b692947de47cba9c1579526931e31c3490c1d3605f9bafcf468c2e9b47981407ea40b0b59754621943095a2d4f4ba266ac545fe7447e54f69555a7ac9ff1e8f001834fa65f2d4523061726e4d3bf4680519032dc21b7389e9f3229e4c2295d354482f8b803b06ca3a8cb3ff786e60f6bc59dd3a5bfed63b0aa493bab78e97bbefb6633534d84de826f4e2ccc3069050d50a2caace6c9de15ffc2656988d94b736e5688df0351a3a6a4c875cd99ef304f3cc7a0585df2b0b3e6c62f86bba0d43de47b80c4eec1c4f98e60a36188219919cf36dc10ee11e174a67d226ad9e71f02a7fca26ad67a4862773f3defc6a747545314063e5fce7a3f890ec57daa5532acfd027739832437c8a58dcbe11c2842e60e8ca64979d081fbd5a1a028f59317212fb5869abc689a156171d69e4f4c93b949c3459904c00192d3603cd18448d64b843c57f34aee7830f313e58e2abc41b44be46a96c845ffebcb7120e21d1d751046c072adf65dd901a39c8019742054be5e159ea88d0885ee05fcd4c189bafe5abb686031865dc570b9342fa7f41fd5c1c87e68371ab19a83c82ae1d890c678102d5da8e6c29845657c027ba07362cba4d24950ab38e747925e22ce8df9eaec1ae2c6d23374b360c8352feb6cb9913e4fc49bde6caf5293030d0d234a8ecd616023cc668262591f812de208738e5336a9e69f9be2479b86be1e1369761518dfc93797ed3a55308878a944581eba50bc9c7f7a0e75c76a28acd95b277857726f3f684eefc215e0a696f47d65d30431d710d957c08ef96682b3850ee5ba1c8417aafc1af2846a127ec155b4b7fb369e90eb3a5c3793a3389bbc6b532ca32bf5e1f03c2280e71c6e1ae21312d4ff163eee16ebb1fdee8e887bb0d453829b4e6ed5fa708f2053f29b81e277be46456dbaf979347f9a0582fd2b750636720a4b97fab0e0885b30b642bba7c9e0953702b9b9fc5cee9442473fb2f54a238158eb1758fad336b7e72e0ad11b51a2473c9fe43788ad25750ca4f71816e74239eef697f7c193c0bede239cca25562ae6bb0ae37a036d4dc4ca62cd66c227bc213234bee0eb664ff87e5c9faeac22a0fa1e0c5d8a57e58d0ae64968a3e050b9c18d6d351a62950bec2fa3bc859afb2d09cc6dfb706a5d0ecec72171d758ab60a26868a3ad0c671b225abe9b58d62af99d2df56433261df798d5b28f0a1280da4b29eeb1a2d326a8226576e32e48f62b3da96c40db716c71f178c46b45f5174f443ac707009e18d975ba933c10d8a9eb72a89939713594a45f181eac8febb7e61601bb4ccf5487d7a2bfdd50056e8a63c29245f5fb59dbb76c1d89fbf1dca9c748e8922817dfb9c931de1cc415f2e0b8b8cf381c84c58ad3a0efcd0072ae361b62551345e126f7d8aa7e1743484cf415d9c73a571161e81f82f6b2621a4aa40aedb207483411882c96069773a7640ea0afe3134eac153fc49a9b00caf1983bbb706636dc1988b6ec7de064fc39227581c1898aa85cc9d5e970447edf0080455773d968a79773c741e5734687076f73e19722690d2a65f4b78d5bf54a4eeb08057e736551b6ba0452582705bc17314ee8ba1776271cd1e25678462db2e3bfcdee1a9cf4837e46b5485d64684273524fbdb1ce7a9b3df5e7edb96feec0c8e6dc39cebcdfe5f8fd224a7d9238c223b8be8904b13c1492b94da4d93c001c04467d0f233bec1e2bc892813e193de32d4de3733c27863825065aa45f172a6d9fc9f898a081e4d720904f142b623f4e9bf705a4e0971eaffdc25815d367355ba25694fbcdf68eb7dd3b9f2cc9d306aa75a06e43786bcd2222d78d1fbe93ea9014d49b613203b4676cb2cbf1a2d559a0c12f64798c0a5b399d2b42e8a6050eb1fd2d53f1580e1c8ed5de1a8a3dd102d8898c306ea5dc909b75a8be9b16246c69664805d4c6818fd51ea6d620222dc7f9d49f1a494a4934f1b2354b5e9358cb5d560df83104c2d5e451f145dada5371acab50693304b90ee25db92f59a709f238d56476319b3bb66275a9b1e1eca9c898158767535a94e7177c1eb3b6d99faaa0eb35c5fc1252faf793b5605ce09993661a2c5ad2d44287371a4b1f9ab182bb3da1682eb9f171684cb2fd9b743f899cbdc2278bd7fa2bb6eb3c28bb2fb81bedb9fee5f991c1ffca09da69a9518fe3a9461660428b55b83cdbec9dce9d75d008b90a946eab0864e6d613e1d41a5b0e83a81dbfc7156c4fe0ae3192a20c710ad3e8ce5ed53051078459664d62f82872f28cdf2d619ec75a6b0d14ef7da3323217eb5129754721526e3dda959c128077bd9a6590594eef3fa69f9b9ca88a42ae9c6d9cdf971902ac6b2878a1ca91ea85ae79b6d2f74c6b68560dd0816bea29e82a14b56683cd7b7d42c34759349cef048bd2dad983c1c33b46febb870deb6d468988a6a8818c152ebcb54fa6215c155c1d4cda8f45d480223d1b6394d8b498328072778bd97e5625a1a6986edbf8e7f52c90bdda85ae2984020cd091126e3213d97a2ef9d2cac8cbb9402b9ba899ea3880458ba48a7646c85e780a670440c1515a47d5d9b599f388cb280f13d167a88be0144dd49d55605819071afcf653cf54cc827312ca125ec5a1094cc09d89a85715a50a520673fe9bfb62073a30cee383f6d2118e595e91e80189eb8856287205e89fca060df7a8f9cc31d908f9da8648a2e0b634aaa4145bb450f355426b8ffb1eab95d8fa0ae6da531b984d9b9f3e0a96546aec050d708482076c0eab7b86a3827074b014d341a659c94df35c4496329bd5359eb1c12ccd32565e9bd77fdf64db976e76a47b40c5a6e300e185f21326790b2032f7e7d09d8ee4d2e40fa023a5f0c78c12f2296ca00210b7ff5dd03f4ff89f32911fa7e45b5c5acfd09a06d9d08aa9d56c46064b9d35f87c352e07a115e03974a1712af171655f5e49c2d8894c71e4516ce83a67250644566b3ebec1e1f880ec4b34987f46719c8637cd3fbb816d2108fb1fec48a13e9c4e89d71e2819091da478b219144248b94f800462f8d7460803ff35447477a5a76a773f4f5d27dbb7a40e31d33acdb15dc10daf6ac7b6c3404961706b7511030eb41dbe78e87136f7f2f7faf1784f7530e5c6167eb186ae72e20a1989d3d5207834649ec15261e2859819559956305cdcc29380c73dafcd45d7e177c5142dc48ef1322553225da6089e5e89f45dd82e06605d376cf399e9622fcdd448c280b6f8f3719d56e0cf4c290aace02914b0b358c80a81965bacc970f2b8763a6435bf5d42074cf1151e9a8fe6eda060041eb37a0184a76dfe5137182889a6c283b6a766e7de7b4d48b259e23a0812c3b38bf51413b1f01863eef902da28ac08a66a36bae9dc719201f350cc0ce57e77ab6042cd077ba6c012edd8d5107cd03555b9330250eb78e7c84949f3666c2ca77403624de4c90f8c94b49c3ad06f5a71190b68e524f2d674261c0aff4f85637994de1d3db28275a570ad0dd824e891e378c89b0c6ed8d462a2d45d99d0186d1595573b457a901e322e3ef25813d0bfb4fc58951e3687bad9c5d90869ef0d90a4ffd8830c43da535c57d11561a50d2a0b2d241ec482e6d0001593d316b64c154e58c8be3b15485b4b72cd3c9ce3881a119292fea65cdd5d001c6b88492dbd443a2a8fb479f8c28026079a30b0d429d9eeb30bfc6bcb54ab0162c7eda95b496491fc952d6ff53008169ea0b94681d9aec918f8e1bbd833002a6e10ccdf48d6bf7a5741f1c5137a3c42c0469e06f07ee0ca4abf75408962a5a3c8afeb92fc4d9b1ec2fdc7225b8964d3f4f6a9972b01b81bd0ca809fe8cae295f80a126b809741a5c531792ed343c8f0c318a0a23a4b7ee1327fca83fd51fe28868b0b11db9af936e843cd928591afc2b4124cce23437a47f9481a92cfe04383fb999d2e15400af9b49c8cf6795c63704f4d75c4f0d0f372ac8c3a746660f7cfdf9b8f673770be17b0a47e01b68a2a231c31e32ca9dc338dd3b2f0d2cab76333b8fbaa6647125bb865c36a5c44044d03a4275dad544e80bef624055404cfcfd81020b6d3500d2a03596219af2bb313376e95adeffb0e232d9e4941a11a8e83e56e727b55574b732116e754a1737ec6e802e4999ba503640452896b6217dec6835b59c09566b37e3a24bce1da254cac3de97dea595b178a689b4c4d3e00a6e2da5e3d4f3b842d92750947880349070f5faac667d02431df8300faaddedfce1d11ff86eeeebaa1f8fa4ff213c4e5963575cd29daa90839a97d09fb54e9bb3dc051c69c66560ff7f9f27d2448c403e167a8db0d098b0f18317e3eb80a089ddd12c13ce87e1c8b17db851c44f1acaad0ec205bdabe1f42b4bfad289796e38c955d8ae8d000e836eae6dab3bcd423e34b0e04d5f7bf0da8f69a324e01c221904de7d352bdb2611956641acaf3bad2b53a137cd1ced4fc49c60c36385f546bb1edfac503185e303b449b6cea516a60288544b2d8c6c7942e0d5be16f171568f85edc888247cafda49dd4f9993eae764414e9cb71475f7e5eb1d05a7a93cdc16c86d54357b4bf6f5d4757e862224cbc12cf4af225b96362e19cb3cae139441d164e2f1e0bc5042e6d2c6c62ca650dd9999fae4d7b859ce7c0b44c582d734125fc9e304225e463e3dc335b8f5b6fb976e16a5f04fb11d2b602e3e22de5a88e81285f22d72d78a236b3436b969ca9183af31aa3402dc6cc77af10bf70913ff1d8a2774b04ace98acef946e6a01579f1ced695c3299a0c54d1d023294abaa233d270d0f4f2299ee354b62312d44f480ed992c506e6c94c306c6c0369e3e7381c189c5164c92c01756ff2c2385bd17f35043090b6a042ec29f18b9ac762a06973522ee1e5b03d7907c8b60b9f5c23842ff7b7e0197e8e56070835cf8aef6d9d02282c6abdcfe56e630609e69100cec1c4592f9c79a934f09258738afcb4d73c8f40a0d3354fab484fd2f43b546f599cbbd3a1ac1c48bc24928a4cb363d665aee34591049558187094d47ef231d04c7fde0c14f84b84af59ce45c9330880a05cc6dd08e42511b34cfab3aff3704b30d1f3ad90674d8594f60f32f1f033d80eacffb00c5d2da3044548188f26590a8cfac35d1de36c72f3651df9ccd32c0639075867a556f43693c448aa27733432e86216c5c454ee73550dc04162c43a33a9d697aadbb8c3f0e92fc0127ec348eecc71b48c8ca01cb24056c0b2bcaca687e47f8520b769e2fc8def79f79cfcde64c18f645b7eb03e543fa8e4f5e171b929746cea7240529980076d3b028a083ebc4e24efdaa06c9c84d76bf5b2d9fdb842e1038e487f5b30a5e010cddb4fcdb01ffc981eb0fcbc7d689207bc90ad36eef9b1ae38487a6dee929f3ff929f3357cb55253b7869a892b28f7e5fe386406a2776ed4b21d3b6e1c70cc6485947f27e9a5d8bd820380b9eced8e6b865206541be39fdcc26dca480266efe63ac6fa8a4018163e49d0b83609dfe0021b859c07a266cd3031e12de1e89d912de0646c48ca35953fd2944ae6ca25741284792c097f287f37c6206e23163c39a13f19de48cc25dc26e6f83cb376e8d2048ad7c141fa503d594bd395f4d36c70aa1e8a5672910f735d4da49884574f833ef54760975b0790fe86a1a83e6955bdb04762dfae601ce34acf3f6640b3830e2a8d7013f3e974fe8e4133b1e81e1ea81b80477ee48073b3573471acd1d3abfb2f19fbe13dedc011714230b7da3bf0b95392e23dfc3a3e6beb43e4741efff0d3b4638fd35daf1251105241c3fc07f279c045da23ded6a2946dc53dc50f7e7a1d2331d5ef3c779345d1380edc36cc4d6fca60d738739cc9b5478327a88c9a7061e34c753fc08d6a751dbe3e0a70d02824daad8385a1d3db56e04248237d99fa285c7c16cbd238c1695daa7955925dac1e56f2831151c5ffffa0cd4841cac442f8f68860995bc2bdaaf7c569c684b900e7a8f882e56cb85e39efebd0075c636d5c193afdb4417188bf55d7b4642e2c4e0736872607d8f5208b3563887f19bea6d92d5892216e8e4a30dda802387800bb046a6717817fc46c7edafe17b0ea1c13f99aabcae9c8602a86f9fffc484b7b7168ab5ffe5b476c6a99468426a2b7c7dc43c8fb4a153931514810a5499e8de798ba6038839b1a374464e2bd5c5e69052a3f2010bdada847e7fe89639242288a5783f3ba4d4bdf6b1f67147062ebe61f257608b1c9b7fcec1330ceff7f3a02add74acbad05727e51262b4567df51185df46fe9a8163d1f65fd674641b7900597409750d95219de317e37de687c99e606c0b22cbb4d46f8fdce2a59f3e34c1892b9f3ea06dd47e9535213453ce1ca3764b0c837b316db6ffbae026fdbaa7422e46ae401fb4e0486fec848e4abb5ecf5bded38745718036ca6c476f0c3b5120dd67cf4fd814c589d7c085d227ca008075a9e8a4971fcc6d748390e4471ac2dc0b017ab46607f4c17133bda66794c245583ec4720c7692c98273452d4ad35ce23ba6290446090e7da0c89481a685e4bc77ffff66023083e988bdecb0641fbfc1e3c862b60482732cfaf192da51281824598fe1f714b8103bdbe5f0043f3a4bf997dab0400e2eb33de4314146f3f5bd3b714114bbb077b83f007de79f48dd91f7cc6f7a48ef485f4f012a182e0b69445053c6200a6219fc71aad83bf7fd54125af5f959270479c7deb62e9016041d5e0175816c99a5f94d621f978594e9485d81a90ab5610a3d9d4b97c141857a6c6add5b0582bff8b02b9ef33e2cfc7914c41a6a16279d4d0e40340a849502dae0eb3288b4eb03d6b93766aa3ecaa54963f6639d9e182269564126a2db02f4a2155fbf63320dfbcc8ed177c90bb715c690651bc8151f96dbb02071d55723f16c7458b29eef740e469b8a30c447aac47d3480a18e1d966100b65ec4366b708fa68846da705fb5c1e189d2301054fe47c9cad973341a252794a35c8c3a9a6115ccbbaa95ac053bad09b439e451c629f658cdf02f7e9d3450f431ca4856668e2a5b99045286628e364bb541cbfd1dc68696b83534b2095c53abdc08771e524033efaad4bfb41a15d404075a6576be5c4f00044901630105c627fc9796f6d03fd8d56bbc2ba97e7b2cef25042f534a43d6214c7c3425f6b91ef52e08367472d56fc955fb34db1216974998dfb8172425a286fb7f3b6f6cfec49feadab41bcc999f27e43259bd7780b9cfcd4d6e36ee7a3a8d9ba295a3c63f6d94bd7fbe512004bd7da0f208e50141fade4cbdd0470b9a14b1a786c167b50360501077b3b91f9f612716bad0d661c2d0f191d17cabfe3db79f99bc4d2f9bd3536e7e4322c83dd210d0bfdd2015fb8be2963708c1ea58bda9b40c8397600d379d5c617289e2ed3552f70709950841259658a6d45e968da2417b5a9d4ead6b98c486647657adc0419e0676a0ae31d4f862a55bb491151f7435721e69c16c398f6f98f1df2a9d397f588ba932ca2729acde18d02a080a80abfc14b279ae311983d4e0940d6125bb5718f2f950775ca19b7f0faec531cb53d1ebffd13d43706e0ebb19b5a199cbe86165e8f15a3456ff4cbc0641f69cfbfb6eab8fd5254fcec9987890f10c43142316b5ba1be09f8a75491b99343ea7f109daa14148d221809ea9a3e2b0cddb831dff9ef2f354078bb6192434f01df16ee1be73a0a6c4475a6fcab38b8f66f18d1b74682ff2550abf34255c75f014f7ba2582894a796c4f90af742de7d757f3b6be2dc7ddb34427b962063ab8cea4296747bf589b3b4a98e7f02e89a4432170846874346890a1dcfee2242599e64c04fabacd681f56dfc1b4b4523d3d3d53e67accf0147d150e98e41717c375d19d28e911554e4366ac487b7e97ef2f305fd40e3e2a0e77daeaea2d83499af90ae7f3b6cdbf61b3e5209bc0b167e5d6c6a5b7b34e7a88d53cb75f2fb941f2801ced03e8529458cd5ced4a18ff3ad7d06ad6001e7069fa31d504566f1b9980a761fcb7f2425c8a0c3862c1e8ba992ba897614b844690f90a1e427e604ca8bbcb8497ae791f707bfcf21191b465fb57dbc6c808993357fbca830225a7aef81a88ff5e55c13c88a52c348a380093e9f2c6838ab5c1b95788ff9dc3eaa9c520135c2cb13c7f3c0dabf65a2d3351c6ed73155829d1a25af81715e8f83bfb21893cb1b720c117a067e707ed8b023c716e5f24bf15fa9f9ab22ca9df1fa7f046cbfd26093d820edc3fecbd5914230525f52d9122df8f3dfb2e3027fabaad3d9740eb25ad580de971ee33a347692450470a54c71df70df1fec4d81cc659ca37b5807d4d1e10b32bf40b324612ea74b267266b532afd0540080e7af4cc6d6d83041339e8d5e8103ac50f9f125628a28008c1e7b1b441f3ccb9639f5c67762584157187955f5ea3ba7773a0848ba41c6dae75406f547657ec958ccb90420480df6c140cef24e4fc1f8dd00d392ddd60bfcaa90be875faa023fec2764cc688ede96a833032d10b77de7a9d2b9cb7450e1adfe5a0b9b35f7b0787ad35fe7f73eb26b337782cce32b57bc043922ba26b82f370b3b55f7705370bb2b56111d765f73bb8b96b19771b237be15bc76289c15dde0f8ba0464b9c72a4f263ae1358dfa08cfd718fa585f54053605e31edd7e6fd2f1ee6080aab85ac67d940639f9e31659ef4083c4d55819a96cfb3680a173cff8b114b3319114142c8d9d43802f21bb4e62ee6176d7020a0ba8203e053c233c366a933d80e176fd44c768781da0eef1cf7208397a26052e14329b82157537be74629286d361851ef7721e2d7a14f3c1c465b694378a0a8eaa51958a1915575d9ae33a1493daea7e2bd8e6ebfe53d832158422f915cbb930b64f36df77e52a229133b27129154c25c93fe9381124444daa1771f07cb0b91e2172a50899aa59143f9a2325fbd7541cbaf04f9f1b50df196b66ce01d403b360d1030b8de52f8b3b8d62b5b673ebaa6ae4333fa584a0529e41b85fb5858a4efcb0498ff7c53b69a063d18faef818f5173150e1d4b5d945e412574c93f70e33fca58e5acda0959b4aaa31da95f125dd2c888e5eb314c65ff4c889be249356096797189397de06c84148c8bdf1c8db0cb0d036deca0a2e49d54997ddeebf2c7946703163dee656988e27df614ce40227abf39088a200d8ab8f7fc9d07be4562ba0171ff228224db5382dbdee2dad62d926d8e485c25c8d2b2b5066c0536b9dc67d742a6700f9b2c44744ac8b1d8bc2c727677afdb2871574b0a6b8d4fcbac9f3e66f9cebebd34f70c453f260a3e6eb9cb9889917fbea382c26680535003ba259e1f0bba57318ea5eb642d8964726a6fee1238bfb24ecbefc957e960ae755efa179dfd1be1f314c3925f9a65591b3b996a92096d2b5f46e8b06cfb37c376f7a72b324245d77843da71a5fa4c40af6ec0b186703c4376c11828045a3b37af3097599a7fcab047a85509b5e1a0c3955090536e11af831bb6f880cc7b0d6374865513251a3d04d7cebdeb3dd4f54a639d62e0c7422972b495046b13e200df7d656af860860f3dbf038f667c58cc5da0b1d2ba10965c8ad7e7c6377903c824105a4379eb57a3c343f3442c1fc19875c31a4a7fe8929b440c2ba8866a64c5a9d3d169081413ad4e2d2a76ac86b3ec1b415344829dab7826b7dd45d876898c093e675633792e8e36d10591684fa439c6b1d94b62ce6575bb7179089e1be67daac688957c992cc905b6012edfe926f3f08b38e9a0f935067abf8b7b57c9103d06f2b1a153e272d04362c99973d190bd2133ee89cd8cbeccdcf88118861c7b2cb6598f0449e3b556785dbb7bd49795f7f15266b63917571b6ab3065ab974abdf31415d28df2b58ae0d1d534072b98b36c95d2df9841792849c8567dc526006c6f060b8a98417d1597a181d81cea604fc11bac0ce2f1bf59afad641f7f17d30668c3e3de0c937b3eb57d496aa58eb77aa72f1bb9eaa82e4c0fe2c0148171aad505d1039792f0974c62ed94b44920877e465a87b0586eb04892f0d423723c6c1f6fbad57dd161b989c57acb7cb1a7b7a1c52358b7d34b2c97605e0616fb81032dcd06bf5772edc93b07ab548b842b2f2c4c13f79703488b7fa0b4c0b4c3475647483b2bef1c9dafab4f0998a96bb5d76705b0ca18916cb3497b7b69c473964db408e3800b78785321c61bff9d0e4b979916853a0125c08d3c183a680fb276d0be348526742d869de49469f23114f8570ba717b01c664a01a2a079275d29f0c7abf4aa85f2e4cf763ee07bd72b26c1ff06e1f0922ffd14f8c13ac00d757f0b1ac472d9054c455cc475d2da1754ebb077d0eb974903912658e30f9882215dd0b251d39a0e4cf73471d2940d1b740ccca7b1ee943e60cb860b4e4688ee276b45759a427508b8a35f639d4b9c4a53301d77f31270d80d533ef74a0819ba5050744ce6e5f35b59f0e6841e22100bb800acd0dd7eb27ed4d05606217dd14c64b5651f7fe49b6ff787d0ba9d3fefc86d238098b65be29a7bebd41f19cc3b0d2b411fd7ab68f6ac5a0f25ef61cac4e83842a1b9c7d08893cb4bc2297c1edc656d9daa5ab3998a7b4931ed0ab3ec14d3e205181958062dd18c98270e909a3ebdf1700e92df9ee2428d9531f3dbcc69f03313eca2b02558bc867c0cb59e69e87b8063536676a0836aeee2f99221944aa9f215253a195492bc809d7806edb26209e21e82bdc2c6f75c34c14bcfcc694065e9b2cccbd9bb623944a373e9c79e35cddf48a3810939c57f27d931922675d28dde93e83c3983509b983706467255e8313e89bc999420753a8fd3b2c375e088879a60817581d4e44a4501370537fe039bc98bd7edaba48ff73356d64a02d2eabce5c0a05ef9d5a7ae13a8100e5ec10e7546f3fb6595ed9c1ddc0ba60f15728194865b4bdfe9af202fc9d599492fc792267e6c31e99c222414529929faf6e8d47847da8de09889d836312fd99ff2381716399c8061066bad435daa68f4ec5d6bceeee56b494f8c5529115fd8f6ee3c23ad3f2bf0b51cf1c114c5e369e340f9cfff4423ef0256e02172320c9e386cf9405357c289cd26dce7ee51ee36b13be38774113d20f3f5acc4775cdf344bb49af5704b0954916c54a839cb73d74422441b941dda06057418c4a2567fa1190e45ca6ce1a758ea35808a5ef9195286404314c62fa3aa1e1a4eab5aea96ed88c22348afe2459dbecb8817c3a389b15ddc09f9741140132730730006dec92182175bf6a1158a2cf77495d7d1936bfcb33dbd520589584909feb24c10fbc243ee56155dab441f0c7b79cf51f09066396fac88a8e1609355aacc3116df09295eb3c87b033335ab4534225d0d8961227279719281705e9b3ef4e218e6dbd0a577bbb2b272a3b1d7e008b6679302cf48aeb9d40268194a150cce8790446c17df98ed5fe53261804be4e17f176cc5a280f6171d00e247edacc81f05c1b9faa87fc831163ac9d76aae59a6c3931f38a271517b93b6795f100679d1a2d2cced492c106f1ed9c16b37a8483fcb0334c596c4c7cd7f4ab4ca79cb27cba7eb06adc38e768fc0eba287aee3b893df9033d3482060f529e41bf0f1a4daf55c36eea2de4e057a4498f2929904b18c4662a5c97e2e25dbd9ad37393f399b3708d80c356114c216f2073bf4beb63b114aa0121101961d67d7cc8f0e2d317179f4fce8cc1687b74c11610414e59f5f0b3172001299ff50826a6aacd5813465a369c80bd1c350eb05ebcdd65cd86724604401f9340d11c712dcaf14f804ec7e9dad64fcaa31176627c67438335eb793f9cb7584df2775890073c251dd7efec44f08f943c12883319beb7eb2013e37b2be0ef62a7badd39e3578ccebeeb7153fa2c4af697c703c534aa212cc2f41 +MD = d5a55a9943b4c49152a1f3aa7a88b620d04498ca6014285ce5972bb0d4d0c0c8 + +Len = 95344 +Msg = 3fc9bcda8c82f062c5a462c8a60a4fe00251b54161e716f9ed6478808f1eb0eb55f7e062177a3fd45a2718e9740a1639f193bebb36a13d8064e064a17f55f176d0371008870121c9a5c5bc8319c3f28f293ad647147e3dbdf64bc1aeeb590cb1773053b4263e20a96f27557dde5c6e4a73ef06cd45a69c1a6a4e988e1b518906148bb14e3a5ac3dd80f4ebbf0bfe0fd2955a55350f40e5fe8a90f02b5766f1dc6def32bf0c7c92cba0d58731e8d05f8f5722cb67bb749dd11cbad16ce7c0ca9a4c05dfede4cd16dc97722fbbbdfbe5ea83ef704c906c4efae973433912869faa7775bfc10a75d6782c72ee45d1a62949df6b4dcad84d7fe3b9644f7a22e1f573b6e6da23c59b5b08297ec9b76dfab415353c69cad942b9f35434fc175df8565dd30139fc5e672bf2543dcaf9d91f0db74b0acc35dd708392818c53f90cf449d0946de3321d02d0a07558f8f35d3cbc95e97e7ff12a0265280a145a0676fc5734c3d2e0af4a94d27856765b8e41794a19d93f89e8081ee71db5731b27e53906f126da39592d44b7e4be40fcb0ccff3eaae2f6f200c1ed92da4b529e459fd2e16f862bf51a0e3b094b745de24247f620afcb4bc3239c96edc59358e946edf06d17aa6d1cd934a14f154176152dfa8679925de50338e0418147572e061417bb344f5c49b77ee89d12a9ed339e572dd5cfba606dba27d618d4c95d7bfd95655abd806266cdf07257d971403b84aa280ead8f9c8af0d8c64070b16ee8d4b31ff69013856e66191af82cd40237cf0d32579879d8e5ae32f7e4dd68521d95548cb6366e8d068ae028a8933aface886795d81ae0de26fb1fb32aa157d1c14862f5c336fb42d8422de38e970bf1a9b6a297bbba2c74f4e087403a46e5b37cf3c4a24418216c8c95e894d3bfb0af7061a5812501c563f76450e73d5479bff8a062db626547d2ca8cfa839e948ffcca91589b40751472d88f63f05b517dbeda5624e845a4d73d392e49f8189d11a05f4fa32c34a07f6b3f69a8a3bbc75879cd1ef210145d38758183be3b69629e62d8a26e7e290a6f14d3fb0748863d72b577ffb49df818d2424b934193b86b9f0bdd93a1d746394d373d4c6926e33c333d800152d5185e0d6c3f67bb4a2d417a6315292480b3b77f9a2564b486fb4b03d8912cb4019db651ba040612a6f26b9932296cdfc1990c6f06314cd2b0f6f24a4d5289c368aea906f5437830f02c716240c064bbe120be83420c0ba9ecfbb970656a1f655474be94e5a3c6fb6f06dc3f55831a9e2a6f5725185ca923823229dde882f6830b167d6352cdf75d6da63297381a9572e2af5fbc4eca2f27b9c4c9f99e411706d6bd6edb0468133d3034fed2b22cdd1d52075cb0adfda49cdbd9212d4e5089d4fd911a65c21d238201d9c5578b61fb89c2a0d868fd9e106c2e98badfc25654d7c8b9086756942d1628bc11908b63f69c79a15a4e06547c7efb2a1b79c0fc81f57f5ec04b86743ce0ed0769e479d7d640c1336bc98fc8efba89b7cc6111ea171869a7cb771b6555c898df56bb1f68a45ce07e924162a17108226656017dc71e27cfbdb055dd1182b6706e5f7e43bc67d71fa9571e45880a500c5f40bfcb3b9f0af9c7f74b931dca92bedc0c93ae7b279bc6dd42c90125c37a90cb1205c5f0a0a92fee29c307343644ca51e563284eec8f1d41dca85e1fa36ef6d2553a318b2cecb95acd24fffcccb5dcf4735679ddbf9b6cfeac24231fb215869b90c5d8b748bbde326bd6441d96cb3ced3dd568cfa7a7fa3b3aa61accf955884f4b10821afefee89f8b419e409c6f3265cb46beccad9b10210f9409cf7f1743150f82f65c559d1dc8b6cdd40de58a0584a612437ed85ff6d8b257b9cf4d4400166283fe265680c6d673e2b02b7902fe7155a2bf8a30dcf487ab58f27569c20779cf7b6020078f2af04be8f84360c16555605dfa9bbdf8525683fe7b69dd7ba067dbd2e5f172b3933fc54775fca2ad825750aabb57889c576ec1b01e52b155130810f155419fd247ea6967efff48b09ca0acf3cc6698b14cf7edd8a1d8eb3aa783f53e78ba94d58f1abfb02ef35ab1fc57fc9ff371f51d791890ddcda49511a501122216025ba5b3f7508bf981de97eba5c916f920a8ca26fa31276a5eb6c255a9f006f6c1fc28fba8a35e1951de4cafb299bfa61ab89e9bc5581e40ae5734ffa41650e1a07d48af564092570a61b790a5f704c1082d831fa08d2a163a7f51eb190c6a9f46e8ec1628b090795470c0d8a6684c14911060fcb359b3b6ad360061315bbaf85d44fc79477abf47d9124fcddf7600655e681c78274321e6ad8429a8148aaab48a9a5f20da26868b3e4f4cb975a8867d163da1dc24d4dc6fe272b409e921a09a77f1ff530a3d4f0b2e2f9fe2938647246297d670d1924c19f6078accd8a90673cc51c35aff4681904fbb31915f99ab21ea7fa37b5707d9ab8e4c91390ba9430730c3937ce0c983e249fae80d01681b3e55fcf047debbecef5547b297a7a9bf1e4c4d5703d54ebfc9c5f5ada0a27cfd414c17a51a8d35ebabf002d630d731e280c8faf735085e9c0d6bb269906a5bbaf376d7ab3d8cfd40a80a85e34ac1ca14f44bcf5c5b9e808275e23b0226808fbb1c7c44e8f8049b51ae49d6c32e8dfbbd447dd66cbcc23dd9cbd39862aa0da06784056645921d97888555ff5c24644d4536081610a29a1c0ad5e5cf6f64381425f2ba46aa55fe7a4cf4d70898736e471493919731534ea57b5cc1ea139b2a755f3042eb0087d0cc04c477f75d65d2719222c362b518076095270ef034990a4a7c04475d2d71ba131abddcd69540b95328ad437e8639edd6c00075eabca4011ce4376ea51b5be5d9f5a7afac274d4a763cfabcf38afe278e65ad9edf92053772fe9161cab08c78a5fd4a9782fbd4ae6138d3d4caabafde10eaf730d79e04d3d434d9c8d4d64e9c009a6e3d5ff91d0c9c82fe330acf9339e5b9a6d4dbc8e8fecaedd94acc74e7797134da484b096f8db0844382bbe0f36194388231f1f8fbdfdd925790b972a036803357614f13145924a46c69e5c5177da5d152f02416839f94891c42a3b7c1fcb5ffad3071ff5297804c3f8f916647b6a1ebe0b8790ac965783bf007922d92f29900a45cbbb5726f4de3869dc7abcb340fedf232fabc155a10109a878fbb5b41b39f038e351dbb0a11d1073a8d7cea1e77415105ae15afa5e471e46ba14963108b42946de6207790577d8b0fedc1ee9c614ec5da9dfbde707cc4945bd1c0f388aa531da2d6a4ec29a451d9c4ee621dd8567c1659d057ebe0617273fe260653d1973867d40d9264fb82b4bb009847c0f7dd330b294e121e1f1ae449fda804cb12da5b3aac94d32531780ef76bf4591e247fdb6df31f12bf552f81deff5fa2a373fc225ed2724d77f10fc856ae097e8185c3dc045e4c4116a928b0f9ad54c9221d84f79aedafeaa463cd48a071e09f2f42319f9813dc866b448edb64af8e5f9138fa41b7a55491f3b13df79d5b7fa57184518af1b9d7c8054ee969e5ac154d38ebe7677ea4672aab00e43d1415f0768f73ac06d6f946f12deebfc2454df27c5f5fd2d3b48ff39c157b4c83cf473bfcd136c97c117b30e82b4c9a4e4b392cd34ebc43ec2411fdd17947fc2f9498661d7ff6305268e69d9547910174c118cb394c29c21a95d08fb01f8f7cab2cb07bc3e0da6af2a4e395e0c9e57d9f6d94d898a3ced8c5ce74b0214e79555d5f3881d53d0bfec28d1921b1f86f9534195359d799d40c5598a6690c4f2d0eaff4d8813bdeb0742cea3148f01d58d19c8bfd59de7763e732bb0ec1596bd42f08b53782dd0bf2559685d2138580c7b93f8c3bdd9585a2f0c5ff53c0f1e79640cf68fe8ca30cf9286a24a5885869e5d685e3b5efe40abaaf742c1d6eba0e9aca6ed6d4a77528ec750f9051b25220daafd75a1296b350d3aca80916d49d2709554cc762dc3ba9f3c5ed917f9659eccdcc9bb7fadbea9d1370ca5fe4f982790a67d1035032ddd5389e6ceed73e5617e6b63bc317c4713aa58240f62fe5524dc68a655145b243f5e08bf47100b132e74ff41d460e5c306faf6a7496a0a1f3eb6545707ae96355501611ede0a3f7d3a52d0eab088aa80f835ab1cc07de344f9b0e205a47e54dfc3000babf0467192398ab8d4bd031b2f7c0cddeb21092a64da5e9a48b7de1781edbc60dd2a5f51e090aeef86767ab81ce6c31798d7b6400d4501f586ce784eda49a91928f8bf40e6c4121d76696a11d7ed0ad0ac50efb49cee6d8c5634c77b377b589d25c7d0df136866ab3b023bb8fed346a1ac292008922ad3b71d97362d27d74d554a244e8d04e21f112add6a0de05df8f30ebce1ac8b8ee71e63725eb53a01f9ea0caa82cb29c5adf7fc579f912ac1b45d5aa8cf20f78f0a1ace32abd3dc7fd0b3f3a7182a008795c7f60d26d34cc2eb490669230654afdf449474a7e98da5745b85c6791a17ac58f9ce6aba54a4c6103e988a97bd3165b9247c94dd76cc0757393975202bdda87a15dbfca485f14fc5b6876997b60c453a22ed3fa6fc2639fbe5952f97cfc1008ba4a53f7ff780c47e396992ad9143c2d4d84cc1aefa1aa1d4e91f725a867048d00ec0afc729f1c8ac4fa59243df76631bad31c75fe127d364ac3ed9e2d059f619eca4da048db2c0c251d1f4e4e122aa712a22ad3451cc434da789c2cb5dfc7cbba6d82aa2a3524162f855171b56c71d67c7a60fc6bc7675d28366c97e5fb65127d5b13e3bfb3ecf009bc59551a0d210721e225b7191b4ffa5988c5a66763627f0e1e6613b0606ce2dd4a9dc223fe24822862e1cef721625298f30f23e31fa45a953ee502a4418d34d0b587807b46608fba82fd07ace089af0b01b2d4003515eb3c41f6774460352d0c877d56c8edbf76ffcbdf2be160ad57da39168167af9c7929b1033b38c44d16b947e90eb3fc287e1ec4f0023daab4932e23a3f4c094204e841573172775be37fe7e326ee37a82f040f6985369c588ab2f48c2f4b2ed8bb076f6aed0b97c6ed804b3c03f016fb7148ce740e80cb90fe7042fd948e5c1c4e827db1c3197e04741f36efb48b4e4ae322b214e87cf8f338fd66152b90218b33dbe4c250169a930baf2384b53a5df4f92442c2cf95a4edaeacc64930fb1fb40f963d13107d6df108a299718267b6b827c008e400554feee410fc206129970536240f3a80c878bd1fac115ca8bdf8d2f3787d1f47566a856dcc60211896382d4c27a39f2d824b55a52e23ac947794f3e0c007caf103753fa031aad1e3eb636ab5f3c2c7733546393dab38d7d25f0b897439318d89d7007c2fe334a94f73b96c082ac529fe5bf9f64d95d964fecedd023246a2cd9e5b8cc96143861db7d9aa9fb72f236d3b50e70b59907dda56317a0c8f6aa4019b0b8ab5e8f517b5b987a774579375d796de9df6e60daebe854172f6f037edd00c517ab02b5a81f7b0f830984dda351fbd3f7f27777fe478185948601910c8af6ee7ed56acf62d5a6ac5e66a2e75d99bfb0e1b3b8269a79d6be37ab64e97ccf63f1952f7f24aa254135b39685df8ebd2fcb4e2a1ab4d70a51c9a8a88253f734af9703c427fea698b57329a2170d5d45b1eee75e836bdc81596d8e854116a54242a871994ba37eb56a2e69913eb8f3baafdf5457dc91d266557191488b7cad8085ec86b8d45c5b04c82e1b6be42a77a490673c1d0e6fe042af9e5afb47cb3776de2beb28a871650e383ae639f0a91289bc4e48b9004d2f9bcebc91a55d4c6dadb62c47f1b12ac35a201c72024a7eecf39b5c1f329973e6fc1a93de4fb44775ac76b8431cd5cf9e71e99a68cedaf12c6995596990c3282eeafbeae700360477fb849787affea71dd9fc7d70a58849fb74120cd0db65b52fefd98a57c0caca9c234a91bab513fb691cbf8c31903cd0809b7a3efa1c666210921c3cd49758e30bab2e6d8433fc13a9c19c915496decce46635b78f5bb077fa5c2cc6068ec995ed1b9af58f33a1370651fa5280c056864e5dab3f389e2a3c14d372f097ac03296afcf5ef80bceaafa85341995e158c46e709449e9defbcf9878154842cfaefe7a9d5a72402d7bfc2b64fd82c969d6854d6f1699b65554ef57aee3b48707e7516d32e185cbb8b08ba58ce29d3cf60d3f7449d800038d9c87916a0900608427eff0f8fb05f53e0adddb8579b58b167b3785996f393c08112cd8221b9849f4ef0eb8681d7f473de9674fb729682e6b9f21f3c63281da2571539e7f9208bdba8b520608bf5e5c38eabc64ca78218135e7634168c89658963b7056dae2be2645ab3e7c43672f8eaf7d51dd17fc8e3e35f29ff0e9a7c351bace1783bca4453e36cd487da09b6f69121fabfb281ceabfbc3f1c84d146b53003a7cdb7ad5d2a400e4fe4acb8c29a65f1503f51836fd370692b8d6fb82bd88e1156e7651553d9e62cc1b76bf4733d2fddad9072b24bd51aad465723f6cda9c6646a191e9d4ec09b22b1254ddc33d401278623d12d577bf8f92e0e4415b2a5736d4fb746ad949ad970acb2c4e87adb947f888dff6d1914a5ed411742ad71581fac76667fbedbb51ba702e463a1bed0544613234fe9e75babfa0e06a226603e15927c9b1c497aabfc26523e9c80863ecb0bb488553c689d75900350d50925c40fcfd0b9bee5f7ebd58f2925e20d57936330fb11a1cd13769d5fbf8a6dde288668a50166da1cda014241d63ee6b0a96aa7664573b8245e637da99117df0deef1bac29d16f046a768ccdf07eded130211221c22130adacfd0a11e368dab20ff9270a8f24e840bd69ecfc73cb7979ce8434dc31f740c48de6aa22e0e5054bfc0f514b8af7227c4ee2fe58ad33068c6c26d84dbac1b5ef7108dfb4997145e22e976218223263e1a647888aa69ccc31926fc81f6467d558dfcb716f14f2e49f2bfb231860bef4974c01533966f01491c9c7cbf838d2e9245f9727fd5b5228ab7da159f44b811dc5c879270ef61526d39896a8813ce8387e79d4ca0376775a2eabf3cf53ec642594a316cbb15df54a21884428617a920c8cb6ea222c6b4bc14f3e574cde494f562b643f09c9a376c8a020391340fab9ab769d42f71d44b4a737bd37973d6c2bf6b3935ea7fed182e77ae8de31c8c3435e65b7421181099c520eb0fa79175dde4e53b9da6efaed00f1d76899499fdc1a6d818a5338fec0ea0bfba008ba142252a6345d1b266202d72cde29d3256d502420f1a0de333c73861a2614c922ddc56d467d078997e115f1e1b8b2f58bdb244bbfde8149cbe42957c7b894a5781a4e1975573f8c881d3035578c8b6544906275916fb3fdc89eeb475ad9a8048672c33d7cea8e8cc3be5a8bd8833d8d1835128cdfcdc063f211c03d1ab0d94e128e2ec1a35d7bf10e6d9cdbaac54fd4ce723a77f11f30e210e6b0225166aeebe516968c32d88f2332d2fd0d167949a130eee41e0f8e89e1ecc5c3dc4522b043c7b104887185508af794850a64c8b45e04521769814255ca4c5402543e0d65be80077f9ca88a488e245b3cb8dcd916721345dc408e621b04f93e7472864f57c5d7c10fb01e0fff9883d12b00c6d5fa4525703a8b801664f7bb29211f640f0ebe9587bcad1c3dfc0eda9c59ca69e3e53f027b39329d88b70b59be12411f75111382008f79ea3bc75af264ceff0e2c61c8710de11d2edd9ca89da44ec100abe82a66d58ffdd032e8e293d29385fdd7f5483bce3b357a409b364d83dd884fd61b6d09aec521164ae710848daf467e0d2a2728684e60cbd73d1d3205c87d54213242333137ce03aa4d4b8f3e2a29d9f686cd0080228767ca09c514d0168756b2b613ab09efeae07ba2fa7a8d0d1555b993a28bc1c09397428897bb8ccf909fb12f473adcf55ef5e46c870e215ff43b7fd90f91d02f6aa36740f9eee2fc7f75472346a8534f138a0e355913a328add36fdf7ad95877f6d360bb547779a43c219c1c78bd1507f0e72184d851ba702865b22d4c2cffa11d6f5681111cfbcfaeead7a14540cb25dc5444e26c900f404d396f4bee526db4c9be701896a60d85bf1a203b15fb1cafc1189fd67d974a9f0497cfc2c6134bb8e109d70a4ddc59cf56f8a17050b4b1af867c5be8732f129635c6fa183e3741b64d98b2df9c8887b45bcb7fcb5e34312c13c8a0a0b6200f2cc80f17d8bd85f6b4f5b32a1ded703f3db7dce5d1a743452f50449587ae32ea69a5ba4e87aac613bdc1a2674ea75d28715073f90c94a895bf25376324c42c4b55b40fc9af6fc23fd699ac90f93218ea580fd7e3038b2dc8e47aeb31ff5ed8d9f9de55add773412309651bcda7f6662efadc52cc3ef59886a637a628a1e6fc3d5c09d625881e0b675d0d3548df5b129c60a02adc463bb2790e44b17091c2611f861ed85649d8e7b2db79432629c9e2db9141a83aa2c3434723895430575ccf258006a46ba2099fac89918c920da8a09495a9140fdaf71398eeeed6917c1a0efa51a7828a1b19f9fe713e5ab21460126e75beb682773ee915755c81ba8766e54401ebb9dc3d71be509b66f3aec5590112386ad5bc00ff8f65c2b99bd300a71dac99b993888f77b6490df2a0afa9fb3427e694bbe4fda4cb31ddef6d0670447ed920f856b69a94a892d1cba9dd46af75568824ae23f6946621cce43f795ea7d0749e924b90e4305dd3efd7565f27db8a472401f7a1743728dc998259545237db241c6eba3bf7b49eb36d00ef5ed1e93ca1c515de85fef5d80b4caf02c0d45c6792a074ebe25b8631da552dbb01ce3f530c7047aaf81d364055eb5583e56d7e3b65358c25ab9610def1af460371a44797322f7fa52158622663805b24eaa4052046e09eb2be32b96fa081320fd5de67d0b809a5152937e153dc12a92df7025adeddab92d844b7e8aa8ed5db27560109c54907a24337421b8f69aa27e6360ee33dd19d50e065ab075964b228931c97943f8b2f5c77740279a1b24fbd97cd500905cbbec11248987d42c921019a4e287006268bbcf907fe61535e095387e45034fd7217cbb51605b22e66284e86143a04e2c323aa1019be3c6b16e0d1ffa497cdee6faf5713f67b0ee4e3d2f79d9757ba9b0afd0f05d2cb73b281dd1f4734ac3aa0698f4e721181f92ee724e528ff06f9f8a223d12059ac6cf0480725a7bd17e5db09bd961b8f9fdbd21a28fe6e74d02ac2349ddaa9d7e991ed1267cc6767613467f7431956975d1c9925e52bb91d3bb3c1677110e8730b49708803face5911910bda29bd6a5144244bb063554f22d1fdbde4a95d255699fb4352e59825bcaf63905a756ca1e6db5bb062ab6279ac1a707e524da8a7a71b112c17158fb4b7c312bf20310d417eaa2a8fe4c43c7fe39d74cb5a63d9b78f1af2f47f99c5c373d6065ed4648893403af7b2ddb6c9a9eee2726ea4f5d79d361d0663347b249a186fa6351e17c5df55122bdff68af33ff571d02dd70a8ca1c3acb540dbc39381cd175c0ea451ab6de5bb2fdfd747a08822d3f8d19babdf0b5f4f67551f77f9bfba5590af111a248417bb6a7a27f5bacd9b8f50229adfb822318f8468a5a1409d08b1a8e10b7a186d139c43778f9d2856882d42e779aeff2f62f3744218484f63dfb30d6c3a7a6d7102e524a0b645d26b123535eae3209c7a19049fab1e750e5966e4271848210cd60c1f74bb45f8a054613091f17e3e784b7f486e6a5f2f65c6c6cb5eadda78dde458d19a91e3bb7a589ca6bdc5f20f79eabc494749857e3cf426f11bf29b85c8e50f8300ea399848c1eb1d232ee89b889ef78f930e356a7b29afdcc4b03052b61f58be0d8eee96f2d5771f2af308eb8eb158a0bb8219fc0aae8916c3af44e78ddb5c082944abbd60dd68333adef90671690806256dd93bd1cbdb277eb77d4a376142ecbcd518167b20e6e2bbb564f41b0f2f493b971d30b9c7cd955f9083859af933ef2e0adca829e818b21541f0be72eaf4ef64c78ce1a8ec89eacc01ffa0a0eb579be8a9a07c537b262db14a466b6044808207c7ce58878034ad2fd499a1307ed577507a0b98e22239dbf5980d03cc63fb8a8e5d8c9d3fccf967efcff89231fcd60bcf47c606bc2579434af2ee8f9d908c8d60526eb6b618fe9f74bbc57a8dab81e0ced678cecbcc0ded19219116bd135b15e56d1badd6ac6bdd265fa7622bd4ff7db3f0caf6f55f1d61c8ee9da0133491a985783c8a86cf69aa6d854751f3be776ae75d64882425d328c11ebb36873b56d2a8397853adca208cb1f34c4fcdb31230d3e5ed8b3f6755c96a7c92de016fd116b67a781235e5b70d5a725f65a1f9f856de500e082e6dcbcc2dcfcba2691a2b001701e3ce056856b5d0ca289957d950646f656e06d97f5eba71de0d8aa7828b1533966290059b270b7bc34ef5d79b42e3f0edb68d28e535199d72019da4ef1adf73039d5f1dc64f97c4257a810987f85ac8b18da603e67a741b534ee346ab00e53d0f3b433530f9e111b75344d6e597515f769c5752cc525052499d6476fd64affa81e54435224b72cb42824624fc4a501d078aaafddde737aa1c96291d2c6ec61322426b05e46dd15b8eae8fdd1537e06a2b00a7ec6261b08b93e039218148b1eebafbbf8ebe888627638028e7788688aea9a65507a2e8445d78249c6c4417f8f511b748b6f8c41a9989a0182c6d60d1514a23bc37e7a2798891095be4bd06248fee1f0f66d9481418c7b567923ced42bbd620e46277bada74a7387d73333abc231ada1b87aa3dfc0be7671d032c5463541544d6719b56ec8a81580a00f0de481b5e9175ffb4ca5bdcaf60436686bebc85ce38994d9b9f3930e9120b723a1850de80ec23b83c18b7f2e845e1a29352d6b4cba335dcbfbc48cfa50e87b35a105dd448922f988d4f9bb55ac1fda19839384bd22eb3084fd5a1d07ef386aa98f0f665802ca089ee968c8dcc7aa14ae09a6ab0ac811ab89214cd993c6a103f3bdda4f9ee617f72a61514e20718d485b29ef54d214372d4d19f5394a71a2e5a8d01eef85cdad33afef5ba1cd4449f3a556c6088f81cc343549ebb2886ace7e3d4845cca903fa4cb3e5e06a3f9a60851122e33cbfbb616ef633a8ebca3c744c2598e76d75237fb0cae7781e03ee51ab33109f77df0b672bf469a52bac4144be06445c5886c6adfe59569b2396da9da46fa273305a0c7e09b44e89289b23a06233cd4d043a481583e3d5b22174c9c52f3b4b06fcdd38f676ba749d39135e27d742b611f71c4246effec7657e3a56489a3a9cc333c50b60f17b5e79f3a14b4b7bc77153b7b92fa2a11ebe2db033ea9873c1fa108bae1e5e088b7ea7dec1957bce16917abc7d7ac935a82c636e1df1455a75f5a75af4cc4e3a4f47af60f0a7494cd4990f7bf5ae1b1c3f84aeee3524cfacdb11d03835afa1f54b6bd910bb0b248665fa7a8cae5428d3497988d735efa7e955c12389fd3309c8143ded648d3bade96f285454f3e772e96a5d59bf8cac6eae6aa639f697f0d6311e5034d2f3b3361434c5156b82e279dcf6b2c9eda5f5745aae135bd4a263a7beee1557f26afc6d657b334646c7dfae0c931c32080e55697c84ab31cab8f5eecfe82fbf396f91b47b97056f6d3f39a016a3fc2a854246ae8282d0243f28322bf2b0f1d31e8dfd9bb51cbde945558ac079cdc52bfbde33c41b2d24dba89ca2efb5bcfe5c2822aa93b070bf4c65a73dbfb46519beb23ec74a94e80ba0ad62c29a8780b792dcea232cec37ac2154a0dcce450e7c4b7ee05b929e48171ba4371bbcf690c01fa320e1d7c6d5e6d088dee2acaa1e3f5a887f7b3c85c1b9b5236608d771617a6b21837114ded0020288bde9bb62390584854890b8e9e97605a19c247a867778fdce7e6b74a2ba801fbada5c7aebd35121ebe856983923de75b535f916a4472e60007e1b77a109e380b590a58bd57194eb22eb174b0215459dd4cff11c69552d0a6e0f0b8e68229eee0f8d7f3e8da85328d0ad7d51c3126dd666c6a72c3425d7757dadd62946a924b00f3d242392cc1e636bbbd34cfabf99c801b675a6a33dc039a5d6f5e8eb12276f5b0c4edb736159335aa2c37d27816beb2c1c072c251169cf8d16d54dc3d1e984799749c6ae0c961133eeb892c7ec56a84c63b61d3825568f89ea0eb84f8d1d87c15acf65b13247757dec4d0e5a74dc87f92a1cfa5afdf92222cd0cc90c9825f1e8b32a391b56ffe89f47db506daf8012a8db96641c1fe40fee3c49f07977854b565cf4c14aff31d32e7dfdf96ff0c3d0e204dcbae9ef79b152c460bf24cfce0c70a4b99edeaf5fdd91fb2f79dfdd2a3b1b123a9f43015caee6d1cb858cf562bdee26e31234dc0c50604bea424be925c9daa05a61c5d9ff5110f0f4f4108ce5c815500bdbebf9b9e41feca8f3129948f5a71b96a2c0fdc46077be778b6dfac9c39cbc8e4c72acdb01375a05fcf261f656e70079e2f2d15e357186cdabd3c37128cac8f4f45759f2203d106bd039d7c06630db9ea2a9f93f4894d661e6107b8e704601da54088591d9a7ac551d776f499c1b295f5274d9ba226849ceba7287742294f3a8fc14b43c85ed8a5c25299cd470ec665682d1f7814b524d7ea9987bc4c82e2aeb5cea6a44cd9536db97cef4f37d4b1efea45fd7074be95dfc33e0dcf2c977f40be7281c6d09354e7dd5e5ec4929adafc2476cfcde7c93e7c1d9ea0f70bf090ba53b2c4ef7d1341d9d7ffcf727fe9ab53bec87dd5975f8976a0c2297e11167be21b9857687be1840c4e682ba227488bbe5f43efd1ac07dd94f5b191aa6590aa81bf2b2279f1858348eb9f589db13fe203aff00d084e4aa29fc473bec430e6835ee6730d690787a85456ae40a8465619eb58d6c0c4a3af4160b4119a1399a1704339790182e7705afa369cc90e0e16963efffdee4bd6be209c6e920ce1c948d7f65f44e40ab6c800003372dd153006c2c44f6e80e70dffa81e9afefb74e863224001dca04a9f15042ff6376307d5af0544ed305fdd70fb41addf5e51161d7ab8e9c74a1b8ac8e1cd4f27f3432a2497c888844b717829395410e5b9f50c901601b958953f1259b3c3286eaf65c746487156bac8a0ff5d4147105517cfa16abe65785dc5f2297b144e817172b125624a6a7737aed3b9379c8475d780c71cd3fb4ced7de31e18558bd624db440f8ea12319b3a405f2efdcd1710712fdc5c4f2541ee161f6aa2811a0c3d7522d67482b5de8d1a9d6e4ea7768788daf95b1e3f051431cb1067e9ed4db7d637e36a19c277f3e9bed2893ef2eea00d1555173bff47a2466141c82c5c9c56c900966a5d2bd1282d71903e64929de7099ad37f3a027582787323e9ee415e5f92598c65b32179d1e4ed46fc53e91cc32ae5f521ad0b172b546b477ba42e3c38aecd65cab045aa879c8c77518188e3cadd812a7ce96b950376c42ccbe2859e889ab68327e8fb1bcfb0d9a1cc71d47b749de6e40f839677b13c1834792de9fdb5c2bf950ba1c42600ce4f46dbb96e5c46e8a1d248102e47ab30d20ef1eacde246d342fbc49f3351c14167d6edaca8fec84a2c45b4f3958d57d18c0cc4bda3e4c228eb280115cb3787b6cde290d036eb6f3ef0eee4c26eb15dbaa0ce7ffafe6dae5002ba4fc9fe4fda9abbfa63d87aaaa2439a0e45e10c3c1348aac472374ff561d53422ef103ef32079ec7ec50a06a507d4825456f410b61ef8147f4a072b049314f9e28d7d1fc9ffb0c9f033093d63167e3431966ffe97e765785f75cee223a8bbce899985235cdeebceff3c3ab18d44bd4a2692b93859f30d4105741337cb19262c78a1bcbc04349775ec4f32f55c18fe1eb3ca645084c85bf8d1c3688e736ae09e4024887c5897205947fa666b8819dd3c69bbf5c9a0ddde2a74f22348b524778e60907cd6d28d32e3a2cc699669bdb71da8d5e22626ba00304f7ef808f8cc57876a740e4dfa7d2baf8d13a118a97b385d01a6bdd89ed36eb4c1c84b41c6d91d13ce5db15448ed9707578ea134afe8cd54f4aced6361c086228c6c918597c114bdfcac0a8c4664f195a28beeace57cd2b00266f55927e7c3040fea6f36f41aead085fd8e586b69c7d4eea9edd3f2ae04d8bb536a1c59dfb1c3bcb038f8544d0c15eab0913b3062764fac57233c5002c0397000c04f601eeefc136c832c40ee04d8ab63c7c72df5a9605c12235875f1917cc0dd7c44e30bb717c46dd255426441a33885a66ecc79cda18e6962baed20f4fd4e6812af4b4cc6a11032ab05c1466f0022a491a494856fadb3db75d61de76755493f07e101587a22b75981a0461ad979fa3f3e0b0eaeebcf5cd6b12c90db64ff71a0e08ccd956e170a50dad769480d6b1fb3eff4934cde90f9e9b930ee637a66285c10f4e8aa0ee889a72afd7354976e03a14c13dae5b49d0b9302957f1624140dcf3ddbeafcc921c5cb06952cc6f40d6695c6cb4e000a3e125101accb79dea37258bb845d14495d4f4ad230ce25af93890fe49d55325c0e9ea25ae97bf5167ef6a71e90b776fbf5769532530fe716cb1b5e1a0c98e30699111552fdd91e78112b28db83729b5d74ec389b6e4a91e60e7e2efb9b8198b6481a18ae3c9b6c5004506c76cf1707ea7600b361f506ac99c821e0fdbc97d9c7960a2ab1480b555ac326d074f63d232f5364844a99ec9d8e92b7229502441cd72d71da0082d16fe4d81ef35a7b2d9398a77829a99f34eb40f8ae4265ef2ed85168d185107f66227aada9439bd090dfc2eccc1203a7a82c5d6467fec4e5b0a2b2c2b9ea65b03203a8ce365fbd98ef5e1a8dd0ebed358ec730607486468861f297d58b4874b7dd89ebb47696343691951c251705cabb8152766774976f39cb4e6d1bd64dc1e8c13bbffaca85a42c301b542d1f0e20bc08347bf3c890b39c451caef01b58d1d5757f920bb2bc61fc43673f10495383b98c03dd9fe100980277f3da1cdb08290072fc0e51bf99123933ff5979367478369546f7c66e75a11ecc5a7adc95ba3bfc3207817741aa19359a4a1fc256ef52b5bc547701b15e4343cac70dc9cc0d9f1b4b4897e7097e0ba3deee1e763b32b7a959d2b7cc6a291303fbb00f6efe70a6f02725be2b57734df68a41c22f43dd2b94063856a0f97474f1c7ac0c369d61f82d4e2560bebc28749014eb9738214d03183a0bc009dfbf0d7fc71160bb3970170528de3c1bb81c041317422a3b2410f2787db380719d6731106296b9574329681a6fa68cbcdbbc70f209fbe7a2ecb75e6739c61462a30b8456329282a55adc8fff5b14ff2c87884fbf556f5bf9ebaecb5706c9f877912a7bb3af9b392fe127e306a3bfefe54c0df4dd9222f3ca9175bdba6d15a90ae8328bab42276951669a05e2a1fdfb71a9cc04cf38ad4b7f8e9a9a13c55fa2a708c238bf92bd7fa46b815cf60e558e4c2130f416c164cf93338c04f5b80e71d67348077309c408b3509c7cb3216d34ff42eb4746b4e00ca010c872d2ad989313c8327c482fe180e8b639d9cc839b7be57f4972d19bb56f10a6ee682d2e8492e978100ba16d7c74cf2cf7f894bd66cfa936da0b49de4b738f765c5987a358ddb1f37f4a315b2b50d105355d9e3765acb51a1b85020518c6570fa0cb54b49be017dace9c5a6144a198dfa07d5b7a0e9f83999c54bca8b3b411c34a3226dab456859e8c86af287ee3712c97ec5f0dc814bf25cb0ebc2192e94a41b732707e388d859f47ad82092093147caa0f1b5b28a8a25f262793183cb26afb7620b417af11928d7e65759be03cdd30456a02fab6c7e7964c23c3e527cbee611591844f7e7f26c99f331c59144d45f7f891b864e8fef97b9b77e120da826f130419438e2d12dce438bac8b95340d92441fabe1235ba526f92b85d43cb624771c00c845c41990f5dc9512d4523b42155a029668b33967cf2c059bad68108120de80fc912326e48a6cf8a9c74fc2398fc9182445858ffe3a5b2d06c5181d04967da778478a60f034fc9eba8d142fbba99a4b9f9d22c6330e8e8a0e43d445777e015f838d7e2f7e9c926e8c4d29ec900bd4814d9b1047ccf3cb06fd5024f0a083738f668b89fb546939506930175f805c7fa47864d97991931c8819139186494bda1f6a6b322c3b44f62c975e65f25344a49b662304c34c9388f9acb5a26f387e3ef6d452012afbd5d3ea5ffe9b0cd06d494e5ffe1a8fc39e173ffc5de01436c5a7feef6a7f5e5cc3d77309384114c17c79a5ad1da244bf5ad2435234d1db0ac81e1e02db332e26b70aaddd36e074ec1c398897a92449086fc0edf562ff2d7e2eaa3e54cda60320587581231dff9319f393df64ca29086686ea262f0ef273589f54462e675e46144f1fd7221827d912a98e925da738e8a14756d44660301361c5231fd8d1e55dc8431198234cdfae9ee73289ca69d95180590ee08381437761451faf9a34c3b204dd51aa6ee4af7a845588adf33794abcd651a332e99b30520ca50dfbcb87eab92c5e9f74b061fa58d9a97e41f3af25f4e1280b48fcf062765fabf988584a0b239a2e06602dbb897815e6817979a7ad3cc094a4aed4cc644f97d73c03fc1b12ec01c3fdeda8a01b9284b012fa47eb5700ef180df92387ac3a5fc744030963787f0dc0d491c3b837149076c128c0e299ede73285ac4baab0e2f1fcb01a02cbc24918a528e1118c428ae3ab1aa977460c602374ca2ccfae08c5f8d7fead9aac76f6bce1795fe464e471d8dd6dd0fd5e24e43e4f3a1f221a1a5ffef98e22239e1cf454e63462ef0a9345fa7e5953a5c35a06922263e7d5777c1d5ec1fd3c20190ace8b53e89e83c5b593c32e5b9622ee3223c9bec61b7c3e848ab2d1ba402295f6f1da9b0467352ee1d7bd3df31cd76743e84f44df2e68e7ea24759943d2ada +MD = a665a46c304da954d97bdfe62ee29cf20ae55cdf21025f55d38ddc4623d8f112 + +Len = 96440 +Msg = cd20a29f4cca6d1f66edf300aaaa5f11bce792fea84f1773759a5984fe0f134dfd4709d56933f6390261c5062a7a03e6f610957f8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605febe19f320808f03073d2b0dbfce0caf79f4cc686ab3b03f724b1409b65aa6158096670a10c04e3a52e521dc798e4374fc263ff5f94284128cc09465d9f739be8a3ba13ddecac0fac756cfd9ac27e1f72c41e8e77fdd67e9ee54fc3fa8b6895787f8590ccf029feab12c8593bc2d60cc86d247ab82e6c41c1362bc05971aed76e6770ed5860a3380ccb0d3892e01585b9851ecb096e1313f9894344629970e934202234688341433569e3a387646313add3b38a5107f37baea44257fd4ad4543075446de3a22ca990b4f4a10295e73c0c208cbe7a3f33014850ce0112ce029fcc2d7e9eb3058cf28373e53aebbdca8b3e34506f6b5ffc2d2f558f4b896b23526f0f77d1bff488a4787061762a223385abd7a8a50cae7588cb7b2f3c4a6a5ff580e5d80defb74849d6710e5ea70c4bb4bbd13c694576c799858a53dd3e13dd116975485b2b95f568053f94f94bc53a9fd7e9b3c2fefd19e8c349a5344badc62d918870c25bd8b78a6da29c50fc9427ce65e9b6b91f8d94feee81cd4c5a8241d260e5f84a67c6b5367661ce69a3c03acacf97ec55906c5f626ffa732a54d877873e5687fb37a818f48846d14e29929d1a7bbbfe9e39e2a49cac7c3ed81ff890d493a1c5deb4c5074c0b174e0774527546d31f939c033988350fcfd65da52ab341c78f5cfac467abc7679dec9a6e48edd73d8a5458d4b735b4ffbae4c1ccb5085742e8f15750d42cec04a05411febb2a5423c3e8d996a6d3a1e407100c7ee3b89d6d742ffe4155b1444ae82d730bf55745ec93f9272f4c8985257c0147a2faeb9caefabbf67d326256a23c20c97f3c9a3200c22c4b89f280e72ce2607a2043c8da6e444047eeb368aa7265d51a41d91ba4c7182b4c8adfe04f6000d4abe00678e1161864fa7b20ebc8232cf36e39140323a95d9e321c5dd04529a006e4c98b23390c3fcf160bc012391e5723ce4f347a350e582c0626b27852ef889d2cc519ef68ba812aa388dc0684caae0c406b83a7645ed27ecf8f2701fd1a81428cbcf907f886a51daad9bcef318efb57cf7547b33701933c95410493cf12539d0a94749171da754f31e6a8f4c8d404ab8055c9c6365f630d602391554f40c655b136d0b6591db7694397e83dd20392b15df35106eae00a99391d1670050aa213868a559d3ab73412e5d4c3f3d7826d106d37269edaed4f892717da0c79d9ae7e93784d6f9b10b4f32185833e5dbb5d71b80a92b48fecfb8533f9264f3416b33fdfe9fe530590ffb4fe926e45ee152a7c4752db718f47d63464ab4264bd2779fd72c3b172ff9fdcfc85e3cd3111f89bd821f94afc6464a83fc21676719c76c86155f0aff311a51473bc60e7294fcc7a2e4ee5277e95ad394d55200a9f5a6968138f563dffc30a6fc2adf206562efa8d25d700ba1eab88510726b245157e6a20ba28dfa6be9e36b591607f70e038e89d66c3304a052d5fb7153cb570fc90e0bafe297230572991ae87dbf06eeef5ff71981a5f215aa399341e9f0fd37b1833fc8999f625f3ec84224d282e48a8eca7d364e5748546969e90ca58aab6bb9fcaaf008055cbb97075d88b4f204637a54989722b57bff18dd693c36e6c61e3ac0f9b0ee6766bd23ccd99e856adb0c3a84b5c69f4f0178210a904aee93f1b1cc8698759d4414c65d9f52d0c47bfcd737e1714f24827d421a77fad36d20a2e8e7a403c89519eb89bcd535ca0293de670ae1379b430e440f8dbc0540130b5e0604afd83476675f59ca251ee4c050e43e2c0a95258b30fa12c33d4c2b70b277abbc006223b1aae4c8fdf56aab7e21c2cf03c406985da9040e83823bf016b4a43c665c4e10c7531059c0dc9598ac84ee9c2ab3f84e4ac4f655270161387590585aac09f8a627fe668edb314c36cc08cc18195106c1c31345892651385f0dc40868e5a00e3e741b6bda7599eb006d0befe55801ae9d6712860d19f83dee4fde3909bb94db641c2874bf588cfe80003cce665f6c5c3ba7511c637a5cfe60dc3d7e9f867f0c9180a435bfdc60f32015e9fc2da7e79c16f44d9d3ebfe5d65103602d9cfec4fe41522d035e79ec658b1eb1dd9dba19eac9ee666cc16359723985e4daa45ced4d1df111821dc955c20b9b12f7591e59c4cee64a2fcdfcfe4e74b44a0a28497e5571fdf016704353953c1b8bedc24d5dc6908c573aa6f56ab7bd1efe40bb4ceec3d7d95754e8605c6b97009b057bbf6c4cb9311c31ded5256a5d367ff2bfcfc504ca03a5b1f8a8d69196fabef2e7ed2bd393850799e82494c2ef9b5db4b85a8794c31d69a233a568b3c65a661a996f0307d9f8b7d7556c5f5deeae05fb2775acf05d7721c9fbce795ebfb03f0102bd8835d6fcab7ea904db97c4ff072aaf99bba3e3b14c8de38c8edecd9c983aa641320a251130f45596a00d2cfeefe7933f1a2c105c78627d782fd07a60001c06a286d14ec706dcdd8a232a613e1ea684ee7ef54dc903ec1c09c2c060bb0549a659fd47ae9e8b9cb3680b7c1c2d11ebf720209c06879d8f51d9ee1afafe263807c01bb9def83db879a89f7eb85c681c6c6cc58cc52893d0b131186cc3b9e16bad7d48c46a74abb492d475beb04c9fdc573cc454242c8534bcc7c822356ea558f9fa3ae3bb84441591641498be6e17903a08a36e8df3f03fc70673d7da9d00849fcf38945cc7a56fe7eff2a91d417dec9768f9488d2f53668265a1fa1db57172e154e852b88f2e0828d0a67c67572125f1d62c8e8c2f2d2d517de905995876a87133b0ab796b6c82b6ae966f272fafe0dbc8b38d1583fc08c6b7af86b7f69ea9b1d4380af9ecef7423e2491dd72b78a1b7c934e0a3ce3e9d549b7bfa040047db45cec4fdc4740540e30444f4e1eb29fd08401715d15e634f7d91c4dc081610c18f8c1df063a16c6d969d0070f1ef22375fd5d08908c51883c45310a93e9868010184799f41f5837e9115023e6197f00520e307d6c482bcfeab27e5fe0217dbfe4e408e3709d0c8e884f4c0a9cb7621cafe00037b9f27cf04a4a8cb271d04eb3dc858b26405c3cb3fc4b4d24f9a1a261d49a589e3f314dd3a435e26c0c9fff42402358cb2d05ef8d8d2edad9c47f47b50865bd1ac5aea560409b08f67a369a5657e5f838ff402e0685207c91c7f85a029569b91315108c7f65a387b6833c26d66af4f2d77eb400052a48bab4c8b5e12fc1cdd3f1f5000a185d75e616ee5aacaac178ce0f720a6d73c6cf1caa905ee724d5ba941c2e2628136e3aad7d853733baa4981547a2e97d369fdc2adbe79a71c9185782fd8829ed58e11a65530e7cc3ee5b7c4ee9d7fa3937fd986db094118906d4cd27facab262cffe3c95ff52d0642e2d4d015cd9e5a85e2a2b6c8f616c36c34f430b7cbe688d610cc9c5eb19dc1f626433b6087051d2946dbcafe1145381e8d3e2b4ec2af478f455e87d7e2b47fb724655f65564e6c0bf0d73bf0f766d705da6d1acb0d7fd2b711fc246204fba01461cdc48ab7c4d79c85379237f4f630e0a10397b328d2cacc1b37fa7394fdd38c62def3572812e059887f6639b67dc60d75b42a7d8132905ca59462931f157a8dbc3b744123c306d16f11108ca858170adcd13ba0c339b3e76583f5271fed1596b245cfdf372fcb829d8f3997373fa4572b0d53c35b32a5dacfa93ad5f3df2545f9905e87dee3aeebb86c49e00f7eee7104aafb3ba5c7f6c54856abf647863a0a06ada8e19779118b341aba0d8da065f6de4caa905f642725542eb12e975cb4515df04762dd4a93df852d02663e3e9b473c54ea57d491b7899793f2d54fdd34ca540ab2823ce2b6574015cb809dc3fee083762308a1cb08507728d980ed823bc3ad4f62d612dbf980e9577de328bb21616802ed19439aca18774fedc80ce629dbbe40e0c51b90cdfae58482146bae83284e9db100366b5d401c8ba8011a738f70fb81b4d5939bb413c90f808ad2f894d3aba9175406c73275db7e80c282a4fd320984479e37773c7a186ae1ccfb33e6c203b7789b11390a18387b1082f214c38d5ccb1175639dd78c38293e3150daf991eb4b6d3bf22b14b5c803cfd8d52da2f169b8baf1a48a15c8bcbcfe7e50783db1c6c75dbd263802bceecb273aa859fbfcb4ffac9976c667be1ab89b0a867623b02acdd2a539ca54cc2113af0ee8443f0dc2e25ee356cd4deae68eac4c7f6f6bfb8bc1647a896c8b32139fdfec1166fca328135a55c12948cd84b19ada87ce47126e447ba3b19906ad1aa22248b02cb56b38f517774244e8d499c3ef3b5c1d759356c990c73eda578bcacd2ebb411fe9b48a2a2ebe56ba9eae7a3831c558c757ecb9b33c4b7d9b0e5c88935d9a40bb1a1da00508917af4eaa9ca80eb2efa666e8d1ba3d6a71a659b9df877278c3b88b714ff282d972b8e5d54ff2073dedd8539f3011e187081c47fde8f0b2507adf351291c060645f4d1574e8ca9743b6e8e4accee845a2e40323b9cb0a1ce72f4a568c86b213b14438868d4e78e64eb29ec016958791436d2394f3701ed9c74bbf97e81810c3488a3fe12b6b441be549c490e56c35eef20b4443b5bf7310783707a02d2e2197b29a2bce5326755e91e320fb213a3c8438262dd706a053ea805aea1863af2eb876dac3f40f6755d9d8e87caad3e9e27a9c26a7f9effb048f691b2fa793857f4e1cb4d1fc66162ab145c09e44036070f8a7737a5176b8cf26bbe4a0f6c4975c802d8f1b8d611c3d115dd34e72b7872d28df756e86a6bffcd7fc1c03adfecd0d7630d36b50065fd61faa8a56dcf9466330ce944a4184f8d3ccb62a2174490fd959ade787ed5fc83d03b34b7d29d0855838fc39d8291a4b9c2a7078c2f1ae450a512c35370b743fb9e6007f8a02452c5669f0cadee76fa19e1cb36dadcf3457e685362445524bad93f01a8f460e5e23a3ea32b125228be022c80671acb4e42db61e521c776ceef8144888e179f6255287e44a54758377f27056f1ec8549c4b0c143098597fe650a8117d2dfea61a2a24c7fc11d96b23abdd0effc460135dfc6511de2c86bb3b6c9258481f063f8dcf938e21d734f56dc2b8abbb0e8e8203a58acd4654bbc30eb1f47b81c7baa63db419536e9bd69176623e5e1943802b4df4f1b8f1a7751200cf32eda2bea8949a760a9a2aa65ad9fdf8c2a89319f1796d591e6768ab4f4291f2c231336a4c5524940bd4fead2e0934f50a2dd0d86ee71240855b23c6b6bf32eb46e8bc6112927c8c71865306ccd9ebe569202b25350ebd59ab06bb8027f274072576962997c702cdf040b059b3b6635864523a87005acee313ec887e3f86d5e4e26d693a485d47d6fc769f0c7f193bbc802667543d55d7ab448f230749e6c8f3022f9e09a0dfcc45eaaa87958b8ce590410f3a33688a67e0b16113b1f39cddb0094fbd1e3dc900996f5f028b658bf1622b8f3baafe52e041ef04c314b90374aa6c403eee7ba3752fef0688649990dfa0a428e4018b59e13d51ecb995f6c53e50bfa3ac00f6f99a97ee3391a7a43600da5f6ebbfd8c09db418e7b7fbc595c9b3157ec7cec1c25f15fe158a6caf1d6258d91b33be57ced4eecf9538dfe4d340bcad97d3a0667d319f66cf840551f0b9e28ffb8dc6fda7ebc9e26e75ce24ee6109bc8f86bf6766b64d9e594f6cc9840db3b0dc225e3212894d39bb9750edadd3a128ac07b22a4697298ffb12297ea107d422071a0e5ed95683bcc3c5eba7d93e8ddb377f0119e47c3b1ffdf6c5d70f4e4ccfc49c5ee9c2fc7254d02829ba3a4cd3bb7715359b0a0b8a37a622c73e958b239d5bd0d73b962022e728e8918f98a37db2b6f2d5177eef1ec03fbeb71afd66627613df00bc1c6d9c5e142cab8cbbeb92a73a3d69f709ceffa010f41ed20d86104135f161d51e88e7a2dc1c001a6bcd1b814d1f7aa2735136c161ea83d08e9435e6092d83ec621c0b9ac8e117a26ff01f2a35c08f80841fc9097ac86e7b4737da4cd7bced6bb2cf112d20a3788a90fea6893a4730f904e1c362a2b7673b0218055de7c627b8d44900452b89ac3b969cb986a6dde575ba3e29b323dff77885dfc1008072ba3d9033e0c932bc3a1e49745e09bfa9375c6fdf05e44367a59a9933131dece82d60b035baa07d64aa9a702e9ffacfd4ad16eb6b5edc4b77fa0906bc059d7151088bfaf695b454a78516d57284411c85d00bf68b3d8583397d2e94239e6658d5d425381f79ecffb052fc3ee614c7efe526a458e7a9c632d3b66f0b10e661e99b189630576e30c5a599b3743557728f1c3947d826aa87a16d2d35322ae6766bcc5c45ab477d68f0afe3a33f05552b4651915d40f048b019306be9d21aa58e288f299c7097ad7cc6f5b63466ff17db5aacb44f56ef8c2ae043f7f1b3872b8f660d050249ee075590a09dceb3caa46814562c83e3c87ddb3ecf59b79d1a81636e6d7bdffcf491d995d71dd9ec0e04bcbc778163ae2624ac7dfc1aa1587baef088d8109c525255f11fc3c0bdda7540bd9a36395681af8785e4f1c119ab51ba20fb764e9f13b05b86748b0de245a55f55f5bcdec3220bb04fbad7d6866045aed9116ebc5107b5a97edd598cb1f546696b1731f7145ae3a7f048d5e1503dfe910510e9e21af50a49c3a252c690b10167e646bc0db0f1df7252d6146bde0b256b8b410e4963a757433b0ba042e8427e60b0cb85a7ffafa61b5babbcfb9a91614553ec067892e3439dd0606b882271645cb0eeb54d695ce1aaf511f41aeb995b264559f8f71172766169e8da21a4045b63cef6748856bf3725074ee44f39e9ba1649cf0d4f461c9997edec1694d8c30d7ef22de9de2ea1519679abb522ed4b271d47986d079ba8544546b4476925781fb404d93dd959cad60433708f1b6d844a4427fa3fa776e04e755b889329f2e93c0eec4397013f026f781ce599c3225fca92d13eacb8418a302e14b0255ba9df0a9292b320dd4911c4f91e52fca174a350102dabdbc1636fa17959732387b122314adf7000f5ddbe7c8f20fedf3ecc1783c4248bf44a44574a5d121bb636727a5a3eb9c45ed165d240420b326b2090850cb89c2421db4c0ad2e227ee05ee54af2d750af562fa4716b71bc536c8d12ab392f47ec088fde34fe3108035393abf8851f7b84c36f7ed4f8a2137521dd90069be7eb3a5513771ef22f00637799f1bcf6fccac11ff50bd48605d49ce92be7c713860221ba5125eb339899f3eeea7d04a2efdcf8ce88e21c8e2d5e4f1510a0492a7a2b26cac151260d0e33490bfd946c23790080516388096b893ee047f440293b34a4dde8dc8f6c18e07ae7615bde5fe31903ec3b4d6417b899f514f47f5dd3d0562dabb71b3709d1cfcf33818dc16c8c5025b0fe8f0ce3ffdfff31acfa4fd5845f140497f5fe9bb21caed1eefbd3fe69bf04631da0f8eaabdbdbead3fd9caac1b0069d1e053cae4467a8270c3e9ca215a61e771b4bae98371e1984fc01dac002d963c9abb1779e033139c75bbe61d41aa5e26169b7a4794c1716b4a7af60b1d26bba1ee393460778f9d2276003ea20e35eeeb6ab9d610a353771ee494ef4fccac7780138231e5710321fcbbb978bf50a0191eb33656ac79d2fa9966368de0d367d3c152bd96729536a5128c0f1ddece96e7a73a3a8284dee403c4188a5a26fa01d64df312ec6eacd1344c312ab46651bd616e47ece3fe9a31998741b5dd8a0b1f890a3eaab9417e7bd392f131c5bfa1bd8e5c227400837462c4ca2ae29e72cc6cf2e17bad8852d3dd8ccc164dd950863f775712fb617c351f8c751c372647078d1bbaf143de0b739e66e2e6a57783c8eb224860a98f4fa50ffa705ddcfc72822d0c7ee99245d326676abcaa6227bf2e68991855a511668cdb15a335faa85906f2cc13abc54412b3e09e42a9ab716d815fe4ad37186f27b22be6f6eeb9b3665a8462637f026431e3b00c5d2da9def3897709f14e2932fcdfa57352cf40a400488cd955ad712b967e80bcf37c83f5ba0e5912cbe401e14cdaf4c69d1fb8038e96b236d07c3c23aa4cf7b4eddf623e2ad8ac06223fc7047e6cbee7c12748597a0d9d83be3688d4d514befe349e6e42abae19eee0a8a424fc5dacdca42f192c2b75f6c8062180c580a07ca2af01ce88a65a48d1ec67c0c82d7565af307e53070996640b9085497e11b6daa64550ab9981a2e0b72ec44278797b92684b5e1d6f7c37905644ac0e87f21f8014e0d22cfba64f8aa98e0752bc4839da0ddf159feeec2221b00addf56989a315f367d07a387b29edadf4771a1d0275e6a8d3ec020bc11dc022ca5f26ab4009424cc192bcd86af7b2ce485dbf220ff85d400f2b6e4f63f115b26c7bcad57e1bae26d8601b61da83801172016c54d88ae8de7b1a0a403b66c76ad879096faa9f01899382bf5d339300805aab4739c3f22f89ff01ff68af437f52f6a10a022e5ee57eda3fcf53dcf0d922e9a3785b39fad9498327744f2852e471af3af6157120000b95e174cc3f62b4ff05302842a3688f26efd5927b0f599fcfe98ef431dbacfa3bacaed54fc3b03920979c7f746705f8292b538176ca2157748de32dddd4cc7c1308ef1b64d0a40f8c882da47bef99bd591fe968c8c372b5698482c9a1c4462e9d8feb6d93ce04df4bbe2cc0dfa1ec85bfb4df6ff7601361b5b4b3ef0513e3b7e02aecf4652599506623e1fa26e7c5f961d07cc08d0bce026007bec792296bc0e4c238d7613e2b0be49e937bda28eec0495c0980122b69407364ea7acf6fa6f0b23d183f107f82b7cd168b6a82cb2d837f41ceda0c27adc5f5b28030454b5cf05185d454f85165fd2a7512f0a73a4bea096513f405696236eedbc8107a265467c980b43da31d9d8502a26e35d0dc109cf1b220f68458503e66c60a43f86957fe231800239949f3f65d85e760851943423f0f3c09125c3e83665b8ef1477a2d5d6634ff2d603f2cf94306c79a4f59ae83f963b15536ddf6adf5829b40edc39e2b9abbfa8482651335bd0d540ab40417082998c50178433e651c237b5b74aa7210c797394f87256f53d282d8d93e824779d695c13560f7df53e2267468649970b6f6af04b7f5e607fa8b4d992e753c067d0942ed1b775fa11e4f73cf9043f761c22feba3e4560fa4d3ee56e032e0981bbcc98790d844e44b6e6bf3d4fa9b2c0ddf78335dfd310a0e850686f40c07ff50df1e4cf3974feea7ed3f8ccacff3a03cb3db6f7c2b0f3e0db9d8c31fe572da6b8e10795f7e21e67b41d227fb36d4bbb6e65f874695771369176ef6a7e5aa8f3570a8f61ab5413290122cadad58c5e542210c630464f1f1e946cf08d5333688762eedab6c65373cae095604295c4e86aa0cebecfdbf054057ef03dff1f89e2bf66fe8819fb68c6b9ccd5716b76bf706b44e03087bcf3c6879b91365435b6be27cdc9f5efacfc726240737c99ead49cd298f5da0c4bb1dd1174d068012852414d21d1c2cc4d970d70c5fff072849cb43d079ff9d21ac31e4fb52e41aa89e5128bed967d146fb10e51d7cb6b79b6806d073b2f3e5dacafe07ec71b51a4bcd7a8809b88637c85e2eb81f0764c1403180ddd8e24162373c0ea3b1528268443a289b7b648344912952b8daa7110c5fcdc3d0c8b2effa802be921139c52ecdb0ee2c9db8265e2eb85044d1605c682406357130bc90797fcbe15e7daf82e8e5771317af3bd35f81c9acddf9ac98b0a2a1cc20c69d19020f41e1c5fce0d1d36028a9c1689bafa6d6d8f34d62f9a668c67208e25aa6f937db07286f0b68427cc2282ab056624bc2b268dc29a9d2061f13d9642c5954d179678e3d9015c0454380080e6b052a184198fbbfd93ac04831ff5a66753f413245394999ffc8636ad62e4add67d14d9591ff0426f2923eed4ffd67a84398d69c29c4bbb5f48fdc13932153102d5767643259049a0c5cc855d792a3721de28f5fa59e772a24d894f0191dd33f2213e1d4a13b8f917cd6d7225763708c7aa8f62d372aee5ef73f1850b6582db2fc7357877d1b07a5cabcf5d34dc4713fc05895656cfe93dce22ff0d61984d524031232fd148c0f3f7c5baec9395a0804b57dd798a58dfa1c7c2798f0b1086c0adc5d0ea605e308c7185f6ca49878a783908547577f6da3a63bb28b20fb7754dffed03502dfc476f50524a9d5e9c4f235080b6ef258f202f2975d41f7773621fbd1086093f0b4ec11f937f0edbba36a81728cb929d0cfaa9a259457e4b2e94616f951fbe9f718dad63b25dc4c7cb862f16665a03e656b0d054cd427691cf54399ee6971753184c58a616ac682ab688e2d6a32ded08538acbc93a95af533eeacfd16ab5bb65e6d3ed6f2734a10d6384e7de480af60cedd0c3890904d298639e4c90894353dcc56992474dbd1877bac166b6bbbac6f90bc9df1aa058876926b7d863ab0786c19c586fb5f00e7470a38988e7660506d795be4806695875cd6f7f9ad338cbfd1b52e6ae4178f05e00062274f8b0b25eae72f725d5cace45cc263cbb6798555ff2d15c74734d2b7e30cbd55371008b75878cbc9f0d2d809e6e333762a8346d554f0002ecd4d7877b07daea4ddbc056f469ca55de38f93829bc7eb8b81c72dd8739c71f3beb7fccfe8d1ba989bd57dc825d140909dd96bc8ebdef07e54dbb6c9cb80efc8c40abc1aecb775a309f2de5c86a522249856cd474796f6b10c378e13dd4bde2055cc42f34c8d4446909aa396e986ce6c5b7e34a83f9e42e62040f051196bd17cec633de378d1cb05d84369f1bef4b9ea6fb63e564443896029aeaa0c105f4e310065f96602035e6349739e07778d59113d9546cbf6251ec180d6f7af4294b90f3a5af1f578b092e15cb1bc42b3af30935da1ea83b5c1977cee3085a530baa659e2a8d40c3d67ed028a74413df3d8e4c33852961813976814aa61c0985b2faa93a1d60c34c077e1397b31c953a8a8ca33663dd5e39015250b4dd1250332621a5ee078f6e9b28f04187770c12e528d75666faa3690abd942d351154f5057009a1e36f840a5840bba0227c7a51881f55adead5e1489c742460f5c949c0a29798e440dda65e2b58c9799049cf1bca78f0f0eb7900c4982eea311b8d597bb3a3b8b82ed95d34ba770113f9667438533a8e66907069a5a6f3cde8cfe5ececdf9d5063d5ec1152b0a54bb8845ccf70cc6d1958024183b36dccb8cc3b5a6addcf8c482e5c9d2a81b3ea8fae59b24a8bdd1a780e6874b5b696c0902684733c142b788861ec7510896b4fb53ea1f04c502d4893d0eb916975c8d83e3ed5b9c8599a6af744acfb2c3282dba6b0849f3c8865ff52e6b32106b9ac1baa5c54b37776c4687f1fc5b7e4449d97484c294684fb2c479d97e7acf44aea91bcc829e9b131527d07395e31a1866789845ab96d8b712b295c2db0b89af029425dc97de3df54ecae78dba0f2ccc185bb43215b9cb9b20aac77ee35cf6273113773a9782a67a53905b84db381cbbda2356bea385c768570d9d6239f78b39a4b77e7ae4145b3ede289b0d7be66084264fde5fd77342ab405b66213153cf52e7f0aa22101bc29f38e4248c1e92ae918731d9aa242ad3d05724e0108c0a191f854f98b4adf183381e63969525e54d806789d7121be4d18415fa69c48c731edbd734b897004df385d9275f9d3426c3cd61b8351c1159f213073c81c1c53747248840886dc979ca05039fee18cc0fa7d4e03d924cb6f28c19957bb67cc8cf188602e3869d7c1d4d22283dd0ac5fd870337d9a7d187f3726045b38767a0993098cc19e41aa7aa11389b1a195bc6249a355844f3403dca0467fd2e3502e0a3b90855ee14809479da3983a3babbd65bbc7d7bedc759351b663c8770cb22d3d11542c355ce85e857b83da1c9c9143fca7442667b2a04b60f2149ab2254aec24ccbacdef51c10e96b32acbe314d4d479b4aede29725290acebcf533ecd58ef53b63b06d77050ae1ded0efa2864e4e37f3c6e4b7e9beb0777fbfa7e57558aab4c765b53a82925916d71a6c156ed5ff57fd7190ad18ff81464bb2c98b66e4ea47185a230bbfc9e6d17f998cdf91e848eeded2598ccdf084bf591ec2eb668236f555ca61a9d6b49959fdd4b7c799921146c172a81baf98a229d28bface1e397608a73bd9dc6e5b5af87a5356972bd842a5ccd7e32367ffc1cedd7fd9fb351192c63537f26b2fc412f41e9fcf15f2c4c354278b746c9c2dcaf4a384c73c5412727828451420c3f9a796103f8c0a935d7c9bfb16c1bef72ba6e44b212c572345fe65a7eea7c1cf02032679bbf33db9ab55c170fe34e120003be6fedf701549b11fd7dbb81317fee50cec809c6e780ab73710adcd339cbeb47341e444fb3e6f5ebb14eb2dc1eaf5acac2f4e6964812e8808cedb0a28b97950353f24da359a3c55bb6500d517025f5fca390aaa3d21ce26b244213e7afefbda6826e72987f0599d081242377e26e2044e50dde86020929a1bbaa8f09134e95df63f54b8570a6d3e8863d8db5f2026a51fbdefa9374621eb2d7797a8d523eedec6d2940f0eae214125a0eb4920b6d44927c86778295b2421cec517efae92b067c027ceb615a51dadc610a20a2bb194f94db86eda9e264245e8ea504b844ad7ffcc852b36d2b7088a53fc26a5e6d80dbc79d72b59fe70245e622f6947bf140cafd236d315afab8be1b3ac9ea2bbf5e89a936bc77cb201717424dc8b68c7b6f77eba80edde134b4db9d068338a11cecc9b84bd69cb20a1d2901639dd3804f83f746caca116665df71a91780de34f2d62c832153acfb118efb8208e883edfa48c99d10119470faa300cde235338dfd8522886bb620fcd2d6ff72a22b302be8088f6cfc97af878faa1989fb32e0e289743c368f60814ddaafb521c3e870d0a56d9924f4aefb20815f1c5bc6ec5ef9234dea2c10f546447553ad3de2a2ce62cec27753ace9dfc27c2c99c1e9d41628575cacc774e6f8975f6d581582ec9158a0a1ba8769baf5e3dcbd123ab87c9f06924af4974fb810bcd577364739286238e7a5c32edf94b60b2f6b0644c76861fa60737229e5eb170b93fbd85159d8c979f03931b85329a8bef0c0f67eab09f7aa4e7085edfbf2842a0755aeb279803f9246c686c288dc3665ad495326b7e3d86cc8bca051e650e08eac2f39e92cb13d2877e822cbd51ee7a5c18ebcfb92888cd84bd262043998a4bfeee30a73c7ee2a82f018a632cc7454d5e9eb846baf6a7d63543c3b635a3c49246c1b80d0ff99b0684bd27195d37ed69c62fa59d5830c32948e64bcfdecbe565290334d8f2836471ee79025737e81156fd935ade791d034f236e63732559154c0f7b4b11cc666573d5ffc324a424d79a6c927e11070690cf30a3b5abf2947bd060f2a6bf87e8c893a11511898c3167bf7af4b93ce9339131d64de97e2dc540788530edea0a52b25aba84948dd558ea4d8e80b56907ec2ffe7c33a7f5bf348bcde4fdc79a3dec4d4e8913f53868e188ca12ff179f497992bd8c1e96178e298556e621dcd808fdc1f9748cdc922d1468c06d3a8ae79721e1f66dd65eec83ec569bf363d5ab53cf36e3e4b5f0a40c39b3b607f6b448d92e45318723a87c86c42524748c5a1c06a8d3924258da75ee97903548fe3dcaf7e6e5f742cd1cd080fb1a7acf64123209d1c090f43b420db97728c49819ce75d992eacf069b61ef57d75f246eb3a6f5449226656427ce755721a3eb5f0e0f5268797b423b5620e1f5a119aab741bd6da0322d97f8e329b4aedd283205a6a7688ae5c1d749c600af40a0739514d600a303fbfcb01a39f9d2a8f3df22f2a93fbf281ce31698b3aa60221e936bec39179e5733bc3831efe7d82caaf1428edf7e602b670a8790e5c5fc8261a1b7a733a966822394b5a5ce9acd214c861a420f0d52790e5eb39a23fa8c47b2c6feac8c5e046e13adb1dd9ebbb9711fc5337403939dfc5906211c37f1165b5929ca650ce07f014a2eb34327f1a5036cd7148e81b94a9a902b5980e751a5a59ef4a2397ad4df251240443e30e598bf7ae445f65227603dfaf4e42cfcc23e0dc94c0f90a0e52dc1b10beb36833e9a8d93134f163e84e7cce08a498a3eeeeb7b215b98d344b970bc70b63093e6a5b355fd8cb9540c78e82f8a141000747ab3d7ef49c5682ff8b000976a9bbe22c2ecff01780b1a86ad694e40bbc2f868119f097b3e1eb8294bf5746e4eb51dff3c4c73e7ffcecf72c875114aa7e6d9e059b5fa0d612c2bfa5a48003d8b051944bcdb9af74889da99741160efff040ba5faff90edda762a69ccb08c4b48131bbbe9a25a797cc4a5c357472379eca4f67f9d85b463d2841b3f493600e1ae68892a6ca89cb4c20897b7191e422e954f0235ea4e4fb671df67447be14447e58bcc5aecf649f143db183f639fa557238c97918862472fde0e774007b941c514044d131292477826c89021ddd0343bbde41d5920c986164299b2fb98c6dda3635c731c86868091945467262ebbd8248cdefc56598bf2b3c4097f3cd4110128fb1aa53fefdada84b5090616fe687758b7029c50dcb1754d8de548cd63a1969d04c64d42f5943f98b06ed3b9f7ddfa2067d8650f5043f62dc4b57474ee7e824aa5e9d2ee41be9616ae0b37d7bf244ac4c4e9c05a5e475c9c92026bfa1db1af77070a9c0b7b5fc746d6699b37fe454d8cf5bc13faaec791e01f5294279741036c52b113614b80b970510f65a25d46edc023d9c7b8e7ca7c41923059c205366870ad669fb7572856dc4685ffe0833111a775c9455ab1590509132121950e99c5cd40b2a8d74a5f85d2de54cfb91a0da18a1413f4a8b67b147eccaf55665b7101c9341c9687ca2d2e9941033ff5c7e384b1273f3b6c9b3891eae2615bfe93c606adb12dd1907f9b397a961ab55b34baa464d7d6846c0b98649380bf9c255fa0bbc1de6bc1ba13b08fbd05229bb4099ae8eb4c5f3671aca476c2cc5280a26708084ce460cecc2b7516aab8a258c8ed8c388dad62b8432663adbeeea1703f5205d598eb94619072f0b788d422545f89967c94226774aa22def2d10f35d2c2c9a00aeb1a8ee0cc8d2b5ba1842af74185c39c46d5f7d16e481b2e4157940ff473e0908e99d6b549272ee83bee43a935881881eceb9937563f244757ed48909df9cd4dc991f446cfe6ff489f3af4d2053a9f11cd8fd60e2cb001275bfad9bc85026f2ae32a70fd2672a8611591c6da77455f3533e735bfb642b8b495a5cdfa7337cf0f268bd3411574311de41b4029544e60d6641b3eb0bd9e53d84c17aeb4313ff4e5d8dda5796594a06256ffea276300abdaa954794a086bd979ca77035185c4e69242476c0fde79ff1ab1664c3d6e00472b4aba6ff56152538155ee5539386bae00acf2b26a48cc552c3e77efd13bf93caf8f74a71a8efbc8d736a42bd312de53155d05fef26b34ab80455b5a4d94919350c0aba91f580d4063b5c00d89dac5ddbb9fa9d90f0f5a08fe0e3915173f7053f42486fe6e8731c40d196b83c25ac755d9b806ca29fbe5748ee03aa999043f8485042e2d6de30e5abdaccc16e7588dc257f14359a8f87ef81805869d39ada62eeaa8cabe86334d0d5bb40c4d5e9dbf2c1c92890ef4cecd9a84c3447961004c5a0b58833a204195e2cf7a52b190f1049b12e3ff7275457964ba639cc678c7da10d05c8128a2d38fe30146c7c9e51b0418202cce0c94242b5ea22cb70ae6c8f75621fbeb1076b2e217da60921dc6e568aa2eb41d64b7358a8f2568bdd012cc4c36e67fe97a03a63786400fdd359915d85a25c41503483e3fff295dd69d669a81b7072ea5efb17736391c9ccd9ac774fb2feba4de70ad08f1b6975528fb49fc3de16c5144f6e8ec8637574f8cd3b9ca7a31699c9f33505b49bd5896de7123b828bdfe2ff11810ced088d7704268d6dffc6887f480d597ffef1b52681e885d97eb52a312d2dc91e5bb35864716e1857a2add2ef3aaddecbb8ad86f1510c65d612ea944400fcad4f9f0454b1c31c73065ac9744e245d3b658c2fd96e4deb68cde98c8ca02d16a3fd216c00d36bba23e66299eb20978405c9f4190af1caddd52d5d2b91ba040453b37d6afb6dedbf817464afb61b06cab4855ac9ca106a8c518108484216283e231f2d8192d5cb95323ccb6b5381f499ce145ae2656eaf4f54455552fc290c3c987c9c3065af87e3ac9c215d41e9d369b8f36ed38b510bcf5406dedc4e8712783a785407e25fa523674ee1161fd745b31baef11d9a6bf264e7220f54a7a4ed897f7eef68a76a95cce891a5062bceae1e5ca39c31211405a87443515ca606ffd8de1cb8e31354ec58a710c7ae24348f04027dcabeadedc81281d76f44b821cbfeecbe6af7c4a31b4f2948d38e67ad6afc93aa07069f6d8c3b964a93bd5c89d46411f0502719d9a528f5a64327849db4708694dba973f7f47c3839791701a39b90e44f12e1b17d1c7e82c5b0f9f98a1e0851daa337da21836cee1089f25603a40dea272dc7f9e1d3a85703877644f6ea0c9bf80812207eab760e6c40dfb82e60537a14fb4a71bc8d3ef90c414cd568bb25bb5974c8e573ef303fa9282fb68862da4a9525d9a7718bcadf2c78be595403cc369b73dca785c123e853ba62cfa61e3aa2241806098561a47000987b1f4d4678a41a8fbdd548c3b99ef88229621c14dd374e5c40268c918462051ae3b5c915a37a7312fcfd216969da03e9e41c3ec93a60706d287cebbdb31bc68a88ab3bd3e52021c81a9d9414cd10128c136c92bdeab446c51f7b1728e903b171ea6e3a13a63ba2f9872535785be780d347c1cc6566b91deea5afb3757ec0524b898d28577f337331d32279e68ea6eb49f1ba205226d572545b993525ecb82571d676ab01c89e0efb7f13d5f1edf4ce6a81c45306b39ff09091b610bccb81a7af61b916c52ae1f2d0fb87de1ce25786bfa86ec8e5858ef52df894daac9383553eabd31ff41e95bb3cd8ecf6ea1425c0b3b617f +MD = 08f636c1ddbdbfbf23239e6e75b5fd79aec3d8d3125346d73d97acdec3002ff6 + +Len = 97536 +Msg = eeca2a602e250d17243064f335504ba814fdac8f85751af967b2fdc3f19af02a3c7767e101a69561a5938d8172e5a74628f525fcb48516853faf7bf26a1ba950d875eec4ee1e77dbd622711bca6b6fde8f340c603fc0d1164c4b5941c241b2c4ccae07327af57c2cc1c65aeac44a6c1751a0a9e2af8d1252976fded98073d52d2008fa532f946cfc6e658e15e8ea669a772343ab8b56a3e1270453e22c1bd833da6d0e4e94610ff5e3e856c5beb3250e09a423e25b824a6c04f000834fa0847f04c48c4c31c52dbd2a38fa22cf0e701c0d0a92b0a879d09b371d2de5706aa1b9a5f5bc748f298dfc4b3bc253a261106c8d3fd63df8a2fd15c771223017e1f789c6e7e6ef35f3f85b4cdbf681bf15cea5902a37b0d6679883bcd6268bcc6d4d956e8452e4ab8d368137ffddd3af93706f1fb3ff31c72f6b8c1f33831e18766d88a5b3487c7a5d0f18138fc072f942be7441c274ea55633cd9f76f7f1282641d08735c0fdf29cd4bc5e972e78525898259fe3fe0000769d4114c74638f939f26bde167f0344043b132c0929a35bcd282c95e12899e65aafbdd262977bcd18f5051f6bd33a348290a07a0d621aa4584876a6a24b8eaf88e78e58e7602c2c69c6269bb442056c8e61eeb9226c30b480659e4295bb40c477e15d08b434ec9fa2f26b036e5fe7248e2b5879c6aca804dc2c0e0a4a0c72ddbe098472678a1f8f4ae62cb7189172250859783c98a7c33dd1f8406e1dc37753a1dcaf166fe44773c83df657416b18c69378b861e6f22497f856cfdeaf54d0bee9e737753bb7f6f5a146524457615d81a605b38a5ff03edbc5c426ec7d551187fca5b80f5989908d6cbbcb0ee8f8b2fec68cd43652369451b0dcc007e628bc3730849b5557ddc69390fabb2774b5ab966b7aa4c66c49a7924fed35c1986423554c207bd7a538ebb0b47fbd2e690cc9d10b5b9feb1c8dfb25f981e299f27c095a95f5b426c00f825d2dd74b74548270472cbc4fe4d19801855437710192f4b0cfb470ee9346e62d01838de0a9b5ab415155f91f7429dc5d28d68a4b98e852cc2d1e1e85cd98313e364c00172f1aebbf980dbea8f993ef6098f6d6ecb0611abdeb397b043632955873fdda5984e2c84d73ba5956e59e25ae4e4bc9def8abb0f8929d03045db476ee430f79123babc56d8cf275a3d8a733a8c13bbf9cc206ba2eabcf52e0b48c5a721bf768ebc3e467b24c3c703a434d8de28a4d4490bd309aa2af36c733db28a486774c2640be0b239e29fef564a60f98ee1206e5753a87d7070579ec782218099ddd843dbb7aae8d93aec061dd816be92df0ef0e94da9af3ce56ff3f1829e8ee2ac7262ba69a4d0a25530741ef55c0f3149f6c4c8a0dd8856b0c3d4bbe6309c6afbca85cbc8d553de5bf6a0224a3cd4b5476051bcf54cee05fbdba7eb56e0937af36916d47d4557d374c3f4f07fbdf56403d5ff8df4ffca92eb40d54a79b5595abcd67b9e2ffcc5cbc621d7523be75a87a2dc360244fd0545aa79c7a0f8b7d7527d991ef18703860c7c97b10e26c3ec654ffe5ee48e4e8566600ee4b57aeef5aa5e3b65952d6180debcaeebede958914830c2dffb79fb343d34879350a8639ca98843ba51c81e9d8baeecebb72caf32766db0220fae0bf9124f6d3e3b2a1db298233984ee0043c45a7cdc1a3496ceb8382f508de8d486bb2cd9484c3ca72420bf56a62a357fd6dd924b03e02bd0bf09d69e2b894d947564d4f99e251cc881cf664a1116ebeae2cf7c46eba666828a0f98e1c87f0896dfdb52d7f931a2343ba6d52702afdbec6c8460921bd2ab5335b0c621afd5df81cc08ee9ce0d798935a8c5314015dcc2b7ee3865a1bcec3ebcad6a78569f59bfe44d3f070dc82c48fe76b2a399788854f1fd435c4740076f3506884367d4504b450249f7a7497f0cee82aa0bf4b98cf01583fb6f8add28b13d04ea55b732fe14cf7e344e3307fe2f868b1fecea6f572e9300c521f4eabccf25170521dd419fc6d42f827d298a263b66ce88c8d2f0836aeaf244e61dff2ff39dbb6d3a4276d1bc0374b907035683ab0feb791256e37e3f8dd6df5e5e911ed8f76086f17f49207ece1c5c7e58e3a318d250657beebeb4071c3d08ed4f46f5e9d2b4e709ec4f0889a454c13582b7e0ef5eabd247e2f8d16bf6835605586741a0b01701c631def65726dc9bef1959e9a9253c44190c1832d8ad485b4912988e8800156bc8b8af7681b60250eda53009d096b03f61a29374d7b10a6d2b0641391a432e897419070573e26464c38ed0edf0537628a45f00f3e39238202d9bf7dde209c0ff7abb9c2fb82c816bf36ec2e272cc1ca47389d75c76d15008c34c32e949c47b122f18c551c904d7cb1f9d7ca3e261021731cb8d0b2bfef07b7eaf78f7ebf3cb7613c9192820fbd5f68ac3649ed9c2c515718c988c5d6b881cd23e4066332820afcb451dff4a820a92d759213fa361e403b555905c95b7855140610fc0a9d21903b8053a53b037f41487c71902d9bedd866faefae85f5376bd5bc05da3ca6223366c91f4d1fc7e10f01ea5e285074a1ff223014edc34dfeab576c4b06c1f88cdac4b63e3d689d4ffba0e7de432968439fb51f4f29490bd4fde43f68ea6139676d9e7037dfde2cd0ed6c9a7b498220d99f68ee28cbe0d6c249c25de6ece412bbd33c1e929a491d6ccdae2cbca221436ee783c627395056cf773aed4d76112a91f6e6e9d8d570172b83afc529b6ce7a075f4eced5dc6134036f941823efb12af0bde4f990fa1cc316f7b48b4bed536daeef112fb91cdb1866191805f2bf8cb9e1107d75427015c8341208a9a9b077c36a7f13105c6285a9015d0edd414d6a806bd7fb85779f23d08ebaf245cc65012544f79d9a44142890db24bdc79903132696faa453b5ef0e802ad8b9883a76ba3a423ff7f4fb9c8c75fc546eec81484e546a62c10487c89d821255a6997d496aab6f3f6948096079fe6dd769738184e5b2f0f599c372929a7e4e1701a01d48d91fd0e03bbbf4cab7d63593f68521209ee72f9c76b600b5cb1be40812c7a0d9ce3f6f08b47746400da35c725d4aea82429c2f409e05b899f802de0f2034906612b353a01da4862c450eeb5be5e963139978f9c75ad922a6ebdb4313750f74566e228491be693df525bee935d78b153b6a24941bf25ac7456b4d1cfe5781d511a7340bc1dfeff203765c5eea7b5786637f470822aeaf2edc3f0070b70fb23aff8892ef1ac85e2dbeff8f5361197640f19e8a5ec6d601e0d5309d4726e4c92b88d8e43883c1dd778e8a00ce82f90fcb4f90959dedb177639606ccaa3320ee30145ed1eee3119456dbdd56da35634bade31c0fcd81883a418989349fc6094bd20be3021a2401ac540dc23a7c629e5270170ca1f769a3710114807e31c7e90598d52f1fc42dd94df98cfe54bef1f34b9b5227f2228d4a452ca1b551651e06470bda0acff2e6e19eccc05c4ba7caaa5eb7fb34ab56d5c5de4997ee5645b3a937b1823cbaae3760c85512a3c83fd60bb54b7cfc739b295b63e05ef435d86e19fd15368c89ff08a0f21ce89a728ffb5d75df3c47f3fa7156fc7a5e8f952638a0c2bc5cc4e4ee41e745aaab0bf29e22eac9fca3dcd27a95fcd39efe861e38f784ae305eaa7281ca7ee986c4bcef7534f8d7291985b9247d960dd4a9a37915950ee8f8a207dcc28bad05389975121a17d0c7ee060850fe126bd5a4c4ac4ec5f886999c92a2c9b96dbbc24994000397b5bac2d3d22e3e133ac55197b86a44510a34e8a49445e26d56f247401c2469f4f4fdf061e5bf2c68deeaa934eda504c0b15ffe9912b6cfe62f98bda598a8ec37bee3781fa883c107e7230603cb25361ad751020373be372ce1f64b017255356afab282958142a6f73bb8908dbbb1816863501d681f25c34853541ada11f3ec9490b3384cd9c38240c4f16e5923138db13da577527eb31a416cfa51bbdd4ab9be672ec0cb19cffeeb6816c9f06c1103fd4d983748f830e41f162f19293e2142ef696b429aa72ec2fe116ec8d8ff748b547b7086d3f563cbea383c9aae9c41322f7db1e742eda87584a642949b4203ccbfaf778b7add1575abb969fbd15f732f868b4ad64a5104bf820fda54c09f886f45d1f36fc5180e8a6a83fe651bef7de1fd7c7c383a3d0c4a02347e31d07dc91befc92d593c0e16b32d7d43ff12b527f29b3690359b1886bb0bfd765352449079c47f6d726827f598fe8f80f240173b0769a2cef4f44a3bbda65209e1ce5ba331ccdbfbe1d0cc72e0e4a1fc652d7e7fcb6da87d9ecd3bf3f6da1b8103cd2ccaea0fc61ecffc635733e89b00815f53bde3b131e65aae53760eaf4024e3d61ecf4c96261f6475566a3b1065d46d60fcbbfa3d23525120fa8bae2da93ba67199790168e546c7c20b749d66e8c052b8e342b6176807abaa98fc7e5d3e0d7726058fae8de9db216bec3c04f20a0c58ed6e19bf49e64e8fd5958f2546e8e47c7ecbdafe0e1c2699f95f8c16bbb4ffa689070abedb876e2528590d4cf08d06dd00512296f2646f58f3ce2a7bc9cfe2651415db5bd331b1962b4c3d9a6416bcc335002e2141abfd86e1a0dfdc2441fdbc1400553d3bce5d0a66d6e9b8a96c4e56a340c84503d8194a4b3d73e1d5f498d4132f400d1a45bba86260d74dc77504bdd47ab6aa41d30bccba0dae31e3cefbd5980c6472797e1399a650d002c71b26215014c1f903841b35b678587556b96ee62cfe88155f61ad05ba109c7fb045fba99d78b1da4fd391adc5e63854369c382f566d769dd4d6d0132706036b8adbcc7e450c4ef42fa8b45b71bf17778c5ea2d99ec1f4b3e1c5c5eb749ccd6e5ec4e1c7d03a60f0aaebcd68416bbd855fe9f40c8c63cbff8c16d5b62939c13133ea82adc469ae75c88424fbbd52f227b82476efa9b9c328dfb1459ccf44a95c1134f758ab00012c925b013d6edc7e059ef76fab7c2ca3d7e27e60c4ed274b97008a87ef0c6921bd0f58ac56db7228c6194a29678d2535b39c666d570b496f8809d47c9a700bd6cf48646c6d8d7ab9133105ea4c650a3f65154fb37cb112dfda33fa1c835e4ee80a43658baa0a5efa93ef11fb828b448a9455237b5c68ea623387e5b0cf5e9a1e180a454f36dc84b0ef5a54a430873cdee965c80d1eb739bf3c0b7b7fa9f857419ea5ea01398a56a6ce7bb72c7fe259020c4c28b1ec2767bf9cc9a5d337b5ed19471a3ee8da9d3aa3d95822dd962302c0a41229afeb3fdc2afbc94cf2a11cc56eb873274e429c9a6eb8fb7efd9ed2a1de59c0b54e458701c80312562510b645089cb88f79990fddd0126cb1d5be789d25d55cb3d822873c605aabadb4ac09d6af99ef5db2067f6b918fb1a5ad1f9c5e5dbdf10a93a9c8f6bca89f37e79c9fe12a57227941b173ac79d8d440cde8c64c4ebc84a4c803d198a296f3de060900cc427f58ca6ec373084f95dd6c7c427ecfbf781f68be572a88dbcbb188581ab200bfb99a3a816407e7dd6dd21003554d4f7a99c93ebfce5c302ff0e11f26f83fe669acefb0c1bbb8b1e909bd14aa48ba3445c88b0e1190eef765ad898ab8ca2fe507015f1578f10dce3c11a55fb9434ee6e9ad6cc0fdc4684447a9b3b156b908646360f24fec2d8fa69e2c93db78708fcd2eef743dcb9353819b8d667c48ed54cd436fb1476598c4a1d7028e6f2ff50751db36ab6bc32435152a00abd3d58d9a8770d9a3e52d5a3628ae3c9e0325fa3edbba2c1a332da09968bcab899e47c163fab244d0128b9a6da1ec82cb80a3a8bbd19177c87d502e04e2193608c5e4b3368ed05941b4c680f076597b1eccf126069d29bfbd3275f700eb08483030f5889bab94bffdb42736470dbdd09ed0579da7a54aad0238e42214eb52890ac8c16b1ab9c41e0cfbf6e1fad0e02954741d352653bbe89e79e5d8c94abfa39d7392823c20292077707bac91258a2c46a18a150c0e461999dcc041a570173bf11aaef588488b6b45fafdbd957682847e3de766e13db1e8fc48bc8432c522fc0fa65eed879ab2a77e83c63c8e2a91d704317c4f2b4ac5fccea722caf8b2a88bfefdea92bf7c657d2bf21c5202a97fcede6691f9749c4afe17e03a3a7e9d7093c6099a0bba576e94532f48277b5b141016c36e8c439b0895dfdb4cfd4cef43ba70b0b68100949396fe2191e280a81746b42f5b2f21afc76a2f80a03aea11e9a803dc851b17999d2834b241ab9af85217be949f0a95404e250eb77e1ae1692a068774500289d053f4fec99fac4fb38b2c3ed9834627b6666d85682dc5b761ce7c05605f5dde9f7fa2634ef20a2a418b2c3be64f0b5f79d7ea9b7bf662f7609cb18388fa559c70e7da6c2a83f0b00a1ac0bea34b80c6f1694558d8211926cd5d4e0cd469124daa544320439a846b77ff90cef8becee387e326c467f614ce12d9faa52cf3bb78b58f8587827eeee2ee044373cdf21c3ea10f34e811bc787696d85e5878e278a6f95d49a9cf79579dd8ef81b50a2d9360a9b318cbbcbd70a7c122222ca07c735ede89378f13d1e7259e89f49d97b85bd005987a75513f21e8fb7eed2a8c0ad128ccd9f64034cfc501a69a42325cdb9b161f8600efb98bb6c1acb6675824d3bd8c2b172fc41cbb1ab95aea137d41dd7cbb5d455540dae955ba3c9039c051215d1363098924b1dd0dd6214010842f082546299c1f709ea0275c14d50b6af93ad944dc78ad67dd7cc7df6266e0510ca2be3fea540788ecfa532e9a4d845c05675aa8fe2b429587e26f5c87222cecc2f4712f0735b48fab3d01b937bf4da05ef008c532ecf1b797552ed5f73d9c5b3746649dea07cf8dc5b25b8353f40e3eea1d0a26de8162d3f41e2cd31a7fd7a855e0bf11fa92ff8b21a1861657b56e3c933689506cb33cf4888590dd58af86db0209ab139f9eed8fa752adfaa9c815a44082accd424a271f3ad1837c199750fa280a502c41f240a43f0cf6b5b3f5ac7ed94a9c23ca0ecd5ef24c2c37c5fdde0fae2bd5e34857a1cfd11989d1dc06dbd045d680dd6ac7d3b8983cb496c4aad7217cb462c11d95b81a45bf8fd68bc149a46e6e81808c3ce43615ea42217e66e4397aed214d26742c8c8347304a2af09f013b5ac7969736a6de4f9eff615cf8ad5e901e380fccbca62d74f993b7205984f094e179a7f37dc1ba2fa012ddc42ad998a68ecf8f7734cd06fe1ce1a4d5c5a177614dbf3907d9ded29d37a41d1fc211efa4860f5690a54a1e0afa419ab1fb9ea18ae4c2d63d12a52c82acddaad689fc6c724e1feb7dd7c47e81d9dc201cc52273f8efaa05fcefbdd2c447e40b4f474316f82e28d6a892e42c4902dabe7ee9d5f791b59f4fad39cfcc4d50e2c8f4c48df61f6e52a0779e52324cbd62fc3f3060343e80c83ab6b88220030ffe6a2cc78312cd55c4d054c2b59870519c63c7626b32e8964d5080347fd8d0cc61785e1acd74eb2ca7eea6c7b5649f08b17a7e479dfa7540571973756dfc9bce327af4831224623b2282d576fba0c028c9c9cda69f93cfc60e1cf742f5924c5e9af955cbfa2818ca5e1549952f53bbfa0bd91a491805dc7099e17565bfa4cac4c17ce9ba2f8af721832e69ecf98678c6a031cef6b159868620f053a47239ff48ce8b18175652e688b8569f45ff40ded4b05a52761296b34fcdd2fbc8b65ad232eaae4aac1a86cc4625145366ec89d76b62da0d91e2c44d14c60ed399350e2bc93c6ee73f203093a4f3f0eb1866694bd4de3b660ecaec3b1d332c45de945df256ed525799135722ea4a72d02315e920584d04c7b7711465b23db4b8617e4f0f2124e302829904616051236a4fa3103f3dd7be97528047b31b0c2f94e899ed6b720aa751c15a3e384d318a2164b5e790cba3f03da89e8a0d9fc725403c8d3eec91c728aa20000d8ffb11305e29f674fb4cda22238174e75b88961c2625034a7bc582ee766530794eb01a9b87670bc16906a3ddb0a5a965851ca29ead6aa31a0158637f1e59948b5db5745506e69fd6c04227a74cdbe60c73a413323dd514b56490936508c4d44aa45246e6416e58b9ea488d0b5fecd3e50e6711613e2cff238eb63a289e6e98bf0cceb8d4a2c7de74cd60fe8e51a117f73cafc3b118380b6d65117f4e471e87f07b73f4a98fb8da0f53d2a2ba8bc05b4be6c251ac34c1e19ad3eb8b616a9e49e7da871fec720bf49063e5a016731146e7f5e9e4daf88f28b2bf8a86e971b487ac12536426b286d301e4e3212a725e81d54f6ca4c2cd6989be1037976cc329e945091fe9deb7f22069c0124c7ff16db31dde93b8ec1c18acc5b03ae674c8c416bca933d69ce91682d1debb4a9c560785c588a648e04b6538cf86db9c88e84fb719d9d654e9b0bca240262542090af49fd737ec7e27c415d6e57a62e1318b90736280518b4b74aa27be809a5d4f76fca85ad2ae8048edf32d0d7416dcf51951f3a188eca24c9da9ba54d460c3f501e74957413476cb30c6e6515c41b65ffa58deddd8efc174938103080ac09b83127c29d56cc68939f455a8b91a2996f4966ddd1f58a2124abefaa9e40a020d821384f1dc3bace018a0691c4c9716a53e565a986ef04dba5687dc55f0bc6e43796bc84875962da5f39ecae912b9520bc4a0e6b6d28837e42054eeae33094c62f0820dd7a66593fd4f5540b8136924ef0eddd8e05308a9b6318ef95db5d7e3956fc01e4579902412b62d93315890d379a576f9bdfa58eb58109ec5097e107c027f8dc23bf6ff290caf8e8afbe814a8d310d111f6ce6145f345ea1a5b979a5fd1a751c061249ae913c3e0efbfcbdfeb22d758e832d709ffaf59dcc0fb075fd42b7074e15e0b4aae4d788b88240ad7e4918372451a1e3960b3d3db7e90d6452338615eeddbb3f5bee559f71ed3ace6da459b86f155aadab1283b4e1ec20c36931f0277ac7f25846201eb8d7873b9f31769a7feb58c84d23b351a9f663bb2196d09db28e5f368e0e2cab8b360ad3ae5e1232f415767b20b4303f6351fa0d0d5fa1d75d762de84ef866747d29c2936a6819bbcb79f8d3e6b14ba5a78119c6c547f8457eee9e9829b96002053f58eb51d3ffbd5c857a72fdcf581cbd003d5907d476509d343bc69cb59bfcc9c3385bf32626803dc455c8e452d80d3a5bef3433899e914f038fe416718cad2171eb55dcd340ccd5b3355628d05e0f95f0b9f8e6dbc37ffab8f5712561b49ba2b7dc796d6fb0fbbade73ab39ec5c9c566b0817704f979526e1271e582aa650d3f1a6273350099553a29b28a5fb562c023754009e698d496a087f1c1d20d4551bdbb2ffad38bd0246bc365eeb81cd471fc248449f9e17252a8b782af2e8b13110c29d53596e3dfafa67bfce7914446615a83f741261b7b0ef06acab67e6ef4d2942cfd2c6752ec7e541b1f7dd273e116a65c3ff856901752df6771deaafc121ebd8b4fe62f1e201ade6975b964f2cd1a467504766f866ca7dd78202f9b7e957cef10726bd490a20aaa2ea7a22d0931f5a496efc45a46a59452637fb2373ba57592810fc340f09bd622315c4016ff352d2689a7e90018e8a2a6f1356e677d68900ea7cdf759863207ad3c3d9c071e034c3615d5ed48435d5742eaeb6b148a0955cb4a550d09999024b215f2bde9acc0da3b0121d919112e3e8c1648b224acae4c32324e103673dcb59b8522aca2f2975d9d1632b45dc880dced3df54a812880fea9266105ca5a3f43cf54756f1c38ae5fc31cb186fbb17ebbce26993b1149a6f299f036f6ac97e155b64a95103dc62d6717db4557db144d62959add8ebe5648b06b5674eac472e973b82f2796efe33dfe001a9730e5391859ac61694a6e9690c18521c4eafa327f253dcad60a19d806aae6a34f18016705297943e4770b52a4ac5119cdfd3621cdf4ade44773a3eeaff6313c141817e83c596608f61e7cd3acf93505382b6085f867704525d9746a60674aae8e370f02e671d9774846a95ed1319baeac7c60a72b07eeb516457697438797c0667dd1fe2bf93c5982f77a3e3adbeaddd2f91ecf8c5a90fcc2bd90bc7ddd813c44f24524327af6764c39d7b9117f8a5852a9834543eabce1d34caa2039f171e8cf9f54bb247c6f964c15a8197ba5e3e7d3957550793fdb2eeef7ad0c9d4ccd8eb08be40d28850f812d92d5a4a2d65d54fdc3dd3956df56a9bdc87fc8d175fef48fbede60671f3efe95b946a3ae996066793da4490154931be8c6099cfef46de312412bfd09d164d72d91e45dc77754e4ef0bb0c5a326fc4b17f933d04c528122e41bb12c3523e9d29c22951c13f7a1970633ebf863dbf803f16ae6abe216a17bab545a34139e35b88a744226bda1af4767bf3c296afdee091e200876e9c837b410f50d5fccc9b050a190d4c5ebfde6bbbab68a9fdf1448264723827a88f1aa96ba05b2f3882dc364867d313ec694afbda621bfa3eba66d22147c3dfce81862e9528c30396e50d4bae44343dc75ed7013d307c27db63dc5c52c32204730c5c7757f937179a7bc4d1c61ebf0e620909286ea707b756760b8d7384d12a289804101ea205cfb5af99450a57b22a3f1067ede9365d2d32798ae1fdfd6fd541bd238573a3ed906b08d131e59fec05c0ed69be375ecafde1d6b0f66cad4c8a60d42143d18f2d0e3d10230502579b25a9f88505d3910fadf72634374a04f5be088593d7c2c4629dbe4e055acb0f6e0e2cda5071386d69b1e4d08b2110a509e4ab39d1bdc1d41cc3412ade9fca37c323fbfb427ce05487ae3d7e1c505b0dd792bb798162494eba23682f35406a51490b79f3d18565e6d80763776e2173901d4cdbbd2971e384d912b5d39fd935fc5e29492c84173384d931e964f73114ec19776e8d20490b26e8259ca084e6a7997101cc2de0ced3bf19c251cf5deb99627aa6f6620c743a9575e09f2e7ae559a9202985706e08b106084d1f0ef8dd8ba3af5005c4446ffc60e0b84fc5e851a6abfa04f79c925165fa2316b3bc5e63561026070f2c6eb8bb19d730f11f53c829325d38b4eae4457cfc08d3a2400539a3488d409522f1db1110b7cf559353955bacc8192013da31309c17f88d4273acddad33711a10743378e61107cfba5e55b8abd93aeb8feab15b5adee9b73c20597fceb73d10ad4c7e6d1a616ee20cea85ba8fff2249b7ac4247a8dc4bd28591bc042d96e91b320108682e27691ef36eb1fbf9a843fd43857070068e8331b75e41053a41299c47286df491e18ae9167146d7597334688c0ca87f0464248759dc84fd8544530665391b8cc61e48c2de98d0e72fde680e29b876cf22fba435e5a2f4478f2f19fc04a99dbb6b3c275ec42bcca5fd485360750f47ead2c386bfd3381b8dc85fd2ffcdf060ead1c9aaff6fc0b68e425f7b122677b84ca44a40a7bb02673ac1551253f9a401a59a55483729ee1b2a8f7263659698348f080e666ff59873d8fabd5ccb404afc76455d83988b1a56e5452f910d4dd7390c8e6e6c7b2b70ade2d4d716b80a4bcdc73350e1962bcc1658f3e5885bc4bb525fa818d77bc51181d2f060d49ce02cd23314bde6b25479c5f02c42bdf393bb0cf2d56c1bd44af1ac33ddb91afc4a74c6243a13176fcdb9e2455eb5a647236cc55096f6be0725a7698fed6e5e58a1a9f62543fed830dff2f7b2fbcce5d90c3718138d374296fd996641bfef13349e330eb0a2bfcda803bb72d383d6d11ba6b07195f8ac2e063b4e0ef3b5b9ee1298b65c50d6f44c37e179e03197820ca19b5f6e6299d3f4d7674be0107f6d2365199a8b70613af862f1c4cc27a75d0ced529a7b03b13d1b7cea0976127d6767bea95608a9d1d246abad12a35023b6367154f803f40f4626896c0d2d8420373f91b08f40679978ab847be9e235ad2c3da01b0ea5ade48d9a6f45dd92e0086aff50d79cef34388cbb9006c11532a42d672c3d34ecbbd181eba10fe132b0b6614bae7705519a2f9ceb20b62ec8e1993867680401258866b19ec132be89608ab898fd275f1403ff17bee9028959ccfceb92d6380a0cae14ab283256cc039a25ef5bbf6110a2fc178bab4b8477645f5fb59e0911a5ee875bcd1c96d4a03da7f8642877acb08afd196734baa46f55133204dd83596b67cebc95e04144c1942472b573b872c548817548efc8fad7c8730477d5a757d0f4cea79417d41fb6b39a3551c1f44bb54823ab9f30f8f0572b09577d1b17956d0221bd5627c1ddd5f873b0d797ada007164e3ce8bccd1d53f9409b931246aa963c426e4a948d07c5ef3b65a5696708313f8b99a3c7a7ea54afb351485fa70ff2ffab2afff2b8160d146bc459bb92fcda3046525ef63bdfefdadc090b57cb2de9c8e673c4a6b590f1e48f7d5302c3f6587518e778dcdb766bf715335a9f259d11246ef9574517f13afc10c12fd37c7d329a7dd99fc019467f911960c4aa48c5df9ecefc263251bf4ea79a604eb21efa0f0cefa9226477b891153301c7ed9740cb94612c9012f573839386bb4e034e153438d8c6af1e694537000ca6d2eda3965ba1dfdb434b6596903c50329c5b6c2748cad3b294728084d7ee00b0843f002f065385b8be604490eafe9176b83f0bd8b32f7b1d80f53ffffa3ba9cf4a361f7362061d254fe5f50b0a76c4f83002af7219d30937f31b0a0f248572439387542be545e0a19641096d65216527826ac9bbd34238c24948714add3804ce0e87608106af8ade1005f420818aec952dcbdcfe8619742d1222083b8aefbbcf09daa74b5c8f760b5ba937ccf61fe5b1a09a6bb298c535d8dc2c2149c3f901b713e5bab34d823cd9c7af66eb195ccb1d797b089081b2086615cb7efe0f009126cb3cfd81501449c9e28ce3d381ce172916d205e0d77c66553d9453d0c282d48e7e44e21e1aa2175c3ac6414ec5f054750734165c1080da16e1fb526a94ec366edb922ae1f3d83fe14ee001954c4ffd81d915ac3ab36bde2b7174fd13ecc9413831a92a8572132e298d6ea74f8b499ccffafb2a3546a9dd238a95a67530968f8b3efe53712bef6c7574d694e609899ccffb5922b420a7617f8be200f706d06bc84206482d67c97565a39c6cf15d6c87f248b4283ff801059ff3ce7f21e603808ff9557b22ec3dc36a8844a1e9ed8ee8e761a0ad413323341560df837e44ac4842a3606ee9ffb8e0f49143a648304d3a0fd483246048aa77604179b074b9373d70fecb85fb38c758b46d3e1c84dc43e5ec2fe01005cee33a11144178adaa30daab69db62df1de5950a6a78673837ff96fcc25c02ba2c8a16a867ab6e719e35aa42532497fe1590206717a708cad9cca7d23a3b8ee5f7fb7786aa3be4790b9226e6694b77d0c663856b033e83c53857a2dd0622e721a7b3e74c5a678d1c88e2caf81a94851f96bc2e86aba36abfea1d129da486dde5b24fd059f6b2cae48cb41107c5b462030d26963a7f7a20035589619493fbc5babe2bed401da220598d629396191f7153a01f56f6fd27464811293a4262e6211901d4789f2dba1ff4119acd13833a5559e622eb5cb33f3fe69378e7378fca827943d61cb7b56f2c4cafa91810728960be45bdbddc20268f7752f502e4793d6c63faad442a3335e7bbbe3a2f0d85a125d9556c68f5d271b762d63a17c9bda341518cc6897725a2b4d9d3ba5c6b2b0637338bab572a38a54a41a3948057db9093da70ce572f0b3a161f66a63ad9e12d07655ef712e9c135ba8c31a0f72f4189f6574d0127a26270ae051d8a44ba268a08e755dc26c50ab77abb06fbc6b09df3cb60881b8581b9cacf133ed3048c99a1ce21f6c6fd4c838f2d56a9e1897c3f62958ea889fb4d7fbd1bd2611ce4d18918c9bdb84420d0ba3124d7811eb9f2a46ae72a24b8f34632dbf6bb1ac4802993338e0310d01c021d5203c622efd2a46b5122cb9345083c619be245d26640e536967daaa6f759413b563c9b15f15e1202c9fafb6aaa94708a61810b0e7eb1a4e1c62b1cd126632e82a251dec0bfd6cbf949b232114642932be13563457a4cd9332728c225e9c41a81eac5f9b997b722bd34fb083dc47d04b48f91f71de59d02995dd9332bcde6a5b7842b84773589b6dd3037c62691be55b2b1092eee5d0ca182bebf08492f5550a202d5077005b918c7affb24923a70f6b51a1d833d2d26469dee6c8a149aaa9bdfdb54eb3a84ef990b28a78bd72b5f781a1f318c80f2746239414460f4ac30e7af924db83d3f77e8262edf648be0b44a803507b360297174e37bf8f58fc082e4bfbc01e70e920c669727156716f729fe55ffe290415ea7ff3ae2dce03c643ae37ecd34001528f794dc95bbdc0edb2b0429d4649baafe72818e1a62999123a3946b2a368bf770d403651f655bea1931ec6a67003e03758b7c8b874c8a147b675813679bf30be61c32df18946f2f1dd927960c481ff1703d7081bded4a3cc7f0aef609c6dde9055a939915bb8e54657b364b48ae89eb6b02ee2f22b75280b5da1991956995156af9a6319b5d21d09cb2a8e8a0963467c29645d25a4d2b76b18e28547ed6b0f763840b272dfbc24a0ff9e00cb8a177ed13522819c9114d8547774bdd3aa0ca25ab8402e82219f8275bbb8c05d552fce1d9b1057403a62132e440049a6d5a49268f745df32c3a3bdeec920d82ab2d1bec824d5e6f7e6e5f162452d2fa7b65a650abcf5ce6b0cef5f75f07d4f19e926d73a981937aadec5f95643a479bd9457a5a7d0f8021346acf071f7772e114155a0dcbf8650426b29b473050c2fd2b9c3d9a6fcf78313b701f64aa7b77cfc0386a21460c23ba5d339a821550e57cd6bc58a71069a5a54a717fb67c8e541c178e3634b457500bd5e1f5fc9f952fb95f3853f6fb6888ebd6015863222a98648e5916dea3448a570560061d1ba7f2214992c8008d66a2735292420127ca9527995bb4857f6e234a8010734a3603dd531a4e2d6a42ce72ea6496c4f6f9f90ad3ccf877afc53edb44ca95962a5b3361bd45ecec7ab82a8aaf709149eb254049f79da1d8d40120e2e44942173417b0ffce50d19dd859e54a310b145924161ad3118ffa6098afdefa9780a85edde7f73804dfaeaa09b489421d98926b5858e356a01864a7444da382dd055ad5ae38808b0f26d6a97534a102d3ad8e08ee6a541531cb73058d57291c334bcc241ba5e7693bdadc14a166b6fce1be89aa5cd6c7cf252d9813ca58da0718c86ec2bcac96631960416414d725a0d64ff7d83a0ad8b51893664a91cf31041c0fc529f7b91809366b891055e2878f0fd66b1afc82e1978aa140226a26b873bb8661d25357d6bc013125c1db3557282ce655db1aeb8cc6d9ebc833b9fbead665c0c74456056d0c0875a9c11b2c1efc8bf43a912b9124c3a4b760e707bb42cca9535808864e4569ca8d87c6ac53398ccb94abe59500642e79b8acb4e9e15a96f492a6975aaefa65b60d422af53741595a2c0c40edd5a567a753fe35c70a9cf5e61345695983f67059695b668c44d0d2b64eee2bac7d72ffdc0de7e225a38439ec6996f6e979b42a33264611d7f832897e51c41e47645767766afc329c289b0375ea1de8a10cddf3c1b894a57eee10fe00f920914526cd2f14efadbf81165bc321396c871699be5d83b4c9b9d782e6a0ec89761d2c313ec726007ee18b0940f96ccbe58a90ccefd7f79f479788531e02afa7471a731046b02841d230f05de526b7163b3bc5f2ece3abdcb0e6f7db31a3a8c72621a0405f8a9a286a2677a0b2db9e9cb0432cc820110ef17820ac97cc04966d75cb4a4df3b70a28894a776e247891e3e7191b9943d0af821fdd1cf54795c70eb86fb795adb5e6c6c2158612c49e2f7062263902a2b2fbe31a64df803ed7d92f80979ec3d817ce97a7001a2b1dacd5c6a402fb80d72872a8fa505ac50c5b3b4440db66352d4d1fff9aa2aa339a35135b1f37e9905bb1a248223815405a907be18b939475f7d659733f65ccb8c4c766a2462d79bd9aef19553484a56e8407f98bc358a012d23409a6e7d1d82717c44e40bb6c22653f213634b3be71cc233262a78aa31f7846f6beef366f830b2dbc489ae16c7a239308878b025e00c5a29015d9440b6932b09ed7d0ada723d1512fd4254ab6f77540f59baca2dbe907acb1a17571ea23cec98ce2dfa01151263c9f7f8469d410d6c388d13e37c080fe8c178410b6d7d598dc416e80d02681563a7bb91cd13c6cd49522c6a413946f16db223c4f654cd54d737ce958906f3afdf5550f72f35841db2063fa62d8d019dd147248660fc1c949296fe1cb7343f489d7bbe10b42c056670fcccb1efa0bf7ddc278271938cf181868cac65dfb5d34967c00ec6a620d1114cdbde72cf990bf856fa456cd62dd5837abfe25749b0371803cc47ff4b386e840b4c7ad115a06a76066a765e70074f0238d7a7dc3c4ef41f394871a5ed9d662978f6aab608df665fb51d1b31aa41e766867d04db02b791c5d3dc959fd27741675a827509f17b861c2bbb3fcccc0425172d59ff3de1129671972fbad542ed85a57897e4b2189f521330ede7171e77927ef512a3e822878c8d4feae82f8727bc4d9bdefd9ac57153ad8c5b1dfae7c3b501a550f5c50c40fa80c1b42795e84e6dc68bfecaa74019105206ace85d710f160907bdffbce96268b2b63680efac8a217810a053c2d0c0126b6888512802843effe1ffc8b6ff185e8bf518fa251c025fcbf26c9fd4bf8edf5e78995e43e34ab449fcbe58999888657348019e1f80dfaf27f809b6c353aa0195ff8419965c88005120a3b84ffada04d2759973c6204899f4ec20a079d53d0076c4f48a0ab466ab7d1455efbe6d37c410458981004366a69a945865dc8c6e626b918fb885350d3c37a27d05d03bc72c958079d0b632615d81b85a0ed6c266b1db2cfdabf025a53be690c3036baab1c4c9ee1069d13660471122cea34ebd4c742e5ee76b34cd5531f1a7cef079041e141556f75337958beab3995a2a2bc74934cbeff501377546a5c2af47d4e18f35a5df82d696d2970bd0cde4a9ad572685781ca7ce74e365a01fc070d5b78b941ffe9038543b88860881c9cc6133b92227c8884e1bcc1fe48a2753b221a25f5a03a79141194843a8a9840d192bc5390558ac77ab8311d23b2c46e33cd39c452b0a294965cec8ea4717600393ae6abf153fad5187af4ce6b3af03d8d792ae254d5b0b1f6b1bc065a97aa01101932a339c05527faa468542923be79b4b06dfe70920d57d1da73a9c16f9c9a12d810d7de0d12467dcf1c2ce20f7799260d8 +MD = c617c8f8b624852499835a276552d1f6639a4876895256d1f16a13a02773ffe3 + +Len = 98632 +Msg = af93bea8d40118ed55d7d153ac725ecd15f0f706a0f3494584a16c94b6f01421ba200be4ba89df82d596d872b9122c5e74a276cc879365fd3cd6b1153a49547d5739f686ad24a94ff0c3d6e8ff4777b7b8e4871b118cb75064fd63930bfdc4862de467d5d75cde1a4f65b5fea59ca8a18abc123d6565a906a41c69545094ce03e52b461a60b8e6ac99845cfcd39625e492340078ada6a2e6a33daba13294d9be26167b9e70c029cd7728b32ab3bf5748775337150ed80ab90a6711c1d9874c7d99acefa62dfd1044915aa2cf6a9ea695e221a05bb282484780a383fe6cf49109e6f5887dc2f601db8e21113523bb7b927aa72394c12cc658aef8e99e14640f2ab4f92f6a553365581786e8a2049f3c08e8eca906625eebb43c6e2beaf85e2ea7abc1cdb40f3da584d3900f5f35d153c0d3f818fbbea11f22d10d312a416a564a745448a4179b27276b476eb4dfd9267fe4d45ab9fd7cca6c15dee3a61610efd9b7ba8a8296d5550986b3eee82a401f10c387558846785458b2e82aa5a0d9611d1bfc7996b37496f1cddd75453d8da43a1719f3b2c11b26af4d33ec71064c15de4921ff2797ff51a9e7ccec1141481fc488931a7e98f0a63891c8135071f271e4e931037e69fef0f77e883c955dfaf777c0fcb433f07c3dbd23ae858b0951def6a2356ce452fadaa4371a4b19ba2a941b645ca81af4495304aeed2c69f5f3c5de1c33249f7a7a7778bc8903e57f605e781fbcde7bc9de51d7d88eee345e608c62003612f708062f3ab5dd4b40d524bd5596233e9e9ac39dfc4998b5326b1e9d4bf6431e3624266ab4c91f0a74e4ff197b7499b0ca8d81a13baa1368ad45b75e60a56430a2f86390aca1562ac7d378dab35f261c48ca9fc45ea308efeb13b3396bb6a03085a94409ebe58a9282cb1868c3ffd36a617aa56d2bdb7e3235fe989532d000062562523d393cc32aecf3652b73fea7825ac51b066cfb7d18d22ef0d97f9c8a9bcb4913955d4e0ada4f74e98c8d01ab4c7ed28af6e7aa0d8b0cca426f18c248d5be86117721c4668af1752cf1d7b3e5b114ca7aa56591377329fb17bec5e9429d4842d44c4b46e0221c1fb5c31bb95f9763d4717bad5802b672e8f62e50b97fdcafa5e27da47b7f8a169a0c6b1fbe21e8b419f9e089a6773d2fba67277fdc07783cd6c570f40c4bab270db94fac68318a4fc1993cbf239cf0a898f2111cf7e25b37fe058f03a04c6b99a044d9895f99677cf3daf718787bb724ab2054edb5196be844284198e08bb3b27d3670804c616583d742795c4d1c7bed1a7858bbbbb29296d1b8ed7d740f6cbcc9177b57d78f6eab965b2a53498522490e83864db4b8b68bcc3dfd7803e07cfdaf6d64d7a72d693e58ad73c415c09681afc7446d4630c10d5e3dd8523507cdbe55c292c865423d8244beba7959d5bddc24cefbe119249a65af42e6d3b48b4546e39d6df2b8d7d4c083196838bcca81a496201472d69b29dbe6d38fc22574cedf82875d1c49f3153f3c43e6cae6a9c91f2c43f5e8259e56b62c793be833cb4fcf5a07ca10c09ee84998c59bf7807a7c970fc1080bad340940a8ba520e8497af5f92a51c94c4e03524bf28ee86324384526622b4a317652abf83213cfac0e0d8d752e9bb71fdc2e419d8f44941a30ec8995aec60770a39a17ce433617590aeb17fc45c106f144bde700caf13ee7ce230b313a976502fb956bff47a2a469c0a229e0d858155b184097182e3b35664c8a4eab8e05df62eec32d0da7dfd378bfb137e58ec77ed7b734e646317934104c60c84721a7d31aedb1bf6bfc4430e058a6c65cb1a5bfd1b229690d6d41a7704e750ca68de3ec9578cfa7acbd86594b4be159c8e96934e3899c73e04a1b0bf0b305904c3b40885d309b8a42540c9913d9ff76bcae889a87bdfcab61406bde2c1ab0d7aaa24432ec75a3bbcf684d9cd4b35f819a799a3d28cfb88402f8ba9a9cf5f557346b7578cde856d0a652dfc0f848901f04c304b9612f8e8247db9ddd9dd541a39bef4ac67be9435d69bc2992090a2fb36e235e8bab6dbd1a92517bf3d929342123b64aa870f8e7a67c0cb1ac91888cc349031e1071fae2d18502eb89c9723b647e58dbab47a7c2606fbd0e6d0c4445e327faba045f579e3b9258431bd930c5f1fe3f942b5a66520fb745a65fd3bdd9778d62b8c3ce242dbd4cda390692f5724e45e30ac533d51508e54f0ff1a265b614dbe390db38c13fdb16f133e68130becdc7db85e56e4499e07c31b1ced2cc7a3fb5f5e8b749bf33198345aa482e630a151691bc2864553f2ade8622440f62845c8e0216e45b8eb5fd04402297f51cf2a8949e13eaa087a34c9ec4d7fd92b862efd6a0b1fef8b016fa2c6933426fbee6fcd46903c8cd5c34ca3f664958074e948e124a3043abb3f4956e2932f408d98586488b223f2523822832f30cfff795a7abe377186edf1add534c28c8195aed2cd9836ce5ba52ae09fb1bf38931de1e0acdacafd0dd2d452fc838b0592ed07a6b6af796d4c6d03c3a974cd044aa15584c67f06d002af0d36a48d6887ca103f1bfbf278165e1186ea2916811d5d547c4db1f31371cb4d4361b6987f9991c6ff3984a95c51f95b5a5c08dd040a32feff43537e1868d2741fdc1bedf8c34fd6ef09391c4ca6851127212c127e533367856e956a3d3e7eeb48aeb9d4fc8d6c09b6920392719e6afc97427ffc1681c756b7d75ffdac7a367c67df7a94b3805027fdddc855f2c010e450c6e8e5f51b55943d859a818aa464ed24784577442363f86bf072abf895df91fab54e1343a947eabe802c3c02446f07267f01c3d7fe0e43a9d5e7ddaba440ca3e189bcf27b4041de2d1ff7739e3bf9216ff98c1969ab7d25e94113232759958c4f6b661c9c3f4f8527ffa795a08bc569bfdf1b9a77ec86b3333d6f4b690530433578711525e7f42b692048c8b3cce1b5e83f4f33232a7d7d0bc20695e7ed7943343f627ea0d0dc2b51307f6f4065da8079889b6603fbededc36d6db53c68cd06ec3ebeab8590641f809ea00bfeed1c63d45984c582c734700aae090bcf0d98289de4ea3e5c9d287277c95f2117c923da89109fb438130dce31f26d1c28428702f9d079b98e6d95ce974ef14153908d5f184c40c49c75c632e9d8fe58d0be0630606fe17fa368488e6fae2adf0ac9b55c026b2c791855ea5882d0516440d6823b6241c62334339d2c7155607cd5eb487bc80b9734443a06a9ad570aa10102a78e8fc47c36a95610434ce3168d2d5b9318e99c259898a89790b9fb6ea189e8d2a44986881c8b265e4d42c5c19279b141cde79b6c289e0819c8493c01e853ef90071ff68e57424ab3b5037bf62f5382b1053297bf46cd0f099adb8768e7e79d6c418392d3796739dd04ff7428a643268d595b0fb3859df3e392d16c0812cd58d3ce04fa1bf5825a26d7a75cedb9b1332324d161cd57897d444adb58741b6dc84317248abc4e0c421d879b8499bc362f0f02364c815f27f1882d49eb1144516246a752c329056d884daf3c89d1303a80cd7bea1e63eef1f73bb4bd82843010ad5b192032069e3e7323b91aeb08b846cedafc7d55e9996004eb6b96bd215114000cc71d65c98af7b93c3fa716c4b6d36fb40e508186e10a90f3cc76099d49e400b84b9acce64e11b0f3ad619b79ae78f9e52c143fb0585a220151dbe64c6cf9360a1128e5e17a1500e67cfaf7bc21afd3eac028df1a51c74e709628d1a35cdc065eb2683f4f819a0f8138b399f092d0a431751efe297fda6cee03ed5a567bf4f842a9a93784e6e963506b2c20bb8493e155b5670b42451c03b615b9feca5cec8242519c6d262cbb72d08ed4fa71695201c40b8185092404b98555ef2d73622b4aca54925ea7c568d49e1e4ea5b6d3a38c18e20ef9e29f1ce4c84f2d74e64e29b8672d2b7a8e3379fef583e9a0f035f0e6a0c35fe86338dd1bfb6bd553975370319545d85f5e197758837a368ab222d2b8183a04cf1f63bdc59b3677480b24876cd139295b7bc9e987d44bd5a1710cc166cbb08e1c5bb24788242993c0c633e7b0a7618f1d8bd738f3448317b3b156357957c16c6ecca6f2ca22dfbb6c3d0409b384698a13e2c3fe2170aaad0ff7b1a77628e72024c6b4581213a34e98e40775cbf4bb9abd351291a8d54ce634c881afd3db8c39dcfe6cefe6732edde56fd0a49084d24197d735abefdec453b08868b718dc3b1a05c82312bdcdccd9b014d22e7791480f326dcf956d19bb8601dbb955cb978e612da899790e9027d2a7879e7c07b67763fb5d22f6a7029cfdb71705e442b9c07fb334127b6f46aa493a4c8805b7710ae07129e2483425e31b3eeec11b44afabf644ef30a2467ddebdc6c841640d3d5cf522588ff28af0287f07b79d4317e59b35413e66762a823fa0fb7f3d0f8f97f8229d6d7e9e21fdc789bff5dcf452f808ed36a6467f9210478336f5fd70a4fd66e930dd50938fab5adba64e12c77c538f6e93bb3327038480d517b0e52fe3fa13c98b2c888b2a855cd58914d104fa849939f6e1cef4f57b66270c3496a5d2faa9340adf98dd89184817a6ee9a556417b0ffcebe7c71fe5181f982f5747ad89b71c94e6b041331e0a712ae3fc1313f6960f089a5ce1664a34ecd1a7821079b4917e9b4535cb4ab5ae446fd8d0820f30613ecc64c366afedd26f241310ee461800625db3cf54a5c039a35235ab19d058a5414f2f637d7f38bc53985b4a089e1dcb70e316c704cda57435d9e2d600e0d42ac39ae5854f6092b93e36677887082bbc4f3458650249ce24a30ec79960c70eb86ab36c7103d96390d9051fe2920daa99a8585ff177a1a11494f9cd3b610b6c17dea4ae6fc273140acb0d6ccf5233022b225815b38a5e880bb1a1da062a36580ec87591c7b4b40befbc563489ee059b3a663b60f36407ead0a20ed740e4d03967d02cffc00026b10756e961568f08de8e1b092af82c242e2c0e48ad32b65f77e89dd3dfa3cf516e193ecdd97f5dc631eeeacb5a0b0b3ebee79d584224c96d7a5ad87118b848bcabef1f0a864b7fc6fd237b88d87429dc01c9f845805e4481a984280f944794efce4f9fa94e041e90abf675488c7bad865f9ac7174e2750246e3036b43a98da72410266b11bf061ada12c81135e68c0c44021b1d693c915dc3024aa68f2f343ce6ad01d2ad45971a4499046f23682891f0c275f8b398aba3458292b33a49ff78ab3806c1c618575fd0ae96decfc12311e2b74793e27b368b14c07611e38e51d2e83dcfa90aabd96414bfe9d0a9860df4a06d0a6f5458b46dd7586f530970ddd4241aa708d9648fcf776987f53f2b4bc2903038eba7b5c7d3f3b6e8f72a75f604f57b3751c0f70cea7f27fbacff256f0458bd4da94b16c345f0786d6ea5122cedd2cbfb244fd7b35d9277bf786818da226070c328ccf0594c63f9773a27ea04f722896cf0d46b258167d54de8185a3fa52dd733da8bd6dc5fb4d690da2141f0998b3ff737fd35d60e55cd116c7e7de215377d1a4f263ecee8697c44df0fde827d635c346a38cc474cf2cbc486090873fb13bee0e72aacc37f08770db961f43cfb416aaf280592ebd5b55db1b5567e57bf29392242f7853c9c083345e9c64772abbbe7c1c1e23e562113ff738ad5342fea0e6848e31b7cbcc7ef5da7f08b2ce5f7296016e86d02f8c7952d746703ee4f0429b8df3804d7a67b34428e5e4f38e9662040190bf4a55631cf745eea60f1478611c75fc2524a9c3e6d8e738380e00f91171432ad1779e0e819407d858ae1abe84d0045027229f089f19de220aeb6cad094690e3c54154b63093e6ab8e023eeb331f01988e31a65d666fd74964721addd2e9b063a28fbd82b25aaa104ef5c827f771367b623804eac44298554d8b51aff2c46b537048239b8e531baea26eff99562e69a2ac1e02d840faebefce1e5b4bf33d895b3856cc284ce4002e91562d6adabe63b474cde84f63ff96bfed137eda5dbed12201a0015275772337239398c10b8aec5ac02cfe76b3b9616cb4520384b6ae0c51d30e094190734a72610e88c770f8cc3c9a238b76ba91169f2bc332708875028fb6882e1c25403e8652af47a49171ca01099ad97700ed7bff594f52c75a7b7b85b3f6b60cbc46c71cff5f1c7ff65eaf5116792ea00c365a3546dcadb0b5273fdbd140ea38deecacdc6e044e80282543d6c7a8d31966d579e8fa53895420e31538194f12c9129cb76da98726d1ae304e352610100b9630a0c17e9d2fdb2317c744910976e6e1beae78b8d1ec9710e598193b972c9e24b19967d9a0e76c46291ba843575db8d2b85aa4a1c9e8fdd7aee8280d2671f999bf2b841346f82f1282da0c372211666df3839a6e5661288af2080aa4a625457dc11dbd3576ac4d0e8acc177450d8193ad7f1022762a143b118be6808fd91a9562138bc451849eec3a9b87202cafbf9c2cd6b83d2d4ee74d48ad3ea4215fd4eae4644294e131839b74867c5e979c12d8c3bbbc5799491e37caf0f3758d4b15b0c9809ab5551615774cda2b7314474de208aa7712389d2ba30ef39f85524f4f9f97f4eeb64b96c7082a22ff0e3125a330723f82fd99df81e79b21bd43eec1050fc63dd91823380ab672dd61907cdbd55c86c75a6a2b74d39de607b741d144b879dac7c44b8a7e630add861daa35ce36bebcfe87f86bf1733e761227ff983eec764c2f4ac0dfde728db0a96dac1a7159ef9b317618d9e9f341c1ed89edb234037da0e0c72891dc9bb7a2a3fc268969a167980ccf5c03a2d6306fd6479cadb8b0086f68e3e34f0d41011a22239a111bcfaf39dcde3267c08e82c6790b7ce931549f0e340b7175c525028d908e87300c172ef74e2d2c74c7aec16c52201ef33283ba13eec86394a89a24837b876e64bf2a8f66cd56aac93c9974d7de3fe36a40afe206d5853a2a3c22ff724fc8c02da97c18fed6d54dc373e1058f99b57aacc03b9f5da4dc55b4d451ec0089ad2d095f8e8435f71385f222180bf9f12b354945d94a9eb92846b325a98284b5bef57655c43992baabd3e3aba0e0bd90fbb3ae45eb8c30af139da3949c5b955078c9f300dfa19b7e08c806950e3c30e5c1766a5504dcb9e308cb14959ccfa8f6650b1e051364b6cda4d2d962d266fa5bf6ee0bd797a4a0f1824f74cd4d6735f3fe4945b711fb8b262a74ea9970098080168ae162268c7c471aab429000aad2e5cef508bb4dce7f23e42ea89d799c59eeaaeda97923fca2703c5f0c826912f65831aee566496609237c7092035187ecf41e86c271326db9f951eb4118d92816a7d0d75a6c774acfc15deb355f8a54b03d0be6ab0eb458394f15c07ec7f362ca7126fed62279f5296a02ef1106a6ab5a25dd6de1963c5496edd28f24142a5b78209e95f72ca3edacaa060ca39d18c4314b1dbcf4ac3ceb696222a7cf81f06aa652c22d2bef97acdffdc1b47b976367ec29473462a538751728809adf95e818eb741c34e2dfb7bb29c1d086f76a18eec12cd464aa35b19a26bd66e8d2c4740eae01173dba91a68110b2bcf4a599abc176d26fde39c22ac31ead60025792268464864db821a9c6973b3ce17e04aa8e9873c654019fef16687554e687cc936242a5702a24a66caa85efcce883a32143dc2e553b6f5af10722b15074d9a02cc9a1f75b2713c76ec4a5d4ef2cb5ff727df52d2b8087e98c7f6a593c958880e2cf2ac0a3df05e324a7af5110388578326f8bf695cdebda15e1b7e365b314dd39e555a7e6cc6ba822b5eb0adca662bbc5caf8f1406deb8b31c083d65877ff13b6aebb039059c584fd91e158b0c0ee28c102d4c3a80b379b44ae66a8a13ea7d2dd7db36a3d0193e7f9ae3ac11942884da89997d429003088e30dc8d0cc81cf8902e4e742497e676fcb7d5fea8295b1a8d101cab96ff776b2716132f536eba6a4eb86bf32520aa08ac781b92b8924faa8fedde5d9d94b6ac6944b2d7c7cd6fdc4eba5b3a0c340efa7924def0aa98ad3fc768061bbf1969d33a01e20ed0ace054787f45d1439bba564a0545a1e4031dde1dc9bd6e645437e68497cb5bd6d5b8ddb44e5241301d55240661792cd09b469179572adcf40fc9ef2e4c9446410e9d7cea6ea9113d82876a9781a119d527d15fc35b76efd710c6f5206966577920383b022874c9d191fa32e4ade6f15a716551e31dc82f7620d70142356817e6d33021e4c4d8f253135383d52c703bc93fab6dc2e549233706a41a7cfac30df0ee2d36798aff132dd13d665248667f895a4bbd46fb2053838cd448b6fe9ec2003bd983a7c111b4c6905ee14347f046028aec4958a67747c3780f93d88b22bc7c80d90f57b3355d861b5eff907238169c963617e13073885d93ff04cae77685ce86d8e372a69497d539e6c52211637abf48d332c7df3e9dbba54aa2745ac4a55c157c05dee356e91bb19e3ddf6c9cf7d366689ff4fc000e43769876be2e31a290f56d7f85b2a2dcc04c2d6eb0ca091740b9a0674ecee0645fcd928691a9e706d1ed54594d5aa0f72cd23c607d75d2616e092093bf9f07267673dfdcd3150e5886c6d99920257ac2c80b721c2fb3205dc61e932b2eb59ddcef3128806eb8cd211948a349e55955c5fabe78a9accd1b94aebf9f35825ac90e34cd157848db4de8f13b5b70843f5c892bb5f50fde0bea8d8fb6ecbba5d3b345ac0f4dce4bc5b6357667a817e41fb495c4b69257acb4b6d0d2c923c47e6b8408bfc1798a5ec02f9110943345ef4188712b8af788fd12a6e6ddc1ec59f56964e0d5a940b26812e0822789a4028cecfea6caf9cbaabb6be3561a65ee81f2147a5456914b505304f292230fa256a36a3ebb08cab6c6cd0894a8ef7fd2445db6efecaa3f426b06de8d496ceed54a1d0171384cc762e21b31e265c6d53faa1e95ea303a7bcb0c69e8d82e6aeee6e5e0fabfa600b674098d2df5140631debc1ef994a96c0f913a646afcc986d67d30d59d4f8b8b6097400b46f43d17595781432c15dea9c13afddfab21a226704131e4314a72558d71917dc2076961155101767594575a5b6f5dc2f46d42b482dbf2f600d7e0c604aa03cbea581e4c2f7545a01b399de5a3d763f58d0b3096d5f27bf1501f5f468feb9edd060ce7406d6a54a7672e37b4621b1660be21f436312fd2bf6a4a763df4dc6b9b5e4e49a599d83775a198ad2d5fe27feccfd817fa5e3a0146967fae13fc2471ee3944cee37969f4f011a288ba64d5a47f0757204c23ba10701be68d306f6bb9bce116fd62d6c39502fe714fc2379c8f02afc797934958052343a89dfc155b49ef9ced5e8a778e2192b2308aada1de485e0f4f043699bbea4954ed66e0b69a2b6db3f17ac42673a1877305c2e26a43d5796f18f09fd88bc6c997dc6f4219d067206e49d876a9191ccb8a187dcb5a75403d1749e335d172a28b549e408b07a603ee141e010ac92a9a453f9246cf391991914e0b63604b168577d35a612448c309c1ef977be64e4b24ddd99ba256cedace5c5e86fa880d1f77755b395b73a4d1808045ddd0740026c07ba25a1bc8e25d01888de12f15e036816d3563b4e2e37571135f17871aa7637907e0f8388e3d4d31fc24458a6f8c03a947aafff7d8cc59e361856e29420aaa5469dc9d810ea75067a06ad994ffd92df9eb0036a9bd2825de54fe0a3d53f2a15b8ade6f7fb1e80eaa5ca9c6d42b8f5d79417f2f54f8bf816bd314124bb527f395502d99b9dfc73102182733d35c753a303271137ff3591390c70daedccf71460aa41341b8010e5e77bc2e4917fb546d26a41c09b315be8657163208770b9843c36fd690027d833f1230042f2a6ef49d6380ca3a77c6b580c8a9cb45a4d06391c797bfad21bdef7cda5cf10e941f1d73f0afc1cd536e08a9ea682090eb879bd81e0616c09d2719bdd8293f0edb749796d41849ebcf757dabc53b780fd59608c2d1a223f3fc25cba9127d345689d729b017a2acbc7444dd2b610b1deae96672f5e7552d6cc81ecbe892421a0f25af9d66c2373067c941efd4c7be554aaf5fa11968057e53887ae223605e37603864b962dbbe1f1557d57d4bfe3e6957b0e95dd75d9c5cd1c5a0d80282bbd472495e464c6d1ebfeda4684d3b0e71a138736d6dd7cd01100e06fa752c023f386de0040bcb7d4159183a63294a0041441681519ac0c01ce231d3ef814ae7d4ad7886c0d288150e34bda12cd720db959c1860ffac3a3ed51962b4e7c3033a6179bbc1f9612b3c6d9a055f2d1f66a754ef679add6bef5014ffcb324a040002cde55f1c18815bfb46d118fecdcbc46c68862ab7559e84fdc1da91d4810ce84702398c1c83fac05981221d0673a1e133b8a98a3dce0fa44ec4f3df23f2a36412e7bd694ba394035e07d53cfd896b66032c9fafb6b084f5490592dba606911c6a64b91f30e017cc12be329f6d76effae5acb2c0a962c61ff86dffade5259db7576174d553a34ac27e8f816bdda2f646e02028e59f4e9dcb63e2817e68b891dee1c637b43d52f68ea96209cbd67547f2fc704a481fdbd0a1914d6176b8253338117b4ae47557e3d89b2013e5df57aca54185600eb17129488a97e8bc5cd64c6eee69f58c8318d9475dafe7e180b0eb07b845b262dd786e6956a65b79dc31a327807680d5f0ffa083f6f9cde841e8cdc16899876a2c5868abfe6405d4c1a0020cd08b32e64372ff356ee50d22ab671a7b5a69294e257adfb789b82df6918a2fc4e59154e804dbc005ce5aeeb645959adc949ede3751449b34ff891a06d757f3f8c86e2e02bca1a99a1d42b9cc97db148d201eef4d361f63cb68c1152d186e16507f0c085df22c839d6384b78e2a9f523606d3a4b75e740024cd476693de39607314512a202ee415b5a8082d22854a1a7e4ca4449e51a93be63503555fb01f990a8e27db74f831298bf5b666b03145350dfc7819299528dab9a9dd2aba178888bcf6756581d97b85c65176a961b4f76b8c1d396981b457a54730bd2ccb9adcf63253230e6e582af20fc5303d5c98c783a3b8ce7dcd36a06635d28ba4bbc184ab14ad181f64fea6380e58cc6bca641f47f9d41f9d36a16ae32e972fdab114e66f090d3edf8a51571f6a12327bd3a1667d37791410e47f1ce5d8889116d61c6b0ab97a7c9809dba66fccfb4ab59ed603ee04af9520fe572034dbac9aa051607b43cdfcba900824f9efdb1cfd60548b6062097f8a13acb2dd98e00c30bf4b687fe3ed9be011b0b2b968407c31c61c49e4a1eef0db321817bbd98fae3cbdecbdddb3c060d761280f4fa3a223cf2d1f96f7725a0b70c5670e22be8f9ca7e05be6ff78ef5285c899c32165aa1ac0de85fd019ef5d73114c41f7a1189de5771c16b4bfd2179d3902b5499790068ea2175036aee685c076655d32b98247a36b745d52b09ffdea9ff054c1ea64b15373e17329b275ba2d80542b19d1c097a2bfc10ab06633188f05f503317b3332a8e7c9411fa1475b28e37b4423964dfe51d86497544d45e7f8ef6338fee6962aed6241428f07c5f930f45d30c653a4fc4f69f19bc4c242ecc6d0dd7ea0a907da9f97ebe00e626c14d4577c6998a64011e9d8da806881b4b7673eb64cbd3f02f24ded2bb2042db41e91614b67111ab9cfbfa981dde5f805a858ada01bbb1501d256d6833106d638a6e6c66ca1a60d7c964f50aa1c9391d06029920d6410c79f2b78e874d59d08642e42eb32b1ee1b02f5f76295b517eb8f4f488060ce54c3454df29793182d20c125344440005fbfd77f7653f74fd971acf633fd4cb2fd947eca726840813dabca1c49561725515884831aa921355ea0b3d58a5d23aa81c7a61166df1fa95525f983e0b51a99899174b172d6a61e2e053e6d9a44882d77b975b34e7082e8fa1bd9eca8d5ecc55ee7327b0d711862be2b974f1237dca445f64840a7a10cd892f9e5c6f04ce03157c6485048ecea9b956068ca50bba3b7831ab819f0f53fe0b64ca793556ea785fabb20d1c3be8f212a502d8ff4247fdfa5732fdfc8f17ea9ea8089e246cfa50bbe32466ffc7a88ac038750006b16c37523bc29e27e0a5b8c9632273452e46b6b18c8339b51856994b7627acc24071120943220c2aec459115fdde9f9f8415d0ca0e972d47183a4639c6e0833cd89db5a6d91cf00d993e9d09de05cb3a57b1c68dd128ebbcad9bba1492672d7b5f3948b16476f2d6d1da032d6e5f9e1f8d60c1833efe1a1cc1c31d6341855387bf8df5b34cf9b98f7b5fec0916b3c155106be932bbe063703bf896af3b029d69dee1e233f86dee3f7f167f263ccbdbe4c61a6524b1986ebf03834d7fe7a6b228a67d37b9d29a38efc547e50b4a6d95d599b45ee189ece21101ac6b5baf383bccfda81dcd414740a6343a4540a662972f7083fbefa9a5686e1dba18cbfa82df5ecdacbcf8ad3eae6cb636c84eba7188fa32cd65d87b8ba7df3ff77b58314a47e5fdcf3bc17e452949328596bcec64113fc9dbc3246565486b4fa9bd89ba591a69755ac2b11d255946916dd612a602d9051cf53e59d1fdf21b351905e7fe7701f31d957b4ef0a6e76ab937b1d94f1289541362fe0126194ef6d98f7cf9656ba489ddc78c23608f7bbe932a4e984e5dc834966c2aa3cc82030423524a4758ffaa369d391db5d6aabc480790d6d70dab3fae8d59eac82b00ba4dfcac96593df9bcff4534578eb8bd5312feaf701ef3c395c9e07268f7ab5a1bda4ae388b87d2281eebdfe61356f91e7245ed145f6686f738e78ffc9b8b45acdb2f7404aeb8142a20aeddf643264ee2184113c7ce6d47581033b483893aec679dde90b017ab021c65bbd21880efe9ba93cfd383e77a09e66321294db110167c6640a8cd8ee718696ea160bf450a46226540c0fb32f32b2cb23e52ddab915055d4e400bf5cd2e3bb9bedee4d180c00941d225070299f37957dd9d595e145268e5a375cf80a24e06d8dffff54626b959a1c02f6a543a4bbbb36820618fa82157076b9021a2f239b09b565f867ccbf71aee25147ed09ca33f86cc588d9400e89b6baf794982475601a92ae8de9bf6e214d20abb8c9f4661ce79112c2496a110fcb877188f4a280fc0ab638047ca30e20ef3760cdbe8c0ef3034408370bc15024297c9553a1f1ecbb7480a110731005fd2f971efb5d493b32d5e6147b72fe32535afaf18942bb0f3ac29268267f9eec1268d044c608b46178c9f7a5f421693e09da93049e39666ed68f6bfbbaf4a8270d357350b2534618117a195b3599aad9d412c54d07088c822b356dea4274b45d4a1fe0e144cf76c5b9409b92b43e3bac3eae1249583285ffa54f189251725be55572b974f1dfdf00ccc82efaf4a1842ba606fa780649eb2de1570cb26c6ff765cbf85d7a5e06e75fc87b23e27b461cbe96b80e67a5a134934bc7ba98f7d02f34f9fb5d6fcdc7281938d41ae7bcae7dfbad3b9e769aeafad6512b92d488456bf98c0629c3e5a2f9e39a5d84793d4d205945fc4b437a99965dadfd35e392322629dea353251a2d05356991f12571a4ac6dfd94955ca90faf9faeb70444ba28e62c8e4d59f1ffc7b28522fbd16b0e376a80407efd00caef9f22cfd39e86448c4498078eceb8eb059a695305b5b84797e3569b15f2fe34abfd7dadfd6516d5ee99e2c6c1f1f880591548763a0eabd228bf577a1417a39ab73306b57ee874f2c28ea36891841f4444bbb919235ca4127c56f969e3cb7f51a3e86472e2993f0faa7b405977f5cb9b6b1611983c103fad0532b2f6ff8f0ffdf485fd62c317c3a108e84015efb75c1a0e8d089ffed9ece645db1a8dd1e2c3f42b8467f18ab4a14b506e292a53596f34d1b9047ce61a2a72d0d8a6bb056749d8bb6c0adbb4206653337572036d5c637047027bdb8c4176c71893ddeb047cf01016c57c5de9cb717d0486a13d7820e750c0f1f5185be060579f9526ba49a4553ed00923047616511d561a4d351e47495ae21006dfcf976598d86517956f6de7b979af956bf3a183b8aac8cc86ca4038032ce5078e71a6f52f458c36f8c04a3614763159f0dcfd97d364eaa5bef6ac01ce03d99da0cccf9d7f89630b70f6c9bed45826d74fbc7afbf227286f2a4ddb552ff9762fa33b51dd1df681eb8a7d5ce08d8208a3b4fcaa3e9973ea9f751a6e90bd9033442267de226f2f717da1be745984a65f25ed282bce3dbda9ad0bf6d642db4aa9619accd51bf796ba285354b0786e1782f434c940295366fe1e7b6d92fa1d9b410e78c4d7084bcec4821bba91cbbe682c95485ab7de8f22507a2fe92515090482a158fa4495d02a08f1676a88d1ea0aa46f7446d36c25623936b5e41d221218e6d097d7ae43395b202cd2ef16196591930965382340da9920da99f8ebbfbd3af602c1e7947ecbb4826acab2ca00d57f60e9878937faf3499fdc3892013c8efd38ce639477c72bd8b851cb400536ae46a69657c4820923f61ec23e4a0e26fbd2177a0988c8babe3a2a68613158195469dc86526481e9c1112623078b530d885c2abc001f17a8174b511508e143275c5b6b300403c81b7f4d3e5520d0806eb8fdeb0b03d1d53dbbaee4fe4eea56ef4abdeb29e90cb52ca2eccfff16a406b90229c0cd614ba1ea0fb73e7a8fa6f3ef93e3c4ea7e09e98bc08263775580668af8824499c4d6de1ba806c61067c1ba96dc8f90e83f65c5b77ca0915479f020430079fee69b2e0a610910246653a50b8368f3c7b9a9aaea3e2bc9c22cd07db47fbe83584a409bb748a755c1c2cfeb7723ddc2e1b54963c79e52608e570583a39f8730d92b71ba5541076a46ec58ef8df6af6f6791ab1ade4684f74e79859c6e310ef50a009b0474c8adaffc197b2ba07a627be1a52b2aaed538009aeaed3284c29a6253702904967e0ea979f0a34a5f3d7b5ab886662da9b8e01efc4188e077c2cdeb5de0a8252aafbee948f86db62aae6e9e74abc89e6f6021a4db140520c7c02e0271d894f0a1fc12e1e1a736e9934bc0b9ae8beef750695134bfb8ce7df5391f4a47ce7bf1bcd1bf15bc639b6f19a3f63ebead25b30d43033132c66142709c36154848c9a2abcf181761e407b13e3593803d96296be67bcc3cacb35a28ca77f715ebce1a8e2f52c2495a7f184a717f1d40a3dd569c9c71f0b9b61615ab834ac6aebac4cb1e87fb223e1ebb29b543fef7d279c9399f6fd4353ac75520150b8349522dd367ce7626dc68171ec86c2613a7c828004f1ef100ee3258f6f62ff3cfe3a2cd608d285a744549dc1080e9a88bc19447090385c086a022f3822446bc6f2a1301f287b6a551e175f646cfb84b95c9b95f59f35e4ee3efaf2f6d36e3c61f8115741003f3f74e555ede1821527fe024c9c9699b130c972119554e8a91b12f8d4c9c3f6e6ac0d80576fc0b1242c5e967282dbe674e8a1ed9040d7cabdb0e3da30ad2d74375826d7650e8a60ef3ae201566e4cee46b37e99bf1d09e172a2db866e2b08e1fbeccad2c6f1c6f93ffa902940897219ef39695de5517195909902e5d56ddba5fa0ffe59c442fce3dc1472f777fbd4d0362369214b07974fde3f61ddaf982e28fc6acc54a526b4868e2f905345ebfa79e51987cd3a6504752539ff5742d78ad1c9a53babb2c7774a1df3f026f0816d7ec2c2ca4af8933f712d32e53cd850750a28675346334dcc97500a9c56c1e7b44596c73a7ecdbad0a9bed01972b72b793be3581d0d70e03cd5f0199ccd0042573828cfdf5203024087a0bba5e327911ecac021a0e9b0a64e6cc5cbf671f5bddfbd4283c2aee19216719a9c907572aaeb20886ae5c03dca8ac497c5b42ce87dd33eaa8bea7bae93dad1761be312df9d68a502daf27c5d7278452eb2dee520adbb22298e5f9fb32c150efadfa5a1b5931dc1f81ad10359c7a15852387a84e67320d187352a0438864e90ef91de0a3db393dd30d28a3f79f08c63caff92f082f788b38c27529084c80dbf1cd89735bf26515f74a923160415c1d05fb02d133c627e30000cdf2de11bda034b5dd70a8213dfb18a47a6724460c905d9f354d45bdc87b0aa8edac295a73ec442c8a671d0a3c6393a551a3a7ff72b6c006f0e1b298c2d9b53534a37e993c06acac00c52effd8d614e7b8856fe026f6b9bcd63d0ec9bf759c30337742508e95dabed1295284bbc908c60f7ad09aa1e6c74b45bdced316d52c247a960912d3f05adf8bf22c3b2dc2dbead6f29e716bfd651cdff25747418ee18c7a9e5752b4ccb98891ce1085c74a2aa09f9b1e270da11fbc05694c98f7f968c2a3eea1829981533472fba3f710c56191d9b2e40ddf7853a34681133a82bb0e8187158c350a94c47db0296af182cb1d2915f864a879f9ad5d23e85fbe8a2a6f23b4915bec809d99cec9d5ba17a5d1b9f0c4da2489659b89641dfd66a766ede7338ce0a51b84022fa2306f35dbf26fc46366c6a8232ae47432953eec67b16c232ba081fc448d491292847442b0e10bc90b8c4c63f8125afa534a3b3571e23b8f967003d5ea24f8df0a26838538fa2c3453a5d9fc9ae46588408d60f67881c2a8ee7bd4a68eb397d193a6fb61c6c647a2d6340db66df99aaa84df4e93ce0897fbae3472f2a4e18cb6a9766a5d0cade470fdc74645f3da70ed8ac06281f4ff31f4503a7d5ecf176deac6254efb5d49993b54c0120fceff7eadecc13b658fde172f7eee423f6fcda1ea642427b13af1cc7e55cf0f9841d11a78057237a2f11dbe0984d06008f98cdf322e037313486ef4968b448d641f17eae87f23f5cecb369d1efc7165601edd6c5e6e33bf95f7f9b8306fb119e7991c566ba476d44d60d14adc5051a0c92227dfcbcf456bbdbc2a7db86da533b75256e36e3feb71a364463dce2ae1d0a8b5f4a006abb915ff1789bbbb2f817947dd60288c8bf25c65483dfc60e6b243834cec63ab8dff3cde9c9008a50fe6491d8cb08c33331be3178f00ed311e4397ed4947810700985ee0bdc5cb02993431ad02e084eeafc8a41eab37a6cb2c063c4b4dce8eb58e04ea89eda3a950560bb17ab248a93b5c991dff1f5abf7baa8abf21dcc9f343a0d56e4ecea1fa1ac0cd470b2d717f95e40dcf4d7de28def24317f0558c2451dc37a58b3b35953ce540960e2d6f36e8ab087266e29579871f3ab2a6a445ffac06074483d4e323ce79a40ad7641370c866ca5b1f5b43265c0c3481fc541fb9ab82243ab6ff1b52bf31df37b49eec4c02552da0058a0fb7c380da8edbac41d9b817388f0a0405a877d39a268d252252fc41da4802b622b52642d4e029f3d4e73a8ce84b692acaaf5e277cdd4b3fdc0a1ff1785bfd28a3a8ec1bc97fd072ff6c99aade77baba92efdcf72e66d43542fdd32fb0e2dd29bb167dd36174b671ebef3c39c21be5fc84ef5a0957c9124f7eb281c12ae38cff9289413245c6c537bff88d013b3dd138c9373e26a00cecd4b5b18f708d69f1f24f88a0001d +MD = f47265e21924b70e51dcaa201a37bdc920a6a695d7325043fbebede870251880 + +Len = 99728 +Msg = 9e5a8944ea62ede2f3e4d13c1b0cc07880c9fcac7776859e36ba78ced0ad9ab6673c35509cce23d94b2828d5768d85537e2ac97299b2eb24804696326897c480344e8e93e9ac4250626db70645f3ddaf35a098734984cf6ebd38c0b3e80996916e593d15b74375cfa07e25d97084f2160df311b87033590556599d5a384b38707e25e9def0dce2df6d221b56df89ec0f6eeadb48f408b370b171d62e41a5d3a5ca7a3bf77abfb107312041847a49f323c04f9f2bbf4b023738481237e95f8fb9bc20db673f340bd054413e6b2a0e2dd86be8046ab74471e352a5fa7e19c09333bbde7036258318c13e4dbb13d51ec5b9d77eb30cc63a25fb6651350aba11089b2e7ea26c16f3ff62570c5f8564c2e14b6dd85319d3774907de156ce4b29b157a7fc61b12f9cde93b0845d3c8c042aa1893c08d9ac541038f21b74712eba3e356157f8030b55afdd5b7c2bee4cfe647a7b2fc099686e17b1c97ff6d9e4b749aba58717ccc34df64b7ce49c9e27bf6e08033556e15fd9fdb35a8b7878fbc55612bb063b5f05da74569b3a39cc9abb99f2c7c93651f12c24863bca53cee258d6033851ed3a318f9c974d098dea14778aa32f77e95bdad94ec2d3b9335c26d65c0593f6b7fee4d1c175f8bef3772367b291a0bdda7f6b65bef1b8d471a137e25a925461061d7e45959b24e725145620a456d1f7a42d3156079b51a8992ea3f15422003d52069c6f8b4f680e7d121b26d25b19d1b0f5ab3ebb0844b23454e987cb4d1dc8464a9d94152b28817620f0eebf371ec89b5957643bf0f86dbdc4771a426c13ae3d7a1067b5b6ed0caaa165eced432748cdd8c47b2ccde347bffddb2d3c17686bc1f5836f0f7b2bfc7513e8a5cf27e9deb2f460f7e007abec955194452ad7a26d5e4d64fe64c07bdd8008f7bde75dccf7052cbb4f0826a8a8e87020d69115584f6cf243aa685f432c35f12179b85d572e1ef2320507b3602913ca0f65f158d06e98749e078c802865115ce47dd48f0ee07ad5739e612678d9c1dfce77ee3ac1675b54d28a33db7224acbcbf4eae9b5abaa356de9f970849275d21dc90ca03a1b610139f9710e9e6c762812040c8eac12922e7016d3bc157be5020c825277bd7d7612143d28603ccd9dd5aa6188605e89864165aaba1fa3afb455cffc988ebfa37c91e6db115e1bae86799bf1a98652795016568cf7c1b596aa75701d260dc7f73b25b7bb742dc275fabdee9eb628104bb6544aa4d2c9d3988f07f6cf431d5ee07a7790c599f8b98cc149aa4ef670216581a44ada925f851d2ab66af938e60ac6032f78e1c7e58959a3c4d7ebb2840c3179ad5d1681ad548d4427d3834e8f56119cf478f7481cb94668d67e5c338c591565188b40e5d8c750a5053954ca40c72a0e6e97ef62c6d1b9d728a689beb1917b0e8cdc40070b67ce15f6a556f723e7772046ddb15e0b591cb962575a9e1a3bca3db259fe2f6cba705ca21d701c5d3d619c2452258412dad6d62c99b719f1df6ab8320963a5234a9c41b3ac8a8019515148afff341b04dc4ff62c7588795b05c347b3f555b0599fbb8ece578d6c7dacadee90ebc46d08e5efe10df2b50482363db4dd23bd99363f36099d285f28b1d5de546f1ebec0477f1e5e751926038ef940c6599d84a9e1b4737bc826e9fcde544d43f2a10b5de93144370df1c4bda7d73444cf6b90258386dcabf75913302cb26182c47b918c1583c9327c82757cf35781f7e693cb58433bd863d1cac60bc27681db8bb43a94f3fe15186ad422869d018fa7471f1c894a5dce69fe80e8d6c9281714f055edbfac2990b081f0b425cb5dc61b9a166affbf742886278362da68518af69a659253688da3c466dd119ea6f48f1d86819f03cb064d82f4dc1d5cc878424932ec10994eb0b41ac4a3233c554d5073b367a2dd969da5250c9200a71025a7d55ff351d9871c2d7c414bd04600f072e6cad05bd547c0983718adf20269e02161ca803c5b3a5974b085db0203d1665e3e73c5b23307f88e7fbf36ddb4fb3218b71a9eb96690edf37e395ea0bcee367b43554c8f3efdcbefc6aa34a806eda2f49df852b043b16210b005d992ba7fe830bd1970da3f52c323d480af3b4068b91ddc0ca6093bc440350c9056c042ad05e77366367b7e2d689271eab07eaa93fdfb3cfda1ac94f20dc95c83dc129f9f14072ee5a85a43b741a565903d598b97f8f684744b829662533466857470177f9df8b63ecd60d617d6c2771961b42d9b32777e18ad718b3d99ddf33f25c2f4722821d318ad737e76af53712e2177d6c832e4f092ce62b9aa682eca59f7f07ca23eec4d1b517c85fc55be1976878acf4680a7a389b73e69d2478eb57af2e2f83766c0ebf0c06431d04f6d389a9ad5603ca4265fa66eebe4dcbe657a4a1f80af592905763f0211cb1b25c695416240d0d226cbeb91fd536ff1551ce27385b3eb2e0e24b7af206d9a046033fa14e8b469328ffd11f16b5c55399519b59a2c61f2e19d8373e9215fe8b4871a2dba331771816723976ec1f0dcdb05c5bb6a1d730e985e8b75950dcefb5322e5f7dc4b5331ea34a746b106f64e002e88bb885fd2847bdaa4845aeda41d08b9fb2022394ef19380f0e6624256f1cf96cb7f9ffa649fb4983767e0c8c893fbd5c4703304f2f9a4d2663f297ef80e71c7f4cd55f713a66820aae7d0a622a855fda8afb8b4259046b37118acc1c4ec0d496d6e525dc6e0c2fb67ccd28f9aa33eba0fa45852d1ffa0aa793b9613a2d5cca29c2a3f346596e7b0d4de8d8c18cbdd936118bce5dd8fdc3fe66e8d7c7a0fd65cebc8c485d71102c75be4aaa4846a5b1006d38c7531851ffa207a390534e352fec1128857069639c963a8d0e0c6c6dfb9679d6f0bb52c94648f2744b5b899681185ce34b2d970b43d53f0a846c6279217ea3e0dad51cb60049c3c5395ee79421ca1c56f9e38e59cab9585dae16dd79cb1f87d0f66eda9ae62ad8311abbecb05a77cbfe2240b3f199b902f0db6a11d240ffa231d3b710fa4072cc2230111d6dc3b7e84354b3ac45296acb5e9cf4b4052ba56f8de36c5456a7a7fc2349fcde3ed5f0fdb0f1caebd702351e1183354894f3976c4fb5ed1932943104bea8bdc3a609b978d189d4d719acbe7793feaa2404314c04f1bbb7e4109eb4525edcf24235e777e63f9d8002af915d64609fd1fad56d49e61e756b29631f98817e6738fe60f7c2c225ad5b02eb58987101b73b117ae0077c1073656dbcaf540ea7d7d04ca9a310a95e29b43c7f5af609f205442c87620b23822635359fb68d46659f76a18271e7e833a32a33ae110cababea8b906d4bdb98ee0e68f55edd9ae5323e8ab19e0ccf1b30aa2b6d2a3332e2b9d78fe1af05ef38bebc6f41ac7d035798259ae12ebc2cceef9f366d660a0f2b866cbf94cf38bc8f6e80b69efb2d5d1a01f515b4e708875fcaf2e998d43e0802ac1aa92e305cca09982bed51bd671ea8fa1d89a1498a756a5d55b3940717a3e48551cb1294daae33a5fe622e75a2be80fb1f653ab8aa6d5b113802d3815f696dccb293e64f4acf9a2278b379b678c34e8f7b46e5c6f0d5ce710a75dba55ddefaccad921dd215b4b9983b5fc7f241b34e21a19d36f6f65521075d7b11159b6b082fb3542dcfd3d3fe71b6d59daba6051c4c32e6b2cb1351ff4e91911844a094324064489a8b0dc3e5396ba36f650e3f35899fa1cda5e052a5b1574655a505f0f5a920fdf8b61c0b1a69ca57b190f2d83644585cfc39d5edd0da0f095dc923e7cee479c2acb396ffea8d735108c1fc567b16ed76d2d97c69fd1339589523931f2a6cff554b15f738f21ec72dd97a7330907bdf9dc6174c7d971766c2a046cbdd94ccf224385fb54cad98664cb81cf00d02edaf206a75be9f1b3107c5e39546c99a6f229e18f379819984b14c094c1b323ed6ccad14674b35060aacd0e3a19c59a7ddd14141639c9e325e389a516a2d46c0d1b892788e8ad5e40eb682350e25045983bebc664296e8f49f7cb63509deb12579138efb3df5f831a7c5483c1d79600c1b2b4debf301087cc2fe3e08ad7817d9073df1110805228b7049918d5221e34beea7944707636327632d8060c7b1d14836c8474e7f40db3e02c40c8d6e8704a588d41e0bf2268f80ea9b2bc1daf4841f72231028063188e5b9c507d0a5415a85740159af35c2f415e3b7ae9069b896cb33deda222f4fc1ff0fbd11ebb8b94b883adfc5a564e11752c913777106968fb8066c13c17cf40d069f2cc932fb875e1a47cfe082e1d98fc4152f14d803e6d572645b3b9a51d6c088d2847c4ae01418a8155238cc4f44c3f6527b053a14521e86d81ceff1506092e23464d99828e7f1de3de74ce60f9b4a45fb87d71baa30b161dc217f7afb19eacf4f3e3faf288b70192c2f8b64a545894f9ac5f8f1283b44afdb29889ba47b3e9c8d813cf4517729e56a7b72dc92ec078f9ac5f95f20ba2ead6f7589e80efd04d669ce400c462365cf736ba1926af75b6285f846ba2635f6070395f1c47d27e4098e85f75b7928ea33c160864aafefeb84e6ed6fa6ab473129321b6ed5817442a24648a1666ceffdbeeefa9f49a44e3e433805d289226646a075664f7fbe7ab73d3b76fcc183f136cd56ba6b341a8ada49e3e22de61e0bcce93817124776a3a836d8a167d160d51beb9300687e653e35f594f2c05200b02a8014ae65a16c779c3ba848512a95f413962e6d15ad06c0d7c2a5d838318cebf5f1758ca831e27f099824ec674175d6c4698361013481cb365da0d30428e527a5b9e542586d8b1286e8c8fe189a831594b22c8ca9a968b5e8131093a28cdbebb045de5ff4b8c8ea8aba1f0dc3ba60090b2c94307d702e09538f6f9a91f1c3b0bc21eb461ba82e5f8b68919c17157f59ae1554fcfb2d444e1f2f384860ec2f1f0fda76952bb01dfa1f90cb198130535fe428e952b1353dec917ee53d8dc0807f41dc1abdb3652a42adaf1616708f6eb443b3bbd22e2c8d7d50fb00ea77336a69f8a34220313be5b1bc302d0383a723df536266fbd077b568d43015cfbba94f578acc877d23a8b2dfd1b05a61290c353989a1552036ab4847a19a8e5dd99691d07ec455250930141564ac38dfef23056b5cfd10efcf3bb8823fa6f5254f8ff45d4b0725a86076ac0b1b8042b0248006ed53d224cb08bd78b104f1c4b69bf9c96686118387b7c0cd193cd9028297a7cc27f4ccfb4281852b5ca7e787723d689384a68ff9437db319d86f12e2d7871ec7b3b64a2ed6b83722dd8f14b7f8a260e52022bef14c30d1f4b118ca8e2f91398c091ed61a081b5801cc20e5d0aa695720c1914b06326f91e04bd06c4eeb349c7ba0a4fd5747395c3a9113f75c1800cff8f168a0927688678f010c74bfaaefcc2912df2c612480a85fd4ceb5d4c1f74fb0381f4c409929e7336943704adf312d26c823efc2108fe0c3ffb79db528bb3af90e3bca7b0ab2859ffd1beb9b089753d73929c3e4abb58a298a753b87bcdb3635cc2497bc5bb0b70724ec530aa780b4bd0e47255356a008d30d7e0bb71ec5a5f92a90307efcb3101b893b23244c9be46a801290a891ddd152e1388aed9f092ea581d5215d7e18153f828ef8726837474266f2a23eedad984bbe3b3575ee2424dd6a89e6b2408e3b05b96e2f7f7ae171f6fb8dc680eabdb20fed0c980a6c952d136d14fd27f453f5e0964f54a5f538e8dae63a6a38e97cc33206132ef59ada9bb9d20cd1290a27da6291a8f470878c10609f9f29a19a69203481f576d20963156351e81f3fe2686d0e34017b8972898d4a801271655e116d99f909ec1a38dd1e92652d13d72d94024615ff763b768fb3eb403acdfea4f40fc4d3e70b5899971bb984526b793c494eac8fe96100e42d28b5588ebbd81f9f9b679b1360f7ac3f915b27de92b0aee6a6943a65c8944bd0504b2174b78c2e5274d4b6f56982012523f9c84805f7e60abeaf7deb19502e17cf1f43834d7541db30aec023a18208e62817fe2551b98203db50f2efdfbf0b7209a42730ea4e0a9863584f24857253f1223831dce2900380a12b11ea884b546d746c55142a50d8f87163ac5ea1cd52e4b6ccfbf55505daff94906371af8f9978a3ea55936a384d99df437058730d862f3a68c505157578ef1a13500bc1f66b022cb09145365ec8fb219a339865cd7e3f317e1562a0797dcdc636602f4c0a29b8533190801b5eeb7adcba5ea51667aba3407f75b4728c5a1a1d8c3c32ba555609dbeffbfa959325b7553659f4f1668ee9dc0f5e6128289e6284571cdca94280550b6e0c1b11a5f82f4f90ce0e8364a8715890480f2dc89b259f59ba83756c2948861e79483c01d351104c236848cc78e86a94caf4fff700d1c2f67dadcb3cd142c0939c28513167bb4beae278be2880ad769f4fe92b4e4ff593afded2072ee8e24f401d321dbef5cc56df93d65fe3403f01125f221c18d91f85f86696a5dcf09586a654dbedf53e02d5aca007ba87481b9e9061565ee15cae1e62ad4243a188db0b58dbac3e8e810d2cd4af733aaf08d1a38c0eec60521b3fc1710b8b5d27123141ca2a19abe56f39d0da1aaf6cb4f2efb487a05adcc5c523239619c85ed80d16ce6cc8baa2946917664f6a12dd23a6d445f5de3800d6bb169964409fc53f0a1a05c32ff5bf160f3461871653e885850ddc6910fa88ef9d88a74e28682cb679b98c6fd8515dd4b20f3723c7d93b552e2aec53d118e18accd7e1c639b7f1e8dc63c6c54a540b6b02067ba7c719221cf289fa3897299722c9a2bd6eed05b140c2a759560e8444436fc88385ccaa593782c99aa9eb9306622477beaabae7e7589cf298a49d58a4f86bb4034020f33d4f5f58220a46ebdba36da559fc3bc5009afbe419436f5789f476576f596c8a4aded8b444ec21aa7370f5da03e5e823a9823fea6f94fce77fb220312c4417d5fe308f7c57c214456a556d7460fa389a2e990973e01beeaf02dbf9cfbe92ab7ce41ef40eff2e97432ccb2512e5abb58f1c59c92f3f6a8d149fbc5381bac7bfd588e4a6ea8f74132a373ccd24067ce7890f4eff6ac1e3809ec2edddf595459d86591c08adad4510711644b62647d036fe53e32cb51c3931c3f8eae9a9d2beecf5d13fa9a6cd2427ae465d80982e682c75a6b0d19c92be492ace2e170cf77626aa9dca0a946373c14843f1bd082e87407564227e9fe9e51f199f41d6ad881dd31afb459bc504b665b59babbbe4ccc01b8418c2942d76602c3708a0b8f9e9186add863cddd7258e9d9cc9d61dcc9da50618211ba2d3cca208f986d52e70aef85658cb0a51394a4ed1643b2b431df598a8a839983b11511d3de79659b7a04e203e1346589679e78999927bf5dc57793d6bcabec2cd64a8442377b398e5175b328aa364820df781c15eae18d03a07ace5d7d62d15ca4c46b962206b3d27343ab1b47fc2213860ad88a91d7e44fcbce5346581012bb24690ef627829910e858100540ecba09613df42016738be94d5d6abad21d75f25d22b48bcf57b4efb99a2a0d1e70daab7af7b7fe021c4c782e0d5ae175f2c3a957d8a67da1edcc18edf3435c68ef48a1d8216b4ddd39eda476c86de2c8f5c3871b712df326ada9328c4aa119a6d1cd9283a456342d3437172e75e9e6538f3f35b0d78f15e4fd12e69f868d6d617d31278466c0dc7c74f2765efc17149f28fd5b1ef0140c6546d0dc2c914f801f5d3c07e251f36c5161e66c0c453f953329c7a06ea6060031f1acbb3e522f796bd8b6daa54c360d3563da9f4237a99097f863aca7dfab18ce646b2cdab17580ca56664ad63ed0e7afe298b707bc9c2e54ff9928d1854d7dc609d8d60a9668bfc63f15fd7b110a214746e65d64bb6297f1a533bcf57f3257a147ba62d5e9515be6fc8b9b9fac2ce485f78d395f1d41f2f651f70f1ab5a2cde585d8774492787fb2f390cd47f77e57f25e55f203c88267ec6dafca480fe7071c2dfbbe5d7a2551b38dec3b7dda47a315e1053055a56c205a6021948775482ecda6ebde2a87a0f97032668c483dd1ef76e9679d5f9c4942c8921616e0cf0c6a81587080b3a230a0724bc868b10862649edf41df28965ff8be6b55f85a057ce2bfab524cffb41f6e3f3ed879be23432a14295c9eb879f868c553a8e1feffe0bf0f0758e916a3b38a61755f647976bc6860318083182f5aba64b2d579d3a68028f9d44c000059351d605624d4eaea14460b5d74354f9ecd1724f0a569e1e0a346067af438c5bcec4ec24bf16f186595ed9c17025d65b09ba78c75e05930969241bd61183a6eb6224611bb8cdd0bd085859bc6f0a3634b0a9124a94ef0c9b19640a7f182ae032e1d2cd40ebec7cb142d3591d107ae505964fe74f5b6d7b317f56b4a93f93a8a0b272994ab4fd56117d52605a20f2734c1ef1505bfe2b6f6b2f7eb30ad44890d378665d8fc07aed4c3c5807fa0d0b5176bf4ff5e7098349b68e6e8e1a92c41939982072868aefb2cff446a87331201023fbae30771a1f9a8230889e4ed790b251965380c570b6371b29b0ca6c39cb3fc258bea8929c5ae28caa7f7c0e3f38eca9f751f0d31e78facc6138f63b837720e05ad3b6bffcbfb2045095a00f161738a13fce5b25f0a26e522f21b477babe63fc76900355d7d879a7c76d929818d616d5d40b184473cd122ae80d7d972c0b89753075e70aaa1fb9d57389cc5fa3d017c668aac0a5245386d5207eca1063d901e91cf7fa34d00fe32be96cc5bc43afbbe1421fdcce8ec02cdf6cd82279fec15dd6a098b56b062396099d79174474cf63c504fce5272fad84b821bbff4a693f0dbc4fca9113a8f532fd0441297ea3a9afc035a4425563861edde39ce8f81fbc92089f1025d534ef5a74b25784c18ce9008138b89ccfe6b46bdf36fd5809aec46b59f30bec16368c7d1f2c2ea1c36ce80686a2ac5cfd05e2ec3a705fd50582e12a1f00104c6d2a670b4ae62918dad031122ee7f1fb736d8c206e3426d862288d3ec62acfcf209ce9958654e9529e535ec4089d1c00a97a0aa8e90704eaa62c3329fdf78d0d06ea8e9c600cf1d78462cb9c9226ad0535b7f8d6394d5c7447fa7d6c14eafa5e56afe0905682b510139af1fc6a0907617e93d138ed9b901dde1fc685a9697a6bb6696a01d83aa5a4c2488c63eed8cdae0aba2e516456623fcf08a8f73a178f8d9c83957173b9660e1707d5739f0a625350875ab03c223562a1419f412569cc6c7f9afd6fa77358a4986577ac091257f9f68800c5d3737c2eeb5703e429d4a360e62c0c4ce1fd1010bccddd6d9b8530fa53389b12d8beb8ed03b5816085ec970356a34ca9c1ab0edafacd9148f4d76fecfd259427ba887e3580e99246e81629dc478d28f6b521a75bd8d11dbe738d773a5abb8664d7553e80f96fb0f7bef5de543f663bc43ae59c1bed74fd4eb61be97b0276ec5adda96c67c3b4680378e026f3b4baff82c16b4fa3af159a7a2b1729277ae4208a2bf9aa42866411eab47986434df7eec2f727248b745f7fb140e3d8b82a9fdd7340ca5ab997db592de0369ebb41a983f53aadcd2bf3af3784a6165aa5a7e67d96ca9000259ea6a83d8a8bb2d4564c59aa1a73ac1d93814c74b933319869748b7517ff3d3f013289aa21fd7526e25cca51f4fd43c8ea721901f8aeffd8e5a6819ec74c543e462b77f43510581b8c57607d78bf16c64f0e37acf30e181fb318fa54371c07cbf3dded9c3258de2a9ac8b69d144da79e579222e626c51ca54838406615f2aa6080e66502b82b69ecb42d3721460d88a99aba554e025860321b810e24b244ce8483c188d8252c9dda6f015cba8c931c707ee36935245c952eb38fbe20baa6e6b062fba38d07c0ec6c01c1b1b95652d59b7ab9b93bfb362df386a0dada7d7d857ca4f14f91ee8cd82a330ab0be31e166831489dfd2f5799d393b80dec2a95d1d31d04f076737e4e38d7928e439bda321bfe2f0479aa19b5568189c54699cba20785b6145ad726d811e2ac8c6ac583cb9ba5c698ae39e1008f8c46fb64fe61941c8ccd494b52c8b5354ee46c2867002710ae772145e397c0a73b5578ed603eed3abab157f1ed4c2bcba3a4f8278b398ea1a2a966e5b1233ec6161f048ac84cf58896ca06f6af9a83fc6753f60c38164a7607c33037a96dc212a60c66e33d72f62fa8811effa19a05ef24582f82777fa2b8682f47e3d65e94b67285689fc7983657783c66b7c935f8cd611d6b2f4f5cdd8f4a5473903ddcfbd803f0d0666ea6fe268f64a7c33151a6bda70971bbc8954422379a7ce6e8d041a1dfb667e23b8596c77462a9cee1d755e87d840bcfea121f9ab669298fde23ac389040f5b9351b4660af9c347edfb04e756bf6ff13bebcb61e5029433027bb85c59ef542936551561ac97c107b35c2d98df9c7162e4b7950d78b429274cc8213728f3c1519d1100d1c4969046eebf73d58b06018c9993236edf21dde00d45fa065ed7f38f2833eb58fb7cbdaff0736c4fd1727cd8bb1d0b1870a20ef7f473972c63f2571c783c4949a9c0958d59366b4a5b785fd1d9a3907cd5db48d972dfad2be0e968940d78bf2667e8d47999671567716e36f265c5780e872427ff08f890875e1394804897a191ae8be6ef2193ef29cbea7ec4f00106600d1308e3374ce5c12407875bca17850df5f04978923b5d03b373b3c408d4eff3c03e78208e5b116bdb3bada0f256fdedd6dc78805bcbe377d070527a00bf895c58fd02316e91a7da0c3683da61f460c3b996f0a10ec41718ab86f751783f66ec3fd52380688f1dae0f7e8672896e522226b64e54fbc26c489d2dfed4ffc30d25dd6d48b7fca1e75a8d8a3203e933468b96c0fe16c335579a2dbbf58ed7e8d0bbba0c0e22ab889961eed012f901d1a252923d6c60f5ab7d7ff5d767e9c11f86006e67d06af591b856abe6b5ec53c82a39919225bdf373228c5df6c2702be5618662d73bfb5b6ba89b5d3477386f8512832d45c6985d5afb21fea091bc78c907c02ff0ad4e4d54fec27b5fe377a5a70fd1bdeeab8a83917bf3305b52194848ed403e3aa0fe6c0c3f4e7ebf9724a69c76a7dbf3610f16d509529b8d80311ac38689062bb36607ffcea1efd9fec9d2e3eb680fda6390878447c2a8bda87e50e767fd203a512fd18e416f374576c1cafbe2b4b22a4fa9462d9be5e072376b8b23162f14ed06b629562bf8fd68bbc6ff62d0f07b6971d3e33f9a2ecb31b97349e4f5a14cba5093afd5d2e19aea2a23d0b75abdb3fe768adf48b6ffc172bb4ffdcbaad63038ab32b59bfacba8104e72ef47c47f047fba489ad776eb8bcb993c17458a3077de833ddb06f7f9ad91853ebbb2c2b6e553d997c64a5e746292ffd236c138628c1284ffa0a55efe03d48ad1c686b9e7cf2140e2c23fd21cee6f3baccced29ced58b0d027705946b536fcbf690123e942a4e8cc41f16666797c6f9266a27d2f7fc9ea7d0ee863ca404b9a4f78903b55e9f6229c64d7cbfc6e72094d96eefb85069c3c20577d5bc5aa048b26f41c9b28996d28443ddb112cd6502bb206bc36e6a95a107faa34297d1ae9370c83ae2baa7993638c7308213ed99f3c8b5e13159c908acd64ad17b53bb98306c8cd4dd325b2ef3b3eaf63e37a9ee6a49e45fc80eee4b4db950b2de746ae5961247b017bdf6b09192098f63f284eadcab4647d5f23cd60a2da6a7ea8e822f3aee635d20b21cd6a63fcd7c81e8f107d189463a19a8472178afd7313de673dda56d7a2c96b330099839813e166f80ddcf508e96d1a59fc60fbc4cdf3730c2695c2bf6bed835d2b1edfbcf54a01ab6d55c9d69eebc5ea92c45df920264d1f06ac596638473be77782e132240ad5f0576dfdc72c22847e5dca186216b556e804a88293b0dd7c180b4cefc14929cc0ff3aef7a3381a405e85fa94c855a774ae4910a7107bb92c3a100473300cb0cd4f6a9f20326ddcdfd331dc39f2850491bbfd6c2fa342e33593ad33d44814a6bffae4c8e03b706f4b2389f970aa4fd5945546458215ad617d6c0b607ad10a138c5688b2a088ecdb6a96b6d89fb65b2165c54f21082d633dee0c5113cd9395ff1bac7fe4c6df87292676e00130df50f0ec533e8b29b50d7f6fbda8d435555e735443f1e6bc09e96065092efd89edd64a11463c084d73522de7c5382c1ae10d761f650541e8cebb881199c95314a89738bce87022dc31db51406d28a2e4fd49116458e37cb4f5a5aa116cd98b37d838c1d57f03603eb54ff261fda1bffb72ba4b0b65b41f87484ecc4dca852e5c4464ee44541c4adbc7571932bdca09c707092cfcd4a0b3c88d5ff9adfdf5c3eab5c1c6f1afe4691b319bcd9bf4cc0ab186debc20edcebfe18d7f36194c52d249f3f751c4d7834467bac21684ecce4a1fb5e0045df867cb3910578d79fec4e3e0c6af97a6162064252975fcd5ebf9507a5eb80b9c3c925f38de8f05b55c727f19f691a17db2e34fbf475b88763a74a42b470ed9c602780446becea6b5ae852d5b4a447633f4f58f9bdc1dc14f2168ce98398977c1924041cb79bc79623c24760f8b711eae247eac23b062b049e7fd562bfbd1ec7734139f2fd70285a24d78e19b81bfa2d88aa52cbd8ad35b4ad65ac54b578f40ce3019a5daa048d35e2aa9f668f4d709976e9399d33317cc3b34a8a35f136b7cb0cd79db359c35697f1cde3ddeac605bd517707acc74d70b054a0e76d1f80ca704545cc9a6937251eb693f3f657003a079ce63581013bb1e8e60b5c808ce1bc9b20de9f8964ca7938c59f583660a68e16bdb94ba07d86a0fc0bec5206c5d3feba14049ef6e907b35483628914740362693862c28198d8de682ab6507656c2113bb35a336942796410946fff272db1575d917532aaef8cba9bb71bd045bc5684ce734205672d9a1beb6d3a32d4da3afd825d530492ee3cd625556f69fb62ebd9b0d84e8d66e6e44b537233cca425fa9565f09ec0c01143b1837a33860de70c80a166e223ef2ad262d747ef152b8d9aef76ffbaefc8f53bcd4499faad03c5330a0e83af717655ff02e542eea4c17d764c43df39f9f406af89d73947576369e9e656c308ee72f4c49c1c27a5040c62273c4b139e7807d1f987b9dc8c0da351bb9628a971039b83cdaeca3a94bb62f828400b414ad24ac3c4476af84b485a2902a9e2bb9a49267f74bb9e0040237b9be3f7e2cce19153787a397911079fee3c6982135dc737ca644433061d39e4acca04b4803ad55da84c95ee52cb436cd6285acf49249a47edded6a580e5e4678d0ee51661ffa86fbfdc91c6866b8147b85940e1e2848602172b86939cfec23482d71f8de6afcd7000851862928633a8fb6bd65a7e120cfebce6ee8db8dc65d424cf1e9bacafd6e720f27442f5bffd0915cc65998a31b186659d78e472e351bee9336cb02294373d97914fd83e5d2000ade7894f8587f641a7bba04849c7f85d56b0747bc6e170fbbaee0592bb025f081a69bbbcfe795da8e9de0f29abdecc47e3d2d05f281c169a216530231a23fc87e1bf7792638a5a34a2512fe927bc600716f71acab4a89ab1519359d9ca56ab189a553730433f7e6d67d16d373bd5360376b99e4f0b0b7fa9d1f4dd575a0ecd32bac795471c0d2ccbb0bb417456add0d57976d57c89e9281c190644fc37a0e55eb982fc275c7807d8039b673106caa2f595db7ab3bf9636509d442b68e1d185f52d23e6519304720ad6ee28eddaa02edc6243d8851aa72d1fd53afb0df70521be7c06ee764e370ddca110211b30c2f6f2553c897139907eb267573e5bd5b03af32cb86ed5fc842dd608cdca39b7a78defe54207f88ae6adb0ba355ff30c67543bb5b502210c80748f64639ed9cdc2462da8e0de9b8d2e2ca34431fa34099ee000bd9922b81c9054615a7e096be1a7c223f69577dacebb9e02abf977bf6bcb70da9ab15b3bab486fd44179b47091dc847b84dc5e26be23544747d862f591818931d3ba160c172d0980bfe30a886cb50f8caa221c1fda09f1f9ae7b367719358baf0f0fedaa0ea2b3df2c468603c0d5b5effd031c16b0c3f982563e8ca4716c1a9a931f3ca5f03e11582d10b1834cc32a0de3fbe8bbc0d5cd89c5beb00e28a9989d06849d804a73947428ee17774ee1ee8ef588fc6f88d3f06873685b24bd52981edfcc8ab99bd7afbbb61b126065c655bbb816e1b2873314b6f5c7e8888e1b9ba895538ec252ced5b73b345ccf1ff4f23c923213253a778cfda359e29a394915c2bdb6142b1deda8cf4ed63123ebe2668a1a771b281105cb95329ad3ea3d8f88e5cf60b5644ba89b9c675d4a0f4803051cc732644ba9827315fa0726e91943878a30efdd0e6a841086fb5601d1b2fb707d1f1088f07261f618802b66274b09743888b00579f904ba17913ce32bcb201b23888de3c6fa38e6f55b741c154135e1793d5dc93785aefad6cf9e886def156788a9f72f2fbf5ba834e27db343aa7d41b4d54592d78ef7554cece74c289d400844ea08a5ab205ecc6fcba4c632c5343783d703ecda83525bd29fa3b8dc54346fc0cf2ef1b9cbb6b5fe6d95bf535fff155ec92551a0e15471104e505909b266f094dfd69dec1ff817795ead2935a9327dbe02064bdb4772277e8f79a721265c4d29729c04b2aba74368f5777e4a5f82d32a384345da244ff185c98c1dc33e88d8075debb09ded28dc35e8613911d144b81bd248da3df62261ce83044760597123a6c8423c1e531144789e16d41cad0c9f0b46a373773bbdfaa1427e9e7905b9a290683c01a48bd51e999ce4f9db515eea912bdf9c0663672ea69e579d8dc1a6e74ca435abd0e608bd215b77f4ce5c904d15e849ce7c0ba26056ed2bbf0f2bed745402db9513f010c298503c6f762d551932129e9538a314523ac5679d8d92d1bc1f1a7a47fe4881a17721aec4635221e15e213a5accc82156ba9da793799518212641ae5ef03dcfec46364b9e06597b27f29aa9b9c8c95df06efc484b63b10566021ef4248a7e70057e049f56efa1b57fa7f5692c9d452ea1c067e62fdc554ddd2b18c8433d59067f971316797fd9853ae6a7f51dbaba180d4746edbb3420461919b5b735797bf7dd19f84d80475f5efc2748da17b1a6ae756c3feb780b70828c467c2d65df45c8808f1aa105d6a1a735e25e84a51279568cb7a95bd0e2e487a949e2b76ecf550d1c5f00bd749e5ef27ac04f81404dd0a4b5b229ab602aeaba129c7fd1cada081a031220ff570ec5b52d19926c73d41b1d82d42776b07401be4aa6aa08e47ffd83d74111f317b8a493ef86cd82aa35d72576a6293a1c3eb808a40107c95631a3defb545a15412c49e3147067706df38360f390b5623deb7c0dc1240f9f8a9f799ff1c45ff26dca44374e6ee6c2398dae349c3c328b801acc42249827f81c0a0d2b5d2999f6f8231204ffeac1e49774c634d2f157127d4d374a40c5e76f6511dd259ffc9ebf7ab731d09b7c9f44023959c63a6869939fe33b8a9845d462003747f33ca5d4986007323ec38cc58cf45bd78d350a008b628d4797bd80657c77fafc38b5cde23e32938183eaa3db1c085cddee454ea2766f9bf9d6031e111b36dd685a8ddd4e0d7cdcae64834a566d98accb5dfdbec5c101afb0ea1b777ddab73efadd374c5e82a94327352ff8ae1e3fdc2e70c0c2f107e3290b285914f21783c042254493ba3a42877a9a4337789a585b75bb3103aac76ea877356e8f246e26e1cce7385bd790c2ea16e85f7f1c6e9cbb4f91c0e9596c1eae7385ae3e6b5b1b240987850d4d22c51b9ac3f7382007577c0a98f2fc93827d9b8e8dbabb5d5adaf7768aad10616ca37c64a18d0b19f1230e453539b5df96f5f036d1f67e60d9e0ec9265231deadaf88d0305936060b889e27dfb179d9406325cfae6f4002c74b763ebab897e1ffa3ede04649cc0aad9f6a9135f1f1c677c9d32493125e906a7d90df0d242c99746e0dfc7432bb44eb1f3c2a3e5b2dab056a110a0452e8185efc04b305de188d75d7922fa25a2a3d2ecfbbfbe0365210520e858ae97507230a9079c28b2d824568a7217eb80a427bdf78900b04cc8b7dc67cdaab2ac4e238d8019715885b924ab7a665f39e8a2b8864e263629363fe7bc97eb676b087a2df2f1607b3e2ae7223c89c03953c220cec27d5db097344d391c3dac2f161066ea0779871a4836f47580551a66c7a1a0d2d8e19a0078eb733481c59a52626886f0419507cf151e53c72d58df48141b958d503755b64ca0346273cc3071de857cc927b03d1a1365a76f89f1795db7749126cedb3b429117233b68be092dd8db9aed3067c18bc19142072cdb8328206106678b499525d4a4a237d7278ec6efef73d4d2282f84be15c6068c638737fd4577a83bff0de085dd43d055752bdd82458a08a38dc1955787a5e63f25fffd9cb657614787fff323158aad5a337ae23e6260012ae5324e2c5b644ebb9f47f98d28483b446105ee4b01e9175bfef66582ba7846beeafc1fbb058378683c19ac5d0fac9e99169a226c16d1b6e11428e7fdd25551f5eb897a621a761beb88cf967af106f3ec25374fe4c8f6f4703f8ce9ee3e69ab668354fed00ecea1ac01e4386560e9d383f967c763acab788fcd8cdbf25337cb673f090d83570fa22033f212aad3c7d6171fa6195716718ba64ab34e98b5323a9e6af036ea978b75feab63b5c9ce13440c047cc63daadbc64a239aa25fd90b6162b3b50b7424f4c58db4d38230b47ed5d954464e95de6cb0e204ad87a63305e86a95c1ebbe93cdf953fcac188e2b4ce4156bad22ee3586c4045a666f0a57c4280c8d915838786999f7ff67d920971ff736d72bd3a524dc8837914fb8fabbc8b8cf07cde160276a1fd0199154968c6a97b4031ce16940b075e245e3f605d386032890b217c445420372f7b30b5e8faf4e239c2adc98fda505aae4adc6aa437eafbfb4f85be33683dd6706377df6f57072fbeec015b2d04cbfd80a177b56603506eaf10b3e3b9f921612b1b91cee6230bea397672d554d0a2d2002abb4a8de2bb140b1653f3bd50f360ca69288a36a7279c1129aa3eee85fa5e97af4d30ff1d537378280cf726b6dc5cb416e11c452b84ccaecd4e9ee26cfe2badf6d86fa6fb3f155f1086f5de7104dc51ea668bfdf74902782a09fe18cdd3c0abc9021068c6a88226946af8ccc9926809ac5fdf45529fc6d707806578f0a4a5f7ee731a2fc4b540377d6005d808ae88442673210486aea1332d5edbea1c9763fb2dd495e23f8fd9f8920f26ea7482c56a1e4b5824d99d1af4654968569ad4811e50cd8a697d5dd5d39d2062ea5733a6e35d8f8c8c9495ba8275e915a4b38487c71d0500acc748ba2f643ac2c0f7ecb417abe6c524febd074525e8e9bcaccffd605e25ff9264781273b1064c559dd3756fcff80cd4613e8ba63febed86d0dc6c50d9d48f059e1464094a2c0a8f90107351936e6884033fce0b899d27eb66d45cff57bbb9edbb453958f75304571acc3626bdf0e21c2ee957ddcda3a1d1b5de53d59f828430043218c882234196812f4457162581842864ae85d1a863220623db3a7bd0f9b7c10489c1b146c9320e60274a66b64da539d75b695e5273c4a1cb7b96b14d1e6a3ae214ab4e +MD = f19d73aeb79613c01706010285dc1f402c479ad9e703370bf252f4d2626c74c2 + +Len = 100824 +Msg = 81c8b906741c7eb8983ac05cae355a337fff806b13d29ba024cf54a2d2e6ef7999f5dba67f3487ac92d077cf91d6961cea53cea9e4bad61e1e854b74381f03fdd0029ea5b01c5d7745783863541a2a3ee82bd00a8f563278c571e1abb160423f0f36298a6e9ea9219b7a2b9e5dc9bea162ceae157a6f58b503db3ccea46f54463fdba5dd208013b37b1d790b15abf94e418591530eccefddbf0a87657b15e21a46373927308b4234ccaa4a2fe487844c6b98a14ab337a0f9e147e8f99d1a94c40e920eee0587dfac7869c594332706a3ca4f0584d276130f50da87117246114b7d364bbd073c912466a213c16851285c45f1e689d152ef2af60b8d35626102b77d6a19199e7201a27e9d5b3eedce927ec3c86bdf1a93dd4fba2222edd5320e11f575a08c32f0d731a8a1c6942866eb112e1abd101301848884666dc23382de60cca0079d2b7fbad6ccf87c4a83e0dc1e6d3003a426638ddc3c20973be41919acec3377d5f1e7529bd2e8a4e864060cab68526621ba839f54cb98c7e150bf68fd3c7617baecf04887a2ba67f6359e24c307c80e11362763f61716263ae03c735ca4b010d6856144a225b6ecfd5d71cb6b32d922fb041880cc09e2dcd0fa57e1d00c2b89b12204edf541235c854447aaadd1ceca688b1e9fde8943102b08d95b625c2dabd12d9fec87df4bde1452e86890ccef30df330068328083ebd1708b88197cff9dc00cfbe861e8749b34ef1bae1c0b8479e8648882d2d4e8944c9c3211fd55e9880629e08a8942e7ba6c83a9245a76d5d00b867c96c66fbb3324f2999d16cd329429ea167a09d7ec6444765b7151f62a5bd101a54b143743f2dfdc87d56dcd24e8b3b9645fe98dcac14530f73e0a71ca42c13ecb4ac616caf707c0c360093e05ad2cfd93e22f4ecbf8f61a45328bd0feae64a3b63be4f3966a230816e8f2061e0a1a1d6baae5013532e09a0ff6defc0ec740992dc474b5f074bc1b4812310fb7280783b460128e519689191b310bdc42b4df89fa908046203d59612188cd3f182f7a9636abbfdc674d7b00328c1857e19ec9d9e3450f8d6eec824269f2ce808846fcbeb934f3d5bf7e3eb51caf0f5735ac84f3b18c2a7222a9c026e7f73db95195146304a2b660a05258a2a141f7c384079a3d2c0cd8dd839e9975644021d2b9454aede09e106554f1532d89ebd98217d693211b6e21b6daf09797a87582b2097e26c515d00acd2182b7c09b54bc7e3642f50547590de56fca42f57b3d6843886731516bdfab7e502d0ac2a024a89e29734a537976a5538a5221f5a540dc6c8029f2faaa74fc61281cd69b6105a6ca37901972776df0e673b0bc00ed27e51537ebf1289936035ef374a2b2a39dbceaa9c1ebca09e5f687710d9b7f1c9a8c26f6d6b74401ceca5ef760f7713194f5e7c73047c3f986c01fce9147d8fa40d8880512cbb4aae359477e065c3fd29356a7d902b5c50ef95594d06347754fc2d121acc6b5e25c1eb603ce8e59844d42e9132762bd380fe6bed0c0ac23bce3c77fda331bfe34df27eb782f2176a96b48b513f976e884c5f401b9e69364177ef8eb9ce1382d14faa50090ebe73c14f44ec2909666bd11f8cc2839894191ede7fd1c4d0045cae97740fb314907322eb0fb1970475bc5486f163a37f2dd32a5e77d1ad6d66c5e1b1ca1e64590a9e15f66f8c19d547d868ff479409a6a90cfa94621ee20acd37012b270c8b309f7cf10e0ecc2fd05f38a4f4d9d414c3782f160cc909f12c9a288350054aa63fc1686a7e480257aa1e659f1432b4534a1da1f324072359377022eeed0f6933db0318e8e3b5cf1fb727d79db9ecb553af2c1e2876c71b98dfc1beba5e8fe8b296f6e6d2bad272e67bee1747726247746705ec1c7163332e7a11446c011139b0f7ff5ade80189e4a8ce39d22ca3dfb54065da445a0760a889ae15c8a813ddc9d729efd52c012c1ca5eaae1961dca31710175cf3a907a1235b6b48f7c5b6061f69b5846e5e73b5de465a68d3809a19a49fcf0d571ade9eac441fd35e7fc233a5ad6bdbffe820cf3073658e87f0a5e964d3d414f71653fe4a2f14de823ffe0e628c931d1031d0201c145448be19c5ba5f95709a5b062f6906019092ed6b333f5eec74712aa14a50a9116fc0ff63c2349ecee9c70c503a89e7a3dc16266d296ea1b75700d4a05808df52fe1bd2366300286488c2915e3c03f5fd4093b5aba84234d384f29696c0f0c7c04984bffa71c6054195b47296fd8238f70331238f78631e2a436ef8eb4baf684198214f17b52d3e4b58c4386244acb97a6f17f67f607a67a2dc9c8307c1eecbbe321a09f5f4deda6c181b6a29db297f6cca6eb9e52a2f182596a5be53ea54f620609876fcf981e18b1fe0905288a292b75d5df1289c29379abbb131358e8af34d6ac31c958bbd5c8fb33c334714bffb41700d28b07f11cfe891e765167437ca2f98c28526713a52621d57da6f4727c1f44ba6e5e59a8ee5f96170e15f650481ad31be391974a1cbeba5580d32e883ecb6354fb12fb74983b472742d76299822ae7fdebed45c9acf12926854f8c17a8571783013f69ce9b0010e1ad2c5889db41cc84b9ec1f1cc67bf2eae382998b5920c5a7293a2121775c87b8a57b24ab840de552c6146fae09adabf53402d36db1e6f243db99be17bd9f102ed44a73693cddc6eaa8dcd417d714b8e7ef56d63952e821db80e49d1bce465eb6b220b15d663fe5bedacbd8c4cf2fae358dd4fe68bcc2d8f0c1915aa839e0a7e2b7846af290a2c631c457ea4f527d00609823c8964ff58c0606265337710c90356cec0cc32cb4ecf5fe178511f18b33eb86c9d12c9d0ebf9dd72a23541418bc113ade0349cad4ce7e007135a72cc8cd48d21d84a6145ce82abd03579883936018b9b10ae0db90ef3c43fb789984b4410b12b57f9d569e9a3f10484c4f501b30be522b8042df67c3b3612cca4369dc13a4c1280e7cc4124a4d897f9e130a0eb274aca3efca66c7f075c06ba74f7cbed9a855cbddbefd768cc8710fb96e01ec59de21a0b5f1d23fd9e5ea5e9c180dbaf788593759fe6329b6526f7f1adad8428b4d49a87f43d24df496577c1537cd8ee1b743e0ff9585aa7b5dfd545ec41d9feb549d21a85ab760e509903abf191c794cc79e6f5b2ed587205d8315e1c41252ee8684b2dd8122171fb21d10d6567b288d3bc128e924e33e69c3993a4055870a0955a8c26b7182eef9125695075a7a0b278664a426023f3eac42b837f6e2cc33c04461d6fe865a4725ccf54ddeaf99afa039f1779e613a165c3d68a57206525ea7d55876e33a28be1a245191b8b04a748bb8eff9beac74341e2612f94e4ac9f9247af518d6277eb23acaf40712271cf84e95c8c1035e7e46569f4fb9e80a9381cab7b03333b8bcd22c236514975e71a96d53046418f1a89b9a0b975debc03f870f1e226c7888738c52c02d50a4e0f9166c733b494bf083c25ced525ba6262e776610b41b30f1235f4313a541b73913bdd078d5e728f5a04913d73939b38700e17421edc5e99d5cb971a0654e6ac1421e1dc65cc44c5b8eae533b948ea08d27439de457f30ed7802972f8f5fd2c340495b90e387702ac9f409f9cfcb0d983321c57ba6b391d5a2e2dab8fdfc477ebfbd346931166086362ce5d7dea46eb0391ea46269ffe917fb7449fd78b4ada7368552b074017aa1a69a62140e5c731a8c72bcdbb7eca07c2cbfcc46270d6d0450a79facd7d12842c24566fa867a869dd525f72db8011eccddcb4cda3291ed5eb32d02a77f0dd1333235dacf6f860e00bc403ca293c6cccfb5a1af02c2c8967c071e62e7973ddc3a9d72a7dcf008730ce8ca728071c3104c5d48df06ff39d028f583a9b545e9b320ac05b36932891c8902cb83107981530d7dc8c22e106c04282463be59b19abdac06f5e8be5d91733fb14c569ad487fed8bc2a42c11de998453ec6891b05d762a8534a2d2298a6dff59e53d366a95d7776c27546095039f647e8b5f24366290ada3d0c69df0b52c87571ebe2bb218c28af38b1b54ccfe384f6cc36e118fe171d0c6a44863bdf1c9685d1196be3649b774ac6e779d3c26fac1a92543ee3f529030482fa6b7f3c8cb2ee66e756249912ce11131e79e65265d57ae214f1ec73e7258b2e3400f2492b8277d95c8bc7e87a94cac85e9dcda64e66df6280e27b9fdae96816fc2dde2f806fead280f3137a59313e8cafcdcfe8b2c911bd9ffad8a189b865e159da891514e20ef85c7452773a0d35081af1353d1765d899791f4ba27cfb483754ef3c246d41aaf4f7f7ca07a29077e4a6f148cf07a2fc9f173a1bca3c18dac2f3543f8415f5876d5a65c5501b22cbc75cb54dc609e84476803491405079e32740f2da5c94676d0c8ba4897d2c2bfa5942268f4aa69f79c6bcf3f52d40842b1143af55d470fe2379949e5eb45e13cd43632a5581642f6339d4618fb895a379260374f7163321735b7c398e1d3742092dc4aae696ce01ca75cf65a60ad63d960e882a0a47643a235b4c5f60e2412079be6f8f8baf697b7622b5e6834a8bb94b72dab7d4928cb0fc200bf71b280416e49f6bbf8cf5bf062fe98fce6fa13d815efa02059e1d32ebc653c1e9081a078a1178c024318f570bbc726404b03773fc974d07faaf10de53499b771d6fddd2e5c9f077a5c2a5b9f0e6643c708e33b592c014f180519419504ca1347a989ced90d4af962986616e1f75671ffa53bd8bab9ff6c87ecad1694a990c00eaca7de1f1fa5e289ac6e9fdfe3125168a45ff7eaffe9c95db63ee59a9f685e3554ea8347203a532dfca65eef7e1432808ae1e1506a3ad608164136ed52cb4e6a16d46717ab62bbee0dafeca704f6c5e5cd445d91956d22f57156a3236034010b76c7f1d70dc99d3853edb17d34146be6e009a504ee1b30c45bd182c3442d26a7f967ac2be3d967ab63d266087807953267945040e0bf7fe33a648e438b311fae13260e7cba1cbba5b20042af4d4ae226d896f7dc29b470e091620e3a81ca6cac6875815ffd0df9b5c309fff82048d3529764041d05a4a42af56c8b0ee4638e214de8bd3c2917b25a1b21f6699dabd934489dfdaa210a9a40eae69d370f97048b57f21a97cae476112f1ace8a11ce744a40a75d09e840b3c0c652bd598fcf6068fb2411f95edea5698346c0c0293b251334129a92e80191092c5353dcd1971248cbf13be75170d0c19c28a5a2407c7c1d77524efb9ca7b2b8914b093761689a893edc00d85f4578c7ee42c5a7040cd9c7af08d29a72bd892d79bc360fdbce79c8b8670952b4b71ddb0e27b954c056dea03f88de05f6bd84f66a2972ac9d333075ed04adcd0e5020796049e92211f4fb45ad64c9b4b5224681c71537c422314f2f314776cdd8bb3131792bdd958571a0267d2f1e2d2a864e8e34f20dbd073336432991fcdb8032c081dd302f3577376da1233a53d5c343fd4a28626d1db8d386503a96885cb1514ee8f109367883b0d4643438f3551bf5e36415c8ce5cb37cafd4e8a7d1e7d8b14ce549198bd5279844de248d8511a116915a71a7ba0083a9135fb858420352cd3af569e3a7e1cf386f7d78ba71a1df2077abe071a88fa5e3714f2e2a6115dbffa997c7fa0315072b94d0a542517c32ae06c6d6d92270a6a61a31ce90a7b5c0d3094ae7bf45e55bec55663eb79d074809df39c920a059e28b9e95fe2d9e59ade1ea9d4db5b8d939f531bcb97cdcd99bee61733bfaba8205ee7eea4143ad87ff96bdfd7e8ff4772dd0ba228a1469798aa62e11b3c9d9af6d593bad4c856db7328c03f9de708135a3f94f564510eb5db0dba583a5107638a556456d5465476de31c5cf0f239e7ab38f971c65ef4dafc8ae96857946118942a602c991d65d3128dd219915e3e703e593bb1d15c32a0ec9579c6ec062e596888f161beec09995b9f47da5986e0e365814a9025a15ce5845ce771df8efa812c3d94854d64b2f29f93e80f97e0d399b74d908d31e2c6118a4dccd9a073385835a4c3f7d30c048755183d39fb10891bba2ac819648510ad34d4947ebd777a273b7b0a49ee4670b02278a1d9f17a73d1d4853bc55c0ccf113aadd8c1a4f02276941cd1ebdd988a157e41c07ff9a326549d09760176ee53f5f2260452f561e3dee606b56e4f96b31fdf10139c921f033c8a04015e53ae41c401d991930d6110c897c51f31a2b58e47ab4015a05932acd21221685c60c10af3d0351b127b624bbc2fd489e685796e25897e312b9da285bdcbce156c2ccb221de3d50b41bde9f72214c18ffd4656e521e01710befdd320682d86830e1621299ab315ecb1535ca5b2fcf89bd693e285c555a71eaae8490f59add74bc2cb678402d48439e1ca5ec9b73ef62812cc80c2a8409ac5affb78952ac33cda1aab02c3eebeac6d438164f5d75146df227ec61e13378ea01e85e664240423b88633975ba6d80b115716e39c7bea770b9619371aceb0ef387746170efdf71861960379ddc3c70ca0bd096f301d50e347de2a382b132338e95a8a8ec81102a75fba894eacedf24da5c5c76c53442b381e7b306dd18934f85d38e1c25205cd5d1d74336a5b5de02a8b01ef6f6888efc1f9fdba2ca0a93ca9ee82da362f24ad862543a0715bcc274feb01cffd0244053d54c626190afbc0da27d8d26ea22629cf01b94ed840812e1a20360779931e01f6c965129792e957e5839b78e06d62c8943d359d238c456b15d52f2489ad6f7c8ad27afe4cbafa6868ac5b2c1fe3731082225929d7a16174bf745d8581b3c0cb65da48479cf5c788efec886a91a6cf87f57b946369226db1938831c91648aa75047b8d8d0cd5b92fc7deb3c2da29d0957a8367d85c81d2d82e8b5c6d9bce950003209b4d10dd47c39cfd6db34ddf4edf9de453f71642392eece82dc1a6d81902ee53f1f64d6f0bfaebc306ba814962bcbc18d95e4ad5f94c5b393683bbd79ee402903227172d6e2c20ca1f5708fae4b3718b786c6ecfaba705f8f7124f5faf39fc6fdc4e027b06ddc86d37f749662d6a4ad6a1bfd6a1c8c559a1f00bd5c2b25b384d40d993ea3e966f46b149c71da537a464f5b726ceb93dd2ceb1cee3c350fe42b300584fed9ddc71c14b9d0673f4a20ac0d4e0d3d925670dc9acd9fdb3f369b82bbb58ab17ad167c67478f8c1b94300a74dfcb724375e7773d51bb88372243e521a24919dad4daebc3358fcc86fc781feb76e5668033158ba430f217af6603763f85a820c9bda04c5fa62c4c18a5d0b7bf2abd3521d597d768db0c208f272ec7dfb6046446cffd1a8719c38f7318e06e4a7bb172aad5e4c725a0783778ee3c768cb3dc38e47457d2e3f1041b18de1da027da70938ddc62f75531a4d0df4392eeb11f9e3315433701f0cc6c536c6def09d1d7690c3d31b8d4620f3061449ff8bd0759d8d77bd51124382c4adcf030dae7d2e309615b7e4ceae689a98d2b8ba45dd9e30a9a6a727cc614714e2c46cf77d6959de0274b2aa5975d315e99066f4c4db35ba1e073c3e044303be4b5d2b23c62a4686bc29ecf498630b6ee3957e347091e144d6e2a41d23af5fc8cfe26519ef889c33ab7b8c4af23fb5ad6d2b2603b1c94bd4b87f074c926e023c589a4562624b04eab9b4ba34cfd37cd86e9886e8ef491b75ac258c54b8489621cdcef085853b25b5cd1ba03b97e505f9d025c86b92daf82c9a1d5bbcfc04c08015c6910ac220a89bcff763e6b33efb177a1a111402448a036ab09d0cc86c2a601aca4e7a80c134a5a8912ebe89a6043b54bf8c6ca74f7a0104237acd83467cc9c3224f5c26e772d93e31274a82e5c86c465b5efaeac3702e51c11986945b5dc4f815bd381e5a09417a1e761206c2f1b23838b2463167139337d1a3bf65737657a1ecc097cfe2a2e544a2449e7e062415129caed9e5040c379f9a3f005d566f8da7f07fffa147e5cb8503b97750790b9ebcd07a3a6f620223726516d2e4cbef6bf06623fbfc5079fd238afc24e6e34e541e1c3ff135499e5d967a50bc629b9efb6599d31048c70783087f362da70c954021c72587a18188eff52114473f8e2644eed0b8c8ed7236631a2a8e1bfabc8768ab1b53831ad167e076a28af9e46c2c4e7452faaa5319afa743d22d7449baccd6a55ef26d0703e4390044db5db7fd5b22dd68c03ee3861a576ac13ac3fbcf0d92f8d929ced2dda6017d512ff8210958c7135a320d03801e79773dde8d78c3f2a28ad4212de2285640d40fad548b57ce45fc707a9e1cce6317518f415c275e2210459701129fab9bffedc77ef85bb063a582f2bd7997399238e2ff8ab7726746e41069f20571301e45b0c0c96cfbdcbfee8c272627da8953e511d4e227c0a80524d2941c8fc07d861a0544b739d1a38b280158da2f4f864d25c65870337ae708da755ea637f45c7c86d49970e647cd6f5bcbcd04195df72900e9d15d6306edf60de010b9867592a89205081bfbc3211290d1ceca6e6ba68e7e6388d03fcd8278c6fbf17c03aceab14580d9e100af681dcffba354b5e35925a81ac5f250376d360cae4b1836ff2b40a82d54e97e726a371e3193cb762cd99685f7d0ea1dad78d7e7e164b4a7d71cfcc1f4c15cfd74ef09875be7573aaeee881de2f0e12e9569045f7c8679df9d878e9abe6761031dbf3b1161e81f87d15fa379c46eff0c5809647d67f78f65b7329d3b718f211ad5a174c42bdb4ce8fdf690a083926b3e5f20a0488bff1dc18fe5d2aaf781c3c9045f5ca9a20b05e29a79f79a09a44e4c11765fc9cee84b7c8b6ad5f13685709912bf9cc7acbf73ff10b17f703ceccfbfd5d24a0619f8431d15884d1818e35010678adc27323ebec6c766d12906b2171e15fe080955792a2c9406e22584e28ab86b87c3cf1dd10dbf286095cd4e3d4df138c042da68b12b3170ad3d2261cb47198780fac953c0887399667265fcd69ac1a6e1a07f3ce96bb51045061699e6aeb9213b291dbe535969834210f8f7c52614c629c902b7681540de96e40a137be822a382f7d145d2a5294fba188e29521875025f666ac3784f5841678005b7d21cdc731b0cefcf84973c6397322f79c59969c14d1ec0475f4187a181820f6d33736dfbce117e46b2542929a005e4cf65d07a6cb99a0b2a66155467ad91301de5155fa165ae8791a40778079f3ab4137be62f696c825356d5f047f9b15571af31293acfa68a1198a2d6b2675a78a82d4f0210212e7da1b2f4fce9c05578d90b5fd784ec5b4e2443f4e95eb09b68c706294da6fcc633fc260a61c124639f711ab749c7604aa1c87ae169044a28b2198451ef7863fe4d6c9a6147588ea17440c280a48a923c2c0625b27e2d9dc9fda6900e0f0fbc9c73f9f63fd53464d99f4eec041356ecf897e52cb04f601148f17713aad5f170694cac22ed33df0fd1c8a38189bcb2d548896e772005250e6c3793f36b6aa8e82d818c07b38ae1f85296486758c726b5f2aaa8ee4dc704fcfc77021a9af6bc8bb0b9a18bd802c08623b14488b95d3af5bfa39b7a7ebe8643c158cd6e7ea0b3c0b99df497a6c206200ec29fcaf3a677fb771c4f01fa12324b8383fbd9619117f112d58c1463f33a30d971611750c96430e2bccd6c0aea907c09a0944289f16f85810872e858bce51d4d65935616ee8afcc72c1ca4f66e293f1d56a1903fe744e4cfdeacfdcd468e4f32473d6f8e3f6fc8f014449006c884fa854d28adcb9b1d76c40144390ab8bd2e50be654900e19dfa231a4e17821d2a170a2e3480753682a227164186563bfb226e7315ceb4ff9cfc29e94123b198a1fc74a1caf185e0fbd3c2c8accbfbf7ce93560d54e5f1bff234ca27259bdc5e73138b4df4e842c0116e5bbc8cf03f13c1e9ce352b760149290ccd7d02664b9a27c217dbb94df6ff4bdcbb9de9dc6bb8598c9f93a06a2ac6c9eafc92e16e46724673dff22208e7c43285aa11cc79c60d20e491cebea7b55e58381d0fc99a150e578dac3b35025d384cd1efc03cae9a3b9d5a6b8f8a16ea38605df99bc3d2ff97e278465efc21a2832429545441632d695854f77d0e9f107d68c158dfd6fe4d35709b75027f4efdcc3ff39f72e380c9c0da3bfb41512b7054f9cc02820a07480f886001cfc572b53b279899c42beeb468aa7840825ba053e69ae6be2d67d3354eb22eb16fd67313fa63810af22093368850718ee935e8ff5bd3775588f64b5f19766e4e87ba3b5f2e7b15baa4ca5899485590ac1ee6e9bdda2ce7903abe570d995d86a0c279b0e102f7bb7081322523d1403c64c8768dd48b2e9e35ecc7e086f6eedf6fc51cbce09c60ddf6315fe31e4b99dc7c8feeba8e9760050c451acc1357b2e1833bab46a6243ee2125d5978d0dee9dabd1d555a31264a82dfeebe05fce42ff4a4ca2c3579c317328dad29ce82b0b69def17b354065f757e748ebb7189c7ef81991aa973a2a075352ec8d6cc7bec8b8dda281090556b686294ce1afa02257aee2bd429e768e5df53bf57685905b8ed1245f675f66672ab940756e287ae2956a522a0b57915b7def40601e85f663c6694fa29e96e809bc77e95cd1bffd6f80d0c46255411f040f980cd6f5dc5e7a27d7bbf6a75e0ec0e438606dcce4cc2bd278d5e0c0e9740a8b85fda48cf73d00fbb2f5d612034f3f4a716212a0255ba9e2a8f34fcebf34e17a3f9f535475069ada6189cb5f252db757c95af60bf0206c3a07a8e9ef40e62b443b6e8decb46f9a4c89f430ef322ecb8496b78250d3bed5510b5359a30cec3a71fff7aea663cca1ca92a1c162c8d70e696ff4422f5e8b87c03aaf197a81cbb19bf3a72021d1b223ccf23ed72a479ad26ecbbdbfe7ef1b05f00c0893d62e19032acd199cdfac94a2cc4f07fcd63d0eca1d1060562b13e1a278f5fc73668038b196d2ab7f4042f8a1510fb9acd7278757ed04889f694b841fb38ef7127c26cf4f78aaf941e4335291f39aa051ad85b90e66eea306132456c0484d850bb760213f38cc6f7f4c0c47171c9678a5d9d5f85013552c24c90cee26afa832c988eaf2f36fad9a91d82c2a8344899ef3eca6e9bf6ace9075eb83cec542356cd66115992e75c4f73429119178f3ca7fd64666f1cee5b17c640b175d2ea85baface08ea822f3b901b0bf6af06ab2ffb7c7879494e10cb45c9998363dc56aa187d777a4948361d04691fb86ebdafa8fc34210ce67a8583d9d61237ed52bd1ad61c0b6f5e2c238d132727df3c83c43012ed08252de7740b3db653d3fa7b4a5b5ea02ff011751e10251bca7403a2124ea56ed5cf06df06ecd731036274a022f716d08d034a6d5130a20eb17eaa60c08a1d802f0f59a863ad110ecae9420970766876cdb3f15ae274f2c984051906f76ce3ebbeef0e8bb2d6521752724cfe5a5ebb589705ee85f9647d11ea1238dbde7d5d772b760ed01cf0011240047ac70839764091032936bf89abb18babef299e44f4eb1eac3fbfc88288c83fa8b4aba38e03f466b48bb55b6ae56f10db26365e4910113e9a8aa0de144e01f565e2f353e6c93cbc20fa49f690911521a7c54c47151aaf3447d7ba882ebb840a43ece83fc830e23c505f3bb88119696519b4b1812f788ea7bc0f56ec59371b274abacf90bca0ac8d4ba3d3c8c7e3348538dbad331f947640ff18bc321c2a8cf48334f36d4a81645719ac594fea593d280c228a856ed52fa71adc348300fca018f5439bfffb3bd044c364157470e14ef79e728ea0a3a28083144206078c151f3ca8cd0e6e5636b9fa50b24f60e3e52d9af5b103ac4665327df63179e548ded107a5bb95e1e4dbe621c87d4e3acacca3b819c92fd0e0850d3cc793d646bcbd7e22f3f678802b90216234af5b2baefe78f913a05b35f86ad9698f4f6551711bed349a65ff74b5be30659b2fbe5b16e37407ea20ce03167c5eab574d6e2fee61e7e6a3ef72e50acedcd105e5bff18ae35f87a630d261c22364ab26753907bbf534e0157e18fab026ed4e7ab9a6169266002450b7ad7785c7b21004af0e0261419cc9f8f93adc31302b860393baf1b7d42084ef9fa86ee6d01183f9e3344867abe749554720b315535e1ea75b44ab8095874f8bcf0b6e6ea649ac0ef9f400559ddc0a335212a6e2f64dc16ff98c6b7611fd2e2d2f1e9ea3b122324ad99652b47e44b19a0158dd2283c1156155da5a1fb04ac8dba729270f5964beb66b62670ab6e7e9923c39815c6182c2885876a006db35c79f1f73313a07d6f758989f67e2ad8d5824ebfeba19f85871e9e8a764b0f888d0817f45e3ab2141863a46977ac1cafea657f7f0afe0b00bca8eeeb7cea771098e88afe765ea116d12645e90c63177017c3446548939f162747e53ec0772ac81a6bc97a1e07f3d2244dcc9d376b91c6082c1c1756fac232618c1fd8f379913b7c32520bb7cf30f28c4ac6da8b0e21fe15f08509a8ac2ae1f5d60d6e785a40c758bcc307c60cced4639dc34569c32e94dbb11dc0a0202fa15ec62c53e1a1c0181a6b8b02db59541464b7205276433e26b40e24b0efef56fd06ccfb1da1e8959a4bdf18916a2d372eea378c7612d6d7205948587eea621761786af8404b8717ca67880a17f5010e807e9f5644d226702e15f0276f2231075b4e20b2504105ed24f7e6ce2b0e6d30b58c5f2c33368a9f8c94a5f02629d4ad66d27ea7c224fd7c36778bd33f08da543abdd76cc5b2abbbe82fca612853b55ff0bfd5571a69d65b7b50d7c7b896d0df8c6dc89670c8e26bad71edf8da426bb5a560e53ecd7218e1602e6b0a4c1ad93927268337c90bc71568f58105d0786044d15ffecd5ff04dd4816aa6195e176bf7977297df32ddd24f971514369f682b642127b2814646dd7b5b902973630ef1a159dc96eb42c19c70a47b27f99b9425ba0132810914e8506c5b3965b6ff8412bcfaced0fa8d597e3f3d722cdd597ef7acfe1aeab350774f1e1cb0db4287f937a0d6b3f66b56f80ff1bea4a3405dab19c3744b602e6d661206fcb10ab490f0e9038a3677ec444fba4ea47d2bc11c8af484003e81b8d02741cd9794647baeed9f4b91c0d5cbe9a3159c8b8616de1aa120652e8eb0013d4d76c859d589063641e2ef69ed80a89ba4aa61d039f505ec7015ed5b968b95e94af98dd01ed8e2dbb02c759f1708f0fec6d1351f1366c6e69a5d9313f064c588a2729476cae4afe39af4649dc7ef33677c229cc4acbc9fad626fece426ec3e8fd64a62da542cbc0284d332e29aa3ee8a5726ff7d60970eb57ab56148a4725f5379197f675531959ce03176f9e9b790cbca56e385c956827345c686cde3a7b697ed4840aa4863db374fa797604faac8a0582acf8a61ab998b562bc3c07efcc2b1b55f6d1fa853eb4615ae1aa226edd4ac832b3a07a3e6c2522e5daedce0d2023563d75b33ff82446df4ad773c2a016334ddd0b96a1a988b5c20c4be8f93d803976b487183a86f85034f2e439aa375e2fdba93a44e3041532de0096945026f255c5e1b668b4d8c1b9a97b8f64a3dcbe26bbc1ca1007f71c83bee943589d71815f89ed890b7596876b860d615c75373cfe364b4364d729a390aaeeda9ea6c5323f0b0088694567524d13cfe18ae8efe3a092702ba71943b541ea37e4cd34cb0fdd93403ceaecf32b4798ea9754c4adb8f417570c4196ec577ec5ede94c0f2a1f2168d82cf731e319415c860b23d018c5e20f296d9a16cd932f85386f85ff8b6af4d4eee1f6dddf2523a8c9c660d5d91153c00dd71a618e703c703f00dfcc96f93c1dabe151b88e56d5c4de4f719b97a42d732cd1293ed6f78dcf2b23c23df2d3e38c36b66e8a99b440f8eb2ec0eafb875a71ade32f764d2e0ae92361961c4800cf69b8e7b71ba7474a8c19ecb38aadc1c0ffb99594d19c1f9c085040c42f3f89eafc58fd92336118dcc78f10b442545a49687870c0176bd22972da4ab23f80751a8c3f7f69996f2edff276222adc985bdcf211fb1b10614d9a70e807c913b2cc496394f5a31678913955f5aa7d1e23cb60e7adbe0e84279ad84aa2fe71757e975ec780e8a872244ad438353114d19ab2bf8d7342ff3a65c1ca4831b7132b8cdd41012bdfe0751d6096e35d3e59bda818e02d8c0e57fbc2c857b2bdba15fe83a6da59bc62b3e608db699d965ab3a9f306ab0e1fab7f8fe6b969cf6d90e1b60cfa11165bf9898f90c434b0080c8a5e2383087a559fddbe7a9be7e86ac0dd1bcee2ce82322dca365b22df62dadc47a5e198dfb75674db502677b845dcd273f47265f9e36685dea411fd51fc35525044d54c180e49b1e00c9154c62eea4e0a0b9f8c7a82228a2da15b5d74c540f70e03a6a79bc756df53bb643af8ebbcbd0926fe5e39a78cc220f5e14b2f072452e9acfcb1502aa7859e25463236c37ba7da0e36e31e9accb71d674ace6a0808ec4a058173207f612b2812e04268004f92e48bf02312a20bf18dc03eef0d12154b97d8dbf4f10daf5a594ada7576e85f088f65d427fb0871f7d9c867b5016b72f93aebb23cad1db7989994dbd049c4d490436389f6c315255067476a282c5b497e9906af543af7a17050ba8b5dc7dbd5b3684eb898500e5087a105f250772cbf601ef3794382e39667e6829323d9778bf766ee08168c3e1921eec9a536ca24fe292f79b9116b29be07c3b59b2a68de1ee7a60b22775deca9a8b55d2be10e8d2e60365f17c7df1040d7501b4a7b5a59b5088e6dadc3ad5f27a460872d5929ad768e9a6e3a6cc5e1445ff37b491d993078e487db520263e0bc9b561053a705cdff3ac36ecb0804e5f428159e3f180bab9002fa1fb93d67b79017ffc044d28934f1ec192771a4866176b91f4dd5759a1225ea4dff897ca12cca9fc35ea9e29c2c732d0460d54632a0f29a774eb33b2dac5e25ea446bc5f98793bc0ab429e028fbad83ece39ff9f0e9915487698072abc2643a37b60622570f12f43c886dd314eac879397676c2a8837a6eb668e522fe9c5fb19e1c039aa30d70d2c1a31cc34841ec9453e202ab42b7d7706b1189540d827613853f0935c5c9d4db01cddfb8ab48405ea2eeecbba7cdcde3102e1510c0bcd1e656e8c1fca58b679965cd5ebb2747ed5e8f64dcfabd0d864e0c85305cff9199b578ddd2f62b9b5093536d40d3a3851a1c800a79716dbe2a39c7df8342b24bf60553e7e62c4040b85134732e09084bf021deaa6c27a02ae02ca903b5c9c1300f604fcda2a4cac4c75c71a8cf643ce197f4120a5c243c97d1b01abb6ff914890d4dd459b068b26da43b70d4ccec288f361d82f3f2712a4e254c82cd59db949d17554a51b880e18478769bbfcca9b49df625982cd6155397038949021a7627b656fe197e61f23e506a96593078a4c952fe93bb7faf189eb993eed7225bd3b61af2d3a9a854c8b01ba32211f178e44df777ef52b22683f2feff0394f5c3f82a1212596396390a212b4ba22dc873712ad488c2c78ee25d39ac6c50e942fbef69e6de1aad12b7be78ca899e147e115446315a9281db8cae5a0c045e3cd3aac05dde7f9df0e276ee9d3e859f2edbfb948b5614eae861cb7f3d66efb4f66e7971ec421d6a95cf1fa177cf682ce3a6d939df8adf4f64e748d7ca0255da80dc100c0059df0a02a15ae0f0c75ace9ba9524c2c17e34b5d37aabee9275d5940e51698806cee04a120ceb2ef6c820cbeaa0fd3594347653b179a3c821f2fb8a050341e54c372e0d914241f5d08096eb472b8d94e5734266650c05a7d30f47f07e711a564a692271144032f20e1167ce5c9f463f39ad11447aac31fc2a3d437dd705635985d7660b37914eb213fd2bfba766b7b305647b944ec4c9439c0f66789b4aad6d82f4713267bff5a486c65be9943c628edd1bd9dc6e002bfcbce8397757bb6910c662dc8d2126b847eaff601ebf6ad7312555c46364c8eaa5e17a24f088d216d1c484f081f060072a94fad111958c76287284b3efaf9975ddbe17c18aab19473f01ed65a751e672bb295b3758931bd003492b30d7cafc6de2b753979c3b1b7aa702fe9473c2348b782c930b5a549365201ddbc392235c337341b00fbbb53311a85c5b156dcde4a1f00334b5ad467db62d74f8d4c56553570e01af924fb60abcb1526560fbd14166a131a2deb7d5554379c324fce7fd5c48f16bc4d7fe99fccc6099bfffa479054a0a5c8fef00ad948d93acc2945047e199ebe472491eeda3d124a6cd4a0e319abca9d83e5f2e2bc60519766443b4f18dca4bf04a5e473d7a5b7bfe1fe88f776c3efe2940a786dc543a69d47c837c76bb5aa033bf9ffde5fadbe4f42a53aed7045175e43960a13be99e032b9dcc2d43e4ab77134476a983afd2ee4d6f03f2bcfd94af8d7b1303c6d0c084002a863de5b46d3f136b8ae0a303c0f65e6081e1b5b2691989a8273509c4224ae6b55a24d884f066b8a74529b091269b9ba155f23dbd5f326d2325ab711e33f643c0b078a8e0d59c779a2deb28c2945ca9a3e8bad198d798bc8e86ed995985e4abdf11bfb352ad3ed496bdab98326aa7fceab2920dbf72aadc4cd351fef098b4836306509444b7dc642f6cf17b4b4a1c09d85c1e4eabb0e750d0939efe9ddcd46eeef6d1c851a5d38ae6c4534e779317551f4db610e802dcbedc302b249bc2d2c2e57bc9dbe3f7e2cd3f4c278e61d6286301f00ff0eee9098aa2416d1d850b1e23e90d9f2b862e58bfbb7d04b78493cdc832fb726b4ae3ec28d53ffb25e3e635066c14c853b2a9c3b6cdcf61564a5c85d914b893ec6683f33de7845bfa3314b5fee139ebd0f3faa266e8cbd3e73d80df2a49cfdaf0dc39cd1e5bd6e5f6ecf70f51dad5601fb4a17324befab2e6d8b1384024a9be151685c86ea4804f988c0dafb3cb7fcbbc8f3eb49492c4a4d1a65e3f9f47ceb3c5aff873934418ff7baad915a935b19523ee12f52b26c2204410f843bc25a7629ef2f26d20cd195c0ca3e9ef86abf342e25bdeb35ccd6b9b9ac30fe30b40dc30edaa03f38ba20a0bc801a08bf090bd5b7452e25dae09399d521715ac212bd5a54e1fbdd5586553753a6ead796b768845566dde72935ca4ac1697a9fd82391c464cde80510b798e3ed02551364befeca704f71380a15a452e44cf2d55930b288a4650ec15197132af25e04c51364f42e70c9932165c6493ba59181052f81482e7e731618006ceb97ca809ef58af27239bd9ceba82291e08d6e02d036415e7a3f59bda713067f4bafdd30cca9b1afa271bf9020d829be91cea6658770770f70429d0d6ab8491859fc943836eb70e5aa60de6cdbb662958688b4834ebbb9db53bfb1290711b27f3d05555f83c2afdab28e83fac34cb55ee4420224cb20ef0c4b3effd9252629fb2052896c5c3756d8e382140081a10b60d685f70fa9a601e87f48eee76cfd97d52a6c992868504d2564c4fb47bcbd4ae482d8fb0e8e56d7b81864e61986a0e25682daeb5b50177c095edc9e971da95c3210c376e723365ac33d1b4f391817f4c35124e9ccbb94cccef95367b84c6c2792a9ced0630f51705317f4920dcd68b367bed3fa4552ce23ba5cafbd71f00e954c7582724afaac02aece77155e4a9d0989f26e858cbdcd6b17b07b078bb1988da79b66c2648e51f91d892c41f33abedd70147df46ba3998a2b1c3cafcf3911f6ec4303297970473be8709c7e9643d116654d88aea7ac3b6a3fc97c1c022d81ba6497df10504b96b257ac4e350d0de09eb0c5181b0b81baf19adfc2b6ef38f0c054bc84ddb2c54744b265cacc2141f25c99a3b4a35eca1e09868597e55d0067f007dd7afa678660db40c299ad9a8710386810e5ae672e6f9949e38211132ded32c42047cd3737ec5e4aec423e4086411a6433 +MD = c84b5df3b377af82ce89dda9ed9ddb13d0bbb30945a44708ec5371ade48d611e + +Len = 101920 +Msg = 24273964b18e14df5c7cc49fe9afe071408029a1ceba106e28ac78bbf17dbc07ffc0f49fb9487412c33e96e6de70ba8909ec8a8aecce83097756b16dc73eb955494a1dd02120bcd0cd5a98dc05dadc06e65d1e1d5053e1238def5e01337a847a4bec3d5eb2bdf300c0f953e9289350ce1ffb6bc0c1f232a3b09e07e1fed923604dcfdbb134c8218ae5424d760d431ecbfcedfbdc06537f71298b3574f005a0ed961a7f316fe84e55845e10e97d934ce3c55c56dae81dcf7540df6f22d0a3020b70f6b1462bc6834be57424ac402ae400c16f02202ff92b973cc23e53685e52a1218bfa582f0ac8534fad0f251eb2ed09394f8918a38e9abf675b296f7edb9796f200e1cf445b23550c315bbedfd070e6752373290b8524d507d3b8dedbc5d9d42b7eef1332619e3a62278fde4a2e747fbd1446ba3185d1c16551730947c22142142caa8cc1c540e89ab734ec297401bc594a8c35db37aa6bc9fee356897a76c8f5339ca2b82f1148fb0bd152424a1f8590eccc01d242b6bb7a028f2e6b97e04e15ba4dbee1461a42cf48ee775d56d7c2ac238f86de50fe9ac284fffab3be67bcbdea444602b362bf5c9914c34443305bf3165c2cc60688eee7acbc202a9914fa35eb09a4e41ef1a5ec24c99ebeb73338aeeebb5b540e5ea132a34d0a98d0eef1c5e4243e4f2dd0dec5119870925ae74124d2347b4e108899eb913a1ec50bfd87b5fd1e7e0b8b06502f8906a189d6545f9feb50f47db30cc05a9e0cc678f14aa54c607dcbdfde9be574b49d996bd082786560962ea9a0f4fcc7f04a697b2adc34d332cc8c94cf9883dbb9e4c100f37a75bf5a8f929a7f483779b27c6e945fbc1a929e902bf2050414abc0637f0fe4433ff501c18617f70e58b90a2b3f8c38f041d1c9530fc129e77f2df3a33c624ee5bc4f7cb673eab05047cf20de432a5c828fd8de9ca0c9e24aaca9782b61bfd769d615f4f6c2d95315ec031d1de2387479eeee03f446d2d9348366778354ef27d6748e9007d9ad88662f9c2970847c27de455d60e269a3b5adecae19347fbae7347e037973222df64af8e46b6091c01eb87b6b1fee71051fbdcfc785c549e7bf8bdbbcd6c2032346c92f210c7471ca000f7a6165a0c6c0bf6d14fae4be194056e47501d07ae6551febbc9c33358d6276ec29875d81d09c3cc4a38f5ea8598b5546331a8f25328d2ab9879d09294b52285670242c18f8613fca64ce1a0a709163bafd4e3a4a4f910f3a786cb6da1461bd553781fdeda4d66f8840ff416cc61a2947bbe7fa72a5297576785061d05156def166e7f6893dc475051d69fa56c3ee4ff5552bf6249c1f04766d93339168fa3233e69c3f732cf3f84ae5556e51cfd47cccb46357e89c3a6541417b53a7c31562229de80133d82ba15d7e0bc5e4529558d5bed644460d4140dfda51e99ac86f15c674156452a8341848d2d32698b4f98c175ccee6c757fd3c59225c1ff0e1cff428536a8f5706d50413c7f5b9f45dc8c09a779164f2e23602b6ffe61b3375fea64f232eabca59d80dc447b8a880b5ca9b67f568e75016b33afe5b3505eaebc5d443caaadf340803dc65396618c425c7c685c09b97675c3e8b3a1d92069eadea260d3226541c7d1f19fd844533491386e9fcbe729bc21a9d9d712d4546d6223543b441e9310a1ff36c95129e2196e8d0abd5d9351ce6b99919ab7396ec1ab270d440e13d9f8656497b34cab80a330d6db417f72b415da2faa7f0d6cd20f2c56180baf968c6198ae7f1e294dd15a9e825adca029d33ae3c88ee4941310ce7c3d2f02971b3cd4a239674a758536a7fe3c03ef7e1d31961ee0b97bd990bd5801589cc953166dda2891eac8cfe63323d65050ea57c151cfe224a4955c7a3a646214ebb0720c91da8254743986f55956cd5bdc6dcbbab640e3f0ead18b341a5c050eb65852824b6e45dd9ded49171ba939db00da486dc1819ad1f6b0e452dfa760a26731a30becfde9a9b28464dffca3a24a68c06c5f261a5d3452a3f66aecef0b8c98dcb21e0911f4556c6f88c46ece9d267eb096033663c1b4892b4fc0e49b7c09a5aa2e1d2242ec4d263f2348f49290fbad1b63fe85065ecef4c74f09392528c6283a659dcaf9381d7a53a2e2208814369e6134b5846a9ae0300872b86d24982e8afdf71465ad7e22d34da6347537ad63ad32b6acd718eca4d55f6942f30250cf6875612574f81519bb9daba464f9a31f64003858df89ea692f4c812d5d56c9152b3122258b31935ebdc401a66266cba65d4a585e10461ab9d85058fc1e8a979c5da1b8a91b127f6e344166df00075da4e38185011bd5e4135afb5f23c92612b17a47a334a6e34fc4c9a649a2c043ff97a1464d0654a1dd1211ae1238cfb1e1110bb3604cb15c7aeed853089625b5180b20f92eb25d426c12a6f9109f94a679278c457e45bcc697690ae8422da2c33d5bcd1a88b9882027b1856cb8ecda8c516166ae6bd44bba1bbfbbc674ddba06e626003b197077d3865b37699994e3cbf05b352ea76cc0cf7e6f758e2f2afdf898e684db2f7baec50e9c2780213c62fddc817276bf73ce4f35d4c2afbf99c100cc09a56b593f9f8d26e0f030fe27ba8a7c50a8f7228dc6e1e89c2d9bc4aeb5c7f62c0c7c1530cc9475c60c0c6efb6d0a665543205f1f3cfffd2210e2dcde4ea6bdba047df1f3a86371a7e573122bece6110bcba2f3acb321fa13070556bcee35893037f16dfcd582812316f5863ddcb602f0cccf5ebaabd045cb8a83c0af36eccf2b0166e7b0b66a4ab40b0419b59ef2c280a1361ecd998386d815dea9399b4516071b5efdb3dd9324d75c4f6b07b614c657f347a25a0ec433a533868ef09dc6e450c04a2e7aad85b6096507f8c8b4a484c32da487e46e1ab2df6e1bd048b0fac094aaa8e889c8ca54c6cffe215d1d1a947edabd4e0159efaac31fff1bc66759114f350bba4591c9a7abf762935941ff6bd764f2531534cb721ce3a0dfee435a7cecf9d32242ab1c25057605cd31e5bb716966f435b49126bf3933c17b14b7876a0a53afaf15773a437fb6381d7b5ae75b915b337443f199d8a49aa1abfe46585f03fce1bf12889c8987527a228a240b610bbc208d67c88d54eb82f1b0ff7255c2763029e0ee51cb6d98b55c6b02d3805825045bef74a889ca7a7712489ccdf83aeda7e8a2fd553f7640695f6569dbfe7779be36291ef4178fddf183c15aabc83eb6ce9e73c4157129fad8e39023cfce6576545fb8bb4daf4b829cd6c9bdbe4e248e0ecbe1c714f8ff44ae9979c5018898b761291cde17c95404b38bb03a57e2b2c002e16b9ad64f7caa34d180d223a587996f32d3fbe4ee5fd0d00313551b2e3ff9258f7fa3dbed0888263c53bfa8bdc8a8d90d5c993796b5839cdd61a26aa94285f1169c76884a598add3a50f20339c2622909453a724afb79549b3986e8bc5112f02750878dffb61ec44c071db5921b61f9c6fc543783a83eb1acf986f80ff21cad222a5b3f65c4b095f1f4a7425f1a04a5b7007af9d932501e8320373aec9c0f72a798762f24fbecacbc98033c0964e6b769e0133ba42039f5ce5bfc040ab5680b28094ccfa5d22f930c6fd605298264c94019c17f7d0878f1defb69e5c2d4b2b1141b53b370cdf5c381fa743027d92b45ea2bea27dc41898d458ce572bd808c1f0c4d3f5d0e75dbc89db6824f9cff96a7b88501d74a61d812929f132d433f309f60fd443ee7305e0cb02274a5f15c33794bb3bd004ff0013c36906767fc775cdcc2ca26db93a3d92a79dccfe5bd857e351446503535528164b20f56c561af7d3192323bb58c36e98c4b33e88159f1f36592ab8fe8c33fd526856a65c7eb6dfe486fa4175f49601bbcc4c6730b6f282f855751b08d51ee78ec314008d222396c8bbbbe2e2b43c5cc364702e3e6659e8f0ec2e756b56a04e940461ed4968e785475f6ef04bc13ce97836287bf94c5db9e7c75cb06d39409a2ad24655d6788c13291a1952f8421e0fa2ea7b36aa91855ea58e07b357a3873319d5ca1e7d7b9aa73596c6f031606b3508287248995c5a3df2e8376671befb8228b6f531869997ab34787cb23e43aac5739714970ed663bf967df5b102b226ed211dcf7639f90d86ef6b448066126326abdf690c5127284c58f6487c54a790ddcab161d5dec483a02b152542f3f61ec078a9798fa976314d01fb39afadc4bfbbed1bb237bc218261b31e27e02b1664fba29d4d0960eb07285933cf3256313ded5003ca821c3991314e2f5242579bbc3ff062ec60bcb03147284712ed971792ddbc0fb2a046343878c3f0af51beacaff42ba15e7e06ea371036de0ac9b79e44f1f8ea71778239ff9edb0845f3aa72c4821b01ac4985c4a2ed4ba1c0ac00eddd93ce3a0ff118706f0b5e201c1161148351882bddab8364f8452e383b80b82de52a04a895f54f020f2714df3d942cbb74c93ac6f98b46f2c480a84a832b2885e21e63db0a6a7117675bc4eeaf62538f2053f87b09d017978b05817fa197981e5ed6b37c763ac4d6000d38f47a651eb70e558cf213643e7ad73e81819caa4f1fe0bcbc32e24c916861a7369aa783d55cc639bcd2222e03c52f926ff57c4e97b1f13745a655881ff5128f87883da6bfa5d16551c33b16ae9d1c6915864a6ab6fc18af187fd7d6b8a49c2ff36544b525bbb643136f6804862c252c39da0de5f527dd8cfb66701ea29d86ed41d9c5984fc5fd39c97bb0e0d49ad241a499cda99c5bc837b7032948260958333b8ec63785ec2fb13d921c92e00fab111e6c929df3bf621614fd093c8c109b68a729527a0f58d312355ab203f2b239046ffb65a9427c3292d9fd18e31cd9d6f34e556e49343071c47a7b7c1952ab03835eed4db5d0b9c014d0aa5f231e8d913ef8b8248c3e9d912fd49e82bd482391f4b4ea53a9e69f9502bfade5e5d95355b06cfa7b2b73c6bcbb0a6bcbd81b426cc0399c7e6dcc5638c56fadb3129654a8b174c47c0e1cd479d0e6895f50142f1b50b5a8d6eaca0531c6a853cf909db715a9d6be2d1d80ee51d62ea1460f7b13260bf0b9630628d4096c3147434936a521005b8f9841e93dcb35ab5a88fb98151658b1752eaa2dec471ed4301723a946561fcbdfc5609de86f55255d2efeb25e72a1c2843ebf2275734657b651083dc13b6cee58ba63e518c59e645140ff1215c24de98f9b2b4f96164b8382fbdf3b3f58508ca0813309f556792fdfc4e501638fc4ef3e4ed8fc78b795203c1c90ebe736346c5f22b651a6a94c4fafc49ac5705f6d9c385eac7143de8cf68cbd0295e25c7e573ea3d6055446808d684705a663bdb2b726d391f51e1398cc18e51f8157529815e40e7a6c26b67eafb2560eee642efa0aafb66ed231df216c8b9ccef76fa1e86efb6a8acf4580ad7d37f89de39d3cae5b7c0e2a4ea5c98f9c8beaf73e52d0d82a28c0ed76d82c74c19c359acf336e347334e3afb2a25a4a25c0d8829f2767ce1015178da908433d418c15edf8514cf51a803de4464f18bacfd46d586216ef34e96a7751b0fd4c6fc6ada17fa71d5f59170825b151d58d47616cb25fcf49ef717dcee921d2decf7118a7e03623bf2ec93473a2fe1d5c415aa533ad802de5efed94ea73e559d354adff23dbfbb66042ab376abdb3f00bbb5961ce68a4c6157710f66620858b06648a43c998b7a6282168e9947db9130a83ae5ee8ebb1e0ff10426ae9f5eab19c8670ab4021503c3e5569129aeaf6ce8221bf64273c91c4cb41ebba1bfcfa12c043c701317eb0c0cb66157a230c53689b1df63b33652abaa29373aca63c9ef89822f80b43b5bd7af6dad3e8d8ecb82b7c00baaab56e6609ac8d42092fbdbfa94cab69921fd061b1e83b0d2660910e5d4e52727a555d2bfb10b7c0986188436e0566835d6cd682afc8102afa65033b4738998873ba3c63d6f7995623e1a4148febdcae36d3d00ababfe2922d8c4b2931635f635d8d12f5e388bc6a705a191854259453e3fcc5e01bf538ac877f70be62f62b6b0075e8c96aeca7664972f03905dc16d82d8ebdec1a919ae2cfe67ae4241a8608241bc5c7b34ae2b074d1305de937eba7dc32c116febc909bcf687282bdf7f7a29026b1d705cbf6b2b920e16e495f9a26b88fd746119da3404dae5f8076b406a10d3fb5e1aa976ad2e2070b536d7babbf884e0a64995d5a37126049c5977a3b6d630ed7cde8d5c67ab52db7f49db4a7d916165f58df233ee9e625383b68701f6e5a3a218308ad9311fc3bed39213215db2890e00a2b18d6be90a535c931bf390db96c9beb514857ff7dd8b30a401c7d2f87639463c563aa1fda894757398e11b04a4b4cee0dce9dab01ad134f449a673cfb388349f42e42728a7977cec90630c1d3803c728267ea7f4f6214f073d65c6a4cb7b6a5019e2720691ccc14294f1da61db27360fa39c8e2319ebed516f5e3214187346034dde0923f1b4e12a19060c9f08afaa1bb6fbe3c6d091ae7742285c9a3510560d513f52fd41d05b079f1829014b0d81b0d2f55f6cc4c2f0cd783c9ca3abc328f2c67ee5eefcbfad7f89b0a6550cb15b83aa11376160f062d8540378dce71c2d4810254895acd346d67b680af6d83ba5f89ef832513f9a533c78257782717bd161b0caf17dbcabb5b0e696dd53482cdf8413e2a6b8ab31604e571b2f40c572c3f43ac85703b6b988a35dd58416a6d596aabb992b145e5618a2734cf6a47d91636410a60fc4157d2e1243ac95adaef639f0f85425d0a368cabd5f436409e4483e35d4fc722b736714722a748884baef57eb5cdc2d9a24ea15136d870e0da417b2edfa3434d63b27ea6794c5e33845216efe4b79b8bd5d6a763930904b0c37707ff0e2d5be20f71ffe56f5292c34e84cfdae56b54dd6a76a7c934ae7a1a208f2e3e3316974a811bffec4de16da071ec2727011275362bd5a86b61f05b84bb30f9d396857fed825983a35b207633b53126bf7dd486fdde9cb23162f72e585a036ea67fa39c33d9d395f2e03835e2e2fbd488a4d8109c4c72cd037eea7bfdc6af98a03698758550303cc126513216bff43a6bbd479b7a3d0002c9fff1cbdbc7dd7ca7028b9249ad1881f87391f63815c25f500f48adff79ee586b2b36a45a243524a42da47ce9b9356a7f102308aeac0d4b20e304d093c7e3d8d14bde91e2a75e9780fd0dbacb3c2c023e452df0e24c7e07c181a38b9ef08789e3a61417db1601dd21bbebd459fea84e1d59d8373abdbc9a1d314c6688bd83738a86fec0ad3ac5ff71ae6953f9c64f5805964b6420c6700c1b3b27eab9f37f9eac31c413c0db53045720acbe155dc927dc42affffb314266a2e65d9e9a5d221332f08f987dc152f4ba57df9d148cbfc38ca62b9033c4d9af9c7c160b91c215d9050b87d84ab36bd7849c28795e19d935fb0ae8a03048deeff04379b707e900f80bcad35a907a46b69c37afd85bccbe8413b50db65984f82e8684af2c659b89792e759ca6b8de8a98ea709d45736f17b8baf1c35b1842d0754686dff211a05b635553094528a7e086568f1a450ec88bdada043216d4480ecb1893328f75c01cbe68ad43be4a9def87c8db4d6294a1c3f05a37816ff65f5939e4f1d08df7c375924ecb7199858860a3289d5f236dc0660522d2d9eee44f59c692e9e07401700de8f1f5bc5f402fdae25e1e781001ed1d1e1a1d611c07e0b77a0ac38bcafa908dc738734c97e55b064d52a3beb2b8f290452a604280c7da1b5d34c7f8194aeb9c380b8c48c9dbd48bebed775c90fb9666813ae2a3a38d042c78f83d50e85849e342528ad87e8a6213c515e1783330a048db32ecad0bbf2793d23f6cbac08e7209edf5b3263c5acd43e1b3283b21c1d9dd59fac68742c70bf873ef9d5f28532db741dd50578eb3dcc549b095cce41409ce067ab85bd00b780164f21866a80f449547f0a896f9fd594105f270530493f8c2e79b0a4e3bf53659ac2e25f8c82b7d4a0617050907a00a5e1b6301fa07a46d620643038a0deb0ca6538d0c3d110da17f863badd83f04b7c595ea8fe777b131566a5bec37cd57c49162f6145c0a1e78dbd042e92c29912a1e7a6e6442db210d451bcc0d7c04a024c1e050867e3cc6c907eb16012d4eb02a10d3d9c634bc5cc6d7227cae82392ef5dfd585aaca2d6e5eaadf9d3d0235c77e43a712fee5a1ca27b586551771f469fe924a7cc869677cfd6db5c1e5d46740ef60fe01537c12d3f7874f3e9070beb90983451d2882725a6ff8746840ca6a81450fe18e0f2197dffdf4851e60a71d86dc59d150123ed46e7bf2247c970dc8f448f756a178feb95602a531dfd03f9b3841bdf3fdcdc51722eb04cee432c408ffbfc16822d838ffa0ce425b682860c037fd57b50ca23ec2dd86d579885918b30c74141cf975faf225297209a1b03113ebdbce1e65d9d15e06130e2d50543150822d997c0e986a184ddbdd4572afdb1cbda2cb36f1baa872075b56f2246a3667c9b3f88f4988b0fc81ab2c16c36f85631319f506968ce886472656d1ece54f8149ced85d938ff523276307857c365871560af5953d99bc232e3bb5d1900ba6256945e1efd2f36117a9c91598854d7ccdef3b72eccf274ad024641cfbf82560db94e2bc4cf0fd1b5f6da6ff59c6fc18ff44741511327fba15916733550d7aa82b2f6b117cd3f54c83ddc16cd0288a5590bf7f860e50e9357add0da1eab554a49ea3a9878865231b0b5fe4050491415a07c7236ceb0face388701e0fbfd9f97cbb5864c7778cceb1805dd572fdea6750ecc3276fae5912ebc6b36224de62b2590ab66479513240356a3e5d5ac31c455ec81d543861156175bc0ca1894e36c763142670441f3ebfd04f6a44665f0e23ad213c726f0b2be2abf3e4a2e5173f80c1600e52d0e89894aab949523dd8a74964828849bcb582ddb3f2a42ee14263259c77d7d0c6b42807ea2f434f8736d1feac7069a0c566049ab541b20d25d58cfd1bdfeab3ce8bd65fb93ac002ee81738bad75474035269860da69780758dba1516722adc28f768ae63e61283418c274388e188af2b2fd267949f15ce322598a69a7c78ac7b27c2ce2a22ce3adad01be4d78e29a7ce4f4972b2b61c86b2d592f8d0457e888dea6a49c0c235935564438129259e0a67512d1bfa84223651ee27805a6592fcfbcfbda5ca5cff294bb95cacf0507c23a0a60bd7de71bd59aa0fd4d18b455c662f483b66a94b7179183fb5ccbf874a9fe4ee443ac117446d259b1961056d417092d46210d02632ef6567fd64f9426febce6a84c954dd5ded5f1063b33b65d898e0f4d018e175ca189de2720a300a7273a7db4be81c4c7056a110424caf97884b8449f4035fa29d613c0fd230f657f8e41b90e83b69ed1235b61b4391c4aad704e7144c44ad452375ba709c5dbeb34999842c0817d027ca06e881d6373cf85b61941457715cc602a2b3952ef4eb950b209c1d2a21d184fe46c2f478815b087bce159a93fde0bda19491ee08ab1f85b405ade4acce009d2571cfd3b914b163ceb6d647806ecb9486b7effbb7c4ccfdbab544032e90cfd8d61489b00675d292aab8708bab388fd32889284ecaf67675a5abf9091e0ea1b096bb6b09ef09310db65f5ed782efaff21d84d547a094ae85fb763757099c28ccddb2fe51e1635f4d77f80bcba5f8ae89dc377186d743d7973290798d6fcdc78611b7be287c08afca463f01d862e80e02cb1d777cdd787421d1875a0cbf17f064e91624ee1d6db51cc770db7e683230e580a361aa319716ce5ec73365860f45e1ba7acd1353f701ad7259f33e146bc9ba8365ca8f624431f530eca02833184a950c420148ae591804bd46d387f5f93aea49d11cacfdf4582f0e442ab564c740f764f88bfe8af86abb2eb406fc9b6f070d5a71d283532bebe43d7a2dad9990fb714b2aa7a578596c293d4e080c6331b09c2bd47693005f8fad450b43613019ccab2544eebe04f0bed77f615127fbf5ba0f4455836c840395f2cb53e680c6a626fd89d3ebd8af52b56e5b9a7cdfa40fa5df1a9193606ccca15d26f0917ccbeaacf0ff541965e603f2265855d5b41a03e69434f4f12f18ff3434ee7ddec5ce3bc11dec41e1f62768e7c7fc200615cc570ec71a1c5719272fb122984818fc3c3e05fce729effa020628abcd8588a5199d70d040542fcef5d2ca9eaadbfa709445ede666789de20470174a3302d7b2a02bdf583e58d5b1239cc3119cc5ddc37507db82e0ca766e9d1b463bd3047dfefea68cc76a86f3503ec24d13f4824d853ce8715aec7bf3d02a8c37f90416e5ca63821b966b6b032c8607cb2e389dc4068a5c21c6f019b0b76b276efa6cc699a59d430e4da7718fb6b7b1cfb8df74dbf7bbf77f6f82301794ad915dc873701420fa5dd765a536e38f4274bd5c5fa3efb9603edcad193ba2e8803e76db9ebfefcd19570976eb27c90694b526814fa799cc0596ec183bb8ed3381a35cbc651286fa68b306e9ffc08acd4cf79db015fc44b02a94003950244106005471d36d04644967067247499db343c9a08561591e8b063dbacb78fcfa68c0aac658c8fcf2223a92a5be076f1bdcfaa964703d6f8ad72ebd8fa06fa8c7af03df7d7405bb882b2e8a254cb2b6c762525aa7e08cefcda39a28672175ca089e302cee46021f22f9c5ac09c0d1d73cddfb5bef48d850639af91ce5c1340739b0e6019d6146ae5f187076d7acdd46c8ba562bbf2bb827c907abf98ff212b6d78195fc0f386bdf98f1cf88f3533d7c1781e3587c0b94dc8a84234cda46aa7f6e7ab07ab84dba296d302340f1669aed85cf3350ba6b06e5049b0f95393153b76b16c61c3d03ea12483e1c3d66594e11bffcc6b2fecc86d7e3a6b1514144b70559e0674ee21d5430b6863aecb6adff8f0294fdddcd928d3b9451c90f76f34ccfb761e4815bdc80fb34a2efcd56c707cc1a12795f8b6f92868306b73e3ebf7d9d0015fe621ed408e85f1eab5deb56ff5f530fa9b6ccb62f2f5c4ffc5c2d1bd1f3d076e55f8f96546e72440e2cd8b05e9f49e71f521608cbbc7c9818e7b69ad25a84ff69d84295ec142add78a8a375ae226b333adfebd9f0a460798d6f6fbf0737aa29dc7abc55487ff5259b5fc009567f336e9cbea2ac268da46eda61bcfad911cc80bda57146e1e84dc6b6b0d30de01c3f13a55cfee1d5ceb4d2805d22d0d08f489e9de6f5fd5103b12b7b5a40e5f36feaacf559452d96ee1e5f0fc035c385e6caddfdcdbeeb0e58abee59aa9e13d910c2a4fd2219e1e2624d6ed9296a5551eebfb94da83092823dba69d2305f2a397553963d55e1a130d1ce8c8cf73508ccdd83cb1e34ff86554959386579e89b7d2429eb365330de1aa32e229bb82a507f59d38ddfc27028eff204e483e5deda1c93923e68a88c1af85cc8eb75facebeb1da1b7c12ff371cbade49c8ce02a688a04a38ea44c457ca62754b21bc2d76c63ce4c8105839b8b46e54948fa46ee409a0ce9a897b45287ee173017fdecec6e948f065d50010799242fb71839778fbef868713965c9972aaeddca8503e6d43aa9e837154aaf1fe2901396d6f27bf72acda0a509b694fcac0f0288c4d8b77518c861476f9c97ccb0b01a4e48cc5b0ccc403decdf331b6a57380dd49b2267b94f1a839f34eec1f449accb4737701eb8eb7ac6ad858368c771518615d38aff8729c6d5a52ce73380f6adafe96a85cce2d1a2c352c14f83fd4384f6b234b786c6ecf4e0c21e30f759ffdb4c9dabb46e72c4e1bc425c3f72f215f7e41586520460e1ce2a5ed3711565ac5d2dc9c0a50a4f0d5f3ae51efa3f902fd2d8a59102823c50793de21451938e455cd7d772ffab63f443c4a3ce29f2bdd83e5aca1d7006428120a1b4a7787bbb11ffd42d896a5695c0b6e3e4367391635963f3ecf1439b5abbe9dc3e548fd5d4596faa35cd9015cdbbdf1e101c812669fa682a73d624466c48fc78e7e53ea7c065d3e4550616eff32be7fd8f49fab8b7037588c894bb11606e82fd16202cfb697d5407f7fba7edf059f508c985875035bcb49451f3af031e76a3f135cf02d8b6e91a9d8275e915aa8d32c82797d0f5cb6d4bd677bba9248fa886deabb867478ff04c2e5e3c84710a0fc5c40f497caf615d62d6a2b3507d994b544be0a4044edcdc1240f2182109f826d784ea613486dfd5221d3ba44d1525a934c13c5a81f885f3955da8d168e35d1b909121a89f832d1db232a85647f51c084fc727a4854a737efd0ce72e00091f3617721ae666ad337d3b9d5391e72364b1cde50948b84e8cc472d618f8928328bf95af3fe3300dda3de5e7a21dd5a9e7ecd5a34a0fc30bb90f1b41a1f7c5575efe31d1f766a6a908a4d797ffc1b88f8b008f8a52c14e89e3a520d7ebf3428fab3b145fa939708ba6fb3a35d14638db3a372421892600d1f0cfaa205eb4b033f6bd65e1bf2235bb9d8a35498075fe97dbd7bcf0580582eacad5e1a36201b84927cd4de0a0ea9d3fd399f15c7414b2ca56297e8025287bdc57ffece860a402db25b3f4e3b4595221327096f514ebfc7d93759358595594b08195f377be6335f0dab781726336f969a1574b9dcac482b7790323015d55756d2ede20d9e607f9912d211d15154b3d1d079538dbfe65ef80f21a550198f0c51b482399953e58f8c50638ef55325ec3474e7386371697e9e0e60351e271ed2dc3b6ac8633301dd7944d4520b9223836ee5d395d397b2218e03b07402b5216546b60c1103b23204106ea90d7ca4da13c1b1c2fe46a95ce2687da6c4a65a231e31e2eaa5f367f27dc24c6613d0e1c607dd5739c4451cc63b8deab7a9617c80781e108ae9aacabfb50f5c7007a0ff53fa3244acaa47789a879eb967b4dc92e60d7bed617e92311644681d6b4b5554104531089ff2d6232660eb884b596043b048cbc802b7525182966d1dcc71666697837a21884079c3165224d5b719a4e57ba49e3ee336639281457ecbf7fc6ccd363f7e1dfa159adec6d5bb005f78032ea4bb63c0976e4e8a9ebc2da6925ed0fe98d3bd6c79d4b1bcd4661eb688f71355c807aceb73e16b803774ea4c000b2b512bdaa87b6c207703ab7dd066e8195e1161f3ea2e1d124339f80a451ae5a3e48b5bdecfe9556b2339d8a7707fe1413bd7ef0a9be707837e1e3ce6be91a79b9503c53aa434da277ed5d85d6f8ff921451fdbd642c4a7b774938284c75eba64a530e488c5cc4ee7c25e271a3e05b41bf26fc4c16f459220bf30757effc0b2919db93633953e482e963941585c8f96a3dc3e166681c83b51b67b624fb86614a4f6f336e5a3094a5e730db3b25b7c154b5b015d302aeb27bd12eaf54191cd5511498562f96f9bba09e121fa92ab59b495076015b8bb1cdbd53cf58b2f0c44f858fdc647096b843bb3593c8283dcb6f8f369c0cc6ac2ebcc3c9d21b052988b730e9c6c5f70174133ed43b3e8006ff256f8eaa9ddb0c2c67d55cc05f146b70f59849dbe18c80361371a591e9792c5ba53180291e6354b3b63b331f8ba85f83f205d8a521f9bb052b9ccd1d32db58e7d71d36a0f6272bcc913c787a0989acc994c1beabeb0559e9430677677f6d31aaa47bd5978dec3a7de0225056407ffb4ac4132275a87703ea43f8c9f839f860acf29288964b7d28d08b33e53d9852f40f6b422c8cc118601113baeb57c9448cf5abab752698a19ecd7ab85fb679c93e1f6f9706779cb019659c94060c95195e8eb50ec4cedc1f447b95f8e64a4bae8282ba5ad5bea307d5eec4ce42a0073f7e7efa039e177fc0c1e2c53da07f76c7674132d3c4ea3de43db574afc69a867d93cd60d22b88e94cbe0af0cdb8e062dd9663c149f882d110f8c19580bb82799d4583d1c292a9828be2fcfff154f278b7b6f04e069c0ec954af1b0d8a48e14a653ea9341cfc02b344d6bfdbf19d3f1e1f70f1c050d6168c760ac9c612963d609e23477029901ce241415b6a15ba4ebddb6c6d0170ce23823eb0d5a663cd2123109f636f2e777e7948ccd996a5d3a7beb4516cf8aeaebc13764a4697c41412fb8258071876d8b0de221f4046e812d38772c8f68d519b6aa7e47f25807c939a50bdf63a5348dc3b7b97e19862279d5982dd7814a8a3bfb4a652f87948d473408a8a220508ebaaa6b66ebae9d1aa9cc116bc0acd31ea422278865d4ad914dc8c11af846e1fa86c79f971543c7db93894aad9252a106f4c3c854855a11a84f5074ef4c38081c7473dab6654984d9c9858a8fa72312e7a038b36628885f36be738a72387401490657933166506299ae69877e898ec71529296f19a9ffe4c13d9a885027ab8c14aeeb5fb492d8df9fd47d97f6b4063c2411fe51fba42140dc2f4dd515b42ef713f0a796ac65435a50be5a5284a129d0a8dd301298818d01fc1606171f487ed0ab5df4ee8578306160de883da4fb5a22f7fd57175cdca39685844bc4f95f2bb75f598bbddc26209324a78fcfd40d27a1b5f4ebd6d50ff57d1cec87451082a609b475b49b1d09845e20cbb97f9e6102eb475656e78db6033426d1613e114d8e463f2507ecd49cec20f99dcdc360918c4e408430bfd3495d4a47b53216680a450b440a1e597f5ab899f3b01531d71914791620f1c66244543dd41aa24481535ab78777303789cd8a17c37538514e524bca5c9f22a1a731886d70741a6ee9b34fd96e0f162d905fc128cd8f9f9842f792d078614bc81e9b8a77815402ec2da484ef6c3408920f9c0e5b9651b37d61537a19fe19c5a034ecaadaab2d0452b991aa780688b00b740cc21e925e3c8706007215521b28c0869f9a15427197191a2520f1c16f85004a2c7ce06617733bcd890b4119080dbf803ea8a5ebd423d5cbb978fb217af0071e759f5f762ff0020447b62bb742bce3be44870afb9732ef5ad912e2ab1d99864d62b9da46da4b8066d6f333b16deee39d4b95c3166d6cec23fe9f46c2d9ea04738e5cef5cd8de2d51c153079bebfc15b9be554cb0b90a42c3b47e960d325a181d52f90d2c8e406f51715605eb4f6d10700766365efcc389c675216efea97237a75afec23a8ceacce2616ccd03faca6a6cd118ee85bb013788db382ffbc1bac9ae010e9d0b3755dc813c07ab8a809c6a1c860df3a9764bc29731235798fdac649ddf890c13201a04ba5bc74ff3834bb5eba0b5d44eb11bb18e2153846acfcf8ef3610e8df6c9afebfa3b2c28b34560d476aba10ee9fdf99aca167924c5ba8caf4b1fff910ab66fe8cd6496a46e79642c3a2140121faf5dd4c7aae4b75e306c5c0176dcb3d3590281a062a7617981de43928c137c3457c0f6233936ca88e3f70bb2f04674f543e04d1fafdede58e127b13c56ababdc99bb85595bdfccda27b544ec369d42c4d991b1a7c69d89a129e8db841b793f8cb7b5f8d68d503cb68e1f7df99471abe6bc8f45b52163e1d6ce9a490644fc95b96438c7274828a8c289ae3d87b4442ebf5f317fd45ad2756e41a4703f6db64cd711cc76c806d97f72acda09f2f08529d32440d691dd69c2dc25aff79be026d38a32e99e3563d35f4b5a3b49e7d3c55bb6be15d06a238a38a4dd0525a856deb8375a0893fbc9b696b1244a93b2f88502de9f28f3b9c7c4755cea5ca0e13c3e6962f9b20e87b2f3d448ad707e00b934ddbf1a02c72d2498d768d00effd30ad67591946e4465ba0b867638554f4db0653adce12bb120d487fd5d20a4890a4d374b47aca5fc12397e2bde5751adf65886b8bc672c4831521245be5ea5d2d36dc188f9c4e19c29dbbc42c5ad0e00872c29c5d23e5cf2cb27b84ee0dc9b63eb07158d2c5fb99af8fb5659d08bd2fd9c95cee0b2b956577acfea87794cfdc29d8393e653ef967f2c22ccef938658eb934fd697d27aa0dcbca5397dfc023565877ddd1304f6f0bf1fec9052633ef8510794d169b5e4c5090d522590cdaeeac315404191b3f850d160a34140e3e849c4761f6fc4e1aa1b52f9612f7e82957671e39571f0f5865f6c8b0140297a44c5cc4b49d237ca1d4c40ed2cc785af7870e85ec7deaf2e0344e6eb611d8abab6e4cf03aed940e3d0b059654f8e4498aa629d0361f82ae201d9b72e5d49d319d13f533ba8b56ed336e012fe33d449f2cdb4066dfe5f0296046673b05055911c062ddf6fe2271ffce273f4246439f43224edcafaf763b4de8d73931de4c15335d848e9fcc58ee2e555b473546b3fd1db72884136e7b6b00fff99abc374fd87fbba09098edd5d4610f35a272ab3566153291c1fae39b892ceed31144dab9aadd24df694729422b8045dad75f3d70e313dab01accd77f9cb8fe8f26318d309335de69a3164747fc7240756e66c30d7bfff9ae17f112cfac8c745261eb195c9c6f3265c56c118b4e21452cf0ee07b337c1d5b240d25c32c2909b474bda46e7cc7368fb58b04db729749f27e45ecf0b1d41b6e51ed57d50e4acba936b67db762c29c855e34cc4729553948fd220e4bd3868e66f38633cd21dc8186149f8a2b4c2799a98eea73e659ba66e8c429b0e708d1cac7716e5626072ccfed76ef76146984c25ef0229833842557345bd3714cc26464f2541c1b7a1eda0b41d61cae1d7b688b280a63a5a929349ece3ca5cc07b0acf18a24061033e952c825caadbea0d2217897362428c1b9468208df272d822419d4f169b2b0ede7259b0bcd2904490e6dff2f1bea9e27c4f9b596cbce1256cd49a3ca9db89a02a8d0d85646053b6090aca352243d7215dcccbdda8b0126ffecaac268187e280caed314a7ddc8b092094bf992d7835146512def668566b7e832bbd57c9279d77659aae482ecf9f057c8ea5673ae529823d29bee9d4375519a1ffb415a744244da39d6ac4a0c0f972c6ff66e873131c328d19510116da390a004f79a94365deca2efd4f09fa370018a5f0e961fe8977edfcea818553c77d174922f45bc61233b5abc2445e65bc1cbfc268161d03cfa07b32a534bcb6878b0924810d7258d38bd8c5f5300a09d8b52ec46fd563ab6e01a4d85254ef64a1c9a73873ac3820314ef9229dfd560d12332e540d0e7a1ded003096f7c867889da1bb2e00b9f347b3e4e16ac2928a9af3ff871a4ba9ab82d407e6139e786948047a0bad301cecf4e2b658466cd7eed7027f01bd308e3e02ac7d8ff84e4c40cc5dbb615e0cbd6b50442a265ea4b4c9edc71c63e6c5a67bc4fccaf3ec102c333d30ce83e99b84b78363a9125971116503ca3e773c11d7a9f14c55da98eb0089c3061a39f5e65a1ab4c79ce5dfdcd60842944e03681c0a12b025880ca3e7b08b8565074d2af325da0cf669679aecebfbd2acb2d011ee28fc2a0dca50b60c2481acd8fd8532cccf40b27a7a602fa93886da9ad4a6e09017b0878e8470796345b35fe464abb2793e94cedb3598491ba6f082e71b4d7d09c176ee301c3293f3f968c713a48555005c1e8a9f04d78e4b1b83f41aee8c8f610c95877afb5fadc429e90cec25dcc06b0f250c504ee4a640808555bbb72cbea0e2577bf489bf6edfbe7f55f750779ec241f37c757a883a02be3fd052ddf6b4cf2a02f2262e197f4b9e70cabd8b20950bd9ce0397f28bf29abbf98a68c8af16f6ccdf139953368710b30495c53f9d4d50bfffc93d1db5750f61fbae84df228f1baf3607d45edf2f37e385db97d5b77098dbcef5ef63cd6c69978c622f8c16c548bd4ff65fb9da1fc71839c7bcb336a3ec1582af362c9d7eb144f5cef037526084dd7107c3caeffec8396a7ebb43e2905355652198e0eb54ee527f1c4f469f09d8f7e66287fbe875432e5e2b1cec83dfd583bd709fe7809528a86f71d422c5684af4f43033b38c2b3edf5df46815e0387a87d3c7d3aa24ea672e10f808338c24e5bae4995059a2c9c434b1012628c2414b49ef4cbb8f9efbb4cca9d672e1bce5ae32fec46557f3f6da15a17bde8cf1a54fb15927dfffb86f166a81369b951c55af4489dafa14475b8a6a748a19a9350a8ea85881c76338ef96f0e13e09b5751aefd9cf0297f8659fdb1b73555de7561911143582fc21e7223b46111646ab +MD = 9430852f6036e3a80669866b306e657448235d1adb636dd34019f0c6d7303c9b + +Len = 103016 +Msg = af152fefb9a8a53ff2c72e378ea5bb542940e8135a9f2f568c585b0a09563f0758d9a737c9be8ffb4e0193ca8c80a71c320208868a7773264e829441bc34c12bec1be867627bc610e0db5a777dc39a0efbc5648556bab732994e23b6f5bf7ede14e1d9c7ab66b2464f5c6c8689f7fcf32c91e457e6ef654316c6f0b1dd7ddfe77835629fcd07bc64438caf3fd7a334936d6e7046639ee4216cf1e47a9cf84a10bf1e6b36efe64a3466740cea904facb66465f098f5509c9444d7e55859b8281f92a5dcd53a8cc67c5d1b6bcedb84cb24bc7d4c96c38bf5644681dc953d43e2dd98d09dc4d6809605d38ab534e1c8f9a41bbf6c88f6da575819f6b2776f23de127aa9974bea4a24976ec7d064caa69e002a3139b6b5c22a3a663e4d4717e08686df38b0b29e73d6fad6dca6a6bda322fe90dd996729cdd6d0d462974c5f0041007084d1401b8216f5b4d01e42e249ee67f5cb75e57a82c3e30c6977d06d0d764ad595e33e89ff4b51b0ac1f7f621f68020302b676cf69593ab55bd419698f8f2ab573ccf41072dcd6717793a765adf999608a4263500b019f784198707c0cf369b82776aad664334ca0396100127c09f2b46b03f427ef21d8fd22aa1dce0e0acf87b8c7a8065db77be4fb71d3921301d7a8ade070799e23aeeb06f268861c3c23ca2ea935c6e3d02be6c4ab670dfa470ee359c021719e6de9ebf55899ccbff12f2891039b3e80e6234e9cf706aaba455f0e778d4d34796951a4f8c4f7ca7d91b94aeabc2098bb612cc38b3df691da6294d10d2e3dedb67dadbf161ecba5e1848ad840be0df91caa0eed9a6580ebe20573d3258b39c2de13c7e3584e5d8870326a799cf0aa8b2c279175d057ece05b98c6bdc68c88db789265b9c43cf599b40420d5053a3e7672417c0336fb8297cc825336f91974610c6250e865d1db0034607695838413e27760993ed2398a39bd2be3e7c51a437c23eb501940f356e678af32611eb66ff6c1edaecfaefa4bedb6fb3d7832773e5344942df45f8bb073095a1de0dfb99bdada4e845dd2240edc405a2b904818ad0ff7c7ae20c9822fce6ec7ffbbcd73dfb74aede39144a11b2de2b073d710e5d8d7c4ec9c4686be1c202f60a09af1cd82b5973193130e57ba092565def791c706d43469bf0d9f29bf90d58cc72351afcefb4b815b8a3830339890e13495d3a4812ecea7df1e1baa5f47e7b23e01f70209b2ed47049fc813cd01ab8c3d5cdf668f0c1a0ec4200228456ced3ccbdaebac7c0106ea57f9c8e7d16dfecfc0f1bcf37996a10735bc5c8dba286f91375733976f111dd219413f968703121087ff723587f6eaf8fc9a32c004a3f619491fd9a92909ba67151e360737ec6eb8582c0a1200517e4adf618ba96b04093ccbdbe5ccf41266101239b422294f9a30fc208b742ed2e366a7ba70303974316283325de71654a738d739c1cfa5551fdf3b84fd42579ea3b21c4ce83db41af5f33bcd4be2d8f608442dc765f6f226842cdc006964c4e0469805c0fbb8261fdd57b953b6a582210e9ddc8ba97f59e95181a93bd6c1bdbe527f2bbdb189d5aa71f6c66da7175cfc43abac2c945222c70f4568de4c43896051cf57ec13980ae43a3929c32522aeb02ed665532f5895e745dfe290d3d172efcaef4ff428cd0cf4bf86acfc38adbf645787cea78177f9727bb9dffa7453be934649db7ff9112503884615c0e8a1d8414724b0d19298988f393a27c436b2b6734c44c5328c4a9b391ee22db93ee4416f8517d3786aa4b86708ca819522d4a2b86448d4b7eb62b7bd08c0bc8d415f421599c6ff451281a2216fd1b6153ea2ca8916bdcfb61e3fc1b8ce4a8ae4fafa235b0c9bfcdf91199ee6f7b78fed9404750feb0c7fd62bcb0151f9e75e676f9e2b6a65fc91f0ef52f3de26e5d1c52ce3ed726a9bacc01cecbeb110fe01bdaa31a36a2c53881d3416eb3087c147440c2578d91cd31d1cf98c42ff9bf93c8fb39cd383ea07a710694ccc059fb4b8133eb45f6c871c9c91c892d364233fd58590c803db2580b77196dcdf84f827ebdaca76ea5535dfefc793e6ba082f3894464b9c7b9d68267fe7c1ad6cd61980a940b65560b9ae82df6761703f12474c437becff82ef3861c91bf4a9bb228a29baed0c380bc3786f34193b18a9abf3e3a8cb79db62f91f995bb536b71391d488e68ad40631981d0cb68428c642fabc658ddffc1761e4a436fe5c90bfbe4b7e07f5bf14a91b6325c32d5130625028293ab85e7c9bc8d850a07ab808aa0277100cae33d608114a16fb60275bd41c5cc3caf1f1024fdffca93f9772a95e283d1201da8f210b5a757a1b18afb204eebf107e0240951bed79397c1d3278c477c60d4d417afe9a400dd88d1d913cda0e799abcb2f23de73c7788bdd39f7fc4393a8958ab9d739d093ab9b83774013fc3b1e9edc8b0029b121d1c6b8262c547b4c10c8ae09f8bfcfe23a4042e000a19568f837a0d21ed1fb8937feff22352333281204ba72a4b9f67f121d9c9de5e520f3cf2c949ee055b760239afeb892f72f9a54c03cae3bd6f8ccbb89fd1b605d036e0be4443be53379392d015353c63ea5153191a0f74e852b4daf2be0f2f087d13a26d52c53add9c596ace8897e5f68584b30df83f85d4312946569e48f26e3feeab895a950aad700eb3bb6fdb2cf129d9efb20522bd8af531366da847a73f000e239ac67cd5cb9dfb941d34c7b85bc0972c90aa7fc5118415d2bd42d3f584a7bc3126fd42433d0968367e3e24323c3107952d4d1f4471c81d44d0d5b384441c40fdb767affd0d9e9cc065f5b9419c64714f1358cbe3b3a890b12ecab0fd8747e2b0d46c8bab4342e15b5bc1508e84411d85ca31494ade0bb8445d8792085510ea7206749df5e5df7d2fe70aafc0fbb0525dd8426120fadbdb22e776214cb75f9f6ad3e7ae81fd5cb96391389f800a9959ffc7f1dd0e10ff427654fe2472b41c4ac1c62d86fa92a1dd20e1b3e876b8e47a941fa884bb265f35662a866521552f339e64aeed06ad96318d60e452490d79fd4466ce1dd047e3fb1af378aa02a180a22a37d3ab4d5523fdd39531a5a211402a3626ca71f47873debb363bbcbda0f7df8dc6028778923088190803a828cd224993e60648d0c3f724717c3763f95a7d31ee99a44b2f6ca51b8842c324844805a1822fe9690b2f5716634cd4665ed8f8e2753922bd19ec6afe48cad7e25d8ad37b2c88db9e4ec47bfcba2e7a8f952152384c2de2a6df1967798028a9a75c9c721fb97944ad418b4b1e9daa91a4463d717c98fd4ecd29fc85d458e59f3e2985ccd5508a8d5f8b8bb0c33549816e19353ff58432cdfc9e9baa56f988236e6b4dc7e519441c7cd5cd9035aa92b2b5b410a2ed3553c6f9e600bf488b999cfecafd4d963d2e5accc657d5ba230e8d41c2d684aad6e8a38daa33adf235a172b7f09c4532e4d1af160733659bc84378d9e98fcc758d79cb80923a5a9c20270c61823296ff35b384243f692a20c2bbdc47d1446296828fa69a451fb08e74b3d4c42bc82a46595e3fbc17ff0a9039fe225123fd2e55dfb19ca36cea960f58cd31a79164e84e785a4aa737ffef355492b0c087c017fac9681562aea1f369f4fe8bd35c11b861b82d0bad4670c0553c01f05ba49708cc6a3b79a0b44eb1e271cd4b1135d482c54461ec95ed5b653919d348ec2389e614eab2302525f8b7c3f7c3d727c4b72ec3427e5329d3c7c529128e2239ab9e9a1b7155a2b9aaa8ed54ad6698ddb0c1a5a3db0aaa2fa1bcca6c4fbce50ce5df0c2626ad3824eb653bdcbc41f6fda1facdad368f5870fe435b4cf9e4f92b795324803141582d8f3789a54cd95a4d416b8f297c94c5b49362600f388fc65e0e03cb70bb996b9e3f26bff584b82a97351bd45ed4a259c30723c2fe3344b46f4cf5e73dec3eda3da23bc5158c65d0a12812829567407c64038e6761138b2b24dd336130ebb70cd3617d834d8d68b234c05982165cf696612faa3880ffec934766c52291e18c682723f5e2e4af4a3a17a5f7bd29dc4c0f80327f1da220f0549e92b111a8f546580391a9c8241992ce1480f41a160fcb4f8ab515ff119e1ed6f2060115bc506c422d52a31e53f4c8d8f1f95980241cfabe465f75c413a0ff810a6dbd18161986906e0febcdba6774bf77b72dd99c2c61c57ed9a656f14e19beb06deb01ff791da98e7087bca19b1feb6e63780cc66689caf8cab09bf3d1f7f3aaae95b8bd98b8f5551c81d24fb750c49ea44301eaf3f9377ddb9c7d60511e8ac1d9c224989ddfdc8bbce1f90ee490b2ce2395a050fa3972d5b471e382f518e9bd967b2fdab01ac6f7f7ad18244a661dc88876d140a4d2e5c8fc37b49fe66b7a668cc7c0c9fbf21b6276ef16da105a6d527aee7c01194bf61e5bf6da004ca2a38464aec0afa3ee4394e1aedd785ff40a35a10689dc802c0f9e7bb73ced4e42cedec63815d2d397a755dff354465ebd5c39a6c5e01901fe97120181c2ad14d5623d586ea87bb173ad6d18c5638c363ccc2531346900c648f640985d548ac7e3c769c55761f1650cbea3352cf2910ef9c0c3e9590dd8f49293f0e652daca8ff2642ab3fb287e18ea43c0de30e99e0f7da1d9773eb2ebb665d8ec93683cb6938ca348cb63e668f293a28dbada30fb604fd83082eb417f32472cfb48a76296fc38eb8ab49681f81a9145cf7231b0f02bf8cb90b366a3dd90c3f7e4ad1835b2f17fa5b9169ce376b96c9251ad3d4fc595fee4c0b2b9be4df95ea27069c29b519be7379d9b7ef22af6aaf3da1407f6c1c8eb8a8a26ec7c1695a2936725ae7dbd22fa0afee943985bfad5cf314f968e2dec4624b4b805c4828b16339188e2c43cad4086a4a8f3bc53ec748d1f05f3fd5128981c070f0e7dd70442eab53b6856176440135781974658f510976cde242d75a568d94bd40e915e27af219de5481d9670821ade1b361db33d3054e0843304e18b3ec348ae0ee75f1de43e0f2f880000f98e010220d82baceb5c2c429c276cdc01a242c5461567220d69abd4c032e69f26ed328b3585578a281d875cd1094cb02f1dbe8c432bf9ee20c7ceb4424db9b920261341044689971bf9cdf4c8e08ba33e369f634e58850d7d8511765ae260970fc10eeb3522a919ed7a66d32cb413fe56764d130fa5f3c54e2bdbe4b2f8c3811a468a537022a059c528bbc1a38ecb099e6431642d192b5fb84293c4f297cabe693eef3f5c4d549fcc8a3286d5759b0b3f88b11d51bd1622e551a3dfc2c75d982531a478a1abae33292834e96c716b4e616a360822979a58fde072fdc891645576a513c6e844965c058a2ab30d8a23182a9329eb49b2a047277768e6affcc73e8324a3f0d921f56388397aac62c9acb2c58af08f6d1311398c9fed611d116e9b7535bcc01b49b190d9bc8e9c1335ec6458d7f5bc37c4d37454df6937bbd741b47361c6fc57c4b42b219bcc4bc8d6cc750c039e394eccd041a6c04430305629d0a62e296d349be47c875f9e8128b5342f089555d05c33eee7aac9e61424960c3936264edb5bd52bcb348f6b05dbd90dd875158147060117b08a82b8ab41a0d4354ad19b0e737a705f50b39aa08a4b3db97a0b8967f63f32e26b7320bd2c7b670d0ab679cd25939b810253951add11ae1a4000d7f8d4f527c678258711902faf099f5d51e11926937972f8c33b7b354643ee7cd2c24729dea4d61f567013c59270314e8913f63e428fc9298cca0dbeef7bad05e28cf8e53ec4b0e9f3a25d44fa8ce7128b2964e08f0b2f6f58913ab5900ba5256f208f30316d2c0cc86f17b4cea3ea30bdeb0d166234cb518f56ab21113bfd63e144b3139fe8720f3b9fe91df6fe6230892396e7a353c65799e2070a5953de47a1c10c946e7eab7ab6f97a8859e5769b5697aa5c3ab04709dffdf779529b6f5a155f43be8774ffd6a04673fce19f4ef78b10ef7b109377f0c76e2374e35bd923a6e50096d21595a9614e7b82757613cf92560d4e0b447e93baff3206f4da432bbc1dea2637a8967e61d93b21fdb0eda8d231addd140a837a2176cd346e61d6f8c0cdaa759f7429da07af5be16296030cb369772e142fae2e629c9b083738b91418bee88bf0c27747bd9782ca8a707e829dc5124cf1f92836e739458938a715072eb84b7114daa84ceb5b58e55e868593f80f273c95b1191a161572bf59f6125769837b2ef104e372f7c18739c61f41c52c0d5d07e69ea96359f7cbb3836cd78e30e621ca7188503f4a92b4ceab85daa3a1885db6ce0afe9817a9f76c9c528d33edaae54e7bad183d4c9589adf3fe77b2c047ce51343b4341b7f19ff28df05bcf07976ec1f6bd63f46594aedd88d3407cef1459deff7a9ee7a3986b4e3f8e6ae9e675652bccfe58ebfe55cb66504c5e8897b5a667190f3711426602879974e209f20c7194e4b920aa7da2875135b0f95e21f35cf369423747fc220da582eaeab893243b052635e2b94c418aa51e493887f396238bd75bc611399633b1e437aa7c31846a857abcc7a1d1fa7d6af25d448a7766a5364ba10bf861881db2a6a44be034f5a71dc894f7e9769708a99b3545ef142b87fcad5d2f83dcc173b0b079f569043f9ad4f8069919a2ded2690019623f31ac74e5e5d8593b1309dcb4eafecfa1092aeab2f25ad6b9bc9984b20950c30138b212fadc57b2a66c2700c43c7a020fab7e40bf9ed8d5522e8ec58c9e2491bd900509427825624e50e588eb8e37b53b53024304e5c8bf6b5f863e00a7dbf4fba16d02c5a28990bb28091c2ec87b11ae677f9c88ad71bb8db74897150cbe1344d3b2a58c43ca65735a5c6397d28f3eef51bdf253e01cf23f9e9e77d4b515171f8e9b999e4131080050a6062d94bb63867784ee6e64118b097c4e86438b2827153af187048606a1ea70afacf8f646a9fc439c38e02398af73b9216d6d743e6cad3f7c16c4f8915ab7243efe01e17a37d81bcc77b103f98606bddfd45759a10e6f0504efe8811959f1d31da44f3b9d36a269dd53eaee7b3749f150620b239734e3f551b97708e8c61fe41245eaeef8cde394987692cb67ebc5bb3bc090b8690692752a1d7a7444cacac1e689dbe0d3252104c285b18205c900846a96ee025fad03ee59c3f8af768d79d1611a29fb7665e721262b50fa9dfa84b5a38b2de8c051bec9a452f9a0c536b47c4a9ddc2528b6ba538b0e751d77a5d9b4af475651d6194c6cd473862f7bed042a6bbdfd4832402402b8d62bd2dbf385eb56737127e72e3441b1cda544dfdcef438a20934bdc2aac96762c7701100c12c05fb784513cb8feae020961c73828ff2f706ea6166e9ddb778db863925f17089d94ba99b71dde331d91cebfa0cffcbc57e5503f9130c0370dc521f66e103cede9bb25b741d1c85af524c5c9b8ec7ead21b06d64a46abc4ac1e60f387b6ba54b0c9d9fe7d7a29ffb9e849586f5d6d65af69b6f203763b89cf9b72c32a2b777a96e02d13061d68b9e8079e7fe40d72d4b3f6cfb783264ddb31e011debcc3edd9077b2629ac7b6b3cc03ca633a8235ab0962ecbc767db55219998c8d6bdf46fd878f74fb2df18a400c8f41b041a139771bc9e35721009e4056d02022bbc518ff161e1144f2c79a59e78ca4771b872bba09da197781a467cff02d8584e264fc0cc58c52e4f0322d27e462bc5fd11a539b5cff55c29f4f57267117825ce8a6394c1d41fc842f188dd28b7951116a44f8439b9f61e082eab76e61f6e152d67119e6a5a5dacbb863008164392b34eeeb64d94e21037a325ecfce4631680db3afe202e520b36292f9cf5cf80b117166f9dd86fdef0438b891e76faa32e0368747ddca661b4ef0c5c4428cce55cc70d955ac7231702bc11b6d4779146010745b215264affc741e5aaaa0396e8025d84fe719c4710c42be63d937130d23c270362589f8492ded945895338a61f5e152d0976ba5462b0fd699bcfe651ce3bcd2203bc9afba1481f9c76c41a82e1bcb85654dec3c37355cb2c400e598c908c741214b5cb08c1bf8f6b01713bb5d59aa1a15f1e2b2cc92eff9ec8c34d49cfaab65423d882446a919321a7df1ea771945b8e96b962e8dab9054194833401e2230e78af996337125ad560d88225d03c26508e7a350d903e6096b541c2905d6e61e6f0267ce0494f97c09911ff03d89bcd2b1198258dab5ac21e5a4f0604a4caf3ca4b07077c0378c4ef4af2aa1b2916e545c87eef55a2b669f6b12ac1e3809e6532f9efada8ee346ebbe6e927ee3a442b3b138d07081ee7a4ca4a538acf794f12bb7d4ee40971e8f1b10d73dcff9499fb657341111768552f039657c52ae753a8ce55835ef0373cfa592f014dc1b09ed27f783972062785453d15a61578635273e6134b530f9676e52ebc3ffec726b95cc382e4ce56c50ea3c158dcd05a65b2208d270584aa184d4eac458e74926f7fd6dc33b17a8bd947b74ac05a9a2366f92b4e112058724516a35c4b5b2395e358ed43fb5dfb07ccc6ec440cade7760fadf083524a42daa5696fa94e44a0542aeb0c855a18e46d2812df276e553cc4a8370cd77ad1c855a1cc103dbed95f5fbe9cc10ad090bb2e7391fc6f85defe91c92afca4eb657d75d2a541642d67d50b16e4875eef43e3ce27fac0a6e3a9c15ffaf03c963463c6bdb08b5fc71a9e9608bc68ebfc16b0f2cecd83c847f8541991b63d4905d65b388fb3f4e7d0f6ec06bb27804b6cd7566c92cce37fdd445c5bd97358be9e51ba477e5568660c42becba4e0c1421bb1a2b5ccbe8063e158212c99bae8e9aa371f781c2d5c46f3aea5495860b25ca3262462df0af0f0ce9440f055154466b3e6e94ecba45727016b2e04382fc9e77db569f84c4a9bb32f894a4b9dfb21b265f1b6400f42df72c038c780e6b67e9f15efd1fa96f607276eb79b92c6d4d7691ad7e4d079915bb6ba77e043c69d46d006260ace3185c9da26afc36a724afbd76d1a23847d08526f4aa936c16a3cc926b8f852f7ce723a27c1c2403722b5f5a9b728c0e09c206a091b5d098e442d6c0fc8e7691ba053febcdaaf909d5abe5b3c83946b595961f9108703f71ee6d7b5f79073bb8e69a38de5cbb832e18ccca32c7cdd717337559612282e7dd7b4d42d7aba1da8e47cd94e5f3f8cb5b82b5953d5fd8471b2b873b78a794d0c5d50ab3915a055dfa27c7dd675809d8795c8fce3e57ff9ea8c4f34d3e5f4d031242cb56f34edbcbe3ccb09acc5495b26eee81fd9c78ece5a848e2171c125687aa0bb8b4664eca2d337faf547baf44622480b4abbf8a472402fd7b22788756647778fa5453247a8ad188ec92de31c0ef815a505f0f55b7619e2ce7f5bb87f6a360d0b9be209694eaa52f90dc5ca2ae616fc47ca2f4a0e5a6641c4d184edade4b4c5d1c7b376dc05697bcc3ba5dc9b9c1d50560fbd63579fa3c17d6149748b56425654c12fe70a5d48f76acb5496f87169a6625f21dda1a660e63aa70009923f7d231710bdf69ec6f75a77454895cc068a82ff30f315870f0c249f0b4f094d20a3b09b2ef401e3c2c3195422083580dbfe6a8f1db7a7624a34011d169cf0267a8483437458b593e15ab883fa0a02b16243c1848dd61fede847003741604ab8dd6e1fc299527e09a31ccca935c489c829e92c91f9d4cb6459d3a670243f957ea9eeea7b0687c7bf7887aa265dce475f936d0019fa4a46802f58784a27815ce2607577ef344f2f4fd239e57dda9da7c25f3df09f079d2dabd943da37d3ec0d7ea1904c91bb4f11255092132254a947aabdda52939a53cd51d83460cba1c623cdeddddd04f3de19ca742e97b6247783636fc0ba8a3ae4c20cac98807829b63c3a95acbdab8692a5b9ad7e07abf29f07a6c59f9d0551e69856d6eeddcfd412c35f399b4317dbf3417d7cfed766276630cf5fb58e7777cfacaae7b5cd25299235966a0821bc8c768970632f7b973b939b57aea0e36335169b834f7bc32aa28b1f9a8791be1be0a2ca5ce09e8891b77d93da32f0505af241d17a8eaf7442c783edb612c69cb890fe907d75ba72f813aad6c17d1239c137d7eafb15cf450011033c83abf5220515e0886ca301cf3cf891c0a7fd8524288e4f447f8569b9e5078f688da3cc02a3d80efea4f902f1c2aed8ede824d794036e2e7a924dfd4764239f1e3ebaa9a2f76fc08fb0d84c8f4bced6bb1c93780de44febf9bde00871fffda8ba11212c878245aba81ad13cfc1ad111c4bfb9e4e64dac1e4e6cec09ce2aee32b89f97b314d6d236c43d6462ccc25e10774c18acd1a22b2bf529b27fb0777dc3b6548edbff57cde880a3124c75d4be695f4c304e4484159b6a6ee3d8dd6834e22fba77159ba7713759e66b588bb47a72e92a8137b35623e32ac6e0b3896fac14813bc0de7e2874b9bc71c01583042ac3b1719c07b2aabea9c2ac498e59104bb157732cb52b6d30c624dfb111d02647e224cbd12ca6f44e45ae997ec7d0dc7c6f1eeafb3807e84e132f7adecc17ad4a44df63d11514c56b4d6b19010e6536e69443fdbcc5a82c14f738ed79a2ae0bba622e040c5f80909e37649570b0aab1f2d7633601ec809b3e08ddb2424427c400d0bd16f37a8ed84f8a47b93e5cf5c0298ef92e3b1b35d811be8a33991ef958c606f90726e4741f07bc70deca71fb0413417240f8e01c45488ecb1c1e91b75c627b6e6f072be4d74f446c80c58e1ed018957b089bc9c8754b002cc6234ad6217eb479b914cf65939ec8b749800fd5c6d1d1500fc436aeea81a90bbc47b8da5a7328c77fe03d6ad67ebfdd93ba75a45aa7bbada0e2c5540794e004790c6a3869d87ec42df9f4591257704be9b56e2f0e328af07677e44c7eed5b8386e1bd74c216fcfc3db292d4c9b1a08ed60157ca43ead5b4fb0411ec930362256058411415d749dc39ba87527f25b712c33ea10abe3932579917dcd8f66f9a468fe0839ab761dbf0ac724056a52c2a844bcdf874bfb62774fb13b3861b9a7a83800af37d397f29b6006a5c55de2d813fda2fbc7cdaea0b897b983478651c7958cb482f301e67c9a8d00349d47cb241b1e8d46b97923d74f1a505be24855e1d32dc288557d8b4224585ed87572342f287127c94596838ea6a01fcdf1edee7ecae3d1ca468eafcda28ac89a3524467fa3bc158b546ef54e24f1cee05cbe4325e275894eac7d7aa37aebe580c5a6299ef2c80294cc47a29e31d4049c0b037d5e83ad941e7193134e16435e950d4004147f5d94ed976ab2063512690ae704c3b1155197427b15a356dc5adadef539ff67b142739d9b1f4c0e9873a631d6083ea7002a3dc0b44e514136f8026566db4421ef4148acc2ad983fc3bf631ac15915c7ac002ba2028546998be47e31466cf8c9a320bb23f25ebf201cbe47cb913d7199819b0cf04f01a9e543e7f54a7f3546e834a873091578e93a0c38fb4e2cfd7aa6e8c286b0820ba3aec6c910b9f77e54050aa1196612443d13fcf427ab7ce15775473f41ec83eb5c7b7b527685988f4aa88dd35443d10ae43552bb72e86830318f07d8e6ab3ae9fbd4cc49cfb648af515a2506cda73a1206287855840fd7342f7a91561df68f4da9412078c555f12791a13a012c9a35a3c972d48a0627b3337ac04c808dd46a5e8d4be0a5fe687a403108348d1824aa06589dd022a039e37639e89f20df4db365d079729922facb3f59147b72394e8184d931d2e4f94c4f45957bf4fcbb6952aa99543f1cda10cc6f334f7778381fa26375b44499ba68dfe8b600b2dec7312f751163aff6ceb46517e4409066bda0f5eb53b08d098a957ba6c3ff408caeac320e5f2e2beea5ed7e7e976f2f066fd763669cac15fc12dc0bc8e50108ce16e244bcad3d19cd07c4ffed7265ba1ef7ced21a7731443afa447796438d716ea8dc4bc92019e25b9e3fd0ac9da99b77fc8d2b500dc6828ae9d6a758062be3320ba1307be249ef600f69d90341c338d9271a575085f337b6879983565563c6e4e739dc1b1b55a7a40547033a863cfb0c207f3d620840cb847d95f4d859be834ae6ad36f0f2c671ee26e33498939b4bd78ec4c4cebe36a6bd73d2e02539c3802dae0425449022b7081a44556691688f031aefd6dbce5c3029105931861efb2654e746935d1df4e0b88a724feda72c31586b0a5ad3613ad28ffd31cd4330ecdd893a7c6784c0c154c71e760872fe6d989e2a1c37fc9e59f2b8e2629ea496200e924ead8901a1137afd7d576a40bdb62c9dfe2e579fae40fa6d65f58af0791f1f38cde1e01ce971bc21501d5c9e0d8c551d9047a103b877507431f17b71006f7a435c20561dc06481fd3ed0c5d316797be5876ffd72e5875e95ec5e586d549a857ba573d24b4d733257f0798f28ff0406be8cae53325df78a9a3f44092d9c28aaa850e13df0b92635f80d20a1e5f1b65e70470d8b8c474f3e49d1ac75f9019f509105737d522b05f3a83ecbe3521315ebc35f938ec8cb18e16c4b9d8619ab89deff6b307bb9cc99d42e2b843db68eab167f7d49422e13d9dbc9542023d4c16dbeba2a201f6fc46941547b52975b8900456b48359006441a9329953c34736cd4578aeb4b52bb3afda0e0d73ed9872d9ae1506961609789647353b5f9a23ed345113756bafae456de5a9be64eeb83a20353f687d59b2a083de2115d5f537d1f485488127400334293d84d518cb5970fc302254b982707e93048293577307877658846c8814df023a481bebf00200a9c6055a55cb1ee7655c20e64e4482177042515391feac863249abcb5d9b112267364b63d642bd7bf747d9a8a13da0fc1ed0f6429c0b658d36afcf3fc47a77431b9578cb7080bc9296de855636936e09f5bacdbde52ede78a20528d59b0ea2f7499bf3ed9f25baefd698ba7b68f637e597682e31f7e985cce6c25f295bc8329373926366cca236d848feff94d2c69cf37651be5b6ecbd9ee876fb897814794cc2c113db373769ee03089bb1eee951bd8051ff476943679720675fbcc960d47f5c5a0f9504e23719c5fb1739626e222f7e61b473012b9b2ebd67d6f252479ca94e2ca1cc997394d61191ecf77162e40c77bec4cf464e634b099dea94d972dab4e15e51e8bf91890d2ef1a155e26ea03eb48fb7c5ff51c6d64a322208278996875a18a7513ee41ca66545beb97f395dac7dfd13bbf6dfcdb8c94e06b70433d60a04842c70de155789feb2cc8d0e6c233e1a30621bf19e7ed7ce171f093718a42526c767ab67cc429e4162523858aefadcd24f2b4cb936e31ca0b8f4678ae107c0070ce06ba0b0e4ce757dd82225a8eb6eee83f7b61650046f89570e37c33608c3f0792019526a45ffe42ae6b33d01fddcb6f34dc1cf94e7b9cf1df3e2abbead162936ae1b45a26d1ad49205536762390e72c8b5d5aea996e0bb312dd10a2200a2fa6c12db41ff65088eddbc6a6d73a5ed6a29b75a793819ce95bb446ba80a094dab43d5bf0e2934af5a32946015db4c5fe63fdcb8f9e87669a5e5be174c1ccf0083e27e3173c9e2f97fb9149d2843334d2d31ab57f662b79b32d5253fc0035aa4cb7295983a8778cd479cc4896d5264a08828ada0384de44b86b3004aca65b21fcc1aa35c290afd12f8002c8daeb1e63e3f4c68f986520361e7a8d8a033ebe05bcb032fe409fb79b2db0fd50fb107c1119ac466cba9191ec49edc34a9c23ceb3e1354c19aa101f49438f146793ffdfd00e0b92f7f6a493c5ef3769ccc4101dbb2eb36e1e5bbc577a057ce0731203ba3f25b52497b8f8a66162d9e987476e1b89e9ad1182d1dee09be7fcda1a11c68bbd151b83e29e086a3d4967eb1062b858be9694ceddb9025b3d6fa169b2ffb2c4b840b1296f027e2fb80743b6eeb26945c7da0d0e955dc127cd00ed27d4584315df3d189d7372a4976031000588b30b7314187849204c95c6c940429d04a801cf806eb458b68b2611d43b2f3f54e1096141d659173501fac8b0b24421aa6b89825a5a06d39ea87d2f729a23cd09d90d80cf9841e11a2a5a9e21bb546e6c0f14bebb8392a6a2571450c9d27046ede762521bd2a54f66024fc78ad015cb902f6dd5227fea3a581386265888a73597b8b275c52a05ba9f4654c55aa4ead1dd38ef762da37017266a3d009d014b018da9783c49e2e5ab2c42d4282f8e561999b804124b92c6b593c7c38005f0ae4336562e4628a1b799a3a478606810e9fb6c395629fad250ae36b8941531bb7363282b3f03cfeb1e2e7bc7abfe92b108ffab19503db9c6905975b939409ee62cf9e9b534f5de336ba24b48d9534e0355aefce48cbe1704185fe7461d82abf52d6ff170baaca1ff32cd68949b2ee87c3281d827563b80ff5b29e1fbdb6bf75d074db5ea1a98c9c305d87a376bb1f0803200b36e6726863cdb302c26dd6cffa24d1bcd8ddf3ac403578be6adc5bcf4b3d6b415061a1fa5210b1afc73adf6235961429ed893132f549a3044642380737b930473aaf9875c608d32f94ec7a800e6e66ab056b0a24a2b506e09f71faceb6be98a65a98fee1a6fb4208934b4e326df3eec9884d278c2fc2cbdadd324a2db095cbe51ae37b47da3225c52a1e047f3a6ed50bdef52f7183b5177a684bd02b0b87f08ce15ab9ae49f5a5ebc32f43705d2742f96f2bcbdc88d91549a88433d0b0da302316c35d1edd8cea04c544b40cbf665e1ca3b9a3d42575eace06a71b2487d6b23323e7129f7d3e1b989826fe5b467350fbe3665e6142d0c191e87a323078c59f436f8e7e3a1154612da49dca65db95411e95f9a58bc833c01bb7c71dfb6ced1edc627f49f68216e34d5071c0336716590e233b1f5b9de60ff3dc54878d4998588564841cdcb6ccca7f066987ccd03cbf52f3f475d8aa31d7a1bde916eff90c74c6dd639ff296be3d4c2e4ec83800509c726feb4e0bd75c40aec450722862919b2735e579420a34653a2ee82a80dd9917f7fdea53fa0dae71a1585044406e71f531d4d252d4fb7569d36fff56ab5161596807b72caf32709302e0b0344004f2a96b23f2d4ae4fca729f595bf3c143ee8a4df41b80322febcd5ac639e92f0b5ee05e880da5daf07ba82555c3aacb9a8ad02f2cdef789ed64483071b30c156dfbc1906cea6d60c4d032edc90123cf407b569417c83abe53262b0c49e644fb1112758b3852d546b510397f1edb05d81c0942071da1f1d948789f76b6993ae8dfea23d7520d8496aa85e464bd1af9eb167ebd0da630c4e0b6a1ccf7209696e4bfcdf4fa24e324588a755c230c86a6121620ee301a3e59dd84ead916efa3fff79901107e149c5a923f29c84475e6b5540439fef7e1935bd79a9bef5c8b891d2a55cf9eeb8cffd04eb0e9514f5f03cdbac80f14ea63f770d7e0fc35505d0f9984db7fc6c7f3d52e93c5fd1fcd32a6974a4bea5992083240e43e54d47acbff1b0d1359b29cb1e61b6a66ac59465595ba0e7314f576390b74069cedf3623e204acee6a587f12efa40d97b3f28403299df0e29d40f1f5c4cb445e20dbb911f39cfce3aaa704fd1d945ebecfeb3453079ae515671cf13dbbba7aaf8fd548ed4135116f9b1933d044ad1a5a13123dcb7ffcedfe0345edc1c21f63cc605e5e1c77679ac090218432f178c1183209f8e2ff1e8c0b165e40289454904346c96135e29ef9a54e528e9b8062036781350e10018a3fdaf4c880b88f146082b7c91ab03f65ae8c0a2ebb808e0321c69515d5f933ca89cc430738183eb9852917bfb311da3639c37808837876c6dcc3f23ef904e259ea8d75bcdebe1fce5ea50b2ff2d14f9b1c0a0c827ef9d74764de0d12efb9a9a2e26cf13bdd20aecd6d64e69c2284fc0ed5be2c3f266b3bef8a736a34128e064002096a16bbd6683122075e86faa38c0be76e7b60f262f1499e328e0519f864bbb9d134d00345d8942d0ab762c3936c0cd1896eca6b77b3c01089dd285e9f61708a62e5ea4bf57c50decda5c215fb18ac149d7ace09ffdfed91e7fbf068d96908e42cf1e7ee7bc001c7ee9e378a311e44311923de4681f24c92eb5f0fb13d07ef679ded3b733f402168dc050568dbf97fb79afe8db994874783e27ad8d040ba8e75343c6762c6793a42247eee5a6216b908817f5edbbdfb88f59bd3ee4e6aed70ad9e63fe4587d7b6e4466044d75a027ab47b0ac41554eb6b5845fea274423d30712b08529419f811bfb05d9b683a595f3bc635400effc3793c9f5fa7fa3d164850787e26c6f336f534f0cb64756967b11f1193751125102d12f67b6138d20522cbe559cd569a30bc04963e32878dca2aceeb89b5d44b5e116be9d660c897864a54100fc8eb7551e08f0f2a88271e0d26db929c94c10909a0a7f7f52912041639898714abce1b36fd34da24d7dc709d2fb5c550945fb4af65679f6c2cbd8e318acc991ce8a6f23c8ca6659194004be6c00df23a3708f4bbda2b5e8fde13cc6488ade47d01eea0fef94450055f4af696621487adef653fcb795393f4cfcd153bedade7a97a0dadeaddaf2804ac051718908a14403ffcfc3abd80fe1f74421f04143d2146c39c5f8ca4473bf3dcd713e9d5df2685ab28c0963133fb846e0b306986dc1fc971035c50e79d2a7794297386ac741ce2b381137a5edcfaa80f90ffe8c01b31a604fb1ad4122171f45484cc7b7ef985ebeb9e6b33a0ec9a1efb6be3ee5a7b1560e1bc2182ae6480ee80716534e7dfe005a5c94e7ea1f3484d94047306b06c198eb9fee6e926e6f5eaba68044f5187c9c4949a2397cc8193b87be323be5c7eec83d00c017416293f6d64e0f027568181ad1a99813bab07fad415908c61d913dce4d69bd7bff69bdbeb1264df59616dc623ba4ffdc6a806ec44f394f3bd90db89263006f02942bf49e8357c1851fcad05ccf615efc55dfef67f8859201e2e366fdc7ed5d15c751407e9608f31bda2bfbf1d4093ddb4376087e8566568000ba4ff5c0590f1a6183a94630626c1d8de2650794c324e1fcedc3f23e032520fa3a7c63976c0e7b2b6838de9a8db3f50197168755b89c7647eb28a96b8586499a0cf430954de19eeaa9f42e1cb05009fef1175a600f2c02ed183e8c54130263a6d8bf42ff2510ed69ede61ffdf3ccc34c986f66fdf15dedb71d0d8341d620d6e745e683201b24ce6fdd1497877fae8ab23526957386b69f6aa29d7779f5680a25fc70da3f58a4abc321887f007c7ec5f97045ce0cf5bf80d14ef74e4599626828a5652ea30318eb2e604ac0b112c5dee9f0d2f80e6700f9b3ca22f2edea9756b7e7ce69954508f678426040e267093c4a5ed8fdc2030270d7bd2649b90f8e3d9c6ab2725d46fd346971d4e9dba6d547e4615cc470f24c4e06d00c3df031cf869dd71931432d7f0dc892aea2e3f5ae677fa26835605b66fc08abdbb5dc77e39783d60b8e8f2314e95f50f452437c1e04e2c80338d967d9e0a5f59b98c30a51da150e9171884f4630f450b0e34465ac86d67c36b5253e2c64a55754d0ee11a1b51d28b2c277da9c4a503de93c2cd5e155236608948a07e7efcf780f44a5b55c9261cb7769a4eb9e9f3bbda84543f643d9912d81bd51eb93e8ec01d4dc301e09d8aba0e64e57abd5977d78f4e6d3f05c7be77aa919c111b7b9c499a980d67330efc14f0a5ad841c89bdd18d50722ebb4a1eff4898e24a1dbc91fe99818e0dd593f6b7fe8736ed6001124425390790ed1b56f442805c0c58780c598a88c96830d3073d88a82639203631aa0776920813d1d30118e67dfa344467e4fe1c4408ed32aa004f770fd9c5bf787da487b5f6d8043fa04c49ac763998311b64ca926253495b9a83723851d8f373398ceac7efa208d95c5d188c02e0f9f4774f0219071b7d9876f5385423c288ae68112e5c44fa765c8fbbd17142c2d02e832d615c599e45ed2fe527d7e22ad57673d1b0f7b959d325c4e913109847b15bc97046e0ec6438c61003cf27ff6a6087f75f210e9f3885b1a6854bde95f813e8a4c8412b3205dccfe1b19ce8fe19c04f6d19dd25692f24ac7ee0ea3fae4c8e61cf85eebfcceb9846ff7f2f8f40b16b394f8263b0c9962662e8bc7cb853cd776384498e030f9df1e7d3dce58f69b9c7d209394355231611716e5881dd18e3654a7d83cd899c85800f095b6d6dfbab6ca6449f0a76f8276c546a4588128036eea305b51bd7d64ab9490a6b15af58fed0226c34178acb329d8877140dfd0c3069f9d76e07625f460402519c7cc8243c88d2fa88f9251ed02b8a1f4471f12f5 +MD = 888b5cb235da523b66911fa27932a2ef641bdb00efd3af974fee29219df06d1d + +Len = 104112 +Msg = 7408e820dab871fe1d9fec37ad7bf298789280b50e473f2303eb08e795d5a72f8fb5df406e25afb0c181d4d5d6f98f7d92e4a8dfa157b3d2d0f7923db60b3bcf9ad6bcf091237cf7e721c39dc0717cb1ff7e3a0e670d7acb001528b1bdd064f25b1285178cda5e3b5526c177b50c429d87073d29a98f1b745eecd02bf14ba8009c12449fa771dfe4d439d74bfbf268a8f228ba18af051e37b12594939ca59261237d006f2a10875a2c020b01db4a76390788b8c3c1980c7bc0677cd10405a77db8fcc26f5de1dd05252867819d3cf5ba8fd03f12276f6ba7545b8fce719471bd253791878809694e8754f3b389f26c9253a758ed28b4c62535a8d5702d7a778731d5759ff2b3b39b192db680e791632918b6093c0e8ca25c2bf756a07fde4144a37f769fe4054455a45cb8cefe4462e7a9a45ce71f2189b4fef01b47aee8585d44dc9d6fa627a3e5f08801871731f234cd1a59d6a49b0295753a2b4b03c24338dc95f1f8804258b1c55a9a917a809a784bc007f1e42296675a7e8e96c6918a3f33517a20ba7eec23eb7a8ad66f5ae31bec3d6e2129dccb9273634d0e3f80b6d910b941d09b02e6a2298fd93c3ee75485783a964cb9f42c7e89926f9db5b44e6d3c744df16cf7ce9549418fad2e4e751eb75e885bdd903e9463b2fc2a7258da65802ba76976842d66113ab51088b8ce4f70524b37ddd98b3acb6cfd9cbc92e228a2865522fed2897c4a1f534c954ce87e6dbde7c601f69ad9876879dddc8aef1e6a2c61024f096d3fbc9b6f4b9a334a15744865f2910ff3da604d78d41a6a88afa2c6d2f3b0505e172e5413f4e2947c7a4e9bcca2d44e1fa31ec40269bd57364310fbb1dc68cfe66c69f2462fb4980717c35d24be13d9a59e897420840f7b80427e7405a4c0af8ca6361e11e4576672529a36752d96d80d326806d90d56feee14b2d9d6350018d82d5b807afb142845959dd0c8d9a574e0c6852136ecdb08082174d12d767031536aa0bf8c5d3303094792d024a988d4a4c4a66e3d0ae6bf57d28e04114f572384c3cf834cf0fc2145cf42e192858622e4939494f84dbe4e628dc61b8aa8ff15f4a1ae76c49db6aa819775a91955e983259b173c6f9eaddbb1bbe6bea069ae30296d073efb4dabc64506f2d0c101f721f144f60ea9e6f98fcdc5b4945c7bad9cad8da083f9e6219b1a8483ff9272f924cff6fbb1ae0beb913d11f946c5c44480086b41eec75161548779eede958e36b44819ecce86f7cb0a89097c7be32dba04c06db4266c77b317154dfc14d13ef8f7e315920c3a90e1213a1407dcbf9e59525ffdc0d4f03f5e0c4a69754a4e6b85182852b514d0c074ffd79960116000678f6d822ca05c90ac5db133212715fb273d9f391d8d536dcecbe80250c1cf392de67064c131b754e32fcf14c8542dd8238fd1309120c88135aef6b69f941233f37df20a473009724cad2e7531789ee8c43545a0db7539e3f2d0881d153433d4017c7ade86445ad22ffc55bc253c7115515783f2c133ad7b4d58269f7a4639069e0c91474516b35cd447cc536c48ad45111f148c0c032d318d6e58a495752db01355bdad4e4e1bf882b41ca0ce435a624db37fd8848cc0edfc3ca7942f6616baa97e897867939b8e836bcc0d13d581534e3b4c3cf0776e97e0e79ad710c4fc0ba5af7a11598d3a061d95640002a7290059e00422196b3f17829abad50035e88d52121adeebe50048995a6ce364615a51b9c92ef1c8113c552a7b8df7c761e027f7ccf048e743f53c3fe16d1d01ab1c2eb4205211c3116c3a20b29da32cf2efc1db0884b8134e22cb5653ef16a12b787f940af8ead212d8acab687242f98d1a4447ec5f9439af8edb28d778360c8c752c9fb1a9e4bfbc869414c5923df4dc6b9683a008451f0e4155fb9692e509741c1d1e3dec6751b880dba4f087fae687e9a0d74d07348e11442218b8c48b628c743b58d64adb4faece67a012d9e396369c4a8b1be5c84d639e28c7649690dd7b856c97a24aa88245762253520e5fce908d7de631296826aa57514fc2915c43e9579921cc7436b22682f304d9b0d5543dc31f31b85b7edf8f7884fafb3c575b80f3ab407a50eda6f9f9c1face47aff1e64619b5d7047141b908a90e3720eaefe5608839d567362865e4767e5a59546d331f54b7b7aba914d10fa7d49dc37bc5c3a61a57044077fe124af9d8a5702c90cb55b7827fd88e207e96689456af74a7c0ce47e12f6319f1a9333250d6139f2257f0295d5813882c69a3d396896c3b5b84def91e805985c9d2a8092e16cb15ea7ef9948f6ae5ff023941d0215f803aa9b8e117571da9224e34af66b98c1ef6b1e977df61dcd55b689775477e0075d75b04dc89d52edb57487853313a6196aa3f3f72f21bd76c04272b4920f693d37c370fd937dddc788e7e459952f9bcbb995c29f3b505823062079cc443cf4120900782df09ba4e072eb9448bb13ec6142cd04f00106606abddcf93ee995131e67b9104f7e7b2ae109fc11d303751a629c96258a4eb888a65de49b7d008c68caca49e3e28b90f211b485e7790ca798582dadcede42eb137e5cb3bb171797479fb75f5d87a6717d1b19358fab453008ba8c504b5cac12a35b30e6e28dad5a4215a556079f5d913e659e7764fa3bb2cdf22f4a3595d8c3bab570daac511029fab51aca5c9a2f74a889cac811e65e846aa78cd8080a5772bc15932b63020eaaa4068e38d7288aa06dd014b420e03c4951333ba65d3ab6b44a142e45c100e7310082860e019afd88d10102a7ec884366343da2118f9764ecc709a8a620de487172a188c6669206a294751b200f4f025f662f56c629b0e0a0c59e78e91d0a90d09cfc1cfe607e2491faa4d4b8f39507b98970c020b617c854c82b357b10165ed2c1ea9922a9efd5bba638b5ef23fab1f8e0aa84bdbf2c7a9d413854d8a48210fc9405a3bf8d47a8a41979351f2af09f923e450af9af7f75ceb35e6d8e34be45b275c5c34195160bdfb71ee8e573172f19e4d8d960f171588da0f5d6086b5b6b9909b35e355beb7dc3116237be96cefef466ce66803fb2814eacb724d392c9f114a256fb273c388ce2cb1ba826f0987db656ae38d3e4b38e8608ead07c558a84b9e2191083d07da7d31683c0ab3af439d416e0c6e88ae4eec878397f6f2e3d84fd4b7244c7933b5d08b63307a7b07291d22a1ea71a9cc7008a6cfb783877238053411afe8f0ee21af80cb1e3c90b94444522b04ff684ea924049d95144eb0ce550654ba436ae127025ac88eb7ba6c99f81833e2818edcfe28ea13ba130d42a42891abcec5afb4ceb15f810953c0c83222bbe10d5de31d79fca059ade68dd3c2641e3c72d6860e1fa5d81f16786c7716ab845e0cfd2fba21886e98f6f796092ef3f52f2edeb89720c40cc93e8e841e4d79bbd267c73a5afeb59cf81eacf08cf2bb5ead8a450ef8dbf745a808fdd168e076a865a725cca6196971a0ac6f620516a6a1de0f734dd95827c9e4fc2e1bfad688923d537eac46798d36b928a7b51ca09b05e944d140e19e3ae2a4a2872a7f3799c385f339a3e1260a346a1bbbb1789a81d3f6b1c5aeb9b51ad5108371c59d0b90816310c0791f29c6b0dc0c151ec20b42542fdfb85e09a5aded522655b6fc5b5515ff317af6aa89abf536831cc4a1fcc5cdba5513197876dd718f1399c3452ed0c782decfe1274ea04aa108386bbe74f289bf9b3ca7ae3190a8f2d3a7b5208de9de149f270441818cf64524d1dac07bb1cf673a9dd054deb0dba0ede553347f88a4dcfdea259e295942495e4fda5019eae6d9b99c5c12832453c4e9bd672a0c955f037f800de64eee76d63f1b33165785173ea0a3128f2ad455845096b7a93cf858b0ae5284c2f833da134e9badb93c6aaabe7819bb74daa82c08a9d70d5a1899d70c10c652da3010b52913380fe2d182e780c8661f689c881f797cea2fe5a760233f2f453ed5fd6d513f165a23381db315ad18f10614775c75ff5236e5f1f23686709338115b6832f47ee06aaf6428e67e6cf124381f730c77c1b123f926ff0146c8c20593167847e70ef8ce7c0dfa0468e6d9667c3298806de82419312ed8abac6e46168cab35947216e6f052dc9cf31c435a209cf5efa19f9b308057ae851a008aa7d1c4c5a702dcbe3337f979159de2aafcb85e0f7f5554035fc031510c388a466ba0030ad7776f30660a388b6de8014346978b295085d548384188bc77eb91c81cea1022ccdc719107d3d8baacbec337c025ebea6b1a6b91436c239ace1d5f384116b4b68e1a2b0c9ef9a2b0db066eaef2ca45fbd7fa5c0609a7cc9117b53abf638eb76e2617e5c6b4e45b1202a84bcf65ef62039c0ff0d1115b49495c9b6b8509b9e1f19bbde7ead0fbce8b278ba2c3a0fa0babc33f7117e3f1636ca4b73ab1bbfff9e8f5f3789e7ba8c2c15499bbb22b55069b5374250308cfe29ff8f1ee6b02c8c9fa3da0e10a3c53fe5c90b9ddc38f661b7a549556ba075f8e8c5f31d1dd647c17d07aae6b589b624b05e4d3521e539714f1cf8a4a6768082fdbe15f292c6b83ac11b4045bad203e716456d060ecff4fb8a7ca3b4930b4318c3486633f839f465066f38afc34544f3820f19650551cf5ce4550909d3d72446e3d57255b08872bca7740289512befd68e1ba0e6a8031f31f7266718db72aa89da15b8dc5e3ab9be4eba2c66d72e7b1c851bb20f596c6b073d716c660c665c5e1069a84c43d93ff646b224ccd7a55d12116fbb53bbe6394911b67775f91a90302151df0a13ec8bd139ec7a2fd5292c73bd882b38221910743e7626cd24181cac775ebbba50dd13fb92d99b1452326f9de40590413e6d7714fe30d8d01fd7282f9ce0ccb15d336eb1ebfa05fed1597d1d2f5878e3636be3a7eb672c333ee069360ca890a3cb7802b09fde5953c4f6fb5dea0143b3239cdca980999f4b13cc465c40f695e61e23666448e6f3c7bfa350fcce909f151168c8a65838809c40e3460ed45b4b1cb7be003951c463af33d724662776d9ad9f683e0adcd49ebb28cdfeda31573eac3ab066cc54c7379e941adc269f3481d13003b35378ee480c3e04c72ad27adf1919a31089cc8fddfa82d6eeba804a262475d3bf2cc6f5fb2412f0359d4226aae7d6fe83fe138ec56772a3e29e9538451bd340b7d3418c46872a48d08e0aeb209cf53b4795e4349c59d60a3e4f288f5d2bcae344037301b8aa06471e999748eeace6d1c1ed9921b1363f627848c4afecd8df33da19c606aff119a3762c61c0539c3e6a8961bcd6a2a111552717f41a62a792aae0a2d4fbbb10d6c68dd314e20def6e5e04aec9b3ef1efe4ab139316f5d1c67c10e2b0a51587de028bc1a0b1e6c1af934da013a4a050448cbad39071f3aabc10e991ee0c8169cb852876dced5fca361776015a91972f5a3407173df9a99ea50fc47faf2a053f1b1dc864adab93e2d29ae3d6870a2c7677051b4863571e93c7a02614bba7acf117f1f2f3da938befcd441d8563b6660de4277dcfca335a726cec99b8d92c7b68072a2e8b2d4c4eda6d3cab78b63e4ddde9c1b5123a336624da1aa4d3d3617c8a33ef04946c7fe48cfbab15154849e9cccdfb4c7b7b0249905953d0cd6fedb640e269fd7660d356ecbeb8e4c6e08043c3dafec97154460b9d33bfa30e767931735dc0a099d1f1abe1008c9ff2488b62ab56f2b45b8fa8b535ae85a7feafacf609ed1b75658780eb55074ece0046114e6a8aff96a3f2cf4e3f14ce6405e42f0cecd8a2054349291e2f1d27fa5aa3ba10eabe4bf5b04664dea2abc1618cdba97b02667fd799e0944d57883faa672630af113a015cea520e6e48bc8726f95dc34c35e1d774d0156880b490bd668f991833c9454750b9e07604188e473bb63225866b8fd56251ae4dbd307fcab63ac21da5f928455b85b643abfa6b2a29292276318eba9e2b8373ed0eb29b8d23d06be50c892c2504b69d1e68d6995877bcf55e5685a85d56cd2eed7a232e2f34b95a187060960cd3b45daf459461f8add67287fb38a1386c99a5f809697ed7725e585fd968b12451e8be9d491d0b3253de63962b8fef57f44ea1b4c46dd4ae63252c625088c49505b888917c57df30f23e8e36eb72d9e37653eac9b21777dc9177a0c8dca81687788d8232e72b2517115dbb0d45c9a6047b1248e0dc50b18884bd7a3986b0f02130d076299181241239a3b4c3407c9fe18af283a148fec8dac25d835f55899a8bb7e72a1d83422546f1784001e4730ca32b5b62b3000a05fbd5c183df51195cee953c66b7c35470dec144266f3a973571e6b5afbf0c5db013454f426482497e725035f49f5ba14d00316f2fb449ce61744469306c72de114998718794f102473e723c9b7c521004d5ca6123781a01d9d4ccddae633c746fc6588e1b17a52a017b83b822f6b188dc841383ca65b319e6b8077af04b720914b20c0dc796a6aaf250091152b67ff31e35953beb211efcce487ba8c0cd1a8446343d5851b9fd6b62e68eaef364c4381312d6f250546394d9aeb2d0e4913ecc4e7472d68127b1549b6499f9cda8893f00406011bfa788c7510f3458253ee5cb749b33ef2189ca4ce4f3b359a728d5f030eabbfe01c1977f7c9687aa4b7c1868ffd1090bf786513d84bb62364a8fb033ea366d23de4c97a3a468352c1ef5de8b393d7a92cdc74d0ec4e331f97f8322f0754c00e71ded911b0fb0c648664e3f1c680810ec69f3c6a7ec94a5080cac340f1a55fcb1884e8ccf0594c065ea324304d559538293b3c4f044f548ccb9b4ed782179e7ebe51790a7d03cadea7347f329c859caba15af50d1132fa1ad50405613d2df4bfcfdf0a68bb7d11441c93556748830fdfdb68e7132a369381497fb75c974b0af4c987fd463017b7ed1b4a574cd5f0574b43df930fb3acc9667588a548051139c437e6f2417f7617202fc3f561d9300b845739793142180420f5998fb21af31994976669e8fe1ac783c68aa034a6d4b501a2011a565a0acc47563cb7095d7322ec6490c49b3078318e7c18f833e350bc4990c0e6bd6fe78a5003dcbbdc2113de322bf0b2d6cb00fdb6bcf95dfdf336b9d2cfe37ef50850d6c17b141ea92a57a41c5a00852a0257848315a651e17af91623abf3438b97b93a12485d5fdecda12cf17b4aec138afe5e89f2aa648cdf0a59b2b18ac4efb2931cd8e822e00b7f92d1581c3a2811d947e411e060166e93fd0d066ce473afcd71077bd70f5fadd4af29c69948f9a351c6ddd17b81e7f52e4398a55acae03a6cd58271917d1f445158aeb38f01b156a91d744f006a49bf2270a505f7989b1df5230650a3e6bf5d7a21d8b579feef9a339e7fc13b93cc2b04f68abecfc7f4d91afc0baf8af6a057b38d2022c69b14ec85ec28fe6998dfd74a67d2264fe39dda32d31ad4b30772c1921d1da21160c1cc0469385d36d40532672713d30475f6cfd12abc76b8a3a7399a3439a9d6da66c7539806440fffccdaffc6c84b69f98ff87a6558ec0855ae1e30750cb08372845ce81b1b697156a72f58c95805fce8ca02933588cb3e8807fe0951ff4c93c39b0b3654f023f78314ae16a14b8939be456cbffdc49aa7d53547694d99d4a4482b40c2c82d1a0f0fa5d5bdd12b4bbd0482a5553084c0e0a7c688e4ea54ff217ab59c11f71aa22446db44c2eb7fd3d335f22af77041d4858a2c31109ac90297c5ba7bb8645152d3e31569aa62a1a838dd249c1b3f944be2f6e6ee50e15eb573d3aa7e0a9259a29a4ef4b2f8b9493f3a548a4744f0f49da568870f4a509e5e420f16019cf3ac27e3f4e9cf1251cf1f7456a3dae926db5039797d12415b00839ee28da4f41ac1494d7f750cabeebbbf633e01b58c63c10a0b843995fa831dbbc6e861e6848a219d434916fa19c2879583851465b31a3e01b8236d18ca4b5e6d66ab4334e2a4457a41dc5025d08fcb4841c66c79d1bcbafdbbd1581935263b2efa85a21e72fbb586d5b3b0fe84a8ff2e4a7c6a508cedb0448318baf5cfa64c670f21ff11da12fa498b79aa129aa08bedfa119e88391fc68caa53e65cee4dfaabf0eabaad6c6c7c18bf68bbd08708f9dddd10999f5ab5662c9e3d6aad357fde746c4a754fce8ac39b0e3b56d6de34e1946003cbe4865107aadb1fc87529de6046cdebbf8764d06946e45c1b8404c6ab983f65a6263075338ded8580234fcc18998228e9d2c3dfc582ce356a769f30e05fa7b0c8a2ed94625c52091265fbdb6ff345ac94b0602b60f54861d40d12060861457fa40912212c8c8504ff8bc27efeda74c130aece35d404df6bd8d5e1b88c33951cb8b742cdea950323c82338491db59c115e3c62719747ffbdf96f92baf45d2332774bf3dd351c68cfecbad1ac751b28077dd7c171132525d2b628b9afd9245c3b8015a9e194790273ddb1033b7d81a53e001f6fb6e022ee348f9faae9934fcca233c2d97d71318cba2bb461589f7f900f8561d1b576c7b57df6330b0acb35d0f132d216f353ec43fd47235086637b75068e4d7bef5f9a17f97a813e75d95d25c2edb1c705c4ffe4d7c08c756761fbc0bd8b30d2d7030082319d18d9dd564c2771c4e07e074ce2dbb4286e245e03770f9efcca8b1ef9a180d0de685183ba79529868ecb08a444b852cdf3701fcd073ce156368e909abd3a0419ede2a2b8e7b23a14a44e30153809dac657582a6418868db5f9a9129a23d4cfe8f08e8174ab83726d977aa0ef32871bd4ba82afcef1b7c3b31edf811754503720f670fd967b6f993a6f369f59ba9adda025d6f5321a384cf8ab1a2338d714046a08706047dfde76223469767b59aae7d29f3c46b91c70f02dab414226338afe6d2d76f0ae6038d2ceeffd6e7e961f0211319ce88a7ec676fa233c2409f318ecd26d6af7f485e675e5a8d9cd8afa62f605e2de24cfc8a4a8061df311089c289840d034bb40d74e271065e5dbc60cd98b57baea42ad83714cfaa04e534bb821c8605fbd85bbddd9b0f73009e25b54ed88afc1a88a4e36942b7db53531fbce6b45da21eb9c8c1fefd741102d28715a06b7b4000144da69770d386390f240676ed7551fa74add25f965970e39f62ea78dde0f7edbb778a481bad2b247df410a9145795fdad5d3785d23a0301594bdc2e8c66843202c51701af9f4aa4240273f3f59efeb6a86989f85d60580aa4a443381376558b6eb8d54aa934654695d198fddd95fcb41a55422d7496d06de60ec83bff9b1c4873c53d999516fb7a57d4080d48e7005457a2e8abd4381c99a1ddc3909d3f28f7967cb8550f918dbdce9c49c8c40cba3604c4f5d9e8be9d1c7cb3dddc98ed1c276b31fe33553e8c9f7eacc6b6db718ac7965df26e2ea4c264bb036f766f2f564656a7478b1298888dfc68074e0bafe29770b056af02852d11014f01048c7077d2dd2f5ce2d419f207ac5093f4b1325214487e9b3320da4d9fc4192afd7d5ae16b833c76c0f64d69ab2318f541788369cc721b4880f60ea46f97e455d7be49335edd715dac05ad5fd6e50393cade2d9a3e8208e72efebcb20ee1231a19cbb5de5b40505a1a9eb4351966c307e73e8b53c8fce9ef83a74f070c2467d03a223b52bf504bf4831dfc99f11cb9ca2d3647372a4710da259c4013e5f62520bf5e44311981d6c57bffd0eeec9b5a430341cba4a0f5202f8b2a3a590acaed742fdc6ae9e86983456bd0ebb46a57470b1feda33ceb8b9a683aed984709171352f22919fdaa5bd3ece92da77af8d4f29ad9864860588ed21cab52d47e5f6f5935bcd0cbdceded3b347a629eb32698df7aa6c825af765389a55306896f7c3801a4c6400b1811a24ba4761c3bed621770132e1fe57ad38e039ad855218afe05bf18c513522fb3ff67c582b7099a49e5570cc5f9f262eea2e28591eb3761436ce42a3fa73b945369221016cf724a2c66f6b014e2c6f82616a8ce16153582fab203217c9821e66e840d0cb8c2106da820c1b57176ed9b287dc90ceb8fa6406289beb722429f8663c48b13cf3b6e854bb75a858202d0dc543cc59a78a6f45a49685953b7531ef4e19f1edde097e711757f3398cd230b3c37c8112f43f7ba10edb2757fb2363ac256984ac3937404a2b40ccf67a954172b51c44e13e3fe6214ee1c95a399685d7f3134915d3e3c61a985c4808aad226f2a20a5dee0bf1786c6a8eb3c67d365f18c1ff88513677d68a6695b197a4efa8dc922e1462e6bff82b6dcc2cc2506bbb1596158987ea5939429ed14dcaf1568fd88d70b065541030055c827d76389d5f797a3d93e075f3b7e948fa66ca186da38d9cb87b1edf4de6a34198ef0bbf3414ea755ff08461ab17276af742bfa19eaca4c6eebbb60edce3ac23f5c8a96d98a2109063e69a36eb23a60eb029d0155071c414fab9556926efc90b835077c931d195d231be4b7a1aa10b3b0d6525faeabb968cc4bd217993d1a20029d19e5b68691e44b1c0beb79f5a01faf63de7dbd652c239350f45c58c53de0acf9146aba33156eccc331c74e4162e5253f83e3d7bfeef2033f6e7d6773b25315dd995424bf2e2d468618c3a509c3a4b0cdf51aa4187c54ba7bc3032bd52217ebcf1b6a7c9746d046e9037904bb6ceed093a49a990b4eec17aa74763c76078f8d221cf62837f9d82c70944fe3d2a924133514dc3d04e0f8a920054f1fc2dd2a888b109fce3db1a585914dc0c8ec12d4e706b867e691dd3afd90e8162c380d894c7e88bfc504f8d8e0ef82743a743481ca9d11c65c4e9df37361bf440862331c675107eea32a59e2acdff4c2aee788ab4c7cc36fd477ade2a906dd512acdc86467b6f094ff0a3f4367d6f744acc289c1db0a2fcd05b987690d14d4d619d747f1ac24d55b1f41238b90891c629aa1a255f4e9b9765690a4f72e00384b4c0b3c34c31f4899ba5b911bc55ad6b51ee17ce8387012f44d79912d7a5d7a1937f60fbe4afabce926b6228464c0b8a4a02e73f90451aebf60e0d67c80811cc864145cee826b94c20aed3245fd5f24c9a4c521f8e6f30f402772ef54cf1f82f166f28e5627d672accd6d5af0fd8acd9cb36201686ed8972f079c3656b48d5efca6fd2e7599cfd911e4b306e5f3d7f58652618ce7fa76d8c497b965e2df5f0372baa0b7dd66bc3a89f76ac0b56ecb4f1ee8603ec8184266a93e76d899be0912dc0889a4fe0d10098d6bd112efdce92cef0bda91b946ffb355924118ebcf200f9117249047fb9fe884c89267e5ac96314f233d201c14d3315209a4a14991184c4a6cede45bb0803a18743b4a478c66dee7d5046460f07173172b1dfc3382667b6080522b99da7580a115183475caefa82187ccc938785efb2d6d19a45a31aeff6be80dd092c7e45ec721d5b10106750f84b1f2e902faf03bfd562413fe2d365ad50a6d7dc7175116f300d04a79bdbb7799ea132e4116d9a81f6cc9d5cfb3b110247ded7db727506bad58b45b305f0792d9a6aa13735a8fd20c1777641f8393a1e2992a7ae39646af6e9fee8dd5690dd3bc6e24233a14675c3becc9499e0b4292881290dfcce2c864af2ceb3cc97a22acbaa72df7e5f3148927631be0abc962749d40bd26d37b3a2df7a626f28d00ea907cf803ec0774fbeb6700fbe3c93c67aa9ac9fbeaa7ee306dd0824e49b07bca215bc7628a2ef8a215734cf5ad96d2c6a6f904f985baba2f96b257bd9cb46945c1df9ba65cbd1c9b79c4bd75b8653b041c409832a28c4dac4b157cf1760947d21480fb6bde525f4caae3c9188ed4b3a45cf9ea13ab7d372b0d829896703fa6237bd85d0f895f1f2a0b58f63abb660b2c0b9d71291b3df520308200f8f5c7e28e7a5e372dd853fad81d8cdb78a899700f8a93c3ef7c2f1620568c6ca57122bb87928b203365d160cb73f7df4ef0cfa0c36c8568d338c108a0021a22289ce06fa356d79ebc9c47ff789132782a0ea90bec13dac680fba44b23a5a3c80eb3719d6639dc0915f6380563e7c53c965c961ffe331c63551f495c2fc3c1d4a47f66b354adf105fbfe224111fa18a31085276b5e2cc2d5dc2e10ca28eefccea63b204fd335cefbcb3e8701174ab53224f2cd6ca073568492a2ab03a389ad1c60714ed18663ce810011d6e3c85c1370404ff89249a95ff6051778a724266b548fdc32d6c2ba680c4722b257b990cbd3fed7598ade3137b09fe6fa033f37affd60c68cce3cac2413eceb79db7f9b46d3bd3340a4b29d863aefbbafc6395ff37dafbabd3648ab9b2e7dd6cdfd6eee0cf607de4e7e8b60c3fb60e01a6ec6e1ce6bb933349d6b5b35b2766eff2c2beb86c17b52e386bd0d5988900eca4b4c7fa93e19ca9362391d7c56733ebde61b165cbc641ba04bcc05ef48f982200a5e7c0c6b4deb4a232674e770d0a06ac9d110f74d7ea2f53c3cecdde30a04cc2a61897079c20fd96eb7e40f983b4e8635c24ddf0b078352d68414bdbd4de11f09ea0a7df012c2c193620d4d42ff93a0b8834f8c6bbb3769b9363ff75e31c1a9477c817d54bc8e834fb93328f7ba0a4ad0887887e5e6397a42c7a1233c5200eb518d81072e2bdd9ee222083b2ce73cd4fc465b4a1034f43511bcfab9de2b2965c6918b93c2ed2a84f930fefc68f385efca418a4b6114020a948aaf33ca29c5a9052cf3bbd98d1fd5f37a89d5228b8feb990e78145f0fed6b49b5212976ea50159bb47bd7d86807f27f433b6de00bb5690701973d607510e7afd112f37ac9434bf8cc6680361a9d7aeb3f761f27f090e882cf7a1f2c0017004542d72a2c6329acbad9563d79212adfc5d3dc7170d69cda9acc9342082d5a3598aef04622247dc8406fcd7817f84a81ad84d0fd412a43bfcd9d753e9b6965081859f0dff2a9ba1f38042ec8992c6700f0e6f62b2f6820188996827d4c20c1e852f85b4ff44f5921e01b1c97832a2aee3e5ebe83821cbc756d5c5d8690fffb66c6ee922ecda1e560f728f97d6c6de0a9f4708c8eefc47346c76378d300537bf3e2c127f4d53df96cebc257d29b8432b4a1b0f2b5cedbef1d462046eb20c7be2035049f2ab17fefa61c5bba4fb6f99baec4948380b5df7a6968374a4768d95c7c4c2d6a38d8e4329d2779934d353a85e8eb8fb1882b5bbfab8bfd15704ee4b15896a01bb7b2078cc29b906543acc37c0365270f2495bd295440061aee599667458301262fd35638a6c724c2cb7421087effeefefe9b90420412d6ed2a0f4ae8e3bfc50bf9c35ce0ca58cb1e5d21df95cbea4bf37e9351943b82e3eebbd69ea0839b604fbdf887ffadbee7ea713c5bbe7ad2d29f1d139d8a5b0eb1920c55fe48d5a46763d4f963efb1780fa9903a31ecfc37f75462a2c0aef314b49993f3e62c3a794eeae72c7d5b7602a6fe4291de9bd0883eb5d7a7677c84439157fb36d2d522788b476d3840ad7bed423af0d9ce6588521d25f4c7fe7d9ef9ac4faa9560de3e30b0fbcf733a70339665f233889db494142747325ae22ca3c579f31aa60c91ee10349a8683e72e2dac86b68314a913744cc17c28f6def423358ee4d3df32baa2b5aa864ad0b341da8e38fa58049d0cb97a90473112418e9db85f975eb77f930c9f675154e04b45bab9d1303aeec5fad41bf83af343963683cc607d23b54fc57c1c1f7e6d38fbc45ecdf3ea9429d08844af8db9e7e1599675e04618cb5f3fcc81da178fdc516128372925abfc4c391f8bb3a56677920828d4a2550cae1bac12ae5803e82ac007fbc469cad6fbdc5c3b39b6f3a33adc2e58307131ab4481212261f45929e0eb5cb986ee780dfb40d665af27ed029a1648bf19db407737164b864d5d8bc78759dbec1f4591a3731024298c94f6072dd6c3d7d15f2612fe4167c8b0e21043a682020dcdfdcc5a0bc0c1e1227ca3235e944c1d276b46e0f2a922443d307b20970a6b8943857c742de93c47314d78d9b4e52df96c8e1783cca3e78362b750d1014974f8e06b169441efffa61985ebbcc930061721363c5de4c84420a1e505e74dc5bad7551d4f3ce05b98984bc4702ef40b50d0d60219d1c39cb4867b481ed60505a9aef22a7ad0a1a273986877aab2cddd8ad10b6034a1e187a53f6f6f002faf9fcdea48012de1ee5b2d10c02dffdacf3d307221ef1130d71fb2b5eeb85e56a5eaa403e73fdd032eec21bc1335f4297090de4ec9fd33f11cdb598489b29ddd907ca8a620350c96fbec0dd4a24e0c015a8ee0b1541911751b210625c0fc2346f7dc682ba39f312fcdc12e052dd4bc14c57de46460c14e3f6ab7450414e3930534704f1ee1ccff302d022ec7f64898b679e455b270942eb273d492ca060771aaeedee9ea6b4cab3a92357c979c381668c058b135f3f04760df2f7bc204e633aa7f8ea53890acd9c185c183ee9021a9ce415183697b743cdcf51e6c96a1fe4d767ef62d63f25c1f47803cf1477273e749655558c7677e53997e27f1a25dbe43a155abdf0710e8c04f0a0e313ca3cd435ca4ea8dca589d3008a2e2879fa8b4aacdac26369c7cb1814a9bcbc038b48c328aa867af0cbf4f66ad2bc4aac9136fe73deadbc09e8664b6ccbdec2ac6154f5955b87348e91c135c197144e7c91e4e7d748a630987de60f537d8f5dd6f56751c408d93c7f9ff7774b00bf9ab1a39def22403227dd2d544b13e756f548ef89bffcd702fc8b9c9ea652364498136e6afd9af0db09a1a1b7e7f232bbf2cbf6c22786f08cda7931bfa91c612baf699b52fa897e283eac8017ca398646bc27b21b71aa7cff4013056168f1a7fd467dd15ecc3512a12ec6737dde2f0a80bb24cc9b86b0a3e1951fc18ccb1b3341c715b9955ce7d5cf41b722ef0a1ee7f05789ec4b4ce08cbc41660c48bae12b7f99fafaff92e6ee39e0463478364c441ff920b931ac826017acb08f9e1d8ab84024f43da4567c8668713d521d4a024a9307afdc578edd467b3ec5f195dc5f010ad0cb2a8d91efc5e25e6223e82f8821d6ebfffcc5db3a676f5f6cdb36dfa82f68054668c12988d2310d7e50e0cb26f0700bd8c28279e1eb7b776ff5880ead69df2b2ea048088fd6dce858800d0724dfe7d102d696521af927ee94e69352b5d8f9aa4b792b144cf86c55ba5c78ccc918c5a444df094d2db9fc2ca4575f9109a33dea659c7137066168be6a8b28005fc091eb6786e3516154819966eff5b5f2f4335444b022580738588a31b6258c2c02d41034722d4800f23f9da4575ca4b6f0644eaf5e475f95a6c521d78578597904157a704bef1950babca124369c489dc15741704ee633f9d336eb249f284e8deedc91e6bb2fac9ad5820baf35be87f18f94964d270abe7be63350e0ad3d52b2e9b2bd5d68f7e9256b19450dfcc84bf881a4b30f92b8e7620844b8d256c04f2e1d1d669cfa4eb83ba307b50632c57bfcc00e027e36fa96f860f28bc343b82c4ab1a7f46c1a3d0122a5d6c5627fbaff43735ae961bcd7b38317c4317b1c2dd14ecdd8cf9570caac239a0ddce88db1bf15c311d281cb58274c544312c2882826829b375fdfa300a186aa35616101b1a2bcd8ba24a70c83d89b40f596602faf122d404c0d125ce4c893fcd5be9686c3927fd9dd47992662afb80364261cbacd8099e79f3ff542800992b9755a4cc2ee77a5ef03a320c2fd94eac41828bfd187550cb6b95e51fedb4dca089e9d4e5d3a377741b3a003885a707aab9806111be77acfd521d3ee37fd7a8412d6ef6300afbb3df875a60c1f8329b0e16c26da41f4d72a6d5f059496ef7a08fea8b8525356eb3f3bd11d013080a9d48e1cf2e2eab65464a6fc5b0bc2b8339ef59960e4fd36afc433506dab6257d62ed930d0f1bf36dac7a77f3f1a64608f8e1f334fe1a757f0160779fed25e129a06eb312ace687b4f999970188b24f0751fa3fdee11f8c2947be0d4383eccb9dca3eca767428c8d9d23a3584d24a96fcc9aaa7fa33b997e853ce6ea84b65252844e0318ef15d375aaadeebd48ae9ce57e475b42d7293193a9a0404248039be7794f580e2a0fe73a607fa22a70f0a45a726edfcdf3a1690aeaf11765eded4d7fa5ee141080f76de4a5e0e6242db46ad790575da85d6ce9ea2f7592d9dc3c1123ef735fa75997107c631ae235e7c09663c04afe5c7f52583b5f76da287cb88eda3f2560591db576098173bfe406ddcf07ea8eea70c01a5e06643a16d934296dac7d4d40b1341a4793e734a5b9f2d3bdcaf66c486c878ea452250a6f756e5655a191332634068e2c237da4bb3d146a09b4cc2c40d93e74d2278a2d0d839108efc2641f3b6cfbd9ccbf2b0d2af7d26a5bcd5516fc3e4c95908d7bed178b0507e316dc59a7e07cc2d172d9b51970959a5a1e7771a12319b9848de090b616311bd8a5e2289118ef12e0416fe5b12ec6c3afae1b875a100da7592ea15f11ab7f0c76785fd6219dbe91a436d5e51abbcbad02852a9e4d8e9029b579a7a251d256a1669639a981f64f07c258f3fd7b9f0e20faac8affa2240a054174d8a19d131ea350075aead6ab0c3ce5afb175fc60f5e43f2a25f2825be304a4291da31ef740dbdbd4a8e04b455cf8b344f894c788eac07a07e1be15ba83ee86a05ff2fb05220eb0040dd5054ba602d41eaea4019f547e534ca8ad82c9528b91e084d45dc62d07779f700f2f455423f145bdebd52b9be471006105f210b9a36bf175926cc0c98dd7aeb8d7efbbcd23b2c20bb269b626bb7d2bf40f8c181efdbcdb1b734f7d5f677838cf756d3679cabe9c8240e5c75fca1ed548137968ea622da65dc12f85555e03459c31d33ec0dfbedb09df72e7addbfd074759e088869a655b22c2335e153a20de075346590a2c598887d5389c78b4c1c9d828ea01586d0d0254c0849205c37609f822f011bf7738aae66b5e71291e1321e3cabe5acaa3cda1da0149a98fc0aed057e7f9ed478902490de90ceb26e19b195185861b43034c429cceab291afb6f3b0ceb89750a2a606de4976c94d8c500b808a267cd2b5633ec826ed29c0d3a62510073c6327121fa1f53bca3f3a792eb06f1688bf7e96429a8742be589d2462f1a19cadbabe238776642a2dc90fc0f030cf4211a21e7f5d77d5a4b0d79d0e77d9e4037ee68c635804b998f3df43d05f1d1fa133bd38cd1e5731c1771f36fe4f4e65e0128f286e1bcd540cceea6d43d5c5de988179640bffa92a2d73a7f17073df95971b0d08804d40c1fa1182e277cedb9abc6d6f16b89bee3d4d38fa5301600df1bcfaf8a36666ff81f55e315a08d4cec26159f6d75f5db6d9b5299ee22dae4a18a634ca9f7ce36a2263276e2a53720fe44bf9a90c7ccf638dd9e7fe1561b92469074b0b43206d0111d7efa1da04111f8eb0bf1e5c7d5ba4d84fd6a0732a1b2d6144b023351d4e74ded82964ff874c9e10540c9f1dedaccb376b882e61f33eb5afd316bafbb01205f7c8673ff1598edc179a74d3e74a1d7729d16ee08869be5d8356c13afd855254eb4d2b8b55f7528a12f88a253f2f48193df61d7f5cd9f495ba34421bb10979e227cad8ef93ed21f880f2bf3b8be99721d26df64335e08bfe82f03bd5bcb9132e4bb611d541a787d7e01d766f64258531859dabe4c9f9dee89c1ef111871098a9b5b348c4d5b30e88bedd52394e5fbcc8d60980cc8fa287f45415242796ac84e4f436f046d69c008b8bb6e531a0e4884832362772dd66f192597727b071e9625085b59ac3aacf0870c53e71e1027092402897f27059a3c652fac98e248f63ab7cf8b3cad3e8d8a0a909d8babff970453127c3943d7b0550b6d660b9fc6587eadabbb5e2e0172543c4a82a1236fc602babce4d6f42c7f82b2e7ae15db09ad28afa5d309580ac418c244e870ade61cca0107a79f618b6f8d02a46dfcbe975e0164c4bb8353e1ec9c4786b94172ee0126cffcaedcb37ce83ca5ac89096ffad1d175105c14460e50a97116db5c9a0edddccca1e1d5118752594007ec8417ba706089919c0659195a06e8fe38094ccf18b5a10028d1a43515aa7ebe7cb5dd5da2754950649fb68b717d5546b690b0b71a79f6216c1a930d99f804d723e3ea6dceda5d549d2982ecfcd460f43f38ef504bf0720a93f60798470a7d5dc75865725e556ca52deae8c265d4b012ba4b312214e1bec587ae285c85aa8f55525a77f2b9af1e4cfe2b0e971345eea70e0f9db3db16825a2e891de3bc9ee2c9ab32487747b01d50f6331cf26eefc1bc25cd5c8e095565cf72d10fb555af1fc0ba28ff88701f0eb9ff4c3b5cde99d258e6cc953807670f2e3acc2558b6a5ee436783c5ae9cc59c9000bc935ccb0dc9833956713a3c14297f6dc488564948f6599a8dc16f336b6ddce0cc4b7a9d114d4506b1181d0f235bc8f5ff5f377560e00a3b8c1c569dd729a589c48b3ebc6e06a73526b169ea5e4c13b9c6d381a1b4535e32c9fde842d279f3e2ec7d3191ec9db0affd65a4348ba567a1600c +MD = b8cf6ec0391df63723cb81393824119d1ff629f679ac48f5e0c2e976af7a9d0d + +Len = 105208 +Msg = 4894ab2377710e4b4c4dae0f4da1eedc8658dd0e2ee2ffac8784515206f2876eb41f98afd4547cbbc68034212bcf0c8e4a7d1d43b3ed15c621f53bd8a57cada80148ec4652119b5af3da84169d81dc69d394c8767d662044d36272b77ca04abff7b6b0cf3bd1f3919a04a5d8ebdfe7d6e844e78fd576a68d6373ffd5d384e51b5e12ec32d5bb0ac685a59f4d5d12b43b533580750345310999cfe91cf2500624fe03a65769f86a627a667b5f3b42cb01da109e124ffa48203f1f3873202d35429f32e8263eaf9bce42ef40f5cc96b591467d464d00bd743a1b0af4c1a743fbdd0846b9879e092371a5e7f6f65937f9515e23820e60b83bbff73926f0cdb9df5d02e82262cf2e8cb26af6a64c2a4d1fabecab593db51028179953d6e7dbb76a2a55c0299f1a455efb5bc557de87ffb006b6bcd4c348f0c0aac9010a8e186722acc975d926c7761fb33efc1194b87533ca86fff986617e8de151ebcccdceef914b25b037df1eeb5941dc43dc5604d8305e221cd26f48e21622f8b8238c43773f7033184db267c9930ffd40c10cb5502f2c52ba67664445e3d6851118b3c128b381b9562288e93b5684689ec79e1104b99be081be549ecf7d66c19db12a8e2975e88011be47ed672908e703f7f4611d5513921be11f9fa76b387405f8d9f2a30d0b50f22ad9bb759403401857f7ecc28cfc322dd8b18cf635b665f0f5a937be0454f1a16d249b8e1fdd3c84f28dfc1ce5bf8662a9f0b0e364475e07af80a3a1e02a2ac58f12d5da53ffa3efcd9fd753e8c2575f5ec652977f5225f22e4880752cf4c406998ab080b7cf3d03f216c68e1d6e6ccfff1ab9390e4184587ae714616d1c880e927375a8d4b6d26568d811f50d2b8f5892d32ef2997b40e19c47a88e2d093b8282b76d7c301d29c037cf00b13f6286a221dbf9eaa96824369b4e8324f323a80d713ddd21556a0bba68e1dbea3b791a56b3196248c570f7ff7fe6ef4a48d2965568ed10c2cb0740fb01f8e9c78ada131c5175b13576fb80e350f63228b37ecc026eaf4d85185a902c0dfb7371b3eb399b02d72dd84371888b176595e7bc8f13bd8c6bdb92c6cdc3f591d2c1103e16547cce271f5ab43ad79fdc1d60afeb6d332ec90903125dc6a0fd97651bcbb4c22b66bd4dcfe251be35c6a505dba7c980f4fc2d710d2d63aff0ed269cc9ca9c568702d8328599a3666aa87c054ef8dd311ecfc08c410a62ef7b6c475f12367e3c30f826bc89a631983dee680500c9afe678518b40e6d2e1ee092301964037e2dbeeefafd4223283bd784072ed3a43c808cb28957646ac691462ba5c2999f4519b89907c639a65223ee145a0a5448eaf00dffce617a7c181c94dd86000669653e4c882944f3766958141a6fc1666d1ec357c7687095239b17594251603ee446e1e746d0082425e64f05f0b8e26e835080e6a3d7f368f3b8180fd4b851b7b272cb155fbc6e2027418f2051a5dbe11e18af570fad684a6ef7a5251efb52e5367140633d2f059c1d138eef97e71c72afdfa51585595ddde7e235357bcaf25bf2bae83d69a85cec59c4c4e04ddd2277bb3e189e8f5c328801004ecd9577ae9079b839106fc8e2858fedd79eee089c84c29c607e983684dd4cca6839d6b1e6173e01a998a9f1251c01f72d77f2e9c90e587313222a68d3322db90826d9ea4744b22fb012b2d1930452693d07f7016698df6aa725d0738c4b2654a4f0f98130cd688af32b14bacad313cc8ccb54dfc3a8e9eba2f604e74e7cb915d544b0273105d3bbd95e4a3d1b0ca889a33ea6e58eb2ea6e8d1f4224684b78750f7eb84cd672863ad918bdd92215a33906de67a3163b636bdc0e12bb884bc70aba2b5c528fb7f26088d70a1f7e8276433e2711a908c6e78c065ef12d1cd2374f7bc736e8cb3aaaf55f3599507ee7a4409fb53f67c4d9d927926e67f994834babbadeb260177f0241c2a0f64ca199afb9c1e53b5fd8e8cac706c8d1919dd366b7fdce696902f9baee69a5ab44852d1b074b43bff1b3784ef2ea0ad89587573aeccb32b6640c3f17439ab012e8a82658b1726d17edf31cb823a280e765ef631ac2899843d1a1c3b9fa0c5ce79978f9fb50fdaded75062a98e1c6e7889344ab98c1ef6b7c32420c056a050873d7763c756e43a29b577b3683b5dd8b36ae157537733338da168b8cac2c3b4f52433e425951cad7cbe5a0c4fb084d086c06d074695f1b6ce7feecd9f0a9059e0d4d2fc009b419a9d9a0356a51619bdbb34e140dc0ddfe84204bc4588588fa810f55c92a290da6b55f27a77b394a407186d44ec5b088531b0d9dc0acdd149074c30da8d519b70876c6ec559c153ae1566149ef20cad6cfae2a65602b69f45df5d2d53d756e48a56aab5eee2167bbe516cd0f83a37251ba99e1230178bea0b990c93cf57f994b040d770fdfcfc335d22f44a59ac24971aa8adc5743093d9249b1f0a56f581d36badba46f88eb9a312f0c429c9301a2cf25dd7682a341795174f5e3cf19938c841051ce0e98096f46524a61650ae630c2a32e3a3580d5f466c1c93cea72b649cbcb0c5e5d7badb4ede245fb9f70e455e4a8d9b1d08a2b312ac69846b81934e7664167dfecb23d0d80659bab9c538094bdbd8c57f41db5b245ea0fab985b93e7fc0a00cd3cca5bdbb642b7ebfc314f6fa647a2a700ca09ea20a28bd60bd867bdf58b4390be227e91e81037272f78b56936ddb929970d9c6b53969950931e04fbdb4bccd4f15929d2ae347607b6b836f407e63c5a1756e198471cb4a5ce8b100415d1e91466ecc210714610e8127e58b27207a8a322347e0383db6a300eadfd795da444a99f4bebddc9cb7442d319af070da88aaf1834d62f822926a9e3f531cdeb394c3efb050b9d101b3cc279389e64435f5ee889c66e9edaac765ddf0f617477178c3f1a86b5c10cdbb6d165599b7cbb8291b9f767bbb3e5cbd5d6603af10f59b571147e6f5efbe8739eea27db4a92ceb8dfcdd1a752114c0dc19e083654e13b998769872d8ba06b894187415c10690568758eb8f3a63975f8d63f475021ac753a5ba8c52fa050ee734b33424a7141e8280f670ddb4c9eec036014ae36dbc39f2e5a5cc904518fe9c81878ab3501cfff6e19f150dc99b426c41bc89d48e7c931dc0fe00349f3aff60e35b1cc9a3655a3a101b82266320bae9145c59514da1fa5d9e8fd044f2b539b9c2f8956e883958d777325e3069a17fc119a9646192759839e71ee2ca25cfd33286279baae7de21547cac5234c366b87bb66b4f0c453e95390374e1cd20d1f55097aed686a89ddc398950053859b78ea05569c55a4e4519e55b597356cb03c99d5d55f009b4beb10f05e7204713dc29b75d6c6c5495d24bc65595406c0eac74a041e68e3cf189c95c58394a66d91cb048363cec01032d53635aeff117d11521e1a9275b2548464cabe90e2c9f93c14cdc47a1ee6a7e9d5a44d3302e5ffc87f6e9fee2fccea13c6281222e6df9291124fafa631a95ef6b88f226209e4d77481b3fa9dd1c3fe5b431686a61b67d8355612ab649178c3fe004f4bd87eae82aa0b96b10e1617ffaf6e4e7296eaf3189d42af4e41c8e575442f7d2fe2dba39fdd9f8f69db57395ca4aa187c81eff1f24d8a8e1eaa426fc18d9881553dab446d93aff67b723fb8c3cf890cead394f4f3aa7027831a9888572efe04423558319a40af746c5f1a1693747db46418746c7b48a614121f35bf949ca26e7d567cdba4892071c31e80c36a581a777eccf8d917bc9edc52249486187b38387d3d83b2fab1a586f62d0e5fb6dec1fe817dbcbb576accd8b9d75f7c413f21fab84707482b7e912cac071d3be77d068212871a9398c7b2a1cf83d0f2ad5cf21db50f621bb52495cb2b3927f89ab77adaa895acf27a77d2bfe9d6a399cb592b19f9f34e9e066805eb1a3fd9063f128140ca05ee486aefbf9bbf2c41c209b82f980d9f075fbdad7414ef878af55312ac5ced744915f883dbbdb611261c16fe81e0566f36c1396962d121acc846553c6e97895d67db91f8b9ae4511eaf84190c4bb7af0577318205498372c1b69d3f44a89241da509c5a2dbe602aaeaf738136a61c1aed3e5c866cbe2b661eee05ddec29a54519b411216a4ed6538b089590ae57be1075689c8a12b3925fadd3a416059538085b4f1e5c8c73cf367d63f22cbb8725fa639ef97640513ec6340e82d0d913d4f267c9cef3d954d23a4b68933ea75ed73e80877c323ec0b9017c46a7f4aecc006b07cb26cf9a1a67c7bfbe7fafb8035e4694cc2ca654278b7a4d241c6bcde844db01fd30d616ec16459f0ebe65379f4278671412bbcaae3a976e50e81b7e8e28aa1e06f3f197f3681cb4ff594a6c59093ec0083457e77f50c2a97113ee09e63540268f77096356e4b5c63a57459e5a3dff694f9c63f4bf5562c42fa6cbb519f206e13fc504c33e13769d66c03d16c96522289252c83999cfde8834a899cb4fe86217bfe4ccffd37bc8002c9d1c1dcf0a11c6795c6cfe3348a0bd25214293af9dbd8fb6dc475f3ca614b834f5c9f994b3330babc4398bb5470f2bad19ad55629b8012cdb65f2ba21cc08e25d02cf23fe8f0bed1921627485593997299c259906a1168ac79fbaa2c633647a8362d52f932b0a992ccea1c14f994d11ca869e65f90da59fa2d02250305dcae6430b45fe917db92977c9fb040bb7a99544f8a46fa9741ad5fda5ee44e8a1c8a02c5a9633821d94288a91c2cf423aebac2950dbf8707b02b8589f62f36785da229fef4a40dd813810c5c49d85aba96fc0d82da9a2f668e9c1142b24ee35906bf82e17d6b91c3ef16cb9c0efb97079b26dd1eda1f193e43c8ae0b7a887cb481a9b4792dffeb6ad6cb6e7153ded6922502dc72f3956e16377702ee36272a12352868cbeaaa445531669de300ca3de49d56b0850e465577d271b5f2ce7114fa8a0446e19db2c40d66b0fffbfd05f48469eb015f1478f7e87c7d701f2aaf63f4e804f5c22f609219df713dc032d724faf3897809eb747bf19d65db7e33283e88b7f21e7686fcd7010271fe3b888af5cfa2f7bc8a7d820a1a9def9d16cf26ce3f5f9468068cceba4e3977eb72e5658e8addff76eab0e9ccece4e45ef0e7ef3aa048b27c79271d6487eb4dac6f33af18b30e674e326ef3e8eeda0bc81264ccab34db1601d74133fd347fb9e83a58b1bad39cf8eb699ee687a9e72e81862c0549817e87a028c156acdd5f8447d93eb39d71ef7af697280bd0a37413315429e23b119acc01758fcf990bf2767356cbfce8156fb516c4f3aaec66e783818241abaa6c98aecbc593e6ed45a05611b8e9d6c4478471f4f9e90b027aaa46181a5ea7bd18def5a721b5e2d014d1eecc087f8759909675383ef1753b652324a023671f9d9fd6693c90dd0d69ffed04494d7458ce770d8a8999f332bfb1bce5bea6445b7189e7d1331af3ade18e5c61338fb2914c8551788f14d888b5e5dc501caadda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bfd8b123881e3ea4cf2bb2ba7c955b467ceb9fee6e98481d9f0a204a3914be7eb7919f109c4b79b3651bcbb4bc51b97cee55175c9f8fc48abd853966b2436102de00ace244fe5f0083b22e1309250c11839a42f39771beb8d64baeacec6f4eea1a6dfe20e701989212390062cadafd0e2101473abf06e1b0d3a5a8a550602d3e551fc052ec1acd72f8f86c266938337ab2d14eb97d15d2799ddb4fd744dda504765f1801bd12a6a61f3797e94d07575d1d5381f93a683c1b1a35cacc31b05e4665752eb4c1b0ca386d3eac32de0f10c04acf06815fc5c59f34fb420c809f010b0aa92bf360bee22fcc54d18a841807aa218c05d952f5150cd274de1d9773365c4d4237460202959423c32e78a7e9e3238ad4a78a7dc0d56adce9c789e0f3a440168a79360f468c6e59d1ed84af4b4d336ded131b47edadc139a224d8c1e9f4bf4dc71a4aef506ec558c733360406ede3b22072141746441ad3e71e90a41bcde1da42410b0be8e4a207ed2b170ee26a3a41b5ecfe5791437c9100dd3bf053d8afa54317ffc9d8960c4e8afaae36a76d4002f4a8606e9751f05b3488600d57bd309612c4b092e72b0b15e7cb83e21c9dfede25cfc2c420177d19cd488863ef236c96f66fa6cfdc4ca7444dc41f7b0aa37bbb8f88acc1f43d2bb311443a5ae5b26c8b394167e680a0e9c4020d096a3926c0837bfca7cdda6a021249a5fe5a0013375f21617d419bd0d87b4ecfc91671cfd31c31533a509b460b1cbc925ccb07eed5f8f7f77046f5837c527b32e8e67a46be70f9b4eeb2ff7a4dbab434dd15c3ea4f40022dc65f5562de31d05ded441b3289651b474a5bceaed0d577b208a0fcb0ac1d8c2909f384140501947960971e3b3ae5de36d6b3d0899d534e3566d479e8f479db13c0694b42f9a810adca46490adbd78ca61a23cdb4bb1e81e57d1a0439303b3814742b7094c3108c22b2bb654773226bc19f118cd7321c58e9d8d8634b674beb54aca0bbb16a1f4fffa05d399a0bb0c4afece6d6990b371b6afc775fc7a1913cfaf030f642f6bfa36d1c948fa9aa68de98890b73a24d55118f7360c055e6f4732ec843e7ee70d7ce94afc82d1f583203a3ffe62b9b00608381c4fa4e9c3f5fd71abd41585edf4f199be061dca21df679f8d5e1c62c2d3fb96777acd145b3b7b1e356930f3a4b0fccab38c764da029c89c093630bfcdbdafb6a14e010f74be549b41c9fd429bdfe2feb3e638d710e0d7b23c2d3c3b4121991b224fdd45b0ed1e7b396ce71d33b068a847a9b1f0c4a2f9748e99bb6fbdae4c2662f6be5190463d3084c88ace1d00e249d74d8e156bceb25589022ac7a3c23d8afbb910bd8358454dcc6364ffb81ff465fb5839cf46e2a6c7a3fd06dd93fbe19b452d90e40aa1ab4578d3e20c858bf38f2c402189168d2b5d77f0dc0bfec9dce9e7baab5fa6a0e39a0280ae8f15c37427d29bf1dd3b0cc4896d7416fd449a93e94bf6cc9ae7d492ce01f006e1d954fac286d20736250016de1d0d440c161c8b3bfa4881303ecb2d53efb8a7cf50cf0bd1d178fe1e750586cddf02ffc2e39e37346b46458a2be307be3420fd821c800be81af73310ab6b88cb4c2b86bc2dbe3c75277696333fbad67f67ff74b48d168f77fbd3429728c0b168ecbd854264eaef70b74fffb5dab10e2a037a99d123011b03cca3a92c8da38529295f780029a2e4b98338fe7c8d7413209f48f9629ece231e35dec33b3a62788e9a77eb8fdc8490b223c7ff01d87279f583d10fe320dc2c19affb4d6dcfac000ba89d3c2bfdee97ed01839de04c1ac73b69b949cd89c9baa8937f941eaddeb012ec46066f1e7f5edcb4e2379248fb7f44a958339c0a05432da8d243d865890d56ddf8c6e3be855a03a66a78826f8316c3db3469d9521d5a2b2899b92587197c29e62bea044ebf1df46e82cd5b1050021b67d4390fd2806423cb4c7080732e811ead560c6b5f7b1f2175d1a266ebc0d5cde7ce3daa0bbcf599d9510673ca36b0a78c1d9a635157d20d44dd84405274064dc378e4228e5183100b5df769ecb09f471ae91096d4c3db3a63ed0f71d4e8183d936ad923aabc9108b9a9afed6b2a819fc22f0b604a4d9f1b4ba69065e37b9fffd02a6908117ca3f66ceabc78b6031bf42a75e77a325392327480b3b72ecce216f22e305a2300306bad9789966de8d2f6ac44312f2d8459026711e5cfe75aa31581ecab848fe5cacaf416b3c0f33a2b19d02075098c4e682dabb0a32add83377df7fc573198abe7b6c90ea772d675a8c03e712f93ef1023f6ab03885241f533a2dcc3bfcbddb0fb91a4d5f1468839c0ac3fdccd58b688210ffd80e1d0e52f1c4698d941cddf939afe00131d96a8d4f7106cc9eab28304f3dc1baf5c11177f55bbc4b379b21ed22a5e733c88fd8905d0af3dbee45bc514f0ed7de563bd59846484e8c8e4130beb4e2566b8cfe5d91ad1db3b22569f0d46ccb6acc975103bcced346db00d6b374d5b05632e5ed9f9a27f26dd9ace06cc08dbba10d22cc43ec7443cdbdf52151186f550f0e3b2546b2b3d04ad9e972d71d9a27a5285d733c2f20e20abcd5ebb3b1691aa88af66ffbe23901723846e6daf47a579da5b210978dbaf6265f09fc8047ab474a2b7e916631a1cb0c812a061c4c1793b20d8869fb0e2bc8482ef71c61e31d241c7b3b532ea7d3774039fd98462d58230ce6464811bb59a099b20813fe8ba7f94701967ffb4cb84c38ea2665ff9f254ed2bb5673819b2dc64172a4a8fe4a310df245f5db77293694191b0f35f0ab665e2d111fb2f2b68f8167f734a50a25a3a946d0c131484536950e551fd0c0580399447209cf0d15681a33c71ed0c926e5156b29634716a8a1993c1fbefd18afe54840657c9079bf9ed9ce6cccf1e454df9988d841e58a5b5de6ce015486a0b6f2b24873e0bfdebc1b06606ea4d202b77a7dc566c5d54b6554c4ea834931ff77132185229d22e615c5e91053103acc589c084b5a56de02ce6c7db92e06c7defa31db1efd1b8237d186ca07a577f0e93e2e83423c5bc7579f8f586289f10fe44532293c89c3a679f845f06deb41bd02711936d2953e59f1dfa49c0d1d73d3ba6200530750fb585593eaa469aed569bffa436921eb665c79969392e470f5d9075981a1a6d92c5e72a95c2e23759dbcc7e096645ac93b9896cc44820c0cddea74309f5b42acbf817a4285d6c4c8007ec32bf96ea3b425d4f18a9eb3b07994cea9f140c802521a8912664ce4742f66765ae453d124368cda32d78b6ff63d834d4da44e310f52a73ee41e999f5a33376d35128ed307d6d87000bcf3fc06e2112f084fb0de9034cd68987154509f5bdc2bfcbd91bd711d715f0340bca309f0a53b84fc4e17ae81f3ced668663f6a30bb7856ed44d78c91c06ee46bcfac27eda93a66b2102491c08339450ab5b4e4393d1cebab8f6880bc2b674b45145f876384f5597ade4c6079e4718d5f2af735fecade64fe5aba75261b10dfd7730452d99e31035ba0d944347e3e576fad4f8407cb8769ef8d139255f9334928d5e2afd85fb90c5d3e11647ab9684b432706f9dda6dfa18510bcffd32b9631402042c7e72f541d88a03de9d2fdb610e27e62be07c5aeb5c8cbfde5281b023d283e6cc28e76c9dee5afa4fac5b2f14f549cacf80d8ebc4cc0a71d6cda2f3e18e715a8c7559ce1f67b5190c0da40e1afa2672bd2786bd10f768a66bb73d11468858f3efec509640e526f4762990f4ed9d3c92972cec3b4a6f15e1efb7b684ad60b93759065251acd73f212098a870074efa9ec009afe2eb839098e53785ca909800897a5bd59cadce5c039dd3611be29ffeebda5618307ed5775feecf414f9aaecd8ea64560b3ee2b0c30405241352a00982e488adbc07ef5288b5ed76fa026058eab7f6b7a53c88dde1bbaadcf78280184ca9d30510f563322cfd7f87758bd4cb264583688d8d767304a5f3e7231771313454abf2e79bf400481ccaaeed5ead4d74de32f22df9537a130b09cc01d91d5e222c3afbaabf48c3c35bf573ca4194e6bcc82bdceb47c7fbf6351313f78f29a6fe7aa8a8bf2a07838702295e75fd319fe64c97ae31417cfc956b3a456f034012b0861d818fa4da487b598df8545a2b7fdab29ef166ad1788d8f5a6e9d0fb08a82198c00f82f5691b87a84ac8d01f2b8e8142672cf15443a4a71a7e878240297237f8b9d901e45b03933687565216d8d5c1441be73cfea65aea24eba7ed9a4c78dbee3167723a5809874c6d2b4005db5b83ffe1abae72e8b1895914d279d019c1f6c150423ebf0a344b3224ce03b5db29b0bce2feaf7ab2b26c02228f8eac37556eba3df1ce3b168cc830d3c704ee81452ec3456ba7dcac637b663c6794f44f3c2d2121fc89762719e48ea29faa7775b9e75c3377fe617dce9fcf8be1f371087e193e23ecd637e3e48893badd5c1a5e8dc1cfd4ac1dd1cdfbbe83368513eb0b241c586c481f48f2f49d884309849de4c7a6634f916af446f0c1cb66db5c2aff361db82398cb6ffd5109b564ac89c9b0717d61cdae4e928eb791ef436c37f58dba03a771654275ac04b662464dd3666a922e11758c32724d581437f4bf0a155dbab86b7e35eb22a6148ad71174ca3cba33a0bb70b27c5d2cd934eba25c3e53163d234c7193303d94896f5beca9d612465bbda7e5a8961bd244d85274cc3c75604c2c94720478901d6c4c38ff755fb2b9126c1dfdf7e674e9a0e8b593966b43e5eebb89ab122ce1eac408b4735fcde2b9609564e026d63016f64b5c264232874a2bb8754144b2f9a2998d1870f0886bee4e20c5b5bdcc16034deb8f5659fb073a0b0b9e5f2273a0eef3c2ac1daef81502e3f688a44532ef58adaf964b622d8c5b979d4d2b35d79d76db8fb7a32385a79a28fdf5d7456f83bc1f7fb82ce52fde55d654c9cd0447bae158dc832ad798eb61231e537345eb9ad8a9433f216a6bc5d1d1195c6e1829bdd8739156d95197a7fcde42eca3cd0efc5456e371547a4809778ed54c36f7e66f02339779d819eca416614f068d664070d72b4897ea9c2e71ee176ee24c2be79808a0d43450b7fdaa55b22fea5997e9c0093258f80e5985c7df74ce66d93c930091c231ce69b3348161dbc8e030e971b29472fcdee638b6d1f1abdb2004b0516e46a296914a96f8f0e3e4042f3ae3400f1df31d8f9ac12758cdc67f57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acca055d6e6a880d3b919ad062fc6b9e8b201fc85ef5429cfda727539f26cfc81c62860cdb810b3fa01079731f5a1a3bb88930916126876484f763a73aa11a9aabbfec1030e2a0ded269cc8c4c1a946a35e67907afd644f602697eb2a2c96f33cb30ac09f7060555430c28ae81c466a493b65d9d838ae7abf66bbcf850165a2e0b734a4ca661955d6286023c58de0d65427752b594cb0bf0e17cc2fadb0e47e3dcd64b7ab79bed31c155edc829cdf536d2b7fd025c0d0e8f541b153c9c17d4efc00823f6b30b598ceffa3fd48d1aba93c4d6b0e631c78bb1bed528302bd97dcc45576853114676c93ee19ce3eb5aca06897212e3be90f0229239707802b99ee3ed628d126ac3c1613eba7978dcf4bff9a118977d6adfd83c6e968266a93ed4d118a816b71809d60f7fd359f5ca7ee9079c28c335cf3a9079b49ad2ae87dfac1e679679a3c18f010e72dac2fd4c6ff19aeb210a8f5407d55504a4e592472281265acc3a7acfd9eef8a82f28f1db3e463e0e9fe20c71ee0378cf433fc43f9df07352a7edaebb610c58904f0075ef60736b8703fe1fd143a73f750455a709b8769fffb7e7b21cbad5a8bbb8edfbf18ce5ade4eb933bdabf4d23a656abdd1df88006a28add275c4dc7539b0b55e69a0a396f98b56602f69741cfd3c8b6b8e4d4b941fb8f227102a07e03bea4bcd8416edb3b130fdaf7dd92319e7db91add06d36edc5b334c11a859561387139743703137ab0439667cc806990a14c62cbbfc8b2d205225de9ba5beec1d94e689babee7fb09bcf08d147e8af4bd397e80d82e5280d870c54e718367ac7c588bf8a085f98201dd93d3513985b1024c209bb424cfe64f27901035d9da03da427258875dec691dc6b1cdb5b18d7a83cd7af1c26869ea0ef714c85b119cbe9203484df1af471ca808c8d0a45f189dbc4ddc179571a6e8925fd1db43b316095dfb5c3d520280194b245780bf9aadb7064dd271afc90d8e63d245cd9246dc80789b5cab3af03deb71a9dc527a0cb3431c3dec9473e714281deeff13c93556b08c73981c1ee0c71fb5f9c5da362dcfbe48ae88f4845441620b164c425b172b15f414bd04606cb2028294a26ca66669a52600361643891bb8c5d8ebedca64b03d69ef29f8c1fc8540522b009e3d5f17843ee3827e53fe1998d8b72c5a89968c7338637d6d95f8c765bf0d5ee35d603fd7fdc8ec91184ba18eae31ac2d3b252673fa3205d76f19eecf23bc1be09922691cdd10e2f312ca7a06d0c8d9ea31b9049c29ab81cabfb862092ac7d5fa731e19cf675bf418c622d99dcafd33f61f9aad7841604fbbfa6cd7803ea10bb57dabc86c371a9e86c4cd66b0073f58f547729774cbd0ee3fc19fa5e0c9e82b961b540b7f96dd40a1712297ea101fa75c6ba9493e337ddbaa87d95397770dc400cebf49863104990d6ddae3b8700ead8fded7392122d796a0cf926710a07253aa2a4618fc8030f63f1d5ee087919cda242364fdc9f47ebd970b6366e8e0c658e69070d05efee2e69b021704e40f4acbaddbdaed9522c3af11bdb4c97ca26a424aa3d8263a177af8c5beabc76a4388e0816ab1bf1f5856e985791f15688feebe4ac6d480fa64999b339575be66d8e7c7435281b8c4ef990b86a00ac128e3c41b6b9c0e573c60af4c69391d408639d7de6815b38122731a6389d4f0534a587af82175ee3f5c963c8acb1bfaf434e0e9946436df9eb46d4bb0038a7842295873c300f6ecaff76fb1e4fdb0a75fef588d87cc486e67f738bd4f8832fb24526e5f0a8e91920f8967bfd96599aada321b4437049cc883678fefb08c61016052049d3d2ed866f48f18a6e697296df999a39e10b1d6a66791cd43718487139cb4a5aee9663de3e564fd178b07026944828c1bb33878609ae26b69110527ba1fd6dc148dd9248168c78f723539974521893f1d7d1ce49f73f5f4b0fd82c55d8055126e98dc3ed7e5133a5773b36a5a471a2733fce3bdaba928f3cbc581e296649be2fda903ef4fe0d4a837d4e8ee40fbb1feffb101661da117e309d79701cd1337c8722cc4b861e2983383c75eb571d5ed00c1181a708dd22f3d0bc216958a32952d4c92b32cb670ba76dbc99932655c27d738b0835f54d2fb7c42039520563950abfd8943aea601c7ec906a0cf7a3f4ff0cc708c0a50b19f93b3d1aa734a9ade6aef56eeac0c92c4cff52174e77b646ef0bec9f76c4292da4c45d85a1450cf6c3b0d4b23d058836c649815fb23504b8544f19d30a4f37748ad233c337d3f8aa744c0c01aeef7bd7a035beb1fcb227dfeb50ef41ff98ae8517df5051cf63e54f74fb1bbbb4e10c85875e6aac62618803f0bbdd7acb52f6d5d83623bfcc675b3c4228747ee38cc2a6c81e05ada7d5bdeb20ea54cbf1e0c8fd48813e7bd360d317687eb699bf3536d20f1f2044218121ebd856f5e407e46d51e54b011468e2e567543852baac8cc18db8cc3afe63f66c9ca3ac212171b08c8a3afe0bf7f16ffa92921fc9403ff5fb40419fc63ae3a7f6640f347722c3e78eecb614bfb5015a9b2fbe8f9ac8fe036c8056144288250847d8779a685672ebed2ff319acca1d553f9515f237c34b276dc452c44074acb9d9707948653b13503f9a5e9753b5a9c26079450230bdbbf4a792c41a307eef1f43b270b8fe5f0996fed274f834e63b34a632d81a0626d4dd826226a0a31560baef152a86a420ea32935eb2c6d0fa462e69582ba4387d0a5486b8f6d218b6b60f641ed31bf72f19b5a595b47da8606f02326fdc5b484ee0fc3d0db138f20133af2b4616f357e83c929e1dd6a73ba6fa7289d05699a61add271de6e24fdf537dfcad1162a756daa74bf56db5be0b3c8cd1e82016d9d24f738791cb1681214c098a720742a274750e64340bce3c879faab2c5e5b9a66d7b38703120aa7778494adb12ae436f2155c65de25e8cad415ec897bb77ab89d81c9083949e2a8d34d9d660f76cc187edeb63ab88fc7d8ab8e85af3218c68fea2b20034148a234cf78c10bea8d959674aa46adf805c1d5f5ecaf647a06a7e6f3dca2c04397b013130beae369f5a8797c81f405c7103e885c3751f17b0b8586639c368668bf760d4611ff37b5386b883d6ca88c4c37a6ba8678529e5caec838e073c49fd7475ae9108fe84ff5dd488d60724a88b00261331bb79cb34678d8c2126a3551b9b7c6711b8f8d73526da64e8c9cc2421af9d7bbc4fa167860ef1eeca3886fe53698216b0c18d6ebf46fed956af1f802b3a5701a294ba835d39d008038d65ba37571d3a08e33abfe026b8428a279d410a28d9517f1b13a31c60ae7447c5ae1d29fca44d847e7f4f6a4ead5cfdb3c3fb31039ac7cc435b4b562bc3c02141eeabbdb2bdcdbdf3c991904734754bd431f3425321f0f4cddfe09ce3d6580ab2a5ca7521d0370ff3a82b0478e427ef2955edb08ff54992eb301753315cc87e78421dc2c2721614fea970298c32e141f3ae2f0e228b5e115bfa341b9cad7de70361fa390d29e747653c1591d9b74dfef3b95bbda36a8b1a708cdb487e6f04fef484043a6a5e2721d7de6fbfe9d7aa7079f5d8419b097cf8c966817c6f17ea00cc06a0697285522eb71ef316452a933126e2492c71ee9046d715ab29d71e99a6ea887328be35f4e8936c5437740694db6b0d12e0b080618f2a28dcd35f09805be077e10a95f69bc9ed44e795ef123bb9b6e4ca00df756d3c230e7b0b6f5f5a9a3e637e81a23d935d354741b42ed3d466ab07d30f67341fd862352a34709674dc64c9a0206b71981d0bd1e704aba21b6cb7c4c26ee022f5de583b5ed10b356bbce418fa594a48f683c1734c19fe235d365dca1c91c2e88bc8859f7d73a7b2ab964cefe1aec71a5b2bf6b9d5668ede365e1d76462a97eb4e216ac02a9ede94c1030f9cfaa37a6c22602c04377ce619233e6757d39bc7a1b973885bdab50862288d9ccea9a9dcc4d8ead1e0d6cf9c8a9061dbfd4967eab25a396eb10248cd915e8084f3735456ab0b0688de37c10a992a62ebc51c117983bcdd7e6e35ec86a8efa64899fc258085254d916adf13b8db4dbc075dd01aecac3dea47e1e9f2dc2f38496820888fd2e9b44abc05311a4fb776d7bf05ea06bc7279fa4bcaa30e368ad4f45425cd05d65f3478494be25707b43230937bee47719cdd580a76d5911e425231ad281e29f34c2240d98d474ca9580c60f52e316fa471f4bdf485061e0bfc2c7bd396106ed2470a4edd67e48d8d2961e3847b77d1bda83c86aa53b927780eb05d57fe2846cbc658fcc56a5e7c2b9eef32920206303596313c9c81732ffaf0aa30aadeea346840aad541f2f9ab1d3ee0d8de5080eda4c26f5a3b9ca8a9fd5866a06c96cada304c5c52b3806a9cda6ff340a9c56c7c73c3436a07e3ee28079c7226ede43e8aac5ffa1f9ac105c3dbc8a2f484ff2d6f2b0f59e69215982c9233593edf15d9d844e2107678037fb2a9df5c7f005c3838430d1f4a6aa05b1a35b3884290ca113582791c01cbe61cdbbcfa9c4aac7b316a5443002fe1f29b836aa38bfca36f7944fd9b994c16e781b19dc0fee1d9ca9d67c757a8e1a8aaddfa9979d0a7978476691eb004afe96632d6b4c8e0cf28c8e0d324a1761a2f2786e24abcf2eded979d245e5cdac7a400a4bdaa58de8d19f4801ee4c6f433d6074add16c36f3a061762094508a80de7355bd8e71764860dec0fad901eafc93db88e4d6643a2067182498a5b29e8fd1382ccaae37b0f54a50de421bf3f1534d6b9c5a5b1b447fdd076c82a19671a1fc9677bc6280a3b735fd8b20dbaaea11131899588918bad6a8353625af816b7e07951ed9d4d3b755caeeaddb41ad3ffe8ceb652687e306ee70aa6bcaf8fdf4ed993d096a29b85499b02a2dbc778456e261ebe90c7e048e8fde6ff1b9a39174b75a9721b68cb7e2498fb9f40ba2b799853a210d529603bc80998bb23ad9c653a4f4aa4c072359c92e11a4e910edce6eafbd93ba3ff669f78b4a069595c222f97c0c7e73a316257110dcf2f3127e523f27954bd61cc7bea67699e98111852fce074d1c7fd38ea443b798abfc5b7dcb73b668514a313088330a2d3b60f74b753b0d5c8b56dfb35ca5eaeed8eb3113bf7224dfabffc65a51050faf04198f3b7ba655e4d3e20facd700738580a8dd68b8a439a163dc236da0844dc64c94217ec978a88bfd09aba29dbd1807ab1aa6a33d71bc5781c89090fe188c1b1cb9f53be71acef910b5fabc3442a219612bd6ecd74177a80bad54ebf22993567b70539b5ef28fd714cd452326f9d865abc2b46d0c7c303d0b72b8a7041f2b1e72a182c6b46ab3cd1239d4fefb48849390c7874b678ab0bd88ff04ecbc621c1b0834cbe374e9018210e1ef7639996c4b192398b16dd3bfd18b3c80e1a35a2ef64511761a23d6429f19addeb36a5359344dbc2fc5a8c024211b1173af407028573120cb954b9b3ecb3285e8dc15de14f6347b93af9fb7a9544066277d1b0ad4e5d54a1179739fbdaf65515719c3a2623ad6480e98da2114120223e274bd92f849387592f1244a87f3b9f97194fb070ea83c0ce6a8e2672e056a30edbcad6e5d2b628a9422e504633e37657f724575dee76dad64063eefbfd37f75907c7308cb315c7260373e351b38e57dc8de29549ca07115d0db76238f244ada12dd98c60a062d133e56b745758acd2a96fe300c0e7a512a724e136a65a1d148bd06a312e150dd5775a8d99d3adcf7522ffae105fd1e14d691889c2b0bf11ea5d71f1c5319b875254f542ba332d569dedcfbc5a73033c20077b099d047bd39dba9528cf07ae5fc64128236c0241e2db7e529625b716264906aef92c0e2ad28d07bc57a53cc807afe075c805cd95f4bc392ab43878653006db36d1063a468f56e95a06ee3d730f8da760793e01a3fc9ec2baaed9538ada1819a519a215497a89b3e0cf008639e7ce0a7aef7b2ad66b119f74deaeb4f184cb366c4b962bce14741bf31892a377111f8e177323c5a7d0b323fbdc0f3933e0beb61edf48ea2efdc476036c0b11c52bc0a6e8acee5eb2cdd1e4b21fa13ccc4e511d1f5d30dcf686e9569431e06dae987fe94105314261a31c763a21db5c155e30eff03de470bf5061322822a8f39dd79bc9c314733d5f00e14cf68b3403b970bc833409ea51d3eaba9d3196cb501d79a2dce1434a9be557dedd69a441c02326728b5d39a8dcfea653fc3306ce0f97ef33771e2a1deaaf2843ac26056b0decfff16cce55a68e7a23cbd3bf0b379ea7b8bc3cfc2173a606f2ee3d9e373669716d97bc19e679f2e0d390b8380c8e69c756bba2edd1d25aa7380d1644b22a5f4aeff3ddc2548986cd46311e3093391d7159902d75b3b074ea684eaaac0ecd6be40794665a385bd699ec3b8a3b37de063031f851263f94815b14117f569575fbd734d7ca43fa775ec145fe60aa52d3d07e60529261de050c73cbf418b6eeda9b9f085c9e1223527bfde41846108cb0f8c6651d85db277872cee074eb5f8361c7a5e29146373b73da8a3717bf003dfbebb2c0d79fd4a46560b702028bb2fb920c7663f45735bb61e700bf5b1ffbff2b25ae040f44f0cd6232e6912b5e53afe1e6ab0d1435902b932dfc0d710d6648b52312af3319b21ae575b82e6df7b418d7c29e3e6f85d8f48e1bc671f7fbd1933080ab02d1729b1575b5b63a38cc46eefa4cda7874bc72beb93d1abd3e5fb06713cab1df69040e35796f6b351a609e7abfc1ea6bb24defd2bb0e431fd2cd954cd54dd17568429df386ff31bf91492d449eee3858a6beb2e8fa0bea4a43b9f2bcfb9684656d92dce81501c42a1bea75e51e1e6effc0836e5a0cb27aad1fa95b200d31454fd7892d8bba037d1548c90ad4c3ded8a1ae4074be49ae6eb8b510212e70aa9e65449a0246dc60d6f176694e8c269c1feebe5a688e573c511da2830720dc7eea76134a1db1f2c66c5f434fd3739cf2af477f45ac32bbf8ac1c66765fbf870ac3c2e22db245a390a7af2de11c33bd6ef14c7fa6d243ce7fea558f6ead5326fab50c3f99728a455c037194c19b44fe6da05e2dd25d4a251e96597bd0727432ab38926a31d0e88e851a472675c32fe67b170d087cbfbe56713a98ca50319b10b8c8f6106b5ff8b5a866804152464cec13dfc9adea6c08b9043183d9428d50678fd0b7c0ca7233714252cd83fb772495d465247cc004c1e33435ab473bc80c9dbd0a57d9c3aa1137cf697f4ce5e85f7a19419df381fc726bad918f92b0845839bcb046e9db8a2a7fbc35262a861c55ff6eefa6b094c58298ccefa12a2544abb20b7d156f9674d7cfa52042ab7085909c51d9df229cf27b111e9a709c2e8b7f9d25bb33e9790cb19df6c5652e19b697d74eaa97c7ff05d45b1f4c8e6720bb5c61981532d5f7a430613d9f0e410611f446d1ac712f3f7226ed4b504af99066ca85def582b396fdeccff6179e72ba3a1e516789eba6d2b9db2e2f6046e21210329066e6b410db5c4f20acc9a641aa917e8d9cbd77ed5d6f79c437d6f2af1a4a2d17cc63475c3951c009be1fa62c5bbaad61dda1966133e57b15f12eeecf1d7732727bf5ad143570e7f1c6942e914218135496e0d7910abe67b9f7f29bb09029bb3 +MD = 6accd99e1024c571ff957e0f902f94128dbda7d6d09b30f788db10a8a177c4aa + +Len = 106304 +Msg = d5e4f5319ea88d02a566165bfb7cc9a539b29e04c16cb42c4625f4768f18f233774013403983f5dbea2b0bb447958847b12d7f6a769a4822523525bb36c02518475549472a9ce6587f414a70aba5a219dbd41cdc46b84812b28cc4f7399218004d09df6ffa5a28246b921bb6b014e0c2be90bc83b72f7da36c10195121f8929490451cdf302482e5b604c6aedc4b08eb6247a8875367af7e8aab6bf274595a7c18f24ac05464bd4469819282bab0e23bd0e2290fa2c8a64b13440402bd1d395fedf6af39ee81a1e88bf0c957cfac385b0f4a85432bbb29b110c22aa881abf7e5183b937387e3f67a2438b158a5a8d0f22765044c76a60258880f260c4a6d5cb7a0a74095a6f284a13d4392aac30a73a9211df0520bf2f7e9831240579fca2f7d8d24fdc8d4161306dcf8b678b13be92804598f7c7308d10c0ab3bfb1092a3adee799113498b76a500c3f64e8f8a4fa16d8012bf3354e576823daed410ff54383b7edc5007a3d5228d200e3221fac6e1ca6fc0adfd92e53a6d96f103039941314050a61550210933638237c4faeba0ce175347467e70f8b6d315a71a50f6d7238d7d72d5ab998f521459177972d389d0e4d90b3b3e859c966358358c91ae92897373c7038263d409201301c21258de94a36f80eec6473d339ecd30cc4e170fcda2c217416d2683b3075e9b2161e21b83e3954cc3ae1c7718d5e30d7bdec6bb7a9be6e7f1d437fafa4a8a5839d9e5cd2915d8c36c4e9bc6d0a9483ffdcc44021abf60bda7403ec6495a24ad5df2fa6ffecab8994b303ba8e5995b5cd4bf0590289dbe1cd459a1522ac6cc1f104586706f729312e2eb8299b2269ac892ff81c22eb76d69fb58e64b1910df31f33a207b059e16d4b5e8e725d0c19527bb365f34977cdd39aee693fd8eb8dc7a79493eec5bbdb26346b0ffb9cc0ac8eebfcbe453ed8ebc10418b2106062f524d050b5840dc41e42327cc32d1fe62a4720358b7acab4d586265af23e129f4cf4e38f90324f1db2ab8bb93170b0259c67638455fab5b4950c48ddb031b44a9a1e2878aa5e556d9f47874be12d152509d5fc11a22cc77f3139b2c974510e0be88ae7348d72e55ded00705a5bca178f79793305fd7ac7beb4f7ab45c706ea883d2068eac1d4c895a5bc8c0d28b17e0bf43b4f88eb4b7f18232d7c792fb80e6ca1c8f2c3cceec6bccf65258dcf48124083039ac1f608b53688c36e8e36cf435d1c6acfe73826a67a71e28102d8f99bd72db95ad9a51732bfeaa0c7ac64b35103b7ee457d8de63279951be893cc2be077fb45d8f880e1be5c52aecffa40cc0008793c9dae5195305e42f8a4683145aac9f38f5c4410ce20b5c7d4d0a1528318116b3c1fa10e9a69d48161fcaa92b1c17520802ee8dc47227151fa10c9223e60c993d7127f4b5fa581593e378174d6ed2287fe950a6db28a38f808d8983966a1d5fbf3c06f914bab0dd2779e14611cf67832f2dbd3497821b4c5e770391e64a3e0ab796f9a67c64521f4f4798ce0eba3212845466afa02af8bbf7d20d2599e2e90a952682755383965c89e10107aabbdc271dd1ff708b7fc65efb3308c737e0a8dff64f33fe3095080555baac9b5c40c0616a4ada4f9fecfeb5b72e78ef36bfe80b599570a9aa2521ba31490df1c9f58921e813a975741f2c40da08f0161cdd411d1d8deaf016907ddbbb20b7934a26911915b0cf8a9e72b990d266e0c460b52e75d08ce57a1c7376fa41b61bf87360729771c6cf07858431261edccd8288f41ab601370290025a9786639dada9cc4f982d9aba2a74bfb02d613dcf38c92c06804e3e00c4ea8e926a10af2c0f2fbb208c5bef0f644aa3a2f8e2bda2a510906919bed57eaed217d76929730592e2d69fc9a2fd3b0ef1d7c94e1afd1b84f17c982178660512ff14761f215daefb7b9529da8333c17d22d2af778a9a8e6ad43710422b6e38b3ca2b1af698dd8c8b527d4b298d213741261aa21fa2047fc941566df6186c8de3bbc2127a106122c4f0056051114400fda4265da101d96422b1611db7efdf79354c501923f886f65adca425cbc02ab305057c3e962a77cff9bcdd8c0212459f1b147b8b8ee1bdabaf810ff8041a33d1f9c282d1897c6e47d0bc32455f101d44277c9ae6154c838725857f5394700dc23e73d092d5882b302a47e5e63979f51ccd1d44b55199672d6f4298c4e761f7186591fc0f14ce4d2d78d88ecb2ba03b9d9e5eff75be68e702ef50d2c89780ae58e1955bb2c1cf32944ef69380a0337f2afdba21a3d63b61ac2828c3db0f2c91e84506761a66fb8a090f2a7a8331a42e696dc751cc1371858d9c42d278c8f6206b025de1926ee392005bdcca6f4a62c7bd810f165b00abc13bce37852e5f4df8459c1404d7641808fe97960991750fd9bbc9e9d5dd186a831b406f52783cc477fc84b18645c0f95d7854de9e962bfbe2d89ae016dee51e69c07552d0c2dbda3e146ecebc6a1007ede2162f1fd9e9b7719886aa6fbcd137e3afdf9a76aad6ffa9119cc43da0dbd458e05e0ff3f938e2e4701f81371377576f5e01aebaac98c54778912a70a67eef2cd78ee9c16083eed9f3b80d035f41ed8b4f6df82324ab9ba7be0e7a0be793b8b85c3b44eeac653bb08802b66b1ccb8ac5f8971f36cf7a032856472b55c094a1a9d2f5ba0249676a16d16205c4b87e8f8dddff8c6be9ae9c77d5fdc6e4de0c6a6fd020b172a3e4fa5b346883a6dec58c618409b8492f93c7e4b174c53f9c655388d84eb3d658685d2c3588b897ec5b01df7f682b44fde3f61d7d5ebedc8829fd735ff24993d38c12d859450d0e6d897066248d6de5d0f9d7709e0e0c323de4d8bddb9ddb31b1aaac0e14200970ceeb687417dbf8a2454fcc8ca82545d70a0075c6dfb3f1465f6e992c0a9c2675aceb5ab7cde64410c77055d00016f4418917453cd0d7243859225ab0812bfc637423b77fcb3ee8a7d3e5f3d95a658ff84793d77e5379dc8e1b60714a3c51f3f0b10f0f5a74484eedf73b2706fb938161b200ad19dc1e92ce32c36d4770a09573f017e2c66d84ff49adca8ff78823612444d8267def27df6f1bb5bf36e29a59839dd8a2422b877241642e7f196487b7a69ca4d438e1482ae752a1e7a6f691c89626cbfe6c12d2306bb6c174eb3552fd6f15d146d976d1fddd6422670611496b22275c2792d7d7b23f224e11fb6ef78af44cf7febdf467d0a7ccb1cdd2e703a9ce2c23ee54cf0a8022130ed6b875f818bcae735c750e6c3bdcf8da7c9bdc631ce0819d93308d0d22bb259e23a0eed70f5eb6fdf09d1971a7e374f703df65da3d0fe433b6a476320270b67689433e06e720f2d24b7499faad61cdb1f40c17fb72b2a080d92f3f3bb7d96222982de82a28c9eebaddba2479a4ce6f75bdb06729566f62ff7b4f3c6cbb5b952ca0bf71935ca006f217cc3d71369fd6ccc15ad7f6609c982a0d62f247758debef63866ee4eb49d8129a394973cb3c9011bf69eee529d0ac7b1038f57e7ed6c2f5310134916d3ddeb6d57fdce3eb4b380f086c20780a923c7d140fba644fccb6d899be671b5ae297494a0e6c640f421aff2ceff1219b57b4aa9975b58b60d624041e1c8b052cee7e3478637c56bfa7c58cad53e5644497a18e10f97b664a99b7023eb9f4c15b981012d12d814e64e2d4120a3681c2aee88f820b097087757ddc4d6c0558e27f95d96ef4bb1fbda789a339b4163acf22b0db30e83449616a091050368d0beb016e56a343aabc16f002df5e3b6194ec5897111548f84a76a0b1dfb51ecfa24d7967f44a5e5acb0cc6f4d51a10a704acb8f1cda9add40849b20ea6e6953b908c50395ede9569d0e1a4d610d7d4652e72bc577d687736176d0676026f2a5f7b1a2e48e2ea99567248020d3f21e71a66e0eb3e8cdc45bcdc33169e7ea95ea9b6895c2d2cd8da8f03a27720ac82d9354279be2d886f99d6eb3e7ade884fa2b8d75c624c9923c99229837ca6e5751b5435afbd9b0cacd3f2a901abbc9bac870b5205e92db475f70e485d7b1676633dd5d4f5520d661e84beba0f11cf455a7bffbb1859470b29d331d4b2fae5dbf7a16894ed240b413f3c8982d9557cf1d4122476f62b3f09d9fecb7306849b828cf65af9e9ac0b0a896bf197d2ef4c4d93ba081a31e76c3ce0da2997daa0ae06adad4b888d42834e7783756d8e37c3a5340419195e066510d8e5eab791c7a3e4d426a8a54a901a79942383688dc769951f60e5f8dd1090224ca27d56ee7203898b02f0e4a40d171869bcba4d4426a489c050ed3d319ea3fd96a05ffa232843715cb2c2cb1c223fa762cf685033de0b1fc164ad6aedf8e6ef61600115e262fa48a3c68cdd3567ca9319dc3c25ef4613b38d1c84e684b7ff9417521f3eaeba8e5c0aaebd7f62566e87e953a432d90744e1add92254787444683306f8e8ea877647fbebe346356681f27bc62f0b838a25268e3b04194b865bf83eef2c8928625878e20e8ca62120bb4f2bb43b1461572afeb8a288c96096aca0b58b38a3dac39b8b77771833a81d510a83ae56f204f6cce6b7b04ec97a0dcd1e116b9bdd9423b5ec06b624535ca509b11e051108f0d1815b05d4c4bdda5433bcecf0d47ac72b4e072a6c2fa991604bdf4568e7ed977ffed81d90690b14125709a2bb512ff622ba895cd9989af8c78df1a44a49f46b6a8bfa7973ca35b9b0cd80dd4bb04193a281df18bf0dabf5534674c509c5d20f29bf1eb3ef56c23dd7fdbef6f2607442333a74d85ced51198c0bf50257d9fad5261ed13763ad2512c07e107a7ff02c645d5ae73663b62ec7ea54dee694f4c37ff8119e7e912c02cb32b521e214ddce8c7959a29d43f699a2f6a7bf0c51a4e042183df313d851bfd977396fc88187ff2d1fcd43877e3d261d297b01ce0e78c5cdff0a6b71a9bcc0c036715698269d22c8d91c268f92e858a8fb4533c63bdee89614fd542295dbba11d90372db747bddd21dccd80ff296a5c8f4ace16f5a55cd2d028d69a11d2d0040d75650fd1ba284fb5655d4a34da6a21fae088733fa6be7e540410877b02f47cfc9e05d975cafbc872b5db8c3d4b6b1ff8ffe91ae8c8fcd61469ebd10ff60d53129481514d801e917f53ad0fc58456a0af2e59d59913ff2239e2cf3f74b504cf76de3f4001e37af205c73d9b728b14ea4af5406afa90adaaeaf4249b5347c2395104a96d39fbf5322c9af2f8ec6a8c45efdc06a2b246efb5502952ab53b52ed9ca8f25a29cd1789b1b5333eddc29a5fbc76c13456a3eae8c9208c1381d062ff60a061da5d26cec73fb7a6a43eace4953f92cd01bc97ed078da19da095842afd938f1f83f84d53703f397fec2bd635f94ada5a3eb78103ebf4de503e8ad7295cb7dd91e385a1243932c335732feefce070d5df57f1efbe1a915f3a59bc49dc9120144f758fb2df66bced5dd5b547b80f43ede2f9d6448a0805acb29eb44cb32f6ebbdeb67102d3ad20006f805680e5ca36bb0b70ef2fe628a43f6f5a0d604bac163c9622c401bf612ea4d10f7e2b04a5bba59f79a6f251111f9fb7382215148b993f2c47034fe1271b5328dfa696932655363550884c6945ba4620a58ceb9c528a1bf79fb93de7538893dd7d6a542fc095f563b22d8e8d3b06ab421ec84451754b5b8e99506c409ae8df756533f42918f06b810ae1493b65a76782204ecfc2786f8667c0635b6b51deae77238df72d73f6f133c75dfcf25a0ee367469ade6dd0591509b15c7bf61cbc796944f2cd8b761c3ee273fe2a508c9fb777fe3700b211ba9ffac8c65e4f5014d8a225ecf7e193c29d239d4c41c471ec4c1ab3add74dc0e68f91931b62f5a07a44d862e6f6ce619ca46dafb2e3dcae7729f60359b28f427f5c848cd63a77625f3672687b5a90440ced2727ec80f796c2c96069d532f53ae79f3a327135432a3625e6c31493d5df95cfe6923399a3df41b30053aac92dfeb1b0390096f3f77c81bbcbff3d230d88c9c5327b32ae6fcc866f4c5d44f588225047f79391e6f2bde43088696f98a5c40b75814f542fca031376aaf33e38923a65befc580c9ec372b05cb2be36554d35fd59698b32ae30f75b31b291e112eaab449dcdca618bf84f8878c159fbe96242f1d931cb389a333dc048e9c5f814dfe98f6cd2673b2eff98cf1d3ac95ae5637f9b8d906be0845f2b0524b71bcdaf1099a894a0baf40847d316c29588cdb9ef404cef0c09c4fcf3637c4db0efec51fb2012bdbf3216987fa2d2014814bed75439a865eb015054ce6bb83c5ddede9e1e11703094692d6ff57c9341e8f9b8de40c0108ad40f1d2c1ea82b6914450ef3e7e223a5b6cca2ff47c4dd0cfea4463f137827d64d7f760382ad486c8adf07e3f726bf75acd911b6f51011eaefa0e16a7ac650d0cdcf054b88dfb1bf17f963feaa33a638cd1af4276bd2c434328c14f0b53f2df2cb9a5594afd3e9c942208d949fad7a67be1eb4d14ab186a16da24b52714711c4cd5db15f562e4323afe0ff5645f89e7af630ee44e000bb9b07900f102d829ebf5985d30c1a236046a7b723b41bb994eafc1e0ae2ea54e58986e1daaa4856375ad6af253b6a67c3bac01fb52eaf44f0403612954bb82297056204389160567e1ffb36126dd56fefe88f870e367f4f33133adb17dfd7fe32973f63a355f3e7d5870db73503d9a037687c89a95bea1cdfcc70b40d2fd85c6aa765ac957871aed028a4af07ade5bd5ca30d94111f9e5258e48e59dfbc27a181ce7b3ba979780fe06d469a04bc97fba230b932dff20a7420f3ea2919f544822a64f68d39c9657f98dd69e4a6c05f0fba9a15f250539cf6da62faae466bcd52c7134e3dd0f8c8926be1952b8849a94df8379a3f2ce4e44ee7ba5655efa010b7ea5218b9f9781fdcdc224eeb03c9155b0da1cc85c0066f00db7273bc6002bd05f699bc8e3dd7e9b36c07fd8fb3cf11ab4d510372b448aba12823e94e623430e19e52c026f898a4ba9e1b37a612bc2ca359ddf572741c18a440370d8840950acf2425ba10c42aef56d4d473ba9b10d4f7959108f18a01348ec63486f695a5a9233a8b00d82b0f181cb2bc3829d77d990c9322c49c50888dc52c94bc15dbf6aa8233eb4af997c5bd70ba3b0b903252e756c50baecf722292fbe5e033628df86d60c2deeed194ef4e075df9547a46314e6acda42e07696fd27784af7379164b904349ce730c9cdc5825004fa9448d794cbcff94d8c0a0b0cadc7b4af2a61f3081ae4b425e172a2d5a6e63d6708b62cb50c1ed4625a7b295faaf5c4b47960377d00649d3266dc752c357db0650bb8088092e19409b19099fd0448a48d8a56d51f9efc7e9629cfedd3155e857b051414fb436060caf91203eea50979c2c70b78f6dcf47fd79013b2d130d1e5325e93f73008e2612e9bca0e3b737f6edc9747c60ba393ca7f056f6d2e6c1df8117efd5927cab1bebcfd7d63eb58f4a86261d16765d9238416efadc6f3b38ce5a0cd1ae4e76f13a0fd88f6aa063bae52dc8f72040c68ead822b6936427ec64d567b4b23e78e0512f77a4fc8a9503f692d288f245093631ec2dc1eaf0d2ffeeefef998c0fe206b292b4ba56ab9f9a1490cdb419d1632d3fe8be7a7911fcd3725cbfe571002dc880f23c30cdb62ce75076557bae5122345ef55e480a70ae5238435f0129b8620d01769570295345d2f269f0457b6c4f32d43b939363b4f06387cd58537ce089bf7f4749e03229f0434193287a46cbf111eae1e8c44d86c8eea92131453220a8c5408ce0eaafe13722861c8482d81510b8e80fe241908e40dce469723e121fc9078d6ee0f56a2222570a2c8cc5f9f3b40f16ef0b73f4735f1381caa4a6e586f36dad15d3682995b8cb12e9c9ac700de6febba6eac241de2d7cc76e4ee473fc2fdfeaa840adb5e20164e97ec29d070aad6d215f07973e76b3ff007df862842a84458a50b02bd6b0050bd611ff01849312448e40eb58b4e4f885721e2a87e0b8fa87d634aa4a53a7cda920cb0941b04f1c6b4b711d6f6ccf04f4677a6dbb4e4d998d167db672f670602410d367c353e7d3caa01b25422be0e03625b9486698916a3f92525c0b85b3c666ee52a1f135023f4ad4668c3bbcbf9331f40244f0842e748691dc257dc9170855026f40321d4969d13179d9c0e61325cf1e7de7c2dbc9bf485d4298318a452ddb9353cbedd5635848fd7d943b70849ff6ea54bc42640d546f3cad3e8d90e53ddfea25ca8c23fa14988199461323bc08909fac48d9e99f3ae177459dfaa29e4148500ec676d0b3a6a705f676b0c760688486b015ef302a798855313fe18a183f000b364613a438155fd1bbac7a241bc8bae785aaed03541a4a209aaca80efc42ee63c4d2cb663169a72c1170d901922f1a0a568f3928c524111ea76ab9f7f24ffaa2e0f206e045ab6660204b352770a58c36494d3d67269fc49981037a0ca1700c0eb42f2cd81de286b30fc4f65f5b32f8b4866b608a1f944bd74fff5517b2ac0cf16510a5176116ee6e0764846ffbdf46cd36710957570a8e213ae4b1decc0ce2911e1ed965b84f86d82fb1471ffab35ec681e7a298770974be6a3cf52b9896773705df3189ca96363bb035a839fdb728ea8e5692132699e7f8068e8bc4be54b12a42dd134d40f2e6ddb1780d83aff18d80864641910dc3cf153763da71e54e79b4fea0e877c26c7e085b01dfc7b56b73cf903d17d9d48e125e24424afcb58bb81b61ae19d0f70be602d65887cbba2dc420d5c57cb52203991bf6b3432bd81354a892910c2088d7071349056b58643d66bb7d65d8eb9f284c94d43e2dc8f3ee37a3bad12b2f1cd8c785dc90f5355ba543e8afa69344f4071310e76c7099b125475400f4ddc45c170f9eb9828c2c486d41ef930e1588c9a8d7d956c47467b7be6e028d8489a9f09bc8a805639703d39b4a175227c67fc5117e354acfa2f9b0c492f7880999a47f6cd8e9ebb98083a33945aa14790ff0914cf26deb136019423c9d791a09747eb19329aa910eae74614e19ee008a56a5d56119c8601a178d153076d16b0e82ff3017a1321fe9899eb4e3b02c3fe504643856dd90d26c301ed2a70547a29f2beea1002acbbed379c845fff1abf80f82f66235250b688f119421aa3222e845d714af57abbb9653e6bcbcaac4b554913723fc06d8834b0d24b7a940e5ac6486ee3a00230b4bcef13840c0ec11907bf48ab2aecfe03ea26ed04f1371062b3fedd8263c6c34c38e35d71df9cec08594c0e56d1f9a248596387c2306457de8a0fffda10c3a0d6b00a82c1b1057badcc87baf1af86e8c9f4ff592fc2bc5322bb046c67218967e8a49d19d01ad90e5dd3eaf4f82e05400d6f42c79a22af80e3c9649996307876f6a94389399777f2ad01fe32f6d80526870ae6699ddaae7f7627b90df3a8116c851076677a9172e72fc92a0b6a38073acb6a42a5a755398d6e687a401c0304a7188cae2affa34a5a3aac06d4ceb87bcb5f0ff002431cf159410e10c65bdb92b53570634a55477eba622d0d2590e3d376966e6705fdac3661728b25075f9c7c15405e3e5bf7e880764aceb5745d54bebb15f82037338da91497621f9983b00155ddc887c67420e04c4903985790559e07625fa40c813baa01142578e354c0c2e57221e810466b2e7ad15e1e35b690e1f9efe77b0c6330b9a56d37c97b6f594142820cc7dfdb31bba09840cfa54c813af123321d9d66076880272b79c82fc40d0ba1ebbf7bcf1f185bf25e150cde90f98bb0b1f455e61a271fc6730260129b769f3641277a8e8de4eb740896f2c95abe380d09a7cc8ff395d2cfa10bc9b46a2e7bd39fa85295f881fd91d2bdfda948f9748c8b9047a02e0557a737fe7b819a853ffe79baaa72097ff0d04f02640ae62bcfd3da567de32415fce19a42ec06c72b4a1b41c6d8af1b4f73b3c00cec5abcd5b8675852d5a5604861035a8191b05a7128ae9a6573b9b870d4b0e825fd052777acbb982dc5838d1cf280fb23031acf075a4cd60ef20e6b74b25c29e5fcb6c0924b450c4fe3f9e4e44feefebfc6b2bf5e6d6aa73bda299edb9b1a07e581dc12a5e2984721a775126ec7b1d7b042f495d6c08c60649297ed05ed8ef47d12e198332129bb5b96819ffcf85e089d0e6cdd110226b421c1e5b094280f92453663cbba757deb4627abd82f605823de9f980f8d90ddf4fbde7f93f6d92043b652df27bc5e095989d15075668e449c0d6ce2a7bcfaf6a54b4ee201be8f759b48feb026b95950888f2a1bd232d087e3a1fcf9301faf156798a9a9744ba9540b8590835321e5f7eadea86a8934e5b68d24d63823363bbe9e8c6522863eb56006f4cec53796924412e0c2c904cd2c451b1e7f1c0b911f66dc6f08099208421e300efff24e77cce9734e1fb3df6c12a7fff75e3163a0c88283e908bb3228bdd2f93caaa6f256143c9e7f05c763a24773be380a0495e5d5b63752fdb3e120b742d526653feda206d1e6ec1b504c00292cd858f9024ce0b56659654d8029709cd25634a6497afbf32e0f2dc6fb02f63637d0e2a1b6e321e6078c788eac75a8fd05feefe43034c487c559acaf3402f4fd293a6d9a9ee319f63e23052795403a465221c0b5a0a58c232c78f12a87c6acfc7567425a26d749546ecfb3aed72395174b814f80f737c363c7cf83cf52e85ea2a0fa1956eb3a308f1de4dc8aee9a49de567ff4dcc085fab82bdfed0441c2ba9e30754b2758865004b0051852481ed90a0780593f88faa29ebd1c957fc0f0212da83b60220b462863e992cf8b701bc328e334d51fad104b96102805984cfb230f8ceef0fd5fe43a1b2f309aad033b88c95df000f3c961661cc964c5c4624e408232f2661fd30b05a8d540e21d5dd8aa59ec5455625a5872b12d654eaa9d640a444ed847e011050b8b80563e730c8da85922e45ac1dc8001f1c0ac18a15ac6d0b445130f04767ccc31b4e318447bc4f355760289c8cc52944d27abac5f270144509a3523f39fccb839e76a07e848191bcd7a415abda65a9a21c6d6821a9e8dc5b7d2b14f13e99f6012ac7d75f4ede4922f841346370702941e32df228a0dd6e5487309c90bd04f544a587ffae0c9c1f70a481ae4bb4ae502a0d008162401671380efc12a420066f54f9ff3ff42883baadc2aaabeb0fe7c764842f3d56f15d8e0ffcd59fb3ce670d3a0c77c0b8095bc3e13a0552cceae235f72e014d8c1c786de238046b472fef76fdc837a98217ece114f4dacc75ab6843ecf5c0da8c2730b5b8aad09de7ab6652a5138623dbbafebd4fd771416ebc41994ac0b20bdf7c4d0e9a3a835d1caa934b3bd7ae56495a58fe99cd11d8408335de197621090c8197228fd064d56c943f07c5fbf569565fc34dfbbe03b9726a0cba610153fb9ba0d6969f54ba2a62d1322e4e67a4858a3107527c90900d8cd78dd72b48910a1440d115d2aece8783c93469db0302d16c38ecb4242cfefc173481da7e33225e00c8514531c6e81259e50d6076b7597684dd3a1cfb7a95ad9ae8b06e63aa501ee7a21ecec3844ff36b8b84ba266bef9b5a86b8310a629f499d5be239e19561734f35005991d14d534124631ff4070e69779d2f9c58cd62f7a8f5dfe300dc9e84c2e9bf8ea193285a64197039e673fc0862886704eda127e0441e6e15c8684f7ac7262214fdb4292f5bd074ad0797019fa3b12812d2c8362bf83e5977421fbc7ce754f294ad1a98fbaeb336265c5b6756c37e3a6e0e28d7014dbd66b075ea2cb3a8dbf7b5b7afbde5e629804aefa87456495964bfa9ab528aca035e696ab2e9469524f9202559df168a9918c1c76472c7bda96fadac38eeedf7780849275d395e3395c07cff0248b5226dc734ec79a7d1a8d524e21eb6f5535c852ef9b6d465230c9713724b913eeb360c554b67cd5c9a90474803070fade3829096201f00b4bca793bcaa13ee0ae04fde8aad3f4ad84d0066a6bb702a5fc6f003096768c870528cef81cb5e01f4bbf44b2e037cd765107d9a05af60ef52232e444f769b13df0c44152b7e35b243a5aebb08f4275b490b914b2c8adf46d023c5bd30f4bfcb4b13566b826a9fe941c50496e12946c0cd68c3e1e4f2f5171fee3cd47489ddd7fa8e4a5b4d38a48e34447e448149e4ed394c9bc4f58fab4a88ab1bf3e2defc1f35a6a94b568f4c896549a42db0fd06cad5e1a25d270b08c75383eb81449b248b4383f9a56318a0c21cfdffba36edb63fe84f5f12420b1476c89d32e660685d036e4cc5d03d7aa721a1871651dac0fb34bcbe5b4c0d3ad8402f227b89feebb06ffc2a9234ac5e698f3b10715c651fde9197551c74513d5b0bcf394bd4e8cf24b73644ea39776ceff233c09941a0b1653ec23c2cf0d6bfa6c1f10b2c2ee5bac2c364c35447684b4034d1be156a501f9a23859c132a6466bf48ddbfa5ffbc55917bcece59c645a4643b5d336d3d40108529279d5788c3dab08adb7e3fb0364799c8bb8e7f1ed71e64f11f462a24372d2d36f2668274bac4816d337080a71b38e290752a51b7e662473c5f20d386fc1e9a332c201c5513cc38db2cbcf24d33d275bd42cb54fa3a17150664e8f0ca588ad4091ef2ab939499dfbb0f8b1d0a45ba59356b99124d9ae6d73677c70a5a1319e49e1005b99606d47df4240488471b9b96e237bb1219cf7794b4e0e5a89df574d1dc4a80cdc530241b70b350bb6a7b1b35aaf05adcc7a2715468e76952fbc643a3aa138c708adc32c01604963edd2ee23d77dc9df9bdd87d1f3ad47c90dc4d2d62efb551284cd0a674ce5fff9a06fc99b63045adf0653c42fe12ee45eba853db179576f68074d5273f800bb3564face8a8bd71b149269569f8d87eedeac7a0f5ca839fa4fd68b35d2a1451d9fa1f08761c06a9d28d67aa991674cc9b16a2fc2281a17782299132f13c7379990eddd6ec19f234384392447b5fce2078f59f2f0a46d748b98b571a8b7e83cb1c1bf3dff1a86b5c0af30e2bb6dbcec2ac11270056200d5870ab2332d2f62d8e8aa9c8eb2ed0596771254327f3925df95ef2a338ae182bf1d0125b436fae5a0c0b3ec4c24b99a29e94629900da8d610fb61e799fb93419590147691509aef08bc5644f2bef0b2f499c31787d12d3c34add1f13fd207ebfd82ad2b37049fcd954e3a2d1efc22fe8b0b01b4868446c6cf3fb7dd71a8afe06b8733ca31cd7a2fbaf8b80b2d66e0cb51af9a771871761435137be2fbea0bbd43f050c9fe05aa840e3e6875aa898aa7fd19e5d5ba334b92faeba6c82b00abd13b708ca11867b148e3a1b3e322dea122c1bc8c56e83427c1a50ac0e37b96f0ca966a3ff60d4e1f0cffa522ea02d0c4ba6419f6813f1eab2eb80342db8a178b18095ff32f4933444ea6cb5dd0d6fa65dd38a4acdb0b3d4648a867a506c30ccb37e8b44eb358a1e16c7d869d5e2bc5f519d40f27caf92a79adeaaa7ffbb2d141a8d9299b28b8345704e86999e85dcdf2eeba9befe76560c5ad134e3c30d62f7ee94f026105e44515967bd6bbe6097cffca40fd7da6fc7aaae4a6b5522ca951e387aee148c1697ebdafac707bfd9b5d7c4b2b8649800ac2a9d329926a65a8f300029d48baf1b42bbf9efea96295afd9e8dfced8ec193cf332f6f047dd72618d64c88eab2ffd50d68c02e6f40824a38cd5f6af57ddc8ff66e6deaf4833c94f8b8267f77b206adc29b379f9e2c54112e0b42e41a58715cea825e8bb3605d0df67d95f6c5b34c0927fb652bbe832617a7013f52a248086273180b3b883bc2fadbcda2d51adc5852063152b8196c81c36b575d9cd6742a0858d87ae0ba3cf4c16f525304bf55b2f125e4062ff510ec7f41b4a5abfe055eb86369b563928d7acc7ab1b26cfc47e24c4cbd8a799b97efb3f3c01d6562222dda5a74c4ad5853dc81c495c7f318da70cd4563e57c532812c54724cfb349f41ed406a0ada554b9a34a14a499825d35e5dbd7801f2264ebde1e0688c37efda2b90f2f967a32cde4568e348630021181c9ddc9b941521809da26f89300acc45586f39dfe333e0dff7db4eae494597de5a23de4b851f4b5aa8f45e4ee8e26e7350ee9177fdeb05a30a026ff66ce71e98afa62f0255aef84f583e4934175d5ad69d85767c18570fd9f484b3bb3e4309d9758b4b5a7612dcd134069ce33bda0601a6ca6536d2f653e76fc8b6574e180e035459bfae77095d82c4e3e5b6c6f6e466f533fa42be57964da454e4750ca48fc8c487f898d8e0fec6733c902959329a991148821a2ae93b9f5aafca7f0a97037c3e9c82840c48352ec79748d562fb8cfa737eb947b929b83efb3fd4efb85dfda03b0dea0a819d953e4a7a6c2564d0301da45cfc35d997a0bf0e8ba041a677f2c73262ab86e95f9357746c66b3ef4f28652c59c78f1cc16991fd29990f55637773cd2123a3a40cc40ccdd3e4eb52d6da8363fb979df325874a4f803bc335aef01853cffecb32338be0cf4753464ff5cadae3b908eced328e6a8e2614e7d7b8f1477ed5a98824526f55e14d3e4f272a7dee442888166b86f355319190f7ac200f63a6c89044fae7f2eebc3c028088e3683fddb091950e813aacc2495c7d33628eff541f6f9c16729b1da8ca4c64e5cf1e4248f7b1d346bfe8d3c8b3b3e2fe0f049d0f5073e80770ec654f4e7876be3c1487fe54756b94a1626cad7753b37c6404af40f269d35e615b58185f133082b8cf93665d38c888c45bc9f8faa8893f2013c8917badc88bd25c588c62b92cc3d3c3d7297888649397299e23b41ebea6c1965b6962bc420032840923ffb6b6020b75d5b04ce0ea35a8503bc64a42de43a720ea413e01da6c0056cc679ca886bdce7a018330eea3ef6654355913a162a66f37e7b1643afc1fca4924dfb01af967ab250d2acaee3c315fca1d44a6b6d64f883ff6227bb411ac0edf94e4d06a9890102b3b0f818c1dabf316461179ffc3af60cd781cfb09d5813c8ebf2f8433eeb79be13db9eb24c2afdecd626813e89526a754f01958a8924fe1dae61831e3565ebceb67a26e64c5cd6153d480fb0dd575ba6af0a02b2ce2688d48bc27601589e5e1ae5b6191b88175395e2f24a5ec0efd2863fc39d8e3405b9d5ca3d5a536d3fda89e7b7feb8c9047b520d4ab8aef9c2d6ff4755ee87826a9908b3fcb67c3def670506a45d27d7cb56350678e30952796ff80ee87d0682fc31558e2412e490570e7688a5bfcf7a13ec2614a553d891bca55adda2d371fa6488a5a2e0f6f32e1ed6c2b6e4aa187a84460e80f98e817f32810bfcae7731b349a6de3856eb11deedc8d2d886a96a9ec76bd3939b1e6ee4840af4b332f1af755494ea98ae78a6696cea8e36b6412daf84635f92b48b05885a49fd4a57ca52072d59af0a11261a984246de179afcc976623798c86b5bb0325a440f08448981337bfd17d6a77cd53118e4abc55a61a7b80aee687ce918d6ac2f05103622b6a6bfe689094397023ffc95cadb861ff82d402490b6f55549debc7f94ea1c18d9287418046c9a0a40c0c3620258a3114ac4d55726697cd877322bf3f783024f7b6f1ab6762a2427bfc14c2694086457ded43e4bb66b599a2939c03238c530ee23e3796be82a261706a8608a86d5101a3cc644a94ba3d4c2e75b45e55f96ed1e5aec58dc6054eb019ddfc736e2a6f181ed00af19eaf935793a0080b372e08307a7f281b4e990ba0e0dcc49d1b0624db578ec47429d55c3e6a8903b457b8a38d0925dba9988c6da65ddd9ae03f6f36ddd65f1d3cd6b9fc732bb733c42817c55a2a395cc3447de9430956dbd76be4099223d761d615dbf8984fb124c538d9e21a463027f2c2dc03094beef3fcf0f3118ac87e5eba7799e5105efd33220a6d8e6ff590c9a294255f6bbdfc9fdb9f2ae34a2cba50647c92267dc1f1fb850d412eada0e1ce7d58f832dcd8062bcda6d9f332c921e36e855341233135fa48b1f34775e08982cd51b331ff1292247da8bec5e7462b8423223bd9c2f54f9bf7b9026d3b2d1ea32d4ef4e125063716562517efd9fc6dbf4cf3ea34bfa6957d1c62ed04600f178c17811ba4f12b5b7dd1ac93b58d843ef1264abd068bcdadfa214021a1a6deeaca1698b611e5ea85c78a9fa0cb645635c659c732a3a9c30fbf90e12ed952352ed99506529c65cc3c8feb8ecd9610ead8ab51c9f9b0bc3f2129f5b682f014aa4a272d5a5fc91368e6437eea88b9f5ca9e2ca8f370a2159a88b5da40ccaa4096d35f49f55c1c5119196eaf43508b957e0ca6b9b415ec685dad0f99104a4c789340de7577c60ab1855c7e1719b3af726d9ab62e8c7813f6f11483bc95aa7b1f2819213a423c08b706160e20ee308a0f21cee751fd05ad740d45bedf516baac6bdd2c402f51cbad443dc7b6731459fee232f96de865d1d520ac71d5bc3ec4fe1cce4335a00e6858ba726625473617571fa23611ea8dce803620f2bdc7dcaff02ede3fbb9e627fd6fa87a4f6325229f4d0f40b2bce503922abb8466bbef762cac995889ad156f96d2d04e8f3de6e771d1eb1e2813bb6fa01a6fcd6a74798c5d4147a869ae2f1bc667b729ce2f095e919316022dddac8fa655075083b0dc6c0563815a282793cb1090b57278c13cc673230893305538d1f98d1aa45edb6893b975dee421c3d3dc09d063ef1b9ed1dd9ae43b57dc14d0d52e15023f687ebe91ee0a98ed02ed7fed26c93ac6230268f27d6946a68db71517c87f56981cf53ef5179477cb281ee87cdbcdb2be2bb672a39f248335c19666083d3ea03508e97a2bcaa5d4052dd2bde9bd60642d92058f7f74a8a95c145d443510d5479c98b5e0b48bb1463160a360d22023b7aaf28a0fd4a25801aff256500cc7d5e5456905130dbf3936c68cfb61c4c87a259cc9be74518cd52497e82bfa1de6a2d1b5e63181b5e9b03e3aff55411ffaf64699841d7d54b8829aaa6238a2d6e1eec5649cd5ad4bafb8b505245b7f625c0a9327ce216b7c99f2dc6e0d26fad63dfc18e7e96bf61d55b543cbb8487d2a503983bde454cf37c5a852492551528a7f6d4496786f1cc9903852f517d6eae67c05a0c2733228f4a005a4d267526a621ab4e126b65951ded3a47af7cf71291533f162dc0743f951ddbd3c702fa4730b945576ef2fa565ab84ac246a4b91b8351c7f5270fd04d0cdc31191c90ac22cc570e16e7640ed98de4791d7b318c328d49a11f807e0ff1fd6f4b53d336535f85e34cb4042a69c9bd581081d68b38ffb52316bbc374f8d56fbd71aa755eb6a6604548594daad3ccf3fc5615e01b852905c76cf2755954a16ab0ea46896f9e9d67664a2b4b4d148a36b8950220473b59851debeb2094ebfdf72f004e97d1d3efa12c9955857bf3ad8e74136f1f7821363c0eddcf4b8f858f1c23f9ea28eb1d4216807ffd849d3ada03181a8563170069328088c57fb1ea02e3721e44c327443fcf4b424cce19afbb9e8cf06b768aa0996f5c36f64362e1fc5405b781f0ec0f8dd3732b69ed591bf866b8dd4ae03bc96ffc8b2d891f0a342576c40ccc37a347d42ae2827c69c3453964852b4a27904392e0f4b5a79b11a9275197644b21b2b4bedd7e8fafc8c1f7259ed92092d5f3d5ac237e187840e009a7ed67092635821ef1f331992894baf7641e9e064b71cb4962ce139c2395dd1b50531a4186fb7b4d1574e1ea0f54160e9fecba239c8480655ee79a8bd12371a9c78a9a5593fc0509d36978c88d913c047e0e17c0ae957af24879fa2ba9700479b79acd8d74bf8919d3d9dd7ccad296a1a88e9b24a92c20b7c7891dc5d406ff55c68c9d3052cd6d46bcccf84eed9f8badc6733099b4d2dc7e8421eaa0796dc8039c67f18854ac1b58364ab1851e8083ef7fc6bd65f70d150d27484906c12bc94be233b0dba3e6f917eb5cf06b87fee6307c8e29d19b68342d5707223dd4ca69f740f8c4726603714a80099d464da01d3864d35e25c8689fa6bc655d8ed9d20fcd5dbf1495c689eabba05aa05f9bef8ecfe09e43a9a597bf40ff6ae341f8c92597e28f888beb02cc30f155e1fe9772a2bd98f6c0a55b7cfcc3c81e9a9e5b39121b7671089efcf57e721b04496b69b1c1c933e3bd60119fbff6be8a6bed27a93e22c26c7c1421eb6a49c76fbeed3a3454bd5a6d2223f0896ea28ab53e7587a211736e88cc36846bf77c9d9d29cd3284c15fb49dd73620c1738fd4a7fc7fa1abf3d821cde14c4afd8dd54496735478287278ea7ac5e1c8cf348543698b539d4c4c178344a19e9e29941a656282c735a8cdcfa30cd26c113c1b4c7f02d539a40d84f93df4f573a6787414a70a4071908d3c2e885ce71e228f8eab317ac179de770346f7e6c5158a71968bb3959499b25d265b4071ed402450f76c01da365a721131c65820faca739d6047300b6586c2a3f31f7454ca1a3e08bd5596291e258863774009ac7adb89823b0fc7749d81e9e40a42cc0b68f4993e482f996f60234af63b7eb2922f90f3aa90ac20d923d24faad58cefa0ad165c7a00c1b1b4e499de51e646fad80030da9dc5e7e241dfc11b7cbbc5861a83c7b0444dd5870192d26cfde1618988d40565e14486b5b5b99676e324b43882d151bd259731c25d52151d80939708a99555bd007351433c999887667822aedf7ffaaaa4469e0bd10ca9186463af1f442a690982bc1231de6710778d20d79039740ba04ac2e40a64a8d78630bb7375607b8972ed868f2aa30b466de0829b85999acbc69d73cb661e0ee78f6d02a9b30570fc20cb3891d4946d8292e807363506d8844527c21bc80726215aa29f1a803bf10c3aa33ce0d7b8760c0d2c176f4988167c4470159bd7 +MD = 1e69edd4e086c929fcc7791baf4f8c6dca929080330e863aa2b9b99a92f26211 + +Len = 107400 +Msg = df2494b76babc612c3a12a55ef80a2e885151b1670326d66f0a48228e264bb4e42128f7dee9e7664ac49054d6fcc5af1d6d6ba91f6bc7942596c1a8946a4b8274361a536d9995075972c6ce15a194e85cbed9792288214b248e5e29ad998d6deedfa1b0ab5031dee8b34a63936ce474a6a43fa428fea055ec3f6228422a9dc1b45c53c200844a5769148fd7e8e550de8bdbe2bc9b25d16edd587216eaa3f948555aa4fa15dc4b0b6b050b7d8e7156808cc47714e19440d0883812881f7c3c4c524929bb439ea0656f0351d6ecb7620529dc716f94d05b356d7ca7fe4939b3583ba63698226206efd59dd7769c1e0fc6d3b2460f3d50ad080d84b6ec00631af6620070133abceb253f4310df052bbc602ab48986439b92c2d8eec3d3dd6ecfa165d64abee515a9802c819262c046f44b8f6190574027c8e06029633828d33dd3c7964afdb9e2de9afdd7e0c4562643f382581f149b7bac0b23b2f99b8b27021807dee54231caf6c043c460562f1037e294067a20ee0da88da41a0b706ce0a8e8970e9e4ee5348eba9ec5b5aab3bb2cb344db261e90646af261dd2d5956869ec005a3fa563ca612c46f5a35349c7daec01564c7602b065fd3dd6ac3b8d08f5038c43d7e0ab0960f982600837641de4aa37621c2982669f39c87415311537169bd63499dced98af180534715023c636cd7e7a0ac291b05c2d6e00f7fe557b347b85346de35200b4517879c5e4af493a1d80a5fe885617049fd88139eb765fb76c424c3b3b02c8d96e8338ee3c302e5762e2ebe0c4fa22ff58aeffc340a0680736b583eb2d24788535cd78d3a0cdfef4634f5498bfa45ab62097837d45fa208ca185e16501e1981f70ff415c57ae407be96de90fbe7d458fbe3b134f41ad0eae755b6e91ff60b111e5c09b71abfc7c53bce4b12b0cad6df3fc43ba217ee0bad679de33586fca4ac25db98ffae2df3ae4a45db4d5f05b5a4ba0577ddb42bcad6a76b737a09846ec9a9f9224df457e03966980fbf6b1b092fd731e6665d6696ed4348d8253c3fd1e0175f263081c025ed1d2f48d7498d39f733d417ca7820e857a7b091d573816685fa581525eaf92d4fda8627339edec0913c667c7898dd47bc613d30f963fba521cf8e8fcc74557ec82b371b32bf8255647d53950f441e2d71ec39260f6201165a036cf662c28792ec8bbca573400a41076345f1ecee46121ec54ee19612242285427dd9a769e1f22388814663b4f91be07a9803901bf78e2978f9141be8e76249e92bb9f8bf0715138e1f8e9272b15e964fd44aa731a50a0873920e0f5acd4dfe741117d5566984231901ee7e2dd5818f4f855780e3d10e6241d46ffedc485e398fa863cbb47bc7d8c5b2d6853ac81d31f6158abb86fe139d602a9a4901eb0b81786c2e5a4dd048baf0bce7562e2b8a34d02f84c5bf9eb2305aff1dac5027ee4cead6e80fa6e99f30468a814f7c6270ee6a1db62de23552b19edc7a674b717f123363213a443a33df1396450fa9ff39e5207a9f5293548da7a84d3128586a26780ebb5a88aa449f2e048a92e53b647dbfafc0b0e2477ebb6903cbc25e1b747cc4c92a04694d8b399385b20b8eb53494c4447a8b3b7316749c4dd2ae76e9230aaeff49af6aa290aba613b70f5a8bd217999b22aefcaaae31b7c2ec761155e8288d1d94cbfb4dd76ddc3b042ed733ef8ea620336c7452b88b221f8389abf6568ef5a095da99a3d1e8bc6813ea9351cf6280503774510fc7d981c03289a52ed0866f24b76bc44912b4bd2780b30d4a042baec7a92701365eb55d3173d6ab83f8a7501683f019a21c4a64f5b528a3a1205287d30325037aefa6fb0fc1f11d7a317a4ef295f7f85341223a5f3bac04dba66fb22ecfdee621ed1701a7977979960d77c24537f3eeb143d4a3c08ecd9f7df8eba42789b517dfe99e07958ed05e4c0f18408b14647b6076ca37c628fdd1ecba4ed449ab58171967945345f2862a2098d44030a5da1cc56c7b7cec84cd5acc4d11c921bf387242e9a29b557d1b6ba84d5457e256b541749770d9803cbc888133dd093c2fc6a800e241363078f0a1479ef0edfcb19697d27a42d43dcb3be9a000f90af5979326c7e3e8ca6390b659830032890c40fe7e83a75a03818adbfcad270e54ea611e8cfc5101be6b3edcf2ef03a19f7d8f4d63fc813edde8260d400d38756d8736d93932cc3488b3edc50be03bb6b7ecf713f6a1aa69c9ce1750424497d6bb586343b9ffb7f9bfda280f130afafa58c702d2950785536dcfc93581e7d79ac4ea70fe8db7a6b9da5a782b96c3d3e508884d19cdb294842059c63d6d6b7a4a209a0a6a32ff0b0d5e9158ab15af58ff3dcd304a0f277a8487f898c88353f25d44f38a07383a775cb32b33fdfe31ecb16ef256f3e7da89dd0b18bb776215c25ca8936a661bfe5e308e94a4a4ded0119422942b97d65054e63056a8ca78357cc0d1d635f74cbf3221374a2520361e7a2fdf2f28b6690d6e488e2edb22344784124758774b48f1959743d83000728168ed2b2fc8dffe76386c8b0ded2f24a07ad97f76a8c29f49eb1b4aab5fc6328d70446d129665252f35daad803931d7f4c37ef0dd350dce0cc515a25ffed1f4b712ce3b741bf67bad091b6c0249eaaca8f08b31e8b67d43ce961ee152b7c41782e2f30cd0c3f4405404974d10b9aa41217476b915b7b19f13e0bf9e2ff50d3975435b579518ff31d8cad6d737f3010412d1da0d00931b4e6137502f34412dc8f2c65fb24da567ce8fce6280f4708f83e19b2d8425d33ac02b0c791b2c169654afee889376d3de550d71c2d0b2cc963f1232d9e4f2129092f5c2a2e8640fe75af12e6e718d3ec383c677605d1f61c5a4293b7775f1bbad45460c662d7877814a6af869e31d40a7d93f21d37c76da8e419b077edda148f145804c2b40e60804a171ef035e9373fba3fc1394b575816095ec3968729d550d1259046ad9191be20eaa84d34a7c635f9271cf1cae8810dd1f9143bceb223a413a24c7cd3c9e2d99d0793c524d5479141334a6d3be1ae3645d2eb8f48dec933e3b7808ab11e1d7aca57277f8cda83fe9b4b95d626aca8396cd290ba7f158da6484c7398ccf90848adc0aea4f41e42220d57435413b037bd4fdf4ae3fbc039a54b496ecfaec06dec512b6e5be4094ba5a23f9d0e8b55226af4e26332424593d7f396b956dedd120dbb81b0cde50368305febeb2d150333e965c421d0de0e64e5481c9c56e4b6bf54f5a8bc217e745f6b4e4475d83a2230e2aa6bcde55781737652c15ff749b53e68068ada8038c4f9fd76308238811ae2fcc9c1ae9833088a331a6e4960944056f3f60e52129a5bfe8fdf985c75725411e0ccad0e12fc0a6fc4a70ca3ba4dc1ce9acd1b6bfe2ca136c8926549b695368536ba16337b39efebd00181b52cfc9f6f07949b6f6d76ff6951967d9223732905a59ce666fa731ec6ff31b7c7df2a4201e25375a48601db5ed1f3ca7fe593965bd57904efb73101c8fb3e9421fb5e124cd210915372549edef1b23357247de34d6f595816dbfbffb96930020ba721771780d5d7c358f7b1b159da9f6407ba7aa41b45ca238e598060f410e8cc0bfad92c94a92f3e61737a9fb073f8ecb7d1c1278043425df7d4ec8642e52dad5071a051b595810ab54f63709e8625385c4a22a0475ea80e3ff3acf3fbb7bbf69e0e344f8b9fb5707b13d3ebcd190e901dae03d5179be47c8d3f266fc88e79ef1c5afdedbfd2b3b8dc4832d9e2379b3b2284ce909904deef0a3fc3c251734fdff3dc64f5f933632aff75e70288e5b4839454ea9775a07fb1de7bebb33d6d25104a1ccf2de0ccad0e0d225c2e652d41ae9ba7bfb25277ad09307b070c3485e3c84aa3a75f1da47aab2dd7f82521162a055e03b5abd892513e28c87d93e0c272501bf8555158c3b04a881d23ae65a857d006f33449b0f85499f0e9b711e62cb8f0e4a43fcc38323933457b4593d9ecb057bafca45382b19c62ad661b4df1cb9eefce2dcf9765f8fbae8d7ac69a24e91ee1a3a86d92f5c613e18ac81311a7a80c97001d6c7c881de00388a00f8ceea887b8e87ef7ceb23ea05dad950623b0caeb2ea2fb7d4149aacf795d788630e12fd522b306abce61212a203e585c4cb53921fdde506caf4fa6af5935879450a388ee6829c9ef5ca9789b7066967c545efe984cdaa3a08e43196aeb3757a1b2dcbbbcd2744e2c3e324ada964cd9d00352203663be7c81a6cc0be7778c6f161f35ce25a7bc1dcb3da59fcfda1aa8bf213aa7e589b36377be93850e455b57595f55cb133128bf3221aa7f6283f58cb175bd9c8c07e1e1eaa03f8ec79dcd98d43ae6b96db6e1bbcbb2e8f37bdb070c0ec8840613256f7d4212792ffac60ab9ee788da11b7f0f99fdb80802022878b03fe236ed612b85c0e7dde96f8f0939420ee0f48a04d4d8e22ffab1b5dfb37000aa8b7c5960614d3142c936566eae82bb9e3cc37c12fc671dcb418c13fac41685b88bfe53f70fec58b99d09ec80fd0ead0552a2802c41e2d2385541243ba292c6d1a963e20e7c8dbdb523093aab3d05a0abea379c3ae9728adefe77f08b970d4b5eae540f8ef156e99f21df47d8b88f1af8ce2dda253d3ecb2504d680d0e9af9dc56378e15db66f63dd60321bf0b4d2a554c52a42d3856f20752e08dbf4e19f43708d7860641301b3d9a8abbfd97af9c82796d6db2d092c0e3645b209ddc706c5c5f7fb948b503462f9c0f23a7d522a0cd90adbad1b109e1fd0127f1375e30bac2e68aa86bbb42ff7a772ae94c2838df7d2e9dec086e4ecdaab5a1400a27cd77f12a72d3dda881bfa4a8487d692574c137afb8a1d54cb3fc72fe81cd84edc91c6d97d2bc1d1141ff349bf2707d4148ce83a0784cb6f0ebf6fc5833da36049620aeab24c1b89a0646b0eeb332f700378fc78d777d2bdf59359d3f21f6ac00c72d1af0e3952e97412ea00d056564d6c35da9d31093b28c7e40dc3fe6b35566de8a68f599a6ed8d850f6873536855597ee0712dee20d97ced914fb6fc90a0ab3ec0ef25a1678401346190be47bc46fcbc90c3ea6ab50f1509bf5e50de0f3c428a89340da5677086e1ddaf4a3ce198352ee7288500c0c20965138e79f59f76c1241bce2a102731831fdc1ab3bd78e7a7286c15aa6ac4a0be824666befdb1eeabae2113e77c17458a40d5796743d2a3a74b97f1b6e34129a8d3c06d8c30f712668b11bbd243b83b00e76231e15a8f5aca0ae3632714b6ab5cfc0a096e49df70864d661c76f19a708b95faeabe8c2f8b83d8e6d09779a5c44f4d9bd0d1a2cb979f57a6cc52103e948ebf17ea6b3303a479580ad0748c9ef2f45aee4a52c64bd5f64c5c21d02a04f58ed541d753f9dc33feead7d94ab7f2b5e0a689dc6e4ef0da4fadeed39da99e42007af138254af9c8a913d6518696419ba8b2e70d80872b12efcee757f7195ad88802ae634b90ecc0ec657edfb4a21c0290f29e6436198afe7b51ce0598f3db479a2ef20f238635bb5d4239ea6165e2994e080866fb70611b56c91b82efb3900d9b32348269756526505caff7f95c25ae4445cd8c4d267df82687484667e309992fcf1e7379f8eb8089f7499ef8ff65dff84e565ab79611f35f2eecd69e0cb888ac57f848d18b49585eb48f25fcba23acfe842b48a769cdbb652271a9ee9b1d4ab56f5a790ca6ff2c4316f9435126df73bb79c4eca8fc11aedd046f36f608a85dbf67cd9a87d68d6adb91107db2cff9e2a3b1ab9d48d78e5c2b474e0430f00a404ee3ca03df8474928ca54d1b7e1013686bae57f0f3768431d45d86a83bcb9370d875c87b704b3531dad637c33f91bc8367d2427e2573a3ce6cc9b1895305d49de0604137e6954fd74ab6490b53bf45b22cc003ab7b396d80591e473e23395df5fb65ecefaefd34e150a8093a77035f732efa13ff515222062dcdc02d28d090378de8f3f935dd84fe812de0f706085a44e2d2ebe0343891be5f5aa4dce0560bc11c5c2eeb27d0a06d60da78b78d38d6b5ecfd0404b0571d1772378dc3c64421312b41d64bd15127dc54102902791f5534a1dae4c3425834bfeb06b388572590e63f3c8281eee97bc9ef718a5e5616465fa5ff16a2669669063e2ade812f74ab8eccaecc23bd042c94a7710521a0d82a856ddc022899bc2a88f0266744abbc0169681b1bb7e83bbaeb009131f2e5bf82447df44fdc681419c6957bd6594856132475f3e9a4ecea973b7f5499589146ee1b3aca48243e48973d82bdb415a1fd513e8adbce7127ab51e4982d93b93008be8848d093a698b4235c6c4e893034fc5c162b4522b344f86b94dfaec99b5e6f840a0ca9baba04015eb1a6b0be0f7ded9459bb929ec1b15c54baaa3a938558f5df1f1ab815f51c9a99cbc686cb29d94b8a67d0768b52f9419dd4ac6399fddc460045d77e4dee2efa850930334905f380becefe5380bd8942b7614aac356b34bac80ce78ebaebd7ab70f89848b03a494791fd89ac1787edca21ef09970e641ece76d2bf4bf59483280e285329892d56eab48226f2a83893527ddc6d968d6ed71bad35c348767eddfabd0705784c5588f486fb4ac9cb5616762bc7eb3d2ae21a0ccbb48806c5e1348e0e23039762496bff99a76993e946e3afac2016fd6f74443c62cd92096c82136c61fae209738f7c566d3507d39aa197698f835559e38be204f2ff65b2c2c8171058fd2560f88e46b36212aa2b47fc8e2e36403ad4ff9f60010cb877a57139ac1463a8522059cc377128dec4ed899e447841053be14c356aab00875c53e04d4ee3129adcba1fdfdb2a11d7ecacd82d66d22040ed1131c45e8d8eea6840a8797bf6d63339a0d32fbe48cdbc85ebac2051c66471a2e748f2b80308603ffe2244bfda3f000d76ec324d57acfb351c7dfd81cf7e0611d60a1713b5fd7747eef6458707ad9fbcaef39df4c140025ed1e63b9347fdacae6ffdc7de10ee9e24858ce27e09b250bbab51b961302760778e4d60f2ea33a3cd078c7b83ae4c533a646eb1e15addc1af1ebf1b0f0eb39423b44be41d00d0aa124f4ea8a0d8a7251e0e141a6d659070fb5b74495ac7752bc7e64a5b9e36552e02b9ace5c24a7f8223e505a28ed47acd14f419aac0f4fc85f896c12de2e5218e12a93fa9445e4609007bcbe0a201ed64a07b27e5fe01ba312a3858e187b7d668c6c06f69c39e9b182854cf3b638868a6124327515e982ebbc15d7a0cf908e43c9381c4bdac85df3dffe298392fd29d2fef0e80937f02da9472889d06b362cb880d5fc80b8b9e92f91bb7af60836acb509b1fdc12bbec4e59a21c3a65435ffcb998cd01d9cd6346c7f0468d27eadba3c6bb099255a1beea59d4bafabf355b086fca5bdabf0e5e7b291211ba15e28f96d0a35e2be2cce53f338ed7266ae5ee7f19168edb11bafa909af59baea0f701152cf8703130aa19cd6534e375fee174b13411c88b785fc237ac1f56e36f94dabf3a2f022ad5a5a7157d6b7241f1c4985f4f20bb5459694fc0caf3d5e0c84866f566cb6681285c2797ca970612d9ebc3d9c8d7b9de4b63eddc86179b3f418e504851322fcccf4a15d4fb5c11711de381a14fbb5681b4dc46eb4c0f194761d301388817c06630ebfc5d8e0f26e544285c46322013d73c3ec56dbb2ed2a1bfb3043659c0cb05d3ae3571e134a8d7d346ae491eca64473807f3e4220b49c6a1aad3d264e192044e2d7be2937129d141bb122a740eea7a3ec44cdf3f38f13ece36fa8d37eed7e9f6d61a0013293c5a25f2025ac051f8b8b7005acf511c6b727bc3d2d7214cef3f7434aa6afee122eae678096a825821ab47288825064a1afa50ee0740df705a7d3cc59773a51daffc09d981ca3875f7ca55c96f80cd36724ee422124ab11dac1bb6f58bcaa45326160683260a613fed9e694f7b63245623d88bec6e55549946937970d1c07b1617c17301409b8b1a65800847363caa4d823fdec976112877dc9d0a942405a7cb0776c5e07c0e249a1217a92d2a7dad712fdd5335e3deab3db060d0ebdcfab90677be858d32d2bc3355ddc28db2c6cc658f496fae124e5b6f74b772e477200d4ceaf118740f79b07ab34afad57978759f230caabe9bc0c7619be9471a7d163302c3c725316c73afe4bcd79890f93347827d8f8ad3ead66dc8987ef40a793db8ccb4990251c44118e5c51c523c8c67a0b4015a968a8a0fbd08ecf0d010d6070d0f1fff5631b1727a028e718e54dd861fa850e6444ef3dd43b71be781ea2e22be5e7862877dce7841df5b8fc366572f12d3eecb1a9da2bf8037b7bb7fd2ebe13b1f505b1c7245d31eb0cecf87ed73c338cb3d618ff33136f12f12f5208799f311d62a419bdbe2135f4b5aa95266cdd2e002cf522aec09c424e1e01d1a54a2b8b11788de6bf71da981e371a5994ecfeea6ff070561e4a6f78a1491abd3e6a0a2c767de5a33704306353dc65ce311f4670c348703db7983319f2b9a19e3aa2e51932bad7d58c40cd9d7aeab37c65cc5ec7e27c1d5de274912e28b7bffa01b8645b2f77880626ed564e7baa2bea99bdedf7b6d49e4105a431be2d8b9c5bfb742efb53fc23bd6dd3767e3e64f6a033b89c0925971c6e8af1bad1e87d5f4890a0ec018890ce83c9b9d336aa603b269d861304190fbe6ed723d56f41d5314a28024573b57cb1dfa268157da9e523053deff9f07982adc7560229a120da39e82b64e25bc209f65960a9e55c233cd6c47dbaf6d62d3910046d555f6e6dd5a0aa018c6ac0967cc2796b42ebdafeae7bebc4b1b4bd1c7c10aa86e61edf100e8d18124286ab1b2040c82bfbceff23813b02799ad8ad3093d543087b0ffbf2cd29bbc650de23383c95cd099e36d37afd3d92063e0dae50c586575bddd9caf95a9b1a867d1930d517ec106bf1cd5feb6caa22d265f9c9645b4c6ce7d425540efc0cbdb890e0dadbfa6b1ababe38aa5f14a93b45d64405559d4e0c13289ba21afda42dc652da2a302d3a725fcb22bcbc3f6364c75b976b09d3b5be49a0e2bb03a38af1168bb027bdf882a0c0e0319eec33ff25c0ba9a016945a80bf105a3a7b337e791120209da6aa36b2d47c70d57d538a60698bcf4d15d3b5079711f856f1000e29620818e4920751ca05b475fef61988090b7294de3cefcd49232b6311a0448a487aacee77ec5b7be816327cf6f7799b44a86c94f3da2d15dde9c924eb0765555ec17b2bb8142b27859c93004defe856bbd6b64a0e9c30213e4187a853a4d711b4ecff5b25880ab73aff42aa744e0a2cc6fcfc1e8ef17d71d2c0c387ebe73e221333a5f750d66edd60b4cdd5faa043900ea1ba9d0558897a43ee192e047cff08d26c0b8aca8dbbfcaf53910d51752912eb6b5e4ff25fd8ccfa3005154da49e588acc9c7ff2fc96877f6238db193b2f47f59073a1f675dfcc7e2cf3d8181c907394fbd5514ac17310495721a9a260ca81b5d7773d5219230b383b81d104337a0c996042a9626ad629a5b8e8038d948f6294a6f56cb5d8370bc0e22baa8297bf65f09060e2ba6734360cfe08634b34e26d1a656aca92218040a0c75ddf2397e5124312bc97b33511b7f79cef636bc06803dfb943d16793933c405184c957d26fb4095dc222fd52f341ee1c197e5fd594c92d091d1bb68ce46137f75d03afd5c3bdabe7fe3ef94f5d466902230ea7d2dd1fbaeb43040fabf851e04f33089c009581a327ed262798b447f0d578aec456c589e1c67214c34f4380e1bfa3629ce139b297b3fb8318bd9cc90e0ca6d945bfc29a3a2126e872056a70a4df2a8c32f644c2f212c5c04d3c7b3c192e1a08ac9c78c33c81bdd9bc5cb1a3b20434ffeece2b353aaab8881573e433caa06ed7597b3c97617eb372d2b3cd8c81e56f3830b7717bea02602532124c226b0a01afecbaa279316ea43e85b922adacf915cf9970ac2988a049320396379aa2c17f0cc6f93efb24e80cb715cb35899ba5d51099582fa08f1ad0391a5e1b0eda7d237888a556afd451695733689aa2c67239b5b0fc908365c891a4d6f88af1aa93bb7d925dadd9a85126b94f2fb67bc5e4902960cc6344b5300a0fd9f3ebd57b8b93768470993b196de137c97f0d97028394e639561c56f5e7a5c483bed23cc5eb481dcf8cad36bfee055d42d5246714c594769b18205c9065f17d74d7c2aa322945bde4005e4ef4782fb44bd08f7e65213b55168113a82d2179951dcd317018cc28e1628a20f66f82bcb734dfa34f8c3ce5fc2c2f6adc14b0aaa5ff1da351025a4e22bb78a9cf89a428f0ae81045cf25f10e65c819a6aff7a012a99379cbf874a31ec6f6a3d3ccb4310db09332719203e68ae281636c74604298d6ca9820e102280c8eebd6fb0bce5f0e0e5848016ae2149be0f6ba49370e56068e9e1f7df25599722ca00c5edc713459cc3e3a3d7e4ce309072d0883208846227b18f62a53f75f19471d2b42682318b8914df06df7c8bb9b00303363595678b5433f056f2d70e3c988681cf0d76f73f1058e52d9fcdf041a73072431070056868e1c3594a8468c49968bc8b050daadcdd10849c9b617264f07b8c435550e465f05b56ce0eb03c1631b8e16cafbee2e149dc4bb844cfb89ff654dfab76909b2064f14939c1f2eecddbc77ed8501325f8e10c89253e71096f535cdadfe6b790144154193116b5074802350372a8a2ea602d31eb47eafe0b3f81e41c75384e49be1ff425284f8f0c114f821db01bd6b6c3a8ece0b4dcbf249cfc8b02ffedbd4e8a5b421ba40ed963b61e2f0c152c3701afce8de7d0764cec143dc22cd479ad05058dde6b28c73cb4a2e8ac7d165c4c516118958f4f6a1fd811c02a08975e6613bc1219721afb215564598adf381e7f3ca411a435760ab06f322e1304bd2ea0d11a9293ef1f2d1ffc76cb3ab0ff054819c5343a88e8ea9717e1c22ddfba4cb5f3ad89de2099df90e056c83c70df834f7f611ab8e80c8c4c789d46cac8134b4dc1e16248c51f851cc780db10bd5e2afde3f41fbfd1756248e7e1068a7c5cacb0e252b6643b14a02c08816e57f4ff6ecbddfacdafe3a7ff051c499bed5b0ae387cb8de0c0f11dd33729e51c62a647b141c3e1af197d18c5195c337153e282724ae3df8bef859f70d6b2084fd14fabb4e83c453e8d2c5c56ee4e3b115eb167eb72d1e42230771e1b83278783245fafcc37bd91e66b7fc7270c58cd167e363fc1880c181e44341e35b4f0cf50cc64d879a8be544134d5fdb7ec1265db32ef5e6702f9080a8b5b2441e4b46c3339ed9a4fc3c508e989cd648c15f191ea0d5b687e6c3f1061863aa4e2aad8da950d5889a111582c19dac4a006027cddcd7df8d26a3c34edadc571247a7fd48700b7441b3009ee3a8c986a14c84a1ab5f0054610aceb70ec59b99d378bdc4e1e00b81eb35f25fdc0ac531c5745556196ec23d1c7c9027998ffd2fd3299288bfc1f90770690ee1d3ae38b59cc0facd80d3c5a1a5c4119c5700ac23fca251d44adb7c0bb7977dab315dcb1b10779c8e4954b288e42a789eb0df4d7d352a202deaf63d97a80766455fdf266a08e36222daba31fac1f6eeb30cf68b43650a271d07d9e3b22b00f238c3fcf0aa6b4a75109dcce900246f9a65d30b0b7f768b902b094d176528cc490bc77cd2e323f5fce0f85483a1f5dea53b6de778384ff380e0581a81b787b19246d226731e172c201b5518a6e61c8b36bd42527877d88a21c25c08c8b030f8f6724bc37c632f3709481be2fbd581be7674ba14b343f99a9b5b7ede95580ce89c169c1b94b8535ddeefb2782a790dbf8ce73ef4d3a49a69163324668fb801cbacba2cf664276be7c89882a2dad7a6d5a19f34bb7da2a340b9d0b8665fd7f8e750e6631c93b75f1deeccf32ab3f9354add2206315b46fc67acbca0a7acbdda86ae23a955ca70174779126dd75fe6a36467fa1a1e15978e26187f46f11f738deeeef86668b15b7cad90f3587083a6d66c68aeda4a539d3fc5259f100c6000fb6739ee021eef7f74975cf61cbeca42b8a907c7ad7dbc61f88bfaa668bf166c0a3bb78ce53f2de5e84c04a32189d9c130656dccfa7ef8eaa2c2c01cb5d3e9c0a4b08f5a78931293c115b182cf985b2b25e6c1452b16b04123b09e875e118303b010eae021e14793e53a8b1c8fb5f68881762cbba70d8c6c659dbd71cd3e893d16a1efa749f373ed3e03b9f8c7a652e12b5bd6b5d62b33754ed344616925a676beacc736598f3fa7b3b7649ee134183d0bdde6bb20374e63c8995ce09a8d80b790789915b77e53cb2ba0b3974327f0a509468555edfb843fba362d75c83dbf07744f8ecdcd8756609004cf6a574781200ddcda0ca53d7e100bf3dea85bfe0c6f5277cee50274f16fc92cdf9f835c74b6ffe90e67b0c6e3dea5189801bb980ff6123980e5bd0ccbffbe600cbf312d706fc7b348ef765e5cb26fed820951d36fa49cddcc5568168d1857e87e51c8831e544d83b12a60cc919351b9c5478377d481d8abdbbe6a5bdec27c0b5cddb026266c7aa071a2d4da298933c68843ba4be896aeebd5a82ba367061512ceeb50de2fc03454afdf3b4ecd9cfd5af4865f1850ea07e4e29913b5cfeb0a45fe041273e15664e59367fef124d597be3197d8a6b785c9df281b8a5bbf7a43ec11af5dace638f39c46c4838bd73bea3a66fe8fbdc370de24d2b5f85bdfbaa84f32759a52e36ec7c1f07e34e48dd6dc15bb44ea251cb22cfb06f0c57ed6b322b687dd2f2d83feca9cb81b78c3efaf569959f053a56b539dacec52598c4d6d9768386f85056bf2e274c725b6f2a4cd410c688a3107585c187eae651c4debf1f1ae6eb304a24651f99345245837553983b70f9bec118ad484bb71b17789594616d0513214ccba24f63f599ec55baaf906e277aaec8caac3cba960bdd0073e74f01608731e4a6f72c1c12b1d65264a17b0d5c83f983f5f32d490a0119090438465c7bcfe88e50f434261e428a05fde9a6bd729e25af4522787ba5c3520ec107d5f2d945cbc653fa06166ac48ded00d8b1e31c21c99712badcc6ebab2e6e34c67c58eb9142092a98f061aaa03873f80f1b12cbc74be7f91c98bf3e20e4c3c9f4a7f3352ae1e33f51b19c307e40375dfd40b0e3f732fe62c85ac92fdd4b9c1b32f746488b31d12cb4982aaea70ba3ad13d161f729f556ea5e81793338995382d1d8e6983aa85f5d12329177c311555fe32b9a97e8398dfa4fab53eabb7476ab81db4896a1bbda5b2b0f651e5ae7a900fbedcf28ba46100d0c46cda8ee5391ffa36ce0d658e2fea14f8d2a24c6f52b1ace66743c08c169ad24d25b1039cd21f9b70c53d9e8c428ba004a350d9fd06817cb443e445c22175519ec90933637a3144d37f613a9c5e52fddb53a4b6dffcc8282f561d43cee859f6bd3e2b46c2991f9d68e5c16447eb05d385c8e6089d9e4e575f8936e239d50e69b46e5f634197af4d36dfa54214516dcc0bec5efac053dab24dc57649894e5b518b3fedb269ddaafd455654fc8bf9528e74a554b1cf8236e100f027a149bd0a57489b1c5cc1d1d7549e3017bb34497cc1c8dd0f585295288b80f38f11fe89e122f5693589d2dc00fb485736a798aab20e107bd815d1f37958d6b7f6c2321aa95b999180602267eb994bb1f9e73e85be1d5367f710d504f1f20923a6db6cd829a93dfa450a3bd861d7b028a7a4ae4066959989b473e53057fe211ee685352b2bb5e88eccafa5982a5d7ea38a057145731eeac956638adf75272792fde8147b7526a2345c75e6100ed2bd09e8330efaac624f0f270a4b7911122266342b9130d1a573d43f8788a7d5de76440a550dc9db06cf436d90b066f46a1a82d37734b205da6457bb0b13c4462ab03b3894f719c6b5734d711d410ee6d518ce22f38669d96c7ca3192a0dd12b5e73d6ba185351361542157bd787daaefb223268c80ebe1704c4a1a10b00354a22c7fdd708a9dbf3ce4483d3e9093016864396ef1d5417854942399ad773586b1cb598d88c821ec5898180c0794f79e41b80e2fd1be1ddede400544eb5efa258f7448f05ce648274ee02f28bb0e21ee164e3fedbe93c79157c06d803cefb7bd8597dcaa6f3da6fc7a4cec37db54985d50973d2d1b1ed51c5ba5aaf02491f4bb2eb66320326694d8854edd9dcb10c1888b2384626987dcfc74606bf934fe37aaf540aad648d9b847da5681ef0cbb43ec1063b4324c8735ae2c712f2fd08d070973c6e241050f77c6f404678032cc85e4aad83af11695759dde5842e8a9b6d95324d9c805098059e25cc8fd15bfbd0e2e950187436a2b2368149665d80314252472d9ba76c8d4e5069f24b104161553167970378db9c0b58969bbf6628f1d80da0847383ac5659fb015a831dfd86deb38b294ba5487fea27e4829831ca04b62f03fb2dfb571cae08b6ab3fe0d791f3d01faff8e1c472d70b32a7f8a6ae9165213939cff6b706d6dd508d854117aa1cf0e9d01316989d5b6c49b2e7ad1bc16b4a0ae7645e123d58e497aa5f2804fbe27bb335a32b0d29fdb2f24a6e2e5bbc52113dadf11ab1e8bc8453a7d47de7a9ccd94385b008693e4645f3179311b4a9a1e09c328012dc308b244b2fec2808df637261694395f403bd8e14c3603e6fb0e11eed1f182edb3d4c2e48e8b011afc32dafd78962baf8a1eaf31ff3dd9dd3fb9932f91bc256f5368709127a2720247db4f66c8c185fbb4055ddda5111172aaf518688cf85727343c51d718e5a3eae3680b0e71b6a6c860687b50f850492baf7928162e3696a9d8e8cd22dcc4f519716174611dd62c9a11e07e18437bef7cdf9e28b4efe7626bb3c67900ddb10422544031eb27b075e54ae5dcb020e482fa9ddcc0c15c8b58e1578dbbfda64a5faa1e9cca2929c6113e7df12d950b2a92196ccd56c7feb2d8bf36872c75c0e1460532cf83978e979d1a1d8ad7538cce9b4deee8714540ce6039c34b3105b82675b8236114a2d09567eccc2b606800411d2c86a696a5cd6e9e0590526029f67a6d5772e9f3f7aa50004aec4b5f4f10127629b6803d75fee3d0872035406ef66d7b57b3d287f256580498f0733a6536c364ba012dec424ffea652f55c482152704e3d48b3672f6f0dd37b9b2b8866eec43771f8e819774aff9ddd724fee0d7513446ca3f5080b7ef1fb573eecafb092a58cd5f0474ba17a6715ab4978b86fe8c70c8a782ff112e094faa04e3f36deecd7c35aa9d4093d58d5ac30cd7f2de5282bf50b17bc98d24e77400b5b8ba44e37eb89746806c8c760cbd00280bbb4e9ad829c73253395c6231969ece96a7e9b1e513db7cd7800bc1caa1f8505c6f40a039b6137031d4e6ad8ebd6c97a443c220a995ea94c7057a7f700e95ccf2951b2a4b6f1db43e2494d0a6f252570b1538f77346aad67a824078a50cbee3f4b54701b65bcd45a1b0cc91223c3858f2a6b400ea2f048a187fc57412a45bde8a582ced23820c6d8300f7baaaa406e0827c9c01b757e0f7c884713b5fdd5505de0532b53aedc0720c9d7e11e531a438e22159c381c62766b31aac9433c092a01544c123a2a3d29d630ec75f7cebfaa83c1d540ef185bf1f01c8de493653fbf75a9d41fd04ac2b36b1db3c6b16daf177b5f6f4a9af9b926ad9176f2011a07852d3991a0c0711b1851d8d44ff5c076fef7736a05e6210878f638ec7e26caff2f8a8bfb41854d94ed1d0ab46e1f6795d56aa64c2f3b2ed85d5c9b54e57ee864f32029777e9920ce964f2bdacda8b38a4f57509c1314939768630146d46402f794809aacc466ab36a84aa4bddb2c34d2a1401ac05e0ccfc41e8c2348a780ab25682e47f19f884d5b87a20de413148bfd9fb76d5f6c8e63ece44a79c0fb6f315d027bc9fc7c8877abd8e7dfd401fbf9698f1fb0dfcb03d0805e107d462c6a362ce81b8903f7b1caa6007e9314243d3db4e3fb8da7f627961ce090965ed70c3a137d601dce8dcea6e892f8b01af662a95e52ed6c7e7a443521102d5d6167efbd8f56fbe0a29b29acd204c8cf5ef506ccc44047d599c3f43e2b61594af47b6f211ef9418a36cc4d3d00ea713956ac942885309d41a06fb2019a58a6e79e7e251530d8d372e18db3e7e3988496a899954d2fa8704918d9f82ffc6a98aba5ec8bfa737a1423395bf82df8a3656fbb28749b121c434469af5139d01b911fd1331e5135519613b4a3848fbe9fb61d04e5dc92eb0098dc293c378fa3f042ac770e46aa24f3dbecda10e38db3f1d9272c6e17e508f9e378ce2d25c1e66d0fea2dcabf8590d557e710108f98672e5126880dc0d1fa7cb592cedea65126066b515bf4c344278a9ccafd2f034046c9b093ae61521a3ded81c2b1ed23bdd130e76a98290c8647681ce107d8c905e13879f715f5660e51d0ca710dc548787691069e48b3f5cc7f024ac1b68a5b69b51f1fa94526572ec4db123638e36f11949b3b75143219774cfdb8f59fc024dc30d20452b290b00c0540db7ad9e41209a9a40887512fd2272f9ee9f50a16dfedf2f5da6bf4b10b26a1c688c74733dbd1246ff03da619da4c958a5038ac0ac71f59ef045d7203c2ff18b0cc94375f26f8a3438510796c7c682d347e48fbf884d1044214bfb1057205d8b40979f0c28df084c3399841b4430a4511e69e508c93b350838e0b383282cb7034b1e12a0a6b597763704da56dc8937bc70bb160137e26ed27c2b88e178fc06da7685239935983c9a8eba90b1567a44fb8601aa1499ebc28a365501920f3752fa09f55b5f9d3001a07ee22e927caad1f6a86427a8b9fd3a19ae85a7feb586a34a4c95405aa626ed7050a53c6314c2e9951e0c17245dc1dc652ce4008e329102b2868e5cf3172208f34c2a438be76991c02f2001f24edeb257f89a96a84dff761a01073790bacb5b0fb99acb72bd48d35f24c86e7954fdc4d759cef1b6cf79086a0329579b55caedade11c5a805e06b65a452ee52136c618ce99a9971e81a6bf8ad51b467ab1c6c7b60ad97a1d914c4299da77ee52bee0b822fe52124a282fa363bf068c979668ef107df8b2b11fc280042bce1174b2f4acbdd1f1eaa08fbbbcdb0812af58cc586fa582a28aa4d10f77848059d7efdba9fa8559b0a58a7df313dbfa6639271a3d4f5b60ff8b5e6ddc30ff2040c72c01a8ac64e0b5cd6eb97eaf4cdb2bb26b49c0951c61363c48bbd0b15e54ac6a91ec99ca41ac28e9b60c069814f488a08b21884bcfcb7026c88594048a64c5468763225a03063282c93e30d71d8da68df16a3e785ce7d4cf4791cf316a98b2e57730ee669436fb1f0f17a6734deead0004ec8925aafd8bc12ea82a3ee5379ccfc719a3f5db84aa48f05f10748e5ec4822c6f1259a355bc84e3924d35e58baa8ae1e7ea10c0386786d4dd15e3c727139ad1ba801c2e36909ed017df1d51da05a02b626abe2b995c5f235a5ec7e08fc3d05b967c7633ea2f995bff89ff106dd4990f51cc0704f0ae5d459e9328c0dffcac33cbae709bb7c0fdee11f2e20c8c40fbf37db7f333858808a3715b0e515ee5b7bf21bd114ce66b50f016c2ce2c7f715041afd48ba1a010e7a39b5e827a56a778686052622fbe5a1cc9d7a3cc588d8e1f60adcbd634896e82aee3458b230d6977964f14692c89b2e8e0193be278ffbff1b83f43dcd587cb612d12b83234cc543db2b7ac302c8d9e3d9fa7321b751d2e4db12fe4a66de44f0d86f05e7e96db90512260c1bf151444a26d48317c352f00bbb344573be2e6210d2345e0772f82443b5012fc1cd164cc9fb2c3e00fa17d60c3264544a41ed66ae96ad9e525e8099984a295055146c55fbcd7e1e6dba14f74ee72fb52e707fc512ac5741691aab7b6b382b083665e812582426aece81eec64c3ff2e2a0e879fff579bdd1bc25bd6c350572d1e61ffdf45785c26993ffe9d59cb36a5742085089bf853dd9bc0e4aceae489d27f4c1326e7278ddc96e72baa7b8c7d2ad726e8804e95573c3f942e8251f680684e2e819f35153e568ae88b5bf1903d83fb279a4d40b70ec2ae45209f200ea3b63210319254ccd55a1e4b08f7e45fdf79892b82b798e5e03690dba14d80b45c86d4f90b466fd4bcb1fa1789c87b7fc9d4293b88087fa835628f5f9bd29971139edcf1f705acb35923c554f514df7a655c825d94861c87750c51d8f57792cc2ec7f101dd1533f31677270a362437d81ad93d9b8e7b980a08fd7e4e9784934e16c9bb2fa5bf2d1b5a77ca423340ac1f4f1201fd5e2d1ab957fdbfc96941c67d336ce485374bc2b48ce95304d4b066d96ed0778aede5cb1dc8d4bc5252f551e4ed78110b7b01194516966d5601bb8c8ddedb474a21ead2bdc4491cf03dea5c08adb4ecc85a295b565f46be42a2aa46c407fb1845e3865821b42587ac0f661073d9e91dc4ba0aaf70cfc0eecf9fc5be0551f892841cff85d2fe30a78db1b294acdbdf4c0785ed3e1acecea605e05419d824995e0eb29e80570c32219b0b16113b195e209aa11a30dcc4368eed4e9f82c5e8a724eb8fab723844f3a0de05d9afa9fd2e4184f8d9ac3e19c14d8ecfee1f5505eb8b24996e82fe103aca5f8845957ced1658cd7072dac935378cf14c88180fe32a3cc0ba2ed930d7d147257aa0ec3f53e00d7ef32ce3048160f21caeb6967cea2fdfc7d9359e56007ec038c533db779652079d6851ef7763042819dbc0c12283c11b42ddc9faf9f50adda14f468bae1e35ef35b62725ab44ead5f0bdeec08b14a79838b03315a01d3d45670221246b53506c4bc7f7ae278ddba2a73b87bc3f07aaffb139bb16d3e0dea192c40bcd379d6d27e98208b273a49f36483cd5dcc4c292f8b560a8261aa6b7982b7f4eae996452c716cfa45818f3fe3bdaaa1e49a4af272a4d0d446cfed78ed3381a30f01910c8f5db9611c89de0c056666cab2a6734303e8028d51106db2cf9c47dfabb3f0997593fbf982b8ad5ac31f36ac4a893bb77db5799a43cbb1b59b3d490f33694b7879a4a3381a968398b74898cb1ebb2abc2aad8 +MD = 346f0c249031b28179029c2cbf0642c3a4d36e58a2136190f780bff3195bf4e6 + +Len = 108496 +Msg = caa550c66e0972b9c8a1f97db959707cd20f8da5164714be0121f8fcc989c3d1e3ae3905c9b53808fbaee38743c7003d3ebf9d0c189efa4c97a4a3635b7fdd9564c1431ed490b17ef69f6115805e54ef156ef4e10e58f7d57a7e866263529fa054c5b83a1703a5c4c35dbb4ff786363b6003d84d81ddd301b399e9226a69d297bba4de801b74db826acf395e30a86cc926669278f895567a49db14caf72e3e25a145fe19674c1c5ff1dc236ab32abf406f7f6a89fbe847e5442e4e839308aaf00f905f2c84f43003626ec09a0976f7494336a7a8123e70edad79e175c55fdfa00c6d4be2f8d2df17c46c5917b9f2dc8bab7393ffc6ff97388ba413c7159ca6dea1c408634d50f14320bd36094b0835afae1e74b39e93856ee6962da20b25c552d57ddfd60ad52d2e7d4b9f97471fcc5c551f93ef23620238c639762d306304a3b0801863b8c85c81e3fddce9369e673ba75e38d9dbd5d63e347438910bbe2d793ab5fb34de9346e35bbb3428a0efcff3acc3ab995052c827372fb9f5259f067e7c05d06e049db3fdeb6df17c0b79cc2d6c3733580a42a19bd8524382046c59587d56de3cb34e6b779efb590c01a42691f0a0193e900e29441ec61c5f328fecaf45926ec4710e35f8794eb50109d8a4c63fe8a672691c28c711718cb6376e872cdd9fc82ec945db28864c4c82ac7d0f7561f51f1d20d666cfb93cddac9973f4764c6734a3405b23b0ccde68b870fb2f455fb1cf663aa3aa021f0f556be204fa369ad0fa4b60b8d63853ed4fcbe0bbccdf4002fd7641eabe084ad33e1b998b6014d0c4614db0c5bc67245f4ae28123aeea0cd2f074bd15688a426edee3476fefb7f52ab2d1b8e89ce6461ea125dd9c9c0fcb08f189348b713010ca7eec73186fc811e93601018a3f5cc1109cbd7b8f60f6868c48dd30b4a1a1bbce655ea5eea8ee2deb320312146e729e1f83d2e362c04645463d9738f8bf864b61dd60665961d24f17f1ff73ecefd0e4329d8b9e7f85a80e1e18e0d5bf9586c96d2c1a3cc1641c8255ba1ead7c8a1d9b303311334c77c3ebfc20df8d71e94a3cd99bb5b28e7773cb8dd487472b0902cb038d8c2a335d40e3c89ebdeb768479ac8d72594d28637f34a78864c96032267d92f3230c9a00c6fe6adaa174362ebc2170f92d97f7efe9c48c1edabc85cf32b9c5adfe5feb29fe45ca1cb4b21aaebba46c785a1764e5598322de13a701a6cd85840246ae8d9e8fbfd0ac1d2c88ce1d3c68360755d50b767a520f37123c80a0ebb73c237ee828237565d1056ae9548bf24d7c5ddab32be9b005fb6d859e2452f246a1bc59648e5f6d6fd594f5a609accd0192842d670b592d21e8de898f5c8ca2197a3ac6699aedb1d7fef15425b529d56dc0a3d657746ffa8f1fb2a577eef604190ec44e5f1275498695450fd020a912794ee35eed2dd31e38e81062bea3371f2ca78377aebf9e3b63e1b7af0e11d58d0e836b4c90002ca1038a2047cc43f8fc3b8b9fccbe691191552c70bb4652554d12a86428a7b3238cd74f0cdc0996e0a12f033fd2f8d7765346bc98bbe2a9d05a6f05f57b9c0f5fe69e7df9a9de639818ee578b13c2d374871ddb563749dfeebd0be247cbd6dc89b73f5d1137b174c76962cfac168523b337c2cfd2b8e3bc587dd08781a3bde24808a2377c0deb8f169a71b3ca63aa90dc6a1ce035c51807b6a2a43bcc88b9e845e0af5362b3f57d2db5054a0c8397e297291558a7e7508aaf357148500432b827474ef8eab23506b3c105dd9bfdb6e18b7b947d4fa5f30bec3c1ef4349e9018974567703c9115f151c759b49f596e55616882995687695315c29388a1df3bd13de3e20181d8fc08aecee9173f202605c0f8c5f2e3151a2ad1ccb84bbe4d9cabc028a7f4e110521173de9d4ea3d948ba513446d01fd86f57c8647587b472196dc91d9e9183c07ed547ff5da0f40c3b3cbc23ed7d3257cea4a391b282aad61be1ffc8b01f9070ea1cd33a11575a416753a8cda340431aa0d70a5c5786c9ff0bcd0b33c3e82fa8fdaebe96a1b9fc0134c7bd3b4e607aaa4eb9a4cb4cd938774ffa9466c03289f11f52b11cf50f03d30a5fa474d726008e3e121ae979c320c6513043679046c6d2b8d254d3f5a0964051e4058027dafd4edaaa13bbc68ea9727736c040196c0dd430f44ec38ab6decf711f876825c498738948384b1c80fa052bd6b2f945eb867df08148f49a970308d2d5d333b82bfa84b2b631a061e33c07d4d6c198fb0d5a585e40e96f0e8c2c73dcd191e9ca594b09bfbaa5c27ffd96fed9ff96272318b1eae3fbda3bcfdd8199f8da68934294b28b171d3dba5c173174a419d9ada455b2bde878c260c4d22b018cb700380725579122a6a08fe27835f09cec3233680c8658d3804ae7d4b35233023102e0035463a3481f7649f76ac9fb293f47c0568554430ddb1ad7e9c71db8c01016931d68fe49f14e69f18533151cb3dcc35c56074507ff51d938ea57b517301ce35a3dab4f0c85fd1f8d731c42dba2894c0f50db812b10aa2f12beab42d8b81c123c4b637f736cf24028a96d78c05f0f8ae22c4a2f37a7adc66e4f0beb84c2da4a4230d9b5070ef675c70f6ede54503627dcd29a78b32e24435384bfd8a2b51c3473d2551a4ed4d066748d679d1edec5c8062b1383280cd551ca450e32baf9ab78d71a1ed6d2244aba360b9fdca6718617661dff791ea98896da7a422154f64fbd76f07e101b672a1916715fc475723fbc0791a4811b6d07ba8b0ba1ccf914cfab593dbbf1af06392d1aa7ef7d1247b95fee704cc4a9c01966e5e1745c30bbf5eb87e71ea018673f9b4c95972e055abca725a03d694f0a8542f1e202f88253872508d8ef45def4040eb4249f00d712103cb30bbf9996b314f5b6f795c976444e00e5f6760a87144f2c593a4e1a0fd67cc7a0971c7c04238e283c0973f794f61225252bfb159d2ee99d43c0eda43510c9f0f42e9a3923c2bb828cfee5a964d19b3cd05ec58ea8ac9b0a7a9fc4c8d227bf5eb8b783f97bf962acadc033076f3eb0ecef771d9e2ef52b1b07bd1bac6d8326baf41a1de3922e4d4da735a53a3ca31bdd885d4b6db9716177f1043a788e8cc6abae3fb120f2ca420e8347836a5369a2b8a6fa9722d08807c7405b6855bdaa67daf00e86d723360a9748dd14be3df90e254e3548e5fca2e3b2fca9ef6b8345d0eec16fe631abd96d8ffedea15f81b926cb8af6a8e0c327bfe12ed815e167c5ca902a4a1756141a329eae347275a713b4536125fd38b07f61fbdecf23dff2921d683187626de663236d5fc6cf27386e7e64dcab9018481291a91276608faa14911de10e0f9ea71b06a4197c009dbb324ea7016ea9a615491993d4b5161719b3ed583fc76613e1a9a4ebe43e4c00b8c6eac4da57900a9e8ac0602b748b9fc7d8fbc0559aaff11b77c5e8c9f4fd78b7941a626f4e8c6d6b3e4db9209b09503be981fe2a703163deec3046cf86592c4103a829c63ce6f705ce8945b912d651fd5048b9c62f358fb170afabffdca945dd7b5ac3e907e7cff3a03cad00c13acb9573189a32c1039d1c6b08c05fdf34ea1464fad5e099d41ebd1e2d98fd917fe68cbcb949750ce3b6a745042cfa7544446d274e0ab1d8f80becaf26afb768ebc96892f26d97fa1d02db676b97d5871f7b702a1f0766ae9abf07baed9a3630c89db45c8caea172f8a83f3705abfafe0eb6a5d634770702016196a94c0082cf5c89f58450b69a5bbdd05c1e9a0d70c0591d959357009abb761a21e30889a42ff0b6b571032a8a9fb5a4b885f1683fb748d9c7ca4e4a29c3411231d0ecdea336cb4c7b8b70b579252549ddd2d36270c92312c3e1e2febb01aa704dd8bfa787ce3772d03a5efd70d558ea536f08a309e031ef1242dbc4595df95dfe63488b58de7a503be694aa769795ada0c258d415e3bb993b5301430abf7500cbd950331f4ddd0f44f7db65945323ba4e358b9d99ba0938c67e1c24d60f67823ca29f47e405a8d773d5fbd6d1f14b3ae52e68a59f4d63f33c2af30ec535170ad926fd6eaded23cf51e8bca435595555eb17b8952e8411f224be4faae01acdc12bce325084ed96206599e677c8748932ea5743144f475a5e06a4f8a02ea4d1ceb900059670ed48f1374e40f993282efa6956d1cb097e885f6a43b697b7bc6a5a0b2540e87ad5826b507093d09d5e8ed4f17c2a626411e11cd9035138844be28daaa6a9eda88d8cb63768a7a4eeffefe90931158068e8aebedb4c902a9c377f8e1de9094e04feaef9749d441e8ff19a6139dd5ccd1eeb366cf6863c15086a8a86ec5827b3960e305d907632e5871ed76309e8c5f38d03c34fb4191da3ceca4a9ca05acdc265a65909125d38a2de6cee1702ba1997bd169b8f9c6efb7af84109f9c056c12679af722582b920fd9dc526a6abbb1f64b70d075336eb9e428db60dc4d4b6cc85da0fc3db69f1b09dcb10c8388c54a1ff82d14fc30bf9cea49610a02665e1b68891b094514e6fb12b70351cf42eeb65132649bb08a20152471a390847fa3f47d6a4782dafb99aea4e951b6a0318ea3546ac5c934a8369f3d521188d4e1b3847181e51d51e32da25af40acfa8dd2b7d7401bf41eb0379a79f3b495796450347df50422d6c6429728f67ccf13b9e5bc13aa7bf8a56345fdac4bd99812b0229bb21660d376ce7039bcca4e6cffafd85fb32cd54f708b35f953859a09a25b18d5ae22394bfe5e4528a9d3c06c0498330a7d6d30e3c74e90f53849ffd06f8cbb4a39c29874b6a048cdb7bad9b56b9c7f243b16949bf2d7dd5b213d0fd6c26c91631b9e8435e5ba018eae27a1307ce24315b3ce095f384ca492d70cd201e22324861b5d0576d4d4f8d455c121c57e930744ae3e9817e3d66e02225c503a19d8fc1c03a7231fcc17b6087531605dbbd6541bf30e48ab399cc113c9d6926aadb39f8e9926e71913aac290d61e66de79d4b0014ce5220483c7282d96219f77e7dd9742a67f584af1b6a4d640313c3201b4a65e7f6b2c08087e28b84fe57f4b0f7e6ca2f15d7f9bb063e5407b12e93f9b9fbb9b554970a012ea4b1cbdcc3bcc6dbda415446662f497d80c384e6875ef8ebd791e9627f6b5e73218c1a87cdae448c3c90265420b3eed3ea12583dce928243567500aacc42dd0801710d89d647aeab862d31d9a825ffbbc2c6fe0154cd4a3300d997881e4f215f9d16f14d8e27599c3f8ef3416cd41097b367d2ebca6da54d5f462aa4e5eeafec7cd4725d55bbf9e0c12be725df6ca5ea346b9347800227f4da31166ba38ffd3129301d43bd73f41bc38a89f1805e4445be58abcf261946cbfa210756d7c18db01ac03e7b25eddc9fbf31582ee007601cb9a588cd1d11862547ac59f10321c5fbd9fb726e4f98180f0c96de488f168de1ced8c6ebe5896ab34b29aab4b60f5a76ef4845b76af13acc444188d8ddfa22376668c2761fff68d86d2f563c5108afb3a34d14c13897b969eec7e45a6d30b18008ec18261cd20517363408d2749c3a34ce608c2618da186a74808d47bd48d05e3ec934667cbfc3e22ece2f2181488e6ca92908508c56ec307e01c01b3ea0f3146096b3a1aff739ebbf5435a4178c10eddc1d15db139c897e53c2495f71d7ae5526baf2823736bb76806cb8d497d5661acf9331204f0994869e58659ee76b4692f9cc9d6292fcdd34fa8e252da2b2f2860c51e6ba8f2c71fbd62ac1241fca60504241f0cd53982389862f072998b35aa20aafa3246473b64063bfc8b97b83801f9891b94cf9b712e6cbd5db630a44e3115322f2d85f8de5f6ff9e08b99b053a438552335be5d81fff34091e3477e630366e425250e0b97581d23bfd9efeedd37e60fa1b64a859cf15473f5c485225d693c4844e1888b4d963b41003e407ac0022e40fce01c1da94eb8deef20939722abbfe7f52b9c7dea62efdb0d82345ae24d366f9c7bdc2c8f5c460ae8be18e59c1116489ec9f2eb5504617a4d6d74982d602624e94f32bb3864277e4967bd15b1e36af4a98431dc76c4bba528c6a83c878227e84b23c4d18bad82c278e32a2e4b68e2717c24015935e922e50657784cdafd61412ac03d767081805fdffa063851e9a74981710c697abdc0c14fe68ad20d17fbbaeeef43b2cf2649dce474fa3cabaee0031e33f7142d86bdc16b3c89d508191dd8ff767e8e90e504c1f118ad4041ffb628bd316d62368d416dc3211b5eb34bf125c51d98119c06d9976dafc84ffb24513fc534145c7d1a734ebd5de874f6f49c28a9ae3644d9d1f1e4c001f26ec164d8d09e049409eb757bebc2b7991fb95d496911ef032d308e743351d6d4a77b097464af69967266e582cc3bf8d667e4cf1e7166aaa4d689848a098af6150111594c82622bc29dd7b3b07a8ee846555f9043c711a5c447cdfc59f0d2295e856b9d89b21e11bf9427282c7c254f92f012e8e1f378a90987e23e0c6f91365739711c527c4ce4365f3c8a1f5a66f56241e521207e057d1b9db292c90f30e6a7270c20d069526cce040021b09dbba25c4ec18227ef1feba3942440b8561501f75722ef2a009971308d5a3708cc8b1d2b218c521fce2db949711f8f03cea94feecf9cd289c989bb030131124e6f3d2f75c230da2fa499b0b43e8dc9cfff549735996311154d8a11f0696ffbab0f3ba0e337936280f7ca988d03553447707fa373bd5ef4f513053d9fccfb3a4733ec381c8a9f313a5228397bc65f1890a99039514174c352a46005b732bd174963b8bec9c33a91843a1b5a279193bfd532f122772f8fc553860532e1a49ddad92707fc91e84ec886390bc5386bd9703c9408268c8e964321435a8cc42883ca210841b81d03c21f69d66040575d1972ed563f0c39677085e363c9da09c95730468dcebb141b7ede559a82942c6d3b0e1100fd9e25c107d3c26cb9e6578c0154733f17cd1f396a4d710bda895ea5278cd01aa9a2f8a44275e6e89276577b697ecea482b5e6646eb4e6b3cee6960dc534512dade15c1909b2765ebb53b09d78f67f46783d10a4725adb1ac7757bacfe4dbdc07023f72644d49b579e450bfa1403afad622b46015e8879c62efcb68ab8213b5c5a2f71d6db217c5aa213109b26ef865fa6482f841a86e8416944eeafdcf6f488d3cf732eb7e242ef2f87668797002be6ae5c74348e9c4f13e215cc24531510cc43c9a538be5e149ead67b6c64d7fc7cae02fbc1aa312d6c2ff36f8f003c6b6b012e6aefbd9df1bf0847ca76132b48191a688b03c3f2fa7d82a71191bd6510ebda8ee377ff1ab7e6c1d8ee25f2de682c56731f7a44b3ce7ddca8cd7aeb3fd417a6ea9e7cdec0b669bde650ec8255ef1ed8af03a5ab081c1574650dcb081137770cadf67ecb447fb0330c8d4a50465f792798e216454465bd00885cd292adbd72525575ee42fa7642e7c80dcfdb141bc3b9bd353cc21d3ddcf77f35521959d8a23e8da75be4773caa42856cdd8143a67705886799afe6f70ddfb611aa1aaa1b8f279305481e3f254eb9e0f503e159a21ba18713ad4d2643c81fc99c4b0512e87184221a235ea6d2b8d44760c389ca7119f435a3f8487f86843e261fc57728e221fa97507e2462c76128452aacd91ab60a9410a30b104741cab16826a9df507af8f18f32d91de775e00c56ad106dcec35607b49b46431208242fec4b58ac2e257eef664b94a9a960be16e872ae965b3b94b57de73a4f643bf8f03ee8526c26741c6ab90561362d0a43ce9715c81154713f23e9316793b26fe1a8dca847adbdd969e9f3faaf61e6f529a9df010d3d2f26cdd992e45ebe812656c051e588df68e7dff3a395dfab6b93c82f2cceee985faec95ce78a703e54d1c0cd1b3a967fcc01f70e445182712f78b7c50cc9dca17a8baa14739e5c81a1f4c825b512011d3bca379052d83861b7066101fbac67e6e44ff896a39a64370d21d570abf649265ca32a205b7451eb76ef6c7c75c100e7416e2d6a13f937acdadb61245c71ef29831f4744cac06f8cf376228b07a24810f658c0f531554771bf7403b762ff63a563b107642d3701a4c14d3bc43dea9df297b25bce781904240f9e25b04c09371862eaf314ff6298e144d7109e64f4830a99ed465c74cefe126fbc5f957429e9f1053f82bdcdbd95c112a63990294a97d7717c1935a3e1b5eb344109dd77dbeccdbf214ee4f4b298a29f3d2f4007673cd7b2e15cd081eb9c0d11eeccfec399c01d1532a02120ec02246efe5a046bd4f299d2af89c39b6741067cf8118fe3de046d9bd63ed8bec482b4f67c5273e31e498c555918755ccf1555ca0f6ff755231a1db7ae73924ad66ae2ca399114f99db22dbf50916c429db979ad9740db940371cc0d0dd6d4418c4b2c5eb8ae4e0bfdbcfc75387d1ef95d8df08c222c832cf9bbe6e086d1252f70a3f0287c02a5b698da871b734413cd790348ea329ba48c6058fce69c1afb810e05dcbbe626a276098b4c16838ed14b9ad9e14c3b06b64ef1c98c83dfeccdd2bec1508da992dac6ca6fca0b0ba5de001d425826be062ec1089e045ca4ff22912d96ea1218cfa52545c86f4d5e21a0678afd2c0e3e1274af2f46f2b5adaa7048c4d717edc645981e2645ca720d9abf0e6e6acb773da42e45d034e6433c776d660f025875248d2a1dc66869fd9c798041321bb4d63f33c24196184d69d3fe407576c92a5cd61ee1a0b090ac648d46aacc607086bfa569b71edb4196be26a7bff3966c0be93d6345437f6f202b526a84fc9409afa8128ea32a2a51609496fc227ce89b8bbedd02db828d5463d67e8da54e2757ae04094aed100db829a197641e5dd7a818523775faca54d0c5ea7408925da4eae077fbf71b5cfff65059ba981a230e423027df2549978064e4dbd563c297872405586d4ba46d7b8c832172e09c78d6da71c436a94e867a913f2f1537bc8868a37b49cf912ece0afb209d42d61babdbd14babc06a5ff3bde64358a5fce6aca3d9c0b0b56000fb18b2b721ccf12e5887d72c431ef1148bb4c48fed2a1be770e34764119150c1713f53b55353ba3afb555c921ea4c6029b19cc7350f42d2571816cd400f5bbe6cce95eb9a689a9c7f0eec22bb2f46180ce375e9c28a699373b08caaef35539f76aa124229fd1486bf59eb84794805c3581b80b78d8b3f8731a03e1436d222369e6f1548ea3cd0e8d65ff9f8437cb0e8751f65387e5aec38faafd313fd2ff30b4ae44506c66df74a2ce8bf8501157010cbb7cb747e3e972e37a4f4af2c95eca7e3d24b83a3d7b03429bce5339b596cc2c2ad5a74738169ef4e4848f1ac4a3591d201cec86bc3242f35a2120afa91cd86c2c8bb3f47698905a96378e06396f7517e3977db04797bc2b863ee130404bae433cf96dde03f1ff8aebd2b843ac35a704e42eec65841dc761ac72255a2fc5c657d8b9257284a554ec71d0ae619188575ace3da914d636fd2c39656d8bdbfda9008c458b405d451915b4cbc0de9dca1e8ffe6e342cd265e5e1b9831a53b965dee3c4190fc61233b48d113ea019058d552ae11b2e3bfd4cea28b955cc306c90d0582cce13823803cfc93383ccbf8d44a3a232def7b0ab3e92779547f3a04a01160402bf36f33337c340883597207972728c5014213980cd7744e9e41131f639284df276fa97984227898beeafea7eb95a4fc5751b25026c011733b4a553d59b7fbc888fdeedcbb5650abaf9678bf16bc3730f5c7601a4bcb874ef3430848cba94c62164447471f4245a92006e73761c368c9a44a25dec1205d498ed43527018fff1499edbb9ff90bdefbd7e253f714d3c02f2c820a84d1e81bcbd3a4e3c243929c48d89f53cd91dca4079cd1c5e67713c6cb551916f5c34b4a3b8b5c1a01d9daac659c0316b92fdb1e36397b43eed2ac0203e7b45217df7071037ea3e2cc0a8eb7d3adc10c4b1b30d4f07489d8f66cc5fc40a9fec4d36d80188a7422440b20d743f9d3803d6c9c044e9e17a389e78e873deb649c7612b4a2c738358147a661dcda41d6e8b202fc7f15a6e87060a7801a4c6ae03970bafdff07758867f48516c603127da272f681c8b072b099641f8aa5b127e57bb8b490be5fa9377c519186bc47d4915685317408a76836c59d37f450f5883b0a58e9b509583c086969b0fbe72cf0dbabf49a1d6683f2449d14d805459ff7a98f5840b4057897c4d641cbbb6e3ccc204ac618c30bca77a0c9d0e806a937dbf9b2bea0d4dc4a20336ae3cb0f7affd12bdb0395af1e075f13f0d9503fa7459cf11a94f35eb653401cce56963f33fc67c305b3f82ac8bf1165ba38f9f86452a25a70e2209aba1d5f48aaa21693c0bbf7af70df297a317cf75ed1f4ca790be554fb5bae0fd0112fe680a5d031534ac4e7b8c58f0fe780c578c6da15aa09c2871c9e8402a848e2113b8a67e6d1c6f8a0a1a6acc994bbde23fc6480a483f2b1bf610992e5d349564cc82e99efdd35f3d68b41cc979f3c721deb0168a83c7a02158c052e60781d9567f436e3f03de862ee0f50ce0019b4653bae653d29bdeada11035a00797f0ac6ea2668ecf3d9276e70949d590de869de05ab58a530ee8a643c2fd0af3ad059125dc88e5dff993a3fe582ee16c4f5a406044ba248c3b7a1c51d782fe4ab5352a049416edd1d6568fcd5400cad2f28ac04bff60ad0ed0079283d473e46d3f13c9936f9d1155425fbcec638bfc55669cb01be155ae2b3b158b32202c67eba906124aa587eacacc139dc42d1ce063fa147258a0e58291fb2878e56138f336819076a2fc63f4b2d216b4fd073031af4b66997aa4bcd4a38eb4ee261e0610ee67577924cabda9ae02dd84ef98624a67d927980a63280f00644f4d7c9d304b73b8af9c58a6f1840ccceca024372fa55e01bbf07072d3bc192a6c39418523fd56f42d42b6f7ac1e6f9ea879238a04dcc273b825554a3c465e3f70142d5c7dc108b8452eb85349d33706a58276076e5b65ad90c9115fce4850121f7088999a1129537b92e540673d0383785e9425d89b97fdda3e4d39f63c9f50aed0fbb3057809845521b63560d64593756ff66be037da02e907614f609d8c69c2a7ef3f4c605999565db3a8d3198dc54139254ff19abc4b61b6e63689e5b7cbdf87eba4db547a20f3a956114a814c87503c9958a94ebf45c8bf5455de9f920579d3796a3edeeba9b187261513a7f25826fcdb0c53be437082a32443db35bb95162d0125e37a3ea21499ac0aeae82fc629fc52d1ad83f95a23e4ee771c4284f938f72b3e6590e398913340992cec454ffdbda95f031a316131070b65fe409eb056c4403a31bd6afbbbf68c16560ee35406b346eae10b9c341e8c13a70dba6938f416f89fe47a354a09460728e2da7a70d96fa43be3b29a3150e69fa0c70a65219551acd5da31f311edc41a377fd98b34ea65599877a9abe77c98f7f9c6db22d8bf16e5829f9f04d1edd36dd87986860ebe16cfa7197b51d50625b4f8698712ecd5d93b1cb0fbeb089e164a726c5c0b7cd9068ede45821c78621f6f434b98c5cc7e1b060a9ad3263452ef689bc4e48bedafa70fb488786c4034e88f60c9aaabf62c5edee2d9df36d3c0c120bb1f9a77ffb69adaa05ea8e1dad3138db78027460845073e2bea6aad654c5e1b66e8f860219234685834adfd96e122f2ddfb8914616cb6ac4c38fffa777a08a1159d78c4d1a7164112b6e21002d389573a985aa79017efa1da62199e78ce435a5db9b626ae89b2fd86320fd9bd2ec91363d3167022bb14973ce24219e7bda0cf85da1af6169e9ce6194261ab144764bfd05846fe87eac8251a3603ed42cca349445b21c3887a36a342749224a6d1eec5068466b33e1b6cb3c8d9c999286fbd801fc9651f928102ada8251ba6e342c9cb7ce3e02ec3b194cbef4a2dadf73b71ec5eb15f5ac367937da0f068c2681e782bb9f35dd1a761b2f5e4038a8c4db442e6a79f7b0579826b8bc353040793c98c7e344f3a4c5790599a5d927ab48a4eb31780d032c04365fd6095b967e704e8792b82340fef52c1fb41928368c73b7f44f7511020ebaf86cb948eb01ed129dfc0cc1a5e493b377b0a844932ff34dfca7afebecbd0182c69488014c393567123f5d8632a60c0642029dae83d887df5b4c7a6106f9ab6388216cbce606ff779597ac8f334f11f7755bbadd61fbf130bd2ad760c781b46526598c022130f34b0f4e21650ea7498df804275b935ed948088aef6f971cc5908885115a657eb8ea66aae68f2d765dd0b3450db083cae53026b4ea16de9186ed97ec224d1ab9f75c84f42095f684f4c88f6594629706c0effdf0efdd04a99e8339d8e862a8a957aa4f73fa00d399b77e72aee3fb39dc108d7786264d712cb65a578f8a21771681dbb1719a562b7c4ef946662303d0127e137bbdb8ed8de2757bda5a3112efc81cf79134282266f66041f1d67b00c471b188f0dfcd45c19284eda88105be7986d107d605cde9ebcf955f5d46147c7cc152f4c0328cde73068ab8ab4c2dac7b1a48116a2cb03524cf975a70fd15fe62ca0860d2ff1e3f0d0430e5c903d2645f4a282034f1fb8d78bd0b3a1445a70fdd537cd30e8dabf0f5551e7beced1b6f8bdf19391c9cd37a4f639c083064f236552655555c265a7a95c1fb82fb53315469a1c5660a7462831287f0cbaba31dfb32093ceea4105364530f6f03de7d3b9b5f57d1aee6c2d03027f2af8b6f4a51e6ddc5d9a7ce94bf36990924047db362cdd7cbe81a98ce4509f76c825063a1b580bc22d387c2fac679ce75bf90c03dce7138c3b0b009e0e897eabd11236ff0725038e7d396698a8fb4591cebac8f62a60fea08d17a1f40e16169ac030b7b7eafdebade80dda98c436fa4c64e62d26c132f5562f480c33659efda0200116f9495b3a8cd83636b470933163a90b971a13c5ae198c1c9de0978caa687b23c337a4c566b7d833198040a8617425aba544a4a17f674df5d560265793603be94b078fb4f6cb6294d160b6df30fa4546b63ae64effcbcf74415694984f13ecf21ccd6ca27123f1dc1cfa45bff662925d68717b3695b39b08601864b743eff8bec70dbe265c4e20695a917fc3485997503a6cb5e0d7bb3b32c04a094d087109afc85d06b91ec658ccf8eab7719d2bceef8a9138e63c4f2a73e05004b203337a559f1fd8c34f191587965a9f536b65a36bf79376bf49fbd35c2ebef99edaa3d540c9eaa6ed53b2e129a16599d149a3af560fc7f1c4772dd05c2a0b3a6bd53ea4e1c721f39fc3204623b8803983ae425d4e11c33cae4a61bbe450b94991b98053c9157a314313edaee63a5ef0d30fee37a4cc09a9c54a43d085414dc9a8ce058c574348027fdc77a611a5465257f4e3c91a8d0fdbb1ed30b8df6a3d1d39a94a992ccf0fc9be735aa61687dac08ae3ef8befe33a44eca9a4ff233a0bd69cc1ac14aa175609878f0339656080ddd4534deab55d3d77ee163cfe213f3e687aadb6896fbaaf4453660ddaaebded0cccd9ab700b597de73ea9554039f859553bd3f651ee377ffcbabed6f4230e53dffcdd74b64276700546d97a6fdde3c11f58caf828960c4cb525f00b3092b069b9bcd536280b12b8749f2d38d79d901a496a09185807b799e01d9ff6fa4e62a34cb5576c4fc5ecbb97c02b0d11f96bd945e7f4e37aa3b7fc100a1546cbe69374eb5eea8387f3330df12249639961f562a74b34f60b0a8bc7c783f6572fdba1732811f5188b13a404036e1ed8f877cb6ae01c4fbc839ca1916913b9c4909e3b0285871d97a3c7ae4260ec01e9999b3c3682c38b936eeaa7ed9721e60b88becec77626ba8d7c5fb05d7c2498f2075ce679f1e99f374764fd40b447018882bdbb169c6952666f7c6899c7b04a9ebc2d4889dfe6e10487bc101f52eb72e8190bae944ad77bcf177e25abd617ad4c429ce10a8f540787ba209efdf597d096b63907b513e9ad03ef0575e829b32797152c3e6092b9692d5952e8410ec49110e4b664fd8a285cc17082e7f3352b4febbe4bbf208c7f8c81dfc38aad210a4ae32f1434d2100c01642676ea317ad89cd6a88bf1cecf2ee811d7e30486bed15489efc2f5d7381d41887b61fb477d5384c46e5d54cffd301269bc41d4624aa24471b153367184d4838b09d49999bf149e516a4086a8793b81d6076078b4570591371e45553568ba4e083c3f53acb2a45ffa46c5d5ecd599ccf343bf60116663d1468109f0976637177cad12b7f4fa8b301b6e6de10194e34a4debbf38fdfb557b3c7421971bffe35654b6ef1506e921b5515b99269b3990805289f051de7842f565821ca747b847b11cf43519572100562898e814fe264a058d88f359477fc4e67e156baf8f01dc8e51df85236a14cfa90da0db4abefd48506b7328adad7453b4c2b88f1e668efa648ff34fc1b446b8147cfdd326622133e788d310cd84f867e6ffe60782729259ca23b9f582da29823ef31a70366c34953152233c37627e7a036228656a17be5335c9ae26d5205f967f0c81230951a9d4c443de1b89da691280b5ea1933ea857f1dce4a54473b3b6d5b35cc7c0da6f38b26fa8e3f23315ac9e557b5938e5f7a5618be18fe379f5f8f59eb56dbb1c09420dfd29e07921bc5f8b7b42584b7eaff408d15849544a13e7501a9aad2a4531e2e35689815650e3d376e77843d7f0196f7017137b9fd055aa6d90d52f143c2f40bee28f6d90a7d230e700e8c5e1257d3b20c3d8cccaf1036ad4662c9a81e94b852508054c2f0dd09d662e598473042383a03f70e4df97644e0e0668977934cdd9a133b1c83c6c27427cd992289475526d79f1a36ce5a9c17fa2d651cd0505fc63b9c85d87bdab1d48b0695c5a4d6053213243380ce50f62241840aee52c44214cf530cf31bdb2fbd78b467fc2a5ad6fc8539cf96be6b18f66f9aa4986f7d984bbddd3d06f4169091694d9c307a445eb8a6463ac32f077906dcc7ee8596cac6dd9fa1927e953b88e2e5388f0d1520e128eee021a080b49ac601923540596a624ced36b9e46fa87d44750bccdcab8f12bfd79e00b96400f2d67690155337aadf0c1f02ffb2e3fbe218714de2398ddd67dfe8b65478496b159ac4280b28b22aa1bdadacf074b2845be192654bae3c9a651baaef99579161779542f0835b49586eb4318b18a42c004f3230e885a548547ef596904be1dc729d48ab501a457db27a921323f4cbe0ce307ce55e0cb9218a39f0244ee8b19b1d0b4745ed3c81bfd779c9fb1df146516cb444182c6d4468aa1a9ddc81fc115dcf25f3ab1e669a9025d0ee21cfbabdfe5a2f0a51da13f18e42854137c002bb851781e0536a34fa8f2c04515fbfadad581525421aed9d2af2d22eacce9f790ab174b39fd767041c1d58a8a5ed74467eff3c1b8debed656b46d76b12f956db7963651f849f8b6089cb4a225e536411ad442d96303d4ff92ceac0cf2650acb691fb774a31244de6ce096f05ed3a359bd2d76809fb979be50a6f3ccf495d0776ef1a19b817fe34e3536845c7d50a3f416a198a0b228347a56e4499e01e86ddb8eb2fcaedbb95c702b4585cec983c07aefd9ae20e5778d9c6d2fb76a5f866b5d910bd094f9e737ab16b6a12e8b9581530e7cc3e880cf0c8a5d2f4418579652673ea326372332fd66bd30e0640cae6ee73b33dce0cb573aadee8df8903141a8605e23057ea1c2350be95c4b5891f4109e40a603f00e389e6de8f1dbba35aef7b0b9327651babe670162e1e9f36592eee1e47c3f009099c1331202f67eab06c6be17798098b84e1cb0f069c31bcfae9116ee5e99f89aa32965356950c5da709ef4409f2b3be19cda805b99dfb916717fa727f317c0747d606d19cef1750b1506b9fb4d7f237ecd2cd96a1b47b6830242fa57e4c4406651eeb186d7e278861c8675122b8536d60c9723e79703f85e89627946d8a561b844599b442f2ab493aea6914be0445d337fa5c698b41969ef30658abb78c409b1802b911a7cd1137af3ef736f15c481db4edd2a451b93f07d1dd5977f6c28219a2debfdd267e07c8212e88446710e8817a2c7b7b8747874527839075b5bd992bb72224632975ed6f4341a2c979d295c2fa3ecd6b866d1dfb46a1a4214ede0425c7857d403b5530b18800bd42c401de36b78d3ed0c99a518ec1bffb075cb441bc567120f0c68c802361f45e2cb03f307134a05667db6fc0741b270b9459d0d043e66dc5f1759c3a3963850c03d8eb2ae6e4008a7d365df94fd57f5c54b0a43e40e9d3b2cea2f4fd680f4b2d4498862c2c583661ad64d54a76634173c50bbefa57e35b9de4f9371833b7bf588b99a0c2a603aa6254d176628c66e5d861c58192ed656dedd0b2d339210f4a043546bb7ce878e5132026a1aff6330500b7788c7675e273191e9a49ceb47873c6ce1a46b9682a7eea8bbef7a1486a0763329f303385dd13a63b0a1b477285e506d29ec306a98ac05ef414e8d4f76e65a67f942d4891d7b81b927cb841cfa9e64adf4ec0f3213c51f6f5c2e5b997d2b810db11d4342e44e8ffc18cb13c307720194094b0fd6391cc38fd337edd8e197758f172b564bfb72eb9549486a559500ae8a32b2393e53d679ba70124af6eb51bd53f415178caa0e1dea82eb8fb8ed70f3f735c99353a81ec955f9677ad9e382e1c30f828eee384bae658d5c8cd657eb5843db3728fb821a3cc937dd866b11516945321bc257ef50256d314269951a9966d6eca5fd1f27f2597ef21d7592bce7de432388bbb015460a6935452cdf80a1a41930ba1ca8e0cfa8dcf2cf4f382e6bc824ab7081e2f354e6c3620edf9bcf2b9a726f1f8c7cf5d9b24cfe9a1d44ad06ad50927c1dd4d1a33fe2804589b15061d14a707b5585ae37fe34e026e69e82e0172fa053966df75aa02e579233084b69d00afc7780a9531215fd5e1cb22ef5208d299d9df497aca28e0fae9be48a086b1f18dbbb13d22b917d10412489dc4def98a650043f3939a393ed4e0ba41ece9047ded5ee19e77fddc0d350e57490d474bf0e822e803ae684363000887bace7ffcfc2b1b897d0971d65b055087a32d0d88ac9fbc3bf84fb6e00408aba721d99e13f2e39c39775bb7af50e1634a4aa8a42813f836c02fec0887786b44b90572d5e208933b420be331cf7555d12f9e04adb2dd8e2d153907dfb256848e0de43eb9df93b68363b93462af3ecf04a81bc58ca15fddf99b92279ee924f0c2462c91ac752aca0efefdc3ecc723d97834427fb38c114446c3d9cfd8a44a4cabc26d20303b344a3874481612cfbaf1c654b077c4dba87d7f4e5e651f6c5cd48533244ef7aa56b38a7426af86f16aa469a9d46233087bc61d6bbe9bd5b9d344f8f8c092454af8929f7f27f4ac04b96dcc742ca380ab01da9bdc78b89e1523fa6183e07ebb85a063c1e5ba9a14523dca797437d0302be10794f10b5fcaf6e58179750288bce2d4a3ac585ce432625e26fafa745cc4138ff97349e505fee79e668b4c8524ebfb0bdea9379d7798cda11fbba760cdaefa651cc157942fac5f9516216b06f7ab36bc716313ead8b9fc8d1155eb8b97633906ee09aaa75155d7800cd660f6658d1e7d18446dc36c186798b83437634e8357fbe9b6a38cff8de7d5d714bee1f3042ab41fd7b5c5c636a75a50e12b865781efba9c52e2b3aeb6f91cf156e54824a2e3f814978c506b87242897e7384346e168a97258d8b9d35383bbe83764977edbc2cf730e41f1c09c76a9d9b0de4891144b6f0843061df1f620392810cd6e66214f90d7a6773859e90754b2d89df4caad1061caabeb4eaf11571b4d8d801b7f25f2e2aeeaac82bbff6e9fafb8e7d6581e402835fe08da5f3780e8a5081d4d2e2c554b5565526f5b4215011cec5c7bcdea6338d6b3ef3f86cb4617db0b0571f7d6df218781095cbc43831fa6ed6c439093f20a3957feecba6f0f2f6c20c91870a8090ba1c811e953963151ca3687dc549d6522ba64c8606e7554a5b4c3e8af0d025b6030c53c83b59cc83df3523f846e8934f8f674cc492780bf01517ed4a441885ed5b0f2c9ca66d9803abebb13fa62c9fa1359d28af55a1396c8debc2da692ac7bc2aecb5a0bcbcf21de88eb75acb5e22cf8713875038a908472a8f6541494e15acd86c95de6690005afee6e04f9fc54362eb9012ad23da9f0853cd7d87cacc9444cd57745e8d2fea4156bbd12808ab2be1cbdb71d0ff7a2737726bb2b5d6eb6e0c7275fc2717e2d95b56d535edf05602d48ebd4bc1b2d2c75dee32aed154f5cb8c2d8dd340eef1f52e67fcb2a43e0fefc49cfe4886262aa8012fea16e62b30d24d6769a1b4f8a46544f2f7f057da1e1a385d66112941caf1ab9d5b95f945e5acd689cf0f881f4352255d8f980dabcbacb839bc4eb2edf9cbe3a04cd114895b80aff988c4c64915e357118c52cf9b5ecdcc98caa62711005e32a087723edfdc7761215c69766063416477b6c5a4911ea4fde256c2929527d11f05d221802faeb9736812a69e4b7593d4f6d49a9476555ad27f294afa60b64c3337f686e1611a6d6d35742248f293022df5b079a7304916d4d70be5685cf5f9f49ebb48695e68bcd8f248867b3d05b6f9de1008e6a842018952c43be3702cfeeca2e80f200ce0cd3a065779401412d6bf18bdf258c68a437b591bf57384a283a3ac47850f54cac91ed969a49e5f048a080b7fdd057368033252d9bb2081a0b1a0229e503d1e6dd709d346af9d0621fc5b1f1d72f695236935a7c634f34d6eaf6b6eb618b2531220855cb54145f1b25140bc61583215049f0cbeaa09f3d154a68cf6578677d901cb19dc7f029f09feb43f4a1137c1dc53ca3f014de229f59abe8b244841939a82014ebb6c9cb2344f4be131f6b9acd1581556d677659ba2871ef15f53f20e7dddeaaa6144b4865beb3eadd9d884fadb5aa6daa7ef3d53be64ef460e3e41f16959adb736cff524671bb62cab7f40b3e4a3a553db7e1059327958109bd2d543483f73fda3d504933e27dbe40db296e0d3793b47daec87b3e70e82d96dd7570c01d763030e1d8cdbca57d45f683b2d88902590400c01496bc46b9528ec156e547c69a651e0703305f1f3ca2525e0afb302eecbc5d984ff89b0d8b8868054c324a13d636f8296a1189d42e4bcaa6ac169131e145fa93f5013959c137a915bfe83589bc3e65a577f1cb58d4bae61a00db3aafc9594e4f8e5135a +MD = 998d1adff784a28e43b25bec2e9d3cbfe588bbb1601ab7051000c1b943b4fc2a + +Len = 109592 +Msg = 201cfc131bd0389c0d9268e2f005f7bb16c65fc66a9f8f47fafe8f32b2a566866aa23cdc2482bc408ec2bc3fcf8620417f8dfb1af765f8dbccdbf9ee96b6fd62f6a54783d775bdaef3878e639982179cae45085df320c28d85430404aa76c7e5ca0b662ebc11028d44cb2576d961a572abd4ccbae437b5042e1df99d764e8cb8f0bee1065cbf55868775ca9f148a926c7c249057541499e9cf5120e083a4138270a400323ee57c41c66dc506d467a6312b1c9b5cca1e36e36ec6c1f658e125ec50a70bdaeaed4065089b5ed4a05fa96ac0a337f2cfbd549b156624067e6e8a9e9aae4928e93d699a56e7dd3101da62be41a3aa41ea59bab8cb1891397bb10a3f56a00342c23fbf8ab73989447e409ad6b8033d70a35a31e399c44fb7d9146c778a678150fd590adb3379ab369ffa19592cab38a7822981c48552a7a71ffe7af040ea0b7b23f51135d28f8b2eec6ea7f0a682e310102c72029aabe131d6d7fa4f7f11e9eabb7a9d419d637155ee050c432d7285d0d4cccb46ddb5457f8506b53f50c462c74d5076a69bdda5d32c270ff9c96368125671563758591ab6b4f57366b9ebbf3761df640dd4e66ecf2e3d7aba823bd2fc1f84d97e1280aa01ec0bfc6cc56e4964808e2f1e516416717dad133061e30cb6b66b1dc213103b86b3b017fa7935457631c79e801941e3e3a0e1a3016d435e69a390eaac64f3166d944c8eb8df29fe95fdf27adc34631e4a1f3ff1d5af430f3d6f5908e40c0f83df1447274dfe30bbe76b758bd9abb40ed18331c7552dcc6959a1303e11134ec904bd0aab62de33c39703b99920851afd9d531eeb28f1c4b2e6c17c55db8296320316fbe19e881b5fcb4d266c58ca7f31d9176e26f70315330b58a516ec60d10404a78393aa03ced7acd225cb2a83caf3ab5888406a69a534f1ed1346e9b5e68831f90b872d57367361191c803eb7e38b3b9cd601282d5efdbf082db07d89bd06b093f986d08d3a7b12aa74513b6eb241b26ebf31da5726d59e315d1b4ee53ec6a9fdb6583bacc136e90e9607cab01e5d3853ab9727ede706b6f10b4e04d0510f45c0abc515bcb5ed0bcce86a92861126f4d502fcb8f988d62ecf9d124853de2bab633f9506c6fde8a36cd4413cf773e50f7b2d283482f18e2f547c2fc275cd60056ed98fb8d0816fd777c1566f0c2ae3b1cd92e344910a75e006106d193e06f7786ae37dd0e529cacf74176fd4cc1f6500549af5902dbbd56a70c194f5b671372edec425f90add40b4eb3d55123f3ab62797ad25bf5eecf4f417f86b00e6f76a4f52e44fd949851aae649dd0d26d641d4c1f343c7a2c851ca7851bbbdfd57ed6024eabc518a909a1e4689ea7bc5f83e19872950368a06e93ab41944c3d8befc5705b814e5f33511a7f7ea8a4771c804b321a3a3f32c18fa127d3c9e6c011337dc100ceb156ed45d0a62f238dacac44a3429f89bb7f98d09043c42451106e30471cc6fab7a4e1ce0a8202772b0218b631f287ec3ef82b1aa6299a0b54d6aad06aa9346d28f117d20f3b7f0d462267bd3c685cca8f4584532dfee0e8b9bacefa3092d28fcce7953a28f82e4ba6b3a1430ecca58b770dab656bed1b224663e196dffc28c96a2c65ef9de1989a125ecf2fed47eb96bef8a636a91bd521c47aeb8bc011bf81cc688fd8b620446353cbf7692201b5552cb07fb02eb3954dfaa6f5c31bf91e20b84419dcbbdaba0c31a124d8f4218b2f88da3eba44dbe40eb290052538dccd0ff7670de5f33a83ff74895b66adcff58c9c21e93b31bb49ccb2e026995ee155b5517b72daa76526a2e42aa6fa94357cd42e2a8a1d3e7d4cefc33d5d07d6303d798d2551a21f862b5f492d0c7cf078a77007a02847b34675dfad4fb457e9f20dc5750fb127a3c31b9d6a3996d50ac3ffc6ef29cca1d8414d0438bf3271dc4f4e00cfe19a507b447dc310f74aeb2a3c0b3fae6d7d13f4935bc72c35df3efa6e879164421505ee32d93b030e32a7970b53430b1643855167278e5058c4a48a7840e2fcdb282e45b5b86c0b2756f19b595f3bcfc926df35e33ac26dd1e88cd394015a5f54deb4c9f4a0bef0eabcb27c4eb88dc2302f09e92f1bcc4b4754df1eeb536154543c7dbf181c9979fe6ed08311e5a3acf365ebb5745212b2630e83b3a5bd5fa4834c727248b165700c7435f8cb6ee455bad16ee0da68fe6acd2062dae9c8bc178b157b29ade98a9bbbd4c723a3dcb7852c7978b488e4f73a2c9163dbdffae175119f812b6f4b70c2b498704bc2b58603f167f277a74e64ec296a6dfdb0de3486c0f36ac1b55f80af9fc817ba4f84b898b2a3c5725e2faf466bb26a8a84f91e123d182033a7ae2029236aa4b673ceb50c1733d7edd60e3f119b7141c882d508e0331689c96fbfb9f7e888fe88561de427c721123036737c1460b0da00d3f958b948f68fcb321ab4e297290f781ff8afb06b755d82a7e6ce1963761d799eed786524bf19801b4877b2d856becdf7e87d71aa359f2d51f09de64bcbf27d0c3aceac70790e314fd06c2f5216f3d10574b7302d6bc2775b185145c1b741524567c456d42c5826f93afa20ae7196ca7224c3b69b1eada9eee752fb6d43f24170fcc02af7e1dea73f0f884f936f900165800acb9d57480a31e409d3f676ed92b6812cf182a088fc49d68082aa19c7be0711f436db1d7be44d97dc9405591a8d3e7f6f731c6f3e6c401749829b7624497f5eeac1fc782e7d6988340541f2617a317ef1786e58e8404c5b4b170d8e8fe9f6ef5232a970491fae407af0534baba0b6041ac820626ec19428ee08a86af1e7944d9552890eb4104446141be26cde48f69b522ad995b83441099a1f1511308b80ff1ce94559589852226c4e975be4ba18ca016841faafe47a83b722fc8b361de38d4ebf845a1b01005de8531a22a33e451a8f48019839186820adda04e1e9e5e480929bef17e691787ef2f112c9051ca5116493c1783f173367e40fd61a332bac5f52472d9aa292df0df1ef2756f19b5f39e81028a0aa2a02e0c5891a3efb3662b2f589e7eb354a60924d1602d34e049c1a8489df1a6099fd14b60f7756294f2f02e32ac510890220966d2e4b47069f833a9ec48eee4bac4e8a206b9569a4be3bd583f26e1384014aa1bbffa9bb00b43d23a08bdc2252ab1aca6c631d7f56cbadb63fa88bfb109104399e50c536248bf15df0a471c05cdd8c5d00c0b7a026beae2a7e16c3d114f876e87eea47c05a6cc86ef8d7f6cf538bc9ca46490ad5fcde65bba902bf9c777fca35c496d6618a9eeae01eee13581efdfc99a4c8bf25c074fbf026352764236e25a8d61a1a229c6a7e3bccaf6f62a57b4b5384037d995ac897515e77a232ff0db1ca1d3ebd0a7818ac0569e4b3f5d04dde7f4dc4ed38b3226267b98fd80df3a3962201cc642207f09ec85d53861987badea567d1b70ab1ca84b9a04772fde77afc39eb8ab9712f39790b0fc591d7b20b734e3af282173d0724d07965180ac3d80a95414264ffd93d6857e9017c363989c4012ef1f66840236a32adb2713d6f06e8c06cba0dd4ee42913352d1ee3f0479fa46ab95bc04a0647f69a5f6269dd44cbf42d5bb5bf954911c27b2fb8ff9fb263ca519a57cf347138bfdc8f9de32d8f1b7a1e30cf675f57232bb7248086c07d7b3a7e0eadd3e1b77b5747d824205643ff767fd778750b72cfb78f88001a00ed387d3682c88ec06da26582e5bfa1d617ca81b8dc2b69284099ee5ad6b219ef963dfb119322505ef820630424aad83b5f1f146fab62a44434f438bf9d0116db1cfe3ca5cc65b92bdb87c852118033d4ae6fb6fac1b8c6edc4714f0457979151d5fbda597aed2995ac4b0de338da65506a3ed1e0bb983163639369ef72cff9f245b92cb34b33325adeecbc3df703bd2d36ff0dc7f57b8463b6dd41d79b24e12b00a8dc2999d263b9e7ef5bc908b6dbd98942c2f70bfd205d22a14f331d30c76a8b5d314303452e515bb5552aba4e11d3d58c8a246b77a5ce3ba1eaa8956e2d3f3a48f485f40602afaef140c998442faa904edba6908585157631bcae70577327b1fe7e79088f71335605973c2f3365dc6dfc201417a13ef146e33d9b5a6749a276e03782ad5c0a6af564d0d8eb8654d7b3370fe37d4543b03238d615a028014dfd80c8395ef63ed4e1b1865669d79d2b0461e39b1e0c23f0cc952e93ee144a78ba62a91389e87f0fbf6e100b06817f44d62f53b1864060218a9a9fac90b675b142184297daad4b69f2ed068d5e2e9bc3bcd1d8bd529c78c0d0cbb1b63479238608e43d3cbdaf447200c0f243ed3973160cfbdb14ef7aee6d538b0d4745e6d4758388e178bf78cab68d8c3bc5203c95ba5b2fd36ed9563175676afad64199f8fe4668e7e23c947ea5dda17b878392643f2bc06a119cd8d277a0de02f9b3ed118ed5f6b8ffc18ca0de95931a11a3f56f03037007a3965d41f27476ce18295aaeb596c4cd37eacc01cf39f39ff9fdb026a4569134ab726e206476a7b4b7fe8d30f12d559d0114dcf1d62f258586fd6d2ba1b9b6597fad85ce4c1bf34f6fbfdf38cfee2bc101ec29f1a209bb536f2f76de7991421ec6a43edc17d8ec0695f9db36b07db9a1b0bd4d91a14e17a2090087cf9a61e6dce6f2e3ba6631f472c1190bbb314071e77424b2526260ecc9fb1cfa6f92cff71c77163ee9a5bb9f0c87b9eb26c0caf6dae29ef2a453e69d53abd1694ee1200575ed8a8afa64da5e3c4038f419fd91bb2482a87917f4439bd791ca3ede04069441c0cc626d1212c49a8132a0f53629313cbacdd01dc20c7ace4363e5ad89d8262877585fa23bf944afd1238c5908f5fb8c117b72365bb5bc90473b183dc1392d9297cacd3a40f250d4a68810a5e48c6cab1d2de9f21fb3c3c603cc30ff789e3d18a87055b5dfa29bb177ccd87c675117124471a1c19c9b42e80f73ba72ee8bb71300056375566e67bedb8e4e3cffe89d4a1dd3242530e09c7ed0ee2f28b1663e1a54d6812943da57652838ec782cb731cb0fcf0bbd9b0842e2ee7809915fc234a71d803922365aed3d14592dbe5c51a70d90c1a2cb3996d8ccbecdd43d48242d41a07ee5f09c849bbef67b9c603d2c5f9a5757940e7af0c084d83c099d1910aa62a44f3224e4cbe56364fcb31e1dbbbdf9ba0d59d7fdca8cb3b16f242130fc1e929f6d883fbdb54cb2d6690c389c9454944f3f6eb82068bfc1d0c3ce7a2e6b0c49d846629175c55435c14cf250282ab5f26d7a3d3f917fbc47ccd643087fc1f60105865bdaab607e54cc252fe54f0354bcbb5a6fcebf6414bdec132c4c93b56e409d99de6bdd3b3da84d6dff788fa2b32bbf3c510608ba5b8ce50704c70899c79116fd64d569aa0498cba3fb8a487d43f7cfbc9b461be6e33d1e2e46f85d03b47af82d79a80f3185bedd43ae8b381799798337992f477e6e671df57d60ff779756b7a697440c661382e8e972fbacf626597059f52249e53f735af922916e69f2ccdc05483a0fbc407d74f2037c359d7cfffd8019cf61bfe8ea5ba5a0fa385f4935eba6070a77b89f1717e9ba5d50720fd5a13691674d62fd44a687a30bcbcc2d3a5d154e35d2cf81d8385d124f9c184182f209d6ba5b82ef0ab22b8356c734f132a6dfa83cbf759b395cb8a5a366f4c480766654191a7420b514edec6b892e57c76f718f9f8c4f3dd2fb88def94f9c1b4694d8b41418cb44dc256b28aaa01ca3610d577eced7c0fc1dab4a48c1b472885dd3dd512bc50ccdd88a0fd2a49a846688071df05b005f5871d2795d9d441cce2eb9e0d5c0ad9d2e42b96864d9d6fa33a4f3218ec4b49ed588179297dc6d0f4f41cd8f9c934110e89319e179caf3f27d5047fe948c52f3f5c8d122821f9dae7e3f75362ff41dfc8f5242276bf86fe1c6127c21bc2279e32bac95b5a6c7648eed605780fa6392a474f8b896c5d2a96c8054162760178800f9bbdba8707440351f5ccadca6725dcd4c0ef3bc11ea4ed74ead9c7c2aec0bc1e26f29876996bf25869d65b59ea0cdcb770d7a03dacfbed67387759c770083aa784ef5ef0cbf4fc4b5aabeb85d6f6123886cb20a8ac377deb16a3804df057e2f2dc3c72bd45e60b71efd1c316d3eb669f2b5323c9c9618446ace6a41bd5b59c4757623ea5ae49061351d24dd48bf4c03386f81169a980ecc123c72dfac82a50ed1de82870ae26d479a836f087a318083dc0415250f49c9ca4a3cf83b271bfe62d55569ae5ef845feb1b8313f6c660260500b74e4653be7c3753840e0b777b464f2735fbcd166b8eb1d24320ea9ad202d36fe06d136dec74c25c7036cd8367589bbc0bb3f0cee34912f6fd7e2bc77985ef3547187eec306c8ce61b64bf3c8905583c632a16bdf57857af3a9581f65a95a07971b55175924cde180cfeaa4beb33d0cfc2c7078ba804c92481cdb4cf7f1b3063e8ae52b319fc001acb6e565795cb499bb2f48ae105d3ad7e5a8e8bf9ef00e51c33694a4bcd643a15e01a8b098db60ccbba19696712ce4ee44d40cf1db22a08ccda5000e8b66dd431d46c1109ddda6185639c6ac4d9ddf37fe34b48e2d183e09a65c93e30ddfd15952dcaaffe8d218ff133e656a062e9e377a317bef153f2b7af5d3ecacb49fd466a769e2f90a372e039b45ff4a5b3d867f3160cf9f1405ed3334a166d620256afd7344f576829b49a826e6f0e79d694c71bc293c08ba0b17d4db2b9ef9d11ee9805f145f02e26d106f7e87f6ac4d3034b183112dd677cd2fd251f8f18237daf491b34e8c18aa3b06cbdaaf5d22fb00f3b12ebf3162cdba99be41800b09d4e80094286a09422a73914ff3c3b0b61779fde30769c3482c61e9fb226747eb28d4822a26ed52fa13a5445e327b7e003309a7d9b5c77ff13441950b6cf534b0b41f1da6274ef5bad64e94991f2d318bde1ea607b25ea3e845d82f8199e05df4f72627aab2056e0ee2ee0663225f67a369476cff7575fbb801941dd0218f20227288349a4fb72860e9f21e5ee4887d017502612377c3d3cad813e479ac7827c3b6c3c91768cac15b2c0950eece4f0e0071ee270641bec8ab39c628009321e1432457598485b6a548497222855809873af059233a6bdd46d3b7393cf76e12c94b5bc16a843f1150c2c2fb17d50a5e750b70d1ea124e95daced0cba7b095d16c26bd807078ed51605528d2b5306da4541c63e6e030727ef117071c0cdec2d4266fda130fd538fd3079dbb76f39fa71a0c84a16ba076fff2626daa8b0d44d91a4a121f7ad4b7a8b6dab5c07ca54294ce7a9b3dfbc29aface688bbd05833cea0435535bcbd2e4a7264543a423b0172ac953b01a07af9b9febeb73b41576f9e76aee675c0d4102148b12ef6f555e47f0745f6e4178b0a077b1b3cc96a230a658b33ef82a266738784c07602af9f5fa6f35657ab9340dd10989873f6c96f769c547edabce008daf5ad3ed3fddf7be572d752f7f8a250e57ddd930743dd8146ab78ec32a4f81fa8f42878b338e370187b49d8323bd32fb5a7b0a77121150cfd2b6f0881db593f8ffb8d0abe547a006b28c132a0e59421b016c8522c2f1e66fc948d5032b091dcd27451613fc0f1c14fe3b41ece9663fb77537b1f92be3823e76f7a5fdfd5206c23070c18c21ef9374964b8d905ced1017de64f5c6f6f20c82024ac83e3b98381f42c239defcedeb6fa04461e00ef49d83637bbb4fca236c8495c9a68e8ce39a2c84c2e7d134140d4b45ac24a2a886ce432c056a5d50808a8c55fda7b5983c14311ff8312d7269e150ac0d3e9fd1a88b9e628a69b82f104ee16d6d347a08aa8e753bec80b95df64fc8feee179f3264bcde2d90222810dba1cd03a2b3a68436f041fe273d3e9ec240f962d8176a73c14949b4a1fc759bea699640228e01b3e722dd9330ce84dcd59a2c0152a6c73bc81a2820445f66774490854b772b533ec50d91208f9d53c03847aa02e42c7f327f17c29802b3c54df1fce24d28f464ccd897a5cecd1073f2f22db88e16115a01f0296145616158c4fa97f56dbe4ffc0629a960c47191ab190b36a1cd71bd205023364b4febcfe885664705d4c0a6e294bf2c0b2b0387c5dd8c49abe67c9899c61e27c9dd28663c373df65ca9b660df1da206ee2a0b5a87e87c4d2002bf0b8d0cebe523179f8e1e83888b401529e5bb49db2151ea1271badfe32c4648c37cc3ca9257a126d8b054114eeefa40a09d3ec271637c929f36266dc9cd66e10f5404a719648b325b32a7889707d251a3f02f2d6cb6b64b3b1092383718c7f42cfc184b8af62862b17edf916bbe0f70ba465835d501493d6d67c7e834f5b3aaa0dac75fecf4c1df61fac4d3d3fbfbc76e077f80b32c7b8fbda48e26c94c702bf558d98b48459ed1f3101df7d6a6dc7b469b6db60e1e956ab32dad9afd05479eb2dd1576a5d3075fef27b4a47da7fbb7cb6aea80eec1def5d86becebd808802b60d044c90b8544b1dea64f83cfe6a0a183ddbe865cfca059b3c615c1623d63fc869b2e2b83439cf048f7b73bd44b1361f85ab06f5fb721bdcda7eec6a48d3836aca59b4513f55944b381b47594bf9b20b24a89e300daab4aac7441a0a5de46045b5653bfc683c1d4a9ac0ed9182881063816118c464e8427da97d4f76d1ad68c19161d40a1d61dc9b1e08c0e67700e3a1124100f39f9f47edf766f74052730f6714dc370aed4b44a5485f7bd897d87e5c8de4e17e1c44574417bdcbe74ef9c6be8630bf8f466d0801803178d8739372ee2ab924a4797bd338a0ce27ec258621308c0be807b75b79388c3b427688a653ee9f2a650725ba6e34193485cf84cc91558cda4af4ce7b2aa292b9632345a583c651d50d26af646abef77d7ff1db21a9960f0842e6ea609ed85a48457f3905951dc9359783852e6b41b20571039719ec9a99227a4e99804852397483eae14b0a5d8bc89e9e356cd264df6903655739acbba1c56bac6a7eb9a8b6aa88e6dcea55fe000a7ce73e945280e61491a779f59c71bf4d7180cba055346876df036a680a87dc77dcef1f594e2e4c94c64aadd22e655847265c3b89bd9db545f0b138488a73579d1926461037d5a965fbbf3153c4fef33f14af38bf554d23b45880b500685937e6cc1d415da21f5304bc75c2ff02c71681a6ea51a5bebb4a2e80e26f242691c3e160449f861f53fffd731ec1486a2648db77ae14d15c607f311466d52847c5a229603ccf4e022bf6ccda1abaa46db4f098e15ad0c6a0e569586d7e75814e5d490b66564f09ecffdddf3bea2da77ffba4468e8133fa4eb26f0106b9ded39cd12f13cd31ad5e42582bb1331d88d63352da60c9a1ace0984016c76a795f73d5c9daef1f4f589fa4cd56ff3a155a950a6319744d4caa1e2026e718235d95f66b9fc2d9d71fdf5286b7e5f5cb72217877a4d7fd63e2ca1768cf667fabd710efd0db7d808f13a01b6ab06f5151b46c050d80ac68b7f47b40f4b1fb6a7e663eb497f5716f91db596eb33f498e874c98bf2e8efd42b4024c3f36774c65159b9dd9438634e3a9d759a102cd0af9b6bb45fb7d484117e28c9b76b077a00bfbe7bce246063ea911882f76dbd23a4f7a70e26e5c151e64be04076bf53bbcabbbcafa5431edf51c736e5934a0f73dec4d1dfc7c5d9dfb95c0f91ea3774be8d0bfb5f4a379a60eba4a0a558ef494bc5ca90302a9f44b5f3775ec2f91b920bb2782492a448fd6d20effeca2ca39430c1d08d0837bb2a5bfd6575dd8db2d42b9fcadf519dc06f8f5872f75df9b018ac3aa06f6fd660b25a3deefbe98d4563a5bec9d3a31ce5174dfbf33464a65cfc469800df6defd804391dd999efe11c6701763da9900a011e2f713b5dea1bf0698743b9850b6a69498004f0f6f6717f07c82eed08204d5aabbd221219f440b386f5a49308502f5ca9b85af9bb0625b66b8150a2995cce38e780773f108cfdef7c1a2155114526f94b6886bd8f27e508bcb44324044b75e5faffd68cebb93aea727e23c947f038875818f2041b6299bf22e96f3bf0f52ba80bc2a8bf5284dfee91a713b5535b4b50f750059606be2921c4a93caf0563d6c8425256a1ecf3d441001f57e2dc8e489a5199273af9447d77cb7b1247ec9c5f8ec83646fa6211012be86e59188b8f18ae8e7ac0ba9cfb7d085ee859cc4da8af42c5f6e2925be34ef6711a7f1e0868a1d4d57c38dc96eb121ea6777907cf90ad2c601b91308073a4e8c2ad33befa21cd534e25f869901c22ffcbb0dabd1b5b4093c22cba9e79c8e94b04afdcbe09c0837522006628319796f4f41be4b9d91152c113b1c7a2edea07655ea6e1e7de4fab807992ebe322635745494100c2b0bbcafc7a331f0585e2e47ff91cac0121d52cbd7a65f0600a884c3af3a9949f48608f8d1f392a8ee8b76ae0fd98a4d47a5bf0744e00db68920f5c1b1adb0a194a088bbc2b4b5007be717fd291a331278fe8deed1ceb15c362ff712fe560c8f85ebba5d0c6f1f936b1190d9bddc4bbc40b84de6f0daf0739216072bf7dbf38042b82c51317b48de567b5fb840a83aa719437d84349d31892773a46130a80c0045a64d3cb471b74da885031d5406867f7d20ab4b2f7dfaf950e96d773b32ccac2926ab8417daf16debdef97d6a6fc581e6f045a02405b360c8b7b0c27a04abd047c9b5abde2f6dcb8ae9c15cf65c6e6ad102eb37b4bd014bd99f2cd76fa620193c0ffa2869e7a2c32025e9307a44e796e5f8ea56741c6b170de0202aae9fcfe37059e78e6d8c36f12613ef9c78c1d7a27042f190c49c375ef02b3930994a11cb7f381c523b9570e2175422f5745ba4fa1a716f8b48c51c801ae0d69dc24d8c3dd33af6f8668c06f27e3741dfff6ad62a4ef4d28a531f7126d8a196a6ac02a5b6f6d3060570d86fcec56dcac07c87f1af884db9327613ebbfc3dde7ffd911e4c36480d7eded22f1c377481c2b6e2b7de640fc81f8444ac2b76706491dbbf3cfefa6d4db363dd4536d1e56b48556cdd18b1381cb60201cbcaa3cab4864d710cd98384f8e62d5650b48352a2272c907a2fa7a6e03febc123014af4d5489bcf1746983417ff8566d6fd13632f458374158b0e021ca285ab3a363595cfbd0d02e4ab0325b0e5b335617949bf198ca2403694aef3d6c719e89ad22a56abcfeb32fb718a00ce82ffea7890ef0f68e3d01d65b24f221896ee9fcb3ef2df70657c86e501f66d76bdb0ada4aacbfa243157332b4db836e9f74ef953e155d72666092729c10e13b27e10a86b2fa72956607da90fcdb2d852d27f1ebc221ae6d6bcda3d4f1b9c9b89ad65005887494306578ba79a9a05b0590fca358e6b0bb5874e37efe07666ac0433f8e0f01a79f13afec857521c7965099677664f23eeec41046865633a36ef29f6116ebd5101dbfc3d7edfc1bbd5a0674fcedb89b18c330cc6b4c860ced20c02dff8d24692a8a853fcf3676fe0e3087d2217b9c37fad30f17c65405f9c02aa97d6f4351346350148237118e3f1694652f8992b86f4188ef70ec1f4e90b9071eec44ebfadd6718de19a3e19a5583001eeb79d57597897f32764110d8583420b118f4f979ba824f52849a2933d7b00e25a496b65c473f00887679cb2bc6ce21d08213ce6652615e02519e7ae34c4a1919d944b7e4f4dec7422fdac0c152f3652d96060d394b70ef7dff05391109adab5bf8285ca836f53dffd0f87431832074f8e360287afc2d5e25eb830655c6474f6c9fa6070e73fedf32286767e4dde1cbf2f8a69293eb13448aa57c4519d8c38fec2e32598042682559848c1e53d9b3f48c243dee2c9ebf0d1ccb7587e5d79eb72b2271d6c608dd9b0673fb0a16fd23692514ba9dad9d8d426cbbe3314239358fda1ad8d1185dabbaa98518bda6be9ca46e3891238f5e0a7efaf569f3a78424645985dc0b2fb77f0eb316899b7ba4ac30c81e56125a66b30d38066e218e3ee7cf29e1ffd7548ca401c3d6b2361e35be98b3247ddc873e1387b47d545d7ecffc3adbcdb8b82f63d73e5c14271006e86046cfe97cf4ae4aa878f0c8d109f1bdde31ef979b3028d3650edc7d5cbbbe432db56edbd7fd2812ee5b6d5758b97f9f0a4ec5de1bd1d931fa0dd560c79baccc637f208a23589d3d61a98ac75fee80da1cebff0fcf1fa925f2b5c77cfc226aeace0e8562c39966108edde9875b0b9df562841bbb096c2115eb9133106f027124b9edfdf44d222b32d2830a25dea33f8787b18c5e6f69c998412aa8c9949e4810b3980acd34a5552ae9135d015f47edf708fec168757b1b139fdc89070168683547872c4bfe756c5f1f1962c8616c11ca52c66b7790229e1e5441546739e349e8e245d30f2f24e94600ffbbe969825387e1a2dafa63f2bb1f0ad3bb58b2b175c2105ebf652b2644862b50a8d2ec1d1ba6520ea06f456dfaac201dfe59e03574476e3c220c971c1685ea96ea137daed2ac10845c54d8e6e53c307acdf956f1bdef3868ab53e758c7cbeb4cd02972ba311f998e5f3983000345c8947aa59b78bb301b6ecbe9808ee0de99ed0b938fc19f677997398bd84bcd6f34d5b4ed123d04a093a8f42c1700fa2472f1ecc00957761a2d296bda3d2cbc0f21d8ed4e4fb122b71db1d49a0f516c3402f6046d93de6dae20df7683462557abfbf88437c8678dfa2613bdc1de12cf83c653d2caa3e8eea9f103ea4577b818dc4fbf2a3800d2bed05949301207a78caa39a5e885bde961841a41276f4677780679b74fdd7d853dd013bcdc2910a23c0dd966a61d36626ed30911be8f46c60db1265b5586b2f1638fd20912758d7546352210ac0fc1e68f0d59f02013dd364272c235ebc235a9f85630985375e2a34396b03e6acbd4d82a996966fc9b8e4aaeb1d9b1631e7a0144c9abf54fa894aebcc8e03a52dfe3c9ca0dc3d09494de65baf4c9686c09f4b9e160a0aa478c281a0a424ebef4ba734df5e105d7988e5239efc23db567033a164691bb11ebaf2157b4796816e0fa17b726a98be668e66e19c5809342d4a8ceb8fd0357e69c7ff4fa53f4a8ec780d2597e4cde287964ba697c4e6667b354907046d0c0372da7d3774614aad9a5a723182b8d48635a11c7036763a33d9198287ab2f324a5146354d5854c1d2cae8a7cffa0b44036b09d77f68521267e6f1e3d4ffac0c990c4026cb08b710a4d8a33c65506492d6b2411b08cfd0f58f2f4ecb53848bf18c0e58c0252800adb05e2aae76384d477c85d745c0bf8b5a160c90c7a7dc17977fc200afd018ba0f71c5ef5c97143de851604ce62bc9d9c6a92968672668f754f0d1d834706d4bac65aa51e52c66beec11cc028aae7154b194e0260873bda3b09bc83ffc7a984e0b087602d6cac238d92a43a891cd4874a185db5a4a043c9540bcffa866531c39b1d6a3628fe699342607419f9a0ca1c22cd87585aa4c78547bf0e2c2109e8b87175ccd019f046e495945606801e13fc5aa29393887d0f369c8c43bed79b148cec2075d5072a8b3e0e940fa9277ef54e7afd4b0d38126302dcd9345bb103fe6694862deefb9380c836c96aa9f5a8b93b0b48756f714b0b148e10aaa9b529ee6ff010bcc3fc156dab949b2eaff384a6ea94eada603c104e923a986d50edf62bcf8824e9fb1297990eb173226227fb06839d4b4289a04976a569d945f96150ffade42c7d3f45024d1a13b7106b9bf31f30aed37591a5dec974a13bfa4c1821b0318d8e41369e3cd1f744d1be7157553b1750ea3a2253b790286d2653f01a4f87850ab4fa89242e6dcccc27f41d610aa0600af85ae1b3bd12e852021a8e6fc3cccee30473dfe0c069c131237c17c3f9963465659e78ccd699ddda3715cd2066c737a1e873e1d8db0c00fd2b1d06850967bbe899cb8fa6eb6b2e8c2d0d56331fc0e5cbc7c13716659faeb7a99e92ad24591c1bfdaccd4ae5d104f04cc9d0b3d5fe03e9082688a2486af6e804c8644531b68086f708dbbfaa13878ffd13e4a572cab783156a7c826ab5fe17a463245417c40eb2f0a6600d2479def0a6b13a13dd6c29225555bcc0b5c8eeccf1377ae3c0ccef26514f053d394b329cb16c7904fe2c834d30aef0640feaef90530b0cf913154a6a80cb7256d3d0aa19840c4981bd51ea8d0e3fc074626529e932a8859ef8e94807e7e24e60d9516ff1895954910225886957ced2fa957fc362f6d78bda578e1184ec5c42643316a8ab261b3f3cb5ee85697324d1fd9081e580075ec6b6184dcc69f900f568c9677ed0c519b58abef50915cb0963863bb3b9cdcd05e039246ea13f75971077838c19e7cd1c5c8405823bf6c545309c7e5c64d0b1967e6c6139b98cc8e93a9649cca078a6ecdc3173dd4393ca9fe14741c5111119d74b55b8f63cdb59be1ccf03713c0cb751de9aee4d4a7443e01e8f6c37e6196e92ecfe11ec52b192de5d2999c1142a6a130ac55f1b782296d08e7de7f80b6f198d0c6f55642198da11a6adf305515a26f907bcaf90f4242d37da189a50a99b809151af6aa6d417991e9f61f9841a2454cc7e87c4f2e7026eddaa696d89e8260d6563c53afa91b738ceef4f948898115a54162c88897845c38aa47649eaef9727d3ebbcaca880fe1de93f7faa57f2a8a15978b5e29fd0749305734914bae77635a19199a7f7cb76b13736f7243a517191a34b29b97a16174517bdeab842f74ca198fc66153197a75c7f7dc1eb79ddf592f93891f76373b743882b5f1bca489fd280d52bdd9c0f18878bbbe5e65cbdbb0d25e7f483a20fdbf42064b2279902fa3021c3eee780585198219969fc2b1a4c68edff5a457f110bc0a611ebc2f94ce223426fb91b279ddaf90abf57172d1b2e0d1a29cc2542a1cf0fe4d910d6304ee113ad809361d8043c100ed4b61eabe9eb62740c500b32e9b049a0652b4a87317e68289f85a1dab5fe47f4818ff8edab0bd1c251f1df980e35d6a35c4306461d428a7c7495c376d9a805866de98f3b8a14c1ce9fb489bc3be71fb56761f2b539b3e271a6cdaff498c2b18a40cccaddae909a5e9fa3f1e6964c8a9d2e8cf61cae5bd6cede354d9c19d5b5c9a441911a3e06c33bf8c5005e47ee802558ccfac2a3c2cf5dc3d486b58568780b3f4ecc3c63ffa62d53229c6b77556a138e29e6f0416e36e4feb2408903046217b9fe63894402aafb58c3ae574e07ae3077aca2eeb0e9712c36d7645ebc30dbb7bb563f4a0a97376faeaf1f68f38eb644bc5c160417bbeafd144cdb7dd8744bb1ed6046c6dc46b54ffeeed5e78f72e81704422b7a9e6a071e40188b2e7e581acef6236147e3988c64ef89ba1c4939ae70f864c7976f80325961435eb9d665b0d67fa77913461425762a87b54e4a6d6f193fccd3a4af85d2741fd63b65092276912ff574732e43e64d56f0adc6b99592d8828238e989ff4e3824d8097b3f18d2c7af143cafc3ab38b01ccd8ccdbf3a8176698cdcae2378106d1551b2439fcd2d3fa60cb70f2cd68468242539a984e3a3bb9bf4a93ba5777fdb9d491d0552cbf0c2bde6cfdb924c303e15009ca22f18606ec1c286d73885034962c93209809a81189ca96b5a1c93a6f798669d02e962205982fc5acc042904810cd8d9964fc04a09ea5d72d5f3354c5e5460240fd9474b4287ac0f6030ebea49447ffaf6eac7b15d4f0ace943eba8c3af2f51913285149f278d98cdce4531e6ab2c57d6f773720db75b966df26a8cd52192e6454fd088331fc8cb9884aea06acfdb24a4a1f96fe4c017222fed389766f7211ed1b81f35fc6bbcc7eab87370bd6cd4e4acf096eb3789e3bea386ce4f159a4a99dafdb9a467b5ea1c38ec6c295b2cca263455e46a727f21ea6d71a42a5d858fb5a5a3485a1168d13707a2d140d06a0b57ef645a74221a5223e21042afab436110d62b43dd660ef2b6db5e4b4d99bf18f8428e718ec2d604f9a5f532458b4e5f29f1082494f212df0a287142a633968395b246b210d15cbaea3d82eb827a20ea6f6acc7317221ee6bf83ae5ff12a7acbaed32fa4a0d9f8d463fd6be6fcf445836fc7eaa7ea927dba255157eba4daf661a2099bc1c54944e20579f2ad0b8626ca997cd54b75bfd9c9fa35f08e37e173e62dea3d81e4abbb842d47c9b644bc6f107b1e3ed64ef69d86ac861aa030ca8db990e9677d957de71b69cb539b1ee37905831069c0dcf343709ae638da15f2ae6c798bbc0d3e4c3218499922b410a7cf1a5ff7f893b622663863bacd845df6506f4635adc96573371b2b15b9a9c085ebbf50396dd75100601e85986b477f421e42959bbf2aa1af6084ace57ad484ea597512592c044419ebc38ef3749c00625286e61252b9593d49053d7cf8dcf46192cc04dbd592f5db4397de408bea77d3a79c963e2afe12c95aed6b40b61b95781234a635dd1becc1123bf22413cb5c1287f444838a5154c000cda4d53528ce8a723f74fbb4f79f77d2007902aea703ab7e3e6f67035ba5adf52678aef88d26351d5d0f91ffce944bfd85c160bf16250ae4db756d18957c0f8288553262a122f48e0dc49d000951ca1f5c69c2b78136cd764c050a5c674e513343d904261d5b454ee2428188205e8e91c4d0ad3a80af4f8d108cd32179a31fa2196298954a25a3ca4ae7c3daac20e60f7fa484ba9cf52da3c97b3c2a24f0c74959906442c0189caac842f88a153f8ce2ed43fdba2eaec454b76ec9b8f1ede48384d0fba107aa9c4aeae27418f400cfb69e3d5cbbbe42c01a9ac5e05078c0f3fb4ba2d35299622f351324eb09c12b4ae4f30f3621e4379d5fc41f34a32230721aee846fb9edc5c1f3e1a8a1dee5057b188c282e9f0923a8aed3e91b1376a2fb6d1e0435598d5c0101d6ec5cfb0825ccabda268a85c56d9e823aa22813ee9edc5c2a90d8b3f07b48d9534e60f08312dc296d68fe78719bdb7478d8d037129aa182c4b8ae5bafca1604e76d5251ee43160ba68ddee9c624ebf00f0ba7ff6b1cf75b5cfa4ab323cf04ff13b7a591b23d06ed25f3c04c1baf4c8f7da913cf509c2a5053c4224ce4d0723268cbdf2277672b285c493731ea81799d353fa8497baed70c59a4c99b7b950a39470863a69667ff67c9ec981ddb41ffb3d63dd9d034bb79d9df1a95214083199e4efbd770a7a5f005ef5c877236674b6dd1322d0624487f6344a43970ec014cbbd114af2313b7b98d4d2779d1b477e925a6ab165dc2ec74133ac01b0cd6b6003c8df15f3072f3988863cbe3aeadea6575d7072a49890de474120cbe478907d07ad6006c2b4e002971b3b8597bbb352cc8d2e4ed5bff234d007ad897d38b8d39f139c06a65fd63f8c3cd7b4fdb44febba93ab2b3f78dc31a42d5b23c1346aca95a29cfbe931975630901934b2fd39dae916f0f32becd73d8a5a3282f9952ecab00367cfd151adb14bc008ebfebff98621bf038ce1436ac04b363b8c6c828c3bb7de0568a7e7a0b6a573acc22b2218562a36eee0a9a41e22af6a7d2a64240d8573da7fb0b21df6cf05520ea1804d1db4cb22b9d5cb377acb7e9e004527a23810aca0dc8d3c1939633404357144699007ce2b6a558e2606238079cdc3fe25964429d824e98b03f0d9fb322918c09dfab6f9fa0b473c964a937da4eb8e31d5ad8ab42960abe804a49b2084f3803c12e22b1537a3921bb1cf813cc7628c08d90848133b97bb9b44dc106ba19a8fffefd0cde98a3b20749f1c5686893ba7cb5a2ce70fb7d101ecea20a0a632262f535d4c043f99dad88e88b97b23927dc5c17fa3d070451664231ef8b397dea0477e84df38dd0f88a2b3932f56db8b30d03371f46afe8c6fcf870aedb1084e0fbfc98b10d18c924d6629e80551761c5daf6957a71c8135e32761d38603bf2a7b7f7c9b683714ca320c39b0c3d3bbec0b4aab5a4450c0e77b55f9a44c0f8419ed6edfdb6ed33d613e7d2b13f24373a4428941a2546d844b3e4197a3c63e21c36b763a74aa0bcffc7a9f4738190b66eb0a5472565fdb950934d383f87cf85cd1007ed48da4489146ec5bd548c0925c6a6c93889feb01bbc865f404ccf6a6ffebb16ff64fe5f34ce49e9a1c6a6f401dc96f2ec9a48249be30da8a6447bdaed0b8882fe8e2f472c881984265c7af7d70af1c0d7e8eab1a65ea9a7ee990587a98e18ca7f26d592fcdc3e03cf88607b11fc47919ee84efdc799eadb9dcd04f701e0dc5bf5c189d90235280711dd10044f0b1913863afd4f8c3f31c22852e2bfa2ce53c606d0d47ff91d780c81ccd209fac1e69532336e4d40892eea02bd3727f8811f8706e71dfe3e1fae6283ca4f2281bb20b537742a7d913232b1d17e6af67fb3801d8a76feda4d962bc7bc67efb4804167e1ea7fba46fab4ddb80929067194d026081602cfaaa42b80aa80282c56730f2ca9efb8863ff97b807b1e2f924ff46191c52e1d38d5ce3a3d69738d9d7ee68edf8b9bb126cefa00db7974f486d80ae223d32718a2f2486cc2a30b0aab94372af0e592ec048a98ef4f11c23a6cb044cc8cc0b5a796769f1da0d5bb11ef4d016e117659dbb7e932914bf27a43ac5f3e9b0d0c4e2cabd94ed768800855d0ffc1e2b18c5502a9617381628a11c2de3b64d85514552a2b90b4248a107728e922e50341b618f36189c85a13570d1a6adb340ed5876f22ce437b8f76258c1da05d076a52721a2078d8ad65eec7d0cceac538a90eb3f098dc580172cd3dbba68f149562545edd0c47d48f4f557b014cc67fef2181588e1f0e54f268efb79a461de01b95d7cad63966e40a70d7ef133c9661d422adb39c07bca0aaec6e218c9ec526066f4d449a1a4ead9b64e6729afed32164071473aef56fe1b777b90a16f32d7ce279355a9d317787beb621c3ed15f5253b5926073b6aa09e849560efddf5af4b3c2e208b54016a18e0ceea51ae1484e3a68382ecc5c9f71dbecff6312618d32770088f45632caeb7ae29d08a327cfaf352309ba2e2b5cc05a271d97ca3cf31782a92e2172ef5ae0a835144fc3ea1dfcabacad0b7f690a7dcfc458b30cbab32d3c857b98f2c0ef087ecdfe82617459bd04cccd29a95fd031a1895abdbf21f6fc0e5b1860bfedb1ea657101a7650bac7ba74b111d9255d763383fc8c0cdbae30b5ef5ac81bfbec70ec6ebc5c8b6f83ebcfef120ee2492469bfcae4dc11dcda3e29519e004dc7b5afc0701f3ec3e83360b7086a3a445604662559d8fca97a25d091c905cf0fd6b913d927c331ce4f3bded65d14148df05ff3eabd536e223803a095922c74d0ad79558cd232c5f9092faec459ba3e1d9ca98ba661feb12a9b16268b696ca24ea078dd522c087bd2aa6168f79ac70771bf73a5bee415661117bfcb19ab60c7c8743a23df819eb3e9b78385e67cc51138dd40cabab031ed7432730696d48365dc8d3fc16b6f801ebc95089e278c3eebb17a93731062feb7c28fc281a9615efcf95fe +MD = 387d2344681f8f771478b370b7c059a3ebee4c75ee2a7e0cfc26ef310c825202 + +Len = 110688 +Msg = 5dd529a4bd07d70a7a3f1dac74f073b67ab8cadeb23815e23b220832109320e930a4e302fc3c69c9e0281b8f356dbba266dca57d52e8543bf2b527523c71657d47e780faaf5196f63b6e3d46bdd580573a8925684bcd32f6c33aaf78920eac4deac786f3a0f16779d43c0c37d4d1cbbc3ee6d4086590b7fcf6d9260edc13fc41606c7f5595c2e23af3b80fcb4209a3b9ba1c39c568d9eb33d3bc167be0275e41f3fdf287576c1122e00ace6ace241036f552dc081b4fd784a208062767f3d935e9a268f3ae98fc17e25bd17d42cb1a1b38b14637479b82d7aae87f7a381f75058b85680061eeaa0242d3a16a64a5ca50cb61febcb465f415348208dc1d523a9a21cb7a163a1523cc4999c59bfd5b27bef6898cfd2a54362488fe29b5dc3431daf39f269dffb66f5b3cd6c576d494394b0152796471104feeee856a6d3e6e61ae4827f5fd7978979966b12a65b3f909e033e34c575042475aae3f546c0ba8d3fe6a8b6e9f7004a26d0e537acf60319e66d5658d409192274f0f536e1a0b898db39ff41ae9ac0198be7be3401ca4e501c32fffc586faa7f6b75ae940e005ba99b3308a7f44f4188176f68a01b347bd38e189da7b91542abc79d82b5324c3e3ffe86574271911f1667cc77047fe11604da62b1d37c966c2817dce3f2e4f0babc53985db9acecc334eb836bc9964ca7747fc5cf18196fa184eab874d5acaa6baf58ddae65ecdeb8642128b97804d39a92fca667ee260d6d32aeb4a7e5dfc5cb996ceaabefd7c369449720d288321279f0cf88febe18fc39c1e255ef9c14cf450b1e33e8aff4577026bc005982a495c01e66d2061078b891b31410ce70d2438264db4de73ea8f747bb0e4bb0efd2ba076c6136007dabcf0f76b279c70caebeee47229d1a148c1f6a521c677b38530bba6b3d19906e48bc0d9d4bf56bb7f08df31282a613ba045c528c54f81ae49c0743ab58f1185ad5ec06875f281f1b4e5d3b6789fd4697b82a9ada5652028d14494dad43512adbb9eb94d55a66739f2e9921b6970735560e06adcc7f19e49a622e42d19ace2a598b4742f7cc44ebcbf7ce30704858624d7c7cf5c35dc41384fc429dc8bdac996cc06b6b7f3357fa2a6068f2250c65501689fa2d6f70c521e54902e8e32a811a8ddfe4a8dc1df42122cef5f15551c27129cd0a9f1136b18223ef0baec17fe00025503f758eeacdf34dba018881b6d467ffac2ad5693e0dd6d944b949e41c5e0cdbc7c84c083839d313a7f8522aba3f8710bde75ac7e52e726de09854bb8e3f73098d3ba6f874bc531d1f56d8c0ca48610558acb9cddab8076a591559b85428e54736f610a02ee9f5b296b976e465a3883622f75ceb7d2ee856f4dcc38afc8ec61d4b8413cfd5373d8c947cc6e62ab55f3ba363ce914af797ac7a4b1c73e5f5b7e441621aa7e6289d039f2d43767812787e305e896fd2a6b7e32fecef33bee21d34af1caff9003286a02d5776f5dc3f4686706417c782b0ab83ac3e961ad5d87896eb105e1381e9aceab577dbf4c5905bdcea00e44909aa051665ccbbc9c94d5c838be98f9809b2525bcdfadce3d2aa2af9e3a19954a5f73703e2f3caa117a53b731814bee6f621297bed7d04537201266613e2818b062cb3e4ba504d312f9497fe060e8680d5ca94b38a6aecb43229f099e130474c98cf2e31427eae1aaf8fe47cdc43511636f316ab2b40f0968198fc0de2175529dc32f86221bb779de60bb388116fc8e7884f41bb469bba6aeeb2bb5a8d0435a35f0c94ffbea3345b817c87a83bc038a55843887c72d794b1d81bb0d8488353398fc096729fd26ed3f066d345b2013ab005546d5726813a0bec387f3fab11486cecd37f634bb58197b15f28f92a8f39983e1662e3e824f4c9899d68d93b3a8fae04d9b23a28b9170752d9eb2afbe6dfde60edfbab2e3f6f8b3ecf203d6f6b938d5627c17fdd7989a3434bac53ac9477f2fc6fba056f3d04b18a2217e4ce30fe7b5f624facc063640c0148ef2bc314ac668f00009b21ba4eecea5ac267be071b089f0d9f39880330a22b3625fbc5d3e7b9874371c4fc13c88dddbdb22ed56a93b5838e42ae8ac579f61fb7e34c2b7eb45c83ae802b44f5ec24e2ef59b2aae7d2f2ab68dc844f469a885d2299a56a618cdff295be2692bd344288544b8b84eb63507521bf534bf33cc9722adb901928fbb452bd7e5f7bf62b573c70ea221a01cf4f8f4d8d841767bb49ed250b84ae316b6a227a633e571d5be38de9c80ed0a761504840a9af27f0a07a2ca5bbfba0276661f060ef3bbabf3067eb1367ba2f68e3f34eafa62d043a86eacf216f8d7557774c3ae584e02d483364d2823bbcacb2a1b8f0ef059622a1c91c232c8892c45e0889708cb6b41534ef5ad2bad67ecf113501dd833a7309d3017ef72ba9a3e3b7b49a1fcb17300921ceca7a21aa791d01187e6310d73c202aaa9389a3554979d0e60eb73508dc7f8b4c24275b3a540d0eb68f3ffc4e5a1c253eea7927fdebed462747d53f2e21fede020878dc08681596b9a4b2ca1275446f38f4342e0613b493f2e5d86dd998fd966ae7cd08975dcd357c6f69eec5e63f552331492a20597636c3695f259dba0250f132b275598daa67893fd3fedb557363783236b0cf15989b3332d81b0d0d837a3f89c7a6e17023a96aa67f5ec52b6736c2677b3654e0925dace2b1a289fc278ea04d6b21a1bddf779b23caa305d0b13b7c51854f6432f9eaaae99a40b71e350ace0e1b5a2ccf146e854844502ffdb7ee1080f3407f9545ceb7b7e099f6dc528b033c56d4e51c98dac3848aeaa5fb01bb296633ddf98ffc765dfe3302dbcef66bfa68ac165d3ea358d0590cd70a71154f1181c55c847b947df80cf01fc85e974a1e139983179dea75364628a9bfc879068354366082e094423064a6456f13cb81e8bdadcf86c2c4ac6fcc8cd75889938dd96df57e8767726f71a5d4181286f9cfd4c737403d35c85ae76c97e4473cfb219e3f810b0478b5524640e80c6510a8608ce0e489ad7f6c2d2796d8551e5b167e4c39779a8c8ce39728b67096d9495e005b6b24004a08368fbaebdcae405c8bf05dec27a1822c73aa83870c4be1a9911bdaf68448b558bdff1bcc03545fb9b2346dd84fb477cffc19012309a010b9e81f85f373c751e948e7c4d7fafbbf0b2f96d68e2e47efffc34f0c2af717d8f2a987e6e27100b2428df6406001e8f0c96aa4326e61d05d348fd91eff5337bccc7be168540a8958fce3970914d6c0a76ce9f90c0978e241f6b823b420bc643edfc5b8a4c8bec5b870f046a966e7f7157e23f1cddfd20230beb2db562f8141d1851d7a06a0fc5a43371a918bc69410fd65bf1ae2621b949c15265c9f9c40351764f9a2188d419babb7e8e42ac48982b1cc01f10430a42df6627913dac787d262e7d0cd44de3d2e348be1cb20e136e0c50993008dbc0a42d25f31bda251a69e5686496836243d66802b8bb2f89d0aafb9b6f8c5f964cc57b243d6a680cb5aed74e8a9ef46efc0f9110f4d480c589344025c89bdd1eb58f118b8de6af084e364105798ef01a1763a59afacd6e6b45f423152fc4491803e936836bf776c2efe86eb8b9cc3f0e9bbceeca5310c1230dd2ec9329726c2f3fba3434600587e29faca58dd0c2a9f19001b2c686034194e8b6e2c9400a0f0970ec51c5f378a80f676a2dac48d6f66bff1a3ab61b10b567de884eddfbf5f84e9e66d65eadb8a2f14d0a4f3ea972ed26efeecec39a9ee743f73078f7e29bf0a7d1100b29152d3d315c75536b79fd58c76867b5158c149dd13c96a8407e64bebc12d2374bb34040779991815a42dffdf9726c39d379dca0b9b4a226df56b92c346894a3ef0f57756a0e4720348b7fa46216e6a025e75db8a2673d39fdf30000b7dc3e983bb2dca2b3c2807a20dd4717aa5bbb333460ffac345e4d2bc2dba303ef75b85c57233590fabd22d547bf9e1d7a4ad43a286b2a4618a0bb42559808fd813bea376ceacc07e608167ad1b9ec7d7ae919fd2991464cf63570c7dfb299b61836bd73a29007cf1faa45b1e5539a00514272c35d58bb877526530187afbcf55a6f1757209c50af4eab96c2ab160e6ea75dc8d6ef4bf2bf3e7a4b3a7619db84efede22a0f960e701b14f0f44c89b18f2640017c05ef51bcf93942b8d3775d2980b804359606a8da2dec3d90f035eb2a74f507fec8ce41454d6c1fc5c752aaadb5d967c0de7588b52d3b64debea025093984c0a45f6f2b24e21acaa77a312ad73557f1120f6b15c9c2094d26df54c5f21ef316b5f25a751f614b2aa6139c4571a93a8c75506eb7de955fe0b07bd935aeca4cf07bab1889ff7207290cbb1b6341b88b1f2fc908d6bb4d4405c3b9b5db05e797353cb030cd8bbc57ae1f9937ec110b519189a3c0da2993c1a4a9c17221be1adacf41292aab8de842a229d67748a74994cccb061e2cf00fdda5a8bc976ea30d1fa5d23f8f8acb9dd1eb709964dfcb1b5cb73d19ab32d868a0f009d2ad297a686d9f3619e5d10f840b723d0b84194729b23a2705ee55a947126d142a3bbc0cd2cda5b7e1b7ea1f45f81fd753625fe21a9d3dd0f170fd2a533c0510edc98e21f4459f9bbc8a3cc387a0db889b8317639726a88106b7932435259e4742e0078176e0752bd4e82fc5f20c8c960871ab93475463826c4d7d5f94d521ff52078ff3ffa310af51582bec2f431b4ac4b3813ad32f571b4aba25a31955778144c68e403798566f5b6398ffe64d71ecf7d10320e2bf6a94c884f1b86cac861541a56c30c8c630b2188fdec7be3374c4c853970c1d0d853410354b6534e23802712d918b573586c2b367650c60fc0e1960c2a7c72b20914447549a7319007492fbe566198fee41e55270969574b02635e7a69a1ab600740c986a46abc50d210b085551a215f847641e34d72ca158a45e8485d8ca63b618d429feb7d2dd1129b6bf06bbed945b82873e3a91978ffa6fdd5fe9c9a2dc4963e4229854b30c1573db497f0dc3b220d995da0a2d9fe7a171faa159d569c9c13f83acc18715f81fe7c2cd48adec174e33d81c2d110c515291fc725e64e6d12793fbefffb8bf493a6db274ea05306ced7a962a2aa7a67417b72df97fdee29d82479212dd4d7aa86bedf566ec7b57590695182c895635f9f7cbd35f44ab25d5da42913de0af0ebdbc4fd1cad67928859f6ca64bd3858087fbb637cb35337720376e409a9246432f347b8fc831666c99c3e787ae8f9e50c7295ea166dbdea026a2b2e64e7a7ae1a6db5a768a84aaeb3c77ee057f45086d618bac5858bd15679022f6cc8420b4afccbad2d03557ad6d17c56966e37d2b9ffc2988a6c8633e9606c0223b620d5a7646d8cce3f433d6bad2b440f304c06fae4009dbd1de56c3f32f831f7910c8d6febf3e31f9ed9e8f99144c5bf40a953c61d7358b22c41d0a47b473d3ceb7d98e0fddf2e758482240d48596a2b11d85fa8166b582e19f407d593c9827847fc9ec7148fed8482e474f31ce99fe71631711d6988fa6569a4882f370fb03e28f1f56eba969ea13c7942579975e557e07d3e92812cde1c9dabc83dbf8a3502f10633647a83c07003a912a7387eb911e2f41ea3f7f771a818a24e7da7b98f4b4291ef34bec7e1656b0c6c6e9474a989a04ea7de3859339c7d00916b8a2e3d9b903d7f5c01e37ff5e50bc62a17f83543aad5508dbcc2b25e3d4f1783d148be585c516a46de570aa6043fa6465d69cab45520af5f0fd46c81dbf677531799802629863681cea30ffa3b00836fbf49f87051d92aaeac0ed09bcb9f0755b7b131796a447a993d57fe671c06f3e2b8293cfc034749191bc27d00ae916e084c0030c6a1049cf9b4d6547109ab6e6bf28816bbfbf3810ac9afc054d78601e74f070c92605f242fcfaeb0ac96865957d8d70424ae7679105017491ce8e5697f3b4623512aac86a7e851817e44f05b22f5a683ea8d3887b629a985ad55181b3c9b4e23a762855b0e996f556a9791da79b36724623ad23368c0d6f49aaec68dbbd97f7bf99a6217a04d488af600e35db8aca9443019ac02a4b010146948594759905aaadc44db23198e8db0b5035d5b6c3bed81b8bc4e8bf661f573adc458beb23a802ea3f45923e6d79f650c21786a010b946b70953225da70e780bcb53d7a32425075f52b549074b30df68fedccf013763e5ffc36ff76cd4766ca3a7d8ff076327c1f445c55df6fab5a0394cab39410165bddb003eee54b6013ce8b8fb8c7daa5439925f9f587241af41adf4ac4bc83667d6340aeb8f7d1555efc448e5056fbf54761fe968c2e2eac7c8ab3d098dff9e1039f0279c624fb91a8d1e9dbdf2446bd080842b4b21b0bba43f1a71e7874c0009edf9a07af03369f91fdd00acdc64767060aa6d6eff437defade4d671c21826f9fa35bdacc08fef99acebb9da4a37a8db1d78f7f9e303f74f1bf0b4ccc5ccd689698ec55a5acc11a43c2f106ec425c9babfd510155658f36d9026552318ced96141eb02ae475398bfd8914d90d296a0b44fab02eadfaa37f0146e009c4488f7288a33bace0e8b4b9486f9b76afdf2f672d3e1139f06618d81afb0fc5fd060f7874c5036e237dbf4cb504f9721cca1939b565f8c5c53e5bbc86ad4929544c0a3259029be134bad590c3e7b35e0c80b3fd8dd0db54b4f9f896c4cc20a66290fc1ab5da69988d16844fe5766d9cd7798c2d172d3d59181f5c1165e63acf905b51ac0bcaf116b51737b49a3f6cb1063b1e32d1c9935597150296da79dbf77631a760db42c6ce15338c6962a1452d214bc6b95e4471ec9a8198b1a2f598d07c8a69d394d05f314601eef8df5a9b83b112323b0d0c5d609adb6adc4fe805cd2bec156ed8f23ee2cff8dbcd50b9b4372e24cd027ebfba542089157141df87500ccd36ad1836ca550b9edf71774d43ca00fa13da13ad1d59c421053b193ab20b87b44a28c30c95fa915a766fa393aebec208831c7c730ad3ee29d6845687fa522517cc4c79f22665f9b21d22761b7977f9e6b734199fe7451709f5d75a45e4b67d8e39829d6600099d3c40245f432898011b1ccb6b82573fc757efbeb502f5baf98e1e85bdf69767f46f8c0fdfb920a18ffc204ce2d8bf26878a10a4f74da1d2118df7a04c227103b7b26d2f77cc1606ff206e332ff1a38bc017252481646d9e6e04317cd858115f2fab401da82a6d3ac71e5318a36b88f2198589a7f405dd7257877875e325ecfcf4c0c154e1229adf805c7b57ddb4f3dbfc6bbac9cf9065e0769e1925ed0a884f7f894d6fd3632347a341438b4f4c68bbd12034e464a29b8b439eb007668467d9586b60c8cf5a9b25b893482d78c05c1440599492539af2b5373fc984d012002cf7fd97ea658766dc2898f5b8da8f4277b25e364e2d17e000d9c7b238ca31e5acd6a64f5f16582aed8be8d8b7e527b058bfd4a6925177f7f093ed26ada5628cfb8cfc1391526b3bcc4af97d9539182a29b12371e95159aef70e06832e02326a7b8365712bba3f2e1afe4130eb46ef147d4ee104ddbd2b89a690ba5464511002bf4288e488be32863c1e66bf248efb03c5e183ebc9f56bfc61d46f16db2299ea3952ccea22cee3b8b213c054db81fa7c960182a3488aa99bcb319b46ecf72e857c2cb7fe947cc15a1f86e4be7ab03bf3602773b7c3ed52cc4540c561243f4c78ea48c09e583869ced6d05a388caa5deca6ebcd85e6adf622528a83f21b7b7219263f7d55e8922bab6a98877f7bd0cedcec96f6ba0b4d121295674d863d2c4e0a92694491c00ab5646d47f2efd2b40d58a3e185b0bc3b2531607f9879f3d22ea1c15eccee6912657e315723062bd4a7c46f2401067408adf3562bdb59f9fd929335a86cd86e49da7d694eae5ee1a31cc4a106ef27cd261adce904acb29a1f283351aeaacc2a0172d677a6fb568eafdacddbe2b69112240a529b8282f06eb74e26c80a1d5636d9dd1ddef87089ad7b6034924feddf0d72eaf8d03dd4bfe24672d1eb132ae31f5367b821abc464a8765bbd46c6fb6df9a34b34499f386d8f4d34c94d825a1f3ddea139c2495d741a212bbc7bb065ca713599994a1f2475e05c126161b031473d0c18174349a2347d1c3eb6a3c4c3710e9a549c64360f856fc38a5eba253717774c4ad5273549324bc82330414c8afe1c520ab21a9c700898441b05d969d1fc871fa807d094a8d9f0a567bdf6e032de44ed3a8eff8aec7bf43e32fb21f6a862e706ce03f1d047a816348ab41708317df2dc526765b9eb5bfe1260b3364400e701920b6ded70bc392715eab7342d2d79b09fe0e00f81e325307122a288eaa1f581320eba360e6ce9ad9a263bd0d78d3e08b8749d3f7b6a6415db075d9c42d21ac077465d6e01d0561461cbc66f9fb75755b67be3781ee79528a07d48d2f537c359c220ebf7e39cfae5ed39cb82de5242420a65476be4f134e371f308ef7a398bb7b34cda663c1934bc9cfedf9d2bd47b3824df5d7d560dcfd0b016f2243a5de064bb189d2b73dbbfe301895720f0c48eb2b6388a1eea93d27afb47b923be2b4ddb5a22c8ca136ae903bb77e6b0d598e94c0f0f41d33b39c93ca403a2609e18309610e9d1c4933d4c991b38e2bf32c8176ecfd2393ca05620a05ae9625d22ab453f6fdc4cad8bc9570db14affcea0d89585590fc4adb28f854080576d9c146ad801d7889de7659594fc0e2c8241a850e04a3b4678c8fa2c4397a4dc188fbbcd85b7d85d49f4a93882ce926c0ecaa1b78407f6e4c9f0dfd3081038f617bab149cabbf2f8d567df18ad0fde8819cc3582fd591c893cc7ec0a3f34cd23dfaf7d760378a7b9c4b36fcc703a52ef27c8cc39b8b80c9255b0a748558fd1e3d4c078c8ec88773e9c69e3aa88c8902fbd42ee42529f479e894d8a03d78be7b49bb04bb8d265d1e5d0fdd359335506b84ebd043337997e1c5bf11cc351b35f2498d16edc519b584de6d1a75f1c4a372750a9b692f410e08a423dc81d4090d8a250b64a89e6937ae552a7e802b02291db679b7dd7f4a04f76e0962458209ec4cc57d177780dd8aa3ab8c30e0a7b78b7630804b278d5c1fb409b9cba3a7e57b3e122b56dfd33f576bc6dc581dcfab7085c9677fd0bf3f07495f7b3e20ab63616af25c4a6aff55450f906120bd0aa581516a757c5f7fba65bd5797e346f74c46d84e5a1b9f6ce8fd96f065ae4abf6f66e2fcf36a5c3496e119d854e39cf167d48f0f6bf00682bf2608cd2e2a4c58cfc6406529714f459b2264ccfc66aa027eb1971bd8f128aaa4696e1105bd493c8e49748f5fb7c11c91d1a61ad593f9925785f85ce9488c4a5d6ecfa3328fcbd374988560dd673a204095e8aa2893100abcf9bab9e51abbccb3dc336bfdc75985485b7bc2eaa740b9701731643c8e77d073b4e61916923b966e5ca251ae8d7cbad4395e9cd09f5d4fe8ff89305babb74e445f8466c2d596125695253d8c0bbadadedb37d5d579184a71f4f8f6cb1257ebf9a29a87320e53a63230c317e0669e4d2fe90d57425af913d39e879ed5ecdf0e58243264ae63fbbcccd485c7f2c9ad7b8f0ae9095f6c8910d6a63d10c161d8212b8e53e57dfc15bbea2a71350a5a71cdc5e6d2d373d74faa41b42334d798c98b388706f2e902290b55d9924a704171a99b26d09dc8c3d449de6f3ff25fba3ab448b85273389dc014d58aedec6ba73578d772eb4fa4579e5673809b33a0eeb30422c93f50b3f4613d32e58c0445b446a342712cd250bb3737c98e3fdde35dbde39061d571a23094f03391767b448f2b90a4cc9a0c14182756a84231da702edfb958281dbe4d78e195a137b337b1616ca9c52b3ee63796f41ad8447b108f8aa2ee43c81e20fbf5d192447e4c22d45192556c341e48035c28ea203b256988998dea19e6e07df6cfeb50e40f4823f48824fb6392441bbe934a3049d035cca2822815a22d6cbf842db7374991af215a2daa0570ebb845b162e3531caab520266efbd8a542c9ccee37beb03aad89064f69acda5ce880b024f27abb5e72ac4f5c848f99ecd0ff8e7c178721810bdfb91964b3e2ee30a6425e6a97d0dacf23408ced6bc13d7d17eb75f29bf3e452b82200454685f06c32e5a9f3c3f9576a21dbfed017b961f118cd23f3808f2c2b1d294e35ee2b28432a804bb584a19ceaae08fa561ce820d50a1bcc3fc05b213d15b6495b323c605e98fb8dd7652d72f8d2afc7a701b541d1f6bdb901e3c18a31a8b13be09a205e64833eb782eb06a13c96b8aeea4e8a8e8ce39a325f6f2830aede026aebae3febfef43011dda094f15d010bf7488ccecdafd99c7e81eef8dc5dc0911fa5f702ced4f2bbe3110b3f2a041c91eae842e8c7e1e0aae790e79854e55546a135fccfd18d85c67445b47013d8ee30cef3f84244cb01acb3b4e37260f0a60a3ac4450fbad1b53a0da2248d75827fd1ed9036430c15438b2b1469edca23b9c3307a5b2b524a8bfdf650e20018a9d75d8de88553e666af2d97d901715928985bcc7ec589619e0ef87776762fc4f6ffbaf7226cda9b664b7b3f2a3366d4a74bb856f90b93af754713d83c69844110fed273677440f4be215d6a3088350447d8c41612b6b003783c3760cb426556a1dc8b48df23eeb61639bc62138744b1b1496553f24d47264ef74a584b893ccd4ea1cfc0b1044aac15997e6dfab9fca28da68557c058c2e1a0803508e4c7706cc1568521069cbd9d644b8dd40da4c5a182f50b68a56088fa16dde1b8bc8269fca20395b40575b050ab57cfdf76d208743840dfcfc9ec0139571835b0fe458f4498aee6c1d716898e91c32ed55acb2be4588ee9d4538495680c391837d0954a0e4c616290a307b21fbe999100e41598b98ae811be6cb0ac4ddc4674975afc02206623f06892d191cbdbe1dfa6393ab5bb75553fd73bf9aeb270493016c5011f438dfd7893ccfb905a90a1021084c2ecb2c2dd5b65e9e6035d6f4934fd392d093f69f5e357780d159384e3e186eb33a46518884db19d001316824f6894dd0628dca31617fdbe8f8a3f60ae644f9617449d205ffd0380cd47a75162b422da16e5e2e365fdccc70a5626cb0b73b5aef53622826953a3bad705d7838a00f158e5a618d0ec7d0ebb06e1106e00f6fe5b56e1bce5ae38d872a6b66dc1cf34477ef9d44713b28009c20993c5f098d573c4c1ad33f13792ebd0c0c332b23a386d74dcd83754bfec07029dd40cfbd8f85c12be024e4f0b4b24fdaf92eeffd2f4ab631618b03a1cab4ea6490caf34ca48016cd548d6a73249cb21fb8d684fa05048732dfe7a6dd0a326d496a3744575aba9fb8fe794a0b57628632a1b6a4baa358ecbabf15c96e3bed9b40a0124d6e10a9ee773474de39bb883ecc6a3ba9bfa89c3941858205d5ee2ae702f8e878e174e26570ad1cc18ecf923e4578f21e6983630f5fa9d8c6948f9ec2d8db364161e5d8a73daebd8e6b1205172634667d48a221d17db276963a9eadc16aad68415fe2112656dfe38f5f11555be7430540eda37d121425e7ef2899dc6501061b034c08105524b73b5eeb4c077f111b5b03c905b963cb8aa95bff1faf20647baae1b6b64ad65fab017790209ff33c33d4206b278b290c4737471e8e9a75ed54b467107b450c3041f263de4d834ab1030d3124a756e44ee21e4b177522e80447a42df9d583797f127a9e361155f8283f62b0b5f3a1281be1cad27a51dcf951cb1690c3338aa07472f6a1282a8c8dfa1f71297faafe66ebdcd977a7a32d2c5e35782a1d43cf03b90a12f734e79b7ebf49c505e22bc3234729a6a53fe797f3723d35645854c535c53e4c1aecd7074ce034bac09df493dfa65eced593adb1e14638fada1505019921960e86a077646af566df040393e50e91f2ce935353ef6832cf24e5c3c308b04697d6b4f057177b6766be2aa3983b32927c0278ef78c50ad0564031f51d4f1dbcba31406ce4b4d0deaab4bf0e600aee105126c0d89ab74ba764d92929824933ec73aa9376aea11d93a97f2ba499e89394288835af285aad10716c45c1809b856e6aaf38ae2380a45ef96a1af68438b5a658c331c3a003a1a41256126da69aa4baf5bbaa53d1b8276900f1e774dd8fd6cf68543fb6a066bbeabe33197e42eaf44abb6c633837dbf97a56c32bb004627967edb7ca1897e87e5ceb8fb58403e10696021dedabc450aceb614a5238773510184f5a6b39f4fd4b6300d8910f68315e35805cc42f15bab434c6f3f56ec49c3d5903d89dcb5639b5a5b48a1680ce305da1bcb56142aa7ea20eee5c8fd37afc4392a1aecc2d1a123f9d7d30c088c482a752fd945f86d100f8a25de07bf6e8c9e55dbf4980dfef1b6b92a1492977d99cadd1e996095c48161ab78c2c5459bca97522a345666413b9ac5de75fabee8be2e3a7071719436df29ab6ff9ca36c550f858a040ec75a46718437b5c0e24d49e9eb3abcb3e9ccb13b0b292ebde3bf506098ec38122e12e5e785c8733947249236170590e91568c053be76a01c9fc32d4111d1e5fc252e70602378c61554f5034c19a01a2306a809d15727ea1522084a25a2d36439272d848fefd114e1964efb904592cefe37fb0c4857c56344350f3582ae595935ce6080db3d59f62a858309b73d4615d743d2260d22d7b23623388deca6dc2b9e6597f3b6ae8bd05c9d41bc056342854a94ee05a45ac74d578724a1c82ee451bf97146bb6b5df39f4680b711f5a0093c4c57f29b2622c9b14cb442fb9990a7235cd66476fe5dc998e5030c7697418d7d23035e0abdb60321a8a27661597a6f37d931e1536b10c8586f0622d8863f3b7ff7f72e8e5191a98b52e3f03708d525c1362ac639f99d7747ab30021d08c19caa8fde6a112bda43591320b866efc851283c681a12f12d5ece632ab32f66ef3667b55e187a94ba5af2b301d4d5567c7cd4b394e5c59be706535d9b3df4e8f2941c2f1f42b1d25975befa2d4e6b84182d2d6355303a3ff4f640622ca956d5f23b33c6caef9d2dde1c25b04d2e12c3c5ed9b13540259257bb6fb3a85fe3c7716b51242072828ef71d78f9c087ab159ab43868d39630a95a5cfeead4d448d148788236b7df4395e3c2f6487073c2f8ff1b75697ab5b35d69ac87f832c8333f56d3fcc09d55bb9c464ab0c39f27b76adc0d173fa52f3c23181291883ccc41562ef5f77e3b7658e6714d4f07a70406dfb3f1a457ed73299ee827b2077d20e1ba235728bc2c91ba190723076122992fcc1971935eae221a255c745ff25e96a2dff6800706eb684da86a64907c8c6790b46ef56a9081ac6c6ad750f1c55b7df33bfb08f8daf24a82193d9a70c65effd82d3705a0a9e282beb40b762e1d1e475152b34a94c4dbc905ffd33d0ebb24b2749b041acc175b358fa54b3c4b5601934bb8b1dd5140f25437a0ddb4e0e7483fe49258cd534556453dc3291c000c9fe250e27929c4ebe07c95c0bfaa9db763e8a687a765bcd05e32677227adb2bd53a4ff446bc8460220c2beb3fb767bc7f25d48ff629c8f34fd7d9b56b969f9c4c76bb5632c317b303da7011f03b121856e0e3a7e2cda30df9e9727d570c93bcf6596f1d31ceddaf2919a0b568ad3156c416c09686897585ccc0fbb62c053ff39a8c752f8c055dbc5c72c4bfed364de0916f71462a86c5c290057b4a33a82caa02b6d5768b911f43638ce316c8feed1d8595009d16ec1b2c0d5ffb20b41ee147f48095d9759aabaa071105a4412c9975672d748591e2ff2b0a778220f78ee6343991bf3f94478a5b10a632509fe9da5001e2d6e5e590fa2751f418324321c4d799935a922ec143bc46f573022c5c361619592da4581f9388a87fc53ee2fe029adb2b6fb98c305e3770a6cfa22eae372f783d81ac33b753b6d8c0922c1a4f28e4c903059cf6bb633358614f19ee066504e634dbe4be7fc11aa95e86e43439bf1c29c32423b38adb18c4cdfa4db48d47fb2be6423440a0651ae202aa4f77e64eacc413d4360dc64e4d7d92d827c86a657d0efdbe840342c71f4d5304532d7e5dfb62991ebd4a97423c4b59f18f71c647f3581e57bc4d8b7092b0fa9fd99c287471cb0009a0b324414cf5ca4e6ef8c976c3d1f316c567a6e7d9d49e80ca0e0d1c76c6ee9ec79096d2e5458cf6aaa59a79574124028599b9b45e81e8b10cc955dc721c0ce41a29147e6f0148f12dc062d815705923e52aed60877e7f398916273dcd9501e382c5c7cb52f2a548dd91481c67263982cd646972be950d20273cabc6eff975a3e5aed743f7e04c02a46075ccb42a6c26268d56726a8c376ed0850bff4110122d2d2a6b6ec493e4276974117063459b18d6eedbe8f22ca72c6b376c7029a27d884082abd322d216c014164390de3f6e5ec7cf215dc03d0562e09bf9a2107661bc08fec0fa7a668ad38c8e33b58ce08c02df784f593b87f81617f9d71c5f5564d26be5d26b3218e76bbb240a66d5ef9e0b08308e62cbd12952f79931667c072ed1538108afb4aed58d8820f02c21364b8229400602d8e5401d6ac22d09d15468c1a7188b4d66f0fe43dbc90c8ed87b3c6e2af0dec0ca89e48058bdf38cc404baaa4ff383cdb2a807949c688714628718d7f2883f240a86bd81a7d3ac77bfdecb95325a17b8ff9c9b89b3458846282288c66b5050b7fea4742b4049805329ab44893a946f94b495602809a838ad901334417c903a000faab1830b6a96a66a33cc8f4eebb4ec3b5bfe7b84d9bfd00324c3530d8f2488a5621b93f07d17fbea3e0cae56a50e45fbb61e8a0d1f4437ea1bde01079637d529925b62d8c92ad71094acee3b0ba4295c6e685b8dc4ef6babc12c5550ed9a71010319f8a997f8c446fc5357e3659f1fc64a83f9ea0ee9f3b0de5656d1dc76e4977dfc5e4d2fa949f440a9f237fb26b0a11418690e465a575f3a030c72abf3b452c8ac9baad964ef802658c61f1462625592ceb4dfb36a20229cdc801ca1386b99abd2b7aadd513c537705db84fa7bc04a8d4ee3479f3fd560ce88b9b5076e90d6ef16bb348299bad5fa5a3a4cf3984fe9cc3ffe2d5004fe8096b0bf2625bcac705c1fae2f1264f16e79ffea6148e19998194a0b780fdf24ecbdfc9b58434b46cfba969885d3d96887ba9cf3a9417f25c03a17141224f8ce0b0b135432a943e65bd122811d0e21a78687d85e0e259a7bcaf84d20e2d7788445479ef29b9fcb157c696c72df0a6336d5a65b32773e59241c1b9438d07087ce023b447e7d6c0b599a491b72b311c89edadfce77cbd2e5a7206b9663c4364c35aaadaeffbf592c3d1d3ad88a81697866fffcd936f42a668c3db0f8a9a672f040a566847d49ae56466d044bc1315b9a16abc32376d98e035cdab165125e6d9a785c2e6d0103b3b0fef26f1b1fab2f573645fe553f6245e49e613783a7d56c736335cc1191d5af63ec1443f1acd72dd64f37731699779932da390afa6ff1baa38b990a1938a7ec96983c4774719e9d40e8e8eb0f8d00d01598caf273729b9e5178f1ae2dfb61b0728bd0444d75e6c6bc8ac02de822e533b4617cb796b9bc5fa6b0a381f4e4eb441f4c3a0223c099f173bc270348610e0a38bcb7200a4b3a46c9bd194b17fa2df0c463e0499f5b9d668c068533d750649dc832e3f67831ff9be227b9d43d450ffb8a592ce1694ddc6d30f042863efacd338d4a68018771f1a61b74ede30fce7aaf98b58491289e3c4e8703c6c425643216af8cae09e015faae9a2e1c42359c545217ff52228457a750b8c67ab533987c8c55801ed62a2401fd87dcadb756b7872d2ec0fd5d277f04bcecc2c420119d91dea7af1e2f0ea7edd90b070a0b1a28f988067eed07b61e3bda4a7d0dcf677b5b54cea017de34a5a88b4e369a062bf694abc6c48aebdc3d33f2fb81be88dc3ac135f2db72a94326195a77f1c56f2e293edd97173cd03fe2d64c26563d1418e3aacb3ae99559e4332890aec1f310cecae167a1016b7d87180b30f482f43bc47e005ccf51eab6bed2bd741d2c8cafb1e064910b097fbb5de4bae58d8f49c48811aa31d99bd7877a0ec04de9bcf8157f73afa3feb8e0526950cbb41805a6790ba690927f50c696bfec19643df9a00ae18caae5a194f60a526327e5bd6a7220f6449ac6e9f71ea93676b1013f6aea557e313d9f1d272aabc025b4c0a6481582f0f4b0174018478986b36e6b17973fc0006d501899f9e2fc5d9f5b8cf826f767a2bdbacbac3ba9fe58ab39ecee0808110c45cb993e9087c6ced80593de8d8097b3a7a02b54e9accf5467fbcaec46ab114dc3966a337682d1bed8981b7e0418d9ccba4a7f61a9b8c621ee9a4e38d8928868ee99d3a13339e5d3a8fe6d001327f695ffa00ffa0435a9684800c0fb46233e08cebd1cb04d16cab54f1dd18d4215b7b57d8b2248818b41d07e13685c19c8fad36ce88c874e80470dd5df8e4d1a4ae1d53cf10273a822560297bd8d84d8e88671cf036c4fbedf2683432aee67222e3f9c45bcf5a20162b0a59be4799a0beaa88bfff7042f239a2dbea0e83703e22998b39fd244fd15b41662937272c73a3829c905aa9c50071b2567f400b24be3a4b3c1521d37ad6b7e51e1864ec133ee39d0d2e8067cdaf1c9d525485aa765ac05596f678315da8b292ac97c60ae05ae55674fb0f2ecf46a0c07a1a3de5e79c6b65265e5ee28abfe1e66c37d90806603f4b4e7665533c6f94c81830d741eb0b71d664ad445b6494bc4d07692c6817d747e814311199a7926f10c728e04313109a45dc73d7008dcfa822f8bc2eaf773895b940ab9256935796370162f76dd2543b2fe832756668b94c24aa916e42b6fcaf4b5e56661e8217b0b7518f7b26bb4eeae12279ae1177ea0ebea79949c659ac0afae7c21b55e66b34fe320efa023059102615a9ef865dea665d7a246fbed1bf2f54676f109152ba99881d51d294c41b415b3c53c8396d32e97d9cd34e70a1be82f447cdf455399e64f18e08b332f8fe04fd00f7b6bf384c1ebb8a2654905c22bc37135f25161d8f1da70e841a715189b1880e16496c41ae6c83bc8e10a2637421b954a3215870f52a35196456e440470d88ae3fded51bc26962ce8b010b5a3b59d7862a77a0c6792108392a16e057ae4f7b7bc5058e19308be51a9db45fa2d0db3e1265a663a07388bcd835d919fa281ddcf1565c0bec714a672b468903dfed1c4993d52c25717cc7bf9127fbe5ca5cef39a95420b2e7fd2b759b062d8c53d893769519777acc1d748cde611dd82ab539fdfe5f1237ae3cb59cd46ce07db13be761707326c812be05912a81ad55adb994a68ac7aeeea1c86f5951eb604c7a8f6e86b092a881e7d6f188fffa3902c5e275dfb93e356c5528bf17adf21b7d123bcf52fff87b5cae00cec0e94b3f5405c853e6142364255ac63b74432180841ad9505299052dace7c403d550e52ecddfc3c5762607b99e05395adbbbea2df5e6d0b80226592de727892742e16885d4c66d30fc595b845af6fa93da62cc724718ca5cfe3264fabfefc8bf75f545e30d6c3d2cd548bf72d0a2728cecf238fbfc231ec58317a9128ba32b12fb06fdb4dc13bc2fbd5e73f3938a399c7fc4c039899856684d709613dee408f84eb10089d55f52a0011549951830c8492f64f2a983eb09dbb9b7cc6d2e14eaa5fd6deeb06dc1a9244d0780b5d318a719685d30da5f8d91966477bc9cfdc858c263b828f719cd1822fd9fba0458b44e93b7080b2a8112860eba1ad711c270cbc43e0a3f9c7de438329f6865df1d96373e981ff238acfc6fcb472bbc6a20a0cc21c8dea33eeea971c9aedc14c4a630e98087ef868317bdb7527814cd047cdad271b0cfe44d008f6d6ea87537436706edf00301287875c8e51ae980998f4b71672a624893454808838818ce5dd9e4aabd03a5ff68a73bc081ab07d9a259211702b279c300b619974cac7c41e906b37ecf31cd34c78dce1715795f9a67f0723e2da053d9dd2e19de31425f7a794838059d10f53bb5aac14f091c4d4d5af3d359508a8cf7891bbd2fc9f01ec27f1d06d1bf17ca9eb37ca9dad4fa7d6d1bc1a8fb13c781a684ed781e8f2c46c47b039455adbc99b85171ec4d119a5c73fae88795dffdde516131df1ce95d73fafd8a5523d1860f2310390d18477266eca8e6e3ac1d83ffa2ae7756cd711a02d0671fedaed2fa7759601080bedf292941863b31b064f061f4bd3c7382bed89fef4842b2692a808ee5d1c6ebc35115201d135416454ec9a1d21ddfb9ef1b1f9792317147e530ce9232d59aa2a835dcc7d9e0cff5dd23863bb5510f9e652e658673835a12958e2b4deafc2a49d005d69d027f1d54da9bacac38f71a95875130d90dee3ba71cab2d0e58b5e455fd49991c113ebab7e00fa35fb760af33c83c082bcbb2b479cd105a500683573b72699ad1a0a03693600810d2db3e2c0d9a3751eb3771430f394619bf9ee5017ec1ee623a1b640f8bed1d6bb1fee01f678febb493cbba65dbe3c511a97c6b61a47e6075d1fbcaa3e5e9a82a59ace707f61bb196b212feab645f05a8aa1986f6210a384c15bc749245d840b3565fb3641dc0318ec287ae724cfd90653e00b84d98f80e6b91f7d269205b6fbd24a1e5b2631fe3e351a44a68da61edcdd1cc8fc660ba3b3ac318648719c58d9e30fdfe815a7d316acbe372ddb10e964911c77dff0ce3476025a8bb7a76b942ed27de5e4f587ab25badef986f4565f27d5aabf36611e5cb42262347c1eba9081065cd957b019adf5c74032b9c2c0aaac128c4808a04442f77611289ebcd1745ae77462492da5020d3cad8bcc2b95f27bb18bbb5d958810c6652f10256bf76941dd8c29c35473d1f57fedabc9191f5e1d186fc03d2831ebaa5783931a127597bf506ed5cc0dcb4336fac83cb773a41719b100feb14189fd2ab4d65a849993255ba8e00f6d40f480571406e39f216d45f7e3061ec0c8d66ecee5f00c6be7993b9e4dab7fadd537afe0346e4a880ac20e401548c773a561661e509952d7e6cf030fa897cc94b4dcf859c4ca197a18ea9d7bb18fa2d1c0720ca35e99d4d17d7da2361f6b9f2ac62b844b2be0f87e322f18301ea357e2015088e477b7396094ea439b1bf19f78f16b7b3ed1788d9a40d7a8e8c44c8dae5145036904bc2a8d145f0cc705ef75851ee605b81e5c83d82b2b74290b52ec3e9697a5bb6b714e5fe3242541432ec85936e248437a538040d973a57e5b7c1e99ba8f9561169b4edeea81b7913f7641fd1fa86f664d242cd933f7626c1c93c8c7a375fce36b05d11211beea405f8e8878c380a0aaff9831ab21fed47db66095d13b9101cad47680044122e5d50d4044d208b10395f87734be8cd2223891a82abe682acd9db8b503bb60f6d1d8b0521d14d885c2b1a089e01b5ab9752515363296148a87e47f8b013f5782d5d1af8dbd451a4202866095dac975fcf5cdabd1536126f7582890c022990f0e1a4974b9c96db631ee9a9e65cdd0c3e3c9b7b940352886ba68ef551c0fd06fe2c8c8669eec94939aab78c3bf5f392eb51a6ba94c81f31c1bdec4356770ec5e4606d4ed03ccc39bc564a5386c380b9dbc0f72e1bddfc8d061e22c98 +MD = 0b9e7cd4ed382cf5ba14f90aaccc61f88a82f9fd628e58b8441f28f8236ec511 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp new file mode 100755 index 000000000000..139a876a942a --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp @@ -0,0 +1,310 @@ +# CAVS 19.0 +# "SHA3-256 Monte" information for "SHA3AllBytes1-28-16" +# SHA3-256 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:45 2016 + +[L = 256] + +Seed = aa64f7245e2177c654eb4de360da8761a516fdc7578c3498c5e582e096b8730c + +COUNT = 0 +MD = 225cbac2be6f329d94228c5360a1c177bc495a761c442a1771b1d18555c309a5 + +COUNT = 1 +MD = 96d364a1b1ced3dbbce6380093fb1ac77221abcee30faf16546ffad8fe1eef8c + +COUNT = 2 +MD = 8d81a67598ff73e2305ed53b1e6d58c799a1d1908abf81a15eab4bfd35b96e51 + +COUNT = 3 +MD = c71b506211ad3814e5d6f596a452c94dda511d6d3f3cda77041882aca3363708 + +COUNT = 4 +MD = 804fb2ae90fe2d1a2f995b9d424f1ee4d92ceb6462d71fe05d3bc3275687c8ac + +COUNT = 5 +MD = 872265e74370558a0caf5bed4663a40a36ea14b3ab498d54d0d4d29cdd18c1c9 + +COUNT = 6 +MD = 0d3e8b1276fb39ead94ee69a120e56ea3e8cd0436a4b46de58ed8db5cc02e2e1 + +COUNT = 7 +MD = 5281ee56dd7e7b6d1bbebcd2393eb8de6b3dcbce38f1f892d80ed7015b36ae3d + +COUNT = 8 +MD = ac9381ebd23f32a57b811c541506b340875454a0cfe303b6a93a691d01f39e22 + +COUNT = 9 +MD = bf7d7f341568aa0fbdc63e5f931185e0c6a6d522c5d86cd44cb27b1956d3a47e + +COUNT = 10 +MD = 13a0ea2b7c01f5da5120d86cb626e222a137fd53b60a87391183effc7332dcdd + +COUNT = 11 +MD = 0997572374ff8711539840f5c32fcab923b32a94c101f709b214386cf9e28c55 + +COUNT = 12 +MD = 68dcc06346d43c34e39428839586228ca03a6afc87101a35a92508e7ddd97b2c + +COUNT = 13 +MD = 6d3f08f8d5d53cc092980c75d8992825d564b1f0557ccdba3d36dacda649a0d2 + +COUNT = 14 +MD = acb740956b0c297c7ba93ed75c9ae2d770ceccaa268671cb6c5f779ea337edb5 + +COUNT = 15 +MD = bca776fc02c138ae1aa9c7bad9c326f478d90f320232f270488bedf81c4e1d62 + +COUNT = 16 +MD = c6170ed6a1cd137a56b88ea49931da5703fd0068c579a1ec59b5be9e63f2e6df + +COUNT = 17 +MD = 725333b1a3a9a460ea4ac73cd60c7e65b30740bc7c345cedeecfc2ed377ce484 + +COUNT = 18 +MD = c81f200c8c101682f123b44d2608d2cea270fb3e7e8aa395f016810ba89b27ad + +COUNT = 19 +MD = d79a6f3dde5e053f342a2a2a9f844ddac71e5ff468a0d3276c81bd8126b3ee17 + +COUNT = 20 +MD = 0c7f14428ee35003728ef697073f3422129653768ff4e5861d8d79a93e364b6a + +COUNT = 21 +MD = 7644dfdcf6f8ea827762c8a230bad47ce730a02f1845e669ba21f2f191493dce + +COUNT = 22 +MD = d2df3503c8f619d271384bed3987100a6ca9faf5a7592e7ff557898486956f1f + +COUNT = 23 +MD = 9e37d7ef189e6eac81770eb692926e9a3d2c5d578187689c31eeb3da5d7c5183 + +COUNT = 24 +MD = 9e32047d1790838fc89ce97e3614f31c3da2f863ce7b3a68f3847c7f97f9272e + +COUNT = 25 +MD = c9b89d136d2b860fe892b4e37de8b7a4e19c49114b3457cba3bef8bb117d14c7 + +COUNT = 26 +MD = a01e4086adc45a9944aedf333954b24daf813215ffed38bc0ba5667a4c19d9ef + +COUNT = 27 +MD = cce16e645ae14a6d0cdcf4c35627353c8ad3fbfef50c3fbd6205ca1959c1dca8 + +COUNT = 28 +MD = 5c25e7747283c51709adb8058fe0a80626dd30c18f3c872e715e09081f487b2d + +COUNT = 29 +MD = e645d82344734a50fab4c5304452658f95c46b7fd2ce4acd9cbd9ecff5b69d9c + +COUNT = 30 +MD = 5165cebc2429ed67a52c33121afc784d39c4b062bc2ba996ef1de6d7dde9e657 + +COUNT = 31 +MD = 3467af2ef9dad19c23aaeccdb0da0447e2b66821c02caa05ecd5e58bad2c9852 + +COUNT = 32 +MD = c9cdfb5e41544b0111293181d2178e46b3a579e27e7d459d9b7fbf19f277b1e4 + +COUNT = 33 +MD = fd6f6126f221f04b119f1b42da4a37eb96c304d993ef4dd9a80ad23948bc4683 + +COUNT = 34 +MD = ce7b435ee9c83df626f1fec815d40bce5bf2763e13b69d556730dfb146b91b6d + +COUNT = 35 +MD = a733d5fc621a65b365fbf59fea7163e683bf5348e5552c55c9cea3b01f61a73c + +COUNT = 36 +MD = d2b076cfb5d715d47d62a46599c322ccf4ad75af93a2e5d6c2cea99cc3e02ea7 + +COUNT = 37 +MD = f9292341cabcd4db57974ba7a0bf193bb831e4733b78b121d59c002d2bdded27 + +COUNT = 38 +MD = 8de979b00f2aa1337dfc6f4d0faa4a795932267a9455cffb6c03c3d1d6c99ef4 + +COUNT = 39 +MD = 5a1db7c17f6da1c5205404c62f658cb0d986e2ef29137c5a987c81b86e24431c + +COUNT = 40 +MD = ad37dc164141f0161a20cc41ad06c5bf96a0cd07d33756377c1d78a878fb3bb9 + +COUNT = 41 +MD = 01b5f604094a5a61a4013d2ce7aabf2c1d1845fe9a1f4ffc778452ae5309a67a + +COUNT = 42 +MD = 17e58ccea2d2adc7b93805b54dfc76db06f078c312d9986b69a6c8fe97037dd1 + +COUNT = 43 +MD = 8e16f09e24f926e7990588e6bc68f7d844d6e05cd865e10f5a3ba87cac2bc6ad + +COUNT = 44 +MD = f95518a1d7233b7af4e6d205adcae0ac26d74f70f9342d0221d65b8d73ad53bc + +COUNT = 45 +MD = bed31e5554b01582e2ed0c2ccc01028e535b2034a2f6292b60e591f861176e11 + +COUNT = 46 +MD = b5b6a97f320a21ae56b14c704d8e704e4bead893e87a1cc02a8cde81366c033d + +COUNT = 47 +MD = 4ecc5e0426865bfa15b72d237bcb27840d318667701995cbde243ffe63a22f5a + +COUNT = 48 +MD = cdf72b4a14845cd0b4988d9c4985d08c2ab8f673885154c93ae85d6db15a25b7 + +COUNT = 49 +MD = 9a757015d251d4e17eb7543843ad7e1dab88a6c488e359cbdac84d4c55371c00 + +COUNT = 50 +MD = acda904cdf58c03e33add74668188a818b3ba12a19bbf8ed8ddb105503e90ab7 + +COUNT = 51 +MD = d5a8450ab0d16402c0053a434e61acff3a0e136a7e82d85c74f456f4c92a70a9 + +COUNT = 52 +MD = 74b23ba36cffdc0e3d88e457760c7157db667f95b6a48ba97aed7bdee95553b3 + +COUNT = 53 +MD = 25a3b8de6e93e29bbec3538bb54491cd2afee1f9bd55d4bfd1f49197920d9562 + +COUNT = 54 +MD = 8c9ffe70ccaa2305d72e46ac93a43cd512b1666fd336856c46e13b7bdb08a2e2 + +COUNT = 55 +MD = 39b3516f8d3e6c8c0e6d5ac9e0098a44d63ab6514b848de4b654805a0cfefa76 + +COUNT = 56 +MD = bf6a8f025e49e8a64e92cd16f71773866db3bb048a05b29fb02d9846c9fbc9f5 + +COUNT = 57 +MD = 3f41fec1eb39ee06d0850353e483374e7bf34bb47febca616aaee067a28734b4 + +COUNT = 58 +MD = be70c51e75ca2ae611b80bbe9c1720cdc1b8250e73399296851eadedcdc4f963 + +COUNT = 59 +MD = c00ce2788f5ab3d14a492240ea54d05bac108353a2203436d3e0701c1b088262 + +COUNT = 60 +MD = 26e5b345b7f8efd7d91ddc6ed602646450bedd3f6b20d77de02beb327be2d9bb + +COUNT = 61 +MD = 6978ad4035a5180a0781c656482fecbe7b9f1c430672b2135448148185a40e36 + +COUNT = 62 +MD = 5b542f6a1e761632b3b48c2c40972f64ab0c5b80c0057e3cf9924324456f6d31 + +COUNT = 63 +MD = ebc7da12bdfd0dd2d6fd09babcaf3ab9626a5ccb2e9a4f492dd15652fd2771f3 + +COUNT = 64 +MD = 5db04d00d3dfd9be76b2c9694f6d5d8e720c5c79b29729e0c1631747c2cb9988 + +COUNT = 65 +MD = b2788851c73b8c368e7f44e832e2913004a66131216da5ea0b12a1efe30f8979 + +COUNT = 66 +MD = 667e4498275bdb7701883d22dc988e86aa419d8475329e199238d2121f819d28 + +COUNT = 67 +MD = 6cad7e7563819f1a24269e3f031795185ce013d48e8fe3f9dee2a6f9e690c490 + +COUNT = 68 +MD = 5224ec473d778622c13d93d285cab5704442ab6d8e8a5b93f272cd1018973951 + +COUNT = 69 +MD = ef3896defc3f927251b4c790ce8f43e12a7ae465de5ee1db48c1ab7248978a16 + +COUNT = 70 +MD = d3849407870aaf0fb2c49562e55da86557ad883dc0e96f9677e23658643c7a44 + +COUNT = 71 +MD = fff968a20003fa69db3d10122c0ebca2cdfb6b39a32051bddd192f41d8636506 + +COUNT = 72 +MD = a8c43a4c99884c145f133adbc2ee69ebe7a78baf43ad58335452284c334a1889 + +COUNT = 73 +MD = d6ed4ac4975a0a990c4e58f5bddb28136967f935800a94c223582480142fd889 + +COUNT = 74 +MD = 1f7644067012e64b7869d12b8ccd1f2d3a56bb3e872a138cc46ecefa7e59fd75 + +COUNT = 75 +MD = 9e07c3aeda2c5a411ab7db4033e6d3e8637aa14373ed26daf8db20b41f986af0 + +COUNT = 76 +MD = 09ef93fa940101e661b671957de823f08268a7475d3ac6e09316ada01adb75fc + +COUNT = 77 +MD = 8fd9f1b5b9d50ad1498d09306eafb4409e374c51b5e84901ee6650f0eb35a137 + +COUNT = 78 +MD = 70674b941ea3fb733e8582948ae87c1ab47a0f6f3d7789399a6249bd45dc64da + +COUNT = 79 +MD = 93778d9f385f055b656638025cb6efb2f3f026e01c5af80ac02f8358f578a3fc + +COUNT = 80 +MD = c088ca1d2ec6ac466cec58fb1e8bfbaaa6909c5ce72c3de1b94b18405c4fce90 + +COUNT = 81 +MD = 86e02620845de786fa19b92d7bd2b94a5e38972ca731496645bd3123faf44019 + +COUNT = 82 +MD = b14fdb5df8e85263cfb82738f07dcfa3de5a76c9780bc67146d143bc94e8d17a + +COUNT = 83 +MD = 4b18899eb0e52fc7513251853b30d8bf17e772e469cae4a5a891660c585e208e + +COUNT = 84 +MD = 136dfe4353b42990906254b9215934c2569c5f31a6a25edccc896c6feda3bc0f + +COUNT = 85 +MD = 364ea962632ded4a9fa91fcd873c415bd5ec87ff80c688f23fbd5ec940fb44d9 + +COUNT = 86 +MD = 90e2711334bdcea7778f296dfb7128c67c475863114f26747bab2abd4b7c67d7 + +COUNT = 87 +MD = 641d974f46a605c7f806194206c671dc1e865386241e296228a8a70c58df122c + +COUNT = 88 +MD = 1a4e32585da9eddc7a6c05ee632587f6f7e5c269eda63f6bb67d662175e8ecbe + +COUNT = 89 +MD = 28150a432ffdc9bf6891a069153f1fffeb4515864713d1a01c2adce17d51d400 + +COUNT = 90 +MD = 0bd9a7f5c0d89f7542013e323848442ada3a2b871d481188eb5bc060aeb82455 + +COUNT = 91 +MD = b5797704dc1f661de1eefe865a42fb50809cd41ea7560770ddddb9f06427908d + +COUNT = 92 +MD = 6af71d9d6485d0fc51e91c2c226e365b8c981efd9c1bbbe1bd8da297f15aad3f + +COUNT = 93 +MD = c4b16828582f18fc90e06e3c9dbb4cf27e8a9b667f248e0a4578d68b8e0c3b3e + +COUNT = 94 +MD = a2911ec65759af2381fbaf933b122f2cfc8a2f5bf65400742264189cdb684e41 + +COUNT = 95 +MD = da068cc480e629e65dca9c77c62465f8531ca8ab8d4b538cde556619113a6589 + +COUNT = 96 +MD = b7c3a05dae2e7c5c046020e133ed5647f87d714a22c2a9bde947fbe2dc805c16 + +COUNT = 97 +MD = a9da515a8324f3084b2b704148f0c529262d3a96d8dd9713cec21af5853d2583 + +COUNT = 98 +MD = d202a76db6797ba1b6d3a01890d91305c84a27f7b3469e97692597caaffe246e + +COUNT = 99 +MD = 456f2ed7f5433bb4e56d7780a21a953e95d6a5eb53bb4c974c57a90e677f3197 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp new file mode 100755 index 000000000000..34fb8c7ac753 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp @@ -0,0 +1,555 @@ +# CAVS 19.0 +# "SHA3-256 ShortMsg" information for "SHA3AllBytes1-28-16" +# Length values represented in bits +# Generated on Thu Jan 28 13:32:44 2016 + +[L = 256] + +Len = 0 +Msg = 00 +MD = a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a + +Len = 8 +Msg = e9 +MD = f0d04dd1e6cfc29a4460d521796852f25d9ef8d28b44ee91ff5b759d72c1e6d6 + +Len = 16 +Msg = d477 +MD = 94279e8f5ccdf6e17f292b59698ab4e614dfe696a46c46da78305fc6a3146ab7 + +Len = 24 +Msg = b053fa +MD = 9d0ff086cd0ec06a682c51c094dc73abdc492004292344bd41b82a60498ccfdb + +Len = 32 +Msg = e7372105 +MD = 3a42b68ab079f28c4ca3c752296f279006c4fe78b1eb79d989777f051e4046ae + +Len = 40 +Msg = 0296f2c40a +MD = 53a018937221081d09ed0497377e32a1fa724025dfdc1871fa503d545df4b40d + +Len = 48 +Msg = e6fd42037f80 +MD = 2294f8d3834f24aa9037c431f8c233a66a57b23fa3de10530bbb6911f6e1850f + +Len = 56 +Msg = 37b442385e0538 +MD = cfa55031e716bbd7a83f2157513099e229a88891bb899d9ccd317191819998f8 + +Len = 64 +Msg = 8bca931c8a132d2f +MD = dbb8be5dec1d715bd117b24566dc3f24f2cc0c799795d0638d9537481ef1e03e + +Len = 72 +Msg = fb8dfa3a132f9813ac +MD = fd09b3501888445ffc8c3bb95d106440ceee469415fce1474743273094306e2e + +Len = 80 +Msg = 71fbacdbf8541779c24a +MD = cc4e5a216b01f987f24ab9cad5eb196e89d32ed4aac85acb727e18e40ceef00e + +Len = 88 +Msg = 7e8f1fd1882e4a7c49e674 +MD = 79bef78c78aa71e11a3375394c2562037cd0f82a033b48a6cc932cc43358fd9e + +Len = 96 +Msg = 5c56a6b18c39e66e1b7a993a +MD = b697556cb30d6df448ee38b973cb6942559de4c2567b1556240188c55ec0841c + +Len = 104 +Msg = 9c76ca5b6f8d1212d8e6896ad8 +MD = 69dfc3a25865f3535f18b4a7bd9c0c69d78455f1fc1f4bf4e29fc82bf32818ec + +Len = 112 +Msg = 687ff7485b7eb51fe208f6ff9a1b +MD = fe7e68ae3e1a91944e4d1d2146d9360e5333c099a256f3711edc372bc6eeb226 + +Len = 120 +Msg = 4149f41be1d265e668c536b85dde41 +MD = 229a7702448c640f55dafed08a52aa0b1139657ba9fc4c5eb8587e174ecd9b92 + +Len = 128 +Msg = d83c721ee51b060c5a41438a8221e040 +MD = b87d9e4722edd3918729ded9a6d03af8256998ee088a1ae662ef4bcaff142a96 + +Len = 136 +Msg = 266e8cbd3e73d80df2a49cfdaf0dc39cd1 +MD = 6c2de3c95900a1bcec6bd4ca780056af4acf3aa36ee640474b6e870187f59361 + +Len = 144 +Msg = a1d7ce5104eb25d6131bb8f66e1fb13f3523 +MD = ee9062f39720b821b88be5e64621d7e0ca026a9fe7248d78150b14bdbaa40bed + +Len = 152 +Msg = d751ccd2cd65f27db539176920a70057a08a6b +MD = 7aaca80dbeb8dc3677d18b84795985463650d72f2543e0ec709c9e70b8cd7b79 + +Len = 160 +Msg = b32dec58865ab74614ea982efb93c08d9acb1bb0 +MD = 6a12e535dbfddab6d374058d92338e760b1a211451a6c09be9b61ee22f3bb467 + +Len = 168 +Msg = 4e0cc4f5c6dcf0e2efca1f9f129372e2dcbca57ea6 +MD = d2b7717864e9438dd02a4f8bb0203b77e2d3cd8f8ffcf9dc684e63de5ef39f0d + +Len = 176 +Msg = d16d978dfbaecf2c8a04090f6eebdb421a5a711137a6 +MD = 7f497913318defdc60c924b3704b65ada7ca3ba203f23fb918c6fb03d4b0c0da + +Len = 184 +Msg = 47249c7cb85d8f0242ab240efd164b9c8b0bd3104bba3b +MD = 435e276f06ae73aa5d5d6018f58e0f009be351eada47b677c2f7c06455f384e7 + +Len = 192 +Msg = cf549a383c0ac31eae870c40867eeb94fa1b6f3cac4473f2 +MD = cdfd1afa793e48fd0ee5b34dfc53fbcee43e9d2ac21515e4746475453ab3831f + +Len = 200 +Msg = 9b3fdf8d448680840d6284f2997d3af55ffd85f6f4b33d7f8d +MD = 25005d10e84ff97c74a589013be42fb37f68db64bdfc7626efc0dd628077493a + +Len = 208 +Msg = 6b22fe94be2d0b2528d9847e127eb6c7d6967e7ec8b9660e77cc +MD = 157a52b0477639b3bc179667b35c1cdfbb3eef845e4486f0f84a526e940b518c + +Len = 216 +Msg = d8decafdad377904a2789551135e782e302aed8450a42cfb89600c +MD = 3ddecf5bba51643cd77ebde2141c8545f862067b209990d4cb65bfa65f4fa0c0 + +Len = 224 +Msg = 938fe6afdbf14d1229e03576e532f078898769e20620ae2164f5abfa +MD = 9511abd13c756772b852114578ef9b96f9dc7d0f2b8dcde6ea7d1bd14c518890 + +Len = 232 +Msg = 66eb5e7396f5b451a02f39699da4dbc50538fb10678ec39a5e28baa3c0 +MD = 540acf81810a199996a612e885781308802fe460e9c638cc022e17076be8597a + +Len = 240 +Msg = de98968c8bd9408bd562ac6efbca2b10f5769aacaa01365763e1b2ce8048 +MD = 6b2f2547781449d4fa158180a178ef68d7056121bf8a2f2f49891afc24978521 + +Len = 248 +Msg = 94464e8fafd82f630e6aab9aa339d981db0a372dc5c1efb177305995ae2dc0 +MD = ea7952ad759653cd47a18004ac2dbb9cf4a1e7bba8a530cf070570c711a634ea + +Len = 256 +Msg = c178ce0f720a6d73c6cf1caa905ee724d5ba941c2e2628136e3aad7d853733ba +MD = 64537b87892835ff0963ef9ad5145ab4cfce5d303a0cb0415b3b03f9d16e7d6b + +Len = 264 +Msg = 6ef70a3a21f9f7dc41c553c9b7ef70db82ca6994ac89b3627da4f521f07e1ae263 +MD = 0afe03b175a1c9489663d8a6f66d1b24aba5139b996400b8bd3d0e1a79580e4d + +Len = 272 +Msg = 0c4a931ff7eace5ea7cd8d2a6761940838f30e43c5d1253299abd1bd903fed1e8b36 +MD = dc5bebe05c499496a7ebfe04309cae515e3ea57c5d2a5fe2e6801243dd52c93b + +Len = 280 +Msg = 210f7b00bf8b4337b42450c721c3f781256359d208733846b97c0a4b7b044c38dbb219 +MD = 3305c9d28e05288a2d13994d64c88d3506399cd62b2b544213cf3539a8e92e2e + +Len = 288 +Msg = 3cb8992759e2dc60ebb022bd8ee27f0f98039e6a9fe360373b48c7850ce113a0ff7b2ae5 +MD = 3c00bf3e12ade9d2de2756506f809f147c8d6adc22e7bb666e0b1d26469e65a5 + +Len = 296 +Msg = 22634f6ba7b4fccaa3ba4040b664dbe5a72bf394fb534e49c76ec4cdc223f4969e2d37e899 +MD = a87e5c78837d7be0060d8f5eda975489ec961b28d7088f42a70f92414ae17793 + +Len = 304 +Msg = 6e1dcd796b2015ee6760f98fdb40e668b2cf38b05c91f6a91e83bcc8ac59f816f90a59d64e8e +MD = 746bf845c08aa186b5fe1ca35528232c4a491a3a2a32cd23e990bc603f3268ae + +Len = 312 +Msg = ee0be20320f9d44073281265a6e9fa6b9d252495624b8d016b8ef57e1b4e859d8ad3b50b89416d +MD = a3257baf14ca16e1137dc5158703f3b02ebc74fc7677165fe86d4be1f38e2f7c + +Len = 320 +Msg = 8ae2da242635b6568289bf6bec8a438dbac1f5b4d50a90bb7449bdb92a59378e23452dbcabbbe879 +MD = e25c44802c5cf2e9f633e683d37aa8c8db8a0e21c367808121d14d96c8a400b5 + +Len = 328 +Msg = bdd0252dec5b798ef20e51791a18e8ca234d9bfde632a9e5395337a112dd97cdf068c9f57615424f59 +MD = e02c1b197979c44a5a50d05ea4882c16d8205c2e3344265f8fe0e80aed06c065 + +Len = 336 +Msg = c4c7b6315cb60b0e6cd01ef0b65f6486fdae4b94c6be21465c3a31c416ad2f06dcf3d6eae8eecf84ca7a +MD = 2da21867cd6b5402d3caff92a05fddfca90199fd51a94a066af164ce3d36c949 + +Len = 344 +Msg = b17977aced3a1184b14b0e41a04dd8b513c925ca19211e1abdc6c1b987ac845545fb3b820a083b4f7883c0 +MD = f91b016d013ede8d6a2e1efd4c0dd99417da8b0222d787867ca02b0ea2e80e45 + +Len = 352 +Msg = f65c3aa1d9981a84e49fc86d938f3f756f60e3858d5e1f6957dd4d268e28d68e90ba9a11d7b192d6c37fb30b +MD = 3acbebf8eda9d3c99a6b6b666366c391e8200d55fd33ad8680734def1dc7ae85 + +Len = 360 +Msg = 49abba1fa98f3c4470d5dd4ed36924af4a7ad62f4c2dd13e599238883ed7d0cb95bbaae58b460332e6b7681446 +MD = 02bcd9ea4f1aa5276f38e30351a14a072bc5d53a52d04d559a65ca46f1bcb56e + +Len = 368 +Msg = 275645b5a2514fe65a82efac57e406f224e0259677674f1d133f00a5ee9a6d1a8fed0eadbbff5a825041d2a9715d +MD = c70a874d786cd0f3f09fa4dc1bb8f551d45f26d77ad63de1a9fdfb3b7c09c041 + +Len = 376 +Msg = cd02b32107b9a640fc1bf439ac81a5c27d037c6076e1cfe6ad229638037ac1550e71cf9557c29c2fc6017afd5a8184 +MD = 36c73d11d450784eb99af068cd4e1cbc5768c8a2118010aceec6d852dda80d95 + +Len = 384 +Msg = 5a72e0e1aec82a6541f04883bb463b0c39c22b59431cfb8bfd332117a1afb5832ce5c76a58fcf6c6cb4e3e6f8e1112de +MD = 90fc3193552ec71d3315ebbb807913afd4cd2f0833a65e40d011d64de5e66513 + +Len = 392 +Msg = 43402165911890719f9179f883bbbc2a3be77682e60dd24b356a22621c6d2e3dcdd4cb2ce613b0dfe9f58629ee853e0394 +MD = 5c4b6ceac9441defa99b10b805a725d4018b74b3e1f24ad8934fc89b41b8fd9e + +Len = 400 +Msg = fc56ca9a93982a4669ccaba6e3d184a19de4ce800bb643a360c14572aedb22974f0c966b859d91ad5d713b7ad99935794d22 +MD = e21806ce766bbce8b8d1b99bcf162fd154f54692351aec8e6914e1a694bda9ee + +Len = 408 +Msg = ace6297e50d50a11388118efc88ef97209b11e9dfcb7ad482fc9bf7d8deecc237ad163d920c51f250306d6cedc411386a457c7 +MD = f5581403a082bbf5ad7e09bdfccc43bf9683ebc88291d71d9ce885a37e952bd6 + +Len = 416 +Msg = 3bad18046e9424de24e12944cd992cfba4556f0b2ae88b7bd342be5cff9586092bb66fac69c529040d10dd66aa35c1023d87eb68 +MD = faed76ff5a1cd99183b311e502c54e516d70a87050cf8961c8cd46f65c1358cd + +Len = 424 +Msg = e564c9a1f1aaf8545a259f52c3fd1821ed03c22fd7424a0b2ad629d5d3026ef4f27cbe06f30b991dfa54de2885f192af4dc4ddc46d +MD = 811529c600c9d780f796a29a6b3e89f8a12b3f29c36f72b06cca7edc36f48dc0 + +Len = 432 +Msg = 6043fa6465d69cab45520af5f0fd46c81dbf677531799802629863681cea30ffa3b00836fbf49f87051d92aaeac0ed09bcb9f0755b7b +MD = b0fceecdaef6c76d5fc3835b523ce2416f4a9b9bd1f90234445df0f2b689f2f5 + +Len = 440 +Msg = 2040c538c79237e6f2b8188c6375ec2f610ac2301607b9c23660c3a1e1c3a902cb2950c59aac3af28f984f6369c4debe8623dfa74c967b +MD = e33dbdc0acc23fcfad3c759c4333410bd3a40efb1366ade157d2c81d65a0a6c7 + +Len = 448 +Msg = 00ff6c96b7aa3cf27d036cf20af7031434113252574bda9cf9244d85aef2593d3a7a83bff6be904b75164a1766828042bc3f4f090d98a03d +MD = d000eafca34815783bed9b050c6901c97f2e77d4771a0ed724dd8f6ff1448791 + +Len = 456 +Msg = e8df14936cce118139e690f1662f88cfbc9c333b6dea658c02cb1d959644592842542fd9d8d61a04d4a892128f0ddff7b6502efffbabe5cb0a +MD = 3479a9617a3adca35854c08fe987c2fe7ff2b01b04f2d952c107b3f066420551 + +Len = 464 +Msg = 4ed981a31f70dd6b70c161be1f01fc1bba54d06d9494e7eb194e213d5e0e71e0fddd49cb1f075353da22624cbe4ba871aab32906e45b6fbb691b +MD = 9c824a00e068d2fda73f9c2e7798e8d9394f57f94df0edeb132e78e8a379a0cf + +Len = 472 +Msg = 7802b70c6158bc26d5f157671c3f3d81ab399db552b9f851b72333770348eb1fdb8a085f924095eb9d5ccfd8474b7ba5a61c7d7bcde5a7b44362cf +MD = fa9726ccb068c0adb5d20079c35a318b3d951eb43b196c509ab790b7e9202207 + +Len = 480 +Msg = ff83dcd7c1a488e5a128d5b746284552f1f2c091615d9519f459bc9010ca5e0ac19796c4a3fd7a15032a55a1410737d07855b07f61fbd8f5759e9218 +MD = 8bd8d494a41acda4b7cd2994badaecff0f46ba2743458f6c3fdc0226f9492ede + +Len = 488 +Msg = afd4764cc7d5de16a3cf80c51d0c0d919f18700c7dc9bc4e887d634fe0a3aa94097d590e4123b73f11ccb59e23496a3d53d2bfa908056c11c52c23abfb +MD = e9e3b3da648cf230f1973f3814eb81316d2a496826ea39adf4674576f97e1167 + +Len = 496 +Msg = 6fa6de509719ffbf17759f051453c0ac3cbe13346546bbc17050541074b034af197af06e41142211ee906a476039b3e07d6cb83a76aac6fca8eac307c034 +MD = 766630993fbb651fd8d3603e3eebc81931fb1302a46791df259a6e13ca2cba9f + +Len = 504 +Msg = 93cbb7e47c8859bef939155bea488090283ecf5023d99767c960d86baa333af05aa696fc170fb8bbac1e6473956d96b964580ee6640f0cc57be9598e55fc86 +MD = d3212abca1100eb7658c0f916daf2692c57a47b772ee031c4ec6ad28a4a46de9 + +Len = 512 +Msg = 67e384d209f1bc449fa67da6ce5fbbe84f4610129f2f0b40f7c0caea7ed5cb69be22ffb7541b2077ec1045356d9db4ee7141f7d3f84d324a5d00b33689f0cb78 +MD = 9c9160268608ef09fe0bd3927d3dffa0c73499c528943e837be467b50e5c1f1e + +Len = 520 +Msg = 4bef1a43faacc3e38412c875360606a8115d9197d59f61a85e0b48b433db27695dc962ed75d191c4013979f401cf3a67c472c99000d3a152227db61de313ab5a1c +MD = 8703a1f7424c3535f1d4f88c9b03d194893499478969fbb0a5dc2808a069ab8f + +Len = 528 +Msg = f0be5e961bb55b3a9452a536504f612a3e66aec8160a882e5156eb7278433b7ea21de31e39383d57fcdfb2fb4a8d227a9d6085fb55cad3abb78a225535da0e34efea +MD = 2fa180209bf6b4ad13c357d917fabb3e52c101a0cdb3f2299fa0f7f81dfb848e + +Len = 536 +Msg = 206f1c36ba25aea73398fffc9b65c4637cc1f05a6bbee014dccbd61e3b7aa9423887bbac62152a4bf73a4b7afabe54e08720589464da7985d8e6591ac081d115df2fe6 +MD = 558ea7c800b687380cce7e06006e1ebe0b89973f788c4caac5780f22dbf382e8 + +Len = 544 +Msg = 8cd71434c00663f3bda0205508a4a266548dc69e00ca91fde06d165b40279af92674f75bd8133e5a9eb9a075c9068f68f4b820008a1fb42d89d1d759859e68f8efc6fb60 +MD = 085b343b08516f320a9b90fe50440a8bc51ae0850fa38d88724a4d6bd3df1ad4 + +Len = 552 +Msg = 4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afe +MD = f9dbb88c5bb4415e17dee9222174538eeab371b12d8d572cfdf55b806e3158e4 + +Len = 560 +Msg = e00e46c96dec5cb36cf4732048376657bcd1eff08ccc05df734168ae5cc07a0ad5f25081c07d098a4b285ec623407b85e53a0d8cd6999d16d3131c188befbfc9ebb10d62daf9 +MD = 3571326a1577c400b967ac1c26df2a0dcf5db7070eac262a8071da16afa7c419 + +Len = 568 +Msg = 981f41a83d8f17f71fc03f915a30cd8ac91d99aa1b49ef5c29fb88c68646b93a588debcd67474b457400c339cca028731df0b599875ab80df6f18b11b0b1c62f2a07b3d8209402 +MD = 62aea8760759a996f4d855e99bcd79e9a57ea362522d9b42fd82c12c9294a217 + +Len = 576 +Msg = 5c589fc54fefc4d6e2249a36583e1992fc6b8a9c070e8e00c45a639af22063e66ae5cdb80238c82db043a5e1f39f65626e6d7be5d6a2d3380fa212f89211200412e5e4315fc04e40 +MD = 18deba74e9d93ae7df93c6c316ef201bf5e3a661e68868e14d4f56264f5d858c + +Len = 584 +Msg = 7c8691e7b2560fe87fcc5e2877f7e3c84d9101eca4818f6322a58986c6cf05627c0d6919ef2edc859f81fa1f33e0cc1f10edf7e52a9c33981af2ff0d720c94ea4d62170b2a4d1224fa +MD = 5a5a438b57c1b3ce8756094252362afeaa9fc91cd45b385d16994ec8af49aa6b + +Len = 592 +Msg = 97359b564b2bc20800ed1e5151b4d2581a0427ce9539d324c3637cfb0e5378dc2cf6d72946e2a3535a2f664ede88ed42a6814c84072b22c43de71e880a77c2d9a05b673bc15a82e3255f +MD = be54f2e435f760d5b77c0ae61ef0aa7f5f3366f47819f350dc8a39aff8c73a8f + +Len = 600 +Msg = a0dfaecd3e307c5ddf9a93603f7e19725a779218734904525b14586ff0ce0425e4efe7e1c06e745c28ed136f6031c4280fd4061d433ef700b6d1bc745064231fecf387015f94f504b6ad8c +MD = 60d80f1c703dad5da93db222fb45fb7fa768c8aa2787f4b81f1e00365b8f49e2 + +Len = 608 +Msg = 568d66d061306c3419a1928ce7edc8e3400c30998f09bdac6f63ff351eb23d362e8dc5927eac805d694ac9563dcd7fb2efa9591c0d827af9f39146f0424873aa8e3963d65734b1713baf0a44 +MD = 7a4fe37f296991121792dd7c2c30390725a1eebbf20b766a5a1c3c6c3646d996 + +Len = 616 +Msg = d65b9f881d1fc7f17d6dd429faca8404e6ce60fba7d89b7fba003c8ef84d8083182979327611fc341291ba80dc70ad3b2f28b6d29b988445e7fdb7c6561f45822ac81dbf677a0b27d961dc6358 +MD = 51cc71b6934afcf28fa49942b76323f36cd6a0aecc5a0e49c10994ddcabdbb80 + +Len = 624 +Msg = 711c88adf13e7a0e694652f2b9a397543f4937fafb4ccca7f1ad1d93cf74e818d0fedfaee099f019014ec9e1edfe9c03fdb11fe6492ad89011bf971a5c674461de15daff1f44b47adad308baa314 +MD = 1780e52e306858478290c46b04d8068f078a7f6ad8e3790a68fc40dccfbdadc9 + +Len = 632 +Msg = f714a27cd2d1bc754f5e4972ab940d366a754e029b6536655d977956a2c53880332424ddf597e6866a22bfca7aa26b7d74bc4c925014c4ed37bfe37245fa42628d1c2ee75dc909edc469ee3452d894 +MD = f4afa72f3e489ad473dc247aae353da99fb005b490e2c4e1f5bd16a99732b100 + +Len = 640 +Msg = fe0c3280422c4ef6c82116e947da89f344d6ff997bf1aec6807e7379a695d0ba20ae31d2666f73bbdbc3a6d6ac2c12dcfb5a79173dfc9cd2e0d6000e3114f2767edec995772c6b47dadc136d500251e5 +MD = 89198e2363efd4e0ba7a8a45f690f02712e6f856668517bae118d11e9a9dc7cc + +Len = 648 +Msg = 02e238461d0a99d49c4cd16f442edf682c39b93114fc3d79f8546a99e5ead02f0cfc45081561da44b5c70eb48340418707fd6b2614580d5c581868ba32f1ee3ac34bf6224845b32ba7f867e34700d45025 +MD = abef81b33591eedcac0cf32fb5a91c931f2d719c37801409133552170ce50dbf + +Len = 656 +Msg = fb7c8cd4031007f8159d5c4c6120dee6777a3ace0a245b56f31e8aae7828dab3cf35c308de1d0d684592ef3a9e55796603a92f68d109f7a3ac1635f7c4d334955614c812753431bb0a0743291a0fc41547f3 +MD = 5a67284d39e4f37caa64ca1a54593c35f6d8f3a3ec20d460393a39f6f57c4486 + +Len = 664 +Msg = 6b2e868c7d0ee1c240d3a67e2fdf36e8e23817c02644a54453d10454da5859d41e833a5285ec63e8ce28aa64a50435a7740eea4b7d5827892678b35993d3f5da7a1c64f533173f3d0fa37e1aebf70827052c26 +MD = aecf5dab6fea9ffd1bce2cdfeec0bee9d214a669e8306d5b6688afa8957fc91f + +Len = 672 +Msg = e5f3ba000c43bb6aca4e0a711a75912a48241cffa5b4b0b17f901f9e5097d94036c205f7a307d008567d05e58ac0dfaf6d971bf9d3d450cf2c7c83f6b328f676e9ab425642f5a5a71e389dc4fa49b6d7e848a09f +MD = 182d6e4316f4bc18d7163b1b21462d99f99c6f34d2c00ee771ce54fd6c5018b9 + +Len = 680 +Msg = 939c61e68af5e2fdb75a2eebb159a85b0c87a126ce22701622f5c5ef517c3ab0ed492b1650a6c862457c685c04732198645b95f84ccb0e726a07ce132827a044dc76b34d3f19a81721f1ea365bc23e2604949bd5e8 +MD = 121057b0b9a627be07dc54e7d1b719f0a3df9d20d29a03a38b5df0a51503df93 + +Len = 688 +Msg = 9eadaf4811a604c65eaa7b1c6e89f2c0ab96bebec25a950ba78aac16d9371ca1e7458acf331e077ef6a735d68474ab22d2389bdf357fb2136c9f40e1e1eb99592c2bbb95d94931016b4d37faa08b1e9bf71bf2d3708a +MD = c237194b902e48dca5bd096cb51562079d0cdccb2af8088197676c17b0896be2 + +Len = 696 +Msg = 71dcca239dced2ac5cc49a9bf9ea69a99be22ba62216716b524db80f337dee5eb7e032869e4adc1497babd1fa82fa8c3cfbd30d2eadfb4c5d40f99f9d194d7182c9cb7d41e8adbdcf2917e086782fdd756e2961c944070 +MD = 377d1cffb626735810b613fd31ef9bbb4577cd752521abe3a41afa921e623da0 + +Len = 704 +Msg = ea130d3236bca7dffb4b9e50e805309a503e7347227aeb9f1bd15c263a98dd65753d2eedaa734b9ad88f41158f32419ca529f3062b910c019f3f239f635fc1116e5ab7b242feb4471ed9168474e501d39d6bae52cc21061a +MD = 85c7a52d53f7b41162ea9f1ef0d07c3fb8f0ec621617f88cb3828ebe5388ab3d + +Len = 712 +Msg = 28f1be1156792af95c6f72e971bf1b64e0127b7653ff1e8c527f698907a27d1544815e38c7745529bc859260832416f2b41cd01e60c506239a7bf7553650bf70d1fe7a2c1220ac122ea1e18db27490447d8545a70bf0ffc8fa +MD = b2eb3762a743d252567796692863b55636cb088e75527efd7306a2f6e3a48a85 + +Len = 720 +Msg = c8400ef09c13e8acc8a72258f5d1d20302c6e43b53250c2f6c38ff15be77e3cac04d04b8421fc8fdff8be5ca71edd108e9287b42dea338bf859100eea376da08a0e695f0dc90b95e467cbd3c2a917a504a5ae01c310ae802c4bd +MD = 69966e89b7bc7f39cd85791b92180ff3fed658d8240e393e1e6d7c24b8d0ac95 + +Len = 728 +Msg = a48950c961438e09f4d054ac66a498e5f1a4f6eabfde9b4bf5776182f0e43bcbce5dd436318f73fa3f92220cee1a0ff07ef132d047a530cbb47e808f90b2cc2a80dc9a1dd1ab2bb274d7a390475a6b8d97dcd4c3e26ffde6e17cf6 +MD = 44c00cf622beca0fad08539ea466dcbe4476aef6b277c450ce8282fbc9a49111 + +Len = 736 +Msg = e543edcff8c094c0b329c8190b31c03fa86f06ace957918728692d783fa824ba4a4e1772afbe2d3f5cba701250d673405d2c38d52c52522c818947bcc0373835b198c4cc80b029d20884ac8c50893c3f565d528a0cb51bf8a197d9d6 +MD = 6d5260384f3cefd3758fb900dcba3730d2b23cee03d197abeff01369dc73c180 + +Len = 744 +Msg = 4e10ab631718aa5f6e69ee2c7e17908ec82cb81667e508f6981f3814790cfd5d112a305c91762c0bd9dd78e93ef3a64c8be77af945b74ff234a0b78f1ed962d0d68041f276d5ea40e8a63f2cab0a4a9ed3526c8c523db7cb776b9825b4 +MD = d88e5f3b2d0a698fd943233760a3000a3360d9040e7374b22e39ea58d868102d + +Len = 752 +Msg = 604d8842855354811cd736d95c7f46d043a194048b64bf6cda22c3e0391113dcc723e881ae2ad8dc5740aa6bda6669ddb96bb71acd10648380693f7b3d862c262553777004bd6852831618519fbb824759f4dd65af1b2a79cc01096d7c8d +MD = 8a8ab6cf5c02b9ae8f4c170740eff1592f3eda11d3420ac8b421d93cfbb35db8 + +Len = 760 +Msg = 628180e14f41ebdfde3b4439de55ee9cd743d41040f3457ef2280370dd659619fa0ce69580c709725b275a6eda8bcb82a8447c20fdf68cba15412f83e2a10079fe9399a3e3fa61975ec0a64041c0ecde59e4844e9f8a608cb22d2576854182 +MD = 8d154bf6f9cb72efc0d8b3927a8f690060d1d48bbe5cc72094d2c8b149a75132 + +Len = 768 +Msg = fc150b1619d5c344d615e86fca1a723f4eeb24fbe21b12facde3615a04744ef54d8a7191a4454357de35df878cb305692278648759681919d1af73c1fb0ff9783678aec838da933db0376e1629fcca3f32913f84bc2ff3ffc3f261d2312f591c +MD = 3f626c8bb20a132495bd3022b3fcd0ce0604b91a9d70132dab4099f73dde23d5 + +Len = 776 +Msg = 6dadbecdd15e5646e3f37a6fe5b328e06113cce3c8cf07285939afba44d117321017902b3a9d2ff51f60d18e1b585dcdf34e49e170ee60fa4d1dc246548d2c1fc38e7983f42769c43d65a28016f3f4d479ebe1cd8fec5d1f886dd21aca5067d94f +MD = 9098ea34c40b541b153e80a8bd92da19432b18b7d329760b302f8a54c395dd06 + +Len = 784 +Msg = 9cc5fd3035b72dc63b8c3c326fd013081e6b8716f526d3fe176b45256d4c37cc3dc8417dff49ada96c702b8fd715c65fc08a17a0a720b9cf1eedfd4922ccde6baba437f782ee33b95371056b0350dad743470c3b663299f16fcfd34f6fc459cd0ee4 +MD = b0c04f24bb6d3d4fcbfdf9222d0e886f1eb60a0566a478085f7623a025a5b981 + +Len = 792 +Msg = f3f063fbcf2d74aa5a02d240c962ed7bb119b3a212bdb41594e28428108e613152ed16e01e451fcf702b0e5a08f82eb12677652b93e05fdee00ae86cf2dc9a1fbf05b93952ec5b8515eacc324fb830e1ec236afd7d073d4b7f7ab1c2e048b99cbfa012 +MD = f930d79360b581b1bbfdeac57133a339444f5c44538c921631eabaf058277d32 + +Len = 800 +Msg = 840739a3d6992c13ec63e6dbf46f9d6875b2bd87d8878a7b265c074e13ab17643c2de356ad4a7bfda6d3c0cc9ff381638963e46257de087bbdd5e8cc3763836b4e833a421781791dfcae9901be5805c0bbf99cca6daf574634ec2c61556f32e642730510 +MD = 19795657e08cfbb247a17cf209a4905f46e4ddf58eea47feee0be9bb9f5c460f + +Len = 808 +Msg = 4a51b49393ab4d1b44fb6dc6628855a34e7c94d13b8b2142e5d5a7bf810e202cefdca50e3780844a33b9942f89e5c5b7dd6afb0a44541d44fb40687859780af5025fecc85e10cf8249429a3b0c6ff2d68c350c87c2fcbf936bd9de5701b2c48ce9a330c9ee +MD = 128fb4114e43eefd19277c708be9e6873e66d7fd59c58a1485b7b015facfa795 + +Len = 816 +Msg = afc309e6b7b74dfb0d368e3894266fc4a706c3325e21f5550d07a6560e3d9703c134ca6ad078e4a7b82ad6fa85b0bc1ddcab05d43f29d5c58d1da78ac80c37051b089ff31ce2c0c44e9ce3abea1da0f1df28008e178fdefafca493413bf1d256c729d0a9225e +MD = 03e782b01a4ba10f640470bb3cae487eb9cbbaab8c9941978b194f6a312cf79e + +Len = 824 +Msg = c5ae750f2230642092397b84ad5526c46ae9480ada16892816e0f2db7690b751035653ea2f33da3cc4168b591b46a5548eff7d012f60ccfdbb854deec9f0880c472de8e127b5144c56147cccee4732fbac68fc59a48da74b33ed9e643644bbe279795c7c737eba +MD = f64b7ab243ce6e6c04b483888ba8a655465c21d95eb60c7b8d6e566a3811bae2 + +Len = 832 +Msg = 603e13f61499e12ec6b33b68847a281d314f54dc705c0f3fc428981ff5689c04b519fadf83cbc9fcd0409c326035045df480570e265bb080940037ce4076a36437aafdb371c1a62af9ad9b614dfef89708fbbb5ebef2cb9528cc399781e4c5b22f1aa4dba623809f +MD = 5f76962fd3d373e5db2953c0823a51fe81f874450bedf7e46876394b04d3ef66 + +Len = 840 +Msg = e03115cfa19efcd796da389063c4be6acce684d983f8edfb3da6887b0b94fbb5e89e3a1a8e64fdd68f0670b1a02c2c33384a660c5a2266b3ae8a3b4cd76faecf011a7467b9b2a818020278a5a57d1eb1c87f1224c2d67dd02e81f1553eb75841532c2b7cca8fe5e418 +MD = d107ee6ee4a58871a33c49657faa2573e475f11918c4a4e3801d0e17fb93c6e3 + +Len = 848 +Msg = 0e6c1d58b1b9d3a2d399aafd60529e07d483a2755bb7e44c373b5355632d5fca76d6ff56c93af93ddcec5ed6f62753420c1b1758e48542df7b824b00a3a54dfaf0470b18d51e31e10b12dd8e324b5dc1bb8f3b7305cb762ec6ef137dadffd4a2466748861d9004f626b0 +MD = 02ab2dbb02944354799051247b1a25c19f3696e1afcb502b859e83798b33fd77 + +Len = 856 +Msg = 6db2a43a229b10c3629249fc5136468b4d84df7b89ec90ebf7aa7a036c53aa2dffae9e81b2c60580543dc706a5e3457abc87e248a60ec29150c2d221a6ec08a1fda4ec0daee8576904ec7ab059b1230e7bd93c4e55ba9496cbb1e352e5b8086e303b94c861288ce53c466b +MD = 8cc4d39b2f5ba0bc9d2ee2a8777cf08533e60cc69b65a7b31c5c2121193aa31e + +Len = 864 +Msg = 31d995f7ff8b6de70829a8336c610f10df2c866107a4922b25151849f8566861df5a79163d02767f21357ad82733997899261f03dafb1ce1056f20efd16d4374b89768565823c38e19e899d910b847b023f1867b6e4fed02e604b8243c0bc7cb05b9ea1f17955bfa36698c9c +MD = c99c7191b34c9ad3f941d4ad442cc865205cbb4c2a6927c592e831cbc4d36fcf + +Len = 872 +Msg = cb0b8cb7de621c8e0a0fc6be2fc18d0e8818a2c2dd0b3219fa87831a61583f903c4d105495976ccac973b3ae3a09771145931a9e74c19f22f45cba4c492b29b1401347122581dfe2370d3e0359578cd10a355c619711810a8f8c232578671312c0a45c7cf7e81bdd3b249044f3 +MD = 6d2f57a7e42b35369cf2cd60caf9e65aca7d9aa019e6824bb806348f1acf3c7c + +Len = 880 +Msg = 48dff78aed5f6e823054924a78dc1b8e51a117f1610181529f6d164ebf0f6406f0b02422cad8c916823759a361437ca17423d3fd84cc8afe486a31ccda01c732685418a32c064a7b9effb288e811ecc99adb2a759feecc3f702f31d9877dcdb717937c15fa2f163bea744400f58c +MD = 14b631f0f00a3024ad1810dabf02711e28449668abe27f69380942268968d4f6 + +Len = 888 +Msg = 06cc9fa542ceb35c88fb6ab82c29d5dcd530f807d3f1c3bcb3974421101d1aa6ac112de6bf979cd28eb0f70c40bcaf91ed3eca9bf9e0dbc6a0b73271d1c7506740ca9ebfb72d5e00ac5ce189193ffa308804b42a6d20402bb99031cdac65ec36eb7f59f5d299df2e0b8690f760b9a0 +MD = 574fd82a9fceb8f7bbbf244d16e0412cbda8153b720846c32b8f10fe5779a881 + +Len = 896 +Msg = 8d93627c0b7cbf61a7fe70e78c2c8ed23b1344b4cfed31bd85980dd37b4690e5b8758f7d6d2269957a39a1ac3451cc196696ae9e9606a04089e13456095a1ce1e593481b3ac84f53f1cb10f789b099f316c948398ad52fa13474bdf486de9b431bd5d57ef9d83a42139a05f112b2bd08 +MD = 344ec86642eabb206b2fd930e4c5dde78aa878577d6c271cb0069d4999495652 + +Len = 904 +Msg = d0af484b8be6b41c1971ae9d90650a1e894356c9191d6be303fa424f2b7c09544ec076a0f1865c8c97927ca137529d5bedc0df2ef08a4cc7c470b094b1eeaa86731c041633d24086b60f7369d59c57652dec9b3817477df9db289ba020e306c9a78a99b539128992deb23cfc508c5fc3af +MD = b7ba998726477c32792e9c3eddc1cb6feb7c3933e49f2e7590d8ce7a2113e6f8 + +Len = 912 +Msg = b212f7ef04ffcdcf72c39a6309486c0eeb390ff8f218d6bd978b976612f7f898c350e90bd130723e1126af69295019b4f52c06a629ab74e03887020b75d73f0f78e12785c42feb70a7e5f12761511c9688c44da6aaa02afa35b31edc94c3a0779b6ab9462525c0ccfba76986f873fe1e6ba9 +MD = 2f26b96c1fa3f3dee728f17584e733b4189821c659b8885a5fb1d12d60d2aaa9 + +Len = 920 +Msg = 86591ada83fba8175a0fe91d264e7f9b2df97ee4c32570e76b579d6140508951932abdadd6a4ca53b8bb8c42927aac0a02126881d52d97b82b80e72dd59f6a42021651ee1bb5f7b3eb2b21d003d784b75dda87c13f714b216282e8175474fa661b445d071bd5341f3a88302f410d0f8a857962 +MD = e3edbc8c42ce5d2384dfb24fb1de5d4798b1bc3cc78c97033894040dfa6feb6c + +Len = 928 +Msg = 92b5a8e84b6a2ac4d5b1e61d63804abd641dd630058ec6d5f752f135724ef1947a0a84c6611d32448de6307f7b7d857404e96b81df94f87768fcfdf09faa2fe37468847542afe012995ff1bd40b257a47a7309f8896bf4fb711de55bfeb3a8be0837729ef6067c578182f17ebb080a754f22773c +MD = 80ed0a702812297c2aa1b6b4b530c2b5ed17ecfba6d51791cf152d4303ced2e6 + +Len = 936 +Msg = d284a0a9a4de5d4c68cc23884c95ad7619aa39b20a2cf401deaeb3362c3ce356f79cc3fa82d3d1f565ec8137e1f435f171496afaa1152f722315dca5209f0031cce39b6c3d718e007dfb4fd8de5ce1408dda04476aa8a96817afa86a4f8fb5857ae091c67ebd7db5d783f434ead699aa96e56f610d +MD = 654eccefd0a4fdb2ac0ab56288c64399b37bc4d57ff4a9f1cce94362fc491bda + +Len = 944 +Msg = f57f0f8795385b805246a0a2573afc274346a9eccf50c626b0455a50bfb09668578b5a5afe54fbbd486444bdf97dba586aa224ce2e2b4b52f418ff06afa65a26f5204983a5f84734cd166c88cb70a73fb2db48f9ef20c1ee2c53ade07460114e98e7e2ebd24ac84ea90422eb143c4a42e2991a565959 +MD = 135ec8b144a667dceae8fadd287df81c10ef3ebef87ff2fb56e60ae708a88f3b + +Len = 952 +Msg = 2a41a52e6578873588a57f11f1be7c7eb398d01f3bfdec2c33fe6b65a68a534a6540978daa82e0c8fccb8c6c5242f7f97b8ffa75bdedb217bd8083439eea5cbb6d193c13bd62f5658ed4304774c6b1faf5b3dce432487840cabab415fb5d67640a739ca6e5414e760869708a9d7331e7e7ad7d55e035c7 +MD = a6a1b8a26f6f440f19f16dce1d3001477d73ee7f6c374bce2922167b81970d6a + +Len = 960 +Msg = 4d11aa5d3c6b6900f49ff90dd815744572be5648b64bde638b9db7a9877dd745fa8ea80e2f7f655cee85c71a4509e21d899e49b4973579815f947587a404ad83fd4a248020d9d2a65f46485373fc926d793161f63a196ae0af590923c5be2a0e5d2f69da97e0788550c9c1dee9574ddc4a61e533275d7729 +MD = fc5159f0ddd6d765c85fcc3fc3ac1dc0d317d8ea0b110e96ac9f7a398dc386c5 + +Len = 968 +Msg = 05cd99bfe031d123ca7061d3de0956f4bbf164bad792db881713d6599ddab55ee24fcee804e360896152c8766424f8309f7a24641a07be0feb5da5e5076a9af45842f385101f93433ca5199f9c6b5872b2b808e4198aba8e18dd12db772930b4912d6f5cabeb529884f4bb142de55e021b3276047b22b64cc5 +MD = 8aa07742e6f1f47ad020ed6684edc8dba4af36b782955f0f972be3ae980aea0e + +Len = 976 +Msg = 529684398d68bdc19e7a00ce32cc1a8c1315b97f07137474f61f0cb84a04f2879b1109c78c6dacf7f0abf362329e3298f36fc31ef4ec06653723a5f961301dfb63537ad15946611cb2cd54ea928e322e7423fd6d146ee0b98c2c71e3bdcd33edf0845fbebd9ae4192d07acd01b432135e05af0d22f3f0c5a3d62 +MD = a07049b6ebd7b355479a3d802fda436b83ae6747d741cf9626f7c62f47cbd563 + +Len = 984 +Msg = 982fb5f4af498a4a75e33a033235ea3ddb70d9d236519f883ff5b388cbef30126b98d96e93a65a26fb00d17246d18cf4e2db14a52f0f6b10e35a93beadc14ff118b02e95b38fc4736f973ba848e40b5527cb0599076d96bc578c4aada09e8faf6820bc4f562d5199974f808b7f95edca74e6b3940894a7f66534e0 +MD = 09c60fec5a089a23f5da3ed2492aa21fcf7aa36183850fafc15ae8c63f596db0 + +Len = 992 +Msg = ca88614828f8acdb5fcffab6bb2fb62d932b7808e4d9cc3139a835b0cef471d9f4d8ffc4b744dffebf4f997e74ce80db662538bceb5d768f0a77077e9700149ea0e6a46a088a62717216a14b60119dd19c31038ed870b4709161c6c339c5cc60945a582263f3be9a40cd1a04c921947900f6e266f2390f3c970f7b69 +MD = fe2d4183ccdaa816b4446a9b6c07d0ba4b42ac743599db5dc482b1941f443c71 + +Len = 1000 +Msg = ab6b92daf83275cb9c1b76cfb59fbcc8ac53188e0b6980918e7ac0c07c836ca9372d19e11251cca664bbb3c3db2e13b412a9820b65e95612042f5db24643cf9340b9808597735a1f92670ba573a2fb2f088d81087d70565574344af7576d35b2ed98318e2ca0067d4fa8e63f28045b83b6887d4ffa0668a10712ed5759 +MD = 744538e1ae1cd7357710b56c3bc6f1bd7a8564118a1e0f9acc30fcf0b5396eef + +Len = 1008 +Msg = bfd4c7c8e90858ccf9c8834abefd9c1846ca4a11966fdd139d6de24a6bebf4b19f58d5d51e52bddd0bc6f1c7f35998f44707cae7100aeb4adefe373101429da3fca1d15737329dbbf47c783a84de59bfbb2fcd75a1a148d26aebb8d3a9a76089c0f8e4d49b71a06f9e323e2cdb54888189887a44b1fa9cb32b7c8fb7c9e0 +MD = 58b17843bc851a721c5a258eef57b3854d02190e732d9b8e7a9f926ac409c173 + +Len = 1016 +Msg = c5019433c285da2bb93f119e58b4f36cd1e4d99dda35dbf4f8ae39c7fe65fa0ed03bd2b96dc649472d8f1a94477ed9f29592d97c9cd54da7c790ad1af3bb5cc030b7871bc64050db779d2caf0419895bf3b7b50b8e22fbe62fe30fe7bbd6ace86ddf7b00d5d9370f20cf0f97996f4bce70bb33f1ba022cdaba0f25d55fa031 +MD = f7c92a3fb7f180370d628be78de874d693f74ccc7a54c741634258d8c512fd7f + +Len = 1024 +Msg = 84b60cb3720bf29748483cf7abd0d1f1d9380459dfa968460c86e5d1a54f0b19dac6a78bf9509460e29dd466bb8bdf04e5483b782eb74d6448166f897add43d295e946942ad9a814fab95b4aaede6ae4c8108c8edaeff971f58f7cf96566c9dc9b6812586b70d5bc78e2f829ec8e179a6cd81d224b161175fd3a33aacfb1483f +MD = 8814630a39dcb99792cc4e08cae5dd078973d15cd19f17bacf04deda9e62c45f + +Len = 1032 +Msg = 14365d3301150d7c5ba6bb8c1fc26e9dab218fc5d01c9ed528b72482aadee9c27bef667907797d55514468f68791f053daa2df598d7db7d54beea493bdcbb0c75c7b36ad84b9996dca96354190bd96d9d7fbe8ff54ffaf77c55eb92985da50825ee3b4179f5ec88b6fa60bb361d0caf9493494fe4d28ef843f0f498a2a9331b82a +MD = 9b690531dee948a9c559a2e0efab2ec824151a9175f2730a030b748d07cbaa7f + +Len = 1040 +Msg = 4a757db93f6d4c6529211d70d5f8491799c0f73ae7f24bbd2138db2eaf2c63a85063b9f7adaa03fc348f275323248334e3ffdf9798859f9cf6693d29566ff7d50976c505ecb58e543c459b39acdf4ce4b5e80a682eaa7c1f1ce5fe4acb864ff91eb6892b23165735ea49626898b40ceeb78161f5d0ea4a103cb404d937f9d1dc362b +MD = 1ac7cc7e2e8ea14fb1b90096f41265100712c5dd41519d78b2786cfb6355af72 + +Len = 1048 +Msg = da11c39c77250f6264dda4b096341ff9c4cc2c900633b20ea1664bf32193f790a923112488f882450cf334819bbaca46ffb88eff0265aa803bc79ca42739e4347c6bff0bb9aa99780261ffe42be0d3b5135d03723338fb2776841a0b4bc26360f9ef769b34c2bec5ed2feb216e2fa30fa5c37430c0360ecbfba3af6fb6b8dedacbb95c +MD = c163cd43de224ac5c262ae39db746cfcad66074ebaec4a6da23d86b310520f21 + +Len = 1056 +Msg = 3341ca020d4835838b0d6c8f93aaaebb7af60730d208c85283f6369f1ee27fd96d38f2674f316ef9c29c1b6b42dd59ec5236f65f5845a401adceaa4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afed86bfe53 +MD = 6c3e93f2b49f493344cc3eb1e9454f79363032beee2f7ea65b3d994b5cae438f + +Len = 1064 +Msg = 989fc49594afc73405bacee4dbbe7135804f800368de39e2ea3bbec04e59c6c52752927ee3aa233ba0d8aab5410240f4c109d770c8c570777c928fce9a0bec9bc5156c821e204f0f14a9ab547e0319d3e758ae9e28eb2dbc3d9f7acf51bd52f41bf23aeb6d97b5780a35ba08b94965989744edd3b1d6d67ad26c68099af85f98d0f0e4fff9 +MD = b10adeb6a9395a48788931d45a7b4e4f69300a76d8b716c40c614c3113a0f051 + +Len = 1072 +Msg = e5022f4c7dfe2dbd207105e2f27aaedd5a765c27c0bc60de958b49609440501848ccf398cf66dfe8dd7d131e04f1432f32827a057b8904d218e68ba3b0398038d755bd13d5f168cfa8a11ab34c0540873940c2a62eace3552dcd6953c683fdb29983d4e417078f1988c560c9521e6f8c78997c32618fc510db282a985f868f2d973f82351d11 +MD = 3293a4b9aeb8a65e1014d3847500ffc8241594e9c4564cbd7ce978bfa50767fe + +Len = 1080 +Msg = b1f6076509938432145bb15dbe1a7b2e007934be5f753908b50fd24333455970a7429f2ffbd28bd6fe1804c4688311f318fe3fcd9f6744410243e115bcb00d7e039a4fee4c326c2d119c42abd2e8f4155a44472643704cc0bc72403b8a8ab0fd4d68e04a059d6e5ed45033b906326abb4eb4147052779bad6a03b55ca5bd8b140e131bed2dfada +MD = f82d9602b231d332d902cb6436b15aef89acc591cb8626233ced20c0a6e80d7a + +Len = 1088 +Msg = 56ea14d7fcb0db748ff649aaa5d0afdc2357528a9aad6076d73b2805b53d89e73681abfad26bee6c0f3d20215295f354f538ae80990d2281be6de0f6919aa9eb048c26b524f4d91ca87b54c0c54aa9b54ad02171e8bf31e8d158a9f586e92ffce994ecce9a5185cc80364d50a6f7b94849a914242fcb73f33a86ecc83c3403630d20650ddb8cd9c4 +MD = 4beae3515ba35ec8cbd1d94567e22b0d7809c466abfbafe9610349597ba15b45 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp new file mode 100755 index 000000000000..33de8707f243 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp @@ -0,0 +1,408 @@ +# CAVS 19.0 +# "SHA3-384 LongMsg" information for "SHA3AllBytes1-28-16" +# SHA3-384 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:46 2016 + +[L = 384] + +Len = 1672 +Msg = 5fe35923b4e0af7dd24971812a58425519850a506dfa9b0d254795be785786c319a2567cbaa5e35bcf8fe83d943e23fa5169b73adc1fcf8b607084b15e6a013df147e46256e4e803ab75c110f77848136be7d806e8b2f868c16c3a90c14463407038cb7d9285079ef162c6a45cedf9c9f066375c969b5fcbcda37f02aacff4f31cded3767570885426bebd9eca877e44674e9ae2f0c24cdd0e7e1aaf1ff2fe7f80a1c4f5078eb34cd4f06fa94a2d1eab5806ca43fd0f06c60b63d5402b95c70c21ea65a151c5cfaf8262a46be3c722264b +MD = 3054d249f916a6039b2a9c3ebec1418791a0608a170e6d36486035e5f92635eaba98072a85373cb54e2ae3f982ce132b + +Len = 2512 +Msg = 035adcb639e5f28bb5c88658f45c1ce0be16e7dafe083b98d0ab45e8dcdbfa38e3234dfd973ba555b0cf8eea3c82ae1a3633fc565b7f2cc839876d3989f35731be371f60de140e3c916231ec780e5165bf5f25d3f67dc73a1c33655dfdf439dfbf1cbba8b779158a810ad7244f06ec078120cd18760af436a238941ce1e687880b5c879dc971a285a74ee85c6a746749a30159ee842e9b03f31d613dddd22975cd7fed06bd049d772cb6cc5a705faa734e87321dc8f2a4ea366a368a98bf06ee2b0b54ac3a3aeea637caebe70ad09ccda93cc06de95df73394a87ac9bbb5083a4d8a2458e91c7d5bf113aecae0ce279fdda76ba690787d26345e94c3edbc16a35c83c4d071b132dd81187bcd9961323011509c8f644a1c0a3f14ee40d7dd186f807f9edc7c02f6761061bbb6dd91a6c96ec0b9f10edbbd29dc52 +MD = 02535d86cc7518484a2a238c921b739b1704a50370a2924abf39958c5976e658dc5e87440063112459bddb40308b1c70 + +Len = 3352 +Msg = 7f25b2c0eb1a6911cc3328fcdcd40f28f010375f7b1b51a05402896fb999b17093b59b34fb9cc653feba3dbb9d96bd47180416946d9bd3101b691d532be6ddb3712721121054c1fb3c5c42ee44e7faf7cf8d75856545187a3220047f07373e9aa2e10c022f2aa2320f81fd3cd7b110609c131edd6e016707228d069a55731a4ead4d24ab6206b01ffd91384e60db45a907fed7428db707de721aeb4c1b84baf61ad230b6b0d034eb90f4b9cbe64de2fb98b6695dcc4f4129aa2e7a3f635166bb72d7faca227076bd5013495c72ef2e7dd8a39cd532b15d0d53307c1834c265c53cc64890becfbebec454afa90ba973584e2d3752c7c6a3b4f48aba8297bf013b0006e3b08ed354157420b559b963f7b383bd047e94745a4615a3f9239230804547ff93d19a657fece8e02114840504b7fdb9c9fea0a4ccea3ee304a330fd2b0d97191f9be86e8968a9fabc847577e08b468b4f7df43f3fc9f8b2a2ab760f4ab87bbc51b883d4b8b33ed84e4f93a1d359e6995ea1962bfc0bca789ae36e4c25717850efcd708155f52fe09f1de76b2746634dbe1290524bd73d9db5f21f9d035e183dc2 +MD = 927962c873a69caa05cadc1cb485eb1cbb07748e47d942192df4af9233f42b95a638918306ae83a8237d21c2824f666d + +Len = 4192 +Msg = 386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f242 +MD = d30ec9a7baeabe40f6648a624dddf8721c89542e258f0fa9afcc9e68433faef781824048b0b771a94e8f0c17a403f9fb + +Len = 5032 +Msg = 8c569727f1d4548f1c66a5c830346259612d10c5fef90518ae2fcdbffac9cd9c0bd5265ab56ddcfeb5e838bf37526a189c1a731b790b4208e37d1d1eeacd43b1630ad07debf1e03a281cf7715276a18df2f25535ea7d9fd9b6317f8bf1cb0c111b5f5c38994aa86bfd69ac8388884de1ed1d7eba583764b3afb1b8ae18ab6ee3bb3a9432c95f7cb7bd361da0e270b73b1503b653cc20d9bd5766932e6655b250cc053e148218a449efed136e661627c4f10dc5a84d22462035b8d7b4e4b11f7fd5272385cd5d67471bf556951e63e4a409a17260e324f203d2104be798a8ff985e080b2eb1160fdacab6aebe123d3802e5298624960f268fb4d4b9708c2098c5ef10beb6362be2298298e391498e69060e0bca9b6fc92aec656ee7f6c802342c11a703c76484295dce03bcb5cb3cc0da0bb1036e753b46416d449d22523719f54b35a306440a2b9d335f03d3a03085a36481fc44b14dc2b652c0a59c34a68f492622671ddda332123b147e92d153008ca2e57cc629e8e5759e48c60b7636e05029d614b4373884e36d8af69b648c79ba4c444a9ce7f2f8a3d846c7171ed15231dcba75725bb26a395129329564c23758ea052f6df355436b89217169365e2f15c734510050f72c3c705afc29d6df838c0492f3e153f70ef338418ca9c5c4bd2373ad6f051ef1121351831affc4caa57e23525ea111c2a1636d0ee07fd4ed4584678e982ace8664e77d0e55be356be558cead3755359c43e4b1f034916ac00e5f2b3d941767a069df7a61750e32aa8a3f8e0b48a5c56f3e9e8a4f518a8f2562dd48242b73f1266a24d2e64299c26fde5dead45737cb22d8b8839300104b04872645a925e77500afdd0c038404eda227da6a702db64e +MD = 91e24f999cac1b9ab9ae456ecf47b52c1144ffd1df2d95feb05fce930e37ff767a005cf07bb7af45c8a73585e8544965 + +Len = 5872 +Msg = eeaa4e8e343caa827d348cba7d83f4c6cf69f00b968a6174654501655c41a5f19448c04cbe59298306f81e6a3ec988d6385d800d734c137bfa8442a78ae04d65f3fd324cc049706a1a5c1037ea8ce6c83ebb1545ee74d19d7f3769784710846ed26eaa76853307a181086c08cbf39702a92bb49b4f2b2442ba057cc2ddf9d174fb4633b25440778e03a33ac4272722ee415467f7dd9892d27597856c92c2bcdf342bd2e87497479b68d58055474f0ff3cddf3541e1e4a5b576948b5eaf94cd1746c691002e62ff2f774848a27394e77817732761a336e55486a597807b968d84f9be77e2cac628b1f9a19993f21e31e7e5b943406bb7d9156c72b0ba40f1838e14bb8c7790ed498bb78b7c100e1475a7005993c4818e0961f2a2def444cc389e6167d9a5c7ffea2476acf7010d9e3c2030fa1fd62ce5fda1dedd2916d150321aa6676555b92393e401ac154e38e60cba3c44ed5fb6e13e3bf9cd9a082da4fb6cac663970ac82cd331f34dbe0d71170ddeee1084565ac53990b1838b2a0f21bfa3b0a5bdce9441f7997ec539d324aedf10c767572826ec421dc660cfc745f182e1bfbd583b890121e327b846e90b70d5e5fae3dcc544e1a3d33601ccfef157c6f13e2af4b608e2d8ab88a763b3b80578caf2e693d2575dc54d9ad72115b3cce24ec67ef1e2b68f826f1c032ed79ce53e4c4a101ac3b0b92cd97f616acfefb97b76e319fe35f43fb58a4c6bf6a93c98acc65ad0b00e037c41233e30e86217b5e8f61e9c682454abf899b43259cd19883ad5cfa91235921fb8a751b64890be4ab148d366de225a2cb229ce06d6a7a64c6f06f319afcf1f2be9d2747209c065d07aebac19bed4776a78970459ebbd854dcfb67fa2f73efd296b30f0e48a6580ef8c5af32588af2ecdc28df19c07931914c380bfc57709ae80a34f719e6914a2008c13530aca1702cf166b004dc8bce429e0d25e01adb3c5da288a510014424bbbf0a1463a01b075f6eaaadb0f8d9f7905be47b4d809c1b58e618e199a2a72e06 +MD = 2865a64e54bf077b8343beca94a9bcc137797cc916019722f5889726fb0a74efd3ee0f6526ad7e076fe4f23526714130 + +Len = 6712 +Msg = 42262515ac21c5c23edf72494250e8c57116d67c0c458fc22867021a4ac4ec9f33e04ca2fd44189567812e276e738db11dc3c5d1a5afac54b00e535af38e38b40241bd916958d95af82e0eda5e889ba2fa1bf2aced4e6c3e74423c11750fa2b35751612a17e472da98ebfaa93b177a60b02645540ca938471b0ba589f7cf9062d9191eb530704addf0c2dadb2da891b3e8eca713294976364e717608a2556b8b31a0dd79db84c92ba8ba96b95bc44a634a76fe2f6cb490d4b47d97d79d299cf407ee87bf41a9578b67db168beef20c377dcb34f1fe74ece9f636f03e11d38966020c02cf89665cc6d52e43990dbb40f82af32fa10711f43dbba56a8426db9ca8ca0138f1dc4440a49bba032ae1a64c6ef8f7d987ae110e97acd0ebf303ca3c8408d50f6d62ca6bed61883f87923b996190de18eb1cfea4c070c15cd1d128d0c06491718a42804669ce9ee0f947028f9999b0d614795f1d81b080a667b77bc225853c4591a5ee37e08b06ccc6288496ddbc75fa4becbde1a01413affdde4d797b14de73cab29da71940c8ed365e4817f7a1366cd89d9f58e5438461db6e255d8ab880e27d9214ffdd94ea299311d678adeffb1403b58dea1ae6dba3488e8cd6191a287cf26cdba5f42f766a2368b723c84ecada145c0fff05a41e5c8e66094cf2e1e12871697b0326ba7397308c727e1068ada652b9aeff70265776f31f2427dbb6b0ce41b17b7f3bddea9800a58ff34ce2ab6006f5f15221148dd8c0e165cf9d419f57ab6b6383fa3fe255dbda97e94667ccf078376160e015c96a3cd355ad0029b5a9f7c0bc762c8963b50b5311c8c49d193ef0a8849177d11214b11e7b27cb17faad6dd70cc0996276a3d73985f78f2c9932b670e54eacf170be65e95fa6c8b2774b54d9dec90973210486b47be06fbd55b511b609fd491deb50a15d8a93bda3336cf6edb7f844646ec161eb7cea2bf853ad4ba27a0814fc8cb2ada28354739136f6993c21b711dc65c2b0070f7d8d849d04aa5ebfd5d6375acdd1dfd253b22589d386eda36e3a830defbb2fbd015b0a3ba0770f60ce56755d87553d00f6410733e90529c68385026e30c98c0dde5e31336bf9e0e5595e5f9ec980e394a7eade3c225d18105fbb01906e2346877d5ea28f4b7af7d7e0b49d247c9cf916cd7352ad64d8e10b6a +MD = 694b79148a8b6a3278b9088467c5f62e295275254c62ece9ba3586dd09f4791ceae4445999199f421eb5ad6d04fff52e + +Len = 7552 +Msg = aab61e333ac01069b347e201015bef397cbf857704a4992c50b8b8ff835f41280040d21980040064625a4bd9423f50eecc7c4165d27093289d0ff678812b8a46b4f350e161b9dfd2f7f85804c7959b29ce65bb58cff0b0fba6744ce8d82d71ce6ed480d30466147b1d26f1ccb9e537b02a81dc9a23ac586c12eea299afed5c86d5ed4a37929309277aeefe7740b88c4b87d88a72f52cf4458986e0d12ff4b4389245975432c8259eb657674e839402c48d73ae276df9ea4cb543efd980c9e2aa4de44d730d8ed0a77a691499ab0401e2e5593102b59aa44a3b2db5f9c9f54ca5add356dc4a6c720c6e2deda0df8df16c3792f94bf2978806c64c1b7833fe5cf05a1998d712eb739339aadbaa48b93a2b2a27f04a4f79004afca909a0e56e7955fdbefdac8d913c0583e9c4010d0f44e7671ffd46f2c673dc854b68b707cc0a9a3ecb6ca2e2e93329f6f092eb5817786796820789030949850a3a1e06c3a17988c447cc023a78c1c938c92bb14e5a3c755e59f859abc7e90d337f15d53f742de7383a0714bcc84eabf17c799b195ff9d767abb7ff118abd3ca721336ca3cd8e7f41ac042091604398ca0f62f0e1ae18565a802cc35fd92cda0f2862121834041788a6ab6ee0c806586a8cd0facdd0ffbadfe03fecba3d9eae129d8910c632f779b42fe446d28901b37bfaaaff064c18cb9dd4d8c44c3d7b81598790aed44ecf6b6e5097ef8f2a9b71a262d848b4aaca513d63df913d612c1b8bee5e346a11f4b65e10acb23e333b5989cb411dfd737c1366963c9cb531174451daddeab202cf222b770bd7072c4b35d83dcfc50c2e98dac174d72ddb36a5c45354f418d1a9c6767e8d9da6139e32cb37c1698a0763856ef605988bd7f73e6238638b05f28e427cfe5b48668a1158e34c5df7b2179bab97ac516800d2fc4be7a9108bfa3b3aacfa54e8f561940b2547c21b6286635c721d8b612dd2f4ce321c4d62da3fd4346ab9273c8ddd571601be3f03904e143142c73d3cd14a64f45dc6cd61611ce604e6812060f623feb9540f6b1c6a52519f835e67ea3ab04bf632b0d01508d999338619e75b1a7baf7d8603f06ed8d943309dabb474524cd05d1ba1ff87b8bd1448b44b2335df2c92e8ff627301c32d116bf873c9e1ff651cb07f6002be571180cbd7dd7cf72f80d18427f49fde1194e4d8fc8151392b455677c6b680c2ce1d044456989ca8f1bd91d96780190cac57e400129cf284bd32a73b576b219c0629c93c9b4428500d2cfd6d25d08c937abe386aa08b54cb9d7537829c478e53e67df73b0da9cbf76a153acbcaaa9e7c6510099e1017 +MD = 93d4fc2b9e42c2a48e6103f17d9d2fb38330aba7de7a43011cc4bb93d161d6a3b2746baad5d88e6f37cba4cba42fa053 + +Len = 8392 +Msg = 389dee6ad8582da38c63df546651dd4320c8c4e76c86ed8485a2a0980a1484760c785a31660febbb4c073f4e27fc100ba0be7ee2fb5505b1a742abb013087e0cc3eb3dd2a2f8560f9a451036627a0ac19790e41b0fd93cbe6a41dc98e9d331b4847f0016361a54e79ca6bbd2bed4b1ad2dc75d5c4e1b7bf2f5269a1a357d87b677ba09c5ca7dce8a7ab1a6ebe411ef1788ea506b6022ab9771794cfc9f0f6759c527c1a7052aad415def3a487b39ab46d3812711eef6b2f305c35c07ce90b8e6964b90839028d7546de6dfb32c55cd8334154916a0a07a4eda8a31036b0864a511b0df23127f360bd120fef29f6b3c16d32d1e421d27e9f2175933b81d8052de5fdd144d3438b1adb225fdce7b86e247d9510e5d0e93e926e5b5caee8dfe6ad9a75a99ca9e5a2f84377b460f69aba65e6e09812e1aed61316c285e6c638d94dd12b0d462f7ed9ad689ac3f7d10e470a2b9dedf7eea3c385cd33957fb4632b834c8662fdce8fad9eccf4052df1938285ce3579015258858ef43711d63def7be24f00410021887d40e32bde6ff2bb0b7d413fdfcbb74d9a832e356186cd4e38ef6b312e19a309f7384daad62a3ef52035272568c387f38106cdc72b1ddd0fe11f23819096dd7479e95ee9730940c28f51e28eca653edac78e7554d4e8079512d5fa8a1f043b6893d8a9604b79a2b3a757f5c47b4d5673ec8e9776d591b78e3cb872a30fee4746c38abfc7b5f7cf48e6cbf37ed1c8794f5e8bb695c387774bdd4b0e7509b17baf87740458490040e2ec024e068482e1dd9c1a554a2555c16e52e2306882fa53036e2919ca7b2f822225bf77f409e95a9f239ee60c516920665c328b06022577d2d62e6276d2d21d770237f3efb8883e14939e0b44fe5e0eb4579060d61dcf34ae6dd860e5d6a47d622020643236cbf6ce5aac179c8290f6e8b3a074412c6413e673cba7a00cf32c740dfd2b63fb412f4ce72dad6b649e73641ed717efc460b02ba68ca93dcc5a950d0a12cc0d8c7441e0d7b73f4a3af30ec6e7a8de2a5c5173de748fe807bb5761cdc325c89750d1d94a9abd4fb16c2b2371bc8a39997ac2e98f4c39d6a65055fd16b79aa389eee65feaaec441298ea35c04fc1fbca5a6118bbebc3f178201f2d18865e5ef5dcd2e30319250d61b08f802e124cdc9e744e9d4dd32f40d33669a89834c9bfeab521604cfd3e7511e6195c2a6c51903d6fd985f7b5eed3a22f4d97fa7da2163cb343a4815e1ec54ac2f1915c66b95dced36c976098eaf20e9131c3e569d1ab165ea1774944af4433cd7de76b076a8c79266e9c30840ae53fe67ff502013fc69e3da1a14cb8d83cf58e262600584d6468f2475d118236f35cb59ef3f94cd2affcd8ace933c181f3b78d5415c25f4a2fc0be5e9fa99856658d87f685715273ad59b72b18a66892b2a253707d5a264a33ac131d2da0d15383fce3ef75121c0b0add6384f64cb4f4c1de +MD = 60742329b560bbc7929cd578f87e0979db19c938d413f36360aed6361550501941f32ee8e362478c96202683a28e4f25 + +Len = 9232 +Msg = 23cd7e8b7828a0ceed470598e88bde61d1487d471abd71a87c4af3ef83dd81ae4caec8ee8e2cc7c3d7363223188f14f7648cb973f510cba370babb47695d62e12ab1e90cb048e60ff7c3c7b278457451ef28302e61efc00b5e7cd0f98484926b443fa88ee96444ddd5548ef00e954694fa83aa2167429a08cef7faacd938587322c1ce1c3e682a53fa534d82e468d1eb0e05eff40ef19fc1499300087262fb214d9d235db93ce099ed26cd1302a45e7cb216c64e5fe5185f56b8acb756ebc49e4c3d6ffa61c8aed83637d6496e33356f6e1ef8d760044c097ecec45e8db9fb12a7077a9a3ef5dc385eec30cc32fb9eedca854e381b3785e8483d11a820b6e8a5e7650ce659a9b1e0ecafa24556e6e11e4fb38d19986709243c6e5b3a16c8d27d93beec86b9cd76f968e7f55ce0db452984118021de7a22e4e2c76abf77d903c53379e321664a74aa5bfbf1b8dac11336f105eef9f55a1550c3b105dd4bd0c1a35000b95f6906f01c4c555e024b82946f1ff89e49e5ed2d926695f63c9b95553f71ba36eac9eb3576c35c04e13c050dfa955359b8b61db1cf53d903856e1007c21e0f21678ee08ae14878abfeb432c9ffdb7ce7ee71d0e83213e7f560cd291e54df674481c1cc368564111a00bbf10fa77add10941ef01be02d259374bfc8e41c3d2a65de699982899e8f1a90592a2619f9dc9c52c364930429fda76a4cd59f43bfc04d268e2eb6167f5b735697c5577ee0e352cf6a1495c490d6f7e97c3898f0ee92c40238731a538edbedf97caaeafeb859fbb41ae86c48e9174d9a58d9174c5006921a7050f56953784f2211c227c008a65fa8dcc85fb9bc2a6f25e7a0637f6f857e153dad917f569a63785df355ed58314654b79cb53f927625313276c6b0d378519ba87234be20aaefa46826beac3164785fb34cb701f16339663f4186080245d356b887274e380ebc4d3a44a82619a6bc72d8c0ad286459716e18ebecae8656cceb75d4b2562630921cdc335c839a60dc352fe1dfdb70c097eec55a40cae7110405e7421cfe737739b955dd22ea3cf89e4fbf9594439f0071914c78ca86abe0434a17b7af70a64a78cbad28418386d7cb6990c515887881c8fcb72bd1085c2a50620c1cb1d1471318faecfe037700652b2aab5aabd183ac63da0e5d9f788156f4f6ce5a6b4cde39e2f01b46aeee320a853b173a9c4649e70cd157f57affa3cef7ae66572506f4249b5242e88b0fa52fa243dc4f3011519b89899cdbabc549f92131dbfd272a103b0ecb67cbe203e03a4beb037fb1572331a3ace4f77af1fb3f39283533b8debbe8020194d9fbf26b9546db93b46543480f22df38312eab4208093a7de0214a7c933e9cd0f91d03cfa65bba94d596fa479fcecc9f71111da4bc5710baeeab98dba28b452413925e93d754310fca8aa7a8486f1b219f696cabc3ec51f4449bed607eb1a49610a02c3f8ff8e70a7b8970f471cc74c6a37fc3df8690a633ca3c74948f786031d690955c350e8590d0dd7db284ae7d97659b48c76b0ab78068d552fe3da821fa4eaac071335fb2a6b1cdf76ae8dde19bcd0523ebdb242be206adb227f10891fb6035d606f0b3175606a006a5052146dac4047dd33f +MD = b6b1090cdb31627388f87c4fbe6253464215b812169a48fc8897d64e7b004742da4891264f0ce2bd2512f48a03c0afc7 + +Len = 10072 +Msg = 7ad50f6f55fea7b59e17c2727e72fc22910fe36cf463ac02a05925c9f697eb3a9a02dd088584d002560d853ce9d7d8692bef398c2df160d077123db39e642e6a19567581507ae9c3f68ceb5999af9c3677f94eb29432387409d96d969f680f049cdabf25dd6959be259cde13b581b24f1d37082551b09ab8ffb59db8202bf4cece94a43b55d988bc8c4646b066d6817cc4b1502f8df3ef6201afb5634a344692548e0a0adf50de84d3910979d3357187146e0f167081a03bb6ce9ddd450b6e16d9d0dbdba458c3e0a18610b62526ea36b7762b2321e4130bc71a3e6e3838d2230360fdf6cc789f969e2b43af8331545352d18e9ec9a4b29adb9b7e604b43dc807a485aa37e39da6f738a8aab16df17a490881ecf8f47e4af9b5a46f9a8b5f3f7e790d82ae221dc33c8abcef405b79bf216a1c5fd9c571014af5e7f8374167e4ef23e61d221ba0daa4494f5d0794249048f276972175ca08fbeaf0f44daece74e425cdce5638cd69b904fe9889a0687a4a11ff47429dcfbe97056e08500c195bf80f130a9cf1d9dd054e490638f8dbe98f4934d4cfa6189ea6f5ad88d0e1cf069530647678ef8cb0f3759d4ab815f57a9318a5c42b172b25960c3e1a62d86601364a20866c7a2c921e1b89ca69702b89f000d099d7798deffee9ae21685864d875bcd5bf0a3a4fecefb09cf9efa004b4208233ca7735975a5bfe6c2263da41f8bdf8f284b4a87d1dd2d5257d9d1e1775af2d4dda6ce40df117baf6b1e7d683ee898f157c0e3d3ac181e9d1ba0452ba3ae6528d4e3afd2840ccbfdc4466f5b13662ffad197970ef64577f1033a7e6839070a2809a63f99cd5d57d9b5e5380404cc4cb37c188dc2162ddf57f7f1a31fa02d89db6537a51c20cec64a264503eb7ae49622418bee767698ffd5df0bddd940e8894acedd0ae3e625c059ffacf699de74b6510937e1b37d4e7f76a3d1531d8100b27b2de19677882bef0d2863399596455348ba658f009316063f2c8b2e73cb3cae786b8b705f6ca8f86e8ab2f5670c1f160e3d5d1fe520b93c3a60819563866522496e23c123fc6486840be05298a6c9a7aa7b67baea8c00ca6e28fab1761a43b9f420f1b04c9f263f58943777afce0dad275bcb889840b058e36d40a933ef9e1983683d6661bcb7cbf10efd8d34ebb1d18ac4d0b076a2948da21599a6236d3eeafd2d4e0beabde0d3575f7bbbb0647ebadda0bf5b0d1b7312b2094ed0ccfdebd56b596dc66f0967ff9371f92aaaa33c1028d6e0b0e314148e1b32a64eb8056c81d4d3e2bf790814f6ac2abf01aa0fb37d714e7bd882f340aae677eb496fef8a984083f51f8f22b161aa7414693810aaa7c2f0d8fa7221bf0e1abf63e877210dbfb851ee0e3abf04e79636428add0eeb3622a43f3f39075961bff458545a05bda0422514b30147d73177588f8b20713cd39a52f7cf610cd64cdefd10b4a00161e3e9e7b0376c22f0e655c144958aa2662630e249d17297fd767dc2d431cf7fc330b27f0ac103b817af385ba8cfa20731d6ee3c7d6df2129788a72bebf371e6a92da7d56a7a4f721634290d0562f009648cdc48dbcd6be46c2961209f210d9edc85cfd2188ad7b6b41c2fbfa175fc10c9ef01efaa1664754402b58936e42c0f24de325c5b1823edb8105359c6314f8526a865173473662de7baaa4ef96355a148e1d95c7d4cbc80ebb79cc4babe70ce445e10a9bf0af8741dfa485730c710bc1235cbbbc44f29d515ba12e6c543e755ebba0b8e9403a2b2ad6a988c +MD = cd1a0d7f2bbac5cdac53fadf236c4675b5b23ff4847aef227cd71e653bae85e0da3bda458eae87bbcb5b4640d9451d45 + +Len = 10912 +Msg = 221710ca1c521ea4c3fe7aaf826691b9bcf37e7d0f587277da0c59f7fcfdba75df83df24b69237c90235f8ce5b3708926d231e0441702570bef5e1996fa3d407867263a2219c3580cd0adcfc480bb7088c4c16c40805a04f3170f2dc397f89091ecee26de7d7df702b656d60d24b64c11f55afe4ef7facbb3b65d5ebe4fba123b07ea5ac8faaff42242ef423805dd86531262e8c7b46115ce5bcd3ecf87de3fc436af488a27f5b9ec04db96cdbaadb9dc7a7dee636c297db365d3208fb6f183ddf7a1729a7bdbd2a08aa04646a9a3511ebc00617a75b05e037303a667738088d8c9655b626cbeb91032d1d32b596ad68a459ed4a567a2512ee1e352ff3407b9553a6f758a813ad79b9bf4b0044040c4afb5adca5cc85bd1a650d698af8ef39fd3b924536b4fccd8b3346d8f3a04d1a61f6ab1b5090e6969fa4e61fa00dad096c4d428779d2ee116e78ab0a3550da9f52a034f2742a03784ab1929f98bae2b58a909e05488a5143ca90d72aeedc1263c8fedea93923462bc396f8319b87f603000c8f07cc658e294984b17f45cd5c2d691a8f87c6021676b15bff1dd1fd51bc76c9fbd42cea0b8c915b205363a922c7ddfb30d5444fda22bd0691aa61a35ba893d0ccb591a231334a1d0eec70fbcbf7cda9aadcda93fcf78ea1952274017d8e0028e8f2231368e81dd362939348bf86e12de3e1b154e3bdcd33f2cb31a01d3765d939d309c71971b1840490f41a653cc08ec52ff01df73c21c592eec107a56c68eca59f6c46aa97b038db2bbcf827e013d4370dc073a03c335e5cd24bbe7bf3b46816a073168522bff7d1ac136b6c3c810720c249e04684aa0638c1f84e0994ef55731c47c110da88cacd5a20fa9d16b3306a97b2eb51dd2fc50e01f03eb519c2bba45c0fcfb587b3b8b87f0c2d20375057fcd4241d290f6aa4c6db5a16e948d4a390a8f4c6dbf0e8ca7861fe8c5e670182bec1c6fc36e202aa49975e5f0cebce1421481e30e9dece07f6481fa0bf6d6ebb98a5c112e11ea0e07d7d26a086c857173e83b49449190d771a7e97f0ac133e0972ca3ce7908aeb4c4bd5d761bea818b3cfa2df7b62694e22cd4a8d048b1f1a7534766001acef8cf89be69c2b1e52b8f0bdedc66c9c963911f5f32965c55aa905c6f255ea9e152aec56f99b840d90e0d6eeac92ef5f67754b7bc2959ac38c94c31086422acdc46e2f6256fcf7f328386e4b276a8c13a5abd848fff62bec7d82b7fb794f47a0c4ffc8a945e80939e367bfbca677cc201882c143f277a1a7f41ce86d15a6cb81dc87c2120e8744458916d12a70e036ef88a30d53e23d835ebb0a5e4fa06c3ed7d6ab2284f8002f80e2ecad7bcece53e6bdb5c4621973597898f3218a63cc26097815f2e94c7c5252b5925a990869a96e7e61ef57dd3fac5d547f3a04a6ec0d818b6d3a2853223624ccafe06a66d8c2f0954f941977c90274b757b0a7b1f47aa6d65a0029521b625cedec48d82f4426d2c826be922f3ae62788238b5acb0df6e023854ed4948e5e64e1f199caadd45b7ee08e72a94cbadddd918ad3043d5f089738962b1160a4b3a27065db2726b1eb5aa531ba46187071ff9835918f50113833de34a0c8fd84e88061f117d9e3025ed0deb49d51d98529f366cccde2494b0e1cdd07b3e1b45885647e3c54c72cf03a4655c224b3d8218d22c3f68de5733713bbfdb86e44cd4513b88def9ad949a30926d00155525d6a26f4765bdb8015face7606efd9d9907519e357b1f1f7814252d718193a17af8b7bd249a4be9b76bfc7b6bf53fb8944101f4da42b62091df69ec1f5b3dbea18aa152202793f1edfac87e4f18ddc3a333dad5e3c04f4f765e6744c2e773eb4def07a4d6a8164f198e99566644584d5a3254c7ee6e5b0a9a13b5ce08d0c6d5b4a8434bc496537fde99f +MD = d028f9a585a081207101ff8c32a54829879883fa0f4c4180542842168df757cac06a951aa68b277ca0fa99850b928e75 + +Len = 11752 +Msg = 111ab27c5b389f1e76246e429e34e71a8a54190f4e5956b680927e0099a081b19f881f130107f2ebc326afacda0da9ebda1c9613ce38965a676371f35a90208503b590dd4e21a2e0d71076c3507de97e24375c7d5937b899bb31ae483769441085c88d420a2fb7e4fc0b4cefc72ab1bbafcdf3b7b7fec25dc223be65f9d4f2396cea9eaafcd83ae1783fb79806bc088ac505e127b034bf8dc66228b4687834e802424c7dedc532be94d34126d6dcf7d3ac07b0370c81b4110d15749b4bfe11058df91e23a59ea76398ef7201ff32847eadfce74e928fabd1df652b846b0d927956369d04ec0aa2b8ccbdd1914965ba73100c0fd30b03abb4867ad4d6914ebd2aa5224f888ab129a47762e63f7c1e9e9a1d5eaf304088bda4497bf7f983689c01c2e5be18463c4712e30939715f043adb1c1b4fccf6c4e8896f911d550a0437e6f4a6721ae95301e756d85390bbc0951f546a780ff85f344941e3cd52edca94c2848df2f83b9d610c19f7bb0558f9b74c0e74b0610d02a9cd079a8f58f661bd7bbac3c61804c36e69748ff937fe58a94c9260822afc5550fd09ddebcfeb72bafbde7076e40c6c30e6aec8968d75847205285773d28eff30c18ed56a1f95a4912838bb8ac21b41b06c11c9197184261a6118810dc18ba95102e0a993b0bca04cec10cd8b1cf8eaf5e1e3bb0a4af5e6aa47a905d760bbfabca64582eeea280ef32eadce01596c0e072f6dc5f27f8e6b299e240c5915e59b789706880436a0948cd658e572e13f55ef3cf710577a185e9f50d1bd1c49d3338dbb6ae25cfaeddd21cb593a681c3969b4f2c9c4c4a25a661444f841a7654b6b04fcbbb97f9fd78fb9f7f8f66a7221ef5e372a08be5f1e2c9162e1bf82cf16ebe4413f34f38e26535d417d41014bc192f6f56404cf192a581d92d46036f1fc5a3571407c422ea2d014912f42b30fdff88313bde17e384791c1bc184c4a32c460007604b8f3e613afe6cf57220b2644c90d797ec753243d7f84c8f6aa46f938a64c37d4118f204097dbe33d088ef8b8ae9d0feeddd746d4cb6e9eb6a2b3b01ed4219cf7af9d43f231fcb6291dc6ed034e39bd574c9104d41d8727a05e18be3f92878db7b9a5b7f125502e63893a6eec53ec6bff3b0ac7041cd849fb03fd8b638687f25a5830e3051adf34327372e13c62bb012fd3c8f82d7168ed11bcea7f515b28b329b3c531f6b8b2b1e003f7b0bb26b0672f3c55fd17c43ffc28af6802d3b773b96cf3ec088ba8d08bb36350413144d285479d39408abc665c8904fe7caf436eea6b3f2dd08d9241acf4b805fe66672943bf1efa274e01e4f77ce43555aea6232f6dc011f2c51d0efaea2d9f4e2235be8adee9221c2a3cc1b3487794f598889a71bc9d1fd4f8f23e5fdfe7a5982c569840ee233986e815067a37e4a3c43593da969effe0dff1b9d9c219119f464d73bf4f35f7c5cd4e33ba338f54ea2b4d6deb875c0eda7b7719e80ae1d115bf4d343c9dfc8b5058253fe5c699eef290a7bed52d3df1971151ba72217f4f906bf44016148a07619134e08f1a9ddb425c0c2fa06f8bd19f0748457fee3bb598b20940559b299481df45bfc119e34262f8446755348cd578c7246218595d28b3fc56db02191f5a36aa1e8383aab24cdbca170ffc668a26acb7adb8434a2cd26bb1a1ba2478b5800b5b88d5dbb55420343c4dcf9beccbebc341aaf00aa9f1db4739b384c39f332e85584b5dd3230fe8f5b5ad4e3cae984d43cce5b1755ef56bcffc54e2e776e18e2e0a2fc272da2cc9a79d0035e6943874b6bf24a48b527da88c634b7c99e506c58dd9fcadc0c3f2edd15b0e2ba286f587a3843071546bd4bd05d462f9e0d4ecfe2a2e79c5c6c6ab7cfb599fd9776c15af9382d1bfd89241d0c2b85f02c52bd95f8e6f6fb38bcc9d9dadfe7be76d2ee1130d21ce3620b00b0a4c780b3e4fd216104006a71e17bb127970b269fc8cb4a1dc99c9f17f33ab7b922a7a2e5686b1eb3ac859e6af737d5038cbdd33c0dde69d31bfe20042196dd991e42890f172b19f05afd2f70ea6f89f0147e79fdd67ad1c3b08d4c4 +MD = 265fecfad0705b6deb29e1bc690f4eaee2a03c699e6352db82d94f71658b24f5fde1e885968b639d8361928cbcad8506 + +Len = 12592 +Msg = 9de3e6cef3da54cc609e2734c4dc69b8987e6b34dcd05deb50e11c13e72d4b957978a50eb8fd911965c8f7d0c46153904daa08fda40af646cbcb4eab97c1a53c602d48e3fde0d0a4efa4f624ddd7a86841595ce060a9a4a47f4a02fd546cfe27bbc87755aacc37f667f8ca37f8888fc9dc530fe4f8f38e8cd426e01307747edff012d96da707ee96338d1b11feba313a865fca115431dd8632268ff499224ceb69d31732dcd91e0cbd2b92bbd5b6b543a74735705daab81a0114b8a8f0be91d38cd3d8ad328cefe16c99d63c67c4446ca7d1f708f9a848d1a9b60238f6907420c3d9c5e48f67889ca7a1909c9a2b063eeec6b8e21171b43292d416ab91df1e5975af86e1ddb112c5d80968e458352240e4ed22048e4e25c625389b09abf5b706091bc2ac02b3b4e5669a051b8828c1fbf110db785687c313c8a93a5a2b1866afe9e6214be8b59783b91c1049124d0af57ef58b465364b5a3e4ee9ba7f99153dd7cd84dc875fee22739573076ddec26b8f165db746b2d24fee2d065f7fda8a7172ab8eb2a93d8be594e130eabd34d3cccb428720c882937aa281741531fa48ae65b50a67a298953a2601752f0dbb775b72d06fa1591a11731208bd6c247cf23d1776623bf1e5ac889d72ca34bdd74f903c6c718986eddeb1b31f3cd4c5d6f9b60e6c30d015c9346971b1aa9c6c2caef37e632769c0725dceec219cdf949cd191b112f0a49ca7cf45294a90d6870027fdcf411bc2944c112343dc37fd2f331c68b5e71c29e505dfb44aaa07739d063d3795a2a92470df8b47409ba8ade43e2ca373653df08d67d82f5c6c98e42ca3710967f459eff4a14eb378ec69826222a4ca7029b068f4425b2ec4eeafb8a47c461bccb2c8b58e35bde0434ae4eb0764f74642812e13c829db3b1accc66192d54ec71a6a6ff5bc016b663633c5686299a6bf512801816792daccc463775f8662dd940787aa20fc98c9adc833658b0215359e226ad53250f1dc5c686f3d32ed89751aea9711e7ce707b3f8fc65fb3448c266b4ce6039722db42825d3c726c36ddc7c45a15318aa00cd283e3691e81c842fb8f271637204bc3bfa74947c17c00b43818cc9e83ba2fd2722379a82c770bfe17a24767ca7e4a2fa663833da4d2c9c13880b87f72c6bc75dc9698eff3f36e021d2d347748018c93991fb17a9710f0795bb4b444a960d44b7445e7bd2f878cf37e8864b12a4aa1740a644a8b12a72341140d369a71f915e7dbc9ecac19b3d746be5c5ea20bca17656cb9c4eba215c0bce3f2b5cd76ffefcf658afe195d08eb704f1188c646f06cdc5288a718bfdd57416e1dc87a22f5c066b411b2a153e72804c330899a866e003d3e79679ed67e5572f4d6d51cf07b363249e6a0b0b8ef1b789d41c79b2483702c92d48cea807959c62ac6621289e0cfd699822ee3d67134404fbdd954abe14b1ef2529d88484ec2bf7265061739d6ebb8257cd3a7572e10f05d1d1533a707ef88cf4c0004987f2ec36e2b27879abe285b602f25779576200d47e821c49057dbfe9c595acbeb7b0c8670914ce02716f434fc21aad11bd9e00b82978593e2619ee4fbe3145acbd2da5d1c2fecbd6971ddd93becca4074c9ef5fbfb3970e27a5b6e04071b34db40726dbd36f9d7bcc4f43ccb1f90a422ad69c9e31b4fcbfdaa4a2550c9dbe013e98506738d8c5a7da0fd463e0cee1529880762b9b142d0575deefc7d2cfab01c60705a3bee40bce1d43fe436ae6f5fe58481aac4e798e9b73c50dbd257ff0ebd4c3b4f5d819c65b008c2fff92c9aea1e4ade874ee3db7de6ee77ab96737261c055eccf207028bdb2e38f7dd0aff81e9b8226e39dcd92f3ad1c6b5212a7dc10eb248dc1cee06c2daf0ead48035f0f6426d362a5face46b5d26e35ba8e1cc4850761250cadfbf11b6e312446da636a2285e599b5ad0e7e2a1d8bdcc951f9b227dbb4bd9a06e93ef0b8f3fd619de48ec18161d3fbfeb4c2ba581c6869a5672e5e31c35c5220d2db1555fc3f7f930905aae2ef185e35e89acd49c8e281d08ec192cf390a1c45dd51f00df5f28a05fb5644703671c999d48fcbba3851f91b95f22b7ebccfe0bb3227eba8861f693be109f6f3dfe521739d281d7114bdb9cea54a9106f4b486cbfae56ded56cd047de4a62a32917d4f0b6eee2936032fa831e5502d2f8bc0f7bd5d14dda50e0443132cb647f6f5403ba96d6858d3adadb08c +MD = e1207486293acd4065b8bcaa23562d32a0e532a2080f7825b8600fb85635cc9a11cddad32d2a6b8804f57c1ca7a71447 + +Len = 13432 +Msg = daf3dafeb903e95c40cbb9ae4028ca494ab948721f89282168ef7405a7b3e3c76e72ad93cf449dd5139b6840ae6f3d1573989da2057b6d098ee84a42b3431c63c7e2ee1f3eb7fd8d652f0e2b51590523154bb4cd39c2f1746708eb5d661bbe054d0b44abf0a42e0e9f4d547810304afb999b34fba2a6dbed5b17005daa82f03668b5583ecc535be027bee22ed23a33266550c6342a7153f9d2dc304b66c2da7d80a7d2e0ba0baa89674a5f5581c1e92be3321181b86983223420242e8221a562fdaa5999a2154393c5b874f6040b94927a08bee935d891efe9ab830ee5e8796d478695726cb94f86abd2c81843605ae4919c74758704a5e85945f6f4795e7d27c6032f72013ff6e8805e04c3260a66a892b4dc2c9736e896ecb625e625cdda17e2e8cfa247ef5f43ac25cfff9550de66e4199d164db581800bc5b7efd17bb7c604ff1c082711b31e97efd2d57879eba7ef93603b91cb992f1c3c551465b13dba920ebfae89ec1902a984b44cb7ceb4f11beacda44cbe582989e1a65fcab7947df6de5f9c56c9ba764aab1e6d3a9762cfd0e58b5864d7e5f8b87d53d7e6d5e3979637a5d974f0be02e22eb83fe91c1cc6764d435fc35e692313d70384a253528edce1396dcda94c2ed9d329caada40b6075ea9cc24f9b0b3300b95f6fe7780bec2fa3c260483c8c8397631a166c78562435843f88f2d5f4afe9e90e9f9b8e3338f646e9baccf0a78884a5322c10e1279a1fe3d3b993564b1f3530b91ca7dbf5fb9b935584430fc5c608631a137f25a34b99ce015e1a64390c4c5608eff4a877bc854faec694df0dc38c6379d3a38cf4be0c0f717d6e48e6fd9623a21f693ce1031c459e86a7a9a809766ef8756260427be16cca21794a797a7b5f30b4ede15c59c83ccbce64b4be20304c3fffa6e7b40b7eaeb54f22b11b0b63d159b76add1044f1fbdda5b34a768e20c5f57c566b73f54d9dd91151c7f339b642c62fc779244eff4b7d147cb1f8ddb0a1c2f15a32a6c1b400df6eeed22a8bdc7a1f24ecfdc0ff5af45321a7326d9447a750689a8476f81da06e6fe21be78a3d410b9fc1b10ede6abe06d71c15fd3c4ca044e8fdab0b21ef462f1a13ea53bc415f32a62ddc337398713f3bc3a2cf5c2955497a6dee8cc492b8c9796a8796ab519b3d441bc85a464ad4a55784210c7c458b0525d294226a6ebfe594cf39d7dfd3bed47e70bba9e0e9b0e13248d9db25080d20f112e6f49aeb222b712b493edf31909e5e15fe48c8decd9ad4f51365dddaa243e6162c2bdc71ab421a64fff433d1d944ebf2d9608690f379467517d12f2311160dc6aeeeb86820d39764a321631d616d2def9319a366ea258fae2d48a04b23406d0ab366b7384a85ee117decf77bf0c22df5769aa6ca7947b78a9df2babaa06a0ecb85ba6049f1012955d57e78554debf2eac80c17236a87c7f0aef604d9503bf9ef6a133b03ddef5017f2ff6e12418f84b8d2967fd8838cc6c7a97d060efa5c3560ab99d1cfd5f5693f1d965f1a9456ec45dc6164538dffbcf9d6ae49c26874ca048f73a913a2be7eb49e6bd5d50eea317b2e9551fb4f87b16d7db2545e602cc1c560ca4c380cf09660bda757ab76f05b400f59cb3893cdae0be6b0af48ab2c218a64c540a7db34ba2ac2726e049613737ec9d55c721f79babb59d1e3ea111bf23ae58d0fc7d731f1faf4f3a04834f9801ca2328b11bc32de651d3d77ab59a13dbf294940ffc89043b89c5378df194a8a02e398e07d32a021f17b1bf3f24d67090079225cb975f8b84c02b97b310daf9a18d32ee41f496c8b47bb93e029b3155ee51c40ea5ca712599f6e4e33a6d8cfb646bc1d1e5dc93e245025cfc5b7545344565cca725026862d97283a27a74154e974e48c17a079bdf5f200f42a04f8c7c43b7fe97dfcbafb3c1d77a4df9a11e3388a94a4555122920516962d9778661ce57ccec492ca2b198f1aa5b4e4e91027ad70148d62d68c655ca52da0957b68f8b0029184392140892d74f894bdfa06c54f0eac6ec6997fdd03850e75ab75c4042bb31050fa69c2f31e15b969f237bb68264ca46f0700c3a201a081d562ce43e7607892515e0b7afe6be32f5e0c07f7b63b1343baaf751f5d5edccde841eead49573a61aeec6d2d531bc8a49892d181579549d374465f5db623233cd5d03dcad417dfc3902df8a69a36ab5e420cff22f43cd89ac852264354575c14c59724622ea850011fa714ac7ac573a68202f8a23539a6e1dc5d319ae0026f9edf1f093cff12766282e42a069bcf0ac480fd24c9c1939defd8eeea29012c43224cef5521f05d3830e26ca07da65c57006685eb5e4152a40ee58eb8ba60dec2e8338f71d9a8927db166 +MD = 56da709aa4104a9348bb7cc4531084395cae7cffdb79616dd8df2b74b03a7a717ea4215bd79036aee38c1de07affc6ad + +Len = 14272 +Msg = e756099dc8c4c789ce92fe40d53a1129f77d8a35affb5d153e0171ab4ea25cbed6096ff13d0df2f6c206b0ff1bdfb7755c6d59ed1bff7658d237fe798418b19da45f298632171ba82768da9813b01cc105d50159abd95193baae0516904c0aaf19024142ef09ca07c55f82f205d2ca73b85b8b60a7ae7730bf0f9169ba67ef5bfc97be0fbb0c887b6394b2f7397049f53eaafeec56a96e95a902a75a4a91e80c17c9a9d4e048db6ccbae718ef6b01fad5f6862e401efc02c402e51d187f17e27303d0979a4e44e42c356c89f86bad605e23ebf2ff0abf45b4c3c96b6bbb03815109ee6e5500966651434bd132fb7f66391d31eb76b03938c94d37ff12cf59f3e7f9249022bdead3d86ef5bd03acf053132d08663ba1f2426e19c126b22e9390a44c139b77f8caa33e030a7bfef298dd68edc001b24282f91fb3f590ae7b491e229d5beec923ae5adec9eabc895ee15ba6da093c7f2463d34aa635cb7c27d2c2cf473e089ae11e71470e26ed47545264597c347506da0d579b6b0225bfa6c94516e45a877193937d135a3f8c9d85747dfd3ee249cda5f7fc7e6d0b3dcd8ab50ba5ff31d9c1bd95d4a038a5291044c00f0eac9339484aac38703681724a45fe8ce8f2547e1fe19e2e9a13f8312424bd9e0a5fb7b20b2aa2a1fd5235619a6b3e4f4c5822f2e08224d15d9699336d97c5b17ca2d0429ab873bf824a679a525cdcd96cbb2dc6c831c263571b08be313080dfe2106d795b8687f7ab89c88af6bd52b1b675e5681b52ff6b332be7203361777fb742ffb4e21757c0d59ab891ebef484eb622ea657e78143f6e438507d8bd02277894f783a2ed8bc1ace7b86dc6751626e83c9d3d5603d98664fc92d395a5c95db290f574327b6c707e0b586d0ad164c0c94d8e5e26a897a6b3a17121febe3588d1c179f50533a233e570192e2da68cb2d5b02e5684b8d736d6fca0617858cf4f72a0e5848fb895a25fb06b1fa35716639a2f0da4e4c730ad4b48b1209717ff07f1b9d8b1567cef426936deb000559a5982f49cc7cb560c808d2023dddf8e5d48fb66b3f9edf2f77a8e9dd48dc934810b2cab6c4d9ce7e337191d68f7b60e6298ec4217ccbabd46d13c3ffd177276530ef3ddfc84fdef5d578b8af10cbf1a976e40d664a8412e65dceea7b8db708d88cb84f6be3c52fed36831137c9b6f55743f859e3b2b15d8dd04326f8858580caac73c7031a24078ddcfc6213c122b2171934703fbb3ad5f04dd93e1ebfcad563198a6e4e7752affd514974ee00f971127eff1a236e07bf385cf8fc97456c50ca5a630cf501386f661dd40f6e8f217a6ffdc11e37d101668c850826081f553928f768699fc0be8ef0c603fa3b758415571be34522ef0e11155171851c536bd8a479ff4cf5bdcd56c2d640fffeba088af262cb578dcd1707fb479ce179eb98746767927e9eff4b0d05d5f2e45f6797206759e21c1f75059165f0ef02c7eec257984988c8438e22fce049807205831821df88905b81eebef77bd2d3afaf65d3c760a849f08c73386b7cbc5471991672d381783ede5a402c816777b1b2d857b20de70a3dbe20b577a200b5d5a9c2298f7f76b0526b537436774e67efd1eccc477154faccfca85cc5e895bd6be229c2566ce5b836cb1490c3205b28f7d590cd7a3acffd5e70cb710c87635b7ee376ecafe4f71950c6449fbdc5b3442f856e6033b2829d5be332fb33c59117767550ac822dd45a0a238ba60bae814301ab2e905a1f93612b1e850222eb4879bc605f0cb790a303cbac93af9523ebabd40d7862d7ca2ad136e66b8fc140af0ab66c4c1337558d9dfa2701c1436c19060f75f2e092fb7076e4068ca8f80eef51cd60bfc9e8c4b9af015d80e5fdd034db1ca9471174fa8cd79e449158af9b2fd669065f37b3254fc14716b622ab9864b362711dfd630ea77dca6a22a4ce319822f324d56480bf795b34194b80350dd01549971dad4880e9eed23ee6963d1652bcd183c85938db5d063030e8078374a18939e1ee280c9879b41c898635e492842c6debe11cc1c12349a32135c07d18fe979a193876959e80571212a989abef56fb2e24c8b705b9f4adf5b5d9b20c4010c8d405a5a0cdda255d1aa3f89b7b73f1b07bf52431eb0bf8b98eb47de51633ffa34f6edbad9b9491509e021b723a687dd3be279e935afe56f5d7e6c862843af2b1741b82a5e613ebb705f8b916d21421ed5e82dde43cdb37e9361363303f9d1178a9d6439198a05c1bb74d7a9029c00685c3ce8a2c78eac21e1402f5572ea485825765c67898830c031cc908e729b3542355d34c74f673201bda7c27e038977657e791b262ce0422f79c340823b937324f7c59ccc39ebe7868ee49a1d247bd0b7dbf22af57226bc77f9f55254dc092c892a027b1215813f38eba310a35425f6d7e49e067607cff22248df5056c280d3f732906a4960cb9b914a4fc0a1210c5c4e2ec937f84c4095c6dcedc5088d8f0bf7b7fbe4d2ba2f9f18216714b709b37372f0f +MD = 2ad3d03e159d5ea831351e90ac1a86a1bc9c607da81908cc7d14f8f222088c1576363a6f00e37c0ebd34b11a0aeded55 + +Len = 15112 +Msg = d2e63418b5ed46aae4f5b414cffa98d391f80b6d2553f6fad77625e3f8ba9dead68a306aecc64ee055641eab875dcd103dc72781b53e641f1c89447d477b5ea7a316b4636ff78cb628ee7baa45ecc34f2522df0046675be7b7dae9c4d0c9b2e920d2ea89a748a73345d9f39a736d1f9731505b713f94845b90b13d3efc6f41b93506f867fc834860956dad0278a98cf1499bc45c0a8e8782905668753333b41ecaf90682d76e1643fef4d26abc68b063554942490e1d0b659d1091f1dedfb321c7f43d649ed3bae769b4895aa77133f83da3fcc1b308b80aa029e0386339e5c9143fc494bb78db51bff6fb5ba18ebeb5e9f11b4b6119377b82e77ed42c0af31e9a22c49a9425228be6024ff41285f9a4427bc670801630c02993934d9f1984283fe565ff93a4369cc820aeae621f8bcc2e8826b778c84adf7f744629263041f0eccfce4a1ebcc18c4c984010f9241d35966263a8b2f72ee26bd4c0f22815d27d8a2928039f34686359b12ca23f5c56e8634fa4cb946b84d0d4f9292f0d91ded7ff3b9ab27dd5d52ad9b59bec9d8fdfec7b9811a987ebf3b2a42ca8693c6c0d07354d4de02067b0e9b3eab47779845f49c885d3c9f441238fc2b565271f6e091412a76914f0b2a0a6cf99a0ca3c047f08315d12b34133bd6f16dc89f11d5f7706809115d7557d4e6b1509866d4fd7e7309d6af5f0d88a695b88e93c4f9e0602e6665279b0b792623f6d848fe918c53ec9f6f2a5071f0dce590023a5ca0a2c50bbab33be277eb7832bbf50e3c501962cdc233e4a808086957466d4ede9ca99098d397c0cc412b55935f3b6a98971115b6f0c960be461bb65b1a2423b354415d664f7758a10db538d68f1fe0abed0ff708d994110ba2c76e71a9cb5b835e1685f49cd656192425bc7c9a1702deb8528163bb289828a487dc3b63d778c7109594b43a396b8d2ad93ae62eb543b98fa54f3833fb489dd1d98a08d6bcfde7125b2425b614eb85985c5eb3ab8f15b4d964baf6c280b4c39139126a80f04d6be9b39ee98f0d689ae33b72659ee90b693c1d4f3fe55d6f429922ffe0e125f9edfd5b7f4023676525a1d3206c8777973f1e3b96742ae5da8320239d0c75a285b5c39f3ffa11c753ce3adfd338e39f4bbf064c0b23f1ce791decb7843dcd1a738be31b7b57e8a1d6ed34ae256b31e49b616adb27cfe85bed6b455b400545e235b8b24c9bea069b410b15ba717400dbf8bee24566f85d328a13c09b4af37e8e6ec4e7af2c30f9f834c064a151d3ced9f63fd327631deec6e17ff4d42f78e5936148c9afa6cd416d248597ef411afa83165cd3fd86a11bad862848a248060985cfacfeea960f6b4e92c325f0c9aa125bdbae5b445c32423adaa532923f3b58da0c89eddc7487d630f21195524611b4c8b89cdf785e321113716f59007f8952049a382cf1bcb720a8d4f97c8060d2405e3fb0e7260740f6bbccff12998360939a1b5022c6e92dc91abdd33207847c5380c382f8c9e1bf71985fdcf5b9e5618c0ee26a65d8844c3dfb1f376c543b705cd4f67b8ac0682e002dac6188de0ffcb9d791ef6c8318a2fdee7bbe7202f04ecacf4b0313c6251d2100255532927da29b88ac47bd6310c2975955a0e9703d782be433c23a37830d62a47d008963b8f3af96840bcef4f71b88c02fb739389d7d0e98333164910c5f238ef60c03ce4c506495dbb417c5462e50c77c49f7d87addd16febd9096f4bb3023432c0183ea24968eaf5d93e30986b7db3cdd19bbc600b12efa001bf2ebb898d18b5d56d31456f1b2a74d398e338636e2996f69b70e795517c0273ec5bc64312b0f1a44942b001f9b8db4bbe39d096a09d6a218d726c0d0bb9858827730690319168c552ef8cd2933a9b9a24c0eb85c393a9dad85d87c2a00c9bb6d700f6c1684eada100940621660428575304d3b13580e89b028ea556cd09d7a891821187352d12dfd8dce6aee0ca23fbcf72339974f9a8da92725f59d125aba5ed82d12216d14ada523698bb91e0f100008585af10726d221ec5101c5ae49a67216fd0528bbfb818f31d86d807ed220c7cdb4472867fa80a0de3624ec8bb263503b57979126cdd24321e4b94b1433969cadffa844565ebeac659b041b93dd1c7db004706395d4c74a59551720c8799a041000244ebe99b4cfe94a495aad11f782dccc39a6ef56892b43f32e0982ee56895e80644d86f48b90d2099cafc1981ce826769a621e9c3f6e4585a70d2ad8efb20047104996b76b7789a1a524b8b8b437f8cc3aa009ee129cc9d52934a88090075c1dcf4ad62a7b0d74da0bc078bae7f5b994c26898932a3c36a95d87e42e5f11dbca49592e94e4d9fc7b768beae6dcacd097d9c0b3d5aed6f4caeb0dc62a8457e515277d863fcd64894e908ef683bce3a79d28b242fac7f36b007acf37bb2862e3c711bfc6715f348419fed085dbae23a56e57452d4b9c1a0312b2d31d2a73b83ba8ae25d673c2d353a56b597d34dbf332d10d815c1056d324ca3d2362c08ce35780a7ba9e8d1dc960ba7d32c8d76bdbb68ff26fb8911ca636eec0c7ecc29c6b9d17a3830606989c121fdc624c0c85639970af162715171ca147e6c5a57bcad677354b8af7285dd6d09e31f1f31a5114443cec7f92e66ebccd9d542773323fae4ca147d657 +MD = 355ddfc00153e895e8f8f3a4b7a5d45d4307783744f95dcaa92d64b166a0b8cbb09aa505035c486e3925d92959fd00bd + +Len = 15952 +Msg = ae6d4141b918177a21ebbc69f6c36ee6044eef3db26586272a9c46f9ba17921c7a9fe1bd30f4bfc57065150c089fa9c99bc3e84e8bbbe4f21ccd994ed77074ac2d5f16bc5ded5589989883ac62e0f3bf3b5aba157f00b3a88bcbc653218469420ed766a609a9dfaddfab90b1cd2f55b02d3becfc56dcfb33bdbd557260f879c6642c5ce3fcd068198ec7c4831134d682ba8f0669d7f9c57afbccce125b77ac2078897ddbfe0bf5b5ec13a68af6967e1e287e91c6cbfc18658c20ba9adba70b38921453f7d702906943b8be2f44fe556cbf2f147afa90fddcbae0a174a8309df6f9f5659d4e5c401dd9dd94d8c2136454c9cb17ed2c5b7bc7cb3509078abb6b43f7553b362dc10eb9f8abb1ef397eb2bf8c79228729059a0e08467cbb49f07b05d25c5e2b3adb0025e64a9cda71e647935162beb0b837629ab93c81f8ac76d726d33155e23e4f2149ebe1dd0332f42cba60ad72d0a399dc51263ea1267cf6878c42fda8c500c8760d5198fdd04450681a0183c74fb0d20f1c967562ad8117912167e7e03b4aec095a5e9883ab6ea1039d7c0c4495a88b04e453084ff68382ffcb891884abe263e1165c09f7fb798f062a186f710a526bc18fa320ed674aded974f2b71c7f91d6062b9113e2272ec478a81fd5d617781b5006cfe5c6699dd42503e8ed301e1fed817f46dcca9952e56101d765fc22e042b9321e7e6165460ced60b4e249f0544f59fcc28f3ab8b09dca1c89486a95538902fada1446c10b2d38739ebdee5df8a596894f52b7ec0f91bae17ca5a8d69998354549cefee7b5e00f24eda7a8cdd296410d334dcb9d366c3938faa53f4f7a1659fdb5d5103d0ccc795bebc7fea8abcb6072b7aafd33eed44f094970b666beab77096450042dd79a7e00de4678564bebfe9f238ed516ff71053cb22d95852c0096519f68631de0f126fb0f4b9e3f7a9f207cbf23dcaf31ed62b97d0565138ebdbebdad45b377ed7a7a34c6fff9cc008fd0f1d29199644ced6e68f21fac78aa8af735d80e7fa2c7dc81934b891063a46215e6a600959e171c323259a4f51b480d4aa166ec4c0636c04301e5126b6e2fc1f843819756c65b1fb5fdf9bbc56632f1bee9a006a40b01cec964ddc293536a537ff0ac7e6642e0a100b31b8da6c02fdc5cf5ce850e19f2ad1aa67bc00f7c1ac1b4d56fde4d7c6e48193a07411f9106772bad38901398cf063ead0735674f0ab29fdb11df91dacdbc0a7c0500b942806933fa255039f061803e63c948243601cf47e8dca8bcc6c4a6db5f5df2fa39655a7cc2dfec0b8970c421ae0922cd98c6c0b4e5166256a71dae92cd563e6cdf7df40fefac8d0eccc479ef780eeaeadc222ceebb0834e5e59e7b39ad390d979c8fdcf367d55bcc1f2448b1a821c9046cddbbfe50fa47f3e810b6d7e64e8602d965bd3014a17dcceb59d96e268ae7a2afbf16eb8e34c207173a067562ddd235fcc53dcfdc5a1c96992cd32eda916b4c0d90e5bd5cfdceaadce6141a082e18b86f7804d7a9465fb38f62dff9ac7e7e8aee17cf7ca19f93629eda88cec08981149846bb5062af6faa37c6a4d8849847e5ba1d7d31476038bac6df0999723535d0e1f60a42efdb7303f81fcbd24a28efe4d96a97e43589e637babd3f84067b5b74b15298b6381394473934fbf0e6769d10b4c6c49b5361c463e33cd39665a31b886f200eb3249efafd64cedd3940ca7aefb1f9ac608932fbc5a9246dd875f59e95852913429dc6ccade0b518b5406cae0b39caf83abf42b2e5753cb4501fb80c235a35506a8bd133df15b1556ccfa360ecb5025032dddb124cad4d51084c368db8560c6d33d408561c6b8a3c67d3b9b8188b695b4ecb434381bb1feb08e2b547dee17511a561b35eeb4a0774ad35f4df1925c7c29871c26c0c057a2b56cb7e651c6339e4c91a1a72d51af2a646de9dfd77e9e42c18b8a2b576f526b9fcedd90dfa442090a6e784bb614311793bb5fb39b8418842d586294746f1ea3c02320d6801ecf2ba44b13b60172d2d9693a158bc66947aacd7c5a14a0463905d6e80649db8c4770cac5e858a7f400da4568cfaae08498311265b50e539b2dec34ac124d4a832772ee5d8ab6122e57b4c8c5d2a3627ca6b1acb327f416c469d169edc9637579fb9c8f705f40c87823d363efc307c4a7efa6ecd3075862587940070b902eb4f740681ebcfaab436811c09745054a9f9cdf7b6343f7cdbecdd8d27ca40b01b18172601c81d1380b848e06e3443dee5bd1f2c990846da684ab04e33b359e7ed38f2e1f196d679999441510c88bc15571cdc5fc0522cd856c668a1cd34ecf189396bfff95ee4222652d2368c77a44328a06c59d21adbbecde96d4c9d53e11418a3ec47c0272e57507b65599509e1ae7fd138e278663ad4f43927174a1a2099c2fcdc82eff99c5f3f966180d0475c9e8536a6c25a403161f440ffcc7d9191c8aecea3782ddc16841a2b2e74e438fd5d62571fc01fafa8aff5865b31ddbf1de805a0a9f123d9840c0ac234fd7ae5ad323dbc0ca56fbc87041e92a41013acaa43eefb55b579f7ce4036e4dae23a5452643eeed339f46db6a997ec432fc660211f9266118bd63fdd68c7188aedcb8fd53c8f74de4453cc1ee6891c9e569fe46bc51969453de2b797cce4e7ace4d69e1f0255d6938e37e1a5021caa1f4f453f6e7daa8c57914669e5b3b6d8a690028717febb9d5cde46b33447771f2de16279148e6d58b050aa5db0676473e1b9f854a477e650a0fe284ab4fbc3032fd39b9b44428b54b842b59ade2e1740c527600db0b70177c6b486ae0b6727 +MD = 35176b0bd105670592c7d16861e82818e5c86d37bbaecede6f37dbbda4d9d841fc16d51b3778382fef376e05db0cf6ab + +Len = 16792 +Msg = b6ebf0e81aa4563dc7d8421f685cc3b59d1ea2f493659408d759b3f56cc52f7e1b1c41460aba6135906db91d4834d99d6446ac464456abfd481650a0e2faceedef3eff9f472a9ed99295b6c85ea85a856fe497385666a783466a671e220f0cbeda5a113cf87c73f37658216ad340ae3366ff4a12f11df062795ee1b5558c50bb86765f6546394a49e3bee249ce843e6fefa0ad1c3c02ee628af9a4aea3fa04aa989dd16159e88aa582d0e2ad78fd7003b5cea89e609d0a4a2144995133df8f54bbd44f7a58119bcdfb9507e0f932adb55e9123df8576aae4e545a8e52ec659819525c1f66b3de589f5153a2978ab5e4f93f10628d11638f67f06bab4bb34caf8ce970f1ebcf2d0a3195964cf1df1e997fbf739c16f041a49968fb50403b34a830f32213a70bbc4e10e686b1b128bb8563faaa4f285c8baa5d3e6831e2eca41e800ffdf92b21d290d7c4b39557c013153061330033ceb7ed2de150a4a630217f04805326da8a267ed0d08b4c586dcbe58f938c33bbbf4d0975e2434cfcae134638f4d00157ad1e64a67a9c6b255a3c62bc02346e32b6b17bdfc19e7f78cf100097fdd33d051320eeb3235566614deb19502dca243b3d8ba0d5ffe0d08d1bae4aabebfb1e7554e489a17b54b27e916e65e6769bda37cc4234c2fda8d4bc0c3460df4fb64a2adacfa1dbd308f3efcd1cf4e99d4814badb7b94516b64f0882948ffbca97324882d58e3dceae09f3769ad32d3d25d5826f37e4bfba993b873eb5283ce79d0523fb4f6ac2ef38a18d7ff65ac2fe62a092eace0c81c38b390f1daf7798f514c47941a4f874cad43f563e6fccd68195ccc145039954da9531e94708e6d7990557937b5b9e1b078dcb94dc8c923171c54058a95ef300a7bd0b5ee34bdcc07d77a5b9d2fdc67e4e682d9081d5129b74fbe49e3d68834dd10dafb41afdc11c497298326e11d766456f4e9253d3b5dc323ea0dd2aa8af03018d053313a8fcb3a5ff1748761f399b97a914e17d0de3bb55965c5b97a7e0e9de44f625f7d3f74d37240b4112b053e5ea1e68c7250c0502820b0062adeb7fc8113a68d0ed0719b2aaeb5a666c4b8f0ce7d7338a7456817763a6743893fef2684177447e1ecbcaa9a45cedffa97854d735db5b739175c1e3a06ea0257268a39117047375b1a772fccd7eac54f4bf0b0f7c32cacaa4f12b0de16c6d7372aff80b3ae8dcfdcf237971cf597fac73a91a7c66e566d7d75029bfcda6c168ba5d5b9d542b6660a0c848d14ff54f514ebdeae699fb19e1501c22bf0c26864e73f933110ad6fbe44b1d45e3f85b0289ae83e315bd7cc93237dc7ed647f4a26bc40ce82d06ef82d3f9abd9716f92829dbb846dd17b716010b519a4cc2616ff08d61de2baf081e273d1f86c415fa2b5d59c47f1e17be1c5c4f25afe695096836cd1b4887f6f91050dfc8e671d6e9485787a55d50e64d4e0961527f3756e7b18e1dc5a44462c29d2e8a1f530cb446fd9d07c348320de5299cd4608ebb727cea5ad1f957dd5cf50314ee9b331138a3b9823cb6e61df9364d8b3af864ef824961119c3f09cf5ff0f0a85fc52d1bfe800acba8e8bd9122811858e752885000cdb466df0f0076e646d45d6015a779505c7fcddee115283486288a7c377f69788a62bf1cd1f2708a772cb8920518d5f8a9770d3138a34f8995dc946bffa0a8540fea8ed8304648b702682e683c17ae31e79f0e6247de63ac30c31b391392991dbeba5a8392727be669253354f31a6ea6a74645c4973d2116f77a63562bcbc8502750a6b1811d66a32bd26bdaf2a793b1690b47eacf35f4445a511155a0c29275ca5bf7e4849db577cafe4c7c9335ba0c9d5c9947285f59dec9e5b9ca0b0da409282ad29f0579c4deb71739bc5d4b4df2b4c89e6c6b1fce20d6a6a0f5d3035974b14bab439c48314270abd81cc95ecc1e5fcddbbce00dcdc4f1228b9b815a4f63064cf664a17f673d982a9c106ff6b0e9feead5db2f9fe535b9d7ce1dae58e23e879d5884cd85f34a9e21ea29a99998e0028e2129b25c80fd8134dceea2b5be71c5cb2626690251d3e31066db0ebdf08b1b46223b10aa3d76f7c85c9116c720a7413503cc1c6b0f74177486b727ea3465a9a17d81b32f874c8e10b1a77323d5497a8955e8402688959bccce106d94e0ea2e0e87802252daf8a49c7094304238d2e226b0fd8ccb59d2f097a1a948549293190bc4d8d69ac4e5dbda1de9e6b8c7ce08ab999e5adfff96a653a5d4508fb5fb0b17d9de588db19eb4481e0afeee0ea56e76742d22cae66b3d9f4f140eccb77c74c12b1310a24dad9e64f589f15889f38415c53c8d22aacb26c901faeb8233b1d6863d19a75ee57d2abf38e9568ea632da18213ee25db930e26f62fb7f56a715b0d58444853a0597c9c55caba706ffedd0ec0cc6daf2ae3700f0e69822a07e22843d954622ba4a87fc05e5435b47f37f190fec46cf87d637f30c11438df64562d13ce471086610c8420f4732fbc83d7112f244514863ddce490f57a009de89512841f667ceb3f4d33c20071d011e1a7e4f41b958ce3d317463793e103eafb667e9fb4f9cbe2a63233b06b943f3a036c13e6c9fcfd97a5d94e2e849269510592196b754828f3fe852df21b25a5bf4ff1450d17c48f281deda47caed559576ee28cf04b9ab9a7af0cc88efa6b29292ffd2372ed336920a21aef29fbf2fb869f1b7f361c39a6852190ad8eefb0f4ff0a57551c3493b4079b27d73e52307865fe089946d26b1816bdd883f9e13a2dc948c88213d22a976372dd06c29ad8f87cf4708327537937e0e9aef3d8ba53fd1050185260b1413bbe8e0421bdbd32a254ea1ae5e189ab2a6d0ed8a53261418c5a8c0f6f0ab71fc89f5764d338a2869f7446cf657d5a481a45951f400fbe4c013263747e19ce0e658f35c4c139311c17647157ae02b09a2eeee44b6d78b9be851d3d112a96dd +MD = 7d9c9b9bf8f498815a36dd421a3fd4a67d8333a7801f4abb9e4b46270dc52cb17feb3b953fc34fb0f18b36f22c66f723 + +Len = 17632 +Msg = 8a73cb778c74f6adfe1c404bf6fd8505690589e74148a13aafffb0abc3d155aa3a52631197ca9206753774221b95aad3515c57fe724bd5e9c364a7590338aff74364a1f8f85cb8fd4f67a838c0ebd3d1e6ebbf888ecec89b0e6212ead820c2594eb26e76d8b2d15c34b5c4d70e886ac8d1b9aacbbc59e2183801d9a76913f6980342b0d15f5546e9ce27b0452df3d580b9cefe1025758b27ea49e5d8df98b37b091e5152b4cc7d6dc2c854ca44b47ec14733a59ff0a92b92cc431cc5613861cb094e3741009fe0afbb9d98b07b54cb5323ef85c0467e2a1f85f667b518796850aad84ce66a57d6795fb0653dfb5a26fdf40a88bb4f7bf097be6baff22be631d295c676881b7bc6915608a1bbec4ef688628d95d73228e5c11ea8dac2c304221971209f713a931ac049ad367076b9a2bd177f935e180d72674eb7d16e085da4ece7ecaee7f02739cee0a80aa5bf219461b8e86c9628b3fd4ff5a07d3d217820159f348b3365c08b83c20007a1f211333ff0d107c88ba1f042bc69c57937ddfc5a40ff1e9dc0e578a798bd14ae350ee71e64414c3b685fb1084b1c90687115a28473564f6c2a1f680109e81812b0a218c5bf402339e876aa6949c0c854f8a7785bdf4006eacaf5c35abe87fd168d542efda7d67408336d412d5e5e5483f31be8a62dc52b5dc9eff17a5ea5aa02f1ac918ec40c27f170cce01b33fd1c3e8bfa582f04eda60e4e955a299247071e0633aa40c0e9243cc81ceefd70a508cce8ca32bc0dc15f458270672f0277fcb1f470dfdb4075533162e3d399bd5e00773116dd16ef483e4a8c077e53553c7105e3ec9926efb99d1867acf6b7c031ec858f63c105538a2c6495e2095e349f4e60fa2d41ea72bce838fefcc1212425b43f293b4650e1900fdcc58a6e1946a67b0b61bd3def74871eda505d9b9e8f4340ed2825d4c14061d1fa43861749345be04e4124f7fd9b2025468456ecf5aa9278d7b3aad31e19055806385e6ab9a5c66670c2e8d5dc8f91e7c4c3701def1c1a4544f350ab3013858e48cb9bd13042eef3bb0b934153f9e24a9c353194548de38d7e0fa2c4bfd7e8590825c4b375b3db707545ada22c811938150123baeca7f63acb302587930c36a38d6d6177519f95c6e797bc602dce40987850cef77e0f5a32747e635a735b785320ccfb878cae25db592a4ae31f895e510d49b9b4d470175fc020e3a6286cb551096a194aee8992991325de92c9597c4d1c156c57b47036a7f93f2dd47be6f585906e43283fd8e4e75cb101d7f5e7a173eddb6f4ae7b7bef46502ca4a317240d7fd010189464223ac7ef6391969dbd5abc8c44bf335eeb72d4e92417215b79f2f974adcd5cc7058d2bf1b11c1eedc20ddf4f887bc65bd293afa161ab3ee5e1975a7725b74990a8b4068490e354c928bf1ba9eab0c41cb1d03b2b7de74830eb79175a007cf75b7c2dec0a7bade4ba61dd062de3f4a8fc19a6fbd9d141f9d70806b49fd664c281f0794115e9c24b3c0df6034e1cce01846a96865ef441b042b7ceb6bb1025479eb614aa1953c704b87d78a77cfda35a40351d6f0d6f6d080e8b3fa22e3635031c3d9e8ba752328dca40f3775d0efb1fba09a9fa779b3a6d94f2e7eb8bb0fa6184e7556a226d8b62ebe8f4d740a95bce4c48cacd2010205d607f460736290c0f6353f7ca1cfe380097e5db6bda853be281730e5b9956c5541b90d899c006e04931f3f430198cdf0358c835898d0b11f8f438d32a35e78fee00c82e07abc2fdcb7b57c9108aa1d6c798f091d4cab3847e1edab7cda83ae687ca95a4c57bf5daf299ffe50002d5b5e9f30f5eb23606f9fe6bf93a9a42d96fbdc379db779317fe4b284cd662f48102d6d1651ac6317df8d66614ca34a84b920ca5f530829391ee51a0df2bdde24c341ace9254755fa0e7a287bde5013af9e3d0cc98527afffc11929e1743b54e9fc02235377a4412e86cff5b4529a49d7cdbc6b1c3bfb53acf0e8a6a95bcadbbe43d89cfa51ab6fdecff295b4af683223cf03af017b6e5d6834ba5b0caf51b9cb212bdd86ba4426306f4dd024fda118bc2b7ca01f4f67145a13f70eb379b737391d63b0a0bb57b04cf0466eac452f41c9698d051fbecfc2ab17078845c1e69d30c0e8dbf05acc535bda4736f38ef9f67312a0a8a8d08cad82c853916b8dc533d79022261da18b5885b3b7f1a2e0e77ee2ad1c4f638e871d08ad41f1cde73c4057177a5bd0987c07f105fe676043e1233dc269c3f7ffa85c654e3a6f12d6330ed8dd5640b04688a7c8578460d6c0cf2badd9efcc0d2cd8b1c033a7d4e26392e381691f9f66b395823132b0a4ac5e99df597b15314d1bfd6341e5eee8e79441087a433e3e99e78cde551decfa892628876a2f45bc5ed600bb12eb7973c67329c5ecf319e5f2eb56045ca0a02c151e626b077ee733e965ca0158cdae3d2a083061ff011a5e18c6d93c6d433200f95030d259ef615f95ce427d3e14f70db95a3f26daf6a870b580ffcdb08f0b3fddc47b06870a1c080b1b4f76e947bbad1b713f5aa65a2ae26e22af014e0b93b16881294dba5780f6f354db3684ee61e3f95516468ab30a7dedb2d11e6f40321d438f23f01a5ff6f0f47fcd0335915378fb0fae32af8baf09da3b4c6d3ab4514c16f65236cea9e4c0b6a60d2624b9f834c8a5ed663c69814edcc20a36d8f1560788be9d69ffbdb32ce2d082e77bedb8de0922bd295ad6e8139c51f2c1717fab1441f0ebcfd424ccfd2006168d5fb6fb40658b05c531594c22c2efec552ce4b63bea9426b2766595fa174fb062fa9b292085eaad80e87a1541f5a5e03b31aae1462bb035580c0878ed70b338ac7424aa4710469ca3a8c1ab39dd7ab6bca95893fbab4e000abf96dc9cd23a97b4f5d9e77dafa8bc7598b777d12376561ebc77332413756f0fb79629d1e6edb3c2a44346890a17f440e1e3dfd36fa1a9a9918e2b870a2e6ab11b90c65254d3751da9e93035c89b2c4aaacd4c05680495a75125e2ed3980d936130c1de7c3f4c50f2d530e47923c4cdd1cfe2731b7a6035e23c5c01d4773a4e7c993955adb598cde580a46880f033d3f5ffdd61d048fdc1730f42de1dd0fb30c +MD = 3aa0630a5e6dacff792164a3a0da804495daf356a6c4628965924f03c16f9a0280f18362ae52a88df4a81eacb859938e + +Len = 18472 +Msg = a9daec3394c46f2d6362b15276e72c043565b6914a3657b50e9c586040a49cbafd503464ecf42d01bae1acf6c6413e6d1d4269a0a8778754a47bd4a353d7c5fff1259b74ea76392d4af2323a75be2791182350525fec584f690f6ecbf99099826ea34beaf5113ab9fddc6ba7eb268f750f4f932ed75e73ad43a24f5f9999c04a5a106c4e748cd8abb9e97ec490412023eb0f5bbc79947f761c7a9ee79db8e35f9fb52529d1b0bc0d685f9419cdd680a292abd085ab5825b2dbe084ec6cb6aaca23da9f0273458ee6f187d42f08af57faee6b1910d6700d6a681c29f56e5abc92d0c70261c213f53f3ca9678daa924e34e6965fe563a5dea6ab76b48a0b6ec2bf8cc375ce26e19a1f310d74bc1c480c566176c98db8bf406c8c364d33abb8635a411720d20778258eb8fa2442c5993a6b4951808f3f86ddc6f3a31e79b602486ad60c2cf4cda13d95b9ba9fa90c4c80788570ab735fc25abbc8064ce3941218f733e8c1bde0228a3a1c930c785b2b8587fd1b73c27f3a6253f3a702faadb07c0a40f306b4a9c3b687c9ce933819fcf29f999a000309b79b975cce66446aa61ca9e57724618e4e6684a8b25e70ad886ec9413479be6401ad8eebc3a04b31bb9fdf0aba434cf8894438a28992a88197a20cdd32067cf8e0414189cdd9976bb6aeb1970589fe503ef8ab9d995a69fcf1367055dcd1c32d1cffb61c3639ae8160f02974a021fefc332ae5822cdc39865dd1fd917aff1e6b7c8ef78d44e71ad9810e4e89d331d4663181ef3a8840a387a41bbc7954bb121ac9970cc5400c63dde1af28bee6e209f4ffa5d0acf5af2c678ebeb4f6b22b29a2cbc1fbab72cf0ff4477cc0fc205b2410673f90bfbd515e8fe35fedeedb77ea6b4ab5ce262159a8857c1c1d29cbc5ad212ff7385d274dc0656ba9704b18c8dddd0e1a8d2096d1b6fa4938472f2d472c8f2074ce6d7acbda52ee4144f3b1468b61de993e801a60bfba747847f48e0a2ac1025f5dd6fff535bf33d271d0ee187b5d84daeb2ef32e4d2dc583246238352f219d5fea82fef15812030200c81667353bc6849b116962e7bb0602e66072f1c116b81d7f58bee7cbb52679f8c5735a42616d3f5713c62516ccfd9c96d583666a081d4023408900170e64e061ae4b1a293941b5261b509e60c873fa3babb4bbb15f9271df22a563c38785df446be7ce7229098b101251f6501731c4ddc94d191e84e058bae65b3a5786501da8e38f9fa69b8f6c1dde0f546b21fca1841796a73addcf9cbc75f3aa5c758e4395008bb54cf699fe5668d3e13b4f9f39397dd68e8cd326e6edb5b5dd59bb07f813a92237eca2f0e9c298e4c44707e03503e357f59dcfafdd568fe9fbd6c083e52bc69d4d0f075cd669578c2617b2893deb315f05f337302afeebd62b5beccab2e44044213c8da46d548b112f34b960f8f84f37e518747274edb2c59671a7a30647fd5fd8fb9c92558a1dbc0625822e0f322527bf94ef3d642ccafe649f59d8895ae6369dd49cec3713f6d5d47277ba29a19c76b8ed0f58a2c21dc9bc6e6a2fe427e3119650f57bbaf8fca4c0a4ffceef4e9a6efaad3b8dd5b7926ec6654271bfb6dd37ebf60f0787401970f342813009400855ad5bdda2a5141034ac0c4966c10dbaf1c54e525845f3348395d467a91e7fcf74f8805c60bce0816593ebe8d5933664874ce127359d1a3523cde21801d614d51304a3208fbf23cc47a58b8587dd39c141a736f46737bc0399c3f5fc00db06047af94c91f759e5d9230a738a45461cbb66ffd622b7bae1882da0947b6ed25d43f0fe04175f302f9040ea2b5dd576e939407b471aeacf91ab268c48fd12662279be3b511a91ec08d9e86c3c68ff16a82215441343cb1dd554ceae98eab53d5c902dd9be025336799c61b82d118dce5f602e81c104214db46b6b2f0caa1fff136f8300d0376eb689c1f4f786c2454518dad35bdac7b30637d946362ca518554ffe08d71121aa134030e951d0e2f124da784cfae5f34af16584a7ec814468e7192506870828cef5a6d188ed91d95712ae22e0856af0aeb54655d57992edd65c78ccc3373db5a406c48c18f4540e40b89ac0d824f225a7fbe2341a04e7092c5c75db8810392ef2eba14ae38d9eeb73bda93a7c0104fcfd6b420abcb509013091173a9d3a83fd814f45f12fe1f9d7bacbe078144128dc77ac6dbd04b57f3baba066d24adca38819d8b96b4518ec3adb874963e80fe62ddf676b373a2cd12164346a89d71f2239812e049e6d59007d9f9bebe14091c758fb43455ea642881a25f32c488b2a877783fa2e74efccbb06ceafcedb63ef52c394e9021c901d2b8db485b3f8b0265aa9e5e440d4129aa83e306afb3a9a5210d77100aa583fe842e4da93077f8c3a2439709341a51feb4c8d8c7579e42de287fc5c3146fafcc956865fc531c7678f6b8eecb039d15ee6315cac7750c364c6419b1b24dce90fe8eedb0bc238b68b4cba1021e2313f17b4de11561989be8627c61a7780770fc06e924ba63324363f9a9627d7d22fd7927cdb1653032bbcdd2c9ce338ee1c535783ca3ef7bffe2ecaa1893bd5283e811667b1d16bdc3ea7affe4d5c2615d59d1b4e1f1cc70fcd8575881ab4e48b6325ed9de7ac654dcb6645c461ef089ea9d555f8184ddeca99258878d2facca3a8ab5d45050d0bfdd8e1e7a75e03a830a1e44da83e3904996af54b983775551914fbaf88935e23957000ddcfceffcc74c3b04b871749012449dd0511d38e4695affe2b8d1a0676bc98ab6e63384d3d11192297bd2de39c123dc5000a2eab69be829a187d226dcc1b5acae38b2554c3b0ab22787108719e0c4f9582acce36843d94b8c07f31fbed59bd4584711c7c25f97f9938cc2e59d0b98635d41e3d9560b9ee4169bcd118a01fc904993aa52d2d939f6d1df52905f7c2ea8e3e890332c5db961b5c5b892cae1587ef6a1148cfa1271388701481dbdece83860715a6737b4b9630e185e19fe0e2feef3f1c8eca4a5ce1d07853bc454c865a0679e9b0c249b0f6663f6262d9fc2f37ea5f83fe87f0db132f7fd864a9089176f7da2ea986f8b3bca7c0199343caa338c9136f216c5b4cb18ccbcb0071db99df3f730b172650fbf2daaad3fd4314e70b75a3087de25255c1cea55519048d439ec88ca9840c19319fe746b72642a0a2b8d557759c529fa14ddf559e36cae639ba786d30779f1bfcccb5dcee98a9377d45d076df062208d65ca623cddf2bae233b395dc77947 +MD = 1501bc2bc0f94c7caed9eec2b30d3febd3d7a6fada1031805e176f53a46e6e5f51376ae05c640f4f76a414bfaf064d7c + +Len = 19312 +Msg = 1f5619064d40421f8d25e387b2dc8d5fee1f1fd44532dfea41c5ca79e81c2974eb6d6571208a1c6632bf74b198feb05cc339019e9c109ea52dac16929eebe5c664bd465cb5ce49f63f6525bd198ccfa3fa71cceca90c43ecb402561265c9b225f20d65cef453f1571add9eb21fcd14bdf98d28c4546df7473e8e31fe2400b81bfd276acfc5633a0f2def8698910aa5312a55bf30857de13f33195060c3d61e2fedd1fc6710444fa8df658678568baa87f493363724822a5bfc6b5b3f29940dea2ad4c39fbd3f56aa9706455958984c48be0d38e119c5f924ff4cf9a44081acd21cf8697eb49c789bbf996c437e79b2fbf28c6b374c8e7721a584d296efe724712c04930ddea3dc05bee7a23eb0750628f7d87740a525cbda56da8f1d1e0c9c4fc0c2eb53219cab6ffcb89053d6d56d5735b905050dd11fd77b18d841b5393df242f8195866ce0c62e1d3dd89d9e2111114f7bd8c6adb98a17a04540b9db62fe4186fc52496822865d50232e99fe11addfc5946dfa68b60bfbd67ac82bccb99adacef96c097002600400b3779111db04455a94906a7299fb9aa0888affbc0a3d36440343353902fbb8ab7934317ddf9cd87ad6d0757fd7c18abb18e9842dc77e0aa294885b07a6b1f1bceef4f9a682000fa2e5bec9c4f2062272869477a693a5ce5737abe980501b35b18f2a380074b6516f3babd6066b3228636bfc489ad17cd7ce671e7f27a1affb35d4549b302a38544c633808a8b5cdd2fa3391559f134bdd94ad608a621dd8c89648f4919a14fe7ea6d6e3f0206431d8c377e44d17cb9b3636750279b4273e146f679a99c2c771372b11201b01f916904ba3759d898cf388205884ebb25038753dbab7323ea4592425ac7cf7c1e6e4afff30b5a588b9ed39eeb2584ed12b60416dbccaf9524dfebc43037b04e4a0147e5aba351389e4d0c1fe2d0d21950b4e2f9bd8463dc226da65efb08ac0eec73e81faaa6456019046b6eb2313e272824a8634b7d99df2c184c7a82e2cba44cebb513b8bd3fb744ed79f123efd300e22edfbc4b5c58868a07647f8e6e16f8b292372a9d904627662dbd11fcb3968ac6fc0e6b86cca9b9836476d5e75394f26690f5cc20c66298c9efbf36072491ae1bb3bddac473926060540ae4553a4d7baf0c77620b079bf0b35908c90aebcb552b7e7570cdf91e636a01a913a0cb4a79d72e465224fdfa186d931f30ceaf4c653c83bc95680752aae693dacc8fad92d62420e906344e86f83fc68cd51b191dc897ea1db15f45381e1f322677eb892d78df07e8e402a24878701ad81eb9d1456484dc1d2c785ad7a55c04147a7c0624494f0ecc5658a246814ab68a756f7ecc234a81466f7cef3728e4342c3e0acd7e2fbe5a1cc3fcf58af913c32a4106c8bbeb33001fe032ab619000e8f62b5d85431472166093b7441cca146841ea475919a6858130e864375cc3f849fbaa3cd77cdfb468212d513702da95ce56d8f7d6ee3b892e02f0d83a30ab147ec221716b3078cc78e5fb92754613de1cf172e1ea4292872d1c5e575de62f9cafd3f9c2e867c7026f376442a7f05b367b9a22cc3b1e93c7a6069ba9488536d706b79bf8f729b39e759cd02874069ce713da507f71892690c2491096a215aa0ea8f56ddb3f7f26e7b19ea70d8592bd370b3862c3358c332ca86c24e6139f7289c015d932697008264cc452b9819ba66f8c3dc1602f2ea2e182f73e604529769074a046c71c053fa46e9637f4112a3fd6bd6fd51e06775bf87573c8ceddbe9e6bec1d1c600145b4a63d9dbf86dd4670b6c75906c5626f46b8ab6729f68663d2615114c2c6bf384f77e46052368cf72155d180bd1ced1f4c6b4c5bc9a0e622fabbcb0da2c1ffe6f95e896859cdc7453afd046e60ec4c8e53577fd71096a502fec281912318695898a2553b3a143539a3f488aa59fd2ac444c66d64669f6c0cc6bb9c27ad95a495158c6f635fd07fda448284bc0e172dca08fe3e893382e3463af14358a8fe59a55964ff682ecc4c3105f1202de902fda7854819cfdf08b1ba43ab9fab7c1c2f914b722fd011cf4544cf87868350854363a5eb26bdd2f97e70c730d8a892b7cf60d2fd25256fa0121d888edb49ad6aa7074f318fdb741df46eafc915d75097e01ad84f09eeb0085ac41a4c4a046777d09a6b6079b12e3bb9bee4be7ec11f830bc844ae04b43bcfc53f6b0af83ee6756724e0c10ec8661d75684d573ded6844f870fe633efe7abdfd98650f107e922b13ae989c76a78589d172d1dc77e391a24e1dedb5de54d499a7d7efa5b84dd3637d3e7a39d9d6f44874e65a94572c0465b6d4fbee0c3eb12d6e02f012183211e34ddf6edf5ede1a2208cbcfc8024f2755d79f0f55f245793ff723529f5ab5b4742a965cd72d465ede322a17c0a3d4643a5a851131b5f09598ed41fc94a35e24debc6d2c6a6f962a469c0a1cc4604422dbe68feacb80c86b00f665d6391eb6c9e9ac6bc6dd4c57e520ee73c51c6126c80124c3806b7954643fba96c8d5f0440c5da298137beb10f635cf6efa0fcf02c074bb2bbc58c81ce81ce3dcbab24490530145fdf98b7549c74de801a3e6d26171fc54cf86dc96a86060163f94164023079e3ea16154118abf30e137a9ea91c9436197b5c73d0b8132d3fdc83e4a0c8491fc348d341fe85c46a56115f26035c59e6a2be765c44e2ec83d407ea096d13b57e3d0c758342246c47510a56793e5daeae1b96d4ab988378966876aa341b7d1c31bba59b7dbe6d1a16898eef0caca928f8ce84d5c64e025dc1679922d95e5cd3c6b994a385c5c8346469ef8764c0c74f5336191850c7f7e2b14be0027d884b7299d16a3c2feade719d7cdccdf62d20885a0cc41acfb8ccddd29ffbc7a53bb18f477d86b3f0b018283e3ca71155444d7a59ad063b97730975a1de4cc0c4eb37704c288aa96c97fdeed3140effe6a8c68bee8150193c9936609b8143ac711935cc145cd69af815082bd8ad54f84eccf43395344222439dcc154c1380e92e3844f93ca50af727a9bf65db631988e2138f17ca305cf530e3431a202f74e540eaed9e217b884c7fe89c3337dfdd20352ecf9f1a0ff0f0892c23d5c41fa04f7d8388116f6aef096534270a9a7e105cdc716e3ff11dbea2b0baf6de847e837628a4bd0972cdafcc7c2ed8525fb843ad3c8dc380dc04068a5c22249afdc6af07d6b0e4dce84e3af4293b38a11428f79fd9d667f8573d7925cff445a19c7283630c5aa8021c57212ef0ebb08d444a9c8338ddd40cef3486f390a3c278fd2c91163de46f1f9b62e2bb67b2e87d6c97b315de1690450083a07242a333877c3f689fe000b29bf21c0048021338d7f99adbb63e231517379556306a851163a6356a7e97121afd9cccfa53349f3a4377be66e2dd5 +MD = 583678431befa78e113f621fe22396ed963c825826e9314faaff5b9a53643552dbe0f3922b28558c4ecb26bdbb2dfa30 + +Len = 20152 +Msg = ce3d8b3c0aec94248bffde0200b6b5c136fa761c8ef9a160af11307378ef271538f86d6622e7daa8fbb8914716c69016823085dc8280e30f3d8f36dfb7a3b47700db147faccda3e5826d94dd79319726e072ae8fdc163cbb176c5f21b75780568daf298f8fe4166289e48ecc0f3ff478b689993e8401d4eba46f55405e53b63d473b539fb5755ca776e6281dc23acc956d3eedf16189d2274c62bd4496de7cb196493bb505c79c3cb33b0ad778684a036e5752ae5df85ff7770b42364641fa3ce29f88dc6724ffaaa6abdb021b13934c209c727f5f94a2e48d348a1d56c55a659306e319c3d2ad78b9fe43a79281d2f7ead7f26b50a7c475f6a33d01adafc1b41146f476011acd2e53fbecccc5fa2d8d36ce7d7a1677ec331b2104ea354a59b2c52762fa0a448754db6c7b7c9cc8cc956b4ab9b59a4d43a4627587e1d5dd4ae61571d6adc4980573bb179bbcff32d897f0134e23c470f15234696ded75afbcd96aebf798185e6c125ac4f296d67f791c2ff1e5cd7d2a1dc5fac35e17fd09d6112d5f6ec2eedde7ba203d281109f8d6ab8fac26b9abc1ef831a4c04665633c018c493e2342f5e9bf27549e63580e518cc780bb8f1377e9016fecc04e26675a376994ffcf4c129b342c1afd40b248e660752d8447d0aa928060c0b09931617a7b1125d640c8e8655326c38999adb3ae9e586d971630b8aded9aed0b9824f60f3539984c1837dbdaa4bdeacddeb8e32c9ed7ad7e8ad2168db194be4bcb6f79ab0e4958bbb627515d91480d34a0426bf2da897995063368d474d4a10bb37f70b05ea6e3bfbb060d70a16b87486ef89273d9c45e9528b313f49fe151a5e0e38fb1bef8b5c2975254c67d7ef5939b4a1b22353ed8d962ff9c709b313ca4c42a1b4197a56b6edbaacb915e18e480c5954aa0455f54ec356786db0f4acea2edb197d28143610ed86dd693fbcfb0aa6e88c550b28c7f481099578664a4840abe28a9d70439333d4e1a0a30beea067b16830fd5d56c9477a4f3832523b4f966c5edb5d1892d6e848d3ddaea101e426d2e228e82567650f533049e19d5129b21857f405498665f5f1657cd32a7d2e11b35d5c5e89e10213b7b4b1ce6e143f5c58d5bddd2aa9a922799e655acee8e8eefce1b4a9b14e071c4ce45641ee0bf75ed4e11e2ce4820a398587808bb4cc798655771810c635def2bac7218145beba7f3382ff3c9e99f100c026b6ad05b049a1642570daf01fee5daa65fad89ab5f1861ec148538177c441cf85ed0ae81dc007d4f5a45056939f25c4c7ca8c1579023c3ca4e1bab5a3ecc25dac0ee8869a467f4bef9cba21195911aff477e6e09157693636b2b961a5d24c10a1029007af43d2711a4060783984ea14f4eb2e208556d5b37ca397ad06dda6906eaf4a92e41fc8f07e7989847c88789ad00cac00de69475c809d9ec24d749a861bff5e4fc242296d232d7e6d69ce83ea8fc4a8a623f788d9498614c80201ee9aaed91367d014bd931245885a89bcd3ab39fa693adc6861d1df4842e6aeeb6b733124b20296fe4c0752aaed7362bb2f86d79638e5912397ec4bc97045d89ad9baabca83479d669d74eb42f5e27e346123707f5dcecb92f5d394f3e60d0876001625b2ce5f6cb57980e6f7eacc658d2f290c9f201f111c422ec2aceb65c6e7a730a6c4db728c54a8d34ab0125c9d306241b3ddc8fdec2945a4dedec8759b5598af36e8f1a783a9f2161f55b7b7b083c2126e219f92e321c7deee70c6660e28993cdd065a26db1e1ff16dcd1f0826f016454453eb067e6d9084fd4a2b60a8c8737fa4065c181b1af60b3d02927585dd28813e5cf5814573683d10543f8aef9dee1f92d040a5cc05400d96db5a2657b4be6f6322052ac19c17b131764c0d6d10d1c5b04d4ef47546c59e8140be4423dca1b6bb8e63297950648967989811aa87e6180563cd2e9e474d67051905f772bd99ff4e8856a7f5f8196dbba26cbd2d6bf3c199fb077ad06fa0102a4e7866cbbf6df225f927ccbefafc04337c10397e25c16774fe420191268540f8c85fbab64ae73647c71fbf5bc0d6f7da0eccae251b18b39f52c7ea6cd4c69f786d021abbc6cd74bcdc84a954b06eedb541e844aab7bf4d21e1de5ee6e129d6b126a8af639be8538d1e9eb132348e8fcefbab22966080dc0291ce8589b6778dabdc9aa13531007cc177b7007cb3fc852c255f71717d21084a4ce186dcb9776b6f752117baf1dd9660ce15bdba958176d7a84a58c1786b7b02f95d8a6753f31904db83397841464a730a01117541e50bd86ab40010b826da32808bb8b3ecb13f72f40830f98a04400015c3243321f0eb3655e790e5a51ad0e0c9b33947ed7b84c2aafa24c535e01f12d6a31d7f9c6abef9502a31c9a70e0316bb1d34abbc1790fbe39f3c62a89f90ae35e924de1a1a2e2a42c40b4326cc1bdb4010d268c34d0c258941a15a4d0c3ade1adc63da03c9e1cf15fe45db8a1ac1383fd63b0569e7a04983267b358beec6a96dc5fffac03f7ff3b02008193bc19d33a1b5960a15abf36eb996f179c90cdb1816ec23c6b744b19bfb727b86a28956d74cf60b003163ae9c13db2bb0712f2231fe99f5c751a01fd1de3bc7a92539942929e0c46e24d578db793c5261ea1f42fe0b149d84f61a709c41c5130a2d9b013320bde6dc56cafa34d3008e159ca4e48726a444860f7c4c050c568832237543fc1ad39cd22f09dcae09700653ef86b0d338931253028c5d1227374ea86d90028cfd6c0cd9175cc55203d4e3a34b8c4dea27272e75391348cd7ab08cf475b4e7ecb3ce5e7876895d27aa744c8d188064d4dda9c1741ad8b83eee086a9fa1a899232241bb38b4594d35e4976a9abe289c994060f2d60fa5536c698911305b36c139340f4ba039943d849a866551a54c9e423a96ea257f40c15fd479a92f0a240737cf7e35386d02d41db58a643b35b612d7b291d0e8d272ab1f18215925153b1224ddd8a288b96abb071be98fded72d9e5e8f9bcda86f03b9b51bc94a99e6438b084563b91983969a4ab6eb0fc4f178ede1bbfa09ecc0bb9228c7b9a413e40419ebef68a372344c18ef6cda0c75ed60a5671df6ab3c2c62df8003388e1b774665d6c32e871b3555ddfc27fcad7831ad6ff99dd9dc201bbf47c5b68f303a07d017d0a9ff8e9ded79927cce9b1b542727f29e23e9c321f59b7300ca07b3f7fc6bd6e28921df7fc37fdf7449fd7e943595d75e977089c623be0a3926e63fdbbfdf4a134bdda44921316bee806afdbdc5c1c541e1b455980bf0b576b274fb6db6f41c6bd77b02846e55dff15b2cc0593e716550eafe501e16f91cc156fb10354a71f4f2154323b711b4e286c28af0ef086e5f929895a1e0aca0e621fac1a6bbe32079b1ee7d2f6a74161db49dcbb5088b805a10d4c3726636aebc9f860fe388eac754af48704d25fe433783d438362b2e6efed087cee8391aec4541e22df223c52f2df40d65a6711702d9fb4f199ce05c02f4dc97ff2de0c21f2a11f763f914de20aa8923a462d5271cab25f6b60eb07a02e43cee9e69 +MD = 086743fb7f677d6103302089d6af03f0bc4808a67341e12e6b5b1df3d453e6f6ee71e32f38c7ba89d563cd6539776de1 + +Len = 20992 +Msg = 56d9a671ec924a59f95d581d1beb11102b45a5b07b04987d5cc56a0ce4d87757ee381c5761c01bd5b69b417db4fd46347e10f4abd0328b34865d65d55ee6d69bfe6b56313907e2b18ec79fbaf162c1c3cf24abaf4c2c57a1cfd7f911c07cdf20905a9c28face659889cabbff5b824b66246812e3755bc46b3f1b6fe893015b8babed36642e7f6d30b08add7278c5abc587c47070d6279a3bde120f815ddd1387580c6b0c5c81c2210af04d3bd394ab87ff200f7df4f9a0b8b5a22005a977ccba9e9f84490d3c2c149fe45283f15511549464353359379f8bcbb4ec9bfc3951cc858ec942c81873b1784f35725c72a6d64f792bba8c4b605b2831b96ce08a696615c18220157d5e9f9c173f2f9b5132b237453939159ba8d1d5ffd0a0dcd2db305720f70a7cd3b7871326b5e3365c7d9355b1a6d87d914295d908795e797a70d15294702986824410e662e2b5b5f94e1fafa5bcc14a93f54e3c32fbce3de8f0f20e0334a4baf2cee31cb50dcea1926efe500ac119070b88a40767a019b285233a94578ca4a18b1ca7bd067d55828ea6d93dc6fe0b3960c441418eae6760b9d052eb76c051c1b6f805d23c7b73de55bc587fc3bbbc6afa71caf28f6edfceedc1e11b4a18d2a5d928a562414f503f4f78221fe74057214157ea225228aa8487bc902db9db50d25e752e75fc41132ce4a4e0251cd402e79d3d47dabe24ef0af18a0728ad53f2d2aba749135599e52e7c06399749c0e54376ec8921bda9d7e991f3ed140dc6e12b2a869d45349eedcc7f68d67f564d2abd342d590037008aa8d1beeafac17d446841d9d3128199548e55905ee42ac0f6dd3fc65f7e12722fcf18b5a8e1b0c0440e5a6a928324d241fc66467acfaf64742cff7f42a33745efe6cd9eccd1c4d709a7dcff839f0691dd9f1a54d247cc80c931dd22aa778ec1f1765a4201d2e409babb2f614d6e0d1e4ffeda810d54695b20743f754103ff305e062669ededf89f80d0bb5899f822c0c0a10c94d4fe6f3e9f7e8e42ac4e73d85d1f99da3829e9e18270e7ac0f462ec158111a56ce4ec4716ed6334f9660d00317481b5f8b8f9d17e9221d24565f17673ed56a8fa44b513cb6049464a54200f7b30914be8e25fd89dc6fc589174bc7fb9b756606fdfefee79f911b4b81fbe9fc5aeaecc0e8f5f17f84dd45a3f91324c4967a7485826db4b950042fcbd393755c34740b2d4107624008f6063aa5be180c586bfed2dba259fbf2e537ab43138b5d682edacd4361361591427016c2548a1909d06bb6afa5d6f6acbd9db4788212491fa1bf68940d57464748ecfef9de6135cf3223f9a67c14efa713c8ae1be8f466805323c5dc13ab1b5190e0bcf26287a6d5178e636931fa310a6f2061d34e18fdb4ce6fadc4791cdbd8a2b51654ebe3b4410a14bca0cc6f03fe590d9449bb6655e29a09e8f34991d00307d4d5c87e5da93c901dcbf3535dacab5af7112537c6b8333d5b3e138bf140fb46a3c1f525ddcbed33115908d0ab7538f9469e0eca206ccf41cb77c9452674e7e78ca184e74b647d7a582e8a4a41a6cebf6204ac7d5cbadd2ec35abf8117b4f072f63e1ccd8fba13ed5a121fca07879433b40aa85762ea858aaab09d46ac483e70496166dd9215d8157fcd6f57e55fb3dda27aaa601a44f1dfe8410a9dcd77f869ecd009213abff479302623f9c3785245951b59a16d1046b4e5d5af8c628a47e34954aea170ff8ea2d3e7e3b889189af4f6b45e214195af920834341e53c95268c7b4fd641d1cce16d2d6569d1f88b3712b0e60e9801c5200bb254058887c427fceba9d72275fdd5f93bc25af6d10c4449ef108ff10ed578666727b44eaeb3eb1c62c37d37810e3058060f8f75bf7f5f6b524fe6ddb50e7ac6fe18fe95f5e6f8417d37290f677078eff8c757bd287700eda71e93bc78d2afb3f3b214fd01cfc822a77f7af8bdb72847a064745b8065a14749e726fbeeb47fa3e47dc7f266e0e3365e06d3b1e864c6e5897145df7bdde90eb744013a7b36632d4cf6580479ccd1e31d57d3996bebcd5010785c975f4210ba6bbfc2e692eb1296a99675a1dee60cbf71fcfb3ddccea40dd1e41931cf34e0d0f3b4dc9eea14e69666f88168fabf0c21d860ab0daf8ff3754a4f1c3d2018b1c8dbbdceb1d57657a321770bb841da48c0dd2d73975892342ce603c5f816700c28805509cde971fe23459c851e68aa5b02dcbdd5596c97deab31bcb71106ed78668df52e419a8a32bd6ff38e19c3b1ab6e739c50c25fe36b66b9d4500675b35f096128accb6d31adc7fcf67718e782c27a2e336660a71752f5eae53156e79448978669f5b9e60ac7e9693fe0ca4890389c592d96c2d6a63dbf4169db70d0f2cd877a23a9ab79780988511a4b7c6b5c667ba0e562577302844969ccaee2c641566fc90028feabfbfb2b312027cdc459e46e81f549ace0debf2aa0a82c2b3c126b96df6a04420229055885dc062ce81b2b0b78d7bd11c47d46c9a266f3c8a6e875b339dbbc13f061c076cbc857184b12b2c8f1f74d447270d3accb9376399b361d4b74dfc0c30b48b53c7f5f9b2e61d3043d89ee7ab38f5bbe4aa8a8240c9d8dcaa60cd0a2fdc7404be01d1c52cdd0dea7bfad37b5cd8f909f29a63f9d900241f6795e78f322a8eafd2821891e84fc8805f5d83d9f10e7b1ded060a433827e05392c061301b0149b516b39204ec26971b746a79a971c1c21f5d5548096527559fb4480497f44bee3e12fa06c74248c2e344877c92e5db1738c8efe5f366e6c82c5495986cc5efc5714fc03e82f29f91ff561d533c5443c28fb83ca9a8454e8421fa0fe55694d51677546e00dc02114b983295c750c6e10b4eb4a45cd10a46d0a72f1eb2fe6be52978a96a157d7c883ad56155a076449d399a458fc515bbb5f3e6792ac90c5107459bd71e450e67eba4df6ac7a655d45f969ef165ad1d62853605639bf0274f23b40865f05737cc22d2ddd552a096810f687f438edc91069de12d72d9f0f76b21bce8db4a159fb2140cf82b5d58e05095f868c0721a18b0e53c85304c9125afe9a663c29345ef21ab9a58f25294dc4bd98e7ff2792f5a67458e36245c9a592363baa0a133b0ce22cec324b5981d3279c472ec600ce20033a52167d672d53ace783fc800921ee5bb65d085f997bb89e23cebd89291fcb21ced3b41cff40871b80e7f02671857dcf65909a248b735898f2a426b117246172b0525ec964cfca6e90ec0775f2d225adb90b6a4296055db8777c0cc641585d867d5278fb3e079806a614b4e6f39480771f31fb225fae127d209aa2413e4849cd9468852af1a47a742ed68b020a4928cc06a8cf5c3eda21479ca4b9aa7450a0c873e925e11612dc4799c5ec5f9d6c591d0de44948ba1604b83a1ea57a7a2ded07ba68bdb611cf47f185577b48237acbdaa3590b8057fe374f875ce829b62c98fbd67bcf128b5647f25fff9a643300eb95559b889baedf236e13040440bed93f153676dc6ec93456dab842dc2c527b22cd930042e3154573945b988c580ab04a04790e685381e5ff0afcb5b318f8561bf3fa4bbd0f21dd8262cf8ee2c8204e341a1c96e5491be7ab13bbccb1a29b3e31a8e9c279686ae3ea59ed5baa29760fa7f67f94e5b81db5d57563fc4a61c1700e4ceff8ea97471505da438334e49270fffa30acfc48fddd18b093c90fdef1b80c6 +MD = 5bd874505a88f3c9cc89440804bf07373aa24b2b12de13c9db28de31ec7dad213673445d1ac286ab9593309c90c3e795 + +Len = 21832 +Msg = 6830be930c65fa913ba12f715a3fa17676ad54a94066297155204963c346c65bc9a880ccdf724654f65a3e94011e873eb42e1c6f8ca5fc400f7e889855052c44c78b4149275e3278d1f9de4440773ed1d34e484dd1391383ac763bad8232878ae942c9b1ec13062551e4d7291e320f565b749eea1809b663b26f2c4d53b52058b833e0ad37780a820084f1eca33842f5d20ae8ef68fd2c08abd1211ece763fd4bbc74ee50f7586b86541f435d76f1fd8c277ec03cafdbf991e03e3c8fd5e2c267a66da007cf2c1ee0884a7abc3c0ee24b22373cf45f1b53e946f3af4e8532e777d794ea786d7044d72b3d3f76e13f6042b7644fbe1c15721947ced4a963e8eef4d667081360c97fd2a3840c1e051809eb4d8292ea656ed67a692c6710f0895b571970937937ac225b879b6b02260d41ad5b1e8109d96bf3b52198b125b9788f27172e070a507cdeea5e0fd6c3b2a3aa116694a4acd6a14c3217905d483d5b2cdd661bfd5759cff7f78d3dc9e3396fa5b006817843fba36279a1bfc608ea95a6f26cb6c0d0a22a101b9bc1dee138b5b6f1a161765f96f6b904665385d84fac7ffec18b0c16d7ffb9bf1028603e2f3a605ecdc1196056ffc26abc080746db242a6adaf5399a49d5576a70de086a8b52447ff20cfbf6ba4311053959d4d52b8138cf3fa1d3cb962f7b96345f21e6db91a5bda4b178731f55177c64a588f3af482d84560d653b3b8288dad1286743ae7d36906c6b2966149a6828a4977e22e4ed7b32c4945859b86321a0edc622f1627969a09f86895028a765a29f8c2f035ae59442f1d337b78b45b870d0b4ff80a61aa156d48002c1d9f0a262bc1035e57fc51b4d64568dd5229ecfd330715771d7d5803b9204402b970aa0f160b00d79c20072aa927ac5232cf2ca306387c535763e88c76e7fac0dee59d3d743d82010d02c3cf312cc7821f8d65a210074c35c0fba2d72b04eb0d94e62dd7ccc15184b18bcdcaf5bc8016214bdd21d9da4cc4612ecd0d60e1df92e45ba005a7fe350991a16c447d40a0b640f1de49e71a45a941e2b3559ee59ef7d52c3ff18c5cf638b32dea65521ef0098568ae41c430008b68009ad86b78efe3704152c003435bb821188d54fbc035b8f7969532f8824213df71cbbe52029bfebc82219d941b2e32e3489e3a008c3a6a9e64dd44097ad6e9ad1b8e2ed8eb6bf1c1d8f3aec84c354dffa7643eeaecc6c883bacc9e817f83b4dae82b50879c24648729121b263e39b27f1c29894047a07aad81ac69e8f8101c6fbfe94de67b91fe175fc40d375a01086a8e33428a059127249fc3ccc44f46cb7387114d7df17968786052ac810657f8c9e7cc92518d6177f1fe5af09febed66ee2aeb77d567a34ab216041f8eab012aa30e3aa11b49d8141b84b8fd0034cd98e98fbff47543d84ace67218fe6b2c84500ebc59673a0bda3aa1b271a7092ad066a9ed5ece5eee013d33df3230f8174f2e966b79adefadacfa7aaed6f766d565b7c3f7486aed1834bc97fc0049382cdd8646756d4e6bff53d191953259a2d913d245ae6ea5753899bb815d159fa1c9aa07cd6ec6d1258d7980850a164643a24556cd7714168dbb9aaa9e66e4bcab6a5f1369bbf8cea2b48867d361f535dfdd74a5b9e5eb36ad3dc21a3dcde028dbab4749c9e175af7a110af7eb5151b0cdc74c4f998f567e4a2baa7afde6ba5ca8f90d0b5c83effc023f6bd16b4cae3f940c16d4fab7d865eb01be5d4d55b5c0a9d01ae89ff7ba2ce17c3554a1c87d4ad9288ea64c040376065c7821aa7f751d44ccfb6212c156ba7e63f2124d39416af388fe641c084a373298527893d87a9b004c18f84385583d5f932c9abc239d0879c9f07ec9192f11e641f7c2a7f538f262da0e2ba098312e0b764f5e7d1be2bbe247ff56f1db24aea7e5b280455a229bf2f3456cc89e73f4e879d4ce1e96a4edb3af959d24a2bd65edf02d41fa8be9f02724594c19ec833a9d3a476a0f086616645d3db1b0247bc02efdc27845eed1a785f9b43a13270167802421c2cd05a8ee8add622542c4c255e17b0ca3a6178c2a75cfd0c752c250f447c3fe68e6f2efbe8d9cad784b08338fbbd48644997a7be19d235974474304694a8637bcdb74ad0ee3377a1b476341e604b6a9ebaeac137562a098b16f2d9e4f0f07584f18ef5368222a429eb65a7fe1527df2094411054e4ca4291f38e6711e0bb3fa803de79552d0e1b1731672301a3bb6e91df83da3e4d1ca850e43024f4ed7287900a8e1c54765fa2128e63f24f916de19aa49a681c19860271f0c056b69e7b16e30e86275be67e02c20b425a0f67a7ffe2ea6d0217ce721a9b2026467e7c3fb44a18aee29403d103d0afeaa46aaed08f12b9e4ef57f647b6777b4a3c750e26286d2eee942558c16ce483441787ed4f5ad119e77903186d9fac09147fc3dc993cf35b2e86366ab707a58d38fd8fac8e28c8135ee643bd4c9de3d26d598f6efeb685a45601f0c3199abcd7af9ca973f4c09eae317f416c4c77c4df3b10014dbe5fca134e4b7aea50eed0698f3efecbe9ecfcf3498c22add5f7f63768ed430042ff6baffeacfd67c5cb8a49c229b53bd5728ae88c5511084fe322e2da387a0ff15e0f804e6ea1c3dff892812ea5f74c211bef97e32134062204efe97b39d10332435f8f27d88d85053f8f19bdfcec8433afd408363ab32eb622065331386e626f7802e36f31ea35a1662a175674bb6e74f6e0426ee6b70973050e28e67c79b70fc3a18410c2df5b1a360a85e0578d8f4cb8bc4d716e681dc274b070814e1b877aede47bf0d39580d877d76a45eb897124bc0f31291aedf509389434eaf67b5c17be72cff9ab342b43f13bcf6c79d89b62cb82f67d316f16b119617c09bcc3bd50fdf4881194e3e5c36bdcbb3d48a19570adbda554fd150a23dfc04ec6e718338c7411af22d4ca35c0af6236a0a20de8b42a674698c40858c65258b409c1a44534e9724b13b412a3a28376497dcd441b980928df30cf6f88013ad2b5ba908f7bae25bf64cc7ce3b7d1b0c0fabc126db68214aa7a046673223e5ed559c19d015d63f09f03357464fab5fee75345b9b041dc11921efcd03cafe4870aa906302174bb11ba2e36e4bef3b634945c000a36450dc98bd40057f1b75b7d18ac719117471f52b9f0b713182b3d1c6e1cd64d274a7d043ba3f841bac00a08a96beb070c5ef579444ea04a9b28b07c1e9badc9abd6948a4a93ccd7c0545bf062ec5adb2842a64f0252d9d16f74791d4be16fc7e873ba2261ac64612bfab5fced39a856927a9b9c9c034af0bb97fec79ef7028f09a8579628f7a827233b80f6f25abbbd738e3b28b969dcefa717a941bee4506934fdd3ac467b8170cf9d25a418557d5bf207edba028d75155d7ee15555b03f9d92fb962d6440d58657aa0ace0834d477386c1b1c1f76feab02530dc90864b9724a2908e0294f8eafe4ea983e6affaa586c452c14b72c60f9c11f97668106a5318410928f3eaf92349ee437bbe5bce647b71b886b72b88147c069e6f468a1ea236a369a004a68cb5dac20500c2175708c417497e9fa214bdd27b9623b643a728d21258afcf6831f71362649fac731306f31dbc055f46fa5021f9773021edb24bad465c84bea0778ba667f8c4d7ff90e38afd56e780bab7600d08c81133e8be8f1a97cbeb5cdfcbd7e62b27fcdf0d4f22ee5ec061be5dca81d611ff4346b53a679c8f4d202476bd60652478c41c3cac49af9a7f1042a0a22a2fad9342e4d39469b5a556ef9025baa9a5fc61a739fe36cc4138e97fc833dccd7c541a9c98d48b19f8725f964a3d42381b1b890292d28d2f45c2a60ca987e8e03e7df +MD = 6b1005ddfcda73f8aa8f0ac680742cdec94138106f924a90693c794b032323e16dff33a9d5bcf7b3189e9ea713023346 + +Len = 22672 +Msg = 78605f3374ea8b8d0785fabf3104c1dcc9b38e271398dd7a90f96fe91a1ff8a2305919178e438d600047a7da7965fc155f305ded2a1908f62df01e1eb3a8588d4e5bf6d06c8df9372bb5927b6ffadaa4313ac32a1a504f5b509700fc90aa8f337d6ee1a5375336db30d6a4ea3b4bc453e6d9ab280ac61b70a0f4fbcdd6ac055c639bbfdd171aac14b6b3c36e06e020e82715fa2d2301d5fec612f8d7b03722d0a8e979c1336cc3a96552d851f842572c9bf799828c8be3cd69f6e06444d24e56f561f799b4d0e364e7bdccd938f8d2e7eb86706f6eecafa532aa99baba05f1b8f20921adc1cf740be1fc854fef8af8e1becb673bf1aa9f4ec9350d213b5873bc46ebdf4483f0de67fe15edfb448130e1bdcc67303c4f1d8fd59f22e3ef543c2b990f1aa722bb8940e312eb246063e4b19093569478639032fff0c247fd80b4cc957bb81fc5b8de5e3bfa66136abb7b17de281eb0cc6c60fdee31d4948d644469e039a3f294704388acd648118b0e5ddc4f91a5cc61f4f4b94a6a4013c98952c82251c168b86a2188dead7864ebe6f1c88cd8d5305f82b62ebda1ee0cd77648b204c9fccb592ee1247b87de54b1caa1a23d059423ed9f0d23ede0c6c6dfb38cef2dab3b619e45e925286d622b0643d5340a1eccee33d16161822eaf8b0ac9884747ff6674b036a3528f65ec2f11d8f344992d64da5aa31bb1259494a17f3fa282f7cb644ab7897575587a64aafb11649b9539442d8a9aa1d97e185a51679d4467e7191f2bdac7c9542bb1b2e2eb769001a44b542fea405ca134c5eae3ea6cd5c0bff07e61417706b9ae14be200a90df3d6e6a7c2aa31cb4d3f0a02c9f2f33bd53265969331521946a8caa70ab7fe6ba199c9ea464dcb6123559b308cd5f7a63e9c55ac8e87e4ddb2f6b7bb1cd7300875bd6efb426be97dc91180567b4a1ca314944fe83c9a38443d2f49067cc0e67afccc36694b871467cadd49e2f9d1ea98e3d4a4a831ead4d3419cef07cf177a29b340c0a2c621c4b585136874ad0fea2e28b7f48ae2fc33116cea1a3d684d739b25b59e4646ce82fda47e5c79e95683a96fc8dffed430eb751b717b25fcd55b55b0851fa251dfc7968568a66153484fb1058197729a3b6674d9dd624fd131a9d00059c5655bf81b16c45cd6d96f47b6cb967ceb94898e2c9724786019aa04e790818e300de989e604ddd55e3081f7515f9f051cc3468ba66297fd0521dba17d2db0acefea6f17c0d73e6cbd055fb997f39bd4db8d35b67c5d80b5c1e6eaaa02ee1a2045a971142404628d63c64d11031df9468860fbb116ee9b4d16d75b80f1882aa2e1c984219812e6a1f301de802b3553e4a3dcecedfeac242d7471a2b8d1526e8f34a90ca295993764eb3688a968e01839ce5fadefac0cd7d18b5454d41af3526fcee69f2994fdd120ace2dfdf4494d2a06877a318a78702d39bede64546d172af00f0a0292ec7407fb88548a456ca0fd2f29360fb69b1519e56bcdb9edd734bc78b65b423bb6c01ccae9c579b18061c2c0d616c2a6b0230ac2c3fa943576f4a63cea44f9bd372a1b1ff969125f0cfa4260930291833f02c878ce4d3c54d1c0afe3b3ad713ff718caa1c1269d7898d245b86ae2c375d0191bb094affb7171fe9e16197ef0ea7df3f3f948e56123ac519370629ea1a3ecd2cb121e0617b4dc183c7c259fbfe551245ccf968fa789d1dff32f831e73361a949f45733cd9469c7451bedef82659fb11cecab40ab7d18ee42e9dd64b8155e3c860f29b37894f397ca5834d726c6e03241092a940d9246cc80c63620b1229ced4d6c09fe16ff63996ff7478f3db4bf2c4ecd07d1755aaf2f3552930476fda6321c9588620d364262c28386964b9195058282c3979728aa8ced19646e8e18f2a17016158defcc187a5e97828ae4fffa34a8d4de44d79ed16bf4853aed4ae70ac1e45841d023334e56908dcbbb7e5267501e3dc867bb2fac52f810870f51ea6709f5f69de74c0e5c7e04d0b2c69c3b64de5f28028ea65da3c87455c92317b59fe0015b7a31cebfdb57282ae83ab30d6b45e81e2d084dab4032d5cf71e720bb0dfab301672e2fca437876d6cc66476ae31d45aa9893059b1a38b8e821b9f18d49a06783055ae3a01d687d8eeff7edb674caf437e58d629f9a307a3a592a0e8edb77bb4aa5368ee3d19da89dc35e0a8298d570509475f93b38b0b62078a5dc322bf71ae2f74f8607f89e848dd7172241b7d3568f15db1df08e4fe94510bbdf39b39502c65c146d8f0ac19df99ba1c9966a3af33dfa2b5551f3448012a1eabbf81ad7ff7f4413a9eb80dd614b918c64d31872e307a1f533c210651713bc90c6efca368d785fdbdf9fe3185b1e5935889a5b21b256bdb74de35df80ac2c16c94933a47293c0fbb533eaa2907cc434ba95eaabdcdb59defe8184493f79a40dca984f3705f54c450c92a6e75d3eff02d5b927fadb1aed31db6e35cbf6a24bb5f7a377e589c3d2e3a85f578856be3d058f3d85287ea9cfdbf1ed71ee0bedca1638b1d43566c6f9db73e1280de1c62746d1682bbc2f52a6e42a456038e723c938760b8eaf05c66a3753623fff681c65cc8484413e55db1a556cc02933f20cef2497faccdbcc8bccff3228c4e652899ea08ed7f137570dd535a1a4f567946fe5e185c4b64224dcc839f77ce04807d57ac8d9aa612e9fb07c8cb03aeb5b3615537726b1756b768206ef8aa6baafefc8a34e4b44b9ab948cba6381ca34973ec7dfef640b31de28462d28d3ee7ca2722abe39ceef22369e6834c1fc9cf7a3164b345026181124a4eee5edb99c4baaf8c2769249f1c458250e95ae09f75d082469f8a253223ec45042d84527f7524ee9597060a393c6989144833290258e4dd2ebd4edd56fe046960cac380248b616adb757abc61d507f4bd3a656796cb1fa87976f3a93471e33dd1209ce33d7a28aaca4d17c99d78c94b983a821ac15ee97aa37729075f420128c1d9810a2ec3c334ee886da0408a05f441b2e9c11676eada59184f863bd0f6b0df5000537cfac98fc4a20cdeffab4685465e3cd91ac59c3df6e4e7945e913c7c762eab5dbc71b411c94445d42f3f13852276cbe122ad762c095771b03c153ac222cfe29741eb1b7188c9c93e53c7e56a42a74777d2b0e11b0d0a8e6868df8a5861ae368eb1a958156fbd076c11d844ab436a1febbf5295817e589e3b49529375bf6427a2904f02740a8880ebcdd2b9de9139b5db3d04ebf5d9dc11976200fec0986c2681524e9323c5d6b64bfc69ad6aa880b9c4c06a6cfeac0f991b577d14bf8930c3996c1a929b4e0217fb31efa7d615e99c170de580f2716d85157e399dc91e4c7f5962457940ffa53687e2e721a755decd6069f8c087a66076345aa8c283a439ca5fc961cfcb573a9250a3e2b364e4dade2f5926c404c7a2dce6814d4b65c763350b05d20e70e13cac03d964d5854f683ee27ff1d410618f39ba76b990e604633fe99c18ae082a25f40017dff09ef201701832eca930e0901d1e9f502b9ac7b45b7a10c826c79e70fae3d3d69d087921123f16699bcce15fe7818fc383eaadd1084af8432155bab8311d91cb4358415185c59f0b246ac0393991bc66325c1333d6cac73c06290b66271bc6308c04e71d4b5a3143eb9129d673bda9ba9f7584773787e1f54db80d055d7d0598cfa4d6eee35b81a659b67a923663dc5353bd9df5baf0ed1170993c10449fc48696ae9d30ee57e4a4e7613f06e222c8b2d79abc49c1944d03073325016d22876c6998b6adbcbdeec22d17e3af1788f34ba3a36bedfbe0866c8a2c34734773c2ccc0d99f9fef1c0470835104f536f4e090304e295cca743d9071cb06c054221b2a3507d491e5f0da4292931f63d105152316217100adbdb72146b5f88323abd5072ea9d22e41cab4bad3549f9576280576bd93df84262ba7918163a626267f94e6161634cf8308484bbe1c01e486dc45fdaf3bc151b45c6363aa6a7c43ed2 +MD = 5acda45e1cc211222a11a97959cc44a75f3a20d4d812b8730ef980652c9105d115dc30025ed901454faba7685a6250f3 + +Len = 23512 +Msg = c2883c7a5cd53fecd6320256bf45a039223ba3c5fe691a9ff532ece1482b6b63037d2c39758b177ce3d5ba4e7e1ce21891c86d16ff865a16ed35227cbc034b8a3ad33ade19e3493ca0ab198ea0082a29aa99a8527f698801c8cfd4e5079343a7ce520d732f24fdb5737bc8200e4f9df5d378fd82655bcde9eec8aa2213237c4327c24eff9e975d6dc50f6e0bb1396503752b14ad99a25154c7e84b3dc6fb1ee5adeba48b50848eeeff2db4587010aadbf97b94db02863bcdbbf7603d0a625016c895b81e2c33bbc0879e420e321a9306c53026148a51b3d932bc902bc6a23a5de08732c01aeb0a69c72abf35e1a1490b431271611849e3029400840ee20105425d8ab97902f5a3732598d4d664ebf472dae81ec995b8f1cf498be3ee45c8d94da766f552cc99af660bb228f8a340bac4f17cd455e7e405c8b92556d4d93edd0726e38f52611f56c8e03e64a386eac688f2943c0cf71648764c9685c685ad3af742c82f82a7cfbf230c052fdff5303e4644f9fdf6ad95e1606ba517cf315b17a664df7ce887f113fef7cf32b5d8594b874f73c01bf1abf90f7c1cb5f4c5919d9af2ee1f8ee9cc79e20964142c17ae14d17bca2d84ac9eb809e9c1063f2a97f45d56bebf7cb6a91a56aa8b7e4d9a77c2af30c5eb38c4b745d8185db3b746b54377f61705b9d4d01ee2420e181f49fc7ca6d62da33f233ec90373b763640233b26e3cc1994d2d89ac0e39b389aa0d846b40d5cafca2af7b6b136099bf4f47586bcc8f832240a81cec63f7437af6cc58b60495649f6852b5548f49c96e7ffb6e93185626499a2cd00768e485920c70c1877a7fc33399f336abff951019fc07bb55dbfb73b564a3ef25a668437af3df05032bf9ae613e7a4499ecac3668cf5488d79ce52f0ea6f4bf6da3ec43d9b3036c549e6cefd15dce2846ddf60302ffc91c41e37c25fe66078908e9d64e5855c240a25b414c2a01d92ad95adb3f90944dc1bc39281c2baec4941e00902c9fdf06c714ebde8e152f82917bebc3b1b997cabd702451db3d85132ad66e80a5555cb64bd3d5ad7d39f1b1a753191622260f2759842e5f2bddf4dc9158bd108122d1ba1206a114e03f4e4eb28a6b3c5a7f044cdd20dfbad4b3010712cd74a787b048fa64d6d87d80ce4f42fb476a9d216b7f21916ebeca9e66b77cf55d1cac80a4c85d8b6b014f268ffa73cab39ca13f92868dbc9353f8519f1b23822f3c8935a95acdceeca4f2982959ca67f68bb17b9d247ba8ba26aab40537e4016c5ca56b65053274824ace9f45742f1937bf339e345ed09b09c049904112a8b93b0568ed80d172c6547a4b028b518b299ebf9170fe3e75dea8a83eadfab455f3c5bd3a82a3c6760c8bbcd18ba2fac4df541331b9a4cb52b9c066f0d3d926d5f7310f83f176ed268e4e98c8003377c48381437d41cd0d4f737983c6ca856f0e0da880ab03a04d6a93c697982ae5ce715d4cd7dbd0220d5556fa862a59a797ea7d529a1a80caee2b651a40a9d16109b5b5de58b52d4bd24aa86cf7834ae7a7508e56e439309bd94f4a731b63bd4f3077d25f4e7221ef6418b2f65f3863eca62789dde66edabc15c08bf9b12fb555499ffdf63f7a74b6cca5bcc144b36d5f9c59b60e292248d4aa646fd38973821e5e147ecbb535ee4a11db0ef5315b2fe791cd5d1234be408ca125402a2c98ec5076c09d07370b56503ba0efb9ab98732d8e6bc6108fa88b8c01ea44252007bb949a8aa2d24e64767353dea9353cd2ffd99a1b3931c34af17bd29ac5edef27b791d15ad45380a81459607c82926b719c92bec5fd9d570b39011d1f09a9205fa8f023187cb3583ff9aa6a62c3f8c0dd120001515b7bd3522dc7e96059823c19555898ace2195b91ed0f7a78b38ec47f29cc6ba79bf3c08993753e45fca0cabc877239ff4eae1306b82f96a69c7dfebda99e04b0052fa51734b324b63c2a52b006e60df7089a070721b4c9d4c4ecf700591dd552e0540a64d827a49b5f495d5c9a5b1c7d5704bffaf14318ea740435b102f2e576768d77d8467cc5dcae24722a0b796f7a8514c449f0878dd0f4ed42366cc53c050d0075db4858906271e4198120e90dd4d8f49d5ae6252f6e8ccea6f95f3de3e5eed58bd5a4640b13f0b0dac9a253fe7599c9d2979bc806ac84cfe760a302e1006135422e234740d872b13e6b5a5e4b430fbeec67d7161b73231a8fd5ffbd3e3cad48214e8da9379a410ecccd0db3fb2884f8723161b775a9b3d426bf3d1603831c35b09daa34f73fa3f00d5886fa160b3ea2ec5f02541c387a28328623b437bcf4257784428e88b0e17f87748cdaa5d386e2e25882951906c13c3d917a40e2cf7e3fff691c5ff2d642e2c48ae6fbaf6aa4e0dd84a92173fdcf38ce4a09610ca302accfb501503d9810424c005d063cb7e0c6654b3ea13204ee456e189ac0be22c8936fd1b90872dd91c6a540b9a355a282b900150bbc5f02648ba363f3040033171d68230c30998f0f9759b0c2790013d1e3384ad61b01e17a31f894ddd6d8be39714115c270b895d0dcf0ba3f3147f2166c945268652088785ff21120de50ac74b9820ea26fd9d71dbef0c5fa7232279a7c9c958943c4dfa63f1b4384c36fe3111ab47675d6033d3d65e338b9e5c89ba239d97c005df6ce4bf6fa92d12e3d4c57be5eb4034c3faf7af8507d4532113479ced26d975abd3db1af1767cec6c3cf90cd0832147a94151aa0c0fb660015db66610fd114e322141e90fb2844340855026e3a5770080a576684ba1ae3f7dd79b01b1911409f2c3bdbc12d3ffc1f14c4f7ca7d8bde9da95da6cdc64286c070f4a0237793e337e39a306b3512bb30f006b509583628e17a0f22a26cdb1503d6367ea2b1c1c5524f1a64b69c0b4c0fa301845254c0147e8456212c354d5967182592bf5002ad9979a1c1c9e9907663359faecdf7926b19cf18ed92a8011a953dab23a3dbbd65b368188dcda40b00d4afc67aa4cc12f45d643fccfd4e5d20354daf7a75da5cb34a246811e956e3b30c18602ffc58a979ef4ab10795adca32ee5118e05ed6466003b6779546868057b07854160025bfc07a8958e5814fb11a684fd09b8656e33488252f610bbc4ab46bd88a77d5babd93a42a1ab0eabc789e4c52bef314e29bf6817977bc6180a991e23fea9aa69f09b81534e1aef77a8987425fca323002d67095bb36f0705b05b7c0b55cc6995d0df776af9429d1134a9cf180dc9e043ffc686df256435fd4c6efab42c844d67b301a6fa41b679f0f25a702bcdc81b52075a7b126befe577454ff4bef165d8681d9e7a71a5eb18af4816e1c1cb2216e2ea9f5085f56687fc117af4ac32e56d1f77228c719444eba4cc5bbe8a647c755ef01191aa606cb004578c94dc7f87ade6662a376a9b788569e5b540e6481ba92ede3dd9002b66d0188dd13ff015d10d65611215dd39fa58773aa01355e49444eb0b807127c4e98ab11af57057b435fe04de769249ee2ee74521a8c059b88abb1bee960471bb6922668575b0a3d94b025d54c45721369ab46c313bb28232438e2a1dcb0d8e7d7a399153be8b44d364bcd75a87bef381c24244efd5843fe07330ae1fbbf6ce897152ca0c5c5abb51378ffb663d44417e3a0377c4029013517e45004ad54ac27df2e09925cbc987d117fe31ee51819b8a769a6d444f707ce3e92dd94593940ab98385573679323ab1aa7a237960f15214ec59adf728900d46287d8196934cf7ca8793bc95013f349153a6489df80e15cc2fd3b2330a9924c6d096a19440e01a3f93ae11e7e04b15ee97e509a26352571e958b02ae71d65404661bb1e528f802771c26ff9592e04f380bc8ff5d4f48866ad20227c00ae22b7d5d7f2affb7ef110fa5b0ee34958950fc13b481f5286b245f59bb89fe12471ba02b23855a7a4ff677b4be663b64c0cba9445a4a107b34c16a8139b1df447f950b53cb496beca5033dbdb1e0108d010fce120cb045a42fedfb0cef27ea0df6381d6bb8ffda8b68c7c0453de45a7ad49de9015e4d0b5fd6faaf415e6484cb356554d78f00fcd315c4addfb50b8fcab60678a6c188b7faa487e5c2f9f05628c7bd502bb0056960268a64e1a99e16d91fda0b56d8ebf1f123064d066443c49327a08decce65969f357 +MD = 84789c55b2a0ca9c83f3666dd8ce1b8d0e117f275d9356ea69fa51764fa0040838b641d1a3f1098cf02eb9d0692a1bfd + +Len = 24352 +Msg = 0965d3357c15f28e8cce465824679b391fdc4d315043682ac5020ed04c4019a2379902495d160229615c76373723880ae3ea0c3484e9a8d292483862648e70d5f55cc3e5e75b84a9c8734c67953e9ba97cbcc293e6480073b5caeb9aca2f116bcb16e0b123ccc3364a7b8e91469e1c3f72b836f57e46b735b7f2ee208809448b412f1f54185206f66edc055c532d53f34b48320352cc173f1f270b9ba606515de00f4977ced39414bcfe7971c3d187ee91d37c656dc366ba75d008b32a0d7f0a2f1f26c14e38b6b6bc4ab2779e740257cbc1ddc2d411edcd4257ae111e0518bab7c57ddb9f6ab405f7267717ecfd0a5782791dc291a0f4a10c23c55d89d86294fe6a176cc950d628f4fb91f9b654e8163d65040eaa56c35d5e9c153e746da6c18e77bd1dd5d164473b32c9c40461e4bb84ec5a4e2a1da12abd2a655de6ac2b69ef523596cad7a58c5531e520dc0c456fdf76e62916dcd830b3357f62e77d3bb2a765477eb049e21dc962adb7483d5559d76b7148787bae96c72529f47fc81cc74017bd7e900e63221f2ceb2e4fdc5aa2f334c35357e16c8582622cbbb77517ce42cf5e3d711070c4e0f66530f9d19d71bc37a4f1bcf859246a545061966c74f033f7f1645b36512a932ae4634f0466efb9dddccaaea7bf9c09645c8b25967b549df63f9a56684d7ec02f306f585dfd43728e328735d6e414e7f81ae36bd97423073410886b8eade5ef6d11fd1dc5a9976fb370d0596d11b58a7a5011701ea684fa192bd5a191ba89a94c4fb5a422b31039b25c4c23558ea77c50c7bd3c4e5aa0fd0d5a2a0157b9927534b13ef75e63d857f5bfa49a74a31145e4478ed84fd89e9878632f91c9f528dc8d01411e5f011751e26080c7b3981b6b9c982c4b0b68a753c20f8b5bcfb57165bf05651f0fd5f4b0e30986b0fab4ef78e281409d6852e3b75326e7675240989832865304542798fa5f80615f3241b2f41dcb72d650dd794b9370eabb38dfc3fd4e4bb2d5183e2bbabe8eb7dc41858f65b43e69ffaa529297ebb53d616bda1b1d7c1e2b984263d47567fb312d11c9ac5511a2ce205ef95524c1bc8761d179c77f22c56657badebbb5c48f765c8954314b9bbf483f531aeb797e4e71c15404efabaa090a1968f709013c122f71907047d0ba5d806673fd7b1f8b33a38bdbc2bd2a7ab2bfe734f6e6e2374b03721063166bd6431d9ca5ea2e9c4e33c4c74dfc5783fc882fc8062279df1d039b69f076c5a4573ac8ead1282c7a31157c7b94fae53e965300c4c6c4eb8057029e5d18f17c03a60a2956df009c409ba375b1970490e4b2dadae35c24634d4b10b5576f1c6511297be7ebb8baa677f4a354703e627ffcb7e6662eb08a0acf62f5885edf3ea5554954abae429e74a6a3dec4c1715bdc0e0d3f4bacaa3e088d0478be7a50a167576e5f1ca966f32b55121c6baa1838cca21cad32653387840f9a63ffb3a88bd1a00162e3e30d03f60da825f1361b4279414bf8c36231afa6de8a7cf512d0450bb76826a7641d14fb54cdc0ff6a62be0b7204e7a5aa8efc98813e8c469eb0173e240d731135806f62b5e9b73d50d6f7aabeaf43814530b77f801c5a9a60304892705611c95d1c5c54b564d052ef5d347cacb2d4fe3c012786648eb09a5e39222e22adc776e4db22f9dea7d4e74fe0bcacc47662c596e796d2b4fb54eda2b1eb3bc2795ec0d3a30b78b7188aa37948d8608e63b57d5bcc4a8ef8cb0f3c3482ece0d9229f51315e5df9c820bc2f747bd0c193e294cf94978ce0b965a92f1a926d46ee104fce06f361a69a2830324863ecf65a59c9634830a4f07d33ea6d5ecbb69489aa39e25a4a5fa5b496af55fee774276b311ae07f7fdae7cf9c9a9f08130ef3325a2433364b9f1e9ed301409deeaf7e4fd350ef416b76ed3408806c1e54bf8b7288d769a1de683ae148ee9a2d62e6208da5333797debf2936df657daa750f83d09a1b2da4eb0420045c3e0bb72a6138ad118a6188c0fec45c8a1179b35e4704d5f9b827465ab9fa8f76b83d412e68ec387e1f141df77ce62e6f4c0942f7ae35070d76fe8f13d0ed0b0026d5d6564364b554b8f95d6c7eb535f7ded55e288e3ff13e1d5a87fe9023ff614e7e7b8a39c9acfa1eb750074f5cf88a8e840fd92d4918f574e5370443c4f301f8de3ab29343a5da19f7feb13601009125bf5df2d57c06984444a60b2ff76f48ee9d1ab69af9295b706170507acdd3726c2d515bcc0042915522dcfc9ee5fc9ef764247e9314bfe5ed9cadcd64e7fb972877f2fc5afc54466f25e2c0d6b6216bdadb5ef2c9bbf0e05651bd113c770066244449bdc998c5215af5bf3d2091671760a9d2fb831743b47427a9034aa76849273d5c875ffe1b88dd3b7b5dc39e550a5176887f085040ca0fc7788ad59dbda7f80a35406653e1e5c29f1f07090773ac75ec8667a18d6f88efd83290278186e86052dcd224c29c9fcfc8b22338f1496693b1d69c96f65957db03e0fc867c4c7327bd5723e270d61ecd5f3c989986609e756d80052fb585a09cf088b63bb696b215f5b01de78816ca830bc65074ee3fbde1c98a89b4ef7bc9fa4635a58d56ec0cf19fefa77d30e50bbb75563211516e2ca06cfe126ccfc43cbdaeecb3c684d6e985661aa8ea90ca493b45f726b7d676527a00e387a07ae75fadcfb7c72d6addb197ef3b0a77d24deccc22ae14afa5de96362a42cf981b6c9c92529dc9092d88cdf0e559b46c1bf65c36b485e442e72e629e9422d49cd8dc5a33dea7a2a3f860a358ee7d8e11964e0141a4837eb5c4ef1d78e68b7df4d9be00591cdb3843f1ec9c97b2ae80ad68dc44b59ab0cb5363a82e8dc786b2e7479af8ccb343743040b42074dbf4728abc288b593d15b163ede1ffa5e0195bbe4af9a9544ce73eb40e4098b80e574ceeb8bb3ff636b9192c8922f788d94f61c209617bb98fcd7f1583196a2bf5e0f622841cc9542ca5ecf760f47efd592daa38ad5dd6c223ff1d9cc6c600953896586e49d38f3bc8df100c9adefccd08bd1f6b5d722239b185029100cfc1be7f825b192f69fb73b2716fb35e69d9c09006a8a2422ac7e4e065143c58bd146e71aae56d5d6574c39162f034d41b7e9e96102e24840c2d8b59a93de4f716636cb618dfb0fc4f61f50ebb7ad6257f512fc5e4973a4aa0bdf8c45964d304651581f7d4322b33b02ccfd083f7e3791abb3bc289cd2cbc6fddf2c87b714fa82f9275dce4c4262b0f3c1a80c24ea1f77625893807b6420400f6400d194ba10bfe41100c527fe90bf4f99dc5816759c81af5e2cd673cc447db71ab3c3adc1154598c1930264abbfce7cb2248c72a52138e950e29b046f9b089b4fbfde70be6acc9da5aef660ce626711a6fb09c7fd6015b6bd5f5eabb2a649129f8f727c06a3ad59499f21cafb0b0194e4ea6084e2bba08e1ffd91d859f8e7b3769d302e3e32705209fe04f1a62c368cf84d2147f9a651d5d537c528ba054d0451838805d9a9ae1e7346208354386e506dcdbc7fa6b2b22499a8791b575de17bdcbcfaa14d7bcf2511f204ee89d2218591d6a2aa7e633a00c9ca1e0eb6555d8064b4087f1e2b4bfc72ac1291bb6be89310e26436e53a61f0e21734915b9e19c8860321fdc02abd0af1beea1b6d883c1f779b81c38f9ab25b7f1a5d31bbaa9e9abd14d7bbe80c9ae72bb4ebfa14999471124c7bdeb216b3c6fd3de86e5add64ad7683aa27da435e079d28a8ac55127a3e9d7fc2c71130deb9e91c66b5cdd8f4474eba19c03b618ee2b28490b083a555ee55cff73b017babbacf106896691fd61ea23297236fe9961ef843448534a4dff6f7a779a92759a3201bc46e9ec104828a1d87b2b00c4e1c02fb0f24b8fcb340eeef80ca7fe74d4da05b92d91d7a3972102d23fcf484f179352722c1ca2033513ca9f67a4db5d913b21b2648b0d9212d573d81c67f6e86463c0938ac1763b75976a3730981378f8dbbb6d93df7825e3cb5db4bafaf1d7f0b6e0dbb344f1ba1f2238880e8c8d0d32443db46193ffa42f8b292cc2902364e2171c1150acfdca593a9b59aa87316466fe0d4d76b18956219e3d09dc3173d7630bdbff080281b14b69fb73ac91e7c5bd8f95007b400084de8b0312afe6c9779a1c866b844d64b81f36c19fbbb297775f813b9718494b7691dae111e4b60d8db0d1831e6c959027fa2953a37ff329c3735c69d8f4d35274601441cc22aa2761ccb23be067e3ec4606cb1a47a25b85f121a6868db8e6fdc673c08a0d12c9003b174816781d3e605c6ba37e55c9f3944993e9fa7c0b +MD = 6f287a049831920f0533f610f4e93c7ff25c09325d311f8990e8756f4d61908b504edf187050d96736d3e5f2bf9b98a5 + +Len = 25192 +Msg = 66ee51a8d1bdf1e0231926a00064dcf7d0b9d3756fcff2322620df11db4acc4684b59416e27606de6b73805788c8c118006af85db40a20068e3d90e3b4d9ce2e01a2a559b526770b6be5d4654cb54a8983657f5df0a17e8c21154fce7ed6ca6ac3fdacf9b495eb6c0cb74750b6f322513ff291fd8c5ab3cbc8f2425ca1076700b40ed37c458a0b0b343003a22c49ef781e5956c6eefe68cb6c1a911485344efabb1c406cd2ce7fefcc9930e218815a0707e1f53f7f554495f3d6657e9227275fbf711b50c22aee20bd3af599e1610a05e1d397f1a726f030476ee62331a79938aa538db17d6300a7ed5b7b4eefb2a87a96776362cf3b13a44e2a3b8ac87b4c8c630bbe166b445e8b4644ea89aa3bdb6f0d15821c5d5a56faf2528d3cc16ce963d2e0d507f494b0d4af3d69d37ac64cea2ef51ba7bb4c6139192d03bf824218c6df1cfa0c801a9d8a0f8d20b2c719a2f6e15f57894fd8db69ad04c69d75c580bb720557ae779fceb6507d38b0f9fe86980e9a5e4c83c86d93951ffd5d00bcca4d73e5117441ebeb605955d955783aa0da9def5777bee3bebeb9c6d1888df19d81ca0253e746c69b8e125d2a28ac9897c376a66a9367f077f201416aa5832aa2615fa5438deef8864a63dc54b1fedf145b8207c127e8b83f3755d7ef3c4a3081f41a1509f1a248559b341c7e78d4d6beaba75981bba803bf969dd288d64acbe142e49cce98c880b08a6d63d10697473ebacee6d5d80f989e16c1785ffaeac26a54a380ba0cca663e1df6fa75e2b0f83b91e0f4e305854185c0a912993095dfc531410af4d40ec3a85eb729919485b15e36c3ccd3ca72c41c9a3ee76100b0e89ae1a482a578fe5e955599374ea5803c4fb361b6ceaf3eea0aaf6641ddf3a4a6906db630f4800001ae09826ed39c0860b510a0f9fc3d517bf8040a663590d9e150dc5d5b0a757e729b825b14490184e438536adf84fb143f8da3139f925fb7618236834d0edfdf7a03c80d72d75d5e918186a6ae8e71edfe729367341ce9a7edcd840f4c29448be18fe47fd0a636fd2f38b03caf4428457f4edcf06dfab50f4fd9cde9a1832eea6fe6dd9876dd17c98605da132acca7858bca879492554c584d4f19f994432464ecb0bb42aba5852a5d8e0b15674e7613ea8e9a3dea5434ebb0d770276c92af611f978664b8260a887d7e4b29adf31e59644120d2be20f72e3f18db5b73975649d14147e5e5872d4baf7ba23746e226bdc08b1e3b56e01c8bc4bb617def7ba184ca5606af7af177dbb92d1928784416a9c8169e60fabd2c6905670b752965187ad27fc9a9bf8b6ea1633eb7e28c4177844287a729f2dfae30ccc5e02b697e4493b1649abbfc7e9c037753854eca00d0b6f789427e856d2a47df7de887f7edac382eac80cd78f1896abb17895479aaa9a7afc27647fd8f291806362b721adbd8cf13ff84c77c0dbb3ff92fcddde2668abf32da4b6ca06f320a0b98b2d21b7051c22607ac9150f9bce8f74659cf4e5dfc66477ac9d5b732cd85b54d849142d39e77306902143cde14cf7e02331403b78604b84af96a890382f1cbfaa995d72d4758f8d08e3688e4495a550b65924a9bb1014bf1e2146008dab7164a2ac822a5d5cb48e257e07b32e5f3460af7336a3104c5c9188cb982695c3d5ee20e106b64cf3ae64765fb5ef1700117a7efddada207b8f9660042384f91ec6a6d5d57f992bd0c9ba8c06d794870ec9189577a59164242a5844598cae2ff2c04911f84155627a92fad712014606f1b7c5936f1b7b43ecc931963a180493066f2f65d7f07d896796afd7ffa7761f4f8a0be952a0fa582bc8cce6347a2adac00fd451f30174192e41441f2e5ea7288eac4617b0da911967c584b4c717735f964ed266b7f8db9a152f420d2c8b4bbb259b2e9f082cc1f0372bf372607480aa1f88a404b54b0674d2bd343288a1e65faad30fffd71c1f75008893afaf05d532c269c3cc697c9741dd77951fb157098e84f074ba8c2d1c205a57dfdcf16fe392055eac1e430200799beaef35450f27b05a5ff74fb5d41a8abb06528ad6073e407ec3d78ae07fd494a483ad13a23eb37d818df23fe2a5cd0c99307639cb6037b68555d092b04a862b7dee492b576a5f3e91171ffb8126963e7b52b54a500f826ccf7121b6410687969e675dfcd3166d8c1f67bb131fbaf888d7e9ba6cf26980fba3a24565f1187b6e6cab65f8b3d770ee730c6e071cf776844561eff23112c5bba865a6426f14b42b8f06cbbf68020bce3281a358174092a93a57b08a7a7fb3554437deac196fd4566c2629a17e3a80b3e453e5868d4adf803d37b6865d14fc311d9559336eae4e679a65fa5f44e59227feefcf02ed5abf71b48e6c765786e2d78b1aa048fd34a4e78062a8497aa792a2e8d1aa5dc614a51636d84cfae82a19c123144e8d43b75a5eb498cde08dd514ad4896121785fd42e63a81c2647d9303865c2ebe50b09ae125bd74d5b4dd129abf84a99090db68fb5a46278743b636328fbcd66a33e253dbd4f1835a4706c497422388a08a050c40fad045e628f0a82955cb87ecb74766acf4f740b617998f8cedabbfbc43b14ba6306f497974db4d4a60eecfb05b6e67d70e35399396e3c7fe1a93bb6e5e5eabbda389cebbc7d4ba2849bd2a5f80b5cbdc7941da5d5594026d416208114a7ba0d9cca63217925b634568bd1434d7bc174fde93af8dd418b35cfaad225f9886cf9d044b003754fddd24564509fac0efbe8396b125af82f07f4fcebb96a3b90e9c79f2fed575902a8c479b0b97fbbcdf361a4a00d93ce2a9bab81633d1782c717bf301181e6cc47ff5119f673ac25bf91296612946a083a2fa1869ac7f67836df29ac75d4787725cac34dbfe6ee90ecbe87a6490da84e67ac1f3417bdcdc3e4294c3ae04ed502a4f1603f927a0ca55d60c28ccce21547baf86db26289650bd9de7103dc57c414cc5c7114f797d00b196023422379799c3afcd329039186f91ee4e02ef0570e55a6f43df776a5006a28a7f2edd63c9cf5f0a099c1823ff734ba25e1e4a5b67b6f399f0e0e980c656c931c77b86d9146f8e2cd06a168fa8265b588bc4d81dcd3078d462a81e434c7b761a6f9c971e23e501a6963f23d29ed3418f4b8900e31dec8abd2da79e386eef39a2fc2486a964da3a05df8db87360148ea531ed6d41e64579a29661e1b68a1c9479e185ede153b9a7a920d85d088864a338c36465a092c5f623516971643aae06fdb443357c7d0dcb2efea189f8744e1fb874809285bff860cdc320d5c80cfe21acd8dee5c14d312505bd7bb7d9b03b64b2c9c46c67da5749f0801a77385d974505e3db776640ee35ac01b96f12c8a712a637a26bdd5e6d223a0cc8ee5bc8f401a759bb82b1f47f8da05ffd283a2a2b9a11429d193cd8a48a18cdbe93a8bbbee7ffaee1606ad47f8d712cb97bb651336b727f26ed3cc587d1fb476e1f85c232688d67ffc8c76d68c5acfc70c22dda59174841d250239191aa800e59ea996908f3cef969047e3bb5c6a243a5a3f731f72e013f220aa7e95c641586f47d4a1cbd1a32e7afabe5ac00f0ff96ea89a8d4b8004bdb8845202942af4a45e0402e59995c57b75637944ab4d5136a91fbc95ef64e768b97c832ddeeec8ccf8ffbacac583abbfcdf3010a45c039c334e72cf1d4c691fd3b2dc4673ab9c6b8865d84b815425ce0cbd1dd12560ece885727720bc24c0b6587c29d187233f4504f49e817537be0c8b72695c6a6df196d5908174981a15c86e56196a84c055c7d9de96f4f45d5405dd919b28dfcdc205b84b1a215d86b8c4a9c33388091d70625b665a0c8b4f9838978d3bbce22aced381e4a9bd69053a498f65f0a060950f831e3e604ea678eb133de7b38f3def888ee70fd8bf37100ab57390d95a37b193c8a6c94211e283dd343513ab163f968f763c2f0f9d6431ba971ae675fbfb0dada16999682cabdaeefa01a38af863ba344815c4b6de6ce4ba7cd9d92f2c3713ad8bfb215ac58ef881034819cb9c46b52772e85376f8bda39ab534eb9d61584e1406cfe38292e86733be6cd8f5885531c965486dc882d2e8cc0eb0802911fb1781a05c6287fb64a197a9e48381331b9aaabdaa7613f3493edeb7d1595ad48c2a76c71520c3956031fd44438c0723066a3bda830ee1d09d10436f1bb9bb2f77d15409aea0ddc78783052c1e64efdea22b0d5a669ada912b078a82f433c2696ac6b9d67d653f28372f2fafb9a0b3dc8b479fabc9ac46bb8f8f24920f59f938c15508cc05d0503dfb90dd6db9c1eb930e6a534d20a5beb63701922aa18ed8041816d138dc94b95f3152aee4933b0f98b7edd8bd0029bb27ce1963ab6f64d761db76a3db6604e32294ef1482ea8e9864245c8089ecaab476913109a2dd5e8fc8881ee0f246b3661e82b09ee7043f0e7bb030fb224aab43294 +MD = 8312bea2c7fd3dc56dfb555da47d10df984f6cd05b8b39fabee22bf976953b41dac1eaab5dc88c674671c4943d8d701c + +Len = 26032 +Msg = 1f5426cc38cbc43091700131a91970e5cd30e4a18c5686bf6c4c249edb14cceb68539a1f33face49a225210e56445aee5e781cc9aa4002a1c254eea1b8d19d5e5a977f5eadefc6d79772bdb8dc265ced4ce919df3a13003b2f5706f5e0ea9b8c5ee77e8f8df3d560d71d7d3821079f6bfe4b84ee2318aa161c1c17a23da7edfcda0d3fbcbb4c236ecaee08950f314af0de6604fb4f9726b9ef6cc7b1b54fbc3638cf69ec1e42d788d8af07d78deb860253014210a5d79cac120fbe29322c2fc3def6a428a01f1a3769262107827c7b2bc5e6e5340d223578ebcda5129b846f2a364a9a7728291301e51cff2cd82d50f29cdb96706fbe18a4e46e2475d8a0a3f3a692f0e19faaeb71b45a494e76462edf41a9fdcbb3f46fb863b9e259d0c8f4a79898516eebe8c90c3ea5a675440f3c7b1a18c14dc20c5f3dd27788c66d448acd73226327f52cd65cecc8beaa2acfa34d90ef8bfe824e12ba9870bdc4965b8ced9ff9ce13a5bd39e824893af410d08ade0cf802e7dc02b0b71d6c2a5c3356229084e53b3ae4e51b384fb2c25cde581ab4f4f9cf0fb86f60bcc93377952d7d763d8aad52a598eaa4d5d609fde97cb07a59b1bb997effde4b52048c4b786a18ad7c191bba5baa15fb461f5794a3d220d455ac06093d9797990036414e0bd36ff2d599f51c6403ae491394632e92c9ef4d2e4ca1c7536ae2714fc718295850ca6bd172041fc989fdb5c59cf774bf47670f6ef8567ac85f07fbc61fda8467ca7040f70c106c91264968e39ed90e3135ce429c1aebcaa55d4d61eda64f063e27aa9acfcfe1aac4c1dc8af504d2a3f07c6d0d41192961f14efec84cc53e58e751c0a1e2243e826b42fc428335aadb05028c99e45dd8e4b419605a6ce270226a2efa7cb771f09c8d90f2b81699296077b1730e0d4ec0fef6a6bc3fd467ae0bcda89f54d71fc09f32950615359817d74e7069934554a855c0dd599f0cbabebb1aa6f950c897733462387f81699a3beb9326b75012d75a9119a681a19d4568db590f4e991440d4022661a72339075e424dbda66eff3f9c5b0ae97a6d0e6e761390cde7564281aab285f8c4242d474884841c7c1591f4375b9a8e8d2ce79fae0ac9c70cb0dbc4bceb88e61fabcdc2c15a402b816c525ef338d17d0206b13fda690be505cf6670d356361100e1a2e1916c8ad2ff9cc9e5979ab79e2122f2b6c0d75f0f19da6bedb79a9762aeee330a7f6169f93ccc7ef2ed2b55d931a9356b29fdcb2d91f973a23060b3c173f908a655e1e6888125faebbb90b2177cc2ffc8dc825a27b55605f906509317952aaa1ed996086716cfc43aca74d63e4896da34a31011e5cd16a95900113e4a5daaa0d8d425d77f43f16445e27dca38de4d4d17444cfa502164e72ae84cbc4413a1723e0d395bb650b46376ca5395eb860ee1da88e01c4ef96648d584a816ebff37a9b74e789df5843f48344c9f3f4188011ce337747fc89c4453c09dce53296992ccaa5d8aa42529bb9be62e09d1212b4f899b19af2ca753279154fa657be598dd63810318782c854fe5f639385272b820ad6af53a2ad1663788f965169707d53ef7a308ca22f4e024accb35d5ca1e779b12b995bc81301d9bc218a489ad7668dd0f783447a96384617bcdea87420cb0e93feebfde3aabbf7cc7178065c81c99e333684f381563b82fd76420f7c024ab31bc733c485c2996011d60c153ede0b078ebdb20446fdbc3b64af89ecd4f4eaf9c12aed4a1ef94e8534e592ffa26aaf4c3c0397014beb2ee1d5bf12db0f4720652c8094e92fcd3fe99e26c91037a62aeed39ea074f0ad2818d93b79548b978f67a66ea74c289ce20fc5f00b115f2f1261ddf56ad9e5b22c42d78b29e3ea548c83d74bb0cdaa16d96a44f7c55d9943da47c38e62aa9ba8afe26944b0f3ac0cbc4c27be3df814998a7b8394a46f66a2f7032ce0045172ef2799f6fe8b2e313e7313203cab5608b379c60a6d14c157cafd166290ec791c0427bc18ff34de2a58559b492d8561e6e32bdc61d792eded0a61141cf7679be77624db37ed2a9de7f8e8271b2758964fa71520f26aab6f870fa76ea4aa220475b3b379ec4ef8e80a7e8f590ea0917da38dca36649ccaa0c6495498922f887d374b380aae7b0c470277dfa3ac2fcc9272f5cf8f10f47d3c1b25dd148dde2750bcbb372fe717f12550733d897c3b665f4e8d798d8ff84f9c0643c584d05c6b196672453c3eac341d84df4d9ce74a0b3e86936cc44a2e9e4b1821924c0210e041e50ec6c20d8e319a003a743085e207dacbc62dc5d7edf5b3a12db7ecaba2136488ff5053ec549625630345f6c079f89e7e942104a1dcf28061e6cae9357670fbe2b256645385ce4a1dd827523f986a042f6bdaf34071f11bbadb3fc42804857282c66d65cba84672a117bcd54bc3b8a65edbd0342c239df02c898b0ffbe2cd52d9b9f9fabd229b298d406ae28d6280ff7d529529dd8835a82760311f4977b52767fb8075b08b38e942e0b62c7d1b3f7a1b7e8e56cd16749e4bfdc6846959d96abe0985794e48bc3c628732f583546090a9ae404d8334b75cfab0bfd2040fb6973c629d67def1719d5c9245e0388480eda8604f7098899a7ec437918a81ffb93763a52ce3fb0c0586a1a0736f25421cfbb8430052657b8a5e38e0c0106ba06db5d43fb8501afee472c2104014a203811539a5077572910375b94adff6399850ad0ea0c44ec750aafc4e804053675f79f4ad34d95c6850927fc5e455ce745dee876366e5328897a58d977ed8cdcdac54049340da798f30b3c6ff3ba5eb9457b3df82f07fadc73a80a14d4a9dc64d70abbf8c779f5f8fb7e3d5c5cf64e0221c2d1fdddc08131bcfa8d1d091e3df7f42fd9fe9379c70c26caf36a9fdf74e9621d6c2e49822f4eebdaa89b1e36f9bdba9a6204a0f664fcfb572642c65f17978ff3d5337a334e5b88af253619d757ddb0b41eb1f7d615f1038e9d8cd85d803330abd5b378bc24821ce1ca9704eb9e7f5fe5d4ae9f032213c4d522efdec0f8e6cdaf34574c06fae92ed86066e65917cd4d964ea2a063d389c8957b13df72c5d8ef66bac6fdf817b846fbae4ac8090aec042d523603e06f7c973771a1e35a2f301d382ea89379c518ecb47eecb1e3be070c14a912cf614013b721cc41f3608017e08d5aa717734a31a96b96f4a9cf7d44ebb11bdd0ccd8c77b2bd549a156cfeb4bfcd046990cdef2a0486bf09b9b58dcb2b6e6f3fc20e9ccf1072d1555366f3304260f596066ffc2b866ec1d3e77d37c553b26fe2fa0bb84457a70a19b536a5b2f1aff5d78141b95eb58b64fc3d0fc35aece4e16bbcac28fe11c6c88f42c55d635520ccd40a2a6de91c457029c35379b17d6e8e850ed93324c536d35f02f9626af51c4134a81562f44005ac048032a1f38eb73ed6fa7a22defc5ff330fdbbfef0590c1d9f64e7dea8ab31e1357c928247a827b80687773d563da9f0aa3cf4771d0a5628bf45892a2ce433d764bf5d65d65226c6bebdb8ccb1107c9176c68a16188f642a3953e38ea973715638527992c8141c2ea6a526171afd409f3ca367230a709cebb896dd5147e15526593cd051447671b96546a766b78d5de3a3dc71e61a366832e21760bd2db4450e708548ea72018d2fa4a92400b0473b22547892a671682fc95fdd52188477abd82536cba47b3cd9580ad4862e2eb44227f77fb1ad368e5876d8f09dab73afee4a1f5540c987afbbfc40d1b338595adbb933fab54192314d02f55927be23e6762d07ed8e9fbde39ce2eda8956658c36c9fb0f088abadd875355d1fda99bca3ab4884039f6f465fe5d3ba5f13ff54775fa217691133ae0b38d6b94a9c83656ff5653fa15a804aabfc974e00144d74fc1a8a106d3820be52feafb0e357c646d1bc4adfcea71cf0504bf653928296e1dc071f4205e5bc04362f86ebf0f2a8885168c00d936e8960d538b86e1e4423c29f8c285638004da93e3324117c55725377618f71f79710c3c22da449ab423c40cb136ff30f711cd4f37351cb8c686bcecc0f7fb2020bf941a091838c41642983ea03bac2902071aedb55d4c12a13dd22d7db5879bcb08c01f6cc1ddfe89231b283c4d26bc5f6945f8042779a5d3e0e76202be16d2e6f112c4c463ae8a9b49df51fbe7f95b6d9cc0e6aa300ff2ed147f33068e3375f31cfe92b66a2528bb2b576455988e86ab262e31fde3897a3b4d0c18efb277e57dc0f6119961cc39774c15a7dfdb70ee96a9e07295de70bc7cff107c24a72eb1f5919bba03e72e3d4e209cc5012d2ac3be7c8a21086d5029f0af2ee55bf8f26be91352048c46a5c4ae5d5f24400a26d691328db5ac3c925354e1a9dcec144d63c6babb89891cdd301636cf4e32feff679d506db917b8d1c9081b33cb5b75ba3a2cec2aa180d62f3024517fbb50781f27614a9ca3c15e78eb88d03f5930b9a37f7a4c31f50a0f36154741e2f41f11f0765ba5acfe4fba023b65853eeef24ca3743d4f63ec9b346c8ffd7c9b70f5393dd50ae61121094808491ccea4f516ab34e8e46a3300aac25ce0c555fbba796a31d3ed806bc48484e5951d0124141451c22e1e212 +MD = c8ee483480f359ce91dcbb3a9c693e7237503d8a70c53c79e81b4cabf058f84fd014d98bebcead418374ccf8d795a576 + +Len = 26872 +Msg = e9bb4c749ab95296ce8bd56599c2aea3c7c633a0721d65a4d4ea6a9159b43dc5f869a43ec4a36201be29aebceeb9e5aab2057cb755fb38e5e349a1ee3c21b42b6839d8b42a1713c9d88b7e70697df660d0e8151e892760667170c2ccda9e3aa3df33d01ef59dcdb5c3b82bca34954b8dca7ae61d352946f02465b6745bb337f6055e74c44cbdf88e28b89f1274894af947c0d7fb818a514aa432632ee6e813ec84c2aded5800fc1cae94c09054e25d6bf0c4d10296d1e83e9adfb342a3c6364d016761e241ed4227fe53788cfa27ebac6d8dba789c867592ae728df7bbd408e1275679ec2e0d3077bffdae4d8ee05c8565237ca6ba325f0f87f5d896569af2709b96de5147e62fd39a9b4a1c399517bb808ffdd4195c0e7dce6f7e679ba15ac1082f7659b602a8053734334122cf861967d8274ae18ceaa42ae966b2b370a99d142a2b4ea0e901d33dd0530473151066c206e04f394a5b4b446a78bfc69048cc678ee4763021a406557791ac51f01d693822122c491fc93cc3fa9cd5fb879d16aa63891b8b34f7662632d583e6e715eb7232a42a3a929c3d50a1ba3e7adf124385b10183dcaa64ba590807cf5a8261b418417e8f342c3c179368ba406c1f0e1a9f8136f6490951cc950210d9d549678cd15488a35e73119233568424f9d0f964a1da0fbefadb28628327d6e97ec5903b4575aab0e1f18475d974013248793ae932c5742218a75045ca7f42477d7d44881dabccfce52efb8a2cc917b182a23b71fb494d69cbf6313d13123c3afbf9ec3d01ffd6d091b1df97d55dafebced463c4a46e82dc3a4f331106e9ad0b20c2ee209877b0740d0299657b38b22655951aa9d43cfcc38e3abe8b4a0b7b03135fb4fa8b1e423082a98fbcc76306ab3e70c8ea33bca166ee3f3a7188809068fd58a49281f9754c182e2b6361e595c2b2ead54d6af55a0c83e70f8c6751d282053628b223122f0ff61ad424f0c645b2d98daa9b21ef10fe75b9a5a490852b9b5480a720197059c345f5f1c51c0e00c5dae0ad9bffb3a985eb3e6581aa2482f911be89a50a1bdcae2c45ec0f8fc6ad41de6b4717ad480fe70dfcb5ea5e37bee5657935099f1c9e18d4942ccaeef6346f0cb7e0d5d3b6286c047dfea854c4c9a7783715147f7a894b646919bee4a47d978d4be19f1806de5ef849a98433d68a877183908e523d848e054d1bb217da6f0188afb03b243f170310e61c43a472e9cd78e20e3ec26e7628dfc79a702f9ff4f4266cb771a069bda575dec1b04ea2cec0b7def7ed75134962195ffebed5fcf3ba8f095d0b348db78a4fb9ff92da6d21a953feb4631337e484dc9daf65b1f75599ea0e09cf87b2edfac5fd3db0efdccad077caab6845df2fd64f0a162d6a9b00da5f04258742e0473fff34e5d336f5b27d49cb45c4b315129f9b2d99dda8edddc4187218f90c1fada026e55ec356c2bff8f188ea3e04e07529e78ea13f15f7d4a13ae04aee8e78076462991048f84bda88988a03a0e04940ba5cb6971957c0ceb7f0d6232d70f23dd4dad7632ac497ec776657f6b0f1565b9b222ce1341650b15060dd0b8059963738b727bf3061aedb0b82792d37dc11ae146078e958fbb067b2b27c6aadf16bded820118c247898918d15780efc4c82226c3e23154cade7d6250f3ca87de17918fb3e1e32ccb05df44446da03c9e7b09dede5b4cfdad5fde8f39fa42db8d1c8ceea39d519f0b206ee7a3e29736455a308dd7db37ec81bfb8362893c61266861e9ee38bfa95a269b667524ecc6963f634c852da989df26e891bcf68cad8e4f4b4f4d63624bd1b222437f21ac63274df94f2d1e1d5ae79fccf9470d1d77ba2e8eea4fe348651c01a56fde5df0b4df266cfb1d789758a82dafa34cf7762870ac33a03ee0f96104b92bd1daff40208673c4379c629febea799a7712db1f297971405b6081fca55183bd51bd30240fe3db09eaf304be7b742b945de3e2a1e19d26c002ffefd89bcb0662d7cd1725e9bf0744fe6b877b700feaa63d053383b7a373b87d615218a939eb224b54ddca17e29e7d5a4a135f33835ed7ffc1f84d1555ff32b4ced1413965d9059598a99cff1449bae6d8cff12a98302f8b5f5688627973358f9094ddb21579149ee2a4220a1db0058a5fe4b9be1508b6c92777bb05d876caf6eec4737c1273564c79f5e4a0c47a652e257a3f57c48d75a261836e683ab1f8d12f898cff246ed488a7c66a2ad250e3ba73b70c5e6b6873fc54a129f267cbc7089c0aafa21212943bb23c3d0e10d9851691c6a739d341b8c149fa750b266d3f837d7064d0a608a04be381e4b643be552bc7cd9852c4be4dd788b6d91b403f692a1ae234eea6f800a282bde78836a65bdf5df56810068a392859fcde8a7ee84ce6ba89a565db89ba26d717cfeeb03a9e1b9a659eda604b849a04f40ac1a611f09da68d419d0d64d8c129b8224f782226c8c846c21a9baa3717d0c8e82680615e38271590fe0431615ac2c86b135705fbcc2dbf5c377f4e5986079dfd22d6819da0834919f187975ed8e86e2fa1158b261111f9f599d4e0f2ceef9ed31e6e18b5bb025264dc603ed625e4d2f8637a5dae7dbe1b14a862070bd9d0f0f18011cfaf73ee58f92855cfd128fe1d4dc04d239bfa7b4e42ccf16caa8ef4bedfb1874e92af8d82613e2ff258c97d77b7205884f56f8fba066d48b6dad5a22e261a983c665729f92384b54e71f0ab07bdeb6129c5c34386e8f3308ea09621684d220c42345208e5c764b18c2785cef6e78a31ba13e0dfdb70c6719c06b9ba95dc30aa07038a726dd545e9537f702f6bbd6390dee5adabe0274ed3871327b5dd5bae3b34dbe6b1b9d68f274c8399168fc8df463d4512eebe94f31ef8cfc65a6753038770c44e0cf252a9311f3ae9ca8a8f661a803af7f29c401e1996437ff05c4c975664c7aaca40cffdcf73ac4695839a61d54fcc44fda3b1358d0a763bc1e3ccd270b7ebe234cad7f2cbf0e299bda272363f5104e158fa71a242fb70e013255d1c9d1239df92b9f1f0ec3fe3cb8b119e4f202fe9b74bcb08cb00123a572f4a86dda41db7872c34a65ff908b7c247f5a612409184ac1d3bfc1a8ff7db895d79d07d4e7f6fc349647ca8bbf26768397913e9671ddba91874d7f5b6515b5de5dac16463e1697c3271fd31faa6faa4a9c26c3b5c7ef997829e20c63ec8c3ba0e96e3faabeaac983082b1637dcc785ddefb3970e85ae35ca4e060f4f0051a8a21d5bea8ed43400189bf1fa60e0bea7d214a03f0d35aa3e2c6631ee792b068b466bed8d4f3932d9d8551cf63730b57ebbad75022e5253f0f304fe207ec71b620257abbe883837b566e6049007575c78ff1cbab70e564c2cd29cb35bcc8ee0bb6a630ef4a66bb33128a1316e7dcf142510d4e99419dbe3103faff9d6eecd26f5e3009fa6464e25dbb2393bd7e7026d1195887a4fed3dc9699ec14a48521c3ea000d2d669c44a0ff387f08c62ff9bd7bcf189f530d5065f8764532d2692f69858483c3bb5cd09f2371e699ba613e5d495b96be2ed7dc0260844d80ae82de6e47d2dbf47f0bce84d04ea26e1f7b08af41a51a0abec43e5bd5aa4e27c039f67739d25de73c1007fa0fb7fab080e71f5b6e96ecae8a3d40175fd08e4f90f43e2f616d50c579d543a7e7943587620c4b08d51453d01ba8a8de06de561ea71c7f3bc989feb5bfc1493360cd9c1a4f52545e80089999f76e3f5ad3bdeebf8c1a8146790fade0953ce347824a7792ce210107765b0430a8f8cd31cd539e58c7540cf677e8a66d83aed78b56f40e1668e11ba8bff3ddbdb6ad1a0bfd89ae12e134e8f3cdfa3185117feea6e3b1a8cfa3fa6aec64ba6b6aa7f4ed91694865146121dce6832f9550c818f041316a8ee50ad5b6786c97f85d0537106a1b760d87cf83b2779f6e1cf52fdfa5034908097f22d8c7f7df71cabe57dd493f1bfcec92b4c1304d2b9e0c9dcf3dd59532715fc5756c650fc5322ab6264e61b86fc34a5e96451f112ea9ae6f2e9b479ef48fd8e08afa576827c1606df9f1207c21b271120076466ab1764a94d65fc4c79848bef8e9e866ab0c06b40a58304d3439b0a8d777bc6f01bbed28334ff314b8258657341b9f5a807de96eb5cb72b287bda736d5857f607d54f68f751fbdff18a330edbda788fb8e8152d598db20151eb77e6433b127e2888479c982d0274d8f1b2ec6bb150a107e202932d80fa03fa02e1d7a1a831cbdc7545e1c81ea97c5c794682a55ee8c63f76256cda0f05bf8b62b6cc0b184c7b9e4cb8dd19af377306516c563b3b878baa250c1ee1605b90708b5527d213b8e9e87f2ef2ff7752e5614a930b8fefe35de27f153dd62d623363dd4bafb9131da3357cf6a80bdf724ff7a568e705e452b972d4ef2e1adebff4bfe9089802aec1441fd6de70a1702c1f33f24c8d4fa17c2ac5c6d87441fcdb60ff2f2a85513f6a29020d14f172b1d6df90c1cc62cfbfb62e75e58fb4cdf03b14ac201ffc275d7eee8690588ed21d090db894470c0887a730ed8173442161557c415c6760e78155e1180107cd422a3925f5da6aed7ca1b5dea75b01c6eeb8c0f449447f683433a5cd20cfa1116561fdb4e304a69bae9668843da2d9a1787ee4394e78e6567ffce4ff5b6cb31fae4cbd36fac3687b20ce35de1b295958611c65a7ab5a3ad03d3579f40258cc3c7f42fe38c7774f2055b1b428ba3f1f704b299bcbfa68cb49fe85fb37c0145afc6b0d471 +MD = 6bba2f56c9adeeb9c8e33ce48c37ea3fa188c783c3c7169ac840afc3517c22587eeeff18c0b455ee05b41d627915d88f + +Len = 27712 +Msg = f79905f7f24086566f38938cf0876cee484617745e524b0e2e458d3b10a599d73d5b03348f661e6d88d01df796e17879959492de964798a8dfb6ac87332a432a53eecb55c4039234d314e3efd7ac727eb6a7f9bfaae724c54548ab73b3d5bd4a403ca580197fa85257ed2c9b395120a4b169973e2399b60e69e1d1291a0dd1e10c2bd9de174229701c41422346364a9490c0b38488c7182b526a67ceef394594c0a5ae9645b4dc352bfa6bb086c4baf65b9694b861d810c308ccb58dbbc3e20d62916dd02c3e8b4a8bfef06a8063377118d283033734677e94ed038c051270f4fdd65fb65246fc5644371978bc7c88add15cc88d9043e506fdb799f3558eb7f0965ec96d4136f8025f8b2d02c27576538d1cab7df76c51004b11beeb339f7eaa3710f620817447f6e3e476321bb8c90b55fa74fbf11a741787e2bc9c28ad8fcae7d42df5986ab1d9d8293a2e4eab497c30de6a3108b217f1b814d92dbb20b0f7af92b514107efe534742c21ee3b8bd4f26b0d645c39d0036e68e5ec67560aad99532d7a6711af50e3716562b6246ef2b3f58005faa43f88f19389391ddd54519a49ddbd341a560afb08f3d7d54bca5b984be30a8460cc6a45afabfb37be8485fe1b909c20a8705e1ba94c13b4184a8a1fccaae471e61341cb0bc2b57d7ff7d52566fa89c5327ac4a5e0e288daf05c08aaf65c165bba8089f246620a37a84aa9b0aa80288a5ef1f92a3e3bb9c28a7b41ca675b32aa34b0bd7bde0e4bfebdd98e2054a5daf8746256292fcc29033d24e00e8e3cabd60b005698312bfd4b2740fce503e0239819485623141859159ee54de7d984f477a41be007ee5fb0a58afd707f26d394d1b4208398a9a4bc520638f5d6e7b89ef7764fd42b73fdf8864f8b736f3be4a13deb6768fa5f05e57139ac726c273c2dee1838cd7350ab2775eb678035c187cb45159970e8829046db7f9c4e1816a403b3f053168002cbdfece50e21534651858fd93325c3d2f863096e94d35b4474d2f1a52b59d218f48463d30bd15838c662668cd1121cce82cc737d32cca62f22fe2f9d2df1d9f199a7733bdd1aa5175ae471c6dfa063b3e3d5a221d274993522e7b64ed799182b4fdb8365fe67da70838e3a1ddb6b294180313e031075a4f519423e30b49a0d347b731d07ec3358c2d4b217d830dcfdf5dc418f87593a49fd6a701ff9419f399b9110b8882317b09cc31293ac9c60222f7c991f25395d08acab13e3ff0af31dcf4536ee6d4f8f725cd30245f16abf567cd5aa75732d3851913f8012c87d303a4dfc58173dae050e818913a75d18250b5c7be81ad79176c539ac5734cc14f11fa62af6db6fdb12f5a959c92036414ba15cd3f497f92272d40475fbb2a07ea02e565585938a5323b842d9855913629dc8dc7232452e4cb6fe80310034bbf6b7f6ed0096e7f3b2c1d6dc6cfaaa8af895e289db33cb0d7cdda54b41e7039539b2f9c8b0ad41525677c1d4987bacf37fbe7eb3837b920d3f4178b43d22c7b2942bb777fa3b282cdab019d9f09ac8e36481fe07ef7c32b4007ce9599745f99ab28ca07921c304c99c054f4ae9da96d1438b00e583a805786cfa67b9c4c301b3f140555adbc78fdf36d1c2a608ad9f539933f7dae4a1b2f0d14484436a1c88a4fcf1368b9ccaf1c427b01489c1a63ad0e217736696dba383e9d5cf84ebd4f6e42229e489c940032eeb3ad554993701df9aafd406fec86fc7f3489a0cce6ec4d80d24bfe405c91c65fdac559513e27ce63f57ca3aa0fa602399f77429765c7b171aac4918b6c8a60fcbbf45d9b63b147b5cb9a68011d42d2d5a7cfe9998209217d71b109670b14892f1de0670f4a351055f4ff965b6084f5b914399ab984da260ceeb96fbb8357c760c73182953adcb2ad385435a21e92f24fae5c5fdfb5614786ea85ca6f1a7aa5f58290b3157dceb4235f414ebda09451fe3de13ff35bc70c532dbd226a19a5a85716a5047759329e21306de7942eb39b2d886f43debf33fddb7f087f96c8025aee4b177ca31730f90e74810b0f0f16574658af718629cea386a80eeada6eb64222e98e2382fef24c52f324bf168de70db07549d3d4e0c085bd6f786a1e54ece85cb7b402fa589d1f5575ff0d91ee4b45d3a7e471b02e302be69eee084ac3cad5027e2e20f46b5cfb7ec2bafc687b6c8817b628510359461e6bfb17cb470178907e06a7865981556637a1fc94837c725de469bf7db3aa2ce5b24f9cbbfb561fa13617c53a0fe0b0eae8dc6ddeca39854da2894efdaa690708256124e04f0ce7919479304600d0960ff739b6e126f9cbdfb9de80d7cede02102afb58432b6af7e7fef391b1129b2f5ccd817fa67d066f9b9130fa15095142842be3e0eb78b7782bde4f90842f88a259d27b6f33b9a69709924767bf4209f2ec8fe263e01c3c91e69b53d4c63ede188e6ef12f92c0226cb225eb6ddb614f38d1bec08a2b01416b9f9dc8067f27e6b8840aa967cb7cc2151db0e3b4734d6b3cb92045fcd30d0d2dde4c75cdb8d2e8abc20c6dbee4d3cdbad29df8e58ef0a5272f1d3961e02aea002b1024d278272b18d0de03dce7af8d855a52f2a835314421b81d63635b3f1e0c0f519bbdc70ef92837e6336adbf7489c3c3999a46ff89251de888ca84b34f2781177a335ad6f98027e8ec710c993472700b8b482442dd5e028c67cd8b8f1ae6dbaea04e2333251d02d3d8575b86ad24f2f390de9bcb956f61e3ffb9caa5d9a129012866d603f6cb7cd5a3742b066303b50236a82e0825db9495bd19c2a62fe901d58f17e3d7e31e1e54fa31eba6eab15ebde94f5b77132543083c57f3fe7210ee9220cbcd0d7e876fd8392b2dc6b890288d253e9496e1ced5c1da1edf2d54cb57ad9a0d02333d89d9d5ecba62043132cb0676e079f6264ad53932b904a12c7ad5ae675613e784a7f4e4818a18edf91bbea05aff6c03353bb9f4b2c0d4f87da1d11af53182790864497a93f4b2d274bd7bf14dc5eb4cb2f40c7af6b0f091ccd2d259e029de861d41301e9094d050388a6b6fcbee9841040635425b23c81bae707201a499789d57c1413703e4f1e5c925357251d3d37ecd04dcd17c73cbe4771d08a8af2af10d3c57155a7a6f88118af042af7c102d5462525baec73b8c8acb3b3e958c38c8742f94f4ff408f1352128e2b8db71e167058814a40c7e58a8d2f5d6c7eb85d7f50c5ed98ac02ee1425d45148837f781f413414212dfb0c365a07f61ababff3763183c348d74de71b1b64dc22274198c845798d68ccdd1a207fd987d1e00fb55d84edd8be076e14989138a160ffba0a720b9d5f89a3ea89c97d38a52a7523fd85c9688040c30ff10d25b4236d633537cce213fd2c59afe5a1b099b07ce099569f7d884c79808ff6f9478be4aff83fcb398771f8994499b839e8714c41b8dc3b0b2fc1afd0c68ab0dd851467b135561f486a3bd4890b347c025353db31747915494ea92cef1b7c993a5ce21f099104ce69f8e61353f40cab9bafb5df9499dc9fea68b3461cd5d22a804d799d3191b8331eb1e53782b59eb1564c1bdc139f83155efc547df2bc27ef5fc54f4491be0ce7e723cda3adc64737d2c6fa63170c193027781156f904ea521952d7b7c28c6f7753dd140a3d9cb2b9818ed5e71755eb5ac46a8e43a86695ed5d74b7694c735c4bd53c3cbdaaaf4d80f33232daad0395ffc6520fd68947b72b9cb942db88195ffffbcfcc408d749458982f95d040ab85b99dbd3a82043ecaa7478f1e711dd4f6ee281627354e83039af0f5835a6aa45702db0a72d8a1924ccafe74aeec763c9da0fa9df1fe766137b29e126fcb93847655dec86d3cfa08ba0111e8888019b6c0a2d3c5a11e8d959d49e004dfb643d2603d39857e3176089f0432791fee70ea0c8e543ba9280c76a0cb675b37ad040491237bc02a589e08782ec0a4f98a343cedadfc4e9e8d7baaeeb1a4742c024c91a5a305e6e614ea8eb1fb5cda99d5ac25c09c2cace5b14398d39727ee017896000a26788855f8d401f8f467a86573714b41d365a513560cd6fbd652377c5278e63b484412ee66f31899a4618d00c5fc03cdee57e5abce2fcbc409c3cee1325daab562e9251401c0193085eb06e05fd4e5e14743dd13ac351dc8abfd42d49accd41510d81d7b3bb3ba4a03549488a374781868ea09ef52a51376375f01cafe3ed8b6cca19a6887564232b74eb46e235320cfdd9adaa3640863593669aa38df3c5f2710d5fa70771067a72c29e505720976941fd6edb442c773fe13bd9aa2a03dadf267d5dc277d8a8103ac86b4e2f20feff1aa3eb1a6917acbb169cb619cf3cb6b855c31ae022d1d34d4e2d5928b35cf03650732b50eb29ae13fa3037d8c4c6e0e6c4879ee74e850e99759a71c62bfdf476aa143663138904ad55a067cf51c8e0d23c70f2c1441be15c76b7ba10df2a9327f12f143d296036f3ef934be7be6a3fe384261d544cbcd4fe1a2b3cef160c54b1ed6bcec475d5cd4b90b2ed0652d684806652278aad9070e7299fff491acbbf7d66716ae23e11501fffa5541556313713a89c1949b1be3c806bba0c08318e5cf124e8f37ece3c47d6051388fd12a6e00313abfa7b9e6fc12fa7256a12a47db476ee796e7f6b7d3ad86aa592a4ce5a08b86f28d207bdca855da7872151bbc24e758ecce5cf5efcb28df60279f4d278369a84baa9d556f8127331893aabbd82b254ca885f55efe2375d70d245d46526f311190a88cdb120f0d70ed3bc0af4e8697d6b55e5f965574fb0a2bffe2bd18cc685f8bf76d7156ba5f3060caf55a619fa5639dd7ea30a8284ee526fade35cd4375ee7827cdbcc01bb2ee0dc1b741c40ed49fbc5323b248c5d7f498a5ae34f23ce04affba1c11c09baef66ed +MD = f37a96b849cfaeed5510de8139ef70ab2aa8cbe9a8274892eb6745f691b6efc6dc7e1c3a14fe7b68c5cf9ce90b8be935 + +Len = 28552 +Msg = 094adecbf9ba0918eaa6488d311c46bb6f4a417871db0dd554845c50edd93c4b6866e1bd2efba5280d474dcb93a88e18ba42d068cb4f31ee7cb5cde95bde3d1e70c45d861e4b52444bd4ccd9c10f899bd3101b6443a6ea8763e87c087b10f40c6b8dd98e91531954ed764e2183f73f2d01deaad2a28841885243f21313186bfb9fe8de3d4fbb01403b545a0aa309b9b48ed1061bb09f3cd991eeb674ec9daad455fef3fb1f2a13f07d9778fce7ecfe19c013b6a83590e66268125091ce48b780d5f6a030cb48564cfb66305f19481645e0cc42e0f906440c1fd749d481c19ce667f96d4419bed23dfdea0b9cffc70a1f3523332ac3a760bdfd6428a4ccaf61ed532fe39fd2348fa9ca4a9019620fe18e09410ff05d1b415e4be2756878bb0c7fe0bf89a9be51967aabaf483f09c8a37ca24e61998d0befd85278b98a4d8ca78358d2e7cba4beee96e841b976be9b59d04971ae8d1c1f7311574f7a7113cb39e0018f866b4d239fe7c9276d27472f0a7246d28033d2fed4f3a58e4385921fcb80241fedf38226b253958aecb86d2ebe49e19a5ef576511a65835e992e9231644a08a9a4c909722ec49691bc93f83d7d3f62f1d13ad2bf4d4e38e706d4daa80c26f7563457aaad1b211265671eb006503b10fe606bacf176980d5011df332dcbfc374e24032f808152522d75c35d313e2635ea93eecd8e9d2a4ac243b76568aab411b8fc375e92693e9e126ce9c66650e617dcf22cfd3fc8ec376422c43800b037cdbc455a018cdacf3e3cd6f7b44c8d64fefd068d03ac01c61b5f386f749ee66bb38486d4de15ddec79d23a57ef8bfd883475567aa97c4fa040da0d1ee0e952390b35470cbed6797d98fd21703fcca83b006b6a59b558bb62ecfe273a458afe891cfa116c6876b66be3e412aa6cb79763a907cb93f0e74bf468f3102c6b28f2442ff96a5ba69e9c9ca2b0956d3df3d1e97873009122d2093efce0505b1a6c35508c5add413ef634f91d8832217b295eb6b5d491ba13c0fd29efed6d2e1afdce977b46ef87f925856a9c95722eee0047b1a85507758a5a2e9b8b44f10f3285c80044e52a939fd497d866fedcfd5e2193c1981be92c5148a47d160a64652ca928722e5e15cef8aa7329c4ecf9f493334ad0cf51bf462e3167b8d96a4c97ce13f8d782da38a0cb502047fe874f7c54df75c5931d122beabd80321c8a330fe16b401689801c72e26da6185cf668fe6bcd1a872da768424d95f6d52792a0342c580617887948aa03aa0e862562cce09ea44400e5184cf51e61d18841ab1c6e798354c2caec44b2f7af5f78a3f2018cb60cf817029843ab27c81932b3fd2e258e9431ff960299f08623a1d51ccf91687baf40b4ce4ed7cd2e73d7bdc6af5ec13432a6b633e2cece77afdd87d92004deb43223bf8f638fc1fc0a1310bfe934aa3305b9cfeab66bb294fa1a75220ee0542b40aa218efff3f05934d313e9d5394953b6743203a3f906a3ad60873fc1af34a67fdbc013488cc20c9921ae8b98f4045ceddfc7c6d3ff316d6fb7a57760f8e5ee97c0856569e1a0dfe204c9ec5ded44155101777a6e059bbae928b7131444cfcb316158ce887bf098b7854c554aad72478be228699b93ac52c2baa55b041a5a04f5c42294cee01b00bfaa1f0e87bbf4ba438ac3d98332ccfca37657975902ee638af3c900629a8adfa37d2b5f3d9f3436200231134e6963823462b60f3a84f3ae99f6375a6c31a4fd0b06569094e29883ca51585f23c1d9aa1c89a80bd029d1aec9d352ea162bd0219d4c89e8b30b8a68ea7f22042ac1963d04f016d24278f02bc39404f7861278150457adb0c3a271af2895764c8df1020293a1e9adb9fab9ed2e4134cbe46d039fe62fa831eb30b51e2b9a3b7d71d986c372a307e45d3592bbb3e0caac59c5d988ecdd64b0543cbd7e9c965be00002884648fe5abf55b3e45efa7bade30da16297bd68c778254ef3962291bdbd62f37254bebac985cafc189faa19c7b82789059602d8bbd087eebe306694495cbf34aab57ce03b80e39694446bc3ff72cf052d4b623527ffa2a586120fa6e7043e4e9a3129789af6c90bc215e7803d5b2f9e3f808688f24e9dfab405c6d07fff07c8a8906d88cd30a3e309dcc35869b96cdba4fb15d90605a176aed13319f993432a3e99f21abc769aa4d05faa536cd5b145c485b82e4a6cd59fdd3efd893d091afdc3155d354f10d6d88167427a2cf7246207e51791a6ca6200a914cd2834a9b3c79fcd59e26e457e0683bc33d49267edbdd6e5d90902696f1e7b1a4affc4ba371339868c28015ebbb73e262669866c35db974ba69e468f2583b9191d15d686cd66fb0b9e0ff0a3b4721a6dc342f14f2446b4e028595b85acb6cddaed7253539e4a4c23389f235c92bf7f58b166b959e185936c044127932b3f1d22631f216ad246949502e182d17c26d5b199ddc8cf95209eb7e55f9300caa713bc27232a1390e33c2aa3dcf64a9b30843e22b004fc679f3b8871b98716b374156fe086549500a7aaaac498650e1664f4c8f5e65727808bd4a8505aec1b0b318d023651893a4b1c47dd0c1eb966164b8d16b987a897076cd0e02b47a858fd63e23ed38bb04899ca7b8a2475d89ac36bb8f2179cde9525c897f6aa89a515ae947ceb5c3cb1081138af7bb3a5acf2444fdb22b72ce369022991b27429c99a494bc3d17c6c74c2dcee497662b71bb5c27c606f403f9e5bc51626de322ffe2ef4111fb7d924e0be2174b344d9b20f2d647cada15bddf7b39718be408ba12b1ad76df8661b6bdf43095353adbf9e6fa053d52c80af0fd6b89fb6c1a2288938a71ce7b6a7eb4a599abc129378bc842357b61243d3e5dc23b3067897cab0ee0c1ae807c140f1c8340c6139da6f7a6b129ab6b85c64a44dc6ecf3e6a880ccd991be665681f9d4ed59df21508f589e5b26b17b51def99569a8ab8f895c8e2451aedabb5b5f9c3cc1b05b23e01cfcd35c46e32c65315b5f38af3801e81cbb5f5e4bb5129ec1efd34d21ca9070e823bf775a79f27abd52abc2c4da728b4ece2608519891a810bc3e9895728f895b940ab34bbbf41ae9a62110d0db0afb5c902058a6cb6000b5c928aaf29d49b2dd195d19fff15bcc1f1e6829b981f0bfacc9f6553396a82e16de378c2291e573d67860af5f634e19c783291569154d5fa8404f08e04191bb9dc513450b968c54ae7aba7f5359f687479d0bddc6de4864b6bfd4779613422eb14565dd97f666decde71391c41a7aa00834b788ba260a55400c2dac3b55e40fb925d55dadf79a989c8715eb98ef03ec7210d41e2c33bbbaadf001afb8509ee71f2e0acc34e3510b81226697b920b9f2eef80ba8034f811c6533f886f649993d4a28ad321600b2bde57fae9d0df5c33ae2b6042c29c08701d09dbb3bdc8bfc99a2db65983a97e638316796037eb54a4cb71066b585cef3f456f6f2d6515df0838f0edb0588ef1404cba2c5d3f3aa75b1d6cfda48ffc3ee7a5f05455d3f069d84798bb781e85265a71df8e515531a6df0a5bb07ef7fe59f1d53935ada8dcf2a23c818a014420601ab8d319bcf884e59918e9b96b1ed7e2f649a68dc542300c0e9e47e3ec77e540f988514910b798e621cf8382e9731d4c5d79c4c71d4e9e1865d36843aa18484b7f46c6a6fd00e22b01a4b5b78a7342f8affc107c161c7b9a50724f43caa3cde2349aafbdc272f516a13eeca1bebdcd9a66372607503a5d2446f1795ebeb8faa781ea78f8116c464b98d4b4ec06b1219408c152135c26b728c1e782ef06b632fe1fccaee06a8b5a3c412c9ae0f2ebf3680001410a8a701e2a59bad88f233a2b6846a7ddf12e2ea56b429d0b4af3cc9798f49d5f677b94f6ab66e206b9a49328789f0282c4dce4cc5b05bc826499d1a2a95efc29a4a013d51e720379e90b7fdea1916319b6173c138e12e19cd845a9891b97841c6c785b4e162385ceb7b85e9275c6501f5f3d932f66e2c2c7109792df5246ebc40994f9a604c3ef61804b9e08579640001ae09884880dd67da7f05c0a0fe589ad16667d917d0ba6deed25dc94d989c9689370aa9763fc833cf8f0338d86ebf4341d7d3574e133528358e788bc8e3932c5339e47fc8d275f919e17d7fe69c2a1f58939dfe4d403791b5df13103b80d328295aa0f185626c1f801c7a7c12b12196de43cdb45b7d460f356e353ff197e4f4d14245e6f716360fcce90317a3d52c109a8e6963c1f2ec0a7fe2e60031514cf6139adb4864175a2fc5ef1f38e32fd4f5551d7bf2c8c9b0ea59e42e3b42d59598b90a6bfe158c60e933d7d6c718e8a0add7970a49b5271a188c1c16d86d4c46418939fbf0529ed1a4dd4830ac8b2719a0e8a51f50d336b3fae031a5c0fadee8584dd09606637533c78ceb36cf8415c53650efc1ef691e02f91ccce4d931b20247cb7641288f3811bc0868ef194ada2ed8d61cf80ebe07907e0a94d90c59f11c75ccd4063e1f10f0ea19666470279ddcec44d4cc951b18e3ef70328e42bcc2bf4a1792ec305b245ab9878d9bbe618656dc60c1466cc87985b5174d0b61a04e712e7657fbe68b9dd69119869ee941bf240ef3896d7b0d53fe39c78e56524ebdbd89afcb3c48f7a2edda98f975da0f6dceecc4d44aab32ced4e2479c79fe0e3628c38b97b63fe75c25fccd8d267a13bbdcdc9d4be3e27e11911761217c4c28e13c44d26372b1a2f2095f7debbbb095cfd748449542093a45bc42dbc26523e3e780754cd67688718d1e6c73bb3b63dcd14797825b6f09af91deca7e293e6d88707cbcc099ccaa9c55ee8976a4af7d31eab2311f4570c8221e7e1712fe0f115fa3b982f8547c016b71001f4d4e1ee5dc41a27ee3fa4f30de1324915fe8def7b0a9be30baae8c73250adc97c162908325009ee6962314282a9959a02c90b507c3aa132ccf4f06ea14470b579a880e3f534c2fd1ff67c5974dd8a3ac439e9b29dfcd41e0ffe0f14d7e5114c9a0679e01b050dba7e76f6c6790f78d1d6ab999454e3acfb211095684ac4f7f549aa84bb182 +MD = 3bf62b1d2327dbe9416d2c134c40ad7b174dea5e1eb6e48d2615e9bbcee6315a39316883b841a007e216482f73983257 + +Len = 29392 +Msg = f82e98eb2fd9e74b6c513c5c44e17dfd6f75bd892a68bc4edb97ac41f4ba3bef19f4cdb785a80937aa8f98041707299e9faeb9a3b8301142215d90f3c87f2a65eaeab1b87cd453edca67659b5e155fe3232c27a5caaa92f46d5228c872ff27f3b339cb57db06cd5513022989dfb225b442168ff9297d464d079dfc29bce33981bb08a3fa6ce57e58cf886f35638785f9469479069d5235333668947c6cd369f84b80c20bf51a6edc4421bc09b13c869a75d06e34eed1688f43d8792a4b76be3eabc9aff03f4ca5cabcf39a6c9378307f18eff5ebe3a1e64a7617329c2175403c230af21312242c0b7d2990c6cfe38c91761c9793456bb74a174d4739b677f7dafb6b14da364a0a85cfe927802e26a1b6d97ddb94dcd6e4796ea14068d125ec017a159caf72654722fc5be50078e978d7873a4957708b74bec33ca6933c272697e93012f98f1decc94ba955af75d317ddc97c6942c9316f005d460121bd24ad8590e3ff1f561cff6203f8fcf5ec8d88aee76bc4beae71de2985e6d77a1dc58ab4b757ea8b8c078bd46d73643ba7bfd334292ee134e9f3c8208344b20623b1c40ba6b45ba4fc899509d13f14e76c10fe55d7ee480a405e35cd9f89192c99906371a421dad26d4827e877879463042813fb38d282aa7c5b2d1821dd9557450c70d0fbc6f07da6ec4859a6716d1537b0190d9503167a6591b9e95067adecf1cbf10ff1cc240d701e0144a7252667cc50197336a88ce4c2a9e0287550e9546375f116cf5bffea93865991c3cc47c08daf1a1563ea6d4e5d4aabbdd8bfd1f764b375cddd9a087dd7cb58293f8e5887407624db64f14022fc1d2090c1ddee3dbb2d871c62b2c72c049506f26692e226ae4c3fad80e48dc768c94a8a78d2c78f328a2eeba8cbc460e18e6cd57f016d049fda747301ebdda569f72e9144c5e4538f727322f50b8882375c91bad1027f89dbc8ca152d30b624c64fd68e6fdecef39b8f5ca9929d9af8cea77d8aa5bea21d29bd4a7b4dd8a3ac4978496a3f470cd51e86f468c7a7822c6e18392b435d5d285261fb8da80e29a5b81b8f0bfd252663e0024047db52c984df56cc87f30638121f5de53488f8d277dcdfb15bf0a3a503a8a94a2f18c5f66ae80a3e85fde1bc435559105633be258a7d6db64162e6101f3f231906c429914553dc980ca8177024bffc85dcf289aa47636ca6a49919ef1e6e19b5b628a5227de673e1063ed0dd1b24ef4baf0d81ea145585896ede62cb68fb3327258c62327a6a78215a053389914bda6ab5cccd6c5a1c60688679e92a65ae18763d378748a3a69260f04669feeffd63ebd87796b88280a44ad4b2d7977d5171aae4733ded62646aa7b04899c49b0235d5ff550357f249fa3840d1549718aae5cc0486aca81e6aa8fd8255ec61ff22f63012af3dd0143f0939b21d87b49e831de284b9fb014081f36b4eb38a5f81254f04f8cd6bab4f2a7a5512df997577a2c0f74c5453802e71f3f8fcab9a468bd2e75a9bf7b6710ad1f4944860b2620bcf7710449fdbae510251ac7485459c84f26739e27546a9affd20ff3ce5f804c2d4ea3754e2bc1211fcb58f9e89b2ebd44d76aab58e42dba576a59dd7b996e20578c07364641d35d726c6aa62ff0abae2abbdb4fc8cd29054042d77ff23b2853a82a2cd5c6e279d09492d04a92e749218d4e35f9fb5204e246f5d939d6a7573cbbb374b244801d4112d92a5595f19fadd8f91b3875251a07d7edffb9ad706361eeb28f8a43ad562559a9b965cda207a99a66fb99aaa900bc7fb5bb7dcb28d569dda1cd9c58cc8cd3f58f3de98e7b29ab5df2478c10703196aac78cd4d433459ae4fbcf86d85049f352e4085f7cef7e3970359f8e5afd251ce59df47d4d121c9bb13b05c856eb15fa1e62b9460d616dca8dab542eceb263b5bcc382c58a67c2d2bef9f0df68ff696ea465b12ba48380e502be15dc00327607acc2a85c3086e0e66a83114a630fccb78177907ef6c84fff8c08451473ffc4791205d59fc401ff3d4090f787f99eb86b3202c7ce68a2339065f47276be7ce790a917ab0eb95b664ddd9e1416812ea50032b1d7787ea3c44e4d1d2e61242c47c4be7299378515be9e9df4e7748e221afd0fef303bad4f8a6f8ddcc96269907dabeea11088bba380b60e4ff230952b92d82635725678f7fe9ac4dde408e34be1ac961db1a0c1a7251aab09c4d92aada52811ff1e77664f89467e8afeb325b12c5d6162ecee3b734442f0bccfbcb32aba535fd6850cf9b8b309075e89ffa562b624ccfb32ef8daa46a57bd37379c3155ae07c465685b7c624491bd3064ce6c30799355124133caea4e8b8d8608edf1fff55d3b8f38004ea258d188304396e749931370f20f7dd12f7531456177a6b8d203a02c8fc7a75b76f5b89d8f433a0da03733e7fba1bc359b69b3ab6f8aafcff65f395d0c1e39e904a2aec6f66da2275aed5e84d6feda3f55b17788594bf07e92918e96af439c4174e71bc90dc7b77ca23df90d2b2ebd3786d5e7a3c6c2520ccf2209a12040baabef4c676f7b5c5f569eb06d4ba13a4f65555d69c65ff6bbc3d4991145061d796e9d5afa80e93183fb76cd2206e1297610ebd267b7ccef14e9ca7e0d4909e0c3d4a5983dc4fe500cb4531c800693031c826fbc483fb4b546c7d85a6776d2937f232f8e960363c0e0c95d26f0125ed128010aa17426c05138a527b38694093d95a465c56e04bf89e982bb72d8f4ea9a82d6e40b533497cad1cbde14d26b56e7ec9f6dc42e90bbb40d279689a172e066124924814d31e128fb802602b3c25f986e5c6f133c6fff4736ff15f1b455e83dc0a1f38ccae448739d0d27079162cf580222943b0269324d4b5361347764a928742878b3321672b49eba08aad4144c2f903b03c3e645fccb346ba1d95469cc2e1624dc7eed8f07f3e8cff274e49e7e2601ede53352cd07cbd98ffe69b22af8588ede46756317b03662940ceb2ac80f443b816214adc7f8542207a06bf971d6adc49edf21fc761587f4517f990c5ca492273fa1ed5ffc7a6ff71aae6790040e35a0acce092173dded864d7206f320e816ad6ecb46d0343323401250e6e1ab47f80b4f3cb538d8b07100d10eb848de80dab65707a76837cb78e535b06f533029ffebd051aeab6b38194a257a39715c17e628437e998fcceb76ceccf38a4e5a5e512a77347be0f51aef4d91df11d8635340ed7858a3adbd3b26e31e44bf3af08bf6ae8c0ea4413d01fbef5d65c6e3badcf2eb3fbc4e2ad0628f0d75c99780bb5bf7615706b2340d934419d033e2fc2b5b040cdfd2216ece09b93217aa998683735b2920452c232b78d2b43372ed8a7c787c36a2c3a4e17ed7ad3b4d104eb50f7e2af02ef39a756059ada6ce496df576da6453ceb75febaa7572115f233c7529226c9dca37849274deded9e9e1eca4e12ac34aacd5dbf5188a109a950aed2f97072a183c3973e22fae6c33cc62f101850fa20384469f6591bf90c037eee94922d66c49cc22efcd59725f9ebff30573293208669e3233a5ddbcf96a8cf6b62d92373818c21a7ebbb9d1bf0109bcaf62973afd5b41c0201bc4285380dd4bde41afd1986d6548aa1418749543f3e6773695d08acab618ed310eaba7e97214e9ef414d9330fed5fa403e02e84ec599e558ec9cb59b4663224e82eefc8f937a5d9e0f523149d5e8f6a7f324c109c7fc822e644588b636c948d9ea995a5988a5c4b5e2897ba032aa27b1ff82275c4038d521c4740b03d171e63c0c54c92f98bca59e829a781d5d4314c729c3222f7a74669ad6d0456b5e8484deb0c552f90de789c0b72c31a99dda464f3a90ba6abbd9beff60023ed42429aa27a097fc9f2d50f78349e7ac2a3c9743b3fb90f8f64c8f64b92bb1fe286c89e17fa370d00a411c774fff75f38a80a39559316ce3b975bde031ff868e4d7ecbb04e80f9d4209076918ca27b0eafb226c3aba7cb849c7d8cbbcea329f52da219a0fc00d912ca6484cea2faa403831947560f2456e187ae237cf7e1413bae209838f1ebb892f1036eb5facf95dcecff2fd5ef6fb504634eabab167f7669ba3f72009609405b7bb65dcffae9f9a1d4aa06c8b2518ff516a64bd1924672853849cf805121177452c579a20b1076582263f3b8c0928cba8afe2c75d3feda9a0f84d6418bfde5e85c78e9b8960bb40bbe721e2c81fa555da59e751f416f59ad2939b0caad6353bc8317d69901a35cc18f1fb0ac5d5092e651cd4f57446095c86daf84a31d1c08faade967cbb5a016837fb2d1c0bc5eea5b75d4e2a6449b36f2c3307b5545f0adaac437c5d81bca89587572a8f106ea06c6f9fb5593a9e6e5341302bd678ca6ead2af4917489ae85e485aa95ec6a3bd8e2ec48ad0a7db0a4a95456e71615908667c566786a199c43d5b149d1ac8fb9f299cc0c97d6842cf0c1d42bcc0cc16dccaafa1d93a6d8224cc9a8c96057d76587f17d400826046fcd3d4f034d12e2aebbd7478e65a33bcd1b60caade476f7daf39a7e8760717505b49c3381ecd12fdfde8d2c3d80e7caf93a1b957bc0726766dff54e5743514c6b214f102c1dbfdf7daf3d16af580cfc33136aa79776d29cb5a7827b14233df12cadc6637662479804985795586d5b460751ce6f958a300e23e4d2735282a009a6b4a2bbd55cf0d001346d36dd238b3ee25fb75c0a7ce3325e1265d596e42ffc85c05477ed60542df00e0e69823cf55d50a7d60b5ac194afa0ba9cf065ba2650367b6c26131ee9e85d8f8babfbfc2217dec48aebfaeaacecb838187223873bab25205a54dadb1ab5a633958cbef3aa04f930467c8f7a947ff12548d964ddc843fe699f72c9377f1c76948c7a2fb5f58b1c65a94b7cd3f3bfe80cbe74be2064d11eb1bc0e52b67f732b1d00f2e2b58d30c4ff13c7479943430958d9f283f199c9029320860bdaa450404773955c74e99c9f47367e642cfb9fd1843bd14ac3cfa246887d885916763a62ae54c011668304e7e851df7721853cdd39447f97097ee356fc2373cefc7da7eebc3501961cf2205b4d1678e509988088c2947bed453002b078a2e6d1ef230f60fb94e85f0aaf75460ff4c932377e3160ca9c44b2098b86ef887c400670ff0755d6e4c2d0b2235a548b7d5ef34dde95f1bbdc7889c8d9f660a6201dd12469f629e8b55f9fa5f665f35a00988cbf1 +MD = 04a388ae515e001dac91b32f939db69cd9cb3aa5f1aaf8e3c5662943ab06ac7f2f8790859413e2472851c02fe08e0fca + +Len = 30232 +Msg = 6459beb3942390eb26017dd0ac0bcae8a98a2d60a3ba82f279cebf0cf7352a2ea81cca93eb341b1549b5064b06a30ff4f650d1989222a76c4b96ad771f85e7f369a6bff6fd55b551749252b8c54d5d2416e15276d1de105df90bd279bfab60c150008722f20ec6684fa14a6210911d41ae459a428576248d2b35175cff30ff5f05310860f1e7b62381e9d69010f8b51369848f44d9724ac3881d6466089b2b972f412cf72269ed48b372df89ed098e62eca71bc3f35becc9b8caa2e102744b2f7639d931ae1bd49f8c454b96ce4d10f6e2b62509fbb971656444b7131544c9f08420f954bd85d1f2b56904ffdb4aa397f1b7945c1a12416034948d4567910ca2fefe73a976304d07d5e6f00c3e8ab00cc1b4520577f0c481cfc10bbe23e67c0d8fdb2f7802a3b1a795c5f9051c959d1efbb4464b3cda6292ded318c86fc881f8ddc015098966639a9d0d0631a0f1d49547c058788e59835908d39ea973c1832d90b40da33202cda894c6fed9ef28bb394cdf70d397f48fa0f6c884aa5958ea7251c0ff8f25fe559923f9cb4534c2bcd1b31976a37f33ee2d4fbab21346161e90c8ebd3168be26534f1ad54bd95453e27237652316e9e08c8bcb20f2c6481874f9c3d717e8c376442a7ea81893a3ba90145ffedc58bbe453be5b6853cdb238e7675bec10f4f84ba8becb83af04c2b6428c1bb2da6fe1a0e4d71d1fb8dd38499cffd77ac13fd51ced76920673bf39ed9643eb3fb1ef03ac9c509085a65732a1220d96f18d0bd270aeec529f0b3561b6f7c64ed407389a7e06c5465880de39f5f32b4aeef8fb88cd598a9dcbd9d9e2a8e3add73e2eef0e8b90afbef6ecd4c6beacd343d1798150b979cbd3fb744f2539e644e4dcbd74e85be67a5aef4ecd61419b801237a33fd29b9c3a85dc4ef7b1f07c36281e176ca07554afbab03b4a82456bdc468fea89870a1d5133bcde56115321fbf190e128df5e87ca4ed816beb2308a225158d3e0d67b89aa5e3bb6fcbbe85400d1c38f5bed7dec6497c585ac6979630cb310e3f859666d9075c74d5e1a069edf593496586369fee92616ec9620a6a2f5fc468f12786145ce0aee25fcd4547f01e8528ab0d9893bc26a3ad00e603eb6788d7859d1cbe28e9d9e2ec55b435850f32fabd0f7a8822faae4afb467b0b81a0ef704c8a8bc60c499afe79fec1f68d13d6fbf0d8f58bb46ed15f42e549a994a13c9aa5029d272644ca0d73a31912c5c3b48ea950a82bb1e138e9692377658c33165a784b7a68e0a11114c18ce71197e974bed0bdb9ef811c8bf058492ec7d21e25baadae4911a12a191d4b0151796a4bbe904d68505f8ce4717df79e9558cc2a12c12d7333abd0a5872ff94a7fd4a5b3380e089996043a0492962e6cd59fe31e8577dee25fbdd7db0653b3ae9aa9b2e78d3fea98b265f4429746e5f915247fc425e5a943f5cf1d943c906176ca81f8af632bd9accd0b20682892048f7e7009e29b1276dd1f690a97d1eeebeb36e3dfd563dbbe1e0f7c283cec847374380ae7418e072ef9031406ae6e7539520757cf1f345682369f4272878c231af06a7a83a9a7cab7dfc957799fbb2e33f6646530577ea40b3ca6e56810af77e14d3c4944e28e65fbd79abbcb335f20c21e76966a43ebce43784beb70a1fe89b1d1d7fe91b3eadfe1299ec764320353cc116571e5ac21db1132b7def400216070c66321d4e56441501cfc03ad644ed03a18587f0a59c8d35cb111455bf6bf040872073b7440a39232f9ddf70c91e99ef57b77463f1489bf0e3e82a90d4b807e5f1eecd3d98c50da6e08682cea807bc5e482eb50eda30ca60e21329172c70ed55f113a716b911222ec91c629b0faad4eee75dc257dcff89044a24885f2320e11ef95189d9217927194dc1e76c4c72740fd9b714b5560f5859809ed0df5532b3bf6f0aee0b6e577cf4e31999c90af90a3f83dd34cdf1ead8ef29d48b2e3f30b5a5e6b25c13fc46a4402d75f227a7a9080c6a32ab082d1c5b23aa782fb24da56760e4ea5c9957c13d998179790ecefd1de51159dfda540e8fa586fc27120d0b598eee1557e20d51995f839696f4dd7f8c580db54bdb234bc6c343d319a3f9dcfc6e66c5e6a489725810a85fe4505fab03d3b3c78771075e913b759f701ea084e0ade36e8157689dea3b7427e9d7c209f4f6a8131b427cb18f4c70a3b2b87dbd76cbe881a061074ed05e5ba11fc19116d02f6f3a6fb5ffef1194d9a25a280dc15f36eaa1cc58020f9af7d33ddec4694c35fc5d700d420d51b89324fdeed3bd4ada7d6e417da2c55aba768f60df46b73496cc07866c7d2193f4c5c728e94228a4a90df7e33ce7edbabf78c4bc79dee74a633cf1d015ddd92046bb54a5c1f9bc892b76fbf9727dc79a0a7d379336d386082bcdb0df91da90813ed2421711710542d236ff06c70b0f932bd24ca7beeb1fe870dca9175909e4313da903df504e8f7c4dcc859d92e61210a436684c4a8c1185b3086f19d3c250aad3ae3e70f6c8b79ffeb604207eb57bad04083f03922d174a62df5759aaba42789160467e7d961a2855721f31d2efa8b2cbd6256ffe447dc110a0165946585604e75db05a6d2d23aff28f2b34480b25ec4c1ebfe41768d1543d19108b2f02e7ea460500974e046081467bacca468e7f94354062f256109eae58a8ca71dd6094935de4bba788925d56d1b6384646e01254f7e9b33d32c25229f3bdc8afd9f7c88a6f7b462db58d769b14cd424ad1a68aa90489250745f488418ee68f979d1f105a2b37347c4d2c48c8902f5f3a6f58450b0b9d3cf3082d9daf9aa183cb9f6cf86cf1b70b15c8154069d46ae3b7886bedf54da47f82e1e42eae978d49ae6957ed4d53694eacbecf09e941fe7424a557c1e26b1d41297baea7d915f845d283766b75d0dc539389bfe1e1796885245eb27d6ce49636792df395a996710cba663eff60fa6ece5cb17e84ccdb279b190cf28cff4a7dd3d4814974ba898602d89a1815b920bf237aee714f05f7ba2a75589e5d13fd528dde1e16c1666fb5dcaf87984ac8f44bd770693ecd474f9ec7eb9a2c8a457da2e8f84ce20847d97edec1c7460b2ad5737edfea4d6bfb5353d7ce6a1380fe5bed59a59641b5d9274f9d91d197d35954e47e0bba13c78c9367feb040e9ddc91890748892ac669509b6ada22f143fdee30d49a681285c85a0498113a725ed10244abdf3ca9876f5c13263753831bd16106c8612b7f19770da87237b154e5b7e1f7a9a89967c73961e41738d9576b7a96d70a7e2c71604d8c29f3a4913c9955d5a8e9ebc9eeef8d05172425dcf59cc134ab82399470c2127f8f05a201b2e275876152f0f4c66534f0b3344583e6176ce48b18d98b02a78d8de38f77293f28dd9e29cefe407593f6cbc031e1f7b143434d7db4a838b177875f2c786c326ad356c309455ed885df9a3e47024160de8710188c3eecc4049ac89d72aac944bc4ba89e079d59e27eb3eaf04e8fade5f54d99ecbd9eee57837818eebd0cd686bcf99bd62ebf3587e676ac8ae0c06dae7ffca7721abcf617b7793ffa1686db21f243f71483933aee4790a9b3027dc8e404fb0251aa804b2f2706046a84001f3de69283ff1001b2402869a914beae08af0ab4723275d337c55c8530e61062eb00214f0840dcf2e3a4126974551b3b73361b8ebfbd849b0002dc608b15c19487952ae04e7eef4c16438cf8d11d220c52a2bef1b099dec2ef0d31fddda09f7f3b2289af1d6252f994441e7e8914d909ec1a7c450f6f8b2e4c0fe2c6ee2eb2094fd0c7223d940cdfa2d0506364e34a1b8bc7dbf3a2e694c95f2f78218668031b0ac66ba375bb25e88b0fab0f2a327d2875d1656132a700796f967a786cf6999eb52dfd998f7fa6fb9528b6eaa3a87819f35fa2f88659d728c66b7032697f7c78982c056c518a96ff0a44f95d97ee45d74d99192068a522bdaad7e3b745abb593fbec0c838481fdde308afdcecdacec49cba852429e33e82064025a6fc8244bd526949948f00fe37f502349a60e897356b5b4d5c4f1aa31393c135dc2b98f4628604d35225cda51cab136664e222de4e852e42b1029b305f079327418e297af73f33f6779918a4ea79decda2cd14146e6eb61db8c0ef56d2d658928d909e28d9e2591b7b658c8e3fe5a6d2faae36da237c8536da2671970d8463d006df718e8903f6cad3f773c17b731e0ec2f1f58ffc531e169b9fec617d96579853c74e2c83388f7d27db68df2ba6a6d9a224eab65776e33583899a569180a633daf48e8366e4a5badd8df637cef4d3ec0ed380ddd35c672c289015d6e7d7d23b22c3ad13929cbbfc7b9b868be3f2278e6f7a5276de783c62d13fe972ef105e26c1c1345da4c554ca6860b42bf90304695a85da12075eb56233e58fbb25aebc8f2e89bee20c02e29d4a99e9987ccc0ce53682722fbc8474b2b72d63001a278fccbf69a71136b9e80d98839161fd91a38ab9fcd5208c6deccce1741df23aff1a782b0d879bb36ef763b8da6608ea186ad22b515da4e58fa02929561af216ba1f09c7d1cac21096735841eac20dc0a4c554212c862d567e1150255fe4902bccf00a3c430b24ccd50e53ba512fe12feb357921fae91a6d9dc2ca3bde054ce8cc2fe1fefda344468f0ade989a1a1376404db9a428e10c898336fff36ce798dc2c3139665e3da12c490b6153221b25323880be3e43186438a2e079d29926048461a67928e134bbdc8772847085ad86f25840df46e609c2099151c05fcf2b007000f219ad231304d5bef2a087313bc915143095546e1fa66ac2fd5c019b712d0d8ea6a37990730cb673ee4dedb1606c48f0c288fd67c471daac55b55e6a92dadb6f269ef4b5bf43ed3ad7f54a8295d0dc726912985fb2c4d7d1fd64ccd8faaa58270474d50f623ae878423ef42156976e1da6eabba2450ff0c856d2e343230c024ac2bd610a066236a0bf73911a1d306c670e49edfc15c3b3f3f4881855b680784ee3e14f42065a6668a24b97e9743c55c301d895b98f707fe9490d027d0f9818a7ea78e6240c73e6248d1f7efbd60bc8c6141f49672ca6d31ce6da0825a8d371fa38fccc3c635f4478e277ccdddd3f23f4d7767f8167c74c033067bfec0c92f29a71e57807b56cffba44ecf81bd436f5b3ae86be94eb624930c84e803cc577391d07bb6ff27d3d767d26d787126593cc971bc87d1e0208693a00e70f944df0b4067cf71aa9253147360ad0007dfbd60723a1a44189561a1a639cd9948f108fd1db34111e8837f8f089535eeaab216e33ddc2a292635227eb51de9ee589b7b530ffefa1d20c4ff4f0cba2ecac1650dce11 +MD = e431118a6df2557969d5fd3700d9aaa0387aade2b5c1866c4837057e9906e7f536d9d0ca200aac006031f259b0980e7e + +Len = 31072 +Msg = 261d66ad62d43f6a934907df0e8c5cc3fa3c35bfb1556adb694a773714547dfb85098990d330191102d4dcfce097ba2e2e49140e00b94d0867cb893d4ccbb4789f01c764b28646fddf560d4571a54d38c277d201a06b876ef5d73ba2a71aa50abe2ea692c57dcf1872f62320895f1ecafdedf602581220f75e9616ceede9589728b8b080d5bebb4802dda5f7ef6d34cd28d40878f256218ae82fa129e6dfd30826c66d97a9f01277d9321b316c7697278b5390cb34e1910eddcb641c5aa520460080643f0bbcdd8c3d1e0e36c82250c26e931762e758786d8391e80d10e34738fe0f1de1c1ca236f77c9056ecb1b668419bb24a7d366de8e23aab465d1404ec5689b20e394c1ec08cf5a88413c06e157d3f44001bfb1cc59043d518d65643fd7854bf6af4c4a403f8cf91f17e58eca22e666f2d874e149b6707345eb94f821559e4826abb10c28fcf8d053588c5928cd9838c295bb9f5e8dad741ae926a4fd26fbba38418ab0ab275904ab6cfa0f033f3293389e5a9312c6046757eee20fda34e4c8b4d8a1ddd2a8f8c0b0bbf7596362fb9edd5c19646d49bd74856191e2c066a19a23d7bc3ca4671d2ae8ae4bdf511d3d823837c2ba77fe20c52bacfbc4b8a479590da8a474294c106addabbd48d4583e66d2981b3f39ce757fd136e85ec8d6b62df8b2212e694018a9171b163cf5fb487331e5ee99ba9f03cd00672058fbe49e3d6e5dfb126d297e0f1d671e65bbefa1d0df880170025b13d53ea76a5956b77ab2f611f9c73cf18bc376f59d682e1a91a764e71c6d1ae8edbf165e9009e33591b31936e4f6de7e84eead2f5bf05665621d466c09370930d9b40df45811a9472d695d3484465cbab4b7477c1fa33cb85a5c0f7d8f77d7191fdcadd18b19b0d694fc4d74a160bd8b6247ce43b329e7fcc38c468475d58d8d065e7d5ef1c801c80f936e5c03eb09dbd5c5caeedd2b5f17e3d474e884f83273d762050151c7a307e6564a5571904891565ac1e46651adf3035d20118489ceb2db12ce2374bd9e79616e68c8b5f783952d2e3d8d1642d8776a4fd2673d2f6a3457945f2d2353fb08c803501b95c7c2cfa268c551b4a7e88a62d1135276930ce0961040852431c19b623c8bb8daa90b27fd31e2980a27e616310b693af95dbf9edfaffa953ffef8197842a0054c44688585b01acade6bd90220265f878c348856799814c43e63a86c523d176cb241e0d1830ef84ff91ac936774a7aa1f8c071f0adf51679e707da7b38547953d5477bf33f72018f23ddbe997e9e44f004aa8155c3eb891e0493962e72af4c247eff42d30105bff3235cc1157d4b44dd7a9ac06b03a4f41a5baee26d47771b4673103c5911eeb9e1c33ed991bb7802ce2037371bb448dfd5b501c82001d46b217d24726eb65677c2c92c0ff6814e072cc02aed4e20fed2b7d9334f2fe6edc61d63e0eaf83a6582fffecd6a2a17f5da60201aeaea8def562891ed7f823febb3a2efeeaee0e34261fe2acaf216c59403d009b037d84443f290a3d7610253f5bb18e7f6c60ffa169c2915caafa2d3540be64294db018d212f57d898fc956c3464e7149f386cc608bce78676aab7885c7909956dde4cafb194e5f8d95924d0d039773e920ede9141489f4776ea3b2dd5d5a0c8e449a0f41da9a2cb417e98c8f0bf312c77504fa1e9c8bb1e7177180ae6a815a4a023e7a28af6f7187975d79cbc807ba8f504a64027c4a2d40f5a3467b878cff14a74080222044aa92846cb945d03be78b434cbb423c5bc31f99a798c72d036778945eb5c0d5a0444f7f75af8fbd063655de7a545065271fcd73fcdc03d35b2fd069d78f873808eb28e926e0fbd70d03798261e3df8f429ff50521a4d4131ab4d6884971d7bff4ebb941eee22cc6a6fb60cf81de220324c000dd94779a54b892d580230154d5eae26b2a4c2795046a7aa62658b7ea79442c8b6df3c8d920cb4667e202b26122515bd8f2bd25c708ddfda41754e57b4a2731ff269e1d02ffa95c081e57099f2ddeb46d4bb061354c6810f52314fb570e548cc69811e8ca59f92020a5ae7b6140d978a285c46e52579f4113da076e203e42799c42edb071b8314f6c08579c4a13d835134177a1c0b2ea0a8a9caac259427794cab79008bba2c84624c700c0dc0f516639ff38afe2d6eed9c3eb8d7c54b37a7aec568755ea924480f552389d79abeb88712f95ed4b4c043b4a571e00b519b1787bb0622c811f3cac584a4d96b571fd1873530dee5c7ad0ab986fdb03fcedb339f3458ef131a1f704b81fde2111ea1c929afa0f37b8fbcaa7488652ea9e98062bdd968c585eb32a46bf3368e1017ca0936295183dc34758baa54b04190cb110bab523d8a68adb4cdeb8255c4b26b25f7754a4c7751dd60152692e6d33e9c16982f46df2802872b5294d7646c3d4237fcb0bb98b822b206b1afe910cbf9831870125e57859ca2219d2e9a6a6dfac38a81ad233d2d97dceec50c0135100aa89efb1b41ac8b7d261d15817370b13117a5ec352b44bdf883a0bb06835d8cb93430a11497e620ef3aa82254087d1f2a6510a6107bb4528ccea5f9651790264d4f56cac30a0e2e3806492c7104999f2cd6541806ba95d39ce684e9f164d7c6102099def2402a9ca1b3889b9e0dcc198092f8a9df90ef2770f3c5f17113395448d0804567e145527269edd8a4cb1f756fc084c062a7cb38501cf17bafcbbfb93e869467eb966438f34f01494be8999b3f8980c759a430ed84898fee713570db3a6b5bad450791366c8e4b575a094374381475258a32272e536327b280f954a383a75f7d3fdbd334244d536a9bd823e6a48aeb42bdf7b7e307d2412fa4be73f9636128409fba331a64b5a2ebd4fd44dac9126886bc9be8f4e6fd66cda42cd6c620c23c5f2e4eb7d074eebf40ce20ab39f1d576594ec7c24a390d1df44aec84f003f12540b43c693e9c1f32d351e862e962fa9c233a234ecb4729ef0c5ca6856154166b4df92f514d2471840b25fd70d464aa634c495693605a7a637da301e2ff5b5b94edc4cd76e3530b3c4f1108dde0410d513c430999f2b82801afe7a6a2b460e62a87debee0e97215e209deb1b1f73f4af05bf0e36967aa5a510af03dcd67aadfb58510ab9748c9b9ffa0549ff500a88ac812178d0aa97838dcf7856d6c00826fbb4e203ca4e6a01d1a7c3b7bb1e3c2f45fc782ae849e6aeb29dc70de856630bec64ad6180ead3f69bb055beceb88d6b13fe3f7efe030c89bc02277392383fcf35de1fce8dd84edc66aa37c9badd72be8f0cf3ff82546d96f2a3263264b3e2d36097b58531952f45cb0be652ffeb80bc2f8f222705bc7e690ee72fb4c077f0db15080b402cb019a5214bedf51e713bc67e1b367ff8b9d3726944c09545e2ee289bd58d69cfb7828d01f0bb2a96ed087fe337cd84ebcaf1458a52753e55934f5e9d56b86caaf9fe500570da6de9ed7b4af74b43b05f6e5c54ea86ba3a8fe778ef722228e34f15e1b08462c82997c108ba42ec259cc41279131257fbf4557e0f5db2be3b581c89d101074d1108112635402e810fa49a65dc229a4cd6f636c5771be7817c25a3d440e416862163f67b956f42b05e5272c6f9e5daebc7daa43c54bc892277e66563b5bc2aa495d7a83f8daa07e09e40cdc456ef6cab4afc4e610cc200079b14e1d6a3fbcc2ecaddb6f0a282e6984bda1bcc8791b811dcf565d2239ef4a7722b99aba045739b5ce0a32d588c774de398dd7de09f55a60a30baee1dd5cf9889b50d411f0ba950b87aed443429328802078327064acdde3f488e337ff909413e2bbd3594d0e6155a16f5e3b9db90cd03a0cd767d367920f8978040be6b2a382c1a19f78617a22fde5f7d7a4e261a9374feecda99e4e024c2c811744dbebae3cfdaa41587527626a18eb47685ab5851e26c91c200d8ab403a34b26cc26633ea9617fc0dfd03da80405f6b66e4ada2aeb8843cdb26843309ab77f388a0f41da31b4c824f7bce37d3373be2d9efdfb20083d04e649f6a0ff7b30c55666deae0b3cbd2c75877f41685f29ebb3e0ba3eeddb0db572cc00caa80cd6c48748dad158324554bc766280f1f0f026511cc8cb1bcec0fe7623cee9b3b77125d3184cd3497b14e801aeadc8a04e90170e3a70cb32471d86fc36a824a9e3c88f42be7cdb667ff28f4a16a840fee1d165f222fa66b8b0edf60bedd6a311f7a4abdd23b21238a7a7f1a1969b1192127bb805bdaec33770f8f5ac309f8f735dcd21ab2d369f4659fab70d16cd62e44755ba50f1d30b36ef062ce6e74d10577c0b98b4c54fab18feb589977e875c7de92811daa7b3653e95df43c1fa264d46bc26b901d4475e37ff9e0e45b61127e461bc65abc894fad6ca4ae14551736fc885e52b994064df2ac27eef21a7b3eaa116d95fcc3abff286f611ae7bd47b9d633f119685f3ef5779b11cd43337b5ce3d6f47a644e77c74d681fa546a6c8800a15272a4cbd32fedad334263824f5efa3fd6cde31bb513a84fd3ce781affe0c00927d0fb75ca6eca4dafb64716d8f7962fb235be5a8ecbb7785454c59476cc042324f3438abff215e18f4126f7b8c8cc966a45de0859edc9d96d56e0dfba94f478b2a325139905f7f23aaba92ed919c2fb68c6ec2dfec105fb849a7403b280b98f3aa7481742ed980718bc77c12132a0e6137f8fd2648f946503ea270945d87bf022c8569ea1f21fa8913c39bb7a5a8fdfd33a70fd759f9e9f500ca1f85de36124d3cef4b19e5eb55d0df29621cbdbb76f10bd37b918384a32d5c88bd8e1ea94b2b681cc56217781aff4a737fdfcfb3f1d32d18b0b35a4c0a5f8e88db2b8353c2232a886971287ac25ae23c356f4034f72a13e14fdb529298023324e8dcc0c7ffdae0dca7c59d45d48a32ee3359d3b11f5c6cc7b967e10ad4cbd70777104b788ca94763e0cdfa7bd9e3c903fa1deeaab2e074368de79a173902e68af66487d7d114bac8d4f8a47f4b1df107ea29f5945a5cd6a82de8e23a4d4dde39f7580a8875b3b775d4d43fe2909f5784840c8d108e3810a729da6e067a134a8efa5947ecd2ecc9e570ff312842ce78e478442981b6f89ebdf23a71ee57d9a8146ff6d48781566eb229c80cc2ea41b1b2075f3f6a7d14fd572797b2645f377344c89f14daf95712466fcd4744ff9fbe67e1cc435d4923990d3a60840b088348aaa4d09d79b385512cd38d5520eb1eeb9077f9d9cc939b1e3a9b238b34ec6374b08539e2c63857a7dfd576dad94565b5a63a86772af4e1e989da6f1c94634e93f0da196953104492d9e6183cf096fac923b9f0800ad59e87556891dc8c15ab22d6241db5a2a3e28e9595ffefe94854829376a6a8eece376437d63a3f9e6c1fbdfaf3b53c378ba807ad658c8835d1f97e7fe137363947332c9b93d6ba4def02a1b9b95e8184300baa9bc54c8a68dc5019439a20dc9cc9283d1b31e5d11d06fa9aace5981a0b2993c3cb35be6ae4c00ee +MD = 04d91612047d31900cc2e6603180b994856ef9a41eccdc48c1a93a32dc70c08c3bdd5f549fd723279d8dab9d28cf62b3 + +Len = 31912 +Msg = 0580591e55cff3fee9b49b42aa0c0cc8cfb8efa3eb96ffb72ab06b83d7b47b3d22a5772421cfc51214005150edf532af10138ad45758add459908601eccc3703e810002a2e4c6202e98d84281475d55d3de9f3d98809cce1f665039ce76d9523de2abcd7852c13f7f1c4fb7226733ef9dea1f3598692a2088a97a8fdd281dcc58d5b72d42d592019b20b80d52cd6b6ac7ba552fd5adc786f9c8e3eccb4ef55137b0cecc82eb9d18fb6cbd9f92d88839e9d5cd86c0bce953eb4b18cb0969f483232a3f05c91366d82856dcf873170edf6cb2e4c4ea14f439e5a6a5c527f79fc4d3a8a47385db73e19a5572a2741763edd8e83784d2549c8b71721745a7765bb8a1927b9039a238a7da0f3b2806382bc7a6dc3220f9ea36db0723c9d6f874bcb1159e40d6550649ad5fea82f3ba17cb1f6f056133c14457ab1f4249f39b513750b81280d088861b64a45dd68ff034c63789fa5137d8f1737e4234142620ba501a01a5a7f914a022604fffc267590db1b290316ea7a1800eb6f8afb4e8f91e9b7f7abe42cab9c2f312ab36c3145500f2030a3125fdab6ebe07aaebb8a6a4ec8df39bc2ddcfc88d020e4ea9551164bd1bcb607023b4572bd5c2e19e7bf9b4a28c08dd69d562c15cd3b5c2bdf4e908a0a35e3b84c4665535fa8b252e9b5ca8df3a31c809c64e44b0ecab7feb2ef5c14a0d4de3d5a48df61b90c2fe127349e200fd00e4292cccc337c1520eb76fd22f17de1d01e92095ea4b3cfcd4f0b04bf0a668f8aa4e7578bd4fd64bd7b9341892a87a4e0e45e508825363bb322fbecd653de28b82f03cdca377afeb63571803ac6a864371625e705eb28960ae561b68b0461e2c16a4ff63062dc2c34a27885ddcdc76bfc3c4e947efe7329f91da4288523d607cddd319a665f09365f4811171948cbff58df43209b67fd3ca9542c0b6dbb24dd031112801336eb645eb1a2fd963e9e6973866b53032db01742116126ead135ad8c8d5b71e0ed69fd5a659500fdb727f174b92ef45f587201ebddab43a56ff0be90d97235748e6a4b7aea50e8f6bb4ede8400f4cd56f12d44cc3f7228459c3d5a367ec1947920d894e7ca3d7d2853fb7acae425a491fec8260ebf1e9e736104c7a603ae5694ac9a21c88dc2863c86160b6fec2942b78a2bf0d9e5176dd7c52d4e09f0a3426f39983a46b949cdd95d87da9aa1696f719a3ee9543ac55d18d0a13787ce0721b2cfba2789d83918a8de362f74894bf26738e95ba8459136df8a46ca472442bb0576e82fb871fa3051130c52252e3895406b148cfc8ee1bfd3fc054f727abcd80e370a9bfb0df4dd7b04ef8ad418991ea53ca7c5799e1ec19d2dc70d2f59dc40781908b37c338fe6ceb8c820a9cdd4563db18a4e47fcb105e425724da7470cbae925cabf606b3315f437805ccdd75305b1d5a56f8d30005051edef5701ceb41009623807d23e48309289fd8668be7cf3a8ade07074c3756d8c8c277366763a0882d83bd3f832360053b729e6a108b9e7cb432498233c77223c0a01e9fec6076bf98fb96afad1654ddcc7ebc4a13f71abc29e5731c2236d3909706400f046830019909b1501a33ddfd8c42a6790ea0b0534c663817b01c1789dc53a01657e169187e2ca1c352f277dedb3d0189592f1bec9c42ed1745ddaa89d116a3484f729e4ee8d2dc7bdfd89f1c39ec41fd8be8a9e2a9fa268d5bf2091b45cdce1763822c3f49aab5dc195cc01038ceec482f63e6cff5fa690c7affbfa88af785062c96bf441102e286b8059765586364fbbc375f2ef0d218f72b6d3acc11126c971336a3f7ef79d6ee145971760938407aaab97f6a3affdaefd5b1070088bce93cbfd896e5357df784b6cedaecdbbc03578380c41c350213590271a0c052458f797af2f476739de8ed27dc5014306d2214cf23d9bf6f5756c55a15a485fe4ac3dfed2c39463a481f89e0186da6b7da2134f6090cbe4a8e19a715136eebed3b2ad27edaf1beea1b0fdd68097ffed271953a90a6e9b36704d090fbf17c4ccfa538e3a885aa5b13753e6a2806238700d1d28817840d19456a1ff557466942e60752a612b2cf9546e53fb2b8b4e4f9c3597dcff336c36a560c5c56bf789248f0d01c7c25f8de17e4e96849928c30a1ba970b54dc25c921298a1a37ad0ea3c950ae0ae85abe523d7e005c914e0293392718efc90ad76ad82061ee0aa88efa6e85ef827d3989c88082b8812c339e990ac93dbf8f37d244e9eb122c622a6022931113379d4ad1ad8b93708a6cebd69ea0f193ef39bb9cd3f0ea1969b0bb28a8c182c78eeaf72c8db910d6bce5ef41208630a9e33b3e9d84679de63a88c34ef9844b6aecc8d6f0c5839b49bd29b654cb4516fe5016195af2c88716f35ceb598155eb7bf5c952d4f1959347efaac9880b4804ffaa5cd46b9b8e261a48af9bdefcb0d3892e6f033fae49896fe8db91514d19ab2c56721835eb42fb6e9ee34d25b81fa3f0fb2c50973829ee102d5ec6572d344a12e8f82d506e6197825aba77e4401cdd71e073d3824bb141d71186b0f008228221d641ac3191846b042077b4812112d05a72f80477356a253359f5e9b28a6ee407a2f11d5ff105e66274bd8b82e7ac2d39270b5beca1def8a35b2ee9151063e002d388f9321970aa0bcbee557fe033548c713042690d6a4ca5999427ae26bbe6c1ec7bb86e574f268e9aacbaceb762e6c2f5f96052d4a681b899b84de459d198b3624bd35b471bdc59655b1405e9a5448b09e93e60941e486ad01d943e164f5655b97be28f75413c0ab08c099bd3650e33316234e8c83c012ad146b331e88fb037667e6e814e69e5f100b20417113c946a1116cc71ed7a3c87119623564d0d26c70dd5cfc75ef03acaea6f8c0e3f96877e0d599d8270635aee25be6d21b0522a82f4149ec8037edaf6b21709c7aafd580daaad00a0fd91fcfe6211d90abef95c09ddbd4419f85026f30c3b25f9dffb76875da39e33e15093066b232fa7d56d1bba1f2268239a2eaf4e6d6e390b6afb7389bacfeed1c859adb4b574b95f7027ea122cf6637b5574e4673a02eb82c887cf7336744b012f07bd77b5891eb82bb457b0abbbde97d6ad66ec16ab95e6752afad255436b3861d542ce0fd2b838748ce5040fc531ff8a32973b67bac0acfd5f76359bbf97ee1d5cce3618e41e56c72c028acda4f618eccf05d3c1d3045ccd8fd20b6e4b8998ce08b02e552fd9a9b01c30b369fd937a7abd2343a966d95c62568ec2616998ded063a94569285297abd8102c6911b2aab0a7801972f8a852582e1cf919ac4e06e0f819e9b96011a736d9f1444fa3ac102af89cc3d30af9a51b810d2ddb9621d76c2072a9ca69af6ecdbc84a982061851562ae9b13e1065eb28f9cfcf3b89bc96ce8753f410a77434fcda2aaaa4cb6fc4aed8f780189b458b0ce2e56bbe2966eba4972e67209c28c030cd53f62c561b00a17d36aef72e410b43f6de61d7e7c93c7ada72617eca05670600a0ea9d58b29bea7237ac5e2bc0f24a802b602d374c1fbdcbb0718fc3b2bfe90e92165c25cedcc6626ae6b2264dc6ad294ce502aa77fbe9d57915d7ebb921566197f80d5fb869e1c8510ca7a05ffec85cc34f1cb3d5578ba23cdcebd48141da84330e056917c9a90e7a8c831c701148852f2cbfe5dcb91f9c6c2540008387e1f0e3d6f8d45552a8cf57c4e91d16949a5cd10c80b2f6a7123e978d58e2686a09323ad13c1409bb5d6579745e04cbff2a2e594cf39dcb9810033f83ab0c886eccc2988b63ca9d5a337b4fe93675f8c79484388c7d28c4127574d496cae17c1c891c9d63f44a98c5b77b4bb226e3356455f8ff39a1c6688ccf1de7352d03abe9dababa096226847475e00d4d83defa8beaf70de2f609318d9978f7fd35e5905d4e376eea31e0d8eceb440549f1bbc074cff8f506ee53b79b40f0874d99f9e1fd3ffd2c64e7fc1e958401b405e52c2fd571994513ff58431c721f05a4bdc2f9304c769327f8fabe14dcb3aa2fd28281147c326e98ad699ca7997f03a105d34e9ce05e0391e94f4fd161d458163e617cc84c6ed2137d1a0cc3138af1b126ad6aa987fe2e313d7c3c619fee3e67ad3b6b476ea93002e2ec2bd59cbd605384b3c5dccfe153946a041c3bf36bcd829392e5386f6bd8f5835262758190c006a47908ad14a21429f37957c708c795f585ea6311ab415d59b2ef59196eafa1590a7f7b90f2baf0707e3e97995cac283ef8b47d49cea43dae06056847b05474b93b49b73ee69678e64ed624394b63e4dd70839c67261efa6101472876f349cab59b3a43fd6cbf0e1a09d2a61d71996c4f61da38f06e1c04211927022da3da13bcbef3aa62f1bf308a13b695bc4ba72f13512adb5be325eb5cd2279dd24e9fd05d1af832f611f1709510f46bac56378da7c2e81c2041b72072a0cb541b5005911543aaa62d4a005ee9661ea0441da5389b4bb443e3f65a44012974bd5f54a5c653ad9d5c7f06564bf5a787dc4a0e8a906c3ff21afd6d89b696c0c64214d8faf0b6dd42de71e38dd82849d267f4955235793433e9f333c008a20b327ae2396f90bd373d949c4df1841fc180dbfa6e968860bcec395bd597aa915d4bd03e028e36b56fe01754c23bc03aa315b0b1e6c219b12ead91adcf7b2d035b74da9ed0d1535ddbccff41ccc71d1763038ec19a5f59c92dda8b5f8dd4f0667a40026b00d36714ff6694d9ea2e1b2485ccbe9ff5d8d9372f057ee79d4fa5493e2fe0493efee2596f4f708386db2ae08fe3d8a395c90879a6b0e4dc8a45bc0a1ba6ecafd7de75b99fea2ae54f48ccd9e5eb5572d6aa781f196f75b4b1519557a747801567dc61a405c91c659001818f2c45cd9444f7a8861b8379f6beedd180458463005b8366b7355eed8af59fd96ec785a97e6d2b0a4d21bf9a190f94e1328adfddf74f6dd541a32de6cbec7e44f75c1d6197cbdf1dd2a0563ea23fc154dcfbdc8970aff63e01d3c8b0bed12754c73e9f8e86cd6e73c52bf9d018ac0d9cedfcecdde2f9a711464b81d3ca6015794d036ea8b20e638c83291d06e2f0d439f4229343f4b91affad8f1bc88515d332f72f1d18afeb48c8ab2c224ba78abfbc7de16263fc6aac4995f2e8e7654eeb0264361d86e700a8c88bb9cc06ccf61a84e9ddccb6809ae59f9e2b6be8e187c778029d024beddaedfcc3365cd0c9bf8f23d65c54a417a6415234ad2725805cf2f450e84e002ad692e5e046672234439839b2017cb528296a11e7dcad35d84ae817ed9c632c34703214414e7d83832e90070b51b78248a0aa4f265e60824fbe3153272de428715445f884d3026d3ccd314c40c19773ef889c7a8e96e3935d3349269c11439d97ef491329588857c7cbe65a00d59f02835dbb247f0a99019756aa12badb03f3eeada5e48d6391dbcaa719b0ba0220c6baac80cd764e03257474de98120f97b40c1bf6fd4f789151abcb55f0eadbef28ebe187d612c5b4a77b3a41372023816666c6b6bdde0c1961f1b5259b01c73cc19d892afeb3062fe022039c60739b6383851a6fb6c7928c7512f1030f9d58abf9562004780583d767ff6d2ab47aeb8073fd938c788aa08d13b60b78cf1c04af589c328f0258c33db769c38693a4989ae026ce87639 +MD = 0f805dee39c1ecafff27cfc64b61bb17fac906a6c5d628f38466fa3e55d902784853238833ac663267159ffae83e9dbb + +Len = 32752 +Msg = 565b1c9859287785db0dcac7a63bd2350365c73c81763c2ff37f46dfb8f3e06c3f168e5ac9b341e7710d7b9c6a19b32389eafb58036de0a2775692842f5a456fa39fd6db3e71b2966536f45bb6a4cda68d3129c7cdcb8f35ddca4926f023c65c8ade3c4240ca9137bf6f7c2a0f44e867192299b067f911902cc2b5ec84b42cdbfcbb08b85526a875859f5c31ff61cb0d34a5923c5a5d2e5a6c251cff72773e93021e816407edbdf5c1b0dd9a0d633f41e7a25e932d61ae3ca5ddc78642d2c62da3eff06fdd8799627a89458ac2b20cab390143dc686c58dde0d1feaa7d2f8a50e8169d005f5c0462b912dc2ba4b6faf232aa8a4094e5f5e625e90993aaf554a5d77bd04016d4c69d8533eca53dd8d0bfda867ae638364dfe7a0d2f68518cead47b07d1568958a6bde6d4bb20157e58b93a7b5df6dcc628cee925b952fa5c1484d9a0e76b414e6d67e4dd92c3b21258895972799a08fd4efd7919ef782ecd9c5dfb2f5ca7c420e3458836b9b69efa99d63f5418f84543873432d1190374474909e89d76319c34d0ffd9c8782261a0e349f50780381a009a1b1d367f1a5532e22da8d07e3250f4fc3ddf79172f816afe8a8275f983109c5059412e69e658f6307444b2bbd169c72fa6a332dd0488c2b140ee84cd01ae7f7197a7a21e8e05fbfb83c32a77376e1430e22cdc14cafe0fc513421e42d97c12c57c557be73be4a90a052d1ff88be745c89a835d02a869b803ad852aa23402bb13b1559f0c157e6927a08a7b88f65dc1bf76ae9fefc7532730b3bf903339c9e325ddaff8d5435aa118fce3256da057f0dd1db788254e43c317d0f8383e1158f3c1a9696d89ee00bba6c23f05efb05d3ae938a502eb66c2f47faa390a0ae33751b0bd8de5723df91d999aa703584ff707ad6e81f4883757222fe989eee1d8ef67b9c0224ad659cc31b92b2207eea4aebfef68524545e88ab5f036f1cc0918079ca65b3183fe69015dce1eb8f9fbd809ca78cd20df6aa2e3158a39788ccbca07573e35c1783296210b9f1a71c1c51291901046f4a93f8cebabc59926166f16770248f7da11ba08b3a2f5c85647957bcc7a7e7bd58b0bcf29dd69fe03523d25e0048d488436dde63f8a98d06e74b23b44ee8c13cb6d189225143d1218287d1fcac5d5d1c8cfe4584d2a50d9c22e6679815500b7de37acfe68b90a7a6c81762cbbade739adc4178866ece58b585ef75d0918a30e17d1103b793298e1074371723d248d293cfdbe9b11371e903aedae10669d3dc17d248c70e0e9afedf258b61cd7928d497c6221bcd774c48d70c1d3ba204e9677181667c52644174634a68d50125fb04075dc88113f099f2d00c4ae82bd9275d9f190eb63d2ad9795d5173e3674f3beb72f513ac2d15f7715f4dc8691c7d0a48e0f7b5e726c8bf982de9210f887b67f55b3ab80f815de14f053f3a50fc672e93f7bbd09197d4603b456fe4dbbd311bbc308d0a2db94ee3e6426f0512340df0d943b4034818c467ed445453baadf6a39a836aae892d5f8bc1974bbd3f5bf7fd83459ea27d221f23189b44e22ea332ac2ad461f9946606257b9453c73aecaba11c8dca52933c4b4e67ca9014ca657ba1e7a3f19ff1ebe96d7e9a25b7876eaf882f7cd5883ccfef363552f460004d48015b6297f604376fa045391002c74a5a1f16a33eb7ec6561871bb4b05852c30e66e090c3905dc10f8a59f1d13d5d1861d27c9164560495589d85607262447f653f31df12e361215f784754b7cbcb412d4ecbb7f50717c81af60cf6a91257dab2f6a97df483b0d0c5f677b25232946d32f07e874f3fb8865f2d1ce7c2fd0f5d9e19c22df6e5bf47d97175cb2f063af509442f90016449586bbf2fa46e66cd807d35164f888dfeff0095cbefaccb416116c639628a195ca6e708cfccf9f434dbe6c5105327f0f28ee1cfd4a069d62a39f203366f67d364fa47b677b20439b7d851463ae953933c4fe38c4a7dd4db68081167a1271906f4db0424b203fb8bd90e43351072a9f93eea9c5777d87c2f8d23fb80041a1c388ec1b2f009336e8f1ad6331e1b7f89977cc762bdf760de670c4626d8c9c8fffc8536ba84d7b0db97ffc8b77dc6707102686edd3c438769f667b719ce8cb422a79ab2b17fc81ca15aea6e36b09be60eae9459623ee6bcad72122f4afda75c22de11be0e3d34c77e3c7d3f47632650a110831fa8424b81275eadf730d2b4218f148cc14749b851b0b12aa44011d030d6bcb71a05f30c7556109da771ea3dc4b5df8e54e321bd3bf74d7545d72934172e2792e101ad83f9b83c63d874a09e86358388f17851ddf6a085ef9c7325cc7405d5c8fd31fe5c8ecc3682d2cf9271169cc4ff2f6d5675024aeeebf08aa403c7fc3babd70d41e0c510939d4ed93c3fc64a08635738ac3cff54ed1d1aa41074838fedcdf6fa34db0d13d7f5a5280a6545cbc2581160cf704e6d14d55355e789472f50a1e59f3385f754783e7e32898bf5a0874fd68c3cb96fe1dab742f6b5dc835908ca2b52ba8bf440f8da129f460e5646cbad2f018092e461b335522cf7c8c89b7a9920bb56578467de5b3ab4ac87085d0412736717773c4b32c2195f29d867752aa16e4f83733837ad243f1939605c21c4f25c337df0e82cee0ff113c8a610649d758c65ce69804ec9d7a8438934e25382df31ed307a6885295181d150ac33f84787d3c49394ed0bd8f7feb9f87f3b50c23bbcfabb7e4dc29949341e5e45528ecd5b0cb27fafeefd3ee7bae323a9c7a8078a25f29b970883925990514e1becc673617fd5eef4f6a180295565873f07d7d76d255b4d4f1946c8f52f20ac9a630dee2da5956e1ea487215f66a78fc97c5e9637339b3cf0f06a81ce58f2f64b75e3a22226778977691cb6dc572fc9b3a5aae88ac94907373e8d7127b64ec79975d613e17b02adb9c4d0a532bf74b198145b22da6edb288c541e0ba3bfaa7d2ee353d7ee0bbd5730485170f5080cd3d138ddf9a89cc81d6ac1aab5c4ed8c93565efb529a610e2285541dae95b95ead1993a1b167cb96524d17a2040db87bb6ba391b0899038b7c237873b2974be0a9bba5550eaa73dc63bdc6927ad0b8de43c512618e4c7babe0954612216c58495651fe5655f33df0ce474f0a8ed0674ab6f17b3d483721e5ec551d677f9736ef3f56ff242bb48289fe541158b46f3c37ace9c42ccaebaedfebdd9ee221aa9058c135385cf460d9fe806ede2b801fa03b81f89dae8adc7ae08ba92b20bc18dcfc98973a4f44aabcc4d111d5f176545bbcc2b858410c7c0e9e38424291a364756101e765a990d4a3737cc7b9391bcf97320ba39472c45cd27f7e3385c38c00022ca9905aca6d810690f01af860c4c41b41b944d2b246f18eeac9f76514ba9e0b960c3c7a403f328e93b766140715f430425806838e08dc6c96a7f85123c370ea53864654998a6b83f25f438caa93b27eea647327748e7023d994c0ea7f4b3b36ebc4486a34d39e9f43342dc2b9b2816f706b155ef45c5f2d4a1ceb8165a65f69a532ad3bb0bf3e28fcf2af66b2e7038a9ae8676a8bd6ebe15eacd2c69559400b364dff398b81ecc9860722e934c5ab48b048e40ab9a2b8f88dc1111a8cf89f841592c8f423e00ce974ee32ba9dc2db225719158ffc2448db6e06110d9af8d07ca99d74fc283e11115004596b8c5325c005e5669ac1f01df265c87d106dde655d88ca8da1f710bbc9ae06016c5f1b1d8a331a619bb97a9ae60ba49fb3640dc09f29a69d961efc5f8ac55fb54da47f14e9654491033148621ed60703672c2b94ca12be0f391e456edd5c7e0f7feaf3ce7622d07f71c7dde6154b8c42cc14ac3456ba7d6d1b63a07c29c9ed5a83a11d8ca8e26a8767fbafa951d280c822bc1441ddb76141bd8d820a08943a30f95550e21a2a5f33463b222e6d11a12e3b80d82fb76005f78ffa6e9ae251c12d3176426112714b1dad04f9e7cf7f59cf57117c608c6ae8290348ca915f792e99dc82468c4a4daaa0fce78b57e172173605dc7576b52e6430c7e72aafc880ef214b17e1c62a15fa67c6615b014ba065fcd84067f4da2116c94e640328c5ef6f3e1d95a8912a60b6dc99f0fd768670c27e4efba84d63f98c3cf73de8aec03b3b5ab48a1f8fd3c46c69d824c729fa69b954ca5ccaf2db0e111662d34fa46ffae001b0739b14bea787ba015b5c9e4ff1b6faeae25487b7d561d001c2bc9bfd84e9bd91d0cfc233909527b6232245dfbf47eb113ab97e72f5eb14649a9418118fa508c920121adb06114d671acca32218e8afedb48e39a4d6093e0bb97a8b4461ce5dc6fff6713d7e889584809048cf9515b3c0ee376bc5fc68c757ade477feb1b2373bbf0187a360778aaf1331a930ca6b814b5649674edf764ad8f64660b8e5fd2f67ebb7a0c5624aa747410546ee1f36a2ed7b28cea805be33201134d80b750ba10c048d6f1bea9e85dd78af94601a13a317cb7a0479f5ad1a9d8d24305ef56a2678a7f7351f6fcf80d24885342f219edc6ac5a19b3d35cf5bd1d8891c2bcd954a3e3489b538787a22d63f1a88b3ec24e9470834155a3c91814d71f80e0a941966dd48b941ff8b0b0659aaf41486c032444cf1a5e56970902560e7e56873bf6316d6430a7ded1e1e85cd3a966a20546367dd208b9dd37847b2cca8d5bdefc60ed4a9b1f1cb89b8114bb15c75fc190f24de880339a130ca34b3e1434d90e73e791ac81403bd4dcf8fa2969f173cc956f312ce18448209dcc3933f35b163e28f4e73d1f7b4b5b1fad634fd50febeb9d24aaf2fde30d2b72680fb370ea5b97a4edb5a27cb99674e90a16d464090f482f7b80e2dd392f5c14e0936892c9f0416e3cc486a0e06248c476dd621bc72708d3db7aa3886cf7dc0a9a8ef761e11d630e47dc8f94daf8ff37597e9e04327b5611ac62de0666add3dc00c70be5182a260d78c4655f8da0c0cb1cc232263053587257fe3a600d99691379084a27575eb1f23646b109e3a2b3062571c689aaf6367d4217609d4b03c4366c175c2e87032d45e8281b9bc3450173dd53013689ad19bbd674f7c507320fcd43bdea028e5fc18ff8334a1c14d2d297ac2f8c34b3c029b27bdfa8e1296f706165c29cac56ba9656cd2fe794c0914dfcfbcf0e8b12778dec9a1e1bf798020f793aee1933c55ed325cfe4990caeca9b2930f930448d196ef199faf7123e33159d2a090a9fc592a181661a098ac6c5e3a6b5769a660bf0f347e23be537024aaa559dda16f93d9d28f4fa98df19f0c94efcf00ef3f976424578dba98c70cc8ef52afb2ae64814c88f05f327c2be142004b24b88e406b5588b0cee0b95c484481fa3acc12194345bff3db98f5a831a102c502cae1493b07aee89822ba73c13c04f49186770e5849e9f22b498506feae2ef5efd462cab4ff09679fecf6bde5f3eaea2a8e47b44ecd8983e4d094c8a6dde74652519d3537a01aa63ccc088b4510a6438c2ffe9b854531119eaacf5dd894be4ed0cefb29519f652d053c6a7c6d16b9893d081634aa4553339f547f46f2773667c1a9070781417b847fba8701ac8ab733938339001c4272528d4a3f049309c239cb7c3b60453ac01502c308aba1c101cb464da19e59d11106ef18892718a0f42d44b512c42befd58734e249eaeb7e3bb8cba41a5fe155a1c91b2be82f11f14ecac3e0379393e52e339c94d53fc7f6b7a47a42fdd55154c701b810c67d1d5f249adf89f46f2b9f2ca29067352ae5ef27f6f886b68f1862d3594c53bea1796f3805ee2ed3a73182636cc6b +MD = b8126f07326a0d6203136f5f5d8fdaf480a05d468b1770835092efac82b4a6a5dc280e3715ba3af95489e0e299ceb737 + +Len = 33592 +Msg = 4284cc3cbfb39329707315a157156c1f9090c6eecc2474eb013d3e8c609afa2188ae5d5af947100acb6d062aa08d0e21d7d7a44302e40d979a9ca3ddf2576dcf6a42f2a8e5054fe37da2884575a01c1d6e6adccbdef2fc7fbf996b438453603c5106362c6b34793ceeda41f9be98be9cbf11158e49956a2bd6fe3ec7fed7fceea6c4cef0741db59d86ddd94e63bb1e253196f79529167f244991c66f482b686fcf4265fce6092c8fad72f94c4c5261402cc02ce768bd62f17e1ba8454b97cd473649a156ab3e0699cb6349fc61a4b2751856598cecd23c1adf638f51ed6353fc41a02a08a9056a44487670658bfb374d5e21298d9f9d3428d233219a17d621185a11a91acaa580178c74178fb09d184f64e941f1676673a2c1510628b2396023e862c692f468719aff24e583b9d37e0493754cc02e7421101386e703a4d437a3535c287a11946555095083488fe591f2538ff002db1065fa309a6c34d7efcf2202c778d9087283d113be98e6181b78a30dfdd5c0568267e980553cc231d250275f6b5db8c14af4958337cd663ebd5c9f2788a402871250656b7f00b59cc5e13bd10f801e2464e029c383cacfe812646c0bf805ce560848f459df5f15ff0faae5c07d881319076e16396a3629fe63b9941f159f2eabab7620b23e02eb41f9d4ad947b1ea0887cc6e34fb4b97d67f8829fcda71b296e440370de64903e4ccb871bb6d2eacb590c11186c28fcd20d19e8137c7520c7871b166c4519b21707cdeab88c4a939e74fc773ef790a730d70e137a93485711de78d89d4f25107d5a46260b7faac221c1971fdc5ab2629fad1e2a5b7ce8680e5ba3718a654f51782d80629cf8bc1e5b2924327afc56d3287793553f9e1dfac7e7e308bced601e1068c1c7f45d46505492ead7a04546a5d21db3bead61afb5426882c5b951211e4ef4527d9a1711ff14e63237d79d497ea688c78a2d2d654389c8c6d10bf757fa39b77bab168fe5d4a40b4479a66c2607aa9e16e4476a0849a4edf8543949cd59da9a837af12c89770beb68c7961aa6e7e848eaf28480607299c15f75ccad4ae43785b411b255c78f516ce6462e0f91c6686f89dc6bd83563722a455d4b8d95435a615499e17465c47f780520f6b4af4e31f93ccb85d84fc73712f0343e50771d4b14ac3907f02cc09bf60f7d766fc7254ad04be758e97644ee60a9212e5eb81a1088041aab31e428b0cd4a8437a9a3f3bedafe576e747182a1fcb84ca21f20e3b3a3a463559f55a7c3e7ff5ec0cb096192019d444fdf092a57cd65de22fb76203c4fd33d8da246e3de2b7532993bc216d02b6fd5819306e419bdf8ff365a8478b173dad0dca281840881f6294b6396bb8042bd338ef93057eeb3b8d667a410941cf70143c907cc334ad1c86b5daa4cf8a82dcf85fe784e2cde98ef8c3c41e31c84c290bedd39f098ab03341f5777ae7452d4edf457772a0bf152e3483e99c5b7f2becf6b9ea0b55a3300826ec23482d8851f5fa823608a9a30cadc33f3147e0d6dd2067096a4e221eaaefa7f244891cb4af66cc8e99a3784a2e82475e51bd5c7fde67cf54dae4197d9f6e47b081ba3f6a8415e7c328df96f4f9502359c14938daae37a234a24986207c08789f3158001a7e87bee85a1970440b7bd9b9f6980067daf48211570b02a7cf52cd26f9eef934fd30c436a3edbea7c379ed1768064db7d332e1836f85198417b1b7d031eb954a9eb58a669cc8bc90bfeedfca9c307b4b3577430352642535d3c9cb338fda6eebc16a93d0bb3704bf6f3f247c0983137250461909b614d04d81ff79c94a37e06903d4530d75b521644fdf4d84469a90fdd203e61f0103853bb0b735fa17809472e4975a8562df9d2fd063dd7bd9d38e2e39453caba9dcce70dea5925e7e50f569d2081cd0e8f2c282af5136db19ca6593d49e8f4836fd169d6a3f115ed5057dee5acb1c689eab5bfd2b2bfc2aacebb1bf5264507d2ee0f801e1e83583b22aa850fd34dbc4fa75a41fd2488fd2f9b3ed11312b22a30824ed5ee43571559c4d0f3227f9cd6e62ce453b335b846c96bf9229df77685249355104dfab575d09c91d12697e73dd8e31a9ffdcc96c7fea6b2b79dbcda413689edd8442be4a02614b5c724037618ad32c6cde2d169a559b432371a492686eeccded5dabe2dbde693037c22ab9190eb83ae856b2d7a0b5ffd414b1d86a27bd5c4f0b0179bd8f4958044992b7780cd1c3d9b6e9fc6111f9aeaa69bad5b954972daea1103aa2d6fbd4540c5444f8af6c7c856308685750991e12bced2b049174d74969fa7d47353e549bfa9771bf933758ca4742852f0f2cc4b968c946d040eeffcba030afff4cb96f489edcbc313aeadf150e28e16c802d491b07ffc7a0f56dfd81fe53414f6fc57ae6538492f218cf75f2021bfb746603019414d11bfb216a5728deb2efcc211b0df1d32f7476af8db3ededac31fb235684d119edc243477ca30ccc0ff9da03029ef7784dff43818e2f650b4a33454a80594e71b6392dfa0d57ca30aafe1d7824b473cd6091cd11493ef3f5866e073e28e558d6bb0eff9b94ebddb7247afb12e9d4d34cf7ba87e157791726d140a590a8bfac937cb25cbecbe5a3c9fceee745ca86a26183f8187431445b39cb69a4c4984ea6427ba1a9d5facbd8e3a4c886936f206db595d8d34c5f571c88d527795c7028d26e287b8b73aa04d99eaca64d8e1058a1c39dbb6cdc49f7f7ae7f38b7cab8c4bd6113ae560a6227225584e6a0988695caf60c3e399679cd591529ebd481eab8c3e5bd98be1cbbb94f92be3824351a4e65c771dfce1d772ddd5785df54347e6b824696e9182d0f21bde0c8e94d064408fed26efe8ed3bacfd0efe371bb34fc53751e200df8bdd50709ca35988f6eac5be2814439105bccf9f038f3518e15dd0718d6f985d441c5cf9fb974b46fe0bb9ddd7ea20de7182652a7dd15dd2159a90cf9fb83df3f5b39e1fc3916cb730eea653c04f8fb778b4f606446cb932972d8cb75164f789e5ca9e4abb38c5c1d3bc1388acec9604647a089a20095120ae3f4c92691cce075d8ae5e3ac355d4d319c89e4626940ad7bfd2550d9502b85a3f859c9b087cb55a51afa505e2f3d4490b78fcfac6d929b0665d48f36e85147be7f3ac2ee4ef55b05a365fb99cf6b8c3935adb150a096b44cda9ec0007acb5047fd77e7eb185502c54daf4a25bdf10f743d6bf217ab53e197830949ffad9f868699999f6e8ef1302c3f5fa7c9a0d7b388f752fac936d10b2d889f93fb2ad7d3c37c27514158d3ce83a2fd794e202362bf8ce9312ee819185712e806bc987b1e45cda9672a1d03c5129d11287de6df035f24b8000d6a32f25d496b0a09a0914f55b5a848f28587fb2159241c1c9a127eb1e648cd3063247f8754b008acea234d3b5cab5c613a695af8febdbcf3e4c5bbfdfb20015d7cf8a91d5b3f666b1d38023fe93a0b3ee1b1c9dfb36572cc6affa18b8bc9055d5db5566688a18e0fe1d955a985ddbd5325652f1da0a3a66dd7c81aa2bdc940f8ad6370ab015de660e00d2ec0571dda66ab8f76fbeeffbe9fd1280e8bb9aa19f5150bde34eefbd825bfdc75cd8881ca401e3685c1c501232a0028638fa8f3fa1e3cb388497803cb28294e12183f92f5a9246344b74c323dd60ecf02f4b22d4a39cb665632c7fe272fc46ceee9a5d6c468651d9b24ac19746ba026d302fedf700f6929303602745303383def88e2d79d478b6c72520c3f31b06133be03b591d668bf06fe9f51ebb96c2ec9fe3c1d1de90c3b58b187952ada6ef600ac3dfecce30c7404a8b3ddedc0314e19044f7e2e11801fea400c6f64d96d0a9583f90216ffc2312b16bbce01d01c3f34e7072e947b6bdf290729c175947543f82d7fe8fa92539e8431fe4cb051f3aa2291ad55d79195231eef25b3e3754e49339017d9fd04886216dfc67e80ab7f36ece8881a7dbac592cfde4a6f38e2bfc54e9609fda9be2726ea09598cfb47888c99d6e2a6105dc5d446bdde1afb45925f4f269c7b8526f8910698009fa98bd6533142012118e45b928b752adfb5058dbe40271a7c19a5c54c747203df11e03034bd132eb21bb65074a4ec76e4ed8a798b2883c927eea454fe3c81aa73bbaf5fd74433b181a33b6b219b0c0a512b3c1d6d1021f2a58b896e5064ab3d832f5e2ce3ce89d2b737db764278bc2d4ff883430dffe9dc1d78bddbeaf6da0339f6575c0164fdd97c60fe377e41e32806dac7b112fdc3d1b83ea96373f9f545bb9700bad80c770df7a40c787e006b439d5b7030251397179e64b4ce9476e44b319ac30d11d0dfb8518e6dffe9bc3bc63c03e688ee474df7f67245e3f4748f5dc488071c53b81d20b1a38994687e3bf90d59918114a3cdb9e8f1c66b3cfbdec39be733b047cb1a8d406dc901a34d532435e5dae3402fffa59e689e2f1314b9c4e042b1919411bc492673930d41316b8edf2f277519f2cc033d5f35f422c508aab81ee887e392ec9b8a3d507feb326b8031c0e10048f41a1af05ef3851018b3bb4d05405adc5793ca9454692048593b42531f714c743dd333ddee40a98615a240c77e21d12667971f6e3f44b801adc41c6ed43d2146d6dd962c9684272cc3bd804e12f3b66acae2e23d864b0fbd36ec56aa68af4766c6228b06df27c8a92aedc508471ecf4f895a5b2cb2e5ec25fd9c372e622e857b15885a93509154a652185520a80ae57eabe9d1604a7918e009bd08234a21a52dcbf94afa712a93ca442779bcba20bf9e38768e04d6715c97633512b0a9f26d26f15ca464ca5b4cbe0703790507c6275839e8d83ede347ef211ee9afe0508a60b8f98b1f8e48a4929a3929d221665e354b529f836eb2a46981dceeb35e9cb1887ab97b6df462150b421be2d3b6f66bc39b420361684bb7e328ebf4c7cdaa38a404f40fe4078862a07886e707a9b2f7ab03eb5d903324fec676da804fb62f8c5de827bd04403239fc9e08aaf05212ae5605cd02b277c4e5ae0c1705cdb0832920a4d3073126e5e76a231f9320489bec4f2155972aaea208e4592019c4454b9b76cb64730d441a1793c84a541a05c52e10d7238f7b4042d503de9420c5dcff6fcabc8a94faf05536e3ce07524002050025a7956026b53de6a70cd1bf34f004f2b6f883c18cd41db1e4d4e51224e601ff0803499dafa5e99a28746749b41702d0a6200e9d2567da35115d52185afa1277328abeac987adc7c22a5c354a5ca5f9632a3799c7724112ce3c7dcd934d6dd052fae532153bc9d19000184749c82919fc6f35323d4716905f6b4e3e95504b82579dea57073d391dd5b28190e0ac84f79dda039d7d008385ca4a515ad2e0c4a548bac243e7b6851558e79ff956303cf91012a8c3cfc31159d8808d0a94235fa1eef876dcfdcd3620e3487b6af57edb891cc02c8b7ab8467551b60a372144a4de11000c0c90abd3a53c7d1ccc03bbe90e888c98dcc809ad3ffd93d1c7c3691bc579798fb9ea77e40e2c2d8b05c912ecf01d1df3a0ffdbcb20a4c0e9a4bfbb4dbced0c04cd515af2c27b00ceff8fa96e96a31c45be68592a810de45ab46061c12c3761752f0e7c8429f1a0efa09da8f66ae230961e4ba851c801a82de1ed83ff7e1d1fe9c7690422ab56b2f5d23a380dd3a102efa8f0f3c85f48b46911ad4b901868ef697da91a54b071e1e97caf813939aa3a57449e6018acaaaf162ee9dffb64e078fc3918e8a3a00bd2d28645aa0504c37fd7da9f17c819ef413d1fea67c8c84c63aae3fc9396e3ec30b8d741dbf69db57976523941600cde13e5ccf50c80ae75577b639e46b6e1dca1a459ee3e966a47d13c94b50668ef40cd161d55f5aa7d24fd78a146278903a3cd9cf393f86cd4432f31885b8d6929dd17d8fa504cce9d1ffda8863c5e99af085eab8d773400446f3a5e1772ff +MD = fb893446154e1ed6ef8ece5c8acd76b3b499bded4166040f8b2e29f6c35502a8c50464bf62c87788eecc5cf421add3a2 + +Len = 34432 +Msg = a09eef49c36e155a4ce2d02826c706100c7ee8934baed3a9c936745746663083e26ec308df162706a9b0b77b134b9418e42a484d9275a9a74d2d005b3f656b2313b08048b4d6330057cbfafbbbe12f39af3cb51ed686dec8a7e58ca0b72a972f3b4c6f34c81403f35e19e1cfa5ef9e1b769c782e9d4b3ab5de45604e361c7c526229d8f1a6395d85c784b32059dfaa674132d9a4722b8516fa34c48c42a3e132913103aad3ae0a5e99f3ba1560171bc516e61fa8da8e8692049cff8265279077d04b3785d8dad227dc4d3cd74101b9dcffa094645fdc06d203645a5926104fca255fbeaa3e247c88987c828d84034b5503487efd887ecd7eff741d390dc7e7d39a56de428df6d228d667d460b2879bd72ac6269edddaa33d00b49049a3b220393616e0754bb79ab09ef6797852f46f0b7d02d46de75950b70f0cfab26f3ac1a401880c6a02ce9dc7f611bbfcecb2909903e4d0922d639b953364a59bfac794be0494a94a39a5a316e8a0e0150929c628c555613638614d7f75a4d72dcac25f2c4623013c79a374457b8b31ea30c1d860c93bd0818eb92e1cdbb4d9906991eb99cf1b5a694930d7fbb7baf6a4e9e290eb1980669ab9d50615707cf3eb5f9e00aba866fdf931b495e0a516776abcf4b46ebd0a68aa411b9d1139e46c663250650ad8ea3213b997769d4c85fb65325f0d94bbc321d8acf5bbb940d58e2b6c0ee45f679140df6a4242dab5f0ccbcd28b63021d91d84d84ca27b58c359f5f944243525e417186cb1bc13ee640309824e07e63eb5ed4305002aaac25eee82d33534b8ac4e40b30658bbb72e95b7021b1c7255d2b115eaa99050c4714e6b1bbd0a9c4b0a1615704befbf71ec62bd47e00a62298e792bee3e63a152d60074231f3ac766bfea09d2b60d13ee98397a3d89ae63bbd26c93c02bf0b8c061137e2b825c42964e28925cdd377587b2a86275605f03974f19e2030acdf3b7c3060da78ec59a443550436109d530d7dc2e2a621cb2be3644ff9b194361fe835c3697398d3d3b0af5ff9191f48cf25975492696073fe033648c23857e4315cd9d53af2405f9a1550095017205c516770e77eb83c86d35f92e4e1fda03f7e5f116bbba29a1a169bcf5af1763c5f439cb1838edbdd8b11c11e2c3e4898ce6eb9858fd4cacb8baf09d45bc47e9adb0c8c0130aa196a0a1fef8527c16166196a31dc486db1fe3ace290612b279635714ff09f7babb0c8c67b16ddd538f34a8d890be9f6ea059b0d9c10e89a1adbe5cc3bd71dfa609ea9850d17f57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db64215629c3f4e69b4ae23c64448b6280e577c3ed526e3cc1eb639fe34b2c9fc6ea547beb46b6e2240e6e73ca2f26ded079a2fb7ba8c75cfebca8774b0a3cb8049e22d3da845c3793130b1ddbea34b7ae66a7aa57f936105612540ea6d0f98e0ce5f90857fb497970df64b519f4499f8332e26b12a25ee95072f2c0774e079458685373e41a230a45f9f7b414dbea08e7750fb82c52966a865511274ccfcb6d7f7bcec11f7f6d7c7ac930a55d1f7a5653837c1c157860f6504f1bbd97d4d97bdab6d75a5a898d4287e39c03432d9f3a4014b4015e92632f56b79f0dc90b963202afe9ba45c6f6ff05cfb6487784bd17457f4402782f0167f224f77280c2a6427fad926b31b65f047cf40c0f5ab3486fdc49a889e2acc052cb2dd1863f987e0fba564de7cee619e545e719a27d47e5b66cfa5e123e9a24524a2899d365fb820c3b3098ba7dc4cc34091f4bbc4fb1098d8017d135ec85a1f8e7abdcc4847a46ca8aa2ff4dcee0ca532f032eb7526d2857ae08ae6f6cedddb92c3e06f42b8350cd2143de2c22b8a8c530493f1e25fac6975f63522940411c15a045a4ccbbb524768789d1d019baec2cb548097b2ad868ef0cbe48edf70df190bc5922c8c57e366935fb66d4246618ec1685fa38e19483a14e500f3801c2f2ad08ff2d62c94d1b17a50f09a2d3589375dc999de1da9dab609cef2191e10ea3dcfe8e114547a027046d3b36b696f0f06c9fe97100867244af60e21c86253f69a305bc7acac125feb1e7067a99ffcdc432a8fc001f65b0f3d032bf4c8f3ec3d891c6d0d67db63d06a2bb0741c76e5d736ab057b78908c81d95aafd5e07be6a652bba8190d8a753e34941a438c9731e72671e7323f7e02636420222bda9f46183c3493546660518f9282373ac1a9e8f65da7bd4c1c67c59e27800a5d7c09167d90b0b6263906feadcc1d8dc2825513eb21731031d8f3de186aa0f1d58f615ebc97569af85023847e2a8ca6449943b8adbbfd66483bcb54bb75a85efada4e24bd964fc6307160ececf3f80a26cc1ae226736e4afb0c972f6e8fc1da3427797268d8c2c23865653dde71883fd2e482963d90ee41b115fe77180113eceb3c8a4fa5a4d81776f4d97f3bea65cfaea925deda5ca4d5d31ca935a314c51c87e228c45c41b84c54e565bbeda7b64224e2a8c1e51db98dc7ea4071f60dfff270e1fbd775f88ce93802b0f8dbf0a41e9a59b648471c55f1f6476a31f937ebf70f01ac92d81179778c11633eed0d57ed7ad4f579e6a19e8ac8facf7f94d9aeb2ca0ae3fd6dd4a97db7db25950b45f6362b1c0d5eabf3bfdfa6cd1862af3a73ab0ac3471f1d88448321289f061de1aa8215f9a7ff7e5cde79f686ede332a3606b38f58100ce77711132c078980b299a58a0326b62482224de21eef508055c9d79ba6839a869e759b0526a5954bd65ef4034910091ef8eb89890cdd9db11ad535dfae41620d72124e7e9f0ea401cddd0c239dc0f945de8c22faaeb41643cdeaaa05e31c06ffe6df93f5f18d2670ed9666717dc3f7178786c29d60fd3aa6f36c9c95016e09dc812003f1cabbace7ca0d8b6365939322a85dc107e033ab593fed960375d1eb31c5a636f8870497f4f7b4f38ff1ba4df5a593a6b098d1c8d8e7f01ee7bcc21b8e18b47570c3128816db2f373d8e9297ef03aafc3df76223b4afe6afa832c92b401eed6800eb4fedcc08debf12a8c7019d371639f6885f3c6adc63b0cb94418af63cb3871f8c274982f53603a5ecd20b7ed467d870b843836a11e9dac84de5cb2ef6a95b2302332bea14e79d4da72e16125002503333998930d4db8634cc005c48d1214cc209fdf5600c45f4908435d1e63e9859c456ebce6d89cb3b87ab3bcee250ddd462efe236633fe39214f0a39f68f47c2d9aae94b37ec53b734747f29379fa119a8c407a8f8224430e2168d20f192630743ca73ee8c30baeb5da3ecf3a7e317f07b49831313b5de6c16c795b81852857a600dd34def8c1878be6fc2c346dab78945253b0fc0d4131444c9eaa972b8f543bbdcd30f67e8b785dc41c8401d6ac80d91bff44206672c51f584549c07acfa8bd99d39dcfc2cdd3b417fc713337c94a3e4817954ed56714ab0609b39e017dd7a44bace5eb741d3c2749388e390f96174c8d291ee7d892a28fdc5862704dfe73783995a3a9f0de141fde3d0593dc778a8c41a03b8bfe89f12641bdf0f7bee5deb1ea4a51bbd794ee065d96a1d41d0216661c29859ba5c18316eca6c984e2a8abd9d4176a7176d64c932db1dd6a4faa3d62530187a76cbdcaca23af66b847db5d689da9686b8d26921ef53b02c6f2f48219acd4bc2fc1f34ac89d3442f25ce255d6ad6ce61a58ea61321a8ecc9a956566f4801f8da533e6859a9fe208d3a04237bc69de4e0e78b63c4524299525a5716e7b635e9698312c0da8d21502dca09f7582797a0aa87afe85f09897f728a1ad0b26ccfe41895818358baa69db6ddc4e91b142ccc688de47c0acfe565cf4286ccf7f239b28f9075fbfabaf3cfd17b1d41ed16c42ec1ff1168ed2bbe1411898551dfd1d91b757cd56ee91372ae25adfc46f5b4c7905ee71ef532a57c55e168ffa8929019e6726289254c5089015b7a49415c769db8e64cf268fec587eee7e6da1a37b760dd304978684cf6a2921aebec7a49e4ae6e0237770c7c1447a7ca0bffedf7ce15c654398c7f118f24270b07ce39e587627c5aaf9428d119254a32df5669f95ea26a893aacb1c2a37789d5d6d5c657e622a995bc3103285c879dc96bc7d866ee6e917555c04788b803802160ea68c88954bc5c6637e6a766d66a34b63b806507e102c091b1898a582fd497aef66960f9627e56b68c1976be7b771ec898ab1f30638713f765bff10a654cdec7df0f46bdb2b72cb319e4beecdc8c2daac89fbbf15ce6168dc531e4570db19fb38fa3a35dae2e8566c68fa77963730963b1a462d234e8705db9278cc58dcb817bec6c9e62bcad0ad57c6158ec77f35bfb3d043c5c5355c96f2ae810de4e622d26e0b4605346fa630a21a3facd7fd3cb7b5305701622f5cbc9febd992ab83e4abc52c111b8b3de370d9e9eb4a5e5dc00eadaf1278907901c751fee4f303426814629ddd71a6b212ee4dc97affb10d6a350bc0e883b6bed647b73c3597828e47aca4f4eddffd68bf199c2d9125768895bb6e0a5bcb6b7d54ce1e483e08afd3edc53ab5c49f25ce4283437ab064155bcd1232efdea8251107bb159780bef1cfd50e62551447865f37bbb2554b3423f39ad9f8e603b25a3669bf3b9e8032eebe97d8da573f51b59819038731d40e18ec69632e814d729139f51adee1cefcfd4c90c4f130c8562a05612b2094ed6a7aa2c34e52462e5160b8247e9df5cf85a3e66a43557621bd5a23aa732cf2f9c1bfc3230bf2a928d72f2d825ae74f046589189ee455abde0fdc7f5f7bfad07bbc5eaa232c8e2ecf9c730699205951f005134f891890267fc61784eab618b205a2ddd43e10935b84e9c2dfd37f42a324fcb917c360938a7968a1b0f6b2051c0a2dc3edce689093db77a505cbc861b715a500fdc85cce5c4d6fe1afede05e730bb597336e85148c45ae8034dc8c050244a6716e225daef07e547dbe4ad1735b8cc2ce6199067d8955f6eae9a03acb29346990e54bf3b40b8ebedc888805f239ffddefd4c86d5a3f8ef94b70917512706776c5ffbfaf8be1f0f7647b4fde39a2f78f6229971a38f3532e38763a9b798c4046a729f7f1753837a6cc22ecfad80ae62fcbcc6fad786934fe2866f64e7ee16161bad08f5a3e62e5456a0bf9cc5bf65e678339cc87b6f5b6e1a1cf7ede80f44d50679fd05a15e66c4bd492f0d313d9c29f3eee3849631d6b911b2c1efc2e59668b33f47571ba574f2282546c9fbe49b56f55763d531b6495651ae97107e5753f8aa65ae9218a2a0071f9ccc792b9aa99304d5e36453e5ff6d627a3ff8234cc5ac7455fa5fa13d312b2a1688c4c7490f08aad02dd804a63f27ca7c8150b9ae32ad9875f365bd5e7185d2fb4353d9d816df6eb007da4ce150ab131e27c04964e3229e2f614d74eda63e9eb3c5cd682f033dd8de3a12347e7b22c4c7f7efd95620340fea0bbeced2197d17a6d6db7d36214c71c08e27c36608b466debb86746c310b710dba61d4f5126bc33c3e251fd5b734c0bfcac2027f3f8880cd392c1f8e5dce4f0236de8d3fd8302cdec45256f40c1d4e44b88af7b267c79afb3a8ae4a4eda62e3047dc0296b5f3daf2320a2a7b692ea1b51e28ace8ca983dd08548ca9629ba98ffb50339e4efdc54e24ef7a452168f437bc5432907ae24efb4e40dd94c593314d747fc3c0fcf152214e1bfcb615b69bcff758474f85c933b0f1d811aaec5382b20c66f13009dc3ccf2b20aa89180e492a8f59297a41c0ca649f94d94a5b5f26342fb03c4a0a111dae28b8141c8cc274fdd0f179af236b7baca40195017708847a5ab6159d62325d54e32cba0ef885b7a0889b883c9f1bdfefbba8c54ee3f235cb2a131d9896a27459d7091cdeffda79c902c1f5c139646fa422e4faa106aeb2ccfa41a4da3bf40b0370d7bceae70343cddc0f42db76d793708660a5a6739073e657bc4bc0b6a97a084d130ad162c29e2570ddefc9dbe7f3cb628646ad9f3a01addefd82ea9b3569cec8459720e78af1766da86d3add18091b23d05e450e2dd499dc8feac65e1a22dd7ed9d237d9bee6172f194b9cfeda3bf666d96cfb34ce7520fcedd +MD = 47a5b4586728b1f5fc483b5c1a1842224e67106496413a54018ce3c97436589a298811d69d4d10d0e3daf108e21d7571 + +Len = 35272 +Msg = 6ab4e3213ae0ca6ba121e6b425b415b9a5ca4de4edd2d1b888fbab70d5f556e35ef8bbab64085f86bf77dafce5ab8b4348228a5fe5b2de8d1916f0e2b7a6403059665729f342fdc7ae98abebf3f74344c527ff725569a76bd0ff081e7cefa15703059fe30f170cf4168c43c7781fa783c7e19465657d961a55c0d96c4b59e12105dd7b20de0ef4d6a15c88d89bac1dcaf459327f3f7812614f614d144c6b685607f6d42a8baf1d35f50f646885250fdff496bf0908e2820a67e84b5da9ad9fbeb05990473c82efd9baadbebd5d12e48b70a0244beb4150db445fba9187a7ec20a90d99c01a10d389993f7d204cfc049610804a8d0e1fe39d8fcd84f611e2b846991ad5dd4ce02f0f39cc8bd97a6ad7c87b3d18179903a317ef3b90d46ce56cf629892ee5fa7a6c31445ccf300ee4c5e95adf7530b576f8130db0c675c3386ef901618b224e67f3b85ff8316d30f236c0546f4b228aff4a5790340e203c642817c8aad3da6e2e2b6b34a699d70a1d921612f381333f2601ad21cf501cfff00017276cf05682577b146b70efb7c1ec41b33b76ffacfc7385db688a74b2356460c3c5b0c9deb36b4d79ac5e1b5580e8ab5f78fdadd5eb6f3fa90c6c622a0649afe14b7d46b928f108649e7706f96d9738e2719273f531a195e1b67e03cc9925553a60dc4f310b71139be9c396ebb0835103cd3c3955f991f0490dc73ddf1783ba96add4cc8c8173d8e6364ab47272345c8b3504e73e69c8b9abba4ff9ada7e846bdd96da513b480be0f2d1549d8db31c34350f065f6a9cd56cd641e207c72de61768dafc30ecc1f2ddc752b3b631202ecf0c70b9bc5e2283177b43d9895a0ec738a71a30cc5f0d98d17b794745c402f415d415a71f53c62b07351b34b40589be4c22c50697f493547869a59da0b8c40285167e7d0cdde023d88e5881fc5c2711ce467bfc286ffbbc1f2c78157b71fbe0b93e1b99e94f1903f7d15c4fe6b07f883b8c9f6002039f36422e514d2a9203151ec56d8c5939c951e1b8b70cf7b4fb88108fbff09961f6698e09d1b322ab81f62246e4d2b120898412aef947a3dc1387f9aa4e2c730db9bc6f2979c61800f12a603d21fba585c211272e836e6f98600e3376da52135921a54217aa246f34c9185512a5658afc1b8f8ba1f60fdf7c59817a7fe52feef6f6cac35ee32c9cd982567d51dfbef5d5fe65bcc3c19a67ea78981b2fef048a4971834f69d56d2541a54b458541466ab5d32a36ee66ac9d854598b201688e69d35a6562c2c1549d2fba9d4a277aca5e1e4253969c5594f4bf3939cb8ed21c0226f9f799e4678168d62a92f7b2dc894471b45838482f11e20adbc1b432cc3be7a6d8a0415918522ce78de2dab1e721b252b1dea89c5371f9fa95e728a7a76c8ef58ef6159b54653dc64cf37f9f3b122c23b32d73e35353a0f100008528043c6c75856f7325bc392014f04b32e548e9167740eb06d7bf258ba092b4566e531a04b94482e682b03c88361060b12e80f505cfe38dedc3f765fe6bd66918d52493ec3354c6ec2cc0edbabc15ca56d583f47e90038ca5428ca39dc5339548e6f92887762eb1f09e7ecb5c1988eeb074b235f56a297db9cdef5cce4f42cf632e31467ae44aca90523a63c0d0d2543a86ac57eea0edc787e0aff0245c8c8df4157d7c1b20317757e29425ad649a817175d2c8dee698f0bc054f1c149f694788372e480c9c6b4e93ca0cbf666749fce1dcb6075aade38fb2b63d2f336a71927bfdd428a3cb50c6e063146f703b592d0825d6a1c669260b087e0aa7f5502dd55bf3ff9c953faa66da684bd47f6340a850eba516c6ab08e929c72814dee306a6b4941122355ba0a4ce24037cd871a8f55888a1d4cfd5e4b0931c26045495848cf268b94828c20c175830dbd71fd8fa7a8ba77d6a369c41e7d10774e4fada3fdeb1ec487cd3e51524e5195561ba2badce66a27855bf40c8f56ff3a545364391326f894f3ecb4784541137d0ab3bcc4b5776142325be75b26fcc7b37939b44112e77ea5e1c636bb23b49370e12194d4bac36771e38b8adc6cd73089c5e9e6e38098769c58450b4273119714e44d72137433445ca2d324b4e84f0165404b4149e7a0a92461507d36bdbfe8111a209da96a2dbfaa761bff0e23cd04eef3480f98ce67dfe303cfd2bf8a264e108c805fbd241aa103684b6110a3b7ffcde5c696fbbe55df8146ab530460ae90b94056fe772b63b2117e4b93e2f277bba91eae20983ed273a732ca482ecabf78b3408bc300066eba79c203ddad9873002ba7e9f397d64661fdd015f9644dc1cca79405f6803da581e63c5c86991b1595fb875e57210e19722a2774adcf731c553c42aedf1e596fcefef33cd8cd05c444c0c6f4965e6fb36ed73fd0ae97c338db1b546dc603e1336b69ef8d1972dde7d3226d95f775807c1dab210f42e3c57e26ebd129f2575d5b1ed0383592af2ce80bcb8328c18ec9dd474fd41bb2db0254fd55c2ccac41564eb0dbd71e8bad792eb46010943dd3d33cb36a60da46a9012329012e3d3ce95374e931d32e4b934c21968c1dc3b36a25022aa5ce3645724a5473961d64ea78dc35907b344f1c8a2d2978f5b09c6a7b489874a82516f961664da0bd9829fe1679f96f60026844baa5ae2443d407ac2fc264591a6d61a89bdc787b1da574bfeab3284c8946600c4a3b18601f8eecbfad1dd0a1a3af019b4b343ccb5f4f2d761d112af09d0821bc6378cff531e833ec1ee04313ecf2dd1a97f700572a9b3c6bd61c6723454e929c2ce33bab20e9c57baa9425789d3edd6ca7ac2ee8279389e63e5a48ac29229bf4ce04c549949988b478c0dd985e9be9dba4db2d46fd3efd2f7d553355f08b240b7063d399370165dfb1ecd53bd512e9adb60d653955a47e8dba9591e44392152a3b89cf61ae2844437ca17429adaac52b04c83e89d7cef54a1ea0cb22c93d569957fd1f6aa4170e29026522298c6c659db79720fd2ac34bacd00047d72b96d0a0eb472d7cbfd4a9d96bc347051b5eb24bf6ff735ff78b66fcf83d6fcb10a569871ff05f5fa769ff9bde404b83018a927cea8a9f75e52f3081c0ddaac521710a951c7f1fda05ddf7b78366976ce6f8ee7abbbf0c089db690854e6a5f8f06029c130a7cd4b68139787483bc918774afaf8b902622dfc6286d4eca6cf8ef66600549116fe5bbc2846c1c06caa29e51b7bbf891484ac4098eb1255d69dcaee9942f7f57e1bcb171c6baf5331932772518fc09e8acea7d0eef43522feb739438a500fd075ac06035084a483330aadc99da5905badb6cd37c530b1d67792568fb9b620a47605990b751045c2e9770935406b936325b368efcc2f1ce2d9c5af4d97e3cf03f7def089fa9d07b4bd7ee64ffa406e275b6b2763545ddacabda7afe7b5775f51938ea91941896ebb2778b1942ba2752ae734652d0e3b70006beed4f892df762fa19b3f33ea73ef58cffae78c45204ce031b5cec74a5671269cd1bafaa09a97f0ca9b0f6465db0e101f8c14b2e73859d9c355b0aca91d52afa916de586f27393776f4a615443d4f738e92b5827269209a249ab7579b2ea90e19149bbc6f03de863f4e9fe0f5f927f5a5a5468587213583de0b4f52a0d8c8b475518f7120befc4f7bef69320bbd3c08ed3a442695ff0d39481dd5285aca46554664362114c72705b57d7e92e5f7d03fddd83b001f511c2d0b4905331961b642f4b30c46cbaac34b847f6c8e2517a90ceff5978c83d5e6d180135c1d7d3d7d1018c49e5cb5e86573614baf8e49bb0af2ac28e63683ec01b95f132641e6cc2f4f1b2f58cd43ee823fc488a40db4509a839ad8a3986001d166f0bf004af68c31428449b833264bbde336ad06970556cc22248b5c2cd8c5fa4cdd7d76931cfc17acdcaa5908bd8e5d10203f33c4ad5c0460e1b78c5e2e96c0ed7de505a4da9a66f09cc7a7c88a05044929a5b7e12ccef7c24af390c701f2e9cb7a7c1a1abff593904d3820ed0c6e27e0ab770fa6f43e0ac8d8b615d1d378b9592bb9304f2d8c220e56625100c5285c993e399770a417b1e7037598191386d4393a02f4ccb3dc96ed50ecb48e34a206b55a441bc8acea81af63c8840752abbecdfe0fb41dd355669fb52dc80feb89bad7785cd9298f24fe74721556171165dd9a10361aad1c8515b80bac07e04a3ded7220ba6c1dcb658ce8a6e2aae2c033a52ff8fc8504efea28a8bcedf0b9e14d0317dc03411fd21ab17e8ac6eed4ff93c9e210e98fcfde0313f4517a2ee74125b03b12bdf4aa43c310a886288e781004a07300738748575e6c1d51c6ff12da56694e5d41033780ed0ee9318e2646b214cd35403128090c6aa5a6465afda71d5da2d42442d95229f710d3056e32cb5632b4bb4898deac3d963501a7bcb72eaab9d16f002a03849f7fdad88a5f30606cfcdb779211179c8b8fbec1ee529813e2e98971696cfe4961f5a17c28c7abb066b1b5fca5306f4476b5876992b33cf1567b3f8dc892461b01e72930794e0145e41fd8ad0a8d524e7f86436b2d65023185cd7806b62057641fc2b687f438ed6b6595c82b3a7e4d151690573926de746ee17ea78eba9dcedeec16fe05124eaccb5b91e8d9ad99cc22dc625776078620140a0d52884e7108c61762541a6bc5dbd046b2df4adc465c12215ab884580281ab6fd81d85ca2091c422335d4a59550704b776fff16f2a894d8607fef690ca159f738d5d09e652f6438ce86e1773629ae31e3cef5faebcb04f8ae89f4f3a43588ac59b85770b5ea2eec8102b04327523f5eb93120843538d92a08b1de0cd04c6d7c6614b7fa1ca2400643908832f131eb7b017fc6d95a55db1575dff7db194ed21069d0366521bf632d1d18b36c1b307a30c1a23024e28cd262fdfb858906a37d0f69d41dd94da95f09158377182db5b3240381a68b534485b8a8edd13d20b336226f08b47d26c8fc4336b71d5eaf2a5f00ce046f3637e4bdc07f9d2320ede7c7f18254427a36850283859dec672af6466b2b13d54e15d6422289f3c35af7a5f723aaa011f8054638700c1d2e5b2681300e20961efb7681dc85ced8f812c6568d61efd4671e197467b3d22029622933e590b8759364e14d539157320b70e06352525ad88d14fc7857f4df8c27a2bd742c9bf8987cb2dea26eef2beb449dcf320e9ff294cb0336b8d0da3c4b6e4669accfd4eae8210cf5e8f64752e9ebc11b2d88efc0f068134d9e9a0df0434674b64394e5954bc99baf87b440d51648034abb8aebcad5ae6bcb917c36035ef9542aa1447601aabe8793e76d83bb58a38ce643da3b1a29e33438f840fd7e82ce104f2ea72e37ee46f72a71ecb80c994384772f4186b8d650951a3dac0968990ccdad5384b63efdaa13fa8bf886d1c0711283e68774aac23db7fbc78903c98afcb6ca76a4b51ec132058d9e589511b5755e94d074aefad7f1c162fe9e92a93de6f03001d0d4e02125f26b13d58ed46097913155d0dcb0fbb6dcd84ab55f119a12a6675acebb8b04cd051a50371922a91fd3e3dd62a6d218d230e41394110889c7fef5eb66112754706324bf46dd0478544b30d0f3b26a158ee40ec1045197f24e20641a627fbdf8573711c7c98381b57f22a3964bab7fda3221debccdc7c5bdef353c5189ac53d8caa767cf8ab2a248e87fc19732371a4f060edd6db71a9ad2f26503f7a241f4dc10dbb0414f136e19d78b143c70fe425c52d4923a8af31e199fd7437376e5a5ec73fc7384e14eed10946e23ebcca9ffe95d9a858c0df95a7b3eb4832fcd4170f039323900080a2716664f760d10e059de70893fcc09d555de16234c926efc5cd0aba4891d8bef25119756960b024a5923d3c94760472e172c704d250423bf7174117beb4334a6eeeb6dad0a4b6b9006a0ce8125b28cada94b945a96edb232b8c4b3dee7dac9d78a8a31795a37125a693ea9d96228a3fa1225ca7127b6e4fc38a9d8f6064a132a02d82ae50f36c14f88e3abfa852c53bc5aa05aba61c581c6fa09caebcffbda455dbba216b0af3e176d781d0c1625639b8aa68b5ecb83513704cecfe4cb56e6d3a31ddf37c50c525b20e647369e7b9c41a91ea785ee581bf860de300980c1fe7adce52a6ed6b4c5c3a71371a1a495c653bfeff45650ada9b01623358378a5ece211fbcbe36c0f5ff60ce9e375b0dda97cd503bbfa7be8c1082c83257a3b6b76b44a470ac00e85e89d574fe4d94aba0c62 +MD = 242b1faa8eaa0aab294f2c19ebac80eae2b8a0003eda813bab309ae11616f46d8b7802ccffac879565eef09252ca7f4f + +Len = 36112 +Msg = bd925addad604f1ae1407b796422d799a0d5cadcc5d8a7d46f6d78f883eefa9c5964e82021567c677fdf348a7903d2ce9343a6d4386f0f105cbc407c6017408e36b83467c5f9e14d8f696d5b911c65776a460585c008b3dae08accf4a44aa3689ab4c71b62f285b55805ae5374159b7d6e056d57254b991b41ffa5c617312c12ce8028a5c0e8718823dc80dae99579c6e4a969b22edfcbb9c842525c8174e2741a45df6ba784abac38166a58b944093b17597efea56d519ebd7c5b1daabbce77c52b75d7df6e3d0bdfdaf535accc52c44e3e36a3509c31b068d449705aadf601195971502f4d2e8c6050a7da8ad25c4ad0801809f71575d91073a2bf58f264fb5cf85b3d61ca871602a10bad1b0130b3e646ac9964802500ff80f1716d33204ed72fbc083b8c4f930ff5a61727fed5e9d8b87bb95e84470d7b24bbee611830e0d2271b18863c8eeacd730281757453d2ee000cd2acc9e5e7cd878a9dfc489e9b950700d509814d038544a651ce09b3587043e74d17f806783dd0e5e8056c726667f8f3a78e0493c67e8f1af1fa65fc62a5ac959067b9b3a712285536462bb22892227df6db6c681b027de7c7c13136d7d6609d0564b3f35c96b661f0852e68cb5cac252aba62d4ea5736943deb1569a14b8a8713d58fce7f0fa3917c8b1c9b360ebf74abf08ee01bc6e1a9b93fb89ea74c50dc2184f44cf9c6166d43209e5451ef82f1e24897939697a7aea586c3ddd121da2399378b76b003387ead0b5c9a04491e24358926f64312af2c6888dd2c071151e4e2b7fc538d0e304b2316fd753762ba950d7ae20f0a7f22ab6a0daf953165dda864cceeeb782e275c0b072aedd2847fcdd3e574e8d42527b113dde11f3766a5f5873d09475aac453acea78a0bbdf59553ed908389874de7c8cbbf1ad20159d256b3d4f66e19d0b16cd5bec6d6e1fd23afc543b8f80d3f8977fa7d02b778898b5050575d689fe2947a8714855724e6516ac1c8bb3f4c43364708dd42d5823df96dc68fe53ed22a15ed4b7070946ff6490b4be633662ea116be5da8823508bc44347d4437f79cf05d4c8b9c2e97ab77301aca64c8739aa0506661a569ddf34f932dde3efb9be47b931fae5e6868beaf311fa60b237077890dc77d9ea0d7293e0ee14f44d8339214e0ef1c7fc60d92e771a346a3ec64afa474671759cf2b94d1dfd7392076c68d036c423cc7ef900d661b2e14f4ca582939aed099a09ddf1b502b9705987e5cbf905ea378fd8cf81976554677c56653cd90e28a6939b2fda5021daa197598fd0f03df9737eb444e9d5d4775d7df685d83f1391bf1ecb78c1c30da97df7e6bb265a316a8e257c09980641b429d0b777e33a3db0d9783549567228de6bd7da082a9b92c5ddf0aa8e1acd3f6352f0f3bbfc5efefe8c5c4301f6e205c201d38de76c38d483e97cca32f08f202d7f6b35e27211d9d32e279f43219726fcc6679ce959c6793d47264598a7c0867af5ac185bf30750f75566847d6505fef72000618e71a8f35a6d99c73faf05f4d46c4ff5a8ed83e6a38885ad214fb30049b53a76374264c553d323a99874c3ddb229a37859c02c2d904e2163df3022ed5cec7265745a9e81b1fe607723a78eb39cd452faef197478260cb662f7c4d9e8b93c44a9d6189a9b0d65ecba71a5db190cf2eb07c967d168dd4ab1050b6c4cb4d72b2daddd0b0d83cea014edf2fe1d608aebc8197929e7723e8ebdd49a950fc44f4f99fbe9b04bce6e13657c382eda4c8f4566ca8ede0b16c25f195c25dd77898a00161e9c96f9fd74567b0fb1a6a61f928663757af2d0e8f12260062db428870fe32e70662d8c7379dfb1f2e003e56c2d353ab4be16cd4b438f2e5d22a7a74f497f5fbbc6f267d2d725a6d043a53cb4c7c85902d8b854c051dbe0eba5266844ef2b063b3f64309e14bec6227d28f08beab64aea4b35fbea74bf041c05ced00a398cde8940216b37cb018c53ccfdc5441e958cc5963e472c54af2478f4ff92f1e0fb252079887c326294960ee3a21f9fdbcc9b4f3a2fbaf85a02ae8cd33715ae4e1c969b3c27e80063fe4f9e21a463d19af1f2c1b798cbf0fd702eb23103cc9209578f54187e33445795259c3773269be47c2fd79ee80e88c77e01a38ef44c4f8b429bd58f09e250a60fb48375acfc4130e1aefb40cbd7324062e3bb5d7709394c5438aa103989b7e7a478de6ca0498418b90c975d82ca8fe0e531741d1a87d1d502e24c4cab7e0c9529ff27acfb92b6f468a55635cb5ce4316b77685e4d4cbbbde5153684de43b126d693d9871d6c7c6c87159279f412e1aa7c2202818ddc695f616df359308f381550e37eab944b26e98ae9e68a9b611ac48dcdcd375a9b3d420e48fd5a409514091f7a818aee9348e3ea7eccf83febd21816d732e0421dd9fe4242ced88d19d74a98b58ca58ae974e43c60a0434ff7ba0daddaee0cc2d8b1fcb3c7e2847461f4825310ea7c07b21d72e72c2aec4a39251dc945392d5b6047c5c954d2bea521ee28e539457ed391c518712da753cd04c5d0efb2aeb28a291dd209761a179dce46a6c58b083e7cecee4d7101b03a370efecf878fd94ccdb7a6a9daa8230facbb70945a82bd3b72480b6a4d34dfd016ac42523749234c947074d5d3777807709e0e6a3abccee642279f279c3380e5ea613311658b27428d080abe8a4093af77da62b0dc95d7df6af03bedb48a3dcc30c2438598a25fcf05d2cafc45b0006830f53fd0c6aa42776b5644254ca580f37843e617574b37329d5547e7bc2248b22a72e8627f66b95eb1be5a86bb11d50c3f6aad4f17c2482dc22404395433c72dc2d7eeee6d5786e5dc9ce15a965bb476e4ab1ba550c3fd0102b382498451262b9898c5dd16f935bd5a667b3944efa9b4068993b2a8bcd06cdd884490e306c04c2a4a0fa712c8604599cf7aab6d5a1f44138aa7ef76196cb1b116bdb7e6b1300fe6401ed4d751810f492c82297607afc7aa32eac44f562c803be36027160cffd76b2f95fedb01028ab712042bd594b58f28f6bec9ab1f9a48cc72ee56e7667a33077ce78da4737f3881f4832b226ddb3b1e6aa677ffc2308bf1498adfd15a59c3699c95f9ba0551a9285881bfe31f8b3c08e33447e3ea79ca28ebf81a6a54f8d9002323db8253244d18b272527e0630026714eac1ce04e07401bea8af28e2e2144985139ba3c951a4e1a6f77b79de843eb7543c7e348e0f29ea460f068390afe5c456d7c284f47431018a63a36cf4d24188459bc5adf2504c6126ada910cabccdfefd02d8ac511681f6f15952add5b4ab485dab4090de4e6bf4b5070f370d834d680c0756906b931840504b11d31da5ec75f0cd6793be73f91395adc18ce5bdd48df867c4b7a074546c4bbb5963292075afc384b31cff4b845c3d043888cfa713df46a69bb89c54d6d9281ca1e484bee7343a53ab933d4f9e1d0f9d0c9147e95bea7b3643e9bb9f00259a0183cdbccbb1d1c9dcc9acd4fa9704a1ea865ccaef3d1e0ab975e18acd70c005ec67853de155d6f66295b072c70f71887f6e41e543381879828a26867aa936f04fd5a1949a43d244978844835f880227ce0cc7136fdd384c33f92f3af10a08ed9e46b93d511c4248ee29ef730e61250458ea72c1ef7d1bf7405b7214fb1394527a4322a4904fa557d8e307ee6e5b68a2929fcb9d2cc8221f3a1985b0d36697c346437466f24e8a05ea4c2441f9b73b871d9547f1a22ee90873cbe07b347351b4a4d03500d1a95ed784edcb1a2b051c266c536e6c0a21ef579feaf8f078ba70aaf871daeec8d0a2514b2072d39cd58904d162a568af31939110ef559d2abc631ab390dcad4264d2e7af8ca20aa9a910a71f3b83742bde742979518cfdb4e9a78888b5c0b8d8d68f2f249aef2bebe0319198569f1aeaa91fa53ba9e57ec1d2cc88ca691d8de696258c4cd3a0b3de2b6a38cf4c4ec97601e488da6115bcbc0830701b2349b9063444737abf6d4efadb39113675291c48796138c80f84241dea71f2dd6cebb6b2215a9940c6ab39cc801ccf6069946ffc802459971dc74161fa1f6593be6a0374fdd6523171f110bdaa83b7dfa23740ecb69c5fca14459122d7876cc0904b2bc91a5632cf59c57058cb1c5f06b7884ba37d37bfd37b859fdad3486d067b059c291748bf7cd69eb5286235496801edccbb4484fe45cc0dc9e4ade0dab7d73fd10f652c5ccc80f37ba6f06cfb8629fe609ecd129f837e54abeaa7df5a674d4066f6947f9f20e15a105ef631d9e3983093c8475f182f1ae0b2575192509745cdca7925c0fb2c60393fab04128902c50ac2b273d8fcab1a4879b54bb851ca491e7801898ef541862746257a8d7d66390399f7b2feb18a04d26e8ee69fd272dfd8fc2a40481202db8ac058fa012b707ca17602856eeb4e63451d3ed2d757137283d34dda6ae5d2d90a3abfe32c17c4087ae36d7b77ee5aade6e26f60fd543e999579f6c885c55406fc01c4c65cd6e354e66e9305c84f514d5e7a7b41605e56bd847cbf8b2744e8cdf6d1f22421cd20fa7a740da4ce92a4da0221fcc4aed9fe66d73802a2adf913c67127e28cf97f3f51ad9047e8f93cd7dc78955e9b376b982e14586aafa8366769015ff05162618103064fdc32e6c25cbd28213b15a867a66ba23a41f2a4a1462e0df6b611fb2888870b0f352305b7c604a771fcc46062bbb8377a431c01be52ae1d889e6f0218c846325aed29d471864b7cf42e37fdf14a8c1a84c89c6dd1ff31b68233a935d6c2c8f2cf5ec7d1a42fe9ff2449e0ef77d56fe1e65cf437a0be815f8ff05104c70a97e2b9248d9bb42568c48eda4fa38aeecc141b6ab40d9f12e57eee7f06dd8e023b88c4b8db81260950539059e4b89ee93937909c3c4e219f069b4a0a2b4e803c1c3b5e9632307e4e3932d53330ad18773fb2e24c2d77dca54d4b0f5c4ed6322ac2910347421821567bc8ca00c3efabfb381c8d04e81924e821f4cadfe1e33850c7203f365ba6b3d4a0bbeb4d0efebdf7cadafd50fcb09eba3d2ef8ff7513f740824f8f0e1f6aaa2b3052b5728258c2ef5084bfbafbccaeadf750065588d6f37c8c956f18ede278ccb343b51bce9c5f64719050ad35dbe935d91e9f5c8dbab1575e885bf1479cb45ba1f576933427e7d996843c925b4cb2d46ad1108f042db58370aed221cd07c14a74ee56936399f0d147e6e014dccda02c152e06578cae74635b6f6e14ee92340ba4a4f176cd510ecdfe2ef7af3aad458f707bed6077bb728987408c651cea9121d9afb3b7e1eb962241c2cfcbe589f7810541321455e344587cc8b97ce87f4d2f5c6539f131c83b908b58f4f56dd25aa33c1470fdc7a44e72b47e71d6c1aeec86d57bd0ad4d85437b5347f3a64414c3588d7c26871d7d054ac6c8420d4917e3baad4a3436859162653216487908cfe63381dedf4af7ec1d531c4ca68adf38b75d7c56c1379a7afcc0905a5fc81c7227a6b1c2e7a3b76fdb2e2d622bca049ffbc1ab28042accb09720067ac62e0faa0c3485aeec4c0c76e33e82af2e5559ac1599b244798abcc0a5f60cfe080542b6086f8619698e47afba06b48a3ac73eeb99483a329dd1eb29cdd50c5a9208664490ba3b98cbf4f968b4092b99ed7a34ecfb4fab58ed8ac86a632f8d26f081dac45996fe83a01aa23085c86044a2e8cc0eb0327e4de52fe4f0fa7817d9a01c20c3c79877806259d2a593c6fb10e7bd74ff5c733b78113bc15c184134f92d31d8a14f411f15af5cfb16628744854842b00d54946b6dfe38de0a311d5cfc046d531b65036d99d37e9c31768bd52831231dd73d1866a608a19b99d96f0858a2293060ad51dba37b492655443735702ed90edb7a61e5a6dcf09a7975a8cf9592efe13f8cdef1b903473a10503bedd3bddf1388a12340f6c7b05b379a6cfb49633bf5f697ed385107f347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c7c05634db191781b58a179ca7ce4e428bf4296f6f11cf648e1d5702f73912594f33ce067a9cf4cfaaece65a7fe152db9cdd5a08a1fdae9e8930fd6bd7f438aef422d7286d6ae7a0da557803a9e2b08d187a632c595feeaa03aa85f263e1eb63511e0fff060b8681de643b0ca85addf3795bc35f07c10603a7ea9f2b0d7a9112e075b70ee6e757ff1189adfa1da2319b49e1f8f53fb98b37c091976a5736c04a2cda8aec8286c2753e465f405c6161e104ad82a363b1f4a2f8000d54b39f0f5580bcfa0c6b725c909f2abd73f710d561343eeece1632c8f1b8e66f6eb52bc4d1968d62d304328cbdce9747097029029842e69bf9b9c48e907d954c1cce55975ad8cc73f4df3fe979472c8a754a127ff2db6528aae0e +MD = 490e60e8188be71a0739a15110bbfc5fa44a3f740d647b8ded975e56f008cc1bce9f09fb6420dfcf6f7bccd90c7d4691 + +Len = 36952 +Msg = a56f09c7a0ce4641d6799d7bb47cf684990ec1e08871458c211a353ccf1285e7429c7b8520180918f7275ae97710ab14de635c46b3dc47c6b78950b2192f3d8ce9ebc9f5cf15f3b7fd699c096269510f20fd66a1415d444da530039f3ff63c9f82a3189c158cad28ce878b64de4e917e492506779abde52ad457778aab2c272bf40d93045b47df7354c94e81548913684023645226c3d1642b46d4fbc49ca93529715fb4070c309e75770ee82ae07ed5ed3fa9b94c39b0039144417af20d68c70817a73483a448b31bd8f222ca1c7bcd38c1fd3577e52c10f09be6909d460ce87946910d35d7d0b92d3523b69a05b15909f0874d0c91eb912f91ecc42d103ea1644745c6876c70b993d6c82c0462c9804815708974039591366f7b9f0a33a6f9b163ece7e02dcfba35030a0d6efd6a4bdd78df711704d315ed7dbaa89d77ebf849dfaef8a7e096c4fb0411e0429c3dc0b061fd8e5d5b4d273c02d2674ca4b5a61206b282464e6cdfcd20042de708e9eaaa18f267afd2aace0b48eb648081ae0cf51f210d243ffa1493a10b7dc50917ceb1e4e584732f921342952b28a2d77c31da71221fa97be86a35cd505644666f76ae0ffe6e133baffcc932bd3a186ec71daa45de423dc9ddea9bedf843cce998e98adf67acf5bea6948867c7224c0e38d94be37dfd48f2819bad482ec9c5583b2f2b9d45c6838022e0677b7269a47f766ca79326d832bf7d8554281872977cff517b90c3452348c9ea4fb8e5968a882adea59d015c63f579b076d3dec5aa1d8d56610206b03fdf43b92664493165f3fc382c483710445f1c25fc92a94a67038c46c439398f3e0e3955d6c8c5c29d86938126def07d3bc40febcfada18a34f5a5298e7e826b889b53c7452c82d29a0a98c17aa55329b1ebfa0ad56ced0c7abc8008a61909ca854e38165dd7a7e8c346b20010e6899e0f9d838bf817b658a220c4eaf452f7379df1914a04135d8d82048a47d0e8b964bba255751ff523f712e91ad860717437384a056c2426cc483e0ac89da2f50c011fc216d0324f5d7034df29d9d2bda754be233d82a4591ba16021130b6e53aaffa1c56fa4186d8b4b6fca9af5327fb9159742e0976cf473204e1113981c4bbae6ab7207fabb97d6112a7114346800d2022b6f97b0643ffb4e71a2714c9425653ca49287d902156649cf9d409f5c8518a4e2740ad77482dcb2319cd52fbe29d28bf4ed964ad52e627bc516c53df759b6822518e01384043dd5f7c6e64a829f2a5a024bdd541c2cf23074a44d171fc3d2255a22c26d7c0e473d29e94da4c9ce9432387403ffbf5540ee440f7d33bd0a9513eb5b57eb44e8217431cdb24579ff399afd2fb153a7f271409d1eff9bba7726d63e8b4898c4daf502753abb367c7a401ab9468f59ba4ab0abe79b7b57fc52adf6bd7a3c79e52ce86d5ff8137eb887d23ad57f4418e1a723b98a4c986d6de354f9ceefdc988d25243f55ce6025176e1783b7a37998054ff2f1eef9ffe7f4714169dbb3d0fca50ed1ffc1864b348076367cc87ad5e20c8b46db7b6c58cc78469ccd4b8fbfad162f16360ae67bb2dae858ae70cb01fde0a347009a6c4a25e3a88eae864851b4c6d01c6b98b799a70f0ca49f1860a4f167df1ce7b1c07df91ce03f93f4a92f189f390b26d3c04c1c062a43d926ff67c78b87ee192a319a500b35d604fd7901e188b20af023cb3d17a78a5ce40471f28632e2e41c6b87493398f17b89097f6e176882414ff09e13a3da741846187dec364639277ade8a31a8ab5a58ab80841fc329f2d9cda20377c5872f9f89ccedfee0aed4debae901fbba2cba92f1ca50bcedb24afaf2a1bf1187960418348788cf8b52fb3265f6b64e6e035754e44fabec9bebd2cb45559d88f0ef3babd0b015083f1af64b026c6fd3ce187ac40a775d57d7bcd1754e276485087b1c82e4b15d5004ee0c5019b3f532e1536a0aeeab2da6a80d911f957ddbafd820eec2f8f12850e3b6876933331012af9d714f1551e58117c658f2a3c0ccaf67c7fb9695d83dafe35aadc0d753871b41dcd5bb09d34b8f2acf6f16ff59fd2cbe59892442ce66160dc2c77a8d7e24f69efadf7551972879eb101eb231ae36cfe3bce194873b692d67d71cc2dd19ad4bceddd7a6750743e66272acefc2294140e0da4b0fec870f9bfc7ff6be508debc1da6f0575fd89667f96db63f43931e526bd990ebdfa1a2009d1a39b966d42a601c996b00b728757ec8f3489ea1e2de92980e374c5385d641ef02c5473bca0a6b3a33c228f5c68dfd4556667f8fa8716f2339fc34f2eb6a3836000697dc610b27e7148a12a4194c6e0f158454753a63429ddb54485658ea4df290922db12f8940a3aa27604ab73d4b76af16bfeb4f20b76870c3f8d644e30db542dc7b629c112000632e944216dd101c81b2046a2d3627f388efc8fb35c0f1fe7569f3591d4f508dde041132cea846813bdad47a7b102eff822c2b4db220952ed6bf381d49704c9c894c8985352b69254be5a284af4b46ccfb0db236306e51c6b540bc1797409ecce36c4fc1e0d2f2793086f1214043e9ec6218d05d3726d276bf92f1e09d2ca18f8ae7e661583b7d0d682342c8b4a682fe45b2182b4cd6718f442a7c00b1911f64de43effc11c16352714f19f392cfcc43247dfc18d7f9c9a0f17bace07b0a42ed5c04ceea94113fd8da6ed92a613c008b6cd0eebe6f0d453c360b27086014b67982bef5c555878d01120712e58687ea07ad6f7274788d7eb1805d5d00f73d0499f0b70714ecb0b58b96ac59ad991fc378648e39e39af6c0b16ee6c132a6efa7ef14a17541b00953a8f6d31ffb1f80373e00d187843cd5d5bc603be645f5a90ab96ce2c2e4461dd219b0ffd8566035afc920bdfdcee4a70822f2d15e937a05b7b9781f7265254adb3e4397053821ccb7ba42c7ff2c18e6e295952b7ca39a62393fb49c065cc43cb9872d4d3928daa1c981c5642e344011ef74d5bed30eed5af9eca10ce133a9500794dc66e690d1516fa04736ed7ff0b4a951231ff43dc95c9420cbd6a5724b214fe7ef989018cc4814a636a4cf57b15b8aab0ba352a8d4f3727ca38dc591302cfce0c536c829121252f422324663f8531df30e0d70e8969c2f60c696c428fedf992ffbe5f13a593c952a8863e52d3c57ddc998a2c16564d3257d838623a1edb59f15f21a9dc4f82375a9d7be1e0c03b6448f3a07d6b7e614ff1388d05684a34b89435639306175635f02aea56388d51aecb47091234890fe16d33509ef59a60de22886e65b985788cbc55bbe683c26e220e9caf339afdbeaf72d169750896c793446129671c224e046528d6d6e9e8f98ab9fa7928c564d582a91bc0d2cac7d19fa2c77ce05875416494ab237191865cac74694f38dc45be22ba183dfd63b4e7c9e3c24f1a9406ba76f0e58bfea424fe50e5f219ad0729e0574cd1c93dfae66fdab05a8a5bf95e1f0022def4c4494a4740b79cbfcd7097a3e9074c4adcb7e3d39bb09816ecaf04d9cbd19e480ca9819f4390702ae13c176f9f9593aa20c33579d18c83d915dd80519fa62e6d1eeb506e20197440309631ac429baecf524663cb47eb24bc1dac5bee4349954d4239401ca0f9b2ea04a46ec29ac4a3a3b967f62fc47681a74e431c178161dbcec0b8d8118bd83211a38e551a6fb57c0c9f4f750f0fd5a483eecb4b361f9609dadf92a0b6a960fb9b567d6f1a891941f44a2668d2f1af9536466b71b2e6922558e9ef2071c13714726599422bb096f842031358e032ac5aaa9e4c15f39efa3a2f24f6e1ab9d05887c180958b6abd4abde123ecca19a75fdc53e95bf610f794d49d9d06acd03735ca3b7f63921437c61afbfd04c7df0b286716d6ff76400b5688d4fa4433dbc289acd89876bd54036239f52f160dcfe0afb95740246643b5692e3d09bf56590cd4ae4d7e5783b6aa9f89512c891268a2666199b7533c98605d433a2dd07ac460a72cfe937e8ba887ee87a497e66c35daecee42af047fbaa6a35650e910179a8861c7607a641b9645dfb343d3a681b3f493ce0699d08626f2cbd625ce06c367cea4fc1795a0da2c4ec3aac36251d96f89fb7f4a0a200669cf37410d4f1ce4a8bdd1498867ad3dc71d6acca7e670f9d4f5947081627b770fb696358beedb21d9d0872e3782e1ccf33c159775c27c6960d1ff4051455b4e65234912261fb9d177a13718a95a06fe3d1564a99178dc9ebfa98c7d1e2537f326afc0657064419a0e9a5197526f55480153c8619f8c3a002de6dc755c84aa0ba0b6acbddf5efad20b366738d7258530ec51b15e047eed3458146fd790e629fe8fc25e79e7625e2ffa00086b8c3eff5f5aa9d00d54c39ea1aabc96f26fbc2052307d66281d10e3ea578185adf5fe2c19d8c684edf4eca6eeb23a12742d8935ad2f225456d4dd14b7a0359f8eb8f5a406f332407e897c9e71fb2742db6edfc245f86b9974c339791e7096867c29b7ff8d1667a34d76d5fdb1e20eb876b8226ed318b3b6005cb87975251f0af4ecb78732cef11dc9419b4d45035ad3f48df393cb0c952a8805dcae524a497d975676e39e994930706e2ef591db8635d344c5c9a4408a778a5318703c6ca05ec21b688d06e1ea5bd171238f3ed73b4e71910b78e550fe2d75c8fe77a9e8be3f03901efc22554f107aef0b928282c49e7de7473a04ba7aace8dbe12d016afd9eea590ca9774001fecb3c3978336acc9646bc0b8588e98a76420072f9095fd8eec4dab42d5c5e8d7750fd4fd897fbbdd67a83cad3f86aa82a1fdb2663f823eabf5199a7f067fd5c0a9a86b11c46c202df77d2f7bdc9ca4e38d0c07e167473ad70ef1a4a8b10a90829067cffbbb63a5601cd2e349b736507131364dc58f4bb9bb41bd13e55fcedec632344ae4f6cd101ede8f9e4059be74d59461ce3d40f683ff95652d6097338a3498f822f4fe132a11469ca988499ad9b7be76d06e01b05f4a13d13b3ee1a15a73c999a0525a9bbbdf5be14c480f3447bdb85e9c835ae11744c1e984aac580182ccd010c2792cf8b302646cea934f2869289ff7aa2d3f17196a99652cacc388a06ad16ae9a2f1661adadb479d23f3e5ddc3943b1f4f54936e8d3beebc67d3179aa70c2cdd4b8d707fdfa1193ebb87f9544d1118ba0474f2ee1454a98c761d3acbf1eecb3fcb57c43c91547651e281cf67158504ece526c202a0923a1f5fe87edeec07ca63bae6cdeb9043c3791167f480cd6ea43a89c08d56b272f4e77dfb302df5c59efb92c0fa074d1da516c0a0f53bc54c6b253af8c164ba558e77689c1b439fd6dd69db6cd50a38407fad88c34df2ad8cce3fa135ea9728d85b3198617cba4a89fa210d50eb8ed23ad7bfd2556b3fd6de41dc34ee85689e79efb895c1f0fca67d79d39103a9efbb8b31c025cdd98de18f6aad6ea91e738b98a07ed963f485041fd0d41efb9cb744a01250fba325675e3ead05c6fc022260d331f6eb9e13de13ffa3b4ffaf30701e27fde4ec6bbb569d5a8d87d63dfd1fcea808b344f6cb72367b46f8cba51194a87158fe508e17d63f6190a605055ba6159599266e0487ebec314f11fb639cbf641ab7ffc080c750a4f23ad2ebd8aa6fe60a67e2cf2dc5a5b5b0208317614e3ae1829f7bc4fa56607e7af0b0e33e65c7b0a4f95af0f9213a23567fdea834b2a1915773f4c64121801c7a66a2939d1a67f5c3d2017bed1703a5b291871644468e03f7d9fd5cfbd53a1f5ee13a757b34ab26056668c88023accd532a1efa16965aa9f245f7f190cdf8f7b714eaf15f411bd1d83b135f38b39ffa968e08bc321e8203b52c671c969837261156269fcfcc3489bad473a89d5357ce1b51d6e51d3bbea1df01dd4673b08f2adc499fe933328fae3ba71c4d248f6ea85009fbfd3e9a4af4de7accf7bea37b8696539966202077cfc9477fb554c43f29b31afa7d2ca6c17d11dbb8b8eded66c9ce08b58f2cf2a75ee21a1069a4ae63c2d2f954ed5dedbccb37c9230277eadb64f1dd76dca03578ec24b370d29a8a56f42e499db648db873fbeb79e5cf34863c890365fd7307576f7ff8803a8bd04933e3370377073fcdb7af51b7d20d6827a9527c7c2f7342f2bf2d12c5b347289a3217101a49475ce03dd9989520698059a3b270652b541bef27d5804ea0e51a5f11e657277aab4cbab080a75bf76be5e4d2b2c5691a9dfc184e7d2a632aed0d627b58f47231bc7723b6ad66517e9cff90e05964ce24d74c33dd30f84c79e869691676d043970046e2f767bdbede83362572b035dc708972097bf3d250b45e953d8a47d1e2d4011fc11db694ec3ea9f36a33bd20dd273bd862d1d0a0b903d5fba680d3e0960f476b86cda2d321c7949c28c88a0e177076e50686ce4acd8fd7026ba023e6a9705893fab13462a6a1ce9b27dc1fe5d374c001bc43f5b8d580eb1256913ec96120befde5717329c3f3df562f15828f595aa4944db04ed318fe9a932dfc2c73074701130fb56811bfe54d37081bbdf2f14ba7068274e081e030 +MD = 3e8df9e44a1f385dd8294121beec40987944d11137308eb2b446ab9f17d1fa789048c28752c5efdb1f3a445989eeacdf + +Len = 37792 +Msg = a47ccfb12a50584521974772f2607c63aad38e28ac181ab6a8745b2fc7b5fb6428d1299990caec885dd4b7a8bcba3dae1c7e8654e340435a5f605fcbffe7d682c323caecf192d4100a0298ccfcf59c61994a5a32481a93c8fae1e71a60dea30b5cbcda35b571b7e50e67116619d9408308812f474470b307623d1ba353610908dae280f9432f3d10534b4bff7b2ed21c5069301d40084a1f7dbc24ee3e3ab08027dee4c205940f98bff86d1e8abcf9355b4a823ba2ab011935a82a838a2f417b2af82f176267d5853cb5a04cae4b5ed4106e5029d32180fc714754eba0096402cb778981c27236dfb1c90c104fa2a804571cc0703c326ed019e3cbade68fc01bf2a519878d7bdbaf057dd8f2d58a80ca189bfa9744a6749e14c2b751c68bfed187c808b12c4b6cfd22192d7aa8cb8e303b3427265244396d4c2c3f5fa7c3c52972297d8705aa90cfefe53231302d793da92f6fa5d0d56645a86b8b60f101be2d9b10a1928160ef2f5428109ed578eaf948d4f99d2521a22e10c6c4dc0b0b91e4ebc49c5908343224392cee4a0073886d016aee96b9f096316c8412595fa9e556488f956403ef01b68637f5bb17e7fca0bd3b7516f40ae955a4ee9c6154a5628c9bb7b43cd85903ee23924c7b849ced9a628db7a73e3744a3a14c8b7b52c6b18dcd852368f13ae1d3f9851d12ad5a0464d9a9dcd0ff3e4f2149e60630c1d37a61c4410770b45a436eee578d06fce9e9050bd70b1a9fe8b1d9850336060a9564116a338bdd8b81cfc5eb52c6e1d7104385df5f6c0b86fd13d33eec438793d418a4a6a3d436dd7630e3d9bcf02aa898baed3c88282d1c451c165aea543bc5573e225fd80d0312020ccd9ede326ad64af7440c9b6708ca8775aac34391a908e87d947f1b5ccd92ed0c8d2400b528c9eca29236e05022f68dc5975f3f2359c54d7d01edb4e91ac4ffd729516aa1ece94663e0a29f0c050a1db5e5182832d3624fe77191ebdd7512ff16ac0f631d3f9e22e0353820c2396c00ed9dd444e5a049b663ec53076063e3b7701b453451a75046c499e0aa9b4486fe14c77ddd6547e04a987b1b52996ea0ed8e80db2666ae677bb5148287bfb0beded269fa39da5091d32f25d112b11daf6a17e2b87f84dc4b895baf06fd55057e6ad18d33a06b44c318cff35d90d0f879f6b44ac687d2b864386071545586c92d68b63a105c40a9dde221eba7141c8866580dbfec8879ca1b50696354d7798632a12c7979b4820a49f9cd1898e6c054df5ac94912c8a19ad698218befca57c3f7ddd95156ef59ec6e257a7f164de2e54ac290f0209070b1fed92df30b784709e3e365ca8f56ecd9b42ed02a0a93abc110590cbdff281196fcdb38a3912772df5e7d79ec0c31645883db79205dfe42729ae7e3b795d8aad13666e8a16a20ffcdd071bdc0b6c8e8f243f51a69f5d7cf804f34bde7cbe864eb1642e5f77cab175ba188d84d7362a12d5c445e0ebc657c71960743538a9f666b0336d8adb10fe2123a8a739b2c48b7943790ea1699f26fcfd92a1c05b847d9d9650c69c9f0968779013f35b3cac351ac3aa1698973c4d0217f63f1053e26e4bea38a3f5520862f195f6fc79c331997ffce3f816f3424c8f0f07b6a590584b0a0277903582b280178bde1d05e5192b2145c31dad1c35a7fc3933a2e0bf4ab640a58a05cdbf8c42620815ef9020a78ca734a401db608ae1c22d267e623f2e229819ec9f3e56fa2c59915aeea8f481106a50134f227eb68c79514cc39a7e970278f61ba6f7e78090769df994a0df2a78f31ead5002b54cfaaa5c22fd0a1c09e85bb093c7aaefb43141a49e7c185f0808d9f6ceaf0ca2b2cead9425952185fb46c8dfe17b97ee0961334b95ff9fe2ae42778ee3d690c58c7b2bafd126815aefa038ea913d6f50f4b2c3d99ca9780871d8542da9414fac3e828cf5b21ba9f94b7734570f8791c71a989bf50f04613f272d08897b8999b55d774a0c550efbefc35e33bbc8d49f9ecfa4f414699acc0502a30cf8d719ff8f4dbbfb5a165b07acbba7cf6f69bef976984a94ce38d718e8a8ecca12486ce17893e31975829a4dcea8f650084ea12fbd191bd678f933e8688e6cd85c4c1d002fd46f1cd536474eb41fcc7e1d0425b2f0a67b31ab275bbae327a5a04d5e84ac1363c28dff9dec7b0b848ca1f406b723afe4eb4edb4f98f1070919ca5bfc4e75a1e68fd56b15e463138bd95443e2cfe249390e869fde862b42b74bbf0ea1d4cd79c1199b8e5ae9978a7a151d8314fa8f5b3747615f509dea0496cde6dbfbb243f97802390fc94678def3d2561819a17b6454186790526a9deb4bf2da5a465159bf9fec4635ed95876f6d93a6995d6f36f3140421e93056b7652b5d11f02e5c7f2a9d1a4bb7245153da6bdb877d7cbe6265fb9d08b096fcd6e0d98f2634201e44c8f41ea1fa29f46eae530c614ae4096e5b7f35848cd2c76d0ccaeb7faca8211b29398bf1856b193839d7b8cc682feabb3203803de490410a47741496b042ff82a9d1c4a2df441a212b5e73318bccece9985cef8d4e3bf40f0f597d03e56d241bf9517b4e6e5181e9e15bae38fc276a79dcbfe60b20524b0be30f873fc2a31947663cf24cb91fead30a53cc3b5fdbeddcadb10630116fd08150fae5a2ce7169759ef8dc36560baf7cf4db7fc11d57019259d4c28487e10effe7a00ae56f547f56f2198b83bbb16a583f571b52bb35202b8f9fad80fa4260e7f59359702bc8c54c0e23a2cd508d85f5485b3178cfd2e418ad8619adff2060da394963cb9a4af5d5518b947bcb0c9cc4be5c54abb1dca7da320ca973ecf7a936f146bc6021576b735ad5e30771cb1956ffdef754079ee5f0cbb7df7b7a34848edbffc5c6677ab0a688771108eb35862c9b579c1a47b648ecc8fc2e1cfd739d6247e90276c321400f7903a0e8adc85da5ff6aa556e89f3b3eb86e17d10d115e21c3a704f9cae7a3fe9ae0053f20102a53ba6cc5a260d6276728721f401faa417ded9e5fb7e53a46f46cb0d074e89956c65af25f7556e7a7e6879cc6e2abaad1a714535539b8a5c3917cea75027dc07d7e3f7fe5582140374d5462812147afa96dd64a8807ab96845639f175903621f8dbf689e9b3567c5ffc1d57e0946a051312b2088aaa34a913a3226a5486d83a73701e94ff2f6cf87c8350e157b48967b93625f1bf89fa39fc08c4b9846eaa7657caf6157824eb4137738d9378fa3c240658a0bab93f52e5a817af63a7a04362305d3baff72c47e2fb3d31e2a6dde8e674fac0b7ea32d518a22030fd10d4298a77974db8febe195a4240dc5373e8161baf8ce47dc4fd076f64e307ea6262c35b9819bac4f142b613973eeb6a62a15a2ff09fba70fbf650467ab082b01ee4b7523c54f1586162c4bb8487edabf5821bbff2938135e1c7463a5e193fe298d26c1acec98fe7e186cb9e74ac617caf12d1382018f73108e85fa7899d9e0682a467f1b9f7e4f7d4372149022cd560e1cc112503907af6e3c2133a87be3b704ed311939850af0ccbec6c579789b80d40266203078a8afc04fcf75fc2eb86d46ff71f5ce4743c9b3b2f0326bf3397b64caa3a5eb667b5c4eee18293d5b60e876888e7da28c32c3794778c52d3bae31069d010949ac879c5f4283b533a9e412dcaf0e177cfdddc468a4e7e589f9028802a307b412f2d5583c739882a6c14bd1c09d7b2d25414eb5c6f2c5f945d53e6a9f033d0f0edf6b792ea8dff85e4a9d0f697a5c2666018d7fdc58986b2a7669be26e62b80051c53e57b09e17f22ede2b3206d3a6a05e5a008f2ffeaa200858b6cdf735a70be5195866bbf2580bc5223a52d9e9c61ca94913a500f42068fa9ad5b12d351480225374248f23361f22068cdd8360a737fb768fc3daf29ff9e8bd575072d986e9940430358c9948c8dffb713695d0c08eaf52b35030726f5f7d20ea106aab84c4b4bc0b0e56dcf6755991a5f273a2b88d5f7e4cfe840c15060275dc756723848e0eeb73135066c5c119398995bf6ee5b06659ab135828278a232ccd040aca0cc1fd02f6e90bbf4d28b9839a94db8dee945e656c331f4f2d6859a62a20c81793fd19a304e40b4ee31894e067745a9819a5c221fed26bf98d0d008272602184909bef3c3bc8c1ae2e0d45d06eb8bf162d711c2fd175a0afccf4d232444699a9b92ae84ee9dbb155849346e42ee66b706062e6ef82916fea73cc29460e58b2ef44169f5bbda16ccd9d37029c0662023f79179cd190ba2c3207df802e3efaefdde80b6ed325be568ece652358a3dff5fbcdebb8867a64680effcb716b64c1b2ee0b75f145a0870101aeaa03ba8594c90dd57bb46eae04a5e9d1fc678e0e21aea834c2a133bc9feedea4723e220a44ee1e26243b0aba2f584b150efcf699bf2594da8e092dd87d827e466a3d3fc044f785469196eb1d5911ab3f6f8c35a5deda2c8334938492847e590ade8b54463957dbbd30627055f644a2c78aafeba1251ee7c552cae8696914f7785b931fea869199d08d283ad2ab73aa340cd2591a16764f077529c9cb7fe8e2057dfef34bb13738470452cb31cd112a0b529e3e8f2772dacff84a89475d8ca13892396ed84dbb5f77327c71e1ffcfbab3f85ddc6edc9703857887d75b7652ad9854bce32ea09047f793ffff71a7e1d4d46abbe337aa4561de526c14764efd7f9b11f410ad8e48ba3ea567945f4a09f0d32612c37815207e213281d1266bcf9fb7769957d33b56feb2e34e01097aaa9746c70cfdbea19aa0f485438dfa414b7683eef7293e4c4dbdfada1da61eae465095aa051269d42672ceb74bbb5064139c76d7a8155d359f508cf650f3fd595f95465b85721821467c2664e4d9d748aa8a06ed269cae8bce5edfd4729b240078dddf5828cd282d9d25820ab979ed6362c7ca8bfd3fa0c34d4169d11cdc213804a2d73c4954383d7d077815240c0148eece1830967ee250bea0c1989a578364957cb45471d7c6e5887a6f10df10b17da115a6777ccad1c874e56d77859db92aadd3fd5d3ca832ca2226dd8a25288c562c26cbcd3ab3fdaf1297c41a591f30dea04128a304462a4fdc7549eda0a3e076d28a1eae3abad4691a207bddaf4c99053f3cbcb253421bdb39fe4ab7dc236c6446a80597075fe47aee27eb5dd2a64042bd3f2027b42c6610bd1a468532176e830b2917241b03ac79110699077dccd4fbbcb0f96fa155b774c851d3b23d0085677255d9b20056aad835551b670b20a5b4b04abef6a56e7e6bfe5d58db776f3f961ed6b3dd31c95e1cad9bc8f9053250e23a64d7593ac7398ac1656c7d5bc40b8383243c1239cc34aaec335839f6825528ad87e903dc006745b43284f464af67a421b6e8dd82efcd2793b41fa6498130ecac2c5a82f3aa8621392d18fd2c71d29c9d1730bba794960716b6a5ca88cf62a298daa2532c1614a1d2bdbed40dcbeac137cdaa29026b1dde079371133ebd68df061b56f0efd3a14c137ced35a30e0eb68422cb924dc3d2f0c8d3081cd5ebc2166656fee8b973aa947de30a8e66c8bce124ef0ba3c44f43f3ed0de143e8daecdd5c25f0a70376aeff7478bd4ad37c73d58c6ae0ca105def5bd69c8334d1fb779839f0e2c8784d0cf199b66bf773a9d2081d3ef171bc80339d3817744c4bddc0db92502ba96277631f4014ad10c1c145fd69c394372356cf4c64071b1690e2772bf7cc51e66c764fed1a2be72338635e29f4a17f86df3200cdfcd40e005bb9f8eddcbdfbebf0da11cf8a64a0ab620079124040e9ed5ab276b66516b3b5f6b4c4a5b3ad60469a13575b13476015b919255acf3a89d72048af7a3f37b2841c7378f80f334572b2a28f04474cbbfeb82de14803e6c5d0ca7509adddcf71171766743961b801ece518274f88fd0ac2d9af4b8e90fe2476b3b813b5e33675db821e44fe3dd43c31bbd4ceb17ad0e30eb82db272d8b93c1566926c26c215474de70b79cb05f04add7168e3ce7f50bb4ebe19b4b94dc063497d9451650ce45beab0ae71144c94b44cd064e4fb190519ef6603d0a682ac309f432e9215261c2a3e7987c95e944a1f0c433960cbca66858d4a7c74eef9c53a6361d17cab903538b59c17f12e5f88c1983456d5b525ed6484d5d44fe735b3d752541d9f9cfdb81deca2ef76f810c9627d3e5dc24b9e025d8292ab9023a8e09dc88473696da12d3040287ec9405a847827cbbe94f3a55dc6f2fb830428c5e404528d6378a23cfd265c9736769b9f62692466e9fc41de5847428acb0a5b3f36917ce97e2bbf23b0469e79a6ed5e41bbbc0f9a7036baab7a451ddb14215f6740cba403141128f7ef37923a50cc3d0428e725c0d1f2c29f4c46d136ded7a9c0ab296474d5c7741bf27fb463c4618c39128113849faf0e1c36d309588b9baeedce213aa9339d351262759180626bd0630100655029c9d1b4d25022aabaebe3413249933aae20c07dc7bf961acb39ae148ceb87be10e1d1fb9774b997ed56eb6d60090a83b5f0cab09ab45e9d5f5979b01eb8e728d57563530e873aba835b2bb4eff60d2edb6b985d43fa3782af59d7e82eef201af7f32a5da02e228d2d6738da2a8717969f1fddd66c07dd553ba92d0f45f4bf2ef8f98b6de4c01d8a3c19772fb832b655718bffae7b63ac9f74c60da7ec7000bf48e6fb1654e +MD = 6909ac7b6c633a2759d1360a91271351df07c2d751065b0fc825d2bf80f04bf122fa4218204df15ebcf7af6220938ff3 + +Len = 38632 +Msg = 65300945e9e376a9f746dff3cbfc6f720473e9ad9c0b3ba71d7a5561126f3ba1bc7559f2071a18ecbc51aeb5f8163ac8dd5010f587fb51a94286c070fa7ad0b8f35d02d8bad66d515b129e53d465a383ca3563fb7b143192f42ca05e83e0987870b0a9ffe85da0603a4e58d44633d32a31e889c65e9c00ea9a329d3497e7ba689c36f9707af9d7a1c2d0844035c6f2457c322b5e1adce9379e6160f91dd95f11dfb6973259ef3a9d5b5fc9a08b68275c12dbf1cc951c1203678191b5fdfcaef9a2fa2e4d6b8af3db6ec2cffb2f5e9af85bab8217b9a4a3d55d5ad8711f99d0aa4bc864ca9a1127e361c23f5909f374a0bf6a87476cbbc536e8b3db346bf7ecac44e9e1b0cdcb013e9e27c1c2016edddda6dfa76598aa9fad70564506c9602b85f3254e07ec01a6738bb9fc3fff16fc3678d38b7824ba5bc25d09bcef211ab5bfc24353d8defc410a923f99d7eb35fa339d0edb88f8301efd1795e8f85b6eb1e1180d972a8d01f88c1a833f93ad11fe5c7e583e9efc5713e706c273285fa447745c49c305e05bf3808a4b97792df2313a81795cc018765f07935702881504a1fff8c07e71bf505b6e4c6049945422bb540f38def934d42de5241e401e65d6e40a533a7177122a58dec78afce908e8c332915e6c4e38baa30a23ddd2f438613b1ed57f441ec12f115963905882328b715d6db3adc90c70e9fdf65d631274eeccc2e6569e6fb5a8af66883c0766bb54ee5c0dff4a71983e28460766997e03c5bf7eee882770d4dc598e9e54ae9d898b62b7d70aea4ec56c886ebcc01c42cb2e3dda55de882b071538580da1f8308678f5f7359c3669794130fc7f329566b6716e5f831d69a83799744c3eeb8a269862cda38e7cd6c99d064978b785acf0abd57994e11071ee4ab234f297fa0f87a9931543497371761a04fa6bcb8108ea91a38601d57e49052aa5a0d381952d5ba051f360d049af79d6806c5c25ee525b5224bf2fc82e99f5bdbde27665868cab65e58f818ac63ad9bbc5c6d32c94314cd59d4aa523e908c6ed411f63a993d57ee097122edfb1b79eb01a3158483b4ec402594feb4c773e81a0788223b785b0ddf9aea4ef37d4d1d19cc6d574e1aa50cbc19ff78aada0e42ec0ab303df523c4cf98746c4dfaf52e796912d9ae5faae069fab66909ac2ca2d334235439cd37ba5ca52f93cf90dd769efe46668f2b03a6a795e7cef0b3e21f7ae42514a0a687398c082840fe6254524843aaa39eab7d498c7a7a4ec8298b042ab8fc98f9e7ddea68a9a79c60d6226a802085b96348df722192b7101876eff8ec98ef09ccfaff75f770f3cf7f550e654d7d21cf666af3c86dc3e53d6801d6a4c76c458fa246b58142465600e348e1ebb842c40e307a7ff478f64efc413408afc31c47510133c9b64f111658121563a6c857b79e48de4c9d4a14387629764cc2e8903d78742901be28bb7cfe96265c3b85a442a63600226cec03ecd3aa306c853fb16f2b8090273ed52ad01af7e19455f712ac4e8347c90965adb23a4cc82e9fcf652493afd001e15c485ad6bbb0d39a27873fc0b61a081bbdf8d1d396a75bb9a095a5d88851584cc7fb61586cfae0b21cec412157e3a84afcce93c71035bb7abb2a3b21937cf32a1e2d2fc891268446de2afb9cee0972402b163e3e42da158b270a2c9659b79c2167c50a4fb39e87fe7627b55604f42ba252b81b5fb5ff3293ec1fc061616b19d9acab3b1559c9b181ebcdb77a200b9e1b779b7253f00adb3b134f41a7330133fcf4c70a410b0fc9784503482ecbb89251a4a98b427b65d62ba384f59358dfb22f4801befb52d8998a8db0b19a8c63ceece0c9ad53df76eb0aa4a5264a576f5e1caf41a16db48ce760cabe3be8eb721b9534e322aea3a7e4811f9a1af7b818ff6b316ff9bcbb937ca104142b3d704e41f4a6e0307c4f5f88371a4b19c004415cc4d6730f13ef5620f6439accc4a45f08b041a620e56c059ed5a0a06dcdc2543ecda7352b98d73b9a07903865a20e0d38710a1e3a108103ef02b6815d477ab86d31ab9d9573fbabb47bf2d63d0237c198e10b30c52616c0436766d63056b5d5b196ea9494cde30f34fb725c9d0aa5e1f1a64bc50b4eb3a461abb7872f21f913d2a56d0071ce18cde32e17b2cde2e2d70b68d2c352b1e1171377b27ca2d1d1da97053bcb759d214f89bde9c115b37609aed0a914e37627811f735d9dd18dc292c95e5cdbe56386fbee4ff06fbda5e7e1a285d79e06c60e4a4e46c2d3037e56a3305ad91a0c47d03bd98d35a50cdfbfc5ae30644b02c91dda6899e90481cc1475949fb96e31728676141ebf4c4b8a851f9c79590121a6dc9a3513d819949e8470bdd504c19b0b301365ac964ac3cdc2563207bdaaa986d3f07d5d99fb821c2ffd73a5c3fa933b567c95dcc389b9d1fdd23983982de3908b45071e349093709c827db7fd01612a81186c584def78bdbefb7894f27217ed8b029cffafc211bf5369a4b2babe4dff384fb1c83c6647ba8e39b9e3d4618dc45b8d04a814784234dd18b03e02199fe304892ed399d56df0f3f4c21845e28c3e845007c06b9a70f4c1f96904defa9efd6c2ea9226b23338677945cda4edd5d838db16cf0ba0fe12a877296ac55499376f8a6eb5dba3ae1a5a2814fd1f63a49bafe1afddf0bc1ddfcb8ed01de70eec675305abc2b8e01bf74fb2363a645e1960c60f280356597ae92dbd1704136d17f239db0e334f060141c0ae3600143ba8ca039a1be9cd1799b157886ac7dafda06a7c6112a21e73f2ac457270d89f9ae759f148f7fba554febad18747d3be3f2a22a33e6579a7c8647956b5833e76ea3973076248b37fc01e7814203aa23dbff9dd46d953346b61db4b7cddf9ac3aa823c7ce9c8a9bccb78d7ba7e9bfddc9eea3dccfb8886ce9dedb95105220ac3b634aaaaf4e3a3f1cc9a037f54a43c0f349ccb3b652518d939dc9d8b9c8b4b9299a029e320dd3f7d0650b2f94d863063a6fc8e4834d6b01093d3aa8e198124d65bad034ff31e460981832d50f0a9a181fbf1d01cef02181bb2bb2682046b5f3805457e15f70e7f3c4619bdabc57557103b65d7de1e1016a19e7a5a8fe6b3c25f9e4fe45eb415b4bf5cfca832555319b96e3fedb74a6a734a60fa8edb45c016f42eb27b51b19cab39cb12360f27a9b0249d6758cffa77f6c0ff210a91acfa229ebe588c1776092d539c45b167c4e0e5f8d0c4604db69f69a883d915d7a0c9b00654285ed78bc602b5d67b5f65b2617edd0d404f5a064a92adf509f8d5ab9586d3fb0a3bba7939f206819e8a2e7b93437d5ec26b1d73e03b755c99fcb554c66daeb8e669e8c7ccc5eea69578eda6ddfe7dca33febf84c92aa8c070669c23c42d3f95a43188fde642174b4871c8bca9758859794e67c26e28ef297881b4a1f88e2d992ddbc2a3ee33267b9fbfe7445e7144147da43eb335fcf2a098942555c85821cc67afc0424e5ec63b82a973c663ba590227476ce18770582cb8e617c89d52c2373bf5a7616d8b9d95d97694cb2218702c608118d4cd4ac9d6c0c0b180e046b9e191f4a289b38453908c6f71da025331980e986a126d53efa5996a1b07f7faadd352f5d6418810913483dc337b6b3243501ad58b25d1536fa1292c7ee54c36471364406e1154f6ff8aa7050136c57f4f5c6d80a3955f12f4d2594e02a045c42fabb11d90817fff4499de3104947900fcc2eee1d9e8815724411217cec24c6b0ca220d4651a71f3086a11a9641ced7ef38c843f56a89eeba7f53ad10bd3c8f2860198ac1463939af50329b648578ac0dbc219e4425c1d9726f6bac2e059212246cf03eec5e54bbbb16e0c9ed8cbb8905d6a9416c48d6821494d7b3276debec3f41448e3a2260220e4b3a4a93e02e0b4218edc1e04c2e651b701646bf4e9099d38d94fd0d0b0218f37d8d7219f8468f5ce35db442b83fff1191a5cb483036977b82500007a0b0ed151e78f4c26d7ba1b0c6878cf61591bc716a14d544bb2461a1f0043bac6bd33aedce7b374f8853cee852e9b09cdcaa29d579d1e947381094f13720045dc50f7ed7de12bdf40165836de8f2c389860fc398316b7bc24f518dc3c841feae54cc158dedcdfd5241075bac29314a5e9a39263431400148598dc89443d88f10937fbb5a7e0b7a0ccfdfa43d7433998e91acae53fa0e1e3bff1bd20d0a623a26f9b0ccd80f69b8761645199c5a68458c04d0d861ec14273f98824678bc5d94440ff5c680f2473d10bcee18435c4dd2f95c4c40d89800b0a5ce677281aa49021a3ec534eff7427c7f1c212cccfa62d639008554327e324f110921f29284b317fc1e95946f6ee9fb13cc84c383a535a3ddba02af0a1f575703c1485335bc0a5a7c27ed6199c99c3d71368f7911fd34e059b14a9dc9ebbe6ce08f5100d5b0dd2e1cd33328f9b7d7c809f2b7b9f252fef03fbed3ccec73f60559dbc2781d13aa2750a91d57098a2b0f50898412af56e277f21b24a8fc488c94b23f13455654dfcaaa21f27843e11487f7538affa3698ddc035eb3be83c9e0bf9c11d9e52be50c7c9bd65919332d12d640e912ed691b6f90f6020769ed78a0ca7a0c7cd40854aed1a82ec79641fea45ecfd2d2788aecf62b4c9da657c3e53b69de87729e7614455e51a3b48c0ab657a61679400d634eb02f79aa06f491901ef22c0b51a0efb45e772addb676f7e49b309774c2389cc12c01ff8fbfccc0f9da17f500a087ffa558b0862523c39419ed82e52dff6691d4d84760d7274cec92db3fdc1fd5b00077c29f1612a31e69c6cd01623d5e33dd0a33642018d4017efbc0de23b177b5acac3a973d3eaad3d36bc850910b450cf8c1dbfccfcd4c66f284f9776e5ded055ea31f3d7e01b1807b895de514106a7e5fac2055c25d06f9e1cf03903e8dcc3b810cff065af44d90cc900c335df524f48c19af13aa408a36b74a6dbcf6c99ba4de3a4866469ed5a1412041cfc1221b0c08aad6bada204cba0d87a6523989c1eda0cb89e1e359f02e73ba9d1ef01fa3214fd045cfe474d4d03ef72bf47946d5828321321d93ce0394cebf7cb56d5653d0ec1a6aa76ba6a935d6299d1838994cefffebef5dea53b670dcaf7f079b5ea39747f9b3f5b24e30375d8f4841f9f99ea2618c004759935f4f081b0299fca128e0fdeec01f5ac410715fa8dbe62fd051367272134e5405849beb82a5f113c64a4a787a0da8e7b0b0603706b6896cc60b088d3e96f78c12bcc3e166e78183269e40421bfb16cb8c96808e1966b0133302b52c6219c744536e63a44835efad4a7b4ed55526dd88c0494ecf617adeb5bffeb8da5d1a322f302ff78ea71f7ff4ba87d2bcb5ff81a1f42f47756f5189e6b5458011bff6ccaf41680c2af412d71bff4a8872af1397a980eef71a93893618cb8da75ceb5deb46ffacfde3bfae69657119bc61b0d18401fededa199e9057be6b2d9b366fae3278d37569437a40cb83c89c0b345bd7db3de6956d0cc0e5835a0cabd818cd7626d76547cae4b48861d96e47e155108501cfa0993c6eab273d7e388eea8e85244cc51d9a8f21eed3c0d8ca83cb3e6f779c39e550a4b9cda3ea9d675d5f021766f8d464f442a599b16d2465f6456ad90e1f0f0d624278a90a1f2a218d820df48ccf77f3db71ca35afcb3ed905dc64ddd6eeb181349215bdb84fc6ef96002ccd24354212b6991a533d6f7a9c48fcb6fe609fb3f95e203b7c4cf0d63a1d65c8e1bbdea57a1c250072d8ce7a182622dbbb29b6a8de2559348516a6ea997a0f7cd2b200347282a23705106cbfe523eb3d8490a7e29840c9ab38c3d676763289b320b56e5194709d088a62debe7bc8b276fb340803c036ddfa37d313fc58ed40f64c245d8f687c720f834e78e8549b14f27f823b7ede5e22cbe2b2c40ec9f0e1d0c58d726066fccdb68031dfd008018f3a9219d6d65b4d247ac9e17b0041e3d8bd2d6f215708780c97f1cb8817fea28dd9d3695e8cbf7a5f916dedbd83494c8225d4380ef5d574cb1e6869e602a0d4ad4a93df2724837c20aa4f45e00a58819aa56a768faf468965d4549b9e22a73e49f78409e5104fb9342fde78a707f8297eb640a927f5e41c793436eef51a7a46007b04680cd26cb7f69cabf466fe90aaaad3075e6c5c26a481c88fb2af3c82724d4fa588030d72fee46b28479460ba9bab762ef4c16496c80c0bdfb5112b6839acefd7d86c03eb048a25e3f0d3e0ee62fd2a181acb81aced6468a734cf4994328bc62bd7ac784d5f64575f8e99d1a4a72c69532eef45f18b478966d03e198ec3868d020448bd0275ef7a0b5f5ab565ce95be70afa123dd3811c8af05e23db083198f0afcd554b2de980878019b2eba4fd583f11b85ade86a4fb0d0545018b1e7b156a71fb6c1c6fffa7d1603df801aa1687445011146ab987ddc8b3a0c2d0b77ea7e56fb71a6d750935275e49c6bef79dae9fceeb8708f4918a620257afd15aa11509afeaa563c86df3308025644d12f896f89330fce1c02ac984fa5210b78f4f297f3b7a5628ef95a695d0ba1ad4839107f5a8c6bb1da4ba63d6a4792da9dfeda9ef1b5175e472e719fd56ee307cd3cfc94114970ce329a921ff07b54dd0d0e45e0055554abedacd131119aaed6c8919a382df89375bd560c9a82becb954ec9c105bf3701cdfadae5b7921d79bcd2dd95e61128683af334523781907ba5cbb7d87a8fc89356f76f2badc765b80c64776c285b4753a04c8c1f918d8ef9610c4f08a8e7987db95ba00f8e22120e48060589797cd3da2851e3d112f708a95998f5be3b5715457790342dd34290c1122ffe7a53e66c8 +MD = 6fbd9b6b53942b1ef9acdf1d2ae028866d752bce6492ba54b936f9e4ba24bf4bd480490df03930c6f83786e5f5119115 + +Len = 39472 +Msg = 80dd1a9ae4540b0337f2a901f4d9dde9eb25a2dc8a22689c5abcb59fcc361262361f250019821b03a55e497a7f55124cc1a80bcb43635d8c19d56b775c43b51a2edefc42f8f1a8cdf65f66baf64d15825c1ce3ab6a9ab39abe79c3a91c008b796e00e88a090a790832df49e8e128af34c56773a3872e326d538f045d95d35b28006e2ffdd533585d62c53b2dc94ea80a027303dc2387a2aedffe77bd4d25efceeb1119c5e3d50b748df982b13427c8ab1d26db7ec50dcb046bb064eece5f0d1438d0f00abb595bf4bb62669bad1bd7c01d6a42b0f6287518fe8c131ba0e77ea2ee92faf3e6251086f4ea3113b9929cf00b26829a3d406792a07acb6a49270a1f154181a9eba3f2d141782943e2f4e0e4ee42e16522bd6a195962d50353857834b6c4cb54523ac87ea9f59851afa96b43cea5a8392d074655322c790f466b9288d803201aa4515c343547c465a81905b6b4391e3de786c3ef32c1ffb6a8401ec483e6ca266852749cec57f6a856ac76e5a6e58d9ad7a2a88f6207af1f036ce58fbf55109e26a4d95dd60d754140cb8577af913b7786c4bfdcc8e7d173de57af92953839ab67af5320fb518b59efdcfc15d42571fd7a52ce7f6e49acd9c26944740c778e74b1dbaa8d640c7e18e949a1661f8a77543db69e1f5c16897a360a6bde2dfa57228f90a54b182497a5b8783d1397a695a35756f7659934b07ec2a2ee78ffa9dcdc86360d031f831e29e3d397c3446213124e9ca1f92d8d690cee9993e98a6d64cb2035aa5c820f5bcbf3c0791f2fa738cbacef63822008fc4c435723dad62c3816e4f544ff48b295b46fa9a9ce5f5b4ef3f8b606a97a8cb067484465f2ecd0a1e75adfa3937953160bdff5f079dc679bb5bb5b53154403cf8586c823dad33fe5630b598ec11eda24f9cc0c16c8afb468377c450f6e86549fcd834c233993634cb47ecccf313d2e08a6bd56e362df29fca1c3dc055e46676968c9362eb8352220023ba12c8ae1390a393a3b1ff074ada11c1988fc8b8e24747ee0f00cffbf66a774cb3e6e750fe271dbcb239119772a9dd004b1bb9d65730a364ee085b53c162b33b50d5d99d11187b3f9760286ef8739e40ebf0b3dd43c71b89d706182b11af2668174c09f2eae92ea4b9c3adfe4acbd80bf1ab413e167f22d54076710285a4436b8dd602e2fa2dba74afd01cb5f8171ce9e2a7ec697dcd5bdfc0c6004a8bd6bcbe1af06efdad3aa137c011ff266ed9cf3335831fffb83628f1ce915093a2dae4c84527889392a47566b115bfd04db881a060a94651744e1cc3c054bc5e59254e22a2e7fa5548ff9979f937e943e307b69a0a970a1f208999be5c8cde0b1d2a6b45aabe2eb31eb09fe9ff1505e1ed5be08889e8d5a94b5d3259d9a6203a6d6eceb9c316b02da24bfb4f3919904abb299204650b3390635d791efe3d1d6cd866eae7828e093572463e123dd212dedaf53d96326aae54f6eed08600be3002dca732677f80a45aed13dacb73bb082edb5365a668a3907774a5db27a7a602ace8b457a2009b1c1e915953e38150dabb2aa88ccd7e32a4787b06eb6c49910fbb9af2ad3fbc39daf10d7b2bf2ed2014f447892563f98434c8687693dc6ceba1cf5206b59918f95b529ffdd561fda5416ac059c2124134dbf7cb9966e098228348ac44f3369d3627e3e745e2b9595ceaaf13bee5511bb0f47712d3d72141e20ec8185208a0cf8ccb056207d67176b36b01b00cf198bf8538d6ecba6706f086bece14a248500679bf47aea82322ec456d3333e89951c32df397a7b1991a3aad1dbb2faa54dcf8797f1b1bab4b36008f4b940dc62f24bd17cf29e25ddfd376b1961fd7fe90900bf885003785c13389fd90a4ac2a358a03df260e1b13bdbb3b20d27c9c039e21c7935b8780cc2793bf1cd6f5ad893eea4df092c4b077b53a0e973d51ea5dc00aa1c67d2195f2e0ef366988f76067cddde1d89fee410e58f8577141304161c8a3210e646ed57e8fae7670114a934a44cd760397db5b2c0b4eac4b88784fb3fa93dbc7abbfcdd37649f5ad1a3f84a54641511e252c5d656ed573826dca53c8e84528aebd94fda6574a4a9d0e76d30d44d22964c251c65ed60553b28b870c25144f9e10049ed34b8547dbac6850fce6c2e86593f9dc345ce356b3584c4eb73d010ba2982b3ded57929b2f77b28e60c642fc7c08362c1604195228e03a7203852111ecb3abe2ba3ef1eccc7b776fbd3037a6f35df1d1e9c8da801ae6d0917fa216eac2ded13db8864585291411755099334061f1d76e3e3fc9590fd8a94d79f8350edb8665af66b1e02ccbfe2b4fc985a8812e60314171cd48557e422ee6810c1df67d46c3a85336642c2b862f5f966a19c1df15aa0c22f5e9fdfc9fcbfd2362242a4eac65b8fca8440bde48981535daf98aeaae9c1ec03e20caf15e1b01df8f0a22c603d661c17c02645ab1e011264cea54e787a209e82a8f34f319968523d712685a0990335026219e075eb1c3f6244eb83c3d364e093f77d4883ec9079efeff73910a2d9e073b14318aab67be1415a91d8f4bd36b81e19d12175a2d098f5b03cd01a1f912752f6cc74b248c500e858bfd271003e300c5419626e82cfb937fd1ed025dad212877adc7cf569a3a43f869ffba364234f43f17a94d65536e39d1dc5c3989945a8fb8299b9dce0bdd62e2b56daf2b18e1dac371e3e14e3ac1f0f5a5830dd2592f194592eb2cd77ba9d9d910ff7c7ae26a32f702de892f4da7475fa00a05b4660f53b46c1ef31f4430274fef0db882494e8b5e2ce1ab75068eab746e49a7ac357bdd9907bf97120ff0c9bbb210d9fdc7ff424d72a5debbefd89bd862da6a266205054808357f3c397c3fa10cb15729b90d0669569389608415a6f02024c3bf563b6965e029121a5b22f7a44167c6b2c6f836164b23420f4de64b6018c15ad39c7f885721f30628df95901a129c9f056c315ff8e2dd7f24b79af78cdf28861faf51d0b0303bb1d451348786d2d846be0348f265a04ac72d4bd449fac5d2ebd00952d0f5ad5babc93aa04c8f1493643936cf8c00f5c3809594f2a11e7f58d2a124e3178c0beb6a6406396d775a666e0371058b4f660051fa0da69b8c5e12f11fac82f307be6364314e8058f416b9caa94cbb8ea57359a1d73040a7a904a9cd87eac321ed374c2fbd6e159d79cc1600971421f4a7a067f69987514418e575ae967a23f2a1290e23650f59b96d0d03b65972095bca6f93d6dd7d68ff40931f3aa7c51603c7e641f5c48cdd2b623bfb426cf0b222824365b90facf847b47ffef8587629c3c611500d58711061edeb754b4dfabcf763de66139c707fabe91ead4e14e7cfc1201ce0e09d5683fb648dfa1778faaa38e3631d7d20827f9a42e1a2c259b4886a7a7b5cf61f97a8666ab6025d8a9ada7585a3e46c283d6891768b67ebb346e44e19af2cd43bdf0e2164d61683df35fe1bdf036367101bdb3ff85e7530ae1953ea924ae9018e7725cae780bf10f37655ba33f402d4749847e42ced4327a6c657be88b119e4940a7fb16728648b73b6a1df49085b5ac25d2f3c98ba6a3739b8803841842813c9038c73783f9f59bc8142d962b2d55085b4f187c04842e5d38a3de67136ac15b9fccc8f7f58c8025a50b9573585f96c3b4a4f74380975ca009611577c4b0e40d340c073f0e6972bc9cf85d715f43fe45f87998074906b4a4d767ae9e723d74b919a08bf818b553c773838b7a870217f6ef7501aea5fabfd26960b4c26738f9c9142f5c08599ba9b0f35329751ac4693f60413c22dd9b039089f22ccde9caf9a4ee6183591a41fedee4113e495eb07a861585514938100a47fdc520a6411bfeb26fe007d1a2cfd9b90e64d3e09cefd534d4e8460d00825c608e829735b7528f5b5e51f05a3b6ec3a938f5ef211ba8ffb2661225557b187f4104d19a6292983507845f47db2b4643162c6c9af42504816793acf608f3fbfd54275930151c14761eaab0133bbb7ee168b070dc41002be4ba225ebf10ae525e00bfc361369befdd0896ec5c64333e25078da9bef0f544b015ddcf8a54f54628ac93b635ad5850ef2d11bc2a3ddbb0985c8bc047ea4c786bdf8aa85ebc0fffe5c26cdbb5629b6036f6e2c886aefaf9c1cd715d80154dee9f7ff290443046a41ca912dae83eac4639c9d3b7779fda4428c309276f5a40cfd35fdd304298e05e56c94d5ad727d22b800faa3106f8c1b756a719c71ea26c4290e6133063dc26541a8ae50388065637943130e03aa1f87ad2df6ae495d31a705d7c5b37ace560aff054a17f05c48091fc952d691b83c7b624d5c427dbd69280c2897eed2799d696608f4a735647986240a56977b1847593d5efee38f7941c9b477545fbdbe1cf32f3a3a88a8179e6d1e9c8abb0058d4c386c97b2bef4f400e975a97509d0a695aa30f8836a9041b2077e65bcbc1e8792ce7134d662d7dd8591d38bd9be0fce6e27a0f6a3bb8a86432c87e665440458907c6d2d23cbaa39f4bcea8438c39f42a3d1c906d0267832e2678cb26cf0c0ea8e6be7ec61a175ef959140fd59bf88eb7bcf358ed152612cd7e0163199675923d4c267d8588e3ee7b0395f5c055bd3b0404a6cf86fe94d5c6ac0accbb652d7eda9aa7559cf380f098ddbcf0a043f87783869f4aa729045aae32fd7e88958432f574b9ad79047ef3d74a016701e12ac2dad55570ea2f14ffe89541ef0dc22a4d124cc5dba6164e76bacb0bef51b7d4bb6e5351d8ac6b47640a558094b755702ba5956476b0b37fd7b7e324f00c2276afb2932cc88a881bf587f6220611ca065d43d10df5056673b55324e4ffbdcb914e4c074ee6f0efe342e5f9bec9b9ba5d6061a23add2099da9e1102e484d31da4e59f4220aa7c1d6dcab8d2bf45fb90d5c3836b63959ee804e085ff7c15e893322420b65a99889afbfb55039c0163d810052dbf20c4ecbb932b069d44396ac6b97874e6452aa2d32e635f2edd929f0a8c93d4fffad1769ef5dc274eb555d622bb51005488d4577065814b970c6fe9a2bbfdfda04a41e90cbd827c9647f1b721b85c57838e2d12dd31d38eeea0fff03b1ea21c6297aca07f4aac5b0684938a5e20e8fee5ddab618433e8bd8823d93f2e353eb5998b6829813db86701f3c1cc3295954b1defc5c00fcc2f4c161d72130690126dd76e0b009d0745153b0df2f94976cfe07e4d12bada6b15aefaf651386eafcb898ee80bb23d27b0d9f43badadfd551733997e08ce6ea14a7ab9370d0b90e4d8bd3251f0baec2fba49d0256836e8a109d8e1eb1e57470f2c23d357fc0947efb86d54644087247f9fd95133a94075faf6250a2cc9f20df5393edbe1a4bdee20e90e877781a370a7f00cf9eee7373fc38acc54aba23b0df3f020356c9d95ee18f9352e042a9c4b3949592ccfb8a7a08b262373f02d8ec1abff7c62415d2dd2485765cab2a1de2e941a428c4e83fe32c266ceca82c259e35da5a7f51859e2353f8214efdb8de59548d15d7af3dfc780f9bb22daec0748cdb99137704a2a5f815f07b70017554f19d80d0e8b58328ff5a191b4179472c7fb2020af366f2502412766e09dce8e7716c22bea3fd412a41b4a991723049b43f6220283e9fff056ef391e263b99a00a3687cc54fb0ff6c06c651fc06fc4c769494f8539fd6512da0604abdc4be11054d3a95ce35f5465515371b424604dad946f094745d346e318000a8e87513d760388a75c29ef59c4d38b00f4c7a717a451c1dfb74c1e0e077d77cb34bbee174772cff2587d0d88cbc35d93402ea6ab522e0c4353913022f696c7b73cee6506eb4f141ac0714c59b0ad559924cdd1811d9588c4bad9bc4e16e09a6f15a37874f7e4ef91228b1e453a0e0d931139da218d04d1e44b7a04c80ed74a534d5f7af9e3c0ccf60d4f15e3be41e001a3d703152708621283e6cc29450761f44296fefe458f36a9df21a5bdb3f577754b49fed4621cd3eff2c454fa3fed7bd2a3ce770a839cb73d16a7502bc1a52e5e75e71fd7c4ce81dd268741b375f5f26edf8a75972475c9104244a7c65dbd8f3dc25308a7c57a065a8da404dd7dbd6029543f6d3cbea6e6d3f07e1f15eecb1493af022bbcfacbdbe8a6af30d0cda03fb2b071e06398ac8ae89fd818830b3a58e09a691b9fcb107d27f00d4855cc4afb7b52b6519468f33fdebee7369629a7c6a5131c3ab8bd046468f842ada5201a2de3e9714357a6177026cc000bd7c07fd871b7801ba047041c5c2de3e3773f9a419cb3372815c685c64145c6eac0764f18a6e63920ef0f8c1f521f658c249157d1066e7c926740daaccebaa055d8a18201e53dac0ced7d28e7eb3b4bfa35bbbf46a169b5f4b4ab628e1fa920ff98d8b52e9d1c5d1233f6570098101bd033154d3cfe4377e1967cd9f4c48fdd2a798254f93f00c0e34b2192f3e91c3980a5449e0e9d6a36cb852b8d7b4ddd19790344edec5b898bf2ab75692c4ede499df4b00e45df7c7714f93e198c2c2f8a6dbe86ec927324f2c2cd78462449d4a08ab9ee3a6d64c8bd706b3aeaa1efe5847b13dedd660651a9c63980b6765a7df2d95d659f0fadfd8e4063989d46f99dbc23aba33ce195ae259f6855469d015894fc67ac98871b794e277add9df5d9c685e9de7a878f9178da90e23c5302cef32b865129d37e4dca91781980594920ee665034cb59ea9a604d5d3fcc783223bc1ae9b263cc5fb57fdcc4a8077b8b3f73f1d9372c006d00f30246c97c32c5a031e7a903f0efa5d2f7a48fdf096166b605acf76e033791758f8e0027c1ff17b4e31646be47b9eb36c07d5c06dca755f501fc2d31e74bf268b434fbc34459b2e25e2b3559eeb78a4178bb9bb817b9c3acf7640d3b5eda0a4affbbbc3469bf21a8f19b175f4c651d936f03d18b31154a2e5478f9e2c04e439cd076a3e3a8bbde894bea4f46e74f1f9d41da9fc8bf4653f9b7af85b0b23528eec4fa556997b +MD = 2cdf17a77e4ce67cc7cbe2b5fbdbb4d9a8c3d9bb356c6c8806c3f121226053b829cd6a86805c1c2284f60971acce22e0 + +Len = 40312 +Msg = fda110218196eaa408137a1b66ee4db5a35cd7e4f31107a9e8a81e11e744c000d9784b2d2264696ed721e1362b60b35b2b4d631dacba95658179da4af109cad9687653166c7a503ed3e85d4f334aeaca9bc98fb8804e9febfae70086316c3ac01162cde4461fc89c642f977065f71d8a599803bc59174fc4bdba38ce8fb5383a3f0564a0979df911f2c037a0a9ae7221cf8266311e5bcb7730ba2929f32beed15728be51493a0a24e561e4e8e7b61119634f6020b7633b8cbdae7c9f4517820cc29183ff433f235ea5db464e075823fa7fc69b900b77c88bcb60d8386dc11c73e8095cb26df46e469af606ddf2dcd04a8ab1bc8904de9afdc196e6fd5371e58f3157f173afa010642d79cc9a8e8a3f93ecd66e1389e2d86a09194ef5df6f04e70645e949f18c3440c42e3f8fc4a9995c0cfd573783c9aa580ab1b728fa02a204cd99ec3d1b010063c9db08c37d83052e54f01ffcd8dc39512c25c99f8a74e76cf01ca45615459c54a249cf3e9f5eac902b766f6b7163addcd73f2d61780bfaa9d596b69cc7a0319bb9403b091383b60af956ef8a36a62e8273c58b76ad100443e6cfcd171a5ce7c17488f42bc23a4a24275946630fece2c968808ae710ca2cc0898e8fd0f4c0e54d3de8a3ac93cb90671b471cfee57ff43c1f38d3bb88839baa289da4ce3f1354c77b29f0956d7db15a3ee81b619ea58a60feb50efaff8178882ac2b519e19e5bb7951382ed3a99d586f803e99624a7cdbf6ebee2ad5c0eece3f7c66abac4a923a6f56e02bce1672371b2622ea55dcde4e0d81df7db87701f42f7706ab8ce7bd41c0202170a4a2fc4a5d2cb9394335ef74ba298f68c67ef382d928a5e1be95e959f24976ae05d39e0aac207bf6d8da4308936f887c8e6d5602c30daedecfc988eb9c3f4a24502cc9e06e8de5c3852e5b521fa045198eb68bec8392ac032ee72e8f147e2684221322643ae170ffb6c6aae9b5886fd035ff27b8815407ef5a934cbcf192964dea2b1a1e87b7c82c0c27b4480b744321228b9bef52ce4d03d14265edc9f913d216d92377eb6d35d8e3c5f9e567e0899cc2f06b095e6e05e131790ca9f42e29c136a1d0f8cc9e5476ec260e6a81798da395c2078f3acfbcf7e9ab936a16ae328bd8299529a1b7ae9663cc441fbe9bc9c6198514094e4fccc8785eacb68805d8a269b502731145aeb8192d4d9d95c3e874dc9df2d02f8acfc35c06bb17eea1869569e88b7d81c4cf4c4add8d6c9d8e54404d81369c44ed3089034840f6b12dc6e56748a29179b19ac3973186054c5787b8eae351c62503997a0c77d0db55e71412d039ea676f989bde7cddb9d008bc0d3f4318d6d6464a5526e629dd5e6389e89e3350b567e9e64ccd6a36bb8589285f53d4b628553f4e0e001ee2d8c85072cee81f11b60b6f372840fde0ed7e1438e8971e3fe8cb767b3eb6151755d1b33e41a0e1e14eda65e7b8a99640d232504a53699e1a7a91625e3189775bd6e2f248bb292a63f24d74846897c1fb0c3ab3e90a4bb2ca604fa963b11aa404de74941ec611670e42ed01a9c27c1f63edffb5a187ce2ae43c6ea22827ea29c6cf1f2f4cecda0644b32193a450c6fd001a19ebe0566134ec5176f317f06887064b4b0a5f89e3b6abb593b1209e18e973f2f1bd41f0958f4761e102bfb5263a47b570eba337dec6a7ecbbd08b04e273241b1fa032e0eb8889c045578be0a3b1ffa02919c4712bd4cdaaf278601fa40894f50c4b2f91c3cf380f0c68090d518cb29dfc3b3fc04b5f8182d02f3c58ee484b033004b49dcea1b6a0becab395b038f4f132b671afbdc577f6fd5b7c4b1180bae843635e6f6cce9a17d4e6280450353b5c9512168a13b4f599a283ac60ce6068f68eed89811ea456f6d740b2f3b21ffa427be47af9bd9c9ecd984e39347555d9c09b19c27d54a181a03e7100ce4647c6255f943b794bfae82526f1cf2096df81d8f06e95aecf648eb692ed7e0e9d4b0377c8a7b4832f3e4612d734dadfa37bf5a227627fafbf6bf2ac4d1ca72f179846dc4fa592a1d7f55d19318dc8ac3ba9b9ae888becfad50631f3f594f8ca55ce04b54d04324fe6ae71cace532520cff72270cc416a1a70e1e12ff4dd0f4ad84ad185594a3007dbd84899f62b7cc7c0c2e47b4b297389438d74a2f35b473b0f9d11deecfe084417f135f9517d3c2bcebb54309dbaa5c1ad47610f59a63d157c436a248086279f3b87ce7b58deffa74a4f16332c6b5d4e1ece2ac790245d649ecc2ee8ac791a63a71a769284b713e4b3dc8ee57fb226992870566e4f8c24a2e795f4bdd94d5d5bfb17c2c15d9c354e9c0242ea20357e3d5aec6855e0142f4b074f4ff69f896cc2a80e37aa5c04b04f734ec693965be0a51680d530ea72d9d75e46953557a3c5422e6c499ff8773181da208e844a9bda5afbdc2161d71eb0d25d1a68fcaa32f354fec07d24db6a25602115ff3ec58be7e96b5ce17b3e7e40c694392fbeff9d7375a99946db4d63f884f89dbd158f9285baf59179ef6928062e94317dfed069d22ebf653b25e6eb474ab1363ccb2146305a2b086f311f928d64cd81c82eb52e7bda9092ce9730668e3bfb5e02a1f31d74416c2035d2aa542323a0b8a2d12631ed13ddc08591a26c39c33793834c9d9ecdfb49877256a1c383c5de347288ac3ab264e77cd4b7c572d69ae675432d8930aa02339c894f8e870bd5a683cbb7afaf48485e06507c1200e10d8861c6c74e8994d0bade0f0fd90547cdca2512e0a8e63b38a21b6d5100ace5a5ade7829c35f01af16fda581a09d4a43899a6fc864095f7a0442aafd919cd50fdc7751b3f080aa8eea3001910a96bcd809577cd2adf34fa39c4928c66e5e8cf7055a8d5021d3fcb22f4edb666203110405e1619410d29df4f940177accd859d97e8e16497fe160e28e601a49d16db18f25410756b330b036c42e615fd693a57fee1bd2e631313ce8ae6da8827f5b0441107e5560be94f030a41cedbdb116d9affe0aab6e5f4bf98a397d6c59935572e26fa032f95a87c5ac4211a3de88e95b325662882b33b80091d4994e1635e36339e9b0886baf90977045156b09819595d09d2b5063d3ffb8c429c736008f8e3f0f27b43efce437ce4656302d85c4a1ed507c6ded5f67a888ede0110c60c6dd6e2cd0b73cf52104d2f41d6bd19b7a95cd7c9a314667183cdad2a17fb87e055958588dbe6a9e90800c4241cd3f93cbfa9c1aa07e43c20d42153d131823a27288655b06d3b03e5632e2fa6b5f60b5de56c2f3355dccba7042a0f4dee4331435f4fefce2fdf61e9ea2bde242281a48dc34a7cf02d5c99566c4e5bfabebd11b77258904ca4524878e5906c46f305696ec19b376aeee229c19514b682236e60160a2703c65b122bf4ede2366997ffde5378f4eafe2b0c017b1703ab5eacc580c17f319695c4cd80e07b97e90691ef57ee51de0434624894e55aa1a70acb51185c5a0ee56561b2ebee1737d0c861428a91d4cd1fb815166882e86545f0ffaf7b4913155cafc280d1603938aa19a697cae07a2899d3c403f0f648c4e4bbca2f4e0a42fb88cf67a5b5d96a10c164a25dbd4cca970f11ef7fd291e4471fb5ab5ef5225227e65eb1902dcc1266b3440512c6494e9eec1d080861f84372539923ccf533d900f1d830ee8dbada90ec324f557a686e96cd3f9e3c439c0ecd3cb0c3d7e291403d37c6760f7a181b25f8b9d1743e2cb3150f042269ebef7ebe17a6fc3e31cd102324a3f17157866c9c55354c1da608a4904e05353fbf854bdb90e63d3e6769d16944eb23c2ca68477a8e5f1fa0367ecbaee6bd371c52dfce9c14f92776f7d9fc5615169d52374024370071bcba641190a78596b89e3a61af76305a1b6667b009a011b0cede22a09b686827a3aac3438c40971c2a23dabd47006f73b99b3b6e71adc7442895110c056501db752fb89726d087c81c4bb8352db11ee06263f777dcf5a24b3b3586e50ae37a27a187c88ee8fdf434ff74578bdc0eeb2aa67f005e940e4f20872df8be043a4d76a961778d5b1f58bd544c3d03da7040bd064afaa54f5e0a7e9cfceb0999ffd8630d3b5a34e5cb21fbab21dd4f919bbc1202465ace677b80bfdd00d25a349ab7574d73c4f82177ec6a74a3bcc1a9d7b9b41aff854c64dd2e6ed80843225c9176dddab96c5986ac14744130500c7bcac62dc0d52ea1dff980060e41c1f47a8a8351356a94db9dde36b381564b729fdb6de984759b612167021ff06bb33336dc597bfe05f2e0df94cfa2c583e3b68e802d71e63f7ffce19c41072ed4ab70ea0d85989529eb2bb4565bcc7e57dd2ab05f615156c130f7990fb9660a1b2f303c9484418b3501fec4a9478b2c307c51addfb5f2667942c3a037d7b722bd92f37717d20150b5cbec78e42f894fac65cdff77a7ff95e649f39fbb2874f92a9b3d51fdfb52762aad7759bd8021693a0de1fdbd93b35586ab09f0002819fde09c6035cd6caf7c122b21df9bc5fe0957f950512825c825e8ea69498d5330c17e0b2e9afca292c2fac96e82e58d799084ac7b623dbaa8a77b8cb3f4d93633c4618bdb1a023986fb530cdfec41331e9f4e9bd5d964eecf2abd065c9a6a4dad773983080b749e0685a969d864354377a6243bf20f441ec6502bebd592b706086a44853817da4c9be26c64fa83185aff159421427c41e7089856a1b186560bdf1e3106dd9799c1a1a21a82a8e180d62f9e2cd069b8e4c41063bbdc62edbdab8bf37d8c8b3349a9d235425785d7f54183804ccdba4db3327852d9d08c215471a98a988aa3534041882c6237f40efc29856c728dc69313be9ae61f327fc9c10ab263f085c87034454de7f8b895defbfacfc33c751131bcc5128e1a86c05f79b330e034026d229c019e08846dcdc07b31ad2519282c91e4e259cb5a21f05ae527afbfd194f3e2ce22e30e83bc0e6bf06ab7f2871b6b4c4292eb1e3cb88234a9c4793347921f296115d75a7517fa3a02027acc04d37fc94c53410750aef8852e0647eb04ae217eeb46c57ce72603a31695600220c4bc8168bff6072469b5c4e8897657972dbd4bd3524806485aad3fa4a002455983b40d3e1564ae369d5c6c7fba9f098db54528afb4d957171a6988429ecbf61d74f8e52300276cf5ae5ee44a162c6146b94b8dd6eaf41fe209caf566fe37a4fb3ced71be1cc8b3e0113fd4de28990f50ce52f3ef6112a1179d340f985adfd26130246b75a79323946a71b6a26e8f543a58ddf36fb3df8b5649574f3d112efeede3100ad05d412c611e86f24d5459e071dd5ef4ce5f954efc92872cebddaf8b0fea4308549a4d4f04a1f2202576932495e0588091c0ee6c990d56311b0ccc1735aa3fcc88db01fbcd9945b8d141c5a0f4f65d1f40844554aa2e46f4512b1f23fda758cfd3bc19c34a68f434b7525be63d83df3951262497ae59dbdf14a51331c666409acba9ff25f9a5802c6e04e054ce1d41574a0326c624248769dc2742a13e6b69b5e7212ca459b36bf86be5dd8d35273601a1c7a6309a12cc1d2e1e2822b42b46999cbe2ccef9273a311781bdefe1362fc0eec03d978eb92c7160f62e16d62a69ce82dd69f646855d5f17450c0d70de910d87a9574b506c2b0f4b4bef0df2fd45bd000b8ecac03257dae1cc425662650c4012cf8dccadc04a3f138bc568b8f85cfdbac4e5ad04d2ac5ced73eb6b247de41106cf3babe54a0c8970425bb796b032090996192d72daed3db0c881bc359dcaf8da14fb69a55dd486d7ec0c9b0ac9475772fb83bc98af7cf5d2568fba14292360032d47765c9054bfb0f5726383881f619d71dfeaf4e4ee2da89a7fe55ec48fcf2894aa627975ef8ca1fb07a19f912cdfdf756839060fb34dca00dcde63d462ceb0d79eae9a731786117956e5bd68e1facf92c7174a846ecead261105c1fd3ec712629ecb2e1c5f3485dcca907b63f17ac436771630e77328d876d6ebf7939640e3c21548a2d6490085b1dd425836bda873fcf2a667ad5304b27f7901832bebe49b72ac97973547728785297bb245b93c4532b4584d4a90baf1ac81e6e34ab1faa000cf3889bded1301b3199d3815768ece94569c6043bee3ec8a8bfca6648b1ba7d8f7bbe8d4ac6a9ae84837482a6818668e33f32f2d3ff829a5e1b33b0dc9c00977a092431e07d1a9811fca70f92071a38ce6ed387b96602f6b4dbb1fab10805b69744c06fe81f0b41a1ad7310612231c1ce9faea9344c464570a74c2c0d1c4f43acd59c30a9d30411fb3ee06d5cf9526aab7acd418ed9d7f05b260d2f390068a48263c05a6cc28e70e956f60ecbb5059d2ca637380d343c5d3d01fbe97dddd843e19732d7791330c6319dbedbf67dd2c21accf474fa86fdf6dee01f4320db25879119fc8d18ef737b9cbd3fbd247a423f3d930ddf9df6a32205697f256c21d9d759902666917edef7f25b819a9fd4dc7d5da489603dadb5487c472578a7d87b9d02a5b6492be7f9a2fb228d5cadb228e442a670de23d2bbd2092019221a27944055ffb61d2f534ce57eb76ae9973cafddb342ca43988e3d27759d610d0d37ab2817472dcce5e9602645c5202ba59cf8ce7a20a076e209c4af8765071fc72f48bd1324243d95d2bcce16f2b8081ef78c205de7f95f496ad7d2092113429238f466103fa2588735e846bae6396a4c78f13c2540dee617dafff8c1788b5db47a358ed53faf05033b6df5f94aab387544b1889ad256f39280c38979137958761c969a2bcd532c500cd2429ac6175ae286546e8346696e0485abedf799e41b20479cf3da9197b5b7cf9f97670184b7db646055a9431f3fb3103f8c04b3d58dfa22d101aa32828880ad5d5b26a4fa39a7065fa5d572814ee84a08cf670953984cd6bc2c63591d8ef3cd93f5a05681c79095d8c5cd7a9683ea5a8d1cea4266235d8ae5ddccad6fad5758c9cf9dc02249dc39541f590567c7036956dc530616177667d57aaed780cef6758750e58ae4a8d4195a1a43b8fa00799fec786bff6c5adf95136dd17e58da164d56e03f5bd0cac05e721e523d59189523d656fad36fd5e03b271cfd4b00b70007bde774dbec98e82f24934d3c8cf59f1e9ce0c82a2870c1819af1fae57f4ffccc +MD = ae545216134ab91768e77fc9788401f48edec0081927aa75b3b4979d8d82975c47f23eba46e573826629be8afefb25b5 + +Len = 41152 +Msg = 750009a4a0721a78512011cddc1b8a64533ec606abbef3bb1b01ad3dc5b4c4ac98184083759ca2cb90b16d8f1adae58f1d021738a71319d42ac493ff23b37e5afab32c8329678944a110a00a69a36199891fa1ff261d62c6eea8556eb7509d1b627ad68a06fa56494be4b228139e84eb603a6c41720355fa2f56fa74c8b4a8569a144581527e914455d5accf5ff5d9eb69fe81e8d1ee7bd6b5768af89f062775682b8151561ac39c888d95e994cde5026e10e7da8c065ac347af0ee1856fa3df956493e05af773b9acb1755dfb513298351ba601ea727c2aafa98c19c017a3fce9698218a63c290389ec5513dca6471688c5c743355b6971b30d0f879825af342be256e081126de2e6e33cf37ff7ace22db6518ab3e8a7021c839c1357c14fef2576181f35a1c8be8c4132e52b6aea66ec974cbdae42c043b1b23da543150c959dcecfbf0810c1ff44ac3fd1292788098f10c1c46c903c9e3c43f925a6466d8e5c9283a74388e10dd4cc6c9fc2570e32dcc8b78736fba17a83ddd97bc67ffb422a693cbf2d30ae50044bc0373b22044b9d6836ed53ab793e5029e390ece63c1acefb03ef1031b2319ece4481dfaff3bb989746e00dc74b5469cf214a5fa3ba7c12f1df1f32b275166800fe66f52763ea96fef048aa78a02396769b9269dffdd1bcf3d937dddc7e682c86f8ccc4b1da405e453b0b73e5ff13a1c6585150c28b8295a8f81f57d75590b00b3a9d9576e225ba133012b037f08c5069606d5d73eef565b944c0e8ca82f4bd35cabfb09e02017010d545a995fbf66d04bbd0d81bae94f4cdc500dadd8dfe1aacb21c5d50c33c49e5348ca528a9b9be42726009e151c6098d84c8733aff159119fa9ae4b4ab3e0d3a55d0ee17813d0cc88b0737ee61f26ea18801fd0660a0e824a8238cf3446f84b63ef7ca8b0ceb1e4111abac696682e9b0d991be6c3609e874c69e9f3516387502f9eb82acd029be530936ae7be6dd43628062ff920bb759b25bf263a1a7ffaac68e925da15760b2a67d8f864c6b6b4461845a07a06612038570092160822de9a903d6a59329f9c3e3749e7c037c94b352ed6320bfd082ad960cca20992c2bfb53629ea0a9cc5ab9b2f74bd7c9a2c059e0c4649017d06f218d371daa752e60a86db3d1980ccaed5cba0d7ee1c56357ffb11044a0cfee412511f9ea051c1133b79ffc59d3e3ab1974a4be1fe0204ac16b6dd9ed980fb26082ca5b197ab55d0ef290471d9a57f545c81712161d01dc6666bd2746c001a53500616493516998581fe99b05349032db21bc124be091a3afb74903375fca4e26667e1d3ed25f4c78075101f9ebb5e942473bc5a771f7260228b874a8bf95359c7ec88c0345c000d872717fe105efa3e2023b3410175cedc87fb283812688e3000ee8bbcbf1b33ddf28f120a5cb65e7231a64656f1be8816a85e137aaddcbdfb8df85b27c1f618af5f078e92e85403d6d566062adc5c2694e02ea980c2c87b12eb94878ff17f16f8293aee4627ba72d287fd433b05d132ddebe78ae8d5ae4e2c863d9143d218c74eeda3c182af4c340bc5d6bde622b02568180318216b109f9f0a7df911d855a22a28aca8d6f3abbfd91b8cb6daa77b86b9e11bd1b90771f7e0d4b03f4868a8200046eff4c1793b8ed0f589ce76f885df49f3ac581e1f54dfa8618ec4762792d977d4d845c0b48e2969f0587559ba71879ebc1f1bdf373bcf4c5d64292989a826d76ee00c534a06082a78633be151c1183ea6ee8d6ac3993f4314dafdb1035aa0c551a1c9079e55b3991a44a2ac52f7199040b53d4f68efb823244d92cb292ccfc839980c4c15dfa41c32771a293286044a15ed9c0b8bc1c273085688c66f911c36933d369f6526624a7d7522c674e050b293123a1da091d6a93d6050414b1a1eb6eb0be88ff0ac66aa37b95d329ea8976044ad87f43be27d4c400589aa403a3fcf9d7e827c4ce439921dde29cc144130d9a71a162dd2261ec29cb0858fe373f7c7471fa512de5053b88c3df9117a4cc59547026538f7ff43a2bfebe460a959ff546469b0b229933d740f637b91452dce1980e0e59411b07463263216bb164e8eed71e745f8b30f6f6b13e901c9e956a2dcf12027ddb40c399a7c0dacfd9ee45f08fc12c5450f3751f436293c39eb79ec66245a9c6463450baf0de907a6b79dc82d6f76cf2592ad9da5e2ce7b5fdfea133b76fac3c683fd5317785ec75504ed52c1487dc428e1d49af6a6234faa1b39bfc3858b2e72aab7a87a37c95c76eb55976b13a234bd813ee27cfcd249b741db3aa4cc764d074be6943db8d3478aff590e915d8ea161d56efc9f5355d9f5d8612c45a856afe2fc2c7ed897e7191fa58a10ca829d8a9472c751e4462870e4334e0d2cc5b6b7941fdbf0d1418f3183624b467d3f4960e3cdea8ad251b4bf11070445d090e0f4a94b8762ce42363184da2f383fc03cb4de6b3affefe29514fab8266ec7969ff780f3a17d161676896261a84e78d1c206c2bf5b39938554030fcb26f078433e30b99cdc885f3acab9ca9d48f1bec083d75f5eadb073c65c09ceb4887369233620c1cb7b1cf02b9d431be173da8838fc96f2bdc50cf71217b9c608bd5020b3225827f41fc37f6578a5e4d2db515b8786d63b51139793e53163743c482f257f8d475aab3ce45374e752a3e5c20eaf58dd0587bd2bf8d0dc13c767c3cb58fde4d16ed845552822d663e9d79eda6b0a1949b5664660a944534935ff338975f09f993f3f76ead7540668dbfe7286eee235675665a1741164d74c3fd910350ec3ec3f48eeb480aa7d91809996e54a12ce59b078e452b8d998f4975553ce407bee675e1c746298f9e5e425b32f7ba66f34e2af8d80beb15a7727b5171dd22e55b6ad501a5f15a64e439ad2b926ba3e6c9c6cdf14c959f02c75ed1fe585d06114d30acfd30d423b201d02120c2b0554939b54a9af1cb8f7b82bb152512a2d8b31ca2c17c70d7cba17b8d66e2c9b019b6c8836a9acf9502a95ef20d6da896e0f54e27de276ee39c58dcd7431aaf5136550099f59aeedc42b3e569827f212065fd6d26c9a631dedc00ab1581707d7df64f685db341578695c29f893b028527b1f301094ba0c1b2d4c071b1e88b3a1b9fcc88386c38117d44fe13ba029fdc950a0090372cbe2745ccc1b5124014ee137af3e993e72624a7968ec9659dfe2f51b94ca41834a76a810c2affa051b2a14dcfed12d4edb499eed59b49f0d5c6854305fec4142b03924cdb24d8c3e30e5cb0e6e28b65468a7739474c1cc5729fe753383e7993d87ca89083d7c6e3bdcf262606f9ddacba4fc66f36cac94a3c335c69993649fd04b8b2344a6a5368a89e0897785a8f1311ab8e7ae83cd8e9fb27ec6d6f0bbfba775fbb20790607ba6c2309e9852e29001248d841a6cbd10976269f4703e86032f91ac83c57d26941d1053105739d34dd86cbabacb79f3d1176d67edf9df3b6ce5291e3702ef701669fed88d38ace371135df10a365dfa46bc3df901d845448f4496b13a4449c578f9d82173b14eaba04e72a0e0ef6b48c7e25eadeea02349e0da85061c0e3eaf426946de5265718451e6454add5b3457fb2649f6e2c5dbb418235ead3ac51095f914c55fa7a9c8161c77306f5e1e4bb046f47a54acdde10b8b9b9de7450d620203a8de35f212b4c9567dee8ef18d13da41d97a57ab3cd5c8b1cfbd74994bc57c0871fbf1b014ca26a666ba1a263c1f4e5241c4604c872c64312c57b5c6149d7c6e2c990360447ab672ce3da17abfe0752ed9e31f2f214776702dd72b49dc7c8bab254feb911638e14210d3a54d6ce9f70dee50d4c1bfd967f560c6559327c52255e89b3ab0fea74f9aeb36a63cd7ae4c960b883182a734c13751afc5406b19b8d502d5414e822849f399b114c7949fde4dce13b6007bfc1acc7cfdeac03adce7def0b8cfd8354e78d2c8ed815c1851349b826dc2b9a291cd1b4f3b46910ba117aa3ea006dc8c7c44bed5467c88c744d815e500f82cbf8860ba44d2594141e8c0ed4915b6c9fc54462e6b5656cc460d41334277b6c827626e1ffa6da33f92269c0eac94302f0948f597d797a0a508fcf87a472c9f1a7e925db2dc67a51a60ecd184d5a6038a37dccb81c674fa9184a676614fba019229aaa819675aef3032ae29f660c5c15a0c824082a498c5104d8c436ee88a9eddbd1de5ca37b1e23f8bdd0dc9ba7dca1cfbdbecf0fe5d90afc830d8299e28b74bad6e8f3ba9f71e86d11bf5855f28be519a4c3983203dcdde8916bcf7dd1efb6a8f0f1ce45aa504b4a6cd699fdb60ee864c45ae8fd6d40d1b04b05a7021c7dbc8b682176aa65625277173d29f9bb10b39a66ac49d7eaabef3cf90491908ddc8d4d869f7253955007dc5a1d90b3c9374ca1d2e0422841c63e74e38f168feab531d492944aa605c172627c9e5491a82bbd63501f5c593b38c64150cfbc67fcafb10ad427870d7c5e9aefc7e7fffd1f950ec628911dd0a0a98f898aeb0e808b7314d59481b0efc1cf876c8121195ef81d45b4a15d0ff638c3a236d70c91435fa8621f19c94db39dbb41c2f373281cf96a6c1404acba33ca2b062e805acf163ff7a4cfac28e7c3d8cad1d76506b69feb258acd99a5a5f0208cc35bccfc4f62f408e1cd95c605863aa53e951f014a4e95f5a8c9a8715893008ce2a3051b9990478221011cca2f648bf490e3688d6d93c183cdef79375b8633d36af071de3606fd0e6c53895dedc5925ecfa88ad2a5d5357701275420372f810a63295a6ead2ee153cbab23a6c811188c04cecbf77d7dba784c59805473f8b1d9d53606f2866fbafa45f133ce47b0e526373c74257af1182eb76d46fa97488de7c9ffbe934a304faae30d01fcf30bc1d36edacc83269a1742494cee3a2b86dbdd466bc97980db690cace7d5595288743bb3901d3a08e07f5c0bdcc03db81c6462556471cbb0d7d0c7a867f70dee90c5070d46ad71a82c17230306032bc671f01ffdd2fcb2628c4c84df76ae3f4f8c7ddf85e4c6518fe4a8403bb3012cdbed47bc469bb3551f62a5eb5afa4417fbe2646a2152ae024472fa5abbc9006681f830e038a8dedd6ec1a2a320dcffbe7cfc4251eb78adab4f3cd51a893249043ffa7433dce1c571d8110d553905285c5a40df3beb3f0d7439ac0128afd4242c9d5bdb5f392eaf3ae4baaca8ae5c06181b1803d1288d14868928452b3599d80724832d095778e65f1a24484586c8e31b49eb75bbaa4c0c09c71a6bcc2167afbc5bdb32db3fa5b00902b7a8d3c933058d6b20fea079623b247ce939b27d28ef73cbc9b27df89f566025dc96fb7f84b5950a2166299eb9ea002ffd788551c3e156fab674978a4c1f8b0af9d865b1a33b5bad5575fd203760c568beefefa320cd8a720b41d0fe9655b3397837b86777df08dc24f2c507c6e79aaf9468967d27fb3abb2ee1d05b643eff3bbf7b9da7eae9c420f6a7285b4dc5a78de7a922e6c0b28c5b891c40a99d249897386cbb7be3a0b6ff335acf25b34315891f7c3ce7d33ca8dc82bac8f12b4da5d549d1bbea4b4e070343d4616de2a90c2ca4a78c8648dfb7c683820f3af5024f7e5c7444fc0839deb48fdd8739c13fb3fcdef2b9cd07e4e19ff33dbe8ce38abe19d81bffba03a964997d3de993384c338336276cc4f8934df13ab37cefdd2f192e258f932b24e8c13a76bb2e822f1ab449120c4c7204332443c0acf26ccb378945ab98a958543d1c1fe320fe0f8eef5dd5db6b02df110e8d1eecf0c80a95eb35e7d1fde94779ef9dd12a3403403d1456affa0a3513086ab1092846a5d22493469b0188fa027c476ed7b5bfe21f25d1c85fd5b18e17d290b88cdc7831ca5e77e3eaa3ff8591468db4b9ea8946b42c6ddb6dd62ab4f255c8c92f6e4c15fc2cde355b1d2b31fabe099a003359d5063b32b662643c51ac7b590c7b478bf97077126376d8d4a747cb024533f7f9371d3b6682c6e6ae0a4e2b8daaf7cffd842d255996c33cc28f8057c2e0da9d2f15011252661fc64989de4daacb2c6e695f3b1ffcf6cbb2bc90ab498f917d8fc417bbaa3e8bf76bd57667c8f996a08d9832a24e42aa15a08c52d289b280a53480e451e97218d53d1a78ee86c234dd9253a46a9975db296ff87efcfe73d7d9f42a25ceb9353642a4df387d6e4dcd6be7605d9ce7dbb09088c9bc329219bba2378c813701d10dc508ee5e1b68e188d0f287064022be52d151c6b37b2cee5687656ca196a98cc4e6d10d91d15cc78d961d92475c3164e87434b90cdfb438d010e6932cf298af842d670579a632480544cf47c7fafc169b0298686e66134051c523c9cb54b8817423339dbfa2d2aa18636f702f216b1b9302e59d82192f4e002f82d526c3f04cbd4f9b9f0bcd2535ed7a67d326da66bdf7fc821ef0fff1a905d56c81e4472856863908d104301133ad111e39552cd542ef78d9b35f20419b893f4a93aee848e9f86ae3fd53d27fea7fb1fc69631fa0f3a5ff51267785086ab4f682d42baf394b3b6992e9a0bb58a38ce0692df9bbaf183e18523ee1352c5fad817e0c04a3e1c476be7f5e92f482a6fb29cd4bbf09eaf9e54c44c2453897c29d68a403e0cd299ed1f21023d184e73bf511908c5c103addc022907b4a972fdbab345e806833f91f758caf0206736eaaa2221ab879d8850ef7229c319959def1006c134d44df3a918a14c3c1d9cafe3a29e3d497bd6ab5d2b3d4d1abda868b4ec3982a301bd9d23a3713b429f1908135b3dc24f0d1cdb0721cc197b3b4271e381d410df29527ab63a510e902f7cddee16796738d5c0960355970570fcf437ef836ee235b5bd3ac53fc93cc149289fd876e982a340727ab6593697788d4e295d63527d43215e5bc546324c4266bcdc66eef6aafae7a2e7b48f13561e66b0c4a19427488416b63c5ac024c390229a021e013956cc35c26b7289c5b7bf13bca850b875ea74e0357aea40292936e750bf62302a0c73a5618474bbb632f71ed232ef2296c992288c85f848b7f3b33f7152d80e3132add0f0b13fa77d6e42d28202e175327c785a0bfbf94c49a971956c6ae3fde77fc723007027cf83b01ee95c86bc22b15973ef343b81cd66b10e73b2661a81d53a5c26014fe1b651af07cdc23ce3bd9c072172a5c3163e97a0f674d3e2e03c52f8d95483bef1de6fc189fa4393fc986b0c1d6ed1213b22350fa5f3515fe9701931cb38f83bbcba567e11f9513a7b55a6bea44e36e4451af743a989ab3b7adf708bae3def54b6dc7e6b3 +MD = dd98829dd867a261653204e0cd33cff499f7e67d2fc5141852ba8fb73165b847ff7201531a4d71744cb0d48d8ecbcc0e + +Len = 41992 +Msg = 26fc8ae143981d35661825c5fcc2202a0b16db0a7405dbea755efc44718958daf4776a49f2d974e14f901db4a4655fed41fba0646e011f6ff7ac92fae7650eda93bf265edaab5727acefa43ac9d47d54cb1fe57e6743d4e0f0d5dada1c4006510bba064785778faf841c007ff2764206b36cf280e632c2e868c01c0d9a8309e86552522d7ba3e520dfff79aaa7b375ac01c90e937436b02d6855a0bbe994df47a86e513742991e23c58059e471f3e0edbb1d83df98b76857f77cad0a8fdd5015dcf54c8e64bf055f3f87e654d69e4972eb52978bda1db00f1e1d8d2516c424fa09d18b59697f617d54fc6a23601c79e3984f93bfc2d151fde420863206b322a038e956c1d740f9240dc72b7897d638e7cbfcbfa5d93913c8516de15ae51113ac7125f5ee386996fd70d0727c02324d268b416262a6bebd186dede6c43d46bfc9ba6daf07136400af8800865629998249e006c521b1c819974186dc9995baee9d1da9ce35f198ffe35a3db12f94749df8d233310883c0edebd4210d0076d568d0a1c1989f596d5b41f070392fcc2967da6ab0ec3fa30c02bc2ea7bf2267fff40b4e9d566ed34bdb705182677d5822a898af653eef991620b358fe3b26f0a05cf62d264fc9e79a491985598342c0c528d9aa3b7140ee450e775910c935992066384542cdd91ec26be395dfd5a58d7cae466118cc59290096b139c3b077ebe7db799fda16c5ff2b097788faa4cf46ae0487dee69663d2b17e0901013a136d5d826341d773b6133eed7c66943ae873c2f043298b188572bf8f26b8b1ad32a8ea259c351f2cd4e061de9b3794dd179c223b2248f19ae8909291b166bb52fb22f78acc839c8946f0fda37c04e2d6844a35adce45fe63b3b4924c511306719765ea7a9c3134d235cb7b05c6d4666d5804630dec279cbd0f662788afc87c522df92dbdb349d14ec8f741cc22b008e9bb53142527f7b2ee242fb90c738d043ce664261bbbd25a4628feb9c0379fb094d4beb0bb24bc273f1996b0a144688679ea303f5c59d5b7027c684aa8aea946b4cccd9f988e7ee5f81724740fca63eb4f60e4df473759d0caedbb5b4e2ed6b292ca084a840b46d361455f6d1eae85190770096da6fd668de6a3815678602fdc76f7f81746431bd9c2ccd1039598d6f9e84426533f5304d69dc541a2efebbbaca77b246fa8e005df62d3029f3e2f5f733c01c3f8dadf3c93397c84a77b79830b6f7d14bb70870ccd8a8379a7df1c277049d269c4414c15ac00efd1cde3af8ddf1425516167e2398b8204be85410736d659dd9e1f3b4098093b47b07cf137e312df9c62cb55999302927d599f2c96958fb24aed718f63cc9231aba91c6bb98d8a180acf5f025422180216d35f68744b819c42db22065fb9302c4445151adc91310797218735baefb619f9b22cbc47609661edf29a68d967c972390bcfc649f9edf469dfaab87301c5204b816df1b8ddb44872b9427d7cdf464cb384b337a8cda826ab912f5128612b5f37c58ccf6ec9c598f9b8800ced289002da362734a01349e683c080c98115d21ee208f01e122cb09aac78bddfd74a8ddcd5ab9487d9d5b87c19f304e72527a0a577d101a64b0f5d96b18062bce04e2722cd6b63f6fc1add3096b22375bd9e7f3b1ca9272fc279b4d33058d56cb03b451be9fcfa4ab1eba04922854539f083562af917ca801e729d9b528980b7f019cf1052e8c34a9f4fe911e4f5d2fd67dd0cb838a35262080200343e9aca6448f0ac492fb724c06f4ea0ce05893287c9b48b2efed5279d2832c5e71d131a3d5fc9c60ea9ef8772c8f0adc9accace9fbf11bad47636b1f92509d4fc177dda08deab04a7e81a532a533ef84a023e0c0ff1fb81f1c54d593ea88f15bb535f718e6c9f4e5b13bff0aeb83f69992f6f559e067ac8ce16a2853358cd716cfa414797b2ac8c745367c6c69efbe9fd5ae51213a79677b48fbe9ea1decace5633abc4eb58daa638cf993d3cad7b5ec0ac26a9377b5877e958280d50e18f16c227265051053185f0b0ddbdd78ec6b2284cbc84d22bc7aeb59a6839080a222ff8fe39539261ba0fe31dbbae5ee9e4cb7e622f09ac5eeb05627d078991018d0340df6d3576157c2d5b3fbc789a65de93091805a28cbdcd6437288c67b26dd878e2f2495ec5c97fc89e3d678353abbbf01394c8b63bef74b47bc47f3a35f60978256155364724ccc6f5404537506383cce2feffac829de8db77786969e0452aea53511926c4cf6a11a870dcfd5b343f0ebf7f33ee276f32c3736dd15e7c0242b5b2ec1e940372618ffff4b73b3ac6f69ef23febe3f20c5952b6ca3f80d0d55ac38b5aebe9cdb4ba2a42f55b5ab6c2b064c365aff3ad1d65728ab83b37a66479fb25c3088eea3d7cc8b89a52c397d075477a1907861e495f0a355f4eebc45aa745ca4efee922b6af53aa0c23dda5974e325e857c040f394e0200e6ff04f35dec89c02354643dc75cb26072560fa8c0420ab8ce95d646953a423376d7eafb1551af506b926602178acd22f573c367f25ab8d01fdb628b042cb116365d06a42cdda0c24e41563a4f418c38bd0360abd69d24ee9ed511a82e2a39f14f19beb64799425ef3e89ead1689d7e9f18e4e3c1413365a730b4b63bc3fc10be8937bf8118b7e6c830fa523156b967fba9af4e253c4d75bc7057986567032ad2a54a6332fbd3d33253ed364f4eeb1403fb1bc653bb9ed3bc24c01d7a3c7721f3de3a52f4c3765fc02fe90375a1b1075a95a0d8c75f961408b674d1f4c4b6aa948c8e2b40effdf0f41d64466eff89c651f1e4f20a98c1cb34bdec325f8040293738cc38a1d1f94b40c4f57b75c903b5aca83ebea7e7b05dc293acdb350fb2324e8b6b278229f6b3388ef32f349e8d69ad11347af9dcd03024e01d28ffc37b3a5ccce1648c5854bd3df413be25d0a566e5d56cc3aae8a006ee1be3a82a3c09b5e4a5c57c0addb1edd39cadb4b41fda11e96d3e25258bae3690bf66c54ed9fc49787e9dda983a9cb99bd147af79dc9a1f2a312f2be43669439f433d2cd84db1598aefc0fcaeef53a4f94a681af18773c32ad9b62471896fa26c3fcd3b50d7c75a8e51e57ed97c95347e50856395a0d5c25dbf79cb57f50ff7aa1dad7d3338bce1154d61cd8252cfec8d9c3635d0c96e81456ad06d01f9e8a7bb55446f09b0f071925acc7544127231c985e0fe5d617c84745450a5fa187847328f289d4f01008097d28be2993c0aa894961c1975f9ae406d1470f2cac14d3a8213c0647d897b92987d36a1fc2017b581554e33d50262499223c7dfde94b6063c9bb2611fbaa02c0683433fe77f27ed123c0dc9d50c470475facbb9b003613eb47f651f90354cb184bd4828d599a9c3b9c2d1480087bb05ab11d33ce98ddd48ac475f0c9959afc775639bd951101bbe0a721f3ad1f53cc183f194c5d59468c8668c169475c867d26b1ed4ede462fc4066d26e1ee3e54acca32276e12ed7b21285a61263cfd1f366d85789b30a12da0f615c346090d8738b7b1d001b3f9847db8c3dd8d6f236d0f93fa600e53ca0235f8c8818ac733f35929e59a6d092867867ecabe08aa7479f1e2372f0d0e68b66d53aee615f059a0f566f50f1bdc1f2e26c1988bfeb3984ac2a0656c022b23522f51ee7c4f4c2697f5b70ab771f489e144cb54ccd75338e86c16aba05470a5dc6238b1cba1a243df42644c19d8180c86c8e2270afa52fc5cd58c32526ba6935ff0511e5a71bc5780c2b5e2bdb9125027994f39cbd1788bade749210aaf9598e0c0e45eb128600b835ff2f52b7aa8fecba15ab19ac38d8ee38897a15188045a69ba3998582f5707ef0062acec85a3be7bc74ab8fc3858ac07a2bcdaad5ebc8101c697f5d8ec69f2cc8d4e308740ca373ef369757b98a28e201c01f3a99986b6b1cc489db7c95d7523edfea88415e7121c0dfd119e4c33db36deae15caa128a180b492b7802dfd37fb0aba3d6c6bc0f61dfe4fb3edbad33c52d00b679ade6ae97666be6bb8800fe15ccbca17c5a91f8c4aaca784f14b4a597ada6012a0b916369bcb13e3e9295c1a4e18755d1a39ca7caa004dac31675fd9b9e4f43d6498f232f8c9db449a92ac8bdad90538f082896d45e288523677dc6514d610116fe4c88394495cb95422c7db07f6c0cfd1ec2608243ba19e86e187a49598fcb648065ed17734e0679e4174b3de58ef4b44df67f44ef1e0b9ab0f283f4312005377647cc5aa70ad7900577dbb65e5d9d3d2c316d9cbee8dcb2d6789dd262d64108568ec0634e70b1502cca89aa686c8900100f961a418f0fb9253712747cf6f16f979753d1d7f44642d09bef9a92402a95cfed932e0595172643aa7c4ade16a8d5bfede126e229f8d0874867f74a5d04768267df48798f7582a84f45d604c9d9d3461f02c2eb763b81c76cad511f37a92afdeaf50a2bd2bd46d98209a69f6506c0a0973346526d90fef7850a288f448b1b88f35ed38af350eb4e0f322cfc9cb25685e2fd11b5749b70be0e18fdf9282cd0ba2d87551585d2f87c3359e9aac55eed3c8ebac5931fadbf817454420b36f0d317d608df59feb5f6ea9adb5d38638efd5af716d269e36a13c8644685341589ab18a95df2d6c26c5f2fa24108141ba52f57b87bb8b8643316194a6a37e23859b13303f1300a7578a9a1f6257acc4243cbc94f63e8fcf6ab4efa8329fab413e39e0d625d17739c6d5ef7e2f315cf7bed7b063859f3a62f3526c2cb101e183cb9c9fe610c09908bbcf788053469ac2cf4b5b4efe86942726326287ec7429d173ebd8c7c8886efd7ea0bd8d953f6d0da1c045be279aa6064b7d5821a89e8a13804f13e115d2fe00566f460ebec4dec07a5df41cca8477e8a95ad762b0270c3138efd99cbf4652fa8d649c69967cf4c3a34af2ceadec0fb389f266b2cbb8b713e4f4b1608d8b71d169a94608e510b7fe64b0c73e99787751336d8d79c0f994a2cb852495484a636f3363cc5173272f5a04b7f9d255d3b6a8eff2d41f5891aac437cbb9a3b82a31ba32bdb7ae086a65bdcd8612f4aba3d4a205a9c40c5b2901626eedf8f2a5d4e29cb0dd8d866b81601105469a0b6191da26bcbbe4a89168a265b91469ead7ef7efcf3ebd9416513283cf51e177f4044cf1b5e50bc5cc1f794b3606895f415240ec144102046bec8c628e53713b71065bb6b318fd58eb57ddf36ab100376291b98d5eb73ecff3e4a41bb1cb8151d999ba7fd7ea1b6a833a38cd4e2353bdad97b271f303ec4d3ac3ea1dfe4caa618a28f9ab98caee7100411a2774cfec686eeecc0875b96312ad24fef7b83954d10f5e89c87a5ddf130f06e290632942be430186df5b3a5ba6d762332764240926d584fb54f0f565b6ebe622a69dc1ef25a66a435518193e702616272ba69f4fd98946ceef91342ad343897ab8892c5a4525a3b21830d8840525bb5b72e40d817f771e64e6df9c970e924b2b74b9cb1c833d28337749fab4ec52cc40aba0f1567f3b666dd9409122bf44b5e539a4109e6659724810a7f2498c49b3672461dd275f52d93a4548b4666bf7541895dcbf6865071c7072ef51ca6b571b3f8bab338ca639c16aa96c68caab16903607c809f315c2714d0c948bb010176e5a3fe196feda6cc96f843030d7d32f14de1dfa92d6ef183b2e4c1c128301172717bfb979e662785bc94418af06aaad3c7126e8dc7c6774b4a4b00a88cbb4c2d02889775edbe4d8e30887aa35ef681d818fd127696c05648830d6c450e2b196e3ed3bbfa857c7fb199dcd4967fab20c8e8aab1aac1e4f6420633efdfd707e2ffcd63506f8e2827b49f9639aa7a10ed6be11f347271babf017ac570bf0ed70ea658403c1c2f4bac60ebc0902878ad5189a9668416cecb1a4c88c9d62edc24052c87736949916c767d2561c158a00bb5e9e88787deff9e6decd8490b7269742e590103bd3edc13edd3f582b3821bb17f54478827122dbb21aa114cf6d3dc52f3f46ff8224237c87929012a50ee102719926d734bf97fab9f4cdbdb7f9b5d43bbc7785b7f9fca148249f4617fe4a8f6e96b044fdbdc1ef54e9ae0fd8e1016d1ef98c533bb9bbe7e70f9742f28ab0ba559a7b125be033121955ec5ba0b7c2c83f530fd88c07f3b8fab02299d338c60bccf0d1efcdeb6e1b8de5e351ade25cae13657c962759368cd9b2cbdb289cfcfc4b566f3dc223d56419063d626f05416741ad4d1cac21e6ec2a83ed57710bc8244727ad7ce72dfb744123550e5275038c30a71bcc78f6a75f63b021cf2b19a9ec46e1173d8b6e62c49ce9c4c606c6359576cf43362c4bda4f0ba3e372d55b34ecc11f36f05d698dfd92b60729da8d3a1b6a926dda24a6023388fbbd130e24db8e5c3e7725abb3ef57b914869a6c1e9376a2acf638f079b1b562041900142b10496ecb724e14b1f99b8681eda83a1ed44fb56b76c31e4b5b4d2d7981caa5b275b68f4292fa16f85f11719a86c3a2e27efef94a5a191c9f815351b871e3317f6e5e2430638a210b625200aafc8d552de61d04e63a9b69faa670753d73ea25c68c98c4115eaed14fb5e5ba4fa955bf35cc125ebb72ea84c14d1cee950230114c330ee5720ea89659cc4514f537cd5fbe73877d36ad570ba7e7c1444ba765726504191ebede37ee9e17e897480254a51c8ee4d6d444815cf2f8f60ccdddead7a5725fc67467bd58a12b58b794a37c2dd470a2f230c2f9f7571333be981040af82003b731f15a952e7690e0c8795b4687abb5a55c8c3117938a902c036d8f7688f2044bb3b629c6bf56380fc7d538dc373e1638818af78411c3cdbb826a28fa1217503f535f907024fad4a0e025778fd546566ff8cf29eed6641370ce40779c7ed50e1b7bb2369c45aa8d1c7a33bf64490c9cd32a236e5dccb589d44fb72366b47566689279c4520aae8b0afcc5b9657bd811eb7f4d6edadafe586e6e96d5609c3e81ac007ae1985b4df5f2d0a40c9954f2dc3f6017d26ce886a7c691a734911f7a87722c7e367820d1f35c5d986108baa127573347421cdf969f6522b0e901236fa03f804c6bf94180afd10b6960bb962e17bc61a665f1a57668d2877a9bb89167f29d63ae2723a6a34ed842deb0b9d1e1d6f553fce4f3236e29952acdf3bf52a8a8133d6a12ff3881fbfa6ac0fa0a51028c8a7011662a41c60a377171991d4c7ae82a7749d594dd64dcbeebd7e5b700d960031fac949fe8c5343fc62d34da6927da68771318eb7e9219ac2eeb1ac7c5ae7be9ca971659feb4cf3590ca6cff90f6a858a690820a0454db4c99c4404287c805c4d89893606cdb02a23611eb92a92e777f6c87bcfb55f24a27952900313070251ab178b4bd1b82f60d22c7569e9b18726732c26ec65bb48dc48be4029ba7ee0375bdfe2077f2f1d3febbb7582850fcbe975e073f71 +MD = ad9603b727fa2a408d072b0edcd3c9b7e2b7f565077de4c142ef88ca6dbc2a268f2785ae027c6101dd57cf4496652d48 + +Len = 42832 +Msg = 4a71964bee3192e8aa824ee369752b6cad4fe4a226d5c2fa83c710e588abcfad61cbaba036812d71ffb231db9a999b871ac6463063663d05f4c42e4f03101b53cf60537a32f4a1af75bec30969211daab3faafe768dd45a9daa1ed12b11eae643d35771f0a11566ab5adeab4ff961b9b20f3080d5ec241addd643778b95cf1a8525400d8e760b46a678790268380fc2308b93aeb6c9e9bdaa617f3c743524ae7b7c4d4edf16a247632559ca51e65280a14552cc9bbf7baf8ddc10948798922e8138ddda64fb60c58be1ef67af8cf0718ebcec5ef725806cf2a6b60438188e2740fb8014b2acdd5d6b4ea86ed38450115352cefa4ba46e726331ce20083d7f053534b2a23a935e8b9bcc1344507507ec89c779131bb4bc5c6a3dc76c6a8ffb64d86513f77f578abc87dace8cc8c77e6fac6b892de9cee087820b304df17879a2950cf288f351d88cda0b28ac8f042a1735bf7dcf386b8180252aa7591f9f706b15bcfcdb392ade68eccdc02825a3917fb043a56b8a02f5e2ce3c8af2576d861ab4c58162b34af2dd5aa313842f3e5b05a698be87513dd40c078169be3b5b113e0ce73eb3e42abc468e2b91450e2cdd55731f17a71064a2784bc9a2112df0a841887273436e42a150f1b7c7ff35079ecbc0475f4f5a2fc7c42545e2afb1b6b1c1b1f7cd95944b38794fd835f7465725f4f8c1d3e490e7da5c0eb6a9ce7925d43b03f7ac2f087ce82be32d59e1b483f94d96ef341b573550cc727c4611c6c6761a18f2ad742d8036e545f7a22302268f52155ffe381f90a171eb0765fe3d012deb4b69301995ddbb41f2f7bd5fb1a76e8f1e7480df4c726308f2f888083e6e522b25dbd263b3eddbae747df9dc459f0d70fccd6a8570631bee04c00aa46d76895622bb12f71a492e97352ae64d2075e2944adb19af2ddb129daaee8c772cb239f8ec9760583b780a98df6f0116e4b48465832e2cd0d7530d845fe47be50e99fa9fcde148eb99e3163fbdbae8ce04d379613027027f0f63535e9e32677285a6319751394b45b822d7d86aaf0bd7036b3813dc66392e38749a78d068cda4246f759c110fd5eb08afa61f60bbc8c662e426f9d25c3f52d50f396fb0e81cfe5d4e4cfa87c577401df227513a51ce1095c6ec8fcc89937177abb6af9a40e3e5a2cb1e5f2ffabdd96a82d23a52117a4a2e9bef42256ec42e92d298c5070390fea77e60266420083b70ea1d27326b5bd79fcba5bd778c5fdeb90c662c8190c2adadd0c8dceed5e4dac3908e9465dff14d6beeb65e3d62b5064cc195528488f777585aaf0f0a8cd23bc50e9d2e66efc910157d87b0d1726239e08aace3aa4c9df02984892941956ed317bcdf41b00b51d41ee0a031ee4be5edf6d0233c4d6c248c83d6edb84eb009351e43bb7adbb309ee0ab0767dfe4fcea7023a8ed8f85829c109da53387c4d4fe65b0bb83634977fe24b7590d15c0e7ad99512465635a12c122df7402644dd814b40ad5c0064f9223563a875f8b1f8890a120ff0207fd79a1462d64b0e42d16be881812d65e7887f7bd5b1ac308aae57bd2b7c02b4515bf22c4acfca5cf0c96e52702f92e33696060a34399a353090857723fef4ae34aed2ee386c44aed945f6fdaf1132e4dcd25484e1a8c6635e3f90acadf15c6aa4609acede34405056b7846e90de63f744adc9607077c7476e0be7e22c0b90762ae1e8328ea053fe139ec509c7dfcca6f888f321632f035dea96199c2096375d32d319dddc48e6147a7c0773b6add3507304503c3c4701134e6ea45f1e39b78c4694ce1539867d1005cfea10dfb0fe904ea07f356e58470423e5f69f876ea78ff0a7637d48f19f9d401aeb85b591c4f2e5ddce916bcb5bace5acaed1fe9d7dd4ab9b887a6d12b408a3ed6a36dab8cce4c32ccce4d728a57a1e232b8ae64eb0f6e1e19b91285250decba804a8b1ae5cd2811df88412e8caf837da0b4ed11ac7633e0a1b660d490cac01eb395fdceb1b688a01e003a19412a3cd31bc82416a47a60a75864d8e5f2decf11786c0aee77f0358a901e825b3331938dabdc9a9b5b84bf1d47acc2e1d6b1e13cd6b7fca2c0e3f7753dcb601bea2a515358d998c958fa16e8757665efc1abbe47d55e191413f7950a2eed1b81ed7f3ecc2ba566c723462eb0eaab0a383d342dd97d49aa69f894d9f06a6dfcb7c49622a12b294cbe44cecf1eaf31f9e3d1b4f79ad761f6ccf72289cff9344be2f7d9c57a614d92d643fcc0d9cbf27a190693e434ea8c476399096e51e429502d0eaeeffdd3fa7f36a937cb8a46d5d5026239bc4cbeb3e35665b1501c323352be927f67d58b165c07fee6b6d929c151c56f0e478d5cbf13cee483f7d8eb3c9bbd0bb3f6a8918a7170c8734a6d7ba0378bb57b4d9ccb961ff39ce52a2e182b7153ffb2641feb3f069a91454fef4459cf7bbbe6952413224fec1740b3c5c0e81da8f8e479e1a31c63ade0c48d068cd461be09b8e8cb3d49ebe2ddfd5847eb5ae6e37db1fc97c108d0d03e58cc5b5cf9357b275a0e3950f53afc7482e259a16b162c1781b7e84bed942b3269d396bbb093db9e32cf17540d8563663918a5eb02f4ad4cbc707d4bb2f8e7445f6b5eb2e1c206f4aaf30d5279143e3b88c4d3d007c78ba7caf0fdc83f442cfca25c5b48740b23b42941c250212fb679d9ac8b5963d8f1ad13ff11cb7cc021e39a6e368551b65a631682df59ed1ef3aa9399748dfc6f05e80064615b51b3ef80b0689771600bd58bdb7e0b72c5281c551e543674bbd3efdff7e99480a667bd5b4a1425158a51b9b3dffdefa591975903e2a27a16884ed81a615452426322b4fdd2388978b5d231648ac733f939b1d43b474ee87c4c26e822a76e45aa702dfcedae9d6ba2cad4622544a37e77a5bfb285b51e27adeda4467e2fff13bfb5d0bcb3480b719cb2a0777e755b7825bd081e6994dce0b155101bb663cf648a1a521dd8064a466d537e96f785b5ca0d6ad63e704c4eba916ab28e53aaa5e11188fd46e35221901d97b5e819dd7a1c37926f3a21453d5e5416d1c8dc6b4b315ee5175f5c9359f8b5658f946be37215a91e1c3b05e770730240b7f0d91087fd791be992cc30ba253ca452c27600645e6df72569a29bb1a2a4d0aa2fd20022ed6810bb05ba930cc0ba3e479cc09c199f8b03d2eb83c7c69340adf3ad50a3e4a835aed5e0ae231770381ab647d3205a7f092c6bea2dd578ede1c1da91da6194d7e8db7e4c3048a3debc20e7ee37f2eda6f159378d2a2b8f588cf3a604f9a2fc218781ff71c96a77b1513821b7727c9abd4b727ffd0033d37e4b2ba12d34cee22f1c87a07600f15c92fc4aaeca0e252b6c1d5e8b613a530c0425511135134d0fa8aed5a9835e461a29c73ed4509354665a7107a3e25df50195234e3f431e874b35465362c26acf791db9fcdc71877315304e540fa8f3807bd74b087380dee55d7eebe91359acf54117da6d0e5474e9fe95bd2d16da845c4272a768f513dacd0f2aa57f0370ac2039be3377b122e11eea32c47a02a096f01e0f3f560c259aa827e27cfd7b30f3b92abbcb030f02577aa0af6e231923b3a6d75619bb01dea7df6e4d794bc3c00826dcb5abfa6e1d5d65eab3c011a48b62e534ee3f7d1c6588d8ac14a351234973d11755d942179b7b478ee6c42aea002c16fe80b986a5e3c5fda9de03f8e3f3bd20a3435fc552a3398855f1815735a9979ffdb38dbce47fe7b52c549f264ae56d7d47264569665d2090077cff81cbae2de9f930c50921627567ff1e81c4a1480b4fcca691189df2b7c76c2e478ef538765cba9e6954a3b3f77de8e3b1bb30431ffefb6c4db93d8a86964bb06068fb6ff96007a67f85b39bf65eb04b35f13fff32f29a2080348f4c16636ea952f5257a3e5eaaf011839942f9721f00175016a4cb92716a3371db61ee979bc2261fbb81cdbc692326389dcf8821fca75fbffd5973484af06d5769f1979b9ba3e3cc04ae2fe40de7c78b076b2bd311eb13253b46b17ceb5d36d0802397d636f391e64927eb3c5ee6fb641e3d6bf024713d6c19940d941d5796c4691f78af335b3954d214892e23c5caab2b6ecfe0fee4e47bdf6b0ff9a88696196d0ec1905c82e1fee79e9121262f3c487625e00b67ea113ad5f2401354943db8d218fbe0771194ccd0ed8c7d2dca5a24478b24da262bcb914252274ae9269489e064ad064daf57a6d42802a9013e2b25e6c825b305511a6870b24d072ee7a174e11b5f6ca60534743d77790f6a34b7349a036bffca0106a7a53b38b0ec7c6e621b649a794aba321e51037b162f54073aad647c273ee598362a1572afeb900339d768e4950077598c59f48f261a45221d6514e29129a5d7fd4767836af3c966e35d4ec82891e4b2a79c723ea7f1b010c70b3b25a753e9cce54359f14bcccfa146f53fcb9ac6a8445564a40e017d3cda1ee600cbd083587dd4681546b83d4bbc4ce7637754656c187ff7b2899d8692870c408c5e73839af4b3fcc0091b10e5bddc7ae153bc36d7340e9ec537e1d4591f785f0766fa1958396b4885c3db0b44aeddf8e2e73b0392a2e8a1059f362e3aab498c9869cc0e3a52e2948afb60f7119639a78dbc3a92446af7489949055ddd32690f67f15129e7490228f739129bf37ed7d00b591fac969221dba9bdb42ae9bcbf309d85f1340826b24bf50659c1936d9fba83465319302450a15f84ad5a0752333762ae14f544efd946ace89d2f986b79af1e0c3fa1b9276be3e12556b8defaad6bddf2223644ae6161436946aeab814df504324a0cdaa45ae95728190b17be151637dc83bdaf6a31e4e211bc0674b503d55c40db213aa205fbea165d1a59a6537e97f19f522e2c3117b36767ff9a1183974ebf5ca982295461c17589ae4db950eb26bbdfbf69fb4942dbf3b061c69db5830436346d59422f6206d0078f9afff2a70cc1a9cb07df61ac853dfdf39f6082e1a32dcb3268f37e48deac3e85e98022f9708b663db1e0619ed7ceb77ece62d0f8562c89c35646295973939658e245c9287aa27fde0e073160f92d47cafaab891143bcd6e7cc4318deed0c77cf2c55cd7d548d5a76c75bba3a14e2139fcc44937492641a6572f1331e74a049b470b8184023d461cd83e4e274507685c5ec34d8696cadbd06ef5863632ed574cd557790b91200fbaaebab9255d470040301833e38f91e2792ec808ef3463660e384991f2f46988fd6a6b7b326c958f723b339af28603fc0d110729d17e24876bda426acecea24871a5d112b3056b7c8ebac5f1282ca98f18a043579172b951c255e271e36242c4a3cb8bfe4b8a413de2491fd4e8f5eb220876fd1083b48a4bbe15aa35f561c3940045ecbc409dbf7a1960d194d944514b78efa4f34cb61fdbcba3fa25694fcd2d13cf83cb56a22e87908c6bdf6dca6461c684db6e40ea0298578b62ceb37e98065aa2d1b9e22a170ce4364f031aeaad1b9dd0f0e004d2baf80e3664a06890dca6418a66f667a8116081090bbe651783cf4b4e85f6fd02a1714c2f8038fd09038364c0b40f7baea628f35f224fd0e3a0f37b782b21bdfc6eaa8df13606e559a52430e0397382a03ddcc7a31365f2d15d3e9ac820eebc226aea60060678c6051a1f428367b1111f50e25a9f5f6f2f6330f715c937cc7c074ee75ee8622cf38e0acaf604df46ab9e77e0388e86e9fb0bc4b398f5b039723d52f7d712e9920276dfbdd80f00a2b6802b3cfe1b0a54fa5d80fa80c82ab433173fb265000d368732117e74ec6c63d676e37ef7af5a3e81bade4269db17cb43376d9d855a3d88d6523873393782f86fe5292cd1b6071535b66511b08907fd0700652fb46c0b079459cd32b16ad4def74d64acf8e981679ad29dfef16c6bb803249edf7ecfe64125bb38436a10e29601324e95f9a469a41581e140b8ffc38adbf6a32340f06fa42ee9121bbfa43cac22161f7e406120692a66f7bd53bd9ff3d618fa91b777f7def485d3224eaf339fbe7b8fac69ba36156dd4199b6e206171a5de1db12eb12f203af4040d839c67cf5ad4f7c6c21a2b37446bff8174b2a882afe874f82356763656c62d23faf669d96bb4e044060b604d4290e1f5e3fee5b578ba98dd41b25d7fdc7ea70c11478a3c858de1ba91f885d5ece5996f586fa97874b711e6e66f557b30700a2c62fa79772cd27470f28c0c5fa7cc6e642e8f544a4870589bade7eea6f76cef1b6c998807c635013da410545907d7d96af2d876b95888d561e4a6998195a79e4f9aaf666cd5f81047333ffe40817a72ea21c59134293320e04735d6999fc2c04f79a67524f0ce4a440c557aa4a936c36857e134493f31b38d3220366d7a40dd71961934ae9b19e7aaac1b59f3e39f337bf1b5d0670ee725cf31d0396bc9a44e7c5c624598395da0e1aedc0cccd5065b9b8bbdd62c1ce5c02cc2c04022e25fabc6493bf840601bee9f6132138dd22e942d8263e5f6ed903b3c619aeb0168e57dc5f8e0ed5583d7292a7f980eb57f5a85c872326065f588ff649abaaaa5d1e82d11c80b95362911f91966883ee2412ca8e2d7c3e5e7d922854bda9a0f8e91aa423053068060c45ed6f2a27d5482ac1766032f72d6faed1f4548adc37a0a4cde4588168c2f73fa003b3ca001c015349d45bfe5d9b41db5b1e7e180c18ac757e6bfaf7ee6f2de1eb8ae5e0b9012286f40d06f97532dded7acc5acf00eb2343746091d18b18b0db6fa98ed31b2bb2ab0849ea8c09974aca7327711882570ef8f8eca376076589167189350bee43b9a9ceaf8d1ddf75905c91564a595804747b5237ba4e2afdbf793c5162f0faf0406a8e687916c172b8891b816dfb4b9b5db4ca685dc1bc895aeb172a9dea06db4dd5909b36dd7536c83b58d2636723c4d28ba8a8153784b06356493c6f61dcabebd21b714adcc36acb59916fb304a826d9e8331e68184b1be1a11bae5fbd42091f4978123f7975b6c6cb0f80e539a26a7db3b4f3e0ccd971dcb4d5a9f666019df322f0a59d1e51c1c379172e8270d837c3d4734e05bbf65b5d77bf54bac4e10e6e45c953ea322134c94bf4a011101336b533b8585e4e6a816ad220d8353fa905989b4b43b01dabb6e129ec001a811b0f5ab9cb3873ebfc8a0ead425cef4023297a0ac09e7646b8f012fb4973252ab869ba4cf317ccfc761f4ef06b096f2d15231b7b6e8bc5170f8a64a95123bb75b2ecded57a1df2e79ee73483e4073d70489a84d79e3324f77a2bdf1b4d3863c9d041cd3da6716c163d8bc74ef57de16f8437bb0499bd1b4ebf7b8c3984daa68edb108f6ac03cc2ef1ab20f39e593e39490a2caeca4523285a72472ec402f0b2d9c002d460fa57ddcff05152dfe73cc463682b8750a1af202facb991ac7621a0cd8baaeb8ddd52443b22be010864224ec3c7f8e89113ce22e801b0aac63995b945ae61aa770f43f8efccd78ccc62b71f06b42530f03e18b7100b9cc8b59fc572de92b7afd12295624a593e64706543db98b730fef263073344450e79df4b595404c31d5a1089cf26d7524316b8ee50faf64bacb11c35224dd128664cc7be99d334ca133 +MD = 6c4d0c81602eecd04e59820703e1bf6af121368c81526ee2231b430e127f0492c558899830ebd791debe613ce0ea0c73 + +Len = 43672 +Msg = 62116b5a083fccbd8fd9a673e6ace7bd17259a921206c3f0ac5d8a71e7b79c1e7491cf87760f051489f1529603c261217a52131e86676a9cc7b0a6e72afaad5c69a6b07bd15b0c3e48f86ea98ecd3ba3c30a2f042a7744ef2c66d562a0e7030b493a585ea08aaae4d4d842d610353eeafc34346d869f1892e269600acfe465d41d340d576c04a7ae367716431061329f2cb86b802345b02cf19f8f06415a9d5fec7c188ebc30cb4375bf321816bbdf695c7e1c6688d3d26662f2a97f7eb27153befac12c1878dd4c9996dd7eaaaa0cf1936d8f463daf47e83c49f89c0c52aa599b964f590843a770abe6619d559683dfd96f0b49cb43d659878bc28675a410188c380c3c15faef58b296049c9ee70ada366bda97b9f549624ca25064410e6a3998c83efec6037eabb68e0fa30e066a8ab34a42578f2f67aa9275ea5ff6fa8263c82e2ec6a4c71c12c0b6cadc2b596b9857f28cb2d658f7da61ecd79f1ecf1e3f235224bd36ae9035d6f67c6d8049d4ac2b4cffcf15d7c299c1ef614b40f50774b11c670b0421a4bb03366e7e923f6f6d3540e5d7d4169090bb66ce8be5d405ab7a7541d796861e4d4c5ee938eba102847fb784f19b7c28665639678994d4df8c8743f8497546c792bb5633c212d8569811972646f37154c49b51746ad55d5fbedf70d58b28ca6733570694458f4d3352f1ca11fd635dda5290943d5930d74bea8ae220c23779c6d7285656e9eb67605a29368d3f74a983b73feb097c2eaa6cb7918321192bbaab27372fc0d5ad8da757c1c5e434acbb179cb03e22fb563e8acefb3920b68af7e0ca8b7719325d29cef2bf5e5c0396fc5ea8ea76ceff31fb6dd6d0ee64c1df972b692c18aa2783a29ed22de83fd5b7d42084f57956b0454adc7818893663af0255ac23f8bbdda860df9f124dd3d199ac24d7d93102351d91a05cdcf2dec3849f263a7701937c53cb590377746120c3ea334a9e8519b73e3981292411a40be5d865bc30197c2b0d4bd3a4634530e9bdf815854d5ce55d32ab4788f6cecf605b14dcd9572abc125d48172adea88a55103c922feea0ac50804eba205c11a9ec6dbc513af31b9c5acb2aeb3ef185b58c432071f08738b7b7b089a29a5dc278d7a3368d870cd4642bdf591888a2c4fab5de0a7c72220c4ebb4ac6c69d01c9854985eb5867ab3d5cac223d66affb4da1f86964795ac604b884d76cefd2510e18699c437982d63ecc061b3e9c5c0408f27e6d9531537c083f39dfe3e5e05479795f6fa7ba8198bffb6053c58436c4de356f72056c034b002902e892707113f3ef54867de10cf6a832e35038e4e643b5b1f3fe1cf2123bd4bf087ce3582a9462c3706a2eb7cafae1b9b79c0185138977af309b428a29546c4973223d64b5e1b03edaa2230464ab52d803bf862f669f0a7751d0dffef09fb00f6b63085eba02c3a5bbb6c3908111e4d7ef3f31a9868c58517c255b140e23895817c5ad0ce0fd85433a2f7522ca357dfda5a669bd1d584785da231e952ce8dd6e9fd29236d0dcdc5f8094a384e71e06934a7b9531d00cc15a92519048f1f796972c1220a632a7b240b46db47c7fd468e109471fce49aead19cc381af706579a1ce60cbf23ad64ee2fff4310d33a60892f08916e5c3049f20bb25e22681210d345f448d874e91d7874899c1f51c2c953c56fe1eaa32ce27a75694d1264be2b27597e4ed1628fd93857790348bdbc17adea67bffb6ae6832ca21c8d50b3b2af80a2aea714b547a11620f7fdf6e0d3537ee818b4097b0633f0d9f1a4461d95a4c566aada0735b87cfa162d148e83ad84b005a9477c9c33fbae61101c5a6a0f13deee9a6f14a98b72cc8241cf796cf2b22a8a4201bc9615e14e83a27df661ca03b282a7eea2db678b74ac5bb61f644be5d4bf0d69313155f0b987cf4d81cc6b7c2b69f9e01891f5d0dadca452e832602696eb2f0744349b2dd5b5be1663719d8630edb7cde094dd48e65a432a3da0d87c5857d3635b698ea28b54985f0318062aaa54093b61acc6fb816d61c784745bf0024c1f06e096d756c4ae84b1cb8b4e6f7fe718b403a058f2915f26af277793897c103b7739841e516609ab9322911e5e98ee0cbf2e3a3c34ff76b96c8c71254faeeb503ed0fb0a9c5aae358d70f11efdddb10de54a401ac9b4fb43861d2abc4a812786e40bc3433e89e549271e74f556367741acbf7b99ba9735eb834069fe83db0b04f054a3723fdaf60fea92e24b718c8ad39ff6b3620e8f6edaed5ff89301a6def3ea12643fa83428b05d3503ca54c530e94355b01dcd86ec374be19d24ccc8e97a5aacce518081c454096f9e1809cbb2ac224539710063f92b262e2159ed2b74c2c98ca951cfa8122274a97ddd98845843c32f1806ae0edbde05ae4bd96bb5c6f3bf19bde69d915a43284966c207da69d6ae791385df6eda7770c9e54d4e502934c2bbd2b9f324e4dfadb9226e60b42f8f6c8df3969b6d401fefe7b55c9fe3e3ad5cdaaf71d849f71d895f798babf9f09484d17fe0ebf253fd0b7085af65553d8714de1db755e8dd2546a532beee93f50d7eaf810cd6e65d3a4bcc1beda8907fea7230e43371e9dc206bf217b133698623e38ebfc1652fa4fd38633fbf707bf1fdff36cc8c34343d3681adee0c8163eafd39d503a89fb6716f589dbbcdc6fedbe942599d6ba6b1488e0f408076e1696bc50bee13698c630bb736e356beb10184d5c4011e77d04944519d12959859634fa0de40b7ab341fbcff579bd73b3a6c35ea0b971859b9e27ba6b48bf51af439dfb83c33b916a0d0ca6c452f07eb68273650a18153b8696533b6db1367a3b7d46335ac2fe053d75f7e288705ae77431bcf2e0e29973de9bbb5a89a12b4dbac1a233fb79cf30ae1b5205ba5879486d32e48acd8f5ac9040ca49a579f0a46cdaf466fce3e2bbe2c7b8f82c271b80c12149e8f4894f5958767c36d50115fffb494a7697bb69008490524dc4962b3bcf3455f82ba89e673d94b8c65fb9ea8d3302059936c49a8998446a694b7a1e8e5a1438c07cbe4a9fe9a1653f6c29d516b90c0b180288db20c5ece892e8595c3e07cadc880d52bbc601a56dea23da3f61386f463b228e958bb38eb311c3bd4d16805d279806ec58a730a9b70fad53913756349d49be5e31930b35b52e052d59dd6dd5033790158b091cb32bf6311c3160bb62f78c0081150075e6d530d632e85a753b57afd353bcb36dceb1e6d8be89a410013e4a0e7eab9a98abfb615d53625641960b46f631516eccff3129cac0ffcbfd1a59cc10dd5a291d8b0f07c3182f9979ee06452134b302e15093052eaafd9c29b3305a2f278974ab8ffa6b2f09b7ebc44b32f47ee64a3753c8bfc32c05eae03dd7ab3b92e3a244ebbda2d5caaf6214cab6769a32ce7ed5ca6f9eaaee582e5fe08bb2b963990c61851ff08cbc9199db3436ba806874b8a3f04e1604992b31e1bbd92d1ac7d12f9320bdccda2c37c20aaad4e6ef46615e6a6a6c101758075a2e76c804a7e81473a2649d1f05422a4767d397e32df41cdaf2e3d2752d5172130db8601fa8eee94055fbc9cf5628f18ebb588797829b2d920301862b8cacf6c44829aa666501d9fe758a49c615031401cde0aceb38631df0656c921c7c921bd3a572adc225476b15cabc23ea8afe1c0667140fc79673735adfcdfd2e472b68a9ed3b721932eb27ed1c366125fd3e90074f9cb714e3f4b73a3bccd04b349e65aee72bff55d21395ee33a30b5eb5eef86b4e1facb8680d72f73f10125a8a149a4a5deb5e5c4ee83e81d7a9277dfb34dd9a2c46f79d6de72bf9b442cb4392b490e615239718ee91a90ccff0bf691738c5fcb1b89fa939a96aa8610904ee94a7cee8d97ab06ff9365ef9e421da0c51233bf9a51dacc6167cb76c100ec443d714dcba6f98b34bb901e6aedee4814df01dc4f9cf1f27db4a889bad87f9132aa52443c29f26a7937418c89585e0bb143e4dea64f86417d01ef49dd38f71f98b44fe8a6a33cc952f73a38c14a0be904981dc34a2e894848ddae94646f01e7f4efdcc3919f1318406fecbbb95f92508d502f22a1b675876f9c68e1c6e72a9ac5b18b3d936a3fe7c025cb7dc7f56be2c9e09b555373d58f6fe2a0ca9b4ddba899addddf12b0fda860ad791773a8031038dde503c5f313b0b834d8a757ef8f81cf39472095ffe6ea807b57e142e3f25958ac8e968f90da9be71783106358c0c6f4f8499a93a3762ecdf3fa83cc35a43eb7e10a95f6f974c16aef329e642619d8a94f67b5a24845d5a7bbd3776619b320c4fffb7ab2798c91b2306999d0b3f5473ac3240a385ab07f9c377534b70c89a00e7db3cd38bd7cbd5b8f9a9b1faeed9347d800f0dc57509d19fb4224258aa25d02cec5f60011ef84d561383ac7635d3d5f128101f4caa0beaf8becfe381097983087c49d9f333f88ae39d4c16e6deeb5cef716d618312b44db4db80b653ad3e2162d121c6c8df749448df2f75b4afc8d35ea54b5bd074ad01bd545e44375d1db3213410b0e8ea14746e21525347711341280ad5969c9a9d0ef971901493e3bd402fed3e1ebb1c7f313cabdd3707eb73af34e83099504a2d7d52793eaed005c8d07344d298a93d5ed399c4f9aa5ce791246a8987ec524d0555afb6929b578ce36cd581f4a61a1458636fb6ce33ae2b14a8b23400180c6bcc9ef76eb2628f3fb81a3debced1766a16e7a5c7835a6581a543f430c3a4e46b2b6014eac68bdfe8efe493cb85a025073f6a234040a7e9afecfe18c6f9184417c9a4ed72f79fb14d30d2bf69449c8fb37cf1d1692fa3a37d90e0063ecafd93354f716a4d6c256c3822ebaa0d314b1c367586978975d5f9b53af2a7e05dd9398e64d073c54fa5776f6d373aff74373557d1305de93dc5541d913be1f3db379eeab1c8f020c5a73cbababe588636e840df39f80bd2adfc1d7f3ec39dc16b9c2a11dd61c9a7f8b422e3b189edec9fe5a79754e4898aed01baa1e892c490369245ca91a3e7a2105391b0f99fdf77d6b6d044cbffbf59265c954b38b13ca964a057de75973059340df1eb3b08187004e325b1454e958980961447d527ef541c4fc81630448d138d69ab5a1ecd7e1f50f40ca56bdbf4612236a15c69fcc3d9862500386bb3e61a43ef25c64bf5fbcbe372efe7e5adc22835c4a3519938a27fcbac670ccdea24b47d27c8f6698876bde4e535405acce927e0c982ef0fe4738f136c655cfff32d2a639afcb4218fd63e7cd3467872414fa64ccca5fe73081e5185ec63eea8d6ebc41fcf2ac61b100594d3c68a57d613deeca05576466caa8a0d4ab4c78b719945c9d64eb8f5fe16ea07104569a52e4a7c4305ec5c8ea3d4a10b894cfbfb02462283b3a0100972a66de15cd94b2921ef13f1a31abfa0c08d4a926b3d650602e46c38db4c98ca21ca7668de0898ac58088a3fa16607426ade6dec180d6f741a7c0a3179daba00b089ede6bf5db8f67ba0c97528599d3d49cdf35fb747800cf115e4b6b3d3dd72caecbaa1265d13cf31bcb8db5f79e7580665c2347170ff9730b7e20eb1be68e915f9c6e23c9211ff22663fb96f514e5d49abc3b36d1256de7e6aec839c23c52d39baf7f028831b4df7a546567f663b12b9a9de23d4b4eca68437ea5b9c8a5b06df37361513b897825882b5fbb8421441ff66fccecddf29bae925c4dfd87c923caf776c9725baef66ec0374f0426c42b0c3ea03fa811a75e1563d62577980d29650827fbf851089c15c336b7d446c2e28ac3eddf017ed38e27386ac0ba61f83dd6b6059d55c42cf5b4f1783eae6cb3f70626970f8b8e0da86e7088b4288e00dd9a71ae021d1d927fc6eb9a27e5210dc528e73a6598c7cc3955bcbe546474bd952adb6feea0d5cfb6b6120b182adc36f94d865655dba485cd776d8a45d0ae84d10243f9a7a3853b271cf54993e226c5fffe746974a6bcd0b13e136aed0f940d2dab5ba9b177946b4d6615e40fad694145b641e2369c691391343edede73edad17a0831eb0af8be6962be4590fef4c2f670f6f5f102f41e4f9d450647e9fe3eb0b6c4ab719bde4339dc8e117091a27f6d0546d4e95d1cfcb37a8f88a62064f5d95791311511535b8c0e7bcac7fd0852e1e4fbc2f3c167b1cf72c87bf1d29586b22519cabfb67e90cabe2b797f8850c3bad3bec8f778fdc70a4c98e71048bc79a5e7017e57d088695bb546267f7b9f5a609b37edddc805c6cbd2a9d5eacaff571867f455c5a8986ea7bb75d7af1e20a03b040d398dfaa7347ccaa04c699f86a7756b9858f186d72817986096f7b8f81cb3d5e9b4ef550d9b84fd285574117af123bc958ec4b16d1e1113ae6a3f93525731d87267ec235c824b33e7f7f36603be8a229400247381d8fef5075c6ff554d71bd351596aaabf723933853acfe7489412643db4fa123bdf470615726f272626db8f2d9252345cf2b6c7ab26eedc72fe234c37b42fd7c4ba520e7db62771f1ccd7d4af1b8d075b8a2ab501c4398da88125a02b08a90a44f189d5ea30801add4f79697ffb026be5c2fdc62e1b984113a78029c0b652f3e20d532202e7606c11392818443a98aa222397c2db33f442dbf79caf9fc811dac79517bf6de3b1adb6114ba7a6e1390b39346071af1533d627f9e2fa6f45cd061b113f72d42c5926f3604cdf4ff7ccd5527dc19b53c83f461f36b8d1d93670c0050a3204dfcb421ff1ad9288e4843851978720076e54fedaed3587fd85a2e150ad07583d35c752dfd780856a109167c72ed9e67ea9c25ad9b67eb8471a9108fe3c9019e47f2873b0ce618d4c7924407e3ffc7cc8ac193a8da59ab174410ccd12da2dddc364f68cd8fed912f8c748abc0f37648ad1e61853cdf10dc4fa11918d3ae670ca08d3a84a08e6f7c34a30290d371d1b4f5a7a3252f8f68a09fe3c3d18ae1c50e44a1fc4550a7ac33c9b55cd700e2942767f0e601aedb2b642bae0fe07f9ad04b774942b63070179f7fa45d698f6e4809cca1320100ebe092bcab072dfa020e2c002d16bf881238291d180d2cc83c74c1ec628f0d6fe80f911a81b2a143410917a9f47f489fb497376dbb7509f375a0b98fd9060d41fa41c90dd91822a17e497538478639be7fbd3335329ce8574055587db19ee9bf48fca25d5b42995ee254af76cd317a2d9b31833e288bb23dc619067d90608931fbcb84d1ae37efc094b42b2b2f8af4342f7b915043484ded2f772b591f52d6df3a33d7337bff0a10bcf1531f14998d1b6324c3332bdda3afa2f42fd7057eb6102ebe034969a3d49584918e1925652e2960b383ae89519bcb471a7bc0eaec120efff370dc212a3499121e43e30af6c0a74eb0388a05ad1c88477075db78a3d31fd45a86b34a9c11628e20dc436a5429dd55a3498f46f81030ca7e86f255abdf8cd57cae988d025539211dc002ed8853139b152085f53a5e09f7cd16cb290c209d2ce04e519263e766f39f57e83c9924914b8e2434b97cee5cf7e48e309dce7d99fe0fd0a700c7af312b2d09bcff8f869e8b94bd643bc5a870f24b54e758faddca768f9a62803695e2f1503e48dd72608483b153dc231d748f0f8bd2b803982a76b9ea164ab9b981c06f8e5e527f4b99895d6c4e65188c3aff762b6f6d46ae4be6f2a7aa2654575b14ca72d1a38d211bf63e4d17c7c21be20950b392ccc8462862474fc0c0f8190b262d81ff03aefdcd1350dd14cacad154f5 +MD = 605a4138d1c96d183b19a72ffc23df842c10c536499245279bbe9c25bfa6cbd412b1c7f00997bcef5eac8e79c45b6718 + +Len = 44512 +Msg = c042dc5be566f9ac3cc00c4e02aad988b2c54a2b2590b4c8fe3a5c2045b53adc520cfd7fedf64f98b3ab593cbcf68ab37a8c9472e49cb849d4a744deae925a5a43faf262f5c722491b049e84a7ee7b5e064a38ed47fcfe4480d627ea6daefe8b5bb3c5ee4401fd273c72e10e0bb734ef1ca83c8396d90f1fc86e0d2cca30aed761e07e0924cb659add9e2cc2327c3dd0854eaa1e185a71447518ff8c0d40f2a61f28239ddb4de40ac82f868863631f6709e389a516a8ae194f7b03f27d0853605b34be91b2b001dfc3cef848e594611e6f10e2ffd8ea4e081d40244663ad586ddeab56cdf11c4581972388ea01388b5c817cbc16a649d778a90e6770075a8a367036f439e0b836590cd54056ff77258805cf1fd1c8edd3d1b98ed658b1356f21d87d9fbdc7ad5ecde98d28742778b80cc4b3141885fdc97a166778e7a9669197e0275f41ed224546f8f2472dc064cb4f86cea1d327a242dd88425503361678014edd3cad9b40712dffada5671462e7b912c8d1eaf403c561d6c77695a26daac5eb463fe9192f6ce8c7654a0b699b93b2324aa9463549da6eca9de2863392b14d7f0b6fddaf16bee118c33f02083757a2acfc33cd319b096c2a6da1bc32ae15ffd2d3d572a51ded7eb96f8b32395dbbf1498576683222dbc3bfdebc21e7e85c45ab47778e426e83297410368544354807d18e7a007e05d7dc51993a9c99691086d40e5f1acf2e08490f4e49e270e8854d0cbe487b5e6d861da84523149158b82913d195ff9488024553d3cb30069efb29c2bee7c31a826eef8b8b807318dedd9831381f23d9a2fb870844c4594e7e3004ba355fbefa6b19bbc31358a07423063af6ea0770e6a47a76f64c3c4490b1ae47bdccb95646510fe71984b383ed4ebb77299055cd02b7087ae4913cd9145ffd58932bfc72455bd6dd52879904cd8885b794d10f2177032cfb9cbbcb0021aea3a104f930f940b2f80339c3130b5af8ea62fd563f568baf6e61e473f2a101c92a88d8de5dd57f7dfdc395e12880dec774e02dc7ec5387e356158561b8a4fad61a77d6848ced4ae56b842d88e14b9f1cab9aeccb1f00b3c96d7d472c25f155fef9d5c790c529e912ccadca614454e62016f6010adf4556863a02f17c41715a68510a73ad0e71a32ba7a834135c84fafa3d5d362d340ab945450c4dfb150a503da97ea28171adc25985dc33472ec125d3a83851dc2637252c1704214fa8a581a48a991cb4f5c58cc3edb18fa5c4f4add3e0ed1bbebeb4e06337503620022b33c67bc3a8efa2a14a92678f0fd42506db216ce65c7c036932132d5a54172c82afca046410da812a43ed7bde7d7d59ddf7e6d489dcbdfe3f6564828942db2d943dd9ade41a1c9946c1fdb2069f4769634949a140622ab51cc07dbd44ca150d47241bffab8f5df3de0ae9936f3ddb5c7e18735a72b86b32ea8a8766f5b26dd585aeb78121364795db67daa78221e03a18ae8c8786a4277d8f0ca90603c38a8c3521d6bcaed980892320f874a512ff0b1851bbb0e6ef069cf58e0c24d6c5153a3fc69f36bb3eb0d7a07d6a8441d7e0d8664a285ef961b2990257d748d680b5e78ae53b79ae2e808538c6595fbf392aa8eae1fc1827c1d07ba0b133fa6bbc139c00c6d10df171979dd542ec8b850086848c5d5f67d8d90b4bb6e248c3fd40d76188b08a78eacf9f265e3a4c92fdf49b73340878d2746f08102b333d2af4d5a83c0aed8e4403103d29bbf6a0fc8edc127dca2870e1634c72d2e9ec3bb8b8432e376fc304f8a3fb1badd4be114f9f8292aa36066e1c0e38ef9ad75569f3b15212599d7b141d315ae1ba91dac7159aacc40360ea9b0cdbfa276fddb6f06547c9fcaa7d5ce83a17f33758da91e9d5e6234f8f301b1f38335cc459e356f796e3729333f7b0a5d7bc8ec390972da018ebafdd578fe321287f246b60d17ea70deb1380fbf4bd767d88f53069b0f41365111713616388c965251bc68d8f762852c9756b0a5acd81b2e3ef24ec0d2f6b44c0259bb7965340768f097de70686a1ede360fa691326ee01354347209625cf3d609f1d610e8caee323b638761cf63a67a39cd81f0510e6efe6ba430d342068d9594e4065b57b3b354be99e43ba0d1d4670f0ab341ad591065e1cbdbbcd665d9f13faadcd71680df36e6c5755c9146f15b1251cb138bc16cd063160334a40d718f76b0ca12c9a4fa5f3050cb52f535b59d003d29d490c9dcc44c0d17c94f6feca6b6804e7cd5a27d4447d6569d612069c34527600340e508c8193bb9e91d0f93fd8bb3da93cf0bd07c89b097ba4999b6545daafe3e10a55942670c4a22b16f1ffa72a60ee61a43ac6e729a1f2832f403d6b63264d3847d46c9920948f490f0d903e7e15bf24bdc69909edd4d75a1e1dab0eb48246210ff69d446bd46dd304767c077e03236d85880996b14b3110ac5c3796966cd684a8e2ae8e182c44b03d534b68f4d3222442a99df63bad088f2222696bd18c06495bc127def1431dca02cd83cba62cc4313d50de9253a365bec89acaf52d89dd5870bb919ebcc2ff089b0cae975eb7127cbea652d0c3d54f85e5e9e19d720c63992ff773354250f3524f375334e21c13ed0dd3831952eaceccc23a36c967bca1f5e09e550b4b9600906877fb0afa02cf6d71fef9d6c78bea7ba8b352e2d5429e52cad7bf889f3c2eaa2cf32d8170114fe234503a6deb5fac7bdd7cbc518445639a36cb3a1405e98589e4d471010bf29a369cf0d048860f1bb2a9befc7d3c6ef6b36ca24d1746450e13d7414ff2924db84ff20643cd60423f0956a19bcdc5656187b48381f92af9d0314f6350bccec9b2177dbc196640a121682b4c20abe6d1acfc56965d2279add3cc9261fbc7870f8f748738dc7aefd3c8b86fe8137e695addfc990569fafb0820cae964d97b84c7575056a2137036813cdf6b9cfdad14a9fe6ec7f52dea78b3be159c9470418f981392332347b2db5386c7679165a2b066163926903258b756b593f3184b7f6e2aca2266e3ffa7a6f0ad56aaeed3c404392e47fffeffad81980e2e3619ef9eea2684e83709c3b76101b9767edccf7bdac84d7f99671c529e21d0ccacbee607cb3449cbeebd1b4ad22db30e2983e22ff8be7bc93ef212add69a03579e30b721d9fb22b6d22990c8c31da206f40a934827c1c00d34c76828f1abb0b65496ea53dc24168e2c72a99afa798e46279a6b2e2f792533c40fa62ab6fbded1161907079b562e3c44c3ef263fe880b50a5af14ad890b12436f2551aee3395902ce197a4df3a71a86242e9d55c127e3de573ad02eaab6dc6d297fc6261fadddbdd1522927078e7bace171f0f17a093c5ff0c27bf2c755f02e0272369d7f9bf9a73de2e3816b7985bcf6b193d3a3ac436a14ee8ea679391c1a7c9529718d842b534634500999f8d71af6660c58b871b76136177e963b00be970a61254eb3e6f1469cdee51c0d9cde5b42f7b11d3309f6e9d6c5c26e872d36383e5ea081ad34ca05943b293540d60a027eff287d9dc580687972007be81f31828b0631b6b40e43f4eee172f1ee24f8950cd4e9167344f27180c4af6ac8673efa72c03f6a72d3cda8ef5a78be301a18776f2159643e08bb799f0625a7c2959cf478355ff96415e5a6281ea106e125e84e285d2fe3687149f526ef09bf411afa251ddde9fff2551a512ba672686bc8e67ddaf0a3008d1f3c88bab7d21dde77d4f0d61283eab811da5e6c7a636f2a73a18ad98479681682f198cd29053fe52c9bec338ba4563fccb4026d12fa67b7c6a7e9a67109769f1d0799c09b29b21fb9dd7bb891c1aed3e616019ff8be0e9e32483ee45ee9b8717dfd205786a600c8900823c7dd72711f0eaec087a414a0483720eef59680aa47f630b0d49400b88a5fba7903c72d399ba6bcc3b69d94e93055b08e7cc064d88d4640cfda1bc025df7942efded75854b43eee8faf5db536010e8571cc550cafbbcebbd1dab67ae5326d5ffccb968a7f1347a288d46d0c1314d1fe4d76dcfeac5dffe06b48cc87732dbc60245c7d4a0513418743b8340ffcf640a975feb0a15ade7a8cf0c6f68c6c1bd6e20af4041d834eccfb44ed5b17702fcb158fe6889b47d79ee006b7acd01c975d53f544b35b76103a7d00c63ad9091bd1a10fa0cd52dfb40da811ad5819212aa03487a113aa5a222a8b0be56bbb246514fa59cfe75eaf0e1733a61a90cdf640501246ab9d70abdf1db3cabd56445e75d58012c67f1512307c113871ef452872ed6b96c6c954e7b17475d1d092eb13d8c3b0af26ed2cc5e58cdf5d65bc35142cc8af1c752fad9a43df4f95a19a35f108302aa353c9fc2677c9ec6948900465f8726b3c5929013000aebf9ab2e4bb528edb5c83ff8e09b071c3c700acf3498a409b0e6ac55df65562733465870ad1c4c705a4c56cb1ebe06e0b0d98056e6afdaf73374c5c26e35703bd4c6a90651fd46b4fb1dc3dddf952c6f01eb3d459ef3c9fcb4445802c5ec14efd763e619bfbedc629f25ce55ae874172378c8bc5e5cc38be3d3ead3c6cf30beb430456d080c9d7224f4bbe5c10fc0c905ba6b0fe41a2f0e5d54a0b99ecb01dd6209142541b84fe9b1277dd198f5c56727420f5173dddba1a8550bc41cb8d115977f1f2cc18591b76f09171b5b210e7bf8ae2a2395ee55c055438065b94f1b11b4f0eae6100aff45af182c357017e8720a6d4ff8b2e229e4d4aea320fcc44c3c5b0cfbe3b59ed53f01e301b28050ffe3dcede543634fd4a9a6f4f8787fded10fea21c6981ae7dfee07e84c150452b13bd0de8e861f8dc2696cc4d4fe8ae56606f2eddf95c84c6bdd11966fcf64a3b904968da04350328fce768cdd05d68e67bbf5bfab4f365305a6cf8bf15429aa53b88e99cf0dadc4a92354bb8540bb2052897325ce36fd8239b582275545dbfd3dc239716f4770ba8b0297ef4211d141b319fb9e9cdf766074a3d9f72016f412b3dc17a31583419ac206a086b7fb916905c7efa8abcb495442dc5789c649fa617250b9bd3633a8dbda9a1f103b80841cd72ddfd28f6cdf0420d96b4ddc51678fe5ba801e55eb1ef42127642a613311c383a63c8a9c46bfc6ab1585b1c6bfc3e48a841b45091c1c8a52490023bd75c303a7eb965f76eb64322e3b476419f78815cd47ebdfa44909e4da79839aa4db3033c0486dcf83cd54cd369510c33a9b2c8a4a70623cdbf49fca26335efdbbd5b1fa49573339676f19fe60cd925dcd1d39b87e982eeb04912670c1f102db56e7f0cdbf92874b76331c5c194f1c9235f03826d6199278a2c1369f3a5d1fa22aa45504af84ca7454cbe45cec94301f09a6906bed8f4d545ae7689bfbb1f5f0ab7d575585a87d22779bfa7747377d42bcb2eaee3163b00c8186050d82aa26353de58036ce683ff45325d741a59354bbd3a790342e315b0fbb2fb44a7b9030ee667f680f065e53587bfc0332a44246d8c2f738c44072aeec6c36fef9232ea68ab9ad6764ba0587dd5670f6c0bfcec4281f244d1514923c11195e4d9025bfe7a8abf216ce55c82de177473a7254936d284ca135ad272a832c46e818860fee84b6c1dfeeb26640b60352c136de0f3aa267e0108b02d4a6048c7976e8612e150e337fd967a767f9c0b17d81845a4c1ef4555dd4d5acc99f40b0258d45b82cddc4bd5a711a13d74dde8a6bfa9b8d97cae37f3a707e015270b835ef8db8d1689378a2c6396e8e30c75fec82bef4de7ec8e053ea661cb72bc4eb9c1c1aaa638df07a826794dd8d00f0d556662118c36d938b6202481a14a1f65b415f96a2e4f95f5aeaa305ff86c454cf669ad38fd2e0b535280678fed0519f77c40e942abc374a8a39fd2f4d02075dbe8b7548c29384988e245b8b4340a72ac1a2cd95ba7fb44c98fefa533e9526961333a9f3497ba5d7f6c595f1700c3f22e95bf10dca961cdff7b81f245ca6ce787e0d8d659cf1e0ddffba3a4e2d8976022f5e3d8ee3a5cd6f36e3d0052fbd4b8f5f67b40225aca2250940bcf3a45ee8633437f77b9e154294c700b198105f4a4527d0a26b8bf28647c41792749ce312a07867a366426b18cb389d383fa6f3272467e6dd042869e9a0809d5f537fbc61546c6be5d1891dcc8d0c27d87e6c1f8ec7bff8c86e938968e9ff507812c54160f990b3234fcab3ba54a22f16d6d84add8960b4f90d55c7706e70bf8134f6289e0a85ebe0339fb37eacab1187db63fb8ff42a79e352d7aa9cb88558ef3c8ac884f1ac64a11f6093961f778d8ffea7a832925dd61bf1a1a94a52bdbb269c0ba7925974cbea75c5ea7d07a7e1a3a30be751de7b48074c3c5a05b78a44dbc5f15c52ac9f7020d9381ea00faccc777b191f6a53135e39d510235b716b84535cc44d52655cfff8bc2fa6bb92068c5fe947e6e87ab667281eb5abb7fae1f841c30cf10e1e6dc9b69115291c2945cfe17020a458cfc51166aba549a7ce7e1f0b9b23fdd222227bfeea910c3e5fdb0580a23bfe47cccfeb59ee5783a766a0773537b1ba6b3b1b75463b2bc6be8036abd1e1e24b11fc5733866954e0335de99f433b2ebd25a3c94401053dff0944f94149c1cc1153d8dba880af25f5e80ec9d5aa28038c9e06bc76d3db500bab1893545cc441f799dccdb8bd22332b1203c1d8fe60d88f20de557c13200a73107595637f6bfc543082bdc2b06514f65de75207a478066b7a8534c26365b5cbd5d65fed462b43bdd4651c74feda33fe3803faf030f01577f7b5caf8393eea8c67d583503584c0aad1fe8a3dfd0428992ce44d11284bae5b34ca987bf8fe212b42dd803ac1fafb91d5b9579c2f755b5d992298e8ff0d097b9e4e1dcc4735f23ef368d71b70004d093c10250e2aa054c229299ee62996ef5fa0badb679878c61df6021860d4373d8791ad73026317ad5d4973afa74c8ba88de88b51ec6129256ec72394b94302658362ebb2276d3dbd85669b4b9abc4dcd7ce25a01b935e998a7f3680c6350e42d832c5572cbada50dd12d0b034f0d7fd6b30a817b6c8b1c884fe729b01d927f2e0d5a75359da8c036d6f94d6712c4745ca6ddac1f64e5447ccd3ef350466c15cf9879b56aebf32190fd57ccd7a455ddb7eee8347e30b8f3fea6475f4d5c625a8aab06b08354f13bd4cac523e572561e80f1a6b5085e8a9d8661bcc807edf9bff7cb8dd13f5737915ab5ddcd00eb29b9303585985e5cdec39c95fbb82079b6a89f607ba1cf614aa49b44ee32ca9d65205e412178d0aa39e8b9b970ba276e0dc6da005c9ce4118ef82efe82ef92f77d06539af6b12fc5008f5622d8487d59837d4021bd4cedd6990e8e59387e0a97f5bdc8b971eb9c4be72a0a888eeda2baac4e5a5afa1c7d2edd5a21db8b4891ed53c926131f82c69d323b3f410114281fecbc9102bfa5f298e06d91fbd7e9b9661bbae43e7c013f3796557cf2db568de7c94a7cbf5a53ee9326ab4740cadbf1a0b1f59b92040156b977eb4c047a1f34a0c66a85f776a0d1ac34a5ca30b099cb0bbb2ba4c453edbd815b7f14fc69e8cce968bf453171374c428eef8342459db6359bafa83bc830d42da5837041274db700249b22f3f661af0499eb1b0be672338cd8040e7eed752b1d0a9ad6893eb873a38e90a7c562da8a60ea2af9e40f91d39ff4cb5ff4301522edef27c02b2ca393420b225c0c42ec5ec5f41198614d8706dd866805324cbb6c0ec7acb5ad5db9865a3ee2b86f0321acc24c517f0a1ccc5dc3e15cb6bf7fb2670e38ac3f966e44dd5a7e3445344004f4d4574d3654f9dc48f1aa2bbd0255a4945a96a8c66cbaeff8c15db96b127620b77aa97726c8612148d55557a0917b0c84727624d296e015793d61c4c27011ef6533c751f8eaef45eded5 +MD = 2f35f8f6aa593ab603103d7dca0da6a5b2fe9368c442dba97b301cd86e76b451d9a663ea920267e0e1e97b3083917dc5 + +Len = 45352 +Msg = 6c06c358e743456f0ecdeaf75793f8ec5d100e40d871b724cdf64084029ac7d0b5f695028d63aeddd15fa572d832b5e9c1d10e7e64026dca87c1ef4456e227070df96ed6f8777a5d9d1533b93876c13b6707ea69272b9b46ff95c4d47bf469d6dcd6f7da0ec6d477dab839d45da84469b97d490a0a336a219c39673b5b18b7c68a56d718b89ae2b4f01062c9310f65fc1dfad467f56401e2c5777f81dc96365e7f41b698df39cc9b48e553a29af54d7bfd45338ad1048911e415b4afe8b51026245f3e6169ecbbb548ffb76782a0246ec0270d7b845c293760dcb0cb66bf6da6df77157a40fbd7885926341ed059115ece680a40f8b40adba19418e03dfa74671953e3ee4aae479ee42172d16c683cd28fd0d3e3135453850f0597f357af4ef03bb951c2714d347f4fb91a873d15ce526b26106cbf832dbd12f6d30e9b2522c9ab7206009b1fc5b103b6d4492da8ef66ca3468e1e38ac00c12317438f1a6197bd346abb0b26d23be69e0471e2368c69714c0844c67b133f9777c237a41785b8d1afce8d89d7f752ee8fe1c0e089f7c6cb1930cb43240ae0da9a088db73e40f87e75e6482449de487e7dafb21c293386e0975a7222e7f5bce10654a6370325ef2a432c8b58f0f9853d03a8a603a8c2323842efd9d42b660c61492111a1eaa6f54b841bb7a661cb8190ae774d258d465158b85b72d562ce57d1ef1870966946b388b53e6d8b10e6c62fda95f7f05b225cc84437dda532a137a94485237303779238530f1d7582bdeb51147f470276d8bcfd930f6ad1ff81145e0601aac65dcc29f0e9f837f43bc339aae8bdaaca74ec1a6f014cbada3de086668018871ebcb6d338e6944d95b0896993c3bb93b6e9decd933b7a4e3c724206596f2438dac4ca3686d56deec86592d3b23203b2663a237f008e12755741180cbd1fdf4088fa78cc4132ef6c0adf52007cb0206746da4c874d959ff0d90ee512080e843eb7b234fd1e8b9375eb92598869da9c22d76edc7ed0de8d2130403baea0d7cd73d5a09151755bf46cd9031bd3effdc185a65c35de10c56496db998e4b3df81590613a1051dc007ce151c61b6b95a65af02226fb2da3e6b0b2596f5f7025ebf704e8e33486b925a753f43fdac7f170a312d9438ed5f0beec14382621a60f2fec51eb30705893480e352ef4cc6169c9443e3a56836f9dba912cd672675540305007d6a6565000c41c15607972d0853ca8f2d3c46b72e1662a7cd2c8a3166f99dc8749b9490568465b754732608dda276bd124119958924e2274ab9d6761e3c8ec50a2eddad1603b36c521b41801bf35e759b9d2afb8f6df13b4df6526b0534a0a0470b88e4c5f0f4895be730bd4cad4b5ecf36c10fca5a568bddcb4539a24a9a01331add5fedb5f0b574bf3ae6f7380620b6f525f9c151dbbe0220f9077de4468fd744234315b96f99a78ba923a5fc546458c2a0e2fcbb467cc4ddb4fe1f6c6af33a6fa4bbc66439ddfb33c39edd6100d2be8678f20401606f2ceabf460f48cfd56484a6ec871e1528799fd17c27cfd011ef27f6506089f13d412f6206d5e23ddb5e6c7201e04fcd2227b71ae80bae8ecaf38f622598bdc18e0c94e467faa07cb02f0d5020595f27740f64e808126600a4d3a404983504970b93028f9005ec53fadf5187727bb7ecc6398c8104c35fef48965023d2bec53d5be05fa9a97e2d8b62771f611ecdbde4bfab182e05a701225d447a09fabb6a7927fb957bdceecaec8ffe5e244cd8dad6086ff1373344b5638ce60afc39b45a1417ea8a4d4fdc2d3e2a7cf8192622768b498dfde4b525e1787d82e745b732fdd6d2b728672ad0bd49dafad488d135facc290b267db4cfef2ad723fb2c9bbcbb86016a55109652e2d5487edab97899cc5f50f3534957cc454142ce2df80edbfcee4b09fb91bbeb04a91b13f2f341d4560c674d6c91c7a24d85688d65f3371628d4599e0132c0228b8efcbe04805470ff9d161f589d2bdc6dbeee678b633ff5a701d2304f3bcd80e04c9389f8a6daf52ed8047301b5acff0fb37f6588914d00e13d5fc8cdf40c8c69ab877bb6aefbe94d87da504e2172959a2dc18d42c58ac03f4fa86d63a5a3ce8f73819c27e0ded6c3703fbf2728a42676f45ce9a2471dbc27015427f995baceba6b28f53183ac43f85cdcc674146a380ad0f981905e2f7c02190cfe770d7a15535c258dbde18cb9541259701d2bed55c089405bf553e889396077fbc5550a2ac00e1f6db440a7bf3f5c5dc20bb65504ffe6d881b76e6f6a329e3e25cbb593956b49bf9bfce925dd210090c624fccace30b06afbc0f7eda7579b088572753ddfbad5ad217f242d9b62c79b8351477339b9af9dcff63689c90f1e7e21a0dc2f8f177990072338e7826a7926017bdd78cf03ab1a0743736c57c1f148033e33922de9fe1053d26f7c19a1ded84988070218766c88ab8ef5bdd9d7da0d3335c28d41982dd60f730f14e870bd5a62620d399b7ab990c1bf05a5d8b8a275b76bd149548ccc8a42ee61d6783de05354ef3744e0785cda53bdeb4cdbcc112a99caa8eeed2ca3d4f52badeb50710d6c2819cd4b6fd61b0d6872efd96a7beed1e1398fa395e27c5a2f113b7bf9750d4de5c61678d1febfd109c559750d2d0315959fcd90d3161dc7f88a52adf9b0a89d93e05bf18d5610d03d9e70474d4a169bbfe6abde2f2e4fc1587e3ba9da89a5053b4ee4de2b48d5af0ce57d78b13af00e66f571b53193daf058d33f98236ace2ce3f8f968333bd8197e82c82fc265591493b4673c62ad86feff72a4a25dbae9bb96c6e2b72e97dfb49c5e9995063418554d0bd49c49e41b905643b2ee0fe0bf5959a0e6f2a4c3b3286d5f38d2070df77b9ce202fc6fa16051632eb3a5c14618af366e4f411b291c1ef96eec0d4d59bc2b882137855a4a1ee6301cedeefc53bc64341863cd1d30e13e4974ff6e5e81300f1ab0bc5f94491dfac5f3a9f2466f72215b866bbe3140cc2f6457b71ec4eb1bcf5977d9b1a5042533289d2fd82a02038eb4a1ae3ce0c1a39a52015d45070145134e5fd5a313e5fe396300c7c92d743852464f766eb01b2f261c58380aad2a7582ff4efa5f68526fb57e06b9edd92ed7161a79097c2bb7387cc946929640cd75c4762d8e0a2bb5424f7f964c6bb596a8813608b08fd9fb864361b2b11148540b82bbe5dacfe5753dae7097ca6c4915753ca4e2b3cf4150e024ed83dea24b260064d45c26d41dfa297b58f379171e1404ee6cf15a63eb1f0fc774a36171d3ab1b11cb7cba415baccd5d4091a295bbf91e40941bed735fcedcd3fef982a7674b2632a82cdd3f28f3f3fd2f598c0da82d8bda264ab32926c70cf1946d896c906ee76e7153d8f60a3761022d3381a86e1913632965f5abc7706ac83ce7bde7d47c286e30dbf38d8be0e0154307c78e94247e84a654fb21ca33bd01004f6841beddafd9ecab762c335638de77bda7e6a2b593e4a4ff0db4b877cc43e88dd0a1d3f94458aeaba9fd89013104d33d69d821361b2c2b4e738b17a36037fb8a3d309d39b1937dc3d425154a93305f6f558e980edf03442974d072214184412cf916a303bd3161db3ecf5f972509223cb32d8fa5a412f5785aa84e5837d3c25c4b7a6dc02fdb62db3021f051b038248acae08e63350048236b3d35b00acc87037a8484d9d03889abf2434fe1fc646d43e3cd1eb059764512f0b7ae9181169707cf5e6fb468f1dd34cc5e04add136064d461cc6f4d71cf32d303e4263665afa52922db6bbbfad665c069a981ff756f6923bf60f9778995a5d75f8778e7f3fb9ca0b1ce2559c152d0ce71e929e356b45f80a838001049682880510d87a956edb5981507ae9c8d0392db8137a91551dfb69faeaa19a43ba749729acea906f8e68e63ef406e10c8793a5c2a0d9621d1621cc5454facbfcae377329f53736d7486958882e0ea42ee2415e4aee357856fbbf0861e814faf919d3024d1246d59344e599a8261b9af6884d3e9b25193bc877db0766cf769100a4512edd2b9fd66c29e490e606b42b2e22be2ffc6c0a133a307fb0ae30a8f6daf7b8de206acb9f2aa06e2589f362bf9c579d18b4eb926875ceb2eb803433934fb910fa5ff5519a95508c40db17acbe0ad0f1e00ccb38a242fa7da023029ece26926169e2f4b92e74e245c9229a1a903e35c2714c348429675ce6b7e0c47111292cb415f1908cc291fda2a8a7a4349d002d19b2bc4dff66ac9bf819ff9f35c31e2c10e5d4f050c0b24aa9c6b25b834e1a60fd8ba33f30bfdb5fb8acc8bd714bce3d7ec1d23e908fa07064098aea8e09527776e44b31a09dba5230598246ad1301050591359fd1972318db5a7977dd37721a8ca5fa4cd569131a6709776271827e2cad3d433d9d4002ea15a2c52bf94140f048b7f9b85989ac5f65a2ed3746000f5b7eae45407bf2078d1ac7b72d698d85a2b100909cb4674dca330d2df0b3f57a3a81ca82d0f415f8aaf2b397a6b58508d7cf6906206c69c002d8337fb341c98870bd7a44138f119ee8a64cadbd66909338abdaa56e0bf9ccb05cfb2aa876e501a63aa7d134d44ec1f03c7c409b0315ec6d4c3cb3ab197e387cc84c78f9ddafad83013773594b352969bf299a67147edc1dbb7579021c60cd0d2310afcbfb9054b019146fab7d2c9dfc343d014a22322bf0fe6f3f999e06530c752e18495af1bdd48a241051f19ce751a59fbe6cb499a1901f104d9826da9220c68efb988138b1985d519d732feecd0f193719f4521b06a22542ea283d4351f21f18a0e3f8cff8a499815d3bc08818df99ed590a842021d119ec5f7169a95a2a87b44e50481c5a9f469e99cf2bd490682ca9c8d8d310bbc202f6f59a3574736f074a4f07f8899f316d8f9a57f838fc53da53ac83c6539c20e847f1cb260d6569a6c2e931907c8e03153ca5fcb01e2547abd34e36e6518c91d4c99e2ec6daf7c16c0465f6985ff0bd468d05e5daedd4eda811f617b97353bdcc6343e89c44f31f61f80b7d99998d07086a003cfe0dcfedd8f6ec4ec91fb84edbfd272430b41f2a8e8722ef1b922d8764bbe026a4e6deee446877049ebe85e9068093080b90458bfa97f473a4b298e86168ebcd55e0cb98f250e061beb9803857d2cfbcb4412beaad11c732be6195d008596a5998635d94ec97708cb37672e3d5dc2369b3309aedb0dee454f007eee86077a4f2f6d75b8a3a236cae055f22928886d73791c4593f0ae49300c20c69d771a8e3bef6a48e21e2de1fee3adb5aec79b9324dd5643286c30d1b5ebdd8cf4543d56de82032be02eeafd075dc51e099af5b7dd4077aeb6be440c69768d3e7dcdfe78c96fce9b2d5657dc66a732b7d42325501f3b06d4d957465dad34c667b414cc485f11332344150324af685d0f98f0b9003d357a520ad7b63a039eff7511f9256a320ec730aeeb6b5a4419ca81c2741f3ce9b848a2c5a022460f2dbf0331cba832d4b0f15fd859fee1c723f1baeb3dc65a974bf8438450f8f622598b7e7e0ca356a9c0581d5ae14c5fab2f79176dae5d0db8691fb0e15ad8cedfbacb63514cd53a339551e5a101b2285284a723d45631badf881577473e1034a9ca153e760c8c5214a87535454bfed06fdc226cb9b5e2e67f318003307b5dcc22ffff8c36bc57329f8248a8a21050ec558e715e885dff1519edc5e137830ff9bdd4c0c93decb45066ab32ac520f76d0a6240a85cabec4cb22257d9db6f5a551dcd12f71d60e323fecabc9bcdf99cf31d425545eeb49027d4a611da55933cc49228d8202a9a14f55b3dc7446a53fc864521ae566849d06afd5391c7478ddd35401527f1813466a363ed5d8f64d6200fcc27d4419011b6fd76515f0a7a04469170bd86d1ecd5e1155f0205e3822b0f77f87b4e702fb549c887c70309b6a17dbe6b477d2831258e3396a448a88dfad1a41246a4490cdc91b377dd052ec20c8ca676dc945f19ce74e652f9ad474eea6f8061af5f36f12f97a790bdeee068ec7a2fdca454dc6c759b14d92cbc268aa4f0f22fdf069da455628a188c46866ee95043e3c64408f2c50ca67563fdae0cd05ce1c2fe21e8eef7fa465875938a9dac15c9d56bed4b7263ce856bc6f9479b15bc376433387e97bd68c1989e5f53bdddd1a9f8bad50eb6fae997067f375afe1b17db5aa6d4c7674eb3e5202f314996248dcb95dc86b7843066c68db33f4dfe8b75b5ef807c2b2653e398375192d4ef275017f3f888b0a5ad4cf9478d9a8a630ddead6ae9b9129b7301c4262b095c929122755c37615fe11aa3187d32cf77f5485bab120812e48f57145036e71e4945080bcd16c19b2eff1f740a78cd667e7be5f39731060f09caa72424acaa5903d13414076abdbd84c963c6b97d84e806bf8baf590d0a38ea140a3a28d39f43f2febf440ba05350c8058fa10cd77fdc7687e395d9ee3d16ed35285c44f2eb637f934ea4c100addb647c4a0debcce7ca389c95b0001ec7307bf4aa956050b941105a8c3a11d2f0e6bff63d133ea6e43ab3c64805b4e4cf0efd1a38ea64362f660f191e10e45d47fa413b10baedab9db54fcca49ede877d39d96f796538ec7559e299af2e20ead89e52126a0be1243bc2747853826750fa3879bb160dc4bab4a2f3a2e59aafc1cb5a5a44f30c0058e5ea8a90fab935876e9343c6b6eaf1e814caa8fc685e772a49b6c19a54c73391c4b4f9dd444c327401d3a1580205a5bdbc586b6ee182626d7a3befd93544631500a82a27d642445ed97ffa38a265c982d5d4a3c1f80c57d185704dcc3d8a762ec04e83365ba3558f211fb52f3d12468086c7b7bd54063d9f92dd413a15a156212c2f6dd179774c4dff3c3c057b1502fcf8b8112a9e77fe20cb0b34ea6591e9396ed251c2d8c711e19b5df6820675e741522f18d07d68819956818fa5d46219bdabbf95cf219a8c931e0a4b6d833adc96bdb434779ae0ae555bc7b8330a1dccf40e7fa3c1fcf9a5aab0cba3909d6dc84261d0cde69ce76d9b0366195cb0caec27bc99e15f10eb4470782966b1fa15958e650a4be62c85a6b275e518e86e6f609fe095b9730678512b9fabfc99423a2ac2f2eb173ff2c341e3dacc1f9eeb1610a1a0fc92c385a8b4244cdace101ee46f262ffa97b995a826765aa49547d0c6e4782455d319368455a3a83c42de361c4c0145bf341bbe3d3eb31cf4e2abc488c46b9528e63bc1131cefdb5bc1ca31e9a99d5bc2562f14896fe149446d92706398c11bfe32f1cd5ef2520cbfb49db7546e409a8c66bb4094a24a081da0c47b5f48c3dd5d1f05026bbd1264ee811f726483332aa4ca88e966c0348205e2088e84bcb904d0153d0a4467780a7292180721d0be3292ec5eb808afe8df869c2851dbddebb7dc7c638af1d6cc26d34d5021933e28dadf3305558159ae462834ea6b6b91a01f0bbc3d2d78f456e2971c8f66c3b3bb4c12064467d9a4cddf721317853cc12164e43d9498e3a75d6448669c7eb818bdadb3cfe496187a8fd3eca177465756b7adef682f763ad92bd46d9240127a5677284af5ae8c47c23a4a1e46d157c336a822b5a3d86d8371065b8f0a43ca125331e260e067ee6e64176b916bee5f884b3cedbd575525c857372135356d4d87f933067cf7da6793476e5fcc769707af7bbd338fed6f481073064de77b8544e12fc4ba27a4ce9dc055874e57d192f73fb0711fb4cbee7b64adba072e44555629dc2d26e84f0a38fc75a95fbbe2a7d640d1a2d6b35b9a68cbed9d7990f8a32c66eab774475e57e1508f1eba7f13a04dbbc6968314043bb74d1bf5c897ff386da040a7c9cc3a7d40c28c2c882bcb4403b677954c602d9810f21f0b1fcbc2dcc2dfc64850004b44fc5d521cf148715aa13ccce9591e407a19c3e127a4b3a756d32c64e12e6af974bd26ca361c5d6fabce52add9d3d6a4a97dc749917fd71770478e02b98e93add42d27dcc132f22cff330202ace211c1ede2064090d9bf7bf0c70e88199601cd2df26771075a8f101d7753b3 +MD = 216f0c63313481f3262883c255d5a2d3185dcb89d5612ff6c514c9318b0e68610337155fdda301576f4f3745692a39f8 + +Len = 46192 +Msg = a968e47811fa147b921625551b7e24f4abc6a4ad1408a58fffdabbf1307d6c4e0b57d95357a3a13543680248a6a741ce8bd94c0ced999fa4bf9d641e30eadec82c4807c026f4784f15968a78bc72bbd12fe25392930447ec25b05d9c7ead91bf1524b7e8055463701088060de44659a69ecaff668db3661038fbee92a22c4ddcccd132f27c2b28403d26bd2fa78be4f5e07799b1630cc3b700665e2824d1d9c75b39bd0713e29069a359f9048caa2565fed3689a9e79288a86daf7888d03ff27c942a34f53df63904a0700b71b09e19fffc5b64ac5605b30d13dffd7652985a41fd62af1c38b69603b191c6edc11e34beb34c9e9602b2552e979bf4032ad34e764dc9c16ec4e697e7d789251582af210cb0aeb9ef7414e98d7747fe97ef6d498a03c3fe554912d95180aad8a16bdd596a62e6191130a9ea9a21887fad06c2d5fdcde5c8785ba7b4b15b9b43e9e305586848876eb3beedd2e524b1e9cb17706e21faa3a2307331c487b6cee9879ed3a886d0071d4f855d2cef0f78df6a87f29cc718823e26062d835520ba4bd2e5a4c436a7e9973d1a7463283031d323dec5cc3da605dec1ab176baa37d1fd845e1526082ea38f14e4c010213571375f826686f631a3168bc87c07e75aca40f47e91686be2c9475f7adcbe5a9dbbaea6295157a139ee77ecf4b7c2ad07f7e8abbd95e5e242cf52855306c834b7759b602a22a89f3d4c758da677365bcdef372291bf390bfd3a532ef3eab850413370460b3714709a4191b65426dd842b14def19169dc39407ebba4d405193d9979dfa0532b0595ff724f2f944322b69e0d2281432239fadb10ee8f89c2654d4ebd3c07885b06afdb331031dd589053a54cb46a1d74fce11ba57e577bcf271fcf7217f41163920e9c28876595d3b0ebbf37f70496de7f5c8080ed952067d9159a4cf5fe94b13232d0a7174354411eff6a638cf935cb4bfdb857bec12e48f5df4d82487f78e051cd17534253af2d050f3563c8b070d7ed15117e5443ebdef7dd47c6920f346d8b3dbea18b0efd043d8b9e9d5cb2de60dd632a8960c5ef866980179e75166da548f5550663ddc443130504948b78e502874861fd46afbffbc5684b5e343d7b44159469167f68ab76100c05ce079b1b499535664e8869c39b961641aa81dce3b67b8b794600180929cef110ce4361e78261ca95f1a89c90e245ea98f7d08d3d78e55af419c86463baaa54c3f9b195e06987788f8b19b0ae6c7f85cfba92c6ff07dd7368062ae651c53cb79df4e47f8c4b60bfa17f7e3e82968d5844875b029eefde75439f9a0649b5f099ed346eb741c4a8107a4328aea3fd09d295d29bd8a3ad62d1254aa85cb229506c503c82b5b751a80b787abb79991c7f953220d7a193ad05077b9bd852318be6bf5571f2f3436f0b113a8aa937b8515910b7f68105e57b2f98c517ac7f3e5a2df37b7922087c992bc22ef76461a84810c585c84a6e1f946cf58022874c3f0090b920b6826dd95c848ed4559f7fef7d41243a1a7652b89527be3b511b31ca3bb960e3bea68bc025cfd7a9099cfad44d64dd3361a75c36d9fa435537bad84657f29b32f600faf781485d3ba7ff5b1d54f62100325fd310ff5f357c2af8a859f1f6c8ad012423b5fba8500a95391921007fc02f10f25fed61c1050ecf571a7b761069a04472aea1f14a807475dcdd65fc6c1b2e62217b129dba228b7948a71160ea0ebb448ef4320eb93f27ae4cf0729535927cba4f8d272fb51e70dd6fe6b24eee186c95eb8cecb06f1c92c32bfacd5776d6989def3e91845c796d501f51d49c8727229cfad14862f6892448dc64ecdfaa58106182d7f837ea93df75e9610ee65fab7bee3f89cba2ca057aa3e0c7478a4a8762c9ad11b1a71a2e25a350acb798e225e6ee4beeed0c6431f468db8a63e3c1f50e2ab054647e5588fe8ce79d65409926e23182a932ec5f6f300c1f26d878cb1180f94f18772a1734b88700abae59ef1efc4c961123ef163dac024e44fbb5a07d59d9ebf66016e9c1f2265e5fe9617e8ea393d8ef3671232dc6efcb3d6426fc88f730e946b5d147b119ff3332ace3b1e656abcd7bf10ef0b01f2928a8a85939d4e792f9b1fee5bb72ce5631cc7f4d13c6b3f9064fda3519452342e8ff2ea8d2e1b9748f9091c0bf875ddfdc75c72a2e901a0005e35870078d61c18ea96da2722fdb5a0d9b250ebe8f66f085d71af76ce317553edf024c45d959397c4febe2722fdbb8061a0f0c42db684ce058e13149202a6d238b4e265ec987ff445b3fc56d5229130b95d665e6fbd0295e83c0646de7d1bc5680c29aacce6ca78943cfe7ce47420f80a7118815714d3a62d02f0d25aa8bc74a47d615ca5875a68da212a61f6fb4e207c6270f58cc2dd49fd693981ad8d72261591f2432184190f3eebeaccb4c004ef36bad481b7cf0ac580f8491b80342324e3cf4427e6e4edb4e921a587c5ca2bae6100aeef80444064dd3789687aa3b8b735bfbfd09cafc09e024bc258d321a9a624bd65058e28696c3dae5f3044e41a2533eacc06ecee7916b2f1ab0883ce681ca878618c8a836c26c7e6343a85ff2fb607d7d1907ea80064219cc75f7fd84e5b14b90a4b1b5d31daa466714fe6fae1b4d60e3837f9e53dd076d37e246f4745aa9109c80ceabfa0d0fbb67c370fdf1765cb1867c305ad18a2da1f3821fa24345047ee03959fb0a14ff55fbfbaa7b6b9130b7cc8fc4b09792174075d1cc97602965df223afe1391ca0bae8a09f5785ae04c1c2c1a9730048966d1355de844599c4fc9d90225861f90c71d989b0c656e0801373bc94259b6d49eccb892fd299e0224b76b2b6ad3020d943bbe1b39c3036d12916208308e1d0821ab85fd65b7bbff77305f23388ae794f57141071831c983e2c33553fc4da59891e61409dc8f21e8d9bd2b66090e4edb8d66f7eb22120ee0e4453c390028ef1a5214e954ac107e52aec6667066ed9625ae751933e1e47208a98fdd23d6a067e204b08c4a6edc1fc178e486eedca95c17fb344b7dc239617fa51b9ea10a349e940c3163779f5284c9ca80031dd4a21f36d61cf5256d817b9a6960f73cf565f1b4eb200548b8044bb0062171a9e9984df6c1a7bcc72e4d1efd59088d5432a51fb913f4f85a3371e328de51490f75dc66cc606ce8df9f0cca2d067ab7834c8267053938a318bc2bd9a89597ffab23ff084c14c52fdb2a311b8e04200c46ad7e664dad539bf09c829d93de6e1c295e6090ea7158f8467a6a71b4b491022ac0099be702ee599e6f16bd9f1b2c04f69fb19f1be880c8bdea096b159a662f8c3eb48665bc61526e9e78a80ede8a709f52529174fce5178e03ae764547e7faf783ffb43e3c451cedc4f8eb878ae1b58030d3f67a10ee6b5351ca11a82fcedb091a4b83f525121f985d48068db2ca6a4595a66c9fe7154a8a5edccbd2d453662d6c48941ee940e0fae1c67785f8ccf55c0b5a325ac1f22bbf85571349b84e12c1144753201b69f781dcf4bcf49f31ed300c60063f43fd855f5fe966714df777808cf84f8d1de5d9d9b963457e48b1c87e134846c1ef9fedd668d463ee27e7fad840bbf7ca735cee4ef192bf7777c50d72ba8372672771dbd11ad86a14c8a81324da02da6cae37cb6e3ff379749ee432ca5c9227a38debc5cbe046078992b06712b37d75f840fef7c3df0611fa3087bef19404c50b7596422373adbab128895d1e678c38d1be1ad9cc696b078cdf282864db4be91380d9c7743f8ff22ffcab6ba450afb19d882408046962c880fd5e05b09ce7e230325ecc3a9e6d5c6a818f194129687ec031a308e859bdd38b1d91bd4173696f060c7dc6e32ab647d549bcfc813c36dede4d003304a4bcc71fa25bd5b3e930ddf971cf5e0a6efb5304c7bd7bc113ab703c2cd43cd5e4e001934e24e57458decd7ef4bbe82cd5ccec8d9df92d9d3a26d18e73977cc8a4d8119a5375430f5cd3ac2b17cc0ba6e98b92b41ef868723a49513993b289794f0585a954d594d16fbff8726d981f1534b7e43ccd53d2fc7e839db21fbdd9544de8cc34e4be41870bf440e93878b90421e23f6c4b63f378815605ac7a21e2e64c0253b175a7ef8cabf103f43b166fd04b8b22e6fbd12092ed31377d25874caba3d2cac37a2ad55eda66b027d7d98a261c332d2170f400b81cc591a8c4465d110fea8fdf74afc98a21a5d3f8813abe620e4acca02d751a749a53a2b3b8f7bab2caaa1169f7bf027afc3efdead9c27300bc527fe783bcb444d09be9328603ec1d6ea1fdf775c136bdc4b28c7344092eae80eab56c3633849569eee389be03579d8662b40c616ecccf35711e26526767b806741ba2a781f202c0cd103db37e83cf9c5cc21d6d003b3ba92b01887775a4b9b76ef12f4a2093097fc6fdc328cdf7300b00b6aedb3e186fba10f4fe45ac7c201e6bf466a087de15f16d1ace607a384b6ceee0354e70dae7c2f3670c2f84448795db93ed4d3039b4b01fe5940d2bbd9e3c880d453930f9406e22b646a795945cc83e4e27a2a23c62466fecd8812afd84f45c6c531df709f6062f81124048e21c202481ba33666cab2ecdaee06f208ebc1eecabf38f4b7365458a56138c16c44237fedcf981f5310bd3c99a602984d79026b93a8aefa6cc3a86c383bedd97a16b7a5dce7a20c73fe0dfd43dcc32c06eadb63296adc1818ad2545bb868c74400046191c4c07254cfd69d8e17892d7bba5117e95eb0a77425c938c352c5db947689786b5e40f9468769b757a61b7c0f5146f65de15803f7238bae8af14a8d116b77392b099047e4fcf697b16817a113b9ebcc00cce859730a961023026b5e43656a2e514522c0e87729c93bdbf22ef16abbf36280062a705175281c04acb192dabec28e9f7d1699ac5fc647803f9840da341703892609878ea530e6768349885201903376f39ba103250974e3545f8a8ef0a16476cc592128a2d512e68368ac51cf01d07a4ac276f1f62d3483e4f736ff5e2cf5a76d9bc595fa8f11c321a1776073a1f607d74d841f6f8c16d045f1ceb1e91437b98e63fd7d28b973aaf28661f48bfb04be2d8f60d1edb08c570bd1ba3d2de1bb1ba32431449a0ea8fc5a7a048494779cfbb1fa95cffd351586ab0991f7a93ff05c406ef972dad93235de1ec7a719a22f4f09218b501a7442fdb81bee87c76967d9eaa6be8e77b39fe601c733b287f52c26a796ca08c218851a979b185425089243066e08fddd28529b4a15c16d6c0b1420f1ccca50807c6c6bede9b7e32e87fff6382761479791fab43b8d090e323e87bc8c2614ddd22a59700f8a35cb60821181d455400223aae8cf3a8f733b8719f757eb4531f733acecb5911f2a63576177647f9a3db3fdbdad4aebbf886bb717d39173bc9a43317e86ab06fafe417fb0821cae48a2b3a254d8c5b37fc1155ed2bce7d9deb6283809c7dec5b039fc35f9d228c4e327a7ae0acbce2652a5deeab513c9622e2e3cc3e920af71d165da36a7d807781c24f67d4a26a2b8dabf1ef75968c4c14d6af771a711cb8fd0fa91ee4504372c4633369c8d5a01df7a655be11a2c585b9ee4cead9e2b8174316089c94c074645e3dade886ed65a2ea4412c5471eef2b5b53448f468ce8fc36550485437319379877454cd493c2a1b0adaf6be1b21325402d1fcd2818b34f1ff12442b9113dd2ba3a83fd7b6fbd038f08b417a505385bb0a3630b462d22f84615f039be43e51d0cadf064432861aed07daa335dc066b5f5dd9ab369743be0f3e7f1d31ab11b00d5f913e7f366b38bba361826cf8aa51b56044b2c599408ed6e8fae789402e6635f4574ef55d3bd8297588658c40cfe751a40ffdede369108fe36b091f6de4f2ef0ba9ce52f15867cad0e7c3103ee78ab8ab83d31c002dd1aed047d8406ef5c49d180122f4ad4165f467e831956d71ca5ee958d8dc69ff40981209fbb8dda179c4abe5e376eb97615a8d02278836ff14c8efe775abab6debf03b39e9c524a8810a29c0963626bad841b2de2b6535fff86b11c840062eea322bae400911fe5b68b23439a1df093c396e9bd4a3b8e4f4e3ca0173be786f04c1cf0dc4f01ba53a9f613db99ccded9c13158a7e26ffce6e757a4162577f064e194ebc21254ec3d693abb8b8fd7f5e4ae3fb21432bb64cdd1bd0341c81967f06871f5bfd2f17d4bff3d637c03a8fd5d92a73d2bc38590ac145805c1ae33b23feb9d54fb1642352472e953d67da6beeb755142151c36462ab90ef4be5f2f9af771ff509d66aedc71ca25d2c085390037602508f9c5374fefc6c9165f6273e7c1037f33ce4a9d39d90fd82962a4c98ae95a0bd90047ef73a44670b5cd3e696144a80543b54b7715054aeca1e561be25a86cebfb5129c579f13eeb17307e77cf296879ca7bf0a5389c834880714581991c9dadb716f3232b7db82284afa707fb174bc30e47c28d6a47c0d40e2dd778aeeef53955742e704ff1bbfd46724380abb75acc5842489873ae0b7895429f0c2bc67c771d956113aef45064a4a2d94aa8b19c7aef930a2e1a786b1c5bd825a5da4b3b5057a11476102f7e3fe567f2cdbaac1ab61d6490b8284ee9a8a915f2ac812639aa4abfcf003d494d7652e81570a850da6928da639c66d78b04c7248d87e9ff7e6f3f181b19fcebc5f1334eca9e3c46e679591f0a4499bc5b19fd2b7ea0da7c13857ed47f2916bdef98d0c09abc3c3646d0f85b0d168ca461cd93534e5e1c48ffd64f1a84985466d25470670b3371c700544db5f57c0638a409d0c3842876094a48fa12b0cf7c8f760b5c6ba76ba3a21eef9f5648ddce202cb6fea4a868b168fdc5c6e68e3456dfe4a6ddf3f6cc9a6fa788386691a1ad0301ba631d4285950c1f34fdbba330acff230e39277fbf1dd5a4065e0c552f6b892cff4757dbe7ea9eb87ce5bc792c44963b29b830caaaf67c1c535a701ef1d05bb46bf479faf678c5d187c60e978ee74d35e1a4365ff6eb0d175674bb734ea321a1e8b1ac281a072a703ceadc85bf5dcc181d4360c70cc5309ef7f315ddaeae82fb5dc518ecbb5e74a083984ccc286ebaecc5dfd789524b8cb71e21a5e379b727cbb179e4ce41464c66441786f330e2c0bac0bec32d3247ca6db344940d1887b819ce15395614875acc67b0b3823e808589f8284b3b137f91c59ea509e3f1e6dceb9be13e0d9ce945d9d5abfb01bc11b2615467973c5dbd8ac9c78c2dee6d9c3b4b00241c7a4134b695745085f9115dee4abcc2d0b877c75d80174028b5f4707e40e528fa266c2f54092de67af2a52ce24d18801e35cb65b1f2740b21c0ef2b4dd23233019783a3c83ce9b70172e046357150eaa83dc0612e28c7334098c4954f0acf8e5857f058b9368e0943032a7390bf4d489757be827d29f901afc4dd762defa58129ee1916d0000525682ceb7a9b3df5e2120c2d8f46fdf0bd93cca0968f8a9a5399e268a5b5a1375397768b24fdf531ff42e2765130ad96af173977bd1be1974ed2bd43cc0f210bdbf86772395fefeae84f63ff90e440d21f6092c9b27cff85b8fc06145486896804b4890881683206e6601731130abe8b54995ffe3e58e94ada3e464206c3e03817f364b6c3c1c66f3f9d8574a44930ab97e8297e2958a9d0fcc10435a86e2e625cdc7ee2c911b30b3b2f353109499d19307576b03b2345fd66adc855022f7cce1b9861f6590101c4243eafce0bb30dbd6769d1fe3b62c8bb5f291b0adeacd1649c4e95583c39b98040f17cb5722f887f83ecbfcff3bc37f1305d83bc0290350c2627a0723a60e329d971234c06641747ce25ca8c29da9c8722728ad33781b0ae034b0caa1a1e85a635e62cfd8ffbc1fd8e3d799ba663fe647b90b8b745274b3279e1616aa61da9df9c77202fd49b8f890c5c54653200667283de94d0f42c0d80d1122519a40256bc584c85499eed87d390a8e4529459db988485a6870c35ff805305e21edd789525b08ee6b5b599b4c4624cb0cb961565bec4ad764254ed271b46e31fe319256d02eb65c8dae1461b42c96e4136fedc0ccc8c7c8d6a95f98f37f4d365cf1fb1e63b52f8b520ea9cc6360f371dfc9558d9ab241d726897043fbda3fe3b4ab9c508b82d7034ef9745bc897acece86232fd341d4b6ada222b43d969c8b29bcad09dc62c4f4ceaf +MD = 7da03ebde1fedf9a8f8df93ef1c533e5e43c22ad63775b2065184f80fbdde6349bbe61a059befb0099ae60f7f6108c84 + +Len = 47032 +Msg = ee6a892558dd62482bf1c09e15ac627d6630b2397290489736e2b0843f966d07c8063d75234d9fe45a5d93e1154ca166beef1c06e4aaa86bdd86fa02b084dff53232805a6e7be4aa4ac3b674683449524b52d91dbbd6145d6ab9d803d78f3f5b7316d93c030f3882454cb2bdd60b622b538270e4bebb925524a2d3ef7d5d9420d4dbd083a8b0a45491200e262779f5d81fa769c5b7022d3b556a722f6a96e62e9da9ed9726062e087766521622280841f7e84d266c52eaf743383e2966e33d6c16a7b9e044bae1863f4707f590bda64e226da371a754d3713635be4639eca2c286febbc7cc74c2b631eab42a39e3d4e7ea5ff30d2eb0ef9278897aeeaa581c1837d57bb284dbdb809578e11fe5409cf495e6c662c90d4640505bfa8a83cfb4566f55820a369833cdb218163b5c7c055d6c29a2d84213e16405d3c7808afb716577a65738a853d283d1f3dce66540170ab75112d7606bc7e7e01b683a88815b2b97ef83a2a3b3c18c3a30ba88ca34dbe3be859bc7eabd00af2958651e440c7a9116598cb2ee6007ce35f8398951ff58d1c8eec710a9b095a628b547968842d77f3e0bfccf5303ac330a73df52c34997ba1fb31d1a65ed8db3245894091acb79de552d5a609844b9a200c83749e7bc9e8809fe254ee51cf0bd6769d7dfc3506894a4e92fcf86ca35026020c6d787fe7721cff46812f3e4c7ae3711957f4b79ad8b73650283e53e283d72a2166469b72a6fb9bf6dcf55ed196ddd7758537aed4fa90ac95be47d479a3a7e77ae595690bd580e87bceed4e0eee2a1c5a7c2185556d8b03ec25a158e94e1ccc6161c16303ac61873ded538654ef5ca200b34ec58cbffaeecc04d77ba1d1aa4b8d7177141a8a01dac5aee4923428ea2b20b11bf9fb5064cfadc2569743ecd4d7578b12f6810ce665ab8a0cfc3d1956fa32fc259d11cd4d2909f4ab464fee210248151174f79373ba3815291ec04f27a1bffad8297085388d890252031654135ed7a61f39eebc5e3b23c6e5847e28d0b41043b0299826ab6f7371c74847bd304f9ec4889fd6f5fa8ad715bec7c734e693dc5d4a07e9101a3181c987a04497ec4705f6ea1120bedd0bda9811532bf1ede38cae125ef3e019861c802f85ad62bbf7a593b0588c958a4096a489b11cfe3b05a9cc85a939050ddfac2c0b72d2ac33b3d64177c05b1866cba3f1845c3aa8728cac2f304138fd7ba0c923c7f264e2c81e4076acd31ca6070f7ad59dced58f08eb1c4c8ee16437e77bfc1dc17ed4950d995cb9cc1b61ccef7e93e73293ae2082a362bb1df45b52e5b3ad60a492923158a7836152039afb94bb779cef14f4fb543827e159e48eccdafa6592ddb82e565deb7d23db2658c07b28ae6d2ffd7a7e123bc455cf4c6f044bb2ad2ac96a296271b77277d3edfbaa2758a0ee81a78f273100d09eda967ca7cc7efcaf1422e3e438ae3bb3b8e524170dcde787609da3953539d503285d4815c1b1dc963a7d1e5a0732019e068642a5b2eaface695a684693493a59250b51dcbffdb556a8c3194281e59c6d595bd7c4ab524339e8684d99dfa178d75d1b1a7b3ba51f86ebbf653c2d2b44b81dd063f24b7669408a41b42d7ef539243d17126fb95a839d7fac92856d959314b07e77bd37d9c578ab614c6ff596c3b65189da28bd808a00e12521dcd7971009ddd07393e4fef058e86166dfd818d10416edc234bcb98b679cb38390dfb243ede250f814d7487257bdaca40b9afdc9a409bd6b223b5810281ec2384ffa7997575a8a659e8368b3fb97bd8461b2b8160ca663456fbe0ea0d8e3fbd078bc4f92ccc2e75cbf7db24dcb031e7880c3ca5eb48989e18bb92fc5d098aabc99a9c6bec4a7f24de62ac7983c8c39f0c722b70c120f9bbfe4b14df7c589698d21275183c57625a9a11f1b3bc69fbaadc3741096cbc51341393aebaf2e52b2a2bdd9828a45ba0bf08edf2f90ffb9fad0041c399748268b05c7ba7b545171009dbe14dc2acbe01fc2fdcf67405e678537e7afc475fdc06d8e3ec49faff550fdeea08db0edde94db918c7474b25924e4160c8333cb731f254afccdaaea709ee5161388c35be424c9dc9972ba7f767e922ae15af9f03e9f5cbc805a3fcc69a7609475ba65fd832c6514c32ebb004ce109c6e48b999cc6cd7e6377dec0ae3706fafa45872b3b122827da982cf8dd32d8d57aa4999529921604c031efd0086f3a1ea8117385ad37849c8e66e1e67eded26fc690097f1f27257a534ce1d07388bd463e580407cc69ee3da0ddd2265d877a433b455fb9f5fc6869bd37795477fa0cfc2d87bd13f10fa185c25b921b01e32cea392300c836986b3d4e600aee7e69a5bae62f034ce3bf6b0f637e9646f46856ef50b7913c69718a7f87851ad0ff2e140cf8cc7b24fcff8724f4a5533cbd9da4ad12718588f72e52ab08e52dde92ddd46ce5de891eb526a271066e5d6ec5e982cddeff52307815504a432eb859a1ef63453de3b19c94eb397e0938194f95d26dac46af8bc554cd1fc7b6b04ec4d4d95d40515a994124a3b8a68da11b61b5fee1c2ca00a6aa35bbfdbdd42855b284320ec8d0c1848edcf6ac850427d8479eb57bcbe9a11771637886974bd561a5387014592cb717e8364a8183fd4ad463c89c980215ff629d867956ee5e75f71f7a19ea7bd589d7efb915d44dd9789448bc1ac32fdf7a2c911734db2dbc589a83c1a61dab6bd83907edef112d393fac68f1c6998fc6bfc9ee8e417fcfc61ba064979b1a524020afc34d4cc4bc9d0e6136f21667bc4c2ebf286405d16f0c2dbd44746f5d1b02d1c0944fa56b76657377454590ca2fd04590b131286c660f0d55b5d0a97260148a001d7d8f81d532fd331664ac3d7503a2d32b6dffad5f4f48ee0b44bfe6cc05a7d2a14f718463860a492cc7ef4e0646b4faf9731200b53d5f0ae7394926b946c9dcd24de20fbbbf390deaf7d0586e39fa6cadf8f622f269be20cc36abbeb2685e7312e15760287ef815f36cd609172de1ccbb682270b144e4b41cc57e1b31dad43a05b258423425c5e5b8af86bc9bb3198f94391d865c6f71596b5e26c8c22ec9960d395b02895420f1bd28690f6669f039eaf44db06e39e2753a794c43edd4bd1babded64d727aa7be737fd36df1b314300212399b6144969c0c9f35191f5d1d4f641b607faa19b8c07e1e7c44d81ee4167c2b77a3c0102c32444897c4d1387885c89770157aa1e29c2f7cba40840dee51dba87e76251d01dc93fdeab39de73d634bab8b9b7eb3a3a61a2323dd801091869301b46eeadbc5ff5e378471eff9fa6c5ff0299e10bf7a82c09a3f7856c78c0924cfc00a9bccc71f158e1b9c41d13e1587edb089fb35d596b55a63ad62832c6e138b17e5b270a3b05c5a168f3e1d66d355fce6eb78b753666adc36e94de3f139e19c227cc957ea678523ebb73f2ef34a4cb6034f23a4627653a83fb8735a88e111ab862c3af2f989429421c0bfa691dedea1bc01869d815af236d4a77d6741e81601a990a1d25fa9f6f35f2859e490f57e3867bf1bf34e68d910ac12c68abad38167033678668b5e24f9da4a78899f42bdf29cd44e5618447ace0c96d9456227c624398a39201afa5ef049c3a6061b3b2058d1fdb8267d5259b79cb04027b64966c192f86eaf7d23077f14105cda734317e39d77c3f4fc36e875d2db759255dce5d7d62d7365205ca10edfbd278755ff371b55ff0c420356c9712594f4159f46b5df498601d1a2fbce27f326709d21c3f078a1dffb8e21265f422b594642111b793083ae748583a4f142f4e8d27c7535c673f7b70c49e44a2c515ab4d67849cf82840ae355f140dc8ce85b70c7a5aec93bb5cdf0d8f5bb26b3371a144f58b7e7744245d12095490723a0ad6acab95cf2c286ab39cc221440866c0013fb43c9d7c0d3daf45ee22ab947d4511356280e46fd8f05ee604f8e2c0858932074ca1e24eae120d98b7854675c2bed16e462214a3f37648b3fee974dcb9559c6466c235374d2cddd10c86495e2ffe7f2000834512a084d9cb57fbe2a429aba71daaa57f7d131188b9942b9c97ec8c811338ab600208a379f5b8371460fe13bbfcbf54a669274b7718f87e286822f0410f95a34ebc535a90fbc9a3f3585f1540c74ed79443b16211b6e087d319f9b325dcbf72f588a83286a3314a65d4753a9e47fe342f53dbdcbd5af24d86f1985c97415f203fad2fb2c3b69931531b67093d44787561e0cb43e5ced9d82a392873fe081db613751262affba862a6765e0b868663a21134a91ef0d83b30a53ad081c2f7a03b582676cab33c07e4442d82c6dfd468c127959ef64641c15ee139b90d4ad791b7f8098573353f5dbf1788fac4b1f72fdc8a4cd2524fd01269c4810a9f006f9732da6667e49fcd53fb06ceef8d65b85ffa24a16cba724fd7593859ecbf4b895bb5e68544a557ae91a1f84988a761dda024dcdb94b61a84b736240887f693eb844704ad433fc7aabeb9d73fee9c0f2e9c619a4474cfac395b096fd702cb415ebbf11c288c39558982498af948f4d675f8b94622318c91346ada030e86c7bbaaa8ba163c481b6b12875bf9bfbf351d785f34c9bef676313e8dafc7f53a706a97f2aada329f6e700e72f60cd97be94e0077db0960e913f41e6c92a3d34751b6ed42c95152b8b8cc46ee23ab8ea397d0d5e8b5ef5032ee439eae8a7ff2d4ef08733f2061e3bc84e67fa1e9be2760c80bbf5bca63d5fa8c8484fb9f43980ad4c6f292b6f32fd257288433502decd903678678234e3869772199fddad80e11875a33e293f07c23bbf91c4d60e02537d04cf1e6c796c2a63680a55942249c10902afbd8c03e13d737c10e9722bf1aa1b722ca4ebe25b8da510b70bae010892f78a0151c44c73c1554e923b89db313404151d75711e1652c5028c1c6ba841f98c522485527713e0598d72359d9a2573bf541e1aac7b410c5bc416125db69a470021a5b2b722663d08df4d621df762fbb5c5aafeee88500cc1dbd198048a561e2b4ef17482ccdf19ebba803b9b615e3e8fc050bcc7d3b7e6af904af7f0a229e13650944515d4e3196a95c74c86669bbe960a8bbec8dc0d2c7da7eebc92ac6a32e9cd0aaf10d916be1df76eff7f858fee70dad88f520fb440a47939707b07bb759e2ac10ce457de7a6e5603dee73ccf6098d7a3a903ed41c5cc9ab79e0a22823bcbe053f900cfcec0e44802654dface97866799964f033a1e4e72e5bfd0ab53081b84300e06bf6c341834071d145e0205b23106c1a3d001ccb29840305ef0923cd58ce19666951b5662a07e80fac4fe3db49a97d592e23d538171539a15a0e47cb270e52c90ef608a6c13c51b31ce37a2062ab92caca8514543a49c77952abe3a0ac6c75b162cd0428d14975689d832c51f67e7414190c214619897434dfc83e776f4e48c86ebef315e1951cd4381742978b8aebe023a143373c3b077b094ea176f91d95b339b21b947a880d9ff4880419ab36bfd6f12dc44f2cc949f5d92354c5d142221dcb8fc6ce238a1272dabcba00ddecb79d8a96eab57099024b56309f8d7f23b7ac2d3f3aea6403f1f5f09cac73aa149cdef6c6fe929015f924895dcaf68c2a1e0866a8bf11c55b73cf4010229b981436403ea3470d15a3f82978931c277fbe1eda7eb49f6bcffa60a8d201639f31554d6c69170f4f86adc5022db8de49e0467eca7e4a201f0949802aac55b8a8fd3fa9097f099c806b9a2956b0b55983382c077f6d518c56fcae9bfbd8f669de833b11c0896038c64dd2eccd0773d2fe0ed781a253b329372e9278c35ecabe684baf4f398d06294cb2bdd6103cd994e1eaafb4da395740eb295ee02b44bbfe6fdd04291b96e2b73825c3afc757cee655541c67d02625189975789bda94b0731ac2a3680fa9dc2cb32b4c3e9a5e3c0f82d586642c2205fb6a984a717a5690639281f2d4bcd0dccee44ec04c2f5b0a588ff455719535df2f861c3a2ab0904517fea25b34cb12cae7f41587a131552009a53af157b3689bfd1489b28d264cb6d787ad4551e3788ebd0a0809054655666aeb2ec3dd2fc221ad3c6519638491cbeb552b18f4ad0811984fb0ae401662c4c28a5831cdb14b5987283ad77471686c9a8fa43be3d0cc39c2eb94df194a84225ba940a4eee00c2cd3fd8f548896d7812d5e9e18e7f5ccef82053d025a8ac3687b716f8507650c80d8e6edf7679be9f2ece9a316c7c40f1c1fc53181c97d287e6b0a6c3ae1e7543fdf09db2ad827a3a71f593a9d4de49da6e254fac22fccba4c739bbf2d440fea4f308ee155a5e20f890ed5ec153ffe7e7713da202f531f82bada4cf1c4f785d89a139e87de9476347e01863fe666b9bb75fa7e292eff1c86b1ea478969c4f02606d061562e6e881a6f3f93bd798abe5a8ade699f29f96ed017e9b10f8371f9da7daefed5adfac3ca451125ee3473b4669d09c309870abb68d620b50b7ac747fee6f69d8dc302cc4be6bf645980e844e495c1b3f0b0faac54d4d77806b58e839928f16804d94c4ea53c917786c6b216de5c4f61db0c91e89efb5625889e8e54b42de485c455a2efe12ece87fd6c99d15bd9fbf6520397184e31e4e2179c8e6356dc1a1c55a1ca5706a3c0bb47dc651e64f40c9addfdd3e36a60cad73d175857871dda563d238c2f1c85ad3ceb7cdea40095cc7405620ef2fc6f512e8177b2d94fd86b5a0645b21f2cbbde3171b6cc0c37a481ad519a10ec0b46be0c6b256591b7f51651376e02ce3c2d9bc362f1f6fd1109746c4a0da17aa0cd5c9b84873926c65d2363590546e557c32c1a4494252097acedda76238944c2ec72035306f54185f6dab7f374440b8265d85da209211dd076331f5f458ff1798b476c610b6389faa982768d22c5e9c7fbe8b501b7b29bc54d90628dd97d29cd9224fd34fc49a72f5f65c7b07790272d6da449eb06a0427c1b4acb87491996c7e951de564270422cfec9d3e2db6f6cbca35442e75eb2bbffc6aa84d5fb2cde6e7816384f46a003f76ff7c2aeb628607d8540c77e27b1ae5637f8b2ff597da9cb28bb33a56fa0919a9b37bb997084ac77fcb00136c966c287577c808dc9d6a0e4df87f6e2243a961d69d1e62d714bf8b3eeeb179aac96a09c0d7e1408b5fd6ac386c3aa8dcf34b786c00c6cf12245eb37453a322f390cf09c404596f884bbb07006b8762fd7579edf8a31756de9392e0de7e57a7fd68f5990da1a2fe39ed81af145ab834fa46bf330ae88282a2ff1693dbe341611ece6837fc24506536b1c4f502de7f8759e385d7f1459aeaf5d3343cdb06e2f6de4da1771e00e45cf534ff895a5b3fe2a2d8585d6a4ec2f84d9c864c7a7ddec1c2433bd6f1cbc11e0be38bcc69456bdf4b91c133c4688d2320d7875328ac776a516b91c7f5e99950c14a044ede4195c5eaac3aebae277bf405f0a1e174175f4902133ddac8eebf6debd4f38117c4404ed6843fe5660ff1f363948067db32f8f66ac6ba7fb94fb5fdb210d3f3b441fdc2b5b64ac1aa8691a9d02f8d66cca3d6fad212723765811f68da8a2017224f10d9febed600ea2fdd7fc22e335ed6de6bbf0e730f924c375e37bbbd527be0404bed181a8c13937027fdb01d1cc0684739cb4664ed00dbb6e4f2dc06f5927cc9e184a835b78a34dc239c2078a43c1f82c39830648503a2945622c21393eb6640843915bcf2d54cd832e3a9cd54126af59bbe42fe822b2f64343ff44f87f72b48a662e6fcc8755a08e85ca287b6e3c9242496049f4ee7d08ad1b2e9377c364a56ba9aa291a2eadac2b67fb1345730b892f0c7ebc355ba449ce1142747db3921df5358cf080cb64dba1fc54c5f8f89b7d672bc6f073122ea0ed4ec251d1f706056e325c2bc70683143a6b5da65fa4f55433cfc04e76bb23f451f936913c36c8461fc8a344b786103e3cdd9e1f412020f8db20f53c05fd8c2f433b269c8618dec6501de7a218f41643f079a0966513244fa745ec23ea8070380b3c1bda7747526f495cb3adb2f79a0a9e68ea7494260a43de672d6cebedd7f7f1239db3d6682c2851ab8ccd4d38a67b8ed104229601d9bbcaad417dd1ecc9543d19328f6d2672d8b132fc6ab05e417e07dd7706334b999eb140afc063244f37364564d602262e69b21b8aeca41274fb53b4ca8a33ad52d6dc47ff9b6b3e708825d0baf05e1367c29a8bbfbbf1fc46dab87d85155dce0d4a93ebba78afe1352f52e1bc45499326cbb1ac213f5fc3bf037f61310e7a57d2e21e5467bef9b6a41405a1f33d8b4e726c41a63ae1b510e75fef8755df52efa786c4a98ed50f65c8 +MD = f000a65033dc5bf05c377da01406f9549c22fe64b157b707195a8288bf571eb81558912b364f5880da3c779d5b1a0f93 + +Len = 47872 +Msg = 791cb35b464f87d536a35e175eaa11e7750a3dbc2d813bdac32653bfd5f22cbe757e87ea7b0e2d351fcf26d9c75d2cf71d88607e65583b4f0e4fc69f86ed0e9c537ad25360ff80d194966088a9e30ef53ce32d8020e45aa4f8d55f4f05c0a98c3c95fd5f9c2966f0be7e72ecae459d29f9a10e89072e8120ab428599f973e7d558596ed6d895c8dcc511c5cd7c8ac3da7d4c6a60c23d990c4f1d9f430b0cafc1ce4d8e80bb498fdbd0d7c1f3bbba6752ef6ba8cef81a88b00bef1716e295e896c7f9c524ee4fa1360757ce2614de71d77887329b51cb3854083f54da27157c9d6ae67c8c18afe8359319552d2efdc8b240276f8f775a8f406e95be578195521ee09b197ee26f4b1f9ca5bcd1b31f562b6ed3c7710fce77bb6479bd54991c526150a006c3f399b13e49846dda484c02892b14a20bc430d70f1274b99b16b264ade37ea923f53404d8c33dce10978db4169e7068233b879682a10d1af2a15f704cc0bc6c658d492b363258493a48e95418f07181821fdb9e5d39cd4822e22c5e8411e2b65365df0ea0bd5d45220369cbd8489f56f01635d6e8013bacf38020169efb79eeb325fe955d8cd52a8e6f14ff9ecf814d35c89c266a22dfac2c244481e1a8087e4e75aea8b7c8485f4734f2d9b2ac9fcf18df18762dc441b197759e85974017cdecfbf82ff4993c4e15fb0b415b0881456200b1ae770dea24fa1c390b06ea2e435562e3125d263b5ebf6c6820e20bb015dbd570b79128616b1ec01afc78cfd648505078393a98ccf70f2e105c8fdcb3a94b065c77c33b2ef0cb0a4b3e33179644a66ebe8cd3167881cbea0bdfaaa412677a3b7dd7546fda19c8a1d3bb80e9f79f1f63bdf46fc9c564bc47628f7b8a56b9301bdcbf8eebec50df2fba59a66d80c183d77d5758d93d09aaee1c564ab70606344e8018b7d8ecfcd6590802efcdb9139a74079fd46d68d65d86411b5e53aab54f7d72c8185d628476c9c69da12e2afb2cdf62b22cadcd349cb8dac60085ca304950b8b9f9a3d7528727fc1205bb5ce200c3967aa8c2f48c302ced3e7875efdeea6e5cd1a2d1d3cdd11ab0496399d631dfc6acdd8fd46544e289856d0e4ca027f98065fa5a10dc5d1b4bec2903f3204e9190abc52b0aa9c67877a73a0a326673402ddc1b6a887c6a2f62b79c2cefc3a3deca9b19c28d4778baa05d8db34ec82a851ec81c1a603a5cd3061a8a27b546968e1c84c19d85c7c472a9ae4e52c94eb491fa31e4b2c19e9cd0df1bd93d6e3191682d6fa40419b211663da3652fca807a2c6a205d7ad23190ee96c572b3420dfb35a663ac3e718ec65f0242bb927ae7e21d169b6ebabc7aa1f4d31d3dd458603cbd2e69c095b6e64d25a09536c3010a552ea5adffb9a60237ac3d2d22e7d9b5bcc86e88c84f103f0d80c0a4bf0986713c25c05bf9c0b94fbbdc7dfc0a33ec91e21e0ec8adb5a6236e380a753fae31a5fdcb0eaf42171ceb934d3b92db01ba7e1886b531550fa119d81425139cf82b2d02e838b0c306f85e29c71ef87f996b03c6ca0bcca9a528aab3deba83c0309c91b144e56664d5752ee412ce35dc4326a952b0baa091be645c675c70ce919dac5a74a6beda0ecbbae52bf5f451dc4713f6250167b5f6a47dba5c57f0fdf989810fb2d86a13a731f00a6839385566ec5b74a784bc14be9d9a49fb96e118df3a4638d2a09219184f3e2602a64148617c26ab400361c4d3f2e393aae3ec252af9215e3ec7def54a6dcdc06104b832b73d9b225944fecd1beb811fd204b92ec40e3a085d15f5ae24d3c560ed1b441b4f78e36158113a3880cf9c75dcc2ef3a94c1babe9751804c8dc94d8f0eb38e0c117425f0a730bd0ce9e85b1e2ee53652825ac908544526d86f968dd32c933d0ce57b8a58ac6930513d7ce7a13235387d76208e6ffcb79059b183aeb7af84fa24b3d33a20d1863b1066d468864f7a9ac3585c327af77066d73bd8d8c0ff4e6d5b63c55cd07d4d85504b380556ec7b072c1057dcb2ae384f5bf5dd327884b93db9dd9919f01788b719d4efe698730125c18756b59d87d6f3ebc7d9e566a68d13460997980909fd7873e94334d44bd49c89a3a4e5c5eb14fb9299161812ce91960bd00702a2ba757167727a1792dcbc158c4d8893b243b80f5553daf405628e6f0f18307e4492b74afc57ddb65b8e8138d36e49e8eaf58bd63edd6ea1c6cc4c455acb5b3576f98daa3b80b43ab6c9eaac65ec300bf76b55f9541f1a46dd7293c1f5cfd04ec057bd392ad647ca2cf5c01a4bb18524610bde1f9f01250cd3be2b8be70ed7f2aa1410a0d43fdd8f447acb298ba3905dae3fedf1286cd91a2f16db4a386eb849bd984e873ea4c0b186c0d3822fac98dc686e4c17f6467c9979e46ca6f1d9ba7a804c3f9572ee36577a30a0cc3eb3e7c916ffc138117957b03a8fa749193626ae7c96aa73770388a9a930f9b0c19fc34d415c15fc82ebb288f87f51d8b86d440c37df59c955cdfed09a29a8d6bf5a759070ec100d5086d5483e1c35fed7655cbd3b90123e1433dff4d58473e540cb44b92b1779108330071991ce1a617c08b6e8100f9e7abd1c753ce3a723864dda7af0fb451ab024d391237bfdc7a9b23d9ab63cc6c526587206d14bfc8060ec6f5e5f66deb9933a56bb8d8311057f7eec4f4f491b4eeaeb1cdbdb95e9511c2872372bf64a1f61cda1cd8032729c8beafd1edabf78036d80023c814ad8606106cb4e7f33f214c3e69c0f230e885474fd594f7f2444aa581e0c70ebf13073d89063eb81a43c5f608b2fc99fa1bcf5e2bfe62a6802e70c52ce22c14212595328cd205559d191cae2c742421b7374467f398df6bae0c9f104972c75ae35bbc8fac5ebd630425a1bee9fbdc3c00a1910f07237fda0475221158112d556e3be99f681adb42e80fd1b2f1d8894b5f0141be072ca8540beea632e94bc2963a3ca90c3084c387a12e4924a488bfd23adcb2ff54230d7c2cdf980f7d912b9fcfe47730a62b2aa3d807548ea28af4632c7a814d7e94f3b4ffce7411757fdcc4a7b9d0b7298c5529e531a04b5c6dab609c812912f6f11f80fd41c6b371663ac75a23420a4b16f77c6123a905329f596d1387170a5dd5c5829dc00c9fe1f2e9fa4fb747a47b59663dc453cb26d59e92eb19d2c77e03a1aa1c59cfb22157944eeff0fc6e004ad245c09748a33ab5f9cc6d281ad6f898e321c0d9d763d232c8fe1af65901b83a000ab75288bdab442f8a65c6b5b1f47e28c112766d7e3d141f5bfdc853bf46b96129847e8a771310ae41676e49e51c33d10c83b8088dcc7bf60d2adf830306597426aa83d46bec9c0475d4873decba5a7a6887271eff0acaeb7604b45d69a18ac786bbfaed08b256b0bc4fba083569428369bf3c376e72917e2b2def494f92ddc9ce1b5c3ad9eec131793b7f3f5ba38c9a847e7fd8488e501c8108d8ed4144b309615b10446bfc7c05312a3f59dbf3a91e4d576a8809c897453c1809afdb41bae4e4fdcfa01b85e7ba788e82de12d4289d28dc74bd4ebbc786a0fe0a077a14460add75d2c4750584bfb3fad232acbf7b75bb6036ee73d2716f540d528a9a36f4e99f45d22814e5e39377d1b60e16202256599519a215a7155dd9d86bbfd82447ffbef0465157b174c438b5a6b6cba0adbd97fda55ea0a433e086e1ce0da056afbbc10797c6d9f2c8c07b191cc359bb8dfa0aec62aaa1445d75ffbbe20a8f68acac29fe5efef8244016c36e90ca2cdb43ba06f3c9ec9411e2aca8b9502d01b4bf5f7e46f4705eb08b4586489b21d17a5f7c309643baf59773f3268c90eb83c56824227400b16a31facb48199460d433419f0c66788c524f71c7dd881ccc923527c8aaf7fc3897333f169d64351da1708ab0fec6d0d716947cb9524e5c56b97e8e8b9c555f8c821e98c5eabad5aeb5ccab407c49d531cf20e5460941e80075fc0d0b6b1ea303a75eb847a48ffe9aad9213dc29620e12f85f5bdc86f54850344813b69bb65f64739e1e1a7f462867e58b64d27aa1e3f10eba410b4ffae5dc90ed432ba2befcf573372acccf8febacf9f30ec1e47bef629ecc2550b8a558fbf8560bc9148af45d22c47ecd09cfa0c067838228fb6288de14ff792b75971a34f70cee1d65bcedf21ed08a99d287e0589a976f86240858c9fdeedd19fb42922e099c5a971ac7326aa3b5ceb1ae4b42bc1fa91757f2bfd7ccd5f4919abe2a593d9c6ee1d4a83c7a0d6e1ebbb2f18c209163532a2cfbfb7e4d29bb673c32d0e7ea4c0f1444a28f2d70da55e20c40bd024f12000853846dc4c165adae5cfdb8c6ba84f752757e21b53b8515d23c1060706b885a429a306933c01635d7ab73546e34d3a22cc5afb6a9a3dab8fcb0e518e36d52ac593f948053dfb80e8376383656dfb4ba13d3cb90836067c9d2094348e3caed70ccd205459d66c772326bc0d10921a489a82e3651daf798b2e2a39f72fa1ad5620de0272b890bc11b54ea81a70d912fab4a13946d08b00a2ebf2e6e198ec386eabce86ea4af2531647b710f4adca4c2998a425a64a5402877c7f843bf2a5b9e652a593033684994e806adde1eeed2e9dee928ecbb391e70388d9f94d64549787bf6c1307a5cef781096ef52a5bcb211d5d745efe32cb16deb7092f5f17823a199a2bed3cbe59d37689cb42171deb8e738d517c87ef89f9e0b3160cb933b60a648ae809ebaaac96f6a98aabef5cd5db652731d0ae1353f7d121087aa3df796f2f38ad4f5b904fa9c911b217fc3f1272bcd31d42bbc6b17878ace860644352d1444c81a7d699cb72b7684b7084ef29b93f381bbaf52f2ce49efabda54588c998696d6df9a2eda75b88565e9dd094a21ab8ff3620a6774ba40bb38f338ed6662c6743772d08b36bcb0385f186285506fbedcf735c14c5971e878066f18754b2f50577aa2b5014a02af19a0f13d35adcc6a851dc56874297bbda094bc7772b345c0db10bdbc237cddf1a40bd2c1bccace2af2d78f74916d3e3cbf5459da88274c74598a425a6457a54461d05b946d3ffb7ca0a4f25a168d3ff24ec5d5b6082fb9f77d57cf243652ff03dd9eea29d965badc3906ac9d6602075ab989aeae853504d69109b28e2c0751bc61d80cf683e4b2c6168d0cc312841af299e0430881cfc37e4f00ab1cb7dd33dab91c428eff2549c6b3a8914fae5be1365a9a316870685c7af1dd07346c5d2beb2dcc19679db0065aaad9e8b79c2200b295f80842f3875649440f5589bc0f807a4a680ff5020d6efe66a1618f5e5edfe3b68a263c6da5375590182471195d07e4899074dbaeb5ea3e619f9a2b876b054646d11999516a864c7077e27f16ddf8c685b6066006121e774615013089eee746c16d610e412fb98a6fbf1e2836faf99ca9493346aaca62456ea22522e8431c81b0af8aefbf6d479be84e35f0fc4c70e37eda69d3ff475c3555d7747725200b739f27f5d21ebbb6fd64b5d86dd93af51770da38bc960172a396257da1b2de4a98d7574049f1939e2b8f7663f3505f0cc529e91e54e1913c3caa0cbf3733f6406e03cde8bbda7d53a2a3107725e4211e6904579931747f1f5d0c0da7ac0b00837faeec5d9c3bd18dff5a14707a1719a06f8ac627c6c103a2712698d574ba858a2a33431d8f985893ae1ee2ee646ba1396547b548a949f75c35944eb725c4eddb0a3b62b6fa724b0b1b5c1c4f8954605fd6a5a58a4d91a2a306df9fcb33aca1ec9c11bba8614c515ad3bc11223d53df8a302ef74b281aae2d6162fc8032f45a356c60ce706898e419739971f5050c772f0e6e5b29dd576231d1c8e584881e7f5bd7b30b9d54ea7bbd578eaf3684c0afd4cdde21a4b1da7786d46c0b36c79d79b68a53038dcab390bd1c06397511231201fae8eb3a5a164662e5d6ae1555f3e1dbd0fb36c03e86cbaf1d8aa12f5ea6264d122938593a8d677c82a37ebed7b43042680625e334c674f9f8a666c3a1bc54fca019698fe7c2432a372ccd81a140fd70abfe51552205352429c3fae0aef846b721342f5cc63771f2700d4b0c674c91ed195e39949ac574b41d7dfdf4cacc440321f3ca3e7a6f7c7bd9bf57bd8e19a62e2ca04f301389cc30603eb07e89bb05470ef2faa358dcbb1cb0ad74238a4aa29a726f12a610c4a42f8e80e2ec5046d329549c113a05f1c65bb16230dce0520fe877152465070884e7f4dee5dcd2f265f0af69ae50f66116cf38781e2824b2466ea72ce50b8ab7e7103fc339ce763016436be632869e8d34ddd2598cb3cc0e0eb38f20e4f80065532ecbb86f1fbea26ca8068c4e4982e8990dfb711cfe4aa7914dab9ba4b90c93519a3538f66f20abe1952be642283805cbe630793f662521a69368f794cd03c45af8e8cf502b20cf1d71386ecea1225745ed0dbc7499e00e973b53cf35b28a6ae7b162d60cd2438e68e2a8903422d67f8f88efc55cf80fc0eb9bf87d17f80519706a3007ad030d5c6c5018f5234bc8c11150532e491f18db2c4bd39bbc1c08329d69ecbe812bf2db805ff6081c7a7dde63c9d441c95d7fcfd1a151a5827d0858c756d57559bb786e5d58cc33703d6a2a0f5befca7e51c92164531f251bc989fe76b7a6c6774022975bd10811cf1322366c8d0202a89a69426cd77894d850018623e2cd1c6a4865e8f45f362d998a1a7613e3b7950875f4d543851a7f58cf13a2778ea501b332d6c5bf69e2e16010c78b8de67cfbee92d04c9102613f1d8514b5ba01eaf0e2add9d025777ad7a325cdc9430bcea1fb7fa00acdc5e96e8710a94293f2fb746908037acf1e7a7ae35771c1dbda39119f7ad8a262561f88360025db7dc85306c6dfd83804a57e35a1247807a0c828e54b32eea5f72960169ac23ee2dff88e227ca3cc9a7ec2d2a25cfb34fd4a6c2a779f265687e4b6778425d538eb431a09520ae2551495fd344b776a2d35211cca530bd3a4cac383b27b87c7c8674f83510ff21a0628c29aff9b90efe521dd7074f201b95dd10c27bd4710f851f94dfaf1c6b2b95459bd42b11d3a0ae155c7fda6ff2145e64d3708d481521569e3c6b76810cd5ec439ce8ad53ac339a643892afcb4eb07d291ccbda4b4db7d74e9626f2078b268da2b8eb9f88edcfaa87d997ed2ddaf8da74145acaa5c1dbf076c7978b75902760aa166768783d7cc6c56616fb5b41f35d8de2a5c61d1894895dfa46aa95c2de4ea5dfe370eb4543d6670898431d29a9efbbb034347cfaeb8a4c55bcb52dca553dd93ae81fa9ad2bc2b5e6a42c3d3b237648a3907d8a11e6db8b008016064f94168f50fddd791c3d72f729c21e811e68db7ae5400a0f02906462241a33e8faa1c20f48aa12253a80ce75f87a81b37a80079a9ecc42d378ee0e19e913769b738628a14b772673b0fcbf777c55be99f974e1eff5bd8c9d190abff776f246e6614b2f8d81ed812c26b92b44dcda3bfc414b50c3139952378deb6045f43f0a926df6c11a11938b1843c0fc25419261a3fa0d3e5c20ebfb677d99da4c8a832c673e91c59224f1adfeb0181862d3039858cdc392034338eff6911d13516144132d7d23223be1904da715c96943b9b749e161743400a40a95ac707ef59fa00d27acd1b5c25e71f7d5dc18dcd50f1c36da0760280b9b6ce85750c3c4677d7063d0ace34e8c42fbaeab63645846102306b5926fe7011cc35b9cac31f75032f9d076f45af66831a83e39049f45a38cf7b1404a38bafdcad0eacd8663209a0762db814ddfb53e71a02ee58972abd4ccbfbfe5f763a8e8efbc1d50a700472c44d40d597f1a94f64b0a0619b88493c018a4b60b6098baa8d1ae7c8ed7b172ee3176ec6652b29a79070e4f3c5b7e0451b8ce20194e7ef726b8cf90efdd1eabc8157102118e50d0adedd690b63807076ef364847989bd674aee47e0dc83eef9a23aecd7c0fa9b3c7b458751ee18c8a3ff128f6b92d9fe12fdba3df4bb8fca6564e610f1dc5f3ce8cb564c1b4ec268e0ed5d765ccc06e9012563d955f5ca59f5f66205dace85dadc86694b743d0090c61e1c42df8fd7253bab32458af3fc44b340f6f21afd341e1f92c6ace72398e85e7b971a7c43155bc8786fa61b1ced32a72be9ff37d034afb8d9b598f9695317afec1627bc508832b173622791d764ccd89d8556bbb14c37b2427e373475f9c6c15ae090261ff853fd8352ed738e2bba4e7f101c2e07465b12b468b01fb0529c9dab3e7e43162d65b492892349a808a311bad37c1639e8c5e219bc2c428225424ac97819999eee11df874def9c8dc42f2a34169cfdb1fb1d2a58c3d226543c5fd09ad688b22005ff8449e779f2a42707a0d721a46ad6460af059c2cb528c5d9c38089ff4160238d6aec29fead657f8d37b8a3bbde61093353e04043e4e9451a189fa1d844bae503e62d9bc6acd0d013ac334ad0ff8c7a8461b41d054a3d2e015cb579661db8a15e1aa768820612f08e581bfc0c128634ee490f86d +MD = 8fb6dbb1c436b111c9fb5e24751a162868d1ad978c1c2c66b1433eef14fdc6eadfaa7f3779b7770bd4c3740dfd4a028b + +Len = 48712 +Msg = d3bb8b76cfe5f0d9335029008b2a3b2b215fee5517627f17b22a96caf97b77ec7f667cc47d13c34923be2441300066a6c150b24d66c947ca7b2e708eb62bb352fcdd4cb97995da30efd957194eac4d2a8610470f99c88657f462f68dff7561a5f328e19becf39b563faaaad20db75a7e18a697e3d6e8a587c4d01111fde2e7ad0b4d25b2fdb67083b93706b394a8f46c201d891145af0a229480a760d7f9ae32ed56ff48d565c07e088a51030c0782ba467a04e010a71ef00b78a1c3b6421efc404a56a39b88f210d2ab750b9c5d6e3131c7f29a5c5849b8d2c2e882c2469fd2ad32140c78a87001c0a058136d301f998a0c3a855449f444906663e5228c9a7edc1520cb944ca1197973e462a70bfdbaf84fc4e91d02855aee6af934ff9d75c674fb622816fced1fa62cff427173705b249a7810e20b66c394d894b680ff9a731eedc26b2640bcddeed193f9f3f2e046b5f43e41c9edfd4729b71bb4ce3c6f4d81f128dbeea17619fa6c87d0560fb5415466fec3fa2fb4ad5610757610dc5e1b46127cc193a6839c7104c30fc2535715a9f6a0df9e59f2bfc2ea8c446f65cea71455a66540d84c2efca22ffe5e442f8a5bae0cddddf31e43154d4766136127b794c48e0f1bbd3796434db3e5536ca36713962a05de86a202f9428e232357d0146d661d074cdfad9eed0d370bc8531c7678b5e39eca99e5c414cf49c5c8d0338648433994fcc6170ca3eaa3b9e67f037d33131df2c8b54f500eff60922953b7d4cd64cb0053f8dba90ceddf37d57abe45ebb8c1470161487090d7bcd36f68c4c8a3d0bc9178ff633dd11dd3cdbcccb79649adb8e69d2538ea426143cfc197c228738ff29094631590998368c3c3fb5437f5f9e817c3898787cba4ded0486919bde4aa5745ceaa5b690d2584601491fff296a43b229b169d0fd4a8761c2b65324f9f28d2f74f5e9c92d40d10edd4161f8dd4b7984e4e53e34a0476f1fc931473a64b114aef3e063fd19743f5b22e101bd15939e6e404c9bf00041539b8a8fc4589916ea976c42baeeffecd19f748095d86ca320f2ce4fe9af87b8d349891a711c11946d6d2095450b4b0b566044a884c74d2aafa6e177cddfb12e7cce4779d3d178aa1b94b34098de75603c3205d16506217aa8ff2c5cbeed1712ae8e3816433508d873a2b6ed3cd5297bd1795a93ad11a4139b6ff147137423f5e6fded8865937c90141b8de3878bb1ced4ca9557c3762f96057df2ff81e16248b4b1da38b1993e716b63cadc2f6eb8d9a49a58964eb03e7265ad83ce80d14caba63e80bf9da2b8ecf81fd02f9b0aa91cdf6d16f7b53c5b293a73364c76b05d6f39f87385a03c867328a4406640cbfd08d3b742c48d86f02af2738ce1fa0b1f33ce7415135fe32194aba58e08b73f4f3e200d7eb53e2cb8183c02ea37714e0c79f23607f1332314d1cf783b9f64e0fa2d42d43d225da9fd5165b5f0a582f5afa233b2ae97b078dabb22a0bb92e03d9846caafe094526b4a670e1112c4959e635d017e8b8f5e50dda133c3907bafc1a42b15f50b93b30d29d9a388d30d2fa4e20afa0e11309347b83471355cc229f9a83ac35830a905fc0619b4a1b3f7b7a5862c7bc5f23405c9d4d5799a72fef5620f06312de23cb1a489b7bfd0281cd41cda32154a80f21c53be14ab47659a8887631e0e0a82d74cb30f3433b8c1d4fb7748dc351050035d81fe6284e0c72d59c62ed2b852a4f14d94110faebff3c8a4417c6b799be1e02fb1005f94eafa1fefcadcc4aebacb232ac439ba8f5a40504517cf605161b901297d5e6c69ca80eac0f1f7847f8757d56acfe3b5540c3a147446cc6b3ae647fed15373096203fe2663d7f962996cfd908413a990ab6a437db87afddcb4be01219dbfe8c72c2bb45b5ee97d1f9ac00eed1d3be5dcf3e8ef046800de554d4d8722053f2a1616a665e208a2dcebe2151e338ca532eaac0cbf412994e83573194c68ae4da186b0086562f790a3880df0ae1c68ec1b4a525a16ac6393961db4a5c37ddf58098986c64546a24f6b548cd730f0187d098c753597aebc79827e80778eda3f0aacaf19648815af1b8ed1dd3d496731d478218333a4e08ad317d86502f0f633c21557d66790586491a8a07d9749da4b9f019a1ad8e0ba552cc09be0dcbc6a641ade345c541077695e2310ec79c4d1bc1910669aa9bdc4b1e337697269239f36715194f99e6afb33bd98c3b8594ce609ff3f17810abe780792d6a1a83cd91d21623a1a5ccb126c4a5c74395fca447fbb9de80d7c90454cfcb818d4e0cc3f5cbb69d234f44ea94313974fe241214e075791a5e8dbbee4cbd7cf8893baabe8e67af4c4653ebd9218361a764f1b02bc354466e31a2d0b3f7d4f45a03e94304832d69f8b3bba7c6f341842a1d03bf32152387a3a21fee9a7c9b9c6fa661c0defda64d69128f62f835f309c3d26325710167a681580bffea039adafe17aa0a942458c1660ad503b80d225a3b2b17cc30acaa0ad0fc6eeaecb65a17d101cc076e1fcd2eb94397724ea355de59cf299ab741731b58355197e8bb62bcae0ad0a1b4178dfd2866dc97022014fde767a0794de64b41e1acbbee253a3a2f5edabdbfad331e947c1bad5a1bace71fab9a85503cc3b9e43208b4d7ed5c6bdaa91a9b49a29c0a5d7c0911a3e36e57ac6f11df06ca02456c14f2443a86487c2456727226db79d9bef2d9105aa08feb0cf973b68540c877414f1274ff3927f5742f894b40a0f31121a432b2679b362ca8116913b4e640d8cbab0f4b0e4e215f34fa082d7e39323ced5cbd00b21c8ca0e6819bfd7b038fef73f092d14f0d5d41cb809621c8ed5de18ae02201236bb9d12f10b07cc2e0e0449fe5420fabbe0423a189dc2e06069d8960f808bda3cfe447ec85519871c65960b853c80c08a83d8d1edd825c20ca19bbd76e173d1892368883a9255a71fb22ca2702cbd150143108aa432fb3ff82faff5709f8886cfad61e5e44d5c9a8c7640a53baf464694a081bad848b3c897567dd489053a68550ec91e31e08edff7447a9a343ebcf3d92e94f8f683ffea7ed89de12cccfa04ddba2677cfe67cf5e49f22e8164571ab234fc2bb8b7f301423087891d85157daae51e2a90ad9976ae8d8e2154e7e04bb2776b3790394e4e40878a67d182cd4586b4886186f447ead589420b83922f6c24a55bfb80b6f9ec8b3abafe978d9e01c8910995c8991934bd853773782eec84ef04f600eef59ce309913ed9d56c30b858c4c94dbd64b65b4cc894e19a82bf9cfddd64cd43bfde3ca4d43f7df4e82c721e95ef11cd1fc7676c9c82dd51584ebb3577cdeae8dc67fe424ae4745dc93a37014ca3696090f361044729f0057644e97f1c58e04314e031cd3c564577d70110ec300fdede81e350fc12b0a11ea5472ec3122d36be2ff1de2cf2bc78a9da2a04c48a58f7b0b83f3c3c45407904adff93e9a27574c0f4410c47b43f955d995c1c72a2a93d3cfdae2eab2800ff2056161fda145823b02c79c306ca0725fadd405fdec02837eb1ad82c330319bbd86831db7cb0fdcaf89f400b517b3bb0e86e7ed5f02cfd6d25d56641bb1db23595aafbcdb8be8df1ff153fed101104bc8e14bd86912d516753f800722cbff4f6c0e519ff77852f202d561e702bd289d35697a57ba70d4caedb494dc96c310785bfe136799f4e0ce0ea29849d8a07f37ca7bedfbb1b1215c92791f64d64bb126afc66f84119614bb89e58197a16f76940e952134ed685d5409d97a206fca53d2edd3c0761ce061631b1a98612b5ec14a5851ce83dbfaeb39ca725fafd1d36b258cc2a0ce1a58592d18ce5736a502c1b35e1e1078fbdd4d863ac01a639adb7967030faafc78525e92395d4878cd000a778666c184cba406b2014f44dc2957014fe7172971d582f43ac353d6b7f1bb0e0f57c84c27c9d3b955846c697a1bea9518bf75b6deb05ebc7f6d4e9c74b1b84ed348cf0ad284e0b7e95ac3f2edd0faa789e297cd83774a19e88dba142f9b6c4f7bdfc798258b4f84d5ead27b77e6fbaafc0719f810b8d99efeab02b848fd6b7251936e7e912b94c2b3cb145dd8dc8231e78368a0f6e381ae3a5bd4f361862a6a0cfa0028960444d3fb620624511012bef4ee1062b695d6ea24069d7009942d98f67a4910b493e45b25463469a12021b47cad8db7d02e4db53431b89891c5e981b69a95e16d68d7aab9ee0b98299b33b517584d1ac43b5aa1f363d2f7aa89e2b6c5e172f530d1a35531d0083a5acfcd232d64db06134b8232da2368f7a46ead9a9ce55cd6af8cdbdd1582b6bad56c52a15769c3f43dcd68da60f6e7232fd2aecfb3fcd00029f8e5c4ed7ca3b3f9cf68920dbd747fb43f532b1034d9f49d546aa893be68fc3084658f22343b9068877387b8f68903071fe5877083be068d6265c7c490844573ddbfae4c300aea721307f4f1ab5e28b6fda481fa5a0fb3709b249fbf29be56346378a4d3f67e1cd6f09a5c4022805b4446f4ad263e4b95d75d3bb2fbc073b922940505420e21c1e7bebf401d127c052f8a7a5b8c86fe283226ff83f31b50e89f0e09322edd825424cbcb22f0e1cdd0d9469a3f85ea93e50196f4954d90b26f3a3fe9dde2eb1c5e2ea662875426e228f1e9c8abbadfb946d61bcf6963b724a764882b4b16cd4c4a65ecf9efcf485587da12aa3283ccbae81023c472cdf5344bae95321c32dabea35afe15bebacc9478222fa36689382523505d9843f4d14da688d5b2c3bfc9dff38e582a96bf3a2b644abf48ba23a894931717af4f60e1fd5283d811c425e12ca56099ccea44f786e6b4300e9ffba465b1c4e07e07aa9dafca100ad3bffdd721438221613bd4bb338a0f3069aa799234f9fa56790f2a6af197cdec7cf9b0026a58538d8c0df6cbbda8bc2eee4c16287ef617d844c878e05f260dfb8213d4f9445e654ca1d313cf81cd3b8a010759ada010bde455c61e74351f60c66790e5325bc037cd472dc42d3c820dd0565edcb834e44d09207a73cd3fce66cba1f369341d183bbde060706b2a41c3a032d4e7cec9eb55c539782121cbbd7079c5adc98514e0f16d022db11fe7a6dd683aec3367cb90589705219f3865872e6f57328e8bbf94e97920e80ea2010bbb96e3271809b66dd60d281956679995e10abb2430de99ae9450c121d197e2eafecaaff83e2b16fe5e75f6b1df45d48438da85f558f41fb87282776da27829ef076215d1fe4269ac428005ada239a2bcb66d2c285f42de3d149c981e09b9327275fb9966e0f63b0232b9e94f37e980b9ca21323fcc614196eafdb7c57fd1890fcb05cf197eace78a9f61f62918ac0af5e4952c9e28c5e66076246af67d67ba21670f1b5c2fed0bcff936d0cdcd178e1ba6477fd5ecf7292446bf06236ac23251ea7602b19d1d242cc0a6edafbda296757fa69079816ba65ccd1c3ddef0a78e1bb5d919bc1ed3ad3b9610c14172d3c0adf13122fb9e99da7489ca667b875e29d969b6b4ce5da71376ea22d0157531792f7b759bde9d0831f5fd5804ab977c9235768d888ab1ee03692d5bbeae4d324c749ef26f84f54d496ba833bcc1c979539a5cdc0953b43ee98cd009d17e535ca717dc2612914fcf9d401aebe36065eaea828d109bcbed10224c92dbbd0830270573b39f3985f5158a1db5ef1d0a1527d37897c9c455c4e86a32b63fd5de6c180422a5bc28d59da5ac5f09cbce115fd68b070d661783c44e1de9eab4b0535fa61faf230b7502a1f6707e96f07b38ae7d8d984e8409d873a7b9ac80c8d1299357b473cc0ba28f9a8e8306ee0ba8c2796367c6eb922fb64b9bca2518eabca39fb36f1b014b45feefe430826f6bdb51494e85fd651eddbfc480cbde2398d763ed3fabff5338b3b33a8e257bab9f8767a69584b62b98b85776fd3b223161c5dcf462f7ab4252905ed2e2be5d1315416819bec07bdf8e241fcb6794abb2c3ec915db3dea94f374044719887a1467b7df50b40e5d8d16dc57b3a6664d5383dc00371a8cd73ea4568267ef60dd2b620b17103c25137b1c600ec5c602839224df4b5e8b84095940b6c5753b1bd7bd2a3607e8b999f22e1155b05a9eb6b321162df2b2b78e478ed07b169a82203072c822f701b5d1c24ffda58399b7e8a7a761b03d5a25105b855a8fbdfd4ed9b0f443b52e82b7374b85e937d0ab980225cd0e4e747f5d740be5e9d902c826ad1ee8a3d9f69448325479dcf3deb8c96af63b24f1de48e820205682412d20930444f9f175955fef2aa7d2dec1f7e7d38ae298ab80c4de4d7e62822faf852f1c47e8cd3470540a34870a39f78961603dc8b08cace36e6814f4980ef70b531d49dcd30c74b47bbe9fb246563033654c8f8e2ac12d02240fc6ec8ca5e33ddf12a22ccd5fb92852a2b91123d090a74bd3524316dc39c52efbeacd04edf92e7135b09f9e6e0cb421df090d68501fce5b1c0d4e3d88d514d35308ffc98e43c451aefa9e0de074402f9c170fdf7de68edd504819676b0bd75d40a8eaa331c9e8c7a6088fe35dfab4c5026c7d4e00ecd018968c0b5b2de2f612e953f6597e92831a4563dbe88fa5f82b398fc07e803a7d55175f8ce37763593b77908bb51ca67b93b292ebe41b7df5a968084137a6d67bdcfa4c04c5f194e81f11e8117db40dba7a161d269fac8a9187b76067401acab4f568d8dbca427f8c08e0e2f07aedcf2617988df3e0e8d5b50c4f1e9963831e0ee8898d7aba122c2b3c0b06907470f5a9b16169bc7177654a8158ca416689d873fc84f2475d0ba1ae04bbdc5933e4872a919839e8180242362ef9edc612d502ca7a828fab7bd3e8fea818edb47ef28b90006686df9e3175635b5b0e902f0fa3fbaaaaed0fdb1209017049c0071e420bc544f3d608cbab05b750a6b50785dfc4edd42593d946710aa1a477ddbbdc7b0eb0a566b4cd6619fa1c54016a93dbeb6c8a401a09738497f5c58bc9cd397e459d396de7a59539225d79b194b69cfbdea3b936b2d8435d2ed1556e6817e8cc4abf48e2a033c90a6f35b5ad88208aab5e7162fd1587b399dba738957b432f902f7cc54eb6e5cfa2a78aba910531c5b413df6dde6a9e29ff487e58482bda78909fdc98f7544310c973646fa5326fb5dea7f4c321d9a60f581d5e9ccfa0632a9540e8aa26a0d6f4467bccbc303864c2f0bfb94a0e8c26cc6c0150ec710166ac67baa7e122c225e4e366c9897c3f9855b40634ebeca8a6c8039d5a3078766b68ceb6222635e3b94666dd64becf6e92d4f0216f8f0558ae6be59987502a29fbc592dc5f62a52b18839887a44472eddaa96dbb721c9fc2c71dd99cdc35d03f9d2b7ad3687bbbc1cc04410d9101ade5f83af37a437c030e7846a94e63c5b1e3da025044455bbfce5d30291633dec77e74f14a06ec9579654a4e1b5923e9173b39b3dad6fce8f979516e174b93c30adfd7353908755148efc49df862248a486f42a4e132970cb0eb3228d553b899bc31a96d8928e496bad36e9b07146f8e8da87d3e2cff1dad2e4b87c529d8aa46269b7003020d434e153ad0b112140bdf2e0e73e985e697b5b9c2d9addc7f72b49046b65e6c609960a24b7345df0d006373c8ab0eb28f0c0b9a78af47b6f217c9415902e68fc8efb4a92fdec138a55704a4ffad137ca18497199491fd7ed9a16f83fddd0333ee4c32720d998be38417a808da0262abc508417d3f0736fedb198d9c5ace1d1f79b8c2440e2d0da8534839e882316107a29ef110a09a5bfca1860bd5975d9c1c123c4c695a21ad51baf29e8c1ec27a57e1518f18e0d1d241d3f0d076dd12e8f261deb82718fdd5a4601ebf3cd73e1465292603de26350495185fc6c7537669690da8eec7704aec6beed48440d52c96f7232735aa9b4d59bf18dcd41022108848bfa2d6908b8e5a6c0b1ad5df3f146ad6765b0ec466a13a897c6ee2987168ab591ed359cc9154867060fa9a633d7ef7cacbca7473b1b90db9ec1ed9a869073c62d3435dc1aa21da3e957bbb12f9f3a59bca7d5000a11e3b180ff39f883274a12c85facbb9fc7fbda051a5203598fadc101a7b8bb360572d6e8ef51d80f337447fdd018cfab2f5975c3c81b213451c04f264cc0bd416ec4a83102c3bd8d4d98b23835f86ccf20cd13bff1657f626e085094f79baabea65f91e3ea1e2d7fee1e0df1e1ca379e44ad105426df82463cec81d84897f80054ba409c05bf8c699d7aa7c5641ca48b23a0082ac8c7ee6256e33f6aa04419a8f26b20a3d6266edcc4450c3d5d4e3808161c679e67dcf8494492f5b6af3ea42af7c8bea5ebf1594c0af3c7940e0d56a7c498cb49848d546d7e625166c5d61c08dd79770ca79ec039da0d569426a8a4ec879b8f969f3767417cd7bed574a8e5c52be3d662998d2818a9f835a817ce9749079b41101889c557b879ba9d4c2595e26bae8922525b158af35ae13a51dda23fad2e6c4090e2e322c9beb128aceaa0d3052fdbe642670ce35e9be5d575645a42e0bb8d9298e14535191d5ef227569b2990ee5b08ea6f72c44441b003f2e124055ac911a080f360013f2bf0a43c07e95887608314caa2eba03cd2ec404ad2a3c973dd84d4f997c819a45132996b5d1fe2613ce0846 +MD = aab599675ef265129cc572b1b15f6907c1e4ca93c9e9287756543fef4d9b9220a786631930fb4bd1b83cedd48abcb32a + +Len = 49552 +Msg = 92c41d3a97d2de77a49fd6ade18782b9ccdd7926d130a0951acd9d62a8858e84a3b1fab5ee7307d4ff3eee87ee98ad24cb1efcd235c981eb287147a5178f6df23b471ba42aa6bad5ab286586c97d9a86268c369692b9a0cadc634432e8b143ba028f684f72f35f43516521f39bbeb3a7853010b9108664fadead7a51447478a5a290cafdefe35ce698fe0c168be45f4e8e107285d6ba3442d557d34a535f747bc05227f8c9fd1a8629fa0d36c2760545ec3645400ddc7a6b6a6736643cfa9f0407de698627c901ebab610b9c67fc0f5245aa6f33dc759d3e44e78ae828cd62071c3b76f031d07adcc73bf091a3fee43e4272daa66c0c05800cdeb91e3e61234eaa71387e1199eb232591a35b9e05ecd08a986ce0e4291afc6955aa4ea73d4b9f57899577ecadbd866c6a0c427f988fd2c6240f2b6d554379045345c08ae943c3cb8a7725ed9259ce45cf13906f40350a9d1caacd2f16ebbe84e072bc10ee7282af7cc5ce39d225c357c7a08b95844642b88a250f51f777949204198961d33fa3ab6867bbfbf58b2c4b5a9b7d1aec2a40be756839fc7d50c3d6c82270a42014f0665544345981f2d2c890ecac250049cd58e65a935732de13f73375b9025e582f894b46807b00c27e77727b61df490cb02ee4e5658b9d894c9e4efbaca2147229bb5254e98af962f6ff0730e36f4ed9b3e777f0f6bf46ba3572209a90adcacca6a57356b5aef53c020a58f47cfe97199c2ba7648f1cb6d7971cb13baf4a08cd6eefb5352d0e7bb76c3d6bad72b4ad3534a47d2778ca744a3a4309c74fa257dd484021d799d3133bfb424a450eb8179343f80022f9f00879e6903124b9dc3e64fd40bd254124453076c1fda298335d9d91cf393d5ab6fbce63aa303c352146ca569893076c2a9affa6618aae584c08bae5d22e61e245d4af783b0ef50a99f57818f0ab66640d990e53cbfb4f952c9f5108a8e974dac51b86efe8d339826bd6d40eef0b286ff4cbc644a7586f99faaaccc3fa725f8a5e59ba8e5b88efe3c06e47ff3ebd37d607b68f439ca7f5aadfb292dc70cf0b3a3614b31e3c35ff76bf473ab285c979e170e4d21652f2c911033e0b1bb10a5f3278d7d96632e0508391e813f06b35d8d754ddf5867240d3168dd69f4a662b42b94a279430e693cc525dd93c81980b3b02de27625ba49afb00a602b62f36389e19d48e4c4200555a2a4ca31b2db55389a8334c7f5d8f072919754bb894ca3b5a983f936965272fe25586cd1abc6a13ac127ed4b654dc8f45a723380d3fc93b5e7fb3bf536103274d1932df9ff55e558b88e5456e07323a37f3d7521df8dc419216579872fe3d4881bf786114a13a200e5190290e3f3a11e745ba1f5189ab54dea454a82f047d97678e81dce088a57d1db7a80700c49c1b3de5f4290fb9dd7c2a73d277f03a6a1ee7d075d86b724872a0005568ab5eff60221aacf8c04f1bc15ec9f88b1e69ade4eacb7cdb1d27ca0a7f75bed377d50be97c2d0a12cd140c2c62efee6e2259eef156c9bc6f5e6ed54aa25e0cd0ccf069bd356637019cd059c41e2ddda862d2d44e1510601b96110e3cf20366e71278c1e4330d5b4d974aa9927acaedbf489c07020de88e682dd61fe755abf5a1b136ba67606a9d7c254ca59c5f10453d3b7e3015289b6edc8b86b053b4a0e18511effd4da2c52618ad9cf5ecb3450eaaa242f7904c702a0118e96889f828511c9b6e329ee3651ea99903408a60b26f8ce7ae037a63aee75f3dc6f090078c6decb57a00630a93acb550492e7c4c9f916d718bfddb549ed07c60e6ef70cb145f7fc8da0fa3ff97f8c63a3668cc61539bd4a8a08cbb07880ae2eb120e322b074c5d3d570866aab92b63bf9296828518b64af4b7592364b4c0194410f5dd0eaf5f0c7ab993b4f3416d15472460a4a2340a56bd960b1a536918a7d5a84b795e52bd16e9c85796c276e5623ab56c3c9ff0be806b064ba9bcf03a1604a4b90f02399103f14bfd13ffa1bcd5000d65516494fb5066cfc1d787914fee3bcbe6a5e2ac0159f90c2c34920a19f301f4f1ecd968e84f17b914ac9c947fb5e1e47b46e6f235a26bd18d0063f92546a632b814e6b4ae04e48ced30e341f1f55db81ff7f6555665ae63c87f5ab60855558e63d173bf74f7360ff36c45e0ce35190f7bc2fa1b8c2b2a8a84b96088e9a877d29a2b68d263b1760bcf67a8b83dfe7cb036aeda8dfe7b470d69b75bb9f0c875c4042bad35a3b90a492829f61267d7ee65f9c37ef3d5dd6db62080358f473cb52d4ad82a305b975c8ea7bb15367448d7f46c0ace9538d9044b511cd453138ca1d4143bc80bb3d4d2a5f424ef6c8bd9a026368ab3ba50f87495a494224c7f41a083095a6d0dd4f7d655b66c6afcd413afc3004c13ac45c1255cbfef05c4b0e21900d13f027fe688cf65959c702d787d6d937156d8b13ebd80684d356701d1f7761415f270a91010259e3bbbe8499fa0425d32b2e8126372eb80f46e2f4c08081e877d799dd37b163fc84dd1b996700297ebea682d17dd6acf6e5ca345ed7d9e7921b0de73454f2287ab76e7cd5d142dd203427e8d07d42d95f82edc912c5a40efaa5729d946b3bc640e5c030be5b3a95d6ee2fef22c6f41a3e7121ffa51c477e8e91960b620cf6d3ebaa7305b7873fc9ef471ef43ccd7306302af766ba3e5cacca79f8df419ccbc7e780073a55c7fb0ff5c985a683034823b13aee8c96be5c103ac90b77a7ad2328a0e0fd6d1dafd4de670fe4648a0adbd95e0b67dfdf2ece4f5c095e7308b0855cb447b60c83a1659bdf64cbbcd636a6bd833703eef7d21bc0bab5624fe9397b0a9e4ec1970c4f15eebb729c2dec394136cd284328757acd0ab347a76ccdca7c88db40c0ab2c0b7e3d87b3e616306533eb9859962aec7b6a83e25aae582ac5f27dd7e803a77758f71ec0a32a24575ce73271657d44a1467cd2d448d7a084ce7540308f3b1a52ca28f8f2bae8d6a582e3a1e4b68924487e6c6df5acc3c460468d7651b0b78252d17c529a85a29bbf79a1b06ee71a485685c1bbb2e0e34251b0a396d7e7096e0c0179b2247dd7e20993b9f47c51d10f4fff0552b8afc688bdbf40181fbcb13bd2dca9ae2d1e0948288394d499911e07893cbfb95343de2618a4fb70b58c4f8a3bb5749d10d0a74c70abbae7431f81cfb6d149563f57aaa907142e3725e024c7cb3e73058c50425d968e948315778ca64d6f4acfc955bc6ffd8f60e1ed52e172f5da1d8ddbf75af9eeaeca6e6d139f49b1493c7c8dc8740950692bf7785ef62a401aec8cac4061b00d7ec4dfd68e4a1876f186e2f92a7203c453f7fe535ee34c3e73588859c5f70e67910c7dce421da1231ab29997e626cdbdb25d5d0afd39574575fa1780f27b63716819aed0d97a623a076816e69612e59116b49a0b9458d9f98549a09e506f5ddf7675196abef0da3069efd161b4c6da02f3a63bd1cec252cf33bfba2e5a636bf64e9714185d11778a94e26fa5cca32977db9ac8fa0716403b03c4daad9ac80c5a42f845564e3cd8bd2ac8280f48384264311ab7f0c7c530c1781178987c3dcd70162123a10d036c4c8e09b11aa206b35c869e8f32ab4f8306f2fe1a6b79151ddc1aaa157513e5a0bd513f9164749efac55eaec54c0c25d550271346b33bee7bf2d2ebb16efd642493f6d22f594a5197332bb3e0b974d8a64166d963fc2f3a6658d17e7deb13ff5644f15a01856ddf073a706677e77fe8546f44b928a2bd897b8298cae1860217b464d34fbe558987c92fcf0ed17277d58e1e434adb53714c19e48b6962ac426ddd581f1b9c6617fc6b978a35a3d71710b1f2d507126ae502d0034bd297da5f422fb32756422383ad5d1644735571b83a4e719c665465833e1c733c8ef79cb33529faae78360a670b2c0080307cfee5a2d20eebf117dfc66e7d98eff6f86fe8c76a92f709fea73c96370ac00570cb29fadb4f562fe34649047208d8b310d05a695000a383f2767eff2c79866ad762ff92d8a76d8b3d1565a07837794bd74a92bb78e8366eb7f498766af135c91752c11b48ab948b8be9b6b31e996419c25b2c0e43ae1232c5ae33cc80f670a8c71738e4a9c05db9661fb6dcc3c30bb5586e80f25ec6e968820fbb31fceda9925d2ca19f7a8a4b8d4243d05e1638e2a700112c0818c70e889395a9773d6b531e500fa5ac496dc09fa6e2bdd7746f8b575fdfa7b01033040b70ec88ecd0e40f95364cbf8b84ef6f391a68b9d96cdb584ede266e7ac37f6c799050d40345ec21af764049cdcb939a0203626ed46e00fc060171fac8a110aa4b787f057b0ae85bc59696fed36bdef382f85c47390674c915406ed73a379b30099fd3a7849e6cf0502dcd294d1435ee246fb2dda7b4ab51e531697e400583a03c8cdb34d08efe9207923f638b234d0c7ee0028c810719290e4afe7a6a894e7d4cb61237ef4af1b3346a8a382e3768b0faefc7ee656c42b0e9039a362a317029c2a1f52b3150fac67f2d1a0196bf3d8e10f57f7db552cc7c1dd1c94bffac7d3826e71089374f7e6e30408b7a75291fe6598795b4f158fb0d155c18266b48ea2af1ebe0cc618500fd004b4aed1a03a47c5d1cb72ec9fd72c65808e35fed953b64bc26d27f50a0070557a3c4e415ed5f92642b30457faea84a5e5ec743072fe587de2e821c850f1519bef0a5f9f944a5db3749ad83b2eb200ba0c4408a48576d06d0796c2e6f409fac9eb85a9924881bb91eee9b73e4415e7cc7dfcba011da56644b8dfd1f8fd32b208f415f3c384615beb3806690843fd8302c17e50ef3f72622a7e2b18a57453c280942207da4fd484e7db5bb64233511a855f309218f5c50b46e0e25d96605472585214ab7eb2c27fad5e4e66941cf9f57ddf7c4a214686aac1666c6972c91c0ab9b654a857b3119566494940a507dc5c11cac93eb53b9d87c2983204e2b895d2ca4948c60e5daa0b3a25b30d1efbe49669a67e377adaf3ea72ff9af58e33a612b49259cc4bb5752c5078f495a601f8edaefe05fd182d6e1bf9220d061d4537119e1aef84b5c55a3fd1cd74a0e62000a70857c558383cf7617e89f4fd38f33118b16773b4f594428be4a99af68660e50d9e3b2610820d770629bdb5a386477a6f14034b25b32a1359b296d05e2dc98d67993190ec9dabd4502345bac0b048fb5ef076e19f9690b7f1631b7ea28364e1fd20c26bb6321bf88894a9691c5dfe9c2d6d469cea46cd149b1ec10a883238c9165c741f34e866c9f5a4722c7e36724623b2fde3cd6ce9149f0b0eddd9df4d2efc75d2142f689531e179276ab0e2abdf89e8222011b0ed9e44538c5f5c34acf6f59261b36e59b017923e508a780ab150a7363eba7eb9e099d41ec3f8dbd95c0b4adbab62bb64bd62511976f69f568d82c5c5d819dc30caef95933a111c7665534379378adc31c6fc66322015ed6d465c2bbd78a5f3bcb387d0db7910e9b2d0b827948d949a67d2cc19b2d64f29f8e4c52145a7c68b06a449cc1d085f0835a421405336e6bdaeeabab2c1200c1d9e70a7ee85ebe46bb5a41dd382706441a8e975d4dfb9ea0db015ae788687b48f08f1e9dba6cf675c72bceb2b3238895eb3a89e2c609e0752125b90b42a92af48de6f7330d0d8b726e5f39b1d54e83525fde88390fd6ea4537fc448afd4ca6610c7f32d352a903c91b55115f11108cf602fb10c47deb02bd99d59bfaeadb53fae6b83ff31dd7e5e658bde41ef9021c1d5f00b219b2cec03ac1421dbfcdddda3ec732ad16e102a86690ea3085ffaba724de9ffaad20faa94948d2485e08bcafb9087ed8b32ec1d1a66e7a75088765c4a8fc2948f35ae734659b06ba6a1e002ad634ed615c699de8424bdf203b32d8eb16522d3b80c32ce81c224fd2488030f232d71ec57723ef52a6b398d072846d80f95b1c20e9fc244ad9892e3e9dd1c79c3b69737397d04eb7603037f462feac2cce8186c7735875c32a3a123dbe855c6f7c569c0a4311247ceb3c2d0a61041d55026ffd6dc18a99e78abfac7e4f0d48026248f8e7ed491919c441e891112729804170d0a268e4f92e87844d6eb3fc12eb799b0a9b1afa852477fc1b16e7ea6944e82eb0f3be0a1c1e8d12859d71b455914ed741a230a801037295050a59c044f973141ed0556c8b2e1804e5792cd8888a4e885e8be2d4056d40d766f9db4b55348eab6ac6b37eced3c4b5dd8039cb143cf51881b685f11a986f2d914400ee028c776f25554cd34fb5ffbfee512d2e813fdf228bc0be91b93b59f214a75f2ae547e9d9ef0aa5ec963b458d884a7b6577e96910bd28e13859bc9ddf71624a74761d32662835433d3ada12994c0aa8f230e02f7d965d925784a2a7403823576d2d730dbe5183a9479629038d99e03a6774baaec3b7ed4671b26402cec9591a7773cfc82d0b644c8e309e84b50289b4379bcf437d823672197b974cd5a571e82601a9fe4ca665a193a2a112ba06558ad51e949a25a5f7a9a138b2c1ef7d1c54eb2f881c97c2f64cda64d73a0725d232e285a12f36637f51bb822d1e8680a6f55985f0af98d194a2d4efb76716e19e50c2698b5f3a7b5c0ecad08ccf3580a02dd38d6a23ba62cf4815bbb82683ba08490722a9c6ac2e0c3551bc583076dda682fbae5b1586f714a11f416ff4b82faea0235982d2062c0e79e2adf60ec4f81879347149f198fef3524429355e3ea30fdaa966bd2dc2d5e120e01e0ca69a707495007ecd443afae9b046dbaecf81c49a7cfbe2af268cbc12deec95029481d7594b021f4b8a176b766f79c132c52bf4dcebbd45df48ae5f12186a9b5e44f58d252f9bdb4b3fa8d117c46f7277eb87c455cb4018c420b23f7d41eca99654701266a7405b52e159bc4c739a77d48f3fb3838036d4043b22cda30fe548313f7bf7ac4691f7e8fbb49d92d17d49df3cce32e4af03f005f49a9a21c6e6efc56293bd54820339840b43f57982aa510e808dd2f7ac2a055fe9641587fb5408b96a31d3fdee06a89a7c82446efb8435d8e729044b0c3b7c688639d03431cf3b83b2e0cc06ef3ebdb2ebfa1af1a0ad60c4cd1a574d439addb657664ab4febaf0bad92b061e09fdf153c605d99006885a68cecc3c8ce6da91cfe973f588b6a9b0d5597b2291c2d6ec03874010c8b1978b2b58c934686a7d412b990d613dfe0e0459905ba210ae5bf638cc33410a267d8b82f79bcf8e52f5544ff28d0e33397a53be2a36f4f930efb869f159fae2d98cd40617be7e6d14c553a3926d6d16fd51378993a7abd9df149b2d932e9ed15f57ed3b55abc173347fc7dcd538fe47be352832492827311d7d26da2e2bbd640c614f892dde293f46871942577a4243f0989e4ed733077d806be4262ecbd6f9753b63860ce0262faf7dd07a75abc99a48ee1245aa52cd3d8c734b6811996c202e38d1a88f3c38d2f3c675fbdc3804c90bc81cad5ef1d8ffb615c536731efd76ac0c1267014ce1a7a7f3823ce7b9744ecd9915ec51bacb1281e5fa07dfc6fb4b53079e481fbca14c20777db414bab89a12e3b6992ef8043474465252941bf63cd7cdddd236f6080f11d4d1080f961249603a572a334424c3f1c956bd4ca86ec98ec1698bf373868ee09e248f24d631cb2a0f70162b199d5faee18f9e75d6d5500c74c9dbb1cf9d3a1135d0eff115979df4c5a9e36302ee55f021657c8c31ca8ec57a67581e64ccaf283e7e70f0bea440450f6d28777a884569fb60ee1c43aed43e24da7775dd854c9a0a75d8a04bf8408f4f224be50b0bac70e20a599276f2aefb169bb074846790eb3c6f7d9c58041d580761d4181ee909a987da457b66569d70c213a98713d41a9046b3e6213d483523cac4379d2090db783f5948537c1b1e33a9dab919e66b582dbbfb88eb963536770ba21ce0daa3a0717affc8a732e0bfb8506965c9869dc8280eaefc57dd6b8fc63c83ca9f8781d709ed464ce32527d073384836027edbf8f3a136b7029d5bbf95eff1e705d1cc1db5e8b54b93bd512ef8d3efb05129a64925362b2f583076346a9864e8d023d2b31a0fd55b35860cf9bdb5d85b32319d57411004ebe5415b8cc8c865466af846558ac51ee244f9bbef46508aad220121a1bbd15c73163a6c2714f27b9652e98763acab0a874e92de6e07268f1cad22c39719ec8a3b87a638a1e399004f0462366be42420a0beebf4f484ca5e20401103c5dfe426cba5ff417bc93eabd71beca3dcb5b2e9c5126f8021539e605e675662ac623aba99fdb007131a55c6c4f5f37044b5f9de6af5981062d8253e3d9f5d50c96562ae3ceb62fa167b70f9af2f112c32594b6718b4e01637a6f1503464b05e9b4dfe7a1b1b82bae44112bcec23c02804143a2c44ece2122e34754ed933d9fc908060b6bafa999a0b2fbd7912707b04587b3886761a1894a4f54372a2a944bb57a13bec93050248098bc3b6a891cc419df2e91e32a8fe0e3a8dce7417117b0b3f24d27449c767255dd9d80e15041e50531fae5bf1360cef6d5288cbad29077ce58fe6f635ce32b276be6ce7ee43fbb0f6560ab8383dbfd89be804d1eb3c5470b946cbdafd65ff8fe29df4ccaadddef4263a80cb8e2c912a74b2b52f47e80c9748edf3aaf73b281e3ffcf234c14e529a3131a2fe597f2b8556473c4c49a87a5102fa10eeb9ba36dddd5007a8c7f1d103c5dfe3d920c1e959df19ecb176fa282e75df960ebb7fc64f593b87a13574f4d142a9b5d47a8155186daf58e73659b0802012e58382d831032 +MD = 81da5700a7abc8fc22fb08191954199539d2cd575ae1300a53cbfa6e8b0c3a00b510a412f18661bf3397fbf5f267635b + +Len = 50392 +Msg = 462c7bf8f2a3e6880e29ff78ce76b3cfb0608dbeae438726b8a52059611aae25d966f60f1be2fadc67211256f3d23e4cdee8bbdb65f9d4ec59e4fbfed0b718261cd02153f942ebd70a7a4023872231d23045adea85b4535e38a985d7e3abbeb3f7b1254ef48a6281e07cb069f22c336a8ebd8d73763cac833e3ce56c00bd47d752532988758406e3cf718baf9bb9ed1be09a80fe9f59866351e4444591b75c9715fc5688e2f68004c09ff87eec9007ed0e22b0146ad389075aebcaebfc5fa4fd28f5d4d6a5a977ed9c4f205d4c7b28e8009e453c3e715e7642979ee5ab7ec8107386cafa246594a449ca2ad42340f8159e5567ff83fcadb8ef31e9bb04db6fd8def6607cc9f17f33b1553f6bdaa8217bd1913ce4a23d1dd64b00d2f67140425e528fc0e5fb17dfa1ba3b87abd77b48227f98ef7301f957d73d4e821d5873e8a9b5970fbd219d5cf74ec2291b8381181391b4a63409fb03c3ac6121b8233d0ac1f157788aa54c9f3c54344e4446813655f02a89b0220ac8a38283d64f396650afec1721d6eeec5078b4d71dac89454df08245c26eb5ed4e7ea6f9c96b02b6617a901f3228644517b456f4bfddb29303ed314c76f6286d3e5c000e2393e6f5e62ac3b6d4096f1e9af722d25b5f2b340053e486d0d1e552404578090c504dea86c86f252e007741844900bb1ab85af0ed2a833cf5865264fb42f631ab299f5eea5b7bb56a95e4747bb2d8f52472a98e727bf5b7109dd96a185a62d029a64419baebcfabad501e80273b92c9a0147fd8364d243c479fe12e3e96a42cad4fa5e39d81535222ba8d2d32eb167fb6274394e2a8f716c213d17616fca48d60ad28843b23eff1ee5a9a4241cb4c5f90325f8b1d94568baa81130b48974b3d6a4736c33ddc8bcf3cb8ab89ffe11cb153bd3a85901a29e527710eb57b6c7f83f2a538694bb10f35325d2ac811376fbc2a513c4ae341586a606c2a3b578529a62050943e0cac636bf8d07dc822d52bc93b75cda1bd12cc637ef9cf6786e932ef1dcfb40a29d46fb9b7990e51d8c13a20aeb15553c6936b17a8a165ffada080a611aafe9549311c679741432bdb058209ac8d3c29a7ce1ed007eb54cc77b3fd13246adca715cc50bcbf4f861dd4a9edcc5d92eae808cbced4c35f059689298f7d7c96b50735acf401584b3ef06bb362b0e847c85b9091616d0385de258e0a202e44b6f07e50d9f17f89bed26c472dc8fe75343c49e828c1e0efe648402c5e976ca253f7d40e5c2d7b7b2fac59111e09ff2ee2af79b898d478b109acb10b2edc80bef431d1193c92405526337f708f0cf839d88ab4a7e9847c6e76703ed481d7b2c121063c16810715402bcfa60d87b934be9e33c25d24b73351b6feb02f607049d362dedfb034734164c7e8958f0ef8fae6bd146b835157e67f50bccec3d28f8f1b4021808d5cc00de881e6159f2cb191d8bc9377c1764bde23cc146239df1ccac24237e85501d5c1f5e232eee5eacc42bd231aadbe9d7b6063b36d32388fff43eff189dfb12b9aa5b27132e8084f3155bd7b10d623cdcfb7678c2e0869eb2042cbd37d2d49e3f70048b64fcab164c912ff4bddba970f2f2a58dfc1aa74fa670e7e727c99c430d41cde39f15e87307ac0ac1be821c36a83005e358de000c5bdf12f56efecca1b193f9d83816a33bb2da9eb749bd34ee6b382a014fa74b552083107053cee05abaeb2ad1b65b75c0dcb13e5dc5d97e18ba7f84707702c3dab32172d09cd671ae87bbd3589070dab2f3a47c2dd9737246248aa7a9357d23dd821ebc9ea081fb4da69a75d56ce34c828648da9ffaf79be727cdf6242172c60dfbff5052e57de798a5eba4f0921f35a002f2cc2c90e2658c32ce0279b18034bcaf27c075f216b11ff433c302a6a1309bf856e36c31c06995e41f6f026c31ea9a1a4caf704cd8f254101762b41105d7f6e4d992d7541e02a4aa167e56c7e47206abc25fea6c5125d597eb065d77b9661156ff6ce68e67db28f367b30f4b244582f22d644cc70bc604ea432097312895abad2cd422371a6da36e67cf646c8defbf7be25f0fe3654d7285a433d9e3ffd10676066b12e4c214a469bb062eb26ddaecb78592ac57fa469f0872c29df6ab92b2300084212ddb6a9c73c61996a36091bb238bc1ca7b372bfad1536f7bef98654f79afd1d568e2fa0c2b1d5c64b5f2aeab4e694eb2e3a878067eba6ccc3552c33e9178b6b82c653d63de2540f170807c3d96a2ac2e27dab5526f1c7d377e6736f045dfb541fece9f443b7289c559b694c2aacc6c74ae2a5e6f30fe031611423b04d5595ffb46abaa1d91898968d7f1830ae94b022eed23fdad52d38110a4803a0cee7a095c9a78e8609edeb25481cdc156d0b2ffc56b63fdad5331899f8e8dce58efc663de60b2c4ada1e6a700cda7da470f78c7d0bf46e8dfa09c8f1b55e7627957a2d2094fe5e9655935da06421c284be4210cc94f6949c4c989042c910990fec4b3e655ae8ea1280340cdcd559745d5fd20012792279aed3c6b8b4ba680d449a55e135c131996565eabe4de9ea5bd95c91a77643e2e46c987c876e12cc996fa7825db8504133380c9bbc1b273c3f9ebc654c21799d9f7da2a3469958a607381cb8fc158f8180327b304f6d17b7e8548738363aa3ba708bf9213e5c155d1d4600e10475065748fcbc92bd6b42c41ea4c6f1aeea49a3203ba6e0b4e0d059a4425be4beff3e2c523dd7a74e3f2fc9a8368078fc59f4bf7737b0c6f34c110263d335a972dcbe69679ed2594c0e66304fb1bdb568ae2b763c271fbd42c961c024a2971868330e744fc7b78ffd03705fdbbd85903a12773039b2fcace87f46fbad578819e72db7b7d25f8e31ab43d4c01403e1f1b9ac5f5534814e7a2e954a1bc799119438f24098b70f5d269cf91ab9c12bd8c02ea56b4df63c1d115c34f5883a103971a4a93181c87e2e58184bcbb4acdd73e5e1242381478a7158ba83ceaace650898717b13d9cb5408ae69616e189bc0b9481a521057ee1353378fab5dea4b4086f1e78f6c08893bf410d6648b4d577cb2d12156b938b580ca9625d32aae7848bc65500ec776cad9f866a67cabbba8ba66693d59a68d6279df5dc224be5f1e26b1daf21fa98b56d61f9822d055ca5522def6b88360bcbea59974afc6a06605826d3917eb9caff4db6e8f928911e2285b2161d8fb6e2f91ad00c434e05829f502f96b0599274a6e90ef313ece676be70e3793e6ea584ca3381c33989a6f12b6515c570452d3c48a9ca9676dc8e0cd5be229732977a77dbbeff6aa251d6c880f159ee45e3e268511a8a41a689f03704c80fee8ebcbe229a37a95122191d7f2caf7c8fc5984aaf5ca5be930787a58bc828fbedc720d91b721800151d51e39baad9ee1863f4de77c7f5e7f93e381681ac4b8713608663d91fea9435189ea184781b3f16956c06483f6586e29f1debaf0dba320def3fe6d1e019f62f88520ff010ddd018fe706a970f8f2bfdcecb6d7a790f7d3bb7bfca9c6f407663010e673501bc517df39463ead4dd479921a3445a8a95c90b7ea8979f19d8c58e07364fe9c71123e4196a9aca0bda5a435c57d8e5aee7c61b986cc6607c6d43ff0f7c4274dd86d7b9d44577ab3100d49ac33bc392429fc4daa99eef77035872347e12b76cb187ed8db8c77304d0db66edfac17cf7020875c706916b595b34e0ccf7cc3747ff9ec5ce4b63156d57e451eb67ab6d7a59cc397f43f6d26dc07d1036f0fb4a8cf43600f9e0aaf75b529655e19e4c2d92a6558051e621bd4aefbb70f0fe1269b24bd81faf2d0161454d6bc38f031635e6943efafd71c47477455a839973b40d3e731f824c84f91bc1a4ff2b323aac0edc9fe309b05b3190594de4e88f0652ada7e656c9609d045f46f5bb0d79a97020eb25dc2d39170ba98785e4e0400a70d38532186569b9b5d44bbc19ead3e4050498c2a4e5f649b5288869d53b5b0491173cc2fee6e68f8ff34664a633cf5ecd327c02b7b45657c085b286203a4e9925d1553564be5572f544dd8bea78da8e4b32fb429f28f7b5a059bc57606d891cc1aa64f5d45c44f8783167ae514a6407117ead1eb5a45907f71cfc4a20559913d6fac280d85123a49b418b2865091a3d927de7f3b5c6d8b3173808faca830d22d85b1452eb3d7ffbe11d9e96b0356bb640d9527dfa01153b933358d5c96643be6833c1088771c862bbfe3885ad6fb6e5cee972fa0cd38d25fda76267c78fdb3af92d6f0e277e8b7dbe9bef51c708aa607f56a01468bebef6a90ccc2d2f50424cfda054d055e437a15b5f09a797b0a4aaf47980399843192247cbdc928b680758f825490bad235b7204b03de389c84429a0fa99f615d12a3d3c7d3a34462798e37b3481fc77bc75645d47f28237dff761073233c65c1960bc09896b9eea2f7570f946b63f403003fcc78eae200c683ce5b9b90416e56c6b033188d71f01e03b85e4e44c40b0fe95afd5ece73981f1932c2b0771844c4a97b736f4034117da4996e085babd24a88901fafb243b32ec78a8cda6128afb44754cac4376b1868e3e285eb397e1359e7c77c921fba199e97be0240d5d977cea9247e3ffb7cce86c67bec1f65a694e70ee85a309c40911591b66c0b5b9363b9d6d1d80a13d1fb80584cebcb678c1e9a03dc02b1b13de43bbc5a12627bbe3c1ed645204a07d067fd9e3dc917c897781ad089bc3ce619daba20933b6ebec2caa4b2669e2a60e3d9a6a237d02c0f2e6c107dd9d0f9c43c3b37c5473057ab08d5f4711e9ad0a5711a236b204632c4bbc02410b38511d20ecf5db45f3a44cbf625b51b545b645ee2f31b01e2745070a53dfd93fe24ac98f85ed1f4c49f5da4f58190b9f02a0f139d29366d63a2af9a54ab440da4f5f19f60af3e8d5ca7ccc06eb32d52d94ff84d0c871db68d1877ca30d2a0878c40096eaf8b4a88119cb6a7c78133eef912499396d478e4461dcf88a179ba089e4d1c8e4eba9deccac446df6ab44b9537ba276ea3d7ee0078fadf5d0f6a3998c2635185a304e0c16f69a1f2bd141c507b91bc659b5928100af8d0d0e26bc63fe0ccd0dd1831bb0fe7d1f2682a684f26addd3000e722ce1fe45dca6a82450906e0cec21d1408d5df1c445fc7177a8b20b6e7abc7edfa8732ee71f4b157c0a9f4aab24fceff52d738f50c1099ee1079457cf7544316a9fb53107e772fcaa34f1227c09e7740d768235a702e6516f3c09de85553fbcaf6d38932ca7b6c41b8a2673d3fd8a0415f31a733b7e1b4f7eb0930e248d17772abb7dd3c9e27ef25c54bfbd57924d269b2dacc682a500df9bffc075319f640748e4e551642a340df93f1d6d8b4ab9320970a9ae211a4f8843940292111e9dd3a6841fca8fe18e7d5ea3d012c39946eced8691a87b404fd001f7e9e3676d3d62a0037d7db1aae6c7191d783bb5008e8db3ba053405a99a5d53a5d6f7890dbb4ae20d9f095dd8c581a5266646b402f8bb089574df64c8b776b5286a3d1a92afe2d8ecf4ebf91db3337f392ac265330deb38935118fd301fc2b2fa0422807e73c0f13c0f9427cc283323d0564d3cf34694d05e3a6f53523ba7b98545564f33bf7bb7755fa04e66ad272f864945afd62b5e6c309140eba1a3bc4564ae26fb54eb59b823558ef19faa75fec5a42a325e349e78d4e64c4ac0e076f3229f43095470116fc081bea5c9b8b61e08d78958fdeadb6295a9dfd5126a4e2f19a908fdb4e6094ac784cdcf67505e09ea53d1a827c6abd5fd6c7a3f38b9c875e44c074ce8d5c7d5b2bf1af30af9d44ec4b9a1948e50763f96aeb9dd86577c540d08bc7b7297c3ad1c9154a5272dbf59327957b27400c0fbdbd10d348dbbb035ee5fa70de4d4831d6fbbd95a4e5485c5be0392668b5022b75783e2d8d15f2ab812c13588b1f49cb3269f3786d316bdf0b1e8b03526e701ee7427d93ee3ca324714ce06506c70670acbabedbf77dcce76d8b95fa2f90de50dcc4d6edb27857d6f6ee6980966e08890e9627a688f2f4dd47cd5ef44546d4291ba6502322f09529d8bab592853cd57c1ea734c169b86a27628ceed7deb6db116e8ff41d86cde585de57cc811958f7b3a592ef14e2f6b62f86714e8d40087a709b27c9c42636cf52d26eb6379bebf6946a0260883ad4615b7a2385fcb3653aae6b17d7fe4954dcf87aa67b9a521c5889379d8e03bb7bf215084b9b0e81f5a233a60726b4384f93df9ea824948814a7f9d20b816eab13f1c4f69199a9f0df3a67149ebfcf3c4e7d6f081cb90c83fa6a4c04f541b253c3e7cf0d9c86b74a4c8ab37c85a9359b7920117fa840e98df72ae99503d7b5fbb45ba015156a1fd5631b7da864ecd09df9062bcaf7c315ec336e3a4ddc4a61eb0ed59ed6a34dc9da4d742e5ee291868cf6b727b2af4977e8d5bea6f429a29d6af8dd3118ef389da0311d2f67a79e41ae97ba6bff79dbf7cb06a2955191e750c19afcc1a2a1328371389fe78b5c1ee84d05966179fc807ddbeda36f2dbd2264391db9b63d604463938981bd91a91663af68d66fe7e140f162b3489d50545bc018a99d79b1d475254f4e4b1b4335909a1ce7ffff13cf233ba67f1a8582ff984ca6652f70c6a6cdb1edac866867a99375deaa9b78c36f3244f07aa0908b66e3f02d7af704437e54efb5cdb90bc6ac28dc3cda3142c06974f287cb622632304394f3107d9df20313c8efd96c6e28e756b77d9f4ac5d264f22eb59ce8b04006c120414d4aa499de1122e2f727f8550125eeea206d68c008b2e1c012bb947e8f637c5f5ce57f01b756e7d750731114a39d69cb86229654febef1f157623cb17433919563d698f234ebfd160cd7212e75c71068f8f2b454ee1e489093650ea45c39452b8ba6563400d74ee752dc906c1eaacc089f632b897fd8cce5ed4d741ef07c8168fbdc208ec122c0924a08c794474e83f4a3ff63bb5af667378ea0d5e6d8042e96dc0060c920d53d5e1ee62c6e97bc1e752b4ec4b2277f00d09ee999c5bbd932fb559a7dadc4f7ac95f3fb28c4b7fb86d15fd7b7358d7c7ef644ad2783410477df8f33df025690f47df4d1245c4e13a1506822a20e34f4cbf2a876e9e8138ce38cb152ee907da9ff5e46ef86ff050d593c6eb7ee03c5efce0cf3cb46bbd9796049e480121fe248b48214ddb77584f095db981f04dde8766f8b4d35a6c63ad3d55d5044b3762c78fb308424208672c43d770fe14a63448f96b9dd3b71cfdfa329111c26395e043ebcafbe4b28fa78923856fb852a5f82452bdccc65109f70f146ad71ae0c9f12a4df48ebda36983d6170c083930b97499d163d413be9fe94c3137976659401fdb14d433359b4296a39ccffcf9455d542a13f24654665b4f32378bc54d2394c6e6dece8bd510975a622345a08106fdf15588fd8600dec8836185dc0327e64470ce1a57eb24a9d449a259018568dc37d69caeca35918e74305aaaacb39ef7bbb8014614f39cad85eed49c882e095b879e6003fcb78f0bcad07e2472690afe870710e06a17b5b228b4897c5e0cfafb69a35017199e71cd58ee5c71d196146112e88d87dbda084e39253156d7a4a6425a7fed56855cb2498ae476212ebd13a60bd6d79afebcfce833cb5cda9977a3a6e69e8850e474f916fd5d3b90fe60a153be4c7f9837330bf6a5117c7628087bbf7a89c184ab798eac1ca34d7fd50345e0c6c3e61e09cece10099200a7e7e986f292bc29603ecd1b7f65610c1c272769e3a1e7bb8b0af2bbcaedb799ee7d7d5dd6cbc0108232f2081764110814894f95c2dc02606daf414d6dae1c98b83d3678d2921017591c8adcea853db1d75fee5204d1ae75446b3d0b9ee71b9d93cbc7607c6236be535ffa129f6531aa033f7617302f664a9dc3486ed5054f191f8d829d4ad8ae760f71b2417c70b740f69c895dbb41a480d84be5ff86a5218bba171a97b441e1cefbf665d2284419274ffbaaae2cb4f3988269b8364a232d65d1ecd1e84f5a7b399752675d193be1bd6dc13c810af5ddf23aa1119b962bed5815734af7827ec536701a494ac5d4ab83eea1b16ecc80ce4e5f8694a7d11bcba2e34f084dd41b6a55f4b28e03c4aac11b3101cbdfe7f24edd7f8eb3d3a16f5306d9d48c63eadcd518c3cfa8408c3aecd3d365ce5ce3a6ca5ff93de1b77db31dd457a839d20d2f9fef3ba61a6992e1694e44424b4e562adb167af8c0bbdc73769beb3ea300d1802549eaea76f75f4ad10b123bc55ca60afbc17353b369342d17de030c5a88ce7affd94011206267e3be7abb96cee059a3a6c150e34c381b4c5c1b4da5c2c26a7c99edd99eb93343388c1dbef7ca81f7a16696b20bfdb0f85dcdc4197f6e561c018e282607940257a5b4747ae33aa9f670a5c215523a6c61ede778f50dcfbc89b646e8a3d063383bd7e20f9dcdb1d0dc9e0ed3d94aa4b2de59339a7ee5795e09e75edfd17d894d563b7f5f962ba28f2075ec3c9c49af3cd43c3cb9057addb33321305e3d8388ca4d4cf6e4d2918f4d48b4d87cccf3cc52ca135d4527526f648c0055e45676e4377778e32ff183fa83ebc74e04f9cd8ead465b2fdf62e0c0ea7ae14a12aacc2e0d6b6bbea1716766db5029d775913b6894df902ee836ca54ad96508769b8f7c8b49f8203d9b0d046bc3c58ef3f21c1dcb1dc3ed4e01163bd3654ea9849ff8e36e59a683d495e432c9ef6d10fe229f57d8ce2d3bc5791414d1d3d0be743ecf40ae8d26ad560c8348b0c162eb3df284aad7e89db3fdf24e786bac5211ed80fcdb766ee1666c09d28e47c20de75a69b35ff0f17d1e9b74abb1c9763e68986e67fcec833f75be93b84bb779d4ccfd9015bd4d7334444a07160614bcfb8c1d0ff9eb3854a9a4f3b220c9276f2061cd6d900e13f52aedb0b474be7403f145236c98ef83 +MD = b09e028bef7dd76061821329af04c924312aba29b673959b0c3d106874cd0439ed8ca2ab381deac5a2079746ba3d7138 + +Len = 51232 +Msg = 4db3033c0486dcf83cd54cd369510c33a9b2c8a4a70623cdbf49fca26335efdbbd5b1fa49573339676f19fe60cd925dcd1d39b87e982eeb04912670c1f102db56e7f0cdbf92874b76331c5c194f1c9235f03826d6199278a2c1369f3a5d1fa22aa45504af84ca7454cbe45cec94301f09a6906bed8f4d545ae7689bfbb1f5f0ab7d575585a87d22779bfa7747377d42bcb2eaee3163b00c8186050d82aa26353de58036ce683ff45325d741a59354bbd3a790342e315b0fbb2fb44a7b9030ee667f680f065e53587bfc0332a44246d8c2f738c44072aeec6c36fef9232ea68ab9ad6764ba0587dd5670f6c0bfcec4281f244d1514923c11195e4d9025bfe7a8abf216ce55c82de177473a7254936d284ca135ad272a832c46e818860fee84b6c1dfeeb26640b60352c136de0f3aa267e0108b02d4a6048c7976e8612e150e337fd967a767f9c0b17d81845a4c1ef4555dd4d5acc99f40b0258d45b82cddc4bd5a711a13d74dde8a6bfa9b8d97cae37f3a707e015270b835ef8db8d1689378a2c6396e8e30c75fec82bef4de7ec8e053ea661cb72bc4eb9c1c1aaa638df07a826794dd8d00f0d556662118c36d938b6202481a14a1f65b415f96a2e4f95f5aeaa305ff86c454cf669ad38fd2e0b535280678fed0519f77c40e942abc374a8a39fd2f4d02075dbe8b7548c29384988e245b8b4340a72ac1a2cd95ba7fb44c98fefa533e9526961333a9f3497ba5d7f6c595f1700c3f22e95bf10dca961cdff7b81f245ca6ce787e0d8d659cf1e0ddffba3a4e2d8976022f5e3d8ee3a5cd6f36e3d0052fbd4b8f5f67b40225aca2250940bcf3a45ee8633437f77b9e154294c700b198105f4a4527d0a26b8bf28647c41792749ce312a07867a366426b18cb389d383fa6f3272467e6dd042869e9a0809d5f537fbc61546c6be5d1891dcc8d0c27d87e6c1f8ec7bff8c86e938968e9ff507812c54160f990b3234fcab3ba54a22f16d6d84add8960b4f90d55c7706e70bf8134f6289e0a85ebe0339fb37eacab1187db63fb8ff42a79e352d7aa9cb88558ef3c8ac884f1ac64a11f6093961f778d8ffea7a832925dd61bf1a1a94a52bdbb269c0ba7925974cbea75c5ea7d07a7e1a3a30be751de7b48074c3c5a05b78a44dbc5f15c52ac9f7020d9381ea00faccc777b191f6a53135e39d510235b716b84535cc44d52655cfff8bc2fa6bb92068c5fe947e6e87ab667281eb5abb7fae1f841c30cf10e1e6dc9b69115291c2945cfe17020a458cfc51166aba549a7ce7e1f0b9b23fdd222227bfeea910c3e5fdb0580a23bfe47cccfeb59ee5783a766a0773537b1ba6b3b1b75463b2bc6be8036abd1e1e24b11fc5733866954e0335de99f433b2ebd25a3c94401053dff0944f94149c1cc1153d8dba880af25f5e80ec9d5aa28038c9e06bc76d3db500bab1893545cc441f799dccdb8bd22332b1203c1d8fe60d88f20de557c13200a73107595637f6bfc543082bdc2b06514f65de75207a478066b7a8534c26365b5cbd5d65fed462b43bdd4651c74feda33fe3803faf030f01577f7b5caf8393eea8c67d583503584c0aad1fe8a3dfd0428992ce44d11284bae5b34ca987bf8fe212b42dd803ac1fafb91d5b9579c2f755b5d992298e8ff0d097b9e4e1dcc4735f23ef368d71b70004d093c10250e2aa054c229299ee62996ef5fa0badb679878c61df6021860d4373d8791ad73026317ad5d4973afa74c8ba88de88b51ec6129256ec72394b94302658362ebb2276d3dbd85669b4b9abc4dcd7ce25a01b935e998a7f3680c6350e42d832c5572cbada50dd12d0b034f0d7fd6b30a817b6c8b1c884fe729b01d927f2e0d5a75359da8c036d6f94d6712c4745ca6ddac1f64e5447ccd3ef350466c15cf9879b56aebf32190fd57ccd7a455ddb7eee8347e30b8f3fea6475f4d5c625a8aab06b08354f13bd4cac523e572561e80f1a6b5085e8a9d8661bcc807edf9bff7cb8dd13f5737915ab5ddcd00eb29b9303585985e5cdec39c95fbb82079b6a89f607ba1cf614aa49b44ee32ca9d65205e412178d0aa39e8b9b970ba276e0dc6da005c9ce4118ef82efe82ef92f77d06539af6b12fc5008f5622d8487d59837d4021bd4cedd6990e8e59387e0a97f5bdc8b971eb9c4be72a0a888eeda2baac4e5a5afa1c7d2edd5a21db8b4891ed53c926131f82c69d323b3f410114281fecbc9102bfa5f298e06d91fbd7e9b9661bbae43e7c013f3796557cf2db568de7c94a7cbf5a53ee9326ab4740cadbf1a0b1f59b92040156b977eb4c047a1f34a0c66a85f776a0d1ac34a5ca30b099cb0bbb2ba4c453edbd815b7f14fc69e8cce968bf453171374c428eef8342459db6359bafa83bc830d42da5837041274db700249b22f3f661af0499eb1b0be672338cd8040e7eed752b1d0a9ad6893eb873a38e90a7c562da8a60ea2af9e40f91d39ff4cb5ff4301522edef27c02b2ca393420b225c0c42ec5ec5f41198614d8706dd866805324cbb6c0ec7acb5ad5db9865a3ee2b86f0321acc24c517f0a1ccc5dc3e15cb6bf7fb2670e38ac3f966e44dd5a7e3445344004f4d4574d3654f9dc48f1aa2bbd0255a4945a96a8c66cbaeff8c15db96b127620b77aa97726c8612148d55557a0917b0c84727624d296e015793d61c4c27011ef6533c751f8eaef45eded576309e34c54a7e45ba2ecbb5a5fdf1d0ee8c3e3bfdb9e8e15800522f0b498b844d0417e36078f3ecb958d30a6198aeed9b7e7c3bc7fc3f82863d40721f7e9b49221ffd8e4bfaad02a8f3c9d4fed0d3146a4c6c6a44665e0848ffe0ddf8a4160b3ca9d89c4c77b470cf26367a454f662da21b93303ba04f59e66ebbd95d6405b4e4c92e752c98111f761aa166fbba721f8c167bf676521a5fa8b158cf18666f2b62a78981b204cbf6e5f792ffebbcfcd47062ab22bb23c500d6f13f25ef515c58fe6c7027a863eadc63e491addcfb0e33962aab1ed3bb5a26b755f945abced42300406cd2d45f77bb3a0927d8951faf244594045086c3e0b894060d951484e074af4a04e7009e787ab08fdbe8dfd1e88fc6c83d229be3609eb52b037ff11c873354b3c0cff2c8f8010e9e364582b9c05c62efdefbdcc2e1c062ed64690c3dd24837a228f27386fc389c5dbf58467e3f745e316f420f096b06e374b7bd2b90c79ba040c5b84a808e07a1f5fe87f3c86dbd05b57961fd5f06587fe784e217bc7115d7b51e8a415db556678e7b3b504153209ea484bf6e6dbb9e806e5440986ad59c2328bbce1ec57a0d344ebfdd268ff885702516c42adb91c02c33ad3f7542fd19cec125eeaa62e314516051d33d5a64d5c461b9d8f85091a6cc5b1a4778ebf0751eaae350add9fb5306eab9875d4ba0f6e280f463a174c238a71120c0670eb6965c087d5eefd5c7b29a15805f4e09b3d212a94fcdeef02c5f077b49120b525866cf067c7e37fc511a57082dc5d73da5509c04537ea46cd70132c11ca52c60ddccc1c9671a4ef6a07183ec4820c28f7f57c7ba87df8e8fcc07710c21e292df4daf787cc699fd6cbca167e859d8d5a648d1ddf374567302125a0c84e12f0478b0f93d4522630a06ae904b25e955d92b08a524d6a04c1a6db1e04b50e3f54bd30f91584c01e03d6b7d2876ca7ffe95c5c7bbe58c952a4c76b2837699af9d2f97715f11baee786044314f3200a43dd31d8efb673cdb56d1c81c2ad486ce8d786ddf4bb0b76e933938d3efc5efdf7959db644df40ff83a7109f7bdae40c72feefc603d7c6a0b9992f069ef78beb81bf0a65299d22d763cf4e24b234cee22ea59edfc1dbefc4cf23113fe379396b78960265fc74abdddc621fa2146f6b9682580e7bbd3bf95b906de4a97af5e9e652c710493bfa4e8b33fc1fa800df4c9204a2c93a647c45bdb3d633d3e3f21ff496cebe8f66928d5820f9c8971608d45d2c02598c462187939008793facf23e0ecb2957991ad1eadd19d7a50fb270b5507ef33a01e0a02155cb511f5d447ad6ad46438606b74cd97295323f6264ab423453f1e50ba28c958cac6ca0ad28f07c48bec9c458ca47ebc11985e24fab2d1d41718ad52a2a5b6690d997a7bff8f791899b089cefd27794311d4f5828045a99302e2aa4ede671170ad98e9ef60304b8b841ac7a6c5e30655b170aeb7bfec86869005dbeb745822973029de0fff58c447d6901d73ecc26d1a7ad2526cbf90aed548e908d26e5f300420b62283e3f02d74167c55de7babf5b9f363a94889176aa9b2f6fbabd36385df04a67ef214e1ce39cd45358e7985e75ba58b7af4246b022a57957b1dac4e67516561b7049b11efbf8253862cee3a8b2716b38f179872be7fbe2c4fd000071f82ca4f98627f6ad82ebd0e0f5fe3b12946d041ae5aee16e6d17025406dd776f499bbd8e8b4c8d3d1ad07de9ad05ed209df5b9fa0652d3dc147f3e6169c3a8330bec0646ea17e332164e62bed266a85731b3d332cdf5dd1980ad1d999042f16191b625bf3d2aa74117ce45dd20a0cb2ae2200671c7187b9b3419164904ec117f9d528253fef547de91d89dc0e244e41031b2ba237c2b2dd5a15bcf1c521f56e16179b2a1a9f8236f16e5c106c1b371aba2e474b447be625d5aed9e7fe26d503b90741d24c8a3e877098e562b398cf261b85dbcc0c432b796b3370ae040568be29cda5869c598f58b0c2ac38aa421f4b6d456f8c57c38ac166cc0aae9f65b688b0924cacd4b47e91f7153afb1bc22e72fa998cf3eca20ae50ca32e4e96eec847947ec0aeba42111a8eb91614ccbf058408a7b9699589b4cda6dd64f9b349a5e51eb888f217ac52dbbdd5c8e985e2aa67e0977e5618208e627ba53414bc1e554896692ce2b29949bdcb92d9e410d32705ca9263223e0ea38ad52127087a14e15a44b834e455b2fda60217d06c343984440dc0f135cffcf82efa79c43db5d450016fce2962c69f767fa88d35e8b8bcc70ef348aff89391973733d6931b3506aa2761d293c3ce07bc31061b91c26505fa4ac25225d15276878bc8601d0bc151f8b360edf86f3593d8a364ea6a6103bc24e0c308dc29d352d014013ee973235d418db547e2cec3ead1bc0a214b2d5a894eb73e905b69dfce7bb8269980bc21d38d9da807d84840b4af663fe9b98e31127fb97b122af73e928e617e98684f845be4cb80566345739b7a884c6a3eec5102bfcdc1b7d23db84514f652642b92139c4fff875b0a2d25453b0979cb61af83ff16db5aa6daa1148f125fea2450ef983fd521033f55681e5afad30e35ab3f8db18dcc8c08ca8d1c1a92848e0160cdd9eb7f193d29cc5e2683bdcd53cfa20537c22b86a0052b68968b9b4d8623e294a04954cf7d42f87705688edf90c2d0674bd7f9f2dec4849a4b8d36a219b15eabb3015c2b0bb1601c82b074f10c35bdce8f9bfdf88d6e5d8b03c66a6b91d35d7cdaba9f162e9f8cb3670378eb1051efa3cdb34181f62a3ea386de3f9034b3666edf1c26762f3405a67a0ba0b5e43df04ccbcacd736221b04a9b7ebdf94b7601e989d1f8355697525b846df638d02248335286a7b8177b3ae80c4eed8e1d47b6559f7e1d39ebf1fb3c4cd4825a1c287dbe298fd9365e5f65e59ff5d638f44c0e1beace9e6c366989af9ce64b040f7619571a8e6bd77ef5b8a91d1c80dd16ad90a1326682b47f28831e3a4b591ff235a465eb2b6381c166bb9c4d6af466cc93c5503ef1d1fb0d5671f0efacb4910d8ca450650dcb1e6ddaf626f98839bc5e263390d8159328291adb8d83b16544a8a4a37f50ddaa95cb78f2b0e71d57c5148d64cac67ad1231b9c4a5dbe01731e0ba5285c744209ce236936a0e0d2576b36f1e064d1c993d42b0546c86845e6097eb6bc4e98e5efb1bdd54a60ac4f40950b792dc8c1aadf23a17d55364824c6ec48ffe6bd866d6426e0e3b756133b1a2bdc4ed55c5ec4bff8c42b010f27471caeb2a92e1104837115d5bb04ecdd3eee14f197608a70c03a3bdd38d1bbcd55ef3904dc1cb3dbcf1c66e586b989d101c33a927d54b9be4558d434cb4da202f7487486bf3909d3f86f01556c5f94b92ca18407283b5011fc22ab110dfe2c8ed52e477f7b0c7cb3a772ce70947d775b6790da97bf9cb9318d9fa8bc266bc23896a99a39371d7545832cb67d279b997f5899248c6a005be69fd8b47c3d1dcac9e3c155fa1cf55a4f35a59fc34c4162efaac34a2c53ee9ef8dad3b59b7a9aae0a637f610b521b949a64e5738b2cf83a72031735c09feeea2ee89a955f066cd4c0bfeaa4b400178ceeb9f5181dee4789cf0c9bcb8f7988a7516e353a11091aa6b69e0b073c4f72a912dcdc78c1bcb7b7cf6c59f5e307453d2917aa8ef8aa2d8ab3a9e872ed66b352d074a279bfbbcf2c3acb599c0271ac157e8803775e122cea7e888bce0d6e62f1ee2950055e151751d8d3a2a635e04695186c48df89699f2de0e2fc01e58e08ed35a5ec03e8f2178c702a3bfdc47c9926bf697fadc2d60fbba15f41f5bdef2cae6d8d815aa3795846cc782f87f76c2f313a27b2c9518103fc89a86490ddb8569c5e8c14f4d8d361e8b266832e16d9901c524fe81a7e9303585f656dbc8c120e1fcf48afb8ce27bad8eb9b41d868ea4250cf892a8a91349737ed3d62601325dd9f8a69598ecf9eec803fc0716f36c8cf36797c7f00d18b4801f9d94d64ba184a8455981b5e21607e47757d19dac89abf3517d1ef6588c19d1e4ce135afc913de36f97dfc100d94f89457794301668998b47330829ffcfd1ff6aefc232b88401f1d3ebf048ddb63e3d1ab5df6cc58bde41d533f4197756854f1e7d21ebf3fc597a1eb063bbbd3f4c5653ad03b23e55d2ad780a933353d2ac678be0c2e5335cace2bcafcaa833d7029b8cc7b19ee5791f34ac21460629b6afdf1fc525bd0b3784b21a14758cd60fe943229069815f483c6dee029d104d65080c6694bae1c01f696ed398f4d8285c7903b1818c08005582bfba48f8d043706d75dcda02e20676d37f55a7d9288f4f2a43b62599a18d13baa09d4ee9c4b06b18a20f0f9e4c42d05b6a3cbb82ec9f5a8599acf732dc3a252cc7039f007c08b7c21759afcd6f19ae59c5e56e9292cd01135c0270b816abec518989b3bd54a0d8d25c692540e8df736718dc1b88c98cc54c21532cc9ff66ebd17eac2770ed3d60c1e7aa1a794818c1fbb9ad5cc5ef7329a8802b85b8e4dfa624fcc754dbb422c2292f98f9e6eb6a1c904ec5acea7304a0a0eed80635659aadb4aa77e64e37f58f70bab24e0a6137e5cd3eb18656f2b5ccddc3f538a0000c65190e4a3668e71a1b210f82716447f6bffb1ffd73abfd0b00a7a61f978932c95eba7e9adf8c402517b2a4862e74ee4afda25905ef59e078eea71b93ad617c460d2192063c48e19af7cdf039bfcce299316b706763d15b83d9547b1de4c95b06f2d6eef8f72f39e02daba919bfccb365fdbefc9e7ba2bcb063287b0ac8113d80a252cc0f7aafc7a93c0405a2a904ef35b5056417915e82831e9b61d6d1e9c2479e2ddfa6413b093aa54fbc70f605e48ce9e73d7f3f654b706e45e62e9ca357c038b08059f5517d28ebe723e1413031d02eccef11f047861cc4806e6e82ee8c8f24836496d19391f89272d28ff51455a3d63f0f9c3e85b0ccd40371132f2bcf08c43ee2e99071f63e1b7b5ee99c42de7c82b6055a84a05a14ff1784b8ebdbadc1aa1b81ce9c6d084df9591f6aa12c2aceb6ba66f96d07f099b8651fcc637e874e38d1c7b27ff546ccbea49aafae30d91ed4c4bad5525d02af9254a8ca00950a1312da3b31959b401eddd667150e0147f18f5d679acef00eeb0f7ec64e5dbfa494aa9d42c887df72d8c976fb276b0e15cb28ecf3a64d7183c0a23beea5d54ec55772a384e3b1225d7f23fecd732fc7c120441bf5745841ffb4dd14987cf1d30ae00d85582fcc147e765fe65474d6ceb8756342d3a179f1d15c22b13a304dece3a2ddab62e913263442efc636a8fa738a5f08fa14aa2cf1b71b156a6a7c53ecce34659e0bcc30c84d895606da8bf566b52197ba3efaebd1ff7627d8af9d8e53490927c5d925af7af8ae1530c69a7208a781a20bc910210348f1cc64503057c0e295a6cb31a1e9dee425cfcc7150dae9ffe3ba5739867715f212959612c16ab6095e6506dbad7a348e84c842614baa7b1ccc432516da588aa95cf5f66dbd11934be7e5110dc4cb4c665fa12b1ce76b4c9cafdf1dd7684fc1cd35700da7a006f918b6a9726e746766e9faecff1ac087deee02e089f1ccc76bdc409634770695480e4f14937438d914a7fb0e26d143aa928f69e9f1fc7449d964e2cb13425d57107b15d8fc957e9ae62ed4774ad6fd2e17ff496dfe6e0b51aae5a0a112a010b6e31daf492668d2275bcd2bcad3a2699ccfcc25eef7bcde7940ed1e9acb06cd5f20348ff7a954cff8d621457b49b9f5713a6483ef866f8a2b4bc9912aa4ecef9a587e1c56fdffd499f5c9d60b25844d45d866f7e2230c7ae22c29ccd328c8f4030c48e9098ca06c852b0531fcefa7cd753a21d659460a4d28528c0616cf317723bc238a61de0d0444f6820dc3108ae2a9d043b3c777ef6d785f4ef18810ace576d8ac55027a9c3853d8cebde020a4493e2b4b24bf2122586cb30103899591db66f231fd6deac4752c5229c6e6a89a5dbcab868da2ea599a5ffe30b0adb696a59e8952c806971c5758f341ad4910c39caff1a473153beb9fcc916c8d670c11e0681e9d696f080a3b442c94f589e1b682726e2369888e6ef55cfd02ee480eaa286e226035f9d624bd886ea2242ba3e9abcea161c56f5a4a376bc19277b326a5da1b2549d24969e23a9059e7bd90cfe374ff0c0e3b4c3803b2836f99be4aecbb61e9a7c8b2d03bc95ee64ed4266bde2a7a9e3e772fa1a022033e57970681d9417c741a4b5c20d4408714edf5f31f47352926994b17021b3ba5f73a08f4da74ee76250d7032bdcbfe4f8697dbb82da37a1d12ace885d011a71748577e0db73808db86e1a5daf97b5904c5dce3ca197b8fa30d09ddf0be1c0ae39c6044b5caab273 +MD = e7810153660e3a2544d60ed48ec01100501e3f45f801848c43eda9a1289f23ddd3a903faee07491caf1ddaea79e9c065 + +Len = 52072 +Msg = 95802d9015a7fe7f5cd89e48458e6967ae41c536da39aa6014a3619795e58b8aa82f66110c524cab9ad67c2b27461daeaccf80d0a50aa620b61502d194e87fb223e6c560dcb3b8b972464295b53f53b1b67a26ec2ce4c5b6168dcfc5a2ff79094ecfd3e34d714d922c5079eeb51e125814693ef13870100a7c3451dc87d28079700f17032635101c101ea89df08e638b0dc6504791558e0430320f7e0a089cead3d1192831a60b4065d5570c2e354c32eab6e456ff3c478d79ae9114f549d542bd3b62bb346d45e775a00fa237bbd835f46383854acd448ba1d060040e3f346a77757922f831c6f786a556c7d2c90c7c70f5b43e39af8ce8eec203b81e90c04a49a8e6c7459b975ae10cb7e3c907f2f0a99400e9958b278aa9a90296ece482ca7afc3210e353bff6cefeb75ee21c9177e666eeec26081e5b19b0e60842e480d35498e467990046b594a3e0a1e6b1f1fa6e9606b0b4cf784188fc3675e637c44b1da58433304a357d7d22b9129c6d1b628a4ad09d07873d263cb87a45a186561c1e4a9bdc71db9338cfa3ca1acef9169582abd51ce6d976f17e0a3bdf3b793c2c9fb0b0ca215868cdd3509c2242fcea7d9ee09c931b6d2a8a961affad7cb78065e8fe4b640b6cbc24d14fb690c11fa0012611ad6b6cea61d9cc1151162ce92aad405df414f6bd982511c8a0cd130a3f086168910da2f923c56817b68212b640eef1f53442a9f303b8dae4e3420064cf7c980acfdf85417938b153b859f7c7cc0f41ed9254edb706c576ca065650d559441322ef4bdc6b6a1af0eede04a3c3d5f8796e97b38ab1a8342ba49170ca07e3481ad67ab8711eff516e10b0e9de536491e09fc9c74888f1ed42970dfa389f7870f54ef78e0a033fc670dfb771701f80c2c0a9b3f8efe4e9d802cd015b60481da4ebb3ee3470c1326141867a0420ce31735fb3daaf466f99deb56ef5fb0aa8dccc452de7146b01e00b282b820bb7097f8c07e6c85216ce08e5a1a171420067bcd04ce36b95c26b52aa6cf755ecfe7773f5fe6a044b27ac3ed6108ffe98092ec69845fe011f3fa68f2756117d11bac114968c66160041af449a48602365eca5000c7ba5321aa85b9f6b2ea182e0b68e6b57fb0287db2c7f2117923b691172737415350185eec6318b5d3cd1eac3b9877e219168dd42afc5dd373548570463402a99ba3a820461d15ae4c7c73f218a5457da98bda39f942981e17bb175a687b628815377b1c241e214ea19ab0862f29cfe6c562c5e59a15214fdaa9b4b60a57b78b648e09b912d0dc25678a6ceedb90779bd14da98d89fe99e720b3062988737221fe19fc7daeefa6a102de0182ca73fd2b719f2d8845595282ae69841b7f3932ca366d9bd034c5017ff7f806e8683e91141af9aa7c58dffb80c83fb7026b236a02c1eb906760fb8ce0db8ae586317b03c421cfa8c030dcf59002980784c8cca85a152642999ffd999211f945f2b29395da4a93c0fa69eac10ee214fe09048f4e4e94a05aed6e45c7f23fb570a47822f7b4e9e85b816083ee7beb491305cb05ec4ee4ec21e9485e889fc9522e21dea389f28430010bb132ee558276ef1178ab02d97a6c3003aab26bd92351b6e1629fcd01adfd29efe872412a5c50daa289f9128cc9931dc321ebd25ce226a369a0625160cbc26ea452bc7778bd597e3f9b7aabb7570343be3a656c998a638c2124a5879e620227df9c8c01bf39e3324f19aa3f17b74f3a3b50b99afd907ad9be4bd3f029054eede8326b607c6690af6780f23cfc4ea979f10142de1778ef0487a2782b8f2a0b395490d5241ea7e44e0f6dfd25f391d47b45c8bbb675c832a513b50c9a4f54b992bb5453cd34925086bd3d25aa8c2542c6c0136ea476e2e823f8e00bbcc7f9fc7272e951bc4caa67e1d78b060b248d66e4e67dd638b97d62198ddfe003a79e266111bc7981d5448cf814b418f86b1ec34e2f74ace3bbec52ee78f1341f6cc5d9d72e6a15ae5d155231cb54d8c2be7dea6b11744d25dcb41d2b10c0726065e5895d1f6ec0a242813a1781f9b02a9d0f4ee42309217fba5933580bba25674191b75b6b36f4fe341cb721ceff497095676311dabfd461c36037edb06ab7a48e4ed66a985f4d22904c4bd908f20f35260ab9acbee4d07c965d8d64b54ec3988a6189033d4413afe5948ab5d65e7bf8cd5dc4ed3634a01091a5c64570e2b3c3e49e21adb0820306a289d640adb11a3bf9f5178bd71bbdde43dd551879a312a71b4942d2a89565c76590c0f1f576546f4a5523e127f6a4262b78cc46361c6ac2acf75f0a7c0ae6529d4ddd52443ac5133cf27c859f71dd98c6ec9e674cbb16a7082cf8cda13eff48c8158dda206ae6b8205173f1a409d4a694bd4de4141bc0b4bb5e8284bebe0b0a548c5502108333deb2f6bcbdec2b23c0136f4d55229ad38c3500aed83b14b427e126b5527b1036f75356c932be523575d1872f330ec4d98e13b7b0309cbf6511fc593153e69e5a828ff5fc08c11ba4484d7965f62f364d4ac5f839165a3a9868e4b85b7ed98a3900d768f7986ae3dab7e5da84270a5ba932da26cbf209f2e89d58a8964bda603d02b8043e7a32475335490f0c3e369167e6aed7cb7c1294c01fc6ce74434fbce108b06c2326adb2a850d5ab60b42a9423c6d29fd9ed0a8ca9609d8e67edcffcbf733f15581633c2449b1a2414115cc04763e3c359fd58471f106b5cf3b3d1bc42e2d2744fc17ad2a264950da8ee53a25d4e3106ddf592409bafaedeaa2ddb57f5d8192d7cd0d9706c4dc4bc91a385a6dfd668bec89e4f25a98ee677fdc4637c62b35195619cd637ecc727d560c9996a39ace97fcc3fc552b34e90bd61000075f4053a3080be0775be613cdc98d8d559152241be3b52bb54536f3c13767918f1245e21a36c8cd3d64b9c82369c49e00fdce6ffeea89f87b71451471e9098335a9e2eb65287b1c1b63ee98677fda53fdb0b6b72a5964eb0d75095503351d5e63eabe756c264a567b1e2c8c8153f634b572b1058678708dd4192cbd5f63cba8809f828817785d02c45f1cab5a2d41ca900a6760fa8ed565382753556ebb3debf48ed52c4e65dda85eec66fdd855e39cf74281d06ee5bbfca2652824168498ae2680606af936f2d1b18db18ae412033350e0a75dcac349d8789d53324008077a803ccb490034c304250ca55b67aec91504ad8010f671a78323957c87d58db0d6698cbdd24ba479c92230eb77476f5ecc7c71b5f0db37fe850c164a2cbb5cbb4a4936de0cc2d13ba810c02be66e9eeae01ff4ed055f5c76649ae76528dcbd515e8903d7ff4e02322a57850cb1c28294d754fdd1586b2a36aa34d276831ef79a9b8fbb50b3d57e86d65f4737df2d65853b855609f0e8e767de449d25456b54bd88c426f031408e5e3490cd5478968de59319c53cd6bcdc308931111977aa1ae2ae900b6080787ae2cd53e10a85e443db6878131210d151ba3263f6fb21c39233935c3448a8648a3c280e49010c01cf8f410a0835a80d8e2c61421472499d04d5c18e674eb2eb0691ce2bcee218d4792aa6366b4aa55adaaf9f363227f922b8f3c0906d1da5f7350c45103855ae4589d41f6706fc109f7f6b72a71ac13839f5b316c80e5b896f60d217274f01d83c46b435029ff0f0c4c38765fd92e90fca053d4da011b1663acf0ecbd6db8f9da1faf36f70ffd14db0ef2cfda0634784be2ebaed7e40c64542cae6ea87a3a6065cebb85619ee45304d4a81c4f85582a2fbb9527ccc61432d6e9982fba170ef1956612c706533f4a0821eaf416e2f436e6aee2c84f13dcf27a6830b868c0a12e075a67748bd9888a537b1ddfc68bb31f2f314718c559c133ad2d1a914af39b663a201c06387e3a647544d347e4fbff5357f74481d6046b66edbcc832c74c583a9c6b92f4b2cddf88fc238dc4e8c04363ff457dabe7a0261cba7b9c256427523bac717ee87154e268467bafcf485529d193c034ff70b99bc5a1fe38d1a82123b9e8f63229fa9fed82e2c1dbcf9a470d2ca3dc1ce507bd46e222b910d019a64765d04e5f61b4fb4b596f9a745e450287c5ae1d87f523279202bb40a6a92f333790010e49084713a65c3b7a2bf3df04043d20e928b849950797ea097cb56f547ef8f9aaa1862765691bd4c54528dee81d139ae351a6e16232222d98058d308687e10897db73bc6d1e18da206245ab1b3cb97a80a539912b8c21f450d3b93955dce8dc7a69499c972fc3aa0ff602fa19edcf4e4595f8cf6d8027ece86991e02ef880d3b6cd903e7038bcc2d892c912609aa594a6a66cf284b8a465b329dfab9e65499cd19ab02884a354c33eab00aa8beddcdc2848feb12d9017fd35a6cb1200ad93865f4341d1411a3c1996b16218f831e5934f002671a4a1032204631cba122c0f2eb449cdcf31e7c334754835f4321150488f7e8cbaa655e66293e12cea3f8b0cf47520bc78d3969ab24ed214a2c6069d6a6df69a029f39423d68a37448e5252d86266a8674a2c122f1a7d186cb307c2d776f0ac6dffbc59710f71c9b4c9f94e1422c79b4393be1eca104e904d3ee0ca10e174daba93885659bc3cf0a7beb54b8c70bf0de3ceb63681efa6b07337b12688cdb11a104f1f32e2c534d3a4d44df146359426d065dd015e9dcea0680443814724f095f59a499615129e9b33738bea4c578f0d91befb2868030e89b40f5e8156cc7972f4dccd2af88cc56fdc0335dba6c0f8ebae43d852a709ad93ddbec9cebcaf94da927e74959619f07828ec146f5a5617e7b05a3b282498f5e56d7b4e1181b389f559e60680f4a266de9e97f04c7203332a1e6ded51e6962ca8ecadb3f2aec29fead07d4b921c1070c8c76a911af5ad96db80e3b776f5ed9b03e0bbc1184ac320e27fab0a741549565e29cebe82ec3e86235f245f3f5a838a1fd30f402c5d9d5204efd90dcde73760ca4e2c412b5e9d4c2a4198ad531c4241234c10f8d5f03a7e79a76d1a469bc1d631beeae0bf53b23017b1a76b5b43100738d426b1bc0981eb682fd1fa8737ceffbeff7264e3d465791234b95ffed8d72686f2b93289b35ae3fa106b7537c64824969b2a9441e79e7145543652e5e27ee4342e3144e3f3adac57d1a552fe4d168de41a7c3a8197455ed698860db869ed8a6b10f7af72d3628fa6fae65b86d62082ce02cf1c4be94289ed8811551e760c5f5221713bdf5a62d41014955674684e4b7cdd8a0445e77d3ab3ad3ff5bf0fc3ad12e808afd29093c3bca61c0c730c882f173217b81a98dfb94f8e79b3443ffabad2ed24d5f27edea4d238e24529c9b677c78add0070044e4deab42559550b99d0bbb92e73e82b2bbe7c524fc83ea7c06cb36c44a6f034b33faca5adad997d8835f5d38c525ba0635ae07dcb5f5bae8e530460b470412ff7d7bceb7778b99caf31a7c3a83af4e36cc02640bed028e70877e1ee95280bfd005d430eed815c70f60ef912e9f35bfe3038772490e44c59171f739f4f94f8a7b819689475922b0246121447b64437f8960afbb0a963700ca192e2fa4a7dae34065354077971ce59858720ea79f631da857dd96c72153b098f195588efaad5acd1522eee60e7ec7d9db3448499d1f0abe7da3ae051c25657cafcf4cfa4e51618035f1fd292bc2d7774dfa99c7e9d1d73a3694595af3168fe3983e859d2f4197f83c24f3a77b83b4ef45277ba90225f3ba1722312f52b1a07c3f659aee2a085e939c3e5ae77a3bb0a0456d56637285f0ac93dfbdf89781479529c6e543ab1025e0daa0ab6fa4458b48b31eb29db76c4e80312f685d5e0fd5ccdbe50d544ef3ae7e7bee5db6864b853732ce28ae4d537dd37383c8b3f2b7db91ba427b96722d28baf489fa429cb83efa38fe212ba0d60f24df8f47931203e9726961a860a1175534d905f9aa541629103a21247c5e6e62e2d9a46d81288e5fed5dc51c69785c945a9de4e43448efc3f7bad9bb36d28729abf665b2e4a2b1df610bdf5007546766cac7a942a6f79fb03f3f7a5de1b9aab3ceca35b0641d18c88bf822ebd0c1c25cd3cab58d48ccc04e553c9574f35053a1e9a9b6ee55e42dabbcb742384c4cf7e7242bbc2cb054dc2ec836bd98e2531c648b294ba550b45b0981ad8fddd05262862a7f0fb9640c5da206b25542351e6f8c01dd76addb0a4b62595f9e35037eacca551932bbda7fbf789f43ff09723ec7890c1aca406b325936c241efe66c2e311442aeb79c8a0b9bf300400d470010aedc0885a90567d91ef75b08e76a60ed9a04619420e4095c5da1c84b12939550aff56592b585776af74461f927299839420b305de12adede8f1555d9a167786b2575c1b6521910649c8e95b721ac58adb3a93d808ac9510eaace47503c4b4fccb9dd9b851168b962593664a7697b4897896ef790804826693b2d0b6345a771f1c79d617375ccd8c0d7ec3d6e611eeea31dbced02643fb57abac2107740149576f915a205f1edf52c6300ae609aff913cfb139c5aa91894bf941e04f0de1b10c8a906dbb10824a4e1b524361289a5f6e1ac23740db15b2aa461a1478452137a6361c17d094b095ead38c74318bfaa861d9b3d02903f801dc5adec56965ea638d3bdd614731d1488db585a73d7af65a56d62f0c686861fb49fd36fb0ab463be29617d5208300deb9e8be6e36d3db6ffb4d7dcf4e552792a59f7cabf437cb5cfe370a1f3fcd98b07871b5631a91b631ee3a5628f890b6815750f4118fc03071e212ff34a09737423af2e7e98d95e25404b086ae63ada5544030f440f1d9382344c671b621848efc87e8b0620e54c23ec54c79cffe10668406dbd7aab8e724d98cde0c140129e257d5cfc95d1b52e86aa66ac9fe467d8cb9019e18cf437e892d20a628ceeddbe3ecab147d3b4324b7502e97d1c9db298a3bc714521f2013f766b6db5247363f06137e5356ad042ed197d4503ba30ac8e1b4ddbb0e2aed2bd23ea5da032d78a7bb64d608eff2dce5a9aa2e20622a73c0158cac1e9762f94acc1d742ed5e223ca966938b1a3dd4bfdb1ffa284efb09493b85bb8ab9877d2d5277bb83624f5d60c09992cca0c9ccfbb8d00c80a2ee5fbd82c8a89ee8baa187f86e1d8ac8ae90de0976d08cea4e1d6c39d66050cba3b07f1f491a653eb9a288e5ce85bee622c19ecc26d734be72d0f9a6597e0192c104775a319947832c881a63be7b878654fa8751d12f2ae5ddec894680effcbdf1648d7aa8abac7eba5c24b866884d6eeb4283df9d5ed82738790662743aa814dad6a9c9d5dafcf80c258d2def33786790a27abfb5eea44b2b8057425de76c612565b38de1ad9fb9caeb3f0a81057039eb20523a3f67f81b5d07642e627eb26a7916930ff4acfd899bb6219743859eaca3c7f496644f3b5d7719156eab88e1f87ff3319734607e30278f1b1c5e3b6888619c481b4b30d5da20bb5249618d60d3de03756ccc508b75177d15e0faaf3794cca936131d912e5a01f70309ac1399c33f4e48d8e2058a211389f72c3d6a74998df5a7c401fbaea5c2d410f4b3a4f3904add90219f05e5fcc2baa94852f3855f4b88817720f5bd820a5b61539fc7d601a6b737902ada02cecd18147c5fd2d4aeaf6bae75a107c3ba8192de6d9705aae0fce4236dac0b4b5fdbab1e108d90c74e61a51403adb92815d083708cc4e4d8f3f36d3e004c212677957cb04b03b4c806083e9d6c6c94545b9f36fdf64eeec60334596e9033a3fddda392b376eac63ea04c3f30f6051faf5495b16ef45cabddd766b09d678819375aacf50dd9694e91e2d7afb4eba1e2a2c85bfeacce16a28539327bb2cb740c3cb658aea8bca9d528954e9613916766937e99259ecca55b27ef40c195051f0374b951c46a67d1e26d815cfc34318032eb3ff62c2b36315e29c2378a2e5db086472a3c3f3d210afec76da7eaff1213cf13d31a1d3d53e134f57ac0de651a4f1d1dd3c42808347cb09e22d7675c7e49c37102aeffbb6cde64f1df82c6228626515e7a8f86b3e64e805b69957c33bb4a986f945adb8cc9507687b826494de75aa972e845612580a9f6640889306c123dd57450c5b89ab25ef21ecf5370ce8616aec1e58fc14849b49b22c75a8befcb4a03e7ff989ecc6f30611deab2428dab80e6b43915af038b98f6fd70b095a42e9ba932697a960a47ef4beed2eac7729ec0dbb1ab7e323e8c7c905ec935577483554fbc5614a63c84c336f84fa40766a6ff1521047253e19689efab9c8fd84511a37eed8e0ed94a6cd3aca329880b4f0c651b6d0c9b19d5efe69d4eaf66200121abbc2dd80f341d48483457273dda17191974fb8b9e8c00dfbd22adca63388efb9594e4febfc19b5f49577c126c7ca41244ab354926b44bb0330432b72d27d6e78a8b7ac6c787adfbff9b7ab2bcfae0420d45820dd99a9ea872cd433d6df5bf2db22b57f9cf8e3c62928bbacfd65bb1f09dcc49a15f45e211a2044a23cbab331434fbe45f7edf2edd29aca23161a701631bc8f4cb61bdfd31ea32ae32ee5019e5388387bf7d816db4ec889b9f06e6b7e4b0bfea54870bd95173ded7327fec58e9e84ca9e2737cdf2f04a60ee36d21bbbb843b930478365db865902deb2588da656addb39109d96e96998e61c33d60f530bec357a2dd4670b0e7d11824892a86a4e6be0b92e79f0130d2c9fe081fa94d8b87e09ef85d44fc7f212700a753dd44ed85781badb4d67f46d8de4b7aba06ab130618d0cca137e86e3c1d4d3a2aa6fc876e924aac1986d220d355b2e0b77ef71164f655e750271cc5603867a6b68f96bbcb94ff55bdb8e106eab79903bd1919cdc8ff9511131c7fccb402b6b2a09ffbd1c107a47249749440458a6aac75e0f98f5bbdf911921ffbcb6102a32890de11117a72a0c964c0d3150d598ca186da7f9f44b7e7b1743777098ec094ce2d55c1c21e5d5b23b7a686cf6aa967ab9a109444ac75c8b7626ddccf64c5f26e200bf42ed4503d47e92d95b48304639156881ec8bb8005ec03c810650b9826ce1008909bc5d4aeffa35de80d81f1e81d644c0671985f04180050fc13aac196b7a6557e52197016118d3f68218bf95e156c6435886c9a2f03000d88216ac9acf08af9a79bf7addd464edafb3acaa22d4215d692545ebaed74ac089dd67237cf4363fcf2bd87126b668f378a9e6677bd6c08ac041f9746a535ac48217beb936676da674602f3272839 +MD = 0e9300bee71c1d878728f37be6aebb759935405dd72970b5f27e02480d51d5da747ca6423b838602a797f2dde4c71cdd + +Len = 52912 +Msg = 867de3ff30bea7613e3599c899be740f783de14d6e8d9b62a7b9d1d06f6fcccdf3b1d1964cce4905b9911f662cb86a8709a74c0e2a5e190f26a9bcded3965722092c2a2ba95ab686de2e22cea348ddc4868d85a2ab2008ad138e090a1e4885d24f57b669504b370b36746aa7055517f1775655b3f9b9ae63f7cf7efb596c9c054e983cf5488714bc48ccbe9a5bc95e34646a84e61d13545a59d6e45a8ceae5e28c58867a99f895c29c9ce74fac8bfbb5d631dae51e1441bac10a02cebdaaa89293005a9e4c850245ba4dae6d0083369d55131f5804a6bfaab7d3a200f6932d3debf681096815a26c2b48d99d6099561467781ae6d8b01452c4998a973e8fbb091aa4c364f592be6076f43086d2b5a54196c89438a11989db6fc4833c9e869b21aa70e757fce39e4923b87dd161bf694d696b55f667cb666d41bc55971c5e16ab23c4b78983f08a4ebafe8625129feb6068c925c732adf32fc1eac84fc30072d00b07f9a395a1ca97c42d142bef3d73a01c4acc530ba7784a77b4a40d9854f7b7eca1764c37dea54dc9acef8aff8148380c571143f9a13ce6eb83b078a542ef894dfaf62d738f65984fe5dfeb4a54b44ec156bd3f05838829a6c0b539f1b3a06db77a41ee509c509fe03facf6d99cfd0bc1b198ee3635a43e2fd17bf7848d538cb1891e36d7edaf8b03221d52b3436c9696ce6af994a0d84b0e20ca5b67ba510dc38f56ad0e6ac98341f6fca8e02f4918c717fb0727aa6c79cc136a0da120df1975f4b1fcfffce8b020240f9f694adcb8ddf213c1f83ca7eff01422b43aa948d85020f7cbb289523a2a121fe0557a6c9f5fc979cf0e3fd2d6028abcf83b3cd271db7bf0c12dfa5048e729f312aca943f4d503f6d8719935558addfe83abc0c70d9e6e64877a382a02ded155de77bea7e0c80852842a3418951174b1fa921f6dd3225f1ac5a12a289197730becbda1e18bbf40557d40f6c3bd1eb99d08f8400deceeb7db22a8b7921d9a75dee3863a391c4213c668bbc97df63a138953e60bee7f8bdf6f4699c9afcd7041966cda71f6bbd9e96ff0a4949068ecea3e8363685ab57f3d9eda7b47c8caa03dfb2ec22e62920d2a16bb023f423abca78541783f97b6543b30865718253cb2d3d4d24559c3c6653e8471ddb1dc9532b024352c78eea99140ecf134260e4a2e6aebff6cda62826a8d81bb3dd4a5a0d76ee30687fba7b6bfb39bc41a58cb1c9d69065e3e9987eca280d5412b8fe78432498c5c91b00a0765fe05a61296a3db873aee96c37e7a2c977d47aaaecae868ccaae5e153805fc10b88f24022c8e0af72446b500372826bd1eda09ecf6df2752bf7b83bd451ed0f3ab92a3a55d6c8bfe8ef4534075be8d1d739a8c795614bd2d99acb121c0dfd1778f9743bb0a9a43470a343e9d623f58530c727ca088c3ba95ef9e60f349ad70150b09aeb3d27bb3593c82e1878b0eeb06701e55230d70c1f407ed3d923e2c3f6474662f3033957ebd7c6ce68f6ec1e79014ea905162a045e098f5919f1cb091ee72395fb0ac8be7ec706eb8257bdcc0988153d8bc16e6d8e40963f77a73ff0a0b7b0fbaa5bba3915e8ee4d0da30d3f8784c0678d39898dd66efa4e9a4c25c1a43f535ba9fdf910d8c4e7bbb2e2c3c01c7bb6f0b38765ad5f1a234e2be864c55408757e9ff86b8bf0e25aff191dc797f0f75fa0a4b2e91451cc7907d184e641d6997f2d3555faf285caaddfe95c010c2a7f233e09c2fc0cd30d644035269280527ad72e131b8d8cbe054a24cba55967f39c6a9489c088db0d634cc3ffd950c9f134e749e0520ba2c41a97966602b7ef72d49c68cdb374ca28599956d6a20863da4e164845025e7cbf91fefc637a03edd0b221837ca3a8214c74b3c2628ba2973750cbf1e9346d62d6f3e51f691525a934bb61ad3f980b28a03e02ce4c9b07ad2dc3700e75f0209c31c6b6c821dc056bc779c5adbe9b87274d3eef443cda1dede62e6c65903c5f71f995d8bd32d68b7bb073b34da0b303657afce0ead951cd9e8a1927bfe322122b56e5b3c7460ca020183194538ee9682b50013e8acc07000a400c09e315a921106f40afad02842aa4273cd1882f449cc1f7d472eabc049c7731907a9bcfd974696d2d34391048124d041bd0b42ccc886f96fde2d352518a2e852ce2adb9bbf47d7735aa3118604164d856fb9f2c89147d5605f80c36f5b3776369a9e27a568796b6de795ec1d29e30ca76b910d88429325e731b5f0ff8fe99f3ce3702bbb316fa52b30988b4a810fb030271d1d8c4add7d7cfb292866352de5fe3f4d523d88af27239c37699ea810bab828da8d3518ab4e8a2276e423d998ccc3049225bcfc9c63efa0df2179ed8aae97e745e7134a611ba72e1bbec8ebaec643e9cb30aa0bdbedf7d50c2d6cefd1ee57f8ebb5b74eb3674ca48412b5f9d464f94564ed9514c227d4af5af7f81d7afc80c438639193f6a3f2fc4c7a8b72ae2b5bae0bc70ec60393fea6281bac050a7baaefb89b22c8cf7432bbd170a9e4907bd39a0c57678e04c4ee401002e924f4ce2ec1e8a6fb3b923a7459bf7fa1ce2ff8f98003094feb4a3d2c039f484ffbde8694e145218b9ae379406c630203add10545f67c77185c486f2077124630f80c1765c45a95443537a31f4a78a23ff228334173d50b615f83dd640135974cb811f329f1a56cb5b9036a799a4ccac7499a05647e9940ab6380fa7f3865b5f3aa84cc59ef92326084db11d7d26c0629f2baee377d55b16716c468da832f2cb64de8f56e14bd60d537235bc26962cee8abef7022f686d814d7c28afe87fe66052092f0df179382742e708ab1e5ad9f73d3bc1dcf80a91f45350fe363ad5fec70b12751355e9111de0947213eddc8f26be8b5599592391178ad00f49279c03a897e2a990950529963261bd1c198215231794fb60db1b3391fae5a511363cbeaaff6013ab3a34473b42372fed2cb635955040fa59045b400bab7506b6ef1df4764a73fa8dcbdd35b417fc12afaedfb5246f769cad5f497f2ca6697b5fdaa770b48005a85ed06ab9a8b99aac8925645e797e1e2784714eba9df2aa4c348043f90baafd6345d2429cc031f746a41baff83c841fe405c4d3b705971fc15e68575623cf42746a58cda5a386fd272817274b158a631b59df3e3f0d9eaf22051a4d50a5f7be23f6ea739ef9c092993ca2341eaa97d114a74af81a5d0e44b6501f8baf392a58b711109c4d6ce8a0e208433e3ba6b35116188e6a109cefc5c668fe7b3b8671f87ae253b07ca2040e4bb582ad68afe6cb6ad432fbe97249199a753f83bb35d386b2923a17f1431fc41c6be7ea6e6d39275902be126c89252a7a9e6b0df9ed59eba8484e3975f83eaa9d51fb5b158ab34d29cbba1963868adfae0b0980bb570a0da42d157fcf696ba81690456924ab5d262256af77941481207de5a144ca1beed5ed69194fc93dada6ce4f4d7c657a3d988ecc2594c7d911d53154bbc1eee00d2bcd23e212291c0d8c0eb79cfd9e9f5e8cb354a2d8c67d42e6107fe05fee4e70f88a84f631b8b091421ef0b95298c2c5ebdb17b0ab58a91c3c638f9786940e1e226db3df123e9e43b046212ce51b8a7c9b4c3cd6754405a8bd71ab699ea6c81f93bed8251f83912bbfce737e1def9f8a864eec9d9e5338ed5284fcdd0fed237c31c51d4ebf4e2f5055fd0d3661dbaaf7922b4f8b8e4debf3e4e2aa7b4131c83ce6caa8e4596820ba5b1c17dc1ba853cba9298c2aadfac5c359d4dccb9c3a5f679914a16f579a0d71ba73bbf9b21e410fb292cc0264216f649ba2ba5689cf8f0632ec317520aa9e7e584a1f148e051dcb95ac3699198c90de90946da36eba001f989a80801c607ae81fe96bb517258e053ac0f3793501d13a22f21d3ab4c15bbdb566b517b3864ab7f697c864b5463dc789152a2a2149da7f3803f1a4c4ad48e57097f8c34de2b5f3c49e5eaad02fd1186af50432442c52b5b910126804456ea1b177730a523e64a57344540ed0a9f301c5a6a91b0571e1e58f61a80ede5376f8604c4b772a60fed5ead2d2191d7c4b888271406dcee23016a13eda1fb99d07f3665fab8f3d102c89118f02511f7080b8899ef1ae0645e750d7efd022fdedca98a9f8b9dcf41896cbd0c50a403e4c3b96c275e6681463ae9b19bbb39f110967f1125f9de5b53fe3a20fba126ee3da232c153e442262042b004fecab1e5fb9850689db8032e94cbc17b6b8436274e0e1816b40366557ef098661c8df284ec7ccddf7b58a4cf908c830ad05c4a45b271c9daac4e2b85beeee363798784446f9e6804236e2ba4b3bb0f7dce9bebcfe777d89bc1270a3d6c78316baa39dfbaf1978f754a3b10449ac1b742cae5933c798ac4c877209ae30436f31d03377d4f2ed2d4813471eb35a25b2ae839abc8f1d5150eef52cd562d22a5a8c628e2e57753eaa7d6969524ee56c1dadcbf7105b676b1178ed87fb462244ee3159fde90ca1d39a9e3d50745d544b0379ea0b7c1c0faf99f156cca3e38959d0279bc8d07cde76a3b17645ad680e870c1bca1f295c7ce28d611a44f7bf7030ab7612370c2e95ed6dc0fe9025f87bebe19a517a3fa216cf98d020341c643d922527a492c5aa2c01a1d2bc790394033e2afe6966e577453d604750e73d5a5a47e6403b2022790d7ae7f0984870c50e478e4ff929436271f38dcd92a480272d1797ccbe2a4c229e20e6217a44931204cfb696e80c82eb02bac86bceb20d5520cae0d015f86b2d49bb476d4ab695034d9e4adb2057ca9a605ab928ec5a0d6c9927685628d2a6237512b1dcf0e69d20517cf124885242f8f39b070cd4e4a8f202f7d865df00258b89eecd77551cd4f27931537b0845138c24455a1f6f980571c202d70622c911edef1743455fa061002b8419e7887764de591f5c6aa3bd4d7041100e40d97792d10e55ba4ef7b96dd2d03feb71f0315e77fbf2b3f4599da778e7e9251bec50cfc04e70db9b06b120f1d128701f28bb29de738607c57a7e3c101c54c39f439df142172f4d3372cea1e4940851fb195dec9b28a301e6eca934c0481b90d5c6a51fddd15bb81f2559193383a6360da95fd0378111485e9966b610d30436c45eb2821be4bcc6650599af6705ccc55cc108fc39e897853567fdea8925d85a74f10a4283b91a1d0ffcd88c078140a9f04aa19829c4ff607440b5f9b2a65ea7ee68f6869db63d6524f15cd79b61cb88d12a72ce907c0f80220bd70b13bf60c239acbe76f244ed47adcb6fb9ac0c350b084bc3c4f57a908e47b0ab4735d6a4565da4aa3b09ccf16ab174575ac1ea46d99b93dca2e0254931ec1679d69f55f409633702fd6ab4127838d35ce16263c69b95ec0491d9e50412172789e0d9a21683524f0de39e6518164bd0c87717df7cf8fb3d85b9692287d9d3ca228c6c27d26d32d314162c48cbeef053e14369c63199d76ea54117449b2d25e78e02df4af26f0caa5fbe9cc4f2a83144f16edf80ad253066ad516cb308b61767136bba753c30e7be3601774057ec168b3e1f0275b8450f0fe513efd8961db030faef860f7a59cbf6e10a4426c060a611117f580e1aa17b5094ad28190d0af82b8bb5ca807291c03aa7ff8bddf6afe9bcb1b66bb19ae07c1103479fdf3424f8400de60e2fed81cf72d209d5cdc17fe77568ebc3c702aa1a3a7b0add93d414b758caa9db86b2d1ff86a84fa85ee879a9257c46e6b918a95eb4421d699bb5813d590827b7ec8b28595f72fa8ff8354436b236f05eeda5824f65a0a9cb619f14932d10872dc93e2ee3e377310f036e889606de11b3cd70e0f636dfd68c4b5a75c0ba2af2c286948ca7fb011db2e75cefd207bcd06bc04369590f46cb33c3ad4bccea9d90008955eaad9056e5ff0cc71ff19f1756102de4c582d91cb14830623fc0a3b3886e3b49effb88bfb37edb77c0fbb539cb297e1c9d797aaaaf53fa3ff8a3cfb203940437449bcd84acb8ba337bf93068563f1ab39944dc38eedd880d1f7d55e328fb4de9919545edfa3412c4f8f2faed1fd9697160ede50d966d44935b571d8e202a7c257defda42c57a4cf3deeefa104f7fd31e9b7c7f73ce8c959b55380ffb12a9fbb4b0b373ca3413ce86d5f518180ebac081f1f791b0bec1e3ebb42813712701305ed3e9f7ce7086024587103c4f831098630b68030d8f94974d212f113a87b985ea8e975096a15b4ffa99464efbd70bc38c90d6bdd2698d17864456f19c5959602288c7656aed1b1c6bb6a036653133a9c4294aa6477335cc61c4a49be0c66a2bcc6a801e927f4dd3618424dcd5ba0fb3d37ecba8b4d6131ea54a22f74df5734db1dbcb63557d79dba4abdc29929a2747803661aa60b9b076197dd6ee2d0efc2e9984af1cfd10289cfcd4d003e6f803cf94fa14959445923a8706ca66c63b8d364c0c3431d05fe07e31a7075417fc2cb1d871ed4f98a243d4b58c064862a2afcd911d628a17932ce90acb89026ed029571144f3c1b4f74baa6bb8907d476be95b315c421019d3914551e95ef6339982270a1a2fd3306c3026733272ecbdbfc448f573dba9204899facca88f19ae82c08b8a9ca76e532b7cae94a1b47c0ec6c7fca20a353e7219cb7044b1225227b06aea587265786659b6ac95ad5c1780a77ae003c859b8586faf0f80ab2288e54e08ab3d4371dbb12167873fff74a45d8b655adf564efd1a72ce404a3f94a53182223801b7d17d7ca916a75a3f030aeb9911d3fd5b1cf70049af6968158290537441f86c778f480f194b74ae15123373fa05b42680cc8c521ddbf4a3d4f331934eec53452bb322b19a8f560227a8063cd5c963226d65a65715d847c324f0703835acb1567b43f5ac5468b51f20cd6b9053e64ab9c9ef2c585a30cc90af80358c53087a650d49a8466e61f9cea6894ab59ce3cfb33d73069d136ae9d21aab68d5d088163b8ccc23c810ff8ad561e58bf4d7485cd770f71c6e690f08501079f15cd4b4eea09ed54e7a64ccd0fcfbe817952c9e58ee0b86561384a690d337f3b8698615685ceb6b11a38f4f340d199bd4e0c46b2bc0b5259cd38bb7e9233720a6440e32ed361c96548cbc101cce6604ab1dc73a3c1517ded6f8a7cb7a08b909a1349593e6f7d95eff7e1198f109872d84935d90f5b5d8b8ecc8ff69ad4a65b4928243c1b967c9ccfabfb66e1c84271e488bacf7bd68a1bcc68cbc19e9b0e22b62773f43d04e95e72d97d41a0308ecdedd4ddff6fcf51af04c8b05639703d976f759b2a19174e5b880509325105c7e742d211c161b25ea5e670f03d01d0bf19b3b70c36466a15f45dc311a16aa4a86eb1f4f8bdd80c0ba0efd5edde7e490d3a415069b13b69cae98278192753898ac489a1e56d5948e3106f7c1bc30545a26986c616136e82e78b94b8922cb240f979588d8a286bf56f8503e80c834d53093802aca3e56661f66ae2e91f39ed577f0dad0c39a776ae2b6f4b9e3287ad0dcc26336895afa97371f81bae02d79b3985e1d5a276330fbf814f84f32058bab245a4978e6dcaae33d4c3ad5c0f7e126398a680e4e2839dc61ba66eab486edd0d1043bd829eceeb2fb94df6977796096241bc2d47f0f1b73e54f4571b2d42aa5ab673f3e99b44f6c37a07a5d4edc7d6b1fba349401405d2a4b7c9ecb7416ca94792c60927f595479ba1712998d48c10df30fc4361de487685de878e24275530405faa3bc230686424ca2b0057ce4b2e568c17ca21b232194e13bdb9d64194f5d157a12a4cde16b2db4e95b8963d9da59457964c04324b418a01fd0e4212945067253b433c5128da3bc931b0d894ec1d254de8379dc10c75b623a5d9fc3cebe69e42e914f52c2740d2a49f879376cedb95b99e1b3300ee3c5ee348db6902f41ed32b3b2e1be19a6d1c7b2fbb5b55be8742351865785478fbe0eb66512d17556fa26891ed24f3ead595b772ba94b423a6d74af7b4e24e353ae8868ef99cdc785f88659dd084e5a110bae3f913e4149690a155bc77e5509b7fd25f13234ce4e574f1bcaf86d0394585187b3335ade9affb5d0fc72d160e14413adfa36cc1a315368ad8576e8b5150c92b07a1be66b5a84d56b3a852e8c948159e82a0447fa9902a904315f60ad04b435ef3d51cb30b47ed1afbf077c224af7359e2aa38fb6aeea7be777bcbf348ad9a40da4dbef75ce7713643000a56a2a2c1096a11b8a969795471fff94ec90cf0246d256c33c82d0f60252387890ac5daa5399387522e27d8b737570efcf09fab78305fc11999ee38406407d7825300bf9646f97b83ee1875269ae73d550e93481c3703dcbed132fa887f8a7074c3d5a9fade065ecc5dcde748f95af4f5776a4e66ed9c2fb2227dbeaed405f2eed1d752694b44a19a11ba9794ff1cd64ccfa7370ec0933a81f230fd2a1e14df4f016821683b2f048b9e611e71089741d97bbc8a7a6c837dbcc4ff5e909a318613d71aaf5e1a3fc81f5853e4839264d80a002cc1202dd769b11f2b2b68e4d687dbd76144d164f19ca3d3f57233490ff98d016a639691299f0d65571c198a9e751566ce9a58a7eed2d795e8501688f336a0d417fa4442d48e203c15893907d3be4f19d5086a5f820b19128ef693deb910040c97fdcf9f72a7a807c8fb3dc920c3e774f7277cf845b5e6de6bee31b6bc06152f7cd68f238e8bf35ce3fa9e6b00368cecb760070ec463df6df19f76ad96995291392d095b829ba0b0190fe159ec769e05985a9f0f68855125d292e92fb33a5af65f59d4c3e9671e85ca939d02601499340c7fbb76bc9afaaa6150ffb99c798ca341f567e94d7eeb626b3e2810e5911d1ca637d2d12b351a70306230e7dcc7664ca3883928093395ba8d5828f1f76c8813d82b8bab5ec45efbc24f0316eeb47646d67acf2cb7258c12a38a0622101768be24b32c71a1c936c199600cd33cc14b266d45a053d1e55cef303c462dca123d601e775ba0aec41046285db4b9516e436fda814339d3c376c4d5f76f718ffd84ce27d09fd4d0359a1de1807115c72c0d8790b63e4b57707827e743f899cc39dd4cc3674f6ab0be22ad6780e895087af802424ce804b74ccf7cf69a68031947856093a400feca9e58792cc781a38feb916441cdd6f28de8eb5886734449f1a73bbdfb0f4afd78769a05a3dcb2bde7ee682221a181a145b56a3f1956f3daefe95e997c0193d364d765d76f3912608b03fac064708e7d6932ba9521ce1d325e8e6c978943623cfa314a62d1551727f3bcb7c37cb343f383015aff223126fce7f6f43cc51d3c86a2f4c63c9cc94770bc993dbffcd248b00d71c9d1ad389776f6c3740d9227994d19c257c903fe19d73ff9dafa4756131f732495b +MD = 448eb7b0ac8065e403c918788d36478924a8567f3c38a5fd4745fd6c7f14c005cb826e80995cfd9fbcc922df876e4941 + +Len = 53752 +Msg = b976af260784e2bdfcbd2e2fe29350167e09532743155fb5c648d27672b0918a7dfea1b91ae4f1fdf1c17a40cc808a6693bd5d8e7a2aee9579320cdcfddcb04cddf18e978f61eac09ce3addd51dcb81cb7827804c641bbfdd65ec21356da97f7c099a146ccc3750ee56bef8fd96e823ed49ecc108f206df4c5131aa1e772ed93103cff503bd239f0b4a067dcccff8ed6d15a803a3d90ad832e9a3c10166e5b29b423d33d4355df6df1cb3e4f925787eb96febd0a385923b1f93b51e84d9588bf949643934b160e8e84349b6d933e13860bd2aa09e94376860e3e81aff3ae1d6098dc77dcbddb6f5a5523a7c0387cdaae181e70beb6164f0a55ebf3ef6f82c111a83f989f006daad94ce08acfe7d8856ba52936b108995546b78ad02f2bd91ddcac05ce657c94661352b26b22091cbcc59a3c256b489531411a623ff88e7ad8c88c7740b599174b114de37242070e26c5df9f6573dcd38a0368bc69d1002f9bdd30dd1717bfc002da27b9c9b647776c725c9a1d512e18099587e07642e9be0e24807f7a1356553376c67d9506331e36d5fa75758ea42f56fe61168dd3b2f0d8a465a49232c69f86ee147601bb32cd2bf49f7796b1a8df1846dca6d60dc18da266c59687fb7766a149f7ee325cab4af3d934e9a842a1eff776e2d77a777f5d13708a9b80f7d2722f8f592b5371085e378ca213d2caf7289d955af3a19a5427d4cc9afca5ac3d8ad6c821768a82b0d19f13cf3d3dd01152afab2b4072fca9b58c82df011fa421783efd3717ff180b6bd278a5af11dc5935d8c13f071627e4cde4983ff11667e70210368356dcba81f479c30bb075763698bedd7d8fb5a36f388418a416b17bf5f1f479ec7b46f17a333bfae88a91271044090acd2275f6b0be1309f5b6196ab50c91d05dcd67445ef1c12726838e765002624d170681aa11263a741a1a76bc8d1d9042bb95673b95f6b251ace494ec5c9871b04384ff47f83aa060fa8aeff7e7ea98d7ef1c6e5e870ab78162f5ca0f9dcedd3a3ae41853cfc0eed57f4daca52a3d5298e1a7a3369df578be30fd596a7b6e4ef3e26ef358fd81cbdc90add64dbedc668c79812e4a3d7e9c10fe4669825f3e6ee4246ab9ddea45e07b15f095780b8f7bbca0f13822d06fcc7fb41621e1af08e214e91f916bfed4d4bcf75f10ad7920392e3c3ee947bf8eaf143ab6a90ed592558b17d6a489a1f550a71c42707470554aec36b1684071a4eed6786e2a9137a56d5297d719bf3b72fc436de1dc5558f853fe7792de954d7830ce5785ccf33f08d270526a199534117f98d2837dd999cfff6ae62972cfbdd41e02bd45b6bb53852ded2fd7cc94f49b82ae34727b879ba3f33a6abd4d75277e5f7c93f41171dde226d215655943e3d7ac8e79f4fde8c63bda76ed97960ff53f9c44c2db049d44e86426ee5de92a6a8fa63f8b522b8283615a24560076268edf7d603142b8c8f05f90f1a107a3d2ef8917c950d42ee038db1b4e8d3e15415a26a9dac7705479490f513c16abb0c2dc8ea835b2c12e874f72c6fb79999ae8c1dcc9ba6eaf0139b7bf500e359137829766018a986352012eee0334045b2da32bc884060d45e78fa239356fe601619b8ad9c9d0e900c3d43f17790015caf8fb00b383c88b7b2d037243a767114256941bafa80f8fe1a98be8b5d16795302077a8656e07d299fc1d8fa64eff9e9d3df5b4af4850714e2bab938fb3716ad3d0a08ca6ecccc9e77b66612ad33e755a3e47bca34e9a778e71bea76ec5277dfc2efc123ea51e58add3655196de2d7ec183119b5165f689eba44c8c1ab290b6f26215a3f4420567322ba2c5b416d2a21931dbb881336b8fabecdba95b20b4fdff9573a8916b89debfaca6264a2437c7ac732e7dfd6001711770f568f9b89c3b69ef9c87dec7b3a59c7df8dd21af64d6c06f90518c95c01777592130bb214f5679971aaaa0ff8aa511c8215001605fb89e4d8c9cf57ab16a13cee86a6a03d53877b67577a2ba16c466b2a7e9b1df32538e36a7c701b6db5032f8d07cce0837c7ab733358aba160ebe265140ffbd3e591d7526b3878f247b21eff63cfafd67ced5cf7deb4825c6f03ce09ef29a5e57e59c3c85f5822d5fb791d0a29cbd515ac91d469fdf2f0924cf272c5c1a178bc079298c10b8fc608018b7841a9d8086ed09b59f2197cbdebfda216c211de3c0187269f64f8462e3261d277cd6b5f0f88eff234bab9b9b1118cf902286748b95b07fc20daade320fc213561d6f7c6b30d1180ade8651193a900e17d1e4b47b6738efc634ab2d0650d4b9b8083d677bca23e2c0ba5a6ec2d5e6241d1cc4643fdf0240eafdd9073c50fe6ee1afd8fd8f2f17fde981802b245d5b900445bdfa4547bd11a4ebace3607a7fb15786caa531ca2db7e9a6a03cba4b90d081ff39fd284bc9e08860bf480f57f91f8e2f7af4f045d5bf55ac231a012b06740aabb0d36555a92c0a0f58bb8553fb07f9fc6273470c90629204913975762ce902cdcb1368efeb62be3a21a48f08f6092f9029a69298ee403342631193a794ae0ef7e133bf94f102f993a29978e15aa1936d38e58f755fd6bdd82138f849ae31839c7bcae5cf6abb508e4400df77c95fc9f608d68a1c65a4a6485425ffd6fa22153e233f5809a8ca67ac9e812f26a2a237cd21e01f1880286115645f36da08ee185f5007a2de4bde83511a80e488870761550ca8bad44fd092c1ea4b19cd5af411629aca32a7b456582e30969c17d6fdeb103176e9ea154b9fd04e80352b50e2950a5beda41092c03a867928b25f12f419a138f138c480e80cc31985056e8b2827992be8638337aacf1c7cbdd3c8eb98916a7bae03fe03345e0cd3cff7117a432da17340ed8a33847a3283cc5cef9149c6ee71f3e7e12ccf082ff5c7a6beaea23bb5da9dce9016ebc07b56eaca2dd4864eafc46961286df68faef81280c088e3b648ba55733f422f36593e8fb81e05ec7d10eb74ec4e3779790c632711b1a97641ccaaee77d255ed305ed321833aa5daf6d44fbd05ad199648cacf8bd62c70e852c424ef4913c29462ee9d56d80e44d0304c799829cfa4fb735c85a74a7b8fa86dc1a0ce635e08c3429af5860303636abdfbf19ce5403a078d443e0feb394634e747b702632b98d833f68435b0a47218e4653041b4897958fb14412c44e0452c73c8c031a5070371cb53c1fc5d7c0159680abe0d0415c34e514f4792c3fb0cdd87c764c2b56ad8fe7d65272065f481baad7f0385707fa8760457b9c9f503fdf697b60d4c10e179fcce9d3c7866a883ab2914a9117621a96e98b000386475a8d63827321453e576eb435e6a3acc0287a97f7e075781a64676930ab3747eda8e1acd9d6bd1daf15048503b490e228cfe33f51db6be2f67f05c67aa5bf4c0ad2e22dc8b230b329f86a299b6515906c257e93e762fcbdc01475eab21623fb667f98ce972f006e74a8a7864520bb1c52d4527b009eae713ecac0bb1f26ecbec8580c788d74b7b557cec386490d08efa38167e0e6b70c66394aef230bfba1fcfa044511f3aadcf29b12c710ee55867126d6c6a8dfd49b05783b0a09bcc0ca1cc22c4b8211f8f88c081bba0b7e20bd0aa57b76bd341de5b4c54617547b9bf088e97827b42f8792eb6692a4613f953423e6187f052dbb71dce61320ee90b49aa7378fe08e957f32777d1e8df97add7322b354ea6a11d6c7e6a4492cbe433450e1731a7ef78b07619815687ebb761f0271d2d7bed32a957038c79044acdc439a9e67c00ad95847a5b6f5177e8f7d846a760b4a0327be21f33c17926fa0a2080146d92a8b1b45688939e6d4965dd534329b2855c25016a2d8595cf4b582deac0c41920009a59a929289b047cd0dc756e247ef9f02357a3fa8f65d611e3ad95644f85ae98d5f9fec4a0e1b172b879b1302e12ad1cbbe3120ea7de37fb3b1d82f2fd1f88d1d319b9f3830efedb8b399921bd39f9225d3856e2655b6f67bcd265f57353695c403d8d2e458f3707d7a09fcb484178b195cbc51e4e69e6f7e770a0d448ddaa987bd9caed7ecf04981c23278565c5964ae411ff0ad986392c598cb627c3fad707047305b9856ae1fcc755d2f88c32fc4ed6af67408d3cc065716b28589b577938689dc00affcf59b6779d248d2215f53dcc089047effa2743ddb079ef35500b9d16be7c6a5488d6559b8d9ecbcdeb2ba86291fc99684ad837dcd12d740890f8b5ad69bd401a03d24aa18ba43cf62f0a1f08e02ebd8cab5dc21d61a56fab86eb128b03e534b6ece806383bc749216e1af24d87891cc3a822630dd6943a849e3d243e3196a0c1909238be028a88e604c8d29edcae3fb3adb0ab3c945c7d3a63796b4557442ca09b3b22a17460649a9fbe307b7400aec338a30b184f70a023632a782f0970210a697d8490f5eb74d5ab458c61d212e278e553f32f5c633bd619baab59ac9d363587c3beeb2b8e222d940946f06b77635b105e03f04fc6a8d8f3c4a563d53dd4d87298324e79cb04e9067400a5c480b9d0662bade99e0d9f828db2d6cc07d47559b6759f09651495be5f0049d061d15e7f333761a9cb9a5889441fbff0b8f3a04fcfe655ca720d4d142a58732ec7ebb9ce242bbf8f5d0f9c53c365d1806d1dde012b64e6f035179360e4c72d0f6b225433a5532828d6dfb368681fabd998b59734657bc31902c6214b1ae6c800c037c64633582bf4ad7d363dbec7cf9ac04d545fea859ab37f8b4f293931e4916b7e887c5aa54b71558aad4a43d88d127857adca372cae4e1ff9a591cc32f33fc179035c87b5073d736a812473dc94ff2566fc29e7dbae474873ad0b4054846a66b9df5d4721dfa76baf4a42eb4e47af5bfdd7f5591cfb4dad9bcdfc322118bfcfb365051556454dc2cb712bf6a845a1908ec993276b15bf93d490eb1e33109e70e84cda7edcc8aefd418e564264ff84478c39a9cf309e1bbfa09e6e60d51c84deeaff43e02fea399f940a484b2ed5b5f588b0afbd27f4f065a23eeca6b18d118e1de4d7e5ca1a7c0e556d786d4078b53f06b6fb6d9baacc4a3bfaec5c42f2b2e303961d0c25e9f4ede8306d455459106888c5337d16300dc1e07af40df3dde7923e9b79afddd922a2defbad5fc4e746268163de581215436132178a185ebf3df0116d745d6c5883c1ac17af193cb3c4ed830b628b39dafbaca3592527ee1714a14e74a3a12bf896cec22cf90e063f2b11f0245682d7f19508a6c83b992c660a1a28597e07c729ea2ed39401aadbf9d7586b5720db86e9ae09dedd5408943c9ccf418469edb87cec6632f55f7c08645815571c57f1c123b5249e10f4e2affb3b252c7e0def6a522c0972b9690e161f2bdd45dc7272114038ed770ba4a3ea3263d03baec079675a078d1568c4bdaf8ad114aa2ff6b8f1cfb7c8fc15d9e8dd62a54511af281839e52d759d7be9172f27d650167f5b42dd12905b8fd80b1df41c8df820f7ab385c940c376d7b4cb70f86ba13fd5326bc4dc970f9b4bacebfc8b07c7dfc00d07649e7125717ef75f9db17ead4d143df61ce44d8381d467b4ac5df0f2b05632e4e7c4ede692f30eb7c1c6be71734b9ebffd92514ab0c03c74b65f89493df872b2d8e4bcec215f8139a4de33d6f8a3de2c2f8ead4a7136b093e338dcb4cdcf54dafda5e72166e9d94f0da2e6c2264384a7797f696d0b5e4d79fb91f11caa0360c21eb0746ca9ba9d60c5b9de1e43531897a50e8b9ac8619a8fc611ce671abb1ed305ac6eb431f955d395cd23d398fd236479e21db9ee671f3b0b617d7f661f17757942dae347cf8a124383bec86d672c75bea426b1c69765e69428064ad658d211411ac2e03364c2849785b6e40ab9bb343bfbaf6c981af3f9270f6fb2b18ed70d26db2d933ddf88915b7b1311b61c5808ba90bfd1ac1851da8dbec29e41e8afd3f02e24e4ad6961a1550cde36bab88c59010a5ec849b808f38edc07f5cc8fe1c967baaebbca29d71c4ee11e3a5eb4de90da129439b8229fabf11144a19babf5595228d300dd48716b0fa2db07ea38d7130b506a0c427f9e6980078389f66374ea7b1f9b9b2eedb8f45df61d84a66efd4b5c6be7292df78e970163cb9524dfe5e3a8480f74054132200385ed99da7cdba0970c1479c1b1f69c3dd025ad6f48d0aea24b3674aa6c6957c7f8522ecd8af67b82daf7e248d65ee0fcf497b91dc6bdb231cf19816495e50273f7552bc8c1d842e77e9b4d088d4ecb05772ca1778035571c7cbe847de42c87cd29fd781348085f8c9f05a34aff4fc52202e94dc59fbf052dfb2f663b82c8509e3752fef6480e3839e63fca5653e836193dd8a64f4ae4242af4740de79741c3adc85ca3b9e97337b8fa50ac74b2a286b3cf00925caa2b1cdc0e9363c84a1d4ac4852450a352bec2d0854030ec44041db86169fa36e71c560bf2964f28c4e64ca916b1eefdac7743482c173d05309663f09a1cc723283f387f4884b84d2d233125220b630f1e2621e999debd099fe0c1232320df6c951d2bffb7668880ac5d6000513b9921d154c47b749d973eb86b9d18a37d2c59573d9855e743a609691b43024d48767bed8894c6645ab3eda4be6098c33c95319627e5478123fa308de541f3bb3ae465994bf991121ff95d8a61736b2b64013e79647c9e2d0f6c3d4043c29a461aca26fd245ba626f351d893dd3c5982fd5ac6297bc321920de477a9be2ec094ef0f07429b22cb47dfa3a4e7b9252a70108712cef4249a59284a28f1ddee2d4dc19d509038b6c91de9d70aad7d95a59fa3706a8f5805cf296586963f2968a91a985b490e847f67511cd5520eb2f493b4c1fd15942ed08aabce8009bc2905fca37d3139e506e66f8b7d85c431dfa9bc5a6f165d06feec91876a21cb90652ded8f77076a3c4651a77216cfa83f8c1ee837b7a3880d51c1ac64414f23e2654946868fc5223ccd29d9afee9c455f41badff3a08cdfd0adb7a5ea5cf358dab2bfcd32cc54aa0d22d7cbea0dd2e4ba87e5683732b9aa789d3643c2c2f6b3a2d3f94b38369a4ad6cec146ca7c5bcd77e5074dab7612312ca6a64d947b3e7c5f505d8743d58049c0575111f7421d48bfe48854f67380bb15526f8c0790b5fb3cb2554bf9b2eef1f247eef61a67029dba0ad146c032e9925a28f9c8c40842775f7f485d02d4cd889425ffbbdbf4f1138fe248eab3b937fc25b0adc873ebcc3af0429e8607430357d07aee29e1f0d1f367f1560a751250429b73f156bb423d8a1880be8eb0087aa6cccd2208d5638c8569c1636cae451eace6f82e3844147cb0fec3123da42a18bdb0a603205e550911bed9d8d9075887812ec7cd37b76971f4cc92015b8cb1c7e3a58df93825cf30df8dc11b192755750b9a69341bbc49049da776f3af0fa66e61d30b6c1ad1d8e937ff0296f4b843cf905365cdacfabd1df5b9f65002d610f57f61a7c48c0b791c603c23b0325f2b7d598143ffb21acca4422a9a811c88f7438577ea69577bb9b1a36bacd09ac61466ae4a8c31f4c37f81cd22eaecc5ce6342bb3f5bc443c8a09048b42560f6950674d6d9c7cd3b9edd9cdec86ffac5505dd969de823b179b36a2974017c70c740a8e1b547c3a4f53eeddbc44b013e3b5ecf0d67fe7379d9b84cdd7370a6da409269cc3e434e0f889ba2db1bf35a0e8a619704b4813219b7191fa52c184ba88ff648717b07527fee84a72036187079dcaeb3f10618d5fdac465124e040f167ffccc355fe1ca77281aa596fb512db2c7ca6a466df3dd5b223d09fb142b32e950a8658fe39eb8383fc4d37fe1b8af07314d9e6daa268c7b3a84849fec5c769bc4ad377dea10c9d20c91dd17fdbd9670a2fc909d0e212129ec40dee41dbf6194a3b04ae8be5e84ad5426ca4496896954e17f47bce20d24ccfe1920b4f17e7d3cb55ca7b6a5b17131e22ea2f0f643b01bb77dcbb36e111dcb39b951f6aebe52fcc15655d1e83119c77d4f6d026314f42cec9e256bfa56959065c579929daa663a91495c1fcf0503d5ec3134622624bbf1488b5ccbce0414824ae8a06f0667445febdbc58aa156b7c5f87dfff8879a90d193ec78ba32422009afc8cf77312071d498b497f9a84bbefd69dbd4accd9ef834946882226d38438d5e0d0e9165fb7600607dda532a0d9fe707f2bd66425a7d8214a881eac80f04761d6063a5ec20dc4a0ade968270c3e2e9996bc10e2cf3a624db547dfa8befeb2db569d89c0cb82b1c607ed46dc296106de9ede88cd494fb80b1137e3afeff8118eecf745c0eebe9dd28069cfc67aeb0dabd213bc8826305ff5e8d8d9268684da08f3a3fce3ae0a0f42b1df417a9324a98deafc1aa7e884b09a96bb1ea1351d82d625442dad7c0d7cb316ce6a6ce4b670f143e831b0f2c56075b55f32a45e3a8282dc284692fb217c9029b79911f208ea7267687017e77ac5f3cf2593a474647f7b92f0d6188dfe7566551b5c0e4da47c8de01d7461490d77b14ebee0261a13d04ce41e6ac2b6fcfda2336a31c65a01ada02847bd016a05fc1abe7b76ada1c10b633a01630608957bd04f34a8be99b90455baa7989cfceca9bc98fbe5bfce14a74b2f5a5d76e550868d030b3f6baf23071b118db578643a270358b0abb0d1572a811e89c879ffc69414f94e4461ece82c6cc79a92482266ea8b882a37456e311b91920022a39a603b149c8e7615e570fad7373e9d70ca0b7ab1a1d926c1f71ae0f9246dfa7857a5c218574c431c2b45e8c70aea5586cd904e02303de8db0e7d11244013ce6cba1fef7cc3f819d910ef8cc89d3e48feaf8ddb19adc8fbd506e032af7fa20cf5343719de6d1288c158c63d6878aaf64ce26ca854952aee6482ecabf72d9934a64863b799bd3c0e894572911317a0dbf5f8a54c5f60b41efe14eb1397e459d3f4795e6f5b3ed52985796d1e4514c0688e64d02d76aaf53c060f63d00e3e647964596fa77f5c6e584a672e4b9ada8a2a7ab965d246de7e9411050f87c69659837a4b2fd692a078194c913e9f70f34ea04f68eec14c75b0d5a38816915d76a990aac1079321a572eb007a068053d9be5870f5c37103fb2c6f31fb41834f79c50f8a7d9f53a8d5ff5c0a942ea4dff839b193d2ac67e9e941df40e0f8e3f8fa4c7e7db34fae94bc7ddacf720f6361f9515a0ca1d22c7acab18454dba52a0682906c0914a0fa71b36ef5c3963142863785a05fc5fd254319cc2ce24deecbd4ad4136c1142bcdcc75432b8b732cc8b95d472311c185e8cf5122078dba3e500fd4df8d2a34589f015caaea9b9b6a7c87b53660b716f4fd6bfb33c29b930c4d0483bbdd98f7bff4bce406b1586162c45de9b3d7a458d2b9c59271dca07ae1194f447686b1c0ba555ba5d72e6677be46b8554ff68de9a7d458917cb440e4455b6c918036f941e0377a0caca02a40d55a23a27b5bc85bdca39182b4f7d131b169d8f5795cc3ddba217492f7b5385f30953c3bb665e821e9cdfce0ab05f615adfb10eab276c606b099f7e32 +MD = 448dd92317450a76fdf44702ed65dc9bab176be177a03c1b227eb7d7609d4c78a064f0e7ae4cdb81abef47622e68e17d + +Len = 54592 +Msg = 58fe2abf6a182c05ecd477ec20b981df572641c665f144d0524ffe6f52f45ea4f77ba57ca60777db482b327841078029a6b42861aae32af65ac00a288b1d6ce010cce135304c013457a9bae10b9de77922fb24fa324de1e54abcb643df31f6e609ba87f1f02ff19b8015b42f65c2df5733c2de9be47a9425880baac7387a263f4c0d3fb9cef86f952e38cb6b36c0904c41d3fe4ba8b1693c7e758dbc7d3e22723f8db094b2eea5acc6dba59c68dd21dfb4f42b13663988b492c2072b96c612074c01838a845ab967b1c4eacae262ba99f4ee0df9065b1a152eb9c21b6a5a1f86da335fa32c84d34e57bc43fd8c97850169894d08715f47e5b9246394e341717850e9ede892b41cea208a583e4ec3a79f7c8c93458d8d36ae9bc9959ee8c52f6518ecd5609e32bbc275f8d094102f4bfb93c186ba432c10f73b70fe42622c81d39904be133945d95fbccc5308ba24979e18eecf6e7c86fc4903e3468737bf904c3bf8500a49379e475fcf8ba134e8b30f71dc16691ee1232b5ae9167650c684576692344cb74e3104c4c91d6766c3c8d6085302b41286ad25a84916159589857d829812e16cd3bb1e5582b46239fffe7c431b3b5641bdc1bf56cced6eee4fb944f7d391d24f0d631b78c1f69b93e37c888cfb6a5792ce8782ca3a438944624b372e0b5a264746528597508b195eb66b824abc37c0ec0028f56d5bc26c7d0861db8d0815e53ec4afe319f51ce480c1f2f2e4264998399ccca1a7f61021838a24ba7d9169181bd1a3be66795105e34c3a61c40149e760ea9a0ce1d5d5b03c30bb5b6770fec6c6b3569de6a3d1836d9e6b575115deb54932bbc081beba1f92414e46b16b7df726b2ef08013d45660801ac5af32ab10bdcbc5745f17a66786c070704c54b8eb3251897871f0d54b79bbb25f4120769f001cf952197d183c3b1c80c1c09d7d803aa2b75a3a8dda77d0d15ffac1675af6da0b59ddedd8ab6064bcd8516e7d904ee9e35b2e30473e5c04857620a683c2b89a1b498032a6fa94b215e9b7bc617b97de77c75d09b97b78833c975976e24844cec15ae19e54604991bc275d10d5ba0b76e49e7f0d513c5deb6b361da91f563be692006a778d86ef921433da3266b61a41be32fce1baeb6c9b95c4d5c39766fe8011cc9354aed90711b271876780fa34cd79477efd32f3352240d62a3cf7051d19a531e4cc34d120cf1b730d46b110eb888a2e4dd675fe380df0ec839b9abb0811d0b2e734bbf9bcf8c3bad4467384bef1756a01f3d066f5bd3a7a6a661ef3501738d20324a0cd3c4d2fbb74fd44b02f96df8d33dbfec7eebe62024702d04885882211d1128fc64f2ac3e747b1a13dadf70d0a4bf53d8b93901c06c2187b1508e340e4d994d57f361024e0f53a1587ca80a253c2e6393c74c0dd0a340d6bf35ac709ed75122e52b1abd71ae5cd2e1905c2241c31256e6522cf098f45682f7e1b91d17e4c10d6eb124c3f07a201378bd04a06a60f19496ffe2946085eaf31ef9bd25c29b7277b93087fe139a26cde3aba66be93b55856e7875df707e8490ff28c16fe725ebc98f4e4c552136f669eb034d6d067dc5913565edbb0f08adc36114cbe3cea9b469b8b37aaf6478194d586dfe8d084eca20b26d530f874bebf40b65e669be5056c1fc0819f6228616e3f290c3b339d5eb9aae39aec31e6ec989c6c417e90142583723f53211a48875928115a3c7df3bb067f17106be1d99cceb5ad9684bdda64235f421cbe832a7bfc1cca3a7b243a7a1ef43bc63eaccf67e828f4be0779ba49d223835ef63130a7bda9ce3d55aad42479a6cc2ce2e72aa66b62dc287568266f066b7d8a36a91db3144b97d37a8643429d1332c4e7258e00cf0fbe866cedc11c36939b3f1e5f23f6967eb18d584b2a4cffa62a2ec9ec7bef996c26284c8efd09f92866ee0bc7f60acabfa5cb5d7ddbac27fbfcbaf9b056cb4124adbea2d05c90a4b65b078d780668178adf3e1872ea089c613509f4f5a13c5ca5bf99ee364248efca021c21e3d797136cd82617eed7bac3925d8c4a310dbb528bd64aad4540ab30bfd6ac57afdbf034d22b43ba26276b43ebf0c277f6eeb0b9237c515e61fa300e145338ad10a63bf25742e79ddd5b6283fa794cfccbb6c4f7293c4e8030c16fde63f23170daa8b2d268b9b23168d6690a3a617c47040850a2f97082a12628c3282b5e376142660d6b92fa13f35d3ac75d2843e0f55455fc3310c3ae3fb6a2c281e6d1bafd0c609414427e8d721efb05d3409b0b761112102e0b9011ca66c1f66203172c827d1aef6313c19f2c4299bd331fd15c47eeef44fa46806dcfbaf8c74f2c790cb0391797ee636dc9905c8955c3127173f93220033e5dff12be27d9cdbfaf71ebf4b4c9060cdddd8d3cc16c5829c505c2f88f66c350be76911431c7622a28bc4ade74b1b244cf8b6a8015954ccda408c9c45b261de7e48169706d544d15149299cbed64353cd511d208dda6ac253bf508eb19e06b4a6caa1c413f02b716efbf694ba342f74b7aeb64456e12ded6f95500eb6028441ec35b2a152b555896367d29ec2af090f72d8291b45b6c8d4978933233b25020db650f034ab6ceaa1975666c0bf8df6ac66971dad42a061003165a1d62950a99e6de40487075c1141728f5a04971720d4fbb23b0336e821f7a7ef442e66cba17e7ab995a24ccef3f25cdc55723395af0e99f32a2407d72f435ff0c133dbde113543974c8b640ab83bbd03ff117b4fcbe3a82092189fb3b46bc32fc3ed70d121493246d14c355887a5fdcd01e9578c9ada90021de8e4c4d7f83976f0650eebfb44ae8dcbeda90088b784020302b096477bb961719bc054c1712b8bf0a29b75c4ae1e36e374a749e5f9bb6aac656cb3f84e8b0536391aa9995e00376cac00b7a70dec07c0eb167dc3f308cca519752cd6dc6fb515cbd90c884820420c8c26f9caeb7fc90b59e0e24d2ed4f29526b14908accb3bb558e7c5b6b6f3747749f48355cf3f436bc7ecc0a83188a225950a51b646085dc0e82b1c4a30e19556eb519c7142943f893c2261ff848aa5fd6d678e0a338fe4db848d596c3e526c507b278e46cbe6830cc06a0c78b044c3c4b6af462afac797b032f5c34669aec20eff5d9ffbf29dd99d5bac083b3c1cc32378ccc23e231740e7fc4ba3fd385d5f3782db18b83f2107e416d09e71b07c6fc1bca54a6f37e9a528ea7741bc34c70b74098941a73bdbd588f8be164295cb8d47892225e4bda4901a0362e5a9e3548e6d9e4f61ed6d310d320a5fb8d57171e65ce82b9dc73dafc7654ff2d7eccf6dafc94815c1b55d8c75895399cb53cfd642a9e0a8f83d3f7412b2d6105eae8078373110c3aa259455d736db5599e3346269d579817f704c5a3ba9a1a5c4177ddfef4cfc41626599f2f9e0aa7c68ae2a7d2289bb9f7a88ebc908f1b7974f4e4e089cc31777319ef4cda330c9f481dc388f366dafe831aca529433320d0487c7b5d093d664d61f82e4c9fcd3fa72c94e7006e285c45eb0501e3b216e536f7c88c44fd63f3ac399aced9b461147bb1febd389063cb9ef2bb875d1e430db3a35b0a273fddc57a00ad5cdba991505a5743449f64c502dc8cf5bf004e61a02e955c7d6d9852e4a1ff5861ba4707fc2b678b049db4f70be502db32340c19a78e16f46b7ed06a59077ec464dd566b20d629fd849b46a0eea39c9767621e1328bd6c4b5ec2afce2b96c418edae9e64c242e5c24cffe369b1fda14ee6f04df62ea2df88dda1fd2662341b7d8494e69bec59e301e43353fa5eda5b2b3848616abe25b9d47183811907cbc91bb2f7f8b8a5026ae3d59d5efafc241053e4d02219e22e4056a0d0045020421719fe3f9a62f625c490a5a7cc1294c209f172f258a8a1a5be37f5f04e73b8814da0f1d59541e5ab372fdfb864e92d9c8e2b6b15cac20472799ef54b2729d470b3d7111fb0fe7d7a0ce90837ef28cf9ae62956a0410d117ebab42a49571a7ef791e7e986b541c37b8be5aa8e367682a45b14bbfd8531d2afc8a01b53a5efbdfe2ef7fe736ab1c196fb4c4c24fe7c4fa2331422935ed74feeed8b50cfda509a6dd330da4c99f77eb4a645776112e13d7cb75014ca94a78f246f9d5227bee41b2cc8ba047a08bb02bbd2f9b2ad394e551a2ff1180aee489a3797fda8c119544b2355bc046680a45695c88f85703a6b9e64e31eb7bb35637811add4da07b3472f3bc25e6377c85a8128d0307812dedf20431a007845319f3298f949715f5466d15a56caa814aa868b5e310414fbed53e39d1ebfe311aaa5ceb6c285f433c35938695a255ba7ecd07d1d3532e0942f6ef05c35828085681c575252b0ebeac9c76c51169a049757df5e4f22e365436bd94e66a871d80a32add253eff1deec2e5976f8d24e2c4cb35c36db413e29716b3b05a5bfb67209d20049a3e27056a1bab65d48d66c5a2ec8ee0da9da6cb687f53d1effc176d6e80ebcc3297356db7134862928691a17a55d3eeca1359494ebd287a05ef8dc8d11af8949cde9cbf3c46673e27fd580ea193cf3daab99df4907cac093a9aa0d1eea7d11e2778ef628021623913760c85bf22bb6e0af50755f42a490ffc8203411dd3ff9960fa80001930d3e3e375317f298f32f0595a07d5e032aa1eda2a277ef50bfec6d7d801006df136def67f69838735c055145d21fccb42298642177fe3fadc39070a95e4fc04ff058aeaf9070b4eb2de1cca72d8533bc55206d2ce9f2895b148da67c89e5b6496ba682f76bcaef69306a7fa4fbd41a838bdf0fab3e7b56c27a8c18dc4bf970364dff7427cdcc6f532b49712282370a718b7d5287bfc02c4abc35ccb2eab3777f5e0d8a27ff9ebe13e725aa0a0cd48aee1fa33ea6b4ea965ba42fcce7af3c528a6675cedf4969640f2ca73345dfd322620df9dcf16520195df8232061e2bc89c12de24838f255e7b1c17713ba435d5a351e263350198b3fb881b8ce0acb5aa58b7afaff184489d160703c5250829abbcf1ad34bac1a538fd40797e0c9b23f2d4f1765fb69852ea983ff9ef9f1e3b1cc98c9a72debae9f911a52675d85de93a977cacc4411fe6bf88437470f84adca15f9f34be0f71e97cef029d14e28987da26a5cd7e3faf76945cae0dc9cf0290f1f585f666cb6b265cdbf557dba9928259f90952ddf0ab74f18bdc208a91f9fa6711ed6a1da12b12e16f09f12a9c0d6b428513c77402b8846f9c5a4713cf856b794b420a431f2651d32e9cc392485ea52c5151b5c0e44b076714a50bf6063986b0e800516793d1457a814a79931d0ab26ff44f885523c780607b48c9b1a48abe969ec4d9fbbdd070700d8f7dbdb8962595d469c9914fd281f446b21ad748fd85a2c5fbfe8feb98653c39c83a6279857126883cf415a6e08e8afd7d79c752167e6e04124994ab9d86378ca14a31fe5d27aa66458252e77608ad061751025e4a0b40cf9445aa7c54760a7c97279ca591bb9a14f01ec9700772c2f6fc5b38dc1cbed38f1e7d11ec51972d90165d130da79f6e1ad903f9ef196f7556b8d2ab4a02fb8ed90d5a9b6a197c094dab5535a51365aece7cec549320513c9bb9620a36a153eb13ed5887841097363bc29a64fa7980c4c638327a2ac0ca713c9a83b6005c5a70f63b1176a8eb7b2cb0f8b7317c2e834898b770cb145f3dbbcfb8b23f55b871a8c672ffd966ee8a6563ba161bb8c6dfc29c6711d7de601d84bbb06816953a3bfb2b318e204cae6778ba8341942ec718ab67b3b020e787fc64870e2fdc5d460bf08ad3370bb8bf74cf2be0b42b4c93a06b8149b626ce1b5cd3b81e73e10c8084216be4a4dc397644d14e6f0851a0d1199b5f85ae5a00beb13ad58dded5216e16f654e232124d875a47886a98a7b9f3e6b378f4034b1dc69c3265c8cb194a6346f7cc68895e6357176a708fff8df6709a3c54114f7a73e76032cf5bc33dd60486ae38c3f501295a2ee27d2ba784e4dba69e876a0d58a185cfb498b341b352c6787230a10fbb0e24e31824ea2b1d13998e72696aa77635161d50486bd10a4f2d7eec3a7c53ec603be6a3fe27e4c6f13ec420a09fb8539d3ceb6e54f1fba339ae1c84bca24c05ee03abfe7f818f031c3fea519375ba61585ebc8754c22c2e90ccd3d44ddf72a7f61095801f736461d311636dd899182fe4fff333be68dd0cf30e37435470423326e755e1547a1f53e467c1ddd6567c2fc19541fc0852a8bebee6b96a67014547eefc4f9ac5021a699e87783a134a30e17cb30b38a92bf9c472facca1fc0ee656bcc3f504d797e0138005190b25f0e0d584edc17237315aaebd9ef39299f5cfd01ed2e8c802c7fad2277506b974c7068c688a0741392f45eddd67c0a4b7524c4493ad9d4cdd1ed535f33bd3dd86591c76a62c3f2e0562460270c9b660eaa0f644a9c8751bdce909af81ee02dfe1138d04ac48fb814266c57d1659475f9a6e5820cf9822bd78c302bf41f006490b72f2e70974aef366c95ece1c8ae5e94d16ec9983b1089a37395ad5b1d660916c13c87e4c13dbecf8f68c6611c324a679471def5487a93aaec86c935025b4518962884ac2cb04e66f7aa8e584b6860fb55b86c2b0a0873735dcd278bb525401f9ebaccd2beeac6830c26ebcf3c98c9d77d09194367014e872f306e641e0c21b241bc085e61354faf35a386cdd70aac83752d8d4449af4f6ccb7847c9255a115ae7f4df56fcd71170dde8065a04063288a4ec713697589bac976d59c1b255379ef82cfac47719335169be147eabd3836d710d6d2239455dcffdd64d54ad47bc06dc2a00afba43ded742ed5842b4bac6ba465a280f16bebb5b647cca8afe76c71afbb79a20ac9d398cd03d79ad070324f88a994b05180addda3428796c8d2b8163be9a701e376f6df77b7620c88df6c4aea4937d0c2673ecd3d4a0010142ad11688b9d29b14200a1a0ac5ff49a2cdacf64fe10672d283f10cfaeac0c520646a0b1cb866de1b699fe10c9c19e2bcdf96ca2ffd8b16f07b7705529163f65bf3c56c7e71ee6b77982acce3c64c5835999c4f10fb202dba92335edada5444457d85a31452d3a3a7403d2626b1012abb603fed896670277f7cb861fa220c3f7b462d5774f7b11738f649855c08d2caace7f43e0fcc05a4dd9f68c7471506384c022ee226ccf1468b3ec272ea1a2bd888754bb8faa82b26538ee6f7380fdcdf5615fceb903f2ea23c6e4a77578196a4dcbcc8d700678b1c5faf956a538eea95281639cc47ead3cacb19440b3acb8dd02812de208796900770960699001ed9ea1077481cc44c6b2095d44186ea548beaf91c0e1e16c1c47834b6bd2be44c054ecdbdba558bd05f344b13c5a31cb90b45ae2cdb382455a2defaa61b6b76730743ae5e02ff05134a86594c32c81865a680d5e9c7f736eeb5ac50d8c4001d405a6940dca481c68197872f023b6e83e6c82cfec746e3d4d97770d5b329526f10791013be317656a7e0c75aca221ed5b8fa9a9749fa8674c262ccd7e9ce0ae28fede895771c552bf290b75b0899519458b85a1df635479d15f200f5d12471fe0b1343449bd796ccfe21e7be42039f26428bfc213099afb460bfcdae0dbf20380e93c0bf90f5c390373ed8e30ae3602212eff11f9d8a37612f26737ef410ae1726e9e154faf9643c1a31fb67c7db4d1e264ec98791a97729ddc0a2c728ab7421d08015a34e44e1272395dfbb0d3dae510932f5e7c159e754f918cc451ff20ade97f0de38ef7ac2c7ffe4e66b4f9d0c81483706be813de0990d8970474e86eaa3e9a6bb74730d91b4eba9bfe7037bf0254fc56c8a75a82b5c87bd0f6c48dc8c18422c3de45d7fd674934ebccccd4cf193ac6897c9f32b0025f40e1a12735577b23e0bc6172343f96d736e7d6b11a27972da8b28fbae59076bdf0720d862a435f8399ff47b48fc8325f863726054ff004946c790adeba4c9b4a532a43cab2b3f60d183498f52fc0c34bed82c4b2bc51e6d9d885f4f5f809f96f30b24ad916cfc62724025d1c5d4ecf023370b69ea973c763b57f55e6e8f2169250b12a9d9ec1593a84119d11619ae0ec20aa06b35d7d2e9aca0e3599d22c7c1d7cd0ecfd91ae37af010a60bc83cd7d717cd8bcd72298a4e6e1db9df6fee2b3767ab797e039c1e6ec6395ae050b0f2ff90ea2def43eecb0afc08d94e5b33a4107120d3330dc1ff05b725990d440877cec9fae76f1faa0da5d30cd234e3a5cb0360e7bc9d4c3f3dd63f5ff0d116b5eefb2f7a78bb69eddaa58f9435119db71886d35a85fb43663336bb62e2ea4d4bb0db3de33262b72caa909e396262edea14f134e3d00b87c977cdd7b8ffa75c3c760581cfa4e38be905ed6b66faa758b138f8f22e1b1c8dfb83f200dca796c80aa6f0778a50bc5c95651283975e6d72af0cf4b793d7ccca5ee059c3486b372528bc229bcdc65badc450b683551e13a025f98ae1af868ac176055b9b76bb16d8392e227ae4665ff3f8513fc73aaa3885c897120cfbb7d507d37b7df60227a4759e95667178c127c3a3df14eb82935a78096e2095e2ec4a01f9ab376f55316e61db5a653be56751a15952ec4cf769e81b6ad73d290f8448544b2d2e63fa68e3416215b526d4b94bf17b651c87f38e6fc46f6ade12dc206e536a79b9706c1e9178e52fccbea13795489c8e2c18f171602779a179ffd3310aa3ba097f2124f2f79cb731128fe572cc2b3f26a17c8bd357a93c13a74c7f46cba9cc54c5d2af6684116aa22d071bfb3efdd5d7031f2cf4b4be0929cc955ac22ffa13f4441185e9d57b71fb82b0bf218c54f317c79d5f8615fa736c7046d04385f91360707a230d6a3f6fc5aa19499632b5095165638de7d9d2fd5438fd8a4b8c4b6d11b159114190c1b66919ad35b9a082ab1c730e429aaedc29596d05e33a91556390ad5acb1707d6d87e47e91e1c74623ae1670a282ed37a6a14a31c65a143aba965cadbdb0e2db3587dbb596d2f1cc84b48c7c38915063241fe718dac0001a2a0f97078ab8770fbc8efea7aad7218295eaafbd6efdda5a8438f3ef600e759fedcc454add72380147c3d6bd95985e509d790a9b0e6e93020e13f81d21eb7cb04df6edde7c862c99214eea5d1ebcb01ee689227fde8e84440ad97d0ae5001b3590b5182b2f9b5cc09158c2f00fec1fd4b64181cfa802b409bfb10b1e74f45c17ff304d99c059ce5cde09e7df2ecfb45a56c9aef532752b3776c429c19570473ce2901490f56a8c565188e091440e76980e4a3157458df2b777395f5b121ce38d81fcf57898739e9732fe356d18506e7725ec935fa8f210720a393554b19f38f2239d79b96f1f0a06c9926fdd743ea2dde5d65b73254d8d4f77ec34143ba24e54129b27bb4313da8a5d6d15471e7f1cb3943111fd824672350579e30377cc2e99941d88e6dbfa160d37b6af15dfbce4e27b243d648884c60efd09ca8a2fc6dfabf24b22a3017ac476a096c6ae7f9d0051e2d86810ffb091c1a7c3720f29376970744e80587b3beeadde35e17ac6c97ae710741969af71dc364bd062fc2ec8d5d2614e276f12e69b9939ba88e17ce95a8e4f21d9d75f70ae55315722b706212ab80372a14e8e23d424fb4d434b68a4a62de5072fc2d9550f06a1813baa79e97009a0e3745fb799a0356a189b +MD = ffca890eb8966eae11027fbd44c4d8ffcfa6c2ed18c1a0fadb42155ab3a578f76032ddbf89499f5e160b2c61385c6459 + +Len = 55432 +Msg = ed64ee6fbecc6442e3c197b2c0e72d155ef39772beb2fc9e6d4d72a459cb746ae3d7919235c4619fd6cebd597ba32f722122a869586271afe2f664097c6f5c35fc23ead09c2d4a7796b5952df17237fc9a6ca4dfb60747e0373dbb7ead2b3e515fcf63f19b1007134afe85f5c75c2efdf25cf39d80a9657995aae0cc94060207366362bcd9747fbb1b32f77ba869fabb5077fd685d50b3c223c639bbd808919fa66851faff619cb731d852853aa2847fdd472b0bf50519020a182f122239d161d9659773b4df454eb378fedc250eb490c053e34cf1cf7f8371292b9b19a2ab95f7e29cefa1f762c9c99b634812b5733822238ef5f9b7cd8b817f931c664a07822767c8366eb0dc709dc8e990a9a0a7bd2b4095ccb4c4eb6361a4d05eb039ce71927d830fc213998b5487f87e91d6396802315e9acbfec1533b204b29a078e6aa60ab3544452682621960f8d8735f1281d07e5326e56d38a234796b44de0e3975b87a469ba0f37f3d12dc5167f6441850bcb0db3aab1a369a763997791103ae1ac2711edd7b82796367826bf3c38c351cef4e5d9cc50ca48129e7398ee1602ce0a81825d27dd9561d41daae44813f502f91e04315da4b6ba0740cb84cf82c9d118ff7c4414f0200b3c86d8321d96651cfc9eef46d92e0713f802f7c7bfb6fe8f3a19761f399055d6d23c2505373081f45bf01d86c97d2a0a675d8ede39531f5cf067f66b102e857927b627ea3f62da4d99ca057da8e29df1c7a90734b6c7bacece637394132b5d56cf7d376d60bddc7d28854d97e22ee15eab7dd767d2854f5946848446bd274be41c09f9fb75921707aaaa4c621f9282c59554a5e3f72c5b80db439edf98a2bfc5afd4d600d890087172b18868bbbdf0baf7c5c935af2d5dda0f3929eb101e476ffd766239f4283f5f232388184111b9a34539d7d964f8c4c954ddcbe5de0a6147876714f362db1a053e88d20d4a3e5c132039484ba31f2ed34e99db5c3ce7abe0c01f64c9af1927181759ec942184468efb3c911904210a8c4f060eaac74665c04a07e8193372e50c600f3e598184177b48cc58ade27ed668f89aac7df7975d6a87d9058e9a78e2668b115dd9c4de3d6c9b60f596d8b910ddbdd05b32687ac1440bdb43863e8b9d9b0b18b17175c326e76582fe405140587f114f816474315ff148b7289cba3b753e628ddfdd0f03625039bae956d6a50ba19550c590b57b77d6c0d53b4e77f917a523e94f691aff8e4b7a613d36f367a909bc8c7e23a6b9a778f6bde1f80254e383c19376920417f94dca2e605d1208cf0be96b41a9c26c7d6c6ce9c335d3cf674ebe44ec0464fd31bb8b6b0955ccf8dc1cbe75869f8314580595e1358486d9216a8c56262cb81fd63930bf7ead8ec85ed0ae23d3818331c5f9042cdf707602805bbe4fab7777e0452b7c8466c0d1e7d5bc3b0eaedc2d5555ab2a3527663bcc32b6c6a9e2712eff0d26b162283c30e7bf33e78e7f2bfbff75809a8283f242a686f037fd61a637bcacaf61d1597c1648a9dc263bdadd7980a43db7ad9b8125121b9c74a2bf833cb9921a104a610d0c7af419999f388d10997027140ed4bf4daf5f101f424294a8665c1b4f45e56b8dff4c7094111e977b9a47d1323ea5f946ced00f9a44a15705536917714c3d1415560175b849f3a8f513c9c094b5a5bb8b00fccf78323256de01579318d5fea32d1fb1ad78926e2e27864479adfc4a9294d653e43b939bf08ce09612c86ba0755faceb6c4792e4938d726660f07b1b0afecf73e246d144d0ac81b31ae285a927079e0d46c7b3dd7591589e1b0eda8d81135cbb5e4c83a353c7552d1009ac9f14cf53a5d15b8ddf40cdb95a0c5b6318919cfeb89c9f135e1637eb62a6a058f8eb117e237085795081ad1538b968dd42b8d635fa41c108db74a8a4f22339132cf6787e24c8d81ed7b4c9eca8b6b981a2636982dec244fc821b84226a2a5653c1e35ec4282eb5e6eb568eb03868bff8ae3dc175f4b2bd47085744d429306aa35e2e4ef08c36c159f1f365f04653febadc84788fda877c70c4d4755abdb9f87a3823c373ef656cf091f80a3d711cf84093e3e910dea515125e0f9ff6a64b8251068056deb03f2b3321e0c5e847183f128ae8bdd99fb019a42a652f5861499ac03fb073818d188eaa485a339116ca25b927ef412a8c2cfc9eb071adf07d5894305a30a41cc4a609be7ba0ddc88ec76e9cd1842d943270306a96b1864f68ed2129dc8d52f0f55c1ef812712eef0d845c463e23dd97112e47b023a152d5a27ba4253d231abe9daf50efc327a1852175813dc46acbb3a6bbb4d80dcd9e23b878afbaf2ae65d63c2421fe0450c01b593f7ffbeaa5826a61ad0a7abba2c2aa19889643a36bcec84f3f14ab3c7915121336ab093780ac3be086baf0a3ad6ad954101a67b5f7b01555649b9ff20d2b29fdff84de217883a891bd48d25c59e141e6a38e8fa0dea43dcd394914bb794ca357feafe34ef9a320f3c526a84c44d0745fb775340a9d25b235318fd20f6a241eefc88ed10680a5359542f6eb09dab2d11dd060fd499fbf032bc1f230544c3c0cf3c1a3ffeea9f466e49b1c030ba802f8af62d433e472dab0ff8ef2b8209beefe228e81f86dd20b3570521898c8194b4b82f341807193034c4edd03e1fae5c752ea83ab331a956411a6ec7f04d5caf65a47162b5b679cb3259850c84659965fbbba5572386b60999c16eea1efab298ea55a20142d3cec84dd4a6ea24db33a128920588980e6d006353ecd33a1bea18ead3ab57e9e780ed2e3f3ab1460ae4d7a5bab2153a4f340546d9cfcb6d386ef70e2775add079f7037da128aa147815d1193b924630d374deea5a0118dfdaa5fdfd58e74a1f119ad1e103581db3af2c552d1e8f62a3229654f8de6902b788f7f15f6ee878ff37d321036cb2514e37932c896a90b3bac2002f186eefd31ecbcc9dde72627d98740ab98be41e900b96b01ed4277c7f9e3d1c37f1107bd13b2a8cc7206b3ca2114fa562207484201256edf2b65d3d0f761b51342ccef546372d9f38cd615e2f92510de46a22cc4a8cfeb172d915baab6be206ed70b04578395c6eb88e5cb06c4500aa0713f8de56a1176364e257db9ba51ca52b66bd54b06a405f0f0b6519a050e7e493c0fea28c78286d917c2988264b5095b6b6fd0835f160db04eb838415db8b244f1b3b01343ab936c14d95a99585073e5607784a51f7444b60d6bfd6110f76d004ccb7e1950e5326bbfda226307dc808d30137034aa47515eb7620f8dd132f527a7b7a2cf81d7da5493558e73f581b5bf44d4119691f7aa36d70aed2c1103e1079cf8dc8a58fbf1b319dc0d50a41889f82939e76f691db5bae6f714c042e2c74c970f79fe48ba1f03cdce1d6d95e983c467a5700392121a77519724ff0947fe43107c097fd39ac8c329bc4d3f3d7d29a05ab73a179f8d3ee8c16b8c1cb6bc2ca7b3cf19a37c26758db816fb5a1d5bf218acefa40003d7997b90f4b8cdeda7a8d6db6908fdc4e5abaff37ec622b80e53a9c8af5c414199c0cc5ac3496710a3195d01ea85d32040e1b656443c4d9ffce4b02876b17feb4c3b478947ac9cc236e4a6b1b3eee820d0ae4d6b17ac2f27b02be856e6420063576f79970250b364cba1408565c291391d67b1ac59b43c01b07f9ede7e8c773c53d3df2e73e46f9ad9c5b6d7609f62fb7fb4af94aad3189086766029900f48f8ba1ee49a2cb615b6f9c8763244e3d1ca700b73be5b9739669aa6b8b2db38fa0b029726748d744a5ba4200b20832e6238a6d2ca740c6f12f675672524a0a80ef5b5e32148267d71eb5172e22c9bdda8c88cb100603dc939c2af5e21d990bafc4b5c69417f885021089a27a7b10f7ff9fc8a1cb20d6034124d90e23b5c2c00567e6eb013a5138adc15d6b4a8484e93ea47377c5bd5f44e3109c2a9de26c31681f1555e2433689c07a5afb0706ce9a80e2b0d665a549a661a89dd0b86b3f65c1356a8a9dfb4e7e2383a8d91aca9512aba2a844159f3a32a3340188dc1ae564f9f10e149c2a4222be246e8de995825aa82c824b3d75daef91fcf3db71b50336f69b297b4598b97a79a5d5a0de323d7960c8677343edd3e51448994fdf0544e4a27be245020c5c903d4d049960676d77babe7f4390d0ca1c125f1b6e8ed24d74e4d962fc3a50d36bf0662300d6feba5d9d55f1438ce56a9d748aa2c0e6e4c9f1a3fcd127542ac5137c365c5eaabdce32f3d6e6fb9ff6586f231156cc50025e60c92d564fba63da91c706d53a436d4efea38985f432c93f9a063c5e1a32f6b4cb3db419fbd3c3bbecbb1db61c09d6e5c995b6f7b5ab28c5270452e232f5867439e7d943b30711102c3fc5288c64bf399cb1a563c674d9921d079d0c9d027b46b3afe4fc00be17805a3a445313bcf1f27edf9ef2b0f3a44f84f66302e2c09cd1407d1c6b68609bb47c96e35e387935b97807e8ccfa9253a464b8edec8996b3bee839cab9755566549d3aea71840351369111cc182cb8ac38c63783f31aee86b4b3cb360daf064007c20ea1b67ec30d10d1e592ffcfcc79b4b15a6d3f1e2fdf5caa1ba8909dd9f075f5fa4f52ae1f33ef406b82a86a3880bf2e09f2f71dc0845ed412686ac73740473de63e709c80897de78ce33b85638a02442c5b439d0b3d613a96bdc2b589f625a3bab436d14fd95fcd2effe2a8b55e25fbacf04c2877d40de290f1c0f035dbb62d5efaccd4f2e940fa3a1cc35c96c6cf5b6ff93a456c0f0cd6e94a8effa5b7a3e5ba585b2dd381c677998306286e88a86d5ebe357d52b8031e8711516a3f5293d3b7150b65586b994b317cd495a56d59386187645692959dc0548d34ba6d732ffe3b7b0303eb6e627eec4e552aa33d8ac4619bef5a926f80c637085c7696e41f6e2fd06c8ff351c919b143b06fd1c0e21a4443ff11bb0d543717c8f426216b0a2b7c5d6d91d8dd752367a10eec95bd0a41f4c7bc027539c21cde16225278d1993e086a2f9201da0fa4f8b1962a58feaa41576f4db529b9717c733a0e8302dd73aebd3fda1ad8103ea54bbb71b0834969235782dab23d560b5fbe7ce24027594083822395afc446ab2c4807c6067c67efeedb4a8d821bd835cea724c3124f0baac53e6088db2d46fe44d7dcbeb5ad20e5aaca0d8cac290799cf1679db80e2bd577ddb3cdc257bd6def2e08481447c3bf3600e14ffb8d1abdf6df3c452124835efb34000b91517bff3404b45363b5382c0178ea70f2e7a8bafad264d5050ea3c1b6d55f3463467c8e6350068052399bbf5d7320ee3978b70af99975cfcc32e9983b5025fac09d4bb5fd9e8341782b6af39a8e290a57b6e228a382f397ef27d16ce922f8a121dc75f0535e9f394e31226359386767a608a69e692d42cff654079a40dc4bda1f6a67b8150eceba4cb15e8919f06098cd0470d6cb06f7ca7a5dd8baf2ca940811edad87a33da666dc427bcf4d54a8e03520dd5c399e9729d39be1494f9c75bd91dcc3e99e499aa1a55b06b063b3b50076f448a935528560aa949dcfe7c0456d179e374866d13ffd10718be70dcbf96bead54f486ed1670157ee8aa93bc497893bc8644e8d52eafba60c77adabdbfa75397a6db42689a07e73f0247fbc17f0b446d1f746825d401ffea256aebe824ccecb2a0076fce9b64a774fe7cdf938c550f1515cdad64ec3cc52d9b554c64d44db288ab40b62803d07ea6460fe73b5a9f1a3bd017609a5ea937b08f02a539b972cca0304dbf7db991945c41c8bac0cf308d67b81a28d012907afb6a3a9d70ba83628295f731d5a5ef101e5771012ad5529122359dae0def39b99695c5dc0fbec79eb74406b438af341a74f0d06381534b4ef2af6a9959dfeb1a0a766b0b21af87a6c6a342f2afbfa6dce774af89ce3064eb628e4792bccaefc5dd77f4d2ab740ba2371c729041bd8f7bfe4bd41a1956e590f73afd413f968ee39aff27d8b7f59bbb93156039f791352242de07bf68ac16673b1b544de92c0d9cc675cdc64c1a7f1860f8d293d723e1f739931220c51a3e95b599135fc374b717eb43ae4373cbfee3292c9146ec5bda226dd3bce43788a745ed1d041ed356d37d90d092f833f06141731965fb3b226acc6607ccb4c7de979d6c0ded3323bba8f53e84418c9471f15cc827155ace5ed71daa950b377b0457c5b9d39745bb897fa87cc782a89e36f35cafbe6b0aacf96a3cc3e741165de32fe65cd5cafda1aaa0bed2011ff45a27b269b1462db4ddd96b52396335f875616628de7d4d03df04535ec89ade17cf2d75a9552724ff6ae822869273b186c96746b2c632eafe7d81e0b0e7fa88ba052e834723c918945a0cd601587e7b6864de15ad9c5b679681088eddb68ae58405132569a395d11ab52fd1ea12ec5c454bac1c40e9628d74f580a70dbeb0bc1ed6c5a3385ef1163a8338596a49241cc588bba39433ae2440e0d3716785d5d62f802b45dbdb46b09ccd0fb7a98490839121f1f2d005a7f4a14be835149562fc600c2c537aa2fd68e79b9c33ce4b9759512138501de4b5c4403da73a3c76bdf45981b2143f3c7c04c3f3c7140226a165ac8d7707a35a405ec5bef8ca05ae5086c1e7a4d150302d4cdadf78a46c9e16704b6f965d89eeb088d7d6c32b9ac7827c4147e9d2d506770ad1669729353a5f42d6ce7c9bf8296d0b1e8ef0a62149ba9d80a86b5ff747c10453900cec8483e2a3f4b313081791dfaf44ed6783c3ba62b0271211c0dd7a75030666bf358200085b4d2542ee0fb06f3beefc110aa7a4e17edd8dc33cb127facf92ef984c563939318a2cf193070e8379c6c2d483f68e9fcf4b22691c98d6b830a03480782ab6deef53d008402831852f74479935d701046a18d8eca9bc1017eed83b5d0223005d5b4f1a703d9aa3db26a093496973847819edb83228455c7fd0e10e19326b9e203e27110fd284ecef26f1afca67f19f63a272c824e45b4358a064b59a502a188d5f83bece470e9227f70fa206777ada2dce4e12aa24244c0a240836caa487f70e88092795e3621fed60a374e3e136be3e652a9ead2fcbfffd25769b8f76abc10a7f64564df0a51ba82a552d4bec4cd2fe2fad72134e76e4996a55ecd30dbe01e90d3a53dcb4020cbf1dccd625e1e59ed6f48098c6c94e8447bd4e2f7db2e73c12fa34242c789f7c9c01b177590828ab2c7b4a18ace87a666de4096e75ad4efcef0ef9d32483a4f2a69eab16cea93e80698db4f8aff3221275a82db0a3461cc8e7113268ab1f3af745bc63bd6e0c4ea6f6f26642b6317011c5d162feefc5792962ca86e9ab928912e1228073207981a3397207fea8eb8aeac727525f41718ca6c8029e600b25b8cbe299ab41cc37ff019cd43f326f699825e172a3db81937ec7828121d4b320efaab1e98c2d5a8fef4786e2b8e8f2f3c34b7d79fd7a97737614f60fb84e8acb5838b4daca42b3c979fe5f62172719d132e3020509456b599d168d740bd57a6d18fc54330e85bd2dc7ad8e1d07f8cc4a0f75d8de6e43e58d1b54af77c1716b505a7ef9beff006102fedc7ddb2e61f3a77f8967ccd57cee561756c5e2822a43ba44470c4146ba889249149364346d7631aca81697e6f96cfeb9a5357bf809ebf4fedef3858abb1823cedb387fc2213d2dbe594f0648c149cb2bc8690bc9154b46b1cb1852740cfbfeb5bcd4f6808731e6dd257ae2a4dc6b069247c7599d574bf78597e170acb4176b273ccf8f15a638a32f93fdf3a153bcf619abb92f1dd5d451a1c9b8a6d9bb56b14ce592132a863babdf2b4101e82d22e5e57ba653f099cc9a2ee904bda32a9e1a4b3e8349663023471375aed420728719213ff68ebfab1d1b53802d7eb408d9ec4ccf0bfb72abd6bff4faad33f22bd2dbf38010a83211ad1c39159baeb15dee70792193eff5ff3e5ba941a4e8065feb7383c45e69f0d566e50730b5184531c5eef8bb81ee983542635ad2fcb90316ba29fa964799a2ff2ebde659e583168d46aef1253ec00354c91e31361e6f92582645807b33ffef95efeefe1993b6cc7859f78de8332ddd64bdd553f470d25a2e190e3cfd8a6480a190be76f7257a10fbe613f38bc7fdce6e05d0eb945ca9049f7bcd57a3b590fc2af976777c04978a1dd5484d9661f7807889571f9f49be37b432cbf9f51a4b0c39125d282e98d5e1e60edfc0926be5988d31b2179c9fd79c74274d487c225d58d5c3bdb29849fcbd5e791f76064c8dc1b2e528fc13c5bddae7429e6fbf358d8706f4dc3c3f80d3c88eff52977a6cb7a1f18d02f68c25389a156c059447bca442d48d04efada323a77d86be4a76332de05111892c90260f84078bc9e09a1d6b3048767bf3691cb40533f7adb88309b627db5902c7a6300c3fc488337a42c2a7fa6997896ffb514e88b93b65092856191e954db8ee57abf574544c8b8ac711234740d8788becacb9d816382f64ee821f6c89d6f2ca2aff93cac0be193aaf74a6c0d3228e71c293bc9e52d852f15cf590b9bfdaf783a795aeea0fc524b08452f70d2c5b154608702182760218dafa1734af3d42104056d30e7b494bf614cd13dfd5536d533543aaae2b899ec7445051d2f40df78529c0227a267737d58f131e26c04e3e9163fda92c429393a859e709343037e09e686cebbb939f710a49dddd947827b816fbbdd5626e9dcb034146a8200cc1e4a322e2949969cce0dc69b3b7f0a2e6c22c230c961a58ad2d2024f5975f2fb5eddb82ab87dc51036e95171d1404e99143190371541aa8cea146297d3db9431ae28fad4e2a4cf24e027c7da45c96f2322526c574772b05050fbe786501f5edf9aa07ce53e7b1f5b484d8c0cff86f68d04f9b8e9d6715175c5fd13a354dddd7592f8b0b4325d2013eddf20b274e57f174a9c089758ca087da79c497768837a94258638ca54b78bff2f3128433c71635251bdcdb834f94fd8746e2b6af19cc0abd0dd67a01c36bd6daaf7f537bcb73deeb8d39af4f16b8206cac72c0686a64a3d0362dfde0f473effef983a187c33791cee71d2b624ad5999094bbdc29e2c71c86bcb13cc84658b264ba6496e0152af8d711d1774354b30ffce706337be9bc1ce485a7604421e1c616d86b590d2b14bb0df39dbc7a9a1a2bb68b9bede5e70c4bf47a5a90d9edd8d41c3de013966cbd827976c8229086d295c86ac231f0447f53bd8311f5111203837ccf0beb043fedf421809cd00c7fa2f4396bc3272269ddd9478913b773f82a7c4078330add0e6bb90ffa5fef76ec54f11275e5f806bcee889b72a9fd87081767701fa297ac40007a4bcd5aa65737ae335a7272cc21a67a05c0281befd6a891eb12ac9ebbf63d74dfdbdfd51e36c779631949b0cafd9048fbbe91b1b7e7415fb03006709e456c8f8fc91a187e9b047c2858e2e81b21e021109e97b37a423c4a5fd1176067203718331d656aef0e56812b1e2561e61500cdec6721686370ff1aa0fec6b53f1005d972dda7159918254e1373fa65546256143821161997f8f4971abefbb94d9c3f98f513ca5fa340d9ad895f493a8d8f4cbe9cd4600e4162828876199eb2ba4c4b1e63c6b591360fda6335ebfa29b8244892bf89e68f873710b75b1798e9ada8923365ff50f2790c913bbe1ef57afea9b4594a4890e491fe08ea72c1cfa64f397c9ea3c583cc95bf64fccd01227586a7f7dbe4174654883fd1ea631e2c31c7867229c4203665b1b0bc6d099a696279a679e03600f0289483d37fd53697d13e17da9a71185107f66802581bf3b388fe2ca230e80a76a9dc5076707012f9cfdc +MD = 20f6838e93f3db651735e3424cbda62c916bcfea96611d3354e90aac3c0fcb082f65d9c98e7a75ce1f1c72510a9e811b + +Len = 56272 +Msg = bb614f92974b55725d05458b9cf0cc6112e331b6cdc592b8905c717a78606fa1dfd4566081965da6dd34a895df010f37bb68206c1c8167277ee2eddad8b8fe2f7f162ff9478ca06aebfc7f86afa9cdd743916563ebfd3adbdd56e015ea3a4ebc61cfe2473157a5274d05d145550f90ab720507818261933c755f5212f60fe6b14ea87530861ff446ccf8a6ba195ddf1a106d0eb028d6fab20da64cb9445e4e740e48f29e900b162d307d06cd42b8438ce47083d72684f8a56fd2d5f21c500f6f6959607895449246413bfa661a4a4369b7b76ddec492147d618cf6a5c50db0092780c8a6def2f0f8c7db896de73b671a51e9d4ac4a28d7a2ac7cb6ba88bcb9a90f67310fb33bb9aa8904bccaf2b337057aafc02b0070c87d18491d19ad85b2b9ebb6a39d5b4a74c6505f9a6583d93c93fab13a422e8f6f746c9c33ab7c9124a0811527372045a9b3e4942b26e1d5fd2c989649d91bb054f0721c01563c0897c6992ac3c54855e1d90d4a77f656d002391d07f6d910f9005af0728e0337129193fda081301ca1a2a0932987bb28f2d42052ab48285592fa18af45e29bb3d59c6f741d695ee45277703ddb625fa062fa4bfc2b47af32a4ca94773e0604f97c3fc2c5498238e88fe5b1d40510c80649fc20e62efb56ef57f9340f050128512d03f4b9ced4a66f8176cb21529ae0a2ce6309d75d6d06d3d20e624141dbed02106e6d18516791c34fb126e967078dbb1ab66d9660a4a5273e9185d39a9d3d564f0a95aa7d44df2a221e2af7ef5fb99b547db4ecdea81c33c20a048eba4eff930f5fd536f7727aed2246401290aa4b88a54145a17f82543f8702493a46f61b027bf393866af9485476b0ce01f2f12bcb35888a7dec393493b501bb9fe99d78ebb85138607ce233a647e43e8dbe3c41ac2bddea48cdd5a377738dc284494c0096f1fe2d8dd534222dbc6bf67e9c917572afc5cdc9c95f8b32e930c6b30e0b9a4a4c83d9d51ef7fc2ffecc609c33faaf67ebca9bc989ded30d40712ff2e1e02e51f169a3ffff33abf5348fe2ae2c7ed7d10473bd10b55a6350a0d8660a6ad5a5f10938f5d51ff116c7873de67e2e25d5f925489966f4db234330eed1c350f1e573bc76361d273925ec1f5dd3d2e2f8912774d29893ee6afb2d193ad9e43b3cd71f31adcda0be11c0ae23771173f0fef3a31998225e4c0ed3588245e637d5bf633c916424268d83cf53bc140829ff40e4b43d23a090b6d0930a94956182c38172140324a2773c963a2411bb20bbb7c44aa308f978f1d3b6238c77b4b08eb08aeaedb074af5a7252e9694bf4c1f3c2940fb9a1a414494ccb6b26522a3d2342e3b510c0dcb398d7c0c56a91475397c5b8193b31acda60c814531f4d7d6f082193b9c55ae416f914e7b46e0c3d3e706b365274df9734fef09bc4c19237ad07f6a2e053a6154145d1d09fbfe35dea465918a0abd4ef89ea6c67a45246df61e669191004cdf69a44b5816fa33f2fbfe13a66ed27373b41ede380dd1b94fef26e21ff331ef7108abe69040a63483c2608b42620313104c4cffeef5564a21bc867c75c30ea4be97a7a95615a47250b85856f622111ead1795864bbf67598be4b990239efb0f20bd041e09e4696ff25451e1421d80f892aca4fbdeca6959f70e3cc7b9d58b814fef6dbf2c5b59afd10cf9c4b6c2d7337971e7eb38b4f0ddfb7f8c7da905349d748521074dd919948568ac6bb4a08841ba1deabec9ed8267f1ef253c61ac8ac66734ea80eefc1dc077edd660dc3518b5ecf709f10302925a72a3938e7449f2ae707506a67022dab63113242e9dff0d027aa3d22c8462a558165353ee615c009838ac21f281ebd4e8496f024f5a7cd9b9fb9adfcbceac3fd32564e2c6b96139161860b8ff84b590c91957ed2dc22d034ed8429f49323dc64e585edcc1dcd810caa8293828092e92eb39746144458e2e23b9317d3f5fa5dd3c07b78e4a5c4f0c08507c2c068fa55fc1123afb4d652e9efae6fe0618c752e92ebbf593daa8349f61b9c0010578c85bed4c121783917cea1709fed66fd9f37e98fd9f69fd51075f693c9b53cf54f61bc23f9042a15af7a41a9aba5aaf37d6120d452b9d2ce755b081616490aeb4bd23e2754c1901423d416801c6ff41419927ee1b1099d3cbae274cc0c2443e188be8b0759be73dc7ac36a1e78b50e087ab34cdf7e4dc9c8e5f481dc32aeaf7e0f0fecec91649a15bc3183ab4adebe78a8add3f542ef1e190078796f1050156be7aba9fe821bcf68f205aa4e1752cd0cac66584c835664d81255a2ac2f703e50187c0a64b64cd87c2327272f6978036b8dc8260bccea63ac247545bc1678f3d3ab685647b55d7efb577e4277c7ba273e53ba845ba213e33e3dbfa9c64dcefa9fa759d7ce05b8898a96f4434eba7f032c0623b9648f39ab35651b18f35ddc1b5a1436d32230c3c1d3e97071dbc9305ddeafed0e4d1ac4843aa471d86bcd0820adfae7936abee8ee7e57db16477c33fefb56ffcb3fcc1c36f503a9325525bccf3f62535fcf358ed733e91b78b95bf1ae2c014138612ba9890d89ac6ed9ee5ff2b953647f791f1c4599a619df5aefd23419ba9b9cdcc1d4452b3f60d421af594fc2d6013a8f03fc005896bd9552bf3f5a6988f541d7160331f62baeac52f011af03f212d93a6a95d019c1f0e1c8539ee6c574376d7bb09f1617577e3d973af1d923af80a4a1db4f7d8430980ae43458a1d4844969f01911bc35cbb9d016136097cb1531e3edde92ce40ea9e59d0e9d6533fc2137d5dd9c0ebf98e45adf706c6afa32d0ede45fbc68cf6f7eb16b1fa7fc4ad367ef0ea76136b0aa70c1c63988cea52feffddd2bb537f4d606689b2f0babbc7e7700cc17a74031221f565825318108190ed27bba5a26fee2cf6f9f852f10235ddd217076d4a7db601e7cf7bbed3e9d7ecbe0529421924806385b0aea88b5f9e208d5ae7d5fc9fa051cca37761253cfd195cbf44182165ac0efaf4fa7bf09baab9871d873cf43278198b2a9dc577d39a1fad9d33b123fc1a333c0e0451877e02afaaa80f2999fde55f0ca916712f7457079be61f9585af71dd3546f5b5bacf4e0add42a82553ca902d376b09edb7e8dcd80de42f4ab1475911cce3f52cf05835d207347ab78a5f218af4b79fc275f7d09aeadd8c5a0d8c7cd9e92f2b4092df601012c7ac67a6853f7f2bd4ff77d368dc561c1a5d4d03457f3c7470c078062d77cce54066bd0f049212c40b53943705a7138ae3cba9f93c0d4356efdc5cb50a210c68ead2422ea4c34da7a4c0a20b94dad91c80fef85937ccf475f4a575073d06da830c157d692d7a38bce77028b6de1cb0ba381dc18aff6459bac6464a6590cf3d1eed5af629665edaec1b8baea0ab16a14c54518df45c7e7a0dafe56435c9243e21d6c736d718183b1d8a38bc31c36fb3ba1cc1e3ff15c25d57f5ab49e0b1ace3740f84c4d90b5063387aa0dbd1edd0efecd8964b13f4d70c7ee1bf83cf10103600e0ba289907ad5b2634eb92e8f3e15bcbd0f74d98bf668f6cbb499a69aef83fab9191eb7dd4d72acd00406ade9b49023d4c0d72f63f16ec07cb731415520a055e693094ef3977d81725c7ea1baeb1e92b93ff41953c902d3958637b3dc6f19002b1c0ab5600356eebedaa9a07f3c01a7eeef643de7e7b5ae9ac415648d053e87db268b91aefb8f3309e0e020b341f9c1ca51afe37cc8079ff0d362e9e39d916b9b15145a2cfa96fd0811dab8d377577ef0092fc09ef479462c46a8aa7c82a219cf9a2d75867afeab2deff1cf7c56bb3de4687c5bdb077b2fc1904f2ca47ef1110d184f7a381736dbefddcddafa6a959d0c120dfb9d5b8dcb4532cee727ccfeefc801f2eebe39cffdc25db771fa2d671afb786d46726b41972bc0c07043173c1474f9a039956d3a9f4a02471ad819a016271e02c2e6d10711e9ac9c4e92c8292db861eff13a2c072eeb4e053c30a9f13d137576d757077eca1368eae8936a5679f6dd2a8c28f0a62b2aa37a6c8068aaee4511321a6f88f93e1d8814b4c16844a7b4bdf890ee55a8129ca50f0243e06db83063bcf28cd006dc7c8ca269b96c642576a6c27606b57d8395b54bc3e77b9a1969ff80063b773823b4d92c4dc7c13571b10a20c1eeaaa6ecba76a8f807c4b080564713bbf7e90db26b001af79911592b086a9bfb22bfa4bc8f4bbf351146518b89dcf08a4e9fe7f6e3a3e6ed89d71fafc14a8c882f3f078168b6f6f1906afda979239ef7ac26676fd3072896368d298e801c7b0f80d34fc9fb4ad8c411bd0558b8bd879a9cf6fc9b9ddc48880b9de725c9730fd7a406ddf49b69dd02f1b71917acfd32d99d9c27f8c885df499593d93411c083a7253432afedb68c54cce39974ea75394b2a706a05d786455151198007dd97aec470f60e4a56936f300fbd16eed5b80345d03e43513f602315ca797c2fa16ab9d613c691526a92ee1b46ce01e4133819800b30445984a5f12d6e3e1e29e1bc6d428a209c569e37917cee70fb030767f4505800dd8d3bca27feb8f1f68532ff11a0408e6fd555f3e1db835062ba46ea1c5d232a8f6ac94f4010371f85a009b54f65d37a8c4d464a67cd81e6c978461109ed1917ca80b197c1f865315c28da819f09bf8f823ce3bd9bb9869e9fdb898f35b686432f5d8946361dcfb1da7e19b659026117e21292dfe625fe02764275b7381017571e6fb4dd04f6d31b912e6bf635f664ae1c6ce803ef99449cbd4bbf2b89a038ae2825d8cec72a1bf910a835b38e4c46dc91aa57cc009a16d80555ba4e92ed66c2cd1e499de51e16c4c97a0b60fa7a640e026966bad19ed14ecf0efba2fc3e2e3f8db79bbcf7493ff93c126190e31758dcbf18a932cb2e005b7ac607cb1e38eb7eea9053ce76421410d91fbcc5d099a1a3583673e665be20a8a929432981544afb5426e624da8f1fa630e081725b77bafc4e517b2829c5be90da874240be26c94f6ae9e762ac86df13c4135428ec48216201e8037a9fdb36be7f8e89a33d06c2e58f67bbfa54dfbf041306b94bfb71616f2368c1703075258c08ad9db3769ad458421ef87e7be05bd1ae59056e1189e76e2362298b741a17842642d30403597a12137e11418a3f2216e688dd11b7084ff97252904ee3406931390cee176bb9309d84138b05e852ae4e5bf4b4a96462f79ba0b8ba1cf66ea70db16a236008307475145dea1e4ea15ce28f4b10c792207acf2f12fb88361b6d843fc937607155c21334eba2fd05d1ba7df0fa65eed8c745fe8defd9031add093f24c88ebb2fafb602761b4a44b63a436b21614871a0dde5c44dadd7302d0a269920e68db2ab94accd488b4467c8618444713e2d0272cad69adedb7a71e549222c8481d8f96dab32ce3caa25f8c4ddf99490df8813d72494fcb207375acc10a853e048e4f1fe59d49fb306635a24061fd5e0d3ee283661bd5477af925d49d715b9c49a363ed6370ecc5c0e910e7e806382e1a9c3a229089c5c90331ffc0722f6c8920441227dc93dbe884113a83cc3711623cfad34178fce6f8c4044b95c7ac80ae8f59a5f6d670df0d84c7fa9d755a52a27b40f309a7ddff7dc458507e254f5fb3a1ca6481db6ebfdcc7f4975d69d9c195e056e3a2a492d9ff0c1757a11382d03f5b7f97f172f545fc557e5aec321a27e47224eb33f7853c27a227a82619ad9dfac761866d246d3716364f8b7258874b373a9252e4291cef9d90728b36bf368c8eec56791e773e5ed1734d72166186f7343e8962dfc1c1bc08dede48f98e8666a0d247b72bf5d182d612625601d781f18688ef614947db6911925526960d05f2db821d89bd268c6bcc1e75815b41df02d320ae984d43d2bf5fb6be6e35c51bfae403be37fc91d8e05c9c6d394b2808f2c40cac4f103e0d869b510069003c3144665d14090fbe1eaa2e9634c7f91364890056d3cebdc0f6866c6c055c1dfcad9a079906461f35c491e913b1738e8a5b8f3006095c7a4ff4867b0eb492b48df9c26fbe7b38537f345d361ccc84321555cbfb2238426f756f506f3ff552ee757b8447d45d25d423d4d6bcb86d440c3dba060ab447c9c6b9cfaaf107b0e3f23e9daa37e49356c9a90ec424ef7cf94589f20804c31e36a4a37d5da96fcd8ee96fc6fae6f405135b9a49ee15c9e1ec048265999258a5d433bcdf313e7e359bfb915d3efd0f9ba4b27cec1d384f846572ae7b815c7ac4ea9b8b5eed593dce524f2bcc3c233a3d50f5da611935884eabb7979d87093163bf0499635ba1b281fa0ec57abd017fd3604d390faab37d2508fac5317541856a9c956c5441bfe737dd5fe8cf883fe5451ce1235e985a34f3c263bfa111ae7fc1c9768e9a685ae4d6416b1a336784747bccda1fb6aad3b79e221c0d5324f626508ed0879e981baf476f5ae60e2078355db85fb67fa9c60e0f704a37b175c1830033cbddc798a95273af53d1c87cc42fd428996e215eda3f2ff418c521ceb89cb7ff8e1a7c32aed541497e65c943106bc663afd2048eb854e5f6ac400df5827b5e3b42c5272ccf3e988404297a3d03ef1db2ca679104085418bd2e30dcb3c828de300e672f4fb69762a90da5413146c5bf5d12b72e877148b292c71bf6d032a91d231b87fc630be88600c06287e981f596acae4944de9b379abd9e8bc3146708055f90adf6307537ecd146e7b52b5b8588e6c7a53cd22f29b886dd07ab47104d7d2b9662857d9d8e7c64c7bc31c07c7f7f5584547c2bd527f434a9181630d47e6cce552c11142bf41e006a6a65708dea623f0edd6eb1343736112d446c985ca5bc91f49602bbc672baef5778b70236cf19ed8cc8792bf56466638e16154750c954bc9c25c03b160e3877b76e91401e358ba7279e0463bfb36c73f713790557f31c977463b35cc4d280e1b2d55af0ee24a2b507e5791f3b2e30898ec5009a192afc69a5d743e578c67a756f347adb4da5455e53283f2811dc9bed7bb313cd3f76dc7c5609d9a0d9f10f7a171359c9e4be5ceb34ecbe46e8c593e6e765186771dfa416b082db53905b253ad1fa5f825b79d0a4d1bb5e4068f201bdfa647931566e3c80dbc9b3c7450ca5fbc672f4cd59de87d1531c87e03a6acebbdb379cf0972a8c02fe66c7c49f0d78061d02807386f46abae198a1ec0635e025b366eb6fdb1c7de341e28112466584a3ff336b3d8bc361a7a4b6142d735c2146a97acc75cb4af56dcdc44878e31cb319948c1df0105355dfc3fe486b2ae67865e6faa9c90fbedde6ca9483bf1e3becb20395fe57bcad2cab67f8a66ed3dbccc9916ee9344e801e9760db9caf9ec816b475d6773938d8d053b82d94fd154407bbd35ef47e30969ec8b51ffa100cce1b6811d8ee5d2bdc271fdd247be298281083d453326f5f0a47c1f4eb05aa0f52e2160022cc8c3ec21b56ff65c4e3058fcf69bbd50bce80e400c943c42545505e5306693c7a8e199193424579d5c904812cb5b16ae7653e2ab029ca34c2a876f9567f75af5e2b63517629d8e7185b3c070faedd9c2efa3ee6412ab3c2449c2a2cd3cb4c02e22bc50aae54df37f3635628609d68f248562b1f9a1223f713e914feb23015bd6d55e6c5220b83f2d0a7f9ed07ca79f49d41abdea32944599757db77dbf7f96966726f8aba96ec9f16f1ce5cec7d392b9583662a44b93e7239ad289f37671f8d374a075f5e3c41c62d077d80f8fecf1e99e3060b650839ca5fb5a27faccaafb147a5574ef646abef7db1ad5e119464560f2a3089ee5f5ce77335f21e2366d35dfe4b065e6afc51a36eb906002089205961208eadc706cf53dbf6bf848585b11ac404bd97a2a65c6968e6326d0e232ab1f58dc87ed945bb9601c0b2bab86d716f01972402878cf3cad3ffd6adc1ababe5353986040a6448364b5b73c7a6663ce51dcde2a6fff63f4d17cd9dc92368ca7e88ec6f4843aa9dbd238ea9b335ba3a03806ea08cf32b677a9c182cc81ba4b003556d2b516d61e3b3f022fc874faf9251934205ba4c7494d9caa72eb290a584fc068563286ecf419e19e0164adb8f6d57bc10ba3af019eef30a44498f6cb56ff202fcbfd3303ce008088d9c04c1a0f29e64a26614c9629c4fc2b52568961a996cb19ae65c99f2e77824f439bde92b4aadf4beb24ebe96c7755cc36b44f61c29f27b2681ca93387f77d5dc937e3b779c0cd22d46f2b6ff96ee3e36c32c7405480cc86a37260555d08c830c524e9fce114468b6c9079be33241d2d6d427f81b1d43002cb177d692013f964d1f36fd76d1dc1d23e496548bc2f67e6b473d6aa8d11e8b3596c5f0373b187667a23d3db8035c583b3ea6c93f6f96acbcc376b2f28b26d14d8f193a8ca5a08c22826b47dccf4c83c5803fe24761a8c392f1dbb84274e13b3b447a9cd8685e3e4667c8032a5e35058a516987eabfb42bb5797365dfb4d92fc95cf0fe65abdaf59afb5d59ead89f46525a2da071b1424bed02479f13729616bd80834879979d1ae7e33132636510aee44292152461db8d02345d4f24d69e59e0573c625d542e13f5ca4c74de2b12a50ab2a1ce4bf40658bbb9bf5e5b097b5efa8a22355909154a8c56b709a3552c938a5261b32e954c15e13675b20033b58fd3c03da7b4dedb25742f79d7fa09e7e02dc9daad156a342a3c5685355b7bd25332a296a1b8fc070e74fe9ac82b6fc9f4bbc014a2479b460094bef9cdb30a5c11e1d7340cab8b216c566b23c37db15c37fcde187c0d510affb119d8645208db33a60820ced6b2b2a7e01d1baf3af42812b8cced21afb4098f5b0d2be17e9cd5204add60d1819a4127dbbd8a76a863b4ebb6319b7b75ebca195942f92c80eed44095fdfefbf46b56530ef279ff0f23882bbfb62b70a61fd50374624a2da0275ffb4e110136764c79954365ee32b95f2c3b9b03a4ea8c77b3b7741227cc256fffb93fc072695065335440bef4f7ed3d298112bf0ed06d1ceb9b21fc96f159ed3ae22eb3587ccbdf0bf9cea49036f2e50567eb92710a9235051942c8a28482ca9bdee492bb562de28aeab5bfccd711804b54f026d67f43eb8a98a11e506de92da7152904a4e1be953690bdb8afc2923680b0e7204419c866018004a4aa94d63fe8f0c4b11904c8219a53ae3741e0bd2e2ee2992bc4bf68cdf2383405b7e19028e5d57f4225a791ae3b9c4fe38b17d991dc54ceed5d596c48e52af9e77f3d610f262d205fcdb26263a3d1696594503086136d4e0e17d01c0163bd1af30b8e8f1c346170af1b0e8368595cc464657408365a95e037fa0ac01df35961d062be637996d737db16a13ce6e5a328890469aac939344e100ff0a0c71e6694268cb3254bd4f93d8ac654d505d0105d7c7b195e6638b25e405d6a04256b4c7c9f92571dbd772e4965341095eca0092ae4d26a6c35e078d970ec61335f6274e1e17b9093f406dd251467bbc6c4e0f8596a0f461b5fb8ec8647c5bb769e8b448b944f48ce1b0970973e673eaeb41544b0b53c94b40c49772f6eef62150a6f25416117661758084e688b3d8295e5c955f86e603c7f6319829a8c723c58ca9580cdf0dad2b6d38cdf60a5f06ec57e8393f83c8425c48db273904a5733860785bbf5e8a074f3b61c8b463188e985a8cc667ac8af39cbb29cb3d950a52ee9e8c84082f17134152641bae4da0edd1c8b2b3644b9e95fdbf85dab3d456414c796e5753bb556fa664d82d400458931d34e286b20b83a7f3e8a7fc284d19dcf693864c4ead956ae2c536741631d01cdf21a4b6dd46dab823a8e8a5f759d574617f7ce9455087a38b0607869d5087f99c1161da4287f434e182d04ecda519a6119fbaa4c45e8c9803a9a3eb51dae097d876b2579e6970bcc208e77d079956e08b66b805682214b6e122c408b05b9aa618e40eb52d45c09e499da6a731a0fdc23376fd919d45c08eb7f3c065453ce672d1cbef898bc77 +MD = 167ccf87f778593fbd6c6f7f2adeca9093f8be4606b57a457ef5e02063d5f0c6a45e66355d197157a6aa5eb6fab4e17a + +Len = 57112 +Msg = 132ec869a44e320f4ccd90a3bf1fd46514916b1ac93865a40827d5d528e57b85771fa0e237994208e66a71d2c369f9ef8de341388e8f7340d8c3dd2dcfe798c7e72b67cfaf75e1920f9dd3becddde07356836a9dbce9b682fba74a9780079a98ecbae4d715c959d54dce7d0fe863d01af8dbaef25b307490f83de4ba452dcb1f0d34e0a3707df0f82b63386e19e3130cfa51d5df744bf69257ec733f25417185d20123dbc878ef232ec5cc836a45ef70e44fa60b0d2284b1a11bbecd292cd5f1c389752625a49e80e05c01f5e271ad6e3f3cea1f319d65145d348e0d57d43f8c69349e2c90e84434c8909f6c89509430928069c2e5a4e3e5139eaba7b922f67e4b6b6596102c2a6a6eca6d9268c8eedb6583eb9d331f44494bc1dd4257fe44eef194940cae5899485b70340c86c2019a41ac385822f6d16a8e05ec8637516f04e419f1357155d7f616ecbc85ec271793ac65179aba11d27063d29f1d6301c0eaab6045ba61092c9d27a4cda3a0dd76ee3016520b04588f835390bface3f87fc5ced35742865de26517022f0eacce66d45525af5407b44fc9e5a714debd1cf4c0d6d8f176e93940756d6ca96f17e0316da2fbf71dcc0b5c6da17f6658fb5767004ad9d9fe91868df6b14c056eeafd1ee09f00f10d5947fc950f807dc5a5901fb0b23dd881862a120f6c0909b22c0c7456d49c67cdb84e786ab81321cbc1af65f6976cb6a8d10f17e9250b7ee4e5f57cf6ca381f05f10a1813239e1912599b81fa7fce3b1a791be3ab64ba2bab1ea07ee9083ae35c0a6123b8d88b2e43743ebbe5f5cb2f7f8638c07eb17edab0def5c156160c797a0d3de383604028061b7f5adf7ecb5981014df48a95bf519b2ddc8f667d14a90801859e9a4227cf025546a80fa43682c6f142c8f697e55913133d2e40c4bc3daeef219d2506a6eae02a7beb9eee7472f65eff84eb4058bac09900e70e736bfb13def8284d35274347a2076cb4e4edf1ba506b709016803c4bc60d02f51388ade0d6f486395611a0e0c6d073770f09c7bad070d40ea3c6a75ca34cc71f2b7d19bce0fc0113f1ccca539dbf4812f631bb9de5f5f78c6f90c29a36a57eb443b1085002f9df008ec089472fbc32ab22cb970b98e32233004756ae89016edbe38c414446d1692ab655a46585b07a6b194121aef0209d2be0542b3fa446e0bd94768e3fb46de7b9f0f3e554a681697965f9222bf595b09b971d09f68d5e1c82ddd7b5e953b5a1d5c50212bc9a1945fe8d5d612daf2aa3abab0cb87b4e2f6a5147177feb2b91dea4bceaf4476a5e56211ad3a85a27c8bd85a688ff75efa31252599eb4ed44eae8515d13539b1d3ae60b93c5bd5a6455474e10f8a88d76a15baf9bd51c96a7a6050230e5f760bb943be3809a69d66eba89316fc6796aed108f8d95227e8f5baf7ee0bec9a73f4d539ed26aba74764ee0cb544d593bb55bdaf417d0eea47f68eb9b128e252ddfda615700d88da6e10bae55df3119b515c9e6d272d3a2540fd744a3c028624fea6aa5ae94527bc7c0ad0b6efba46eb1333e1c73c926a457e7afa1e01415e9d6050607ebb660ec9eba3de160d02dc0f5b6c2641e42525e75aef8e99834dc2189dab46f55908b48f478c117718554774b475da61a05de36750dba061448057132117ec535475af791a14495ea42a1fb798e18cab03b529621abfedf9c79194397526cf1d30656613ddecb4313319db54732fab8280c37e53f31cb5c77ee9ffe824485dc77f305eec0d760093377cf0b7fdc0c59ca9f138b98462a65efd11f09b98fd16c6936f107e1330acf933fbf66e7335593dd1d71f0f49322e24a4721ce04dc588af0f8a212699bd27d7caff62f49e0dd4fabadd67c1bbfbbbbd17a2eb42dd3231f56619f7921b6befb34effbcc6b8aac767a78cc97d473fdd9cc92cd23fa1b3911e19870a2ce2dd931032856a715dacbee93a6daa9e857f12283b68783355da24adac69df73ba7280733829026117741a13e5e891a20129e7f3d0fe33da44067b08912aede2fcdb5660b2430b3260b1675c3c85f52424d0dd844c569b7106d8f2d35a52cc171478734d237beb51b3b5254690de6b916af4416deffa15a408b22a827a69f07cabca65bd1e2c394b9b1fe257955a6b766e14d1f54e5148efe432908a83e8d1802d41bc1504ec6b7c81522d03bc726b5f88a30ddeea149bc103daa37fe95805ce138ed5096a24f88100ec43cf78cee199553f337f358c84a3f20b01c71d2ff3b2f9024eeed07e66e5845ee53f5cb864d05e4a014ad351aa25394409f4b1e931db383c9859ba514d16a62a7fc7cad77b710e43e5e625dc62a144364a8d2a0c26a36bae2fce9a360190c0cf81fd65a47c17efcd6fc5bfb544c4ad2231f5081178a80dd7a3b1f2a53af07ebe7a549f981d216d36fd6e0354d6fbcec86ec0be817e55993962a856173f922a87f741eb3aa51a11211d4383338fa333793f84cfe4ce3898440b163714b6027ebc5759daf4ca8e860c4dead1e9d57775b54295aea3dedd7597fb80081604ddc5bc3900d16ee3eb06691dc851e04ed5001d1687fd572690cba5c27a5ba3c260ba180aeb80f197bc4cb7fb6095af62486d1119e01e774c1f04edde69a4466547a6504b5e4c354c7eb38975481fbfa64e0721cb12947ca5b4bbe0ddd27466640f24e588fda59278aec55e09e35289915278dfa8b3f1efca1e5b1f1f594e8c5513a048322e2fa1a2c90c9627d6c0a5a9f23c9b4128b9393f986d0931428540aee1c308d5843ceb6159f3d25d770c9c56b9ccf503054cf16cdf5c3fa232cafbd815e7a7f1747fc82aee1583296878c62df5a46d9cce4fa0d84fb312e0be8246671c989604934ad075d1dc390a0fa7bba6424d754cd813b008660c338b2a4d88e26250638d55308cb8b1d2547df11c05463c42acb1d74ba783bec201f02a8f6bc083a980fa3ec3658a1a72760391380b84200e645a305a0fd0b66f0ebe23ba4797fcfe8ee9b475e36058471e2984ae66f6ba1b3cb477b15155e98dda439a70a4cf3ae9ddca5aba9eb217caad5e3fc1700446f3b64f120404a9c488d53f13252bdcc9d60e2a9623f015c567a4102723ef337312318893a4a232d3fa800f125a1547265d9078fb247001ddc8b2fdcf481d1aab116eff7125a287945d7b121c8229a4dceaf533fe4e96eced482a65bc9082107b5baf223f099e2e922c2706962fa16c59f8bcea13f4fd5d6070aaf663bfc6bb506b728f61b2fd8e39d1044b13d545143a214819e0d9ebc9d3dc951e59085381c6cb69a56dd4392d07f6936e19f56d12d9df3731c9401ac8b3d6794c111ca0ea4ae5f4e2c7cfd991990774ce1d12820ed59cfac041e9e2c08d18d80e006f478b596594e614186742498df90991bf3c6e99e51353ff19dc47cbfe31e2bb72afbb7ea4da2db7406ab5b5f4c0af2c4df498b332115b45527fc4fd010758a6b95211273e250845da4c725ac64c1d21613333ae2e6544a94645de9ccbd8de66c5d712ef9c1624344894fe949cfbd2357b80b5d7148fbebf57b6eb27b916f2500a973744491dfff70ddcb11fc3606cbd0f55a5ea9f1117ebf94b713a535223170a1b04a1bfbd0a22ac7c4048e41a5b4c9f3a7a452869eea3bd9c1721150aef0046faf1947a73c13ba6fc12ac797a1c489d97a9734b2ab19b1701338888b1c4c0338f84a913c2b3a68fe4aeb6ee102e55ad05b9f161b3ef2688136ced28e732cb7271443be63a6ff7c9ce7af4dc6d0fe8200d324c269625daa35b09ab700bb7766618a6e99c3b34a3d7021de2aef14f64a90698efe451c42bdb30b06ff89fd175911e232e9055d03f4a37fe0ce03d6b7faa9a64593577689ea24ce7971d240f3d85da5f675d0a912e95c8a1d01ab1c28da7211b14946771b79b0825bd6838cf32a6d5a2406cda15f64c4c8fe8a8ff0313214323be7ba27deb27eae13f644e9ff996a892364a34cd3ad03c3e9335659ba49b69149375d8fbbddb7da0b99bb60ff6b7cbb5b57fbb2540b400347c2a960ab6881b745ffd4b69a41828faa8793f8dbe9ca7634a77ddccbc8a40e81002f0becd79d2b9508caa564270853588772ba7b5b7d45161bd0d1212a566efdb5916466de3175a31ae562ffd771b17d6301acc809bcad697d9d993c7a7eab25a97673ffc5651ed5fdcdf75599e42e81e1e7d8a83ab03895938b3d06ff464b60a3873fa0d362ad95782b6b4db58954cdcacc460438816d022643c46603d4d8156d6cd0325150aa4a54a7c7ce7289aac7e55afdc54956d418fd6c3643cc50daaecdcc2e9b87579d5b59e812c21a0cb8d8fc3705d1b657f640e2af9c87a3e3d7928c4f62c5bd9d0f324f975410f3390768d50b6612c7ae5ae09bb4fd19d0b55929729e73963b4d8836fe5b96a046391ee03a7f286fc3808962f12261e19bede7db466169f8488d8ecf2edddf5a5a3485a6f13a54cff4f8092caca2d0c74cb30a10d23f4cd22e85ab65a6c537267951c524c2e5f21ca03b64a894db53b32a314830dce1250b335f66602fbaa6ece9b865c17728083d1074213c7076f18d7e8c2ca32deffb8da040472991643594f392ede4d6aaa01a8cc9c9520a1ab33d90ef3bd18d10d73fbd52d726946ceb06df07e6f7a914c19b5b62e35128709faba880ff23c3ecc009d1bd9dc0ff7ad12af53ed761b60d74a8c768f7a1931fc0c00e67ffff992cbed326a9225f9c35ede87d60488ac63ec02916038eaa13d01b6209cdc3ced578d985023dec6c31464929be94c1daa04fad06915a2fd3702bba7ae3dad4f940771a08aea1854d8754edd30103cbb90ee743278096628671d7a4f1e2b5b9e6a2d2884272fe756c6608dfd08ed4ed8fd6ae8b742bdeaf2bdf7de1ad4f87faffc3312c1c957c4230960a2906ad30b0c4c14e8cd6d95b9f2882c47a98727720ab6a3a0c7e61427600de01d35fa63f9bc0976c4e33d435b9e62255769992aeb251619832511c7998460796e3c2c02836eb20b3da75629385cd87d7dd97f853385b6ef1a67b0f483169da706316441409ae23c83782cc9d8c4678f3b77ced8f3a305aee6ee682d8c8d11c385a457a2a9d6f6a566d445a7d55b7bf510d2fb78a4138ec369478bc50e5e69895d136aa937997bb0385a1535869892298e6989e6bd4dbee72201b07d9110f1530cfd11c76258fdf77868301594e256a714b9fec5b7c81264918b6a99bd2b75ab05cfe18fc2abe9e5b78d1aaa58ef15f83432ce781c0925e648631ebbdb34330be80a5e54d0f8bbf5764739767b157c877d627d90628765c6a71741568391c5f0244aecc905c600c12515010c53dbe6ef40c7808113c95e904e2666fc3eeaaaf23af0115ee9aa44b3547525ce7bc8e1aa3ee07bdcb8558ccdae0f141f75955e8caca87088e50be45674e60c5f6b52e922b83bc3f5b8a25cf9373fcd22b0286d19e9c26ec990618c2516f62911ab1089e36d480d8ead365b8d7a3706b8872a333482dc70b3644198a9bb141097a37830869e739cea0e9815050793354363016d66f8553ab8e932964ec1de3753fcf07976ec6d16aa453df5fa4fc2ed55cc44582bcadb015c87ab019ecb9311d9001fc12ed792ef41f99e9ad7b35493622b79affd6acc8910d821672448f13489656cb428d063ab4384406017e2a6dbeb1907b14678a81668531c4349ca772407955daeff777dbf118db9d2454e580b631d7528b144fc5de5712202a9b07344b608792e0d3d4fbf5e6e618dfa66e6b66ca15862a87047b3facaa931beab943b273725bdfc8238106cbeedef81ccb1716a2d07fba68b18bd2ab8386ce31c585bddca09eb27e6e556def7a57375d066b0ee493a5025e5cdcdf7d245f0c1731e4b3c099c1229ebc5f727912eb6612274e95b6e360cc120f58ae4915889d440747de4ae32ef7d016875c923e024be234aaf5404a18de2cd1e68638df6749614f95849f084bf9bb83b575618704b076376674ab4f350153ab6eb1720966d8160fb8eeea9082f0080bd1030f74595b75376a5b1f7b1ffd2fa3d9751e1beb110a51976451013aa35eb6c34fc38e6914883d9ef2c3543e9a69c40d1b649d60bde61c1a2dfce5dadb668d73a1a65b9da55750ea80c064fba0a913f3ea6d182ca45179299314c3cc60c897c941e0655bd58978364f3e33bcd6969a732c6114b78ef46eacdcc12477fa2bdcae7698340c6bc7bd6aa56447ea05d96076276817694376068b512a8f437137650889f64e1930b8286ecb5a2aeef51a6de225a8abaa8a8146ae3a788c988c9539c1c2233de8ec05c02a0949642e6e00caa16c4c57e22dba38fedfd2a3de14ed60bf694789e366558e86a6597b1438337e99447aa479f2cbe36187615d7dd2e6e3ecc689b8716851986becb1f9071a5c91b4f75a18d7a25c4fc07c4d41dd8b29c92e211254f9b8a1e8bf217a666ede230cd8cc163d640514850404bdd8670a5e1a6fc10ae5e51fec866c8edb48b34a2ff6ef0ad39b89e29c8c1368d9a881162cdf96ef98f19c65da78587bfd293d272957e0fabcb8ac029b6cd7f0cb3b94763b1f8bf3e402865214c86d2f0790743cb83793e4f61e372eba2e37e3b81909f334e23615179f0bae427e91f42206c053859ff010ac55902ca1d91a8bcbc84655bf307f9d595193400ca0ae10761289323796dfc504e321c4f7756a2e29d2b56483124ed2d19e86d11838abcc2a3c37a27725484c265250c0650b0e15fdbfbde7298f8bfda8114c29114d7070670c326bed5313ed3b2a87e792a1ee886d15c5a858b01e66052f4d109de8e544540be355402828f06bf12d002742f2cea15e376db97cef551182f24e6410f2901ac0b02819ac6f9ddd31a9d4cbf30231c2217afff4fbe612f491a1aa0fcd7f9be0b302ab1fe8d13cba71652b27be06f7f8e7f626b035ece4d5e4c3ee462774aecf6d42a7fbe33414293ac8cce2aae6696a3713a99533e715dc04c1e0b027b9110f75d6e554a5826e53133a81a5bf8acf419939524cfcc1eb33780149f6d4360cc753282ad337a192608423101806da71a495d0e77d9860afffc8edf0c037d4e71f909e4120a07bc87715ec42e286bf96bcb44031d010aea86b7dec9fb55679e940b3a2f1e2e8f658c04ffbdfac481f88b17df1f8eb6b91209c1e651c7d3b0e5b52449b01c118fc8964b9b9af1d52e48daa794c0479b1f35dbd33c230c1ee7c857cccf13a673774a58bdc8e79deaef4eecf2eb71c20eabba8f4446aa32975a9afe7d20b64794d45f25c3ee307966439f349269b0a881fd14969dac53d5cda7f21bbde5347a26359b900691e1fee7a99e340e961945a581d88467c3bc60325e5221f7830aa887f97419fe5a98a8efafe08dbfd6f833e9b86adb0b33405c55cc2fc3b290a56d3ace7d45f38ea101deb4fa843ec2f9edbf2f7ffd10618c34b8900f538784a142cef31b86bec4b784456740ca03e07afda6455c7d1fd4fc83cb386563eee56aa3b525d36e989328caa42547c1979617ce2f9894ed82041dc41e33c67741197e0a7dc549602950912f8b7d93fd627a4cf9cba7bd90df857c702200a6f036c75801895fc20dd9a37d3d5beea9f00cf386eb0ae13b3980cf7502672d8b81384595038863e1ca31f2497ea5d6fe2bffa8521c5de3a23a2e48a4156e18e88cbe3a91aacb603d17bad3826de9e51513a2ff3b28350d67053097960397614285310cfa41f2d31888ecbdb475a8976349af6eae7940ed0e3d2022b76783852e0d49331b737f4b189030175c40625c7d306d7d28a9d2011c44857074aba3031f776f5391a9c126c1c03d76e63897a2c75a75b1361498c805bdc9177a6a86497b760bd4d97f78f4989b6d62eed8c908e64a50915353d5c04efb737e150e9de6d66bb73d7f4f0742f1743851d29b670d3e6276a40cd249887c900d1af1126a69c4dae9f3efa2ec8080fd36ca4e1b021e5445504fdf3a446f032e0e848b107c20bb462caea715a93bbb98d1429db21abaac65862b26d657027707f0314f8333ca1e2fe7b43211bde305d9a0416e0b2170cb35809c904101d13cb04aa7bae531c4821ab3bb1d11ab04f4321c4d1b80b6cf2557c83a8804d569e8d9765e59a0e68e7b791919c4bff1100b34bddc42bd3b243f2ed56b9a9c322affc62bdba850d2a65edd7056c5571092bf440d65501b2f1e9d3d30d62471b892f628a396237f869ac0ba61f89b818a1b84f2737ee015232cb40552d0d21fd9304053a624678762ea35925685b3c9de08f0c2889f6f5587cd1809b4021000f49172e98becc102f80321f7d674ba8a8cf98736d53d5a36fd8e3ddcece06acfcb25024ccd75dc6cc6741a4d5a4bfc6e074bccb1b1df2d33d4de99d165d23ed6ad69731ff356263f5ebb83156a8205ceed9e15e5d70b74f6ae3cb099a77e28b02bed59b595e41b051157f0e27fad7337906f07259d28bde9fa2716983a3aa4d6b71f0ab01dc647289ec7f8372234a132a01d25037ced6478493c405f86ae4fc4df7d2a92037317444789ed85ca9e3c3a9d46d4020e90153c0bdaa242252f660525961ddddf5127d2bc2c5540f16090d9d87ab893cad72cafc290c1029e54941209e878e61a06e54e6d1dd40b3f123b7af207375b2a19274dfddd30f34ab45675fce2b06d3bfacc21caecce46fc39b8a86a9ac4aab4dc91812e3e56a6b2b529ab8f2358b5cdb368f755f7c886c13d84ecb2940514e3a80803c432c69f7edd9a1d2118c66247b73839beed374d26942cb25a916d2c4ef1d7206038f530079404557331adf5227cb653362bbefc84d41c83d30161534f40ab7172df572ad58f14eec60c63d0f68a6ffe8c41b4376483d0fbac62861c7d2ad1719c8480c271152843ba178ca82c46c175f1bdab605e19e6645733400a4107059b1dd6f6a962ccdaeecfd18ccd4c58576436fe2919da1cc9686402238f536ba47897352d42131c996a77d8f8c2cf35ae43ac91a1c650f30672434da52dfcdf2a74992d991f0a9ae021328c352b3d55129ec306a9e86b330a0c85845958c5c82429942eceb2c1ce3bbd8069d6690f3d30c03acba612815350b19b2494b246bd1e01f8c7328fd10d2899f1f050fecd549562445f2ab71bea86ec04dcfbace824749867756918a0fe233107ce496ef0419cff904fbc58c35ef92642ec02cb32a4c44740c7d6efca07b83d2242043c007ad3f2af0bbf79f02743fae5f02e7fbea489a9252d0077a4c053f8e1fa35e88666b6e5f111b88d3ae9d3c45e77f34cd4ba313875138a32d99e830eb76532f6eaabd243f7003c24fc0d453d3ce1d5a51d4c577fb119b8c3d118d1e92301afe9b5a0a2872145ceb3cc0804afd1cc6a3b10d178e989be308d13c5ad12a55df1237feb943a1060c4cc13608ea6dda6155127eff2003f6f66011a1b8105cee8ab4691e343d744cfd2d07abd6fbcb10d6b99fb0e6f4e72abedc26c810a4d001022c5943e2de92f015d635a75145bec40d177d2a35d3ea4021c33839c8562d9931c230f42beda4f93e8e74b0e18fef00edb7d7745285b43f095f6e7d4aec1bbbfebe16ba773451705f9eec50eea306cb60e0d317a7d2ee2f5df6f11bfc2e44715167321c2e79425c604ec40ee047aa2e4edb999a9a82401805d1e99b48e64dc21206ada2b8851ec528e625722044832f9df15285955c5103e8387d8695dae1b729e3aed47e208eb4a1ae360514623ad936672661ff29caf7f072d5624ad3a6567f465e3be6113a2fb2ee204e2568773101883cb440b152fd04c91abad19944a9fa77e55e5922c94143ed0ad6bb20e141e69bbd09c0bc921c0c83741391f464b883bd6ac54019e4ef3df41d233f502110cee7d0e5e612325cf1e90af7f2acae89036215f901bf3243864b80bf17c1dfa69fb59ed21c7ad9c5994305ed5c88c92760ac0f8106dc5c44073a5c32ad3bc20c434d4f57cabe2f60edd98c7e37525e9784e480e5b53809faa809d90268867249a0f70afd56a4de34d5f2c830ebd014e2555190ae789ae26e52ff1eb9af699865a0fbf74a29f58b493ad8e18ee0cb9411bd3d6563b6cc8ea7eb6554deecaddc692aa03fc8ab78e0a802d1fe1d7f0a852ca3ee2a8cd694 +MD = 2cbeca4e486b64fb5da9a808233dd441ac3a9b82d9289a5b06f6a9ad5a42fb5bc0e7ec2d1bad621c7b5242b4072ab993 + +Len = 57952 +Msg = fbadd60c0c18fba853312412a3d2d394b321a32b17b7dbd36f024304dfe7377dbfacf94093164cde3dce3ef4710945f66a688d2bdb1d91f92950e963d7c162d042ae540e8ef73096e0805912cdd7351c13178349870cef664f97e3015154a12ceb7b8f7de504d159a40f1d72a082cb8f18f42c8c04ca1da14b9fdce736ea1a1724da5195808557aef142341ed05331d6dfc831fc389f443283307a1b6cc9f51b5595425f47c2ea1e2fe2431e47928c79d25a39a10cd58ca2611265a7dd395bc0e4720be22302b030c6b7f578eb8707015774ed8468b31c784b0c46926f84748d3a3a5427fa8fd46c1e89ef36a67ac7f5d8dcf5ac35801d3cabe8c5e50cf1670abfb4c434b6af7c5a9f20dc605fb2f7ddbc5bf8215985b677e86c89a79bc75dbfdbaa04133dabd183b24462fcfe78bd426bb99fecbe0a10b06a613be0044f7d35f7e2bccc79cbfa6ebdbc29146a1441aa4dbe91144a56526f998e82992fd1f0f37926936550561fa32a51daaf8dceaca0ca3276a1e7b3a53cddbd07d90494dd81cb3c31e8ac966aab5fcb1dd64eed26a94adcf89c7c6731a09eb472a86be26d6853ec3f5c74d1010dc6f2999095bbd64f3585bd0cf1bb1d22443c6a0e4c01c72f7b0065ca90500c51c58df7e54a7ee519f3f56df92ef7924b371d97148f3a155eaa3e4a39e75bb400c666dedd567f7b8fecf4b16b1a63b7a1df1fa2c11cd57c7e477097b1633920a13043f7819f06be3a884a316b9f47b5aea50a331edb1a2616bc5cf33beb347abc6bedead80e5bd9a130be9400a4eab3faefa5f131b4513bae70cb07dd6892e7d9df2c5eea8bc5f24d4a1a82331295da0b26b9850490c1e2cecb847ba1c09c9181f4c7fcc0ff8d32c44024a50bcf90526bb30e969f55b344ff3551f68fdc9aa03b12886b6150fcc09078a5a290c42342a2fc6ccd08ed6f89c816f820aea4d43c90a13553d56858c5385c6424cad996d2366b9bd2493e3dd8b2d642a20600918b0709975e252de96845522bd1c2f7302cb167624c6a32655944ddf7249fd91bb828b276325889f9d23ec4c0517f043a759b578be471b02e360694df4d8215b8e97b049a777663ce2aab19ec4d09e9fcd87aa5dc41689fe2948061c1c6b69eb1478968cad688a2b19915b9776d698fbe7bd8b81e0c56e9c79e3bad6736435a4ef9d944d0f69530ea47030c2958a6ddc8863cf818ec44752579bee197463233d627f3017281a5f4c15bfd7acab7c8ba61222fcd948a392b465091631a9e8a1093fb6008791cc1d67efd8b6b2131d810d377389f588d3df371493d9db8e553d8cb9ba7c0ac71efbe68573647f76fdcc664acdfd62e9e58b5ed8c49f538c49575c72f5090d5283994c88e85761418dfc45de9acdadc65935903423dd564e259cecfe0e4e2bae9a740e6cd016040d5e6f2065828142a89f5c7fb93a2a402e8a6cb2ad5ea1d255b40ab0a3a306d434efb38a61edaeae2b387e81da6fecadb7d85542238eaa8dc260cbb7cfd9c06e42a257e86664ac5ca8a50a2b0a4dcafb74afd51fd2e6ceda7f31359833fcd91ec126dacef56010eacb758defeb4c1bb5ef616aa04e1f953506a5e6e69284a7824add9aa2716862b4ee1a7854dff3756972ad8487f7918429d32f4e074df9b2151a4746076cf618678b1467de6adc5e82b8e4c11b61d522258f4dd99ed8d48f63e9e43b626a91b85f4ce3cb011e5f4d9e3c979eef0f62e5c4757227f1c59d95db24450957ecb3b9289e2910416cf4a91858468c7772c34563304ca7c486cd7c0743ea2e3c55e4914fe924d633c945178d9661f8591e6ec79e3a2dd77baedca864d33418a4489ce731c8879b4cc5c91f6a918a80e874cdf2d21da6457bb05381705cb367043755116ab6c1ddf0e4e9174bb410b4ca18894dbb354650691dcabdb64af887f09495a6773e53fcb4a93d958d88a4e2626bf93e962b7eb6b8499aa3a32873f9de02e71cd3b9ce962c852f10cc89b7b83601c65c1f6abfb6ede65be9c36fa64b40e4c1fb0cd39228bcfb462f6531b994d95c491c937da9ff7e5676d6939b1fdabdccaeb78ef63f32ea9e1b28041b3b16b0ee29f6bede9deeee3c842090354156a92d15e8e6ac262349c006c11590acac5139c180edf83c13b1eafc2e45c8ab1d97888fe5805ff7a83f13a151064c9ec43eb1a8319d64e4ec7df4577620cfbdbe0d618563f8ac24004f0b637e72b971fcde08568f69af28f786db1e8ecda509a67f3a8ebacbfb2be9fe09d59fd731d6c4b38054f0cf3188c37121c9de88f31f756186147056e78fb3d0b1604ba0702daa53cc1c1c3a9684ced14ae1fc0f345f8958d6bf1b35dbcffc4b74abf86aeef72c334e245838389d780bc8ef5dace35a80c9aed711f5525d31e2d6012c92f8c3b8d688f64b44a2435da52e5a7a0e8a80ca4870f50b01d5b7e31b58185eb53803dec1ff1a5bec6e06fe11edabe7809472e439bfb15cd7f0708e796d5a154e27480c6a330900abf668b7f6796c1ccf8ba15d21fd648e041d17a261a83ed6da40f0d053a73adfefd5d949b774138037ea8c93a5bcb71502c60dbd887b4f29c60faeb8f2de28503476e8f1c9402ab8563ba536197ff1985085d33e4268f364ae0dc224ec4a79f82674186ec0701a3ba6f97ba311b9dc7e79d6f8a323f3d43e0ea5ebb2846e783e1237d80f21867a80a69e706912ecb04deb23fe9aa1ae5a1c44728bd07fdcdba8a44ca86160e5c40dd1b543f681ab157d211745734feb0d660bfe130d22f7ecbe392d29f403307f59b4b846ea02579482b80b7ddb835c66c1b19311c7125253e56d43ad358cd914eacc21f9b2098485f51c8b0821e054eeb5c1fc28acb27e89c49d4ad2a462521d37848ceccd0bb4925acb1064e4eb770d98d973981ca7cef6c2658d1adf283e00d68a5390b98d5a121a4026249309256c0154a410a556e633654294e63452ef683e2a0075f60307bdca2856b7cade025275c00802c54436c833b0fcd5525708abd4f02e0d11012fddc0c00caeeabe70897ca809eefb04431d943d1f6897b8fc44418936e6790c44fab4c3c26a713f12597c794445b4fb9dbc3d439700930d4cd9fa31b562bc88e9ad1c80128b0ce44a4afbb021a791aea91c6560de4dd2a87cd565a624325a1b706d4ea167810c328ae670e93c750f91e7c6c3116f90b53f0ebf2a42fdb5c0189ba3e1945bdcfd9e76b48280ff4e8d59fc43ccd1c589d925750fae84cc6d8d24adf96bc549ff6fac802d9713e484a94b390be93e7a89ace0324f6907fada1fa439c653d0cc88c0d129ba252e86c7d20a3087be93e920bf13d8e6f039138c063bc1a320335dd99f90e602c31d407895fb756fa38eabef7e24db6eca94a0e3cf3fc808576978926a80477fe77cbc2773b369fc3e9b4d366897bc5f5ea71d81d944df7e6fef97239013b08a18d95454e9b6a0e5f62617a61ce0fe3122ed03d6b2df5a7de032540ddecfd3c9bd9fa37166699c8550dbc5aee995037ccdd2de62fa53db7f4ede19c1751903a76c5c240d8860cf82d518c1c18d287eaaa5f517a71e66d50b124f62ef1183d2bb9b8b4099be20bc470959867e461fc23351c04a237d7cd999c102c9d722a4c37ed1a993a6762dd54a543a9e45c2ef70bf37d0d068b60a5bb3d1a4a91a26d05859952397b44eeccd154c2873a8722c0ca6ee8364d74693cdd1ca81ab48acab03e45ca5c723b6e1e63067afa126d239e872ec64520fbdadb28c22462ab312994897ae9caca53ca1c3141d3ca14171adb6bb9800326269bcac4b6f4eb21a073fa8fbe174a2995ea0e649035bee78cf0bd9d997c3808ff9551d880827dbcdd8e2a789cbca63807b73c237808a034d48b8d455624ac6d8eaeb88ca934e024f2646c6b9940a49eb317ed9783b436a2f8d5928d76df26fedacf4609b874db02e6dc08903f0c0d03a1f36be838a149daffb5169b83147063ebe1447735a937fec2dd45101586a811d834fc3d1f37a083f1125f97052d5043c9cafafea83abcbf8d516d13a3173f6e60c0e9bec1df0546d7d6b6aa82918f467d74b0c49a9132ee4f1fc6c0722798c241817a95a5ff3ecbb8e863fc84a8f5150ec5aef493156132112f9940091f7db6835ef6e7540114b99c30aeb492da495884a73bb4192e1134da692dbbf065b4f12f3ea7df544b4fb98b96dffa358f55b6e701a12cb644099cb2b5cc58b063051c4d0bd3a22f47b7728e023df8f32fdfd840ba2686f1bf1211a1fbbc3fd0803adfe3acc35b6c5b138dac5c11d35722b06696bc13e75208f43bb0234699d82319e1fb09bf3094f12db1ee8ca3b6e6d09007f2eeb079628577c3e615b28e51b66ccb9c0a0e492e70cb875a7a3bc72aa246635b384464a89f62514cb94845c2a0f944cf97facfc240b6b6fb0f212eaafe9c23d98219d0adbe7f8ce8f750e7b34989f59b98c9ead9c9b6e7d6319c14ee4d58ef74b475e4f74b941dc4b8119bac19e38608f5c4c1fa7293c2f5c9f6a17ff8436e35b7a1c810ac6aabe8e2d48a3678d19e1e96337dada514ee5fc075fce46525492371e5a5804bc9df5a5fe1dbd8ce19e5e6635e457aca02141cfc624ea5fec62847cb88a3cd8f7961241580b71b83840567458c42ea4725db356705be4b2aedb1a7add4e981df41d84eeef94686ffdaa3a922079c848545ecb1e8a5755d50648f4d000fa023a5eaedded193afa1aae36ab5e4157ad0ec2aee98668b9a63daf16841aa82ef3c483d47dea5971bf4ed66ff9271ff0457e59b8af2cb0056e52f5de5899575ff5330ff8f55544db1082e2d0d48b30d64a0d66268c8fe4ad16cb76fad2fa72ff7f0c5fb6c4cc5fd9a64d6fe3ae09086bf3428452f21e7b1327fdaf1693bcafa009c6ef887cae0effd904ea22e61f2b44099440d88066e7fa2a700a9c0b3e51c42dd96bd87d78d6b0315fde192d3c0dd0c5990821a7e7bfa486b91615ba1e0dee43ea213157bb4b8d47a4a820e3fe24a4efc766b8e91f66c4d53f5dfe10ca3880f44fbc2d9bf3d1f97479f4f49ac3f432c085d918b47c71bd8e794ecfbfd1562ea7909927aaa10e87505630eec22c10fce07adbdbaa9d65012b0d74f517b20b49e64344ba145165b953bfd889ea94ff85d80cdb5c2be0b52223524d28a8eabc5528de5b4f59735bf2071d785084ad14401fc27414d8f4f6b31fee43b4e3e9fde2f7d82961fa8565e3d2f58cdd20c303ce102222b002288e1679480534794e2475dbb75b9c680627e15fee827a3f85228261a263a8581a0fdeb7e5ee21b975d4803cf24e593283f68cf65ef5c23142050f7cc9b3584b47d07e644e8b07250f8294942f9e22da7d76494edd535fb6a82fb7da1eae5a4c109477f6f8584f5c59c31589b5a773e0510b98c1c0377d3026173e02079128eb22a04df869c274b002fa95862b16e6b4ad4b1de7ddfed52e2a3fe47d2b183ea8fca882d1197621d099ad97120658d5e7f0a92b395d25e211432e5da3dfa025f5ed0199299ddfb13e6c609c95bde9dbfac9aa532ee4591e8a0f470c3ebbd559529240036a5d6bad4a19a818b9e846535d76b32840f9e4f4e8cd3e62764604535f7ae8540bdea690942fd88dd6ebfaf690a6781d0804760fbe2b691312e4d9ae7d156efd96981ce59cfd968e755f741034c75d93fcaa68c98aa84b706d3ea1c52be0488283203b36d521567d2da94e4aaa67d84f974259bcdea27a1d1dba1931fc6a096569fd8deecd299cec686fe60061e68c825062a5441ac8697b8ccd9c6f5f112628a3968177f584de5eadf9d7dc0bf1ceeeb081f809df789e0e330f97e7d484234ed861c28ceeb19f3676fda03808e823d74036be788d418c67b8e6b835fd21854a7105ad88093e54265be1bb9ed9582ffe87f7651ab491b8fa86f969d42977d09df5f8bee3e5899180b52c968b0db057a6f02a886ad617a84915ae294cea0579cbdf91833af431dbe81b54dd87168f1f82f16694d38211ded5fd7b72facf490556a68676f7c5b597cf06f0dd1d74530bf53422170f193ed12396e7d37849b0e7c0e34e2694ca935998006731b8a79a817010f38b582bed03a48a89c75fd9ebb59d0e3f0ebc8339a5f5804e67d330c434a610316e593aaafafb40c7caec0047d34d9fff8bb98036e14a1f1cdc17a07e79f9da823c8cb6073b7a42386ad75d53e54511064a263219b01825392ad06717e5dda86c825d3e7029b40732039c31ae5025f9c9b68d193076e24b49c0a8052efcd43236bc5524746a3b286b31952da5a862b2d05d58b639ca2ae9b539f8fb22237fd097671f18926161fe4a816cb1d8528de4a0ab1399940e749911f36dc9affe333c04fef58b4893eb21365f8d6eb4e30a07c12c3833bdd831d1d68950e116e180bce60072ed05961909d54871a4d9de5984985d40f535abf51c79685ce20571fadbd0f831ce67dc8e40adc8a404a5a90ef3ccbac88e89fe30e1711cec4cea2404215c62ac9fcddbbd4e064cbefeb6d79ccda4c13940394377b964238972337c3f25cecc3de1d618188a95610d037bee858ad71d1dbab2103c1cb8f8bf027fef0e41ce817024ef16429ec19228b363525bb3ca0ad06e82e8e073e618e76e3e00f41dc24eede9975aadf3215c9c7f0bb771c0f4271bdc2a3217678210ad25ec3673025070f1905d59cd102b2cc2c6e3628a3afc0e3a7426804360035c8aba09141da7ef9445c9af98228e458f563b7907e7aa380cc6d6f657f6e5e078daab230e5676f62534f61c9a40b606f0a14d3afc2c673ecf3b75283da461bfd24779b8a9bfe80ab0599612e49a3ff5fd4e7cb7d3bb2a86b222cf1a85ce7be8154b96385abc73a3a22e3a30ebb1848901b82a6e03363c9641f7456bd4e79cffae418130b5ceb247872d42d534091c46ba7906cc2f0045e41b33889abf823d7d09d3eb203f892c7cdbc1509e32136f9563fb7250abbbbef69a6209058a20e5d6a47d04854c5e3a9a2ca4d3fa8a63071baad9fdaa0dcb00544c0d375ae9462e932aa79dee80c07545d6225d58816a7b400b7f1936c9b0d273ac9fa40941546038f8ddf7aa6142650684d45d56dbbc2488e2655565540f7deb3883cf7f16fe234e9b9aa2776276623295354463edbaab7cec1722d461298b117c642a4afe85f03a9f783ea408bf2570a3bfb31e3bf87892652f11f245a1828ce4bb34eb5c9e5f9350d12cdec89f07471cfe19d43af8044009f7934d8619fcb40df38feeb5a9b9cf6c3fed763698900c8d5af9248f2bd72c372b3754a6c5423d64a79bb39e2aa7754e3ef108b73e48576160c19d9d2679ad79147e962c65fb7f6531d8d87ab3a0fb8338f814def2a8ae35aa138de95a645a4c4dc9909b6e90f09c4cd7cbdfb72ee887d833192248298776915f94084a1fa92d51a8b25831ab478633091c31b7a9b2e877628405b15369a0a1164e5e78141098aabc99f76192daaf9efd381537b9e101a0e6f40dc0aecb4073d80b6066da271ad345b60d70f02064db14be0ea9d8098fdf30d7bef8a422d2640559b288ea6320460474fee23bcf6291fffc62a07c82cface0ad8dcbdc16d30c3eb7d970cd4b458d49753027ee2e053e0f91c59e2fe36d7476f3eeacaf0dcec6d4b42990eb55f703b53565c47fc2e949d41cbc055aa1d5d05439762da57e324e77cd477bccf9c163b813f45a79347b4feddbaa789554954b18eca8c147fe89ed88619793fadd1107c2bf603c62e937baad7d055a5862284f259bfb0a1ef5523e972fbe6bfd46827a75862decb557ab14a37f714d2c610b471ab5e16a82f907bc247610863cec72364116d20de90641d8503162a389c7baed68c8f0652c8036e0a0d3225542158cc5a5dfe0f2968b988044514e0fe90cb38c8043ac7c74114c469cc5886ba5881ea3244fef5d164e1ba6f04db7e4d2a681bef1c47a22e222d44898dba73bcf8ac4494ce5318010d457b6d49524c4cf3ba1ff4db9edfaff4b5b80f574033828b40a32604e6c1dfe94b93a61b619224722a0b7f4a27c6743e14e6a633d2103599a5cf93ed9f3793825cc9c382f097fc2f1ea9376fcb9ea288b196f4285850fda84290819166c44660e1e66c86e7a4fdb3ffbfc55470b1645bf692a13eba3c014281ae99f924ae200940b348302e014e853616d001ff45e03d4aa1567de01c6aeec9f0822cbf3e4807e3f50087aef6192e2976017c61a33eb9158abbeeb3385f35831fe43221bce7e230773b934dcb833442a600cf7c13a754c016779819d7099d15036914307024209100a25df4c7b621e87074023adc4398b10d3384fb4390b0e864b7d9d6a1284b6d57ddec8c33da7c829a061b8248390c513796b842c21bf6640a7689fa991aea2b459349fb5716ce7aed5d243b9db238085b493ed49dd2f6f1bd4f2d849e238635926c7a2b7b939e373122244f24d5a53f43f31e9b1cde38f844e9cc5bf96ba6f206128902e77974212efc24a525cbda5cb53d5e7e866744df68ee6e69f219d2ca682a7d6ae2efd8a0ab942b25e8bb5fc97ace08642594a310f1031b95d0569325825f5f4ab61d531c729141b7b4cebdec5a5023373f8edcf1a7d2dcc7dd496f6b1a563689a92c6cfd499c6e43d32b7b2f1c68b8de1d7d77ec5103b8e75f1bf004f9ba0a110444acabf95dbbb18bfc21f98ac0ce410788fc68b93eb8de9ff39e59e731e4c90f8c9a8f4a7b2fe9256638b16a006d4844d7f4cda52ae392e5fa00d0ac63cb99112dbe0f039fd3d4e89347c185d09ddb1e93e782de6f41ec79579ed20ffac769544fa094ee70ad581eabd690a3d667e2dbe45bf12cb6dad4a23300c8d99be0211e18c987d197c85e0dd56d868cbdd245c4f1da8156a7b733a9b6af18d2f01faab8b3c04e75bb29cfff3a950b072be7ec21e3eb9a26e9dfefd607322cc2a18bea6a460d53a285da913a02d587ddc9adbf3ae117a462255af2714f116a71562cca7bfa39fc1f9ce28e0754b662d63e2ca75614e407d3023122c2b5d53ca7b60b3235f6cbb3b6aa49acad58bf04ba326c8abfa4dc2c41296b69116205092b692f0bde634bdf2d5417d5763878d6514f7652bbb88779744110aea57e2938c618a13bbf6841e74d4455f0a819693e633a51e593786c5733f329d9c730c933406b67ac202e3635de220be58c261ba5b79e052d8f0d132f47e7bcd1bfa06e6161098b4449dcb230a8953f9c6a84157416219b10f69f046779c4d480d5f79f2af09b14ed819b3b407246fbfc8a5edf11486b1a781255c8698f3276cd515de5f6b7c80b8e11935bcd06dd46ef33da02e615258a4c2958e69b51dbaca07af9c72d7c39770f41eb993f2a01295dae20055945f7f37484d0e66789647de199f4cd370895605759cc7dffa75aaa2c445970d49f885ed76be45134fd78f278f6757f7d2385cf50a15d90734591d4453aadccbeec81d25f25bcad6976bd114ed9a5666594b1cae161c75904cb4eac90db439f7ff48958f3fc818570bcdbe4498aac095825c05cf2e031611a03383cf56e44747f7f49f77b365b5eb0977b735250b1f0bf9c5b8a6c67c42e1eb3f88b5d3ad7d0255569b7e01c71c291cf45c45275dca400c2295e353ea74a76a436a1ae88253ddb3d90a008f6ec387b2be0e22f3f56ac855fd3df36ad033d8c9e9987d2a05642090166bbdc0cf349d675f5d2d3f74790b43b001557fc008dc769c944afca91681567950f44a5af7b0a732b9d24e4d7d9f71d59098172c5c48ecc6fe02f4efe356838c2a4290b48597fee2b4c0c502c0eb5cf85c29a587b694b9033643973c6336a3b97837184e5689ead9ce7728171b755172d488bf64905657dbcd7b48311ea833abcb30659ae32cd7a27743dc0cc5d41bef9a43d94581f445bb3418ac406e11cfbd93cced2cc3e751b74fd57556587e08c90dd977ad03f50f2bfaaa27fcea09b489527b3366714ff592a89a78865bd9a489bfb80f0d8eef10a891be4fb90af6ae7987b9ccfa63dd1fcf12115a1f487d7bcc107e23d98b28f6ab89b38827597efa08b4070e3b24055cc73cc89e7396effaeab08a4aa391692dbf533865aa5df943d167f19bbb3a5f2915592eba35df97ae70106ae7fe39f6225e8eab6cc470fc084e03f7e9fd0f50f12427b231e87b1b12f6a0ae804bdd7671038c8b02084afda3f928887d631b71618e0901a9de01c0a4d8e1a3a80f04509648ed55c9e83484c34d3621caaff736e6bd7d8b66b90c4ee0b16418c3da371b1e8911aa38e6d617d2c4cd6256162b17fd3d05b +MD = c06d99d76da337e812f0f59721fd6e89eafacd033f4e2a02d9a25da4472f6b252a3dc9a277dcc77f588fc8c14d38884f + +Len = 58792 +Msg = 4167e39926e32cc5d19635805b07fb27c00f7f0134e0c06bbb45e632f42cc0413561707cdd9c65ebe6be8a1bba58bdc1486d83a15679faae19b10f73038df0b1dc84c54a14169b5d5810a0b3630c965a1737828fcc57a4e2e80cac94af552b445d5748ca725ab4644e15e010fd2b6d3854f5e4943d82a74d4fdc275ea28d5840e16262c6a06f9a46f053b0f931be29a4283010785203e93777abe799813d5fee8f2e7b04465d334b67547937a7cbb4e6bb6e7003b2e154ea8700540df76b28969042fc4e0b2d69bddba0a493065df546343a6bfd0524cfada864d681aa219a800b264b6a97e622e273bd97d2f779d40cbb19692df5d541c7025ed5bf42669ff32963d220939048045835bcbf2129397f7a95d25c28fa9481bc76b98d68431e391280f83aa734c269b2907a212d740ce896350f52469eaf23ff34eab4c4be0098ed05247e7ad97859a85438bfc263358f3a8186d7f8c67af5f221d1fcfde22b59e27bc0b6b587521e620b606289fc9dbc8c02a0b3e67cdd3ebec4d42cbbb488c31b6933a8ff4638ff093c59d229492ab7b43fc5adb7c7c0488aa55c0ea83eff20bd57e51d011f1243c5708bd74b52c5c7dbc15e8f13b00b597f4dd2686a8779b6f3cd3edc6319c833bd2e5e39971e5736290ed11fa43da6bac5439c03a997dccfe354a6afcc3d42171afe3abfb4b5c64ac5b088260f7879b3830f24a70e7712b1b573855ce4926937036887334b1ffc4cd82fe96bff696d8be13ad01b402e01a492b343ac542023daa1f5ad5b0364df8389115eb81a17688c084b0a29e8c493f2a29b4867c4ef59491c2c14ff858d593901e04ed3088a53fc20ca3997ae42aee10cb3fc55db08f4cd9b9624e979a251b46723218572ca17245040c42e39af3cbbf983c83d4272daac46b946e085a9ae3ee4633e9600e09a4cc13415b6321324c6909412e9a135f52e461fe0ab54ac5a1da0270fce59d3c6bc9b2e93f740764e4bfa6d431f9f5a2b9dc3505c138cb23c99c2f7fbf526ab82bb05b6a6b90ce1a2915e96c4a8e4e7663fe4d320e0d6c43cfc735b6ad20e70b5922755b6c33e5b08e2e598fc4c19e78d5ed22f96dad9e9428cdadcc42eba2b498a2a922bde7ded6884b6fa52d2e65f8840b5ef24c83e293693200172d1d1e425e936f66ed2719eaac0fb443004f2593f2db4983474ac8c00576c53da83fca131f77208e567c376b6ded9fffda8e6dc9a6ff7b42da4cc1b8921e759650ce36c55fe0750f9641b7d74267ab2208769f1814da7ca772146ddb738b89b7b332d4c79441d56129320bccde006e50369249fdc0eec637ab3c1db73e609a185c1834a8512daa399ba7b3aa753a4200d16beee93fbed069d21e51ba671fff4e97f8c6c61b069bef4a2d4ffecc87deca655e0e68e5cd33b4b355ba73622c41b1132f1bcf666f02f8d13d1148287b9d036ef3290b579c58be9b5cb870d41809e63a559422a7c987fcbd51d8053d87f5525ad5bf3f199ec7ce06adcc111165a06499f6d05e639883515af5e4b4503f701dc55041728057098981c375f2ce87bd92ae7d50d13e7e9d9d56a3d7e424f4b5fc1afd405430678677993846845010ba26e46386297cce2f372ce61203106a0f43d8574c42be22c70ec966ae543a731e67c843e0d5c309c0c54a37339f96e214ab99d8b5cc6e1b53b57ef91dd1023152fbe699015485d3eabe3b11ad284cff3e89bc0c2d6fe4d3b502364a25893bde0049bbcd682459af15987c0fff1b97341564cb6c139ba6ce538b9be455fb4bcbaee7b47b75c3a2edd9da897c9a180a1311d35472f8de288dc7a7fc421f85b6aca74c6d0dcac0e6229ffaeff21e7c1a0ebc4bd3bb5db5de7489edf40df2e700d391ee520ed7aab7efe0701c0afcd64b998d34b59fa2a15d1502c40f82606dbee2e743eff91ccf8ca833e09a21a5a523460d2496aa782f1901cad0ab69f8a8455d2ff3a3570acdd8de12b2e6d0b9671596a4a1e3663ebd96bd5a9a440f2c154894d464189332142113f57d9e8298aaa6fdfc33285d76eb5a9a3a6785ec6b331d4c6d1bcc482330f9cc64870dc1d3de6c0e6c3ed1faa126d93ad2eeddac369047c652911ae04eb2c779d885d118eb70b92a8d4b7cc85e0ea711cc86b7b92eab6ca54d5aa0f625082eaee9f064f2501022e4d7df85310de128b17fd5a08db3e2d06b85dedaf446bf73cde13d55e8a22b4dcfc47187df216ce28c753234a456e5378bc4a4456504274b7976e3005642208e4ddb87f12d490079154542c0979810f68852316cb31e0e2a14137810d5b0ae58d195a95da5d53a30fe588de0c1f7f481d3e70cbd78d4a274303f72f3f18e13520d8b5c39c36678ce8a276a11dde71e8e00dbacb420d8a2de50635a26143afdfe5414f6f2206d4a864b4a6de025e5ed6f91a877dd458a6dacf7279423b847dcb247db2033276a2e1cd43a0fb84484efab08e624b5417a918486e4c77978152e125b366e5952eda1d6976ed626b44493c4c91d09c8cf198ce992234a93be536092f0cf17f13d58446827614797ff95884174a5bd9428f7de40bb7bb40f056312b8cb0dd377313a6435e6b9daa881082ba57e28a683f985f41e45569a47e7c4c2f82c6b2777f924afc457c115c4d30d0c65581e5b24bb547cf6c23c53dad018efd5a77f6a6fdf7775981d1f6f697024890594df51f2d8e3c75ed4a5774458a007d5cea332bb6ed36425993d7e22e2ef501ab714118afca461badf2a7af0dc2a898cf48f070721a8e9f14ea3987da5bdcff9213520397116da9f5413e57ce4e9034fdb8b6dcf8268758fbfda64d63310773585cae49ae0dba080d62a3d550d9c03a2c630cd712ba295556f5a59c905a7d464373df53bc64341e3d7b5e8f5b093e93a5707ac9867e7d7f6df9bfdc2a7b465e9c806d8889bee4d4cdb5f8efb7861425b008881a1d198abc87327a75f93f6ba5aaadde4fdcc4d0130437f85c2bf94ada9453bf339f3458f5edc861d0c54bf302b720bc127f1d02c12c2ae63e810ae6999b78a67ad476f013e8e2f953564ae65c09018e38387282c78bb54bfc7f60f2490ba0c658848859fcbea8cc6774e24c9de979dd29d06b560e6901ad00eea475d42df2a53676119b9ab7436175e6bb2eac9fb0304c0faf887d103597b1957d78214997cd7a73babfd31ddb40e3757e937173cd0f0bbce720fbc77a8e773e940218a7b6c68e432bcc913697f21ae9d384d4adf802cda1ba2472d5f81cbaaf901ba18e7816d8ae0bcabb4ca0fe830a6108bd945b92fb84d19ec983d6c8e2b11bcba4480547c27c02c239a51eec859fd12714711b46fb2ed395e8193d1a570cda1b091b84e1b274babbf38938458772cae9c18c63a736676912b7df549b82887712b8501d6a125fd8bdd042168ff349f557ac2d593c14f63b1c1d1c44d2c9ed9ab99a2efa6c490507d0bb17e15530edfa78be9c258dfea5f0bb051a34489502ea1695ff406ebf2eedfd994fc11ca6268055dd20f0225a3a31f7541f4d834f90103492091af9dca2324b5333dd6ebdbb2ff4f203e284917ea5d9f374b60d5d5fb3187a96ae9408287fc3d10b5ed2dd76b15fe68b223a0c39f568ca61986e29377ccc33ec24c7ab8a7c6bfb1f6bd16e1dab9e9f01d9cc3233c8adc12d1b2c19e01357a753a51a2d8ed04db9b62df2d879c8b707ad2ec36a33c7aec12266d197211fc1bc155916f6fd2371f419ccbd8352adb405d64aa51e039a75b086a2e50ac449125c7967426e9e1fdd92916fbad870059c80c554fdb569e80a78a2f6eeda8f38536ec6f726fe3b6a9b7d643e723d9a767862c37550972e5973ffbe8b766e4b948cda45334b0c9aacb39bda626c1b9aa84f9216d5282b1a96ba2f22890430c007c3883e413802848e2bd63d0330db364529f8069b0cdbf447e7ee15172187b5370260f8497546c1b70d15d34847e337f20f7cddf0850f86140026e05d53dbf3cc5049bd748b4219d16140e65a389d64590706e1fb1a2d96a30fbecc842595436fb62ed3e9015c54812d3ebc618b6f87221c7e5ce5539eed9f1b9e1fb41c1b6bc83af483d15ffe39717bf99d84c9c366f553cc94d5b8ca53ae2dae2114c2d6337ee78415542e8f92495258d3eb7900cb78b6d8d2f4d2198f784cd61ccd9e2e653ac2c6d199f57725b0bb43a5bf238e7c564c8a5d6928f46ba680fe5606388cc7a3d5a2ffc93c1dbb4fbca25a284fd541351dcb7f5d42c1ade0d10e18e8195623622701e60b8ceb1bce605d3b4d863de4be32817ef8a9e91ecd48eeaa9bc8f63f1ec0c9cf886b480fd4ac5d90574f2e2b989296a361e4d58616ec865446cdd2e380a9e40268649c5d09aa88a16d3310e06b45f036c17becad63c6be5e12b154d92fe938c7d2fc50ce1761c7b5b8b94bc9e154797f3ff7955a5bdc7f0f26fbe2e8d488af66eebdca2aa3d90315606947afa0c617c504df3a57a638afb1ab33e6d7178f3026e52e7339581b220a8ccb6c5950a3b45238bb426aede2388ac8e2c76f9f05a251dfd7b3c2db2e0eda646823919af4376c0114155cd8e000e3a68fed7815f2ef2d0341f38fd71aadcd11c7d21d26c0885c8a701bf40e3cf1036cc2c0ba205efe037af39966f2e8e92dbb70e3c69b0f8f6af95abcfc38fef2344303a8fc6952b71a6c750f10d49fa84089ecbc54a1e934dd7757603afd2ceabc53db0d0898d502bc0050bb552647d450a4c2c78fe2575fff2bf16f7806d0c3e4c3d157a454f0c72f5e0b07fc90e954a3347a6a3f0360f8163eaf517cfaf164f4bc6eee9945aaeebcaf2e5acfb98b1081609d0f2baf0de76bd7196e0e8298b53465383aae140b5fab1b421b944a38f03450b21d1c8c6514461fb82ef846cc9eebe7b9a4ad691b0344c9ceb414eaf5dc032d41fcda427067ee3e13fa01ed9507636979925cebe3c0cfe25a8c1742ccbc351fd2132d7a36c9ad5bb338f020fbd8e214ff6d85436a7f938d6e0b65fac478134deeccdddcc020c99e1e528e8607f9b10fd39eee19b829d9f39399c5b9e5f8e5e01c8eb10f15568b30deaea3c8c05218837d8b6014d6a4e93b509e00273825f3ffe5c272bc3d513b397bb6f78d2fcc5e98859ea2dccbda0b8e2e82deedc4e584d3d0cee88a41fb21e07bd0517e5a4dcd75743e7e1a9fb18714b4ad27b39221e184651bdb22283a854e68667a424bbeab43d2d2ba765b13a4f46a88a320a8c253392c11132bfaf8aeabc9df3b820a08412925c41f9706e7ab57d8791add10ae201aae18574ebf1ce51e27a35ae69d11d750f77b7526a815e46487e95392d2cf905072997133808e72cf091a9f150ec3b5e0cf5f84ca4a849744fe4117e6f40bed0300fa278145369de7f7acd4b86505220036d8132cf21e0c1ec5e72e81804c7d5ae1a542e014fcae8e79c1bf76a8be68d8b34eecf3abca8b1b6545600c7d798a7e9c008afaf7c8eceb18c12af8e1d8cd91ce29d5c87a705b6365c1752ff47a5a97b975c674f582a0275b14dbe6173a9a530fd1975369f9c51d4dc53491ec3735ccc16bc0f916121269cb229ae753cc1645ffaffa3b7f4b1172a6b866db6d9765453b4a3e2f63608adaee5331a39c768b902529c529c44f8789f602d3b48085312baf7909bee35450a24f1066c3fa203f5b09a8c2c441ed6e8bc80b43c52be6e0a6a562e94f9fd7abe873bf03ef75b27bcf3495b7b5fd0e109fa13a7eb678a3bbdda66ca58a9dcfe5d4e4cacece161487142d566da30098b3ee0bf94b2e6fa40af939ff0716e726449029979009e42fab517c55ac375375a09f8db074d517d11521e783d59c85c21141ca901047e7e92fafaaf83b19fd8b1fdbb0c5bf547812237e3760d8c37d8d93124f1b1831282b5a553ea9e4f006c477cafaa1f5539a507d38b1ffd834d96d142941a26e6faede766bc0cf6d647706f293f5acde7986716c76ddc69d96a14cdaae288cdba882e8c91bb9d19f1f573bd65f294e416f435f3660441eee92db112eca8a412784aa339c8bb01942c6ae4a6c551df0e7ddd900231f6d7094d091a458a4f1291aad30a536e32d0e1e04851bfc9e59f89969513e7ddbe02258f7caeda066e4ac7cc81b28e14cb818fa7ee396ce6165d01dbeb2008abb269e00af8fd34e35ec32148074a3e3eeda9fa0dfd0a329c7cade3b82042d94e8c64a54a2e741a93c9023ab7a42fd85f01a0bd6cd542a57f80f8cbd5e4fafe18a48901e76da1cfaa058e709618d200f7a01c565f078139e1bbc4169f99c6db9c835d724d3704d898ccce6f6db5ef3c9b6163315f243464758596409fcf24f66ca14862f62b2bc9e2675883a90bc5efacae1bead78beab99d86f5f630e5a3d2fb96d0707caa7518196da369c2aaf49ecdeeacef72def2bdec3859940d8db1f5bbdc9c174b457f579058356e64e3f9ce51bbaccb9b6e0ac5c41247a67017ddd33fdae1c3ec8cb8ed09bf952dea6753f2ea8d81ebcbe99175d78d36aa2324860ffa2a7802cad0a05cc7fc3904dda581b0faecc2ec8eb205527931ad1b713458e07d33955080c1c43b6da697afa92f016cf551f63a5e57f4d02b881176f4b7b5092b9ee03988c0a2fd6d37476af754619b8c458241a55bee6381091a49283f38fe97b4df2a5d6dbb073936bee322b610d1024ffdbf0e3e30a10c2d1e1e862b3315543de8bf69197b0d641d6494c5d4ad8209c9cefef36f8a0d1f6ca343891c51f1c362a345566471648063eefc5b307643055b8c8dff7048fc4d602064cb73042867eb85688fdf2ca0f0a294865d4a2978877dace88cd10c1318703c0ea7dfd81dd43105a58fda0b3737422bcf469225b6f298b69b261231d603455c8db8b33c367acbba68d0f59bbbe6caeb3391990972f935201245b458b98037e88e788daf26ee240a4efda26c9361c5795fd8df3330edeb7fea7627ef3221c0866d51dfbf5380d27bb45070ec625aaa4ca086c5316553242c8031ed73d46a87bcc6ff19db40d53f952593d1a98d13e1dba225fb92a4bb67cc7003857524ccf5d217badc81737df3dd3f125512883014bcd130e2b563a93ec63655807187cb838cdc2f88406fdd77ba5d666bb5e821ab56ca220b48268f01b05fc25ed781e8c93380c7bda69a6643c30d0a9602218b2e4fd993e59961ef68f138b48135a7972f7ca21ddd1287bad06dca796495d8bf15eeabe0f247ba4cdd2f7db6881a7d693ebebc8c7722bc4db641122d47df524fead99da3c1c17429c6c17b42e3e457d17f703cbe1c45ac915db370a0c04d42b025874b46c4953408be3ddde42521eb625a37af0d2cf9ed184f5b627e5e7e0e824e8e11648b418e5c4c1b0204bc519c9e578b800439bdd254f39f641082d03a28de44ac677644c7b6c8df743f29f1dfd80fd25c2db31010ea02f60201cde24a364d4168da261d848aed01c10dee9149c1ebb29004398f0d29c605a8bca032b31d241ad3371b4a595b011864cb7abe5ece6382d8022d894b96d534d4cbaa2ff95ffb277808b649aa99ad89dc227eb783601fe970b21fad30d3b90a22993c68a1712afdc3c99799ece95aec939d4b3b5c19795d169e80497142da0bfebfe74b3fe34c0442e42fc9b4ac9197278660a84d7cf8341621e01c7186c0a0e5aa2b662948c6e171f2ff478665da3004886f9cdbed15251be6bf64b5f1f56f53d28937f1f4340bdd708691d6a79d4db71dc8678bfc689684479ed0b316f0dde5d3714f3e880bf9e1e7464729e47336bbb0fbc6d22d6b1edbdededeed884b63083783fa4376c7122bc1beb5e49ec4819eec8a0942f28514af272ffde9b85d95375921e7b542fe0b278a609ccb5939b4bd1ae3cd52ee5f1e6a8ae2ac3c19bffaffc2eb96086f094b41bbdc3a12862b56a2d6a971966341a29aa49768393edafacdff4163c16d714926d0723c6eb811ddfcaa3b946203e527bbfeceb0759a471b2e88b3ff54c0de8b2362d302346195b117002ab46a42a2444ae3f92375be7cd29dd9c3c7570ba987e3ed6f2a08052f867e72e74ff3a2115ec40e972fbe0df4c7987ce13a2ca05ac5c4dab7226e3537b4bf6d01c5b2a4bafdb3d93933c32b3750aaecace66a217adb62a54b79bb5456c246790ac41bbcf797a6de4fee0978cd0441a3875a83f1823f39e78c9e93f4f545900152b9836d6fb2f9785bad15892e69092be0e50ea2f947b71bfb1f6c99ab9548a08a14ae387be63851dcff5bcec3e54df07a345eb848ab66bd376ac9b4e267ccc10163e0a0b497ffd5546360dc361f9c9b93b718a408c0c535920f1fc92203990d6935cf38924e9c8d5267b913ed5e8187ddfbb0f8b23e5f3fcb8af368e31f39c021f8ce62ad80bae4477ab9286248894fa960bc18cd5a9116245cd8f6be012b93bc3b62a16ec4c764a42b056c2d54005d96849e96c2dc07633cf335051b5feaf2986c20874e813ea908e71261b717a32c15d5dcf52b092ea185fc9c067392046757098c86c55cad0be63d649b97f9de45b7e30bb67e88735b8fb7729d6f3de46c78921b228bad8f17cc9c709c38711e34fd2a8f5d35c081ebdae25d1c56ca176c6da430dcd9fa51570c92cac62123df74461aec4bd947b6ecc7dbb015d2ad29f1b6ae723868c9903456aed7bbda78be8e2342b724d194aed90722101c6b7d7896e41f63a790a1c85a1b5f3befdce627dd2520545ad72db63ae943f19279b1afc6668569bcea096612db024bd490f2a7fbcc3268602279898d1ebfd91a85c01c0abe6f18eaed76f60906569bfcaf34cb74790747c77c1e8549f8044b07384f69ce6c3ad5a41360f4a72dcab0ea7012eea1cc0d97131c7325ec05afac0ad9b605abf087449ae45dee77d1cd0f009c239e3e35b3cab5bc1e07fdd8109078127a7c0ddbc2da11e8c45ff572dc1ae18bcd569436a84731b37597f9efe57ce15b23297e9e7c0abb894aa59a817678ffb796b43e4f49b1199b20526aad8ce5c91c36ba68a9114afa5e476be19e2a9dddb81613a6f0168cdffba4c3baa1755fb1ee3b9b769c313f50c0412f651976ededf5a21168c9ad3ef72d5968845c4d3f1e49884902d85a4c4167de4c9f93ea0dc308e119fe2c5c4be1c8d4bd324e632870a6d35fa7fddaf66ead656ffb9dd261df5a59b9c1a8c23832569d3e5ee855905b8e732bd07d51d21b297cf5f387ee8ea572526d7dbf7d887b5f196864ca930b31890e4a16c74d43e9349b7b21f28ce8a7e981916ce0dcc0ff2aefd7de65b9fd84fefb36e57c2bd04b77375c015e4c0479185de229bd6e56607276e9463a28ebe888c08eb6fc8c0bd469d7351c3b9a667b975dcc3e95a0cd31ae452916c87e5abe9f049e15d8dc6af674f182dd1af68331def7bc060a22a9d546e123da8118ce89aa2e019c819b5244312cc1be6ceeef3e67b23e3a9b5250ddc4c1460c0486bbdc42a335859757762026df7e5aa1f20ef3ba13cf26c9be76bdb06c2c25b346b718f11ac69b8a8f2b1cbe90151c7a9e76e45ea2eb6505d56ff7825832a22de724e22deb1138cba105bc60c5328e27429ba2bdd62f7fe025c10dc30be62bc4d699aa619ac1d7db4b7a71d615331a689d01916033e7d1e92e0e72eafdd30d389399e424b0450359dd1dcf56d6a36b8efc2d42ee22b0f5716c9cd972b475d0c9bc8a21ffb2174597d454379ba00fdc3aee9329a049277519401083f2b64b1118a00ee64b16b51945dfb24cecf7e506dcf2b7d83f1d97bb5176fe04d379cf38a5ec8c93af54aae8b44dbc71f344af55e5972fb102f6ae42ba4fb9fe9d757ed1e20077dc9502654e93acd739272ceb43f54a5f66a48ab795a458d8b3d94fd6576d7a7503849670c5447b9714f107157b8c9acb4b8c40604eb010dee6ef5f6243a8b8f8bb069759c7474870a7f969aa470bf6f7e2329e24b85e1630ea783aaf21144a7755836b8ccf3c81f834a8cb365103ed59bd301a618d1eb78340ec48296a30bd758593a9966764c6927d77b23603f4ec855efd3bc31772932a7cb42e4da99e7077adafd7e30a8064e3d4feb525ea6f830f2a0288b5e1ea37ab1078539849be11f250406d0f42e00b40cd962a826ed43f3bb0d877b696e603998ea13ea5d5000079fffddf878b34285dd9e6a8d82bb38faf85f78f418116855a59b765d2d614ca830f20a5c85ddd2a7f8c68a6938b8dd2df1bd835e35acc3b8204336fcbc75cde822051566e254ba04a5784ba4118d3c74ed50312186ea7a485109d92ed1358cb0bb62877d59c102822cdc33a6d5e25db8363f09a5d47093ef7f16e95a364990e9452ee808b0ccb00bd41bccd74c5e46df12b39453e6e91993f491eeeab158e1790694be71b01cce86e75d9ea03daa01d3cad4589186fb111ef6a36e450b0a884a47ba931f215a63daabc92f67726e967aa5c9dfc87a4e8577ce74f3d30c09 +MD = 0657092509fbb331f3e1dc1adb6cf1bbd7e2f7f6d12d638fbf1f4423e05f250fee6d3bd0deecd5aac14e9041ab4e2521 + +Len = 59632 +Msg = 5628df273bab05e7a0c320ab5bc6c10da6cf23abbb066187a122e7ae452c2618cc858dd0282ab454e937da3f56aa9125bd6ab8bf0788aa488fc4b5263553cecdaedf82e11ed0309ae8ca766dc476e9e9138609df70f374c58889595c2ba63091a33fa8a14423e1814484dc7dcdb3301f512bfe521ed126c7327abb9850aeb52c53ace65ac3ad30d1a66df4b798e8cd901e617f6238a92a16359ec422cbf2c565672e2452c2f68351b58ea7624e9d2a0423317455e604e77a3afe5a41c5fac90587cd4ad36a8443ca1aeedbc8165bae4308a2c5745269c5bbe9a0663f664f27d55a924123e2e1d9057c95792f19a8c11474bd5a07a1602ca0e98ed162d578499a8984ef8a5395abc7848c6ae07f0fcb400f891b56fe7184f3e3d081f33bfd951fbbab3d52e52623dbdada94236f153490820ef1a88f25357a7e6c6039bf67752b991013c1bf1ea8082587e140114465c97554c2477c03a7fe636c557e8a3d5085cbba5a210a05a1150d9c387e8e23c4b68f647879ee94434639d74708c3078ef6f8b1f8b8ed6178cb3c2080260e3aba1e7945f9870d5e6f1ca9b62021934e9646c8fed7cf91bc94f2571ba380b812b0c8dbff2fb900eb94465b10c70f2298d23de5a8ddad1e9d5d52099688d4b5320c7d5b9b0056f0c31b8df6ed241a9770a9a2f4b7f49cbb8d3bb2f797176a2d223705a42056a8046c6ab923561f8c1b5b833fa03403e2901396dbcc293889476b9a285c9618f56570eb928951a0abd5e3c8da8e26f2c8c6b7d6962e51d37b2b949cae2c052e863a5705dfd1e98fc1ee8fe13c6995a996850163a9c619d0860225a45ebb767fa3aca71f6aa223d4148de7342dd78a0f94f47aa6dc3b8817f3f4a71c01b2f0f593e3eaa3f9a50957ecdb742a75800b0e0a3ca905f935a6910a28a16b5fb87c77a006a7f85581a2019300bd2cdb0e238d3f8416e9c65e7c2412c79bf9407621ee103d678646dff6b850234ba02826d7757cf54abb0d5b11b955f81d2e6c93e7402cb2b1b594670e656a6ca4ef247231ac09b7cce194d76e3919e4b072aab8d6563c8a0ded06c0f1f12a045282979a381b2ef124c52478998aa7b2db2dc48df71888f003966593a742d813ddc04946f4aa33ccdbcd84e69c96478b27c780b9516e570a1c1879873942bcc0cb10021d6e425f6f78637eca7f4340971ba8a7e5ec41f300dfdb0a45aed71d34a6dc89c7adc9fb0283eed8cc487bdcfd3f3801b8d177a2fbd548e0740eeb4597f58ba7edb9294faf85d65b93012561e61be055db07faad2384c5c2bd62657a10418524379b48a39c0582cfc8b129187938066df596b05c9f76bb7ac8b12d05c71131c84c5a103ff18b5cfc12616f49df1d140faf8783f6983393ce3c032b2ee5edf95ad5fe676ad79fcba91a18de3c3f527004b1e15ac53541b387c260473c925d44a47990376e76ca37a088de6038c2608413a2ac1c0f9f2a856d01d16979f5ea7b6ce1176791f59308a703bbdc8790ceb6062bf1b31dfd766f47a25d792b371b047bb49bdf1c7c83a78733b83b6fd02470a4f3b7063778abdbdf4c0d5f9b7f7948999b25875735207a08c1dc6339abeb19b4a306fda4385330fba8e80311f68baf8d3ebb478946f5eaf155303d2c48aa18ffe2e680ae64f5d6645df64dd4c4d9a221446807fbd787600c96bab192d0e9d74d5960779b241a35e2143f262e10eb871b5631aff61160421f2d84a8b16a30bd65af7bcab4a249b53c75cc7465024ac7441b2027c01b07f9f3c19608d33f0832118d406241030abe3c27a421c2c47dcb643c3c57a11e04ee50fbf6bb3e76f89e179bb5258a72e5b8a8d3cf138d7b0cfa43608d27e342e088fd83aea73a38896a4080e4fcd615630b492056340e5280bba8301c80cdae222ec400c6b611ad41fc54e5d5cf6f140b1fe7b7406a8d6f5f785d53f048a68b524a6b1b44cf09fcabbd1b718f879b98665c4a3f959f51fa349828721169b700f843bb7b32d96c4e4c155dcd1a0aa3c9fa2b39615dbaa31c8483d23588c948369d817cc897be80caae6de1a07e42cfce52f27dc5a1a3cbfcd9a023435c52a055c86c76ac7c658e99582b7093c31666d0f31ade12694211c4ba59e24595ea0984026c70cde8b6dde2d2b9d24ef26db2f6670c24f1bb7fbc99b015d9e23c7bc9ebd2e934d3e399b7cea57dcf781331f969352f1709a14216a5423dcec358ec29b3c04b886776f6628558e12eb92c498450e5ea7f0322736510f8378a90f125710454fa3531a7b5272e734bb9bb479d9bd4ffa7238646faf2025a6cd5f0100ee905175e03d880be4ef17e2536236b15851d0ccdcc3b16bf05a2f144768bbb8fd9df90dfb90509f91ff702d66e9ca1998c5294c442c999aae6184428370afd9088b948e6215f494fe26887c629ccf011f69b1df34ddad8a4dc8ddb7ede15dbf93fbcc5d9018f48a6de6c935d2f5b60650c2131c4b513d99330293faf34535fb246109122223c0ee85c29b00347f2f97d160c579e411ea6612b13f724016d90a3e5dc34274c0fa4fba4ca65203b39c4415c8418e9bba347f412748b440d0a76b56448345246af11c9fe753a1cd1d7c89a25b0fa0ee949c236307384761fd31ace0a7e1b0adac65d38b253b85fd2750d6ebbb8877393b9210dcc396924017083d720a370b6cef99132078b665105ba9ca764c54781839b6c632dedc2b57988b9b9eee2bcc0ebf2b39e4645cd5b344f7c2b69ffc1a08096a91f9cb8189150c3c55abc61868ff959ce63b8ab73e325dbb5e4128d7d395152e22961c2f1204ecbaea4d248568bc0d5e76ba2e2e253a10750b8a69703b2bf781e69c432d8c93a457c7e77c0b41c070f089d4f15a211707b54916f47dc7592b066c70d3052f7dddc38cff5f129aa98af38e1066a39875adec956b3c38fe892a1c12b83e6e90f0036e98192023c9d395c801f0e09311b27d8b8efbb33a47586f4377d6f7a247a69fb977b971b765db3bee63fb01b12379e132843cfc0a3833850d0a519148ba0e1d44aa54c665e52ce7e752a34c862428934213c369215796e5e958bc9dda7e92f690be7f8087ce5514432c6e237aba4aee6abc13ad082c1f1c68d17c7fcffbe1d61e129e42c587c06b727fc019174c4d5cfcfbb21a270c2892fc0325a9a1c857164d55359f87b81b3805bb5dbfd460cc8979410343169e4fd4137c2ccdf84a8f41cee4d9d946c5a2147d6d7b6a4a8e34ee703a9bba5f48f17a5f9b063f2c18d6e2e34fff829b37118b3a14bdbae22b12e67226efe269a2b9d030ee568fc5b9ea745af52b4dfd92c606cc3fa92423cdf31befb4744dae12058027f482224d8416607682c18dd65f5c01b44cb23887fd31f94961dd7ec54d7104b53c0db93c2e0751c66776b4cdf3301682da5d5a972f6c093f9d6fd8278b68d869237d970a0e29a2db119f653cf4debfa8572f1cd9eb0db612e5cffc5d726965a459466e4fbaf9ee252fc011bbead467a5419bf1b896a3aa63d9525dcf890f56f73bfc8175aaf48e25006d3cc34bada8fa28287bcbd8aa30b2c6bb6ef635a706e249f4730454a62d6b321b68db7dc6fe2789591d8c27adf3705c5fc28a1eed0ff601e2d5844e8b2658434f086d17bcc1add3a24961ea0b6d4d08a3dad39b2dcc93023c0b6e0f10238ca26cae009ffbae0da598a1e5b66ef8793a4c2a6b3105e759b974a73a0cd18f68de18cc3e7d101dc76da0999003354fa58fad33c986f1caaaa6011b60de4bc48d54c7e56f45769b5b9a5ea2f966eabd52674b7966e36e01164675ea8ad9eb8d6ab4fe8c2b7faba14aba27507a481bdbf06fab8dec0cf7052d19478700b64d34716d2112eb922bba055baf14ab2d35261fe741c3913a19414f9d0a938ac9cd4441fbd42c380383502bed3a81f49cc326319ca2cd1f11416ffe50137251ab08474cdf8c3a996a2f0e1eed6e0aff0d4246c5ce530cee190bdbc9c106b61dc06ab80286cdc0783cab4e6eeace2212f53f124d1ab70586c7d50f326e68d147a08110f38ffd505cd1649b9c53bf69e8eb161357f0533951843984b8c69e5657c1c7dca069af5cdfef076017b6d634e96563c446edbc3b0704a5d6dd583ba7d6bacb858992685849dbf046619297358ceab4afca71666cff9fb6601091b5684cf1f8b63f989cd5533ebbc92a6566ce5be165302319c651b3dbc7dae3119ffa12eddbb902fad156647dc632a2ade971cef001e01145708bbc3f6681c5364fefc124e13894278a5df61f9c4d9aea83c26e8d2749f592e96d71312f0f47ae69bbe02da5af63ad4c4e90aaca645389ca32a31f21d8407085999b676dddeab861d0f87e9577e20a8bcacc85dd016d3a2135153cae15926cf9727338cf781f02cce1628e3d3cafbdcd34f26720bf584a2d6c3d5c088c6bf6a99a912bb068650c0f4fc6d309682d35752faa9541f8a558432a73f3ed972d8c1a748dc6ad194d42bd8e8de38684db00381d7db6bd47c4d3070251aab9d067cbc082b180321548253c203046311d39bc7a70b431ff273748fd767ed6f9c29b043067c4eedbe6e6421f975661a58bd9b8b0dc169d94019d387b19240f29e847e3ee76006907089827dc7658cc307b3b937fc1fd6ff8713710144d19c9b6bbfed95f401c954ff4de25072fbffc8e45cfcb4ba4d11fb8f0c57e6da4a87d4ca81053075871ea132648e804361468fb8616ce88f74a23320aa8b1cb9258b058572cff7b21a8edfd2738ef782bce9824a6911bcc5bc12110295178d298b3094623b52d3f2e0a076a725e89b77377107641df418a34ce8fbfc76021f74a4fdea2a8497aa7f04dcce791fa6566af76588cc251ce5704dac5bd8f555bce1977a6fa4f4a4669facca4f100cd00fa2274d6c4b28910975e6e7985cb9174bb78d2f8b9a3483ed9b01f36234926cae68edb21ba9cf5c6efa40201a516b50b43fada5a7d2ec3c29bb2ade6dac59841a04711afdaec184fa4682df497eb209dfc120632916c3d500464f13da410a1f3dbedc107a22a61197a3d5ac8dad3749b4840df17b2c61585c869a1b0fbb4d46fedd5619facc280c2c5761104ea4a2181bd29dd803dc6fcc24c1317d76e2c90045ab06bfe575ed7ca1ab4d92f42c9a7efcf1f79f2bf0953a40403cc1757d2755fa6e1589a3e59d69dee7c2bbe70dc7843f2a45ce5a2e7aa9974be47076560e4d066fabff9ce4e1dbca53e7118f0fd231ccc5aceef760c72113295011e03327f14ff6eeaa383a61db4f37e51e55fa638e8b0a56866c4c23ab9b24aa2c1bdd1a48be4b0911e0aec47054dae36a9f9521a164416b1e20bb374d188217498f1c8e5a3bb522bdfa0ab2a3c2850a7bd6a9b57440b1123e7b74ab11708cc1f1a4b72c30af7d6234f014d57b7f8082db63fec60f05a3746fe54126ff8c8ad0abc2789bd100ecf0002895d20074137212ac5cfd789d5fb938c6e8501e54c46c00512583451848f5a80c54543a898602a61b8b02b9ee2d08228632d276b081bb77b9878e95ddd998b5021b0132a7205c2117527cdae25589b48de7540f890be898626662c839e902ae74b081efb42aa50b077b14e1601e667644cf7df2c5a819ebb48aa7e613be5a1bc9dc7d7999ec08ea55cc71d84fd2c4f011b1f6264ea177f918ba06f852a1c98569679dd93faeab48680e3cc699b7ceab5d5766b30a3e2949f4c02605e0da7773bc1988168db8b6aca8081cb42515a92e918776a2e3c65763b162b115a4b18b6d2abae7386a51529f7d84baa9db368001130acefac0832bd0b8694c31866e2dfb1b116148c0c3a7a84f48bdada36179ad4da815c388bbcb17709ca15f6e5887a6f7e79f4c7654dc4f861ecec865ddbcb9a528f40525b75fc040c558a944b8bef52604484f744d191c8acc950309f372ad855412c97ebf105492aa1917f0d6fd7110300556a2f68898c41ab96577ebc31254f218167b1a055acd158bb05bfa6aa01d337e6be8964e4a9ad2e3f7980dd66e7acbadf50412685a58cc567c6b6c2d0cb6d45a952e7696ba75babac052a0d44c5fa77a6d01ed5edc9d97238309736f3d41dc42dd5cdf8671be9ce7c88eeee4316b4e26865af4116903409ace1e5958ba2814dd495a1746f6db3e1117353d2fa706875a48f86fa988f28d626490640f0bd141d4e41066ffd13668e1b62dd6dd35981bbebcc1a64dc2d248244d49ddbdb8a62eceb36616d98b35e4feac6001156489d3f9e99ee0269e0c3787922f0c89490da274c0456efbab42791201b406ffba4175b4d877675ca40623343a2c389c4770646e1293b58eb9c4eec2bd132cc4c128c9968f3581165c29d3d24d27aa1d3a363d63b13a34b93e230cb8e964bc8c01a6994818be777c4fdd110ad407ab35a8c7f5fba62033a5c1c69b9c8d8ffe7e0124ab717bfc91b8048ba384d5b6810c1b8b54dff82ff979ca176315af7b3ac34908c8babed616ef039952e75b1b74c91aea22b7af4dd05ee17d2bcc5912b88261bcb8cbeb33504cd571e6db6b1ece952e4c262ad464fe7c8f60bd69923bbfe4d2a6434b09fd85f40179270a0fa7d597dd1929e16d5bccfa5b28df9363de9911223031e3211bfe120f1bdd194e9ed3f8b2b9f384851a8201ce3e5af2d2e48c30dcc1493a3a7503cc88becfb331eb0edf32944cba218968b86e08f52fea33e16a85c054f95cf3db4af3c9c67ebe77cf75e712fc2b4b90c648c6ef7af2b0b4e0e6a7971bc78f7dd0b5d8a68a22ff285de1589cca800a17e3d85b5cafe22e4fd0cdc9ad634ddcfb2835bfbce348fce7024c0d987f6167060891b7b55ea86bedfb46746af7324a552cf131739998bc9d04de8f70e37568457d9b61634dec6f74a77a2f369e1fe2732412b53373b94730acbe658abe6518bc8a1de1cf455543ce1d9082791fbcab3d58bfd4643a54a58a42151750d8d87c54773fc0600d8beee1a5b1f59b43b0ad9c0f21156eb610df910e0a2e28f9779ef38b2b857d6f37789786051104d2a4f076936000baaf96fb2f57c6317ce8ea85820f06b8903101ead60ab35d1d943f7db52aa31daeed8d044b6771a8b36ed839ea4bfbe1001c904b8877e4624c502a5b3f1d12f5b3379effcc84321b3553eac311872f8935f88da39416bfa6fad00c92feb4d70f325771f69cf731136a5fc72ae10bcd37978d9ffae22f6db390da8e2bd83617f39113adf0a2089718ba591776411efb748ea26f595a0a15117437582db7edfd2a3a34faf6c6fe8cb08d0b84af180ae1c78201a4c7e4eee04610af11a0821fae3b9382020ff02337654b3bb4de5015a9b8db70e74d6825f6dccb09618c211555ae06c46a4308bdc1be5cb24f0bd08878cf01b8e0f2cef57e5b0c0ff2fa7b17180cf9c4dd9af61551432838fe3c80ab79955ca136befea7a0493d8769f17a6c1fdcd648011da273107d1895697b48c5d19154f292b9e0828630c53a717a055e93a604197ed3f51e26f3929037cf1020ab4c52759bec5dd055970cf0b09c04339cf3ebfffdc5d560ba2dfff21041c0022d4cbcf0fa5e5bd738077a70ce5f60346149f3c126f92b7ff4b4c8839ed740b47f1bfc2c5617c3e15507778474cbffa90b338429a079e0c4fd0f530b869b787eca4178f158207e34d41f6bf24ae9cadac13606fd144dda77fdc60a52739551a736449a06a8807318ded7be83f7c0a90eacdce106297b03e01b62541f0bccb179eaaec935ed3f89d79bb8d8ff2458858ff4ac7d0c880d4247806a983cf648823a0f066c44cf66aab83249212e78ba44a3c02e43d7d80a7ef35466406fdd11aa33ccd5edfcf8fcbd02cb1202d89cedd09338eb992ec27ba12dbedfb381683013ac4aa2b3250d09a9fe909ce1c437f90fa7866ae8daee67923de65c593a3eaca3ecb0f52687b99658f4a76e27bbf2e7eb26cf3399a403d6396bf5659a61088d443d2756aee9a2a9b12b38113d8575be4b5a3ecf1251aad17eff1382dec06ddbdde5d74eb315704d9ced6c0b89ea67861689f8c5bdac8a5e4940673c8d1d169f552de7649dd1cc8701806ae675b2704836fc289d017c4c8882771a1a0f41aae1965d8021d4e65e61c82d5b2968a4390b92fbf4e04588975411ec53a5ccf4d2a787bdc90cc01ccde2da3c675dca896ad712cd8415f39914ccdee73b632dfd36fb1095ebadca3ac1121df5b5090229abb49ebc01c472776af7d2b0fade98267de4192c0d8c580ae4fa7aa06eb57a4ca2ab1e0e93762aea42ddd38eb79e7635506b8acb5832d452dba1d984b9ea99bafac37a0c61b183ba4487cacb9b2930f356964bbaf426a4db511023eabf2ec73a59059afe9400e5ae17fca0adcd092c28386f454108f0326dec4d3e1aa80c6c966877672c53e8b89064443b7d75c6d49c9dfe5ea8bc19e4d05462145c9b09f094ce23c7ddc7f36426d2688582bde68f162e4a7f36392824cb32568cf8c0afbcfd3311a35b18a851390a6f6506cbf3c460935b9134a7a559272e328d35408536984148e4ec6d8fe790b361c24fc775dd4073397aea2e18eaaceffd015d4313c72f9ed070d9ee318ff5764786a6daf2417f76ed24a0f40a41221ebfcfb6f0e2d788f2b1316ac515af2efb2898532cf458e5457e759e2403c5516281df897079cf6de6f30ee617c4b104e90ce09ee4028a3988f4572be489de01644a191deb6015a4219fee970fc4fb3fe9fb46cf2aa53f45e657b1915c26f4f9cc2265bc882013f54cbdbbc3d29ff7a7a2feb22d2863dfcf08b06a16b6616f024111abac6f40302a0f535cb38bdc0b03bd1c0c0103c7d2a096066c0317c2b8e46b20d336c948d309116bb9af6004a11de15e3c93e656808037629ea0a9d23567f356c5a2bec1665cfb0cbafe799e20bbb7ca2a2bf79a523693cbe83494184f5281bc6938753250e9743f47eaff32f0a6e66bbf115e1aae8c53493209001d6e6fbc58a7401723f979250b48b91a4979a61746e18c445efd481fe464651467fb844d346801cb1cc9d3b678a5b4f16a2283f26579e6d1efa8339ea56791f8805c5adb5892c4baa628c1ce8e4623ad1d55041ecf70652c541515799321d5d5f0fbb90fca0fd10b487e091556134e75ea7af2448cac527e15aeb658b77b78d33d3f699194c570e78b337435d7f57c725af7150ba517f5eebbdadde1175dc419f18f3108be9ee976f6afcad319d2f7ccf435351c219895a5cd0054bfbdb0ffd09355da1d4e8183df115ad39a259405aa409c1a1e08167bcad38ae198b15a721facf82d774e55874b649d562f0221ef34c7958bba627bf08655df4d15f945652fc3e0efbfc5043de178de1d3db863fd941086529838ae3a01dc675fdd9f571f276075eb9cbc75edcad486ee6a504076efa4d8355f9197a162ef8ae199ab7aea300c1ee8b73a90df2d00fe925ed1a2a47009f4fdb8761e6fd217b099f023950c724d46adb7473d5b3385add1c24370cd3cc940724aee2bea78db41518b1190ce14ae520345eb64a804eafa723eaf923a7e6c265bbe01a65c7dc3a5cf117c53783fb4abb2092fed0fc7b74f3f791cef335c780d81bbb7770b085744dc2b6dc5521ae9b982aa1ac0d8a57513fe1c9271fffe775dadea1986404220873f81ebd0a4ced4e43bd1b5c64bc5abad78ce19ffe88df07da5f22ebb4252a5d4c2bafe5bb582fd95a42507e5af50e1877538ba8134316cd7317dffff5b616e942b7eae4fce5fed32864f18064e6d9f08bd027ce02c1172d21b309238d197043043770492378d2b25a9f6f0126e456e9817d3680218568ad62ab5f150ed1bee0ed24b070d38333fd4d5c398ef58ffd59f4c5384d040273c4b25b4242df716b498a0a2c0a81979b2a9d25d178754c45d85252bda32ebad119ad5d431b937afdf357425354c21880b0a676e75c0a9bc8cb3670372116310902902be22daf40ff64c177b70df9988d2615e9bba84a10eed8fdd825253ee774261731aff7a785d8147524d794ac9a190157d8eefba82e305824e5184e2d50aadaaf28fce8009c2098deb435676f9f9cb8e8def1c4a95625ef5811810a460f35b6d45c599d4f0661586aa04114a71bb0e345565471b22b47f4e3f7efc83d657d4103565675e75702d9a5939b2ad780dde6f9f997a177100f0f7502b526681619efd8a174106df09d931be893f895817c5a73133bc25c96f3a567cc81a34a736439a0c822eb47858a2b3a39dc2c557024a44d4da162d7429e4d58bfd5ad791014b51834f365086860f88ce1c4249bef6f6ae50368e18b85576da44711c3687e83c89b62561c252baa91807afc8fdd51a4f4d6df02fccde1b78cf70cd6739d013a0a96eadb8f2241df6cc18fe5bc9e397df8af3b0fe322da4731bd7b844c8b6abfe1b738f42c844d7800ac8b0039532952ecba91d0532ef18ef2641dbb9cb7fd8df468d72072df90fcf3bde6ec849083bc27958e04bb56a9f725876ddd12a74c1ca9284fe10078ced69c823dfb3cdaeb125fdc8a1d8a1e85f86193d6891cddd8f47671fdc6440459ad8175faccb096c20dfbdc107b5e0af83b2d16021039d0269de2d27b40bbe6c3ea4 +MD = 3f23ed91d69d523db3ec7169e191eef51b02c7c2a032afb54db2c9e99a386d306653b36425262cc60389dcefb7a0aed6 + +Len = 60472 +Msg = 4820af2edf3234ab7e4b41bce975c952dbc98ff83fd8f45ba2490d09e9c3f9793f0d724c5273a1d2bf6c37d0ca7bb98053531bda063e9112d1bfa2629b767e093345919486b1585c168b7450a7cffdf43bcc18aa4185cc310a58116b7cdd2a630a11358ee4b401516aef1fc4e73a3cb67c7daef15a754cbe345a83acf5bfa68eaeb986c3d24343baa5e161b4f2841eccfcae0335b8d6bac4390e1fae6ce399920585abbab928c69eaea962a930754d40a5a74201c370bd4800bc0ef84a12ac78f9bccdfb022933056d8f492b09d46e1a5eaf91dae30bfe5471ac7712f814874771a8130f130f32f7cadb3fc0e56b2c600e0f184a806e24ef74258385dcb1d107548fa67d56a16a7dadd46bf22c002c1c9f1001d80262d822f1715ad860b133c08cbaadcd31a9849efec3f648465c1955f8f8710dd1afc2f4d0d62393ebdb547b007151880eed2763a5f0074a9b479914010f926f551d896df99d073fe4f8dd4098fcba355437fcd28aa3c78193895460a29f8c88f773d695550d2d63b5d075153ca20f5c6b4dabf696245d7497e9f441c3ee87e01d7b5075ca70bd87c52bc504d4ac7985bbf7dbd4afbaf2ac0d301ebf4c45aafd31fba014410ce1337cd1741448621f39acff3476beafaeaf5f267ce325ec1d6999bc6d7aa32bbff0428a2b4d800c2affa62c60e3ac49b807f393b6b4372b09acbf8660b0d6137f457f1d92b865f2c160114504235fd1393b333f743a684a964c092121bdc40c4abb9b53505cdd5c0de35513cb3fc18e58d486f25d7ea190ebd3e15457a9536048d9fef40e42d1913510da5e5a3eb9ca3e5953731987cb4731c9aee8aa7d6d55a02711c873702ada626f08ed5c282ecb1252048b515eccb58fb4d7a6c440f9357b2d3a9628f0ce7fbc89488a77050adbfd480002ad098e222e1ec6534afadf460074e228d4caa7c86ae500fb53de344027c2afa0d492f7d8358ee2bae7b307d15883724420049cfc950b9a0999ba9442b748792c6f00f11ecd8d93a24174591daae250b3b4a8946564847c7cf1a2122bd662c670255c633b1ea241d20044bd741f1ae63c37bd794900d7101c029d9641ab99fe329fad34784f555413cd2c1b1cdfb29ba9524c32f1908cbcb175b308ce5f74893b84fb4e1d892e342d50335b5e1132d6c1ac5ca7a53d2cea02f1ec5018197ccf537d4f9872f3b64ae830616582dd22014beef5c0ad2f3e01d81f5156680237394132b0fabeb674fc0c15be21d06c0b8310bf1f65508d4a69fba7e90305422f2dcf4a265c4bf9f0b360a9537790e675c4d8c8e37ed77fd8893330bd3d3900ec14c36eb9a65fe5b3d8ad9127500973e62c6ab048f38a2f71cb4862d3ed4a64f457e64572c043a244d1bb7842928439e823902057acb1c29c9601e735fc8197d15c007858933f572b085204ad274963021110c017919463e2532764eb5026c10b8dd9ae73059a2cf1e33add6ff5a017bd5eb337908b7b38ca688284fbd3810928513890ccff9e4a1dcc3aac90e6d17d9f72412eca80ad69dc3edaec6f6bd998b20fe7c56a6a91d9372a1c1919e123bf32b5824cce5a731fa03df7474e0278963131acf6562cbc00c865a6cb11cde002fe903e3aa3ff15829fcda13ba17fa42a2b1e50cb962f67e857e5a16b80944e718a693c9f5159dbb960579f706fcaa67c2a3e9beb3459dab96c11d4a06f1db5315ea94524e14e0ced6b41ba90c0cbc6b5b5f954ff37945c9a8f530913e4505f6d02b921715ac8f24549f5ba409d6a4bfd55b745aea8c736b34912066cea15934bffff982dc4aed3ea81d9672a0c8f7f7b90e034a18edab12d21b79452865498f3dbe5710027e8f8039b5788f61822a858f1dcea80f1b41330a0a87b6dc2f5b78e21d276948c5da9b920d6e74cc60b0fbbfd132ff2da3fa4e34c4e8366a5e03844562e6d8efaf72e3497be4ad22032fccd3eeeca9f4f62ae6fb01174e537fe633c04601f997a9dce9b88767a332d7fb6b63bd385305b0577fc515a159181357f9fb2d2545b1337d2167b683f15f5db879d7c2b264d031048b1b98f2f138a6ed694e9ebd47ccdae82cff9fb6021812cb5aa8a5f769d516c69b66f1a8a125b92ae44301366a5b0e826eb8997a7fed85c8907ecd53dc94cff2234fb61ee37fa8750d70fb2d47ec5ce0695b4a4da5402514bd92af74378fcb2bb53e6ce232a713704740e30e4ae13486af3018ac2cd08f5434bcd2c4f536a6e7b3ab6c7f092c8881243b6f65fdea23f992df8b2270ff12eb9825cdb2b029d19ac12f6b61f180564c16d8e6a0cb57b99dc6c2182d1c2c5e6f4a95f6e9d2c9d9c94022b02766332b25a1a1ff5b5dca5407bd80563878f8d043de65e4c6e7973e07b33df13be1c565a2571ef0020fa281abe982bbe131e5070dc61e2dd669326ccabcc9951beea7a436a9b88f116b80d11ecd51bf93b161612194472894c1fbe476bf6e2244076a55771c072315fbe5b0c4fb65e7ec81fe7d23bb497b8eac8443b02d941f40a67df7d81063329c3b31af22d647bb381e3cc988cdbd8d20633bf8fb99c3e29e666309de49855400a3f53adcf06fa023007cc4c52e1bd3f690b372bd868612b9a1ba1a0e09c60ddfb0b0d247dc564d29b36f0d6d6eece67dbf6b5f7a7643362ee2d396cbe3bda6a60bf503f7fc9408a8b163f1e602894b3239c3fdb6db93b37ac4501eac69c4d4eff0324e61c391694c84fc10c38ba96890ba7e0bf748e01109a0aff023fe840f1a07d92019d3d6f571a8a7e89a5ca5c5259bc9d8b020c0e5682253d9d73463cbb0dd8a1784affd13b496f7f7bf0816f77d6858027605ae9722a3dc3a1a8dfc8140dba5a336ba4c7a81ca5cbcc6206565e4aaa907bd6a21aca5afb97f827da6c6467ccc31b4857d6065dd56a62418299717dd3d56fab092ac8dc07c3883860b013e4b5e716293e88bdd2a66527d51cc11736a758ec29b9a0d377084f3b22991d894c1dcb0d5581643544c1c30168fd55b73fce20d896da0452f2a641f72fac3a2e67ae79e91549f2d77acd8cda404cddbb5ef1351d3b93dfaf168aa3a6a5c28f6bfc0ef890b1bebb093e73c899a632e28a5cb8a0a1600db851ab5c7c2fcd02a5a6d5e550ec71074634565b8026e2d7eb8c00ca684e4d7017a079c3d57aef950348b8dc8ae49c4d1bc18b2cbc693c62802914d0950a49e384044768b56f53a232ba6e9aac5f7cb7c316a58e824afcfb29c95e7130bf9d8e88e5def324f64052b863bfc8c147576ec59d6c2bdcb169cc6fd4a8564054929aaaab070b2bf700cd1faa720ece837699a9bda8a8d186ccfad9b2b826cdb16e2f73be8858d05ad93aeef95113ddfb2161f8dd20b069b16db0f0cb568ae0be79746a8729841d0714c1aeb72280f597a0ee39679de9ad1a94143a884c2a7f63fd92176cb4341ae6f88ce64baefc1f3f3a67f4c2e7fba4a9894e414f61adb58840b102d6ef12cee0cfc01e1fbd3062db38f4b256c68f574793878d895cbc87158bf7b42ea4c641dbdf88df9a17c4c653e2bff98b024dccdafce7a49f06fefff2268fb4da99f87bc0720aaf24835f538f80ed54c962dc0d4b0a9510f7271c2407599f8a44974f8578ce6e1925caa912775aa94878afe5228306ba59fb87bdfe3c6c50bfd2657366ea3bdda205b44c0af4b8195f00b10f1169387d0512ed8a967aa6c9daeecd0d26fd037fd42d09ed43ece16520c93003e4e4e7079ea3222af3a7513363ff95c5ce9b6d7b36039137c6491eb6133bf468a3de5c7fac18ef461dadb3b5e26d864264abc0f950f014cf9af1b734c1bfc4e7543ee00eb5d81a861d721478e09f682df3144523ab5d5960c7cef406b1bb6a2801ecb9dc434b6b91fae0bea3e5ff032d80c0441fceb0299056c61c556b99acd2b1cf2f10ddd9ac10bcdef85f77f41eeb1596041541534c074ec3794878bf538d6dd18cd30ceaa3aa6c5309d420e6830eb97ecf2e8dac8a6eb7ac51085f9727033cd9164c56e6190811293a29673df83f7560eb913925ab6d9a69edbca887efd926d017a44635d7d2b347d387d46246265024a168cd2476abfee1958ddcf975ba339cd502613fa2af5a951c15f0bb356a52b339d8d213b4d1ebfe91a382547f4c6c26998f316d45470ffb5cfc42b18cb483f3fb0bcf592d8669a728252200d637d856aa723d258643d961dd6353ad15abeccd2f294c5ea97381c4a33b456542247f1552d40dd02f4bc1afe573a91596f894291c59d18af0403a3e4a0f72eb8abb6a49d7dd2ad70606cecdbd53ce52d84283f00bc4e745c9949dfb65c631fa78a3a0db82b41ba0d41d08a3ad2d4acda332c208449215f7fe17b0e43c8b0afad28529b49b8268956037771afc26a3edbe70585b0feae40855727de11784865361080eba6a6e9a1d74fd2418f4686319f3a34dd0b4f4dbe0974d0cdb3dd92c6dedd556d736a1389fd6171686db1b11bb0873aa4e7ada82e78c4f63b8f7b384b03e9309f24943ca854f2c554dfa66363ac68a76bfabc16186fb218c628d3a17851beb30f3e97bd836a7e4ea53997259fef58db90a8dd30123ad6b8fbf47956c524d85d2c15f71eb1aa6e9dc820067026f5d277b176938e9286bd472b96ced0c809d08f746f34e8a9914e033c1766cbaf5c5fec5ce8618a1fbfb043f3746697d78d01da769ec3a3e1bb874f8f744a907f8f7ba9e172e9ab20625a4fe201b3249a1b16beb12945c8e085b4b320eb34774e0b9040fdaa7e6a3afb35cb55e346ff762079bca2931dd02c8c50de9ed096e8615d4841fff3a25fc606bd36ed8d949102599544d970ce422c3be63257c8e45c7ff10e1d66e2f7f468017b2307652e81b51303f7b426d9a77620ef5efa38cf5be0634c33c0fce1b07777da00420e673a04e94035c139b27880b7c6a4e4a49a5f3930ad45aca5e22caac6646f0bede1228838d49f8f2e0b2dd27d26a4b590e7eef0c58b9378829bb1489994bff3882ef3a5ae3b958c88263ff1fd69fedb823a839dbe71ddb2f750f6f75e05936761a2f5e3a5dfa837bca63755951ae3c50d04a59667fa64fa98b4662d801159f61eefd1c8bc5b581f500dac73f0a4240075d8dd817e7fc9adcb387761bc52941df467ffdb6e1915b1c6cf07e38cb0102c611983d55e9c8c4b235fa31a4f43d24d969dd88217a3718da56cb21ab5a938976369410874bb2d61258c81edc56f85138a0404635574ec0160596380280a1ddfd12a8da17d661d7e36519c22bb203cfe233d0bd5a427f5cb8c2774ca405d30745edfd216c527ecf0fa414a7fad205a6c16ab477f90172f2a7d596e4f9b1d00e3411ba70ee87b0c77d5de254af7ca7dfbc8c15fc785dce8dcd861c88694c41fab4c5084c053da0c515d8aa51b4799181bae31ad2411e3c32111d31c05c9dcdd4ac500f3f193bf6d4bf5c95276f916a94a5b5ec83ba0c63eb5be1fc153a6d1da303fbf6d0924a59f96333cb5d4a8bdb21644bb2974deeecbf931ba60e6b84d86fa30ee688d832713ee9a3737bab318b2edfed9594618e7eb7a213563457aaa74073d106ed53bbe7aa39f5b609fc4923c6fee3bd045db2c2d96e11350d67a7321f5b8b7f896cac63453c71bb90a49c4aeea974516eab235f2fe05d6b2301422013438678e489cf8c18d85eab980bf2a9b0c8e9795bb2a9fec1e03e1ffe8f441a2513081a8414ea0b2af606ada79913e713438a5f52da0b479557fe7a247776c75cb35a8cf373c687847fafea47b6c6ad1f029f28db8b13e1b52be3a31f239dd0c00cc4f7b9102ba92c59a289ffcad4a3dded70ff7e2d8775294636c277f984dc59048d835c51e1192c6e27b3573d067054ed450ac42830aaf78e3e01b263f2943084ff5766a0af7e8ca48590d87722bd8de8657134e5d62929ed45865ac7ae9f4c75609c5f645e8152e5064709e1f0318ec7195d57ca419ac74a9179f68f81a7b5bdf979cd04b6c98818f00173e13a756173a9f6b34038a3d78c6b030f223351744612173aea7fff35258ce59ce0c6300ed35d63d2b085ef639d1b4c2ce88c4790f6f39e2d7d81ca62f3221c0e475d0b9bce7ccd3c80ee247264e97bd549543111b7e3352f2584d3166cfacd517cc7ae124e505b771a3ceb0dc91db893ad52b600702c04c74a4fc159775b21ebe9ccc07a3a1f360de437eb3bb4fe2dec7c4f7f640914347d54ab3d33fc8f4066f434eadc7932858648a6cd040dd5ff6a1e13344569e4edd9ac60efade4dc514a07c6d33ff5d17168ac523870bcea5995fc667cab7ae35664b8367ece158b7c1d894b23ab9544223d7a04d588aa8561f47c10ff9f235b98a5e1f5939f78e3eb69e28c842941d2bf8c19824c53bdee3f0f07d866284c92da248f64d526f52ec3b5794e9cbfe1c470def19444d9de6c1c6e0687594fddd1456a2b4ced6d75b22f8ab85c13785e625fba6a046523f649209adfe57f1bbf6001fe1b75827cdeb9556f067d92599ef4b1a8ec995838ebcb721afcba8194d8873568c9a73d591a895deccb78c16c8ac29130df1ac521a73b3b76c3ce06c2118e0a319baac60e0f6a7089701647b80a1425dbab5053e410e1a2379ee9b7ae53bca7e0fb45c4a3a7a6b6cf5b1fcd4507319530b803ab8b1004d0e4f4d23c5f845b34fd5042df1ec8845645f55bfa1c67620ab86ffa751d8eedec052c523cdd8db1db110267c0895c4b7874a691774414efacf936ff58a371e51f22b03160315707c2a3797d0feb4a4446e2d78bebc5f420a27d76d8fc24a33291c4e7374f62c9a4113b1c4b734d7ab7e519ee0fffa8f13c15cc984e0aa80b1c6972392bb178cad2f161559b95b6d4eb80a155e65bf4f28d2c6c02292a3891edd0b50ed7307c44d78a9e8c331d2e402a3d0072d8a6b1de5910e71e3103da1debed14ce0172751efc037927dcb2bea6ba44c0afac88e79fe9e8c5532e3e989760e917e1721f6b4089847b8f5efc6ceee4be68732cab9f1c85dd8c08e7827ae792eb46b0f2e06692c6372a2c81a54200f0d381251eb4e13d7517c6a7257887f6ca1c2aa1495d6ffbfa4211660d5248c426aa922f4b4eb3ea00bdfa97b0c8c7aa4fa34a1d3e3d8d666fcdb5a6c9ad8523ce6c23f87b1f1f0b6ff7b140501942ec6ba92e8d9a28c9b86b01a0527e5e01032f40bde875cf2c880aef720acd1301a564565f5725c82ada370559d4f40dc44e924fe7670307e24919cac55dee5f0bbb83d164e5a7c2b8b41b026892f361d7ea3fc129ddeb6f4a37e4b332a17ca568181043c59de8c17b2e5e2056f6430241c17ebd0bb2f6ae6b38b3d0423e408c21a253d30be9af6b7c314a86a966ab990ab9976b164eec6d4e35cd497c9cffbd3d4393aabd30c668c2a3255dec4cf5ce3bbcd1f4d11a9553f9177b47692384e0c4e21aef63d9f361556e38cca40fe748dab17680c47cb90976c405f28f3c969cbf662ecb864efffe3e78cbfc5b174ab0f27fcc3678dd1f36cd26b371784dfc9935b91866adf6b2e684ab261598cce5ad88101c3f74a690830424ccedacc07f802ec220e76039d3c22fed903ee49682e8a64badc3403dd49725a59a8db1fbe7f9b2698d77277f2c394828539fc6dde7085318c9e9650cb31c3793637a1168fcabca96a93d8b3083f4d543b561c609ddb6985fb6d96a79f5b743d570db546d853f7d31ba6213b4a19ae126ffac6c822c9a7c08bdbcd7ee6112505309d900744c5cd422090d48744ed471b978a741b09c5b07fc26ba35d2c0d566f5769c9fe417abd551de67b0d6514a8fe46a7bccfcf5a2412139fa0b8ddaa88da3fe4bb825afd48aa78198d54374a3428f1b4f95ccfe1633603ea5e1877731ce45ea0ed49fdc7efb0a39c73f247d8893a2d44c25898060e4a27ce240275f1b30c3820f7aba65512f634f1c74df35a08805dd9a039c44275ccd3cdaaed7590cbc050e7332de14f72e9b0bc0fede64942ca07e60b76b0f14a4cac6b4b5ff2fac79f3d6658573af150098b5db6587d20b845bffc7ca60accfc3826299dd05a7a56f76220bf9e1ff56ae4495942f4446ae9a1fa7f6c3e2e1ffc1dc58b1ad528a9ca674398d1890cc5f3e86f314e67c8a2575d2c0152a58784ca7bfef23ad4e9f3c27d664146ae8dedbbb451683119664171d5e904e882c37607c1570186561b02af985ebc87652fc702a6b470839fc9d2c9ba960c764c5e7e048c523b75ef48311246816d0c434f0c695dfcecbe515fd0df69d77a8468b507713b750291f6de297b1662c54dcf780860389f3f59d494b6236211f1ab6e639cbe6d33f9530369364a769777e470475587d51feaeea0051d2641c9e453d3e6b84c80138241ab55e210e583d748cc296e30a1f361d52a2d50686783d5062fbaf4bc22982fe64540d76ee1ac75e3398add0b2dbe46b5f97a0a6a71c4463ae85cbc8db33664a967a660a50995d65c4f080c67d6d50bf99487a59ccf0fba8a84587a21b072c31398e33863bbc47b1c831d96e74bdc242871b2ac7ffdca944d8a1ad818a8d1cdad4fa3a91b86bcc69c7c27e709eb4821cb1797a9947c89862c602030f31ae7d6def2544d4ce8e35b5470d37730438d7749fcb3077ad9c0e28fbd153f117509914127718f7850ecabed279ce1fac320b72da771508374054befe7463d2445cb6f5c65880a1e5d1d3acef6e091ea08b6440e9e7f1f5ef9cb24d5755fb58c1bb1d389230427af7c098a72754b215e8292b0354818ce5dd996ffd8fdae52b95531606ff67272bc2c361d600948faf8af6a7e6a4afad81081dd5f52d6de8f4c80ee8879465f75c4ec375610494699290d9220e60d81e7178112a5eb975cb5b63d3dde2d9937ab4a4a61d71bbbd076601b9e2a61063a55c355eb75fbb5a57076d893b40565777dccb56a12eac7733d4e68030d43cba0beb48eac421bc8354a1ee1a4bc8941ab87ccbb949bf5f2bb383461554c06d4417c5b89f99cc445a8ad0ef6d55a31a45033badb95c4c5c3f501d296096942a6993928d647d87d946c03d766aa1f8703e21c1783d24ff2c1dd24798493e75fc9145fccf20ba7a05afc0908ef976f01f6fdab7342ce7fe562b01ab99b8938d6a24f7a987bd96ce4ffd50703c021eb3ae3ef5c5ea70ee7162d3a5f13795de04fc8a6f41bd225aab3f9939858a6ddf68a5153c92a1f08181d87c85c177c867023a2c766d77374d385ee942787f2202378d5b75c76194e855418d6ac1633976aead70d3d5bfe4b99e335635f1230ace49ec78690b32446a1725701c9c02d15330dcbf50209c11e4044749d9977f0b8dc64dd4e0071de850ec0a8c63f85c7646b14f82b3f617a617932028f5139a0e85d635d7a2632968e3fe7a49077e7a1196598f1fc501368b9a73485c520c7dfc009f2ee976c65fac6875fc0fcfd5638b8c4f23004ee603a9b5cb474eb82b2ebb444cbf7225d8c59d2a79194684a51fca70bc938b165086e6b0c3a365ee18b735990371da7842662170305756ee98b7b88ac7682ae4e5c62bd285e608be7a1f5049ecca8934ac472181c541a8d554323c21992944814dcb61653697a1eefa6ff69b3154e724bd7286a65e5ca20181983d7e595e40b6319d6eaf013f97473fae0ed6f7975d0f1eee36272432ad3ac8f2a5ea3090884939453cf90c655291f2e48043691a51bc77c31b4c3e4a3247d1475bab464683020ccab18a7f913a94ba1a342aac652cf46ffa1c5dd42c97f1439f4709c20899ab5334b7ac834cb717405711d3eb00577fae9920a110614600c602514ecc5e320ab58b35a5401c31e42ba301854c743825ddab11611870a53c047961c08ed1b6e9dbd812bedd8c10c12406ec89f74739aea435d6e514e11e6ca20b5fa92de88d0e6c23383f8221bc77d389b8281504c1e1aa4157752d3d175a4bc1334fd42c204111728e7059659dcedf334ea7ce30378798d67c598a0afacca5a1c5fba923d54c72cffc9887df1b8df10d96514955056815fd2dd855d32e8b58b6fdf4d45715f636416a0137179f7eb01d786daffa924ccabd523bb31d1b5f0d05c4847e50490606d1c0f18f968f67c56ddd4227a846fb5e1ed3cbce72290f6c9800f1cf94d7458985e6b1b7e35511d705ab19dae6893c7a2898cdce59c0651c769b84eead297b6867c589d88657448febcc3af03cc3d9c6e4898cdb5b4827c6a77b850423a56f4a7f43c01a08ffc7952926ed90325c98e9598f4f1bff291e11348a3c387cb5ebd8d349a0a4f0b46490c7a37ae251bc428c8f905db9cdcb12a624aef0b342c0b5ba6ec06f9fc6dde128cb2a280f204c9f568f75ffdb4d97cb2c7fd1eb9cfc2e9697558e763213e407063fa2413f287276f060277daa08f3104c4dda731c33665617929dfd865d309ed22af50b99ef9790010a8d1f4d8548aaae97b1d15b6ed2bde32bd34cc22f296e33950acf46ff24b632968e2dec4cff62f9653e4d8035d993a32b1aaa0f0e373ed287c9d46ee07fae2b0b14eeb1e67efed5bd692eb410e39ffe9759619584c2d857081a6437181240937106abc2da2f46eca91abe1e8858aa9d7978b77b1832026920e5c5cc31443613d14bac47b07904e3303943e724a17c28d85ef5ea53ef85b0d8124053b37c575232cd3969f1c3fe655aae06366d24dd46bdf56209bb6129d637891df524246af99c739a4f2477fd1830614f34ea4a959f2f244801daf1b5804633a4d90ea338af17251623d1fcc9a4 +MD = 78f7415460afbdec88f4e521815d4b95e2a1c0f74583ed8df019dae5b918f0ea9d6b899c94b7d5028cdeb0995f6a4276 + +Len = 61312 +Msg = bd16c43e2f6bfb34c0a5ce78f736b53999e6279c8425a4b1db9ff9a66312c03a2d5c267576d9f196cbebc14e71da952b03df92575d7b0082b90d961d18a4f7c9e4127c0fd34234510ecb290093c4e510d7db35a9b0a12d2073286c2559d0a23e285e4f740f4ecd4bd16b90f8269cadcf5e0199fb473e337151170527f03ec7804268250bf2a6c36e5cf37d9df109f350dd7a45b3e8fb1b5f9a03e989a39571797a59893e43f21ea1f68c7957beb4c17b9f6dc13b5c80ecd198139eb53b7da51017590074ccd9e6cbe85e0b8e53451e38eb0396f96b74aeae9170ae1180a06d2d638f1416530424d67b90bbaa7963136f08634b57dc806ae0ce41a10739a3d0b8a4244c8aa11be0a9f44a1113f8b6a6083fb768bb794b274e97affdfd3031d79a234030397ec5202c9eb6963298e7e1ebd824768f087eede034e24c5d2bf088b92809498bb1aaee47c0f9d16d219ecc001bd4fc3a52c0c47eec01158ef388edfefaaa1ee9047351e2a13e4a2d5a826e304fef82241fbab5100835e1f850a20e51e34938b93dc852e58aab8adb0c3ccf61be9c90b53713c77ed0a5370309e6f19b290f1d642550f738c36818ddff74f77cae04af55617403b08c7a9f17e8fba0c21523575384b44ac4949e7c9dfbd1ef6a684f666c67856f8f84dba19cb38a23b0efad6eed229c536f45753f81c8fbbe1134a43e620fed160100f1c6fa333a804bffd7e899c6ae19221d14e8f32d9b6c5b592bbe9f2255fdef47e3959930b4c17d8cc74fc13a95a4c665a4ff5af459022f210e6e8b67642e42a2da97e2729fee2de0a52acc44f7fc41664c0d1ee3dc8774d272d68fa8c3b0e059fe523bc0a40d43419a0222ad7d2a7d653599a6c3cd0314b5817f11ab198bb3b476500de36b28a6f8ce5e2b3cce3560ad862b5c5bd37ef61263f07b390fc7a2fa6b19c1a49b46404d68c64ebb9325d485684ba7759701023140b1331a4d6d94750433bdc9dc70f88790c2f6f07302c0340382efd7c09320593f4ba3167a85736b6a286b1ad8adb6f070db88a517d50b037e579d4af73d38d4884531f53e152625c4803261340562ce2d986da026a69f3a02531796e40632e84427477e432795eb3bc179649b80e56af2820daa497b6321b6fcc6832ef6f6de9b7a4c7a2ec2a805f775aaecb327250ce51fd08a285e3fffc3dd12d97e156dfeb4c4a8b2aaef47ba1f232cc124010bfc2efa1f0a6a561b1e507b645f7b6c7d8fb890c2eb5db55a53dc5467ab97167f81f69860f0b76bdfc4866022dece020fdbce6304f0ef1cc918558fc372b46f6ae46583fd05b9a6743a8d13b61f1edf0c281fc7d588092c7c51b35ca8dd2213b26ea2425c11150ec0c88c1c86e7140c5abfd3439d7a53ee5b461d437eb68a0a4164d65de7dc76acacb5ab04fc015890e3e81160c58f74694f3fbccdadc3935dfd11285c042d8286204b14517e3491738dea01a4b38f15a53e83b7819dcde613d0bcc1c81dcde1a705d0ec8e764767be420fcc99d042ddab125b37e8b69b2a34a1acc82999853c14418d5e404b038478e99d9ac7846f7582b10f648861f708c9572a6605e01b3bd6beca8ff165308da96add92b538e0843205e765ec04a728d9dc7ec3e65a5785f662cfaa282c962d59ad17ddeb525bb3c4f42a63990974316c17f006536f03c37c17e3d56e08fc0a919993a2f13ca9aa3f68228519d626cc8af0c858d587e59c6ec44f384a612bcc5818980a505c9210ab4815f4f2d585a03c4f4de0f30ac7b9d6515cfd449fec1cb7126f3d8f1cdd8d117c4cd7af6c5856891cc8c735606fc1bba54f49e42a05a2b56d616236e354cb78eb0f57d50569957a3f813423f1a55d26aa7347b36a3e055a12b4a2cd18bd6fe87fa69cee077e0616a1c050462533351e470f1c38c861edaee9b024dd25e124691f58cd82da60506528cd422565e0f0ab646af3fbaa3404bada9f11ed71889004b36e1317e6d71c6fbdef3348177337d5eacdf2857981ef85cec7908664795bc02430953792ab123d49704b38a5b5b1a5bf80415d9e0e5917ab72ca2f667e2ea658e67c6948a3d9d6b296b17c756e0722cccb090b7fa3e8795be6e670df5db1bc38d8ef3670881a42e2aa8e9cf165e055f9f67218860a44b2c46b0dd137df8b0cac4e172470227c8abff309217f64e5442f48a30b1a0a16cad04b67dbd6cc649e9d8f1bbdb139a8b533bb4b928931bef9540ac56ca26a06ca66cc1b1525ece678f1e424899b9545cb25487c777695127c5185ffc488f3bbb96d3852088a07b7a492955a0f97fdfcd57ce4c259ae5889d30ffe7a9a336dde9fcfd5333a6ee47f2a66eae4d70b3b75d922d548be9942cc0875c05d760ba0168573ece7353a4ce710572aeb69601557e2fe6334319f1b83236a12d1e078530c7241c49581540796604c9f964eff544bf5f8d8af3728aa562ad83bfe61e250686e21a766a426dd36222c8f0e0d4ec0f81cf87ae05a9cb8eb27a6840b80b15dd181fbdb822816966c5ce1437a2eb720075ee693f021630ded21bc3521c64d43efb4b7a910958ef9e21852030339a13d1fc4aa690614e5710221029667ba1fc96b0e3d593871f5cf405d6717d1b774e0e9542d444bbc8aacd22e60ee06e48db9ed9775332446b3e02d3408c60b3097cf0c18556ee7a0bb850650be8725cc00da1c58487ff99b30f452a31d59da2a74d331180b2e0149dec6468f04a7edfbe1f3a1589c84e2f9d3d357b58e18652f72b3005b38cbc13d5d3539f41a9786f896cd23a05b8b05e70644e36f434bd5c6f93920e9c28e50069e9b8886e89f174b89304b366bdc8aed31119edb253a5178712b3aca93bfd62c0bbfdb4e5606c87d20e3c124b6bf9a93ba0032001a2d02cb4252f50791a67a350a6bd8524d16c315c5b02c72227c5d620ada44e60b6b0f49d576faa6a68a65ab05652a9cb3152d9bdf5d3526995afae189667f96e13da17a905ff0b2b9b5bf1563767734724c3197d6b3834a02a299999f6e881782ebe0e5dcd48030b16daffc8c6668207003f492117abfe5449d6410b5b80a71d8bdf312229e522a78fb5de7e8fda46a9782a114fa7a9000499081d0310eabadcafa0389c8850da7f5a7f25edf03d41acd105ea3f87a9fa2f8c618617d3613d23fec37d338515ab010b896e9d93f9f36fcf653c9734493d339865249fff8ebe821d9b877d8cae04cb17870113e7aaec80b7daa0dd39e159bf4175612211edbf8570aadfd12b84883c02da95d767ca8d7e2ea88f78151cd0311c24d434a6e8a08c9c73fee4de2395d25206856e90d366c69881710e325621279cf5f65e1b2a1235f5896d0f0115ce3c899d682fff5008e889e7fdf62e17dd11286b3ff50b0c74e0104d92e650d591c92df1b6b21fbad452773e8ed674fc546c52e7299fe31a5939714318d139ed711693c5e99b5e9e5992e5079c05835e37b7b11c3bc53fce3f909d0c577628c7ec837f6c79325855293857d5ae29e5c7e781a75cfeeb7db28883f80be73ba9ef74be25680e1d7989a3a1442b4dba28c3f438ba3beba92941c49216c430a839deaa253a4ae0b35e96597c4e7af31cb8ccde6b7e3b7a54cf0684398dc7dc22552fed373287c99a5425cb07bb3726e8026d269857de2394db7b47f8a1793260882dce8292a10149169268f22ef26192b20f3d2dcb868fdfeb1a703e166aebb95f82ce85cf1920460276c3ca2e4f2bb3343da2ba6dd7179c5a5ead98311f60b327b95dcf6c62bef7a44d6bde1d7ffdb00572f7cca3424360b5d25095a60929d48d2bfcbdef1025f47880b1cc9137401fa2499cb3005aabb399fff994c9aabf940c653bdfcba41db2fbbb46141df7ab68971c122c0982b90b5342093430968a8801ff9bb38680dec9aa478923082398015084f886234ce3ee9e431fe26f3f23172a558cb7a459118f00c00b98045d8ea06afea06fe23bb4c3b76dae3dda1701c7d1f19f8aa97f2ea99bbf4dd18708079c42f3aa27cab1b4215b4c2494f5b0bf20857e347b0a75be7fd79fb07e04b58b7b750e866c41516a9de6492386669eb397d135fc274bdf299840ebd3ec01d892b47d99c5abea9d308fe4ff1b90912377c431c3570df21df879741e38aa0303a5ddd94fd8553ae7be7dd3d88d2209f1840c23a0c59d71a4b399cdb15f368ca94d6df47b4ef696e35cee3f6ff8d9458b50f62348c8645f15e38fda5fa820034bf1db7bb69a0e92f2a467841fdf24b8537708bd45efe12ef3f0b20643b3e50b6e2bacbb8c3a1bc3a81d604e72a082e6ec5eca5e02ac92459173a6fe37f304197253685066af9c8d76307efb12fd7255b880a182197f0657a0d4e50e96f5eb921b1184c6c07b0f74df860a164b4671993a7524c5f4e7abc994ace2d3db3d2a19aaee887b342cf30e6676982cb60c1f05f4b4caa62f76f10fdf5426da8f294e24b442fa0a3c25c5ae8d9aafbaddcec94079c8198f139d84bef373278f2d4aa627c9973fe0430625f9c75ac72d1cff0ebd3c1787fd6bcbc54b73827b6e3031e0b75d83f099e33e6264a64f65000e2d6df0ae3b9c8d72923139d1fa98f4224f8c47d2718293974f2973acd10fe02bda557f629cdd9bd281570e9153e6bd9e23e74ddae88c69c9a8d9ab3d983e29f07653addbc3b1c4f609b53e24170b26ee2fa05de971648904ec017ffb0d6669f691e7208c38bf7577abca4d1ccc6cccacf335ec6074b17dd3892f6647991f1c98ad9e6bf6746d49b1d814bfeddc821b54ff267dd28ad9b4bff0b1f2b5d3deae6139e7e4ad0f31ae5f2f030b19dff19f70a3e086d22c63da14c337b9b8361bbbeab7322f0251a31fba1143c3233f21d57aa1f29bc1d1e63a9c613f0fe1385cb19fb62bafa8f4381a5d1f255c8c82a939ed49db213403b772916b2679a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a14186bac3aa23a11bc1c15d679c2e520c60135c075e81112782cd4779ee9ed704e244a0b7df4bcea00c505c5fd814d7d9e1cf653115c707f416201b93e3f62517b6a9ce1028782dce9b5246d4d9e8d08af9073c328325f21dd43ade1fc3d12b40845e4eb4cdd2470e386d23b0e9d3c6867063e7f4f0c45c0c81c09805d45672e8160a288d1680a3c6a949fcda4efd40350e8a705da6cbcc28e85d512d5fae8178325662824aabc960b78fd83a508dc6ff9a25de57ec63cbd9d0b7127fab00e056a1ea067ab37a42422ae7c0b839ace04cdedb3ac909b4e0870076e2e3027518ec2a6d1b5f971695d6caf8bb3c4f811784a0558b9a46e5939a4143ca41aa35b0a19788aa183fa64a825f6bd1aedc35f20fa93ad9b4eb1f6c7a5bc6d181ec6730dcafe2ba8df353eab0b0e70af626effa55c1332dfe4089f49016a6ff8b10332007392453a6fb45fcc786156ffc76d8b5bfafe88e608c4cb2423a8b5c475ec20989fef57d4b9ea3082fa99d07a91318adb33d0004c2198f2ef98e1ff19d1e3c73cac6fe41642595964fe126dbe347d66a9a3124970c2d7bf11edb07c57697c9e43258e6a6d9d8452f91f658f193583a72dd54fb502611388217e9eee0b8128fe6297e56b592ffd85a5cafdd53a28f6d4fe26e2e36f90ded694e807a4b4dd7b90017fef67577e279a019d55a09f6349789134764516b68c22f2968530d1b2e6dbb64a16dee71c94e882e307a19798fdfa6d7a646aa656ce05b1268222e0c5fd39d782f642866fb7f9a0488e28d11e76e3095557b48d05f6f75704a8fb707b11530bb70822c40c1355e03a53d6ca8866cafb71aac34928a9606abd441aff36e58fc962c7001e563985d934f31bf25b200a9a4be817495357e952bcfe11ebadcc7886f2ad5af3f29cf1e1d4d668d70b452a8c409a112bfa84faa5702160d4343875caf335a3f345a0329076886de71d48b337fc2b515fa2a30cd9937898276edc300bf0fa7b8ae405b07bb6836bb1059d3d33db364862d0449875834e2883b21a1fd058663229421003f9f15202a358d510e66a2576c407fc35ffdc2c8247a2649d9eb5f3685ce4619591d36ec36c8b62e6f625836cf1ae1c6deeea9e3601b45e41fd864caea43f7cfde9c9542e4b11d917b999da8b8a572798a94b1dc4306c69a54345bc458dd7c4a5584f8c83ed80aa3bc7438552dc87c05ee57a25bd524f19202660dcfd8831cb1463c28294b25c48cb959f3e6396b45928fa043071f5b0df5b0d84291711d202c392eed0b13819573fab19403e1761647f7d55d89289464eae7f1c2b22b94d0e5b7c10e179fd2c38008e5e4532fd2374cad60b888f9b83c9a2e1954db0ece7401475d55f4f60297dd6a5bab7f2a65f0ca39a71cad98adde2d0db8c2b423b454ab726a884a20f759afa87db12eda1889e9241451a00f5d92ca0c36d2e4712eb809bf5070c3269b51214bb2bd0948d449d0f40d1e0866aea099b4fc4d140025e743b678d5050fd4c758da6199b87b7f7aa834fc4d8ea38a4fc38c70faebd97f2a82df487fb8e38c027fddf40be27b0262986948a4d9d0d8e8701dfba3120326c9eec3293585abaa4bbcdcd2dc2f514649c91d59ec92f480b3c7ed060e3086000caee984c1146e16ea376063d44904327962d797ec601869f8f186f704ee6bf73aebd9bfe90c34b8271af00fbad59cad398c206a6eec437dff1670374df4b9f29dcc1c4476150578498a153e587e22a1d06f7f3a38dd7da30f5c312fb1e978d87b7a39792fd9ea3e9ab1565874e99df587327c6f14dccec372ee5346f875b1931d1cb8c8defdeaf260b73bc5d7c11591a6fe9f71c8913fc66ef25ee3e9416b0acbdb2298492c0e7ce4c44ced49ac935d75fa71a81ca3d7924c91d8704ef5ae25cddffe50390c5dc46efe123991521d413b4f797ddabb9f1054f24b54ed3982cc6a4fd45a7645dfb24690140f795dbe2542243f56c8809d28cd3e3ef78eb3f0e7eb532d1dc8809c2fb3a0dad8c7727bf1d0a24c9cb09bdbc3019c3ac1fb0eff5e98158f01f7659d21fe57edfd443b5e8d2ef027b858b361c73635c61afbf0b819b9ba856eca9be97270dcd4e4b8606ee1a43858108871351eb5306a6a55022101966d94cc0bcb88084f5817f7eb89b3d5799f680e0a7d61aec6b6ae19d2eb45fc77544683809c83cde3f23f9da45d3652f74fde19a57eed61b0ef1b8f3a5329f3a39722fbf2b7e1a776d3d33dad84fe3e64704298201cdf1dbd02383455e4d7cf635fb09d28c3aa804e225b41cca7138309291df5440041cc33188d71ea445676ffd479cfec69e63fb4086010ca6e7e072ea3f697d9d21a555b58a3acc31baed2bf1d04fa04519eccf0ad69126e8046b41b0655e6a73973a07deb014ea612e8caea63d9873922da0f4a38feaf828673701779c24a75de5395e1f830c05cd00a45cacd81dc5384a0f00ad1a74fcc270e256b24c62b0c69c21ccea8b669adfe1f2da58483631a21fa5777a2ed5a160c1eba6030e8f13581c91d8e231db060442c69c4af6783569eef2cdad0573826dcab173cc5b104b6ce6e806790ecff3f493be16f77b6a3cea687577b866e51c440be24470aa8cd57fabb2da217acbd10b6537dee04f72d4bdfcbc0a2eab80ebae05dc9cb2855b2e2aab80c86e2e4519c327d25887db28895f1c24f9724bfd5cf6393ee0e47401c1d886c065d161c25ab66c0c1860a701c748575eda15d0b0fca72657b598df274d23cdf016ddedda005fa243930d5b751b043ea800abd222574b4dd58f425f220c76e19e60060ad2a7195b175ce03128f10d22bf1186b8e7d95d2026d2735c88ac5c5239e5cc4172bb8df705da8bf063e5ddb40291490d781f573dca23ae6fd1893e90410c933a00ba28268da062f1dc65f052f0f465383985b4074e0745f1834fb83c42391d5d233f723a1d22f7bde8fdef9028af5dd1c2990e0d10d1fc9a145c33b6cc1fbd134097f6d242f6cccd101a25ec1846a552a9e5dfcfb13814b20b3b4b802d14e4f4ef60205f8d7054a7f8572dd72e4eee4335e883cfbd8e20e1ee596a3913ad379a963479625b4421c6f81181e1f92c7b2c1d1d947d8468c39234531a31ee6d275ccb617c6b4ac6a6b295f5ac8cf753de65b5f1ac69a44c6f5b53a4c61b3bc926b3f593a3daca9c75e368501838b779aa98a7011604ab9d76a5e2cb18457a45d848bb278a415929f1e1d5dd5f95a7f2422d46c87beef8f08bfa58326b5138679e7372b99a3f84f3bd2664d9dcf4476257ac4bb458891ada11d12a8749cee4a2fbecb2a64e15cc7e3a39abf23b05142e3d8dfc5106538fbeaab2e0163e0f0d9c72ed019a20749e4dfb9401a2d428acca765aff3b3fded612a9280f7ba2a21198961cd5f1bbcc78d763be0c6842df6fcb848bbabf4f9b7c7abf991f343218af3bd7f4a6497a9dfaaf151032bf01a9dbb60aa8b569d019f15b309e75bc46e324faaafcf90de769824982530b138b188efe5b3a85d74bcac338be90c9806b82116991ae54bb7cafbe1b3dcefc02699be81908a992642d3e6097bc38813d1a8602ed2e813fdec4d0eca8aa1c8c0807b475aa958e61bceed5580cabce133ece6f6819d40e20e43a8dbc7659a44190ffe2c60784418a3e2b3027ec2fea15f2119ebf6424ad9e685836ac18befea339bcb747d4477b62544cdf4eca9b14f0136e94874083080ed7a85c19e45c94276ec8927985719480bbde233b3c8fc7480f40014e539175f8ce957ea48db50d54bc9e14e99f75156bc159ac8b967089744230357301b29ff299ba1eda595ab2a18fb7bf0676d4769a0149fbae8cefd40b58b9d193df78ee72e590ad09fba03ca464bfe15ec0124081f829611274402f83bf37463f4146e9f01e93a9d1d947f3b3e7e13c50ffa10bca1262ad65d123f453e25303c3dbcf0b00c13da5c06694807675f6109b8a2320c8ec901107481ddb226e77aad00353ca1b5a19213448285b528b591e8cf3fb3804e33c3c753d704c45b02fabd25c87bfa665909ccbe275fceeb474a6b3d1abaa0492c1903e25cdb05453e577494bdd5448605e88e5ca0fed917de3599e87b70f5e87cabcd095a8bfc4c6239da355c71057d6bd6620634895e1442f97ab9a9fd0691ea202cb0173b31d9384af8f0ec78c8b2547c4ea42c28e6493b3f1698ee885bad402029bfdc142d52862fd5aeb711128f87815d1ed005f82091af766e90397da54455cb1ef13e77211593795503656d7bce8f945c68451c000bf0a121d839f3dfbf641ab69ee097acad1cedcf199c60deef4bfd473c13da5173ab9f9b0eb045c578f81e6d2b23165d1572380241dd7421b35f9fc59495bb7c8f8779c27ac6fcbe39b7e02cdf2e7b9b173e62d8c3502faae27382bfb7f346e7282d368064a19f31c84967dc042a4ecd79287438e61e1ce2442eaf1eee5604fb0544debc136cb688ee57bb63e03e185d04d77509f36fc031a0392dc881e67b20f0757a5ed04dca2a7389e5abbb935fb280f46d35326aa500c03b04a7b8ca35bfaf68104de36c627f1f86ec9adf50ae34b52665a3eb3852b56add3da2da2bba3e0bc4ab7394f206efbaf7d81a939e8a4b6b16633b66004fba67c7dfa031309007cc3250b72b073ee20b83b2121ea57d5f696c72e5eaeb25757fa0f28b03024180ba590901efd293c0dbd38169c98c0ed878cf9789c1215b5079117f4a99c855139ce2dd39297c8cf1f28e4d09dc7cc61e60e7dc0f31c979b11fc18cc53bab52273c74d548212cb2dd185d1ed99f9c2b99e95d485f830c0702375924e431d3c22360b8f7141f0b8bed15e8fdc15915c7b2dad9e362ff118eaa8a804c8fc2672c71d1554d866b41a187b0d6f1a9540e22cffd02b6feec019611e0df0eae378f197857f4df864cf57c15b2d00379d6b0c25a1881c81c9403a59f011d7129d87510a0b93db3fd0c50a2fde47d3a19282231b9f4fd22a53d4045bcb4e37de8ed3e9951c1d7d3d1f1799da90b869e72928df756591fca7f30dffdd0c2d93bd3be153cf3356b47ec4498f57ff292376a5b199a970f8fca94b5095543f4a6b2d3932082eedea015344cd730e9604a0eeacdeda4e6ddf42aca13e6d67d10f3ebceb387f2ab841f4793535cd84d1c552adb2e329daa8cf7f00b949d07e7de67ecad67731590ef90e5f09f4f7415ef5d9323c70f0b4ae43f263e7e5771e728abbf59f70c7106e699f53279d98da8a10752ace0ad7830ad75d34b1a3b9ae6b4666cb9ab79907633e581432922aa6efafd6e5cc1346bc3af400019b0720c4d4b41f9b4cae3fa469c1a900af75153cfc2e7ef1db1cb6d6bb249b49288234f82b5e470349e7135e0eae12b6f2b8e1133c06cded6fa9a05907d37f79de977e9efbaf6d8206d4ccbaae5e1595a0c036a02bd35426fe2cabb9ad9b3d1221d9664fa22203a5f809b440e54c322b3e3d5e8a481ea23cfb28317f28e654b0a6aa7480db4099ddb1f872672002e8e62f82f1382d43289e0b1eca2fe64f46c3b19d21b8f3959097b9238fb40b2cba650933772027eb57d89292ee32723093d9e714167e87aba872720d54adf30427163fc158d8d461c06b2607062d5924bc41bbc19b37f3cd21dc712869cb7423af7847af2ec8cf50f2d439fdba8717a630b9b408588be4a49d644b0757830b25b419c57f618655335f9252e973c61a3f81a0447ab6d0c6bc8b78442c766b2474e5691d94898822837723e55cba60fd5b3f74017b3ead166f7ca7010a7eea5c8bb3f4d4911f4493cbca0775ca06fe1d83cac35 +MD = 095a60f89feefa7c107f12675a7d3b8986c2123ab94b45984892326237e48615cf50caf5e5454df4ff0221997483b749 + +Len = 62152 +Msg = 9012a1a2c268151d09aa4ebc911fffb1d52d8d246dd77bd5268426025802b28b74ca4454dd8671ebf9d0f76b873daba0339ab36b6775f56865e0cfcf93710998158d08e3a1e644968f43fc483080285e61d5af73605bdafedecb082e5589a4199be25516b8927467f58ac31c35f05c338866e704fe8f10ddb9cf39e946536b562e5293b6c792eba6502db6ae3d953069d0d6c5e6e91b814d1f74c8c60fd64796f4642a8b79ec8f9bcbb53bc8f1788c4760acafe0ca06139838411e8e581b1e2318a0825d73aa4a8e8ba9bc30f9a0591461700fbc4959b0052bbea308c828da43c08e03f460d403c6bb91a0affc157d19faab4c400d1b3fdb2173bffe0807613f15b71618e670a28c81f64f0da3e0e29e54e4ce35bf54a86341e9db36c0c09d5f3ea22190ad880e28055e311295086eea96a3fd62060dd3e5b4a75d7a975974ea63d78e255e2331e27054ae867a950b47e97041918b4da8a8a135af9035dcd02aaedfc39fa14af201ea5d2e30fc90a0fb75d40288f61c0ff6311c37404350986545412ac61d0439cf9a0319d9c100154f6156a810ee82f0158be35f5469beb4e4508529617b59ee92a9cdd74971ed528bd67f9bf11b88334ed9128e924e2d0beff8342a3a6251fa933f43d048b55f3ef7fbd543f32635c0e940322bc49ba587cd64d594177bf5431a82ee6c9e355fc3dbf9e209deb7927f2eeacaa0b0f72f0fc8bef0cfc16e4cb26f9d55141298f4c87ef72e537975a55865ff62541f0bd18c262b0d4300e25e2fd9b6012e6e862736291e3f8a8d097834d5a682afd87f95e430d5b5589b8034a3a1f6782478a9fff324969f17e21a13f9c708b319a5fa83002ee46f765cefd5f41084445cf9a684e8b786d66040517c91834d7cfa4c24a2c86880c40509d7490c6c89ec40b828befd2a166acf6f56bde2519c66ba96a6fa2425cf3b6d6be299d1fd2cf9367fd5b61bc470e5cb36d0ded6791df8c14b2893fdaffc5c164ab6cc2d0d96f2a814557328ceb9cfbb5f68e55442faba78335176394c2daf686efbea07e2ee5ffd4051fd0d901cae09b0c5dc43f658344515caaac2458bbdcc9e5afc46c55dc99dcb715db352bf0c1cf290ca8ddb62ef91bb3a377ee23d0da8a47a09d4fe0bb7f07d5c9a015cca705cec70b819393d72c5eb4a26576a6b276546051998d51fb15e1ebbbcdef5666331680eadcf5a1445476ea27e34273f946c4da0357a92c13f4f7535cc3467bb6c032c11b197850df1810ce947fc5fdfdb2480f563627c1bea2b4b73d0eaf8f0133a0222cc590150fdd98cc889995b7384f4a9acad38dc52395a681cd3e8f12de03eb0e907fd1706f1b9b8e64df2632418468e6d1be4fa91b54494d9da169a9c5c78fe0d696b0f57568856ec9aefbe191e81f9dfb44f1efee4519752ef5c3a620e4eb637fb8c316ab2ae2f817978b67c1e0cb0aa805f90c150ea382e19a21aaa7e299e0ec446c46890930b4ef1759172a0517b7787fd97038175401661d0839a3572803bcc821278759fb2fa0ace98252db724eed2127decfe5c78b1cdcebb5aba8f22651b2961c3eb3aeb2ecc6c13bd4ca671b6688488a34f05a5a868840a1395ea4c35ba21fa7179cc7f9240354a6186862c78513d0151fcda92a237dabaed4fe9c852b05425a9a8bd37cd6d12843a62c01bdb9623301d8d41064844b9120f6ff65d6605a82a93fe75d9885ceb0b7068ba07883e205c308ba4c842960759a27d78d216c1075058055c2d6a13a9252a20ddb726511bceb17e6aa13735aed8cd02d7f00ced58e02045dafd1c9c321b901391f55ed8fbcfc9ecfb59cf2a94d7b9857a7ff09183221245580f45ff7035ccc83f87d8d9aaa5a05fbfb8b37ca39d8d8ecb4769b36f5e578d3c2c8e424aba03c74d363b5f0f985d5e1e868b33c17472a5310f205d06dc16a5f01c9f6fa7f4609925ca2f6f12f22972808afe58d8a2905314a1bd962fe37816daa71f8d712908c52d0b5e139bf92b214d8db5f1cf700e1fdcc3e767d2bda5666495b7a58fa226d3cfc16d5292f78cf6ed5758098e261592f23e46d6d8b0c420f5ad0ebee9a7e04c72b30735df327376c8b08ea5fd0ccc32bcd983ee2705fec9f4b8cde0677f5eb77daad2c26bf3092b4660ffcf046a5c8aa35e46b4a8047aebcb7f9b13f174c99c5a6e76031c81759cd02e548e8b87ec1f1093363243f4610de1c721606fcc498370c79c00db26e051cce335eb7aaca57b6942fc6fe11fdab89e5b06cec9d005f5277decc0912872d3a44749ecb921af251731407368cb0e736a02f366e7c82679e7570d4b24d052a9be22399c302e31a58329a947c24124c6ad83902fb1fcd398181ea8a97e66a95b843cac00c81b538414f1dff2d5c94539cfa7843110b335d9229a64e385329e725c5d4b22672f3f4931538b7c8baa995538367874ea3774c46e93eaff237b5a75b04cbe09f6b31a7c441555eeca2e47a151f8130129ceb7e162d1e1083f8b05ece7d2acbd5eef0fa5b400e44f7c9b78a680b4fedfb3c126b9671bf203c0a8c65f69b7be47852b434de9dce1a7883a53ea2e34e0167258ebd3e63bc5fa901bc5579ec39bae55afe1fb4b71f3fed65301f7c43e62af4cda2bb745f701f4962c2b5ceebdebfab5c20f384286c35d4e2ea955a89b2cb12b9111eeee184efaba2220f4c16f58338caef58b36e5f8cbd812748a4413e524f6c3c2ff47665613e447cba97f9f8862c4b9bd7c8f543b515c498a20ff6d351095b96972baa8be47fce155029016238f442c8c93b59c34f6c219129f4073c67eefbb2cd0ada8319eea39e5875c9cd2c0f44f8d5910858ac2f2cb348d71eb3d75ee1033a08a2c55219697a4c14cf93dffbc69e55508d6e6bdd4a61a74f99e45fe7902a76ab8fdd2d7e942ba37c6f40b5384c4bf100659eff051f4e9db4054842078d7b0b79fe351c9c9844e713356e4c534a6411070d44e624ffbcc4baed4a2e3d4d8750da7a57afd1fa388f8fce7725bb45893dfb010aa1bb705e94babe8484f734d1ff7380df47dd4e89153876f5a1fec22de052cd5ac24725868639f561e6d3e7ed5fabae16851ce9b910a3eb64719c54b4a084eeafc84673c721bf2e7cb441db2c0a095ea7d7ff704afa68883df50251dfe727d1941437dfb2ffc0c63f8dcf933087031f0dc11366b14aecca0caccf6de23ca2028236a9edcc68d55924c3eb847d4f2f7bb2c0e7217e8aa74d3b1951ed7e099a1e04c00b1265f56363c707144374caf4d12167f95515223e7e53cb487505e666709610d9d2224e015280b7d834b9a2e9cbe426b86617aa08d9e12301790c4b9da6b0d9a4c183bb25b1fc66b5fcae3f74d8857da2d8f89a9cec5dc11b8e13b1a62cdf6ada54fcc5571e94942bffe5293c635fed57223a7c61224415f5189eb1267f9c4519011004fbd4e3b0a8a2d0c897190de623d64fb80c181ea23c9d1fb2851b5208bf5a4fe2aa91644ccaaa03c61b560a08c769bae5e43a57e650a0194e588cab265bc51ef6d9c080d8f069f08a4f96ceb580510e7e90058a62bfb61ddd0740021e6ce60fba1feed3e5b867198d9a77d68d0d20bcfa761610a7f8439ff717e1e15161119494d368d7f3812601588265bbefbc6d48e22cc8a51688dd021500cee38fe6ec402f9aeb0762f92b2a73adece96e1c7b24be2aa9924effe6f6cf688362fa5cda84d2ecd1ece47eeb07575379e988bbeef2f6d64572a1abf5e08ea58bfa514170e5372fb9e2d890ea2a8c499926b0094d1614d608c0cf3b9e51cb4e6514051323e3c50a0fa3cfbdbd067ac6c74b8482fa1090a08007182d24cd0dd98b4a86608802f4d24f8a2a73b81dbb7180a266c79a6512ac37a02cef3da4decd8af865a801c54f3f061079517ff2c6c051d5e73592a5f37f8c467df05d8bb690d0b82368159d4c96afc15cc589081539b740765b6735bb911a447bdee8e42dc9e904301f581d757fb937254e47d02f543d9ca4b7aca6e3675e34a71984408cef50672c3c3da84260becc635a50ed9d963124f2c8c77c0388c491902e94238c77935b685d3ad04bd03d1ba77828a2b8865e83d10d4c27846be9d5c78cbcff84d92e5b84e0d417fa44908f523623b2388af233dff3af3bee973a9badb253570eaa8dd202659e01c64475920412f67e663ab8bf602a651bca71333dc34debaca2523e695159fd00384648ee3d7d0579fa0bfe711200025970b06046a8ae0a72b866cc8bf24c75a5d8c076de5ef2d5374c85501356230b77a9ab4e40be61244bd96e94b475ab9c652059ac0cf902ea28d62d49f0bce1e4f8bde869a674f5cd8a8dc0336d5c05d5c0976844d48c3bb8e13f6a48a3a6fb335f25ee2f027cda6ad14e12253105c9b64ab672dddf98fbc5d2e0d2d8a6b4ad5b0d8a231acf368d809282baf68a1385c255f60fd378afc1958052ed66746696d0a6533dc977229db350c44103e2f5c86e84eea5c25a212bac7c1e109e872d36489c09849794d179579e9b4af9d63ce03f59f8cb26de9da87f289ae2ed69890a0761259e21a2c3bef1ce701f34de598b9947bcf67d8095b6920861eabf95fa90b1982ff0e41b59bd1682db543155cc2920d0a3ae32ea79d469be0b8e91970258cb9391134b8934124a3e45709be715275a773558e376ea908a9be0450fe720c0a9f5e17be456c35ce163370ac11cb5249abdfa8d1ba03869593488b496f0e666f141a9913b1e97db909438794d313c9f86175bc1281113cd7a1a8d43a36ec3ca25e95209bc3b123cbc33b2429cff0c069115e18ba523ed4b41a03688c19b3958bc5f633be456d2fee8e44d0d2cc0b3e8403c14432f63255164884cda8e10c7a1293665be4fdc4a709b08611fa910b4b317fc7c9e13596c7e471508df4569ef21f0e0c1f75b55f950472287206e799ef58cc982e2ed6123306de9230da3f12059a801107d933e500c71c53785f965d33e1335bfb83a34da063d7703cc1650fbb6b2f9c9b7840fff139f62ead6d66fe1eb4fc39b94762f016e5a3123b11913e1d7a64d664bba3556f4448e298981f25b9ba6f59efe1dca29d738ca1b431894632af66e6e908268e82cf5996c14988790bd9d3e425bbd90c3ef5d845308b15d103f37ff5b2c88f5232c37273b1e66aa31cfa7201e33c21d60054d0253686ff84962cf52b4864a74b8806dba1efd98d4af40692d9b2cc7ba7ec76bc6a4e8a0e09f54411af3242361f8b81dc470388b9179ce37c9319d3b0270844e43b00ff090828211baaf8cc0476441cbd8d765db6b11b7b7858a1b989ff5ea68fc1d54eb92835ad5b432369d8f9b9c0c59ccfbe4bc279b4cd50d0e7cbd7f685072454dde61226ce18a33a807b4ff4533d9c961542efbe78c5a231c34156d6c7928b0615576e036e9cf1c57bb621fdbe6db554c961e2f3aea67749b6b2250856791e715ed6e3d2742d564dc14f17daea9d0d8f427143203eb9f6a229e5ec941804071f2129199dc814fa59ba0ed895be15cfd2e839b94b0f4648c382a35280f77a6b98c419b96b52990471cebd0d36211c21a22383ed7e0b9594342bb4ffd6da257562b16e6b45fa039d1d65225dc3fdfc2b895b1587c019ed037e8ae09c9ea84b4a074ef0d632a89cece6e707714639fb160ef8b82e1a2198bd2809efd1de4b35150f0567a33a44aa1a53bc32f0c6bd620aba62348a920cdce9ba0ea845a0aa2bfc003d9a7965b6764eed4c6b834c71792e1301514433c002afbc03d4a1ebad7427645d5201bce648b13a007cd2df3d87aba33ed70402265138b74f3b8cc83c5abfc2cf57e346bc686bc43e2c848709d6a9f27f8d71092613ac335aa5af3d3f23eca3fa71c60b211da3136f42424cbdac4f862d3c344fa98e33b68cdab1559e18d58e46685214fbb081adfc87b3374152c5e9b1acf5dc950cf3ca4da13c154181a30b1b03306834692e1c4bc3804f7d1034a371a55bb9d4d317f605c4f58711a67da2e10b080fb290d2e8c6bd509d592dc43ad7ef0eed4c2bc5c31c0986b2f4ce8cdc004981125f6d9497d43fcc27bef39c384a51b780e75e25b7fa39979ed343f840e082447821489db3dc0f9cf792a8e5253195fe7b8bb3615c071ccf54974be857ea81f949e26815c448f66715bf95c687f6818ae522719e3aac79d7db262f84a7840d478e891623507fbcd5872b0268e800de04c693e107d74f19563b6a37f6ba17edd64efe9aefe1e9298f57c036f2cfb7731326c64bc1bd5ac5f57d4aaa63180cea4f91293ca2feee053d8d647b8dc5830a600ea3f7f77433435ca8add2f647c9cc5a5ff2446430f617872f01176151cc699285122ccf82445b32c47df5d4d1b85b9ec141f95cfd692813477e5395fbfa595294fb337171f3d720daa15c283e405ec4befea4b3f0af008cdcc377524b75a24842465406c9aa7ecdf0014f1814c89f735f118d908e306798f7b8cbbfcaa60c1b97dbd7b610d017e2118515ccddbae454ab62fc1c615525df9f459705fff35f749ba204a8d0cc6b064215f86d207df60faad9397ff084010adc52224b72c562fa57842305900842e28d993e2366799d4b645f8be0c326c5c1b6c7b5baac85de56d2677bf4d9eb631df9f930153616a0b0e2da3c6763a437ab368c987a34999c2f1435559e32dd98608e1d166c18bcc9e72b34923e57642071638913b2926b612e26d4f92b2346a75355ed384f94d3de984753d68a27d047bb46a76e8a4f61f8fb0f2eafc2348f599d5552dde733c3a86b3f214f765c4f7630e5ccf02bf2e5283dd729bf8bee1e76e797324f5c7cf4ef061a8447277d4873784ae1e2bd035eb89c87af70afd85cc6d82177d4d5f8cf7b14e06604c81225073c7dcf8c670b3471c226a70c567bb11019fd07b57a2dba133b99aecf7fa34dfa24847c365291ce1b54bcf8d9a75d861e5133cc3a74a51e81234e44f074b92814d769d228a61d967efd528c20cb0841b629c9acaaebe8648b750710afd1db1e1dfe34b8a98a37f36163ee4a28ea044ca149c9914f067cf2fad9caf954bb9297dc40eb150326684d8d2e9b1a3b2ad70da7583a626feeeb3295f6a1ea265c65fb1a4698d37ca3370dcb075ee49fb60bee8fff250753cbbd8a267593c86edcdcb29fb742d95d292d99e19641909db4285523e5916743c4786473fda87c75637f24333cf20feedfd05a97824b077d4db4ac29b3866c8601a6274637e9ee8018d7ba9e7daf5d76eeabb8b773842f87a8395a6a100dfd66abce3b65cb5d06da236bdaa72181ab3f7e431c0713f5f103ee3ec7aea52c0229ea790898600dadcaadc3ed18d170e18fb622ec5107a53638464c5bbd19ed6418e52ef6a99effc997de685cb73485e7afbecf925bfa9ce46fd9ea7e5e1558097bc5756d5e2f3d438adde18e4df3c7a5e7bfd274ee92e3e4f0cea0985b4174da9ab1d6d581b8cf04ebd3b6eaa1b53f047ee1b4fcd177811f034ef6117a4449bfbcd2da96d8e4bbf302e770da7d23f3eabe4bfc90ce527e7cf081755184c7dfa12b5008182c580bf7164296c4a7e4ed40ed26329aabcbe3e2fe8ea4c040713f662d52e9c344bfc7fa700bb012e8a135ef5499de813189b73b769e0bc778eb70f80b000300eabff5e3596b472b0802d1de3bcd89ad2835026ea0d833ccf2dc7a3d0d83e135e4009f9a178ae277cfaecbf4e9e9ba865876cd63c465a33977ed661f7a0308ccfb2bcc06f28f095e054e2b1ba816fa7488f51f022a6ce374cfc63b859ca7022bf7e8851134a244487189f73abe7cd0df825a00331a167ce7c20e0156b99855bca0ded1a223ed1c9ddc0839387442c42f0c4c78dedb8bf5f8186dc07c1afe8ce5beb6b8a2099518c50e73f8ff12915eccef7390ebb6f2d611988d81de07002c10181842f72cc5c129cf713d76e090271ef3784f42f373a8990c134b64c7c6bfa477aa788ad5a39d2fe7aa0f852668a68edf03becbda38f2f83aaa27f6a479cd09a31761434b5736401dc776142b4063827dbbe36fb2663c95eaf81c7ce441dca66405050ad80a14c53a707a0b3841e7639349c814c5280fdae6a532ded04576e5821d6dc8c2e4bd24074c24529592b99aea5475a359a4f12ef55a7104b0ae222dc406a063520cbbc749047bd28a5d628d4a85f005b7026df9debfe2d7cca369e7f368a6c5d0ab9614cb3f87715fc768a67a844320276b08a46a7b8c3d6b4dd179d7ed88d484e8d47554a651185bfa554c44f876def0074c956137781fd7d4e44c383b4d7ab5ecff51abe1e0b0c71eb0e66e8a8f265cfdc0358b9aac66565f2ac8defafd9eadde9e0f99973d1feb5a02dec1e198dfb176ececaf4d32f831162a5591d3a128b2e73a19e6706e4f0fd7d29b05a698f33899592397f712bfb0226c5c186d40ff0d2f5ad65a167d267bbda88502809849398f8e40094152a21aab78433c72e20d06dd86aebc2e718e76330c047f189fc9fc7f13adced2fc88b9d8d774c5878f39e41a4709d663536e4a6187804615b55bc89271d0ae54175bd3d210557b56506bf10d234f6e5a2aad3d70a0611d20e2e7e7ef2f13706cac02b1c1ab5025872c8b73dfa4e84dbefe359888e00fcde12f559fc0d5dddec4c2659bcc30cc8dc22c82b3b7523d3b35d8eda3d0cef31effa38d392aec95be04616cd81b283179ae5736f9beb4b40067bfbda571f273d7234778fc57fba5d9d491ffb2d71be6b2f3b5908d1b52b663febb8de893d4f8c2f421fc326f8a74f7da5b066f288f55003a4e78b6f7b4ac2d9fd445b25cfdeba51b3c022199216ae0c1c66958350ee52a2b2bd7bd7a63fc26f413ce4cf7f4b2493f9d7313fe49ef5b2fdb10b5271ffefa6d5393eacbe61016a57f0efe8a41b776094e354ec6896b31cda1e3ce254b0836a9ce968513c54ec55a20ee0f3e6d60f32056321b186a462a4220cbea58186ba786a5c6d6798920fbbaff56c93aff178a2ebd50c11c73e80e3660ae53e8109015addf0d2526b9ed7f6d232f72a77f4301d88b798afc2cbaa5536a764ffcbbdd48c58452b942dd1c1a1c955f53ac754b21c8c994bcdd1d22b73e450927bca0bb07779d7ddbf47d17946f5bd0b4726a99b2a67f89a0eacf890ba2f951235147931b6b3075d3642245b50d7f68dd20e6947c19b3407e48c9586a258f348ae338cb4d484824e9bb530e449f081115df6fa446ca6fa09e2293f59c6f0e9ca699fccd63b6ea71652199da0bccffb2a5d78f31da61ba93479eb6ca69297e70bd9c1aff255f20448ebd7b11d03d6b33d52fcda3fe859d01c2e4b93d99fbe79818141acb5de8f185adb8811b5c99547bed10b1637bde1ed0581d24b8f38c52fbff288598d1fc661c0a3933617789c37435a1c4d7191548e94e7180a24085c683b900e1cd4a4185f2ed691a49e8b5be05f50b8d689fd22034ef075363488d4c1790c5b9d4905f58ed9e70bd3c79c450167475957ed7bcb09982082863d34deb9fca9f92146bffe7f66475a4a3f05f7e90fb086282877cff014e9b8409a96dab04b0b5f6f5a3c938f689a058e4162d5259d2eb7eda78ba15529ce9f1bf9194942c8a306cdfff6456d3531a6069b3d7d35a414771f0721dfb76b41af6ed556aaf00a0377d3a497946770b0b44988f04097b9044c12b3d4db853de551cf9bb99036839f3af6e47af11c8f89b8ddb715dfda50609f8f2a0f354d362c2e94c8cc6984d9f8c8de3c2afc0b064f0c2992389b6beecbf9daf64b7d8dd878ae74e8f9b779518299c0281205b1695356b396b313caf8a8d39c951404b5897d59e678ec0a72aedf266314eabe8e1d490112512fd9861289c53a82f37b52ed8ca95004fdd30f2661072d9eff871fb69293bc4e094d1bb0e1473b4c6431e469392547f9c991bd7caab48632daefd4b9c29717e9c9fefa4841c2255de0d8f880f54634e3b9c6fc063ea7135d07595b9b5b83bbb10c5fb06d1dce6f33e3c0fdc96394bd3f48f349477f674b9a0f7402dfbfd22e302affcc83e7d4af6af79a72a6e699378911a733d4ff7d95665d9068fb721ad5e3b05fad21327d3c6f96c5e5ae00bc3a4d8e433a233142973e6c6efc7324b6595836efe0c98010bcbe4bc3c54344863be93967cab6a75eb7aec6404beb1a4d0eea1920e5e1434796d38124900b247fc3088d756403e43a7d23f5b4c5a7f5478d25f1a35b0d1e7a515bc158e47a23115618050ca49f5a6e5e3a754cf84e382e5aa83ae78ea15431829396e120f4b2d37b942a9dfaed8c52e15ecf7962524579ddcd6f5e1f42970591377c4dd42f664e9a098899e572fc909d0d5eba8238bfa2ad2209877b65595f0393ec0f8c6ebfdb37e48980d2d42d9ff7c2bd90e68609314f2293e4218e0db6605560a6a8572211dbb1b7f3716581e9781b668cedaeb4ce1a6b8904b03146942dd86493b65d3f8b0bfd9e621fbbbc059473e41f263734b1b559736995d37680c2b9725745055a9f3f34a74d5c5b1e6cd378b0b81ea42b849668cd7341092ff4d5652481c2d415d6fbd35d25a5a83b87cb7646f84569ebcf443601b25026d578bc67c573be4df3baa8664a8b8a4795fed3093150291d07fa353dbac731d109751e3e0fdda5c776c2eb79d9df78ada03a80bdea403821f28defec42f2647c2e8241545e0ff7f511783b6a95920f3f0cb36ae0ec59011d5df2eace54f476acc728ec472a8b534b5652fed50853bc901e01e83eb1faf2639ce19c504b2dd6d765c165830fe0163ea7ebcc259c94ef3566ae8f03c5b6ba9921a29b1ea00f03808cf4539478aedf43989b29f8ecc635937901d5fcb20c98229eee6d95fe289b3caf2a1cf7ff380d0eaae97ebb53781e3eb7a44375e17d39a4670d7a32affaec604eeb483a0e1c2dd4517f50e97b1b179bc51e5e0bee790d730c8847815016a59fdea06bb71febc0491e95370fce3fa03f03d88c2b3390822311f75c1e68dc254fe0f1de0bbef752e184f3a79ac746469d065b64504b544648f9d33e4664ec09f4f84835b465ff541206f +MD = 7181cde447be80b58bccf3b829be5fd38dd96afb4703bf044f911227a8ec7520ef68fcc902862494dbbfbcbc71b9b499 + +Len = 62992 +Msg = fd15053691e7236a9155d3a921fd0ea08a1af37b975654593fe074fd83bf0fc69a669be14c88cebd9c2d60bfa9061238d6fdef942911d2d4f161283eac86f75227262001e7c6e11ac8e09d05e436e0b3b6659ed580bdbb4ce950d0e1eb492d37ec801afd2b4b63685e9613e19a367ffb727a86a7630318ab70d6f55009b0b75b319a133fe0bc5c91a67648bc92adf7f6526331739b8bf0d8cc1b1ef2ce629fa83e9c922ecec4d47ce8a9c6ff9544518e9e49279ff1fc4bbb4546d32f0108ed055aaf2032bc09d4116c5715106ba394aa9d53ee952aff313c25809d6f6c49a759cffb44b37433633879a6bb59dc71c83198aa10bb113bab43b2f0021ad5ced78ee3a78619bceb8ad959c14240b056f50dd775157b6d59c0b836bf8c98053f848bdfdb6ecd5dd950dc52ce322faefc2425a2dd833c05007983f714c352c443b7380bc185351fa4bd29adf6118d9f085d61410ae465a2d9dc8c3e182eaed982777dae7e52bac9f4d9a9b26069c24b25a6a9fb23bf600c8bf4bc52f255150ea5cc42113d5dc42573ad42a835c1367af909e51a519d940bbfc6f97dcbc0f02954be6f7d242fbcf9c740ddd99ca251f42c8dfde4bb0569671d5c2c05cbf8a5f33656ec385b4f080e989a638bbe937b80673ad9a28a7f47e74cbd3e3319849e34f49ba18a0b45122c8fc4ba07c21c1ce85219629be5939655f5f1154fdeec41b4359677bd5c9a411a53c5cc95d1c59cf294317e19f5cabe77bf019ba141b9f83aa24d541875d5fca28da57f7c13176367d58b1662e1ab271553f4b6706b722a90e3ca22e27f7ead8ae56dbd06af99d90ebf2d13bfd2bf3af958d25006849f3e7c9f15c764a11ebb9b02246d79ced466b1f8215b78f08c5dea77a350a9b3c89ec77e342de6043c8e9d8dd2771e974e7316286fd8d5629cf9af58709ea22076b1392a313aafcf608e582d7fc23d33916606f81d701e51777711a2402239f430df994813d8092b1223948b34381ec925a9490f350d9ae4a33dd8fe1cc4b5577f90b183e3ee3a40dbb5184ff9c0088290a2a717be969244aab5cc130b6c6070ea2c4780a8638b3542acad20d44245865cbbe8b5c1f34e981446b48a15028068f91b24ea6a214433d0701ba6cfa71bfc105bd393450c160967575a0a426e5e6634c61067320fad610b692a8af1d5d30c35e9325952c932bf2d52843c9b9842932493d29f07150ee87dffa17442b5b4e052cfcbaff012e9e1ed9efbc72768731750eb343cf11baeefae9b4a0bcb2f089def74663b28cf859830a38755efc73b194037fce3f809d69f25a3ebf8932c156e9540cda801e84c0b7dc9ef8bf99be0c17dddf33e25c7ce206a814de3a2922579ca9bc79c844587635c78fd134fceab388e47e1f57f3ede99059b3872014b7ee619ed1bbfb8ce7dc755187795f946e4a6fbdb8eb00e544e327f5b7450b73d68de079e92bba56c7860f11126b8fdedd3334d03c116dbf265155e28c823cc522d891e16f4355305be55b7cbd22565a9c0050b2644cfed016c672d69fd944970140ee5be09d8cb8298cf30af43843964f247bdabdd844d67ab537188db4a35816495e4fc984914cc4ef6e223407c7f05b21fecfc55dd010e6afeb4ec2aee986c6648a4396b3336c928f1579093b5417448b51f80738113dcf1937dfdb2277b19624dacde483c3a636ee9175f02d88699fc32de9f01198abb873855233b9ee5709fcc8451f80c27816705a8f6568d575c15beb1c1c54c6f927615c3c68cfade5967eeb5fc434c050b5c6e94bf567bbba5dd80214e89c3c94804544f4e6ee46ebc00dac646f0a4dce8954b6320cc4bba5c9aa1b5ae1325a0c77a1a8123a9049e81b3b93f96c9bbb5025ac59b837ea45c699548f64a2b1bfdf62092e2ad05017590c8b3a956943a9740f304c64f362faab4169e6a889b4de7bd3de1f9554a84fbd187ef8bed1ac88b8aa72f6becba94ab2565cb9bd12a6266041a324e813f34392d38966dc3230e98c8c06f13c2d27a67a5c9f6118e9f0382b300ab6a9aadba368a22cfd74077b4c6e284eb45394889e71a8c485225c3d744b33574d4095cbdfbd28ec352ccdd611dc13ccc89b9e36a326ef4e8e8005e87b3ea01b6143514e68eebc49a65cf1ebda64b2f3967aa6ac550874afe5b8538bad741ae99b3859dddf9bf0c7b99b102716869a75b6874a6414a4fd5b4311e1819b9a083443863be494434ae8e75da51256b04ea59137f5f8727acdf30f432c74b60f0c7e02b3641d27534f1fd81b2d380b802415cf1335c3fef88ae9a2b280ef9d417c3941565ec2196a61fed45a2502b564df48c88f96710abca8b1b5f6ab3cb1effbf897d5a88deae717e884a108fce4dcb4b10633746a2625abedb175f7e68458e02e6eb7cdcb1c67f57f617655910a6668e110756c29e1c208f01db6f397951aed6d4e733b240e5b7f15f340a7699680404b6febfa3ace10346b53302aaa54b46817bfae7d036130196ea2a65ae129b8ff628cfd9b173baee2a21a8809b953a3e4c02ab00ff3958458cbf80e0c92348eeac8e020bb49caec6846ac152d2f1267e7f9283e607f1bd6b1c07bee28e7376096e111fbf73cec6749cbb07de176018ed62520902b008495c8eea6dd2c6ab2dc884d9af5cb7b209e0ba3a018d348a16753d6bc5bac22305fe2a8f141a39727513350d3a4a48f07ff2260f37c7ef182bfd57043f7704edf73a381f3b21af7157d2cbd646f0ee2f3093276331f512b25c6ef94600a23f0b29f9ffc16a4ff050daed8c5b5db8711725a9075e787d63ffb3ae6b598fa13b28a321c89e2a0cc3b6074cc1c506099851651d0c2793c9aba837a6f56474dec0ea6b9bdbdd02c0f24be4d8b13bca4b2c85f8d87fe70a3fb154f03edf8f38bf96f98b5080a87bd343b87c77a6e62fe7f65ae7c1a8c566493face75f700462ae84fe0b27ff241bae7fa5d412e6edbf43bb7939bfceea2d4e1b5823eff1e87a1254a1f1079f7b6db76eb9f692ba7902c8468af6bc3a7deab60effacd7aa660853cc8947daa9d5f657d79de9dd6ab27fde5e34269f35a722e8e0498b00e3a395d9b55f1587655940f683f9b5dd3ebfbeeeca1fd25005905f4e59e0c751e4caa80bd6ca61f61b30d2fd3b7463787ec9475e53f402b6f25f284f416968b1f401ca53f973350f138134d2c5b6f99871f7a398c15bbcbb463d06535f8f770a5d708218e40198ba9475efdfe968822460725902dcfb0a46475180c27cf7fb43654158c3601d93dfe8348a8b713203049361f1066b7df3403fc41e05604cfc445599d4ba356f2c6655e58d3d23bb862052edf30b3888808f74bd6882d33483f575a37f662b9e6d3724b1805fc9ac1260e53ee87909c5b71c2f65e7a29d57963e0c84e02f0a535e3a9dbfec5829acb0ac937b58b7a7dca2cfb7e322cd855f40076467807e99350658073859900c6467eca6cdc92fda7449905660a16c55f18638c372e5b9a1ed6d77ac434d6f397b3f08645bc5486935b2485204ede5d3b872b972cd994aea229b80d209525d7a9a40e8164ed36a1ec9e7ddf4f68da2c8590b72b9a124973c7d995cc2b1efc29569737403cd7cfdbfd5f039845f0909fb7f594bdf160c0a5fa66ef1c464ad06538fdf95750146691504d3424a66ea8436d0652d2e53db091a4422291f4a12917cb58c31b211bb17e8fb9ae28d34b77a3ff436feec8118fe37ffbeeb1d8aa8cbd88283310326636d00654d0097f0f853df94d4a862c74c507c81481e044df71d2e9fcb7eb068c5d424e8f284aec33676de584811d84efe67b26fcbac1dba86ed48b36cfe01fe69b51e2c93551bd5f74d04e79923953db6aba1744c7cb0fadda4ec676f9b3e11d776b4da375d264dc63f19eacfc4e3bdfd841036d576053484abe363db3caec89881af9ae783165428b4e408f3de08f6595ac85d6d8263910468f54eb8c99a4c333cd613aaaf3511a7142eea0c584d0f559592921d881439e345e9d10f294ac43011f3ee88c9c9adcac8bf37221afa31769d347dec705e53aca98993e74606591867ccd289ba1b4f19365f983e0c578346da76c5e2228a07e4fc9b3d4807163371a52b68b66873201dc7d6b56616ac2e4cb522120787df7f15a5e8763a54c179c635d65816bc19485de3eb35a52040591094fe0e6485a7e0c60e38e7c61551549c7e9549b19e54ee62f368c100125c2d1be0d45f00052855809e5337f3320ceb7de832e490f76d3ab25d130081d448d2f4026aade3f0ac03cabd000fca943b67f0db73d0baadac55d78bb49b2f4e4c6f236088a1162c79152cd30917512125ef7ebf22b537aa596759e315391269b02c3164f8e2a0a3d7b12e4834f692c214acadfc053d10d4bc97becffd83330bbb32a5758119893b100059854a5595604ec508fae50e4c151d0e90b63320991db6a907faeaeedade6b2934f012db60e11c63142289d0f354c3f4560080b94c88e9b9e05dfc089a732f5448f25631fd2fc6ae5bdabb2c0e79f7709914acf655329c88b6057f10d1e2a5ab1bf4dcfe743094cd648b41c9a46b01aae05c7f7ebb051741145a3bad87131553375c6debcbcecee9b79ee451bd1429cbb33fc1fa86e8a10a7fc4f788c5edc6772493d1a00cefbb29dd796c69615bb7fb9a253911bfc2840b81ab7d49925a023d6802d0c43f7da4b65d86a1bb9928f2611e76b06c6d7d066ea1779397f7420fcd8d1032ff6a5fd1b7bf2c4bef6c632326c69beeb3980070586890021afb8b36501b24befb977d8a558cd231ade3f592711bfabb8d48330af35c5f917ba61ebfee98a83d5dcdbf17b84be21c9c05c4876ba4fcdfa286fe1b67074a0a6200e3f2ce8e0378d0150dbf0784c3d464dab94a3ce909219b5949eddcf1ba337612c21719849d34fa764fcc6bbfdd21ae6abc220b728a4a20cafcc679a018d660e3a475f603de3c83f86d840b8598cb22beb65900c8e522d8e0ffef669ecab9c87b6f558e922e5714a34f30105d5c9967dd8d35457284716ca33ab0cc733aa554e30dff09b9f54c5580de17a1d0915426cf2bfffff8cdff831b9650d3a5ce61af2264bb8e009be4ed960083e7659fc4069d76fe59e32a94c651f919a2bef0b77f405ed145f088e785ed9eba09a4eeb1b04e587c79b902f7dd4c4d516246076d6d46e2885710241dc48ea1053015e6e3cbeab8bf8705bdf16f1478413ac37b4c203bd72aece8d84d5380efac8441f021007a7d10ac4cc24a24b2643153bfb31c412727fd2b010a41d9cb72f72caf7235f70491b70f187bcaa62df768d4c119a57713b94a3de224bfff78102e51e7d6e55793dbfcdaf04f389a8d1b30e65214ae6b0675584a138c906d8eb3981a7282fac82c4327325da65eabdbb7cfb1f90c01c4084371791dac7cca15427eb0d7e03cf4d9b17f41e6e9027f1eb28e5c3e69642b210bdbf287ea4abe16a5283a9e567280a10d4d2f137eedbe5ef6b510a994a0485ab5dfded9b0c4f397c4dee1504e66178d3fd9246ccee711a36a8cf4c3f37dc2ba29c5659c65b00ea387e8cd742fde5fa3306b477a41b820f6f65b3113efc2424950d5ae5770d7ba3fd68d259261a300edc64bc0c44027925e8269ee21f1396f101057e2923b019d75991712324c7da373eac1b8d231fd0fe4f6ff54765fa8f216529228d62df55f4cb8ccbbdd5833f03c8514572d7d02418f3a658b99a2d87264ffcfa9a9ae7da9cd1bf5491aed8f8e507d8dc45c8dfecd6737e3ba1223919800fd568c96265f23feaad9e372735726b7bc7428e7c8b95e74d3c1096a499a0cf4366ffa22fd6474e94ec2b26c52545f792811aa5795fa9abff746a1287bbd754890621bd79c544496edf6dd90f24ee29fabab73335e8b294f8cbbaad423c07b02f576163c69f73d0b70be8d66bb0d56312c8baa038a32b42c78684bf7a86cc72c4cf414d9cd150552c062ea771658643592fa785081b8e35fa595ad18728901cd7d243c3731754473c32a1b4a69f8b4b5c73e05a0aae55deff98af8bfe9dfd1ee6f4eb7ddfbe0a374635e49671db6edb8b29f787e6f80cbe45e8e53747535dd960cbaac53951ec95f87459b579b58b7473b67f96f3753d447bbebe6c07e55d0cd3bb0442265f7603b17283aa14aa6bc694adcb2fd6b24211ff7e7da2a6c05509be477a7d1d5330d11fa4f4dcd916aa126c748c8af71bc5974fccb573ba70e0509ef58fce84b997ae81a02fd64da6a11869af1660db2e3254eb1df84799738991e459b6bf031f24fc85e8972ed8c6fb292ac20b2a096602db6fe6a8a6ea44ab1e3cc881e70ee0633baae2bd3f00e412c51e31cd4ef86fd18b3cbb691a2370ef85e6d663af0ea9dcfc4f23248f5caa828cc282ff583e8808f4e0009c09cb64a1399117feaf88d7fcbf112e4fb85276c4e09649f3de225b2398e86ac3fe48bc7ad9c9e1954113f73ce46f78a11278d5445127db5d396a65bbf7b43e737021c4d6c6dfe7da0c2684380cd876bb564642ab6ef5db9e027d243c81d2001d07ed3a4f81617f3f79470b58b8dabd10dc315b448a6eaf38b1b1031fd7d054431e11793fa9fd3c2810ebf92948e4c0241cc06bba4410eaafdfccaef05a2dbf683b34fe31a0e183465b8bda146d950477a07a00671c7af285d5167438a948860ed7ae55cff6dd08fcc1ad3ac4675a1e8e0fd4b5f5841b7b3d4a34ff6315cf6ca98c040c652c3e21cddbd67793f6a252d9a35708c01b60d948a79e9d0a4010b7bab0cc8e9ba193623c128e3d2d7c1c65ed1377556132e9913a65b9f988b8bb1bd4fe7e58de076b4ec9fe3ad7db6816ac2ac8cc48537b2437751d1d8188d03cfd6acd8ff796be244bea0772f4285b2fba254bbc3e11448f30ab264fd1653704d0fe9677e760466cee3ec6bcfebec5c6046f04cdc3153fb9112f29b745b85da12b02f1cca4c53083aa1aa47f73e928881f6a9c8763f9bd005d838ffa6afca490801a5804bc3ffd2704102940e05203e46faa7b6f8d195d137a4ad17fbd9cac6164a741a6aa2b1cc580a1dd87c063d849799119eccb0e80510be786bdca32e5824d2c3728db310fddb46239ea80a92645c1d0f0859a43d74766dc383afd39e081be2bb111ebcc56ddf3b3c6bfcd8c7e57dcccb7d07753c2752fab3e8dd32c1dde1c2847e838677244d338ec9df3a830fe2ef6a843eea8c258dad7221cf8840df5fba454126d9cf2b0e74443fb9f66eeb74cd17a666ccd6760dce28b6ec9dc2167d1226e36d7d758908468456f3d5318019b0f86ae7e3c123bca5fc2f9b38f08b241150ebc239104625f37694f39f74d7bade35582af7f633817a1715462372453a00ebe18cd6486b4cc24484221cdef640a0f7f895d01cae4394a1f05424ef4ca8271e4e321dc7fe65fa13abe81318e7913e66d39135dc9dec3cc1462d0410a957ce12b91ed3320a57e40e93ae4ecab29700a97087f0de0763ba9fa1398a7c632e3defaab7c334940cc85ac3da939b5d382ee957ddc7c9f490566488df80db8214bbdca965b473a66bee22c3d6ab33f25e0f4d11fd83466c5b5838848aacd70ff392013f906d97475c9d8c1c085e3b78f0ecfe254decfc78ac07421c9fd81610b20887f3a0b74980c71ec055da735bf8d60d231b37c9941f6bacabd887ca40903966964efd5a315894bae7f6b3b43a79f8bae57c21e4b56a808f9a40aa4bfe9470f455d7101ef6d7acb62987fae781033e3b6ccf7503085fd3f838dd7022f8263ff9ed163fcb4005f55dad9119d5d79e90d7df9c9aef34094d2fad364219d54d8ebf8693f328b9eb58f69c9c7746e553d6d8666cf870e26dd47b20d386f63d12458c46d795fe0790bdc81d2e7c025329f8842bc5f74dba955126b93da682da7b4ca958698b15d2fc0d1c59d190d0c829de245332ff506388ad76a2fb088551938b5ee2d13f35c3382e3a780c1b79ec5a70ff0938783f864eceb4009516c74d5feaf20d981726814b0a6aa16785c668c4975f7361cae3caf09e27fe94360f74e952af00457dafb53d88f4fc6b367ce46f398ab9345d04d8750419c17fd2266e38a9dbe460d89a07178f1fb29f976607643fc904399a6a57e5e7d074de51d5e454d9bfe07190ad1ee00935eb8c0e4b7aaa92647cf9e7dcf04831953d3a1be27e46c8a31d010db1a3a0dd7cceb804f2e54918a348fbad234ba7c9b044199815e31560cec297b66d3d5ff33d84ade224ee4abbce91c755070f099769b2063038bcc9878af8bcf5ab952633bf34f30ea940b4622c7ee64550e5778308af864b11b06b271de7f7313153fc854c0710f249818ff50638dfe7c674f875d46223516a680127d0b6d0d3c81eead12a258ef4cc5ae35ba4e63aa23165945516f464aa098b966feb8ecf41389ef7ffa2b5f57ef972b97e4eb180dd585f530b178dd1beb6c22fe7b6967de4497c2bf7fce0cbf7997218454cc13802040b3e7f1c53f3f53bb5d67779f76124c3608ea180cd9ac774010998e53dea78fd105c9a707151b85f0b92077bd8046a6df129e576a5e95552c8935f634d1fa70b18b6425a0d746de96d6c7f0562ec1c10d803ac258f410bfb6ebe820c1b5df7f6c852602150e27ea2826ac75fbca3a474bd24dcd6b42950369c92ea29cc2fd085ca3add0e61255152f397c7d110b1686146955fd13b298ccdfa187d018b1a9a82c6769f6968c550c167f868a3839cd29f1e5d1b5e4dc928862f5724de7ea8bdb3630c907a8f48e1b68797901c3fee48f5eb84fac512928a2ae457c806cd60a1e04a069788fc386efafb7b28856c2e342d5613e34db10b1b81c0214fc2a1caaed3236b9bddd71c5e566aac192631e5fd0d0611bd3f53bd43526cbca35a226f4d53954486bf497d198f7c334947b79a0b5ea48672e31f2e6b678f30aa1677d6e42748983f777ae20770da17a23026d5c6e7d77be9813ee8f986d2864e3ec988dd18e56fae4c91d390c02c600b29a51f967248f60a61d7735778ddc575193f0b9eee14d2bb88b6d81c4619166b795cfee3c59e02bdcb1355eb0457f509f002e991717cc74e71137a13cb4a42ac6974fc15aa82a4ea061a181ff4e91ff10b39a91c68c6594f51cd40dd1767ecb54115a194e69ce6795b13435a0f3a4a15b20dd4a99d998da66e0fb3e2f2171a6e496674c84493cf5212265f031cf37e5d2da6f19fd69e6d3b11ff598a2402d6bfc890fd1a8b10675e737df384e4bbc3b1c32b8866dc7d00f681c5bd3e74d1279008bac4f082bab783c53d87442f3b22f9bec4226677dd4ec0088a6464ac2c16c94f0d52b3f33ac6aa5291a4abc41aa21d649b46066e66607fec76d86692baa952e6b12ecca4379dbc609fd1216d014c05fed57cb18bc13d1d76b0a0aaef24ea1315cde0a15d5a429f388f960ef098269ad39d4ccc9496ed80ee61449a8a11e1f5238af19ce84bbf3d228a7bda16863bc22d193fc0528c79929cb04c9c2d2a95de5a0fe8240cb11c7c65b809eda77490665271dcf58d4ce839c7c6411a9e170eb700854da090345f464b40c7b06b092f6f8bceabd30d7e425fb9caab7ba67f54695e13a97a3d7d92821a4a3d892aee1fc3205835c399c990ebb8e510270d0b70dbbce28219db34bc181b00f4e1abca684c5936012bfbd5d9c50d3ffa869b6269f4621963e53201e6ef96887321b74613f07e919874f94b25d500fff000182c479e97e1d146098a17f1d30a42af160a2699d69080075cd37c03d84e7bfd4b1312c0a46256a4297a570519afeaf590bdac2eaa5c434aeb14e737df5322e5fdbdd341d1c379675b77ae13b29ef259ec07aa97421c68a770b76d595b376d20f6d2920b662dc3f765292504e400e245f4922abce6f97885b16317519521e416fefb5505abc7babd0f3ac3bef8fd43206e033385de1bfa4c78c1ec07d53a102fdde02617e8bae81f234f912a36bc9c522305ceda71a976638b79f46363a978d45a280c29642dd58667139530e5667543db3e02a3e9cb7534b232374e8697a46b3f7b10236849075ba52bd9b94e22565b5e56d7c88cab7e26b794beae872c1d5e528338ed3c350804a34265abba19c80273f65531a36e19a16149906dae8f6a135ce58e70281a60eb2afe3ff06f7352a0e4c685c6753fce0d77f6b57143e913f4244c1a92742095760107716eb6577d9d776d6e704c4426d3c24636a48e61a167745ee33c676e310ff206030fd6edd061f59418156ea5a8590ade1aecd7209bd612c3f1574a2dbc1dc3a3fbb9195ed35425e28c9e248bdd0816696933654e89a8c7244cc96584bc083d856356c5d20eded100d1f4b61e4b48b08d2b608112f3455b29fd7c009cbb37285542cd23700a68bf95effd6c857c829ef2695b7394621596790b56639d40144cbaa1067b614e58b84aefa38ee9f81ca9412b0c83fd5e8040bd7e41d6aed406705d87e915cd621884c7d8cd637145809922775bf9756dee209c5e24a0f7fe755ee5fc5e38dbcf0eebb3b2633446ed14363c57301c2319c7ffbfb4e60aa146c9dcfb094d2db31ca4b5b6864c498f78424838d2733530e973a5cd87715cd4346bb347b49e3d7ed141a9795b72ea756c7196bdf00c8cc3655ada6fe0acdeb751c1ab700739ad64774c91a439bc5f205308e974bae3690516e4664dc67fd77324348b1f0a06c88c952f33df2812efb7b471090537e0141e837a100e41d2912f352d1dfbc4eed51fb35157d0315ce4621813be1770ecd4353582a15b598d52140d1227ad3dd71b44591ac7225b82844b0656d0526bedf372b266e2db1799634a334c72dc7dabe32410f24a7baf6d189706a2066032cdb7fe848c983782dc0cf82f44c6318d5075e65f41a7843303e771a05f29e6cd726901325e8e16a33f94478a61ea5474b019b4cf6fa7e4f12d3bff5df5018f42c650a245428b2180aa455ecb0aa8ec3ab117b3e7e41243f1d45a69c4cd56009bafb60a44a25600230665667aa9c6a1e83db60d2f09b04b3ade8dd85e4df0e4e017e161b7e5b85a94393d8620a50d1d843b40ea2f4448a2d3351c74b1de97e117e51ace277379d7d92d15e7446645051992fb7170fea4f0c7bf4f6447e9129f4a01a9791bb46120fcc835b06e543604ac2c30cb79a08ade1b666ed1a8d42ac78052d68b1b1037dd05f4e40a +MD = cd042303ba4134f0a388ac197097a3fc72d538f58aa6ef56eb37b64c7d27d08cc14895a417cdc5df14dbced947a30f51 + +Len = 63832 +Msg = 74d3abb596e840c05c20373a0808fbb8716a3ff2f9728e0ebe0f2a22159c13f434c066042e93e8cc2502e346ba7431afc9ae968b54f353e9bc70f7e837d8797a7e4c8468c67d1296f2143c8907525026e0f325bc2359ab4573e6c6e9e7aa5dc4bb3eaee946efe4a72c1feb0bd5e983a51e04938f4eeac0ac4b393f2e0e59e75b545f8b90963186863ceb97d40e82f0b5eba8890cbdefbaa5ac3009be922e41c6af77c4649f8b21bb8840e9ed9865bfddafa6af3a58afc1b9fe95cda15d71908d364e006d4745ddcf7ae6895d5dda19a6d2c7ac210874fb6ea92e32e0556aff3950abe8b477a6e14979a41e2c43292697bcd329c9b384934f15c4e1826460b3516457234018f756b1ec44506234990d38d592cd3b4228afe1ab1e818f719dd75ddc1b5a1a108163903d8cc9081773f71186cb417e9ea878aed106bb10636791e51fbd35484989316cd3452e26d3000bab35482c9aad4c153df042370c2407097295055bd4a95ae8d016372ac25285728d4ccf3798595cae16719b9c8b9bc5698ba6bd75c51a3baf416e2963e67b4d533f31290a7f891f6dc2bad99395b0e8d6b9baab2a248373ae4943e48199369fd74a4e1e4c5725de78c835c4c3334bba7a83399923f8cb4b0e6ffd312de46bc225350975a52814e1f7b04923d56c54817d718b4d0849dc0bf73b04d60fcd02ff6788ccf8bffb407013035dc07049b386070b188f80209dfb9036c19bce5fe49ec2ccfe6d3fd790d3f347db613dd051113eda49293384f66202e79a4a129ff7e76088069dd0c5ec51c1072acfe30b14694d6584e1ca7dcf8a74d7f8a98597242169444e5018cc3c34a2c8b2d20b02e5d85a343281ed1310b90f8c4482cd4e549605883d4dbff468c2c014db315dbcada48ed0bccf434fa238fb90e49b92cc6d8c5add3b5e6e45594443720db68041521610c0889475386b4f5f6b42bc7d1a584c93cab049cdc8f501536bb0271d99be76098c00972ad6544563a3c4af353ffe1ed6d804d78384254316862c4ddbcdd70ca0bd8ba20b32456431c2d43b634346494b8da0d03981d250b74be9f063e3871ffeda907bc05327f2ee50d927af2f17171c74eafc96c8e2725c4250d85ce6b4f94a6b79ebf042e038c5d33b3cc00a5bce6e124b2343603fee2ef4c7cc6fdb48e0adf9adba43055a7edcd561423fdcf9b76cf12c0ce751cf0f54e8b79644cc2a1d4f0b94b063a67b0c5bddb501d3add91a3b98f3802ba47c1cf6a689fc82c042f857299695f52c2d296b749e402586e33f068f0a47b7602c5c3eb7a3c7d2c078b8eddb1b30a4a0571e342084c9dd6eff6df35fd729328dc91852a26fbfdbd3b4a73baa8b4a1509e134dd6ccf62a26e15ee2a8fc4ee44343a995aef53ab4601de0b661d4eabf36fb2b08edde8d41c8d0d08d4a7375d965c67247f27b954ba52de2d99bdcc1be4dbb4dd71fd35e6f4d3cf04192f9a3fd00d3804e8d10883e0cf9c55fa106e629053ce02ab531f62d248432a20b0545c9a4f957fbf75a8fe607f01cbb1a09a47a1e2e86667670f0e5df552c112b2cd7c9a2b66df299b018de16bf3d6e7f5b994bc8deb52cbc26bb43ee1e21316bb6d677ba8936a50cc7bfa0b995bbfc495340f8b5ebd0effeb9c1a1d14dc6655559ce4e3cf04695c8f7e0c871322cf6f0a7181b65c47e22c6a0b09a0972903f707c2bd7ba7a223756d728afde12e4b11dcdab1e58f71167ac81f487271af32235947b8ea3853e2c1edbf3d1409697ed191d669bf0024f1108c3fa139aa583a01d4939ed88a00ec6b97cded7595baafd8b3cc6fecb646bc173ed5da9e4b0b65baff0e36efa6928b99f30461c88c08254dca268c15b9c0c0b66748bc485bb0f97663214ad493ef04748acd63b4f73d29595c4b88e2127b42168e000fe0e22e3f5c8632a0325901a223e38eb9e1dd400324f3a32bfac85e8d5e3b659b0de96f7f95f2ab02af01aeacce86b02cf846f9fbd516963d06e350e8b7f6df2778765a01482ff236f391e0699ffc9c84a13b5059954e8c85ad6c3b9a4948d67dc894d70c9ec37104a7147e22bcccb98983c22d648b21edcc986a06ec3bb8b263a648cee9bf388e36738f70204d7e6e0347e67865e01921da6ee59926b6cfdba2ba9c27e1d216b392fe0c9ea87b9b25b994ac19a4bbbe9077d8e6dc90e113b902ab97ca3a00e347e2f192f0056daa4574131ef8694597a36b7e73b771e50eb44a2241a03c7029b2ecf32a4e7d4d3336fc6c43fefca52cc07d07971213e9483544c6a38f314b6f5b79addba05a40be5f19462311a4040551771c57d5bc1648a2b640c4805fb83eac50c7adcee270d42a9349c71aab8aabbc1f64bde8b59496656937ad5c0fe01d0c3be8a8c05e05fcfe311e3602575ea56b3e88d033468abae4255464098aea94e300b8d55e1527bf43bc6d78aff1a97bc49b2f989eb6203c89b13ff37115ff2b9a68e13b9151fca462fddd960bc092b63100021e124f80a5bbd79f617afb476b973b08e23f58af33c1b91797fd0e42dd1833a8697557cf7de15d1cb70e82e9db4341d8d3517466f4c9bbc3836c21e178e3fdca81b117384a650c5ffc14f40e040641f615b0ea4970e2ca88634243960ff926106facd7e196aeac10387497dd6c49050db04205822e75ad0e3e66b9892bc276213a50dff2e82405d77416b47f9d7253c3adf10c36b6e82dfe1cc0cee353a6b5a6ea837694c92fde5ab7e2921b1febf4c013a4469091a512000538c9cc100daa46882fe5eec037014409c07bda781ab0adea43fcb5461224bb02b6f16be95f1eaa1b3b752a55a4343b7298b5e432694e323bb577d05d992ad81a2290e96604d97aab8f6b6d10de40e7fb528960d43f98f60de4fc075fa1eefe5664ec6d0f65a35d411312e27a4dedf2abd63f76e70354a268b7d682d39136d6bc644d206de844fbe3afb1ae1a5a02018b0c1f50f21f4bdd54164b6a41d3cb08570bfd2a07f683fd9c4b8ffc786b49bfa1dc71137dfa4550dae9a5e731ce753b2c3f43b265f8290b71cff5f21dea88d1f72f7cea11fc0aa301182a202ceafb1745e966e01054fecc6c232bb8903d88e295eb89fb358d617dd28c233eb98f2746a9f2afdd8f74cae9942f797759ce119881fae06e71151386532bd7686125bf6d604066d16abe5509f1dc27570103eb9bc542c96c4dfce9678ede90c7ab148c3773bdd3e42a9c67d58c107c7f0f46dd9469ad8c1d52aaa8c88b8e94831fc55649e94f3d3c5675c7f56cb4c1180bfeb02b732270a807881b5051212dc3459ee54ecae0ee0476b03e1099b13f497e922c07ed88be35f4fc09a8e881a0afa60800ec1e572c6213b794ce1ced3b3bef6c19d1dec9bfeea26f397858943871c96c71cbee9c407eb4f191d9fc520015e6f33f304fccb8f9984a7467a9443c2e3630fe9441977281e1c6fcd641c7d500eb8f66cd4779f47e5ef3821de477f31176be70ef20300993229e9f70f433012487a8554fceb8baa67dd42b431117a63f107c8e83924f4fdb00e1404d1c80cda841a6d55fec7151987c533781360b9ee38cd422f99fdc8a8202f7a815c19581b5a2f2aea5aa8c027de3da6d7e5d3b2023732df2f84fbf03afb1499f71eb5a657231f2a8c80ff1157d3bd096e38d8f77274ceec829abe0028b933ded09a3b7c008760f8a712489d2bf0b9d7a57cfefea189f816a34ba27ce3e323c5984f094dc9ef9b11e47f03a806cdba8e1832a43c01ef54da0c0857db1ef16afac8adbd9ff5d43412af37bed69ab345b930ea6734260d4ba347512c8f1c7c5fcaec56b6e726ddb25771ccd8bd3a59c1d57a14b67b807c730ecfd6bf2d7edc98d27daa83b7df549c7cd6beffa07829d57f7e422086a3a531792fd98e1ab89aac8df749a29671d168ef488e8244d69bf6f397e323c9f2202d7ec209f7fb5c5ee179e394a1e7a0fc9e1b31ac0efec8289cee61883eca0e75bd8c30b8ab23cc71fe12bd1bf03fcf0ea2ad3c97f452ef683dcc6591e01b6b0e683de6961648ab7c48d4fe501c136eb01d01d3f2e0d59ed3501a0ea0a6127a52c3e07e02a7ce5be6685d21d193e7025973b5621d52fb68e28a63d724ff63bf0b4720418efe296048c307c200e64f2c933d2491a7a928d02e331669af6a63cb606889ebbb77ee5b0bef61497e81a03fd5effbdd027202671ee0ce10a065b7022abe69d6e8b3819ea853f6429b047ece99f2a79ebe3c0c802d29d766987fc21592af6c9db72f87cdc6773327f6dd5f6b77eb94614b75abddd164eef60827195860b1feaaa74a654abeefa474027ab668c8315ecf3a9d74b2b42861396fda214cfd7c8c783992aea82a23d6b15e6b1879337a6332fc41dbb14dfaca9b40377e85c155b290cea6c86870aa265a6b3cfa0f121d4e3700d1555bf742a7a6199d858564d3fd8f06e5470e2ae92ff9a95edf8d1ca08c3608ea7605589674e46c9adabe508dc9cd52dcbefbc1676ff9a95f3d859b8a89ca54ebc26fda6cbec0a9ade2a30cc9a3d6430b74c3dcbb42e4dbac988b1751e36e7553aede054be1e5615531d6024e182447e02d08c54b6545c0c58500289d059cfac0bfe251aa8aad240f4cc9c9519341d1f92c0d239e2396e938678747a28cd045a15a1f581f1592525aa7e0da9aa1b991c51673603a2a42c583c472ed28c592f67421d781001f3f8cc5b7cdbe7fcff5e7c250ce1395d5f3d626306591866c7f8dc78bcd54f4140f23bf00f2dd777a81447f8f6fa637a304bb9e1fe1cd51ddd06c0a1c435c61708bc7c527d2b0284de6486b16eaa0963e0fb66a074a0901964021ba47ebffeec12fd97670effef8968f64038bc19b47f37f77086b30cd1c22393f569329c7e29275e92190cce26f00f717d75286eeb36fce7df7d02892180e46257d828f3ce340f87774fbdc3301f9b7d4550fad237f0f972bc6ca83f06bb6d1748d9a7ed7777921f4ef16b039480d4c3a1b1796c1f15f4410e3aee550adb8759d154f8b2005877cf1de65cb9da7981eb9880ee652b0db6fcddd11cf4b548fad0f9316469f141883eee18d80b8b746c9d33a5a1e4e341074a31187a438e6a8e25c858313bd3998b14c86e29212ed85b807908da12d017aed313f74f6b1daa0b0046b1a74f2cc849fbb4d096244b0d173c7291e11679f875408a56e593ea6e38087c2510ce87368a99b826663c6b7b687a2629fd19664d22399f1d82e47e1fdee6719ab2df694b1696df58e290158a15e29eb67843207c7e6559346f866026c5422df9d7ab5c6fb49b2e4f5249d1a2e81be12198bb2eef516dc084f4a018e9b5c2b92bc559e70a2e50aff1fe8e272ba7cef753a6aa180c63f8dcf3585a2fd276111c17c41293844a5c69272d88a08d1ba2e933e937673d7bafb66ae5dd2c48cfd55ea41efee645d16864da285fc3300c40bea8ab8ba2e9633a55d2e15197b28ab788bc19446ab58a1ba9f0383a187c424f7e9c32cd5177e140c11195def97a6d5ea146ff0da73c3f1e3f53a34128da847831f6c826fd51be69031149aad8074173b12916802443b6182ee9b19e7ab09b63e09eb3be2ddec15f22b845e0bfc1cd9dc14fa7c66930b8b27f9cac76976750b7937b3bbc6986b4c726f0d0a63310db85d79ff906fe6d0d943952daf40568691c5077aa4939b15d4c18a03324be5c31d2fe0156696c607d6564f5853d4e1aae3c2179468c26c78694ffb0b784e70d982d3b5d04173a73d0cd096cf37cf9e4e9bc0d6a59aeb730f547e307a1eb368bd83e989b4c37f00dcd762e9f6cd78f30e0471c3029d67555730ecc8f3c83343fb9ac1ca476f116953e05de763a7697655c8357b4ff2de69cc791c32fcf74688f0320cf5eca6f3575e9251ed9a48299ea2518c5de22db946ebb77cfcfa1e65be47d41bab290d6d414967cf8b0f1231e2903af6f97dc0707341568f957fb0093a7f1b8e4880f517cda0fb273e36a80ad89bef05bc573d9c5549e0e48b025ea9a3e252c56c99005b42f1b70975a57c2ce721d829351307a58381e0ec4c067cdf813e146165b5b1d047b815e6dfe0010094cea0e1f245b1248465d13757009d1338cefae2e28b8bff4260a23fcb5ac93e780eb3b05253cc81be822c364a9521dd513160ba517ef140d987e674d68a473ef74e9b24f3b1ac55b8536c698518cda660f1d05840f4743d63aa5d4660031d7aa91ab1a05503f318f8462c51951fd2f6ce8cd45d2fa0974d8724610516399e79e3ffb1c2d4bf133404f6c68f092ed457105ee7397bf7ed199a92bc3167b24cd55e79f60d11379f3f54d1c5624fba643fcd04837dc46eb7fa3481a96bb2e1cae57ef608df8921f9a36e63c38bd736f5296b0a237a8779ba97eb5dc304a66c7b52ac1064babaf2a508c8292b5c4e48f9ac50dc51e033ad575b05a393bca0a6f0758c35944f152e43c7d89e87640354f4214507a92f577e00bc39ef85c44025acf695f211dd263938793630422394ef77308df873b871605943fe8e33dbf36d033e3fc258156cb80585679ae62b717cf542b23b4c3c0ff8c38aaa2c086438e1b5b50012e168670f3d84d31b0dec3781e0e0484cbcfa91abd1e8e3358dfd9f2827037d80484693b332f00f4d13d64592ec81b6b920a4850df6f720373ee874a4c9a21e86f7407148a84f72bd828a3a245abf93ed319a7873c52df7ad95e577ec2009599378e69e43effbb3c8e46863bacdf256654a7cea81af05c0051d551762ccb1b532379969198cad391bb40180cab8b274cde5ac39cc27171fda4fb7c1ad2223b7efcde9605e00ac79027bd5efd89d7885738da90497cfca6d99a7ae053fb2e7e828a6472265eea20a3996662f790eccfee2cd03d9990b984fcfbf78507f0176bc895b431de5a906531dae32be006f2847b80e4d07345d192ce8f1d741ffa048bb6e575db141b241ea2b3dbc1a234103065fdbd53bee46c58b81e91b4845f1d64b5415079b0eacfd35de9f62d23626f5a146b04cd64b5b15f206ffe4d1c678c802e73ed12990fb80dcc47dd764dd8378af09260474c00c92e6f4b0a48d15c76678741f3aeb9d20953569438a406dd8f4861397ac85e0ddc4e0e7a5dac8a84069f2a740b55f77ae72e6397aec038ba9f1dcf2af9588223114563c4a0812f2961b27dd4dc103b517c255b19e8d0cab89090a22b86ffa08c909dd8f17bcfa791b228ea280fe66d9df0c0a7e28edfa41d8a2a4205c9c6a08e82ddd4c8959fdc041f87d73a4be076a76b87adba47f2ae31b471178069b46a720f8ebf1297f8b5ccd059aed039053cb71403d669bb13d03e37ef8a630fd2e7805e37009728e31a30ee25d6b3805da81513bb8ab69349f28a3b2c01786227fdff9860011ff167f377a174b7abc9f0a2089137326b779dfc5ee7afe5850bbb9539e49229729a8c28ea10cdb97fbcc713d9b600344e0e15d60263009f53b19698746b53e057ca5aa2d164b844f900e9e1d1a99dfa2801bc68bed8a795aafdc1ecf9542e8e9829da4774c4bdc0df3e5ef6369396eac0f7979bda6e2c315197437b10c8a89bfb6013001a596595fa1d2f38509b746ee099b0559d4c18da1226242b00ef4b7049170db60c4b372b1246639169eabeed4e8f0e7f519bf3f7b3526ce613f09e7349f5d14f93c1bcebef6002e8c7a7fccfd380b9023c8243f2fdc524938ff4290dc5a366b5f5e37a3b58141524b3fbb77b3715bac4a62a9232b824541abd2275a683c9d4ce7adafb84160aa22f750e755b42f518afd9ba671fac1a0263e5a309a74d0e24846ccec72ff2e9b4f05507c1d6bcc8dbaa1c5b4b21a04d38554f9e6d76e91a5dbd11e664a2b15a504f9b0e20546c380c9cb635c5a05e65fdda423c2a7d1f968763b34b5c471e0480348e4d1c3d1bebb16ff06f5d04ac0b5ad908a5c723b92aab5d9825378500904b8777e93cfa9189d50a12329bb553e7553be700cccf7d7dd093089b7bc31ea5ba309e0d08f196bb7d5564a5081c1ba0f9e62875c2eb3538feed4dd5b26b41ecd3184bdf098bf229b3382df12b9fcbde4bc3122e30dea7023d53aefc63e4310ca025c687c6306c7a7e9bb73d8ca72d4b55baef509e109c8496ad72381796b6ae2940562ec849ce56e76648b2b49d078d1eb4050694e9db6610e3e2b055e9987a755245fc953cde67f48129782ae7224cae979e769bd12e4fb4dd468da5459e178c41d918b7736552afd4a2b676ef46310e4d00c83a305be78984e6f68f12922e76f75babb6542ac22048fa94211b3ae345bc7325fa6e2bd797be09149cb83a663b5a12dc1849f75d4ec37b3bb2d5c80b5bce41b562f366c7e674f80f539f5e68e45448d467b992cb412e6bd3b184b6515969b09ffa27d45e7f8ffc0e3d2fc8dc79cc43ba2a0cc4b501721383a78fcd5c46770a0c4a733c4569f55b39e0d13f6800a94db7eaa955c39775bb741b60d5d52adf9523db3d6824ac905db9c6eb8ab783d5acf32efa0d9c0a21abce955e96630d899a0d34ee1ea251464cb677e7726f0937a8957e66b4e9625d2ab89df1d8aff85d60f1ddef27675e016e577a2bbf399bb78bc662551151a710815abc816261f24331f85fa74b1cdea80dc5562139bc403d9bad632fed7de224f9dd7976fd2004235349417d5169d6236f28962fa7a100b12273085d10141b80d8695d39719435e50f0e0bdb03f5505adca7bfbfd38fe3fb663fda4542bf580c6625ef3086668d71ad6c4628276953359e6a5b38832ff204b03a60504b26a3b0ed3ab7c4033e14af758d79cb866ce89cfc9af102802934b2478b22e6f2f00354b3d03d5db2c3d388af992c2ee8a716773d5f0a859224b2ee755ca87000c681e0010d0a64599ed1e2a2b7e7b815c1e5aeaae02d2880c872a180d27b543e4f233c1f1ca53fc17716a7971033d1d4635d298b46e25614be7eb1b11722fc7134f35155239658b2f4abbdd6cc97e1ee3587d028b8b27414aede08505325ce641cf905eb4b6616f4c0970ea7129c502cde6a8cc85f23eb493f988ca5ad0d34deb03c4128bb9ce04e81e280520ac88754070e43b463bf237b1ab627f74e6095a698c4ee569cc02089e095fd1edea6ec2e577cde35eb0e8472e73fc0905ea959857b99f2bb155a3d6d84b76c55b3bbe88477bb46911f9777f54d3c3eb6046de74301c4379f4ff39fc21650b43db491e41c0ed3611028e262cef4b48bb26836a9a8d34ca34c7112ae503d69bf1e06af46bfc5cd19fc2e77aec385af8eccb38b067b99392009a440d2dfa2087442d49d773544b0559b58dfc49da8362f4b0df56686fa93951d10047336ec38bbf044e4e0463284fd37cfa10a23044f56799dfb318f9f63e9d1dce6f91ec4fe7c6f7e0be8ba3852f816bb45ea1f4205eb9c8c25d05f30b1066d316ecc5fd2649f08ab9af658fd2130804353cb57095dd6fd01fba9be5483d339362554c1bd710d03f31974e92af98cbf8f5415950261ffe425062574b3e3387c1492f90c2e2daca87d11c93566e2f41ac8d02f9fd5184f9820cdac48f6d81d80f23e2407cca1653e720a5d045ae550d8164d833d298aac6319d8a703c56a6a8bf9af3b7b40d4210ff98a981ead098842a0557839a6c0ff8b38b07c6dc7a207e6506fa83031cec6613b1be24b085785a08f6f765af5c13159a7dc954ea587ddd92106d1ee48983d7d6044a35213d52d3a0a24e567be9528158be4586e0722d2ab91fa207d2d396fab8f8e43fc758d69573afa2e29a845ce070f512f959379cfa6cad5fba487b94333f07f2a11d7872240477bb7685cd80a7758aa818af497bd10f41ecc2cfe21a05caca1c059e0ca3e3e582fe9eb8256c3ac9177b616d0818232365efade3b78706feb7c6e9b395ea797959d2c7cc1c8e3efe0413601d0410854b91ced80e6c69ab4d4969aa1894b4393274de9e1c13551886d8e68139bdd35bea5e00ddaa71406739079ae317999fc7c36c786e32ba5f5bf61e9b613da60f3b72133c2b624699cf446ad1014b151b898e9946d4aa720b7dbe4d787cb34cf2988559b74da08cd447e1fb82a12d87b6131693b04dedcaf7f261de244015234bf7a6aa28b0ff948e65b432462f2961dde8dde44b567735935e63591537edb969cd388d06f1d9fe36ad1d979227e954117f46f38e7ac1327c164546c1d0a78feaadbd6ac88cca4a5b8290a3dd17c7aeef4b0449d0176651f0be8a0fc0a6cd173d0dc7dbe3fe4ad97b8abfdfad6b5f02d5d0886fe6d8d114cfcba44c8836e8dfdf61ca58efa2c65bf539edb379bf19d053a435de092b9beb37a216659eed654a404e474a5226d71276f4ccb7d87f7297e73aaf0cdd8c2145e6e672f35b46dd071e37c158a206f7cd7f5fbf65302913da0f085684ca76fbd54c1d2c6e63efba76b792caec55afa2cd5cef48341748581749a1cece667895e9d59ab53f4f348819baf3c68df3ad6292be07f9bcf459c9c0157b6a52180d8a242203900e53a1b07076ef36a5f27ca1ce115e36686de9e374f109cbb885b242e4afdc6f3437d3ee0b99c9bddcd89a0adfd546a0beda553f967ae1755a05e35adbdd79854952377b5b9227ae8b2c71e8389845ab38d03838b50176d9bf3f2d3c5a398f84c64948f2e0de9d8b4944b0d478c8ffc85ec61f5941235e6b60880c51e05272e0337374ef2bfd8ff68fe7c34a00f5c98aa942572bdb6eeccce676ed461ea6c82a096767baad7d6362d75c25d3719d376490db9c2ae432c650a9925c8365b4f3c4b09b8e0fd5bcdc42b83854eb3b2dcdd8bdd83ad0ec1d6fb93250e69445fb8a32e1966439455a4f289af2dd0bee25f17988eedfb8539d4d49193907e34fe8f006e4de66d16cc4308708122abfdb2446a97a85d73bdb20e382b6c12d1ad40bc9b362ea1262cc9924e0782cda71a29731fb0b13dde5b346b718936fe28582e27bcac43ff357e53780b7739948cbd50d57d0d33f4040ac7d6c6d47cbb4cddcfb9abf8146964b372e089e72fe0218d2d50ced3b5eaad7074347e34c3b105e32c58af43294579742eaf0e80ea1a2f33cbcd582dc087a135426ee2d095481a124bed12b50bfc3d6890cee369f4a87e562f356541db33a7023a6c3ad179e8551436611a7541f778389f2550cbd5f4d69f636e3b378e56897f6216ce5ef8f97c8ef59a10ac539df28b649c9cce1364ffb66e62223861580d53c454e5a099e3582b8e823c81ca55720ae51c11993862c04258f7646cdda1fc26680fc8bfe40eb1900b00e51d2c89c25d2c8bf555cc55e3ec291748fa89991da2542dc0e261e34f6873fb54a704a0a82b41d3912955a52e5b +MD = 4917761d14cbbe8b359b38c7b4523c46ef55406cba435dbe7461543c7557b0793da09522f8f9195b9c2d8712406e548f + +Len = 64672 +Msg = 8c04711df0e2fc4b37d505c936b515cae0f2eae4017bcb1730de180bfeb02599742f488dbd2631aa1f117aef30827f1946c370692fbda5a722183167f6a4b98b92f88709a559daef97dd80a4bfcfa770d656f13eab52c6a11987ee1636fd5f89cea6531a10429e2086803f6e4b6635d678f294ecdf02d70cfc71789f2883be991083d74666aa2647d643ded83c0dd05414e181fa319480f1b31ff68a33fd7fc640d538180f591a6b6e6e8667fa8d20f09269e1f00bd2685725d99160be35491546e5a1157317219536495ea5edaeceb4dad3dc57d48238463ce771a733f1c5900afb38c7faace3cc161b8f197d3782a8d46799b6f46d97c7df90bdeaf9fa9b3e755f25b50ddf0918f62e404b13f2e3d3696c4195d35b2ee0f61d9eae781872276d58916712793b81bec89ac415a59a3d7f2cfb7cd914a59b6ad63b7d1812f254db2fa466734320105632c50bed194feeffedf0f46e5fa3002103bdde41b2c4cca82d8539960261cca6b4e8a80116a9efd2f84784fa05d01604ec4b5a5bbe9097ba975d68e581a5be97952b24bb645047de9529b5e5cfd5e5fbd90e78cefffdbefbb8537cc68795ec0f1fb70682caedfe0d0bbe0e97825a75ef112dc0023db44852d790fca3dbd960f798b4d6bd11281d46a42d1778e906cfc6ddd1ba60405d3da63b3b70e346182238494a1dd601a8aa70a69f58f1cb82fa6a8522ef4ecf9fa6e12d7d60ee90fa38b87a9f61346216b0755a3b5a68ef75fec15147e635b4228aeaf57e552c8129ac6173de2d3ffc19343c082aa4461e88e4b58869277eb58ff1a9db65d705e04a861a7b2d065f975a40adf893bef42063b32d74af3b8f9b8ee306275b6ce17708cccadbb476fcfa80dbb0719f31d8bdad73105b42a9d22dc669e920879e280c08885bdc9d047eee340e2dbd76845cbd0f2c488649f9ad35e08a3a0f12f44268f5c1b4c40d394d3b1ee00c223f3fe7e730e7bc3dedb48a79834fe13c23f697537580bddb2e9bd1a9e55935e923ebe004b9ac54c85661d0c358bec6efe32d8f9530cc5e6b28b473ff32819159490fb1dc5181f86eab88e7d907e2d270792093f5d0ad7fba230c9907ac6106bcd933c137a170907815b1378337c0eb060e58093cfa2b08114629ad87fc007d58fddf78dd5080042ebb65288b9062fafbca5b5b32584fe1b8b9951548c966df77db9c3e9607b93cd8c62b22b8bccfe895d4b3ef9f9220f3f7a5d83b12bc9c125f9bf17b296e2421be5d8c8dd1600f9b1d55e72f4b50a62416327885ad7da900586667975f2cc89928a90fd19f272bfdda748082fe39ea5d5c87ff5de0b3958fac6485fa00eaae8d5dd13c56eab62af5165a054f7ff5f38713cdf52a740669a9a1bcd30dd44fdce6a6fe9b8479b8146a172efe00972dca88812be05332202c358197d936a2045c8a4b58b5c416d3f1462719f4fc0e89754aeeca4a42dfa6e61b921c20de34b036639406117c87afca708c436eabacb0feb3a4d1ba5e46439f431d742f6e50fc7058c831371695f5a6d08ed3f475384b6cadea69b90f2e9d609569c68e4cbf9014503100b0f8084d8e4e77f20ec27c01c81f07bacebd5e5c30f9c03bc6e248132935159c038ca85e89d28dc745fa3e7b19f044eb81d09f29185768fb5e97b52eb8eebd2cb8383dd19f441a7b20854760670ae9255ab0b9ac1f97aa2dded2cd88c86371d958668e4dd88c643528cb5f59bb543e8fe2c6748c4da1cef9cefd57ca617c79cb6a7d647b3d92b41ee3354d0e1cb68a52a0789871aa5d1c88b77f1c9b8b211c2976e58703d53f515edb29db26921817951c2fec053fb3dc0221c0e4a44f3aa31b0405bf8ca979851c9810cf4a25622b81df5439ed138c558f9228768cb4af56cb9d47d4bebf299680a053f221de7c0f3e704d47d42eced055941f9cfcc3687d5ec8128d432138cdb37d580c54c44f0bf35784de609963957fae0d1c9c834d60ff0ecfb3c0d78c72ddb789e58adfc166c81d5fc6395b31ec33695abf13fc4747d4f6e40ee0e70fcd25d44d446c38bb6ae64948c6087c221d994b6e4d0a363c790508ba66485ba725b45e0bf3a1d6265d7563a6a875051d6fdbdeb18e283a163fbbccb983a33a3ec4b2dd2db8d2c2e8889cf4e13227fd092c1eaa8c4a160fbbe11ecb492d978dbbf046d71a5ca702eb338483612dc76cd09a8d3665487bbd15a7558cd32bcc5b06f298d63aa7c7a015a655988d60fc5b59014d0aa551004d0ad88997bd46ecac0712d161f560dba3502836bbcf956fd08cab89aeb52d4dc684bee17571469c89a6971901b3518a1483024f758e92c8d651df67abfba409306a9f86ad55f386f8cbcb973cdc407dfa967dc94d3320ae7290e40f87e17ddc93a4c49fc7d31452045ef4749dd8f65c5d70dfcccc2407c9ae3103aacdce8270f81975554c5273a8b2475bd7a90f3bce46fb707f78ca0fc2911c8460022a796a66b3fad0c33ad62e0c6e48e9eaead67bbb1e7a0bdc8d0041233aaf58b05c2b75e6599a37b4f2068f19bb02d2e7cf910cc7c143987dd6a1ed6d71cbbb5ece60377ff39eb2a7e4cb71e117d3b9282732296fcc144de50bbb6f76aa22b095e7e058396a4e6b2577ec7d6d6801c6365b8279bd2835529b96166e47cefa60dc0f72811ca4f287b513335ac498d52398d149a5b8bbeed027dd7a93e6c39cf3bbaee05a318ad231e02066b0ee8d97f5d6f34f54686e87ef124aaf865d735090ba2cf08a7f04368f2d064e29f4318f6779285b2fd62a47d6e2437ceeb4c45e5f62f26bba0efb65c9242eb36bdd6a059e08d737de09d578ae2232ab74f1a00d893a661891e755a8084dfe5d1eb12240c50b6aa9080958609e577e02bf1eeea636cbf1c1b811fc477431df13eb794089020a487a55df9c47cf0b8f4a784296718d9bfc2cd694d68a34573a9f7a3cac287d8ed9726f92887768c5cd4a46667fb6b734ed229479cdb8714775c772024e65601e8558fb2a0337920ea0ccd29193bddc1e2d6b9ac7c81b528afa547bd30e87d043b4f6a4b0f7ce756d7096c3cbb9cd22df25cf8f86aef900a72f0d3fb8d4d8f784ce120f2b4b85386aa572c21cd930b4013c161bbf699ba2267ebc63b8889efd693b75e7a3e7a4048da726778ddc2cb80cd907e779e04961904e2792dc12220a7a63e7d221b373005fde7a8925a80a5786666c9bbcfb4b656c0617722b5aac4440af2f78ab97395567b338a1ed2612b8f94a0bdf90a2e8d5421054abad4884d6428517834c7b402a2d8c2666eb3e8b04ecedac59febd69d99bd3a6e66ac5f1e6084e65980947cea83ad20e8129d9bf62e8b719b40d34169bfdb7d5cb6bb73c9d1b73e261ece32cf615eeb699afddf4fb74101996c6ef3740f324a801b708ae22025a5686fc37a23e4646e657833473f6186073a82fd714f30282e931569e8d9e456d89af412b77a556446863afc4847c5c0ff09153d2f5dab4395e02516321386d134283c4a8f555cc4f03643b776eb5c98558f937c9211d90b1d01daf3db41901b34baa8c94627630ce7e022d337bc8e62a738ae5a5e1e51e53062978168c6889b76acda1d9072f0b2ba2e68fe2f1de3b6708ea644c7d5ae785cacfb4d5f24e8e8668940c5d2ca9e4cd37b8686b191e51a2e1c1bca83da372b0e2b76c622ef397880ca6d40a190c431c051fc1b63bb1af44c4b8f6a068e9473d1788a8a5887e2c2520ac01c6157fb080d3c4a1ab9fbedeb67a76181b4853ef9231ea6e864817d5c56a4d9c7b692ab4616a4f10328c6e645fcba42d03230af119f887c8edb5e81bd0b432ac105e36d627936717334ce9cba67eea3a3f4235d5393404bdc2181685aec402396d3acb9f3a14b4bc9625569af55def49b7edfd2459ac0c55edb9cc9cc762664c7a45109603b5e0094360dd5ab32e5c61536c8a65e329459956e030e6845806eb1fc92e43e84090062244a89247bad88bfb0603203e735790e5d56aed4b6d8921440c4d2e527b6eba1c1bdcca1bc90cce970490ded252eb4383dfa339856898f3d15793e0aa30222d172ba48b9623a0320fae5b25078ea9b8164803509b12da6baef22be056255467fcbe265b208f3bbf4b4c898045ee38f98756b1bcf333f890c3253bb6c023ab71b41a8ac521d6857e33264574f43b410ebf52d605f793996af838eceb4ef1cf522687f94e01c02876b084b58b7c3d6bfda58499b10ef96602367265066a596912394f9b802915c9afa8ad014c45bc5fd02033234a9f2e065f631dcf8f7b2121bad7b997e2ff9d133205ea523fb780c48f1aa89b5814fb2289697f510ee9129e50e70c15fcec20ab06ad83d0ed3b5043407a2c2a61d42662892ee0140c1bf489df50913f5759653c338ac0a2dd37f684ed2805f8ef47776d669c8a3f117b8f896cfc903b7aac356cc282e8f19715382e9d0b7b2c89d5b8ec289ac4fba370aa4701d25031ed4f58e3ba7f45e4a43bdfe9590dd8efb8e6af86d80fd5704c620f6aa5ba1b4a39a8964a23681da48b13b35f2815626802e225e47de506c593b9849b619c37ade521b7490625b958d4037b35120c63c0f231e3ae1f039f2300ded2823c60ed84792082876a9d6129087501161fd8211e0d3bae8bc651e8b11c37c1c63eef85f47e0fc0ad57ba5d3faed00ba85862e5abdd6951237bb728986e2d18106f2f47277b553962d563f4c14e7c6293c492f68ee921921f451da9ff7f29a107d8097b45f85ab54fed806fd771e1ce806b519ef0b9cc3b272d6bb10fd5912254806568757d86fc1ca6fa16ab9e671617568523f9d6d312e23a8989efface649e6f2c57e09341d57009b731625d7604ff8c17ced0c79ce0f9745f79c976492f8eae4490aec1f30af31ca0082736765ee115f0e79e14916c13e3d6c8c2cf694acc44975b069004614ee99de320b2cfed64faf6b68a461980d990d4c0048f957fff390c001087dca3297897097558e97931421382bde49be2f38242a7b73d3794cf968ac6f62ee3982bcf74c34fb02ccaeff52e955f76815b08c109c60262b652e662fbf7dd0d8207fdf81e59d64301a7471c2f35978432b3c0560f650e857a81e9a546d9efad1fb947fb7b133198ced9e1befdab8d9716b2c5483ecc032eebe9836753b554952477b0de75388938fc2964e3823f6a369520bc9f7d4208e671515ab10ad2344df707e0abf31205a9f45c7993a53856ea17c45064b31045337483168a537ab65e0231806adce7ce751d3dc7d74ee0783a0467279eca7fe3a05c4560fb16f3024fabbf38211a000b23de93f7b6657df9aec4d1e955a9d50ab29160e00b3b8641a85c77afda94a5e53ca125b039d35800cebfca3f91385ae1f37b9c3dc2aa7b9bf27c238e9c321e8447cdbc9b677eb9b6235e1ad15b5f5891ea82c01f284b1a37b373897c70dcb20fccca205f484fe74334078846ba0615411f0f96304606aa3e76a872225c7aaaae54ff19a5e42e2cce8923de46b715da1a1b88e41523c475d7c085a5276bf44e8b66d66f154404ce7fab1be27b5974ef4465577379c76bc12b1b71ec35a232e6cb8ab6e9566fb7167f21555d8aa80c9ce685e20b023be5d7620ed40df10b1dba99480751116d314cf6733b161eacc32929049373588618ffa32217d105ad9b121b29326ded4758b80c2a34d7dd6e82dd3469d17524b0ee8116dda0001990953579b49d06930416a2e7cda7666ff53202303c03d70ec24ea4e4cad862d4bdf46cdc72b1e3aaac5251b2e4fe8c7d49b9de44069362bdc31fb1356e27bedf3b9eff6ce9d6cedb48f40e93f8a011af7301b9994de8dedabb4bf03053f6dee1127d3650a3758dcedee321b290f5bdac7af0dd569c6a130cb3b9a9fe00ab88834b7858b128f4e92a7909d2383465581d667091a47881c9fcb15124c6fdb0856ded76afb6febdaa981e4d694d6c58a9a940681cab6b95c752c0fba8b1d36b9d4600618188af3698bfd7972d18c13679f90fbfc792fc0ed6b5e59f7fe7094697b78d20174ec3c97a48abcf67c2ba6790b4db5fda82b454becd2a25ef8f27a73d679a9bb931c0dd1adaa3de5f72e053b683ac2f9da219cf4743967541d2b5f855ff32baaf5930d93e1ec5aa5d51b963b30e8b17571bb5e838bf3178bdd73ca0a8265a6540ed9a27afbb1b1ca987cffd4efc7fff521410055be80414aac74407fe851c84b515872e355aad1c8a3baa8b50f691cfd4b6b0907667163252c953951fc37fff56fb7e5697a381934a96d07382a3c86f26281fef52e370bbfb06f3b2d2898bbe6bc407079f3da1672fbfcb1fa9ac2cc89093e58cb7051895eea5abc6e07f49a93c9baaa913d1158282de23f590b8c5c0591f88cd6d7518aa73cf0339124cc0a911a6f0a4bc06e3ca8a1d5e5ffe709c40cbf3921c3bda78e0d1ac84732e99f9a4310d60616285152991a206c3ba7bb8312c388be0eadd3e215263b5ddfc0dfa83e5f98346cdf6b386dd95a28b8d832179c515f980422574543c1d1fdd4651cd2f7592dfbcc4ffc3c8b71fbb1e3f2de002deb366660b5b2161d80148dcd20c7a8f29fffe2c114b4fd96768d8e49823fcb2bf3a59f90d264e2f6e38ba4369e7078a486968fc7a805ea035978145600d7d73afd15ba1102f02a846e9fd78d38a7e0a1cf7a396c847f90569d43fa95e926c2cf8a0f3c6db1d45b3a73d97e5d89ce6f6ebd23960c34727f04a4998785b5bd0c5e0d0a9d037991f38db5c12f040c64835fe21b2c43229f049211b161a1f10b125b0890528ec4b9920286df603d2afabb19d0d9428de945cf8367541f872581736aff29034c2daba51d798c98557ff175110be69f6903174e6d17da0781cdb0bdf2734d15d81ef8bb42f0715de986095fd9e5bb8950ea83ff93a5bbb03e44294085e76500bf03112317adf61755a782b9d900c0a6d20a0c51ab8381a029335bb999de196a7d84959b1fe4b36b468efe41a2efbe6e690c10f32953c46dbf15b877b2c9d2a9701de681a05711b02896ec55ac04dd46825b42427178ec6f8c65d009453d1944533994556d57998c7849dd8468e2d5c5ba6210de3875722bfdae22ecd5aa65d173622fa4bb68c356c222324c6e0c10727dcafd04c2dbee39af5931a0f88430c77d1208fe3f2d27b572ba9b1c3fd315c348f07774c50ec90f0de18cb4027d029ccce3b0a04d072f1f167d688232ea6e4eb86d109ca3908b1285e1849497d773d7ef31c7598979420a29d53b0d0bb4825b28bb48fad313bceac3d3c9d13d35ecff5096bd78690628ed397c731b0ec3ea9f2645810df7ead70e3432bce8570ad6798d7cf39b60301c5ea1bdb14ad08b1f814da66944768851e35378de4869e8d8dd127f1a210379c4d51f23760ae59c8987eb58624cd39ec610ae30ce800a326ca08bf791a7c7659ac6ee4821d9a25ac139abd5fc6593709c0ca0d4ee1dac89fa5a3680eaae206606cabb864535bb584f1cfba9a84d3ac05c3dd7efbd7fc5520a70bea58582a30da146f38870bd85179b88473de6623de07f2acfebcd24e92d356a80d012e3c3cef2d212a904df941b3f223b1d473321638d69d5539dbb7c6de3de299ae340072c63e2b572a1fa6cc5926133c24b3e69bbff6194a19f9223b69e1225509715f1a88cff487fb8bc73b93ddbcdc752e28b7c5da89a6043574379dccce0abaed3f7b5c69e481ab9844d68b9e86596fede1b0720b5331a4969603a185508069b08ade6b93630fe34e05e566f1d97abbf7f7cfed10e1b39e2470e79e940e7fbdc3268bddd5d9f74bb6f3b04f5e1d080154545c5f7199f49de7ea2abc8272cf5e2dfdcad9b7ae028ad7f47f6c6ebacce80dde9fefb7e5bb47e8ed1622d5e237f5f6f5e387c24af849baf199e5a8188b19297fdfc6692cd2442e5ff1f918c8812a27f81d107d16a12f65d347e3959f103cb01e660b0fd5ff3dc12a0468d08b73a4c6edc29c7078c5e5e280d18ebbb822f8aba27ae7324a0bdaaa3497988793d60cdebb185224d92b1239e27f0da4c988f521f5648259f2bec2f067f2b1c4487109744c685b20a29c5f70e09889d83c0bdc1afe6c030c35df9e9ba95cda10120e449287f9dfec39e07391616629dd7773559ea5d993d37b3815b4e41f3bf25973643f5415051108bff8a34f2f163de48807b6d2f559372c8fd041ff81fdf2856912849b02f516750193af913c7780e9119b696d067ebfb0ad764de2cb4898feb8f6684409d883ea6deebc0fd5752cf0d8b8c05e5529f4705ab0dd7544436d2c28b7f33872d6e1ceccb1d2b14238cb60a307c18d2a835cd25d26fba03617f87881fe2d5d8516b789e684f95fcae7e4a13b3076e3cdb4813f807fae4be7ebc1488a721f9c8ac18d83830d3a01b6aa001b68dae74685e3eb208964ff5ea0e851050cbcd0dec8feec236bf79c7f4eaba636f1ad1b9f9b3820db417cf4c1a9362f18d083480988f65ad365e828c1da0f5e5aa0531ad757dcaada7070985c4afce3e79b70900612d061fb3b88e5afa201b1ef3b71ecd401f71183dee7f017cb63f6dc382bafbeaeb58901b381db32eea7255d8bb29a80e1b0db40528a06db7392ef5e6d5bad18a4cd594e967812300529440c58bb2ac23f3092789601e18e8cb156d404a893fb3b3f594aab18939230b096646a37a781629fbd9270f3891a5ceab4a8c3bc6851bc34115dbc066541b764a2ce88cc16a79324e5f8a90807652c639041733c34016fd30af08fed9024e26cf0b07c22811b1ae7911109e9625943447207dcd3fff39c45cb69ee731d22f8f008730ce2efc53f114945573ea2ddebb6e262c527d20f8bb1dc329f401325431a738001b4698d4aca96fc5daed0d86ae169baf7e0b43d8440c6b16afd7a140910b83e223ff65b8239fe9ee1e2f23409ec8e773ba7ae65ce1a105019525ad693fa5f14392c9e1730870b93ac8213d810ffda015724c76fb266427672e6bc552901f06c0c2269a99cdb4544863538acc744d4c113fe0743784de58a3f62a778134df4ad65ca60f90e5e331736a36b9875e0041d39dd76c968f680f6466d24279805f33e0acc8af0ce385d758675b38464fef27e8f6b1deac9899b2150b03a4a01517389c3cff07423904bc73c531958dac4274ddf4d038ce530be7324d3f1ca965afef55a7b986e578e867321e4a3fc205a2af0ef2e3098021172548c7d518d9f481bea957a8cc7b05c95e3fdd15b587ee983d187b4adf769543e2c4e56637c644353d03e71d465771f007d98c149553b99bb567187818f6222ab6333072e7f2d722c101b0b7632f30250abb95d74d9a19159e97450b44a34a340610338ba7f41fd3010f5ee7c156e2a0cd42a4de4cdf6fae5f157b74f0f29fe858f86901062e90de73993c2edf52ec2bc5fb138a11a83fbe7d6e36359c5875c025383b837126dcad8f3bf30d2bc7cf0e8b617c7b4a690bde8ffe0fdda5697e44016c4583775155b8ba73fdf3251a0dc194023a1245b656870d6162cdba9a1bfc6410f17197528e888bbdc79159ce2b0d6659f6ef920492305c24c9962a6ed141c3a2d9de4f9f09b58995ea384858a91a88d51d83bdc8616312b4cec7a35c20ccb6be693a0e8b39a82a78d0785f4dfa916200385f379626a7b79dccc283e6acf5a3a01a1562cba0d8e4f314d23d12a20a8867b1d29de26476b15c5e176a92b845111486e0dac4d1d04f8111d6304b31ee6288249e3f319d48a65ced46b5e4e53395781a3cd50b4f16d09f61d4f75c2ca596cdfb12ba0853a5fd2c14d0f461a65987475e79e0036b351eca8f8ee0d9f4c88bb5cfc08cdb0a073c565f36b47d9e2f9d0ece389a41c883608ef5448b292cdfb7ebfd28362e32f4ca4816f864ad1f2e1d3ae3f9524af9aa6c593da664de2753b1bd1dda247660f74d8de6869384cbbdae582a2cb683411288b5b314fc7d86bcffc5ac26f65816773ca44871af790686b6e31b43159f61545c210010b06bcd83f87222cf2a27c5fcfe17a74a371e51f1dd6841ed2dd3ccc83d27af4a3f4d6e31426f0c132e79e2112844ad60b8c950876854088b3dd4d616d2461b01e786db5d5408d29371d31d2c31d7a565b32e74d00e33099de4272fa881e8ddd8479ca750a3cc20d092a7b9d6b13d39b9a4a221343591bfa5af2f3c05e29c624dee1364c3c845515b1f8c5a891ce1d4ed0bc8f85c64dc8532fd718da76aed32d3397f762f27f0ee8366d561bbdb62016067076c81128004b66d8297058137d9f8b8355deb495b72fa073781f7833a39c434d1f07ac538b8a05dc6dac8dc28c22ee8d9ae80a2e1691f7f171dc48ad70878f3dd168203431b917cd2db49c21c860659d0caa7db2f5b744ce8a79b88c4d80f228d513f335ba80a192b1b00d9af8fef79bf54994891a488ff40b1e4d38032f75f47431b0bded86ad1341c96993e6a7ad6f9bf0d81c4dedde4a3cf591195a3b1f8af3eadc33937442382526367658018d0147c5cfd1584e3bb864230b97194df9d29d65010174f169e9a4f1ffaa17b4a23940f003110212ad26cdd3431b0a0c09b4b9cba68e58a6290e074f4997eb69f100d09afc4512e23d7cbd2bc20bf32159198e435442073a8a8f976a9ea59bc8843c3deb40d35165f1a27d530fd19d33f1e765f6928548569454996a853cf17862d7d00a59258744d3815574b2d3d0ebd708860ce8bfe5a25045587787c4b32293b7d120cfa17b26ebff8cb6347b53f1156239acde58a4c5c54b1bb72ba5aa6d20c6885428b1f7b43f056c401c30f0ecb3dfc6fefdb84e68fb4c2955f9479e0210ea3ccfeebcc196da7c3b3bf2596d84b766742bcc48ab32fb31cb77791357886b0d37b8a82aa273c14a42ce3f6093622bde8d5bd46e82cccce34946346f9ca83916bf38df6262f3fe59c92289ac2a2e163157b59b939cdd7649ebe9b1c4360a83ed1d771acec9bf978f185e5ba5fa8f81461b62ab20c20e024af988787bee55517a999ce1d59f7f97d676ab3ab3ca2e7305208a8c7bba0777d0ba4d12fa8a31a9a57ad0bcdfabda03152d31b03e64b3f456b053c40e4c6fddc2775e06abd24895560a3a3454b679e534831744ae8ec50c2111e8dd4042ef3d0778e3dcf5903f1c758f03d09d8804441ac1867f6b110cc44e8c6f5f78632e9e8905051d3f8ac146ea52521920e92229b12ea5e7ddb53223c56911d02076d5082f66eb50f389741c9d9b509646a17b9be0149d066d41dc326ff0f5ba9f448b83e1e2bffd785500a576b224cf7777b8a28fb99564817fb4f8326944a45d95f91887c2a6ac36b60eea5edef84c1c358146a666b6878335627df71b2517c230c6ce0a4fcae6957446f13b68f1969ba17d900e6328f9d92c8ec9a74fc19a36df9bae50ce5332fd564fc4f79839345e845587adf81242ed2cdfe5284d3fb5216820be428a6919d626d26b78b6f8aecba5b1346c6d9ce825fdfdd8645dc8f0 +MD = ec24f4b7a267e87a2b09d3d9a85d7472db6b3901347c462a2cc7920b92824229fd16f5a5cd07f9e14621961d8287c3ba + +Len = 65512 +Msg = 788fb530667d014e4964e02f6af49910e56bbc51675005cc3764826573d6f8e29db684fe56ac7eb868eaa2f10a5f7236602dd6db425e06493ed2a998e07c3f6130cfbccd7d7275f2593b4060e55bd7f64fd67efb9837e66a9b81508c4b68f5cc3cc1a6c86538b0a4244102a3825192f8b94dfcd9f3436cd65558bf693c01e5cec6768a149564f575cfe230e369a769e3a67a989edae96235743e3d563bafd60dd8d5b0dc95600d0d6408114723c725601e459a72d6948e31011d147bd1da8f3179c65f46ee92c015ea9aeef837178e162a96497c6ea9ba7002dc8a0185ead9e3b231e07a2764d5356a800f1d2d016baed155eee52a91ac9a8263e810e0477ccb8afe7ca1c83d1614eba2bcdf8eeb86cf1c6ad1d492b42d58869a76cf695a4090091678e35984495b75e83d66e13fa52211bd3a722f7a045218697b67a889edda375f1f6763a337b1103ad9d9ae64914ebb3771e7884cfb2f3fb84100253d4a531dc2b8566e01a8bfc580da607ec212fc1fbebd5a2590d897046f0ec069df20a1c2278ad70006642d9ba28625d7c1efd4473b68f38fb064346d762bd2fbd5376c2e77de13a31a32a29b88264d44c9f27d3a97b8dc4d1267ab85b5e05c6389575d6a98fc32dea5dbc6cc1a01034a42e1a000b8f63ae720a9a7511474872a61481b7d742c5b390f28423641616d739485e4a2886938e640f1cedb7c317ad7c7d14f6ff2b6b63dc0debee1e38cb34627a6f227ee5bfbd1dc08c82ad35d5ef222bca149f9e16c7121c8e1d6e9cbfe4b640c7197d112ae305bb73e4603415a03dacfb81273f7a55e98ad541c3c66760bb17e0afa1bd7778c25c4d838f225979357d33dd2473e888a8e54bfbbc2a5420d77c56559b3f27e6ba2f73d078a503c29008fd7915dff3e7f6c86c8bc65d08bd91fa929bb81abec583a1a16bbb10c724e3fcd2f589d81eec5980b1a260c2e78f80ff2ff296d4ae9d855f30a5d519f61897b53ed2eef0ec1e27cab5b019f0832f1b1688eaa5f169c755b4cc2f3515230621deab81c3becdf607e2e345505a6e04c6cd37f463f582eb6b4ebe588996d08618b5a382969646fc7085b4c2b2850ab92a7fa7905f559c723c8981c211138100f2e6b165d61be9a9d81fb4c8aef4ebb4acca625f0695e8d45ff1d0fc8a1fb71f36ee5fac00b42876c51d6db7b42e737fc429f2a0e84b2aba3c241658431fd5296b48f8b5b4f385fbbdfb4a2050965473171ad32682c9c47c677cbc75ea987dc7e6632723516e74913955d48302c0e156fc198e2044a638a348884dc5cf1e13635ee96575646986efbda987604942bc6419a27e4ecc7509b775b344d89f1538a43b283e0c7c993f5fb162fd48a2703852c6424e02889aba2175aa3c1ea9225fd2e1cc1b88f8520079bb2e809c9cee078ba87557dbe7abcc99aeb98e189ba9eb980921785b66487cc64148cbec97208c7726b8264b881ca368a78dc556d5207e6c07e4ff0454d0f6bdda5e39a93f9c49bdc78753d1d851f116e6838c49e43a8ab77472fa04327010d8fcdb4462e4d5c1c8117f5aff6700183cf2371d62573c9312c55803eb8dca5d900f5c969a2541871e8aec9624a29b9b43411523409ccb2a067100971ad5343f8ba83e8acf8f840c39aa7baff21988ecb259aa2865235ab1fb1e094e22874239145e1dab7371f1b391d68902e84a5caf02a2628730895fbd6902de73834278dcd2775663167b3f2fcfb5b13967938b34dcc1dada434d6ebee8e5fcc1cd654c8d4eaa956c3919b0d33bbe60ae00b39930792e7f9c1dedfc38f33de083618e31dcd15e47114bcbfb407e6733fb33f90b04905ecd4710c98cbe00612662d01bcd4e0318d7ecdf0072fa0036978b81f255339ab94065cc8e94a0a8f64adaa99c83537c50e4695355bc5259a307e97b2e0c3ff0f48562b19ba8a34563aa454e9ed87f759ce911594a3c0be343019f700aa4ac4b66e8e8608f3d187e4fd15d4f814144b763526f414c7669558d0108012692eb02a7074149b7c682bc016c6d1cf262259a3abcfdbbeaf00cf8e7b2ddbef07b8eaf2b4d17edc3d974772eb7ff47409fa49689852729844d5975e9636b09f6a309b96a46c6bd31fa50483e60ae5f1a7e4444d647860ad6c2f13518af4a62b7cdeea9ea60f848708dc897a6e2e4b4ee62772db77094e0210546beebf2f669a2309009324807100e182ffdfeab2ce91b00dfa993acde3a1198dc8bd9daf98f449fb04fd8588d94693e08d3bc45f17c4ecdc040f138cc8916d2252478d3be342d5fa1f6231ef6562053e5c1463fdceee82ddbac66b0da4daf65b3013f59def8baf4f794c907dbc5b1ee493f52f549b1859584245ab1920859a808baa3e9b65d7bf4239420afa8639c8195b63902b24495b95c4143978e49843d88a92d1feed2eed1a88cd072d6d04ea26dce8ee4b14896fdb69bc7ff2971ed8ac5655148d2e9921218d74efdf17c56b533d0bb17d11e07d7458c4e34ee11c4144167a7112d11f439d71bf2ad82c8435e8a7554187c3576ea6bab4cf566c9c66e8f38a4f537dc93bd75b3620e055472f2d414c0731d4f528bab715aad0dda52fe0150c161adb9ef117746239bf3a18416a347a6945e9c394f8766edc85df408473a3882d2d93a64da5e3cade3c82fe53e6a767d089adc79aa72047cd3d18744debc587fe544ce938c8d1f67521d5024deac399a5c7c50b2310dc28e5c03049728ea590f059ae7098c9666f6834dd2a17beaf9a4ec5dc97157cd39a8cd5d0c7dba5682b6b03634257f0c9bc1d3e3f809aaa94f2354c98715a312d242a46a0f7707739e0d71910675b852365fe06a60cbcf69a27c023a1a3d878114f27d947e01a4e3e389d6460e88ed09bf37156b8d566e9e8c35914a0357998a7a2eb576e8abf709fba23acf8ccd6195aede0f41de381cca74e67e53d2d23db18a5de87bcfe482685efd2b8831b1da788dbb2a97e3ef3e7fe4e525f1f95c0878ce06833da439eb8185d1252a7dd4ac34c454f3d83efa682164d814aef7437e52adcf2216f61a76e7f8e4c400c1b45b5ceb41f78d3fd80e517d25e6e54d3703d1b20e21a24614d90e30ae64b5bddf6c537b08a2217706b5828665092f7b953d78734a2e6a14a77656b574a3b3c29453bafbff802f6504e227190bf807f2ec8fa95a1984d8d240d3640ffded856091a5e5d6bd1e119a6108c1bd813fe953bb7ef6dee2e1790f8f64b898a0cea52845d776a3b7d8727799bde4ec6b5d5e1e608ff38a3cb0b53cd1cec6f7e3b38d7a2f6cefdb764bcc9d2d66031e30bcd0a39a36f1e49d6f37eab66611a65d28b8e6ccdab3f68ee48a7b8a959edb67eadb93c708a4667b995b99abcf1b1c63bab1fe9ca5658d584f26833fc13a9c7773f95f65897d985dbb9aaa306e65c2add603122d6166f878c83b54bb7d48e9f5c49476f41ddfe2ba429fccd2c86451820726c1dd735ac0470c43509c3e5c4c5969476af15a5dee27cac5521171a91186ca87ae4b7f938d6967a9174068e72c18ee8cbbfba37a031cb095ea5ade96bb229cb007f5cab3b84687070956916c11cab0ceea61adb6ea1f909be63d73df96fbfa3a9f4b092dc974c6d7b72d4c7d85d54ca866c1bd96db96e741d637e5c63d697f81a4d99f84496ac385a1530e7e00cf3e83b1aa778c701931225ac888fd2701792fe9201239b09ef9ab48663bf00b2ef2fb7b6a502a401ceaa7c45df1e6ec3a839fbc9cf5c08797d5b31cb579761d6b0679f4bfcbd2b428806ca3969515e59b3b4b9fcebebb36dbe437aeef2b72a009e589ede96f2854b2aecb88d1070cbba9ecce1323c18c56d1a1937f71e6684b821c95a795ae8d9a41a25ed4bbac2dc6cd2491b74ac2b6601f9a70fecc2ed9787a1847b2330e950d6c279127b5190baf9b8f30ec9226bbdb2c3b3abd7c6948af4864faae5003b126889afcf23bc228ce9b79163398722f307e006b3bf11a3858838f38fc6b22746e2d691cb4de3c07bc236edc2ccc1962f89b868cead8d62b2c91f38d1ce2ff515cd13e5af00aeb2af0e9fcdd18bb90f9abeb3a1a4a821193741a3e518055deda6afa7742245053f4f5459fa3b7d57d75c303a78deb8b50f3c782dc40e7425572213fa06cd23d0b1831dcc3ca6aa84359c67b3b624e5328deaf5239b59226f7ab07e746358a2f74e75f0605abb1b267082ea88231d387edb6840ef33a117249f797a7d526aca625f4a557d1e21d726d138411f8772b88241dfe1f7548f5c2a0ea48e7d9caba4fa2b2dd48b4e80e66da0e3f4e2aacb6e26077760a5c5caf86b0f5a43dc09c537a5fc44f6f2b38251e225ae8b3754ce60537457466050fbf3ceeac31f02615d8b4c18b7421a15cd1f6ca7bf8f884c2698efd1a81b8fbbca563ae606ac576c1ea9d8c8af416c3c0958f5703e883c5b791ee36691659ccfde28994c4c7244f2ad982f5454794eefdf0564c654fcbb4970f8187b3baeee54e071d264bcf82fbab5603b04cd7429f8f62da1f229756ddeb2307558ce7ded127739cd767fc6818ddc0ae22043ba661df8d8933be47abae1e8cee145715b01d14c8972cabc64a333ca9d0eefddd16b278a0e24ebad940a1cb9d846894ccf92580768a9a89c5bfb742821a6bac443a2dd56d83b49ae49c555ce588b6d886108704fdf5a574731f3189e9f92c91f987109043dc09c0c245355ce5598394d99cbe1ccf56d20e471f2e6d31dba64175642713c469c2df2aa1ce462d85535c200437327b2ca4b9ba05fa770a606d3d4077cdea5fab544866589c932e8aaa8101dd9ed081e59209648a4231c3f5e5d7d328719e761f428f0dc00cee58d7fdc5e78f319164203e6faf0282280f2aa4c3a60cbe7ab8341235997eab923cfbc17d59afbbdfa25aee7f221536c44c6d2e63518b0139969857be91fb05396b749a29d0a57a25ccf4369a3628dc80fc4be7493e29e63581aa679c7fbb864e44c0ec5dd507190e249abb5383b3e0089f2563d7f46fda1919e8e651cb36cb4b597f3c7bef5af4f379acc13d734ceda5b5a838b1fcd3593ebfe23870fd0330ab29ee1f267807ba601ca90caa9d6a61f2d042ba49bfeae020f414f26c9d97430826bbe8c00793c5ee9e2de24d5a82c97a6f637d11c62d0b5a46ff98c715699ecce0674deb369593f96e99d678333c9096f3a905aca7f0476539109ff30cf09073e75e930a6d73c11b1e7b7dcddfde53e30d81c87cce0b00bc4ad66c82ecd2c4979c207ca014b4c9ce1e513cb0890e9ff90d6c5a04b0a3e3d9ecefa2f92d76a7928f5b4f3ed4df1a8cfe9997c2f743b12373e72ec6e8714d489f9ac7b85762b61f214daf4926693fc22fe3136782f453fce180bb45edd9c982f3864f62e31d7c780296015171d9a618329c3430b4b6e50fd6a774042973c5135920ae6b690d674793b2e9ea4fb6f9f9a7437e911501d0b6b3ea0d8433a5ec646108794441b903086532cd76387787e0ee67571b2c4bc3ac19b6dc4895069c008b8c148015b6ec24f7842087a491ec6888766231531b2a3a68ac64b3b61c5072394a14a14d7d6f47bb2587811c9c93eaf60f046631e670fc31193b781f3d96340ac0fe1a617318cb30956705190e2af2c78fc24c3144345c03bbc4e84900f9c0706f456dfa4e8539e8624386125cfe1a6d873035e9aae0f440d2a596cbfce791fac36f1e6056111e530aa186a10fa9cc6863b2c5c381033f791c31f61097fc331a6bffae4c2068e2f10d15894dac9a8348c3ee7e476d17a82ce70ea8af48842e4fa75b900643e91252c7f3f060aa6cc97f2627b1edd59ac8dcc1a000f0a52bee1b24276637270e46f8e9d16e928f8d197be913233f41091bf94a7aa19d345ffcfd60d783474064db43e142564bc2780ddfab2524b435ff0c12d0130d0d6c9cc576cbe089cf367959c42cab4a04f9b9f11adad248d53ac933a9f0eda5b9b47ef217e3c6ec376fb84d1a4a90bc568bbf6dbe06af022ab6040d3f3b8f0e2aa252ed41371f2d0852ae1f86c9872fa90f14fe19ad0fe32d4e4c03430e5b98f8ccd52183444dceca85c76bca07e30674ea570cee3c995e4549fdb045e7f7e88c8a52397e89d733e68f909c24a458e352a3d2248c33dfe60b5f858ec866d87f5e61768f6376400ef4c6963b571d4d48cac222df7431282cf7e590193ae971cff6e8aebe02981cb26dd144c3b1e134a935dbc59856a31675938299ca2e1e585cee96672fbc7dd1c0ca1638bfc58ea3773c4736e974182f5256acff2c0243f0989df12c6ef185e3bc922bceaa22741e5536ab033d8ceed765c9cb5cb96818df258d6f8af6524ed6f84e8882fd293009a5cd5d971ed1b5b30255742efcbffb78664587ff405f473026579302336a50f9fb68f58f08130b26ca921de2508a6a50ed5ec0f5f768fd63a955f1a8e7664563c882093783a13dc720f85f136f57f40d1d31b10b661fd00603c22b0383ad9beb8fa0ef4d1c0cebf8a8008e3eb39916e19856beac26d47d7bb814859e8290a2d5d36e3e1c2bc6945fc24341d0a7de5182c1366064b437445958d5b7c68eb018c716126c415d6ea550f2290055b68812753a694ca198a8c313488e3837e29c6c43da6600490b55bd60da3a404a8a36f81d6667c9ff3eb9882e19966d5f38b5fbb092b1809fc02c3b23ccef983b7d5b710fd7aa6eea20e9f22e4e86eda8eb8d65b1d18d63b20642bd0e5cc16e851a75fba100a9a1def9aa9f8859e82fa1959338bc0962302c6849a184fc4839c3ec171695640e1969f38bfec0ce32b9d5a157c323bcd85c6b4091872c4dfc90846caf404184202bf7d8fe7e6c0deef2b1b95bb3ad6e486efb39caec68a456f93316bf1739e38850250482bceebb8590c2280f78ad903aee58be562fcea1dfda4c64b6f9e304bf3c6df0a938cd398eea8377f390a8c548410048b3efc2c8ffca5ce13766d16a2d272f37e2609c0a73868243a88a237fc90d9e6374aae98c5f3fd126a0fc89767ad70544bec2bfc0dbeb2b058ec3a21265aa6f8908dfb76e46a1457f94097fdbf0927ca1aeddbcef108efa2826dba93f86be0033f0fc90d17e952686713c28ed470ff1d9332027d7b9f88c35f140ad59a4af0cfebd802a684f91f0c5d903193ce6960145dc28652d50ae3db98e8132f357f3c243df18c895321e30a83becc53d57db27921a5519524d16ab2d4f1bbe9f1932ecadd6151feadea062b80a57c180f325d1286e4498e937d840fbc38eb4af50d2d887230374dbadbf037fd4d2728a713c9a835865884479598bbf7c48c9b6a75a028a46628bda17c09f6a1bfb6ccc3a55f02d59365c16ba1107f2e9e84257754f1701d0c0b978b55ba2f1502124c8c7285ea0f14578b2529532109ccbd2d45308729822ac7249fef69ac001e21f02901a4268b10182b9db6c9692f581dfefc94ca1b7ec646a906d180330b1ccd00c2da257ff08f8fe9fdcfda2149498edfc305220db7ea6f71e783658dde03fdc381866ebde799a40c6afdee0ffea8f717c20df7c8d59d2ac36b8e828220db99828c8ce9a817373fde0ec76dfdf77c3fef2233b11581e85fe6b9793dd979ac88850b74fd07297048a511b5bfb1dccd50af0bffb8ba63d1f623fbcc005c937fb41427c711a4c44da7aa9b4f4cf354a4119fa4fa757f2263d8c2561032d1135b0477070b8f4591d44535d21e7d8d07086a0616ab4e2e66a3eb0bf4cc3a01a44960f5d5cbdeb3370f088de1a9b8459e01432e889bac8dd99b1845fd8882b4ec50b0d8b68c66b65f06d9fcee7866e5c197845d2350f866215248ba99cc71b19378dc66d4d88f15b1c0a1c82214f03317d316dc0f54987fe6d061b0ee216fc242c9cde85736c19ad445463aa404bcf849bcdff3732ff6a0d11e4c70270ee4ada14c69a5672f640b719db29a9dd034fbfe5ac8e9776778938943f2426a1c383b570899e72a4ae0312fd1cb303401bf06dfb6b9084586881fb7473a6ddfd1d4340d0546f4cb0f9dd4b7e77b43921ec4df94d79b9602148d0b03330b3bb0b81e606a4c5616700604bcb0eaa81ddeafad4fc4c654dcd997ef20140e4ff202567f8717e4b39242b87bb0c3df3c04413de11e1789ce22f099152693e0eddb00356070bbd543b368ac6b7a98d01e41e34fc814372aefb06fa169e527b1cd3ecfdc27e4ff28f0c00a6a3de0d6c4361ceb6dcaf9c9b0a1cd7f385224798ad7639ad33eab8be4a000527b57ab26c46cdc811f4f947824cbc248e438ad3172f39187a30b8d06113dbc666623a32fd7a8cbcfeebfaee98d55d8f1308346f6720912bed3f85218b8ae3d6eb3078f9a05d22ffa61820fc7f32654a2a19cb87091012c68eb6bc16ae0dbc893eb6d380e56d2512d01007fb85f288185c1e9ca48d7c328ad73cea3a491aca8fc95bc6734d390798e54a2c664d742a6bf17d346264c374eb4f488c06ed30923d3395ce2b483f5ef45e4ceab75665c0a7b2bc3f2b1f946e5a6f601e06eafda833d5fb571356fe7fa7b39edf890115ff6df861f9892e5d637aaffa1cb4f2c070e64902fde5f9d4fe358d968735fe231b213af50fe7118d08ae999d048b753780d705332f0db1716f3034ea5e58ae0bb86402ebfedf49b1d278b4bf6214f2b16c78931266e51e5226fa5200e15b913e5ba8e8cd32cc675a356b79d7b1cbebcc786d5b17321680d5da265d50acd938498952450f3858dae4c5e9518c702ac0e74907f5b81d1c999aed36cf700d3c03aba602b0289bef24fff894e43429ac32a062fadb7b8451c90fc49e10e5af0e93d3464ca2bfca09c5fa41d0aa755aea81763a8884e814708fb314deda07fecb696efe62a52b4f334e62263f0ca660406dd754637a7429d35e13427b837d78fce4cd23172ff197f61ed63a32936df6683852250e24a64104c4aed1f695acaa1da67c48ccbba930bcc7a4e25dc73269ac715540db3c05068f53f447d2992c0e981f0af3e5d0c8a611c98cb303207a5687b98f2c6d0906d6dd7c621881f6521306cee7a904f7c6647fa4cc20d537cc29a4713e4c4614222e79bea6c89745d553e42690dcaca938f860ea01b05665ae7f6d290124c8f5fd99de8b00dc84f02c4dbac6a5034f5d76de6ff9bbe5e94277b46c51664a9816ef9586722ec8dd9dbd7cf52f72b15f9d2682e76459460046de650c7aec22161f7eae0c047f2203970f4e1db1b86b7fd0ce9281aa78355dfb38fdd815f14fe548213fd9a2705c8984985dbf0db49602a0c569a94c874834c82e0b49b3142868498de779dcb0ecf1eeff08338415c59a85a194d8bb150337461409fbc2c340219c0b215723af67bf2e99fa25c54a7ea9e7e9809a868fdae7ed817648c59d2b93b83f7a0c17ca3153dbff8ff031c125a34003d9593f76539936fceccb5bf05f5106816e1319affe426fa6564d6a286f394696fbbf3656e1fdbafcb9fdc66b3fcc3f7759d6b9bf132d6214c977cede9fbe341954170bb02a67d1f77a5ac57c5187ab87d9f1787604575bc17619e0525bb4c0e19f0b3000818a2483aa5ca99248e5d3496aedc6736672a532d8ae4f3207bf55a6290643c68bb71b07d69e134b6a996f2299162425add1d6ff6daf5bec48306acd8e92b780ad813e1a6b7973165b04a7a9c115220b4f27797da197a6ef71aa88de3c2aebbd6b6af631f58949718eaa45559f654092ced6054410e1a0ca3890284ebe5980db49f6ebc4e14816eb7a0c90ac6080f06aa15ff2d93827e9faf193e1958188f768cd978769db206bf291be4214d0e2c1e16b47daa383d4e2f030f81d492243bff46adf41873fcca9158a01b2355d2525a58100153990731c587b6f63e01d146afca630a2b37b876ec2b7a9697451a2ac05871b4b11ca8cf672355c2de0ee6558f0043e43653afb1d88aef7e0587af5c5bff21be4b2ae7d120bf33103c1f2d13a5d095a7c12ea9245e5d49fbf582598f30336746a92c8ddff5439906e19e6c25fb23a07e55306e77858cce34f09edf6b49dd8a74548862a0f097cfcc54f16c3699dfad8f79c1c5515600c7527d430b9aade6d371d3a82ebd18a31d8b1d82f5ec85ee0402b549775ad79f7b7c25d9a3c164348a65aef2b9dd7550cb6bc5b7cfefc936ed0091304d3b125234db6fc8708b77b1f7786ed0cba910842093d3fac1e86da1b0b196de0c9c0f023897e3793a9ded4361d09aa92bc9f028652ccfb2947f7716943c4bbc7f24d595d1d70952c9a2ced41298bae4a2e41d25e35d4246105bf17ce2c938306d7c6cf544c36abce440224b50f657ebf8a2a061df4fb320fd25e2bde382e6a39d4cdc08dc858d20551ff2906412f825f5ad80c6a429aaa7238453c0dc8ddc7ed83b2db8e042fae4e2e8458b961525fa60aac53b7914af434a214b6d1812a227e6f168eb97253a72544324242d2766d2034478a7a5384b5c39a3d2acde3ac1088f17958b4a53d43072d79643736f4415a421a0f471bc055ab9b3f065752cc0879b55ba7f42f75088064da3d0ae16462b0ce9450925c966a692f9ae802611270ed152e1afc43737e1d64c53b32743f57d03456fce0986f5a68c1c13e539117f04fab711031b3b10a2ac7dafd4261fd77151dd272b641c3ac36ec5287df6534fd1de2b53638e2c63354e88be1bf2d27670bd58740880b2bd65029bf42ea4001fdc4557aeb76432b90184148971d5835ae3105e5f4da37107f50e477fe18d3f788ff7e22ae7e674986e18c916bc155b09301299efe216819fd95b70d17ff739e051bb75cfdb5c1b8be4d0516fe6fb810dc18bae2caf21090d7bb1bff3ee2b16e18b5bb8a67c0e4e17cb76519cd5cf1deefc43481e9d0b31da42d8dcec1871fd03a39d52b6b04336c68bd074a373d959324b020dce921e238d95976ec4e31016cd024aec076044fb1f8ca75f8ea6605b63158fa54377a004aedeb71d8339528ac7102a2da2755ac4aa37c2bd6558ae4b08c1b3b98535daffc584019332017d81793504be8ed5cbb9f0f2eb342e700952aab936f19db214395bef3a75d923da226cdaa146d36adf047826e86cf3d6ba98d064e0f492d896ddf7862d6e7e86b1962765ca6e7a1ae0caca3c820fbb720944022a786b6c8ea71122b3a1242b144a05324045de8acf14366f9a81c28f2c3d7ec973c8fd34bb90fd63de5d3fe7b4ec9616d1da3d0b70c56deeaaad2f76eca070aba79653f1499acb426d2a68bb4ee1715a82533406e5399acfd3cefe789a783f322eab14ab1f0aa047c9d047adcb6fbf86ba776a8116b8e39b7cabd79d1e0e16e671cfe96a252ba7fb5a1783c811dfa823e00d8887eb8c70d90f0d60ee60aa1b4ed6c97a37434405e588c7c411097953b85ede351d4cfc6a11f3bc4472489476f2c6636e19619ce58ebca7b4929b84e9cd9bb21a4d214ff9cc90802931bf13505aaa636e19677c6d7c5c80f952b04a91eaff50de1e52ce44904e21b834ab70d10fe892213e3d2cc539d21a3b592e117498f2822a99c7c174e895669882f6f42098eab83090ccf4164d843d23b0ff22b95edc0ea6c46870b059cd18712386e4667d169d4217fa1c883edcb1585e09c589c525bdf9a91e22216d5effed20458bca47d60800dcb0eb4296 +MD = b8ee436d5ebfcc8c9f2fcf8627736382f29a3953f34da315e1eb3cfabb985d818f2080c6f7b12294fb5e518071e552e2 + +Len = 66352 +Msg = 9764ec7a907cd94f76d7e51b88886136c758874850c66768e84c2385d9e45f05fdcbf4ad1885e4c16a21936c85be34615d4e81c39e9aaf434287a18862975cd34cb2bbe3d7276316f3eefad28430942371086ea5f78cdfa544078b834189da5aafa2a9e3756a3f9738c482142de46ac22b0fb7b605a2dfd716564b3f1dc2c2e44c2226779b565e8c622e93fc27e49f87b4eac2be6de69721e1fc47849f4bfdb74bba9a65f1f4a93d98b195501b3819ba3421f985da60f0cacd7fe9196f2b721bd5f26d761e4b08f103d7f0d9b0e6c2a3d23dc3d2f217d01c016998c8346a085a12530772cb6364f2cb270c5f8ff8818ab7c5876f5d13215da641bb579611a9bb2964d0219f45a386172952aa5f753db60b41af22c45cc9d6e390bc8f3f273c8542ad314b43f8aff60f662881c966e070f53aa2b4cffbb2cfe1dd0238d4b4a80187b790b75e846e8add65f7ad75d251009d37c8ed25f7c28fc7b0f51a00c1d7771e09562e99f2ca89a6ae28f70ac178ae2cc089946f58e360be91fdfc6954b02e2f2cec789c49aa3d95ca2124313c3dc2ca5d4d735426fc88ee0982a8b7781b70e3a6b85d0e91f5eccf404cff914988839e977c507d6af4507e9fece493320083610124a597d395df7f98104fd3f3413ad1f57ef4912cb50097dca379a58c47b0d2c49717e016715ecb5bd4db9e3f502f8a00bb27397226e060470f2f948dd93f5e78797c916271b0db10026c9b379daaf23e9cb01d462f38026899cd083d9c782ca4319c52bf7d1fd83f01ca71e211f331398759e4afb84fa4c7a71daba579a365d0293fc9367df1ea7139bdc94892516e79e5e837b6a96e6feda3e522cc58073085c82da1ce596f382c120d4b72090ed2841f26bd61eadd8b61f3ee18bb22edb649762d8090f9e1ebfbf4819e675f7084e49bdb1fba64e41fab01003378bd9d1fa79b090f82468f2a6347e36b2f7ac0ac21c3cf04c9fdcb535433e31b0d135f92249f87f5ae26c01eee73f959d3444574c1fec915959ed950e3f35e79810b7b374aeb70da1c82beef23e08c115aa449024eb393fa2630573ee0a83af5dd8c3837a0e58b68d343cfc48af6633acc81127e504cf35a84998d45d3b93f362880e0baaef6a245db4f3cc5ac1e487d32c5e9114d30b2ddb8c3c38b459035e56aceb9e7fd867b193c904d1c10be0182935716e3cfc7982cc994413bbe94e4a9ac5e0ce714fee08dfeed49ee3f4057f0f71fe11b5d796cefbff64e7bc42d142bf51820e27bc497482a4d7a66bf0a1270660592e180aef8cda2d03473e1c38c134de43fffbb4268f3c89a26a91a86faa9e9f1705fbece026f7b09394d9cbe1508bcaaaf665bdf1d36debb96e2d71ad64487cbc4baa241537d518ba62e7d8777b24b52b940e3027cb8769812377f3070e8497bd61db16fb39e2d3dc3400d847aba01c4a5b5dc154f229719e1d0992f8e3e35e9eeae75c1e97a1607d7abd31ee5c8e7e8bbeccd7f5c1b4a264dd6ad7ff9ed56fe5495759dbfba14d12c9758bd828303a6430e3ea86c4c96a79c714488799eb1a04ffb396cfb062f83082b22ca17945fe78442b7f8465d838417c8e5b1d6f950b829084a9766057006b48fbbab6da20391c7b1c1d7b4f519a506041864d7a53a2f28e32f84c860de4078ecabca4c56f58e5482e3ad7cbc61f2b14c6509454b77eb95b5709de9bf821a9b6a788e7c583fc473dea6e2675c62545fc95506e89210d6b8a5964990c8627c6730ac5ec44fe91d6ced91de3d7a24b15aa36fc488230cd7d8dc28ef8726884f2267cea4ede4f98086d62c09c6c1b0f3e8013babeda573d53e81aef9947ffc79153667c7c0be79d40ac2ffccc9d60d00520b4224dec14dba33bdb0ce807cc4e488c6fe2f0286700340d8938d106443c2e0eb0b95251fa36dfdb8b7d612c4ea76c23e1b447ee3e7f470416fb561115b1fd9c61f6788667cd6e4994a79140076190dc7476dfb7ee58fe2241bad85855c0187c70403d03fe1dd3289f21f4cd76eb4af89081540fe72bcdeaa20dc44694e4f301344cfc551d96a2daf363084f2dc2ff1abe9a1160c9663abfb05a965653af11dd567352e456c651f349e1482f8c7721b566f7a45505a6c923e527eb22027ce9633f39cd4c2a2b64e3fb2330f92386475b124089571c5bfdb9c90c2f1431dd0e255726c8071844503f9fbf6f26836ef47e58fb3ce18e045ce3c46dceb7524de4b646b0cf8f919fa858900c3f521c9fad81938e4b7ecb2e4b247fc36685f45e0178867e604046abe1e184903de65f96e7176a80119964385d1e43a3730a987bf8fe8ed616e377d7714ce5f1f76decf315a246674bcbd9b11713c89470afaf361fbad85e5fd3c5c0fb0d2c97d8532522cdb4afaa3680ac36edb7670cebffa8fafa3feb7da78bb0f6c3a4d0f87d3098b473c10edf8e524c28657bb783418526591ce040ca9a85b9c78fa66baa4270c806bc49fc6d9fab5a03f2c3327e2daaa7df0c6e70bb855c50d193746513b4ae23b7ebc1f0db071626583a405083ed0a9ddb2d1ce3d7046a16a393b145cb60534c4696cb84be410d51a39055aa0b1c1f88fc138e128394596b9bf4cf9647c1eaa21151c9006dda0b6c749985979a4743f9b03434a567c184c0493b31df0f55deb5c6914d2c903e8ac729aa52b1a7db2250762392e4f9f886c529db8a788898ca07d4c9ba419beb260251674f70ba64352ddc564b8990c5d9eacc5a2c0b4a071708aa8fb2e8076c47ae7a44ce6d585ef6f25130a0dbe295f8919f3bb8ffda2d6048d647a998593e7a1c12c7720ff847e24e5367458466056d6a10f493deaf781038d68610db17de37db9973bcc1109b7182715eabfb718092c4c0195f104073a16939cf8b18a9c80b7dacbe112937e63f4f298b36a9bb8413423b1e7d4d13bcbe5a6e886ae9a5986f729b1b01b0e4a4a5f4fa7198279aac6962d07870edbf9fb17ce34552c691abce4b031f20f0ad53402442a622fda5560f972ecbcc6aaaa91551368ab527d48eb277634ed160d87e984dc09d7984521d705fb46cf24c4b756467e6cd148604cdb6883a0eb56a1c8308f1c2cc0e64276f263cfff0851b386129316280f379a8c544ee05f32fa4d00d3c80e7c654059bc7abbf6fdaf75ff818ce3e484ac47b1721e8194570a289a9798d9b9df0dcf135b38b4792a0cb72e0f8edfee69f29f2f6500aaa772bd080ef5486a253e02bbf7bbf1f75f6c6740ca97de2f3ebd27689cccc471229692c43382ab225b828a2b8e45702cb0ad07385b83457adc6a94c97e11307d0cadd08191a788aa6291ee475e5f7cfa75d435c6673a8b68ce5681eb5f9b0d776d9ec06aaecaa8a942557639f172dc09b5c93912782478a21e6b35f5c6d222064d51aaa41455d4c804b56926cfe7590278745b4515a9d4d0d48ffa103c1e39d3b5aed65a4baed2afaf9811397e24bb8dc6bde387c731669af6ac166448e71885ac9d8bb2d93f6a054be8b4978893ca51a88c18ff1424f7a68ea9d218729588c53b0612d4486e6673e18c9b6b759b4df725c943d687ea4f9fa36e76554290513b69d1b3e920a58da0776c0edbcba30e26465cac33a5eb362b3ee34a4241413b8e3ee6b619e74ba6351870540f1415d387122d9b3ff89074f266f09608f60e0e67c22d638b27c77ad9c980b730d75865c291245822073fd09d237da1cee960916dfe8f02686783d13594847d669dd48c7ecb2a2a035a6114d47d72b4bda3a08d49f9f2dad730e672f08064efd8edf10f63c9255b0a7a5f063e7db717fdab34cba2bb403401095827b3950855af4f17b81a92ff3161ee9f6f842a3412b5898610214d5f580e7a41b626dc58f7124bae4d4b2e9ef52d3e8b164e8dd2ed0dc6fc276eb6398e250b0ae8f05c3d1c2a6a1e979ea6ecee99f38ac543ac77ef2ee900d730feb41e6e451985ba1e9d0e1f33cf5eb901cf66ca9403420b910c61407af9e70f2eba4f12afd7552b286213182f2a6a474731a3eba960564f447a8b6a024f20b54d326b39d2ac1fec8472743de49582ee80f9ee22ba08c9b7cba7b5d508694ac76303b80a3401ada43ab779b7dc797056b50f8f97506363ea307d27a914b12df079177fae5f3cc5fc501769ae9f3ffa28ee5bce74f2d9ec917be3280dae8e90d69555074ddbc7309cd07c8e49b34de90c31c4f3de29d22b53b2c002295f683c21c2a59a0d2e08b62bc1cd2eb1a20d04a9883545ff7cb6e9d9dffefb26aea8fa7a05ef7e19e2691e522cf2920ef4e515a8fa930dff73edeeca09845c2c24b49089681bfc977f5032b818d202872f3fe2b08fc7940696df02cf393a6d6247f5c6f5f2125cb08b27b8068d57c544dd82356a50b91f3b6ef5ed90760875f1a2d36666abbae68b905579e39468256e8516d47e4451f9c6829576b4c8d6be01bab736869cfce25115423df833ed682db0638793747869d05a2867e4378c8eb9190700faccc19729a356ccec74cfd7a8e5d11851e614b6817f1786c7cc122e41462d8a6d43ef4e3cc1f9ed685ff4ba08acc84d62a40e290078c99c068e50e6c2c98f9d850a6f4fb1f7936a14fb4559748db0f06bb64f0a76cda57048862ffd642b9700ea282ae2b1cd8c099750aafb1511f1c71722bea10a0715cc36ba95bd4ef3ab7d45a5074f64cc4c939a660cea13bff39b0bf24235e5ad7f7677346b6ca9a935da3e8aedddf17b3bcfc446516c95201e33f22ec50f2e474d37b4fc9a539cd59ce07cdec6d58162c287bef763cac3badb5972dc2e780e5ee6d7951809ba50004857a8a9797f3b0a47812f81284cc61890d3330665b6ad79b21ec1929fe8ecb1a10769f4ee2348fa3486c0ed8a39c6bfa76adeb35111322019d4e172462799710fb768c60d09cfbaef5e194270dbea3986e61becdcd3c5db83c09cbee5bd7fc7fa314d27be79f9d3e2d1e188c1785b0c970f91b8ed42903358ab9b8063f3c53bca3bbf1fe9baeecc73a7c0c7675941c340ade91f6da8b8af005d86bfaa119455e79e66b77615d52d0ca7600849c6c3e3eb87cb29424b68d8e49e0484a15f139eb922ebf64dd2d67f149b66524f0609f6ff66dddf5574c6346a36bdd630256b9da98ef6e556391b49f3497dae61633c84e412ca488e6afa4dfbec5abd3faac3da1dac2e8a7a91c91310794b23672384130153386cd5772dab00898341b63744de7e423cef9f240b66d5f578b9498f082dc0f1d05413e187d4dfd6df6b7d1415303519c71cae3807c8a984ad78efeff15988b339072ef12f52029817427d896059a8f978179016e5c4f4ed9269428b6620c2621b8d10ef4eadcf9ad2ce9cde4adf41a9f7ea2b06cedf1ff9ce9328aa9008d4c620ef9f230b6bb0a3b918c35afd4c67f3eb9d694feaa390700aff8a96979b27a7ee34c5d48f160c7a7427db46a127819dfd36313b6097b01aedb35195a26123cd2d64694c01354ae8aa04caea5df9f970d4bf6a105943e7be20b963f0d9e13000868873d18a51d4b503b57a8e5a493634193ffe17fc309e264a19aaef65a3b707a0a7caac52f111a92944d17ac09fa0b173bfd49872e53b1814d90dd96e2f1eab25c95825809d698bc1b8b9f5b6839fae8b46d4dbe2ea285d250373f81b0ecfb4baf604833dde4425761a1949647e9bf508dce62775c8cbbd279ec69295c730ea0937b610b03a0a3ded71d8bcf317fc4c9389f2c652068effbfb3edf004e2ab14ba935612023b239cd1c5e0978bd72a7cd456e0fea32cd8ed9749d05a8fe7a7fc7513cdd25a69f80ac81f182253458e4d724a98188dc3104d576857175e5f8c68e1be0198e14bef4f7a8668a474e98e86166e035b3a52a0e8a7186a719ad2c121a69cdbacbe6971329102b867164b93f167c80711d261ef862d62f1ae6bc6b0ef6db543551a4be77cb29bf0b15ff406540e638d807c7865ef944dd417f8c5c099de1222dc1d7ab7f5875af9cb7a6b4d78b2447ef261206aea82e2fbf46a5659e9a0ba5e89ee7d4b65b846b9fd8d38d225fc75c0ada9e06640a0284e8de802e3a55cb5e1a4b6dc0994ed67198ec1e4fb2293fd3dfa7b41c1b99527b6299b4fc696b90c91759c205b4acdc601c83df6323921e4db20ffcae31d09e71912abc76b8460c65844c9d0a84e006a5af12af6de304b3284695f033534a671618e3ff23837f8eb1d58657457692f5c0a52af6c66d0bbf01f1bc0741dc611cc74e67f5796762a84c8fa9794d26302a2fb33f5e134e11926947f4da6049af5003c62947eee0a9e97407287b98004204613dc23ddaf2b0cdacbdd2b205379f8169f49a6efa6bcfb2f6f085e6ac913324f3c9462e63f753d16ab7d856a702bc21587e5dc332852e9513c044430155adfc65da4da864c8954e11ea6810dc578fc05db7c5fd1da9412078fad6092cc9fd0b25e54b2443e2df8440ca14790b8284eee83575751264c1b58504cdb1856abac1b26ec13a87e2ad1455bb7007bb3025fd966beeb3c7340af4d6729dc4a1c461c0a9fb4243b724888eff42dd4571dcfd8cd6ef84318283974ecbd8c8cb18437c885b0f40e84834ec547bf4eeaaa5e5760d3824f8870afff123f38bd13d4f748579741f3f80c19062f57a4616bffde62a0f28a09e2c96f5a324ec103983bde3f72453bfa0b599d366f268cad7edb04b840326f6f78add0127c1f41a8436f9fe5c09984516ef575a72dbc5d7b4cc83a20e79b17c973a33aee97bd9ef23df7a402ea9a05404a680b2110220113fd4de8643d366b5ffa3415b82c2dc22aae5b535e9750a60fc738c66cc05f5ebdb8f3744aec0a537836e6c936e2789397be2416c070c450050cef0d4fe67b5ec1a540479b991fb85e4f44be3162a7fb8393d954f21cfde96b42144a932a7fe866edbec91eee7e80576cd35d7053c2e134580274ba44035a899030e4003372e3f6b8f5629d932e95acb51d0cbd5ecf2cf33328e0e190df8ca71fca435eaa5c39b72d6c7bde3037dda553a934de2bd8c6084cd2ff2fa798660d176acf753645d1f275ab7aab6ca242896eff3e9c61e496bbcc88396b3236cf039f99f00d803693eeb73ac9caef76aba22da890bfa8fc8454dbd2f65fd8c2b1d0dfdd0eed2f3667f51ca2ce0362bbff36b92b940faa27781aa0399ed14243f3bd00c191deec4e354dcc6af3206d7a288e3a10b1540c6d5a564444998a18c17d122acae1a85f85e53fee1a9fe7b7ba0df2d7e04e5579d61251ee7c505201453717848266132fe35f13ab3a3922e98396a9b822d5db976b8950c76729f0a5d50913377088e705708b112a532b97aaddabfd065eadae0e33a59ef78f8d2ead7cdb506a1cb0eb8835528194ecdc0fa3d13434e91c3e9687364f82a57ce5d2c13f9514460f44e861399aaa108eb4517c66199788e5f05baa7d7043fab497a588281fa8f3d0aea637844dd5c7c01b27dca5426e0c402bc41e0fee2a1dc10d6fab3e615498e754edb31f514ae00a79576b9498019cb6579a8cf5b37f362badf8d189435f5edda0857d11905184f436aad23e019761cedca59b35a58a6f78e107a312ae136c39f8353c62f032db07bae8b9a8667a831022adf4d9ae92ee321066c9e088b6eb83c6c6981b5b340cca6ed9c7dcb0f02904927a3ee8b5e1dbe0a1dbeafbbb91024471013b43b8a040c6b844a5e1c5427b3392d3226ba1bd5f0bfe2fae6c2decda0261abcae2efbe9e8101f3fbbf8fb8a2248b8248695c6fa23a8e2abf3ac80f9a48fe8ff001e7d64f85b2ac707ef599c65fe64d57eacd3ecbf5b993c26d72416b9bb07453a68a307a5a3138ac27de2f0e6d09fdf8f7dc7402c5e734620e15cb7585df219bdcbf144886e85f58c234c0a3d55e5ad2967158713080d3452498f5df8df35f71a86ec9e1933de81c55de95ad1f4b2b8ed274313dc0ec3913b7e307d23c54f67d147f986c099a9d9feac4f653d43a3ad3b0cd4891fd942e75d0de4975186aae6627dbc9116e66448a88ce2abd7b924d4a3a65e5936ede7912757103f1ab9e4fd4e968a4fa4c09a68438e47b149cbb2d9a77224f6b9b33e494b1847c6d7d56a071630f704c2aeb8b3601ee2f80bf1da26c6fedd0420cfc35a089fffd1214fb6ae29cb977329174bb47ebd48f286d2073682bafae404a9f35e107cace07faf675d29c4cffd2080cfd60fe7ee3352d2c6a35b24e328cdc86acfc32cd3775b7ad89e76cb25154171b1a2943d473ce88a94d7c0cb4a44f4a17629c12f18084d18a6ec913d1b5e14609db49c1bf861c05ffe5e442c74cb01dbc1e67b01cf05bd2f4eb21999372a11e3e0569802566472c96fa165b7171d8dcdcaa051337d0234253ca9707ded2bb2622633089f0597685d654b95f985dee0fdecc1f432b6803a70ed1d2649c1b57e61dbc47e306a8d19928ba765726561b3e2c4d5d49de00248b8fc97bb8b4969fe798d75596519b81eff2f5f54a02a587f22df4662c3ae0ae753d79390c0e8bb9b0f97d03abb779ae0f9dcedd40149259b2498be3f42650c8ee80abb5679242cdcaaa76f929228c7f82920ad7414464ba07e8d87baa89979a7dc02597d1280204bb118ade18791a1dcf38748a567a65d17872a5d7554dfe4daa65b08652b815850d98815b81a46cb07ef6d39f869edbc78d4fb89efd59cd09fdd7142af32ac17947a622176b8aca5f1836eebdda980fc3cee8d979aa954cf5ff7f192cbb664f08f2a236bbde157b52245f8e8d585049eec4a3d21065e9c23a37c38734b354075995f685eee22cc9b22ad97bb60aafd16ff6e96a0a353d79ff2d0c25e9e1dd3095b809d75980b7faa7b20b7de1f89bee6fec2368102379b76d6ac3bcf44fe713e3e443f4a3bf9f5758455f5cb629fde9162fb795c93685c5ac754e14fc055bf96c9f0ca475a8ca28ee6a3cdfdca5be0a8b460fb9de7649ebe3d617f5aa0922285874ccae774121b590aa0ad0fc74c499f7b9919cf6ebae703b168427a66522e9cee8ebdb50948c45678c32f5bd9ff9de8111a705ba9e9a9edbbcff7197214583f685d1f3a9a9f4229b981a16c82c442152d5b8bdd196f6bbeb50ef9d26437240f9d2e7be29863f9253562bfdc4268ca9918d2b8de5dbab10955bbc71fad59166ff579303793557deb74fcd715a92bbbf67c26a3b9b76a0e5ff64cdb6bcde893e2f9d3e8c40be224ef00a6939327ab8abfcfadc8f9d6ebc8251f38c3313674410b22b511f27278a29260f651ef3e56bb577c0e95393cbe92eb49060b2a877a924b0893285d67a76b980e72be846dcbc250199f94d24960e3250c4b1f92216a0c150404b86f4bfcd442719215fd2669342c10f7446f9d612d64c16e8d22a4c1130bad703e929fc7913432db14a408bd855e0a9c307ba93df62d00f6b036822e4ba17d6c1781f3b616efbac4273375373a685f04c550ed55c1e0635a354839f01a58fc6eff97b836d9c771d3ba060c74c7dd96a78fb9da571521413f88f24cc5139492ef435e8dd85e7e008069a63ee4c2204a1afbf100a0645222ed37af2afbac06e9638f40c4f91955ef50a29e7d159dc2d1d5a6b0f0d034059109adf96532580258623fd8fe479ef186daf1494765cf57c64dfc541b5508be040b784b7bd7bc297871d1a1aa1253d37f75d2513e73eb31a00a8964f0ad66ee0469031fef7a2ceeb208e1155907ec7e21c7c220c2ce55f2f791ba5e0147b3181ab8fb0120884ec4adadeabe7b86ad4426374d4264b3b40e255a2bc9ddc281beaf61ac89df80864dc3c75b07921d2ae7f54ae030a4e27a05c1ea4a12e69c67544af9b4044cf157dc8cebbe8b2d49f9bc0779077603c90c5c55b891d3ac33b87b65e79e1b19695813718191b3bd8b7e42d5583f7cf1e60f84495b8f869f37199698c1c738c556fb650a3f510bb3504d1ef75f04dfffb7e8101539bfa65004ef385c0ecbe7c128b653cf6b890dbf46da92e5f3d3f99dbd2a8251d99ebd3f2bcdd318351892ad7d1d52299cb63431cd9b6119cd49645c744b5d87b1a925ed2a29e955cb39e3eab29502b1594519ab5323ec1b31b19aac5bcef41f686b8aca7e77fdad37ac35f977b1c7ff17d2288c85f8a662c7c9271e022a089154625657975c828700ec135a1af8245b5ed9db75b48e227905dc7411d5e0ed761c0a1325033c1a6bcd75f69d4adcaa6ea4c8bcc79d58d2c662882c386588154615df4bb3509b17d3e3e67a3355d3cc91701b47227eed59e3644899f22f943289d85e5a72fdfe2d47ea99f8acea720d7c476e04f6f7b00a58919a47cf9279b7a9da13e9e479d9ad40581d1c7a674bdf77912d70b58645768e50f9d0214cbd072ea17c54a842c22a55a2fc302c5aa5c52bf3d604fea912210d58e3bda7ace2b3a0b514350ee72c26e06193ee23433450f1d5f45c32eeaa9c4defe45ac3316f4f788b57f5b8d58c1588fa9090ffaf5c0571ce04c0e2b5833ad8ac7841f488d73d4eaad43116ac6698a7f46ee321fda155242293ed8eac10af26051c0dcc01aeff7b7a0551a8ca5002c5d57b3f3acc98b271aa0e2cb710f74bde805c08ba3a4b2887af67e1ffbdbcf68b24621f9a8a96bff29ae028dca28ba33ab494ed3fa1502b0b81686c8c0521e64057a00ed1b64fd01f9bb64c6fdf6247e3086305ccc542896fb6a35bce2f03548de5b18760de189561130d11f105ff9c6ff252fcf21496c64ca5953a4699f5b3dc551303d87085725f973113f0d4d8332a18c13d401dc153fae4ba7275e46d96b43c412e990c1af973aeeecd0fba708eb9d25a41275f56d512ea8faeec8cdf7f9df1c842331f4d8d45b082a77e355d1197b57aa32847cbac2d2d914a0af1bfd0f22c14f9371891b03e42892decc3e26e2c489ecdb375945ba2244bde61b1a33d7931c3be05868c04c5db8eeadbe4c4e71ff2533b695745660a752bd6815b1e176ba930fb3ee7a0fd84f1f048cc26693ecb492476ba6b534dce86bdbcda4c84e171f8f95b33ca54fcf42c59c21de743b7c6c38f0a1720529576df8e0bed148c3e04b79938949d2ca59bc1280171c5f8f48ad7ff600024a7bf9bf5f95e2a31788f9c5b7d2dc1deac69c476e7714840dd77902cf20325d6e73e9650abfe2221ee58b15b31a55c1d38cc36a4148c01d675b36f09037dc8b575950e75f2965564522bec4d3329c3c7764f4aef3bcc5ef5562a8012a04a995ef7555cec89a14487586b95981e45896bc955799ec9bc802c036f6bc054c3e821c0e21a1acd997ff945aa55c24f631d88c6916b594ad745f8e1d49a989da465ac86edbe873af95838be6a9552331d109ce26568a54b96e0da960c9511f756725dadbac2c84e4b6dd4372eecde85ddd316a15429e92896114f7479d3b2de449ec3a9ebcf34940a314a3469c4cda420058477eff7cb7e3f37d6219eeef1df095b7d0ff32c8298b043092aada5861a7e0874fa9b8a92c90cc4fd120e3f65561f38c844536308c8c803afae5d07be55625c669dd93ae585895922ba2a5d73fff0a753ebaf2b5da0cc039c240a73cce15781b7d64b814a202f64e5ae85b1a41918379e6a48bde7cd36c35d203872385ad8190748450637458968c453a2e48c5e105a0644c2c33d8a92b36127697b970e6e72c3486832135201e54d4df46e832b539f3a0fafb3d5756a5456ae00085f88752f7a6b278d84c2335acef21ca82f0d6c77982f6208361a18369c28be910855a6cfab24f580f2329849e7e46e39f670c563bf387c48e5f536dab02bd7be08025da3c41a74a4f21fab331 +MD = 8da67f49dbbc4b1581c1fb9058f4fd6515d46d991e58e58f0b701445ef0f4aa22e02424be8afe809db77f8873d81b962 + +Len = 67192 +Msg = 8d31c82c727e362ae715cb9661ab40d7fef5417969027123fecdafc92e13982225624c5dab73751048b98671ac3a41c84d9e7c245285244db01e82fb93f6bd45ff0da15cb72f9e795e811414dc5bce570355ccd273a54570baa8ecaac0be73fa635b4d935e5bb94f6f96fce9b9b5ed6c6744b7eb9208db736492743e7e14bf299874da68679fcc79c420c6560af1a9efc090c7d77856ee3ef605a31f95a0abbae77fd0459ca2e1dfa546fbc599b607c8576484ffed3887b9b828ffb5cd093e9698a4b591c30dff695930229d2cad11e074e675c9b855acccf2241269eef780a3f30d13b4a5872fff2a07c3468c7dce1d5e3e229ea357685feb2064a1bf147aca3fdf71160ab978895ef3662881cf46685f9513e774e3c05aec457bc6090533f4c645581fba4ae2ef3e1b94abd24b82aabd13d10af4a4bea53dbae1419475b307ce654f377ce3751912a8d437499889c9c1dfe371eb3f692826a81e78280a03eda067dec6192c3aef22c1af34ac5f63afb322d182215fc9ccef37b8d58d6c2a8c84748d345acc385ab58fac0ac4471942db0324a75daae777df8e39bf8a4430cec1b4e5e9046c7740153a532159f9b26c80ab634769c8ca123fd6299ee93a1e99a14e6d4de2b3008b88e92ce1331c3613ec4116c90b627a8657360ed970f5fbd76a6aadc8bb4ada2157c4c0b31959ae2165eec5970c2000b96fd772dae81ecf6f65322ec356d80deccaf496fdd458217d34daf91833a96395cfe1dc08185ca349dacc77a47c06a2d228a136282dc0970fa12c39b44aa6ab01bf7bd5cbca587e4d116011d5f57ca0bdbbf2299de93a18bff30d0ed317bee1e486cde48bc4ba6863511782bc89e10f94c910f6c3d36dad7574a4ffdd649a0c286d0091b0cf296973e41854c300def83f9b232501b2025d196a1a943af7e134b4bc3c64a2b34d8a65108c0e51211a62a579523fc14da031931e965553983c6170bba8e6ca38cfd2211e9b39cdb53e55b0aac5cb6a6df02fcbd841cb8e11539c44b16d9e8e26574a8f566c5ca184f1d94778a55164da9961aae0427d5429cdec18e8b21457448cf898ff28ff3456dcf752291a59165c44cf167dc2f30ea7535ad4a6a0d18e5b17e62262f6abeef3a6b6ba064b6ceabb9980f8f8e9b622548ced60345f5c99339f1c16c8ffe63723f81f6557611147be3f7c3999de4dfaf821ada4da163de294cda05d776b3b77ad7a383c6483d1952fdfcbbfa8ca40fc5bb9a289dfeefdcf46497cddb8612f165ad30b2774da333dd42076746dd4189244fdd5f58d0e23ca10bab880d2094c7cf2aca00fd18ebfa575ab833f30255c237c944dd12a9e373abcc95a2d0f8c19123dacfddac1c6fd36dc27fd0738e49416cc281206ffc8c287101d6cccb5121e3e027c2c728daa7658d03de9b6ce3a49d5fa5e2d7b54b24b18d55ff5440dc2e4690bc335bd7d63b174189551333a4f01c7cee0a51771845a57d236fe7f5fc5f2fc1e2a1ea5d81936f07dd63c66c44a4754125682c49d6777abd14b8e64f343d05d0459f111e8f38e36c7a9b337b454a0e48c67cd6921832b7c9845addb106307f685f7b6e8f31a40acbeb5bd8e519496df05bc8ded45fffd33f1cd63ccff4d1e2e68ac731442b6d4bc29a36253e433b0ae46fdca3a51037636a28bb91f092a9d6c7722327c1deed3cdd21aaa6eb55877b714d18c378db91cee7326b6bc74220d1a78fefa08cbeac4467fc39ec70c2c71633ae0dccc41477ac32e47638c885cf59f34ebd4a096d32f91f946454731d7281a7ed3c1e1b4d5151e9995c6758f01dd63738fc62cc4d19c15084aa8d46b802445aa52445e2f8c77657eb9ea60cf384dcefc92db949e0b943a7377cd57044feb4a84046c2bfa932702a35ad436912ace48999d18c06caa9e680476beb9426d0793d59241315d13ad5bd0218edd1dfee7391058879976d5430781ef83e06e02008664a3cb56a03492dacfb51f3fbbdd21092a6a2f0503b50a7fb38922b6cf355c8dfbe013830a1d5de567c08f43b3ef0320af7c18ed5d727b3962eda522af2fa50f60f120a1e4f796e65fe7e6d04c5b15e667354b3aca331e9b56c3130b541862745c7dfa9676e9c54480d42dd0d04adfc41a3ecfd293207c0e56b2755b07171c23b72caa4c081c7367922f6c2a85e3ea208f3eac9f00621cfb2c62d2f910545a8639a837a9e2b827b75d9fa9c6b44fbd638fdeeb88582186c89e7c32cdb7f8a404aa96a9974ce46a9ca8cdee8ca4b5e0f6e2c69374e58443df75a89ebf442b8205d1a109fd8dc8c37e3d6142649f3edc3f509dac4dedb4daa6788d1cb7fe147df1776f5ec2ee8dbac5e202ae36eb1238a8a10b3ffab9d9d38771d4b79d2fdc1c3164a8b0d0b75bd7d9605838ead1587c989cba5263911ab7e8262474591daae82b60f5070e3059a3227e0ceb68993931770a4ff070bc9f0d3361265dd310a7684833fe6c64a0b0a50906c6cc988bdcdeacb3751e0984915dcfe88279f452fb24f0a46ae6ba518765f4be2de562ef6a0ba15fd2e6162f18302483dfd0a22acda48c7de17ef889076c4c70ea3daf0c0a40bdd60e4f7f065b0c9afce56bc6df457182840d3b079158417ae2a5dc652be50668dfd2612c51837c991a3d5149ba8d123c829325cdb1a16de4dd05cb6e9422e40a44c6250558b70589a48f8a1103ca0f203e1e4433300b76f428b211b08fea630bcb91a2f3622031d263821f080227f1988254a12158bde6118d55b615646509d43ddbe1dcb9e587dc1fbf1715feca3e0b14dd43806fdf44a2d296c3845aba61cb614ee8aaa3308f109fee7a1f41db81e1bd623236be9b1911c01c3fe4ba12f0590190c1436926d2d4adb6511011833f81458b772d8d17ecc51f90321fcc9440e6e349749153f1d7910fbfa3cfb7e9025574ff194b247b4526b799a41cd869d8dbd022077aa8b926b08eb278447b3751c41267207acaf0ac9c4fe09ec326b8409e90c284e8b2a54897f237d857a492b536e66a95a1c89eaa8fb10c27fcfeaa0199ebd3f2c2b7dec4b003f5ccf07c24b513b9b17fa866acc667a3c648afa767a233a9fa5af0008c226289955bf74915d9c453e3e676ec42898ceeb608c46a16abd391e1c359d5d5eb144bbe8e54548da9af7ca9d2f5a28a7a675a836f238fdfa4e36d3035e77de4a63012196cefe5b3ae3dfcab4c0cd0a9215eaed685b55eeb16ca038fb98142dfdb1da64efdb043af6fd69a905ba3bdca06dab45653601e6289f01ba4550f6aef1343cf044980b8aa74e31f0108a3b213b24432ace00d196c83bd7f1a137a3e3bd40a55e359458acc46ca54a55af2f7acac02f17f34a5952f8e99f697fba806eca9daff9534e9023c6cf5fe255979d4be7c7eb978580edbd631ec47c314820a29171b96bfe25268236ecae8280d209171ab1e513f53323387f51e3b4866f0911ba835e30c6c6a04a8d5b3d9577fd075ecc04c837b2df7e46a60979acbf9dbe5e9e390ab21d9171df42817985ab66fc958436f15d4ef4738a9fcbf2cf7d6294cbc5094b9a93143fd2eef5eeed8bae6d5dcbceed0f4a009756951ffb87104c40fbc78aad44a7cd5ea7fb3efa379941ee1a1b4337c804825e4d5e5bd08e48b927610e238c3acc3b52d0ffa347fe64bfe35cfb3a5e123ef82cd124362e2f6747dc8e116a84f780ecb0e054f944ac7e76d198d3facc6839e0a784bf0570f4fc66c4f569d60405663ffd4893777cbc37155d403e2b0f5485da42ca67503579889465198feca5eedcc39c9c53c45cb83f09daf5a2319341b3238334b5bcd8179c5f517cec14c70e6506133dee56712af6c2df2ba8a504ca427afd3632a1f57998360e9216f5040e8f75f5bffba4368eeedede54aa0bb058a43ef551668609fa1cb6f0eb98f3d949cca1b894e444295e87cc5cf33ecc326758ee1018b9ff72238a30ad0bda97b35aad07d05f30acc6046209dfa9cf7d0790f116d1eeb564ea807151975564672ebb9126e1617954a92b0e25dacae474bc4fdd37cf65d16ccf9b6288446abed8a7d7196d405e26b22f3cdc8ed2e91669ad0eadcf4cf0a66d9dcece4338be5262bb57c66991b7b16be4b46dd35c86cdc27657c35bff21acedd1a51520f8c2b79bd597f8aa39d0b1e8462c2261dc1672f594a5be5c3a7b4d6407b8e79fe90a66fa8322508dcd6b909de00eaad8e63ace9974930f4ea3500076bc74b62e9e17d8f540813ea2a0dae6133ec66796ef460914b28a36b1ae627e8c4c62f13b9c5d96129a3f438778911adebefdd92a7bdaeb0dcb05b513d005102b440e3965485e26e90ca6ef8aa930b766ed1f8011f06bccdb2a901ae3acca5dba4fc0ff3a469bf3def472934ab73c443235a5ecdc017b27035db3c8bf9924cfdfac35a3090b89957afe0cef36271639c7451b7fe7037b922cd0eb5ef629a6ef0205d6c57ffbc9742395e053eb7d51109c880ad9d19aff969e20914e25d2b313a7c92ee6fdbbbe288f488751c92e6f51388ade6b0a2c899d0dc95006cd28ec065782a88810bfea1b04728c795dbed38411aa10a42f3c7c1dc237a2196a90c41f97aece19477cdfd439c04a3b17a32011ce724c258f4f79b171f802067caebdd7ceca1a2b007701ec85ae6af7957fd792b57feb6fc8d9f4c08386ea5e81d73bb78351172dda32e2bc7e89496f45a96c7f6d3f68d35a606ff37d70e571f8bee0474bd04fa2433504dc9b0d6fe2a6c441505c1d5ef0c2775da2d6226df16faa2dff9ec42e28c9f1eab5519769024735188e18a638687f8340571437fe4d553d8758e2a92d11ecfe06ef38b3af3e958034a119768f7b1018ba98be0e10f627fd8edbbdfbe6fe1abdebd2b6eeccf8104a3831d4faced8f2bc2ee04a31408c765ea7008738c65dd1c60c1862b52cef55e785a8e19f60e2b5c20fb63f3df760cec5626fe4ec55b1a08ada18b2835964c4dccf8ea5f10028c7deef930370b0237fe633624d831f8a1590e86c3ce5ccf8ebbe585bc88c072ba77750ff4d9605352825bc9027a97e579f5cb98b4859122c48f0c2889fccf06be30fa663540a612645f8406219ac0caaac62cfee8b69a36f5b18909db2205659f92c8257ed4a5e6767f271608a2754d3db278e1e7c740b52908a451396429386584267554fd25788fc98b203ff87c1939a3f96837224b44687ea5282c29052618ed5b7e4123ed6fb725fa4d4f069dd4a680f5bc622d838dbbfad3b53bda5fd8c1b7b067ccaec674f67bbac5bf32a2278c31b504f052b03829657821eedd00f568c96d597e06782f55b314af17e651b9f49d816967f899edbba5da93cd9bb026130bda7bdd93cb47dbb65033e0897433e5aea1135186075378a34134617c3613cc653ef673be8765916ab67ba183d13c684b5c293566c2126847f72c31e95c639abfe3f1c8ed73307db88eace23b317d845cfbd49cff92d3937a43a2c548e8bf86010f9562895851a9881ff12c1b5b9d41cac63b0db93f3e02226cbea602a3ce96130b0acbfbfe6f1dc3b270058a1945a77b058710fc90fabc28bbaa5b805539d4dd1f778baa2d33e04f8f51f8f0311dbf5800df2d304eb0c975788b6c29c6a74848920428fdad44f916febd8ab66ccc9049ff6cedbd410732f0eb8c6264bdc1f93aaedb2c5e454c73ff47dc454292fb22374955d70c31a8fe805bd2c49b042fef9cb9211f34bff053f1b1d5b0fd6b517e0827c37483e63a350f12881a3561983257fc0187e6e1daa3d685d1534fbe77aba6e1de4a8b2766e08456d4ed9a9da4cb51bfa1eede74b26b950cf7b7a15514b1f7bfcde38dbed405c670dec33180fcc1744a29db833f1fb1168b706359f6d199e508b9c7ef712bafbfa8cf2764d1481ca7e4c2d73d0cca7f414d63dfe16a566a5706c97c1b0913e35645cf9e9a5a2fe4d1d6946974a15bdcfe99f9b49f794a2c34ff268c774e36ab739105b23ce15a22dc69c61990c779d135b65969fdea56e8663cf77f6d07390efed29aeab02f71deafe2806ff946cc64ceedad86618721a5d40565db63fec715e051b6ce5f0c1b1e328cecf418e6fd9fb1861a943516546b66a2982ac3f986c6ff567fe7b13f00ec4dae2f2f536fb48ac6c9ca1ae0609642045ab7f3f4c11e2b442820bc0f92c94fe88f74a813a8982cf6fde5a0ca2d90339676ebbf5e1e384c9711bfd6dfcb1e50eb78e1e8c15a528d276c92ae5b45e945043e5b1569d77c2fe15785bb8ab3a6f53eb19e76c34d8ab5425cfacdfb6f4a8136fa307d7db691de084399f579120a48ca82d4da8349e7ad3016458412755bed15f2917f02812061f61d230c13b0f2517533ab9d6716117cd7e29a5c081dc394876ea7a46001d0be912d4d86bf540417280b4a46d97bb12a210721dc45302b7b75b59973fffe4affc3ba3dede7c8eba2cc53da5d40426fc0f5cf048c31753aacc81090754840352c730e1bc8f2d24dfa4754826b0431f2453a8068f435b6992e66c7b430a18e3a4b896f10a0483bd32883536bf78c11e3c1da63779db7b9ef0939222c2e73b10166ec2644fc51ca2433669bbc8942a9e93cbcc0590e2147e545286821f727723184867bde647449e923da739ea98dc3adbfc8df36cfd92823eb1ae3ba11239772ae3eb506601c7ec900c62239e0d525d651e607356949245003f9d92006d1e86eebfc1ee679ae336dd311f1b4b583980dfbfe827e63d7031493ac937a5e982fca43a8fca336932e7ca4a52838b1fde4fac4f8963a45ed8c19a51b59f19fdf3231be2b98682033389f79690fec5aacd144b4bc8c9198f28804402e73ad5310ba49656b3a5bbdf6187e5c45edf93bf82794d333acaae24ec0806dcd28d501928fba3f512aa4984598c054210c86d94aad912a433daeae68f93333e0c19232cd792d54c5af6c36867e0d69e5b2bcbe082ce4c0d589c481aafec59a4f860b6d29404aadb012db2123930fa47a28c3719c6d349dd2d615e57b96dfaa02bf693a0eabb851f89c18e0829f6b0cc6b6c27a6c352aca206dc9614388296ce1b4d321e484204887924cfb0d6accaab2a3e162e24f6e4ea996077e6b9d4ae7d5ad72ab1391299b433f9efa2abbd88426394aaf6482a7315398f7c2599deb23c4f16d5f039b7c5116ea3766435b37a50bbe22ec5c957d7c08bdc2b77650b32998c9edc61c69c072e7da3ec7bf139212477b949e31519a36af4b90e52a7d4b00377d1a66c7c59e079d58dca306a991d4c4b8c54f4b7ea367308b88d3deee5ab08b551bca6a75be1722ac398480e5dbf468bde08612e4431773c5d309f86989427a9819776f42c7aa5d1e7cf19591197a1dd10bccee4a204f5f41980fe2b780bdee903bf73cf462c836f6ce73ad73f26cca3d6ea84779e216de46006e02a0e629ce83aad03b53367a957b569130550fd4574a33a2853a3275d81d33adc2eb638f02ba8d8dd226ecc762f63dd386fd17b9ab3d7f421053b873330f58548962a1f6717d0db36b372bb885afaac11733b324b0617d11508c1b18d86298ebbecb4566051452cc6d4c9c54e7eec6e44bc18b1c4dfd5296aeaf036caf5e1afbcbeffae7a5c68360402ee6a36efbb8c38b6e46a96a58295990821a78a04d070b1796668239dcc9f54ca5b2ad031da9e63d018dd3f0bb28e35fcf0543947586a40a87313eaa9e4b15f879a87b8f9ec1d6cb4307a3c56e77bb845c6fd57120c04d0c8c0424de543247ae716f14f8c4271a9bfc5d20d2b93f6965f1fe372194dc8e856b873abe46a514d656b08028d8043a17f33653ffe4a8766c585a708a1903efdded618a32bccd02d6f012c805217fbfa5f23b423536d96900582c8896f95df97cda3a1c23fdd19b17073ef379e9c130afbf14f75af8fbca88b81c882c7a1133cbfabcf67752da670163db096b76f2159c23687a577335226e41d17733e6482630158d22180310edfdcb9213c21238f7d4e6dfd115ecb0f819bbf45d9583295814f255a8ec589ab571090b176803be5cbfd022067bae93d4f1ee2c43399add53e05abd8edd98a147c6e3ed204491aacfc5a9d9217000073e5ea1223007728b9ffa156cded20d4c2c6522e1333e0625d54e38ac28de2934bfc89e7e2ce7555cc2cceb0ca0b2fdc4ebb48e8e5a3ea856f8c2464125ac7241de97abe73fc1897846bca442da67b1300c1dee9d9c2cc166bf899b431fc2235724339105727d5706b33407b896d871b917070bb502f0977cb20bff581f08849d18051781cc03072e8f9bdd16dbed858795daae7f927372c15ab03a282c66dc3c42730703553be11a6459ee03b28e34c10efd9da2569b9c5d3ee1135c4ec4755b2ae62832160e2defb9d6022821a3c79008daa1c756515c77e704549c8d0a952359c741b7166232d81779e12d3314861b0dd88196997ef937db83c38ff22085bc567c1b395e2139fb05ac52b9edc9b98ba45f07b62708bcc6a4c429de84ee8d4da96f7e61f4318a800bd71f7459aba80756d7f9d008d9ed4cca314d314c5cf4fedb0631d7e27c6d90b1600e087ea09bb8a9a8208b45d7d4f0d330f92e505304f973abfe4230e82a5380b0e81a6491d9c5273b4490e4ecb8db492bf3809ab90363f9c5ab4be45f08f0ff2f74551467ab5758f62d86f0ffe335b38904cd32783a67f5bc019908c8508fb7457c5e95085996c342a2166ef79b259ab2f4be1e76f12af0f7c8d5a30a4b5a2e5bc6e0ef5e2ba9f0886ce868be29d3850e8bfa689d70d772e0c8a6be0f3e77eed71c812b5068b9672e53a3e53bd568fc05912a18d3fe9401dec8b560be740e7f2344e950c55aedb19e1ff0ee56e60c87ffcdf53402e489275992a991ff344867a506c166a7476e553e98768af7a6e6af640804c6116be06bb9ec2b59bac54c30c72cb176dd7863db7886dec1065b1ffb9c0afed5e8d8be55679fe3c1d7704361f07c60864f35f5ccb3b0cf9b6b4edef40f9b8c6a6f764d6ec97378d03f7d558387c077a1e5c64cae56dff2210ec74c202583568c8e8cb53d482f938fd834a91df6be9dcc87728f0ccbdbef5ad80d9109478903432d611e4b4d9ddb048bdc68b7a43f7b111d82e76b796c6d4faf6ad437db773b97343eaf1e3e83f93941bfb9daf90ab9778f3e7b55c85a14067d243d314b13a8918b6b904084aa9436e023c50c5de9fe06c5ee7451206c8d892884f67ffd26f0381a30ea3988da55015151b4d838a2f2c7a7daf9e8e96b80e099d224a95b77bb95cad5e58fb1dae3a47d91adc3f2fe3ec11e4a33a08b209411b956f237cbd0b2ae81a1a8cc6674e8274b2bd857f3c58afd108549046e5072266f5886b2b7f77c8d28dd5c77116e0990a2665e1ba4bf7d8167d46499fbc6c226a21f08a286b5c23aa8d228191991f0e96c8b67976bb3c057097face998492b1a3cf4a18da0d22cbbe7c53539e6a5453a90e21a54b16bfb87e0ce487baea05509241f78fd6d16611acf01aa5fe072af89f6b3a0d9dfadd517d20861d7a694e9fb42e8b77955490a5f47cdb0146fbfd7e0864621ae5b42f611c9771e86e6ed8ff97e96838ac032ce9036706fdefb56654628e2c45c8ff2077cac61a80fd873ee09c07307b6169a56b786330e48ecfd00c4c4d1b16ae184b061630f26fae3edaf36f0c56888bf494adb1e5eb6d7aa7d506042591160bbc298c7d5c9c1d06e257985f6d5d18523075105e6398e159d9efe248ac30cc7847268b6ecd7a117e3e1f500baeb6837aa9c133cc60bbf892d27b2188457c926a45dc7378f80ed5aa9eacbae254f5525bdcf3988a61e70bbc3e21343195c7105834b5e50a60dce1e2808a2971d48c1d7c2696bf16eb8ca34c595caad2f1c2bec8904d50b1ac66bedc80222c48b1fd4d6233350800622f57b9d097f5eafdd20641e4fd370d1f3ed4ef1a2f43c581db5a946f2913c56a41818b106d95f82e877f4aaf50086b4dc7bca0baec0076a878dd89571d52e47855b946b5480b78e85592595bf0555abc93ee87eef2d2eaba883ec7677c55cbf0fe77632ba1d6ebdfbee7e47728ae59f015d30b22de4b802c7c06c53cb09d0a788e4466d01588df6945d8728d9363f76cd012a10308dad562b6be093364892e8397a8d86f1d81a2096cfc8a1bbb26a1a75525ffebfcf16911dadd09e802aa8686acfd1e4524620254a6bca18dfa56e71417756e5a452fa9ae5aec5dc71591c11630e9defec49a4ecf85a14f60eb854657899972ea5bf6159cb9547b5d07af6ca6b5d760f878ab05de8c32ea4109323dd64dfab3f8bbe53b6178bdc9167383c7acbe4e6aceab04b6061cfa188addde3c04b7219821df6d99910b70ed8fc38f80bcccd742ede647eddada6f40cad3f9cf87679695d2510faeaff4264f258253164b43da9fd2b4e50bc126faf97d760576c2d1d243a69b3bf912c53664743a5f06dcb5e0b819915c9e5d9535b90f4e91c04b886d180b3882e76df139d3f85603c0e5b582423ef62f14149797f61cc81f1a85edbf897c937528260a99043e5001d2faa537c49f7dcd1b6ac09a37127d1e040684521e77367309bf63ec8b92c2a9bb80176995d772c702d482d4f28cd80f0b41eebd5d87bc0d2aaebfacb0b2288bf91a8e905c538f9d68f670b0cee863729ecc8f69bd2a8ec3f988504239f8fc290a3e7d548eb02ec0cc24fcb612b199e94d1ae8dfc3dc1907f4b0d8557df3b8016d40662e8359dad19b04896d7474f5c384918d97f818f579badcaa4f032ee695a0d4cb76f0dd0e3053f9c94f5aaf01a1e3d4d01ac06dae69aa5068a75ff6f25633703fd65da6436d95991ec43bdc47f4c96962e0b3469e8841a075e6eb0875d3a38715b500322509ce571c749e69234cc3a3b882574060361f6174964acfeb9e5fadefabaf2cfd656cb824c908e24e0a6138436812c77df3a207c73de5b9ce06e6394012a0e36730ff30da49f1e402ce008b861a7c6852516807e036425287bdc5dda9929bf1ecdd04559f6fefcafc08400213020a8f87dfefe67227e726c3138cff7ea3e6d4e8ca0a9b06b3692384399e505cc733c988ef9827df7b5aa2eab89a0341bf1808f598807582bce47a55e289ead5c28e82d010ff40aab90353790d7bad955ca60a9dc8f479a5d4e82bdb838136109c8167e7d483c5465987b4f892b042ebf527664bcbd51be293ead47fad12c69fbda2d54abad42a44e53e53d3e8c667a82102888a11a0d0cb8272f0ccbfbd10c59e695773345ef418e4bd9cb5602c807c58cdfdc35af63cc329170d4d4bfea934b74b5afbc1929754c08c0bf7a95121bb14f04291d833c45bf02d866bc245f46fb0df7c4ee2fd986b01003e2514e2cff6ee0fd37049e7ec08504cf8c2c33186d8e38c27d7391e8bde3ed08fc8434fffb23c734ce90091385af1ebd0cccf3fd502f7e7fa3f0473c620d2739d5ba4f7156f88d0fb669cbe1dc63d90aaf436cf737046694fe1057bfbd5544fd349ca86b5a16b9f8b638ecd20dc9bb1e3d3aa6ec6935786a5678cb5715e4cebbe3d146d64da5d35698a575cd5f0b4e617e58aac62feb3c6973d3aaeeb4e24ddda802329878cc649122576db91c4e1a3c3a467f6bd14e3bf91dc7fd6be07647ca4cd7729b23b4f3111df7dc808abda61538ab2dc59785fc831bfccbb6e2c846ea97f710c59685083d502ccb09f17d7a554130bdbac8b9076d361c1cb70201d1a5500b130018662b7f859f403c9bb91e651d7d3634ae11e52136ccf9568749716341ba8433f27fe53e82f84601cf971bab9439a01a8fb61d05e3b6687bbbc7ac8c30ad6a466df9bde310dee240d43ff7916d0c0354b4cf37830482740ee4a40d88e68ccd20cffc3cd4f7f91ee1f3da3d7e72a068c96585bc0263d822f74b0719bf2bfeb6ab60afe87afff201cc749072da699ad663ea0033eac65e7c +MD = 3cb8d564f471d6321df17224b95b01601c78d0dfa0ef6a1071362ba548500e6bc5905a015faa2d14f7d7f2a09f13c53a + +Len = 68032 +Msg = a6296abb376c06fa83ad149b7e61455d7ae499109b1874548b50f4a3706c82921b45a753824b217f716c37127c3849b83843ab47abcbb48c009b114a7f2f5f80bd19faeb10a40fcc46b6f9eb97fbcadcd73f2781f11c5ad090d6a2d61f83cdfcf46f098ac8bef8696b53022db5f1ef53c0a0b5c654538ea8a3c74e5037aef48f280d7f3892e303df460bfbe0c063e1a45a2efc1fbfb77a9da138bebfaff9fbc0c1bc02fd565958b541a68c0d9f99c7570cb1a59317914336f3ef9a2b6fac0b1827443ae2fc692073c3eb5cbb3adbcaf440f0572b452914fcffb4899d5e0f4b1ec36dd1ee6d5b83a233a314f2797112045db4bbee31c713762e51331b666ae45afbff6c2a8f77a8c9fb965bba44a2c60fcbc579e4c3b3682ce88c41b06e04fd5438c1b69c4b05b870828cda1c83b80f9bf1eb3815e4343ca6962f5b615f26bf95e37c544e8a4cda1f304d391f1ef9143239eea08a7a94b76d9e0028381f1852a462f8f1483295375f6da01fccfdaefe5b0a955a4a6e1900086ac8513c9722dd091ffd33902c28f6b7a14f3429091ef49fcca90e5da90c40ff604e7d75af8c884d8053c230614d41b03420214128931f84e8f363cc12b59edbea5c55ec509d7df7efc14730b84c3dd08fdc8e194353a694c438029e905b43226fb881a8609ee18fd3116a96186c14a2184b22bb43a7b257c94393db0d47565f572ba8b1c8d7df9d9409d26c6bf6eeab3834862e0ed76b545fdbbd8b70c20017097d721071909caa9a7228ba9832f2755760627a8e2bf813efc728b7a11269d4ef7689cc4211433d4c13138687684987de985da8a9eb821cdfd07d67877fb81d70de92ed22a1fadf14b63cda20e01a6933a21fbe495e30f899be64a10c53167bf47c387cfb8ae91759214abd4be18ea4c04651c755cd2b2e8359846f17d4aa75e3192080b4123a6d841de638f0b5cdbfec4e9bc8b5809a46076886d8914c9d93a67df50135821269fb72b851f7a2fe421e80a4cb51bfa6c88cb511e56001165da3705d0866229c9427e8671248f14ab5c0a615d711d2773d7a06ce9c6d3c3e5c43ba009b2f39fd7570479c83cbead8a1398695f5dd00342d38246507a0443c17ee2288c5781160953f56feab69d4d18ef1e9cd2c9d93061e30d77d2ee16339160d729a8b29f0eb7afade369208f95c025096648439d1149ac9e6be1719df5de20670e1f72a1fc6ae0ba7eb40919fa287be570305990387286b1bd2cc2e01cf0243e5021063e61ab9d879c6beed0fcaa4a3f252b8a57086517e3c5e550a11b8fe2a98a8debc8c0f21cb1c6f130291fde26730f8a446623a9b6a120db893573f5f2553796a1e5bcc704a578d47ba6c63c772d99ed1621fca90986584ffb31a8dac9bdc1dbb6f997a2dbff4c863fcea23dd2cb5eb48e2f05fb86efd6e3251a4c96df4fc3dd9998f40e191b9ca6daf5166acfe8b8810af1d219a55a17157553b1c2b977b81cd82854713286f3870bdea53bb4e251c31afee37beb61b3578a628ae6cee21909e14c2b64becdebd710dfd1392854950b4ccabcaacf731639c2eb3a6bb60b613543590b61245cdff7a87d2cdb90cc0cca0ed9b01ed82aca3ccd4232d9d5501b1f8cf356fee9b05a69213b0aab9495237fdfa070508bd539c0f80c26a9c35cb1391c9fa086a564f5bc299e1d218a6c63ad4da37fd8512f0f76d1ad6863f69dce0270b27aa0bde71c61101ab6c618ae67c2c777312ede8495bee8ba8a80e57fcc1c37d047c5b9b338e873357a0195d78a60db8036cc6a628719bb980f99268f35e6b07d9a7e1f65f5b2c182c98ca86455f7f852e329bb653e17b8da6a15204885e2a91ed522555bbd709967479fb6f15508bc63e8df17f925296ef61c7d794856a050389a6b02111a82596756e357fb020386379a45269af6df5c8fa93a77eb0290645f5cb09c327768801799cff1edd788f4528a045dc70d99ffeb92e4c2cd144343f79e8b8a1c5ea3bbdc62ee1b46600965292a853409f3e9c7be6c04e04b26297da5d254625b5ab45b4a44a63a9115f577301e502fd0246f525c97033701a2c38fce8ab3ab6be62aecc5d190e66a73eda91bb7edd7b6297b1e6aa6785d7d0491e8e63a21cbba7b77fef38c26951ef442592099c692386d9d8a5d0cdcba19d6251791632759e3951bf047c6dfdd3b31a42603367305b38b5734a84c98e35491fdaa34981cbc63cd976f372445055b96739e18106b98c3ed289bc0e8355fd9c27c0f644baa99b78f6aca4626cec3dcad410ff3ba28c1f61da22e5b624a8605e230b594e039485b4516afe931059f4ae09d1a0a862327a697246acc4d40fc656bac4b3b18416ecba92b7eb4f561de32dad84ae116f32071e44fef97fba13974d95f2eeb367b63850609c53dc66c2710f682f10bef0142d48f851b430ff3b3c0b5c9df19dd1fdd13f63201c8369d0051be4dcaef70e6153ae3648c61fca101b58b6cda4b7ec71204e444b2f8c87cd091ac6927004f1a0e319a5ea159444199dfc4b8bef48e09c8b47ab25743fe743e4d5b95a3e2cc0594451ed3f8ad795de2abec4deba9ad5067bf03fb7d3e4b2b9fe11633b00b9a414de1eb74f0d2fe4e72b67c9cfedf3f2355913a90835c20fb8bf996c3d9ef1c45a1948ab2387e659bd06bf0165709c5fb38b769120802227c78f347d68001d49b25d9670c2de421ee7258e15a82bdd45087be29d089e4c226ed6a93ec50f845aa512d1af34fc8c58edee9caca007fdccba8f1e78c775882735fcc1565bb17020baa0c10f82c70b3258cbb16f56ea461b5331f4c865ef1e5ea569446e32cf27c2796f2e39b32909d2ae239406d1befe5b5bc82a36ebf355f04585fa2d5352f2696ae7e0d4cf09cc607a5e0e1819696eb358bc8969606877059db9aa3cc520193d16719e89df4e9d0541e3e74d37d5de4cd474d90acc38cac4366b1e429023e46504733200e9e2c4e88d1ce74f32e8954d565ae2c0384a975697051ce8bd419b0abc5762e0f8ac8933e570d5c3128cdddf67d56b34ab8625e348ed6dd653648553c783f7d11194340bd2477b54e0a8fc2a8e4d3e0d2dd4be92d28dd9b35a73eb69ac61b97d3e820c9adb0a9fa8a3233b55532a21f4c61ca88bbc4b2727db561573f3576f89865e5a08881f0a6763e7e2893ed5dd917f462cf78e9121dcdcf54b9a25cfe3a0f210667d61ef843a28db39edd8b43a8b5f3a92fed1c68d776838d506c930db6888817820efe2d5c9fbe788aaa830ff8b6ee122c70c5134a38407fade67e220895297d819b961c4bbe3f316e736b2f638b521247bc79cde063a4a044b874d7aac583bce9147d21ab8e9e72ccd0ba0e53b3be3df418b0e524891e93974b2d9b079a156a1b0229e9f6a14ab1284ae63953b09109c42de0f5a1292cce2826fee8c9735ce9a9dd12e1b766c281033a764cee1258ea3a54b07bc0c43db469c47f4d4af1c8d0181dce95687f9446e027f0a57d599473c93575e41ddaeffafebc15351685e791e83cc361743c4e8731abdbcfabe6d21af348c7db12ddb1e63966573cb6b047c38cc287f2852d4fd68a3e9e47d44a70643af71cad4a6d021abc6bbbc0a5f167d9883782b4f5d316995c48ce9a91051dd412d8eae72ee97f1cfa34c97d5ed9a6387d145a2550ce41642a62d3346ca728ef1d56c9252ad387417549f6af5bd9a184bde154b0206f4eab771542a1c1a13009bd092dc3d8cb994cb023c9e33761d832cd173901df469cf3b4c8936f2a63b1d874588f6fb32243832d4ac9c55c02c8c74d2e4d8707d4cac185f55bf9219f2ccfd5dd7465449804895f376cb2345ce1b690bf28cc14aa46894d33f2dc21940f5444006361076d6ab3c86229267aa0b1855a12412d90279edf8d0d0e84b4e2e80a5159d2cf6632d4b6fb6395be79aeb6b7ebf02d3804ed3228c7d8e58f562c35668042592cfb88d0f76ab428d6cbb77fd2d8b15377dd6bbef970303e587fa085dd53725cf631cffdf988cc58fbeb5b6b4a92de4a79a41383c638ab7f8cbc1037e33d3254b7a3889a31f814acba531b1793ccef8899d3853f1363931f7875cbea2cc03ad6edcb4364351b45aa8e9d76e352c96d7464f6213f75938f94c847641afe6ed46a050370ba8774a7c8e514ef7cec2ac0b477868803414b0975d8ab5928fcab97749a06912b8d86e39e5a73f542e46391cf3e0f1a291aec9939461c1bb28c090c9d192f4525cbe461816b1518b3b006490b14ea682f671aa7658d043c4640f9ac3a0ef7dd37d6ffaa187382da6df3756f1eb8c2e274ca37cc810a0e3b32901feed1e7eaf9e0134b35ca1037aac003536c608603399798d660f2699489261dce5cfb4092fbad25599d2ccdce1a688402d9870935ae1677791d501831b68f3e976f2c856a82fd61ad38a71890a9b5ea163ee8aed4d06fca824a10926033ec770daddc42fc006f7cb8a0cf6d39c936aa0ff50c035b410226a48fca64aa91bc5b938180e5a1f461bafe5e1c582409794842a4679353608c003256d40b6b407d50bb92c109f6ef72c0f0d90445e9dadc4970b591eb37cf5bebce27c3f33cd0bdfb085a030c85521113329a1dd2e5ce0e21fcb1015782edf03dda8b10b899c2dcbeec3fcd89b7bcdb263629df7bc2435d66591f4c74cf3ce79ae9e950c80c877810e9bc96fe28903f7e7e00bf9ce9eb688b1868c9cf673cb0777edafabdffaf1e957368d5d6326c9c806ca734d2d716ae14bd160fd4057dd957fbc874e70d9a2ec13bcd309e7fb290d0a485d5aa14659c77a9cf850f0470d0c0f34a65ff90e9270885520dd35b02aae39845288f2c58c23870cddfecfea62526f7d93444340c95e0027fe4017ecd493dca3d93fe7950adeba4b9670a5e9e450e7bed6671618509fc15df49a535730a53ad07be7495fdbde5b81ab0d3aeb9beebf1ff82e3a3e2e19131d8b54b29a45ca9d31bfe8e0ca080db2d5a43c559990153ec9800376596bb6408f49d4fc5d1ceb4bee2dab747f985207700a67c09bcaabade4f64d9311105d8fddb983f947bbf18d304d96cd259394a17a65f5419851995497e3735a1023f6472c60c970012cc2ab1fa812b26502bdc91a3b4ea1392ec87b0bcedf90fbaf68b1a7c80f2b337748ede2c588ede7ecb4c77816daa725681f6a683ff8007db99d157378bbf084a2699ba22c5e44525961e3bd7d001d04078568d5be26713c4b7cbbbbf837889cb70ffc8666fe804f51ac6511f92bc98014e4bf7ad4d1aae06cedeaa5d1e9bb24bd2159b7face6985dd7d949b11c0753f9523b5800861741225d8eb598a3b50c4bd87fa5c7038c69d04bcb9844d28e7e9952a930fe33e977a7d250700ab941123be29279e51a2613ecf511cf335cbe82719e1a14eecd1dbbf7cbd83c2bc5bc4eac8ef28a5247600114424051152113fa12b302666ab8008892a86aac646fa32c0e3c14498711b6cbd6e1ebc062b63b6fed2ff6c7fa8b4e5829069c335d1d8234e1887c59fc1f96deb522588f9482713e61736b9bf6cd63b50b54e1536e35d5f3c6e29f1e49a78ca43fa22b31232c71f0300bd56517e4cd29ba11ee9f206f1ad31ee8f118c87004d6c6dfe837b70a9a2fa987c8b5b6680720c5dbf8791c1fcd6d59fa16cc20df9bc0fb39f41598a376476e45b9f06add8e34af01b373a9ce6a3d189484cacb6cbe0d3d5ef34d709d72c1dee43dc79dabeecfe621941152017d9cdb46af77209de8161dad5a61a74f3c397bd1a88dd759957d0bca0ec4bd4f8437029f0b63d8e9b6760ca38dd4d53f2f28d59caec5906d1ea67059a820441efa863efc3d135ce685979ad0222962f3c7fa7cb39501616ce6e6c45ee4967ed65cf4e0ec9908150ae20548c1abd1d8e39328c1a51fb3b2cf7aa8684848a9d62c381d78fec3b4a9cd684986e68f60bfb51d5e54ef837f1d1b6685ecb448ccd286f86a9791319b73b464dee5cd41588fbec2e5970184a608c726e9c21169920c5d3a66ad42673f1b46843fd5d4661bb1872079186987dafe59485e78fe2f7bec355a9c3a80c911f8fa32e6e79a623cdd94b26349b601807648275e71c90efceaa5f565bfeafbb6a555ed5e8b8dca4e6c6df53ebb458638f92a50645d008c979005876dbddf639fa8d03011423d0292c6896585edb68a670f66500a9b332cde64fa8d1ea4ec952f6bff97a99c16bfdca46d9fc34177828d1192b2abacef6433e1eb62f315810508674a808219b9367e6e90e0616717032db815d4d21283d72a8f6ec585703b379d432787351b731aea9d79f3fabef380cb5b8653186c9eda34d5eb11305579b160584d182d31f2e1b3a9af26f9c9cb8fe8946a99e8fbaf01e54de6d2ae35dae6e44ef1bff4fdb70f6c1ba715e907dd9507cb1935ce7022c2be6fe8963981cd5cbb7fdbeb06cf1e18768bd82d3309c8149b883893234a98b122b476b87cd9cf9738635225dd36b6815552d8f97240099326543f5ea1fb8f41a4a407c5e29e600afda1fafd02c50eceab091ff7313b10a53aa7a3e4a4f364e8c6c7224af5501d4c7db44ced01ea9574ca2723a2ca5b8baf4b0afcc1b6d2b83b0b863cc44f8f55b03b02be524517d90845357a88d831c935d9f6a072420a07ace579ddae3bbcb7fab825d5e956ed47fd9eac8b15d55e57cd69e34572f119b1b2e70a8b855468a260678609feb1db70c958f4dbd63c21b5ca6d5932402e7274e182c0acc61403a3a5dbbbe12ee052c1ffe6c6f346873c71d166d11d6674b49fbd3b34d80d152e4a2f872fe1d65cf3ea05ea6b57e3410f1a66e8e36d523e50b0aa82cf83b6c238f461fc6a92a1a22f277fb68a8038f409fdff65f8989015c7463dfbf9464f95c430e1adf46a0d3a7528c1ed8ce2b41abdbb0f509925bc8598cefc096a86541a408e230e45de7590665c70e1eb25f11faac01b5b3d9b13f835c9492d6bca50ca4e7aaabfd776774e633111563d905c9d51bba7c86e7f43083eb3b9faa598c2103e74ed1541b87ebefc55079cfcd872fe32ec393aa438d610042cd2d3806824a6a11b6eb0ed1b288ca226e8389154b0ccdef04424675e29aa3673085a84bef4d816bcb4056214d111f52517bba39bb273a6666d083065da514644eef23b03bf3ef00731a5294c14f955ee3a989c13d4ad39acf87887d6549fa410db2d1bece045dd597bf2ab1760ad54d0a541f363b3b409328ad7e62614dfd045718d9fc114872f420780700d40a8727b0c6a3201cc328595a8b8c3ebb7ac6b7136763f26a87d764f48d110a441652f5bc453e0548aa34f54c69db97da98fd6129e899294288332dfd466f562cf8debe161a186f27b80b6ee58f92f8266f4a0b80e3a12802142f5821eb4a6df576d48aa68d58e521b555cc0f44dae607c653bc02a0a37710f373eb4ac3c9d50859dc6154e527f09e68bc17b1d1dbebe566c37c9666c89fd6eda6f15f171518cb689d4c086cac17069ae658b27ebc8e28184053247f3727bac9706f482f55bda86dc052aa6810e2c1137b97fc93a65838a2724a9531199726517b6fed53b24d062eec7c22227ad9379b24da7658c0cf7ecc0368cfc59678814b6cf836cb544f4d75cad158e21385d0fa892b0815337d606098b6bb83d5513380ee130bde624be408025934f0026df5f751919a1126ea4724dc3a41b2ffaaa4b8a7c754d604ca35af3b1c9f9370190c5c24151495c29c9ce274fe4a9b3b0b3cbb3f1cf9f96453a7341d237f1485127fefacbd5ee92e1dc5600b0abc87b2fd63505f1ae290a76ea25e5275bebb68dfb4798e93615593f52c67476481bc8c078141afcaf7e2f8a38ef47f1a42d0420815c1759f032119aa37bed0167f83f0b2fe54d63321397d7bd4bf4f1bf59b3a16089107e82d94e7c6502f4f28a023068542527d5d46db5e7dda87677fbd647990f7afec76c8f726d1de806ca0cae6f708b5024b514f11c4320913724e847227fe49e4cd51ba92fd51497ace88e712ebc3bf2ee9162523d720c92d1690310e6be866f85282edad95d0f8e51ee7def0093fc99cfeb4ae59bed1839bfb4eac806dd7b6b32210479016d5558903c697c87a0339153334d4fba2cd9d26ca90dd105653a1dde603b283a7e9c72d262cfae266977961309d7e50aa9a81962b5cac064ee28f3d456315cd7093b69b2e21ef85f484ef489cf794a1ffc295b3c5bc01a97c0ee89ce83957b79a5b8a99c4ae5efa4c5105921f4bfd36c8cd434541b7c442095e14c2768c62894dc9acf090d92f8a9786220662a0a3572e41f2134655dd191c5a7b7798651d8bb066826839ac4a7afdacad6e0dfe6d4c59a809e67d9f3476de8b8583f6cb7004ecb975c8682f9715a54a1090c86d435c7089f2868e9cb1a177789bad37c6433e284aeedac469ffa2b8e8b23439f60dd19b6d14bb20553de10eaa23be045e7e7f8da25364f66268685d0efb240ba0b3f104dbd74ddbd0be80cba7877f049c0a1043480d2fa522bcb0bd455327e4741e05d05ba30369171ec4d7f92db5e087cd3971c485037ab2e1c2ff1422046d7834542a75e0a66f3243f65a277f2b3f28b041409f22a71d19c1e64d04d0844db6de2838b2f6fe9827175d7bbae3a8ca859b72d7604be5355f4264cc9cc56f2c3605c722994ed3890080436339c3f329a877125f8f6a836a8d4e83a6646a8db4ff8f7a11b34eededc568ee3a2c86d503992a6affb5e64a66a9cc8d03e425a58b1866892d865f146a7cb6a7271c9416005e9ec2e0592702cebea3c80aa55f81598c703c9d9cea0fa82f52b65290557ec901b962290395734dd1bd7de42e81e7c76097db8a7d55a750e52363e41031d4068a6591033b986489ec01f3b807f1a07c9ec1ad1baf09a40aa713f6052490e25eff8998968a989f2a165774afb91974214ed8fb79bc6fce7d7c09b6dc55da6e7a6a0dbf0977fdead958a746f1cb602a5e76c30dcb2ceeec526ceeed922a774102d2d84e848b2f0e3eb9d9b2a5c52d8cda206a2b3a85edc8317fa8e14e2ccf239d40d48d314c96d30041d600f430ea603e53b59dee51d628c0be20da39e14adcf3bbe8c436449a00c7f884780592fe6f31188caa0e1710d5aa303e227bd35133ad4bfc3abbfba45f3de7cc620176d1815c76d79cc260039795ddeb003b8a4af173f8f938e9f81ab6081596050f61cb5e67757eb934b317352ace0dbba18d9fdeeccbc506e7c366ced08acbaa58dd54cdf91d694a8998b479100a8d9cd764b6c2c1cb49ecdee4ee6f3e4f51990371d497ba778196ec974229ef9954eb0297f9659a016d32f6e31c60f96b121a39a6b384548aace78339290e718449f04daece8f1d731a1f5649576baae6f5752202595c6c5ed3837605d1f03cd253f2de329f07f52b36fc279e0656f9c9e1f1e50f2ee7adfcdfb3ee84a397f88b5c3bddabd396c831aa11906893ea8d1bc0d7ab559bedbc6bb6bf133c05ca4eb84b11739fd2043f8b5fa6ba3165ef0fe4796f9b5b063544b342ef0cb76053e56008bdc898041901433c03cd80e42d262cf401dea9d888ebdd698b027d1df8678b7a86031dd19cb7612870f0de786c7bfc19d59bc77aae59f015da1c14a28279418bb64cb7a15708eb0d344bd28973b65bd033fb3e526f37f42d25830659b8c58b2294cdecdc109debd29807e47f0b7e5201622694ca932df299b45edba864f3702767ab47ea901d685fe44c9cc2fc7be894ab435449e1e2f041cfd619f94cabf98378114d339f316b9c604183ba0e562571567a033622fff90dbe134ab339942d1c0f2588200481fb71530f20d008b71180abf52bfb1e2b12e5c83cf53ef45614db730f7f1789b420c607ddfb6ab445b5aaf1d953ff9d0f45b13779a302429ab6a8eef8ba81f472e283c2d49df2d8a918d5725104aa6753995951f4db67ee081c6cc608c2c70e654a90cd1c8dce3d8b42ea7482c564439e17c55fd225d5be474d0d44661e4f9f335fd570dc5368ab913cd240971e95fb98c5dda83e09b47c005175b03b56836f842a3af23d7826ea660d731eb697a555eaad8a765e106ceeda318a52aef3ca4501b1a89d668372c1b0bdb75508b9fd1a3cd7b20f5ac165dd7ef43671e87c8beb51fe05b77ffcb3f91855852fb40b031235493ebc5ba5071093a26057107930271d193b89b26c505a45dcc4f2e21620047e0d17c58942bb51c244f04a4f7220c20d08305b255ab3ace05a5ee7bc60bcb9bf2b23720b23e766b3e0cd93cdf0c384c8d5ce75004e43b790d83a56677340fa9fa94c0b0acdf5180d81e17ab17a8134f788fb1e6cd06843fe5c40870ed7128dc69179d7adca4b2f782c13462499c29c4127a19f91698a17d1f158c1d7129c3addeb921f1da053739eeb4b414dd4ee824fbca74096a011fcb29c6a4eeaae45cb8cbd7e2b81da73ac24c571b155b36dafc84ef549a3fe66ba49675e74703374067a11274302fd15a1b5c36edf63bea7eb55e67302e20aef193d591c7c912793b550ee74afc893a01bf7eb2813a07e05fd9e8b09b3794c15e1377a8dae7414099eb55d4db6fa247ce292478895337aedaf4a459fa3904c40d9ded3975142813e8a52649aa2c03610be2fdf76ac453ac8c7021c1d1b5093d9cadb6b23af22f79a40cf0e43b94353c67776b9dba1fe47ff0e6d196b63e0a8467cd54b1a0e3dfd858ad3603144ab0205d40edf9dbc8528f84c344371c36913f1b7757962b7bb1b672e06644a8a20cc369ea059a64503651d49fea31883135d404363ffe5f2c3d9a8f5112177d5c937bf9dd32ddc849f87d5cc743f46ea050d9de746e589067dc0b0a79c9fa16bcecd0999506529c18215879f3e21e44168ab6f6cc631383d1257e70c4ee7ae9558167c5abe097443d3979d880351dbd063bf1e9b8cedd9ddaa26b6ebd000889b8f9980a7c61fa553bb967e506bd511df1fd2123a4020542f6cb6830ec9f215c59ade7e4a10b1a339629992bf20b770b6c46bb2118ad3917b818eb73be2c63f5ba16ddc0943c6583def28419cc7ffdf9d791368ea100d77091137bb3bc383eca4cecf04ad0767aba78bcbf3b10bb345db66519c8b7dd6f0204337f6d6133106e9478b5cfe069b84be5d0b10c491dd8cb9b4adb4bd7736e4093f18cfd37bd9747234294ec3e56acbcb8e6f009e04849b7f8baf1948a636390d2e61b0fca2811e87be3141c64fdc681645802b070ab15a7512e033f4b4ddd872389b00173134ec700d2c9dcdeafa44e7abc4fac64b6bb1e272c76a894634a980844d26edcff7c67448a2c9a15ecb4586e8c5d3a571ba8810d2ed27ce074194813bff8c4625d494dd97192f0a5457543a230b1f6a21a6c7455bd8d08c9c0e82bb843a99eadad23ef1231b36cf74a75a4d841c47de053856ca3512cf8bb0a359778884b5a097f9acf9142f46ba65c23d053482b1c9c5771de787238a93e90603fd6e6848310452c73c92dec791d0b0e7ab5bc5c7f3096c05e379916b6cef4166955f6bba66c8e47504c4ae211d5c7a3e86206bf023781df40835e6d8dd6b5c6c87831774058cb89f97d229bd26b2272ce0acfe9323ba94d39ce0a93bb0055dfc1a01f3dcd6f7d42e3ee5d7017479bf98ff27061ab978d98be8a563fbab644efd9802875ba3b2420841253f56ce5a4b692cb809ecae5af20234aa9b809731365947ad5c5a32640a17e8b9e925fdfdd289af879171c907e922c817d9323b131ef7702bf93f4cb632417bc95dd4ca095cdfd0bd2511d428c6d2eb15a67961b30dbf5aa3e673b950c470417f24cdfa27f253d7824e3495648ff9e6cc88bdcfb80b994f3eac5f41d9c78b8301c57658fe9acd0bfd9242d6644e81016309664ecb216d9524d26aacfa447a8977c839ab375e35b6577ca35dcf0a518402b1dca6945523757ce0fbc15a42259b0ab67dba7946731eb791bff24ecc51b7d307879fbab1a3376e5f7c49a2c97401e115a94e6d59708b465bff5f899b69e2fb93d001e63dd52324d6540d79e24f022670272fba9f12472c61c96b277f814ca5dd1d93bf00a281c3cdebd288939ee8fe4c5e2509204299902b +MD = 6f5b3cfbb51545d31cc52d33723c7501f9cdf56c8c5c2dfacbd541bef531c6c5f828230601af056cec9fc8faea0ee59e + +Len = 68872 +Msg = ab8f5cffa4f4741581412679280fb03df8977bf7b6d1ab0ccaddf42faba1af2498b42dca897a4b58659146e7756cd131193e6598b91ad96aff583263433abc7347d05ac225181af2856a0ca41313553d31417feae81f13e125406aea2241c01e22aa8aef611609694b9420b8ec4c63e9a86670f52c2782fba45d43cd2efee2ae8f0c665a26bb42471ed6292be75f23bee676e1c16b7b4d3fe477661351b84baaf8bc950a5a51ea1365f9d005eb93be43533879578f649e354e567ac472b9229ac483c007e61e2c568ac6bc4fe2325c015776e1be7e289a6648c128e9794790075b298f5ab36b2e97f4029511b382247e5bf6c0fe220f6b593b8218884dabbd782576a90aa87f185e0b78055146cc3f44c581bf2061633996905ff1acd82dd0758a32b71faca4133437efb2198357d5dbffdf862a256a2ba6ad215c5a0114f286f22460a2a920479fe02e4470526d0dc96fd8bc27556e6a10fc90009cb0aa4a34c5154d9a863cdb296efe645f9b540f987f34091cd9b51d5ce3738679cd3501066bcd260f2b40f75a4927baec465504cf96ba171399876d13cc9395fa41fe3e854c14920a8074c5b9d971ed223bb814f71b338b137c2e82bc1eb9d625f24d2a37d0b239916c1f6ace87a4a60662c56697786810256cf183df41abf004c96aeda6606ec4afda8b1121b9878ca2a3c42337141e4c50511799059d328c9fae9cae5a6211db69affee03bd8e348fde7fc72605720e79c11e9ebb59a1552fc8a2c95da406325c9d4c1ffa34d80811f14b67c98a9358a1195afa277a01ee9254362cbae602c4bd6311c97e17f26e011143a686a7224ddb8c5b1e5d31713fa22c386785e2c34f498ae56d07ed59d0cdacdd05f5b1ab687988936dd5267bd2cf9f0e0c3720a43c91834b9d101b9acae8229c089f509b331b9ca88b17bf8e428b4b4b8d5736420725da98bc3f2921d6e120f510dbfa8e382246eed8ad63250965bf655d6e9a194966ff715cddac7b6f39166cc14415d0d23e05fae90ec7ec81cf49e00ed5a2967dd57049f183fc240e6071879c50491fbbbf58312ea4442156589930142506461f11cba71ccacea82ee7c0ca0498fad73f36cc463c167e7ff1721bfa0fe52ba4977c6ffd210a6a746b4f92a89c76a173e734c09e73cdbd64edbc5092549e993e91a5ebd0c0cb76152e0855a7c681e3924e29d39e8842a76ca587c59d74a9b570780ebdb65e966806f192984c054327aece8683eacc0db2e3b374e97ff2af36e6c51754126cf3b6c6507ec909eb22e41602eb4ff7c197768681f43abe5107640e03605d796e5bf8efc53d6665eaa9bf8465c89649fb7858b1ab9647ed125ae352bd6a185ff54794cfca5efef48660006671aef555fc18dff19adb8f60b9122b614db5433a743f20f2ca44011a30be5d38b0eefba0260182b2da247fcda7b5a2964ea23c9d7dbb04055f9d0b5b9c4d2c779e3907bd1bbad791e401a79880bdff8e3ae182fd7443d453f4ca7c4d0b7504afb3fdb8114fbd450b33038535b6b388959cc3a4defa52188b244ce24310ce6c4d7cbd6b213471518b51aa9749cc0ed468eef910b6726e26f76894cbf24ec1d9dd62e8bf715c8f93aeda576c2923587964abd265286f10a6452c4297bf07f7c3dc010023964a5071c207aa62787ef8de054de0008962b21ce109d6e42dfec8b0c5d1b425e4607c8271941418ac119878e75fb2717ddffad1576bb22fb375cd27375f5534f0416c2c39fa150d289d9fd0775bca465a49338a04dc74d8e41f6dad8cf463df5e5f97f597942dae9275778b31cc87edc320f49d95c68f7e245e32aa434b7083733d9874f70cde7b6e3bd80fa31c8bd63d19c69276d4729e18b4a4a406cefbdfc34dd600f4cea802105309b447e636ae1c7621ef2460beb725a54c3123f97642e322e94ffd540ab12d4da53f9c9428c405d88f3a3b05d437dfc281c84755703b473f3ab89d278727199e32f81db0c2b67db366da073e53bebb7f0ddfdd5d6a47640552b140d39dd269d73b7447c6a4f3e89961652574adaa2d4d18fe528bd4e5ce07c9e074c2cf31a25b074ab730401adaecd75212435288b9af5b9a336b30a4e9d8f8bcc58f9bc337cc5ed1c8a81489c94061276a14d2e8e5384e3a1c761df34bdb77bcaf947405ae9d8aa00878a2df3816776b7973bf39445a59546a36fd5f6891bf569f6be8878b31234c033c6b79abe18284ecfa67f83ba8158fa9184f47c49e4811119079b73239a12c256deee799342b0a10e37db45f840b3255b4845ae4539a72a28ca81358199cc70b879da79470d971a1f960ec047092f2fc765cf75c443f01cecae43a41536eb312040848024a0641fc96a20def10452819e809ab71029e3502d5ce8aa269af66c58daf37770249f1ad35b1a853d5ba781a744af5e6f14092cb37c782efdec758b26f12f4774c0d1720613039f7233b398ac5615502a2ce81945b5fc17e355f1f5532a41d6789d818f2a37e313d9b7002e7361d47788980a80adaf7a4f1efdf112a72f300ec4e237d90772c3c9ba0c15acc60bf5b9d381f7c7b113fdbdf60bfd4ae9a804d69fb87bb86469aaa95d5d7a786bfc7f00510e35581a898a49b5a79d05e33cc6155347d6940ac7a09b09d0b8fc2add7a334c684e99afb82bdba1fb5aab5b947db526b6cfd5c232ad87078d569fcd56ef3a0ab6caf43a49e75b042cbba41a58319d612eefe35252da55a0bddcc81a0ee5fdd4212fd081e3c7b124654958e82feab54bd6bc2682d12eed1988d2e1dbae6463f1d107944e2fd1c64acc8a308cc1b1e52ed7c0071c54b237bd15c151d6dd7456abedd9aa67d50f80bd890892d0b78d15505883ece6866c1cd38d3180d4441ebe489e2e79947c89c8c7c54be77ab9872dfb828c3eaa0c6682a217a8d69c8b6981110b8d699fcc4687aea8d998536ea615757d63662e91a85373dcb0bbf8595e884e5d7ee24e6f4ea3bb593c0b237ff2b6067090ca3bbb38758e04d097ae5603bb47bb894c6b0aa9063601fcaab29373f6f8839bd4983220d23bb691d2872b6202434e370fbc48609667c79fdcc75332be91e00deb0f9f6850c21a79d44b8083468c3d0f930ace793d95d4af082c6736f71bac6e7666aa16d96a591205c2fc6c6d68b19a411c47ffe10a4fb498a7768787dc1244df66fa34547d9be4ceb348276120d25e7fbc59f76c0c6134f301282e581d38198dd738c9a841077595e80cbc08fbc7e5b6b0ac6bc5e432b98102273250254674e8810bdebfffc650c327ef314c43b9b74fc1e962d4dae9caaa71189b593e65de582b1c7a80fefffac1399990143ecf5ab0b7b8e58135aff0d617a6725aaebdde459f13a5d388dbfcf6e6b3e147363258435ac0fbb43fabb16dbd77be3abe75fc17a39767a0e382dfc9f5e52acf7109396f72aaac553e0698d7293387e3b6b5c0360050c9cf581b2ba430d67593387d839bc61d004c7be72a7c2483d53cdea7b30b7ee7d2492fcf66ee5d2fc97bd2b6c0311fc200813e77f1c5750fb12d7d705cfce4048bf4b0c51a0e45972f6f89db77984541b3ddcfdd7418e67e229edd3b4372fc4efab92326ce6eb0b7ad57a31531380041224675423bde3d783177442ef1d68c6e2981cf190b7566374e1b698b7579186a53a579cecf8043a7e5a0fb71ed8e5d0b2032fdc7588b2ebe17a42366cbc3546650e323a8b764c0b046024a2dbf0437cee6b5f5573d18d1f412d819cdbb7e7dda21e6bbf97bf47c3e5c83788af09ee15f82f3fff24284188246a092e9ce125b71cc9889e8a4973ef7300ccfaf07c62565ffd363c0f038c810bbe5d8e18be7b6d15be0d59eb9b4cf83c98695c58ce3c989623c68e8ce9aac457a8d31de7b6556a2d5a5e64342b5f88b2fd713f3085c9672b518579365138bca8a81e60824f5038d43d105fec7017fb76be99162029b54c8004e78e83b0c2c46f3aa3e8610fd8439ac4b7af7d1002cae84a257390207cb3549c61310daeb5862beef8381c7e7a25018fb8d57e71ac91982ecaca19008c25f9a687032ca19d7c6f237fb20cf19257790c9864692b71c9f6eaedac2350603eefa1cd77791ff7119976cf08cb2fdd5581a9daceb593fefe94fd027c37869548b72ca8f07b904ee04b675a8ecf8f9799bc15f486fc41a089e2d39dccde29a7ede085ae109ca8f152e553a6c692777dbe88af7a2f95bb02f6710d34007faff498ec6b415a54a0aaf407fa3832bc9dec1e57f4d02b2a76a2eec01859d9a48017c44b4c07305c3dc84e1399837596596f43da74ab0c22faeccd4073739ad5408e1a7d967424ebc6d5cba8d01ce1c84073c960ad4f3507be5d0c82bd15e69a77d3e603d8fccabbe25ff7282c6919bad996099b1d415841478036f743c52f6c8c65c16e8215742506c35b220cfc8ff68b42aeda3335c8781cd2d72ea5e5d7b3f4d0372e3062c3bfaaac5227004bb6f3dc0603ae8d711814a4e16789520c9209579fa1b352493bf44477869794eb114b525cb2a89aa7b99f862852a7e6adc0f51b10bbae665d3f6b7ab16304493f415574b33638d93e4f812704330ac25e06dfb5ffcf7ffb03607da3e671ed7bdca9bac9a608dfc7992c620e2193127371b651bea967986ec021a356932dc3cb27cce3b7b1951df46ce2aab1fccd5f88ad61c3abaa1e986038059519241117b5c51d58c5427573de1e04c3a8f27c5260558bddf37e5ee04dcf8eab5235a669aa193d9278e53461e321055559af1a9b98feb6e93c92a310a5fb2f5e9824683a36b8801959263c68a21a66d84a8f128ba12d557ddd8375a9f74f5a37619cd0f9da17a765dc71f818a96e9bb5021f0eb30755fa245ccd510cc030b1be34eb6b3912baf5f0794511c25792268406db69a23a0d174530dccfb98f43a86b88bcb1686f170e51b63bf4264b29a9bddf40bdc9b7a73f89003e4c40b2fcb0c7e37d2e184da0430229b32994d29967dad1fb759a1ed8c538316e4132d9d06d4bcb994bb94d0b567a4a372c9ebc761363a5481ba3ce166b0b5af968f07243207fa7bd94dbcbbc9b327e5477b437242ed0cfc33a7753c4735ac34c0e1a0ad98ccc1e4683e0681893b35c879575f1380cba98093c753e7780af20f2bb10021814c975c0b377a0b3d2855b4cf04469364f79b466ac3deca41580fa69fa6306633af074b88e01f412da11011132b00d836996ab87f421ecde9478963e4683766f71c9619a8e0fd0ba0cfec480b7396cc3edb9c3d9ced1cd9bafeeaadc1a01d0714bbce2f33e01c52e0d973bf80850f56c3e3bb3c876cdfd4faa6b9ebfff6eb33d4b536f3f18785fc33e82ddf3908735d0fd94f1f09666fa8f2667f876611a8d17d3256ceaa7e3ff3e224a11000a5cacb68e6de4dea84d53bea67c3e8be9a5cc95859b729256c521d34b457bb9b041d871732f22ef26d18772ad00d76cf380f03ad53e06a2bfac76473c1d746d3cc737963e4122ae9c94042f9cae6996194ca66c44859fb84d0a5afe572aa1b70a5d5899624c7a996425686a17dd4b93b5594dce45fab42f895f4e5d4f057a03a394a9ff71c9713c27e602a6810613e2624764d56c05da94ff1bcf08662663ff92ddaa3cdf10dd03525691697ac1590eaa9779f6394f796508e06b744f15f5f742c8d7d61ceae48b7e07632757877174f8b9fbb51030273c411d92255c5cb6774dc6c15fbd904e4105791664c9d0f3c1d73f689683405a773253e19030532c1c1e57e53e23a960a0731c19a624265651b0885f1f250889a25703c8494da1ad423f0cc20601aec2366160fb6019002fc12f353dc357e13b4a29adb4b516b0d0862a55c62bba18f98f3b081a26faf6d67cadb68307ae72f5db14c235782e192c545ab38033cf606cf77a42246f4c62e100b69cdd709b263fd1c2e1d8e6f63327395ab68e92b42d932b99df78adafdce5d9d4589b72a0838fca9e7d0d95f1a737a1a4cf2fed0ac912883410a57677dd4b84716a4ba251135c2212045219c2de0439c37e028725db5189b386293e56ec888d28427c741f4e2b74b80824c6cc5fe34e3133a515b7ccd6cca2b07289af83334073919c5c8dac744f1b09143180a57b6b6890660d132618bd8c202fccf419b26abda829e00ea6dcfd9577aefe7237232df414e3d1da7fadd8da45af9cb748bc589126b39324d5bc2cc1e43372339d70e24e219d087021fcab17a1706d8b788796886db7ea52a198392adf60212730fb44e157001566c59ba0beb420a3c321caa0fe1da55a3aa307cf3ab9a3afefaa18a25815ab8d40c2f1564a0e1ef400fcec047c970a672f52713b7c038c62df515fa70cfdfdd470b29438440ff9c2c732623d8e6a6595b3286b2a595d78ee88df46af9a60758f890cfac3374a1f94888ad3c8ae28356a68ad6c087d27f7a76eac44486afdb112fc4aab939e4d1eedb76ea7125620f859b249da5231f3872213310efe09162f034ce41d05d3796632f65662b701153cf822966c841220b5e2f915dd3cff5a4de4ed71c5b6816f9408a7ca7d33494561aa2c0b693ab86ff26e92b35581a83aac1c607c4c02328006d35e337cf399621504412176d28f11db2972a1fe68be27b83e485c0695316b5d278c39e8947bdba57b04610be7f0c6cea81b5a4e5e8bb1f0af07a98bcc38720589a44626726b12b192e852aef797ef4b7eef54abdfab59f40320dd5233a2448e5e58d0dd39d1b7c7c06f7eb66deefbdff28119cd68979020bf267fe057f9535629fc7273476a3b36a7fc3dd8c7609d0ac75321f995dae505577af9bc95b81efb8111936f277f0dacae21288c9087134a41e805d6c3dfd92050a0e35d996907fcd83acc47569abf883770b73865ed2f1d16a22ddb8f20ecf03f3ac539cf86bec8b3da75824137b167f86d726293ed21019a34127e645880f377ab07d7a49ba3ed986337b693f093ba5579d291c711998660f04c45cfb145a89e7433bdb50247d9ea878b3abb3fd6fdd328605c5bf50919ff8943b84df59b9e1818c1627d652b2c4e99d8b5338feba0f5eba418eef1f03aca41814c5b800332791b495c6a3ece53292cb88c796b42523246065decb2df7755cb9d8864db0d1435fe241217f991cd0ea29347095c8b702cca0f91c192374e1679f0e3167129a1d333fa09e320161863be016b6fde279929ea386b2a2a883da0ff13e2dcecd969d55f33ca683cdbb3ccb17b60295a971bce19194072e652b489ad8f0e24a8acdac0c259da23ba533dae4f79dba26c6a969df92a98385027411517badb8a3f14830a2fd49f82230cf48cca8524878e0297fdecc4f8e6e26661e7c03fc17a0a90e125da4ca120017996ecb515d1253a0f7e8276a0d90b2790a57639766670b5b273b8642a8569d0199352b1a47827fae1d8a02926bf119a567a44d607210aaae9c9264fe692ec197d683322c97fec3b1a34fb66df2196b4f85ee8485a87a464b74fe41019701338158422aafd5f0e9528f1d8d22297170216d1b4e2f900da6d9b7696373b936bc66275859ca8abfb738ebdecdd9995ff0c32615f486b33294016dba137b583724ef4caf08a63dd3f60bbf79bfbcc84cb2ddb8c2bdb1984fd66b9fd99941fb6b33c3ce2d7e6b76946d7511d6abf040a17f162c0cf3d9c7ce35be55ad3dee2a3ab08bb5bc0540bd6ae61cebddd9a089c41f1689dadc25c91579a3952047aa6e0c65ee0943e34d9bbd27a8547690f2291f5a86d713c2be258e6ac16919fe9c4d491895d3a961bb97f5fac255891a0eaa18f80e1fa1ebcb639fcfc1d881aced515992271bd8c7b23a7a2512f4febd1d9419c055686ba0750cb2724aea3e97c402a59b4de7b75d590ab4703f3bbdc2476d897b04ba5928e4a72e1905a839074ae793fbaf412e6ad9910ca5f232ae71b3bfd0f1c21d53cd3fbc7b8d99195a46a7888c79f43025385a57e88ad2e0ba118a1156ea389a41d5afd30196af468a9b026df9dec4bd840d03e3b1e9884dc7ecf3ec822e0e380b895b7527fbef35af4d831f40f2c9ee3332fcbdd088bb81be4817d7be84eb009a316c29578600f0b2a55425cb7da8cd1bef6e6dab2f1485886e1e5a72b677f8d4150978f9fd8b7f7ceb9a0700470c62228b817baca83a600ba62ffd048a5b2aa27c5be9732937e8f467804e49179bb431505c703abad71a31377249ddc93f9eedb089042ed2ad3501602b810db7fdcb318428d4bc2c90bce16b10c5653bca5b9bf7bc5192c0956e8d20c628b3eddbaf08700c2d9cc70f4c038831fa04a7a569959a1c5908ba96997fed77cba582dd69a05c31054153fcd57ed7fc6e23d678d0c4e0d0a3f68a58c0bf1066f34a3eaaffdf90bee31398fe5c3ca09aab2891ea980f1301b7c5f684ea34d1bd270ae8eb7caf53dc507a5dbeeb242b33397d9ea3ca5d79d61edec7c220c877a1f04d4a47e5f7efb3d3de6ce4891ebfee9e88c54c6e985c785fa7c4b969624c3cd57b2a67449faa6af4a78b173f12a5f364b3d08d8aa7020e028ab712cdea96b65efc51f2a08ecd2a3b3d83ff14e8266b1265850d2872b4c190ee667454499e371339879102ae9f1a31091b451088887e3105ae754fe1b9b9903b9b880765ace67d9893ec71e66a635d711d913bdb135348fd116c08dc5b1d8ad81cf6ed2707eb23823faaf51e742c47de4f8a9ec71113dfb4779b5a4be015062fb1650e77f96f8d605174963e079e78b97bd94035c8e57f92a7a94d1691cb8da7247d733ec89a449892f15d2f69e177686726290e81f2aeff6b3fe925b664a6a83ce72362bd93cf94caca51d7e21ccc55dc1862388461f76389053760970bda9ac04b26cd2083b6bac1a67b1fbc7700e6a157f29d195bdf26caa23eb07be6b0e679508565399182743e2ee1ef3d1b9a85808ce1248808f0b0f6bf06fbac1db0f22f9f47144fe6ba290b0a8d30af3022993f5f38b4188fb16ad503982b70d96227a9e074c1aca9e640eee187c858dd218aa777fe371319aaba2e17fb2610424fedb1ba155496038f23b05bd5a1814b1ebf807d3b94bfcd6409cba237d6d37ffead0dd531b4561c3c39192181a271a2a1a29218f7b365d466c0724d552103b9f7cd86dad0cb341b75eaf0db93b27209329aa4f13b7c4c553845ecc05cf1e617c3b7e471fa807728c29eff3111bbcaa85a0f80af0ed7be79630201a2542dc6c2e9d1ef41b8bb696dacbd0cc905a4c2a8a069ecfb79ac01686e5d789c46bde9e1f1856ff31164500fbaafe04e7655a2318d11b17d83e35e49e1c01b553989989d643a2b2e0e64753975dd43666db5b26aa86d97dc34641d444592b07635781a1ec957ec9bb6a1201163adfcb9f1ae3a7c79e665c194178683213b00a64274b98ba8467ae2110499bf0e88d5f00a27818f88e5e5d3ace4e12bfd23d38e6965bb0c8a6e9daa2775276cfed794b3c009d0c95ed0ddbb83b4756761b2f1d5b13169cbf5371d9b01dd1340b90002a91c3a6f5582101620216d8b5dd650212423c10bed7409c15ea622a662c96de77b25a3a6597c0e58ab8ff96b35e3652c23c5fde99d8c4c529b1e2e25fbb6840bd1e42cbdfed5316a04d43e5d181159db79a1cd4a01c76899f972e7db3206af35515fbefb6b14e016d2f826a92ee794f4cfbf1a7841acc65b21a9370f3043552fa6a03fa9c9c18522bd0498969eed7e3fcc25cab986c3cc63bbcb05081cf4ddbf76af990f3f6487576fff7b6d91ab7f8619ddc756f895e3786ee1380f1fa2b1ae6a92b275f6864e7d8df1b9772eaa008f5deff797bea97361e2f1ba6c61d438c32953742315ae425cc2e339f99e716723416144c30187e5e7c00672670912dac85cfac560c565cbbbb3dbe33e08881e0a6d3d9524e8b89fd2b025484840e5ff83aa8d8f762e3251640be49f8d95788b0c888bd1009cc30bea595824562dd30fbebc16b9ab779d3c1d7003552d6cc818f13a51e2a0443090f664a6eedaf966723f399c2b48c92ef4af8b42ed67b7002c802d99af4c098895c078188e1ccb2691cfca28cd944b6ee1e203a84f839ba92e82066a204b1352840e3eb4ed64cc9ad23517c187d926e46b7d803d64c9424a88c070cd1de78916c4a95e84f1fa234a9e3bc76f415d8119fb4aac0a1280d46ba1ff11c88e66935dbd597f908325fabe5ea7823ae36a8593f70f2c1642f27894e10a91665b115badd7e549de8c2f767f7842f22b554659dcc995ab6add65574eb0a899ac6d3006917a176679f25ec11456d4bd497f39277cd7a4cf0cc922992076a0d1a4aa0bbf8e0eb57b669ffb03055e258b9d498d14f98b044006f07165939bbbe055fbe9ac2efb8833ae794d63dbfafc052d9c884add4c7ca7603899e32e87c16fc74814f5f8a958335a6a9e0a1d9122d2035e74f1af81d5ac208be43d79a37a25037ad2c37481ed2672593420538a609b27799730f894d7f650d09898fc55adab10776c3e2be90eb2fc2d59cc054f7c089fd33a303fec4a2ef7effe1f400624a8f6292a8da44a857f02d05236bc473ec07556a4190cf1f6fb1ecf5ef7cc1fa5c5be7753d9670d18368b296a87ffda706cb1e91f12e80ba306cc5a004b2806f9aa6f483149fd98907fa020e8e75770d8b35973f14359a218f709772b41dd25e8fe11860a06ed55b401489d137d4b71403e77de63d5e91e1e75dd0e290172e33969ad182737bfaa4e658b88357263456eb51211bdf020e77d28510840b46fa7b69549e6d005fc01245271c994ed27552abe33f447bb8565fdb96c4bb9825ddb2527f0d84c982bc100710349781720073e04e16f495fa00165d037c0dc92c2e64fcaa7d6e517d452a86a48ee2b18d5c4702d246a0a04f9217f14b84ff00d2930fc2478c8e1aa801ce4e448a1f417cef58ae204cdd3d0192f112ef9e13f1a1721f3dd6a96897bb5877e880c4b1a3c940052ca8a80ecee8791e4c5025c0fe21621fe9e852825affefb3cfd9bd2e6b1ae4f918ebd6b9d84cbb1c082d9aaa98dad98e30fd266fd71e0e0e8ebfe20a09ba4480ed5a6772ebb6ef56d0d88b1554265ee6bd7583958e7e59e48fc3b1b9025ff5593484b8ae6baf7c7b20d175b5a29c48b5e9e20878039949d25d65cadfd7446dde68fb68d0eaaee8e582b8c8e026b54d7840e303abb907545462168bd31b30148d051ef69eeb2dbb1280ef13493309d3ba5cd9238521411ff758668327208b9fd1936fc04cefb479ae75e4d34569f261d88834e6b8decef3178ac63f6099bf46689e8e748f6acbab060c5a97693e177e6f6d96ab9b3419845183d61f03e953deae80cb81cadeeba5b5ae90ce2921d18ffb776f00c0e3a92a11dde6b08581e19f1fd4d75673de9d1039c727e609a7c92ce9304e74be40067af4f398726a15d12e391502813ecc48610ef0908d8f4266bbd5228585e7eba9ed576f6c0325f7baf296cc0d80703a861ea1b56b032e9422e33bb8c4a2c2491c07d59bd1b14dba0782956438e2bc9bcebfae8008056bff9609897d8c59f1dad540ec134a2b55df2f64c178151678829aba61eb0802cbe728b53aeb4d29eb335e2f076065cfb2c9cb0fa762429a386162a57840db79d30d636cec8c677122c51f38a40d951cf92c42f9c3dd11ec70dacee76e3c02d8f5b4cea70adb9bee1d12b0e46e7568a1ad593f998323239bb631281690370eaeb89fd2ea12433aff4eae8bb8b32240ec23e3098581eef8167d0716b9aacc6f79a00108ac9f7dc5133bfb382c2eaebe5b115c39442c8b0ffb49ef1326fa6695b8308ae8650ec5eac8697b2ec51d75518cda27673c0fa1cb98813b96052b8031e8debffab9fcc5ec8d6bc0d80a1c108ae002c6fbf397adbb9cd79f27caaac3949a2ef2a801c5e87ae0974edc61a70acaf30fdd6ff151196076916c30fdf48b5e2a95e588e306c7e6509087a4724acea24475bd4bcbb87f5a9463355a059551ff4897eb05b43bceef5bcc0db8a283c6a142c8f917d95a49fa94a17d0b77f9a1e842c985b71be187d670ce339188ce9d387c7e134ca0a303d0e5f0c5bddbbe15b9c79f380580746d3c2e0bbbb77ba7bcd850098e52b82f276e16c581e9874f07e4358d94896880e990e1f8e8a3118ba0217bffece2965b3f3295844427313902e82b190dbb5a83a7753b3a5cdce106d1744ec59144b1c3b5bee0d18eff3fe8913606c61603dce90149a8348add4095eb7156ff2e21a0d +MD = 68e771922c79a10b5dd28e0ab04fee66b63c84f1cc35f461f5e2bff3de92edb724fd9bdef11fefdbb3ee56550ddef35d + +Len = 69712 +Msg = d5d28eb1f126de20cd582fb3c1b7aac05cde85779e23d5686733a44630f644eaf9b9e29a828b5e8cbee75ba68594928889ca6bcc8b96ce8ccf7f3625cd6a083b29bb24fee5bdb9abd6445d5554915de536755160febaf46850be3306a96184a64d21796381849585fbb75e489774b3e04b2860b95d56f003d336c36e2ca360324d340b53bea89b2316878608b4063e7fb02bc0611133696641310ce7bef743e81139025504f0728c10fdfc1c150fa3cc4ec698e08319089780f539f8c726d5ce827b86f2bb25c2c8cf61e90c20578dcf0b4110bc1acf75a07aca702aaff9bfef8641bdb04b0f35e03dfb74613fa5a28fd0e3527f3d1f578815fad903de35a95006d2d21a1d7671db4112c6a2d9c28a1486f683b056cf57583bcc9e0dbca53afbeb77ebb597221ec1c2ef06575577ee6613c0ced8cca81c17d387e4d0b2101bf71b78310b22dbe59baadb5d091d8a768e618a597e07724fcdc574d6d3263df44c801dcba327686e70e01cf33f98c3c993569b4c2a6ff59783f9db999e81f56c0301aee1050c9260484cfaef812eec907ddc3dd0656cf89d40560458b92c002b2285729dba3b21632bd6bf795747cb7254dab60db56645080cc63639ad8d26dab4f6b225491add212266b1bb4a4b2a1821374f2aa5c5a281ef31ba64000e2f21be3bb6a13a138d3f34e41adae1a2cf29ecdd504fbaf1d8b0f27dd9023d16e2a74a3cc63a168cfb686a384001a5b5824ebbb301a67e52af3c1c93d83be90c08155fe12a1763efed42ca4a6c561cea0d2f98a1a9547850eece765b02368e5a691206122962aca32c755f02e501d0aa37738a8f928430545f0d06bd9e1cb367cd4746b70c40761080aa2e49f52b495ec7c39a65025c2fc4c8a2d6a2f314e19bfc5b27b81cdb4b9eb0894105e2fc0d6c86c6ce0b4204fc0af234eef04a479f5ebdf7b1fd9e5bb2b586b99f20f59ba63e3c25306a9aa51f8ca56c5491ebdd7518dac3ed6edde834bdc8e3508076319c3ab087c868516721b4a8f2126b1efdeb311966e2f420a8581e3fae5d0fade575caac959ceeb17189e9c56d30682bcf8a1143899875aec6a640b3c3cdb3e1e0bb55f6f7b7e500ecdf92c285b46f597cd92120d318dad068a68cecc9a8565c49f54357541e3387ffac1968e3a867f22c61c777ed690cceb7e168b169f6df6449acfb9754dbc28ed376e57f2f133a3c06a86c117e93f2f0dade3dcb4bc036420867e77ea0f4785d8fc85ecf10fecf80333879b72f9f737ef9257403160e433eadae6ed4e0743f3b5c27ec1f2f700e05db99542fa89479bf3e3f731f72e6ee9f6109f860bb60fe72621df7393471df1524516741907aebfccfb3a4e709521faf4b01edebdac29d48c831e7e3c6092af639ea19b7905ab07dd4096e258059beb4941db63de5a10306b7ec24e68d41d7f140ecd1584f3bb28a76ca389f8203b3f763e6b91e83061af356d4160a3320ce4e62ddf9eb7625d86bdc7d6c1eb559e6c0e1e35f565cf8c959ce7326165daff855c647f839ac200a6730aa716ac1623f57359c10ac197ff87e4651bad4b5f53b4e95b1360a9a3530c797d9af4b4f27a703899935ea62a38fabe7f43c0ae3fa8080f6a41b25e76b33d43b938e8907ae040d026334d6de6d7728d9e612818fc6b03412a70f543ccbf9d3445f76eb900140bdca81773936e4963d43afa6016062b1b210427a5d415b6b0fdac6cf3b9328415b097b64da1211d5324dd55e52fed56d4219fdc4099d2571cf234f013fb729f12fe6da658318fa1c4e21e2a43b1227ca2c55615520f931f45a4a8274c0a50e36818a24e1faf3a954dbe45edf854460b2b7ebf5956afc85daf975e7908504dffa981de440084926631fc1cf76f83b890c2c0441edaf4f2b0df4cd07be587da224bdc69fe975c3773363debfd35ca0aac0d3c7cec3b6992b7393796964ffb8619c38addf460908a6abee63b55d791ac9b5f45d238048838bf61ea195ec435c234a51fb2bbe8cc1bbb20a793a7c1752f0d5d7edc98d2db5557ddc6f14bcec11f11650d80cb9c595bc32fd48d598fdef2607c4a046502dd691ef16096d3ec281d2e87c6b099f7d2db31210f70e19f49a7433029e24330f8e4536149728d88d52cea81eddaad97c30a73a8bae6d68c4fbe041da0eea9d9d877b391e42cef4142ced3e7e5577cd8a47a191b6977beb35b9751a941821f69d663ae07c31e6f920b83892e4fcf9e46f1aa801d8d7bf0b0e7d38a478e650a5d8d68b13758ef84f799db68c98fab786f250c4723b99c13019ee33c8cd9dff14167d74ba527e8c5ee7846f15e176391cdd91fdca25030ac31cb56d6fdd68b7aa1f0300bd5c2b2b8d32156c130998080cf6875cf2df3d212ae079ee7fee6dfecfba113404d8bd5c4621f7b470568aabc006d8e8d2b1708ecf2de3bfe249d45febb14f1a78115ca8f17dd34f121171aa9ed42caa52e2c4da18cb9be77e36c65f66ca64b9ff4e2e96f40e5046e381788e102a2ca85bbc608c6f81486e3dfc6b88a9cef91982d65eaeb89c17a0c9f0c4de7dce7fecd3856d2c3b18925d05e5ea611a84b543eaf21278a5efcf65aea480224d89ce7ea4861243e45923bbc0376b7222b6413e1dea737d24ce219e79e6d2e3e723c164b4077858d209a090553b18442a2a44120506a8449b03b55212fee2a7b564ffa8ed50c6f36cf3b4e4ac39175e98a967c8898ed955735432896134d9f91e14315235a8259c1cde05c0ad799048d5fb526790c93039158a414b4dd0df5e8afafe687659bddc4a913b2b4042ac8b4ae8acf70400d277e76d89a1c0191b6061df0ff497a9b53a5cd5ff2e4dde92ae5e381d81cc7bea9753c4b392a258b6860c8b0bfd80e1363fbb72f9d0bc936c3978b24f0bd0829e22c0596627d9d6d858f1c69b8c19486771cf30d01975aa5fb50220e7a0f85d169f96f24b674ed8a75f795867a84a28715b00d72c11606a95a9634890452c537b963c58095ae9a94e220c081659fbc77b82b72eb7c1661d369d03f2f00454adf58f1c5349089390f32a139f51a7146fae705afe16306d0969194ae8afe458b4ab139daab37a32d4bffdf4e6bf9b7d6632ac530ff4665e7857a6a0f176ee20adc6a92727eeb7afbed92519a2093c1ef42ebe0829f76c22b028cb6dd4ed2894e36dda2290a3c7f396692ae89ed693df63ca2fe314c7499ffa0311195abb9c9d9dc92df6ae79b3e5a49992cba1cfa6a9f930854a970d05bf9d10ff0c4b88522122022a0c4919826c2f8fe729729c7f6200854ba77c71a969e3791dae6ffe5009bb3f59ca292a3c728173b06adae426f4bef40661899a3c851263f3688dc3a03eb0a843991555eadee06e76f5a14fa1457ca240e08731c6fa73f80aa06f7f4aa749676fe2d642929895a8c0348f87fa3f81ba808c3ddd50b24e60e9bfdbdb542bcea1650b34983f87e748168e6b3139c917624fcd7547e094ebc3182e9a7ec8b48681ae7ef700f6952076006bfff864ca84c2340bf5178188914820547412ad29ba2cd1a1e721c1a9875c07331181852c1104b7ae86f4387689178898303c0c71b2cd56decca4a7ab631fb24f6a77a3d6064d601ef0860f461c59d86498a6ec76b68ac69c6d30b184fdea8a25d280c7b0abc8b8c3fb760de08f36991f72f8551f0e8ba842936ee51a9de3161e1144f8a2479a46066f6c3a2d2dd5523087d9505401f9843a06054d568a32dea2ee6d3e9424ee924d130f9f133d5f8b019ff2e3fdd8fce3eb8e9ef1200e006a1a32a0a16e88ea2501b008437b06fbccf982eb1903dcbb4bbdf3e1d7616f7543eca5872a18bcb6868b0efe2f4ed1d29e80f76bf74c525f4718fc7509fff6b8f0820fcae07a087b3d51f59a6972e60c88fec71a87c1850f5c6473038fe4ebf2f9433811cc7db361d3bd2d84fbd18dd013dbbaa2d04abcf414091e326ff6964ae796e803f407078fcf367d63ec520e46c58098a8dad03e36f66fc5abb31f3ee940e5e64862014a2eb923afe045dcb097295329d7ae3954fc8aff321663462df68f97fb891e54c5651aee89a20d59bdebc4bd35d4536f466e591f2c1a8553a99a5914ef6e2ee6c05d79fed4524cb07b692027834ad1585cb6ea387a5f232dfbfd28c38a9e9ca1833d5ebb57970bc9333ac4f7dcdf31dedef9c5b3e58e44be6b46830e93c2706c552e518ddc1a518c2c853897083b7ae8136273f6354ff1ed409ef35cd481b02e8058dbdc298226e1b073056dcf07b45d44167b6b324931a2c42cff16138466d14ae28310087892b0052cb2e3f9ebe727b9406579a3250cc53d192fa21972993cfcf5d2913ea49ee174d7c75f4d8e1c2dba06ba87528a8a3ff48c0b69aef45257ddb84fc896ad515c459dcc4b94995b578f9001ff0521b4f631ae1cd399b2980a3754821bd73cb409c0a54a0e96b3aa8d7f07c248859291d33ca6e949a453733d50f0f3f3c8f8cdd02d18c9101b8513b7d39386ca9a8429be5c9dfa319580ebd872b52bb9338aa69ad31dcfb9ebb79dbdd45bd3ed0b9f85a0dabbd8f435e009c3e3cbb1d3de99474dfbdde671cdf05087c7883419a28cac5ffe270afb4c1cd4e7eb590dab91ceb6d3ed7f95a08bd835fef7412eb625f3a6e5100a18ada2db552ad487c8a716d1fd12f12c65aeeb185308abaf4b2c5d7b7c18588b8b71fec69275e47f6931344924f44f0cdc03b658b38e2afa12e312cd35e21ed3eab12a8495b1656678b0b2de31604e468407b33f5b79bd490b440c91d92aa909bdd4ecbe66c49d677d8c59392e3d3703e523ac7655afacc4bfb5126e71d842568d420d1c0b98d5a7012cf1022275526a85bd67a5a91a3f95b59fee0c04d331e2e06255458e1354518cfa42e016efe7a4ee3fae735da1bee1756b66149a05bed4419e8be2f61f648ba45d137c11933ed8a80f47887b2b70d3887f432e3b553155355d799a4ca34b7dd3bd2d7e1b499f2f3997fa8d0aa29e9075454c01f0abd18c4608e51697865251a083598d3cf951d12b3d912a13ed9043c4234b36c0efe7a2fb0598fedfb2c12c93155d517d8b9de5066bd2069df48e12fe830674b409bbbedcbd5af92d0ee03835dc0174e5e7cb93508887cab09fe025aacc4764d3e295097298f2af8882f69d0d400f9b7df6230593fc761d54d6cda55066d4ae2560bdab44ff2ac9f8f64d83a4aa4d704c9eec60562e68a892819eba79b975f9b26c7acbdb58c8ef85522b118080859b5ac870cf2288241371889c8bac2df4ed83ef1691bd0c95c8387ed96f2b2b7dc4af5df5787e717405fad30c41712a18339fcfd726748459fd18639fc62d14fe925443c483f2511e26344a39035018a8730ef606b28827dc352de7c43e0ca2cfad506425190691eb1f27d66afad25f6d54d94aea5c7f5ce51980f392fe523cbabeaba65f624397a398db5de64e7e672f7f07b5cd4de38d3e5118704f2f864c856d6df3bc8530cc0e3859c8f626dc98b59ca01ef5ad3b21ad84fe4444f83139f9619f3282aa5698f3a8a800e2aa755bc952ad6caba31080fb5a3859b982da6bde43494bfafb3b641c90d0ecf204d016314934893757e912f07dd095f6f4094afcba71256c9d69964f96da736e597633b62a405ce1f24e3e5392cde24277473e1a6f21aa20bb68985565cd7f9dd4ed18209dd6cdf19cc76fee443827e7331aaf020960c15d7bbed0f6a3b1f7c89abf2f374900c4ae7cdd0a8738184c2b4f0d057a3137526d05f5a8f9f98ec237d673dec3d7c52962bb1778e719753857f4a5a84b8fac4696829586280e6dca32ae928f8bee2ee45380fe21d68d58d5b2496c003dcaca83211a24d4498b55f6014aa3a9583741dec9f4186d1b3cc80a8677e976178b96f256f42cf925174f2eebd32e94f25a08fd0e3ff0c580d0cdbf19a5a470a3791a7b7c39345d845b625a3971bcb721fe8b2a69880b8fcbee6fdcb5fc2657a73d5d07dc10c5682efe9663344bd47cadcbd14e21f7f334c540b74aa0a4f694ec7e677cbfa26682eaa9f32f218afe4a5d6be24f7fb62f1d366eacef22c49c8d3ae541c46b179f13810482a74b55c28afa83c617cbea47b1e62056b48584a1ac581af2c52996f883bcb64ab3f9d5a9a24cbe858c4dbec3579cfdbe810f0d8c5810c482694047fa3a6168533c72323afb1bc128984c582c7922adeb3f0a87e5f8288bfa96fa532ca138c1a628ff93fefd2f37b72212e00a7e3ed9e5d4bc1a35f6691961369de2161e0b6a4a61e8207b1050c63811e57fe3ceb929b52a6eec02b99b13bf30721b411aa00a47cd75033b9d4516b54f0e5c41d15a4462286728d7a986241c6cc12734fec04aa656ee61c60ad7d035c3d4a1abefebd3f4b5f1f4392ef1f281d2d22e773033d26ee39a65a2c1ce9cc1558173aa90327d74bb5278b2b0a625f54aec57931ac149a75bc2345928f22160ed5cfcc51cf9ebe921d3dec9976b6681bc58ca0f2232585aa8aef973a90a081a73ac6484fb06c45bcfbc4b074b095d2c105fb073b24da68eb1a6da76abe0f8f7cfbad36f9521b1d3ac55e9f23448b1fe2e47314831dbdc4b5ef2ffec963a9a00eace700f52145a57a2e5e014bbef0afffe58741507a4a19997d9915cd1e1963caa2f63eb9ba666f298b658f546c8123869dca2629b709e8144a4b84fc69d93b4f827d58bd69e7ea9770e781b3f996eb05519e2b857077a0a4d9c9b4cdc35396ebdfcee786dc54986253668100c2bc96fac585d9da231de3d9a0663db7b733274dff7d539c6e370908b76515c1746c97e54e13a9ce4b57220142d37840b1d23ce4860b3564bc09acf91155b85c6b116e437fca23a865cddbea15840d0f4fcb782de7faf586223704c205dad15833659a93bf1bd01eeeec81c2acea6469fd8949a8b9bf2c675d5990e1e947094b59b3ad64a07b2788533da4498d8906f7279621d35fea328eb9fbe1d7503cb88c3a960724b88aa27b3f2bc3dd1be26d1d6a6ca14c6eeeb072c4787820bf2e77b1728748525bacc97e1f5150fbfc892f63429738625b4f2e9a0959b44caa9ebf418e01d18c2e6414f75028ec3493ef966f2c8077b3a98df59af53a36b986f007c2e990431095330d7d9e2cf5f566786a77a4c2bfcede1dadcc14746005f8e4e9ac11ad1dbe24bc2b8735d7feed08c5e43327c890f26d90dfc3e3a2d0a064cfcd6392c2b1b35141f79ad3a46759ef5acc28422c9bfcdc69e408ef5009175f233b8ff97bafbeaf76ea2ee43cefea8ea96aad7049311caf1b530193d669e94c71ac979232782ea3cd8bc9d3ebc90d6b3448592ec8d0f05a27b5547dd07374b15da9010971ab81b2b844e24f4bb341097dfda1fa062c067211736819b8c6782229a952cbd3aa6660c9ae0ea2d71f13edf8f32e5e8b82cd6b5b25c2d419d3321388361365b3053b32644fa57b086cf48d47b144c8e385c3ba7744db595e1a5109dbd7b943aa3c8ebc2a825d347a3d616bbcc08bc5889577f3f84937f6001c437996f6bb0223c0bf428eee8c6b8700f90dfa9969d10532588c50bb6f569a4987e76c1baf1dba326b8a03fcc98cc94819f873b47577c40cf4081303c7d7a732ace7adcefbe2c7f201e72c358b14bb83429faaaa25265f65c8ebb1caf815916810defe89281de79020de5a1147afd833117811d30f7921dd459baf69668cf34a5251b0c2ca1b938d36f42028859aa9e7f5264bc77accd5e408bc7e77a9aa4759ffc4771448685659b2bd10d3db719b026c1ebb001dadc61a70b2a17e27fa083767cba3f62980aa76329daebbafd13622f4b5e2156ea88cd11c12bad567f8b03328cbe9d0e3f10a73251a5c38791605ca1da0436fc42994a869512d25e022ca0dc1399b3d1e35e0c108b7abe2dddc845845526187d4cd7820f6f26ad83704c007bfb94aa32ecbd7f05bfa004334713c5e1a30cef616f0a1ab337b0674c31b3cb172bf7aabac2f5a81ad560bc21390886bfaefee22e12f9bd7bd5f82742ad29aab98b0adaefcdce2e56b5020e801a702d265d44196e9f6d116d314616eb4c7644670315635b7510bac247ce23d65213651e9825bda87d2ebe9434e25cd27761432b7b5f6d862382f364740b23ae49b9d4b047eaf66514046df5c413207c94b44c0ddb311ff73ded82462203368d662a22e353dceb2cccb7c69aca238a730d350a140bd3a1362d190e703afc82fd132df8c0a240c5850d0e708a2f58c33e48ad2248f38d1ccb59ce40e8a53f3285b88cfe4d1d61abf83fd214cdd9fbf365afe33fb17ca7b83f2bd4c0b849146caebb0ddb94ac86c60ecacb596cb2534170a8a107588c689c1809f235e810c258fe8579379d38f63e4e16c1e86ea1aad6e89dad22440c19f1e15df2477ee19320ff7e97bc6ea7fa3a418b7c68db8d46da55f5d0397de502de1f8e9a9f84a3cde9390e311011e3dae26d92c382bb6070743d18d2f40cfd6b8c5c04b3e50140b9de339e0ddb8ed2de5f5c9160de170170cc2a6e7bfaf83e9c221f2704c1fe9f9f247594f5c6eb5e4ed996f21923f6588e0ba35f93f4498fdcc9f15f57d982a8c7e6875aae78326e7177a11bb7f9614d12593153e18908d775a9591472d89543784af256039a6be990620776020a5fc843dd5ab22e623c00ade9dfae1e643f58fc783df2bbd49cb9f3c25069c1fbf8b16bc0a9e44226edf1cdb20b95232589cf9999f0959dcdcfc5e2be025ebe7734f0d029a351e57e23921c2b663149c57a9098d593a6732e0bf5a57ea7bcbf241c6dba41d261df12e7cbe47d77eb58e91b844153af8f039e5931832bc6eb8daab7117330bd7df78940846bcfc629173b7291db3ccbb716c6c061c6ede853f0b20ec2421dec0bf78c37a5fb4adc544f638aa0b0b77086734e486db4eb945cafe427696e30e875a5c2d316da1540d5c809689a06ed2564e4ddf93d964e526e94e70cef40933821c9d41cbf505a7a124ad41665260672b92f1bdcbab33daaf16564c53a006b64792d691a89a73e13759d6c9beb5829dfed1db2f8ca55e1254deb025834f6e3f5e3982ad65a25eb9265887aff12e37ef56876475556c2624aeaee6acfc4692072c9d1be571c14897f4ad5a64ac4112e3b930285fc4743e7a230364331d1a34d6392a1cfa5b5ba3f638b4a9785e828613ad48811f4832098b4888a368745ea9050a6d002c90f6036c592b0f6b866713e7894d29645f4a19e0858b3ebd8078711c26d2601ca104d962dc6ce6ae92634ee7f3ca6baf8810e2126097a092cffc2f9414f6b74b0a2cb86238f6e9c220fb999d732cd251411ae489704a5398c15e27053b4660284ac202e305556336a0b476506e00f80a18eca3ce2b0fc22fe31319d8204e0544d1595b7db804fd8ca02277d96ac3373a8dfaa258f74496d8d3bf5a955a7a11213c77249ad78213348daa2070f0003a52fec962a26ba52c13e1b77bc540571e3dea9ff0b2da694ebef7cfe2cf74345bf419dd67330e9e0c71bb9fffc0886186fb7a38426e37070a9c4d08313d8ddc268e3dab1293568bb262bfdd494f8935d5fa59d48c2573f7c14d1be7be5393642491f8b7174bba1ab8776d040aaad92095bb17f9405127c81d51d2f2cc9a3b68d0afc985c7b4cfb789205188967adede40ae231b01a9b8d4793b009dfe89dc56a5283e9bb676fdee9eedfbff8f2820ab615409ce4277adc96f79336dd69afcba2c9ba66d55fadb2c8440cabd574b3534723d3a6785538cf36a9cd9c6b756130fd18abf8f48c8ce0db3b95c66814c92e5fdda438b3cb5cd0ee506625d4343c5c43e75e855e1696ceeb7c81f6f8fb4b05c5ebba3bdeb26e46889467b85ecdc7b73cddd9f65c2453e5bfaed825cf50c13f42f41d954131f699ca1fd73c53698aaab0a3263436de4a8d217aa33a333cb4449ea0d63024717d307d96be9bf92f0e9b66e14d26346d032fd788e91d6de7ab7ca199ecf2cf998a7569a424bc9948daf3273e54b39ef90631aa7fb2b6c5782e4f128467c589d2a6cf55ef12877adb771bbb6245c5bba9dcfd620806ed8217c525bb0c50909c4458a60a1f8fe4e6116b79eaf62743d4a60cf9c7caeeaaeeeef96662d7ae3b4e16286351dda4bb231240777ca2031431181e8fa06e71d54f22517ad08d89ade8719e6cf0d158f47a057d7c380de0221a269a26b79b9856eede56c9cdd7e9d0b17c432aafa2b3773312abefe7e0c654d7f80925d2fa6a1513488ebc215dd78bf3609e0558f8bd2c9663513a51c2be92afb7f3f6ba32effa068883b993c65ac6f4443866b17d7ffceb1df7c43e5ccec4ec8bde0037ec2fee0ec7bd29ecba7b69fe5197b384d700cd796b26f5765601d2d49b54ab11d033d7742dc375f4e3415d57ae455697ae488989736435c0575ca5b010dc5f0f85029f81e11c0373e6b4884785cab5b2ab6016635d3cece607e923c711ff84fab4a42c7a0c533d316edcd318fbac3a9f754f5e4f523382ae0faf3563c743829a042268aad5ed8af521c226103a754b25b51d47957ad35fe117b6c4ca5a33c2b71e83395865745189a76d6a796aac520b13d3bb7cfca3ec47c607b645f154aa19a9cf89cbe370fcb3a9e58599b2dab61a3678a14d002b8fa7c5a9f51cb430a3874e0e3f4c7867f23ccf3361b93b86df1ac714e051b0f4b1cabba46797cc4e16cbb54943234ce39becc05ee5202d3835d36db062cd3285bb795101f6fe613669ab85887d98866b5f8a256ef818af79200cd1520e0cae66137a2fc789989a7106f067d1d5f34f88a6e0a56c84e7e9cf088f9b05cc554d202395fcfe07aea0865362022e337bcec0d8b4e95f70d604c5552272ce84ef363a529461ae5a889bfdbac8ffa67f792c9e5dcf984fa42d28e06f8efeb71e23933c073d05e0696eb25fa1eb0541a13590a79df95b4407347caabe9ae8c7833989afac5a919c1ca80d327294bd0881f7236501f9da47833329aaab10d8069979421aa8b1ace85b7dd5019489ce0207070c5fef99bc5fff7156689cb6757d492ae605630bffce0e3732516f93e2381cac741dd09faa9564372c6dfa5668337c969cf8452f31551d1c4bac6b799eb0a63083280dd44bf098cdd3402eb6583018038d7cb6e7eb8570754999f005ac748ed960070c004878847b72699e9fee7d06bae1181ef9d567f08953a166fdb48cbdf0344237eb483510893271b4d8d2212f03bf55e52e960283a2924a352a5dfe1abc2662f55cf430253e3adfd72bab247a254fba734ed75f12062e1fc55450d48c875feead1df470a9e3b33b6e5e228fce6abbcf30213f8486fe4ea57f423516fd97076ec9f4effd86c0c40ee33ade691518281c856e777bc5d21a66c9beb3ca5436456ab0aa8de0a21d96de9d8788ba3678c02ad8ff264cb9cabbe90c8e72fa79aa416bca077720e7425036040dc78b19d2ab80929af5fd482e59b6b17b1bad533b24f87fd255c53b761b9b809344e3a66e11a61c088c985c451b561e4d56eccc33169a37d5ced888031f9779e3a6cac5931925dc119224dc582a50bdcccabecbd83ed85ad68b5fb52f83b157c396485e8beb843c7cb0aab0afae2cf5c0202b3974c53a509e3465aa43707282fcbc66599cb04ba3138d31c092ce732df0ff3bfc4dd24881f570ef4f860d606356bf2b9e0f9003799cd2c1f449b2accf2510f7fdab8e8b56a2e7078c428305609848a0152cb23325e02662341b835f4227fb6624d8218a356f42b449bdf9e9e28cfecba73a3f6311a7321d68526914eebe67905a1bb2cd872229ff6e41989252f88ab63a835e1ba4b99df978348b543bb2fc7e85bb69ddb58443eee314878a16a59369b74d38e446dd10ff4c0a12a691ca63378e016f41255d398c907eef59985bc2ea07e1f5455fdd3336cc1b259358cf44c35e35ec814175b2de5dc9f8853ee1bf431087bcc7577fada6e1b1eda2f88a462bdc9f0726709357ee333bc9987201317cbc86b5f0978c27577112925bd9c01276ef86e9b71981d0c3f81e8b1a9b81c09bf228094b85cb485265873b46633c50ac8134babca605c46596b86591202a15aa9ab3e05d8a06b99ea65810ecffc5a7d679efa1be7ee8dcddf35280876bc4d8b09b7061b00f0321431bcd3ad41322bffbbe00c64409f1bf32f9330483e317b1b6dfa7b5cb7a8b294aab2ee186091c41233aaf52d6afea156c8ea5180ef0ea46c34da00336346679ba40c22c8b477bd556d4436dfcd89988949ceee4affa0742dfcda2747aa65cb89bc1d2446a3707229d74063e3fecc8beb00a5791ee69344b1247f6301e37358ef515a651ab3f87d1ff023eee26533d5fcbc0284753a63a0965a3e55eaa4eb8a5d126867ad7c9c589856734 +MD = 51aa94e4628f5d2935a5a72e83e3fe338a8f741b65642f0d0b4539421bab40db444bb02bb29f81a035b6dcb750071624 + +Len = 70552 +Msg = 9147935b29baca430c845237c5d628964e9039e3260719b3a305f7ca8a12d181ddf2e46bf46f6737cf5978d8abca57e4d3aed23ab98300e8455e324c6d2f277906457fdbda15721ffa37c24d56b1ee378a78a917fb348a742344054529029a59b5484cf6023355c1352618dded1257571bf5a6c214a1201ee4bf58ffe51393eb91023403955177e5262f62d29876f90c2d2eb2822b5328af31d713c0caeb78f5437b1d49baf740557859887281643c1e6829b3a168d00cf0b1951fd10011b24072bbf1119aae18d8d1ad7306cd64885476f09365f4a232a60d00627aae0daa94c7cb96a35cfd6735da3109d5a7fe4577fc8b3817f750049cec21c502fd68c7b8eab2f6472a6d95353aef332935bbdb4fa5008cfe9863e899f7fe30b314a970768278f74529850aa099efda489f22b3a41659756400624864d6a18cd31c580f94372683e483cd2f3ea138e47b0ebc333efa9edd8f57d58bc63012bfab3cfe0bdbb3c2816e60cd6ad6f8d13b0aaa0fc4e5f7d5abc8c4451987ad57b3839d22cc139b57d829e70e243246c5c53d9aa5cf60b508c7576f395a6ff67a4ea3664cba049aea725e4117c61834196c5c0706ba78dd3e18848139b645b3837a52c0043d75568536549570b65169d716ae18b8eef51780889722cd95d38b781ed9d3d3bd30772f0c550ca25ea58e07ad7cf645d49f0ad5fed7797e5fdf27632280c640a2fba6f1dca7ce3425db4baf180ec835d33d5f45638eafd37c322f4b6d8fc1d4549f8bd28e9302ae72bd47d93facb70e5299bed89d02eb5554944a39e94eee153be4cdda0b61d199af112b8c0a9eeb5abb79cd97957b568a4fcd20347d05738dbf9114113959627b43a09ed1612b8ba075a63789334318fcd6a45a4411fb78c449700a8001c3dedf963249af2c9dbf69e8e8a2b660a158334fe2a0718e7926413f47552e4be66c4a108fd42e533ab13c7c06b72702dc3eb6244f99c4dac7a48c0bdf9d23000b3546197ee656be4b86a199ca1de3023df40dbbb3ee44de2d1b2d13008b68067a605a19c8273056176920a7fa7cf2490c9fc07ed647fa82f3b3acc171c604477b160f783541c301e880420e5f7e5dbe916a57d3804aecaf6093927cfcf7ffaa567feb9e8dd917a804f38e36c1c92b48137b5b2478a2244bbde467ab67c6621652c278f3989a3534b4eb8d88e80564d1dcfa54d887f5aa3f52cdb1b87bda3475b8083ee01e29248b4090c56a9bdb11403210c85775ec84746777fa0a00dc7daed078c4cbe631ec97f009c045a4f2397d5ee541090a2ebcd1440ac909be7345a9e23b921db958963e0c7f0682c9f4e46fa7a046560d645a3d31ada71d7d48954e3678303f5f46296adb191d87d3861a00576960a6483564a275881bae0403748514582797a0a4ad02a6008fbe8952e417b56a1561814ae4e759c4ad241c4beb36c303fd8f441a2beeb55be48db500499c08c8f0ef814ae1f42589e5e78dc801498ca03d8e124fa9165053a25e1d38527899ae76b810de64b121fe4c5f1f23bea6b7576cfbd3ec3262bf1053988aa10691b0423125f5ae7406944c69f599042a358c5214404f98cbba49b97ea3c5e36dd094aca89cfa6119dbc89ac40fc5124edf52b6bcc44efc7e063876ace793a78f1d8f156386e59f5b180311e61769f6318a53aeedef98c0522ed27164ccbf957561e7a5eb4c7f1243a58ed956734e58db1fd55f2e29f48b501a60cf2eba0f542682e583c7549060d86ab1199c8d3cde558721f407da2c057eb229bb92194d8daa6ad1d87f08e031234fb3fa41cbfb33a6a87f93006a06d7e6df775b19513fe70afff3cb9ccf362e2a3ddea3cc9752fdd66c3665a2424ba9908790d74acaae0b4d2b9285a5105cfef71a783cc5580ae5eeba909174c8c3228293bd58aeec61a07bd5f82d2235184a92d0caefb575eb92f579d33fff6535ebc6ec4606cb20224f9de56bec9ba533ba01451ce22358bdadf3934899c9816aac647873082cccb7c0b94234ea99c875f54e63b63d976848ddf1ef37c45c852b0c62218c87565ae99adad69b4ea306a5a48110df29990d54cbf575e8eb40d73eb3caced8aad33080850588e74142c78d6ea036e0ceb2afa81e0a0da234fbe16b4aa467a09a29b8442b444062eafd73f3fcb5bc015369b60d7f359fafc7170a7c79f6d32c7ee358fd319ee652725c72a0f5c78a8ae0478b4b96801355cd1cb937e7cafcc47f867a72421c630000e72c5c02df88c39fd3942a0af251dd6e9058663d27c9b0c59c856c04c49db4bd270aeecb049ef4b6953a728493428fd1fd4ecf2216223777ade1b31fa07db6d0a37220f73eb4644d15e5eaab6cccb21fea033b3f9defa3bd3ff50f3cb8eb4d62e3cdb82f95b25c8ddcfe5b2884d8907fe0df713cc7183ac0dc2b480312d0c29b70847f1a1280249d71eb8da2e44f6f1a664a3bc0998645a80bea251bb8125da2d1fd3d61bc0604a65c1648c29217981804ac5f731d1f0b9d559b6f2db29b66a08ea2baab9c2d44d026e55430981a53a0426da6fe5accd6c640a4eee0065125bc30dabda1b8db2b4256c27893fe3ee7daa9f5d8095876ec4b566e6addbe1ee21f3e0c10eb1af9022574147d93ca6d9eefc0acbd3b200396551f61abcbe2e9e4f040a27930ca7011a008432cd9068ebe070ffb1c3db95d1c0c22e57853789a7458bf03c118ce26a0dc9bb74b0db98990491f48bfb62b6ac697e7639b1d8a18da7f4297b04d3005f701b4d7a2d7ec465cde77fc6c4f7f14dc1ef641dad01f4d5e8c51c60d74f8f45e36dc0dfbdda6ac6aeea080ecb0bc41a5cbd8e9fe14402048a874f8a2382cda1ca39ac11ccaefa501a0203b0780eadb6ac414c1cf93f479dffa3495353ed6a17a717659ce44cf196a1c8194846812c97331323314f243406cab18058f31fd30c0c8f83ed9f34feeee8b4af52d0f3af3083bbaa697dc355d37e2a9b078b7aa6f36cfa9d80581760dd31504c5c81e6d41710a35821ef7d3b988c86dffb778e44623af108f1a934d5e61e1366b1e3cb09bf5c52b2e72eb243aa785ee58161eb39dd18fb6ccdfd4dac9e2186851f7120de9de9422145b6130c9db40b4245b4e1f5c869821f51de927379ce123de1b478b1372a0a49ba001004f6e2145cc4fb2316b8bf2db749c7d3c8ed865ed7a51843201fa11382b0b729bb2a6512bb6baf2f0b228c46caf24361fb8decb518d62710b9cbd0f672c625d09dcccf8ee4c64b6651aa4365a107dbcda9bf63cd47f17b51dca05c1b7066e6953b3273d14f514a5968949722ffd6eb8752168e000b936f97174184fb222f73f80210149271894678de85d9d72e0c1d2f6317bde5ca187e40d833fe2e0e6c586980da044af1faaa5522029e2ac203cb167b2795f70a0d41ffbddc2a2c8bb9fe7a45e4d5532711f07eb17f5676425a8fecf8ea88ac51fe351436ce9b6f20a4e0aabfe50a43a76ba3462b709542257cc6037ac5188e2847d23eb16fc46e6399b96b5d4f15a4e9645d5bfe7acd26f1e7280a6f4bb804f386a3dfdc5427c2db24b34cbc8789ff7398691088e2709d1e26005244e309b95a472468060047e4edb298bf3c22c9abbc747114796c220d20b5f98baa2f6013b2f5de77dcf8a74d11efc4437aa577425a84efc83e6c53ffa0137e16ed856d9c940f2c7fbfa1c873fe28b069f683f54ba4463fbc5667890d02cb0874ad8984bc841fa8f02c902de1e8e9f7a32e52c63040450b614fe2338dcf59233568a0481bf993ee69b2483a3f98c0047f80768c98a4edcd478960d62a6c2a48c99d7e2a036b08375ccf3e9fb55437616f9b73aadd48bcefef9167f34b7fcaf3b1ba579d3b5ee94e39f1e7a10bc1bc98f3edee9376b24efdba066c1d6960c7be7e4de1240c5bb38d91c8d7f0ab57cc059ce62be91d67f0714746f1b71cb58d039fd68f50fed7f36ff4a283f11c9ce251db12d01e09d06de507d17d52ddf4a76d96d2d6a69b6a257fc31d8044b7e79be82f025fa4f49203b38c44736315949346e3c13b976a78c6379d98314e35fe554319234f0036134e77350e887a6c1bcd4a07204295d48a5221d4b12b8fff17baed19f412d276dacabaa2ae011b3a00d1c1918e7034721565b918e6e38c8bea1960b2033f7e1f5ef4d85581919817ca3d57e36a3905bbb05d87caa7ddc654dc0d2871cf49759826595abe479ea38e0e6c77ad22215c29d1c5f87a829ecfe26412bec9b6b55b99b764dc5d5eacbff513eb9b3f64bdda34f01b95a8f59afbdd28a69e3a5807826c98a3b7a345303fe591374d1a9062f275a1eae9c67f56ec8d8055413431b4aca93092973089bdb5e7fcdc17df43b527545d905f538e47147c019b3257c2411cd815bdd5859ac9b474bd4665fddd28fb7989c880f0b100063132d50c0598316571be81fd0306d8be046912b1e6fb42e12dccefd8fe760634357abf18de021a18eea19b98394c6f252f76ada62afc777b098d62d20d5bce11117fa5f331be4f99d7554711a8d9f1ac4e7c839d5a7f4b1b9541ee068dc0cc4f2d882625b12b568aa4402113d23e0495f9c14121d5e242655980ddd0f0438521024abc1adcc7d34dee08c5f935f72c84ba0b42be2dc3d1caaed0beebe5529d49382dd46d05122a660d05824c5483bdfaf7b124ccd2a28dce3da80d91dd8c591a37b80b76da98e06599cd0277ae624d5b3b3943f854fceae26e8d467d394f5d36696fcdd2bdda79cf0cd5b325b4215f481d2a4cbb35316d99b9d70608991a2e0075bb980b3f357af4eea600b1063f7823e60a9b7ff3fe7a76c84ba8ce6d8b202ac522068acf684899a7b497b4052b0c815e30bcc101a2b5ebe221bb393700f7e7e04975cbfeb1870fd097d4a93152a0e2ce531d28fecc947bc01fc9c37619f9fa4f8872694dcfaad9f1b6440b3b64b9cabed859123bda9aa8ba8c3107bb44cac46b6598cd2d01288a7396625453cfdb9bb846ed07596b3cf569fdad70770fcec8ec7735722d048483debebc0f4b027ae843054592d7ecffd436fa7b9829d99a8a2b23f4f2be384378bba5bda6519b1c42d7c9ff2f27ee57e7a9f947e94440a29aaff233b9611ae9bb62d1e3b437f8240deedb8646c9ddd9824b707ede66c37b4cf3789e40a62aebde9cd9cab34eb846dc10d057644e39f94693f6acf201d089438e1d81330df6ce54a203ef2e0639e92fb63eff2225813ba70c024ecea5f650f0f85788eb08fd15b01b06ad7f1f2b8f6b777df9ead05225162c29d0cea3b366f79abd11d317bc366370589240c9dbbe21bd23b448ef1b2a366cb3df7cbb863faa0dc4b8a5ba92b4f14a5049fdb6e8d9e4ffb6caa6d24acf6a5656c7433dfd4f9ac9f4e9cd723f25fbf1a4111066c17727c7adb99f0a7f9934717924dcbb772b3c57d421a4df1fedb61ecaa41359f41a6cad8efd8c2817fc2736917483a48237211fd8fcd6419390e21a1a6f90f10f481609c0f3189ba28ca51e4632e289ad07cbba79d7dc5a58a3f28c39cff3cc6164c674ea56aee5bdbf50a0fdec63fb6621be903d4f1189cd8b59ddaf61c65c990500677184c986b8089c673f1da24a3bf94c49a9df304070db9a96c1b1832224bd2669ed09f30f2fecfac9602308269d13273f35e4931ed1093740373bb4ad82e1dae4b352b5df93f0fe5027b92ff117e3c1e9680bc4856c98b252666cd56f320780706afb7c8862a91983fc2c643a1b0f9ef0c6c14f14b20e9e55e5c15fd7c0b2a9958a60d18a4a79ceed34194f7244eb20cdc8919d3d2fdf4db31bd5ce87ad67c8bc882f3f6589e790f485ec6c39f40b09d8e3e9397f648f53029f16abef569b606dfab320aacf771222683224e1c6e38cbabf549e4bce9340bce600728f6ac2031238992fba79aca50f3177241a2c095bdba1504632ec8f995a773fbce838701351e84da725170ccc039827c433a1e0d9d43068cbc53ce8cf53c900d57a7e2a3395805d416b35fc19b7f2b09fdeb70ea90ce2fa99633e134541521076c67a54c6658724690d450ef084e7ce017bd9e72c0e4fa2399d7ea3bdabb8cafb4cdb845e4a635f987bd2c9f302ddccb38b890ee550ccec16e46d2e7aeb53bced8e003d6dacab4b5a474d91a3aa4b39008e52ea577cf134cbd887f81f98b942b7fa86e46704c59418f0341a54f3b6af8314b61e14cb4328d2da6db50e2c60190522ee2dfd0b58b67ef714a8b977b67cb58f20fe8ff43914967a7cd9e92ede8c3f87945e71f8db1ed6cc7de1239eb13d128e32104b604994b13933cb13188b38d1a9181a7885a359caf0ce4845e14d6d14625807a9980b25ad87312d3e61fc9b6607f7c6731a67e3c604844272d7c19955dc01295d23e453d5e4e3649d93b9206714a206f42f8f4952784e644cfad42e313bdc19c86c6b8bd4e2c905e33637645f6fa5306e4d9ff6eaac7b2226b2fbb84102374d6e0a175a2501508591c20dd3a9698ff753ed007919419900b2a88ea40fdfa138c0556e2b40b128681bbf92faefa2b0b057a6574c48b826845344239de824b8507206d69ba282af2203976d469cabb5ffbbd20aed0370b2219b0e40f28461db48c576f717e4e66347cbd1f3533ad51e3a2328a1d7d42bba6cfc6f7d3e4f2788766d2e361c626cc34dd707db8d44bf37f41fe2a2a92519bdcafa002efdb2d64e6dbba51a35b5867db8d7a17c6134dac1b1f4c883bd90fb1ac01638dcad5a0eab93537419e058b3c0fd30275c8b95b819f85422dba182107ff0c3a21cc9af311e8ba703cba8b6755b9f63020248e1c7cf3bb08a00d1832a5bb194b455df1cde25cb38ec95fb796b9c23f2d9f445a39a4ff09c7699ea1e891ca70be81e5a3d663fb67b871f54fbd7010f6217a8ee55901acb7a711d37bebd51259bc5dcc79b79eae2017bbe41c87838d63343a6cf7259ce00ccf1f166de4797d1c6d627a38189b5e24d32f95e699f91fcd8c664557457c8451681bce407b83f200f81758aba061f1bd13556e759edab07e548680ce60a981cf998e62bc57fd584e8504cc99f8f85130ffb6d8903c2e27bcb22387241e2cbdcb8bff3ca921ee994f3eb23fc9c86864c8c1d93c011bfe6cd0cec4c121290c229065f6c3cf805f9c4849a81a04b7b914cc7e46008ee4516702d1f1968c2651976550fb5ff61d574984ce6ec3126df4478361868e003f300099e3326e2fc0040391749778e59fde884af68da4bb9321e7368f204c1ed3a21fdf2b10b1d09d2c505df8517665affc41e1e88c23c7d146db2e339ca4b249afac1ad212c73865d1651105b2c23ef5ba5c92cdf3aafdce6d0bb07383fd82485f8f93ffc1192fc1fb2af5c241c238181fc1a5cd4ba026339d5f07775cbe5879bbb092dba30d7d59b387505886df1ac13459620f1b6d0aa7dfbf7a68af51fa84caf75e8e420ce9d400646cee0981ae97000a10bceb7871d33a13506e051d3010954d413f267f3cdaeba98fad5311ba438bbdf9fb442b235eb643d2b0e48ac4c522988117d5cc3e157b3e02bdebf5076cdd5b63f5acede7f15b374857d7007c4d7bc2673dd95db72ab80b0d4559975dbbffca97d2ad27873432d8fa8a63e7224da8b13bd9ba986fc4aaf9f76d265e84d8f8f4ddb9cf3fc9ce420c2f7212a77c70af4f4515fee72e895aee0a5fd9b1436ad0bf7cd2999e766893bc30376ba8535b9a82cc172fb1bb21cfd38c40fafa63198f15be4693ac56a92ed14600f6536eb971341a07d45ddf351191c63b11a0ad8f3edde93d45d1303a1a31b7f53c0e97303a4c750e7655626d290e0075a70be671e5ff46de3876cdc25fc6cb40c4429468ffb226549c000c701e34821943a2d96a8a621d52f301f6ea0676cc0616582e0bc74e7500cec6a4e7f8ea934d6ecf4d2037f0b6c1fedc715a162b0072bbb62dbe9b08a93a950ff479c0177c39affa093bf3905852e26d06b997ccb1a93ac6592b82c80c2c7743c2cf7da586078e89d664c72a4d2d261e7fb0924125d61bef7afa8476e4fbfecad790377bf6dc93e57c43b9a7db7b5256a3e60d72a41fe79857d3a9fa7ad2b20dfb65f68117e34776c37fd4ed4b64ef7c3904134778ac252bb95cfa3c16d71a72f5f6c39f304131a473c01de5e50f84fa0ab1a9a8e8a65d0f68407e240032be628feaa5bd8821dad853b09e77f0a59937de96d97d3b3518ac2c253d9b7f0c26468feaa5c368a9c8782cf55e8cb64db69b7c5aaaaeba80dc6acdb44087dc8ddb84be9dca99180185eec637650a7d30648eaea62523adb034b112948ed260dc6486e4ac1c28e05299a0e91fbcdb8e752a783a2250c45ceca5e9c46d2f62502249b2c9bea35608c48af85d546ae5314591c1e975357a0e5db97aabe92c21f7861372347c680cd77ee25ce97f7712adc820d18348dc2b0c2bf7cc8fae8cf59c31492def8d723396a928365748ec484c255f11d0424bc09f7de747386457c8864a734ac09bc9b18e6ce5ed6d56d0715485d6e7980c8c220d7b12546eb49681fefa1933704b767004f0a0e9f4522b740e0f0ebca24da7379e4fff59f84650084c69c44fc7478056435ce192b3e30539c2ec8ef9b7aea2e99c1e36c09fc18d45b8befb068c37ef4d92d9315074b267a8b843de049fd7871f4d1340ef2bcd55208a2247c089c2cc3c388f168bfd6758a9373d8747226f5ec1fb53a4506413b18109bc2fe584911e0a7ea51aab17a9e12488021028071f2db6ec09ea49113ba8507eb53bdd464ceda1ac44c5188a200901f4b90111188efee8685b9b44fced43753134f311979a41e80a939e3a1e75d828c18be3691b64d83eb9713ea8ebd089d86a62e0e73e2323c7dfbb2d7a9b505681379f3c98d94bc4a026745bdda78c8261716689c805909a2675e3fa3ec8588cf5a01e97061ae9c8f6f68c7b4bf8ca36f98d69761db289afed12348eef6e36816a422f791ba6e6ef2872e0255aa532ae860893304c0eb56904ffd670f655923dc967fb6c3f44eb3e1fe299e172786bf1f1280b3ebfe1bdd05484f028b94512c9fb55a9f7dabea0bfc18ede37fb371e072336fa28dcf348ecc3e8aa3fa206612ce75462a354daac79f7bdd8b05dabf2f9037987770d0bffc63a752d3c185f256e74ae4ef61561b874aab8afd3009c90ce783bdbb2b9f38a65a271a1a7821a07988ca9947a851a6bb9c0c88a284cd29f8e6cc21d61477190d1e1252e094afdaeb1168f5db70ccf6e4f23339138aa14c841c658760d214eb913e1d9fae8d7d1c3c1f9a6d0341346683eb941ee8a802bb3f06e430e3dae51af3288d530cf915dedd11f3716790048028f6c3cc6a737e007a34bcb0c7956441736c060f643e06bd5e76f89560e3d9de449226a441538f96c60473a994981ed9c2870c374ce2cc1220ed1e6b97c300db574c5158d5eea3e8c3149d6dc369716e40f8047d4f7dd287d4b2d94674a43601d193c83cc09b4790c1d3ae9fec7008597f3d7313b465b688ea86bdc8700dd5dc63e6ffc279f0070972c00b9268525035edc5fccd3440f49fc2c7406412665ce55ee46cac6a735ecd367848f7df66c57e1d3ff5fc4785f9370df2e5abf454579752ea934d2a9bab568d5aeb22ba43e4bc7df9f31366bb40d91ca822026e4e426cc088081732ef993ff7f676c571704a5b809278b50a3778108f4589fa18caa9f0283b3fad0bd594e406b950329d5242e5e5880b53aaa0eb57c66992055c4ffabc0a72ae712de42add2a321c0ca6808ae5ed490f71d08e37196262beb6d144b11ae7dce9060191c7a5e2ff4eb625816ed6385409921435c7ffe3ef8480f04f69a730c853ce3f7507b8b15f5cc182bb8b2137479e26de5e3a65bb5e77f641d680eb75d3834c3ff4479025f0baa156b55c616a8211c2a76dfad5594dfd793e60a352476d0c127ba613b6a1520cf819f54f21529218d7f7cb85d95e2ca99c4e842d66061332937ae0f8b6c3d1b8183501ffcb800627d9581d57ec3a78f0e21a979bb13264bb41d65b72fb0e1e30943051daca634cb36930ca0d887ec167bcfb318aae6cbfeacfe67bff0dd0862afea46b6cc88cd43ffa2a6803287b8472bf98e856c805a3657053a91969bbb7fbaa09c522205d4b41fead5dd556e130a65c5c02ac98bdadaff576893e9940122748c8d5978c65005df9224200ae20547705bd36e88ac54d2ea1f792fb16de23323d7a3339472491e87c318af178b97e695e44fb8738dcf066083f3ccb5d1669b10a866493eb2c7e75fa43bf34413d0cf1c88ba7250d6535eabab60d1be66964083285d01402ed348ae5e14545b1fb9ea4d6e9e03e82fe9c212c047a894d4790bc37f10c4618d7429be182b3b225a58206fbf82d3033e971adcea31b8ffc417e41ad407fb6878b372d5fb090e6369b757cca2ef4a69ae674e5250a569c7de79b4ce4fcb0c1e96960b3c2f3536e4f7de78aa406cd0e1256146bc1b2b23b3c9a661281ae3614b9028dc3bdb371c6eaad36c52c181cd344b8cea62724b4e8c2ea6d5705ad760b70d6ecd19279827c82aa0190c4cb6a92acaf0238b7e8e521ab482f6ee3a307329b672c7203cdfbebc204d69200994cc8b4795d780677b98250441aeeae075016a333bb09642944b1034e043d521a29e1f6d84ef8a549b8675c5ebe4ab742e72432bd172c46040358d0d638e74bc6888aee1c454ef6d7485d1a089807a1fe32d79463df3f2bf6ae4fb54dd3445016ff0ff4e5decf7dc90fe033d22699f081d9cd72d861d68879ac022b0571c90193e3fdb5a58a1ecc67757d143be89625963262488b4d66ddf5831c9cad82e9d2c5ede0aadbc5a1456affa045b65c70a373e3327fed0084aef2d9fba496852b361553354f091ffb9b1c24d642c200be1cc352ba938e09a48e0a072bbd60f701ce0ada881cbdf77210238bab85ff63d2d40d07772deef74adda3a129519d6701ed2eda458e5afac946f97a7ca9bf04637bb977d4a97027ec10481e710b9c43a025f9e8fa2e708855c20697e6089150c476413a6f90b23a0ce87ff5af35fe2b710ae47d02778f3eac03e35a643d06d78a563cb5a46e359c21a8b3cd108b237cd8fe870d1af4177c307f184873b19007298e14702fbc7adccee37bfb5155bcb65c934a2f902ea9cf87a60dd890f0cd7e369061004de5e25a692b3106fe301a66804bb63b0e71a6a7261b4c8148950f9b161f9adcab851cc384e28b7653a4dd1bc89a43e5e2879ea170414cd906f8e6ec6c6e3a6ba5047a76b6abe3c01e1e7534ba018b86b8bb023d0aaa975658a6d3f08e0eb843e70e9c0252d9c28aaa27634fb903f5b40d9671d869c9b47fba2967361f93acebddedf1e4fe1eb03c743a27cb6a340ae43d945e11f2311ccbb7fb012b857f70c9f63d0c9d2ccd253c28d1534631f4439dd55f3768585338a0be86425f4434bc74bc765ca94367aa202487464ea4d7285761319e49e0a2a0b54a65ab2ff055e852bd245287f690a77ef3c6a123375f31977dd5e3454fc1ed7ff8239c4c0e557d1a64c18eb7aacab5bf1309d4825dfee7d46796a6d8da136747241aa601f2b5e3024fc881c6c4685d570eeb50daad28c3a4dafe69733439b6c17ae5490041e9d2c0dab3bc13f80bf6dd43c5b6aa998f5d7f3497abb2d2875475590e05b5707394cca21d9e5daa282ab85e337650b7750dc9f0dcde06398eb8b93aef5ca002e5d18c1260b8d25f4f518ecabf009b6b8c5d2bbc5880ebddd25c23bd13ce3e8db2f195b8279c308bd413b6f5b2e5b93a27e40ae37524d233e4c73b4c15cb0f556d7d600fcca8e6b478d9c77bd9b658a7fa0aee02cd4a67d0288276646fe3910e67ed8195ea6f736d802c46d97dd2e849556a4b96bb620b3720065b928ca8522d54ca50c6eb70451b9c83ab7b29cbe672ec6aba1be9fc4add6ddb5152e679c116968c743f5a2bfa4320686bfd6811e1d90184a00eb37995476469fe2227e86c7ebfbc624ba1230188ae431ebca33558c03750a3ebb27a78e9964ac88cab64b2aa22c281987ad5e930b8bc2a5585b6b9ed10572c3f617f644885f636feeb8f424d8247789221b51fefb23c15446a1693940ef0af764ae8f5f8c5e4dff582c899cd30a3adc54051142a3d3b75f5dac56479a5c5a43cc9579c5eb89f0a1cfb81079dd07fa79e513a7454bc42b3065253aaf2573eb0df874bc60ed09d6bb1a0793a53c433eca9dec1af13b1ea52e26b31d592a5d44beaef26116dc0687b702bf190738e58e364439722dba08adc168ff082df041edbfb7b76ed1fea78afb4f89ab871b167225a1a1b7e011aacc51f2b10213c1486f77db6cee789d1566f1c90c500d2bfd73ff7dcdf2f4892d89468d7014f3e399514de1b9e6f3ff78a6ff37f11081b2c3182da0642b5068b96d0901e445b59f5e1bab9345602a6cf7cf8f63dff3cbf68fea15d20f68dcf675ff0016b69d413dbc56f8b7b963052eba6b08137f02d4408a7020db76b3807d8ac794938e247f05dd899b16bcf86c8cea01d210794482 +MD = c002484e52f839a2cd09858c4743ec6438a59e861ef81b2989c2c939804a3b04951f97340cef8be565c0c6204e7a576f + +Len = 71392 +Msg = 8680d6336b85e4f0c11f86fffc7f754143beb9b276cecafa70b1f63f89e8023e5f2f149ad767d1735ed4c23b7588fcc56c1f009f6dade0a2bdf5a3c73fdceb3d3a1dd5b85b3d210bfec293f9a9a09848d9f42d1802f4fd73d126c925b4d10dce9cb2e13502ef1ddf2851c0e1a1ad93f213a309c43c8b6a9533ad3001f0b0b21a0f56ffbad1660d1864e9139a649833eaa1965c4c235b6f2f6bf0a001fc6220481a71f9efd28839dd3af252cdfa4ac1590b33ee57bf4a53690259e1d0dfce9f81466b957b0c3ee85733d446216caa8466dae4868e1941606c7f4fba14a1db79ed19ac9c07877163aed6f7b73fc19fc63a9510ee993829dc606a39f5764b73f4b31d9cd53a4c07f309abc36dce0113cdfcc41eec1f24e8106d4c81589de47d5afcdaa30abd62eade903ba12f7734ede3d5f07849c8e66844b9ab8eac3274e0f1efd72a0137d1006c6d0df7c6e263154eeda085cc3e858fc06f12c8b8dc048602b59c978351a233e7c5aa2efbb69672566b5cad3f260947cbb5069746449a56d475b15458b3dc6995c398af949bd3ee4578ac58682b7b77aeb311631c114138b1589fc74804878cc08c61e1593b2470613b19ee11f3e207b293ba9403ecfe14df86ed5a1becac83ae4b8c2b143b90e1f4dd2ad7002646de1c7a8992c37ddbd2a726237498155136a726a2f78b461f274485687cfe6dafe6379207c6246bdf5b5160c97c8924818df5452aac8702da2b9a5c5943d27026064a03bb96ee5f1295255e68dcb4c44170dfd1acb1d017c8d53d8a879546d6b2269cf52e6be8007d696b4587fbe19b9bc7acf2b1702e2ef20e77367adb20475c2e768fe6aedcf727bf6a40af41da51967aa5cfc05069ef5ebc8e88b87b296d2b0720f96dc590eb19806b746716668f3a71129161b9480116c8cba9cbdf29ed2797e25c4b1acc855992b60c37e24cfd90953b5f1c13950d221b76c13b6de87258c704e006135a6df1df932ea70d55429fcc67627ac716ba889cd7f78e8f2da2c780cdac281a014ae84e4a0340ff490670ffdfc2023b94b1523235744eacc1257ba887e9399688c447c622b28921f0f30917eca63dd8d69988c7da60022b6da47c2878bebfefb884153164630bd911af74fad436b106a61b30420ce23376f7c7d3e9e854448c59325a7659404c9076e2b992df9ce82ecadf548a142268f4273587d221d24fd733761f7d466ed6afe535dec557fd6ab60b8cfb893a49290dc797a0ca6a6169370df66b2e7618319c274fed7d8284bd0831ca2e26c57fff299d9427bb0a291814b05d46713064e3c104daeda1aa566b8a0443f449ffeb70b073d5238c4a51e7d7e551b82ebb7a7685437be719159efca64c9c55da2eb6060a0f019c2572025be6727aca4d6083724faedce2cd0b82f6c3d08059c29b0749a039c19a6eca63feaa1f8283b667a75d890ba5e6a5d62ae348599509e78e07c0d8bbbd264f999d578bb60eec51180dc19a237efc89bdbf4a9faf836c324edef31b5c9c47b029d7eef2fdc90b07bade25eabe0d2a610769b42f9af38a8b25b36ad2e3070679c03a4c45be58eabe974112e1a4fd7a15fd4fa860e28d6cdb59aeae6319a56992a7eef8edbf66915ff55f0fe79cf4f48de79aae9a4ef8190833f94638c61f7be3261a7a53c99906d31d60a4646f9a9fb10d714e45a7dd99fcfbb9bab7b21c415484e65bdea3995300576b59c0e599836ab6fd11c9b5e3f59df919934aa445c5ce0b7b22f5170f80d0eba8b763c696a89e2b667e8f40b334d5753f585865420e3701015702eba3932a204045b5da3c1736b5d31efd10f45e8bb6539149beba2479af9f836ce8fc96f53f5b8b1fe930d71b9a6c777cec4f7ca7057ec6847455107a5d7e2d9bd6c3901b90201207ba1df033225b13759e6c9510aae7807352bcd92453c6ddf77d9f8a835bb861d616a96b6897c57a4eecf2b1b0edb8467d1f97875dd89e1be8a4398b15e84b01f5c57c4fa13fd532719f8ad86e1516a10aa28d230f352e70d615389bb97e0078ca8f3fa4c664b0c5447fdb13326c2b1882a447b321b39f63299645c25767ff50bf3c9a72be4c81bb31538e69e4381f334eed6d427b98197d49f00809d7e971103b9334c2733f6e9a9ee54ae36dc21a7ad445a6d5052cc3449eeb2877214d7e41a65db69bcc879fecf5fbb888b35243767d749a76a7b9c642914e4e151edb4d6a6762c706b16b3d389d5e7f609f30c2aeb141f22c49854aff88e321eab4da0713e86a100a0a327007fed6487319a3c0aad9765600d3d97602ec704afecc94d3c5903d39afbf255fe0802abbca0af465f35bd96df82dfd72d326be70594f4fda06c7a2e9fdb98c334b8b247f6c586cd810a133e01f3f3967fa9c953c0423544361f563c8fddeaf13d0878a3d61ed514289114b567af2d57dffb8bc560632eb375b82467fb617d528f8dc259cb2afebcae715eb78132c18db6be1fd6567625bde7ed714b6304d479a4af2bd4566888499b114d9eef1d64caac67e1e112f9dee5f515a941474664e904f321adf855f62d66f76de5f1cd9b71196f9e80467caeae35c749042894c30328d020313181bceaaaaa2c2749d1ba13965b923e317d19891288dcee877e535a98ecb418925a6103de8024dd47b865449ba269759459a40923c0e18ad471ba71ddaf69de8b7e770b6b4fd4727be01176a1ea80b0cfb0c2a0d205d343900d4ccb5f7e9dcd9d3c6363d93fb77176f7331c418a749a440119d2b5de4ea35aafaee9a6f0ec903832ba9fc0f64a64a94c6eb7e308b17ca1d90e3147a0a04494e7453f4cacc2b0fcefe1218afa19c6838e18dc1eebc3e26987242efff36481cf32a43ea8e8ac9a4bd27b9bcfb18211a60ac5fb4dba3865fbc9d03e475d28057a10408a445b26c6b568fe60e7c32fd08160fa8807ea6b61d8efa6d1d634572a160eae94b76abdc0ba31ce136b957f7d961f2b24c5f2e980a1871cabf51f7e7a339c42d07aadde12dacb7f15d3bf0d9354a3dc34107a4f2cc61eb60f5c750a605337a1dff68b04379784960ab886369c6d7d82487fd6e8d0b714e79e54eb8796e57f4015c388cc9960fb874472a1a703112ab1d45c9f6317051845bb76d972686ac1b2145a2d93d2d79ee765aa97bb521039ff5a3f4a2a5a208734e94ad5576f63ad5c4e32fff65e5bed1ad0b8bf0023cb19af6ca05dcb34a9e059ca4955a3166090b335e66660967e74b63835ae01d2a248566e2840b21101c208b0ead0e1f7d22a6b7ddd076f35bfc43dee99db3cf9464498e12fa96b89b89ae65fb7dda07e48c8c9688f398ea6703a06866ddd0e0227accb683eee74094ed9670928e24b3434fa718885932b536064c4722a1a1187b6df8265de86581a250c0f5fc6755e94174dd87058aae1d6e0c2ec344718d3f4845b425c77078436ebb143b6090d67286011829260d72eab81e2e26f5d5fc1c300ae7fce90f884da0357a8ce7920e16bb013f481469e8e4bb4334b65c565678dcc57bf4ec4cfd68dfc7da2eb8f4649c88793a2af72976d2208328bda27b041bf37e5753f8b0405cd3781c6afd3e42ce9473f117f6d2867e8ee6f281eecd6ccd1e3b636134c2b7f125502888dbf90f7288f64c5939ee7faeae757b4b69d3f75605068768c90acbee7d57e6d07cac32510b0b3337e904c92b2837a9623a150d7d4fe6abaedf10e41d82963f8a08df1533c6b98ef82e9dccbda33565108b1b170ba5e4b77c9c5d6b44dd1419fda61a1fe0600845e52f40ef2bc775989b816e7bc9ae06931a2b78c62c36d95e727fe6b81f8200404615759d3f3d01284c4695a37c135628d0b2e95f9d33eef431bbca48b9d4aa676307c53bbfade1ff6b0218f5ef7bdc5ce65a399d5f7f5ac582814f3777fd0da3832eb63274be1b0340dc80dbe98f9f18a34aefe739c025b7adf9fbee1fa631daefb2d2ea2619b91e12fd53bc31f7a74551ab93a7f49f58b4f94d59d379761ff5f0baa1cb9d66c2372b8d1c00905afcc936a4ad4458c3faa3b0a2ee4f4f16deddcc6eaa3ea04c3f35d1b3600ece60a78e9a5ec6262dd5136b182344cb672d7678cbf775a9f97337024d97a950b3b2af7ac70065b53b7cacf679f5e2ad8a64f0b0377d8a756e84b285e7627e2d06f81c7704b313594a61cb2b1d43505e8063536c5627720bc827b9a6e63c680d91d9f66c989f577a212b7bf24b33174711d1a794721eb4d1ce03524d944cee581afe4640ccebb9808983c1334aedbecf0557f50fd18ad8314ac1886237bb98776a0f14dde8c0c1d34a11a7d6639acd5d239c44c7bb926692020860cd18b0eed049b3662a3445f8db2c7c34c4de62cc5b34499ca37a5ee75cc081e4767f5479cc7f92460ff7a3e500f76d70e3036c44300005058b5517e3f64ad41b46b3cfc0d3d355bb747b0111ab728b641c19e1bd444f79886793e5e0ca68a80d23fe484b4e0ea4cd4106880242667f17586ae8bdffe94c2c1f7def683fe4a5c3f6a6e7a3a3f826855ee15f422f9bf0917d3caacec99627fa9c5b5e02bd857444a8f4d64f3c5984eab454b059d8d987db74d84f770a1db2f8c4755937ac12bd981f303ad77ff9660529a6a0cda7e8ecfc2686fe412a4794308012098d755427c845a23ec4d6a072dca6215928028fc6fc7a8edfb291dc76aab97b968e7e135bdb0192079da815537a140b03f15397bde457371b54a7a4ff6d55f927c2301601d93a47c0ea5d21afe459adc5b101c97abba7cadaafd566d8813ed2e4b0f327c0cbda0a8f345d8c2f245f4fc8ef74eba589518f434981eca8ee5a4ef6e0300c40b8c8239c010f1e7a400c39343314c5e6573dce7fac15fc18bc93b785da4d8e2aa8ecda10dcdd9e39434ab230064921e32c53cfb560f75fd0f4cf53b827b47526a32e76134a2ed613320003e4ee7bc547107bd90eeb91dd779ef86cb84ecb89dbb27641ccd56b8cb11716757975127ab80b9d36b2d7493db5c0f548add7fc92f2dcac816404fa89baf9734e17237608de26a12cc8ac89493464ae2fbe4bae57122ab87f035f4495d7e101d6e57f0f3763686f0479f0b8c799910b6b133048a1e4a28283cf6fb177b0d6a7570c1146cfecdaef06ec2d3d808f50f443d5113438104ff3d5f3bbaaf9ece04d17b461819724820a794aea823cbca851fe2c73d9e43d36f1bc95cc95e13307db5f03f82958b06aa6a7bab0eec2c8a10ae53fe09f6d13616582de28dbf82f543a77245da7da3b9aacd66506e9dc5c43074037dfee9a3cd7386df559e50686ce50a73d1861e56b18054f7274db50209731573bf92e345da050c602e71ad3e07e063777b2c141e8ee975a0a822ce7bba46e7174b4c70321c597d42f58e126e66a456ef9b22eb55b244c3e55b94569d672a7d70a9b22cf2d4df4e1a236a4c93f9cf396eca0100b6cc00b457aa08c9e180ac5d22433a5602c404e338308ca82941cf9f57705ce09c2ccbbb5a2c06a4e2a73aea8ea06b97ec4a68f13fb57bb1a8df040d3c367d278064f46d7f49f4840b3b54ca1859bc7f09d889ec932aade59d122af7af751831fdf5293f399c78c3d5cd985071d7a357f60ed639d4f899d0609ba2d313c4849c8f6dc8a51b8c0a00dcde64320d92c6cf3b5dec6d77a7c5febdcbea43fbad68c39f2f513387a10ea78ade46d36e238d5144362afbedd0c8dcef338fbed9882b43b7da516f20741d446a4dceb8f6026d7a9b381069b9dc08d78f52f1a83ffd429963cf57bc586dbc43e5cd5a5737a7fd97cac43b3b6e521c8b18bace94916555412d9ec2afa1f6424297ad7822c58c94553d7b19e57dbb6a6405db64f86068c9b77fc930cd8fc665bcfa9ea6d01238f82f7dcd2b0c6a70790ef12553784f602678c4cf007a94268d1f88f174b390356f83062afcf4a729cec84539186890f3d211a720e04b31cf3ee6cd465051d1fa80fc5114ee42d64fe23c8c77325de78c72fe915f2ec40b08e1af221dd83f5a00c2f8093b9d8b5a4b49e831702fccb5a28fbc1dea6a59626c1bd541e85ad09ad0bc0278df8912b5b46c47dea47f397dde6eb6a753119fda7143f5872676ba06f2c2a83aa11f9d7b03dfc7de948f38c288b69ab819b2ebf5b1008c7c58ba6030ef7d55c8f0ef700cc1fb04dbc0fe2f0649fdc4eabecce23693c8068c1f7447bb1f42a7ae7f672efd67747b30aa4aa0cb8a8ac199a2de070f92010050cb52f4e80ac8fa458d254edf7ca29787b0d31284d3040d5f6664cef35451e644ecd4dc4a4a66da48aa9844057a2bd64b854618c4bbe024a699dfae84332144e30458827456a2d402783ea301d866d3e6981207fd9db593f99dcd2a24b6f588b5927c7bd8a813541d4696e0772ffa1d0369a584a1f0dad7d2e2abb67768554e3737bf2d09c72ef6e3b61f80b7d94bfe0c5a9f03646df67cdd190a07debfb6e1e2347f0a6a3c5c1910476708667cd3037c1b5d08976d6edf52a14662dd35910031395ab87c6031570d7adbebe57325c9dd0c7e08bd67ca8bde0c1f6bf5628a15ceb6c0abd2db352d55a10cafc764cabd99ae608868f5800ef9c9c387b9bef89ef52d5f58f015de08638a67c87eba286b5c81a30c0c8f25e5105af14a9cb362f85f1d654446a89274b1777bda9dfbc53f7026b4082aad328adc40173900d86fde5707a0f258fc08feea08c73a87a237b68efe220145d82c8c9809a3b798a655ad976c60f7a998980357aec88cde35e67d03886b8be0887a46de28356ac6a5eae27abc43a8baf6d62ea4d9fe26043f57ef78560f0c8d46b266391c3aa71d4f66298b97b799ffaf39dd3c3ae6ba9c17127a47d76b179e8b5b47236622110f0b7dcf445f3b5ffa2a399b9822009ef8659cca1c8d2e11b6dedb8617969a2d0e7288503fa35d4f4ce05be6332fda67cba35d4b40f7c6af48a9c99f901df14fbe1d1c58c7d48c0c4a6a2759b7c4e2996838ea7a6fa7a324d6849bf0277cc61d7053b055979345fb753012427081a7a860ceaad3e30d6236d2e7c9244823870ad7cedab3094029b17fdaa35d07d6981947bd44e465a98249e05bd7a86cb2c29c46e6f21da76b95a2acb260e5e83432607f9d1f2841fc61c261595df92faaf7466024acd1fc861863ae6fc1999c4b15129ad6b01c2286af54e858b292eb6ca39d9600519c63203068d76b4bc49e5baea40c029e3c61c8b965e7e28c023a7846066b1286c995ba5c26ba2d761359167d99559930058a432e79e27f20c3876e5d1551d3c2d5eec52a21e92ec6f266ebf0670a132c0426866d055a9737637cbf575eecbc8c6de8c0f8eed6f7b4ee424ca5918c08d8c4b0f2f39cd2b3364e64dbd3279e4549ee1e4e66e1f610c65375c90bbd7dd2dca3a42950a4cd6b93f0fa544f13d8f681d2f9cde2afd8f281ee7be1a12f32098e4d8a8a12b1bd18d70787b929b83f58dab8f5bffaacf2256e0bbf16f48b5b25840edea5a848245375dea76b016933d4ab0cac952d7dd411f147c9e974365bbf54841afc9fec85a3f702c3ea54cb5902894a88fde976e150a20f26c9bed4b62f5629ba0f47f37372e10087c79233116aebff155acd3cbc69f6de504822cafd0e2f8c464e5f015058ca444d835854ef6649a6dc2c2743d7b66631d0d54ead82d437185a4a43aabebdf96a9f9e0595559d28be47f2a600a5ce86a6130190e0fa0a135a40837434112b14dff8882878e6681fb1d34ec817a92aceb7b15da809c5183ace937a8f51fa289310e2c24f64146f853e1880ebdd7453a4c31639f28c769713e1edaff378cc2f0aa9d8ecc90b620bff9f8239afe679c1bf74cc26eeed810f353099842f0d29a6d207655853c351d5f572aae972b74c0d65294dc51ba166d9253741a7b0a375388fb5f2a54e205655fd33fd10e2c44d9f3c7d0564f74caa9d5a62508b16c0415c9a321b5436b6f1f47d7fe3306e91f0efbbdcadb70043ceb45b4e409edfe8007b981849d59bdbb74a0ca307d87494f87759c4811bd52b45c68e57bc536a8f552dffb4f8b9ec1318bf0149d569a371b6de9cb13a03d467a24c9a2b0e59452a91dc37a4c261b5f188dc21d0d674598cae8dfb4f331f9c9d56aed514d110fe4e591ee674117d780baa19b4c48589255a51fe0beaf6cf7c10f565e5c18f0b046f1d6e728f705da0a5df0050b15d08956f43b735111f841186e12a329da2b7e611513362736992de74aa187c23e773183ff6321d5df7edfb43bc344225a69811b997164cac57bd7fdc9ddaad789f692c40dc071b2e2a5d77fbd94c9ad6253c25dc417f87b6e52e03621ccf4b3bff5b402677aeb51e216335f3eabbb34b8914810e02d7aa1f7c651789c95efbea81ba02356b81718a778fb3e0430a21e25ca1c1a33dd73a3298131ad806123600b115d1120a27e70f8743503584c04d371a64465064d6aebcc2888bc16571702b17ff3b20d61a7c29eb2eb9682266bbb64cfcad7a0a5e7e0a8665f8da6a0530a630b6bf0671d1a7462d924dfcae85e3ec6eab55a4b0e72ea84e0bd0878635fe2e760ccb274fd60f00a91e9c578b766c45ea20ed54db094712a41aa15d3c9c4f005241edf7e2a009c5e844133d3be0ab5f59cdc2fefb2d4dd602f2e9c01fa099e87006961cbcc82e22858340e2422d27953832752793cbb97ef525285481db653339bb61fa30a6f292eb5ca3fb30e467840fdf8253378d0059f541db8f15a5376d39e0c01500c4ed839440caec8a8ef1a84b25690648c9b9037da981d43da69712db074ef19fba75911ac0143ab1854c8e64c497b56a0a4a0818fc99d88c57fab0a7af5d145ff03137e96b1e7a387fde83070d9ce4fdd749e4318ba1e06431e8c31a3978f1d3fe86e48aa2580fa1d73e428c80f71986a92f046207389077acd7c6cd46212e9e4e1d2368f64f7f6013d2297fcf24d79708600524dfac7d19514e381b55f40f11573a712ee7635e05ce30c44b48a483917d9352f4759bfacba7b2939ed95027cfb2855a26e64210055ee08f997e04b228612f6a4b79858e2128bb65c250d41d3bd8744afb835a29d15e5807c4dfb3f7ae6b9ad7a45bd7cbac4cbf3b204cde33f8518dd0073f1a200c350db967fe40a8a5e56c17998d2127bf8c4460233dfd1067864865f48a1087288b8810fd5a1969a17729a6959de016ed8fc1816594af470c0f2a892df4cbc398ca3daaff63cc9f23994a0122fea33db89fdd2b41f1733c7854aac62dffaa59df69c4e3e8bbc8dd9eb453b3cc3fd8f0a364fdaa52d4d7551eef5f897f1b3ade8ee2845833b2ac999550cd3aebd1ffd4205789ab12af4a458247af6f9bc80bb609ed12747af8d6578a071d031c45865cc1e02789fbf15a7224f610d4fe968b84f2c1e5c528eed48bff4fc9a8d80b1aff0aa75de3993b766f79533a4631f748afbc0974c6c81535cb57836998a9a31c4f6d15733454fe2c921217725fb07ab1aad83c55f5d30c588a455a635efbae18a26ba32df8c9a9eb8e719b5f7e0481550ac9c2ffeec424eb4d2b2d5d78687c7eac88e8d4ad61df41b90a67682da8bba1442345e8fe360f3c888b849e515aaedcc2374f1dceb7febda65ef402eb178a34fb573d87c0831bead0e8f8cc965ca5b198095e5fd92698cddae1d9e632cb6d7e74e80272b245eb649ac5e26e93e9018b72719f1159583de0cb357158914ee5ec65584d206fe8ee385aa4d9daf68a42c9060279d8cba74e950bbc62f0831c741d212a66273606a4e4a4f867b82aaad9f8b73e772cacae5b58f0f9173484bea87f5cc0f5edc1099fe7ee52e47c9cd54798fa782f7378c7d4bb3f8e269b22afe3816cde64ea8d7c4fb0ab2708aee9a40c3864620b53bcae5b2a2bcde9aac95ac5d1d5b54bb3f7d934ed7ff72cb58d619855796e8323f4ac4f246a3af8d9f569cfcf1bf812c09caadfecc135c926f4c89c5eae003f8a9d5c31485f77dcaf43375207c4194296e86bb13d03857689bc3368d276b998fe3338a1e49fe6fda11f5e0cea528b63ad6786496cdb48bd34402c8e4f681d17d532cc01b7902ae446064841054be0ee8a969518eaad01f5dd2d2e8d33f68d34c63880d10fd49619047470aed7149c5ba4f212a034fd43b8eadfb3e60ea69c8837a0e1b07bd1bb1473067196ee5120239306896fea40809ed3d457196dfccd8abff878f07a0c2c6f0828d5a999661eeebb4063d8590b3ae02eb782a7a06d92a4b5cbc14199085c713a57f74786d7eb15a44c2c8a3fe1f55551d5b101647d8e7ebf872504475abdd390106101352b0720e4665df5dd392246f3cb7cc718b1036143b74eb90357d2fe9fee9d6702e40598e24b729bdf85543d7b1540593b8ca404c8d898e05b943e6ab04f26d99e7768f6244804fca55b0db15e3fa6485b84e2c1e5678e1ace94529077be77e96679a3c121088f88cd2ea14b23971904e71e4230ffe0a8b8cadca2186cb91b06d94f48726ee97cd0c584d15351d8032f6cdd44da9ed0735adee1cf5af5cb8ac2858cc992748747651cd1f0726f6f1f286b365d1738c3786189281ce0a96241acf9a699a9d85e89a631ba9110e2b8a77050ae0d8f5416127d48342d420e29ca0684214b10e0dbbe14b28335c7326146a7bbc8d89b8754fbfe9a7a62e78a6e9e9fd3715060448b5f510de0510e04e5672f0b0b40d4391c7f760e8f7059b4bd39b9563b4c2069e9d7bba236654da0b1a386dce9d8b1efb9277402d7b800f3a225f39ad390d9d773d1e52e1a050ebc52664f9fe902cd21d78e6915d7cc85eda9edcf0fdeb0e4f3b5b84dffff92d9ae4439d9d28d418e65e40ec5c6240040f920fbbc23b13eea752c0556965ba136fd0398b6034b276e225b432a823105dabcc3ca3b74ff9d42a24343af9fb2a29f3f2d0d74a0a726e4fdc9a607d8833fbb9efee3dd822e5e962197fda95a99398adb0d02963935c2ab4eabb1ee379f305c163ed312c9a1f55d69a68df48573b8726730028b4b5b7cf99b7df12e3de96a44c8f0126bba0ee3f0e0db8ee17ed6b1fe4a4297d4459cd8886abcde7849f65ffe1ddf2c48e1d9ccf93dc37b20c536b8871a913d01b68e47b042e4f43cfa5a83f08b487b4acf76f2fec6dadd02e7183e955ec86c842c845d09aa82bcfcad6a78b497c899e1d18b084a12ae2f3852ffb6a16d34a0dc06338b0d1812a327f1ba90c2d9ec129ea66a6f93b7a9ec11a761a353ec826489d1f044330211414f65df8e93b80f4fe1acb9bb341c4a8e2f42c2a6f5532e421e2e6f3b03ff0b11f3682da4bfc8bedc5b52ed5dd3b72c9ff1b3b7143e1794a3f969f4b208657c9f94773985af6277325c4769d9db1ebc9c0988938d76c04214bc13255ba8ebc234a3119793db3bd4dc64e8d3b1b2c9770cc7200c6537d3d30ec6b8659a7de8888bbfc5bc71dbbb344515b5af78134de85ccb18765e09d8b41cb9d859f0efe24c0f3b120c8219473206ef4c519f44f28d2675e055ba652561a8f5f166e1877f6939b5852c672c863a9c41fb6e89e07dd1d468064f1cc270784e1b72110ecd068c95bf7d80737dfeda6fce615ada7e3652f101f8b6f7aa1044769af8fcbb491e129da989ad4995f78e1bd51cab1376b28d06e43621dda4ab62bce4e46e89543c97cc1428074c0d26b20b067be3974288fc708f5d14211a985f8b99c2faeb96d878ab7fe7231d3bf302c7d30d79089a100de853cc0284a46da75d1a232674897851b65d35851fbaf2ecdcbb4fefd9c5ee4db8e211715abaa1b6bbf67385969492af773c91a1d5f29cdca42fc1cc7d6e8a487caabbe525c5cb2a32af327ce450cdee588e8a0dd28b575ed8b0f17375ec6a6aae2e29d2786e405e2bb4fe90c046709af4c39d2d97ddb8efc4ef5d9955d80540c7dce9ddb51cb7ef31a82645bcde3131b69c39958872480c032b74829fa9f15744478a4b8e498839dee948205c80665f2848edba46d17b401e05c4e3a5eaa50acdee79b0468d37ea7df8e29511f5b65fb48a38203583d908700ecd211b0296f7af5236b080405d6da97774386f7677c005a0974be701c7d193970bbf719a5d9a72e35fa0ce1b5f3febb57b7ed7bb412c765c89b1cdc3ee48133eef332c1a5f6fb33243258266b3ddbf6376dced0c9901a0fe9dd67c52b2b859771610acfb12e3dacf8fa33fcaf1c38ed1e4d71212e5cbf007324e55269bcee0dfeedc96b51e93740ba39e78b0af8de4b143f1d946ce07ee16e57e0ac82fd833c9f7fb5bf0e8faf9871d9bafa033996b6212b1b510a83215ae35e9efafe580ecd5bff18f06f886e5c25c1f572234726d64ef9b48190ac6e12d9216865633455673b553829fd3c3c33ded9df1af08a5655a2912d4c86c52fb2588785153bf822b3456a5e903e14e0c5a509c21bf46bf0d826dbd1d975352ae1687a3f310d0e3b598324d14dbc7624bb8139e49cb750ba0ae0c0e751e564284812e2dce262dd6800fd6cdb89ffcbcebd7b518fc6c0a27e90da26b6db5cbaf08f5da5a54fc1cd7350ba2bc26c8d7ca7729a3909c197ca02151cf787a0649f4c5d52ace2a1b24622f3c247cf1df0ef7783e6da9ab4c42e0f3fac19a2c8847b025af7dfdbffbdb03f8e1daa4ac5b08e0697671a8cc7cf386cb694764f7a45b6db2f5626d7926b7390ccd43a7b8b53c01b5726e22524414fe323 +MD = 13588348128f27d0379a188917f5a782b793b561a8ee08ad56e2d156b0ac6d225ff87001f0931b510fb828b784b33d14 + +Len = 72232 +Msg = 6bb2efedff198ddc1e37f97dc2f31487db49747fe591a221bf048601bb7c1f72f27b78a7da6fd7181a3437279cdbf804e4aad6cea16318fb82ca09f94b61ac152876ac9d415f92418e053abfed9f88c072c057fcfe94b2a513664703e666185cb6aa74165d72261f25b0ec8ddcc82b822b94e05323abdae919e32767b414cc0c441fb95c552ffb7a853f34d992dd4813b72d5a193930f78d3d46906cdcf22ef079de61b5521f791a56b9f9ea3766493cbf93ab9767ac705a26996c5b8789a7cffeee556a7cc809c741272509f2eb95c3ebcfbd15d6a6af187ce4a27cdc5fa0707a577ec2fab41148ed909f7eebf59470e2e876dbada61b8fe92d1a1704fe7f9c9622c307f56bfb6604fc4f914b0bae0d4de6c03015341c86137ebc7426eead1bfa560b7f94732de92b741d8a3ab64b60d3d2825e36d91ac7a2de70db6bb593b54dfb4074005611990cfef1b0df7dd3331db3a4ab371c7d183f561e93fbdd9832381a492c609c0d3d4fa5b34c63e8ae4cd2910d604186ae4292ecaee5fdee235962b90ef0ddcb8b9f9c6e4ba6ed7f44739b74a7c47b9e130d42aa0819996e9ef374e377079f6df2859963a106a6cbfe72206559210eec1540f8981477f9e770c8159d6cbbcd09aab8f18b9eb4b6534210086b0bbd21f81ca55bbdbb4642e001a0eef1d55290281b004aee28f7449f7914fc8fa5e2dd4b91021421e3d09fe2b943a6e69a150f51ad244d95281978380c47a3d810d66a6cda20cacc755b36740079e684a34c730cc8eea18787607ba56171a64e32e1efe361c726c75a302f1e3e0956d4d83fe3e1d424eecc2b15756ee25aacf9f44d94398dbecf197897b368dbbc9ddd22358859398fde6dfe7f8d1cf6c95ee23e6083f5c5cf6ecab9d7eadb3f5a64a8677889fb5ff71771e7e8ec3604876410f964e19f73c0abe3043afbfed2ab523b914e0f50ae2441e0cd96ba44765d658b0b9fd9bffe5a2d6a40060e59fd7610a0860042df8fdd05c39ad21ecfb310095c5e5a90dece659d6a57844d75268545df30d5493068eb0b2135e4405e236bf98ad9dc31834ba9a2e830fcded9b79e9afe75174dcba217fa02861449792e35dd1d636fe237ddeee5eeb3b6e90d168ab7073f0c7539a6277a6e75aa61a83c355c1ee659cb81ecfb0e83c8f9979aad11430175feea01dbe3356eeaedaf74b5341f9449e316e9e099c4b0570f0f07e2fae7f5ff33d3aba815d009cd265c6401face877455e8f72190af7c483e7adc1f0f4aeac5f459bf7783f648069e8f01884f10ff4ef76c3417a878ef83cf00a2cb1615e8ae88a4c6aff64d317d9a71d1b3fb8d05c110c7272aa8c711f10ac8e04dd8eff8a439db48b7367dcf1b652a5ee8c5eea0b5ea2459c35a43eb7836fb1e0f1d81208f4d27cbf90b2f27c646e1309077dbd910cba95048849584019cc0e578ac726a550dafd9dc3d0b436784bfcd14d7fbb7bbfc7e9623ef65e4758540bbf04f6bdedfc19cf9c893b82ae768ebbfdaaef7429ec5ccb3ba635a14ba37a32bdfcc148315b115b425d7dfe42c3a8d8e4cc37682a16dbb2d77a81c1bbafb10baadec1461df2443905ccf277a2042cfc0d1e02180ad3e728ec18554015b18aff2c377148026644d17d34439f3aac7d7dfd0cba043a87e1a5dffc3aacf87d8a95a8735bbe9d0b75cd1f3fdbc57b113cd73b34d9ad37c76da239b2ac58c2581267a62eeb2a3c766984524c459ae1f6cda02e12eb8390f6edb67fc824e401d5c4ddbbd69a0b6f1b828fbcf5fb801db1b2616c236a17c4bae44b18a93ecf357b14704fe6f2e2b38f7357b5a978057cd67d836be2dfda4167d3e8aad2548aebac83c7d8fc804098369e64e2f3459b9dd9a18eb3dda76ba5a25f178cdff097830e853cfd63cc958b95864fbb4feed2ef3fb10bba706b2c4feec840552ead85aa15ab4813d932520c40ad60a53bde1bef7d1e531647959cdea1b20b9a4ae5d5bf367881b2a94c26a8bc865037338e071d165c2d2dcfb14da06f9ec1b2b133f830f55f7260708453df6d9396f7b38905069ffcd2878548bf53ad011b350e127dadd6c28293bb759a2ed8779d6d5859962a7e62eba9e4b65256ee6b60979dfbc6945f644ac2e69a4a058184ebee8e7a4b074640e10b7aa4a738a8504a610d6a7373039723748e6ce3f1fd5dfb11c265940b6bf95b32c37e4e576f323117b8e8f4c847edb53f1f580872b065536d9095f1c5740ea2a63bbd8861a783ad224cf1db12b0da6879160628162f3d7d687595f4c3d2f36fdc6fdd15b5e5e71727161f96d0b2efc5c90ed1b34ade38e178ede00d652d4a0b5bcc7756e2bebf178cc0bca880e290559566554a9f520a1845760ebc47c7651d9acdf6cc66769e26c9c96380b1b45e8064b8fb4e620f039a248a7c71ea55f70f1000e5f6bfc1e6cd748cbedfd19ccceebd835e4f5179c7efbca7a3deab4d526851f1cf666d053b53f3a6f8e66f204de91631d8bdec36b971646a3f53291219b1e71d1d8becd4fe82fd94dc64f8d36417f561052a70ba7ad7b22e896fd248bf6435ef5ae7bda5c2b2c8d2c3abfd2a91e3d17d6e15ad696e7b3c812c954555a607d4e4f1fa6dec0a6c0bed395bea9a79e541037dffe0e826e459ee9353e0cd80053a9a8d445c3c48372d40b7d54fa76e94ba7fbf49c9ab169b90e3483c3314bff4dd7c8746370b0e7ca379c9a8aad5f26aa46e9c93b626c01987ebd5aebacfc84f34077a805cdccfc51504e9667aaaa7efa54cb06e34efa5e68584a63bf6533b8ce4d7d1835c25fea8e85e916f3d99f18c13967539c46a5a7b403a445464438c26564a16bfa37b3d90a3f34c53723861d8a5c85566f32b30501e793a9883252cb40efac4a5d140ef04be7f8483a6ea6b4da27efba63fa6d9fd96cde378e15cafbe854675c6441b957dbe3fd4a05a448063b016c2581861b9ec3fa4f965fd7e879e4fd974a19a6fc37429d0b719eabb43a3452c340d0be052948f9ac6f035ef46ebc5007bb842c1eb8067bea650f6d32794e83bdb2588b7269eed1be6983943601f9b77e58acb96901b1e761cf60d00aeb0ffa222321d3ac8540ea4d2de65ff65b2299c3c99936233bcb483a5797be83b70120ba3d3480f9a6c3ad216234a97ba3bf5d9fb5538c958dda063ba4be1ee606ac5d4ca59878a2f4018001b176590e02596ddac4e3a1072068892d5fdcd77bff971aa20655a5ee9681ccb6c2b357f7a077303c9f505fc11bfc38d72ffad38acb4abd820674ed27b5cbfa093cf38b7ea4a10e8deea2ad0aa71f7d03bd1ff95b914db0b54dfc3a93786870bfc83eddeb375f6f9458e1722cec57bf77b15331367a29590384f5737c08df98a30d9d3585803abb1a8616986d112f67fcb29e6362ae652233536780288cb8d97cb4177b95a8b95ae7204906163f2cdb5a680977285489720f615b49e02d7c9a1164b59763d665b5c3cd80a46e9dd884597c9b56d0941db05d57d8b5eb13b2452bc67e713733c4327635c55abf54bacac1965de6a297aa46e6dce7ae9365e24192817af159e7603ac7011f104f8b5a16595d5510e585b89b72998f1c1e4c94f60e3eb1001019c1367fd997ae686b41ceea7a8dbde386cd17c936d8e5d5ef51cc67a52c84a6f16d8c6664331c501cf65c3c940dd3e2c07322b25acaf20077a02b645df2666198eea6444bfd424fc501261754db3c2b5e3124f6ad6e2be70b0a7bcf0f0b8f8a36cceae135fd09af8eeb96436201de06868f855dd9cb78d1d416246e6280e668f28dc205cb3a57b6a03b12876587a3ba6116adaf83e9c208f94c8e0aff585245f5bb9577b5bc16ae237904ad06737191164d05b455d1efd2a334216a8d9bbd6767ddca009a8b2cdd3e2ed37beccf32d1cdbdf334f78ae978fa574658b5510e176f7ccb6823b0838c1ae1e7babfa3cdc3b0ece0f6111c9641253c639a1f832d9d351fff77f7320102df1aa83129f52aafe46435c34a90e0774d6be2f972390141e24ecef4bf199089b4617eaad0cf31dd94ad58634aedae60996d293d5779744b9e92a0a9226d1767c13fd1eb5c38ca94e64db39eba3be74632c9a22e754d6d029071dd5cc9377de52f3b09be7639dd1e02ceac3c4283756f3f07b39375bcd5b0e175edd65b7fac4b26de8ee9c6d852c111b8ad0489cc3f24e9b0c636fece929bb82639df814b8be1cdaec834f31f11c63b911dbf381e2dac584b42ddb98c8d0b3e0b273fe3a502ee4d352069a6160275a7e36435f6812751b3608f514dfdae4a9bac20bd2894f9bccefbfc4e86c40e157e35ea2e6cfe15592377155a632ade9ff6918d22f82158917787c5ad3c311bf0e7101672429cdf0dcf193bbfa31903517743d436fd5207b67061e44c6f65124c0bfb52c81f646eb5e0cd6b4ab4d406a948495fc1dc31ef73e211bff3c869dc72127e06faab5ca8997d1c0dc13f63d0ef8e2b948b40c6f60ff51fc06cee445faa232198ce8f8e7600cf8d87edebcc486b7472dd5bcf1805d4d0144e7e8bfe853b666d710d7302c134fda84296611955641fa5a1fb312f05089c78d0f044a0356f04e9f97ffebf6f7b30f5a6844952e124ba4c47310f13dcf480d1b08bc330578c251e98ebd9cd691e90fd1c7e4a7dd3f16bef39c611cd74e0a5a95517b0b9d2dbf092b71aac34986444470a4e0ca413145a17de82de63b3143287275cb24090a48ecfbcd51efce397755bd9ba38ce88d5b14b9e2c1fe083d750f48e2172cf782f275d11e2d72e31fd4ac2f28b76041c7b9514e18e7b49cb732777f230986d72c3e2c21c0980d26ce0ec03bb886d4db65030f90f6e9ba8732ede98bb4fcb2366a9e7884714c1ee7b8682a69e7bc6b13e9aaa829095260462519edf5147b3f83c2a5f36f9c9418c46383534022a28389da22b37cdcbc56682238ed51ddff9f4dc8c725599f2a9b3b53d2d344f5f3cebb9b0daa12cd720d5baeed70185e1451f2f17476c9155a06cb0df912eece0aad17b0bdf471683de59f2f8a0ebf2133e821b15070348bbcfbe1f6489aa437519f2cbfd63b1f495a8fa128b121ccd3f8d2489ccd9a326ebddb1ea153f31bbe8315792cc8e682cd625c103ed551b7c2bda0d6285e6d293af734df93ad84abc009b07b6c187f3280efeb5ab66907069a0cc468c88551bf7cd399b341b7f7eae84ff0a212477da4e05dadff340eba4fa650bd6f11d4f03ba0ed6a284ff5a54fa3d0469b93d85a608826245c3c18f3e994440c5788cfc14443af36acf30915406f3532b6853dadebd4f3ef10433a4c6ad03131c081c83d5fe1937fcfff44d063b6d945815b09d0ad43215eb9cdc51c59e6b2be28b170dce4e724b5ffa94b6f301756ef9a89af7b3b7f48f397505bfc2d344311fe8c3c1889d0fd69baa57f3a2c1d18915085a1060cd5d55e576f51645b656ccdb0769c88a54b681b9f5872d9be14a8eb41f380f997e340ff786f67dd6ae68a51fd050495cd930f4c0c56a8b67cba825ded47b1ce6324365758f4e1cfe234463f22bc26d879645d6b8014a368de5b3f59c0f6d61d05150fd6978461c447db0af5d00055c92f1bcd0aa916d55959933a7f5b85403de432482da2926a5312575316737623d05545f899d5d1c11084eefe2f2b8792d9971879ad18936de4c815b9018b821386926f4aa994c9e926d6bb04f9af52405874140ed5582bef01dfa2975786b8a7745cf44daa6483dff4c5a3e96f5589db3321c19246efb05032cf9a9879038e51f21b717c2cd393f802e82615e0bc92b60226bd8e724dd543d02e4a16f6708795b854635091505ed3f994be14fe5311734dd9446dd800ef3c92624dad405c18f51fae4655887958f61181d85128a76aa56ed012baf89772acd20221c5f734d6f2907f9705729d16d113060164f028229efda184f054800417279452eb8b892610c35ed1fad05a1ce756b7c5dad563bdf262a437985c3927fdfb8f4da86dc7aad220b28380323eefcb550da1fd58d8b132467e973da04132d3d6599e671e8ec9a9211128300899e3dfa67e0276faf590c10187103aa136d93b3089b1b23e3cf7185cf13ca4d419bda6c39f73c22c58c1313c645f29ef686f96a2a624141d50d7b22ce94d39153cb1b324d872596d50e7055f8cc075db748a78952562076c78dfd9295fb6775c51847752bf9ab74eac66bfd366e0c905e99e43909df7f67bf3742fcacb24ea1a169a85c5cb39664099c4c340993c7def163faa2d66528bfc8f391899c1f50bcefa58410671fae0d3c785a21f7a302f07a8d2feb4150e124e7a93160ecac356eb5b624b8d4a4ba188a42deed8a06836d00ffcc3dd208733f26416bab24c0c461fd83d07d2ca9842cfce220bf4a2513fe8ca118bf12f5a6b78ca3878fcdc2c63acef4cf87f698d2f2984168c0be66794b255b5d9a887f413421b8cd366e1c04a431f16bfdbad86d126845fe176e327ffbd315e1f5bd0f0e60ee6684c88f3543452c62ea0701d11d3374d729eee2f2ebb69eb7eef9370bd3e0fa96f66cb8754ec5ca2f95cf51eba9fdc2e0336aa30c86268f29cacd80dd595f4e31694b7244eccd1041b47a358edb1a5d4662b538ea18f1ad53bd9b20eb6883f01d268d440ae405087e8f333222792f4af3fff729f269bf011d11889d9fc8f4ea447559b72fff14b9cf6d20d20f4ce792cd5157ff8e403991700cbe8160405b448c9dd7521b05a32b1c98699cbd1ce73ebea2fe412566066732f8655395996004dfe8319d37be59674e56371895b1da56ad3814771ea4cf8b4d1ba49ca89baa34249c8c20e9f1df744bf0b2cffdd266e0815dc029e3c03c03a7bea4e3000ee2db430213649a68dc5afdae01485e4933e624562ae0db82f4d92a288db005baaf022362ebf0b3e9f9224bd74d0b21dcea6f7d6e7b236eb4a015bda3868c1f67bab0ae043f4c9a3dded31cb5bda1ac54338474ecdb7b041ce7bd4775b7fdb6dcabedcb2f3501b92c32755a8e7a916978b52cf117716f058472dbb2e7498d32e229c1622df596777d9d11ecabab63be12196fdc396687d9b2e976e54164c4fb41dc355c44a8933bfac9adba5479a015e806551d98e14be96ef297c8cb2f2979c16d509fbd76816f695b54acd00ccfd5c425e79d7c0b449b82384543cdd3441529841b14e086e67a93fe0baa698b78666c1e2c422f0cf958b461883e8e789d3543c89ca3f4014dc44058dc9c651e2430a8982cf5f80bf289ce1668a15744bd43d5e2dd35430e3bb53711ce6a0def599b423cf09f1e30b89496feee5470622ba5a879e6b013d63ab542d2e9fca923a20f00b17f26eaa5d2e3d5c2213f21f86fc58436bdfead81d12c2743363a81e584f4ac9fe274a48fc8dc52090a4bb22f120931c16c0559368982af0bbc0ddc5b89b20cb01f6f941923e9d77caf5e6a2e9bdb76c1fbaf5e1de81fa2d2845b04ad38b1e98a400101686a712ac31a61921e92a21cdf70e2065f786bc842940e3f0419590ad54c1135a725dc1485533d72267fc5ecc2d5889724c1cfe901f60cd688b513393a4c8676fcdd915d6a60d8526febaeab1231885a934ab1ccb7b23f116093453c60474a0d8f18facd1c4b1c7a205ec424798dca97d59b7a3a0dce8d37b53c59dcf145444289617e2c401cf031625e6f1e9df03696113c93fbaa54e092ae36b5e1924f5c5c123d854181d93bc15d7517602662b49e70b662d7384b1f68740bc313ed6b7aa5513677d5848ce770382a24b3bdec2cf81a8f51965cbc32022e42e93aaaa486636fd3bdb0f43cdb871c05fedf0a9486ed3652c7ffc0ae00a80564911d71ff68df949cbd9a77f2ff4d308f0eacb464aac3ed842cdb0c2973a121f82285e8860961e61ae05bb5b53b0c9d4fbae2646480c266afe7f2e8367237a986043aba404f3090d48eba588d770a8ace6b48c19bf134ca5a620cfadbe6b0c5979e048d352396b853308105829b9120928aa77411e35f400e04f1ed22b5559fb25aab0a6e6ed9871d2c76669d8fe786257dc724ce3f8df15235686713c86e5c5f9ff6d8f2164224bcec6223e53b54e50fae707adbee0404ae5d3b10b507432726d6ae9fc90519b7b8d60ce463882265d6836a1d3fd70ca2aae43092105a1b2690659b09fc21a66a97543e501d5c972d04667cb702e1eff3cf3310922caa408124b585bc92543063e3cdbe0f1da1fd6620be70ed2df6f31ea4b0a2bb12ddf8616a2e3460938401ca23a955ca6b3d9a37b3f30c69c6fd624cb2c4b0b2c9dd8ceeeb38709e089b5fc8e04fcb290d1ab7c9446d19d3d8dd82a47fd700225990444f2e3c001ef8809385a129e8d30d1e9b445b935ed268809c4f95525cb1cbe067adbca0ad876b1be528ee9e7471723390cf81cfa50f80cdf7747c9b8a0726b43f2f1bce3f8169549cd94f1636aa4540dc923c88b43227acdd3cba1c52cd72f312fed52c7eb6fb1302c24df9f7278d2cc8b6172754e2660594cfd93c7eabb7872941722431cb28405d086fb07f8f52e19c6397124dc744c065546162d448fe57cc21781d226bf9c3f6d63ea1968b9d46a0c046b2678ac9c698f3d8f81e4d4e4b42c6717f173c74841552413504c375431cf6ab6f6ad3fdfd75d6c8652261b04bd557e4b1d9e6a36c02a400d490dee2c0572c4eb21d49e94e4422b811a92d2b3fcbfc5a1d30128e6104f503e70485eca59a8bb8e1499594a14c0231647a59c70f6ddf5a2ae3683c4c646dd3d4265f9cda2d3b7066b65f06dfd69cbac65f8c8ca403256c40bc8fb5166b33f705bf15f9485863fea72c4e48ee2a18db9f1e6e83e4d5f918c7813001a55e70f7e0964e0bd5632ceb0e730a61b8909f1c5780a8b3b82a81e727fbf229e3884b5ccf75b3db6a95bdbe01523c5924505906564de225084ce560c9f27e34b730edac3922eb70f0373fffea938c3919b16d20044dc3dfbd814e0c132e7b2a089d7d7286669fd34d91d93730fca10881fc03f2ca47f4ebbd12e4716e769213c01824331d09770a6bebb4ed3b5624ce437a45050e051d51f247ce1943936bf8c6e90a7968d31a1f308df7a97368bc93477059e0394de5174367358cf84eade0025856cbce8c311986becbf340fc12607529670cb4e8f44797bc4050f76d00d45cad31b2b7fb630154c858540ad8cd3cb5ec980fe69ef3e8d88c18efa6b80edbbc2fc2b58be959de82f1c55339c59630ef00137336368a03ed20e4f16ff97cfd0a27325cb31ebbb8f7823b79358b15430bae01bf0e7a609fbec0cddcb9f6f5422edda82f956230989dc2e14c66f2f17df13e8a7cd5301ec433b3fb3aeb781fb310994db79a7d60855bfbe05635c2d3e689f8d531f2216b7a344395926f47a25799a3487b2a36f48719735f1f08c26287bc230b66cf15f0caa9b6c36dac2b2737af42c203ae5694a6bf74872d48bb4767700953a4d3d455bb7a55af520aec56593bc0e3d88ca6e7eb36447f0a5e76298e8ef0d671662541568f687ec9f151d6c72663d2812eeb965d642b703eb0b8b105ff21bc58f0d15ca2d0375b5ac92450895674b886faf048043273824fa84c87d3a9e42cded9a14fa726096c8efa2b6ba5b53abc705a7ca6e98862dcc7adf9520076814e8d8a5ac26d7728d9ecec2fd0252aff07c6b55658134f42a72e2686ba954d3f4bec69c75cfdaddacbfd08f726109c09c0107347058a6d590a0a7dbc699915674b83dfafc65eae686a47b44d166ff5a210d7fb175557ccf02ee519630414b84175db55d9a898641add5459f748491c101fa1b78ef281524e3b466243360f1d15f27b310ea8b4b5374dac60be63a6f99b14f90e738110e9bd58b6c023a4902c2beaebdc1671b98b09e1d52f6a108f748d18646890ad0d7883adbc9bccf9a2cdca84b4bfb9a9afcdd6c25930c3f60a752c526c2dab1b7fe7e963e05b07db4ae83ce85d41bff99e63e717c0ca90be22e4c2eb98c68d766e1e37a2aa689af39265c73f6ec9ef088f34840990649b0fdca9950a7099fe64e304b591a32b4de8812cb4b170c1127f892af4c05368aa9242acedd87d0fc68de483ab59520aea621f264b65ea90f005952c8163903d86ee5bd6147d4691ac9b7c8260213f6e370b7539d384649e5143ba23711ad04bf7cc2f0d512054857933b0ea1d12f3c0fe888a4e96356653fde000f50d0f9afac5d4c73aebe92d54f5ff8aa12a54f5660584674edaa17917bb856f8b9d6776b2b7ad2a462b015b67e8a71190cf0ecdca15a5121fe8ef245255da10cd694decdb96006017599066251ad34d9f54690452f59395ab0848f06c9186eaa3b8e785dd2a747297bdbdd4f5532a47b7008c21686ff7f8d881d464cd383205f6d45dc8203bb267ac9eb12f415a5406be1c9fac73497941909dba08dd12856aac03d83e0d916147404694fe70f8fa929ef0cc2edb4cc07abaa2236405e62820af8e806d0af32a1b3afb8dcaeaf5c4f43dc4392e074075aa3ed93601ab7ec22fe5bd7cdf802bb5ea8206c41a1619593385e00e3461ed3fda048a1c6639a0fca038d7f51cd8ffa9bc00af62765e2b62575c8b74c8501ac711f3fdfc1b15157e7a8f2612aa7838af999c3d8f6629f58669ac0f93733c91b557f579ffa9a9a4efc5d1f0fc13ca9e6e8a3efa7273e03d6e705cb292bc8d18b0b4f1484d975b17f88ae87edadf34f88f96ce2c3424e9ccc17454bd992cac786031d0b00d6d953540d0bb18d5942010b9c6341cfc02ad6a287e7c78d249ff796ed578fa68b4bec5709f320515bcf5ac95215812f39494de4b94bc2a639eefe282a9d26d85f33d902fff358fc1de1b95caaf2255416207f2d1c1fc1c74b0e57d43b3c6538db27c5e26f9acfc0183fa9301787b2f0df46c6c630a24972e0947105afd3df2a779e2f6fc947f95ff32fa6de28549e67fd32c15a8791ce1b8307e646e8f1d94fcd1d7225ad997a2e07383ed14dd76c3c186b0b54915cc423badf341286f507fb341c3a8e8ceda6bcfcefdd94088e80ef8955f14ede61c04df090d6e30a7bcfbf5520f514d7d3137f2ccd0fa0d8f890f4f89a0f93df5f56ecbcb33b52d3f4b52ea8a21e532ee845071f4641824f93f0eece8dd2ee0493dc7287bcfdcc83de4cab974622c3e28bcfc75cf21fb2ccef452f73d7d797feade581da148aca8ab6ead8b953aee1a33bf8426e3706ace168f24990de8a3c2e1be69d3c606ed7590d341877712f26d177730abbbb72eb2daf8ccf9e285745035c74172717167d9f5facfd6a15001e0dccb472ddc5f0f7f2217924143beb3d2eedf2a212bf1e17ae1cb9e9f9b5ee31b8ba213d3d0d1d5def4d4bd96b9fa2aef15f06a087bee25005c2ef80beea260c52ce6dac61e7448765a179722cba29f50b1e14a50e9d0f9146f0b234221863f86c57ee52d4eaf30f05bc8660d011cdb9dca9a1221fdff265e204a686bbc704a0860527c31e8ec54f3ffcf737fe3d1a67d69030aa240e3748579d30fae47ca47f0044ae6fa75927d284f14069ffa29c79894047afc39e4aa32828e60344bfbffe9ba4e6daf7d097336527f6795cd8d08975685a956716b920c4264a325506b3a998946577886b8fec711f9dd8ae4632f22b46ee0d96edef2bcc13b1fa9dc82c0a8791aed7e1a09e6809268b1a6c81405e0b8a767adbaa793e907fd1de679a858bf92b277e9c063f20bdfb62c100009527a691886f9dd2c3d3c1d90e507ae45cc86ddf63de1012eec1000c993f114a9de97cfaa85e55dd7b75c0adebf3203c1e2a461cf868d63d39a36fb8b31708d5b70e0f343ab9bc40fcbf3d6cdf390018463c226239c1570b8c426dae24db6f289d2fddccc4140993b3fa68a47c8482ff6168735dcc5a2b0463488a5b82eeacb9aca95922e8fff65c5dc1f2c3387821680c59c95e04a5caae5b10362f41d35a1f621501e4fddfeaf146a06c77879683c8836a84e19736ae6fe023f1b7e62bffa059fd887197365ff90b1026000e31f2b783254696d87f4ecf7f0e5d73e45af612e0bd2d573985ddda178bc01b210d26bb68148edc6d024453a439d9f1c0e2d5bdc2ee91144960ed2af89dcb17647a782aceb2be20b9420782dc30e7a0004637274d1c34276b39f6522aa097934cfc6fac038a551241c100d3a37e170d270772d5fba0870f038381f62a4eb5fd4f1585b5c2f6041f8b01d8cc869bd897a9a911405b261a39a6d0387d73f2b6e3ff5852be79a01ba71976f7e3e1f4bcee0cadab0ce8076e45c992525ea4271ab5b2374f4c93f33c4761b2d6b06223346ec48798823eeee3a1e05c9810177642011c24e3d69e69c68f0827fd9873a1cf9875b97256ac271aec8fa152486a4add44a1c3a8f3159e4adc5158e52292eaef0974d5c0d0dc5a94742be3195df92f4cfec776171885fb49cde1c825d54c892320564efca72bf3b0d7499465c7609e01ae01ceb6bd6bfb43b23df838370ce70c7bae979e40378d20847d57c02b1d119bc0f53ff0584428b947ca5b74ae509efb89d2321e126b71441a1b9fa0efab148bd6064c5c8f8b0e1afd2b8493d1c41b80c955c104b4546a9bf6c8ce908b8721526ba96663b9bd160920b5e5fe17b3e73cb8cda6da9c7eb3a8a8e97707852dc27fe07320ae7d56cae4711e022c06bc7c7fe69e76184146f6fabf122b8e732b7274d2e80d8520f4b73d6ca86b96155a65cac14c914639499ef297b74e9ddbfcbbc1b17c8f906af34584520974c4c9fa1dbdd74c8adceaf33630c16d72ae061e08f71aa52958b1ff0049efa5d050ab381ec99732e554dcd03725da991a37a80bd4756cf65d367c54721e93f1e0a +MD = 5fcb46e07b06e5d11a7a69c28068c441ab6396e46cfdbf4a4346568ad567c45793b2e01b6cbe859e4fad2a03b01a8a06 + +Len = 73072 +Msg = 4efb568fb6bd5fc759322e1289aed416e5a9f9a38720b83b7f38b0d2802557d2da4a9262a8a183e84b5ea2cc17cf10804b8728bd47bb560ff9ec2c9399c6b2ff9649fee4d0260530076cb1f79363347356b89b49f0dba60d31a6d709d43fc93a6a3fc39c94148da875a4821a6732e7f7ed867bcfea484f3f10aed8bb9a57438a3e7608125d32c2567e4d3ebdfa04d215f837f0d79ccafaad7c4b583154d5c9f8fa34f6cf94494d4408b00c69b4a19cd4601421ea70294f5e5ec67ff46882028b86c2b55a9f21d57afc1615a4fdd1ee3d0b65378fcd2cf55a9f67748b4026974bca686c3be88203fe43c581f93d5b7056e272594f1b9d95a92576607e42892f40af6d44fbd5347fdac30677eddc08c929cd82b0b1c342d654da3b6a56d87273731b1b6421d0fef01666201f0a42a0a2beb5df643d2be36161a5febb9a69aa0aebf7b8f43540aaffb8135da2d7d8eba21b80cf9c7bbc4adddb6d067ad25cfa9eb02c8d1ec08dfe53cab20328dc04b0724a189b80f4de3ef3c71c9cd0871b28d4cba1e208491ec395532a5bd8a22fb9b953638b392ffa864b2f9908e53f0dfc56433dffda585dc06c5c65addbb0c2cc203c4be6efb476eb8c1acc92e0859a40cc20ea2bbd75b1bf81ec4a41598e23b24f0fb7f6c90cbc355f919d82eade2abadd6b8fafd92982867b0bc15e79c5bc33edd48e01f0be322c6b9bf41f2ad42533322b13d355fb39df03c1b24d63dcf416a291ba508c5242975940b9b2c9eef474736860df59743c90c1170557405b32251850222bc4515340d088d483eeb5fd42472a5d1b0f1af4615c14a2c238cbe026f418aed9c042cced797c2ddac2afa968567af2cf9d78c91c7dc172d672b365e2e1f246a4a9ad1767fc23adff6d6660ac495f07422b132487cb245bdd179b292185e4d2d2a71a9b7600863a3916628bd8c8e284bde2756b6cef48461d4e0b94aa88f93aace112c0e12dabbdd2e52990b27a0a5188e925089190321cdf408c0e479336667a801cee722c9c1f100345d90308df57eb69ab61be57ecc36b14a5ffbe4ea53f84abc18defa561463c983ecc9219697c2e8a90e0bdeb7d2509f3dfcfd8604dab118b8805213f001c9dcb9ad32956b1a998735beb55f6ed290105c1e65d7236936b48f9bfd0a383887dc5e3558e67bec7724d94ec4d1d44b69a71d3ac152b69e0d8099c21c479f17122aea0ba8af398bc043fc34a6e0a8bb61e609d8ac834ed78a1f6fa94c46853c1d5ad5a69e5a248729672716d8065ca10d3f9a8e63d34ca450e389a819a18b05fdeea98cc671ed5cf700e25bd4bd507ac02657b293dd4092e66f7044e0c321033858ee24ad80c47bdda3a68a296034c72f2cb9ebc90bcb11af35ac165e35e7c2512c1c04bff17a7231b1ec1842b97a04aed549a05fe93caf3fb8a582ce643fa1dccaabb37a5e5fce87ce3b8cbd0380c1c3928f66e4f015da0c7af510ddf8a9503fd725a77921e4ef645b1d5df4e8e96d01f6e3a5e4ab070099ff0356e94da52bfeb4026718e6ba534beafa1286c42494ee74fef3db8450e16ca758bb9cfdc3b39de3da68e61740a8a2e06a30ff4fc2a7ed9f29c72616b3caf9267db555638575a20916236d2e084e0dfdd63faac6343483d80c9670dc804bc3deeaeaaf195ae08f863e2d2ab571c1e175d6a525e209b955a20fe8384046d2514318a206a9b492caddbafc8b283d92d1fae3f80d0db3a4b79fbc42e8dc87fd25f59fa1f88f32faf88235082b009c3f33ff76beacb3b2954e238a2d0f2bc43ab668d830f12456877d1604d666c94e259be6174fa16e86f96dd0021d17987c09970f6af58d138fd6ed0bd2fdeb0ca3f47e613e4177b8b14fbb27bc79aebd1ff82c7bb05628d75f57bcc607c514253e1a6fd3542a8c0cc216aa8d01f910f440650b1060d960da458850f71bf27ebd8d05c4cf11717ae529dca0828ae1faf86dfe977fc505a1b6c2f76df197dc7730115531b6deacb0dc690051aaafeac913f923761c755177d758135857f409ba275b771b2d1432ca5cf0202267f96a17e182520b68fa436fc6856aa49cd8f0a40ddbea05846aaa23d16fca974cefe643eb8a28ec07bc61d60edb6bd7228f37c14e033c756f4a8959f4285e24cc0bf5f99c91068c5b4423671abaa564abaf359e7271dcef402c46d91fca695f57d60f957f078960e62a0e8f74b395d17ab170a8159849c7a988792dcec66aab82c69993fd7e1ffe3ab699ab9746cba2223e7f5aa1f701b30e0786d48b9cd09ddf562a91b26538d8bba24b680cf4a55b349ec832a21ea325eff1f649c0ce39bac01d490b185d72750b559a31404db161145ad1cc806f9c94b2004e0a28cb1466c7847b6c99a73b578c591c93dba27e68640b2294d77a6c94069b04a20e23ef3678241832d1031204c115290c39937ab58628410821bf8188502aa08dfb5928be3454c5fa48d194e14c227606d4b124fd0d2aa3b2c9bf79f62147a84a7aeb6f429ecefb2f5b9322818ff95a10475c0b836b9ac10169eab461fc7a9243f75b118819db3e4e93e84969ff126bb51c24ad0d23e13f907cd1df60342be5271b18bdd32801e5d48c11781f3bf611619d7b77deb8a665dc6d0549557ae4175030a4d2d86bfba85daedf4cf5a92ce1a275f0fa9cbc42da41c4e580c6332baf4be2afeefc37f0fc56667226a1d92f63042005a3bb815f135d1ef32446ff7b2396ab6a60b32eba383b6daa93884e660be3162a11bfba5387aad5ce924c325b1abcf594d681b28012890ec9223d6b7942ebd2eec31dc9b8dda783d8593a7e33db2b4b9fcf0c661ae1dbd45e4125d2c1be6ae0c4165a21f75bdf9390f7b6259e0b6e37ebb8a7abc33c9058ea7ec5f6e7c50cca3aa9f975b7a8bf9f98ec33db0211f2251901e816119932f6fe39b25a43fd2de9c2ec7017423ad40250a53801088563ada85952179e8e5058fa106f7f7edd6ae9ed5c52995f88996648b1373a09ec1f3c0a1d5a32c26264d97e9151c8f0dc30252a88157e48288c35e1aeb5d89eac914abecc74fa15dbdd02ec1b0de932701a360aee3d38948128ebcbec388f2f5d667456f536c01141456fd33bf832cc4f8596ff0d4e4add390c02680833a044551b23331624473d492a7ac462a54816b10eb27743ad378a96821436613bce764a0be203ada1d20249f8ae202d999bba4b1233244ffe911540479bc7b5b56c2da2d53b293a540308ca3c84770b59a01f743c73568096ba15cca9038c4434fbd2d5f389143a9f5ca9406298497a49e7ced2ea0dbe642a44f47242e604bb4f102e79d376652d08316c5317541808fef530dda76c9c890db449f791adc179482b68f5116d9c900343da68a7425315fd3afdfaf11aa16dd57a7eb311d5330cd4b04aee29e91af234e67c07aeed9b4fa93b8ec163824d61061a1b4b4ff6e9f459412cbb897370c201abb996aaa05114a7795bb75b5df1211415a816988d46be6a5086e3bc972e9dfe062bbc071504e36c66fd5354e84d1c83ff9daba7f2d9c96c50f20d3fceb4d48e884aee60b6275a5ca6dc0bfccbb1c1da3a7470eae233b3f3d4f67e8f74a40437947f84240e48d81c9b8067af62bfaf8b48b51cedb5c4ec856efcee28336cab8dcd6233ed87e9fb10c772ecd967d7341bbce7f60cf80e0195517da296857f48f5a57b7409ad7b21ddbd3c12272598fe000975a2d5238f61a85f115256e56c5b039f33ab24f98cead7ef446e0546557bdcb0f699d2c2c9ab32da2063e5cdb4603c1d136fbbf68fb493c01456e024cd2c0645d34192403d3cc945535ddfc8d7d713c1a3283b2f042d95e23473644b408d212ab43070365aa4d03302b68141574e0f0f5b7b2f0d8aa452c81d39fe44602d91f1e1fd091fc251ec25b6f496d1a3339268b4cf040c73c75ee447111a8a9c7bed1e04fdd966d4f2719ff89e6cf45c065260379a56c65ff51ec93a9f45a855f6a71195b95da632d51504402a9023e254b3886c6393a5bfbc26e9704b1c084d3c446f0cc5f2484c982ae5161f9cdac6ad2a43cbc14735138aebb7709aea34c2ab39a8e28a53e782aa37c4f2e3df93895e4b14ce29edfeebfff1c5c4154ca856c21b31bfaceeee8589d0365f2df4e89b068a9dfc04045db979bd96e320bffd8a2f5dabec742fd7c5c5688bc33469448c245d21cdf606ec0c86c3ad4663c08ecd317579f196833db3db8567b7cda931cd465752cc66823435b5886b7654dae6b076e72e777aa57ae03aab4cb520313aeedafd936fdbe2a0f5749073eb5a8b9fa46e473be6a6f339cb613e9d43f29dba5150b48630dcc4bcac4260392e0b3f1439960a14b79208d4e5fdd3ebdcab4b4aa546108db7df8501daad7c3da6ed81eee07cb46b72c232e6b06effbaf7c0c6665b39962c5d5acffaf12438f3fe57e07a3990ba8290be1de9cb13168d1db99b97d399c9e499e4f22290354afe9cf0c750956090fca9fc264896a8bcc4c71c4759bef5004915f497f3286f16affb3ec30c846adc5c26f2f8ad938e57147c6f36166db9edcc2a001df73a20209aa1a85008971e01138038e163524279deb608f4687076e6d07eae109935f70d4118b3fadf4e0883a54e448d14434399960c901eca57ba90086c350c73bc521135d8e82feb09a8e894099c683af7203adcd89b01b693e35dd67b6b6df13ddfe0eb5abb6bc66a7db4621aa6ff41de66e205a26039b7a57fc4cd3487c1ac2aeef0d426b43afbd1056b922a0aaeb3797603c312a643382d1e595f2030840f140dd572b55929f5edce6296802e132a58dc247771d3aad26b1d7ffeb6ec319479cae3599f20954f01375e01e587b8f0ed07d8a5785eccf1001bcd3e711156c6dc94cefb4c811951cbeea246a2be0cb1a69774df7ece462e8c97b5a0d7567030acf9dcda361132c8ae32c3e740177ae725f9ad87fd9892d550ffcd986211fa4c7b78b168f4575dfe18d25766565aaffbebacd7218d543fa00dd279b799da7184c88fd149ffaa177c9c1bc1365dce088a582f764ea677a8f913ae4e70f726527404ada0dfc0afdbcec89d95f9bf0820fd0c002f71c1796b5af2f1b046f27c3984c060c4acdfdf375efec64a03028f65de77cd570d66dff3402c2b43bc344273517c37a133b59e96c7df3461f4c0ca53a91bc581a42f21ed433fd97d43052fbc44a890cb06ea849673ca465241525f76d768a733c852d595deae8ac17e0d8a60e8c60aa688d717a2fd409aaf6b6fa55c03fed0e1dcaa61996ce8adc4bfb5e90db86513c84c13de48cee2afddf551425f994ee110637e6c74888eb0dbaa86c21f3df63aa4c3193ef45320d47251bf9d0e11c93643ff474c93bc01328aa108bc11d409fdc0806fb032447bc6e112f33bf4080e6f0102ad889371d0b16645b42d823510bbb0067fd88efd63f5cebb94a59de68ef9bc1019b6d0447dabd30b01acecbb9b22d7c7d22e66f869cf7fbe3c405827ab54e99a044df69e7880755379a0bde21991bc36ff1856c00dd2988d32b2df66140f2e1305b4630a51edb1d1a4af72330ca6e1e66f3ceaeeb0ad9dcb1063800c3986de2d8690a1f28a320ce7eb2fb648f4c0cd58aae27fcf029ef3da6de8e6949c6a9e1c1f592ff191fc0b18d5b7d67e527df3002acf91fb74452f4da3a97f89ad18c29128748971f9aa20e6fcce7f5db63ce76f775ade0e762ec4974a2ba775fc10001f4a793b1e31dae2d4c8d9fd61909c0f1908fa905288ca4839c9e62ac3f9eecb08fdedb130cafcc554b270fd246219fe7f684575624c962ec7cb7f461e371377f0ab389864359e4d094219db10ab152a150dc1e9d80210eca3974d95cf242cbb68eaf03d23022dee45003b33a0fc3c167c71d65a0e79c9166fe5e796615178f9d4258b2bf7a12a2daa756b836fa5ed48183d19628ff43d108f1fb3c46f4fa6b7b4f39fe15ca3119fac0a0146e768b7336ab7f18fd701db7f83ad68bc636f2479adcd7509bc788298bc46c2ea7295186cf68b053e7e3322b7d0274ccac83070b4012bc0e1a1a1ebbd7da3f70acbbb8f594e1ebafae008b16e0715f69c18542a0b6196fa25b6afbb8242ba34144d5c8a8cd3fb894196e2f5e6aae1ec8cde1aaec4418787223602806bbdf1f09361f8a87c2a99f6af2d626ed60e23953984248d8313760e83da4ac8fe41d3c314b40057bbb482999ffdf79a90d343870e94e224cc7a0ad6a70dd8f39e60d801f4be1416aff43dd8909322f7cb8cda48989ad43314c78ea6283b3daee0bd8753cfea9473ed7c344a2d776504da8d405054108b06d09ea9c373fd0949599a6a3f02b411edd8bf0e44d3354e5032672e14cd70772ea461b4d516cd9c516d99e91a49c50ce3163f148f0e374f5887acfc2c61351928e4b368418d279755913e9c7be177f6020a6eff5f5b07d88c3ec122fdbbf8f18435f61caf43856ad458faecda86576db949e1175c26218a69cc464b1f3a1680af0cbc4a64d671874c494162cc84edc477491804ec1c1ec58fb49eccf768385727dd889a08b2868d3be6b496b889959ada8c8630b5894a2a5c8c4d311cc2b8d57d1cbd5401641eed1195d6e124f109714178be331f1a5e196eb7d40ff5d6129c2d6efd30f567a5176beb0aea984793b84ab22284af3ba52324dbc5c2291ef01ba738ba894b49d39ca95ac30b9919df0054bd459dec69c9c81d4c94e01d19cbc4790e67f57967050d6869b1dc9dd445ca0dfea9f73d213688b69eb3f24832f037116497ee165bd3ba17ac39c62d035275c50ac21937ee75e59f56c571411717d41ebfccdb98a4aa533576ed60bd23afa42846208c534df25f25e92bd58e12ad3bef84795676bdf349507e2f24c4b197d5864547b925cc4665e8ea69a785d21acf12572fe74724690ce706719ada39b57a8d8caa3805c5ec8a66bef15fdeb20b1e05bc42f67064662e67c4773b74288303ac90ba7199d75f4d1dfb7576ef5ed8a95808651c88ea652e612c827f191a8b2141d60b0e587d191e7d1448853e251de187d018b20742f07d519345ee4f6c38340be11e66b833948f128e0ce351a14556f3b7a06f61fa92abb7bd13f16daa04bc692667033f777c1f5ced1549a05fe98a4a13ce9d2f7dc62a11fe8f311a608b3ac83a677c54c51a3feaa5f400d0bd74fbf968e5d3c648f588eedc0a15dc0c362fc781b22aaeb909711a4d4bb13946622c604b78abdce8cb48acda37280929902be580b9a693afc4438a476ec360874b7c3d20097dc9d991d9da7d78e04825238f80dbf068aa35c537a928ffcfdcfc9b9bde8b1ad22397f3bd063a51c71fab5aeb47e7f8f958d796be0566512f0512dcebd2e12f3160b05b72ae955444d618b0cf993935d13601c3570d9405798f6689eca8c6a924079f539b3212f30221f9cf9d03442978c830b5834016af37c2741d2ecea03b128ec166874f47b05779cb01e3f49d56686600f7d34b72a0d254a82122b30237957cd2fed744880eed53f8f2351ba94f18b5eef4c77e4c7cd19c9f105904613125482096fbc078711c37200af0b6fc76122e5756c056e8a5ce20a575422141ba3a7756c975217d896c99dcd6a7751b6ddd45d6786e63fbbe208777ba7ea828254d90c1f0d4062bba66f26bcfe9c46a98e272e8e41233da286117627a4ee79924f71b1ec788ece78693e7696108237e79ba5c1b246c2528671877121f638df91b9f7cb998142455606bdf5224b320db92dd67c9b3cce65b1cbf1cf3243d09ec8bdf3c2efcf66ae9ea5750b2a54b3ae676c41c810cc4c5d69bbd8f82234bc9c7f80eefdb60b01f09970ec2174d60d04397f6e0eda9e4624f769c354b97006c3fe2d70e6b6dc1cf58c8dac9dca7749f6768fe5b4c159c3a1a3fe3a4bbfa0b6f98ceaffe4b6ebbea4c2243de9f2df6e6b68c32f248da6ccbcb4a2c545fb6bd22872df255f80dfefe5825e256bb4b7844d5544d3c4062c685d747cedaa367a6437f93669bfda61b7a01362ee8ddaa79483863959fef4949f6c29b539e23874730e6614536d8d191fbdbe591fb62a56a4f543cb4a391e8579d11c743255c902089504a36ccf61ae2e25cb6b414d6e6dbf8bd4222cdc4da8ff7495e25e6bb1cc2ab41a0b3b4e1dc9edbe82bfdbbc6c93ea2d80658a5149a5383edb27478db779e153ef7449538b1162712a7e756aed712fc390bde9ffda232d15386a7521a5b1355acc051c44712f97270dcf98bfb8af95354c51d34ec8cae4e3f2d36f91411e2fb1f9e63e8a98ca94c671dbca2397f4246bfc4acfa6da43678e528cbd435466d640be40378ec88b5f379fca96fe50e8e54de8cf666fd936beffa0bae7a1a53133f0633b8db7c8190263dfc381b8ac34dfc458091e118e4aef1f24887511fe284ca72ffeca6c621e853179ee15b973801bb6931f82f4be2804d5261cf0fd25f22b4e6bb275175c3fee88b474d96a6d739f0de23a178134780408ed9ee0cce338d8ce607e171f7f264752d97d553161b675af8d82671eb7e1f8a2c237cbe600a2590d538b37ec937b98763030127719f1a586dc1ef9340e0be78aed0e3bb344d7b8f58f005de660e5e7dc01b697a55bcb35781637552c029fd9a8b64db79b7780fd6d5b061275ad0d3e6c94376c21f0ec2f6f85f4046c5b45d7e46419c80660442e5cfec5dc01449ba40e30da1a55a0fd9a526f7e8d5ee1a4e726419df45cc8cc55acc16446f2eb3622aa1fc728a732a67f091dfc78695b65145693fec60577c07944ec0cd5b06b86be28a7271e81708ee57bd7974ef4932f635ca367c36935c7a30cc7e413a38c3482701122854a205ed492e57795694fabde20b9fe75f0ca89daec9915873315e8766aa5dfe46a0bbd55358ec3d82f58818c8b1deb6303fdaf26ccacc6b9c9d049a1ffaa87c349f9546e4c1ba49cae765875831657150897e18f94462032cb83000b156a41aa4fb2cb29c0d4416b4e70d8a2f1ed6a146961c61e2cb04b79a3f7b5bc952b3622e4fdc98e7701c3cc7710aa1abeeb4be78c2007da7c326e16b7f40fbd68368db270a3f6a45aea5148911c76e5d0552316db9f4bcc6d13b1927142b61574d36fe35b6dfb7351d71466045de30c1176192abca53bfae59d3d7438a853cca349043c0d208003450f33ae389b9a96689556aa99f97f6ecd163a4473ef8eebdce27345ee872c5d1cdbd7a8969e438bbcf9011ed964be300ec7d08b8cdf0e7806e4e5866769a888c08328dd842d85f4f7eb430ee4aea0468ef825cfea407c7e0b988188de8d9b8c174f4dd46b1208d800b34403229fcfba37f1649bf5da7f02d24670d2bcbcae720b866f15b413753fbf992b85fbfef094f0f9b3741575c00e4336d9ec6abe89418372b529c5f974311ce5211ad795aedaa0593ae4b2d8e6a946afe55f4e5bd30166594897088bacb7ffde4d4c1e2aae96315a237234cc9adcc3fbbcb2d25b35ba9e844fe7e393c6d850cdd8a238869bcf8a4293a7031984aea260856d5d855675123bf3a2c0d7699df7fae9a48d711b8e9359b40987874b27cb27691956a2df3aaac65c4f06213e0cdcada9db85b3d6da34e9ae2229dd984f27978f3d277a770f4e6cb1761d37ed30e82e3fce891376bb5538a97a4fe5122f9cfa1f6137d5c7fee6761b9f6de11d0e01c4d406ff5aa039de8fcc97636562ce1396430dee7b760e5a2cc1535ee976b010b990095150fe5db7363f03cb262f3475b521cab4342d4792d6cc195816a21dfe539a61e5bd382ec9752b46f1f0226aa89de11ff1c794b277bc637ac32f465db1db1b952569f6b4fa94b8e63b8be3779696ac950dfd5256ef26affd07fd0d7913983a2e781cdff833da0d6d13be196325eaaab3709e103ce35bd72a8c489c780bd420b3459d9b015d915363e0526c373fdf02018372756a3ca40489bad79e6280d5f4acf6b5d3d85effb14e091086facbbfdd07ac402aeae0495ea3fa74b93f5ce5dfa2f22c2f83206c50b8f8bd0cb4b1d0624e54d2d6c4b9920cffb2e59518864a091ca1ca560c892257281424a96dd95bba5de4ee22feaec637254cf3dbf4e64c99a26b56f17a8368ef27c50c032e2ba70cbcc25db6a2a62f069e2e6633dc6435b8bcb89aa7d6f585403c733cc2fe8ffe81f458e639b78b13a2f1c20644d7e84b8df3f05c2127c6c271ef867d8fe6eda6418c0d53544644bb32a66e9bb7ed5ad841ce7b650675e067abc8669712ed2de8730c486bae56b96fdf469cec3326a222fbd6c17dffc92abc15507c52f21b370c3ffc73f5f0efd277d158b3c2618ba872e4912b6bb42a8c08d80e2e76d778f35acee5f5bac119771a2f641be5e923550f24891ff9cca0ee951b8ae5ca6b0d491a484f3682cadd90a121f23b1d72f78f43e24606edf03338a9074d0a1753e12293d5c09e14b2420554d18b7d32a40d3f54464e4910c7ec528dc4de03253afc640e9bc2953a2251be7b64b648eb296f4e8b792b4e2afad2258979c53abcc667f9d3c5dc83bac211a35e05fc0511a625a230a3657f0330ed97e44e8b15a49f29c72a7997d05d398a9d45dae41a6cc635258beb824362124691e86cb7fea46e4ab85bdf79e4eb30c492770bf6f0c42ea9bde37a0c011147e4fcdbfbd15c86dbd3b3ad210c272c4ec86c3dc1baefe189885482788b23d678d0be06226297108dcb9f6a64d802e83c9d11df24b97f8b7ddbd1ae0c85107a4d10c1b10af1170b2d3a66d8d364dbe6a14b6ba55b7a0989b2a91cb05e8430c56daeeb24db06433e6229ef3f93381bef26db60d68f85f3a4d2fa1dd0970feb7e81b126a6bc298573d59e22e9cfdc2bcb7354dabce763a7a482d7bc55dfafa96f30225980d5e344702ea4e71dadd971422fbec09d8c9b8b516c46e1895dead25e23086cfb4fbbe9fe1440262255b5571b0221fac2a5b50972385274b23a4bce14026b465d523adae52f7cc741f0fb442096866f735b3a88d18e005d199d5705597454d1ee05e680ed285fb2c2a630a01790f409f8d6b17034145a8406af98e0f421c9f4f8914a43dea7f1d0ed9eded2c99b74af983da228647567d1c09895c5afb2d597c11eeb8c7f533b0709018c44fe5d0d499cb8951a29572f2d917fd61d50cf7da292d353c199d5444060f6c35d7e7ec7c04c7113ad4a63bb7ebf8ce451a01fcbfeb3d8094cf4d4156438a60a8510a7aafaf08da349914012ae93e946c7674bc6916c56959358f9b459da39e9247e80bfe0d037ce56c4963ca355bb84e96dfa7644057580008dec2b098ed6e8a28eb00d5a34951b3cac0f42474d2d271e79d5e400c55c50f95a54825a9ca5906809e09c5163cf126411512b80c364b6cd558417abf63490e889dabf364bcf68dcb6b775aba60e3b34bb04ff38fe8bb960c7ae172ede24c534e025ec84e47cf9675fde9f52457a1f1571d1c75647c8b83e98fbed72c555794528de102cafd3c972cafc222c883a4570fd608ac2e6433ccf9015a05ef5ee338328ac3415f4fd6263c0ba0723b67735ab255850642326cc7b76a138d9b5187c56aa385f29fb224ca309c0551e19587830b26121244596f1aa144abecd4cfbdb267429994f0b680d9b6db51404f70695656b2506ea96bd32c430b5392103bed85b5028ea6f6efa2fb2b4414dbf99a814b41a49069e5cc31731938db1bd228afb5d04dd5b726afe3a4fa50d073647677e8485782a28e0d0285905782f89f186cd9458eff33e489db4dc0ac14a51496b5a3c755879706a0aeea54d1eb96db7dbd5691607bbbc50fe27c0a9051ef8e6db3046b291fb5e429cf07b35295a51beb09b4204ccb9d4c94a1a634a7f8c1367df890904ccb8dbafacb644833e171d4c2ea888ece7f76ffda8162db7da9b8a14a1ebed33b1b9cdfa63c9690007fab9aa7c83a494ff7d733241a286b7bc54453546e15a06e7051e6ce8b050742c0a0d20c4b4fcc4bd51cab13c46d611cebd2d12f9f0b84717a4b44b64f363a7554f01f52bc4fa46c97d5ac2c28a858eb7e128f3e0a26fbce89f79dffe1b096029d27e73db3a05e1ca090dacfbf7fbf61fc51f1f237ee72e03fd5372dfafa969509a6ae0fc9e845c68fbc9b90e14a011b073fbdfeb0c89640fc62c4a2e37ad8873afaf85b579e1804c5d782f2469dda610f2a27b60d5bb28b502ebb0143c7c863a1a33aa2f5283151e360157647f187fe74afe3ba960e6409dba78ecb9457e2a4ce2e09792b1d2e3858f4c79f7ddba62de84f666ef3573756ef6bb4644da1b3e520f9c93051e36b12a6f41dd040c2c189ca6714659ddc88fd0bc9c06dd83bb88f3aa51e7b0221748b5dec8cab492d569cabb592110df4f566d160373aec9c6d2d8bae6dcbc44dd71cde5c98a2ff91c1c10c895403bc36f92ea0bd8d6dc33a4e2a84743b8510df0f21a8a2c639cc86bfb15d70deb03128f0af2a30377924abd800c5a50c39604b99346d7d99e238829cc82efa96a905319872be76c9ef6947a76acf9f547b4b19e1ef6d4b882eec0bd58fe195104090e74d13ddefb93309b418b2f2f1a8ad39c0859d488b25922f89167325ced0296cc08b0d191999d69e77b863e01a7d5194e600e88fbad69eab90cc1c6c065ac61133dec8f062c06c9fe913080798470b14e0c03ba3592fc6c89962d614da14a8f6e7b4c1e479d14776ae9519e9e99a3c1247601113f4a58d0f39774ab0c89244b622a99275cd5109cb3edb13f78ceb6725904cf3520bcc53f7c775e4e040682bb79b29b514bbb425f5f04170c100cf0eb742037cfe0cf8de1ae9fb3ef3dfeab073a7b1a451e36f1e9f8954cac6d399b55fd31ff87886df7dd10753b39c05be8582deddeaadd306661060a19c8973ffdd77c9ff0041e7d4a5b2a62bed1940381d6db71ae298e90eaf00fca440897045e9a7ad1d2efade6cf8585cf0362c1e0bea8cb6d546a3b3ec3be9d3d9513747208c57f316def3a92ce81a822d3 +MD = 99e458ded2e24f962e1d576a8f292c013e39bfa027850d1c4226f4788ec278b2bb72ce76e5f703bac0e1a1586232eebc + +Len = 73912 +Msg = 702fe9473c2348b782c930b5a549365201ddbc392235c337341b00fbbb53311a85c5b156dcde4a1f00334b5ad467db62d74f8d4c56553570e01af924fb60abcb1526560fbd14166a131a2deb7d5554379c324fce7fd5c48f16bc4d7fe99fccc6099bfffa479054a0a5c8fef00ad948d93acc2945047e199ebe472491eeda3d124a6cd4a0e319abca9d83e5f2e2bc60519766443b4f18dca4bf04a5e473d7a5b7bfe1fe88f776c3efe2940a786dc543a69d47c837c76bb5aa033bf9ffde5fadbe4f42a53aed7045175e43960a13be99e032b9dcc2d43e4ab77134476a983afd2ee4d6f03f2bcfd94af8d7b1303c6d0c084002a863de5b46d3f136b8ae0a303c0f65e6081e1b5b2691989a8273509c4224ae6b55a24d884f066b8a74529b091269b9ba155f23dbd5f326d2325ab711e33f643c0b078a8e0d59c779a2deb28c2945ca9a3e8bad198d798bc8e86ed995985e4abdf11bfb352ad3ed496bdab98326aa7fceab2920dbf72aadc4cd351fef098b4836306509444b7dc642f6cf17b4b4a1c09d85c1e4eabb0e750d0939efe9ddcd46eeef6d1c851a5d38ae6c4534e779317551f4db610e802dcbedc302b249bc2d2c2e57bc9dbe3f7e2cd3f4c278e61d6286301f00ff0eee9098aa2416d1d850b1e23e90d9f2b862e58bfbb7d04b78493cdc832fb726b4ae3ec28d53ffb25e3e635066c14c853b2a9c3b6cdcf61564a5c85d914b893ec6683f33de7845bfa3314b5fee139ebd0f3faa266e8cbd3e73d80df2a49cfdaf0dc39cd1e5bd6e5f6ecf70f51dad5601fb4a17324befab2e6d8b1384024a9be151685c86ea4804f988c0dafb3cb7fcbbc8f3eb49492c4a4d1a65e3f9f47ceb3c5aff873934418ff7baad915a935b19523ee12f52b26c2204410f843bc25a7629ef2f26d20cd195c0ca3e9ef86abf342e25bdeb35ccd6b9b9ac30fe30b40dc30edaa03f38ba20a0bc801a08bf090bd5b7452e25dae09399d521715ac212bd5a54e1fbdd5586553753a6ead796b768845566dde72935ca4ac1697a9fd82391c464cde80510b798e3ed02551364befeca704f71380a15a452e44cf2d55930b288a4650ec15197132af25e04c51364f42e70c9932165c6493ba59181052f81482e7e731618006ceb97ca809ef58af27239bd9ceba82291e08d6e02d036415e7a3f59bda713067f4bafdd30cca9b1afa271bf9020d829be91cea6658770770f70429d0d6ab8491859fc943836eb70e5aa60de6cdbb662958688b4834ebbb9db53bfb1290711b27f3d05555f83c2afdab28e83fac34cb55ee4420224cb20ef0c4b3effd9252629fb2052896c5c3756d8e382140081a10b60d685f70fa9a601e87f48eee76cfd97d52a6c992868504d2564c4fb47bcbd4ae482d8fb0e8e56d7b81864e61986a0e25682daeb5b50177c095edc9e971da95c3210c376e723365ac33d1b4f391817f4c35124e9ccbb94cccef95367b84c6c2792a9ced0630f51705317f4920dcd68b367bed3fa4552ce23ba5cafbd71f00e954c7582724afaac02aece77155e4a9d0989f26e858cbdcd6b17b07b078bb1988da79b66c2648e51f91d892c41f33abedd70147df46ba3998a2b1c3cafcf3911f6ec4303297970473be8709c7e9643d116654d88aea7ac3b6a3fc97c1c022d81ba6497df10504b96b257ac4e350d0de09eb0c5181b0b81baf19adfc2b6ef38f0c054bc84ddb2c54744b265cacc2141f25c99a3b4a35eca1e09868597e55d0067f007dd7afa678660db40c299ad9a8710386810e5ae672e6f9949e38211132ded32c42047cd3737ec5e4aec423e4086411a643332a4ef56b6882c220ba2da688b6ed2ad75c0ea80f0b5180b4de9dbe78dead63523edbeeafbc0776aba007a59488c7aad8c39470876c8f24643153251fc90063d40f19c91442872e21893bba72c74044812a21778857f20c5ab290e6d97f53c74121951f39ba865b3acc465fa3f0fb8a59162227726c2e9b10d8f37e365ffc00120cba4b907289704fef93ffc8a43dded90e130ae60799732f1ae755a6e97d90df2705f8b919051fe979b125314f9bd47988709c53b8c706fe0ee907bbba6d1c0117148103fc8dbc9fe13a6a7e51a9edc30bc7463bfe3bd9162b74fed5312ee41043428f11bb97d8cbbc8c3a1068cc9d4e0e83b30f566c5bffd717b583fc579b95323c6d62d497f70572131e87e398656307324d6e4fed2223b84dc6685a5b94f87a5ec657c61289c5988b72555071d8aa9c5f8fa94912ae2a3593abd2f9cf82c2721604910eac13849641f0094e0d599d2467e470e081626bd565d0544917c77bb01eb28f1ca926eb01c2f2042abf7ab335f8062594cde1612e40de7cd6b8f59ccac55ab28ebe364151ab02e6750cbe75576c4f67d44cadb296c110ad11477fae18a6679bb33fc4200c569d10cb69976bff514a983d7229d8a54321858737c818203e63bb58c2431f98524b237c7a980f942362372ef2d83be0538b66b70e817377f9c981bdda55989c2a779f36a422c8cc7f20d527334b64ce8eb8e10f301e389665139f70ec5e137e4bbcd4587aea2ffea120f2c4a7f5ebc64124851e4110eff20cdc55006cdf18c5328563707330bda155cd0075e56a197e0778c362b5ebf2215d8e52faf05b30f78b6bdd0d01a8fa6af9af9eb9601aa64c6e000c6b1311f78ae3a419bf0b44d48b92daa18cbab55ea209231e0dac79fab7d164f095cd1568b51ba809cb123e7bf7f54c418e02d862ecf0d21ef12f2a9f56de11f0715888be367224a3ada9baafd33f4b4d7f8ea49fb26d2711f26c8efc8fe0819c9c59ce6065938497e5462bd893bd5215df928c7d78cabc879ff929aaf9855e4565256907e8dc5226f05c049eb01bfb4b3cd30274d695ece038397d12fa38e28b6a6feb1d36d908016d6ff76aceb7a15e05a4a92e226b42cc79b21bdd2877c8ff2a7dc708b60630979af666b5363cdebec8abd302029758acd3076851face7bf113f37f630cd0465a2793c5168d082dfe043d3288edb698f1b28df539e7b97601b55596b491e3c3d991aca4f739a5f98c36fd2a3b4a457e4bb6da44cd85a531b19d088f65fbad339647c588efd282dbf9df503c81bed0931b5e50d9a54b2e498129a0dbff90991000d852d368de4b3fb77bdaec04a1c451d0f7a62659aec137e0e9a30ef9f733e3b9c1f936eac35bbf558af1bb2c99bd450d313ead4336ea67515b838aeda60a1911731d05ee1830b5448b391c721d07e730997ee10a6a2652730dc6f23303883ab88a32d2fb4376dc14fb15a27d9250a2eb7f0b6417bef1a3966ee1b772b63ac30f65df209adb7a6e47691bcf979004228e7058a8d3bbc8b56c0d685d15349e4c96a466713556c8164c43b00668acbec0aa0beb21f6d738124447cf55a2f53f31eeb48d47633bec5ea42976d9593edd17beb03751d997bc44bfcc9b23a47e7a0d6814a8059d016391df68e4dae1cceb924cfbc1db0483c1c74f0a30698236fb49a3435b4e5b2daa7a6ea06e6dbadd66cac54d1f0ff001e514727f4379c4c51f8110defb8426374d52c26e88242cf6db1bd822a37334c892a6ba9a28e7049f731e41361d4976b4a8b58b01d670b09fb51fc62b03973b1e571897e965339a2c72aba4f73500c50c693d2928cdd5fe4e81513fb4940e8b99aec48afb9ce22e02baa3cc70e73cb9c4eb441d41c2e66e79cc2aa55de92b9eb10645142f247508a8a7812851886f9d64cb54d7cb7a0479a8023687958780fcfafa04b422805ee284b5de3917bd1c187275f9f94447d2b85fafff66e9d3a12eee06adfb445512242d82157f11d9c4936477adf23aa0b3931731dfb3c9720e9cf0988b5a230731461988c17afe82fb96b14ceb532d3939a25544620ec2c72bdfb94c37413d1b3ee0cf365cbd3c2d13aaff622c7c8a65c75e903420d854677b5f8e7e3c4101058d5cc51761b6395ccf488553fc0ed0bb0f306ead9690fcc78fa506cb04fa0d5acf3281a85ad6948660e8199ee46a9ead53c036fd3dd93a6bdb38a89f2bacb08f570a8b65b2cecc3e8b01f2af501052b147768fcf71017bc8e092fa870b099917c74d48ec03ef5ee9a04ec701c9b08b7b5ccbef80eaba6f63324c630f3d71358892635087c8b8bb1c32f6fd42db9bb7400648bcbe055453cf32bd78943d7404664ae528d56bcb6f4ac5c30bcee06244b3d675adc35b7fe761847eb1a285929415435b38617797e9f9eb1b89129274d24b3fdb095d578d88ce89f894d6a05d432a2e3e1598769ec9adf568ebca4c73ee8ab4c175d8841dc66ac5c3989d0824b0297df63706e3507cdb7743aa3288cfe7d6d7f169c15ba10ecaba58337237996977952c1319485d820703345b07c1e94cd41bc36bb458a7e072fa3f0bd2b91bbdb90638406c1ff657c51ba364a6a260bbf6f2bfd20e05a2e9d7e7d0784b073c4b5263b3356bc4eb8c7a13295d8b84c683a3ef6f534aed12697e15c50f47ac6b80c810156884e18d9eba9c2ebc42f37b528f842a65f769870dea06854755033a0caeade76063f06ceceb193be759790fa70e33a970a0256145903c89a70fc6283d6a9fa1a3757bfa15a00cd9953b8fe3dfa4703509b18b418ef52a5ab4b44fa6918067cca835dec5a75e09701c6592a88ae6ec8597c815a868ad4260d70f1a45b78498c0e521b34ff099719803644bbe2749faf3b1305ef6511d2744a45cb075fdeb9546f0c57409afd6e7c9d0b3f5a543421e07dca6b1cbe6b94b6ea3499cc80329ff97419dab73239ade8e1ad13afe4d63d84a7087d889882621573a4259ac35c43a6a6e26c42d0a59c84d28588619c423bc3413401dbfb3d84b96ffd351a3244ed818bcdd4897b298379faf96519846063c4d4b8c0bff08441c965a692f3d4d3e5b2ad43dc333bada9eee172747ea319fcb0e7fb82da7d3fe36ede0904ceb1ef726294ad4ae91819570c0d597b39015350ae03650ed4ad56b0cf618d5253d281deb9c671e7521b55d5fb081443f1a6f7a5e7af5e2e5685b2f115769a46293e726fdecdf97b174b496be25a0d944f9bee4483734ea8080f39ed67a598a6f9fda86efa31abcedfb1de61e989aa35fbe71e75a9d79d459152d4eeee77ef3b6a180d233478f1a75353fafe3a1f55f09c9271808164b3cd9a566c3ad17308cd259688d5b52c32d01a3b868bfaa4758bdaa5ceac34a1f908ca24e71a39224924d17f00cda4d4d50fdd716b50549e71cf5f271c42ea17d5becac32fd64e0a1b0717dc5f542af9442d44fb8f956e97b384d020458aca4cb0b6413b2ab637b5e73f9fb48cb06f22e6f2f6e3dca27016a272d89830ccfdcaf3b9d895c2021dab1395100f6f299ad723259c3139be83a4a6601d98c550ab19048f37d8de01277209ce13f5f009d4a16390ddeb8d33cfc827184727ec5dfabf4d00050c65fc7e942fb54f6ff79644060ef9621bc2477b0a8d60ff4e8d3d154634d4ea39413b4999ef116d846c1a13908c29d3c8bf43aff24101ed149036223623d290685906b107b0a9143d37db68c746e8d7fb6c6f9509a9c3b881dd914a1581c39ca195a5de68d946eda040226c32a2fd16bbb11252d62e6d089d5d96b46db66fb9eadd5ff743d4b09fb87036465909323910767511e138c98771f68c89c52a9e8d4d197e252108afd38aad611fc4e44de802a3e1f8b3309ddb0491bdf0a64518c0d131488f89dd0b3120e0e91ffc9917ca9a209c2fd37cb2ac5e176f12976fa4fb7e0d065e03bb8b6081f2176d88925888dfd5eedfc986d0a3886eeb1620100ce65d96ffb9170af909b5c93332f035d8c9daab21301eb5be6789807925c990162875b27dc94e321bd3c54f8595bdec5e3691887c49597046a1693360671b578b69cf4ac6b52f9bb967b86a54bf761eb4770e56465302212ef93171ea039dcd3253714723a643ae9d6c9604ead8a332a03359fbc875a22f3f16e8215d22d85ad58c658fdcc410d18e8b67048d07cc92eb1278614ad8c00241a1962b02eb52673abcb30c3936206d536c345286747aa55dbe756e13a3e402fc4143762187955a2a8c61a48225fbebb5b604d61d4834d3bddc570c6dff9697389ff8ec021d299d6da37941feb827b17c12e07899ab8384d51727229e145f29bc63bd74ecd69496cbab02caf6182e297027cf2044c4ee206b14ec97ef09c620513498f629da60af0c490527b26c98ba589ed9b664bcfd0f487eae55a80754e4bfba935bff50144ff72789407addebcbfe1e062242ba38ba34fb764311358fddce9eb589b76039dd56ed96fd9693b1c628505f4c26e72887f6334b4972bc017345880669983456c3ef4334464db571129fdbeb1c576b54df58d0354f12c3320fee1f8fe3ecf1f3688acf6c03e96cb4172b69b37b1f6d442b20773c3d3a73a9178f0c57e0f9c29934f13c451cb0df013d939fbd4fc41581d117d269fb32f4eef5f1f7664609cdce8feb30c879eb37e0eca12713828f8c923b0589c372426d890fdc86c5ff623a1de13f53fc02e19bd98c1ba9bdfac8faffcfb2445288b20603cf18647bf14c320b92b64fe9a0dc347585caccc1a1b78751f7e5aa1f26c9e9e29c6c37900611dd220a18c9973922293b3f7639295da4590f1a68633135d03bb1dda1a80d24f862e9b22d6c0fb6fca3b423e798fd18d69bc19f0118919b0f27f5fc7f5ef93548e9e8f0bcdd5800b2ca6697e49043b99673f0f079714542ced23860ce025c204a9ca82d8fc77afd8cc5db0437c905282c0923749715571055670171563b3fcd46a1b0d26cd07e97d2bd9bd3a6ec4a4de086e29325adceefeb0cd997dfb2a924832088451ca06bb5cbd92c6afaa11b10f912b5b5e9e0b3c6dae9473a300ea20d4b42b9f067e0493fc0421833fa8f7f59c1d42542ad570d7c6828d3c212f83270e42eca3a1438201cf91fe794705f7e107ef5b9a237b9e4fbdeee05974d186235970d438aed4ff936be991ff722b8201d799cfa3e4faf412a84666621a9153944ac07ad4ab8cedb7457d84ac3da436e68faf26e7cbfe12bf1a1b57dc9ee98bf856b438fe13e5ccfbe0b03ef605ea86fd9491f9fc54ef6aa387e06d2f5e348fde11cea71b747a2dcfc24439736768e2b59ad4a1582c397c6e7647fee0e51cefa3e0623db349b480a16e8bfc9adec9dabce709c5619e76b88e79948587d00d1bf86721756c001f561f5a0a00d2d877ef622d83cecf4821bf71e658a98a9b8fa529fa8ee69c34251ea7f930deb1e0ed9143b2e525f795c4e1b75126d37f941f1bd73f0cf9da52605ac9d0b2fece84a550e03b90835123cadfdd4e718bcd7625d08e892e279ce75b9af384e2d97f3039beb60c384f826ebdfa4242bb4afaae5e639e8d55185a6f714fc36a53075a70053b33c92ee2f1c328d184b276899d990355a5a0341499674bf9a8158600c6d0b246f7e6f6f635ed75f6233235d01ce2cf2722562dc4e04b36291ffafe4e7abeab6260ea22f1b53a2fc89c266ba6ff080c58a333b4a1b597da4ea9af2e58bca66b2e0d47355df635d0d95e23aa86ba75654a96bd5b338fe9a2dac38688a823347c0a5b72a0937f6ce398f7ae54f7e5b744ad7b57a3e2e59d2a6dfc35afc534d55877ea20e75ac74bf297e72b0d62f74a34d1cf9701384d4edb78c221062867f58b0727a68bec546f6856ab2e366075aab05811f005bc2d6b207ba3dd2e5a33317e28a28800f0bd23bf45c21c6268d76541c0d10723e71c6ea3f71fce8ad33d05bc6cd949e8e0581581e5aa9a13f492e6637c9b20ee3180e5d06b94799e1bebeec0443a60a633bbb13ac6f31bbd8c3eba801bbee1c733f15d3059b062faaca649243f4470bb735e93646a0a25d1a8416e31fedade3156e4314e41e21f02fe12c152be95debb27c718793f7e2cf2d1315df3c67d5acf22e00e74a4b8025998a7d3c6529d1f07b97bdcf3c7bda5938f85264fe2f4fbf3106b416df280c150f4ebfd099bc8c633b0e33d5e834724363bc333a0d4f0464fc7fc7674cc0ab0abab35b9a6eab758c196a3d63402b93d4d8e6222812cfdbe3781fa2a33918464ac143b75f8dfd73b23e31423fec672355bcfe86f8b5b5bb83cf71ab924d3ac61e4d863cea9eba701ed1eeaa3293f00b0e3a8cc7709d0b8e8d29fa4bfb312d11ce8603520248ea5319fb26dc04ddcf344777194d5973d93b49ad44eaa78df911a29342626e339604e9e463427d740b85489e2c7f7ade25aaff84d6f15f08a7ace29dcbd2f708c66ad6b32c4365fdace558d54ec79d87f9c3f7d538c6e94a3dccd5cb270c656f806f2a910a478323bb3ec144068c88155c6e78c9f3d30dfcc658c446dd76800fcefa2ba584b6a08b3f77c915dc3704315793cc888e7f95c64738f735757a0f91b7f4231822f984e04078b96d582ed983f01a39399131474fca54b6c1777fdc9c444358116c76f7c8c729d97703dacfb231eb08058453ed40569449126cedadd97bd013b9eb96c1ebda72705864a3ae6722ee8113f04c4d40f4e0f74fdc2b4bf066839b3726c1a9f3843bc83b04f23d49ca0ceb8c5d8430f8ab200aa14da37e880d443ab4a5607985ca6c2746692d4501312b909751635d0f833cc82f49bc0d4976fc3658f1d9f74cb6edd6a11dbe8e365f34b65d56519e2e841c7a2257dec2ddab91d84a9196eced4fa61d75a80be0915d10a605f3b6b9fdb7a867a1007163e9b4ed68b30dfd1f139d7f43ea907e03ba32a5a8b8b1fa772323c9d9d5caddb91897f62ebaee785a64a96192275f7dbe58e6dd039e1685a049d06516e53f8b8c0f5e967188bb6e63887a3250559c72db13829f01deacbffc16c76567fae7e1a47911b47b44fc47032818dcc69bd0c420950cd2e8a1fb1152330fb2143c4948c8fcb63892173a6a02ec8c453c2282db56838f60010e8ae16c47b03265d2ed29c2405709ff29fb41287bdd57f9113a1f45881030944ee19810fbb3cfa2e55bea58eefb110aa1ca333d7e13f8479181f8b44a992ae988889f07f71f70129c1cf553aeab37faa82ca8089c37126ccaddce6c71313647e5085c19e2fcfdfe20b7b07a276e631965ab08527e508cb1e3d90936a6e13cf88de7390d65535dae98b48597024c7dad01cebce3cb664e5e05fa11d891b02442a7b09dad272b7a6a2d9cdb70e64d6effa31d2a832c8240bb57ca4e1ad9a6d66e5be8f0bfd18c3b7a07f519cf7c7a1c577421bbfa49aa4a1002d029c626cb3bc3d319990c0a7e88254d4aa97a6cda70fd9c61d70fc9e954a42d9408a22228398b34ca025c7b0a49b52820f2395d7552384266e78c554446c0019f547873c4b90ca9849277cb376670bf015cd6f854ab518eb6513794c508aca678760ec1a7a49057ceb124a30ec89f3b744f17e47e6190a9db7fd82f7382b043a7d42cb5dae05d6930c72dab955589c30233c6c9fb5e3dbb5dd739cd569d1400b5d89cf66457bb05323c588ad6f678803170a951d488a0ebc2c32117773f1f0629e9252d4deff4545d796ee9d994b2998c6e892210c9016294aa57b4dd511a7d8b6e8e029e924f7d38e4366fa415803798962de4b708a7485af4a44d90bc4d8d64d1a01c5e2713a84ce67ac541632a82df4e5f40d22ddbc49d08d08a9966005c3a792324959689ff1fe80092b864f8a1e8ffe5dd681fe5fee450a312ff397b1598cedfc14bc7f9a73b50917f0f0232bd3b12886581c80d1fb733e58eca1c05de03389b9c89a1aacb2887f53450231ffd61ed107d250f9b4f9e195da503f6e8df051f215d560ee6916cf6f45883b1088ae1fa45cf5ddcd6b5226ad400b1b16a4225eb37abbbf6f32191045693ae93358b43a0ef033017077aca8f1247dc34d42cec04a62ebf3f1aa41f18e28fdbb1ee291046d5c1a7a976c51feedf218c676ec7e0d3358f6ad2a3429c9c61f111f37b8ccf56c0b0c9786bbfa8f00336ca327f3b8bbeae76c497d62292f79c64594123db083778789e6d2e90edfd452f9d7d51b0752ed78ad676fb6d8891588eba83303f4351c5c22e70065f767e6eb40e302a4d248c7a74a758594a07d260173ca1e8df090c6f36826a3d54ccd9466c2433533a223e5ddc3f2339e296227ba8e78394e4e1d03d7ba141199976789500e76e14a0f7ae4968a7c1e35dbde970e9c4127b755405f83a93dfe353fcc123175fcab4a7294205c3e6189fe2048f0881da34e7bbe913681a612ae2ade71eb85a952d7d7642645b930412b599f47c0b1931d21edd286255c4120c60cdbdf61b719081b536ca7b11810a966cab14184158d2d56904995a87dfae6ca3db09b1150358aca50e47eff034ff8b0e40eccc71e7c4231058c564c5143e31f40050b66eb8f69895274327c055ebdbe17f05fe656d0fa65b0033e6d90bc8459b631c6fee3a712bcca8458d498bd76d2e91e618e393bc4492256b4a896b578fe02ef4435c2ed14f94bad688527fca293c9e1780b401d2e7fceef6f69edcf0f70b86619a823f1feb33857d80a5d8ccf755cd21a0a05e5976e2845b54e0089d656395eadd261362e6f230c2dd083fe5bfbf468bde6e525ad98c0e22ca169465c1318317721152a22a19e42d08445c1e69c332dda4e887dbf842b5d4c20a2b51f3bd7870c20ba5e79ef0c8476721d67edda9b9a059d4a2e7bb4ca1f8a3827367e44f9b7e35dcb43a2abf05976366560d04b9025b64fb4e830af1f916d54714b17a2f14c8344b26a2b6cdc2a565dd83d4c43b36962f2531b9cd7be6b6c021b7379ea50cd62521a3282a6328fad34c06da06767cda2119f390ec308f61ccd7040039f8ab317126d5d36ec95f1d167c8628b3b3fdada2a13d114f591d9e6133a21431711860812261ab6b478e969735acc4b13ae09a1a83b742de3db7f6e7fb3a7b70587cebbcddf2b80725ddeebd3e20b8ea534e26f188082d822686f0c6f8733ddcf5fe5b891e2e032baa75acef61890c44466fdb9078d8da215ab11466f2f6635f8fc73752afbd93c01f7e5897648fc6a95a6a405d1bd14fa42261ea2fb16af5e06ffe077e564870accc1f7b1c10dbf000d868ddc1399996f4c6befb8afc78f946decc5475dc77a3d9f9819ce62d15913108903b2599d8b7f78eefcedd9cc8797b2259a49e09f1332deecc435d83e5b223320be1ef0437b897c21deb915a017c6683cc8263a45f2892f227f8e9d9f15ac09e005789425da3bba96fdb0ffccb0bef4b4d732b77688bef4fba44f2f9e491ef949826591bf47f4b8c0e25be4ad02dfec006015f48b5632b4baeaee0a9645f985bfbd5c957a1552eb32151050eb5ea7b2c1cb365e0edb8302f2bbf1bb219cda33c50ec3fbd0e2c4e66d1e84e0e254a4ed5ba11a607b992e54358fd0bdcade2f97fbff42516e30c92ed46710013c656600406a48a84c1fa32ce5ef218eec5a7806c7274e22ac7fee28fa77482e54015970028f37a21acf7ff1a6526abb20c22214a8ef4dec1630826961c793e4c3c90dc134987dca42392346d94202aee275dc5633efc81a35f354648cf099b1062cd188391e619d6cdd2ba101368ff6bc16052fda8153397628a2beee5ab01f859d63199279a9a7f53bf774b0b8690f18031b261f4c65c671411bbcf89e8d8cecab3119d342bc6675c615465a40247480cdacbd74b9864d91fd1df35e14789585c6a9ed7df1f045591c139a805658b370e6387a6d512b3b628d2806615507a5fb805c28e5100be1399e60f5a5737c3872ed2cc18b9bcb1c5da1d84ab4e8b14aa858b630cb1555b671ed8bcc4c1fe590013318473201ec7d0dab9d54cb481bf036c056b9728a7431ac5a02a2e6c44b46a6687960031c15b9dd3ae59916eb9e430157ac178de7dddf438453fdf7f903c8dceddea07152cd7f66b05fac2a5bbe9fa27f24df7fa5f93bc1fcfe521236b5931f43a68d0f3e7a1a14ac59e26801038294b76f75ba5d5cc3c2147033a805c731d7fa6f8a2f47b236619f62f06283f3785280ca7ee0668f13ae7b48173bdebf21a182a82c7406fc30f80a094aac4d050d567bf45f6469f687f191e461403a03ef067ccee85fe4beb6226ccb55a7d4ceae3af94b9bc8c039ad35e8d3c657904bf671396242556980229b4827a5e7b3a6c75a995eb88011beffd5e0a4aae489ede46c5900cee71dc702ad1c8cbfde5224054fcc9c4a2cc6fd0c7c29c583697f6015724c18f2a77a29c2e26a89081e38ccd4851382a511787a3f7324c4f468f959260d931931f906ff0fc5b29b1309f017b1950eb06de07ecd156552115265802f72a8be80117e2cdd35e175316533e08b28ea0e94191c625c3acd423931e19c59a7de3efc2589843ad1a022fa831eb2ada70ea3ac1b27cbae0c1565ab176fa67e121894dbc2ad85ae7f9c5c44d14ccee5b87d5e7708950338f5c84cf5875246f36dd240ad9d7ca98e7c3081bee4209dc9e9b0af7355e6b193a4706896e64bf65007a5c2f00a698881640723a7404cb7c09743072f778f5f448488390dc8bf2d2a6c1dbc219de67afdc37ac2bc5a23a5705d9f061a020154a2128a4ed8b32e63d927746ce0bc86297a2725ef6cb647df4fb94f2cb179ef3a52dae10a762a1c32e2b674858c0acaec7ceb72fa16c92bddb516bddb8443ab88cd3a46fc6481fb02dd958876a1fd276c7cacfc7369273219571275a300f3c8c887ed06b5327f6d5c30411ab0b1081e020fc82cfbc2450d2a9c190103c60eb962093fcaa54e66c5b77145b5d447b021459ce97ef3c0a71f79fab6da8e31f90ffdc7beed4d46dca6ad271fe451c489e3bfaa7d8cebd2c1eb9009588c92e3473ee449e6f92d8a458295b84c20a9b609a7d8bee0b1547729f4053e9a71c2387dc8ce164468c6a735dc19ab36f54c9a94101950df96be2c43bb3200e9348cd0113013a363d6991c2235a1767cccdaf0cdaf0a06b6a79970a3c3af06c14f631885f74d77a1ad15679f01a5b09a21b5471ac71327026e76d2ce8ff496bf1ce59050a0d419aa66ebf800d2cedffb9e6c0c100add584f45c6d128827b673f4774c615af6fffca9e5d7bfc2b655b3d9d7fce21ecc100f9d809ea463ddbcece39a12829854990aebe1a31e56e11c8bca95 +MD = 9d727883aa7ca3bed344919d6abb601c925ab673663df05df2ba0a5ec8c5561b03d082f23af7168165ae7188d50b586a + +Len = 74752 +Msg = ce4c008e565448d75aedcd937dbdedbd9ebb19125a9b7b20d28cdca0ae26c405629ee355af3daf386d104f4f89e0b8c64a64162dd8b66d83fe0480942f88f286c7baabae94c47da8953607a601fbda088b8cdb2de563e98983b3bff8a1561b52870620400cd1f84e59c7bf41eff69caaec9831bb898a365ae80060740d7888942aec09b41f4c6a53412b3dc75ab946d5f2f1e07fcd139d1db5552daf7ad5817236d32fb1d51d19ded5ca4ae14b2b20b027ffb020b8e666fb7319ec52f0574d1435235be0372c4e189e0dad37c9367264122a694753ecd91ba9b3660477e536a3ae4353e84c615028235a3070dcc183183bdbd29ba50b3da6df8d636e186782472a9ddf731da56937ec1a99348cb59cf52b78b4c5b62cdcc39d0eab38dac67a273098c926b0dedf6d82b6b12de2f80523696bd76c8e38fc9b6c9e0509c6e8666c489cd8ab0ff6fbf16c944001e57306c97d1a03393615e655d3a53a89e2b68e3dfa11d3aa42d305ec321e0e589e0ee70ff0ef00d3b5ade21a5b8b1361381839c3cf6083ca4f5f45855dbbe2db13b2ef1e495095e413e637128ab95539d0f7b1264eefb0b4408002e574d285314e45671e10a78c1158aa2f64eb95cbb8b0393c8d002721101d208633ffcdc00357b09737ce5bab048de0103903883c87e2c823206b70a085ec261798871359f934dcc78f09d4bb65ba7023b85cfb6f4e6e8aae091933f3bbb77afe3c930c18baefb03f514c7a83dbe541b00a7d542db45a69246d92d6e35b85048346ab20c7ef901346a31cb5cd0f183dff56eefd3e61b04ccf775cc3380d5faceddf57b72c3f1def26ad03ed5fa95a4b57c5385c6afe781af54c0160ba784c5a862e20391153a02b2598888a0250b453027fe2db7933b8bddf170917314554f6945c8d0e3cd220af8c8c34f47eac2c3e46ab74e032a77a1cd5fefa4f641b7f686090279e7565a663a3b08d939b66cdf26c7176d55e03c51f1e295e6f1ca3d69832f3745286b4392fb12d1dd021269c58bbfa7121c5eea2ae04c1bce12185606e52adfe903666e1fb002b6c11d793a3587d6eed2c2f1117b1cdee9d0c3b6825d307e54dc14c24a6afd6d100bf8656e9dbf8f5705e64132f10c2d7885832f42ead9ac3e74e919591337c476343f61776c776b5841f2b9eefb32ba5052dcdd282e65370569dcd62a96f3ab61d03ef7d53063dd9b0d74e576183507f9cf3d5aa29647a142218c732f74b5746b4693930877e95877dee93e88c66788ed61213232c1157d6d12649ae81b01d1eb2dc9bd91a19c8e771ccc3f97845edfa3af24ce692d332dfed2e197e5184d2679fc3df2015bd1d2316d9a6312e09f5ea51fc4b9b63945257fe9a00496fb1bf480188cbac7f54db60f47e0339b598d986a196d7e9a83b00658ad1c6b7e11d2cea6292282660c54bc99121a3b815dce1f8b429b77868b084311b3b3371b1b260744949bd35c0f8b583772c4f5757bc5465121eb4f1abdb26e438400f1fe756a50f3f155482a8d561b92e05cdbe821f7cf841db96fc79a42ea66a48216989f341e3cb5eb3b41f4496913c16e5949eef9fd6cbca2540dbf3e39e37bb32f5a1707d17758ca3742e2d9d332bc56182b413062a38522866d8b08ef52a010a6e36b5a1d4c507ec6adc78bec8837c082fca73f91a0eda691579c377d2c882717a51aaf5414438563d310d4178caa2a144ebf7bfced7ccaef6c514e65e9ba72fc1f937c1877985a99635d46e6a8a9ef5681c87a26f1a8fc0b1c48b23c12ad60bec36444ccdec57ac1cf1b68dc74adacc44670be825608b67ed7e117522fd78cfa310b9df3c261728786c99e5b693bded7fd36bda1730286a52fc8c26a99df6418d907ec2fcae2be651ae67bf60ecaf22c2688fc06e12ce938945e67c8091b62a53bd7b3d340cfdab50c00663eddd1831b52f5fe2518ee5a83a6105c0cc6122519da099980cc9f3421da9601984ee61e3ff2fc487e92dd5720d59d339b896a180123fbe1aad6c77725f715b294da8f0004971a4f95e7606b9a834363169b79a7d5aa4d30c3f7df002be21e1da71922e503afbe97ed7f2e145b6fa18ee0a4c77111ed7c1b6e985c6bbe4c0d9761835839a7bd7795f7c27ccddddb360b9c1dd9f0406de6e60d40b606576562a43691758a8b30d3ee4769f304bc568f6dab6f37a1eb9c3c452289728c81fecbe8a8dc213408ba31e54ede276551721c29913157027e08eaad30cb185ab85887c92acbe1e2baba303f9087604c47be4ab3efdcce9e62245072da8e2dfd750354ca5ec91df31ba14d419f0e5445f98bb9c109e9f4d2428f2c5a625b19f1529f8160978c5c01961ff79fdcdb79cf017ad7a581e1604a9999ccb87aba72b2bb8dbc20776e227ad476bd9edc672763d9fc22e5fa5b9763d1e4c0118614aece1a4e539e70f6e7eb31560de3003a03910d903a06a5a110ca85f094fa070254a01951e61f16af32cf472e76f10adc84d2f6d77b8c465a52cb103db9d6900bdae51358f236db0f89938070674d3ec731a6202275fb4effd3f22b3cad3b9389c7e9b293f68a208062d477bc7d6c2e728087340197b8120a2aec116dfd9d9404924a51c3616d99ba450e877327b25c76f7f28d157f5741f1be057d5219711414c0638b47d165a905a6ae5a34e4c44b3d0e74b5ae9b6d515f03cab9799f6a8632e8e1b991b516d10b0e304a6233166d4d4a8a286d5a5ec29aa2c87054ddce8cd7622187418ae5a432f230e29b913d552022af6fa25a90084d016b1c6473217a8ac2cf5ed7d1468505e92cad319d8d754e3d50e61e1ac5a4dea64f2838fe17e1b58137bab516de060c599024d4a6ab502fd12b4610f9543ad817d12e42bd0654f033f72579ca00a9aed9e7c3e54afb785db47aea2b94c01cc1cc9d99025e6136b3418a29867952e275d0b014f4091240502dec5cde6b8dcd143b00f30850dd2987406d217b934942e9d46592815f746a9fc3dc18a9fc31ee47e9a7b6b512ce8fe4a71cc7c9a6584d836b94c70dbc8639a4fce6a80eb540d2f56efe6ea932a9ec43ec1566e1210454dafcaa2cf9aeec40086f78858d254f3d75217185552f13c13d85e39952a1d20b490e322ef5b50b1022622e2ba5ca91607fb7bd95397680a12a1b03d9ae9745d35626b967525d671c8b9b6414c923cbfe5d781f18c697750ea2020292558fd44faaccac40c01684e7bc71b6db97bf53599709227a9d00655c2dd14c7dd7da11c28f667745af6ee8e43d6b82ea71fbcc24c4e174452d4fd62c361f5dd6b62462feac9ac70070c507a4770f74cbf877aac26f776112e7e44bf14332c34760fd5c366ab007fbc4b765ab01c3f8ea8ba153c4ef51953e6d5c4b4dfdc1f94a78a3721c427cb6821bc4976a563f9bd0ac077baedd066d521e1638949e238c4a6dd52912dc276f4dd66af154fcb8ba18fa2866e2a0ec75e88ab0a857ccfde8e1a10105ac90667eb99529181d6de5e02dd672c9f2e39a3b5c33aa2f1a02a78b8ac2958c6bf7a0715fc86d8006124daa89c17509720d861a379971115dc7c700b0332111b38a6be39af0c6adb1824675b75bbda9c29746bf052c84139594c2d4fc83225a25b13f52159ec315a24666ee20f5ab1f771942864f8d718a53f22174ca2327ba351481293a32c14c4ad72550614fcbff01fc000c610cb80a0b58696c93a39fb6641cd7f5834d6fa63dad1868f29a9ebce5c815be045ad6074e3011290374f8d32542ba238b6f1cd7dd40a6745f86a1ddb4f5da1783c849f67f21af367427c1951b1e9e5face86745bc3a562ef29463d5d21de3a57a05827c20a5aa11703c98709828faf68269cd745ce2ade576446349df98c8f451732dfcd52488568213dbfa3eca66748663bde821d2243435071e8e300ee060a4919afcff36c052145e1aa6619b57763366b715cd915f87c95cf42775d8c086de0157f12154e8a0c16bb2e9c314446813c3578192a8967cadc682aa039eefe37812e37dcde777def3dd6348b5bdb3c6a23a0db023708f7f4cd4589a7bc9d4e30d66dc076796e44936137a57dc003c1e591b5825f291910c40f6d45d40d20622087d900280cbb49c02be867b888433dbb2f7b557827451a004be8486f55ffa0cf3c7ae039c0e7f23d42f06485da2418b4a4fa3d945a127d7128bf78c0bbc372059c5948f3bc79a9d45057822bde2dba98983a20fdea0aa2df4ff9bf0f68f33f894f7d219c29f9d54bfa25abf4bee68c2fb544e8f9feb5ef12679e04a384176e24feef517d2eefdd6bea63c6269fd7f441a01f7bd1be9acdd119b72fc536b7699e51b5c2def4e42bfcc819bb0aac895b9504d3c3cd5341a5e50d4a27bda65c97bfefd95a07a26026c63b4d72e80a832af48769a634e532dd17ea62d6d3fd8d604e8162033f61e93690ec09d208e44dc726d1e80e509bf6df2d5804234f63d32c15ae59a4cf5909c3248354c5b160709cf38b58e2679e1411ef013af678ffb563da1fc525ffb1473548a737332ca6730f235dc10ac21614dd278a0b3797fabb6d667bae6d17922bf5c500b802c2dfde8a7dee2c6da92a7faa9b9e80cef47b6db3816b1d665f233e696337e21bb8333a74cae7a0f56302dbdf14e39fa4d7ab549bf29718f71f8d07fae9f4ba6659c90d35d2ef26893ac7b3e65a01729f88b2f78e83a6aa089ef70f1021de4acbeccae2355dafc51174a18c2635a101a84eb7def5fa41d882258adc14d19e9933b85d3edb33cf85765ab7f0076d6b52a873e29236200fac4bfc6df86cc2dcaf8406abab911bf66e9e343266f1c90670853d5c9abbbdb92d4c6bc9eb82bc3f95a81edcb0bfdfcc89724a39774c131b6029f54d7eea99e6636dbac63bbd876f52854817d6cb45fbdddae3f5a98011512b7ae2ddc72d7b3f5797308b7284ea15ee05cc84a31e162872bf498e87f58c51da624e32fceb2d6b10b016411741aed9720ff14ca12019fd5107c22b96144bc275c87f77a58b751396a1b40fb35b9b62e58a019758391822819c97f46043184d0293bed24b771cdff253521ecd3a79594f60428c4fd2d93f0a6410126cebb99a8bad536b7516ea762bad3896ed461065b878fd540e5126fbf54974ad4275f75017fd866babd0a6814996ae9e9ce7282f29ba79161d20c5fe49320dec6b479a17af6b9ffa750d1aa755f8fb5e6085885ea90e00fb05a57ef10e0621f86ecb6a995adfe53f5c350c9156ba68ffc488f99b415cd82b4d4a1b7c4daff9f9d3682f7b2041a163e7b045e754c43da94d58438ef88c4acd7d7662460d14dd162385b06809791c8d9fe78d5058fec283855d2eded6869e0a1d901df8561d1477e58cb6061e709be60a40ab7468503eb6f3ff8234e3321c09b602123930b2e845a1e409fd660c6996b22469fc8fa2fb691fa7063728790cf3cf330ab2a4bb9fa8dff571f6e936cdc41ffc8d90d2dc3fc592bb8390ac41b5eff18bcc0bb92082c72827b699b0d70e99d72ee0d73be653f2d3a5c1e677746026a37222eb78c9d9cb03e29f8dc2d5753c64242a7ad1a87f176acb88e292f855bf6d50d2fae79fecdbf98ef57b281a4ad54e4433209c0a0a5de097a02c04b7dce3d78da5e1118802209193800ae88cd58e1bf8c272a5f53eebbc6fd06bd5973dba6a916348fb6d65c2535908e30c155d8d55a7a118f34f61ea86bde1470e82bf6badc5d4d6af375be8c74955ad9b9c2cfa83b896b98e02bc81c7e89c6ab65fab1f298fbf3434cc2dba76c92e119e0888fe2e956afd7ff497d90558c679d51649fd6458ee0a92162361e7425db71c43bac1dda5e58ecd0f3a19cb752a1f748ee12ee88927ffd1fc8405a21da8461d34096a1850ce118039ec6a9ea78f0299b1bbd93d8833bbfa659acd30c0d867aac3bf2168feef31a15cf6f40856bcca4f661f27e9bfdae7153babe21895b5c1c9d8231053170e94375fa0de90ea7a209b9554407694e32b2865006ce20206fd855b7c5c6303f4e24a2a3251bfcb91ac8726a34b6c71182e3dcbe192177195c2e3341330202b69c4e3a5f4741b61c9151a02547051bd3f995b55957c3e4928b9ed4c30b211f534e108b82e702e15ea035c0fafd9afe021138beb6653dff28889aa891a0abeca1fe3c44b276c804dbb205636fbab0d428645d4759a3f82d47ddb22d41b61af13f06f1c462891977205110f608211f44b36d63edb7a67b057ce575e1679df6d3670301a917906fded90818f738a31eb63f86fd1054ef4f0e345a465357dab7f9d67cbc51462f43a242416df595c337af295b896db5e0dcbe0a86b3f1b6fee6dae9deb25b82b83d481897806f840402960d6589446f1dbc8b6c053f5ae97cfc0d3d93643631bda556b86500c3a7d80811580f8d32c51866fcd55058ed83c77ff73e55426fe7b22454ae546fa055d1a09795e3f5c77c435488d2f28127fa80db2f587eed67293822a856c01d743263649f437d6360d9310dc5f15658a8d21ba61c388ac5ca5ab238e86e42aabdb21fecaefd26469d80640b2a9d064fde9f0a69544af35bf810b2df8b414687fb5969813d0f892febe64ed52d429cc737b5df8d5e0c63207edfbc7f177c6645ab9cd2cad017108fca9f73e4549e546f42bafd9aaff934a3dd0c2190037c0c644cf0de31ee8056d6b80055c126fcf7989e130709b09e0266814a94cad5ccb3545dfa0e4f0ef7c6a542bd76f41adae0e398526e63066736d90a0f888804eaf5966d1cc58aa7d9da6be91b59e5b6d49ac0dffda62f17f14c8bd5cf7f4027634dbae8dda67d5f931cab19ce611e71669fc0b37940d67ba8ddff830edb9ba3a226326fb1238f8cd007d3533b4f16d10d6a53d169c0e1980a559480424fe30034098d404bbf49b60d268533e656675c25850ab82398e8f3a23dfb6c0e2eced3a5723c28e1ec2471a6f3212a642978896b7a55c64b4b5524ed018494c70ab78452fabf88284cb82639f847b5193ad2df3ba4b58a555aae92674ad09901662598e90d97cc93337d7a329069428a0cfed412beba72b6496dc28d745fe751b3a197b42555849742dcb42d65f6713b0264fe9d02c52e029a0b4bec08931e1c95a3f760cc694ec8ed5e8a86e38fcfb0ddadb5171b75fabecf1f84ff820a9bd66ea53e6b8d53699cb58b53eb93859c6fd1219e2d833d973f4b0304248b46ef23b14de330c29483871deba6a7e08885ec9f69204cc49c5228a06e50176ea896790fe67c4d16bd1b0c98e8095874f91a9b9afcd2014a12d9ff61b9df34a6c0103add07603ce42daeb1b918e289ab67a911465529c79e218d28016e3808ee2deb0d9b39357cd576ad0af0f6c8980e54dfd243faae2c3b58fa370203c1008f329555dcf472894518947cc2fa322018312d42f665c58bac199fa0d60320b8148e9d9814b19dfedd93f38bb19ba5ae438cf007e02f06825af3ebfa0ff4cdac28926268d4f92e29e97958bc5f63998f3ae8e68593aef79ce2686da712413e3905de823c905389a6f32922830eea946f48a56f40736e0f27bcf7a33c8f80d8fb66c38b87d93966f2a533ff8442891cbb077308cd21f4b3df55221b3eda3c446fa5f1dcdf02131ca95a1a2e14bcd798fef1b2218001db8c104568440274cc07126dea04a6bd893117ac5c6cc8b04e9fa781e3780da57b0e66f83a9c3c01b87760090c81736df43ae9f66b0a24df66a74152974aca8f6ba1400829a25fe39a3bf511e9d1d995fc907cc2d6a49d9ca83658ce4e385b2215fb37dfb5f4c2ace9cb2e02f2742dc80ae86cbc1fbab77a9bd35a6f68bf13f01262baf95fe228b01f8b9776c6f6f4669799163cc6baf6fbb9f4c2b0874d999be97e55ef9818e6bfb413bdc7d7c8d2043b2925bf3c23c0827b112e3c1a726067f3a4752cfef7710e4fea0d8095682b235e1f07ce0093c8c167bf096ca2bbecf6c98ba52be51c7c3e3b84f33b8063844688f138e3b489641af864c0bca088b3cae38a7286eae65cc20f6b2b53493951e04436359ab8532701b598f0b6a4774946da2749a880e3973c440302622058388308648a4d9caf860817c225e52ef6021d05f8b71b47a2b00f71e314d2d65e9c914df2a396d1ed05b0a786bcc2908392900f6527499f823bae0191df3fbbaae2ad9d671de0e8aa2a7ded4d41d979be6f525ef336de09309eba8b85de0340cbcf3a7f3855c6414568d2418c41846ae4fcd66d394223050c5d9768457dc8163fa6ca5bfce7a18c7d45505cda386db4c5cf8eb29df5d32393fcc730474af8ac850dcfcc1b502d2a80447a87ad82f017af5c0dd797be48e55600ec7c01c20f642a68dd381a0ba39c1ceab36a7cddb5e42026b644cd07febac0ee69940b8f96ddae4c55388f86cf6191bc8d6dce9529aab6b42a72846f8f147329b110dae009997f3cda45d26deb1b8d1e7b1a2945b5ebd188dcf984516492db57659ae68fe1f81b9eded8990d911a7da50ee8036c05281f194032135a09b667dbf96ab4cbaaaa01f6c5792a024beed1c4bb6ff37471dfedf9e6c4d7e5f8efb74bef38dc4fee0fd0d940902bd896192812031a500b9673dc8f531a3881bcbf381ba96da3790699f6cab2b604ecea29ff01686fdf7ddda4496df7cabbc9bfa568bfda71d0d39ee8e22fae735bdbc281b5076de8c857d1c1d2fa572ee80a9c22d7ccd4fdbadc117d319c96308711b9c0e8b8860dc125fd5d07d8f3df33d0bcb7f3b73b59e81f08b753760c761d2b3a58088943574074cae6366e405425c8abe54b03703edf08ef37c66063cc8484bec7a2fe284dcca0c4ee0d4eef16443ee43b4c3605e516262f6f18d04eac63bad180368ba769dc5675f4eaef32ae05cff01a85c38f0513f353ddb94a2f8e2139fd2241b63333e5f2586b6dc3cd83e0e85a1376305e175f0cf6f4262288ea538eac2e43026e247ff0d6d1f45112107c047ca6ac0105945dbf8352ee1ded69613568f4b8f4bab400fe9bc91d3b930c2dc0e25485ba17f4a697837a8f80cf53d0aaae261211ab7b2f67f1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0622fccda2e251c9730b1fba63b2fefcb1025ec7476100f9b8d648fee5fcef02eb8bc79d5381fe9fba66f667a87f0b651ef35b14698e2f6d031b6de33f8c8aeed8b101151fb2ac5722357944238c586fba11055be0808217ab1b565100a982ab584347a97a2cd18c34f706e467533c792cbbebe24ef0af664b4690ccdbdc7ca4d4b2f9eef53914ab7d4c2dccd67c4e1df1848d6c07471df55e3dbbcb138dcf87f870963a036fcc3165755c72135ff3ca72db583d9c0c44314e6125b05a45f1b11e0cbb3f47598eba883321588086c40b5b50dafb9fa8b8a6a6416d21128d89acc007c753135ed2b34fd60b04b089456d0565841a64b4f1b1f05f00a1dedd0df788c2491a0a181e98470e77eb25cfee4bfb89f21e9db9660fb72a7ea711bcf51dd2fcbee89dedf8e5e82d069042d32544b84ea37cad1ebc0c653435955d95b58c28f7a7634178c838bdb22588ba2b90c3c623f6b9055d3a3474fcd41104ffe5cf1543910e872112fd324e5328de41a765af9a8a58591d871470f4c89eba63fc530270ea4ef17f7f9fd0521e1531addf86cf22ccdefaa81938e3bc8192e06a6fc48b0031b8f2fc64bd325df4c256d8bfc3cf4d3cb17cb566fe47a49d92196bc6701961f5b11e2048c1b2d275b4a05abe990a8a687451ae06e1174d8b10b7f086f22816a4dbd573b239ec4fff60c09c52731b6ace9c1bfa6f8dcd27c8936e8137c751bedd9dab7f27a24937105b1a2621ee7c5eedad2e331760e3c3e49e8fa63f7c009afe8b229b2f87542847082f70936797d7240c1ae074e6f5924d96add8246ccf6b8608bd602055878401fc73142d7b1884205d747b2eac7d2392104b8f8d36188112baee66a0996ddaefbc8779569558b660f59d7bab0de4e8209fdb34b054667c12f6380726cf71ad5eaccf28b542e31e4489285a50a7c76097a9ff80543453cd056f1cca39743d7bed51dc9ab00041fc696c97afd5f68f2d55a30acadf724af4786a2f384f042bb6fa501257dd59f0014e345dd49176b69ee93f9facc88ac672da9bc1d9ee0bc6ff240c12e8a3cc67ad4164fd7129a4d845d0b4208e95ea50d8aa6887177d0789b4f90a50b599b433510172f90df4fd6ea29ac53fe8ce1d74867654e1899263fe68c7cf4e5735bdcdacfce2d2f38a0cd435a5c73053e790ac1cbce563a8c4cd9f8b3ebf8e35ee55a111a2391dda5f4fc39f905eb45858e0520bec9e7fdd6a80e7acbc7f72ea4a08481f8fea2c1afb429720c8e04e5ec88910c483e4a8c01a4a614ddf73aedccf324d37147a904dd461d969edf030df8cf762d7215c80d95a6686df06309495f4800af8de6eecdb813a04eb4e033e733cb7c2c4336a7a918181d2e0cf3ac6ae406e2bb55c3b945c7837a425879db9824e46ab1c4892f8714618dfe398f6a77e39490a2d0c6529392ff72199192424b53830a63fbf7aad010e98086801f8c99e55cd20a06d800e1a1ed517b6813b126490e22ebf2665eab9518be6ee88b5af771c5729c00df0d547db6df12e3e470518def7bf0b1bf94412a560e5d7abb1cba0f3736ffc5c4bf16adc3e4830dedc7f5a78cdd1b3eeb94b9570b3afb3d971a09471ae8db5d705f4fb97b2879eb17fe3a204f1014a3d1a63ca49f08f139089c0da2d74edad1ca34262a45729a87485c477f9fdb82e85812f29a7a41e776f4e9eda7d431a228b988c4868b8c8ee8692a454ce3070e136a1f02c004ad84fd454ad2df7a58db6a27a15158b43cfe1663b15b10855c5f2eee17959ea61371d5e107e4d0318d2ea0fbc8f425284b921a1c36b251eca21e40cb40d2bdc63c5606b2684a04629642d11d45d5774e81f1fb7e04719a80a1f252ebe3e2a4cef1d9999eb42d03733cc10574601dd590a5c4c17062c170a921846b3547ecdb24f8a5958f35b453ce475044ea61f4c85581b274d997ca5dcfe97b9391b619eb321960026c31087ed97f9997668f81d706db641da3ecb3e85ac280d2e776915b5e1eb3e81df1500cfeac4405d134ed8a097c81c4b5a9a59ab2743b311fd07bb312cd455089bdb583a495f99711965f69c72cb26ff716c7f93fc753b7220cff7cb5f0bf419add5f6d32035f540ffd00fda8b29f28517a428f6a83716dd672473daf4dc8c43798755112be1e44b3b3f8cd15d8eff6ab1f3de4996f3c59244a787e67ad09e0483720b8ab8edf6fe6ff6e6174644be2ed4be17e35545d85f4dbbdc847d7299db6028729653b4ade8e288a422e1f5af2ff4756e7a7fa7bf92f6e3ca1b695d1036741d32ca88c0698947776f7acd1c530c95bc3a756293fbcbb4b1d941cada91b443c2b49dc4abca5e1345708554233a434ce5044a9a950d582ba8926e2e858ec353bb809693d130e5ca758fe90394d5526ea27480a41584f6b03a8e16e0e877e2385a1f3b82db4daec179e60c780bb4b88f56d3be0bbfc2f5d6da14c29e7dddaf4630f902fe246117bce54b661dd248e43384da392dde67f42419def7b3a0307921d2a66372372bcf012a089c61930273dfbed0a8a70be4701c8c353cdd1a00de3fb19ff39bae0e1322caa5f5dfc881d608675f72f3b2b8d82473cff85725df5d14405e39b6d378b2b649bc3904dd47893200ef3e908d65bad092f7b0de6e2c643421598c7051fbfc2019b3ac6d6bb40bd12e085209d67b86a55c550cbf5d688203b72a8234a4287df4dd14e685de67ec8a512353cc385ada17225052966e2445278439b190345ea6a8e6686dcabfd3a9b1ecc8ba542d8403aa979228d03ad01c041b1f70ffad3f14c0d826a8b88a77a1ec83810c4e2097b1d42e6306192e0c752dee4466ff592a26b124b83ddbb8c4839ea7b4bff6bc066328596b60cdc229ef096030fa0bd2a07b0e4ec583b0e55abd4cbc0c4bfa4a40862b9b13cf6a91c8f82b237db0a1a442803cd8b720b47aaacd7b42d046d565e6993285e4a87c175a1f07aa73115d3880b4d135157b62f32512aedea926f499691ae18c66927ebd6dd22367c9929b29dba74ff6591a58e96a4b6be20f62f45f3899cd211203ef1e749012edd9bae7d2c3d62d9efa83f2c7ead616ff7b913121d58439e66f834994ff073aaf3c00cfddc9afde91922ebd09073144796628577bd068dc3ed7871acb7d761f1e58fabfa56db2f760989134477feb88f2679ec3e7b9c618bd0285df1c608b44cdc91f43c4108dfcae7641e4ed9563390ce87b02dfe21a63c34906132258a5203004c4d8a4627f52bdc3c74b75f846f8fb713380def9d461f4339e3357b65255e784a1fad0d4258e210987d46b08f52d708a5eea5f518287c25aa4dc371a114a46d13d36e3d60f237aa00a0c5757fc6afeac539bfb99b349b026b05a4af47061f062dcf937e8aaa71d2fc48fa555cb25e85fc8121e22d52c3010575a0dc5fe5156c227de47ac768dab215daaff92ffd2d00d12f9419d76a3e4aff037fa0ef98cfc67a442bd61f14b86fd2bfaa0800916484cda9e006a0645206e11908a50107953dbb8b2e3d9a975434bc5fb42bd5554b387658cd509028485d341e04909c1aaff96fbcb65541d7f6275922940ab831294557a423a0af9f68767e7a3c0cc9b964211d3e8bc61bbde6703471144cb00d48d2f5f6a99d06aff97a4a9475bf8fccfdde4e79753930316b38d2b2fa99c5d1ee08dab428f09c4145901dd67a51f63bc25789d53c56891ccea7bd4f0f9b0066640f8d486940793e92e181a7126b06eefbb556baa7c42d6458e47cae1bf768b2f20e96183136a68c2995fd6f04b5c8cdf01f3d90802c24f34e189739e658069edf2d7e8e4b7a2a1552d31a9719d643c1e9bec7bf8d3577affb6a96563764e0127596cb107eb30dbf54c35e8519777fb02db97baf97882d82a603026fd7c301f7fa6e080891895874798e53a2cc3f85840539e2c865cc4e53960a63eb8f1e6e33b7e0badd4da6121b075c8156f9d75c23b9668273c1aae30914a83f32251d30b0f4116bf77aaf439c47546f0a6ae60c779167e61671caf38e680520ac61675054f92ca2bee04ff3df819fa524e5159e66d465931b3ed386c9da488dc10da5d6090d57e89a462c2bcbfd64ab0e330c19dacc8713e8f06ea4a2b29a0fd9ef7ec8b679bac4f375eef24a02cc0a2e1c7285babff6ece74f42560137222d5cd19b3043867fbe31363e5144d9ff49ee67efebeef6d9 +MD = 7958dd0cb546cb3955135ef414ac80ccfde35e4e327ced33fec9d30b79030f5a88ed1ec13668a785304755123d6a831f + +Len = 75592 +Msg = 4fa25003a0d96f9e2e58be8a18cd040ae8abb745777e073f0b7c1f08c35ca734356b8d8a55dc0501995fcee85af6b7647e04631f54a7493fbf48fe959771b7174cde0a91ccd6f497a7bc20be71e1660c699c93ac579d68e6bb7ee54f239bc73ddd244f7ece70454aa2943d75263519e9f19acf544a056c1e4644599e3183dd8d2f64e4bb2352ff00d012ab763f9ad6e560279f7ff38a5ecea9c2e4ea87d004ef8cc752ae93232aa37b5bf42884baa7e7fc6a8c951cd245de2d220d9bee2b414b3a7520c1e68bcf1ae99a9ff2bf3a93d80f8c1dfe8b85293517895c192e3c9e898295d65be334f44d62f5353eb6c5a29edfb4db23094c12bdb2215acd0faa2292ac4ffce354c3a42430943d733201dd22b50b4c6a5dcf095d45128e1d591ed54c00cd1bc3ffe3e4879aa03ff8fb964b4cd8b9fa3c51b515fd17848172d33fc0a0c634ba62ac3abe5ee741c437d92df50592e56d02aba63f85719eb93547b6ea7645af622825703991609e5397946ee13329b72b22344c8ede9b88c0cc7b2a5cb7c6639a7d312e5d084de07480f30019bfe658be06b44c0aeedd6b1ea137441c49917beac9971c33acf62eaf5ac08ca59211f0ae14f351bb9e7f6f591a45ac3416ee1dda7420e1c263a2b18d8ec1b98b93f2a681b6b801aad7c8bbfba16c09ab052572f3e6942513169a919582bf30d5a9d0a3c153cc04de7f02788c9d73038afd7da1bc88bb922cae27f5509f81988bbef50ff552f8035f7f73cd92762343d8e83fd2bec05cce17118f05444dd19ab3b9a711a61d02a636c063e3979344719dadb42f7ff74181dc291aebfbf575de57812fd15b1bb2946a291ce1225e9e35e23421dd8996305481dc12ccfdfd360b7e00d5789cb4d27603a1e5f0bc3ef835ae65d1076403f2ee1014bdd3d0cfdcc9311de02ef25028f30a120538eb9b1b1c09280bd396a84ff990b86525fed12fc277c09a1ae3577eb48663c5e03aded090fb651669a9ec0e1a0ab050ed0f6df79b58d14965f9319a607f7c6d112e6ddd398d043bf22536f9fb85e4c651890afbffdc393636bc4744a0fd4545f251b10ac1c6edc29690f0d644093c1179f60f04940cdea9b6b3ff461c09a694ac2a1221cdaf08f37c74816e9d9fa0788edde6da02efa9e90d66c2677baa87a46641f9e8084e3e15cd585189ac4df842b8c7f645f28d8240625df96e66e9d0bb491fcc2917ad7572b0c5c8ef1c1d2cb81e3ba70d0cef52f4dd210a2484cc69227d4bf4aaa5d496504e424e6793172422e9c161f9f71cff4ea8395f517e5e3a21294dda3458c98af8cf574bbab942c8c840e18cd25c1c7396e82d5ebdfba42bff75aee58ed89637b25a8c27b038a601f14c249060e2f89414c886712fa4a825068af57c82ce4387c6176a4a11b54bb5e63511d66b32b74c106ecbff7021710e7c90aa09d6e2d6617b2f781ca5db3acdf02231c4bbf36182d1028470491907d0aaae56f353bb59ac1aca3e06344f7a32553b0ac317ceff1ea0ad392b7f347351d80d80a2c102d352eb0f456e85bc13ca5daa263c496b9807c596739add1bbc7b4ed5b07ee85e4d3a362714bd61c80e7f52940d951771342788e7b9242a76ea34532d6eef8f78ce4c433a345c901b72387a2445384a89db6530c594312dec0666303d435d80f75e70596f2bb1da5e47dd1f7f588baa5a96a9075a8b29af2616f82e2eb6308184058ec2ee83260739955587d0cef8fe8d6cdb53ce267578cc25d2932850d05bc7cc8ec4e0c322de53658afa3d2de510c966e45d49ed7b508538dca75297a5d667ba58a86d740d2855be63c2eeffbca6b78baa6df269a4fff959feb4d51518b90dd8d5b6bc1d4eade6a9c8260ccbe489fee316cbf121584cd18f2000d9528fce602deb35f6464f35af2da16dbf1ac581477610be6f9d0001b5e32ad485d573db09c1836f427877885852d6e02e73c7553a4d818f946602e44c5b047801262da9af9c86aac9392e6d882050c7825e52cf7e6f4f878703c8be3f02963476cd2300fbc7da2fb214dcaee7a0f56ae263ceb5bce464ec71fcb85635ddc9500c52bfa795496946268ee9111ed9ae10770ba3d09bb5a60679da3c76d7f68313ea3e6868242a19364d31be5fd5d3640269dd39e8c4e9ff1fc824bbe4cd54adc7391985095072d4494e84c15fb397fd89df62f9c5de88567d85629d69beff30b220698053c32a81c5520f5bdb612c63eb0120492e929b9269d91d49cd5300f21cc8b8c00e225a08f3805bf499879a7c70f8a192ec88289d2becdb29d8335edd4f588dad021808511b01eff563ccea3262ec6d3dc8673a5e0be527a4520621d892f971aff64b3e4385fc53c4ffd8236b07040ab087d8d6bd51ec8622027652ca2cd3eb2eb46303c8789a10cb35544d11a9690255f48206a2442b820bb129f79d660d8392020960c73e03ad71cfe8710b8e43dd93d60ed1f52dc7a2c827c71b3888d0c143a9e55b291d5eb21d933b9641feb921d1f423409e54eb6ebf2cf9c383da432eaa719effd45ed3a8394bf6c49b43f35879176a598601bd6f598867f966a38f512d21dc51b1488c162cbdc00301a41a09f2078a26937c652cfe02b8c4c92ddbb23583495ba825ae845eb2425c5b6856bda48c2cafae0c0c2e1764942d94be50da2b5d8b24a23b647a37f124d691d8cefbf76ef8fbc0fbdafb0a74a53aaf9f165075784ab485d4d4811f440d7a8b3cab4b53749512af8ff61d41fb90f50218549c7d9c2f143b3626207e71a54f32dc14352068acfc6511891c22c0006676703247a990e14baaa983e0bc41955d6cff3242c610e4c1c8c8ba7e178d9b94f1f1d9d8631e0961bc771348417c85ac22ee2df9ad34e66ac2feb2cd872809875ce171d7120c4f5f57e6fde075ea1c453df22ce33d9e5aff3af99890da5af347a08921cd1d235a4c65406a30c152032fa3515786df15e6861703955077eb01dda3311241ee2bd330cdcb81c18b7ee2723e53d76cf96035094362d194c8a3da504f216cbbecec611377d06b1a3c346017f442d41df548ed8fa55e73e4344a27a88ba056c37f2eadfe4b964fc33d3d2524af6475203995b7212541a4c823a78fed3ef7f8e20fb85ff831675645f561daa45603e3fc2f0f3ac6ab518bc9fd83bb28526f7b9f04531e0a1189a727cb67279cd165463c3d7d1f861fd8516e2ba65261ae4e0783c7c7923bd3456cf12919b31608d2c565cda90d69691c1d4013d8fd9e3adcc315bedc64935fe3ca2c763d2719e39488014659ad78726618c61ee164e9de63d8dd52593c1a9dabeb5f199c2aae4af2b8971056a7ba20fd6988b4882e4982296e63eb08c1d976e5f7127cfe65dc25337db09368a2385c2b3a0e3e9604c70e77ab30f2af9cd7d0d815cd062b7fab5ca0fed3365646f80f36b0e122d48d696a95bacbcd17751c95cd6e191fea2123d781648864ea3c041f67f588ca0772397fcbc1bce608f2b1ab0c2a7d2f04f34d7e1ed65882ea2c647606318b9cfa5a3f3361e98ca44abe9dfcdd70829e429c303abe7dc9f91fbd1efa5b8b730274ee826f9e59c26ea47fe86e8868aed56ac5d4f1aa81653151983c95ad2cc6633cd60a1ccc3ae6aedfde9beb543c8c3a4415428c2b09b4924865c52e463c0f271bb9df2031b380cbc382bd5a8b11a1369a3581f4873d3d85cbcbc2ac6ce2d3b5d93f0a6515ed192d181456a27312773232cc990f06468870a4723af968469c773e1192d1c20f383ca63b6fad54649594d58393c7f24c1dbc990335fc8291f1d411d77f4e7f42666035a00e62783283c54b027603917685d27326bc9d01eb5b341c38d9c393ae2a018cea3ea926a2ca2e5cf04aab2ded4718f982d5c42f7b61ff25dda917477a0c8774c2046aa5dcf136d0f618a60cd9ebf8f5c08b59526a8b9ef56ef734e3cf945ab5d06a8d3e0980446ebbe7de7661f9d92d87e344b3df61775492c901afd44be217bb77fb3951ffc2ffe8bf3ab5adfa236b80e76d9a036cf30af12966f2b2b887622c339adedbf7174b24a8a210e6763d75539ebd4efe337ade341e4bf69064b25dcaa75374d0f0ab1a18abfece34f39113a7101a19f73e759903b0980197d5c9d13eda0f455770e6346bcf3638befb860f24466d4116164a0305e8355cee9536862fd4b49799013061c61d3396ad15843073479f0f854263e4e3cd0b4fbf2c5f44469e2bb3be2af168d19bdb3028caf33d3c1b96cb694a2604456800212f20aed32b3f5de1ed7491123353174d58a03cff26cb3cbdedb7fd2bd1bffd1c68fb89fa85bf31694e657827954dd0366521c53eda5e782d36104f2032ddeb8692445a82fc278e920a870e6f9e90ec3476d5f7c100dc31626fdd84ac0ec7b0a8d4848834397e5ea54962bcb1f724558db3433a523f4e51a5bea704970e8736ca57427bd6e4cc88ea327ce8b74711f18945f3f7b73fbbbf3e4bf436a9d923633443069b30a51af4a9ee5ffc47375faa72546d94b9a92b63753f4f84a918a6212dbf59500c226f8a2aa4935e2a6f17668e073a7b2025a62591c23d5561721557fef3c1023006d332b47d9e782896410f2787e112b45a35eddcfb481297907aedf008c81965f74ed491a10ab00854e38c83fceac33df1dfa39c13f7211419dcca4926f6fd739de95807375f70945307c5ea8ddef58291ad2f1a32d2eba0b644d85174d21622a2aba65f68231f9238b4a2a662430f4ce3a5799e7e62d8020fb9fe521be4cd3aab9da6e15be024cbaef30bfea4a47b638fd26a70222e5104cb43249243b4888263c541d4391de9075bcbe8397b86a08f3c39e8d744bfbc6c92ea325a12cbb0c36f2d5d822963d50de74421a00e73e69892e4dc1d0d9b82030eb711f2b3b0aec57adde331543950a7fb669e7b86f2b5453bda2f88a44c0c91e5b1a7a24cebe8502adbbc2ae127c29b3f3a48120a8c755fdc23c761315ac1debfe1ddb20605c82c2731ceb5f9b593b25ac705acc3c78eae20c88eefde4b08b1454d9c690885b5201ae70319c46c2cb4f515be92d92e69faacd06b7cd1a94bd41effca117bf317f6ab0342a069d3f369b72d5c0d73466c0b2b43454e32fbf10df3ff50f086d85574818f7290117351994916c563b99900a9432906ae2aca62256c53174e52bad96345927d32e3d2af0b52d8e3dcd4ae8e9b9c8b95e4e19d05e43005067506240a8a9e154ace087a73887b7c9cc2ec0d7caadf70da387efc4411e81d04accb9b50b3351fc1aca7f307d86c09da5b283f339eb4e1bdf2296f86763ba1fb3ac9a913a4b1b8ca13e9c3d1c3cc8784f1b1cb1c3fc2e526590c7f34d9d29bd26827d5bb26bce84d4df6743b1143ff82caaf399e54b284fdb64cb3b4035412717e0ea7b001fbb832a0f58eab897b78bc2e491220a72bc62a5114946fbc6a0fc0c4a5a85bfd182f61550e978bf419fa1967a7dc0cfed6b495728aa9cdcbbc99a681155f22e2bb56c3b36b19421ac88d84bcf222c9225b552761d67a37faf1b80eff85556e778b333e04319b38c32e3ae2745269bfdb61b2c665218f130fb274dd841e10a88531d1bb8e8ba6d5b7f3081cd8ee3b56f090d15bc89371cad3a6d6fc59071a36d45435239b9fc181bdc0001a30ef1ff62b92bccfd053a7c50e76e553c669fb822c9d695c719574a49f3d28c4c47c9e07520c7b08c68ab96b88c9aaca126c39f255b47450589647a623118a02dbbe3ff12ea914f0f25f302308482b4a87375ef016405ee59acac3ef12e42ebdbedd8a1c870e916e9bfb9257589b72b96bf3f2e339ea2f057e586fe733601adbb60007f125e6f9690a856a6e3e69870107c77b338459f0974b68d3f7502b5846094f3fd6cfd755cb88263dd0835a7008a3dc8347c035a9834a2478852fedf0e4fff3b9344f89ac7b5b0695e4ef1737b8875a9189b52860b1c3b2e5fb994fe89fe214fd746ba60661cb4cf9144948e4f7fa682e602ad81f09fd3aa2bf56f84a5ef8d994fcecd36c652221f2c85b957daf452ee034e8eded7242e5383b2e921e098b6b053699bae46fa6ac0766eba40cc7b1d5326eb810d3d7d8da2ed5e9c26a87e1f2d8883c037967a116c057c22098278485a97460e9d71d08420cf74e3238c24295965c9b5630355986a503a8af2ab70665cfafa81f042d1a455b08278a8fa1f87cc619805913c117253fd264f9c95f819e2b875a5b5fef560aa2703a71780c4ad0f027b1b729f3221a152dc0a77d073b5745653c44f24b04ba69965090f9eb7fb99ceef6167ab4c48eaf7a82614e977db9a6af1883c42a6b7c39e4308f1d26e05e53d6191f0fea43a9962273ce45f78fecd5cfb4bfdd72d47998c1a415e9a6b5e89c47e079ef7fe892518e5b97690fb9175a2bd8a1460d87d9119572ca6751467e00a915cc2259fb7268250264c3c74363be2d4ed006e1ccc329c963589e10da4906647ec2b162c470644e2fdc590874f7883bddf525d8eb5f6ac33f6496ccba7136e0e401a3808ab5cc73aca735b896fc40bf4cb8acd92bd65becce99586b2f1d18850e31009d976928fb3f6e5fc1ef996f2064c0a2cbd65084acd79cebd77f7535bcc6fbd1a031b2014eb1d9dd09c8f79cc6edb60f9832f46e6c241857f6f2a214ebd2071d71a1bbddd4c98fb97a683d4f19af41fb2788eba0927bb3a5b2d2cc3d7cfbfcecf82faa47f55139fbfb19941081710a6f601f5da288a515dcf1651a39d50982461d22a8c4190f7ea97321246866fdb9722b4171fdb46ae7049df5b58f60c44334c8c4dcdea8cd07cdccc914de3019f50d70344f388091d1269dc8c5c783f4e4bde15b6f1c0a517b6eed598dfb478e6647174120db53e47a48d926716aa86010ea50308806a7638395be19b6451323b52808b00c6f94298b753959e1ff36d16dc2fd8b5025e7cdc7492750b846fda28ab82cc93a7bad29abb2a5a83e0e950fa34dd0b3ef003356ee921048ba866bd18c0069d4d38705ac8309055ab01f2ce25b93b2f28c20f1c5a1786147e58cc67a6407a818fe1b047abb8141b85ebb65123d9d898e4f0b8be38704029660e07763bad5d2dee4c0125afa22410a7169a766f0723fd0614b6778493ddb7d540ae4553573cd6eacfd9715e8f5ee9810b25ba71d1aba00ea68ef4c8e2cd543e99277177de883107f5bfb732e012ea9641de79d6b9ee46611e88926ffd7d632460197733b3cda0c8561a63c744fea869532b4108305a34aff559fcf4348c79094dfab2f1778bca9e597013861e50b78ca792ac80c57e1f3dc369810038791a6fab21d14b8a31030c885722f9ecd77c52b7bb18caf9c85aacf14dcafe79a1abca10454eac7c5bee955b462e8d30f18b5e1bfb22614dd77b70076d374968b4c1ab15cb879ebe7ad1cb5ab3a2ca7b1d49214cd935ce2229f6298e4e529b9620e075143b188cd0fc7110ff260c3c2bd95a2eb2ebef7c171e5f3bfe67a94f72547cda940a7e11448f3108c123e75cd3a422f8f6999bf5bd431b19c05fa7ff9dee1b2e2db024a6997196054923a0a7031c37f28068e7b55526be558c8cdb06794c3ff249c2a8c7406224a8efabe4952a900dadd8e04f55af37bd71ab85befe850d5fb960c886fdc9cf41663d331fb1caae08ad68863f310c049cf0b5b0c062419fff061b282ba4a61780cfaa3fbe8753d4ed63c7c123e1fc0bd15533c49bbc4f72924ac168137655e96737cf584d806682f0537f27b9e30fcc0f019e078d870f23be0a0c1eeacd69a3795104e339377356c60ee7305daeb7a38aa85d10323cf131d6c653a2fe2441d41b8df3872e06faced2f8a8618bcf7440f89c19650658a61b8102209aea158f09e25103aa98996d49aba32b41c0afd622bd6f2b7c96548e4f21400b7d1b0ba1a3424ccdd3e5495b55b480f84798da4da76d843bcd4edb2a5b4bf26cb02d911a3edfc3ba79a0a14571922497e980d95b6d6d9da2edbc370abe75bbccda8e20594aff784222573bac3ba91072adf5277fe351fdf9545b029ff712eec462a9440f4645bd0d64756300028db7111b723f3b87af37b777a7c85a73c81dcbdf2b767cbf371464a697c1e164948b0ba8949b1ee8d9dd55ee2ef2ead2e9bb4ba6713252244810f06f1ae2a0e0722ecadbb8d58a7566517d1e5d1c91831c69dc5f16f1f003fd3529249b2ffef49af4c73b7b590ecbc936659ebe901f12c48bf67f895006dccae3877d75043c1f639f993e38903c4aa6eed7d5c007b3f066a4127e44b6e71d35ce93c05529f8cf8061b95a9d35737053fd1c5a0dee20aa9744b8e1e5a11153c238c693a7eba59365ed9027059344db64e3db91f4bdc5bfcae07230c8a9360ef4c4986dd9e3d2f988b5b619fe4430fa5e357e2410f1139e75f9b6e17a2995bd41e491c5878cf1706d4ca3aa03c2b84ba4647c76ff12bac52d12ff7a76cce0cd4e3b4b212d5191868804e16da2995b4debe36f00fbbcfbc254aec4725aed77dd5e1b2d1737cc23aa6d80e7bb57329a8f7954ce68b33a7724813f9e5f7315fb6c0626900e3377385a92433f499e18e67ee11b03049225bd5a4747f5987bd0cbd7eac04c7caccd40257ace406ee3d6df9ac7b8b56b34f93ed1fb4a62c3c1a869cf607a9ae90048cb899b74a3b1c4d6d67181b04e12f84f6c3a21d95e57d0f765b0fbd813e9da744b0588e8c1a8bda37b81938445827872c5e16f5750cb4658400b315b3fe5a7da3f07a7ad42ba4ab72f4991b72430221dec761856d2948e45795c95667772d4d5282e8c147f7cd8ac7247f0db72b281ab4046d15a6c5a154982138c9c72f7fe1f86d8bab0f056f3dde4fb3543b96013a551f20ed4867277deeadeab6f8b0b9ff3eba4a8254ddf38d5e7d1c38250ff5496a1f64547a9842270240c66525824170cc700c8c3d08bf42f0b6a4039d1b6c0e9a0d209464df5a197ce2b41d742b81fc4997bb13f30d3d243b0332fbcd44ce528ef03cf32fc4d71c039b9c270d35df6a5e383e5d9e74d4fae86baf6adb1183ddedd09fba03cf21f83f7466cb1928c584b25a7db264c6eb8e9ef70196ef0af37760b633300789a075d974fb51c08a9a10ee05605c708aeca606ae11c832b886e88fa8df9f6479bc5a79a4410129e5c6d7b941cfa2e8483e0bc798c747cba2a5f721b18b4d4128de71c60a21237dc0b1a1bc17b2cbf58949858abd0b5de351b66ebfd61f83c71c6c8069b083fee3a4c3369e8ef120bed375dcf726c650a24b2313102184891edfd050099e50db8418645d08af74e96cb12ad7b5dade692f1a52afbd99a0a76df970a94fdb6e0288a4fce0a281236e26a8d03f6de13df0b345ad096d465c25dcf0b653e36fc7bb16d0f385130ce7f61542cfdcc644c92d55559aebc931a14a954e09156c62424e5625b1150458a6ca60068f76690a6c673ed1831b78615560bd9ad0b893bcc602712a9e571c6e4a33317c79d5fd3b0de89541cf6223de61ad7f5d7505ff863d218f6822150455b977ad2df3c02be094f6832ee68872b1ae7a011e5fc158c88ef1d765a6156315dddefea066019bffe8da301f30550ce1230e6b65f6b74888a1bb72ab9020e2b79cb24c5d3b5ef4a3f3dcc39c15919a76a7b3e6bba2ae75d05ec688c24afe2941e039beedd8a0dfd19c43652dfd03c37924af9aa6cb6d87a7ad5c40303a77dfbe90bd7dd7a78f0393cb593d5b507430f1814baeb0d9bd271676c3c27fca53ac339484b0a30ef209f0686474ad76ac89e6a6cf4a613466fd23a144373661593aaad4d680da779298f15cad31acd77375617b8398404430b0d91627c7de66522e2a37fd15034938599c8d7c9ddedb919c68e7aebdd572e3e93dbdb499fe430733bca74096a6ecaaf3fbe419e0cdebcda706d59ae4a824464f597e33d61e5f3def670ce62c4cc8b10f1649cb21016df03e402a8d3342c3228b3442eba5c722bf0a334c38fe7c451455f3a5db8801cbc20820cfd0d22ab83f44d6ef252f7ff4542d28507e35becb9d6c9cde913e556b0baeadacabeae86a6523486f299bd13dc3004f0000f89ac212fd19de356b85b793d7efa965a305405ccf91a83f124265d52aaf44057099923caf708b0f361915222cefaf482408a4ebf1b984afbc5cd452545005d7c442a3e32babcf67c89aef7f55b4a49a9679fddc31c9eac0c0a6f302253b29bc1d1d5dcf19d291844990ac73f94672a420e1b2f536c8c1bb47a828ac46779afda3b329c71febb9afe081b4c6c0aeffaeebc62dffa9bef3e878ebdc1a5e0c3ee17d8b6d94e8002e30b5f76f4054f335001fb3d5c131b3678f7cf678121603ffb2d42e92fe1a18da4ff17945a85a1dfae1e32d120577b005f87a51625d1663c4b6cf2201cd5e3ca454bc909ec87d35389b5fbe4c9123bcb56b9b8504c30534743797f121c95b7374863dc2e2666342d674bcedeb2edce05f2f0719c50b8b7ff97b532259babac5322e9d9a794bb44cbcb5224257a44a23eb8de5950cff514b3acb2c3e1367223ac694039dcb3f195cd2a5b846f9bb168d41cd5d824365ffa01f6e4accb6993cdb19009855400a3978008ea780373be8264a379967d1063d8690aed454aa18b0af11ba84494173beab2eb616797aeb67f7ec12becc1eaab10675d1f35f56ac25be9709ee0134434dfa44662eb72b943c0710a8f73992180627b620ce74241d43119437fe068342916f2ae617c4b0fe0f5e9f3f6a37951ae2f23ce38e1b7b32b3afee8adedf94382f11c87ef82873f187057f203f4d8f76ee6ded625adcc3b41da08f4bb314d1edd2e80676f969da354c039a939f04e8f5d1a2b2e45b40656c28ed5dc1a82ea12920fdcd1544114f910760d6dfb2e3085f339974b3b8cec71f7d9d4236e2b46bb3c15703a5fea839cf60251d4e9f72577cbe5919159a0f5298c4b825f08c2e99545efe926c52b400b5fe5956268f393e1418ea8a5329896e9ea447ed38cc2492d49ffb60b366bf0b0c8a0469b0a9c123eee954b0b48cc684f8c5518456ca1fbefb2b5557c16250c49bab2e3d3416916fd3da9f7282ec4efa6fd0ded192b0a78590ab145ee06ff0922c0ae0bcfafd318b8b92d4b70370a73acb6df7bc34a3424f5dc6415c56b525dd854e22cd49872adddebafb6981415baad443a22d83cd7a842825e33b6c5b7a0e6f20fa586bdb03cf94fa1a6f4286f2b451fbe90cc856d68cba6f02e26a89748bb2287246a62344c874f93bb18f68f2bf0c3cd4414c66decfdb4da63998699dbd160d917d4384763047606517af0fe532cbaf6ab554231bb65267d8283d207c0c63785fe68928206ed5d6a189eca2527757fcb34e2bb814a7e9649f97a3d999e16010e569c237caece604f6ef8c4ac2f578cab7f5184b510b66ed046e10ba7da2d67e2aef34d8fc1142926c31d82ebc14f5c17f9362055b4b92a90e95cdebafb98e69365e29343f45b0270b371877c83c988a120e520db9cd3541c5f42295b78c4d7a12a0e7731af0fa6bdce9944c6ed527cd7850308cf3fb175c317456e01e85de59c59bb6bc167ae608e63093d637476b31ba3f44a9923cffa35bfbb3f36b0a08ad5739e037b94c3da331f25f3caafb2c5fdfc5d58d1df7b7bd4a727ff72685921ed160ac0e8eccc6e7c6193ea7505732ffefc92c5f1c96055406c20313d85d45563afa61661a634b79ac8b793fafc444b8f33292481880b20d98d1877008fae9fa9aee486ae7799204eb32572b51ab2c32f1ea4d70981d8692078953353ec446b5fa24a93f7c77652e8cf42294be72b016f4d8a5fe24d5488b5bd1ae8b0223232c6184cc1061c38a9f96bb20a17c83990c01e4e41a4410c29f9d90e29add7f490ad7f6f8031fc7c900116e9b7b1544aebb22f650ee8136ba77d4b03589564081f5646276403deaecf906f5d949111fb9cc5ef6339f62aff9bb0818f081f6ce919511b08ff04393b9317c382334f67b80e6beccd35870e3471241b05aa943914194e5c8883bb92cfa517b1ec0644ebfcdb24861793f313b6b248860bd2ac7f25b97e992ac48281c75000b91fa00a05566d8069b6c7c2f1d2f9ae4105f2b0a57a54923f7424018cbf3e73579173175a413ff0063f638f2f2591c5ea88ad59329e94f9ddd914a0fa13bae00bc601e54149ecf3da25d9b0023b251fd108450ead1ed545f2ee28f970617fc75431df0c50dcdf2c53eeacce31602e2c93195c397b57afe6fd07d3737624d799af696ce50f76a0da021e5f423351176caf10756223f57f5d7adaa69781da6ce79bd12e17e3a3bcbd731963a46e7a6b60939203314d64ee29fabb14de09feaa31a81db50d63e09d1705844c7d6938b4a8df22a7ff5e1256dcdb4d90cf950e19f83283744e16c9bca767c39c25ba386d95e026b654bcaa53d6baf6cce4b99526bbe9c6fe5252abb5cee87bb545b7e600b85532c0ba0f896fb8083b0ba5ce007afd3c3ca5a2ce12f2fe26013a5608ce18a09cbb4997bd3c04e151aeef9b78ec612c88792cc7efac0ec59ef89dcf135d0fbf2544d3865c3eadf315b6db2e10c583ca7cf0d62a1db363b5c1c642297e1f60949d53d10e530de56dc2e770e63c185d6788285451fee59c3f2cfee9ed8f81c5a1535cd488382625a1e7b5235c6141488418a409c809af12d23f06d793fe208965e5e4508c7213f93002a474e926fcff90cce87904a46c520f7672ada510783662c37ed7a3a763daa89249e824d397cd2e036a149075c9e45771c6dea98d0547288a80cc363e72347c24f9ff881d9e4bac6aad8ee3e434444aaf87ed09ba345617999ec0ecaddbb11b19492d9b5b9cf5ac41272a878637fc499e1a4b5e2e91cdb08f2d381f8c1cbb160dcbe4c7240055ae556b89e3c24176d4ac028c1f60ba28a3c9b0a4474f91cced70d6c7a3fd64d612e5ff2f912eed3e9c77e521b5e6f9f131d7dd980c6ef76111d10e48aa4e37017a91368e082297cdd18016aeca27fdb21b37e875d7709a02239ce6ea529cf37255d5b617c153ddaf44333b85b4ba21d5a07875e020eb164a8362e52f357036733522027f45292b5d452fb8491e03f2e662081a498134e884c1917d79bb5e5cbe891480071c290d5254c4015b6e9c0d7ee0652a2460f47d5b5ec7346c6ccde2aed21bc351beba002903aecb4f1ee8cde9ac2e4a0358906138bb729e79b22574be90a650d19572803bc23e6a96a780b0b115b1de68c09f20a788021024341b6f785552ad2948e92a1530f163c4a0ea528fcd9e7bb74177381225143dfe5b164f66909f2cab31644a4fa0764b5b939c2fb02452969153cf142313177c6aaf8ca103c2ea73f9f79a8d45b11b85bde80ca4ecca6cb3696ffd4134e29a5febaa04f0da7cd30777f3f24f81e38fa77e26b25e70104b46b20e985bd213fb5d03c315ab451ec75bb +MD = 55155be7412e73104fa05d232de8f165b3f7b87f653d7383d5a6552e36cb715e254a6e5bb7cfa683e238e0ff1a1df6c7 + +Len = 76432 +Msg = 4c66ca7a01129eaca1d99a08dd7226a5824b840d06d0059c60e97d291dc4f4e9b1d69e8f0b1c0eb86ca7a6877857528c8ee776eb552924ba979393aa53fbccea0d9fa7486968f69af870005c52c1319a65600f110c8a7091e43deaa55bfa8c7609cacbed447fbf18ee3c90cf92372b97afbe39c6547851e8edee6c625d499a554d5df4c5c3e7d2fbf6133e276142a84a1609db53557d2f885dae00288271604f806309190f2a950ab7fef2aee669107c404adc003620723ada858e41f1f9442b4ae1f2314fcf720fda0494aa4a34cbf5d589261520ea82c40c7cfff3d369b0b355e19755ac5fd0d0062e0c64b42b417d7ecca0da3a61c8ee9d9a3987504a0bad466ae0cd4e611717e48342244dd7dadce31d3297ad0faa8232e825458f23bde2c885b5e05c5daeaa1c0b1e323cbfffd9ab83c493a07c9146766cab74b97c2e1a8139fed8fedcff5155ce89d5aa6b163e7e073e173c2ee6040e30b45df5ddc61d198ea3fb5e6571d637d56956bf6489d106af886ba8af0f82a53c26496ccfedb2398c8c92a1806c006c27a8fda231be5be8858bd70d877689e196eb7e46d90ba3893ca1e4f2b5589699cc2c127c5a1fa3cf912da3933c81e06a48e945aa8488b6b0a5cb3b778d9e6169cddfdd7468127361da571661589a51e95a0ae5c057ccb457cff0dd588fa4298131a7a6b3e201914668f279a06328a206d234a8b1da3f6425c3f913be44d3b58c006eb4615053c62743e41477e3939c68ba51d4a5954990c388cf25d13293cf30421b50a53a70daac74172f0f624207b81948b2c31153fed826585bb8e34d3d150096c2a729c0957c02711290679fab9df8018a34d5c3770da67efd9cdf67c8e442c75290a5abbf40f5dc05217b114fc05e64a4206903c30a0f2852a4ac4b38450e96488834991f9f553f4fea2500bdc8535947ae5679aa76693ea3f9d45f55df6eebebb660f27e422b813914edd4bb5ee0c8bc06238ff4f9bda738c2df0de75b69ae8443b01ea4d07e8c0bc75bf6122a0b994c5158ac683c124d592853bcb56007c75b56ac8559f257470d2af8cc8ad3deb43cb77e37d0e770174e53bad38897511eb818dd8f6550bd9a86664bbfea026101d75f1c9af2a2dfed5e6a9bbc28a84e9be3b1caa58f91b86dc0a2dc38fc5e9b696472ba3c961368b7d3957fde5d3a07272348fc2da05e50a80107349d869094d22a17e08586e5125df3feeda1eff582a8c205f991615e8e3492bdda57513f5426727717dd89bee6c807ca6d6da583c90806114b37973a79f7bbeb56cf2514e44b84b9e6ac6647eade562487aa4889e42d389479890d991adac3ba316cc9b74b2ba807d65ae62728882a32c4c0a0b2d9019fb50ced8a2477c5f451f29507cf91ac26866e4fd106a8afc91cab1875a3b26a859d8bcdd5839aa194d921b4a504bfb8456036f4ef8e71397c0bc5188f07775230747e90b75d8b54ec7947306c00db364fbdb6af07658a108b279829b6842ea0e9616e9ef85a50c8445aeb712468f00d8ac477e9e333fe1a3e97aeb4b1c2e13cf88ce25f6023f3e3e4a395df95e703273f9e000b49a1d241dd848f1f496a970da51e623bb6607c8f137dcde286231e6bb572d97b0256106baf15c1d3462459fd383f769ac4b8f1b31a101ce2c1c448c136698ba3d6fbc082fd73ce3970972ef3f816a7e450d45c37418309470c738a1108ab9dea8c38e86d0fc53eb88e6c1ed82fcc7c81235cc402d0fe1d7930d8eb43745f97b7eeb492142d3497b76a4b319223887ed905f732fe0fabdee0f59a7340c2ae0274c218c55f9fe863a0cada700a1c733354be4dad1246b0d6e422612aee3abf6488d10b8a36ac0829da77c4e22864b5255b15073d26bc358dee81d7193624bb485be336e8819ebc72cd39af8fd54275dc54d3cdea23ba638a64d8a24700c7c93355c041e728bb2ec5e1d74480f7fddbdfa9c046bdef886155b0f06abc356c12afde2fd38f134c83aa7e1b2abc77de11b6c0a41bbd736e58763891d881bb5bbd435ef994e92b98e6a90ccb094b3e2d3ce90347f4f397b470756682939d7cdcf3783de62efc56e97d4bf3b08b3633328700d871776544a1d0dba18d44185f37dcd4e3be46d07d8570179b9256843d341884a9e94f1d607ea130507893fb4bb39fe1b849876e89b5e8966d39123d467d17fddd782223d4930afadd0c274d2a996527254f96dd60c10d4ecf6c686a3553adf1dce6997d892834c3af11a916e331552d90971e25ecf106c92af5ff12f2ff02ea0efb5b35668547122e4fc05e5ec3987b62eac54f138dfc8fe79a813d64c83d6fdb7e115352f26a70c28e152e8397559904103362bfdc16266c2493f375f88609ab3962dd37b6c564d395508d3af5b510dcd11166d7277d18235adf3d0cd6073ee6f2f7ddfc1a8176c92d18846b24e06654f5076443b658ed72060d2211a9e599f472775a8966c62e0c1e151afe6dfd26d343bc62ebd1d02bc3eec5ab6dba4b9f3d818b5dc6e2bb150430f057db1834d5c084d96bb7c00d5c7ddbaedf06515fda2ae6dbed9bd589b21a2a5143ea6daffd858005848fca3607089670c6c5b549d1216b0e12f089578db4d6dfe714b3932589ffe9b75b3973b5cce4b4689230320c8bd6ccd4ad444e2f3cfa434a3f340bd634c92d0b0353eeed319022ce56084214d1f0bf3cba4f961f185f257454363c97eea578896f61cc379f6061fff786a07059818d51fff256e5b2cd2b6e3c0251f01f5d723787aa381b7e1e1a035ff275a88d51de1c6474b70a700c003fdde070692fb7c41f347858223690f4e37494e845d4275ba3d21fe015bce34aef2117c28b877c16495c1154d32f7f98a620b322ce95cdabf02f39f98efd1bb287eff16edd8d740fbbe8be55b7d1b2ad544a994acb3a09770b650b2cfe9a7cdf0e2eb49ce8aa66587fc1c7835485f3dcf6da8c89c42aa467fa5add9fecfdce7a8cc8a97632461b999dcd740535b108cd92b7d50742cd6622c7f8f77ae08dd92a0aa4182145ca5c791bf60d04dfbfba2733cbbcebcc8b16517a25a0e662b265988eaa49c8a99cefa00323d9a7dc15d192defd885eebcc7e9b19cb210bfbd4396b23c28391e4269cb75d3c2117b21d15b89d35838726f864a9aed1c210325b1e4cced410a480cf2d662f282d7bec3d4e3e775bf38f05779122401fcb1d90b0dce399c8362a05fe685483d145fc0fdf43cf7558219d10b1cdafd89d845c9c393bd78b863e4bf91d172a601eb1c2a56abd119d1255dad00fdff87d3335f3de5f03d1acf7702ee693008fcff7b8f4364684acf972d76dccf791a437c9250ade8afb78050113fc53c8ec2cd644a4ba48da60499160ee7f8cd2a95c0e479dca2523ec759d8d71dcc924a2a980edbb3d659019906bc5e3389909f0c70b95e55a3a909e6f7d84d0f7cf0fecadd2db46a514cf76289187febf7a022e8e359b45e3a53bd90fabcc7975edf190e0d6f48c1ade0040ba0b90873db7272b589542058def8a65fd314fb47dab3257eb9321d7c349893feddfc6c6d9d9dfaece31706c7f9fe709e017f3c837923a0976114b6dc8dfd33b6a171303bc67918198130ec3e23db98e6063a2ffcc29716e28595897522846fcd8bb5e850de9a76a5d430552dd5168bd261f439f64f8404daa72329d89ab4a49e0d18f95f5e88832c5c73b6199645c5cda52bef126880d70a364bfc794f048ec2a638d7b9ceb9ca17aa99a383efdfc332405fb3d3b60419dbc38e95d9b7fa6ab5d78427f297a4b7e21f1091ff3a5b20caa3fe1cbcb09459d9df596a6c8e1ce4f211995e9c51dfd9365a56f5de0e3e6ad17085ae2fd098038eda3b0eb419d26a0204d6e00975d1aa6ebcfb63b2e3ffedf11684ecbf9ea5935554b1e742e3b1865ff1cb50dc8c10a805e76c5010541636a4068a3cfe8333a5e7cf3c889b8430b68698e52587fd235e964a384f78c727d164e0f4234f26d8a790ba69672073e676f04ac2e29e51604a8a55ddb64ec59b4abe06613423e1fb04fa969707642b49343787d2fc82217dd87cbacb2924c7f71f0a173fe43f5d116a8ff463edf912bf9ac6e093e7c5d5d294c7b98f1c7d56a1aae3640ec7d3e0c234cb444e8f31d2d00718e59448fbe6e51c05f2a804cafa419ad4ad5c33942563f02716b56fb0e41105c7f7427476ed4bbab1f69476901b5d4b583386dbf283ad293dec4713e8cf09133ea62d1ed9517d1d5635e2f65f323b58e8973d057193d44c8a2561f06bec0ebbf762c28c85abdfa05d20f1e8aaf7822ff058ed6493de9fe67662a4999cc3b87c8ccd91622e6509d051486fd1e5a3b85d29f8f66dcbbc56638d146d840dfe9cb16937182416158249bd2cbb56a1ff545cdfe80675abc59e5058cb4b2431f51207074fd536ef25bf690b4e42cb6242dcab9cb68c309672ee4943e7cc1eab3fbef9f178473f1c1e37bab61db4c4a916b7c5dad506132e5cbc9ae90a4eb7dc36f9e6c230ec912f7771bb682b8fc6d8f38c3834d3f291c5db8fd1b2a361a437936979c41a43d19bca03e77be812368461a07f1523d0311f87ee9a3b3393585fbd740fa184cb74d37e44cb8be40ab83dd9bb0706553d757dea4f40ed4b6248b71da034d51101ff891cead3f29fc7b067c4326c82e878d3736b2852334b4cf9d04c8475c93f85d60f1e3c9d4a8be7b394d99d1c154e30df9283106ab7c3b1e03db2773f0870b5acd80ad0941e38d936475251a23806f3fe5dea8de6f5354f9042082f1d1d451fc8966b3d34d8171abce1f6f67b559320c437d9f7534620548eaf85e28c723d22cdbca7d90bf2b72abc07100214088345a5a309e33c55058f3fb8d45809a1c97d30ad494a96088997b82935fb18cb47d13731d2e80e9c655e28007be611166a7d75fae7f84f841ed045cae147d6186161dd66cd6c4676c03fdc08e5233f6aa0a22227dc68b4ffd762c96eaa8ef87a60662cb461f6708e96a2d0548875e0f8fc99a9b6cf2252c653ddc776ea26ec5bb55c89ad390d194e692589560e84a25beeb2911a08ab9582049fd48638a61e56d0b398a3ab16ad30a8467b9fcfa60ffde78b6ce4416b19cd7a37552f0e932ad66319ce4a40a9b8cfe4743b945470667987928187e1e74be32512eda3e4548e64bcfd8f13824ca8969e3d2dd6256a52394f56938762b6a86d85d0e2b75290b58c7ebd7f61f866190f461fe6d7bafa6fc79f4607656c4fbbe72ceff8cbc1ae3ca808f803e80b8c66a47c8aeb0badb6fbaf07ef51943728f2ca7ade8443ba238051ec2bb10844363df0920caef45616a25a09c106b67bc8e9a2001b09c1b4872d24a8d70b352ae9eb6e271397244c9fe04325599b2ea2a60ce85d241dc8494f9f7acf687701481e1b97cc4e581e09c92214db27837f4446d907d29824c9d0f363ceb08e98fef4593ae7c20b564406090429ab99642ab931eaab00d5b338f408f6bafc87c580d811b5e8d8e91628ea05f30c074d91a3a9ed9e2c786b4db81b06d4aa240291296bde391551561c5efe167b368eb2a09c7ed07026a9c758a9ce539a36a77d907b281520e7cbd0dd38dad10923a2572557b0911d0405887890869593caf75727d8756d09fab8e7ed5908bc297dd2a97477d795d15f2c1d020ecc437dd1a43ddbd40c3c50a8a919a122004e588fa028327f6c5559827df3996707c395052e8030f03519918c0cd4ad4639fe12e38b61c3d0d76602388bbaa35be1bc95c006ccbbaf886b591f64a776184e41e51404c4cd0eb13e57cbd5c0c43fb294ec8ccd81c0849ed7f3dd3110703a95b05b9b9cff92ab7244e6c6dcb4509522c305d5d33e03f1b0b60e40029e4fffb8dfc2d4c440d919a3202bb400e3fcfe9aed6e35c85fea8996ac14d249af4a0a1016c77a1b56f4ebcc46931e02fe0dde836aa2270d65e8be8910841e86d212dc33fbe5d5f2907a94462eb96f235127a784d13e1422fe83033089f88f4a951ed8bd058a82fa9bde95a94f0b12129bcefc17979ea7a9784dea058eceaef566e291f3ba420b83c795828e3e04b1212c685ea454403bf171adf5708592f817d5f2aa708088ca3ea233cd3d6232c70f817811b36ddf5b9b6927981a04c1e53250c354cc0eeb597bba3de86f6211ce1e4992e7ed6aa87117cd4f546a82f800d565d9535eabd643db8e18667c943e30ddc33d338ac14836f71c89bcda9691d57183a908c0edd5f3de8c67c9ed9ef489eebcdb7744084af7a9e57b23f2b62bdd7748b7076b4b66e3e54380754ae8e1539165023581b60d5db0a6784c3b482283871387b1d65b05be8022070b1ce89108867a25f0cc411bb3abde15782ce3125201829faa9a833ede4fc6700dcc3460233e5acb3b9c3002a3dc0ae74a400d77e387047344206a7ebda4af3fcfe152fb2e298566787a194e98f1ab42350d2dcf9278178730e06741e71f2aeaf3e4aabea3c8989c29de534c2d6d3ddabaecda85f9553a5fd3830024e52fe7f60c5ec2170e9bf2b0d24174a7bbbf41056e778a3772cefb71ce60cb94225754d56ba83fb0d9242259143c03ddde584356a235c360b915c9415412302c4916002da4695a089df1b6093236775b0fd8b333089ffc7e16fa2263370fc439a3ec6853491ac78ac7751c35eeb945abcaa12f4f042ebc0c36cca53bd9b1fe58dd5afbeacc24feb3e03ec3539c4cf54c8951f5ff275a8877730da05faec155165fe24958a020761062af5a06bd6a1cb9e65bd5c7d4bbc86c564dd23338965eeea602bf215785a42cd9573eb3d48912704c3f1d3daecb12377b0d895b19a9723e4a4cfbd964dd2f65beb6efef74328d0c357c5ac527f0fc853bbd543b948345a1a7115de55a8f7e578d5efc1e1eeec2ea3c840cf2b2d5cdc232edb1596bac3fa5570073d9ab25078ecfbfc1c427267a96bbf6a25ad1d22c7adb0f3f38e1acc6b5d49acc3ad9265157e04a0f764f621aae5e34c942278e8f0baea24c5eb8dd714faa30c56d571be26f899e03a8da3a197d7dded05d06537c111847673f33d6d5ff42630df5c77e4112061c6cd06a16fda0a545661000d96a17c25f1e5ef5215b3127b1f4788cb5e40bf055998171713d946f18d8efb978df8c1759e0326f458781d4ae174a296b4199c2ca183072d15fe525c9c76062ca42fa91e84b6e249bd17de3a7f50f1ff6f06817fa777200dfeb0f83c8aff6cf464acfcc5abe4697cccf61af400c2bf2f166d34a5725aa8dc5656fe396013731654d882151c7605b30d7e9c206cb1524e31b87e470a16e8c5a35a2dfc259965bbfd1b02b3de55fb1609172b65cc07f483484e270d789128ee6f234d2de179880ae5de464af96796cf472a8e6b27abeaf6e497f79ec3b5b07f411926749d9b252c9687148076961d034f1d8edb85857fd08cfbb6a3f368c7a1a2a47f7760e78348988035fd5cc9d7ddaa5af35dee7dfa39c9e22bc31194b67b192c22e13245ec87712f716ab3e80d82df4785986b7ba25822b41fa72420c6372e19d5581b9da611abfe8f6f84da081d764e0b350367c1561fd95af734f43cfa69d3618424d7fa0dcd5459b3d6890dd4f8d64fdbbf299d5a48baa45a4af863ef53c28e0f54db30a3609895dfb1dc67cfec461733a5a97e8d26bdc5786c14823b734f239eb49190fdeb340c9a1dbb5c37da082ce5c0d0ae17404b84faa530e00951e0eadc4ae16240f68f868d230e36344a8356981584741f1ecdaa88fa34c67f76dfa96e20b4ed970a11cb60cabd3bedc51f5cf4aeae17cd49a9ffc975087cc569b229ff3ef07a28ae22a2ba1bb1b48bd24408a39237e04a48494b661d944a04b2c33235aa7f511b6a2ad4431cd0e835fa5a204ac90517bea3135606fac17864da788cb86e47ba99c6912aa4d7032114c4c96d945c020451e371e85215754d0c683bfe319232fdca4bbf69855433a550b8fab7265214ee298fcac8f275991225e47351481c2761d5801d5c8d9a46be105e53c6abb3251f712f85bf8d221610d6d7874da4160d2fe2ed11ca65b126b17c3f3d61c9871cdd4f4c0c95cb25d28c48c8e1baee87ceb01b1b047ab5a1b9c9bee2215228d7e171eb6dc6125685b7d1a23fe860cd785129a6915f352472e94dfbcf655f71aa5c236e1a1bfdd34aac260dc40407eaf07ee5abd788c35a2d9c845e8f73514c09753a00db7320ed7d98d2b1e09d76ecf73d2b5376e9ec00dabcb70ca9b1ef60fb1400c83936414a25651eb51a1b767c957642c5f5e878be7f302f30a58903568821bbefbbcc29924afa5242fbe7cf42d311732adcef2e3b26e031f00c6253d5b884b49cea9ea06ef43fb67f0a6749e5b8f606aab465d720d6b4087465a3a986942533f84c126e862c1c9195cf04ab0e4d0e436c04b23b149894fbe538b6cb1123ec7f2b6b915a81f9792dabd226bf64993f7199543d22c07368516b0e02811d6ec2e25ccf842d07643ed0ea9c364b90a472da582d7054cb6f18532d6def95527b8da2b4fe51afc27453c37ab49a18397690c4d215b298de948c4954e0e5cd5a5437085a8262a85731a04e82a2bcee08187f782f966cb8a1ebad7b07ec4cf3da01a65c76e31de071a30eb82aef0395a591293e9638047abb7b61306f1b8ccd7d88c4e632a7ec1fb6d3834b9c22d6d4b7e9745d2f82e3a7d54c91b1b4f40d24e8f377edb458362ccec8e84dfdc39f74e6284a1f23fc710796672647fdff38bfc64aa9bb247d62d0628a2607785ac53edc5792ca9a2e1661a7d3063872c57368bd934196ab9fdad31a2223c13270b0f73e7e34a7bba13b7eaf981bcc3dcd27e575d827c7714505fd9d97c9c3568cc76ab7a317feafdc462757bf4b4d839fbdff982043969df74b1594f1ff540a37745eedd025179e67a122474f80016fc49b7ecb747d4a573e14e5a639acbd76f81f9a880c4539afcbb2372650a13226c32b2ab8dbbd2dc9a0c8337c76ba47c4572ee731605fae0a8fe3309dcb9626d324d4cb075deb8518a7cfc8bdb0103719dc0a0d90d25cbcd83b9bd453c647259c70fd286002ef9b6fdb926c12ef96d8a0101bd44c6d22ac415841eaf14c9c79a92e100a69d3b1b7f4c377e6233c34717e7ac9040d369ac66c6d3f3b1e627d6923e67439cdd71921cfe7e700979ed249dea37d647d37ac518202fc8f8312d23c3221917d3216102029cf4b80171e58a9e6119dbd42774197aa9fe0adc763833bfd65cf9e41997cfd2a04092f4ac3aed9be4e93d704fe3fde0dcd535f935e78aead3d9663a1674701f90d8bd5d995bd218fe2c57a6cd5906fd213bd6b8f0999dd692e4e95fa885771bf72373a6b9c6bc981539d6e21031a9222fa869a626ecf0f5ac25ffcf6059698a3bc7725a9e1a118bb2b817acc90c78e250916b4b595008da88031603be5eabdce72b2603a6b485766f1db6815857dad02c8d6812f8415a07af02c8971303d27671c4fb1c84246cfa92e12fea3e92635e2bf2cc97945f78ef89bb93f41ef761f9742b8e1f86f85c5ad698e051fc4a96fec7781533ae08c9f4c083e4953297ded866d54b874f9eb84992ab744301eeea349773ee81b5bbe1d9bbf25704ee63ad95b248bfde4e8625396faf5857f00dd192047c950c4c0744e1049d47cda2e952b3ff0c57aef45d179cc5fb08eb4715e189a708c53dc17967cd02db535a00a762a59586af53e171f3f62e35028767a59e9df79edb80c660bed06f32e624881c51fd2e4e237796636ed810e3d1b6d22b6d516ea5649fbb7bde9d824a9cd7a9c6a52d11c9608473afdcb5067df2f42715d22684c2ecc511193ba6e478d3cdd624d0b7f89ec2f509c5c20f8769f2c9d6f3618fc25dd0ab87d75a7f1e4427819db569203b24d763d933b36a0c3e3d925252a01fb00cbcbd6014bf789843049d70f6e2e861f22a3b628825371d714ff839a1f238c6260d753a8fdf35daebf76bf077b293059d17f626219c093399b665fd6fec8d8d504f5d87774e396ea57c978ca66c928e7c4d2ea49e9c52d71ded65fe2b03606e01fef0d78960f5bc06008ab60185797516164f5e5d8a9670847172ec51cb53f0c198b99b24cbed5b942fcffd2781aa42012fc2c3fcfb66a853df07287298fabdf5a92252d7f392c5c656d1d276d5c78db3e64375eb7325e70272bd431c10a71e34acb58f215c987313123ac67e1633a0a4c62bd4a76666b526f8efbcacb70baa05100db08f8b40ec10fe5559abb791336a6bf660cf69ab7b17ce2905a2e07ad9dd8f755770e42eb93657cc0c9e3e42be6b342dcab1d166d18b6ee3aead418736245796f4841bd43309cb194fc40eca9a2dbb5c42fd521b30c857ca280a4ea3377024ed182776b411e1d4a7939bcdbb6f286dec9a10504b11751526f2786c71665753e222d9a960ae74f0f198a3ef7795f1c879108950891c082394ae462f544b308110a529184c91299ca19f6af8a1b700576c46c6c72788f80f9dbc120bde4e9228e33f7447da42865412485f5dac3aeaa740bd5748d900db45ac9c5a9671e8f2a7f42279bcbc3b01a3de040f9309a9f71480e4c94a001c18424bdf8e33b1c2e8aaae2e77eb54f321f86f52ea3d3c8cdc3bc74d8b4f2f334591e5e63b781034da9d7b941d5827037dee40c58dc0d74c00996e582bccc8dec9c12550d0d80fe75efd06f3c887b4d46be1fcdc48a24c6fea99f0b519576f773b3c649ffce81322dc45cade07fe80fe727fedf7c9661e7110d9f8b4d25385a510802e33fe0cccafd90421b36a311dda2814beb88e90cff819b5e107e555ade0c0190cbd72da9ec6dbb4b6045da3de00035cc98ee6a6d35d4bda340ed0e23aa2e0837a8ce9c60c106ad3f24160db54088a94a8fb800cbb294da37c3a136dde73f84be222d1438704fcfe611af25c224c3468c77ee95709e4859e342a2b6cebcc5ddeee2fb7f7a21d18707cd1a08aab437745cf99610a22079a46d65f9773e524a7a8f9040c46ffe123e6c005fa0b51a6e9c80bdba58aa60ae229dd3ad6077d055c569d405cb5c2c9c5ddb5384d32d7bf024c16a6157d0876f3b3d35c658c05f6f254354517c8cd6f74a1d6d938b58024376e7a894f45bbd455713324d4960271e02e6bb2cbf4622a96ffaf893af80d4f1f8ba215a179529b6dee973491aa04fedc51baf9e7cd1383c3339998d27eb1c8214027abba8c4f44c38859fc2b3c80061d4a8d8b09b764138fda4fa88dbe1007c31865ebf9031458fceaf5fc0fc2061049855e069047d65233701c38cb3aca869b60f736fb524450606315b4cddef9b5d79ec6cd29f2ecb8748199ca297933dd00d6561d200e41c3949d23a6d3e7fd5f4e03327f155d09ceb98b42bd06fdde73a9d50d1f059bbf1b00059a52c0716385233f4b6d00cadffd88f9a1b2023d3cd2ece986bd2a9efecf4918f438f20fdecfedbf5c477ad0b1dd59592129a9bbd18340804d67fd6c9378c663cbda1717c188041fff7ec21331e6a1265b845bfe3efd4b35dbbffca91f700e528ba67e2dae461ccd9f7394e6d291f6edbb729788c7b97376bc15b6b8f57d9781ae3eb5c617928e34d6d661e01667d11bcb44eac01e404fdf6919aa30b7d9e86dbe034c557ff5df02101797836fe0b63d05abd448b51a46bc6d2c4594c91d77734584a07059d895a1e5a7c43551951cddf4e7d2970eafdeaa22de2759bbc0cb2eaf33608b37c33890c217669a6ded8b5b03b9641f8d999e3544afbde4025c6a1c85affb2a9c4e3e5b3fd70d1717627840cc711766d4300bca2d0177e83f68cab9535adeb2e9c21d6da977163fe09c7a3bb9af5af1553b8df55683e3cab54e738182b499d8b2c76c44b96810794be3e78855d4ad43a2e4bb235b9790002695eb01ae5d9af099d6917cca3a8a57dbd166d32b818cc22ff419f096ccfb2ce5d797c630b6809ee1783372666ef25ff2fd6e98952688115ec200c9b28493b5858c002bb44fb9382c14a8c21865d6f633c075453d441da5d1d7263b196ee81e881bcabea389c350fc4487f84acfb6cf10b301558e5acbf41bbbe0b145dc66dc600f4dfb79052d7db480576197fd002f0c5d996602eb01808ee8d6c8c26d9e739fef007ecf426612f7408daa6a8e41aaa918b3e335755cdfbdd66eee09930d88aa339894f0b1ebb5370d914f4ce3f9d6598cc759807a3c762b1d1f9da5dd226021656cfa97e45cd8f65008acb9aea716a0127a359e6a3ec859156f5401bc7bbe780cf3fc1f4a0802b7b05a6f2b4ec8001f521303c9d5c25aba67e4adb7a187d81082d43611639ba6ed971cf33c34db0719c44850ad4d65b1d18d0607323cc561ad7f7424f8c1764a2a8cc6c546f15eb041d17088a321a74240ed5a0d0bdeb2df814b5a454fd42670d0f9ce71e624d1800a1222286602f5a06b01370b9f17ee964e8f0d03812c3a9f7376ba75941fd1fae4fee3bc4061df30b271439f7678b74a67b2e30c372a114aa47c014cdb72be8565002bc0ecbed297d9b606453c61db506f4fa2bbdc5e48f6d682496416ae15a40cbe60b2a57a6e2a2337d5792b73994cc7bd929edb5950187c21e957f02265fb3e92392e0535008c418f57c7fe1e9f93f3a55921ce8ba54417c36794d2803def9d240b8fa67f4822972503ae1ed34cca856f5cf12065e6fe3bff4aa74847ec058adc5e43e3a9938196814f87f8223f54ffa414697b8863ab5b2e191bcbda2eb19a23b8076754712de22cb202249bc5d7c4cc26073a63c9dfe7e8494ec7b744883db29f368bf06f8bfc9fc1992e909ea7774ff856d778780084a651cce68febfe07d17a5ddc1dfd20385304b970b1285879b811e4fd370cb193f0d92282a473976b38dfe9c23d988f37dee1ef957de17f6e9ce91df64fd667a85035cc369579c8fa314666f8cfd02d7dabefa7f7475860a857048e6cf38397343cfe467ce37d2717533451ca45229f7c32847f30bdfbc0c98efa92bbf292d4ba1fa90db00eec1645273036c14e0e39a61b56d1bc3249f4349d11e78dad7284cc80bcae9a88453b2625b082784af1909dcecd4bf454d19f9c1a00e93c84a13bce08af9576e026ea1cc73bc159bc8b48d5b56e4a93962117427e3e145328ad7e4100084eef96ffc7bb94388fd02329a6c067906a045696efea423fe56c0a05a0c81f4d576f2d3e4865054d2a961f5b5ee06dfa06b146c1add60e7cf8e1993867c5bee53b700360e0bba2d03df5f1aeb5d83101cd34c72fc5982b7bbb5e66b427bc5766679cca162511e568468a4a726ffa493e0a09684fcbc331b2a92ce307552e7157683fe1bc8a2a558bc0cd9a74d1e92ef569a99a9024c9a9c84ee7aeb094aea52eb9e3dad284476ba1292a61f480075afe488fee9f653e0c1329191a4e5a9f6b62e92315e6a80bb04f0c4b219ffed7458f4346c4cc0172c139a43bc61f1b732c8a5278336769e99bfbd68a69c5a2fb774ed648cdb49e1a71925cca32c15bec710b924db3d34e63a72e04729b1410d678a37e1069d77f8785b3bf3ed0c3904dd16d253e07c8da0c6a5c329e45f9cceac233a73819b33a6c9614581430a +MD = ab2345156bcc41116e73789ff8d26874c20162471c5a141a0106304f96bcf4e2feedb938cc4fb16fd9c7219559922400 + +Len = 77272 +Msg = 3969b1ff9588fc65cbe42a57c1dee66419a0832456b13d7040c6c2d289dcf13bb083e1f4267d25d7b0874ebf0c77b23dd7876c8daef1a4c894bc115a93d5bbb7a661064ad752ecaea5388a21a85ade367806cfcaca256d38dc127bd114ad2b86e4ab28e8f030d953739fe565deb1f2b5c3c4b3c2f276212ae273081d528bc6102f084fb6b93e752ce2636774f6a17724816a205f6e0c47056c85c127969816be5220849c79a547a2b92d18343854f4ea7a9f1e88850e673143f0add727fba2f6139cce827a8cd81ec2a4018eecf2f16f760cb62580a40a162f5dd4164fddf2213c243650021cae06c371296a59a2f61b3d59ef1fa7f8b71cf7743fca54668fa8935fc3ee5a7c53c3853b98b1c88d8c56962dd25c422ff6ab65dcf5dc7fbd00f1e1f67d44cad64fbed0ab574981db3a884b3065c599744f2b3f3efe35180bcd66ed906c3b994f285e6b696d1cccb38919220bb242f4ed4b044e4163bb67777f6e81d699b91111680a201ce211f13d0071e466c1bc9ac2719e5a8e2b58b32a9d7063700ba77844962cb56cbf0f37a327f859e89819d41c49612bcc5ef3464cafd65c05caee170f3b2bf3030b00e80a8617483a4143ea235cb688a4057466043d07343ddf74369bde6fa286cecb4a9ca6347a04c42024fe31033abe27c25c7ad06bb3c251231d1007608aa01058a6810eb9b8ed279ac9d651b10ac1ccc770d7ef6aa13928e213953f6672f7da8f43e1460cc89d749823d24229bd56fc6ae943236cc54d6d9861520ce9243333586be3d79772bdb301781b8ed21e24c09311e5f3d9e8a4272f5070f95166fd249b64af48c080f5eabf11d8bc13f4d41f2a2ee6e719d2e65e8e26178b0601fdb440776e21f1b8ec23b936325556060d2218896d87944bbc1a9d2b6e4c70bddaeb2fec48eb91e44b65d72f51e0021d78d0436aa35cb31bce6444a99ec3f7613cd1500b642c08cab9b901435ce57f01bc319418b0eddc09c3436be6ce7804b7cd6f8b1beb6fbd33df251fbb7bed347a824df3ddbbc278df43c0fa2b27f4fd8532ccc96604391ae664b419dfd87f8b50722d49ffec64f063f8e2d9c0d1be4c9416f0f032d81486adf26bd7f79823eb4a33d87cc76c5aaa5e87b1f1edf35e57ac1fe4eac88f87694e2e54424be661bc326e56767d632c10979b3528fab65d8894f5af9d70501b2c92c2764023e8c267cecab01d69f96389d8da77672e414246164159f3724356354156d9bac6c6cd52e7f0ed5bd354867ce7ec7e97d3bd95f8f8abebd31591c3ed239186997da90be644871517029f1d538d7a529e2f51df0803da6c24a262e7bcff1c84c390b9028baf3831393f00b175922cfc668a26a6ddff77e4d061dd4c0b9f9edb22471d3caaeeab47a8d29fc94abea983d52e6375dfb4295cbe9a2b7940c9c0949de9fe41a9ca87624e03a5ed3ad99aefd56231d176ea99dad69573f6c5462ab61bc08397f20b7587121a3aa5adaaa6494d6db8440a686f690099de4c00de83498612d5c8eb791cc0dc5e857a0bfa769824981f5503f7520e24f094025b587456c5281b5cfedb25149418aff3bc91b1e4442b8f8dc95fead32ae0bca03c7ea4e3c04a7ed992fb378c2390df9928370035946e2f72c468e0bffab27fae0d16bcfb5fc026c90e9ffb2e6f0e3ef2b8b40b94fca8288e5dd9dcda7dae04b535e963a38ad13ab3dc90180461daf488d2cf79086423a169fa7c852d991b743d1cbf42e529c6e22063963716e13b28e3e051f39ab425c389051784bf3743f6cc2a6000c824e748970b78006ad87b038948032051d4f7b578e4738099406cb3ecc7934654637c91a03c001a0a2ce0ac0474aaa935ade1a0be015822c19adfd2245b21bc92cecde8c35ef42efec7b34bdcca11354e252aace1c28e12412fe47cfc4ed309894e227389d91de34c8f3b0a97b4ff6da5251c006b91dcf721e5c2d9fd086fd642c9c25a791643e2fe6ec20fbf983bf84196fdc5e4d50b7a67a6c310aef2bdcac328f6c61c7b2ed31c4b8e82dbe08e802a5e1622d2f5e3421d592d4a9872878e165406dff871a55cac0de88c74f3c0aa6967af40bf5b2cf84ae649ae41f193c943343acc97617228b89e18551139992005971047326eae43f7345f6533d8aa2450afd9b681b15bdd47e566043a1ae18a06d8805eb49631cc2b2db796f68d944747af2dc43ccb292462ca1ac178fe5f8f751149adcc3b7c3aeeb8986a107a19d92f1b7c1f5215a4a410357bb6514ddcd8592ab15d02c5583648bd4c090b05018311da0fee4bf99306590ed2084f6f200dba0a0196de9d8d684225199a6f9813ecf4d62e5aadddbff1453d67e2facdf3d5a09b807fe929e377e3d64845c29a18bce0f6218b022bf10eddab826ad9cd1dd814c47841aad2220c34b920348e73d99dde222fa8d14aef05283e6bc874d865bf1d6d2f03a90011ce3bb6eb8c5a8a1b35f442a1d9a3a2817d2edf692553579432c47eeeee6f1c796602b6ef78af49a92c2d3fbf48ff9b711ef877c6a9ffb072d810e0fd2a838c227b919f761e14174a2b8effd11a6d9d86918decc87bff4dc75a0979a4de6dbad4b6ee5bc6a6115cc5da216b1f7a7510877ef628b8c4db945b5fb7322b33b60c57bf23d027392e81e3e0ed6bf18ea05c3d8c3911deab1ceff69023f4d950e5ec723d38e8e3fff4ec6ce6fae88e7e75e970646091815949c55f9554a5f85d82c1efd83389411fea06289351c83f737d20e7ae728feaf5ea7d5f15522ece8416f394391e9d88c19937de90f9f54c953e676c1178f262a88781beb92678a4eb28ea2a08000b010f87e85884fa55fd0b4227c53579a42f9aa9384428d76ac1ba400d78ece2bbf42e3e7f5c185dd299fe11c9bbc37d8c99f2d70ab80a6deb6f1ae6c6488ecb95a8494666b3f429536a9531b316638d92ead99a5fe409f1e5f433a37d6096c3816786250325bf66bfb6f92c4f9ebcaf9e6876799f8ecb6a3f992cfe9889abd367770d65c079211c00c6518a041b77ed985df2fc327ff8e0e1a62d80808b75012f21078d0479c454fde2c6d139543b4f680f74ab817f395bb36360af9d2e9e57c1ad9c2636eb4d169e52808b5812b1dcf7c7250ff25636e49c17eb16573acbdd0563f3b7c0986768cb5da63fc81d819c2bcc2cafeecb9682870cf63a1776a69ae48b35c80948b8546c4c6076f13d5297ed68b213dea7013e5988aaa543abd796446c89e279c2e8e16967d8b73b3accd626e1dfc428b2211ffbd42ede45a106d90f4f188c78d0a017aaf6338a0edb9860bc80da4936b49b2d5538ab6d8320da6c2b7c0a4e6e3888ff18419c77d2e95e3d998dcc2a6e751a704ffb49db67f0fb56823b86b0c3c347a099903907ef2dc576a350dcf03abc44f1d2672fae57d8129ffad4b43bdf398603162a32c1cd6c7612c41033220153c1b7c4c28671bda2c7507d8ebd762b62ec2e7858b02ed4711919e317f8482a003aca0f5575a90014c16ff2b3c9e90d06222ba562dbd46d035594e7ab54eb1f8c5733996825e088f7a9074089ff1deeeccf028790da3dfee9d28aba156f9247bfbff94c43be9dbd12261d5159889937dd9cb90529d6f1f1ec3903439d70c50a601b240e2d6769072fe1bb0c6a8ce54ea1305a0677f676acd432076a8a800cd03912bdc97048cbce1481e85906328a9d0035ec74c063569969649f1726c6f001104dca64528a4b7a8aafad2073a20f8ac25078364d44191e7278d232b76bf805ae7356c71c55717359131149fa05fc7fae2b053466c245a5b915a9a38696ad45db2d66da15d0c62149541cbde383dae38d6e9b565305649504e42a52db7095275e2304858724d1ed221bd6627643301e27c142845b34fd561c8d5f28fe213a1401fc37b0b8781a3dab0f4821fb6e869844ca03a6c7779950c9b7500b36d024758a610843f1f52a7aadd979e3b92b65b8ac34e5a4dff8bfebd20a04e4cca5d9b0c2f97d267ac3880df120718ef9a353e826a5f166ebdcf78f0130839c08c9e32f716da1419b09bc5c3c8d390b03fdda907cc52ed4334ecaa41cced5193264ca585f64797c9cf04fd159c8d8431f628216743ea4d7ff74be92ec8f0345929d149553870fc0c49fc8d30e78561d95fad2e3d7b55b5596765dc139181307709d4b4d177e6af35d3eafc92545bc80acec525f6cd55c37417d2f99cb141046138cf6e771f092ffadf78d1d64d91156ad618af2fd43ae6648b1bb836929ffecc4919ecd2a8590cafdf0e93694d95d86e080030550aa59c9f33989e5ddffeae0cbd4ca660ae66b3e94514b7c7df0a8f88d7244fe2fb06647893d2128ed3fd80a707e021ad8bb2b42bc433b57e6c4fb94fc5ed54760fddcca54e70cb56291d252fbb7cf515eabd9bdbbee422f98fd5d42756d3f46ab3ac3399a5dd1f3039cdfa0b3a6b773625f7b99da79e76c5c44d7ea3fc70965da0f237ba4c7f8499a0907dce17444e8ad7f1cbd610cb376f8417074a393bb0bb323057aba4e0921ed7f52eecd48fe1907b2c11198d12db6349b30c8e9fade9f001f701d241a8de2c6a7c9bebf4b6c6c37a0747dc6eddd92dafa1fce5923f98b87aa6d4c29520cf3eb297335ffa5164a07f23ce9358b4b73b008466f3a369436116d03ef121e0cbe24ac5939d47d841c3d50223d2bd100c2806aac91d65d370865103aef27a717aa3bd881b388fb3f48a2612c61f1e783e510cb591d73be6b694d3a1a32b015b41ff657f58c6149ce38fece643dcff65c4628d156fc5a81b7c18f93aca1f5906c851fcebdaaa88cb952193ed2ba0c26144b9224aa14d3cfa478f4c4f7243e3fc5457ce8dff7a4ef8900ba5a7dbef29e325e156d5d4f25d0b9f6447503a4d24a49c5d64b655a9f97c5a9abca6d32c7873ee6785478949aab7ea4474dd907fada806ef49f56badfaff5b4b235aaffd408c04b848002ca78897be8c4f58037fe17f1a8a08dbb01ad5da18b98443d0b614a41f4019a03db0891392b8515001a262824dca0bc9b1651c95295249e2d40b675494bb74984ae92ec3fd65054629ab935a170bdd6fee1131d8f3a20eb82851ab05eb76d368b2b5ec1154fee5aad9e0168f1cebf80ed4a3b7ee1e252d544c1d7230aa0ed09233ab339440027d0e90d44e79b5c6e646e391016cff584027cde33f7d46efd6951c3db7c534fc25e1fd1cbda2784922a8c96db0de1db7c1a32c37754448a66fe1fae1cb1caa689ab56d1de6a1dadf27a4c49e48b9ffd03c66c58ea61e35aef7194e3bf00326c426096f5c5be063e57fab83a73b792c1e0ae3485d6473847626ab84b0b921109b624e725c7006aa18955d752d0b94190dd799132812dccba869094cc4a8ff2e5ada052492d55cf3d5031b17743ba34d3c0cf8c47343c2519228c2f4fc21f5a68ef7cde4940e7bf7a74374f9213e2f4f0525a2bac379ccdcdff0592bdbd68d3fa435f940d45dec1c0bc0eb88c895808515bbf784ad2744c3fe5a4c3fc8195e40372f17a7e87625e77f15ef44bed45f85ca3a97b074dec28d69b11ccf656cc16eb45db9b824d991c07dbd10cb987d04d7bf1be3bccef2eebf9ebf3b4918635ef1a81c5fc02deae86d9420d07bd9e228e150ea6c082025f1c129bf384b758faf9f8f156a7e783c72153eebaed3e7b624391c30a120fccaa448874b8434f1340bcee5c37a317840d77dea781c72667b9f559d6923a5d9635eac33eebf9410032bf628910f87c29a70fe3340a9c5ca84f2bd40fe53f52a728962bc133af7567f58abd4188affdbabd71c85efc74c8864b6d6a38ac29d849acd128c4396cd290b4a5684c47ce817e7926f7edff57524bd54383178e00d6c2e9212211a43842c29599c972f660f2be01b5d6a9bd4ee23d1736877634cd335b0611816e1d1bad46c0ec4a7b3d6a37c27da6cf59db6060a636cdde1b4598d95c2b26ada44c1ef9655e29522ec3f638d2168248c70496b4cc5d91f1ce6a67af0d82ea0e7bd8480f6497d54854310bdd36f3cfabb9def6c6f8b20826594b449db530e40cba6aa2d78e927a96b52eb20e353e185ff8118b7e715dbce6838f368b9e609c102ba932392a789fa31963f2b3181ce2cc4c465ac58187359a13df46610e389b80943e021e7f70cdd74877d3b428b7b75a7c256d816e58f9a8d2e27a074ee068c6bed01a6cd6a38b9a09135df9aa371e715255cb9c81f7927a8841dc66a6818b487108800d7739615426df996ae9c4a079947f7cfc028d8876fca374645d438d70748e3ee7aa59d76d65828ef02c84c4da0b4a898b39416106f8b148eabd4df5a591095ce4b72b764d8fa54471baa212fc7f5ff92f6d3ca791421363e10cc84b4e8e21e0ebe5d8c55d6cefc4d6dc441248b865d4d2e8a5e17fa370ca2f93db18d5347fd4e37e884d03c3091508da934d247d05225bf0a59837e37087be9aafe2a14bcb3fb6c86294a85d9a3feefcb64af997e7ecb2ce645323cabca074696b341a9bac2a4b0c8f24b5034b4b6f8ad59130cfb23abfca099aaa20fc203b473893a8ebcb9c8a913785907bc44075cb1aab2feb0e126a2bbdf534acd70cfa7e3e89b305d09d5ba1803da38dac26e708ab1f60b3a57e9b3ba7ed2937f66e9954a49da3af6235a68295d65503ac06ac89b0752af11c853a40f009f289014dff129358e0b2296d537d9cd80da46be7ae965236f46b1e2f2f83bfd2f56a9fb216ff3240d2d6cf4c4adabec9353792d1d477b8e928ea5185624c3dcf9ba278a4c565aadfe2e2f9db74e122333485c8cc06730c162d365d8ebbe391884cf8352bf48a22bd76a05121b7daf19d7256b6e12cd373456b17eb53238fe58571367e4f8bb7c360f8d67f26fc0c5290577103172fe017ff4a55a3da80995e4f7022fa197334b552ce4d2bf22cc06e934ba05877f5df20cb32b72c2dbc49266db385529092491f1b62cdfc8e2d3e6c2eb6a95d07671bb6328b072f54bde76567a0262ebdd13e29411a1e9a01e9ce75e90055b9d16ddbffbbbd0b53556dbb42c6a1cf34a6185afd4e6007ae5346b8b14d916c15ddf06626ee308c413ab20de6101d460f5550e7c0ca9b51e08c2e4347e1d1b61831d60551534c51a00b762479d07c5465d25f2b9d3b32c4d7b588b8602d29fb6bd70900a9737a2419cea049228b25c1df232f6fba2b8f283cd63c5f23baff02b5d76f9f55d520cb548d18c409cb82552452a7fa3f211945b6f53180b90fbc949f37f22a7d01a80ff84fc6dd5717fad8dd67ae1655a638e3ee1c516349b5c979d10179e84b8078b8ad1d92dc34f8f511b1682e09244154c98b528350fc328c79f23deb22e5d9fa8e1dfe6408c7f5dbc9495f0e1cd37ad5c036a0af8efa106f5baaf1322073949459eefa24aa399615c84c5336978ad92490970cbd666ad6d9e9a327352a1e3ab0e0c819ba0ab16309d6634d8dc273e7a70155a19620740d32e982e6dc880d52b5ec54640e7058e520bb3654fde4b32bc7da19642004423ce124f2370f816a640b4539e2082456a3c23e6c706e47752dece58a5f4459f9eb50629920b65e5af81ab3209b916dd2255829ada9c631df767fe85199eb69c4a3e66b1facb968079749feb1988f95f4f44842a308eeeb198de6ac151afb7ac9ea0b062de000e499c802ed93e0ece2e697fc52f494cebd4cfa8bf97feb5ed5304b27fd6bc6741d3814ad496f7b8e9dcd96da2048564eeea046d4973713fac2224ba2168065fb5a0a02b0daec725f0dd47a4c76485457c83cf82b4de49ab988c774e51a15c57ee23a1a7468b3cc457c20cab91a9b98cf914998f7e42e898171464d56d0d1efe6feeee461bb6b912a30dc0e89d5ea2aa092eeafa025bfe73cc3c75e5e025dea19f64fe9e09abdcaf5722ecf236fdd10b01354c48ed53cbcd1c77430667660be011284b057cf517e8e8a3e93f1b01b54e95ca25f28bf501028c5734ad4f58374859ab5c12f20ceb5ddc035e55a604dfe31b40108d8aaa1ec2905ec3411476e138cd50ca5d156dd77c95c3b4ac6461a1472659948065dd757bcce08778634c8a3000caee3a33925cd3ca5774c9d2b2ba093b591a618a19b5ac96aee9a9a84392dc887c6030f904fbe1ee4127248d727a97ced12ab773e95fc381fc825b4fe6bb7cc8e7a8e7c250253556234442d12b738155443dd8bfc6c45f136bba13e6c034cf469f20b52bee793ca64034bb5a4835446344dc7bca3c83ddcf6f1959f94acf1285f5702f824a5866535aa0e48543205f7d357ee73fa53ede2a992893f3e0cb050b9d1fbd81fe5340f1c4f164feb6d53107b8adc16cab25ce995c5058634cb9054c0877f59764fa6ae601be93032db4779720e180fdb9092da04b392dc3d929a1cb9a215e3f38ae32b4a351155ee25e81a000a2ac4f593989e3c84b7a92009d490ef4946de5c3ff36f22c51624eaf23fdb6fa69b9fe063751b865ffd55a6d74899a9a599b27a15df6130f57e07edeb52a5050cf10663a9313b296ceb4897a4fe1d2ede96c815b5aee8bbebd365beb82b5e0c61b763480dd5e56fd509eabb1afc05c71bc586f5c668ee0dcf9ca62600d2f0cad0721d553668019ebfdfa4d9df4c3abc84af55e1f1165a6cca6231ed6b4d41887eac9c53cdf276ff54f6dcbb9bf6a35543db9ea2debe142104ac70dba3a63b8d96ec4809797c2edabcd5fb27f70027da7dd1c700346b0373a402cab74de5c5233ebb8941e30c10771f046ae69a74b0925d1a3ac39c2211acd2eca74b1410c6909ea0c7c1b3ad041da40c90c02e5925c6083d5db3bded2513b8f36f5d9d31281de0236a529064f2157374d47c58b86dbea9c29a9840d327ef7b9e8bb6934fd21229ccdabc223bc2a8b5c4a0e4c29872c266325839ccdd00894676611e9c73acb7a4247fc712395c1b92855bbe14011b1a6714fe5f0a1196293f025a5d60a49e5376b2c23b0866a9b9313e6cd3f5fc500dd5f0f6d2a179d2168ecade3a89ea9030cafe09dfabcb8fc9bb773deb0e8ff9e4d84fa75a3a1d9c9a5c56567ebc4d6a94c691bd7ca46ff79257b835ce07c5ffe897b779bf7d03ddfbd12f28f1a3d614c892f247da9a5bca5d2e8abc4387a3485e3bb3d4c811357b8214dcbe5be68c761457a90dc13695ee7268743a133633bd91ebc8203f9fbb60774ee57f842d7879bf3d3f79f920274d192cff1706be7c46c8d080c5eace9b7222a6d3d2341fa003136b3bf249ff18ce9aa2b1bce4c486cc4a12622b9147df9bca452c2132640efd560a25df7b7c71583cf3158f75f35a3560d8f6bbfeb28fc2b9527bd347a5ca50d14186aa553e39d54947b0f981f0ff6b524ac5dbf8b6b1cf35f645503b8adae2cc39e5baa0ee782c07c50c63cf667d54689256f446fb4fa9875914ffd6ba489d8f19ca7723333745bf96b03328fbdddaead5316fb12a703af7a26f4adfde1c68610abd49a8b67d08b8e124d3545726e41f3edfb201eb1d69ccfadf98209d5c2a8c344798f51e525d3ccff1a91b23605950f2e727fee55d1e5088eb525fa012cd56beefccd414be2c91889e1f45079323c51cd1356fc13841c9751bde658e453808d13e4d0a40ca5d0033b39b99aac829c6e226431e26b6bb80e8f7a5fa10fe53e994bb8462497dd8d1f9b887e0b507539b6c6dbbd1bde072bd0a080fe5ce44064330eed7a3d8e0854c01364ae2cf56898be32e04512ebd4fc802d585f06f1f395ccc5faf9494f94cb974b54c67a1bfb3df6ff2866620553ae8f9e66de19c97d47e919775ff26d2165f79bbf537d349b9e0373fa9d73bb11c6617c43081fcb5bfefa71d8faa3573c98739d2ad190cfc83d364a0d56e28d8db8a83f637983880e3f73579675d6ae24f79db81dcd7f4e1fa031d9a72f18fd2619c6604e9eef70126e0633463e26d298e7d8851ea3734ff04b78bb7e82917a894e4e777ad4ae23e71f05bd5ed00e55070db68c83f02745f8a36d67e9fde69615eaa2fd6ed76a041ad7142e46c7e7a5ddcdaa27043ff5b0775c9257700d82d05a63565a91038da12c0a943e94825d55ab9c35fd15ff89201abb8a02b71de0a9d54ceb2797e5938b794e1836de8bd9e4ef1dec671f9b3c155164b71215bbaa8304fbd3ecc9ea1613a0f602df8b60e7c426b7300da7bfa8f099dcabde12732b0c6814a302ddad7fea21b70671019df183d0fca34944b93a427277caff43b0fca67d1bdb12199c5b6f89f57593f79f91a47c52b8b25d346a9b69eaa6ce101189d1c275de83244313243825e2d0c3f25296875dd2d1779dd46bfe99c1f30df17d2ec6b73fee741e41a8baecd08ffd129eda9072941f2a71e2249f09aee6a3fd210e085471ac8f9a615d90aec14a198cd10116357ef3cc4d3e65c9bec0116881300ff5e21655ed43ecb347e027979fcdb37a972af617f38c23900d2d981bc22a04a51dc4907303b76e5a4f2595f1066190c781a78bc426ab4c43e7daa96e5754195dee80627c794140b314e37edec3c51378644fc2b0ec4702f1d84a86718e9c089af6ba2eda948e1e4e47ae54b97e74960dbd981d46aadc021a6cf181ddde6e4cfcb4b638260c0a519c45faba299d0ca2e80bf50dfde8d6a42e04645dfbcd4740f3a72920e74632851d9e3d01a785e9b497ce0b175f2cd373bd3d276d63e1b39f005c676b86b9831352cef9edabef8865ad722ebbe2fd3efb48759f22aea23fb1b333159a9cfc98a6dc46c5b0bf2085109996f48e11c085a5405c4020248548138cc9a8109275df9a0aa4050d49df5c5fdcbae0e0642d43fc454fcee86e11795eed9e837fffcbc4776e455c55e4627aadf75c7865727a068ac7ce8fee03cd2fde56005c3b3d54e3c997c9102d07506c8569da1f8f955d29bb2866f7a35e2ef82c66cd86d4e3a7a9fae79de4e53b3fae60b4d26ac1754d4a181797ba9b059d4ec3902497df8b3ab3a60e423f30f866bcea58c3de9d7aa0c42bf5df3d4762beb03e52c403ad8c946d354c448372b79c146cd63cef961e1e445153abe43b2df9a8f73f1a5ee1703b43335213463d01164172bd8c222de81c2742a19c63e8afe4b578a5a60dfdcea5d22a904d1be25d8bc0966f6ffad76101095a701f20d260f6524d36d5a555004a96758740692535532e327c26ee25018357133fb2af7af9a50bef634799a9bdc01ccec79bb2581102c6f1546f708952099d0770e56454d2873ed9ab7a6f5e4f7cb170a1bd8c1d8921373d98983686cb1a47a1a425f402740387967fdcaad53df70115c6346ac806250b81a93f84bfe52be36c59f2b2d666a0629070ecb0b121b59828a58eb2ea0084906816d40f7738b4fcd202ea357312e46c61ff293574633ed323c02b091600d6824b61e41b5f2e4bf08d2f6af05b1155e185ab108d91aaf93e8196a7d1be9f814dc60aee5cca3e676ad84ff387e0ea6b7e75d5414d8b418b56ec9973b166351b4f427261286af18dd84dd52240b6f6ab9fbd3e39e9e3cf6ba8af591d0c8f6a1b235b58db2293e025a5786f65df4fce7cc1c62648d71dbcf0a054561267ac86e7567afebacfe772d56ec26f3c981dfa75911b2e1cb9ab82d0da6600e247304436552c048e84d83203a0c665252fa3d32c6a36c613f60fd972b37efa0b1fdd0a5eabd8ead4e5e8a636c7fee1adfa6410e7d9a38edd10dcf96cc7e9920b75e541e6c72c121c678b37f560d655357ce10c5e4bebd8c69e858b1584507951ddfba35533702ad38e426fb5e7e7406a4bad5df65d6a446ef38c0703752e007cbc8277307d5f9588ceb0c5fee99c23aadb2b6e267ac94234b462f5bd16dcd7fa861c55ef0144d2aaad38d346d27f8f75afedb585206362c665accfb8e6076039ef1bc8077bba62b7ae4d00143f0bd4593e56dc88dad326826bbbfd7d7f2829e94c234610294ae64e568fe4ed7bcba2d40b094bb82692fe074b3317712ea9a55731a5487fb650adcd1a53ea4935396b649a877b89801d59a39884a64a91165322142447cc8f7659b28e4b989de7dfae996123f47373fcea05b833125022f8c3c87822dc8d31265aad06d968820018ecc103913f0c7e9bffac4ec0f42870cb67b8d2137f1827db210b388fe26c2a8f96a9d641c3cb0c853ae5a0b0b449e6f8cf81c6989813f02f5d5b77d19ed2a3ae4c826da82b25ba430c607274eb2b121b5ba1aa04c007167d602c6930e64c17ff6f094e46cdb2e45fe49b18aff1427ebdac9710fa7f47f75fc9ec7140613ef3ed8e9cdca023d92726640427a47f36893a32e07fec3e7d3f410b1a14628831d4131bbbbd46e62f0f50fb2a1404ed5dce1b7f0c6b5c760d4acb9443e729d3bb14eaa6f454ad5d2ae94a3a7b6243b45eb9fbf17947bdce8ea65a05d85df8cc3152eeb0b527362133618c728696d36c8fd9362ac5b9a2a067de66d075ed71ea4afa99b9acc983aafee48253ba26569e87a8649b60258d842f5f8c747b1a07b65e98662219a01882e40ee65eb4952fa2cca411c3d71fe0f24bb6356276683ca8e2a8feaaaa4f6721693d02f3d467d111c5589824a90d3f63535efc3ae66c834a8d98ad83cd2bf20f14eb8293b812ed741832923e34721b6fccc63b6e497b7e03a6040d7e00ca3bb46db6cfeece3ad7322bde7a8137e2e7601e889d6d2e298f6cc26798d9d3aeb6b9ea1b4545852410e48698db9df1d445fcdf227cc7f2fb2a0e693fca27b44e05780085ad488b733d039f1e1fd510ca999e750063ff4674e04110f93bf8212c7a87478242583fbcbe07fbbac1d7033a54bd76ceed83770b44ad402048cbb8ceb850259dcef51045167a231b5c0447a829d26ada73f52342c9bb8d418b02d9b9317b31348dcfbbc0d8c28b9c68fd6ca86b85b7af81b4c9afe1f44ed97d4e02506860e0e3192880a47789bbda5322d09fbc4fe3daa152e8971fd00b6499fdd138df99cb35eb900d5465282a41b50512127e8985d85d4ffebce5e7495f6ba2b4e7098e36899fa6c07534366d6f0914bf8534db0425101c7a75d6929f365ccd2bdf78c6d96a8fdd387b673cebbec9f2278c61bce54d6438fa56647a6395f7edb476afdc2a654693d3db70942bbd71fde88ca797afbdc435ecd311f73cdac784dd6101268fe65e6b2119e2e4a3e78bc880fa58f3d9f2aa83c07061a19191461305132f4e908a31e3bebb2096fac981c27f7a0869ea8891b313b2c601f835fe18d9f18cbcd2bd6b6dfb33cc3386dffe7c3270386267ec1444651ec180d7554a26baa0abe9acec559a75184832ee975c6658716b65b899aca82318e6a6c56bc49d25950f5da5b39ad99add272d788c26013ff213fc731dc56eec35a7fc28e5f81ca9431991439fa5ac0b06eb8beb3ad5fd7776b49f2df4e8f90f0977f9a8505f05c43f6d2d1d0d00921409f7c68d00068b9d73dfb63f9b91e729e8f9279a2763e8f4fe8c798888362c646afe65f498126c007df7da2e9e5aa9cb688dee94f79146c9e4ca1f1c9da0cb6abe41f2a84f93ef4ef99f837159adc1421cb8e71f4d81af9196d8764fb9eb0f955874f51eb2f5b5d78b394abe7a05ce4c5a0c89af759f740a892a27a8697f5982edf9d5ce4ed230488747884c5bed1148c4eb4eac1c5534934021abad28d849a1d3632d4d9f93ef00825cd4d19bee3aa5d1f7cebbae3d81aa30616ad4748040709d23641311c5529e10eba8b4a663bb01f5945254a7d2cbddfe6bed94e8f1ee7 +MD = eb9c6076ab4b1e0e9c78043556413625a5ce33665e65833c09fb7a8b4a811cca131ce1595896e841f4776da2fef73b7c + +Len = 78112 +Msg = 96ab916681ceba700f6382c067c177fbab53e09788e4f6410c19517bb83fa18ad7479e8f0e0f42f433e43509624489ef4ee8a7b6d60289c2d9c32a734a203b0587d618b4e6abfa2491f76e01956406e235f24e74843e01d433037d3ca7e175e24e5de61d342a4ccad1a715ee26a8569d0879bd1abb20c73fc2e3321ff60ab6ebd6e6f0121e129fac9bf912193d98e1e56e86dcefa23141cb2f6a3264602465e6c4781edbcced5a9495f74dca03bd0f850f1f933d62f8d83f22a063530cb6ec9cc31c58bf6742e7486aa8af499f9e4943944fca4a22fdf465428eae342248b2d579d98607179aad90c0141edd3ac4f5e9a51b69600bc9fe03383bfb4ecc621f588eb790fc037c1436404483cffcb57d3de98d58c545e35ce2abb033ea308d9befabbe5ee354708400913fc7670cfb470809ac7fc1f7d378ca44f33c5076508e6078f7d80731fe65b85b0dd0ed931ebd11ac80c69e4922b983ab0e00c8c73460749c69e7afc3af1f2448b788a9b8a445227b1216a2645786d48708669a4bc079f3c01c7122320a1a0dfe44d6e3a41749011e69551770fa498681ea550d297c42a58b195fa9a598bf3a25bca1e27efe30773c8d6d439494696140bbb76a8af02152a6679a8c44df74756628d3ef6fe2624c7d87446ff9ac4e2d6d8373f995a57fc1b80e09133869a284698f53529f4a47488b5ec4e2c7ca60b2af4b71027322c5bb6a179386a9beb230d5f9095335be47330b1ad4e6257607b8af1a99cd4bef59086489222cbe640a41526edd3a5ac6cad4a8c45bc13b39ab0614f8d3a24695a5704d6c9d4ea0e5147f8af7b74e35eb38f4086343bc329ab46587ed07c88c9b0fbbcdc9eb3477c937b2229b7fd8efb4f95bd3ff731f32228a9db0021d88448901b08ea7f6266a96daa1c5631d20afaa75d1b2a1d33262579576363efd2a96e8e218350ea56ca1d667151955796e9e53141e4c4f4b3debc33db8c2aa8ff6ab3e1abb6d06e04d451045d6c67c7c0ae43a3f094b13c387f5eeeb2afb4cbc33ab161161dc988f127ecddcac75dd0c3ba8e45c5c54f52359a75f05958a2e6a2bbef52ed22acb9b047394945fce82124b12dbd5dd12fc53fb299ef5c1165882240a65dbd500a8ea684dedd5b6787277804ba610552a303bb5a433217648d0ed67baed8034063565893360077a1cb521237bcd778b4799c4cf40a7f37cc8a0913cf41683b5e37cf4ae4e7692736154fa7bc9d870490f40d4902480d19a3dd058eae0664d213f85801ec6b6de69f056e9d25e5065552a2c54417949259a4f6629bba867463fc456ef22c2a9532470c3d56e62bdbd7841652d2a66875642a76cebf571a1d6d918f92b026ad55a6b8aa3a898fca5e07afcf4459314c4cc5bede988e1669b66b5e3761a06e7c45908e6ff49985492362302e086c4aa87efacc9e6e7c7acdd5c9dced3a67661febac12bdea0b6930b273bfc31d704515927ffe16af0ef6eef2256801ab699ff09e35f0149953ae1991b8991f01f9d31c1dc1ae07d8ba0d25a1eaba25331b8ea6f3eaa1247106b65c27ad66a2448d5714776c66c27a02400a5ba63dc84011b4ab8316903e0f9934811acea2ed539f53a735dcb2d7117c121585d45d5b70d0a466a26667f1c38f8b10b198d860bda44b3cef9f1cd62d8c05dfb6e1b36f33dcd060f84672c04b5e2c93a29871acf130c05dfb300f103cc69db1757aba64179abb32eb335b29f599bb825459f9128cc93572ef1bf435ad903c4337fbecea8a9ee75501b98baf60a6aa554d39f941fed23d2441cf76b72e8d83fd84e1b5630b5dc73fc2457ec0fb196b8503d4dcabb5e029da89d701150e22e758d2c8ce5e185bed6ba363ceff437681ba0e971dc040778e2e2daf2dcfead4e8eda81d723c402dbc512b90d6cad8228f3cc41d57102d1cfc67b3d4574833380b147b5c5bae0127d698d15930a407c1e6b5dab4032bea24d73fa2d3082e75a0b065d301e4f3d9eeaeab2b29672b70c91a8da9179c63f643c11e7127dae320c39b6a35baa8de48f6b6f0af8de4b1919cbd5cb5a49d78dfde2c7cb53f29f6d3050e9a29c3019dccb48201c50323e6f8d1218b86e780ab15788be2d5a58fea0ae99c6e05c7a9e2d3cc92670205bf3c04faf992a35ce09b258751e958e7672d16e5c76e7044ec2e0c936a98ed122111447ea81a917137c98eaf30e8b5716a40a57e1213ffa752dfc59d6d0ffcc4d41745d0af8bb7c0e0a6cf448b6981dfe3b52536fed6ea8b78889d6f2c44a78a42ae6795925eacc885c355dbd3f4348f7e0b24a4f05fe74db7b9027d2adf73cf17575831d31bd6f491afb0f9ad11540c93b3022ca8f77c8abad1734beb28e82fac926639f44bccd19ebc6f12793956e3cf3d7c426b45f0bedc729e5fefb98b188cf03012784704ec0779febacae4b3818b1ac18ab9b40a56a70cb22d9b19d30632e1345fc1c605b05678de5704abf07241cb906a36da1feea5107d399fc2369538f5e186832155ab16399c7bc8d7a4429dd057754510b7e3512e4e08403b4c3209aed60b1ef15b58c12ca79d8a20355ef9b98510770058d125a6b31e3efd7a691f6c707207aead25e1d28e40cafe2a43eff7b7e05f117934ad1a2aefde7157a704cf4f3fdfc1b1bef2bbbeea0dda097deb1b5e493fdc9f8a52093401c14f4a883437d0e909c31f607e58c80db53c49896584e6dfcbca424ebef46cd869efe969384693e2083b3cd6df3a283063ad60e309c4f0086552f7fe4e5c13e84acbbad67b6c06df7d82907eafc05dd69b95e617227bf847bf1f27258ab0e7c5e66b255c9828b825bc41c0c46a8be784cf9e5f8259ea6e321b776630ee9356e5cf56bf77f90d165956f134449a1d43af721f23d11ac0c04c1d042bbcf463cfbc6816ef952879afeed009617ba8c4f0db15a0e97fdf7facfa263dfe3636a2d0de33144c50a10ee35aa9f2ded631438d8c4ccc06eb227772c0e99d34192fe0f8bfc2e74c16fd2d6f21676612e0adf9683769e902bf9e58c034b9aa83f24aaeb5c59a086574876591d77aab942789571f510f9063498d9403ca28de544e015c86a42ae02ee5fa3809e1666be9175dfd118d904abf257aa9bbf5b9a13b78fe8ae9cff8071ed7a02525d3bd0f684c965bfd31be806cd0000a574beebb902f9caa6dad73f5bbe623ad7422e10eb813bce420e1ccca02e5985674413a55f8ce664b60c141346c8dff41736364f25f194c263b126d9ff7b2cdfe815a1f38ebd1e5ee91afc23bc73b9d81b1f9cb52b3d9ceb29a57f36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a96984cb1bee9cd06f0d327d5ab3485e8be5a4b48e0fd16bef99674ca2bc8c74a294bb05d976c41b40831402477d37a677da9b4a5617977d8b4fab4a420c0ab0d25d55529d29aa6e38c2dd13cdbd058fbd023b27891f9e0cf2e29b8a5f266b8180eddc1931af55b2a1f2141ab31bbb03a4840bb4efceeffe6d79bc72c1b1b7d1f36bd8c45bb1cdcdc13a427ec23e60e9758893574fcd913d443c986b2f56f6877400cfbae4d71ba9e1c3eea7c2cffc2879385c7972c38cafbf54b6de73bd318b4bd44b6394c8462d48b5a0fd7b7598aaf5baed832159e93e26e99e31538d70c5c00ed327322d56404037e1e8b4d93a563436cedb2237afd1c022d9ce986fb91d1bd7f06e88ad54cc0f7137d037a3ed147dd588eb3d04e64fd628ee1b0a0a167ba35628a05cf147b8fe8c2d1dca7ab6cc17bea21a3c6996a2b023658270078ec7a1b4062577a037ec55b0483736069f664b1ba4cfe50dc8b1963ac769930d29e95d180f65a1632c4f5c04128642f0afcb6111177402998464d0959a3a3cc5f0c91fabcdc9a1e22fcb5bb11273b8e0eee1a1ca827059b4d0a3a55d695c31d6ea4f2f94c7b741c4474799ded0645e7d6591526e6d2bb307b6565fbab9373bea2064d4fc859847b27dac5fb4d5c2fe701bc4be24600dd7393d6544d3143321a698ee580b90d57c53d8e0f55ba8f65e6018602b15e47e8ff36db89dd101b8adb45cd601e86fd4a85060cca3fad16647f6654ee26980e6a1dd4f38b1db092ea5bc740518bcaaff93501d58b1bad97c80da09772b47bdadd69eeacbca1ab2fdd265e662e4aecabd04fc186d66c2479fd3b30cc24dd7223bf6df475a2eb6878dfc58bcd4afe75675c5fc58f10b3ba336062a7716924337f8c9476cce26d60d47ea3dfe45bf8fd6919cf7e5cee84c76abe2e6515d40b0844d167f630dfaa2ce9166bbb29c5ecdd2785295c8ea451e46652f90a27ea04892a0a72e3401f24351d4367ae2c1d2c9d392af7f082f6ad89eccb5cf7361fa33e85a42fde59056e11e792323959b63ac60477a5dad839ea303483b4ccbee96990ee4b09480a46da3bee6f55ed4145b9e02ff7dd6c0d02ba7ff418baeb20dbba18da4b99a0c2480b2b88574d2a61300c640227e9347fd570b191f6b9e30a6b373ec0424b892f8d73694bd682813819c4da218463c4df26bf8da4aa4c44ea1c438b36bbb951908ba56dbf598072344755ab0499d78d797ae95c82bfec713e637186b4144daa93c713a1497cd18df45d316f31e4aefefd46a0b6d284050885d543a9bed882e4a7c430bc70acf034e6c00a9f2fd174a9c91e58151aa3406b3ef62c7cbd94f3a05b07af17cb6666f78a2433a354fca31e7b66920fa1aa0929e82abe6836c61a5e1c05c13bc035a0466cde3f1457d2c4bd62b3c0ff2de4d9b51ff75c04c0e8518e794329a0e59726b1fd629f7a9ed054174d8a677c16003cad24f097dad27853b1e1443adfb20774caba65d74e9091dbac6a5f180ed0689c72b58af442f1f27b58e29d9750ac0324e1324c78f8e383b5fd67b6351003aa9396404ae3d585f342f3fb93a1ac3a1681a5e37ae711fe129d8ab404613826329c8833a5091b34d73503aadafc3ae2be45894c95c42246eadcc4ddee0edf9e8d21d92e2db68c552aec186ee809854c76dafbec11729264690e4c53b7a08ef336ce098e398e918d7ab292b63f5c23cdbcac7e306284eacd199c71a415b8cebabbfb99e27cf3d3342333132f35669eed1c4490b82d7da3e77921d54d6cda076b8924eab95c88b9efc0e81a288eab4f30f23dd3e1c6bf564a041907ce4166c17c2af4ac715cafce26e04c08309faccd2ffaf2a85bc2ec6a7b470c698527f195631dc53fa8f1eb886ffdd96dd5dced913072fd9e74a66768e1be567b30850cfbb6ee2114deb0de6121660adb96eae023f916d916daf5c2ca23d691cd2eed1b5cfdf892ec711ddaf0e1d57aa1e23e26fdd042ffb1ed158116983c38dffec4af419ed984f71ead63a037b88381564b14975c83ebf0299a14d6d53bd6141ea02b32100d91e515c42b07998bbfda51965b88f45628421ef810736161d40a1d0421b7081124372506738f6dcbaa1d62a44e3b4e362f284bc3e684a35acd4258652548dd60c66d9af8ffb04af4ccdb08097f36b0a08b232e62197331632c2d7f47a8500698f2e905f00202a7938293c01a50f3d221a6c335772bc792377b5bf0302d752a163439e4a02d0f1a2475c8196b860b19361c790f57901a2c34253e49931710ae54f4e0b56df33df92410f8728160e4fc5a56c50aa7e8c385d5c444e9f507bb09f1cf7df6ddd707eb1eee9579d08409f20ae037b5dc885c35b8e3105fea71fcd3692e5237646b056681593f8dfd61e2a0d43331af6a015c9249ec2129c7e83e81279c1df59601aed1d80b472d4c8d177f22ea4335c4e64d420549e7c631dcf899b993219fe74d7cd39f5f5ce6626810e3835ffd1791a996bb77a6e4b3acb2c3839bae1db4dc90e7e253dfe137c3755784821ecf9344bdc1751d6d98708d2c27e54a3752c2ea9e88648207649fd44763c88b912b5752b575e56328839b778b8e2541d9715895a8d6f09650579d3950ce262c71a0c24002fcb2e5422692e0636eda1f0ef9c462524c1d2d654aae5723ef33d11ab072a138fe34104501d55c36625a3e424cc4d52d5020a390be41b2334f681616eac6dac9d30f80cba5f14f96e14c2c0dfaa8629cabc1857d22f5def1773957d0b05d6138139b933073653ee7642674ec740d9f2287666f84f9493200ff2e32d291a4d8f6486ed40e0abfaeca736f85485952ff41ab95be32d1aa5fc43fcd23b70f1bb696ea0fdfcecc4f1392878df9bc0b16e78c60c5fe212ca7bccdc18ca6d8a9406eac60e4f2fd48b201d229082eb219d80c654f7dabba7aafed701cf338d1c0b185795584da03f0870e2bd074b0c50604b26ed02343793c51467dba87661d15cd7fb02075e19d642c7ce2063a1c5f402b9e0b9b6d61e7e20a6c2922bf9b24e912d1d36a2e96041410f2b742febdfb58cb13bdf9a263812c59d314de025473eb2010458b1583f270d2e3fe0f093233d051a8087378d4df4bbdffc345062ea47c53af991bc127b30af0e538d3000563175def8db137424cf0a566b7002196111d4c244094c7fdf052e95aea3769a433ce4e4e800b8418649bbe8c6297eb07545e6802de7e807324e92ad9a494bc9b1045b149b21ae5e3b0ad47f54864d91ee8b045cfc5419123bb2e33d5da736f56731e15658647b310bbb60025eb0f622948a353ef8776608c3da2a2c40e6bf862e6c7f9266f1a924be0464592ccf01cd2feb810e6a795751926e6f648b2e6ee4ce5d3cb00ef1c09d1b8cea6c060af7f98655f0b49a8174557015b8cc86a6cc770fab2098988c4606ebfcf92334895f0d62718b19d0b8467d25770f4c797760a8b9fe33334ce9c5c6f6fb9a66fd75c1738be759235445542f783d7bccabc8b2dd93007e677131c4450432d41dabf6a592c95e62bb6d5126d4330f053465c24b7f6657081d518bccebdd49af30843394d2e47fafca650445d51c94b36cef8db2f7faabd93e3220642048e73387d155169ba3f1473682853898fc758f5d91506fac17a5fab05d18144c0fb4690ad983b155cf5c33e90dfd87879a5aa1ed93340b0585ec725d1a9a64d7f85a58a2e6e6ef68306a79c94d93bb09c0e9f0053c600d6c0b29492bb1cedd29cc7e08353ea6573d8ec123c08c705b8534cd848ed5fcfd487304880469dd06aa52cb82ac2aea713ab10938b510bbef65bfac656ea6326400832436cf8bef67c354e6cdf0f2dac6c861ebc18f239d0010292f9c8ff728c9fe04325b745f2b89da987af1e8de9fdd50650ec5380b3e15ee3afd2fd71006b4a9bdd500da2dbaf359e82df77b36613e38861c4c9710c5b667babf293038f5ad6978b62beb3dc42da60aa7e693414772e98cba5f947c5b6be3701c8f81b91d3da6fb7de78ed670c02bc691c617487a00cc3f9204179527bdca25bd6bb2d9a5ebc80fd139ab42e6334ee693a0ee93227048664c4508a5523384a149c4aae1b540377c5a2b2bc74f0e7930547b026a654bc4cb902a4ff2035679ac69a3531977c35c0ac1c4f4aed3da136e7d5f3a156e18aa3404bad5c563ac120ec50f94c811fc9d81ae0cef3f991e8466b5547edb635f616a53fd80659abfb58e04105537ab7363a8c80c04c1ca6233e1a563b6066da9513523fb391ccf17cbf6ceae7eaf6eb11748b8cb1c7e8d2f8aa6f593cadcb37ce25c1dbde9302a3abd0ccdf2f876813d1f2925511dbc0b0bf07f4ceda3a65e637ca9e84a76ead4b2f199a6e3a9d40d9fe513b8a7f1c46b81cd32527727ab95e387e22caaca92f507d164048a7a133a60cfce19d47eded6168a88b03b3f3581866bd093e6cb70b4bfc4378ded537a2f074721efe0ae5174548d490e41d48a49d3903bc30563cb3a6431d8e9161d50151cb4d6e3d467676cc23f3d138fccf317525feb640f79edaf7d8210c10dbede13277eb39cb79366e7e8082b682f11b8108c3ea71f0df41c3a931ea7bdd8206c52b10c81c39119970c4f51ddb52989215e0896389c06bea1032d6d6584812941fa41c807ff6be142047e8019a1831e76294ed0678202bec433d3d712bf10c3a73260190ff94cd3aff6fdffa8d447b7fe98e752fa7909dcccf20ec475158bd5e42295675f583cd7250b553452f77d3b02d45a86b92b24000367649c572ffc4741f3681bc1c543d5ee6b0d89deb22b94ca052fd36e3d5a12afbb5fc780b46a0106cd619bfae86ab5503dad6416ac5ba99e51efa0df5ab4fa191587adb84ddeea7bd70950d568b85f94aabe2fc08e1462c6e32157d52838a0899e63b7c7a25fece83ae7a219ee36bb01d9c751a5ff5fa789e14d5f184ff0ed467e7b4b745af5ee941d84fa8d21eab2e1f250328da843603174fc207078e4c79adc57d3881ea8d9c8a966befbaade2a7a1fe13a4030c87504c3b402a54b1b18cbe080b5cc958193cc06175829301a0c168603d18541f6ce4bf7006d7e6f9dc622b47d5b05688705e85b1f2edf5ca441fb4f3d5f2580d6544d3765c9c58d72bae77dd62bfe3ec31764d004aae7d686b071a3184ce9976fed54ac6d7e404ca3dd6266148f7ec03bb2878f50320845c840c2aa1b00962ec982a67d9ff4b8553616db94beee4c96f9bc9abd8a30095170db348bcee4f7ecedfc8cd38393f44f364c99325caf3167051fe5853b0bb3a38868116fb95ed37ae2414ed6a2c4bee3a869e566763cf5db65c1b00dea2bcee317ce9f7d65d7f17fb03b34ad83eddcb99654075895fc609b238c437d1ff822b926f727de59b81aa460d08681af78177807f547324057394f4766e5fe63da76cbbccaf0b91d671691f9ea8b79accb37c80434ec1900b54a9fd739e0b83c3993c4e12f44373a4eaded83708cbe0450045394f940375c7e5931ddec7ad2357d424a9d0e698037d3a761074ad1773e6d46bebf2c89b4dc1a2fb06067fc74d30e4905f94fa8bb9c60cb948b60a2cde38cc4b48db510b808f294c26992aec8a054709ffcdb4910f25ce22f1a9a47e87a1447db077c1d6a696c500fff55d7f323b881bdaf9894a8bf2fb4d9b9e007ef8b6d97db346af8f286f12a402a98c020e4a0420a186fd1ab8e40093b721a2c0b9ffe7c5d1d65e879e7eaebfdf243b2756c757d2b41484741e4f9a9fc4c30fc633d31be09c856362715bd5bed603ef31a42a0f8cb320c3f904bc15cc5500ac020ed6d24863f262b2397d442b97b71cb38ee877c90f2a101c34a00e93e8490bf69371b777d8abb0d96f59568094cc484f7f994d02288f1d5006a1f190ef2ab4367a4a17f95afff24a7b86a9583d920657eea2ebe2affe3036f3184b4dea2419241bb680477b8d9ba7f67ba90d22c6bb5f649bc0c505c5ed23a299882559a3bf52004d8cecaac3015458aec229c4d8fbd869fa8833ba94c8c86dac34a1ce482b42c0859a43794ee7e22aa6a138a4272c5577259eb94ee94777ecb6ed6da88fd178c4e54506677fa3d3e4e9b2b4315fe14914d370c02311edb4784ffec388c9366695f2f98fe5d3c9ac0fee73170ce19f45bb5aaad2e7cd2020c8de055defa2ee8eac15445a84f9cddd042b6efb873adabdd341a98bfd69833f36f77d973d9b5e638fe291f0b53024d98a3702bc40ea1824051ef935e4858b524b12e3fa0320fa87a9e18edd07456333da87dae3ba6ddc1ac959167b3d8fad1c8db6c510c0c2676d92788799eb780d7eada4640c64449b0488669dc659066cf077598d55f6fe1987d23e1891e266881c5bf31a80defcd973daeddb91d7884f708081c94436428558d198ae6f7c8f779f6e1a7b0b7af51bdb29556c882973d90f41b5f565ef1e3f73292ed58d2a51306a6c8111e6d8cbd6bd0c13dcf3df577e4f237c9e25821fac4931571a657c6a572fdfad5bbd68ff9e9bfbcf897f59a1b392be3c202daf95605d92a7e9a2d32960322015d4f9bbfed7fa60ef1e8538f12d8c7a7b27c8c83dd012b597cfafdf1cc023e650fa263258275ad3d8e89ffdb4209ed0b011915c67802b22bd38f6e0c31b778ac557bd7c79e12fed33944a0869514c59817a11eca104e9527ec21298aac69f96096a49eaf2a9fbe5859dfde99f24078d55ddc4e988b2efdd62d78d5732461e80839e361e50f6418525523631b40d62e4b39924e37d3ea12beff5b1bd083e86e2da801c86f33a9324b97d8d414691e0e80148ac5afcecafb69cb93a3a8b044b3564ac67a5780b634ca86c6dc8c546041fe578d5c096616e15ff7e9140393bdde0b87f920a5ddd247588ab4218ce9e4ef4d6863bb4c8215eb26ed2217e9149d18d5c764615f3147937c0b6c4b1b10f13ef3b1d4898009104248130953631b2a883a72cde68f665b3fbe71b40342b1d1597a98a86eade54f0d4dd365717890ae57c4f0fd573c635773a62555f108b4ca666a87a614dcfd1a75bb94fd18315b6facfbaabc5b6f108359bd8d17bc7501258e49e597201539b9a21cbd9af19464b6b06606d19a2f5526168a12c10c91812af8a11a433d5e8173bbf7b804a3ac94ca8a8d6d06bd841a89d5951c1d8b651a20cdf98e7211c1bd92e9d5ec03d77ed1f563f848216c7647f5bc6714f1dff8b55134daa9ec4445d55c533dc15f3514047d6330fdeb4e0ec4b0f3876006b0523b0356cbd3787ff2b11a22b79fdf647516abb1bcf62c0c537902a37d6a24a77c927f5a5474e06ad13a137dcbee4d0da9edc7762499ac4d4e4f35f4d299126b7da40d69fdf4eaace956918d02166fd7b97319d9f15032ba052c900d0d549aa55d57f4ab4fbb5fed43eeda79e37f0d6bac8ee803aa8288fb82fa5a17b60582fd25957e47d13106d7e5eb376af792f1708a287e1cd79674b7cd9fdc395613931adc45f1660cbea910d933f088c4b5e28f5b28214b00f6bf96ec055e9c74e695a58a4f962f86cb0e4027b04dfad451a77028761ab8ae093142e912276798e65045379ab5cbc9befe10d54896e9afcf09baf8fab18c68379160cbb081c34a7b8ca3ec1096615d014127ede5127cdb95d016d49c2defb7e8a99b9bc6b2d8130d1067b198801ac8fa9f2f766e0adce20dc42bc344d80822843f98603b03cd7a04a5388c1abd1e9413e0cd79cbc6304c9eaca2cddaf80031731c0222f9bccb08c813be877f939448b3cbabfde48ea19faf5222fa46d6fe6c1e087feae725f943c122a2a9ad4ba46d412a710aa1aa5765aa7c545370ba2b5cebcab7bfed8680b557998cfa8d2c788a27c3c7a8ea617925f6f3dfdf40ebaf88432c54a9f32687e6f342238307803527cc5e53e0a7fd3068fb7f6da79fb3b1788ff4fbb0e14e375dfbe3104b048d06cd98c5c0b9c0c4a3b521e7a3b1735859b535eb56dd9f46b8a2d945fb5a6a9d1102f3bfb43c1dfffb94d0f52b07a623d0c69fd90d371656313df3308ab923f67e514513d770a6f55f8d706fadb11e5c3e333386c8c62cc6cab7b36c686f15e0763ff68ad35d44f0f829691ed0b5c54bcb855bb92e93caddad9680c03b842aa521566eec4d0bdd36edef23ca3d1d81389d437e3ce7a5d9e4ff65c1f5ac01488ca61d1601f0835a106768073b9cf13c6adff503d59c053f23eba9e0d362ed59dc2d1c549061cca4c68e1a7b389437dd2ab724544df5b9e6e296ec4422065044dee0dc91634beea1a0898fe88bcdf94cc04d57d86b99cbb4692bb555aa3f33f1dae5e4364054f23be6814fb7faf03e7174ca16f7f9314293ffd08d7b33b69d481764bca9f024df59df9de04e4ea50f348d56e919bd64276aeeadfb1e84129631df86ed543b64bde3d406cc174e93737d551859a681db81207cec87a666fc26947872fe9ee8bc94c00de39b78c46372341239ed060b3d589ff2b2b97ba11c56592b5177eec1d36ddad25dd3db76bc14410de02ea22333b5ce982a1a05fd192d68404be1ae8c524f186b9cfea72e47628c8e36a2e093659f95b57931ad429cb3a9ff87c34512e043621fc7a344b2ac63fddd63d329227a1edc92ca86d9374cf105b02ea51b1b2650a038074b1aca921f7d418e49e6971b3a8b7843a2f2a5d2ee629a670f986fcc7ebafc837d9140a19ff204e08a7dbbeffc8bad0c0c6154d5b3aa065b8a24d579d599b464c111db82ea466c802058569f6bc2794e4c8d0cfe46c33c329d2716d55e23a7d19f0262dd085fc29693dd30d28f192631ebdd95f5b1978413d109fa8920411ff3a0cc9e5902274d4c697610317178fbdc70bbb661fc0c2626ad32493d23dc62f14bd7579fdf8457c82c8abf6318c83f78638e39ea2d0c6995b90acb9870dab9f4298b5457a7602632638006118cef3b2c4dbde4394e7e97857dfa48430e256c24c0515f2863a203b397c2abe3d6d73721b5b280f66649f620826887e605a3c3a89b8f3eba1a3236734fb77680fd667a7e23d4d4c97e57cf8e4fbd51285e3e06a93faebab6d4f8079913c7319109864e6c1f8baa589d8f69f76c626eb120dc7c4e36179bc499dbbe4d6b5aa2bd031ef913323fc84ecbd90e8262bda62a53676ec00731a98b72c6a2b9e0d893adf216c49ae358f751101d0457b838c13b00c624263a63acb4669efc02f9aaca09de56f72abb3eff097543949ff63a868b2ee1e6a957176be67e4c14533f360f78d0c5daea415aa82001340682a52abec3e5a0fc71e7b4afcac1b832d239e52ca2ce4db503fd12ba3bbdd6a2274c72318a2debada572a2400837ca9ea76f1fe730e3d5cf9c77cffc05af12b0b77379a7890faa436e7e48e647e86b9ffb694d0aca144671de38fa3723e1d17759a2a7e86892c504f39510692fdd817ff6b0d55b176b86e3f1c7f933405bf940366264bbcebf24395d3e6190691df584bfcb21a3c0ef7e6dfcac36b802237353753a18ea639cb029d302a3249db0b0f77f4297a96ca816572770178e114328f840b32b3bd0344f1e7e673fee729f99205d9ea137c49f37e89c9a067c16c3ff77bc530677bd8cea5e85f79bb391f197468265a61370dbc76980b26a4cb9a9df1713a50f66d1ae6a32113a203ea2ae94b215220e061764af22fe40abc4a1ffb2216d2eafcfb5a1b5e24ab736564cde77ad3f5a40d86143d85b3bcd31ad77cd5fddf1784e7b116db5b657f646c2378a287d2897a651f87f295c62e063cee219ce93c80a55338c1b50f6617fb64b0cba8e6af760a7398120896c9902abf18bede78b196c2abdceb170e98fdbf0b9737493bed53eab57a72fe2d508ba70dc1950920c0d2737e1803afcd80a915ad413c21ebfe9b81a740fb31bddd9901b58354bb760ccc2e3694abbdc0bf9295e6395ab18b75c565d5864b41ccd310c122d87e43ecd7dc5951bd33ef8ca852b6330a03867ec55a0dacb4c3bcded3bb7be23b6250f9c49b8b7c1c4ca385dd620d101dd6ff4a7fd1ffa956f4e16841c1887026b1612155724b021c468840b13900f9ff45aa72f7b5a257d77f8dfdcffb8d6914dbe307fd091e8047c1fc41e650187d28c0168cef8d9c44d093e103b0a1d119905254f24db85c73193f7e0dcf3fda0614d6a20ca9c253dcbd02a91ea65d1a2e23a53584aa18ab572b2f8c08ee60bc216e19fb56c8ec5fac071c34a31395cef349551343a49271a8d812b4c7b65b455b7eda811fcf74161f397112357ae446257be26c93cfce55e4ba7976ded997ec10d1c8b1ac2fe22dc2ee81d05a6eb1361125cda0197e24ae974cd44092aa9f36fe01352ba05ccefd2370ceed6641950562f1776c39522e023d09a3b097bbe9bc5f87d05d80f8830abd7ac8c80da5f84a8749900f67ce52f7526b783562800fd2c1c00aa5c265b6eced67000e950e636bfaa8783849552be4540cb24d67996a10d16444b2d936d2fa5fcff51fb0dd5ee03998c0454289215fce47f2773b6a90fceacf2ef359ee5fe971102879c5b5535dc084e8d4e7dccbc03db7b931426 +MD = f67af14a7421616242788e317874e4b33502814d362c395502efd81f61a345eabf69389ce29c50b8dc1a44bbfcbd7d6f + +Len = 78952 +Msg = bc89c614509974add2665090047f3d610946a531bef46ea24edd294c01f68c5f559422895076411a14063d66b4dcdb6a468408b33a81cb7cea9179177133288ec1676589f0b52a72d3700ad8ce3caf11eace862428f3b9e616d45e629f78ee7e278af8dcd85d16ff362d21affaa8a19e1dac874b33531f27fa2d40f733ccc679b086414aaf76ef0766c4e8b2df26995806a773f101a8e488bf24879cd43898c584e2aa9b1d099cd38bbdc9ab26c17f89ce46b3de3afaf2518d419b1a2ac24cabca269a96cc1c05abcca12a60767e3b779c12adda875130ca8b0de438de75ca73abdb790461ba12d651f7759b7867b56a9992caad90b6863ae20fcbc09856fa654e88aead87e8ab9e43471122d483d6aced4e721efc30dcebb9cfb678ff6fc4c9dcb5a359e4b0b849ca1a66bd31da8484bfce0ef773c81a2339d60e2abcc711e67ceabfd0201921200df6dc363775a839379b04fe9f85292b8aab3c9c7766c70557b06ad9e42bce6b3566db548f5b2b147f3cbefc256fef4bd3d7a697d755d06e948e0c3ed8efa77269efcbdee194f35dbc39a2b8b08e55ca3de0b6e2849b12695c0d0dc5a36c957cd21b149dd429ea5c191b1afce6eb43f2ef50d3472740773ed7b3d637edab7ed397711e591121f758bc688d8e6f8da20911ae648c684de6342c0bcd5b60b24cbde27952d94084019bcdab6337f47c5858cd83d37aeec94694849a5bfba28be583d8bc16e7085bf26b756903bf1dc14f27495687d962bc81a606eae8dd5b3e336da3c1d34911adb111db2cd7ee91636dbeadafe8716b2e7eb2db82ddca34d11cc26b10f2c8048226d5297b468cf96a9c6422165e09b22825002aeaa08ad44e8acc5732d92c89e239fe84dfb860fcdfc362d014516bdeb15ed81cab9be5e5bc64d190aef23d47d6d2d616df953343c9ca00de30295d98d21181d94c35a30c24921a3e0ca4c3e765d9a3070346cd7530988674f34ea8889226448855d58bf38dfbef87d55685109836ae7fd331f63b1c173cbce4291455f98569514ee56742ff89979690724c6b76d13fa5d8bf763d962e6adb8b2068a80f17385dc0ccfda183235c91c55fe0a007929da199581422a5c557fc709c6e28ddc2f8d433f215b61fb184a1fd8509565362129c9e65999352c54c451c06ec7e6a6ff3de2dbf792cdd1c58edbe4c8f356327e4be704cce37a41491de16c4ab51be076fa1389bf0a9c54a209e931c39e73ecb5c2e967778b7a39b6ef0e640734ae270b548dbee41d5de2424db015dd011ec34c215984c62ba57422ba315e00b11dd940df99f20355a3092abcd92771d5e764c5e9aff3553e9c9f20f1e2a0e3d4db759bedc0a9994ddc37dff9bcdd2e573e3f977e6529912ec0091638aad31cfa679a9121ba6c12609a0cb666e3ad6f3fb3b25572019e0686a04086f0e26b08ac62a6b4fdbfb01b283ce66296e62ec0e9c86b74471dd711d0bde407bd31ef53652d287be478fbf02f6553490c2cc7afdfecd97870124b6f9789520cf011d679bf579e4a784ed64dc083e1fe29300ea89ca18ad68f77916c459318fb3bfa96e8055286c52bd9a590961900e690887a27aa86de12e7b61f94555bb776e354c72af1ae70606181f0551aa53e86b4ae80c983fd61b23b766c745153abf498c8ddbeeedbc9a0dbd05cf7b8b8f973180ab8eaa385a438dd00fe98c41b64f8cecf4120676b111add5d42151ab4d0203d359927a3a0141b5f1e4c5e280370f7f7c0a7dbf5ccd512f88126299b39511286b797fceeed4fde3406ec40f7ac6e769655685e0471843dbfd49f91c4a6dacea6f93bd6ffcda5f5fe5344edad86abf94ce619233e19bcff85d0050a219dfbb8f0830b4250b1c507009bfcc0c422c7f46e0b10d7ecf5dded0cfc0cef3c8f226605dd7ccb7c3a0b65fd495a46d5f120fc8c3d05c8abc6656a97c10dbd6feaed5a597106defce707b756d4040c5d82757629e46e91f4ebf21cc8c78df14631cb1a6dd63ff93d19485f7fd4806dc54703f5b99991b042d6f258126804275a043a0aa5859ea6c7712be30ab33607a7cf7b0fdde535903027e4c0f72b16dc15d2c8bfb2f79964265f40c67a08bb566f8c3908e92fb0de275f57cc09992c6c041dd5bdf8b4b6bdd464259e303d76d696fdcc957e01a9e6a2ddb9fdac3acb63af560f69f9458d204c0028cedfda0f04b8a4b41a0ee377463d3389ca61785a6f621bd4683712731817b3e8dcdb66da5d4f017e2b1e4daf7950e155b6cbea7fcbd6cfa32d24b41f11a20fd44cb55c6f6cb494892d1eb8c8fc88779c474e09a22577e21a1d6492c7b985748992f03334afa3fe73b492bd3a4c3e66cbf05a3e47e8c00397dd5947236c2c7267440e73d0a2778fac462cb3a9e4fd2f63468320f7a249a4bad18539a8962199fbd472a6b9c1b9c8c1561f346e534f3200be6b3a37ce6f35e19e7af2dde3ef5bb5c8cf346699e54a21691cd81e13af2f12cc54f26ee9bb47aa98ad0b29c20018339576b55d9784846af397e72fa2877727f4d2d22370b84a74548ddb12acee8fe3cf0b92055701f7fc8a031a199c829a9edc8761ebffe0ceed56affb3f21050344e9e072f434f8156490f0c9724e0b1a05c7c51a3ee3cf45641385d3f5bb0e22e55ab7a0b0cdd18d11ace37db0539b65fb5b2e7382c8ce3e871fa20ddcd7445f33a5d3c3b19e289fb2325dbf5a29be1ece1b25f65e1b881ab4df86f15b026218be6fd7547d1267fd94d5c206e65ceda51c7c4e2b2758677a7be7a73706d8c20ff40d24cb89b70a0757eba2dcdb59948964e3098a850bf6de4aac753756a6fe8562f26ea14e18a94d69f882b9af9c5d4c1603da8ceda2b0a6bfb2838ad109621989d3f77e60a3a0404990f415e9b1a25dce4353bac7c91f74397e54a9ec7cb74ce71661ab37e4998085294989f0260e4eec15e78cb9cbadc746846b0d2f8d488ff93e3fb05a47ff7e9b46257e8965fb800e10188b2a46f5f07549293d1097a0733eafe4363e6a3caafa6c0a7bebfdf4a192b6592e9fa762b0345131a216485967260ff1a56ab7fb8620ff5b0abe5a7414187d4bff90897e670220f6e4c6fbddfc5dc2da7655cd96a0bd94a993670804680dd943769349c3956d3cfb6da94ea8a3347d213185f7a87b2eb078be8c83201df15ee21c1e84bcbbe3f9b1b513ad33fc5873485f71d2ab85d2d74ad4755851965182aa58a8b6e45af50bbc53bc841a582859b268bfeb0a51687d828dd8041371bcc90ed4b85cb4e32ed76db1fa8fc647229511e5b6bd6f5e4e17d2332af2d02071a681e8c3d2b8f4efe15868641cc259d5c9d94efca6251d023a9c7cc4b122333eaf963d61d55af0b6ce0edf7fb79900c04c6b0d0841d60e035a53c35bdb841a7258ce2af8c1357711d1f39fa3eca4cc60a159c8502cfcb1effb9a9f56ce7056ab169c3a2f22b2f89fa1a9117728802d357d27d96ab4039926a2c3692bf67168378d82f34b866de5aeb191ed7ff7b593cd2457e8ce63753435c480d9620ff1efd61214eef448c0decd96307c14e6bfa0862b5c4ee1d7ec139be535389f679c2dd538b475aff656348aa41755ec5208c3ff16c7a44b7db2a7c799633f1a89bac2d385f43fd51b8897548fb9034cd61b8ea66b0c6171c1736157359d358a02e84f5f7e66961a34f267b99d97fcdcff8260fa8cad0edb3fa8e0b96e45b4545f9f13b7865e20d5bf0e36387226bb131ab7db9a102c151e64bda66c97ef441ffc69c09a327d589e3646834f9207b665d4365ed389fc1c81cd4c12ef370c6d3365b2d6660736b5ea1735cf6d619d876b98888b555ebf7dcbe5bec6cfe03f88352814b5b9790cb13ffe468b20856a969af418b18e02c8c1432a90328d17cb2d9bb009eee30c71f306381336f761f17c5a538191fc2aba8f8e186ad6854261e5edaa0cf2913608c3e3710663508bc4a140533d8d0e1b0711133b992366f4861991529861428a33cc4e25aa80ca67469dd36fb7035268212e6910c5b990a29a612d5626ab658d7574acc27a2fd38909da9a0588a56796bb1006145b09a0d12135283142417894604585d3ffb0fa6580dffab11ce39c3b177e50c2d383f604bd0e085075c3fa4366c77fd695c4bd814e267bff0e3e8ea9d8b1ffb8c9c92ec1c06444503b93792f0b72e146f6db7b70c436944bb726bd8771536952a849b97cddd0729d0e30639bc0c060a17d55e2988598ea23b22c873873fb041ce96614aa57cb09b3583b483e19386472a3d4517cf4b5d41389c09a5142f1769427deceeed0cc702fc414a57a97636336f4c766a2a425f8a7a873655680df2744cdf4469eeb4d5c6ebc4cf9c5ada9e37b0abf808e1661ae3c88c556bc902cacab56572a5ed9d614ecbb54b3c3de947b9b301d3db3cde18b5eb5370ce803626d344b67d8835eef30463bbc61e9acbb82341f70fca82d3e169ac838e68d5d08ef6c37b6dfc0dd0134f7d7f492ab9a879db2235b5bcfd6cfb65d1c4b8200ff88a9ef85b4ae8bc6b4a97dfa8db48e1a7134b1e62cd9bf3d2f01322c0f5de78d8a330adff1d338be61f4552df85605cf00dd9fd265d4ead2c48da691c4d8a56956015a80eeec7c26a1bbf9ecc4e5a70acefef862b6fbd73a389216c83c80df25a4ab5b231c38ba91ec46e8b163e1e660342f482160ad08d5f3d52f49b6f4d944de7789210a667872ba5bae1665d95861c8c50ba92376f4287ebd4c90c49338496c2c712529e43a6b8430c6763b4a51720586af345fd82db441c0fb37f5ea7095e6008f89fb3074cee28cae6b64a3763362bacf8d764f1a0bd576b7a9cb7926ccd4ba50da1ee9cc2f5db5e27062734b0878f7d90f174a4d91b2450e50a5bdaf60a0a0419fd56e850f4e42eeffc5482473b0b45823b3683ce850b26be725269ec3e258fe45ef4d43d13cca40940d80b7079286d975cb177c7249555cb7ba525999024ac356ace48d37c19263c79bbb572696c5b97fded660b1f4945d5ce5bf8442990c5d5c9ef2d5854561e4f4f066a973461784ac5f33ae39fb05ea3127cc93430f1418d245c6915c608f30b6cc01125028f2c775dcad997cc5009fff0117fb2cecd8823231ee652f7b90d3875f19265fa7de0e86c7a2d6fcdb4acaf102104062bae025f6d3e8a5712f0d49e15a1d59f45b3fa639b0c1cb2cb61b17c19b43f786e1b170babc43f6b3d36b004f2d9c11b0ab9e4b1928790aaede17e2eb4d21850c09d2fed84b6ecd7a0120933b4a040207218049af8f3709d5cba7d8d888477d548bbb2cfa11e79e4650c47f404ff3af7a557c4e57559a4d43f7714603ed144502ffd0877a903cdd7b1acd20d8afd95e9cafe8b5cb3c01397bf9dad717dc267099ceb99ad456ed2fbaf7b1246eda23a3c0a95c0c55730a72e04b6af86ee5ec948b80ecd3b1d666f9784007069d5f611388ca5cde90cb147e0354a826838ad5055aaed0de8d8f38cf25bc3523cec02022779b51990784cdbf67bdf8edf04b7e5779b10bf7b1f1d12555a4d2189d7cdf64ff84e0c8143084cb8fdff3ab3fa8571f8b3004dbd99ede708a9254616415fd3fa32f70e8616ee806ee431f0abc11eda1e19441d76ef6af45371d327abd0c1836e4e3887659904606057fe1890028a0a32f664996dc89d217edae02e122cfaecf37599dfe77354d4d67fec182a64d2e77b71e9276ccd8c57d00bd3c212fe12f8d3cfa37ed44ce6c5178385594190fd5b43b35a3139a6417c922d344a72ee128e5483ddcdf4cec0196c8c51439d2d134dd0e43f1e9dfac4790d678c30fba30195c0bad0320f9fecba1dc2d73f05e41da46c2a215660711b3786e262db75c6e7f75d9b0216ec67728e724c9fb3435d214a5db086414ab4509d48c53eb3a8fecd9b744ffde254cf587fb25331081d3f2a26eb9cf947236b6b929a39a8205bf4ba694cfd49fc0f7ea87427fe16a75c333d206017ffd0b23e7200c366298a5850b6492fce6ccee51e6a541776d5f6c8e0642002482244c0d36fce0c73485965b9c92363eaf0be9e54a409cbe2f65f28efa60e1b58e90b15d569e4bd898ef54bd7fcdf31785d3601ca607a8b6b014945070cd2f16edc8d79ea692a1ecf82c7d1535665e1a0399dd728a58f9f397f1ce8d19c55ccb38432b4ba7688766eac35c1d5df9dbb8c0e5be8157c304e73f83fd7f4607df64f68638dee98e60f8d94a8e204a070076163d8fc3aeb45e142f21cdb196033b6691186ce2ed72c2f55c389fb89a0c40c4ac17bdb3ffdb6a0cdf71abbe8a360532905053d213c421feec03ed50be883136dafae4ccbb76bd33d8ea1410831ea16b8ce46a370ce10277f133138337e9364f2b5d91986234dc2b94019332212bb473ef4b3c7c3967e8e3045c8eba96cde47025b62081a4842b56a93ea5add4fb92ee2fdb273c09a759e2bdd6db814ba4a04c52ab2e22c2e33f377117d7ee2eece12cd73ad6d12e4db9d956387651d6ec1e262a9316e67de09c509423867d8fae13d27dd0b7e5f7c9ad4995f7ebb6b922a2a01614776705faa7348ad84dc6878d9f517c4346e5068988b5c5ab982a72d6c25ccd85dc0f2b900455bdacaa63a72a083c5af90058cb2bf0a09dca28278487118e998d91693f5f2826b51708df5ef1d2f5a26870bbc62f598c66ba08287ea204e8029253efb1a67749f9be05942f83840feb18147877e247ebb911b4c7b1b610eba11a700d3304961203f80d2c894d900d8d9e6829610330512d57ba6fde31c9fbedac926c3407f9215c5bac030cbe8b511251e84901f0a72f0bf2959b54b394ab50bf2767250f14fa7b6f5ea21a54da8d01e91151eb491107fd88b2d4a5aa157c72d89ba896b87e0fe989819442bf0213e4aa7fde8d6b026e7a70ae965193a0e1bc7f8b8af96298c41f60d154164ba678333c903958d4ffb50b50f57ad8eedb6da61a6398ddbbf9c9955bba6bf5991c4c6615df1cde156d8e188003dcbc3a3992b84fb04cb4131582d3f0a9466105f7e2f5bcd8d3adbad05c2aa466466c042fd37b65fe310d06708263b62a6df930adee8a97fa082823cca1ca34a94278bb32b26823a9c049149f4abd22ba5d2ea7b2c16d3ddf14ddfec6f17f97394b52edf6b1f6df4f8508bc064e58acd5ae61b9bb0e4614d4a44f8a33bda36282ebab1ad054a01f5bf9cc7b29ffbeeb08ac43051b278dc39710ed74a778ee1d328db1a0440d0c5a6b98f4b09ee16833d0014308479facc082f5484ca6c5a83db4bc273ce65d9416dadd221ab995ed3da837d241e4e93b7224cbe05095f67a3a85f17c4f2bc8cfeb3650d5182e8fa65f0daa71306796a27ef90f364f19bdcc9a22c8113588d1283e1a7e7e1742213c1e8ce3b052442a9a3d7c39ca96967e27e3179a96ae82093585d3c08db6b91d0702827e10360f075b442ac60da580aa148bd1037d08abc360691ec19464e7b5af91aad4013a2cdf9e09814e801a8cd40b2aeb7d24e26ab2314e37ec22b0529d8e425270140d21f5ab241c3dc2540f8e8416c3722eaa433830abdbcaa9177e373bab05fcb8fd82fc3afa581e34f08d3c07f5f58d0aeec9d7e71866c7a808ef15301251b470a9c455a612c16a586e8a5f1f3efe184a2e6313bd0a657d901319a9f44eb241db807a9474f3f49cbd2c8b8a225859ce5cd7b36e3af8545701a482780086a42f4a1ffa2b30144e3fd3b9052fc9e874f9c3791f69d968bfee7d5bce01dd70a3c74ce6d79c600a5ade2ca28bc27e55fc351e811b7920e2049e53a730d9f3833dc46463a77a7d3c86c2386783e4a8273c0abe9e4c2e99eacef125056f62db44de812114ce17f0217eb6778691f8dfe2d0e5241f05fcbcf97b9171f4de3f0d2c0297f388d027516f8f157a6e1a919e0f474eff81fd56028496c9caf411b0f1af46736c2e421b296d5459b1ac92216b02fbb2a17586ecf312ad3480918e7b314526adfb738855d0a15b0dadc0ad3acf748abaaa482704172a3b5c434bc8f044940f9212073779ffa20fabcf28a04013ba60c18aa8724dd741ad9b738135b294027dea4047c3fa0ef5eebeb6633fd4007b1a61b2e4ed2ccbef808ca1e07924b8170df116b3b258771374a0c40ec058fe0d1415c3abfc235d8a60aa5ed7f7e919581c5105d98717d0613e1ca869c6516506ea482d5c23b414b8aa7efad62652403c45748e37b6aa9385a76ca422d66ffdef09836083f87189e0ea751669a902b539f5f6204cc59348e74d2b77b864e6f13bfe520da1eece15999d172210e47cf0e7ca305c973864590c9bd373a8f6590754353e75347b3c50592eefbe6a6d238bbc2edda38583905c7c1fff28630f58a8ee5a9347ba323eb2963c693bb4a788de2d903895c64ba9bbac55f9267514485e60bb1ae5b18867b4d7321e3aae282f70b29adb93a7d5030f23ba6bce5da9ba8031f31fefa8f229ff92ac792ba56389dbf1ab512dc8c45ecf58d9c1a09b3421b6f87f2cb60f1417db6f08049f38ee2a88514e23e497adff64d210954dac58107b2adbcbe9624293d0b2d13b05e73c83fe67ffbe2892d67778161b51260f6a09452f7577fa31222088149496e02eb328b69c3c9a9a58f24961ab468fba42fe6e9d9cf8ab58fa176069facea2ce8df67b396481438a487607c9f81e9b7ad599d2fcf9c1e0863bb6b5eedbfbe911638b0e0f576a33a8efc6150983201ef845a0b8dbac5dc2226474b39f3e88c4696dc553a0fb640556bd8713b8e2e784b2f1c782c24b489a8e02d5cbe3a901ef270b59ee86b6eb1314402d66508dd1672b8852e3394d0f0459955e71649203a3eaaaad2139108bf772062d8f58ea7a20d267f74cb9381d89f5aa73368a8fea9d24ea23be20aea32cf08e0c114a8f4e6c382f1911ca82f085e2a0b8adde094325563871f7e5d7ed2e00364d7e9df2ca83dd3c2ce4d5b42492b1269329d78499f70f240c70e122a675319d6649dbab7b12221dc7387342263ae19a974cff884b7ca02b57bbbb258b8cf521eae57c2fdc91b7526c8f1bc381e8e47b3989be8af410c9bce83adc46f8efdb724fe407d67b7d0d68814b47aea4273a46fe62ad13106ddc573260bd0d7b1854fd19b80755b45e84ceaa1f7f6a1960739c5a6a43b72cee6898cadfd5ef7e90e230bcf3e3242390cdf34b5e3b9c6e3ef0d9e1f31acda60ceee0160adf739fe4039bbe0a23a855ce3984e99a04abff1d628e09af7aed1863efdba87402204b7c59bca17d5178a76167e21955531f6886293755f21c8bf06debd9f6ae168c1dd42511ebcff51bb4f4c9993f02af7d1703b5543b6d5830ca955369951b650d6386261a117476e7fae2ef28df44823ba700a7634e73b6520374c708e83e762ac90cad5396fd6f83d5d6390f8e7d73d185277ff2f397df863786a7468499d26abad25b4d00ed4775f22947cba12fece53dc29f71bf6c0c43e3458490deb00253b5719074d3a68714cc669bcbdbde65dd3d7c966e2642f501732bdf767b137e6c5554ed5983cba706c11895ae730b772ff0afe556bcbef24573b42875ce26bf1af706e26995cf3fb27ca9d5d22b29895413f71ca9e752bc867178f00d6c8c3cf63701e0338e13b9be5bb4cce558cb14f003ccad063a909c5ad8e4b6abca96807471d08725d15b9d60eaa3fb468072b27a5cab06ca2aeb1a193671ecdf6ce8121c53ed47ef03e96370a601e1742692ea696b1cba843cd4ce7806cb2326b7f37a6449d2a2cd9a5f94341a59000cdfae1523cb9c48b2e4e021cdc63aca00504b21d2c00b08600920b841c403d75f0046db6ffaa431d4c79faca0e15b720aba4190ee43011934d4cf48101fbce8193cdfa57484bef6783955d78804a79b945a89401d6f5f35ba91ddbc2599ceb299e9eafbf7d657170bcec52af99ca9a73bc584d7f6916ffe7fa4be8d08dec3b77fabfb47508c07041e0c402f6c15cc356f6fc690f055ddc3e2a1f453203b367728d7832014f2495e0d56695d560ca9c6bdcdc133a129032681fe1177025b91622401151ecbc598857851a32d4dedaccb956407187f878ab6ec3d989135ac5f190fcd138bcb526f0aed628017ca455fc484d6fab7e20dded57fc4fc0a209a1a0c3a70210fca45576ebb2d72b541802d321a7b2eaa7f087a02bb48ae7a59c13cac32aea0031f0acc1180070d8e5a3abfa4b4e51568bd13d6df3d2d324a47ae417996ed131e501f47a3ca83b2fb5ae1618ce289416b12cc9fcb63e729f280bdc314c5a01ca9f3ff448609180594e9f0cd6b31fc253a167f1f47ce0af82b8b7c2bde4d5c1f4e81276d48ba5877e38df55dc011a2534e4ec7efd4da0d1f2dde660666ac958d747e240c5c5cb97c4f9d7b9d1c00003e2012137c1326622191e007cd1e51d0f9a44171cc416ebfa561bee005df9bba5848070e6e5321ae81f036ddfa95db92e666719d07987eef65a268bf129b3325343ea40511456a46c2c14955194db85fd623950248b1fbad4f9a01856ddf64d5547c6f841f4a5ecf666dae1993a6569c3b74125e2a3e738dc5a13fcf521caf4f2b79c027e2d27dacef8dcb78145064dca8c07fed068e55055a6069f969b380f73bbf5c5d068e4573b08a280cf5ac319580a1444b88323eb8904026903f64786207d57a9ff4de54986bfb5a54c23a6b5b658ef60609ba9efbe9d8ec203d8004141224d16d283319af8449c8cc048b6092ca020b890597d463d9832125dea69291ed55c7413b3d030d7c0df9ff371fbfd010730b61265a9d64e1e76c1dad38d24ffbc0e2b8884cbf56b5a0745ac457e7a7fb7a6c1ad6635893857e337423b711b2bffeaa3fa9f29cffe3b9be5b56c4666ecd80a4028042745456a00dc5dcc1ff7ebc7784530abf2a8d68a23e9d48f5bab9191e59d4ce889f4bb805519f22c9e9e873c4177f4512e673c7028b8d256c62fb60bbe3fe1ba627de3c06b54cb03f6fa4785cca20c39e6f4781531ba76688edca36e1d8eaf21bbc80553c9f6aefa30f272cba12f410a2237d2a0c6578a6ebb989fe18af27dc69bbd6960f86864b8526d523549845b6ce81892396ff7d40f564df38c8ed314510a4456107e11b5e667552dec4b0b2209427fff0ab5021ef466e2e898b0993d691145168be558682c74914c172f2b5e86375462381fe02ec4f33fc42d79acbeb6b6a8eff8b4a747318309f7df7e4bd68ecf7f03ee36f9cc28064ccf7270755fe203552a7f7465189e9ba5766cbfd553c713e82a5280b6c2c8a5f153901d5aea9200340e4aacf9a41ac54d10e57a309dd90a771f8c877dd74bdb1696af08c42570b42ee57ee4cdb34e08e90e7238c47c6dbd1529c5d3b7d25aada3e1f5ba1cda242729f546a5480de26c61b83d7ff9b82b32a89225eacd7c9c25807c8dbac8cf56610e88c875d2797df99d566bda3718ba7319a0d356259dba4a95af9d9032cdad6bc6e42cdfd3c0c7b8853027cee665c388519cf89f29fd5b24cac24ec5c09bd14c38519b68b3aa6ab0028e97e56e67ed7737cebb4b406328bc08fcc7e0dc036b0c4b193d9adbff0be9fab7e3a637e6e14ab27d45e4d198c81935a73169edcb23b4e98339fcb187556c57f43499a9aa4609acf2bdf24665e4433b09b3e85bbca04af9d6b7169e0aed40ff8db2472d7ac5ba0c764cfb06902443006a76e68d9e8bd9625be1710b4f7e6ddcca843729200667ba4f1a8979e12f206e14a1ebed398b660e5add945e1faefcd4f2d3f10762b0179dc54e230722aee26c4e5d7de25449fbe41ad307014225f4d14fc6fe2d096bd39f22115218194892e15fd226d4b96c9fcce5ec535a808c5dba2786e505dde1a2a7ac8a9c148fa637b790276d2b2e9d5bae014fffd3a18b4077c33a2ef5a5b78c9eade28c634d70d9d52985da507c843672b72693d26cc9a4ef6b0b62672b98996a6b40a76d184d80237213f6a96bc838014f9698c1aaef910c672108c2352ad2f42fcd779bbbe53589b2fa489fc212694111c9950723a40fb5fea3a86e8c153e2440b08353fce1ffef3361599b4b09d21b45e7120c9f9127d279b9cbd3f802e5e3e81253fea5e9e73d3b71af03cc567a7732179738e65ee04c208df8594099d0176d1b70057ca4f45b1351d4400ea0693e2182adf3bfb243093b44b7682e8106a918f261ce4abb2e31032b50bbd990a8565a50dba5f43556f21209906888638f8231c0aec3d6d59da85224a9dbf4ce3ea925a8aab64b9023efed020cc117e6748800ace04bea9b4aa64a6669072901331ecab2a18e8d6bb2e91357b2dba3b3bca5ccdf7ecd4cb53c14311917a93ed1909c90984895826d09c6cd310a1ef4716fc0df8110b3c5ca7bdb50643c28fce85c0dc17f2734f13f327063b89df3d1c996c17fb91e641d8210e1ef705fec2beb9f58a391c7d1a38935cd1d13f2c00363388ff5af31481c8702105665085d938561657ff6afd661f218c7426b92ee53e65d14898cd0c78a7e594fcc6ac0e3fb5cab1c9cd667a9f122e5451ce703e686fb0d37827884492e121e859aa70de62d188465445878b41bc2a42ef1b0cf0f674951e02a9ad436d1e9589c09457aceef62f528bda4695da97a5b6c0aed7dd0bd7930f7c71b48f63bab0f7b5f6c8c030ae2054d50e3c20e61f114e6afc796934f32b365a22268f134014b0ae443cded463fbcbc453d0c2e0dd0d6842866a1bfe61de11003d8bd9084931531e2f3c4f46a21225de4d9cd2573beaa2ebcf126bc4ae1c2e13165ce39f20874d89fa3f9814032401874e0905a5c6496ccb490aef143275ec076f02355480871e7647cf5fa8e171dd63f79da378f69a546586dc0c89997be9618a1454d4c3d134679a63fc91d7bc17d8bcd3523d677dc84f0ade4a813d8e94960a1bb87c74c62de26485f54b50435f7a1042886f733456fc47ba2f97b93e7c396180d6d80e06695b38bde051d5a802ac9453cc9bb47e7ed1cfd8324976fc1ea022ec466419f2854679643431f26aa004bb8f752ea5bcae73f5b0e8f30157ea8ec0967d9d031af048c9216758110bc606e86e48a4c16f74676becca30d2c26e49bd47e30f63f038b68a6e0050cbfbd317bd788d9a82175f0094e43c8f85dc28658b592d27b712dd343fb275a88dcb55dbad26da8c8234ccf4032fd67b75058756bd42a27276e34c267b876dcbd0eadcb73a01a5d72c585ca629382e613acf39b1c5ace97c2df20421b0652f373feab63ee6817626faf27c8b99858afd41a98dfb36f068a136bfa3aa60d45077154ba0d7253ed1d87883ab38b6a0928c2415129773a5b68e3bbc99151f4d68080b7dfb1498923f881f9c77221301dbba4ca2561b1e45499fa76953164e48ec668cf2437b931415927a9d4edc3131acf445c1d70a9947a85204566012704f341f14590870b74cfaa3f416c0cb93b8acb68a03f3ca77353951dd045e9e17d8f5ae2c12b8a87795652926894b74acff419d93d95aef3a9692fb8be39d1dc76ea7705eafe2674695eb9e8c756d6bff7e1205fdc27aed45d44bdbab84ba15e188a02206910441c6b6d470905b95160ddd848c125fb2594b86aa5ec658241b08af961fce56acdc5a80d64bccbc51075a661f9c9bf1bf979e16551136ee69a1af5bffe610712a7b847c578cac183fb467d049b3d538f14cc00bd27fa7a7f92e381623f177712bc3d711debfc8efafb1b884a96e6885d5cd43ff8916832561255556c8ee5dc72f29b4e9e2518db33f63befba538c078fbbdbc4a0f5243d7203b69a655294df38331c05cf8fe64f34d5efdbdd38f7782d1827b73cbdf745db4b4f77d3f2ec276e6606bf398f309307817f7439aeee813d5a01415550a9ef9ad4681540d8b55d1b73a2a3628ebc4eb4e133e1581e3bcdc96bb18a721602e5b684499c336bb728484138dad4f5532941dc524bc2eea402d8327fb91b77cacf374539333513ba31fcba108b172abdccb85c26d9fd88f2c97397b3f6d9dbc85426fe8202cd38851f3fc571dfb197c2de2048f5b49352edc9 +MD = 929437946adc23855a1ba1f559ae8bf47168ff9afa532ca6a811bff7a011bc641100e11ad62ebcc70aa67ee99c3646d6 + +Len = 79792 +Msg = 1293500df02558fc4ae00e66a544c0f35760153aeda09635c9e76cf110dd6b8ac38b50572b2547627b26b11bb1a2234dbdd8b250e5086e8168842cef61088957ef4e2b5393de4aced9246fbb3bc47c064232edcbee7d5dc7586b4c0c96cb1ff8df076867eff96828adffd3ae0c52d2082f934e14d0a76cefe2c554af75cd3755dbdc90fd091daa583fe2625cecf32e3acc255e91532fa2e14ebacd42c8b7d8562af52a7ca7f31646d7f3a62ea24f97846010a4ab3ebd0885e4713e2c55300be3167bbe4c9222b7dbbd5a268af80f15ce357ca9ca5bf8a4c3ec132fd5e5e1d7e4e596d5d5925392fd38406ad9b4dbb0009190f35770898084adc728a53f724441e06df67e6f2eb19592cdfb849f5a7103bd740cb84617a4ae70b6b2042d8a5ae24f29a9b1f05a1b8c112860f181355fbd01517c57a54b162b7d07545a75d122af7af176d6de80d8c8fe7a218a22148317a44fc99b55cde0e11ce3970fe0f1a391a8eee6530147f133a1eac7b6499de3f9f0957deb1d440aba9572028b368fe56e2348809121586db441a1d9dcc07b894c2b4c1fb1c6599a9d2fdb1d363f56f1303126ccf8065a543227c6df664d547df69e9b385419b39a7133477079c2ebcebd1bb053f177f6ae979c8261bbb9d1c5e191ab4f3cdbfb1120e9dd84ba89f984ff29109ce23ed484cae6fde843cb996bf34ba3ecd1d7d8089199c6e0625a261cdca26b3034219bddb34d5efb664d55771616ac987ad4f386ac8b290cdafe1a9d3ed0ec9550e9f4c23a1bce238c05acef3138eed9a299f39359072f91893d7e0f0cf9b8559c5e863a479674e71dbd47dd2cfa903aaeef8137805400f6d6defa7b2e66faf88247fa4dc20879cf813bcd48efa4bb40079e457b09bbc3c32bab35e88b5fd804696df70393b704632048e739617e9675156ee666dc84a181ef6ad85e0d2b7a03b9992665a2ec3e2c63ab3db76cd04a6040270d01e2f7c1b789e48ae59b14097cd9912e7ad7ee4eb1b02e76caf7e1fe89f1906153015b4ced63e1f4861d60adf8331db94b1b075d7a70973a7aebfadb798e728b6422fa69abe429be487c588dfe2e076cde547d93100caf33d02e6309b78195323c2e1a417a74838f349e44d2163216f13d6c9917faea3e07d3a964afcb30c1ffe40b04fbe17bb80f506c6ca3c8a711f07049a312c0740c5e8c4445f53e05be9963a300c0696191e7a6ce17299df6c1107dd5e3abeb11e0e101e84d04976653aac1dc55b8988fd3bf3ead8f8c1c85eefa6ef6a00b022883373c7bc5045ebd4ad706a04d0af96b493e1eef1af3cebd5f564b9624598d23be0945e6f51d1c7169ca3bd62edf115eba0d507e01863906decb1a9cb5be156957ff2212257557ea792b6866415e6ad1edd4dc408c6fe7c93101e5f09c62216216c0dde69d379a9041a19337ceb08b2aab3ac81f02d3606c21a1b37a216c3976c5f57e49a4896acb8bd5c6331dfcfcd3bce71e02addd2a5976538d228b05e50d2a450b25849351031d6f0841756b4632e884e6d0d3b2cff6f8be7ad02454ae8f0f598e61837ed6a0c01662492025f0b1f7b92673bd7dd7ad6f8b826c32821b643ad80ee5ea72820a3c72da34645182b6b02de8d2b364c8e5a261addefeb6b5f4736b94990196dba9592c7be88a1784abdc8933d5fc8f2c055ae9040ed01902a884ba27650f136be6dfec4a4ed9a07ff743741064e2278a775fcb8ee4f0d38ce6346ccf315e11ba279559514e9b14fb02ad978567ab546ba279ae5349a50bdb174a2a94e534b74ed5441c97d1169b7e34e2999dc6a03d56ee703a5c2338e975a48f9b7f69da2db159b4dd24bd945b92f5a9245d69090bd3c30b18b05cf196e4f3cb6897a5989c6b19ad4301fc5b7fbeadccddcf392ee56a8913f057da183ab06ec538e581b52c027ff7f63574b32d8bc4116efa1c56f4a4a851695a87f5fc5f7c47b46fe67b0400f2599fc80fe68d7fa2417fe6fbcb6008888a2cc049d0057b8417843fba304dedd99de6c3b33bc924af24b79cbfd3501f9289e1910af07d8cf0fe4f5de71d2e4f9e89722d4af906025481bf234eb7ec6f2c152fd6b19e8b1827c4bdcf538ad0b0a8e6ec0ebb696f9ff7213e8392bf5e82bff5be96262257a99131779fe8be5a975f7bfb6eeed3298502cdddc57232cbe0b4f237d951c40ac6960d25d58c03f58d2b124856cb7f5f3cdb4b44f0d55a5e0f71d442a71accccf89e1f6f77299fc91974717acd3ab4374aec631a0ca57d3c99606386096981c4c51130fb8fa6dbfdc3a2613adc23bbd9399bdf0822c9e49006e866ac06262c1bb857087424ebffba131daa308a6edc6e915286b53829d780dc70a75ba73915f856d86f803fe05327924e1403df035f1ed8781fca59ad9d34a562ec3cf38a848429fd2dc7e76d1f6dc79b675ce3ca8c10987473ee8a3d80d5e825fef7f201c1e7b82c09f2247aaab33a6d6ae29facab6d58b04acad5c1c68b2e21a533ac8713488bcecda9feef3d22742de63e1a8f035ca1936b054121b87dfebea8982a02c4cf2b4c3f937eb420e2fc41a4175c5ddd06fa85a048d6459ed4e064d1cf735c1aa61f0c2859abb19b1a5a1369166efc8193ebeeaf3b9d15c0b75c7be6808f7b5ef2ef784fa38ecff6f2170900e35756372afc3761859d7a654ffb6bb0538749d7de24f77e182df47893ba8d30251f5147f3b6c67ecfdf5ad7c4449cf7ee62accf8f45f07b6092096a25cb06c084cfd7f817a004cec0699f5c3dc07783fc288e8c30dacd0f24c5f714cfd3dc79aa6ecf94be43591801452f3de2f5621b23e1d657e76bf5020ccca4beba5976233c0420610f252e26397bf4c2dc6dc6890b966c78dc81d01cbfb1fab00ee53e86e59ab4a833d0e9be1111d43253b00c935d4f383739a3c625e67ce031f2ff9b694b3672b052ccf4a93111b9d76e449a02c11221dc235a3fe428333d8b8e30f59516e342c3929fb5af40828af756b3da9ddee912aec42da3222ee0fb040bffb5d3efa60c271ed39697e76d2fdb3385322e5ddbf0f644a45aa79f8a01e591f541e97e89b8251cf0fd2bcdd98fcb2c400c7be5f0a4fdcb47cc3b243a37764798029f6a932f05b57c54319bce940e696ecf4e1f311608809f62a665f785fe567360bf5bcc570f10010272f85525ee1396e36db3a52e628b3382af09c9d3c7e60bc40ffb3d198b56066fb68d742ab15241b0a04855d552158b9520b9b809171eea9459efed5ec0ae1403c501358ca04df69eb18647f11f463004bf1ccd0f3726973a63e2e40cf741b22666fda031032d3d156617856b1245a93655db0fcd6f279a1cf67a2b0c783668406329bc0222199e7d89a0172c733b7e92a99d872c06497ca4d95fc9478bb6beb9822c91e7443aa23ee0cc031b8a4f3882850b3b1246b3c438d63ac6a478e93df98caf27c9b3b8d0c03440531f9eaa5e6cafcc3568758efa42b3b32b0a86f66c684859878eb5bab16b4ca70f22f87378baf0897d17dc01a6293971ff63fe06d36f80d3b8209368cba8f2a73d0be1d30fd310ea1906c3355155301d4a962840fb74fac4c26595eba9ddece8e7c29ff2aa1fd796131c7151822e605e158b4ccd6be17fd5ae47026bd0740313142e7af7d1060d367343307ec21c90dd672ab2d4ab1cd7ae83ad240fcad3ffd0cd39bc0a0cf079713f6246e498878a42485ba27e448fcaf6497e41001d64a8c619caab55e445e4f08160fcaa8cd71434c00663f3bda0205508a4a266548dc69e00ca91fde06d165b40279af92674f75bd8133e5a9eb9a075c9068f68f4b820008a1fb42d89d1d759859e68f8efc6fb60976a7bdb704114fb938c4f2e874c7f92c0b25d0b65d7ef9257adaed06e36e7eb06f362a0baa042926f1e2ce195b1abffa96bd3bffee825afbe3cb3a82b2a85a32b973ace043df2e064a46ca9a44e6ced4d326072dc6d4258c233c0a9af0b9b31103c4d90d782ee8d7a0658ad3e8d8a05b5f04a4c85cc0f346c7a1dfa8142f23cbdcbe10cb9d6fd42b92c3816ead5cceee88bda74836f51ecc3fa12c52a35526d382d3f6a35a1e6a72aff540b318ffb50eeed58135ebcd327cf99e72f304e826c8b48afd3d04c7263d465f3b59921dfd5d0fc0c509c1d5c8e9940e3621df44ce0be06786f143d691fc0475f3cacf4402395a23d54c7f9b3c928d84f86788e7672d74ee46588dd9382f48edec7f270e6e245c6354666b7a17f854773c2ca86c9c9e00739deb494b7357a20b97ef2fd99bbe9503a4f02c1ee58b677973f9a430d8ee01bc00121cb9fdf5ae7388a3404205588279597227e62fec54e0325702d0a68e071c1f756e811299acaa21340eb445a2a358e454e56c416b9b6fe9bd4ac8700e7f184e7db55d6ba44b041409f1ccd6fd7616c820fb1de4b9b96d2c94f284efdfd8350fa3978b63c5f835b3ad8fd833e98937975ebf7764272d5c5d8680925082a0f6f57f7bb7854f42a392973f82d6f74b3fb476c9055a6465d20f0a8b7d5c9777d27289d85e6ac0a8d2334f87495aa74aa3b1f1ae5431d20152b38969b26e7ebb5c192b43dc6eca9946083f0d981969f5e81267c5c084f07e52dd9ba1bdf0b8fa084bfc34de1bcd9273a3fe38ebadbfdb815831a5e6be603b570fb9ca0cadc6924bad7521cffc2a32ef79057fd082296a03e5f7c5435871c6d3ac4c593ad03842aa901e912e8a90e91e09dd68d321373ff45e22ba42edc5bf6d45fbc5a5127e59b9b661197631723383d8fe7a602559bbb7233aeb81e8dc73686f2095f7ef1965dd62e511339b5e90b568d13b03e9116be0d7b8df6cd42681697a63508fb089e5aa38032ee322a68f372c0e013af6eedee5ee151c803a2477e51a2c7bf9216057849843b90161ea8d6db50d8381d952735ad8e819587556b57fa0f47eb09c0d3a11264f462ad3bb29ed764838550adcc7a41aaa5c42204dd87db143df329b011bc4445e5cabf268d31af2468630f5fe5a5635c45bf9c57a3f83cda3241ba8ec7b128529731138a4179abb90f3b2353789d5bcceaedbdf5c7906588ae3c8401fb6806b09100720dd75c124b00735530904c71231bb64c8750399d47374c4eb2b7c8268a5b9da45756c42e01c4756b9e3299ed89618213b447da2d3f57d9e24902bbcf067e727111c6984504e2a72d47686c162543b9d825b35b5d97954b066de5294a4c81e5a1e32fc0a07ce27365d039ad352049c364819ca37578790b83c666f8e085ec60fb749a2387904d40d9e4ae4492a1fb097f710b9cbd098c7f21fd9011d6d9484a486d0eab4168a9755229cd1a75d1e2f1f09d062d7d735510a7ba685c776f1b0b5075943f182d817c9847a01526d885e481ac983efcdd5d26dfa4f8c10a70f00bdb3533c752075abc73e72f1eecdd6c4bf847c6b883702a2a8f644729d6034cb1b155f32c381dbe9dabb1801e1108208c1e159a815a53468280a25d7a2451b967997cdc5412983487074c9efbdb822811bbbf1b82c9af39987a05439e3c82be955d52f728289f45e251618e9f93730c4097ec51a318ac89d34535007b66bde4a1c3814b90c15b77164f9759f080035583794545cd8e71c09aa8db9cfbea2ab1f494aee07527f4558bca9708d8ec588a412b71fee6742765576c9f20050ff2aff69783bfbda09164aa8908a33e1d9d33e1731984d712f50171592893801f3d660f96a8ef52755a2ed9569330095cf8d9cd1ae5e089b0041b50371ffd5660325da857c5781aee783a81f7e0b923f191036ce87c19e3967c3b5cce2b666e1bfa1c27a48163ff5213100b3596457324913926a48737cc0c84eafde6f5d7b097bc2bf64384b7e8eb5239ddd85ddde13d20036318ad432e5944ae9b462457041ea1137bfc777cbcff5e3c61a8df88558365ea8b0a9744f0c6e5129eb761ef52f6d15b209902bb65d75fa1fe6dc14eb73f89750643ed42fa9b8f9b6e0154a68268738b4ce0cc7bcabb7cf11beeae37efbab32d3d8b5646342069d373eca4847cbcb02b669b7ec4d3f2ddb322f44c4ce6390c9896a97a56869c9c411540fa91283aafc4d890bf9e68c6ab6f7a4743948207bc407a67027dd8594f6dbdc4fdd66f2a99dd09883812717d0ead8baf3c17ac6beaad528b96c0129dabe0d141565a37d395ff614a9127d6602df6bdf4dfde4dacbf6584dedd291cb1d821bb7fac256a7eccb148a071e67fb731d178ddd3f04b1362f27a2880bfdeddfdb8e146a840ee73657b2650805555ca41c72433c15690e8fbdc9a31268a4068432ead5ef2b2adfa89e56323677f3ee0865f29be50160273b4a94ec078932b9cd10a858e31838d5b607867e1ce6923432821ef46293a8bfbb3e3fd9f1ee185bfd0d4d39f0dbc78dd11bb9b525c1ded394e95df93f3c912ca20110e94bf7c381a6715fe5a306455c9c537653dbaa2820b20445f6c57cc7e2624bceb68036d2af5bf536e843f830c67a3722e6c9000cc01c7b5d89bfd4ab958e76bfbe394bb4598ff198be8e52284ffd4f65fa5853fb2626b70b3e68c4baaa790a6a6cc176e6f4a50ecbd4dc847a7d97f4b5eb141681b7833fe5616add8395d47f654ed378f9254da566c7a90fd5c3dcdf795586d83f18948e62bf307f74ec136e16d0c9a2595fec4de0038e6498b72e6846a61b1961bded2b0984443b3d11a82f159f2e8386090370de14f72351cc1f17a4796b4ab81bff8e507d30811aab156ae8167cad1db525a697787dbc8f872165f93bd1fc90b73e20cdf66ff1bc2ced89f4b32e7f6ee8c567c2ba8c90a05cd7fbdb69f99f9a144b9ad88c6cfd8ffb8304c201de9b2818552ce6379e6042c19511b1804cb422b78a5506abb21504ab9873d69ee750a7c8677e588c3d7bd56a0b70221b45cac9158cd7eed0c9d8c8c1705fb8c6e3608c7d7ec4b034e473d69a8d7f93976f53fbb2c5abe7983ea93ab1bd10df365d1b34ac0da883ae2dc8d4f7ad988c8133e04913c739976e6b16d910d14fb049bf113ee89692297473eb4ee5ee6373654de02fccf41964cfe99232435f54e29d73c319979c0a3814416ba309b268febfe7e41e22fec3d63934bbc4eda9d8dc9e35a1434d9089360a30ca8fb7bc0174fdcc5ca2da29b16236d6e40f54633404b85f4c4a8f168789b2ac7853944dc57cab55ca4c37176aaf553abb803bfe0ef1986b24adb0909dc9ca2f059d13fa4d8c550ead78ee4a6803f0eaa2b5f8ecc239aad3badb7691346cad22e2dabb43e21a676186c744253206a6712a1f1fb1e6336c438f52359ad3f8d842a08afebd2bbd7ef8e6a5fd5a413df238c22a14dff385591502b0620ff4e4d7e8cf2c52b892cbe83f3d936e3c2e0050dbfb757ce96295fde2c564a0732fb7289fbf3d5be8afec5faf0c2e1b5d50f43ec5467fbc40cbebc71737ed6566ece646d1f14c7eafeb8531b2c2c479304290387f23b7578887fd512ceab9255da508cf2a15c83f80de3cfaf501f52c477b5aca74239ad3233f5108be5e6664b9f0850e029d4f130de06a37e03a3e992573ba614eb6b8c3a34a7d6a35f363a82e47e19fe5e82fad99aa93650eec1f443cc43589696d9f8d7b41d9021e5a4f640d23b5015e970843c6855f0edb8805c20fd562cf5eb8ada52dbe0a4ce1e3782ce91c65bed71a678a27190391d0ae9077113fb89f891861bf3d0777c72b3f7c67448a7a44e9f2abf51dde579a78c02de7e35bbd76931d5a102bc6a7ed54becab79206791001b063f92d3d91854e5d5c98e8c1d7f0e728056c7c64214be8f1f1727408d8cca8c42e2ac7bf67eecbe6ab1eb40a9e7affd8d218a1786a5f62697f3c4d0a1fc769be48fe9fec31437bec77cdb78e778167907e992d6be9846ba5c2899fa2c49caeff62e8f84c840fc8ef614a75c609a0a8ff398282c735774f0779deee4b5da8f317fa6e7348e6b05d5ff5f97159bb652e75b1594412b494872ef390bb6c4198c0888e139379cfe183ce847f2cb2032b72846481e3c71d68ce8cce63799e16d8b1d18c6cdb57a5ffe6bbbb302a5787801fbbd190e46ca6606f9178bbbb5953e5217373dead5b1f87f09808a0dcc2aeef807c770ab86c0617f4ed70fdf3167f5ab9fed2ed9bfc83062be3db65c68befe63f56c353e25da30c08f145ceb35e0f85c5d4381e39c476e7134fc1e37a0bd0f0c6cb4500f4aa1398e63d65927eb86b02df8401e4e94b71c7210c4aae59cae88b915a8a9661e9be5b47226eedb79e485e819edee62ce9fa12efd9e42b08519d333984f298bc9529cf8650b034e077fe0536750d7697387656da190cede838657429cb2b6c5724ec724e48e80c9bee127388b74c2a9aaf7d0f6a4a536b8bd7e7cadc9d7395e4115ccfe96b64d94c591c45d2c5e986b9c784a93afe262865c88aa3ec8c89b9c5f31154f248b53f745171d8af3183ff770913b0a6a513b90872d49bb418dc2c8f42a08de3515783a66fc9c8987a9a1954fcb0b247cf9a71d67f4c1eddb2c982927860f75725da5a44fc7a7219219a58d61ad22a98ee28f7724657b9c3faf040921cf91da836ac37e2900a819b9703226cdbfe8614715dce4e508dd90151dedae0a8cf6d60f44b8101b2f063aa6b732aabc89c614509974add2665090047f3d610946a531bef46ea24edd294c01f68c5f559422895076411a14063d66b4dcdb6a468408b33a81cb7cea9179177133288ec1676589f0b52a72d3700ad8ce3caf11eace862428f3b9e616d45e629f78ee7e278af8dcd85d16ff362d21affaa8a19e1dac874b33531f27fa2d40f733ccc679b086414aaf76ef0766c4e8b2df26995806a773f101a8e488bf24879cd43898c584e2aa9b1d099cd38bbdc9ab26c17f89ce46b3de3afaf2518d419b1a2ac24cabca269a96cc1c05abcca12a60767e3b779c12adda875130ca8b0de438de75ca73abdb790461ba12d651f7759b7867b56a9992caad90b6863ae20fcbc09856fa654e88aead87e8ab9e43471122d483d6aced4e721efc30dcebb9cfb678ff6fc4c9dcb5a359e4b0b849ca1a66bd31da8484bfce0ef773c81a2339d60e2abcc711e67ceabfd0201921200df6dc363775a839379b04fe9f85292b8aab3c9c7766c70557b06ad9e42bce6b3566db548f5b2b147f3cbefc256fef4bd3d7a697d755d06e948e0c3ed8efa77269efcbdee194f35dbc39a2b8b08e55ca3de0b6e2849b12695c0d0dc5a36c957cd21b149dd429ea5c191b1afce6eb43f2ef50d3472740773ed7b3d637edab7ed397711e591121f758bc688d8e6f8da20911ae648c684de6342c0bcd5b60b24cbde27952d94084019bcdab6337f47c5858cd83d37aeec94694849a5bfba28be583d8bc16e7085bf26b756903bf1dc14f27495687d962bc81a606eae8dd5b3e336da3c1d34911adb111db2cd7ee91636dbeadafe8716b2e7eb2db82ddca34d11cc26b10f2c8048226d5297b468cf96a9c6422165e09b22825002aeaa08ad44e8acc5732d92c89e239fe84dfb860fcdfc362d014516bdeb15ed81cab9be5e5bc64d190aef23d47d6d2d616df953343c9ca00de30295d98d21181d94c35a30c24921a3e0ca4c3e765d9a3070346cd7530988674f34ea8889226448855d58bf38dfbef87d55685109836ae7fd331f63b1c173cbce4291455f98569514ee56742ff89979690724c6b76d13fa5d8bf763d962e6adb8b2068a80f17385dc0ccfda183235c91c55fe0a007929da199581422a5c557fc709c6e28ddc2f8d433f215b61fb184a1fd8509565362129c9e65999352c54c451c06ec7e6a6ff3de2dbf792cdd1c58edbe4c8f356327e4be704cce37a41491de16c4ab51be076fa1389bf0a9c54a209e931c39e73ecb5c2e967778b7a39b6ef0e640734ae270b548dbee41d5de2424db015dd011ec34c215984c62ba57422ba315e00b11dd940df99f20355a3092abcd92771d5e764c5e9aff3553e9c9f20f1e2a0e3d4db759bedc0a9994ddc37dff9bcdd2e573e3f977e6529912ec0091638aad31cfa679a9121ba6c12609a0cb666e3ad6f3fb3b25572019e0686a04086f0e26b08ac62a6b4fdbfb01b283ce66296e62ec0e9c86b74471dd711d0bde407bd31ef53652d287be478fbf02f6553490c2cc7afdfecd97870124b6f9789520cf011d679bf579e4a784ed64dc083e1fe29300ea89ca18ad68f77916c459318fb3bfa96e8055286c52bd9a590961900e690887a27aa86de12e7b61f94555bb776e354c72af1ae70606181f0551aa53e86b4ae80c983fd61b23b766c745153abf498c8ddbeeedbc9a0dbd05cf7b8b8f973180ab8eaa385a438dd00fe98c41b64f8cecf4120676b111add5d42151ab4d0203d359927a3a0141b5f1e4c5e280370f7f7c0a7dbf5ccd512f88126299b39511286b797fceeed4fde3406ec40f7ac6e769655685e0471843dbfd49f91c4a6dacea6f93bd6ffcda5f5fe5344edad86abf94ce619233e19bcff85d0050a219dfbb8f0830b4250b1c507009bfcc0c422c7f46e0b10d7ecf5dded0cfc0cef3c8f226605dd7ccb7c3a0b65fd495a46d5f120fc8c3d05c8abc6656a97c10dbd6feaed5a597106defce707b756d4040c5d82757629e46e91f4ebf21cc8c78df14631cb1a6dd63ff93d19485f7fd4806dc54703f5b99991b042d6f258126804275a043a0aa5859ea6c7712be30ab33607a7cf7b0fdde535903027e4c0f72b16dc15d2c8bfb2f79964265f40c67a08bb566f8c3908e92fb0de275f57cc09992c6c041dd5bdf8b4b6bdd464259e303d76d696fdcc957e01a9e6a2ddb9fdac3acb63af560f69f9458d204c0028cedfda0f04b8a4b41a0ee377463d3389ca61785a6f621bd4683712731817b3e8dcdb66da5d4f017e2b1e4daf7950e155b6cbea7fcbd6cfa32d24b41f11a20fd44cb55c6f6cb494892d1eb8c8fc88779c474e09a22577e21a1d6492c7b985748992f03334afa3fe73b492bd3a4c3e66cbf05a3e47e8c00397dd5947236c2c7267440e73d0a2778fac462cb3a9e4fd2f63468320f7a249a4bad18539a8962199fbd472a6b9c1b9c8c1561f346e534f3200be6b3a37ce6f35e19e7af2dde3ef5bb5c8cf346699e54a21691cd81e13af2f12cc54f26ee9bb47aa98ad0b29c20018339576b55d9784846af397e72fa2877727f4d2d22370b84a74548ddb12acee8fe3cf0b92055701f7fc8a031a199c829a9edc8761ebffe0ceed56affb3f21050344e9e072f434f8156490f0c9724e0b1a05c7c51a3ee3cf45641385d3f5bb0e22e55ab7a0b0cdd18d11ace37db0539b65fb5b2e7382c8ce3e871fa20ddcd7445f33a5d3c3b19e289fb2325dbf5a29be1ece1b25f65e1b881ab4df86f15b026218be6fd7547d1267fd94d5c206e65ceda51c7c4e2b2758677a7be7a73706d8c20ff40d24cb89b70a0757eba2dcdb59948964e3098a850bf6de4aac753756a6fe8562f26ea14e18a94d69f882b9af9c5d4c1603da8ceda2b0a6bfb2838ad109621989d3f77e60a3a0404990f415e9b1a25dce4353bac7c91f74397e54a9ec7cb74ce71661ab37e4998085294989f0260e4eec15e78cb9cbadc746846b0d2f8d488ff93e3fb05a47ff7e9b46257e8965fb800e10188b2a46f5f07549293d1097a0733eafe4363e6a3caafa6c0a7bebfdf4a192b6592e9fa762b0345131a216485967260ff1a56ab7fb8620ff5b0abe5a7414187d4bff90897e670220f6e4c6fbddfc5dc2da7655cd96a0bd94a993670804680dd943769349c3956d3cfb6da94ea8a3347d213185f7a87b2eb078be8c83201df15ee21c1e84bcbbe3f9b1b513ad33fc5873485f71d2ab85d2d74ad4755851965182aa58a8b6e45af50bbc53bc841a582859b268bfeb0a51687d828dd8041371bcc90ed4b85cb4e32ed76db1fa8fc647229511e5b6bd6f5e4e17d2332af2d02071a681e8c3d2b8f4efe15868641cc259d5c9d94efca6251d023a9c7cc4b122333eaf963d61d55af0b6ce0edf7fb79900c04c6b0d0841d60e035a53c35bdb841a7258ce2af8c1357711d1f39fa3eca4cc60a159c8502cfcb1effb9a9f56ce7056ab169c3a2f22b2f89fa1a9117728802d357d27d96ab4039926a2c3692bf67168378d82f34b866de5aeb191ed7ff7b593cd2457e8ce63753435c480d9620ff1efd61214eef448c0decd96307c14e6bfa0862b5c4ee1d7ec139be535389f679c2dd538b475aff656348aa41755ec5208c3ff16c7a44b7db2a7c799633f1a89bac2d385f43fd51b8897548fb9034cd61b8ea66b0c6171c1736157359d358a02e84f5f7e66961a34f267b99d97fcdcff8260fa8cad0edb3fa8e0b96e45b4545f9f13b7865e20d5bf0e36387226bb131ab7db9a102c151e64bda66c97ef441ffc69c09a327d589e3646834f9207b665d4365ed389fc1c81cd4c12ef370c6d3365b2d6660736b5ea1735cf6d619d876b98888b555ebf7dcbe5bec6cfe03f88352814b5b9790cb13ffe468b20856a969af418b18e02c8c1432a90328d17cb2d9bb009eee30c71f306381336f761f17c5a538191fc2aba8f8e186ad6854261e5edaa0cf2913608c3e3710663508bc4a140533d8d0e1b0711133b992366f4861991529861428a33cc4e25aa80ca67469dd36fb7035268212e6910c5b990a29a612d5626ab658d7574acc27a2fd38909da9a0588a56796bb1006145b09a0d12135283142417894604585d3ffb0fa6580dffab11ce39c3b177e50c2d383f604bd0e085075c3fa4366c77fd695c4bd814e267bff0e3e8ea9d8b1ffb8c9c92ec1c06444503b93792f0b72e146f6db7b70c436944bb726bd8771536952a849b97cddd0729d0e30639bc0c060a17d55e2988598ea23b22c873873fb041ce96614aa57cb09b3583b483e19386472a3d4517cf4b5d41389c09a5142f1769427deceeed0cc702fc414a57a97636336f4c766a2a425f8a7a873655680df2744cdf4469eeb4d5c6ebc4cf9c5ada9e37b0abf808e1661ae3c88c556bc902cacab56572a5ed9d614ecbb54b3c3de947b9b301d3db3cde18b5eb5370ce803626d344b67d8835eef30463bbc61e9acbb82341f70fca82d3e169ac838e68d5d08ef6c37b6dfc0dd0134f7d7f492ab9a879db2235b5bcfd6cfb65d1c4b8200ff88a9ef85b4ae8bc6b4a97dfa8db48e1a7134b1e62cd9bf3d2f01322c0f5de78d8a330adff1d338be61f4552df85605cf00dd9fd265d4ead2c48da691c4d8a56956015a80eeec7c26a1bbf9ecc4e5a70acefef862b6fbd73a389216c83c80df25a4ab5b231c38ba91ec46e8b163e1e660342f482160ad08d5f3d52f49b6f4d944de7789210a667872ba5bae1665d95861c8c50ba92376f4287ebd4c90c49338496c2c712529e43a6b8430c6763b4a51720586af345fd82db441c0fb37f5ea7095e6008f89fb3074cee28cae6b64a3763362bacf8d764f1a0bd576b7a9cb7926ccd4ba50da1ee9cc2f5db5e27062734b0878f7d90f174a4d91b2450e50a5bdaf60a0a0419fd56e850f4e42eeffc5482473b0b45823b3683ce850b26be725269ec3e258fe45ef4d43d13cca40940d80b7079286d975cb177c7249555cb7ba525999024ac356ace48d37c19263c79bbb572696c5b97fded660b1f4945d5ce5bf8442990c5d5c9ef2d5854561e4f4f066a973461784ac5f33ae39fb05ea3127cc93430f1418d245c6915c608f30b6cc01125028f2c775dcad997cc5009fff0117fb2cecd8823231ee652f7b90d3875f19265fa7de0e86c7a2d6fcdb4acaf102104062bae025f6d3e8a5712f0d49e15a1d59f45b3fa639b0c1cb2cb61b17c19b43f786e1b170babc43f6b3d36b004f2d9c11b0ab9e4b1928790aaede17e2eb4d21850c09d2fed84b6ecd7a0120933b4a040207218049af8f3709d5cba7d8d888477d548bbb2cfa11e79e4650c47f404ff3af7a557c4e57559a4d43f7714603ed144502ffd0877a903cdd7b1acd20d8afd95e9cafe8b5cb3c01397bf9dad717dc267099ceb99ad456ed2fbaf7b1246eda23a3c0a95c0c55730a72e04b6af86ee5ec948b80ecd3b1d666f9784007069d5f611388ca5cde90cb147e0354a826838ad5055aaed0de8d8f38cf25bc3523cec02022779b51990784cdbf67bdf8edf04b7e5779b10bf7b1f1d12555a4d2189d7 +MD = 768025dfc56113f1d8985eea6317b8e0da53d6975b46cfba168be6c17b9bd0ae609aa81e51e626482161bf7a93d324bd + +Len = 80632 +Msg = 2178aa2090fee83bfeb1151f54eafbfc4f80e38626de5ca56e58396d3bbfd9508932ab92da38f0fe200cc3d8dc385712886581c2337276d46bc3d5fc5fdce8ef452e27d3fa30fdf4e8b2cfb82d6f3bd5fae19dc13859d86b724e5328eff541f01e1326ca38109685204c40a98eb62cad6c9a416a80ba0ad04ca1bad832346db9dc8ab05fdbfd44198e811f924635b402a73874a552be956dc16312f471bff3b4473ace7a2d218e18fcfa735a9e155a3c74643f5af58c00a8983c6363f4be5b4826cc870374a4fcea305f44ebde7ea6c399c6a871b24ed3eb9bd6b60f035a2edc43e7e4e2f9ae16f7f2579b2c4e972100de05bad3d129979d90d612dfe6baf2da6434eb00046565a80c8a7f05358952590dc97a669a47d32540e780bbe40832a9525aa643dcf4706344a1f85edd7bc237ecbcf21354d00fed73af078b476973b1d5021d94cb81bf9164440e1f8c96f703458429c349ecd35cf0d6af3755073f5ab4d457dc1735db9b321aca318b027b23dec9275cbfc1a8da810580a8570a1d0cb9775c0109374be777cc337a22e6d6017f34f5c7ff7a15cfece483c4949a962faa9434ede9b097dffa0151e3986a8e03f26c9aed513da3a3fa1abf7456dd312b50d2e886ffc748ea85622d5437b82d93fe1a1eb5fc32d8bf73503ca1e3fe766873da7eb692a5e56fde97ceb645f53b186ae68a064a833f891f2d03318523ed4fdb530163ec71f6d8ce473def0b4c3efaff77e5ca81555d6ac65a1b0e81751f464fe676775354048c1d1a80e9d1e3c0a0857637e8ead3bccb2f7e8c1e221b93b6993be7d9107696f393baa18adfe24874c48a8848cd22e31223425f4baf3dd1087ff95b716bfe3475f8cca7bc7c725fdd835ce1d2726d5aa96a4e9b7b6f0562a2cac9db27ab14667a13fb9b66f1bb8b438c94496e20daaaf6cc494898ab99cdee42526ee31ae2b56aadec847087e4570ea5d9c90421915a6311db6f89ac219a52ae3d1c8dfe8da8ad8e4a6ac1831548a797d3687cbbbbf25600ad1736b7c65238d731ed0da040c8ab7ebb56433078e874292b2ebe3780fa396267488717af7c0786d7ea4b48219bcd45e74eddd532bede258923b2dd07fb73ffb10a641206a02781d71a303e58ab79aa785d77b96e524e51945041f4797d6c9f3166b5f2f0460090d886a2c90e8018771388fa25522d2a77f5bc51c6fd068c0a926362fd97f7fa7d82348a326ba0137262d94c6106d6db5d546fcb99bc203b077a0a537c233a7d0f7e2ed1c29695d0640d5756b5b3d5cacc577298b6de52e160926271b6bc98f10d747c5dbeb8e7b914bc0a006981b35e8ba9cc9e658a24e6db8173a2f58898be400b241871f81c354c16fb33c497f7fe64f085c7ede81fb241ef45cf7fb2c24c70ec30e9227fbeabd2c331d50f1e29141dd5a6fa9821caad5986e1e19e609e0364bfa7b7187455856f6cb4cf933dd2077fff361fac5dae40edeb4ebe97bbb54ce62b926c9c00672aebb98d0a951d793f52173d1d72c351d1c3c99450b5ea8e8dbcd8f8eff64b7e020e51c36d60e5a6245ec4c4de327c3dcaa5c6bc7d3f15b12faf6fe1286e7c2175a0dd5edf3bbee11e6aafd14934affa91598acc2f7c66a79b879856ff4cbcd9eb6804674a6dd0b395407f6f46bf850e90a7becf4db503f7380cfa5d5cd7322ccc2f6fe5953f42a3f1a6dda3bd1c26032d590acabf3314296d063e01275807a480bdc5e0a8f93d3a9a6571779694b961d23515c76d3bc2c6a43c0b47481762c96fdaaf616be3e8fef845e2f2b96d67aee60588cd3f18345544770a39a75c6c22024ed56ec6446c79730dd91c0fef5774d18f0ae51d10945eb57fe3de2d6f4c379fe0de12a166f0337487fdfe7e64b23afa9c4416ef6d07695e1c3d3ec0972b90b05a7352e48f9db36179f79fef129f89cbf3de689d75b7ffa916c062491e31b69b823b3877089b81a4ac6e084b4247e8ab5e7fe30f71cca7fd341551b14a8530ca21dfcb42191125a3e80b3f783dd1df02a3cf902da86eeac23fe413de645086a3fe06132d092727c8f4764e604866f6398b7876e064c34f6100d4b1bab3b94190e35919212207107a9a563ce9ae2eb6b6de1f9d0eebf65e403c8e322c81e9e8f7967fe404aad66820a05312fdb550a6e2646f0ea0872d9fc8beba9e1b14080342e0217cc0eabfb524cf16d783a7f54f25e40dd07f7d909b614dfffe71b63d1ad889e7ea3b2ae881edef479363ca4437e828a4eb911849d974b0055915acb0b6215978355fb27953e3c88e4f856766e891f6da68c09f7de167b075b7ef418a5e85187d6512c99bb46e219112d1c582ea8a17574ef359573ca415f720e7bcf39b6c8d9d833eb8752bf6c4fbe42f2ec1c33953c4a5128ffc7191a7329de56412f43e818196cac83140e37772cd87e84bfd0871c976048a9708982dcf35d18310f163bcd1a69e3ef47b9d039ed6c13c471f5e3b0dc8b38f4e8a207175f1935f141a440634bca265e9658c302906c572ddb2a27739a306e9497e9039cdd7134047f8472752debe84358519c5b8667bd2373d3eeef40fe5deb16c524e7ff23a70d112d5e6d417dae20363aa8cf6fccba47a489968e71538b8aedccd783247ee36d9f0570c626cdec87988a94b88d29e2fd15c1badbabce7bd6757697e8ee018d9871b3361a3e7b27ebf7b7ccb19f0dabc62002c84140ddb3605648e2a3dc4a1a2041ad3ad408f3e4cfec48dd44f5c699355bc34b69d0efa6aaf8ca442e4fb6fd978759db8e06c6b7a5eec422ed22031fcd3189b0cfec92da38e56138f2e8e6cc60bb5fb4a2c871f4f067a05a04b441c3f049dc94bdf465d27ca4a44d9c0847eb0e361542acce743141ff63df362ce11a30fd2273ee78c70408af09de845e58fe12b010f216794c012d0e951efbec8f7711c3f1bacbfa35033f6d1878363b9869f091e96f7a5977c8e42daab5c0839b8f2556d0e5c0f93e34b38746b74c2094b33a53f507430f761d39c51b202e72a3b6be0e369177e6413cf7561af810bdcc6e528eca55fadbc562807d6cea904a26827e52992a5b41fc606d821bd73e63bdffcbaadfd82c7ef42d4abf2671806a9276d8dc8f3ce5acce639863bfb11fa2d7ec2820bc0a324970f20af2ce51896476084ff47f25a18715ab1aa37d325f0ba8b7da98d568b6cbca4543c0db1715c85fbb5642ef91095180ab36a9eac756feaee7656bc28024866e9b8791c31ebff6ae048e4066fb97ac8de8aeef7edcb20c68ff5b21e9cd0609ec6938fe1ce4d28fff885a656bc1d6e8abe7d5fca00edab555641e53d1bbc5b6b232fa5e4f0617e4b29b3d3a647041a6592d3e5a04ca3b7a02ca416a10e8fe1d6e8d2e4ae00edaa565c1c927f7a36256142d5a7ff39b7ecadf7646ed0db119ce6fdc574c664ba53287a060c67bc7a3886b6cbce722feff486a1ca1454ec0a31a34a507cb4869022ca69ba69e8769afbddd7fd817e96157433101e30b5a7424b15b8ba2401cd37bf431380d08a0e5c156d8bb2e9add6ef17ba2ea8ec79768190452d4d9634a076d19b5e9f69d4ed892f3ebb332e8657468225e1af6e2ac08ea83a924ff7d5691600da34615d4e7be9f05950c9779182e1607c137dde4fec323cfcd009726c8fe0f6097c0cd480204301c530baec57bd8a57c5ab5865716435f494cdc32c827a9958301ee9f5f34560098a454eb75f71070f0a91892b178f5f770973c5509e910cd1550140e92e5009b1b175cffd3107213252ad5857c9d5776e63a95604493e0007820f59d8b9ab04a141aa83e956e5a065a6e70c11109e4780ab56bf700ae93ca2be2f7be91dbc198042cbb4a055754c520d27ef8372529556e86449be69f8894b1249f044e1ed12f7bdc0a84db61eeda18f5547d279592a9722ba3913eed4afaa8446fe128da5b6adb871a71602474afa34595d29ad1cceec6140da9a22e576661f0cee7baa4bcc4b3ec6fb23c05a2c03051b79ae950148fdaede73788c93a627e88408a6bf491d7854a7eb9d78be5b670983e389b9716271107c4bd8b5470697e99693bc540671dd04fcbeacb3db9fcc487ae2e3a1d5e2f19002abe023675f5c292bd9e4f1ea8f2155adbd77f719c0dbcbe6bfe4d69391243558dbb8605d791eb02920471f5d41ed50a23027cfe0853b99b1c3b3df1537b307672389f48f1c86877ab10c65c74de9fbc35fe3c098b794bac1337944c19c450e15cb7b6567103bb504d45c4c907cbc60f991d454a91e9037005a5d8e018783534b1ab53d4b1ce642b1d05f5b20960f872a0f22127b82d517547f88443cc214ddf2596003a50a2f3767ef3c1ae06389763f22f48276ab0b62a7e921eed913a2b4f0d1a340dca0bd9b10771c1136abd3372110722d0361db21e0e151144243d2e12fc7a77b58a7397693b126c98b3594d2b621c69a886bed5be7af403fde1a4e6b9586933c81e64ad0d8e583c948ca754de89f15516f92e818a49b15f6155fbe5a0c55900cbf2799b2c75b5a99d3321eb29ed08adb1e9e7460ffedf9c24fdcc9b77b7bc6717a30ce23485ad4c296353609c0fe4abfff573a3ce0ec132af4571889c9415cf51aca902c432b19cbf79a6658356f80857884e2b32fe18cb66c9953d8e0ef7b2007bd87d4a017503c602b55a9e76b52b6f3ef14ced4148bee206a21aca7cd4a79a9d15c234764a29e38aeab03bd3ce8d9d75e7794b7cd395b76912a0e0622f28869ceb721205a3677e7ec126f9f296b768c9ab30dc054bd84d7d81705e5389ad5ad7b3fd714433552d5ad30f3757903167a6b7141d8f040f1ac05909a2c556be9dea19d4c0965c6b46ab9ad9a2775d74009985939e5ebea2b5be13cd4c3c28d4b65087988e80a12270ed732699e65107ca1eb12fcd08be2b94e34c4bb93c72783a87879949a78403229d1676ac091d552aa2a459282195123ebc6cf5782ab611a11b9487706f7795e236df3a476404f4b8c1e9904e2dc5ef29c5e06b179b8649707928c3913d1e53164747f1fa9bba6eeaf8fb759d71e32adc8c611d061345882f1cdeee3ab4cab3554adb2e43f4b01c37b4546994b25f4dcd6c497bc206865643930157cb5b2f4f25be235fa223688535907efcc253bcd083021407ea09cb1c34684aa0c1849e7efe2d9af6938c46525af9e5afb4da6e5b83da4b61dc718672a8090549cbe5aadb44f5bc93a6b3fbdc2e6d32e2eaaae637465179ea17f23ad1e4f1ebc328e2c6dc90c302b74a1edbbb0676c136b269d70c41040a313af06ab291bf489d9700950b77f207c1fc41884799931b3bca8b93331a6e96b7a3f0a8bd24cdb64964c377e0512f36444bb0643a4e3ecb328194cd5428fd89ede167472a14a9bf5730aff1e3b2c708de96eff1ebaaf63beb75f9c7d8034d6e5471e8f8a1f7efce37793a958e134619c19c54d3d42645f7a7263f25471fbaae8be3ea2fbd34ec6d7aacd7d5680948c3cd9a837c9c469a88f600d95829f4d1e4e4a5ef4ed4623c07815a1c33d9fb3b91333ff04eac92806a68a46cf2e9293f8bff466ce87fe66b46fbff7c238c7f9b2c92eb2fdc7d8084167f6f4e680d03301e5c33f78f1857d6863b1b8c36c7fce3e07d2a96a8979712079ae0023a1e3970165bfcf3a5463d2a4fdf1ca0e044f9a247528cd935734cb6d85ba53ceb95325c0eaf0ff5cd81ecb32e58917eb26bfc52dba3704bf5a927fee3220d42fefa647051a5fb825a440d2d9c28086a2fb58b7217e083737ba1af36c29ea6a8d6c6664999d13e0dfe1514e603cdffe7aaaa1d9c86ba14f449e5590ae1120ff32581ae3451c1460d0b6d7a790fcad69bc5b2391e9270c322c2ec9be7e93c87a64da4b2ecf3f6b21404c5c4431aaf2aeb13864484e5a51ca379400e6a257ecc26c1a80acffad1f0a79ca678f0beeb7b59e66ee67bdad76fdaff5826ee30493c1924141c59f0f3802c25981efe56e0366ce104954ffc785b5da7cd5c00942c65e1d7717e1750cbff3622130cc88d5dea9885cfb79dc5285d9024e8342dcbb8c8157e388684b4dbbc4a249ff8fbdc9506613728e3d1bf37f516d96145e2414ed1286ae1ec2e779345dcafa739e4af26285b87b8a0786547a05637a0e7ba8f8f1faf3ff6158113932a6225b1662f7fa1beebf9f7541e31d7edd2e22fb00310da11fe6ffd8909335be87f1956f438e8684897005d952fbf694c115b7625787fb046aa6d60bd33414dfe881cf06aad541a33f12d63da29685c2995f61cce7726b22c37dab828abb7f9eb1183264fd96d082f6ef392a997c75124d5547c018ba050413b1a6c61bf11d01caffe610a597de29974d57279f746c8cc53f92c6522670b1408bf15ef09e97131b7e12920ba1119e0b7558bc1c471237e9656966fd7f55313453b1d26f8a94d98cdcde73967b11eb38af637178bd111ba20ef529818d5b8dd55111ab027cbd5d0663733aadef87180843a0cf1b9e0e40d6835e9647182bcc0dcd3770103dbaa66f59f96fbac31b2b6278385d6db2b4af6e0dcb36b5e86cf6c30e4ba9019632bcb107979b24c0742e2d9753a3d7c1a86f53f2648f34c4c714df5d76de3c4ccda8b2b5764553ae3b2853e8182abf9295886b7a532b2d76e42d4802df982b2a34715cabbef5af551722bbb3b0798eee2103a0efbd9206c46a49e845b05e35f70f1f95309633a07cb1234d404319ad9df4e7d997cd4a29770270a66d0eb9c27a05bb478d26888eedb033f1d6f8908267b73cfebca8ddfc5753ab6ac423303a7cbf4b590b977be16ebd5a8fbff7687714120af6a479d3e92b06011c90174b06c5e5dab3f0119501c880a10f416928f36bac5aab9766b256bdc27ba51a12928c1d1e6d3d84bb5c56c3a00f59a576595e352e3304df9704add33020ebaa3b8e354c120edf11be5a4926c6ad563345821f3a3f9ee9c335505536f7f8d788bac669196ac481dd421740bb9982ec32ff2ba04288a2428a681fb6aec00b51fbb8c2914ece980b316e1aa448c29604eccbdd4815b147f77d57f838023362424c5d0b13b1e59065556aebde96e8f187a7d21e7f7a6195f1e42b6343fcf70490c4d028590b58b777915f12546db49c5bac3b79ad3b409516070be83f62b5f925a93aa1c923ce122a2d75177094ce9e6a432f733a1ef74e4f2d201094fd144ae743c2ffcdc3f0ab6470d38399d5ddff9ab3d6968fec2ec8859f9262aa95bdfec0dc91c9ccb166890ea4a2de36f689c7d5465769126c8c0c9ea68867eaf2571d97bace872eb6d7b4110f09aeb1c07cff0242db742c68ba2184882aa5badb8bb05326a2c25a9aec3553f9317d71fb5baf09f0894045a6600f1d8da1a6831901bdde683500ba254c13beac41d2de6fd1ddd2988a54c6f025df53ff15f2ae75604f1fc8aeccb51f9f56396f623660e3849344820538150cb1980c24ad0fa1b4516bfe8e35abb34f8f07ab89bc305f211cd849f523759cc2ad4232469287c6a17b1b6301f4271c7ec22cfe43764843ef42b5c83b0c92c2dcc1e6acabece284038766366a10c75974e0d019e5b90674169e30aa9ae717ee20948b629be2a642a11c555f11b413d0f992f8e4b7acf35b5ed754d55bdc8d8a58cf393c609c5d6a44e3eec73e0694ead580ae470078965e8e952632c5157bfd4a19f82241438e63b4833b54392ed10fcf51f92a0a4477e67082b0a922b769afbf1bd1fc85ffc295b9a544ef495553a8b1ade2751b391f5cca44f923b8eddf087e7dcbb275f780681bf11081b8a3a01b413e6f107c7f152665830986d1dd667051e6ef2c59545044a10ea7f0cc3f42d248a9aae3753de1ae09e8e9bcb3af854ffefe4453793dba9115a51126ce52c1338d999bd74d9b0c5a7d1aa0aba68cc50d4e6ed20d1cdb47b73d5d56090503a3a8dab449d24ec21d948bc2363df49cad1209dea1438b567e1ee1df7f83bb7b7298f5a2bcbdbeda9cc3f988b458e306c5c6f7f5bade0fd5e82ecbd3947b36e1b56ba70cfc81e60a124e901321e6bdf39592df5c24c4ee800b50c2df9bd8c05ef588b89a12040e7b069f180c85cec88aa6dc8bbbe7df708071ea8dae9e849f1ab959f0f305307e55001d591ae8f84df47f0dc1b90c15dffda266f5e6a4661b3c894517c0ddec7dbf88301be6534c9358a88e4afe9950811e252ac230b6667eededb4f4a8a21f54e127402518cdb2e4dfaac6ee339977a00c81a0bc33db6c0e546e0e50545db34ce464b540575f1286b00c1c7400117282ef412eaa981b60159a93bcf36b168fabf0c8f8344b1054c2f556faa60c0b296feeea3e56067e2ad9e6e524a596d39bb92cda6fc99de860e0d311c74a008e84b131063786260db3a361ebaf2e7d9ebfc0c12283c6f5ef1e2874c4ea2983a36b8fe11c8103a0cfe1ba322dc555c77ee306d7289cf5fa2e77e200f7cd0b3e51c65026b584951bcd9d688333cfe31d7cefd49475231c55ac51559e32d7b8d8a07d3d2758a7033f0dd0f3798633a1269ecb7223907e04ae7196ca77fe70f7fa98789e0d8d5517b59960a43ead5b548bee6028aa011775ab862c89b3e200914c429fbbffddf397257937c3fa30adc7f374943e52515537f7f2fdda7967ef4f75a5dbdb26ceea4c36b33b98d49893c1073750fb42079f1138bdef05f113a6f71ec91247aaeaa2fe9151566af56b74096f3f7da9a3ab5fcc17f0ec5145718b51eeb72d48b2b98375de5a6f838534b868d294018e9cc5fc303b92db089a0607278e76152466c2f678c4d76d29ab78c6a6d83fc6f256dede054daba3701b5c833fa50eb023ef8d61d1ebcf3aa58fc1088b2a47b21ff87d6d13f4442ed1edfa6562dc88e88f75a22d46fc4abd3f5a96e5de70b4af5cab2b1122d96363753b681658dbeba4ae1f8ac3a09f51de3e3480c569518ea4f0976f32f9a3132aa32b2fffe9493fccca16cc89a67bea85ec440610f276de7824e3d13861fb596ba2e5d687ddcf8d472982f0e92239209a8fb3b02f4287ac1540b8d98b22893f0ebb92e515fb14dcff138a7e4ada80f80570a80688212bfe628c3d109304f4ccfc365ae4130cc134dbd256ff1498f97caed74c9184570ade474f9bfdb8cfe5081b5b645ce8d87d9dc3ad0ffbae224cb37e0bc7d88babcd53acd3f929634a03fc5471d9d5fc27f1209febddf8824020a55b56406306e61c65795e801afa3ef7af90c2e0d5b7c1c4c457d5e780f7bc1d5b2efedfbb5bd09e1d9639575ae7736829b594a2e6816e9f92d4b3561a755decdce04cce67f431fc82ecaca87190b1ff73ac30478fc2f52a90fccd514f64ea3530578832ef37d1de9d61fe98e55fc064945edef659e21f0cc8b86a01a52d2c9f607dfa36dc8e78ea74de795140ba673e94b2e6d7ca49b4ee42f1d38ea636ebd37339eaffb560edcb124c63fb090b6f357c8f8f136c5f7c77058d511fdae8ee7971729fb80215f9277c9105bdc9b9a1f253df22d2c78d3e5019762adcc8abff38631262874c1564a7bc97a7c0072cc31d2189e73b6139c4208692a6eef8e8e4b850007b9419c7f6f2d844912c4bcc9d5eef752677c4cdd49054cb0f7df20566a240243208f49576b1db820a281e01f95bc48b27ad78af37488c07abb03f6c4d9e3b66ce0b62e6ae8bca385bdc06339dbfa8b331060349b5ef3630c4b0668361534aae99c4ed236429af4ecd718dca5230a3d58eaaef01152d582da0a5efb46a6a74e4d95c1cb2613291aba60f3b2ee056bed984c0c44121acfce687b663662f8ac2f0d7fb77fc6d4f79392edd97c70fdb00a75c7108709f112943c30b4800795c3abadbc787694f286edfaf0429fea76472275ee445f55807e82c9bcd29ec1088e72b2debd362d16478856fac79396f9c1a42d142023a1434408956248b91bcb5ce29148de44db9ab9f13b7fb10e1302802deffb2c8a69a4039423d37f857458bf99ddad64093d0a7ec72cf1c755fb2b332e42e5d1ea1b4d4db3f982ff7a672b46f70c5ed719ddefe6688ff353019bde3b03da76a8c9328982f69af3311e60cd538881efaffd2ab58163e8f6fca79196086cfb2029ae4bf333ca6c96ccc7fdb995dcf2c277099fe5e027dc6f1cae68dd3bc84964dd1fd414e0adf2f02b3daa7a5e52c399a4e5ca1b7342beee4b8c8e3e458439d72b8447690a2fd2a1c4b5d38a4d8868b7b20825a0cb4314d6f1d86e13a64f30d9ad82226a20be600e21e71563c3ec76bf36f73f20588782bbb7f8a507ee77e2fecb700182b4d84f97db37fc81520d6212ac2963149bae7d2ef693bf757eacb4b91df4415d471bd5f1592ed57d8859bf547a155de81526589346001a06e74c2a9b0d858e5457e7b78d14424cb2d76fe2f729417c35456dc97b2ee44116a8d4b907228a250257ca58eda508decbbfae716d52445a66bd03345909a6c13f53d4e4aff598c1e1c7423e7583e8f812b193ef395d845506dc752dbf7ece16eb48db31d7ef37c16d46dddcb7297915424dbeb0edd398089034421a10e6d0cea51846252177cdc01f26fba8450e1fd2b4f49d6afd3ce5e18d54e87defea4534f742b4430f47e13a72182a5591ba73acf546ae81e9f1f48c78aed6fdcee1a1f64c4883f013a8089d007af8391fb6eb008da4707a26ab4a45ccb29bee10755d9f2eaa63c0b140ba6444cfd3d7517c0c79d89e61c855c16dba03f0b5d3670dfe7c18d8a2498a8a6d2ca9975bb4d9824e7580b51100d9ccc565b8f9a34235240b399563eddee1ed9752c961de561a52378ff0590c983535e7c5562df2befd5fea342edc951559f2cf730eaffa3f86744e25b22a9312fa855b45561e02be420a32183f93366175328c09f3d23de5b060f8d3407a62f58c437682534a71a485cb794262384067b61543840398f7cd3a90ce2525f8eaa47ce8fff8b823ce264b0c064f112c518c8f138c8dd844d67a678c4477cd06a8c45efe2e150f3a569804548f8ad6efe84472d5dd63cc665851c9cbe257c0241bc984fba753c30ec99e443d6ba22e13532403b4acc26a8ddc07f3d82e5189f1b2288159e2516e11958d7d1f3111711740afa43871063d1bfff158299ed194c01a65f6a1759a8ae3290a217256555a6c2f3bf6e9d0cbbeb132a28948aa746b3f9306375ac77b83d41288e3ef71fa54928d8d5e31326f69bdf28fe9bdd79697c0ea8de5fe5e80f394d08e16eeea5cda2ac9e85cb71c8db8b2de3dfbe1bcd484f45f6164f4a1475485f18e3ce94609558592e174e4059346304421525cb0aadd2a802546e6463b1127e40de8770b8c7143470d3930741c7ca6d2de7f975985eb03eb4dfe3ba3e8d40b26818c00a16297d474c01c34ee75d696e8c9c62a1df238f0ff501d7d40bcf7a0378daa2ebe0853c99abe8059eb5bde812477d87d847c61824ab00723b3340677a586c559a80a1f83273d1827d12b1ee5e47d291a1380df284c025db761fa8b01ef016009f5c455a1b8e04627666ff235c72e3a7851ac2c5371ab83b0d36cffdf82820cc83de3b095be2c9cc0e1a703113b1f7f20b55ab3b46a301b989df7cf50ee9d1e0cd6c4aaefa5968e8cf94ccbd8bed579abb5191fab841477e718479406a197365057039f101da28df403ddb72cd0c4cc61d763baa95ded4b24d8c8c8714a24c82b451d179774c53d9e97d64f5e0f81c9eba2d73f4e661ee7ba65f7e72126aa5606177daef64992ffd53bd31f1cc970f4b19dcff80b2b2de04026516a86e5bc526944a1cfad0a805740563080c9ad36ff5c2eda8f501b9ec73ec061ed2305cf6fdd5325e43c4611c6687d9b2ee519282c33ec636fbdb5e5ff1e9aa5c975e547e0dad976a7247acbefa6285f740f9be92de14d1713c498981a583b99aa0022da67da3e1062e627131581dd19eaa9b3ee56ecc74215d522298b8419b9e9423ceb6764078fb1f1c98bea9402471d33dfac39aef190d09ff11ed51abb8301cca1ff61f0ac410ee7d09ad1554e53664eada768a0427fee6573ec8994a781ae0fe08ada18b2e0f438dad46c3e07eb604a7c645679306bc9c629170b8a5442387c77125234b1cbec5556ad1dc6c56b95c7ea67759241d0fd428f32fd5458212ba2d42a4ced1f7e71ddc29958780d507147662558740d6bf36b24a4b18b09cb020396373c9a52850f32ad3dbeda56367d397e2271a6e98936907800daa70f8c562f2bcda3d4f15c2ee484eeb356268a241ea0f353937cc54162f7bbdb30d00192761362052572804b63d840d88404c800776cfc60d22d8cae43325a35a0d1a73188cb78f2f46c8e0f4115b890ec677c9cd440b23beb725bd7c1a6407c8fab09cdc7d286dfda45c1c50cdbda6ee7c52453a5aac95737e1bf585ec2230255b295d1c3c7203e3f74e81717891ad51ea43bcf7c2986254002239a8b1466798b9ed7c80cf7b990ac905d7001abfe65e99b3f5ac84b9d28ac4a3538d72b8f4499b64c1af402d779aa1e9e6a4bc2e993e100bb900a6f52f3d520409db37601f6189f6f652976fe4ba0862750664c80e18d7b1d09b3236bf9433af243a062630080b0be110da282a9285d84ecd1d748d15770f02262f63ccb8ee0a6c54e9f26e65aa0b4c9213428f4ba0b337a2ec1a5d5d778b1749a6649cd10b7fa8cee7ac22a1ed5efd8049a45c0de15bf92ddba3c7175f8fd6ab9e2177061375a253083c94e35d6cbc818536d8ffd1395c15f1f5136cb88208f51f81a77f8d542089558a0c54809d533dcee04d4af7b3270336f9898308cc75ce326f73650183eb18d57ed21ce15a885d2c8a0115db32249eb3977085dad5e5dfddd022e0f76ccba991012d6205092589a71c3d89061f198f6fb81299b30420d02a8dfd17f87687e48ff9674e7614f068487e49ceffe0cf7d7242b5e81dc3ed48218e4c338b09e970d950c60abbe1b2a316996d0b4edf0e11c51fa2999f7a16efc9bb575b398db7f677ec93bb5cda32e11953f1697c829df36f3521d5c28f616e2afc65b8896aba1d6fb7158ce1653acb5a951c0f103346ca786e79c40c6b976d4c3abf720309ba8ecb9796a3d3ec9009e04838259259cf3ee9b0f48d07768093385baeb02fd07ff093765c28bad6fd42b4528bd58b5b01f9c9e5d8593b18e389f549789a9628d0eccd3bb0441c8b491edc9d5e4582a3a4a020f46e4f2fba89f78bea6559bf7a762a83ceda1e83733c47620ff89dff9880def7c5fe986bc23b830328bf15322c3a51bc1722e076f69e624d92a3068aa25c585540d05b779abfd864eaccf578a8e20981fdd0af7e7c361aa60da5a8ac2902b9424d2bc1dca8dd9cb617d622185436fcd96b2bb6226dcd14746747aaec9538a7c6d459f221565f78019923c49a9a00d0cc467c1aea312bfbbf8ad134d34fc7caeabda015ce0b0b134e57fb0287e1062d62770b065e301875905d8b70e8bd77ccb5f049526b2eab16a439a804669011bca4e620a007d25c2aeec8bc84b3480f5230559bd2812905280c2771f3bf11e924997b03106c80bec4e1b3ae98bc58590761d5e0bd9763e2f28d099df71bcb560e491ffb7f15a008e87106a7d58c561b9052565e3b3644091b2fc7753700262022bdb852158b9c0040a7a9f062aaa81e980bc15f72e534444cfa4a41dcf98a0e07fc2f4ef955da6f748a85d1689eb82ac592ff298d2c9b592df778490d8b5fea660e6d3854fbc41c2c2280910ff1ed07bff1f704b293e111652d3ad4f3400d7ae6fc59584d06c0d10f78837a7e2aae7c2f30903a0aa36e349da5792bb59ffc8730cddaf50dfd3854c59377d2ded16552bd55b412bce3ab8a7c651b977d3095d8eb89da58bb68936ef77c42e2566e7951106a4ad3f0dcfedaab77095e707c3e37c03940ca80d039e74d39cef20f8a5241d17639c6d014d0eed1e22cc8b80a606a57e4f49184bb92876ed4014a31ac58eaa7826b3381158a8c97af6b1f7d62643a5792ddf5eeb406160354c531e35df3143b95c7622e67927da5e5ada9e60db06f694be540e640fd5bb3c201f14d248b8635b7359afd905289a28cdcb01c92aed13418f3b896e9df1f27259dd0988988093cf09d24161a307737addf7a4779c5276100f0a72436142a06858017ec145265f849e748a28d96110b4f9e4f8d4b5c3b970cc253b8af0444f9eb940d704e516212c9fc4ec96feb1dc77a0179198fddd37f4352057bdd1735a85dc0fc4dbeedc73279c27eb24a97641236f03f11cdafb8c0ad88049447b6c4bae6ec2aaaed8f5eff5f222086a502ae958c53e89e8e3ab203524c9a2c7647bbd88b00e0b0619ded2285047b6c0994c3f78312bde758 +MD = f73770a8212733fcc77c2a13842b85beccfda94c868afca799b8a212da858465f4b45d219cae4b339e65b6b3a4b4b67b + +Len = 81472 +Msg = 9222c45bcfb66b7f5d6883e7504aebcb95e907c9e0755b2be6225869cdcd75eee0e3821f887f399a77d217bb27c86a6583e8aaffe47d0cbc3ef355209c83ecc0c9133449505718c3a73de817a88863cf40ba151e6b38e32060a9e462089f72a5b57981df1188308355709e02bbd1ff923527ef2e5fef05deb20cac38fb682e270cde12ebb258a861e734e28548ed6535c9f7e038a7ea9d7e9ee356a95d2749cd370a8e741b10a9e6c6515ca73722bf4063f192422b71d1898bf889be1425eb1f9cc59e8334f75a985a8fb37070b9323c6ddfaa57d3ccc986e111ee7e09a73aa6a4d7ea1fe557e4020bb68fe8dbf9e8b04e87d37c8742aefd07f72cf124f861e9b707195016766ea9428d9a18612c09246eb1b3bb2f1ca8766772ec1f4e5f86713e1ed41eaf9e211765dd7907e898bc203527f21bb3a3de7a6849d6116d23d2c49fe5c292981525d3de6ed7bd59872a2d0bb039a5fb1c7990724691ce6a8d6c6c44218cb3b923a16513085a439d3f7bd25813305fefd2a041ed2fc65e2ee57cf1939dd98afa12bd566e73aaa09a09d69884197e53780c7c1441cd1ccaa0732cd9f620521d4428a32c557670dc3a2c6306f78acb897c113591d7e83c19a77ea2aed4719f767daf787232db540064f24ca4192ec107e42af2401548cd532d5006f79559679d8fed67ad6c68fd1300a1b6fa53cc06d7999fdbaa64b47881192f813da0a05298602b95676be6141df582cb910b2e420182b81a562df5e5a953643b075f0e0a71dab02d27971c40272dddb3f0aa1a1e8b86bdd4ccd6d3bbd6c2365bdd396a3430e4c6557658d42a378ffa969f9959417f8ff53495c916a30d50ef0947967e7bdb65b335db16d47a5803209b273fb355e484a95f386c864458e4d66fcede10847c47c0f7de39e5d78f7198ea0f03efffc34c21803d29eb47be6632b2f97ae9fa1a7135c00729cfe9e6c1abacdf4fd7e923d1a5bd2d670c5348bf4cfd51d0d183becb5abbdf4e5a5964db9e09208a31bb0cfa7d3e8f8db211fcd56c765d4990c76f3d760ded114ecf11a8bc28591bc61c87aff02ceb05a528e491d945a54ded7035afd3e1b9d872f2f60e4c32126c5eb59ad847afca36ad4108dbdd93b145b1231809b75dcc0c8f6b1af6954ed3e4c12e505ecbeeb28892046e9cbe880a97a48a21336ba9ad166de18649e0a525ebb62eae27c1122e631b1820bac54b37ad8e4d571537eee45cd4fd40ed755f8fe9065dbe1c7442c32f1226261f3a05c0ee3714c3986254fa488c6752cc9ca39a46796587252ba7fb543dd586b165dd2ec167866ba2360276415cc6c3cd9d99cc6bd7eb112b2d695d3a64ce4a5a8dfc0790e54b591cf921e0ae0ec39cd7bf6ab0bee89a6514c3af714a51b97a01fc89d6c27a0c95eff4d8c1f96805e4d44c3ecba874178aca35a1c0eacb3d1c8ef8ad20bfee7125016f50a0893335a3ab8a3ca792420d8833cb69d18399023ae8ca906fee0921133cb2b005c636fae244c28dcbe21b226839cd2c2c7e84b1dbf9ba594ab992c56787042178183bfda8873b58bf02c7fe31c382155a4154f208a80f313a87530427c9afcb82e708e5fd5c3fc60c580e4aebb83349e236d16cc8dd133fc6c112875decf9d5aa9b675be9ab14ff394eb8ae9e0228f34cc4c2c823800cac76cd98f510d72b68799c1d07755c032ace4a8cd15388a9392152f1ad217a439fd214adf749728cab7653f590a857547053b6535c1232fe43e84a24c4cbb1004163fe18350fa566c72926b69f8b844ff851f9d5f6e1e86e3a291324b5280e8bb9b0f4a3566a58ffe31a7e27db24cb3ceb507bda48ca9242466d15b92740792b30415c14036273a128d2c412ed7d156270d6a42afad418c38e3ab8aac21cdb29ce9f9f34e300de92bed85e3d7c9e480ab06ddc8cb30762363b1b64c12fc31acdba5126cb9f4b821accb4b670318d4e7cd29c8bca1b6c59e6749581c4163d205f1ddf58a1de4c45837aef3275b4540d00ffec19aadb0ae31a6232777c1e93d3271ed29c7d49091013f2103c13acfb6fde5fe3eef59beae9192d79aeb1f0cc1d6de6b15c29878ccc14599f3b11c1885b5d190b72720212542cfcf28f2b34f0e5789c04ff6b41dd5fccda2497389c05b8c656ec0eebb98c0a9bf72680b1910813916954ed0c1f02b3849a28b750e57970613d0c28266860f5ae489cea0daf1b8e0075278dd4c805ae83c433052143ed6a76f7f52aedb694fcad14dc36053731400de708498ae5ed3a137ecbe8725f688e4dab2f7a064b3206df866fca62d1521000e87c88f81dc33e7af07ac80ce1f2c42e82408239d041fd8dc3dc10eb2487e6209f0db3e4198ea10144c70eb87093f460a4b2a850edcac8fff6ab6e6ad9d7aab63542301781564df09f3a203cb454062c380d561149d44f7d45654ea5974b440ad1a36859fc24298f2b5c6760573ce2da66d7f3468d677a4fd891176607ea9d649cb9c37132ff1d2510b44beefe5471b2589ae7b5608b31bcd8b73173d1bc9b0cbe0baa29ccef11fc76cb35ac53a399fb33dd99276b495c0d6d6004949cc927495e22834772fced5a84278b64fe3143ff2229736356a8e38bbe13f893101a2a65a484b794cb2f99886252b6dca70658044b05dc33c8b1ae7bf4587537d6b68aa6b9bbafd8808ffece39d41fddf52bbe53d6f93c5d696ba52836b7e34796a53155c54fd2db3824027331332d2e90a75f34ec8dfcaae2deb1d9adb9aa8cf7f005b9efc687649cf78ec171f94799218221eeb54a82e2db12b8d581e532cea29ef01c60aa383d540f8bfe22add7e450c4eecb58b737cdfb10a365d9c3e3d43fb7d9c440824c2c0775df736bd844d8c476ad11fd5d8332ebdf5bd1dddc26687544a7fab6d72bfa5d2f74687501f63d26a04609cec2cfdb5387c761b7b76150ec4b4406ea303d6f0047302567b055db1d48a0fbf070818ed911ce5d8cddfe554dd797300515e95295c4fdf16a6ec9795278a52f8eef031428845a0c87d4633f40ed88c02f0e9a6dc7afc216a6c1bae16c373ceccec5bb35e6e852b7cd26fad66c97fffd8fa4b5863b0f67da423490d9148e4d7cd87c13b8bc459da6895a29e27adce4314e5ea3669cecd386674cb32af283c125d59c716751a42521e1f95a2a11c51fa293c5ccd5904ff0613c938b9cad217e30edab3f084e0cd170fd8af477da589998875f989abf3fa5b5ea9081f6ee6d6de54733e4645a8689da06955f917d9f385d52b7707fd3c4dac898cbfb025c71768b0cbbc8431e1935a824a30240a1a2e5381b52ba4a71e677e46fcd6286a034826b63cc536d41cdbe237e3b474cee6889700abadfc443ae654f971d1f4b61be77ce75ededa96caa0a903de5957c0ef90a4e497648b5f1238a513743981948183ffa6aa6fec047b9023a88295599a65d521afd0e5ce5234dcf3477c837b7fd49c038697fee7b79018e688890ed6b619c471c510a821b80351c3e803363ef2759e4cf9a0125a0ab8a976165a1c6bae4bfd39b6bf32421b0e25ab97a0c83876e51910926b30cf7845d036e46e5484edacedde17351a9bd5c5c6feb8ddc01487c38b12c351d094aad81bcd753e2dbefe9cf4c3492aa79b82cac451ddf2944faf6162b81eec8855fcdfea8e4b622e864b9cc0addef88fcd9c7d9c3969b7eb46587f3e7507a3be9ff8dddb1dd942dd576f3ccfe23b4729aead6ebd0a0e760b950d5d8cde101fe9bf29525be0918890ced3fd8105006f1bbb100eb5681eb59bb8588ccc57baa9a05008cdeb6b167c0f39144f728ab0f8cc7f8eee03c82d1f022ca49d8b7679d968df11b11831dac5af429ab312e7bf7cb268547d26aebbeae56e8c0038bee037a9d8ce9c50c950ddd767f1b8e0a09e6364020b4cac704dc19bfa79455295604cf9c9a9f023961b2d3e1593d17a59d03567d93ddce3d1453bbc6ce6dd679e7c71cf2e3e4d0f2c8c4c39c80b9d3e57e76b246a569e9b3654b1cd127f58f64eb75e9062f61381f136b3611bc36cbb3f668d2011d0120123debc24a78d187d0a835bf4246bd41a88bceb3a7d45c05f84b013f18c44c7d40e55b37978aacc6a76730240df0a1f4757516c2c692d58b9ac66880f162f30726a5c40322252c55cf708da3cff4b5576f1c6aebd6bc466583afc61df6bf9dc6acc44eac5110f93b320b75c1f11ba0757cc7f3b73f1b5a99994e429f8da2f3c3bb8c20bc8e15bc80b6801008d92d0b5385bdd9ad6a77b731c6ea058d20d49c05394363bb40fa1d2d451685fff0f29dfb73474356bd980534f0cd366f161e419410323e2fce88c349c617fd2e9e31ff742cad5938a145edab013dfeced7468a7926a1daa2a28757dc20c99f1e4cb4d8c69a3745dd7f48169de0838530cb141ebb65d85e9b23bf80ef3d7594566041d1faa42d2ccdbd672a1275e7f2205a52a662b31ef3a3b9f8e7880462035e44a1921631d6398ec56bce13a8b06d23ecc6c977fabdc141ccf934b25dda15bf5e9cc2252b7b91aafd1baca6612820c3e939300121fbeffdc48b0e723023f20018f9092c79645fa9cf416cd688953187b97483081021a65f0a761dd26586c1a9d982113503d9c911a2a3b6a80540c8f7c43c6995af760df004820ad9e54bab4308fd7f47b122f76cdd0b3026c0710e9c725c8aaee6444d371b767d8f96bad7550f33fe6b6b861241ea3f8557a2702afd2c9a8f5e9dd18dbcb71c1dfd611b6d6755ec34a8194e421930075b43918445a358c020aabc67f608413a932a2eb5970142efc906a3c3ae7b172d5bf376f687146094e49c2b4cb0a21f99861fe6d17bac3e06668df12a7fef07772c6e3a0e17daaadf843bd2c8e212bb019fe26fb741efb1f7b346ebcedcfd68af76bcc3141e7da068a78f9925b4e17c3a867db3af1253038b57387af6ee2ea29be3e6fb50c383a8f9f6a169a94f96c90be2f79901165f9c8afb6b84e9dd091d0419f3c90a2f762c581978289edbb90c3d5c5908f4749be5bc46e8f2f0d01742b1c0eb148989dd934eb71cc04a7fd3ac989baaead1558f44e9e1b6ad53efde776c81d7c616fa4145a3789617f6646b11e448f226e0e0c422d873dd9c5a63e825fb04bec6f9aa29aa1f06ed17e9b209a3e90a3aa4693ec1e852a566a64d54bdb527f0a8fc7ac01d2a8a0629a76d9035ca6f8a894cb4960efc1f1f58b573e9e38db8ed9d50e165a52dab2353aec82678ee3d6fe706091134c80788bbb0154be41776a5a6aa75c04a1b4b037216439d59771c625cbaafd7bab2d288987e7ba248ba29bdcaf27ffa935c324e8ec6261d61cdd40bf150ef0f282447c9f609ed1595dd98e01210473a095828adb0a6b9cd16582d11adb011e107852ff0dd38b3cc55ea8cb484ec15a93277f5c7de9e44d60280ef1d99c25d76dd3d52a855f314f00f48cde12b6f316f9922604622960e60adaee1d6bb6f1af635b47897672259a94c5f23100c7fe2b3c3bf33cf847660929e48cce51d9d9289945169651aaecb1e939756e93105729d3ab8340d0b2682945db878f1c7350b55847eecbb777daf786c582d13a1ea275685732ca5bf8ebc8f7264ada3bf20ce858ca3cb41847850de5f0a713764144a062c5ae242a89756ab66b633a30f44233f3526cc9e4b87f579f515eafc836d22d4b7d3208acf27970fbf14d198bf8b51ab0570b87ad493e571b5e1600b05dcf9e9af48ac253b27c8e408e8512ad5dca2f386e9567f258269ed28d69b0bf248156d9c204fbcf4803151c69979025b1e5c3c40f97053483ec915d45d62a5529bbf8704c3d1f703181a7f838f12c8583bc8b1ba09cc9e45ad4d1243dc7f812ebc3f5f7199fa7d6fd9cb95c632e324d51a2e777c7f340922b93d0cfdbdb8468d93dd1e6a0a92f740aa8bbc18eab6bcd9a3d6b90ec56d3be949e02a8866d69c7808e1ec787e600c7f72a41c001f513b6cbe079df94142dda2447f956e41a12df60392f0215d2d65331b5cdc06397d4796530b4bc45d7a975394627537b4e09e0f6c3a53f00fc1a9648cfc25b2a00288604a28ecf780dc100620d1f169295d9acb2b1f3c6afce4811aadcb1e8dbca8a8d18ba7a81a1132f1c2d014318e07dec7332889d4198c5e955e6613f01ef6374cf2ffd0a6b67a42e1908c725e2db62ccd4e4cc2438428f68c379f1ac2edb4761ec98cea0f5222d589773c35a0cf9e0f55257d11b03336760fae402abd835f2ec6611b3f0a7771b2917fc8a31efb274e07bea4bd43af20a4c5ca318908676027ecbf9515c0accfa3a0b018050139b9b38a23aa0f267f4c4857935a7fcd211d2937ede0b55979a46e5e1315a27011bc04875c754f7e2b242c6c11a456313a00fc4ff2e667fc6658dc75afa5c4940c980aa56fefc5763c0e17ad4df5545e397067ddd68d72d1fc53b58a8cb1b195b1b58d8d66ffb8333974d0c14e37c37ca6d53489a1bf2001c2fec148b322b29a897b55e6488c72e0aabd20521c50e9b20a9629fa5c63b7b441bfc7542bde0fcb1b5329591e8039a31751cf05c02a0f29ec1d0fd90f618011ffff9159fccf1051efa3d28eefc256a40998a58441ab7c09d4d1adcdc0a1c3418627e5fd2fdcfd548dd4192cc33a110c08fa6a77a7bd7a794a1acd7f790ac86c5e9d8ce8cbec1dfb7e4fc4dca3d0b1039adfe585fb474fa1d76035964186d6b80dcb4ec3d8e9b96f497b9b45956c80b049afdf57443044aa020baebb21fd36501d17f2365fba19d876bf6810a4f6c43c9cd220958a62a1bc548300961f55315a16eb42e86647855d8d85f1e4d556c6cf1bb070e6d5c4aefe5431f3ce46770dff7eae0482f87845261734ff6a3274ce8f4fb197f22e3eb3998a7b4f0c9b4b1266dfc801ab1a35a05c9c335a49c23823a7bf3e5c629cb8f7b57ecadbf728b98ab8c0a1010cd666e027a2ecca2a8d8b0f3df4bd88de281ac378b9876038f4aabb1caaa1cc4d33f34baeb3c617b59c53d87a7498e30dd94c5f0dc218a6760704eebb243029153ac42a1a56290891f67ac785c9353598b737139a21e7755a6ab16cbcb6b6e10cf1c1c492147d6767a3e624877afe4626cac127485f5a958c24977a48e89bbcdb62d3633f732bfadeac8137a71059de601bd3e23e03dbcdb33da063874347822a95e04d49fd998a9f1831470e12b0c4eeb1568da595d1e777beb36da04e22fba090d1cbd73a30de51efe09ee3086ac177943070a49da4a982aeb7e2bc9195efe65d8f2511b158c09d3a75824f7bef9da3cd4bd364a4bbdc7915960802950625a40401a320ea7af62b00d83c7af2a7201c638dfe0c31804807fb37289be1de66818b0e8d2c6dfc49a249f1148bf5fa11875ee038c5cd5ab4d2698289aefe867a25fca02a5cc34881ab1da851aa0c503a8fc72bcbb7ffb1e982665f7564726429395e9ec3d973c466ed85e53d01c01161daa556fd094feeb0c0fbb632e5c7e23b65baefa0cb05dabf1188901eb598a54f10004817e44577cf342f6f095884677750177d095901f156be2f913df11d74ccdae0eb606f6ab50e850a7242e5325aa6a37d2f46abf070f19d81d0e2dbd5e7a0e04e2622d34510375b94a725b658259005f5ed9eea5ac159558635559b4a6492c951e1a3375ff11060d6f7faf07e2ffd1f859f5b3ec54b568f46a9dd5a04546b3df2042dc43ebe633ad74808be2de0b599382dc3cebb76b0f3ca12c3408a20f3e6387806a16ce1f6919f849846eba07f1a13801fc3c3aa2e28195a5074632ef2692b2376f871c0910e3791f2b043d7254a207eb644664f99d73b67c91f1ae83071d3eec7eed3c5fe58a6595e25baed6dd26610d27a2acdb9a73923796834b574a439c13fad1c560418f4c224cdda4a205aed1fb98d9a8d56411a74a7783bfc88aa6485285dd3dd6af62ab68bcf2a570689be91b4a43bf5384ce6449a76b727322c5c20c82581c1f9994f1cdc53327ae608e0500be7976e2671a57a9b8b2e9d3bd22a7c682ead6a79aa6bdb60837b1c897e5b42067f3561ea5860fef2df2ac66b43d5804fa0df40b2d087dd5c858ca6b8943851ed949d344aa81fb8e799320a89286513c7a2a0ab6bb4a9091b81ed7e39f27e64074d58510f0ae890c2e2cfd15f28e31f165c76136efedc47e4a0270ed43f35629dd3ed1e0125c56ecae18783b3ec568b85f7ece08155257ffe09c1bd53246535f74ee405e7a2bd3a48bfe5884e1bc63f5c9b877a6d618e99b2e643f27c4817c45de5c66c8a28d8dc84a36e48f85e3b22e36fd149f9cb1e7e485c3617195453f717c019bdb3601f3cc6b6ac2c785dbe1e629c51b6ef3bdd1408952193f0ef1fb66c08685f28f19942561f269a98bf561a20498f271558d44439b98ccecac285e9a6e538bab2854fd77b0764fb1e2d0cff669f140535cb0af725efff306e748c780b7e133618c147e17f96efb8d34ee7b37cc667b9153b871312600321a6ae3c4be4fc803b244f8b49a8f34e377fcbef1faae510a97e51548149341f0938189e4b788608319cd723f83f4709e2ea4b2c2b3825983f37b5782a1292dc50ed59b95e11453180490015d58bb9a920db77a7c06dad86e20a0efbf5b4a2c15e8d1a966df5618690f3736bc7d672b5581cf767c492a662f9bd05e6c9798e569be0023b616d018cca61d82db8669ab5f473727421ef37b5ee19414090a77b2370adbab220c14dcd945dd6618f8558315ba990d7bdcc890528e66b11318793b143bee90394396ed057ad15113479d4b2f586fa978271c3dd0fec2a629461fe877dd93834a31d8c1d7c1a3e448e8a37bf2ad158bc56250ec20bf2273aa17de42d87c74f4f37b4ce3d696cf9038702a9e16254514f2332923e84c209a140226c2cc750d55b37475db7886bed550627519f05d58e56d0de76d8e222799f599abe0ba73b73618b1e611340dfc342f44358817b1db7dc4572e3198ddb1f3dd42b03528e52d0681b8101daf88f22d2379ce50f2cf473e66a350087eeb5a282991e638ae45b9578cfb865931a44b30eb87a21d281216a7e2771f6ac6b77ab7790bb053a101f69998f0ab6c60dc61efd5f273451e06e45ab646cec106debe122a24912ea7c66f5d443c11cfb39dd0aa715ea4514b2a1ac7609700b395dd7ed8db512b1228ff8e030d323bebb06511f15c00a7ca4608346e5fec37ab1a10476c0b25c0b6bb19cd3b62779c58ddce9064e49d0028850dcbc032bad6200a33a25c18270484c4a1c766d270a58fa236e675a9984ff48ec74b5d57878ebacc940a29a0b968f4ec23e705dbc20a08943a9e942976e9a6d9b12da65ce6a3c3f7de09453371508f782cb6a8ecc01c5c2a45f350d2ad5fc7ec480d3ba13cd7e4126e0a3f2ed37dcd2f08a0b0940f6ee2dae5bf3c33c034d03d18447dc31e7d8382b097881154233647545fcd501474353ca64ca6db43eb48529e7dfd40e0173aef623bb07967f34377ac2e4faf63cedbb5e41621279cf598b347042a99462772aeef6148d5a3608d265ca6c81061d14edd4bb64ba75fe659d5ae91863a9540b357b49291a48afd6bd9f253c711b31df72929a786d8f12004303180b0b371d575605e6a5b64831c781919bfbd21cc177d102a64534af55510697c7c1a725068415f4932e69420503a5a2f451acf01504928aa67416bd0d816d7ebce2425b57bafab1196c3c1e74b1b139f7e8088175ad3e9464ac1ca283b70120c017e1c158208ea2400936c4c4fa2dc06e65edb6299a5c87a6964d44ff1c48e69a088e3f51df5830cfaa601d3d05a29e1f73647778f474cb35dab18cc8d8cc36145c50bd891ee0c390f9c00f29fb983bd2b874acace30ec8d91f506228121579f4bb30234906afc4499e6183ce0395ff51dc253d0b8eb3e6590d33af65f3a91803cf3459d9bf4c99c34148627646235263887f13de1eea8d7f4d6159c8a21279093d664781703facc6897f9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0dfde91b10455e175029ff8b3016d862bf68200c812619ce73ec385c492886a9fa8946fe7eb5d84ad63bddb94ec89c87ff9da5179740b33f5d72d7e66f62d3d24e20c4bb9d5405a426304f6b1ea3259eaad06f90a2be65ac9451ae0a0c79c94012a9ad7bf58bacce47f29dc929103a4ec9e9c7a02807f5bd216f05eea7d5309c4e0c47650cc0976f41670ffcf675a53f62cff56fb3832b190bb624bac8ded08d0831dba26c5c8c301d79ed2c0d3b2c1a806c4124ca9ad1695a0d5297f7fc71bc4a00b0599dc854b9e20f7e80f7cb988728a7f2e7f6b4ad54165bd9adbd97dad01b6110b3256bb7b198100b213b8bb02d646852e2bd398983488aff23a117d472843c41d88eac7cc04866dc3761e53eb53b97a73aaa912b9df8810d212ce4274a8b798cef60f56d8ff9f839e9f24008c6b61d3a1a42245b4b2c284ad1e4669bff3b00392021ad50c6b3ae6a5f7504d809dbe053a80f5be335ee6700595305f73a99b990955b3bee0d7e70b6c272987426b4c93a0c989c8a02452675e1012a05a2af8cd97395090f0a6326673a7166a4c449c0366f6550175b3a4df392753b8be084625be5587e7a6869b8c3eefbd5328ba0ae90f9ffe053e7d3c4c09337a2529b20215f112b02f9cd990e1307974de425c37991d1edb2064f1a73240dcfc5227c8cb32d1f96fd52e2f9119eacce368437ba0b7e20b730f73a17436928c60ec32bcffe0d3821d74e4e94a7ae0627f9d86c8b4aa20de6c1f051d11ad50ba2e4fc4ff1ec478455f9b5b96fb9893d2afca969402044c101ccb73c50e2b2dfeeae9690fb64222ab9c94fcd943078785fa8bed9e174ab6390bb16a29c8146cb2fd65a98f44de752d6b0e42f0af2c3df4f65e162742d201c1bf5d22bbee1daf8efc30d0ce491df2632173b8ad9e9b29b819cd8ac0335eb142be2b680bde8b58eb5dd7a97d3174fcb57641d840afb8dd47db36c609573547247ea8949a18021b40a8c68dfcac7826ccd0152c5a3129bb1cc14652633cfa35ff875122d7290649275389e8cd089bf2f1a54a2f6af15255bf5258ba5e4311f02c5eb1ad539ffc7517e49e547ee454d3cc8c7d5bf33ec73fa8050a686b081118436b469e9feb79219ad2705b82be375bc5fc0b2c7397fcdb5f6fc7d709fa7c10cd338c710c79f0d118b3ac6868f4b7fd765a902b7c8b67bb4de90d90cba8c77c325e0fcf29e9f80629febf0592266b3b464e98d36e979c420c076820208167bd0b312cf388a9f323371a04adbed1a587ce3e81beda3b0f221241540f9912e145c05370a8a94876cad8ac29db2f750b8566b0e7484fe434bde93d5db9a5ebd8c8fa4b8738fc23f76f871bab18648f1196b83c35fa2021a1880951e1a8c76a9299017fbd3f01eb0983baeef4e00e9e3c4e3b36fa6efb81da02eb058c677e2dc3488e66af155b0c01a9fcac83cc7e11001e5837a0f1527352d116eeba705a83cf49e9a6c97647f58434b4caf4284385e18997c4c63b957480551564085dcd2b3b3fbba688bc893615c67bc0b2adff7b75028254d6986513f7115f0bd28a46728b7c6cec89627f4c1ad1da343ba7f2502f2ba06e6eb211c03b985c5cb580670824a285ff3802aab627e9388c1bb0dca274676a87daf35c07b25ca5cd3dca9f4abb249f4511178be2a17f1f3ecf430ef0d9485927c7f68468efd0c3d3b7d37fb8a3750154a11ba3803bf606c2c2f919a9e240f4c492162b5268872f16c03558e0723664a4647971ed4c0087ce932d8d6c13d3b5f4e5dcc152a0f25ffcf36adb30abcb21cad7cb87a856010aa8bc6aca85e293152f1fd4e6f81da4defcbdde7747b4c5d12e778c453fde8a07f7ab3b51a5e2e1aad9cc78fca1531104ac7c2abd942198eb55c0364b226a0e2821fc19c33a7951ef9b685382ecd5c99972dab9fe9486c6e8b75e5409ee7cffc3be0b809fb22a664bda7fdf0a391a20e5e64616eac738c251e98e5ff1f28be1632265fa37bb7a81581d6f86032494d9828d4acbe2aacc3daf62ecd493dd1b659f05a7f13ba4fe558cead3d30e2dda35e7be553386cdc57b599a063c801cbfdecfce2e000c0d0a3562a939607bc36ed89e2ff208379e991df9154702172fcdbf8de284a1396242b3620f0c98dc63a7240e28ad94759bdb98066b4bbff994d9aa51f9285f44331c521352d9f6b0ad27cac05ee472e153e17bf9e270e087ca6811a468a584acfe1b83ff3b0e04990e751f4d29332deb456f2c5c3142fe425f0d780db778dbe431a4eb7e1e254ce5e5f3a42d1e262ff3eec94ba5ce5e73c9c11e5fe66c1eaf7a6c6cdb2872bc2a37e247fbb8b419e3abce743c5f201feb8e7f3f3bd70cf389e00cc7e576ef4f470f81c68898719af373531480e0cd03cff107c48e5800b3e5a5a14a9cf1da3b0dcd2313dd44dd35e9db1b1ebbe32ba69ba1f962e9d1fdcc6d4bb8696411ca2bf8f164a45c366d57114384f73fded274c901a28eb0dd4aa96b32b0a8cd6f457e932cc4ec97f5989b046d3f32af2c37fae2a0b1ac85e27de78a0b288d5b62c2cf56dfa271130ae56e5d8898556c63e2a572ff9540db8a0de314359e8b7084c87ade7aabc65fceea3d67563ed40a0e6900f48edbd0242c8138c4327127bf5ddd2d749e3f50d0ea0da4cc3671330a9421a9e1dee3fef2526e5504925ee68a466743c3aaeba508c4c620f6a9fe06d09da2ecb5504c11b8843bd44fc5965c83d6fd5a46312f3789f7ba3e713133a41e736365f99372ccf94a5013205cd5de1ea805dd76b1788cb6eb3059c66ca0bf26bdf98239090665371d61be00b89bffdd122749cfcc56192227ff0f50acc39c9bf5cbedce31658ef465e7116b79374621adc82bcbb256714e264ccbca821ad0e08350e5539d2eaeb3bc36d9eb1f56358ee37ef00523e809bd7ec01b7e7d2500971f3f2553bca058e7a8f753fa0b7732975ba232d6918956d289ef7af70e509021f1dd1a391088f212849f3c02cdf8e1bd6ed870ea7bc8fd3fe02166bea65bf403d3b1208e29472ec707a4eeafe779b783a58816ab531541581a1c7b5fe575c0cf1d51f4cd674943778a9ee85be868186c8847a083a7fce7bd802705354c5c7ae63745f3716b2df4a685e3b5914152a8ea9f8dbb1dfafe34d2cae7b0e93b6e86ebd9f3a904a56396c69229d2da62b7dd7043c0a2d4cc87dd2a42b4eae6333a79324df18211a668ce7a37b7cca1fd062ab02d9714428d28353690353fb6e43ec67c2bb61b02cecbf013df440f9250cc150cb5676be1cd6dd18a2bdf0bd59ee9f30bfbb7d062befba035f12518060e8820f863b8362cfda736978e28fbbcf3ca8374367d5ebbd786535335f17277a6b8e305b11fff9eae92d8e13f997be7636efc47548cf278a8ea8dede62fbb8189ecbfb735e524b1408f3ce9a8a708ef6e35d1f7de5d4813b396b478ba363f9e58722b8f6ade320f641ad73361e81f3f84cd88f84c64dc2788196b960abb8b486307bae0c831c40379b43c30e3c34b52477495db274a0b2e86f117a850163afa6a1bf26db6a6473801f9d074b6cf09b216e99d22e763719340ac4d2232dcab3ebe1d4688ee9238079d3a38614361e6e9839ae34215478bf045b970b62b85787fdf7a4bc4b89c230c9c13e8a922324f630de72cbb297cd6cfe68736c692971f585ee166a3ad0a74b19f15459ecba6bfb9267cce10ac69de7cd3b3e3c61087fc32bcb11b985483b991069ce3c4b835b4565dba3bc50694ff917dce2c471deebba96987ff35179e6e15733957bd7075c9b5243e1a5ad094d6a8551454cc2311ca26f5d475ec9ea11ed9557905eb7cdd7c701a66de4492dfe02bea4511b7c8c7a435d2051421223228373dba62d145e328f190c2fc14b5dca886bddec7bc6746d6409eb85e957ac836c99c9c12f1540d7bc437e0f84db2119c6330200b2c8735dcf1ac5cb9abe0e9a70ae28c8ade3fd2c162602f57423025382bf1d7409ab10b24a39b70b9c6fd0d1565b01a2efa51d9b646ba3c9da4887e085b63530c897d4d49e0ec72d38937a8fe8475b393d84268b70b96673fe75392997c1531c37b3452c9340ff19b652943bec1a3e74dfa8a26400b955db28d09e947f887e209e28ed20f07867b75ed3a73f2b7eb33b1c38188ddd1277eaa081408a07b2be24441d54197f5d06f0773f3a026d19c0763e5d1170cf6dd486adb1a774f5e81b1072bb00800698e4aa4bbdd6ec7993700d8b3e14749d727598998859b812d19ecc702a7bbb4ed009ce207602651995c8e94c04a90111c86109aa2de0c026164e4086914d341fae7e453f9246d513c7d2f0c8d6587ff118a0bf29c9c4f2f95e3455fc18fc5140da4af5f0382aa430d0950b49ddaa5606093ba45e838bb8525256f119e9127c7bfb75c87b90373a38591923154026ef1844399f9084bf79fb99befd262917 +MD = e0ab94d79b2d8af06ca70d2f10a1f72f3c07d33b262026a716b549cbf94b77b59b2eac388347f5ae4842b8983cf3c4bc + +Len = 82312 +Msg = 8af735d80e7fa2c7dc81934b891063a46215e6a600959e171c323259a4f51b480d4aa166ec4c0636c04301e5126b6e2fc1f843819756c65b1fb5fdf9bbc56632f1bee9a006a40b01cec964ddc293536a537ff0ac7e6642e0a100b31b8da6c02fdc5cf5ce850e19f2ad1aa67bc00f7c1ac1b4d56fde4d7c6e48193a07411f9106772bad38901398cf063ead0735674f0ab29fdb11df91dacdbc0a7c0500b942806933fa255039f061803e63c948243601cf47e8dca8bcc6c4a6db5f5df2fa39655a7cc2dfec0b8970c421ae0922cd98c6c0b4e5166256a71dae92cd563e6cdf7df40fefac8d0eccc479ef780eeaeadc222ceebb0834e5e59e7b39ad390d979c8fdcf367d55bcc1f2448b1a821c9046cddbbfe50fa47f3e810b6d7e64e8602d965bd3014a17dcceb59d96e268ae7a2afbf16eb8e34c207173a067562ddd235fcc53dcfdc5a1c96992cd32eda916b4c0d90e5bd5cfdceaadce6141a082e18b86f7804d7a9465fb38f62dff9ac7e7e8aee17cf7ca19f93629eda88cec08981149846bb5062af6faa37c6a4d8849847e5ba1d7d31476038bac6df0999723535d0e1f60a42efdb7303f81fcbd24a28efe4d96a97e43589e637babd3f84067b5b74b15298b6381394473934fbf0e6769d10b4c6c49b5361c463e33cd39665a31b886f200eb3249efafd64cedd3940ca7aefb1f9ac608932fbc5a9246dd875f59e95852913429dc6ccade0b518b5406cae0b39caf83abf42b2e5753cb4501fb80c235a35506a8bd133df15b1556ccfa360ecb5025032dddb124cad4d51084c368db8560c6d33d408561c6b8a3c67d3b9b8188b695b4ecb434381bb1feb08e2b547dee17511a561b35eeb4a0774ad35f4df1925c7c29871c26c0c057a2b56cb7e651c6339e4c91a1a72d51af2a646de9dfd77e9e42c18b8a2b576f526b9fcedd90dfa442090a6e784bb614311793bb5fb39b8418842d586294746f1ea3c02320d6801ecf2ba44b13b60172d2d9693a158bc66947aacd7c5a14a0463905d6e80649db8c4770cac5e858a7f400da4568cfaae08498311265b50e539b2dec34ac124d4a832772ee5d8ab6122e57b4c8c5d2a3627ca6b1acb327f416c469d169edc9637579fb9c8f705f40c87823d363efc307c4a7efa6ecd3075862587940070b902eb4f740681ebcfaab436811c09745054a9f9cdf7b6343f7cdbecdd8d27ca40b01b18172601c81d1380b848e06e3443dee5bd1f2c990846da684ab04e33b359e7ed38f2e1f196d679999441510c88bc15571cdc5fc0522cd856c668a1cd34ecf189396bfff95ee4222652d2368c77a44328a06c59d21adbbecde96d4c9d53e11418a3ec47c0272e57507b65599509e1ae7fd138e278663ad4f43927174a1a2099c2fcdc82eff99c5f3f966180d0475c9e8536a6c25a403161f440ffcc7d9191c8aecea3782ddc16841a2b2e74e438fd5d62571fc01fafa8aff5865b31ddbf1de805a0a9f123d9840c0ac234fd7ae5ad323dbc0ca56fbc87041e92a41013acaa43eefb55b579f7ce4036e4dae23a5452643eeed339f46db6a997ec432fc660211f9266118bd63fdd68c7188aedcb8fd53c8f74de4453cc1ee6891c9e569fe46bc51969453de2b797cce4e7ace4d69e1f0255d6938e37e1a5021caa1f4f453f6e7daa8c57914669e5b3b6d8a690028717febb9d5cde46b33447771f2de16279148e6d58b050aa5db0676473e1b9f854a477e650a0fe284ab4fbc3032fd39b9b44428b54b842b59ade2e1740c527600db0b70177c6b486ae0b6727dc8fee9aabe6df2c09d72e10285851f7c8bba1e1b82204329a38c908e823d3cc34b4fa07b4e1ae77fd76dd630f07172b9229f1235fe2a7a1425d0555fee287d99206bf89bb1ff795bafb185557d2cadc2678ddcf09d7e878f69d2f16fb32ca777fed04c9ca8702aec8d0a58e09a0b0310d112e8dbfeb0edc3f6011f2e4fae6ce82d1936fe80116e9ad5b4cb72d5b1353ce5aab04880563f7a40e7192c3222105231a32221e757c6ef306d778c9ea3969f1bd1edd6c0d2df1ad0f189d9f91c445ea30aa8a73cb7d6621380c78e7356b9cffa14dbf73ecb5f2e2cccebc813116b5607cc250efeb5ff9c058b5608e24f0147f6e0253a6884321ccab5a9770e9617e0c64441c9abe6a4e57d098d7c79f12f8f98b03410cca1ea6f21586d574a1ebc77651f6957d2ae88e6e077e86998e1770f5621830ad9a90aadc73181f9541feb927aca2649f181fe08e652e140cd948a6fc5a0bc892e1df55132bd91cdcb2e07ca6db0e310871586d3d52722a2868edbf95dba3b2c28554ce1ea7917550dad9377b4803a3c11bdb5c06361070f6234ee6494da7964570373e854d08d1faa233122f594862d100f0d66e79d18d7df3b2419f19e01b2488d0ccd18705d9e0f234364978a7174007df03ff837d2ac5be63f81fa516ea66b766a189bc52350cb326cb510ce66a1717ef0a40bddceed76ea734515a10ab13e443e43553b58c86cb4ff8d07dce025d1a6a14b98db582bae9c71dbea0980534f7adbe5eb6f7865424f8e64d3227881af79648f35cd28d76190adaede074a0d0d7ed578b4ce0cc80a568bd5095b9a35696bccf7593f9b814e4ba9466806d25ef6e4bd6447d37061235e9a4610d4bfc1adf23d0c798f3ab9b341d72b2ea4b3c99a30e6311b1c6dc10bec1c30902a73a6dba157472d5880d13f07d9d5884d68cd75e80287b5053f484273943cfdc9306580fd8e3fdb07f878500203ce0b8d6beb087e74a09c2a7f97558994c3c04d808e2c6b544f093a2c0f84c4f78d3ed12792d078cf444708a91ec382905d7e03ee713c7f4bfd4e5b76174bb5179b88a536655c4b74cb2c0c364f0b1319728d98c4cf3fadd7e300e87110137706617f9612d30a7b07add1b1c1b89aaf82ab7588cde8b47b8a68c76da79a8a8f26779a10475c698bea74dea5b5ebf0cc7e40dc30446e297cc627085784070f420a664ea04e620802afb889349d49bbde6f0b183bd2b00d062d865a3280f62044248633c282945453d9d1880ae2624a69d742b017f36eedcc230f238b38e84c0a078fbff39e63dd13cb6851752fc63af349904a4110fb3a13493a0ace264e010815cb69b00c4110a726d55c2fcfc5ec1f286c3d33d5d57090029f6677b3a7edd2f1c1b79426cc8da26eb12e876d11fc22064f0f8c9c8e3fb6d197cd146b7640df0e1b2ffca866a289f5743f08621ae9c065a137a7efa5e5ec48cba520d849c8a0dd304965fb900db26da7144f5951135ec91b5c12498d01c4ea9395396482e3ace1998a6c8ad90dd039c234b8ad452771a305d35834d421c5099803aaaac20077adcf698ce0b25157ec4e16d0f877948d760943e62beba461583177111587cd85b43a7d2397bc46bdf7b34124a558c926d49e1448b964382e490875e93f34a94b77732bed1a477c76de8a2a205e7953c2212ccafc47be2b804e7576bf8259025d79f1fc35d2f45117134b58506e49b2e3fe4dde7d616a1d0beb20fff0798587203e4f748a7c337313386f52416f5a7500be69d54890e87b25a16388189f1a963826e41b775095310fb07e9e5fcc2c08ad041935ea40b9c47203d595b47db8ce09e64857790a9a39411de193182f2eec4d41c486ef1b7e975574ffaf406fc07d19dee4cf0c04a2fa6bc350d716e2d39e661a042ea36b775254973a3b491fc251ec8361c8acc94fd2f46314e0b891daad8bdf40b3c3cb649403cd2dd03af84ebb0676180ad7e311815f5fc63699b68488230422bcacb5a6bac79942f49273c636dc29afdc19cc6854212bed4f16cb61ccc04af28feab4be55348e022eec2cb943e20071d2eeffe4d9ce49e2a0dc3b02c9f7f658c3fa332bf1bf0de3d5a48da860bcbd0675c3f7e790db5c5ec2469fd82e1eb8cdef47cb7ffeebbb808f6811042bd091e63b454f1117ccb5ba29d2746267c8e4ba787fe81afb3ef930b283416cf3a23199a9cf5fd1bd07087d4e2c3331e56b1cb6e5ff139d652d59acf592b93356c61e8937dec4aa1f3e9710b5a056b74599b34bbe41d867db2b5f2dbf22c307d3a0ab4d6c0ff81aacc8142ce6db797306c96ad177e4a11abbdd7c6b7590095ae8b68a4eccbf74a3f437f22a6839f5e5876e85e08953f82685a823cecf86f69d049c1e15c089b4c67402a381a048769f661da701891c580bc71007c01364054ec5b5e92aeddb5302aabccadb25835601114b40bcfdaa4b3b0eb97af7e7a3d0008a987e06bb40b9d906caba8f6e871e9b277be56b4d8a4c44bae90fdec2e2c122f1b83f31af4673ca26c0f526f1a05afe072407a4ff48c5b96a3338dd1b9d63566999cf243058fb5679142d3a457b758a3ed819f2894261f97b2c788b883030fb70b18056f4f4bafe7c48b521d08518d03d0caebc82238b958c4961526f47a4829594056243a65d32bee31f7639399f509036389b6048bd0e1bfe65da5740589c46b5c0aed2ea3c83af57decfd625839bc6e949f7aa4e70d388d0088bc6b6a7a9129b44c4f93cf361dc3b75673db550025faa5569d68141867142cbdf44172c2977c8f42d4d1afc7da3e27604e685af34a8dddd5a6bad998763eb124d35ee509df4a371403500c217b50142f15702dba351085451d01ff366bf1d9e6e32a8bf96f7df2eb6478adec07e0c8ee505b97fcee6ce5cd8aa44f995017ea2bac0e2c3851fb09ef80b25cd187d589c3889060617b874596760d8e692c972d1ab5708f6e8daec447de64df770219a0d643795093e64bedc769a387500859eadc86b97d44297c6a1c07f8ff88809355500c7d2f37379f2489e9ce01f4eb456998a752be612f4f459581d484a90a2bef596804c4f8746a340480f6c3fddd43f177a1a11a6fa60e9bdbd6623684a6c9b818e176d87ba796635fb5839614e73bcba1fa10591397a1b5158d08ddc15f55f6b6fe3c336bd70afac310dd42e10f15403d3d0642f709efdb6c2f3040083ab7f25b47bc9d6e0dae40571a6d8f0b5fb99674efeb9ec304e25408434128ff41d8f42d455fde2c506a7f445a99453bdf0f156d9a26351f91616a1051a35d517b9e43577f8dbd4fa826fdb159ca2b1896000751c521cfb1b65563ace2bda7a4f0f229ff7eaf047c1dca04c79d690a4b8c72b247f94334247da488067df9cea1a9bdec4ec82b795db83edaadb0dcaa7bc94e6078bdf42b1eee372143aabe99efade5d56be76be59a806ac78c1a8dd351567d570b999c7e4710f6768ef175d13604542c7e63d50fdb7e37158c61e24d743ae6df2915a3f349ebc9ce0ddb843e20b7f039b1c2d3c1c7b88b0ad40f45df8e7d7042faba7253c9879973e8ef54a853cda3432a8eccc1063850f08dab1d53442805c6a50f6f6572ed4cab48b54dd7774e5394114e28d841066c0ddebed26f40418cb5539d03f3e924ccbf55b6d7933543ea728f8b4ece2028c9aaf0cfccfc2ad3ec552bea96c3d934fff736795ba335b34f26cccca86b4aa84d0eeb6672c1a9e30fef5680919fe826cf9a14873fd01ea66af8ef999d77688de283f60c2e88667bdccafbe75a4dbe0123f21666ede29824232f207a95b921e06f4f3947671709a23b3043a55b9504cde24565a0cba14d36621589f8f8fa1ea8dbbbdda28637396114675644fb416292f6dc28bd43d4e2e30ff04f9a2f0206ed100f0aa2f1b09ebf4fb85b4ca1177f5946ff8843bc45023412099de9a09982b8f593e7d1114ae1c4d56b7a43b7e10429baf5adbc9eba532f53a8996cb4873a10728f9db64ecdaa788cc8ddb3a465980b3a08beaf50fc7ddebb156babd393d5fd6f4a53d91100a0e45d17a923d06ce406ae7ee3a53cd3294930973c2e6687fc87d40d32c3c0ac6c0f309f091ca3bd9022fea04625c906ff779b77347ed32956b7892062fbc599b601eea923258522436713b60cb75f5fa670e5fe7a2284428c9477cb0a09868f25c37d7d1fc6de61a5ded30860e366a4c73cf47137a2df994526845653766d56615cc763268716435f8e27dd6832469e09e4b21b92874ef82a76990864c9e0b513d4b3a360f195901980f77f4c2b6815156f0643b4573825e28b9f2a668a4976e3342884f48bc3107aba2c34355732d192e5d730c49d05e9166e7c0480420f5f7883104f0add098a2b46ac454b3c0d99294e0f2bebde1c0c6e251adedb789a397bc9524dcc70cdc8d42c61fab564623682b3957c51a4e75691ba5f009eb452cb930ed6c360cb78901c72329a9c579771441b516b1d76cd8f283435b1f27e9fdf695b84fcee7773abab22066f279b1610178f2b4078dd367eda9c833bff5fe93ba4b7443f9ffa25e12a43c7bf7fba45dba5160b4289608aec50f931e4ecde98a8ed2bfed39adef5f941de5cd3cb3c8e9c93b8d9ba798732a1325326f5e28414eeecbe9a0108aa4dbd97faadf334a758198c7d7df06fda946527b34cb508d7c5d54878001111e794f3d59fa266e2850a1b366edf2c94e21900d7208a6e87611425aa61184bdc1c3164a2d52376fc5d0e6a3992e8b60f262939eba2c86686aa67a5b982cbf692d18ed8a7a51869aab8cbce3ef27ed5092e2dd90b41eee72e38271e1ee2ff5c5a8f12178c166988161da90fed948ad3aa838ba9de06e537a695bd5980899dc35ddc25e8f831fe1b651410f4ed82f5f619acad6e0df8939e17498f1b88808e74c3432f1493fdbf6ac2256847e7c4a5877f31f9f33f1fe166a9da072fdeceb8b7b3499864068295bc53d919ce826084cd039bd9ff1d84b7d583d28c5c297b05d45578c99df9c8665b40b78b5267607912ce71b4594f2efe35ceb9856911905c12d257288a13d81c8db248279a3dcb6b9c073bf2ca7c259cccb1155c1f4014a4ba526e1ef2fdb99d9bd1125370adaa44b5d782fa1a4c727be3557078465b0fc714fc46149c5f73d3cdc49f789a5f04eba366cc3611691c81c1e25141a60d8aac68f9667051df0fa46ab477ffe1fae148aedba40d76782b98b07f411f06fb8b3bfe71569bd92894fabcc8204e0d274a43205f8fe71324a8a7f654c77a2fd01d5c1d8b9ffefce00abc092924cfe68d45c43f19172cae129a96dc8a6bbaea3245f70f6fc80082b079d29afe0be933d5ddb35532c34510ed094daa49b547fdca0df41a465908323fea23b7705b03bea617f8a8d11b98015bfeb3a8b82e8a303f7c3b8738db80d5366499a7a79e874da9fd7b801fa88e49047fb21e005de94d399ab59e6cd5cf333cf01bb4ca5bdca98596252744f190af9297315348cacd1a627048a60bcf5d14fa959224011b6a9ae3eadce4677f04fcaa4b1990b9fe9f615f05dde93c519240175be440766599e86b0289feb0d853f8f6a5501d7b80c5e8db625dad28e4d67e3c4afa504ec1d15ac4e515be4886e66b1eacbf42b5d8a9787c8dae3bf60f9198116bbc9cb4b77ab9979b666c5711241dca684e47908fb1d8ea90badbcf5b2b543dc5126bced0fccd8b2d665004ff74d6a1e2e673332c47d2ce7367d4db4f0c7b6960e507c493bf5e49a2fbb178da405d4b216d0fc637d22cd03c9f7041739cd53c451bb6bf892c3478020fd9db29ef7b712dcd637339baaf97f549f52a4f44295f7b9ec1e738a916c156890e5475e9f8bb0fecb760b96623cca54dacbd6c6a41790a5470632a9fcecca551990b45959cd0ceb453b53f4050165593dd235178e333fb270a5ce7772240f74fc229215d2e59720b7e9b53affd1e0c02d08386d4d83555fed9f9f597dbc6546bd0d691a878fd04db823a7e1bf48cd284cc0694e8e72620c02363de69c105c58d0d391edf40658b0ba5b947ecfb07af001bd4021adaaf655731c12a539ba6519dbf7b4f684f380f833040378bdb37ac5f031458d478772baa4b3c5fbf335001832fc3adac6d1f992b6bf9d45e5cc5d087cdef1f7d88277aa1b8fc07144facdc27a53abf1361c22feb9d0aa9ce45592461c08cde7cd3665a24c228a9bab861ea7168080d06f5c8dcab0f9b3b44609aaed526141d3b21ddd41bafe8ce193618334ac2541febefdaa5530ad51426733178cc45ae64213933ef6ec866fd999079c098f9467e2b189f94cbd4dfbbdd47c58a2c67833c96e511b40655c7bea2902b98455608b12f38c0b0fbb5e2b8d2a4ffeadfd2ba2c02eb1f29c99e36999cfcd7c33721bf405e17e401cbf706946c5187a2cbce7cbdce140458a0ead917ef9d244a58a296b41f7cb49024e172d6121804badaa5f175602869497383d8bf033bbb348e21b393dc31d764ecba4f062ebf1f38f39d40df21eff5032baf5c1a409e4389c3e53e68fcfcf6850dcbc4ac270f7f26fd0092807931518eaeb78dae0f8d6551de3760b8e7a6b9fc6d5cfa5165d0cc8be2140ee2d1b524f2e6e39206d6d1c995c75f400d04f7c7d0f6b4197c50cab0708922dd8c8f441737ba7a94a7fe32165d66a508eebdb6c9098e1d48b650c4d1dcda7126061da6d26611c6ba1bf078f5afa350dde479ad66b01fddaf86cd88d7d7bd4b12d9e1a3fc87d50d2de9136b0d9566aae976a1a247cc903d77742fdc6b6a1af6c98c45023da0ed981499ced3071697f9542c9b5e1465c985c808de89359bd9bb72a7af8d3fbb41af98b38b778a3a1e86468ed0a97484b2fdc9cb4257dc74e2e235b2890aa7dfb999e1c0b1203f0ae399e625a84a0f2f33eda344c30d09fd1db33b363a4220153da01648a896cd8dce7a5c788c0b8e71349c7dfcca75633d7376acbb2afd5064b50a5fd1d7a1deccc870d10fe2b2994f9d538079bd55933cca72b0c7c103dfd40920e5e5a80917cdb7c46d731308d7d3565ad445067640020cf06de4671b766d212ad00b8295229a85bf572b88d5f10447f9a0e80ba013981f380e99840fbd38e57048cccd0fa73b18a6b8bfa8e18eea59780ce8369ab305ed92b96e80a55b3c3e3974aef23d4db65ac4b7b8daf3578e721e42cfee2eca515c4697ecc3a6f98112cf7c3b57e7bd1531607d9d88d5f4f77b3467249a22fd85569bcf9ab5d93e104b7889fb65d79f6087c131f6194d0c2d5d02a670a43ff6a7c2da8901bf08d3f0cf7dc37584d49a9d4330fc4cf5244739fed0253a734d5dc2874cefa747f95f29882651311da556d64df5062584224f2248e60c0a6f14d9db8f362616b7758bc45cba5bb796137c128d58760c2d0ec9f0228b8468005b13fcc1e359d67544ffc835830b9059e6b45aeba174865bb160ac7309b5dd8eecb32c059aae6deb2e623dfac78743cce6a5b54f172a1d73d4ba5d25a6c6f0818d607443a24d657ffb5c2c93cff75859daf82ba103be58de3d7f0b1fabdf2a4107c2da63445f469b72979ce7e38457678c54c4c9ad58bf04b558be49602a12362282694ec80c96a65db895e04a56c95dc26289af5d21db4d03ed7f8b0ccc30c9a54826ea767bdf08826a1f654e9436a545ca813b5b403322f1e555cdf8f00c605abb1b2095d5a828a953435f356624a6dd33b456eede50e945e849f76dbc2f6507844fd96f417a709c1b08b448f51dc851452be66023b80cc8a062f1b158203e754bcafb4ae8dc47226b774dcf69a8736ba9edd4f736f5f142b2a8a30ced67556cb7956f6ff2561502eb961212ea4e0ff1070209fc408f027bc923f6c8a38d10b470b71e2686704305426feb589e9504ac06736cb6680ca53a8bdcd02ca119d9141f38efb7ccb337f3180ac1ebb008bb644f47e46fd7f64449a0da1b7f109317556c21c969eda65a94176d7a11462c9ae18a865b6db4d4466eb125bd0a1783313ffe79968511d214afe5a20013898b0aea5e39b8fa282f137266c6a015df72919a7e483d535fbdce0e2ab13939a0ac74497367e35c5b8e131c66c4aae790e89e2e9396a61b00f1ee778fa00fcab3173ec47218c3db7479ae365a27c5ca516bc0c3e66cb9251cf6deb3bb796910ec55d224035442c19c784c86e9f8d8044a855f201ed15eb8da52048a58442e5171ed9630cd244754fa1455d6bc3ecadea4bde30ee4ce7d1e628fcac30b0748d66a67f4b2798fbbdeb7d431ec7a0185a0879bb555e06afe9ddd3497287ecc9ee7004c5370ae9e84a5fa414890cc49f0921aa83bbdb9adc97e73cad27f599a18cb5a221a3415588bf2ece1028c5a1ff3fc866bde0e189fc6094bd8e591437a9ecca274b3c456c5b80cb43fc8a7cb8a7625f26d060fa449de858ee63726e5721830fdc785e818edf43d7ce000a8c893615687341c8906b2f73c637d3006e78d6e4095a5f86a03d925cb694e1458f8419cd76d4a8644e5e2fa74f32438f8f0d0894492957411c09034ffa5106a7f049c10f0cb37ae08eae2d0766563b7c5a8454f841c2061a4f71a0a2158ae6ce593aca3e9c981fa9dbdb95f8ae2c21535b9f3a94759cc27ec4f808d79a9b080514e7a3e0991b2d4ca056f91f792caba10c8e27fd774242eb171c9a74ec19f108cdc0dca994851a3586a0d4d079c020f1e801bba7a93addfba05fd3feac803835fe76d2de119e7cf10969a7a0029f27a2786a54079dff1a0d1b2253d93e562418f14a351292afbc0b72e1e022b602364f28588fb1c7f77dabc204788924046b2e70db61cb9a315dd18dda2ccd06a1c364823cdd2aa9bc7f644f86e0a2f02363e2e7aae78d8adbe90fa492cc0376e6556f1087bac6d5d6a5a31e29faab153bb4d2b02944cd0707c41241ac7c6a795872eb5dd9a73abebe7704b85e450625a5c47a74e6f80e713da565ff978c66a0709245c4a330ead6dc69f5a8a44e48840a1946a0647fb66be5d38738e49a8c6eb73a2adf64c65bb0c904e2598c84f6c2c129c3cd124a7959b8f4f2880415404694e0f718af0601cefcce775587677564738c7e5570f6bbbcff703467768b36bab21d370ad24e71a4002d1127258458db99a7e2c410f2f21851dbd941dc7ab45d674567208f2e2fb24ba74c48d76a15ba9c027db372ddb10e38ae3db176525d815d0ff3f43613908c57d385351d674063f332cb8e07058ce11c5dfe3104b0a6e8ebb389e0579d4894bd285866882a4d7a57af38ce5e08ca338561774ae7f404d69bf6959f6439bc6de42c32677821b16001de61eed8560d980c6f556990bb1bdcf64f836bfc67706a4545afb29dcbf0b7ba56b38a168bcb7109cdf507af64308e8314efe080b4e93c890b2cd239a7afe3b99eca0a990898411603f2cf949e075dbaed37878180ab3707e336410c433366b81d01fac05ad89aa9b7cb0bd0b6f4bd163ef6eb8f791afc5a746889660d2fc31e67f7d53d0120e04d4fea56f44d8d3f1d90ba670b0cdcfee9251005d783e98b54e618245f89e5a46932dd2b6fd035564978dea4749a45a13c7be950e1361522044def62a853bb7996071013b3dd8185125df00e5cc009a5ecff30f513a22719a4d5ea0ac80d06b25c432f8a60c3f66e10c67b0f340c8d5f5315a36cdf4693f4af3494971f045bf1146d8809e7220853bd38fc419aee454007559d12b491e0259bd07b921dd82fb866fcb61cb7863be8902be02fe1d3b5fa8245aaa12412a03ef3300b8654f6e67abc57363d625f059f0225b344b95b73d14c5c4872be5738a32de9c0ee54ff34ba9d2394e6782af9e9abad020a71f3f386ee0ff311e3ce2df4d45448248e4f8eea71e83e9259588d5af52848fbbc1bc96dbfd7370924e5f4966f15ede36176699ce2fbafdb96864455672df482f8514a085a5880b3024d311a66854e859ef2394468f4752ca032937b8a34915aa73309e945fa6cc9fc5248034348c695674182736c690b0016cc1f3fd6c2abcd492f8d830b4357987393cdc39dc7028d8ae2d9ac65affdf06ad12c14c56ea0656ea54957f2b9ddb9289016ddce966ef85a64b3420d5fba680ce06e9cde8f1bbd8832d1fac4c46ba66bc5d7d46e2d8840563583e69bfebcf18d584b2aaaaa8a3016669bcdd9f98deabda37529e4f2db001ed3d00cc9e392075cc7366082475857a9af2b53badfc0e0aec76350db9cd3b214de3c26ffc4c6240babd4b12dfc12bea27ae52edfdd8142af9046ebba720ed0c8a31cc7a608c5c20a849a9ed62f55bfa1687da1b1795b6b509c845cfa18e8e6bac0e65165361d8be9dffcac43577de526e6497ef849cbd5025aa02712f7fe5e5bc64d76b5c339cc1a1c7f5bde1b17c99372ccf8fcb54f0a55392eccbda5bbb23c01a68a0036a72d2bc897100ed09fc7879c9cb237424195c9d684c02298ad8ccc31861ddd06e2099f72d87b6e1e928963d22d3d40876fe1d0b146a41a5740489ca460a4c4ca86ebd599b7f0746b8c69c8a1f2ec90eb1698fa47f8eaed4810702df8caa12fe7e26e7ebbca11aa2de9f3169a8262c0e3c205a708f0071401aa8de09d28a5a6e590ebeb476341880c37bfee1a501229081eb27772d07b371a5b0c65100f34a25a2f0ebbcb2822865cf22aafafe08d51de7949ec242ed9cee8ce861bdfe2b0aaabf92150b59d173db6a5bdebc9c836d3cd6e16658b4f8533f35155858b47ac3851abce5aa516a2169fcef423065ba1176b69c28416d7101ec0a0252270a2a9d3f193802a084955998eda77d5d42f4ea52f08b8b8653a0cd7d7176f834e982bf5f26cd16f5d89a43eea549384c1b7b2058ea77382e50cce07bd438f28637c9526da842c6b137c008f58c9d1a03d995da100d27d6414b3e616e9a11e725de487df20760bcdd8850d0350a6dcc8c628b4003c1650ec82b3f79dc2bc97f1ac4476975aaefa081b392c235887ff5efa0a57cb86ff788c9da15504fef28636cd30d3d7efbb719a39fce077d6c9c3e327a2ab3b77da6eb4f3f080d4e4ef63b23f1e42295617fd04d364cc695208c4f5fd7641089553adf5f4262d962b0faae480812404344116d865f5328060a17cf7da199b8b55d7b0e03cb69db117dfd65e1ffe0be0f0c339757022d555694056795bf12d6c3ff311d42c2673ce61dc708f9be96c58222aef6c608207410251dbeae1917903ca223b7250fa22366f8203e952d7c7c22ec4933de5775aeb924287dd097ef0ea7ad1a82b29b63b91b76d0afbf34da0c7ad3cef6a4d8742adbfbef4b0321e4798c8ade26f34cf1258c009e047ebbf79c0f4003e622736411fd1137d1509f3cf973a0374cf00b969041fc53e5dbaa1c556b99b2ac5f118f8aa8cecbb6bef940b5e557ed9cb0c19822c3d4b7f9dce9915f1547a1f063983bbe639a72a3561738d66917c7bd3b54400299ee92e98c609ee195b3995937f2b1d4b6ddf3401fe16c8388488e5899aed6594bb4ac5cf0f88b037444618fe20539f529ff1734214023e5c9520a14d3b5a24e628ccdfb12979fef3961c33b6cbb1a494568a628641aa724b49e039aef53eb0a65e0bc6ef92623ca6c748505defa9ef7918168c3f1593e67d1924191f86ffbb5dc17425cad8e5fbf95e470943fac0b2896b024aecfe331d6a9978ba2f3f018764f99276e37b59bf33d194c9197b8aa03da5ea49006a2c89bc316ab75eac08b7547ce334b9e851f91eb7be1a3ee06c3b1e7f4ae129f7c4adba77567b1e4c69cdb4c1e2d9beae532bf2872f6734d7e9e5945d80bdca15b01c1de1e88feeaea92d0e4f1df0823bc1ea57b6655a8bb0882247a74839514263372ef77d6060314b77b99af0f3852f4296d6cbfc4eb418cb93a102fdde500c5291962ea186e372c5105f2c086d37f749c3c83e50ce4e6f289c28f70e3766e1f2bdcc0dd18e18e1aa995778c0c82b024bf3d4940f53ab2223be47da15bed651e80e390ba9c0511c60754b17c69edefecd99545384696ad0416ca64290ef5eea972575ae86d82c719b26a27f664bb43b4346f0036c99fe0816499cb70c43410a84760a7cf5301b9f9f4fe6163c694b56416f100a044fe527f6b7c3bde4452d3044825fdd7152aed4f1338e82c57224be4c843cfe0805a0be775993bdb58f83fa3bdcfe7687da46d04584143b7df0a0f1c928ef55c455c14a2c81853cfc6ce5d6eee85eaea511841fe0b41fa6e26f709f5bbfaf87e5aac7497ac220b22577b344d227090c55a2d6f27745f96b8f38f40558dae62ad89f133ad6bdfec3cd3a8cc29a3b86061608c0166dbc49efc107abc264ed3ba5098d35ace4c767d8502fc2ee8b784e2272bdcfea287989aa44361854e479089d150fcf0e1960f4666ac206174a7fc9f7d82c66fc5c102131755eca4b7c00e56977911fdcd92d4d04598bb6db3bb4a1ecc2ef25bb6d12a90bd0ec220470074a90adbbd8a7c88eba28b8f765b8f3a93e77df807ca5dff3999fe358c01e851eb0a923da69dd5bf7c45a159f932ef6e0283f6a5aec5a29357b64294f14f81f99b0297697441c081b03fedbeebfaba9dbc79a1008e526dd4ab70f1f19a13f941ab188125d07b2514ae1ad986f4bcda10ec51e5d0507ca60b5e4e73152e553a7144d5b83a6255ecc19f5dcc78bd7f360fb89429dc9b48358097d930c8561b2bd18dc0a470d1d6fed0ab912e5dee4bb6e148c9d7ed18c0027b7f9791d1ba6fb4a9af61ae8ec5064189f93d66fd2f2842d0c57856cb6eebf6443e12fcfa0158bd40d1403c5ee8ee9e34b2e9de20261fc222572a0e3e46d1f722fbd2da09d4 +MD = 4f2f500f13d5131b59895b6f409ccd49635fbf7a2eb54fe74e945d5c01029f15c76bb7949141d53deefd4c4d7b8f8252 + +Len = 83152 +Msg = 92b0c27bfa2d6f4756111790f7fc2c1178acc39744713d1258e126ec4bcc5d998b737570e9f45cb958093a07f1f29cc83bb0d21aaa7495e06557ee154c4b53613a5212ea87eef36dd2d8188dfdf4296b7885ae76c39ebc852ed9d423e44a082927b65f93dd017b8c4ce679cb22eb1922b8931f5497d5f9283ccda1bb18b2c51adb082610f2163e3d4e9b256868bdb5178242ed5c2f0293f1159c1d87f269d25cddae2d0ccf1682a9615fe30dd753456f5efadf35920ed30943af102f79587716b5123d2d7ae790f70c9a7d6278951155d423be88c8df01984e6d425bb567fc71ec9a1d1bfd73b050d8b4b90e526b60ef6d2552fcda5f65c5bc3d7bb2af7fa89409b0977f60a029dc4c1560ba6dbe7c65b068633acf7446b9178982dc6e86c4a794bb7101a95845c2f0253a0dd274abe02655b9e9af08ee9ce6b82082fa6698d416237448e2824a2b4c4d0eb08877368855521bb28302a395b2321d4c5c056c41164f68fd1206813ee9f3a64a97ad6584c7c8533d524aaecc025e41e19b4d88161ca915c742cc32244e81c88408007ffd0420273124c8576a5ea653eabf24337cb098424f79bba504035d3d06e257ce1a92c060370164e5974e711d0ed174b79b5b84b93dbfbd210791f1cc772d999804fb12c6f6f206a27a5b2865f6d8245a9aa4d540381cb9f0557fa33f80f2b026e2c77c2017fe96d43c0c31f449dc1c65a114f4a0e89998581555dd5dc83883c0dd7c6838412efcc404eaf592b0e64420da3147a1f63d40a2709c06edf807faad1da43dd41d8920bafb7cdc06d3fc84d26b86370a0a119a158ddb85b8b767fd37c9c663bd5217eafd494a4f1a5929c4c47c982da5cb1b8efb959ac486ae6174a4096b42bb89e043d715dcb494eb72ec3f36f18f38e265059aaf612a1e84fc473d071a42956aed118e87bb743d30e1e489c018c68cf6f7e53c04b91f4ae2415f4ae85bcb159c453e6bc96ef8ddd17d94ea43953b69b0d71827bb290bd07036a213d7b64501c8f0b0b6007da73c754ee4ace7f15596b80f84a3fd3a5779d5e5f9dffab4182295f751b75771e821c55dbd16d3b37bddb5a713faf272690dba564cf879dcac40ac6107b6f4d0255668b1056f3063170450a5ac72c15caa54c69084a47db76923b436bcfaff25c5a10752a600258990d430133655937d8216a29b872c2ecbb892567e57cca1f530cb4a498611dbae4e15fdf89be98f5f5a1af57f3fd8b3a3ff563a42c07401cacd9cd89d8fe97a59b98f615dc277de899829684493ef35c4a737078adf3a492b06db5a56a7d22913390902499346a783a60ba3f36abbdbb819fd665c9c659ea14252777db8121063364d88c4f6a013d6ea884d94ae82ce06bc70fec2df3f2ab3eac7d819a9f258d118219cd7d3cb4a09ce670e2d468d3536f75878c3900e15e96403253262ba29e5474ee688121073a4b87290c81a2439d0347c7b67971b87cb19ce05d1cbb2aa282b9c0de19bb7b62f126f786c128e025ddaa5b0b7dcaea7e271ef20fccc2204212cd2baea56083c33432771221615b765519bbeba470f9db5d5301fbe4d515e59b3ba94aa2c4b2d38b36221f10eff806e00264f79c18592ccab57aa1c3688e156261a442903c7b1c4cae830e1e2958602510e08fa3059aeb05c2d68206f0fb5a2efbb716fc5c5ee61f08047fa7a1ff1a8ab1a93477ed418e8517a02d1e02e01c57465c485588d0f968df40e45bee5e9e976149868913bf9fcf1061f37722ded451fdfe472a6673aeb090a2cc9972e954b1bc2be6353d97875a398685b0b53a3ac57f37b3e959b98e9cc8b4a8eeb441d5800ecae42aaf5bedad1fa854494e9488183672ef20f7050173e3e0f9da46daa988e5c100d80d6f2b3e2f21dfaf637074d0d04a794fb2f8afec8ed24fda8f264922dd98bcabcc53d893e49d886178506975c928e2f40217024d05e30b6e11b72ce462ac783460ac7e24dc760efe11b6de7d8d98ac8c88b2713c05adcd1352ffcd43f186d3f06edb74976335a3d3b4065c5e9a044697ab8da53fea9d0558e782c2d826b2507e4b63543245671790c3e16baf7b164193eefaf6af413b34ad33c286075eb96e2c8ac6b5abcf94baa3e5ba74d6ad291e1fc77cee208602db9ecc418f5825f69d89a187f15a7e290d8b8e04007aacc73c79c996043a457e8a9c0582574109145f1424299fc4ddae90b62150b6f1f67b3d6079d8d132fc28922393f77668647d336a872e29816a8fe4c24412d0d326af91323cb7cdc1167bb2c3ec335534e4abbaeb4f081706b1676a2e6add169499fec88d96a5625b10e24d0b82a87c1cf62a4614f039f0db2eaf91690a21d0ccecc353c12c4427779816c158dbd963a715636585ff564f555ed31af0a66397d27ba7c37b41f6959d0873c04a6c48a459cf01a9acd0cf7b2bae7c3753c414e44be316882a8c4f3531ee73ca3eb878b6bb8f6f82f829181cc4ba05a700f7d84eaf9f9a124d7fb07edcc6a13fc444dbf322d31772065cb29c96edf9ca9696102f642d9d025280ccdb040d869179a605125646940745d0418338d6e31273434f1f0009a9d8e823e6e23e3f9e8fad30667c9c366fb33548275910f13c2f2563f78609a04af66cfda12cf1d9436afd9882aa8b3ef4f66318f696c5c97f713b9cac0cf7adfafb5f628e03a5773fb3e922ec1499dcee414dc711c4bdcc17791431cf1c507f34483df7001eef75ce0ade83f5434e7c963453c70b5b6f75beb74de7f32c8a90817d972fa9d7367188c06c2050df2fba974013bd65d35152bfac57139ab62c8e5cfbe970ddb4f0d6fa95107c6120a3f35be51c0e93b519efb4d8be393851acc53153b36f3e30c5328dc94a1cb8b041d37ea3cb4f37891fa918bce1ed5e8781e1a915737f2de31a00dcfd9775ca169fc759fcbfd3a3b7e91b55d960947fb052402ea1a8253f4475be42a2771c07bbf43b986058407ad9ecb316bec8c31e74847d3c98cff5e4cd5ee769487774143915cc947f231a1f57c11cc5cd78fdad3caef54d5b6975a0f63c08bb6ff71251e64ae6d899aed523d9dc94dd960fa8be811854eb79f3091647a39eb389a47b536c2a16ff4069e60aa8b5d7d898eb58c4ea76f89164fb34974a1c15dc15de239b3329d96313d2d1466cd33241569a9252c1417cd9bcf09cb6660c0aaf95228f9bd3d0aa9e84783b699ebb50a24f9bc9eaadee3e2ee26185f633f9e9a8a80023c7a695071c02d868e6a6d49f65f47d73ef28f3d8fb65cca4c93c7c3f519ef584c1541d7b662f620e302dc59b16d5ae34e29ae8c9d9b7a06dc1d7f988351a8136fb44a083f76aa38ff89c04c04f83ac6167ac438d54787b3552aef830cd7b219ee800e49d6a352b628269f8ab4a5f06ade0b58a9fc5f8bbb00e1a0ed5756155411a014034191f481a701037b8c1e83b5ee04f246dd8e8f05256b193f2d74daab1f3ce49f49e99b83c4437387530bfb918d8e1b793f7a99790cefe2df56d90805627e0783b6534ca3c6147816d01361e505d159aae9cbb4fffc9684379a2ea74c208c0419507611c9f79b9990ccdfbc999cf4373fa42ae57f3f8886adc11bc067a28e63c8dffbf1dd9d015e5d0f1714949b1f3aa1383f36e11bec70ab9247593e30adadf72a89f5c8016d4fe5616271c04a7cec386db1ae0dd9eacb98d65b7db911106910fac923706b08f5908a68dc04f030d46c0b2855ecc0ac1edc55fe31c08fe11f7a176385be22fad7c751d25c48d6667aa6d94e34641a57f1dfd7d97f3bf045579d49fe239a706a7df08048fa744544674ca0c8525e2d16cd0824946e127d669ae1584203ed9b807075dd71bd7183f222c82841b8c3430f38c103d6062d7e6c6fae0bd92f9dec6637bc31f6ad25d8993380395f6c79a26abc723e4750743b7f5f6c2b68af94ab415a2f437ed2798e6123de9bca786a9250e1819b9053d0fbc5f183809a89b8203c6234ddb23555ec717948152be37c5de92e57e35918270869ad5bd214c7f3937cd635c53adda239f2bd28712ab6994a5c2b5cdd49a563a8911b5ce981712c4b2c3e99c4bdd246be0b78e5756ef8a8a0d260f85309046a2466c4ef8d878d4b917223c8a2e41d2bc3e531e7eaa0b191a87256940b413d26c40f2f7a85ce2537ad760b2a2756c5378fa770969767ea3caa659496cf98567dcfb4e4679aff40dae76181271bbbd2546c7abd5a466caa91edd2a26865b659598f7f6c1c94c2e71b865b0a2745bd4d69a086a19bbd57f978bbe2097095444da14a964e033bbe21e2d48b30926e023d5e74f2a3c1c5cfdfd95abc501829ea3b3d49211282569cf617171a7ad05e32aa1b30e74c34267c659c138affc7e74f2a14d4494103af036ea398307049ddf69c871c8c225ca80792a92e719fe4991c2210323562ed0c9c926c9ff39b65b3f61c8c800aafa213186fe8f39bb7d905f82c18ad0ffda8360f695b748e828da7d93111a3887b6c2e560241aa30cf0df48c4e158bfc9a9cf503fb585e27ae278347e4ffce2f0c23c26a559d9a576fe82d8092ed1526c2311021514ca6e7a59d0dea3c3c4927ec3097fb70e20c3920d27a7b008993b5fccf5110721d95f5f1550e6741b15c97a3f975b259fa48fe6933a1259fd14dd1d1de7e7866b5717a19b94d69fb464fa7b7e824371acb96cdd3736b2777ad8aa0c8c6600336fa829da62f949673e46981b2646b31bb3f3ecee5faa0299006944d69efbf57e9d612871f21a996b071f34a1cd41449423d872b273108d2f3c2b1fe3cc1631c8730675f0cf65512bad6352d7ba2e526b9acbb09217e6acba7cb2adccaa513fb19efca4ef61660b29afc77505935a771277620935c4a90bbb407470e9a01999ba6fd837c64e9921d57ca01db3df521d19582feee5ffe404b23604fbc343ebba63641da10ded7b3fcf9271af7b04a1def0ab89f45b2004323fbbd8c1021c542c1d2a31732ec488af689fd0ccc399c61728e004abedeba61ea44054430e8fdf596800b810c17a4e0b40d331d816053b703294246816a9261490622c044114d9ecd4a6161c3e6537ddd90b1963eadd7e54ae466dcb7def20de74afb4875251f030e388dff82e2bd291a175fbf2da991b3eec6545488c3412b6d177823eaabdaee005178a36f914aac13ac25df73dbe7eb98d8f5f61b9fe7848276819bcd2be5254b9d0895b27d63cd6f56eb3f3bcb4253ef212f0999fd4ce0cf6efef6432daa709824261c742e6e55d71e9928ab020bb59ca9ebd72962d807fb07d77d763a90998fefbb82dd2bd50df20a17e0eb07a8d7467812a6f458f3c0af49f5788ed9ff66d705ad0d14fcfeba69254daf2462838196978abf226605d4933d3e2fb2935fa1196ee60642295327e37423df7e9c027d330d3d6ada15760c4eea9be90bef1910fc334cb58e3a3a1b090182b7203c8f92c7e211ef44ebae2e8959f4f0c175937c295bc96121b81d5d83d3507e33ca9187f71ef09589721502eb90328afbad36ac47ee4453222b63b6f8f2777ddecf70256dcac1a5d13213521d993b00e1206a6afff5a4d4ba1974ee1067ddfc4ad29334d1ee6c6743b211e4c67cf99a9d55987cf976d32a110cb8cd74396c429e5b647cca90d823087a75818f3f539f54d426abdc7cb89d4e8b971bcc700a9903f24ac401baef214712a9f120ec305931267ebf500c3b779a1f799fbf15a147a120add61e7398a8290313fc208a7a0e59d20680ff3044fe1c4ec622f62e18959f6cf578c8c4bb02d6d31d6a38221807f76028b68eefbb7cfda3e66c19c657cb265f8b73a7b34175750d2e020fbbf28c31594b28a852883764a34145cfe246315d7fd58e644b104a2f36ad8d4e5df0e42f44d69ff35f94787ad83f75c08ccd0f6d573c93a79111c92bd804d49c10fa591aa933e31720c58666c949c395cbd4ac7d6c2948178f2c39927a9a9ca2ddf8311a10c9bcbd9d04ab51fec5f8f6a84351b64802775d4c4ae48ba5d7b007cbd2b5560200f28ddd3a2d63001ddc8a290246407230e621d051103fe023d774e3702df706404c2ee84d55c356b737fa59f9d342721c5e0a242b06d5b3e6d8912cbae124a5f19349c6276b9a88fdd1ed3d1140e4d12da6c04fbe0e76a6887c05ae991806667b8f8580aeb70f1f55720cdf30d45016ca88ec59f46f4a42718b7971f31cc5d147088b1ccc804ba229e1ff463fd8abc95dca364bb373780e0acd947eb233886ebbc602a568107699e0e76d7a279420724d35452ce5602993b909ffdcbca677c64090932069adb78ce24cff84ce50d49a0291c204717f8457e7096193fbbdbc603f30e697b9a0360497d85c6b1e54f2c8e4a654db3f18b2e4fd9363ac55bf7cc41e6ca2113f311c8967522c37fee7a0855b3ba4ba3773dac26170ad2eb4f6e27b470d6f97e3a791a1ba8419f055530658cf1a59a841d725777d68e621ffa8130c20dbf7308d4cbcd6f834c99f0dde4ec9a8091cae458ebb8db842b68d1e1e3aff139ddfe42566c6af892be44c0dd19d604ed195d32bdec38c79c8c77bf8a07ddd861dd2bb933ed6b4d53113fd3d741ea6293a6b1fdb1065fa2ac0bef27775042de32176bebf1c156e450efebc850ef622a10b479a3d6bcb6132f346fb82e7f877917273f49247ab643f894c90cde9505d1f0ed04d3a391a48f929059d013c8144f8d87266f209bf1e2c6ba582fd4b52dd0909af3fb8c07d38e729a3e0ddbdc61a801a1b1ac8a87925757cb398fd7d242cc9c58b78a04a1ab864bdc9ccfcb2f0849102151afd6d020080841bdcb5c7efd2c50a0d01db1d1950d8ab1f6a476326079356096e77a08237b74b88560e70db55679fdde15081a388abbc4cc1a617912deedf9e1c208920538198a00deec20f3f164ea220e6c0e0e945b8f9d90218597d0a657d2edf7005db45350b093f03b41739dd04c78721f7fa0e67cdbb41aca57f50b04dab9b9c59576de87252e77cf1663a15addd1aeb10436f91716e4d1c9dbc2687b79c3e564350607a7df1d075efb380be426a8667554dcefd8cfa0cb06bbbf5b36308afe6eb4d86b3d3ede035d58673a06e77b5ddec9f9474c76868af340426fdf8f7d6947ad6475a1d4e0106cc677b82d70a8e94fdc22abecabf486323201f2a1f729ba818730b39021c1a2efcdf002e252ef9d6b13cf6a33c0793125d964a057f7fe669ecad3a162b6012f68c756a6a01e8dee92f9762ebc54933050dee0e55c1299f201f0b3cba3f22d3a6a5b221ff13422516a05ad55d0e8c0f8459b1d2e18c75ae15d81679ede76844866e1d8db50243b7a52c0eb7c2bfd80fd669660072896dfb9040545a76cb3c4dde103e175376f37adefa3a6fe280351b456695ffd05f186fd97f4f451f92a5d6f5b29d25a3195b570933666785f7ac1b1778c737c3b77ef037bc8fa3aee5acc7147dc3216b9082366dfe1b0673cf44f795c682101339a867f4209addec6b570883993771748671005384dfb473ae0697077951f2878c9dbd56d2fa59a1cdb0828a2d817f86a12e9b03ed3dd94f3df8e4b5b8b945e95965d8a6fa378195b2bf1b71612ab16989c3f1c560baddcd2324c4e6ac4471ff4709a22bc2d7bc8fc38bbc7f5eb971e4e737e9e105e029b6089220e47d79de92ff90022f50647159a81c4efd4cb626c063936a9e053623d19649e1f552e0f4692802dff8cc660ab9087ab73353a937c5a4de5e46884434e87351ed6253021c4e6b6823cf5f63ee788baee169991b0ebb5320ac1fb593c4c147b22e73aa66bc0770c9b5fc31e5855edabfb2e74994126a17623c72b5aa3c26bb748b6f7c953e5dde2d7dc7697337329db514f4899aab9a99abf686b01102dd76a0eba0f41508185e9c63782f966cbe7b98eeda81b741128103c2a5cd5180ae213e384c37708400971f4f56add48cc81d7127df5b723c9b7672881534f11d63645459bc702d18dc32bd29aa08b8ff192b47a94c3c5305fd2001301f0e7940c2e6ec3638c5d52e76d67fd9bc6bc72d794c235b694ee3020028b7a20b83725395500db7075eef2d942c6b47d4fc8b7faf280c257db9a99c6b369dc621ba63bda249c0c47364037dffdb8c5c3ae38b5b85680aefd2a52e3b08f1b984a9dcd4e6b27a0c45c2ff9a867f8ce7fe35494f2ac1b425a1ae39f8489d0215c5ea104d368c8bf9223d563bafdce786160f5660552cb366245a9d9129f310b96f2d7f5715fa238f432c926e62dd93708d0e3145428e0ed45e1efa8148d2c4ab6cba5079ebc2ead790d7dabb074b39ad497b03865baf6d783841784e0c02c6f5a2d9ac3c20ad8ad8f28557ab04ee8046349ef3ac075676589a0d3e82dc4abd9ffbd2bb271c83a89a4f8031c5c28e114235be2a3ead4dd47e6dc875a4227352af5eeca4c2470cef26910e8f91a9f393a93324cfc4b75a2df297bb443d45462c2fb27090950a0f04839e78999822e4af8318190bc68c462aba022ed4d4ad88f426e1a6a629cb5692b960067961932b0dd9cbe306cd94d872e094684cf1c204519dd2d60f05f3a73fd1bdff5475658e54b234cae76037daae6c37b3d51deb81ec9b6d48f2b1ebcbb3d29fad555a01d62d173b18d708dd128564d25597de93c66c289a4478b61a8a97c4ed56a19acdcb3f0fc813fd4cee4aa0d24d97b9bf1f9c7a4c4111c99be7ab93b08f4363bd333433a2c30582b4d248a6bd90c16445f8cbbe104af80ce8bcf84e9d6cbcc1499adab0d814348dc8f1d5402e821bbffa861bdf7b9d416a26003771936e08e3c86a865fbaa3e94711b4b8162c0dedf3653154869623340adc1a31a39a7c71f2c10afee74f586bd71681bbcfbf187e270e623d5a68c218159274ae8dbb7e3d16bde40af2a01c04665fc1a413ef8c17847e7f9f04f96337b2d07576d7fd5db576435f7425b3d5fa1c75dd3c8cc54f00323cf2422b51efd70a1f85502869ff213bdbe3032a926d9620df3b4be0484a8158d021ee78794c4144060c0528054dc98c0dd87ea945ca209b254599b78165e21ec3766b927864bd890e725e80db2ff49262a7ae49d2d6e0b4d062edba76896aad9c578023561d9201bd2020d8f38eec7561b65bb343771d9467f91090319c622de32ef7d01b610ad39e7c16d75350f75c936e4c8fa09721627274cbe2ba8712c621629643d0176b2836ef0726055f5e6f7e374b84ef1d32477a3ae4581733c29edc5b26247d27fe270fe2ba6d11a169d8ac7a1e3a3af1996b06b323995287bae09f816e1a28780bf9b0bbf8537d005fbca59d8e5a88fb9ef59e47524e736a41b2ef3c38cedbf4dac5a1e4898053638a46ef0a638ce223880eca5e371e80c6a13c56f44ae89d82b2b46bc3359d9bb1309b142765774f51a1dd13609cb2838220a75b116d0f770addee95c2c4525bd49ae69c5e5cc4d76d2f8b00b547b18386071b87fb69eb6f75a19aa747fd469db3104d0d160f1a825f7b3f1ac500c489ba9ebf601a062590a947e029bca9226836d9f8f1b64722590fcd22e7f991939c062cbc70d70c65df8f16e9a488908dc5453f10cfa8cc8463656d5cf1b7c1c5c452fb3a3f984252660f58dda0137a30bac888bd305366e7a84aa214c06857030986516053c671952c1253e4a3c52fb252a7fd269b1fddf331a4b572da751cf4748a775636ca61d6397e5124370676bd92cae6749874f851055dee9fc944d8410c46b545700adabc963d98c8e33e19f6841a8bceafba80a92c5b95c3153f5291daa2525587f0a4ef4a3570f630d5de072f7d335d69593ea2af88f20544cd548de48798ad05e386185d5023d6a4338e989bdc28494db9f7e595ca4d8ee055a4dd34dbcd76724a4adfd874f892c9c0f150d120b0b9e443761ae60bed8671410b28d2883ad7548fb6ebc28b364f27e5ced8d82f14d5b45d82e8ab321b147df85116c47427f9351993e5237c26384408eed7b8f39cc74770e2f7eb271f608ee23e501489db039c50a874032f1072aa931af67a538fb425e55ff0aed241932b679a7ecaada01e129cbf416b8c3c28e1ec18dd253637c7d422c17bfc1bc9d5ddef2c48eccabc721e659ef3627bf1806f7db033c186da25de91d03fdeeafe4d2ae2bd5484c7782648130e33f1e478a2deacaca1572ac1f9cb9953e55b2729249da8154d998c1c63180ed7a91faf19b7b6e3d3ceed0a346921a114147cba9281bba9fcd93401f05017bfc1fcf4c41ce77d89ec638e0e7a9d6a13d975488b818d0e4e3aa05c0e3c16cc8c94d5780bc959bd05c0073f1eddbe2d566bb0c7823e701dfd964b199b47dcbfde17dbb46d6836fdc117630a22a3f4f3d2926c01881051701fda8273905acb791e13b7afd040a5c624b81ef602156643ef1551ff834158901dccec73d5bd0b81b25110711e9acf9f966de10ba67b3da515be08c85d17af045d35322052b8c35f04968f033dbedc107ffc5452f61da0a1ac533964fcdb7b5449dcfc83f0931b9c7aaddc6c17f4f3a1482e1ed2db42b8c01c9d8cdc4ad4e709488bf1a295953cbf7e5d9eb492843cdb57cbe8943b34ad89cd64a7372d4c18aac108b9872a074e50776d7de498b5e045159b599e0039a6852870357d8f8939bf1e1cfd3a983178d8cda6230310d10768ea651afa109acb3a9388dcb657d470d0c68f65c1c55be3dee7d03519e11ed8ca3ff3d2b0559f4532777644eb6d75e566212998269bcdb7ea2fb35e2ff5e57cf57a0b2ac6b58f3cf53d001624b9b4c20897b23f7101ce1b840c16444b336d1b710576ca461ab4d7094beffa6722d92c3f90f101a8dea83735e6c28f788300dbc446fc59376b543ff80b0a97be932b4d9274af87d51ca134842680e8bbcde4e778a76480a290b89c4ae31b9630f1f34d89abb478ffa2023afa3216f71ef96265158e78e68e702815853de89ec5257a54ac9dc87d2f5813701d734c63a8f0c27e2165fe3403f5ebd233803b588617058984b3b33e6c261bff7851ecd461984c592693bf110a064bfcdb14da6c7aafdf1498533c62bef4640f9035bcf452da481fab808326a98b8ebb06618d81aad64f1e70e62d922daa34c7ef858668829ffdf73994121aea6dfd363bcf1e3f1c729ccf95d54c75c230d44f1cab10dbf9cdb40a57373396d592e09602c65350da6c0f4e8e8762b4846e8cd09f0d23f3c04db57f8dd1b04271e37f02e3aef659ecadf0c4e36336f67c4da37201158658de08487f63ca4fc5c64821a367efcd05581c87581dd392e4b0b3635cc92903b35be5b532628ad9c8dcaa10a115f1a1f928a01b33c33d3c252a8912b77fb360ac40cb43bf117915f2bcef9223761c39e06423f57c5d0bfd62f2b8f9aaab1a66ea94a43b4ff800cdec6d01f05110d95f60128c5e5c74a49d430e27605ed6c6dd165f57e509a085c75df7c672546e8ed9213cc39cfb8f70e46f88bd8efa871f8dd7aacc89169072ccee63285f5415a570cce9aff78036d79a8f6864cda7478d3dd67ceb6f9d502da447b80e01788f84ec09223ab913f141864ab403638d9d78b7bbdd9cdfc76920170ffe5f9ee96295157fee4b28de49167149768199d31148c12dd5c720bc62b1edee3d057fcf193eb3d755cb8e06c5be2334b5c8b7a22b6524d46d547ba3c34aed8e7ee7ec5139e98db95fa031b6eea264b27abf05217437a859ac2b38a41552e194c8ed2c974cfd6ccb15b35a144a28fc6bcc4ecb79732714649b349fe9df318fab24ff89cadae218b87eec504863b9b208b35d50d1b09b329c4058f797a94ebf799905491269ff5926a2335d7bc1be4f3137d4dd52b4fcc8aaa57d8ad9fc133ba62fe7b59683bef7be8a71c7d5ea9d9c8d619bba2306b39f35d28c9ed55ee7cadbee8d157faf86b9273d8cd77d68c05ec5389b2f6e2f267fe6cd6e7cb35a3233c0dfe0b1f476c06809c36ed59cc38d6080c4ba8458b5bf2f65a0096c9c755d3ffc09c6d01e5ed2cc0e25fd0959816e69670ee1000b22e579595347b5b839ceb6387528bc25f125addc6a23badd2cca40221df9ecaffdff236bec0fa12e2dee601b29efbb30b721d31b9ac7324f4b08ae58fae8906bcf77f64275487627d925044e2f011667372e0674bed1b7d867927bb1ab9834681fb4ba87f5dc7dcac6dc6c788f4815f3f9b50d8edd2892a007cf6fd73aef20ce751e37e175b2fe407b795e424fabfffc851cb113ffb60bceb327516faed79bc4591d34f9fcb241b08066a35379111ea964cdbaa82c62698bf402eb241037ef7254197b7692c48d435e0903551464b8231d2ef0f76d14f6fe50c8039b67f66201ed7ad2013fd02c209ccc45ed298b169238a91aa8c9b4f85051e1627fbbfe3d99ada802420cbe6471c21633c5bf6e801d3da50263492bb8a87fb6d0761536c8611b0cd3e000767e5b594e9385def53decb58a6ecff45f7e2f61ad15287c864a82bf0c0c8424e1c108e8de2ed58e08972828bf2794d239920c7f2ff83ff8d60d24211177d57ee577a0f72dcc5bd88fd4f91caef55beba13b6861a54260910e576dca84da7c196be64a0ea335c2c3723d861bbe9fcc4880c26b9075bb355017718841cbfe20fa5c582fb6a830b058991af8ac57ef8ef0bc6f3c93092b663cd7a39b0e50ab6a2b9e137776a486ce9eecb37658e1ab4aeb3f8a04f2c75a9b5d3734cfba79a801b31b6049d7ffffc39d544f29a5c49ca742ef5bea3619107bbc1f6e4bccb0bf8f9ab986cd602163375db738391d698a4efcb62a17e66614ae60789738cc5cb6b9e862cf2d99737ad4e7ffb4cd48363de6217b3eb38a152fdd5228f8bd42e45629a6fd818e0a5b0c3f42120c0dad947c18ba26e0e5aa9029b09819d903b7b26787dc72e51b3c42e02376da8822d4ec108ccd9e58d5cf3ecace3c318231b32db17a90a943f9b691bf268c3d6f3445a4c2e965cdeeac8087d9e0455a3a70bcbdfbabcc89e35300ae71f08b250b6a892658d7879aea9246d3208dbc7b4ae85cca0fc297fc0c4fa303be2a7b79a2ed27d89a003ded93aea88a657ea87cfac01abcb366faea071526f66e7c64217de5a72452098eae32292e14715a114492217efcb03ffb391dce11f1488d4f04e4799271469d83c50f2a60da0cca00bd5a3211f0cef6a5d293a2ed5b1506430c1ed16e263f62221b72dac742fd767bce9a1c5a01d433fd9db4b8409c9d8e49207516c6ad05007596a361eab50e058d5f9906e2978c9d0d82c739951ca8ce68282f701f6d6020841fe9e6519c05203b59a0192f1bbcdddc6a134c7142fe6ea80d950603ce186a559f8e91855dab6e8fa2f77ccbf32d9b723be11a5e78661511b5ef01f938f485f3fcd88b0d62c8989023e6583e89a77ed8df79cbe326aa6bac0985888a13be1a632010fc7111244546c4b5d50e44f22e153c238689b2901a80f19ec43cc73cd0aef17d0c3ad4861eba6eab1ac58bd554313c2773d685e1c7955684dd9abc3750dd5969e1ef12b8caf3071150eac8199835c6ccbb5407641cf41e7dfa295b7641f83f1aa6183280f2f9782f9e066286a128c15c868ba0e3c1a433d243730ac34c058ad9813e9ea73ed5aa4d2da0c1e41812171dfb02b9245ead7bcbe1ff32e4190e24ee9ae8bdf5558e84b325404dfba4fbaf584341b8f19a18e0affc553ca24f1af4a11a9ef731e02ceda9ad6f6e93eeec715485d007101dec49c8bbfe8ec59632e23a29e8b42586b8cf76edb38c739dec455bea380c4990319d5c47819215985dd600ee4f5c97f03911630e970f645a0413b39a0031669bf0c6b4c866af5afaa3b83c925a5750c6b79bb838a05f2ecd3bc3a5bcb0dd2de530ab1865364c5b670c70373c920e18af3b55bd9258e4999d993d7979d0776817f934cf4678d3e185a1e736157de7b653cb27b94546066d73266977f8e969ddd853492394b4abb4fc69038445a54bf45b72f9f678f22e71f6eb30e762821a55d147d25a77723c9c756cad68f392a3986f35b3ba54e5c26ecfef7810de24f297aadcb7bd163bee6198b3ce2948ca556b361e3d4e01a62c2ca53a2b3b9556596d0a1be0949a9629ca0c454c106bd7cb3559347ffaa6bdd27321d52fb0aea0b79d990a36272a0c55a07a2b116584416bbe7f7f61056cb31e0bebc76eb7528a74f000b49fbdef24daab896b0370bd8e9fcd5108ccb97a0f76bbaa18ce98a99df82ee71e04a0116620b3e20f0c783c48ce2c77d6a65cf959444c06d1399ada60ac1ff5524e16b75a90802c1e13c729f65fa198f1d937101aef87a9f996060e5cf68ad3576368098990d910a1ffa3ad21bcf55c624b92e8d8df313898cd246c173f3929352dde307a8988369fba55f0504cf06d30e6b5a81e7c155eb7c53c1d1bf0f29ef493bf54b5e45345202b24190b7759706390e779712efac15c689648f06f7eda9d7c559cc30703e62d3a5a50dba5fa10043371835b5da709929d7a161c26a58638d2e6312b5c60c0cccf3ebf463e99f31ab69bed6371e5df5e4c2faf297b2e4acb7cbb3b7549317c08d2178bd6aaffc1ad01ade012d27cebca5dfe3a9fd8e3cd60621ce12a3840c1e62b2edf1352f423c6fcef83eee834d4ddb92fdf04a48ab8fe6c504bd190533870c3cbe1849c3fc06b8fa9ff811cd5429f460ac8e247ecb2ae82a1a2f2b93388ad8035b9b1f1aa42a7a2227b53d426df19edd61ac029d164778c550e151ba85aa54bb69022bafb4e7f1da320ea79f0505297dd0027b201756172b5b6c31e7956610d948e605d +MD = 9681c01fa5d54880bb1782486f533e5c3e286bb448256855ce24e0b0622d8e04deff7246736c98a40ea14c7368b87c69 + +Len = 83992 +Msg = 517c88e9a971f1123dc7f91ef161462749441a792d4b31ebe91ced70785ab0e9021d893da39f14ac6e389b60b28c81457b03e11b5c7972ca6c37aef58f2233d1f7336938ea2765f9c5780d73418b7d62f52baaf81c3645309996e35f38735a0b37a76e010573ada24970977e26c80224bda5bd37f4ea74c57622d3d5fcb5ee3fca62e1c17ce9b34e020881a9eaa9d833dd5a62026dfdc5320ec1c8806151b814b94b0a9fd8f341a6f929121e1498c6385d31e17e0dd8011f665c0887f1ad7d330b4930c49ff81d5235b993022cfc96db431181d55fe1f03388dcdc1334320844c8469c575c6010f9bea14c80ba3d0ec399e48b2fe88159177b278c4cb14820eef82997819492e2439dca85bd47c3f799679147b33220057347276059f0588cd9a4da676ad1f85bdad91b86e45af51804b300fd8ac427bdeef5c2a06379c815aed44054399af943637a7b961b7c3d3bad8719f5db26fc47308be29391d50283158e45a81778fd618989d4ff8a3402263beac476cfe1096be2146e820c8b6c9eb5dcd0a92bf26c7ef10d0d075b0aada257e5e9ca8e7cb5f3ac954eb5fb23702d37c5caa19e90af62460e0ef7b386a477a97e70373f7f67a535186a74872575fa425219d697da2cd52e95bf17bd31506dd8bf41060b72894b26a4aa07d81ae3cb7f89a6913f594c9f51a808ae9e92194c8db0447f19de82ab2642f6b5158a216996745919bd9477875952d106813268db6f5862e9924bba8edef936c867fb999c2e1b1ab83a131657eb9802658c97a3e327bf818e9d3f99bbf5d15286f5f7b22bef84d2b4de5f8fd5b2848314e74b342c5ced8ab4634487fc14d23238e805d4e083b96756d0ff4cca531d3c5bbbd6817eb7eb66a40be1ec17e305be2567ae67818fc2c3e6397bb3fd796b158130bef4a1e0c0fba6be9f30d50971df979b78d3d7bea5ccac405c2e38ca77f7d06d8df35c7e743301a404bbfe2f1e7bd4abed81aab56c6cef0e292441ee48c88e9bcae8793910f5ffe49af55afc157b25c095d7c21f1f8af9ca6afde18ee67204e1fe3abebb9a28e6a7e947b0195dc8d202f73ee6a2c40e109da820e0525adb7a68b051f4a91db6ff147817ca2dfe4823989b1fe0e665df7daf69f706e1abed37576895e3ae9e869254cfce6ee101e560ab09e0769409e7882738e91be4e18e85d7af6e52702780e78e76d565dd6d86d062caeb7154b90d782e9a5ee60205a8aa100b440a97bf8c45ebf69277c84a13bce665a698cd7c3997eb19be30e41e22ef29077fd4cc6f92f693d56f6b4ba1736c5e627bb5a85a532b873c72c13134e49c4b288776b73e7a40ad9ed30b0d799028f34ad18e8c5b447d298be0619250d6f99df8c4b8ff342c6c61d6261db7da5138cda30fed2288f2d5fa8f71d8af78e04e48fe9f644c5991c1d907cf6af0cc9ee313f89f9812e8467b22cf8ded2fb7eae273c27e4048b68f893ab838ba61585f73eecee857038328b6c8d49d6abb12dcfe47cdca1699520f0aaf72c8d5b1857c2e85af52f49e6281cf14240715fa939eeaeca6ecace735fa8e5dbce782895cde5d012245358a8c370e2f4935b6954118ee89d54acadb68365b6f1efd8b91e36b4789b029e46f0934bb41cb8d173324335246e34e3a1cf2adb90b2072b670240c3646df66c7f7e25e1e713079ff7d45d55d4c575fc353db45f25a4bafcccf27aa705f3a64a7c81e9f7fe80260351aabe758c3b9e42c282ce84d83261a9455f22b3efd468c4b8ac5de25cec8aa82b35e528bd392473e42ec7d11ae3a1cd8ab8f79e8488d447de6e003594a0bbeaef067fc3ea268efc14a23ec87050d1e5e78067ab66796f5038376f5638452068178cdcfb95bc6447de7d91df7ad2986ef655d18f083e908a60b8f9e8ba525e9c3f498b2432431ae39c217f7a8d116bd531a9e39ddc30fe32e2333e519d50ccf3b0bd18c26253395bf83e464e4975a2c523ed1c7c6508ff063756bb2543b9020b2667f47a8885361d5d1494cf1277f3ab479fca9f351f1960da93eed85003845f0adaaca12721a7a44544d9518aa0d4e407529c7acefbe3cf367b57ff44b8da4bd875afdac0d0e49d3b5f828a1488ad2bfd75f0939527d4cde56d74ee94516a6e19c98c8bd81b9344c9c52edd428802dfa4aa757e1a1b62d961eac43ac165bb323956b138ff6a3a475b064ccf97376c7b6740899ee05f147e3683c4684e5e4344c1adcc668935202189a35ae5750f508befd8ab7a6a5b7028ddc9040bbda3a8f24d2f2c9918050b4fb02cd7937e88458d98e359952aa8fc65b21af17971fe42e7366b50452e62524e78e3517e163ab1fcecf1228393b02fb16e0a1b561d96a77017d2d60f2ed57b8a3e9746e9de8f2c56667284aa581970986c06f00603355d496c063c3bbbc70daf9b99268b39fe2b269ff7fe8dca3d658736a20e2de532bacf9d75e17f37cf8f1afa798ec6ab1024e9f3e20eb27ca4750a585bc4221617767f3692642e35475658e5a8de10c46da02cfcd1239ce1e735ae3ba4c077286be6c4c1ec42ed36d719d5e7b7931df85f334c3535dbc19c6e1dcf7b1d61b19e98a25cca03fc10aee7303e7b165c32c97d44e41790a5a50eb1940a71165655eb462f93a949fe5d20004fef0a5587f3aa405b612e720fdbab4a4ecbc82fecd890ccf5060a5ed8171cbabf643fe5a4d53d30fd6fe44a78ca04a094afeaeab3be11b58930479307c3076f053a6657315bd4c7914cc38a8ef4ad4d0c0343a7397af098528efb870c0572a5b7ee282acbfc138cbda466d290e007b82b828d15fc93bfede78e90bb5342e0e75ddbffc0c33a7bf8e8f328835d10a67a699a01975bacd21ecebba1a08c0fd4bc5d9047c9b5ab708499a5934d120afbfc4cb65babf50ad9a36ea298c704c0b08d3db7ba9621a393c8465831707e339ac64b63f5d4574239244dbff09f6c0a16e2849ea2c685c7482c85777d9de02ee550fc2f5aa0e0f76319f27043ba10407a54b8c1aacb609b1039bd8ff235f6517e34c5751482207ef9ece3700c7790185d4c40dd3d2520738e68850e19d90f4fb7da4dd19e08946d6025972bb58869d63231c33dc46464051541427e6ee7b98e44c9ebc16194bb27384c93ffc94d1c1e8bbda65ffaf9a9a4475c9c6d6be28371877c25c109c71350d4da5088d2361565dc4860d02b554ff58702e9379b79dbae0279825cf1003b6ed84753434ae3e420a65a992ae017e56d66ecbf7977fe40a8484a9801a1e071c5c52c22bbadd716f37c7ca5ccb3b1f870696295bf7be050d4cb57cd3ba6e8751a0df1254e75701c32c1271d3210b40793011cf25621d06ad80e3998778a78a3c0152f01982c5f628306d265f7717e8169c0645bfa043f1d1673589051a7119c5c9d3e1e155ce59858d007268970a1f45929e148f79dacd614ad4d3b468763bd43e8c6f15261b31c189f4dc56478aedee5901c3ffb587a34471e7fffb2c5bf851aaa2211bbe5386c66d71ed91503f5bf93a56da751bf47a64249796442ccb582453407f5ce51f607b819e2b817ad3704f7dc5e25b74c95aa8ab0c1ff6316c6436828c12406227c8c80ca4208e8ceb35d66a78621888ad4cf84d6d227803e6236d7eae6130ff12c59558ab54215032b0774894e2141f49563c54e227346ae29eb291cff592828960caabda4ea08c4deb1b6144eab70145835c0695b7912e08dbee011754cfb433a0504e59967509e7eea8fbae0369f548d841acab59f716ffe40717ad08505db98d0d8951b4068fa6bf085ffab492c5fa5fd18d4f96ceec70c1e71bba997c45c22feaa3ea30bde6326821d551869a37051ff5f3a7f57f7602787455658dba33f78fcfe64b9301d534f1dda4db00e9140e209624dbfe707d5e13980cd76e74f1ffb4a5989d65392554602216bfaae723c06b9a6914390ac82b99398a37c3114584a65202072ccf9e39bfda71260cfd2ec007eb0a7a2fb52112134115ae15f9f82b6ec06cb2722a088c15ecfe37af91fbb9fc6f4f3467da4ebb8897f664eb93d29e13d51dc5beb22bf46b40051b1a0d54515310806b69df18cd00237580cd499a859d7b5f6999cfcf1ac8becef9d5d7ff3013b4e446be2e47f184cdd92b43821a87159978c68ae9bba5344ea0fa6959c4ff4445c4eeed2da3ce1a7d6c8cd6a7184d8217b1031968b83eb8d8c5465df96d66eeaa688a7e46f30dcd1b74cc0d1e5d7fecdc5249ceb48e8d5a4483043921c00c1acb1843fae00155a28f3a127150b1c45bd2a3bf32350539247a235c8638879ad0901c41e862934fa3c1068789a5dbc4d8e0ec8ecc54e4eb1e62ec77caa688b716e1bbabd03672a2d79a2052dd86a5286aee74dd2477f54a4fe5287d90d28c0cf6a63fa93ac366f74600cf9df559d5981ae584d5c308feffbfe91d965d265a4177c7ee65af7137f6f9dc5c8d5a8734bbefab649e306dc8b1765715e8bb09bcfda12c1104b6a8ac46f7170f4c93798a3af1295c5ff3101b097d18569e31e378e87dbeefb1d8d08e904897300228969fbc2847b4409557bfafdb1228de481d57ab1263d2929c51a57bf54607d6a1453aea9deeb36a9dac7b4a982fd5d0861d21ee690400cf8a94b9b0050bdcf187f0256c5704a20593761882bd56a49e764c9e58888ac2912aff92d680cdf67b62fe26e95e72c938001c5f01506fdc6d9d12959279db600005fbf7966f769e9bb8d7060abb21702c6b08156c5c61c66885d8d04444e12243a2f1b298d9ed1c7913e38c7675f8df095ca1056ee616aab4b5041515ef82508389478983c61ab83efa8982d594de5df65b4ff6adf875d07cb5002dad84a831e7436745003ee5ba12f634aed121bd341bf17aafd199667fe60e32e0b50a3a0e9857b7aeb64a36691c8e49da10227caaa1a58af983d2d1001a4704f5d58a202fbd4da18b4ef1f50e854a31cc3aa20308b000e79c6baa9e9c41e8dd36b40b42dc7fae8ba66f3c0af174b2544df8a63a966f89fa603029b69883792469fb95885d0601dfc5c2315d5a124f1a24f238099b07c8290d7a57ff3f078343575130daf979ce04b1eedbd79187a8ec1bcf5f5861a045dd6af33d62d8f68ea1c85fe520fa009e62329c3f5eddfa4530f837240f2e60897f4041e2c7aa7720a684cdbb42a6c5f7610f7467db8893af5084d48d164b721b75570c4e17feb3c3ba5242bb2846ed6469121d5a37d87c6db2874ba55500fc832977fd8a381cd2fe45fb66ecba21a36ae20140205816da07c0c94771b494274a0168bb9d144cfb59af48e256e1810d9334a584c22889d806e0116efb1c511af767f1ef8f92d6565d60fe5e0183ac5366c7c692478e7b9bf17c28684a737dfe12c2dc416999010c91c1e881f689eb9e6b042c11b771324e50fbd7de66a361fa237aef58321317457e38cdf43cdc86162b519eaa1abbf717acc5e47858924537b3f7f3ddf2e75e28aa2e745fdb62c5e22d17e5057953121e8b4217dd272a70dc49a0af77b1fd1fde9f0ca668dc05f02bf9bfc9c9db21cb8c78da3ab6db512c126edfedcf783da18ee5382bba46ac4e1818af129f490d6a89f8f513aa7df1bf01a91b738d4e8f2e61021ccbfb213f28d21151882ecaff363c95fb6c6213f172d082bd0a583cdb0c7f801e4ed475a5c6806c0cf31f66df78ced6540b85a8398da8812b7ad84909840fe7a87bec4bc8704bb2471a19259579674368b8bc41b158b02fce8bb67d01de3abd211becaa8f6e5b6a6cc6c510097e2d659f3dafe8411b11130e059ae0ab62278cf1f67b9be207d71ce2bfca2e24d24bc3626105a4d11df2b654af2b7bef58ffdb7fd44225a985e75111cdd288ccbce7e617eb677e49a77c9e06521255b607e933357de850cc2eb58f61b88224ea832a5428a47c7c9101d6558eb6f776e6b80e1b7ab81624344b66613a47840c67703b97fb54eda991732a6352a380e769b3951bb64f74aac723254c0444804829cb4237fac3610a32459d4ebce158af2540a7bb5208a9e96e0018da27751dde1adc69ba8bb881a95abe59a0323725d604a76c84b4ac5ee9122867920ba204d821ead6aa18fcf58df22786e01e6f9065ed2f0bfd45033ab399e43bfc1895dd3d253fb18e085864bee3c84b97e74f4063c721adaf6dd4e64eed7cbca1b7154f16102123efc391764513e9d14cf5a0ded87cc5792095e909c2f43811084ee9026ac9d95454b172d4296cd24087b02911cdf36398da23084c18986063ba47da9f4138ae6b453ac22672d5cbbfd180b482481443316581fa5757bf3bd93d08b0cea445ea904ac6481328351b76b0cd07d854c7ad6d471586d18753129c1bfb333699d8d3edecbdcd4454760b8eaeffecbcf6f4e8740a497663b13b2dd3db862a802bd9b3a7b2871961fe7fe32f537e28d638833d6d358491b4dc5fd4a706135f535f30d0e9258cf4112c38eb8026b286cd215cf480512d9e6d10a74f40230998583fc573d9cb3426fce8896aaaaf04cd4ab96855d7e5ae663555fbe5c5bad09e37d280e39f2fe876cb395aaad476dac4f4098da797796eb1b5b443e05e54d03997204a6a64d60eae262893f127049d357418b434eb96d54694346786357870302032094e504a1094b4bb1c88cbe0b6e671efc642f9c34bef7bde4f206fae1b4d7b0fa7d88a1254f11efcddb7e7928b9f9494a91ae988387212b8e4f5377e365650bf0a503bb6448c0bf3bfc5a4a3862a85114704e46d049800cd0c4fb3712a14464b1cfe8abe462f24a7a8fc299a0e4eeb6e864712fb1729ee22b0740b0e5f4f06bac329a0b3c4a0112081a29fff8ad26eb1502d9ab9daed83c1b9ad68dd3dcf3814e91ba41d25a8796633002d5b647fb7e48cfca42fb3ac68b10d42f2672d5b8362751abf82d10f0582a55efc34031d6e0e22fd5ae60b2d44fa967bd03395bd8fab4f6f196c309d5c7bbe043315cf743b38f978e2654b39c0a53aa02bcadebb05f75f62d962aa1a26596839fb83304bc469fbb56434d99884b8e3f82ab2711e8d4e8d3a28eda74d0d248a467c088e6bb4a90ffb09dc1f12373e78ccf675b4adceb9c1412d948fffb7e50b73dd2b519db1001d94f8e4836e813ce164b69a1132713fe3bd11dfcaf8cca4d5084775e1a763770ec65ad46f760cbc060893aaef731de9dbf7fb56c000f567cf4de16ca7517415c8da57354af07dc5cf00b52cb63a7bbe91371482d9dfda38e18ad49a096589e33418168e7ca57f60249343a8cd4d33c6edc583ea7e5c221ef306478770a94de73ac7c0676d5db894ed0b65a79e74ec09d8e8711615417522ed0a63b945e7652bc3307c4885e0d06912ae45b090794e9038e9068f08547d4ab7de4fbaeee57cb7b59c73ba2cf570e77bc5084b0b230362f71069dcbd5edfa03aca3412d56c3891fa51cd44ca6640171097d9007739b087fba5c3859e26462c5c163a47604341c37898b16fc7f9e700ba6ede583d8400082ef03b13117658f5060988e3f934405519b847c28b770eaa5f903fdac3cc98ec7639fa0d8014bd0321ec476e0705dd4dc3fbb8c57ea75c1ee846250f72d8233bbdc728fb52c91e5e93079e6ef27fbfb560a72c0008537a633ed8b87db27247fdeae3ec65ef5d230f46a2b66d216a8f94d705cafc92410f81478e1faeec60ac3be5d56ed4bf98731d2005b7f2fe8ef4f3105dbb40823ac481edb0832a866bfbfd96e5d7d02a42b7900b78c886f0b297d9f3f727544206416a17850b77ea5bdc49e55b4fdf98229670ee4211b05fa01f4e681a35c1386d2d44ad56e01f7ef8f629ba7efd8b7101b9c6b0acbbf8b31e355b570f0d0ece373018966b29aaac0af2a4fd970a5b1da7c7993bfeeee655f58106a81fd8c36b2bf3edbc0c0f9edb5877c296ee9dd704dc69f27680d103abedaa59438fbe6976131ecb0681ba8572ab2e8c6dcbdf888e6847d849798dd61ecd595c10aae68759b559ba5c1151e6dbcbbf096a76f8f5241208539c3349e7175f3516f8b779a57bd94ac3a606fc4a7d80d14276360fa72ca3556b57f42ebffc69e78fe1fd9e4b44499cedcca6e538c0920c3d77554c2410e4d529630564e536b416cfb5c57e021cccf541b73a31380cc81a045719d8f6369a3194a6ae12e12e086bdf5a5740516b29fec54d090bd2c9eba09ffccbdba4089010b50936613c4b2c8ec6bafb0ec199295e83775d998f5fc3491450b27cb7ec8d1b9274e7787df4ea268cbbf90dd90e94bd831e7c03f63718ba6d3918e4b64c58fa35d007802c9308db3a479867213332c5cc28af7290b7b29eb2a1433b298fba54a603dfa0d28f4f57d6452244216eca1c657f3e0ee348599be96f7ca8991d7bd1ebf7b701f650873f6b9cddcb6228266a590971fe7953d4591c8b0b538d5e631a0e92d7ca203e783efe3612256bca0c58adb0906bda3eec8152dc38658dba39d717be8624d8c1e9fa99fa0879c4ba458d6b5ae27c8c7269bb944c4b062199c7af0c620d37a741a41b43d009f0f66299b29bf1b05a195813aee9c28b5dd263d34bf766b42a14266f4a05a05bb28829cf6f435c422c0957b1035927429327802653dfb1c325a8d8132fe65247e60276b16b6d83e01be2d60d62ec61b6cfa958886ecd2d8252e9bf5871eecf15b5edb3054f204ed24f2e3fed71ab592f3ade53c144c8c139d7614305b825fd0d46cf4794c265a55fef74f91adb9df7f7fc50da987ed8552fdc98cde4ae94c577c2339a266d4370d1233d6c5c46ca24553c8753d6c405d2ad8a15c3bbf9420f9a509e1483f8c2976e1510007a5b3bc690220a2843bd581efb08608f534137c4bf199a1d720aea027fea751d3ec1f7c6f1d861bfa712d822617f0197742f7cca2e44ae1dbc4bc49a4bcdf42b6e20060dc0831482ca6b8ec627178045e56a180b2ffa637c296557451ce41692d3227182454eabd7746e80f394f76600709b136e0a633fa281fdabec385762ba356d3f0cc75faf286cc6b88ff1483b2fdb6a76da06a6ccf78cbec978e84f610c5ca9789590dea8dc7b193e838631853cef7e48396cec92e4124db8cf74f499ee0f7f2504e6f41c5b691018b89bdbce8e74809172845c18cfda5580db246d94c918964d4112c9950dfe525015786e9d8d3217596d961fe621ad7c2a8240e3da063d98f8335b849a5a0188ee8165117ba1f1eca912ea5c8443536abdae0f7df10b472a2ec40b4db4aa3c59f8e6a9ecef3278a78849c83c7b9b94c84146da646342fdf6f8db694e6965756e782b8d2881a890effffa77e75193383ebf32e9bfb81129a45d60bcac44f3756e753859edb96b016c150d4084919206733d5a84b776e291dc663c4d92cabc0402f8f5556220e393c7d26a6b3bc0ffc710c6a6f374271cfe451a5564268529e9d2084ac8b03d790da83ef94036684443bc5ffe7d1d5227398781944890fca0ee85ad1ffcfe989339b662a3069a10c84220124a6cda806b074ba3e143f9b78ad9c3ef5c3775ba9bdd9a454e079241f38ce4e67206d53850333989259b893f507336d7e9c23d2af7c2fcefe38943822de8afe45e9433023e83f83a4699671b5884846caee57d7011b082694bd5d85bde202912f65d1f669dc131be2e85bcd30cd455b793e75e154f6fd7ba6c3377546efafb7a23abbfedd5b38b1ec3a7aff0d32a52be811207a01bc6a1ea30ea49f6463fcd24cbc43b1e4e22af61ef4669f91450228b5eaca099dc7e89027e4475c8ccb74616d7f1bc8270d5448f99ac1176390c6e2614fe5389f95f36093d87235369290f5a307a6a9fa496f3b1a91fd0efa927de95895046f7dc31510757fc7d1d855ed0f8bca76c00502b64cd06e8ceedcc6919e2a7eaa16becbc8105b3eba8b0891f30f665c0eb2ade5d3eee9a4f32f70a99c81554138d6d91c86f09399ccf94db32d75e120c0ea7b4f429194c9b2596cb8192347a143286331cc21ed156184fe55f6e38abd4fefd3cb8cf580416ce5177e720490035b73d3a8123496363ab6b0e709d8a1760e2b7dc71d5b2aa0656b07694195bcebe441b0fbf3a94d709b170bd2b0b5e40f8e35afee6e63027b4e43b30502673ccf703a7189eae06159152e45c5a61bb0de4297009e0a8d86168a17b0ee2ef98e2281a69bee628a70643b55152c346aa666bdb816527c3b4416ab4f776141bd2f898b1e9695e4f809066033e072f633133d721137983e0ccaf014637d1ac5329f690f1b082cfcc989c446334e365605b5c6e24b0afbca72694767fc488733ea6c45801456f0146f81323feba4e2fe42dca790cdf6e99bfccd6118625013185504a380a309abc66a6db4cfc58b05397b1633f01291fe3d1c65f1a84e2a6aecf30717834fa69c8d4acde078496719a22ee100a2a142862841a15d9a084deb1c54c1f5fa62a46ec3712029bbefdf9cc2decba20af2af2de81d2e296039210040fae3d36894898f137de3152d314b0b15fb447cab9f3e51f6ff6ad98d494a66d545eb44504dcc7a07d1a5272eb63ff10614da15070f669ecf78c5e283c1307b53c626ad4406f3bbfb1cd4d442d734cb3dabfaefafbbbe70fc19edc8e63969ba471c4492b65885b167b000a10c2cb00607313581082cac54e7433111270a5ca01988c38929ab0916f81ba701ed2f484e0d45085d92fac6d72b854e4fc8cc8fc965cc01e50076e45906e0369b584743ffba47e1f9e28e8454337083d93de889929626ae5aed54add42e8e3dd1e00d598788ca60da79506b788965704208f6c0983559174f42cccc24d9763b2a26f9ef92133ce373c9f8e2a0b804921ebc6fdb46cdb3eb36a337d5c79258ad187f958c9bc420185a56e0906929be77d3cacc103ab9c788a5713e4138e37612215c58a6f126044df2929ffb2e68f38fe5b69425c0a4247e105f38a505378ee8d96fcbc55eb36a12d12f8f698cf05448d8f2408284f72b3a0bafcf579918d3bfb50c577e20f6b1f57a604781f14a51413220599d043d6c5afbf56aff8102150528c49417e45a8c6452e750caf7f16af765a357fbaae1684f65c28403398da337c92afa59156959fe0f1733bb0d6011da080dc425058daf95ed89a2e94f160ee5faa2028830bd9b10e39258b8ae20d6777db2168f908c92acd7dd60381e25c89e51cc454bd2a1d05b84cb386a66be394e5b52d7b1c888b212c9101466435760af52fc2b0a57b08a1c77346b46a392aacd1542803239ec9e6645d4680a4b0557b762d43c4a4c8438f21f6069c3f138bb82201398675132b7f5b29cb38a91ca2e3525c6e1923d775d7b01d1ac68ec2aebfc204888e7aae58f6fb3db8f6db40044b70056c368871477f5a30aababd0f3ac998a53ea29a39f9532be03643a2e624bab86f64a33c5e61910976e00136bfd8df8c2c834b3d7ab59cd25b6da566d4a93812e47fe9a8666a14a438e2225f9d2f0786e07e0fcb3b35dbdaf684a68fd33cce66aae58f33510b1113bed8a5a270e84b6e0b5879ac4220172af9a3ce85ab85829c0abd1d44e6eb8f3e50eb1366ffaab32cf3380e48571f59aaacf4a4b0242b5e9c4c2f1c45eeb3960d3642f212131e46a9e047580844daa842579cb07906d76a4eb865139d320a2f68b707cd1074eb0ccb1cadde52d0f80cda41c67a461830ad9b96848ab4779960371d5f29c7eaba0d7bee91288fc2228d5ab3988b8023df2f692db709f288073362ae74909f3d3352a29d1bbf28e3ff34aaf53a6a90ef8bf8a2c62419bf2cfdb0d1b36e890034fde22672752a83fb3808b34fd59fdc44dd112ca9f341832a23de6c73759d5299c1c5f1b5c4f10ad274115b0991b3ceea7d81f11e4d0aa64b20c51c38af52fd322604e9ae339d242f5c588b6a952dcda81250d76d5afb90579d6dc748473369c8d5a6f8a4e7b538db97e42cbb0a9540484486c8dd419ca91641df56ec63c5ff2275b305e10bc1b09fcebe244517749190bd2cabb72b755a4fb522b26c2c92250aaf34f7abc549f341a9ec5d4de5502749224a67443f0f09cca03ec110c92144462b30b84b3dd66989cf78bd1e9cb46a3b1ee6e6c9a6f12053ab3c6d2062fac59f90af2f099def7a41e9692eff6325c22d570a0f9187a305ad7e239de321a60edd87b9442c0a1d8e2f9ec89737622d97e875bdcae30bae22a2c0fb39a22cac89c8b757dffeaee70d1d979cdf0fc25351352108ff065999ddf919cc28a5ab949d27c990e8c5b1d55fd17cedf0cfab1f58da03f196439beca07c339f5434c7e7b1c4646d47ca3b6fec13f4c4b1bf441a159fc28378e2f630d2f1b37ba497a72b2f6531f4e555723e1dada7280a26b6cbee4e06c38b2b94ecda214469001575eb7ed3d72fa8ad81c958653e21e34e28bb4cad79bbb8659da822d48c7050f856ac06d6ff26791c8e98060561b7247dc3709886c172e8da39ec11d133987c8674f82f3551e041e8c2349053b7f3b6fcaf74389f86f001d08e410fe2e2e96d08f75661ba7465e65a44245c18e9dc7f13134f96c0713eec90c72e84cd416c09c5074f042b11bd52ba3df0d41b9e7a6809178718b3296392620a3cd85bf7283907ca6a8051cff16b50d4215f267fd65928e5a6283f5767da8d7ff17454ad25e6146b2f3df457071b63323e64ff34f73bb6a2342d2ba353ab5b50d8be800a6cf6361026a4dc500a483d7ecf4d6f64e6f4fc79b78f40b42eef12a2761fa7b70453b2e2d81bd063ffdc24e15d813eb7a96e4290b9b54633008dfba05500905bf5e3d308cc0b9a38f0be61836f6834d74a8fd00fc10905c7d16d5e6ffcc7049f4890e0aa8add0076e4d63c8b8d6a1969d041ed1f58f24419aa77833af3decb2b044020f29bf7cbc6e40cfc213fefb418446be2e804d8cdd19293b127c3abada631dddc0686c3c3cff748eb6f0e5fce89adf5f8915023669692a9325ef39872b8d84e5d0ed3a7af3a25724f9a81222f6713c67442c13cd810b1a14c080b0be10a007be8330b0d58ae767271cd21a09f587fc8a125e189eae8f763484d936ec344b14cc89cb55c87d4f330992e7442e604f7e2c65f377366c66cd76e541428e00ef3a9437359fc0254a3950fe5046ecb1586fc2a1b4b63125119e6054616a1000ecf7aa3dd7f5591d58f871a1b598d183031ff167fa6bfb8320576574a1f41ebef4ca72e04b0cffeffbdef03f8f90893ff02d1d2b3cff01e113870aa89b970685773182d1073d2107b37b613a36e45052a005ba6e04e5f0d94bbbd472b6b9641ef4bb6e72951c68ef105c28f4540ae35593385da2eac734c6695437657bd1b3c5edc67a675d11341082dfdc205f5aaed33a438b5c47093a52dceec7e353867224c2e14b01f7b21f169b94ef30c17a0f3605a5a80cb2229de926f9fa9ee63e2ba634aa64f4dd75865bcb09c69812efa10895dd4846a4b9cc03c7f443daac7f5ce483703c8286e2167a81bd16d8dc01f0c56b68f06ca725413d406c28390ea0624a6fd1566d7c7e2bdd501d447585777af6e6c7251121fb99f010d03c3c9567f8623a5c270826a0430ec6a8d3f097a6ac17a8764ac6bda332b6c9aee457c93c6ba6735f42d53e0f088955fe49dc9b2600921104f5efd2c2a81bcb86b50d22745881bb892e670b00d8d77e6c1a8bf85c1500c0e1ab0ef9c06679a6c622df39c62bae73384e40162c2073b0a0ca9147df55ee289adea6ab32fa6aec0bb25067a871672b0b26c2f7f79bd88d0ade8ef2264fb4c8af05495f70d069fbb5e7e34471b66653604c9218e997807428cad79fb77eff217cb3599f2084e16653480a48d867067ce624101178a0060679240d99094017b3b26d79d2c8948bac723757fd32ffd217fb41ef4a2b31d3a47a5e8386925fb90fbe980ca2cf6ba34e814a3eca280d43b51e2a624b87e973debaeefbe0f90a3d861fc79487ab96d2bd1f0531481e0bf5c4cd422b9e05235125a969b92093fc2fc74470a3e9e382948889dce1ef8b7842c7972d9dba397c0619c4335dddf981fa33cb27ad420ddb533170559338f6eec55dfa515b088b601d1ba9f04c61a058476c2261334890fdb93850e3f7bcf6bbf7c86531c631715bd0bbb91527641ecb71c0d891b8361356110dba2c61d3f17c54c7765381ad81dbfb7a7006515dcb7813e25c5dbec2eb9105320a8384268dac56ab9c4aefd5436ce7c87d687ca73cdaa8413c09b957a02b0045c08db11d01d89815456c93612c9b10262fafdbd8f96fa95de64a3a6cc7809cb98aaf8b30146d7375105d0ea9a3c31f240541217b77a391a8e973a48ad83e24edb76d64f83bf7834b7b80a4475f916f429cc0d0074e12eba2c43a9a2a48b05382d54bf0edcee34218e57c0692a6628af264a359f4d33a21ebf4f39de39f8382f962cf918963dd2a6dfc93b8441ed2ecc3eb6d41dcad85dee4fa32f21f43244db1fe6cd9438131c6ab1f8c0bb43f5f2f27af830a1733927d1e527d6965ea1f1e6cf6a83aa4bd7d8160ccb9a36b7e53acae0f89154d1bcc86f87c37562feae06f5afa0638456f3cf51f82a0f1e2527cffc7b9f415e6bca0771405f53b05cbf4db3c570b547e1cec9c47efd699b1522792f50d387e6c9ccad7f15e3b9a6013e8cc51bc3c01e75d08e17a52ceed4103eff0b697daa14742882401037ef6c74918cd6b97fcd2f9961e5f176a0e7f29de32b3acd86f311f3484e5d38433d2b3d22158ca58e24a2d5e997faf73f9b1c4579c36184d4aa05ce92d97d95f0eb0be557ef8fe9d60da0b1d06ddb32f2547b8f68902b975117188e70eb4930244033f39ae1888d41d051b67e2c3c2fa2583703195a3d0de38170ba494b6910c885ccef52b41f97b6b4dc6b5c9fc4f535f17729f2e942ee743238da84c2843dc503fd62e630fb111c026958d08d1c8c9564638a5c04e042eb70 +MD = 8e6124f7635f258cd2f94af5f072e948fc632d3ddcb2f269e4b6bcfa116231b19181ded309458cd4b248bff73eb470c1 + +Len = 84832 +Msg = 430063db3ca8e810920ec1a2c3028e809780692e0dd7770e950abcdf7f773483b4b61f05a4c49cda7f617967a8b64ac4673bb8c0ded81c253e4b4d3d3ac9b594bce8ab00d7bcfddffe40cba073f89c8501d5aba6ee59823a2cfbca12cfcd6266c45caed4bfd832a675755f540c10ac49cf16e9ea27a2d0d5c6e5de6626cb618032dbd18a436063b74dc6dc8b5b46a39b38c61b946ffa2f7e76d02f42270bda6a6f2dbc294a9bba9beffceb4d47e2a900a4ace8aab0abc7bea48365adbad4f6ade41a16b9bed25cd9c1df33a3ba2be5027b91f936d1fbbf1cb6c729b0c770dcd0f86a8743864d74f92d365d949c6a8028263df53fba334021156423523625b65b12e4b9cd8a5428849acb1029d3e8a2fa0b7885ce539a71532922fa9bef3ca9d79c525162b22fa0017064f56948ea7101930a51ea847a7b3d5ac95693dafcdfcbfd7afa07e62505f816cab35ce3bb18c426ba009b351985641120e143e0af80bf9d245ac60e7f7ff1f6c5f30a8da2bdcc2d513be94ec1b852b4f040b2e79bb33be41a19a612863575771c5d7c2ce6899f0e98a9ddb7b83c8ead011ee8d80aa1c83a23e0b0da7f500b019998b9a9d0a3c73354f37e584638a0621b21ee9c4272ed070657ea4eb5f73cfc024dc9eda833cc0250c0d519b5d4113d06f1cb198c4d33b38c255e576f538fd02023b5dfb66334e553b9e8e34b3a67a4893787392f5a21a67df214dbf48c8ce6bbc38466415989432486c19c528f2d016e9b2be375c33f48a16812c38dc9bba49bd43e6c933d52848cce682e10fee8bb7bc4beffa4ad1502bf2d62f88232a57387ffecd8f238180f5339e37fceac223a795b487405422c3aa1e90c611bf1d1bc48ec9492a772624e41713c79d3c462e62f07d22ce0aa0b590d4516e5a02bc7e5a6424181f912b8a81d1b7b03696c31276771620e7d0d3ac8cce88a6e580b105869aaf88f3240a285b1e2a604d6cc1665e7410302239242eea67c6fe38cb6337b59cbc3a39926a94dc36bc766630e9908781ebaf01b61aa3262a6ce2b8457b8b83e4ea9a575e954691c61e51058574278e2b091c0aea3fafeca10ae3088142876dfdab37e0fb42c3f846a09eafdd29a1deda08f5a2180bbb9a46217d9e0150a1c0518e714afadb838c32e3adc99a428606196bca7bf1f74cab943120ed383e61478af4f509cfc80bca05780ce76f874a70539218dcfa9ad9bd15ca5b7aa8645c50048f31a20ca0c34e48ae3a8daf4075ba232c5f59845ee93b455dbbdae45ad97658bd95b813fe50657716c520ec068e50028b1c8631cc01a29d5b90624e9a9f26e1f0bf90882929cc1b422b45a851fabe7c4ebec7856aa98f984497b5799be3ee5ad91defdbc9b5deafb0eb7056bb5171fae7d4b1f1a3575ec0c92048e7e76e390dc71f0a81489b09aed36415999b1906f8d6ecca090e71aca129c8a10c058493755b51950b3e2ff9832a43b9c389b7da10ac75642e14bed5b4170f32686ecd9a4c065403fc031b1ad73608e176ffc487bcc8fd34f35e657673e152918f8bbf99ec4874dbb64fb2ea158702012675b58c67cce2a0db342c1b5b493122e404c12ec0925270dc7cadd3c88dedbd547401549c18d43c584e6910e49f398b083278d573846b87d10252845acb2a6a73833e7ce44d306becf5a313aa53ca2e5ecd5d0a7f9f3e752689576866bf268d262bd361baca85b42bd27070171761716a0dd45a4f3339cd6f6a130c56ea80b9cec656afaa2142a9776d47d2b55a9e18bcac75315cf0ebf4fe3d1bccb5cdb764effb4eb30ce205b0621e9f97ff8dee78c901c61c4348c390656ad8360de94912fc2312288d7d3d6d7e7eee5c6031d11611a63d977cbb6f04378beed4b9cda44895e6475c966368352ef6ca8c81d6c4751912422f73c93cd4e708b63563db577a2fad54dba224f4abf62ebaa4defd571a51de8a40c2e2bb86e679c4b476a2d12c4bf0d1325b428146567f1531d215f77a6e535c77d49879aec857a0ee7ca4bfd35d5932dd0c3c9c78d27080bff5a1241991296f31436ae5910f1ac15fe0616213d63ef0583f8384d7fc9b73abd42f7b8c9cb9090979da8df22d4bac754c597642691aa0108fb7f8c837687481d8215c27d39ad06cf257e126a552d8bb0b0d4af36894b8b2673a66ee156fe9de8c27548fc8474bd847737dc309d8ccbdc6ed7ebb7705a0aa408b3dae090a6a1e5a91d338fd36d1e7e3bdb24bbd35fee9ea8a8feef715fe64b63b0b7c94d07bddee017697e4e218f841873d254202f5cbf064dd227b1e386e32ca4efe4b4a757990f6bd4111f177960b606cd43ac827c072fd04da65b6e54340a986979ee10d9e0dd1f5b906bd745d8be9cffd09ee3b83dcc3859b69586b705a6930dd022caa979f23de5425dea59b5d83d4f431fd7772b848edd9d87b5171fa89dc331795b312cf7cc5c701ad71fbeabf2a5e356e8229700d9c0a45b82dd4bb7be73e31b4dd7c394d5a762cd26fdbde0c2e9f96c9d1f4ae821ec1336756f4f7bff052f2f280504705fae609c605d781eb603cd887ed70ce36f4832421736f39e67615ddd7222b9347259b2af0ca6b90ed5dca7d314b2a499cabc48a7ef9a01c5ff70b54fb596a88716909f2fb2404658275acf75e619dcb33a309f8d86043f9ace187eaa78c89a12543b7044db93e7a3b4668c957d727ad9c78c7d1b62da77c5dc4202194422567d33426e150e07669785e9285b5f2647b27ab82b790d856fee31d787c2a00ba66fbc8ddecbd3048adda1c9e9f0169e0be75a9df1d00f6ef0bcd6bd56cd14eb5090f6040b8db2f21a1d10f0187c2a418e1f6f211648eefcc1d7d2deb763282b1d89e9903c843439dffedb44fc2621769703c22de4083496ace82d20f1ac6531d5029d17b8d8e041a12909afdf1785a7f03b5aaaa13968a67797ef6d4ecf526640a21b82c8b03e722746a2180777dd3b5f6e407e96021393eb8b21ac14f4783225126abab434d7353bfcaf66bd6db29aad447a930b8cbcc5d06dcbc58c455dfe4efa92a6c48e32f0a3f3368349218b2ca26712cf48feeba4eee4f39ffee78b3081009c2d40e3d80d28d44256f3bcf058057c0f1c948129980c99a324b2058a3287cf8f396f5e4ff29247d8c703666989a02e7a61393dfc09f433e23befc5e06a280d73b19a242109a9f302bec0467f2439225a867d59ef5f6c5bb9ccff4f17422b63507c0960d5b83581c7237485b9929903b772a9fe87023db92ec028ccb7205a782f840438f469fd9830de654aa03b88779a0f04534e5a2ff44cfdb364466e7bf517b0d3d40583cae143d8dbbeba87cd260a44d881cbd009b5186ce83e4e93578111e8bd5d906e64040af7200992df32ba0ff96baf86ca95a39cf50e8356f7b6c524140bfb1e9193a88d247b52ada97dd8b116070608b19967df816e5ae7026068581d06d536561f75d34833c1954e772af984f2aed8eedea8e9f651ec881c1c13b5e9f3146024cf15e4499180d137e858ee2974ce7ee72c0fc33efd61c1adb36e44611ddf24646c2dc811ddb4e9cb980a98eed78e83064a44743fbbe01a1dee200c6dcb5f0b7cbe6887865f8865714ee700bb61176eb202ee04e3d2911cd493d215f644bc9cd58d6b2a925e22ce93d4972d795c91c7521ab57c108c9d4e3b6a2b68e2d11d60d7a1e1b91c24aaac98f0c3270e0e2417505b43e3b02f2c38b83dd40c1bbaaaddeac2703a0bf74985e86b13f764c0f6e4138d3d41aa046563b4d2740987478d9d77b7c0b7492026e3eb0c2ea462b932b903784e9ee653715698f2b46810c0eb28e4497a37bde66b4d099dbd36ef43fe1b88e31c034c647899ca653c309d6cef049b4046c34f933d4caae467b6f5a482940a984f77c47ea1b5b4f3b3691594bebb0264cb62e76ec66736abd52b5b25e8abf15d900336ea1431bc64c21c628083d5837cb21c6dbe2e2615b8ae9d090e55e9a5fb87ae8af1fa954c7f10506b7864d88552a2f9c9cc9d11afd39b15e6a7f3d48e3adb80a8d97b6acb0d460d18c4894e70ac4402e4e03ab16cc64499dc37eaf615e1348178eabe37a1d60b5b51ab1bbeab53403ea4412d8db5585034d20862d7a0ba3cbae36eec8435a20843fe7642b1a00f3db6f2399f2df05068ebb16082fd998b9832cfab2cdaf139e4cc076e25aeb6a7e370b70eb81a877733c85f8872f2661df3f126eaa7bf3c6348ff54d8ed3d55e5dc76d9099fdbe0955ad2c5c85b3e7138f300ce7384be7ee7dce2ceffc1e6e58fcdd042727df865728411cb67656720a34066b18eec5c208e47805b2aca32ce6e6184d89179fa7cd55a8e5aafb7f7dd28832bb5830723882032dee4a030a8794a3e9c85adbc688f87835058e67a760f8d6458c499fc9a1f65440652aa1ad14ceb0c1f2f106dca0551a85faf55d56a1d9b8af4c51af4494d2426ff8b90b033b0187416c000b5a946f971c44544f15d711a9e079f4c16b97b277fd1799a1c580e9b1d881fc6bc8bba47858604fbf5d672d2479a3c788b710f34f885031083c8cc3ab17d34aaa9fbc9058dadd2c10a5e888b2eb383e57af9731439211039100954bed5fee7f3a47edbf9304299e0587c1b0cfb5d5cdd0cda0d8fe9b08a5ee8a50cee331120ebd79e58ec174c409e06b8931e559dafa6699b476cb03758c736245e9473c1c7d868e2a8a7ead3af443d9a5989e47d6489b8c4887538c062bc200cb1763d13c4037fd233ef50e0ce1924abd315510464ce22de377026529085cee76c5e3711ffb445f7618ff1798567e4726a89443a95bdce70be2625f6ca69693cf9120cc26133e1d89b4d76a9bc74a47786af6428e09ee402845fdbb3f8b11994bf5a622ed0c77cfe47f387755b8a8d43904d5ad52db88e1cf1e2f09102a605762600e25e35b93eefcf47cbe74aefc75dee2ccd4a6554f2476d790d98d08d566a96ca335979514e359912eb0671eb794d0a14668d6eba380a60eadad14ab133f87782fd2782d7d5580f1b8edab8c8cb9c4bcdcda8323289ee32fefe435959c5a931eeead13a93fade972c5d6c08cce6d1181ea9a298040d7a4b7d22f6e3cc34042cd7a05e88cde6519b0b00c34741f274dbd0a3848777eb36142fedf3d153a792d104c7d653ccc03882811ee75f6d160efbab6255e9d44caaf3dc08410c3646d9863f084285d9b11cb4565fe136997b26e0778f1da563575f514b1ae87bbd3a63b44e0ba9053ce18499526db8b60c4944f2fcd1e5a36c35dc9745ccf10530abb8c4fa7713bb3d77f8993ded74c610a7f09902d1b4cb370da92b92c66394d6c05e1c0bf4888f249c001cde8a1e4debbdb33d503692050c084f77faaf460ff8a2df26492c11693877258afeeabd35e6b41446afa98739324e55e1452fa35dde79c3497cc4b531c231ee4b65b5596549b49c1ce7d29c4ff20643d33af08168d06c90ec6b677dcf0af1e4c7db94fbc55ce4d127c058d82f9458a2b4a297e81716a3d079dfbb6f2b58e08d66282ea93d676d3dcf02e444c1606df8ec45cfe052f7470a57a068962ef4267491132d6db5b177687d741de6ee9d6dd0e3eb3e7201bc80c7ee7617f7be25ea1eae66364f158329d997dfacc89c9580af005c8ca50dae758ea629709cc435541527e7f4564525ab18870b38f2b48ecc1fad5f62825c124fe7e7801a8c296a8de0625f0c8a2ddf26adb3c06a6a1fd17ca752be680fd733355a1944becfd30dbd07c99529f3b6f9c22185c6ea3ac3a6b6d0553f455666585070a43d036eac650b12c253f19ac6baa6fa63e45f6a8a54a2201faba15ff2c8c8b0f03392709bbca08ab75f0c86466bfbc3b7e471005b256a2118c9263061ccc4a365ee12dd8758a4f70f8223bf1f54e801e88cc9061d5f335ba8637ad39dac6ccf6c352cbd5a823edf3284de4e37bd963e5ea50f83ba4b2855383f45508cb0e9be6bd28819fb8296cc882de43a78ee2c0181f6eb8019316e972e2730ad182063f8cc8bcdf852a0d5457945de8bc92ed3d3b9490304225930a9f4e0e2f428430103f529a363472423d36d93734a11c7b33b6e640217bd0a9414f035042da362ec695074b461c255a7fccce04c7e3afff3c108108ec1d28ec25f8ced3e5e73c54cb24333a5faab7d8a4bfef4102f2b1fbcedef154f0b492be3122fcf37917fb4486438302136eae2f3456b976865cc6e35488b3beffc0a2a1fb540a598cdaf7708099631ce1e67cc0b747b91fc2905368759454a139dfed39dd12935081beb55b528c5ff54b90b85fa5f97a97382bebdd9a8830965f40b6d86ed514830821b98774a2d625c10bc54e78e25a97679df4d54beae418d0c1a42019220a5b80a278675f636218e296380fa8a8f57ac15502c1f222fba33ea14983747fe1647bbf768d8b44806910ee9525dda3b7bbe5ef9a2645c6c3cfe98dfb850945361859e7485c70ccbd70ec73412350693df535cc3f948f5cf8f961d65ea7301874f1cba84276b87275dac5a2e08ad97fd4a14189477f574bf7aa4818c75c81702a8b1171094ecacc46014d1be7bea14e383a89956669361a4c7d0cc3ea3785d2d34efbe011571040aa8ed33cbb51705ac53b9e7ef0c4945e53cc10762baab5c6eba7bb63df2221662fce0893ffc5af2c082ec0b49b240a7eca2203ae003889a2e040007ae73286a322595da0199db6487d8eb0c4a9fa00f20c0946ba0c638a1d6d824ba3be0ab88e3ecb32ef9d4c3e3691d5ef2dc1d9005e960c6a4894be3f9ccff8fd6cb80d2f9de17e38e0ff43af5ce18ecc6e6723812af485dec85d9af287a41ea63489cc6448a6ecc002b4367241e923e8f4fe7c1bdda41024c7cb9c7b84665dd6a997caff14ebb178f350773f7c153fc5501c4538fd2135dca543451319a350ff1a668b48894c46b40158986f61f23cd20e351150f00861571f6907619dd77290357a8fd92c352711db311c6aaa0ca59f9ddd630c5ca62d3464a155dfa77f4d2a59483b397422dd02df7e65e9aad0f49e7d79acc39996e3e53380d2f5bd074b3e14543fe1d7b1d3178ca52744facbb45f3b9e60ff4d673ff9fa9be13c550bf74be522e05aed5ea3c07129b314f0796f4246b02247de739bd32837132bf5f9cbc45a38df1d1b85b98e1b90abc242468ff82d636315c36882115b06fb3d165d4337c20a7e90f8c3aee0ea5e73e556df90d15e0ca5f1a2928d34f16fdbf83ca2f826db2c616eeba4de597c07ade6b4811c7e67205d53e2ae07ae89f667e5ef67551203f30a0f8a85d2683f00ac5ed1f77d5fc7530bc50a07abee932f017e9516e479bb02eaeb5bf3158da1fe11a6359f4de5fcf933bd8f3bc4959b6e5b3ac44e20de8ee0868ac679324a5344506565e508a186a767b5f8a6fc040158b793035984b0fe006f765094932eb177fb14d9653832e2c21a36ccf5bcea6362b92fc8d59a8166d7083680b1c29b4b0d742d069c46ea9ffdbdc8829471994010c2599b5edcc077f8d333ed7d4b208e794e1673f6df692caee4e3a00fc49115e785b8d131c60e9fda6306ed33974f0a400b89b8014c1f075a0200abd43072635b55c6211ae0cc5ce03a28069121873cf61ecf3948277cbe73a7b80c6e2fbda6e0c4f9f166a77a2dcecb0fc0029459a5000a8f8e37fc12b0a03862584a1cc35f1c55ccd89194a880ea9826bff44a46c0f251230d6d34719c5456a805f4a223fa628ad73d4832c804c814155d02cdcf1f4185225d345b09c00464e1ac0a3a701767d67195e70c6907ebe1540daa99631e820915f439ea4bda3505b790d760182470bb5488fa8c0c38ca625b685837a35d186f7658fa6cd8397a9b827b089d8ca031bbd86cff2c11e5f829a3e39812f049993abbe1d25d0f6c2998fac0fa4d5e290f5a75e861871abdd999b615e6c5ea6268cd6f557e3581e0d6a058e94919fd1d8e19c551ce07971ef3551a55c0cae2462bc9f8fa4a70b0460624457a517df9fc127c4f5f91381787e9ce4959c29c885336a2f166b3b91afa4cb748eacfd3d55350e46c5867930c970177bb6848b53d183ddad1216659327bfebbcbc100c60fa1bdf4a4d29d92f6bafee3e927df9f810395e42090ceeb9759b0b4568390cf1965ae3fa164bfc2566216956b0f03d5f4b3d351685b59eaaa01f72371a8fc59732dc5f7ca755abbbc3b0d0eb98431d2f8a77aa500d793c0fb0326ab95b7afefbd4889ef888adac9989436a24d3e06211d3cf05192ac0928faebe39f3b16281c58746e79742bdc766c0c1802ae82dd4ac302d8d9862f266d3a1aa280ea7af149c50fe81805cecc6cb70145a255f943aa9a8798bf64077818291de7f32c2c980283998b5dd5ea16f6fa223403cc17b5daf439b475a49b7ab45864186868c188c1249fdcbd3d1468cfb5ed67a97944c06670a7b09ed071babc489bd85338c05020288130b8c3c42e316aa154f5f636efb78040119d601094ba6a139c3604af6a89fffc3bc3027fd3d6990c809bcb349058c3a16be3ebfea5194d79e89364f544892b5f628e61adf619b17d7eed50e45eb48b2a0424dca27863532d21fdd2288a882b29295d79e501955472a47d3fbca77567688eb2aa926b232babecd7c4bf89118ff804c2b3ab82b3f29aa5bdd03406f5e8eb702fee4519d32774adb3c530ecafca3a99509777f6000c43d741cac0f9c070014cef0040f0ede725f9044c1311dd5a6f4b799dc0d804121ccd8b8819fc6fad686992990c7cfdeb2e335bd1dc8504c1148fc05f1ca53a94640d0d80759b4df18f7a9d110e3a6d93fc012cef03d2c08eb8faa723e1fa0e13d7fa4a4c8a3305dcc4e480f0cca5c7722dc6fa0c0f779b23cb00a0a4c7231900e739c454be6001cfc73bc0b0de4b9616221945a185efff10d9364f5a22ccc5fbf0200e3188bedc5af4d4dee9a99843f0775c8257dda856e6520005bc8b63af65a1617a5b8f8bf00eec645e03c5187b81ac2552979d3d5d04c3f2563477643fce6962ab4b2973e74c0c5ea087a748875a1ef818d93b1b5c0cad81d35a6d6ae1a6c6a81388ecf32ca2d33868fdc6a501ea7e4957a54dceee6e8d32efa6d3d45f7f37a6458d50762a93df65f9cea9ba75a3189d81742bd48e9ad18a1da2513ce3c83ae1b3c0ea997baf9f7bd582d7054d149c6948de7ba8a72228fbefc55bf129024eeed0dc11c99a5681eeaeb2c4f212cf6830f03cb3c7e284d21cc8985abd99cdf2224f376c8301192542d7c6fa1d41341a893a274aceab438b415a83d3eeb07bb320615b61524a6807fcd337fcf362d301d66916c7097bdeb31df8206e00f7ac106dc9c086b3c0d39881339e33f0f23cecad0f93bf24dec6c81733f67f90f9df886edaff53241eec55847b6235b279c20971b026798d3e9c58a1906e9f1b117689b837704d2fcf02dd6b1d1c88a4541306d8dd37accf35bfe3618ff1231be91192be41cbdb332bc78e998b3593333ba05327095fcf573ea1d6cba536d1ffdb2141f59c5a83daefaae7b46845ec0b7aea7d00a6f737a1c3f2c14452a7f24382360602a9a4ed93751d873016b60989ac61f2da48a69c5b602321502abd2a9358b05d59fc436ed9469fdb81290e623a3a97433850e653d09db385939ffed14bd930c65006be8e38eeb2534c11c78c99cffaec8f722f04adc7045c7324d58ce98e37cfa94b6ed21ed7f58ce55379ef24b72d6d640ee9154f96c614734be9c408e225d7ba4cecc1179cc9f6e1808e1067aa8f244a99bd0c3267594c1887a40d167f8b7cf78db0d19f97b01fc50b8c86def490dfa7a5135002c33e71d77a8cce8ea0f93e0580439a337338761466edc8f73fe2ce0fb374971d35061434771c8efe10cf8958c71d716f99d38834253a3d5cd6f59de7476937fe2710b1c40fcbd4d129aefd65b4b6fda08611c4b8b8fa7a5c7439bdc2c359b922340eb8eac72336a455f7f8b0fba89572c263ba16b4970682722fbc26c9dea135c650c82d1fab0ae4403b09ceee5aef52c949e6e28aa8487b6b67f787cd60768568873e1f9bdbe81d62f8af241f5651cd2544c980bd96d683ca431e6a4077afbd9502a916ae2e44bc28b16734f113734e40e4d095cfeb375819719f52c59cc33ad65387c6c92ab74d1be5b086262aba52b69aaa76343dc154c353e8b5bf384779970a58849f59964cb71619ac01049d76f0e6a5c68ce72af6626a8917afd2a316619799f47323883784b310fb242993278a5950fb2c7fdad98135ff0d1a147c8dc07bda8b072103a9ff5d2518020241f0dd534a88a570376a8a46c8ea80562a4c3e3798bcadca7ef0a164c4672d37104f8464d0e38a60e725e80d6554751032de354b330de99870b7f57a8d8d083084affa1eb2b04dba5098450a52cf5aeb2cb0403757f33d038f7c760edeee157725aeb8e13e6351e51a3e0bbe1fafc44f8e6ed97c66013aa401aaad8236fee78369a83b4cf27159998a83c6a93a9a23a5ce667b9afbbc44f29dbef6753453f0edc7491bc26d6ea7105805e04c32030b867333a1136788fe67ba460b684571c40ed4fdb4d21dcfdd11d930e327747ede89f352e46667fbc97bcdcc36dbe8dcd36f0932b10c61f96df6a4a169cb90623f08e540a0144b8938c76eae13409cf99196da747ad1f88fdc3730b3de9904518f8bcf998e9da0b5cea303882b16e05ca11ecf5f7cb34ff79a6c03f4ac205ec1629b08a9ea72f615edc732d6d8ff417a645f6e405120b6d53b0da4f06ce1ee363aaf271e5e24ba0e288c6316c74a4ed76de12dc372caeb8d40848a139b6e51247a40a14354337b23016b1ac450984708103c94557be25ca41d7929faa2162620c3f81dd5672fa7d90afbc06c1f59f8611dda2882b737689e54441b023b89cb9f8a2dd330f169ceb4a7b70a8a8e0fa186c94250b7cf0abdf0778dc3b6a239b0155f6a97d29d726e3a5a154f8c2749f0fdb4fda3711e0ccb3ee9aebaa4909672069626a256d5f9f4cea49f15fd7569551a6364a74b4e9dfece3d3f664851209007d0faa92a0530f10629dcd46ae31e4c81572fc2b2bb3ee742e4b86d1e9e78887d825f02c8d5e7e1652c2721310ab955a702b78c23fe70032172922593c30ec9fc4cbc55bfb26f54605e36830c56caef1fe8847a3b82d1e0ee696536445943d2f8729b087b1537b88c2263503951d3a7408b2f0345e2c4ff0e2b9a05acdbc841e6a683918788e19c4d0b363f648663ecbd6d1fbdff98d9bc054bb91a39c50c956b5b0e876187fd6e278b37a6fa5eec4deb00cf10b50f70a6684c3aea77af712beb028460959cdbaca024e00d8755ed395de8b591f2c13a5cbbafa80cf2f59693ea3f9da3a0320cd65b6ab7f98805d74d8a777bb85558973d53e878e81821fd5bed54a2c6fdd221899dbf37e178e94ae8f55f89fa493007c6d579360263df15f268f44c511b079a24fbb4d86bd67ab89a22e358ee4ae21c97c4f467f2726760d5e190f2c8944cd73709ce21ef2d2490df97b5710ad6d9361e86cc772ea0657e94fbbd2e93e61c794e2c7dace1e9916437c8385ab6799fe4d9bf73fc1d9a43cfbdfbdb68597cf0e0c8f845c1ea982bc321490e8e97afa0c937b37d5f55bcacb4af766e287fe554be35d1b9097fb56e0e2a7e8a8514f58633d7276b295d73eafde80ff7e77dabd262236d39fc07cdc2d5c1ed4ec6b4c7bab5267fafd29b7c98ebf60d0b4de92cd46d001f5b12195de48a7629cdcc0da2b8ddb410ddf3a623311f68121aa43904e54f5a6c9ed43ac22dccb5a88a1d7622fb0dfeaf5804f4044df89c93a882e3b07f79a0c977cad2b728fd1ede063384a50be6649fa07f0b9c4a18322627727fbc2d8c51da786e7789409c005eb496cfb565c7946669da5357afee973e39fb738459f81c040327afd50f3a089f27cfade09341ec97f69f71c2f9fc5a40327655a59f3d3ddaca8ed2070f57a603d246a5a30ee5fba8f946dd6ab2b1e9c0b37bac9c67cc55d3111c84bbab65574146745d695324401dc4590cbb64bfd4543f93dee54e35e26189594e5f8df39acbf7012bcfea6d487afa5e66418a76986f293762fcbd0a621a95bd856f0172ef08565597334f517324fdcf90798e66a47612dedf5f2eaa6362b8c1c056b073d28b06fa363ffc515eb0611511d00b00870d9f02ba992da654ee84fe95c30576d3c86b576f426bfd79b1a6c740f16af4ceaa003b7b17347eb4f26cdc5c209aec71550605d8e738a6428d416ec43a3883d9bfe8f19775dda41232e2d3b9fbcb451995597dd99accec47c7c3741236ee6e46c3dbcda61183b6eb04898d05c121215b1df83807d9a35007d5af6f916416f4745a4b181d96b117ae0bb360e5fd3701b46344bcda205651f15b57c9e83e2cb700f7a97964620056e99d12e7c11c775693e9d194c71b506292bd7f1b7d41aa367b00895a110fdbe51c5d0a9a2dab5ca09836212865071c127a6067ccd70b19f321296d42b9ecbe52b4b01ce0923671703fbcb6002a8023e20708b4567bf6f66db1b6b7cbb5a51210513acc63852a3035d90202b48e231241c70ae750d291ca16ab5d1b4daab591be60519b8b7d132362129a89ae164c41b238eb63448167ff7e5c70ea40ff9a97ad6098fcd0f06dc5957adacd6549883cd3eb2eda99eee611156396b75e2ad0be7dd07582dc75b68140506740729e538df74c499fd99198a96c4f3304fdb2d440a04e7baff6736a00e351b4853e9b2a9fcceac0357c1ffc22f38dca55983e21f8a5291fe6c78014af0eed470e51b699fca525273e09d09d184b9de12bc61346310d0ed6b9b81232f61391933e34771e2f10a9f30c0b59d7e3c4fe0be9ffe8cd74384e44bb40a04170a1dd2db76f6323a1afe79841e9125920002cbf22be05045cc785ce4e19b0cca92a2e7aec5ae146fed35cab522ba07d677db85f68891ea7352b43e8048bda30fa3d040f5f9fa7f4811b7780cf6b7ad0f4ae1f712dd99c0297e3e736511f731afe2b0c6f7395fdb8f2f8c6cd1bf107d08201d098e527e3c31f820e2db65d21e73f9495ffeae67900aeebd8f4ca84ee188a295a4b111cac4526762722c6cd5d22090a3f4507f990682f750c8c5d6f840567853aec43f04c253730a0d9e4d88b6814ec76e36d57da5bef150fe837496013b495f110f07b59dfdc5229a7b3173305ddcbcb3f8d89cd68885c21bcfa8b08effbdbfb3da8f64bd1805b100093f1fa97be18aaddeaf7dffa65bb006f19acf4e6a7d7d7e6dff998a6cdbc02991a0138aa4063a423083a98ae11a21a731747aa94331a1580f80dd6cc0ed56fc5a7bd739a0f3d35c357ba6dd016a1ee6d65b3a075481312b0a3ab6cbdde67b61aef9f420374f5de236c0fe62cef5aeab2a7996d0631337dea454af0f8c6c3740d342f1a531c3e1bc7b79387f1060d9de73f6166c3992ba5926f64da093279381127d563255f665d24ccfdd9e8e56a767fafa42449ea4c384d84a1ae6bac1960db3d2ac2e6c91f40cf1ea7426117d212e07aca3be5af1594701759d4acbdf49cafe6a79013e3b9352b1f1857f617d4e1ce234c0433422848aeaa25e328c2cb2a13b6d4812939d4c8cd60d991046ff3717d2bb213cf5df4c35dcf7e607c74ddb7ab1039ecb335e26a2a665374388abe20820694f0f65cfba301d9cbc3242edcc3ea9520593e6272a7c6a22e77fee2859d81565d1264c9bd563f5ba6819c6b28cd36b8504d273a05e02696b312d411fa46df7d82fe772eba6b6ae7973261a4422233fc224f1a370cc1ded699eb34937c9b10ee9f2bc9f6533128f0064c0084c99156d31eb563e407cb33c43b57ace19d28ba4c1a10c9ab4865ddf78c34e5672f6903cfce36a0cb774ad9f22feea986cc6e2ff87c43e2c7ea781e708193acd5d437ef6489495d47ebef45e2e026b6ed9aea06864e4bc1d6c9c64efd9eceb35b688c6e1408540603c626fc18e48661a0891ac278088ed35256ff03e13c7c95624cb5045093ed1769a6605106b594162a077ee840238393b52280b1edd2f3cf75016046cce47b2df40d4a092ecbb660f4a694ec7127c08f99acd9fd55faeace2e170ca9db5294963d5b327903af83be9ad6db437daddc235a66893acc2cb81dd80e28a1fe66b00c9020c81527c982ab7728e081d7fe2cfb81d00cfeb2e0f23b1d5722c3b8a953edb6ee69820db219a4340d132c12c14984aa89e3bdaca00fb26872a9839c92f6a5fc14953427f1df353c0401a6b07f983b2ef49bfc1bf286f033f12b661cac2ee1ea53e9aff8f139cb099e2a963381bf9ba990943e7340fe812a4316ffab6d531e0c0cb55a1348cff2274bfc5f0e80263284fe6af95523bcf195f8fa94eb4f19b6cbafb6c6e950f8370f9e0575c3f3427c5b8e9eb1341368ae117344da3ed9d948c3cd3c8afdb249064cf4c48ed643baf597d19dfa9288883327529444289618406ee5d4fab2d538ec49f0b7eec809f61ac457f749f2fb720d321757473afc5d3a377a0eaacb425e5591026e3a1bae6a785b921903c804dcb8ec220c77e8752e92b80a482f89721feebcba45e533b9ae8ae80091cc940d2eb29003324aa3a8f2f66b072fdd8ffd03f42778dd64b2a428bed433f018e9acce76d85b57240f0050b1cb011459414b81125bdea35d2b067fa0baac925d3b4c52922f6ae9b88d03ae61427894074fd63dd5d45c2622ef5909cd05cb172e0b6441810fe2686ca03b82917bee3d8c0e35909b3b61d45a72045d90302ffcffcc9d21cfe43261b4eb1073aed1d26f4bfed20ffecb903c6875a0f196e43b9237115f69db66db5425b00ad835eeb5a7bba444225d3f57dcd14ca74c4d7c8e95885c13803fe25dce33b1b346a32d08757f90f47e52f1392429899fe420739965581f520b79f13a2e6342824593076b66fc477b5a6c7ba4b0d59ee35fcc63dc902addb371f61de0f338f5003b72182efab63a416cf6493ae16a0f2a058db7c8947509804a40b2e2bb394ba5beccd9f38f31dbdf1cace45c646b4ccc7bf109fde0cb3570fae67adff4c8a8fb360fc739b2f3cebcffecd7998 +MD = 0da901366899d382754b7f99a6aeba660b407dbd383f49514ffecea5254ddda1ed926bbbb50b9ce12455cd5e94f57573 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp new file mode 100755 index 000000000000..e3bd17d5962f --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp @@ -0,0 +1,310 @@ +# CAVS 19.0 +# "SHA3-384 Monte" information for "SHA3AllBytes1-28-16" +# SHA3-384 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:46 2016 + +[L = 384] + +Seed = 7a00791f6f65c21f1c97c58fa3c0520cfc85cd7e3d398cf01950819fa717195065a363e77d07753647cb0c130e9972ad + +COUNT = 0 +MD = b2d4e10214bd7991e3a3e4772f5c7b390178e20c3ff882648a891e44b9d309d91bf5fab74c0bc155a7fac972a9b128a2 + +COUNT = 1 +MD = 608db3176176effb7b7cceb8962bffc67584cc9e9860752f6644c7810cc83f4fdefa108bcf308d4137265fbb1ecf10fb + +COUNT = 2 +MD = c6c0d9c39fbd7cab9b96085f65420d53c0e1ca4f8b79edda3177a20d7a605ee4bc4f1e2589979867507736c39280901f + +COUNT = 3 +MD = 223cb4fb8c18b420df2ce25ed1b60c0d60d324234a0c311717058d0285ed14e02077d56a861e0e2a6474d39ed0bd8147 + +COUNT = 4 +MD = a9ed13848adb2015465a26503d8c3b922400fc2e4dadb579da5115f96eff65151866bca58899297fee787de9305865a2 + +COUNT = 5 +MD = 250160585ebbad4ada427e52b462af268ba791b03ea5e2ead06e51e1763eaade36addcdd7f2d2ca905584afee580787f + +COUNT = 6 +MD = 9ca20cfb96101503380d7356630af3f8c6c183c5c7c73f861144e8f000194560a0ca4913e61262599b88d0ddebfaf297 + +COUNT = 7 +MD = a641d3958798f05269c10999c496ea6324e178c1cea3df8fcf6fb7b8570b30d08b3a724617036e3d7e493c185bd8dd59 + +COUNT = 8 +MD = 361d41e02a7d9c4a2743e0e0ddfede8b917f216a375b44993c4da662f503d7fe5e3ea940102aff4676dbfbbab83ba0d9 + +COUNT = 9 +MD = f2072c4e0efe91519abf3efaf73d9f7dfed66b55c82cf49e46f12695885e3107b0b91321b0ad984104f8530c0f11bb12 + +COUNT = 10 +MD = dc204edcd9b381cf7362c5292a2dcbdc8234b46cfa0c38ea010a0eb4a1b135d6ae9f68724efb9f160b0bb3c4e5656e35 + +COUNT = 11 +MD = 1c04cb6989b8070156bdaf607e2e53537df571558cfdb021ef8eb241186cb31be44b42279f42ecc1f8740f5678ff9bc5 + +COUNT = 12 +MD = 328fffcd1f4a9ad876a1b9ae71289e8dc4305138c343ea94cec62225fa4c20bb8f831da333517bfcbe3fe742920abc69 + +COUNT = 13 +MD = 85dbf0106bf464b2996f70a44d153f835d4a1ed775f71609bbbe51fe40a8f97785bdd65256d54faed5e05282e365a5cf + +COUNT = 14 +MD = fb9eee3197db0d6f0e771827c0f9846b7b989e6c035f3e89abaa2e2dcdd3e8a2651b3e2518fb5d287e2bc0449c8f5c3f + +COUNT = 15 +MD = 249a8b718ed3818a0873f92df3a20b2ac3e0f796c9b6f7204933e01167a9c3f82b82cc2fb2d8073ad864474b6dcbe611 + +COUNT = 16 +MD = 9fe3eeb06de2263bbbf08f0e20e9b9ff8ac0f6ba96316235d6aba199e30d60d8bd8a878f674c7d0ad7cb05b2a5cda927 + +COUNT = 17 +MD = d6298b466c189403382a8eb98dd9a54d0d39d59ae8f5e5d620ef418c55031de5124cb9bf6fa931570292dfb618c4dff4 + +COUNT = 18 +MD = 6a423009ae0859052030f636fca51159a2d3414a6e025c12c811b3f2d8f880af2741c4e059f571339c8016de8b073608 + +COUNT = 19 +MD = 4f31053aa710a9376fa2a410e3458c1b4d9005c66ae01f41c093996f9a8b5c6885467acd9ad4b4bbbe1fa32d24ace547 + +COUNT = 20 +MD = 77a296b5cb27d6d33365d65c6d49e6e27b50888adf2bd8581eac8266a7a182ca05498c65276e5eecbf297ab61c834881 + +COUNT = 21 +MD = ed319f492a16cca4d5ba30381e1ec08c0b66f34bf306b21a651e4693e171598ac9cefaa1f2c3891d5c688bedbeb3dfd1 + +COUNT = 22 +MD = 400577d24b8eeae14eacd5df544b2567bcbca4884678925acb3722ad56cea947989665de03fd86f9550af0b272c36c95 + +COUNT = 23 +MD = 774ec2c381923a8898e798942b6ab7b9689f316aa83b8cf36af9192c7750b239ac72c8466e6c43997c7d0b124fbb86a4 + +COUNT = 24 +MD = b64d7cd2cca30cad4f9a6f7ca3b39d913479a4fabf3b02eb1c0636f91bbece91a9855e3999fa9358836c88d253191494 + +COUNT = 25 +MD = 58e0a41eff4b33bbcb1f8be2406345532be643dc7e0dc1319b576f7d9eeb645fbe1aba0ab8f42ef49ae11e37dceca507 + +COUNT = 26 +MD = e891ad66e4da1ffa63793cff8b36f5c28ca19c51bfe77709fe678c415f4a5895fa7c778ebf915258adff2777adffa2cf + +COUNT = 27 +MD = 4ce67891990de0607bba2b3f7f8c09f036523308bc54d4bb404af382667a933ce2d86bec0b315be538e2d6003e4ebf6a + +COUNT = 28 +MD = 4793cb36391bfb59a5d65cc1eefa421903631a558a544f6276d9d6bad0e826aad41ab892b133267ee2215a6e3520583d + +COUNT = 29 +MD = 963eb0c68937a5b282cb86125b9515cc78c4182a04daba0df72a5095d906b149024318b06c6639fafdccc8c4ca1c8b9d + +COUNT = 30 +MD = 36a9cd9b49a33b3115da7b0b862988a0275b2cf3241b4d4a135dfbc8c1983454ac122822e7556818edc5ae4267d0f13d + +COUNT = 31 +MD = f658aca80477b04e85ac6470c685acee6e8ad6563a6d4a903865b07a99648a2e9749d82bb187a8ce01636244ad30a3d2 + +COUNT = 32 +MD = aefc4b9fd0d99fd6eef4a0f5099cebd9f409a7fce251bb675016d830e7787e812ae90452a33d9ba8d41f9ec40716ddc1 + +COUNT = 33 +MD = b31d8342fe8c5adaecca08fee1d97adcf74131cb67505c155957f740dd2ee3ec7099bc271143e9785f2d7e99f15d1013 + +COUNT = 34 +MD = ee8ffcf5e1455283c1cedabb355489a49de5207a138e29ab9b0b8af5eab6938d1dee47f6315a5e2697b58a39499a2574 + +COUNT = 35 +MD = 05db22799cba19e8a88cc8b07c96725a71f518081cc7c71970f9a132f95f2e2dbbe020a5a227c1eb6927fe53dfd5ec63 + +COUNT = 36 +MD = 6ca724f20838d1a485d698d07d967bda095dd79f56372986eff7fc7a23e9f99e7c3b44a46604979806687c9c1a4c8fd2 + +COUNT = 37 +MD = 05340677c8620a2fd171caf84f344cd83f837ed5d544d1d3c9d116615e9b5624081709e8db92d3fb0a8f771b521f11b9 + +COUNT = 38 +MD = a0e2be50601a3fbc16b49305f5e695e978b971b2c068596fa9bd13f7e7ed3e8c1205313f8a23839625336dbc5d2d6f83 + +COUNT = 39 +MD = 6a997c32ae605df471e7922e7870ec4712beb7d5bf47104462a00e2a1832166ebdecef3455c1af0bc132ca4ca7624db0 + +COUNT = 40 +MD = 67641cc95f9eac54b088c15658c84a6af7303b489c3566f0937b93666fe13a0f520cb7b56265315c928dc1b8361a8af8 + +COUNT = 41 +MD = b0889a08457fcd166a84303029d55eaf531a308de12fbcc6f876ed6d6d377408e9cd3deaee59a41c22ac06813dcc88bc + +COUNT = 42 +MD = b3c444ce312b350d0187ced7ea7b8351d454e4d34ecab213fed966aa630a817f7c70717fa0714750802bf38978e52b75 + +COUNT = 43 +MD = 20d6902f2df906d2c7b9c404cde23a62307790250724e7fd8ac9abb93a44e715f7afe2ff8ed889a9f355dfdd95934ff5 + +COUNT = 44 +MD = f8bd9e71525d0d94def6a774894f0417ac961062b77420570cd6499fed9c20decec64ed95b1f79825efad5afc92d5f9b + +COUNT = 45 +MD = 19dfb0afff19f2cc3faf3874727f6dfc5f16133f5a5a29e54549eeb8450c8e86f64f35b614f645fb0e9ee36cfe0741b6 + +COUNT = 46 +MD = 58f3fd66aa8e6704ba659560272c3af9725af8c60137acd86b2b8b8c334aa9a04065ca7aeac84d6bffda6fe420018d26 + +COUNT = 47 +MD = fd7f8e39744b8fae34d626843046690db47d7225e3ec22ae41963aaffeca634dc607c48c80d69b084749ae6004d50532 + +COUNT = 48 +MD = c31b336be783063bb594fd2aac1794a457246b53084e57e24e254dc46eccaca666ac5ed49cd2a0e8284d89106b023c26 + +COUNT = 49 +MD = fadf05bf17572ca80e771afc8599c903a483e86c53080999d022e1feeb0a102ed60fd98e51d6286c2114b4876316a4cf + +COUNT = 50 +MD = 67e8e0996eafeb0457ca23f8996245bbb4e4a9f69a0bbe150e3b072f1aa3e6feda0bf8d63d126adcc1ac7fbcf26027a3 + +COUNT = 51 +MD = c0f02377d0eef098c89768493203c6ad5384b6968a7bef8edde2ee19a5e50ec9a9c8c583d7adaacb9e5be384d84717de + +COUNT = 52 +MD = bcce2df94092d8b10561a17499d232bfd40a591b9a9284306c12dce48a2040c15ab48f957a93554d3f71569336065ea7 + +COUNT = 53 +MD = 23440d45311673e2a16cc9ff56f7fd63984825b60050ac02819359d4e6cd3ac7c97026dcaaf187136bdc870e997b95e9 + +COUNT = 54 +MD = fb8245292587c40de63b12d41a0d4d88ae52327fffcef876ae2447cbb502e25debe8e7e4f6165cdfa42e17b7a3432e4b + +COUNT = 55 +MD = b4d125497c90fce16368116bdfa11060a4e6e4c41112e6dbb521a2081c463bda8d1246bf4ad5c7ba47a930dcfbd8c925 + +COUNT = 56 +MD = 8c26a31291004c8fada17d135ff35bd58878e8b6b5fb77bc305a81512704ddd92e26dc9560ffc62fba4b31754ad75fa5 + +COUNT = 57 +MD = 2855078eec4ed7ef8d258b7689687b9d4d6963275b5c4a1ab8682d4e9c4e978645207717917ca16ef9e785e2b61ba166 + +COUNT = 58 +MD = fd36c351aa1e105eec035f1971c0602f34601b63710ddf7557787d84ed4022e75a787027cfb40effef0f12a0f2ead56d + +COUNT = 59 +MD = bab50ad626ec56d8dbe9a9318a2fcb2359d0accd9499bd76a8db33922503f40f3b0e9a43af68d537bfac341b343d21d8 + +COUNT = 60 +MD = 937d6cada88fbf1490322c52f9e2a463f3d0d17954d19d07e0b0d4b8d172f0d56a852030b80985328cdd038fb3eb04d6 + +COUNT = 61 +MD = 2ac82984b61b7fbb810f13b7d6d1cba2ab22f381e988d016432a60daaa205e5ee841cce614869164e0ca3e9b5ab7695b + +COUNT = 62 +MD = b1b08cc5d7cd4fd3698e764c938f0d24b24b8f9966f734f9c86df1067a6e3addbe7050181eb52e51565fc5a0fd39d492 + +COUNT = 63 +MD = bfdb13378e6a975eb947d419224b813264bac407ee754ea468aade2e9ff267c5742b4a72fd7a757d392a310f74d21c1e + +COUNT = 64 +MD = bb8d3f70cfd2a243512275860e93b3191fa38caa92ec3309dc50c1ee26819e622119260ed529bd11c5a03cf7151b72b0 + +COUNT = 65 +MD = b5b6bcbadf784e212212a296d600218bd1f6f576a70587337faac9332b637cb38c6bbafe788d023146501ebfff72ffe9 + +COUNT = 66 +MD = d50ff2a926a49d4183070c70c0a95a8ff56ea45928eeac3542492c66b3093fb6ed03d355dc4117ec351a6446579c606f + +COUNT = 67 +MD = a2dcbf96b45206fab7769a26977c71735d8f4543aeb81587b2238636bf84517f81b89394c4c1e7ae935869fd7aa3035f + +COUNT = 68 +MD = 8c250da3ce14a9e08c38a5e8c8a31c45b99ae7f1f61c90d589956ea27c7942d33f5eb737796f7ca35b6fccaec13da764 + +COUNT = 69 +MD = f1746cf5c0b7d045979f1e185a35db13ae22a77ea437cc8f7aa6514e8b6e6a82c615bc96bfb6def8c43d31c6dda35d0b + +COUNT = 70 +MD = 812ffe86f90be9a977de260c6fcfc0682092f8cc1404c25e52972a3a2d953c021a531c6db7502bef75743fb65a79052e + +COUNT = 71 +MD = d3d6f385abc45f1ac8a72f049204701cb37a28c9ee593596b5f38189ffdbac4bab6dbf28c374a0216b7d56875bb9ec12 + +COUNT = 72 +MD = e1fd5e62f418aaf6f245838e419bdf092b7ec3ad02efddf9145063791e352ed3b1c21ff7cb68223e1cb288299ae09e77 + +COUNT = 73 +MD = bec64b051c19b035adb906ffe37112855a787082334286b631fae0b5183341097b37192c96d1ddf566f6909cd0b8b264 + +COUNT = 74 +MD = e82761ac7a5da23236265fd7f8cad06744870c2b5362a8adeed3428ea324066448c98482e1c5b15f0199ee92d4aa0e69 + +COUNT = 75 +MD = df495bcc82cc006dce81997c2799c27e3908032cb059cefbcc687e0cbf561cc05c6a0cd91ac9ecb074392aff7e5e3bb5 + +COUNT = 76 +MD = 404a4cb927ed4bb7d97934dc232d9866dcf1a7036bbf3e4afea357752fe69cbacbf0240c5b7b23a83520daaf22fa2f63 + +COUNT = 77 +MD = 52eb7c7ed4ef722016783f16f5d89a77b0250438953d5372bfba2a1108b698c391e361c4866c188de3112972c69eef80 + +COUNT = 78 +MD = 4cb8e58fe96b142bf063c443cd4462d47397428abec69fc3bc94591b35abfa8a0baec90526b27f3ab1e97a5c19c22b60 + +COUNT = 79 +MD = 93c22a7d0bd3b7d806ee50abedd0f26a80654f0b7187ed48965ab0845b113b9b9093d1969762f268ddec1a7d3c30b11d + +COUNT = 80 +MD = e4df31ddb119ae861c3f2d4d7e2473664fb79532de6ecaf635f235da1629406d7110c776de2838360a4b3fb0fb54e1d8 + +COUNT = 81 +MD = 3741ecfca60572118076e19a9d71a6c092a31c5a523c7458397c934d2eeac17daf03c0ac16b3852955ed9bd0067865db + +COUNT = 82 +MD = 88c6709e3efc7bb8f5e4ae15a83ee8d0c0ec14676d81fe263fb28dd293b65eaf5963ef6ff226628650200f939a8a7deb + +COUNT = 83 +MD = bf514a6252783e67e0a6e9d31d7bdeca857b83b09bcecf020f17471b397991effb31d350a0679f8d080cd63a43bed7b1 + +COUNT = 84 +MD = 70ceeedbd57969e63dcc035af4737ec406b007bb8f1e3d26e63ac8664a809f0803e39bc3581fd229ba6262b0794c3b2d + +COUNT = 85 +MD = 80d09f64b95a411e7282ca8f70d6ae21cbff6ce3a0b84b65c4c137d7bc13b8d1d773dbeea7e5d4bb11565c4fafa0faee + +COUNT = 86 +MD = a17f543a1d5a61585409abd20a3c8fbf0dd756a703b6f0c39fad04bc266b7cb69462196425f5d259ee31f53f3d6fda3a + +COUNT = 87 +MD = be19ea7c1d0c009a81dca1e9a7c6762f9a8191eb82fd72efb28b42b901be4e2385a5d1572d2c7c0995851ff87a649b78 + +COUNT = 88 +MD = 21ed3cdc4c043d8312b30cb972d2766cb0bc6792aa1661b207e505ad8ac5a0a7cd03375862ec8cdc769de60ccec0864f + +COUNT = 89 +MD = 3ba7ef694fbc93667f92bfd36898f65f93addb39328c7ba099f6da2bddd8d9d44d8baee0edf8f151d80f365df0943c60 + +COUNT = 90 +MD = 00d66ff05a5b45a3f4125b0e8363899c96f6788aef4c3c0f1335a8b50785d28cca4ec4c892e3ca23bd392c936171aa44 + +COUNT = 91 +MD = 5c975bcdc34f090299362adb1264dd2a028d6ed74576ef47a3c320bf71cd5ef6a230f4d2ade779c927891238f7eae32c + +COUNT = 92 +MD = 27392d2b874e926ee64374f831a41c89027a87778a88ac81dc6cded5a195935c27a495d5e7411b4472742696c8ce786e + +COUNT = 93 +MD = e1d4b3b786d55611ed685873c6fd80a4fe4a3fa1e958f656c73f1e750967f5c059122a13a8bd50d36713b463149b7685 + +COUNT = 94 +MD = ac779f59d238eee1a1046a7487826b7e53f7171bf985a8a61526caeb0af13610227ff25ea340a9b7e53c646508dd546a + +COUNT = 95 +MD = bae8ec05d6de979f7c614e2d496b3186e27c6c856fcbe9c853b8ceb1476cedb2734f5bfb46e26ee8a0cfa763f5927710 + +COUNT = 96 +MD = 9f3e7209fd277887c19e6b35b03f00ac6c65efc17b38163c5e001b7b2ef6325d89cf6553f8dd5cb3fedb4f6815500053 + +COUNT = 97 +MD = eed180d3d0b1c308a9465fb9f101bd826b17484b9f59e7dc22a2b0ff5d10c0e689169eccd85038ffa043789f65024a8a + +COUNT = 98 +MD = 96cdb425388488374307551dce0ce0e624005499ac861202961f3b00edaf42e45c8905101a62f2d9a5d32a01fd778f02 + +COUNT = 99 +MD = 02c9babd4add11a5f23c1808f72e3dc8325cedc31d28213a04d999dac8f46b866f84ba3dbfbcf1a863cc54d808ffadca + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp new file mode 100755 index 000000000000..491c5dbc5240 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp @@ -0,0 +1,427 @@ +# CAVS 19.0 +# "SHA3-384 ShortMsg" information for "SHA3AllBytes1-28-16" +# Length values represented in bits +# Generated on Thu Jan 28 13:32:46 2016 + +[L = 384] + +Len = 0 +Msg = 00 +MD = 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 + +Len = 8 +Msg = 80 +MD = 7541384852e10ff10d5fb6a7213a4a6c15ccc86d8bc1068ac04f69277142944f4ee50d91fdc56553db06b2f5039c8ab7 + +Len = 16 +Msg = fb52 +MD = d73a9d0e7f1802352ea54f3e062d3910577bf87edda48101de92a3de957e698b836085f5f10cab1de19fd0c906e48385 + +Len = 24 +Msg = 6ab7d6 +MD = ea12d6d32d69ad2154a57e0e1be481a45add739ee7dd6e2a27e544b6c8b5ad122654bbf95134d567987156295d5e57db + +Len = 32 +Msg = 11587dcb +MD = cb6e6ce4a266d438ddd52867f2e183021be50223c7d57f8fdcaa18093a9d0126607df026c025bff40bc314af43fd8a08 + +Len = 40 +Msg = 4d7fc6cae6 +MD = e570d463a010c71b78acd7f9790c78ce946e00cc54dae82bfc3833a10f0d8d35b03cbb4aa2f9ba4b27498807a397cd47 + +Len = 48 +Msg = 5a6659e9f0e7 +MD = 21b1f3f63b907f968821185a7fe30b16d47e1d6ee5b9c80be68947854de7a8ef4a03a6b2e4ec96abdd4fa29ab9796f28 + +Len = 56 +Msg = 17510eca2fe11b +MD = 35fba6958b6c68eae8f2b5f5bdf5ebcc565252bc70f983548c2dfd5406f111a0a95b1bb9a639988c8d65da912d2c3ea2 + +Len = 64 +Msg = c44a2c58c84c393a +MD = 60ad40f964d0edcf19281e415f7389968275ff613199a069c916a0ff7ef65503b740683162a622b913d43a46559e913c + +Len = 72 +Msg = a36e5a59043b6333d7 +MD = bd045661663436d07720ff3c8b6f922066dfe244456a56ca46dfb3f7e271116d932107c7b04cc7c60173e08d0c2e107c + +Len = 80 +Msg = c0920f2bd1e2d302259b +MD = 3d1584220409f88d38409a29ecaebb490ef884b5acba2c7eaf23914bab7f5f0fc97ee1e6336f88dfd4d0a06e902ccd25 + +Len = 88 +Msg = 70ae731af5e0d92d264ec9 +MD = 563359fd93fe09f3fe49fcf5f17e7f92aab589cdec3e55e4c3715e7775814bbbfb8c4c732e28d3b6e6404860812dc6e9 + +Len = 96 +Msg = 69c74a9b0db538eeff64d93d +MD = 88c66389ca2c320a39022aa441fa884fbc6ed2d3cc9ac475372d947d4960579a64e061a297d1831d3524f98d8094404b + +Len = 104 +Msg = a4a9327be21b9277e08c40abc7 +MD = 751f5da5ff9e2460c99348070d5068d8a3d7ffcec7fd0e6f68f6cd4a2ef4226df8d9b4613c3b0d10a168eaf54eabe01a + +Len = 112 +Msg = cc4764d3e295097298f2af8882f6 +MD = 10f287f256643ad0dfb5955dd34587882e445cd5ae8da337e7c170fc0c1e48a03fb7a54ec71335113dbdccccc944da41 + +Len = 120 +Msg = 5a23ad0ce89e0fb1df4a95bb2488f0 +MD = 23840671e7570a248cf3579c7c8810b5fcc35b975a3a43b506cc67faefa6dbe1c945abc09a903e199f759dcbc7f2c4d0 + +Len = 128 +Msg = 65b27f6c5578a4d5d9f6519c554c3097 +MD = dd734f4987fe1a71455cf9fb1ee8986882c82448827a7880fc90d2043c33b5cbc0ed58b8529e4c6bc3a7288829e0a40d + +Len = 136 +Msg = a74847930a03abeea473e1f3dc30b88815 +MD = dba6f929fe55f9d66c5f67c0af3b82f17bcf58b36752f3165c16083fea8fd478ee6903f27f820ad2dd9950afb48c6700 + +Len = 144 +Msg = 6efaf78ed4d293927eef2c3a71930e6e887a +MD = 8218498ab01b63041c2ba0709e3309496124ddf0904543a9e0d9d096a750dda97f7a02208af3d8c618d4be7c2bb2a288 + +Len = 152 +Msg = fd039eb6e4657388b947ec01e737efbbad47da +MD = c5b3130ef8dbc580e1103fecae69c9a882d9ebf5a3def5938b07f843452a09c9f72f0dbca91d33b021cf6aa6fe60d2ed + +Len = 160 +Msg = 9c694943389bdc4e05ad7c2f63ceac2820e1d2d7 +MD = f692c025c5c5f3d1275213c1df9bf9eb6d2188eda90ab5bffe631f1dbf70ebd628caee88b7d149e1ac4e262873979afe + +Len = 168 +Msg = 0fb18357b018b9bbb2cbb4cac50bc85609c92b8e7f +MD = d164306c99e3798790f0923fe92dbf2f96c3907127dacaa467c766ac75788062589272cb7690b8af2030dd8bd61a3df2 + +Len = 176 +Msg = 26cb40a460e2e727aeb867e0140d0f34790110deb5d7 +MD = af2a42a4c67c3226c55b89605b0dee27e796c2792115f6097203db5aed89e35f563a8246d399fde00c2a5b97ed5a5e17 + +Len = 184 +Msg = 6690a3a0373c829facc56f824382f4feed6eb184642b4f +MD = 84e1b68bc9e2daefc19b567dec911ef46f5f37a74fdbbb6155e7e646f2735df2ac44e239689eb5b536465dc571e55cb2 + +Len = 192 +Msg = 7d80b160c4b536a3beb79980599344047c5f82a1dfc3eed4 +MD = 041cc5861ba334563c61d4ef9710d4896c311c92edbe0d7cd53e803bf2f4eb6057235570770ce87c5520d7ec14198722 + +Len = 200 +Msg = 02128283ffc0cfe254ac8f542be3f05fbe4e855dd22ae98a81 +MD = 3840981a766d725f83d334e8982965033a5fbb5107d94ffef33b1f700cd46348091a49f6620c37ae3ef5b20513494826 + +Len = 208 +Msg = 27911dd0a6843ccae965d876aa1916f1dcd71e518f7f2197152e +MD = f59f8428555984d1526cded8129c649fb1b683d35cec7c5e1209441a6a9e7c17f0784151b5ab8a8c492b402a3acb98c4 + +Len = 216 +Msg = d9378bb66e8c8dee556d691cbc9fdddd6333ca5d50668862c3c57d +MD = 994532d1a557e990b1cc9e0395a2ad8b05619ca322db9da3c4ed2ee194c051d04582fde72dd2b8f674cf6ec958db75da + +Len = 224 +Msg = ae1828047c5f82a7b9712f3399832124b892f2f7aea51c8fe3536cd6 +MD = d51111f8bffb44d81ad19683198f29d2033144d3cd856c749cac5b9cae0e712f500f8d0ef813f38e305ce175a7d6162c + +Len = 232 +Msg = 7dd2d76fa054cf461e132e9ef914acdc53080a508cdc5368ab8c6224ff +MD = 6c0b3395e4c86518ab0a06267320ee9ec95e50385b7a2527ddaa1bd0ead262c56122d4f4eb08b0ae22b3ee7e6f44dd18 + +Len = 240 +Msg = 6fd72888a021f36e550967cb5605b55b78657c9272d93c3ded340d67da6f +MD = 0551583a5b4007401c77ef4382fd8e245c9cf12e976c9766af6b7ae3c7e07a82b3079f903b083d5ec85cb94e46a85ac0 + +Len = 248 +Msg = d500eb9546553619cdc31e0848c502db92d547efef3ae5eeaa22258afcf0a9 +MD = 5edde2f94f8695f277ec05efcc00761fafd272200aed0e63d221c2b6c65b4972a6526f9a1f2e6ace0e81938f043fe877 + +Len = 256 +Msg = 6189597e0198a18c65fa0bdd0797f13037c75c4058b7d3454c0f71bd2dd13b6c +MD = 110630ca7631b7620e6bee6ed6e929098965571936c34829484983eba9532b8175528c228c57439453f027a4f7c83ca3 + +Len = 264 +Msg = 243b941d748541af303f8e9d2c371cd03e437d62a9df485ddc176dc65da8c7da00 +MD = 5884201f7a555ea3c5deeb019fd9e8c161e1b89756045e475b141ec5135ce5a41c93e5e1f79534d36fd8345ba434da43 + +Len = 272 +Msg = 2dc3d789582c1a806c3b491d5972ef8f1733f1f5e02866dc9de2a8029ec0ab608d13 +MD = 05a3903b519cdf679120c7ccb4ef178b58e4502fcd461360988fa06669294851e629d9dd3e77ffb73d24599d5d3edd36 + +Len = 280 +Msg = e5b3f6962fe57230780b3d55b29effe0dfebde2c81ba97d4512ecdbd33eca1576a7f82 +MD = 7ac2776afb74f55bbc4f6eccf825ee13ac7445fb54974e6c24ebc0f03fdcd8530199a61106a31b4279e02201ee0f54fd + +Len = 288 +Msg = da03486aa3cebbd6502e9f5a6f0f835e973a581befcc1aadefe7b3696ba71c70cd58c584 +MD = 02c44ceec0bb7dc0f664ebe44230192b5b0bb646bb944d23fa1ff3586dc0523fa9d7f0dd6df5449ab9edd9a1096b07dc + +Len = 296 +Msg = 3c686d321ba66185cdca83ba9f41984fa61b826ef56b136e13f1239dadf6e03d877866ccb8 +MD = ad624edd9f2c3a32b56c53d9e813c01d66bcfe424c4a96907d52ac1ddd68370ec86dac67504a90e8a8e75502e01081d2 + +Len = 304 +Msg = 4dcff99fac33840f6532547fb69b456902d6718fd5d4538e23462db6d00da61975f2b8e26298 +MD = cf37dd27997c1bb7e6dc405170066e74c6ce517c029ed8dce126d025da74e0b8e86da567e8d7d8d5b5d3e2a546df7489 + +Len = 312 +Msg = 2799f672328834d7eaef9439795d35ce93c9094f58ded9f17c968a97a50a9e461489fed988e7f6 +MD = 85cfc23c97cb13910b808e7033809a45aa0b7f7138de618c2ca622c8b813c988e264af3b96c7925dcbd1d2761757d800 + +Len = 320 +Msg = c7e947507822f28a562745a8fe6fed6cb47d73145804c894954e21245cde04fa9155a35904926aca +MD = 8bddf3baebbc5b04fe0b0a9c3c2b730abe918ce4892d2843c613ee96da0228512f0d1307c7d1a8922e79a92e957dd18e + +Len = 328 +Msg = 6c497bf6ff69cb39e3faa349212b8b6691ca237905ac0099c450b6d33abf362bedb65bdeb307bfea23 +MD = 3639fab6191b35246278522cfacee0cd5b15580a26c505ae3c46b4b1c2572016b48f1b012bbbedec47916950fbb33a1d + +Len = 336 +Msg = d15936f3b0c9018271812b4c81453c4457c7edd110bcea7f5735d6f5882d8f27155eb4cc285a65138ad6 +MD = 0293eeef0aa3392c93d9c6ca89c08b317622572d4de2286a4b9ae6c2f9c9e0e64ee6c483d4f10859077e3c6868430214 + +Len = 344 +Msg = df18139f34b8904ef0681c1b7a3c86653e44b2535d6cecd1a2a17cd5b9357be79b85e5e04dd9eff2ca8b9a +MD = db9e171d6e3336631c9ceec6b4d732ce62b015939269fb69fae7d22725500e8a2fc9f1459cf0a31fb9d16d7c44583f52 + +Len = 352 +Msg = 0459dcbc149333ea2f937b779a5f3728148449a9aea3662cdd2cc653ce6a2050f9c0d54bf9326c039b263eb9 +MD = 464ba409fbb45e985f84ee24662eb7c042c3c2ad9649f1ac4a8b2be9c07d37ed2e4284362057493f6a7e52c356b05bc5 + +Len = 360 +Msg = eb3f7002c8352270340b8da8643622e5f7e32cdb208a0dec06c6cb9e6b64cc4d8cb9de1d49397b3386464a25d1 +MD = a26bd76ce42d818dbec462d8fe7cdd957e6b84ae8750fb5e1c9c76bc6000e23737e073a59b4600e5056524edc667909d + +Len = 368 +Msg = 47e3e3d8c68ac9d9f4b3759d8c7d9dd901e35b096ee4c8b6cbe0cdf467463630926c08289abe153bfa1bcde3cd7c +MD = b504ef475a568f9caba8352a0b2d243acdf3d2b41d8890a6fb3abb8aa28a29e0c7527d20e2d79b25b400ec27c314db72 + +Len = 376 +Msg = 838d9c181c5ab59592723bd69360e0d7fd15232beada7591ea899ac78ffd53a32fc73a5fe522ed35d92a6e2bc148ca +MD = 53e99e1158d59032ffe4b5ea304c7d2f7a61b6b2a96ac97832ca26013549fe3f7dcdf926bd74ceabe4f1ff172daed6e6 + +Len = 384 +Msg = a90d2aa5b241e1ca9dab5b6dc05c3e2c93fc5a2210a6315d60f9b791b36b560d70e135ef8e7dba9441b74e53dab0606b +MD = 4a16881ce156f45fdfdb45088e3f23be1b4c5a7a6a35315d36c51c75f275733319aca185d4ab33130ffe45f751f1bbc5 + +Len = 392 +Msg = 8c29345d3a091a5d5d71ab8f5a068a5711f7ba00b1830d5ed0bcdfb1bb8b03cd0af5fe78789c7314f289df7eee288735fe +MD = e27b39a96255ff69c45285fca6edaaa3954ce32c1e3d9b1f60c1b6676594bb45caf0889fc11daf93a1b60746229689dd + +Len = 400 +Msg = 32876feefe9915a32399083472e3c3805ef261800b25582aa7c36395fd3ec05d47b49c4944bbcc2b8b5ebd081f63ae7943d0 +MD = f96433cdb69a607433ea2eb77d87d3328867dc4076b67ccf17f50f9e08e89a86624b60f2ecdb8affcd431fc13173fe75 + +Len = 408 +Msg = e2e77eb54f321f86f52ea3d3c8cdc3bc74d8b4f2f334591e5e63b781034da9d7b941d5827037dee40c58dc0d74c00996e582bc +MD = a352ab33ca730482c376bdc573c9d1dc6d3597f9be9f798b74a57beaa8e9c57b78ee6761056eb67363e882fefcad4fb9 + +Len = 416 +Msg = da14b6d0b2ec4cf1e7c790e7f8f4212b8f4d05f50e75e2a56a5d70623c0d2e0115a15428129109b3b136d756e38a5c8463304290 +MD = aae7ad977e17ac0e560c0e0186433420f9fddcd191b9e91567cee05df88f1e1aee50424a313998a873f7a9c289a02217 + +Len = 424 +Msg = 2db06f09abaa6a9e942d62741eacd0aa3b60d868bddf8717bef059d23f9efe170f8b5dc3ef87da3df361d4f12bfd720083a7a035e8 +MD = 85d4e3e5abcb1b59ca6f551eb43b43ff64890511f73a9083a2ce6e9c2861c6e9664c765629024f4b01b0cd1594a5981b + +Len = 432 +Msg = 26bad23e51c4560c172076538b28716782ee6304962f68e27182048948d5c367a51a1c206a3e9b25135b40883b2e220f61cb5787ed8f +MD = a44c7f84ab962f68283404f8c5c4029dbc35d2138e075c9327580baf89f292937bf99422e45756b3f942bf0a5ae4acb6 + +Len = 440 +Msg = 77a9f652a003a83d22fb849b73fed7d37830c0dc53f89cea7dbec24e14f37197765206fe0e6672016e4dec4d9ebbe3e1b4423771a5d0a8 +MD = 29c8bb39bb2aad419a00a80216ec71ec5ec9ab54c41927e3e3f2f48f079a5886d7fe89db98c807ab686d2339001d6252 + +Len = 448 +Msg = 268c7b3a84849fec5c769bc4ad377dea10c9d20c91dd17fdbd9670a2fc909d0e212129ec40dee41dbf6194a3b04ae8be5e84ad5426ca4496 +MD = 0dfc6ffcf4a387ec09ff862c6139a6f7ac77abb2b5e1f6dc814eb71525f8657ac74a7697c2975c70a543af0e227d03ca + +Len = 456 +Msg = b8324341a6891a6b5e001a7d2ebba6e02e8335c124185309a4c9e9907c43bd8d4fa73c527fdf783650316dd24b148870e1436ac05111e9cdcc +MD = 6278d1cc17fb6d54129d04987d4774fa846dcac4ba8b6b72f41e63dc387ce0081ba29fb2c17c6744edae24e669cc9e75 + +Len = 464 +Msg = 5ef8b3d79d299bee2c414560c7de626cc0d9fb429884aa69cc30095ef1f36b7e03a8ca25fb3601189f163b209e0facf8dc447f690b710fb47b72 +MD = 7ec9505f33f4a5493574422de078e0490b61be8e8d6f158192bb7d2bdc2dc335598dc88d9b443cd1c14b883a77119df1 + +Len = 472 +Msg = ad7321c9a8b8f0bfe100811114270daad57f6e88772326b62d88a37a6f55c2cf9f759115ed6a590878e4dcefb592db151538db7de20229d26a181c +MD = 3782d2caa537294e809e9df837b1b07e2f1df07d0f4c12e12459f56eeaa478d5b3a41e519d9414eafa5ddd5661c831ba + +Len = 480 +Msg = 0719d9664541f0a824f71c83b809bb6afc973c9f7428e1ed11f7c29a558e1698b796aefb49eec2b098faf06bd43e82e1312bf0388c38a5bb523506d3 +MD = 362c05f678df92883d56e19221391fb00d0f0afcec51d3e0feb15ba2fb60693b09d69118af649648933259d7b1e240ab + +Len = 488 +Msg = 5415c2596aa7d21e855be98491bd702357c19f21f46294f98a8aa37b3532ee1541ca35509adbef9d83eb99528ba14ef0bd2998a718da861c3f16fe6971 +MD = 8f9fd7d879d6b51ee843e1fbcd40bb67449ae744db9f673e3452f028cb0189d9cb0fef7bdb5c760d63fea0e3ba3dd8d1 + +Len = 496 +Msg = b979a25a424b1e4c7ea71b6645545248498a2b8c4b568e4c8f3ff6e58d2ac8fbe97be4bea57d796b96041d1514511da5f6351120be7ab428107ef3c66921 +MD = e248a64b6ef112bf3d29948b1c995808e506c049f3906d74c3ee1e4d9f351658681901fe42c8e28024fe31014e2d342b + +Len = 504 +Msg = e64c7bb9cd99ce547d43de3cc3b6f7d87a2df9d8a4760c18baf590c740ec53c89bfa075827e1f3f2858ce86f325077725e726103fbe94f7a1466c39f60924f +MD = d1e5a72d2595f38714c6198ac14f8a5cdd894dcf9b4b8e975174b100df7bbf4f7ce291b4864f27c0b64e6330f6c1c82c + +Len = 512 +Msg = 91b7a1fd0e20072d9c5be7196e5eaf8df36fdf145895b30d4e4c02010d7c663499ac9d7a44732f4c7430511ba6fb0ae4b3dc9405523a054fdf962f5c5b79c423 +MD = 07c2e0aeae30da83b5a6b320aa1cf727b10c2034583d7acda55648fa3daa017aa15588b6e2149101c56e3d7df7c76df1 + +Len = 520 +Msg = 5bbc2d4efe63cbfc9fc221dd8d8384075a79c80a27d6a8c5219e677f4c5bb8338013dc2ab1770acf735d13c0bc704621ec2691350cf3ea2f53bded45ef8fc70702 +MD = dd0bbfe4b799642191abe316df9d59a3743566778b4459c51c3be3f658bdce45516ad188fbe1a8cad8a1fa78f8ebb645 + +Len = 528 +Msg = 129549278e8976c38b5505815725400c3d2081edf141ad002e62ff299d9a0743f9c9f25971710b194dc88285d50b6cec6e140c19072f51cab32a9f6497abd3e407c6 +MD = ca26aec527fadcd5ebeb4eafa7c102f79a3c2edb452afd04f6162dd7a17bdd1aad7d616508a89a3ec6a40791d915acc8 + +Len = 536 +Msg = b9a9f378adeff4337bc7ec10d526c6dda07028375549f7fda7a81d05662c8a0da3b478f4152af42abb9f9a65c39da095abb8161ba6676b35411234bd466c2914e00370 +MD = 99914f684e0b317f9338af0c71e9655a3af7153eb9fabaae61454bf8de9e0bfd274c1eff6c4b550e47afcb3b20fa7d9e + +Len = 544 +Msg = 101da5b09700dcadf80e5b7900f4e94c54d5f175569a854e488aa36fb41ab7220b0662178ca07a596768528123de3b2a3d944aa412875cedfeaf58dcc6d5b4a033a53b69 +MD = d3e32c9b271e11e4968397d85d76938b974ac1ba55bcbe8d7b7da02dbd7e3b9c9af0d98bbd7e50c436fcf9e3551e3432 + +Len = 552 +Msg = 14761bbc5685b5de692973e2df7c9c4750889c19a952f912c817890546d5e37d940d13a14ac7925abbd875b8cd60e4920896ce6decc8db9f889da2b5489e1d110ff459d885 +MD = 272222ed50631aff465c0e6fe49ecdfdca983bcb7231e50903e200b335b845108202c28315912c9c4fd50e2c6f13a9ea + +Len = 560 +Msg = ed538009aeaed3284c29a6253702904967e0ea979f0a34a5f3d7b5ab886662da9b8e01efc4188e077c2cdeb5de0a8252aafbee948f86db62aae6e9e74abc89e6f6021a4db140 +MD = 8361b680243b1661d6f1df53db363cae41c2ebb7438c00606d76b9c2a253faa1f09d6f520d69d692ec1dca0c7885119c + +Len = 568 +Msg = c434d88468f1eda23848d0804b476933f24baeadec69743dd90d8455f1e1f290f6f1aaf3670c4c74f76d3ab83e9bef21ad8d9208c712ca478e70d5fb3c4bd48834c969dd38f484 +MD = 9c26e96fcc09a76cc13d24ad25c9cef4300e96e97e4fb59b441baffed07f6a70b1464f2548c7fd7839810dbb9e9c1e18 + +Len = 576 +Msg = 3064e5ba1e7751bf7198e0811ff4d4ca17d1311c25d9c3a316b562691cde75c974b0b52645c134ddcc709d77b6c1bd24cd684265d723c308bb4d0159e6b16d97ed9ceaa57436d302 +MD = 1ea779739b204abe911b4923e6f60fece271eedfc7f074fe1919f0cbc6ce2a99234b003389520884b660165f5a1e80f8 + +Len = 584 +Msg = 89d9521ad84b1c9afc2fbd0edc227193acd3330764b0d2cb71bf47c7aac946af85be13858b55976009f3b36b09ced4308052c817c9c4d0295225f61a9659a0874b88667cdcc5213919 +MD = 4209bb8f869f6f17c8d5c368c489ac51a75e24a85a12de1b16fefc292ce636ff8fa360e82f05684f6b0b074ba370a933 + +Len = 592 +Msg = 3216662da0227993d88288187177a0287de4eccf245d7c718b8045bbfb8869d93f1fb9e94d7478b0298e628c07e0edaab01dcf79264dc05f8b2181aa3f831dc949726fbcf80de4c9c9ed +MD = 64c45e018cfbc88f8f4ffe3cef0df3a94aab3049fafae28e28efbb2a4b94809eb302caf901010abfa194f72965663d35 + +Len = 600 +Msg = e776e6749c5b6c7def59cb98340984539280a9874f80412d4df0ee73d58acd1094d49ed4e35125834cf8cfe349e599144e4f2e200aba4fd3eb6d78cde027c1d5620e0270b5e83ab26b8d32 +MD = 94bd67b7f2587b0bda5487cc45d00e4365f1ee40073cdf0d23a5ea3fba01eef42a46bfbac5306d67be02d8d918ae5c9a + +Len = 608 +Msg = 5d8f84b2f208b58a68e88ce8efb543a8404f0ec0c9805c760ad359d13faab84d3f8bb1d2a4bb45e72c0ec9245ffda2e572f94e466cffa44b876d5c5ed914d1ff338e06b74ad1e74d1405d23d +MD = 947350307748c29467f00103d0a07c3c228c5f494fc88fe2352ca5d10449d0dda7076780c05439a09694eb528d1f477a + +Len = 616 +Msg = 357d5765595065efe281afb8d021d4764fba091adde05e02af0a437051a04a3b8e552ec48fb7152c470412c40e40eec58b842842d8993a5ae1c61eb20de5112321bc97af618bbfbaf8e2a87699 +MD = 32286970204c3451958f5155f090448f061dd81b136a14592a3204c6b08e922ee5bb6d6534dbf8efb4bb7387092c8400 + +Len = 624 +Msg = a8cb78e1485cbb7a9474c1c1f8e0f307cda5139a7e947df5ea20ac330a6dffcad4a9bd755f9f58724789eeee532615be550dd84f5241fde0e3058aeedbf287f02a460445027f5e6b3829bf71ecf4 +MD = 51168bfeef8a981c0def0c4cb067baf15ce5feb8d5f7e9d6076b2836267391aee1fd3a0b5d3434ceb5cf2d6fa06fa063 + +Len = 632 +Msg = 81acca82545e767ab59dcc750a09849cebad08ff31c9297f4fd510ebe6c27769938319180ccc66f36b1a7cf9c9f3538b0f6f371509f77cf0bc4d6d87facc85b933f2e27f8e1bf6cf388f80c0fcbfba +MD = 4ae44d6509986893a8414753b57d11f9c554d89c15ad6d70687c56c6c2ac73537acbb0d51f48e6bea6cf762d58890d7a + +Len = 640 +Msg = 94987498b1ca87a6f3fa4b999db726115c455d0ec24029b2f5810e49a94668864b8c470f7fc07c3dcd97f41c973b45ba4fa7879ee7546596881573b6863fc39d940eb3fa3444084f721341f5d23d2561 +MD = a733b118be72a187ddcbe5ba67e04b589f9cd9f8482c4bd9d64c580aba7d19d2d1f9c1ddf95fe6efdeffd44f67fcabb5 + +Len = 648 +Msg = de6b32c2d40d0659166db235259b530ea43f44e75d8b3e9e856ec4c1410bbea3696964af8b6c5dfd3304282369a4bc4e7cf66b91fecd0c7c105b59f1e0a496336f327440980a34614ee00fff2587d6b813 +MD = 17ba30c0b5fc185b3245313b83dd0481145953101128914765784af751745b8a2b6a90a434548f3adaf1f07f18649890 + +Len = 656 +Msg = 854211bedacc19f77b46cfa447a4ad672ea9b643f09f5cf5274ba28888207e2466b38127776fb976db8ad7165a378df6ee1e3a0f8109c9aff7e0d6126fd71333c6e6ebe15d7a65151d6a4a83b82c8a6f3149 +MD = ca85632a9f7c32ac4705c6458770025dda4fd07a8d5d6921b897b0da490d64400587649f2d20bf608b9a18d071b63b48 + +Len = 664 +Msg = 822373d9d3d5b06a8da48a43095740fb98c9caf717350fd2c3b058024ff705b9346b7f0a495a6d4d93802bc45ece777f8c6a6e7c2ef6b8135115ff911a2ba5241665b6f7cbfa1b9d93b011b3aaa1dac1853fb2 +MD = 6e84587c8c6e54353a6032e7505902ef7f0f0538dd1bb32922e13a7d4d98c47a541015381eab27e9186398120da7fb32 + +Len = 672 +Msg = c04b701f688092bbd1cf4217bc4b5877f2e60c087bdac46611482a61d51f820140403bc85be0c336332da0938734bde8c502014f3509266c73c6c93c22a1bd0ddf15a5ce7410c2894e9d092e32c079922ba1abb7 +MD = 75c585503f15a526113608bc183180b1cb80f4d1b466c576bf021b1ce7a1528391f70e10446681849fa8a643cb2b6828 + +Len = 680 +Msg = 009dd821cbed1235880fe647e191fe6f6555fdc98b8aad0ff3da5a6df0e5799044ef8e012ad54cb19a46fdd5c82f24f3ee77613d4bed961f6b7f4814aaac48bdf43c9234ce2e759e9af2f4ff16d86d5327c978dad5 +MD = 02a09d37d31e4365c26bec0eaacecf29eea4e8d21ab915dd605248764d964f10ebb8fafdb591982d33869a1d08a7e313 + +Len = 688 +Msg = 0b7dd6709d55e0d526d64c0c5af40acf595be353d705be7b7a0b1c4c83bbe6a1b1ec681f628e9d6cfc85ad9c8bb8b4ecac64c5b3a9b72f95e59afefa7bcec5be223a9b2b54836424afde52a29b22ab652d22cce34b39 +MD = 5c84ae39d959b79555231746ad5b33689a31720ed0070f6772147977edd0aead07fb8b7b71b0bd587ebc5c1a80d564c7 + +Len = 696 +Msg = 3e9b65d7bf4239420afa8639c8195b63902b24495b95c4143978e49843d88a92d1feed2eed1a88cd072d6d04ea26dce8ee4b14896fdb69bc7ff2971ed8ac5655148d2e9921218d74efdf17c56b533d0bb17d11e07d7458 +MD = ab7890d1b51af10285752bf9da5eee5c3e87a285dc33262d0261aa9a575f303e94845d7ab21b48f4e6884568cd78b550 + +Len = 704 +Msg = 9436da433d1ebd10b946b129cb34bccec9b8f705aaba3f8561352ed36a8449aba2dd7ba15b1bc308b0c02913163af63a346524dff5521432db477f529606afb5d552efc95cb040db566b4d39eddaa19319e518a7b5c6931e +MD = 968ae9104f9c907c5a72936250dfedd62cd04f6e5ddd2c113490808a11884449aaef5d013ea3993a6cb6fc5c08754408 + +Len = 712 +Msg = 37254bf9bc7cd4ed72e72b6bb623a0cc8eeb963d827aef65ad4bc54913235b6d3551533ce33421aa52ffbf186eb9a2787188eeb1b52ee645c6d4a631bc071415c80014940c28fbfeb0db472c326c8dacfd6ab21f3e225edef3 +MD = 975e10fac9aa77b780e5f6c2151ec4a3c72ff26e41233cc774c074df1b78cce5af1191ba955a0bce15926ae691b0ffe7 + +Len = 720 +Msg = 79e77cd08a6ef770bbe4bedf61557ea632b42d78637149670d4d6157d56ed7b2ccaee45d9439dcebc557b4118e86c15aa0ccc21c474b21abda1676cc56434d6d46422993e66dc99387dfa985358accf69884b9dd18a2c4d04448 +MD = 94729f5f99a54f5a3ea69233ff9d522392d4596eb6ac2bbb07492ece3c67317412bb47ae317ddd20536c3adc003862f1 + +Len = 728 +Msg = 64b76cb554f6becc238a3fcfc3eb97993667ec82fdc3fb28d42567709c3250c7997328aeddfdc2750451ac462281bf66fa94f4b8712c7a8342660574f20268e707c466627519c56259fea55be91e10faab3ad2ade6ce8b6557f202 +MD = 26d48ef5067d704ee9e2a64e399de23068908b3c911ffc4056c168362c37385c92d37d51354b6505a82c4d22fec37eaa + +Len = 736 +Msg = 3df27829bfb1ab7d381f146b30370ef56b392b73b35b1be5d8bbcf88f499dda7f3c327b45350b8972991ee466545de96560cf451711fda884e3d9b2af3e909d655d25cee1c931beda79c40fa507097bdf1126771a7b9543ad5cb84b9 +MD = 5fa4ebfa24150236c03409f0857b31cb95b0150f381c8858b01559957b1268f73c698709233e6b15468675a102d0c5e5 + +Len = 744 +Msg = b00f4e67ca08ccfa32b2698f70411d8f570f69c896e18ec8896cfe89551810543303f7df0c49f5b94783cce7df8d76d0b88d155633302d46003711f233339b1c9a8c20164ec8a328890a4932b7d90d92d023b548e4820558f8bd327010 +MD = eaa756b5892fdfc793d74e3f9f4d6c7a5a6a2241dd11e0c38ced59c8ec7be377a41d1d06774a5970ce9722d8e119d0ad + +Len = 752 +Msg = a4f95f6a46a9cbf384a7e98e102d1fdc96839d1bf26b35a5a0bd6cb9734fd17e8a178d4581943c0fe469fb4fe94cc2f15e1ef59ae05b35324eb57ca07dfc69d42d41d80b3c3bb64e1aea143c7d79790a56697dc803ec93e6c68f27f6761c +MD = 1aff8d9c64f0c162ed0195d1f3a342a010d14be0636903c48020ba42de1cfa8b98ae2142d89af3e69e9eb4c735857dd1 + +Len = 760 +Msg = 02713084bf93fdc35135515243c3bc0f4b2b447f2d3461c0dc104cbfe23479ab036762a91d1987c953f7b3386abc80b8734a1d4eabf94f3a9f2fb62c943152b5253846fc2ec8dbb2e93dc74857a7b05fe2d7ec8040ba8b0d9ae69777ee739a +MD = 84da02114e341a3636f00822b32bd21a8a1f7b39f2956bd97f39346fedf9aae63b304c65c93a541e8bcda549576d5f27 + +Len = 768 +Msg = 00ce225eaea24843406fa42cc8450e66f76ac9f549b8591f7d40942f4833fc734a034c8741c551d57ddafb5d94ceb4b25680f045038306e6bcc53e88386e2b45b80b3ba23dec8c13f8ca01c202ae968c4d0df04cdb38395d2df42a5aff646928 +MD = 81d6e0d96575a9b8ca083ee9ec2ead57ddf72b97d7709086a2f4a749d3f61d16423463487562c7f09aba1b26e8cae47b + +Len = 776 +Msg = 7af3feed9b0f6e9408e8c0397c9bb671d0f3f80926d2f48f68d2e814f12b3d3189d8174897f52a0c926ccf44b9d057cc04899fdc5a32e48c043fd99862e3f761dc3115351c8138d07a15ac23b8fc5454f0373e05ca1b7ad9f2f62d34caf5e1435c +MD = 00e95f4e8a32a03e0a3afba0fd62c7c3c7120b41e297a7ff14958c0bdf015a478f7bab9a22082bfb0d206e88f4685117 + +Len = 784 +Msg = 2eae76f4e7f48d36cd83607813ce6bd9ab0ecf846ad999df67f64706a4708977f0e9440f0b31dc350c17b355007fed90d4b577b175014763357ce5a271212a70702747c98f8f0ad89bf95d6b7fbb10a51f34d8f2835e974038a3dd6df3f2affb7811 +MD = eb396cfaf26ee2775af3c9a3a3047664ca34cbc228ccbb966df187d518717df6a328ecc316ed0ed09b170080eccc486f + +Len = 792 +Msg = 093e56d33bd9337ad2ad268d14bac69a64a8a7361350cf9f787e69a043f5beb50eb460703578a81be882639f7e9ac9a50c54affa3792fd38464a61a37c8a4551a4b9ff8eed1f487ef8a8f00430e4d0e35a53ff236ce049b7a3abdc5cd00b45c4f3d49b +MD = 4a339128486e5b274fc4ed538c0ec9e57f780e9c500c5f92b04ae81a22fbeebf3785259a0bb3b6d9b47f31873cd8dffa + +Len = 800 +Msg = 0593babe7a6202077c026e253cb4c60ee7bad7b1c31a20da7aa0ce56b622eb57ed07d21a7f0ae6c6fe3c8398cc48353decfb287f1204e024fcf82a13059953b9f85797ab2217dc8dab34a13226c33104661c1ca79396e7d97e91039d32bafc98cc8af3bb +MD = 5981815c1618cc49cd5cf71a4b7b32b8cd7b7ef553bfaef2149ac723ff2582a2d345c5bd05943e155ced1e5f091c5601 + +Len = 808 +Msg = ae1828047c5f82a7b9712f3399832124b892f2f7aea51c8fe3536cd6a584b4a7777cc1ecac158c03354bb467b8fe2c8ce2f4310afd1e80fec51cc5ad7702566b2c5d21bc6571e4b8e7c59cb4c9e23f1ecb57ada9e900e4aa308874c2d12d34be74c332bbce +MD = 7257f5bfa7d33d1cf5f4550d0cb78750e84c5b7d25027da6acec64bdf30879a0e5c97fe7c468e743aa5ec2bddb29d193 + +Len = 816 +Msg = 3bceedf5df8fe699871decb7dd48203e2518fb0fce0f865f46adce5c133a921320bf40915456204869a3ceb5fca3ed40e0a41a64b8951f0fc580694cfc55bd1f5ce926b07e3e32ac6e055de9b961ce49c7ee41e06b024559b933a79518192e969855889c85d1 +MD = 60d7f8bd85fb7a13701db5aded2b7771ab5e476ec34f1fd4298978defbd2b31bb2979391559a164b3ed28f6a39031a11 + +Len = 824 +Msg = 6c36147652e71b560becbca1e7656c81b4f70bece26321d5e55e67a3db9d89e26f2f2a38fd0f289bf7fa22c2877e38d9755412794cef24d7b855303c332e0cb5e01aa50bb74844f5e345108d6811d5010978038b699ffaa370de8473f0cda38b89a28ed6cabaf6 +MD = b1319192df11faa00d3c4b068becc8f1ba3b00e0d1ff1f93c11a3663522fdb92ab3cca389634687c632e0a4b5a26ce92 + +Len = 832 +Msg = 92c41d34bd249c182ad4e18e3b856770766f1757209675020d4c1cf7b6f7686c8c1472678c7c412514e63eb9f5aee9f5c9d5cb8d8748ab7a5465059d9cbbb8a56211ff32d4aaa23a23c86ead916fe254cc6b2bff7a9553df1551b531f95bb41cbbc4acddbd372921 +MD = 71307eec1355f73e5b726ed9efa1129086af81364e30a291f684dfade693cc4bc3d6ffcb7f3b4012a21976ff9edcab61 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp new file mode 100755 index 000000000000..5e56cb7fe36b --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp @@ -0,0 +1,408 @@ +# CAVS 19.0 +# "SHA3-512 LongMsg" information for "SHA3AllBytes1-28-16" +# SHA3-512 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:47 2016 + +[L = 512] + +Len = 1160 +Msg = 664ef2e3a7059daf1c58caf52008c5227e85cdcb83b4c59457f02c508d4f4f69f826bd82c0cffc5cb6a97af6e561c6f96970005285e58f21ef6511d26e709889a7e513c434c90a3cf7448f0caeec7114c747b2a0758a3b4503a7cf0c69873ed31d94dbef2b7b2f168830ef7da3322c3d3e10cafb7c2c33c83bbf4c46a31da90cff3bfd4ccc6ed4b310758491eeba603a76 +MD = e5825ff1a3c070d5a52fbbe711854a440554295ffb7a7969a17908d10163bfbe8f1d52a676e8a0137b56a11cdf0ffbb456bc899fc727d14bd8882232549d914e + +Len = 1744 +Msg = 991c4e7402c7da689dd5525af76fcc58fe9cc1451308c0c4600363586ccc83c9ec10a8c9ddaec3d7cfbd206484d09634b9780108440bf27a5fa4a428446b3214fa17084b6eb197c5c59a4e8df1cfc521826c3b1cbf6f4212f6bfb9bc106dfb5568395643de58bffa2774c31e67f5c1e7017f57caadbb1a56cc5b8a5cf9584552e17e7af9542ba13e9c54695e0dc8f24eddb93d5a3678e10c8a80ff4f27b677d40bef5cb5f9b3a659cc4127970cd2c11ebf22d514812dfefdd73600dfc10efba38e93e5bff47736126043e50f8b9b941e4ec3083fb762dbf15c86 +MD = cd0f2a48e9aa8cc700d3f64efb013f3600ebdbb524930c682d21025eab990eb6d7c52e611f884031fafd9360e5225ab7e4ec24cbe97f3af6dbe4a86a4f068ba7 + +Len = 2328 +Msg = 22e1df25c30d6e7806cae35cd4317e5f94db028741a76838bfb7d5576fbccab001749a95897122c8d51bb49cfef854563e2b27d9013b28833f161d520856ca4b61c2641c4e184800300aede3518617c7be3a4e6655588f181e9641f8df7a6a42ead423003a8c4ae6be9d767af5623078bb116074638505c10540299219b0155f45b1c18a74548e4328de37a911140531deb6434c534af2449c1abe67e18030681a61240225f87ede15d519b7ce2500bccf33e1364e2fbe6a8a2fe6c15d73242610ed36b0740080812e8902ee531c88e0359020797cbdd1fb78848ae6b5105961d05cdddb8af5fef21b02db94c9810464b8d3ea5f047b94bf0d23931f12df37e102b603cd8e5f5ffa83488df257ddde110106262e0ef16d7ef213e7b49c69276d4d048f +MD = a6375ff04af0a18fb4c8175f671181b4cf79653a3d70847c6d99694b3f5d41601f1dbef809675c63cac4ec83153b1c78131a7b61024ce36244f320ab8740cb7e + +Len = 2912 +Msg = 8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda7 +MD = f08819ec3a9a9806a1f55be4f0e56bce084e66fa271784974bf80e1bed7b2be559ebf5b6396ce52f7db7ef45543965f83064095a70328489178718b491a4100d + +Len = 3496 +Msg = cfa6c0413dfc1a619417ac3f80fd38247b56941da8c2adf3ff70cc5dabed1875b0395d69d1200b73b1c7820b38868c5b38f52bf3514a96be12e27e34601d95d21c6f51c700b4edf1cac4b2079d487418a4cc5f34f815f469c4b44ef1a7dbaaa9597026c59260c9c22736c49d76ecf7430500b74866cbcfdb5e0fc4fa46cf5ee2b06363ca4ecba6d0104440348d191ec4a4bcbc9763152ffe271a69b805a0b9656970913dfd9e8c02cd16af33a878f083c926f48ab79b1db969fec493aef6c31accc1378867808440a5d5990490b07568bc66e9872904a0f46ae25ef4077b85ea217bdd12541a9472e2a9840e0d6ab55cc4a523f782f8c19774efbd41dad506bbafc90c438c14c780cab9fab9e74eb9452a0b29438a21878bcd4c6be4edac4e77bfd14a83d6152253a62e826de503880d37bf82d10924fab6bd23f04308a9660499bb223afcc5afd1bd2fa592d0322a9a30eab90bc7ac22018e99d2c8f573554c85b019d0c4cd75e359e5e9907082a8d660b353588b5f085486d89bd97bb32335cbd8b9adf7d57c72c078d9d08d9c09a70e43da1f1fe5b398ef08d2e06111d9a9b25a893a5d84cd643b0ffab8ef2755f781c1d6ca49 +MD = 3a4c2c9284c90515cb34a0895d0374e87467ffbbc7c1dda3239893a12aeae3b9951169fe85605ef7aa2c483662f3a65c72ff12becde50c23ec6a2bc8864c27c1 + +Len = 4080 +Msg = 43025615521d66fe8ec3a3f8ccc5abfab870a462c6b3d1396b8462b98c7f910c37d0ea579154eaf70ffbcc0be971a032ccfd9d96d0a9b829a9a3762e21e3fefcc60e72fedf9a7fffa53433a4b05e0f3ab05d5eb25d52c5eab1a71a2f54ac79ff5882951326394d9db83580ce09d6219bca588ec157f71d06e957f8c20d242c9f55f5fc9d4d777b59b0c75a8edc1ffedc84b5d5c8a5e0eb05bb7db8f234913d6325304fa43c9d32bbf6b269ee1182cd85453eddd12f55556d8edf02c4b13cd4d330f83531dbf2994cf0be56f59147b71f74b94be3dd9e83c8c9477c426c6d1a78de18564a12c0d99307b2c9ab42b6e3317befca0797029e9dd67bd1734e6c36d998565bfac94d1918a35869190d177943c1a8004445cace751c43a75f3d80517fc47cec46e8e382642d76df46dab1a3ddaeab95a2cf3f3ad70369a70f22f293f0cc50b03857c83cfe0bd5d23b92cd8788aac232291da60b4bf3b3788ae60a23b6169b50d7fe446e6ea73debfe1bb34dcb1db37fe2174a685954ebc2d86f102a590c24732bc5a1403d6876d2995fab1e2f6f4723d4a6727a8a8ed72f02a74ccf5f14b5c23d9525dbf2b5472e1345fd223b0846c707b06569650940650f75063b529814e514541a6715f879a875b4f08077517812841e6c5c732eed0c07c08595b9ff0a83b8ecc60b2f98d4e7c696cd616bb0a5ad52d9cf7b3a63a8cdf37212 +MD = e7ba73407aa456aece211077d92087d5cd283e3868d284e07ed124b27cbc664a6a475a8d7b4cf6a8a4927ee059a2626a4f983923360145b265ebfd4f5b3c44fd + +Len = 4664 +Msg = e34acd510cb32ca5f97298a3829244bb23322229fd7a07821dd40a8d01582d5558873f7c0a3d00d278e1872605dfe15dd558fbc1d518c19bfbc88803cf64a9f72af06fab3d673420d6f5c6f8df65108927ddf63066c980e77b153b1af79fdcb7dfec2785ae1a0fb69a151fbf180e1867a229dc1eb8768a912523eb7b83f00dbe01e22db2643cdabd4cab5824b9c14320cda47435d40829bf815a5fce7a3e8333183c4adb67b6de5c751e3acec966d7dc31b7881ac165a29a182361bae573873faa6146a8c07160bc9cd68d6650e41dc254c8de788777404971e4b7e7cb76610a41b9e9c07654ab04493b199357255dfbc04140f52f244af414062afe342f59bb64acfbcc9146065d04b5a5fee410dfaefd887439bf5607c58af282a72986b77b9ca243731a31b8ef56acfb4e028dea04910742ed42f4c0e25a0f8789b063c2716f038a5e18fc0ae1c688e12cb684c725062474b9bde6be730cc4014dd4aec3c667379834938f445cddb120400addbf38e449d0443a1446a1297bb79a9a4f02a10ca6359e94d2ae87218f803105801866b1dd2037c066a393389b72190c2ec72be5b9294421ad8f8b1c8ac8a8af561ad6f7482a3958c41b73c18cfa7231345a8b7ad63bcd4508318f560bc24c11450fb13df1b7f30916f8664cb5174c114702ea536735e205cbdabc567834c632363d1e0c428e0ddb4480966280914fb5500970f9d2dd2a6bded33aa43be7bd1b12ed46eba2792ed636fc2b8a542f242438b544f381fc4e7e296430c8baa3dad2bf685062793efe03d4b34d4d99ba7366e54f8fc9da59f54694d4 +MD = a1416054e488c1e013762d642b2c63361b33e4fc528149845606de20998bf2afec05da53067477a3c27ebb3c0d24ad3dd6ed390335977f129f1b6b1526c0e0c8 + +Len = 5248 +Msg = 0d542102f215c793f81cae2e79e5ae58b4439fa0d05577301eb6b2a19ff5f714c645f87e7e759a436f2256077d2bdec0926504109e90d8d3dc8a11f456c3af84abf1de0d10051c23955d9e3daa3bf0c3e176dd68f56f8eba0c47f6f7394f6d2345c09a57afad975cf135507905fd2c8828def04fdedae00e365527554f8178181b1bf605635551150b1332629859da38ef04066e5fb915f7e21c6cb4a0421a8cb568b8bf34e593776c5d0ea16a3841fabf52e66d83f4769c99048fbd357899a79c10a92c2b45a5aa9b7daadd8380aaf71e2f5af34f744b26e2755617150d3e90577c91f54f5dcfd520d9cebfec1b5d57970328a8cd1fdcbc46d78b6a48e751706e1338c2a915592184db44eeacefa241af37193604de70874c92f460d7f01a6e6a3c653a3f568ab54ee9d313cbe6c1ddf031f542fc9a50af7c0e5a9fc90ee0b3d261e2051b06acba066d42d652e70154e15a8477be39c55b5eb384cf262bed672ee975cc450f055735ce5ade48d9acce0a1a8d7a51a515b37bea3c99f72e87b0073ce737c357deb56274e3d4b5a60872f4dadaf6bdc488e05a1948a543fff7b9e3c2ffed9fc87efb15c7a55fa1355e69260031910b80680a83aa719a128685a84de38797e1492f52d62f6728156ef5db28f65bf342bffb587f037f206cab78a6ca0745dc8fc137e22e14f3d7183917ef832220c56a6b8bf3d58e3ae15a561adae4960365b31adfd2a4de0f13b37e0acdbeee47af8c6b5e030db16a82e36fb16d22f887d9543b6f4bc1f58484ed25179e61c19a58aea7bcafb0d6d6ae10de86860c9599e17b0c2f740bc119d3ce16868af502df69db07ef1f4564470be88be14e2bd503252f7566760cab98a85e3a9fb8011bdf8918733e7c54c38541735e09ed06218c4c785e5e784c19c7aaa677aa51 +MD = 0cd249160510bdbc1a117600ed8dec1b68b541c684337ad39e8dcdf84bc7a9856cd8e210098e1ac47fabb3af0a4313a4a70f388b11ef53771651d95131936ce4 + +Len = 5832 +Msg = 802c4c6faa7e25b79a985cc98b972847a2dfef587e5f7205101646e4add583f46147c0c987303ee996f263753e556a0cb4875aec4a62345a42ee7145e427ab26ce009b2a8ca74393680b6c5b839c531b2551a02c52f0970c9e8a92034244af066e5ec6dbe16d9e7eb8eb60c483f24b3e9e45aa60bf9003e2cbf19267eeb6f55dea692924af0ab5722d9b25f666e2ba3bc76a60d0b8cbe0a6722b57b91005e7f2e929ac4c1e04f2376f22a53a53f108db47c8aac36627971e3a41cb41d2b7ec8f14a7389d55e5bc942788c6d772a99ee6c7677183f02e8e13cc3ad5465a566bfa13eab35d7d347a52fdd67217ec91e224ee509b567f682e4ccf1e5c12d06acefc8dfa07d5bd7a963998139040e9313d5d658a12853b5cdf93ecf54aeb5d797c5d2be01a4d3e3e7711a147089b90121858d31dbc574b920aaecbc8861a290ddde594a3d60d270885a2bf7ac2700abbd9dee1128316d8921566139ef8e65bad595c704b215ca16128b49bb5a5077fb4eab737704e0809e56a836c8088991be2588969e1e584d4cfc80edcff9ba71686b1ab7c3f047707126fcd80751e7a93324235256b09cbe7dccd792b618c99f7b8988258878fa9f9a18e0cf485a2d0e8287f284cf4757a03109fbd30e25e264bd205037551d6e7081a2e0773b8fce44549772a878111d84ff2a6a2928afa943a5d62f778a4c1785c06b687a31714fed01f93037e1cc52ff40a4bf0fa61482bebe016260c8938a61ced90542ca9d265b131397ad8cc79c519e0f46e0f70303587e38958d70723b771552336b7771f631107d2593d9a15e4e7fd0be57abe9bf835ee235581266af482c8d7f5ec87e13e182ac766578c81d286e8f61de2536fbd1e8a4ce4b3eef6a578cd145872e3023fed217e6acbada5d71d291fdef03896cc693e6ccf1568ad127aed4228f29368aeb974612c4402693dd449ecf04c74f66d3f93ebdc4e9b7882b1aec92d139dfdd3a3acd7766895b64ad4cfc71a9d0f79e8c81031d40790403f449b122f7e +MD = 238726f9c46f44f3457be33cd360e9a369b31280ab718b01c4b8e324e40712f8911aa4220bc5f0e9023f47f48028fa37108dcc8938a34943775617eb129bf7a5 + +Len = 6416 +Msg = 1f93eb3cefd64eca5d7ec36cb7f21d768cd6854262ebc930a730f7eaea4e2bed4b32a54530fc1e973a185c6578aa058eda30b114e8634222b35d784e0c01c01bf5984dc255b86a32f06a0f55958bb29599735f9f85d50b660ce6266b40c26f3d050b0c3bc5d3daa165bc02c3785dcd93b3e8b969a10acc04981328ccec57e05962d40a39e81515ee83565d3788e8fd910fd7e4fca5cb2c02412ca7f67a89ba7af63b6e432645c421307f49392df4eb9595880be0f7ded36aee78ca735020a5a5a88761e2e72d8e405680ee52cf483eaa2d42549b010b6a448740bac9d8e44be460020a9d93931c55dca17309d6ad9fd5bf4fe7b72a1c9996f3cc9e83789d513e06f292fc92401567aa2a00e7abebb62033f5edbcd9d7076a1c649f269a1262bc83a020874cfc227fa863bf73b4ca2a92717d8e3078065dc7e950e53ca50c2464bd54ddc72a8eeba4be94d6355a12a433622ff19d6e6f42b642d7974d01533f409d56f04392c017ded4046db5058acb0cec523f8a23db5f3d0f43dddf15af5c580bed8283ed584f35d2fcad7c1efb4824f8309f80ff115c6738dae07c4be823b2f062bb10a41f3ab2a0c4bd110b2dc2846f0f3a066adbe039a6e5c8ab0ac53b5832fdc2711ddd815c26a4c6fc36e8e232373838a4ccff93bd3fabbdf5bb0f4d52bb06c02ec25acb3c4de4f0c605f450383af3c0e28d461efaec76e6e0c48e00a671c5dcd0fa5dc158fbcb62f6e218b39e5e87fa49157829f8968c6bf68e0afd5e3e823fde2cb00bba19a24514341db36a8d3e0f60cc5d5bc0233675bf814beb82098410e0c219506a90b1c0a863ccf9a6ae5e27af1bbc5d597dbc2cc205187318ba14785f2361386e4640fc3bd7eb2d59a93069bf685fd6cb8a66b787833b3d2a387a9fe2b7506dd025972154f742f78c66fcfe171c0c6f1f347c3e96617af0bf6dfeacf1e6ad949814fe567c2d9bfd46cc0a0e40a08cd05c6145eb78099e34e040e8c814184258ccfabcc33ae1bcea8fc5a1c0c05ba7a08afb0ae4b4e16fb394997f1ad4b5d55e76c11a9116796e646f390a3c21b42488b2e91351d253b412e3600ccbb8252f519d5060e8985e7913ef0e8eabea15cd2fda13a85b5ac637fcd57dd7 +MD = d75e227a5ad2d3ea262dc663adac6e339126163ac683b3e62aff92653a3de00986329e4c6b79c0af3ed614a3d10135279b92d6f4100613f41feeaffa170bd098 + +Len = 7000 +Msg = 09ab78274714140e9e25d81ca9a1cb475945094f39fb2296f651bd311e29813f28b23579b597250b1576c8a30d93a1c7d7ce636b6bd258c3fd900356c7ec055408b53d294ddb3352efdcb76fdd80c59a9bc6acf88b1e6f8d6cd86c5520dd3b90b29dd95d9748068a3441ebaba1d00069ad172d1d2247309e4a133e56b165ed9c2d50513e1c47655ced8cad7de2ea1adc13a72e03b7b5609b9f28c28303ede11f81b8edf3633e1a7021a5450d2638db9ad760f7d1d2cfca2f73ff40029ddbe0c2b7bcf5a4f496eb6dd874fb84f8210b4c0128cfb0fbff3500cf8000fb0798b22dd643b07b58b8a1fc1ae0170add0d719997e900c8bbad68b6ba934997ca8d1f07e637679d160a04c4f0d3e0c65f64d62aa38ad040993f2cfa3d2065fd6d21eff8f07f6235b6f6db6e61359fe1058f02a62cf388411e1e49745f0f9a5778bbe9aafa03e969c1e3f0a176ec9d8357f4bdb63b0c6ff2d0b287cb284831ca74c5d7c20fab4461be39090636e11fd2defccf02d7bdcf7c3a63aea7a0b37180e8a67feb345fba46355fef44a9fc70f9210fff3108eeee06e19a85b2d039a4a15cc6a9cb73079440aebf6a04d726d71ea99616ecd68716b94fbdd591bfc01054588d1f0ad38b1b76b2c041eec9459b6afcf7ddda4a708dbd0b3666ef7531ffc26563a8515dd39411c8ca3ea986420504a49c19a46b919b399d6b0072fb75b7130ab00b4817c74a38794527de16065d1429eb95f142d28a558ec66bc25872816ed0dc11960b5084144c99c5348278ebc4114e186ad51ca03b64ad6e889412a4fb3e4f82e3415489cdc92fe054d17ff63ae62c69b72e552710aa8ad36cb83c6ae4dc7126d9bfbca28a786d40e50b05c89e2fed517f556765ffe5c46015cbd8194e32abc41e8f711773e2bcac9039f1a71975f8986a5038a32d9fc3de2cd5cdfa63c963265ab95a30b28e85edfd612bdcd33fb7062229b228c55fef1458df05554b28021236435e356c042ecbd38e9aaef31591624ce8bc3eedaeb0cc42ef67722ed7f1515937676dcccd210ebbc52867a17fee7693933d2bcd136ecc9210db98335f97ab6d9c5c21f770c47e5c10bc4e070636089c341f388f1691ddef47491082475be7177b2499187581e35f763eaa4a31d2e112d249ad583f81c7019e99234417a7cf01dba91d5565bf046b0097c4958928c99b76a3d25317a652711cb316a158e229d3c4d2f5d6c7e5aa29b4ade4 +MD = 2c1182eee0a90b686a14e5c7f7bd47f89d44d531a53c84e88c459c1460ac7d2cc7922b7be672596d55654cb388cf9b3300a9f31f18fbb45f89a7dbee27ed462d + +Len = 7584 +Msg = 85ff5f072442756665a41f36cb2c99d3152f3458bfc3fcb5cc759901c33f7311f8b41a490c7ee4b2b70ad84dc582caa75ffcc8ae8cf1b5c3f8f03410f393c81cbcb3399c00d8398d9ef3477fad50d434c0c6a469683178f4fb22ea0f94d498f45b6284aa0738bb1ea1c735758a7efda1bff591325c6b8c6f5f7282a6afe92cc05d2bc5182986b38e48ef6ad764f38e17e5f157b16f873a5dab4ac67c4bbacca94875c2916eaa69041bd1ae4c4499cebdb822be8da96dcae668117c3a702fbfd7a6a744bbdf8c25a9a3d6c97c315707bcc2f18e6f120584311d2e6d8726304f71fe2b133e83152fa46766821033157f3b8bc48efeb338af67520b610c76a5c29fd968f7c3632bce1eefeaa2b052bb8063990487e393ec95af900f20716776618bbec6b8f285b74c3fc4c8f2039732505b761a42c5ba0a7c325da2715d028b745a35ad1d72f3a2ef2e6d6a37b20960374caa6c844d317bad18442c1d784ecc4337c685f0ecb5d2001472363c64b02e7f5ebb641823ff257088ca15ed6b53221548fab6f707d131c6185c96c8c295846eb83369c5ee2cf20daa79c6a6de197334b558a8fb6c51a68b63b2f1a274bf4b4e839ae25256c1c9cba7d8a51378a9a9e6a769c4c3c23c18951cfcaf9321366965e676398805c591f3a76f1bfbe20aaa7446b37019b29b712e6cc337637103c8fc0a51d52fa04034cdd1c79125c4446026b9c015c3e475989c7b8df3da0e2d4e5a17b21e0fd23b99a14e676d5ac460b14329181c8affd2752770e54abf9dbce5c934227cef40bca8b746d718628d658715bd41eb36acbbf0197450a4dcc9b9748f8928579895ce4956e0a0fb05c55bc9e29ec5ec8f9236f1b8ae5869f7372be3f53f4c17d3777664c844497d0b154a5ff3f32c865c5a4e604e478402d9921a1a437e1624668fbee1539b5a053b243b3090e5fc2067ab082521665cd54a808f00c16d0fe71984ada8400d5cfd5e9b3526009cbf24762e6e287934694b12a9907fb735bec6b6fe4ba2d7c1d6cc3c2141288d3ffcf9528a8752a0d932cdf8b7287e6cfdab2a03a7a1b55fe050da9d5f661f7df63c07c3685b89dd7c40c1c54f5ce629ee5f7cca24b6ca2291528f49fcacf119eb06b69170f3b677451990411b369d36306122d12093ca66fd655307a11b87a943e26e834956c2b75d47a334c3bd8cdbea3986e1413e9b744b108ea1f6bcc975295897629c8c93e5ec526166eff99b6045700ec12fc12794a4dca8dda2969fc4c3f199f6109e134919c0319f46f3b30c688d243b9324540d305009844eb1f2e03934dc074e93282a0d1b7da670b2ba287b182f1515 +MD = 6d87f523d51ebfc11fffb33357ed7ff3e4051f58a52d45fba208429ee5b53995e5129d35e3b8d3448a3f56d32dbfdc762a1458569c839a4a1c57b4d69251f565 + +Len = 8168 +Msg = d43522210236c67e4981bf3f441b941cd52c5732b94ad76160fa16f3fc74fe7ed9a74f0bec7ddc77ae60f71a2bfd2aa7554828539fc0023ac7f49efef34666b100ef3df51743b76181368927bc203ef4cebd2c18d978a7e7f0e9745f299c800bf314d226aa0fbf04690c5dae200b3acde6944dc990fa2c3182e1805ec5feb6535a1ef8e8ce6a5c280fe95bf77e4684f845d471adebcffbe026e5aa42f0f46f53dc169681abdbf6941ad56b49ff5a863d9485820d137e7abc83fbda55d10714d12203943a68eaf51133d975eecbcea6667baf67312f8f138c422ef8dd91be0b96d4edd95b2e1fc16702fb612c092a4e39a15b0861688b2d1a0a83ec2357a2bd6a99dc4f2c2403c25e2e45174ce1f7e580af914de5e6f92f2c84049e6f4c3a921419d9ddf5731d61bd60bf7f957cbbd3014c571e04d061838b57b8f709970ef35efdeb6bfd42f5044e3f70825102017f8521b763084e4b90ff2ca7dd3862a6460eed1be28dba1415d7746006c69b4e53d3d6b804378a40be50abda3945d28bf4ed907028ed0301fa21a697f43e6d2cb6b51262e9daa9c775457b58f478114466c38ff2266544441df47e1e35ffa32210f17dbefb38d6691da74529f4194759035891a9c43da566e418a4fcaf5163b9ca50c0d3209b37ad1e3eb05623709b5232733f9eebbc4feeb954bf394c7ed5774a9a83aa4149f41be1d265e668c536b85dde41d8812b6a64037177def3cd23e7f9976d49478b363bcc2b0be1aa5f4013eb5f3e5f6fd21d51293876f18c85728e3f0e27ba18a9259648104b50d387e0e944bfdf3c9ef9913c956e617dfeefedf685c959059eebe8b3be4bcd3aca853ec4d0c5cb76f5e8eeadaedee3873353b9a6318eaa30bf99a81a94a238a777a1832bf63baa155be65b2cdc4fa21912f90126ad26c24565fa8c5434de359fc223d7a721e72622ba3d00428788463a8328ebff5f594a4b7757bde804c76b2b935261bfb693e5a3f9330676175278f36e299fb8b1eeea4bddf8625e6e248352d2774afb1e058fa300119551f475e04bbb4546d90aaf494c7f25a43fd8bf241d67dab9e3c106cd27b71fd45a87b9254a53c108ead16210564526ab12ac5ef7923ac3d700075d473906a4ec1936e6eff81ce80c7470d0e67117429e5f51caa3bc347accd959d4a4e0d5ea05166ac3e85eff017bff4ec174a6ddc3a5af2fcbd1a03b46bff61d318c250c3745da8c19b683e4537c11d3fd62fc7fefea88ae2829483871d8e0bd3da90e93d4d7ec02b0016fb4273834674b577ce50f927536ab52bb1441411e9fc0a0a65209e1d43650722b55c5d7ef7274fb2df76ac8fb2f1af501b5ff1f382d821cf2311d8c1b8ec1b0beb17580ca5c41f7179e4ab2a4013eb92305f29db7cd4ac3fc195aff4874ca6430af7f5b4e8d77f342c0f578f714df4728eb64e0 +MD = 3e2fd51b402408073de5e665b81cd82052a11805345132a80f769f9574779081de8604f9a40699db3473fba4807eb1287dc2eb3e59763f21d81737b0ac6915f4 + +Len = 8752 +Msg = 211909dedf08fb0d8aa87bab8d45f6894b458761625e5fb031066ac3982b3015fe25f9d899e934d2e97f196a86b68e031c164788b4163248358f12052a716947c5b59cf624925228d4f41d38942a5c185bde60e89c4bcdc7c8aa43e915ed3ee97eb03b610a6d1db952efce3c3d0929710f8718a8a265f9d3f23f4797e00976a32f001e41d3e05c2a6b58769f0cbbbdb540f8b8f14ecc7e14bc366438132cd81ce28c8dbd0555d92627175b8886a8e08df61987ea29e824342d77e3f436bd2efd9e3cd0fd2a335a538f14c52035385aa13ad2cfbcba22b3d84eeb0cf2d2263eed6cf82e2ac9e2a859aa38fe8fa0d4f298130bd68e89e0f2aa2578265b6eced19553a8f16c6bca8be181694dfc4fe2721b8aace6891f8baa52bd077b56931dae9d5b345fea9753ca931a90f98fcbcca0d1a69d45d4038ca3781b81510cc87b9fac8c84c1cdd5e52f167f964b729bf844636fc63b99bd49a5c349ccf1a595506a6aef815e3cade88013b8618bca47d02878ed1012fdd62c78db4ed2a3488204d8818b118060a8c48631cbdb01c258ba13b92961102ad59ce3693279ae1d18ffb196681d6d614de10919c2ebf47f5520cccd2aa37f484201b015fdab5c4ddeaabd548f8e6e6625a7d172a478ae2cc6691c5ef8bca57ea6c2a586b84ff3005d6bc360074acb97b77fa5e57a6c75ef33fdcb119c96cbf588498b656b4dbc5d1bab8d65d83bcc1d8bcf4e1a4bae92f02544a1901d1738d570fd29591c8dff8da2d3e1090b48b920290095b81f264d5824a6668383293645e646490bd5f604b87a4988f4a758d9c71a7b4068ffbced4fb68be191d7b30b6d738cb1229d72120429774acfb455753be5a717d1f158bcfc655bdb63209c00769e372a477de9729c39c3ee423b26d5a412ebe49c00e20088b87e1ca166ce5d88f0af7c227b416da632973ef442b3412929b16d703142021b375c6cf2b1306acaf05d6f5aa263494b9a5a008ed4e401f2b3607bf68e600adb6b5d93fe0aaa6f6526a7cb98f7374eb2fb74fdb7f6a15c28385fd6d51e245ff3dbea586e7824b3811af6578384a5c604dc4dfd18b2d29cf33e1846b6e9774b89106984ea04867f4455b3dcc45096f768c64dc8590f5f077a4ff29341f83f14c69044df19b5b81bd95e44220263f02a0740dc25211630e6e6f255841d526603d1e5e131a493a3cf66bd13f1e6c69da808d262dd18cd2d805eb0a9e3f3ffd260d396aa4232a62de314fb8611188083b6940447b8e73e3f1f0b0f57766a086d73f32c05da6cf73f9e0a9f07493f998c9fd35ff37e36714c091599c5062b741d835a2e5cc0fa8dc2497131fd63031a9fa9ec6acef7ac6c3d87a3d65c5add4bccda2f2416bd83709c2c7039d0250e0aa31e08ad41ebf239fbe1dd4d843c299661be9b979b99afa9b78f3040e758057182444eb1b221b0e06d5fec86a672b75cc478c60e531c283ff9bad8cdacc493572364e7fd8a628d677a49f80928c52ea5dd50d711a60d933a4cf4916986305ec56ec5fa1a327631d80ce6285f74 +MD = 07a66b976af9b5982d5d776da8a7db28746161bd43a43e562c136357b0aefa7b8c33b8ad2af6add3b95cc962cd9617341322fdd2c07b4d65becc43a80f3df2a9 + +Len = 9336 +Msg = 97a89d3246067de18c799589040075c9e0d2083280a2c7a944222c0c9ec66a196bca5b8b8376ba858ea192341a74f6b1eb70f32492b2c32f4276438adedba8ea56e66d2834c88f9f7264fdd68f0c4a5fe28ba6fe2d690c0e756abd211158ece70202bb51828566f5dfcabeb58a50da9b6b2c0908784e0a0e8605801a5fc6a0d614292d4d9534a6517edcbe1934c90c2f315a048a9ce926f61d5075bdefab2b803760ab66945db779f7a1e34cb5fe49e1da1d7fcbc1c2c690e1518451ea92f5ad11b11de2a7890135f12116953477fa7b0f7d62140d6254a27b129620770066244a236b0af83eec4f1565403bd9bd85c3778395adab5036f5929b9170bf7fe6af8bbe7d26ac07e08d0a744787ce575482bb3600dec114d651cff25f8aea96dd147c8b3b7eee6945b9785715c138cdcd7f829f8cef78379a7eda21e6b61fceb31cc4918e59e4ee83990914903142a85a8475c41f27f740ec435a30103b86add08f0bd95c01b61d02f663b5a21e116f62573cafa2cf67b73369f825c36348bd9c35fb698fbc8d7e2a972e4132d2d0aa4dc17e68fe2fef24d6b95b0ae9748d8680d63a4b0dd3919a644613c12793a5e2828ae3f5198fb8103ff82be669b77c8fe2397087c08ee9f816c9b93c6baab89d6b7a1560dd37e903d5f112c22b743e602b2746238e34be21aae9cabae55f32666f59b9b1316eab83006bb6a517f3fa81c4686329610f379b866eeb447df93bc2f6ee7aeefc7e261a282dbf97157bd97b13c471a020657df01420c6e01bc2fa3b6802fd2128ad814fb500d6a10d5503d482031591b37fb7a7bac70399a70098582e5ded519c44e5aa0faca3c9e7ca9f1778ecf90301a50e49e22a4a7409fc3da1aec7f087408a79b49ff9cd198b20d6c95d48c5fef41eaa5df312417b2afe0f9f5108aecafcc966f4cbaffd99e19fcf7498df218b7334b26b554793b5f04d39d97fe7d122b847d3f3fc95da50d291b39f9379b3b0672d4efc6f91e62a4433e1d8a12efe975c4ee9379b740d46443ca9d3b5de2677b652a897abb8e3e30ff630221da3df32d024cf4a0e143d8320eada9766d520e849ebe5c4708331e737df4d415d0f1cfafc11aeb4bf3d13104fe16d730e28490a0840300b27bb783ea63660bdc7395df8c95faefb14b736f4b8698bef159d4be5db98aff5362862f14243931cc5eb49321d54f6a97749503742cc5c94e4fdcb81ab3d8a0906929507f54d0ce8beeb88b2e23aaf454fbd06e2d75007e9e10f74e75e75eacfffc1b988a59ef3a81a02c380fe57005804d902fb5e3fb577759deb1ede89f7d0897d777d3c7c71e540f8a2a25bf41269fe66ec8dbedf8dc4086ddb2e11c1d8930d8d77eda130ae269a95cc22df580d00a42b6b9de179b85a0349ea20e164b6a1f1ba60e0bc02d1f38fa1ea0774cd18a660f22835ae545dc1ccf7c0fb35bcb8809fccda5e753902d487e3a35a01995be19981cb5c0dbaa57fcd3f06c7f40f07ba7d8b8f70b41f6b52ea24a0226d05ff3cb8a1fb1be6f1b81e6deb648c08a6cad7f5be241d61fa31f4212c8867a2592c3c231a60792142bd2613c1815358c92a5d6e2f446e64137f4392c3043287dd096b43b4a37ea7f5dc1d298b0623ccbf4fd650a49569a5b27bc6a6 +MD = 767272f34a51e2ee0b69bc9d7a8b15f71c7f1d6c392ad37b4d2b43d8e989f076ff7167e368639eaad6df910eacf848c5f47979935988265bea455a15466876fc + +Len = 9920 +Msg = dfb77844e75f85583be98d8b02b601d95449ea7c954cd81001d31bf487e536f3db399124c73d6e0ec25c1e10c381750157d77b13f2d464fd8275c3594acbfa4aeeb6f563caf118c4884e7586f243435a04a68b6c46b5258e5959e392cfac0cf740b80cc9998269c2b847f9b53605532d843d83513af7020aab08e568bd905442f8c63e1ddcf84b4f78cd126538ce8dc1ff24c98875a3e2bba3082fa3bd7fba733e69f3293a5ba5b5f06a285da0a6d9609ce4c7d9a0c1afe766e32b0b768226d13c2793b35cb45e3a4aa5a36615951f508304e40e635750d71f203f6791a080a5178b8684ea0a6027ab06ec483fa447dadd0c87ed656fadd3f448d581b5e2b037fa1a34648b6692c43d1669cbc7da3946d2851a404f10ae220de2541f8b4e9ecf0b5e061ae7cfdc58285c83b65540dddc89f604cdc8433b0e9376240abaef33b572de6270a74d262d9461a2d390dc1be42be7ad5d790f3cddae8dad0aebca55305822b12c73e85889a8ab2fe821b8dca5dfe07db70a7c99d885ae56e7c6e9ed8ae5b35c17f2a95bb58cc490beafdc0668ce6adca522923a4741618968f253e4094018c9f9cd9715f969342f1de34e83751f0c32ed695a0772092eae56181020f692d9629aacbb6f9c678173cd65183914fb4fe75889dbe9a0069e2b79df298b99027f8ec1351b51e8ad35c395dc42128d8aba63ae271dc61b60386999f0a50c39b991b43813c1a42364d7893ef1d2f527f3d50eb7ee2988293e84d07ef28c8a1fde973ec5ecb54e96b3f02c914bd2c92b5f28513a83061513c80bc9ef8ee6ef949a19933169fd3989c3071453934978e1f53c920191bc57212854bab66cbc22de15a01b4331a34b43bba4a94f7040e991de983ad2be54349a83e80c9933150b4576b33ec5edaf6e0ec450524c8bbe048341c4b276b2d596c8044d28618cfa9213e6db647d4427893006917a118bcbb1ff474961b5164764f1d00d74d61e729f8e8c9ff535df1584f2a8f28667196fd84c18aeae5692b3865e12b05abf92851a00918759b36580479cd3f8df16ddb361b3db7b0323cd20e357f0bc41e58f3bebaf1c1bf8c07f71b976ae2dede67e9e347cb939c7e27096652392bb9111be9dfae456e43b23d5efc4c86218189fa5393aefd96f615c221df30c2134b109c6b22fe6666988a60e024fd91641c908f98b595364a53b598cbe7558c5b00b95518373ff7532480fd2b243f2f33166ea239c7af28163bca15680d450a5b6067f0416ac75abc8e427cb08865b216f590dca74861259324cfb276cf63ceace0a8e8975c4912fb2c2b69f0b015cc7830839971c63fc13995330a788c464bb807f8988a8a19b2a784c84f6c49c3d0df6dd36319bfbf8d82139097fde260f4155ce39a8b52ddbc3a3e958793940451c4f3ecb42f9344dd050674b57760587a4d45d6692a64e9823ba00fbcf74d3bd1c1695c26f3ef84522b143c1d65647120b8695d7ee83ee1c7145fb36a17d3eed35d449e162732e26f7c93632a588d6f99ef1de566352f4add6cd41cf975a6a1d8d0fc2f1c3a0be397622a9656c149884879fa1a9991d48947ad93a8e58153e954f5268b939cb8fc6c8430223d20077faeb18449939ebd21984f14e3d8db6a19ca122a3036dfe8b1514b4ab347f565aa5f5e231eeebc57a831d9de5a2dd437d7cab09db950740996d83fe0a601c1e28cbca87ce7056b2281c6c666787f1c6b97b968e7838ae9aa1183da8896f515ecbb5 +MD = c6844ef20c8d121ce80dd8a3cee4f36501003232dc3e71519de69a4cf77329ece5f08967517804941bb00d65a864a0e82df5b5452d3700e4cc0f5b539ced454a + +Len = 10504 +Msg = 1d024b761257e905688412b42057f150daba54c4ec7d5ef4b5557be82f24992dc47a9678635cf48dd245d45f466b227931430d9c5b47baaa34f739c2691eb8adb556f679facefb63904b07fbdc6dc8822534cf97a4c24513da63da3127cafff2979e55bfff356550499f91ce0ce64a34609484fbf07667f650a0487b91b1d7c313589a939b179a1ca5475c21fc5d1257876b131166ea891c3eb669e8d05aa9e9d18ead3df5fe028f4e4d4e3bd45a87b345c264212fa6114e4aae27c20c4ddb2d7847760537710571e9b85166bd65110f3fa05f73723269521f8f694f6c13d755b08cdc3386f90b8921914ce8df071835200dec4e5817f7f0636116d9193303292364ca0e0d1d7ca09bdf260a61c704eb8e11f3fc09dc25f2bf2c18a63b35c97377d725dff165c07e02aac9146b2e3efa31b55cc3ac095a1edaf956fef9a290f954edd6ee5d593febfcfb1c4e27c32c2ab3000fec6926fd3e5dcfb82b7b01bf8463afc583778261af31d907ffbb0e3742b9fbf4be69bc7818efb72674eadac0dc4b24dae667678f914b4c72714f97c70ceeacf483d452327539b888206eb6fac9b554fe5e56902f5bef5c45ea0ce7454ef71df581d271931ce2dac6782e1bd513494817356c86abd3c71268b3198517d17f56e00289a003d79325c9c45394b981ae070eb1d0d069c27b75c4149ff9a75d2c5d9e4c2467ea6cf4a2774c04a60edd8d99cc1babf6d3efb38d3f54c6cc5cbaa63c16a7c94eb0a4ac58b9576adb3ced8d0738bb24814f241663c2bdb5859daf96fb2f5da1debd476450782eacbaab7a575839d864f847274cfe369595acd405a4a0d3b5d39e7a1dc3909a1af4cbc44b9294b9bb92e322c1fe6781258dc968847735e9f687174ded722208616797ed2ae7c49fadd7cb48bad4a48db5c665c1f4b8c15869e7cf9f81180dab4b2fa58fddfeefd3f45b3621da75bf408d6807471d0e4d0a561850d99f5e5a6a22747d132d7e1d3cd845af15e98abf84f49a3862c722e0e60545226110ec102c2c5da8dfe21056c4a3bdbb8caebaad4034847f7ab99c82d4bd94cba19c6937dbb313ad5dc45ba3529bede4eef2ae905c934f64f7bc233bbcc72dd5ff0a7ed85efdbe14f49a080bcf0afbb1a37d0d70bf5a236f41985f14866b39c8e524d2fa9d5284660b2ebe9721360faa1317805653d02729c015f9141bf1e02abab00ea580fc902a0c46264e31685258a688af48ff3f8419dcfa994461a14985e677d9e1ef4208e85eabe738e7e7eb42c5974151abed61c8fe11e6aa41c39d60d141dcb7d26b15296925aa5d2bfd03f1d60edf763f23e7bc8c208950a39e0344e3d6be2e11c0de73957c17c6e6f0c2eb43b330c1a4293e7ff0f0293e707ba4b884fd284f94898c514a77d57afe094fba724fdd39c0478d9990496f7b8ea2a8441c80c221430e4648f0df8d815d90d3e5cda98de67cc5fc90d6f3030fe75b3670132533ac079635e2ef7ce6e4e9cd75f5ba8be9d1c1eab5ee29b58c0262ee76c5d1b524f8c66a80a6af1689aa8c075e71a3bb98017500dd3af058b35ce6a291cabef73c0e6ad3511c99751ddb2d88b5e1ef02437e814d9ffd95a51f265dc1af0842b524f5d917cdcd13604b80b496a3ce06289251ce1a21be7f617868ae91f705c6b583b5fd7e1e4086a1bb9f087a50bf50f52c8143ae8b0516576828c15b924bb0c00257bc526cfd5bfe1443137ce33c3531ba16c753065bc24e95707e66a8626a9e49e100d9de8df840ff71bce385cd1da3e319444fba46eb0da747cdfc60d05a17ff5eb05d9d77c72f2333ebf95dfb70145091a1ebce50f95d47b69663e21feaf3ccd3b424d0432e9229 +MD = b250f9455a5a90e3b7d2e2c7a70e42547b63550cab908ab514de782b6215584404971db76d6e2f2c604f0697bc309e7f53672b617c8967943a896ba260d65eab + +Len = 11088 +Msg = ea850f0e319762b788d715889a51d30b160d54ab0de3df249c900d37ca0acfa2b311b24fe70762cc0d016dfbcc1e4a0beb189aa6b618ad6ca4cf48a138c2a62225e5bc9eb56cc2026bdeee35e86b83060b7f0a635c97dfcbab54f005f4cdc213862ab562646f8843ec951f9fb6df84e5bf6b2d48c7087d28f7478ccdc7d52b5b1f072302bcb7be76d64f899f002357914f0489bebe118d6ad1d1a560797feae438a590e885ed6b837233b29e8cde04f10371a82e0b5d197b811ac226d2750694192c837b87b89851086a240523b991ec22db12fe749228424f496b879a5f875509c385238ac14ccae01b673a8d5c086cf6694d98c259c3a7838629eb98e4760e52921d4855af8fd5416f01a7926e7058c544e362bd59f19264fb82ba95addaa73ac2d352b12b695a758e7cb2fa98d297d8935cc62c3bbaeb3bcd005c5962bb070a7b2faa66dde342c29f60c58c813513777f3e2ad8a6269a50272b3aacaa211809e4bab63c6c047371ca334711d1a1b3ea3013f88a433e88eb2f8aba562d15c18126fbdffb81d5d6c9397fa052321f5f78cd629708ba099b540da5451e949eeab8687a8d6ac35c531411cb37144ab5ff6a7eb46f1ab28fbcd2ea0444cd87c57bf7d3c02952dba3d3987da07622c16e7c086d90e88ad3d9d4afee301d2bad915d868f54197b70b23c9fa385c443404fbc9abf7e6a1fc6eec93140b03a00af0a76adc3bec7ad2b8f786fab02893e6f62a8689f065da033d785a1090c01143438afb4988799b0b4446d50be9f2edcf5ae28ba33b129d6c19aee4770cddc2fe524f1e23536f94bb2d9058c04e519e57b3b25d7a30636891941ee6a9e7a32186ad52281c2534e48cd54266aa45bb321a8128508188eed80e3d36c53ba9b6a986a532bd76967006daebfba31c68a6457253a3295bacfb485c6594f4bedb8ee778ea7f52d50f97783fd21a82a94f8955199bb12c6b053f45e6ada81985f5a257d7dd867ca9f911a516183d89d332facd5ad9e0fe223a216d4785ee98237087771dfee68f87fb753a183ec32d1ceb713ac09ea10333a4280af98ee6f539e4b4c1d5ef2e2fd18f48a390b649e108b16309e54a7fcff1ebd9cb77190fb51bbaa0c47a0ebbc2291cf25e2a0f404a092d66d7236ddbd8ff69bd1b4ac4e75c6b7ad1fb84de1deaf12d18d64eaa24cca0c7e31f259953a2beb62866df030c5f8b9dcee380edc30ecc5802a8793785ed62197e3e462d75b1b259c25abe63dd430eac0df8f8be59920d0676413407e220cf8a8ed11fca908a6cbd01536367d88b571e05b846b0304955b0ba4cf9bbb81b4ba39b641cd1529150587bed687f8cad177c4cbe0563f56918ff650844c3761158ed3a63b7d22a6b0fd48885381b783ca24f5956bf6a0785d93afd2fafbfaac789dfd25c9b5d867bfd89bdb74cdc199e99ffa23edf02e524190be90f94f0d48250f3f9bb11d40558ac1081f02131ef676115bdb2eeff1cc84aeacf449f0771f640b2170bc5c615659de18bcc6fad780b9a1a127f599f2cf7014ff64b18740177db92c0cb21b44537357521a852bf321f978536e0c9638414beb424afbbc711ab742e7d85b01ef3521553fa10a4e7ac080bdf917398fcb0c5e5afa0ded36100f5cceda3a7fb76ce2ab0065ba1c0a754494991c8c452cb416f18ab115509e28ddb2848e9be5e4c344597f4ecb8207eb977e344334f814fa494ca3eecaeb9bbe6e028d8a645631fa4272fb823e05eee4a086b5f67719f0a58bb6cc3a9488d6dca9931156fb9a451bc3409b87796d676847f345bdbd7267bec6792d1cdbedf68976af377bca79ca2db10988e7e6821980740f0b216ec9224be1dbef1c07e3a4cebd9c278037bb6539f316e92aeb0bad330f2030a9f2e7c857c4253ac2803288b266a30aedac27c04671afe7d6f2d2ca8a006fdbdeb29402e7579e3597aea2493d5a0c08 +MD = 74aa96e89e9ad0f23e1cb37ed4cecc53a0af47a68fa3289dd2c91da6f8b0ddd5d290418ea43abf0f3700bef12ce62de3f9969d45f8410381153c5d698f1f4406 + +Len = 11672 +Msg = e6e9e74abc89e6f6021a4db140520c7c02e0271d894f0a1fc12e1e1a736e9934bc0b9ae8beef750695134bfb8ce7df5391f4a47ce7bf1bcd1bf15bc639b6f19a3f63ebead25b30d43033132c66142709c36154848c9a2abcf181761e407b13e3593803d96296be67bcc3cacb35a28ca77f715ebce1a8e2f52c2495a7f184a717f1d40a3dd569c9c71f0b9b61615ab834ac6aebac4cb1e87fb223e1ebb29b543fef7d279c9399f6fd4353ac75520150b8349522dd367ce7626dc68171ec86c2613a7c828004f1ef100ee3258f6f62ff3cfe3a2cd608d285a744549dc1080e9a88bc19447090385c086a022f3822446bc6f2a1301f287b6a551e175f646cfb84b95c9b95f59f35e4ee3efaf2f6d36e3c61f8115741003f3f74e555ede1821527fe024c9c9699b130c972119554e8a91b12f8d4c9c3f6e6ac0d80576fc0b1242c5e967282dbe674e8a1ed9040d7cabdb0e3da30ad2d74375826d7650e8a60ef3ae201566e4cee46b37e99bf1d09e172a2db866e2b08e1fbeccad2c6f1c6f93ffa902940897219ef39695de5517195909902e5d56ddba5fa0ffe59c442fce3dc1472f777fbd4d0362369214b07974fde3f61ddaf982e28fc6acc54a526b4868e2f905345ebfa79e51987cd3a6504752539ff5742d78ad1c9a53babb2c7774a1df3f026f0816d7ec2c2ca4af8933f712d32e53cd850750a28675346334dcc97500a9c56c1e7b44596c73a7ecdbad0a9bed01972b72b793be3581d0d70e03cd5f0199ccd0042573828cfdf5203024087a0bba5e327911ecac021a0e9b0a64e6cc5cbf671f5bddfbd4283c2aee19216719a9c907572aaeb20886ae5c03dca8ac497c5b42ce87dd33eaa8bea7bae93dad1761be312df9d68a502daf27c5d7278452eb2dee520adbb22298e5f9fb32c150efadfa5a1b5931dc1f81ad10359c7a15852387a84e67320d187352a0438864e90ef91de0a3db393dd30d28a3f79f08c63caff92f082f788b38c27529084c80dbf1cd89735bf26515f74a923160415c1d05fb02d133c627e30000cdf2de11bda034b5dd70a8213dfb18a47a6724460c905d9f354d45bdc87b0aa8edac295a73ec442c8a671d0a3c6393a551a3a7ff72b6c006f0e1b298c2d9b53534a37e993c06acac00c52effd8d614e7b8856fe026f6b9bcd63d0ec9bf759c30337742508e95dabed1295284bbc908c60f7ad09aa1e6c74b45bdced316d52c247a960912d3f05adf8bf22c3b2dc2dbead6f29e716bfd651cdff25747418ee18c7a9e5752b4ccb98891ce1085c74a2aa09f9b1e270da11fbc05694c98f7f968c2a3eea1829981533472fba3f710c56191d9b2e40ddf7853a34681133a82bb0e8187158c350a94c47db0296af182cb1d2915f864a879f9ad5d23e85fbe8a2a6f23b4915bec809d99cec9d5ba17a5d1b9f0c4da2489659b89641dfd66a766ede7338ce0a51b84022fa2306f35dbf26fc46366c6a8232ae47432953eec67b16c232ba081fc448d491292847442b0e10bc90b8c4c63f8125afa534a3b3571e23b8f967003d5ea24f8df0a26838538fa2c3453a5d9fc9ae46588408d60f67881c2a8ee7bd4a68eb397d193a6fb61c6c647a2d6340db66df99aaa84df4e93ce0897fbae3472f2a4e18cb6a9766a5d0cade470fdc74645f3da70ed8ac06281f4ff31f4503a7d5ecf176deac6254efb5d49993b54c0120fceff7eadecc13b658fde172f7eee423f6fcda1ea642427b13af1cc7e55cf0f9841d11a78057237a2f11dbe0984d06008f98cdf322e037313486ef4968b448d641f17eae87f23f5cecb369d1efc7165601edd6c5e6e33bf95f7f9b8306fb119e7991c566ba476d44d60d14adc5051a0c92227dfcbcf456bbdbc2a7db86da533b75256e36e3feb71a364463dce2ae1d0a8b5f4a006abb915ff1789bbbb2f817947dd60288c8bf25c65483dfc60e6b243834cec63ab8dff3cde9c9008a50fe6491d8cb08c33331be3178f00ed311e4397ed4947810700985ee0bdc5cb02993431ad02e084eeafc8a41eab37a6cb2c063c4b4dce8eb58e04ea89eda +MD = a598cdcbc02e98ca000e739872235834bc639971465f52cefe54304c0af4cc86f6e60e0292bc9bad2654bfde619eab534202675ef22b3b1c321fef534a5d190a + +Len = 12256 +Msg = a48a4ae3ffa7acd035454bc8188419fed665629dc37eb21759f3f4b97da1d784049c763876dc37b11233f37612825890302d8c9868cc13140024f304c65516b79954efe32a9c61f50421dca6ca86c9cfc08f287e8dd9774940c9d6e290c26aec689bff0da350f14514f74c7ec9f6326490747d76bb0da65d21cae67d65509acb7b57ecde675eb048489d8c26963c5cf6a8c2d4a979d067f9ab0f68fdcc6770fbd972ff7d003066a7aafce4c7b9be0f2e0e63753f4f8a84c5e780a78a4e6fb2258ad28013f62cda0942fa9b89bbe612b4cc3da85fc5a3c368dc06ea4a72d029f09761b7c7cfbcd6171680fb93231b2f2fea3ab5316483ed8b92877868c0f29d050705ebc21547207931774a0e79c42c476e41e3deb393cad512ec9a0ac03ed60be2a8662b4f3581d698c5d121464bd2a562397c8e3b3921ef631e9859fb1a9bab30316e2b06edc1d65554d8f51017e9f1cd0cc66882debb808d04ba7cf8efb58dfa884ceac1d9a8226e0aa7b1629039d2b8a10a9512eb61319985489b3f26ed584895488f0860fe62eed1857ec11e89f12ae08f3d73c6d9aa8e8b89e0592509b42040a94363ea8a3dda90bc84b729a3f62bb19f862bd9eb9274fdc671cd56d14b8c71b92d5bdf155c3c2f92eacb194d88c3fc809bc48b619254c2477623200fc29310be7677a867671b9550d98656504ffba97ba2c643025135c45418e4ea89c43d05014540ab480580ac3d786e4874f5daa0d8c4b76b95781fea357e971e08f79338cac33d5180de725ba3f00d58801f69cadf28216ae3ae1a1c31d2c42354039c916117f602d69bf98ac868ebec3e77af0dd8f78ba8b49c2f429139f361359161f90d6bf32714e41d21f5098e6e74a5b4520a587e8dcfe965459eddad407349e85617e4bd260060e70972fb8044eb518082be748181fe3ec50b9de67928d5d23b92c7acdb6963b85e28876549d86b221c833c721cec0743557dd97ce08125d5629365ebd55604948b677c6f6f90bcc08f3fcc7bd736b39f1f8399c569b329f9634339c83457ad9a74ae98437cd6a5d4e19cb6b73bc7cafb2b0624ec9c26aae748888b6c7ed3247523e62506f811ef061a84414dcf0714fe7fecc31701426f46194ca2ff3e3232cba0f569e369a862fd43deb6661b5f5951251fbe6f217042bfdc76c7a8f9db9f45f1c5ad005905c66264925d29a835609b25855d1b8316e9fa9bee428f3938338a203d38854f8fe3dc83877ebffdf2f2858508e843af9e2d9e5d9c5bdd85b0b6433544549bd4ae8114aaa7614fa3ffd7b74f8fa6112e6ed6532b685aba66abef1736c4476a6fca67b1e0d94e0220c2d7d88b01e0ab87f0acc30c3a864d6391a7af2da45a19a84b5e5c2e058c00fea5b9903f48de39428a779408fa28bf04cba6b221ccd5d0079a2ebd9a136470c40f4789754be8e4e8a6fe6e27908837d1bfb4c91b2300b9151d9f7b2fec1e7afb68476834f246d300ab0afa72e4eede53d6999c229322f9593d783ff27602482a1782d885253f30120163dff0dea2dc11781cd23e0485bb5b6283b0ed9a57ffd986c07f6ecc1c20a610d1c6a967eb58930e0713775c6f25a4f58677274167ca911cc905facf26cd453f1c57a665137a62fe2009d684295fbb5c4a3ba85178cfd84164132e16a25f76f80b39eec2606c05b2305a6264fb92280197a579b4d336395d5b51148adbfec2a3671589641b530490feae24e42ce6744a355da150c02839d87466b31118d0b0a6f89280358b5ae80254ae22ed068226a1eb0a280f86cd621b78fb1394a000c86a8659da1bfaa6386ff8016665cf8fc66d825417d76f4c3b8c2eb73dfcbcb49257d9119f00ae627c3fb350f836d034dd16c3e57592c1cd4c946043382fb41597d6b863d8cbf0b43dd94d43de46519af20473624a27c57a1e9cd4460c17d04a5e4dedf78c6408c401a78e81227f9ae88d9e5d769e7ec379380a5369c29b587b6f253e74c3b33ebb53103eb3ccc7f247364e48c77a7f03f22247a55461a293d253c77483859fdac1b87c2480e208a3df767cfbfde512cc0e65bc92aef116ca74919957cbdb1223fdba5309916e29f3d7d48e3fc1e81f68f488d0e21f7bde458cb105aef5ccf46298e0feb58d77122b58d9eddcbb8a8e1dce13ea5c5105e24c40 +MD = 10f9dea4b2b5fba6d63e37612450a26a3ca900804c0d3ab8426d4539a1b89d4da38ed3821232bd9ffb1f27c26418072cf44369e48b86ec8b4015e37cd29ce5f4 + +Len = 12840 +Msg = b5033dd03db57f3da4ba033569a3e4fd0ff36b4bc630d2fb473a4d0300db4ba9719ef8f4d6e507600636b0d59bd6f4da53992807b6f8b1b8f9640d0923da13fe6eb87b01f0cfa0927ab9853ac16c16c0bb10b1a04c0ee5b9226a7a46de52b10f74f7cce1d49bd13bcaeb8c4a2290d31711010e00d09bf6658af39ca3786bad464b03f57aca7223c3bc76ccee0868b2481b13450d8ac66a23f8a87c083b4c900aba85feb6197c1d9219ff4d0fb91c3bb9a2ef60b1c1b8cb5d3630215e6d1ee2c28a25ed7b0be04710a83118937ed5f6d36d3c66d2bf98a07a0a35938b570829d8838accb3e6c729a633b134649fbb6cfe46a3605aca8f72e23d5cdb794133efb36d5da245f3584cba802aa96864f524a3f3cc55302bc5c8fc974f000e72c6bbbb104578197abc37b65942808915aca6283d5e4d3c2a612a32dfb60a3434ea165834eb5517c31a720084a1c0adf9077bf7ec0251660e8c20ebdf3802d2cdc787f2a0f64127159b8602c9f071be592f2a76c85f6796216d33905d7eefd0868496f11d0f4531ba67fa22f2d79ba37d4b3b0f981e9ab4a92dea872230d915a74acbbd73de671df8a556cac5fd4744ad84372926e6efa8eff3ce39f6f5c88b7840afbe6a0ab1d3187d23610c0b7d893102a52b3860705a3be8660ea075c519418fc95dc93c2b3b6118e74f8da8435a50ec0d7f973324b3d5333a6fea59d7a7495ea1005a1bdc3e1d9e2dfb117da39f546af78c0b08139904fed2c29a49071ed9d6c011e350ccc292377acf5f32a44083a6ecba5c8746f5116eb77079ec5c64391fadf62d8203b00a095832416e4e2526c573715157c4b044ad70e24febde62b160f019005a8af1cb3f4e8c7dd9aa3784f21519b32195b0e5e3857fe4ed950089c112e02480686b1dffe546dc1cbf5ce753591a4a8cc2df3c377eaeff9b8a27086b9ab5609ba5084a71a3c626df967d9510c7ddde41522491d2e4d96a9dc4bd778610ff7d534aaf99bf137523c93583d752e7c837e74d662bdc3f67eb9a4bab1e39fd2544525d48510ebabb9a83a654f54142441c27bc8f537c15c04b3b28da45ade8917a3de9babb89220155b5f1da37045fba57a9a68651daf04c51276231340a59aaeabff3ef1f55d2ad1a061cfbe5c4c690ae1413336d1f5772c70601973277d8d85b7e85cec59d5229b21e31a146a80030ea110b7eef73d39d73820ef6891cee839422a63ff4872bdbe5a637b3a3d99400d347974f1efdeb321f418f357f2222135e545f2af53be42d7a463719447e0a6a305fbe8e43e6279a91eb8f3c5db1fdf081bcb77711e205863ba538bb71c0ebd4cb008923a6550f3d922913f36bf00683c501b60f8da4164dee6c428172c7bea86ad3fef68f732c83e9a32542f008c532f2cb64d8b4a8a0ec5c425d538eba0b4dd67f28f0466805d56000cc113621c266cfc4cabbcd172bca4dd092190fc15b2bd7ad0cf7125b2299bde81148836186882592efa01f183d4f89bee8bb3b0634aa3405b4f43d740c39c905facf20f398febcdddb70f3d460e3d7b368215bae2132b72e27d00ddd4a1b4cfc928e55fd80325c4e971191731bee00571933b6e4a72b26d16d71cbbb64a90e78de6d69a8c78acd8c2a6d411cf6d8cd5303da96ce50fd4a958fc1be39e349d61fe855a61bf470d6409c6b4bf77a09034f2efc4194a310eb2394a7307c4e656d99b72c527f8f4b4112f6f2f62d2eea6df2a382005f28cdd122840a67af2d649c8f53dcb6fb2083d4a93fec8ce69be1d2e569551b57689ac33b67d4acf809ae29a9c54b1ab8308058ae7f4053494757f9d0885bdaa3eae08a1646ec477f68abdc8e1463c5dd46a994c8bed6947fbcb5ab59097e856c3608ee5a283a806dd5c37fe7480a0193eb6852a0059696af8261b02bf3a563d9d578b7b016a69fead55ed85b6a2a1402a62458de5b68a3021fc5d0ec4eb8bd134e9aadbf1718eb1df2e4b19380aa4751ff466f29c93401a01d47d345229edb4129d598303378ad2fb3bdd0369572e2a97e345f2956e2f9b0045180dd7841058cef903faa72ae2e48a051fdedae6a2d31ac57f0870a5ad35b5a4aa05d5788831c27356bd6dda2b38e42080260d57a70121017eaebed84d7c8a99afb6cc85b9c18592be45b7b3d872c204ba636118af27333dd14fc08484d2078a859b3d2a29aa80eda72e35565f148c380b0186b82fc7d9b0f3763628f7c8a50de82d97d45c3f6ccaadd137103380bb111e9ade94ad657d2171bc8033fad +MD = eed31b1cf35dfa5d2afe01f13448ee3ff01e89b6da29d36c93d9292ba8d142f96945c645a888e6a13e22532b6e3f7f434d4ab47e791bf3b0159a9b70d4753fad + +Len = 13424 +Msg = 48645a050dcd38634f2edc65bdcf79462f72e06324ef96fb6f1c2a332defc55dfae7037965a701fca1e5b8d17d82899e95fa1848caff5eb9f161fae1c831c8fa2e26b511933fd2c2adaaa7436ce5c9a43123af543bf1c1e86119b21807c7100a4bea19d47fddd13cdc4751c1744062e069b54a905d0de60f290cf9e0d2f8c415b9fbd7ca11c926f296825f567cda7bdaa6779402199bf6b6b0027842110e0da1df2196fb324afa6c442579076dfc3d1b513232b458e218655ec3d745ac4f12382724fe70c8aa75334cf646de2deed02ad0aecfae002b75a59b16bdf28b04fc61f8cbb830bc2fbece18be6fe2a5f85b8f8db311f6fabe34fdcfc5d24f9774f2a5badf6c43f722fec50e449b1bbd6206d3ee09a0962fe37ff66296bf67b6e91d8ad629c1b260cb5ca1985273925e73fb7d5d77259686e27b16bd522c3fd1a9a49ab26e6084de7101e81dae9f4e6e745f1541c748fce60252e846c1c0e1d1fdb05db779f1c15b5d14250521c657d6ad5d2302bfb0d2398c2cf166aa24549c2d695a4d111b71bed8beddb77390b67f661a300828062066c830bb85d600a01c81f619ddfd869def28279a9d6ca77250e7c1c3bac9f1ec55fe87cd0c0efbce37418022cd06db4dd59576e31ed4b09330777865826c1a40ee7658af6118bde4d7b42efe87f4c2875a69d441a27256220960679dc7d728231977cceaeebcefede3232934718fe25565ea683b910f3e26c2e8b8f3f2d3c49ebe4b0b051ac439ee43d6984cf59ee4bedf625b59547313a7435890ef692896b7c5383c884cf642f1df15a4ce7aeb6fcbae17d42351667bae74f81a1a959e4578168788fbee1cb3fd9f287543683c2c82bb52fc22f1b01e413d0f7bfbdefd7ae9998016e767fc331b6b563233265ac3edee5afadd9c18a66b86e7de1bad0cdc11376a0fd41f5f6b522be904241e0ddb142f79f7dcbb68b83137c66900689414f8d68f9a487e0c02aac72712a0b71c1cfd67f51ba8b466ff9d38f54434795dc9a65f35e0cdeccda12b2759852e595130b27c178dc8f1db20b671bc983f462fa424bba508ead168f0de33c684576c72bc3b582776c4d88ec684ca628da739d24d79d0273b2895a696cad4b838a158486b9ee16dfd25d34997102c314af6b80d6bad8802a10da04f3cf7f075c896869be2e501304b7249d23b617d6ff8b32daaa6c9ca8061235a2b896e70465dbe5c33cc189fba8733a2f25b7fa765be67ff6fa8d37de7a4f22c0126363d731fa043d7cf3da351daf145719f73905bc599962516d68b8091017c9bba573d4435c4a451935ef43e6c329c17ae44229834d15a949bd7db9351d8b3bfeeda5a01c8b2e567c1827cc964810eac31fa43663498b383dde055680bff3a366ac67bf1fff370e201b22239eb6303f7cf9edd0bed7409bb84f8e146e8ff77c8d523885d030eab89faf5ced82862e3c13137d7d086f0c40539286777105ed43cd8fa688dfb8b0026555368ec440517d2fecd19fd28914c27a477cf41aaa7b85c1a5205c910f3d67fb9d4d9be66d405f2df698bdafae109e96ced01edde5f8bee443346596acc945ecf810796b75816e97c1115af256764153992e6c2d610b4bbfda5138430a1a4893f61dbbc5f18b27e7cd09fc3d0abc371b56f640ab7419d8beeb154948bf76dc8b07c3d77859d427b88ab115f24368fc7868b640bac7bad26be5ef1cfa25857e5cbdb1610516d2ca647ac53cb498f31dd54eecf0fda454c5316b5d37e9e4bcaa637854ccfec12dac762da4d4f663e0f7bc8a18b5c6c27e2dc9ebce0e8a6592ed59c82c9fc7e14b2a8803de833a3cc936b89ab823a88a9d787fd7d0157e308eb38a4db73df2ef91e104ade0abe29c0247440149af35754941ddc001f117ce36998f59734c0254b85c667c49c3920a2295d95e5bdce00af7f65e24b205f9a6f11bc37bef3e68b914f9380f787ecb0fb0cef2f25d212ab430129b868ee896536496e1359989a8754e33f3d80b11fff5134f2b7dcc1088296832f055f6fd704bf7a74306f0a24411bab924566041a382f092ed41272f8aa326b4072368d91a0920d97380833cce26e0e5441b16724811af36a2fd0cc294e9f2224a7f72efe6038689fd02cfada92d5744cd86ac187029c5a70701db9e5946311a34baa3c676d38f554a2e4479578d94543b398fc89e53ca6063e022172a4089f8506559e14ee1a1b7e56370246bd01ea017a43ff734f833ff54186ea19a716339182023c4d0c6741e4942e143588d6c94ed473b28d6af78e0422b1fd22c513379064b8fe5aefa6d14f03d063aa02df4bf26931fd1e5e22f9fd898b42d52589124b5780cc82be5f32874b25d8ed53a4d8b4e284c870 +MD = 72db99e7a99975cdf4792f4649e2d08a1beb53bbdb7b6b186f2e7dc03abdd649c43b3b1f43b7cab4da8603eb6327e9595f186188aa798312837e61a4276657a1 + +Len = 14008 +Msg = 2109959848fbc919af4f76595c42f41e8f61a908f8f1da17288dc06d4611df5503b79385cf80eca04ed6bbff056fedb15a7418c0bbe354b61d324c60a83595d2b0413eabe892a89bd2ea97227a7b8a9a64074877c346bcceeb880214099bc22912efbd94f9f8a51125d43249222e72e0976261b478e1b9647cd80b10d20c0f60100839c86c7b8c0a2edcb3fc654f4e8bd9cc8a00427ef482b7698fdc6950238191d6d9cda7e3058ed54943c3aba8c5a4148febe289e3142f8485b501382fa8937f9fc62d14f8b7a6026509275cff80312ff1ade2b5d9c274cb72a506a571439fc1ac277019814b599d762eafe01d263d123bf8882e28a658747988731add9eac3f45251c204868b08ec5d9e4a0ca60cda5b4f35d5c9867e368e286d1fe3c61c2e1b2e8bb9013b7b1bd9a334c02cdd6ebd0a6c7e8a8f1ae1d8df5c6a7b95634e98f3a97d4d1abe066133d64716ff02f9e7b579bb178fa220fccfa717db3f3bd2a31265af04bd88ad776f593db50f914ef8e109841357c6cc00e38aedc53dba78cafbe5b9666615d0bcf0be8100bb12ce4f119e61f4840333839f8a64a03d59818f14abf4e8a10030a07c78c9a0ae020888cbaacd3170b2080368280512bab38d5df12b1a11fab21dc0471a701b34e97e0473b13e60ca8db9fee1e6579312331cb625e57158dfb628ab05160cb70c23af60be342df8edd0b9d48147d497e0628026075d9343cc86b1af2afe082a806b1d1befc6146047458832babef497a1bc883c2a0608694dae797b1d24fadc2e0a3794acc9aa4d8336c58812ce4018d2cb65571271492fef87c06d703d4d52819b8f7959c138071e3ec2431df83fa20ff9d8054521ce0e0ecd2714b8a97814179995289b3f462374c83ef230cf5bb995e230d5268a0f8a37c92dff5afc13975c7ee920d5b66d29235d7c23ffb61cc620ff00355b3ca63b0716459bdba7a862ccd5ec008da9159ea6790a46df4f0b6e1daad6a4479c0a86e92efe68bf2e9eece5192e264799c7ea7ab579e953eca008089024a0603aa4f44a9dc8e47a037fbc31c32030880afca31c7d4b79f221632a6e296ac8599b1e09c7cd259d90c8b3574f6e528dc37f4c4f183aef773e8fdd5baaf1297a883fde4ddd57a50297e0e2347a6535bc8e590f44da98d66f9d8a67026b61d145708b5e36e7a7c7a203ee84da5f625a3b4d4aee2aeff1b0d1a39398b51c0602a7a710163b9337fe0a493403bf7ac0309884a74177d4ffdf3bc55e0aea39483e1fa060aee25ca2b889ec73e76a39194932c900a1a205fde20c872c16284fc2d41bd0ff80b1a052a7cf7200c85136d814b88ee997301f7649d27d9042e5cbe0653acd4f34300ae21c495e7cff0ad08713985ab49ab86e13771bfd2d29b93a3b71eaf9d221c408bbb666263b240db290d640911414919e400a47aa453309173e8aaafb1ad2040659e6c45dedafc049afdd4fd66aad521c7673f3f99ae75bff640009259bdd7690372dd259e72ac8f21e8914af3abd706531349f5f70cf283f3682742dd7ac8232fe0c2ececa0d8e68777a4d6006dd82f50adca8607943046340827a5850b7bd7af8f2281108c09709351148bd518600686dccbd9116fb6717fc709a5989878eb4c2905cc5260c6950f1ee950b9d3f5f2bc4952d65dc40c6a9d4dd429604b48c9ce5374b5fa4198bdc1882b0cf6c6215bbc9c6a6532bcbb9b56439018234a72d7fdb775244f5906507335e3a9d21a6ba94c7c186eda7f4a6a7151465c2abd7e7fa1fd13019ad098b6ebcd190e96f75b45359166d99b344141b81efddcbdcdf42881cd533423ced658f2f9d32389847a953e845b8ebe032987f153bd8024a15d3966cd3fa5327a499c4f611bd0f5ea4f0231fdff768a1588a4e5978e30a663411c18a8de3d0ffc78ebccacf8fd205063f5d5a35b774992e9005c9379d48c3826385f0438e2027debae2f82739253df3cd4f11f767a41a2d1031eef85541f4a96f5038a567d52252b4b418d9277d6bf64084e185968bc6bca15f252bb98a4c118bbcbe13ff7481bbf2cca725f95f11763fab4370a2700185b9ea164218966c535f280b1fb362c882fb792dce2d2ec0fbf11ea2493a155cf0d06f4cec20dac7c7302eaa4932446930456607122170ed102b4ba86fbbc05b866b5b038a30dbd115d54d1600ea8dd65c570fdd9274da182b34dea064b6257fdf013a049ce72e2aa784efd8d74a93a25fa6c32bdf95aeb4d5b43434b8a7a92c333898baa4a2263704e5936d4ce11a6fc2cb4c5c5a128355881fe8dfec0ecff35b67d38031f07888a66de43dd23c76712e2af7e98269dc6cbade690c6f6a0e678015870fb560899204843ed4f7bb3c58ea4c527df90a3e8cf6863134c337d8fb79c83fb3af50cdd5c7df2fcd2debd0a98fa5e8641e721e18c38dde0377f6d41181064a16907fd9d648c51381055cd7c5a6de2656734fefa29a8bcbd30 +MD = c69d1e7b32f7300a89291d2fe03c63b4bf50c6746003100ef82cbefd20468ac8536c697ac1cf5340ab21b15e80745665516e708f028bb37728e2d13440d4b384 + +Len = 14592 +Msg = 97586b625a8aa48ba39ed7e0134446b480871e853d00e6d39b491d32afb51f9f563e491077bf5d4f88642807545e621ffbdbd5483a35c2d2ec6980c4d1cc662b8ff9ebb2f60e0c738818ee0d39cbc5f77377f4145d3776875d6c7cc8dc6957f74970997160de77a2aca2721a4af337e2f143c3102f6eca99f5385a6756f6bcab8c8b9b753c966782fbeafc54103f7f887b278965374388b1bdb662c8c9da5bef603238e512a0a4bb7dd8d4e6121567931c0b903afd1c7676bbcedb14bc7dfc69ce4db9e96b63f6f63a5541f6d8deb5a8d9d71eb80a625e91f9690f72b84769c4ddc466abcd4725db3b478cadeb033271bc737c06e57e06a97f6d440b44a069a6967f8750c3b4f8118798fe32d2eaa696ccc7f24e16d6366753c4c306e8f0c3b8ff676403d2123941262eddae15fdd9bf11bbc7b526d4b8737f54d48c2c9f40a1236245ea84c9ae1221f371483da39293943845659cdf53740b07bec59915a8090759712d6041202d7fcd0429d1439bba5c24b286005ece12fdc3cbd8b6bac39ab53531f5eee3563948a6dc785947badd7169573fdbbbf2f65f7241ee0bf758fa34dccd6ab7151adf8465425e5e16b8a4dced7cb9b45d87c838fb692e213231d18c388db3424032c73cf27e0367185cb6a49a691c13ac552f91468bc17fd414c8c630b8f917cd67987835d88efcb570bcd156658f801023d4713befceae46ca86e8ab9863bf2281fa3e169827a555ba5d6c0bb93a84f1ba5fe0c2dc7e34ef1bb4fd93731ac1a94897987d05f8eb6004427ca0ae46a6b7e377e7c39cf99b36cefa0acf9245a5c984148d526826553e141209fd8adb6fca64c48c2675666a85adff19473d0df4e9fc1c257d09dc6c57b2761c0a9520669305f0d9d3b0ed2a437e6c31e3bc9a3573795569e63040b614a816bbaf193e137890a0d6b294b862d70ae85b8b5613f0cec3676075257abddbbd99f1d45c5dfee2cb7e8aac6bec9aab191c9e2754a0ae62a2fb13132fb30915b8a8c361a7a3b03a8032fda77bb45b2673b0029ffe6bf597deb988a69813202b62ea3b3e423bb0e67564378c0e362bb0df4b8fdb9c9950d53e48c917a6c18c8383086053754b865073bb41446a9a95b126954ec3765544848b51de4fa2e6d587e3a93a8888fcbbde41df22b6d7091e9110384640d4c55b0c8d7bcd35d4a9819e4976d2c6c275d6faa979e2c99fab50b965d97f38fd111cd50c6fa0b083331a2f7e162ff36ddf5f0b71318a6709a7b28fed2302953a620f47d0d45faaf8ab28a44b3259f9cf61de7962ae20775c25cc7c70bbd63dd3e0bdcba053100a7c3a3164767259be3024dcab4499afe0e14f27e9b54c031a10b2adc74694bdb85508bfd7c77d362cda4fe10bdf993c8ce04b4a3c857c9212380167a5883e6d9bcb3c596508fcf82a140b7300fa57d162a041bddfa8f38a0f95f474cb2ff9299d28ff8876ff96a89f25801cf25f7a754a6b5a0938e65af3f86db45ba3036ff8a5b278d27275f44d7556d56349d4ab312c87bdb5b10759d6b50968a493cb45e29cb3d0c2c133beef93ef33d06e22920cf03d9449b0d2973a2db139d8055126ef68712eddcbfe9b96e138c1ecc711d60e7fd5044e9f10bd274aad4f7e605bb828f235bbadf9a1334b4778a83ebd68203fbf97374be58972a5f344d11e0cb2a39422469eb9b1e22f15adf90f4fb9f117a899cb55c8ea055fbd10bfe741711e903be1ee00895c8b37fdfb011fa521726450f5b8854d164c2c768a66bb6ef7662726157309a66362f20a19d9ffca5eb4ae3fbca7f063d12580d94781722d06540f5ca71ee0972c300944efc9d946d97f9e7ed4e0be91835a03ec3058370606aef1e58037aee421bc23b36618d29ff99adc1427ab166094b15eb92d3330825f3d74ca86069a16a9d0e9606410145f25cf0f099c5020576cf339482759852879c94112a3d2cdb42b320352d2f7c70dc7e4df661a1606fe73e83b9f04135f80bc1affc5bee56f4611ab18919916123246a2f6328b47eddd12570dc8aea9e61391f757ecbf85a754c203d0269fb51e550ad1f975d629ff7daf0957cb0b6341685e29f18e8dfb9d67a602d518ce1c13fe7b399337e3056465b4c7c0ae058899088c7974b3128f7a062570cc6f0d9218b601a16a819a22441d8757f07b8362157984ac8963358866baa71460344360550304d3265ae3cac62e9281903a6c37de45ad8dd7a7de30880a94b7376e5acff370ec9570cba643121f3b0f48f1aa501bf36ee30786f5cd097e5421f92539251a8221b0f0dbcbd65178ecc7bfaa24f5f50c3175c00963a8109e4f1a4f61c8aaf1c30bec4d923acbabc20c739e6cc26e94175d0cab370e09c6f3ee6ae12befa8a1ba12102ff8db6a478303d98c406c021f9c5a706f18df37530497d8568a966551ef9fe6401696fa4e4638c2322c0afabe248f69b5b4be7cde59b32e5687a52a2aeb183425f354c5e79015f5373b849e9b3666bf2514941e8f7bab328b29043f5435e7c38997fb113beb013c4572c236db5a4639663f47668ff1e5ad9a789cecf655725b120b752772de645d01 +MD = 19f109cb86236a5ef1eb3064413da5712989d87ab7eda21313d72471ad577ada2632cf058a554cf2512c821a0638dc343d62744199c2ea2507ab0fa09e740faa + +Len = 15176 +Msg = b8fc129b4d456a3fa1cc832b81859386066bb9cb556849ca897565f0ee02cdc97098f7c353bd63352418299fefd5d434b24b729512dcece04d1d94e97037fdc7ca8e0f93a0a05a6c222fabbe9ea2ddc4f4a9f24c4a2063bb0036b350e6ce4aadad2581939cb5faed845a3210f6b45941b3cc617764fa55638c06ecaeba8d5e8203a6764bafc6e8bf33e1e61c60d2eeb0d9fde69fca336ae1d7d6658a533dde4eb35915444299cfea160cee6a42c6441b4d84a94be3934b3ccbed466c19a67519a5868705bbf855771422728205560489f7a9d30317e1a07c4f95b8dc748fc9ecc175f31684a9226d176d9ced124bd603bfb48c50cee710aa4a14e363ccc182ceef6e82000374dfd406339232d06c61908decfbb8706b44cca6b3ee88890549c817b85c4aa22334b4c8bd7cd9a6834e38499a49c56536e4ed4aba01d41321c6e1219ca87cc87cc8164753836afe564403db069dff161097121e7146ced3dda021f5628f1fdc4944016a3dcf6e3fafecfa2b7820ede9c005450a1fe2fe2f037f907b5238ba48504f7e19c2876dd054ee242238fa174710d78df60e00ec90590d379cb3cbd5735a92943c2bd3ed1b0df18aa68d520599c6b5f3ca84c6215fa9ef1d3ecf72f8c52eb54bbcc0dc7887a49d32a0c1504045ab467d6eca5c2402b9d04a4aec53aca6965fab7fc9ca957cdf9c26f91a1e4fb5873335ca28eb7de35156c7a95396787e5838bd6e8ec5cd6288936e97e1e1ba4f222323c7e59bb5683b299b414c64e5b53de9887157f4a6a2652d10645dc40a7d43bf4e4b4b9353fb3ef2cefc1ee57ab30d1a14716b7faaa23f101647d8ecc6a6b4afbe3fa0fcdf03215969c11340bfe190726a54138f61cbdde48727988476313b9a7b8c2dfde1e8ad057377719e3ca58d9a9104974c528509526ceee6b2a288a1298e183abfe211aa9ff40881267a68ce3a91673fdd05398901cc830a9ed312ad03fecd0f6a6ae8e0cef55b8b01009319f97367526a024d269bafce4c72903729d0d392f325ffd4163b7c58d756568c377f3eeb1a1dd22ba8c51eb7f453625fdb3a154e30182b3d168e94e7ac4e05bdf075fadadd1cfc39d7291f26496bd0f28de7cdeb0c6c758ba66e42f05411948c0b83b01ee48f08e17b6fbd0394e26258057f0350d04965278f83905b15c68b635250679e779f7e8a5b3ffd361de0a0fa0cabbd65c3d6847798768510389573a98b852742de73e79b403fe9a72c8c133e691305122f3c59e48bef29f804a7d2c67fc9f8f26035cb7ef21a883f090e428de65ee23f5aa26dd72f9585f9c3243322f6c5e396460ab09a3976e2e4fc8fb55049345dd48d3146b64b11a0fcbb341b25b821ef16d91c2057ddfc007f4c37f5ed5b3f7cb910116eeaa80a83ea36fd14378c84255a5e93a21da553e9f9422d89cee42449d72b696ddc0e2934a97aaaa5c03b968b4b2097bf545a23a538269af959ac8ecc142661c9f34416bd23cf6157288e002ccf664efd64c4163d2640a5cef87a230c5948230c961478253e7f4ab0d74a6a0dcf77e3e7b6abd2b8aad7778f12178b118fdbd4bd2f44f875e4d18f3a353a7b38349c7c02b0d7ff1eab3437c40e4c6fe39c259f65259d3db4fc0c557dab25dcb4e41d42d8bb10467813a00ef656df778b6a6faa8be0e7f0ea6e79c7009fd23589c9425cf0401d4fcdc96124ac51984a10df001db7c8eab82022600a4b7a0a2dc0ca53f2d2a5c7c125b5bfa06e6741917ae5222172456d3e5dff0949e6a5956c5fce972e0754d64488bf04aac400a0f3d1631bde42bf3a29a9efbbaa5a863b9b71bf573616b31282ffcf766c37847f191e40347bb29e17220cdabf552d87c462fb84db32872c422091cd5f0b4e5ba4aa6966b520474acdd18fa65e73ea0ff76807056b4be32530c947a105b292eed74fb8bce6f78b2b24dd393cdd2c16859d569c2a4fa8b008a2232733b18789a3e2b0152a0e2505a9e3ef138487a73b537ed3c3dbce73793c61d63c6baab2bde38c74879877d53d2dd4ae2366a30de0e06288830031d1c329358b8b323a5cb6179c4417ee672dbc1dbdc373cb78858e94111ce481c1ec1837e5ea1e6ea7adfaa5dbc7cb14275509e367d50b994f38ccd75238ee46c3ecffce3b9afc093acc13f711a6adf3ff76ace59a8df1ba704e2211ef84aa3782f90156fd442de93be289730588c57136b82e8d1d932f1423ee18aaaea71f3d4539a537f48fbaf8f216e2838116197716421642ba8ecd91b040370a584a553e53d773d9e824aa1ca691a88e4bf8b4eee53dec6b3726d1185e6d069ab5145523f5f9f3a5a1aa053fa17a62fc2cd59bbcecd039725d044590779d0ec08cae26d573c8ae01e6cad34829fa9934ec55d8cb732483bef4d030e341f7d5e5a6bfd03b156b2b56802c1d1f8739d4a053217101c26055b7c4319bf805a4e572ccf05c3c230af20d3877ebac035e9ba729e1714820ad34c594d08db70accc6cdc4e9d1c2e4cf8c8cd45343d7e49276b1353cdd87d733aa502e550e089a95fe60565137b4a1e0803d1c6a2f8874fcee2640dbbfa62d193ec0586726d3fb2a17924cd197f9a2655687da61b6a7f9c58a6f12661e8c6b88797ddbaede0076b199ca6d10f87b2f8797d1d4e3e01cbc14d3f273840323d8a7e1ef7fd43d7753530a7280b76221 +MD = d1b2db67f3b0539ca9c4cb755343efe7076e0c28625d3e63e98b864c98db3184cebce0f2d4fac97c36920f7c6e29ec3c801986fe9b30e2eecb4b4e9b7707d755 + +Len = 15760 +Msg = a23675723ccfb3decbe4652fdde21951fd2f660d1f0473803f7fb8cc44f4090d2a85d08f60f29a3e6fb2d55ddd42d77b51bd23a3f7ade8d42620cbb041ffe678db9c11381e8a603f6db1edd248a1d72270278a7b4c1e41bd8c88ca100cde89d4fba4c0d73c3f0ecb0c0b35f7e6a9202ca39624fbe6028625b7df3d536e38fa07d3c466d383bbaac996e835327e00b9833232778c8dffbdf3f04cade12fb53ffbab258a94bba33f20516f76ecda4ead0d65220d9708bdf00f7ff7a12217fe6296cbeeb482aca2d2ba86c97f8ec03c01b4848f6e8220e52660ac09a17eedbb6bc27a486c051d5e6d7e7c1dd87ef971bf5ed6a020b69d1f68d0bfaa355d7b936066015b3b85d87f17547d940a264d96eff5a47ead9c4712bd46ff01e627872f4b6aa84ea86aa3aed924cf569ced8353976036509d9be5672dabb6373b44da3733b5b7493c1c4793bad6bb8a163a654fc187d43f761a41c6c0e52a73bd1c3c52213176767d038cd5c25389590177b9337452c673c28321d57fdda3def21775281cc52dfbf587391cf98181eae30b48a6b9a95313083d4e3f717b6ba0649e4c622c5923002c1118126849eb66475eda519774c547d1b090aa9ea8c9e09b178aa859d6a1aea907ef5d16930ef4b2d837dc169b6239a444aebf0f4a04c61eecf7a1ac22ef2cf4d387a50b4833bdaee126ee3e06730e09617225cb4a657c75835bf62c2655a395dba893504ea2e8c2e1702f189e3ff1886fa284da91342728467e4fe2ca1b3b148919ceec8fa39e7740dd49ab491008aad607864506b9f2bf9b2852d4f7881bfa44a4ffe7f27e07536635e1fff02c7bf6fe69d113903b03c3ec20aa0c93e56ccf730fce4a5e7a4ae0bb40a21d7cdc73f550900d4c190482bca02ffd92877a55198023e21cbde090a6a8c6310cd368182d3243e3f9885a98301f1df46cbc8fff62d2a8e465f6f8002c938e39d4df1891280d4cfa21c5866da9d1b236a4196c9231d1667b2df10ac3fae561607e8634076e4a71fcccb7cf28ae1eb56c428559350fe525507d965e009807074e11b203a1854f7b8e02487ff1c86ef03d4cea9d108376ac0b5ccd3ce08f5f48ac954ace88f786315acc5fddf27d292952cc2f814c15ecc453d37eeb8b6557ec221336dde34c555d0831e4305058b72952c93c4d114daf35d0e991b428a556ba57915e78db0a26c5403ac0c136de80b8e64cf94986b427c72ba6eedfdfd4c37bf41aaae798bb6032a9eed9d8ca99ed9db65c4ebcd4d1bd410c127db4da7c08f7a0b3027141e66b6deb5518bc341064a2690123f0222cd76d1a36277a3e248cf604664e60fe14af3baf7765b79dcb4e8da743602b994edf11fe19d27b3655b740c83a76faf9cc94679d5da90f2d5314271a2bedb661be3bf660c367fde796f19c93386288579682b75c0eca0d0b2f1c3868c0b2d9a10455e4e63dcf497c6fa2d40d66fa5143fae1f59592b2f960e7d088390b97db82a993a33b8ef0a71b6832aedfce279fe38119e7eff2471b530497de361285062b345ffa05beb45eed0a0af3b178cfb85fb29256133573ba0d0dd80406df62a0c42d20b2edd602b819dc906b2a6adbe5e016b409a8631d20b58afdc0527a18f2771d3d939addc1fbc7672dddf3ae346e8e33e8ca57852d9374036ddbc2e98d446a8b2065b5dbdb7021314912b44cc09b9094945fc8a18a5c7201901dfd36abdec5ff30f0e5d9375f4cc44dd3144a69b40fbe2291a2c21ec3d60bce4dac695807b101d5fcd3ddbd1073a89fe6bbb21600323bf8288dedd00fc9aa8f3576887e08561a775026f255cabc63a913528cafc8229180ec332c888a72653b9b049d0429dbd17eb5871de7d74f7fd22481de1b54064b20a539862e7afac43a48fdafd2b268af53f39e685b7d558481dfefb244ec07ee421a4a04ab28884ff4040ac7d0eb273b5cd212da9905f6f8200e450f11d84d044d140cace5dc458fd296d3ece61c3efd021a8c7b8ab7596516772afe6a5fff15a95b2788c5de580b3ac8ff26fc8cd57dad92b35414daa752cbe3478537cb45a7bdb744a03375ea4b9560377dfa841544c603306c20b80748a71944af60624844f3f00bfa18ea23d84c2722fac84c25d9b335aacc9797a2ce12e3c881ce6d3073b2cd23a05a852a39c5e569a44e2c2ec4def0ca7a5fc0a06c74077b05673325bd6317359ae38e28f66a62b384756c588eadfc3880627b28aa354e064214fe4ea86c96e8ee994d4498a265a9a02353cabe8a209be6860f6211bd801140be14d3be3612e5a6660aa7a6d4b8f302412aaddcdc259bb2b5c67728746543084bbedd872953d3ca310c78a86a2138b2b83928700bd4e1eed6e68f77c3c445a1a544948aad205b60e29ce027cb6920b66ec864037ff315a1d1b8d1871067be13b2ee1f4f2b432572600207aa5f5855184d1f891c9f4adfd48e8466dfc41457675c04a65e0982d807958614b98eb57ce03c86be44d5a3e58ef49276084894b8a489cd5340b1a61c28687030dcc04a401422442b0289c4d2d7ed29288803af88d223924c7c89779bdcc107829c5ddd46bee9a2f9de21764cb76192a4e95c2c70fa119bb99afbbcfa2b88943380cd3739e578e850600681fb37361613b2bdd517223b30c3226e3fe41da55f6a117820bf92b75e5711a0ad895e55fb9d6c8d7026558999929d4ac6ffbb01b050d5c75f80cc8e4b377857c29b35a689699e33c64498e31d4d93f61af30c82cf0d5620be269be5f9171e9487dcc2110aa0d0199f1af531061c +MD = f230ef921cde7b61cfef00b479835a892a7eb41794545a494e141749cc18734d0df36ed0f57e5d1519ffb3845a751ac726c6926551c738ff001ccd040473b197 + +Len = 16344 +Msg = a1990301c5f0fb63024de2f5b828a00fb2ab0749f066b7d9a9443e1c90be8472574e674f7127a28f1d23f30aa0fd7d69d1c06b38db7fd63c3f47e806185242c8a37d9c68fefcabd3304d48946a6acea58d43c484eb6bbc8a52127a79473359548f0eeb73f4d9e0d645b329ba9fd95d6aeb1c5b58a893316ceb8d3c9ca3c991bd22ea9c98d9250741633ddda4c6b1f061f53478da995dfc8910a07698b67db2ab64f7f7013748e9bb93d3ae7b675a5031b27162324632e78bcc336f9408b583c85e1e43d395aa4eeddc5de2670a3c45832abc6389377bb817242e70b91fdacdb91748ca397cb3fe7e46c3c28f38bf96ff66fec107f59e38d82279c12e85555829975bd25973cbc017d9ed961c784b0d4c6d1dc5d307052f73cdfcaa1cc28cecbee741a45b025a5d609ec3a635534870134703b716f51665932da073ab5ce951200ee08868b1c89e009c2e3903501e88fbfd96dff7483ba1de4b4b6302ddd34ef81422c5a8097d48a0db1499aef7351dad96c0849f87dbadfc2ee6c34acdb2adee02eda54291e126e7645f0c5dd0f5f7d01a67f0353a5d4f96de5adbaab2ed34a9df2b6e5ed15cff7e3ef5db3864c7dd0d927569e2e92b5054648df34b16eeacd2b3c3692652579a0c71c04e683a11980c05d138ce1dac77ddc7695355801cdc10879ddec09b38c03a06a6ac15da3cf1747b63a5205d488eda0fd543ef79df8e0c62a11554356939b004913f66cdb1adeefc13f70132675bf245b80a41889f886e4cb7550ba650cd1573684d849ad7972191c978982371a8ce70fcf17435c493dd4dc7e80c785744125c131f97c91576b6416d6e0eb8ce3b15988840b008b677016eb9148032e5654ec679fdc6e3d5115415e7228a79e7dc70c5443f1c8adefc83b675228f5d61f972b9842e396f7e31a4131fdc35ef225587001835e142a2ea0b2ee35a608035c8253d1bfc19f5789e4d45fee436a1e86d0150ec6c26b86b0840dcec031c23c89a105b26ad8efd2a20f8b36a81b617a2eb87bea82a1475a21fcbca7666eacf8237da1a8e8abf10fe7f4d644cfcdddab698c05134b8d300adf753006accf30acb672c8339dbd5b55b82f3608d9dd2718e3c5511785e8ae1f6588184b17b5f5f0bf1ae9c10e8f775a9f393af13acbe64909fed065d6362a1e30afd6031bc5553aa9e076ffbf84ed75198d45ac871c83c26883139c91182c7ded46e9cd4d6fd701036e004e3550263b9395f6793341980b7c0c8b1a5ae12db4e807d3e8113803da681e061ae453aa14aa0dbe15b3cd8b8aa105c76da833c669bd4d15020b90642d246b09046111e1a6c94f1cd0ad22e6d693e92914fd826ef2c9913d99811b608fd4ff7999101d75588dc4935873e43255b121409ebf5f8fe6b96eae2d363b91690625e82795c8dda04418a20bac83e6be8568ae69821db1bbf95ff72b8f737f4f1488d55e56c67324a8b5d978bb848c478d09b313da5f7cf905cf9912f14572b8ac92b1abc778ee4c08269a1e25588ba7349f0f1c1c973a147b5814720034142c2ace0d7e8c62a78d0ed5746a7e827d4428a312e0ed5771a4a663f9d730d1ec100bb569650a16277e196ce8ec2b94c9b4b5805f00b112dc00237da9a10781631aebc325edc4f5e685a4377821b102095f77e1440a0c5bb1ed7f2fb47e08c501933781f38741a47d3a5bdfa299b35cb4caec20725b53849b9325d49aac993f501f7b7c32a0048454029ccfe8c286f7448d9ee86a832b3001b79426dceb4d32c716240c63f68227f384e372bb1ab08430fdec838d0ff7e07cb16670eb88a951ef2dcddd17c94f01e427cc82aa20d46612b2719c6a505e187516f94d5723121f20bcd548ceb6dfa49e71b45a3673472f6241aa8d72f2a24a836ee93690393bfd1459d6e9e93d98729ae93773d060ad32980213f1477578e9101f92b747397b7e327b4f3b07cc1e1e61f4d26a18976b323c9a3a4258475686b3afa239bca24504f397aab69af0e4ea7c2af1a77f75f580c8608a0b15e6afa5d695844881124d43e03585e7233a6179420221a6659af0b0b40b7fb600e208c90177b56e3507e89d70eb4d372107384d6c00ff016b64d14487e1a7ddc9b7d662ccbcb21538d1ab843e1f7d3124f5cdc952adc62301621bbecc898eeca0d6bd0580eb06c81d2e0a8a9048a26faf74869f8e7f3395c8213481fa69915d56dd1113c6792011526b8a33200d394d1102171287eba3c41000b0208a185bba3c29672015ed9a6b6928aef065c3ce53fa3ce3d4d779b35889bf133d040c5a8dc14a43bcf7bed240c1c3ed54ca02ce0eeb637158e5bfcead858ad219e0cbfa4296be2b4cd473642c0cfbc9d2d550b4e8354444013b14725da4127149b8cdc7732d0382424491dca7ab0ec8fd00240f7a982dd080501e3ac365d4856ef4884e89e4a8ed5fb090882e1c9b6f35e2f35a3064aeab38cd4384793b4f62ec1c820c115e2cc0d7b1060349e210310fe64511a42b3538acfb0aec0994f1ae3399516c8419fdb15cce58ea659c0b92fd92afc2306c500d5f720addef1359dbe8136d0c6c789a1351511f8a1b9afc29816089e88fa89d9dc2ba99d68436e6507be33b48252a807b47f1a08ec66f50493de879f0fc506c7e694d5e62736035c061b152cc68805f5dc318a2551099a6968592d68810f45b03d592bf0e373fb6902be629f5811a754f353e8b6964aa7d85eae855fa5824c7e27a4332463a25e7345cfa5750196960a420fbd2584d02338be0614ed45c42517ed9a76e8716a35641577631589bfdb01118b90d9e3441673d088647a277dd865d7657ba5d3738723bbdd26e9b8337d1fa8efe93a7b4d8870dc5dfc6f14566b4e2c2dcac452665c987f2b7558569b844e4e +MD = 074228e463f71f74ffc3d270373c247acf7ff36b7796419d917d7ed1b1f9312417410b8d59070f5ccc7a6ccf2a4b3fafa5951107cfca1c01dccf0be9fd422529 + +Len = 16928 +Msg = 9d0f499d8552ce5d995e158c400d5b033f2324c7dae07f383bd68b8c18f93a7c91f5553d57c4c1b2137f00e00674faa2ec7afe9e27810477196d3545d225ad42ebe67fc5b1def97587f62ab685efa26865b079d1a0de93d7d4ae217369f76b62748cce1edbc8000cbb6a9cf706a3dabd716e9d488d20b4c0334059ff2698fe46f48c4a2e1dab5ee177845c89d1bb2a09d75c73ec366eef9a00cce5d25130ee543391fbdebfaf995a85ec74562e5d1ab4602102a3e2f1cdce01f9cbd332e6c1f6f841ea1708fb3be1ac49eb4565b23326d4655356dad1d5c2ff7015e910e301930c441ebf42b8ccddb343ca3dbde1fcc8fbd26cee673590dfc1d8cbfe354f359238439fbfb30dd2b6638318287f12fe009c0e5751cf45848d11daf3f9e751e65d42e67600a323d7d384b1ddedf46fbf3781c11c695a2b3b35b51e97c16f119b5bf2d4aa695c21629ede752274611dc9d67094c11c520c3d3d764bbe4015b8dcf412b643e12530fc7e3875eea51147a443322e5054fd13100f1c09715d206e329068334a5245782bdb5b5c49684b13d6e88f39d0f8a5653e116f02b700da5a2397bef4c6a305207a1e10d03ba556a9e92c4e5a4af0902d4fad37db981189a53971daa0bfbcad516ead1d79cd447b326576393bc5240691c94a3b3f1c797676fc8784e03d85853291f14a01062d02d6d0301684497c51b9364f44d44c1ee9f6f33f865c49e6d4ec6a52610def4833bcb4c1aedddfe0b8ce1d261a422fe9294da602a7bbeac7e4a6813928488e7e550d9891c9ec8d3882f807368532cdc280a29d39aea62910fb895f0c6957edb5b2f005082f5c5d6cf85e7be74d4c2f92341d614a64c40ca962bd8b34eae514d6908e828ea7d35764622901a139375c3f8ee8799f91be9e7a61698d1a749809ca380f978bfaf98208088021cc129c5cb3d6286d9efd3be46b3fb5ee25ce18d677f29acc67f078e641318c64d0a02238d45408c6b16fe4e86546ca35bcc20e83c70657aa8a51f58bf526755116ab72f78c50ae0b3fb061b14ebcd0ea49162216a1bb6fb85ce51b7a0d30627104fb33a1c21142c4b089594710eaee963393fb99ec5a0a7e46748fba72957b4a03570e3f5ee0ed796bbf74b391184dc0e2014213922b4f85aec5fc530a9dea667c89abd84705d6b3da1d5bfcbb8e15f0be289e8d7a766754fda1084ebf92d44dd557b17467c827f9646ab62a74936dae2fcfb80e8c837a749cd05bb278ba6485788ac91ba57005d4716d2c46a6707d839dc0379eb099af6bf11a9e871d5fbf98cbea9ad6e9479acb69ef6656386e6ef670c1c445ce022ec3664779d595c7100e383ecdac1b930e66b5b80c6512d36890109b070cce042003621e93a5ca3a7d6d255009a6249d892dbb90c5781ce792d7e516a7fa98e8adb44d6895fea3022e3ffce6f7cbeaad32a9e43f39993ef4155558f94d1815f6fc5d8eed26e908664c0b24c93e23560b3161988c11cf60401992cf0ea06d2b7536868f75ef6de1adff5a05c187b650feafdd4041f5236a14c515b31b4901c3af82b8b7c8989216206eb307957a8dc1cfd4a642248c9b44b841666de9efdcc6ea09796eadc8609007c29e920fbeaf8fc7c74308fe7f42d674b60d63403b071a6ff2541cee27e035aa22a30ef5fc24a42cb13cf896751d09904c92ffe7d589a98666ce29515e19ee50b74be310dbf5e646b91a7cb61736c3532a7ea8a8646a59768d71fe9f1513a442a91d792804293f5f0864fb240d94ed077959c54990b214898ec4019ff3d73dc91fa239051ec896bdc5a2dda9fe3f70f260a9c093036ac105924f9b1ba16ca32b4160896ed2dbd2a9195d890d9340325c08f8004e629a4833c09b34d9c7dabcb038e1d22cc868dd6b2c1b6918739e1d8f98cded425848915b412f35a30c2a72a22cad7d08a77a9e4b2567e492466118d239b1ef368b7e83c53c93043f1863ab47444af0c71816fd912cc66242b6920a6c132b6ef4a34308b8da500b75948d51e9a9429534c246e2846bc24bf16937dda64dc3d24249a0077e43edb10f28b14bce831dd3164e11356d07e20867075b78c8100183e9259b695d9ef25dd37bd6813ef96111346380de942baeff6c3903c31a836eeab1de3f149e13e8798b3604db833398b957aa99c641fdaf99c8a739a6e3cf916d611c91f188cc566cfd004341e45a493247ca66d3bca56c3e42f804096d1bf275c3899be865eec49ef2829c9ba896fde4cc6cefee4c4c6e57a4d46dd4fe901a6b9dcb64e27ba4ba77316416d1180e3b37ae383b003b1a3b4ab4e57aefdf5690b5b88af4c51414c15f844dbacb7ceb8b93b4d552efcf365d813bd035425894dcbddc6f547b766660beb1e58f721c547560a8ec3ca551c95c620040a6b6b07287e9d0218beae9c320fc81d59dac3f7282065024010808fabe57cddbd431311918a35e49a1fcb7538881bcc5ec622e6d39ed7426aa023ef20dc76849c79c21b117524c8f9f97263d20b52a5c857d326c237dde9a3f7a39d8d01a9a3387e0c9610d5d639a8ca580aa700192436fe39197c61f5526c65743d590b72b411de37152812e6b13700d0bc101cbbe22b27e9317ac39a0754983a211d408e31a908f61acfb2c2ca153b710ab5a7c74a0573482145d35882dcfe59eb324748a67e8cbe09603bf6eed3e8bd68f037d7d6564efa4b56079d5f7616581e40863e7cf2d7e3738224ff89f3871a7968535a11ae49643233c6f4f7a06eb91cb093dc3fb6892afbbdf44935e4a51c9e7670ba767dc11a5867c7dbd5fc65f1891ae6be692a1ee8e47c30707d27b1385ac316959f356481205a50de94da9a95c5d8053183dde7a1c0355fe1ca4d39f230a6cb67d675923d4c8418699edb8b2a658065e21a4291ea3181d92997c5addeb2b9f59dc6aee8a32f8d75096e7fa603da9c8f4c86e89c269aea32b480119b6253752bc3ea51c6573bdf0d3a8e2789c6b7a4e7ed644074e +MD = 5f88a84dbc3b2769aad1604365f5aa701340b42867fc44aebba6b0a73f06f0ef6261b0c90ff2884cb78c4569ac3f8a678441263fc3afc1bd9f8a2187a11ff4c5 + +Len = 17512 +Msg = a8a3016669bcdd9f98deabda37529e4f2db001ed3d00cc9e392075cc7366082475857a9af2b53badfc0e0aec76350db9cd3b214de3c26ffc4c6240babd4b12dfc12bea27ae52edfdd8142af9046ebba720ed0c8a31cc7a608c5c20a849a9ed62f55bfa1687da1b1795b6b509c845cfa18e8e6bac0e65165361d8be9dffcac43577de526e6497ef849cbd5025aa02712f7fe5e5bc64d76b5c339cc1a1c7f5bde1b17c99372ccf8fcb54f0a55392eccbda5bbb23c01a68a0036a72d2bc897100ed09fc7879c9cb237424195c9d684c02298ad8ccc31861ddd06e2099f72d87b6e1e928963d22d3d40876fe1d0b146a41a5740489ca460a4c4ca86ebd599b7f0746b8c69c8a1f2ec90eb1698fa47f8eaed4810702df8caa12fe7e26e7ebbca11aa2de9f3169a8262c0e3c205a708f0071401aa8de09d28a5a6e590ebeb476341880c37bfee1a501229081eb27772d07b371a5b0c65100f34a25a2f0ebbcb2822865cf22aafafe08d51de7949ec242ed9cee8ce861bdfe2b0aaabf92150b59d173db6a5bdebc9c836d3cd6e16658b4f8533f35155858b47ac3851abce5aa516a2169fcef423065ba1176b69c28416d7101ec0a0252270a2a9d3f193802a084955998eda77d5d42f4ea52f08b8b8653a0cd7d7176f834e982bf5f26cd16f5d89a43eea549384c1b7b2058ea77382e50cce07bd438f28637c9526da842c6b137c008f58c9d1a03d995da100d27d6414b3e616e9a11e725de487df20760bcdd8850d0350a6dcc8c628b4003c1650ec82b3f79dc2bc97f1ac4476975aaefa081b392c235887ff5efa0a57cb86ff788c9da15504fef28636cd30d3d7efbb719a39fce077d6c9c3e327a2ab3b77da6eb4f3f080d4e4ef63b23f1e42295617fd04d364cc695208c4f5fd7641089553adf5f4262d962b0faae480812404344116d865f5328060a17cf7da199b8b55d7b0e03cb69db117dfd65e1ffe0be0f0c339757022d555694056795bf12d6c3ff311d42c2673ce61dc708f9be96c58222aef6c608207410251dbeae1917903ca223b7250fa22366f8203e952d7c7c22ec4933de5775aeb924287dd097ef0ea7ad1a82b29b63b91b76d0afbf34da0c7ad3cef6a4d8742adbfbef4b0321e4798c8ade26f34cf1258c009e047ebbf79c0f4003e622736411fd1137d1509f3cf973a0374cf00b969041fc53e5dbaa1c556b99b2ac5f118f8aa8cecbb6bef940b5e557ed9cb0c19822c3d4b7f9dce9915f1547a1f063983bbe639a72a3561738d66917c7bd3b54400299ee92e98c609ee195b3995937f2b1d4b6ddf3401fe16c8388488e5899aed6594bb4ac5cf0f88b037444618fe20539f529ff1734214023e5c9520a14d3b5a24e628ccdfb12979fef3961c33b6cbb1a494568a628641aa724b49e039aef53eb0a65e0bc6ef92623ca6c748505defa9ef7918168c3f1593e67d1924191f86ffbb5dc17425cad8e5fbf95e470943fac0b2896b024aecfe331d6a9978ba2f3f018764f99276e37b59bf33d194c9197b8aa03da5ea49006a2c89bc316ab75eac08b7547ce334b9e851f91eb7be1a3ee06c3b1e7f4ae129f7c4adba77567b1e4c69cdb4c1e2d9beae532bf2872f6734d7e9e5945d80bdca15b01c1de1e88feeaea92d0e4f1df0823bc1ea57b6655a8bb0882247a74839514263372ef77d6060314b77b99af0f3852f4296d6cbfc4eb418cb93a102fdde500c5291962ea186e372c5105f2c086d37f749c3c83e50ce4e6f289c28f70e3766e1f2bdcc0dd18e18e1aa995778c0c82b024bf3d4940f53ab2223be47da15bed651e80e390ba9c0511c60754b17c69edefecd99545384696ad0416ca64290ef5eea972575ae86d82c719b26a27f664bb43b4346f0036c99fe0816499cb70c43410a84760a7cf5301b9f9f4fe6163c694b56416f100a044fe527f6b7c3bde4452d3044825fdd7152aed4f1338e82c57224be4c843cfe0805a0be775993bdb58f83fa3bdcfe7687da46d04584143b7df0a0f1c928ef55c455c14a2c81853cfc6ce5d6eee85eaea511841fe0b41fa6e26f709f5bbfaf87e5aac7497ac220b22577b344d227090c55a2d6f27745f96b8f38f40558dae62ad89f133ad6bdfec3cd3a8cc29a3b86061608c0166dbc49efc107abc264ed3ba5098d35ace4c767d8502fc2ee8b784e2272bdcfea287989aa44361854e479089d150fcf0e1960f4666ac206174a7fc9f7d82c66fc5c102131755eca4b7c00e56977911fdcd92d4d04598bb6db3bb4a1ecc2ef25bb6d12a90bd0ec220470074a90adbbd8a7c88eba28b8f765b8f3a93e77df807ca5dff3999fe358c01e851eb0a923da69dd5bf7c45a159f932ef6e0283f6a5aec5a29357b64294f14f81f99b0297697441c081b03fedbeebfaba9dbc79a1008e526dd4ab70f1f19a13f941ab188125d07b2514ae1ad986f4bcda10ec51e5d0507ca60b5e4e73152e553a7144d5b83a6255ecc19f5dcc78bd7f360fb89429dc9b48358097d930c8561b2bd18dc0a470d1d6fed0ab912e5dee4bb6e148c9d7ed18c0027b7f9791d1ba6fb4a9af61ae8ec5064189f93d66fd2f2842d0c57856cb6eebf6443e12fcfa0158bd40d1403c5ee8ee9e34b2e9de20261fc222572a0e3e46d1f722fbd2da09d4df2edf1ce6b8a6df95fd18fd1efd8e7e371e202565670e487bee5fdf5d94c7da0aefceb8da882f5504477e03622b0edd793e1258b4c9021bf0c441113d90fcbce3e955cca416c1f04162aeec40d06aeceb0b40179c9ce468385f11b9fa3870217202bc80cdc824585638f0df3d546852976bf18ba7487ad65ca916011af3eab2be234afddc081f364ab08c04e320d1b785476fdc5c358d0e63899a0f27283417cf35486b593d7b3226b1c984b99a6cc5bc88003143cbe4b755e6e30ba94114f7ad1efef2ccce00f3f125f187472b03224414edb2e573497a3baa3a1e26a553fa61c8b4b8be257622b3f34a34163b5c7625d57e89c99382ff1cbce77028bcb9c9f219b2e8b7a9a56675031db4ad33416a67b2fadb789558ed0004322836ee0d0c68fb3fa83dc255683e3db12f947978a51392abd378df93edef6a +MD = b9c0384217f755b7392a0c9adfbea180e16a45f77ac535a42337eb8ddf3c854eb92c69caae0ee2aaf72cbe24f5b6b11dc985d7c8003c8aa0663c8d4f269fa9c2 + +Len = 18096 +Msg = 993a3df248d8a14607a75122f59986a73c80d6e245760851287c27a36761d5c0dbe6e209ee1f1de10b1c6a6c53c9159692136658714c7637edd1400d07eafb0bbdf1a8ff3ab7e7d34a230e56101c7c40fba92b70f6578577dfdc795a3bf9cd9428a5b65b9267a624aa046569945a63aa608c4db23c5fde1be8e4f8146a58f362024835a560f802dd1506962c484b71deaa02f3a6ac2c282aef33e5c2fbcd147d35234c660b33a5057272ca2892b64fe3bf5445d5ac850caddb0f69ed5821d8eea77e2424fbdd34a4a99028e3db65a5c189ca6cc6a53432ab96c1ac1ce81ce9bc42a1e46a98c15ac3a1a8d9e78c1e1a80efab900100ff412c0790d5d71385ecefecd3b5bd4aa6bd68440204bc0baa5629d841d80f23afe23916c60ca741268c908f5dbfa77953059e79e6d2e8c2d102c42ed26d77780cbcd8abaa7b12dac56fa6128729af8d91db6a289b6bf5175ac657d8a777c165dd7814ae8347a2462b3d395d991c5eee28e7d6396af66b740f49ecbe081d7654ecbdf2079a9bdfee209f5258dbbf3a04e0d0e9959b9bd040b6348ac83c871dacff347c9f379d50386b3cf7eb953bcd38813eab227684aee3182e3ade8dde3ed5df84b95ca1757d8dd6be33fe0eb79ff0d2db25c942d68cc5fde003e8414a61375456b127224cee5627ca0b798f5c36959c4c5e7349bcf34e2df1edcea1f20f3a25526de9004a2cf9270b894460511c90a73c5e06d15c6ae66f0a0078f5ffcf461c1ff4888496bee09e26b447c9bfd947bb512e6c23de79f58cd345ce85982ac3ff664eeef6592c7154c6946b12cef324a033d58b876ba8e34df3c3b998e6a71997ce84019ebaff161091329682a5f48e1d8b5b4d442b80187713821f7811ceb0ac009dabc3e2be369c2f95b1626d64edfc01c998a44588fcd5da8bea6b4027f006a3a1d2aff8f138be49c5a5fa4dc9a8033c2656ede148f72ef1e500ba9b3b426c609960a82520863f87cb58926ead29fbe57a6e6829497249ff984bad4b910ca7df8c3cf791d487e690aeb472f897d7aba3cec85d4312d3efadadb18b78b1b780c7824ee46394a37d0d76a0e212101add1f294c14572c84e8a32b1c9e4924acbcc1837eb6c4e942caa52c0329e49f5a570193e2d48e1debfc881a732ce77152267498b4b7db5acc9701d7c79097ccffe2f01472e70f6f72f305839e7e7a20108589c8d82dd16fa9aac87fd35f531f714694b5e49303a98094c16d84dc29ba50a0a71cd261cdb042cba32c0fde3f21194b967d202192547ca865e00f8d1cc67940779a8a9bf8a6fdc43ae7635484595db99e750ed9e3f7d0f798e426db7cccf32da04ce92379d8435c34b7b70b494fa65753a397021f1ae3490382b10c7154252fcb3ad54079ce7d5a3aa5f349b78c5dee5e11a1e56d461d664dc1996922e7790ea06b373b20111187f3b8ff57f697e84666c715cbf601e6161faac43ab80c5691c6e7f85c952869ab08f8c37d2df8b12714cbdcfae2d6a62021431bc75a4c2482e6b6feeb019beb8e206d280285381e591027dcbb584ac54dfa968657312e4ca7a7e133308bf301f7e420143025de99a301e3ff5580e7ab6553abee34653a34c8b26e7e735cb712affb18704d357289cf90052c128334c130d38839a41df845afae68c6fb9b6f857f0f5d25a2df7d56a364974b3889b96d75233751f081f1e72344d4f51171a4c42dc5f81a77498667e826a04310b9ff18feeac01c60baac83eb1cbcf2fd06dc3681c7f036149b1526657d29fee23c8d2b91d129843bf0b17fd0dd27a50781a24345bd4d63c0feb2fae4123963f63aeb0cf7807c70cb4a89459a301ef6770b7b533f4e1888c49ae64b2b8cd85a93daa225f89ec1c756f1bb3b11bca8cd94cbf1ce3823588c6896388204940ecb024439dd5bd3fe73250dcfcbfc2acd12a7ea8b1df9e41559f41a310535d2e49e8ca1389beac93d5b80c54e5c252195adf88fd2a6473857d6b050573d86ed61bb771928c96b258567ae41bf55524a0986cfe34cd2edc727ebe45e3592c18e8e0b0bd390cea792df7ff9aaaa204c4d3086740e8309b13a8c80d76c506dac5c717492f8f81266b6518ba7289724dbd113932e37ffb45d398f7dd2a33234110015df52afe8fd6f39e67301e20fc9c67eb89647864639b76b37ca1d2a6251b6217f359421e9f78cc4a31f4f019977d7fd29780524e20288798c50002a682a6368b95ca075826883ff9278d9acbe96d4f66e1fb1395b75970a96f5c3cbcd29e27cca3ebed43cb81d91ba64e60c058e86108d7592ec37fcaec75ea2ad3418b4fa07bac236669e4f222323ccc049f6c8b5f49061f26600fe9358eb40078ed13572ae91cf4f5230955a5cd699ad8a19aa294a7eca17cf3de30f6445b519008013131b584f53c17af38de5dab1f6f7f79da9b9609a4a4e7712ea9375eb2bb3aeb6a5f6172988da05cf826537fee3b9170affe93db8d30b35f5ec8f82c885cfe286f0e6d44537c658920285f667bbf80157f1831d0cfa2ffff3ddfd74366f7ba5ebbb94998ba7acfba5d5ed1ed3c8db3eee482f097e07e25d748488541c30df7e4dd0a86de322b5776ec344b72c508b5535cb9407f6414bd8e0aad629611124f514f5c95935ee0953579432ca599c30ce96445b225cf293f7a0178ffbef5a7292a8f39f636954cf17c70f615d42f4f13277792b5f9860e1431a935cd2ad53f0de7191d396679c304c26fd767bcf9ff6084234adc892d35e43b7e6e5b78343c760d8990df7170e5379db261c29e8e768d85e3b89643395327fdfd7d1b159741ea043d1f49061f261265052f97175126f2b3356663b61ed847ffb30c8c9172c1e271b0331682e8f81dbec49b55a5e693287294fec5605227ccc71b77406a6b4ef7cc9f56c87642edc2117d2f9ec8b34da77a8edc4bc087d44edab357a70ec54b828b3704cf6ed17997f39b76d30e4bb8e8018f796755046016a0f71850fd253a2b1433b79bcaf92e17ebabeb82d5245772ce136098ac7c5decc07353bec40fbd4a1e0209ce194e7dca403b082ecbb1cbc026b72c60254410199fa47440e1f92767ff1e55d6e835db17c7a5475730986878a1f7275e5de04925c5070497d5561b2d4e053636a633d898b887437cc22ccfd4d6300bd3c4f54ba9a7078f242ccb0ae27143257dd1ecf8b5b95d670fff03648d2a0e2 +MD = d9b7d7f2ab02c4229f0cce5a02939b5ecd8364070d1861c72a5590a9825d153fe146f044ba8fee3f26fa3923b0a66d751fc360b19a43e5e3f10b6921b8e4097f + +Len = 18680 +Msg = b7571241008d792f0e1be9cea346e4aae82967db6aaa119262ad88f1398819204bb69e9deccfa5d3a8b7ceefcf1675ef320991fb2718dcf9d367355ca830423c2c7059acfce1a1481129740d4351086e0b784fa38dc91b45d6aa861862369128e1ee0b173aabb5b5d1d8a3d106dde54ffede677ba5a6169df3de44ce6f834e09f2977c85ae1628426e2b23e21fa454bb90a4a22a7697152ab36b3725d8fec10ae8d2739f5f084419728cbbea998d9dda4b30c85908855f139dba27c6a48e31504a09ba0d556a4f5f6562358e797f07d3b6eba1af64563d813a31dc58db1de806a0a317769825923fcd145778c964dbcf593df4d591f4f79c10391d8486922c5273085382311f55df340cea50912362f5bd8f8b729745d58ba93bb4f2abd4465c499f36da2742e06721b1b5bdd7a4e16e69472c2f7f331e778d9d674955cd7e4dadd2872682757a001d6b8268a5cfa361e5cfa0b450a51c8742c9ff3189641b4d2408100d4a9f6cd2afa217f9028ceff7ba8dafa8128215e4522544545181678338aa973888aaff045fbe3d17f7c30c576feb20b4ceb452b5451bfd57b40ca818701ee54f447d78beb527bc6a8a5c43ab8c4fbd7f8b221b23a111f4e5bbee273454cdc2f98400222a3a465c9bc53fdc189a234cb251b4b856f071efa46c0d2cfd6d1ff5de521b446d7581e552b0541fc820ce96f428527075b9a2b73cd152fe9e427d48a7b5b625b2ee411e36528453e3a6b863ee19e48ca9850c1456f2a5e73d5c4d81fcb6b90e1f2eefd0f0b3b5c290b4497b472b525419db17cd9ad5ef2d0341f869845b0c47dcbcf1c328dbd0b2f8d3e9a5a8678410ee432bacaf841619177be7c8e8ae98181220b1bf85d3be6c438a00abb9d363084f45b0773e0704f3a1928166d0b743c9e9e3958cafa265389862f653217ad584656a0ef7ee649f03cb0c2d0ae27df6a1888c07f14f50af5d1fe233668961c3cb5739adf468a5d190bb73557ec9089ae918a36eb80de6832502921fab989216264e3bf63653d281e4994e60882b6015eac0b132a7906bc8d666fa23ecf714b4dd72f64f8458f197458e26b6f1b18e51e9a93dba8781e768b975a3a5ef4def8738eaf421a71f0cfafcc282bf8002993431facf701f87624a1657140f7d432b767edfbdd5684f2a94515ceae2ffc789a809dcefbb394be5563534d5c75e81d168f978d7d18d90544c8b84e68a34a76694b87726039b7477745d336f375aaee947efdecc7fde8c910af464ff1ce94b39df87f2fbb10eab218cd87c69c5397279faa938244625e8e9b6d221bc01e45a0a73be76f72b5a98ea86ec384bdbc2778b696faf658d284f64396ee6a6a1ee7ddf37a52aa0da47e2da4ae28f9ee0be62267c896b19beb0670b7910d94364ce5cc213833781269d32f9c102a8e83cf6de531b3e93c74085d8e55f00221eb34e9ebaefa2c41f78232f50d193acb4562f91192ed750f87b6f4bfad385eabcf434ebcfb348fa0436a282e663dfc287983423809d9cc933d7366853bee859a79149ed0a48be01b7cae3d2c3602c13eb69cc3d9050d52700bca1d6f706729666f0554972944c00c09aabc8f0aec3c76731be87522fca91e7927a3eee9568ca817b20aa1080391fa810c50c7437ec058459d3a8cd23c33071c187474151151c809871b6eaf4cf88f592f84557e1eef5c847d3490912072b25b1919af724c0b5ecb111150bd95460328a0b1ba29613c0bd6486110fe6dfab8cca5fde18f5b0bc4d2dc970781511d2e45fc7385c3da18eeb18b3a9e68593d82c75bbbcadab2e5a29745f6f3a924e039579f4418dbee186d9cc24b896d96bd990186bdcbd3082b70aee9bb95a36531ecc405ae13d011bd10fe69fe728c8aed73d1d38e5506bf4fa770347f7e0eb6749121cc0be75ed979615d0eddea33ca6f9bdeaea806e44cc4cf91b29d0d298d3acee75ef803c6c9cfe74f0d6440f1c996896e9495420a351d4179e0bed3a25e071e8b3b0d09b667331b3b021c17550d04b53801c0a6d70ccbb59f4b3f51f79d3bd883ec95699c165565a7798ffdcbf93cb79192d495e9385284785e9918a7ef7bb577e02b93e66b896f1ac01a34c532a10921b42bafaf5c4446ab97769821b9390dcdc25a1923db41801b92558cdf3dc4126ee2404497cd13649f924240f38ee679fbef8b89e2ea3051105ccc46887f287bbfa9bd05311f3276cabb76b39be5166298d45a36922cb84aaf8bd8f24f8b409dba66fc6219d743f5c39f9e5099304b501b2d20dfbff76be53fac2620a2c6af00d5c678dba069aa5a009b23b86a04f7daf93679c5dafeada9473a1e5200c5c63da844cce2636ae82c085a914b9cd7ae6bc9acef896186f01f5cb23bf7080d28bc884e6306e13f7fd4513a819a803cc17af2ececaae244f5bff6a10980271138f61c5fd5c9987bf3fb61d75f25d288e3910b62ebaaebad00f39b9301adcc568982daf59f9af794c709b0ad946e0250973689cb76f9dc13c462c1e4beb086619ceb3abc1b0b9d0e8b67d429cbd37e382ee3e4731928323d9275e0228b38e3a6e587b1fff29bd76d93ce22d86006c4944d11a1f64ca69c7f0db59ce901b742bae5f0d74d90bc652672855335fb7873e9645848c17c05695c889a5e84bcac420230af21318ffd94cdca35bbcee8a8eacbf7205f6141c5275ab5ac8ba216a86001382b16284ac004c7ed47e30fc1f8b7a087f24c52185654fdf764caadaa0c0b5c7eed2cbe4bb423a97e445f751218590b9956a6107a3980bad04b9223d167c268777ddb501d3a8fe6dfa3879b53685d61adb5e338d1ff2915d2c95891374c13b9b455b88a49d3881483fe01ef0069234727a88a17da17bc937186a47246198dc4a7fd4ab93c0fca972dbc44fc93ab4920b9970149ed03c9c83edbfc4388607f1dd4ece8897e5fc5f32f56d720a7af3d82b619ff5b7553cf088d61d67178b19629cd9d38677b43f8ccfb561f1796d58ee1bfa9caa91d784af8ff90b9a8817d317cf496a0dfdd4cd1692442a32dfbceabc238bef9df4ff1abfe07e11c555d23ff9bec51c85efeeaee7c3ca509f030fb22a8a3c2134a775080ac38eb74e446664eeb1766f5616a9ebe5aa6e599eaf0cb6219a37b9d974e056768051869e1e784adfef83ede93aae8afa8e59cf99a95e008799a13ff321e90aed5eee051daab3fab5c1151ea423a4960db9b339f7baab9846d0a53bea77372e56a68dbd33b2bc7b566f5489f09834140571a32020aa9c8444876836253e73c998a1583449fc3ed5ac4167b63662060eccff +MD = a3e6224e7cc986c44ba987f70dd90f08cc77e36ec717cb07f9c831c0770bba22b88e9d4e86e994751718ee0472b2ae7b1c1cc8c832f5118adc896b0f05fb3c14 + +Len = 19264 +Msg = e78360a670b2c0080307cfee5a2d20eebf117dfc66e7d98eff6f86fe8c76a92f709fea73c96370ac00570cb29fadb4f562fe34649047208d8b310d05a695000a383f2767eff2c79866ad762ff92d8a76d8b3d1565a07837794bd74a92bb78e8366eb7f498766af135c91752c11b48ab948b8be9b6b31e996419c25b2c0e43ae1232c5ae33cc80f670a8c71738e4a9c05db9661fb6dcc3c30bb5586e80f25ec6e968820fbb31fceda9925d2ca19f7a8a4b8d4243d05e1638e2a700112c0818c70e889395a9773d6b531e500fa5ac496dc09fa6e2bdd7746f8b575fdfa7b01033040b70ec88ecd0e40f95364cbf8b84ef6f391a68b9d96cdb584ede266e7ac37f6c799050d40345ec21af764049cdcb939a0203626ed46e00fc060171fac8a110aa4b787f057b0ae85bc59696fed36bdef382f85c47390674c915406ed73a379b30099fd3a7849e6cf0502dcd294d1435ee246fb2dda7b4ab51e531697e400583a03c8cdb34d08efe9207923f638b234d0c7ee0028c810719290e4afe7a6a894e7d4cb61237ef4af1b3346a8a382e3768b0faefc7ee656c42b0e9039a362a317029c2a1f52b3150fac67f2d1a0196bf3d8e10f57f7db552cc7c1dd1c94bffac7d3826e71089374f7e6e30408b7a75291fe6598795b4f158fb0d155c18266b48ea2af1ebe0cc618500fd004b4aed1a03a47c5d1cb72ec9fd72c65808e35fed953b64bc26d27f50a0070557a3c4e415ed5f92642b30457faea84a5e5ec743072fe587de2e821c850f1519bef0a5f9f944a5db3749ad83b2eb200ba0c4408a48576d06d0796c2e6f409fac9eb85a9924881bb91eee9b73e4415e7cc7dfcba011da56644b8dfd1f8fd32b208f415f3c384615beb3806690843fd8302c17e50ef3f72622a7e2b18a57453c280942207da4fd484e7db5bb64233511a855f309218f5c50b46e0e25d96605472585214ab7eb2c27fad5e4e66941cf9f57ddf7c4a214686aac1666c6972c91c0ab9b654a857b3119566494940a507dc5c11cac93eb53b9d87c2983204e2b895d2ca4948c60e5daa0b3a25b30d1efbe49669a67e377adaf3ea72ff9af58e33a612b49259cc4bb5752c5078f495a601f8edaefe05fd182d6e1bf9220d061d4537119e1aef84b5c55a3fd1cd74a0e62000a70857c558383cf7617e89f4fd38f33118b16773b4f594428be4a99af68660e50d9e3b2610820d770629bdb5a386477a6f14034b25b32a1359b296d05e2dc98d67993190ec9dabd4502345bac0b048fb5ef076e19f9690b7f1631b7ea28364e1fd20c26bb6321bf88894a9691c5dfe9c2d6d469cea46cd149b1ec10a883238c9165c741f34e866c9f5a4722c7e36724623b2fde3cd6ce9149f0b0eddd9df4d2efc75d2142f689531e179276ab0e2abdf89e8222011b0ed9e44538c5f5c34acf6f59261b36e59b017923e508a780ab150a7363eba7eb9e099d41ec3f8dbd95c0b4adbab62bb64bd62511976f69f568d82c5c5d819dc30caef95933a111c7665534379378adc31c6fc66322015ed6d465c2bbd78a5f3bcb387d0db7910e9b2d0b827948d949a67d2cc19b2d64f29f8e4c52145a7c68b06a449cc1d085f0835a421405336e6bdaeeabab2c1200c1d9e70a7ee85ebe46bb5a41dd382706441a8e975d4dfb9ea0db015ae788687b48f08f1e9dba6cf675c72bceb2b3238895eb3a89e2c609e0752125b90b42a92af48de6f7330d0d8b726e5f39b1d54e83525fde88390fd6ea4537fc448afd4ca6610c7f32d352a903c91b55115f11108cf602fb10c47deb02bd99d59bfaeadb53fae6b83ff31dd7e5e658bde41ef9021c1d5f00b219b2cec03ac1421dbfcdddda3ec732ad16e102a86690ea3085ffaba724de9ffaad20faa94948d2485e08bcafb9087ed8b32ec1d1a66e7a75088765c4a8fc2948f35ae734659b06ba6a1e002ad634ed615c699de8424bdf203b32d8eb16522d3b80c32ce81c224fd2488030f232d71ec57723ef52a6b398d072846d80f95b1c20e9fc244ad9892e3e9dd1c79c3b69737397d04eb7603037f462feac2cce8186c7735875c32a3a123dbe855c6f7c569c0a4311247ceb3c2d0a61041d55026ffd6dc18a99e78abfac7e4f0d48026248f8e7ed491919c441e891112729804170d0a268e4f92e87844d6eb3fc12eb799b0a9b1afa852477fc1b16e7ea6944e82eb0f3be0a1c1e8d12859d71b455914ed741a230a801037295050a59c044f973141ed0556c8b2e1804e5792cd8888a4e885e8be2d4056d40d766f9db4b55348eab6ac6b37eced3c4b5dd8039cb143cf51881b685f11a986f2d914400ee028c776f25554cd34fb5ffbfee512d2e813fdf228bc0be91b93b59f214a75f2ae547e9d9ef0aa5ec963b458d884a7b6577e96910bd28e13859bc9ddf71624a74761d32662835433d3ada12994c0aa8f230e02f7d965d925784a2a7403823576d2d730dbe5183a9479629038d99e03a6774baaec3b7ed4671b26402cec9591a7773cfc82d0b644c8e309e84b50289b4379bcf437d823672197b974cd5a571e82601a9fe4ca665a193a2a112ba06558ad51e949a25a5f7a9a138b2c1ef7d1c54eb2f881c97c2f64cda64d73a0725d232e285a12f36637f51bb822d1e8680a6f55985f0af98d194a2d4efb76716e19e50c2698b5f3a7b5c0ecad08ccf3580a02dd38d6a23ba62cf4815bbb82683ba08490722a9c6ac2e0c3551bc583076dda682fbae5b1586f714a11f416ff4b82faea0235982d2062c0e79e2adf60ec4f81879347149f198fef3524429355e3ea30fdaa966bd2dc2d5e120e01e0ca69a707495007ecd443afae9b046dbaecf81c49a7cfbe2af268cbc12deec95029481d7594b021f4b8a176b766f79c132c52bf4dcebbd45df48ae5f12186a9b5e44f58d252f9bdb4b3fa8d117c46f7277eb87c455cb4018c420b23f7d41eca99654701266a7405b52e159bc4c739a77d48f3fb3838036d4043b22cda30fe548313f7bf7ac4691f7e8fbb49d92d17d49df3cce32e4af03f005f49a9a21c6e6efc56293bd54820339840b43f57982aa510e808dd2f7ac2a055fe9641587fb5408b96a31d3fdee06a89a7c82446efb8435d8e729044b0c3b7c688639d03431cf3b83b2e0cc06ef3ebdb2ebfa1af1a0ad60c4cd1a574d439addb657664ab4febaf0bad92b061e09fdf153c605d99006885a68cecc3c8ce6da91cfe973f588b6a9b0d5597b2291c2d6ec03874010c8b1978b2b58c934686a7d412b990d613dfe0e0459905ba210ae5bf638cc33410a267d8b82f79bcf8e52f5544ff28d0e33397a53be2a36f4f930efb869f159fae2d98cd40617be7e6d14c553a3926d6d16fd51378993a7abd9df149b2d932e9ed15f57ed3b55abc173347fc7dcd538fe47be3 +MD = cd4af24388fcf4481291f864142b6cf011bb4dbda0c31668a055f8530c253b9bc14b8784e31a1b32870c9703314308d1a79fa557da734b31fcddd874728b1a48 + +Len = 19848 +Msg = 687082fce9c342cb8de4fb8dc21633bfdfe6917c6460424e83829a44e0f1ff4596eb03a37a7dd0f3a3f6c91d2a9b6eaf2e9c80771b4766502c7cd03c2f619ab38956f33b792cbe39a1913807c2cfdc46c7b7847605d7d0c4c1f4cb22f2b4cc9d499a9beb6f37d5448e9f9274121b442db11de3a1a879475048d1d51fb2515dabdf9d43dce308ddbd72071d8ba3e5700cf4b8e5218e93929fcbfd345bf6a21584524933365d069e4b55b12275fc96268a996ed41e3f8f7a57515f30fd460ebcd1aa85b2206599e0974085e859a5972f4fa629f6bf42d3c721e3df132e2afd1939ef3809c284296a493a6bb960274f530426d0952d1ec941a4886523152bd7f5652a4c8145411e05084c4bdbb1092559511e4bf7905ed7af8948d9aadbd00518fc63a860d125e1797c7d0d9776d3830bdd9882640f8767db772b23eea7a2ed4aa7a034ee8db7d88e4ed59935d40ed02f519b5d26d223e08b173a2c38a228f8530eebd875a27f6c0b265cd7fdf541738e5430c48402b9aa88117cdacff3ea8efad84b7c3b380505baab1bb03701f4d6f08f5e9fc5c7d22d9a0cfa16fdc4701808aec9088975d20c6186190a2a1faf601da92dd63248f5d088b0bac9083a43fc46376b64a7846de7c95f5ecf1f78fb79dc4ba55113aeaafe1ca6c6d9397feaa4791c3b79dd8b5e00badcf3e55e345f89f61dcff8b0207a1c1c962630d8bbed766c04412d73b32ebefca8df362f7a64f834c6b2b450c7eb935127e0b42d15d5dce6988469b023648856692aa8da72902f5cef566b3ccb87cb8302fe4f7fb6283dae800c16de0488c891c8dd25a6466e94363fc406bd53d62c7acf87e818c671018d63e11a437d22e5756cff94dd1b83908c5f036e19875f1ffd3584663e6c358f4be90c5f27b7bb47cafe98dcc51c598c24f61b899890aa0ad6dcfcb33ad0fe51b0bb94cbd4d9da565825b1e7a66e77eec7ad154184963f56cb6df7b6541b53ae83818148910c087ae78a509cca3c651f3d2cf87d23c0a76ca5907e57d375bd0e8ee2dbbda578cc1b3ed480e378acac884e1acc25bf3769b22bec977e0105c3d99787ab115944aea126ac46a4f7e6d390c2209a209e230d92272a4d1324f4ed786718f92ef599367467baacc79013629e60e5695808ab1b735ff1a5fe8569c351c63ccbfbc19eedfcc9a5b9358b5be11cf11241b447f71cbd9deaa9276c8dcecd7c9b2b60047c5aa1141675d430e5d9713d4e2a1ca23098d7a7bd60772088955450de2045085a06cc0fb4e98dc6dad2050c422d78607e152b4511d2d4eb81a04f0badb292136177e383281c4997615240269551b0ca081d20418e082713a0782475afea2f6eb83750381916eee9a3e38a53f09fad28f7371e62dd0959e10fa43d568dcf056189ce79f630e06505c80c4b5afb1d55c272ec8d6fa6dd509df3ac0076ef6afa33f9c2c88515819733f756eb045dd591dfa2c2d631908df68f7719d79d7bc1f72e329da3ac6f016bbb5847d219bfcf4ac8af435f70442032ffc0722992dcdfe5985ce67434e669c8e414696861c81266c6c0f791f36a9eeb34f93f5e1eb8c9aaba9e26a2e623c098f7534416a321a6cf1ffd65d484a9100b774809de09b88930dc21e49588ce0ec23c3c5e42a971936b1b8f1591e9a97d7910d556101b83255d460da8b5e28f5c2efbf841563961e124049e8f2eeb13ed1d47c9b15e1bc2a81b3f89fb6abe0cb1c47cae75b81c9999e020515c15528f68df634c9f2fd31c175110bd631ce2f0156c068780d21ac0c389b9d103ace6c4f7a7ae85aaec093a7ce702d26a3317e1900ee3abec0afa7e650615460c5d6f5ba15d6e9d59fb86c3dec45bf0981725872b92594141ca867d893f7cd7008fb4fb6fe9ecbc34c5126046d2633e7430d48cede0b17205798462361c38ac65a97e4d67337008c4b274b9bbf864e586e7ec95dfe03365c27ebdd8758590eec61595f9942442ac902b7675451ea40d56a2344d077b2643ff43f9854d62cbc5a83ac1a6fba2a9ce2196de3cec2c6cdc6dca75596f97d433452fff11c69b32589580cafca696ef97fd5c75b8b90b047d52c877641f1d835e1baa9925e8180dd0144f77a59ce95a2eaee6038fb3a1b4168d0202141df67ceb091c8d69bcc2a454ae0f9146e58133bbbc9b5069e3d7c4d0a7e2de117308070397eda484497f3e0de928e08a8a48c168ade223ef4f967bd227cfd204293d6bce4e86a61f9738242350032c1692254e5b0b2546c801c423459531a895457cf273b54d5be1afd69fbd68063d9505ff20bc5dcb7f9d014a02507a6f266bd1ace21b55ab8b73983ff503bb9adbadebc080b42c3c97165511601c5cf3152fd4b784edb409fd7c5a5d6e1ed028cd064d4fb66bffdf56da070087d0c6243c88578420125ccd7aa5fe1654362f16dc4932940a085e1e83921ffebe953d6a651f61fbfeb1d561ca968b54ed7261cdd01ea377c4b3d160e8e5a3f54c934b2d569bfa0465f3a52bb5f609fe83fbedb6712ca7e02b96e10e4b7c9dcc7af177d5d8a62a879f005695036d81fc5cf95b38861c46b788d6158e75fe146b90d849cab3e5fa6cf2ff70057ba5fa36c09334bad99588e4239ef6492e1411bad66f4a75af02719ba71879e5e6437c93f9f1fea63040764f44140ba73d669ba093df013c94a598fd0575fb9c0cf20ffe4e3c446354c517e13360dc116c9bba08114ff78829757578563b7d92b558bc5c069c8b590dcb748037abf1ed815c76d796e8b2c2371b13f5e095882fa91d8a966a385df022fa93159a1dd3a44550d8f66bd1bc50863e775deda9a3dbafea8294c23941905dfc7e89a2dd099f8020e74dd8339d9cde87ab96c39f56fe9167aa3e56c6c0a184763dc298141b45fa73acc42436db0c079eb68aaaa02900153b0c7c6d08618b6013d6aac4e992fd7af22d449901000ac82aa01fecd4a549040eb0375027acb6b97853286d85f431ca4574b37dbd94fdebd4713fd0625141258a9c55484a298b5750bb23dc0fcc48b01389fb19911d4d364332d19d72b5514255dac09b996170014117855ab09faaf5047202b5a62561721febbd9c2e5adf2117725e913ddbce81f36e352d90f7be61c139b2992433a36712a2eb15bcc7558b796a19745e1f0e9d10c81b9dd65beebbf2e6f10c32d07adcc261434f4484194822ccd88a23b6961e3d2e1ff4ab54a2cd3f7fa957f8824e9ad72fac94ef1a9520bca0831db527d0cb24a629783669405d4e0ec1c39fd4886afa15112ae4102fdbecec01733cfa226e6d3b2173a0223134ca9a21964f4b8e12d319575a4cee51405cba3cd4dfb8f6cdc0f2ef2b1007dd1a592cb1182f71c95a0946676c4f3d6219b4111b8ac6e8b3b2c3d57be9afa1acd6a3cb599368cda10c45a129a81484ca2c9bfa86dc1a12c1e321ebadf4a4770732517f014d21e77fee2e348556c44bf042ba7b651103be8828803c6e96181154f40b50918f8348c9ca6d0664bd861b3e22b99f +MD = aeb8f339811b9309563e11e581d55a869e09ac805e0f3e2dc422b44c598d52a459eeae2a24d18107eb83d061685b0f9662a4b0b5879566164080469b5f86393d + +Len = 20432 +Msg = cd2e1dd12020c2aa7a9bf756d0cffbace8796673bfb6afd42719f10eb4fbef6cd91255754f464162b6bf01d57f431fc709bf9ac20a237751317378b60a1b2cda2184288a6ae493dfe05ae8fe6d3af7020aa62d37275e16894dd8203c0294a2ddedaa1c783aa5c10b4093323b615d8d463255a639dc0e9463c3707009650b595b84acbba7872ed1cd1e9369f32554e879cbf48d2ff3dbfac6da62f085fa2b5a3d2fb38d7f192ace0cc182148d7fc610851bad6b83326f4f9cdbd728188b99ac6c36e71969b73fbdb27287bc73385b0e506ba6c79c626f9bcc0ef6a12bde0057cfe16fe7cb2b15a8a679cae80c18bce9c4020729e24b86e63ebbe8e224bd06644d77737f0e3b5596d01e7420c0e691a9c82af919bdb45a39da2ad4736dee53dad0421d6a9bb0a79018a9adedf76c81574329a4209566939b88a3e3dd6c3990c13f88932fd951b29d66619cd5197035f91f482fc5d22ada15306d3da78b6865218192fd562fe81fc5a28f6a628ebb559a43cfc291dcc6d7aebad109593141790380a88467073b9510b47b3e1cbf15883f9706870b1c02316e0e17707cc58e756e231250ebc814bd87846d418a124576f20334a3bbf8a8905d14879997b115006b5217886ad9393f31fbad9b34f015c8ba6fa34129d97e9e84b568ac325c9fc301f500546aa472c217ff8273a2c24b26a0c39987de284e00ead704d3d52ef36638f515dd759089ee3f7936f15deeb037aae75f9d614bde619763a134098fdb9018389e4b1205446db3520f3fecde0ca4e2c33dac3aacf667944288f755e71de9aaa7e3c6ca6b6de47b705682d7f8271450407adcf2b160bae85a0145429e821af52a2c75232bcafe9dbd52e5a7a6c830fb44605410c4e3039b955346571cd2cb01aac080a7ab246123204d8de34fb9a0ebb8353d1c4c46eab6dac8211ccad5a3d70de810de5442b514808da5135ac00b288542be9eb152164010a6ff190e524b7e3dec4d4f8eeea379c75b53bf31a61abb91cf001f5acf3041213607d751136bfe20145e82c2eed259dcffbf703b3274abc6242b27b185dfc2f4c062ddfcdeaa60a0a76bff560becbca7c113ade02ec1000b88663c1d3bccc9718c37b3757cb0aba4ef9e4fb40d96ab10e974ff8860abc24745d9e806bb9f6180e1afe226b526e713321df942bc7a2cffbe0ced9b92d8fa64a1adb2d4cbff8f0909f2f17550b41dd7b910856ae0404a5c8903ff818af0b049e50a22f034945df44a2768cc170154d7cca07b9340900a0f9281bda3119ceade5817c1c0bd07d229ed76d092d0b694fbb3f46424a510760021adb067ee84b20b44fd16ad3000f6913908af2f447ae52bb536c887d76b95187eaf5f36eb4f0fb8efe3aa205426d2127805900b3bf6504f1b8b2d239e476f3df1b05279cea50acda2f2037ff0226d95f095f88e7dd2dc4f2e1d1d60c24d0d58c1d812966030a932a552ab33cd9bd003ebde7120d1b5921333141fa60a247652374e26f76995f6d0402a2aa5b33a0142af0b8229004778847598bc5d3f74b2119b3b1602b17ff98dbba2063c69a70a3c8442b411d33199883bcf7aed29e7ca7f35c66b21ff94b9525de4c95fb989f2d7b4ab8d400f1bfa08cce4e4bf9023c5834c18acbb1c7c3e087015fa786989c2fd8670971e7faca5ed71fd7f393cd0ab0429586137d1e090953a6022ee424e819541b65a14ea8da11d7243d5c4f59785ec15af13ffe468b8e304ebc8290c8137872ea85d881766f68217dd6dc982205a225645497a1dbbbdd815de74918fc9edbb956b28e3cfdead03a8f3cfaeac12328e34418b104682a75eb762af8e92cfaa18be2a438eda9dcc876caf84dd3b151518f9cb612925647e5c309fff88df3a7688f00b37ef004c5ef8ac3713bcf7d30ca8eb0d542d840a4bb9c9bcefe73cb359f374368a700993683db0b304b5a7f11e26542ceb84291b165fcae1041372e25c3f93d4c778bc19f43ec04ce02e151a547a7a53af97dc40e5357b38c874496e8655920d736ee28709e324292d9107f4b48ca6a826cc6721c22323e6c2728800e01dbc0818bc4384b01423747645462749441f53da8c9165b4110c167a76f93f707f58ee3dc9a7b9f0b9065240b29a5c188b2f7d534021b5c4e77cee79e662d44064ade66bfdd6cdd1ba16ed1540ca3b2b471c4e174ee0b8f88dbc96462c8c6658b2041929c097695bff986d7c57a06b89622fedb02096175aec143769ae3f9ebe53a5afff7ab4359770d7fafe5fe2953ac2b083a61c0a79f2eacbf96bd642247c2dd8cf7593f3d88cf61aba22c059604751e7377fac0687c6702b03d30b5f9f9a2ae5a114731dfb4277a8d870e2cd75b7f51b32c53750e9e1677a7e29b45cb71e31134e6383fa45c2dcca7a702e067b9298969bff25b14648b50191f63b02151229acfeeb29515f130ec8c9ab0acb1be0219e9bb6ddf14605440865c00719617dfcf6d832ceebf03df4eaeca8dfe5fdaa787c5a71c9d8921efad7211280694268913a05c2db91a14975780bef161dc8f88578ffb8502ed29ec1b5ee710eb961dad0bfad23b6091a3e7bb95009153924d030d9b313dabaad8a80ecf46719d366dba1cff6dbc91b0224edf6e17d4601bb3c61e99d0bcf45ccec1fc25a7b097df873ecb00b747b910204b277e6d3103f324300eee6279897d7cb858049364680bfab99ab12763332c1e5b4848894dab934edf531b5f09b7875309c6de81e38a4658a900834675bc5e8cfda65ee470e38674328fa33ed41b04e224bd360bd48b08f19ba0f98d15a131eca0c6142741384734c819187a6f2060ba97af8d89bdc6ee75ffd08673b98e40cdf32c1a9a351650111e93ddba3174454cd1125793e5ea41564423ac82e7dff591535ce4d5d30a3b9984647546d1630d097f9a26b30341bc13072eee431712eae75fbcd5629180542eb82f71c8b5993280e18b7d5f9c89b92cc736ce2ccdc37b3056d09ec907155451283955b854634043b57acdf1f80ec303f2ffceb8726e30fcf73c93519a3596913336938e447dd0a249ec8b32cc6d544918ce627ebb7fa6bdbf6545c4c16da57f878bbdc2ec354e5d3d65576a8011f76ca7471bd7ff7446e2fdcf387b1329fb6c93cd26fee22623b50e599531998926df3cee6d6cb4f89c1d50feedfd160722f8c66f718a9cbcfb5a1b5dd7009f5f6d214828d995825900bd5758d8b3306196a4bde72ffe92863fad02d68f5ff7f134c3377ae2fade222f535f818b35f8e5d0e0d8c8b4d35a0e6b3e534840b849eb1845a9791bf53ef0727ff7fd681de5e06c3db588a2a169b1f87e6b477da1fba972190c97e72d0b207483bf1101b37e0dc33bc2ab6bd1381d71fdd948a89583b8eccdef5bc70ae95e900ef380ea9f27aa704b8ea582fb4bbd622d1bc0540b78a5e2d4a0394e074ff77f9253b185498962eded780b8a781afe439cb133029c50dcfebdfdc4eeaab5877d8e4e27643b09b3a6a22d41e4e03c6c90cd2835269092da8afa26632b8da07b24835156fa0c2f1934fa0ced24cc1684c42eef4b52b0b52b3209d8a876f8976f0ef1ebc4c905600013659571bc843fe3783274c9f9554e5b6e7d731973a +MD = c14cfe3edf5d8eb5afccb9860f2570aa9b86acdf9a52b50e8499d76c39f36d6c1565f85aacf900ebe6007ae2e10e8464eabbf0e8737809a4cf4075c412708c2b + +Len = 21016 +Msg = 57e6278923857f1ecc966658902f2d9273160d738ecb1912aac8705e0d07b7be94c5c7f40286a2479859ace1e65d1876e084a026349779a5db7a8699eeb2cc43bc242662191f3954f99dab7f3dc690efccb62540e680c1bfb57308cc259c6283f68bac9b105a2d8d16eccbf93d737e465f35068a4b8fd9a9603a60c05acd62c46b83c1668e3f643a18cd74198f6bcbc4c088a9c90ccba9ab0357f43d344eb54f4293cd8c3bd5c7a326c90ea5dbb65dae183778c8d03d1a0cc6532e0b5b26416ca44438d6c0243e1069670166c85d1e4f8ecbd94e40eb1216d2b575f1785df062b91d6a09c534b2c8082fb524ff67f5ee4bcb362204df7a0f4f0530b833fca97ba8a6cbf0f10e09142ca993a728dcc9d276bff60dc3213b4065ccc928330953fd9a67c452edb92d3cfd5e01b6eac58444382f81d725b73bf13a90a709218fd831b6e9bbf6603d0488a2d5681bed290d8cb9a43f48d4ab646af9dc3223a4931f5f25b319a5f3a3783f4496319cda104cf220a6982775059df2c835d23e651f10cf0e4d47274ef270ab0a2ac202598229be96bbf43eb3cbcdd2cf25ef210b3a93c89a40ab441832d3121d18851411888c37426dbb533307de533833f1953fed9094f113afc4fa6b8bbda4e8e09cab295da64d43552fa0c0b7bb28e84062a93fef793a4eba6e9ba67ff4c8233d60ce6e8453dec52a9aa0ff4052c9ca4450f03898c09e7a330ba4eb97ffb150032a235de9861e7ca25cdbcb616243636626bde074b0441e8463bc40bb2586f79ac05201758734ef263cfb2c0231be3b0caeb740699354c2143e8cafd3af70a06aea025f0e9d49a71c03a52a0b0861d8a0ae875f60aff8ee4b64bb3fc7e596d4db72db819d12852aee7983ce642f54c488efd445424e562b919df2f87f0f211a551f876e0b2c0f0202663d1ff6eec0872e3947fbf5b696004eb0d9e3e47538fb40b8ab2e3e3410b6c2927b25a78dcda7f8548888632fe1f6ea661707dc5f04fe0406f2ca2071afcf95c5e4e96053a2ae50073ef472035f94cd87556d5014acab09d10149982d15d4e2c620720a8a68249d1b11480c78376260db3a1b29dd598ab7e083b38dae694d135ed8c98b78468f4659ab8b18d892e809296f1b4d02332477fd1e10e93ed4c38f55b4f4cd656579b586b1c57e6997af313b9b75a6cb6100afee7a6993237ebdbe735bfdb69bec69516dcefe26746f3e41d7672f1b7f0ca6c97c40c573a58ec3087f76eb306104e882d5a83ff840411d9fc67b5393685b9f2b6f182d710e2d5dd543acc722fed57db085e78fdc1736d5b5cf7ee8f8cc77723f8fa9a875a482148d85a69873bb86b0434634f7ba3f76edeabc19f731f487a76ba49c3e67b1b66f980e0b660de04009a3e0377e7a0128eda554f3872628b4c7197598f72f7bf0f75ea6843ad7b52a11391b972c04a5745d505eb5a0bfb02659b0cb46dcb54b59324814b91bb9816d4f6bbffc09407383c652a3064ae4d304e5986e4ef4e26819aabc2251119b8e304ba293101e16b37db013eb8f8e7dda76f3382657489c1c57e72396f52465229c8e476078726fac8aa1fbfdf773720da60cfabb09deccad3b6fe6394c5dff86d99fc0eedf0d31a7d02372a3e702abb4b9b745f40ec05b64eecc6bd3ffc352020e067705ebf846ec7abde0a307421017da7d829a0bf62f8998861c2cb55e44dd634cd26d443a94c3aef8adc6fe3b8a7e2fe51775ab8632646023600b1737be6101f83bed93db0574945a41d475f5ff30e0776d4d937a4a3c6f2d9e3acc55a9d41092194f80e48046566d04951379597616bbecea6ed9615bed2c407f7dc1eb7fb7a3d459b25cec8319b95fd181ce7e98f93afc14e2ac5e0701a6ada3d2816eaa1fb2d4d4d24b337108c5b84f66fc58deb07b069297fa2989d3254d6e729f189d7047808787ba3c58481978d86b0ccd8f6406702d37cbaa298c3088a70622d39fd1ea423c7aafef82043d08343805c7f53c64a4ad6728c92e5450c618351386f96a2481b95335343662bace2b74ef2d56611c08dad1176ee2520b6f87a87919f4647ca6c7b951f3bb8a163484c7d2e7fbfab6067b1da3818bafecebbd075c73d6e77b172e540d145aa5dca109dbb7dc2c30bb055af3d1ea729278a282f9c57ee71aa73db6cd707f5bdb917d8055a5f6312bb26d3df9ab91df2439fd9d26ba2171268b8027cc821d0653bf2fb2e0a51c511223a5edda385e198db662d8374644ba33ac4948f84cd4a236ed216722be36d50d9617323c803a6af4773af9d46ecf0b6894fee2fad58d79aba4ba67c3f82d0546942ad3c88c0b188105eec9a43cabacedca09bd792631d1db6b62796c5be729e2a4469a2563bb6c5ee7e41050b7bee5ebd6d0a11e45a6f3eeca8167c5f04d890c4fd34dfb0d30aeb0a586967fe7f1fe8a41bd56913cd6270b497ff775be476dea1c39b5f4935426a2c83b22dad52d3ef19136a37913a7b55a71c5f225cdbe1ca493e19ab6fc0d1c59d76a7e098858ef4951a5527fd003e404c9b91f7c2698df633c31c4e95045d7005a7d70b3085b57b90671294a7dd1fd31dac44823d0bffe4fa092fa3698e3a0bdd9dbc1805e1fbe6a3a02f18321f948082a4f33c1d319c18f466d0645dbcfbfb8ddec391a918b6e8374c071d1c5620db243c0a9ff38906f4cb628aebd21f17c1bed189f26a986ae2d3d1373dd70f69457ad807285060b52ad792dbb4672311e0b92c7bd4faffac5901c63bd4e2a9c241deef856fa4571b0db16e2f48ad777efb25361593aaacefcd3991819cdfb3c072f908f1d06feacd2fd15b1232e57ab3538b84e3c92a2ea9b1f3c9a4d02ecbf83b31bac8e5238a3003cff010eddfbb539c549f62efda036ea9b8e512194040be1d215b97386fb3e82c05b397e3dca7d437f8fc2f623aa9a307016a65f2c4c0969b3081d924a4f659fb0b1c33bf6cceb9b9111185eaecbfeb7c55cffcd71caa1627f7b40b3443d00a0348a060db109e8882157612c43084ac5c3e9c5350c88bc165df78aa01fccf7cd766c6abc168a5a5358ea06298c6b66a39144615da48e40cb760363208105326e9be2570fcc562b455d516d1d31fb3a9959f5390de2e217caf12733fa13ee9acbce7135d07c7541a4591400d0dac0aeee4085b70f6e8e275bf7eb62f77c92152c35a36cc5cdf086b873bc26092ec3abec707b422aef9a5ac5b0d858df64f68cd8f8ff64b768cee0cbd4d04692d50b17d9115f41250d0c965243757d7a7524e818400d866df4173923a3d8ca3178a0dcfe4aba1ec971eec548d94a3a8f55230f34355638b11ad37809095d19afbf8be0a3441340dec347cef099e0f5e8acfbeb74fe61e349820b85c52ee69bd351d30d1027f20f2caa209992acbe174b23b5631fc4b6f0fed3c7489f39fbb867d780498c1adff37acf800e76396d098161575e7faedec598b50da9df5224d831f89b7e6045635491da6f15e3697332520fecc6dae560ccdfd2e790cca3ea63fb5d2b93d5d1059a3a72f69623645af985d579827990c46c9bcf5ce5af51d4c18bad387031e64e2d3b3f1b797c51a9c8e45a087aa4d8930c93577490d0876b5aa991cbfdbcabc5765cebe8a63758e9063547a096a3e5541690103879776b35971fb1ea22c049f2db671b65059ba3a11a41434abebdde8ff15aa2af88ec25bcdeb4b4a0c783e85dc52279997ff257596e +MD = 1dc71bffc010a485f07f754ef874c25f56ec641f9a2c9a6d64871158ba7eb40e775fafcc921907e291915b2b53c201450f748ef6a9c40c95b0ce2695dde99db1 + +Len = 21600 +Msg = fc150b1619d5c344d615e86fca1a723f4eeb24fbe21b12facde3615a04744ef54d8a7191a4454357de35df878cb305692278648759681919d1af73c1fb0ff9783678aec838da933db0376e1629fcca3f32913f84bc2ff3ffc3f261d2312f591cff0748259d3cbadc94441d846a9cc8aac55f3c5ad417a992ebd3b4f76d7a77c7ef5ec90f9a14c01ed1847539143c0790250ae37169c942bc907bf39779985a624fa6b9eef90aaee9b11efd9df28390db98b9bc3143ecc663fc11a6191b320ad667069e2980c58b277a3a3d18cb1a6a716794500329293e7175be55e71cf090097fa7022af8ee5fbf7502be1366a89d3cdac4264de428b1cd44aa89684379f3e5dfb16c58282c3399ea9c07f48cd632223871c6783d90275fb1fcc9045a763b51cf4b651bda280e9d2130a125054c300dcbc2b9edf90aa80f03dd9e23278e7134969d74dbd48af8b361e7120c99b19fe4d9e08613e33d3dc584748f2d746a9c787dd02100dff9f9c3f4e8e41310ae888fabf3b551c2d2ed697aea248a07b1c404cc0cf4f2c31d1ab5205c9ea131eaf2f58922cf115d70c1e32e66e5a3a80cf1c0cb78761a489f62712e6bc91dc50ee500ba955bba7dc0bf1be8115bde21232c94c13d2ede3627dadf663cecf194c169978875e1b4ea69f1faf0120da4399d7c68f882a4a7545c88e80ff88f8466ac87a239eae9666c145f668d92835eb723ea24b67061de6be7767272c63b3e0376460a161bfc3acb69104808b94672645c7db0442fece9436fac66d8cf768733c8afb56731a197ce0f0c89a9aedd4a08f13df4eae6cd32a49d30ad873bcbc7bd4ac88c745361e53faf5b0fb89ad04c6b8932d9efbe8d1f56190c2dc831bf666aa39b7784aac38de4f006c47da4a8e254cd65459ddeb31a208a48d0e2d9dccc027c305fe15e4ff5857b138f40f5ec738c64dd213a6ec78acc99ea7d1f5ca9624d7c8d2ad1968d86ecf78d5748b42466dcf8a2560f9852d720edfc1cc5e2ae8e124cbcc29d7a06a8e00d7906de0ad9250a2ebdcb6482db68e52f85941d9274b91b93c50d8d3341c42865e1834a1f9117deb035678154eaa7e2068ecf6f95824c2efaaef5e8e9c6408da6ccb6d41ad7a422261214ad3707fbe11b1eb4031360ad14298161f8c31e86d7794387c42430349c375db93153bbcca8153d2b2033974695c7463803ead0fcce854dde6164262f158c1d3d55cf8d83019df31c0f1dae7e787c03645286640c3973f2a3f40340fe56cd5a8a61d30686b25b496f19fa2dbc87f2c2cc2dbe631de2ea3abec528070724a11c879d89ac3e83f6460c84f29d6a88ce8a58dbba54968f932e171cfc01b34ab06c1c51170a133e17f3dc982c85ef44bb64f0a6a3bfe10916d59741a7b86a8ea35131c4a5a56ea96556c59fd16db3835f567cd4a12c65181a38247b50b495ba22d4ae3f5c07b58e897ab0df08dd1e0c626be4aedb248a83475da7141f7b9a94d4fc7b0a63b752b32a6486a1fa5e98a96da8107c7a2eb814464e09523d97e3e562d1816de33dabe0f11e2d2dce7789202817e986a5d35791bf13307ed290d674735ba6b004222adf85af8fcbadb1593a3abf5513859acfc359b206df05ecdd0bb0a3d31aeded3577901f93c3bf9370bf4ca83d6d420b8972bd3572bfff355f70c1b0f1f4c726366fb776205c2ba5367705db8ada03aeeb6693a35b64e8f2c46c4d8ae686b9559490a4bd20e01a6f142a0e5f22a3f00c5e668205ab17e7ac73c7fc3a9c18ec03b7a2fffc7a95b37a709f0e3cef1032ac4b3c3262492024ead64978c7f9f288b7076d6f3916c41f4db39fae7bd868f11618ae4cc21dc7c83454ba6639e75cb4faecb89d7edcb4857046f29623c4f554d32f85782e0f54fb1255e171994d9d9853ce4d31d2b4af0e6c8f606d3c9dfd846af6885dac070ee40d41873fee12fe5d4a15f2d23e86fbe2c8f8b1dbcf4ac9a963d781a447ed3facac8174784020c72b67297028c83ae1280ce8ac8ae2b3a1ea473836f404a92d7a787b70c5975e402933728edc7bb8a909c1c71a1f80c0cc6f9d8371f6ed232077f89843cefcb4b080355916965ce89bac6efcc345ae599461ed1ff852094462cbb440b43a760a6157f544cefd75b2ff3a9bf16fa276663fe8c07493af60f23a9d34dc8db10e4899d7fc9c80bacdff1cdad00de6dedfcf162b9cea0cb5fb16ef1501d294ddcb57a128d1caf2756cb53bb596b8efa2f17c61530ce92a0de199ca5da28c9263b51dc171fd34edd55bbea4f2745a5496b555688795d9b45f1a61139a9f704eeed48340db06443882a1009fbaf35bdb61324372f0c1227352af5812f781e892243171688d76619d254665743599244dab712cc9b5172c2f8fa7650e9ace5b24add3d07fafd4f2e26653d46a8af11b711e78fab3001f60afbe0a6f51ab1131cd32c286ce6ba961d0eccf34cae280a91160519379f66224bd86e1602153cfd1555b077d9de77c152f60c26fdc64d036f31904e163c167e11f8f331fc7b992a584cfa99b344bd576c769346ce839682be0f297cab889b6009e8208948b07e1142237b0cadac03cec5fb02e133688d0eea0921438c275d8e7020768a7b4624586f63a25f1d86e3adfc1dcb74c0e7a91e9fba38212c7ae540013c55c408cf44563c9810ff8767c56b7b396d8ffb7373283b9caea40105cb2b29965eb4759e5691463b376c6fc1219dcfe8698147ae63b23a1b153a9e5a57b645b8e1ea4645d39ff8c796245b25a0ab76a53ff739faf34337d00c5378db4368022e9fc3ff5833e8d0c7bdc5ce079b1aebea615056ebba61a135f49d152af6b6db61e8d00537fff26aa60ebf3cd9a962ac426e3b02e3219402b74e55f7abfa393dfd4d9d0c87a04332fd198f3c2e34294427c705d293c130d8feaa3ca4e0b645a65b3e9959a9cd61a6475ea42077c3c52014fc4f5a5ff1ee906678bf816bc392a0f65c439120cfc450ef5e9c9e48e0ccec948e85eeba6c13c5793a4d21af9a76ba68f72a278f3fe1af8f89d70a1413b6e610fe3824357856e4b18f640a1eb3885f3dcfcba14786503e9270f2085bc509c934bbd47f43af0e7aa9b892bf5b973e0bbf169672dc4b867a82a46bfd928d3bf25a47f9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a36e5ac4c3ee0c430598539e14fc84194141f8c08fae41a0c25fa4f433fb349246ef17144838c50d875f4a5750d18b41be286e07288d37c53053ddf8a848fb6db4e459f43f5f1f37fd2dde2d3b2f2c604cdd8b1a6f85f489e1b1ed5dfe45a9777bd295dcffcd6532e5a881b80a71f1f56bc5f262db05026f34fe459c7c7db9301a5e4d372000518edf43c7605536768199661688e1a6ebd5c89d995cc95db5380edbf2ab36944ebc288431beb1d91495545279e519c80b6e0b143ae75b7227ffc7d028a1aa05c74b7ffe333ba6f676913b0f9f1ffa050b887af6bcf4a9378be7d3df51a300b155ad33f65e6f8b0af715bbf1e891f8da46c5a6b991ed492a5b80c15df037c1336451e31115b2f473208335ae08d39cb457a60cd15c39a1c7016b0ed0a6c872089dfa1bd2ebbe69eb8d7a5698526d6c2fb89a2be26e7259aa28072adbc7ed79bd4cd63cc062da61c0986b8d4567b7dda8d41262415b2fb72039d583d3e61f6eae0ba6c44dfdaf629ecbc74839bb5b67bc54cf6e92b4ba60e5b166d85d83c6c77754cc50f02ea5e2d2a21e25f9cfb090d694f1af3addbaed47292b66dd137bfa95a2b7513b78466908b5e094ea076fff842f5982ce689992e10ba3dde737c79e75900843a45d097bb +MD = 1aae044fcec39bac6c05cf43d4facb704fb5fb2597a7fe0d9c507ceed29c768dfb3014669daa413801ffe4a201ebb871f34524f0ac392fa54c6b21c25415e494 + +Len = 22184 +Msg = 52a3ff703c6c52ac2cf3f943fff3d2709615f1c3cf143769b41f26adf37ff3bf8f79ddb4d476becf9061e0ff805111a80968faa628fbac90acf27c39a372117d12babb3ae94b069c354c909e982c17cdf689d64f725112259927f0addc08896b442e40086134549b847cb1282ece0c66c7412ec6935f90b0e3842910888784118d9c15282679cd55e3b8eca6297d17fce358aa11756d4fbaf1d2d06a8e3829f856cee2a21e629b51bbc9e91f73826016b296f13afec277ca2dd88cc4d663a1a7058a4e7c3337e61775784f9bf325103c9cc3ac4918a82f69fe600625485013a6049901c04c3fd530778bc62291ad4ff709a68244aa659f1ecc30e595cc46a87eb9c3a47650c391232bcaf8bd356444cd61081c359c42f0710012d21c4a8f88b68ecfdfa4290b4278f8ff8a73c79018480cb12123d6874aea00cb75c3aa71dad6e9875954be5f0eb845f0274d2f7af2f072693a173f7cd41235267591d435c76734b1bb8df707206a7c667551556afb4cfcf80f18c169b77007ea7b8fb02276f0d616ac58bc4a9e1604291c8922a75be41025472e43951a8ddfde2ec327820ff9377ed5bcf572b1454501c5fd7c7b394018b98b61ae4926ef23cc37371f9bbc0abfb1ddc18ac5807da7b618b44d2cbde97a7d82bae8cd03203d7a3df381b7a3acd6766e6f638c3449920fbcb67b031166a036d540da69d8a893b0e9fd361cec66e4962dcf690ef42e6ed65a0bef485a3ff0af2bfc6c65cd0d8f38e35f2512c0c151dac4e88295e9b6a3d199bc9243c3fdd4af2df487080cd997d9d22135e347448507dbc297673a6899c922cf4b3c7127b3fd8332119bba93155a5e4950d5a877e9e8196691cd10ccb8859c4f017a8f45f462d4bef46602c4708430e15d320ce2e34427db560f936b69cfb0419e4643df01a6c89e16b10af3101ff0f043409a0edce2ac29d075eacc126d06af09e8b57e419108dc61c4faa85df3467fec487b823d8b5159e5473e781d2845a02aa80fa91cea3c80bbe6fb6cbfc7d8953f91d6c66c07be727fccb6f5f0c8151de9cd76e9fa7b0c900e6135c59e64513a2465d463d31e9a7c854d7bcdf515202d2ea114c5430a1e16417bcf3e62935776830a9de0d8988e80df12b48792d70bd8e16a11c55f601d193c7df15c731a925244c958c5e53c418475638aac31d58126ea719571b745afa2e7afc5a939c1acd550ea2d9b61d35c932f8825c339d8282031fec752b1817cb82a5870ac1d524a088db545e8b42586b2f5c8ac5412a8a8cd9f59cfefb6db2d63edc11ded859317f1e472c83745fa68ebaf6d48e8230daa361ac9d6d02f1c6aab1833f2f5da4eb89a3d68de0d7e1aa94545bd2006d6cfd6618b97047e820cda9993f4174b8549d80b81e0adf4c64df2c99f015d3692b5d358db0c808019732634464cb577ec4d1d4b96226073855aeb7da5802600c0884a23f06e735e5a19f6851985f40279212f6166761d13240a3b6b4084a4edc610e2c8b40504a1afc6f092f5e6fb73938fb758d8240c5a09258b9b5653fe840d1544510e1b5cd07f41bf65c0b6f352a15d5d35d37357d29d738213d0365d4dfd5f17c5e5f6a27331530906643e03280d54c80241ad230348bbc9dd9775e9d1feb5042d23dfff132fc4777bc7c6547b3e3ca1c709189b7473c707019258c99779e1b390af1e9b37e05cb0ced3950ed69cdd8f8a13fce4ad845de585a8272628d4a9cbf671fb9d67ace25d076ef558be8ffe3b5547a32936e5460b73c329270a79d6f56851be2d2bfb20252c822c5abd7f694c2f8d549098fc4a20d2caa7f5c7ce30d8ec37ae750c35dcb147f6833d5ad4e46b21cd56415a3330cdaba4e9b7e73d7e1d8d0b149a91c2dfa85fb242291ef6384031eff26504f1c2b9053b3796f02d8a6b50b538c7430bf1b37d9eb1458f4e2d7269db70241e9dc68ce876d9ba6c061a6b3f1d6222a876d97aa8a218ba37428aaad17918a531a105f05d3d164ae22ff7c4612cdad34a6c61a4e8a6beaf9e3b198f70b23111c464478b6a78386fdb12e91fbec8e703b1564fda4592ec4d4aa2a0ca4e6c058f604e53051a0f8550de16b7245fdad3da639a6cc3c84eeabcc5dde8027390da488cc7f30772eb461673a32b7a4b4be47feaa2800878c200239756b9e0e807f964d037ed397cf2c2e822210bca8a01631bced453505ed776aa4673da0cb4b7aa0ab4060a423f0d43ef74f820bb25e698d5959aac448073937b5c9e152ddf8a3562c19c12cbc3250f52f09132f623e1cad6c95b558be87fa0bb613e30eb7267e1957e62cd7b11206f3a1f5209228cd94245f17e14ce9ee4e595dbbaf4f07435f7cb74be03fb30e8abcf87a46ce869b8494b966db2b5a888aa2f547c29e1eddebf2b29197bf228630b38b2f024f0c16525103f8ff7e7105537b153eb9769e54981de27dcfe09027bd79e289cfae19cc81ebb744caa0dde32d344616f052e655e850cf66d54e8c51756286f12b36402c97e75be0c95ce1806c81005703dd8740512db1c364536791ed1ff11b81a20fc508b65a3377ed3c8bb5c3cc75605101b267276239d999b267a904a96f8f6be91458fb4ad352ec4f538d8f02f8a267e61a9eb03930c17c1d512db3284390ee5ca90d089646f6d48a8658456c67268c94e76c6abf2ea884d8ecefadf65e22b3ead19970d4f4b0207e82aa79313779299ea764b95ca9fb4ea57963478c05d157045c92b67f632b7aabd6f8ad29e016e983e8fc1eaa293633e3a52d3261e1194249786d6c0e18d52d92f1c7639f079c26c51aa72d1032e5df13eea1d1006667002ad39de4099c29c3b4719b1f0904557bd2bb0a47374d869ac6b465b5f00c470b18ecb8c0ea53b5d790c4e832006cff534d587a0f77df95117ca4fd43a94935eda422228538d5e5d3a87a436f1db7e63785619ae86a6f9dbd962ebd2ca4b3b0024d228fa36da956327be01118a96b96b32b64c15487840d09a3c039b36ac241e3845c349e0134739e8bb4f5b14bfead30afe0a1f647a36f7045e8078a740b782bda3dd5f79c0dba52486745db6df7864a7353a120335431abdd248b1458d5af35cf45d822869bb7083255a5f997dcbe6b263c4374c2fd0ff6da0458e371d7638bd412bfb15974e62afa2e7a8e4214b21d2908fd668f2436fbdce5d57a678741a87912f1269d1fc424d040582c05360ddb0c585377e06063254667a53b924ba6163ed510e4ca02dda08549b33559c72e1f40a8da1b7f17f10dc6f83cb99abb2d5f85c7939e58b49f085999004ca83e9f645658f5e3b3d18d1faf260076d95c33defe68fd95d1ab84d6fdbce3d48912de44be074b43171383c58f6f94f5e685463ef937b37dbd5e3b96c233c26f64ca673af8222ecc116461b9e8336eb94aecf0da16c259b884530fb2478c207fd3ebc6a1953824d15b3ac3474a1ff2236ee9b04ac78754c8cf108dd41e2482784efd893305c7c2152d0d14f80593c3e6db12010bac054940e61d4256869b6cfb4e660b49da4f9aea3f61d366db2d585607ec6f8704aa8b9361efa9c4316f447b5abbe960833df3e2eabf8b0e1b5b24038ddf58678205b042dafe40a7af0ebd7aec65801171218171b7aca848469bbb61c5615807a4a53bd1b9cf837b5ff81c7c7c098bd75488a8193e8fb7b00d6d93135728eaf1dce7a2c286ea0ea9b4c9f5e2a1fe591c8dd1fc6be7ff35dfa04f2f7aab8c8db0ab6b6997aac43edd4de2ee5fc6ea646b9dabd2dc3c61bf21dfcef51a4b12ccce90af14b3cde480609be14a4683245a4ef464efdca45d9010ec5b9874be3204961d0128b948d19fee2f23be393f529731329b97ffd859654786736e1c6d80d1c1a1201a1aa401d9c068489eaa83eba7bcc8ce6fb820dbbb101eb50a73e185c0bbdd7a6d5a77fbcaa1e7be8 +MD = afc44faa9e0f3a686ea19317e7b1c1f6d8dba4f6cc7ff2660cbc8e44ce142da55f319d71e7a7eb4759cab1b4fe822a066b5fb3094d6403927cb5e73dac7479af + +Len = 22768 +Msg = 8cbb1ed01859badc954417a9bc5b6930fb6a1cb4d2fc603c7d70e546d34fe3ba6edd5e1d0ceea80735fb27d71e7558a5ce5914787f0513b9474aaee8f7c2e98e4464b073245561107b018b47f76bf65238c1e3fa35349409db070f01f7e5200e55779d3a2936ede0af7ecb630fe4481f83ca0fa0bb31ed1281ce91f9995f9023eb3facdae438555e199970922d8958f5f59b22d4dba326be80c7ba39a6d941b34ce465bb1a04a071007b013b1b022dbad85da4fd5b3245f4221b1527e5fa3ca7c18d50459642d603ae4c06c89ff6cf5872371b820487549cadf2272c206b88e89262f6e11f9900fb693308a0820e47b50c5211cd9e4a5a9d6a737ab11dd32d5d078cdef57cb125407a588e2b8bf19cbbedd60d45f12360e1a1c7951ca5db34ed683390eb76334dbc29e420d18447d6505fea9852c4b86d4f9a1500d6802ba482fc7e9529d5c78056bdff46fa33bafe5ea8b6395ce1b489cf9c864448766a85030c9674196114c7f680d0890e62f01acc116378cb0ebdbc49f042e8d94f40df57e0a3b521e1c32984b8807075d7913582e219dd08147b0fa5df7074f0d257bb68c0cce1ab1f7bafe9ae3684975b46546863fff179bb9889cbaf3970f7c954201df4397f1ee1e5600baa1b4bddb5b78166dc3e3b87cab933a4a8c46555fae2175ec31317e2f0a944d3f3574fadaf8bc36494fd439a0b881316143adb722da7a7137782315f146e6329d31118700f6a234ad465921b44ad340a39c258b62c4bd82456ad56fd14dcc6f690722c8f9efea700e49eaf703ed09b6961856689be77b27aa9bd0d24ba9c742073a1157024ec596e0ccf2203c1985219d2aa8c53aad33efbb7d9df3ccc567591c4c65b7d69df417d9421743b95ad6004d45a537cb9068390ca2a53ad13b1d22fcb0b841d347d6613c3bb2c7f81b8cd10b1bd416cb3b9892228d8f1df575692e4d0961ab74e6ed019e2c5d2394e61a127affae08b609359971a0a413a60edbd971a8fa5b5805b87783969efd0c44fe530183ab842873dfad9e8e8cc27f51d5c30f21fab7e90ec941610cd0aacab2ba11332a44ff7f25e74ceda9b190ce08e7596a06eb67a46c8feddaf19ab35cb9cdbb846612f13679fd060384bb052e7e913b36ca34d116c98cdb45d765ad3ec4b9d079b98e0ffafa81576491f1a62d3d63b6e9de6f9abc8030982640ca0eed5dfeee87b72e82292204bf75640dea26bfcf7af7d6140b024b2bb310a0204ee4f01d7432c17d1e3d7af7bcda7d6847c79044e5e5239ad88464ceba898800f3b22595e00f7ae23ac48feacdf84089557c39549646599c59bf67a9fcf55b0473d168e8e07245f64e4abb5e61535fe989b1358eea7fea71252fee4e18e8bb8365cf2496c40fb541ef2c97c315701e115af2ff54710658b1b132531b8cd80c0640180310293c4b2d8406af9968d32d994fddf135c87e16e6847320a2d747ef1589286ef57e9c6a41b3555d71c9f0e0d9eeced5a33f5bb788257ee16466bcb729a79cd2a73284a506e3954bccc75dea6bae41f74d6403cd0f0a921fe0d9aaf6cb21c1d8b5f3a98de59b42d51acf8e9cb714d3f064d52a99f3aa792698aea740729e53eba2205f877640ea93dc70e79a54a9013bb9e114d0ce9b80b00c441606a853bf75ec473b24318b0902822a0d45ccd136438d3676f408443526bc389bdbe5185111f4e6b0d69fc00aabcc7974317823ff928f43b566293b231518fa8d12a122d55a7c7d452119967bf9ebdd90efef27c9c3107744b9b9e6c6d5a3188e5d7529a889b3798ca65754e96790c507d3aa43313fb16fc96132ed9d12fb00f40ed983475a6a69eba8a1a1bf8f3bde2d8f320ca272f28ba7ff1ca61247814272c936d63e36e1dce6dab1038adb4d6796650efaba07546964e5efb6c2ddc65b7eff1588f999ba3102aeedd0b7d6562fc707a983c467477784a814862b504aca6d230e12060d6414c387b0bfe30ae66533e99a3e7e1d5c348bc8339ab8498f1de1d78907e00c7fe6ae07b22778d36ec6618d49913383f32eeec8b56af623f3a4618f0ee114115e2526a16a8e05da6fb1d46530127145bcd5322c228d717a191c60bc18242eb68f5ed1e7327a068a59c600f3f638d3dd19b5da64f36896a67fd463d12d477c56a402143bb261f76dcd617bdc047ac7b48a4f5bf5b082e253987aef70c6d1998c1cad723152ec54ff3b12a96fd36ec9669f104b70e272f0ebe35e681d7d4912c159bf804aac6faba913581e31fb8b555db8970d48f1af2ee9f11d7239a9146490fbc6a2fa27626815e6b04eb4d536f814675235f0769e18c842367257e2d9fb7563417ec24c6b16a045a9cf8b09182e254bb039f9d9d63b213727fceaa2f063d930be583583f033e280a2f5070f95740ab65fade7a3ddf26f7060867461fe2a56e4abe3b676884c47584a63cb4135463f37aef62c5d1bfb1d6e7e8387c869ab58ef8895d79c99dc690cfea04a468e213d503c975a7e26a1b591e098972eb98369c1d2e31b5ebb40a24f3e2f0697f6a17f807725d48f7482c27b151a250d643ef3fc294ff4455335ad7f975482be05238068ed162cf98c1ace9abaaca3fcf03aa20eda50f4e8f807c51e88d531114033ea4a1cece654d3d624611fb4b675f402de7a948a8fa2205383bc8115a44a2e6f17c4651e7319f2417e7ed2c6bef0d62413bfb6514709528583da2e8a5ec126218368742f75c15de9373462473ff62d1aec4ede599d97053a2fe7dfc7c2fedde7d7a6c89440d38d39e9325cdabc1e5f63c2b86ae805d3cede02761342738bac4e6eefc0f176d8e6c00ef910e5a5b1e37b318cea91123805ed85f5678ed2d017b1c3d3fbab7a4a10f802e92cfc9f595fdda32cebe9354c40d534f65b018374b6be70d3d736ed9f925e8f830f841b8d3b17a228dd650179164189f95c4ee7d1efc0e07ff2382341c17fef7747208cb5fb95b8f13d78e956dcaf1f6ef9db82805965bd28cb03cde944b8bd065236657c17f452269ab96f5e3a7a4fc7921bd5f85a19416ec04e4ffe92b562e0cf4a584826900839638b0607864fa5a3d39474b2885827d2805c2bea11e29b76fcd0c7929e15359a26823feb667bbb843ce9c1375aaedad479d1d44468bca139897e25f3e4e084d962139f62419afbd91c605e1f4799d4e51b33fb95fdc02eb8f38705d4918e506794d38714ae29d12310bcada2e5859094f2e6e44757899e75a9afe9cd3a6b32d53d36996b12b4f5f2b833328aab0ea8648f8f30d0fc757ae03a3d344636239692d9b148ee05a8b4b851888f3f0ea196c44f8163db53104e9923d397c82b341630e8d81805fd91a7e49b11062896cac634b161efcf01e673f0d4f766cb70191c2fe91f795b70ec4a17f35149efca06b15663a557146f649597ec1d33d8ab5f32f058fc0f56f63505c2d8edccfd1ed20279c4c01c5412172deec7b981783352c522c6f22c70f3e88565da3b01b91ba9144f6346b1f6907aa7760640d212bea07d27a19663420093238165cd8adc37187127adadba84511b9cce1667a84093c4b58f875d363292b17a961a19babef79ca39322798885da5668477682667a694bf8bac6cb37cb20cff52455a433e9e3a22622601ece6392d7a482a535af388582d14a0e44ca94314b2daca6f168d561c57355d521dea620fbebf030d5e5039f25b9adcc6e81065abf7ebf8c85dc1a2873059df0074be5fb5f792097f7aa541c811c666fbcdd99f39972ad84e5f0107e37777b4f43987b885f0684591f61a26441940486a432d7a265b4171e766760f98f236e517b470f6e970eabd2c19d972cc3aaf8afa94347dda08d8cb7cb847410e6a3f78502d9ea0483ec07b362c07acca3bbb3295061530be6996eff69e9d25ada6397886eb3c3e092391879977cf5da5e50d4a22e3f91b384524e43b60a044de70cdeaa337705896e705e73b42570cc5004dd9887107c7b16329b235467725078ea3d88e5962775652c5a506d5c741925423e8b1f968bb928c4e +MD = 656452f2080cb7c8181386be66efd374312539e4d916769afd8b7da3b213fa97540385316e390b69e5a98eef9bdea356d2d2355a1ca2668827270fc0302a871a + +Len = 23352 +Msg = 107f40050aaca74433c2f5e9d278528fe862567d6d206f7bddd683e5f3dcd6fdb4b62d85b046348e85401d8ba4df8aa958d6ad63048aad50ac7e4c40b60ec888f261fe9ad999d5d9124cdaab3b3828cfe5328bf1e060e57bbaa8d0af826884f3d168fc6b0c0d54cde3cf76711decf5a8985e394f8b0bdda40f3d5558de51d4e55ab36c21d10a7813ffaf3706d464b9dd7843ffa68df45e72b423246352317e06942a99e3b0f808536ed66692e8073c158dc7241e6c822f8db04485f966714bff87b6cada323fcd34392a4a3cdf3c45f9e0d3f2deb21c1a9e0b86bf42a37703783b3d462ede478f5f67952d2d436d9e317850af0fe62ce54dcdd31c6590ac6e18b9a856063c78157c00fe558d9b010d645e24a4d891195941ff12e28ab678538808e0428ad53b29320d4c0b8370605b3a983919623a4b3e23a92b5adb9b447c7030cc52e430f691299469973749f2505d307556d4692a5c9ad105cc7dc976af763a53ce39d613160aa03c41d2ae1eb3722dc2a257a71e7a4f818a809bc878b5452d5ffdb44df8807d36ad517c274f4e24980747137a8f62e9c0a1bd5b1eb0568311d7287a1f0f972960a40e5c3deae718782c8b2f6de5da119732cde5558859d9eea297b6d3be23b72509c29b775847f9d518b7d40588ab6f0c26f662f56688eecdaa928ef26febce8ec4b3605e01366db8b51229cce09daa2a6381fa84b4a96bb5d6612a0389b817a1be29d4784d7b1c28eae6574956776bf6d2b6d48cd985f7af0e4bb38e74523a68dd6e1f50a5e0b02d9f7985045003597a5bdc19943de43bc23a99511c9781deeb0ac9686b6f2bcecfbc15dc8637071dbde73cf025488edef643942b345c0dab312e81d753142520172a008456744c5ec75c1f82c6624a89530f816a5e2abd4b422fdf968ffd964e0ccf82a4fc6d9ac5a1a4cbf7fff3e1e4e287ab35226a5a6326f72bcaa7914600b694e564018cb8fa52a5897658631c96aa9359b50982ac9ee56cad9e2337fcdd1e616fedec3870a4e249a0275a1ac148b31cd2129adb7ba18878ac388c59828d4b1f6a6745d8886b5a765a338c8198a106085f735edd8f17170272c06a5e9eb945b41cfa95d6c9f9c116fdc276fe6b4aaa414800dbf0b0a698f1455f43ae1909150acecc6299fbf31f10d2fba1fa00eaa7add5e39b7da5f6152f6e3ca1b1ba24c208c7083789e6047c4c210794de202a06364e4126ea37b095a334810bcf4bb3549551d4990e51d2e1b2320ed71093b2cec3fa4502a12e7c2135e1530a70925dd49bb25812900605552a4c37f3fa2129073b2214b9085201c0cdbcdc25fc59cb490133be2977cb46e19cb8aa6f029238ba880ed9d3896ae87a530c44e4db66a4bbaf1c2b672b693d8cf0bf90d392ad86ee9106bad68b40d857af1ab3cf758191338cb5c95214a8915e0ea711a8113bbcab3e52df4c769a7a60ca2e506f32743ab78245c0749b4fea5fdeb85475e70481f9773971bcb141769c8a8f434b7b064652781638552628f298493c82c27bd07ee1240498afa6fd7314d887b5ebb6fe5e09576e587b1ff94e103579c21837675a6a2dfc7bacbc9519ce9d5cced84d2529e605964870ec8ba9cf8cb83dfd8291be9d7a66433b5bd312d4bf57b599a64350f06bd631bcf7a6a9de34411afcc4155280f48d17e4eb7d032e28c093b62b207a2f71753be5a611f644175c829a66bcbd1e81b82030d45c97e2bedf8fb8428350ac00bd8d75639639091b519d61ce4ea87c0a2e86a67f3874fa6bfbd2265535796efef450f495fb1a362a6792d86593baa4783870cf52d9427d155e8388cbff9e7d5563abe8a30940d22be88a8793529c9db11e0631b606aa74a64ecb670ca767e2eb52c7dbf78854e5051aacf7c155f56f9f287256148953e60514d24980f57ba4aa09cb54f840fd78a24621af55626e23299ed9c6d228e7db1af8bfb98fb383cb78cfe0dc0ef9e491e9b31037b942afbf36c766075aac0b5ccd41ba3ca1a726603fee2efaa17ab13bc2aba21853bd5f4eb0ec3ea312dc696f0639ed5c1e9a0d6ae6acdc36198c0b7b1574ffd98d9a26d57e558c226482a91fad267ea06e55e0f155521318dff79a5bca574e02cea3ae5e884a760ab7647371aa519590f99d46fe7427fa29598307e2ca9cb81c7d9e9cf0b61324e5724c6d6fe5025bb5273de7972b75baf0f0f7fa18fb8b64ae04549b94f0f7bf3aff0042204781f79661fb6cc762827af50c1d1a06466c7a40ca8d51511e3f6f92c548988cb61592bc0da17d93019863c116bb10b39386245a3710662f28345b742cee18bc1b0754ad95f5c105f0fd9ddb749a8328cb228885b3a78336f61bac689cb869b75f9f64f35fc0e12417f94fcb90821c6bd488ce48a618506f703f89f67d7033856825eb16d5c984f85ed6a11ad13b838698001f2c782c74e17fe71ba737dc202f20e1109c5dda538aaedabc4f9e8c5f80fed2a3b891ab9894095a8a0232c5d6bc6e1bfc0f61b9f6e1ed4fc8f2613e5962ed4581745a5d6391f7e1fd90d7f2fd34391ad6f6482f1405057bec8c811918334fa2e2e8390a7edf32c49cd78c2d3ea06b27c7da7a0455ffdca751a466e545fb0b31ed9d97799086a14b9061ba3c4107eb8af7425f0063d65c1a1fc2786a87c3093acb1add73428f2bbe01b6cae8ad71a18b8db65febe3926c1e7d6e1f7087923105a3e771c03c01ba64165c22f92ae67572b2bee28c803cf3f99331c3beec706bda9e8dbd2825e43586f8dd2c37626f4f868de350ace0dbdbf48a92cc1d5f659f00e4932773a541836ccfc14f6afa13171047ac1113ab770b578a1aa255887ab5c09c811968661f8e5ec28ef2599ddbb55807a28d898a196b6aba4fad2e0eb69562eee0fad00d863da4f9ce7fcdf1cd11a6f64b2cd624c7e37543bb55709a22272e03363273457e78859d085d8e9ef414423c3257c1238b5bbf4de603e2d3c4546b030e2919b410274ad6c5f4644d55a47300dc74142c6dbb91ff571d4d62a6026316ed468a0243333ccb8cac17a6faaa836ad3ed95ea74eb3381960d79eed01a5c625df38dd82082a0a5e5ed6e50ea0fb8a39e280d02a8d3edfc2b392e2048859f12e598ecdeadfdc18b581f32f42db95bd3c58f431f115c07989f0b34a01829744c0e9b6dbbf48ce6a66eaa2b39cc92b321d08801e7b86cc87c78e9521548f022385e65d917fd18561eaef621c8ce810ab6487d0d02a4ec79d1413d5227dec1f3005f5ef79cce875a1aa16bdc483b6da6bab5d53019ddc562be7f6efa7fe4832dc999ee91f071c33ac2cd7223621b40d0549df832d46cddcb6cbce413c5612019be937e6dbbeeb23e3fbc71c0be77e1d0ac8a4edbda581efc027f0764a15e7fff04d57455a64b3eaeb9f6d279035638eeeb033ff3d4a96f3ca9513fb7b9e28827c6e73a0e58924ed15701fb17d9c12d72399133416968b7d589b9f4d2b8f523d82a5236637acbc9f042675662eabfa8a3bdba928e429ce00dc93f8e7e449f385c589dd21bb4fc9953a2b04921db5891cba009c4a2064dd12d926b758305e9aff9795075fdad2fa5429e623e1e5794d030090331455e83727c0bc611a9a5da70f8b5f386d30e6bd5055e079c1f047c4d1a2132413ff247ab445dd7cbb8c97b64a1330f6f637eb911e30b26cbed8a17f1d3101d5d5769a064cbaf2609771bd2713b1c2b9776a6204126cd483350926ea2a2fd4ceb576c97855b2a3c34af43ea801097d066d32ea84d14cbf43c0fc48749ce10485505a233f63af5a0b528e9c87a66cd854444bd591df62eb24ef4c76ccfa073980129b47c9fb03adaf2aab4764586e6d2998ffb3c9a131d0ad1c544251a604bc4598d497a69071e7355fd4cfbcbb8093fcd7d9258aab5c1852d4be2b81456c355c3f80a363a85cbf245e85a5ff2435e5548d627b5362242aaca4e4a2fa4c900d2a9319eb7fc7469df2a3586aaa4710e9b7362655c27a3c70210962391b1032dc37201af05951a1fc36baa77e5c888419ab4e8f1546380781468ea16e7254a70b08630e229efc016257210d61846d11ed8743276a5d4017e683813cb38e7e7f1224d86e12af0ad768da62e4a490694cedf1c069a58616e0186e9da +MD = 6831c65aabc24ad3f66e23cd3decb86823a9f9e170c5d4bf2b47515fe336cf7efd3c41d364f8300cbc3b3cbb85364724c8163eedddcccafee579d229f147e97f + +Len = 23936 +Msg = 9ccae39e86f4e844ba2b0bbfdb5331b409dc9aaeb6435cc1b5dc106e94cecbc72c5f50d376728334a14d210761a0af0c89c3b007dc401b6620910c23752bbaece5bba9823caf215f1af8de9b460e0910453567bd2c00d168b213e487892cf961ef65577180b3a80b4eb3aa4233a6270866b927974d8b641092e9fe6279dc706e71e5c369e98702816406edc3d06ff13c13d8585ee8e9bea6e99bc47cec40085b93c454311f32150985790fe7c47150f3751962daa423c572deb29c9d8b62a76f7f897193cbbccbead9957876b8b42a77b404aed32a3f63bb9ab5f08cfe4936f35abc8455952e0a6e87e191385341690ef721a21121487fcb452c2712ecfd9e2f4fe5f440248fbcdbb8e6c0f43e1ff30166f9a75b324300e8069fa9f7fe87c56b838d291c21e7c87a932a6e742056b2982b13267b053ad05b0597de03dbee95ef213b8bb1333e16934137047ea2ef8c1a6bf785374134d66c6b9c2efd2b3af5024f7882c6039d8e6ee995e8db6cf16bd1512e2e588e3afa62603401af9873ccee35cb7625380b1852b4ca845325643603023f87a6965324870be9bfdfc8a204f9fdbccf947b919c89ca603fad7550d5f9a9b2fae8fe873c219542d05663cf846cccd3f5dc7436025952df80b306be2ffb6c10ede871de2a7925c79cdc1200348fcd9950c5ca02320b74cdb12b7db52e5073e0ca6c9561d6d7e4018c397d3ffca92595481626fd14e65ab439de853eb942e7aaf83d12172982fa7706344b93c404ff5046992f309134291b8094c460b817f0f7df23910909c48eb17396240574e68150b0148ea28f3b0c8bee14e2231418b54de7e5ba3d5fe3c8383c27b29bf498d31ff050ea5bf745298beb28888fb38d5f37784d34bd1428d193c7af9a5f2c621e456c15ec64b298a8a3df965ead7ebe153afa21a8910edbd14a7ef68759058b8a488e2a3cc4a77cb25b32270b845df200e0d52abdbf3744efe6c8c31f90655d3eb2bd598183bd3b6f3c4ca3381c397348b071301c5176ab54ee0ce00a0c361e630a606863aade1c06cd95d28c7ef887143237fb6c4eb25728eab413f1d55e1720d9e1208c40f1669f96767cb0b184778cef8d5256bfd591926327257cf4c7909ea6a749a14ddd62642055684bbdc38bda6edcfe82abc6a1bae0cdde527057d004f91aab4dda8c587bf29b5f06ab9f0a23378dc8971a6dcfc9e90e051c51f8217b5aa20d36ede58f0c95b1298982ff3e92d306753e15b263e7065264819f91c92b52a7390491d051408ffd8e7b4aca6d4cc9b1d01ea27da43bc001c12a6309113b6891f560cb35e43e6ae956840ceae07ca1f5a0e0ccb6dbee9e83e5bea54a41d425c80af2a5fc912faddc484dcf46df48e439ac2b98455027294098e66b3ba11d10b44061260ea03be13e2d7e9bc6b1d819e7bda810124b0fe7a1a14abfc4793fb1be5e55565159898d76cdbf7852a055c8669bfe3b0614ce620cca91a8cd1061904c2e783eae044239eef0b66fd2f2e77a1e0ed62107f28b22ead9642f3eafac36c8766fe50de88d6e0d5e0e872ef0b5b577ded8cbfe2f6fada4976a5aff9e482a98ffe554574e93b23bde6dc94ee2e804d9d2ab40d411a18da0cc4c33f9255cf426918091727e7c90e03a7c3b1b10a7ecacb4f8886fe1494a4840b1c2128c101dd8f4e8a648c06f8d6438e2e77bc11bf7584a66acb9e6916a03ba420e331a8d2c18efc69ac05c943330a147d5573f6cac455d9eb3996a9f773804a71f4518fba94d4bc276c1991409aa3c550c98d0c193dbb447a5f6b39bf951e487fd2ece821cded0834135c117973bd3b29424bd423583190a8bba0aae76b5238ab1d884480e3546b203031ac4664b2c0675e54e1919a3528f6cccb70078cc89594229827807b975f6c513ed44fd4311fab7c2ca6bc8a5287d501402b886fedd9cb80b0f388dd225f88e4d81bfe489483563a27b63c8ef637d3f7a33fe29b3e9fa1b6575b02ae81d606699205ca4879960816fa726a3ebcb3642e691fce753731c741efa0a656326d555df1043c4a4ce23171097dfe0ff2751604065d74b4644aaca20e76bc6ac08ff64079a9dcc47ad252f6d93b408954175a270f7badaf4244b265284fdd6298b879af9069245da000fd06ee2cda214df4b0e5e8fcb1ec6daa78f9c18e81c437615009d9c49b6c48d8803fbce5336e4ca7aaff375329e2230670de6ed54216293509cdba4eba76d1d39cffc9d6e4d6dcaab8a15f018e271ec33a81849686befa8e1789c659fa03d77ca3c5998456e16a786a9ad4aa5731cd7b2691b754c84507e6f9cc6288e2a9c65e252fa0701214928b213a4c900d889b98d57d5b929f4efdda30e4335dfccf2ad291ac732c9ee6e16d8d0e0b65299225a6c7b2f5c2741338d25d8f9d4bb0fa718499ba960c65eeb399fe94b59c23f4e81f5db11a86df583559c02d24d4a7a236ee7dd86db20f82959b065ccf9795174f8d38164e3249749feb192b5e7b395ce77aee948e9fe44903eb24c4adf9e57fe85ac750e5673b0ec510b9289eb1fe811fa43c6d5d388cb89af4ea6af545ad953f129bdf94983c7d413530938a1b5fc52c1517c17e1e8147a762c7ce29ed560db03f1630b037b64690f3000a9519e58fa927e14f45a43a8cc59f3d5cb053673fe85ad6f2ece8410120c4b7ec4430184723672955688c40de8214cba52d3a69b243d04e749f0c6513ad14b8b71bf07092175d60724b190cd3496de325f4e4c5fb5f59fd544b268b24627d92f980cd86e6e165273461ed2701a7f5245dac0514719732540075c93b89fd69d7321739b3bc3e38de0a317b07c01a54ffbab6fdcdbb8803f3179366eedada63e5ef43c79f987a2305625e3527b51d17e5dbaa416a4fbe395af848822d8d85f65f9faaf992f211ce2ddb3cce1f471c98672efa626294866cec20f99d60189c8b94b19132465fb194c7e35188570cb55114333bf35f208cf927203b2b3f126aae35c3ab241237c61164094106576c63fc4d66c356b88a4e78bc8461be12f19cd8a3446d219f20cbbe72cb6fcaa8eca4e49358451ef7282765fcbc11c8743c8f957dc23bcd35913f0674884247b403f494868615bea380c44b6845cfdcdb69df6f15bbbb898e1f9c93f9ee6cf01158ef96875ed9b8363a91839f90005dc0ffe8b02b9f40d9010270b1736c54764941d2652660e58e37ac0bb8f34937ddcd655822ffeb805e2710381961607d2cb465597ae43aedc3105bbf6613dfeadf59409a12233eee6b789f6f2654896b95eb19e162312b46d968d018f571a2add4dcf82b183607ef936e269252cd45844475f616959dd08543a99fa4e18d5fe550f122879f98b4f868803c2e392c037baabd80459f9ab92d944b10efd4d76615c61e263c32dbe4bd5d4746bf43f161a65b5a2f1aeab853a43dd5da5629d033d3c6bc99b55c700592d43beca20dcdee88b8a478e301672e8dc2c262747b186793b564e38f86e5a61d8fd68492f111e8b75554f45a7e37a84ea5a93fc723006fda24afaa274cad24c1c29fa4ee885e0ea6b3c407ddab9a5f6b68e2d8cabc38cb1b96e53419184730042effc4314e12bedb467a49d9241fc2688f17a40bc121f7dc7ebe37e174442669178f78f7bcc087c9aff020f972386fca8ab047e6cc4c74916e932bfcdb1496653ec739ae5ef7d7f632ce33ab1064b615de353af82828cfdec8fc66d7c748fe9ce73f6cc1af195de5815ce86a892543bf0c1ed3cc7f37781920529f1ec351cd54c330a8de17c5581c1e34b5b4370a874a96e5c8b03c08fbd5074e3b1e59bf914135736450435c751e6bde2214b484ff2d0122806fd90dd996d047a172f4e2d8c6b05035c49c6f2340ecc1c4089c1529fadd4d7147f0c67fe33dc788a91f7c0279e65f73a79d7de1383388020c284b86188ddf31c4fdc37d2e8256571d53ebbcbf3a19c475c0f94d78b28972ac1398922a855048836a755ffd506c736c1ca2562b1de7aecb9171b666fc4e7c44d87cec9566390bffc15c76b42a828401e4406d32147178f59967baa7736fa572d168e3eda2f212969cf970076320ff7b35366068b01fd9a0535bd8aeaa3584c2a8fd1697ce23e2e457dcda4bbcd05c34aa04ee33737b473839ce8ed123687090c9a9f3284a4703657c76f4157a1910ca9d2c5526c0fc2849b7204bd351411f89bde0181399c3da9685387be93d53b3a9992d43b73b1b13317601ae19c +MD = d55658758eed2711fd2dfa025c8546030df60c1711515a2c8512eea513ee99786b37780226861d1c95b3eff2a58507484e8aeb5faf3f2ae6edd4ac043756770d + +Len = 24520 +Msg = d48554f0eeb2a0d4325d7de835d7c432357741e0fdedb83709d325cdeb8548f8ed336186f83439aeb49d6147f113be3846dd4630f73d04971c0162c40055a770c8dbbf6a55fe3b8d6b8398f01260c45c3cd2de03a9aa3d6e08e7b5b85f8a15faaca6f406cdb7ae589d34a9496068dd86617d93c1d9da6ca613afa611cecd9b7ee3bc8ac127079af793db1cbca2d0119efb07ecd250759926867ebd3716c640e4b34409022d980851959e7aafa243688c5397719ed624cad6a97f8392ff1c0c146566f733a50fff50eaa54a8c2667eb38b156ab8e338f099ec3d77f8a507807f6404cdebb581788dbdc1914baf7e4a18b5c6c21082e5d5d661eb13a88d3813a738e1b45020e56aadab12261a1dd63936b9e005b759036cf1600333af24ee0ac7195feb5708e746d36b2e7b7a99f8cc7c1bd3ae23e21c46596b28509328a3c65d99f1bb56da21ad9d52791a13a0706477602433dc9a9ac29ce7cd02fae4f3e6e94f29acd6110f0f7a05847a4bcdb7a1b70b543f480f09923a7a53c32d0648ece89d6a485b4a19dce7f8c324a97e48f49991e6190cabd315a0777f09cff93d38d9f956166ce1dca665b0d7a1a33eaeedbd885c6980eda1cd6d83815f4a2a2b5b4c076f8f7174c1ec81a21469cf9b53ed814319a94b60d039f0031d2c3235ade4ad3c091c0f8f642fba611be594f0c2849376b040d291f8ebe69aa5090e983f357bfbc564ad7e2dd07e5250cd89eb85435287b2c8acfd8643af9eab6e35ce59fe46eb26d1c1dd998f5c1a455a14f8269a4cfa93b9310ff2e1b9a3b2d44e44788f7c7e9febf33a31bcc21d8c43dc82f109f143d59b0545e936933e3dd3ce973569bb2ab32b97f080d94ec077e33738af02cdf7ead6a03bb3c2dab2bed52d32fb2d5173e30946bd016560c7aae0bb75ab25618b5604885dfd06fec5b860f0a4444afdeeb21d75ec2df1968797a4efb66fd22a72a99d34292f835ddbbcffaf67ab330f0fa2d0bc0a710e5e84b0a83a9777a9a74258191a39b5c896693f19b0098a76033b37bb7f84751c2743a87322855d0c568ee400c0ec4a3726f2a137a8e68ca48905e3463706a48b9f48c19e4e0c8a8ab69ccfdccecd376f9e0c95e200ab0c1efef427f988fd8a0d1508ae71f3998aa556009e157a6917c24a1b8fa14da39375e39a885dcbd58ff13707c1a6e9b8c7dca36eb1337a2c65efd9b3f0ede68cbd29b54d86eba62b40e853daad9566e6eca12d1bbbbf44a3ac38cb4a6c2071a2e3ab02a1a61b7e6b274319d5b4d611a0438361bc0031405b454d8d5343f165a2918a4a2b6865db21bd91f79d99e160717703dfb4411213afeb9e9e732ad938f851480a3f306332cb6e756ba6af3fd9d6e192f588d0da353de99c7d0e83406200ad54b171b09c1bd4d44de4657749f45d3dc151ce42020b71d9c7b7a9efaf87780040de574b690cda698bf07e84b83650c61f62e917222ce836b0ccb9c2af1fbaf48cff5473627c58b8c01e4649d3267e24fda76dc2a3000d7ae82ad29ea77145f4a982fdbb10e0bc2c7adc4159532b11d4fc9dc0d70d3b5e30ce5078f62142a57b2707b7a4ece0913f2cb9141580dad8508cc486b6e91556d2e3ec014bc4fa560275fc16a35ee2648b5613231114ac1e123eaa23f49f5483ebc94c2011db0ee42516ee9f48ff6c927b7798f2de67257fb472cd2d12c84f61e5df0f49eafc06bc5d9a4db60846f5c7aa11a907cff0cd6991d98c0693dc8c8d4b9593e329a0685b0670a7ff63be046071a4d1d6885a0a6844c39554fa448242a79d78807060ba4cda2a6bdfeddd1ef97cb191e37a0b72f847d1477ca8a8c73e64572ba631a5531e233827ebf91cabff15c867b3277d8d86158330f24171d1ed1c433bd8ffe6e92b8c1a6a88280541edf749c1ca1338b0be2849d06a372828bb39f2177d3dbde3117f518258fd1f67427bb64e9ccfb5830d0aa5a4290c44324547e45d176d92b75c777e2db2ead392992dbe5cbfaf8c8adf37173ad3334e9507b07a5b3c21fdfc58fee0cb4a73ca4a5e87927a8755262eb1382ef2ed3ebfb76f2e54b06fdd6818b38039c9741a5bf50f140336a8330ae52f884d6acb91001007fbe3fb070259a2e8b5d9c6b4511129374d510f76dba354b692030112ecc8355eb3b879b6335b1164da5131afba726d43be3c6397b1a7e3c30fe064478470addfd032dad1d2d4eab49820a8bab90827c0c105e16f475128e13c55f2ddfa81d007fbf39d0e836fa54469d88a69df3aef4b004df7822f677aadb1e44b4ad1845263716b1eb0a783b7c0b9d955319f933a3ef6851464bc237f650b0bcc128be09b7efb19fe6cc1a9c88612b397a66ca98f090e4bd68b804dadc3924cf3c9ac3f11b6d370aa97645a2e110ef7d03cd8d65455d1f2ac5b1e2e6c35f21850d494e85ba7a51fb1b5020d7efe09068d6966b23091cc2a0477d84e5138b50e71c7e884efddda77926a2d4c21a99b703dc098b59a3967427d566135e338358fc518098d34a60e08cb1b388ebcb020b55fb6d168f7d93dec857b2b7da8d0fe3cd9599a79c0ac9a43ca5cc65db68e435661c0c334dfedba88ab6aa97e088f99660ce0fdd32a6e19d92e83593195b07dc3e282c0b1c8e357976d896dcf88c081bbfe62b611c847071956336392d0a33a9e60516c583956af992a6beadaa01031af2c3355ce20e3ec84efe177fa0df3043659d128a0b7b43d1e80869337f50b33aff4f75f50dab124bc3a21f8ef940c554c3d667823aa985a980e7e196fedfe024f070325524c2b5a1fe35978ec097bc81089a5fd49b85fb2860296cfdb0175180cd10b6a3afbdf07307a0c7a77e4bdb743dd040a9b3786cf792b853901b60d0f59c16470837038969e4ccf7ffb9c4ebd56a6053280ceb9fbe1e7ade79c923232b676a2eac43fc482a9fa06fc1fc6ab34b9531e07a2d445d240a5954dd42c613cb35f4b3b65b10f75f40037613cca5fd7fc82d2fc69eed6ed1603cffe70cb3687d0f9c1d4f07a75cafcddf561db3dd8f190a3b8735e84c9a6e280a25bcb150eae8fc4ab69ed02941c3501b5508387a32c0644332ef92cba9a368ad0f87b90761b504e6c4cc3dfe6c42d09fbcfce4e4ae1cdc2e761b24d062172a0c056eaa3f948b2f589000d78ea5d55653d3203d83cbd67de29ce126c58e73750f4e990e5f4c13868862632442b624e91fe19dcdc051964c48eb6a2111f55e529e34316cd151f5105e821dae8066d691eb309b1c0107035348adde9d1c5f81c7a1fd5e4dfc6bd8d5c33755fdb17c94569f0641b0afb6c699cb2865204e9483df00f24738486264de9dca33973ec1054123acb71333268726b7a625340f5b0e9fa35b15b51dfd4232d683e0068dfdd2595f6a26cdf31fed03f66d4960c77ec7117380ef4ce3051ad954aa84d208f7a2a73b87b6645969a0376ec5f72ddec3583c56a8fe86024393dc0187468116791e31a04d8e62cccb49ca09f85721bcf36928351d6aeae27c5642c3624f9d1e49ee017402d74fb30f90c5ad4d93c6c9d6a1def9255a01ec7b0b138482c7ae8a30b91fa1efb8b178fb1c2f440bd0a46e33a9658809f651860759582b30d53ac1f627910d5c5a1282589610b57b394111d328c5cc11686419e7e818a0b4a1cb2b63e161a290e4f939eda570e8e5f3271c7fc707ac84d5c20ee4615bcb5654e8303f8f9746d57fef0584f258c59129def5fd2e320fac68f1cbc66c29945e161a3851d939e371537b4ee324cf34c601ec0615044edfcf467bba55b08be3130ee7ab62655160ad87257cd3e4de1dcda3dbb591f26403369ae84258d688a0be65daf13adee6a5d14475f71cda8c68ee38336c389f7a63298abeca998529b3a7427872a1ea019a25b1f42886ade1fd71e87a92d1b49be7ef3e87bcde66750416ce4b975f31a927f1f72975d906e5c49eda3a8e25d8cc77d2dfca7ff021747b5331dac63b5ce6347c3d9c47dc8ca1a6bd37facafcb417fb1895107b975d2e01a592ad68ff13c0a90facd60758e81c89152643ad1def835b0a87e0189ac2ac7c56194de671fd406ef26c5e1b16c15e57efd09c9f5232187ff0dec2bec3f9f5d6acf041a65ac36d6b6da4bceddbc070f6935d8d086125df4f12c13ed5d8aa11f5f03c1112810d5089c87c79e3728d595049f49e51136fdfb4b759ddc5a27d09c369284691b082efae4a1d1c67a2cf214b59bd58e030b9219429ce26f6e918e42661d9678aadca54c33caf2de0322ed1d10ae1421e80aaabd9ae47a2d17526aa081e7afc67418e87b1e65935b6eb5470c9a688e573caeb87698fecd7bc0d4d6350e9318d8f34768e5e90 +MD = ffdb41d7f33bdb4660ca023cff467d9536c397ececd3963c7015eadf4a2cbbfa58d8b39d3f736432a4cd5df09943d71422fc917220a9579e09d409751088862e + +Len = 25104 +Msg = 6276f2032ec3330908b7185472d3ee94b162a681e6091e157b9ea3f8c03db33cd699074acd91d11c090442adeae54faeac92b57b8b613a4d2b7c36b138f05339490091710bbf8d149bde028033c2906809d9bcc9742f391f513c66d8a5011709845398603176ef5a86ed62b59691392992e1c553e999a1f2b3863855509887144c3925ff86dd805492da69355b7bd3580d4fd70132c7fc2d1b00b61081de2cc26c5a3e36541dc76b864d1fe6caa7e55f43cefbbb96e2d13a4f55e7f280fa8d7caa5feeede15d4c072ced8db12b3df7a5fc0438695e12a980172bd3e1941533a8d0f03a0c77c698914a63ba7ec5679192ff9996f3d37e0b673d2b83c60657a4b0a4b42c7b5c80326fa956af36e14b3c8e16361d413a4f7f5787fcfe8a1ee76afaef54cb22d8b2a20b116f72bfc7117f010783d63bdeac8db8bf464c1324ee0df078771fe9358471cc4a560d03bfe2e3539b27c8ca06bebef2abb3764b609313f809c631b9b91f26191bb287e911e6efec9acbfbd4f9ad996d14e983191aff067c68e90878aeab495c4d2ce95804442b35cc16784200a0a792c1907b6499596de35e87ac105a4f63fca86b3a3ae1251f94f9b146fd63bf6ec77c51671626cad195b34826670634fb61f4188276f0b05472e8436dec6a3378750bd44e16097ab9fa2fd67d67f98299f3f9dacaf4790e51386275f6f65d244d0537c0384c8a90ad7a9ad6b9f77d60c51a7f5a199cc4669e4c2fefe80583b973ddc8bd2da0f135357dbbf3e3fed8f6083e4d3f775619e1c41817584b00251b7467867536fa8590da6b5bd30266536de9c72c32ec0abfa74a02e25828ce8b72d80a398d5a428fca23ac421e1e1636edf11de4db81a0ffdfb87457998659fde5252da8b0a260570a99a8387d40f6c99da6a83de13d0021b197d53fc06d88c39ce53a9c84143c2579c2c705976eee54a692d0ffed29126d466d8d6278e54324c09f98ddb1bbbf413f29727016b2e61e303dfef1a64bbf2ac6c5048867f7726979dcaf33e09ccff283530f439f14c670622e98dcb5adeda25924a17935aafedbee23e766b9c155826dca0844dd9b769264ed0888c157851b2514cefc8b07cdbf48fca83de3313a372615c33c754fdecc5f02b4bd734f70de551cf3db1114c860aeef5a8107f4645ad6bcaaf21238e7667bf60643739f94330fc576dc6edbd705498565facc13bd32a44723305a5f77a7df4f64e1684fdb617b95c0c84a64e3f541453170db952c09b93f98bcf5cb77d8b4983861fa652cb2c31639664fb5d279bdb826abdb8298253d2c705f8c84d0412156e989d2eb6e6c0cd0498023d88ed9e564ad7275e2ebcf579413e1c793682a4f13df2298e88bd8814a59dc6ed5fd5de2d32c8f51be0c4f2f01e90a4dff29db655682f3f4656a3e470ccf44d9b2094ddc8d0dc8161de3edeefa5aa2c7d0fa9b8ca83ac68c69f3e6899e157d0b7999f0fa18b6e66c0858f1bc08ce70dc0fc2b4ec906f610bfc0e176d899152ad32948f65fe91b1fd8653a2c0b1ad3d35c36b6cac96898d1726a31b1b54ad8a67e3e47245c704f06e9fbc4a23805fd179f4dc0cf542f01258f09a38bc87d0ece09670e1c1f9796d6a5b7b2f0cfa4cf451aafddbee1d0cb87861dbb778aa6142c1522024011e57ee97c37899a4a9dc6e65eeb623c0ae46471c824fe07646ca52b120dc822ebd063c9dde9cd2131478065cc7ef2a927d0486ee59dcfadfe272e559078c45705fee1f25b5cd2180c38686df3e903a8d13af3e96f16b4fda07c1c2610f18b3ee8b775ed74ef4cd133f70b4955a8199d8f7b037bc4fe525903c1fb370406815d1c909c35ab3fa1ff60f9c582723aa8f9db16d39077d30c52909f47e2ea365b240a10c1457ecc55f4ebb743c3ca1f46601ca500c1f823677ccf6a8ec453ff5d4649ce81a75ff3fd546cc5e277ddd45642ec9c077ad66dd82a18ca3c55a1c01c16541059d5df64fc803c9c4e091de87d34c36254459310f30d1524ed1184372c26a19cb65b6d8dc82b03a0d3022aca0f9829ae639caecb3c784d10fd724bb2e1f9baba33929aed04973a7a1dfd5507a1ff97c6d1fa99fb190e18f4fa1298c1f20217ff3e25e7f12667499e8b554d1fb8cd96421bd9d50f1d3111677f5cdbf2c0d241d2429fc538a21dc984a7a47370d8a49da6add4f095ad83ceeed9cb85b3c2dcb0e9fd4ac3320c1d32a2ff5558b975f7167b04566d1d6e6889d1b5e936839c93fd9cbab1525bc9080d9ffef27d480547a925bbe8bb14d4620ad670206ef0a29a8060f78e03446d40c2c2230651ab2b18ce4d31066afa5412aa63b52b8f697952d1dd501b465a6d69fab0080b66514becee481039ed6c71dcf0efe145288c855f6a7840f3ac2c4de5fdf01a7c2be8ec3691acb5fdc2b9b22366f18117baa85b02c2c836a19528833774f8e6c322c0807850e1aebc7b8099a8850f111dc66b6f0f7323cdafa1ddb1f0d840d98aeb86ad34849d7700884facbec3af1dc1dc3435b7e431627852ca3e84a04e8f3dd699c6fdd5268b6469754fe8bb48039e5ca143aeae679186186cad755598545684787236ab137852afa017c8c4606f1dc8111d462a4cd7737333634570a4e56f65a113718efaaa55cb4e78a1878ebccabf223730f037b0aae3cd14777a0a9ee30ab23f20e932bdd83cdf07357d39792fa25305d198de99a6fa88157dea200d4be41a69d752521f7474e037d70de720b702021dba7ca80ee217f30aeb398bad147248080742df4b9523e07f28c21e5ffb6eddf35e141a8d06dcac5921f0b3fad735d9be334340bec49a5e618d2255635749451b3f07aca06fb90284c4a82f730ecf3dd0edcc1d058d78b87386b712e76511b5e9dfcfd4c5972d941245b854a2157ee3048955daac4a2f9d2997e8ed68af58cf03a2c5398917badf8617a9ca04a5f577bdb878f01f952f6af853402b43909eeeed3a9031476bd15354dd1506171aa35a60dd9df3ec0908b0642b557324b354a3fb09b952acfe118e02e8528f55fe0909827b4d5c7df04bfbf192814b78720a7cd19299141668ebfe14dc1adc4dcaa703b703ffa051e559ac252b5c2aab6730d7f567b80c0016d1120f2ab6537b0b0de7632a3d560472b24f73586e875a0d5853daebaea1169251685656bdab4a299e131b307ef41203066470ac00e7f0def15ef6b0e559b665fd6f9ed2a94a47b0d82543d94ce0e730a6798188ebd30c569c87dd39e4bc6c0c35a62d3101a7003b6c8c81671fc3106612fd4a8167bf08feaa3d02f9353fa3ef8a9aa6044f37e0239bb7386c80110a1dec7e10280d327351ab0cec614f69fa9a7cbb7d9efaa384041633ed7be63150e2836a96ef54a3d7da2f660e24aba1dc977c9738938c4058474c9114f7daca614e88412349d6a9a302a7d6fc95d2add6611aac4b748cb4c987af4d5382d632d7ac6ba069b9fbaa716594ee1c474cb45481c7694aa46477742fcec70d8f511110969df6cec23c2caf6d870a01bb727be364135caab5bbeed4ba2bacc78fe3dba897afb2b70530b6c994eeb92164fc5b1fa28f04e02afba167b1365d05f706f90c2a0172d6c551cf6c864c8a1fd642d845a78af08f769c25a99f8f563d77230fb7b8439592b517dce49c20eb4171de8a11fda78e0d2b25f216ff8736f262c06637ece6c97f470b75ee40fc5b2ada37d6e11f555bedab117d3c3bce6db95c77c309125b5cf0ed9510d63f4f585071e7455f7724d8a588f75d85eeb568f6c6b17ca7d311ee9c2b6d3428c18a7146db556bc9af8682c9473fe98082ecb72f33f6199099baece582cc6672924e3472790a90dc330af8cd6863c7c882d4e6e726ce106ff0b6d641865b1e300bfaf067cd8f8af38c1299266efb6eaa88fe66a30191f772528649449891c1eda921539b6b5c80ac255df278bd7f44b2efd9c4f766fa455459b9a4735bf8f807e441cc81b4ea3862891d7318f667f08e31e77038c96f709250b176322309371b67ecc9bf4cc108b341f1b99b8c3de878f9b7f6fbab5a0f98e21e4d15904af5948e82e9b88569881aca7b3484f179932fa1bbc7b48f5288f4785087a22626ca0fd2949ae2115c1d059d0a5259b893970eb4737107d7d16321ade8b45c47251ae9dea26bd053116e00343fb17e64245a82cc7f714a276f249cdd57619895ee6ebf0d2cbb17dd11c1a71a8bd08766a454483420471ff07453e2911d0e0b74bb3c0bd8a4270d11d5de46da6f1df9528c1abb960670ddc599578f63ba18197634193ceb993e4493e60a7bde5a18489a4424596ca27d281936d5ffcfaf2e471ce17cde908c4f32d5cadcc2a0ed4de9a074f7ae1284ca635de525b02f7caf18db4bdd7d71fdf87c49ecdb97cc993d7127971b26421df734262ced4d2d93190323cbc1760a5eb87572d47d87bbde55637212f55e55e +MD = 8967a2332c882917fcadc333656e0d759639ba46a571137b744a5b65cb0b915ad7f7325003a793a7d4b0b225773b334907a5059d00b8827454d5f85d4f54e2cf + +Len = 25688 +Msg = 819968e22eca67712250f9927861ca55d2ab21f15945085bffe6ad180855084fc820be22ae91453e81de49b1eaa04ffd3386996a4e4b49a019e5c974e000690323aa4afd9a507c4477e963b6eb715f46eb99ab5234bd86318d16910b4c3179ed1b9fd51cfcef52aa8bd90d4883bc405b844b215214820736e3e0cf8253d07e3637682727db5510994616100fbb693b628603c211f58414d8a4aa4984fdc5c105006b08c5406cfd382e0834b59a609884772b5538dfaaf53e57dec8b753f88a83fd11409e321b63b0cd1840df298a9fe8e12aa36edadcf19284e314c35c5121d7b6c2965bb94a8828abacfe376fcd98b74b68745cef0251f9b321f55121b9cd2bb3e7d4a4dde1b5c94e2e34657412ca183e4d8fa925055e9d6d003309a816d7a47de6c020a7c932bb4004ab1140427e344141befe85cb5da639e89592fb52876c9b2923781ee8472509982be2dc43fc32dcacc703153d993ca041e595225325ab9516c4544b273c2f2f507c804fff8c3b97f6735fdf4359852973e9b92303f988f4176d5a346e58033c966594a15c7677fb878abbebc6e4ac5ce66aa708484b2c3e93e435e3a6e5c6b8d1afc6da44010d8fc7d4be3fac83d7c1022f06d90c62bffef2f28b60b529a3296822bd039e7626db1f1911e5df7e2fe130027f9c368768b99b5f05b1856dc019c5862224521de968f5205be5451ddb43d6a9ba5bae024ff9f8f34ae0fdf8450f4fa39c43473e7fbdb2b24545c8a8036f5eed5e1d5c1b9d45707603f504145b946e41d46a67210f63bf97770f4f66d1ee2e9613eb281a7a266bafd7f684072a2f8a2771a0990ec2e08297984bc1a06b47b06c83ccfa460d2351676fed641ad9680b1e1ceec54cc0be657950ff089ef9024a3754c8bae87fc48b6672e18c9590c75aee7d5ad3243084cf0749350ba8a4a866be2ee75048f7917f7489dbe3c079d5dd5f3befacde3abb280728f4b20693c06bcaba32a4ae9e1396595ce253e2b919fd38ffb236c208ead7429845e5fff0d2c1239fb09e629cd138dc92fec4457b1b224370ad5a17bf9946803f2e8cdce066d091866927ab1853cec7d3371c2fe564b54637e701278a51dc89c5ba8fe68d05ffdc176625d33a22bee0c99644e91f7b1c0afb6811388f980124d3eed6621f36b8cbf9ae82202cc572f01a2224bb52e8c15765397493f6f91d1b11d44a9bbe826327d54924db13c450be6ee4a4eca6340af51d611080e8f998342673d1d8907066b85240f54b1aa8c2146ee2adc642e661abcae8cf468d22db38bbd35460c0882a46199adbba66f82fb8c126258f4f862d4214d7972f0cfb4cee77fdbc7c74521799d15fc06e223cff7310b8f690f49dd683a53552818d0c542003f8ef74d557967823988bb074fd990d039e06115ab2c433220ae7853ade5c9406ccd7900a1e0dadb74c24c884c1674e41e23f5aa84d5e1d365e3e8339f8ca1329825b183b2fe5fe348373fe7b13d0fe738c87b207f60e08873a3fc3b2e20765142162539213873443455f9a81783ce440a2c8639f363cbbbda5d28cce257c526eb1d68a345159178b9bd2e3bd7a13c9512ee9b397944eff81a8df28b44890a2df3b9e054c71c56eb58cb42258a0be754d37d2eb1899ad9c7b4a4edd8ed3aa1c11c5a20c00fc32036821eba07a72a3b0ddc66b5249cbc15a529307f4814f348aa95acae77879089c4d6160a249792b42a9e29c3253b5f201ae8bf2b4b74395b252fffedddd70ae020b54fb73f03cbef258934dd15ddca958393bf8675837355cb2be263757698efd4b02a55a9544c58993e1667990ca4c2898aaff538bb37c52719e2a3e0ded0f54b574449e6117a6d001d5cf701406453976e0f0c27940d25b38a8f237288399d1f0b1c1887b3fcb8c4b7670fe1018fa5379e6b4fa4a659f3eafe2666dcfb4943aa5c105600b449a8818cd316dac89d53e49c3314425ab4bc47d566f272b0768587badf76e3bac7d8b11e0fb0312df3cc18f7f51e732993eb54a0cf3ac64047ef31b7c7ef93101db5cdeb9b40a67a599a6f323fb2d9bb7e0d9c00adb45a1333cd32c36844b15ca1cc4266046c8d66053b31cb6175c858d9af7855a103a0a1d0bbf57e4f0aa1090a78b91db9786849ad2b1b3408cbd1aa4d2d9410479d3c9495480448caa5f4adae679c934918b9cda7e675fca44988283f1459d0efd58033f7dde9a3999b1ea30405573731b2144a9bf9fc95a2635e5b2600440828610e388f0a102f0a7ea181a1de93a9e1c8ea48efd1f99fb1adb6aba86ded467fb448eab139123bbbb51fe21e5fbc3bf7e1be611a0b076b208d33922ca9afec6433c2f305076a6a1bd2dc1cc0154b9dd28102fba101a0889d8667b72960268a64840eca00e1732ab96c78ca4d7bcc20102b5aa12b525f88772d9583351dcba0ff198ed82b43d70df2c678530d0fb8632f4517ca0f899eeb4bf77f7ec62f19b0a268b5b5eacb007476854d4f854d8af78e62ed0ec3f3d9119a58781253309b49dcf625ebd5d38a0eb32d8a284cc1ce2dbc092cc7ff3da8abd0d501d662becadd3d5661d252f9de3d17339175d9e8fc9646ac698e07d3880a9e01bf438b2612db11edcc1218aa6770311c05a0a34f90c1acc125d97431f1ce304302e223031dc41930f7136d61d0589f6b59413f5225306cfbd432daf57067563d7f2ad0d24648a1c4656ee7bc834690860ec0148d2452e5911712928a7e566e458685fb2026a94a2c898d0e16fadad31088b5a97d08a9c5354101315d962bf6efab9c3859399680bde5e6471dc185d58f798a949e5cb58a6cf4774e0b32487eb070d5eef9f960d41d0d03391d61c7f65733c73c6d9b06838ca3fd3f0fed4c642c58bba59ed0c8b2ae618c4aa24611d3fc59f427574e0d6f38d1fb8ad8119855b7d5c5e2946a1ebb0685b9f258f903ed035e89dc07d04aabe5f10ab7f069ccb1e76a7d2c972fd34ba9dc44d68df51ebff0a400d0ebec3ea808a3a35ce5304a073fa959f9f39c96e2fce7855dddc4b2bb48ece19c8fdc6a02354c4dd0232fa0c424f4e4c1563ada1f943a23feb4d2706d707bb495403b4d38e06d72c8368261873bef96191b750d6ff446894f9fc8c8451be2e251b98368ca9e79aa9bac02fcbee8fbf667dfe5b152919f2db71af23ae08fb50368583f4d25c4136dc0d01be2e9b0ac7e4400075645f09699cba2f948be5064803fb8e95ad8f5ad24de5f27a4762773a63428547cd895df5603c448623d0263f14e37fc2252a7c9785ab5d0c202c1d3f69eb5579578f5ebdad5fb5a17fb2a45df2a61f224315edad0bc5081bc1df45ff80a337b20a5951ea0e8b4c8ea671c8c924ad365e0e39f53b679dbb50306537a12fd2f59aefd081a30828cff5a0f7daac325f8c1d8f7cde692299405377a43b4effe055da0dda3511259e077d762a222da523e808ccc7ee61c3235ecb9e86992e7635201a6d60b45cec55bccf2ff4e875046314c6cf036f48d2a2dc60abf298681e391d01154b47abe5b6b693d33c73abd786d600a016a749d77e83bba8cf81257f5516380f8136269927bc706bea0cf8a7f4f75e45eadf895b1e1b849c079c8c1fefd16763ecc9f78f11980efee5fb84fa143f87c8655e33e6ec6c62908131c688711835177348434fdd1016941788765b50752430716e6dfe4f3dfe8b2588fa4241b14a35fdfa3562f1ed303567fbf74f0f63dc86f5555f2daf570095dbe951d3c9644fc47428f24fb7f603eabd9b2e60bacf58d1d85c33fa75830fb68b9bf3c56ffbeccdbf1aa59e95f538ba01b14415b782401904cb0eed0787d3f71de707a09d3cc857c61874d8f5b076ae1b8560f66f443b6760ea1a8fce2bf65f7915b5eabaf18c6a716a87843ef166cdf45fab8c4adcf1c2d4007f6732391df7886d272d2ee0df0ea857072ad87eb01f72874d5eb1140b32485765fe9c77f2c6303682f060d26a4c53281c532b1ffbac7e446df50ab231bfa435f3da72af1dd45abaf1bcba8ed52b5a26ed869f9eef7d01e033d7be7f0a72d0e351851da74629ef3f9a18a3dec7b4a596a34b9cc23599e1a1c88e36433f52b5a9a887062814ced50ea58c8388e8ee1cc3652a8a52750808d054a2d9c6776739ce206694f92fcaf66f3ba0c355e1e1a8f45cacd11756d35cb4fe990ecf5bba459ce0ac2ee4402538a984ddc90d5a952f70b058d9d98101c797effd3f289352c25911e03eafefe78506a7cafe78fa139a8088b60a5f9e9a30bf4f55d397c638964eda8b2b23e319c4ccccf0ca5d6a62d26c0c4fcd7354a77e75452a32e59c72abc364345d08c5c3dd441dd59686528abe7c66aa88db4b2e9b01f903c4dabf0ae700d6633c263cebb7b6bf03c8b9589445f8bb50a5602c3a6eab9468f03dd407344c59a13044f19b3c6add02cabf2787512736c78aca9fd0dfbb3ee121d8867279f11574a12c8bda53a79d580260656bc952fc99a1e14bfad6781ef7bc717a529e353167f7a4b3b1e4b7278fda63bb4894c1384d506dd9bf3b2c5d312ad15baf8a61d6ff9a75 +MD = 65cf2f85b9a37f980288284795ea6efacb88345105d5ce13785ec4b28c979a3b9867cc0a5bb6e5a398319b791fa95331e2d95f3507d5cd742c095b9c9f2892d2 + +Len = 26272 +Msg = 34b77a3914ae0f4ba8d43e223a15cdb9ebe4faa703386d4586d46a1308cc4b58c1452e09e47cebec2d0a49fdb96671111baba2b9ac9b276922e486da65a3fbac9e27245090f7fe252b1610e15e85e6332e0ac1a705308dc94c8f138d3b4d70eef0e5c6d6bf27313eca81fd96d17c16674b89bf37b5fe87ad2a5c79f534d39466e2087b621a156d7e31d176e3b953e7f59ab10532650dfe5ce4d321daf63c4d5c9917aabe49c8982f8991e592bf1043244409f95fbc66d81fa37c710429908517409abdb0f3489b97f946b1698abd113d711a04886310ff3e8fe0d23a76d823e0fd191b01c09e5ffeaa7a4231c3613988486a8f7301135901cf86ad46851b0ffff81d2c795ad1cbaec3b400b11105a24df28300e93f78d0af8cf668eefd6131bc5b2d58df66e9c6ee6d7d53b31db036d497edc0b2c5464b92edb96dfb86b2715e4bd207fd8fef3a05d05ca3fd8e6adc645d2e38963a85b1f01b562234ca17b72ff293a1997aea0e3c13d958590d3b7c476fd0cf5d463eec123d55f1636e97eb7578f88e7cd2e22adb5f7cda8d422cffc3f35becce9278e3407c3f414e1d3bf5790589366e3de0762adbce9161d4444b211255f9b3c63b7ec2009b79be7d0abd83bfcf023663eada70b056e69f6c8c49a9f3485dd28a8fa5dff0f1037b360c2bdbd151589eee0b3ef7059c3f0db10ae1a2bfbb80f3847d40e074ca464df14928c86197a16c83488a05032905754cc8fc569d37cae05f0c370db6acaafc56ca9a93982a4669ccaba6e3d184a19de4ce800bb643a360c14572aedb22974f0c966b859d91ad5d713b7ad99935794d2222570a3167733a532eda0b0eb17510bcb581e4995440101a00ee2e80c5f74faece679b372ba237bcd2556c75e3ac050d30c6f8b3fc66496e03eb2cb0bb826a2fda9a05f018981fa436cc18383fa4f7a80e200b141086d2154b5719519f81654d4cd69283b5bdbab5642858804dc6ad34577963e3180a71b8e01c3e8afa5e09b12e0588198a7acf95634f74759678f15a13b849499d59efffcb20e38453801e03870e30d9203528ec3b2bb43ea12389c24bc5056e26db1391134d5067324f6cea60d9d2ecfe578b63f5a35f04f6303e130788df793bf8a717c089cc5a1f33ba0fc04eb679ad49c1a1979ebfee1e05d8f54de91f9264187138dbbea085a394d11aaf5523a9b372924f2c061a25a00c1f1227d00ce32aa33b9d6bd3151145da7ab236d663a49a39c515b9c2b9d004acdb0f9c25ef911401cbed78b071268e6d7b7f5bb9bc91e908249a48bae418d34cd397b4d010c7ab9ae9d10b3dfceb05b69c2b28e6779829467587e0d6e3259456d05078b9b7ab75d75ff12a620089321ba75ba545dbe3e15a81838afefd1ecf319ae2efc82c65fc1ef4f4e007c3289d0562b9d9bf329799ae10374d1a7b2b0d45f9f622e6b61ec8d86f8332148eeecfdd97edcc3ac2dfdaa9ea4b3112a576d4fab53417f99ffe5f6e99452a71a9064f090c9f869fd5e12ab3d6663ecec324afb89543d8ea2d2c4b463ae3cf065c96a5f38a7610d7b1c514349d307d361d6023e762cc6da2a9d114ca1a0429bbefc75a01d81a71c99eb41d940753f533fb50baefe476dc085b14406100514179a9c0f59dc034b15ce6d6cf3cdc74aeaba41cfb38e3ea2f038a1e5972b5711e26d4aafe2e086cd97ad052b192e43eb18861ed6e2a27cf6e7d7f16e767020dc8acb6acfd1c7969ef0aa3504bffe75605b07aeb9c2e77ce9f5d832570a7adcd48f197ef7bcedbd4fef3a8fa26ecac67b20d373d0caa9d8fcc8bdc737e9a7e58a5dfc19a00aef6540b1f2776c9bffc17c185df0c46085fb9fceed22798a83f57e75d7bd612239192207567ecbce29f0e3902bc7fd3ae86f43870af6a4739b67117520ccb3b95763544ddb28588bb5df5226b14bf3a06daea87f8b96311b5ac4f3ca8bda0026c6be6803f4e68b4b4fe7485a830f303762240f16f3a3b8184ea995e46d67eef11394ddb8384bfc833493269a05844b76828a17ebb78191c0e35f685149f8c8beaa8115d929caf4da207d8d63dd4dadd43b2b337c5bc266cbc580ebafa5ff35d607fdb0e52de62ca68000dd466ebdcfd6f891e23754d89f8f4198a04e060daeedc8852f7ac9200c7edfc7a6c03e672a054758b4ab4756b481f42126caee86ac4c4891f1f88ffb0cc99c3c7a5fd0dc64d5a3da2b5687af4e5a6994df94c40ca69814be98ecf6e9b62d41c9b883aa8fd8ce9ab0a6b7aa54b56efe7e4b3a2b024657c96594d6727e91006d19e1ba3ff42e569856c74d33e992364f37ea2997f9d3e1c3117633a72c15f97a87968205abbe142946fd9598d05d56c87c4cf17f75f7ec8e6cad82f974bd6ef6ad4779a009007dca0bca1f6d9b8f36e695e41055e92acea7b1ab52dddb1fd76df564ef73aeadf9f71fad4916cda05d462f3004cfd5d51e9b9b1011e8e185c95cea8f72150f1f2f4ced27b128c9293053a2b15d21ce9f42d6834c4e9f0aa7cb200727afe8accc74180ec9d6082082669b9b08781035e1d1e504e06764c8fe4373e5bdd782fa4e7ef50ef426596654568a7275e40f9e3552438a5d0ade9ef1c8a4e0b2a7689a0d867038472080fd1796acb3ba3f647a022a7eae1297611f1ad15f82b69dfdee9241064523631377349d7ee925d8d36be0f0f2cab1ab90abd1e3e0663a09d77a652513a0295c854743d17d8d494ec0c65a1c4c7abaa5e1d7cf76f3e5ad9979c00eb944c3b98b6affbdd9251aa50fb11bc622e8388e14d9256c10f6ab91bb5951f764063a646e19031b2b121bc9aa28fecd9b527eac76eb172028650276fdfa92a7bbd47eaa7323e3e43da0fb179c9cc1c8ec27d7b65a9c1f9453bb94ddbfd21498372c0b0c39103491876e531f65811750abb4be0c2e70c120f986cd26af745a615c996a0a3e7257abaee69e61837a61fd40a5ac4e60ed8e6ea04336021b55d66b92990614e1aedfab0a86475e74fd341741572cdda086e9d5de7d49c0a20b1b4f7fa789ccc14a3f1820e9d896b86e00473465aa3a5bb165ef1aa18302c1e89b658a514f826bb8f87b987dec8adc5148f5804dcef4f1118512cb3c7c48f982c9463902d1e63f9f9e2dc7aeddab4f5b90babb6be59e1f1bb9f996ba9ff3c77e377a1248ab58bb5282d7351936888fc159ff5c6c98862424870bd3a858a3aa1f68798c9f566a7d7658e0773981a32c47074bc9bc525daee07eb2289250c9100adebd2e834d9bd46f82d1f48c497b93314b18b9d7ad752dc40394fbe4f2e4a7b4fccd7e710b5d8ec29334338df882533487fe734b047d0f43b81cc43cc986cf926512d3051a3fdb040c8fbabb0947fab53065ac82e1d5f1e3fec227e64f1ff6478a35e29bf4a367a8413d0090064ce827e6d6bc1bd00044296a2d8d9dee20ca38ee9f23c21538a323e3d49ba979f1aa211dda3872598c94886ca76ba0412999eb04c6fd0416502c1b66def263dee6bf2547d88822e8eb518588d848b9c2ab13d26f45f4ce529a40d34cc48b6baf9ca5a8e76a41b9f8ad09b54128bb36fd159683708491ad6467aff0082ded0d5673ec209ef7fb8423323b7c182139a45b09b072cb0b6a1dc658c7f61b639de57e1d0120b119fc3dd32b555e904a2a8e66e7e024d162d49be2ee076a191df46090e8732dd038ea2392e8f5e12c1c24519b40a41e25f367a464880ca063a5a72b0976b0bc7eed4bf1ed0b7b885e0fad9a72a48ac33b6599c3a5c7465d9d932c81723848310faf78054c0374d8a8ad2cc59773f2c88411f176311c22d6198edb2055bdb83024e814fa2a5170368e7d386f544f8a728280f548910740ce89d159641e677f4e313fa93d1285dc4691e8470433879065c94b2b9740192e9b41031de946e60bcfc70e8b3a9f01377d3586ef00dfccc326cad8eafeb8a22ab0e1acaf1c6989fc5958ed519f2a64004efbc176f1937f912a09a2d9fb8562e3c3ee367379f0e3bf5f695482c74f1ed52057309563092068d3f8417efa10bbd838c929018e7783c3666acca54f77a214b5da4cc0b1ab5fd8d9392d2096f52d868404fcefc657dab6f2ffbe2f942e8e4d63e78e6f89f47e5f9e2ede853ead286d3a144a74be2c68f8897ab18831ee43edbf217e18387f1c7b875bce137d934cfacf896a56d26fbf068e7e4f45b53163843bfa84516995aaab49428431b051fbbdb8d7050cbf9c3d6f966cdffe7a925d9f4ee5398189e2a96d487599869373c5349a8f82fcb23c64a225e8fc090e8ba2ad7c64264f15f0b94009576678835339edc9156cad66bad53cb1551bfbed77c31d4919a3008a1a3aa2007a739e0c7aba47d8fb3a9559a20fadcd43c85da3f14f8d4958685c72f9ae31d251695d9b74c6e15ec3755ae78c6463ee378994ae82987bd1c2cea95d09944dd37e803dbccbf038aee09554bcd483fd78a2c83789a64e4796cb4e7da4b48d74985480b4ecdac6cc6de523192614ded901181ccca1d6d19eecd4704ff694ea349575c369a83baafaf043972edfc7e5952bf9efbaa38eb2e06890dca6af254b0c6f44c0b27b692d62fa7e79fc365838a03deab987fb58629a7e72dc084ae0107a6a541135e2ddce82d1083407b6503888cb4d22cb15ae714bb2ecf6fb564 +MD = a9df8ced968a6fe80b4fac0e171f14d5325ed5f3b17a9c254fa381c0444a303a903a94b54a87519c2a7ee1c266b2c8af78646ca0def88b11bcc7576f2b24a776 + +Len = 26856 +Msg = 030ca2fb111ff69e9497caab0e7f519aed1d06110d6c48fb7fcd47da89f9245eed3a54366edb462691dc455aa1eb9ffaf59007fe76a838445b14dbdf37b2abb3368cd73fa350a7b9ae0163606deb710e20dcbd0cb9915e2b9c6f7610a37459d0656cf2bdb868637f746cec667a680efef569f0e4e01101d9c945df15d42578dd02416f58b309c19f6a86a813d148bff3fda0672ef20f6a756afddf95d2ae4e04967314b99e1d084119b75e107975cc15bee7ec91f872e22807013e39a6f8246ba86aaa88808b818f0768d8047ad57d8bc2a745b5f924af1a29b8c4a857ea413ac08df86c623b74aebeffdc98dd52197e91493b43fd0c1972578a388aed6bef9a6646c80e4b1528c9c6e63374a9d3ea15b13396e30d126a591adf6489716574b323fde0164301e706a583a53fe63f3679accf1e3c2f1ee8f6f91f0e4beabf19ac7e18092b53e7f78de540f9a19c8046d10a849bf76d18dd727cb2ff78606126ad00000bf581afa1870d84f944d47d624651b9d4bbcfe88ff42b01ffb9db33e3e02f1dae1ed7412d1ca6b66bcd961ed2000bd892315c7747a58f72d6b6641c976b96d7ba4b5d85e373374018e7e84bdd26bf489d011cab4cac2f6e4b1602078c76ba97f6261a640bb54889c838d4eccce0f671bdd2176de832935e2781bed9082a25c32b5716c4ec0962f9426861e9e75837bbba4c56a6615f44a832a19f7b54ae5ec52186598fcf980cf85020972a76b30a8e5b18e03c005ac9b6341badd5b82bed03a05aecabfc8aceeeb8087f98c11cf75269debd190d4caaeef59af0cf7bc95be7707bd602bb06304343c7201910b9876fad45f623d05c70ba3cc47152e7af2ed758921f7a5434bb5fb9068396aab2414decf6924490b3a281d34137444206f13d2247d0fd0e3df6abe26caef8d830ae54f19999639778c8aa80ba4a8fd5f529809441ef723349698d86a2ab25e25b54ed83d514672bd46b9f0cd7b319e8a56008772987c0097f9d6e6c4f8207105abd7e69520a3a95ef12c73f3f79ccc33e1d3d92a69dd1d90819b75d1c3985a95671716cb983c31df0458ae09ba48eade7e987af613b8cea0c65ce21b0da86f776f62c54b287ea0a008c50b9923d49f0c84b4e940168d986b20a1d80b56cf440e3d619e9e41f97a646708190cd4ae4d20acbfa0a2f2da0f3228f0a42d0f8b6cdc4999ef2f852b237eb78852ef3d6479cd5f1f3d99391c97a857cff2eab85b4e642c5253995292306162dc55bade65a955046a1c9d49c3d63035a630dee1bd6d385e4158464aad25bf015a7dea3840507a4516da29b56e2f6c3b09ea741c204dbb47dd69c0ddfa87ea1ba94817cb73038f89abd2b8fc8a17bee0618c44a832647f719d04937d08bb650a4f50ae188c37175aafa2d59f96339abe5382cb465245f783f6b528a84644c2559304279fda6fa43088d71a0f10e7923d368a62571e66b5c770f81b0031c884963aff1ed21c11b893cdcbc0db98b837d5a10fc45ae54b3ce4a249c4e5599b2e44ad8dfe4f9fc1c70cf51d94858c39fe20296f4be24577ff43e126c0f83c5121d9415d3078f40441f48538ef8d69d157a52635735dbd516f6dd41b9989387f01dcbcd97feea73ddbe2f49a5c53c002c6cd2dfec55dcb7c1fdaf194b9490c6930c7667f170127f2d770d9de45991d62de10a727dc32ee6c8313b03e9a97f6c44111e4daa05104a7d7069b61459dd0660008385d02ad94973b909655d7f6a604b544ae68a66ebbe14d1cbfcfd7028780df2c47eaf30e6c709bda1a86dbf588af0fe829a583babc23cc3bbd766447b147cde55c7e07d5c4ad4678c35e21152d27b374fd1de2b593d3b6ec2af187dddc2f5edbfc62bba43b91add5173831c5f20332637f3e2dffb195af967ecdcc4576abf4789e55a8fa3fb244778c91a89875c61f4c4682dff9c3de18c33f678c1f0f423133b8b33a385fa3ace89a16dffd26e4dc87e99873241911851ad36b41bb048697a5e1f809ff09da49a0d624627493e3fcbececb720f4fd466d5d125a7a9f4ed9a3790b072aedcca9d28c736ba9f3b57f2596ca8772bc69b50bcbf33088c6efbab614b691ed836f929e8c3ea42cd9b954fd049cbdd0a2bdab51804200ea2c1156ddb788e590ba6fa727972abb580133087bbfc822e1ace171670365904bd99df33eebe9cdba9ab23095349f76d7750ce1c94eb87e4ee4bd4f76dcc6a851d67cda0137410f132c217510ec059f4e3d2a280c39d299be523a8ca694cb12a42a94534f24f8744477a4bebf45c5fc685f77246f09803adafd3e721eb2de95edddcfa5503976c4f5832452cac94556cbe5da1f1745292b4aedb24707be66f8d4f8141a2bfe24c7cd59877a5a00ee741fd63a5f2f753432b52a7f548840cb0400824af809fb68447500b77e977128200d3b812ddd210b18c4bd8be1cac174811a835b8811b9ab0595809aa6a8a45c203c1b96d149d215a41eadc036f5c9cb37c9042e126cbf56d0d4e21a39b521f03d567e61939d0fbaa06b02059a30de37edb60babde4195cf6eda2d1e81e8714e3f006dcabbfe6162d255c44157a38a206d89a3ba33b9c480a750698dc4671bdceee4eeb990964f750482fc5eb37754ee7de9d1435bfcd3cf42de9f514b5aa70412aa0c165b8d615bfc9ab243f7d4c40ae67e9f2e9c314a26092bd6515eea9d2d72faccc9640b1f7d8346ecd86ae163da6ff114633f80b2ecc2e01675453e86bed77a38baf3371241602eb40556c7b8c7e2ea38cb8b12918936a467a54780ea2109d557d25039c1105df911b201ad4c3a0610144cca0f72652d20d2c9add54fbdd0b131f7c33ab453404f0cc7b4bca599a20cafcf429fdae86ffc5ec9c0673ffaf4b7cf1293627470d2daab2cb71c4d4d7f85123d3de8537ac3df148dc55e41403c8e380c09d888d1db3ff8ca52f4ccbf6524437c01156483f271fafe07e2def771de74cb6dc578dc2329fb87cd6ca8561b914c76d64c966bc55b1b02cd199c875b518c390750cdfb713ebb4c6fae6b796b73341106b56f9a01457c825e2e0659c28d873d1ea20e958e26400282df9c921b730437d87a797871d627670347a1d36e3a6dbefbe2c311438a928f4c2ac408f438c3cf93c03c6edcb72397048df75e270147a6e73975d95612badd16b56a43be6b79c180b23fe2099078fca9278f63b48a1cdc28cfab548f65bfd227a816ab41b32ff5e7750a3dc1082f7d3a3df148de7cf44806cbedeab82ca958c92c51a844b9ec52103425e8ccc74e01fef9a6776d7fd7d2cb55c303970e80564269a1a29124b8c242151949f276e0723e813556293dce62bd97b607f6b44db3db869101ee9d9b2dc6406ccafbbdeab742fd264fd95be0e026b64d5e9bc51859dcaba62d24cc9e79e5dea9d2ae4376b8529602c8478416344cdd11714eeae72f8d026a8efb58c88fe41755c8d4b18b5db6734f2b395e7646783288a6d9cbc41d35b0648c3aea22570e12fa1635ae328eb5be98df78910bfef1dd3c66030fb60b1ee01c90ab29b2b9aaf81f2399e37233989c624cccc6da450107b51a935fc6e18eb81b0014be829efff04d57c8f75334a83737dafca5ed01eed879285262fa87ce60e8463e509aec56230b1a8993dd792ab79ef1d2d54b1c017712fa08c15ce626010bc8f188008df7b9e1d4a65f19ea694420f914fffc7c820d08f67c23f4e4ddc30df0f40ebe672ad957ede5020e70ac04445a8bca090bb9c1e1867831c86a3dcd75251189dc6437abf6cd0f25c4f13a22927cffdf79afedbc2711c293e3618c48cbce0ea1606b655845ddec6f44565cc492c838e55452682561ff23f04aaf135b9855b4ff5463fe08cd83438995885a13cda4fd85a2db702518b763f0073e1a2f6221cb4bbf3648e21428dd1abf6e7c36ca7917676c324ee4d3a34a3c20f4e9ebb49a1b2caacb8c0fa43583cbcbef0a5511b04f32ba3f4a891a2aa07ca0bbc7b813286b4b1c0a11b70510fb44c0f54b9a2baf6b8e92eaab3d75b42c578c7afebe093385501ddb2100bd230d2ca667882b9fe03325fe1bbb276da9b776ee19d4241d232fe2b526021556d5832c862c0930f5aa719c05bac07089720981cd7f9213d86032a9edd3fd1c588d24eb672e16d2b674eb9eafaf033f5275ea1f32967fb2c052564fccca5a3e49b5b7125154f73869a86ad105e2ccbd4f1b22f82445e52a5f6262795bf461a2b3b405484c86f38c96adb6dd0e3b631108cc78b5ab740aa23df620d1a1375a711df2d63661ac53f3c5eb976bd3a30f6505f1b6fecf0b3743e07856ffa67c8cd210d7f18397af60977fcad5235a0019decff0a27a99f3b435d24ecdab72ac40ee13cb20d8f7755fa04bb237acad3cc9a6ed3305d21012c99f9be24d7c0eadbeecae3629dd87e79b36b20b87afd43d67e5e720a6ae3d51bea9c19a9e1a81694ef56980d53951ed5b7f3b3d8bd3d5ed3bc246214fb42698da7dcee0872ed3c63831cd11ec955d70e6a66eb00cc1ba328d66909dc68fd5d067404a1bd1600caec3c761513698b15685d1d3ccd1208bf6a4f950fcd4e552dfab1dbbb24457350838e0ada97beb57898029f3faa4994e20c9a20ba5415fa3afef3aab0fa8bc56bcdfa33a7f823557ef1fd555a04bd40d9844894b02d5a4d2277abfa199c53675b100398f3c141fb772aafd81288f78cf465dd7977a585de72e96d526b8636e9cd1e3c93549f95181f968cb00f8382d9d125cb478759131e8 +MD = 07f11a1f88fd1f56c19088891173510fbd216e85a10b0870cac4d1f5312751852dd7b6ed6b355c1fbab67b8b0095295ee126a1aa1adaed196f2f237bfecf7c12 + +Len = 27440 +Msg = 513dc380cc13a9d7eb852c02898bb4dde10cdca60851180ebbba9b8f5baf78ff36da076608938a0dc29c10d7890f9ad402947d14cdd707b94f3a6550b5c7c4623568b745975ad938f5dfb3b0bf33e0ec01c26ecfe99888ef841952eac8f215f9d74f9cc7824fde830cb4dd3331e0cd4c67fd7980647be3d8e0bf2a029c19b1eca3f77e92d059e0149085550be9fcaa1dbcac64cf47675f9bed94b5433a25e16422c9254e8962291309b9e4deef70bf868639f863994645613301bb52a9fced89da2b58a4b651ffa9fdb85255492554b04f0bfde562ffdd51396c03daf1881d825586e13b5e0eabfef6ea67170102b1c39e8a3bfcaa7a6f94873e56811bafb9781b4386bd898074397bb7eacd1fee1ee6fc1e7a517a9f4351a5e07cef2e5b0892b2c810cf3f91a4821587a51ea9d3e241f02f818cd956a1b11cb83dcd327353f9a47f461b892882034ac25eb3a99846fd02251954d087d0dc723061c330dfe2d479cef2496e2d55e1a5d0de3326259242ba680a51661a19f932afaf782e87fd4cb71fda01f7896647ab19ed4729620e37a1601c2ca3f7c430e19cf0953753ec89e8d9c7ea2b22fd5be6065297b93701053e76168d8f0619ab0961ecc1502bf6b2936482ac12e16145ddfdd7cade8cb5d31910c21b33305f8f31656ba583f765ef4128d0f0b4aedc2e18674288a04970cabb98e67f965be007e21035e9d79f7f6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e238a3ca1134550b8d48c3fb4c9d4b13329c7c35ed491d9b1ed2710eb967ba58ae4dfcfbc92e0323d6b4a7da0a564f7b9e71b469bd9ae800a03396ccf83c8bf98c6c750b2380ebd0a4d4ae927c302f9040e451b093176f6e4b5ca118cf863b3dc3be9763e8d215f83dd05f8b6bd4f23c5f1eda713967bccb65751a5907eed30b9d6ae969e0cb8784ead1432d9ee9a0664546d7167533d70137a88af6681b5a4a6098f486d2144b5df3ffe0e1df1842f63885d0061023c6f6091b7859bab6d8e455723e2287556969a081c10df409ded381034ea9d2de939423f66ce9c56656c0c41d51a6c835e79239806b1ba6637fe768e7d867820d46c1cc62ee0e51d4dac6f5c4b5785b5ccfbf05236871bdce2a19345af7a8ea57e5674d87873025a76fde2f8df002087329d84d933e7901f4e9512f8332d4d0657a6dee8cbeb70a881af0bca08cab9922fbc459f778993a7ac3779f8b1153fdde0cbbf7991c0cc81fe5e4e22611dad4104f6d71789b3b2f0bc174cd991c8d396ba439b0d828952713d7a2ea4705f983e62cbadd3e31c6a94de92e01d6dceb4bb449cf616f6abbef0df8131c2af26f6c4b9b93e470c2a270e8458e8369d8d3fd60036551866ae6e7b4511dbff85fa458e8a2e0d036d4364c85dd7c9a7b98ae1518dae3c946b17fd8b1e9a91dd8d5000e654c89e7b9f1ec05ccb7e18f34a5e55c83d73111d6c6ec8aabc9a07cf3dbeb58699e777221a02b6264dda3aabb86de9a4a0137715f3197c54bf7e82571f9cdfc9ca290b8966a5c2cf657ac3339c303971461de31097be651397d6b6079b70ec3a75fbd033fd5e52b292be272d5e5bb1a8afd0c98fb2b43f51c630f74339e167532dde799446b2f27a6632fafb8736ded54dfaaef5ec9157a9cafbeabc8354ddae425f4c3ceb4a2e814077a3109f583d6190fa17e59ddc4a9626b5f4b60041cb9663ecec90537a6351c1dab41f1f4649e8193d78d15f0b848169eda9d2294e9dc5f305bf3107ca4d866afa92798f7780d36753664ba89581f605117e9376c1d0978048589170b029799c45e2b258627eaddbda54b6f310ef8e68bfd77c715210959c132d2446d2a3b5d65b195c129d9ff21710b895c6f42995354768ef9155ca4a96f4c17bd29828c5c998aac9369f612a79b5267aacb5acb4db46a77f5f635a11117baa0aac774513b68d1b9c4cde6ec1a42612d81cdbf567cb4bf7be43f16ca38bf64b534cf6754a5da6e047bde1155206f202308fed9028a5b5ee0ee7966e5c772329e83cac35b40f84ad5e122e0146129779068e510971cb22fee3a2b8cbb65350ca2be40ef2fb4c94b741e23b9f387784ebec80bcddcddbf1aeff1ddf214bb12da0b0db75598aa555a28596905b837648df351f6769a728c08293a18ffb87010841f99b95c5dcaa5603bba7a2d2c1bf61c782b3075998621dfe53e621b6e2d37f2278acd6c48bbc043f36ae09717db35e3957d4130a1bf84896b2446aeff9a900d6a087ced1f26aeed999123ad411f2acb916faf117ac5bfec03154920345e22bb323a4c47abb278447456c9d6718edbbab62b047eeb41daf2f539f5dad322f6e5c548c7e3b4082532cee25c7971d052994ad6c7e1bedbdb8288b7d142a48d12746c5b752702cfbd9eed5d6400078e9751969b81a1b93acc8306b865c17148804e6f9bdd7c5cb0496f1aee67d2fc70b0c8e2a0b926a507b4dfb5633ac000fa485d162f874b8b53d08f9dbdef57171da7e8760df7d849e99c7ddee1d7a51a4c7087a93ffbfa585f5ae5bef383f7223e8498990bc41f6f898b45c859c4d987e602b66ff5c2f3887df059c5b8ac1ae37a4dbf94c2a663dd8e891fbdf48ac50f6f05d1b177639ce65498d3f933f028247a0c47af59270c5ca19ff303dab0d07a9082c0b7ed665f398d5c3ba48dda89abe5c81732f8cf82b46ad3a9e332be618ff0806bc98054a348cf44790cedefa540648a1765c9252dad902f29a5243de2173807ba2f57b3cfdcc35776797cb9e5ad9f592f90f1b1760fbcbb5b91dab4badb0f2095309c0e4dbd109d183562bfafb93d3d47fa9bfbc3a1957e28ef79ab51a01ed1e41674ea84b35f1e4887c6896c2be73e47eced8c7d2cc48076062caa0f310c248f2709d1dc8658e3efb6d0a085cc446517ae0feb0d78f0c92f1f193a5c5582217eac834abdfda2f3f30baa8b6064fdb9a0882aa0d94dc262398268e2a0d328cf99ec0ade8fe2e6563ece79d267bbb942c8c266344b73e2527e77422b4374a536c931c413bafbcb15b64768fe0198210978a3ea2ecab1f7a1e446cf9cad00a25ef4c1dc74a611fa3745bd9c9695c4dc159974df16bdd1a957553636bd463fc65003e57886bceb1ac4d27a40228d08936f117e6c758e99a27db890a01677f8ba13dfe5c1d36253d4c544c47a2a502aee1dca06bad1a4d2871bf49d3430a6f525af6e09dee2010fd04185e4723746f29429aa57f1b567440337f3a21b923dfcb02d9a99f73b02e8b5407c2252d0d72a2e9a9bb838a63fb6bcdb9cea7cc4a2d603944adc3667cba62cca11c53f7e6b9863798470b72e94f15a0ed7bc804f3f4bc5ec661bc1edc611dce82c1763c86a06dccd4cc897d4cebe86d98c5f4eba7a229e3dd59ec0555af06ea1b55ee6363c3a419edd08002055e3e842a31c108dbd25389081ad5c28ee0d89fe94e3f05049fc39f51e78199b92282754053beb516f1a38ec5190bcecec2ed605b2eea79ffa166cd9f75f0bcceb57eb149804098df7ca495a2d8e0a2cbb1cfcc0f5c636aab54e83525007fd3cc936de8c45be92c9bffd11e1fdf16b6dc39fa43746b5c3f9e36e266811b61871958fa6c3f5b3ae8d2e7a3889a9ff09396c7e76718e017715ed3cfc2423b584f5b528ebc18e298362ac0b675a1a010c171e831976b3f379853981ae8d6c4c685093c9568ff9693ccfa176465d363e9c904174364e9fd3f2d13104e3abd5c2ec08953c8e341fbbff5d75847c99e600df2b3d1a740238e909823c8f448746613aa725483cb8e766f49291fdb216138d00707a3d7c98687ce71fc1e87928a86f77b5aab4082438b445f95ba98fdda32f25e761a5f51b15d6b3302ad82997e135ceb88c49997ffceb17173c50bcf5802b771958198890293d963ede27fcdadbfb653a32cf98d11a5495769db9e06690cc1d8dc863dd018bfab8d0459d9cfb7c0964c2060eac227a37e49de4ada439bd593fcb1a499b752355406ec702ae01aea6f4d96fcd7e7b04dc2f147bf4b075ed19075cb4946bf5d99556a0cc1dddf5581b3d05d5d6b6e3a08a9c64c856ab220a559bc7000cf488950424efbcb7cede62b166d1a0effb63368b5314359b3d49fb5623946478df363fe8cfe2ff982cc4b3ad97c239e1f502ae257dac288a0ff1a861c84c4aa1d307bf8a8202fd889db0355afa6206734dc8f0a142b40becc922f9c1b17619507904fd3263d51f4fc9a8cfffb438706fabbde447c9b5458913e4d6bc089a394b7934e2289ae5cbb45ab769e3f0cce09bb6ea735e3b373e299340279cf240125a7aa054b350ba6a81f5e2ec4fd4a7bcc117568330bfc05e94f43dd4a799f10c47244e3c1cadda657c44333e8b88506da77609fd037eda0d91dce4c52625348fd9204883acd8cf226eefb148df354f5c16790cca20a00cb3eaf43ce360be9203d716960fa8fa210b1e9e64f293032df0d5cb66d0cf4cdeb865e34d149f8a92d00aad3eca5b3a568756f85525ee197190ae121ff957aad984cb511f4129b4bc5e3a8e4a9b0cc1f8fddca58bc739a0a3a667f7402c02e3847fe3e8bb53486298152e61c16902b68fd7794e0ec1bdbf4c99c921d051161f6812774d283041bdaf5eb0cdac1e8642a17cf59be7fcbf9ff3d19c39d74fdc850ba34d2b6ec25fec889f867a12a1e08db85418331d5f8a6720b6a8e65e109c3ef79c2f2896efe917ab417911fbda58be5bc7aabfb8d165405bb0b4d16b7b9e71b463e3eca6a12668a1ad513a70b136fe133d72e6c13c97522d278aa109782947c8623120a9bf5f05f14ad69c770ec174661e39513f8769c41d83f0ff3def86e8bdffe36ca431dd16237fd0e01bd9 +MD = 94a68ec55b181ca4acc6c24da70d183cae1ad100a58ad285ba0e62e4ca25e0fccff484fed61f8aac202da11e4c576235e524a04abea578e15a7fa4015eac79d0 + +Len = 28024 +Msg = c732999e50ab34faf9b932c778ca9a069a0541448783326f49bc53e8883f46d997a78ec9b5caf36e8c3327c2fed3a95921f3eaf1886daf4bc51cb6392b919cf9d907fec1f499df9b33b34973a1c7376e9e41b37e27bc3c3458766ad52f01d5af933c32ad9582bf2af521e203e80e0cf018d7e414edd8a2d20bb2b8e31cf9b8a5cf2d72b620ec5cc2db6538995b10f085989dc5da612aa8cee5b8e88b78e00e8394c206041e3f7f0ceb68935e8335abd5257b9df90b1818d0ee7042f7cd1e9ff0ebe335be17e2eeaf2f103d7ae7e60489c759b698730bb97f2fc30e4ca21b3395da78480d913f7254af467d141089c549861f56e0226c5284af9793b5803e921a6c69871816bdd2a372f39a548488b4bc6bb5c6f99fa1ac8677d61a58eef18326a69e3a082dc4d84380fddd63cd499a8b7d034e0a72148f2e8d66eb5d749cd0619200a9045fbc4adde14e8e6973363e5ec5f1353b242bc224fb314eed9aa53f7537751c35320df1189eccf58dfcb56adb4968c5b63c500f0fc91d8b30e97599079de6dac23020959dbd6159f8f230e4ad134e44a042ea3c98fd14e94de874a5c2cd3c2cd4e15bfe1349f404d2dc0e757a2b8dfb24be611266a1fdb16c200a2d4bce5d5a93cc27f323476c3c4243b7e5eb970b3267391c5922bcbf2cb717a0f74da833ac2679ed3d75c1b34a70ae93fca761b231943b85d97357449f54579ccd6e64a569b67013a4b0beb07685a50a825791683fd14a0359027973556b68687556099adb6a3a03f07d474b07a9b0843ea22d17a546f0fea3762a349525d06ab7ae9ffc486b5e23e983636c47035869f9313fa6ac1db4de7d78726fa6a9190c5d1e2fb2f9e064dd576b1afb7cbc24217babcefd997b1e0cb0b05a0cd120cab52d4dbfa436f2d59801dc74e0effb9d148cb9e304b78ab7ee04c5e9f45eb26cccf1e45aba47c937bbb07f7a03e8e949aaf40385a34d7206ed4060280d958686bb6f8a05dc738c15b02cfc334daeaeb24c7a30bcc2a25b94722e281d40bdc5a0e970e8caf20364f4de3dfaa8a48b716060e8e89049ff6ce7e394c6d276209643bebba6b0e43f785eadab21dff2c55ada5004d50a20accd89a93be14f950422f5a21a6bbf9a6ff1da853d1ae21da593a882979d312ff1a7022deb229a86b29141fd53df00fcdbf6f1cebc8db90e7341526068e80e5f1622d8d66b30bd32720aac372fab7af3cbb029f0f1216aae778f6050415fa7966265950b85b5c0808cb5c0b87677366586460d53a17fffe4f9a35bbce8a906bd1e99c036ff56a95747bb04e9f0ea3a3c55e12260974f7f9740a5cb0b266f33bd93e5e2bea2bd82a1ec44003064ad905e80a9f27d9a38f3b195be36a5c359347c0672820b36925345c3773df69c6840b54fc5041371e26219401526f2870e13e4c2672885837c222b147d42a45ec25027095ee08be5f6d4b789d4225a3a37d8dc0eed5d945024f93b277e97a07363ca9ef89b0f4bbe1c5273b720b345a37b894b312ca7a06732df5d43a1c554a3f4b50162a518bdc4fbe23514245f1b8b83301b744b91118e4ddd79b20e5326b51d1a3890a38348be3c8fe5e605b144baf7d4331f73a04f8e1df977baeec9807385002acabed95376865e6b76ee2e28f87e7e7b7acb5ec22f4b3d3fa469b0c9a3d56fc1581ea048b28259af0c05602f0dc035dbcc7c52d2387fb1b9b8a68f690eb470e481ea638e3bd8879af072cec2c066013b5fad04e873605cce3dceeec87ccb097b8e4ba78dd92ff012695e0047da18ea837987fd6aa69746647d08554eb5c2446fc768f6ad532f9d00c0f17f28247df99b6332c4c29acc7764be7d4d63804029a6746ad7567381954d3e52d2cb633e356b65d5e15617a6f8b749545d6fa6edbf09dd78d3f0ffcde0df28aa819a6202a7dcc698dd90e5cdd04366b60edaf0720e804abb71e3c0ba87a0c92015fbe87255d4d0a43fd7cbea07f25ccbe70c23771ef4025a39977ef1917768dd1558bc36493cc9218f9292a5a6ab75ba706d0aa3f84b4e7eb375011a064b4c080918a7f58bfdfa37562b02a5b355f7ac31666c9fa36f764f68e310dcef06beca79a3715721fdab0c1a09e39339da2bc8b35d10122746c2f4df4a75df538f064bee61e206152624cb6694fd163d2159377dbbbfa58dba7996a013f6cc3ace6cb2f0bac1a76f5fac9abf3418d7c912c92017e94100dcb2e55c34a45c4bacab38280516d8e5358f8ca1af51fb7de495c2ac0a4d5eca1c154c6f22676e03b20eb1d4b7dded6571a00d0abd536fb197928e03dd51deac55cdf7f6f2c2f69d53df20df8d77c9d22a7975fa72a23c1be9f1734c185c884d90c12e1a2d1fbac09806cd700f4c34d269020c9b54a62a62e29abab044d52556d5d939035ae58415876b00b0c6c4f60d35231c15edc8002f8a76aa56e8267d6e2afd5fd8017c1a442bf701c63948d62d96c4eb90c56e8829ea6b8d668cb6583e9915e9c2aa4c44f4899017dbf13e9dd794cdc233620288f90962a90ab8ed7e6d29091fe8debdcccdab1f8c17741013b53826e9264eeac946ef444868f533b7a4e2c1497324377979988da6a14c24006f89b8a892119013b9a5f7b0a8caf0ca8bcd26af8a0522129d58c0aea200e42cad8f69479f315a2efa326529f3c08c80c9f11e995608e660e4f4a2eb4119b75f1653220d7438b2e1b09e74fd715e6fa10757924efeb5eb2bf3731aa7a71e046052dccc443aaefff583f20e72492c02f5ec056b17ab94993a75dd0f28fb9735f80a334d321819a8331d351ad2a4b2ab4321058f3c852e5957103a6bb8660db1efe65e8f1f37031760236f8063a979d3554d5fe805b30a91486c93159d1007e00d8d677855bef3b34740a8286e8108e3f119195db95eb0abd632eff51f200d2a19a855f21bd672e4af1ae9fa3a53e741e02d3dd5a2ada90dc90a57f388bfa7f7ddde31e4b8a707125f5939de11489f57e930d23a06c97c21e99bd2f71e145eaf1fd8023575583aa520a6a1bc3988b78cd6cbe1732ed9b14dfe8e68e92b48b9baa83dd0cf9a129305baa9287cfb3ab7476ea571686206d1fbcf8a21b1f582418040b6a4996ffc9b9bf509d6069f8627f278678a01ea78639225380637c5eb7c6aaeeb857b3b3fd9cd996eb3426d9590f4bdb834260d56ef7ac8401e64e2abf4debc837b5d4802d5046d82c818ad8f7ab5054178bf14c8fd1a8049721e96e9314530278e27dc6e18a93aea1c71a69c6b9d17a95db447f816dc15fb084e27cdb908d37ec7c140ab2922c851b733a1e2ed14bd99ecedee0bc1274e00eaddde80168d6d312d14bce090d9df5da248e68c8782bdb92c52512c8764f4fd20b1032ad03ec6e7c8069735d63447b6e496bdc0c24fe0b025ccb881eff9cf9db0b4def26d82a549a1801bd3829dc70585076ea624e3ee27df416a32814fa785a4ccb60177c0d4febf6b8ee21c7b29f28e82406837a6afc5639bb068c5ce446003e3d57f766219af2bad39892d36332406ee7d2b8301eb33b8c0d24b44de6ed4d6e08193f0cf3d04eb3064f13c36ae44f5356b1a8f5a6918e69a180285e8ec8924ab03656f6f08a409da5742d1e261f9643e525ae31af21df60fc9b610528729f52ca31e7aaa41388c9559a374a416ec59f17c1607aa4eeaef092f8e6e860759524ba8e69ae8b2677d48b33caee393c5df36307484704526d96f90b326ea34c341f05ce4559121dae3dbae360608a12bfbf5b59ce0d69e79bc29354cc0e8d50fcd030541360d5739c63590b9057908c6b71654b7a643238da11e6682c5e7b4e5fb6cec24c2c41c2b2f40a1ec319f903f1a8155ed5b1f9a078f386b7dbc4f97ebd51359b6831f375824e32bf815e2013e2c1f006589d1cc928f5e8b642d8747cc62e0931f00847269b006740536ab226af6d69c48b7c381d4a8780f5fa0f98c2eaabce486c15c9306d891c53a1e60bc6c7f8f73bd6e5c8175e26f3f989e0c2dbab68d92134f1063d6a66d66bf546b97ebd033cbed3504931e45296334ae28f4178d3de6f03106aa8221809fbd60327b90efa8ed0094238177da8fc35e59b5a7ed37b22842efa830b151b3b85ccb1f3003e6d8211d13211127a889a73c261b0fe6bdd6a034125dbc0c3feff8c31b987debbda9af6c3b670cd7b70056f69dc3f4a8268f96eb218c183bf21aa91bdb072cf17a05de16935b392e10da19b546131edb7ac75192a49f0ae5721d118b90d303bc27d3f743a46662d5ba0138a1aa745428c2651a4f23fd5bb2c8e1783cc464cbf5cbfb421af4f14d73bd5bfbe1504f60370551394a270ed34cfb4d2855fe224b436f6407c40d62c3b122d2a99ec00a08af4b73f6ad373a3958134868ffc7754d4f1af88e6977228c37f04d8cff830f15389cb3989ddce9578119bc7f62a6c597c0d49e1e2fb89a70ac2fb3ea2d20c44e7c01f969449d83f36c1490b6a5237af33fa53e01415a3137b8e8ee0c4f1f937d20812dafca0270d6c40cac55f1c6fc277496c17dc5e54ea80422e53a8e09e368cf2537b3579318c82f0af8a46d18b3fb06ae0ddbe4df5b8d38e580bc12651bd82ff4ffbd11d9e49055145cea42a008399ef60b63c5d2bfacfc39a7d902bba595e8f66d15235b3af8e035c07197e661a7e374a35c9145e2cdf62742da8694e867a3336a02b3a183c675720c7f9573270f7e32be106fc12cbad1b63907c8764c1608b4dccdea3428c3bed5285d63cec337163842c588cd053a33ef74a8edec3969be80adbfef9b8fb76365fc532b7f9be7548c19c403f1d514c5d8dc05207b172a6e9fc31eeb5e226a0c2a70a8120f19e9e038295509b504112e7c576687ad4e1fbf1a0832050648a3602d6da64205a40461445cbfc2a2faf916e0ce124a0946115af86245661a682c0775d993e3e9a3ff7fb6984c553f1f94270e2a52921768c7e641bb9d3522eccb +MD = aa65baf5cad35dc9b91d63bd2a3acef6495b3d5d575b81ae6e83194e16af6823396ea1469790bab4f82e63e79c0793f63c90425eb541683c01349434a356e2a8 + +Len = 28608 +Msg = 3eee85fa5e97af4d30ff1d537378280cf726b6dc5cb416e11c452b84ccaecd4e9ee26cfe2badf6d86fa6fb3f155f1086f5de7104dc51ea668bfdf74902782a09fe18cdd3c0abc9021068c6a88226946af8ccc9926809ac5fdf45529fc6d707806578f0a4a5f7ee731a2fc4b540377d6005d808ae88442673210486aea1332d5edbea1c9763fb2dd495e23f8fd9f8920f26ea7482c56a1e4b5824d99d1af4654968569ad4811e50cd8a697d5dd5d39d2062ea5733a6e35d8f8c8c9495ba8275e915a4b38487c71d0500acc748ba2f643ac2c0f7ecb417abe6c524febd074525e8e9bcaccffd605e25ff9264781273b1064c559dd3756fcff80cd4613e8ba63febed86d0dc6c50d9d48f059e1464094a2c0a8f90107351936e6884033fce0b899d27eb66d45cff57bbb9edbb453958f75304571acc3626bdf0e21c2ee957ddcda3a1d1b5de53d59f828430043218c882234196812f4457162581842864ae85d1a863220623db3a7bd0f9b7c10489c1b146c9320e60274a66b64da539d75b695e5273c4a1cb7b96b14d1e6a3ae214ab4e61a41509886769754a4e65ab6ae6f33b49dba1cefdbc510aa2fd31b6f542ee1f1fdb25bace8a1b0a8a8dadc447d88a3236a39fd5e124d34e779ef57f649af2ed25744c685b1ac7ef1e1166ce93b99509c1d1a8fda03d844573079cdb58a5207f1e7a705d569fd7eaade2760f790f7e89916fa390628fcdb63f421013f9e9de9fb0f27bdfe89fb2c4df09c7d01f64ac7a4f8477d44ea0146b8357376e6ef0951383e6543739a4c0455e8d3f58ad3f87a4a2190e128dfbc22ae64cfb36e042aea4405de3ad70356934cf76c8f14c2977ce33354f91462540bc102b43b176658f1a8f601088b6db155addcd49e124a9e4c2aae0229ba2a7f5e9aafcf62959e3a23d17f6c312321c2c802e99a9715c473646ae226f76c90a48785cc5fee4b0444ed58127e4910d83166c6ae2d2e91c8bd523e7041e6be2d6a333cd90422ba40efaa974fb5b4e6e953be73ab0ab918efe2a21fe8d18c216916de0a664aa455dcb1082997b10917edc04b8460c1cb0d7279b079bc643c38cc50d488e4a1e7c0202f72898aeeca264dfd7a935fd0d90228e919f65b588b66df9ed332e488616bc3c1763189dd5c849261d80af8c667795bc75af0564d0e2e0b674692e69ca5cb200d8fbc14eb44c553a3f065ec00fae5838ad0022db01900e830ab135b2d3960dd6a2b73dcb7276afa2a303e7a1f17d948aa35a652104081ee817d4eb2d870cf446dd60311cf58e80e6b33ff537f22b713bbd84763dc292396d039bf9e1cf0590d9f1be484727dcef8fd6812e8bfb0216d26548fc3a2276879b37cb07d694cb081646992856efa8252473923aa4f548acd7026ca01d0bfb2ff9192fbc15bca4858644b9795034394a2df43bc28ac6465ad3fbb909f0676a5a10128ec1a530d92faf54e6e43ee0d88532c0426e465844494dbaf7dfbb1d0b2f668bafbd8ed9b12d1bdce71027dacdfebc3f6fe5df918aa0cda6eecc841526d785ea5b59d99e76a8524685a7130a60de52d98cd05d5b5f88db27657655370379f5985a3d8d666ec7daf8884e0b58d94d7df65fd6c99d0d2900a52685356bea3e3cfe7410b21be3b33d5cb8af15ac7f72c4feb2a02a3fdaaac388f7a22d99224ee483717b51a41b9303d8dc723cee9b76af594bd588280f34ad39a17543a9f4d0758e182570e95f90b2d6be3f85067580c66ff21eeb42f3ee451eeca58183a8ec758932b71ad2f6d2d4bd24bcfadc55b992a971235c74d00113a09fdbef0f86cc6edb87d854472a80f0f5d794a25983499a6d8f8be2a6ec949f2784be9436d595e7ecdf31283041c38fe69f6d85634657662413ff86c091d0721c61f778dedf72692402699d7584c238f843f0ace3e80b7f37c6264fab05dd13e5ff2da3f0ea897bebb829bbfe3ba673938dc41ec2af8e6c0c70a9454d90e20aec26091e553f02a5a9c8198bb3ae96c81f4391e3e6e408b50dd92f708f7c07e0989d32f0f326066fc6fbe0147d24bbc0042e010439cea0e3a1c861d9590f761c502e5121b4e6bd62aa19275f42e73ce2aa16ba88a2b77f7d2f06e787949354467e9f0eba7fc94e05bdea9572ec3d42b779c3647708e5cd0b215c6882264ecce689b910c13b15e1e06835d357616ff5c6dafca8da55a1b116de8f8cd3f9890385d9440041d213a07c11c488168bc47c97338a2eb870335325ce6afc81f48b24aad608853f2b0bb160225d5db5508600b2ed369d1941e3dcc059b46094fe9e55dee8cd48c52e453c1401c9fa3e9afba8a071c69d05b0f9746fe7345f150108bea8775af1dac3086a2118d006b8506d9de82602d885a5bc42bbe0b3a20be4128990eb782787d29e620ecd392a2c5a22061273b4f3a008756f2bacf9d17e8f04db1eacef92d3434d4d638ace0da1a0630ca6c2a2995fc16d2248b3ce9376e926dfdb2287dbc6fe5e53a9b655581f0977d72d7a9570c8b8e984985efa90fcdcbfba4eb507aa68ec199b67b897b2af7fa88e2f025520e6d634bda51344711750199700ce39a6c2f3c54e25fa5cc457ea3c5a32c4aa52be0195f4f73b76ded02b7a9c77d3e378dbfcab936ce36b3521307c62c0275cae5a225352143f567e2e562bf13d2ecec8bbf01493c2db8eae153ab0cf609332dbc122b7fe8685adfa39b974bfda45c23d6bb54676b24a8bd73af020c89b70f682fbe70920d57742f9f93c9c2ed482877ff2358a63c1982b57983a1376f7276e4a115b91e2877cdf2477c8ed65b54ce43758562782792e36d73701d300fe1e63dc0a65966a26fb4a23ba43ad8d040aa20da60267fc617274fe202ba68f38be9cdfeeec62e03a5e4c9dca9725cd4a2689a8e32090f901cdad755aa2d54b2c6fe3fcc5da3b6d490cad3bb0aa9d4e0e0761b11798eba0e2a8a8e3ed4ca75b629afedb98166a39dd6d35a473665d37d815f2cf4a52c01a8b692ef1e21366e862a5b6236e88366b7de9ac801bb1acb131b804ab8535578f847a074740de5819b5fad37c5018e92bb2e8d979b175d4e49f585eeccf2bf7265641fb8c0f94c717e2ff1d9045aecaa302d285353b991bf7ac5dc93b311ce9078828d268571ff909711e5c04553220f8f80f785cc405ca13e02f0d40b2ee765ba295538521663718eabe5783888c345519077a9751a1285fc236f2a25a8ae44a2df247887451c86cd646d7b3e7a44ee0ef23538eec557f04dadb400a31d87bfbb0a6761c59c8f62cbd20a43c7962b5c101c9cae89c091529b084be1f40c08597b319a8e7d7b3078125b386c747afb321d762a94d6aa534f7cd9b358a8e2b4845beb3a591f6fa4492986745fc57718e28fa57b6675c112296b8866df223ff0d2e5adc34c3be86f5889da4a882b3928ffdf10ebadb7d35272df9af2e0008261c790efc1f25383d628abdd2780263f8fec944f17c54d2f98de4197c405c4486bd4f637b2c5e6b08d2c17e597d236d8d23b37c67c67865469ae49f576aaddf0938d8e0c1241760d08f546ba27f8edb3745e420d75eef3d02985513a7759be296d43b0d36cef71d7bdf6c091346eab5e0ae83b8ab0d626217cd5ffed32ad05414dba17243f4a7acf20b31e21599e0016fa4b9cc4a9b79dd6b8228e6454ef13d6d9331984e5cce151e5aca7d114218c9cc70aee51cd0dbb5e8fedb5664aca9a688451406c1cf155ee61660626d073914df5a898a897431f2758b9ed3980b9d964d3871440215249131851a1a93b1eceb90a97344f94e229df96f99e749327815a4b671db7bf6a2b5e9f1212ce908d855c7a7939ad42757bc5ef3f619dfeae02b75053c52923a37d3f5a09c20d9d3a65a6c9a121482c7775a8b5fdaf1c2fb7de1a86ef931b1a88cf23ddbb47fc9dcfd0267cb173a6bf62b7c68fb6ff85b2df93e2539d1013f0a491aa9e991cf23e98656a082cb95f87c1b2cdd0eddb51048f94ad4aeeb48a426165321145a9b4ec3e85dff0755ac8f20ee71d2e24cb14a13280e9e15709147c499a68da23868b232cc1f6da1de079aab4d542fbde37272572b9169b5876192ae7d1ad5dc52c0b7fddaa5d0998e2f7fe6dfdbdce8ca82eedcaddc1fd75942ecab68b8e10ad12ac5eeb9f612378caba8964d10c1ab2a69286a54f5a6c30dbbbd8203879974dc2f44cb121a19c301037b863efbc74d2bad86c9c8e6e8c1cc556efcf58fe6619c559c5d8c1acf8514c0627d5ba3d418f4d872c0b2b7cb19be9665e1e6d8ae1b3827356cd0fd1ac5ee69c4424c10d152ae725319ba6e39120a080bf9806bdbe8d92a78c085cbe4cab686089eb84aa7448001919a871519f5d933c80b684f5311a7e8cb20548d14dd95a09859475a3c36930f940cc2b3520a529e05e1498c00ddc9e89755e54a9246b33edb3ba2477a700e23c3361251ce999ed12841c92bc89668b24528df0a464d37e8390c711948391ac688e220f674eae4549bf490339582abcf3b5eebd5183a4a261a935bd88ddbdf7e4ad694aa2c454db0c4c247ac4eebbbc6e3c2b0b4f0541381e699098d339c84d672db1575def1016c0d72969edb17bf1fa41bd7aeb6e4bb8005e6234021c5325366b94b6072372710ddce2412244fe063e53007cc523269ace04250f73f9d107f8f38df72d15fe7249b9c9a0f10da461910cae915ac86468bdd7538bc756e47e1552079b4e1b16a31b1a59f9e890218c98cb12491ac287aa765468496ab7efe012138c02c8b74d8bf86b1dcc6770d7ffbc1ad61483b5f2c88e17edc8ec9175e6859495de4b8f259548288f98fc044a238178648433f7584b4b7e5e7aab77f8f9d671bf7e44e71137a0df19d014defaa07f6038089a1b0abb551434ef45dfeb828b1763732373a31b88fb570250656bef1c6eeb2224a59c9131560b874a4de0192a122c5d85995d996709c1c02d3c0077def0d851721b705546d04ce31726593629de648de9ec9349d186e46a09d77ac33d929a26f0d148802c0f63833b1dd96200f8c694aec206954f0f398084ac1d69bec09b032f8b67aa475ff9d +MD = 320b0cd2631fab35bafdaf5ad66b9119f286acb988503a87ca465ddd63355429797055311a86971418cdccc77287194c9ccf6ac26149b8be4225f0092dab3fb8 + +Len = 29192 +Msg = 9a41d8a2073c5decd50c85efa45c9fc6ee4f8edb48b92ab7e490e3185b9da844a977079e79b29577a4549026f488c35b2d97aab04e13d781145694fec02bca7e1aca2117b60a696b76d239c450d0d564516e5516e20204094b4507de75073f00f421703444aaa271536ec7f1409b9f8863bed9358dee7bf7914783e1039bce713f633a1eadfc0830441084d44d52e7706a6e7c34d63f02f2ee43522ff14d417a047ac8fc7966625150a0b696fe5b76c36e66873b465e62a26b22baefc7875fc24a4d62f72e527a7b8006a65edc1f142a788e427463b163b00fca044a0eb0eff219c44f3756271657db2a9c556e06884d8ecef405b8a1ccc4e32477674d2fbab179c7d9e3784dff8c69f4dfa33c799cd3bb0ee616ca976785ed185d6f0c6e88a8733e46231d2cfdc3324db96fcede1665043661d023f9fa9c378ffc89d3d4207e0e11df21cc2cd7a43f1b70e1ad9ebfaa732eab5a4a304eb0c96f9ede2bc94cdc5329ec020db557d697484d2360225f4b0fde0cddc7a52b6aa9a289959bb5d26a486cb5f1682f430242ba985a6fd1beefe02ece8123bf5872e10e05d7ac017bcff7c38114660264cf495b99b16312a33fef07386de5e59f6f799d5ccce4130fb468169a938e9682e6b311984ec24fd8e2434f91ca9581c60a7736d49bce5456c0a24e4697695365ee88c6dc5917ef2381e4f022bfbbfa96eae5c0b76def2c189cad51ce487da2d490d061aefbe75a4dc4dbd03375e0b8d7b7ca254b69d1041cef91097acd55e9987494ca565bbcf71e522fd90b148b23511b2f4cd9b8fb422b62565d914f76917941dce91ca31d305dd4e8f1f4c345a3cbbc1b1da881f5500d9d05345df56a033fa0aea647f8936cd4f10f0234aa95a00f42968002ed48948a47a67824e8b8a6b23814e92184a5144952abf314f20382e356a95d2d247b7869083f102f4fe8e19ab2159af06fdb8e859fc4acdcc317b110a05a9c724d1662748adae4c653821ebeb5b9a1fde1bd43507f6315d4445a955ec7b3251990a1bc71727edc301c0fc4e7ea09e69001d49b719a8e16449e53969474bce06a16a5ed296b34e0b7d1173bddf80c51f1f7a7ffb299509773f88b1d7c4e7cb6ad07aa5d641b03d8a19a20ea6889cbcb67ecbed5d924ae80aa7b8890dcfefb8d298b3674ea2af3ac37a0b43b50424c3a3b08a286afe2b2b9314fd4597d2b414f27c8d39a82410c44c10b5a955ccd9988b672da7bfc7c632a509bf7de277e57e2efe90837f608578887039b6056d2ba9b1d53ee1b8899c9bc4f877789a19e4430c9145db30c26db61d0affd0504f8b55dbbd267cd1ae2ed55753ddec1b535101ffd725b768d44a0b5e6370aea2ee894b4d718ccfb7cffd6de0be2b3ed29e8c499d22a89e84009af6e0fc44a789e4a5f8ab84ca50c74978c4059a17f77c661668591647072ef1e0f72947e44171bc51cc6a7977b68cb521861a7a0c9c6544801ca834a967a602ac8abbd8c80306c01d550ec21d47749da812b3d0719429b449a52ed01856a5cd6e3ffd11686295aa79110cf113ba0b5d4cf8562fff75362fe3b041ab4c5a8abca67581a46df6cad5f59ee988f354ed8eb0b5660b0ec61731eebc85189dc9e15ad5c9dde42125f2dd034d28ec54ce67bc53c887d417fd4944bb386d9a854b26227cbb66632a76ca1a32aa4fad907d1640a6a0202da39148e2d9926fb3ab54e59e2bb8afa3f26fad37f434c24f3ee775c639dac37a5a189296da891ff6785d9c4833403e1911870890d88b2543c8a402a78de6e63c73f9c2cb3e5ad2d564ebb69b53e08654f05388cf500bed2db629598f03430cf6b9bb361a65a63cc30975b101ee282cca173b9a4deb359e5f9ffdc6c73a8dac4b73e388eef0e9c261ce923836627575fb0ec5b9870aa69d7bee77f6fab415488d3af917c36093e8143cb7a8936167066a4f7863254ecd7ee51a4e4693d078663e87628f322543226cdc5c8e936b5b529a51da23832818c73dbbe7522d402599f1e1c63bb5bf6615de15f766c0d0e0eefd9e41773b1726fad83bb9861163bb3839c28ac9b8af7b26ea722eada632964026bd74eab7ac667e67225b7f0abb97e568b226a5c57600ca048958dfbe20c9da8817bada835855e64cf8339953c84a061129204c66938593cec41c79630c1a32a445a9d3189b83b71c35e861971a503ec5a01e4a16987808abaac0175f5505cd0dbfb87101e66e653763d0643f1238d3e8bf771b5fe5569d2db60a15edabfb2e16ee6d10b9d9746520fa821dd650628a1ccfa13cad1abfc5c77e5111a86188ca727a4e5ebae5345b8b7273fad7457bb5b459432a78990216fb5c1b771a363d1682cbc2977f8a3cacb9543c87dc71d2db51f4c3615cf0dc055bd7efd2ad6a66b6da5b60779248ebed5d2832413056068f782aa88dc4b29c154b8a34a0fc9eb41febb1be6b7d91d071c9570bb37d728536995378ec4a4ec0cb5ceb905e624393b6295712dfbc0578ee90790f5b3e57ed653817ab195835e89c0264798788e9941e35d43460b81443b834f6e3b4ed669d9fc6dfc59168f8821bce9d56a8db0113bc7381698afc3ecf734978ff3cf53f244ad8243ef107171baf33eece3ed32ac115750748bb12e58a842047d87ff0320ffaee8d9d94bd0213dab4e136b5fbb6facdbcde487d86b8f37f6c0bf5da68ffbf347c646818f55a1932d40d26aacf364f29bd7eff4eb22998d98f3dddf8c9e8b06c044104da4a8f8a2c13db1489c8492ccde941b3ab3fa7f9070c45f7378d9d921608cc1a751702e54ae6d396df7130122ee2ff3c1f89c482ac55cce8333e7ec2d70c3e0f65f554c903ef7f142854bbadd11cefcf281b0fc42e1e3b2768672cc103814f6a29701593db704612d0ed1c4e3909ac03318dda4c00a8091b4361f82b400a58a13be195d4562bb12975950271eb3bac6ed83cb468b895bf5a50e9815ff109e24b09f48618f87458be92f6eec75c15696898b23ed8da69d65b1d5858ddbaf284de301346b036ec9548958d31acf0498b96df88d9eada86e6a40528df32f276b8b14ab8586895e70f6e19c28b916c2a6b60392b063d3d9f58bba4e594ee3be8e69a966e4b709a162f857c315d23144a815b2213543e77f5b50879191a6debdb96c0bfaf9086b7dc6e25594416b08d2c75fe16cc347d2e3c7410fe3dc030a6c161ea22f6b80973bc43d42d8558f83b32a1bfa3c03757a4d62e7ba0ce26e4e12ca06d6cde227762286908657f8438a31fbd164599dd7c80454c9f1d34cee92f800ac109b0806ee7c316389d9d39105925f09878b3875a452c46f1a02c28cbe67de99b6628224e88ff03fb2268e80dc1f804ccb9a7c55f77dda629f5feb4fbba58c5432eafb8a4da5e9aa6b05d018f7208621984d1381a7cec029e6b3703f6ffa3365eafb193e0304442e1c4041623edd9911566da2019e8d9b4c59c5f864c3b0fb55485d844af4f42a532b9d8a659a9ddfa36dc2d4dbc20296545e5f2cc79f0e0babb2d7e5b506bfc3a001e5532af1aa835f45144e19fd75d6c85f47b46fec5b8cef9233e48823ac369d06df43b72d4aabcd462bbbc3362d8630c346376490e0a5aa4f3728ca3202acd2a255031634c68076d9cfc1df5573cc15f2245eaf75e57f6351ac5a831b0a4cc83e0d3b4ff06629e164c70877418fd0fd54a9d05781b141a2005921bcc60c3f0640d192684771ce9651dc3992e4c9bb73519d35649e8e14efc408267c1b4fac141267b06b2331991e06d6fc392568b5fc51c737dfb3c220d3057f11cb021dbc7b1a973e5f6becb000ed7df873ecb6e522bcf07ccfa8968cd52b8789b163bc96c2c22be44d07eb3bc46c98d64821f9746cfae0ac3c6552817e9ee836372675647171e9493cde7663f3edf13dc0ad7a8a62735f702ed13e2654c66ac16433904b118e9b1634dad44f14d74ed6e476814d8d8f3570aed6a2a4e10cd5d241725575298307f23ee24f29af927849bb6556e874b72953c35bc522add6f010d4cb0c0a41b7f68660df2d164c86373d4d624081a05105c17649f0c93e8d84242727fc31e1922f7aa4b7b740741b525ba356884197c78f64ce866bc11e9a59b5426c6e13927c7c75125335cfaeb9934ac427774fe37f90e1d3fb7e31d563376c2b84aad8dbdda31fb19befeb83c8c0b2b8bf53d40be3cfe38d907141e952e6f1ec55f8a7451d6d2189772cba7ab0a23d880464f798591610052e8b1be4ce2deb8dc9a0a857a4a223a2d036671bd901913be0f4e1114b2b1042bb15e44e3ed60314c7e90599db0acc058c5318eeaba556d93a49b9fe20d78c4c2057c7ad0ca7e08b361de393286cc5b995ccf67c8f55356bf9aca8e840e22c2c4699ea8b9f692bf900826dcef492b5c6d1e9284cebdbd5f80765d656131497e91423756f5fe38b670c60c8d1a84245352af1d6e628fde0884bbc6ad00135768b713c91e2b4dfa9dc42011f24aa451d0d872e2ad3af84fb24adf98cde720c701b472e666b06232c608aac98506463e456cfe64a9ae737d0d215636609ce622e9f7d3f1b92bd79bdfbcca85bdc3c634318ec625ec337e0079c6b431dd87dff5722fbb8d8df41a704b6f03e91509c0fe15cc5ea8fd70945488a97e1dcd4e7ab94a9a9e1c7dbfb75a898deb66235eb2d672942c5045dc4303aa38285c983742e8d3e6f010d0d51ad52aa7f58f51191867c884b3de7ddcf6785ef12770c6f8d4fe9e83561d5fdac15a9f3b96b736ff6e2c980c8985ddf94b2d27630fece2098d751b0e34a45347577567b753903d48209f519a11f90ec7adbc941c564371dff8f6c9c610285391299004a9c08ceca9dc2a95bbf1aa88be9a81157b7ef6eee283ce3b797d1be94ed4350691421fcd8afd68d4f08d1cc4549e353c0f0e89c1b7da95d066d0118ce6c3feddfc7ccb487200e48fc658b25a1035236855697e82c649d8393ccd9ba6ef95481b49b511e5d5830836bbe92db277dbe63add3437baa47dffd659aa0cdfcfb49b1f07af763e4bf04e5a2fc2c155f20ee81404e357c1d8d387284c19f7801dae7279c4b07aba4bd5417ab05a2fbd254ac3947aeb6140b9e708af9271ee404fdf68bc0f6c91d24bbe6c08ec33cb70782be33c8dd0c6bfee24feecbb664388dce3e84626285e2ec1f838951 +MD = f5481a05f1d06dc3212d8780e5f75734ecc1c3fd7149b5a5302fd700d2fdd120e86f27331a711c397843c8cd389c2eb42bb45d5bfc0b4ab1a36d6b9b73e1d772 + +Len = 29776 +Msg = c978f3dd3f2cd9614e6b140a8c48fc1846aa685f1496daa5b1b1f64c0a00393195f3e7d3e4a245b87a56090cdd4b0f8cedb44da2730009d1fd5c4954ea798c02c18fb775c7a2526bd004f46c551bfcaec764823523b88e3ec7ce87de8402eee7f4544c0b0db46844f77dbe731b3f2d477dc1f0604b46cfb4b61096320023c7a6d64b8cdde160ef0998c94d66583f081eb6d37d6b143336fb7229609887647f08107b6032692f4f835af18b9033a4f7fd1ba3129da50629daa421cc58414e7ed54aedb054cda8f17ae6fc5f38d5f461aa5338983f2747121bf401c1b955682cd52ba7658936543bb6e3f2b0a565baaeee079bf599c17f588409d02904eb3af2cf5cb3651accb996fefadb68200c7b4591dfd213f39c3563de8c96eb822d4d368d85199a4fb6616b1bd3c06ef1f2c1905b82e7d895dff19bf0245bef78412861d54ddfeb6f1dd420d615a8aa603e13f61499e12ec6b33b68847a281d314f54dc705c0f3fc428981ff5689c04b519fadf83cbc9fcd0409c326035045df480570e265bb080940037ce4076a36437aafdb371c1a62af9ad9b614dfef89708fbbb5ebef2cb9528cc399781e4c5b22f1aa4dba623809f8a23c15d137d0bb3b6e9073602c86766c8b524e17e5d0ad6e59077bdea986045cac9948e7a5945994672c4fdb8868cdbbbe3821300877bb8a135ffc205c84d0303c89e5d4a3bae3100bd791aa9d342dc4b7dda97cf0a1f41ab30c352be5c4fc17b4767304aca4f642bf3aef79d589251beabb5d4b38fff574aaa4bd6defc6e677c6f757043af2f18113becfb5cbd83225d979a3274be21e3c8cb20b42e4fb3de4c675286fe915636f8beb98eada91e3770661119d93e8fce6bbac95673fe250c335886d84019cda729a4a01859c46a783f43a2f1acb851fe7ca0ce2278b0ccda7b6a97d0d4ef9b51ec14260129b76fce1154d622b3d36d5d42a4b882040eb1306ac40fd581bac81e8936d5b2e22a351f30c13414b738edd207ef0edddec0dbf74a8f764e0e225df5473334914fc4c555e2b345307f8ed84411a8589bcf6d521561f252a544d161bd6f33cb07372e265670528fdcd57e379daaf81f239fbd1f74f8162d41eb6cdc60495d237d6110600c22c59c817fb011c41807e9df165a49fa56238e8acb9ed7c51ddac35996107c5d3f35f48846cb6ea1a3fc4136fbe9d891c540fee8ab0c58d433d233049ed9813311c91d57f278571c9500ac901815d5208b9504c354616a75d26cfce741117775deaaa1584b5ed21d343ab4553383478ff14b28838f43129044d0a5694761660befff08f21826ea8ccad3e0ee15de36c63f8af290225b5a0dcf27b6f1777057dc8cf1d88c2377a4519df2b8c186ccabacbd79eb53d55049d4bc99b8e99ae751d2fca89b9032fa0a54f5c0c5374ef5ac2bb3419a3272cae7ce534d32b8786d5dd4894bd8650e56237e1c658eb93403442a68098796bf733de1db6cacc6d9ab82cb790218737f34f7b559089cad019b789225fa3be886f052f69e1dae7b8548c89d15f7e2224d3c8fe2f3d1757c7d675249323c3d8e8dec2ff6e289c13f43ed3733a54fbeda3f15f2ee33e9a38f700fd938d7f615f29d0ddac7f0d76c7add42d875713534031e6828bf6178ae4da23b15475c514c7a7dfb5d531030389419eeb24bc0cfcd05b2dc3a3fc5a51c1ddb920f5f08746990f75fc08089bcacf5c09acd9edc451048c31a2f54a6997769e2bcce662487f49bd1e10938a5a250059aed32540bc0863519c90fe84e7c469880625a46f8b47603d4284262aa0bac2d6e90e8579668b5327b92e3e2037512127d2cbce5cc21762fc8dd72e6e11e49d3062af78dc56427a8b31db22a0eac623ea1c1fb2de8f67c8975a7a2ac9204ae61286468e0dfdd6400871184a8b74abe86b3ca1f04935c1078a22fd99b05e4633d9de642372efaf2a0c01761444577ae517dee3154177bbb64191d1f9d81e7f1d12c578d79f8e45bf226d652e6025abb08c5d63804ba7a04b5a0187c995035df839f60529086c2275c80f75e76341c6c1154293cfcc58174d400c8f978b8f5b5bdbda8986320bddc4898218edc24e44ad5f290462480ba912701d69d200250fce64dd867da0dfd041d34fde9001adbdcbc66b35c64324be6176aea717a756d3b651897c7dd97a926431d3277ca5d29aa2f7a3989a4245cf80d05ab7b6e5b75faa4e68ec15404e9cb221b69402337f53c94f4cbd2cc9f16516f98c2c5e5fa8fc10a7e645c279de77a22f54a4df1ee671b549d1041c4e9a078a6ecd657c59ce419ffaac2a13faac8bbab757ca51ecba9ced83db1dd744a23f51bc99037f8879b89eb3050968273b7162561a8509016e0dd879c55aec40cc75135f6986f6403dd9a37d9b545d93fda14f8827557311737d1c881a5bd9d76b3135b3d9507f35ad2d2496d9ab62c58593c8ca08cc1e716d43005b64811e5cf10c3f76430058cd2a1bc8ab4a6f064045d17498394969c5adf85a501e7b2866005e97034107316b573dd627682fb678c0e2b98f236de372c8155102b2aa96671bb0e2e75dd587b496fbf3a7ad5df1f389303dfb61aa2a0d4e12aadfcb8fd6f495ab999ef41bda2d7bee9788948a4734f15248797e7eabf9a298be63b3ab6873209731969e2a973a687e3866b83534a1bbb18f95d46bc7cc57e0122b257dd9872f0c316ad6824d600f336cae82df48ee2ae669cd0de22bf9f0a13ca27b87989523831f8817c37b32b2a69aec7ee8d26ed1596d7b85823706ef54944630592421a094527aec6e8f270530498d27028fa84193014dc5bc7777b672bf92ee531ab128a880bfced417b17968ff2cf58ccf2eee2bdba059017bc0e8742514f005cac82e4810c329a4a36681c9323875182f67597c531fb9e1a276f7d15b590ff1e2db13eb9931a740a0cab0d9893c20151ee5f60cee0862fd9a1e5722c8bb78a7c16e8c1b6067a2489e3279124aa481041c2f56662316ee85a10b98e103c8d48804f6f9502cf1b51cfa525cec1d0e0275a5a7fd1088b7a73a75e34f84831dae231c08ee12554c5a4e538edeff66d54eea59e45c949567478c8719bd95cd166ff97528dcda5ff3fc4d286c71a4be96a0c29778e75abfb229ec3333958d583f848bbebb3830c37535b9e75fb7849aceb2aeecba4fdb8e04c8ea28a559e3ab15a65a4744928e163c70e52efd030771e9eeffd84cd8af86ebcf06d6036d213c252fd5ad697e7aded6487f4db8f6a5ea84d045d885244f20d396b2a9c251de91ea9b8e6f7e5e6f73cf26e8f20815084b0be1016c17b522e268aa7e3266aa7422d27404fc17b4d47b8396a28a8eb0773a0babc31158fdc341f784d9fe64d97a956933a9d1ba04525c90024c95a18bab3de09b0b56ed80c8d62cb0567c41615a304b651d9ec9ef61ad71144791e4f8fcad47393aab39c08c0554b7642a80c4bba9c592b0a1ebb87ad4a327141dcd7ae42e8c00d19cc24f85562bf49387a785f7587427038984020678a2c53277cf940a384b7c809a0b805d4f0f1255122a2795c2d3ac96b4275ebcfffc79336e7fd6d730f226982199f57c666a7b39688d2c2f8f608deac04a10d6d12cad973032b5c3cf1c79b8c1e2315b32eaa9b0e945061d04b765602c60db1c929ffcce8b9ca3685916e0430988a6721afc284c12f637f6d924ad9767002fd6cae2c159cf22422d759e14c756d1d769a51b616b83f554455354d110feac619dd071a5c97947f49b9b0e71c6486246aa57c50fafaad6cd7129a47a3d51ca12ea49e9148e28824d3b3fe471c03cbe76bcb9856d88f62f1612c2b003ad0efdd644ad9598184b75be74daccaf35c24ad9f920d915780452b09294e3f7c0949c1e2562239b085086cad10203849777ac0318544c920d43d64f8936dce11871494d150e0fa7dee629e4e83c359c85ab3664729a3c6db9334e255f1ef73a252369f58c07a648fc6af3af22ffdf4160fb9e80a08934f2fc611ef49cc3cf7d773992aa02f5a3f8f15d688c09a37d3db9e728ea1a97d2ec474bcd1fcabbc2157f1237cd125e75324e3bfd0e14ed7bcc00dc89f3494c72943a51cd09516d7bbcbd4bedf12288968f739525a7dd347786c66a265ed52db0954611b363d95f58bda2551998bc2a845af1e776dbbafedcf89b1e726f26a1f959eb1a0491bb17e5b2debc3f3657aacb3f59b1653c36c3388bcf4812b6b64fd97ca9c945358f1daf16b2efe35c8d8fe7a71b71752be91806daf3957bc81c9dcd57f2bdd9a1bde71153df6e9a7db650462ca7a62b3d4a73b440a8751205b1f2319666564678dfeab914b4c6c91c7a82733a9ecdfbe2c35ced674e757a123f13c2927521101d5dcf12c3c376f3ab32acfb4b51677baefc3a0eb965f5185fec48ecd69facdb21dfda9adb9c0daebc87165ae97ff10f144da194b18fa2715162281cfd4667ec08aeb3ddd69ee95ec2e074fe9f6af93a95401a1bda1bdc29993927df6119d0d74462d1384f5c989850c74f72d7b2fe92b46c0a00ad9b208599d9dea09c8a76316794b956a04599cfe8a3ec342ce86f8bf439f7efa6ae0e29c5ac930d1a08d66ee4acd29563fa7b79ed2ef1def96bcaaac7327a355f94f38acf5a1b71642560043e23c39114dbac3ae090e6cfd7bdae63cfddf78e33108f3cf94aae89f560a185f69202c64d89aa6765a24183527e793b50a4f636cb712f94e606e293683b2968806ff6a1485504a3eebb8895c3feb9b60c100cdb7367534718074e3a171546107e1635becfee3954ee452263d6eefe5854b791f8d543a8b7f1c447fa9c9fb632423d367b3eb5b71ed6e7b599f5af9596ccf42bfb6b968e5c25e67631633ac8326f4d8f630f3c1c565b1b98a49ab14df5c76e417fa0e072c806c64f9b05671a9577bf9702cbf1c79fcd4971f040a455f9f68e68d21fb2047026ec3a83fdb51bdfde1be3d6ff77474fbff9a81981f96c17bccd08bf227b91e908d0dd78a6955a8614dafc5c142d1a0aa5c4c18cd910eed39ca2b78363bdd9971f0c9f05aa98350cbe85570ea483ce45010344c6b08b5cc208c7ebcb5de91a0efc17f5a7743e59e82da37a7b1b2bc283646da86392e94447a3751bf37b9df1b5025b77da9de837ad04addd0e0285a54a524c72c00a8b23e8df62de88474cef2dd46fac1b82263cdfb60d0553d511d51e3d282a8882118a3a3ef98a163b6660dde4ccf8e6bb98f7d4c46979c91d60d0538799360993fcc59024a1c529e27b0549b5fbf4c8b480f +MD = 2762ffc07d5ff88648b22c8c6abb35772443be6ab11a2efdb15ec22994ef929a5eb2b33c2cbdc0affb7ba3350b760d7b850048b2e355e39af8ec52b26d26ee45 + +Len = 30360 +Msg = 8d6da0429b03e2affb2ebf410ede348d607dd766d07f1909f23bc898b1f9d8ca394c62e014a2eddb9219edec6f94892cb00fa18dce2f1010161d2e39509599c19f3a368aa82d72d8f6ddcebd9d219ad51e8400348bdf459dec2e4cf4e09c5cf688e02228a0ccfa0def236a9ce2aceff17484fd4350b841163a1329b2ab35a6d3bbe531a244a90ce44593ca72845d11e978b99fa265e28be5c977cd59f78901bf02f368e0dce930c4bfd4f525cc5d8723f3c8ee3a1284ab70610041d30dc0f42223afd1cbb0b7ee15278ff39f02d4d909ac5cf2f19fc72a21c9568c0635010865e7c373490839cf40436bcdc66eea90026d1bb4b053d28f5fcb22b6dcb774c3ee16d756432b975aabdc118a8458c53375fcad3b6078ce62912d0cc83cda42b026789283a262fa18bfb92832c007904acc22bb8fe754e22c21b8bbc90de7935475d49d014cf58a8fe4a459ce62c4715e6ea7edb92f2f37737634d8c139268e3944f49fd82b2c6e4983634c6451d790f6c353eac01e53f4c2f8690ab9a7df5ce6f99e4111264ecfce02bfa8ff7788169a33ee5bac9e07429e0f1ffab73f5a24e3fe9b2bb324a5d4a4cb8016a4bb1f2bd2263fe78696924991231d50c6e9de0fb9b9b304c60f77a655446e3d5d05e3f627040f3755ed3d30229c2cb3eb8db545ef94ad7553ce0d6c69d750c6313d1da0203526f2218d5020dae214cb301325ed0df553256049af4f66ebf058294c155046214cc1f25d13403f5d9d419c6377309b466bbdf868a577d6e7149c4b18132f1f31494cd145cdb9db768ebd3766f33522eebee42013360b40358539a18a5f6535cbe43ac52dc8b23693b1e60a02e0252a551443e232ab332d3c0bd8338a40191059e634d7fd4a54d61ecc651c20882739e3358145ad4c1924646d2107010074364118e10e9d9cc6457da8e176a93164d900e847516c61e2ad1575bb27d5e59d31ed3fea72f606310b1a0d031e8324039114f63d0f5732b950b7e94f9bf038bc89c326f60beecfbdae5bc3731e98a92de987280a865707c496b29284693840fbc42d94aee26e4191b8aa91d87ece070a6ac14457bf52272b066f38039b9747806c9150b9fe5fa2d6b16e40db440f88c19b2b12cbc031db172954a37439f49373085923c167a73bb31f0e98237a42727b052b5c0f93dd6bb085ca9a7d49366dfd21ecd56b263054518cf46159274f0e5f2e2ae8ca403d1f1da43ae7c9d5471d463eb22e6142e035d87f876324541da496a0917fa5cd383e870e0a50fee40eeb75e713f64bc3a1256f812f662d08967c47e3c6e94844b8121549a49ec57f731fb2a577f4d0b25a6e3e1954311b4ba1dd9b7d33ee5aaca4e1f0df6e99c5ad5e0027fe46f19916f3566ecf5e8d97252611baf83e56840ee3f43f58d208a776b7d7f97ce8b54ef75326272bb642499f0e5ecbdc51e86d715f932b3a36b412e266ec53a7c608965d642590b6c218d8c03f0df6afd36dbdddff06dc0f0466affa54875b0646b219510d9dd2f7ebd7ed91a26565fb2cae1e5bab94795ea3e426c567f03921d17a80da36d4147699462f181fb03d47c37036f14b862ab07bf61e4b886e1680d0297301c7137fbc352e475f9f34a91c027eadaac824198cf4663f95a04b1aaca98799cda9a23b502557dc6e083bcf01509f2c8b08b66b7a76fb32aa95cd6c2cc65c9b46c2c96fbad389974b440bd77e159a5b9ef4844b02697c9f93513d35888d702074fbd04483a58c200039ecea1bba38e1ea74d6dfad35b22d56bae39c49688bd1603dfee13205271e95d1283061a541677771f34f02426585fdba06caf6be7456116e9d6e4f5a243910f206d0d73f7d944ed124c48af95c4f8f38efe617f6f4568f77f315630c491a7b86cdf206f0b311767eb166cbc06132151be719347ad37ae34149fcf5835f69dd74c6c07421ad85f75ee25c4f003ad6964d348bd6b1d96914b3e64b8d262dcd3fa4395fab383199da5bfecf9e22b0e41ab51e638403cdcb2ab4142bb35f7defa8fe6dfa339f08f5265c4fe63e8c8b04aa3befcac7d8794a2e2e19c4f0961577206aacb792bcfa40e3481bcab9a893dd4cc7ede72698a38c27083e3dcb31be0cb0d03cbe52f9ce221909aba297dd90180a4162e329ab14391d2acbbecd9940565e186638fabd4e45d18647975e92495cec9194e5587a94fa187c08717c3663ff342a724d136f404e13a737d198318752f9a0cc163c6beb7721e53c7c6370efac3aeea82424796de8e554c277cc2112a23954519d5ce7e0573f50b10707b0ab07774d50e6b5429db9517531b183cab2f3b4966da340573c427ba2ad3bf25c60b8f32db1ba4f3297695ef2cca944942fed734f66507121c7e2dcc4793fabded667b67814c979b125a114b3db8497e750397d6585cb76af49dc6a9e5d3cba9cd5bbc914c13bbb270d097ca1a66d042bde7fdac2123dd7678adb2d18a05aa800255c33eb00379dfc18489da2758a14c8a266934c55cd1db351852e1b8cc0fb708df3fce319e5a8980e07809f8f034e266197afed95a4cffa6882748d67973e56d7282de6536e6364b7ed2b813d013bade6ba368c1ce975a3957b07587a06f619c9a2ccdbf8fa56c6dba3a82ec7ac61c6f876311030c59818a118f0620d36ad212c0ae4a94eb00a2741d0ff90752b4ad75e73a7631a60bfc054003695684fead6c7077a3a9eb906f0b21d368e8ea77e4ae15aa06c22e1720375dce1d7d27836a0644298752f3dd287f631570f5c47838549d324138f713949ce53fa1295d918e7c96245424b63f756d5b669fd2534e3f25e853c40ab379dfa250e872df79b1813bf108a893853fcc31751753f329526f7e719efdbbc5c257e43b4931041e6be8c0ef46e323f36693883ac82bdcb93d2feae3646cc0b075a3ef0ee23a3bae193ba7eb5f926a834c71ce26f985f3856716e798547fbe061c2a0f36441ceacb51e06d7fc334bbb749dd7fc42bf0dc0058aaf11aefc518392e70d16bdf4795d89e7d6e070258ac01f73d199cb00afacc8a6293e586db43bc151ee1fa2458c1686779362bad6ccfe5cd27181b5622d44c94c44c72ba10d511686a9d7ba3aef1fd455a626814ef7be5440217ba6ee6fd02d046876d1a0450dba10a806aede8ac09a0975f16e96f4482e47495146ab5d981f57fd11ef7242b7d577517425364541011c6a8e29b5ace4136f4fc93fa1e0e4c5cb6b613020ee978e410ee8c84c09e93015ecc359b306da2b3f9cac36d8defb47ea1a2e39b030f50ef8462c3f27bc024f7c625aa699e9719d3f98c1d6594026ce3c7240b52def187d23600631cf48d288da3619ba6e3ff292f7abd2c42befad8248dc5e4a9c1549024bc63f464d93a201b6cfc93a3aefa531f03ea5ab56d2d88a96be52a00789d0c5f7df9f27a887b9e2989532d105e1d2a3b1b70431e3d0ee0eae81e2607533f5efaf13ed7ce80b615408f01b25d8fdc10fc280b5fed9d33938198ed732effb00a8fccaf3ec1606e07f8f484ddeba2bba9eacff80bb40c2ff2e5e4cf8bd7cc93817646c772038627f8ab40591a5b4530478f69e2f102084891805220faa2485e665716142c05906869d008fad22cd5de8c428c488a482031f1f967ae2a0ef1752b9ab121c737eda3de2fa4f69fc0d31aeabcbd855206d26096b9abb3b48e667c43c99e5cce1b1c6eb7e2aab8fdb7cb79e5466445c2bead58e23994ce04a105e8416c3431cb3f9b2da9c180ce56923d8ffe7816f666e00f8f76f1997994d76e2d96eb195d2915f8650624ddb354b097a1b8ea4c13a91b7788c78a40330f91edc0d6cec41b722e92a96f8507e452c3686386f58a2a23b173b9566c1f86bf81235663afbb1930fa186f487a95fddb2b3e59fb2247a6414292a5a61f9de14ef5ad32dfd664b2eff8f83b137e1e4c785877d988091b149c5f42d2390d21ef189fca0a9e0b6794f9bba07172f7f77ca4eba386a0126af19f6802d371bd61ecb6c0283240872a2c08b2afb6c980b7fadb555fd5f5c6bdd9c4ed610df2b8d4769407363e4a0222d4776e748f9990d6439615fb3bdbae8a19976fdc063e87e0195ae582a32ce4e84ad05fad4065b0e8d36fbe044cd422664da16fd230b7931b5155db8bf56ba7f0eb9df6a89db0696646c2ae197d71dac8f25d5df231e062ec9b2f79b0a988e3c3335ac3f4ebfc12b50a297689423720288435baaa7e6b9fea734210af3406f0e5be716810afcb457b9a2ea8023f86ab1b9fc516696a9b828b563850b6295877cee99c339a7d808a10732ca2e2ca02d4088175f1cdab02b345d07cba93fe0fe0e54115b6f0c9ce591a31bdf7c9761e2375f5e2cd35a433baa06e79be97269fc4cf6188729218f72b0f324d2714c84b11fa5976193feaa0f1317cc9bd5e378a8bf3a75ef71cefbd88560174b153450c37ec28ba564ae2cd1f7fa7e76747b552aee89f23a4efb263e9953bbf171350f40df1e02a14f5212a6dc16c5d2ce2048ab614c5510c99059cd7232d76d8c380750c721c4fd5bd2a5b84cd36958ecbb9853a1e9671be875dcad9a6634666f268219c033986091162a2fce9931afd5358e4935caf000b593f70599589a8520e5c6c651bc4772f707ec33ebd0e67f917472b6a555b86a38d0f2fdf56fd072a95f1b7d03249adc988b32ea29e0507229628cc17af486ff781514bf3812a0d4117acb665cd35646798b437f1332372ea4e623933b0e23677d4ba770e9abd05461201dabe6314657a4f068182e2c635b0ae78053700a584b4f58f13b91a12999a038587129a731b820a0e9de04379ca2644fec2aa252eb53f7263b46b75c734cd6aac5e3ac9bde11f5850ef81cbca9abb905ad40584da4267c9bccb9e34476140c5eac26f77616092c861f8efe21531d11f10bbc1a634d6de6a1eebd9ec1f99a493b556592a1a148cb8a63ca33d062a074fb50c670fcaccf3d1fe77a6e3bc685952b07c606824777dd7b23d2422f9edeeb0bc288e3808bf58afc0017de1aa37ef8160b71d983d03e6740a7ceb3a8ce7c7d09ab27fa57b086d52281bc73c6592d7be2aa8f960b034473c137e70fa1bc2533dd51ce3eeae32b2478b293b7a7b03925782948c281a93208e61b44dc842e7f136ffda3359fee8c81e6dac131256f4bffc0d3c3e74f8aaf2f979a0fa5b8ed3228a7f6ce69df9850f354437169a9600a0fa2ef298cdc6e64efbcfd6defa5c1e7776e86786213a82083aa33c9e899491f5f07c4a13a901df8503d8d8844b371460aaaf3c9a6a1e7a337d0f3f1355ff331f7d59b5478d35e145a028f882b4ac7f6e84586e8bff31d8219afcb12d86126e9ddf6bc6ace0dfb6016f34e952dd289a0192587fe356f116431 +MD = 8ed0fa05761788d42e6623f0212818caee848e2c04ee9bc36239981e08cefe0b1d7b260ad6f456ca74509b00b3384426ce64a7bfab22228e85fdbdfdc7fd5df1 + +Len = 30944 +Msg = f28634dcfebacfa510740de8973be90087fd29eef45390b6df07560650d4d519a56c85db29c02a4ee87b4c2cc2cfe8cebf75654ca2efc9e6c1112da213bf6f378bf8262aa414db373e4976f2a874f6aefe16659eb59d0b3a74e6e3e425ff4bcc4d31ff11983e4829b9e7718270b17b69ece9122c54e6bf7ba18e5e14ae1cd3a09220f9d72dc6dbeb015c2724430fdfc732f5523da8514b71ef12887ad59c6d7a03cbfac68a35fb47bfb07e2049158a9078430e1ad96618e40779475ec3098323473ceb24d8130f039bec60bda94be58c65d92f0c0ead8e9c90cb8507a0ea7c64077bb53a3ee681e83c17b4448c395683a2c19b596faf1560331029be93c8c003eb8e3e50e538b8be4b3962fd1968463cd7033c4925f316fa98511bcbc42ab7c89a7f70aef5901c4d6f5b5130795f1e80aba5f8265801f730669643765c98c97dbd56329b9577155c51836b25d3a64417c6b1b9362f6222cb45e58907839a5ee8fb196b61ed740bb598bc972450c622c9d12e66c3d39dfd93df48d5c560b9ded3fdd20546260f661eed0bbd7418461e5e7425e7136c3af24fd9c60ff91c7cb1046b88e79368d08e60f87ac65e52aea29d569d246e21c268c9de671febde6c3f43ec44f98fda40ec436010982a2787154f209e041e1abcc7c79434ede3cf0ff05a280d2384a5e6e68eced51c20be57df3c7931726a80b07612a334612917f02d0fc8eb4db8f04ae50be9d23a8740a9682c0a5c53997b26df72b4706404dd945c2c74e65f74e4f552805a0edba9d40217e77b2990f432a769ae6feedcbe4985e777d3074100a96e93b6c891e5cca3ec563473a011c3ceba7c907bb8b39d854a34b98e55dca4663d1275dc644239d4ee8ddd9ac8be4e76e880de81d6cfeab66badb94cd816a844eb35843e8ed838909122a899a97fdc53b8dd61284e1aec0770b841b699d8536aff66ad95179110ff5b7e5e184b3db68db2fce1192a7aed9ee2bf17749f0bef00010cb68908530b48d609c7beb7de254b5e4326fb72d933a34929042df395c2307a8e68c468086f948a2baa34f44c6fb5451bf7772c1e073f2b5ed0899b601520f1568beb3f97850afe4dd0220a6ddcf4eeed1d356231b19912c64332a1522ff8eecbe7a996e895d3bad5022e022bb630e11f61dc1bfa79db85c925cd0c555ae1f95543a374e3e716462d0603e36d4390a71b89146060a72a0dcf3d05e550dc039b5c6984e170c2fc2bbba447b51acd3dc7475d87384e82b13140547f332afe855b481ff2e57770adf0e9a6a3801c9a5fc90da7dbaba95395798432e6fecd088fc2822e9589e037501d1ed2be4d5af21d36d42db8c15a62016d039fe04f20424b57705e17d493600d3ac1f24123bc1f9f9503b8c78349f71b962563152d0bf3dfa27b761dcf78320dd03cccd30b2a680e6e0410aff85e5a0b7b53452fa07665732b0b40528078f77866f6291d0c8c14924a3efd192882d2faa4f30fd3b049de307b89825bf179f5768557d0c62eca6c52af1947ad1c9ba9109a6f87ab666ca73d195b05e32a64762db4c78b7779cdb87728fdb512db922574e42d765fc9c808c38deb91903122c0c87bae20d8f67b40283a5211f16d508f4f0a97a397e14348ea60a0ee0a109a1b6d62745890acbd4b8e6f8021f1dbbc2fc89513d8fab7c6b1d919e1e3facfb3d145f281fb48a47c22d04eefaebb2cbd4c080c0bdb30523a89b94018390874572977b23ed1a7e49e0e185f087ff6683d2f36f7e675e2bb8519b15dacb8db096d6a2b2b11a156760c558b2b315e4b9823217bdf0c6eb8f891a9eaf905281c95dcdd8be36335fc61af3f5339d31162c35768ff4ae58e591344818c9b8b5172218ecabc649d5342ae6e1698115761e2f1c04ce9c3d99d6e1388e8becca6fb86b46a79e93625c4d0643020813c2316742a481761cf50629e014428a813beed0056583138df65504d8bdfa73741a1f8bf77d60f91f8b2a692e4608773f83bf0870f403bd1e9c3be622c62f1e2a838ce6cdf537e9fc56731f1c4c34e470385ccc3e80adfdddca9d8b64ea146a8fa4f62226ba5aab3bed7cb64aa57c44bbd04495de89f65843e7e64f2f984f0b4be507a8a22b5dcf66c6a3c939c0333a8ad202efd18e515ed99aa2bbd35f3362c7ca2df4b0c6b5b8f56894b25a5afe1855c42454a7ec537417495f5c00bd65f39bdad590e31af71a7059ac2c3ca43170b50d054ed242712a758a78aa28215b40207d9b07b9a6a6466ff07671415a81d621334248d12f4ef48cc48b10ca3987db0e58eab394e827df3ce3603c18dc43bb12dd47dd34f12164c58e034a67547026adc3413f155e10477f9915d713a80b920241a2767e36bcfda84d7d917000b8a597633b04ab86d4119097e3fcd25c5ded9826de9f0d6e6621ad99569084cca5ea43af34aed7e107b0285676f7c5579f401ce348c17306a1635de82ab20626ec775b0dda981afb1fc59f5b3b627d28541c391d9d983fae135531c06690849dd0bf1615794af54380a47e2cadc76a5d20e4552c395dc3c32059b198a696709017242d4cad51f738ceef4d314a910d547a2af995a8bccfc45cf365f7474e6abc04690919f32781797f08750f9e59e6acb472aef0682f94402da4c762e522d3504cd02213c746345405729e1e157c76d4843deda2f410b1b517004e41ecbe3b2b451c10b0b6387076f6d010f34c834e5a5dff2e43d91ab8a1ad78633aea7b027b818f4d772c68d640c7838615a008ddaca638e95983a81974558fbea45ad3e9ef86ac40edb661c6500c1f560bbc779559f17dc74a804344dba3b8b924aa6321e5b915937ad0cdd1031906192bfe5a05c0b420109d6b76db161c85db2275b37b0cbd4dada507e776f882da481cf21abfaf92e28dc881ad3cd22479ad24391f35b307a70802c85938aeddfe5b5514442344e21777627f60fa8e6ff697b06130e2770cc42b0a9e8d96749ef4cb5af160c14f364165e1c13c84a9339f333d8a8311c741279f22f71f01082a502094f5fb2a1d03f2e1cce39a7bc133d5f852117044324943cce26e6818d82492f399be7dbe3cdf9e739a43053054c53d6f649292ea36899b4cdf61033e42f23facdf97630e3d3dc683c08bf752d28c38010b8a65844296b087607b7af1f737b8c4ed3d359a8c82edaad61b0b53d8ed4845ad756292f4d506151c1a39d4635980d4490c7fd3a9638641516c9ba3c65cf0b5c0c004a6bbe91e7e78d9ba35f5dc3a435981ac4a223422ffa91d32d3297fc3c9fc06e62006275c1bfd1686c74d24479ab539458e7599463e73995b5270ba340aa5c661af723461862f6d29e8c7e63b52d29fc5e111e75276176d9fb24a90c3e0546b11a57e84a135665a1e2b048688044821c81295c2fa3f2b065a730597f5f39e817092898cbdb25859ddfe7189a0176c6ba6736fa0800214f0260540343cbcda95f8f731d0f9756bd8e3e39d642614e5d9fb840e0496676bb78ce978fa1a949f053553f5e5f7072773ba6ae6aa8c751af931d50f639fc7a5d8f9a01e5e1213627b9039443028e001a6dc04fbd145c09245e3d6c2422ebb49b0f6c9aee4b5d1bb55a417ab44218880eec3423b5ce48fd25c7c29f524a5aaddebfeb6b9026828002feb5fa99653793ba80a9323b1db2b5189751ee68fa72eb8f68c07bb4bcbbed766c0a1bdab412a888f1c785384bc2ba679695634e7a5bf814d293d243532eeb796ee6e66077d24fdf063723929ea293788c3305ec123c5cd7c50b792334030173caf26111f69e102788a114335f77c8b541d6dc2a0a3d9d3e09d0773ea763b8cc49d596d6789f74c940ac6101d56ce2857d24f1f1a98845b3658bd47af37697ecb3378d9847fc022bf30111e64aa6684f07c54b273942dc9da3e499c16263263bd0c24d3da9de43b66c482cc90450e27da862f2b60096e8648982cdfa3a53ed22681cdeaee76dbdd27228bb914c90d87628a3ef8447aaf36fe00e780dc46d750742ed48d448d0fae8cc49c5286a8ed3a24f2f497b55a684286f2fa2e148da455327de93961630825e43545275a6745b69e4af088274b324f6008e54600ec1e56fdf96c8db97b4db9e9ff16b604867f633b1ca3580eaf9594159d296715d4bdec132beef8d15858f0ea8c716d197912e687c29d75f009fae7243a46efc7f9fb7b3e8fe0e93d6ca2618257f5db0dc1a8a700e73f606fecda8ef86ace6eabae7f8acc8fd2fd523ac2623e0c048e5602a92b32f519a5d2cadd121ea91052157482a149b64593b435319969f33de5968e7cf9aa66bcc4cd164b07037fcd38a9decd45229da95ad80e686db2b8027f23f7cc88b3d6893bb371dcd453494590dd6fb7ed03a08ea13208ef6594c4e2b992c0f05efbaf1f892a4feb106aa029e93489cb0f5969660556c72f078c945f33776c90f2fe6ad02b9612fe31d62edaa023df8f329042bff5bacbbfca06c0e86b266d16db18945b918b6d9ebf021fe8644fb37ced44e6fd00d2890a239fb51ecf44450a7df6b602598ea2452e9b2dd393fca80ca5e3a0cda54271a6bab3fb52ee3586d462053a74f1f47379f6edc31cbddf4fb6d3091a72516f380de5f00e35369e951d1db0bc13e96133b5ae966a24504c0d242b01aebba3dd2eb84bb0683636d4023d07a5958fae697570cc119daae9e752ace479f7da0af0d83e328183c67d6a60ccc6406118cf51bb43c5ebd7e0e925c2e9b5de608df56eb6f850f00b6658e61344c01da96fbade77972281a396ec8bd03305bb9328018b6d8f2d6849a687cb9c2d8b99c8f4ff542cf3687f7b0d528e0d415a7dea38adfb4e5b0e76d907588f8def8f416a391b476de11e31d8e4b9a0cc7d3ab1d0405922fbf49a8823f969a64b2351a0e7bc8d4c9cd8aa45579d8068a04f1ce40fdfa196d8d45838d50d29a476316934dbffc3c84c52a3265198554a3b4f7770d35705cb7782adf546a3270e71c24c79b1635d4eeed77f51518596c9cff6d104e556f4254a88223a136bc058d03e51fbf287c84516efb562f1b5d36c00cdc00c904ffb58e44d4b93a5c7a3f8040e301839ed834f36f3ebb79cd979b5604ccaf47eb299dab75a908e78374070afca6d6ad2052cc1e19c78dbdd31181a50ec3858fb2f4e0f46288787253b146715fb4070655f13418941e35c1d8d3d2f6534bea6b006967b134f971a17639e2fe9097fa56e6bd552907cb194e82e37491fbeb46a17d8e1a2a12845b3e9114c5f9b8d719657abe159b9a56a32b794b51be2d2c01fad26de1a625b29e0f4f4bd5aafefacbfabafd5db477483a2266134fc51194833ea70ea56f940aa2dd55e4fc588b8a77df4e8116bec32945f9f14158edd0ad3435a3774ccb8815d06f4eea204d860f87dadd5226ffa97f2e79c1df538092ff7da66fb2c00329598e8fe0622bcf180f62b40f7977c04fd45c6a7ff427c47e10c45bb3c7e75e9e604503b3560427 +MD = 245aa878fc3a4cdeeccd328a726f4112fbd4aa60097842ed8c936f66e1fa8348e335d7d71643a690249b3311c73ca975f603604260d35e44e26206a1892789c1 + +Len = 31528 +Msg = 0938764b4c385936129961e5f75628d5937728eb4e922e1175920c208eb78e02e9deb01878030ed9e0049cbcd0a7975892dfbccae04bb758f800de54f3881f42522a373dda6c2596a2d7dfbf6afa43672eb250e7fba896dd021aeb16ebdf60b26ba57482197e87b57d9b91b46a56134a8e764e0848afb4e8b9699c301ec339995dd6cdb1dd3e1a7e9bd719647bc4ef48dcb61df66e6af7c048745768353c92414f46ab90d0b6c7382413e197434bbfab3df7257916e148afd5c38588d85253f06a7b77e998ed772d40d750146af36bb9dbc3ce58e81b90fb89df8f56ae0e65efd6ff9782ddeb10a315accea599c4dcbbdea1805d8b20b5ed8b4fdb9b6077ae86ba5a752348b97be3ce19c31078c7f8f86e1aa34ea8f8a1cd049bd31e959517fc3e127796805ea13591a7971eae03a8bab1b59ff4e6ac3ae31b4cdea9f671889b8cb107a22ee269e086dcb397e480d547d2fadc17ee426a76f9e963022b12eaa9c9bf8c0efa4eba2ed7437d43c14765e9f771c37f67c517d0c5faccf2db81236f20c26ea38ba97e65a9615eeaee5f42e549a3baf3fa3a2b37a8088041aec41d35b74414298afb9cce27c0bf5312d05286ef172a3d4fab8df4ca9ae7b74ee5be43b6cce8689e4cfcb176e70647d6a37f1311557c230d1f254f5238691c60ebf0e046e3512770a58656c15e9d8ee2dfafd3d9e6166edd9fdb8f686a6e378fdf9a558f0fb730a80d22042eaeeaf0dd8ccc0f6d5162e6663297fe36b95ed180c8a4ebb8db8249ed8db805e55e57356fb3bd10f51ec65251e041e2e1aca1b2deaef5e7e9cc1b3be72c309f0ff64a24415b6a1b9ad6ac7b45b1c18494cc9fa24f9a77944c6ce8cd3ff2721bd4fe2d86fb8cbb7b83007b2aebaeff2c759fc1697b921139064252c99de766c15bff6723454e9876da249b25ebdee422acaf6dce0ca1ab1d42d6c2f5a814f5d8cd8160c3c5aae956c4ca7434ec4a56ad62840c9ba7cc2e8926b19e1b098005aa510a802e26a796616b7b6e2196f83e16bfa40796f61d80c5da5a4f0168337f7d10242f2b0e4e87e0f7bef1b392f285a6ea99c488a19b8a1987593e706b364c9a3256d58426a6a51a901c65b1884011a20cebad38504e34cd5537d22fbd905249de28daff15b7d6595c1c32e41fe8cc554c202970aa3f67286b7b720804497bd13c23a665838903e38646c01400f49d06d3c29ff657750973f2ad88c1e96aae7c75cea17d1a25150234227708d36b6bfcc859799300f803f711567b2313fad390b1b234117f92f2fb8f39c08a3f562080546b1e0f4dd13ef9f1fdb3f62b01d1561755c5e75dd88419be120160ecbca3da9f82f632e507a1c4b92a9802d8889216d041bec95a00b1a3e935a35383a5dc52d02569c471a2139f9265920ec395fd1803fe857d1e1063e03a2b0f2bac1ab33010dddf8c98ab7ed1a43709e49333faa3d91284cb52138119d77bacb00e2110bb8630c0530329c9a31627654af16771007a07217d9e0ef397e8ade1aa52c5db3c5ba874e15924dc5d11be0e09853b4a780d65c659a90ba19f964a18e01f0bfcfbb6cd63fe43a59f47bc826ce9f6b66d51bbb2da291c11737c08d9b81b1efd5b40c026f67269b2faa840fde7b1ede0c3d3ab78c5b39e29517468e22923f7a2e153a03b93047256d5cac4b7e82b11c23248063eeec0d85a23d1dbedd2c05102747b7f94a47e079618f37137d51d0b63a3f6f38dbf1772acd1d98b831dbad426fd0285ba8fa6cf7cab6c6f05185082ccff269bec9f82132743d5a02b71d82915652ed934be45730f767de5a9178c1f032c2125e3f6c763d4610c426e36e3f8d79248a48a97229a57616dfbab3c988a12142cbafa2daf0cba14c897d3d5a4e8756e970d458407ed5d5586db94ee3e6a009d9282baaa02b3e1424fcae2b4e0a2f6e0653decebba1328380eaaec944467d6b199a4aad6880352d4eb01233c62ce62cff85c073604b5c0f44e933998732a9b378b49531908a114b3e1641fd5f113c2259a911eccad7b2e6f8ebc0561935b5717ae983bdc4c382fc57c1d5de854191dc99004ba157d0c7993164dd7576ca213394bbaec851a6eacf4035165db54897ba325de62793c11a9462d6f38e2c5a5d685a9d6ee7e3beb9227bd2bc018b90be49ba0479f60b131c7721c49af6a680fa8e31215c72d7758e946f3d0f5054b4661994866f832a515dafe2c05c4571b86913bcc9f01fc955dba38ee6b8c0cd1e3f9856764f557e065ead2a2c8ff11a7b29a75209b23525fa10ce7f3220e941589b54743681e382ac800d6c9bde900d43dca795631b6969bcde73a4d1d0204dde19bc7249bfc3b4be622f2e809098d69cc2a2fb68b4132128853194285f0c6f293b6ee542516c90a685b0e46d7e71e300ac07f88ce4c8d8c7b596c1c8260411c460ba21a2df44b30f6b0122c4d0c1def9c96521325600fd14e001b213bdbdd22a2a4ccbddb1f2785372be6e293fff06f2db48ea0b60420a8a8510f9ad9e802ce51885586581ec7d1d4d372b0d248017863201d77a9c028da31522ece831018e6f8bf23bdcc7991dc74b09fde3270b6d2e6e4e5e0271c8f30920d610762da8733425220aa5fb9ef6ec0cb53b3dafe79445f08d02358a1bd6f738a918b9eceb87dd44832943765484e602b7778f37ab1977692c58763d61b627bd0a4a45e74118c59a943c57f050345fbd8f476a46dc593d28cab5570430fd053e78497ca55fb27777d3a835d228a1b39dbb0f2165e1f001cfd6cd6a9710280a3d717af0cf8df18d6cdff17f9434498c43b953770d526a6fbeeef4f34e75d3b12a8473349e523251fa07ac97cf0998341008a8cdb5a424d18661c0b392d86c94863fa6aaca53117faff93e00eb1f1a65b3376387f76dbbc1a6ddb51e1cce7f2ee101a9d5abf6fb50ef132a6d60fb4c7b8db438483b059bcaa0b1468534be67eacb58e157ebb47c9047e3f61fd914aaf0000d8b8109125157049af99b832ed34295c3e173e22201983aea25aaac01c26dcaa1d1c4da0a58f132e942c380a63dd0e0c12eec27b616f348a43d9062290f4f4e2faf7636542f13cc3ac69fa5ab04102cef2e1334e7491bf190a2539410fe0efaf579379686405920fdd9727aa3b28aea9c637b924c047cb64e0886aa502b3751a1c36b8327491be1a1000e6836e5ab9a576397b83ad5b0071ab48c2d4cf35302a3129484ad85e67ec2eea606bb09ecccaea2fa2f6a393084a55ae6858e02ec5e77eb45038fa34368e1d9ebdec6abe8f210b6155020ab988f7c40284b99b66df59ec1ef88541dbd307c764248e0280a9b1bf16bd314a932b7ee28c407d6aa5248961b16ab8141ae55f1283bdd8e1adc382ef97020acbea96e99593c22eb4b23c7ec6b3cb59ddba149ee845b1526f0d849d842d4b15f6857440c7613253e056d040046d46f003840acd30f0288414679509641ec0db312e6b895f3cb975585988d801270006ee3d6cf4d2cd49f739849dce79b28be3e5ab23ce456d7f1b83830b4da729242205b0e519b5243d32442d45f5a933d1b57bc54616613cabcdc99b02a7ddbad8cdb2a41b46c33d2cbd9f283585dee7bdda5944796a9bf06514926b14ef8a23448e5de0b682e35f3d21b03d1486ff1874d9e9f066d1dbd3d77646b9ea2c98ad92ed6c2d5fd6fdd498e5e1368b01f40c213a9291b553092b267d4d4e2b66ee9de7724853be48fae2669199da41fca50bea86bbee0ef80d417db110f280a5743e6ea6591a7ae3c0d2cfae3ff0df82fa5ff744ced017c9cf5d0299f56c91f212d74c10074a3bac38ecfac33d410c98db4f71fc32ff7bcd37c7ddbd65860554b0afac39bbaaabad4a771058fa957148302280374f43e00c2ec637a5c90685d4360fb4a7db0370eddfbd38f5deb3b599e1214b7b8d64ef8f9aa338da87b5b8798c3f8ce4d11d3274dd049b2351658194d694fb5354294f5d65a707e3095b474b9b875d7803c09a4b2e956069bb717d3ff7c3b7440c5ba87e7517cd48b5c0d952492f4fe9dbb44f79b8b8b05084a050a42df5a8d81dc2a4fbb43eb192f5ab17977f7e89c1bfc0fa0665b4b35f14baa3cb5e73f696ef26e9db0863dc4830e6a82126bd348719ae43fb1bd3901ed4871dba7386c806ea4f1f265bcd75f2cd3736f8243577c45044d15fc45b70152acf677b557446b17705efe594c5a51836676625632b7bffcc4b4d3a47957acd7f592816ea859a1efc0f011f9b939443d23ee2afc9ea67c0f58a5e948cc9d7cd3cee09911c03e9d5e336fcdc587f69fa0983529e40b9649033cbad767b3fae9dc756b2f6d2345e5f92428824b3d14dc643005dfbafdf9af5eed4e2e7fc3e28c68a59ca4df4621e4373fb4e0094d0672ee87baccdfda530798e6ea4f0f70f6dcfebbefa9c69d35409ec28f677e3c5e0ba60bde71c14534fa47b619b9854fba440544fe9ed1bcf263a6793289288f8dff2148eb5f0db311efd1d7570e7fb48f6a22cd23f47f1a0bc5d4b028b586bb18d5f6ab5be523a86c60cdd72cbe5d43e8a7bdb10a6b3d38d3ffa003ec7d174381188cbfcab49199c6e59211f539bc8278956c9d1c437a9ddd79aee0f85058cd494f5a02924de60b93f6d5245b110bd491ab85edd41de5bd9abc47d3c6dfd99cf3e2f4f05d018f72661cfd9ac8d4c9cee662b02fbc6add2c9e400158f26c0846f36bd425858ffc72bfb071c1c8d584e5c94361df5fbaef4f5a9d61ece595636fda527dfea639bb60f359e855d5c3bbadbcd62179187e8aaa423cf00c2adc896c0b2f690829af5ad1c381b7b36a0fdc7b5393558981363dd1f7a722333cb1d8b0286b1bceaa51495982c06657102a75f30ff3948d1462873afd547efe95a5dff0948e0cae82b0054cc39e8add42940699648f64f06c93e569a5cd7cdab0390d91f210c2445d4c2d4008547ba28bed0cc2d3bf3d6fd43ad6c2839a923426ebf018a39bc31c84a61fb7c3baef4346860723e01b8437f5d7e9fa391465a7742f25e92b778593b32e5b38781a2c3c2d0f64210c1cd0054bfb8d5518f34db10272fda81c4c804643757e36a7fad8f989d9d24eda4bb73441063f87c58fd0dd5c7805c9d87359a0dffbe736e5f56c07f785a001bd2090617f888ef6a17285790c7eccd30294683fc32224ad84625be3f0937bee3723f2094212da263f23e2307d27b1380d18428fa798b52f35ea3f2a0f73b478dace52885305df9b111c6d8038e3617d6a875efce7c027206cf57c26aeb6e8161aa8488b0d01ddc9b9d48dd4ca324c179d6a34142e28e9258c1ca97648cd955a791a3a7dda7773368be4d9caaba4efab38296871c53389a325b82da588383aba68ccbedd65d72e6619b5c7ce57bbaa8cad4d42725790773dcc509f10c77756ca7c083c2629b16ddce5dfde5c48d72b407f5e78b25f903039e28e7464811b57ef258538e48096c01f72bb83f11997e07b20d5719e47e3433c0aca23fd6f94dcbcf7ac3b9514e7b38232e16f39246e4881343aa3b29aea3ec8978c4467dd6443a864f5cab45124c6b9b8e9e67103dae1e71c06a58bd31571443b5d5c20450 +MD = fde762fdc4ca5d5314c9327ba459053f2451000a59823a2f0f29512e7c7bd4b3f84e9b066deedca820ee5f870ea57731bc21e42081a26e0a7390668bc65b9f6c + +Len = 32112 +Msg = d0ef0db46744fd576bb47ab9f83c9c67f27b939c3d1784c1315d94304827423d1a03f9778c91e52b442d072a60ce84cc672e43357f2cb6d7e16ef8388b4a19f634e7b608859fcc4686a8cd2c57f4f4db2055d6604ae53b39f0a52b1590644cdc07e36befbc3658b11b6df7464574949b053877a6070bb8ef444a554fc13d82f7793e40b5971e3173e9c4ab0192170b14ff1f4c8e1c66d8ffc7a59d6c859c645073425ee1801e0094daf511e3a6a5024ef4517da0f2be40735ffd2cf6434b99eede35edfbde006d1dd5475376e9e62052ce173364f1db9b52f69c2a756510cadaa060148c198a1f15c1049642c4a20e2773b9966381858fa573c8be6f52b49f1aa30bfc1b9985bf84887205ce9da073d5cd7fcd240b83c473beca106e72ffbfb8cd7ecd30c5b8f47311d9c5a2dda9f865c2b0012ff59ee4c4bfea49f92db8d3bb0800ae5307ed67e844830146ed8545de3c96590da99e94a15e6f9199eba9822c3bdac70dc6eac0ee09b7df4333fc01482277fe458d4b7e1083a30fd4149875124e5541e56b78a68a48bc871f19d5d4ab5c9c175f0b6c4a1c16ccec35104e547528b744645c5fc1c6e9db226506da6810d14dcde48acba0caff334f414793c65eb348f7100267baa9d45cd89a62d1627e6bd2485b722e262426206182222e73d3d6528374c558393bf287d04894836dfe1172af4c2a5e873173da4a7f07e904df791b10150ef9e58529a333f606b82f97ab762a3f1c2369f9cfab31c05f8a218784ecc57d4313678e62fa282d1f3850512226e3bdaf44758520d93ece93da71d5e00dca33ce6e665f86d2d87447ca79345ccaff4d4b8b52dc50ad9b3009a19dd073c648bf15d28bfe7b746b53e638524942aaa97858bea806456f6d6e2ba74c80265f67aa82077e752b28085264488297bc0e07c53ea6210ce967df1160b327eee21f4e7a7bd4e6cc7c36d7fa2ac3b226b33d41bc660b63f522dd16a00f8fd6218d5026ba6a036c0958e501d29e7089ff0d8080e536b516c9da183da3a2010021103816efb65ab736a67eae632919b029b41fecc9176be391f8617aa280d24df7541f47a3c7a2705a4e4905333484ceac8e62acef72f772546400f52611ca67aa404fe05d05a23e7e378e2fcc257a8c918590e9dfad1f6a1a063dd8b6bdb0f342bb0f0aa6d824caa94b9554b665c392df80f3ca2232ac73ebc65f48dbec4e9cc8afa6ed05a8eebbe371a59a775d27879e66d1783f676537d08cb06f1c066a0743035db002ddcaba3491082c99746e13d721731abeb6145bd04076750173cddfbb9f7c7c25df7e6fa5940430a4115fdf919821d928867f8af4cafa82129b3fca396b4b78f716d2813d60e2cf1e9ec493d4b323dd043e6f6a431284bcd8e78770c34f11cdffeb909905deea30918263d7a85ac04dda48aca3c5005c4edabd6f7b643318a2c5c47e5e03f6637c8425045116754151330bfede827dc95ea086bd9021ffa620d20a6679419197da80ef71ac25ecee1395ef2dc3836f1415b3ab3a59049b046ead260e91c795cc730c48718edea70fb88b5c00f9cfc0869a9a92ae7e14ef7ab6de7e3e4f9bec4b6eb098cba0478fec6b9aba41296e566516dda5e1a759e34f1dee7cc05bc77c5cf4f44748896b8acd524c71b6fa691bf9b0054b9a7bdc60cdcd64875b5c532f462d61bdb0f14f81f99528e92815c7f58c9199eba3a2a44c3aeec806d6fa45eb53407e62cb82fd5db95db68b5e2190ce64e021efc2c5b991dfa7a363fadea79ac956d39f60e27c0455d27fbd22c7cc8dcac626bec08c241504217c058fb08023f196e9da39b9d460151b0ae83aaf841a066b2fc0649eecc2f184db545d17d96e1329477c1cb00e584061df756f80c05d60f6c45d78a4197eedf748b82bbcb963773676eed26e30d320cb87ca89e2863e208f6dfdc245b43341a24c99c24728ea64e6fc97239c45bbfb828951507fe0a58d60b3080c2ac4c836ae6e5feb5f2feb246163ded6e252f71aad6d718cfcd57af08e1de61cfa5125124337726cacd44efdce322db5e7616fc575bc9104046da5914434ffba5e64321d882e3b0dd821fb3855f2eb8654790b4402fd1b813db10eb8a87ebcb0fe03d7a1a6db2098881eda1c202a7f12d0a3b3de7bb876cb4fa89dade28583c58139fce4c5c68ad366d2d4f35462532104e64fdc08760aaae35b3bb71bd1bdc0900b892f0b78e2881a45cf031c23ce7b984ac786d3bd3fe6a1d0ce207be8d36ad28366caa3788e7d4c7fb4969ef358e733d7032401187d4630113f2e29542b8bf0a87bfdb34ef87ba3896cf2025d592e7d96ebfebd0c2c933926772a4e9d2feb9182b01064838649c76ade5f71e63918208e685c2d23b49563155d5c114946515e1aee4add9ea2b1612af1271318616dc1c7608579e47d1457e8d80b9be2d786fe771bf54727b37919d28f910f7a37f50b4abdc2cad7efd8bca7d28013f04c531aa12157c9a6216a96689fe48d942478a31e655b488573a83b583204a2f90c7e5aa1e6b88ca4534c81f70869b7ef91bd344b42981a756f4e7c05e0dd70877fcf657e5462b7a9b3e78184b468b312e48d64da3ac0692f4d9026b5c353a4210d10e440529c733ba8023f198a28a98587b0dbd2371d5c3c7337e171c5b067501e077ef0c7ade8e49a6762bd72f3c2d1e0ee423b20f51c234b0b5740cd3ae09a1a7ddc959dde3d2bf1dc9379540f257d590f411edd91d06c3bd32d2ac43b388a693ba637bb779b98162a7a5418c5fc1158da7f825539a1a0ad590e3790f996a5730683de09c029b46f19be56a75d6c164718a56f7235b7460863a0701abd2375a1a91b936f00100665700887e71f9f138d915aed1bcc39e6b4ba8bdc4ace068159ea175dd581771761f9fff0c153bd90920d470538474f09192678830976685104931f452389876dc97a4c981d40ed15be5414beb2ee23369f6e0f6e3dfb716e0b6ada524161679206bc9687e42f582b792d68216f09daf5ae5cf7a4cfa6485fd438f18c1751410e818786c6fc6826592b62eb3458e09fceaeb6d92da8bf16acc9c40bfb8ea03a67a1a2c45c4f337e283cb9460155bb984a07455c12ae8e02de51d8d1a88c987c27cdd7f751c4d8881f14fb21904fe1edf021d1295acb5a357cd33aeb9afa7f2fd56fecc7ae429e6ec61bf023e72c9bc7486422e70de66dd70eb9b300d9c19e7afaeeaade7ab3cf55a5ba5ff510d6314edb39ff3f34e70d0f1c6a0bb86ec73d861db2d9e1bdfeb1674557113f1333eba9300631d9d6b583052f4e0abd60f6a47bc623417b7f0b8dcc2d5ccfa8f62d1001d034815cfb3a17e2cecd78b4b7351a807ea9a952c9c2aaace52f5fd8c3abea7d412cb471ab5d10ce824f1c487c6be8bdcbacdb0ea20b522ef63a89788294bf460d5595bfef06b8f0d23cbf1fb682575b38949d5813cecb7ae7e3173039d2d883bb16ebefce1d557146fc29e16d61ad824ac9b8d823f35eb94094cfa7f24c7d5dd4d97da8518b307866f72237a9f032598bb3f435da6253138ab47b86b4eaf6fcdf0514937f36912ebb9672c97317300982ba18174003f2af4babe17488948a87640278576007bfbbcc3fe03ed2beedb9b747ee285ebe82b60ee0ca1a74328226ec37719dfce60446215b363ecfcdb292b3c03c0d3b7c4d4f58bdfd1f83ac2603fe0ec70d5cbca6f743533a73712cc7bcfd8fcb71df2399a3b3a9442dbaeabe4322ee414e876feef7b98db582c0c4745e1d1a63fa539dafdaa60c65e923d59211e03fa90985e9246e0b736e16c47b01a19ccbcb509ed0d71bba4f29fdc553ea93c16ac5e55f109084c26c2fd5863ab5ac0109cd1cc8a6598e75d85811a84d0df14cd55e8b1cce7a5f65dfbe670deadaa8d43b2f06da067c5c6210baccd5ac44540ae93ba2c40a292a7c36e4756171b6bc9ecbbab5dbd789ad065f16d75356d7e4810e26d360ace60b90d869a78bb99111e52036d2d303c8a8eb2e36d92a350ec83bade5c6f69bf92a282d15a492a8b5ce34a26b04cb71817698e3e07b63303029c02c412291c1aab0cc9db0157e28691c10b921f4c909fc3e95e8dd65052e872e96f50290360541c5049001a15820f42303cd1f4ad8b380296ba3f53e18195900476ef0b7ef4f0590596ed1f127779f0a94462eadfd57575fa17eefafa5d8efc65b01d240c3873f3a529fe8acf317b2fa4c8c16c542ddc707bfdf955fb25391a9581572d2bb9637ea788b0e7bc4e7751ab1079f3bae2d194a4d30adf74a7287d1c8119616dd6235c9519b0b06a3cf2f934d2090b74930954fd4d8001e721d1865325f07b333d481ff6735a6f497b72a8ca83db3e01ccc823fdc3f567d343c8d8d1f668d52c5d462b342c3a8eea987ac2e48c8ce5f2eea2a41ebcd77bb97b72e73168eef9b994b220e68abda9be027fea0b727aadb8873d37e8bea2a81a376433c9f3ff735b91f0737635701a44480680b7dc40ffd304dc61d43fe38776161141342e16bc92d3a5a56bb2de8b0dd7831972005c56d30624b479b716a44d861e91e88dc14fefb826295f6975668b4f8a36b2a5493d29098a9241cab8691115c0985f899ba7d2de1691a9efb1273d0e904b0231842d556d92adb4d155405123bbd711b7e25eecb3eb50d3ac3e57b39319d8d91b89a1d8c0c1495b7159e49e5e74d0a77f41cf7db808f9753569725f8bab62bfe9e63533919b079e0142a04924701779664694367913fe0701cf01b146a97b2f131651e66e746b0527bc1df1f4220e10034d27876580d0f197db805952b8749f3d968271a601e6195b02b8296c2f46f3bce203f11bd414cd7e1b68a84e4d0188bfe33155d6b7fb52f1d3094feaec34ad1981b3f3fa822c130b0b353e87db84841088f9137f0b3d4aa2898be60edd6994afc8a210801f993ae527708c9dd88019d604443b1d800e58e3b2aa7c36975852c60368c74b00eedd930ca502fee876a286c1ad2d209af1061bdaff72f09e836012ee8298c9ea9f538b074d32397ffac6995d9e7a36c077fad16f058adb576d350cd66a057b112d3533b3c3aacc036eee84348292ae95257f9adb27043556884a2a57898ddd290b0b23aeb2dd35175592edf30417169d6c3ceecc0e7fcd206737e1ee8b927ea6db4de1349539f330415c2cf59d680d2dde9b33ae166dd1298c56ca07dac3cdfef065e301e55184c2b492c7d8b915d0eadf130ffdc95f0fe66a5f493fe19259b5fcfbaf732da4685321ef54f8e1a12038e04cda47a1b3c7eb8399f5f34a7e80405367bd24d8b32c760bba4af2918a79bca4a138f83a1c97bd5a9f46ce7ff8f04286428283610e3f8ff48c104263322bca8ea8929bfcea0db061e7c23dec9218211804960b610610155efd5b64b148d506f0cb8daf54bc88893c0bdeae3aca76509b366e49534b5cbabd6672d6163ef3e68da260befbf4968c4b6412abc5028975625081b9b23e63d4825ffd02fc7516edb795d2273d32c65e029904c325eacff40fdb66d8f85fc3e760525097fe9bac80f14e5894a2f7866314030b60d7e3c851164f9423b0400b87b9e6240177132344ed144a63c7a3552fd24abd21557de110f8158026546f992a0173ddbc006c29aded804e3105c6b138dfc890712929c8b847d5b15d6f3efb42d983f43425070e20852aca790 +MD = cd5a6c8fcd32f7d6a2f34f87f156225c812cf5c80e00745123a34b4d6b2907cd176d2071e4ea4171893aca2c229f8e99800ad4614b00ec60659e3aeb330eba5f + +Len = 32696 +Msg = 456d397c6c654d8aa1e1c2b0e82dc631fe583744d7deb8cf4b8304720c8282c7dbe71ae8fb3a4832e65d6e4940b76f5c099379ab16c22246c288b717e1b6d022f513280ca500acda6a5cd2fc8ca62c8a4d613dcd63bd8b01ac73f5591ef14744fdb70cef5001a40b95a696d0b4402742328d2bb3a7151b89720d6841ab7c0fb4599c6e99e583554ccf0261cea0ce850c20ddea64c813f9657a1eb6d6709f4ffa738af4134dcfea25803adbfc389771707f1b23e8b0ff4e1d2e6e872155a1309fb14949646e2d891e1014ad6465e511f7b70d7d484521413af5c4842843ccd92a7da0139432e45bc0e8597f0e0dfe8d28307ca18b71c0fb4336ea54f5206672233e58fbac803e87926ed1f800192b0e8c522f36b91b26a3c05ba6a090d6b825135b39a8b33f81351d0b43c14472b4bca986f0e5db2b996239cbc110ff4b0a18813e0bc3b159f68fe7277882e2fee1be0a328556f788626037ee034b4c69a473f54e96f3afb5e5ba7a2b39e2e0a7fa3d34c0b730181cc9c4412c33fa7f16cd5ff7f3a2e1b33b96e15e7d4c8948544660b1964e1b43ce15b7e0ed1bc49e3cce041095f634c8d3502a1987792022ed0e50071e12c1828690609b998152b3c2ef89c79c5b95f3655dbd35b08a4f74599a34c1becbc7dc2c80e8fa982e4bc5907816a57199ac3ed903c33a5f45bd4882323564e040d85aa92e768552ea58dd8eb1d5317a7820b0178b64aefe7413a54f1e7b7aeb3a9a02e3e233c5307c2102a4e2ecf320c09a51083dc71bf4ddf894a8a52d8b4781b5dec3e4464198ae4d3cba528373cb38c12a92601508a949151b7511731d5bddd2f6317bd881f3468593b84ac33ae4a93e429e3e75fe857f12459ea876ba9116995016f0110eaa0d70108612d3cfd1dbb8a2151d1084f04996170cb35ee950f3b1f6588b186f23cbb7ba0cf2dcbafc96d850dd460e22526d499ba5795333013dc3f0e194162cc848019a33320684cba24656e001966013b4d4d852447c1e0abc7644975332ce004bf7b6e11978b4a8c6a9bc0495d0c79be6dfd6fc5a0134d43873fc641095dc329e4118fff05bd2facba988334ce5de52cb119e89040bfdc77961202f1266dec80786c876ffd666297aefc4546cfd2da12a1337e38ac2004b46e9b6e0a2ce5d294f6ecc2c8e12f99d9923774f3e3f3deecd8ca9f0344dc5c969b3c85e08f5e0bd3ea32e0be53712bdf0edaa0c0ad495a27a25fd9a4ad4d4a7a8665d938c02efec9bcaf6fa4c6c3af349f3647218e4be26fa863ac71381b64fccaa7e66761e121e308e2ae00ad9f8a76ae0ad6baf963ee115566861d87af2279d2932bf0d70d2bbc394d4a768a7d43f1c5a8ddf18129f3a923e904fe1e71099e28881869a21b62b1d87fb36aefe562427090db49c81689b3be5b87976f1980c657273a3655847d6060da875240507be539734d3810b226bd6f4ebc7dfc013e8ec8d11ffb63e0b2545cee24c11e56e7568a90b240fd754112c122e21637b099440816280d5fb8c7ea474b1a3bfc514b22dea988f900e86f705e88b6f4c4a007a29f76e0f09b6524ae9a41d6274ce7fdb6bffe5fd4ad74184291d0999e05682016e973e959c97e3f2dd082f717928395aea93fa54865b0b205f5ab08768c71691d908d9f8d4c7c9dc4848eeb816faca95724cdd7e8cc16f33704789222bc5459230f34722fa6e8c72f20c6320926cb8f6cbd29861a432f225258b9b507377956c3cff91f955b3b21ba2fb948f37a88de3bcce33e716d61e5f44cfeffa86059088c5d5be672fbfc53e22bd8bee4bd3d0c60fe8b4f729d47a4795ba8b09ad98be4c931cd653ceba4d4538fb502617180a068ac7257827558e46e2f579633058a6216d7de2a47bcbd097ad5de91de39dc20bf6148d545680e3c5f127c1f2576cd0701ca0e9447e1ad89c488a60bdf78a803d1a76f572ff7e002a8bf9699c6afcc49f692cf31a1fd0ecbcd32bbded9a08cd04c09664ba69766dde78137b4bb0320b1819ca090ea615955f14e70694153f2fc8ae1be214de91b34a801cfee672342c41f72131085a1059edd567459cb05630f1adae7868a4f759d56bbdfb55f82aaf84cada75f085eac3cedc5281ecb37558e785f72c9e04cfe7e6009d79808a3d1d48599cddae6dca586af151c36c66c62e12fe9d089e4641e6e70865804f7094fcf46d10702b5ad9a22ade0c1204116e3adbe0491450b277dd3f4cbc19aaf159d7f2cedd364d963f28746a2a769cfb9804a8f2a2579d90965456914b4a7957b133a944ac37fd682372b15c54f71c6d6a15e2fd51d96b27c9d394a2b91da4e8c69a8197257c2417ad094a7d319e6caf0cf4f2c9fda2a4c036e36146af9a13edc093e28eef0ca8ec0774a5956a727509a7293e1e4fbb2ea3050b2544d5c8aeadc7a734f3b3ef732f563b2c6ca67b1dc3633d30c4ef2bf3185fd44865d2af5e72015cdf8c182e6b28c5e746c98ec24d2467b72f8284fad9676cc532714f570982993d4b22c7d07a1e79ff5a75c94eee75dc1fa222b630cad753664b30f3c99826b5cfe17c67dd875b9d0bd2390028e6ffe9fef36a2fd6adb13d3ffc69670cf4a67e9c0764a15e7925579315dbdb561f07b7da892394f4693e51d9abe65228034a1b2b26a01d5a3ac5cf208b2301e27fd86e3ecc159090e8c3b8bbc26d5d26af5ab404a7f982d9b1832f399cdb1bd3f0b935af2407c9b4118b996da7c7300ddf1d73b0f03779e3c6a69c67b0c9d03259f134b7f9c2e767ccdd1d78c4bc72e57bdc7eb66b22a981617840312fb7c906a1c994ddb30f93b201006b637f13cbb66adffd9e7f81bbba6a3f431f816bae57b2897da9bab4759b983dadb64296e589966e19f1931e5697c944cdb90ead262e737916a47779342d7adc08fa740b6565e6d1f93511bf231e67cf04883f47d992cce088555028786d8d25a6b67c3bf653424fc7f5602dc9592a2713137aff708ba508fa45ae87eb65ba5faf72c4ee3e5a9232a8b6e830f150fb9620e2289f9321e63795fafa60331cead44bb6b3ebe582bec0c602118f430ac362547eb2ede95d78b681fe9a79f89a03caa00bb1fc94d3af4249604314668f68d4d66e7eb21b4641cde5d9f89ae3e8ee8ad9f826e7f3564bff5959e68503e7d434cf3af6b5d0e42ac3e9117a8d9b0d945c1c067a75a9127b411c7462abc11bedca666b81c0b1401be2b7308a19c911dc8791bb166e5f0f284ebd391f4e49319dddc48886996661fd7074be8f0515fdad5562a2609abc563870623086364234cab710196f099650b6b64b41f11a26d8f10cb440c1c169ee95ec34e2fd2a55295e9e73a7a3d8e91330fc62431720a5aa8ff5b21fa2aa0ddf250d5ad6edf42a1a40db15b98ace09b4518ae14b6bdf397b6f5881c6691e5132d21afc94bf5a680e58b61dd78cb39b3a03a7f1e2541e8b54797d4cbd80e5ddee825a44a5d925b80e8e76b389114e4aae2d9cba8e3aa7433c95ab398d4dc7581b1f165890a51dc121ca6501588168bb17b7b263da8540083cab2c70bd3a8c6ac2909760dd89092c4ff4c92ccb44c9997d882e144b9eb2825ba3461ad5adfbbceabd228515efb2a0a0f4eb5f6bc2398ae98a5bf76bebc45aa165425f5d10ddf69b8e02eebf3ee1c61db213c0be64803661a48031c1d5403816d96866decafac0ddeb7dc563de5c46cd1789774e906547f0bee4edd5c5ecc3c3e8ff58e0431ac0b9bcdd2f8937ebc7b90994ada3afb2629bc1d051302192a4af78515ce9e305a136e96856bab158f1e7717d8a432a2d316c938c855952f883e272a49b831282095d5a67627db46a6d61388d35b8679f5c6a1d60b2d8c1e70665bf413d35385ba135f8217b5ba8e8e32f4409d78ad0cf8b9d47940036d526d83f45706987bd5610c6a9e0c7dbf59bfa577f3c973fcc87650efa6f96faf57f9f78ee784702093cfe1856ea7185034b5be3d06d9e61c28d92c41c3a9dac8bb80419a1a3002d84d41534e8899fe13abfaeda1ee313781caabbc7963e3cd5fe9aae294637bc9197e8fa2145027a7803c19a4553e71f0a41a6882051c09cfcb6ed46b0c47da2b4a83e58e757a029d1c417c72b56c1eaa19949a0d6340be4a91b7973b705bddb2021a0d58f04aad474e68ade940fb99bc48c5bacf126663d649505de44f03f8e5d68d4191f3667a5ead2e2878966175bfc82a3537a1118cfb68c5b2e626d4ae4f1e7a2cda2d420c2baefe76910432251cfe3ea3e78dc6ac12668410c166427056604d4991dc61e536ca4612d348e23a6c717f814f36fa43c3d9180206abd1f18442930249af4a681895b177afa2f62816c86957ef4b20e67816fe0116560784611bd801720460373987bd2f96c0e270b45998924818def6b7c6a28880f367ab657288a19b8a47b53216c5a529114ba6bdab69bada5e8916fb6eb222c71256f919dd117d369f65846ac95772c712762cab34795c265ab3a9cb65894a692169dfe6c22eeed3b24e076c260f12f1530695059b23d0acbbe331a041b479d7bf24d264b82d90e36165c0bea348f048418152453615c2ede09c410289a03ba329fc830c2599ede63b4132dad791a53c6c5af6f29bab9d5a67434a6aa3f8fa5c107534559100607c9e74f0292985bc3e4217e5864271ea82ce8cd061371b5052f10398d990dd92e709556b521f717fde513cc088b0e514e774bd555eb973b8285a4c02f09b9dffe61a7726ce2ff19a9d182dfa726d91b708f8795beb81beac5caaa3254327cdf1ca306e84f5e18286eb158015cbdef44b67d82556704648a76060ad5239abfa3333e9803881cab0bf48c7c774fd9b894c748265d7856dae33d42acf2c5cbe8f1e93b470a3ca41e8be46ad68ca9019cd34cf859f41a37e5bcc08578d0614d6192e6a1fa44967fdb70e6534e8792be03c8ec960563742eeddfaad756b920a6904ed37899fabb344882a150ccaf3197553c502911f3b0c35a12a1402ef32a60dfec58c90b75d64bcf88be68384eaf14faf720b965e9f37e941e4dc9e8c7a602b5361c9b3afa0d4dd74ce4a47aaa33bd5bc1034fe99068e803cb58796c7dbc1579f2c8f60dd488c1c794bc0a7a0be61bde62a1f1852f348810e06759a25d962095e903e26c49702f0929eea521bbf0b5eca1a3aa210d82e62127256f72af59ab70e376683fa3ed1f04d3217a55017813ee47b17fa573788ba06637c5c5ba303f72a8c98f6e28261a2059fd93ff24a6be4a1c727af9a93efef366486381c7416303ffa360e22144a7c5852cf7086da33d6ae88fa205f7fdc784effe4f901eb49f8bb1ace181d56e4f5b1d53ae56249718b473afffb2a5dd6fb9c90193d807b27b72878d1c348ecd994aea1dc1d391aad892857b9ae6fa057dfcbbfa3743ca63802046ee19e492890dfbb42f3765fb02046be59b7a8a3f9e79b48e9141b8aeee35feb976df772bc933d4433418f6acca24a65cb6a787bdcfec480a6dbb1efc7b2272a7ce76d79eb5943e5ed26c6dea28c1adb2742ac3b9c15d22f737ac5ffd34d0e5d79ee6ea3677b7a2cfb13cb2fe4462e7af7f0a287e9b54a91d961d62f63fc6c0128d379a3a3424665c7a8fad30478fbc1a7c4f9d538659454433150f32c48c69204372cdf11764f4ced56e46c759d094bd1602097faaf55e33b59c4ef8ecab4ac9699f6da445feb2ec69e0650da1aed75ef32a564b2eaf5cb3c5ba078fdeaac9d5a7c4619ce97a0a80dfedf24848b0edc6bbcf6bff3b10a88c0b782240c311500ba4eb911e29616350de9dd5c175 +MD = 70848163e754f864efb986ed9fade0cce56011421e307cf9ae04eb06bf935273ba5f0ff868d6d1015e0ab5f854865e85f88934a7c6148f947ef0ca5e5fd9a865 + +Len = 33280 +Msg = 05ef6eab767f537fb2e12f2748b62eefe5458cf0ca1eacd87dfc64eebff09b50bfbc177f8d7d901ed18e09f7bda8603f404e231b7d68a5637b2e51a51e473f6d563205c396e6d0f688b5b398ff763eca2de353ba16403569443ee2b2bc1ea3883219e17f79003a8d3d20d412f468f11712cec4d37cee847440f4be1c83bdef29bb3952b91e14f76d5995156e86c6a1ae58d51f7199bab90bd71a8eeb5a6b4cd8595a017b6d692e1e45dd1eb39cd7751868c10c9954ebfcb77176f9272872e21e744395cc4e49082668c096e91de496dca859325595cb77fe76d2a8d9d718d88274bdb7b5a9faad0f29052519f3352c8282673aac44a04f6b4ef442094ea6568dc1900f3c66c54461f276744a05125e935db1cba74ab3af8361a470bd756386c5c384446c6df2f5a22ad92b843bc35496a1018e4c8d4cbdd018acdaff34998eb4e260ff4aa6c9ea5c38f7f2cf7d8f3713b51d2ba5f6b3a1d9d9d327d6738e96e287eee7e0f992481686986f34b3c02f9203cd49ba6d2f84260de0004b1a8cc7d618f4a5354f943a597b834dbac59c639cf2db9091db098e401d9c0c6411d94818ff3be0518e18e6ac7f82326a9b6cfcb8ea0daa34268ae6ae6fcff42b40bd4230a28b413da0667497fa5bc74a1e77216f532d3cab38f7b5f86d405fa89082dda76bac70006bc60da254d7b3653407fb489601f1fcf79b22a77eb9f6e2e76e4003c16514a2d980d956f6be9ec0c662b2cb19526e314dbd5642090061e12fcb94cf0b7fd52cd1dbff3a46d83265bdd16d8045e75e5221a4785178df47ad4edf0090b3c35da53a20a7d7aded145bff9c54f0828a67655a99b15c321b504f2ef3add020f65115fe98fbb394c4efaa760b90a239013174e2e429ec9f7f25ceb54ec316bae35c84048820586126695b0866491ed0156586a0cd078827d26e32cd3a69ebe95124fb343b414e7edb2a749ff4a6edb18eaba47c9c74b932dbd2835dfdc7d61507518176f8841b51abdb0022fed0964234aad55e9897062863faca4ce0065fa6ce8c1fb2061149445e240479ccefa1edcf0b212e0a99f771328e0f842b4e0e046e7ddcd0ae1160bdbbac8a8ca62a9719267590d43aa11475103558ec26c66c97afcbc0b838ace6268b1c9943d4a9ff2d02912b3970d8e69dc597af6c199700c8591ed353ec0965e6961b3a869d9561932b07f943f465f44f185d1bec4be852fd33201e8711516465a452743d4b1645b2697e02db0d71c6f4d32fa55405e2eb9f0677a83df1ab6c0b7d694f50245334f2849f4fea0524e5f5bcb4538c8fad52179acb795ed2400440e807d3a77175b6bb4311e75622a5d8b89c952f7d31700fccb7c59ad0fd38b46cafd4092a79a351756f7cd309ad1d27a73a7a410d3354ab25250c127dbaba04f7987af8c286068f88d08a19e9edb35b2960099025dc80ad8cab49e94b51ee7d496c9ea855dec6f75d2ee1c3e02c90fba5d4ed24ae751c9d681324282409fda6caf2eb22ccca0a115a5129d8d5b0db8f855fcc058e465204202344d6ef2b0f07e3f4066d1092fa66e8010b61afc3bda030c94f3caf9748691ea452fb94ff4b29fa389a91087ebf7d70052e6558ab5eb50eda1dcff7b02654c95df5a0facdda9379884d979bd681de58263cecb7b0e556875adfc950d8154d8918d6cb0bdde4cdc6aac786b3e16712092cdaffb41c7b0b03103c2fa1593dddc69b9d87ae7690604b66b16637e89aa0ecdfb2a43735475deac5dd0bd279c58be8aff1d9cbe206d36e86b3400e33421068066ce5284572d3a4416964ca81d5e0571c7acb4b676fae99d0741b220a85ebe46bb0ca6f9223f6994c894373b997637caae164144ef37a330e9dff5ab58eb8cad4245af565834c32aee5afb468319cbd21ceac0fdfb9bea406d5f49e7b83ff810a739da005ba5fd52e24b075d7cb138348e8ac2461ea025381c503d6a68d4971d5439b59bcefb7eb96ee4e9e4f8e5137e8d86b3c1eadcfaa461533ea7cd31c02fc3d5d09d04adaddaced921816a1dd3fc945f13d5c2bab101f6c8dc3467e039c4908ea968af4521139c683c9742d3f05b3d84711648b21edd27217474bb583a7824c4aea3215a7f104242a9ab35a00ef6e39749e7ef6b6aa28d0db5fd5a1268b70b386eb10d45fe4d7ad8d731a4fa767c10f80cef194f4ade92ee1f42a6973b0dbe3a5836b5a04517809b63df035bcd476037487078c625fdd332fec9337f27f8b84af998dcf1da2b0e1adde7e33c79e53bc57b306078828cb88cf3158302c5e473fad14bc5a333e47dd78400c72512c21e33139372cef717dd5c9a9c17ea8b6d8bca6de4123cd8d05a42149e11ae1e8a71f0b01e2241ea0b9c1233e1649eef007a2a2de645373f7b2dfb0e347520039af19ecf34f169d1f48f4e7d79eb887729a99a9fc6c12aee415352bf584423587ff78dcf7c52bf554f2171d5ba2f4faa6594bc420a38704bcf74f9c67e113083b61e5e3f58e8bada97ed2cbb46a25cff30e5dfa324fdbffe720d40a21a6ed01bb9a080ad5f05d4d84b6ccfbc93e718fc07f7a541ab93527cd586d7e0a1bf7a9707588587f34ca5e4f60aeb4826603c1777548d8c029be03d767c2ff0c885a87c2b90ed6dba1f96771451fffc72901ed7fb86f900de69e1b6b147a950e343d241a2d418ad28112f0522dc8e380d1949c40109884e73afcf7f3283e48f968c906de9bca7e4a1a3f815ae0506895a4e35422456bbb386b0020d56cb521b36c26b778c950ba2cb6a6a3f1256196eeeb17a08d1e8f3de6c2d41d7ba5882725887bbf4e7f7c44619b6fdd7fc5a07674ed5705e965ad12da879d764b9e5e633704f0a4ca87f626d011c3b86c89b70f0df4cc0d9ee06c43fd0286b4af1ee0dbd227aff052a865686062cabb20364e69a2469d3f145875d6367bb45e0eecb699dc3add2a50a97110fbd4ab6e04970c8d1c2cf323b3946fd66c3952fccfd187a53f85a5db2b53c32888b18f597e739a8261eef642e45e0348898586165c95fb05e1502d8a4b6e03b7ee3f9d05f7919f505bd4cd230d7cd93674a778351c00bbc3ace39dbf18c2d9c617c7fef9d8bac400f026a14f98b798a715e752e077d96fe786851e03fa16eb5cea90d9bd87b6b1990a2b994cebd7e8a4548c39a0d5eabf775980d8dc5933e4814fe457da6e4d0d23902cdea470a4733419e057fc9ef9517d0c1af2d59de26a3d2e09a0d7f34781a76a7197de8de6de5f4c29d47c3acfd000879c94732ee925996f48db3c806bb42b8042ed83ac64d42dd5b0d8a81234e209b24ee8407410bf9cfbe930927c824fbabae7081a34e7fba79cbd8a098cf02f9f757713c3d821dd4fb834c85f4f54f95900a70f2b8d37fbd48a98122611ca60cab8604084c0e22ab88f71cb2e60a95b123acc2b3f1e1c7dbd858899870a8b1d926352950c951d4be168e7618419491cec509c83dd515e296876d647b5ddfb0d005e933ae2c098ebd22cdfb0ebe1fce5f02a60408d8dc4a6df46cb4337f4e2d91b916b588ea71cb092c1a1e3ea20895e24b05f89d73b179d2adbadb695b50829ece4241799b47042281175200a3fb92e92cbe38744c11fb54f1fc4c7588a35a37940059e8a4e5e4a9f03a38fd1a454fe426132615b88a49758f95a9f07da30f2cc8b5516e9dcac70fc7e725ac9b822753a5b9540a4f86eea4c50b5652a0cc2bcedaf5da63fc8235b496c2ca67ae3ea3c84a2544ca8794457340e1e424a8ab3aae292657712798bb48eb4179e6b8e76fa281db7acee74f086171add5eeebbcb63b51eb4b1ed57ac22d13e7b67241f8c582cb30689ff4f381efd5c3ae09e07d1906e39947b55ca4d4e1cf2a22c2d00f5fe9a4e880a6174e5c8efbc7df0e2d68fd813cd4bfdd43a38df76b8d3130f97799379d586589e49bf2bf322edb84390cbe4aec12260f10f337ee8785544514edfc0d22f489a3e388df01476d35d489d4e5b46fd61cc35b107d3781a71e87b8cf12cac4616f9c7a819be57a0770a7a66e0e6e469506826897c8530866f2715b8757f0f01389dc301293ec68821e55f51482d8fed375d4efd593d18a49728a83c34630448f5adb9aa86176817191681c750d74f715dd2357668a2375d3014bb7ff67e91039752320df8f24533a6c66831be8d2cdd0bf0615d6f5d95978412d7e98278c11a64b3b591467766c5121d9af55bf62f1989df5c1837153a3bd94b83e2a2fa9976a5f9ca9e3a4dd2b6a342a17defbb5f0d1fc6ae1188732f3278e747d21cac23fda14bf99c9a1d91eca25e052f4283c5a215cdddae291f7b62a90dab21b9356698a2d2cbf32f8eac5157984c751bf767beb21e7359e4c026b5b4e53837413e6a30eeb5c70cc1492acc091900b644be4f4a3fdef8797ffe3912e098757d7c6e38abce1d764d18f513440108a8598381852f0438f275c383bb60764eeb59326ed7f38a325e1ffb3b70a3888ecdc8a1e80f534952ebb778f4b489be2e20342ae54fee6a1b09eb33c348d0e4d3f66a669af7a056546aa666fc2c7400619e772d7ca986b601ff178934a3b35dfeaba7994045fd7267f8aa54412c09840fed8803dbeca2b50bc60dc23789343d3875e70481ff51e7b31c2b0c6bbb30915e93d174a92029b062e833a973033bcaa8da926d062f86fb5f5e915423e2d171791ab8488e4d05ef2dedf3059118b04e7764109d77dc83f7934645f511a8d46a860aa746347c1dba955bb49d38d17b0fcc9bca5c7b0f3023795dadb7dc1521c5aee9053740b55959c2bcdd3a11348456d0062671bacf75c6362a32612c31a1ca18413ae35dfea113db97d8a4c34cb46aaa2d8da6dd243a29f5353cbdab053ac0ed99ae123161dd3209750ca3f71ef195839868c18c166795dc073491ff98d5f1547ac98c64e5f5fc73dde1ff55b4241d83d01d8b6eaee450132780a6d0f25ba3766bf3189f92d1ba4257bf7f8415364bd15c16cc2cf399a2c31d8ac4c71cb21f7af494808a715ab39d6b0eed2d490d6796c4b94c6dee6fd51472b9b28b1dc4ad899d148acc897631ada2360ff75993b9f99170d2daa54c302dad743ac5fd7794cbefdbff0de30e7a99839fad8b4cae88234aa2281b221afa375625221dc5b51e677151a6f7850bd78a97b291902a481e3c77b614d76dbf7c59f633333a7c659186acde4930795390a864d582affb48c16ba0165fb68c25febc140635c52a6f364f26ebae60c7d0ed1a74714790c896bad84e29d1628932c7873806f065d7ba55eb69de9e30756836094fefa9da981a51ac085731806bd021e3ea9b2cc38c303681fd21e1478d05b29c7bb5703674bccd0f570849bb3be652f8b32db08751b8203a681a3f4f168eaafc822d644b63647828c2a4dfb8005ba3ed1a2445582c3a5d3e343380ed19eb6650ecbe4cc26dfa9820d193bc22c2195ceba8e8b3de279f33b4e8d36bcb9d042ec13fcff2429a66761e0c3ea89f8a07c519e3e1c2c249cdebc40d61ca91aac14a7705ca1c74f3905a4bfc0b6ad75f0d26a0557739ac9aadcc982a4763e7480a0199c51693ff7f608bcf2863cc744913c6a78613e24323272055c7ecfe7380c79d50081b1f8d47bf53d118af941b5001ee57fd1b8330eb242d266db865e059e064c3554187c35193f87955558b767dbfe6d842f9e51bfa8a3d31a2135fd4dc3d9f1b34f0954ba7c6c3f066bf792dd736f651dd13d0aa5943969ef165b3f710c6957f2d900fcd513efc5ed35326e8664c66ea57d30c880f358096df162af3fd649018c989bef055e5ebeb257b594e33ea7dcd36a0605b244a4541f68e8c6dabfdd60d8f436a5dbda1d8bde39edc0745f9841f05e195cca1682cc6bd36a110237ab0870827dbbc915c0aff952375bca55fc30b49 +MD = ae1c6b26050b11061fa4d014b61ed1c3ddf4ce072a7fd0e1a622ed9405cb327ca23098e80b79eca5c7a920efae47d43a55a0c7a0c4ad5f8cc40abc6fb6d5e839 + +Len = 33864 +Msg = 90a28c1b7a66f7fbba48aff69977f9d3150f52a63eeaf947e0baad026254b890ee4f2c46d3ce6d8d279aef92b074413f05a94b69f0e6d44b174e4733dbcab67b81a01fbb8f48ee3d797bc4b17d8c7722ccfb5a29ea48be615705b81a6f2f25528fbeece1797b83f3fa12b5bbca68a266b32e074ef5b7bf71ea068a21e62c0efd61d11b1f58103397f0884a185dafcaf2026ada40d9dbe063167a44af076878633f0035dff3ae0711a4040b31fe0af7ae01d65c685e5d281f24896f2b9b8c6b6e7073c18813fe05495eaf816c77213282f79b142c4ce5a08d5c5a92ff6a3fef053e53478280a7372866b033328f9b82562ee08af56a1a4e96051635923c2a0d10efc84f340252a5940330a9ec0d21f012ecce472c81a53c2068e4e14cd9f4cc78ccf9620861a756767e576c00ba5a839e7a8dd237592d7214ceed1c95094635231d0f0765644d52b71f4c03d85eef43e22044b380ba5bf65b7d5971d593c84efa2a31c7b3d5eda13d2e38f6dac18738c7251c736d6cd7d2dbbe4f6574402121e53a88295b7a2e4cf2f342ce70aacb6b33d33c996836480e7ed8f782dad8fab6cd973cb5c31bb959bdb6931201e262e30f70ccadd8e257b02b157a4f7023fa13988774f3548235d385be524af432f6a84445f6382536abc2cabb00549ce8ca423053586c76764bbf3454a8ffb3602cc3b99ae0c1b6fbed4b4213b01ac7f1114b7b4311a792bea327b1c0bdb7a534ae3b55b7b2d0f5f8c4547d65b3285a047834639ec72c0e23e412e44ab8fd3278241802e395ed49f7d9e462f93106bbeaa707cfaea184546db789b53ac256c2f23563a767b1a11abed303d916513d546b45cca6b9c836ca64c3930cd7024cbd6b8a232b8b2d73d1175bb9ca053b548c4efa89d20864cadacfb138d16aa1668caccb60789731ecd4c8190f1d0f18d3ca5d70483ae39cc9eb782880ec3bc62d957a9f2275d3e7928c99b40cba7a1043785e4c10c69198ba6425d17445929a2741a0ae720a8775f06154d5b98a8e4a2bfd1a39ea5e5c8125af9f541bc5b745def8e4a1571ffa038bbcbf231c7395ef13c159dddcea8a7f9233ae587e52f1eeda231020da9c75baed03a447405ed526832ce2e0f15264b98a581985a3d58abda128ead2026940c19da0c9e82a34971804a67feb2e7e32589486aa849437c8dbbd713b60d76fa34123f9f6afe4db23ec1d97f6a69d573c83392527fd595ef470b664ca716194e6620878f543753dc1cb576710b845c3c963009d5997f83455a3126b61aea9c1504bd3838d4ee541b9dd397e95ca2eab2320715708fb7ba0359d5bedc6bfb6df2a250c8485753cce52494b444d8361f890e114b9fcd1e989da861852c24b90d4bc173be2a66283ced6381522008ce59059ce722cfcc04bd98d85d2011dfa408a4e4ae905b8bdc2288bd1207e758cc25dc6101219d270a87796c210649f76cde728e69d55832dffc4ba3df3c1752c01461ecf7ce6448a084b3d665ae210643fd59212e03ace5b448aaaa31654c814a932ab3239fd1bb6743dca9938e3376f9f3bd3f6391c63ef9862a52c129d36ebc20bb362d0c41e9bf235848233cfdd3df40034bb306308900434f1006e06875955b87f87c9a517e28d1bb54ad20fca76460efd894d7786e68ee8d746b2f68208682157c8ad06cc324ad7a3189e09c6c39d4c768719c0a49a41669f2767d5f09d062e824d03510734335196151e2699cc02a2e6de1ba72c54229691ca140a99c334c74a3f53ed8e904f72d869dace0a387cf897b5db92e4bb3b60f55841ff4520fcd4f5c6264229eda620b03b5a6ae3af1436cf35e2ea967893ad12f8761bbc5c653dcc0902b8a2f3414465b32760eadbd145d786b7180833326331d33cc6c52077ea173172b7c04b27c740fbc81ae861bb0bf7cfe3820393216c9a101a682a143bc31e65fba74a9d608f8938c5fea4ecda717639ec924e4067ae95d89969b1dfb8b128ce27f00990f5868895a776e822375f9eeb5cafb3e30c136a533f322329f79a7f937dfac5cded938438f4e97aabd9beb50dba40f824198260a89729479cfe6869de852e45fc509dc74937bf2330c87404c98fafe6aa95e2c00026b7e7ded7012fd4c8f253c4278e97f1f55fab590d6bd3456263451e881dd2827644c9978a4f199fcdafb5cd794d3d57b833dacdaf896aa9bbc4dd27fa1ade570e39b6701d386e671cce34c04ec201a507a27835b6b8101e223a756ef4c12ca676fc76109aa678533eb59845aed52a006b144c382bdf0ecc202dd79a7dfa049837f7d12108807d8cbacea903a26e02926bf11f7f15e6acda3c05c9549eadad55d8918f4870aec63a18802fa33175cf838fa2b9b17cb43270ff2a14445ec27004e131772fd9179b83e132f1cc64d2dafb5f8de2776833e8b8f0058011c52195cdda41537e4ba543929c4eb827426d6b21641b6279e24a16d797fcd464dbb364d94c28e9ddcf3f088dd13b4c5cd32ec91d25b4005ef1e103f87c78dae4a95e2450bf4e01f26bcd309d096175121ffe3e182ac185cf9ee1f84128e2583a360b1f5ab91b6568293804e9ca28fbf12fc3103afca8ba73f0303dda22a0170d8aa39b1dc4f7dce51166cc9a9ff8a5a30a6788aa22d364f3efb71aecf21cdf06ae0ce1c4674a2d112a40d0d70d393ccdb8d0ee9124a84ef6a35ed79f21bc77cda93039752b7c21967cae57c99e53891a42e88a168b913f25150ebb1a36eaa90983f5ea5896f580190f99ab97d9ae512faf95a362def5fe284cad0f86b90d3b6245453e97321d1245ece7126a46b25fb707c1839ca53c54a650241b0a328cf682f6077b57875d9ebf1a82d56a6ec87a58525370ed69cd09472a5c27cf2ad1a20e9e23eac31b1bee32a1503cbed85669ba9933b37db012e5b4e13c7bfd294307b14580d30079c0c8448a3b8e8f0cc6f586e44994730572b0957dab5fbbb54aec11f4087e3926b5f59ddc2a1504937ee664397d5af7ed55319107931a31584e1bd6b3a23294ab613de69f041746f4e804fba2b74f33f223315186dbf58899b75aa988363939912b67c7dbb3dd7cb76a16f426dfb94c9b45787d026b38e800ee72327dadd951607d3de7991eafcf656ee6f6cddde16d7021cebc832b2b7816592b1899ed5b049ebe85efe12dd467855b3aaaa0990fbcfa20fbb61203156162614c03e4df0779d5550886b9c8966b9f99dbb8a6fb8b61c0aac614b6db40ca6d6e9f9d676b24d98cac8e552bd73b043c9091c7e8ec9c854b28f87e789bf2dcbde9ea8b297afc4b4c2adf043e420c59e3a8237f6c528b502100599b5e2b74bfdc38f67832f2d5f89c37c23afaf151931c495b8a3c17a1e9cc9cb11473730e9a52c58b0a8bbdf808043b009f68cd52d96fdbff8d60212379d462c890bc5b0795a5f770e93bc1ada20c9e61dc8fbc565465c6d833de5a5c27bfbc66b843cca9da5f356fbe4ae83bee3dc9ad9978a7a72b8572ae21c0a8931c171152340fac3a8e07e94e31c118ec151e22ac7d29778b87574749020ef50f7f63c955ab28e503dc267ad6e9a73b063f38122631ac124b9064ae707cce2819792c4c37c6975d4cea4350cf8f0438d2931102e25d09622f6d330ded370a29f932f901c02c63fe5de0e6d301cae1f7983a3358a9a8464e7e474dcd86dcc9e0f7d15252b78594ae7de7986b34434560a05c267e43ba6dbd82453857041314355b7fbfa6e67b3357f527df802fa2385b311f70da783c859981907e122e83f2106c63c96613b446e00ec7467abb8ec2d094ae9bd610d697c9c44fa665ced56b5973a6f7f807d8d8310def52c1a0afeca7122f2fd8d22faa3593ab39baaab187f8b86fd2c58a90ee323dc98dbda6aebdc8f1cbb24a87f0c6c536ccbe788cbd4fd583e7e135648492cbe57a7ed694333e1b79a9ae93f7c0f361f4d9bd063aa4cad81c35acb15c5bcbe44c2dad7534e57589f4f2aa1bea483af116fbbfce7c0c00eaca83bb9f3bbda265bb08a3004c6d6cf8a8cd2f4a2830a25de4594b371c9efaf1d7f69768c9541d367a33e7e1a5722b51de63c488781f348da61ce9a9e001bfd689b8c775cec5473fd1d7017e079db87ddedbf13da4bdf769a46b218c92dd578229f1d32d12bb2569081c7a413a961d63f05e3ed172b3f3da266f7c49f8dccbdcfec844f75cdcc19a6629d991050462ea5c1434acaba930c6734f8146dba422cb5266a03d76d022bb3427a6d531908dfc69245a361746b717d434b9ec02dd64396bf37266264050b5bb3d6a7786e1a88061b738d87d338fb39146aaa337309a0d92963fda35d4546e4094abdecca0ba5d8af457f8a618c084f2acded44044cb2f0f7791006b3335d00e53f472cb74cc7d2d043e005b9b53703e8fdde5e6c3ff862abfef428f06fbc26ca3ca9b4b06e5c7910e755662674f61bf162d40f1523efc2b96e2076bf4ae2ba1acb7c113fd0d23003b85648322bc3ebb6a584b299b91785923f1b8c5a657f5f695424cec024c79c0b3f5908875a2ef7bb2e6705646ffe3fe8fa4bb66c3fe07b387f4a49ebdabb11a9d4d4437070a5b47175d163ffb91236001837916f4a94920a95331f1d531b4562116e75a81fb6c67c147a4ad614e21c7a2175a9ce162a38424e95cadf3e768bc69d7e1b78a7e0922d72b8468203ec57d9ae7c7c23130fd291f3e8b99bed3b6949a189917cb9a1ac182921d38e169f8c9107b264e8d1c3f55c3d8277edfff8625df627941eb57888ce903d7e54cd8a0f22c5ce0099c2c515138419924fd73c1b85e3be8ff93bd39cb35061a360892a64118115ebb076a1b65a5014853c1364d953f2e4e176bd516c68d234ef4be9ff3fef922072c75de86d8329e9bd3d24f1404abc014521aa607c51ae3dbe715086e71fa1842238f8f78f409a2fc6bdac9fd4dca7ba0784938f50f03cd2ad7b6d4fee1407a796afd85daff4f95d2e57ea9efb7c3e65b519f94c6ed716aa18c480b8d98f6d013c766c895422ffd840768f9d48bbf89ada4c5c164a78c40a9cd74b602dc42a3780372618f05cf647c9a40c19312e5edff3b62c7b5857bd9ab64e2db44f64c790fe6ca57b29057512165ad0714915e99b7dc1fafa3ce67bd0d1739853d2e3ddd423716b2e52af04ddb3258d53f5351153f50a48015cc777239af21b9d4cb3d5478c0fd7a0f1cc2df12c7e932fc9fe7eafd5f9842f2c5d48295f44481f11773681a4728b81aaff48f2eed072733bc479f5bd0a4fe2402a5758bad47e47c5808a08e953f74ed28aee5976c5abaccf39bbcbf6d6fbb92cb13d181a4d5eb5ed724843d72e9b470d21a6ab60c8bf5af8c08ca93fca28124684620e19f949c7ddced9d8fa5ce828bf45da5f19542e0c4cfb8503e46e458c22065e912672c01c2ae8e72edf897e526d5a21eb1ce2682f403d3d62813de49543c99b57cc4462215972d8cbd31ece629be0f5e5f80e0e3257280e4b92b375bc204090b877d8a055fddf3716819748b7cf7ccec6173180b4062e80359559897f4c0de739b5c9fb486c907ab5778d8de08c80250216f75032e1c33ba705ba903d3b83f7520272e3774a391c2f116c0e7b379d913053c9fd2d5e88892660311aa4534559a7ea7de940fb3bb3c9dbad2ad665178bc77a13f801f0d0f12a3167991337b47691da458d54140aba3c52eb9380a9908d3de68fd16f3d5f2c28f5b88c286d63e6b66e64302f194897ed0381b90859ab0e1a257809b3886562a939ce744248d6226bf34482107f57e5626a1a1bec199996d2a377117d86965d3159f3d1ff7e8da2491570f3c6aacb2b22f30f2c9a4e1eaffe0cf7792bac647447f2d335be62ecfed45183f5a04014c1a52afb7b918b9cc1f2be93b15c6e52405370e7101d8a96807413d8084bc3b7416fae4979604686756734b64a7e40d239fa70a9e19b79fcefcef8e7cc17aa4542f8c993b694f37e22b21be9b51fc886c9935e962a96a592854b6d5d8192682 +MD = d75043d6153f9d26de85499a009646cd22ea2d35e1d7e1cbbeddde33efb7bba5f3ac5de36f1752920faf7b5d5c4a2bc9fb4c428a79a982a80410933e2edeeca0 + +Len = 34448 +Msg = 445531669de300ca3de49d56b0850e465577d271b5f2ce7114fa8a0446e19db2c40d66b0fffbfd05f48469eb015f1478f7e87c7d701f2aaf63f4e804f5c22f609219df713dc032d724faf3897809eb747bf19d65db7e33283e88b7f21e7686fcd7010271fe3b888af5cfa2f7bc8a7d820a1a9def9d16cf26ce3f5f9468068cceba4e3977eb72e5658e8addff76eab0e9ccece4e45ef0e7ef3aa048b27c79271d6487eb4dac6f33af18b30e674e326ef3e8eeda0bc81264ccab34db1601d74133fd347fb9e83a58b1bad39cf8eb699ee687a9e72e81862c0549817e87a028c156acdd5f8447d93eb39d71ef7af697280bd0a37413315429e23b119acc01758fcf990bf2767356cbfce8156fb516c4f3aaec66e783818241abaa6c98aecbc593e6ed45a05611b8e9d6c4478471f4f9e90b027aaa46181a5ea7bd18def5a721b5e2d014d1eecc087f8759909675383ef1753b652324a023671f9d9fd6693c90dd0d69ffed04494d7458ce770d8a8999f332bfb1bce5bea6445b7189e7d1331af3ade18e5c61338fb2914c8551788f14d888b5e5dc501caadda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bfd8b123881e3ea4cf2bb2ba7c955b467ceb9fee6e98481d9f0a204a3914be7eb7919f109c4b79b3651bcbb4bc51b97cee55175c9f8fc48abd853966b2436102de00ace244fe5f0083b22e1309250c11839a42f39771beb8d64baeacec6f4eea1a6dfe20e701989212390062cadafd0e2101473abf06e1b0d3a5a8a550602d3e551fc052ec1acd72f8f86c266938337ab2d14eb97d15d2799ddb4fd744dda504765f1801bd12a6a61f3797e94d07575d1d5381f93a683c1b1a35cacc31b05e4665752eb4c1b0ca386d3eac32de0f10c04acf06815fc5c59f34fb420c809f010b0aa92bf360bee22fcc54d18a841807aa218c05d952f5150cd274de1d9773365c4d4237460202959423c32e78a7e9e3238ad4a78a7dc0d56adce9c789e0f3a440168a79360f468c6e59d1ed84af4b4d336ded131b47edadc139a224d8c1e9f4bf4dc71a4aef506ec558c733360406ede3b22072141746441ad3e71e90a41bcde1da42410b0be8e4a207ed2b170ee26a3a41b5ecfe5791437c9100dd3bf053d8afa54317ffc9d8960c4e8afaae36a76d4002f4a8606e9751f05b3488600d57bd309612c4b092e72b0b15e7cb83e21c9dfede25cfc2c420177d19cd488863ef236c96f66fa6cfdc4ca7444dc41f7b0aa37bbb8f88acc1f43d2bb311443a5ae5b26c8b394167e680a0e9c4020d096a3926c0837bfca7cdda6a021249a5fe5a0013375f21617d419bd0d87b4ecfc91671cfd31c31533a509b460b1cbc925ccb07eed5f8f7f77046f5837c527b32e8e67a46be70f9b4eeb2ff7a4dbab434dd15c3ea4f40022dc65f5562de31d05ded441b3289651b474a5bceaed0d577b208a0fcb0ac1d8c2909f384140501947960971e3b3ae5de36d6b3d0899d534e3566d479e8f479db13c0694b42f9a810adca46490adbd78ca61a23cdb4bb1e81e57d1a0439303b3814742b7094c3108c22b2bb654773226bc19f118cd7321c58e9d8d8634b674beb54aca0bbb16a1f4fffa05d399a0bb0c4afece6d6990b371b6afc775fc7a1913cfaf030f642f6bfa36d1c948fa9aa68de98890b73a24d55118f7360c055e6f4732ec843e7ee70d7ce94afc82d1f583203a3ffe62b9b00608381c4fa4e9c3f5fd71abd41585edf4f199be061dca21df679f8d5e1c62c2d3fb96777acd145b3b7b1e356930f3a4b0fccab38c764da029c89c093630bfcdbdafb6a14e010f74be549b41c9fd429bdfe2feb3e638d710e0d7b23c2d3c3b4121991b224fdd45b0ed1e7b396ce71d33b068a847a9b1f0c4a2f9748e99bb6fbdae4c2662f6be5190463d3084c88ace1d00e249d74d8e156bceb25589022ac7a3c23d8afbb910bd8358454dcc6364ffb81ff465fb5839cf46e2a6c7a3fd06dd93fbe19b452d90e40aa1ab4578d3e20c858bf38f2c402189168d2b5d77f0dc0bfec9dce9e7baab5fa6a0e39a0280ae8f15c37427d29bf1dd3b0cc4896d7416fd449a93e94bf6cc9ae7d492ce01f006e1d954fac286d20736250016de1d0d440c161c8b3bfa4881303ecb2d53efb8a7cf50cf0bd1d178fe1e750586cddf02ffc2e39e37346b46458a2be307be3420fd821c800be81af73310ab6b88cb4c2b86bc2dbe3c75277696333fbad67f67ff74b48d168f77fbd3429728c0b168ecbd854264eaef70b74fffb5dab10e2a037a99d123011b03cca3a92c8da38529295f780029a2e4b98338fe7c8d7413209f48f9629ece231e35dec33b3a62788e9a77eb8fdc8490b223c7ff01d87279f583d10fe320dc2c19affb4d6dcfac000ba89d3c2bfdee97ed01839de04c1ac73b69b949cd89c9baa8937f941eaddeb012ec46066f1e7f5edcb4e2379248fb7f44a958339c0a05432da8d243d865890d56ddf8c6e3be855a03a66a78826f8316c3db3469d9521d5a2b2899b92587197c29e62bea044ebf1df46e82cd5b1050021b67d4390fd2806423cb4c7080732e811ead560c6b5f7b1f2175d1a266ebc0d5cde7ce3daa0bbcf599d9510673ca36b0a78c1d9a635157d20d44dd84405274064dc378e4228e5183100b5df769ecb09f471ae91096d4c3db3a63ed0f71d4e8183d936ad923aabc9108b9a9afed6b2a819fc22f0b604a4d9f1b4ba69065e37b9fffd02a6908117ca3f66ceabc78b6031bf42a75e77a325392327480b3b72ecce216f22e305a2300306bad9789966de8d2f6ac44312f2d8459026711e5cfe75aa31581ecab848fe5cacaf416b3c0f33a2b19d02075098c4e682dabb0a32add83377df7fc573198abe7b6c90ea772d675a8c03e712f93ef1023f6ab03885241f533a2dcc3bfcbddb0fb91a4d5f1468839c0ac3fdccd58b688210ffd80e1d0e52f1c4698d941cddf939afe00131d96a8d4f7106cc9eab28304f3dc1baf5c11177f55bbc4b379b21ed22a5e733c88fd8905d0af3dbee45bc514f0ed7de563bd59846484e8c8e4130beb4e2566b8cfe5d91ad1db3b22569f0d46ccb6acc975103bcced346db00d6b374d5b05632e5ed9f9a27f26dd9ace06cc08dbba10d22cc43ec7443cdbdf52151186f550f0e3b2546b2b3d04ad9e972d71d9a27a5285d733c2f20e20abcd5ebb3b1691aa88af66ffbe23901723846e6daf47a579da5b210978dbaf6265f09fc8047ab474a2b7e916631a1cb0c812a061c4c1793b20d8869fb0e2bc8482ef71c61e31d241c7b3b532ea7d3774039fd98462d58230ce6464811bb59a099b20813fe8ba7f94701967ffb4cb84c38ea2665ff9f254ed2bb5673819b2dc64172a4a8fe4a310df245f5db77293694191b0f35f0ab665e2d111fb2f2b68f8167f734a50a25a3a946d0c131484536950e551fd0c0580399447209cf0d15681a33c71ed0c926e5156b29634716a8a1993c1fbefd18afe54840657c9079bf9ed9ce6cccf1e454df9988d841e58a5b5de6ce015486a0b6f2b24873e0bfdebc1b06606ea4d202b77a7dc566c5d54b6554c4ea834931ff77132185229d22e615c5e91053103acc589c084b5a56de02ce6c7db92e06c7defa31db1efd1b8237d186ca07a577f0e93e2e83423c5bc7579f8f586289f10fe44532293c89c3a679f845f06deb41bd02711936d2953e59f1dfa49c0d1d73d3ba6200530750fb585593eaa469aed569bffa436921eb665c79969392e470f5d9075981a1a6d92c5e72a95c2e23759dbcc7e096645ac93b9896cc44820c0cddea74309f5b42acbf817a4285d6c4c8007ec32bf96ea3b425d4f18a9eb3b07994cea9f140c802521a8912664ce4742f66765ae453d124368cda32d78b6ff63d834d4da44e310f52a73ee41e999f5a33376d35128ed307d6d87000bcf3fc06e2112f084fb0de9034cd68987154509f5bdc2bfcbd91bd711d715f0340bca309f0a53b84fc4e17ae81f3ced668663f6a30bb7856ed44d78c91c06ee46bcfac27eda93a66b2102491c08339450ab5b4e4393d1cebab8f6880bc2b674b45145f876384f5597ade4c6079e4718d5f2af735fecade64fe5aba75261b10dfd7730452d99e31035ba0d944347e3e576fad4f8407cb8769ef8d139255f9334928d5e2afd85fb90c5d3e11647ab9684b432706f9dda6dfa18510bcffd32b9631402042c7e72f541d88a03de9d2fdb610e27e62be07c5aeb5c8cbfde5281b023d283e6cc28e76c9dee5afa4fac5b2f14f549cacf80d8ebc4cc0a71d6cda2f3e18e715a8c7559ce1f67b5190c0da40e1afa2672bd2786bd10f768a66bb73d11468858f3efec509640e526f4762990f4ed9d3c92972cec3b4a6f15e1efb7b684ad60b93759065251acd73f212098a870074efa9ec009afe2eb839098e53785ca909800897a5bd59cadce5c039dd3611be29ffeebda5618307ed5775feecf414f9aaecd8ea64560b3ee2b0c30405241352a00982e488adbc07ef5288b5ed76fa026058eab7f6b7a53c88dde1bbaadcf78280184ca9d30510f563322cfd7f87758bd4cb264583688d8d767304a5f3e7231771313454abf2e79bf400481ccaaeed5ead4d74de32f22df9537a130b09cc01d91d5e222c3afbaabf48c3c35bf573ca4194e6bcc82bdceb47c7fbf6351313f78f29a6fe7aa8a8bf2a07838702295e75fd319fe64c97ae31417cfc956b3a456f034012b0861d818fa4da487b598df8545a2b7fdab29ef166ad1788d8f5a6e9d0fb08a82198c00f82f5691b87a84ac8d01f2b8e8142672cf15443a4a71a7e878240297237f8b9d901e45b03933687565216d8d5c1441be73cfea65aea24eba7ed9a4c78dbee3167723a5809874c6d2b4005db5b83ffe1abae72e8b1895914d279d019c1f6c150423ebf0a344b3224ce03b5db29b0bce2feaf7ab2b26c02228f8eac37556eba3df1ce3b168cc830d3c704ee81452ec3456ba7dcac637b663c6794f44f3c2d2121fc89762719e48ea29faa7775b9e75c3377fe617dce9fcf8be1f371087e193e23ecd637e3e48893badd5c1a5e8dc1cfd4ac1dd1cdfbbe83368513eb0b241c586c481f48f2f49d884309849de4c7a6634f916af446f0c1cb66db5c2aff361db82398cb6ffd5109b564ac89c9b0717d61cdae4e928eb791ef436c37f58dba03a771654275ac04b662464dd3666a922e11758c32724d581437f4bf0a155dbab86b7e35eb22a6148ad71174ca3cba33a0bb70b27c5d2cd934eba25c3e53163d234c7193303d94896f5beca9d612465bbda7e5a8961bd244d85274cc3c75604c2c94720478901d6c4c38ff755fb2b9126c1dfdf7e674e9a0e8b593966b43e5eebb89ab122ce1eac408b4735fcde2b9609564e026d63016f64b5c264232874a2bb8754144b2f9a2998d1870f0886bee4e20c5b5bdcc16034deb8f5659fb073a0b0b9e5f2273a0eef3c2ac1daef81502e3f688a44532ef58adaf964b622d8c5b979d4d2b35d79d76db8fb7a32385a79a28fdf5d7456f83bc1f7fb82ce52fde55d654c9cd0447bae158dc832ad798eb61231e537345eb9ad8a9433f216a6bc5d1d1195c6e1829bdd8739156d95197a7fcde42eca3cd0efc5456e371547a4809778ed54c36f7e66f02339779d819eca416614f068d664070d72b4897ea9c2e71ee176ee24c2be79808a0d43450b7fdaa55b22fea5997e9c0093258f80e5985c7df74ce66d93c930091c231ce69b3348161dbc8e030e971b29472fcdee638b6d1f1abdb2004b0516e46a296914a96f8f0e3e4042f3ae3400f1df31d8f9ac12758cdc67f57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acca055d6e6a880d3b919ad062fc6b9e8b201fc85ef +MD = f2e2c16cd3b8422f13b3ee018c3155d31bd2cd92ff4032ac9dea523e356bf20f7ee0abd80d8909456ee70368a58ee259dcc6e7a199e6c4a193c2f6f106a136a5 + +Len = 35032 +Msg = 29c708a3ab3910b72eb4d40c8fb0bfee3bfb36c34d50d741f62bfede22dc8e8858daee97e25b51002f213bcb759741c79a1c107c559fb061916c0a4f1245a8365ab5bd0fcea1651115202d28c18dd6a331da562cb52620fef492a5528b511b1af7ff7df2b534d354a758b30bbab908eac6da12bdb60fae80e846d8cfd7286e9ef761362ae03b232faf72d45ca9445e0422c74b169e7fe34f3530aaae3cf129292182f19e97dfde0cf3159903d65560590d470a1fb5a045d3a3f723d703d5d5223e0bb63622488b523dea08e8891597514f0256c0459a5e75f9444b3373fbf9f316a38bdac89db26953992cf40aab8a55afa237e19495b69b01be2ba8d68b1d0371f37a72d207dbb9fdc90a0da040c2cbf6ccb56aebb8d3af810eca1f72afc9ba17a28ae688ad8faa0522ac1c95fcc51dec2ad943922b3f1742db3081918d8680d059c31e32b855a4324e190a2f061db15964aa55d117823d0cce66b4794ddbbd63c02e03184fb60f4bf259bdb78751f105223086f0a42287a78f73a2721851d9997ed27b829b395319b9751f74a6ea44b80b74bf36f9a95fdac55f31c6166f3c3a3cb86fb7c366d864487417b08c6f1139c77de9ed3f9f2c6e18334bbb6ebd4f0ea1e6c800f0c506f34a5e8cb16068c251ff54ea5b9d8a552c32f6d79b49c378dc56666ca54adf4690653b68c14b5ebec85bffacc83cf444d9b8b0bdacce0a206e024045eef83bfe014114922675d86d668288157e436460405569e5372619b08a4e7a3a222361980f87f0f228055e37f21df60fc4db631128af2a378378788ef9e21e328bf2da7a82dfd8701124788436d35281e12c78bf586efa9bdaedb024826533176f8e2d0e22f0d3f427f9afbcf84da3521e5d2bd2993be2f982ad48d9ef80c2d0171ee2bab763e966b4ad8a470132f16cc39704b2b3bee939c4dfc81407dad245cbcb82e808df22aefe67928d192b45b618018cc86e9e1743e8abb83f911c6b5ed3bd94ffde0d87b44e504df707e0a61864c44a7a928374ff363aa1c156ed9503761ba06701951f61eb9045eb95f81c7af107c631e6170955f6b40b021ef6591cfd0d2e87391ef39b1f4e02d2891cafc405f3895633ffdd2e6f417c6ab0debe91b0bdc7c94e50094b30b20a15acf368dee9b01a4f41e6f870ea077e61d64ecd4ad750f29407d56b5a67e5e71ac6264eb1e5650186d8726305af31984f56ee8d2fbaf138512d5221ae0c0f214b9f5c6923403ac761c04b25d306e5539cf9650629a1c620668872313167573e0ffe3ec21d4458f34ac01a46c4374b35b0875c401ed3f7323ce0daa5c9bfe6c8cdad73608837e70da8a287cfbf898dc8f3c87a44f899adf63bfd3584605ee447ef72a44c4a620e9ee32c39c7ab46d094ce8468199d3b10f5cba729d7dd8a7841dc16798c4d0df62d6327d93672b43f20a782cdc7f70147b655a55ea5288cca40fc61992a7780c7428f5a0e25fb1bfff4e78b5257ec327bc13fc07ef629ac03cbb71aad2db202a865d18f819a2ec53b98f7679fd06618d39ff3c02ed3c8314b6b750b5c9ee5dcc11f908cdaa0f3f919953dde5b3a4cf978d7d76d1842ed65c9a69efa4f84f8573bf7351ac03c32fec17123b72e9d861e91f1558ee44e808ea6079ab02ee7d2b93e762601db78d31d5cb710bcc202fbcf4776d4ed3afc69f50913d1f5a0d05d4af122cc09d45bbe9e12ec6cb3bc709554c2edbc50c05690e21b54ac904d4580547d868ffa53eddcc90a9a9e65c7f03bf429de74802163dd9c0451914bde51231d0a27d89bff3713e56d48109a8989d5f8a4d16645032b396deb92e9ecfbf92eeebf8f0db581404c3c627f291aaa434ca85d4ff9660fb78a9bf8a01d3c4b478a0fc44598108011701412c651acd326864c79df95adec0eba6f5502930377421dc842d1df74a5b065b6a5a5f01aac3b6c2c230aa2e04238af312740b50926f2d06161bc4ca99827156a42a46e2adc89e690815788c8bb3e532999e3ea1501608c21488c4576007e6678114c34a50c18ddbfbb4eb02dfd278c9fd07299f1b093375220cc34a586bb42273b24a852e3f13702fa7780d7b0fb44daf7752c63da93ba3a100180fcd1e890c0e8b533fb0a1bdea1665b618d7dc3622334740a342769fe2141b591448a0c388b3f853e66289eb8e42681bc190c86cec2aff89b2c411cea51da6fcf44583021d0691e2f5ce683af126371f741044c70ff92884712cdb4651104b8a2c6e45b35d78e086fa5ecd1aa7544b47cce0d1d302102ad76b0763a59a8e7177290d5955be7d4c96709e1909053f2d1b187d102f67229ee90cce1b5ad5faa14a76cd4e67b4a66eb7e506dc94bf594500036f502aa382fd3fd2fb92d497e7637a92089577e466af61b413983c2a353bad0a1242634bc3ce425a1a4ab154d7209e0749bef4a240970a8a6edc6dda55796889104757c4676aa71e94a35f913c711b532b3b7c82c6ae38c45319a8442c76c92ce3df76a1e08ac47d155d6dd1a9cd78e2078b5e0a5b6d62fe6ab089fc3cbc5552078b4e78b1872101f6a93a9a81ae4d40893f37bd914d2f953061716708d27394f5db5d9d6cf85359c3376450668bff0b0ab797f0ead5e5253e8d0d191321da62293012a48546c1c105886997cb0f048e0694dd68da802a2adfa39b96ee52c0463c3a0c027d0af2f4381cb8d51170046627579669e2e46512ae35db44fccdebbd8949b85bb6ad7d5fc554e0acfc77651fd7605198867b3c7924b41ab7b0fba334aaff95f4e4b6b75057c16f63ce8dad07814f7d5957ad06caddcef873bd748d580bbc238269af379249f2b3be1a1b52d9cf859840b9025a9423c6e2ed74c11074461fef78c80f848226696bf061b8ecf31ca320d33d03be41b13c68a97959c325c49b684c825014ac6785e6cf37eed1eff318b5855639986fe0a0082c2db71bf911af2c722b096e7da7e8b28eff15a82cdd66b4db970c8f8b4c822fda2451914ab7cb8a8e2493f87241f26dd439c5e636461dad4a6204ea105f637e57dfc1b9b7219120f4f1a85926e04367238a880298d79e1d5669bb5e8b83c44219c27ffbbae9607e4b248ef707ed4c3cf143d493c0ec686383f0884379741539947ef4edb269e9f0f53fe06891c38d6dc1f824005aff2d3e57a8f44f568ae6b35c67c8f65a3d7e3787a62504612d87581a3a0edea3aa2d0c45e5a7c89f42a95dd60f54ac0ede9da076f9c570d275baba6e6bfd854758084be358eb45d035ed8795e820854cc7d8da579d5a347226a7d3331058aac2a34f7b9455675d85df23cf1084d4f89083b0238e235ba5dccacf510cc9d8a581f66319ed8d84562c98dc92da67baac768ca43a9f0e326b5edca1a25ffad60c21dbd3b56343caf6310d7881580379e76b5d358e1ec086fb94d6bf45a125e9550ebe11cc8a1ab3843fa7a8092dea7b5feb7fd47c71ecb1bd0b3388c984cd7b06c537bdcdb694d6a6b4f1bb98a07f376c736f11a42cd55b461e8d8e9c5f741397d1b338479d349cc41d7653ce744446939fa56d93c42cdc2d6b5f413cb59c3b8eb0cb01a8926c7e62e5afd108fddc217bdcad58a9cc65ccb96e0341390ba86b61dee9ba9f2abf1419b9f8e3d6c1a9407b97016374a9f2a5909313ff0fe64b1bb7d899b369eaaed64ee6fbecc6442e3c197b2c0e72d155ef39772beb2fc9e6d4d72a459cb746ae3d7919235c4619fd6cebd597ba32f722122a869586271afe2f664097c6f5c35fc23ead09c2d4a7796b5952df17237fc9a6ca4dfb60747e0373dbb7ead2b3e515fcf63f19b1007134afe85f5c75c2efdf25cf39d80a9657995aae0cc94060207366362bcd9747fbb1b32f77ba869fabb5077fd685d50b3c223c639bbd808919fa66851faff619cb731d852853aa2847fdd472b0bf50519020a182f122239d161d9659773b4df454eb378fedc250eb490c053e34cf1cf7f8371292b9b19a2ab95f7e29cefa1f762c9c99b634812b5733822238ef5f9b7cd8b817f931c664a07822767c8366eb0dc709dc8e990a9a0a7bd2b4095ccb4c4eb6361a4d05eb039ce71927d830fc213998b5487f87e91d6396802315e9acbfec1533b204b29a078e6aa60ab3544452682621960f8d8735f1281d07e5326e56d38a234796b44de0e3975b87a469ba0f37f3d12dc5167f6441850bcb0db3aab1a369a763997791103ae1ac2711edd7b82796367826bf3c38c351cef4e5d9cc50ca48129e7398ee1602ce0a81825d27dd9561d41daae44813f502f91e04315da4b6ba0740cb84cf82c9d118ff7c4414f0200b3c86d8321d96651cfc9eef46d92e0713f802f7c7bfb6fe8f3a19761f399055d6d23c2505373081f45bf01d86c97d2a0a675d8ede39531f5cf067f66b102e857927b627ea3f62da4d99ca057da8e29df1c7a90734b6c7bacece637394132b5d56cf7d376d60bddc7d28854d97e22ee15eab7dd767d2854f5946848446bd274be41c09f9fb75921707aaaa4c621f9282c59554a5e3f72c5b80db439edf98a2bfc5afd4d600d890087172b18868bbbdf0baf7c5c935af2d5dda0f3929eb101e476ffd766239f4283f5f232388184111b9a34539d7d964f8c4c954ddcbe5de0a6147876714f362db1a053e88d20d4a3e5c132039484ba31f2ed34e99db5c3ce7abe0c01f64c9af1927181759ec942184468efb3c911904210a8c4f060eaac74665c04a07e8193372e50c600f3e598184177b48cc58ade27ed668f89aac7df7975d6a87d9058e9a78e2668b115dd9c4de3d6c9b60f596d8b910ddbdd05b32687ac1440bdb43863e8b9d9b0b18b17175c326e76582fe405140587f114f816474315ff148b7289cba3b753e628ddfdd0f03625039bae956d6a50ba19550c590b57b77d6c0d53b4e77f917a523e94f691aff8e4b7a613d36f367a909bc8c7e23a6b9a778f6bde1f80254e383c19376920417f94dca2e605d1208cf0be96b41a9c26c7d6c6ce9c335d3cf674ebe44ec0464fd31bb8b6b0955ccf8dc1cbe75869f8314580595e1358486d9216a8c56262cb81fd63930bf7ead8ec85ed0ae23d3818331c5f9042cdf707602805bbe4fab7777e0452b7c8466c0d1e7d5bc3b0eaedc2d5555ab2a3527663bcc32b6c6a9e2712eff0d26b162283c30e7bf33e78e7f2bfbff75809a8283f242a686f037fd61a637bcacaf61d1597c1648a9dc263bdadd7980a43db7ad9b8125121b9c74a2bf833cb9921a104a610d0c7af419999f388d10997027140ed4bf4daf5f101f424294a8665c1b4f45e56b8dff4c7094111e977b9a47d1323ea5f946ced00f9a44a15705536917714c3d1415560175b849f3a8f513c9c094b5a5bb8b00fccf78323256de01579318d5fea32d1fb1ad78926e2e27864479adfc4a9294d653e43b939bf08ce09612c86ba0755faceb6c4792e4938d726660f07b1b0afecf73e246d144d0ac81b31ae285a927079e0d46c7b3dd7591589e1b0eda8d81135cbb5e4c83a353c7552d1009ac9f14cf53a5d15b8ddf40cdb95a0c5b6318919cfeb89c9f135e1637eb62a6a058f8eb117e237085795081ad1538b968dd42b8d635fa41c108db74a8a4f22339132cf6787e24c8d81ed7b4c9eca8b6b981a2636982dec244fc821b84226a2a5653c1e35ec4282eb5e6eb568eb03868bff8ae3dc175f4b2bd47085744d429306aa35e2e4ef08c36c159f1f365f04653febadc84788fda877c70c4d4755abdb9f87a3823c373ef656cf091f80a3d711cf84093e3e910dea515125e0f9ff6a64b8251068056deb03f2b3321e0c5e847183f128ae8bdd99fb019a42a652f5861499ac03fb073818d188eaa485a339116ca25b927ef412a8c2cfc9eb071adf07d5894305a30a41cc4a609be7ba0ddc88ec76e9cd1842d943270306a96b1864f68ed2129dc8d52f0f55c1ef812712eef0d845c463e23dd97112e47b023a152d5a27ba4253d231abe9daf50efc327a1852175813dc46acbb3a6bbb4d80dcd9e23b878afbaf2ae65d63c2421fe0450c01b593f7ffbeaa5826a61ad0a7abba2c2aa19889643a36bcec84f3f14ab3c7915121336ab093780ac3be086baf0a3ad6ad954101a67b5f7b01555649b9ff20d2b29fdff84de217883a891bd48d25c59e141e6a38e8fa0dea43dcd394914bb794ca357feafe34ef9a320f3c526a84c44d0745fb775340a9d25b23 +MD = 8d0da554b22491352b9baf334025cc02dda86b8772a5a0e6716c5424f856038c79554be8b18a0ee040fdf75cb25f9cdaa4b7b5c50fdc20728098a051b82793a5 + +Len = 35616 +Msg = f512ed3489fd79ed86ceef13c252f77a4ea946d4a8a4732f327206bfe37cd3de3d8d86517f367ecd1b71dfb96a84e2369f28705dfaebf0c73ed35d5364449b2391230be8463c5d60d6e1a51d1ed4b18770689a24d0e29a1763251de7248f1b82d91ea48246d7bdaea0686ac4440c0c76a9afedb293531a268ab271048b24fa02fdc47ba6e6ce46c05f4c563846f29a093246918eac0417fd9cc07f3101cde1ace55eb5dc91eba19dfdd690008a4f044af375ad4081bd3aa27f986ff6ee5078867a337dacacf4764d604e41a47aeaf141d5836a517c482b1f1d826adbba76669ba28df99fa0b26cd972fc90ac7c8d0af5bebaef48046c917c5cc59869cd0754f046b2513cd5ed2c481927a6a1fafef76e976065ad80f014bf26ab202790cbe98f4febae0bb36d5ea23f19aa0b5b065fb449bef3095a9d5df2627a2a9d698ace7fa3803895a3f9a9f0cb18c570076debd0bb1cc2e2f93b141cf87be054c10baac82cb916610b5bb539a56d1f5a66fb42c9d4c2f9c3c592e146cff668d301172673d0de71f854592b85b560df50e0780ca77ef7c13126696a77d133eaa28f76ea86793670e0e7bcb3dce3382edbddabf372a00442b684895ab7e5798f4ad5f09d0c0e0a3ca32a4bf447173f3382c55d9d332131a3d947bb570ef3127e52394ce70a77a2fcc887d097cd39bb17cd0056b2f2ebc60d23d7c50985e444e0422554728a9c46d9d86511437731f50144f65edbb5e50ba71a9d6f1a239e58dda300cee393653efb5a2cd8a14ce7351a700f3dc086f7489a48ff832ff10a969cfc3283e52ebad189d643eb595443c389d8b4ba086c09c40d3566c7f3f5104546d5233b1e628349abd5141212972ee677044b9f5b7003c829673b050b3999ae02b63bbe3637a8ec8bde0617741e8ee70c7d3eb26398cd9c1568e40322c58b1af928e2d3d6b511034e7981c129f04d0e6fcaf3bcc5ee5088fac0cb8ade9fd0cf53b28044a6e5a6d51f2eedd7d61551a3c973d4842c7a72d400f55661e7d14e1637dd7dd74dce50ac2486b322269684ee410147d43e431cc74e91ef52e663ef36cd3041557478f5ce8508396abe7acc3700fbb672a35137aa0d1cfd23835b99793e333485c2ec7e846b3de87649c913c52ee9882704aca9c5641ce89d65c33625b26ebe31e031d416feab28106d8b40e1f25325bb095d5c607c1b178835a2ad83506a481f754fddcc65dc62fed2c93bd374c2f5f6596b36c37da0f4ac9a01e6db41ae38182a4f83eec958fc09218bece3ddbe60a09dde21368e34e6d03de7c975adc2f8e4a738adc351a560f902d73b5955cdce807cbe0400d75e55bec55c3e98bb2fee4b93124394264df4961cb7107c0379a75f9f14c66a81a6a93cdb692d8d937c841596e62ca96fd822a81832539510495305ade751bcb4944b1327147e9d5e31210959bb524a55cc51f69d50ececa3c53a3a4f408c3e97b1a10b5067190d44d72cf184999cbf00b3e849541ac3c9e576c4c62d265f37538414ebff6ae6286cf50f93bf88f24f97145169e597c074fee35a70eea1b2f10f950d7ddb24ce35ff1331b7b0913c444278f31ef7d0cc34159562013bb96db2f46df2878d9db77b24b9fa2702bb62e42b66363032cbcd5352124642bb7779c32a932cd2bcdd8b430470d2aa5b0f4d78776682664092ad17dee46cf817e2bc6cd88f242611ed30d5c6bf21076493e34751003f89c62d52c9e1923eeef6031ff427ea414a34d49079942f4f07c4510d9bdfbdd5616fa2a6b082a522eb01e08aa53e2bea08cc9a91779347c4722351b4ba4924adb6e0fb8f16eaa482b6e083e6c546da892681481d16ed8fe9102b9abeedb8be2d50c440f7414117c5183af4199d6680856dfde41ba0ca8f24a88233157c5411bef7c177c57aae8753d9b7390d75c7a446a5e579725b51d0de04d0279faf44a7c9727faae109597b94c1005ca89590ce3496e40c0c90abd980eabe7b46ceb108b48aa7e032366b7bf097bd65d444ea86b707a0a7d086ff327023f339f020c2bae807e122a2490c0fcf25955a78cbfd5537c2c151a68776641877186987eea047ceb1d477188963c0993131457c72f0c21c8df01376d938f6dfadd511f2807237cd4f29e77d409915b684392dc781eb56ce31d5f428c56c702c8fd13b191e61104cab887ab7b4d5978ee6541b43401897b57617fca5933b5b69e3b5eee410955cb58b9739af2d40cc891f2a16d7f79d0f39235e33d38bcc3dfd7228333b9d35a26fb8012b4df5023e10f664266beda246c30254a29bf548a15004d311060f696be2fa6c587a5342758934aa53e86b50c3b9d99f50e518d60cca615e902dac5b3e761881c91c8e28f85ea1a3a634b9ce0e8571e7459a3d9f08d35070b898bd30a393dce7851cefde4ff505f826381f45af8d92d58aa0acca1cd39ab19230891322a10c469463be8902b82851dcdce5dd2e3b031026e1ad80d13207cb25db5a2a44087148ffd84354990dd254ce0952bd14f68e41214488e9ad585f637982769d9030d393cd62c5659d5ecaac06a5af0ee925f91084b0842c3aad6a24970e26958f82facf06eb8ee49612d9ff8c9944f733320d24560fea72009af0b38665b23ac764ada5b35ae4fa0a91c7f666ce59a17c8492269f4802e28685b8bb4e7162b3c23fb6bcdb9710cf83435c389e2b36344b8350bd674314a554d78be2f8187e29087cdbbe8689598a88905f6e3c9723d729970f92b7e868e2f2f931d08b444dc31f81e550bc1a0953a2e09a3f46fc67b29d28964d961f46c2e951722e0fdc18aa91b89b1c86316754579bd354c6414bee2f9eae950dd0f56dbf4916a48dc82705e687c7caebb6bab23229d354c34e17b367611f1223e3be0aff48e4d90bf0c2fda4582f02f4924b98b8f262e8460b1328ced9b16de040e9c12eb5a576943c31ba55929c6ba8ab622c735f47b856608676eb6f2b4e4ccfbebcd6fa21222d94bb63809dd7ad0fea4696ead64c6bfb35bac44689575c707984207e7e2086e0e0aa20aee1a571313741ffa5c037a93d72f53b6891fb4053248518afa96a4ab408441b66c6d15f177b998f2d86d11c25ff8003d8ede0a2fdb907c9f0e3c615b2f4d27930b4211ec89c976d098ee26abac4a3431e07ce287721535ec994fe8fe08c9b6594135f574c8483c2c142323b05a9a524c3458d7dc842b1fdc224d86148b9e9051b4b51b1ac19a5b5de0988380c97d0cd4e11e447f80668cf64fc1d33f26102814cc4c0d5ef45446fe74aae08d9746a6647d29c2f1054c2fb368295ace46d2f02b0e6736a1defaa17646f6a54742abc1937ef7ddc171305a9c11f077528c6b8b0cd1a34193fff1dd6dddf85c4e39f0e0ca5d24ff7152d7a038b3b3c36c652e5b22ec6c98a5b5ce6d4db02c7ff30bda86719e2da271389692e1e3ffd96c4fbfe315854fb647cf04d38e540f7ae636ad1531b87e615170f1a550291103d2ca84a54d52a924fa7a2992b8401df788290d2f834293a682ca7d49ebd9b3dd4064112442bb256f5e65a14d43fad45069716f37deb309fc95739e131d9c44e0358ad9e28e5520ffb4000045c9eacf2ffa9e47c0ac905dde0a2ad8737de7309712cd636298874840cbe7db2ea2966ae0cc1e2b5c9550ebc5414eb0fd8521238c789a3226f9e7f7ece66b766a7694440d5e6f8e6e017b404ceb5dcc13bbf08a1ac78fca921afdbc5e9429768bae5ac7201200e5677975f7cf58e66e489acbd0dc9ffc9156741ef21065a05ff4c25070a39770c4eb75e78ed72a672c2e9a29943c629f2ac6ade255acdb4ea7485b2bed124f4da16c7f3651fec06e9a18428040d4afb60b7520de437e55a2c0f8c13378f6b9e60f6d0de90da0cb4b1ca82c66631fd7ff97d47579581f754b5188ad0dc0cb57e8736faa85fe67abab4850a04277888bca64870429e00aaa86bd7a672140fab9a351d6cd83c0add20d819446bafaa93ba505ef558687ca760389409804662f5fc53f44ff68e0fddec07d05982668fc582dd08ff215bbd95840396da82dccb3aacca03ca8abdbe232828f071d1b5eec71b378eb624df8a1d1ab42642013d1322b08092061d31dd57db23c2b3e10291408d443841e95dade72c328c6984d10257125fe92b365134210ee08e4839b63ed9e1ee4ec8f83bec9ac167107693005f7eda4e50605e878d27c8469c58623abe3a1e1b1775dae310dee23afa92b632f4420e340ecd1c3bae14113f330ae2f5d90a4cb5dc6e16bbe15d969391e476cf8748b8fb6c9bf8d3608ef1b39c86434e56f274a3e5db342d26bce55a1e955a3fe13bdf8ab2f27ab86b3d718820f50cafff999ccd7ae5bca0a9a6d777e9ccebeacac18cc928f92b5297cb98a7057fc67f9aa8cf1be3b4377c30c175d33ab2af390982c6a015d99209acdd6ff8934bf825f0c61275676f2d2884b5c654596f3092682895f7c3b93846711efc6314822a0bc99c6fc3503e240e6d2bd2e38d2af65ead5801b678c2a36faf3349d1ce4be598edd1edede44aa695b2cba269200b8706a1bc13c57d1c5dee2ec75e280acfaf34230e94db6cbb3a251d3c3dcc583b6df00cfcd20c1aeeee29b68041521035134734fb6d762fb969267427abf67ee23086b6c047749660dc8a0f06fc3528a69639e93f7fa4776bb9008033f5cdd927562f66af78e33b9cb177000297bb9a4ac2730883d34e8af9b41c0909223bb3336952e6716f424fc7f45a531c18cbad481e5b596e6f5db18ce2e0d7503a27522ef159fcaf347a1b0c2e9acefb894cabc9325aa6a95db7344ccab5b1b14678ff3f74ab7111cd71e791e69f3a48f128daf487d9b5dba5465b60f40460d44d18028e7cb00c3e4411fb7ea4d15eaa594683f2a43e4fad4df06ef0e833ad6057eea34490d097dfa1419efcf19804cac88eedea11f23cc75f9fb4262fac5dfe6de22a893973d89beae81933535cf24f46e86205575e44d0e23a762850d53b5595dcde84fd01991b29f0b44a5485f1e2dc3c286bfde92f71dfa9fc1ed3180e0ed9c4095e67e2a0066540b7697c7bc92b907288438bfac4515dd48e3141dc9dd04182f13efc7eb505a7c06aba52a642d16c72cab58afbcc1964a374882088b144d4ffde4d463ea2c0f65815625e6f247d782436eb81531070fdfef54dfb8612119a211ab3cc882ede5af0ff8c283c36d6bb71140af86a55ff2ecd5ba5573d88e09bd1ec9716c52008db70715e397641853d3fab3d77a8666d01f8ecbabe15db59e0f89b21ad5e41e582c0b30018860d31067844aa87750a637e67f1b4b776d223707c707b18b9591e56c90d9b4dd262831f022779af390889ac02b1bbcbc837e75347b3cadf40305a5f71c75761c408238fc79cd3785c298693b276f58073d04c923fac398b5a8d42a6a1285bdbc3c6b85eadebe0694635033b5d868d61df66fb344ea2eda36e397d324279d0433666ea949e5bc70a5ff4a7adec2aa9f375c09b415bdf11afe6fdb40c3a03dd2287ae633a8135b1e3102d1bf048aa72c09ba8d5c24da9cb37299f8f3a730babfe1d67c8583dc2c57dbfaa060c574e0f4fbae451be0e4943c49fe7b5c6d3dc62626059c4f4bc472c5fd631110a035ea8283b3db63d8507a3ddb09fcfb744bd29d3b84bfd18e50f0d11bb8be4f1332167d4847bad479a2a100bc48d8416adf528db8d061bcba061911cd88026c9cfe072daff66dde535fcb4d5437b7deaf5cd88014753c716d584df0793d77f9abee3f1c213c5ef1e3ec3b7c3952f623b068d71cd4ef8a9ff6cc1215a565a996dea720d1527628afb9dc8415d2271da12c77d0ac80bbd68914e607c9e88cf19493ad5ed59a50357823b53782c530b8d7620e47c79e46cacd161a91a5a90ffaa379653bb19f471fdbdfeab87b78ec3246ff90cee6942cb1fc98ee32316d8b2f23ee6369cda7c7425b4cf1a94863c6347053a3b891e8ea46780be58bf5ac7af996612c4ba26a5d3776e97e6c822c6b19d41ccba75222ebd2cfed74e14afc5c048b703463d84d7589af33c584a129276cf2a95d1d9fd8cde174cc20e4d9c3aaba73a9f034d7d7ac9374ba8b843de0a7984c87ec7dd350ed1cf7168e090aa8e395df6cf451098f6eff57fc14eda0f958465246fe6ab541e5dfd75b00b055f2a3213f37c52b15db3927d957161382c9a5d1a45517468e22349496181d9d646745e703a8c7456541a7a76989e3b84bd83cd4a340aba3f65855e5a3cc59028e4d5851dd2e9f02806916e898d3222e74bb79c9df784005667ab64d90e637926c3b66ec1c379114efa +MD = 52c76731d4db66a6e9098b1f3398d202a33300f49f0ce6f5203fc4d77dd111a9d32547c2c31a08a008b0d59e97d5fbd40d9fc8fee7deeac0593818afa8d30e27 + +Len = 36200 +Msg = 03e1384bf7b8da331617c78eea31fbb182a71cffc497680d05d5ec04d778f6472299ce567757a1f3a01ebe837c2a05b60a469b6ac3dae3cd2d24aac2adc6a2879c8112949e40cbc62f585ebc7f0e8c82805afe6c3dea37456d6ac6a94803c0b099216dcd157a42f5eb4c0f039ce57a5b0d69accddbd04abdee2ea7815137380b400248c8830decc7fb823a1e7bb8b68ad9fd0d554493067dd7f8b5126f6af2e0baab094e9102b386888245d6c38e28560b9d89cc203b51cc515158244ba5d5772fa41a27e7607e78b9d59af31c70b809cbd288f919d115f484bff87e8cefcb17c676e11b2c2f34e7b7029f3d30654eea432272a5d55b393b97ccfde9db51bc09a7a8c8f20877bf19a991be7ca475d2409818af98fce4a5eab300cf2de0d28e96fbc2357325410657b80a5e7723a82c54f539a79a37714148ffe2d612427a2a04ea4d92672894f1e80cf6e6f75307446e800fc3732e0cf59fa4fa7b60aa51789b9bd04696bc796816ccddc0c4dc9902d5612169ea88bca935c9d024debf6060a537d3b9c887f75327214553a667674fd3c1f702c9ed8a455497ed3b552aaecb68e5de53c531169a6432b807659c7711aec81af7d6077cb14236d8268d92439f2dce7a7c5463de261528bd44c822d332af9d11aeda7b9dd547cd194f4ea028c63c192e9c3fc558dd822add7298a283981e6964919cf4f299ad84391c60fc6426ddef831b4cfe8ba8f2619ef99dc38d2d43539c07e61885e6ba84bff78a4dffa95878006144b78070aff48b429f2efbd7658440777e8f5da2b8f53347953b0236f4db2dd6ee973d1bff0c29b3668ad580ce23d84b2d0282b7edff1e734a7074b4fb4192e31447cc922bd102b5b980210fc459eceabb19fd0ba2c806e56e915d0db3d1b8ee7c6e35be7a6a9db162b8e96c904e05bcf07bd5881e7b7604cc49c62865b42661efb57e863600820d27d9347f7a29aa2994d11215ab3ef3382b3db6ed581164a235c4b1d1a5ba3a33d18c0b30c91364996ec2bd998f3907e952183544d611fb1b1642d58911c14c8928787567c733ba7447f7dcfe1396397f0a804b1525dc72325ad7f395c03c4079f3467a0cbab23422e7177a2b7f7a11621b1d01488e995151c82c12ddfb549f69fc9d2207ebb75a0b16cb9c081b0f18fb4d995ec5597121df2ae93a490931efc309267640a26bb5989cbb4c7d2e7dd5b068996a74ce8b684446b673c134fabbeee3887d9f27f5cc2f408e917202ecd1ea33c82e3e3510b1e7e439c62dc2d88852526c3f0dc17e273acbed74cfdd83921277cbb109d5278132ce1d3a75fcf2e0571d7ac570b92e4f1f067ffb7c086aa28efc4dfcbff7f9628ccb08d8812a714a650e5916b2572ccb48b6ed3061cbca89c88af41546e3addb5da2a3a739947c4fe4ebb23ab9e3a1231ba6de1b676dcbcd26e9680688e16c750e1c95af86813c753c7d2c3a6fa5b4e0029dfbc3743894f812e052d76b395eb6050186f84e3bd847d58c701dbae58e896462ec3071724e92f3395a8ed932aa28ab19208b7b08794a18e025eb84ea56a6a8be586a4764202131ba2735b9157953682b086ff33147086b40f4adb4fd35c03879e77adc56332f342c62d3f22af2bea501e9aca0fd69083775856a3266535e7b5b42671a90ae436356b2716eb93ef1c861694b68b608d2e5487f2ae66dd708d92c1139e859bae62802c016140a84743b14305335a24befdb7e8bf5b85aea46bab3fbf82dfb7f9eeaf634cacc65edd064e2e7ccee0b5be683e250d49074b3a186b9a9add3bc24f612fbb5957e11a18cad9236be7b375f3f443b77ce56045ba0a506c360c1e5d27306d9eb801257c7307deec432c46f80838550a7ecf25209cc8062f017dfbdb09f2f587f92717f87443bbc3a2fb0fae639b0ea89354ca6e6ab7d95d8dc158ee701f54019d481d10a5151c53fbe2922b8e92cd1c4b14c481ac7056624b64b9e9e21c158604c2b9478df26d17ce6172d1f1b61cd0168db7fcca8819e7cae6937fe88f969fd045812f97422a899af60644258b7a6e863df9524d4570587ca579f2fbd073b9704ee91b39aad113d21ed0f4a27962320a941d04bd5f163ee14fd1e58485196d752d75ad1d82fd51045a6765e11660e5242ea796933b580589444fea1b2414265f8f9b579b610bcbc2273e0a79d8f2d2537c1d7a5740d246e51128533823d06e8fe3ee9d4bdb88ee6c03d974c537949428fad3428226016d85351fd3640afac096a8c40097490133828eae176bb8c29505298d61ac4151f3da2e7acd175fefa6f46cd004064fe135a6164074d5e3197f8886906a2e396074647bedb2da892b9c29ae872a3136b55f4739150f8c3ce59e23a080ce8064a969a49bcd17261d3b0ac6cc5de570b40a2ad675b06a072cd38b5705c3015b59993e2b0cbd8c72829a9d3c64c8c87d4e3c22d44a96f6cf494fc1a304fba5179ebc8c584d2365486fc6adfaf65c359f4be7d1d1262d585d08d6db884c8f1c3d8a8fbecceb8344202b4bd7930f8cdf5f5379b25da707e128e1e523873b01f945c38f5fe96671ab925b968494fedf0845fb8e3eca3bab33cb7b1754105ed8aeb8d047ea4e2c630e0757333f6162c752eb8a81e1b7528bb2bd2ad9c7c43687af1f2725e86bcbdbde07c4be8298d9da41a8a6f145958a2e006677a9090340939ce13eb5c4b2b340be1c2a74d89bb29c4715c758d4f551068f6fe801926e1b90ea978d8419b3813600acef02cbfa8b61f5ab72151a5735a9c222026fee6505e40aaaa9fd520e9420583288f4b725c2dfbfe22dd2702bb69c4b354d609778be118fb30aae07f48aa427558ea724be077a1852511d90e332328d023f800829a2bdec1925f2a635d315e08e66b6bf13b7a591648232d72e5710fa214f2acae8323da2759287a722fc0a3635b79fd0e75206ad9147cecd6d93cc350af2dd5a450b053520c6c9a54c64057af3f7bef4797501ef71084dee1166a8a037c11430c09bc936d339250b22a97c31318db0a46a7f2bb98c5a3ca3ca4e4ade30407bd8db42ee09e5604653464af2fb8700016b3b0ed8ae3b942798f8b937317ce750dcf5bee830dfe29a1817a6ee3c5ce52db35b72bd30176c7b481d35e26c862c4f97b05e3c4e4b269cb4277be2663bb392075c693de1a849c41ba852c0c1d495d4a39bbf7ea48fb2cad1e608642babe1daf1be40df2556927e8e3a9e76f3f0aa6c7b084113f6360da0dbe3fae7df15f664ece1a8158daafd273a4457695552d093a896819095d69dbb4c91b1d2031267cc6366fd759d2dd04a8a463c1c7883bed696b6ff8915e9e986ae8fdbd72a19cc8defcebf73b657c24518c0ab04c00bbba1effa2941f8d8877f6c3ec75bd6a48b060c896ca46ba139c3403432b6ee435d71fed08d6fa12aee12201f02d47b3b29d12417936c4fa2ad31ab2151a735c31ae34dca9a66c16983fb44b11cd5aa563f8be109b24fb4c4a31ca408865a49238a627748eedbbc1cff77548583e3c68e2272add047d34d9f91e0e56a4f449abd127bf5ebe91303ada732da1cc663523b7941f4fbd27b7c8c202ac9c72afaad28599c342417c13aa4119a4fd762e8ffe6ba5640ecd0ccc422a456db9f97f0e2ddb65fcc72094ac388d53a1055c7e902285c4c3c33c13bb6fbb4f1956414abfe45bf1329662c3420d4588ee61883f82b78d5802161323cb76fc89781a53fa03208da62c570ff01f50f11f51b80257abe40cc9eaae59264680755951ae36752309faecb4b13003892a1a8293b2d0b054d2897e4334160372b4af286eb9f2a566c6292c904ccce3c9c347187cf8fc31c4a98ce1d54f52a2983b315f95e490701680a2cc89d1eb7a27420049d3328ec145909d5967a816ebff3c83648fd717c0795eee3667e895afeacfcd7d62088c4a1daf454ec3e669c6f1e02ea124398f7cd98994d0f238d36a5c94371cef2000b3952f0b28afb2541bb44fb97c1bb3018c7c281c04f26aac93c3b6c58e4325f1e4f5387850f4b4ded291b0ac5f3eec74d8ab640f392e2529136860003c26bd68c485f1132c5a930fd3d02b90b1538df047ad65f4d66f1251d093b86e8c5f906c3d8d836425a8f8ef06b9eaecda233d7dc3cc5253457dd92cb38ce699e7b84705365416f3a4a88a87539412484276a524344e53b5ed2021c2a49a1309b6f78a3b9823d0490f20f2dea3a8ce2c51146cec807c92a03620921c8c0667445fe500174942dcedcfd9d7fcdc3e44216fc43bde909e349f8844d541511909d44c4a52a032f960674d9be2eae89e9cae044fba004cfc64374b559239dd182241e3ee28df3b908540f02dbbafad10ff5c787e905c9cdd48f2e71c700d164ed9118e9828da4d4e72ff1f59095315dc95b2331766fa698b0857c55e18c4e60257ceb412fd9b4e7c502c44e574df074985389de2e3e0994ccdee4be63266347bc3ffbc224d2a2862464fc69aa65a6aa0f8761ea9b0181669bf40e27b65fce702462d1091c18dc1487df10d4044cc282a15f51f3274aac62a05d4f2e4598ce9df08df172600ce03761c99819ff93e282c053c0646d89c93d6c832e4eab721215a309d39abb3f5d4334cd08a7e6ab652f1efd33dad84f864b72fe31e5527c077bbe7f0dee681081ec9351d90a7423f8ec0fc432a2f1fc62013636e0aed5073d349545e6ea11311c87efe08fbe027dec4e053133794510cb1338b5b0f79db411d4da07151a21017ba9bd01933f2c29ddc9a1ecbcba3c4d4fe5fd03394c36f333d0ff2b1f0b22123dc67d2d9a0a5ba83be3682f44d251d25efde5a7d0391b54f1cd773a5b198ee3c162c2dcfaac0b79853fca91527e307086cfa50c1c3ac559fa0ed4ad5fd1e1e6a50300884ba0d63e58133bbb6c0a228835df9da883cdcf62bb298a1c93d0a59b572bd8c7e365263713125df5f802d28a1aa242258d6e840f93b229d0ad72549266419e047885862454c183e99cf4bb0673cc34dbcf99add1421d1681f353794c40e8c2e6716e70667b85500eb15c368dff91e86390db872814eee2a90bd08e29858609b644ac7f7e15f244cdeba5ef710ca7cf3597a0baa49a8c00ae6d95fdca82bdb51c88bbfdebb27cc4af926e406029727bca3a85b2a75199131a8f00529fe6d47781a409863fbfa9724c4c21d3cbe49650a9f00709d0d88a7c75e69c372a208ea37e3d31a2dabbfcbffc7f4d0424bc67f05d6e811a917dc4cf390ae5f5f9ae20db7aaab0de5d25eb1068b25c7bfb1f8bdd4cfc908f69dffc5ddc726a197f0e5f720f730393279be915e97bec85cf9c666a0120c1b2da6d85dae8a3953c3acf8f29953ca66bda7c9b33273259cc12a17c490281713f63b4f5b8e624f3b8ad402444a44e15b2e64665ea8a8c40b954cd51dcd9854b7f8634c06a4d6d0239572ed365c54dde12cb87ddce8bd02dc8068e7ba7eea29d1dc26b7a8196e24d18c8da010f70b26c05facf7731b3a46d92c8435e3cca70027498c788714b2b40d152e031a42f024c07047ba6c69a8fac83eaba7dfdf564083e89e78ebbe2be6a1db5cfe9c668b40a80792af0ff98d857261e225f8de7f51ab61639d1e3f602353841f79dd8b64e042cb93bea3f4744f9f3b339774f1ab9b675be3d067bed9d4edb97f5c26d7046e546554d07281e2c01674a5e59c426086817f27fa0d631f5f3521858fbf75f250a77cddcbc2c96140a1b540f7b8f6297abf7436015958b92ef46538faf08bb6f003b93499dcf4783706a60db510388bdfebe219cf93c22fa7f12ca1860142d9b430c463200829b00d0eee1308eb2e101dcb73d64a03cc0a34f61fc61939c1e206f544724a8d908f2a81355bd693003f9c28cd775cf09bd13cc9e6b19ce131594d1be267fdb5529ff62725eb094ed7a0c4c99803eca45a0c2733286af841b9c6f06b454c23c69768dac864cd8765dbbcfe787d83e1652f445cfc8df713a182b259aa1528a30986713c2b9a093a20331ab0fb23fe257c42ff45ecbf62d749b3a5efa3fc0465c64842851970a508c60843441b347c9f31bcc849cb63b32b8075251a1da0e7514504631e5a8dabdba181bd20a0550637cbc524d06024f0f690f0bc42dfa9d94fcde35d6db69b229af7c712ae5230a2d594849d4274a72322bf4bf1cfb2c0e347a70db6dcf53f132d1101c954f96d5b61d222ba08cf97539656af4c295e8d0b211ca9f9d2de23857b37586b7c5cb436c3cec70388399a893a9c4356b9abb75bc572e0abb73aef806eb0f47f8d44ab3de4d099012b7a58ccf6db3096e561e7db1bf1d956f2d14b0dedc6fc8def79fd77aa1fc33b59597b24b2599d951647c4920ce3bd81ed6bdd32e1bf981e09c350ecfe056b3a7ba0a8995660b3d9b526f7887e8eb3b50fd050f930e4f2b945ea4d +MD = 21c2d63349286a4924387aa391993e9c9d9b1e6ce137b047ade88466eadcea14ed869c7eaa09bf968c729fb3e7470a31b62b50fdee2d580525978995d7032bd5 + +Len = 36784 +Msg = 460d93600e2e01e263e30a961f6c79688cbb0c6e783427cc8cb1cad6d9c9c175b4521accc424dc1b5920f6e3ff71764b5412fbc216906de68012eba4d79605a1407d2cd9d44a6687f6a74744e4a91c728d5469dba3629696f040e52bed5aa7f69198b0d1672808ede37fe301f69ad3a7e08a3d02462f0aa584449eb0449b0e3c50aa8dfaa4472816c8b0b4625cce04b0f4bb5f7f278130dbe325007e03e4a23b24bcad9db42e30cb4b43a0ae3fcd155673efb69a6fdf72ffb6ebf2dc53bacbbbb6d5f701be6586d2173f912fc61d7061022e2c9b46d237dba49e5b115ca7f183adfd5370eb7594f3d2ac6e2b1a487b994b81a8c9d3e1e8355647256645327c5cb23ca93063e5c0f825921feb62d6a0c6f6ef136e3f94ebd673ee372337e4d40e6d9be18a4d3d74a7b7fa8bb7c74d46afab8153d0b173a986a4997990594361618521e4c6d10617ca31eb9cd77137d41d113e513752078a0c9152d3f4d4d98c1da3d7982c19c711273a6e3992871bb4d8d02ef5ed4ad7f732e1202d99cf2ebb096ec3e6044a08c9877b8a4a3132824da891592839c06b56be3d0c6fc573c857ee8fefb6958f52a9b19b47b8fc99f30755fcc8d062dc4c10794c1c81c1e831c994ad63f1280e2b186f43ad693be5f64aa6b882d6b1c8018e2bb75a4bd555f178c371267d05ef1e7e871bc546363d137e646e8f236ea912379c25ceb648e28ecb43823f44745bb044c2ca963735cad30b57c5f89ee1aa0872933f7fa864b9922cdb8ab92dbd7a6bd0e8f928257fb3bd5a4766c42e51f06aa9daad750a6fff8502552e991f2773d68bc14f84f65d215ad1fcf8fbbd08a6c0433716b8c5b2dfedb47718e904fb6f79dd1475b194173c30d93d24a6324cf293a8732251bf757f54ac0af0b1c38295dd2fab12b7e5f52bc9dbd492cb7466fc693f567a47e200074151d55df744010e89e74ccf9fd33e17ad3d87e9756d9eedcd72a7c6a2159aa03d0ba208c56fc301056fc05470453c2762691fd1a9043bed44a830ad6a3f8c72cf423799222c0f97da2dcf483222358472c564f471218723584ab7d8a84a1fa47f5e5db717632cf78f8b4054ee54725565bb1df7d4acc8b890be05ef641d985ed5c7dc0aaafc634bacefdd1fabc23bc3c1b11485db8e47d4746de299a4a042ca5ae67c3be5dffcb8bac36c527154d8f610110f448cad4c9d8dbf157e72bb640d952105f2d0f43f68406eb69448f29015d942d7dcf1f21e3e621d6847d55645520ee13ed672247383c658838e3984ac49a5ac34f6124507dd7ceda19cd6592ebf4e8ff090d355e230d4e99be74bf274b9fbb7ed3af58f4da3619889247bac677cdc91e3c8fb70d298f389c5488724308e63cbcc4fa4b639b79b87e888ce3838b24051df25f35e8ce3aaa0cb59f30328ef655097de27a41341b2218670d7e3e9890335ac4fc2055838829673c19a75a4058aae178e843f236b2ccd2a829d96c128aca711ef704f7dbf02d386298163ebf7594d1408c571b05b93f59e69283a09b8c30ed8ad062345a2b2bfcb38b2b646ee5b9656f3f22104396e00a8cb80b50a60d1d2c7308b68f6061ac30c973454fd1216efa4f81137652e46561151aef109495d5aa7210708d915c3450fed0f27588a14c1c7bf2c9a1c62a25fa0a2b9d4519aef103f2782ea36f734af9de34b169e7fdd7588ef4a3471fc0a821f67a948297c0f5b59eb05f655d4f5677e21f1081918f771ad3074ecab24062a54478634d81746a3bb1497147dd38fd77a4e09e70f7eec1ffe2cb1aa14041fbc09eb597fa7921b512e4b412cf81c89655912999ac9d844e645880956f2c1dca104fa2a13de1617cb7a380a260cd86b7be217ab098f4f852d48ef84d98e86c6410e1dffd7c5cac07a6782faea022fbe80de02461ca90b395ed0072b1930796304eefce2b3a3d7a1c6bdd21961224808dc167e73bb5e33e7e0a57805ff20c23e536e3eda8fc2643f1843cf7071b34cd4f64f3139cef7f0181b8feb1a73a58adc94548bef53689a24d6c2220603ff62a73854c3a03dbc6953775608735e08f9c731698d2ae8dea1d76a0372e3004cb30b09ecddb0f0f5c7205cc17617a69236869075e992346ca0e03acb68104ee36787d1de2772cfea3107329ade0e35886aa11b404a302059bfc8b0e5ac94d70ca5a4f9f348edc3e3d09161a7e761f135bca03891560a94ef28153218e577810e95e8e7f3e929b227cb4551b13a17c4e0550c5131b52b797400522a2bbbc2363360dd04a6b12f86ff4bac6a7f7e3895d05c6dcde91098b5317204ffe7d87cddc12e0bb8d3490625b3784c15db5ccd4b4efa49147f0f5a326ea3b51914e1ad5e0126f96c4458b6798b79b0b88b7cddd0a2572a8ebb597ad673beece07a815da13b712f86bf874868ce775dbd5885700b149a97a36797008b87e932bce05e958db73635700d7ec3dcc699dd8a0a208ee4ecec19bb4970f238f34c0e150f205c0cbc9e9490f6e42fbcb908b68969f440437174373e2b8d5ac500110853d070bb0693d1d350416195f0f0eb73203caa8d10ec5b7994d3953f19f35da8dee9f6b96185f67a17b89ffc5fb36b99b94de97e33a5c867250931aa1e175b771e22595e06d836114c21436cf34ab0b2bb625a1a95e4e48a599709a2bbb330fc7c4541b2ddd4b8215945f8ed93fce1468e44a4691cf1d6699944c42fd80e07bf5e1858becec3a531a5ec6488271227db9abb7073b113c78c4bd70b595e7106492d654389c2eb24ca98dd2f4498d4a9fb468f66413d94df7cd91985293324552152f2ad1b9f965e739ae2022acc8a902dfc872ddaa6ba45c0a9d2dba6406f1dcf33873c7d4f0a7ab413c18540ac7c03fa246c6e46d6ce22e025c9b4d96d9a86dc3aee98b6b88fa1156b435f9020f22be82406d08eb3179d65b3c8b9c8a3ecb7cfceee6acec46ffb1f0a30382211332f81651dfcb927dfdfd6bd95927dc8aed930564e5ace5af0af595950bafc6588384d4f7999cf196c10bbaaf9e600c52913883cd70fbd615ce64cbe6b8b2806396ed34be150d97008569de2bc5d5783a28e5ee75132a3c3f9c77ea24853aeda8ef89bbf1fc9dd16f9dc02cda6a08ce964713abf846a8967107b796eb0bb94cbceff2d14f9abe6f287c875d37f57a7deb6e5a42c37607635e829c5886b6ae4c043aa12b3389ff9ecfc437b5c0e2aae4cdf12259634bc7215cbfae85a410aa6a03322d102a44c20ec9e749ed01cbfab1a281f4465412585efff166c4afa40e055e78ef26b045b62dab784659771c1a530d9358a012743b8abcda4d9c25db69cc6a717fd552173c89e8d9a5819d5d6a5763a7b7ed3adbf12317dccb5293314e1dbbbe57b28c43d582168df00be10a6b2d4921aa8419d419b6957b88ae74401b87c6a1ff44bb3601c49927be4efe9dad4322b3990b4be705c3ca38ddf6458262791fdeeee28b7851cff52958d122a1a13784b01bf95d7f55c90a8763d07372b3902bc79f32697545f2cef558191990d788e3b9abc4ab177a44faf992b3aa8b7f3b7efe98aad1d74edb6b2e44ad2ff5c0a5c432b0f3d149f3a5f001e316575725f99de653c250f8ece87e36a703f23afd2caaadc41d4c71528aae32ed7ee6406848ed1168ff636490b85ca0e793ecfacd6c1bad7d97994807616a0f1a63e3e186a7f0f230d895a4eaa9aaef9ef39c9fe2027b9415f9341892a8d7e8e25bdca531a55e1b53e444344b6add9535997da4bb8e6f0455b8a97d74ef6c62dddd3d25c9bf68ff4a990b8d434a5914340c0ca3ca4e4a70856c55e13e938c1f854e91cdef54c6107d6d682a62e6c1ff12b1c6178ee0b26b5d8ae5ee4043db4151465727f313e9e174d7c6961abe9cb86a21367a89e41b47267ac5ef3a6eceaaca5b19ae756b3904b97ec35aeb404dc2a2d0da373ba709a678d2728e7d72daae68d335cbf6c957dcc3b8cae3450a59c045572de824c7f21bed18782699fe83bea565582af7ccbaec1c1c69c9c87b4513da1aae07c5b568e9cbb3535210705e6e1877ed25e8c3d6b53b201c68d611944fc9a1d710af0dd2c2bd49709b6166df3f3a9151675a7d3fcaa94a4f5b0e7bcbd6ac63359d412fc4293a316c5d1d506aa474384149bd275a8edf219f1ad208603afaf555f81c99b17fcb11b33194ab95206dd329579170bb84551c7822b155d60f2dde94db91da2f48d840c19377f6f3557008760b77d7d74d93b1670d2cc2b1a5bd759e92617f9216ea65240d27c0e996332eb3ffc0cb324d2376e824b4fd67a14250bfc6ebe88e6c89f567093477fc752fec6f8f0cd951057ce37813ea647c8424f694d391b388bc3f57f7021eaab074be980543cc70c809186d93652d7674c10ddd9a63034ef578632340a266d79a1767d811b8803febba7eabc6630ec1d4ea458c5cdfa1396933adddf0447d6d0dcfc4132157b87550ac27f49dc80ec50152648948b40c01688067fe7272e2f9a0105bdf909be5df7b50acfe65fe9e0eaeabf33aea8aa41557b139fb43b8380be58b87a3fc1f98dce04a661fcb613cfd21596a37becdfa03db788c5ae08edcf24293eff6d03d31dc03ebfbdf4aaa7c1f0ded51f631f88e5b5838e7a3d551526b4bcbfd4e998f417b7ad7c6c34034dbf2c8ca130ce084c16a4264d44c9eca38c565862821d4805829a9706f52689accf6e69255c2470d43df4e9ecaeba933e0af2474f906fdaae67514584e031036dfc9ebb862ecd1fc8618c14943d78138ea670cfaf86491896cdc3ff1fb6bc3b374ba4cbef2b31ddcf8b54ef6c7b6b343c6ab839aaed12c866bcda0dfffd31f7b3c668e186ddb87291c234c19deffbbdf05eb2cd674c32b3c53d7db64b40f7008974d34573cbcba5b70e14d44e219178518947d20f2b11a15c5694432c04761e605dcb3edf7dd03fe977dc6ea89a932b08f35d92c912175ad31108fcc9d31618e08a3915f27c3109ce0674d8d3e16b9fbda4dd53be8aaca5d176bf294b343fb8b2020613d34f54c80fc2c45af67e7f9c17a5b05e151a384bfe8ca212d9b059c47ecd187dab7ea34753b4b53b39fa39eabefdbcfbf74b2315035b99ff9ccecc05ebf4599ea192844d43e22dc5c5dc00505bb4eb718ca4d5c888eb8d37bb160043a27eb0bdde1261a18756153ec2ac3b9796d3240afbadb62f344564035f105e464b7304218986a10cc61856ef58f3548716604e0c6dee2f11b07008abb0454cd58ddc3f13cb76ac56a82ed620ad37b2e8846653c009f0a635a3745f77d53c33ba10c048dbcc6bea47d7a27f19ec03bd8287ea1a6ef83a8464b65a53aef77d7cbb7d2707c1b3edc3a6f87c38213bdcdd1dc8f68b5e615432669129cb9a3d918da17c19640da9829f3db6c2e881c24c7a80ee918ed76dc71603dbe9ae81d0ffd033b49f4706d5b4e6d2b67e7982abdafc74a2c40b23441a9a033da2e6acd74fab3bcec098f5600a002ea3b7d26a1b0fcbc18c96ea880dd5252d5e5d5a637b0a887f71853f22710c55192376db813c714f2f530f134ff1811e4ae722f2eee4b7cec946f424d531434d5bdec27c11368af185a0376fbf17a5ef227ff7969439dee5dff5183056c73651bb7ea39d6031e2178d1a17e422a7c9ff7dcfe62e9ea307358925f649ec5c6ec702a82126b754ff2b0d6ab65bbecb75b6237ef6a25449bb26917e9858e1187119f80645ff5ec76b93ce371cbddda9327cdc352fdafe548120beaa05467b22c9ad654016119db3aeb9982a52f0c56987b96f9c9abfe4ebe28bd74e45f903a3fded11fe9c42bc404e0333eb5fdebe34fdd5a55a3e374e3765cfa515615bc0c29640c4e7e07b0295d5db66214b6d12321b384618242b835f9254f0a46053fca81b0d45a3e9a5b9dbcba8fa741f87078a694b1a7d5284cc8cf1827fa64ac8fd7c14be5ddbc0a62739b6d1b88ee213e7656f74e832d22871e60bc21cc127a40d670abad4376b6894d820c065149cf9f8eab61c7adeac01ba94677a8d9d00ce72918469725ef4d14adf90dcccb155218342c5ac962ae6f6eebf8d149be3dc2e74210a33fef962cb90778f8db40b1673cf94248a05be8aee578e06f60e3bc4ac5d40248042afbe3dadc8a43be4cae6d726095c208e419fd33b2a598aae4cbf3073155bb804290f0eeaf9574e2597ce35cec9f4d5fb5c2e8ce3ba0e3643bfd5a200c936430d0e5d288f33302e3f1ad57510fb741013b63e019767ae64943b0eea4a833e892507b172e49db844fafa037f34c7643b9df8d71a9f59c07b6a6973f09a6cf9f313bc12d4306076f61edf603b82564dbd62c901bf42b7cce38df10b9d37acf1e7a1d48836bda3f2ad7273f59142d0b7fe2ad2c5d8c9a95a03c57adfd76b6aaece95f81b80d18fb5d2bf5bc96abb5d2866bcba2a4d7c59f345daacf5877cceb611b8cfd49ab54c46cbcd42e4ac36232a5de22a3906a3ec1e1093315796b3019316d202ba6db1012d0264ce4f41fb4d444b62caf9eb868d64cdb9ae0dea582bcd +MD = c89c166c62c53e7740f091dcde7b58c8800e8977ddb515350302270bed6b666df6e029a801f05ad48d700b7e839b7dd93e2f42c20a9859fdf6f0e71943115c5b + +Len = 37368 +Msg = 0f34fa7e1dade7e6947b26744f5b897be1ea4e1985c5ab7554efaa46bb7337952b4a77c3127e5ccd0b9077cf51180dc77aab6c9c62017f5f6557a1d0d113af249aa7610550b7dadb4f7e7d4a366e03fb9a16caa0fb497032f67da17dbd712ddfc5135e4dbea08896c80de1ece4a693a0a8f5102d38e5a6787127535667d5da4f125516a244818f88de044bbd4407e73d0e0ee64b011c48b83d1e5e62b786defbea37330ccaa11639fa2d62c63edb245a3329f2033e387f7bc22a6caa96ce606bb67f5a9338494630824ecf0ebb6875807f10df5cd77f724868122234eaf38828dcf6354076c147f5e0303a9da1f800355a8a535fb43a4aa797a02a0a9d3e7fb9c6646c1a6d5140107a9b497cdad1ed042c5ef613bdb02e20b79a2c3495f76da6da91a7290341590aba57a7b24c3b65725d557280db2b473c30c9cfb8bc667a7882448d7621d8bc69072bfa47e180900955376caef4f1bc826af5bca0f8d3ccb62547c608b05f8eb8c8e0eb447fe795507dcc8fa6f14bb67bcee69bf433858ee82a60fbe8961efa7c673e21b010b79ccf3bdb806fbb815dadc26313ba54c5e697fb58d41cbd5d253f4b0d45937b39cf0ff82eea1138dbd8a2af36ccfc43dbfc4afff6f8ae0b643a88dc15fef6a8b554971d8b739552a150e2fe256fc1e80ff9899e0410a56a7a5fe0821ef5e07f7253ef10bbc302f01aecf315f9a4122ba805dc4048c30ac1e9bccea5efd159e8baf5a03b868360fa8fd55f5e7912f6f4f047cc4d8cbae4f7f77bdaad513b69cbd3613105b35bb7574832ae3f6f62752b2de8e02d969c3bf6edc18c020cdb191006c02ad50cf210f18d2c6622a13b97b8a80fa1492e1218a513b96d0ce858709f9b3a141557f172afa6eb116ed9466583a9e595071ec482ecb0880434ad5b7660daf6762c5dffe679da96368bdd2be674789246d02d5981b30d59d9e0228b343c0b1dd882e6c5733773565ee1759122745c3d3c0d227a1de2735275791091b11975d6c27fbaeb21d1b75210d86b2022699f0ffd24c6ce5f62289b5f683f14f6e1614abd8ba018f830efb3d4d88681ed3d872f137fe1fe4e19745d1f1477bd097a17a1500e61f4013a62a032498d5c8bd65dc506843bb1f2f0a1c03ee48034f4cedf020470c52843d85a42b3934958051e68fb5c9d9b9054cff6eb43422120bfc301956019945cc6f31dc0de1e821e62fbf2f79f31ca427b9fba07b69524297043c484ec7196379371f4433c52ff56aa5741e156a791706f46363b20444ff8113572f430e19362b13c27f353988aa7e6199ee20a69b6c239aeb2b008b96b35a980510fb5cf5285283afef7ae56e9b91d29512242de01dfe0bd758df65b3f88410eaafd02a49c470155c178d2f5e535576fa2c8866e3c706c5dc9fb72929597e0c6c4e69fc939504373b79d49de46c39cd2d9fc5e812d1ce675f42205c6330d8e90e9f115a4f149f67e298f9a78d40af53d3de8537f9e8c55ed3f29365fe29053545f46eb9f8cda235d5f754d2a57b3699517b1ecd15568c1adf2398ec56ac838fa6f0ea921d1aad1f8a178ea5e966501c3af82b2dd1a57339c55799461935f446b6171d8918962083737c0fa7b5ac9c4af4d812c0cb701b1a4b012d09925fa808d7d96ff597ca9d002687405e96b87ba4139d6e2c6f20f46ac4a2bcad6e744f2490ba6a6e0722832417ebd910f9146eb62baaa5c749529f79d6ced0b81a2e2a48852c8558e338735dcbfc2285794ae60f81a25237c66f6ce5d5e801a001e7f9e309b2595cb866de2bb74ac51283b6820ec9f6ebe482e1fd2d5680b7fbd23c1e62a2ee4edff35823fc7e4a295ea4f1c332792aeb53eb44b0bedd2b6c31e7950865f532fe692066f57e659cd7a069971a2903b0c91c8c223828ee3ab6d8de7d586b6522b06edc2dc2f0119548ae2de10740ee1b1d84d1e4f3e9ee40f057137f8ec167202d8763170d1016d604de7e9a1b18bcdc41535917647061d0d13322f60c269fcdce1961ad444cc9d194a7d81cb61ee486ecde7e340a6afd6ca203898b6109638e0abb546b0904cf1a6090d6d368d1f98d78acddc5762805771b3ea39a1dc856e37bd3c7eabbe67b13012fd768b3d050526d34e44608360e72855b2dcca301ee6089f91886dd40724deeeb76472778ad98431d2e2061239d0178df747d81349e77cda1e2c9fdd1393d924a1ff9245955a182bc17fee16f25868e32243748eeebbbbf54a34e9de7346483c250e94ae0fd20b4984e3c39773c840df999846a7f5a8ec787c66f2e10f8554beaa5b1fbbde87841381d62b9ea468ca0ac50ef56846f738eb1e8c63edcf98253398acdc72ebc2ac122120ce316d7f2beb0e6d2ad9c9f0c6d7976ce30b9bc6e22356ca73dd1ecaaacdcc88565bb6578e0bdd7c8c0167dabfc44fcf1b425b59b4144e7d8b045fe9a7ccebd86821673619f09804c4e806ff4a38ae7cb29af797c290e78ccced9765cb98e4d6af8d6865f424a9cd79968fa590bd1c3d511b57c9351e89c1e0a2ac873db8214bd0a6a12c482f769f5414eb15b8da01d8a0ce633634479ce26c2b889726b408fe7674fad23d976942fd690097eb18c51646ba0428e89188b81b8e11ddad1503b947005ca1fae6e87d1b9db87251fdd0bfece720e57886b60b92d531a0fb627942eb51addfa8a35d1a56b9faf011138a9b395ea0b60dae8ca37c08cf2a3723d2620b6fd7d56e572fdf58c3ad5754e25c71d6266de3cf9073477f2dd3c18ae175e14f63c0cb7589c695c6c6bbf041f1ac0b6a476db4e5b4d4c1434e24ae1c22cc875e345208e4c18a044bc70b0301c8e32f9eca8a7178a215d77172ac3914713e1ce1ea73d6e488e3f38dd085d8bbef6aa61ab6ab61afe3a052b1a252a99b5333677f8e0d7b9d64392b34e811b698efa7388513b8cdb3fedbf9aae5fe48d8521331e127074036e0f475e91897e7c04e04ac88ea98fdab7b30960543985cf4f54742aebd496dd8817c975467ffb15a97e8ccca423539c0e306ef69c4092e16c435628f59bb4aaad139591cdd315d8e4fbb5ef42376c91abcc4ce7f713706674846592c01451fd5579485e98216328600e42bad9543f4e091d4f9ef510b2c0f08e2ee2cc0cf33809bf3e1655f947a6731cdfb9ea184043be79d38606c6de7358d72eb389b41cfd426bf37367b947b5c6bdd966e4e213f524887557bcb4680015d5c16f79c833bf97f614d04deff7f8a357cc3c6a503ee4e3bfa16e7757c3f9c020a3712ca7dbf162e3feb7891bbcc1c17124c4eac105856495e454c72f96c2e04e218302d18a353bcc3db399bb2aa389907f7ad6d31c793f81ba854cba34fdee94e80face3a2ed9b054e4f004ca630744c48d8cf04f812cd39908a5876430d53bb53617b4cca9d09259cd45d5ed3eb09fafd5923b50cf4a5f412ce7ae23563b817f0330e7b75c60eb3c5fdf1502825b33319968581ef9152679dec349c80a374413afed70e18faf41646267ccf1783286b39fb54f9f47b4afaae4e05f3a94f10bdb02f556348ae81f399e8402a2685a229bb02226bd0150823d07e8f8633c925e3ec4f1a19794310a23dadfc0fc99fe8f529457e75e6e1028980f801c2a4a42c5a4bc885af1f7b28c8ae0200de95544534113fb9a6cd71d2825c452d4770528c975b363882cf9952cd676eef251e254f8cff5b645ce849e0a4bee062732b66df11a712a332fe3ff736f65f1761a895706630132f26cbdbc577154441e44a538c6f9be8463e2fd1ae7be74d2a12d927503670014a82eca9f9601bfb3c0931ab2cf7b6219212d8e0e12296d397b7245d57942bb0770fcf26e4f62f7fb15085d039408249274f8e0037c1916cd0dd1eaa0ef5cf7b151be7f520afcc4c5258bb5529d09cd97652b3920abf739375e33c8fdee1d7fba535cb7725037eeb9f9056cc773e425cffbaee28d29299c1f767e2815fded1acb7ebee3f7a87b3c7e985cc88c9d03f4e33e6923737e19082b5e9c5210a4348f8cdbcd4a089b3077bd0a7a12c6a3cc027a364543fa302d44061d738e156b5aa7a4716f36ceb0be671d584591a00ea9173dec288c49c9cf1a56bbed244cdbc72abc488ded706f8dd44789a78f406401fad467fc4489d16650c441f15bde7be3e07b6910b817600586e2a58752ce303c74e6afa7b4e1ce5aaff7b6667df3d317908adbdedfeb0c8f4497b5cc2373f7c14d1bcd13247a4a12ff982236d0b26cc90490a6e1aa13fa91d80ebf604a5643fa4d1dc826db7bccf8084e8e489d44cd630236d3ff61b8b27508eece2a0fa19b4e3b91a8ca230ddd7391c201842bd17e4b532469224b01bda19ddfe712ba798825e12276e6425804eb649b83d2c48008ebbf017031b117a27f5f8b1400920891e8057639618183c9c847821c1aae79f2a90d75f114db21e97515975cdce0763efd7035f92528b7b473031fd54432e5c4ef072af2b311481bed89aec88eeceb17cdea08be197f1b4e526019b53898ec072473c57ef69bb4bf4e81765efffe8ea5c03b979125ced81ece2519c4df28b542af1af19ac5c08c5d00c69728155e876f3f2a8979315c15ac501cc60b1f2a69fdfac4545008caf97d6b20ba2eb954fffdb080867f2572fb813e0bc991e1e52fc16c3896a7a7ff22a8f7568777d4271ed87c0538aae958b22401bbc95f0ea230146d4060a88aa830650c32a50b4c200b870c8144026656611d02f46f7b8ca9938165a25a59990c4a3d127abdf20b87ef92c7bc558f82b430f5a87d63ef4542818dbc272bc4bd7599b771f77634f7a4f182147d115a26b948335a204cc31fb522c2db977bf1dc29445b917179dafabe3ade5d8e206a3baed15f82a3d2fd04499da728baf4e6df7174b1dab06decfb1ef12e09b52bc7a7dbf20287cf9ea7db471bc40c583cadaf955142b57bfb70e10d3ffb80bbda7a5488d4a3d16c58c88cf7c3a2f038fb4e32dd0295889bcb7096d14ccb2968d48a28fd9fcac842a869fea1bec83a23dacf5291b032bcd984f301b23f296e83c2ff0d817affd41834911b8d33be54e1803af6f882a2bafbce020afa409ab6d64be2ea5e8dcb5db8a748ca034b0da43a9796065ba16ce9c953a499ef79a86a27183aa6da01b5cbe8a796f34a2e3c94f6c4ec69023418b00db8e196db0fdaf03fd00f2b3efe468671dc847eab03d38adcb1430935642f798da8c1e9042db8b1e61c6960d2ab04f61bf019546ef25bf0b506a3cd3c5938ab12c94d7bb3f9cb15e3a4512ddd317983ad885e5bdb255b2d496a159d5e3abbad64c38c322f9b9a85000fce7aa9b82d96f14f597c39c15ba960869f61e52f40e94b3f87f7c23cae670306e92f7c67a795adea14a0d2f1e3ccc2024c01176250c68fe544b3b2048d24b530a9359f666feaaa0497adecdb7cfe368521663df872acf75ccd4c481ac125de3616725ade0dfbb043e88dd0a7ada786b728769e1c2f034d4d2aaccca7d2d146bf38cff4f70932874f1126c67eff2f7842681a84f40e34575f61b986d2468fb4741834b7d8ecf6f6d11a621588f9fed5cbe93b35a897a5de3b7c5dbdc4a7c9f2fcbd8ae9aa3eaec671092707ec237c64fdb4bffa6152bfa988827ebba47ce6c6012fb7d39485c4bfd6e85fe2d30512ef7dd0901b47c8ea82ef7c06c69b4e4ef92877a5bdbf4b9fa9a9bef1ef6428263cf64594e081808f2f1871dc27d1a468531b9c3aee5217a74c9194c576c81322150e1cb59138021479aa69e8266d069e9b82a660b0767244703771c3bf264e6c406d5cd97593d7e3284e6d120a98fc579b049efe4953e3dedc425dd311a7626e85bc0dead5bb866204ab83421d790ffc194a8bfc0210f2dd595b61ddb673d68eaea337cff9d797fbd46ab660a539c6f3defc754123d627a9af2a83c9f4b1323681c9e3702910931562320b54ebffaaa5b2c164b7f4cc0baaa656cd7f1489ffcdc8d719b5ad8e011774ac8c0637f4427a5c416145bd1b2549058847e75d24c3bb4974df86cc78696bd37f405fd13f16dba62573d3c5eafdec9667f8ea19aa0967cd493fcbd0f6537847542f45000aae2e5615a34a55621cfd1f9ce86e8e43563b1bfe406cff3248a698d362a10d7a93dc35b8f890b5ab09e269ce1f5c0615349efd3aea51a251cf5d8da3e05c40b94c4e0bb77a8e2dec4c053ca6a69dc74b2af839a54663007e7105ef6db15ce1ef61eba0b9312c054d6ecc60cc8417190bc1b298e85b8863dfb50686d8de8b38435a1abb67265384f7f6a19ce7c1b4467d7f32e2ab32a9119c23c91a8d6ed08ddec045266960e9f3126cebb99f665b95cbefe1df95d1af53de43b47333691227e81bd3a766e7d79ac55911809e79f44d1a9627564f428071cd9e305873d83b4f88f12c0707c406c139447db6890566b795fe6d11818d06b390bba693f5c2324de6ccb80df3fe5db096b596260b0f9b1b61ae19d6d2b8276150227cea602fdf692b33de83d29dc3ae0334c497caa17ac1a92e956eeacdcdc2345c1c265d272aeb7faf092f4eaa2205a84a6fd06ec2ebf0930747a172d3df1f65f0ec0f93b3fb1a09c79edb0d2b61fbae7eff9aa07bd6f147c0993612d345c00a66566cabda3a3ff2 +MD = 608ba7ca3bcd069a632aa9901b1626ee501570cd73e5370c05929063ab4060efabd2e096175eab8a29c71b3ecbdd39d443b4cfd500a54695e8d118e1fc51f9e1 + +Len = 37952 +Msg = 0d7f84d2848e412431dc9c86f415a1a35be85833ce66997d09ab211ad0c1e6fbddc1a8ae1e3bc9dc1dd85e17c03e86d23234fbb12107e6042a2cf88e9126b68a36ab14f0c40246f42cafd3cf5252ebc305cdfa5935a57dee60ab156d4edbd95efe84f120e0a9617245a722391319777dbdf97eb472080543956fa0426ea6f87f1f9566c6d9f9c1604f0a74da6b5bd3084001af4841f7270bb0c1c2925950bbf67f269c6b17ba0ec5341ef03cc3dfa66c782db4a0083b8b4f99e9a2e776a1c9ca087ebb9602b4f2aadb2cbfe6816e99b14cc4b641309cd817382f6ac82f60cb03a0e7ead002ae13162c7b08600fd054e0a310dcb522e2b76975da3fbeeb5768aa31a751a07f7219110f55f433d3cd7e0167574f8345d5cf4f38344b50134c49c6a207198ee1c6ada46c00abe6372cbf1a7fe23633003dc9d06983b6060d08165fdb4f6a22907377d52bc55401a1b7c135d3f9ba4dbde14cf4f010a8684253767ec4c76be5f4411eae34ec170c7b3429594be3035ae38a01c4b52348ff1af4112945b7455e75f74b376fbd1d902c6ca28fcfea38e2da008f47a004be52feb5906b46661f167c5fa577c5808e151c27d2de4754816b090ba0869afa33e9545c9b49af1d22936f3fd5761c7c9221b32d614e9b6a077fda73d987894ecf4d85b2d9cd6824765fb860823c5efa4f3e5945f8e7b374f2a5b4ffe4545749b905fa7ff3fe59c34202bd8a55d27142f0f376393fb277ba6a66ff7969f5ea301a991a8b90e46b42ae02e884f53f3f9c9bc872cfddb6d083964824a70f702c4e19924c9d598884e8e4e9a0180c8bae507946b5d07bfba4199ed589517fcf03eadf77fa7ff6f18dfe093e4c0c3fbfa8a5b1f4a703c08addc2ab959741611a594b93d08bf70e276fcc488a562938e114e46b5bb132556a61c7e50fb63e5c5715ba5e2667ce4933109ac75425379ffcd956d1013923e1a31a7073cb4f0f18901f7f68fff6cc511c5ab0ae2421fe1b15e1400870a99f0d3eee047d51c87d3ecc5fe2d8e69fb8cbea34552682b245553613ed3b30676e8142c7cd2d2a8b507614bd2bd660cd5b62a685d357f740d6f56657a490c7dd58e4b78c11a9ddfe50676f21a18cf7e57ebc573770680a3377a2ae95ac2fbf7125dea6251919f28b44bae5738d203250e7810531758144f3f10414b54e41a08d9c1916792da6f199f6167e9b37ba99765f5ab85b2acc2ce80cc4a3a0d2eef098873a0f729478638f2c244381e783b5bfadef799dd66e4a7b8f8a603c805d39faacec99f798b6d0d7af8c3b0de5a20d949be74fdfc292261244fd55729fb7021ad3d5bdf17f88bed847f56e2878402a5befea4309375e4917f1c6892b7923d462c69d82469217b7fabb07e5b8ea85927e72a25c037bfa3af05f8d044d54ca36394cedf1df198b42a5d56ba7a68198cf63ecb4a2b5d68f810756f9cfc179d4b0072c6d10a45c0ce8415bc9bcdb86a2697425cb1d089245a7c29eb2f1703068ca352fc4e97da2c02f3616c82d3e40cae617e48dd6e2f643338bfe617241c1ae0d291d9a845335d2a2edce1101b6f939d0b6f3a2d42d49b2adc93fae5b1b73cf004cbe99e70c5b68c6cc4b4c402df716aeb818b31fcfd4b99de32940b3e88ff32c06d9671c925dab253c5420f38a848a09851c68c0b2df818c4384c0828f5d4117c038ac2bcb83c246a6b33521b5e6bd6885c668bebcb132025018d5d0f825e24be0a1111aa114d5b1702e34d29565d65320e05c21d794f38572ad28a60b2ffe50d0dd3df3fb5a0eef048ec50e144bfe52be30ebf2eaceec9f110a600bb0c2bcacf6b4dabec09b9387c89a8fde19de5ceec780be38dca846d795f82608cf2844e9bced8d81da208c01261c3b498d6819aea3967cfb976a29b5673f22a450a7bf8e89520046303122e685da7058562f5c1bba3ace43025cbcc2eda7fbe71b885524c4a9db14aa157cbc4c9ed7125d7c4ebb74365c1905c6288590f85ad918132d32d7bbc5f43016c40ee52e187f8a9616193a51cd8488ef9487b8f9e683308f7040295067ecaa7a1f61b752daa7c6c7deba7252ca8d7320294ece7348ec494645d722306907008ab73f2ad4c593f755cb288602fa3baea10f64382e271c4c7ed57e2a22724a1b8eb42fa67b824a068907eadc29069622ba6d5160f22c1c228047bda9ef2abfe1ce3eba930eb9d4dcabba88de8f95a6b5b36b9bac87fff3b194c41c075f3b6d3b917b665956113a5f030b8af2fb507450d333cc86b447a9e3017424ac3a4a5c112196be601b338379d823798236de07dc63ea6b5542ac479f117e5c014802954cc4b5471124c7b711742addf509e9673fabbb0181fad8d4cc0a0b4c6c51081fd2c3018bd23b74df0f1d473cb339169d63f3cc1572a170585435427d561c07028d66a1110c26e2015a1ca22024910fb02e83452f8f021fdc1eda4c762872a54764f4bd6128aeba28dcb96410b0d87ca88aa24fd842e48b66124150bf481b8af53eb77f048c9ba4597c3bb595bfd5048e5e9a1296f30e5c0118b177e120df5f1405f50d81a2b5479e22ecbc36b951506992b1b5f408493bb21874e9631686ccada0f78f60d1c44cfeb612a27b061408410d306077ea5dd083fad0cdcd94d778c6f7052e2a808f5a8221f68eec0ee6d31eb95f3da90112c27ba60e4ba8019b0c6af266116619df1a3049e0a912398f59097d857111b530b9a205758d7bc59a2f9e7964629c037c341217171b74f0d6430941eb27376f7e5f01fd4fb8ce489c8a6c74454654a62e4f3073e50b9a99853927edda85a495c5599f77e2f72af169c5dbcb52e7176abd13904690a10d9e62e26a6a98b3df91cd52855c7870152ac887f366d36d6cb7f02a3c766107546536e7da9e6dda70c95ef0b992574b195b8378bd2d1000dcf590393ceda062f758c8ef7f72a322e0a740db4503c7b1beea6041400950c6ee8c65eb969195dd7fdde2a362ce81b2b6913abc309512ca8b40288a85e0ddea2ae437e5544c889d735e4aab8a9b4eb37af1163b83327fbd08c5a2fa929cfd921865ced27e05c0cd5b42c9aeffbf534cb52e9aff45c155b3bde1983a7123f9e74178f2581aa48693c0f12755ca24d8a6eeb08fb17e2addd333fdd0f22a5f19102c836a1f3210221728d32c47f2b024e8addfbcf837555f46f17f14c9c336a43561f0ffd0cd33dc821e50a02c7f4d813b7a23eb7d772a22337fd12a674692e48069257913f4f4fbfc27d04aae7ae235c7dee4e2e8469170c36659da75ba5a1f17cb8ca08fae3bc9accdbbf373ea5789b3608a6ae0ac728f1d2d81ee9b28769e220f8b3bed03f08cbb97796323d794c528897d4b0db2b5c86b5cb02c8097cda9cabe8c14d4fbfc8d510d7262674980314ddf254d185f4263d27c4d5ecd0f4987365ff6f1ed9f451494b80eb8e74905154beceb38a9bc01a87c14c24a2999d182907a319be0f6b469af1fb62c4ade0ab8493835d367cfdadf91ac76b93d3b4ee0fd97a5da540831d3c8cbd0883811786370496ce7fba2b64f38ccd172b1ffa6eaa73fba75f2dea59b0842c6925be9355ee8a9f93c0c3d7b419afd3b3f2cedc2e8b6f9d836617ff60a960efe13586e2af1d8e0429a43a613fddfc61ce6560c8a22524e67e349f30e669bb6e2d2daa83f646874b1c948e764cb2eb0dc30d864e6dfa1c5cf455443d3f73ec3d89987a05dfec2efad90c20858f3af42e3e55afdbf69cee6782428762f07a8bc4a2e075d6a080bd99db95a0fd6bc8c049acd83e0fb06ff39ca486d9409dc00299f5a03e74fca6eb8eb0ab706c570ea7e67affc1484ff5d472e78cca648bf6f933fe52347f58c1116fe4c82f40f55f439b3556ca1409c0f970a7eecb3d6f81d8192970e8443961c7a3e4662e29bb3cfbce7857c9019243db1c72077c39acf317b00386da6202fb86d13c200d751d4a68f6908d4e8f6e1111ece2712df7c8cd309f18fe7b676a10d76e58603db19ff9f3ba3a61bb1be19b165865a670d64762db4cd6525ba2c32421d1c5c14f6db7be247fb26faf35b15450e56831e573ad66403fc82cebd2a2b7fea200adb317f91983bdb5218b7b41df6a2a868dfc5e6f4a37fe6ae8bc458d4ee665a58ff93ed89e9a0aaf01e04b178eba8e3d3515e511810aef3b104d99e74b418301029250eabfcfcd0c9b3e33a704ea86e8a1c2a618ad31a8c52e003e454fc880bf800eec83efadab5a5805b374b442ab355e931ff91154b175ac84b12bdec3f54da2df6048c0abfc14c2c749052f7b719fe607c1477fec8fe9263b710f5acc4717c5745abdb55355c8560362ecd8fd6084b28128682b519a7bf5a52c644659fcca627e4a37403c3ee19c4aaf7043310e806eafb3ffb63c67cac54211cf43f59cb2244dad69f3bf2dfd1ffd7d43e0cec22f54d40252a2f57e320fa2efb4c6179d8b7582f2aa425489773bac6adc542f21ce1fae82256425546e2f4804993f4875a2c08eb89caea4f7ec79c7d6bdffcaa3f9198fb1dc8c3480cbbe91ff0121f0cb94afe17da5ab28ffc974e06f4d5629df3cfd082fdc9dbb69d738114d6110b8f5cd9e2bb059ca48f7aa9776932ef9e52a1614a83ac9fb22961d26566e5d7df98ada15bddf1d8e9d75ec6c0ac0c74d551af10ad0911926f28c0a03d1d03aec4af136912878856a8ef12b6d1d969ae322387a4a11914ec3b3c22a4b0421adce25df6fbafc0b15d0a60fc4151f733e3da4f8fe5d0bd9df33debefa767db11aa6029be1dd991543737b0862fe90f515cf85d319bdffc94f19ec08f710af3d060679cd49838005a2a566a17474028ab61b2d6d48d79dfe12c85406aca408f3f461e3c9e337518a97f90131652ff4a29393041df84446c6ded1bf5e87ab1b946a4ae9485b838de2a7e0c35ed19cd7db32e9b26bc48e8ad1e7b876672480678cdc13e29f2ed285cc56ef357036153ca31861b0dd2a10eaadd20f21b6efde7d5bce6f7854b9cee9963996c02c0f538388b8ad77f89575e6a9322849d4661fbd6fb5b012ff98b329dea45a0bd8c9c25d0a982f80349317ff526ca6473603ceb86726883af65839b7144bbb610cf1dc29973b6a5227af81a538060bb2526565eea0a55a58ef64bd11c5743d783f141b69bd26d07638474d68d872cb03cfe77fd0ca969915313ad7da60d242b9f5ad0aadeacf1464ed06d5ca925756c3f526670f338ed6c86266f47184ca8d9eb7392456beb88896bc4ab53b2418517b689ec5ea7a02961af965ad679fe150af0a24e3049757bf843c9f564adc2a2d8290bd17031c7659557cb36d3d10ab4e53450ce12803412bd5d481537a49215d72140dd4d9897e933052dcbe52858cd9341e6d894190e94fd41a7d1739e98263d2690d79de4f7fc614224e0b587d0a83b9fca355e1bed4be37850f2c0a4bc1c32be63890a1dcee84795183feaf55a8c06d466ad178eb87d9489a940c8bde641dd7321b93a4c06f30f8671ae2d7bdec31c6a2107677a57733bfc1c8230f1fedb67cc3230d5798666de9d97f626204493a4e9620df8e8b175fe5a0f82a348ec33f751feb684aa3689df63f2df7cec7445c6d793856fdfb0ca052aec06c7cb9891b68bee13efe9fea3375fea30d8e75620acbe1b3877683bbc79f41ad74481eb3ccc01680ebd3dc6fe111ae8b3e11ad36e7b2562eeb68a3a91824101bdc373cb7e603bd57096af76e0931a522e408cd1755e95d06ed44d96924797097feca7219d9ac29e012445f692e5e9926a9c45397f7b95cd827ab93507f1819ae76627d6e2a31d29890c092e5c300f0e2f9e4ef4d2faadc1f050d70038a7841cbbdafbd095a3d4e0d0f90307859c123044eeaee9b604651481fdaedf6c922af7c4ef29f9fec1702a9d913a6757507c5f73336dff75c1462efd2a46bbeddafa93ca4ebb386526786eba7cb6381875d402821594205658d7772c7ea87a01a67c59959eb87411fa7416ed637f601132a3833a3e2a33a0f1a058d6a2db06f11e39afec8829974b64ed89ffee9ec98ab070496353371f9cb62a37c23de745056cb8fe98b415885b8c6a2fb8c41a59ca16c3bcc5ffc4ce92cdfc7db9f8d52184b581af62c9842f899b7370df8efbfa1b8d244427e8d727c95e9f93837bac81b8241d280f707f741db990b43ef34993c33d1c4953b67b128b9299dfe86d744ce7de13d36a500c3f5e0d4a639b9c0d0b0b4d32330f12b5771e9074cbb076366c5a0eeb173a12367895c028e5bf304f4c3be6ef6a24a48f3ecb81b7bea23ff9c859da2e5b465d02070af9b3a27258153d9b2fda565a131050da8deb208770c5482b6a630957da7ad405e171037bbc69c673517b607807409393db975827b1a2d41ae712883530a5c8cea0ec6ea40352cf0a735aee482a28f03e9443d04aa899546c79c440a8088bc9ac5dac4cb3d6d940a9be006a9021cf4f22df78efb800b1b06a47ff99780a35c0e941370671dc0401985af43a19973e9988e5bc1d385ff3d05c7a4efb6cddaa96cb731702a6beddfb1f6ebec8ab327bb4b8ce9ac2946e659d8a3936ce4e2af2319b1bd4aa1a236c148622e77a0e9a908afac1974692d411fd3bad417ae498167ba063f46594b4b835149ff6ba0978840296e63d12fb39ffd9b9fef667f7d01d5b2471019ade19c947120d73ef65746003d366138c9647361a4a53ddfd4e790fb86d6d83b3bef9a730c894e680ea352b +MD = 0c146db51e9b72a00fbcb83be0eea5ac730829f73551c39ced2ce000eef7e2a95d3cc28076d275b897b0370007c94ad1d2d6ed18ae48ea3428d35fbb6e4c8fcc + +Len = 38536 +Msg = 20cfbc71906d5a762cd6a251bc08ae8e2a8eeab07ea4b3750c9b245cec7f2c65abf8e418406e20c84270451958575ac0f026618a34b5e7a0390fda097a189b7086735428f5a28c6da06ff8ed128b94873976f352619ed3e164cbf5c51aba2c541708b3a99653c3ecb09b65d4d2ee86696d44490fefa8a1c0f3981e99b4af0798c881aaa40bc7f0cdd9bc34d680c655f0f4590ac9c51876c54f3efd8b313d55c400a5e01f3c46399982990dfb045c2ca4377ddf88cb397d79e08539a677ad3e61263bfe25111ac6d715fb964c46f8310c9c777055e952db630e357aef6f47e9f6a40cabbb728ac00ff9aa7ad02ee28cb08c11643707aabb0c42156a7001527f0be1e090eb47dd4fca966e5f8fa5616618701164370d8a43fae2eeaf3016182728457e54bc785c9a8e540fee9291bee7cdae40175ce33a9bb75888f13794df0ad638b0a037ed4fcae69b54cee0dc423656b06626ae7202eccb0aabd98e65f04f9c223c1c628efe0657d306a7816c327c3bdc4b3835a02a5ebc621f0e3c6f931f036beb6f4744b0776b64ed237e2bd9e0059cb6f6fa56f91814c6ab39499c0fa2927b8542eef5ae45a9b6d1e8deff7e8b3b577107047db8435aa01902bed2aeffd1bbd23c5d8a419799317a9ea9d268a4657442155bfbb00617572f10a2fbb65f48919a069eecaf95c43eb0eee88be0540b5df2c508ba268ad253b60cfdfe70e98066a447b9014069b1433a80a2122ec3b67949c112a065f613fc759dd7c324c600a3b9a8b4b33e38e8aae1fbdf4f9a18ed300eb18197b47363ba366c39321a1d50aea1d199e9ef2df2d96d07a72a6c7c39ea0b3c5e865a2948f5bf212a339917f9f12469708b9d6d563aa64d038beb16210f060bb054a03f4c15d963b3aeeadc82d209193f808e239c335375fa5a600f2d07c8c67febcedef7824cdadb8b569373bb1a8810b20a754d2e3e27957f138ee53b1914d3322c2dd0a4e02faab2236555131d5eea085b8bf0922d0adbe24cbcd211c09db51101555fe45d0a280b9979ae42db45d66ac88e0dc7e9c6d46b53c07bf2870a2c70977d2ca88a125e7f02f809b01ce3dac098a62d353a0488036fc368473403413734cec05930f053f4a409ebc5a8e001f214fad744e76c0090eaed2276902ffb4e2170a260174c0f53c9d5dee946e550e984b3935cbaa543fb0a6530e96337629ea68a5a2307cc9b85b7836984c09ad18b30f8e9e57958592d18541a0675c27e0d0a44710cc81bfe71b63c15fedca68bc15ff26247ed2c4b0d5be169378d79588497c76e8221df40fe102868bf63b286745ac985eadeca20821d35a4e37504f7ec933bd9ecdcc16a160b6eec2f1c65cb8a6aa4da3614d9e076a4775371f30a632b47c83bb4bf6883a0f13729b6d16861edd5abea94560293d03ad0ff4bd033a52bfb941a41937d938308aaa6bd48625083e3083c6a6ded427825682fd8d329c4d2f7ca01fb1fa7a3a999f0ebaa4afca136dee059212241f555ad666b80c691c80a8290754a2d8fb9f9eb3080e79fde5bec0c5ec7223ba6b2511cf33bab6f16babae50e009683dce05b4893eeda0faf868fb7a710d480c68353b83628c1985ea1ca696e2947ea371db7f641bced62172b0625e6bb9ebb466f44cb58b92a0711852153d578c52a487af53e6172875fc050399e4151eab2d17e0a9b80774f85d86ea9ee6d76790bb6fefe681b980fd04f00106ce0591f2e0db98e71d7e896d95b6549815eaac9552ab1b8bc99b7ef7b6f4073d6ec5ba4f7a227b894859668cd4171e953d09d1ecf4b9c0c8200568e28c61a4a238de0e3d539d1714eb1092e27329b71adead5e143c2c6e2017bfe54a1fc957d9cea6f43907abd9fe583c74eb0d8eacad7d4dc7877363823822f36a9adbab9f4892c902cef0cf52ba2245a3230d866da19b73a4d3350f8b54d4786f513a88f98327acb06bc9881fecdbc4a406fdd178abbbb75c641b81082aae976a09c6d1e4fdefda93abdc567ffae721de2348d06c30407174d68158771e13e8f1210b16f02d6ddb12ebb3cb1158c6f5d7f48903a6b3ec4a8496f0f6669396d58b4371e889a63416c4b7da4672ab1db917e748fbb6baf19ae221f4fb454fb9e5aecd85a73fdcb5160f9cda68f2563dd42497e3292ac9f2fb33f407d791970fb1b23bd0d3815563717a171ea33edeb9df7472e20c615582d3e0a9a41bea0dda925c2ace0ddc84e1819a932175a6c914438e04e025f8d213cd8eaf4418ad18dd3002f6e7a6c00f91fec7bd8d50d899cfa8e7ca47f66fe418407471728e594c79f32d4cb85eca4a1711a7d2bce532c56e67f83fa40e24f012c568acc9cd7d1d23545188aa6669c8c392b19f3a7343d0531955d16ecdb68a95d4a19d9456970f7bec1627587e1d0029da5b6f70bb8a5f2025873c02c5931813e6d5d06cda2597e622c1c52d065284dc512bb00a0e84a65824f2bc2a86592d0f846be1dd98b74af4810adea29fb8cb4daf992d60ecb15a5d902eee3070673e0b25da5e4142aaad199f47d0538a9e47e04e3a241fe69eefc2ef925eaf245bcf7953b78252389e12e7c61f46ba87918f46a57530918cbbeb0a9bd36a01028555ec967a0a6b1b0020c1ade7ae31f73105e35dd0df503f86b0a74d58bcd0aba265d7569863064a5f6b49bf37736459eb4048cfd38ce68f8df52b4c98a398700173bc1ca918ae472a36e2628532cc402ed2d98403c5ceed400d094229dab30041142d611287eda1ff382e306768d41a7a122812d82673e93b8cc3a672becadcdfab8dcc6b5d2eeb2cd37fb1448216796b92c6e4d70b7ff3dee8dce209cc5a563bce6fa729f4fc73518d696da32b0dbd61e9187266f13dadb8a5c79d557fbc0cf3d14599c4ebd0eafbea7dbe19a01486fb699f642e84577747381620fc659a718678a21cc2ae46a29a6f2f3b0e9dd546a6b8ee02941137d109344b35550a60246208f798a9b8b84aab8ff06d0880ca7ce24b67061e44695b7d1ec91305da97862526c895f097c033adc153bc7dd56eaa3c95bcb7437a6667215c32627552bb272e46a7ad2dc7d90e1fa7eba1f5283c5f141c31ceaa4fa9948470f9ac2a1f45881becf746c7c57d3a8fa80ac5f4e5adfc176368949910cd54250191589a7cc1194c8e39eb351d27396c464391039a4e11a4ffe3a1b68a2c3671629be05d07b85b5eaf02131c4b519b4417288b97a297205b46258e790850abf8287bdbd84c85deb0c3c256e3bca6c0957f1c2e27bb13b898da90b36717d53527c7a3b392c7d413f1610d1f11fd7159def2b0e14a304e4aec21c7a8f73514629ed4b60022e60d8b7f0b44d42d9a5bb78f26695d55ae9147c3c03ce7afecb8a4bbb43539ff43acb5e8270c2e9cffc07a346eb7eb0082a73fce1a62e7f7ab1c8c0d0a83d98e4d2c139b58c586e6ba3a125d502f22a158daa359a4cc3274fcca79112c2457668f263526f4f365a1464300685f219cdeadb612f503eb5f9e5e4d0c56bdb94c0e76059b09903853531055c4e40051a20eddb3ff3e9c52b7ea5c1ea64c23951fec9e54a5b1cee6c852c4fcf06ed811eab8757ed884f274d3cf52a9e77fe25a5b97549df5cde5814d46c0a2e3674af4cf7201513f668ac44bd3ee8940409e7b8775554bfbac98ba4a959fe24e4bdd7cd8b21df58461e9e3889e9c47316cac7b1c3d0ce927dc4ce458d5bf2571aaf41c8eff07b647f574350265c83e4b2290db8224e7e02aeb6681f07dab06fdf343466acf7b1e0a9fde5b51e01f08ee20e00f71e372db55389a2599f3efe153c33facf499d4b74cdf7ca8ff93fd21aad61e9933ef4a3537724c41cddefa5f13795d92a4e490fc7f22d3a053d7df02f1c0a10b70aeba8851f6f168f4a566daadb401a9f4465c78220877f3f7425137635f2bd890b8504f35552dfdb6dd91de82d1d0458b258394c5fede066259e039602ff3831c82a7e4420b56927cee17f553714e17a208a2eceb847a4a2d95088388b1ac8d8ca43e0208980fa9cf6d75997000ef73016636db0327d141a17a36a04d72cb7a69736f031969bdb626c21745690f190a01d4bc099d67778f767ff70a1ee1b4bc2b96d771c51ee54a0b829983bf0a7f2f2bcaaed31ab1e186051cc64b8d8d1cd55b84e3c8cc262ac7e63558ced2716654f7ce8bd21b9583b7e5e720cf09d3484861a430927f0dd2d25f40f1a153d2833dfe46df811080e2a79155930f2462eba7e69b3a495e3481dbdf3be085b3bc3a2c97ca166a8a1292e78ffe99a66dba6b5642c06d67fa38cc56de9c91f6628d1fc36ccedce8f8b8f8da3a28b11f26283bf61eca3678d398f6d5e5d9a27df0c39874d5db7fa6ece2a8f2388a55c41e5af1e9d30f41f66ac3b5db8d798e86defe38c37b668b0ec73e07e2039a144f96b111a3f8060c6b30477dca2df2b2ab9dab7521b5f69b9b1809ba0c13ce591c3fd91fd70644f231b492a3344febbb46bd49d2322e121dd6600423f2f18db0b46a2170d576529ff47843eabc7bbb04f2ae67d4573c3f7e3b3f8bda19258e9792b628b941d0a5722debd9a8a539f73c39e173f01388d55953f72f40e118179a51945d5d8e9dc3f5489fa26180f316ad8706fcb9f96c8a2b9b375cfd0d41df255b954de22e4624a5df045ca9f24f9fe5548f60967b7fb4518b60a362e04b3bc52b3968cb93524e004baa56e65ba7f9704cdb5e2a1c3aea87af138116fc9cc3f64ae14c8e706aa6a129023fab3f74c9eaba8b33c94e16932a70b0748dc4aefe25252d47bf27c7d4e5019c556d106e7791381f801893ab54b66ad7fc3bdb0a410e648e08b23c124f683fe956b070dd89204fe8d17c8f6195b807fa96a5a22742ee63840e2c2fd27c876e69b1f9d35a85046ca7968993c1ecabe288c26fac9e5a51bc9fa6617570f2ef07ade5bdaa5de1aa08bc4da44344a01e65130dde6cd81dd4da4180169f8628fb86266080886025adbea775710082866c0a19e786755d03e4471a19a0208ab5397453b0c6dff9c77bf8e99c647dd3d6216c1dde0c3895931c7d79e1828ae6fe155cb6651513935d91420320e2fde135eae58f5fb4292a41ca07e1665241238a3ba9deebdfe5b54e8a2474b19103031c0510fefb32e983968950f11683e5d8d008d63db3abb8e820c31aceace34fe1ff1c78ed2efcdc2a17e6f329809bdb7f76098c435afcffa46ad88f61a15e26e665ad87ca697693963c4f58eb130eb47fd2ba169050383c6283370cee0d661a88d624c827492482507a4f1cc67c50e3627ca71fa53201f1bb006b1dc46f9fad51c70ea4743cab2ad15852993bfb06fabfda3d01e25edeb20678e13c75367f51d9bee7b741b26f1f916cf678cc3d956cf081f867d85522efed4335e380f069aa79343c7b0048e4c3292e9715f7a290acacfa65ac07a3732dc805e59d683bf309c8cd796a407ea0a800f3d0fb3ec86d5c3daa1158f0c843de3f175cd4ab67b01230c12b0f72b22740a17320b3022d9fde2b2767f914421983ab1e2823bb02053659d5cdd52791fd2f931302c7f230bcb51de8f606f29f78b0b480b40527a976f8ac61de45df7c76c74e69f3948f7028735e65280d1c4ec5d7b3c5acf371bc99db910bd8ebfaf0389a4bce8fb32a7a879b95329a75d1be958b41735f6919b9d251a01a4a321a9bc72b13d713ae63ae4e902ac7b9cbe39d7c2de60067e0803fa4ed6233aeb2aecd870c2f1a3bd0cb89d1e3b79b0289a239ce420a03430455aca6115fee82d838041c9ff5fe64e4b2abd618a4330139ae32206a35e27d2f0a8f4a6fe181433d36dddc5910fa3b34b972bfa17906225657f4f708f22472cb1f66065bafb28c3c3bb96aea08940b5b507cf310bebb025a4020d690b75fc082e4bf6e6702f8aa6fb7352ca5356271c3182914d8ed981ddfe71433a3fddae2c12af9e70493aa4a4229dfb63d3fdbeb066115998c7e43e131cd6d92c54e4c561032a404d6da6dc84e03f78bf48066f39fdbb0f58df934d90a538b6857212a96fa9c5c4c303fb9c10df63b126d9faa17e9d899bd6fe6e171c42a0c48dc0eec21eae87121b34bf4b0ec4108ee2ae5fbb48ef81e55a4afe047e9b15ea8e67007936b779129d277c50473a4ff73af0c0275f9baed62ceeca7d80579f10ce8fd0347e6fa1ad9005b91583e727d475c7a24c8b48155493105be8e81e461e965ee75cbf7b09c93ef5ff018973a00ddc5a8f92949ec048d9d937ae7f9a13fd2effcc5ac186b94fed20d57c2387c28ab7d20e614147b69b4470e8380d710d93de9807944c36b728e6adc3ee17cb96344e56a8215be8ff331dfdf6ed5a4b3dc9ee52217428330d3a71c551bf2ee623f1e80fe33aaa2ca4faabaae7342dd1a988a554a1611c26c36fd5900858308171aace254a15f6b8acd7389d457750aa5bb64dc70fc3f2b7dfae5c356f1fe543894849bf621807371fb10afe971d897f5b3c2cd2f401708d6bde4cdd0f7d15d572b19f05b5aca54f05726af6668ea1f8af038a9ed6855f516ee9eeaf6edb87de34cf1820ca3a97a86701a0ad393160bc61f2b15240b686aaf1b68ad4169f0407d888fe382928a6eb4c46f44a98708d7479f0e817b7fcaf41fb2d68738f3354f865c697745bdf9ac0bd29aef50bb2f2c7fde77615c5bfa0bd9436cfb55ffd3f58e3702dfde7c83bcec19215d81b60555ef7bea473f16722c8c4b909c210678dcf5b6e06fb554a50be606972184fe07fe06e5dba5ac35cfd07949e5cc12ad70507d4a86a952ecca337a2960de0309b38f66bac00f1c407f9240bcd11da33b770a55605a3f3f8b8fae290012e5645f9 +MD = b8e7ba92ae9fbf04422e0e1c1d3316324bab091204b75481dc0634c702b691c72febb769dd91eef1fab234b6ff4f2891d7617802c09730e0d2dabd5bf720ee30 + +Len = 39120 +Msg = 6723435b5e6164a6ac2835fc8e18e993f3ad1c667864667d96202f6e1acbc524d640abdf9769357c57a451f7b36ca82e9f35e6e7589755159aafb15714c338c2192400e098598df84e79a3903ad9593151e76f6a7456e1179f7cbce463f8310c9697e867497997a3fa6fd2d10ba82524738d60f6b4e9320c0d4df91bf0b3d98bb6610b7a92107804c34e87c20e2133906ced609400976f7c4beb1006a33b57c6e14913245b685ba412dd696a2c8bacfda4d0184b40aac1edc31ea8ad64dad4458019a56a8cc766094de521d14b30b7f183fd2f235c684fe9dcad69161cd67891f9976c560d76c1bdde2e56ff54567df6713e4e243c1a42f7fe62fd4bb1786a31b68c0defc6bd95482b80b1fd30462593d6591d57c807c1a0910309540d08d3ad1dbf333d9fe30a309ea3dad2c548d8511a1743c3e979f56afd59383716ceda8e98fa8449813247ff9d5e7886fda3beb6a540697085b605dfab2c2ffeb611a85b8e03a81a52f0753c927b3322bfa1fe4cdf9c366785071a87014499b1d41b649c67a348b8fc66bb70e4c0b5acf288c19b31f253afd2b45ce968681c56583237da8aa20c2c65dc4222fbf6a32f80a12e2a010c67505205f28d496260f7299f499b61c89b7d779931da3fe5a8b050346e81b8b01b53ef4205fb0af80e9b31aac16a53dd9eb318e7b12118546a394a89a828bfa717bf90b2bcbc15f3ce4b579ac8ccc8a8bcd7320cea7dee0c91d156e705a87cb9029c1d9e4057d01a470e83b9854b28f29ef0ac51037929d6c6815c98ad8759ad85f37d4eb854a53722ec9d4d216edc83eb066efe259a3178b15044e2c750bd4d47cb9a0a4d3cfb1006ed8e9fc3bd4a234c22605b776a6ebaf946f60e7b88105ff12c5b1a2795396f9c1a3cf794c1db9a694a6ab022704966466b5b63f3b9b9ac2a1ea8c56deac91a8c7a909dbc01f7afe98974444d34284242c8592b546a22fc9baa695548c012d97d1572d86206072c75e46660213f74189364d9acc924b217ebd78610dfa17c7618f4cbf1ae5671d7b465284cc61896aee147c430776ed1c4c3aee83f5b146fb7041e8130c97b9f784f13a2506347f4ccd57a00fd89d0e7cdcb357529e3a25366e99b7edddbfdf7d9edf6bdb42055f83c1604775b25d25cf8aa761618a0d190497174a8400b62e3c137175fbf26c909c54ded0f9474fd990e0979b452b92c8e2942b0e9a18234caf7d47d71ba9d2b8e2e223eb2ef9dd804d68f4435205738b6cd0457284768fa14446d30dcedad04f1403cfe47b3c8ec061ae5e183caa27f6eff60724d7be43d2870aa3986a07cda99c34435b6291fbf08a0b2588498c1881f85fd083f851e847043329f591b3538ee7fe1ebe799c7db70319faf22d2dddb32288521e8ad3f575385ae6a3ca5fea3583bbc29c14aebc8a79554f043bf1d010db09dc52f3b6f3e39fdc5a31688ffa53fc17df62e86b10c16947823d1a8aa811ae5effdfc76d5c28a742051d10a62c50bd7cb5b1693413124f6b34eb3d5abe3c08f23d037a79a6aafb2677c54744c8c24464e5f5fbac4bf3882af7bd18e49b06675e147c916e5bf0e7f412c870ee780f3d5af0af243623cbc0111b1131bac6f7660d069980bdf4810a3566a521f5b2bde4e9664b7764232173c84f961c3fba85718983e8dceb08d1de54f3d9df1d0154e77aa76969b8d28b1f8ae5aa3d05fe37165e2ce90a67f169e0ed4ae50ca6dc4ac1a944778f96aa7f20037dcc188ffa92c0f56228add746cf9e68cc453f35ac25efdfcdf43d90236421bc887a3340481f0dd9b4161b9b916983520878eb4c097cee98847e1837d5d09100964321b95f425985a33ff83739ce1c337ffea54c7c962a5e386383f02a4afa8a17a5487db8933083a014a82cd873e587a354d1d96e284fbb3a43255b9949cab39d1f2befdc882f5e4b22c00ed5d16bb9130a155566a9bb1a1aab60ccbb438e17872f50924397a27ff4e8c43fba9d1b523f8cc452ee70f90549fabae608cec11076443b07865846534de519420f0d60ed896b83547e34760758bfb819fa51e058dafc6fb20d306792b68653b83bc8f8e5a114b6cc8e5ade9ab778dceb1863883b35c6432450b6a298bf7af804e9463fc4e716f34da76a8f29f6a49dcbeb7a0542172079c0e96163efc9017aba601ba225fbf0bd3a51da045f86c17f5edc1c0407ef99682a4fb7480283d8503b58afdc6330206925062fda85f85df5f662bfe0e72faf92c2ec2eab6b405e1d1a3b792b172424ab904cd28e47cbe8963527dc488a77b18e2d574e2aa4bf1135d9810e2abc587be90e8e787c1f61efd49d9407974c287dbecc198c322930704efbb1e557cd4da4a5f2537830676ad245922fb849b6e232a9119b6f5e734519acf346854eb4642d66de245857da374e4db56364fc55159ed1b0656e0c1d7d7be452c7645c1c3c84a03489af3ec267a26169c7a41b913300cd0af01ec7724a05998cbd191c6f5738e697fbd361ca6c8d3531d4dc2415db16ff93d3e81d3c2b451113800a1c2814b8be7ae36b7d5cc64d1da003a3a23d7e2feddd796079b5a1b90f89c8bdc7d125827c5fd8eddde40580af36ec6112828cda2c6a690e69893ddfc951efba9be4ea34b4a954c0f01a9ac64e68f7bb018f87a41fad1b4869216037f2fe7d7724fdd33e0bf9ef8b704af66c9fa8ae07dbbf1efc4c2818a4f518a95000f1ea79ef66810cc6c3f1b3cb0fb902078887de1d9b9361466de9baa9c9899667eecf4957c9743f999a13c06cd353151a8b0db4539f857172e0f6efd3ce8199bc27944bea911d34d8eece37d23055243d22b810fa45758b7623d8bb1fa211c8623ec2283447fc8b2924798097911fae03e20f7a9e27d43db498f7b2f9cebab0feb6d134b17882b0fefdae4129904310f34b8c679bb141f6b2c2ec5deeaf0cd1e6026a17fe8d5034bebce4e004984ffb8fb1b75e9f7c1f54e5341f125aed58a9bcc3c5385800d5850cf4b5f3b52396dc3dc708c5f5d2ecc6e06f1886eae45ea6e75dab1c6a7d93205e3789d2b7ccd82191fdf9445b603acb28d661120b3e6f680a42644aa24e19a526e7e92388ee547a00c921402cae79e022fc714a28560b5b7a048939ac1cc971fba85c6cb522cc241eaae94fe6183a846363c195eec5c30fcb36927fc444332540db4c04a8e47fde5035e9ca1437fd566e8efa9bbb0826d3823b1863976ed72dab033081f0be100729dc8b55337822a4b8e054b219879765139473aba1f735f97eb2b26b091a0d1d20114667c0734b1db6fa988f86eea53313d54cbe6077c017405c4a267e82c7aeb776b3884793f71ffd501e7a9f87c0abe77ffbf24f5b16159482505abd72e03a746f5b2d3564872a00635f09affd8a5e22e71a0deb3b9862ffa77d7e3274e72ecb8d95cd165fabda44b6e2b344aa52b83acd1f57b073e78dc64e19e79a033d1a41340bee770fa59f5ecd421dfa38ca58b37484763bae5404ace8ce4d40a8627b6a051617b3df34e79318e5904d0351ae118fe1dfd9458e55f7f9f305c2dee7d0aa735ccf7968ba51a62c55b099a47926d971affb35c3f6f05c1430b79d114da88701387c1416a65bec6a0b058c96b1617fbc575ecdc41e723daa0fc93bd9f461842141b430639964fa648df572548acc78e260811da0754a113dd8b12ba38caa267600fe3afa040b44ae4707075875f6596663f881f39be66b423405e90876c0e251eeb0b02466cd5fa9dec0a83cf34d95caca3ba737e2d5c0599a4df07333644c5763822c9d4229afe9bda8c15c9350b2821bb0f9d7eaa6a4e683efee6e5302c8e917c90caf168eb9d05c260f41c69e442ec0ff067e23c78d6b79621f74461afca9742bcce4648b021032cede871d84af13727c39752ec6fe6af35b200f9d1b3bfb00f109c7bc9d1d0bfa19bb9708b267e278cf1f675c135c678a217caab8821b7026df3fe37f336f35ea8d22ec0896131e6c5e34cf4c3b3be3965ba1d038fe2f8b8e3cdba22cfc8d10bcafa100adae1529c5a006176fad1161a0701c1a9eddccaf8fa0799e5646db4ec8e7b27f587902970d3affca46f7815440f567d44aaf977ea38076328bb0ee2297cbe3b2a9755fe8bb95ae726298e04df05201a7ccf2046b82836e092da94a4eb1c291450121718159468e8a330fc2b1272c661fb62397e874ffcd7cccbe5425af725791001c0c035ea41c8c48dabd206ddb217666e2b688237c2127e96eb049d941b34126b373e13454d4e30478241e3ce4b0768f8e04cce67ee574f418c32dd7b710bfd5864dad82cf3448f6668bfd0cdf9f8a70a3f729667ea6fe7d6b213413591c77ad02fdcac289e708bf34796f56324b1cbab302100c01c22ef5c44f0f249e13030dc808bb6c0b39ccaf4060c7b1734fb7de49ba234f9ee370fdc2a11173fcb0dc8833f301f7c9b8ef4748d6a8a72919e65bc683e5b9ac778ee5d4cbed9a0b528e9ce54130ee4be0fb278c4f849fba4622a3b803a9d2b0eab35e7923f60f309473cc3a77cac8184e6ac0a93fde13ad30f7469c9e121352d998b82e4dbd3c02e33686d21b321da56dd8931e2c37ab7876ced4f2c7a10408b0a99372adc5a908cb416d1a8ff94779abaf1f699903afb29423bf4914c91d290c6070d4c881fe98b91eef925aa2de1ba468e5fa0ad4c8d1f590660e1a0cd75a4947c0d32284756939497ec81fa169f1c490577df62d6f5d379f79c02beecb02f3da03ec403fd5c0c83bab2a23874392a8b01433ef601bcab6ab5afdeee150b998a1ca8eb6367855e27fe5472ab72384ad328cda6b3f46911f3e9a15c78700f4a4098538d8ead58f1480cd9d89d3523e6ea221cfddfd8846cde3b7b63a32643ab2abb4893cdf85d2eae8b49bb54e882659998382dc3d49524f15244ddb95f30220f2e8ee668701d7b2024ac0519b1de2fa6322a1ca71125a1f5d704b100425c18b6992d6ca73c1f41677f0b9d34b8bdacd997f9b4d2b6bb4ab171c3c7c1f851f6e8a22e0fd285ebe94b436d6bed26aa44fc70addb8eece089efc98a0743a897226df498b630720ad99419db578c232a5fd5644f7b21db1bc575876059d07bb4060d3573490a2c037b0aa85c4958d6c7652e1ce57bd4aaf4670c524ea5ae993208900ec7afa8da5e367599f8299a6808becd3f7ac3ef82f3d57cd25bd326299992bd269dd252a5a4719c93b7df9b0175d27a76133bba8aa1788db08fcb80546f0b5d26fc9950b55c96483fa253a0c79709ff69bacb7deb85b80794f27504413edb38b5edece9310e0c4144c06ef4e5f5cc23bf765b7fcc28feb1258db9fa198d69167c77b36741433b4f4c1a16de811881ad2150d3095610b0540c6780a903e51fbf22a2d6100f818b3afcb634a5c4869266364e1b63b0c738b8f188b05a28cd64fa50763e2dc05364c9fe9eb192d5c96516a77b1bd504d5fca57af93355afcda091aefcd1057f3e2ec6fada73eddc6964851bdcbca777c066e352c1efe2c16d3c4ae33b78e272cc51f7977064fe03ecf57a3b7be4203312dc391fe8ce4986369eee983b1c0ac18435247e6a6b0c70dc82beaf5f7c896052c8718a77b7d125af2f457405a3c695ee421757cf6f614bc0721a1e906d2a250991513a7591c3c761571620a0f75e1693e197c9a85a43bd212d5330179d4babbe9fa2d8ea466793d27f2b4314fe1a6bfa786b7cfc13fbee861b348efbf6341af95a2b0bdfbd05b28c0d4a866aa242bdac715c19d382d00577a484e0445f2d99432ab67c5adee54b176b3c91a9c91d332f323248368f0c2a7c300acdfabf7d50227709d266914f87f9ffc80bd95df4f60d25b5b02b22f5871e278ffe26006d6820a9eeb608be8a8ebc33b89d03450f2dcdb0acfabd23d541e4f1db1bd0094509c5282ad04a4ddf87e76ed3ee2e69b601f83de1cdf17af28357f6b6cbfec24d5a985c88c73326969a0317e0a762b1319a15331ad2d10f9573fd9ee8b6ba13cc8421aecf44cb32f7f19798a86fa705c71facfa20b164ca0539615238850be40caee884c6ee1b5749b12b58f3ef064dc2b846fabb11b2948cfe087870e0fa1d53017647376e2a7ed60548bf88ce8671688f6a9ab29ac45370ea7c7a566e8da6eaa55260e86b0190e413753531b5305902c9a045cff5a1f1fa2444beb3d8ce6719c10435a18ea673bc033a22b44c0aeed7917060d8ca515472d5e8ae4ec5c549277e15302c7f2311a6fe1feeda3a1f16310d635496c0dd662024f0b0f1de79325e030cb850e58050e92cad016b2874ba56650089d1804c0d4b3ae52e62cbf20b04797134d468c31acfb46bc42fbd13c38fc2cf6751b2a6333d3e4f8f6a3338bd6207cd0e81b1f6569ebee19deea20317244c5957ddfdf4bf3c59b43bd1bf542fc0d6a6ad1f6820ec9f7498f56f7e4ca05d2a25bf3f093d9991b39e9a5f164d48660d877976354ac31afc17357bfaf7448285bc083d7f89a984739414dce02bf29bd5f5da4dbe7bc5577ee6c3dabe0aedda84a49ba007e0d75cc21f110fc7f614a8567a386daebbd99d238e0954719082ae5067de2f484b0b63c7c6f9c171b795d5b79dfb9fab12e73612966db0bb8eeb46108c3bb4ebd12ddfab1134ba86765f6a21e78ba95d89d868748659b8460e10eaed9c19f5977b251995882ac2af3959afbbde51536e27927c71e73432b717d9e20f1ee0bcf550db59aeb443a1940a6becae0cb36783f5feba304066e7b9b22e759d9af7cfad5837e71d1ce81edcf07d6821f91aab47f90469da19579ff2e6f7edbf99c8f6669b220a0b487f032ff4776c3d2befe95f3d8dd296fa6f220abb1c909fa2bafbc822820ba0c17216371c4140292c98e776c97f3e8d6c1637aa3985a7623d35a57df44132030e27209972c42c0e847f6e32a3c4f3e7f6b4a87a691a7933f2a1bb +MD = 1cf9a4abef7250b53b978099b008f90ad25742882ea04ea4a3e44a65815f7e6a4c5cd55b28a746c2f027c3459f0dcb58fc472eac23af1e6f675be632d2498e2b + +Len = 39704 +Msg = 5f2611c1cc063547a6762bd3f4efd5d04d3e20889935e4821ca10b0eb07cf61e51631c57df4af468206e169b058b9da92e4fcfd3af0f002e15bab33fa40b03c7e30241e05b94df499ba28cff7f28a10db2b7bca47225aa6e93838b20c74f304f1cebc884c64ebc921ffad727ec2daaa2e25c2f2469ddacea9fe4dadaa0b0475b0506f96aaadf54ebb55e3e3cd3048010c5276f7b1ca0cd4940c5ea94b7970e96a43c1bbb8eaf6ffa63b60866bd14eb006300c6d013d7d4347f0e0177956a4fa50373789efb26d56a33ea7ecc31c5b31ac5d07a4bd7e88a5262a768abc192d0332a94563c78ac4de12de2e897b77f9f05f27dd416ef3db74cf4786757c3785ae61f88febd8da9a00758868eeed7aa786af2f11c56e33c23c93a6945a32483b466ec35b848c2859686bcbfb7fa1aae06f0ce129a363c4f95723e634cb86b1aa85c9985cc05a0a8f7036173ace307f411408dca96dc81ddd6ef074cc2be20a7fc702c5f811dae7a8b29508bb6d027e26101370057703a4eafe79d0ef0dccc917949afaa20b874641a9d90f01be900e1bddcd59c261bef09e502098f1e3bf640e7902950f1fd7bcc6b0a298823581c5aef796e854b04297843e952b99403261c0eeca3383c154a1b4716243d184203b3bd7f0aa50e556f0290448072995be48db506244a49286aba766988f640d23b56f097b1e3b6334a0f93ba9ca4766bb9fba685b46e5f5d610fc0ac5d9be52d4ea950686c278dc8410715f4ac36745c2ccea7125b8cc8dcb984ed87ab134d7ec416a49b4259d93cdc53de9abb10d956c66e8155228ccacef980c4a17b48c0eb2303b6d73c62e3b7a359b653ce1aed800d43fcf51056ae5baa6b0ea3d421889cf5da4cc56128f3601f8265c7ef3cfa038bb6df9b2ed3bcaa53ac9334bf86ecbac1022f0cb994515fd736b29f255e4607c82df4ee83e93be47cad1bfd435f336d10e327554c8e44dd53de678379681ab34b11019717817530aed56ea66894a6dc69e5fb4823ff15021ce04a1af142be2f9ccbcf3df284b0b76f8c53d6360e8d305470758c45cd0df5b9a6240d98d47aa443c126891dd835a04a3a9435b6b3309059ec5bcabae272dfb296bc037307963ac85dcd239f674c14c447f76cef6cd62501c176a98b248ce7901adca58cc15918b4068eb280173c3b671c4523e922c817d3578ed2bf7da536da994a9beaeb0d678f232fdec8d24f3cba1f4501adbb4f8d58176bec5ed403f3187bcf8c956ef84edf1e7951807fcb4045b9c1af4221b1af1667d4a07110ef47d3273321963062f62e5e34b0b006f96e91527fd5b03a36a697b09296fe1bb15a91073e01f41b9586034b28a65e4f21ef2553491a00f0289a635b6e7510dc9153dd82b8d4b716d827e74d1cd994418bea8922e5263929cdb200ce2de6ac3bd75a3c006844e808720161ccdaf159c67e8846291ba263cf6f17f8739a90dc20ca9938e917f78ddbac3bf9302897b6c544f1e3cfb53687c954f1d3b17c1ca773b33558a68d95b176cefe37e1cf73b127234ce87b7989acffc46717ef9a31161cda59249d92c759c12071a448972c55d264c1de973144da5909a14e97bd782f04872b2537ee358fa4e9bdc7cb476aa7af4e7a4c8aa30e19bf6ac8ff10ad98fc1102d3e2dc68865a07730928d3a9d7b1a62b9cbabc989072192e04b3c2323a852c927ae4f5ca62c3d2047e50c983197aa04152b095d772ec4f9e7cf1151406d13e8148b1e8da73d0ede544c6139ed80a83dac2b77d2a5b9049025941711aa3e82d1564d31f615e8b405e82121bc2bd6a393c1456dc57f365f0a2c22b3e0ebad2e397f7d20026cefcb4b660bd47b66fa1a8af71161a27e3732ac5e038e4b6f297464e2834f5f3692a2f37074e014497b7ba7d017e9f62d3c2e0b4dbefcbdaf44040842083658ed71d9a279f4db032ddb555eceb16d3d06a5bfbb8dad95b4468d5b87f0646b8c0c1dddecf4f43bb49e8a2634658661f3851456117057cfdbbf45c958903065551cf73e17740b78c516186cbd16ff7e9643088fc198562170643dfc1e83f4aa609a8e68d679a318a12ef6975d659509a1aae2db208821313eefb6523e4e19a12b0f53ec9e684391d543b54499c3df99b23733a6d2a2316573bc5f7a3c7127e010d5d837c3d2658addeed4e2f6d447b534728ba14c991f24db5489c29d7f97fdbe989be90b5a915a279ac600f8f955d294d75b28f2bf4325b232d5c9d5ebf24090c20f7ec9435f965ed2091d14b5a2787ff012cc698735beb4f1b3fe7a28bf6f13ecb347822f18b5c02f2e95de9b862d423752fa15a36f764ffbb4ef0ec867cfc47327f1ca90653f07fca709bb1d995778278c408b8668d2efcb5909e83d73e92eefcdfc06f9cd9892e4f2f74ebe548dae4b3f2e3f92ba6b10eb00edab1a8c41cfcd25d4cbdd9a690d52a2dcede03036411cdc11a66acc954fc54ce8dbc1e97003a5bffa8dbe8416b3d037293d35c4f7dd06f399547127e82904ada9ded633ea86d40cfbd11ef32842e8007a91218b38dea41633ce4844ea0903a3af48c9f417a6028d571a7170242704cf3fae35eb8fc28ea46f8842bbf17c5cbf478e1f929e0dabc18ade487380cca0d3e6c8e56e4335013eaaf702f5b4ff7a61213339a7c41a2a4a05a12685c4c056cf1e95a2ac2982a63584af1b7aab0ee739bacccaac5058187755e77e1f669e910135891ffd794808397b24deb33a371d9982af25089933f0da0a35b1b8fcb3ea2aca07900ad90181aafcdccf47e8e4a801077eeb45255a4df280f083daedaccc9c5ab5a52cbf2bbd1a985b8fa13da3f110b7a08ffa7b277a5158cc570dcfe5b2e64607e20b92331508cc157247bf01934921b8759111282066f01d9dca09fb27894a72c90008c423e6069f39b3d369f90ab42b5e917dd8bab3f558da882259a505a68abca2794b6442e64d287e1169bce61d7d8d8417c5b3c8d7229fd0af8db5ec08b44f7b6a25409fd9c3c0feff7d395b9c2394d1755ba605f3ff502c1803d49cdf93f3f3520e536d5f87b5bf041118ebdeb207122d170bfbfa438e02e2588ba8998e4c92d753172be60d6946c5b1b61743bd46ce9584402b4893cbeda508358fd517abe26090066c1bc94e2e9afb9b5e6989f65f453ffd146d647c54b67f7cc300d4b45a6441ab9e5f4fe6cf1a4b5321cebc784cc2869d37e73a21c0bd4acbd2ab29d87378e471433f15c5b0ba2d6811d1d95f3f8414ab1634995eda2fd6ad4f429b9ac604f4e1fb199f6d6c011e34af11451d700046a13fe3e675d964cf9b9955be7dbaaeff88169d51306965aa534a1ba435b6ddb919f553b629671272013152f6f3c9bd60de3638efc1317e3e4e834f6b3a4c62d86007329ccc0baf8a88a7d8c98f8bd6c55eca6aafa24cb15670eb2afe8dd936212dc5deeee02fa265ac7d45cab37981a97453a1353613958f84d24cf2b2c5de2fddc1d741085b819fc722286f020b2469d9527af4ff3e9155d4d913dc4b9aa140fa7b9a17a717c39563370f2afdc955a2d857568380263b25fb701e1fbad05620fe63c5f73edcfee32b0c5883092c9bc10bd2d2454b53099c6337ca31730f333c740ab95442137a056942930ba6bd4d60ee457cded35d7305a680b6b6269fef0fd5e102b36363eb78b85a4d2978f400eeea2f94a49aae0e1e3ffb5212281adff7ae772088f546c9b992b3f560d2595ce7aa11d83b03bd413289f83ada0a088c90684da1697a248b4483001a46556597d7886ca606c10392df2f17bf724ec18b668dd4f3c98495a6b6039f3a4e7491682b1fc09c9c4529a99099da8e8f690e42f6a99d962d8712a26a8f11b3fda275347eda9e1a6ff297cbe354a0f665db2759ad2608070a040414ee9fd835b88179933f3355adf66bc69043ea0ba5aa37b516069dc4d4f38e1264ceb0833e137426fae8d497c5c4134e8d3eb49b0ad0e1202eaf7b347e5e87a618676b831ba30cf5d20818d5006d8b8829305eaf945e79f109f448d771bf8347b6652b587ccbbe7ebf198a8ddc37271bdac542e9e0c754c01e61713e3daaf36fb5346a83d011fb2a28a9a432b7c58872487a0baa6e9023f5f293aec950857a969b51c395940a65709514f05431ad3213c8ab13919c3d4a0b1cf73c1958e36b44ef39a0fe57096ffa9af7f972c8329678f1e4f51ff84349880408b3ae9559480307789d3e87b38d1080df1a0eea1a282a4ac41aa61136a4f53e34afe9b44bb349aa8b02c6b48d4f6b0d16ec9925a889a039a50ed4658beecb22277b6b342f2f911eed9c375bfb2952965beba1f9821d6355144c2b73b78972564dc09373980f71fb1ca3f0ec819d7f92fa91a9d42b75fc13ae5d0bba4df7a35123fa03110ae554b594c4a3e4b53e4aa99f7911540905d2fbcfac05a7b3cba69926922a8afc43c1d4e27890e30a6e3c4096fc98e7af4f7083e4d399ca8d7824a4d2238a5fe0ad31ef923a6855f5bfccde9da6710d72d55d22aa4e48a13f8f85fab318a2fe4c743d5c00849acc1b9594fa00016a34282a018e7c8692ba5e744301560bf4e4c45b3cb0c9d19893c0a1fd196a97c50a03a005fdd816f8844eb8f45f175800a1bca4c8646abbf27b99479dc339d411eda9e9c3174969ea7d94e0127a839746c3a9f3590d4fae28b21a18df7dfa30e16d8f69d1514d1a0924d56c15da374447b910c977120522bbf5a7783aa02858b3e828a2a9425f81a51864cf86f49ee974008589aaf907b42ca4e5e847d04095fa0c0a16c350fd4b7ea6e78cde6016e16c188cd65d48e3cceb4e3a0b8f94df832447b848b803a2d1c67ec21694835be6908f7b12168815f7885038446a54519ae30997caefd0fcbf4cfe790f3204ca4371d3f4df5f1d1aae746955156095536796e04cffd35f475e52b490e94f3aee9280646e90af9e5e6c3ff815012aee3153b06a2c5a1af52f59782f9e1744bc255e5cdf6cd880727dbb6b6afc9a01b597f9dfe5da8c2f39211b4dcdf51baaff2af167a354096a4fe506675070328d81d3c46601cbe878a1a92e142e3a88fa8a6c16313ed8b5c56d20e7b437048d36e9914e034c75119fb543fc8baed2c1abd445172a205f703a80cde9e29d5dec86433cf108045a7a0cea6e2114fe52784763528ee2e65cab31f1286772d1b0e30425534804e8008438c7a416406b3dff45be10e7dc0f54c93454dcead5a2b203391660dd8a55fbe2abc372667e93f9d93f5b0cac75f9dc7cca12580e9b5ed5cf8d8ce20bf8eca107ee64557c5ff71a888cb0b267513458185bb0362d248490aa89ff436de0fa94567920c9c2450324afc6558e82fe4d5c3e71c4d3e111a28716a6f4216dd33e4a60c49f4bf2de568c9174c00d99cdb35d51a4b6dda4d3370da67ce1f8a63ff647b9692658687c5fd6e00076cc165ff4dff45d0c9fe2f9c0b8dc747f358187d0f0c2cf6c7bbdaf8d781e01e0368325905899134cb745e5cdfd2b15f2749a6b4cea0f7fc8224d087e04ade1a2c95aaef46ba25fed903837bd6f14da02125b2ac8a801f2cfe8a0f79fe102382511275cbf6dc2ab65d724602d731c4914ab4e76e29f5cb0ea3b43fd61b1dd7ded9a53cf5ff35c7e5be8a4ef8c9dc3eba0abdea019545232bda6c09a71eb720b72c17a773470e2512641344659638e2a4ca0a666db4b8500a097815f3ef272993b22f5d4fb8ae6bc5b7d5cf51258ed9d6f06101bb70987a339aa10ac276b518fdd3b70791395fc2861f9798c55e254bd8e68b63f2af2bc82ff3af901c9ba8167af7754c3fb16752de042347c829475f331250351a5bbb63857e6a510a464a4a948633d5630a0f4254ce3f83636e3a3d6ede771f3c5b8e73bda19af2935fe1ddd2e8b749042b9fbb71e5b4f49d15470e11b1cac85e97ec1f60c6061ec0ceb6f6bc85c9512bfc5fe4bbb149437e06b6faa5f20fd98bf71f8ff554777b987b11bedbc53395df6596e6bc9bc8180e2acf28b10b0ff9c8636eec04b3b5b1234e395db611bcbc284e8ee8fc09f71a5667dac1bd6392d11fc3205e154a8869693078fad6cf2b6f0e9f8d130264a0f25da61eec5162600997ff7e0cb183b84b730714bdc16949559a40dc8e561589482bd0e4d2f670404838ffd01f5fc50cfe48bd56cf0145de17d319c38280827bc3c9cb749a33f5fb360bac5ebea8794d2bf03886581ecdb25cc213891708153d0b3e81166d9159597c17ec6f12130543797462ec7f9e678ccd6d147874773599c992d81273970422c265a84c4328d2b691db21d06d0b7d3511de05d6c2554955a5cebaafd3cd5f1eaffbc93e786f486e1a2d5f794aec7676d11dcfec2828bb3a46f90e36b6bbd015ece3358bd971cf32bd7203303dcaba15b5305802cf7af210551bbcef43eac0ce2125d67b8fb5d0cc22b3f53d6e2cb1da64218a60dfd2569f793dab22a3e19812f5c79258c2c3b102f0f81de8069ac38f87f84c4d7fb94fae5b65c517fd28bea910d353689924dc9dcf4763792d9c58fac5bb8513d7b64507a29ef1167a489c5b1b5000f53d5fb76569aaaf370abbd8e5c7741ff81051a070f7ed176642c898f0be478145d6fcac216328e96bc67eab16352a01455212c8b2025c20507c301c2fa0bfbea08b84229b68c9f95d886e3955b6e61341c48226956af2f21c51098fe16ac09e50847e81991e96c7557911ea6cf2af3d368f2820e0d8b77612e8d959cec3530c9cea7230e42d963b9bc1f22721928d676ada8c1f5df3b494796a2be2be547eedcbe5e899443ed23e768796563e3e887926ce378cd264f0359bfe849179c54b2a269c692380f950b630f387e1899da95bb293b0cd08d2733fbecd6ed0c6bdc2abf5387c3662051a8d0f2f4c2ecb58f7f656507f4cc7e6469c2bfe70076fe4ea5880e0aa3ab00b38a95c606da7cb167a305a2e2d6fd64870322aba139c3ae3cb190ebd7a9733b2b0f45eb172b253803bf2055441a0ff9ff9eb0229ddf8f0626dd7e8f774b6b3a38c545f48e4b9293e4125a1ea43460893eaadfd +MD = e8099071a601c3ddb10a38d9aaa5acd1e73dd7849a4dbbb1fd795ac456557260412b5aeb58a6d196592b0477a26b5139fc937a3b6f8f0d521f15bde18fae6401 + +Len = 40288 +Msg = 28ecd1c37d4ecea2990f8e975c1e991a30d0375e471dd729250cb1e25f6cabeca2c57932f68e090344a01e2116eb3b149f68c2c4fb4e5d47b8899df89468e1c988967ada064b0c4a80c3374d29f0777eff6c497709b1909fdd8c364466cf16eae4471ae234eda01e526023431c93170059c3149ff9ad37d99efdc6ef5c0912f6bdbfa27209dc8d27c460282c773ee141b4576b6254a91c9d03c49320ff7e9d961ce85ab40c819b0edda98f30c3589fea180f96eba10f059113cae600d5977f7208a989cec542927ba524a076874917a28dd3dc606846bb60d6f506b768ba7f3189ea78e8bc88391525b9a2274b7812121c8b87ea32b606b0542e3d6c4050677ba793702b7abc59856451df6a984f57e2cc1fddb085c7ad2a965ed147e3c2fdfa6b8db7be8644ba726ad29d68f435b0b9a67827dbece17a75a36b0b71db760a53dcbe95ca688a248540262548ea92e33fb07cac92ec6c3339833f3312b0d65531030f5477a9f45f66ed33bf33ffcfb91df414b6fe0fd0a1203fc09151e849a83ae6683becd0ec32bc79e3b251bd52fafb7a298b46dc758cd0ded86c570d36c9168fb2915265d96730ed1c48c9ab846e8048a17494dbc4bcf1686e0e4ca607816e06d39fd0f023c46950c8c7c451cddc556866b90d9523f82ce669bd573c2398ea51b5ad8ffa311210aace786938960e22e25ea2db91fb09295fb3c2a056f2d6317a3e02b70a6d18cc0416a3e1e745ca8ebc73772657b5b88fdb3365507cdc03ec8958e86fa93ea04665889053e644d941008c7f1570b7cb0662d1ed8f3749e6c284eaa5df5e0c7025d50c86e8bef903e4b69003d1636b0a38fd75a4840da1485c75dc8230b14052125c8acfc8f6ce0f1fe4694b82b8383fcab307d058884cf1616316c78a2a400bb503eab11a1629c79994fe9f4ef88530678d6fba3230b2a97a577fbc14527566b5d1147507a774f1fbcd374760aabca6b59195aa3b8c3c384f5801a9f7b0472abbcff062b6301656ec98fc8ade5644695cc962e79b245065876e83d55acd1f1e6e0367c24f3977be15fc35b2f1858541053dbcbb798058f9cba1ee89662f630c77775fdbfc4afff11d01ca05c0bde7f658f48d6cfd29babdc2fa280d43607dba7d33c1f7e3ec16b6aeafa3cc7489d24ffcf6bb4351a6e07615801aa918e8d3f0293d765c2ca624d66d0fa94e346eae169a4b2f889a7f30ef6b3caca50d4dcf78239f65520001911a0428c2d529f6e311d9fcd283033d14ef6d34c7484c19d719126175238784c5471b02d7a77aa8d909620f8b7cb167f33dc37251dbfad3559a9e899015e8b7292859a6d10d500cf8c5dc8f41bacf8534a214fe34a64204b0c470219d724c222384671b964fd3aba90ff081de86831f41e608de56f14a33505f30308380da4e1c22ec6910b52a0c52ad46ef4928f5be81d1481ca1043ae89d3386bf2c88bbc27dcb919925877eb85d6885e06ae84fe95c2a7cc0fb263bacff0718d57fd11606ac47feb2bf0cf6353008555d290db6293abb4cd04ea17505dea4917a64a514a3135edabcc58dbb0d3555606d6ee15405834a5e5681bb0f7ea2d397b6c34add2018d8cec01f52f4c7d2174b1821aa51059fa05d597cbd319cb35ad29284099805257c81c4b5a3caec7115c1662ab1d5b1f785efe227ef05e97901ec15902a6ddba1139cd36fc8650379186860713e0792f1c1bcf86a98b0ec5d928a48cdf58528f465c6f23508ec9452e8e80ddf990f2ff61b6da32d015d2dc5d3573124b20877853aa82befad8828634dea765a0916106f5caaeb587332351a8ef8da7da81e4dbe5ae98585fd6046160f16a1cbd744bec24c1ad9d334578bc589184bc120ed34068d3209df419d76d2f513981b4cc0c059b36674868cf5b72c8d5d8bd662a0b3c59a2bbde5c0664000c88a6330aeb39e9a5936c559c53442b9616fa1a6b65d53644a7bab80c4e42d06502208f44544e1ef0630d235263bb3d3cff79818644c9a4965cbdb96933ec44d5584914e5b9c10bf81ffa500f63392e19d9d7513b39712ddb3c25310769d8d3d9f57052536e2b371934946a47e43684d94084281ed634388fb091dd7b529113ef5446d631f3f536f04b7bb070694bb7e7ce1074958dbb4b3074741d29809d7b921f3d0ef5edb77209cf00e13d54e16dc1dcfca533c24edc49d25c5e867666814e90b36b13bdda7ec229d47ae3598fecf3e7b9587e3697625864bb30369674ab91635a891fe6d6b3b60656cc26c9afdbfa98c6fcd94d0d83c8a60120ae735070e70182c77eeb54c751cf18736c37d9a1424ab610d96819a73700debe429f7277dbe5dcd4b54dad1021fe89ff282695e367880712f32a5443102f9457b77d6306dcaab90f57807834b31f3bddef185cf8e6db2a91bb0645edd06cc28b619faac465aab7f5da262e8b619bae8e258fa7782caea11b958e571e145309d7d568a226f3704a16c1a138aaca1e428e6feefde7b59cfb0f2715104a487cbaab878af1b52295ffe082743f1968f1a85d22c8d8ae2e00a8eac45cfa08e93455a4fc5901e56f7649f1a131aa3daac03088e2afc051d2842b3d01a88cc073347b22b8656b3e36bba8b8b24bf2ae2c048b8024063d796f920284739a410772d79bc32022862614b0aca41a35b0e1493909e17b6ea86b31a4cf4f7ea4af4464a827f4d832fb43860fb6526d815d5daec84c0b3d3bb9cde556d1fca75a201dc520b03654f9230d1723663210a16099b95cb28bfe0fba17e702bb2a721d5bea20dbb5160af7a5f924962cc19828531be540ede2425d51bfa3430b475370bb4fe433b7028eb0fc7e4ac28a9f8898bd6adf2f5e8c8ea6f94bc69212d1eff6b6959bb3268a34b78f230643001a565507fcf3727509577f1932bd7a92589c11e671c3e4942bb17de68dc3a21dc085efbb48cea4d1e721384a1af456ea59ec54c36ad942805579668af52f3a44209beb5fe4cd50e5846085045b07d18b445521b5c768576b95e113f51f85a603c90cba5e377be1308fb9c7c079645505b66b2b663ddd9db66bad08ad63836fed185cff4ed756e04357818306fca66bea1e92b43d34c570115521b72c4794e250ad010c9a4afad88e8a5c49606b2a8098eb606eb322ac88dce0e3a1fa5226b7eed59d74d8f8b4247286ae7d353b7d2d92ab68bd50adff42a97d674b8009d55b085096ba73672f7eafdafca12de41aed87ecf012ae2d3a37e7a9213665e51d464d7c6160021cd92196f5cb67930b902ac91eab211436e9d317e2a5d5046a6b042ed791e80d902dc7b8759f130d08597fd6bf0e4b3b418a9ecab869b9f4004b0f1ce0bcc4ee57b9db94c8ec360460f357415c7e037bd3991570a8f147ad4d39e1a82626893cd9e9d7ac7e476311bbea3b89659eec6e6391b19a22b120a8b7b406412683a761ad5a367fe4151cad6f9ab72f68c5588b88010da7c43db76ec645e788503892053877928fb8f9b54ff2a134a3e4a5fa4ba7637449ec0b8e780f7c2fde31d9fb9001be564c6b49df61fb8a4e7757a524375835afd1288f185cd9a339c349dc268a9fbb0c3659a9fd9bd0b26f2a304778c6f103fade085ce775db678fd816b3b55d78ea2efe227e824618b6112d0cf16a83283affd0e9d97e6b8b45ac7d16f52a9113c828d4445c20093a01df005c577be46467294a6ba93f964faa1a32d914e8ce06d1a4894db7395dcb221344acde1f731bf501cafc30bd9ebf215389cb97925cb8930c5d9d0440ac3293685a5cf9e7b7d58113a32a047add5037d2f26cf199d5af88daf1b0e7d88d16d248b20b4f471b1787c9836398f9ea894a32fd3bb771b1523f9ac637c66368ce6b3efc2622c0156865bdec3762bd4ee0f4de1ac65dbc885703b64b802473d7efcaa5993c28d55f3ec74b4e13f62762edb44ecb8b58ccc31481d81228867c42f18d3709cbc619210118fc0997c7eadf16050fa0094d44ea11465a8a9f60ff426a0f4dde439eee3365d76adf215c5a0be0638b08ae8f9765e3adc83563487f5ebfed648731f7e6eeb38f021f5f280781d35c6b8609b446def244aba302b17ee069841575258575bba0ac4c4a9fbf65c9655c0ba8a93fd5bdc3877f53fc1070700d8fdb588cac1d3283bbb4016197175b2ceef5d0eba6c68aee02adb8cdf9e6a5f25d1081d5f06febf339d3a443237eaf8081b4af6f6d9baec832d141e6e253caee686f91afd6d03065b325d3c2f91e4f16c0c294a318b7c1e884649fe54e4a87285e42f868e3d0a8519414e05f9c78b236089a11052cbd4cd593e22327b23d33569b35369f9bf3dc5d694b8a7762106184d5c5a5241e1ea805ddc46c4c92ae87efabb0ccc263bc24dfbf1412b90e77e589c4bfd17e615e7bffcea5ebb28400dd6a0c403b6fdf8c1a5ee2191982e601a69b31f326829aef3129e2e11207faf6ac4c395df2f6640635619ec51f638d503d5fc9fa04cf2f63502ab7208fab5bd29d0cbf7493f4959cfe7e319294d958e6024dd95f0cb2933d6168b7cea51b4b36f8220b2e9ef8e8c2ee0b372c0a62fd35adcc0c7c9edb6aefdd7a714602e63d967632a8e66461d21a8caf3bdbf08edec19870cffd4bb81afd3cb65041298aa7636fa5253694cde60642c0ac3cd7cb720c4ac2903b93c727e807c2e13a79771d307cffec8990aba918b8e604c930975b984d47f9b1f7872622b726b08c833a039006b97b69f8797fb44785d20b9b70ffd80867691ae7867a5fd3382ac1c7520ee495586e522cc5fe7b8736906e68e6e35e14a76ac0f433b8d1d49ddc74c64d73a0b15321dcbdff89d0f06ecc7c29778a8cea8e7b3eae1d463b33ce221ff08ae676e34022642ca4c6570ba4e2bf6d916a07029316fe65b1c6ee992fb81de6a8dbc993960c72e9541870316f7fa2a5c3163ee54bca8acb8f9f8e5d58fb090915d80b5acb3ca3746c14af2a24ffc0529af3a71b2f025e4005547cf8c0577be8504fce91662f506e7b3f862e6bff930477a6d21c936b0353c17a4d040c79c104f6c785efed711437ffed77d6badb853be78442524f40f4773275710783ce72df67b3b3bec79e596178c306bb8820215979307a648930bc3ad6da8b6bccc22be821b8fa968b03ba5b6444a5455a79f1ed9b1fdcbbf7c6c51f2d0dfea94df136afc33bad0fbe4d91b640e6f5fcb8257178cbc6fbd1016fa984b3b43d689dd84da6bab05d72c7d889e29d2e5b4a17df2a8b99ba5a3c3c87d41bf931d9f222f3bb6d76bb8e784e310d60e78f57c5fff37786736e7a660fcbcf357c1b570e83b00a5495a1b278a7f396d1ae9e7df8e6fef309e757dee701980571aad536f626a9d4fc76276c0c6b7cb08560b0304b537e2776640aea27b879115103f3fc41824d85d5c6a10d9c0f48d52c8c791145cbed8f6c87fc4eb07adb7d44160c09892d27b770d5b329b019f48f07a06d8360b6c9955cb1a05f09ef5ba3cb6f6201359da4c44e41b242e101ec48d74ae21934ba9ec3b78f9badac7c661f676eaa55cf4a6146de8932eb975dbc9cfbca8b452a3dd9b50d5052ad00b8875aa8925989ceb9c9a9921ab9864b93c1f5e5cddd99d9c706c3ded249ffbf0a4bffff88e41fac726a871984ca95963ab8de35c34d899bccb28aac53f5f820080049eca0ce79f0eab049d545caabdfb8fdd06c294f8708e54973e673fb38ec3850f2f0789d3b24b9377c45dc4e3bb0950d56e98e7824a977480a2da0ae347c01ba759b7ec4e5c0345c98ebc6d9c7816563ec4e614be4e6193ac7e268a37d47fab93c4e31d9ec5c02bc2a5783e1d1fa908dfafb203f4a5731ae47954a5f75e889b9c1993030b1409ac2aae991eadd64bd082d8069c6c76556fee3b6a456a0c64558a00cd88df726730c85428f796c58315ede6e9c76dea90fc926d7351d9079a3f25209b936006611f653c2cb01e16d940e982646c4129ab289ab774b18c76b2c33422040dd8f97fe2c911ad318eeed5b73e547d732e5a2e5accc0774dcb82344881ad11dc8d7249dfbc79b4622e7800e3b4033ec47da6a1fcf231830dde53a936d26ac8e9c89a487f061c472b45d9e12c1338af4776348d75d2b1a1d90c1099f4f001331cd098032a6ea471741d3c01fb229ad7e5602d7a2d35e9d8999fe28aeca3195a5def950249beb63725fcc7e6b6aad2be8485b8ee8ce2803035ddf00685b25a43956bb9ce42bcfda3262ba21ac773876c0d2bfe73faa31fb1950f639427e76ef8aa8d2bee7f311ebc5ff2f625944562ea699b2690df3e6e64a17c62bd3a08fa81869d14ea66e4c48ab898eb8d87e80b3f7e1d59cea37c1450426e160726dea9e40fe39b4b619f95161a67a8dc0623297336f8bfb3ae25ba7d5e2ba6fc5431202b2fa6e998d72839676ba556997bc0648f78767fc9680107f4defc3b242ac90a5ecd30255930485985959b1c4d4d8566992bddc2983ad7a4bcab29fd06116d0d83d1c77817d3c79d797e91237fe43bd49c3976afa78a7138ddabfa132a72e7d1a422b40a582a6dac4a10ce92b7a8aa599d89896f7ec1956c60c8b7a618b3fdffc8aa3f02a79c022f00319c927e01999ba6035e29a5480ce84ce9a7dd593e783ff850af8989914dcda4cb414b5a57d142be8f3c06a5859e53a9f613e174791f383bfc4ec68871172f3dc506e4d6121bf7ee156d2e04e2125680d643d9f1cebc93999662e22ba528fcd3073386779a3d623d7d37c84dc63298d8737fee59a415f71a073404fa9348dd6f791058c757ff2ab3afe3fc0599c4c2b9b40f483262f40dc7350c557ea43f7a1703e5834db22bf75894b8f4b6c2917b2b813a0e07721f7da70932fd3e40d47ad68df92e91118773351200d5e7ab616c37c24a695d3b5eeec26bed23c3d0d186b1ff95821cdddd44511201ca21bbfc3ce45f8580be257b09214486ef93bafc45b24101a7757ff312b47d05f8eb5a29943b41347cb1983c75cb7a458a38681d60e03b85c4245d91866739528acdf0b21c424e9e84bffc6bdac8f7721c3a40fe7e43d66901b2e18147713030a64fe55d7b036f0dc16eb9cee221a155cc1fac6648e4f8f487a6728afeda48e975faa2f35a868dc75a49372e33dd6236c371131c65ca8a6f7e88777353ab6bc41e +MD = ad4ad693a48dd376583606a71cee92038efb868c88f04cd4b075b7593b1b49a19640b60760f0a02cc04ce4ea536ce803cf77711197d6ded86d7508826349787a + +Len = 40872 +Msg = 8b71d263c8be194537723e4feb1e2035dab38002ee42b40258059fdf28a3e00a1ab04a5cb37394fe8ded5286f0162462a16a2e7affa4c8114bca76ec48691ab7042268a4f5659b55477d66fc75cd2ec117597664fb889b237628c1defcb20d79efcf1582b51c94130d2a63faa3caa418e287400709739500812768fb6e05211784c0373d1b1fe90086fd2fc8a195f030aafc75ac52ef1e6f13cf538cc3eabe5b6afcb71e51f600e45bfdb3ae98b678d118c1fb9bfd839e39d4296bd826e94c0b498b7e6d7c2943873433d7f4b0b5a6c2d3ddbc1c33b87d266e3c9629bd8b33f0cb767372c74018b1b7a584e1101be1cd84589f771c1423fe8610bdc5b057dbd296c47d7458c4e9298f5da0bee17090b8d33b8bf3df21f889c7aec9f528d6ad79527d86bd573d1db8626314d34a3a1d4c678d6ad9a567658fd61da0014d8e0faca8aa7593ed311c26d9bdc9687403ef51e9562371956dd0d75e652c3146096a353f52323f422a4e3b9b75a6c587526e8f009e9e03d8bba22a058f53cd3ccf27dac17da4087daf1bbe51939232aab002ce556ec3d795d9445073a2ff1c5666ac64d333b538c649eb79a21d77f605a413d590cd7a35f5501c1151a61767bd58639a1f7d4c16477e2632371d3c5ac1b6096d58c4ab6420a6943547a483f6982db2464d6251e925d934b2b79ac9a6066e4c5e555a3ead3d661383fca22b11106b032e05ebadfa8bdf7dc1cb9d0622fb55447030971b58741500c419abf7004d9cbd1bee1f46919f1a6a261b2ddb15c9f25a6a91832aadef3dc5c045c4cf0a764748d6b00605f5891161ab4e5230c997cdf4161f2754f3d365c93f29f79b79b3f50c24f4a8d270724ccb160c14ed848e6f7c3a838a7f744b1674096d4b43932e2d71d0620e964882541130ff7cfa8fd65f589f65b494767cd72ee5b8c9afa10c77dfa0a13f37c6e0b099c1cd913f329625f20d6bae7c4291305f9db277c7ea785bbe5e5a439f32b5e8cd911e5ca4b4f74ab04c407f1d20b0a96ff7045f74b8986276d03423b4d4288514679be3125f2055fc238a2f615702cbc7bc56899c5194136fbfd8e660f3620ed50deb306f7939ce3d5bf2c72f31ae1dcdb44ffb28fe95f711f2ed948ad98a0b7a49b74ba54b6c3edabc1f4e6ef4dc28eaa698bf0107c394c5331c361accc9046ae4a73a9a1ddf2c3d0ebacc08e9b672865bd9dd0db44575f1480dd2f71547820da662073837ba20cd196a4ae45861850a9cb95b364d441ffffa67730bfc2b0ccb5691ba65e026a2f2a5d8ceea8908e9dc2fe0436319e71c5511d21e3dc89e2b0cbedb590b614b3b1479ab6302c3d12466dcf79d7c6157f25d55f8dd75c3c76638a4e9ee110250729b5e8c0e1450e4c00f6da66f686dbb2c7d8e7eb79b33cf45b7d162805f0b5dd0f01c23d908766a453ea894c311853c4f1f830fb59861dd50f10def18ddc49cdc797b17cbc67e8b395d576aa05ef102e5aafd51dd52951a104f1f38bd7375331e9f4311ec37b06e26d340cf0f37f8347686c4ec39b217ad0c37d1e47709654a1eca3bb84541533c93082c6c1684e4fa881aa089d1a02ebfcc12e99c4e87dd0a65632cb5ddcdb11c0964e2e9c02dfb7da5d059d0ab052378d94930074bd5259a7ad0deafbdc410370f4f2ced121b86e5540fb668d1c73effba426ece75db8523e57b194feb0cb9b52d31d0201634cc5a1e4080fa4bd0c77df7676b98d58245cd2fcaa53d718ff4bdeb72972bd361170389c97f2d1f060619191fee0e71b0acbfdf27492057330877d27a49b6518bad081f137baa575343fca7d1c1d8534e03227df9cea0a3e23f0c69b1ae689998d79268863c18fb9ec54d29e7aa9d8345921d91a8fd665f83dfa438808deab272ddc9eb8a892011cfd53528c87205077ba1d9a49c9c1a92fe3166c84db0e3a4ff07d430882c6aa3cdbbdc2bdce1bae9da787e3d3c7364453b7d7ba081ddfc78299ddbbfe6eb9db882bf69ba8bbe6131495f33e5f24cea7f210b0b4985dddd35d6e608210e8f6159d529055d3dd3a5e5af9d202326ed57489a223d49c0782de3f02b81dd66e0608dae40d79d5ae62b0ff67b6e7f3e1f51a88e0b392a9975958b5eb46e7b58a53f5cf54d08014ac09eb605414581a3aa80a8e30f28737a9ebc3308c9f8834ba8a9ce9298bf127529a4e3c437ccb2bd568e4f827432adcab94be6d6b2477ea7af44ec6e69255644e8e59d1ba42c99f4eb20a653827e5ff08fe9a9b0b682f4d383b8bd6f0862571dc70becf2d28cbfb130e1b33e83351156e83f867e1fd16b39ecae497ebc9d9d698cbbd8310715aa5aee76802cbd7e4c638cf48428335d6d40b1ce9984cffeae91009f6ac08cefe459ed8a15037982967f42b1ab963b4e81509cbfb46787ae14fbeb5fa987a941f514f5c378adff687a12d31e04b17ecc30d1732aa2112dd5571115a39e6fa53363f5cec9b31097597d8408e2965f46fe002bffb66c68089afd3a45124f5ecaefb8623f45ce16897d293ea7a66a89d90c7bc7080c1956622690dd4554c63d5e9a7bc512dfcfa61cfb05a678118618801f290b56d3b1c281a19864db120bf5aa5f35850d3ec0a79afc992545ccf4f2835f9160b0b43d93ae329b36d0f4246cf6646d0af90ba80349a76e24d47ebc012af33b2fdf57c4b3310123bbeba11b8c8ad1abbc9ded90a172250b09eed0e42bbd03afdeac634e095237b75bf6c2f83cadcf7803c38d7f695c9df83d5b6a765a83b976d7dc81e47d59fce07eb7fec163a8865a4731927d435138be29e3f37975c53b17803a588cf78d77248cf8fe80ebc31ddbf0b0a59317971ee4344e14f664cbb11a438d91505f38d10eed7f693cbb46bc8366086ec7cd7776f2c56374f40fdd4408879cd3389da031230914e8febb798dd9110194234d39687146ebbc7b5e431b67b330c74b9a0dc0ed498123cdd3a4b5655a63c0af7f251ee81eaf9394394460c2311114913cc9a6f3138dc1b1eb0e5fafa7f599724c83bddfb574a245882a389e680763126c1b0abdd0ff6bb2eb00b1406180c8749a9a70de73059098333bcd85c0da5cd7134a14d4e9a0c8d9bbc2d39ff1ccf4bd53b35d6ec029069522c047fea151a6e7179feebfc438812d449cee54bda1c6565d16ac1604a7ac433d00ce927336ea4a6262bd06cb8f3db66cd62ae82fc7e646a20b865fa74829aa6d4588c79e4fcf09dadbac32656ca57d1cb7aee2ae05fb9508da13d011d426d298d5a0288a65fe2b6951e0caf99860893d88a3caa125ad4b79ca7af1aa134ac4a7f93c3aa03f1eb8f60e8456f1dc17e3b592302972eda671dc24e44adbcc3e8783f9858746a7d8b96858be5eb4fe72916e1a7e8588268b0f183178640ac9a923121da296e563d435a978b66baac6189d4e6bb5694b98072b17365fc6a1d034a13eadbbefe63cb934a0b696043bfeb20e3fccfc5a230ac0cfc07ec0f806aa8708eef0fa1baffa30be355983b2cf6ce7ed28847be278455e02fb50c483a31f49600a2f85a1aa65e0dc50aba7fcceda6041f0dc5b88b2128acdb0f392eedef622b179b284093e447295d9f22a6aa00ec512811cc4d43937ec36c7b054c121f9bc0425c120dcd2618df2b8773484add0bd69c28cdd4f767c2b4829cf2f85d3eebc60f5a480a0d082daf9d682ebd35eeaf04d9b73cf80cfabef08bc984dc15b9ecdced1a2cee09f7000b4195a7ade192207c6f41bc1f0ad8ae2806952d6fd23d19555a1052f21a7f3a82b6a49072d4742aadcb5cadc2579e3aab71947f2c1924ebcfd4d13cded50d27a65b295bb4951108098c7c948a9997cefb5b2bdc79610dfebcebe15d0cb02d71d6ad787bdb99d55320110602c04771d5a831dfd8003054acad1da52604425c83a42c367360595d8671f79d6b0bc79909228434f4391d958000d8a14a3df216e78f65c7d4db6a063c8fbea75fe5b099c40ac0bfa38c6f5d1368ab7a1c4245e91808c8c102b5325bcfd9c4c833b698e080c185c48892dbf7d13514743e99b45f9f90f396af7648eacad0b8549926c709d9d73207f5b4ba0244069243f3bcd3c6d8c844dd1da7242fb804e7f0f29ee16239cc53ee8d9aa018d64da34e0e141acb7e1f5af8efc04a971206f201d2876ea62b0169ecb28d1488128ad616d037ffe9d9f6947e984a22bd6327552bab88d5321826f28707348dfc834e9912dcb1098e86fe9fd299ad430f16169fc2f01b9b92abad7c41ee0982c2a2f96ae695f7be460f87cb9986823208b525206c52a858443ff575a1f9748996fc1bd9f6ae74848cce32a637c1316636cb03857c15b761d35f9f6d2b9c1e08c5e93654c758c002ef5d7fbe31ec636615c2124d96ebe16eac751bc143586e86fc04d969dd5752afda47df821c6a70983234d1c731378ec54c3afb108db0de9a95d97587ad0cc4e1d9f7d2806bcde192f88de2b0df7b480c4efbade97f27f6ba2fd17b4cbb0b6f4f6ae7e94784794eece5579569063985ba0151b4aa7c403f4c26878b178bb5da5f09b284260b0f10ec950c8a7e29f4c0451fb7afd2197c20e71656058693ae9e8732d243ca7401c0386427325ecf3f903406a7d00eeb4e44017be78b087748246e72b1a8a333c3e556ff222d896a7c7e1d429cf5af46390121c3967c1b8b34e46b45eb132eeef7e8aeb2a7cc9c902dd25740216131debee0de89fd593e53d7870428e923ebfa0052c61b029ff6b4d64578abbfb34509627b8e3b76c2ff75c264cf98265b58d96fac33b4dd28265d183007d1d25c475aa639c764bd19cd45581634204d1a0421a86d5e0c91f5ba0d363a7b5f03dcb7370c93f0721afe26673b03c83da7e06c574d1ecb8ecb791039e2bd49afcea523430822b0003ac0a93fddb5f25cd15effeec028f2b7e432c7579040f9408d55f9f32b5e8c7b7701a453a2c5591a53e64d5ca4247a1466a35e0ab16e10bdea5fd9cbd8bfcc605a41d6373c9a52e2aa06b3255b89a820dd5b32b7d88d167440331131a2cf163b7f018d5f1dad76324e40ffdd68d12369b2bae3e37836810039705ec92bf4f0893fb1583f988749a5ab1551e95e83725b8152f01212e2c6ee308800f6b6d9c1c636e1b55d6fa033a95b0477ddaf290b82c3b3c5c82b2a7e9abffaa65ed5d6207edf03333ce5a0cab9d89ec03edd2a555be44e037a43661ea25238cd462b82830fa2a64052bcd17543ae34c9615b1fe6638d9207acde3e1d7171d2d4510a5770151c4b6b3337dad9f3466701f9cb7245160a1060d46e1af1a4a9496a1404dd6e1bc6531252f9255f352bb5f87c80b9e80ff4599d8575753198631cdce3bd7cd3801b5de43663498b85d8a21b4e2d6f459dc6ce1c3476d553e929cdcb6466ce46fe95ec4f62289fd571e7abf90313faf46c1bfe7b7604d3ef0387cca3fac34a4ec3c05eb24a9bc0c365a344002ff6f56ad74e5b29ae81c96963e79a053b3569418c2555cb645f34dbedc60acf1928e71f8be874a562805e39a6d3c65d9a5fb3d5b42f31e953b5649576ba50c4734c3888e674db8d1682eaf638d6d21b9c84a251e868a39a7d60f876aceab67eb2a3624d737de03f5f0bf815966b4dddb656cd6c754c0b6d65d438f5dce1bc5c5bf10cc3bf6e333a807e1e2e4bfb7a027c388d8c0753d9c09171dea9a339d2ebd3a7909226b0351d4f6bb596c622172852cc7b16fb1aaf3284dc21f87c5d8abbbe29862f45fe7646006776e5915985bdde651eb3ecfafc41a485db68e4b7543a701965f199a3774347c3aa913a1c464173a4d0d9499f316c94d1438168f1bff69dd9a88fae49a8a38a32f9302ce4f941b70e3a0d8d51ff11ca70f2c865773e5e9becd66fd05b8ac54c27bb38f63def4d1d03d2b744cda5dfb9c771a486c250010ee57808bc43ae570204991202a1c8a21a28036cfc6cd634e76748ac396d855c4b45f5e0deac83a7406bfb61fe9ae60f42dd74a510ba00afd7b2d055f9c34eeee570d89e93f09b548bc05a9f2693f7e30ba68ee62e2fa5bf1f4cb128448e3d277208a88898ba65dd48a44f2037275eabf915baa6a14835c1028753a9a608a094557fee35396463a01b8a41ab8ccf8ae87fad906d16ae4174361540409add49c42449123b1289255b58d4ca87b3e71d2723d0a8bffa9c59473e590f83af76692542e69cf0a0832b5d9526524b391885c67a115c05d9ccdda86fe509e9306ebf3655fb16fc5ffcd6256501617c78de4564d6f222d510aa5f166f1bc7f7da109c75c1d8f8c4cd50b6512cc880821fa2ec70ef05b5b44baf5e1f909fe226192681721b12bad065296c5f711e27f28a00db89169e6d19f7564b2298d3b0fa59fb1ea9c63ae5a5b3d138aec664d0444472a30be25eb17c8039a6ddcc49ecfb3918c49b57a401bb3602dbdd812f120ddb62c377d6b93b6292c401afcf74ce9f12fa03b5440087976818a65a55ef55a5bb6bcd5b682053528b8febf706f70e5c94396c861fb2ffb0c69d28a3a92823b270f821351b36a1c2f6e7b662071304ca29315f8c4f4dc2adee0ae347ff6bf4aa78925f83646eaf4a5176016f448b4a5e3e9c6d46573388c52aec66c5cd1d50f44eb4e8d4e83ac44f27b54d8d43b2578f60b51632cbf6babd19ac139b96deb1266ffa4d97fb1d9947d6200b3a891ab4e42c15dae02229c0fc46d47a47e102adc768bd0e4b21a986db0940baf58936dad2fd592bbcde2f43e91ef02b49303baf4da5879b6d0041255f2d81ed4cc899420250d9a9477489ac2a2e89771e08ec2e2fc2e4858bfb86fd6acf8e12bedbb472c8c331a41e69cb6235d20b1e34ef86a2f43d5e5d1697ed67844bafbbba170af5bcc0dbdc8042672e72c5ff613c38bdc621614f729b49d6fc223e7158cd1f1f4344d642833b72df498766c0e08288d3d03dfb426688a5f633cb147d6a766873d3f78ff068ae9fb64bda210a2ca6647b89a057e1c97d20ada6e56a1e7134678b205b3a8fdd381d6ebdf1a135a62630172b0f0377ebe74e7fbe17bbeefd85b0c7d0d6725b5186707b185453dddd7090396cc07aaf7e3573eef1c866797ff8b8dc3dffd3fd86083d6dd378b55d4313f944a77b49e2d106557dea7e162878fc041af04dbbe0bb4bd8a977e5425e679ecfdb6385fdac84c8579ef0bf2776690e17266036b6af81bfd6d09e00873bcb6fa8704976e2771a09fee4acf2370dd0bd6661364140b479d2bc558e70f08fdf05077591c4a4dd0129cfc18 +MD = c8a18102102e8a3d20e39dbb06fd913298b78e4a092de4874e615d9053827534810805b48c0fa0e27aead8dc4075fb0cb228f1df9285f343c2245350d0f140bb + +Len = 41456 +Msg = bbee5397245f3a731539e21892c18d8e11e681d12d215dd49e9facc569a2bb935425a8ae9dbfbc0eebc9fa7685c3f8fac2f4eebfc1510d0259a0125b53dd1a43d7ddb8d5253145d1864d77e681ea353151a8aa0197f899dd4d39f0c8fb219fc32d5faa94247e7dc6cc0d81f1eefdec3ba74add1f19dea86d60b26e92c736f21a3cf3a773026e0ef4a6503e1d34c5c421aa22aea1adcae3bb7b52b64321e3ba50eee0d7fb27c99d63fc60d9f5bb0a66ea44774610bd85f1ce8762ed6270f19f6e2a7061b3fc57d51cb78378feec937a9e5c93cdf4b0d87cae6a2a3e781c294b7bd7e96e23e7e05b26bd0244c22d2aa746dabc6ad3ee8829640ef2cf0c8d50637fdf9425d4512bda89f82564c8e79595e8a53b4537df60a2f75902c8a62a31928329b9af4da301f84e4f330098839ded8fa75887a7eb278f6f35a152cf5d937e8d9da03316432a5d7ca97642bb670a5740c75a58ac7aa497d58919950d8e3dcfa82390dab89b6eb21bf03450b8fda47a05ed8bdfcdf4a063303db0b8eb23f82ed9a3d3ccba11959f340bb65217ac33ffe501314592c1e39b8838afe3ee858c432a05af30a40f66cbcde2447161db7e8de9ec95b1834935e6e5645e40a01cc1b5a2316d2efffcaadff15d25d41df44ecd1794ff4c29f45eec50a804f488505f2c491054f052402982a564a3a5d35e6b6779e2b63e0b2b2556d0ecea2a2e8a2d522888ae9b2543ab5df3df04090b819d0217be04aeb15454cc6e1859081b30f4cc4682c15a016cf818e2b6912a4ec5ac46f7112fc4a4d9b1f5311597b6d6ac7c45ace7d7536c25d75a7ad1923023925fdd23c180aa6b20057a21c9ec5de7648d63609d36aef0d612cbc4184f4313507f6ca3b83f858e931702461da225d7c2efce6c8e269415e56f14c7740f89a567d49e7ddcb4809698b136a9f900352d2c692fd7a0f12d62bbb7dd8ccb1c2d613f2618bb1727c00a9999be51464db6710cc52eaabddea05fc0b1cd1907bc55cf403d856550df7072fd984146ead2cf2cc9c972eccc3416945c278d780e382a78d3e18b816f25b6572c766891cfd7a9e5cb3ea4a5b53cb68af8dfc5b1cad8d3e35ed9d2195b41ba3f8efbda39dba36b247aeb6bde603ea9c8faa31cca21e378984bee0334fe7ba5b58bef3f46f8803e713e9a709eb58116d6cc393acdfda3432000e8c6db3f1a9f3e8b1941c10db44a557f115bed9c4f263dd469c8c1455e5a02e78fc2150668cf64f64286b10288b657a519d3d3fdee00847cfd6eafe15de5c666aaa0ea3bab5eae3432b61ebf44ab00187a8059c0a7ce332bbbd39eb8e80df5e7030762c72c74a4adb17a102b3050d640fc0b86cdc2b5d3486da096b446f916d160a086903337cfc9877a903094ce6386671c630c87dfeb3dd97ca0bcc1d3b18c8a135d7f08d2b6f17b5da5b5b74c2f50825af6653e740371c810c2b99fc04e804907ef7cf26be28b57cb58a3e2f3c007166e49c12e9ba34c0104069129ea7615642545703a2bd901e16eb0e05deba014ebff6406a07d54364eff742da779b0b3a5146641293925b9e2ebb555705b57ddc9b64d1edc429d9775a91375619585c2d27c5ad905be4d1d21ed6fea636b6bcc783b0eef2a1107d73fabeb519e647caab4072a1e16e1da93681ae7887d456648bf35af63d212195e74ad04aaa8111dd3135bddfaa6cb53857d1a2415070ed0b8684d36611b6f5b95dc566766c5c2f0a5b7207b54fba3405a29962e7a49f12f86392aadd04f4d55e23e4f1b6f3ea07e8967ff0d135e922a7a34360ea08b140d19fb751b9ab4d790ae643f28ab5bd24ee5ed9f9a2117c0984d66a1cb6e159ff1d975d589a69232936214cf97046380e8220faa2a656e54123b87806dcb2ebb642e71f3fedc3389e66417a76f61a0d4d5a996c5c6c7ab7620ac5e7afda12090ed80b5768224de02121e356eb8a958f49ce1499a742f15504b08b43881d7314514370b071d66dac59ef635cd7ac6d408c531f2d13e85f5071ab751610455aa0261bb394ed88a70fb1256e16bbe9f5c39d90357122cb193c61621fd9e8b03d3f15d7507f2ba78e8ccf7a5fff18b1c37ae5fbe4204459c37b3c5ae809720c9f3378fcb3f9ccc198a5fd34b5806ea25af91dfc9794f912c29f6b1c7a1f3ca8f53ff7f26a7f315539ddd31b0b453e2a20a07e18ec49c184ab0b862d2295b923d3c6fb6ef09a09d0f6b6d963cdb7f7b7b913aee74ed93e3df16215f39e1767ebbf4afbb8c2b4a6c363a388c579433bd998c528de3badbf9d1a15830628eed99f1c3e81667d59a8bae53669a69a817b1e243764743f51d620a9a865db7fb67e8c7f34250e6d1370161fe1e49dae0d25e3ffdcfa3fd6400277049d26e9eef8d7526cbe4f073e6cbd63583881f12020dcd9804852977d02d4fedf565ec81310747f492f77e75dbfb121429cda679d66f04d69ebf611a004be268e7665fc78a7c661b91a283547971bee53915667726a10ddf14a5d44ebe03e9c868fe4dd8c294db81100e867788d5e290fb87e675b84af09dae61097cd0fd6af7be55401ca1f8ad1056620f48d0ce84fcb74caed95513b3f7b318880affe070dc3192bffbef50e4aeadc7a62e1805ae13b58b460dc5a460d46df5da621354005f0bde53dd734389455b65d4912a2267bc3c6d3777d0a4fe1e221d86ead40324689260822af67aa2bca96320d9ccccb8df961a07813ebc96bc1bbb140c0a92e3df1041d74a409d3afbdfea136fc7aba76509b94192d6932f96a0f50d2f7cac46accba8d7a5195356ea452133b9e2683f34de736a1161d2d194f8f3f8baf3f753b80cbe0ca34944007123310b20e7ab85355d6f0c68a820849e6dde5d17371b14e91aaafdad97193f78c041200d9c1b8350cdd6aefe7026519c45dec4ad10c191283f953229cc7a1ce7657afce6cb61406e78cfd93b848b3f76c91ab6e44691d15ec1a73481b00e9da65a0426143a25c475a4831487abf8571441bbba24a032dc71e9078a1b0b7ecd9de7062600b20e184f9a19e74aac15a05ef5e859d5e74dba4bffdebc61a571b1b554a88511fac443e2a2badaec5089223d2cca1a5fe38974d24b5353b9469053d4e814caaedcf04d18038e76d55ffde5973089852b5c8f10f0148fd68db583bae3ec6f7d411e3a3fd707bc426ea118f256474c229f1a06998ca4bacd44bbf1eecba8e4263189492009f46dc71ddd835060ba3b7a24e497148d41fbc0462083f87264984ee6e5c6f89513c88b4bdde5079fd180142384ea8bdd347a38fbace0dfc268b67cc8fa58cf63acf6186167e720f9d3407802c0a60563c560bdcb26b0aba2fb64393f8fa8ae5b071ef6c54431a2580aa62f2b61738b073bd5d51e589d64f967ca0cb36e5d9c656b69abe13c6a95a3bcd7c0042ffb24b1e0000a5c084d13b1f2127d8c5d20a26922ffc11c163a01c232feb3f7f1e3d849fa0ae3edff68c0b1e56114322599c74f7207c0dd9c4bef9cb441916a71d6afb7d21ae839059771e188e25a0d8e6f13ffa4a92e8e9442661b89c8e1c7757ab2e3b059a2a9e282302922bad6855f4b8e61ff0f9596c7ca6f26fbbc2b75c677e8b6dbef98a35dd00471fd14110362d4415ecd5e7c5dfd8911a55045f8dc2c765a169d0352903f29f6a15f1691ed5db333dc54c16c4bfd275481d18ace646e1f0eec3cbd59d950370ca191e8e0ad198f6cc4de5eecc8914d40a0c6b4387556190e21014634e4589f5059dbb386a95e11f5ffb15d843c7fa3deeb77eabb77aa0d629b34c66b1b1f0ccab2849f094bf3e1d57415e7bc0f90d0354a2b55e1d233a210441d6487e56c248192d6d3f3faa2a6140a54241da98c7d4da62c1d31eeb981220304490fa9098f7de31778cb1d3108bbabb53b2e723b512fe5c069333404519fbf309d8bd1bcf6c68b90b51a1e69b1d13e7f5477d365f5e2f13061700adbbb9062ea8784c44e01657489b3676412465eaafb998132d1106eb0c42f6fd90767fcd37a2f81ea8757618449993a57f4726bd97130d3f8484bdc0cc3f8b80a51fcebfa28be0aab2ea1c2a51a901b5fd6dbfeb22841f68e924e33ec77e7d4037e2366bf3c5ca76f0d8690be42c093e48229221d6af5705a77c07b3726214a2e5983730afd30e19eeaafd4b60a50294ebe05dc027d73cbc6bf49bdd719d1a2f2a9c51dc3b4633fa08ec39677ba69660553173649aae48e39319200b3981d65b6359069d2a91c4addc16bdce89a32d171090637db3970421b96434cb3ea2d1ae4c68d611f248488be4a4fb0f1f2d4f2fba77ae79e723e6ed3b604a9bf592a49e324630c936dc383a9f316197a09765109f71d4f7b9d779acb597b20bf2b3c7b1b17bb7214cb00c3078269206b28417705bf94765a01424f6a4753b89ba98a36f4673d9c8b8864ce41c0efcbac975deb55c88a6524e7c8131847327a3b1b3d05d6db9091e1ea162ebd755124269ef13563daa522bf9731713d23c16c88c97c6d293d5d59fc3a3e6be5693633bf8525de95bd8db71559a4ee41a1a79868fa70f855534bfdc6bf060b206347ff6093226d5538eb2b0d7549148d8a8c06c4f8412dc2e6038426c39498d52d2c90f211106a0a1467878e32496a87a51abd85091694d8bd2cf6038c109a6e8d8cee5b47175d1b19a8d282dacc7898bcf7c5917617b600a26f5c4763a397524c0f22857d5dcff20f5714d0b3f9c72895cb26d2876e1aa05b74bdd9907519e9325e3356fb0d48f6be1b566006f9dea0fa3fe82f83404922b1e221a15bada79b062129b8084d4e8fee9d9f1a1af44566b1fa148fb4b8c9ec6c6290870c73cad092ff0c92ee456b256685f7e6391185e482a5b2dc60fb2468549b1373eaf108f09ca1e5cbf31f2620ef7a66aca978258137e8c8fdd034e1fc3036b14d3e4cec63edafbb4d600007e95124f554b352ada4966a60da4c898912cada73fd50affb914dd097ff7d1297e6542cabc69fc7a6b769d4815b1b22a311e8305f6b6840bfe383ac80c9917d5d80bf3a91eab5fe972176cd34688728b76153df8080ce27bfbf59ec7e93e669e21f5cf5ada83d20084a86fe80e9d6c34e6ad390db22c98d838e95389945c2fdac2cf10609e97e54819a600f6dc6511aef9330eb7a3aa39a94b90037dac86e61450d4714ad93c1c38b79cea703e740562246319764b1a27579a66292480232be352c26c89f904e94ad4f966e4b34eb9e6feb9f3da16d0f47babf83f1ecdc553c02f056cae9c66df07084810e4c96991b5fe842843a583237e06b2afacc3e210236c09ec1931f66ff5b80572c0ef394f579a6e2153659526e72112158f211dc395806c756a38280e8f6abe0739a352253458d47979d57b813f81b2eb1663bcf08f1299a3023d604d4c96ee388f7428c5d4c0638b3773cad4ffaf01aae2ea642988891dcf81a053aea5d2f2a162d041a3d15777f11cdef774a01f8acf654387c10a5a6585591f66a5339577bc3456113182949e258a6585e2b949bae32e0dbc799d1cfd5f08f91dc36e54f9f374643c1190ee52a310b5fac1b3c41e609d876695b92771a701cbed8bcea7e5e1b38916a654eb11f4303eca74180521e2446f1ab7d7303f07e4065a50dcf4b7f17243357277117883796e799c6e8361c2a3134d528f9dc1fc2046e8c501c20ccd21110d085fd7e2eb4cc38c8d1fc55a9c4a2262f83ae6a6fe36fc1d5ae5a640bf507121ca77c4eda63aec77d8b45188c9aa0b101b71915a88a8a47c84e107e05270e2085b675ee52eb437cff1b4ae58f5333bc92ebc246915e5ce6ac59c6d882112f2251da71c85ef6944098aa9325789763302b483263f308ed87cbf604d94a5b7101c93af743c829a7f98e60a941101039f314f6f0d6962f45136b4e53e924acdda335ff8fc7572e86912a64139f1f64bcee951c8405427c6d70d5883a70d9ac79f1dd50c1bcd2ad39eeb4df59a96d3bf509f6e2775abf966c8851cd42d632044fd30856168b024dc6fa74f804c6c13eea2d7e71503bd4274a412645f184f45c67320039159aafb7379bb1d89b5de414a54076f197124bd40f859e17d2e0ea5bc7f40b204752a09394bbb5a6a6d89f662e2b268ad546ea47c43bff6c6a53dbaa79037233321b9f88e341c68bae9eb8dc8bd7d662903f7a28714b926b43468ef185457d9c605e723e2e152daf3a17f71dc62bcea45365c21e1c9c9f3de41fccd7f1a473805981e25e7c1f3239d2ab26d2e70e5576a3208cd2cf186e09d5485d04c7079e0aa3eeb790d6471c52fec20ba2f46ab5000ad89eec91a646f89f2709210f55445fc80bb97b4375352147c47036f726346b0ff5c1136b2e7132c92698d6cf78aeaa5042b0c8cb91c3cf34191b35f72a1bdf3bdfbdef639935dedbabd1ca11572411c1fa631e76830f834e29d448fd5eb28314fe5a2984cddb245d207da6dcdaedbca59a9b264d3361661b5d651710aa408024bb6069d3b3aa2dd8ec641139e953d4838c2088578901a0251b954938f60ffef37c96565a33ec21d4774eb42e6c9c81e437baeb9c6e3658f4cc2b877d2a652407aac5992036e728d7290336c64b11ea4f0331f725c849b60ed9f078e82e8b1aeaaeb5da2da2e5686b6a4a41066efa384c584c55f98182e3fda8acc580eac90924ee2ec08a612c0c17a2ed7af8be9f92639ed4ad207f290749a326154e4666193bd4f8f33e59043a6439b28ba32147211d3d92a6a3ac864978312811582bac71b9c7da1c5174b71ad897621c0f803c0d019d4be989eee1d214b97861a87fe13a262e9ee3cc988cd6fd24c5d445c4c47d9827ca1eda2f81caa5a5dfac462c4e9b08730aefb6afca935b49a25c4cd328996841d6ec9f56af58b15c259a38183bbde9fde7e917a0ba7c786cc25b2c97b08bfb5436fbdf4bb3a4c24612d4882defc75034fc78f753a4b6def7ee7aeef7a378d9c9b3f4a2f6d5d75fcb6e023e51b4e2c68013455fb0d06c1550ec6199da4b8b8806157ff03f5d19115300cc606ed036d249f2f7569f85c4a3e184b7352aeee992752443d20e92915e4691d8f86b8ceafcf76237e5080ce612108025cbced5bd7f7da7e94f4bbd68d10ce9d10d303027ccf22bad13d3adfbea47a75261ae482dd585681870de26c5ef0dd05da8a50414cba31500e8e8b02bb1edc0e702b28e611ef72d793caf15d142b20e24d0b250da8070e8d96c2f5d9df169948bb3c2f182e13abfb4bba6d2b451616acf8d3f5ba073c26bdfa891fc7a3125ebe77ec6b7b8a7b6e670f5aca495a483ae06e7346e8f2d0267bba3f4d4e9fa888ca26aa6292af7d36955f3a7d59cc481a070e779d1cf3596a5 +MD = 45f5368ea111316157fc6b53eb5a7e4b79ecc80fddc3a0e277e1e1d43912e295ea1dd9630099e932b0ed98ffa76dde73b6a1992735e699825576e8a3bfa36890 + +Len = 42040 +Msg = a3f0d1864b7ed2be3358c98afea9048c1a330cbde7e7e3a81bb28bd66599c789500826ad6b673c0ba7ef33c000bc83ed5f23fdb1bf450e548fe442c558760747a078b4670e05c931cfa778a3376d6562ac3eabacc06c1f8e9d8cd857a686ef4c5be8839d7d8000987329a11dede53452c72c1e9730849ebd0b52567295f0070049ff9c3801ff6aa85d1db615684b772579965e5b58b41448a2ddc3006fddd7cc3166061ee0aa8dca5429bd72f2c8b7428a2474de802508992ad627e87a74e816ddc5c93962aaf3641ff8c01ed1847b13c27d670af0ff02176be48a12ffdec14713c3ee6fd12724e08730c6004da64bffe94a3fc6ef698a2a2db0f5664542eac89c087baa7348a7a4547ad800b057af6ec63204f9c68b293a37e26fcc96c9ec00403d7bd19236031a4e7dfd0640be30c822debf8dbe8e66af5221012c389a4e56c60af3cc7419c3a83ce23dfa47045576c5f578691d9acaf24615b26e74df9834f816ed8361186cb8e850a0c40b50a7de772035752bd6dc69db678a7a92bd53019c0a70dea35b88b118702f4dd5cbad6900070099326b247dd8bf9138da5e06247b8d85c5810b9efb95eaf17bec9cef7f2751e0bd78812a9607c4d09194ea39075d483320425037fe2765ef379aedf589b5a7dec9463e771d2e1f4e6b078874110ae282d72f51da2195892f6a25e348ed73b000a5e4cd9278167813b07c6140aa49047ad290370fcfa9ffbbfad6a86f152615503a9a540311877528463b9d243ae35624f9ad295f6d296f9bd1f564f267997dd66eb0fc534f49c194178c63a929a17f8735cd505064de80d5d5ca3e5a4d9391992a6dec099923025f09b7db55e04928ab6c39d46c1c90db73f09c5f2d2edbf9a1571b4dad59dee19206032fb3c5a3f899873adc3bfd07287c09b5eff6723a5cf6db0046c7f6420534f5ba8448417998586f169044700a0ef9075b153a807862a1a06400e0d817174dbd22059ebd91aff00a15190fdb6335f1d4d7f983c25db4a98c91a27f6725bee64883d73c9fb4e66a42819f24a7d8466c5771c4589fb0fa1689ce552d0b34a3057d2725aa50aae5cdfea0490c3d32e97378709e427f3bdbf07e6241712c0b6db544551571393b532126bc404e0338c50c1f1eaec8cac4004052968dd33273c5fb8554cf18c12fd96fa11bac7263b4834234c11d72e914110eefb262db853453e1286d7c274f4d1ebe5905b400c46cca1a9fa212c842f3b5603cfee7128d16be6e16e844264d5ecb1635c480818e2a439e4809b6533e29944021c145ffb2e1afaa350d4e9e222a877f1d9f397d28b496d5183d319a457d57b58645a32b5d5ccd9e6e23c3173679fb02f9dd077afcd26ac7f588aa25c0b8a6c753d02a1cf450c151aa74ca17f113cea6b1c71102714e677dc830497d15a2287f70ab015ce18532cbcf468c28bbc0a9742ea5809cefef36fe7a7e3829ae0386e4c61e52738ac3c915c6e231d1fc47347256bf7bd1de7c7f52f1ba9cb1f1a368ff3b7042e759d22e367890e09b1c7116aa125c2b27a7bee982172ca09e484a74d6b8ebfb42b4790836cc98c10c8306f8244bc5b828b07d1d95d31c69771abf557426d5a50b0581ff1ea941fdae99ce81e7e743495c6280c3930cd122c4cfcbb1de6b7767cbb3b3bcf5f9d4bc09c7905afbd01c064a25918285ac94f10ecf36311e71196a0926d5e7c3a39925a373162a68ec98187a627602729aadfedb81c87c3a1e03d64dc6af28918fd8610607269a362501a7747ff8ec62be6472b64f483b3d5c7cd220fb0b2566a5d997bae989526e619ddac1e6dfe85d00007524a080152c12cd86082daf894acde3f0458307f9188ab6dae8fdf39d6c48cb2eafdd36b311283f1b8fc464fa45ef4094313b67373a8792cf712efcb4967e0bc6de6c33bcf38518b93d28f22060f336aa067b73b6de4079e0e5e0c1d4e48a096539b63fd9db13a08799c121a5a2c10e5b4aaaf11b0b9db535ca7a0ba65c540d31492321b2d0b921ae2bf8b92e144110ce872faa11ca868df7ab66a2d209c55f55951ca3eeda5fe1567b338166bc5c832c4474663e22e3484e0d0b4efff0c346f7a6078b3501ed29a512db42f2a4f8b19c0ae0ec4a1b9c2f617ad1d7d51b370c40024da2314e4c41c67759c47dd4fee04760db06debd998a59792004fe910af7573357b088c86271df3213cfad52575954cecd7aa211c3a15d93609e1f5a225064c18c7de278180119cc732b2a28e964ecdc1e113d1e00bb964ef96de37f695e913253d0e86457389bcce09f9d5e9e483713379358ec39212c355439ef07c66b04101673419605608ebac2f5aefa5d4f5cfa7ec89a84571c46cdd7caeefa20bde5e23c2c96160bbf191f80f304060dbf841a5c78aced40f20ca0ebe88660619d5d312dc48fea529d65818462488998e1d6f93a6a352fdeeba735f95a5f42705394845003d31cc144996b3509218ce5fd7b217e67de5317513f1467e922a73527b1630fb00bb43ffbde62fbb23816dc5b9a1a92374f60d56afbc69e5d77989861dc56d195deb8b6095cf03e23342f65425c6adca22f5eff8004d2077e051c81483fe6ff78f5320db73a9c6625bfdf68fce99bc67026567dd982c00913753bd825ff9aff22f7292c4da1eedb807e2fcdcf6835b668de4f37bd9c190be66efd854047fb3a5b8da6fb13b86f06fc1b267c0401be1653fc5114767a6377bd996b70e13d9018ea5fb06150a8a64d613ecd5ee2dec04df92b64ff4b4529b4619e8c825009e10299144f494e981c19768e2a59b324c2c3221191dd8325f02a9a2469a1d4d4765e2e558b9853b157d304b44856bdfe4de09656df97674142412fd308b6b7c6d89572c96d37a81ae1e1d3572c3e4a92e80c1ca357153fc2a661ea5573aa3f068e102d19fc0e95fc42adab20e0f7a0081baf7ea0ff3f53cfa5f2914fb263b5bd203627ec4105617f009d54b76b6b07896e3182f4e1fdea91c65ced6ccbcb6112176e27eb420556caa51b95c3d580c93d6afaf14705384d309107c651c8c98a2ef922f7be09f4ba06b98e38ed26202d4b9672924371d6c5d38e5ce4a9b044793851b95d0c9ebcd65ac25e03dc67327adb7a022f8e2fc198a246c10e1a8c267759a49b227d0743f2ef4af2bf38a09ef9179f108ed047df0ec6409f0e4c6356cab97c2f0eba4e7356edd8b434abd74cf2258c0678b2bf1a7167045faae93dbcba7f60dfe86b7b32497bf50b29db1624ac2dc94ab5dba15907ac1b67ab96234091d4d9137a38946a14c1275f6770640d7158df460df5f5841abe0c21d8fd1bca95df6e318ac7a30200e8f919b713caf287cd556048a5c182f0c55ff3fbc6304210c9a7a2e1c3afe25318f09fdf6c4eb837b5b3022d950f3dd1e89d47da99679048b90cce47d2c1f25578965aa722fb48c9388293866de69c074f4d843f1cca9c86d8261d839ce01a503172b2d9ded68a857d497b19d44f87d923f712f0fa604e114d7cf85fca14428a6a0c103b47e966b3ad9021af7350e68e8c2359b5d9318f334196c5a10465524c4cedda97063bc59aefe0ef0ff2f4a16fb15ac15862464532dcfded12f1dc32deff9c7ab3c2d48d836cbf4c03f840a1c4bb23b29f3ca65a574538d97a3a80ca88aaa1565724bda8b64cb8a0512d3eccd5d10794540f59b4eaa5cff0a1875a02927685d84dd3fdfc7bb65054c23bf50be91c8dcf3d85683d33234b994e7f70c3438acf665c789c731ad211ce1ec76d4749c43dcb2344dadb79e8333e4bcaccf3e50f076a4bbba3f4dac982772d7caf663ef09ff0cdf4b778061c0f465e11767cbe2cb64be343196605c32bb7b6ffc2520ec83ca7053e08fb20e5681950fc7444170a6371ecb906b3e1e795f783fbaef101759b5691cad44c106ec41fe832d03537d096442ec472c2b75e479d5a167c2d611f44673a3f23531eddaec0f05c923668a7d72c700d667bce50c91304f833ec74edc040c845fdf8915bab642e21c02ef0b7af917c3ce9c670e4a4bf494adb188408964b03866b23b30f45736c2a64071827a5db18f8048be3425f0bf0b47d98d7984eeeb3a774bcca220355701e85a8282042720de9beb27093825ec3dd1f54b5c471939f5321ab1fbb6d7202a62cf968c90cbe22b81f235fff961f886ecc3468b486a1903079d8fa030c32ec6a60e21f4b8d28210d2fc7f8ad22b8080e8920379115804ee6842ba22267fef511294b97cd4d16d08ff78483c6ae900b6660006983a697a11e4a8d613f073ce4448f1c1678d3f1f9e77e434771c20f591e58bc47b1c2505180d4e47d82725682aa9b3de573a72262bdcced8dd7e79db9dd793c1944f01225b3291a3f1432b297ec54964ce7510fd4b8ea689d1fa4a2f44bcc692763b946e6605115ef1dcfbaebb1c31092fc59221680df9ebf728286d2115829b837a4525c2e55bfd5c4cfd445a2ee9101d948c2f2beb3753bf808b11bd7266515e8399f4fc63cfe3932bc6a6e66df02dfa7a6562e1a6fd758d8be8c97443c06879d009587cf0ebc628f1de32fa69e4c758df948933b1aab5f3b2c7d0e01a4f2547e829ccbf2d3e099027ba74e0a31550bb4cbffe9cabcd99848dbed47b66613c4b4461de5d7945226b35d1e9339a207e944a3e3f86e5e484b2852450b0a884f2167d47e9b2559fa51cb4bb0c8dcf94956640a5c87d006e2c00219eb22a51490b1beb529b68428c06272cdc5b39a3c029c3c87d26097bf8e3fffb949543011bdbee27084fe9e0b8ca0cf6cc51e1c751c01f5a2ad496c8e340f47b9c5695388be8efb8df93a180946540baf18cf0aab7eceb7e3550bf77dbd7901a1c928b5807b693095ef349d2ad6c64d1f268e0be7104aa9d3336edf930fc556fabc5aff01db99a90fceb2d377243ebe425725c730babff4f9ad39cdd8133b6d4a06c7d814c9658f83fd7d62f7180486a3145ae78e6473bfdd2c366855b1226f1c0f37e9bf2a140a79e65df3b39b5fccc7c3f71309f6af3308192b5911d2c483f53e72da0ce7ef417af0192eb19399b838cec2f2aa58bb7801dae147145c67d25ffd3f5203e83e5d0d837bbafbeaf8747d9b842d7873dfb550d920db67395483e1b468f9ab154985bb0749409986c5251e94046b7b2d63137e7cafbd114fd3bf04c9b3780c5657e20be44c67915147f6a31f0c55bc6f8eb9122d58941a882bae4ea5e9772e94b19c85834cd8ed31c80d95a662934222aacf9453e1088bcaa67749b0d29d1ab5a0dab14a113ab5108e927c90cfcc162cfd7f8d5513c36bff8a437d523593d7a36ac418a26236efd5e2aede451ba83e77d0ef849db66ac20e203971f4db016d44578341f40874a5680c88452d0ed1c4e96a47019292a899dfb082adfc8d8de582b13fb4a6cc9bdeb1544a38b070ecaf6c15b08c9c6e22f75a8245b9d411e24644be1ffa227453a3970219403608a408e71752ae231483e467ddab1ee22fa69871c84c9acec846fb055d20e4279f9ed641b954ee8f4a7168ee0bdc6390b182e3f315ee1c14921aeee0ae84acebfd85216443ded549d9948cd752ff10455d1d30b1ed2c095b987784113d7020eaeafff237fd1aeab78996570afb3cad68fd2086939a2ee80aa306c680520ac98c2eb450a22e2eb542211cd26f4dbcc3635732ee81631d418b7b6ebb15357a2e3a904e438d2042be526bd103ef92a7d99d34fc6f638f219d45e8586bb92de9d75ada72d3e0197f8e502d5af4701025787e5b251121676182a0b26cdf52847f4d56d2ca0983620caca23062addb115c276e9656dca433067b04a0511ec98063179441feec5f4312a0b23c8f3419db776ed5ab37d9d23b370dd97cb030076abebd7eeeb6845a03b9f3e719899311b69cd51b636f0f94c61dc2870c301ef38ab7c87aa399da5dec282ca88ef9d2aaecf4e5a886a787d31ddf2176197aef742777bff2264ff5514488d35f6487f7cec4a625e5dc86477589a7b20f6a35ab748a252a4d4081de1c5400707363da0c6485da1e382cb55963509afeb8c90a5bdafcea92f3b9d79ba864b98c4c539b185378ba560a40dbc486bae28cdafca1068ec3ee7d4c59f836dbbcdbae52fc712485e56b57c4dea191c511a7e4decca1b477275876c0e88db69fa38d5fed260537e11418a9cccfafc7079b108f2a01b36d7f725002b72d3d24db63f7268598ff594f4ce7d28cdbac6e36a2461428637e3a8dea00ab99f1b1877742428b821b0692b7d6005c6ac9418f396c71fb3fb9ab228ad98ef8cefc90e75a8996164c77c2eb01fa8ccfd0631531f841b7cdd6cde12e5c852271be16834d6e7f1a504b74dc6b1600b3b1256fd15c5b6b43115765c965ec37e59fd10732bf9a6ef7c0e7d9fc1bdc309c8cd1b61c184a313b4f294a0acf2236fe0970964448c69c54ef8970c9013cd270e73c009f6eaddac810b4444d74e6cc9638018d62edda525a6397ffec271e2d564bce1501656caf11da601b3a5d213fd5b2eeb233b8bfd831a67b4f0c956b8a773fefbceb066ff83f3895967891b9d8e2019dce60b05b7600409b28d2520931fb4b07bf05589efd79afbb7eb01898dfe6ac78a890dd9774efb76152e666e26a09f77ee4f663e205e8c93a9b89fba49c083ce50a6c485c1928953494efd9dd7dc9ccbcf4672f2159b30d7ab5ac41c75671384eba9bf890afd0617bb796b3e1b1645129b6ffc545420403e494c0f2e85748281a81c6f51c7c12a4a08482fdd850020f2df4672c34060034deff6e17efe5b695b1279548e9c914e50ac05bbfa9a0ca8c3174466cd8edd127d1c05eb6c349e3067b74aff8deddfeac2136cbff3ceae5529bff458e17419f64269d37da4ecbf603e030bd0de202f9824dad78c779757be9d55d0c98db489174435fa28877b2181448226690df7e2dedf6ec0a1e488bb3d7455642950b4cd0de92ce46ca264870c21b135388bc9ac17784bc2a0d9172b5a655b28f8a8f93832a79b1cca743d32794c1cb2cfd619edda85fe5809a3c73aadd6c389d814f65d3e162d1db28b79c6413a21298f8b6d2ab07ef2fb3d031d6ba05f1b11181320ce88ab4f71c5368eb50c526b03f7fa27d501c9d626cb458e30ca54ee6969322cfe9add7e936323f081334b66cca9d10e9f76fcf45525099e2c945ea9cd2be07f5ffd33370d2cd243ad4e8b80fe157e55cc689eea10eabdd1a186e2d9e6d0ac7c751833053982a00cabb6896612bb70a1fe5f1633e47cd0ad422a67fb3107f4b8d0845365c2f53b900f13cb62a51c4677a7d2f95e4a6bf0a580e7848a263267b8f4ba1ad51405039249eec8232fa86e4b4b6cceb5bd288c3ee0569f0340d063f144320fdfb7227667ee9006041cf066a17b74fcf6a74301fde2f03df31b727806617498e226ee22a56fb01ba1e784bdfe9a940a8db34c0056fb3cd7e61089224cbf0a4 +MD = b76df4ff82e33617c6a25472e7ce07bd7c8323d90f15b8da1fcb51c04f979dd072f08622192d007b31370a8e15d2f1d751ba210b4c402409dd3b74b2cb90edc7 + +Len = 42624 +Msg = 5b6173817957daaa25234c15d963b988981de14cd40e5e27903ee58ac2d8c90afb39c0144947eadd5d040f99e96329ed4c5a22a67138deabf4397c308757d92d9564560f2556dcad00e21d7d164c1c081e7def9b7d56c340694422ec4e1471fa7009bdd8d32cb70158e4fc2b28c69ac155aed093bf0f16cd35875d25ddb79859d6517bd91b7283c0ab333609e77bac003b174ef6000cde39a12bb844fde757320d641a79c7d048d442f653811a1059ad16ddf02d08f4236ef558b8af764cb56d5e69221f9ded0f246556d9fa8b30aab02f2b3f9e9f70ee537935e7cf108fbaf3118819356772df985b7b52dc0081a5f1ce27c2b28d2846d075ebcc0c93586eaa6eeb8922eb06c1186e8c458e42ab54593bf901d199c333cd30a1efcfc64eda7bbdb7f94ef252bc8ce4b13b7a1957bfcebdca84648deabd32f380d97e721a054e4517f22143fed8dc0614bb074c2ded399dc2d4d12f44ede706b011835f64f70c4f31fb03a8b11df11cda4d9da5d4e68324087882487acad5b1581f4455d3b99b232d9c5ce71394b16e2e79a4eaf5b29297c5f8dd9f335ce23ca18c2b1c0f52e509345d94c9cd44054336c884e4375a504120dd4cfe18acf7eeb2df9e7bc1cad1496ec713168736d5e51ac1a65b43e5a46942ad362bd0c1fd10b4a0073c912a462a02614196e8700a9a03ed7017c05b755652f303ef04a4daeace58cd2526792ef518b3871099fc8aab19d24bdf57c4ad5179341a125c5b78c4298e58ff29bf70f3da464b4e42e23f6083faa07cb02933a2dffae55c7ff0bde6ecca10914104f4696ea1f6168a2810006aedd5b77291ef91abcccb95166a939740945da51751a2a2fc4df13119d8e4d5f53154564505c96606333484c8d2e1214d75a70152ad62e5add0a36798f9a5254d508321d38ca96817b688f23e2f8fca3af4566e9b211c79a8b4737faf943a3999d2cce2c12e77e007dd30a7208984db309ad2b49ab4b8a71680cb4305b08b59023d965fbaf31b16fd30926b15e9aa9b56ed839bf66e1eb71fbd1279435580ccb01b486164e47d5222381706c556e854d577d2eb585736f1eaf2afea108b01dccaf34cb0670886dc9d7c273fd9d8264cd4c0256b6778e99ca0a70c5e155bf6cf784e09146c681cfb97842bdff9774ccd7c4ee5e4ccd81d026865909dfacc47eee4b3e7551b0a28f938d989afcc3c431df4ab7b1f2e7fbb696bb2a36e66e7dc8133aa4e3a1bf8931ca702ab74fb2ef184655f4de13676ac1ad119ad9a01b39dd090bba68d153a43ad0d87f7f92d553f4cf7f0c5f58cc4d65dc11f16ea74387322216f5714b0d622f391f1d7050bba15bbd1e84a22d771237a634e4723677e44c10e4dc99895d617385cc7b25f3d645c1b1ccf432fbf867ab8e02da610818efaf380de65e06b4109c29591f0d06a5bfab2ff2b1ae5ee0ac26060449c786b6f7b019fa891b6db20e2db65d8f8203aa8d9c9a386360c0905e5ba0a1c9222cd29b1339235b6e08d7a89c9f42234175752dfa73067ff6cbb80ca0e073ceed74dc582d0820d3d272857e6d469fa0b7c6661f696cd57ddcca98159a47f2c195f964ad82296b68c5355c0e146ede5e51912de05dca2dd38f57e137ac399757c824ec09a6ff7ba0d2cbbbb6265a76d2ab400d0f4c2d88178b0e03b15b57d9e7e081e2fb000cca127790353517bc0194316db3fab9097cb05c3780312c0542f86b8ada0011d3ef14104d48d96ce5f7196074934118e064448f6ed72592d46b1fe5ba41a770d7534c593d77319a6adfe8c4ff2b510044e73a713e790d3447aab4db9aaa6f91a98f11aefb30cc34dd2478eb580cd8f3996e08be01066664c19a5db9a684b708acfb1a8e011607a0af5d502029881777607145d270dfbfb8f4a2710c68511c2a644fbd72e997827243e2e51fee4dbae03c99683ae89587b5336ba5404aa00d8b61c570fa0f25bb3e4d6dce4710ce21d2803ee673e2a83cce104e50f1e7f219a02824db8ffc5110492e5672223b89eac2ddea56f9e9886d881dd31a9daab7bf0d19c663a13b9a30476925572dc8f184459814205987c69857ae9258a01d716c36d9229fda4771899d706303e633957cbf5144d90f27e32bd164f491a5baafbf91c8d1f6a7aa678adff697fed815f632b49c14f787545eb679b3825c2afcd317c27b5cee75cefcc2734e2cbe7fea9454a9daecf24e97a9b6b52cb42e8c7e7c032d631c0dd14fa1befbf999b93a2be0412390355fe16c44bb1833127f669a1b105702a7db5686e6dede8b7775b3447a86964e9696dc3cc022076915c525ea30bdc3fc78bd521f4ca09f664e7a67eeb3a39688894d9ba3ac8a272146a666d94d69e893174a707333b2b33c774dd4653c1698b075daac1b5a51ec1e2d898601d1b35978fc091e1d4c73be509a566552645e1168e4d49a1e5a27da9222e52fee5e188b10af5fd797e7721555103aa730dcf895147ea1c2273c6a573fdf5fb0e95307f1eca9d5295da52c5cbc8151167b065498358bf8c0b071a7f669ab4fa59d4100228f63ff8fe8f600f8e966304fbb61209f5e951022648a4f3cc22f3b9a74b8af915b664577c46a9e8e8e275e9f5c8dbb1f0232ae439df6eeaebbc3a9fbfa1a54c2e3493d7d6a736361fd4d4291e8dca29ba2dd19b0d73804a0d9112146b7f6ae4bb9554e0d6590ee37c96072d3eaee6599b30ce906aade0fd78c80280718ddfa704042fda420539d5474d965c1dd23729dd54aa2a173598e9748a934c9a720e7e50a7ad2de352c0f6c8240a1d82a2c682c7c0ecd0deb2b0f84bff4bdeaed7ff51e9a6554181e9aa2c4741e9da37c59a4aa09d1cec85cd2e11434eb59f7563b909152ab07ee471ff610bccbefa02e4bb6bb112c2e5d52d1c1ba6a056f7b7bf448c1d5b444dd393c77c5dee0ee5aca732cb42486723967a8100ba1cb84f3b92a8c449609c1417f70b6585ce6302fdb506549a67920e905e66a7c8eb620dca85ed98e0623d3c7844d304cb9644bbbcb73fec0396cc0e8a7fd2f81734dc9b2c401cef2c88b12ebe232541766b3a77b354e67dc3fd9c8b4e85cddbf120af5f296a3db373fb7f51b13b0b04d077cc9fa83502ee23c58aeda21960389cd762c388ab56cbfee22f0c19358c351fe2829964029b276b161e9c4fe391f761807d2d13ad711f156649c9bdb8b0bcacd4e4ceaf62ba10e317e1001d8a6a008843880790159597ffaf56ef666d8081bf747ba650fd6591d3f15a81d3b7f33b59490cb8c88ecb1b06e4dee6dcfb036ca0eace8a117ca79282cb12883b1133911cba91a883be1a93702d6715e70c4266965f65e0b88785fb39ce8f7b1b4132e818be9d3f894d8ae786b37be64f454355eafbc9110ec509b440225bc43ceef82a967bbae5a1e423ff909ea1c0db501023e5e58186dbdf3aa5dfeefec966c18e3dde1c6f02952beec3d616620b55d5b1b6cc4615a6e77c20b75e5afef46061fb0b38c744fe2bc9f21c9f424430837b2cf8ea450ed8f945c4d00490e5acf478477aeca5c2412c6737f0354ad1952deb8bcf860bf386dbe22dd91ab53a58e8ab7b7441dd70335facc629de5791a31dcdd625e7bf4c1753fa63bbe8f4866205a49de08097d73d8e41a6ade3910bc21ac813e1568aa2f32a356f5cb6735031130bb8a5f2fd7dc57fcddf668c1fc75beb844ceb1b947b82283d58a6cc5a202dda87d1addc34ec35fbf97a3a20294dd459aa882b7e04622b14b7268071d27ebe21c1f2df8967acf3ca6d7e13e9d926972ce2d089c702dc59b74ee2d1ef03f34cb261222340bc4369b4d0f3d82d55d90a2cd32bed3db87371daa893838c14063f530e6a61485b3bfd81cae27135c5ee972026a13f294caedc436d417d912d40ffcd70d081ea6d1c19f80552c54952eda5d2823a67d3e61502bb46f4a7467828f4e8305f6c6e1a6c24e3264bbeb0245f9b0890ff4d83af314b09dbb5e9f21a46876bf61c081c89b58608d8d543b462cce38bf8f7d981ce8920f7d38b2bde3e221e2069113e3be37ea62fc1f93d9b34bae423612af4146ca6e74bd67f55530a4523cd3245f7154f50ee2289be92aec3b3069773a18486b10e0ace8e984f97a636fc3bf9c019f0f6b2c5a8d92d2b35373eb1b1d763721dc44bef48a0de01f23b7d1332658b8d15002c9388594cf078b8e44d373578a722cee50081b75954aef1a3ce7a1ead3ccc9446c18bb025c9be6c2b42f234e90adcf662a34079122e12ef2f97dacd2e0d5dda89b57986c09f517e9ef9aa7dbd8295654c424f8e1079655ea9d51b1a17e70ffb7cd81a8523587714c2d827b8fcf993422a44749f5b1bf06599ef05ac6fb42b1fa892355358de79572148308caf5620b685117854fcfefb2d884f602c3e5bf96d934c949867179f6e42b28fa1dd8182e9e4112254fa08cddefe5cf4418cc4c10ec76cfdfd56ed3081ad7c0aa08e610102cfac3c485d23b09f817e899462d7cb2acc5c39292f4776baeb106a31cae0e72ace4a8cd72e36ea989b1de6ccc77c5ee8288210c6fa0cb73f83d476fb9ae57a886a53dcaa7428c4f2d3a1d492c49bc47065484979bd263c38fd32f8a7055904452a2ff26837e386d5b1731b8e601c43eb0a15aeec827c4dcee291b6dc1422cb88974696ba7f4e7868bef98367a3e72481a05005c750f63128b8587a43ce29187a370092485551e2d4819cd4c695e4af59ae6317b1307c32700af10a843b56324295c6adb9c0d40b4083c4d5523ffc2b9cbcb5ac5328f696cb5dc32e466392630a36feaeb6c9bf3cd54ada4fb4a815e27153ae8c55434ca6633b36b0314fc3f1f7a4125ee677fabdbb60440a93d8181a01fab67e5e8667aa602bb257ee06d22533666885f2d26ed6194d6cce98d8ee1c7339354b16fb2deaeab69fea2590a847e6046aeb81e201cf1797b8636baf7d30f09893bb27a987ad276265327df62b9f37067e573cb09cefdfc89290b365af9da0a0389636985d3d42ba6cf79f3f45744ff50e92ca43287f9667611e18036badaad88da4eed198e061431d003373dd1056598165d5a38bc767fd8dd6449098a637c8f8adf45b1edfad87de17e09bdbb973b83f9502d9af0f78117e7ddc1420d16ef9e278f33ed9824d0d18024ebd26b8ce9cb0edfbec7a9ff12b9bde8b98ea7678f2b4ce9183b010695d348a26e4a855908c3c3468e4d6befbd44ec0f722dedd7c3bd47776318ad32b009877101548d7e1114b31f0caaab6be92ffeac8bde44da35dac3b4b505111b97dae91b35aee88e8b245ad3ca5decd61f01425a76ee41015dfa2e2b8e9ec133b5cdda0b8ba82aecef79270f47d594c0c73f6393c3fc66cf949203364024321da268c6bc63eed92ba689a42bf5a057be9a50dee2e3772aa77248df7f8a63e82bd6225bb86ec157cd58ec5eb4545c9a11d0dc10c255ed111b9f751f61bdac5800e980f58a0cee3b347f07c322f458d07d3337b5acbbdc9ebe44ad4f876a8c061f250b20abbec3f81371625e1256339f631a0a1a1c55b437e23a67dc5b117176e931376997f4c122ccd892abecea6b6b45fdb9da9be4128149c91b624732fb2ef1968c3cc96f842fd33d0f192d316ea89866cd53a5c755ef37795e7df64f9792cacd8016ca5f8b93c8e73e424dbbbbebfcedcb31c4701cf63dd3a76bc2d7c556c72ea984157525d3109fb693e8f9e1a9d5eb29d1628ec61aef607cc8476c12cf99626f01351101824c9efeaa697c6e76a5f76fdf2a73ffe1be98451fee6cee8193e1471aa3e3ad15cf9d7ce259a3b0b6ff8b13a766b018df1df396df426ad6f15933d84cec4d67022bf3c7d83410670f452eabc6b1d3af679ffaf892cde66ab35bc288f468beedcbe43a45f88332efc4094a9eb9864f321fb726d0b70b5ff82c0e15dfcdb3c89ff78ae9adcfc18bb999de7762fc7e933f6be5ffb5d865382de002c6531557fb0c09728a35ca69ab62e5173daf0be54025d0cefe2e53661f6a63bc3c7987cfb6a0765d849474f5f26a3a55f5c96464c683e2b49a90d4a8764c2bace0b971759bfbc28e71305bf0f13e0e1d4858927796e816497d83c886cd319c576ba98f040b7c8297d89febe5385cc4df9db3129841b0efffef8d9bab94b95a3e25b02cd595b11b0c0349a14d3855131f7e8f7141578cd44a8904ea615d51d9e3c763d774cb28005db9b4288361a56d4f53441afd38ba67bbd28021529779afca993b1b6c0c4fd6ff4475ce4244dc47f1c4578c3675e82eb64485dce9d3bf206533bc6515e9a713734be52ee4725817a94a5051878f947ddc679c79b18290e0462f5e412cd3bc2a6c28a8a6f44aa760d84dc4e76af62df990b42a8424248d63efe4a73bfb5afda02c7326e2ec6e48b801470bda5b4a330675a2c688cc4a032fb4dc1db21c0ff9f936a3f64f573dca91a6eebb96c2ec4248fdbbe6f4146390b857ae284009432fba3d438d68af399b624b7d5a995c6cba258b88026296f1c4722ab35d624d950d5782ca52bb6ef239be61ab4f7e623c2910c16faf30be850d01b09433a543862145b9b0fcb410f8341a8bd120a28eeb0dbf120b53fb158dd8cb8bb93165a586fa29449fd1ef3fac08fb2c8764a22ce9e674ffb3873e168cc6540e9add3fce37f666b5df78c9459e26c4b64691f9e6c931d70d20bf564c02442fdbd1ada037e9b4828ff857debd3f2c2bdb972f1626f97e59bcbb72f0207ed0a355d619236d3c93012593059c111f6784eee19283880b2a7170ec38782e62fa731f10a625f8a130672907f88debaf976472be62ce647ed4b2dc4b767ae04f30039a29eb4444b81b290cffb720a7700a4f09a6266346b4fb925151c364c0a40fd9497a4efafbd1a1db43c2a7f0df015ea9060143cec95e1da4728785c259f1f868cfaa47a6688e62d26ff9618aecc3f3070a88417d46caa94da265641016c978367f026bf3155edcb2d41c7a3b6b4875ed9983b60b699b2d028363b4da818b0dc6ea3b325dacc38e0132a448aee4ff35c1158c07d58c301777781b1e8e14c727ae93bd2142794ce521ee195331b468e1260119bd88293a06f102f3f7a75b0e64320df0cf4e256b70b978f420808405d6810eb55d7feb096a23b676e6b2deb13205ab8e82ed1b9fcf1c65bd36f7ce66a47680d75e493c4ebf64051c423cfa602f9e1eeee28bd66a4eef26ed1d23ee0bc95afa083660874a7556616cb0a2388b9b7fba8a64b6d04b7e964efc49817d55b3c2ecb08c5266ad3a6f6de0b88f33a4240f10e99ffab3c3ec965073229cf6d50222db78b68b54e77d138d00b060563a57e0b4a4ead3db63f783bdea5ed2e51a231f38b94b97dc799bd741553ea22ace85890814dbbec19c5dd2e9ba44cfc29594fca70ab1f457e4354f2d46b9e12bd15b5cade1f93800dd5e08867b8ae009c7e66f88e5902d71b7c7df936dc889d3d337fff864b9bc13c79698f69677b0353175dc60c25caf9454d20d3632c128bd54b9d78a4593d774bb8608dca3c1bcdf62f1c7c1398e074a4bc26c682e6a3a32c64f77d5ed2e069e59bad +MD = 412a981183af19036e0016492e6c4f931f998e13dff5714b16e2b58216d7611ea50ddaf4da5ba2853dbd1d60df56230297f7ea55afc1bbdd2b7ad51a4366433e + +Len = 43208 +Msg = a2b2053132d667eba8c0fd6ba1b1d813404dd8cf15f3b803444a4ac1e31c0440a368bc89b3b2b074e19ec9d303bd21ed95a7c22ea34ab11cea812b8d3ae92e171ef03bc9bf2e5b1806f9601c01336dfd8867b8a820148fc61f4999ee11725f195b720a571ef26ec15ef848af64bbc42b60b643a553fb5ae82cca1e4c31629f2da117b29d98a5f45632c40bf2f3fc2f5f67bbea8d05a51b69592b410f635ff63b3a06ba01f4eff2bfca84304f789fb581e39f35c8febada33ee958b9f6d116d2c6c68aaedfc7a72e46e61402db94b5f791d89acbe06e39d2d332f826517220be680650bc876eb7bad6683c2f480a9342f5da2d8d7e5c86e3f7022b0c72b37d952be2464fa2bed1602f9113e0b93613c8beb11407c62105451ec959d2e6ffbdd586dce3debe3264acb71333ddcba1a7f760eff6c134763584bf0b1cf03ad1321e1d68a1e03663e1ff0141346cebf7c06d60f94e5065a6b8015c49dd0acab2aadd3428190aa7bde9d592bd6e1496931d89536f732bb64cdd698b082289332e68718f7db1a48ecaecdeefda796b57fdefd99cb51db9c2c3462bafc885d1e09efb9963ebf45457f55b698d4acee7bca2e7ecc16c9690f7c462b64efd6f9b7faee4b375e559809fd7c603df60d700112c662145f88637e1aab397fd29584c5cb8b43e1a1c69bfc2dcad4c6acf3a5b01e51b15bedb65150cf0c94f1edec84b0456dab7e4d3ad686d9e8191c3e8613f0b8757388097abbed631145a4880483df303d8af5abd8d210c77d3725f4ed442aa6dab183fbfc2abd9e61537eeb0508bc54a2e92e03c91600c03237cb1651c0c4b12973340b65262848a5c6695e169cae7845cf119d352ac08caf20f5ebd90d28a10abf8381dd35962884a64c285fc61d66cd4486c04397b6f39bfa8bbcaeb5bc3e249f58a48be16f07a7fc0e92090e71e4e35175b51be44cbd9ece74d1f740ea50201a9bbd98b11badb5cf99e43cfc13bb2ffcc6c5e699e9b161a39a72dd34199ea53834142b2d02e25728d4661f1969b3584f6135cc3ff4998c81e4e7881bb0f15c020bf16dde8c6e350ea75fdbecdc9307522e50f45dd73bc7703a771f7c1911ed7f089c864b2218f689fa1997fdd525e30c165d877bf95fb879846ccae0bbc6ffb8145c9dfd2aa943a1b5da7cd5ba2f9585ffa3ac21c2cf0aa3aa0cb3cefed83ab3157bda7a0eeac35fc1ebb2fbf47ac4c5d36b8cd89a5263f795a0ffce4a0e487af53f664c34a01fca049460f7ecce19d578fd4e27e9af6c7b2b6fd9680731ce159af169fa0696feeb671caf5209f23cbcd8a11c9717afcc3955c367259d09778aeed80a0dea9309c8d2cdc693b2b0d482d99f1baf8c1a2b39fce2d18c755ee8e3d73e720c4a5ee86b2eedce4251ce8930653e75f7b1b8338206154026f5f8cc283f69c97f8dc042dc61c5eee84d1505cc63c852f7ec508a1b5da4dc79869fc95f0da236ef1b81bf21559d4f0c0e4ded61ba83d938a6acd80fe7d7cc0f911a87922931e1e35c690844f0bd1836fc3eecf454b833414892c6638ef639707c32afc87a5ef3e3b83fc54d1c6c72ee7fafa88f18ae879a38cbfb2138484a22b0afe90aea71947797cd9d42c0f385bdff6ac939eeaffecce01f2051cf1628af9659dc5f60b1eb2861d9392dc49a782ae435f8fbbe01c05ea755ddf93aa8fa9f95f731cfc568217d7e2c41150fa973be96d9dddc70edf4d8f437d9236146e97814539062ffdc5dff568e5c038b68a0ff7d1e1fe4edbbc3c3318bbdd62c381dc47d339f21f755c83451c732fe1f1f257701cb661b1bb354a5c51a301b83c5bd0a37600913951d8aa6d89e6c0eb3152aae8baa5c8ae31dd00918acdbf94e37f1d3aaa27440c27bcadd51dcb23b3093d82b8181a7382d405e749209667875d4e3a63ec089b164b6b0602649ab8e7ce156764d19ef2de26527709bf878a0e0e5b80b5b84ef6d641766b7bdad000e8047cd17553add72e8d452849b42b97a78b19b8a69b44e7cabe6116a80d059c4240d659603ab180e29d50839faafd30d2382b2acd01950e7206bdc01d57a5cb6517a457cbe3649098cb0711520076b61ca9e25f8f87b9bb5aaeded052672b4eeedd79651eda1186cf8acb4a275122c7f564e1df74aa2d7ee33b66cfeda810774e16c7f9bfab52c3e5712fa686298bb6eaddac22f2c55ad9ba20c8272596ffe4e168129e44c3a2e87902a6aee4d60c336b98a3b2a075ec4c3df3857eb0b044086735ebcb34bf8c54f8b3c2dbc9f33eae060a6b1704483c66ed18112f058077624df4b5f915fb79a9f30906a5ac1d9d8738c754b87498d58a46231db0aa842472e448f3a05f03e557e676e4a51191a36f7244032f98043246e798fdcbf637b5cae8973769766569df5181df52711beac75104f8d4e4f6fd2d3fee23a9af17b5cab963f3bcf29c71a0b2be69267108ce1f338ea850c20d70adcda732020ba0af02e533bb036a15975c8881149967d4d7e7c845942bd5a447390f38ab4db27efc03ea8aefe5337d3563417e6443ec2c92a15dce3ebe8657fb5f7326e1e529ef473e37de24cae51ff6458c1aca8e646c88ec828d2a816a94d79197f69870d88dfb125ba1dc3d059a3483b6cada0177112529c506ca3ce8e7967ffc3c117954e79240d47a88b40b588aae5012f5158ab6e1d9a3cfa01987cc926b0e4bff571568a72a20ccbcb86cf76305f697be6315ca697c8d4c3edfcdb075f34ccab4a290ada43edf1cdac2b0d3585b08ad9852aec80693001118d8313f9b99461cd3d46d13040f4dff855b6d98c4fe04e9057ccc4c53bdaa92a09b48c68ddd78d6cf74f125610c1bc92eeaf9a4437f89cea839e4a3db4ccb5578a18ae1b720537d29fcc37125c5c72e4a19fb725e4ff5b2d3129e7af7d100ee03835e2dc212747455e45a72dcccbe736940d9af7fffd75a28bf303e43eae9a0d3a968e719243a40e5c43ca6f071805d0ef81aa822ffbd191b68607a59eac4326b9c01ca36c643875c04d089fb64bb2f9db834f8e1dff5742dd6a59b84514f072dc3df23a578feac1b3ecc987806ad8fa809cf1e27014effc262563e5dcee893acc937afefdcea23c5ca775ed0e7f5e1b0553f847d13f8109b9418cf60b40f5c6b04d1ab70328482ce406749a07912ca49231cd85e88af5afbf463bb179141e5eb1f03c2c14a6c5da72912e5614a92add51bdd6645cfc333760badae0cf71eb4af7064726d64eff8e2fd10ce8ddce400e687f7cacd69d24e9c327d049b46044d1a917a36df12adf90424d741a0908567effff2724fd76ae0c111485b5d1e7113defa9b7c90e424d27d48dcfb2415f54763fc640957a8ebaea710a61ebce113ad4f246ed02d59c329c0d1a86792cdc223e4f5b2dc7f4ee31c90c90ccb552e3a8dfda75acdfed427437147bff377386a81e58465882149cf9f20a2e2ed9056741a5cfbf5d29ff3cfd401238a4b4bd66cf5e8210278e82a2fcad926cef2090a4ee70f8aa66a8b290b3ff2edadcb7b3827d45f44004b2e5082041ccd377529ba298867dc03024af4880bc91e80e0afde49b1cd75e56b7e5d44ff8e1ea2e37cd6a2530878923659d6c4bbe62eaa4734294122b52f285662b107018f9397d96cf037fb63e8ca7322502fc4eca6905bb2a98c8ba8e85f9855fc36bea3b49ca3948758c60c9512555ef147ab4f1ec99aa5ffaa711b39e19dc29f628b6d0a17ee6e1c9367650600394a2a9af38fefbc80786c29678e8c64f352fb08ec4e0ca02664206633ffd42abb8e6ca82221a1efa9c4af67c36558403561cf9875b924abd811234fd04f67e8389657edbb96cde972f50a0439423609b0896d9fbc40eab16fefa5ceb0d639cf5cec4cda2461dc2078943c7d2da7ae280134559d0487d7477a7a18415a26d246851aebfbf115453b272c974115081931a3fd380ef2d072e4742b0b7630b3c9f44d8c95d1b623a1701b18aaee83d61fad154e55740bbd360ed98cefabd8ff795f02cbdae9c81f7985a10307d3feb41a00e1926e4ab3c0a92d371a4570b78c68cd61533ba2bb5b25e265560e9fea04a0b37573b3119f6d34d6095d9d5350cd20e5d5ad38ab14893efce49c4fb0da5a4c5b6d6cf4670325717fccb167c239443a2edc544251480c3d5b8b404ba54427656f15e88299a38bd7b0fdc0355be5741d1ee1c2f933ea66a984e5ec82fbcbee84452b70ee47d502efe01914767ec9ff321c8283bdd1501afbef70eb7602b6324193fa80a7f03c2d22a3bb08bbb96b2811ce4b1110a83dbbbd11a8e79578a774f5c22fb240013d5d08623017657a5d9144aa87f58226f7ab65921a4b71cc24394966276037194d3519a224eb145ff5cd4327d59b92ec027c7dc731919b5b90f194e67e250d970027cefa15de38d8e83e85ccc08dc35602a16e478b4462c5923060c9906b2418eab7a0c06f7b53538967850fb55683f36cbccf8983fe78989c6845960acd2b0d6157279bae4cf47e7dcae97740506552a5211a13b80a3d23041bbbb249a572e308a8dbf26ecd8ca829eb0b89de35d7d24060c65c941231138dcd2bc4d99eac48450f365b1d779c7f124a63be0b616c10c31e6cfaa480e4d88dff1e443713378bab0cbf3c26c59451cb6b9a9a445d829ca19c664465d0d8f089242ba6eead954baf23df2c374214ceb9c108850594cbc4706d5ae064ac8dea03deac637cc85606c5e73e91bb878e5461dd5634eba198269423b3450d6e6423827149004dedea3b93c926032fd071615832dbf0530e88319141f7e8dc810c3b899e6a13ee98d2587d3c5df700e75e940144226dd8361c840c3a91526e9ed6a08db88804eb539eec06c32ef3db26b66af193c1f3e7a2b58c49803808101263e113523b59a0a8b074a4f011701b091944ad9433390dfef3b8fdb524708d86247b9efdfc98cb02b770fc45be024d18e7bfa9e7de83b78547a87d4c1f322354a8ee950e3438b6ec046f51368d10edd0b23a5ae15c9a70e031c96ca750b36e1851a8aa158abfe0ef27ce6834f72279caf953452315b3d68a329a3079917aea5bcf4822b658a4f566b22c95d394bd8d523d890d2fa286350ddaa95d1539ff1479722bb333366e50fd04085ea4de587520ef49f7697b7828c59a65671cb2c678fbdae1b04eaca2801ccdc046fb4c79ed919f24b86309003e5be25cd2f2b457847d79f8ce5b13b80f305002d3795798333ecd97b49ef3c4c23b52fe25298738c358cfef51db04355ae23b3e8891984a0282eb11708fa42c70ee5cd7d243c3d0b2385d23df510690ffbcffe1dac676f5b7f8782060b792adb6df70686eb3f2b5dd76a234eb5f93516a0b1e7b4e9a9c21e02a155329a957def0a92e3e5f0c9c5ea19e2fa0fa59230d3657079968804065077213182fd75c16dab5f6a837b00941bb3955e680c04e1ac14b4b9a9d1a2c258a7b21fde7b4381bc1905a546d30f1f566b2c57413476d10a7327b1d60bab7ea05afa262e5e2442441c2d9c17421cee040b4fed82631186564c6f68068047c28f57a14e5aec428e6d7b7f56df0e508a8e59a52914e2fd8af66534e61f769c178d68509f4b6ec5ec9f00a2db8480d27a5a1ed712ddf9616554861f340a36d5040253af22e72bd5e542713f33f0e0cb46d2218cb0c6ef659dd679d759b008181256e165de176d9800be97fd67097662775d2c6d0cb70e33bce605055df8338dc7f2da1bdbc47a39c57b3a857db989c0946205222d999cf04aebf15149c9015eae3c067822d49cdebce2227e80e6630c254b75521c52e2c7cd4d0662240db8b04c9d2d25ba3118b06e591691757a4a6fb37f44a5dfcc28decf730ce1f6aba1ae2b7e16c9abc139d66249e066665c8711c5663ac580edb65dd7c7cb75c78b047dd2458a0dfe6e4678201b46a45a746219e3681f57069fd36d6eb00ac7a0952948c95c5199ba1e86c0313511f45aaa22af95edba067ac9c8361a96937f88b1573599293314e7bb42d41c0109fd6de611fd645dd477e353dedf66e12c4488c7d86cc916f8268e2cc3dc69e5f5689b107528d720355549245a90d7fa9ebea7bff216e1896778b6594e01a14b9edcec10975b779ea546b5268773f747b096ed81ee5b69ec49b2672a2e6a4b9acd0269cebfbcca40ecf22d40acad4d312c7462f51462eaa6667ca987a941ef3a4882193335735a6cd103bc5a10696121d8ff0f04ab54ec1f867c855809ab1593d703052540a9af8b1e1e675dfccdbc7d7ee0fb94fd58f5bf715d028594d2460d442d338d29864f0699ed382fb801e5aee4bf2e8e50978feeeec529f693de091056a9ad543931c4430b1836b98c2e641dd342b1dbed394114c75d01944df7e704d41f7b60b5d396ac3b4769e3c07cc23112148b611c659399c2cc92450c4367518736a39be8934ba8f321da969b1286516bdbc40a24430ee5a8bae4f216ed115f37972fec199a6d9ef94e90b8661938e7a44065bd4ffc396040d10084b51b6d96abea263a8f0f84f8167793326ab8615a86ea7562e3b89d7354b6ede12ef6045fadd6916f931b161d1244ecedec188812d982fce0299ec084aa14b3f3cca55d20030377726de6ad75b55ca2d03760357765af032169d72cfd0c915ba0d6500042761ae02b6597d068c768bdc292b9f0f1f11a900ceb8a694440d5ebd29321762ecec3d582c357085e0f0f46ad444b42e8476aae89f6e0fdc30e896e704c3e464bd3a55c5fce4ddbbf56fa4478963db2c42d486280d30172e04055e9624acff8004d6980aacfa2d3f364d0bf0bd0b8c9ed6c5cb6d9cb1450059ce06690d2fd15b703b6464b0e7d7862013ac04e3ae30dcbcc4db17c24421d99ecd3ece22fef24d7be35b82ad3075175f5e04d291be708c614c45b5226b26304f6d58440a7cfadc8468edd306667e69207697184bdeb42470e68bd411b8da9ad838f359284c238f16368bd430ec6bf23017e3147661842b480e2de3249fa78fe5aa907c00cf24ebcdd6b614c154c658ea9c6975a5f96907733d9c70ef922575e45ca02b2888776907b40d034c1205f3dc8eaaaa5f08cb4f6eff67ebb742cce350a9a2f503fa939d5068f12e15b6b3596259172106022369b7be10d23ff4165ec72c395837b7e1ef447ff303d2a5470038a64f884f9829fcda1417b2ce589a5e945ea3c318231ad530339312f780497eabd0a43e701d177f327bed1c06c2b15954bba2d439ee86e5b05e51d9e8ba332b5872c5b23c13a4477d60116c6de503e584bd86fa214cbea7414aafd74ad58c9cbb072491e81e390c076b25226811fa69b0fef0a342f04a807f730d898234be594008314c289f4e236cf798ec89ec1d7c45da507e336b8307a7720b6f238a50d783f08c4f52096c341a8fcd1947c5d593dfea26d9670120b375c229f6a338ecadf34a862a18ff0ba49cbe62372651cb26cba8f44352637c0a46edd9ce85b2da331a80cf5ad1f2c4fb6fedd8c4a9f266cbb581495a7a152d72b74fab454faab20d663dc8501156f0af00a89150473a20e91a2d867d62689d9333820f096562fc9372dbf1b85bce4745fb794c58829b821555e84c2a900044d2380f85696b7e227bace5dbd215bb0146ccca3a5be09922c7155bfae0875ecbb65152af13d67ecc1c80d5f76bd39 +MD = ad5b5c5e83206ae4cdba928f1d2566d815ee7e8c031c6572274675281fa4c08a35066592e9318470242d6bbb5ae481a7aea0fb08207b30612bb0f6d019ef9fb7 + +Len = 43792 +Msg = e8b1b7b0179fb988397ca09cdf2130b386a571c31cd45506c0dc9c50ca4af5a00b3566f556b9ed633ea86865227bb275678f0fda058ecac2452a1c90c9125077cc1e2548abcd7488a4f212c6deaaf82baa91a1530936b45b6ecce33cc5221357b3d5bd5120c49420f3c468661c954afed815f1d530b45cfcc328b9fbc662866749c0f6b7bc849653b18530eee424ef167882c50983f00acbcda76675d5baf0d01548972287f6c248689c33053c3f319a1240e69709d206f013b1b153f9129bb9a0d56a3c8a025f289f7339542ece56b32fb71c26cb4397941eaf633d3b52cd4b70d035aacc91b71adf710a83c1b9a788564f2e5ecf2906df740744daa162cfae0f9fc11755891047affe6d39fde86c420f70e6e91f6e9cf89f231cd3362ae90905acd6292ed4b3d797822b1eeb44ed08e2820a6cc3f89e082769b3cfff926284d85e3b885e58e8f11f650cdb92b3710358ed6392c1b157369243d17706838449121cbaddedfff6bdd010d818fb1e425af819b900237f0eab6a183d7352e3957d3a5019d0e4af276431e9577c2c6ea6364a6ed461f14c0a8e3650c06aeb9cde4bd96121084a52c10ecb5951b02f89e6bfd7557b5b31ff94087f532205da94a7d976b79a2e27cf0de224c98d5c0c594a1c26347896ed80f441cc882beb26b5384f99ba4ce9840e5309c69fd427c9c51976c07491bb2cb77260a559a2c4d7e5d8d6cbd2ffe268f7dbab3945eeb970b49df42b7e8f72f78c568e922d513af60ed09692677ac1db72ecee0321a3bb08101cbff1b9396255e7e7f21c6dfef3891769b679e1862de567cffdae9dbbd59ac0dffe998c59344eb06eb5ca7f72979be8e85e05a8ebce8fbecdfec21ffdae2dac2edaac61b590eacf33fe25cc75cf316998b8c024714de05f2c1ac51132efc9bc517bb19f171c322c7ef6b4bccf435582c0e931bddf52e132347841da223f76d88f0830ad45832daf97c4ffb8479a0e1ba71ce0dcff8498202f41bde295473de831aab2f5076be341c5928e26a67c651c967756e7978c0f0f639cc29153af25d47f88bede277d5dc85285ea6fb493606dd5221a4870114ee819b2d74f231e3784c1cbdcd06b60a22d84c79afc39840af6ac46b46552bc5b9499aa8484cf3c7ae03f9a94339dbcba59a4802634fdfa68a0630bada8053540fa2bad51981db2f6d1411e6f70833bae33f9d7177ec79b845141988c785023050117e3c7f3d628b33d0e7ef4ede68385a2cdf5f344610f65f28f16d93cfc2fb093a4736dfdc245ba0eefe3ac138d3c4790660245ed91ff136c96ac1d5ed1004b971c86cb1fa8b2122a2c751d4a420ffde40d2592e1201397a59b83de45973fddf4c5436abf5117c37b0d5bd1fbcba3ae860a866487d6f2f887e9c2a75916936f94e8d3d147861ad6e7d9be508cf1a2625da54e42497a453ef9c792fd0216a5085ecc5d881d0d665258dac520677cb1215326a5b58ed6b371e27c1b6aa85e1cb03abb0a18abaea13fb55699cbf2347af44fd4b244bfb0e59a2c518475b3b7a16f10fb0208573374a5e69661d997e1a5e23af99e7742d182c1be8ef6a78be9dc4ec8d56ce08b62868dd2e246d0bd4adaf4fadb90d6800133ec807b988698bc74544b917029ae0580fe6382703acb38c03178c2b1eae107a0255a5f939c43f8128a7f77386a28e2090180bd069e2b73ffa19cf8293acead707334840e71f2645df64dcfe92b60c2ca9d11dc318544c3404c4fc41f4eadb94cdff630328b0ec9fea29de0aef5c06c6adaff2718767ef02b3b776dbbafe7f4db6f88ac277400ef9c9658f3ad4eafaa92c030e6e4f941c16775fd3c27e4e526c62dd24014b42f9ee0d964500ec19542ea588d61bc96f5ff9d02ca7988750e17b421bd3321d1029e7172ab3ffad3dbfd19a9fee0c9d6027274ebc56c09ebc98e4e522fcf7855e3b6f96c1408990ee7a3c8bb6caa3240d1e29537d55ccfcd80553cc8115a3ec839b01dcc86f212f922fc9e97bd08205dc817a7eee49305a39a32258b4c1d9eb06b52879ceb468e1cf4cf4444db42bbb350d85319d957d1f67feeb1a4c660be97e365dfe42a4d3400c6e661caaca02accd2ef41be9bf15b4c9651891a696bc60408b0ccaa2b4c2d2cfe079e321a699630b42218e814a9cc30492255f51c85df8042fdf7f8d68ea02806fba3830ce72665603a809c2bc64c27ff2bbc3dc6f73192f91208d5135ab67d448a17c5696003f53cff23e4c89202bb213267fb510ae3c295b8a64acaf796b2227ba3011b1d5468b238a6c7d35317731500fe37a4031d987eb7795de3ae6a4f0698ee3e0966424428afb44e3552b3d7445d28f7a72d099d1dd72a1846c757dd5aa7a1841b83f513082af37fd4d7fc7016108d4542cfcc58d8e06183db8a87e3857163db39bb945cb9720b6499291dc5f4e3d6285d3091511899c5a58b3e22e9efbedd4c4b5748a8a34fa5056c923c5f449caba9e0997e1146cbff863c2d4f770056b6de399f387e2e886968365882c46f04b3ceb352bb1fc83eb72ed79d37162000979aebdb8d66c2e7fe97ddc4167edee397a1bfa3710308ba94a645d7024db78628864a536ee8c7320d9a4b1e2015f801ff2aead4c8466c073ef56c23d7a52dae10ad3c4f048da5323d7766aeca0f242591701d2ce76f5eec5e2336c8dea5ea41f814aa1676dcc4af373818bb3af6cc19f87b41f4f70645339c398a1041d5560687c57df1ed5e8d71a2e5488f985157a3da533c751f9489a29f3e4f4125bddac766c79b289199663f2784de700da92d8ce001f8f488a09102103a6fa4b4e6dc4a3c22ee038917b8e26e1fc1a7c185b69bb18c5bbc59b2c71a9635d18116d7c658b2de5dc9fe60ec231ebddb7cdb6d599af6fc4f14bb5292b4da385d207318feb97004cfc417fa68c8df67133683e9814f5659bb43d6095a96834afbc8f232ee351d9c2e3afd6f96995b24511fe38293847aac8692d15e88893a7493c3bbacfc9461ac6174d747dd6037fc7d7d20bff8ff09fd9a49d5da8255a7bd0d57f70e929de63e50bace08a4e31ef7809965291889ac52deb00903b1c2712d51cdcee117195159e3540a3c55ebb61e40bbd8465be90bb53a0e96647d9841cc486d67abf3d14d060289b26a5740a778a62ba1a12ae9cd2d96ada3824f9ebea3d87eebf78d8a804c95a2ef1b12aa9a0d9a30e9bfeb4f9ac2dad359e78d9d91b9ea4a814a4f0f923384e7e8d6eef137e60513d82a08e41c7defc9e01aa15e61166717522ea0272cc3b7a0c62353dc250acd1d9569e770f865bbd75fa3f1a6d7c3352e862ae899f6051615b08aa9350d81dc934904f2bbd9832744fe0be7409bc73ed744c7902e97008a8ecf9458c2965418c01b838f8c65dd1b5ae7d8e9f3542a6859b48bfeaeb8bcf9524ac8c84c698a6beb346f28ac447e805f3f956186aaf59dfeff009be100424daa4aaf619a2d2bbc5bbb5024e41f6b3c9c31c7b6c2472fc40c4daecf8e18996cdef7cf8c768b40f259d9acebfa9ead3959e2f8506fd0e0c5ccc51c037fa7c9403678b3afa62bd0f72db60de5b6684d5dde7daf9755f010888690d29d7a56dbaff9f6e034f3b4e3b21f79fa7ae2265392722875f33b4dc8f482d5580748cdd6a37198e08125cf810b774bfc12447fc5bf5e0bd1ccea8f0ff307bd37a7b1b3c203e48739000423b3ea7c539a15a61cadcceb504b8a2b5fee6d5e70f6e77cb0a8b79bea76175759803777ba5cebcea412a05e1c6b95c4656c48d0151d2e736e8fa6deea1c30e818f1dab0a7cafc84c0fd25029aba557d48916da3d534e35c927fbaf5afb5b27d090dbc6f436db0921875421eefbf3320b065c41fd7c47000c780da2760c905dfd3dcc3fcb5cc70bf5382dff94602957347f1358e44543c27b39beebd26de91d61f66d89e266fa2d21a2ce5dcc50ce440b23ca936436daf98fed7dfff287ebd2a95b4e49fbedfb094147c3a0f9464894d9c4e0661fd96311d513d93358f30f3a2dccdcd45a4a300cdea79c7dadc92ea62ab30365599572a7c54d3f3a7827d9b079db97dd90143fc44432c7485c51f714987e91f5a4038027eaea3e79d2aeb1b217f81daa2fc480ac3c89b2a57769285c9d981abba1ac221eb07b5585eae04dcb82b2cceeabe39941021d0cf9918738da94901c1bb4e7cf08b090f2c333750469448c240f76f9e01f4f5d34c94d24bf3b27e7048a705efd5265abb4d64ed56c27c7f4c17133500b937ecaa8a8dcda11eac21d62ac466a13983a2c1a139f79eb63a78d03d843be524a1af5f70cf30fd765fd93c4e5b9a1c856b8a2712f97eb08b94da599992a7d8aafae6fae5a124e763924fa99cb3c8e81fa6b9f787eea915aa534eec1387a25eb3093981d34ad1e84d0f2b25fc16198b71fcd939e75ea154793f7b9393a95301a7974efe21135e879c9c14b856cab58fe1358ff31c928df5621f0a550142e348ee6cd078b744f44db802b26b9218c37cd918852f0dd29680ccbca23b459879bbf05065f87d25bac10a08ae4598486bd8c06e63f4a266e47e1fdfec4b48f33ee3150bb5855bfdd96bf878b04e50a2d72dfeffd04bc3959e77c24e8f8ff09d5a47c6646927391678d3eb195f8fa36e2c02fb93753a58a8edf11fd2340f26ddf470692529e6ffb6c0824cb2640f77f395e01ef2facc49e7f8769d3283d2d3fa34e468149ccb9526d9ff810c66d7b67a384ed1e306067e9ae88da43823e0dd3d432d29fa6bdde3aeead2f4ef0eed464b3dd47c3041f2e009e4bf9caabd412eee49d3169e3e25d1951b840b22045b11aecdfa859f5597557c1592ed51f8feac556d5c95cabba94825969c306fef29fdeb104955f9e7fdc63aa29000f57d1d41b9d85210448d732ea480a2ca9c785df4492d485405a22d1c8cb4413b5ef3a9d464b23ceed55a8b6d5b041e41724601dd114c80ea8d2b2e3dba732c075303a74c9c22a39745cbf7eb924799fcb9021c9f8c977780572d08130c06d9cd9d552193aa500e735c87c19291749b653953b724ff34b77c2d4ec485c996d0f304901e90d66505eae237f1489fb1aae3b9e2d953b54bc848d536697a3b4a9ae3505da72b678910649e828df7052650de03568a14f505304a178effdca84bbe034963c34ca7e3b84959119f860cfd14bedd58d24f068979ecbdfe8f9259c0c4bdb74b7adbdc9c8401db8b2eddf95b7eec1090baec31002a958d2d1f8496d2357861bcd4c04fdbfdf4ec9943e4176a17ce64a549d4be92ccac51c4ba9aa7a9979b105fdae348c9a98a54e3e583ad5266cda04088edf566e69bcf6a65bcd36c75908cdc932d0e8e122cda101ca2023bf4528e087d201da500c9d0c82ad2634454be9dda0884eb51c04048c8f0295f4c47c3f4a632568076a39e1b8610c49f58be8d0b013fd2253a3a3064b56a000cade9899bc1af75640255827a4b1f7acfd13a659dfa42fd05730862f77d910f5187620d4b02fa661271a1ddb3bf60dc3bd651ae1c6d19eed321b240c8c86e3f760238b6cb101d12d2ea0c178f8bdad32b9089d05101ca8ed76fc030a13f0776c245f5ebe5952060ec952098d6579645e6266d33015f5fc45983bb9c4889669d7e7920165f360937a79b64c950ca9a1cb5c18240f72fdf77a0852beb864f939df3c5429e029de2814c246010c48df03ee089525dfa185391f59e96852339945c6652e2eb9672b32523579dd6fc48a095afa564f3d1c2c2f9a0f586d2e7ee73c422478865e35c820b745da284bea2b007693e406b45d63497e9b4823a9a1738bc6ecdbd74b004591b875ef780d3432a7e587b6f2b1efcb25317001325035be92b910c0780c7123f3da381253403d415e1c285789d24db42157404bffbeb6390fbd42bf1f1ee2d3d5912eeb30615fd7a18f083e3281e1cefc546e511241ad734137f53002feefd59571ace2960d365600a2a9e3933d666be4bd6ce8e08585ede5bdaabbea28f2b9d1f044910a903b5cfa1b8fe00281262b98f6ce5c00f6da095bb2c5cb2b2985f11991886ef496e94d0c4e1cac36e9bb8e77a50522ea22046611bbf8d64c8d340bcae9dae4ea8dcab695bee2b076d390f50f2c93e60273af84a63d9675d4a0677a644dde8b52e15a2a44f2748568db30ffde020d1df08845d597bc31224a2faacd7441e5dad43e0208986d44a3736d361f52d9e3232abc31e954bc5b5413677865897a934bd4f06cd1fe93d5833d05fad40bf888ae17ac2e207bc26783d7045ad3023c6966eba50526e60aa9bd1c3209ae780290075db4852b5b430849fb72bca67d2bcab47ec83577ed4623a9977ded1f157c8bd75381c16a91c2901ef72f285068bd59ad04d6a83582bae5e135561fa662bace869f807d5ebdd5a17b60b62851335578c9146cc7f034fd62fc8c370bc4fe61eaad983d13781dd0bec7ae9437399ba8ba8133d70f2872622d43f2ad5bfb36f662b4e4142e6750684abc6745df69d01b917dd9b1f85ed9ad97600f356ac9aaecc92509a2187cf3f0c7a1f1478b729f2290077c9a1e03c92453c9484bc2b0c8b980865f638c5956fec810f315b5d4475228c6a2dbeaa7cf5ac4f8247cee312ee11b417bd4d45d1806dea1d33cf91f772eee33d313e8cb5ad57d652a2567db3bf80bfed5729b28a59d5dad2829cfb49d1d32c783ce82df0a18efa8dff1aa0f8e62d506f2c94b2c9e26c7bb4868a42427a1a90a4b5853635b999e3bac5e4f5e74b609026a456ed95037cf54da8600fea560a364806dd4e8addbfb8615c7a248bd761a69928360df6a44b70254ee8094a4bed46ec96b81ef9f549a20a2ca4d4e97077bb511efdb7f4ad2213c2e2e8d9694209ea18cdde4d89e97fc83e9d2cad0bffecf7d4f0739598064906aeca29264f24a8485513178442a1a9538417d959f86d0681ac04604fe99808727170739905d710882ad02a6b2d060f6a6502727db8a00e8260c48c8def49a77f913a8eda924589d3206ce0a951fef93668c6c0c454824b217997bff6b3026d5498924190fe545d51be4f01e7b772aede15cb8bd3d3fa07877ee4c0323caca41a0edf556352eed2298ce255cc654b778bf4799a553def88dbf71558ea932d92f8798893fd95fa3284128ba301656f9c658e39b7f09a4b18466d914fc6be6f7f1763f7c003cf60c389d9b3b52dbfc865936a71a84cf3f5fdf067c06d6dc758b59e5393a7200808ce6168c351f9793d193e108b36124fd57f006d0a7988b5d27bb6d2c40ffa49da9a334721400d9db5028d09ed29eab7d3e89f07d73dbe91c4188767f2bf3999be7128ff374910321a66a9dc01497b32d77ef4be8f7fb86215d5389a858086019c9968176c36ab41538eb9112d5e6ec8c98b28199a081d30affaf2f3e51a89885c5b1a1727ce85d148c2e631db2f6a81915562a160a0960479cfdcfb7b55e936e6ff6687d2d847eae14a58c3728518661725cbdc4a0ecbe55b9b1f39adf94e1322cd75f0d41d9894066d364f5a28207e44428b54be1c63db3da8e235e4cd6228f80d6fda956521d89f74a85dfae029d2fef6c991259007ee073c4e78899aca7c51067ccb7d7789bd94a7d876bc75db682e87ad19e8335e27a1a08b89022831171301c24df41d794ccd4eeb2107aee04abd3e60766dcd118df41cc0f0b93f3d0228466ce7621d998c32b10ce74454dd8091630a301e26c728e6f7153614a79644761da0222f409085ac18614fd92f7d10943ed2cd62052901607bb3e27d +MD = ddf3c1c3c0cab7e3e1967c4666ebcdb19d108971a4f091fb4089c0930b094212ba9c6ce9cfa2ddd7e1b38d3b2d58600a76bc33c7d924dd49b0b54004e2705903 + +Len = 44376 +Msg = 50acdee79b0468d37ea7df8e29511f5b65fb48a38203583d908700ecd211b0296f7af5236b080405d6da97774386f7677c005a0974be701c7d193970bbf719a5d9a72e35fa0ce1b5f3febb57b7ed7bb412c765c89b1cdc3ee48133eef332c1a5f6fb33243258266b3ddbf6376dced0c9901a0fe9dd67c52b2b859771610acfb12e3dacf8fa33fcaf1c38ed1e4d71212e5cbf007324e55269bcee0dfeedc96b51e93740ba39e78b0af8de4b143f1d946ce07ee16e57e0ac82fd833c9f7fb5bf0e8faf9871d9bafa033996b6212b1b510a83215ae35e9efafe580ecd5bff18f06f886e5c25c1f572234726d64ef9b48190ac6e12d9216865633455673b553829fd3c3c33ded9df1af08a5655a2912d4c86c52fb2588785153bf822b3456a5e903e14e0c5a509c21bf46bf0d826dbd1d975352ae1687a3f310d0e3b598324d14dbc7624bb8139e49cb750ba0ae0c0e751e564284812e2dce262dd6800fd6cdb89ffcbcebd7b518fc6c0a27e90da26b6db5cbaf08f5da5a54fc1cd7350ba2bc26c8d7ca7729a3909c197ca02151cf787a0649f4c5d52ace2a1b24622f3c247cf1df0ef7783e6da9ab4c42e0f3fac19a2c8847b025af7dfdbffbdb03f8e1daa4ac5b08e0697671a8cc7cf386cb694764f7a45b6db2f5626d7926b7390ccd43a7b8b53c01b5726e22524414fe323dcf4d6de2db89f84776a208143f7de52ede1a99863ec806b2a1baff0a2da3a2e8a7d7e1dc6e916006091fcf5cea5f0cb73851e13687cfb7a7bab705678433a7ea8f8915f98b2074c1b85b41692e390dd6b102025e8d7552c227cb17c4df1abbc3d4c55cb29793c10b02c8f0b191a8430df69f8f66d65562b2674b98aa84c558f5263138a04a77bf32570d7fdebb3956dd678eead7e8ec51c8f7dd2a912bcffa0ee2412c3aea58d9d8438d2138e148b3c59254973a4ba6baa667e420112a9739719779c9fb0da3ab7d56bca768ca72e446f58536f6551117bb25e52b9307b771bdb44f74693ad49e91ef3054d6dd3462e20f952ca4cbb7d377b074af9f49ad4d43d736cdfdf8884da69b7ccc1b7ff9aa174f08fabde607887c96072ebe76f526b46ed43931ad2b133bd9f66faf495f3467425523ba5a9c913a55111b49060b888ff98c489cef2999b23931d1fabfc19c52781e3a128fc3a8216c2717f77d6d0d26e5d37ea825204bba17b3759659cd4c596ea8906efc2917c259bd872253a60f29d25e3ddbf59ba3b423ffdcfa9ddeceec7498d92836497abd9c48fb521f2318f94d6118b0c6f82c20bc8b7aaff2728eac487376c6b4814b43a26de71f3680b525a59091bf1fc25f806fcad11efe2515e958acfbd2fd8d04250a70cce2402b5e3f69713b6f6686c863ac4262d02762ff5403c9dac587b92fb243063f33b2af9e973777784a41c1c14af096c25bf4b8a55cf84e9626d982387bdaa2909c0479d0dd6e07cac827e00496eb1c522afc92a264949fa07f6994c8f23fba7373cc06af629bc6b5719f7dfce7ea57a4c5859d711b77519c27be5d3bb5f0d25a636ff284c74f28caceff0804ae7ced2ca446158bd20ef8ebb85e480b278c6eb7d366b9fb9bd6a27d48ecfac66b21317c5fb4b76d48c9fa11b9bfe1d1d761040e5c46c96e30e0c84f67efd2bcae65b8f64037df9fb046d9a0a469b70a362d26e06696ad7726ec0eb3b45e3c51d8b9084d0e661a9dc8e41c0af0d2343ed43f4bb07accd280fe66ea3cb6de84208aa993c302c5d4d1f35035c3378fe5ca2215d701116fe52627cfef5cd7e736932495e00ad5bdbaf6cfe9bb6bd0f94836b04f7d44b2e631d123a582969feee034473c7176ffd429569f3f116765b4e82f0f5a931de7c6550c8286487c977c0d8e52dbccb9d99fac8c11beec486e39220d8fb5bcdf1886cb52b4d0b56127051b0be81256260b86b101a7e7807142fc924cc1ff5f2addbe112e4b133e06f7209537676ea25dfe1fd341d25782948c85c57736860e63afc2a309a5cc56b06045089b614f35c439c18fe7117d7704b35b18176de82f1bf73b1d7f657aa40ffae8e192664284fb3712434be5c7b2545fe326a7c89445d64c9ddce9fa9c8a783f82bcc6d6d724558e9899faefd4e8f5dac46d92e728e70538515df3e5a09e7ba6b8f6a3438b788598baf07e70137f8bcc6549734a04974b12fc3d07b73544acb8e22bb22cbe15edfe0fe3411701da68ad4c66d351b5bafa94f4e6afdfa9016dee94d86e030d610126fdfedd553eae2ee5f0320d9ecae6a606e1e756dfaa7941d057695156f80e519c0b8fbdbb185f410ee737bc91a29ec01139bb97278800cae6907ae6a8ec5271d5bf227ca92d62419097e45adadb37fb2c72dfeb57e03c6b99d669a87978f1c45c9f6374afec5ba31388c452cae36699b113c0bde131809672afd211391c50eba912bf305fe3afd7f040544ef2499f3e67930a99440a71fdf97320ab7854f43a33bf825a0991d362cf4510a9e17c465b88771a07f0c984e4a6c6f1f1a7a1504294fc793c6d856ae5f91d85fe08f9e073cc467b8487fd3dfd0321b26e578fe987456ff061dc1cdaa4161030b5d95112097b77ab897a1411a98709de8bf88f449abd807464d5f6b75faee38d5be3005faf4e9136a137bc846cbae5f2d51b0df5df75b491bffb71656b1c0e087ab6960db79e09894651451ac9075c8bc42faa51d7f692c4ddbd3b7948f5d64e7cb470b0c4e2673ff3574c595104b405f3b6e2fd16c8918a388ba3778bb4f2abec7d2eed59c430a732aa40a4773bb2fdce41365c1e54475e7af747c4a5d1e9cd34612f17d8bbdc7b8ecab0a0be04afdfce4f12f341320acdff70a70529f5021f0f110fd4e421e11952491ab287f821387e41076741da723540983fad7a76f20db70d3f88eeaed4fd37a5fd7e879ead7458b7920c72c61430d8ce701239d03035d6a63cc86aab3eb3a951c7591f60ab2fe8233177668d574d4293e6f7caa92313e88c95f7eabf74c921ed06d6c1d6b0d79704641c8f88b1f6f88912b2bf6a61246710c9bbe1441daa3bc83a7c117944e7ffebb8807050baaa750e71d77a8c60e3dcd34668d0e1afd35183e0ad80c0ddfd8d499d379b6de7f4429492daae87b8dea464aaa35c1081d0fd90880f8235f264c99e80968348b040ebdbe430be04bf71682544efc5495a2faa8eaf16a84118da3f5b0141aa69aa3cdb14e47e1b5c1b489295d3a2bf049f4be2deb437758ab7aa492fadbd83593c348b001217592622c0be46a5609bcab7b230f135f65c7b6571815cd46e909ffcb4860e0b90f9db8c8645b858ae0e143a0f1f76a2d7cf8b98bc729323d974966259569f2f7f6fe4aee5b35b5bef68699c9ef8cf99506143c7e797430a8281e4e38f77440c474dea007ba1a03da95d43660e677c7804942c798f69ecf6fe5af416c3629d006cf65437c47b475c603f3a1cb9e5fdcd48eabe3410550177b1625c629192faca750babab3cba8166a880a6274dfed417b1d7617e1703211b203a766d7692fdc8d3f068d160da1ebae6e4102c171c9fd5b3eccece0fdebc4fdf35ea7deeed066a2e470450cd745fe7bfbc1081c1b9a185e39d5e9a675243945307114a770bb54cc862169fcef3c56b779b2fceca6089b6b55b8969b9f84767000093298b797aef56f4081501e2ffb4c2e3c6798dbbd8d69dc9e7b2845b48567ac4e8b1a8a0d7a04e5f6156f2cc6f6206385cf8a7f5ef64214ae21b32d5b6e137b67a696b3c5c2e1316baec1e1a84e1d5fb8bf295d96dfdd46110fa62022375bb77d0b72f8668d749bc6d3ae057e0b2a6cfbbcdd3c0a4f22b9eecd67e6b1ea26a6b743182299e4a56a300d9e5fef362ed076500ee3654ef9b76ee46047af8e5e923ed5eef905ce5ce8d0e3f9b8a4d513d45302241b4de44a86b9dbf70bc42ceac139495e445353815bcfdd27d844f3c0c0b75a87ac6a1afd6ff63a96f999cbb27cd128cecd2a7bfc0c5483908778951ddccce1a05e66f7faba4e8aa4dbd6739e0a2ef8a85a334fb543885e9d8de8c5126fba1ed5f9e68329afe8518977232c96b5774453b415d6944892f5b4b13b8a87c3a99a8f4495c77396ed1aac9526ff82c3d59137a3791882629bd03fbc1aed641ec0db370818cabeb6846a77ff8af34a7d6f69bcee071e65dacb78a4772cf491c9276b330d1a95f458d6cb517cf511d62b6e534a5f66ef27f849744da71aa9f60c07d2ed1b412efbc40ac4a2d310600e15f9d849bc3f93ae043e4ca0178b147c2e8896cbfa359fbd4249ded3cd82e8db82397e21ce3913e446d189078e283c0979d14137719ff0201abb9f4a32f3b123bc55d03a5dfd76af062bb2e9d3992986330b5b984a27270e93879170ca0dc4d0097653fd3132c4f98b734fadaf85e3dca55d6a564b744e6ef6d63cad5c7528c8b2c491d0118106a91ed2e9bdea9473f117f0f8d93d2f6c278bcf276ab2d6e5f5fe66111cc69243a7077007804c6fe0afd1eb8c88e7ff8a239a9bda0d92d6043d37855b4a190c83db8e74315e9dbe32fd1a77afcd138daf496b61dd00c51d8c8aa348f8c0cf98ce2dfb07efbfa42871c23cbce70f8781e381464ab9a9135485c38cd86fe8b3dd2d859550ca0b2a56a6e87de1bfb70c822eb3727ef5724323f7d0385c48298c84a7cba57849aaf7f0d956260fbc2b6a3899c7382419c21f31eb99f0fd0cea213445e773a6f505d39d10f47e6d68d4694c2ba6e064ad006d276805fbe342953b960ec147035482860555aacf244a1ad166ed36b2673a96f6ac77fea3357291a2510a4169b7f08ad7d1af605f5bea66692de560f55548eb82691f6c2e1c24461e0e415020e951868fa927fe783bd11efa4a1d0df3565d67d9066835e5bfe11c7775bcd4b6c1fddc7634c36c60ec86ac4c649d23f2900372c22a5a421047307b742d82b671687ef6541b8d925f95917627246b8c3b2ec174067dfe7bf7db9acbdfdf9bdf9a065c3af1058d59bf5e7be65332912e16561fd56da95bc8e1a4a6747e32103678c21d12159bcaa7c670cb62973517f3ca31a6fdbf53791218c9dcde1acfe8a255c54be587854c66bef30954bdd603c1a1e6dd55c425613fe273c4717a5d2b0d77376d1a106a1b7ced0ebe238bbc5f82e19d4d4344c71a3988cae7966885e15e273f0c1b78f340d39cea7137ca8f331dd3807c3006e1ace651f5ccb3aaef137dad05af4f87c7c25112afaaf841f9857abfb4f485d31a2030871dfb320942c95151b2de1e048fa9e09984f1cebaa05f81ed643da8731a7dfe7069fd794d2709c45b6e22f0b9f2fd677791cf21fb2cc81aa4b6dd03ae8acb37560259f23e45ddbd1260012d6c99c7cdf5ffcb59ce46c92d2ed25efc4c1213c57f0f9703a3454c25c0b1053de62b0ffc5bf66edef99668a2d1e148fd14595c8f34b9401646ce5ee2ab88b689ef51dbdbf19d3e1844c3af61d60b216dcf08ae7dbc28db92ed891cdd1b0e9b774fb33552fe1dc5707976a652857773b445c611776183f0df611d8dfe5a6b3c70cdf82449cc9e8b4c5e56545e254ec53a3e3c8e6569f307656a33ba2eafc621dd32c8b1a8a1471715bd0cc16b00b7a06682122c2f1d9fa98bcf73a9536147d32446cde257c640f1345c3ff5625cdb8ba2d8eff4bec5b05dbb5a846456b918d9afd1acc13f83b2a10f0398f92c82e20e560a7becf8a94dac5dd10ff320ff5ebbe49b1056461fc5af107cbed4afbaf3b1e8de5f1ec6109f1dd7fdbb5c987b44022d6b9fa855e4a0a49e8e5b8ed54b36fdc11d43921144cd3892a631a9a574ef35f10b01bf55186c0820001430857fd479498fce4fbf8b0085f69419e231348adc9741dfa32c045061009b93c0a79cf5aee8fba95db92e608d6c8e1a0d23013b7f89d6e15dc4f07539a527804922ebc022072a7cc4e87414d75a5edc3463242aa72e92aef303240217776c82d0e0b45e5f0ce5ee8c33a745eb29ca085ed8e581dbee3cef70d3e72084de31425fc83ff7ed61f2a7be810d1a52429b46946c8b65a4319e4bd91b83f707424068fdc2d3b2526c195062bcf0bc930b983ddd066000895f7e6b38c33eae280b5f9bb3b6b9b7189724917ecb965236ee8b96418eaa7a12e0a5f694b2616e6fa15783888c3a2fc649d9111c964805c4523af8c8edb2fbc71ddb95f6d2335e656defc9842c9c42e5e9027943054dfdc49f6f0c7b09c0aa317ce7f0650afea791d5f115af7f2717fce16570fc00ef61be3cf07a61cb1bafd76693aee94208707b42230e126b25d79398cb9f4e6f74593a9385e9821b0d334144a5788a629be2ac1d4f5db4d9dca93376fbad413a250fc10bf801e7e2dc5ef87ce6f55153fd25abcc3baa9db295b662e3bf43dd494aa8da0c106b9706d15783781ece45fb766000b9b09cd6dc9825ab47dd092b842b4f0efe94cf9a7134476a9e15aa6f4350bb344a75db66412d1f930a1ea632d40f2ae44a4dd4f9094d5536589232d513d15fcee9541055c89ccca4944ac3fa1f4061e4560323bbb863aa6e0d5f0e8154437456fd13e3ac582c53654e29078c4f041d968b7d64e865c06d9a2442e57becec2155ee7bfb72db27dd5e9e821bef4aa4868351853e89f8aac74307045fc9c5158f52235401af38d39118ed1fa62bfa67c33211e159a5586ae0f01d6d2575c605e6d506669c6b5779981aa4c651494597fd2b315a5e446f48df29ce44df87d6064d66fe7875af206019ec2940c450157a5bf71bb8f56e248bec7682533505df5eec8e735433827bd23d17e655a648515a061d35c3c52c5f7d3160a160cdf9c856ecd4cdc07fed50152c2241cca03ae17d2525e94377850864d36e9334526a793675c1758501f787720d95a46f592dad2ce1989effb2820889fd29c1976a61d946aedcd16b60a8083108f976047a299cae62fdbbc01f2a4534d5179150bde5d2cec0ad4a394508bb9a47d51f54aa36984dcfdcaa4e6685a8ad83c26c29f4fe4b15d3bc49b9572088f5efb10727925d894f50bed2712e9b193b30b2bbe8b7b42d640d9234b13ff758892b159645d9a555fd0f299bf11f758127046de456ad105e0399b674eaa495119f218a34752817e59f31a86d95e21ac6ba267d513b7f19c73a9db0722c2f039d7ff997498027b9217de1c0b0261f92d239bf6a685fd5d850514209953e8848e271dcc53d2f7d95f1de45fbcc6d7de68beff6ba93895553e28faf4844ea566ccabdf29b7848d3b33e0c85e02a2fa51ddb23f4f73983aa94633d0df5e9f641783caa62a16293d019ee4dcaf730373f3fa91ce0a8c1137aa3bda38398eb2bf3731f81555f63da1dd1ebea3cc9474cf255dc23e35695026e86d6093abab25111655d8bf25ee4e361e31b2b02ddd73566655e8025881c172d4798b759e2a6304657dd0d62254b774555685745bb49bb447a167bcdc6be1c60eee9f409992f8f374f8752cc3c025e7131b9b82cec03a63499ec5c0499e3d7ae81b30a7266b5388f5843a1592c6f608c7ff594e0f76fbeddccc86af187f312c00add3fbbd1a0f1f477f941307cfc453e4506348864f4cae81a92eebd1a56933d904fdc0d6258830fb6917b7bb410d4318dd3e04dbcf994fc8c32308fda7523ce1cf1288fa245b6871cf3975f5d12d60a5e44df5786e8e2c2289178904eb6891bb5ab6d6a18cf5104b108dd06fe6c1474c1417bcd4a287de2f8950ee7fe828fcb6365f1c54d5f1e307eb694981f855315bcb2fad791212d03042739be7242fb862e07fec9c75be3b08ae6063c48c55e955a7fa59fe13bb9cd5230433a335c96f61f79da9d102d692fde81791b0294fc9da091c44ac5deebeaed967285c83a28c13da3cd6bb03b7853 +MD = 21af3c94cb7200954e98b1956bac5b65b3177a933b7dbdaf7defa821f0c05a2b881dbc8c7482d74306778a2bee8708dcc18a7aad4498c6ac7f7f55317456f2ba + +Len = 44960 +Msg = b2d525b96268c224a26abb7e0432dbf64d82aa8ad55fec7731206bf410c6f61f638baa38c1be700d09cdc7b549a4c481de355630dd58cf62b2d6a05007c064b9e80621202444ca34f6df0890e45139a4e8c1baf3ced76180ddce4e82b9cbe45f886d12d854a5d781b0c805759fe24547b14e5b3c6f83abb7f931fcf4ee8d7df98ce805ca19879fdd81af46cd40ffed528203c3718905b4f05026330d6eae37703ca1835d3a932b2eafbc5401904f3baea30879fce404851428d67a3500d71aaae0bd13f98170825e8319b677577b36415c86054348292409ca6959d46eb02f90c0673e06b4c6ac5345ebf4995d2ae6f4f5a5f0b07d1c9bb97e0658527ee07d0a24c58bec9c3fb2f73d5d97ce690554b0b58cc0a94a84f20a8cd50018f9100c0153ff821401819b30b394267d45b4875be6640098790a2fe63bffd88ca6e7e55b963eabe4ab346fe8eebb2910b7de87dece5435e4d0555c34d4ac69174f0e0f0235aa8fc56101370637f828ee882b5d22b585e9f5180e80dc9f033922ba2c92dc786ab520ed90fa72d673ac7f8045100ee51ea33318dca4c5e42dd213b0ea77d3a6a7a55b1588c01413563c2b66d1a889a548ec069a68cfd9eb52bc53f9f0c5ce0988e8e0a29191d435c6615a047a2e7d3c2b4bd6645909fffb987d4b5de584b4e73605155b55769a86eda27420e5a9d1f3ee480b40585a1f5e2a9f62a471bd6f89d884640a79764e4cf387e183bd216d12ba6b0df40dcb225a2eaaff953d77e63797ee3475a89ad8d0009809f5a89f39e1b63d44481f63ee38cd248cfaf1ba01399bcaec6588e9205a3a5e553d4e291da70b451906372b6c402e977099358ea8d60ba0f6a2c16b0e32cc602b2559ca01aee00bf2f4fc2984b97a8a133aaffcc3570ff9b9f4fc288b9fdc26f4736e87cd3c5e1838dc17671fedd886dda70a0b3a04d15b9d23e1297dea933919f0376a699aacf354842fed2322711236a7ecc4f52576510af61775ce5c182000645c7abd10f424acb4edc17aa16cb68601fe2ddd02296068374714643b9463139785bfb1e55b34aa36f9ed0ab2f2fa357ee751d8e310121fac180f29cf2e8bb95059422e630baab5d1fa79bd9c2b67abe64f35cf0f53ee971e336d03620f1f5959800a1ad02c0e344c986b79a93e845001e0e3abcf1b7c39543f36dc3a5ea75d78a31f5f75e5e991707ccd281f54d98d964062526b90456b18e5729ba044ac2c766a8ae39a5fc233054ea6b14794efc86f17baae2bd9d09630cd2a28dce9b52e1a7c529087c22182d3b5fffc69274d6a520ef4a6561fa523659e666b36744acb2e827f4c83358ee6a15adff1cd347cdc08cc162136894d787f002c4cf60df36b78231a01d7e092c738e54e78bae4028559fa2b0911404fff469d86b363de3976c2082a96ccecb48d61fd55797a5f69cc0c403845306b331f821a7b88c60ca354d2d8b7f3a8817da0e24afadc53cc381beb4547bddb33823ffa2213b367c2ba6d703cca00b3c67469837647898e53f8d9bcb25f595ac0c3c9775b571c8e26042a66dc69a537e4214e0e264468721e306d482e8901f4397e24c16d4eab83600bf17b5f9fca7a030cb84904f862495268415762cc9df2c63cb8a00101498d99572b766e7157c549be10feb86b5d591a29bcb1f630159c9183eddcbf76dcf6f96e4120b0e93460e1bebcf3eaa542ec9cf9461d91bd513abfde2b3c4eb74d04a7da9941ce0e4993f19426f141affa4800634764db7c39147bd2da8957cc8500cc239da16fe87ea6a2c9b4bf65906cb56fec274e7e74b672ebe9628b81bb6b328fcfb4073c80bce01be4d027ff507f7d111e4fa31fadae9b37aa2b0a758ee6e11968453cdcdde98b856de1efb7f81de70d80252b69300bd8889d9dceda4de0569176ba09f807efed07ec4fe0348e2d3a8b9a12ae0104b371064b219e59fe40da207f7a343807b44ecaea81c21f1d96bfb5f57ff3923190aed83b1d449aabeeb3ee0ded8543e422f8f5efe15d1faa42beb118d2c3c2c088d627f5fb86445bd12922a77bc6c2a62032b181d678dd3f187ea78b75e639b885331a02212dff17d386e5d68cbd5c569543262ac8dd00e30049c0d7ce24a0216e0bdae9f90175e6db105e208833bafb6b747b711f52319fe265238347459f042ba78e32e9c94bd0d211b610d7f1849d890dd9de44a0187aa61bfa174610dd68a34f5f665b4f2cdd9ecf142be1bc6144d75667fa9d8f5c7c35b36a1c354e0355c04b750cb659be162893a1fb0f5ff9f93d964e4c93e6a6ad75759d197bc7b8d369e2f7ac62b0a98258a48407c7a0f5c3a317b55d8f6f9d164fa9bb968043a5eb865d0dcfc71c9629174ce6d77249fdabf11fc5b3f7f0eabeab96eb1bac8a72a40004e1fc4d642d144bd1eff47920b8b80ff7a5d8343234ad728556316763c607bd1f98bb5c52154add7cc6e542eecff2e5e77f54affd24ec8abe245f1998491aa6f65d945cacf7d3b6959432377ae9615c3678adcf186282dd897c2e2aefa4e7a3d15610b53b7ab8bc648064bf8eaf0e5a2eba6dfb4d9577522e862502317f769df7abb6cfc74700d930b30241f0c900c8156d1b9d6265d4d0f46ccc092681cd7ab1850e121805b3f44355942769de3f8f34b8401c207ca0412553aba89553f624470ca1e7f55ddaf5e38da2d8c196d495d3c463e04f7fe38c07654b45479df9810167f6b427f77cc35983b5bcc09bc6c43ab90c51b719a599e3ca334a0506dc7b26bf96e2777aa148ed60543b2e921d03b0bec4d71ff0ef5000aaeb1d9536a9f9003b07daaa8f516be64c08bdd226e2397efb11da51acc899a82cfc28bfd668e2d504d3038bdd95148e6e58aa75fd1c50ed997ec213f6395c2178edd14d8e1f20ee4181c4e10d742b2befcc6adfbfd32f43c090f72e764981b4b746820505d89a931b9a8773c6f79906f6ec65d8150fbec897d1e16ad300f0a91190a2b1e49a380cbaa5b30ab1254467ac410428a7d9e5c647c8e88eb5669148ad519917d26ee2a0452ab06e750615953952ad961c388c83f7fd7564c6844cd8b414ce00785a8098e4b2e567bba2f4dac4a7c9ec1c359b48d0f9eeb2ab610aa34d5eab337d69fa3cc1c4bcbd2b02ca7c75c9c1f051d7fa5dfa43bd410f05b1efa1b9977a8ba038d401e89c376c2d7dc4753ffb6b6026920a9c6348d998792b05d8acfa9b470923a8cfa6ed9f272bf7faec91e124f42a4997dfe2f941eec45e2d19c03d5f5baba100518718bb03051e660248dae5b3ec084bea473743baee34af8c7bc68e6f8e9b23af128354a9c2dc50ddeb4d744573b870e61a69a5a40094d25a68fef02abbfa5a12d09731c06a18ffa802a49a53c73f4cfae4f930530165dfab0c4d4c3539a4eda247bc1cf106babc8916461f85f187274f2b4eac70f9911ea6f11c6c3710832486015bdbe49ca9cfa8ae9bcb82f8764b0c7ad0e1a2f1ffd7749ed116d9497e46e786da374037cf802e520b66f3e4f6ff5a56e79792ef97523c9bd613c3eb7c9dec5ca3f8aedc1317438afeb77fbeee8a6149fb95e8fe41d62771912b9cfe676fbe0d1ce6d5955ddb0edfdc87cf8d453548da74a44b23e5ad5da76c250d8b26058421afc85e699515b8d80d9e8a59e5483892ba8c63686b1d05c5cdcbbd98a1a7671ec368f061a40d68fef9c4592ab50b58f73515d9d4bb6f48531ee35530c09d8f8ebf8c3483700b47d709c1e4099dc5d1934e06556fbeeb4ddac6367c586b2e23f80dfdd1d9e2577deda35cd2fd85c0caee6b297e425ad83de22d8cdb1a8aa34be51483706be23831c8315ecc0f55426c8ef644fd5478803ff1bbad197d054431dc3ce5b93f59f88cee19907946f594defd552079ae01297c91d860df89c459fa65eded535f2dddb5e9c5b782aa4efe49c3f2859b56db1c1b49ec6ed547af2ad1088f61e7d34830d4419b9e8e4346c7d566333b0b56f0a145a15fa0a2beafffdc4e8a0a1ca19038137c050c461ac639a970820970b626ff222299bceff7aa1f43be47b09bd3ef3f982469c85136b79aee6946b8737c6780d953038a63f889d32fe12c1b0c714c8b8bc0319b599fff33cbd7e610bbb29a6a93bd03d4a7cb3563c83da21215818e6515d9c44d035e884c6944ccd9f15fa70677e6026062789517355c125f610d9f155ef68aa6f97a382df0375fdbbc8c759cae5869f73d0590369fc6e2c8961c66e38d9feb6ee3fbf91d873907dec540ee745f9b9e61e07c100a2d017c165db7cb17ca5d4f6c68eab26656d12ca9b383f9d5b3350b66f2e4fcd9089746115de5b6f83fb61e69314e4b4e868736052f5d7e09d2b016ce1c463bec5710aa803fae0fcf1134c02de62fab1e3fe38ebae1d76656e394296005a9b78b43f20e2caa1abee46b5f9e802e95bc1da86e9a9070f897050e67abe5551557fef4c7dcde4732ac7f73be1e2ab1896595eaafc34f85c9fa5d7db30426b693038c91167b5cbefdbfe851d9a9f218128ecc2c2e71bec75077a855ff9be8ce29a37e4268536eb683e0662e38a8a10b391f0b97740da6df97f72cc1d4daf645e2201c3144ccded7cdf843326481ff3105019a5308fdcf74a66033e7b92817c4c360ae83324e73cae2edc584e49ed4337e1ac18772ab012f839c03ef36ed12f3d64c7c63ba41f437cba9354d4065e8b8ac53c85c3b7d04b83891e402d392b07922cccef7650d2ac58e12dbb4014003699895f6f9eadd9fb6cd292048197db9ffafc9eb67ba1add1d3512fee2ae96ecee49c6958607329cd1484afee88f17f52c86291cdc42d1d4e7c790e7fecfce6ceec7cfeb2d1be4c1b2b3dec50abec82ba9aed6a97e8398d9ca4d73df31ec524b121b994114ad5bd70115ccbed82cf9251d2fb6da7407d8b26ecea52ca38e8951014c0bde6345fea56577fc31776310a93112b3f6e756fa287c520d167b3cdb4563620c0c436b37f587e0566512eb77808d5eb447fef664039ce293e7e27fb0f1e2668611dca86e8d0f58c2a4cf4a9472d81ba013e271800b75841fe5ffde701b245f603655830936a4e82834d60ad146ba5161a3ba4fb508b042995afbe1838cd15582c3d68571b8ee96705e50b295c6dd09de3faf166ac1f424e98cfd10520c9250d40089340edb976c826a65cb47b8e64bff2fe95009ffea31f8c42ef443630f593d34941b4867447246a03cdc51e5801dacba8f84f98a3a71ac49b514bf58ef77a8a91fbf88239fafa548fe6d1a155189cd29c93ba22a8becee65bbf82fb4dab3faa553aa34d8502b85a9d2070a0f01964ac4c1fc6ca785aba75e6829f93f7a141c715763b64effeed00ce131899d394c0bd39c4fbfc8d1b5bd7de32e87c174a2f6555472744d53016cb95373ff85a1b4f99e85bc035617121a0a558f3f02736570987260d89df46b43f84f55d490e0d5fa6da2cca01afecba44de5d58bc91d667384d8b348058b343b11fd6070869fb8f7871b06fed92fe7458dbc87d2e01aace55faff62e4fc0653e4b861b3c2f8563d93519f3855e526ee414012d7b0d133fb0721eaef1413a0433f0120e9e533be086bfc4199e700e696828dd50f019b028ba054e65f9a4a21c0146c8c2ffb96837e86d4302afd60bdfbb12787798cc986eed6067a2ae3f9fb29296d1bec82ab56ee686bf362259f2d8c41af92adbed74192fca90ee78dcdad0cd27558a5f6ec98f67545f3b5dc16b5c6b8789f12146eb326a8df1d0bf41fa7d9a437baf2e4d4ea1551d4c9bcad61d7498a34f55d29da6bf85efb3d0eb37a8c2e1306bb49b8fe9ad972aaddecf5fb12733b474dd56bb4ccb6839fe7664868ca68a374e2110fb44ba15c3ab8ad626ce7e24031f121668865bfbb2f94b92f64d317ea04c7ff45a07d0b7306e2946f11d7f53d8797a786bfc7926a4cdd6de4f946ba3b38c55af74daf765b81d4287894634a97baa9fe58e552cd155a19fae58085de2b8372ba911633807a4e05e01b6f0a50c33d909c6973a7de40e9e2f6bda520e24f6748a49f94d9a853ce1041c3fc3d965492e3e814f52724717ec0d7e9e19864fb66cf8f9f33e26c7c845bc40ee69d89d05d2c8807e4616e2b8b2c14d6906ce4c4046ff21c9dee3b590370fd58987aa9aafed2f29ecbd6e9d3919d44206c1ed04dc2b272741d7d938dcdd8343d9c858468fa6f9e660608461e148cdc43bf1eb5ed243f77424ce1036f35fa2f2a6d1e888ed26b01ea4d75f14fa67343ad23ed14169b5f770396e91981ee6f44ab84d65471095db387ec907a0caa0920e9152a697eaaaaf834a5c6347a59a00b4d6e2d46d411a039eb7de85eb9a196ea741d272479d49a8161d438e2ad0a24e96ca383fe1c8ddafb717bfe0dfb1fa506daa693d39cabb698f7cc91b28e62666595af8ad8bed0767eb65142063596cc0c893bd1055b9277a582d96112b3150d1664fca2753f8c0b4a26b844e5ed8974720c576f283b2b664d7f853781af74616247055b421302f1c44efb870ba77a26cdd093decabfc90ae76a7a858dc8130bdfa87425cddde7d2939ba58915e7eb5b86725ba05b5e0dce09c003cba5b17374e525a38276f4ad163ea940bb63235fab227e1944589a6c383b0cdb8a57e01835293b3e01ebfbc5451bd4479e91ee396e2830773b40f966c1e1cd4c3222d863b512458e248b67c2e7b1b944b310ad2b4d0e45d015b30f7ff3947de063850ef87d16f11e5ae3ad186696d4a2997de487a05b3ade341d213a65c99b229efd084905cdba89156340584a4192fba21828e100856bdc46ede3087107a1ad34f938d7e79d0e3904a8d5e52b3890ba7d9deec9f6137554aeb3d97cadc52dcac61825279b1b68c87922b25151e23a697c7dba94f99bc3f1dbfd590984989c15d2c851ba88af6692134f8a1f86e51c733f25f0f47374f42e6f2906219de87918eb8852f338ef643043adb1c202a7a3823625364b0c357254d8d55577423b514e60e68d743451fe1d8abbbdcb8da05bf0e1fa0f1b1c53cb1f9970bb5d2a079110e35185b0036d90d4690822ae6065c259d322cfe73c665ae93189cc55ade3c52ae357b0391e98d8df5f0174ed237e63177a2e1d31e4e3ce4c219efcf3564679d6d177b161ee6a12a8fd36290a6f40bad4477a6b7d9e3281a2fa0ec1b8aba60bbf3e2ffded1b67facb9424b3887c6335faeb962f4cc0f911a82b87bf082699174e99eeea1d0e08ddb1d43ba8d9f34c6115b71ffd02059dfaa6266849845f8608ff75432a843ec357f63e197d816c62c89f3a76494fd497b9377b4ef59faef37d6c40bb23b5362de5f3321ca611404ce901f6179878a68cb9c6aa9a47cc9d77d0ff9cb56a227cbef44330d3b70c07712ed87a926f3f03d388fe34d8c48db369a033d9c0624e9afd2f60eacd34d42a6616ad286531e56512b3389a98d075897f67a3987aa0abe94ee3d6a067840c31924cda801e851e52a0a4f05c490ff687ff93c95932a9dd004abe1f02413906b59c1dfb320cdd4c5523eacfea77e7a31780b10f8c96e22478671a9470d8d8661eda26898edebef1d5130121d583dbede0994bf0a2f5fe44ba3a85e17c9cc6ace5d2d30027028ea15ad47480ae1b71395bbfc1274d0e32a02e1b8c80a61ba84d932ccfe97b06d0cd7f0ea186c49d2c37e14abcedeb1e33b97cb0aafc6dc3e1babf3e69bffb5a39f88a18348ec997815c39e09beefdc486030e604dbf3423f786b28e2d0e387b0e9534979a131d8905089e17fa95058f8e1f6bc0f143a9ca7e4425a2a63eb2f7e335e6f34ebe40e02bdfb647356a92ddd0610d4942143f15da55810251cbeb4f3c4d19b1ceeac44b6a43eaf4e8ea164de17a6b6f9cbb5494903d4d23bc5051ef9e6d55699713281934d7d4a7919e003e25be2eba8da38ac5348de28d424677577df9226133e1dcd83ffdebe5abf0f15d31beafa0716762363baa09b58038dc254f82f96f2 +MD = f68aff098d8091ebc05dff3686b9d6cdb7c82075440cd0b1876989d2d8ad1d2e9155596b6ff8937e04ce8d8e1550cc7ea7cc164b57b3c240e12ed66cbb69c5bf + +Len = 45544 +Msg = 3703750e252f53918a765d164c76c9d164976e078fee1e15466137b4f10c757b58e40aa65a9af115e1c37f9815353b69d0b4effa52cefff13703fa71a6296f9cca0f02568661be4b64cbad33cf61a655833f6749416ce403c705de0dff97b61477cc84a6114a643afcd81071e2c2b49b637ffd7dc3927352dfae0a0f661df3eb4563b81f631e88ea8f30d0d9b7200b455abeda1d3f0657e66847a6ff4285ce2a1e1bc748e4a4d564061c14f3b443535a4f4225b11f9136c74818dc66fa95eed8e93dd9a9fda6f0af4ae4044842f335e3295507c2cafbb9fe6969d2cbf816fcfd8e1115cb14ea84d342d0c95fcaf758e7d23da8d7a80c8791b182b0b6a3cf9fa2f4dfa435933a37d9d5288bc0b218666e31422f78218c498b0aaa9faf638a80cd05efae6fe05cb1c8ed3371f4631e04812eaec52d9d42a6f15b2bc73fa00d4789a8885a0265189ba8713aa48246d1dc26b1c7917f84f747cd8c4b4fedc2219bdbc5f4d07588389d8248854cf2c2f89667a2d7bcf53e73d32684535f42318e24cd45793950b3825e5d5c5c8fcd3e5dda4ce9246d18337ef3052d8b21c5561c8b660e60bd1c4dc087419407989a24c64edc6ff7cd6ecce04f716e3abbfe979378ae09f18360beb8bf36d8cd8de1dbfc9d1f1a9704816f608e722fa955755dba92ae1e73b4a46d33af4510f8972bcbc76d1dd34e39d985c85810582118b3115a826d36307771c4f8ff7524ceddfe5cee67df836294fc77de5754d2e82b3f193beff3376ef54d2ad156cffd9888e5f63b326c101c3e74ab6b30458346b7a1df2582490b7655c307845c59819dbf65017476cc64c45fc98b368eec5485e462c9e0e3769890c058c4daba1d9927ab08e562dd0865a21e817e09174f2decd9094133b982c8035e96c79b18232e7c73550acd0d27fdfda426ebaa7378f7c2bf1eaee8ad7681195604798f1d7126e541d4d97dae31131f193f3ce24b6f9850bd2978c56659ad18d12a427d72116baa3a0eb839692f8e4ea455d879473afadefcb306938d333349f6918b2fbf0be313888a10cae62858d36def27370ee303b3a443c219c90dfbf4eec0ba6bab65786853d04af9cc2458f69d9591e449729d19dc621321c3eeed61e03f39fade2911f0c269cc8cc32b76fe5cd07e479fedaf56cc97617122def1d7f5976ea4015f95f4fedc004b75469a35d1265629b95e21b39d6a15d38fe5efa0554fc330bc0deebc2fb14d00877cace1252181523eccdb787763950cb20ccf0227ef9e68b63d03907b711a71a4d6944b7f49678ad740c4ed810b4ae7325a79469400691298f6bcb80da3d167725a3abb082571992cc1c65ae4e99c2bb8d8d5b3c3098bf70941017b0bcfd9aa99128778e83d0546e457c806c786f49feb8ccc93dc926cdfb225ba239e7e9a02c20661cc46198d5aa80ab33a5368b80d7480442c092374923aaacff6ed367c37953db2fd4a426f9e1fe36d3eb019523bfabc26c870450bd74bd8283d2182e710b9bf60541e3f15d7f2e9df5a052128f126465bad397f99778ab8ae3f61e74357d7945419e798e5d0c825f1d67a06a4f9a028ca238d5a863ba1514746d6eff8d296c57794d0d649504a9d8cf939522c1a0f6a5a74945d3ae838abdc98a7216e4a9f58b00dfe80a81e205b960c678c2a1b1b12f5e675101e49f6cf567efd050d869958e6cb9c1e6903f167f9572f3d05c56d2a82c359fb982584c49b4000243e502dca0317d038f6c765c79b22b7ec25e0adb9e85167a7114389929526d705676e03b8ee39c257b632258566b52721f23483c811d9c89bf26cae422a78ab31f2a9c2298f799c02110bd9a94057a865d488955ee4a2a35fa1689bdb447da32e45c91226ce1e83c26f1c29391352623e33a58e8349f6217c88fff765ca7ee886ca969db69372a11e382bbb3fc6ec7c377754143f281b6a790df96be9a4c3a1c0e7d808e1c6bb1e9ed4013ac2416e1ed5085bcf9b695aa5de9a1d9e6dba94f7650656feaf4f4222caac664ccb6c2072a24e82699ef5fbfa34963439fcf43912fc8ed92529164fd42b262299612f499d25b2938751b24692016906e39b3af9190de7292556042a5c48abfcca8c7232cae69a54d4ba898395d07a5b4554741e3521780ea73fff1ae3a9a4bd87541d241f6e6f8ff5e362f92b2633fb062e8aee8dbfab5053eaf06891d7772d77c21865c4449a0a95d426f17a8dfbaecf3264b24a6fe7b6d061c05d8d598e1443dd4b3de2f0818e5a94bbb3ad8c3a3b4866eab193b99509c7ac553f00b74f3a93ae9ef6a1fb8ee2ec2a0b87eaac596b18d4053591261b11dfd19956117a24670d3bfad728ec28d0f4a1fdb55973be06e8849b846b3de296c1da73ece92974625c8e4527a04bb61e1afe7884246bd2d45f7c95e74a86526014ceca47af4ca6f426af692f30a1a295054b663e701cfd9c26c6dca6568ad33681b688b08c6c24e514a44c37017453fd5e90ae29680da828e46a5709b6d0cee2b099946fa81055fdcd77d8863b4f311eccd3388d31c6393e426eed5893e1a92a487fd6cc2ac0a103fa30f36605b7a4bff81eecb4f6cf1aa7e8dc88da1443ced7f271360f3a0470c142d5871d873614aa8978b2e5ddb1b12b7dbb0fd86280a3b155759c7f02652afd4e707bf4ea53e9a528ea72670ef36891aa14699aa420927f1a96f065a76a3780c508b73356978b797d7a1483b21da6a316ee806803a9020be8d91a09549c001250a62322f28863ee2f328081f1b7d22769513b8aa7a55b1b684802b32f81eb7a9751a709e7b0d7cbe71a9ea9f24a56e64d468247b79b047841ea91ab60a3618241112b2f5c9750da4c395742de5d99a868d33de95c1467ea1cc7ad38108acbf0f7ee97dd7ac337e107979196dc790334620354b6bd97eb38a1e83fa467bc8f8d60f1d35b69bef2a9bf3c35eb1525fc54e4dbb0f703acf82c775430358cc317212521c7f15010ebfa1d312c8ab1e9ecce966537f355dbf68c47136634a827c974ed875ce7573f889bc97d5cbbd74d3b6b1fa8d2f4dcad4d21b82ecbe9e26e0f4d61297884a8d533566a28afc6afda51f328ac6a40bfa966b373ac469b6322507628110411685a53f1a83b0cf26217972e587ae5202758a70a1f95be9352caf3b5eb47e9d6c2544f352dbd5a88188d73e458192ddc3c4079ed65f21d1ad8ef62d352d10d1bdc4d91ea9eb683d0f8c24edccf9128bc25eb4525edca4a761d18049804b95a28decc80d8a62e6e122b4091df66ebc0080be1717b5e252def48cd41cbaa07b744f15a84c6eb2e0396d98fa2b5c52edc0715a867b4610baecf82978136ebc10bb93d7e057e15bd2aa32835eb26936263026cca8d9b9d85b55cf2fc2c9f70f140cde9c06bc6cde4cb8343bcd2fa788f3f4137cf4df7bb9a2ae0c186aacfe19e3dc91da81f67bbaace7c50acc1f81ebe570c9f3d0e8f6253f5a116bd648ee5d1eaf503bf872986171bd7788b1fe92af793abcc9e372c3bb6fee81a28c0a324912f98c08c0cd3d6339bdce2e354954740db65e5793296edce2efcf44f27d847e6f4fb7f97162f550734d2b73bc8c41ba317841357669521a06b27cdba02f3f6d8216766690e03a99acf031e1ce33e4e272f4e7dbf3bf17f369eafcdf2b7bdd8709e229d895a187af455b5400d0dca89d40b0c4c391971ae97b0dd1b7eb0fe96b553744d7f6436711eac314496ae3274b39405a74d68df57cb87f9e0e6537ed7b029a79ed49324351fbebf533f2e3cb6cbb083b784900121db0d4b43b30a0444670602b70f4eac6fff71a69591f5b1f72548cca365f99fb5ce281a6d6c3c5a85e4d4ccc1b8ff94c7c7af3031136b58e1c7452994790c83baacc2b086995046412f794ee3580da5e47e5fa3504ef8fb1abb8de2b2462f74d97dc253b5c2b091204edfd04676e0a76f2c694819c805604a090a3f2456cb39ba4a104c2270c303cc4bec99119ae0620fd9b467b50bf8501ab7a2881331499b041a94e3f62af163ea2d8af36d4c759e6d8e2a484b9f3b9331cf3f04a65d0f6260f6365f5979a27b25fda024821507223153b232040a34f13958c8fc0664875675e5de0a72e43e1122c21575777cfeb7022e346f08d64d32d75b25b85ace183eecef742a6af32dee8c84d32e750ac225882999457e8aed1db5df3e80cb2129e46c1ce008682ed8da094cc197a345bb346c4bc7fd8eaf7b7c7becfb9c81e7240e9e750aec951ea59c4121c7f82ab751ab569ca7de62cc6115d18a4453a3a770852901da1d194afdfede0bcd9831e8ed54ed2521321f6906b05dc201ef5aea7511b7c939e51b3a49c68512bbc0e15ff5f5daed1e3ff00fd217ca9b1ab6cd379b79edd30d8ac377efbde03f79b862a4d357c5fc844ffb442d11be1e77f125164a87752940553a8859ab9799f0c8db3fed42545b3da868937f65e15200e7890fea01f7d3b88ea8f5ed585228063874b9ad7e32112f92608130dcdd3f9ee222abe3b01ad75f7d3547158bb8f5a44f57987ad2052644570b98a83e57ed372817719d5c873f1b6a0705380e7107b356a967bb0776a3623e905f5053fa65b40291ea81cde613d69c49b7bda72667199595abdae52c8f738e175e8ee26baefeb8b89cf5cade59775c21e60e1f7f1bc05440ee3e34d0f25e90ca1ecbb555d0fb92b311621d171be6f2b719923d232d8edbd5b74fbc09d50b8ccf2670925ed495d8abd1318c3a600ba634d8b1cbbba46d717a8f7545803f62c94efee3422ec1b3d1c762c8e0ef31cebfc0abd38fee89446057fd1896dc384b91702f8e8d6e9f3dc6304e91e0dd951787821b605365e3faee9689a078c6c8ae2a5c40d83ac6761aff0d1df256ad94ce44a3afc0ddc7ba79645cbb75b3e6f873dd3bb92813dd4f34c4875555080636db3f4af05cf5bd17a80ad41cff0fe3cf82f23523e8de5c31725dc68021c0918426c0a0649a65ef016f272333a7546655c3b171057f64ea25bc11f125be44f685970fcd95e3f40480b6047488d34916931f6218e7556d3032fa2a31cd945cdc411773f80ba069a59c65eaeda4ecb79c907c4c5151d2c1d66014eeadff0bd2ebc18c364a4c378d795e651fb60e5b669f55c4b845cc5e2783b7f3a68e438b6dcc0ce09eeae2122829cd9cebf84e871ec8e8ddee1cdf6168df407d99fb217cf4272af9f4005597025cf1f398dbedd7a7bf53b136fd13434c93029b111d224630a324c17fb62b30e2bbd3526d8672b5c82b9e26d810ef6c9b470536541bcd51e9e9011e8932ee4491ed7aa2b12265884bb4cf261b7ffb441da25234ab1eab05e6a1c9fa589c253ad89beec9add64fb7f603f098496fbf349a4df07f5e4e42cbf172853c351d597c7d6d38b1a9cbb7ac92c00863a80ac4a2d9f0e7fdb5d21d09d0043ccc68dd1171480a5f40ec2825cee6932071817891f7a3324098f8d3c1284c00f6923903d581031b6b60c0162185bc223fa91be1ae9cc0bb02366e78b8912d0ebb75f0b72d14744765f86bbd3439da186df3c06ca4f7f83435c160ea89ab3bd59460d423a292653754f03644e552091bb237b641fa721345e2201650bcdd3efe88382e6cbb649c93403069d4bd3811d3175d46893874d895103bd8d3d991fd30a0e646bd01f0e102329f4c944354baeaa34eb86ce76410cdc7faee9b692e4114e352643cfb9ffe2c302727adff0ccc055ff054118eac83940f459fcff41cd2525964d01131d9b9ba45af414679c90ecf512c62a1b5b3f993f104359800c278910a05d1652b07dc547620e3883af449ed83eb2943e4e13a72741ff61d178afb79ff1bb160728f2da1cd60559bc9f3450afd13f220a49e0dd8a17e2b87c0db22b33f8fb6298ddb754a5158dfa6ae30caccc58d055f7c523c6d7e0a1bfd841db6e7d24a29e904517bf60af0c9d17211a0dbe542aa2af5658dda16a910a8e9b980bcc13352c7605b094e01115a469c008ee0651929a69540c9c76e4450af791545db133178ec2760e5fa3da1db2ab4645e834bf9c9fde749b8db90c4243bbc9ad0ecd02ee47fe4c8d8a1c68994a842a5d66ba1ccd35770e921bf830fd47439b0e8960011dfa91cfaaaeba5b2cde5cf2bbf416f798fdbba88cd1b4f0fa88178c05481acc2af9259602382e103ce0ce25de0acbbe845b24c8f8596fdaae88b0130dd56dc289c6122610b0b8263de4304a503558f013d03ae640fd893cadbb95d6a4bbd962df03f0065293191bc47b2bc6aeee3f2acbef76971338a1c56ca3413d4665de4b8f1537ad4469915f54f8392156affedd112b6041dbb549d36fd23abd8f5dfcdb2e9c618172aee16f63fdb0e0c3f5186587f6707cf6ddd2052bcafadddc2ea5a011ebf62949dd69da75fe5b9b83580c7294e33faf113ceac924f00a24b9327918ed967e1b467f9b0f0f6c61a811435b82cc74166ea73ce4adefd3d1289313e7c4161e51cdf4f015ab94ea9bad0a317604a31bad3225686011e108f830164d6230200629b7e1f93a0eaadb41f0babcfc769d6c5c701839dd93ace1d7f1af3978cbafc06e7f79d5a8c6b5c0fd39cf404f572fc8bccefc4bcda1a80108d3ca82bc14f9ef887b492fb2524a3e35ee9465ff34eec336954df8b0da66d8f36cf4937caab2e61031bc52173fdc958465c6988c8e3eee627989db179c7dfc3003b9f66adb4f468e49600727fdf1895155b24267c1b49cc8c23c6d726631cd375e9725d74543736b18c099650b0d6c3525041e118dd470c225d22a41d636de81d3f8ac7277241f2f265a936ee5a4c0986a28663a2102ecf71af78c165b01a2a7fa6ae4accf658c53088a8fa62c3c29038b9bc51259e473c007f92d506306bc02387a88e6dc7c5d7f15fce89b3d57f7ff0fdab56a66eda7c5736368909cda8d391483e3c11cfd04fc051e38ce976cdff37d61a182f682fb6fe3d2d85756e188a525339fcc1f5c05622c6aeaa0d90f23893acd23fc7748d137efa3f7052fb040eed0e60758421df13a126f88c260a37518fe79c74777a3ebb5dd733f3a95bb486eae37d50623b73afc4da89d93ccce473b0ef3e5f466288d5263bd3b58178701bd2395634632cc5511348293a58be41c5802c80a73c14b4895e8ee55fe23980f52b77b5ca90da1d2217d9a05780c8967086072cf4617909018f373298d4862b3b800760baf02ec34a57f5b5d7bfd22a9b4ae608f0be77d16240a082096047bb1656501fab8b10fef05c0532631ac4466f5532de415af752d7fa309d598d6476ad37babc466a69173cac6fdda29b8632142e54748f3de2d685444f4a3164c6a529aaadfd32941f5657d19d7e3d490036b15db29283701ea397a6655339eb538fb13891ac17111c036953f5dfdb2c1b9a6e6bb602c4fa950133a8da7e182cf47e6e67ce8f9fea466699b8e1c7254dbda574dfc78bfbe32d3a82d31794772f92b887c2cc6f702687c7108ac8fdc2b3cfa0eb414cf4d034d095abae825cfdfa138625cef41332cdc66df650124a5b663ad3fb1aaf06eaf46559d6c284a0539761307015ac458ee8eba172932676986fe486caf05789f22bd4cf2d958626200e62fe8f1e5dcb2b7eddabacda6e4920d5b701834eac458fe1053fd5b1eeb70d650038ab71706eb39786d3cdad518b9ca09a8b4cb916016a1fdff0f99e251bc2a62125eb974bf6cb3bcd61fd943703b3d9746e4dbbfd872bec4c2cbfe2941ae6d9af0e7817582b1d739a9c6318887a0e872ff0b0dbc99d795134394f07a27c2104913b7979fed55146d5cd28c0adb855b2b25a9aa2e20cfc557d60d295b6081d31aff41746a4bb0fbd673c73150c852f62e5f43596b19b5d0010e970123a877f67f1817a05b4a6fedf36316d9e0ea944a0b005a9419c14445ad51c500895c2f2af3f29c93e955ec6b42bf43ee31beb3d73fbd71e2b0c3d586cb4419bfe2f7e1c1081362d79afab10442ecc0d6c9c14c2e4aeb0bbda6ae0423d969f787d7086a5929feecd3f6a558498280302c2f7ec7afab1d9a8d81cc3aad5617f100cc0a1363d819ad2172e23c9b7ffdf476c963b0ebdec9a0ead8c +MD = c4572677ac23ae0736362f49ecc1680cfc65f029d404687f2cc11d2c2ecfd114ba4a52a25efa425900261029e1867b7a0834df8194b5709bb7d08aaaf87639ae + +Len = 46128 +Msg = 2d029512ac9cc2e279be0173182b1d39bc9afd49ba5dc1183c420e863ab7a51ba6313b90e7ce8591893992c133ce5dffd9fea3e832f5f29c6d7b03c5201849d6817cca91d81d2ecc342215745d80aed20b63860d55cf9df16c87bfee892e116424aceb1e67d3e51ce2433595808a383cba904ec30a33eb9da32eeb095f3f264cf989453d7c37d407fb62982b833422c44e4ea40f3968042a78372f1c8994b01666da81f9ff902017e748e63e4ec695f32f6530fbcab70f20556c3231ef75d64bd5694657d827f4d40fbdc8d7c988b84fc59d998ea6683405a1939d4f7929c072adfc3d61f04476c5d988e5fcdcc2b46279be87d0b3c39d63c475177f0ffa9713565c0d1e2d2ece72ae73e7b86fbbb0b4b18fa4cada0f6fc126da49c8992e83b638515f96782f2563f74473106abcd5cbd6d995830496d5a82f8ada32ff0eabe4bba2dbd2ba8da3211ac4340eb50d4a3151640503179ef59f474c73c529e23824471928d9d9916f3381bbcfb938f6386e88f89a53fd70f72ed6e9bc8afff251ff447cefb3bf83b22192f1ef19dcbfc708e55dfc7a9c5404dd442a5c886a851ffc1a94d76952ab9374b72d3a3787af1e89cf5ad480de914435f9d4fcc750e5caa3312989027c503bb35739581a220f6679aeb9ca6ea971debd5db243509b58797cf103ac8623bcd166d9dbf2ca9627c65ee940854be73afafdd88bda2a31275410c3e9e9fe31357e15a7dcb050c93f67c2eab8ae1f7f35c27ed326685dfc9a84e60da4e8718d046a49280339b3a59f712c18e8ecf359aa5cc7b44c96f2e2f8318638fd50e71f71bc89c41a36fb118f0b25db9ae8ce5de1f061e5c50cf0cd8b8279adb9ca68cfc39d5ee3e74e31f4565d349b944ab87321a7d2cc59715fa499a046d3a3fdfd8544344fed342a5c383d90e1c09fb9b983b4a8a4d3d06e484f6bb375118292ad293aaae44ac77184c48cccb4b283ddda75e01c5e61f1aab2b549e28fd11d3081a3ee26a56368ccb1808b3836da085f2231ee2b89dd85cea5c07a551b7a3d807fdba8d11b9ee1e3ec5481fdee9ef6e79a9f26fcacb1548129574835a174aa29b1bab0d2cd64f95d3c28b8426467141c48a8cfb84f44266c4762f9aaa9262cd41f264d52431e77e3aae47630219e2ba736323286fbfec33606cad6dbbcfa8b29d008c8790632241c3d7004efaca9032f6c26988f3647f3886f7527f161578ecfcc49696e9d0ac8b1fdb4aaa68df2645df06d47fb8b877d0a884c341321a5ff6f1bcf785a900c2b49f299af7e4ddf16d9cced88f17f262a635b37446a834da4b0c6843d6468a2148d25055d9e73dae04a0890a2999c8cc23cf01fa11e0fb5453bd34f00b5ac334c249de1fa2e874a8c59aa3ddf1c69220d3c4dea91564d46acb74d170874e4269cb86216cf581297e0adbcdc85a26e4ed20c7c825d3ac668a0cd39c69eca99e5caee7d8b24429b28a5ef4554dd523479db5385cd4df30184e825a1430adf51d79e70f5274114aa67a2c64e8f2f55420ceeba6eb5a8a986004d668c7694da9764e2e6d2d46df7c7bba1dbde74c3d3206dd4e94121b883de469739034784e4f0f45cf71d79f1137b8c68d5fdebe0f35706558706f8c3aa90bc8e450d9e2124e6efd54cddfd158f4d43c15db3dccfdd6e3e383cc324124624ccf933b263b4c300be168d1a4a2193c646721b092fd9baed7c47b2828ced7e23dda2aafa7e85e8c7c7e461dc475d496cfe43b606cc44b25d2a488e4a189b7a14564f53eed7dcbcc1730a702cdc11d7cad3fed7b39c58ec45af047b24b066637fa1c9d695570167782a4e6311f18465652e692516855f912d73431f163c9461ec25d8daf8e43b1074557ae2946eff1cc7754e493a709fc89ddecc222ba46e9be44a43071d67d4df3b5a5494bc3bca23771273ea244661ba1e58692d68d03c3aee78d4060ec912fd57a3a52291412da3fd6ba0b1deeded8e3749e0e8d7a946659317517fd3f03e92509634331b6670c4e2ea9f456f4f8b6d7119fafa7f15d3455a8f831972c69fc5ac9dcb706393daadadf53750df53837f53307f0c68fd2d02cb49327df5327fbff51f308170b1b487e6f62f7736e01ceb65f637c59b4a9ac36eab2653631b24a8b2842c0d4aa64679155450647de0a0da2fd4eace1fe263b0cc1e2642c56bd7a76c3387bcfa5cd8acc37762bfbc3a55733a305fcefcafd0f26c0bfcf22209e0e4aa96093887b9b24877c72d2ff9d684df0d735f6e3b9828b1d6d86e0c82dd8788f4147a26f9a71c74baac785d3e9c74453006b256e384b51493ef4538eecf14bbd215a131590d5d58138e0df192746fce2c4f202dfc5dbd442ab6481d6cc7cea4cd0147ffaed2be1d0ad5b292fe46bba288b8719b8f0a89692397416407adff6c6c41343800e087eb27e930e888faa1e8cca86c4aa27361aa07f8f6b4c469ed3a383b3085571e00e9f3324e9c3b7869c98187dadf40808c2f5d4331b6ade3e037b858038ebc747040f519d6561ca85b6c2ebc83056e195421addfb812c904228b740074fa36ca2117b5048ebd3572bffa5bb12f623626ffa88034536f20b2fa5df49c4d71ce085997bc5c407a8dbfdc9a90cda69e9f8fd6eb5caacc75bbd6afd5c192549d8b1761e8918ab2352c75fb755678af62b13c2113cca9eacda1598a1d624c522375dd8131bdf4ad951b7e64b2341a1456751528475599741fda21d35a5f300eae9443009bc604f84261c05f7ab31b9b21f20332b081e233126f18d2b741a852e4f131284d36215de5062534f559e40d6b31ec8975d7ecef4f6725ce5a8e1be46d93903f6f94b2a22613942a4ab1db31de38ba73c0df206f7eca2f116bd1f18df282468e2b692190ac8ff48aa24069d120115339b622e47d46a120e1138f91151bc73d5da73cd5ef20822f9c2490f6b3d9c4a1238127a1df4ff3df87795265448f695bf40b95368729f42ca8f928eba0b2578a784976c05e42c8544bc7a1d4e2f7708a9a80fcac1f70eed3f64890ae6052d4f8823598a7c2c7286774220546b6fae5b1982efa9f819c770cce3a51a9bb6342d2876e14c0d3851c004cb405238941cfb8363c1677735698bf77f7f243798aaa00d01c72725925ab0719a529d423733686bcd2d99cbe4658d43aa6fbe361711369a5653b241b4ede64241df9bf4c392205721aca772a13bf335f6ff4f33dc085f74d74f640e2a9bcffb543fe4dcc3b9c1ca039716e7e66d5c52e7b66dad31f0991126f2b2d76de4dc0133fbfe66a20abb38d5a56ea84e6a370eef2d900eb34a51f3a7f63539f949990883ac4f3ef9158b382a30254023c301de9fcd3cd4faa638a0ecb241a2573a9555a5c96da2435aa02c73cfc12c10f84b565bfdea9c6274bb8d67cf9eacf2584f9d2ccbc05ceb5a989a44ecc8e8908a81eab6681fc17536492dab9672b664f326238b3bedab8b85d306101fb2e21cfa3420317452e0bd8b60061abf845b39cbc7ad43825c3a9e7cfe0457c105c530b7d07b4fab0a76a5b49ebb57933a07bb12927ed84782768ea067f99e8937fe5643f5708394ccffc8726391c4ca0a489398153cdbe3f6ebe680af6a56c0cfea084f01945f9a10f880154d4df4cc8baa4dacce5ba0f03ff7309e42eb13104434c109835b46535cdd874dba246a03248933c13c5fd9f4a444f769b0e055f03b5b1b33f929da29372b286c48d987166b81f085edbde959fa41a57377de91d8fbc9613ee1a48db4067dfdf167c1fe6ed7010e6b30fa41987879b53c165a49332c0c5d8adb4fc36c5132728d95621284eda2e7d1c4999558c559b1340ad7fea732904ab824803dbabdd51091505e75e115c4076a071036e3577e23fbc3dc24ada601c3477bfa3f37a2f2729d370b9b1bf601078476f2b8f0a53387e3dfdb5daf0cbd51a93ff25a6b8706f311b7fde49df4d642c1a2b59de94526578ccd59fc33cd3f605def1d11bef07f2c8f31aa04df98b053a208dd5835adc30d670adca2c47e0499f617dee7ba65e7897652945e69682bb49627ee6a7e55a6240326d7c3e975b948d238cc6ed66dcc9467894163b3d9a4d01e6e4d572bb32c35d18fdfe21b6aaa07a2c049f9ab6e9ac7c34435b75763b850cb6a9eb0b66ce1bd62d4598fc2c37350c85cfc2aa1eedeae1a21f5cbbc9cd290fdab36d9b6e943252762d91f77f691aeb35d3774426504b1ec90e6036bfb802b558eca64959eed07afd9e333c39a719c044fa0590577b97dbb2f9b10ddf64d8a33a3add3eb143bcf6c97ec4f0e15bf833bb2ab6b738d496bf63c99569b1397384888759a1fdfbbf6de2b78d3e00ec80eba14dd0e152c41073e6645572bea09afe48ba639bc67ea188512fd64c1dc27991fe4a9c352bb4cc9f43b4394f8dff17b984bb435493332aee1dd0e742c045abccdb0962dc4d0a93ea80a08829a7bfb05e437241f3ec8421474e80074972ddde453f726afe40302dfca70f8c2792492e958ec7a5a159d8503ded297f89b9f2d9a4326dfbc18a8c627ebfeb8b72d80458056ca2b68563987d7600b2982920ec6590bce25e50b588fa18d11bce310057f857e5ebbdc8912a719a920397512c334ab1e6b9dcd1498abc71e4879d8d93acd433018a02916cf7f452a804c72b672f50b0b7dabb6dccfc7132001740ae186ab63fc967cd097b67ce464c9d6fdc58483e35382d434bc845e1022db3febb17f86426446a665746e3c61d85b6d68f87e7dee76f9bbe94c4cdd48a744320dd19c0a68e7a7c14a555d1a57f5c37456a7d72f66f660a726f49fc1272dcafee3ba529462074832118319a3316d7080495c1534f742563a805de3a62616edfb0fe439b0a833968d3da61a7388701115b39dbf0b19fb28fa87d0bef8eff31bbae4d7b7ebc5fd11473136d5f7c7ddf3b927e54b3e4981775ba0058835cf52d2c3051d63b225e456e48eade29c69e7b6cf08bb303af065cfc26b64e5e95eb6a187d31db3805269c5d9c883a6fe092dc8dbe898047db92870e33c674e80188f169de1613de2c5fdecbb5150c9890020a87459f44e930e3a2922b59528a6775c9059b28049561b2149fdcb8d90c9f960e40caf6855076a2b46f549671aa905afad6fc8e38c66ac645c159992b32d5f5efa298b5cee47576c68ff7a658b245dd8dc2487137d71045791874e18974f9c8b594f605a40df508dfd95bb08f084ca989b3c9f887321bd4b88e75b87c39d5b668fd2b0e9133bdff0735cadd9f166d64f690c54cb23d531d0b0aa3458bea2f6811c780f71cbe9604468b8a550f4272b7dc418594406280c8797548b13eedd085b8d93de9ce1648bfa5c3e43f67f6214944ad51f9b708697d0bb5aa231dab80b6631baa0b2da39bd72bc620c3309944c335be71a3a196d7e3c8b311c4b18c06a31c750e86c3ce57f5e17a860bf193a1ccb85b2cb9857692a2b857c7bc81f92cf3eacfb38118fd43c0cdc85e3c324b010dd46ccb64ec0f6263e38a13321558b84fd611df25b29928e1f998ef817c2b2b2d91da96cb5dc90fce52323c4ef612735ee623db9a1b0bceff6dd38200559ae9d5f78bd517600c608a0c388b3aab9025c924edef07dbbafdc3305f5fe1480001ad0f68d06f7d401e401985481bbc39963798586294780d7dd44926ce4ddac63c5ce059cffc3dcd11978200bb1cb2748d51494a7e6b7c6e15dcc30f176c9552628b724719e5271c01384e902b6214abd4bf3fac89b16f448f80a3018165000d3be1ce18f753c493b6ca851fe2186a4531288267cc91d7f6b16af3e65561a35f8e07fbb6b16e9a9bf7f6309426643daa6d341b618f313eee4442bba5dc8707b125a401078f5d339d8e6455d6406e1341508c11841ab92b930faf01265b00b369c661e9f5d84917ff41bbffcf785f7774a1d86cb7b452274ddc5acf511df32ff13ae6ba67d659cc2bd9a33366155feeaa2abf34e1a624b98471eb2c0e698904af49da7c44cfb6dc871ec6fb836195024cb1ea72ec395669a09709214586e9b90dbae638760c87cf7dd7c95e0ea22a3ac0ff012ebfb210bf09165cb4debd3dd67157b1f5e4d5f52b73ce5765f021461e6fdcab6e425c7c4428b68defc156aae445e6e4bb7672287ad3c916160f260f37c10f903c5d7ebf7f633f44dad6995a6af0302692142a47430491ae7b54f8b00c1f62599ff85f04f82378287c06cd75f0dafd2083a6467b0f6eeec89ca7e14f26ef9baea0fb487138d12ae2dd373c22fe6b157995140eeb6579a70c7ff127150b9a8336454e812ec6d31d1a05522c8a1d0b3fdad146cac0cd8d86212e1813294589e29a98da52642a931977fd40e6d5d42245eb3d25c221cf1251b0b106edb35c238082a185033bed77e6a1cce7b22aac18ed53e4973e37f470d1600ea1fdddd6cf24946738dbda96e94b417a31d7b12c5500bbcb858529c30fceda4fd38acd3df7987bf2dc236aad5012ff10059f94dc4145cafcd8e020c55810c57c83deab1802a2dd4a572412bb140182954a50f8444586297e76974480b15eca9b993fa0f0580b63789323fb479ce17311ea3307edc7897f5949f2bc7e838191b6fcf6d44c619ab483766b4cd95279798ccc90e95e311775953838b1473742c1d4964b6eb484197973ea432ef99d933d0fd8afc61fe9f8b33b2ab34a61336702fe4e8596b02c4e5950d6f2c930e5f566a1f6d7c5b959f4e05309a9b056e1b8fe3b0cee76c9be03fd2321c1440593689d4b0e520eb3e7d3a4e3bc630aaea8ff5a93b8cc3386a3fe0cf4b5f8c8010db48a140866ca95fd5ca9f52b2981efef02c10e3b68f87043082fc979df7caabca1d404cc5c21e8025894903e433da3208ad9b57b0aeb0d06e80eac55bd898b08f72423437c3a325e9010bdddf86551a25f4a8f61fa34e8556850a431dc16295a7d217a530d3efe78c9c383f0912282dd49bda4d57ffc86964e9db9f5824c0e18fc7410e55954d1bace55ea5f569bbd3910dafdc0e26b7133639ff48af853c1ac3dc4ede2a6a5358b666ffa128ff98a1e7b48a1086ca830926ffb5cd68652ca7c05ba1a303d59b15358b9bcf1846371f454b0989762dc4b1d3a5cfac27371b2f21ffe9eb96697ce7b6dda37e57d02fb2361b9eb530f2e4a3a8b68d43609daff7452378163688712696d7b73d4c1fdaf136b0ca126bac7b6532bc7f51b8eb23c6c650dcc188d520786204379a8997d162c3950c2f7aace17cfe32262574b24ee41212a86bf1b20353a4ddb50474daab6d7952e57ad286cf316792124d488559f5b4e33b7405b1823eebeea009b25ab1a7a454e67327cc9d490b56b44788d70d622b4d36783956359083919928a68a9c77f1257fa6dee0c41a561a9ca2da19b1cfe1ab09f6f11285ff287100dfe60cb474cc4f21846c65ec3bd4382bcda0dfef857497266ee1690be12707679de533a204b23c6caa54be6e140259f24671ac3f2950ac2c5e8edc3fdd2bbf3df128a1ddde2f67c1772c6cd2396cda709bb0d0f92202348c343dfe8a499323146814d9d037b07bb08957f3a1127034374c0310d61605cab68e832283bce9bd5b615e4e21c7d1c2ca4f7be56345b911b6c5dcde2e6be7f93bcbf2eaa4bdbbf8a37b59613b050fe76f37ecb48139b3ed6f97a28b9a9a052aac8b01d975b2766f6d249ac59455c7542fd13ed39364dd11d23008bb8336f9f9593a44516f41a57c18eba6edb65084938cb9f6e5126db1397f3d53e070b942cff2581f0509d1c5c9474ee24c297be41ff640894b76aabcced70e289cfb975c18e8731646cde953b178ace163564e62640d038a8948a27c3c6a30fb438c67c28eac09ae9933fedbdf1da428c5d52e6c0a21815f10f0fb5c2cb92450669b91028bcd8a6c9ed498caaca6c33cd61eb27d7ce4389b95180bf8fa4476ac88b1a9888acd83c4aa183dbca4c4687226ab711336b597b468265acf3f8ca6743c5727e1161c743b6d87640e51d7228d3a03d0d9b2263d2e2c847e4b66f2125bc4048298b84ada553b9a824c2e5f8fc282a0581d99b6778d34eaccfa0b2568b7e232401bebc93496a6da3f02a4ddeed683197d6b37d7054613a1fd579697180d0978e6e71b28017421bef0ae5fc2ee2dddc7c75f271834ed6b5255e083c78eef9c40fd86e0e7cf725ec12dcbb9cf0c2cd543bc45e1eaa4e78 +MD = 84f282d7f6ab40f7eabd6100c36a3d88118edeb5a153e50766545b82950aa271b76327214e6839879ef2a3ca1269f2dfa796b3da451e486965ffd47fe15975af + +Len = 46712 +Msg = 4dd1ecd3e8fbc19ee71c41b6195b469bcd5749f4dd158326eb3e5125eb87dd8be170fbe7ec31515784f1bb59003aeede5baa5ba037eb56b622e577651931403a4ad101551e1ff9087704bea1376adf8301f4c77c43ece452747d099f9a2211df105ec6c886ae01da49bc1236c5d561b3489d562f08017723686ed07a774098a4b97e11e62bc4b0f481807ec1b261be96b60dd0628e1355518620949fb7751dafcf98ab57154a4f7ea7bacbea06f83c53d5acfdbcde08c70356fb1db662a8e728da165dc44c2926a244d1c158ca8125132de3a4e6ffca15616168326681c13f38605fedd5d9477d86df2d28b406e4bffd44188f87f93f87942ecd9d571aa76d07ebdb2331c38e9c520036c8a5c009533aa4b48448d55165c4459324323844b9bc02f2c98112e5ca2f2f5469d402d828f1d5204cd19ae7f6182f23909fe07f6a7f2e0ca56cce335145f5efd2e8d339884b5dc3afc950e883b973e3a8451c40ca7af591819b006277bbd96fcc8a3c14b970c60474d8003e54cf993d36cdf36f1fd2e2e923b5b05985b9643c1f6243510487984d65a7b1d0b1812a9800de6ef5b2b27a7c5363e400c2691cbe9317f3d8b1b8590548de6b86e2f7ad5cd02193b8cb4047b3db4da63f78f18b5def525191082d9393e62536482e5aaaf06c3e6ca1b2a4d0f4821afdfeed793982fdba6764510bcd6107221bfedfd2a9be9cdc0198ae079da80f73f2256b2aad9383f83c3ad37d90d6728021903b86332d2aa35886089137384bff8b9c382b6ffa4ab3d8f9d7a9635af1e551e68b9fcfa5dc3d7b510969250afe67d24b9ca5071d1a94448ba5b7ce554afab1e91644068e7c4f72e3f6b8ef88ef52cf1be1c0fe66bb4387d685d0592f46664c7f269e5f51d08443221aa51e19e86989f24da3da3cf467a9c4bf1c8d51add1279101d56254a181f8f8bc593924af5408ba2a7726068ea8b33c9ac2f12147e54c08f0109700b6f1994c23fbc8130eba5459be63672e52b0ac255fea0e08dc47c2ca3b7787bdd97a2c0598b4534dca4376b95290271b05249c6957be6a6f33a291c12a33b9f4d0c4bb0d63ac633aae9875c02d26ed3572af8befc7638fbc159cc2d3056cb50b64784d4bcc0a7f4281615958994c42e460f7829ffa0405594add5bea1349046c5d3eeba71bf730cd0a452a68dc2aad9096a4886137c752ac9a0e67ed9df32d7d83bd9c09979afd4312edf1d73fe9b6a1dd5fa61dc5d4001fcdd7ebc4eb92b8a89e9e6859891c6e0c6101b68f0ab1e57ffdd0e3bbed549718aadff157454d2e547588577f39a40b90bf287f7785a9c392be9e4723f76f9d01facf808ef34c16e8d1247264ef5b5d38f40a5677f8fad743e871da3e2b4c9c41854ea1513cb8f8ce7a1ac0eef368eb6ac7504277aacba9f842f3a5f2d0141b4013055b886ab95c6d381149068cf43d8f02a24c5fe445c21a95caaf2830eea3666c9cb61bc376cb2dd3b216950427dc106ba77a17ee90a912a99e00c99103bb1b57babaf29018cd7612a42e81a1284f53cb08d68810d3e6474618a1bb3c7bebc79e0770f518c6e8b0be8f9ab4ac201ec2e96d68989237022034df99e8797dbbd2072ddf0da5a9a6439f1d60146c36d2c48f7c3730bbe384073a9cf0369031b4a45bd10f207de98e987df48a8b2b93f2c083e04b39d4fff46322f7af8fc8c05da5619e0917e9ad281520bc1f002f5e06208e3fac9925b5db9bb297ddda6a523e3ee339d4db311dfd23501e285ac2c0974b7842633af62bc019b32582ffbe0ee0d5a74d78539d62942bd4c1ac832ae12ca9099076028f892b44ec48a7e50c1dcad47780fe6675a47593754fb362afe84da209d2f0db37f8a48427a952769ca784a1197a6dfe000a29c4fb6d46df9bfe829e3fafd6ac38a0b4412af08e99b5d397a655e4cd0287bd37272ec56be2344a540574d0325dd8a8e2e3bec46036a1c98a49f566275952e52723d5ff2c53c4f54a3f70dc0bd56038b7d2abcdd236a6b2e5f4bfa782eda9a8821fbac3911a9126edb4fb7c6afe187aba77b9b4eb7f0db6310e7d50e6a5d431cf85a3b7a120e406c3cddd5856bf47947338b021b3fa1efcf5fff5085b691aa696bc5986644b04bd56f0dd17d70036ae6a7e57bb338f20adb92ef078ea21c530602ca4d6e2843b722e86c561f5a92ef128b2772b72275df0060535489ab51bf6b33d4b5024b4cf4dd1f85be0b9a37584343ad81878a81bee62eb8e1f740e65211a57189b31c10977c9ac68392ad453901680422b4efca3ce5848c1a57e12ead81ae2d15f119531189e0cb3175125123d57ea7d0cfb093db96d859783c2aaf4443d463f46cd168f57d67f0620347ef9b27ee2506287b930d72b08d86148bfc98c0aeb2af66c2e6a5dfb6c27fcddc84f1813cf85d6fbf2c64f193a4ce61637b2da093a5a17f6c40c52943ddf5454e95d969e19e20f5e9e454abf83babb36fcf753c399965274bfbb5d2a59f6d09fcb6b55a82730b6b8a4f6efa64cec88b0f4e021bf71a74fed09c0a644283417c854c07db863367212ec216755fba8f48a09b56c852b56b5698963566a1261d2d76ea6355734beec735e0ed954fab7a7ce22bd5b9e2d692cf027eb95257f44a8d20063a50c028ecbe3e2046e2cafe14a8426411791e1a85e8bcba28afbd7a642c3f240f65f3670b86a604d4e6484ed85b2ff89c8e6aeddf0415dce5e76824f47b12c8550d836295b11c02fa084dfa5ff6294dd9426fbce8d1bc5b8381ee80760a5957ada006b845bdfeaf38d152acf619bcd85a6d83244db1feba8417a729635a61767bd5e3d4861ddc6e03c9ecc34526692c82484ba078257b8e5a11286c36dbc9993207b153c14113d40d5a72d9c7bcacbf037b3fbdf2bcb12b97f6e8e57b1ef04472cdd592a1d85355982b8b5cf83cf604306eb5d947e82e36a0317f01ba8483ecb090e73d823419775695acc94147d390abab748ed22841141579416d4fbce3067de96c90ecf4b4cdab214dab4d3dd3f8c7a9c24b4c0d98586a06d664d518ac263d3fbc596c9ad3bd0866f47f86af658136f2459afff8a2881092b4a4d5382dd0612c7cd37b86f4ba10df27b2581d06de5c0d64fa7889de17ab755299ba9c06799c0814bb8449766936e25df06bf74674b963a6e63021d97b8d5736a00fa4c4a6408b2a6e2162f73f0d290d962cde92c8d19d91fad160f3484890d7744ee2c6caf10e1467dd63e59fe60bcd2005237a6f3703ac84b6c7d9f26fbacb72f2e6ab7c2009693512ccd0206413033a9f767bbc5c4e6d306ab6ec0e655d79288620e11e4015af525bee3554f9c7462256480554a3c63a6a67beb7f0bbc177019321e645f3bb3d4c237883a239a11c93c408a5bcb013babf386fbc4df5af3b9a844a49779d52c98f13dc499c8638eceb6348eb5903af548b571a677a857f3d5fe43a7927bf74aa97878a05a871e73db5ae7924be1101ae7b3e7f480afdb9f2de3d5303dadcb976f1f922366a8f34957f102a10506ab31efb68eeec73c0d80271fa2468056769a53b03056a3730b96aa432cc0cb4632c2c8860e9b3597151d2c7953f143bf23dbbbf1fd3ffa308ee53b180ef985ebce56d9eb1004b0071cfea5ba90396e31f8e310ac9ee85326a4bb74384f531b3ba6748cad3c2f21d54aacf8aa0027e9f21d39bba7be59979e73a2bc6b98d7757fe3a448933926714ac6ae8f114cc29c4abb6522ab0399ace026217b78918b7bfeac6e7666b0f186acb98cd0b71c136f83faf0af7f15af7c34e3c11a28e17916022a5b7cee48964a434acf256416204be40161c9ed9da6eee2d208ff4331a92cd184f2c3f3aa1fa459a2fef5dfe5f316b4f940d7bb4383e9311d8093912821a6b4e3bbb33d7d937b34e8a1a7f12f94ba3c091643b2ae50576be9b13ed96feb6df36f3fb4936afbb91d4541a5629d091dc45a69749a87151fd6612269e5ad0f68d64f052fbf195e455ce16556fad65c299314c4d23b75d829baaa5b7a7b8b937ea5ac968a8731c40739e39522808395c4f35eacc55c21a35d61efe4db64b18199a7ad782fb45b36e7fc735971be4bbad82a60abb5c7327da3125646f268c6e0a0257b35840e3ebacdecbb3aab7ad7d54c8143480a42516fe3140708294e73b97a673d55f35c835ba152e0bf387dceed08402f0c2c96267f05b02bb2e7e05f1311b51c5ee368d11e4b760d71818fd90bf4af4b7d848b58b7f12eeacc93e432f64c5740dabcf8d10db3a068d6ec77a036f816c02578e8901f8fd66bdf9723966b1394d050e5d52a2fc2181978e2ffca76fcbcb58c717775bec8efd7725a6531784eb6f549c8c7858c5e2549dfcced00d3e8ea5338d8feb09c82c3550e4471ab28e503d64ccc958a2d70112091100ae956a4e8c2b31346e8c1a6980e3abd11ad80c1c49ce15909e019e122c518181e2e0618fe29858c17c6361db72a7e2d0bdf8ac8406e90d7e9305897a161fc4af176ec2d74b034a938f202cd68d062fc28e84de3c175e2aefe21f37cd61bc3104a6a0ec991814ad473132da0f3286f923071d1fb8dd85e47105cf177081cf7d1f3b176d59ec14f748ed1c07d9f5b2c58eb211ff6edc08d08e7885a6f808b1ff4b2f42c3ae39bc9f052d6c24bb59122b421a13ebe2955f55a4a4e374e8791c4e350db36dea83542b287c73bf47df1d70f9998363989be20a602568ffb63566d05950d9eab35b74121f54f335f3fa4d5d21caf105155249652d8476a5e5c01a2c248336c88d14a4fa56314b37443d2a463728ed3edd4aeddc891cad05fbcbbec8233f4a65cc616f3a69bbec21bd0a1ca2c63dc87f44f857f6ef886cae6c9abd1ad1cf956115a42b58c63f6693c303cd193b74134500ed004aed4245fdbcdfadbabccea838ed6f61dc08464afbfa9c941023567e3e859b8f2efec4b98260ecf92e50b6e36bb825cb4a8c6af9c8c8471a0e0a6f39ca47865d39809a47bafd5537dc1a02d7680a59901adf07f388c095b7895d290656cb2fe2e13f3d6135f69ad24a855d04bc588d88c37cc7e8ca57fb0508981e4482851ac8cc7728a651c14060f03f0ffbd72743fdeaf20529fc03097b1247b974cc09b96741c4e687bcf1c86c7383a61d56faff67e7bb5a379c6623922ce8752791cd9e56e7a4e175c61ca54d3b1fb9f9aa48126f405531a239d5ebd2bef6fbdd82552c002493c4010b86699bbd4fb6015fa34f7c9b4c15ea42f6c4c54eff97f70c15050b9f1de8aa0be387c080b014d4c570f9084efc9180462d30e2636ee404ad919bc1adafc9e1359872641bdd70e49a5591aad2031f04c20dd2a282c15aa6c56f62dae6d602371739dbfee51434a14ca5bbccdaec28d8350d0c9e3393863e01e2fcbfb10d1c2c2f3c06e97310ea9b3b05d9f6b014498b1daf512ddc61d13ae1b0cbd8b2c16230fc1395bc5c400d5303da6ea0f817fb8dea5942ea0398d63dc33d52ce62af8ed5fc550afff72e073925b80c641963b96139bf544b4fc50fa7450d13f92703fc9bbe74c92cea3782ee2f1315b8aa83fda58a35f7d9f752e827d59491f1968b35e2a0f772bb9bf8eab27e602d0711f542bb3a51c01eb0eefa0003685f303791b55b42517a3482eeb9569243b4e7f6342312e8a72f71f2e5afe04cfcde4d60a41556111752103595792b19224fc3adcd195d038aa87c43c3944910c691a1c85eb073abbd9ce73a6994a061805032cf2c8ffa1980bdb61a2521aafd5a0bc5c51e212460b8ad21f7e7b67709e258add0ef116aa92df187ec76d266712bcf31fd6ee208eead2548f4ac38ef70ccdbad4961283f20f6c69a4135413c0ab03e6ec7cd6d6183ef77c4c703a69a44a45bb99f4f4ee81f5fcf459eece87c388bebe4bab64deeef14273dd5aa8a07e41d5b4b48e5ffd602ed5e128c0a22a779134a2c4cb5ee018e9fb61ca6ed5db8dd7c5cdaece1b5b96a03f5996f199a6e4afafbbe0448d839c106a6e9c1688c1daf55c300d1befae2b3584842de97ba012c87530267eb970844cd7c0dab98bfa6c84e3025cdca49f28d3eb89741110c30ac5cf2a1fe2aa4fd88789820cbea42f4c6aa26e207b02d59464bb90f3cf1fb4d38f05d151d627c79ea8c9dabb8f9c088091e199e35fd1f977cf3dc3338c721e750c5f4c46c3fa80e097dff06e933a2c12dfe8ae2cf0d9b2dafcb948bbb1cfa7f92625c48612e923a53c13edad324844093efed38496e2a9c4d3764713a4fff766c49e609729bd58f67facf900d48cf76e956d3072b9b3853d3cbee9c4cfcab7c4ce134903723dc6da48f43bf0e1d0ee48cb7bef7ec115ef4d1fd7555599f78f1b2bcca652533316597f31dc04c1dad09fca71353016d08ffd640ab44e69502674c511a00a3665ef7b0cac03c5dd72467c79972d1120ac0c54f39f2e38a99b25d6832a5fb5829dfa49d7add9b99b62f8e6c034fca848710f5ab4deea9ac0a1334a4d5e0ada9fa1dfcac87c866a64718de58791cd7df4e63f18900f11fc162af9d70bf7ca02f5394506c8603160a166ae81b6f7c6198dd445956d79cae613fe1f85a53bc6b4ec2fd406bda30321b80a02c336ac0f037c03c8da35653ee11fe44c5c04732778ec4a35d1918b2337132532b2edf8d1c3283b71edce1b9574a2a528650ee614d65d51106f2a61b92a187fe556c42534e2f844e8d822e3f62804095ca7acdeb657a70d0ce9726cef8031dfc4b8a37a5fe756e5d4a317058984add8902ac7a134823246d2464ff6ebc3c50e76df733e7b5aa9e8dd5497c8781005da6bf74578b7e066c30a8eab45d57a3bd5a4d31abaafc45813acf58976e85475d7961510ab67f7ac4e5bca6da2d62efdfaf69d823624accd2fe98dd45503d96396b98c0e826b526aad6d017d5516667245134491f9019a6f033c2562aef12638e07b652945ec7609a9e93bc3a6bcaa0280a4d0314d6f16a6594bc41ac8dac35d7d84a7473b11edf20a778026ddf0821571504a497896a9daf7c172e4ede53938357d5a52ad033e8c98bed99141dc7713e2c0b9c1c39dda73a64437a8633a0f33d00e8731e3e9f13e1b674de91ba51065999c258176ad32d92e7c1c4e7302cdb515de35cc25ec8e725a19e517b376d6715e8b9770d9ed3875571328bf6565fc25cd966c0bbb349e8f1e7da803517550a0fb351578348674ade9ae64e1818a23edc0dd34d6ece8a9fd2f3b9e953dca065a3643aa80ce9f6eeaabf8d69d0f9aca74b65c96150231352355facfb6be9e8008d95d5b71f061af95669688dc56bc792277bb99b04336cc6b5862444c1e194710aa2a3231e2f4be14e23382849f19b95fcaa1468ff820f53cff1c0440a362e2dc725336a9ec7f23d1e775ca7e32d8119379b6a39b681639fe13d0177b96a2d9d2f87f6fc1562a67323d046ab357230a264aa3bbbadd411e1a5d2586e43f00b55c0657e662671f11a1ab896a0a561f2a81061093d59dc82ef6a2c45862e5a5fce16283a2726883a985fbacd06a76f6fc0a75a435d5f1d4f1fbad5595dfd1b839c9d5aaabdaa181b746f314a6bd00d0052a5e08a8a0218dee91457f45424c62f17b27740a835a3ec44c5c6af4ea3cd4cf498ae4f420751aad2131ea71739ccbae61208bc654dbe557fefd55c0d9722be1d0c2df223b35a4b6113a3f2159091af7e28894e7346b9cf9c6a07e1472eafcc325cca138dba85292cb28265bdedd785566263a760d548b310b0b8cf79deb70feb270d341e7174dc8b5c34629e95e0c4f55c3227ac6dcdc873607287242bfaf19de781d4247cabce039d2489263d6ff6d1827f7fb474cb483ad5cfa8b49ace09c10aa2645e309c862be1fd39f328b7837151a5f0278ec3eaed9d2a94c9afb2c0fb2d09751a31c99d7ac7090563fc6a036b564029541039f8f2231debd1df4bafb2bb0176f6f4a56c76a8e27c172ce9ef160cc8abf8adb02aff14040e5bbdeb3e8e3134fa62fdd28b862413fe8b3ed9bf07f1c9c853bba8d94acc878cc5a033e5c42c0e6fecb1b3634fb5080d1eb69bfbc781ae3f13ce968c8bd912d7ae3a984e1b081857f2b4da9c29d859486008b31dcb58f040a75b0bcd38a6308f83f19acfe951cd43237baa8ebb0a6200fdc9b1ad89c42aad8ce56b13b7d06b14d549bdf3c595a7a1ed8ac5c359c7ccf7265e1a13997fd7b6430256e8afc41cf810c7645216403204bf469ec2acacf46b985a4ef860d861fb581631c4771de0a9d4ef405371edf6dc2743a8152a06730ec232e2b4766a63fd3ab59e2fb43a30ca7015b +MD = 2612db4c51a0b77013444d168d31a7ffc624ec2de94ecc58e0b299bfb7b6159fb89bfc333e4d2e4d4d3a5a60794897b2583ee2cf7cc31c646a9bd9c89b993d64 + +Len = 47296 +Msg = c9cd0c1a7ce56e33b6e6a03fe9874ada926665a51956433ef8fad06f209317a5981608a46882787ab57069b12deb8cc9a68304e6019d6dc5550d1df44ae7a943c291ab76bf1dc33c81d6dc65ee19b14f37678fa1b9b75c3c2111d86fd458236a8e6880f648615863604182c1f4b9c1538e398e40074e188ca52d8a4787908c0443c00c8dcdf33ed59bd9e12e0672c5bcf4228a2ab407aa9b298abae42b34ecf82ac4d9a3147e7d7c79c58315eeecc374af4a0ac7888c1953f54ff0ae88ef4c2e8b996ea1e7a81e3e442ef0dc72d0c66207d8967f4a856d9b50a5b40d6566b38eae6a53ed0c192805423baeed5bc6d36e46f4b6bac499af5a84b48f698b442900da5d11f14b7aa3b8bd1547ae7075f480b2c8f3e0bc71e67ad7a3082ac32fb66c589a2f146e73983ffbe343897b8630809579d459fbb51ae2929ba8b8d3cf63ba714a35bd3bab0e8245ce28e542a090563532e28d490c537afcc3f57b83ce37d26a95ab567ccb0d68e2fe80298f6c1aebdb19a3e56d1e9a2a5f4479dc9dd13b9c8ea21a46f77a9ddb1c9ad2bf2892d825ce56a1c73194f6da0145bc41e7837501249a0af57561c7c339cba70ed5b9d2ed5812649c5b1670722cef45132b89efe773a401cbbd28920682b8867e60890f2cbf7572cdb44b0fda266a9cbb2f8eb138c4e989309976078d3f8af7778fac97c84ca655c004dcdbfb37dd499fbc38c1da5f91298ccff32c40b86882612cc772ab47ce95df1370dcbba970d429992f29b78cc36a4728480b07347bb0a4fd85a9bbf814b891a8b01b03c24dc6c0901cf1b593a7d2c96c1daccbfdea08a8cb8b42e2a6a1483d8d449fbccc99a7cb67a71fbebb66eb7a6319157259de13d65d8448069b9ccd4d88d370cc0d7ffdb4e777bdb94e283dc3d4e550e6917f57947d16c0111d2ecd286205971dce2552e2d835d28d92144e0a8929650decf45e4bf1e9b4ea757fd236e3841b9556b32dbd02886724d053a9b8488c5ad1b466b06482a62b79ebb663dfd2f5041eef5217ad2c1983654f0cd336dab639192ffcd345f8f52ea6c6fc098bf8035b9fdf2a971a20902e38596855eb07500acca7df51581b7dc45950784aa21e5427ff6f62356ca4947085348fb83e9602d3d46236b204b3e7f57acf53b18c0a907028e722790b81cd523429a8849951739e18a92a7cb087dac9f18cb4c3b185603e018f94ec607fe4db2e80dc3f63fe4c7280c3e339c660ff49a6cfc40a7a566c9a72aedd15d16581145981527303663458f4fa8870ad06fe7c82e0aa0d4d475b8b638e287cc7fd4b039e7433a7e351d4565c9442aacd417e6b6b068f54931ed51abc759baaab0debb2e6a0a6646a87d477a0da386e8ed9271c4a8a9b68b5a4844e65ac5e26e35e0829174ed43100cfdbc0a91493445895a39908b4f5d019a10d2f477b9a78d9b84b6f1ac6e4960df2913b5d8a7ab4933e97ea8bccc61429dd1bc548297729f3e25c8bd850ff1bf9b99fefa5831647a79cae15bd1a35bd4c1f541951001cc09ba6e28838344d492de9ade46a498e84fc778e2485e66b52e93060324b46b2c538ca866b21b9f5a70f4d622392220bf4fa97df1eca77905b6ad9e8181c4460c13117ef3e7d2820be08ac67b30657b51d0ac44a0c7616cb6036e094d4ae424f3bf055c50933c9f51481cd639caf2fb38992c576f5700b44eab50d0b6de788a6bbdc4cb2d22be49d33e079ffe774f42ec0fc630de1a09e24804f2af6ebb15d8ec95dc35ca34dc13fa38e78e39b3cec4d48ae66b4d9ee1793ab6cfdfc57f30b2feedb846b8381a804eaf492b6c0f16139ab129615e342bdb8f27450c6b895d8b0b1be55887bafe01492798f215f7a9919718ebad80a84d9bcddcfe9fb167e0d3a9b6fff5b91bfb296238436cb7ebfdd16208c9ca5539cb3c6f4e590447998f1f433544a8bcf9966b2237f505d28a8745842730222c87293ffc01f0f49eacace0701d6fdc13d2544921cd1a57e621da8065eabb5fa70efc18fc8e32db170fcea9a8d5de2a4e24c935b95e2fdd73606bf49fd9c7dd353f9849d949ab12514168fd66052bfddc6f49d38171a200fab4b0248a6ae21567a792651adad644cdd0103e3011b5d13f106a84f29e1d6cfc9d4b92ce1496b2aec58edd49a820ecfd3a38ee8f82284ef6c6bfdc8539fe6bf99892c1c36d521f7b17c224ee3837755fee57a0dcecefb183e09e4cc1dbc19862253a2412eba0c67d2cf0ce61117668767af0d7c0a868c376fcaa48310a037cd6d1865c25060f4205638f5c5aba5a40d15ea915a34b4fdf408958714b3b3083b80c2bbc8252fa1ca459e23133997fa8e107c4cd2d4bf17f60f51d3a78e5e53796537ed7b3490da0ea8ebdff744542db2614f8709730fa2e68fe8d1662a07e22e2461420205e9689486067199534408220f4a892a980c666b8d41c9770e187b03c326048620a31403e7d72122eecf528622549c5bcc1e2b2e13440302c2f7e7a04c70792e0e27a403d34637ba9d5dd285a35706c496adb8d728d9c630cf0eeeacc626eb2356dce03e533bfa88e95651c8993a108f7e21d60dd5e85c28bcc357d03a30a08c802992596e9eb3b5592297f70ce502e10ce24d7821590b131180ecb3af76e192147880ff2d57ab6876296cb9043f24e5c958e5c114141c1957ac73fe2ddff55d9b3073d6964e27cac6d498b68a32bdc03ceb6590b602d76115aeb558bd5526149db83386b46c7203d389e297a5a6179dee04978c10098314d3f07a6a65c0bae0a07a88b88c97d33a25b114045e8178a26509415e291269591ad989db2f06fae82edd3a1428b8919842b5f4a4bcac29f72b642cae0906d25970d1ac5423102e55ce4910418fb8f544b4fb4b20c70f72c5c87b2023b9cb043c6040a97d48c69e4e0926d4e8c97d476603ede01f87929a34c2b8e565404b48296f8e49fda61091fc65dd4cb0dff1cf28b5f27d4a051eeb6ba382421da66ce5482724547d45d751866cd44142d8fbd4b05471e8494899ab93f24000f3f41825c20f6892a42e012415a6747a45bc82a02668d4eac358ed23d3385ce78e31364ebfafc3cb1b687853d19a25c162937079b377824b613e009b54fc3dbf9765aea966909ec689fb2225e1d050dc4166aca87f0be3d3ca01bc5b3dc64b50b598687ee0395f4c97f0e9e46ed05b94893c1e74b1ab5f4aa6a907aab71fee6291d34b1555327025ed4eb4d69f23b0b1e21eae2771e05e779f3fcbd2ea8d8ebcd21d41b5ec043719321d6a459d50b5fbf6134408e93048235bc9ef19fd9a9327217f32a7cd361ef00e65f5778fdfd43a6a23c85e3e26851682525bc819ce656b2600043421508b712b2f3cb59e587435e95622729b477d18bddff72665b06c5088a8a0a210dbe8652e822746f244fcb519b53a8c261d99f1b47aab7d0ac8119ef07fee39c15e9c94c2679e74b22bd682a247f8f3072f3f680e2a5f132f9eba1c058ed6435d610fc68de58985079369642d1545f16705d84773f8fb32fdbbd19370dc41060b6ca9c33704d0c218061d23622507cc6e28cd548dea67209ca6bccbd87115cbf408d25269cc5c730e0b5a86e88128cd431f8458010b8b2533e7e58ce6563cda3fbcf23dcb4613e0102b885668318e3c0f72671a7a604f8bea07b29e42929c7b1511714a0479de5047ec0f5b893b2361f9aadd649ef39c98ea8d8dc8932d1ff69e8eb742bd6ea60ddad9585df4a9cd832a4e4dfc15cb58965b01ddd38130ac9201bb2cec9d2b515df277c924508376ecc9e621ab88f06dcb65ec0988b6a22a99672039124dbac889b750cb7746cf05e2fffac0399f6bc1802ed47bacd78b8351f746447a7423f4d850ebc7207e9762aef413926e01433efce1449a0a8ff49e03dab4b7edbb6cbc94e6d023e59fe27598cfb8ff125780cb89a4c1ce6983e463f637f2f833ca9f0703a088498f52b926e7b9726fec482b4f6d9fd57f905e63ba743789711448c3bf6fa79a9fe63e235de5d9c84ac57d4ab4f1fc071548c6798bc302008858dde1cb1e228e8fb10c2802d85842f8659de8e15de0dff859632fbe2cbfdfa7c6320013593aed7fba63d0fd095d68e194510abef975e6918bdf8c3bf797af3528ef287f67173dd9c7ec2436c011c36e1a41ba330ce3a346a6df98ea6cb1f69a44bc61f792e00904a14e2b95459bda05be14ff28e0529f80710e5cb4d3363f3de23fb46320bed6681032ed03df2435104973e285bbe960a8b511df7f734d0f88cc2328ab5ad82e6ddb407366d7d45df584056932e6d070243a932a35951ff0e2c90ec6b78857987bcc1fc4a875d2d91e34739e17a930575ec83a43bc81d369b3a0a9956ff2629dfaa978e8af014731f12464891d4b319bbc27ae34fe7f9203641a9b9dbcdf22c3523bf2e865c35aeed81b81312a16fac6a81e9805e1d784445bff8ce68499be95eb4a36cbb00334973ae0729e2750b4608977a0bc4fd0d0b601172679b1665f982e9eeb997a08fcb47e3cded8fd4286efc7f86d632fb39fe1be290e5d298f2d5681feba5baa1bdbce0ef76de8923499fdca6aa80168c8184cfbffef9ad65b4f564d334b182884f96c51d9c8d5d06e1411f994f89fe457647f1e5f6f399e14ee20fb0645d8dc8b7d16afaa97a79e3720b4be4006448aa8aa02911236416b00313df13c51a3ae78905490318166e3d9e56c80347af84203135ebae0edba2469413499a01682869259af5c372f1b899a8ac4a839fbc3f4afc71a03903cacb195458d5af93d7c4c2201ae7b8449ce77c338419c1731ae88f5edbed3ecca20facd66d19b0e6d9ae870afda56e07685959b166dc596c5c0e71dadd291ba401de658cc87c6a84fe342c48cb953135e4acb6c4dcf8b7e5f02f76f30dfa7c345ac5f809e37428f8a5f4266c0d5dbe4aa24017c04ef5796a67aa1329e6d7ccf82d44d8b0569778bc716d19d72b6571c021c1f1564568fa74332ceb01f0278a69f9d96c228a6cd64ae11d5b3cae22d830d380d7d958b9d79dd32642fd928030f430f236d3075ace1e65737eef1e3c7e17482b3fcbe16e7d41d804df8f76685d31633dcd4445f7ccc18f0e0970f418bfede02fadc0780d780ab266f539f4466bac210a93e8deba5ebebe5b7f54b82e3a2f4bfc8639950d3442e2cb487fa4b0e8cecae73f532a18f07083da352ce3036945ec107db9c0e45ea4f9802de2f02e6113e16203f5c09a2e716008ef4c0d2eb9dc3109d8a37439438b574439e66f25411604f9a6533ac4755be365f2448f16c85ccb574b9937628f708c85e10c9a1c153fa61c7aede11e417a8e8fe2a8e14201420b772afd82f69eef29a3b7c7d9996a0b355916486c0e3f67b1e524ebbc36f11681e81b62df6bfe719f4c22aad6239c03332dfcd5242aabae0de45d8f787c1464bf28814ba5492a825dddb617f82147b230098336b1ea32b7e32be0f69e67e79723c6e12a8d04afbbf5e6e6b1b838d992bc8a6dcf8dc3410fe21a63d3a6a0e7384041df81ff34fa68f7d638eaaed0ee1f291f0112205c73307b3e3a8919bdafc2a507c0e464309713c44a2135446fe1c21635e191120c35a42f15e98970048dc0c2a739b464ae1266fbb13424018c5125f46d83eecb5904e56e2ff577421c1dad199eae947903d8bcfe99f6297eacb8b554346c6dc4c96d7ec8faf2c4f86aebf21a6c93e709c866a05d62cbd8045774fab6190fa086e3cbcacfe545e50b87553a657f8e3e9f62589b88aa39924b0332508a99f2299a2ecc73d39d736a13e805e05b66020db2680b0910eed3fabb367d714215986b6710ebe484821fc67a035a8e9cbe73c6eb401a93769f0f73cd6792b78d3a76d8862086a743119f8cd67fef8f89d7681c9290f3b54a39608ffa2d2eadcc7722136fd43936afea671f81a4218da34f635150d112d8dc5c6bc1d9edadce704a0e8e9ca2701d2b7b2b1134168ce38984da179e671488cd56859be53f9c842921a0bc9521d7b536224fe4464dae3bad2650d1e3e9654f9de6328094798779579c9d1fd1c8bcb9509e4a1b30cff1f07e824c12b9ce8197be5a17127041db287c19484aeb0dab741b3d9e28ac03f49c8e57404c989cf5ebbf4097c4012f23fc073626a03977308ff69ed08ee09022ba4ce3c20208cb3ed611283907bf77de6e9971dcd2558bc857632075d096eb08b44ad645b572dfc8c1448f7f6003d2871aa33acf33b7b1ff84f160f270377b1324f89d3fe97f412047c9d4df7f86b5aa6aa51f7256e890327311deeaf04ac6ee86e6b7350076a5e1c42196dd98b0a7a4f92f8e6aae609d0dcc5508a3d33964d74495a2b9bd016469e0ec440e4e0a1f232093161ccca83edddb3b6cc18b8bcb7a0875ee3251980335087a7ac6220b82918b80350d1427fc4f2a2579c8abca61532d17f83380b318efc56c99a9972d887c846769b027886bce53a3ce3d967ddcdf3cec6f41aceb0bd682332f3d2ff87740c5c922aa7911f3d7d246c874ee0e849ab273a1c1389852a5d95eb9d55ee5058aaa260e508b8d3af8108ef7231504fef2283e4e46d64393ba254fb826a68b89b6bbfe7b56c13297bba8dce8acade9b291f8bca346e88535a01096a89599549a5175c2f801dcaa907f05c10b960b3535e6ce7f6f5601d5bee405c4199699c8adf762041306106dbbcea1dbde63df6fff5cf3e700d894ada5f28f4879ce4a603af4fb424ab81ef48027277def9a7d0285811383e6632385714817a447910da3d7e6cbfe0dbc4ac77424e127ad9e76955eefa7e6ae7a20f5a77139580183661bfb593ea7ea67466f0e24797997045e80e1f51b8fc7723f66befa5ee44619d6211ba8ddd05f6d7443c4c25ae43a50875db53e08efa00fb1513e4012c973c8f06bcf7223f7db2376fe2e6b0fe81607a3a45f26da66e697395d9beedf88291527547d219b9efc2da0e6a1ab0305a89e15cd364c1ab5f9ad39e46e632fa0c482fd63ab53cf2620e094a5d4fecebd70986060e12a443d67a6357e1c298d93d496e511e075193de7d0b4b42ec2dd8ffc6b15e7c62dd16daf36be932bbe63e1d7c57107a3021436bf92a38a15b3b9fdaa9aa8ca7bd36cd73ec327cc13ae6d0b5c93238d69874ab126aac390303dee7709ab8b9178c7510a94e013617a55e380c1946f4baa71272dab6da78ee4cde58ca82240d5235638685ff2042bb65171d2a52dc6aafc5c241ccc6fc1aed9e029bef4737afe222c8d80ee8d7c635e3d928185e3cc23c5a4dc0ee825a4a85611358e7d336c84fb96cae4df16eeb0e866b01dd23ae25eace7c964ad23b2e40fdda36bb0c6c7f1f6416ae48032cd8cdb5974f818b7abb4089156ce89fe9eea5db1cde72dc20fddc8a908309045ab6fada23ba0d7de7abc6f3e0e9cecfaab33c61a4f8142a99690d92a0d398de40ac1d5cd8ec88e03e1e0474a7b6064cc7a58ef8392baadd20ec3be60f47fb7726e3bfa37e8afa9ec83b8375307a98fc88eb2208a21f3adffdaeededa4863cb954826717dd3f6c9eca2bca5c44de8ac934ae80faa87dcf1778d6ab0f2939638a11b29e20bcb0e4c88f156193ab8ae69a1515313413ed6e6dd98dfeb4640776d4a79beb26e5886d045e22d1802d25b4567149bc20ab1621c967fa6c441f997f7e5c64d6911e6d0c3a7e79a18d9257fae79171a92537a1ef136b467f27209685707936e7c93008cb5238445921a1cac234bdb681aa8135e1332d98bfc630a791924538a736e300b134d4a882a3232313253c40cb194f7bfd12f519b3871674aacc0a939d40fefdc6c99acfa37de10df6a258360fd96a1b4d960bf0e3d39ca4d8060e6e52504ba913f7d1e14416a02e719357c0d6529abcd9a8b647d71388df23289bf24ccc90a99fa7c305edd62b2e8fe08208a6eca606a731404318ada3cf941af746151e96a873c2b664272549b6557221330a0f58a3c217ef0e2d0bb51a32c46a9435ac254c952ef326796bc16ecd2f7c6c872376382f440cd09e938668060e3e0132e0053d0fd5c2726c105cfdfe00dad9a790c970f79edeb0f4afdd6216e1b9b79621fd24e99d6a70877ce20cf0cd85a2f1be19f0230fafd7b6c683af6c2325dee8d6d6a92970354a52181b42ac7fc3f0ed162e63bb7ec56d6c3f41f810bec89db1695873d9356925554ace4839fcddeb24fecf6fc5d26a999e84dde50898eb1d78414b2b00d44f2c197bc5c59f2e1bba1ddfc6bc4bf5e383d5fc1f1d5e9bd586c5c67778a7342f842514c662e7fcc4866022d9f354ce7b54980fd1491aaed0ff2160a403d53f5158017b9ac7184d2276762dd1bce94579347025b91042b822b01277997492dcfcce361a099b3a0b7bb3e66a75be1142244ae4a6a11be0a3 +MD = d198b2eb281dc94bf3b4f6becde8362cc70cd9172a9e9484a5977d6bc6cb8fef5ea05a2311671120ef48885101011e2669edce9732bde2c29761965058c76136 + +Len = 47880 +Msg = 4a0281becd813266e255bafecbca094597c34755474e16d9307b177aa06faf9ac4b40b45c9d3616442257934cae66df7ea8badea3d554576d12763aad19513e9613d4ee0ca5a33bbd79694997f20b43dc3ff4f06daa6db218cc80efddc6da0ffe9465278163d2fd46951121431a1687eecc63792676660412706215a0820dd45247620f3f6a5de15c0fdfb8c299010212b896d772cc05a3d6b8ba3a89ed65321da76bf3bb2bac6e7a34358ebb016359049f0f79b71da537f20fc9cd1e6b688fcd2ed373692a371b3dbcb30180c5b5e320ea2dfe87edcd26e0e0414bc28e9063fd58491cede8967df313c8bfb8586136f41482d459aef6072fc491451ac975550abe3d4eadd932ed56a3f717c65c0ddafac89e7990f3b84f3b473a378b9e6fb991cb10871d8ea50fb517beb83f230425a150e17ce23e7c659fc2bca1999018280f096354d17b555bbad9900f876ffccd8457fc4cb1f1bae0d9d19901c920e726fee3c6465e21dc37c4540b9c3375403920483f7784b01c5755fe4fd69ed3651cddf489da1814a24a5e2191ccc7e586eee19c2b7bdeebe92fa093419e9f2a0a9028b65e6e93b63ffa04ccb34fc923295554ee50c82517d9d0465b3ed82e8750176ba3949255a91ddd44bff0639bd0b00306994feafbd646ffc3907801d19dce291346ccd3d24fb45a9a75d9c6c450b38e53376962c789b8f484ed8daa3cbfed3bbc0a77a19e2cabf87278cfd7e7359c4de7434dbe1ca4b85526ccf04fa47025c5c289259a2db25d3d6953531558f1e2c81f475d6b7fd9cda815a93050cd51105dc32d471be59350afeb7ff41dbe181f9387ae28d9458b5153ce2cde5bfbc5357a3a715cb56a221eb67559334f6b0abb26ad0230a6222bfbeedca25adfd46efd9194eff6d53ff12ff7a3998129046c4df7ebcdf5507a4e15efbdb4264adb90e14a6f138619bb830cc9d2ab7e390e9f308de07be746d26447cceddcd12b75ed78eb35668af1815a2dc39ef98b0dee260b6f1796a717aef0fa0ce986dbf027d73d1a646385db05e91b7b751e280627934701fd9885318496b5263d4cb74785e0965e9894f754dda24e37d183e5c04f597bfd0f1c3232e7a801bf5588f390048c2d0e2e757fed6d284eaf50c534baca0b02a6c87c0e8a3cb7582eced60148285c69cfb28f501338ed85486f4ca5542c0a8395b642aaa61847310b05be60fe75b3c509b13d3854c5649a7979a4a82ae9ea6740650a7724feda14ba96aca3115134c75297299920972ff6d92c47cdbd882d364d312df47554e28bd3fe1b482f5f420920f0bef305229212dde3b0767a8b357902b747c315bee2feedb8a4b0b6f48dd2fb4a67b680fc5d870e3c7952f077b5980773c23384916df65e32b38d36c55aed5800de841288c4bbd092fcb39db2001bd1d337e65070e60aac18d23e2d265b90adb07dcc485c7a39cb83d538f0eeb78ce872135bf7e1ed945db78b2418bbe26592d5bfff80ebd079558b7d5398624e63b1bcef04e948e72bf9bb490f77da81e47ded2fbe5acb8a0315166f83d2d13738d4301561b32a5559e6808630c926dc95e5634759345fe95f70b1265a5e900454b66840f2d41aca76da93dd489b0544e25fe49180bc2d80f70ef83c479a43287fdeb1dc48da7eb93b1c81b8a75c1a4d5243cd889540c8e36226380bcbf45f25f2c3c951d414eaa3ef42c6a2ed8aca688e479ab737609683197d0d3f581b488f55fc0b3c1531c31d3bd3df267bb59a28dec1e887c7aa3ae29579f4218c6d93c721edf4159cafbc77895637bde25b0df0cc491384c67c1a745e83696cd979c55fef101058cafd2b6550306cc3a1e99a72ef53c838c454b9caed4ff96bbfbe51dc0618ec903098844948f8eae24aefc401a068630e41c28d58ba3600c8bfa9cdae1f5ee5365e007ba5ac163e944dec1f3f97fd609fbf5429a05dbc3bee49ca9d588368a6b5b3d3660d222ed4541b5d008f3e996d47ad7803344068f766feaf456deaac8db8d27fd7d2139958ac43b11c72fcb2d5a08cbcae76fab2cfad4eb65a50bdb116aa2a6445a728ec17f74796d78d6ad03634ed80800af530212baa7e5093651cedf43c2f340ebaadaedfa76ca620f1780b7f40622c42b857988c9275acc889265031784f375b414499cfd3b12ce03920c1da15d017c0cc9f923aa72ae342828409ec7f32a41f654755426ce2b04daa50f5efde68b6f79a7eaaa0590c78a3e9bc578fa1781eed9f3c5dd1d39ff4cbbd9f142b1a8a9e79ba8b4e6818a8f15f4715e5859f9e0c38478a3fe898474eeceb51a9165ab442a9953bf9fc767ec1f703472078ba03007206b768112b574313dc1f213c0f842819c31739c7f2fc8eeda6b684e39145703d455a52c61d6e65f2d85e2906b968d34ccc839a750eb0acb5b9faaf30b5e3fffc9bd9ac81eeeb1bec88a50cf0e8d0b8b50a37786e2a29afe1b579fbea885ce42262bbc1cf106bf973657a59950e6a6ce51479602de5c60cf411baf79b991ee16142773f28025f7319f744ab6d9a84444f63effe3ec214386f57342eae58b86c1bb3a2710765341d62a6aa5ee52dbcf36680f19f1b3fa2e6a61e8c0dbd57a7e8c42eb403f799885ccffc0200963882eecce424bf4dcee06c4aa0192123166bebfd2c3264731fdab5c47fe22ceb3b649ae515fffb30e06b4dcfb471e57a0582da2924942f048899cce2aad1206eb6d08c419ef9cf7f24920fa7a41cd74ca56b57dab05fa0263453e6acf545a79b2b553754d7a8a8830bf32664f77072f586b3d97447fb7442d377a785f7b61efb197120b1686302e6f70d367a3713552f29cae398640e27f4b69393f01aa8f30901a2dcc9b9df8b15765e9479eb8bda33ff3eeab99cfe17b68e36108de6a4c03f6478c01054649d891a55d4c67d309ebe877e635a4b41e002aabdb1b1d4200328b2418f17b0a8b6cc53818bf274a7ff194307e1fcf78ffd639cb90c0e8bb1383f8bcb7e6266f27369a2701e805a6897fec279fb044a2eec43e4b673f645beebfe51452262dff83fbb979ff0e2a6d8e5b98632f3128ba5294e13147dfbbadf7aef936d2fab9420886ca36fc7abd2af64e3fec17eaa648930cc9871ae915369717dd291daaf2bf1e9e7466df75e762282089cb4023e3d519f59f55c7a5998036c339f51d7efffe2e0a5f129045d09f8e99200791240ae84b160aa1365b70123d7bb4a3b8be09879e933442f6329f688f81a9a8f134410a9339b3754f53c1741205f639d8b137e3d8019bfcfb867d46939fcfb74a9db0c2582441d8fad4b52f1f29a8c264a0b299421c3b4a868791c002bc373b83a5819803a05dd31f2874cacbb1724344d3a13146abbd33807f045e45a08c3c8495d914fa75af6ca69525cd7d63fbc660922d334b78c8c0cfb4fda8c21374c335b5e3bfa66bdead7764f1c09f09ec52a0257e28b94905f75c6fa527e2dd97d67e4cc4206f4a939e7addff2c9869ecf0ecd3bb98f7e71ce20ff723620dc59f8047a4a7c0bed9754698477899d04ca4a72ce60d096f1ab489d096a0e1ac9531c67803b225f9e12dadb7ec838daf79bb7f48a49b0588a975f28892442d2513f8b2f9b20dd98a2a62dbc01249929dbada8028568e13aa5e09271d3436cde208994bb2f9e164d77cbdd99c02f12f02d5a9b3b4430dbc3dff153079c49f49493bbf998b1f564c4a9fe6ae3104a4ed4693cf1fd5b54186a9554413828aa62ac47610a56d6e931b495a8462695f8a52d1bcf5cc71f251fb57283bda22cd74f7ba7f34763e2cc1583e773ffe2b5dcae80b18c2c3714366a3ad40a58d40d73038931fd414e8a2078c90bcc1885e448d375d6edf0bbef0a80514642832c4ee0376b61e988851188e3ea7f2af0bec5dfac62d88f3ac3e413ea9f55e6cd3955b15378d4427d963d57df6ebe1b48cbcf03a1de42ca7afdb7e5117b6f41a779d668d067f592a0f0423fd3dc4507615b64574c4eb23a31b7cee08d8c1efda27c3569468f42448331e4836999a089dadc2a3d144a8358ef809da8c737c1653eaef7551e7546e2a4c988d4f95d5d2d25dc85479238529114f698a047051332ec80909ed0a08ff77625a3a71b6dd74bd2cb09e93ece9c9d32786469958a70c12c9fa5b8f59769fd87e4c97c3861ab6052262ca47243cdb7d88475673b1e56ba8f6a8b3605d0716f5a656ec6e8cf5625247c71fbf55e528b67a9401b90675169856fc59889d232b75e560809950d43e4ea4c5e720064e782706559194dcbed589f1de942ea233a80140529c6d5b20149f40456895c0de937733724c2bbd287224d037ad7af29d5340c11488123442aaed2330ec430afd404f0ad47ba7301bb310faedec9517cbf4db6f8e8caf63a0c8e1566cb9556c1349579161652fbeff62f577ea99a79923557952a9f06c71a43822e0e317f16e887436d20254eced3c457d5014fcd7fe0f3dc3734bfb72e5b5c159c97b504099c58a95d5a08e05483a254e8c555d4ed0f67360d95df6e9473a2a2e1a1eab697430521ba0215ca35462c910339403349640c0f98cc829f9209d3c48dab36f94883296713d6f06ee9b1afb6c4eb937b0d954ec369572dcc8f645bf501122e5eb5b341c3eb470d40da4cb8109e4ab41ea209cbfbefb455781549a7bedc7535593779cad2b0b0e0e29f7de2491fd54690bf37f013ac628e14abf0437c8052d06b764d311e04c2ffb691db9aca9a19bf73bda657951ff02c44bc1ebbd89d29a427da84210047fbde4f69dc6e1fbd96832a15eb6f0acadbd46aee1b7d3d737824f0dcd50723faa9f11f7ff6c8b2faca3636606db2ef3d840b098a8d0425a3bcb76905b64fe3bd7bdca95cc1271ed2335d2b15b3afbcd88734a339c9fd1bbe65eff2ed8e87d9d0dff57f88b225cdc4504c7abe43c1fe2c63e5ba7478a4aa24023320ece43b810554dff47c40314a41af98a7c294961db99892d1c31fa73b652025759c4dd743ab68f0cabff1d61eeaafc624bb2ca8a600a3c06b9e05816a023e4b536431e7cc338adc44bc5d80b62fef6994008256218203f2fa6de0af908bbaf95ced26e9754e38f70509d9cd9a71dcd7585b2c4b1ace37af00cb37ae594234d3f49f9358c95c01e57e110d194660f6b3f3f380d3fc35bd69013e50ea1ef62a4fbce40db242dd640c327a5df0446ddb63e99236ad406913959e2fe30f7bf809e118530c827c52ddefa49e42ef1f08e98bcb9f942371d8c8d91a28647adad8622c89750645d04cee145705526230b2af8ffc745fd31af54b8817a03bb8c607b176a2c28188d93c02fecc481306140babd50ec8c028a64f2a47193fff35c8167673d6b414a81190bb2376cefb2753744d1f74f58bb0ae66d37a8140159e5b753f98a7d2264ff3fb8506e9127162597d31b3c1a308f78dacd5b70269254eeab46b5988a53ccd0adcef3d85ab2c23a086c8367729de69eeb1bf70ff1394c41044883b1b95decbc0a5582bef017207c3419f1bf81262942bf5ef2ce9c7ea9a46b614b1b32c72a8afe56e5687ade96b2c0e14d8d6f53be2dfe9e36f550e9d4e0889af51f1e19f00433d7041e21908ea657cd7f1964ac0e2751e3aacc340333bd02fa6905a5dca5f04ee3c7280db46f1e9fe370ab87ba81f86036369b71532f0282899015ee97b017fa7f16cd65d2a1e3402d068b00048067d29ec2a92e613179af50509722d27b41ddb5d95752728cbde3b32a01f812713d4f24363f94b69fe8325692d268166d359f8cf80cfb1d9873307cc554976dbd4281cf7aa5cbd9e218b2a43f0fe9e9eebde90d5b35895a2dcfce90bdcd049ccd3e0da77723fa5263d1d8403d96ccd6669f633eea1923b2b39766f7fcb4682708f99eb4130149aa89da4c3476af3a623da4b4298e02f2ac92949fb96851ea97d53adaff3786e168bbfdb588d0a25b17dc9484d62d361dd0328e22dfebebb3739ecb698fccfbea146300bb4235b6567ca9377d4bb0fecda6fb4d96716ccbea43ca72f46cb8a88b37e8ac076c8c3454190d55459200a22ab75698a475d23ab890c1f8239fe5d5ed58b2c9410dbd647c7771b584b3036a5b8aa938f4f5077e45e0ea259d2f39ca38ff291f112eaf8ef71d3b20e3b4a39e89a75df62df8f2dfb8beafc00b249ece93b4b5751dd64cfaec93d55e099fc785db97db98f7877ba739af77931487fb2b2600be95100d7bf08462a537a07b57687ae18ae6fca98a1cf23dab64615f37271a6aac4590db24b7e71115734d513a8f8d0dd1aae166078808efb1fc99b43c0b977be74e45492f983c288bd9ba285a423da41aaa51c6da31a64df223658ef11fc4b9d778d95e85dbab3071328f089ec9b22dccaff2d2ec60f2e0d6a06df63eaacaaee48af1230cc85eb02e4673faee6b13304e816c91235c142fc63d58f30bf6d1e2774e389eada67a302add0f04327288350ae8680c686f35c328c0cf8e404900dcf68a53d951bf2a38cdbf0b3152243bc567ac8e49a4df7d2265f279cec6ec7f24cb07eddcde5994517fb30e8637ca5167cd948552bdf513d6e69bffbb832777425c8dacad3ebde002a883c00dc7abf5a4a46af62f9df920671283085d604110be13e43856573337d4b0f5cbcdeb114d0355f488e62a33cb5b50713dbd4584712157d33adf1302c14effd2d4ce8c42810c46fbe4814eea3d3c0a2f45e21b36c3f38f235a4e5874a5f8fde186199087ba47e046b107ef689d91a783cad4c8a02dba259c3fad10cf0c5a13ec86b5e128203d8b9f9881f7f314e38f36719c360ad80080069203225c1dfda7b97faa656dda75b0cc41f64dd4cab92910e4414bbbeb4c0829fa597663016823121701069e1177b596536ed953e69bdfd8cbcbf1fd8f2725cd20b6f42cdf23edbdf6c1aa02eccc04c577f283b791111858cd430f16ec183fb9ab2284fee0b76f82c5f23be294fb03215488334af2a43d5693b08d4f29a7beb644a60e232cab0f2b2c9ca086308c1c71933bd15232dbb49bc51a52f06f5c0a8c93487ae1ea87377ed2c8c136e908b67fdb104518783fe6ef0a894841e5c08b033f12b08142d44e45607e863ae7f63811d51177e4ed573b190a06568ab45aaae2f10c984a5d18bc467dc4d7d951de0cf0284550feb8ab1ce36e98641203b2cdf3503d1b8663dee84ad2a49c5d4f4899e47db4b6ad03c3ef13de485b22fb515efc05ad1f7b7cab3c180725bd0c0bbd47b57c67923af3281d72011d2102c4bec3c6b7648d73ce091f7ac34f222faac47e2acc65cdedb2610fc8801f9ffa858166190f6b4eb4847ff936ae2bb40d57e6a60c16b64d0e68f62cdd0256bd526623adbdb5c94886c496331571c059f038aa27230163fce53c6fdb7830cb6451902b027950866533b6d433dfb417fa1e75986a373673c1ba57558663b2857a402b21cc1688ab8c0284c4625c1e3680e03738d5105cee83d4e13094642f8ce8675e8e725d073ea53a53eb28535827d17ea613d1751cdd2c7c01866d4450e9970e52f95e13724a97244ed3ee8e0af2d740e9b0c7301e47a3fadfe179cabca36e7d2feaf70374d44c089a031ad3db9d786e29971d070934d096a4c81fc01bc254fb1ce9a5f4b3e6ab2e620316eb73329e4f8d513dc386ac9b9878c4caec174f33d2417fd0add7879cddcc5c489e7bb8302c3e658d2c3cb8ec47825cdf185650f248c733e0f789c0075e00951ab39b38164d635b7709d45fabeceb18c70a80d079a6d68e3d9a7198d4fa2736f3f47ab938fa25bc6124f5aac0cfda80ea8b3ed4b0349517505e3617ecf669c73a27c1437e7bac0fb543489f1338781db06238667f392d567f0b8045359dedd1591517ded0171fdcda2f74498d6fed768259158dceffc6d33368f92b9836dcdcb78625931618a6ac38b022ad14bb6013c6367d5285cc8617d53e47d0fd085d6ebc42936938c46b05378dfad59166f97de6c21abb8ce998a9cb55123c4d5c9911d01008691e6493723f90a3c8edb6e23b48c591d3cb9e22117f7503786e7ab84c5bb92c9ab03f4978b87fc68e0ef440d556078d9f2a324dd85766c18b4aaae1a7c506a804d79fb3a10a230a30de673ed4764fb42992ef4085bdeff57dc8343cab76bc24af79caf9749d4418b5445901bf1266ae78e91b24a018da4757cf5ff2dfd7a647a47f094479daaa97252710b41e9115249419ff20b1d0ed5e2049752bcc4e8bbaead2a4bc39271c308871d57d7a5b22be8608e35d414df1e3e01dbc0ef84432258958e3883bed638be709f08459d8552355a00e02d7f6ad7d9f337dc4ed22642e8afb0ed10795474f49d7a9f2467078fc09c7ca38fc35ebd56673ff74334ee980f4a26cbe26859025b7c348efc68b51f0ab675d27377171933cc58c47503289c1cf3546781f2706b438b514a26391aaa8416710f61013085e2a116a65ce340c9a239be4267ae271a5d4955634a4ea49cbd6af2bce0f8178de373fe2f535be39 +MD = 6dbf528adf60ad46c921cb592e06ced55d554aa36fc7d2d6df42e878343eb7cb2adf28b3582bb5151c4c1a15937fac215ba29220ac3df42cd245074c64d6404e + +Len = 48464 +Msg = 146a9a9f45e53eba1c257088c435657db249d088e6f14ee96d9202472b177cfdd7e4e0b6470b4439eec35986a3164e21a3d9f1aedae118be5e743fe93dfe721d78056e354f5f03cdbfa3bc554addc265f686fe5098b37efc528c1af15b0057affeb78b45e648421f98ade12041f489f1b2363e98a9cd494c52c2da870d85f25e72e1800e922ecbd780c90f0d11c16b6cdfd3faac9499415565fec9d5dcf50ccfdb6b96b7de79649c80df904441ae307e86447bb4e17d2dc093282d004fb86dad413c12684f92d6169fd7aaee59219fd0ae7106d919e3d634e4284f33ef36dd9ead3e3f4b6fdfe8eee599a633e184810a5f42e642c332055a61e6779442d8244a25586485c5c964cc5a0dcc3a623e9ed4a19f611967d280da114bed4bd204095bb472c841d9b91057071c632c64b7bed47d70c1838d2b0f5bfd3df881272356765f75b4a53415b638f3acb5306d57a9b5fa9d4caabea57c852ba5e15ec79ed145304770d95d461c1726a6086f0786261d210e4bb681a88e01a56cf1093cdb43702ed14406dcb50b9aa9f3a511b9acffb5f9ac05cf5f9c0c7773786dab0e44739f61fb78543ac94a6c8379d43d0b31fa248a5dc41bdfe9bf8e9bb3a06bc3402b79d2ae53eafee9a333bc22dc1b867de012dc0acec589f76fef2704d172e53631a688d01ef1b07fdc985dd507d4b1f87829f89c6df3e52ee3421e5247e7fc904ecf8b4a2290d9f2be426d7a9b90150b8c0ee5f9e6ce7cf7e52e89874bf38eb54a9ce405a4f000aa11daf4f8e176381ce26cab0b847dd5b83b5b6f8a25be250dedb49ae8ef38ad0f9d07fb3921afa49544e953b88e2878daae72d8431d6f4800ffc0b5da4a91688929728824a362e1dc782de3ea4bf9eec6061bcd9a7b2f80f647673ec5fc23ba807fc2a6a1aeb8755b46e166880416bee30bfd5477862553578e523c904e152a5c65a05a988bd9ea7878ade17a02a7709885c178c2877a4b8b9c28b72388904185a4b4aef183ecc89dd4385ea88ad58d4f3b0e3e63c655f0fa3992b866f2bb856304a5a994dc1a9531242be4fae7c79c6ff68db0428bdfc90d2d384541d3bf805e4c1c536ade8adb9c2e2d7c585fa725607ee6d5481e3f5e2a3fc1699c75c3badf46c0b559d3652145bbe72daa3c9ab0899bc0b55bc69e37bb39d6295f1ef0ba4cb83ad64a01d2f0969201ffd8c4cac65415c35964cd24dd26e11e8f72176e080f6b31bf26b1facff67d22faca405fee28b398c84c79f8d7d50042a2bda8642c8e274e76d32c0446cd42f22768f781b16d3ee70af91343ad2e5de96a2818faae33b339053bb719dd84aa1b8d9b3356968c7f572855e22ce89bc2bcf09cb15a1765d99973449d611d817d4234493a0925eb3b91294730dc0f82f5623bffb9a9ef8b5f16c9d824038d2d8312255b56c0e6f33d3d15b6437baa4dbf84533b7912bc0f0e590ede9628b6f0833067bacca3620c4c02f58c65304163e8ca413639bb0858ae0a4a3e39f71e334747024ce7dc209f2f88d0b0db235d2c38db0cda41cc5ace07d186e056994f5c95fdfffbee90a812af78ae0af07d85107760bc0dd86e3bd9e054c9ac3435d1d536fa65ae28ea83cf947a9782eb6642776c005ab947c832e1033e1b8a1df42a04f2e73c4dde0f383ca635940013051bc9e064edc5d704c74e3635846257fee453906c8dbf592a4fc3ac52ac6cb283986e9b347d19cd47828842e10d1c2b7a8629da305feede6151cb7078e8ae0e0741cf6517139d74bcecf7efecbda0e19099ed96dcbac1b8dcc5bbb8504eae6fba9f5206b5b53913888c0404fb9dd6c16aa4098d17a6202dc433fd4d82e9551fc4396045b76ed5f1d6ea154bb9b3a6132d2fe4878a2cf3874123f8f7b5be89654c9762ebc5435957cc8f948acb09f91e04c3e64cdd53220c7a1e147d91d733887a42bec0863ead8d9202e78adca7b52b15e777a3b724960598abb9a9c03b3cd177c1de8ca366b9db51cb78139293c4828823ff55c0a535b9c2534f41e7f28a886b9c2817c3c366893173aded95d70c6b86ffe62ba1e0e872219d3e0eb10507f57e5c06298f5e9ade5981f0df8e7b772e370494ea02dd9876dd11efd8c37b995fd688df89af3e3e23f27da8b22585ec12c2b9725d8aa32b0f1d37c867c85c2a109ea81a00ca6b3ba123f03c2e01ff52604fa6e64be23a8b820998328266b0a14efc45215688ee779d1561161bcbf093610854597bb2aa9e1acbbb96f34580e66218e65b5393cedc62ef589d412a61965a134a34b6a1fb4e1e88285a800ed3e1941b1330be90135137da5d3968c75943969810ddc4573681d56b68e8f269b27a2b2d5408612ac6bd63fef9525749e0825cc02fbe6d7d6321889902a610fd24997175324b0207ee0a2f82b350d759fe3bf3b22e3d79bb8815803d7efea4733126ac1c34616acf931fe38f149cb09fbc56a49795c4afb8af45027d65577472e1092549e3b3612bbde4c74ca39caac221bbb797edbad81ddf9959813e184aa33d2a2425c5a7afc3754122e2e8b98c6b365374d9bd87bc9121f9cc7291abecae4c71f0d864a61b3ec21e3e786b5b2041020422868d9223bd7c4da278e777223a17c7d38948196e44ad636137b5eb2ced8db70bc5e645d548f87d24bac6e4b6efa4121361f766707f3df8d4474dcf7916df5575bf4e0799db9d719a61b95a6e77fd3cf987fbf7e9947ac5dfcfbb71cf6501c4a99c4f41391e74124c94454114772a2bcd23dc32a12e6cb3c9f78838f682faeeef8371597bb88446817cf4016e9a31c9d75f208160f31ca8dce93b8bb514d2b98e9c3bb82852d5f682414d0245851cfc5e61514bed8b918d5eca5cd4d5c3910fd01035c60893700b980ad8ad60e3f3aeac51f6f7119fd34b98c5737a1f3940d7fb07e7ebe2245c6b09ff1e68895abcc6075898ef94d7ebc8d2ff09e5581be7f958a8da907faca1001d4aa69c8692812cb89ebe9a3edae0ee54a3a57c4b148c5c2f1c951ba8d448b01e10f8b2203549c8074af060d651baa465d7d0a9bfca39eac88ba0f623445865527c9d101fe81d823b84b7a926e382d14ec311d47be5f58a6a1c8487b8a3d90603b31c204b5504429e7699ddf4393f5f5891f063480ec9245ff7c838319ad47b77e0fd496c2406f07645206409faf935c866f5bfeeedbba1ed45f47055d04facf629c9f249fd2b740c1cd4a72dcfb83be96da9503529d6e75d2e9196ebee5581cab60785ab867cb6a8213c0c2760855902cb937ee56a1fdff7d92614bc9bebe23ab03f695a6a009e927ce0fcc15467775aab3cb2c55aa071026f3b5190801bb78d3ffa061e4fbf15115648e0c154677d3a332a529e9f6086c81758b52e44ece80c8abec4bfdec2016ed7fd1ef0078c53ea8be7c838e167048ffa06a86090675dffba160b04be104cf22686201616dee2b2dcfb7a5bc9bed5a03fcc92ec0c92feaef68743b697b1dce26c6b4cfb286510da4eecd2cffe6cdf430f33db9b5f77b460679bd49d13ae9b89d0350c66e62ac6a90844365b29790cbf92c2eb35321e655e35d92681d80e6f2e7b6bc721f734ed68338a10c9f2ee425eef012b822c8dfaf187c9a12a8ed942189495e4f2058b6b60f647c7df00d26b664f78014af6ce5c5f85f4ae60de18fb90443bcda2b5382ad67a02c366fc2d6e20d9b0d65437e971f059e1b3ea70d282deb3e6e9f9b1421015e6436c258d0733d4b630136998e423ee28181a91eb0fbf4a081da0bea1b1076463932ae65c69a2ca0d801e51c1c9599f1d22491df7d79a1c6c695abb2c8ef60a1978656f115aa349072961d459a0fb4d5d86aa563d33fb9b06517fb6fbe0c4502f7c858953e31e9accb242b9096ff03e13cca303652aca10ff5d7778b6af5b7ece27f2fcca0bfb0683a32bca784022ba657d9eee17c5efc37e15abc90403a2dc1d0014901fda22d3558583cd4e1a780b7b2002ddfa0b52fcac0281708de581b1458f540dfa587b4969deb28b3506da787e3d3799b604db03b0ab6237fa5ce0476d5c183a028eefb2e83920ccd30a3048965da5eaf4b8731fb398b7e4f371a7e4bef0c9e0e0836454f91b3558d03162c4ea07b4975c30009add52e6401f2bbed160d2d0c73c3fc379c50e59f6d5805934a3c3cc6a95736bba5560591327920e567a8a93b7bccbf5677399f4708a01fbe0e819552948899dc8444a7625b2ae7dba34a17c780b2ee1662c456e8c96bb310fe292b79d1c7b7d0bd199a73d6988f447b79ef2d1cf706ec018982f13a2b6e40ab9b55a8eba50f2cd25d45325f4275c432b095c8cb19a86bb5e1c9fcc55fbfa1a940aa6c4c910e6546783e1a3fa939bf7b86b246f58b310a12759268158915d859b1a0406f2c340eac02fbb8023d59bab844ab1436dc3f3b89ad62df85280f393f86cda1ddd72e8d5585f488319f442a7ba316bcf97d31949e01b1afaecd1a68ed08991d23125c55d569bf07681f87a3280a5badd7fe9699b20b0574fce8b5cbc4ef792eb96e2c1cce36b1b1f06ea2a95fe300633cc10cbf8831e4abf9fb6ff6797404430b6b3c368265831484ed13a195e59b79a274d27a631ec5d12075b76d5d6eb0e6b369fb47b48e99ab701b59103c5a835da38aa65ee51a2f70fb080a94e31815a62c1ae7a4b70a7bf35c89e199e5da6e9bba62e6e180bc87f803f30801cd0898fdefde9fe21c71806894b95b9314eda39051ae1286c89e75f2b5f70e386dc8b14a79257284475c6d87d31a15903c0cd8e7f3bcc7c32f086fed8b64abad37d1053852901e1fea1399ed722cbe15dda0551f3b2f652b16b2ec451ecc5ed4cda9fb3406aed0f9573f7be60c81a3a87c40ce827266893321f66195daae964391cc09c9ffc259b52148aa2e0c8964ac9a76abde3402825fd37b665c398bf08e26afb766c88b16e7dac7ab01fcd47fa6baba536f1a840f25ad9a6104c5d4ebf8eedd9aa6db5976f5e624d52e47d3633b4f747bd1805b7e1912ebf82c0a19f7286cde19e6b2ce1853c5f8deff8806adbeeb4d8b91fff96d9e95d8824e70eb80a13319cbb2d94979a61cbc1ee247febdb5f09de92cf3fe4c4ab8e8a5c884aa36d7b4190697d96bf9513cd72b92e22c21c4f1fe3aff06da98920eb4b936dfd68850627471121da635d9b8d27b7de10f685081d6e7a4a31ee108d9955325cd00d38fe084919e2078adc41346850fef28ffdd12c085aa431ba413dc3309f1e6a9c70a90f1ceb88c53df94ceabeec546f966ef17437b7c7181504778f62447b751c1451614aeddbbe839c06d6aff3aa3012bfb11c86fa7c8c0741822575883a96960c3c295b89a39764adb521c5cdc6dc0bd8594d7a89893599e0a7aef1d225771140b28dd526a7fbe815a2f288e3701c89a1312e9dcdb6bdd2c92e525c8c02c09598fdb5422bb09018ba15727f9b7298950280e8762ecdc9bbe45f38401d9a192bfc64ca290286fefb8555c9325e93f736e390a28d1594045a1a818924edb528d9542ef41312f1ee995eac1e29959ae2752ca7856be8d513b951de6c91641b98a988a45a87c3b908fb2e6099eda6500058c50eb9971056a1e072bc0a0eea930fa3800e250d7da5f328dbba6405fb7dfaea960d6599f6e054d566648b23e7e635ce24b47c2da87e58284f02a4f9fae9773087ebb1fa013ad4a2131e1658c3dcb4325ddd8870ac0cde04708084520d5b203481f2c641982eca4f6332d336e63d31d711d2715df2172ec3287c2a979b9c9dfd6a68ccf62582dee23de7eb44b8d157c629dc5e7de067ef6d5e3dbe500c7595932c96eaa20fffb7658886860aa260cb068e417756dfc3ca0bfa0c6905c7abb0ffadc449ccbe6dfedf2e57cb110ab1389f2649e67258f567a4e331523f36099748d73a11fc9a945a5916a2e3e0598d449adb3ed059b1c36d4003f4a385c056f276903f69ba0b3b74da28aff600f8bc97fe9466609154f685e7419c8160cd596892c21c798f792cf36a4cc52bf74d06dad3390bbba4a75656a285731657c5dba2a2541a6a024c2d80116a2eaa4fc233b521b1730c1a14aa8978b7bf8af211a448b12e7f649cec07c3d86a309c8fbe0acff1e6e6797901bcc572c0c905b9177c01c438938ee3c18263c634142940a954d14abfae2a4bd852b39786d9ae35402b75e55aa01161346509e4b12278e9ead96235241248170035faeff237adedf4784d1b7cec159eab7a5c39c7a1b212eb612bb9fd59fb66e12d4382ec2a2b699c2d316f86c0c1218f8705cd5fdbfe4413b4d4de32cc6abfe30136595dfb50329e10c8e760643d724955aba862168505ca9904acacb3beaa6e7b7a7b2bf343cf64eabb8ef220b2193facf7d3b69b6ee078da632c51561eafea61b8f040582dc85482b169253c489edb53915545b2e25a853d9a650afcb357bf7c97c1827235a6d8a25382dfff268a84142036f5a209fd5a8b515fc0eea5295594c0f5db8b84f0571049e009b37565a1b54c7eb0b50a505d8b2f2359751bae1571da9432e9412e39953a8b8c9e5cb59cffbf365d310edbf707ddb8bfd73d6c65da8ea76ed595e9e5f9cf8c4e080404dcba1e66e45f3c2790c50326d85c34edae9884347997a8a7c504afea393b94d9c9ae14142d87bdbb918f48768e4e28b9597463463a77a1f3407e82ad347e35bdcba2474a1ff1b81f602b54afc7f34056cc33d4e299bda852be2ef2de26180f374a605f0fa4e456dc6761d0d96d95a54e71a07e127eb0e74ea7dda583f95249cfaeae056ca3aabf790dfb64fd677a7f29af820addd199836e645343a794740c0d5f55e16705891a7eb9bfb7229deaf56deda01f4c7ac0a73a5b58754fdfc67f7ac61d9a0bb0ca8f74d5777250f72f2fa495c36665626d793bf5b4e385c28fcb9d49cdd85d8db448e2c8e93c8f5d9056550eb386326fe821f89a2e3450251917fe512f456784916a50fadebee8b7549209c03828bb8a78c8fab39010b9f0aa8c26470987307ea72046d31da062edc40a47131af4079c6796c7a6a021c60b8b529c912446c06140904dbb708906e728e7976f20911e8bfbb2e9dd270c815e0490e899482b2017a2e2ec1a9d21db8ec850813c14a808417d45e8beec7cf2d25c6e93c53cdd5786153fac586d11e9c8eb6e8ee2bce0cda434764ab3b917204ddd15247fca056d98e3cf14dda801387eda6945c9e0e2769e6a6e9923548513b8cdad232eb84b6b3352b9ac111698d199de682f594a560b1665545c76866fd3fc755d1939cf565841ac26fc5d7e7fbbff3d93d2fbc1e292f36f511c13177d69ff1d4e8d0ad7cf3ca9373d8d27aa5efe9a3f13b8150c31151fce8d6064cf56dcab0da80708985d1f533c27e6d860dca3502e106911f4e99b81ca2fb0d076a334e78c920f9bdaa90a27020b8fd969a1b00b50b16c5541b32d01ad6094bfd30b799ae3342e2b645b040dd31211918d5630b2ef1f484bbb36d287bd479599af37b4ae5bb7eb20ff1a16edf563f36793a3282d51828859291b92fb440d3ac7d2ceed0a3a43cfe3738e47afb128bdc5452fa264be01b1e95509754588d90caf04792a96c8ff61da88609f3b4f86f81269a3a53f80c44d6205a9844ed2d492ba0de0753a4f14296e0538267917a72bb5c8a63aa6def4e32c02a3c6fc69255450b4aad5de15aaaf07b4bde55251b3de182ae168811fb9fcaf149e443897f6dadac280536a63e77c0e5b98e3ac44d199a257fb37b88c3a1f52024204eba26cadbe0009f5c681f617e9c3712871392ae5bb169daf336da0d480963810fbd3b1546633eec5dbb7fd0802b4eebd8778e649cb306fd9da0a12a49e9628705272ed573826d6cb8f4d25d8c0f6baa9d8492c4e3a6e18bc96aab91515cbb92ad6c7473f9ea06a0ecb8a950e8a507bf44af4247a719641604d96bdb14dfd94487119e892ff68529678b87632ca8bdaa7c7c0f858d67091cee8174500aef461d10ab2f8dbc347356b7c1defcce76f7ec936f7cd6dd2c6b10d50737989a177c7ce88d89e9f5105bb96c101296549c410627edfce43ce5e48256bf282d48c506e46d5d40268136a8d1e2dae4b845852377b89c020613001ff1f23de8869d845ff41d8ee4dbd703d530baa6b7eb27ce19c1a3ee4ee4f61777e025f7db2d1ee1f22c8796da727d048b4651f7fea761d38e64a85925e96ca886cd60719299334a57ee1a09b372d9b5159357333b658a320be10461198bdd2fc72a402f8153714a1bc9735be26573a21ea8390cf0be07661cc7669aac54ce09a37733a629d45f5d983ef201f9b2d13800e555d9b1097fec3b783d7a50dcb5e2b644b96a1e9463f177cf34906bf388f366db5c2deee04a30e283f764a97c3b377a034fefc22c259214faa99babaff160ab0aaa7e2ccb0ce09c6b32fe08cbc474694375aba703fadbfa31cf685b30a11c57f3cf4edd321e57d3ae6ebb1133c8260e75b9224fa47a2bb205249add2e2e62f817491482ae152322be0900355cdcc8d42a98f82e961a0dc6f537b7b410eff105f59673bfb787bf042aa071f7af68d944d27371c64160fe9382772372516c230c1f45c0d6b6cca7f274b39 +MD = 114224bae4a8251546db8fb858a3246f22c75371960b9a2adeefa4a4132ed24bf8fe031f0d9dbd242f862add10b9eb3026b5f3c3b6bb968c7ae995ef62a1cb2c + +Len = 49048 +Msg = 6f928396d522d1ef43b2d506d0ca854d3efcbf74892182d1bce55e05088629dd17d8f4769e8d3da532b367955c7e67b2ef48bfc699d6b062b9ddab8070c40a66fbacfdce40aec743a6632ace2aaa1fd2b0a5cb359605afc08f881fc9afbff50fc21586e5e20dd59349cb07f963d61775271ccb07a837e7b3e7eea027ecff539e151c7704ad33d15bc0f2e65d2e8bb663ffb4a785f6f2c003691817e4500a8ddc9bc7b873c9a72164b6e1b043b44f6463de7647f7a9c1a277bc0d6d46026a0991fd20327a5df12f76d19e4bf31dad893f6d6894a5e829f5d989d588962aa73185e22fcb61919a6159b933a1b5902a8dbd539474d6dcb421ef7779521bf2476c7ff3fb6c6f8e2921d417a799d13550d9a63802d0d4ade98e822f00b21f80d42149d88cfeed7c26d6b093031a8e35a6d3c1c6b991e58250a45958728fe8fcd6baa938ea67238319e7b5d44e0e36b8b4e4d8a3c19d528372cc3e9bd8d3bf8fd39e68bb1e9159c98bbeab83905c0fe50374b17722de63dad66cf7a03965ec6155354e0a2f62d77904c25a47d2ec62e51aec16ebe43b5fac05ee4d0e9d2db799e3e722cd25c4e4b90a5b8ac91ba676e081b2cda6109b902485b8088e0c13685f061caeab089ecab127f102b1737295fdc1309e51aee83c67e034f0c78fff46dd443cb84de1d7cf8be2ec8ba6e238056461cd5394c409aca09dc8cc622dd99a3828af095bb7593c6cc3b5ed5071e00f3ee9f0b2165ce628f545de6606ef89ac9b37dd697c930b597e53b2f0582752fbb3e20385807d67f78e5fdd845cdbf7c42cfb2f9f587cd56de9194c5b660d7611ead36d927930746394732def0bfc0c2a13fb0b75987a9fc2d59eebf8212934990c4496a2aa7cf5b22f0a366fbc57ae2579bfdab1e495519e6968f88d328575da40bde67cbb69d22d86ab5fcc17f6c6ff86d0051ce3d6d44acd01d9e340291f1dafc7c5ea53fff31cc2de12cdc3e03dfe61b5f27e3e440e0e2af1f8c2f41b1caa80e99bb21a4740c70a2bb73b691df96b33f60b9f9de8e831a8bebcf2f66552c9dcacd09dba48a275871bb4deb0b6e48e231cb746a6c84afd6ef28c3aed0fabc2eb97cc73d80aff706135727e41b2e5ae5aae5d3d04ee1db8a514d263821f0edcd432f7fc1f9641febf0159e3c319e314ff34674a5d6247ab74adf5365c9f6260c005baff34f34e68c908d2d4dff3c8093b363c365a2ab21e04445d7824969196d6997b46c22910f6a9d1431b3d497bd3363d44c8a25044587c6172f4810d82c63f75a3976f416def84e5157e8422e4ba17d0e7cadedce7a3058d9b711c0b1d3822219bbbe3424f9d85cab1c65d87eb0807788d02b5d48245c74e43b69c984a34a826ca7ac7349d46d10a7dbb6f7f78032dbc9e3ad042fd87e92fcf8caabcf101f90b979bc3203f33932de324631273f5b2248238d62d40b194b5a8bbee80fae83c586ce87e0d1cacf1b94acae048c424bd38a1c5709e320bef6a360b0feb4d319a96b027a1031ef813381a768f2a53d9778164a8469cbddd23d5e144b606d3243a4cca21d30a2c612231baee17bf085b078631abff2fc86e577e122d8ad872084502249ebd2b2e2d462d94fa2210ccf496cf7194435f3c07b4ee2f8f34691327e2402566076d0da5a6b30f64552385ea4ce58d2cbc35fff062aca2325bc19fc73a8f354058d9af116b4b93f35a021d86504feb3b10b8fa718840d1dea8e9fc317476bcf55875fdb9bc7d886ed9b57a10cb95f589e7f115d24e33265bc2e814adb97e224eb04bdfe4c2d2579e794286d0e44012ddeae6395add0c077053c6cd82312dd01008633edca5d1664be3b3270dc4d7a900c0a14c525d53dee7008b11fa030e2c0607c300e78c031e3cbf10471192e224bb122a3702f69112867340c75b58a69ff756750f4e9feee73bb45fcd2277eaead48887e3b2ce4c0b1654edd7ee577f92aa9d815159081c2a0e6aaaa1899b766313c9c237aa100f315e4a9828fb29206be883edb04fec154d7e8af8ab8e250ef7427ee31a31e25fec28fe4ba4caf5119479b0c3137a765fba53bc52d3783e3a0e274ef076916cc6a43a180d32a2e4db7325cd0b6120cb84d755a7bf01910d83108ce2f33210d7cbc15d3fe7bacd1e0572b482cb848a160c0e4cf4471d1fbb706537e1f336f74bf7ab591bdf2591ca17f7ed760d63007d7dc6ff4af20f6b6f8a75f0f4f96a8eefd0caf65500593710996c9952d8e6c92861663752c9bfbd5257a981c30cb61cece087fc954f3f0619143880bd35f52f403f58bcb4d3155d8c6167b1f53402eb6aaf483282d6bf480d10c36a602a7878eda003561718fa92443018473379364190c37661c59cc2431413751fe2c257ed560bcfcd23a154a5a24a250c24e43a6786a67a5106a92e4154a7b666ed027ad6a40824e881750ddecf39f4c8717cf6a575e0bacaec06ed88f853ee0926f4ca7bfe1f6a70d99c0b85f385ef42c14a524285f7a0941fbae56026a085ce379f2d238dd9092ed21f38e235b47d44bd543788dd75937648cd00130614e37ec80b8c1879bd69e715057a3dbe5005940da48bbda6e2fa3a0f4824e8c23970e18041d0a0e954f3664a56bbddb6e1f1fb5842382a07c43fa61b323b267f9795be0848df0405240d72181be20b44eda8414634241729a5c98315932c1668b4b8de0728a38cf7b720d2275bd70f90fe922e808439cb330c0098a473df00a21a430a26ea037fe495954f201e8231c39b178aae3a5d904e824caf71db3c2c58519c080d95e627f744d2b1ab6ccbb9054d9f1c785c7aaca28e158e23d22be1b0df2da0633136ca554e41c06f4e9aee7d9a92ad84f4776856b8c3fe63619468d24e5c9cd1c7dab1293b494315cbd719540d58057d093c0c9388bec7d98f5f09e72693c3fe5dba249991510444ec6a82b12b59ec09a4b1e080876fb12c64740c17ed39dc93febe6acddac3c9a5b83b71bd7efe2ad0ccbe2c463c3c8405e8bbb9892db5b037afcecdee9d065be037322ea08dad867b894b370c2f8e070b241d58666d7107937ad293246382829c71380081e0cfcab2e3404afbe9ce03e71f8030d536d4a84e66b20596b39f05816f33318800cdbc1ce385ad3bf1624140e1ce8aff0f465d117b566b6d15c5ae38380d07df740d25629002a8f3cfb486bf73edae0c802fec84c2a60dd0115c4369d4accbabc4f9cc2cf3a0834b0c2a9d0cdcc7e42311f81e4e428b32e830cc8dbc4cfac41779f87b211245856c2f2e4dce2442746c4b07bb1804eb24ddf97d54d7a7dd3c481a71f8e9f7daf77ec0275dad5448a510b5c58b890eb029d6f5d86065ed3f79692fce0c2daa4821a8487d965373c0c137d89a554a6ac08afbaa43780c2607c4a040767f9531754b134e97c06589910e083aefe30220058f75a22766745b1d6515d6d119c8964bbde75adfa38e9fa5d5ac652afb5a36657f6c65edf0469469a4f27847a26fe1b1be4bf4bc0674bbe35d4be1b566fab6caa40779fbdf2ad7d2c95caf40e131188e9867a596b2bfe833f00b34f6ec89a71b446f68bbfac72e431b7d02249fb745cc9164f4d670182b7dd417e85754b01240a8ccba930bc6a0a1e37df95ba4a86f52f26a6ae206278ea95295853e6816fe201845f5edd8ce35d56a841c4db8ad9f0803a08d233c9318a0b2ae9115ee6473a5db02a3302b88f6c7f5b9f463a36edcd60b2fe801dc04d1483c899643af417ab63b2c4bc4ca9cea5fcf4408032c922ea4543f00e5ac24c28a384f1b307356193b7eeb76117db11a863f4ee0961dc29d5a24f75f357698f24fed27a944024a5a1ded66ab7f0e6f8c228cff05853ca532e0c47f8c5b000b697da43ac7e723c64542d0c6727643804a1cff7efe3752e4f41e7c000fbd132330fda5affd81a072e1936f32535ee6895c5de0f453132626ecfd93a271c576884eb838afd37a3ff536f811d3d79fbd35c8cc77888d8382142063538c39d9f3e3cb95a562d23ac9f84c5a00d185a1912998500b6333ed2c559a3902e7ef6350dcb07b33ef812905222c9f8253e6cc2910d4d3e5accdbbed926268e9da1bca561a04542b7f68b0bd1cddb1e08180894f90823c4e8ce4548d737ed7508e4676cd46cf07d5391035b78d67766284de3ec951ac738c2bff20d49ff86d7e2af7cf7d071a7c79460022bc1ed3d84f84855560fc595fe7b0a6878abfd814bdd7b73d2d06ec9b5fcdc0dd947728bef1a8ff34dc3992eaa94361f1767a24b353bd0d28a7eb4d4ccff7d9d0073f6e0f8e19d24505af5efb180eb9c66179e631890381f8b15d457710ecd261dd1eadb56fff89eea307c57b7e36356e13642578a7d29b151404dd046bd333faddbeee97dc81a9997de9cf5021e65e5254e2ea6ff551e4e798891cdb28d48502d1c4389d1cc7bcad5cfb85634a44bad8ec9b3cfebba9e3d704940be48f194fe17fdb94af79fa4a9208e8ee9c4078d369a238230d4001204b22ccb008e7c719feafa909b53942d9af495612e34dab316e3f61a784cd8224acb8da152d7a096cc32bd69f97a5c6f36ee7eefa21b7055a4d8cbdd14baa5376638f65423c8e05ce97ba0b5e3d05af1f36a957ad3cc7add8704ef5a84b1f9e9fd66f163d1e6ce3cae223f04f90a124e6705839331ec5cc333d50b0346a7488256f1f9510b95ccce50d2f2c7976c04ece82bc3e95adf989f11e59977e91f03b92956989c3f7a5e8a97ea668e5d8ac5561d59d0cdad3aa0d9c7a30528da9dcdf6daf139b5cbf915e9d9e504b999fab6027d1c34b0a77227fbbb89e886a98809b3f27e672e5f8665749d5f47e9fb10697a7def6a42e81a708d7426be11b4824988f64aab7658c6dfa368c5ca8fff805236965fdbe4dd882d0777f5f07aa9f10fee5ce2711e562ee70eb294e72bf5bef2cf5cca1436f66fbfe23d7419f1e878bf4c9cd24296c6231e0f0169383e9c10ed9d47daad89c1259bb64b2db5480e7dfa2c4c96ba602747d73ceb9f3858414a8538ddee027ddc4e62ec078f3cbd7a652315d2ac231af801c500c7c351d993b06c2a8590ad83964e880c19152af2bae2dc91d58f2727c6e54a132c623f52f1e704dad55f293b9dba8d8ef66c0a685e6b8918bbcc31070266e8bc9fe83b54ea52d1c253a5eff640f6e5fd15d0558ec363ab22fbcfcb49491b138588e1e05feb88758986f17c442e9823cefdfe86f6886fd5491c16705ee9567d067ddbc8b483fc4298c5ee58b5b512b98d155329001be479d3a34caac891bd67a7e5325f233222db68b6e8ffcb830b29b0025ab65c0c761b8b17bee506a0c485f265820e0c8490a281c07dfbe606c5f6c03b91b96ac8793cb7e009b9a9b4e03a7e65476fe0e9ca3a6c8919b7a5bef7a3462774acbcde724ff2a29983123cb507947afeff30d043f5915748cd7b29f4b1aa6c900ab2ccf5e7b3c60afbf0a6976fdd0d15367cd6728698d197a7e6c661a47561604ded02887683c0ca6e95812bf5d09236a0457afa4fdb8e62d16912b2ee3fac51f0dc2d8e8edb294465916ad71be7a0bfc6fb2c2fc3d1d446c482ad6d0151a4019e008c9c933276257b74c22d54bacf2d053e68a7852449c00bc3d4e48053feebafeace1726123dda1aa005933292641af56fced5f64b554b219d57ddedcf037c910b50a2aa02c6debdb3c39d383705e6120fbd5fb9af9d64807f74adac2b68310bd2c2b3a18cc7afff207acfc7f13b3ae5aeb29921d97888a30ad9d83de183a55ae182ceaf08a6ca3966a9af74596a65eacd4d16d1517d44239fe5e22599ec4618a81f48251eeaca06f6be90dfe81a138bdbfb4d4a9022136cdf375ff5ad08afcfa706d4a6281a0be26158283d25d0b0536b3bc0e01ded62f9292cb620a37f2eda6eb7e8a4ccab1c4636d4da4e8b04c8dbeb9d06546365df530e54693915a65fe35fd0f893652477ccd7d32b76905cc98fed8d81fa08f1d5050f4cfd916c14cf550ab0990499fcbac0d4c1a037ce1f2ee9e18bd8536737e089ac54f7ec1f50d9b9eff52e7ac3ba31dcbe2ebd14ace2856458165df3169e8e4b563acc8bb7d12b8c800d3d688ae3997ae488f69fb53d69a9b1cb975b8fac3ae4ad3d0002ce1c11475b674a5057ef4e25e85ec13b6f962804af0a18ef4ac772c001ea16d3caa84764e2a1e9b4a353bc584a1ec17a34635d1f70506740d0a6c27804d0959115fc2a8fa63b701805a7809c8a576bcebc4b7544c64ce6d2a990b667168ef0ad688e2702269281fce761276d198714cb6fb50d3f114e3c273e3bab37c753ac9b1ae4e976e455a3d5d1071d44882c70d2b7269148e1d2bbb116fe2d4497ed4deca586de585fe34a355b0fdebd46b5f4873b168e1ca88909f2cc5ec927f8aa4914a0ea721109c9d99dddf1e831e5c2144b540b7004d5cf9b8eb6e3eb5c6a2922a59586415b6287f661d233c63cd5cf54b1aa8bc39c0a14d4c77f14205c8cd86f01ebf0c8720a9c1533e07bf548a74c3a3ca70e156cb6076a4f8d65f4a2a13682cc2ca0740f6274ba868100f1efdab7395ec208d1d15a05b0895a6fc4b977c20276c02be08dfab05adc2c89489cd09ed69a94027584769e4bf76e883d1b511972645ed97a6833bd7a975b6b65da3961967285919cd08c3f913c4245ba42cd9b3747515fbe48be2a9e6a862de61265be0d792f2ca4501b7824aa7e2ec8ca5dc5d58230253889fa563aa8455725eff5f28000e94a287da4c67ad46ab9e51c8237e19783a055b668eed3e3116dc1cd5aadb2bc5c6095d3a8b9084ca06d9ba3cb5fc009b477b2589a42fead62d82635145dfa0de10678dc97ae6175a7c0590aa9bc155b4b11baeafef11f59c23cefb1b371ea782fa24e030244fad1f948a9bb9dbb360edfe4fbd81787ca9aa7f26abda887e88d90da81e178eb49041d6d0a3127fbc686cb87e1ca746564c29c9f43c3641e98a0ad05c0f25c2fe06e7ca40705c8ec3b759660f91c8618927408a9f77d96946f63ecca67a03c7135839f940c94011af93dd916ce58cd2fb8218488f2168087d149c87ef2959a5ddce60ea3978660f6a4520c0fce09da096a5d88e2c058e27752c4d8ba0e2ce6443af842594437590db14497b2749a0d340d7a9e1deeaf1cc188678601f6e0a0d2c45cc33b7f3169dea4a804b55ea4074e361b3cb0d9739024d6a468cd695b6a882d6619b0c50f03c7f2eefb6ee89238a668b1dd321d50fcefc1fdf992b1e7a3b2cab6be5f921ac788207bb465aeff11db19d1082826c1b3a0dee6a0f88d3fdd0120c119ae830f156db1e0f8302e45336acdfb35e9824044d691f0f74547ae86e1c407b41404368e073bb11f44c2ff0db3f992ff1ccc5720ff6faf852f7dce21e3291d2626923b81d3025e921a19a72175212abc384160f899dc64a30d9c194e73c453e85cb988a15fba6c0926aeb7eefcd93505a29e080c247cd309762f1a5d122a5e633ce6986d1bd84bed00debbf6d9864454024eb70c2da55d00efa33bee4ccf9f3f3da6053585c080a62f462da989bcdb3fddbff859240a7521d0950872922898c4e57439ab2c27acdd085187a78bf16c217b8e467395f0bdf4cf711a7a70d9cdacbaddb02e8d5222ea32ad44516ea8699182261bfbf21c89f242c3bc766737c05f244f034017f4756624a60e379056661888140352d6c28b92c10998e6f3e6f344b844ad705a6336c954c82fda9f9fe41ed3c47708a2a7155ec0bf2a5c954be8f5fd6b094fd342c99c49a033bafac9662d1bd3f19de42ec9ded860db37c9fb13fb5a0eb13f0107b05789baa44920876ecbb6befd7329ce1b7b6e7b36191058f6cd54bc4fbe62268d738b741c15af4e60634ae21538d2098cbd098ac570f70a23d484000f5e7523a388d568e5910572dd8c3ee9b35f7b65802c1ffc03cfec730db95e66aa8fc883b4ffee05bb5bb1b948bf093262478466b831386b7b967f2826e44a4c9bd2cacb14513bd6e7c6327634743058ac819b817774d94587551d8e01ddee4e4db80a6e54154568f571063e23345ad8fcae1f4a506f8906c19c4639110ea0d84abfe5e1f6c4a1188eecbb758787df1fdd2d9e25d579be4bb4cc87adf70f08771d4b0bda7ed7c5720e89b0b0f3d733a9b87076b8693bef70db76605106578b973ff9ea9c4ed72911eee89474dabb0f13292757569e1ea312a01a5ed6d160b0d52d4cf0bbf94b5254ba79c535beabb7c8a9a2be94f6aa5fadad38e183eac30ead5fa4bcce009cc7d6fbcdc1781211c456b482fb07e567abae4d5276fcb4e70b8c61a1ad26f753fff52d4517c06795cb29d448bb03fcceed911ae7ada5b2552e0ebdb4507b4ff9715bb9804683419022de73547d3d9f48bbf29078f4238595ec80ce6d252f7d05b2673affcc45129961d13c4690096f7d8d5f4876c8da8111cd9f3e2cc9a7f0f139943c34179a6d3a1eae798fb1fbcfd5d8139d71ba5f475157b677838c995e548d8f179dc6e7b3daafb2c5a0417942da32cc29ea47064aed0172f5020c6817a804a457bd48a188f39baa9b18dd266b0313f55850dd83fe4d51314118b798bf54657097131b7c4f2d68e28469d377aae8f20bb3460c4cf3eadd9de6482cafb7f1f670302fcdcc88e0adf6fc03c2e174e4639bc52a51b5ae5dfcf55f00ca1183f95e2fcd73ce06c8a5c1648c8729f86b8ddf11f87e2c7 +MD = b9c74e4f4e2ba924350e240e18eaf0f573e0dcf273df1d828f36de96c068b0021c2ffd58431d008793be1bd26c9fd7010e6657fa5ac36274dd33a08c2f65d552 + +Len = 49632 +Msg = 0a3290e3d5a9e0180dc4877731d42572fd7478213e0fcfe1e4a3c24259c4212011e32a0f63d0fffd977e5712400773dbccef54a859ad2b32ca6711811afef80df14ae12475a7508b63b0fd685e4acd5f87e500fc4dfeac5187e86ae0c0cd4fbbd1f01ee9b634bb0c9ae2e34134a71b4856dce6e5c30a3b8542ae3625f0390e70da5b4727cb8129c6639d7065692545dc625e6d2a63dac118233fde19544b1d753415c6a65f968002e7670c9ba6cc3364d3f2fd95d47524505325c884940a641206a6012e1879aa084dcb1fac93a5ce27d121feecbfe34e76fae85e2e587fcc8e789462879e348d20be4e1161d7b7fc6f8371d8f8cb2d25d13f0e07de47b03b33b4694f789acf1392627a4b801b0ba682116cf481a15a93ab4b212a5e09a79a47dfac32cbb45023a560d633d106a7b5a9a49ab84fe8727f4a46a93174476cd21324e6724693c1a4a3e1ea321e41950f2c64828d29497ed0f7572c83e9a905c9dfa99e77b2e02980d20c3fb12d73dd9e5378acdcd86c8570faa6348884d67c69f3965ca9d642919e7b0a5c16c74585486608a00b25f88f469b5c48a80f77d9999614a9707c6200e6e502c9cab45f97f7ac3ee784d596a53a22a1f14b50332240114b0b346ae77e405a1d0f36bc681a926e4008adb3edcd34d69cb5d911b36148ac620c5d697a14942083b5c1a7091701f4368bf086a6111c01761fba189e9d98af81345341c3c8ca805b43d23ce9952c8649f9b4156879dae956b4562d9ddf1862d20a7eba69a4cac2cd42d344b19cfb6ca0d86029dc0c57d665fe161a582eb00d7a16479c15b07c2e03392b88083556ed65b35e8aa9d27912cb8460a6769248f7a4e014ae6ef3c90c22b042cd97662553bd0f150078d329e4afce9d98a013c86976f14eb91d7597a3552f80de053950e4d276ed53f1185093396536b97dba18ab18d05e85c93ed03cc23f4d82fbb6bfe9cc6f4e4abba8d46893d091d1b68e2105b305aada1b575a1f9167118021e45aa9d383a0af7f8b9fabe29718a8f297c9bf6f199c80bbc71f94eb3034a11ecb0a6e0d384b48e4ca97a451433205dadef92073939b3e509605e3f8211ead9b73b57ea519b7de936ca69a055b46b1156a9a71e8fb0ede82ccf653dfc2376c3fe54422c1ab4d383379b3d72967be754c4492fbf5da5f26fb72d92dc99be8a5b328a0a28a7873206dfaa5a1e3ef01172772cb03c3b6f5df609095badd3597229e44af462707925ce9f666415b7c775f4dfe2bd47a1a38d15c2c143f4417aea9a9425b56c0e013b54e75ddffbb95881767ef9cb5418b90c395503d0725c993037c298b197f8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a92d7de751d8df4cc8d1bf315224dc5a0b91fcb5f4e2d7cf7bf6b4f17d216db097aeb3d875696bbcf7b6da7fa735e85898526704137c4b939122ed231a5426a25cdffda2233f5c05915fae9724a1f752280e33500c9a65894566047b18192cd05117d7befba934b90e42b8325ae78dc9431bce44409b9a132126877426fee4bd3d1cce995f556a39f6f663bbca7510406211a43b701e6db3bceb02a8a763e2eb49254ecbdec2712ac3e14dbdf3d9233a1d6661cffb81650d7129f27319e6abcd2de7d4b0fa6efdee0da9e29357924b28dda0635c4362f462c679d38e0ef5b3e553cafd0322b945062ca6aee6762edc9f1b56456af841a06655412233f72f7fb65355241cf8300b05b96e2f11c00d6bff5ede64967a9c0d8a86266b1f52e273d2850ce678db71946f2c76dfcfd5cc7dec30cf6d595ad08031d1702aaab2bd44ac9158b0a15cdc95950e472d5b27da96c809afbc1e199d9d1eefe4cd60872e46c6e0cf2f20ed0f6339c755b45e26c62b2571d5dd6f2741d88409cadfdb50a41e840be69e621c58a1aff038f14352fdcf86e1f83dc7146bb713e7b8ee659fbd10966b259b0f6b66c57a115760a55d0fd86ed27d79b05179bd40d22555a9d4e7e1608702b1634aa8432a93378efe756afa3fdbec0da57f0a5f9d8196c21290a2e56508145e184aabaf23fe5fd8a96cad998c66aa6630fd8c127c5e93903a437cb12646c11d98dbdf6e18db46da4073363ae6fb6f1fcd4d8d7a8fc1926c8b6de3c936cb9f5c5f8eb2045b8273005e599342a20270a6e4ef7cfc2a63199370806691e91f15b6e6c3c2067ebc7ae75d605365703475780263d91beebb9fc1942b73afefa9baa9d92b9de8f4c1a50bc827d507c3d9d41fc04b205e4f23ab6360cf99779d13f4a181269430503aa7ca1930c6ae0f9b131a88f5f147be43c2f560cd568d93b65a3a79355351039ff9beeaeb76dcc5d0c8d4e704ba4cde845cf41ed52956462961d14bd839df9169f16697d883f889135beb44f7e9e2027dffebe557906636e59202639fd6409c11453dba886c95cbeb42da3d201ebbdc9912497ed51a41d873714a4afcb708563e6bc0bd7b9f3900c1241e2a4db71ecf5e3a9925ce255dcd3b76157c6f3abb8239bb8c3b12aa66ba2d6613b6b141af4d35ef5784a3402e67d616f07277ffce92abdaec9dee0c836a988f774d0b5cd1f8c89701061509485abbda67b7a764a5f9fd408e607e3423a48b16a567ac572b348ed8324463df1fe86546f7d66e17f63ab662de2d43cfdbca8d822a9124cf0f92e10947aa403039c35ad30d393c7823d76fd8585ecf2e007f08587353f533139677c0ddc21abb0a6e0505246aa303b3527207897f80dd262494001c1aae01cbb1ab95410653be263b1c63e9e53259293e7586edf9f96bd14db92f817fafe99c6704dd3de19be801cce965ba335ac6f9edd2bcf268a948866cd02d4fdd8b290a391c2f010e539721a5f48101df9d0ba9f32230334600f1ba04819fd3cec06e99ba4a0156c70b6a0a28d65c7d346965bde0dc872d1ca105e0a735ddb9cdd018cf4d26da9bc633cf2ff7f74e78ec5083aa397a185c5709d39eb7758d6e454ab62f642b314c665d450775ffdd8161e2d4036f736a2d7f9c1948d7b9257def80d51eb1df9bd531f85a25452880133f80d53de560f33d10e815736a892c450722e42198ac80e2a3957d0dc829eccadfbb15ce5dcb59e7956e76a2f26e0870369171ec9b2a76e155a52c25817c6a04bd0204491b0af4d987afab5c01c0406bf86cecb44bc1e45da2a7f600f3989e5d61f62f12bfb85a6f521c22030b286ab4b715d33cfd1b5fc4253e5934b0e6e04178f804dfae4c0135af44894c912efdd71d1cb3cb519f5f9157a8c4152c1fd63d3c9813f4894e7fa8d9a93f7d161c703f74e21d03cbb65a51b4a7d536e78be6bd5756dae5b3382c557bcab3391ca9487a69166d6aee08e681b68bfb2e45b3a84e43a4d847de819db8002992e5173e0d04642a23651aff6abdf7f5a44ff94f817c7c028a8f3db35a4d01364d2598432469f09ded86e5127d42d3557f30648808a47b0060208355d880f981405f0261351788c21a44ceda94dce32bda640a25b472cb2ef7a031e1aef0438b2b15f800a599b76738235ac027c8a1f9445f6c710b43e6decf82bbdf341789c45bdefbc9fc6ce6ddc5a6fb6bccb28a4e5b771e2273b448a0464ca3b70e6336cd511e5ff5a00da19651443325ea17268b7e6f619294308b040a626bf1947fd4f6b958c74c46f87241598f94871652e1412b9d0949d335088a6a6877277ca9eed0d312b40647c9c33f5ced9227c81254ffe18457c0b75e5ba414d377c11d8ddefc6cd098ec28de3f10b9e2be5075c1fc284eb9ff9fb708fed16817d046fda83fd9b516f84670c220361f136bc9b5ee415ab1a2432f68c15c92f2ba0321a3658be96a5a54ada5f2214ffad43cdbfef3bef7c8e1d50833141f89334e92f995624dbbeb1f309a3f0abcaebbc9a40fb77edf8fd2dd17a2bc7d91f4a82a02374a0affb1b5ea1e94b2585cd2f04833ed75ec3d938e08ad975b6a6e95dff0d36347ec1c7b692f611596877c6d36f46efdc0c823a35908e95e96770fbd391778e605721e796363baa55204a5ddde42a7a91eaf5c2fb2327d50f40ff00b422285680929802c333b9dbc8b4c639574a78077e5ee31a92839ac170aa1a9e089966b41d99eec0466fb5cd398eb303488b79c02cd113ea02963283930e8b7dd8de7ad0bed3ebcb26d47aa73015d962b98e72cb22ac4ed95346364000d218462bd9acd3eba856c86b494f9235b100ffb13bae50e8555c8f8e79ed2340608aa10a7243e52c80f9621eb57bb6d1caef81387a7478073605b5bb19a051da1ea8357c91892d0ac39a3f4602473a8bc86f9156330b6a06b511f3e00d98f556763cab891ec4d40cd90207eb17fb47ec1448d7144ebc4f6d3c47f0073d1a353dcf0caa39013d01bb2bf96315dcdf047b1442fa79b3cf4fc5327055379171391690e2db95223cdd9d1f47fbcd393a9ac03124a38e4b8c9195ff54c979f1e42a692384e6a46908903c1eb3761a16563043d3b8795afc3a3e650abbf5d445ba30bfefba726fbfeb412091067c055b79ef8d63c425e5af237dbebd6d8050753c729e5c4e27fc0a2b19cfde08b795f0ecff2547114e374d8d77267f3113f569b21991d206af5534113fd36f81ccd2bdf78793e9679d59bcc15427b9d156cc0a644c1db9acaf8223e5dbb4aa3966c4abe1af60b08eba52e6073b49d113f0dc3e9934cc7906d289c1ef17f8f9f82b74a0f4a113034d4c2ab1a6541330c08a2dee9af9257addbd74f4761929c385c3e9857682344c6dfbe907e8c80d3ea0cbc803b0c2b025f81b4ba6c409ce6fa9d72b43b07d4bf2b77198cf13bfbf637a5cb46321b7f6e0219214be1f1070672c0f43c0eab7e15df0533ff17060b20817e4f9f835027e141ecad924d0569612d61238e66c5b7df4e34ce45447d46d93400ca0a836c8d02ab86da1c01f02c8d86e89129c7d8fa821570291e2e043786ebb7cb05d6a347588b720757a533c8f21be1bdac9667be94c131d4d8282d45cff50db31fe1b6bf498e38d5c3ab62e71558c7197577049c8dbe046211c77afa0b0c9d22c738f98d5c1045c5ee88efdf8dca132512de01ecd378625139905fdcce8ed08a7a40ee1a16ae135836c24d4ac1fc5071033012581c8cd612edf75e6690e8326ad79e26edffd43bed4aec0d91484bf98dd511a836bf67da277d70f91fe8c54d343da526817e1f2a25896aa34b874598cbf6f7263142a5d92f8691a2713c928b873afa5f7d27eb687170d290e2058598cbf7552eb02ca36d7b87ee0cf302dc67c44e02442963c57161af9868fd596883fe44b0243bf40d019bffca7b2de20f8c8bf551772ee839cf668440ade5e98ae4e36daca94d3f2f30116cdb8f7a40a8444eaf6c6ae5fbb4ecf09d4fa2443c49360bd08f206c44a6736c4d75bc70b533397cfac781f734c354b0693a1880d84fe1e82bec1c01caef361d104d74a9a63cd6a765d76edb19e191066674633433fb92f8ce580eb6288612a463a76a7d9a31a64e5f2093fa119c2c6313a304c6d5c8a3de36378ae1f3f77382a637e075079e22e2654773dcc26f81670f3a8fc13453aed9022ee32da3bfe3485663891884eec6f41690811b92b82a82a7af66bbe6191e99a082d9e1be4bdc55f2bec6e088b01d03c1b06e0f092292367b762c0f51856d909ff7c1b6ba27e94c19ae2c55896e9f92151b7d5fac1b52f2f92342441d25364e6ee22d150dd0749b29b61bf01d96c91f8f365155e22ee758bf3b3be29f74e3338bc68e754fd218b3b16b2848aba5141c7e856cba41b9b9d82c228b735ef10ee07539686ff6a940263f31e3b7ba362b0981ad21d5516864f1de7db36ed23613c5b9af4d5d88c2857321aeb0d5dfb658672702333f87a7532634a1464daf908c53d79c9fd67cca532b0736121b62a236d5ed2903615af31ee5cd31b6883dacf32b4d85f253490d23ae6e7caa01198640b6228604e351d822c106b376b702f7c2bc99ffc76c8417818db5c6cb1f3adf008895adca2df2c2f9488f8b2952a5ed85783b6e918aa485f7497bb917de6d18e0dd8514c5b9b4402cdcb63d20d38d1ab5fea066e32620b4ff423ed7f2b716c08c259f3f8a0f1cdc180e195e0fc22eebdea0675d2ec79f4104386d97ee41de624ce1329279a6a2f3554d3752389711fd5a1e0ec5f6f766a6907c866d8d070a7abda0edc22718dd226f2a8eae5ddaccbbd2c7f545be3e1d424e9f27ed316f417648d53f2324ce21e5c0168de6c1f5b593b32eb930f70439c07900b08b9df319e1990e9559d53f27c9e2a1b3802780733185b2d93c33c2229dba51bebd052aea5908ad8ebabb04452b515cae0ed1037c01b514c3abf7209e367cf2b116198f3929224299ea68861096a697dbd750e73680eb950724a387d3275b74161b3d888cfe706e354d406cf0a83ce3ab9e49b4393b73e4222adb6087ecb0468c3103bf6c257d70ef77f4f18bcc8ee0bbb80de30a9e08629323116312f325fa51fbee9c4d5aa3fb36eed8ec386036ef7ac9300c1124f390d891b7d80ad7270025d06097a6fa7e8d8a166e959d2faf9067263287f37cd00f611b6157e6153de866630c3a0f71877887834886107763541f6397ff07e2183edb14906b2b19d5239208441bfd7c397c8db9e94638c3fcaaf205c2d9e501569f9511b78a506177324744aa85e7670eea2b2eb35e8cb1d6159d9165911166f5a23d97592ddc98bea4e4ac923063ce9241de56492772bd8a24507ad2bcf36f80072329f7ce460bf5ec08b4ad73e91f5e2415c51d4981437347d936acc621a7800ee42e15f42357b78801d15ef8edd5bd01700fa22d3ee04c0096695645228b7059ff283637dae89e098ea72917e88e495a6b7a6a5b12205edef67761a25ca7cb58e2bccaf1f35b03d0fd9a9e697fa58d9f76a9e85b9160364397d5417656790b8c2d3066cb031b737eed10115609c7f4610022be97433c5ccef9279839966bcb743d377c1b60a67773cbcc34662d42082fb6593f968e115ce178d2b854a31c65a1a1467d7bb2788a5018138a3230b0535c07d1edf1f89b912bb55b345ff2f76484e7d20d546f2e2694608a5512daaf408653016c021917a3fe2d459ec40c8962ae7f5e9e4e0d23c691239557b0817b6a2f468c1c7f46320fd95f164a29664eca7ee66092c0f2f5f506dfc8f473abc13ad740c6919226573f6db941e8e876b42686ab7c9d45e7214c45f399add4d00d2ceee0454e133013bcfbca5cdd99d455e1463d071055201216df1d8bf66c94abdaf6938ca45ad9e3f33400dbaaa605b0854e19949e675454ef52ac1460a34049af8ed90156d1aa348c870b22d2a57130ad0edfa98a04ea6650113dc77f01895325183f47c82017a1e36537d6d810ad62b2f8edba85a658d2c3cb2129941fc654d60314c46aceb8a8926f156c4d6010d321acd24bf3d43606d4b1149f62469dcb3d00180bc125f3b514053267851c51ee838b0bd26716f88eed9386ad4c2e6622b47fb7826dde5f53d2b80d3d21cdd731532428e251d716e788c2d5e7c43fb5f7e6d261ccc340520169080471a5cd17281af887f0369d279d20cfa0b36ce303b74ec8a55f5404824a4165c68983c2a85f3588c790a7e1910c602a75b4a8b0e5ed5692f09ea29356aaf661b2094e26f1334d555628084ce9d1a163a35ffa31c30698f1e21f4165558ff27c556557628840dcdeb24aea27a8797efbd809e3ee21af8035e86592f2e575b0263f22421dd3f43e857a5dc01a436053637266f83e9824970f71e619e4ad08d9ffcdb490a17aea1cfa0cf52c9d4122c92b10eba9bb8d1257cf2d3568831295ba598fb0c5b5d38ee2ace8857219283d3ac3220c7aed87054cf568c7e1869cc8ebd3f39b4393845f1a0eaba343167f1c42bc244dde3cfc59e122b3123737c1fee8efa7d8bce2f3d73dafa4c3222dac4c5b869624662273acbed79a98bc4f28c42c1d0afd742ca893c800926971c74649ffb306248546736a20749defe31517954fdcab8e1bd918f14391c30ab46bb391a9b1e2c2ce11821ec09a2b7c6e22350eaebef7ef1660db8c3ad3d52b8c939acfd413ca93a30c162719a8d1c2a00ef78cd3247ea4f65c56c1085737404cd7623129491bfb96aea63f96311f571b33e59c57bdae442e34114c569c77ed879f9071f3d2557f3b61c8b4c0c362ae422975b996eb15513080a16a8003f587cf54ac1ede3005a2e3ddd42313c04a4cb7682e613b2d3230bfba7dc82f3e6ea386af1b7442f2baeb326b8f0729b84496ed68762f9f0483870e5a0cc1ae9c11d54007653ebc9ad3dca9a32fdd5d2bd02146b2f3714cf197a8aed7e503a8bdad717de62fcac588eedbac1d5d22389b7b8065d01cd2cf84dd3a33cc8cfa8813801cb2d3d194d84d6a8cdc228d523677b518dd3868d0912ec2a01f906b12d72e384b6148d1497f78e5549c6b36f9f1510b7eff544dd72c6ff66ed4dc15d9107e44620bcdc545256bedc77f4ff085d3b7ed074ecc52630bc8c71af607f3d9ce74231534cb141464c6c259f7593092780ce8666e091d10c9b9e328f59cbb816ba052c96ed95433a7fa2170970f7d8c38c07bf0bf82e44cb0c3a91d5602a36c62a361e30c70fc2f897679cfc0eb4dff9083165ad5d26e938b66a76c89f261f75dddbf16a01a726463dc49bc2775185939c555f923701271a4235c9b13b46dceb7bff8c8cc4e5d7ed19bffda1d2563157ef7a9502ad45653857a472d85f12d3f0ada7d7de37523eb5d263a8e2474c4d0faaa8ef47e77c0d5b9ebd5a8531136d4c +MD = da6f0df39e1b245bd3480871c233d69b7b2bc0b6417a366ac176c9882b764cee9b97ad0c37001b76bfbe72bd5af69f846b1e9eac82fba587f628a0166c4d8d6f + +Len = 50216 +Msg = 98c19a812bfd4890ed2b9c39456b492faaa3a8385b6a0a3250254c54706facb704bfda156c4453d01014ea369a86a70363dcd5272a2657ca0c633b8eb0e89214c3067ec1a4e78cc260b9444de00eff2a6183f97325a0a79868004ba596b2c5c8bbdeac0e3bac9d6dc361d3077fccf8ad8ee03ba2b3a2a3a24d46a3238994eedbd6918c82995c2ed92256bfebdf853b93d03bc43e3bf2f3f2a17b6c90f058b556fa6648a726bfe60f66de2f82690470e411dbbccf27593e904ee8cd7235c4c14011a405054b9c6e1675424b5283103ea938094adbde9f2c823ad5ef53bfa1bba10294ee226ebc6df639ca3de596704de92d0d96ecc88c66d24f89f9baf6b64a81b57e2888f9e88cb899bd2ac30bed46acd82fc9894de89488734e143042cd17e912aadebf52e673637c653d72484fd1fa21b70b3bd57a5eaa906a683c0bacc9e0015f364de37ec9ffcc089b7cb75e95dcf0ec8388c80b6a428d261c66b91c096f6ae658bc127a379570ef6f69bfe13b592d175afb8e63635752ca5936b4e57f9d35876d9449a1642b5062dfbfc7a26a7ac080b7198f4aeff2c79e463565cfd2724a8a9d5befbaf9cc54a813083967cb46916fc36c3488b61ad4ea0cea32a2abf691370f9b6b8e9d7d640b34cb7cf906c5882ca67be3e461d761f5d2dd8425b132f3d6ecdb27e5f94868d16a91f820c2ff8efe87ce052898315608c197c4218d2d56ae5ba48a86b4344843dce115a3a7fd892f8eee031a02319b6b019f585fe6efa408857dfc3b7749eca9b3433b4c5ec66305e562438348de1866b97daaa46581c32c92eee5caea903c4b163fd2e18f6202c9b1b22f2a1241b64111ba20bbb2ea9d62a97faefcb41021702e5e422be2da50c21d672ed907605b4332dd246b743218f2f2b9bd997ed281622327f3f2fd35333a4e08a756cf45f0b5446e1d7b53621e2396237b69efdc46671c234efe8b7b95776f1d046a13f85edf6ef673b4f981963fbd465033b03856c841d8b91632b45dc2a62eacdd7b7f8b09d9fc8dde0b97678c8ea8a5c168ee9bcdbbd09d049ae973631bc40777aee4617bad08d5c134ad7b5332d3e0d9c004fbbdb293638e6c22bfa2f8667d00552fc77c11a2b2241ac9b9dbd14f6b44608460e24da7717d506528c7629d763f1766a4562d538cd065f6096e91a2accaef75b182b5963198edbc991983f05afd9d93e24f2aa2cc8ebe3953529d560d3216e0d6e612e809a9ec2ef7e183e791028ebd68b03018d824cd9c7fd01bf3f4467cccb6568b236376f4c32b688a0a831693ed1ec1663b195a3926763034ffcbccca413b1948d1a6c9ae841df3bfe29901542aecc9f596f7faaadf1eba0f04f98da7484c7972793a68c278b5cd4af6398a787cba1205aedbcacad060b6d589e651bce7d1bc31a4871bd7a8dc3d54cecc7ba8eb70e2bd0d2b943e00256bad17fae0b028b32bacd9f5ac951a788a05f3bb9a8b80f682453a511eb1775322c0359d012c13d80e0ca0ece1a6d872fd84ec6db0ca42343ac6bdb331c93ed323356b377ed8af29ad7881d484afeab3defa4149840c3a1351681fbb942e5c8eb63541301d5b048e4f1905155b5b5622758e7bb9e0fa6e791152e7cf1189d96b23e840f0a75e1af03e17b3172f4f26a6096921238a3be84fc0ad9d596e82be51b175efdfe388fa35c0991442c7366229e3b2bbf14b78b07ea7a0c9c074c0122aa905d6669b82ab471ec7aeffedb610924c92d28aeb59cced0e54f46cebecdddd53bf7eeb95f3350ca0ca0cb467773ac98a31ed56328546833cf0a5c59bad2852f7cc6ed89a84a16e8dcab3cbfe22e7b5e5b694bde8a5262a7b9d65334bacfa71dd532e9372ddf6542fee2daa7a5f2040a7494f27d46072c91183bb1ec5915b224d7d4786e5a53ca5cc5f00bba3d5ec511614a7fcbf5f344747c92feecf03534d8e724017bb847b4bad45b764412d53d17c3c23a4714a738e6598490b32aaebdae959a1b0bb24bc2d1ac7d70f1b0f5da61fec4c88b2c83885b31792ddb62f2ab1a65af3b8af2a06335a0dea23fa2113b9484aa80e4a818a14796f91cd223a19ba0d9fbd975d416245b7407808a60e7cf23e7ec19f001e7123fec7ce414072bede654d87b48d0fd74b77880725e77ca0394bb11fa49d47f59a8b48d2a2d6802303f88fda79093c6d2de30c21e485148877b50b4883eaa31f6168192459ad0b50120c8b3c4d98712cd343f54dac477d3b92c5b3c6a6acdbf661dd644dcc8dbc4bf4ea69389801561d26df6a14e6f65fc174c3d22173ae968280324ed3653d3b1e8fda5253c30d92470cfe94fcf85a642303f78fdf54b77dcca7ae01408b872fd1cd236e173484ceb36eea9b8f4b3b326829a8138ab08e38dbbf9aa51ba531416a950fe40b542eb16735e9a65547617198cd2085a9eefc6eb8ae3e61ed1d0418f3cee4ddb78bd2e46d4744ddd55494cabcd7a50ec578c9c7695ee25e3d5ac85d7362eb80a4423a0ecd8e436997db9be4db2e80d665b5bdedf8b5cec493c445b7f3386cf659df2cd88df12d7223423f69fdbcf904110d9f856c9d49ba77c342cf7a38af665ecc71e9b7574c1f02f348fe2a6857c152e8393acefd9d6872bf894c104afbf93c6fd1eb52aae699bb547e4d6b1ae434aeae51b125bc10f70b20e0d7bd569ad67a32138367d14408d6cfa8fec7bae686afc7b09579c4eb8fcb4e10188a44d227a07c015bfdb4ae93dbcb90b94731a6dedd9c1e8cd3fc765739b2e1b67efcec1137b4611b1c3b6b6253b0fc25f2656c65bf93633e3a4cf878ddb21a5aa2672fbec644fc6bcc4ec59ec6e5b5ead03f8042dd154655b69cbb1a3fb785abfc6be556d5939af116d5026fbad483b1e9a7299ebf8b90764fd40563e82ae85297f15400ec09035801b86bfcb9e42d224686b0a1ee5b094b0edd1f7e5f710cf678e2c6e5940efe4696df486e4a7d7de4eec25d72f1ef797cfa9d51912cf6b940a924812d540a5464dc32e1ecf60739a0e945783a50ada8b11bfde2c5d81fb6d731a1ceffb565cd59db9a7d9f43ea2afd40f5492094ff5e917ae51c41ea56cd65183ff4833e8731cd9bfd66afbb8f18a4fabc184d444c62c41e3e452eea02c48f66e83de377d9486a2545e243e65ccb3c1f812ce9e8fb7df310eea6b3608a64ff2483ef44e8c1dad580583a834bba0a6eb82cce1b087677c656df87f9d558755d5af853d11aa8aeb9b420b69872129ee2cba4460b2d2418e4faf73027d1d3bf500e2fb1af94f78dbcca839daae3ca503f63d3dce2de6d27f60320e866da6309814a0f5109de143f86c96b39e0274ce62d85a0d8c8a4b96ea37a41f8de7a701d9815827a0581698cc0b9bfd063c5fe28563bf381e40670b3946642a8b63862c13c787075cb045c3c12a267ab5b454ae05f8cb4205f8cfabf70cf0a40179ca2be1579bf8b84ef5716238d4a12ef3097d4f381cbfd60bec05ae0be8308282f96dccc23580158cbc1e39c81524c470c4ccdb82021601025284b8c3994481278a7e2097b23226e1e026b248766a38c64d39356739c9197489b5c1b4b2547fc003d9a738b0835ef73827664a66e5de6bd93ee768225d71caf825336f91f4e0f4dc1cab35af081024fa8cc04e653c37ca1f4a6c053a57cc7e343f9844d68a572e9993b71f0c14fd03cde34ab4ffb1d77975e82dbf102c6c16b4816ae4ee9944e5c2fb5545665e781c18c7801ea4fb3fe28394c706126fe32cff7725b048a63cb2cea000493c2913c67185eb0be37cc3adaedca26acf76b4298bad43478345910e331e32aafc29529b4ebaf5dd39cb25338e2c5a6db5f57174df806e0b1cdbf46086e276eb34c3a71326d32b23264ab70c7810497f64508dc7618ce08b73edd9424089477a647ca3c6906b157e27900b9113051a20390c7b79c84f5549370fb23be67f2ee909d8bb1e01ff2f4ebc1f9579d58726f0c2adcd046a3436b4c4a611b5ef3097a7935c6f91f1ebf305626dd72f36230a518fa8f50fcdd7ff6eab357a38d14a1c46af7c23bae6ddeb32a8ff6319cb453ec30e8285f469a739c769524e3d13281736acbc9a0167217266fe38abd1fb8a3ee5bdcee24ad42e506f7d71104b5b5723082992150de9734312e0ce23e04d5e850a1be2ac8b83d9edc7561662ebe053ca3b94913728e43fb7b6ef146dbd472e9bd0a762572f0f466c5f91b6b88768aa77317c3e72faedd36ad377afdbc16f96fdb9fed244bdbcd046989ed673b64ac7b49a4efe5aec7cfab6e918f510a52d142526709727b0331427130bfa46e10d47fcc69b6551860802367851888ed10622acb6ab35629f089e685f379684a03687ca56dfe7e94025865401afdeb8cd914efeeb1d4177e283bb94cdc03fcf7c4d23a7bb8b1a94b34bf3ba05926c210344f58624352fea135b1836ff245a89cdb7881f753b51e647e1d6b2f487c55a0aa7b2ed0291753ba9f510c953d27b362d1c419c145f4250868dabe96f2e5eb65c20039df69095ef3ec851b67c69267702d1cc9809654065f7b5efc7d5c4ace87044641380d126672a6b47a8d946c0aef77ea5adc4fbf08903e12ed8b9094442df8b60e821c19b55f5445efaeaf9fe5063895957f771c74c43a5c586995a9967f27b667669f0591e37fa24372201140def6853f0e16539222f5a507bf73730ca618af168c9dc04326ae323e83eeac639e3c222334354baad3f956c03432d9edca530ae19b1e31124f695da7862156956f8fd40897daee04feced54c70dbc28312612d913c2b404886398b4826c2f91f797903b5df1023e8ccfa8c731c761814a7c982ee16cad52cf5a424e709d87c49e38117f3b5dcd29d6507e1fce009c2e9b1136fbfd206d805c134904dd76bc75bd630788ac148e36cf07d3eb1639ea84a57c85ece17e4311c157138423984c29d790c8e42aa5b3f9d95e20a584e3cb27ec16fb6e18e6ec9b917e2828dd6295557f59fc2e3181dcc787ec0adba48ecc8cf1890dfc1deab8623ef0fd7f8586568d071717a34b5977344d09e8f9ffab5d28384b34136b0a351a4c680a049643de35116081ffe26d01d4bb60518cf0b9fb8e32c614407ac5f1382c4be4349a5bbae220bee1a0916d0b0d3567cb01124b26237392150fe79e6b20610502ac0c0e6b18b79abd11d2ba01625d88bbf2eedf7b8c7d27ccde1c0401878d3bebb7660c6d5d488c5ae020d47358965baadef0d75a3da20f9237928762b20349160322b6400445fc6187f65cdf7462592e2192d3409ba4b20ba8e5a8fd5455c5080bec9c71b242736775edb3b42a63f9ac677f43dd4ad7a79fae8fd93fc31728382e0e3f70fbc079b3265169800efdb5ac1d00b97eafcd58d4c4eba8b8a2a9fb2d06121fdc254287fb35dbfec186a235b3ceb194a35ef85e31689397e66790b66d1082ae01e34b269610d7d40725f3d249d91c75f9bcdb203c16221747866dd26ed9fa7a80aa4cce2a43ff99bf616513e4e8abddd06e08376b69e1b75a8383e7b8cec3f5e6deb9e71e4b9db058cd6882fb59ea2cc5d6e21c35c08ce8ade3955ec16b99b093152519e8944ca861ce909813c951f3588c0b4721a67e3ba02af4b01f3cc62b13d210df1fba86e278e95fdbb4a36db1f6e1e630c5a82010efce347428ced3d5e79a0f9f3a3ad70efca238c66464a7f92f9cf56188322d18cb41d723847e6d419cd163e2be71b78e7b8dbdd099a99b296101db61efd0ffa3e13a5f36a8d7ecee921cd032130b92d154104192cadeb1d349b4eaba62f11252cffc2f360c77cd4d75d0b715ee75038834be76758e708677383ab5c3983f0fa5d61bd9aa35ba98dea6919b06972a84039bfcdf013b0b8395cae7cf25e607320d922de0fbab3cda22a2d3fe7ca3b89ee3d86fcdce870c23bf50509949e2e6440a8286d7b2d35b0ba9f92c43f0aa8bbea9986bd525c8fef144870996b80568901d35db205854b197e527ef2dfb02305db55a9577af975076d5dd8769f8c3eaa0c60a8f5d6495cd1954ada0fef4413316a77d6147d468bd2ed3a23e6574a4f91085af07d1501cfa1a98f8f64994fe0053e09f53a83cb37173de93b32bb43f1059ec61f93eb360e4f5f2a84390358f14a0012ed12b311e2a0047206a2f4fe8dcd76ae1c7f806e80a36122a0d655e7b0c7579ba8e4369ff533ebdb6e7d2a0389b23719cf89fb348d67577fcd82b8848446ecab0df834fdd6999a2e5a0d84db4f7c8a1020f9850d9d61e84af28654b8d58d664a0495d4b4ef9ab873b1982b0d45f3169af7164583185abd8af62a500a0c666e8075043e4ba7fdedb05d674721d5de84bf3c29641d671b7e47c3b6d4038f97ac56488e9b4a658ce3ef45c2ffa066077b87d77a0964f069d28940720a29c7e8c7d36579133a930d3f3751f07b115f34a4fbb0515dde1c0f615955a618071c236800b50dcda29849ac91693be4fc2a2ea722b0f6881553d3d4beea992622f70e36e31e94f20adc08d00375e962e92ebd2b05bdb0b191fe7fd3c1e7945d04be73da878954a9fac71153985d431c61d3a8d8aac0c900d883d9056934dfe434db18fbf1df961bfbc12ede5509913beb81b9571ba2879e744caa13bebac2e43ab4c5422b06a26f9432251944621be610a0b650604933b3edbfb9a4c85f85859fb344563ce8c0ce4e82bfab6c4e28465798686a7f9f1466c946d061900c6feeea3e5ce12c6c3860b019c43dd5b6028348d2974e828b74e09248b5f21daac948a3bfd4880379514c425ffc768883efc46bb40ba470f49949cf2d31fe771fdbba529d75f5caf955bb8cbd2fff8c9b383149a78b1352c4ccc8095c0c2da755ed6d804007d089d38ad41799247fe9e825f36914e1432fe25585c73f0e29b4324789b41052c046ef39c06a5ca49fa851fd325361d3dd0f367ca9913dff97a6a0313577751d6e0b35a9a60d6f7707d0bd0a1590f82a89fba8895cefbea6228686f29950d73282df8d24af8938655e691692c5a73fadeef920c3c56a2acc705bcbd3dec79e57a3cbdff0036521364c7c43de6a20a026b51486740d89ea39292d591c2c64325579d51356c92991b17b0f2c362b84815b8551c2e25bd564b5f6041715aab0fbf3ad08119e2a5ef09f902db9e1305a4c1607babc55d8d501087fe9ed05813262fbe769c1104d8ba5c836dbd229a22a681de3565d17ac1129f96be3c336d872cd33ce020bf45b381af413235f54a97d3d38c02d8b6ffe11455262fb81eed8f9a5650bdad8917bedb6ebcf0c48ab6cd9333146482fa4f65ebbd90e381076a94e535746f90e30d633e174139e757614c9b2cf1eae32ffbe7ff55714a2561672fa3dd2266897199391035987e2cefdc8d222d9f0677ac87bfc59931f413c155c83cd9d532e5994db908460d2df3c87b17eeb18637cf147585e5157d51eaabd8e736a8276533ee9d6b6cd529c9ea55ef654755420f47ec37b2b4469de40895430517b4737e02d5fab8e44f68f25f3c8c1dc2954cfd708860cee9a92e3afbf236ca66ab53ddc0d3f839d5216517e0c0e379f6de2172e79d6342cba9a8c74367268f99e94314fc8d1856d5f788ab1da788224aac4a000b8fc1a6f0e498096d4894cd27facba41455dda85d4e5e3c4434dcaf349c31355ad40e83efd67681d83af41b975c481bb6c2ba96d172503c131d73695b0a7183540e9c322efbbeb122a2d6f37e8a62dc425831bae920094af8b5cef91493856a95941d5a24c0eb27cb14bfdd34018676558ac58cfac3e3b9739251d6f7b3e76b8e08e46467d286463ff511316e5e3d7a5edef8758cca6a280227ae6b8ad801f6bbd193e96e8d1aacffe87db8740cf248ccc94d0d15c02717230a275f349c7fac9d82ae41bf6d12cc995357aaeb7a3f722dee35cc3c31850764ae7f0a8b6dbafda1908605c0fef9158aca21b13b329f770092353b669b0e592588f80605c84e5a669fddbe19cf482852c17e43f9d27cd7d369edd30b694dbd043e34ca1a38a4436ae4f7d3303a9a657fbdcfdb9db6620514e9a20bb128bd838f12b7df6f3b47691d2476dd9aed3a6d602398f09d7ae99f5376047dee55c84d14baf3ae4b4cb20bfbb2dd45b033d290a2976c2b8f7c6e070db38782297d089a339b6acf54e98edc95349d9426caed8fc59dabd4da5789cca2069db0d90af8cb6a48afab029e082b680e2a51550ed5bb378aea950488a750cf03d9a2938c1381372714d9dad6e8a8e2c425f5c17c359376f3aad4947c5153d32fadafef8cd32c18db4cd454309ab593eaf30a028f87a9127c6f2c10cf12165cee9c612369d25c8db9ba12f51788d209e724067ed5467c8879aa040fed6448cab5283f05bf7b731466df2e34184d9eb34d3b63ccd9fc8e476fede4c853b24bbb37d3c1dd0a49003b574e7ea79f537c0e819baa430a044eede39d46f09ea69facdb11722fc6c59460ff6a9cb63934ea9a28e76297e2084eda694ab30f2a9bc4fe1383c884616ba023e3c5f0e6525c7ad4a780f5220e730e9b6578b17a941c5c4d858d4d7186c5a40298e323ce97549d4c820b0a77cbdefeaf6ca9bad947a2b60985a0795d934e208b8334adc56497d2704ce7fb1fb6a69f94e3404791c1b962b0a86fc4cf037f960d375ce76146a0bade6caa4f705b5471da6dfed04a9eeb02e1623dc83c73d4852629ae7938ba09a6f575b48020367315fe6117fd4a4b91e70a57bcec3c50e77e54debbcba23b2d2733dca93585b48cec5f613e27373458bf99dd4fb9352712d217cb07673446a5dc38260ac837720c75abe2d3d69805a9dd2e8778b7bd62f120fd8313c46568ee0670c62bc0bbdb7c32326a6b83c32bffc026caca503b910cfb647b537bcc1e70665c51bea7697d56b2a17c87d76f03e519113ba71b464 +MD = ba5878ebbc5b63a444130ee4b71847556d494f9fb1a62aa9b27847e47068a7bc521f83bd34883df721c37d75762ceaf53649bbcabdadbfcd6537ab8eb676c779 + +Len = 50800 +Msg = 3dd0a23d2864292150ae4716c68a36fa41e5033dc0cf4a9571d241f3d282f7b51656de1dcab68802b855aec50cc17687b539f5990ebef334be6cef6bdd0b635d58e24aaf96cbde3a5b8da600ed65b06576e61c9caa04da5fa96bb3e327158e0bca1becdcd3cbb63101fc38afb29e6dfc4c957d2cdbc8847cfc749543f9c7ff2535aace8acbde954e724a6bbba49334b4ffee2232eb327bf57d329c739b493e156136f8a2c42a05fb7520480a086d8df556981297206b4630f54ad05b55c4d3411668700d07da8da0d426d585295300271a3c5541c39b6d972b6739e46f6047131ce840b1dc14b6a355031c144e6e16b21381f41a1be97890e92fe0f4304420f13a5d70788a00066dc15f25a0bee656fe0910f609727ef085f54acc74e199e9453a6f06495bc80766dfe4f60fc2e24973c49063f50e825ddd1861054dca862776e2c70c0b959141f67938994ba28a757a0baa43c8381c45001a1c9465333464ecfb0d89a881863b865503163aa6076479a8069f6938743256c32280a664ca270f4ce9860767cc7d7c3dee73c616819eda614b7ec056b3ab47db1cd1f7a471f9479f010a108f8e8f42f6a0bad6391fa903ff21e9b5da01393b29b1903f3d5161fcba001dab40f2fa3e4bc2f351580a0f5e4a32e7300b85629a768ac4687591e796668cc7c0c42045da03fc2421bb6a5851092380193368b1cc8a4e7559955a137d6b4d11376141f87de5f5572daa660a46069fbc5898d1ab392da6abfae4d36e1991ed02f8607d9b8ebb56935d6d26afa4074ca4d582e9da49273a6f33ac257fd3a011a3ec09fbb7774bc6e1994bd3ced3d5d23f793bd8c5653fb1c8ec3377ce115f63faf9a3e4d39f5eee48c98e95f03b38da962a0ac5f4f33fb4bf0dc3f2e43c978b1208785f786ebb76d0d57c939c44f70cafd136d8f05dedea5b7ea2bd48bd1031f002ce952d4c2c0581a55ef65a56dc0f9457083b400911fca427180282fa92fc9ecdeeae7aa1774364227be5b2d9ad8c4da2c8136c617591a2f16fe61b5de594235320d1e7d565da80321d892d35332ae09cbe8bfdcbe0525ec2ed939a4dd0a2877aab26fd50be6fddbe8a0a52d23692572c31c87ab119e6df84dc3187321dced22cd9d6437b4aad84af0b8faa187e6bb9396bf56b7ae9f72d1d82e76b7392bf0d50f00942bcd0397cebe840bc70d25e0fadb238588e182a517728decd7af81e40ce39e6807c1abecd5c69461040fb13606f4fb9ca556e295278153e35ae1692718efc968724eee280e9d6c92ef1c231b4678aa14937b39c380a932e2b77b6c4aa778141df1a154d9c7976f09feced61147daa185b9cae2a0c14e8d6383d9e5bf2730f0d0ec857a829f692e4ea98444a8699f9458aec287cd57d5d5fe3689700526aef259e947b9b304772cd975c919515a3bd515d8fe93a9b2f3af1b560695bd0426aaf17e84bcdb7545ed22ea29ae9c6833f645cedb90b6611c7b3358edc1377e4c6d4ff2b8de7c9059e1b38d128efa321c7a4106e60973f0b4cceeb58b8d14c384bbbe0c50a906b4279d13d50034eb3659c3c007ba5872d05106a5f27c43c5926438d411e8a71a7f3391cc389f3affe380852b57a518339e75cad1a64c9fda597f471ab9ed5328400242354e3c0ba8d80510fb5d52c326a9978c2a3758fbb3871a790a5adb27a0b51830f77c631166727c09a8af2fe3dc804accf82c4de1f1b9ea511b7b3eaf142ce9d07b59a106c94139d1cbb3b8f4b5b0e40fd40b77ed15504331d691845403360bc3494c823631d2e30bcd116a7052ca07b7364b83678ee8d9cdc44448b0fe6ed26be9eb633a4095ec0a353ed0d1342a3a65a762ed0bcef202675cf9f8405615e24cc5bcd07d6608d97f8c9278a1ca5fd09d9fe8112475fa41b119292f8cbae9cfe86527569a22ba2fbe4bc2ce6c85e98ec198518c5be4603c1d71683ae09d58efc150b171fb07185358fb364e9c1745a9741925db1ccac2461f0e2db6f66dc1b66a10e19f2a73a1e8d2036375aacef2d517aaeb79d179aef42837f03038acd2d8351e4e5aa308e554abfcd0d0334d8f864ec608e5247174caeb97361321eafab9c4e14e10ff27612b696014eaaff36a316be304b99052c23ebba485fc4ca8b7cf9c02677e896f93d17ca596218b51115b019a65438f9e05c42ad85648035688ae2cea20effc320beb6865eb115ff713879244b12f7ca3bdffbbab3d72f084ebc9fa0110d1a22f27ddbf096a469855ff3bb08a6eda02045945e0b592299ea46fa775ffbde025a7762ce308ba1dbeee22ebcec404ef9a50764b3c5ffac8684562cb433e6e87f14b756d66fc51134e203d1c6f99f9bccff883541132eddbe7e893a9c435c9359f8bb3f3cd5cb5d3c0bc9c51f564d3edfd6d0f1511b6c1d087fe40d78b8e44757ad8a07498924ebbb0e3cf00f2dd29dfad3e87e2b0544d42e2f718b8fb9076c42dc2c9442b45b257996643be0a3b422e79dd7c617fa3b6af637379d2b6f4b6ae22caad0727df5723d494a8ed8e27d336ddda5af5d22db47293f3e2c92023baaff460ba1200d7c39d1cff5d24112b43a533b5b2344a4abd48fee8f1e0d995c9261d157f1938b78e4fbd16ded615ae29e625e000915a83377efed315de45c388bcf7696a714206fda84f7bbc981e38ec762ef9c481958fc9912e32ccf5f7456fe13ddd1abebf4eb8334e8e64de8d5401d1b9538ca95da8da3c179895ec6093e51f3ad10e5602e7347d24df660e057810854f9da76d4566efbc2574ff1604279ee388f593dbbf7908e28cdf4ecaf91d7f0d7c38d341df5280bdd24866f76488e3baa2ab69b4376c8c0fc11e7d89eaccd3d6a9a56ecb7de423adc8936c2504305a210272ee741d4a64517c0d70cf5d0e857d6263f86eb3b44ef852d68d1365a6789332dc909fd38af854183cc6ffc24b2a6e2104feb0131b794a2b9248470b53a5adce590e9bfcb6de94102cfebfbd1b29358008e0141ea2290f9d470c3457d097cd1f68a6fcfb467d7e1e4e76739fe7084fe9d05b1f28e0d4b53275676ffda5957db0ac084741c25b8e7d21dccffd475e29e90bbe45e44002d7759dd85e4f3b453c1c6380ef82b30f51c737800957b4816fe80b880cb35849e2f130dd83df1a1d84dd4fcf6a1080ff4487000ec431a7186e716056e8289200641fdef5851fba94e45dc1425b8dc4a1f3370bd7851da799c20faa997cb675dcd76be8aeb6a3a521d7285868284ce6adda41cb88d06e2e7bf73d3ace2edf7c25b96ffe77aced627ad9c785cf44f07f695651cf811ab5b4356a64a17363263d71869670ceec6f6ad678a5d9e655faf76b13c1785ee886c16cb8206f17de0d0246db69f032d9ac26eb106db52bcfeed7298f2b5680ae53ee685cfb0429e406832c0474ed4219263f1f4d69a82e172e973b24f9fa84f0af83eec55ef13819a53887ae21d85b0f601be99c34335bb03cc00671a7d4da33ec3a368db6c6b0e36b9ae0450b420c40dc35e06957e7434fbbea21f1df660f0cbc79f612bce522d5bc12dc459baac4420d258a514f24633a0e6e0421eb3e71df72bb93f0bbed0c653938c24c4d83218775634dd0848b3a13c6d4238e65ced120b187a6a44e4eec16458538b5bb5b9285a767b153827c364157a50693d9877b74eb5684b9ee7b306d7380b61e4fa495c115ab4b76d387f657336933eea0f8ff40a2b0d48e070287df45a3b0d284eea9ce32b672a6f23ee8ca0c9921db76a3cb185a1f1cad426530f02e76bf9ef5aa5d01a111cd6068f18c2e35ad56f6a5187d609409a3a40b23ea24b06238c01c581e0fc335c23fa2406ed8311e59dcc6b764bdc2f92feedbbf11f15e0ec2e253887b4d2baae79128bbff6c917490da56114f846976180a3ea726fa99d4d47255bbe34e3cd9b40176c4bc6fd948929bdda66c591a08d2629e7cb784f64cf3fc7d52e497995aae0d26eb34467af2e58db7f769b0371a05a495904244e5df87fd44fdfd9da3a63c1083afe574e91bf01c9f84b60e6332283c9e8235af0b1536d1370dacd4fe34e4b847834e9fc62c48e4decedfe800d9908723d32027b8865724ee1260e20b8f4e70dcf5ee1b749c6663004655b1a288f530c0038033809b8f74b49cb8395e2dcfb6ae78326c86e4cf139e7ba61fbac8bcb5fd93e476f5dd362d351d213f6898ef16469aba277fade97323df4f66dc016d8326e4bb568ab3e1caea142a88ad4932fc3fdde3c0b1504c0e1b01c04b68cb7e24f6a67356a1c828ea4e023299aec721f4f4a25dccee647d410e638721f39f6517c739aafbed8261f7db67d7d6ef9b327cff9876a06962e3b85875328f0ef5b8e8231ed0bad06b23600cd598e4e22dfb10db10dcffc4c425d093c720e71d56fff294e67317dcfae3df7cabe43828f7d24cf1bbef1f83109a363ad9f0cea14b90d386f110a765aa39b2858b584516915e8dedfa2b9416d0d735d81e10aa2d3c120793ef17ce2d019b85b1d453905d82f6502a4c10f2127d636bd6041f0e23b10a1b2631270075896fc5ac1764ae4035403021224dcde88ea554cf4c5a6f2742df6ac8679cf2f1ba4cfeced50a037130b2aa8d2d206c1b7d336d2e277141aa5a0892f4e307fa040ca99d849dc21452fdd42ba8cd37712dc194317d55f23a2f7f2c103633e6aa2f091c2e77c21b6588051b301e73015192142e3e27384b9d191aa05ef6eab767f537fb2e12f2748b62eefe5458cf0ca1eacd87dfc64eebff09b50bfbc177f8d7d901ed18e09f7bda8603f404e231b7d68a5637b2e51a51e473f6d563205c396e6d0f688b5b398ff763eca2de353ba16403569443ee2b2bc1ea3883219e17f79003a8d3d20d412f468f11712cec4d37cee847440f4be1c83bdef29bb3952b91e14f76d5995156e86c6a1ae58d51f7199bab90bd71a8eeb5a6b4cd8595a017b6d692e1e45dd1eb39cd7751868c10c9954ebfcb77176f9272872e21e744395cc4e49082668c096e91de496dca859325595cb77fe76d2a8d9d718d88274bdb7b5a9faad0f29052519f3352c8282673aac44a04f6b4ef442094ea6568dc1900f3c66c54461f276744a05125e935db1cba74ab3af8361a470bd756386c5c384446c6df2f5a22ad92b843bc35496a1018e4c8d4cbdd018acdaff34998eb4e260ff4aa6c9ea5c38f7f2cf7d8f3713b51d2ba5f6b3a1d9d9d327d6738e96e287eee7e0f992481686986f34b3c02f9203cd49ba6d2f84260de0004b1a8cc7d618f4a5354f943a597b834dbac59c639cf2db9091db098e401d9c0c6411d94818ff3be0518e18e6ac7f82326a9b6cfcb8ea0daa34268ae6ae6fcff42b40bd4230a28b413da0667497fa5bc74a1e77216f532d3cab38f7b5f86d405fa89082dda76bac70006bc60da254d7b3653407fb489601f1fcf79b22a77eb9f6e2e76e4003c16514a2d980d956f6be9ec0c662b2cb19526e314dbd5642090061e12fcb94cf0b7fd52cd1dbff3a46d83265bdd16d8045e75e5221a4785178df47ad4edf0090b3c35da53a20a7d7aded145bff9c54f0828a67655a99b15c321b504f2ef3add020f65115fe98fbb394c4efaa760b90a239013174e2e429ec9f7f25ceb54ec316bae35c84048820586126695b0866491ed0156586a0cd078827d26e32cd3a69ebe95124fb343b414e7edb2a749ff4a6edb18eaba47c9c74b932dbd2835dfdc7d61507518176f8841b51abdb0022fed0964234aad55e9897062863faca4ce0065fa6ce8c1fb2061149445e240479ccefa1edcf0b212e0a99f771328e0f842b4e0e046e7ddcd0ae1160bdbbac8a8ca62a9719267590d43aa11475103558ec26c66c97afcbc0b838ace6268b1c9943d4a9ff2d02912b3970d8e69dc597af6c199700c8591ed353ec0965e6961b3a869d9561932b07f943f465f44f185d1bec4be852fd33201e8711516465a452743d4b1645b2697e02db0d71c6f4d32fa55405e2eb9f0677a83df1ab6c0b7d694f50245334f2849f4fea0524e5f5bcb4538c8fad52179acb795ed2400440e807d3a77175b6bb4311e75622a5d8b89c952f7d31700fccb7c59ad0fd38b46cafd4092a79a351756f7cd309ad1d27a73a7a410d3354ab25250c127dbaba04f7987af8c286068f88d08a19e9edb35b2960099025dc80ad8cab49e94b51ee7d496c9ea855dec6f75d2ee1c3e02c90fba5d4ed24ae751c9d681324282409fda6caf2eb22ccca0a115a5129d8d5b0db8f855fcc058e465204202344d6ef2b0f07e3f4066d1092fa66e8010b61afc3bda030c94f3caf9748691ea452fb94ff4b29fa389a91087ebf7d70052e6558ab5eb50eda1dcff7b02654c95df5a0facdda9379884d979bd681de58263cecb7b0e556875adfc950d8154d8918d6cb0bdde4cdc6aac786b3e16712092cdaffb41c7b0b03103c2fa1593dddc69b9d87ae7690604b66b16637e89aa0ecdfb2a43735475deac5dd0bd279c58be8aff1d9cbe206d36e86b3400e33421068066ce5284572d3a4416964ca81d5e0571c7acb4b676fae99d0741b220a85ebe46bb0ca6f9223f6994c894373b997637caae164144ef37a330e9dff5ab58eb8cad4245af565834c32aee5afb468319cbd21ceac0fdfb9bea406d5f49e7b83ff810a739da005ba5fd52e24b075d7cb138348e8ac2461ea025381c503d6a68d4971d5439b59bcefb7eb96ee4e9e4f8e5137e8d86b3c1eadcfaa461533ea7cd31c02fc3d5d09d04adaddaced921816a1dd3fc945f13d5c2bab101f6c8dc3467e039c4908ea968af4521139c683c9742d3f05b3d84711648b21edd27217474bb583a7824c4aea3215a7f104242a9ab35a00ef6e39749e7ef6b6aa28d0db5fd5a1268b70b386eb10d45fe4d7ad8d731a4fa767c10f80cef194f4ade92ee1f42a6973b0dbe3a5836b5a04517809b63df035bcd476037487078c625fdd332fec9337f27f8b84af998dcf1da2b0e1adde7e33c79e53bc57b306078828cb88cf3158302c5e473fad14bc5a333e47dd78400c72512c21e33139372cef717dd5c9a9c17ea8b6d8bca6de4123cd8d05a42149e11ae1e8a71f0b01e2241ea0b9c1233e1649eef007a2a2de645373f7b2dfb0e347520039af19ecf34f169d1f48f4e7d79eb887729a99a9fc6c12aee415352bf584423587ff78dcf7c52bf554f2171d5ba2f4faa6594bc420a38704bcf74f9c67e113083b61e5e3f58e8bada97ed2cbb46a25cff30e5dfa324fdbffe720d40a21a6ed01bb9a080ad5f05d4d84b6ccfbc93e718fc07f7a541ab93527cd586d7e0a1bf7a9707588587f34ca5e4f60aeb4826603c1777548d8c029be03d767c2ff0c885a87c2b90ed6dba1f96771451fffc72901ed7fb86f900de69e1b6b147a950e343d241a2d418ad28112f0522dc8e380d1949c40109884e73afcf7f3283e48f968c906de9bca7e4a1a3f815ae0506895a4e35422456bbb386b0020d56cb521b36c26b778c950ba2cb6a6a3f1256196eeeb17a08d1e8f3de6c2d41d7ba5882725887bbf4e7f7c44619b6fdd7fc5a07674ed5705e965ad12da879d764b9e5e633704f0a4ca87f626d011c3b86c89b70f0df4cc0d9ee06c43fd0286b4af1ee0dbd227aff052a865686062cabb20364e69a2469d3f145875d6367bb45e0eecb699dc3add2a50a97110fbd4ab6e04970c8d1c2cf323b3946fd66c3952fccfd187a53f85a5db2b53c32888b18f597e739a8261eef642e45e0348898586165c95fb05e1502d8a4b6e03b7ee3f9d05f7919f505bd4cd230d7cd93674a778351c00bbc3ace39dbf18c2d9c617c7fef9d8bac400f026a14f98b798a715e752e077d96fe786851e03fa16eb5cea90d9bd87b6b1990a2b994cebd7e8a4548c39a0d5eabf775980d8dc5933e4814fe457da6e4d0d23902cdea470a4733419e057fc9ef9517d0c1af2d59de26a3d2e09a0d7f34781a76a7197de8de6de5f4c29d47c3acfd000879c94732ee925996f48db3c806bb42b8042ed83ac64d42dd5b0d8a81234e209b24ee8407410bf9cfbe930927c824fbabae7081a34e7fba79cbd8a098cf02f9f757713c3d821dd4fb834c85f4f54f95900a70f2b8d37fbd48a98122611ca60cab8604084c0e22ab88f71cb2e60a95b123acc2b3f1e1c7dbd858899870a8b1d926352950c951d4be168e7618419491cec509c83dd515e296876d647b5ddfb0d005e933ae2c098ebd22cdfb0ebe1fce5f02a60408d8dc4a6df46cb4337f4e2d91b916b588ea71cb092c1a1e3ea20895e24b05f89d73b179d2adbadb695b50829ece4241799b47042281175200a3fb92e92cbe38744c11fb54f1fc4c7588a35a37940059e8a4e5e4a9f03a38fd1a454fe426132615b88a49758f95a9f07da30f2cc8b5516e9dcac70fc7e725ac9b822753a5b9540a4f86eea4c50b5652a0cc2bcedaf5da63fc8235b496c2ca67ae3ea3c84a2544ca8794457340e1e424a8ab3aae292657712798bb48eb4179e6b8e76fa281db7acee74f086171add5eeebbcb63b51eb4b1ed57ac22d13e7b67241f8c582cb30689ff4f381efd5c3ae09e07d1906e39947b55ca4d4e1cf2a22c2d00f5fe9a4e880a6174e5c8efbc7df0e2d68fd813cd4bfdd43a38df76b8d3130f97799379d586589e49bf2bf322edb84390cbe4aec12260f10f337ee8785544514edfc0d22f489a3e388df01476d35d489d4e5b46fd61cc35b107d3781a71e87b8cf12cac4616f9c7a819be57a0770a7a66e0e6e469506826897c8530866f2715b8757f0f01389dc301293ec68821e55f51482d8fed375d4efd593d18a49728a83c34630448f5adb9aa86176817191681c750d74f715dd2357668a2375d3014bb7ff67e91039752320df8f24533a6c66831be8d2cdd0bf0615d6f5d95978412d7e98278c11a64b3b591467766c5121d9af55bf62f1989df5c1837153a3bd94b83e2a2fa9976a5f9ca9e3a4dd2b6a342a17defbb5f0d1fc6ae1188732f3278e747d21cac23fda14b +MD = bbdc1f2be8449c238f9446fd499dbe31bc7580af43b29a27247fe2711dce33ec8c2598522eb0610cb11cdbb8e5e31c00c7e462aae55a74baca079d09da8b09f7 + +Len = 51384 +Msg = 84595facd88a8357d2f385daeeede9f8f6ede268d405c57ca5aebc020ec4bf68d3d2c023a59026503caa7d9ca6c36c62dfbae714a12ca5dc7d3ad5832b8c0d911f9583b65c197f688ded10ce52ffffddd89601c1acda307ed196bcd7103dde6f8f2b0e2ea52e76e6ed45a63699a789af090798369d174da9c74bdbc664df1c484c1bcb5227d6f3118339a79e24c5f4219b97143c1bebe4a787e09917cf7bae657ded20ec8b19de3378517bcc9b60277bb6cedd9bce5fdebe3add5d94fb177c0e4b2a77c278ff1f92f3158b88a4810a0581335b1b5f7a213708cb91038dbe6e8ade59379e97919f761d0e3d9cea2f8507254ef7837645965a18309c2d30756c235d02c84690d644291ec3face137280c8caa7179dbac6256e9397e6da8a465e1ff0ae92820ad6f7f21dbc2be8c852e39196c7252fd407b7bda085d7d143382cc7c1e3fd1cae9aa118428236b0b0d896aab43587026b10328d6884d7dc0453be63f52c71da232928e4b79c85ef740b815b4a79a7de28e78027131b4ec175a0fc3bb70e5686118c769ea1927e6cbbf48dec811ceb8bb39687d3c8d3a4493d26cf962d1314e622c9718e2bed8bf12e99a0a480a5bdd0b32531d8af32413c04ee1dbe7fc213c3fcea03fb7a3413447504a3cc709c8476d19a6480f1c28d6274fed0f9d6a3bbe447f6132fb9ef7e2e373d7fac7889a746b4ff0a11b60bf1833360ce905a3f7513acf688700ea733771c4a1a8cc1f59005045b0ad42594d366e91c01cb321da716d2f14c07a1e29ce7ce355eb47268a67e6bb74c1167e59cd43f384ff187c6bbb663ef463c9b2b2046f206326bb46851788f1ab810a386b595dcbea24c80c017bb04f95e562407275b33c37dfbaf7ff9ba188c3618020084716ab5e122469525ed5f157c9f630019ef367629aa8a34060daf16ae72acd973308e26f4bc00cc4b141c4e885d819d5fcaa6261dc16e0fe039fcbe0867c89ce999f218c262d7eef3f7e3a96ad9a6665fb429dc41878299f006a68e2c3d7fce4e753e93355bf382845f5a300b5bf8e48275679f7d46ef599c3c568e023cf8f9098c1aa034f17b1066142cea512aa29e30d40a77b944dcd84da2b3c573ae5ca484a62c45a86a972100deffdf2590ca1dd29bb76cddcb729c6c01663b65d9d258268b1f8c770f713cbc857c1870d399e7ce901887d121d82f5f2116f8c107839c5702997d8a282ee901d04a9c183c36868e7cd5cf7d8e371990ca6c05707e96f87fd5421fc9fdf9b0388811730713c9827826964dca5cb7e065c40f69598634f406cac47a1cd5f81ac7757ba623a07c61f65802079ed17f0e48d6a92c6369851955aac4966cfa53ae175f2e3c562a75ad6fd8c107e337b82aa0cadf57786db0eed23ced7c9fb233f4900ed23d86fbdced4b6f7c557fd489bdd5665bf07fdcdefce64ae4339f46c0759a4a10b29d59daaaf1e5dbf75cf11b4e4f73c5025ffc36c9f99a54c352fe21b89eda90a2828d976bcb0285f760d5966575b8c4920216e1df74f6e335a2217f460287f9151ddf3ab8408e235c75ca218bb1ff01aa4f7106c6bd24399076f901a53019f3135696eb19b8505c2f8216e4466a0e24512e57ce043eecffdcb5ccd05f8e5828a515fcd4179b11d9776e02082109aed490870e61235e18dd2149e313fc860b3dd242571a395299413c23d6b5a1f4a7b96e42dfe6ab846e7a681986f3027ffcdda3c5f0e80843b03d8788da125094c17cf3481285221ab87fb80dfc98fbe1f1ae1e860f640bd71e755f855648b551c4c5277fef681287bc931a0d8f296e13b3584d6efcb6ca76aa90cc02917e5894773b13d0beb40233435f950185cee47f0a843863fe07cd891e37d6e7d4ddc2c3a387be23c6947b86148b31d127b1e48cbddae64e5e7f9d764011861c678d7a4810513061502e04e8f9bef666bdf7f6a296015f186545c1a7d9c7e38a92b5088986407270a4aa25c1b8a0eda68fcba2295ba2aba75882c182b000f5179d7ef5f0cdfc8b3a0a3166791ada1d7ae4537189d564d3e5825d26718f65c5accf0fc8e3ac2e83a6caeb5078e7148fca06b7ea2bccf0deb92aff76db3c9d5a32719109cced7e639b2bff6a26e7f5497f3b20967508edd40a978f3c288051bd8fcb2b41125693320376953cece126557fccb6fbd05004bdc21236fdbf2329f4ad2506f71db016f8c5f4d74f309f4fbbb401a0a3a56ddda2c8e31c430aedcc0972c749b355c2aebdc9eaeb2a5be71781052107165a281f8a0452689570a6e303c8f81dfd2256048af7a3f956d68226b1597612da5947727e5ea7437c591515eb9602aa5eec32bf6637662a59083825529a46ea7908928085be29d47f2d030bc8c42b175d1b1f885a717aa5bd58d0bc6dafdab67bd1d3eea70c21442655386da239bc8d8317e5076d8d28930930149209807a9f661bd067ec30d7baf9377ce282dffc3356484ce3a773b81cc6f7ca502ef56dcdc44d52915d12935f813c97126f9d353260171cc5100b72677b14bb9de4f6fd671cd12114019b9d5a45cc50a6715badb129ea1c54b13e9d9db0f1af22346b7095f70e0599e1b13cd4cd5070469001aed9372a153991f283e5eef56e87253c0f81dc6cc6c8033dbaf5a22ec099d5787ed11440d01bb8106a68bb88bf73c051225053532b4871285de44bd0054847a665c2489212a32f819b4ea2126b8e0c92f12de42bfec233586eca509c0afaee74add4598aa679fd2b5ebe28fb3b8111e8c33e185c05dd4fb734ce3afc9658d3ca9c2ed18f53442af8fbe0d7acf4f4d739e2ab764e0942cf2cf9199057700afd917cf93808e0acbfcfb9dd368b618e676f949d876ad198ba9e03d2da1561b774af935c145f165bc397e1ddcd0149f8c870223cd116278819f79c22a19d3107410e2a80effbbdf63e3abb07257773da0226d4afdebbd1baf31e0a316b59a8a46b94888d50449d28399f8f84c553a8da1e77f11f36c298d550fb9526c3b08d33fa2bf7aac0a27d96baaea57c35feb0a3234dc3b35f9144823976872a2e0aaa5ff7babdffc67d26ebcc4f4416fee153db198f9094e3929d68b477266436cfc5cd692923b5ea3d61cd746ab67aa763592b0825a1e94a2c6a30cce6bcfd6268a728586071f4b44af4e5bce741d1b8eb893af9f63edb1ac6758186ab8f1c3a3b1816cd46efe3ad0da7daabae2e43bae3acb1f3ecae92ddca8404ecaee7ea47b1e03fcec5e5ab5cec445449a8c5f734b28a37ffee3b351a9f606005d80e8f1033c64d66c49a73495091fd9fbb4d16aec0eb7524e52bec5aadd13ed90f4b321e2793e59a2c5764fda2587ab4d010c7b07597126ab7c7e1245c9f46713ce5fbf7f60fb174e364a6ff485f7691d05433c33955b7d94d57390014911fd448251325090259fbd20960d7ac6f973ca162816e74ef0c7a8f231f763d70720a1953a230c7348537e18ebb0e344f85bf2d82da3a8e2bb8546572b90f3f04e61c99b7cf9e976ddc31f93ade2b4ac9e9225afb66aeefd2646fb88e2f5282152411ae98c3f9e37406f00056f1b655a36b6b12174c52ffacb7d46ebdaac86f6bd3f14240a6c81212ac7ce02a1e38bda6b2a43c1cb5ae27805a8a714852f76ccd9cc53cf59f948c0f76de7ffe8b38e99a67d4c053c84bcd18f499a7774e69e20527948400d6e4b8330b1dc71a603e434731048604aeb05b3a2e0afa91c7a63ad91b6602a97440004514419ec5c6d23274b93b75778e6537afb0e451e0e434da1221439e37a130cb0f3853ee49e57d1eeba78177f391f3cb3e212f93aace9d2c78e03440f4843d8257205a9eece4c66f72a2de73c2dfe17db12af4aa38ac6996d20140d02646ee8be6735e96f7eb368ed2525b522a9fb7b7cf723a7dd2a71e82ea2b7036160ecc4f84da68beb22453e1d360fffa74fafee05fa209f4bfe746578607cb5a0c055e36f8fd7efe64b5a8d13c74d354e7173d5f2a6169f74993687d6f3c59244f532ca90c83ab3e56c6bac7d735dd48cd1ffc9ef858636eb6d30d5c6d73227d291fbe0e8615f466d18013296a4c27bf6c39c304902efe414fd1bc5c47542f4be0919dce2f5a635e1b0a3a60be60b99f0e8e1bf9bc8c43595cb2fde5c7868778bdd35052cffbff0e7c8db7d59b1a99d2f9458be5421a389c25a1585fb3b232ea080a5f012e9fd05e3e3113efc822d13e75879c31eb7fe7f3f1c45632d47f398b0961534213efdf37a81dd5150f1f69cdcc7cd4437f6458460a437ec6f296a34108feb27f4892337f017a85b136ba6766444bbe84c670927eb6475983d59e78f64c09071f9331d420926fab2a069ad5f0271ddf5c884c9d813ef86dd24440c0911eabd78abd74cb00a325d0e84767ba55bb19c1348c9f8139ea7d4519082484fac60bac278e021f097bc47b53c1cb1f7c4968eb729b12468d01ff66c1e9f1cc198c530d60cd84d821647335d33b6c0b4d1831e5807d4df564cda55a33af509ed6b7a8839c44a1ff32a45a85d07ff286b0729d38c4faf796a89498a8d622e8041991349544b9029b2384a2f3b25306998d9dd46ba8d9b82f409fffd8110a6205ca601fcbbef54fb4dc4c7307e180504acce2fd0692e43aca143603724e2e65a9d16d91ad73c02f534544f44ac5ce77a355894091ece1226e0ca0ccfff4579af91600b1c4cbe14a7e46b44e43c60424ac10dac6951d991b24102781076b4da8fc8161a7972f224940c7e3a87b4decfe6ce61db79a8dd4cbf308114a101ad839bbfbd79cae0549d49eb01a2b78c04caeebbd993b26a45adae3dca750a46bc0f23c6aabb892b61f92a2e9a1ffc489eddb317f9778c3caf2f1fc7431bb4ac5cc7d89b82622caab6c2c535ac04be70e972e47125f99f86766b847b8f7b38b90c682aacb8d03de4bf849b9ecbf3767b9114e346039c44de37cd6cb91405fed3574a8a58d2b8257fd8a92dd85e5edcef125e5004f6d224ba6fdf490e556e7fa1a9e9884e447c8bc2becafc60e7b92a31d9998b4c942da7918b0b99f9e7f743aa80efa4fba28fc953ce4477c70c9516fa7361156b5011460a25fceffa2042e34478b750cf617476b983b0208911750b9f6c4f8f1faf3fa86aad0dab8db2d3c7060dcb1c5805cd1c4a7b98a715badb709720bf48a825db1759acc86d32f41c67659ca5781403fc12bd02584bfb5d2afe783d2ae2b348a64b5d81b7a57888af6cf9c1d0f491e083f257e489bfb86d060dc91e3cedbf8c139ccce855d4ccd4ef2028f9d802402fe753c16eb752cb8edf16f0404fba3b6495844e2d2d7bbe6d6e2979c11531ad46a89f701d4ba5a32728a2944fedd89566beaa57ec992abba6aef162a432f337c94a3dea7cc138ddca75591b9991d98c16f17750934332433514108a0f9bd78e2c4ec7a709a28ce9ed3772fcc9c63d5dd9d063eebd9652e38d5fff568fca5f0ee428b52c508a024603f1b8be3d1564a933ce0878b80ced2b23c5163e9148ea38955a9ef0cdc23980a34672e68fe9ffecc96ccd953f3161787cf60dc8b08209a99476ed7afdf5b3184f8839fc1ece6f96ef1f3bbaaf9e606a0d654e7b6a204dc075e019414d9edf7b6d398665863d24462967db5f859e6a5e599550dd2a8e271bce38baea59284f2890fce0c932b0be691cd914fa6dcbdfe3e5f89d447e361629f1d33abc8d1c62be3f34c18dc0b3ae7e2de57121a4a131994721bc77e1b2ab697562215e7605ba9aec63b129acc07503c10f885bd6b92fccd18316bdd18e5758ed47f736905ec74d0d1c2823436192889ac9c31f706e0b1d39af44acda139a86be1734eb6892195335c0af114111977b0fa6a9c31e5a5408c408bebb780ce5616c3262d36b3a113bdae3be7a125ae4599428b50d1ce8aafe2511ed6017b4d8776c2bf98514d15f658117cea433a819b2ccc27d5418a3608bc17d794155b5e43752867176f1d2447ebcbf5846217398051df65b1e7e1535301d8dcac59e7a893fa3b4533f8ed770d5d25cf3c66857ffdf0c56d6e2d9a86969bdd55a637e9d47eee4582735483b5509867329ab84cfb19f1c468937a7f79db716e6b0b1627890d378c4560eba7871883d94527be3454dc3c257ea93556d4296bd245615d6b7047be59b7802523956e06c3316ae105334eb930d637c8e83e8971530d33767b31346bf3ff5e6bbe8659096c1dec89863f78512c99c59afd60016b37e806c81f73dc27a4477f233f03e2741d32331f802161ea63eedc135de29c41c70064bb21de48d8b2b46db76fb3102f1e98c909bb80116d1bfe039bcf6b5fdc4b7dd4b7481b7f676670af8d163feb23b77636b1ff0591c39df0c29a1ca354220b87df245bd289bd08a3cd0ffc4e7b3630f4007d1458e8d231eda1780c3482fc4e440b6a23aa6fc0e0744fa3e889c951d03cb1d7c1201e841e1d299d67c3f1525edfe3f1684c385a350cbeb3a397dc5de073d026cf053cc0aea7e172f5fbaa0d817eec22f160ec725193a2a6f622bc40a8c4e6d207b1496d27b4515d7e81b413004ab063888d94f07a3081e4a6cf72e470557a432ec94d75d26b02c7c900174e236ab61df37b36bbf90be5d57e48052f804e14e00ff851bff7f57b199f1edca5310686b9fbd3ddbd164d55e145357d0b1fd83d1371e45b33de7944b9c8830aff7448a99d683d8edd181e5a70c23de35f971b7b441b3576b9ce20e6110cd8a9463256a6330260530349a57beabe093e132e3e59d9d694a7391112e88733c5c261b45805e291e53317ef0b40b70141960e2d695c3b6aa9f89bed76d28504f15b3842774f11dc7337025377313f538cf33adcc60ed29f1b70c7ab742d7248057fb323da0b2aacb365aabd12d7ea7c925e7e827af6063d9217a6923680b6c7a833baa1abc194c94dc7f87404b92143fcdec268b09c400bb8f61eece153b949838135020ff9b7fbe865d4c2745f4a72727ceed78e89e6d2321418ffa02fe2963e700c8f303cfb0a2c4527ed8a52cfcf9b3feb153c44625aab7a7d15999a9b75800827903611c8bdc371d73e70191623202f9f6ae3551a6bc92e3374f41e4cb0f1526e4d490186dd52f1cefd4b3c8935a854f320ab4578cd343a2464da435b0d3a55ca0d8f939d3284cbf27246448ecfdcb7cf7ebb9be24795a5362f73903155031a211a334f7584fe092de586b88fb7645f1ccb3cdfc2a39478531ce68d364ff3a75dba5bbd769b6bb3669d3620f3b6e754c050559a7fa7d8ba62725cc2d2c5b30664363066093f71cf85e37c0522940e9fa5552f53811c0a734b7afcb86e7deb3f20d6d9d19437b86771ff80ed84198047b121f19230c9d1acf67ceff67041425877e17e86814ce98214396b63810de554cefec4dff478d66c4bbf5c0442d7605b53a1490e3646ac2955d865ec8137e7cfe332d0c335efc1bb328d6c6b4a07ee4f9b5c60f01deda8631c269512ec602cbfd8063cc55bf739a1932c46b2f29b943d375bebb49c0886385169245c2a505c2c95c2316ece58e62756e51461a159f92c0ee613e31d61edb0ddea3a52a3cf201e01aed644f6da71546300fb01be0bc6240a44ff0407be86d4a6f1fd7dbfa5209e061254d13c458231a2c52519b377a22e12bfd99fc2e8f9ab95c69864e79903b38b35d29d0660c0c4fb7cba31e76636500f9dc63cb6a7ed3d92b03190817571667960792ebdf4d417576ce1d1c29f2a94e727f0644bc20b9386f8f187f7ff14beb6db710ecac965329cdec382acec250283a57f9ee903fab457e7ffd3af0091c32beee1c593a71c1bb41a88cb0d13cfa1cb5f9b73f83062a8efc384fb133f937dc0e1f1d98256a1dc856857354dddd179a79c6a6ae012ed7834d4a7888986c0f55efbcbd4fe9d9b7df9105847d412d39200a6170b0971412b106491017b9bc032eb85943e6e46b304f759b5890b7a7cf5bcc3c8dedb1506c96ab969ee50473c3c50c7779d3c17907b668d938358dc75a9c53ca66cbfc5e55b291c58d87052dc1c76099a7bcfd9dbe930f21dbe240265b60159d83c1b4b85e837d58646438447d94493255f8f533b573cd078c1d8b2f5255a6186d6586d90787b2c1ac031a5267ba1ac41d2e44f59cc7271cf14dab5cdfdb79edac3dff4ab14dd693ccea27c200b779e165b3693dc50ba1c484094d39446ff56fa8a17a780c245d316f9fed2de8fadafcb82ede96debfc180bcc6cd3f3081cd20eb36750b78c9bb3cdc8ad6f07122b2888cf7117b4a620ae4140cc7f914cf55a3fc739b5f87ac7518cc4171b4499d95177cb2be558880e2612251b9d17197235b44df4a0ea93b2f57973a49e3d2e9f71bdfd811d029aafc8a501c1f62c787bad97cdffd735df42e7bc5fbdbf99d865d185eddc8559e3e9db235f26527970f8080dcfc4228266606e7e10c84701a013baf524a5e7066ba5a9b3c4b279a509d18f40dcaa4b7931f5d4e70d2fff1c8c917235294209b03acc787ebacd32594bef8a587b1918c147e75f1ede58ac93a7c7416e841db300594491acc8df463d3f38417c35795303b020584c0bad190df69d71c8be9caf9dcff73c6477507ef8ec95fbd59133c2e6758607981c940d3383fc496a5e29c431a4cbc1ce4d88a0335bee028b17ad2e139d03b32b9a774fad55ca107dec2bb961e0aa6713d4ef7495922c9cc54f505e31307ea52c0dbda82274f10f28f10a57d78c7b775b94edc4c79b3512abc2841ce937de26c4fbcee03ae9578e94f42d663bb02639cd14eb56707ef3ac67f7b22ee3b80d7c1bee12bf9ebbe6d4e87dfeae345292f592dc4ff339414db11e76405dc6bef2ef586df10df6f2842b4d14e4f66b7ca9f3d1748363caee2a6bfbc898713a4e75c9a401d391e9971bd9eb4247088835527ab365ed6eca8c742023742032e9727e502630201420b09227e98e8faa328675d46035f7dce2241219c10242687831f5ce0785405e4348d15d708125a51175fb47ff6f0874b9bdec9efbfb65da9294c2896e859b37f964c0c3a7a16fc0ce0dca1cb99887fff85feaf6f9e6f051dda1ceca84ba9967ea0e47a1b779d6c51153cb9bb53ade464612f46be44b4d950162ffd870aba3b5bf4d4e3ec78ec37a8151e6 +MD = 8a919cdc78f2fafd5369e99248248cacdc6d6fc7efee8d30b4ddbe7778d1a4d91b1e6d1a8ac131ba89630abb9d9c585d82456de797b72ba9b35af415d037677c + +Len = 51968 +Msg = 37046f28c2937158cbeb5332fe5649ea4957daba938e36e1abddc9ec7ec910348e23aca89fe7b5ccb3645002399d840982f049c374f5e23b82a96de6dcccb929e287571cdf52f48ef415e649528d0496acf2bb04edd75e662651be1bca5bfb921d79990cea9cd6a474463b8db0ee729cb1a6570664fb516a7d1de312b1407e7626419a01288d05181d3f7a59bb88752078544650422a645071540553fa41ebdde527818301ec26f2d647c932db23b62ce944af6af02c3f1fe9404b670b27eacf42737718dd83e43886a750a27886dcc7ecbdbbddd4c989dfcc27ded54eb92255256ca34a2418e4f417a83930fa7a90fa6909923058c9eb980452e52529c13c76765b2ea03e74d12d7090a965c9c77acc486e5bebe3f30c53780989e00605df3b1d883fa2935f51ec79a7cac74d35414571353f97dc1095181094f28d4c4fb4aa023bffd98ba10c381a37c4e0ef8b8e6dcda565bbade82dedb43a47b4636563ce0ebc95cc8f01ac193b86bf381593084d4208f5dfbd437ddc4c44b1ddb30f93ac27522a040548d697c4dde255291358ecb9a4198b74e92cecc0fa5791a417ec4e3647e607573e34bb9d8455c191d425521bc3f7483aa2e325f8a462579e4418bb24e1f05febab6e8cafc34104b79e18884eabb79d77354a90dd8af9b8095dbcfbd76971932b572c12e0e2cea40139d9953ca48213936b083455f4453b4d2b83173926902c7e0a15561928232bd96c0f81cbf88031f60cc61a49296d68d2761216316276b14b8bd15f43df6921a6006255e5edd87f09e02b48a2729ac700051400a6634aaafca30936444dc70ccfbe7c1871cdb38532aee0c84617f4e140a22fdd827335a0f81a65e106ba6676be6b02d257de38ccda408ca21f60a23df8130bb6acd85f1aa7b88c6a6f706de6dad29f8b7f6990db6a5cd8dc1494cd63922151920cdaefa0714427d869b605e58bbaf94cd1b5e23a48cb6c800cfd9cdc7494a97a8ac30ebabe88dd34dbd356fa39eab81c350c5772de54ef95f1e1382f0834ba750ed9e3f1f64a5785ac1087ad4c2b850493b4170a93c10a24aa89c8e4b4c92d8b806697cc81533cd3c6b5c1862c45080bd3f6498aced964341f3d7584e21aa9c4c8b051d4c76b3527100a2b0e4200e839dd1a157af963a6cd38456796f9f0d729ce003a8f3159ea887256eeccf424cd969968a4637b2877f7dde8c5a261135fc17b9d7a8725e702fed4e33148ab78612bef281ecdbcf080bbf66fb730814be895b5d138440cdb26911ef71d0bd0c549ffc8a1ab3e248268206b2267c9c3601aab65e29c4c4ffefd4a38dbda9cc9d3301a0a1c71401ba8d82f2449faf48e199f0d7419cf29541830300bd78f83006abc859fe19b5a092878ef092c9b3a4b3f1cc3c8bef96385f1664b7d326449db5295476d384f1556cbef6803137022609a3cd34b194180495048a477368275c45264685e69b5f76a59e6a2f845a13436f2a447e371d00a07ff7d42e229118f2234d1f159bbf78aad9a04a6d20b57f8350fff267a10ce8929c4ae2ea45438205dbe83e945783a568856f27b77adbaf7c5b9f379f73c62831668836ea7ff20afddb923580ce6a9e261545729d173f1b84fb72847423eb48236b3a30cd172f1c409ec5847954d69b6a15ddcb9c6a425c339d24898435eed0df16cb70f0cf4d2e74b21cbbcc8f7a55ab1392932408a7da1edd2f875e2e335adaf5d66803fceeba10a1e24c28d2b8357f7b0e59c266b22d9d17fe2e40717b3e8d84c596652496579afac0a5ecc302b33dd89b8ff60903bf34fa0aef09a409049d40238c92cab68f8a093259a6d4fc679ca8e4c64d541f178ceff049e83a7f3550b47aab2b73c1ba4469b1e7d58d07cae268546d26fc66cefb6628af8aa940596e6e25727da46a708098c9d0f76fb745c583751521566d3e06e92eb05f74eee93cb9de8337d0f34a9522d4959ad17d70aca6c13ebaf6a4ed36057cdcd531fd5d4233e05db88e0e9118747cb62e66ecc41e3ec34a5261a0751f378d959a44de2e2578e5529e401eec712a2ca330a467c880b7e5d8860be23e18fbfb6b0d4213f44cd55812477ba6c535906efd2ffe80f67aaec369d469ecd0c9cf20cdac9e31182ef5b30d42a538b3ec63be249af9cac6628fc66ebc0022b5982da85e06ddb832524670b42e613720ebf084aa000aa7b0eee77967ab7316550aa3fc7c9a651bab4d343ba7591444a4eae37d0dddc59a5e662246d531174a4797ae97a9d5e8ce1b766b5e475142c3a83fa8e1b0a2af25277edcd947db813105d5b9f47657cd51eb64486314b58136b370bd6d42ed2bda947f838b2009256d083b62bd628e874993ad57e4bfe444304f149d6a252bb02d3e0e92e70e589840d73f153ceee8ab17cca8164d796bf032e3a1c582e7dcf09f8ca2977763384e7eeb676e0d7bf4ad3ecefb002801cb39a1199ec221fb7f5193e8b21db6bf26ac59cd3ab999ba410241330ca1eeb970751d49621fe1e08157cd0ad3822f72b25673e52fa48bfa4c4ea19153781c30fa370a0b923b2d3791878d4b8d513c3e59c15fdbccab3eec84e6e26265ff3ae8d6f3f9c8b5a06e511e456733262787728b717019882a3ce1796f860ecab3b54175305f1932fc4fdd9625ed4a54617bbfc5eb4716e8ce0079984d0f2ee81235fb8370cc65908b2c2d77ad72098e9b8356a793575c74f324256013d02b44a717475039a44664e9add15150b7e94b3259079f0e2372933612757f388b9c76fee3d589ff892416a42f59b194017200c257232ab03dc1fa0345da344fa3eae56626268f36eda72c272b36f70bf12c45c7f849b93e08f2efe758d42dad9baf169958bade7434182c0f4bf9b00d098080bfc6dbf8ec176e0b5ea5e3d9f6d54190f4e5f3064c1f1f8cb8fc027b3bad1758164d5a385edb9bc2d5c799b790035adaf5786f8502e125c4a0a5e196fc7e492267f665161ad814acf92856452d88435b376a90d95d3cb37a72e427b1e3dfae76314c6d00849f61301562ba0113e6a3a8274707819f8451049c31454a7653afd9eed9d2864093f9e2c6e13589e7a0f4384188240c6e5a86f98917badf287cd5b40d094625c348573b9a3e494e1d49ad8212c886d82e11bdcfc5f208de7ebda8ab2865284d714ef1b0ebd465ac2943381c17629083735c6e0ddf6abfc6ed88a105bd78099bfefa61d9584e3b4290104c7ccc00e18cc2ad202a31fc3036f980577a28ac6a6fb0ed101b5c060a9fe643231aad0dea5290667cbb6a010a8d2717246f169cbb573b99950d53868412905e848c36e42b83611acc27f413cf57facf906af3a38cd0f3826915fb5a185922c4c928064e257db95ca6f64ccecf25e90c43e43c6b4f7b7d29f4cbaffb37c212186994779658d00d8e95ace07caa65867f87617d5e83a53d02c0a4ede472fbf2bbfe58174745f8d232f0c26bc7e195377c037922f7c9ecb7af751831a05a452941ffc971eb6d76abec70cd2b1b053380a42071c9b172b071825acc17a94e5c3a2cd68ef3fd4fc7ff1d7e23caf075df066a6711de261eaeff2e1a070c79dfafb9ef2b1f39f75d6b4048817ca7d2b3e62d315fafdcc04e26c5051b7f8c9c7e9e1d0b55d0a05426ef23e0132e6e5c5fe759bb72c2521a51b64799d78c148bbbc5c7f3ff69b3ae2cb1fe96bbbf7ad7da61305b38efba9ef9ec1b6ee6b330c207b56f4b7041007fef5254bed3a659efa3c235831a8e82c8772694f6c19b7dc9f2cb678460dd0323ef5eaacb0389780e5cb8cdd5b035571189f468c3e09b382e0d96451149b438349d25856db3df71be55838dc5726a841482e3eb48dc391c48a8947c74835d1c4c894569097cfec36a3ed0e9c4d994b64bf263b1180d0b76b454549240b64e2bb6244cba10c78de9bc691f66766e5a4a2268f24e940b78f3fbb1451ae84aede31c0e9a1d261bf3510f74dd883c9911dc32572e185f4007f0791fe48afdc9e2def8a8bbf6bbf2c5a5ede289c39a0251c8e63d6592dc534f18d720b146d3ab937ba67320db44d48b34d222a2bd1102a0bcc89c37629dbda4c9704449e31c789655dffe773f4349aa9a46c5b6b93432751453e411fc05d7af8eeefb0ce42aa951d9efbb1d9759baba52d63c445c761a456c12b593c3b739d5d5adc578dea0c65c8470399277dab010daeb06ca1b491298208f812b6e247cae3a27342c16f1582cf1ebea645558b264af0fa5b68a3fc3f3de14c7573fdfe89f2905b78531aec7398ecd5e01b4565a2c5bbea9a80dcca6def16cf885cd4c362f2ea3d012c33bac08d78ef4f92945efbe5d62830d3a7223c006d2a5559afbcde4b79c0e63202a6f2158cb5fc908ca0bb110b5b25484c2c33d8af05e453d5118465058d2e4fced99097eecfeefe735369b3202b82c61212dadfa4073b308febdca8564be16ae17b227d67e42dc5929e8e32de424e3743f9b97e13d964da25726f7d33a3086b81b3302ebf9cc2cb31aab1f60d459182250b591bc5236737dfcdc44a653daa39f7a94312bea1b4fa989f5a6775df538f01704120838c4a3104256478b5c0cfbe8b86e2912c980b390ea412edddb69d461e50f9f313bc17afdea1d570e8d57fe184729613d02cd06fdce15ff00f72768fc6d20afe3d5cd698b36aa199c923c38a2c94e60073030a864b7fccd8d1bce7523f1efba7cb148dd6cca74f5a1f53a2a1c9155ac0ddc5c165a1a6de0dec3cf777d25d5458838b46507181681db10c250fa41c7abbd61bfdf4267d1ff72899aee6c7b79e782f6a08eeea20734948f753ba05d2cf5a26adc71b242d16fe4c7b148766535f6f9558dc987eabf846acbb348b335fe003942226c2e1dd4b8b228c3242f65a22a47efec836764a807ba501d06a78ea351fea2223d1a6b6470470710f00c1f36c81b103d7b01a279252fb7130401a9b5717ee57c530bbe091d3ffd5b3a70d47c76df8110eeeb267b63275b25bf3629bcd51696614c86882b15e975e2721237ebad019cd77d986357483dd6d596d98121f3722fa187ff5c5300fffb472544bbfce13dde11957deb755aef94933940428d630e3b9da3ea9d0954d01809c2acd32899c0cf5fc510115e01992eff052ee0379a3724b61eececc687f636aae8af00076d46eb029b038789e2d6f06988e9dce90fa9859b575aae0320fee19af5bfd511a23cabba75acb0815525a3734305aafa49c1d8bdfbd853579646a36a7873c4cfff2eabd7e3902eccff1192aca1f6dce3cf1c988e6aca9f2c8e69f689ff5f51aaca7945fb734244d5470758665451e54e06164f9d22c5d40a4fd55589d8d70e2a9ac914959327b522a3936f40a89b5691854b585ac24e847971153aeac37f4cd7f67a9226c1d4d24dbb2241bc3d379346d3285d57b7b932e288a6211d1dbcb03b542a393f9dce3eaef4506a4970bb3de66639c90471ba61ee0d04a2916613babd3a34943065785cdec59a6368f1aab8e8c4fc25f18eb693e454bd39f82b18dee61f461db9e767bf55c55ca7ab1e6a96d655fbfeaf7d323b7e164c41b1db409f3e89cb402c6210c89c6a33b170758f5a37bf95ad8ebbb1eb03c81e744f050f6e3f0030a61884081b1b3aac1b69958d65756875cd2fd8ba052dc0c02c3026e9ee5ff912b9febbb2297aad223ff6dcf96b27c6f8e7f342bf2c44b6bde3f5cf747229faede65f77a376033832b998da37bdb771bb58898845c2f1108436104d13ac157c2ec5bb5650837d6259f2d01becefacff19c94317c25bbb449f9d104e6bfebaf351e282c65dd421c204862cf06d6390a5b0a4c08fc978fbe98c736641c1dc8306f3a756560fda98cddeee10165ddbeb2bfc65724edf8d4b75c76392a5d9e7f61d908e9663fb195afc259529fc229b14e87995f8d3591b125fcce8160908839cbd9522d39eb412e0b38505baf04033b671a4b094cbeaa4f92e297b70d9d241df4d8dee8e64bf59b2aa89da73b15b38484e0a4ff686e8bd6857599823a6bba54663f75c373461405947806dc4adc81b32d416ce9e92f7b6d871d9c8beee49205a974df66eac6e893cf1254a3e541b5f0eba56a6ed8e8c43c1f42677931eff35943e1e47852b2b76e65dc4fa3132c9665447467373c81ac6cd54cc3f50b742778beec4ca2b4f1cabdde40be85dc856d37c2162bec1de17c2531a478a7855c7489a2ffde8b176d69a9c0a46af048348291edf47e3483f27b8ebcb04e36a68d23b4758163db830ddc5a95721c8d60221d994c7428b7779bf3d0fdd90d4b77f07b23c1daa43c01b96af7e4119a042b35867767fff01e00c42a127c877c8dfe6dc6fb0d71665497595ca836e9acfcb1560454c6fe9f112755697dc22364a545ed4a67e2b074cb50d6fa9712621c1dfb6ee158f2d7fd37f337f83956138d3a5456518dc7fe954a31168ce900e4b110106363aa72f4d2396c501f6dc0c1bff53192219544c3907944025ac988d7327df91fd373cebbe6be9a8926428993c27ee68702a8e1682eff9082ac5d33a3680bbc8879da8f96016f86cb54df38f35d7c7b1f3eee275337851d7fc9cd88b01b6363889c083ceceaf437fcf36c55485a97f6401c8e9ded73b2f4dffa421067122df50685245d246af4b505491369fa7f7861d4e3b0cc9ea92f1c8c87e4512e17107be97d577aa8491809cf9ffafb7195c7c3c2dc7e3acfa3a39d6cb8dad56ef0b4fc1bcac91cdf4f073a413c499314632b25f24f1d71e627b78069d44d249066c28083b4a1ca31436950426a29b94db34d8e4c83b8f94dfe13cc6a2564c4fa41e2100985080d06efe854bc6fc2f6844bd506b8c275586af05e8956f1483f1649bbb29583256cc6192a4d96943bd11ff46a961e527c18a7c440bf1781201d4b46f6700ff8216fd98ad743b821bcd38776b444667cf6c06b446377941d15e400ff3a525f2a239ea80a983e0a5e6f8224995d1a78880bd91d366cb9b50d4f1e9f3d305f6e6254829961154773927a695e250a203cbee2ea2763068b6298f5528fc8809f22e7dba21556f565de07050d9ee1655d9b66a47bf093d7f783072f093868d11a6403e18685b2e0a1300339f84a9616d97bc77815e08d870400a227ca02e5cbd91dfc8eb74f3d800252cf3db1cc0cc59cc62a873f5f1bbfbac1b1021d550617e3331b09bcddbf7a902cb33ac08a0b19af62d7f981d5032722af7ceb8a99945d4090a87b1d95007953a6f658aeee5bba193916f563aa0e6643b04b089a365844f91aeb0b63e1c72354a9e2be015ec351e2312fa36e46042526ad6581d494177515bb2be21528de209a1bbd9544440d861334692c2912ad0bd18f137fc11b9c989c5ab227bbd10b192de6d004fc07ff00b2290eb81c74d1c14e3c9d2ae734ae5497dec603de4617b616f06334b30f6268caf7646ed0d537eea59e4ba9d04514510d31b09e05eeca9e5c23be4df0c4fd656088b477cc9ea83bdc9c642504b89738063ab81fb831eb7a076528763c8e9aa07ec345fb9835ec4ffd1d32c509f3ffb18ae125af7f7744f120a0ebd71ed5ffc02b906121bd04cbd40f0bfbb269601463a20e4175e3289bacadbb4d991e01f56e70d74e11c2710d6f1b4d0813ac659df755a9529a6bacb952b99e97e4c47a4452548055f42fe679ca28cba111586c6414ac9aa145a06c668c493110df99a8b413df74bef28dcad88d3e6d0ed4f7dc2f63adc9769f08ce6902675c02b324f40d5a1999d1326385f260651b9683101dc78c621f19d02d3b8c5b1a07b387edc416ce0bd8d6dd397f8fe9a6bd82462c97f436d382d1ff971c95406b1a6c847d819818bc1a141a981f77d3083b1a47d2b27d0907dbe754ccd74d58607d75d25b945cdf3445d41206cf71c4947da6ab8ad62caf0613a3f856d67c4c041816980f6327cc7c425eec0df74764516b6e9ddd6bc7cdd8104d13bd7feac35cd397ff2258c4879bfafad135fdbf5d47eeba4351d9170e86bc2dcc873c5e6672973f2e1bdaf9b79954f0e9054aa2547eecd1c57088e41716fe8b4c3e74a2dd4d4a584d825090047f37875b0546b7f4ff4efc4cc2e0f69393bdaebb698e7ccff5d62886e0244f18548d0850bd59c8e2d1fd8300ce4a142802e3df4091f4b5e47321f8ffbcbdff98203dbbefb6ec9bc9fce0ae081c2c087e6d5766033d0d15c5ce150fe09e83682feb2fe8617765fa4f89dec48c34ef983edb018b2df541631a0e99b7520ede5183be4bd7cd882eab1c7fe10fb69ffc8d1055c996e642f8698a3c94367d9536833ca079d05c72ad76d9e6d0d5ace4baae9be297ce55aa9aedbe5ef0d588baf3c7039aa11a36bc4c252ec6925f968b90c5888a537ca3b78fb85e7f94dc9b067de380b3abfe82ee727ec22811f59d1ce8987e55e5e8f7f1409211a46893e0003d9f5af37fc46991864b3e1334dfe92029f1264c355a7adf13427fd754417c3099c5396205b4122cf2524990e364a11fba9628762c1a54097192511f40309a1efa1bc7092615a5471d5c8ca606cded9f054f2bdcb06facf7c3482f8514a66053c96ba9efc8314c6a6f30af5d8662f62a71e6d784aaa3aa326f2dc00fb8ecf6566c7b8a1cd44e2d1e509859bd496be4476621d67803fc7841df09adc7144a85af4d13109933b570ea285a32cf3830df7f4ccacdc0a1c33bac79a49db5110735e7d2fde36dcbae3e575f3fe39a3bf90e588ca767626e3f1efca7c539e0956d2d856500aca08680bfec5d0f14263b0d995c8c814a6851ba46b8d036295089c296116de3133b4b751a318b926c7c1eb5a913b51f1ed9317ade685bbd140dd64f9713526fbf4501d378ae4f8f94a3ce3966046f4b8cbef8c80c94b223a320625c59147b6c59c692e300ec12d034a331e1f7b723cb3b1e8decf8c53c2f7d901731049c52a288c7e5eddb723d1bf38531f484b43768d501d82ecc8261ab4a65dc15bf313ed8f54ee23930c836397950b5bc378415eaff70c1d6ad54895db4a79852b25da7d84866710e287767f26f0ca47f36ae23196371302bc5c21c0f615f352e06a7f56828147ab6eb06360d7dc2e886a9bacbbda90f0d763c548287f9959af2e39791513d62e577a0fd0d544a796819b930749d794f40ff3a92248e254fafe570b6e15a30579a9a6fe5538d7f390c808d998582793bb10ee60568eb8d975c51d68b4e4da9fb826681447081c30abc024f7d683454da +MD = 34f6aef9b61b935eedc540a27a2048c787bc3efaf466ec668e9472006b4d6b986e70599d485f4d7209391b89e4b35b62dc56600cc6317f3f688a1da4ed509b44 + +Len = 52552 +Msg = a592dead5c6e873e441f75b07827b3366df48748ca63ec487a824266ff9a45c1096d3cce47bc72fe7d0cea9bd7aa4ff37ded2ab967bb58a8734eba69b4382eb70da5bec1ffe118d0c01a3e298d667f354008a6df25ef713e0a7f457495941fd6dbc4ce4d2de560fb35cfda2243632c42e1cd6382ad052151689c4a4d4ab501649852d33979d131c906b6244ea0aa3c6486c4ca6aa6084e2bb42d33bd7aa4baaa6fd5354e8aac7580585485754d4299e05876415eb9fde21217bb678ccd6734f086d75b54097e13695633665ef13329017e6a31288eeec44fb9cd4e82ed08557e05dfaf139d4ff3cc25da2dd23586d60e2028038ecce2dc2ac1eb50677f8e079b15769852ef28fdf1f0d14499c142864e68391d591ce212ea579dd5022e023190de227edba710191fdda1117b3c6f230a7c24e95125f54ed9a56c451c9f6bbba6876ec9746c102fa014d1fe404e16948b8471cd3d9023783dd0df087d7dd18c2238dfe2e6e62f27babee971afa03ec116a9a933e60474785f037f86ed6e3d8e4f1bff2ff8be75e9b60371d491daef92f6125382152af1368764d228341ab5a874555519749cea5ddc0af28eaea431ef71e9f72290aaa19bfd1b6254192b44c2d81169092027976c73fcf407cea40dc0d1531d7b1f2b8d8d0851b7736646efc5c475c465c60883fcc500fda7b9858aed5c7a4ef58c55bbf5f12e57eee115c09780a9ed962ce7b6f6183f97d636edb15e5b8611f89ed135bc01d9cc2b5340be2154d66c051b6a3943b5e149fc0f8589fc159fefec1c4703c87d7b9e94836ff14b8824ca195a3c13c9e40d9b810af41aadd4eb6f39cf5e2b03b03b53903b4962fe63ba8e39b3034c72eceb16cdf0e26c5ade9519477fbfb754e1427586417618202ec140cfec68ed2517a4414888f988ec7dc3757ef312aea257b78ce05e9f1b9a32606942ce12fdcaab60a55b9cde7549f69e0c47f5fe19d75bc31e055a6c7455b4c090fa21aa8448f146c86cf23c3b5b944d65084b2bffda358eb55dfd842a38ff083d5fadd78b89317f34e554b9e3089ef8082abe4268932d3fd8500f90452a5a61f8d939421874b332712c88fd733a5bc97e1616eb5dea8bff10465737ce150cf34ad08f9236f1be8805ab56b1f6d814e64e331bcde4c796f5e3a79e22cce05ee5baac7570eae89ba97ac8887d71ca127700e895910812974adbdbacf847739860d1d5b4843e4193bc58ede408eef89aa51d9f4bdeceb3d625804a496248b6028b15b3147539e4ecea258134fb744af7972cbf065d40929baf595d3d08d591e38f10ae5cece3baee5a6bec3efd0ca86f77b5b08eb665982e0fee7a4f91f9ec85934a2f569045a9e335b195cbb7bdfa4c6a40d9ab9045abd66ec70b49a6b9af2ec04a9cc80a669a11a280e6a2d18f28d49a56a42593e9b4ddf46d76f1ee1fc2273e985f7b014f76c1ca5f468df28a1a502f7e78c368589c89c867251012320db834bcde371e06233cd4d61d52c2b7b8075141bd4eb79a4923133d7e6db9fa7828ca3e83c309958bc7e96dd4baeb1deb432626dc8f27b8a5f2fc78ebd28c80ecc12aa7b5e9690394ad31add18d12c4994ad9b53b4b61b99740ac9fd20532cb4fc9797fdb6fe6592834d31d7d93e2b5ab669076434d0da506534b3a9dcf54e38b89e24c5f1e299e2ea6f846409300f70adc73f25c5cd285dc7500d1b3f89ad186498b98a8bedada8e49c7ae835717929cf7acb0ef3f586000ebf3ed7c48ab9c2a519cea1e17a116306669dfaca5cd8f4bfe603862bf483e5a004d156087304c5de83ecb29f02459fc4405612546caf5fe38ba131fa44a27d2fb36d2c77cd0ea095798c231130eabda2dc4ba5402b7cc9deedfc88cb605245023d5ab19f0347d15e7d4579e460514b267ce74a3a03c1d0f69fadf13bc223cbcc25328beab040d69dd1712d852b19d6c3b4a1679ea00ef3eee31e11b804878fe1ed7d11f75e7a3ed848c7c47ffbc4df0f160293da6ac4a11c8ac550bc820defe7f8a2fa21685458923581c5414cb2d26d13a34599de736703d94c34d5d5279a52f94c9b05587fe2501a67a655b8943f623fdbf34975abc439711b34807854ed9751c27b2fb95d3a9679c1fe49a9b99492ed453365cade3721c4aae648d616783984ad20ed056cefd9d6292379aac37053be577c7b387b4e615683b09b990cb8ce147512e9c73f609eb215bc8236223149258b34f65903585c992e39f51b782da983b2c78279353b6990103fdfd65675c7b568f363b71703882f12d8e1e819557054eec56395feeeaee291140ef5e0bc73e0794e4fad26de886ada13fe8930be96fa6182f997fce8e33c20df8c2f5153c229249c26d5a337b1fedc7187798ec7a206e386a109afb8bb1f3808c3ed18fa2701f36365bb2cadb92d92882923640f15eccd57166587ec7ade5f1662b9b80e371d8e4a98b823aee2a9b4be60315103672e876ab63635e2c72bfe8ed51faf1e66ae3da84c6718b9e2e58b8aa90de6331a4eba380ce60a3a147aaed897897e993a668a02dd427c6d1e53bf838023942ca3bfde45871fa560d73ce89a2671970d26c90bf0e7d4df371986992f620cdb4e98145c29b12d77e5a3f5243a0e7298e8b0382be8d898b1865900d0e4eb443c176bcecc4b17a9f236ff35fa4ecc06f4ca6b4672514bf883f95124df5a7844271593519730371fb4d34d71c33ecba92b10bc7677d0ae8ed6fe96951ce685a73cd7a34f555f7bf93059132b278099c3bc6a384a94dd7cc61b149dc4221fbfc7edcc100a8f4f62b0e526e4e48fbab3011925432561de2338d0c9db24877c7320aa717e359d8697e143db37107453b3cbd1d071b957695e51888cd348a5634c6bf3462233187b6804fcd48e417dd1f89e66fa5858fde57a9ab2dc1aa3149aa7e478d8c09578b47f9640a15ef9f4bc1df359114b96cdf9149ee04625c64d5912447ba7bddf36c82b1fefc03d9c7188806528a3eff5301a98b881496914c84517e6ac119e72fb0d170c3acf8ecb9cbdbc5e462099e6ccb08382265469211dd525555ac4c6e31e19bfd5b21dd6e9aec24e593215fe0e0c5161863005ba8da68fd70b383febc218647216f639ba89503ca2f09d0270bd7773bf2f4ecbb19cfaeb8992a4c161728283fa4a77b18e2cf993568eb774968786ae08f7c31502d1a36ec9662117cc86e4eea4eaa703e647335cc5be41cac3fec256bb8a4d8002ee088023005d918171a80b0e6214af475a760f9cf9ac93ad85b30463314e8b5624c2d602fb8add24b5447f936b312215e93a1248bb585da7aec14d7c87369561383ac705b259492ae46292d0409cfaf686180b358de59746fc75888416a64cb87b08d997cf496408615b0b419ca8985d836850ffebd4bf1fd1584c065a0dffc06f9594259cdbbc41cec64f73d9f488bf93d39a045f966376dfe21e6fbbee5d1da8697d5bb560c06b8f1cc5c373015a9129b23cef53aaf2f07a9b664cc6b7b324a80cfb96a3a90eea24c704cd124f7c76a7bcc02d52a30c1123fcba1a050ab079d0f8a562e1f4f652126d830d124f7cd4a03baa2ae6ff0d6d8e7e8053e147c381c5a4e14cfae52517ea78d6e00d71ca3fa5b771848b1f7549fca96f87060f7ad0f8aa65b148ea09c02f6167026e66e32c2ac8bca6b994e25b00f5ce2fcdc224ebec61793c667412cf23cfb9c0bf8f560ea1e7c22dfcefc2f53dfc32bab2f070470372b24ade33eeb99a0c55c76b6ba16b9d8d4866bf9095ccf62523b4502aeb56e05697691a89ebf3e4bfb1731c7c43d78031a60d9c27e926ebf917b92fc1d4a015759f13a5e69922864253402d51bbb70c6d717efd062bb761f08515ac65eac6f5584fe70aea84ba014cb1db285c87ae64a921376ccbdbe30a94026640779c100297103fa4062d2ee8376390981d26025b6d3bc355d9783e486c06379687473fef8a86aa1bb9f0f5ad8adf0ce7141577433237af62cf9f2dadd106e619159a9afedb2992dc767ea2c3cf9aacbfc1e461ae908b57fe1eaf359d7b9b1e429304b5d2d16fa660dc34babd6e1cfc6cb701460ff0cd59923736eaa9c4292c9d9ff404ee35cf31335ba1a20cfedc788863fab8e9eb7420c9a9b4b1653337bda48d072ca350deefee7553fd34ea5fbd9d493f2eced9064a0ef6a72e32515d3dd1eaac81b4bb052edca9ba20c7c92d1805d75d1c1151fa41dcae8cb59396e029b05962a884ecd87a986942b13803bb247caec30573dec684ad21e3fc2b8c970dca39a805866edf5fac448c32f832807f4c301f7f48e8019f0b013b464c9ab8568a0c1b2d4ba9704a72cc050aaade23650efbb0ee1306220d70ccf1389959ea906a510a94473531c7a6503bbca25f0a923f7225e664a1ae3c78c5b4577432944805a914bf0b8a9a5391819edd814dac635823ecdca0431cc88dbbe3176fcd5be9c664b811fb22207adec0bcd1ba129f74d39184457872e42e19f00bed0e8287f237246341a8945aa9e8ae042ddf564a335c4b7ac53fb99ac9c812ad6cb2eacefdc258b4a2a649af6d499a03664371331b3ca23eb0788fb747f284360b1f7e976912821ad956baa5416c25390fa90bf0b90f365ebbb54da01533d5343c86a667d08221043a3c8fc2a2dad0238e528ef9893e98492b78ac1bbdf67636959b0ab6a0abc61f69ea019e1e201b5156d262b40865188ca4250350aed4f79b9abf040a75f9e1baccc1e87e2fb667211dcb3fb6b2fd67a7aa5cec056439ca01b0853ae9acf6f464f7767d0944086431378f6e881581e618a292ee907aaf7dd77b6017cad22d7ebc6e5a67b5e7b062f048b1879eac7d145e113953885ea083ab5fe2132471f8010f95e0111aa72913eca5b40370f45982e69ae2d3639cb76bebe28db58cf900fc0d02ca019dfeecd794e3197a856991b2509411e6a8915ea71787c5977af3b2f003396ac1b64b762e778544556288d0131a913905dde8f0b5ccc42c0164ee886da0ae34da0a395f991310e71c9eee7f25b316daa95a1038286a2c13bbe1461bc553d5caa2f03503a7d5fa543870e7098aa8a97949c3837f6f8e342eff6696d7a79b449ec50ecafccb5eb62e41af2f098269ad977fa0df310b8750d0746b5d3684f58f23a8bc67c5841be8d7c0a002f9dd74a7b7b35860178d0426aa936605c2dde0f9ebd69fa7d8527bf6e32dda2f44dc683c4c7d70d28d54731a1fe4fd2d0712fc2969d71ee7bfc71d54c2f1d3f0850fa2bfe8468092fcf2629f92d1874f7de485a23012c0b3d6427ea719b513e344f7b2b6fd96ee2df0f7414bb5e1aac981a33bd8b1120b98d664fe5239d02093ef2526c5fef73ff003d39d930bbdbe37dcdf8d516f7d76131aaf3adab5db707eee086d518edfeca5a017e609d69e5826ca09d880ed8d969f2d71a2c5104f8a00ec21f4de1fc98aab4014a914d93c0ef2e3a2cc0b9dfac3b9895cd495cba4e3c643f26be0144c707d7e8a554875ff2948b45ac646131da3deb8e13ec16a63f43ba00a20fc1ec164a8c5c979192f505d84a66265c4cf9ebd9b367f4fdc5f1551dd6ac9b28691d0ad999052930b77e81223547a190c25d6576b7cb7865b2c2183380ec19f141fe2d1dc68d62193e22ecdc129025e80d85d27bc060a80a25420feb8268255290b8067edd994b346f08d06daae9bb4c749ab95296ce8bd56599c2aea3c7c633a0721d65a4d4ea6a9159b43dc5f869a43ec4a36201be29aebceeb9e5aab2057cb755fb38e5e349a1ee3c21b42b6839d8b42a1713c9d88b7e70697df660d0e8151e892760667170c2ccda9e3aa3df33d01ef59dcdb5c3b82bca34954b8dca7ae61d352946f02465b6745bb337f6055e74c44cbdf88e28b89f1274894af947c0d7fb818a514aa432632ee6e813ec84c2aded5800fc1cae94c09054e25d6bf0c4d10296d1e83e9adfb342a3c6364d016761e241ed4227fe53788cfa27ebac6d8dba789c867592ae728df7bbd408e1275679ec2e0d3077bffdae4d8ee05c8565237ca6ba325f0f87f5d896569af2709b96de5147e62fd39a9b4a1c399517bb808ffdd4195c0e7dce6f7e679ba15ac1082f7659b602a8053734334122cf861967d8274ae18ceaa42ae966b2b370a99d142a2b4ea0e901d33dd0530473151066c206e04f394a5b4b446a78bfc69048cc678ee4763021a406557791ac51f01d693822122c491fc93cc3fa9cd5fb879d16aa63891b8b34f7662632d583e6e715eb7232a42a3a929c3d50a1ba3e7adf124385b10183dcaa64ba590807cf5a8261b418417e8f342c3c179368ba406c1f0e1a9f8136f6490951cc950210d9d549678cd15488a35e73119233568424f9d0f964a1da0fbefadb28628327d6e97ec5903b4575aab0e1f18475d974013248793ae932c5742218a75045ca7f42477d7d44881dabccfce52efb8a2cc917b182a23b71fb494d69cbf6313d13123c3afbf9ec3d01ffd6d091b1df97d55dafebced463c4a46e82dc3a4f331106e9ad0b20c2ee209877b0740d0299657b38b22655951aa9d43cfcc38e3abe8b4a0b7b03135fb4fa8b1e423082a98fbcc76306ab3e70c8ea33bca166ee3f3a7188809068fd58a49281f9754c182e2b6361e595c2b2ead54d6af55a0c83e70f8c6751d282053628b223122f0ff61ad424f0c645b2d98daa9b21ef10fe75b9a5a490852b9b5480a720197059c345f5f1c51c0e00c5dae0ad9bffb3a985eb3e6581aa2482f911be89a50a1bdcae2c45ec0f8fc6ad41de6b4717ad480fe70dfcb5ea5e37bee5657935099f1c9e18d4942ccaeef6346f0cb7e0d5d3b6286c047dfea854c4c9a7783715147f7a894b646919bee4a47d978d4be19f1806de5ef849a98433d68a877183908e523d848e054d1bb217da6f0188afb03b243f170310e61c43a472e9cd78e20e3ec26e7628dfc79a702f9ff4f4266cb771a069bda575dec1b04ea2cec0b7def7ed75134962195ffebed5fcf3ba8f095d0b348db78a4fb9ff92da6d21a953feb4631337e484dc9daf65b1f75599ea0e09cf87b2edfac5fd3db0efdccad077caab6845df2fd64f0a162d6a9b00da5f04258742e0473fff34e5d336f5b27d49cb45c4b315129f9b2d99dda8edddc4187218f90c1fada026e55ec356c2bff8f188ea3e04e07529e78ea13f15f7d4a13ae04aee8e78076462991048f84bda88988a03a0e04940ba5cb6971957c0ceb7f0d6232d70f23dd4dad7632ac497ec776657f6b0f1565b9b222ce1341650b15060dd0b8059963738b727bf3061aedb0b82792d37dc11ae146078e958fbb067b2b27c6aadf16bded820118c247898918d15780efc4c82226c3e23154cade7d6250f3ca87de17918fb3e1e32ccb05df44446da03c9e7b09dede5b4cfdad5fde8f39fa42db8d1c8ceea39d519f0b206ee7a3e29736455a308dd7db37ec81bfb8362893c61266861e9ee38bfa95a269b667524ecc6963f634c852da989df26e891bcf68cad8e4f4b4f4d63624bd1b222437f21ac63274df94f2d1e1d5ae79fccf9470d1d77ba2e8eea4fe348651c01a56fde5df0b4df266cfb1d789758a82dafa34cf7762870ac33a03ee0f96104b92bd1daff40208673c4379c629febea799a7712db1f297971405b6081fca55183bd51bd30240fe3db09eaf304be7b742b945de3e2a1e19d26c002ffefd89bcb0662d7cd1725e9bf0744fe6b877b700feaa63d053383b7a373b87d615218a939eb224b54ddca17e29e7d5a4a135f33835ed7ffc1f84d1555ff32b4ced1413965d9059598a99cff1449bae6d8cff12a98302f8b5f5688627973358f9094ddb21579149ee2a4220a1db0058a5fe4b9be1508b6c92777bb05d876caf6eec4737c1273564c79f5e4a0c47a652e257a3f57c48d75a261836e683ab1f8d12f898cff246ed488a7c66a2ad250e3ba73b70c5e6b6873fc54a129f267cbc7089c0aafa21212943bb23c3d0e10d9851691c6a739d341b8c149fa750b266d3f837d7064d0a608a04be381e4b643be552bc7cd9852c4be4dd788b6d91b403f692a1ae234eea6f800a282bde78836a65bdf5df56810068a392859fcde8a7ee84ce6ba89a565db89ba26d717cfeeb03a9e1b9a659eda604b849a04f40ac1a611f09da68d419d0d64d8c129b8224f782226c8c846c21a9baa3717d0c8e82680615e38271590fe0431615ac2c86b135705fbcc2dbf5c377f4e5986079dfd22d6819da0834919f187975ed8e86e2fa1158b261111f9f599d4e0f2ceef9ed31e6e18b5bb025264dc603ed625e4d2f8637a5dae7dbe1b14a862070bd9d0f0f18011cfaf73ee58f92855cfd128fe1d4dc04d239bfa7b4e42ccf16caa8ef4bedfb1874e92af8d82613e2ff258c97d77b7205884f56f8fba066d48b6dad5a22e261a983c665729f92384b54e71f0ab07bdeb6129c5c34386e8f3308ea09621684d220c42345208e5c764b18c2785cef6e78a31ba13e0dfdb70c6719c06b9ba95dc30aa07038a726dd545e9537f702f6bbd6390dee5adabe0274ed3871327b5dd5bae3b34dbe6b1b9d68f274c8399168fc8df463d4512eebe94f31ef8cfc65a6753038770c44e0cf252a9311f3ae9ca8a8f661a803af7f29c401e1996437ff05c4c975664c7aaca40cffdcf73ac4695839a61d54fcc44fda3b1358d0a763bc1e3ccd270b7ebe234cad7f2cbf0e299bda272363f5104e158fa71a242fb70e013255d1c9d1239df92b9f1f0ec3fe3cb8b119e4f202fe9b74bcb08cb00123a572f4a86dda41db7872c34a65ff908b7c247f5a612409184ac1d3bfc1a8ff7db895d79d07d4e7f6fc349647ca8bbf26768397913e9671ddba91874d7f5b6515b5de5dac16463e1697c3271fd31faa6faa4a9c26c3b5c7ef997829e20c63ec8c3ba0e96e3faabeaac983082b1637dcc785ddefb3970e85ae35ca4e060f4f0051a8a21d5bea8ed43400189bf1fa60e0bea7d214a03f0d35aa3e2c6631ee792b068b466bed8d4f3932d9d8551cf63730b57ebbad75022e5253f0f304fe207ec71b620257abbe883837b566e6049007575c78ff1cbab70e564c2cd29cb35bcc8ee0bb6a630ef4a66bb33128a1316e7dcf142510d4e99419dbe3103faff9d6eecd26f5e3009fa6464e25dbb2393bd7e7026d1195887a4fed3dc9699ec14a48521c3ea000d2d669c44a0ff387f08c62ff9bd7bcf189f530d5065f8764532d2692f69858483c3bb5cd09f2371e699ba613e5d495b96be2ed7dc0260844d80ae82de6e47d2dbf47f0bce84d04ea26e1f7b08af41a51a0abec43e5bd5aa4e27c039f67739d25de7 +MD = 97582f6cd880f8797849e7fe97f7248160bcf29cc98d2cf0219ab3610e0877843965288760b1bc6139f7e690f60e465f48d3a6e55a1bc51e3600aa65a14ad0d4 + +Len = 53136 +Msg = 0521b202f798a755abb5e328e14bbffe5d1bc4ce8dec6eb46bde31e7a5fbbaebfb0f7708e9b959fa87c3d9eaadaf399d5a920cec5726f874171abb8ee2ac6c82337a03f75e951cae75d8f8706d78c5457ddb1fe7c7aed6763a32f26db7d6f4d5720b5fb99c5477d93f9c49a269cdeb5e8c9e05a925ad90249ccdde6d6ba1db4e836a9234eb1df3e3abb9d369e8d734505082c718b94aafe5049488744834a8532d3ea4529518163582d49eab34bd278491306c1ecaaeba203c2ef76b94b8e34e372f9ef9e16f6b358b98b35293a84d601750fca2a100393f0a45333b985415a66ae787131647774c90aa19444ec02c4da989808b8769b5a9377e45ca9c31c5c38e0b67877dcbc4e257b5d86bac2c4eb41183fec3c211b5c68b833402e8767b0d6b46473d5e20d960aa5ff9adf7153bfb15e781319a1fc1fecdfc08cac34cbfecc83d2e1d01713e2c4f5083f475a2798c7e5d0ebd59bb61b9c790ca0977db1ac86e9b240fade47cb00e317e2770fc92cd138caf4f450f1e5f3fe881a94a4a1309260631fbaba11a53b1aaf32e2e4a0e289e1d6bcfa8407f58feac359185c23317b6265ec944d1a07cfe62e9f1f8b57304e5b74b25c8790d0ccc83eea96f6a005ae6a5b261bd9c9695bf02685715654bc8b203553aeee04ee47015b5d9526b043b802836ab61298505ba31784acf811ddecba993f4619dcc46b40b910974ecc7204a5af09077a1f534b89822b26c3272adf8500d3c6bd90f9b5e0d8b211f16d0720ee0eaf6462b6c8a80df6d75359fd19d03a0cafb52bc9d4c37c2aa099911a79a92652cc717f0746fdcad627c72f1c216b243d2175f6d00bf07d3f6aa2a04d4fe9f8fbce93218944b92aa07af6b4fcd80cfde2d7ada15c05e96e777ea1c17df08fc06a446dfca55866b7f66f667e27b43201ce40a0bdb6390aba736b2b574511f7373ecc4662e3d882fd4873ab0d153c76ea2fdb139e873bc10bb3aeb3f40b2aaca7e9a4d0e6dd6b9a65070618c45de75801b8355ae63784c8bca8b7b00a68813caceb8c821afa882979c2b554466a2b3202d7be0b075f8a7e57c324c41cc5dc13b0c4d1ce51b3949cc60c0fc1f5b29ea1480ef3988467d35e67b364449dab81ce5df6233a3da14770b433540674dfb8325bde6487efd8e5e556c9f4d62f9228c8ff0fef4a213be751ded940862639ee41b8c69f5d9c3b48afbfa764ed251227903e729472cefc0aaca07e53b5ac69c77be947f28e3bf7521a1cbc22ee209404b076beb148796a37dd9392ec3959d7da3d67e30c9e21a5c8b0d878bd7da49046a64244d43fc2fef58142a79875c11c7cf2af184c01ffbee3008d7d930023bf73fe2bb56bdd3e32aa24183cd6ff64a0465839684f5e28bb5795963b521a104a03048d80f6854d9dec229eb3363ad6fbbcca915375173f138cccad2269201cf87a660227e2dc73a9222940bb14bc7a9756c6415a6ba1956ff9221cc356b68c2350af042adf5732dcf294a8b520f8d1fb9ad7c3ed7191de2933427fbe9941f0531c2c1dfa4a6a1db1c3f12121b9847fa0ff7b83ad457c7bc7b18a4044af66ec103389ba26a29996b01ccb54816cc3d61ffb2e1aea55a5f0d3fa8609260779c1e34d245330667a3060638fcd64a94b67d1246bf45500c2dfc684b224b3400f3434bfa8939834707d4b4ecac64bfd9fc75cf1b1aa5df5479b27d68b3d7cd7ab959d0172d5de6b00cfc924e90997e815572bf99ba7659198a570669dcdf33cb37874c90fa46398cfba729c76f1e8e750a9c68296761c745a9128bb5630b6fddb5f646cfb89c84c21cfcffc0109af79e621a5431e80d30bf1e0b95b4100288967bcd463b2f09cd3ab7249e9f3cb6c2e3a7150b1b06249c6f316babcead6d86e0d035d43c26331edc14468ecdbb1af62b1fb4134d894b143d2a5a566b00f372a2fe56793a67c27e907b8b55b3556d9b601420f631392c9e1150ff1df3d33d53c44b57bc9db85ff63e331b7db8d258ba69cc803c2ddd6f45d3ec8388ceecf2312d006126cee2b28cce851d8e43f982592e90fd6bab3fbc0e6b460d1f6413bb14c7649b3e33ad624a28b9b90ebe93948397a7bf0d1225b903c1a6c66b1e12400579c12e8c35e01838341719879068353d8c5beda9ca58112bbe54d6f362b0280b2b5d41983c457b5ddbe6628021400e91f5f2b0c83ba06a8e4897643f99b41c2fc582fdebb1a234c10370bf82d9e3c686bab52ff1cdc46d3548b998d82ce7c37830768a0cfac0ea6c95fb561420190624c3ec93ace88ec127a7009b458111c6ee52810f83816746677ad04fbe5ea97674f8df0381f4c40e6c4bb5950e02facc9914edb4d9ad5eefb99837d308fb5cbd7d42d5a8f9592ffe0d1e1fadbc16697e825e00a395e56f8e6ad9770a7b5ffa84488718a99b7f97371107880cd6242784b01904013f9360cb8324da1b9ef24b72dbb1ee2ff0cec46180ed36dae496fd852b2b3ff95f1efa4d0a60a62ef91d163040a6a0627faf7d2563ba723e6fd3b029fc7efab07eee05bd0a77246d154625657f507569d0888b2bc1558460fe430b192af97c51236b49c288509cfe79d73eba9e95b76d6bc2b71aa2a6b469194ed5fdbd830f02d7fd8e058ed35609ad362ad7a75fac95d9c6c79a0e954a81485cd57cbe06f9eb210c9b2e23e899b73acdb163a1959e0aa1fb83550e0a8dcf14d5d43f34698336890039e45077af2fa7029a07951fd3f34bc8b5f0a9edc67c04219aee2794f508974130cf1c68de9a7c3faf6a8ae594795f972316e8263eafa1a8ef309f6e978cd43748988fa36f2042ebb63588ce28c466cf966dd19d3a9171d39bada5e1b0e7c74a48e7b111aae8806d780f98c4d9fbe8d7d69d6f3b054afe08650e40d58a44f9e3fa638b98d61bbe2fbda1c0afed476b19ab4fc7e6e601d0b017fb79306bc9f06824b524213ce085984c920a75adcf79fcdd2be38724df6d34771b57db9c9e36438f85849525605b10ef8b7eff61bc99e833d8ca07080b5ffa4e17e2be65ec53da037ab4dad7c3cbff6c3423355135544577ff844cdaad2e6c639622c10ddbcd97483cbbda9b305acd8c3401ffc463307c6f471a40e2ef60f1804120cdde922ee12574a17bb8cf92e317342046046db7f3e45993ca67f77ff06bc0e3c81e3afd1f63ca6fa778c9faa7d5db89f0577c71139ddcf7d1b3ed13d3edba739c16fac3bbcae52c4521461a828ed243e706b8e54464794e3f0cfaa201ced8d92f0efb071c226ee03dfc6d7bdd09c0561158489befffd8a1fbbb46b6e2d6c11c6b4e6451aa330c93775167a41e0f4ecb5897551b7a37a0f7ed07f8d6decd1d44361d5e2acdc5684eda685c1daf6824a9a30906ee4fd47959fd3a388b5d7a965a7ac51118ed9f29185088736ff6dce9f8d9f8849bd49e0dce139b305bc7a6d2641e8ca4a5728af8fac1fad4215d3345c0e4aaf6aa735d015e177105d18419796d0abb4059c44e7dfb1307a8bb4a34e20aab6885a393d80011f105e272fc9b347a26990cbb4bb35f232ff517c627a865dd1679590f9bd8b0f0899fedc898f4ab955a7031537081477afd0c48c95b5779420d279976f525b902c7864e5abeeb85c58e86d6a9997fdc096596644c4e09c44078b86e5e0887c45094042eb0d74a6a13aa2524463076c7d750d992d76886eedf3f75ff513cc679e0d65fb5534cd70485969343b19b2eafeca41efbf31195a0274ba675d6f9a97fbc77e00aca835bf8263a185a72446f3d514badc627b10082218293f776a7f97fec5dcf569de69df1fb7efe91129101190d2bce1cfcb08d3bd4cd83aeb7ae7e20767274c055dc67950e4b8b1118ecabea282ec925f97605744915c0c12477000b649c167179cc7f8c668709020cbc3658ab3be508a66b2fd486409059426847e7bec5ff909120ae7f0b1cbe8c77686b0d9d396cee8bf8d50495373c9e9bea1a5d8ad47546253fbc1606f0f3d5df5a0fae0612a4fe3183bdab7ee30bb7b6664315d2b1c1bbbe9171f85eedef08cff9ede6efadd6611f76b072472b47cd1b4288b69d442b16e37e95ce1bfafc4bccadcc5a5ff2493edd377601faf6360753e8b2e9f475fa801d6eef3f46fe60c660de73b55ec947bef430d7ff9e2e228ee5be8955de2c7820f3c948f4e5e364a312f4ab9df41a1609ebc79b143cba5189592ed4a36351eb1fedf76894039050076a573cba2acdff464a6689e9db820c21389e5d7a8bcc9ca4936017c8a5ed6c1cf170eeb607ca4a9e9a746b26836e9a7e0878ea835f85d3d86e6d1d38d5e2ff0a2ea5893693f93f38615907733c6645c754234465e664d8e20584418b9a5753f9aa5fd4e5d743263d2a7c25760f525325a10733c92852f2ebe00f4c6afd34ae10eb079868da8e46d47a478fda031a0dbf798c7e572e356a1b8874077c046159777b039d6aa5c4e826db210c4521a6bbbe631aefb6fff78899841d376ab9c69c57e2bdab913ecb545ad472636070dea549e8194c8fa37e948e5c70a7db244cbed8a69b8a85af8dd299eea35dd2f8ab12898ef15e8923b4d62199d71e784cd90921510701ef00f0aa0baf1ac243c1f34ca5e00aed4d867f967bc2b963e93956c35b6b68da7737de23d7a1405a5dd4a099c663cdc182d4c91bc35f7d3fd5f3ac35ad7a26dbc45e3e86264c7decc538984214a1a0a1d11679ae22f98d7ae483c1a74008a9cd7f7cf71b1f373a4226f5c58eb621ec56e2537797c01750dcbff07f613b9c58774f9af32aebeadd2226140dc7d56b1aa95c93ab1ec4412e2d0e42cdaac7bf9da3ddbf19fbb1edd0556d9c5a339808905fe8defd8b57ff8f34788192cc0cf7df17d1f351d69ac979a3a495931c287fb8432d3d5525a0dadbbaa6b6b80d31cf879cd23e8302ce0542d37307a0c8ac58f91cd4b79b35c8597a8740e926b65fccfbfa88a997c8742992af81fb69804d1cbab18455b703f605d563ed20c40ebd78a4f99c3b7670b4bdd0fd7778d58b335265cbe61e91d75364521655657a5f745aea61b6fd0642b74a6686fc87ce3385826132a11a11f907005a6721bf30efabfa36f97df53085a558bb12b92f3cbe6c3416ae5e5120b03961561ff937ce088be1ee8a9a2ddd83a66d3769567805750ff1ec07c5cca446110dac0684d33cf03c967cdcb4adf382e01342527a6a12a097404b047d928601b88ec6e46b9d62efe5a146b7747b5ccb7ed14496cd0e4b872baa9b6f2fabaf2a566c0a81559d294fae8bb6e382a1fea6a62fa5fdf96b9871f4b6440e82200608122de2a5ebda7756c0db32278527c35a81b6cd4fa389e2a819ecaeaa1ff872e5155bb517d55c364e4319244d2613913136ed255475710f72c3d4410aad3bdd07877deaa0ba2b4c7d5ecef31b0c6f5271ed5d13d4172a09181af766f8d5f12eb78f1ceb084350a32c3a81075adf43ed63d08c009631bcb6e145dc833a3f234d3d55bf1f1717d221a2ffbac8d149954a4f040455636a3000176d0b029992d921e102eeee94dfb9b029d4019e4af06f517db44d78036a8dce00b90d49dd771994ebbe32c049420d3707e1dff18b7cd8ea3406edd33edadb07e65269c2ce95ed8da2b011fdfce9d79d854fdb295e96d9fdbe226eccdc6223950f5fa7d333955cf55001150d767b1fcceb467eae89e67872613158cda4a96c5fc40950e6d61e6eb23bd8c6597fa1ebab81ed4ee8d413bf31665b313d5f58be4d4c78eb627dd92cadab5eab47df0345228e6dd54009c6b62215c78384d5162147f1d300aff16d9dceeabb4c405d4834195cee9b1ceea6642eb59ed50ace8c9e35f9431735fa83cafe3f1631adc218c178319727e54d5cd13b9007b03612623cffadefb95b5fc3b923f197e3f4d61df22756900104ec8f0532ec2b9b72683f048e55006d8bead474264968e97f61fcd10f1302b1df93e809fc12321e269acbfcc8399dbc2d615f03f08faecbb42b606616af15bfe00c0ee47f4a43c1b86eaf2e96a0ef2da78d0b6c680b9412fdfbefb82574f0b46e1eab9ea5db860d91ad93a2e1d41d48623681b975043f45c19b51cf25a8bc18f0906440550f2489191f1e5f8f1b5095c62469f201c4daec67d12fb3fc94a071d02be3d0772c45beb88bf96d89beb09d3c1e6a1df3918b8f5966316d9480c54975b7d059f27b1032d7baccd4b80464e72aee2c4433b47ab7fe22fe03d3b4522747fcd2e0b044ae6fdc753e9c033795fbf95a586ea875d1ebbecc3f80a3777094aec1926f98cf47fd3182f7ce519d6a62122b96a43c1bb5b4012e9be9eb13471712d0b80d926302623ca9a0728c800ca3db288dedd6f050992f0ebb4893cefe38dbefebc38649072867b4e18e9b26a246be1be6515e3aca22b03546a482f1be7f71e7d3985cca7fd61969612c66d855d422ca48d8bd424bd7ed6be506a2c3ae753d7f1994fc2c92f5b992c953d5dd4dd46fff5c8bd950fa414c774075da8ef7a1a58165bf4fb7670cb1f5c00cd07fb1ce0c80ca719babffe73623fef91298c08b12b35e223bb527a3685bef5e3f04a94a63153992eb9d83511435c89a322b32bceddfadc4a96cf943468bfd510ab55fd1db8851f7b26cae084c764561238d75bb9ccbfaad82250672b34f93ed19daf8eadca0bba7d661a79348ae1e55cb06b0108940ece6ac2875bb176d593b54bb9f1ece241faa41c4977a6ea5fa7f13e00b441a052b7611bd6fa3daaef642a49f7af41add2409d9dda546282282e5e361afdeb9e46065982c1cb464da130aefd0b1f4269373cb88f3fa7eddef5e9124d3c466cda333bc28bca3751eb9579c1f946da65b0db4f83550bdaaf4d2358bbc7c7165be0b4b82abb72d6e6e126bff1a34d69321158e99c83a1753d794afd995a5df62f3e451bf0863e128bdaff63bcaf71342e171a9b528fa3000edfd7585969536e5d6f6ec7b2709e82a7456a15915274d3b01eaae543fd82f399ed42f97a6969d76ce08c5bff0f069fcf9d01460e50aab07eb48457ef41b3c8652e38515afee3c9e43e483924b628d27b6e5f65821ea562d0553153c2f0d817071f01d0998e63ce49d50cffd20a57c32115cf04ab10d7535b9d3c795d8f4237e63c4a27a49c6c5d14515510757025da574ffa93d7dbc31a86e8f0292d8194d399127ba71a9d6feeca1fbb0b8d8c158094694ca396c3eb20d8b506f3a15c4252761e00df5a25e10bd1ac995188b2a97e5efe4fa4668dd1fec7adeb695783dd3d23cb9440e1ba523cc1949a73058853fc1d7b7e26d59dfa0cea2017eabe9cb80c28b7807c4fdf45da204418f0728197b2566d529b5258d5f396b816f8551b7547db4e6fd202e93e9c6447af4a5e12f719a04057827b52f81b83d25322a964a768d21cbcf2997caedc042bc7f136d0f49a7191077c9f10d31d080b66fa2a2c90f7a38ef25e820e1921965ced858b2012cd50dbfcda5c16e950b9cfdcdf65b7f46ca6319a563b21fff58147aa67c9a4d42ab48d823c30e9cd5f0fabff52dabb344070913faa433cd5d05b98691880c3ab2b132232029bedd1a0700c78f4f79ac30b891a3cab38d33d3a8bbbb4383ef11a56f336a6de1bb7a8cd917dc4265acb333666592be96a6998aca82e161752d1b426eb473b1f3ebbb52eda7c5b6752e107598eca77d576847a9f276c09667ad9db2351b07956538e795cb194b948ae60b1dd68eacb0feb98459a9ff1f875f57e21c4cd2eec14189487cfcd33684a9bcec54a9b367fe91839ac27685c8df681331a93c3ff0dc8fc52430073f4e2ddc98fa4197c3a2101aadcf0be170814487c9d1808cccd58e55d6c4d874c45a382a627e0d2a26238da01f6c5d7228135fc6610bcbc4e064819da3709dccc9244c9c02c0dfea45b31e2cc1b8dfb21546d72cc327af6de2665a6e146fa796b87212386108e05e86196bc57bfdba289fe154c1d86d560e3ca4c4d1110b1d5af80d3208659e370e521f1b733581155d2fae808e8624e82f55e365cc828a27a1f1bd5314f7c90e82128bd63ed78e19d72b73009ab6968c5895eee56a4f35eff10b491d6200d38a432c26462f496aed20fdf97fee51096b12648cedb061549ad5ae7b3afd6602d5d80ab8114d735dbbc00b08a3903dc6ade42a8425a89e2f53d242194fea139f17c91209dfa13db1a83dbf68148a641579574f9f3459ef0d40722fec0732edf1779faee0593190acde2180e07be4ac3df7f23ba5c3cb3c38893cddbc07dede421ee145062607529885f3b53980a4ff88513d575e79076ef657b8b551faf6cdd834173e44ef2b6dbbc43cc83bcad4443cacc00991ff146b90d26f1d728680a1fde0c903605ca3c75ec48320ae027b63a23304ba08fcfa1d4e21e87ee9538644f64a80fb2214794ac8ad50255acfa243020b90d38919c26b776dab417c0a0f9d0e9bc38e54c0b5dd43a62c3f07da50cea45fecbaddfe733c55dd41ccf45324948cfb1b24bc075d6715d79dd67ccb8debcf55a1d9cc52157a2e9a318918d5cc11b7910f2524927bd287692d5282496182cd1536971dbdb10c4bcb03deb2390ffcd98627f952091605e184641be1fcd57ce4c8335b9ae94ddaf49940358826f53d3801eb090e1237e86b4fc999618df0bf5d96218f097bf4cc702c6ff5644587bd1c2be4bb2258e5636df3e435c9a4bb3480a6869a331eabca09ab18860c3ecc62cf2c99785481285e2e983d55e3e83cc39421ede4e0787cbc053ec45048b8cc15982b92a96e3608c1f7645d6375027d55e32edbd5d7316e8aad0ff9bbe25c90bfbe5058b4361e8e741082cbc5489986d0b3f6dad5e2f2891c4943422fa0d11f468ac5720375e2c15fc1180fe524565d1e4da1714cc763d65a210524144cbf829444af68fcf229aa6b524fb229d1e10c25f95629a24f2b5c2d7c7b29d2acd0bf8f3439c309779c4f7e0a4e3bfb16e19bcffe3d883f42f2247ba4cdd8d189aae021a1880a91cae3ba81323e32c2bcff1002a67f188b6862342edf24b979aaf5ec31d5c7c5fcb4a5f35d12461fe58ce275a8374461ef8921962c76a85533d95aeca6161c7db1fd8a00f8f28f8bce4b32d1a8fab3ead16cd7525fb1803365dc80e76aadafb81a6d3ceb3c1a40fee4c4992dea37f53b9ada2d6eadd7d5dc797c11e564e2a9019ecc60bc10d182fe8fbebd90563631dcb39bcaf40032ced6d581b2ef7cfc32dda5e1a1795b617d1537004602d43e9056827758eb3f0894abe3b30d0b9a4571d69775a42c071058ca4453dd8c4c983a2f71367c5c52a24ee209daca44a6038f73dd5014dcfb273ca51e7f2a34a68d56f2e79fe04e20482504b1bd919f887fb43cdd3a97921fed502f2e4cd404ca630d244c7b2cc99341419842250826290106ba00fbd5555bacbdefda828404a062864f079208d692d7c92624dada +MD = e12f731ce256300456602b019034961166e906fa7c71763275db5efb25e56db3993888c2c6273411e2d1f187679015aa8f770b249b9adaa312e9f1a694e322fe + +Len = 53720 +Msg = 196a0a1fef8527c16166196a31dc486db1fe3ace290612b279635714ff09f7babb0c8c67b16ddd538f34a8d890be9f6ea059b0d9c10e89a1adbe5cc3bd71dfa609ea9850d17f57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db64215629c3f4e69b4ae23c64448b6280e577c3ed526e3cc1eb639fe34b2c9fc6ea547beb46b6e2240e6e73ca2f26ded079a2fb7ba8c75cfebca8774b0a3cb8049e22d3da845c3793130b1ddbea34b7ae66a7aa57f936105612540ea6d0f98e0ce5f90857fb497970df64b519f4499f8332e26b12a25ee95072f2c0774e079458685373e41a230a45f9f7b414dbea08e7750fb82c52966a865511274ccfcb6d7f7bcec11f7f6d7c7ac930a55d1f7a5653837c1c157860f6504f1bbd97d4d97bdab6d75a5a898d4287e39c03432d9f3a4014b4015e92632f56b79f0dc90b963202afe9ba45c6f6ff05cfb6487784bd17457f4402782f0167f224f77280c2a6427fad926b31b65f047cf40c0f5ab3486fdc49a889e2acc052cb2dd1863f987e0fba564de7cee619e545e719a27d47e5b66cfa5e123e9a24524a2899d365fb820c3b3098ba7dc4cc34091f4bbc4fb1098d8017d135ec85a1f8e7abdcc4847a46ca8aa2ff4dcee0ca532f032eb7526d2857ae08ae6f6cedddb92c3e06f42b8350cd2143de2c22b8a8c530493f1e25fac6975f63522940411c15a045a4ccbbb524768789d1d019baec2cb548097b2ad868ef0cbe48edf70df190bc5922c8c57e366935fb66d4246618ec1685fa38e19483a14e500f3801c2f2ad08ff2d62c94d1b17a50f09a2d3589375dc999de1da9dab609cef2191e10ea3dcfe8e114547a027046d3b36b696f0f06c9fe97100867244af60e21c86253f69a305bc7acac125feb1e7067a99ffcdc432a8fc001f65b0f3d032bf4c8f3ec3d891c6d0d67db63d06a2bb0741c76e5d736ab057b78908c81d95aafd5e07be6a652bba8190d8a753e34941a438c9731e72671e7323f7e02636420222bda9f46183c3493546660518f9282373ac1a9e8f65da7bd4c1c67c59e27800a5d7c09167d90b0b6263906feadcc1d8dc2825513eb21731031d8f3de186aa0f1d58f615ebc97569af85023847e2a8ca6449943b8adbbfd66483bcb54bb75a85efada4e24bd964fc6307160ececf3f80a26cc1ae226736e4afb0c972f6e8fc1da3427797268d8c2c23865653dde71883fd2e482963d90ee41b115fe77180113eceb3c8a4fa5a4d81776f4d97f3bea65cfaea925deda5ca4d5d31ca935a314c51c87e228c45c41b84c54e565bbeda7b64224e2a8c1e51db98dc7ea4071f60dfff270e1fbd775f88ce93802b0f8dbf0a41e9a59b648471c55f1f6476a31f937ebf70f01ac92d81179778c11633eed0d57ed7ad4f579e6a19e8ac8facf7f94d9aeb2ca0ae3fd6dd4a97db7db25950b45f6362b1c0d5eabf3bfdfa6cd1862af3a73ab0ac3471f1d88448321289f061de1aa8215f9a7ff7e5cde79f686ede332a3606b38f58100ce77711132c078980b299a58a0326b62482224de21eef508055c9d79ba6839a869e759b0526a5954bd65ef4034910091ef8eb89890cdd9db11ad535dfae41620d72124e7e9f0ea401cddd0c239dc0f945de8c22faaeb41643cdeaaa05e31c06ffe6df93f5f18d2670ed9666717dc3f7178786c29d60fd3aa6f36c9c95016e09dc812003f1cabbace7ca0d8b6365939322a85dc107e033ab593fed960375d1eb31c5a636f8870497f4f7b4f38ff1ba4df5a593a6b098d1c8d8e7f01ee7bcc21b8e18b47570c3128816db2f373d8e9297ef03aafc3df76223b4afe6afa832c92b401eed6800eb4fedcc08debf12a8c7019d371639f6885f3c6adc63b0cb94418af63cb3871f8c274982f53603a5ecd20b7ed467d870b843836a11e9dac84de5cb2ef6a95b2302332bea14e79d4da72e16125002503333998930d4db8634cc005c48d1214cc209fdf5600c45f4908435d1e63e9859c456ebce6d89cb3b87ab3bcee250ddd462efe236633fe39214f0a39f68f47c2d9aae94b37ec53b734747f29379fa119a8c407a8f8224430e2168d20f192630743ca73ee8c30baeb5da3ecf3a7e317f07b49831313b5de6c16c795b81852857a600dd34def8c1878be6fc2c346dab78945253b0fc0d4131444c9eaa972b8f543bbdcd30f67e8b785dc41c8401d6ac80d91bff44206672c51f584549c07acfa8bd99d39dcfc2cdd3b417fc713337c94a3e4817954ed56714ab0609b39e017dd7a44bace5eb741d3c2749388e390f96174c8d291ee7d892a28fdc5862704dfe73783995a3a9f0de141fde3d0593dc778a8c41a03b8bfe89f12641bdf0f7bee5deb1ea4a51bbd794ee065d96a1d41d0216661c29859ba5c18316eca6c984e2a8abd9d4176a7176d64c932db1dd6a4faa3d62530187a76cbdcaca23af66b847db5d689da9686b8d26921ef53b02c6f2f48219acd4bc2fc1f34ac89d3442f25ce255d6ad6ce61a58ea61321a8ecc9a956566f4801f8da533e6859a9fe208d3a04237bc69de4e0e78b63c4524299525a5716e7b635e9698312c0da8d21502dca09f7582797a0aa87afe85f09897f728a1ad0b26ccfe41895818358baa69db6ddc4e91b142ccc688de47c0acfe565cf4286ccf7f239b28f9075fbfabaf3cfd17b1d41ed16c42ec1ff1168ed2bbe1411898551dfd1d91b757cd56ee91372ae25adfc46f5b4c7905ee71ef532a57c55e168ffa8929019e6726289254c5089015b7a49415c769db8e64cf268fec587eee7e6da1a37b760dd304978684cf6a2921aebec7a49e4ae6e0237770c7c1447a7ca0bffedf7ce15c654398c7f118f24270b07ce39e587627c5aaf9428d119254a32df5669f95ea26a893aacb1c2a37789d5d6d5c657e622a995bc3103285c879dc96bc7d866ee6e917555c04788b803802160ea68c88954bc5c6637e6a766d66a34b63b806507e102c091b1898a582fd497aef66960f9627e56b68c1976be7b771ec898ab1f30638713f765bff10a654cdec7df0f46bdb2b72cb319e4beecdc8c2daac89fbbf15ce6168dc531e4570db19fb38fa3a35dae2e8566c68fa77963730963b1a462d234e8705db9278cc58dcb817bec6c9e62bcad0ad57c6158ec77f35bfb3d043c5c5355c96f2ae810de4e622d26e0b4605346fa630a21a3facd7fd3cb7b5305701622f5cbc9febd992ab83e4abc52c111b8b3de370d9e9eb4a5e5dc00eadaf1278907901c751fee4f303426814629ddd71a6b212ee4dc97affb10d6a350bc0e883b6bed647b73c3597828e47aca4f4eddffd68bf199c2d9125768895bb6e0a5bcb6b7d54ce1e483e08afd3edc53ab5c49f25ce4283437ab064155bcd1232efdea8251107bb159780bef1cfd50e62551447865f37bbb2554b3423f39ad9f8e603b25a3669bf3b9e8032eebe97d8da573f51b59819038731d40e18ec69632e814d729139f51adee1cefcfd4c90c4f130c8562a05612b2094ed6a7aa2c34e52462e5160b8247e9df5cf85a3e66a43557621bd5a23aa732cf2f9c1bfc3230bf2a928d72f2d825ae74f046589189ee455abde0fdc7f5f7bfad07bbc5eaa232c8e2ecf9c730699205951f005134f891890267fc61784eab618b205a2ddd43e10935b84e9c2dfd37f42a324fcb917c360938a7968a1b0f6b2051c0a2dc3edce689093db77a505cbc861b715a500fdc85cce5c4d6fe1afede05e730bb597336e85148c45ae8034dc8c050244a6716e225daef07e547dbe4ad1735b8cc2ce6199067d8955f6eae9a03acb29346990e54bf3b40b8ebedc888805f239ffddefd4c86d5a3f8ef94b70917512706776c5ffbfaf8be1f0f7647b4fde39a2f78f6229971a38f3532e38763a9b798c4046a729f7f1753837a6cc22ecfad80ae62fcbcc6fad786934fe2866f64e7ee16161bad08f5a3e62e5456a0bf9cc5bf65e678339cc87b6f5b6e1a1cf7ede80f44d50679fd05a15e66c4bd492f0d313d9c29f3eee3849631d6b911b2c1efc2e59668b33f47571ba574f2282546c9fbe49b56f55763d531b6495651ae97107e5753f8aa65ae9218a2a0071f9ccc792b9aa99304d5e36453e5ff6d627a3ff8234cc5ac7455fa5fa13d312b2a1688c4c7490f08aad02dd804a63f27ca7c8150b9ae32ad9875f365bd5e7185d2fb4353d9d816df6eb007da4ce150ab131e27c04964e3229e2f614d74eda63e9eb3c5cd682f033dd8de3a12347e7b22c4c7f7efd95620340fea0bbeced2197d17a6d6db7d36214c71c08e27c36608b466debb86746c310b710dba61d4f5126bc33c3e251fd5b734c0bfcac2027f3f8880cd392c1f8e5dce4f0236de8d3fd8302cdec45256f40c1d4e44b88af7b267c79afb3a8ae4a4eda62e3047dc0296b5f3daf2320a2a7b692ea1b51e28ace8ca983dd08548ca9629ba98ffb50339e4efdc54e24ef7a452168f437bc5432907ae24efb4e40dd94c593314d747fc3c0fcf152214e1bfcb615b69bcff758474f85c933b0f1d811aaec5382b20c66f13009dc3ccf2b20aa89180e492a8f59297a41c0ca649f94d94a5b5f26342fb03c4a0a111dae28b8141c8cc274fdd0f179af236b7baca40195017708847a5ab6159d62325d54e32cba0ef885b7a0889b883c9f1bdfefbba8c54ee3f235cb2a131d9896a27459d7091cdeffda79c902c1f5c139646fa422e4faa106aeb2ccfa41a4da3bf40b0370d7bceae70343cddc0f42db76d793708660a5a6739073e657bc4bc0b6a97a084d130ad162c29e2570ddefc9dbe7f3cb628646ad9f3a01addefd82ea9b3569cec8459720e78af1766da86d3add18091b23d05e450e2dd499dc8feac65e1a22dd7ed9d237d9bee6172f194b9cfeda3bf666d96cfb34ce7520fcedd3c273ea6d9add5a5ca4dde0d4be318afb7eb5c104d387fbf34ea7ae5bd9ac81ee9d710872bd604196e6589355a21187fd3e964f0c3923d271adcb40013a58068b85da070a8ba42a018ade48d1894b9ad17b14e6baadb6d7789734260da9abc64b3a13687dac157e2cf0d363e0ca4c2e18b2b62a8897bd8568a966b2c9de045bae18c1af448540a889b6dc96fbebafdc23640e7d0e8da466d232d788de1dfe3114a0493e07ad9243a84b5e349b73c30f920d6270a4f607f645e21b1aa30ff5d11f7f2ea73f9ba6e9f93cdcdf47e94242e51d6687f47754ae243585eac11a87d63ef3f68d44c5dad60cf9dcf979b28a108d229f3565781708fd9bbc7ba0d4209af3ad1522cfb2cac24410e305a97626f2faab510b808ecba14283234fdab35ca9ce192f3a28f8d3294ef063a66f9a9554ce16406cde11eed1938a6ec9c73e988d3eb69925f8fea0658e36e33e349641c07801d1fbc6a7fd44512fd38c0edc70bfc603d768a83aaf117252f64f910fd8c078dc7a1ae2b783641bd216091a2351abe49f8e84cf335bb79bb2f15ced4db6df5134cd5caad6fdab441f8ac36199c7fc1ad8130cd68f32c28af588e8d206687781793033977cd8947a76c63d8da6500ae94c096346a4c0bc90991165c7906a239a384732211fb0ba2f664cf9e6ef6662d069d62aa7fa82207cfc1f663692385dfbe076cae045f286c36c736b15cb978e50c00db56316f37870bd277cc7725f91371043805d763a84e6f7fe1382c14007fadd14a61070913f4c4abdfbc2c74c67dc3631d4e126e52efaa73185c6771c4a2f2f8f7f289de7ef40334765d0e78b4c4bc0c64b23ee7eff8ef8b234594378ef7e15d2a324056402fcf5586d7a79a8a9164e85458e238471044af491a3bce242685e92b48b3da204f30f655527f40128bc4dd376886c822e0b3c7d304e49e4ed6e382415d6bd0e7f92eff2cf51cd4125be3d4530cb2ff480f43bb092a180fd6af0511b699eea25dd7d25853e808bc53a8c9b6f26aef458146fc7333b55e89835bf27fd023c6b64a9123ea1254cb629d1b7f695aaac402942de7d899cc3f741c7fb2b2d8247a7676cf299bb161eb2cb85c0cd7d3f5ba9e4a6b0bd0839842386ac64e9415c39349a938ed547736f2846b1278e6a77358816ba971443840ef3d35d5cd0cd1299896aa7476feaefc68d17fe5cc801c4b2614bf8e1f1d01edceeb44573701527d11c7422ccd7f9cdad37abd7f0f8c7ca6acbd0dc31f4126c768ab61f2945de2e887433908f8c189f9bde9ea8549f20dab73e51fef799aeff544e3524eed07c792817257af01aabf80ad85d1a2829a188302f5bbbb330fa3a0eafde01449e749a287bc63caef2485982cb6397cc36ce455e153aacf57878cefe35fd3ecb1e5b24121892700cb162269c1e4e9bb1350bb4a9969b3d2ececf00bb673f37d2ce94896d84169fa9c67df1af477aa087b2ee38ab19ea06dfb25181beb9f0870c2db55ca334cf25f6a0104d44dd7440b02eea53cb15938478b1a4c480b4dd96c7ba31f04bb128ad83ecbd9be556d7f6bb078498821044209a4b3d4ba9de42f1a6029ef6df6fcf80d1fada501939f23d08db417978a06875a4ed8f79829ccd22278560c2d6e7006a5158fb2c48fd6f7e4a28a579174c7cfe39271fe0a376c8a2bcc10c06babd77a4928594630d27bc44cf6e3509e65afe14b7766313a502e1fdd6240514f339a1da061f3aa6de3f452b391a54be4e726873b069fd84dfb7958e244cf0802901fb753c74626a24aab69bf7cba908e8194875b46043b6ec1b6fedf7aa32dac4ad01009623801f79006d118be0867c2bc61aa523f7ea2c3294bd97f0aa60874e714ef6b3bb285953c6f51675f7918a81ef5b8c9f9f35474bba1b167febee083f1521e20599df8a4d64db35468f4ea6a31b879677d4d9aaaff204e425dd5ff01f0f463d1c5dfa34be708bd86e060272d7d13b5d5d272bc8d7e3078b630d2ab156a6187268562ceb3f60838a6cfa7151c896c33ba004c0244bf3af66b7e9d2de7e90152c6a30cc1048bb4eb5b3eb0fc5cdd2cbcbf10c1b3f84aa4910b4f1ecda0f43c8b5a26c7c3652e76a04e3363261801bc188c09bb19d0a8d8113bac3dd268147afc89177a1dfe68b51d27b9a8da767e820fc8f3217af5603c3ea59be28666cf236bfc7d0d18f8c0da2b8dd5675f9edae8681bd6db1f8efa3adff127f52fc3b09fa15b6067fa7bbf4b92289188feb9a055ed2fbbd050c4ff39bec7555e16a63c56664dc9720baeeb711aa1f4f3ffef553164a9a9ea55bff6a1a1cd2f058338fdb1817abe1595bacfb48ba00691aa6783e39634a91075a667d951aebcd2bda17a16bc8b4a38dec7f07dacccd048464ab1d54b76c22af9a1da4b961004ae0e083beedd2872c32ffcd83246ce59011dbf686e4b17fc2129dad85e379c107fbc95c9a2adf8409fd0810e3d214daaa575ef2f165dc05fdb4d76e87afef9e72f1072ab98f4a4bbb2097f1a0405f2c91a97028e354b19f441ada09307b1cf91a452c4693a7ad3ebe5221e85f1ba65c04acb1f0d33dbc9c23b917e606d19c817c8cab68cef062ed9216285d56a074d971b596e3579d679d1b24038d715fe8a8081c06d9b1e625d8c4c13dd95d9b653547788188d6d03d02a8c03f7806528bdd4b97b141e3154070c4f7b4d4aa58d1e0145a1459e782c77d4b322e3e4c65e0a1c5744d19d8fa5d46213e2fe7e365557a56dec1cee031715d70de5238aa16a195f4363cca1a01d6e957f9217b8f4d5a549d6b1c607748d533c8493e0fa5c1291a565202fb1cc837aad7ad2c18147d7b1f46a386b713456d90aff7641bd611f1af6a5c21f567ba1a3b3eee92460972122ae10c831b2ac3a4e4965d46f5a16585e5beb93c617153d8eaec22067dd4c7da17fb0ab435443015a02a0f69159e58702db1fd94c7c0220e6a6debfb380ceb1d6703327c7df6072a63c9724d0433572b17f29ddd90daa1251a42a0e2fd2858568887f85e6d96d57daff32a6549f6de2114ef1e7935376da77ae8e54045adac300d07d0dc7ccd1769e5359c344f5f79fca505f3fa5d5cc4202cff2db59a03331454e1506933ff4979841f4c4c8ce3a71858d5c2c351b1510970c3ee9572df999e00c30ba71bb3e8473d0ebf10ab09e20ea0ecef76caeba0de06f5ac7258895c17812b46f8ac71704d50926922f268b73a0da9fe97115210185ff2ebded396d71b6668b6e05ebe7de67f28eef62b5693450f9b5486dd8b4b42ec4a212d4c9eb7342129bff0baf16dbd0960950c9e7a029a174fa5c8780daed82c79f1004bf768ec31ece69c49c0cc3b8fa80fc8c43981b3c52546fe894fa76290f0bfda5a37589e1900af65739315ec928dc3cd451bad1c89badc7b79c7e15cca4d022defe522d457239eced0eee73a9270358c99a6c15ee57ecad1d21cd93138fd4c7d857744297cb4294ada4a9cc00ffdf9892a517ad568ff96942aa4fb7a5d70134bb3643907ea40d36c082cb2f77b9574358fa2462a74bbc434dbf6c4b2b843db0ae2327dea304821a4d31bd65b55b52a34222f9fc89911d8366e88c154c9f7284d9a788f5aef389877d37e63663f0bafe79a40043a66b0470b7ae17dfb12f87f96549ce9e467a0ac7781ead69297d769d2408a0ffa3e059536598756f013c64557a92619f139fed20656d7cc8ae0c6ec86cd740f72bf804749b2f0e8de5cff1e03f09aac0bf6c1adb6cadba199ba48ac779984af4e4bced1b7ff94b0305ee16e4dd360fcbefe9793fb765ce25974eb2e172d325be7633fc903980929808a4bba77ca1f9864d1df3966b1d22b44b11ce5f7f11391d8a661a1af24c4c1397f6c87242d3d1bb81106e26b35e1d8e5ff5c689cad8eed9c85b2d03d2e3e23d59ee258d5a53fd3033cad339b5ae277a7a0282a778b3acb9d71c1e9100cfbadef793ba40eaa9e7ae0a540b159998a8414441ea01b427db8660b1d60da5983ebe18ed6fd31b5ef5fcaeb5fd0288a108ab67b9e7dfa4bee3080a203cbfe8c4d5a465052d8d14f991e4c8f5904aaa53b08088725f8870ff2c077e7337eef2dde65985e2dab8fe02222c001dae342635068852753c4541721e4b63b2b1e3ea6bdba6218c609a0001109dfd333e0724cf738b6ac9645e3fa0229b62e391e7f9f41b51e10ca57b437fc2ff6842270cceaa60507b76c11b91109ec12310bf4047020e226c6993a5ee04a21ae84f538b4a4d33a02b8539c3604afc834d402236fb1c1ce36bab115f2a1617b52664a9cbc040564322fdb6a0d3d7a2aa887ca4133ecbad5a85db06f01f3f899ac9881116590c2f0109e61ff8133efafe7ecb2c1d3795295063005ca1f406608f7ac473b23c3828a288495c1447076a46d435a39e0f05f88ead22fabad2f3055de11fb7e8934ca7ed462d543c98bb5c4c35c2efdceda082d90a49c883e08fdecca5a1c60083d116abec9af1b82ee137d6477bf920faf030fc227eae43476154a36f528642364edca421981acf300163adb267a9b15d7c68bd9ec894442ef2d0ace63be0f6d44b61a08e30b7cac6a448991f8ee8d93fcc93e6263062ccbec8b8adb363bc638450 +MD = 060126698fad47d563c602860f65fc0310c802eb5ce025354fdbde68458e016630686184888a424f1558feea62be4cdb5c0713fea6970079b29a7d676c006246 + +Len = 54304 +Msg = 293a0a7ea614cb8fba404b4442fb635f01c9182738b9cac676eaaff0b24e80c597ae72f91fef6832639367b1b2834a35e00bb71ce02651cc95fc2f51e6a98e471140c2fb410f73cd622505d9341258d69eeeb23d469df9ae5e502691c14ff6f93ef7e2cd33fe52295eff0e02f132f509e47af1d28fa62a3678f07af66aca22a0c7dbbbb71e446f0e00276875106a89975ab85c23e6c94c2a8ce415c909a2780753f433002a673044f0a7fd7aba427c49a7afdc78718fc7534132dd51c85d62f58b4b33f27ef1ff92d587b358174336e574685718587f047940e4bcd8cd85463116e7a4d3436a43c158cd74594ef4203368e9b64cc4226964310299a440a18e849ed06ceca0586399208327c388dea0fd2c3ce25cddfe5fdbba925bfe4a3aa1b6c80f7585be45c9e2d6b0b4dfec871f096769c290ca9d4fa8869eec2e13d7e78f3eaba5e6c5b8dc64215d02f5a3790620c2763d2fb4879f913b2d337cc200c8d7a8ace656dc3a04e7aa91fb4dd43cbb0ae56d3d83c242b95f824818307f3eac55ad1b1f1f2b52a9321854862ea856a88f7755a9d21d5803da02f683917417fbd2f6ff3887db88330e14ae8be24751337721376865ec51e7c9643f5ce8c6151d162b6018d714640b4346a8f3afd8b5c6898a1a648458b3cbf54f2b8b7da0c07be9f346a956fd6f97995549a4de8308c88e5a068477890819276cc3f998289f7b13f6bad24ebf3040d8ea9a87b672d4a14f3b04b085a6d73825630e8c81863a865bddc37b05812f6ec7aca18481caa0b891d31ad0f7d7a990b7db142d7fe319058a506a8cc46cf58a2f44688485b6f5771fca53cd15460589a77cdec5dc67c55e68f6b6eed3a809fad859f76d0c5c5a45c0c9b48d2718738bbcef733ade39c5fbbd78af877a5cf3288a9454295ce4578a3b7847f975787bfebddcdc76ce82a142517d5d4001b13c7a0d9d899ebd7774af597e13f9478ca64a73ea1f5ff469e29decaec902afce6b5a281b9eb6793d3a1ae2842076e47c7bd7a6c246df97170f7355b3fab3cedb082fa5b69957d75d30349e3177569571830e1d0c58dd00b3b02b5533f83ca4029c614a17846b1effdf65542e1f83a2934455a26f5e4078664d2fb4d7cc867a69ae58e0e666d9974dcd16ce2220e353094815fb935ff245586fe63a467d789738c67b2eca48898a6c84add2b68360effc17b7f12163daafb09db8ae2813f945986c34fe6c31633e878c9429924fe1c09337a14cc173e00097600dda2797f3cab129eb1674294ffdc46b319b5d8c4d0cf7323dd41a95ec7e343f4d84e9104d6faa84063f8939350d4babeeefbf428e1c4f90f251d5d3e673b0c2e0751686ef7cab06ee415367fdb745d332ef627a8b38c4d7278a9935b62532712f755701c139de350be47cbd8f43da6c6461eb3c2ca87e9146480fc245dde3d5a04c548aaaed699cc5f0a943d3f931fdee0e058e59b3a445b653df8279e2ea759cc1b42895e274c0852c8400b221730e37be567afaa25e7cdf73b07d3b7e70d98c9d1fe4675e282bb161b5fc1202c728a7388607f7bdd6bd29702abc74f79d8ad6a83fc509aaac64b357e43fdde556d2a6463e3d384c3190fc11f6460a96980fe4aab9d3630e29f3f1d6b8d2f91248949cae2625a6979a7dc01fbc23e7a38af01c6b38165dd1c761d5a6d9bc50d1c4f6f139e5c627e6370ddd63235cf1669ab6e8b26297e03dad34c58ef005c86af2810daf2429a48030c7bba2d4f81226f1e8af49df5dd29804f72b58a5b64b24fbbc59d88a5406aeae34c2a777ff312db60ed8f658701d2bf32f6eca9fd5c049072f3b7cc05133b8d9da5b39b37a35c112b1cd8275d9a73ea366f6ad876d0e1f3d631c626d2815e6d843ec1f3070082b2d58f5b5dd9f5a193c232bc804831fefc6df65533adf937fd4f7df2297e991b32e8bb85639ca1c03e5ef75e5bf21da00ca2b7c17ce8094cdf47c9a0a90edb8a03ed27e2f3063d746c6513cca5f4e279c70d0cb76d3120216615c879fc285653c84b6af066b70722808d1e8408d13ee09e055b838ee9ec4a3421f0ca8d6b880cd29beb3a491fcd5f2d3f7e10ff17717904342ad24c92bc2bcc04b93ef738ff19c5473f3d14b0ce8eb4e4c8fff32828b79c12011030cc1e4a9036a833a4210a0f12e5bd55441aa935da2575bd8f93c300c81764c9d5f6812b132034452eb457614df00c2f71addbe8ef6a0ab61edaeef91acccc6ba6829341d759f3eff1536594c8eea23807fae51c773b0e863b7dfb14f69abe622d20b3235f6c5d90868ea32e2639f5eb817233450410e7ba7fed75c8fe199169c4317f441dafd7d378e69ea1e87a9dd678b474f718742caf26b9fd9993b20bef2635462894cd092522cbb674822900655821f8a726ed53f0fa63e11b5a0c844eadcca655572c48022ede993a85bda4349a5b5ce9a1d4e41c456bceb2b3818114d5381e3ec7463af6f76f955865b11fb0d9c100133bc3537db23224e422a988de27382c5977b35870172f694294abc95670e380d8375138b1ab77724439fd02073e1d4f49eafc1719f87e53ada4f647b20a336d8d36e6fa44ab7c35476be4933c6487f5749378fd3135dd02ee19290140004114c6acfd1ea33ce0ec623b08a2ca54e8cd5df3b2716239dbe58863cc8c8ced9d15092c1c1c59ca26162929c1b75d69b0258aae512a398efb8a0117595ff54c97fcb916cc89d4edbc3100bab857421d8e9c7f05bd7e139fac5eec9647d21587d21a7b0f76dda12223db8d5054f9350ad4909fac5fe37d067ed2af7320a96a39dc2cb378a39e4ae1fd64239d1013929c12b08104c0f0f23dd383ce306c4c7fdd0671f6e4fb324ea7996967f3824cd76bd96ab7a1893d0fc05af0cd509321a2dbe1a8b9c6b630090d8859cef613fb9fd4893da7f5012e1218759831563dcf8fd10e2f70b09d1e166e6ac3dd074da64870b297d681c12ac5a0a3f87ea3b4aca336ec84b014f86303648125f6c9b7d36dbae607d7da51d98713667019eb905f6987fd26fc7650953c6a9bfeb09fcb197c3d840c00613ba0d2cb5dbda770794e6f4ec0a4ba574e2b4deafbccaf0bffdef0531d22f4b8e7273552ca3f8be4a7f000f5c78c8e2a49ab9480210e2690deaa66a621db2943dcb33b246c545baad4faeb07823ccc81cb8cccb4bc31dbb0eff24ba13293228484fb30ca94ba8b5558b57a1e813409d05c4542e32de6230e9c4d2bdebff9550d8865c2afd3c08f56dbb62a853500daa8646b93a5e68980ec7c1163a93a6c55415f796d6eba14fc31b67398e62e31937c8c762b77869a99ecf7f59fbb326a87c262acad61a8164678718431abcd34e8cf3cfb96d27ea7c282a8504c6f288280f33a75ef334e42f29db55e816092893f02ee4252314f1f9f4ff5b7d64f8d32c5766f7bcf5ded398513ca79048f3eacfada1900ea3e7890849778a2e9d6e0f9b9ae5a14aa4c2548726d495a37a2022ec09755adcb347b79171ba997d38fc455f21d82d72c88872e4f1cba7897238d8d14dd2caf81cdc857cb2ef10d4ff497c5f3468239b28d83297fa4965abf9e41266c0df69c8a54ffab1553e789ab8febc831bbc0c2c8d589e888975586fd6ccda93acc5beb518481e19a1d057372cc20db31dfe708fbfb3bda0e677073ed397374057ab52283c6efa9ae0cd3813233e78d78353d52b868f97c55978fa81b6ed32550abaab87d86a951d585da096651a04d796e5c568aa9535e029a0ba9e4878d1ba0d1a533bb5e3f88b53a61928b9fdba9b9bdcc7aef26c9eda9f16ceff51dd1e58a8f2d2ad9b8229ca17d32a31e88fa00cdd60646527bcda990303be0a99c72115236aae4451ef32c4ec0a5c19bb79c110a39722f5112ff2079d8e1329e7dce1dac5ac7167a1d11a5f1c733548f763229034ac8cc7786bed0bb4e054c304c46690d8dda28051d1ea85ee383f2667f4cd75d9c527412418d38c9120093fb928b81da228caf62a96a91da97e021cd2d5c9a5da0b7dccdddfad747d77bb07ccb0e06b6cb37031f4c95f0f96700590ffae1e0a7fa515d16a6882aabe0df1820503e5607da61c9977111543fd33d0ebb726d58b10bb77b6945a5a169c0933182ecacfe61f2a57967a17d2a026f2eb96c2e5f40fd4772ce5235d3da0619309310daca6e49867a790c7829e1058d3dff7e894868014ffbbc4df1b343053d5fc356c527341318497ef24fb817bdcfe3278f1db90c5187bacbd8f3946aebcf4938c11633ee732a9ac1b5a2a84c7fb9c6f80a4611cc628148836fd627c02e21b579fc4880dbde300707c31b6aeddfad51b76cacf316b8cf1d599ef3cdc140e70ced44f69eaab8bae6a7a704808a524d0c0c42bccd89c8b3c1e4d2e6f71cc871b829479addc9974de227ee1879807c0b6e5d18f0118416e1ae8ba82a440139745fb4809fdec6fe4b621ee4a1c68ec15ae1305be15f9427eb5bd48b28353cf8416bf56c8002015245eee3474ae803a6ce1d1c87fb183870035245f88b3b1ea97b558287e5f82747cff11b627e6e6db0d77a7829c7dbff83fc2a667cadd624a184b4e24f2c11a7233c113de2a6ca4b540971d9bdb20b47e8282cac841a86fd94fff27b4eecfeef893cb7b1347e7c2b24d69bc7b05436aff10a018eab5bddf7d83fa6d3f383109efe246d1bc44ff46b97b160b8be28dea6432421836eec3ba20fe63a72d998e703d69599e43ea5d3ab114c6933139a73b9630915312b36308a906635ee5d98e2dcc702d680f01a9a5845ea0dad6d338657c52b450e7cd45d200e42219d1c0da46823fe9ba88518a9019a2cd6ae379e971fde0d3971e0510200de0c76058161ac6491db61916a1a902582775cbbef16266032118b11d216cf8b8417bbbe2a2f5b20854bc0f21bbae032937be83d1034a4c755ea9254ee90364e95165b3d72d1414a72a22231165409b7418d31c83794a2c3adfae7b18277a6b8856aecfa07f1ff30de811de4e6807d32113da1e3b1a090d3cec503ce2a17c157d997d98a360bd5824d5b0c6408cadb21870fc0f63ad30f762cdb6ef1620af6bb062fb954998964ad33b28655098d7414277607962fb66f294c90a1c1b6cbb7409f94f4efaee53d10260a043e4562f8785702fe3a0cc5407ba29714b594d493971a5a34b1f2c9cf5998d41e6668c5d8ccaa290d685e7a13dbd361505388b01c0ceaf1c151e1818bf810a33d83c030958fa56acd97916f69d83351ed120ed8a130a5fe433617b7036a01f9da1d083daf4fbd4aa74e41ffb2df571b438793d8d3a0bfd232d4e1c4c63df14a7c788d47867b764b32f2ecb57f7fb31fdc1ab41b13bbbd1008c4fc5524c26307bd4cebd8cb9144eef93bfe2b3037ebc24f41ec29f200023a4d6cb3c2dfb5ebd3e500907bef2fcd98527ff2cb657645b4f593a87fef1c43a37962a4a83786d011bc1a07ab51b564e9e73577109fd9756a779685a77b4ee5fe051d3b7fdc93d4538b1fdde1a3c0af561002d7853fdfdf553db0e01b27366dac791304b42f8b5d0bda787fb945bff16f755ea0a3d5d80807b079645563514f315dda8cefb0dbcecd32ca699cc821ff987fbf7ef6f27073e498666ee0b03e0f2f2bea307cf0e3cdfa2c7c27f69b851e63a78baef90637978e3dfe8c47be4b21e85bb89bf67051cf25100437614067d2438569dd14817c076719a828f4ce072c0f75cc3be6af9446d085f924675728bfca81c075f414dc3801c409e1626ff08206f29b7cc81f39b98f16d15b7330764b6b253605f200c6ade0b58a322b24a5c8616abceb154fa0bba31b13590f7caee9a80820f9a905d9dd7686af97b97c8563a146970348a167c1df3b35a9b68c512ef37317ed8374644b458fe08e97e81df8390eb061fcb4fd4075dfced9e2fffb9ff02e914e1bdd247be059d37340f7eddabb2baf638c1aefcc197135462f380c9100730397ccb068e3a97cef023f1c63af8a45daa48123adc93ca80f9af5d512c6b6e91557309ec0273361a9b7fcd61dcb38b5c881666fc5cc41ecc424d1579c8586091d08c1e8b89b008089e104a58ad239240fa6c66fa659eba7e9903c200871e05ba1390b3eb0c383820629e11b29392de906710b93edd67c71e659a0cef4f07849384466f157454ecea4ff1c97778469ad437cb08d0ae686c350edb9d4d0a5905a48c78fb10a74c4defced01bb04388ec95d165fbb6bee9d24afc8b1a229f5db27694ecfee48f6882b64505af64dca0fc599fa639faf73220e596752e76f65bb190026b219a13f0b3c71d562c9b2bd6f3ab08566ba43f8a7f8e46607f52f79b2a7a3fbd0c391a2b0aabbf8c3b5d1772f910743c38ba803b17ce7413b5bd8a6446bdb4aa66c98e62ace9916f83b38abb35124b214946a18b0f2c865779c097002ce0c8fad75356ddc409fdc6ada46cfad038f6cd454f8ac39031e5f4736206b5066be27409dd5ae478946a5b6039a378f20adb08d5de232ac163f9b24aabbfccf9e76ce2a17282bff01140f44579187ac111639aa1fa540acb4d2a59a6a3aa8c2fdbcd0a4a17b6b55508e65a036cb34b68d4f64a50ab05a9d574e1b03153b03fd0cf6db4aad6de0fcf01c655431a5d320ddcfde18bf91e510862848090c2b72b034bb4aa69b6e216858547acad8cfc76d9afde28f9ed87488c9e7d916ef8a89af1d80ab330c0aa0fa01bd129e8c97960f3d703e4438e28d688b032ab71fe6cd2c2fdd796a7fa1e45474ccc929dd9bd3883dcd2e010e5e94524210d9641dbe91c9d43831c756e27ffa39fa0b073c5af46b344b5e309f8b3db8a777419879709bfaa31760d4224ab84dc9cb64b139436d1a99913b4d6d16ce2df3dd1feeb3bb305134f1831b822931d19cb742b244e3c238d62541c1e78fea04ef88b0b14cecf34fd25d24f7d72c81282b543174ffca8828828dfe389f34f5efc320a09ab584495923c0a31391c31ab41e18cd83ca46237c2721ed1c14c49631472b6bf57e2fc70fa1b299d9526b5307bd7b5369251518962c878ad6b8bd3f9bc41f7f7c172de0d5d4a985c389a3ee85b2028f9fa085fc290b2554132b6d4661c2635779113d2b3e252be36cc7fb31c06434be91bd3732976b91d53bbd736f35ea9d8086ecac0abb1ba02f2f6defb14a7c888ce9eb97505396439acb1f5e0e8a752487200a1903ef30ace5a60be00186438466f2ac34e9f043c0f14ba19ba8d22aaed7df09f2ab1d0cb8934b227a970651aec9568f7e43ffdc808537e4aac29f43830f1e6cc774f6f849a499322de63d3f6e408ff5f202c4c908c30a7909e064884779589315d5ff9bd6b61acb5873ad65595909803eab01a1c0474daf3786a44172b3282d5c52895fe6344a5eb8d3e95bd67f5dbe92b118ff5d6e7c17c229e1078b59078c198f36cd0eab925c9d6b439b9c2fe6f1bc998d2a26c51043284ead52f7b7714fbbc08a6ba6889d4594be7e9ce0e75fda1ae8d0cab2d7a4b1e8795bbc5e7affe8d1baf6a45457c5ca2d41ece86b3202c81c0386499802a3d4611e9e9c160ffdd7e9c30e0f7ea5a62ac5aa0106819c7a5c5e9e003f2cf2882b40b2c88ab4d315ad726d2315bbdeb9180c3b6d6fca934107510cf1041813dc3705ea7bf0c180b1c9fa3df85f627f78e25f9a848cbc92e14971d4bb40bfe31a880f0a2b76b2856ccdefa9d0352914504a3e2be905ce27c5935f79d17daadccd8eeab659750e5d9119d1355d4f6619e99036840d3375de78856880d6035f8d5fcc276378843b75e94e3d64e1f6a01caf54c72753ce5a0374903b7e2b8a54616bb023862b2cd06abfcb82bd20d37d791c186e7a6f0ed153443436c6646b10055beb8db2c3c753a8af224fa27c6e44dbba5b9b11b1ad723a51f1e8fdf33e18c5baceb46de4fc4bbc01e302b9671f9c90f48eeb71ce02c3154849c0996a6bd53f02ea461bf1241f21827e3a66737feb556532de1f16a73a9071bc6c0d3c8cebddbecea1419ae744559b64653e23f7c78586d7c17e1e134f2878ca39ddec09b33e68dc547324ae51d4a725f1a4fb2fb7add3fe541356df8749c7e3b88feb7ac1bd7ba3de2540f1de3b50438e4f5b70123ad716f47363545970d99976a7cd58ade771a5bcdc525a3fd6013d9971d7718db8faa22112962a6c3a486be29a041bce58e5626f1cdb3ffd51348481d0f19c70a4d920788591ba06027edb8afb224ca97e415a734b6e1bad1984b8f5c13c69718add225920d89bdd65f758ee2faa53d5b4000e47fc6d95b5bb6c3b63e71a60e6d781285188cd4848d14c747acc0ed9c9b6cbee7bb47c06ada3458c3aa70e0b67175f92d031f237dee0e8bebf44b236fbe2ef8b8ce7fc16fb6dbb3c087599d178d6e3027390e9e315f146883a2e4703f2c4f565da2b701f356737cb4bf7404b727295f7ba4a16f2749f006169dd3fc924c977fe01d36ab7e24c45aa839093e20a9702d2f2b20bbe715680eaccf60eef388cd1c482946e5968795f6a3dd6072da7909424db5d2adfa2945284d1fd36fe747bbd49ead2dd7c5e7aff8ad93c1c96b01bc47dc2c006ae7ef4efb027573a6f8f22750e99034ab92addb07ce43736b5da753e4e577f21d36cd4d30d2b989bcadefda3831bca386853fdfcb0fd5bf7f38d594c06f7ef0ec702d086ec6d35dd88ea79c337f18c292270683ee7731ed2d82f24984822942ff1c76495ee5ac3723248234e9da8cd8f7ff6a91150f40459fc56638d726602f7fc210d6a8372a5fc5f6e96c034a002fdd96d4cfeadee80efa88982a62640b0094eb6377f3c4361ce58d420a29d75c0d6b72aa0715ec12926954f2e6cd4312fe651ed7f6e795b9b8ab6ff6d7028a88bbc91d55ff3e41a71712b0db36bfcc5d6e1be3d41a2db1997940266e9b376a6d81201f3e800ce68de61d24bbe0e006d49bddc2c2aa6d20c0a8cc3a111e6f7ff1a698fecc5127e2ae47b338fbadd9f960ccd444096f4eeb148c7631462753d2fd745844663c383df081fc75016552ade74828f0113179197f6f679577808b6a7a3189787607e7ff3dde1f6236d0f22b5258004e42b796b2e897c7ed0befbe504e265223637bdb317ca4448802b5627a8a4484e705cb4cbf364dbdc26a3d948a639bdccc9560bddb951c956dcede4aa27654de42c033434653d9719bfc32b7229fd84efb747e34036f8e379b001150acfdd033e8ddb8245226830c002895cc1fec24d139689ce9b3f442559a02171f9f09ffae5fc22297e89793b67959307e8a31c98d0cd98483f20b7f15f03ab85d83812a7431d93943128e50968ff4c9726a560da9ff2ffcabc99c8f9f2712bbb3604c99b0e588c5d1d7f304d5c9622953c742394e97d2cd093e90b81cc7f0eac83f54948804398de840aef59ab00b18c7aadf94a35e2abf445ccd43b4563e0b452780632415535a3153a86b0eca575d761a1468d1dba09905283c788e5e63e7d121b84dada03ef4541ac7b059a2afc20a1fc9fbff969a25f3acc59ed366c7461534e49b4b2e6123f89df40ba2bd790d28c1e69756188129b7ef51feaaf7d2f0b868ed96254626afc5e318c311a51e077a095482fee8be6ef8f9c6e13c98ecac63c5b9836470f45f65f41921d0e10778a8fef904 +MD = 4d0e3c9134e87fe8d944006be95deb92a7cd5d3091ae7ed986df37cfea7b96df8fd92d7427699ed5666d33a6d5998217d04ed0bd5f6cc6326206781a5d24bd14 + +Len = 54888 +Msg = 765bbd97773dac5000cac7ef8e200d8da737df13635ba94d2be0c440c1119bbe80690d37e60613d24f5aa3bc0324d4c0739e4219c0f8b4847d06fc99b6361f5a31c4b60df331944706f1a94a7a642690aa07e2a8c1ecfd417c67c385310bd3a810d480c0a9a677d7aef6a23efac74d25d3d988696c1dccadae6be1ac3877fecda50233f90d4d04a9ced357438c3790a6767cfa03cb7469f09d7b1db7d665eaf478b4965f290e83e6eeef8dff379c363c1c58011fe6d91b31d1fd404e10badd431253729b04d23bb597b20f1a03dc880e4cd56465c3352b98d15b1218f05f20e2fa488f54a67f753f4f84a43df8e0ce458e5bed7c6c6ee14e25fb5bbe7d3cfbfab8fab53318ff79aba1cd13101f9050086a52620de96e857b5547e3e7bf39b5b3d5d0acdf61388f2212f5253a7fd4558069228cbf401b5f46e9a5723cbf3f9834d8343b018914ffcc2c64a264209527d41233333b7b5fb7d86a7fcf658434eaa6498d2c41997a10d0768352350bb90c2deded1f29a221d459603cc3091602f430b142454698510b5778b8fc56472a4db383b9172fbb49fff0514416d07e8ffefb96bd4fb98e833888bb6c6a6edcce318d5bfde4f8d0be80c5c7ff9064c3c5502f8365114183f7df8cc6086226d38f02e4fe224e2ae86a9f0149d5f86aed8a31f3fda255878095488a21f2ad26335406dff2911d6e0c34a4cc602e188d05c8eb6f8edce1338c45bbab55941315040487a7c1b1196b4304d64d9272b6731266c4ccbd7b7eecb0ef7f17e9555b9b4f89cb63f2e90aca95c27ead6a099bc41c4c053212e7f45af37bddf5659c4f611bca1b3c0ea3b7320a56e4136d5b8f292c62f5c816890b265dd11d6d52d3b50f70afbe5a9c46e94caba950a825d05a494890deb750c78bf8f6da87a93761564d5620fee4243a68c07fa10a9419d1c3ce7bbe0626490a3b77c77c62ce9caefac1d60521032fe6fc358e2759fed1c4935dcad4b63e87bbe44cd7a0f80709226816f74670de44b46d53e124870ed61392a13fba362794404e1f2e2f8f7a07256af2c2cc339eeb0b82c37f7edaeeaf24883fe158ce08f8034197d50f704f1d1fc6fe3d7db26aac53042d701f9bc3e4613de2b896c609396a855cd32ae3afd47845e17242346b10f5bc38bded11b8fe317930cd5d6554e1dfe11730662fc2b398af43690403c89e576f8d6dd286f284fb03d12793f50e78c91f70f5ad9eaf42e7ccce29a965aadfe2e8d488b5409cfe29a46ece22bc628490050e29e6769f09ce6428ba1aa33959feeeb4177d88dcf42224afcbf003768f9b5c9ad4f900b991b33ef92440049c961448d52114a6daef4e4b3b25e711722054ebbbfecd842661ff23ea6f02d2fc1e8abfe0ae61e2c07715e0bbe4ee307fc0227c1ab04c4a0d011bdba2a447538077ca1b7dc74c84b312dfadd611eca6c5f56dd55ef25d9997fa6d2ecacbf9d1512b3a245372bdd3dd4a147835b3cbbc6b4a9ebf30cae8bbebd35fe40aeaff9296c244a10bb99c1866a61c0a7fd272ba99441b023842d6f6331458c4090b41df78c24f5c4ca4d19c76ae5f2b5d76c9e8796d4d661d610d939446c0977035a7ff1fb5c21bbf3a45a433eb46a277a8b88d304c9cb3882f76d938f0fe25e671193cb22207a70c83de7bc8e43739746f27f3e96971b020b5f912479a7c3614c67fdc5a9285c8da8785685b219bb6fdd4fe60ca4d32268efa7f84e8cca192a23cc1283e8ca445d14f23b2152bdbe2b9de251dfb7f49de7906ee79440fd50037dbc7688798cce89ae29ea21d895d8551958472a5871c9d8ae2303783ea804a7bac79e45c3e6577dd48e0809cc38b676c0104a6f0ee152e69952b06cce60a3618b6c0e3e607d7bb418acf94b962cc4fb32b8b03033b9a58bd27c9304789dc8db30182af4c7a8b7c6faf55259ded8707cd1a02cf07f615e22ea1f0fc1e5e5c16f796a98eb720e7820fbf597c6fec265564d6525323a8ed95660a8ab176eaf39b897c1bc94f7f5494c8c3c2e258e810021d6861d780d88a390a6a7e987ab709e214bbc2a73b213b7c42c17a9d8068add6a2d719a3450e5496c5cab4f94f4c07b53e5c8472a48e020026c468f50ef465989b2b61fe9bd2b3733c31141c203153daaf664b70b14c13e91cd174342a14a012af6d2032aaad0f991aa7864813ef571910e1feeb8be5d4fecbf286a0fe51c60a87a440859926d0d10534f2c6500d7a3c09d6852959e1af09dc2e8683af323f49cbd8a84091c65ee1a5e140df00132309414cc87344c60bd0f68e5c2368407397221140aab9132191a4b558d84b89bc4a614bae10741e4f1dc218f1c94f01cbbb3458f00d3a9782aba7b922fc58f8acc510db214a1070e5b6e8d62bbc8cffad7faab4a0af3bdae7f559f3879250e85b43f7050967414534630fd0f34648c282a92c2e38dae563b9395f6d6de15adf318bbed04cb02e24a4eedf0d32adabd0b30261cda0d460ba613d642fbe329f6796670c45d36d00959d1d0295ce3adcb3a652f299c1e5d36745ca0e3f60cd4707f29d896a86e6de2087ba1d70b13504f3c561869a815766f2cfa705a73dfa7948adf6de494d62f14eca8bdba7c1e64a1677f6c6d9c97043e4669ef26f3b015db02f3ab3ea112b60a6ce59e140e894d7a623db5a5d827a8fc571757d9d44291cc9e031af53b88754b1fcebda460c89d22b33d6e92e92bb751b5af54d3b3fbcde1b29a27b8e2cbff5f5ba0b6cbe170b642b0eb01b55e37c1b7088e60b501300ca2c7057bfa3531a6afc717f3fb2f063b5301c319ad95b04a94b63105ee5aa3e09871e16229817e2dc4e8a10fc297fd9ecc1c5200bc2e49d4835533aef01ebbdc2b19ca84c775f5d72716b864b2cacb4326771461919658d20b5c02e66acbec71e3351d5e64812d555ef7ea9d3c25f3eaea8886c6ae5c51d585312b26aee0ba24596a46498111a90ac502a413df380bd890f7258a62eee951897b18fa3d0ba975e62ff1f09dc5ed7a01ad61530c7f77aea2197d376fcc73d8a0a068dba59b4ee921dc9cce2b0c6f159d7ecee5547acbdfa6860a48258385cd33377735792dfef08516934ca963a28fe0ed394547a88cee06b33957149293c1e9a6d0b218124e2e985491f6a94a2c2b848f3cfd46971f4c5b2796cebd8822391c8511bc1306c0e5c42d0556ab5e608ae0cb4677d1a5078d1c69bf29a0c2b5a5444896cdea79dbc8a0f669d71feef4209e27e23f9970ea22b2effef23ed0d2990967fc621eda0349a7473c02779a3b8f052b9ccede891bafc720f2b31830ed76d4799f032095ebeb5f95f87352debb18ce5cd2a0413c3086b1b326d6ad717ae12de41b4b806bea2032793b74322b07704222205e4228bd4a1b0cf7e76f011f4a8e3ded85ce9a727ab85751bf861d85081922025351cd065c6b95027fed6e2f256dfd725c5bc0396d69c6e7afdf14c852bbb3052a00a7c0401be1c2eaa9274f0455996639b87b937abf2e79bf9daf55d2927b853ccf376f97a489b5b212bad369cd9825a8850b152531146479525ba22a45e22f163dfa68c5ade35780ca9770b84e703d13221d32ff581f44679d9821ac3e6d4f40ad7f405c909524b1215b9b9250c819241010716bac85a604cfe378faf4938246be148abee505a9edc765b86a6cf64635ef9354eca70df5db79dc0c78f0fb4482e088ac7f23bb53711d444bb30b9150d310f45204c01ea0461bc050b8cbeb22afb51a2a1fc52cbde5a375e9fea51fa58614d1fd46801e51ef366eea2cee0999078c67881351e055d5fa8907cfd1f7c0b97bbabb248fa377314a063d67cfcd143506ef5afc526c97bc72ec29890ab03f07a60d201117348cb6d744cedbf9bc20b2951ff72d3f280ff3bd2dc3dcc7ef8cdb3447a0beef580eea5e99130be44d4afac787f14870b93b2629bc7b1d91fc16be96f8c16050747a465071ae7a27f6ff980ea5edb0af8685ce591693cde16c892c5eaf16b7e3105b455d7cf5a92d4fbaf4daf8210844169c56bbcab2803ec7409eebc8f5282fb22e71c6099d0b7cce09abdd0d5fa1c6ffdb49d2575bb72282c9a0ded501239ee060563ab5e9338ee868276543ee3fb098bf223d3b03f50525a0bca861bf5ca9119d6d1be08e93ec3552f2043a41149977d48a4ce42fac8f26525cc8dd7415d6cc4210fa37d1bf1d2b66864a6f1cd2da23a7bc81f1535ff91b5b0bc0d6e3f1c086db0c462a77078a30ff6ea840c5fcfb12a5638cd103720b6b274410bc7372dec7e4999016c32fcbec9a259e5dd0f584cb5a09ce01a4a51eac4390491ca71b8a05db5368ab6a7a4ac4d3259d14c25f0fb43209b611db4bab453c6ada65f34e6ad74bc42046c1999f4026e945141e8be473c9fde5700be859cc7e4e3536ecade9a2925667876ce021e4f20af6ca4a1ebb708e50dcaabb0d72a885b4e9fdf79c9efe6ba49edbc0f08b29e0e552b5d999ed40fbacfc205d2dbe7fef397929a8acf351241946b2523d33956012c9454150024bae6cc48f86bb65a91736634884517f31483eefb9b548a3bdec1dcb2726039316f30ad636cc5930caaa5628e8ff1cab1564800a306e8563ea0160e8a9dc1708397621a1c47269883af4f34a798d70ff83f57716d4c285ecc03c86a26be7fcea09b42ba7a72d7ed490a3a84878c400f4e377aea61565ccb6c6f9e978dbee37a12e1993685d520bbe6212ef9375172f23ea67713860cccc4a74c623ec783359c61d32e354558482ae05ef33bbed1b6df4df41793e456bf720303da06ddf7bd5e13d8cb60c3e49961c12850f324f253fe058a2213831d7ffc0afacf98d601c2e6b257365f065f598910e60ec9729e9378edce603a6c47528b449a089bba888e5cc6ba38d916b3d1c95602f564afbcbc758d2999b1a6be8147384b4fb8917667e9d5689977fcc6494a1ae3cd6de334171c6e04941f396853576e766a9764b296b569c921e0bf820933e4f15e8b16eeec9617c51a2d2e2f12e46e8122df3a2462e7094598bc67cd58ad3d94706751d1830b10d6f3838cfa0415c1d63f381cb415a73e44c5b5fd9180e0ab34caa89bc723a2e29de7c85bb07313eedb894c114af61f8e2e717187b5c7f3b83935f7fdb815831484bea4a33ba5057dfac8c021ce4c74846b64981021760fec0b79fc7e8aa2d72ef13fc16d82e314f69ac33f542860d1a56366d39dbdd45bce125e5e262610c6b94e33c4c06d7468e222436fb3407a5c7b7f3fca38712b00e6b7acc6fd74a7773c026258a5e4a228c9fc10f845fee13d8d25b624e825c125bc602adb0c5cb1133f75942323cfb37d318ff283134bdf9d63be9589b6c1e0f3d977a1465ac774c14a0f91cd4216f08ea443b1b8230dbaa486b3a2a3a82dce92c462d9aeef9b39aae63820ff0aa2a184a980143e7f2ebb797d6aa617c951d329058b9abcd4c248f59a580b6184590e86c9aee4be2f942a45d04d68901e1539e02558ac181022e9cbefd7189ab7247ebd8a35e9df39294f2f08c3b2b4b16246e0ab33d669aba564546c1d1053acec3b50777eeb4aa7d37160ac334a2b891e44511f83e157ae3200b79992ba3369978b6815efb2a6817cdaff4407f99eae33795b0aaf968c20b0071dfe9fe0e3f80eb72deef1059ccd0bd03558a687b529872e24f221baad0909bfad24aa480a613a06c689edaed495689c2a7178bc170104aad76240186572247190921dbb51aa02c25c6e4973f5e07b860516e5606d3e91379adf74775962e964edd05e0160dd4d3116266f1da8b72cd5efd0553a5ee9151b95f3259e34e140e2ed67d7e2de01059d1d38c574942163d30f26301393087a9ff225bb569cf71131b8deee26731f114c982cb53f622608c68ea0deb3b3a6a70bd6fd9e6739ad449a75bd0d94c83e5987b08ba548b9ce03f793c6c7e267c884a76b043799b50ac1654d8d9bf68566c5958ddbff5542223cae472154685778f9bad9c1ecb4b51670da67d40012529f3dc056a72a2fa4299b33d138eb0c2abdee8e48bd267fe4da3a41ec1da3b0d5f2a94e34748e9e88eb09cd5a93f69789a04b69df7e4ec3e75d05e103edee9ab966f1884ecc936996716cc50abbdbd21b27f894c68eca4869a8bb03d5ce4897a404fdb6cd36a15a75c2ae6308370482895cdd57267504d610c142ef8947196e3fd3b520d83b2037cee6b5ef7d8fd7727a47e3f927b9623584b284ed48e1cae831db020d986178c948e66bb1904cbe6997eff0c4f0e44e2c6e8367453a22c1cd2224cac7343311d88cc9b6f16af5202e885cedfeaa7e2f85763ad53e869467e5bcb7f794d536542c419780f63212648af496c3f07c0d6d0643e1b52155bf24f7a49b6fbda3f4a78c1059b009112cf44583a658e28f1b70787e7fee36ce2a61cd85d81c89c5f473c1a1162e722fca3727de93961c0a2f9fa2ce1d6ac51a5d842d0577e44264be21949bd6e279b37495f8ad6564e516d2644edcc2101660e0f7e0cc7fb12ea7db17caa7a1b466c6b2767f9724a987db8a26425076c871c93c20ae83f86a97b7d2bf2e6c808c808f0d428545d94f4880e24e47d1417a1d7df8695ed2eaf7c3bb2b8087937a5210370c61d25f8c3d712e5f4225072c0e63a39c39ba605e40fbdc6fc19cc398ee5ee5383c2e8c435b490c8b6ba49b3e6d8b63b0f788d65b2c864225ec36a5e148b2c21739617408911a43ed318c35807ddde6bd0d91dbeaa5ae14d5681de05d4854f633c132c0e2c72afa0dfda47cf827a0544be29d181293b97b079d191d14d78ba8143d6a18dae5c35a7435b519b0541ed5e0de7435dbdcf09e44f3f2040fdba1004013d123f6d32b8ba94387b3b0ea9d8f0669ddd94d699ba613d26f3c553ddc2741ad2f8a4079aab4348de2f3fed366ad44eba1ac712202bafda25a6eeee685459f714cf4c0c08afd9e7d8e81a4f5c15522cc88584eef6c0389cb7941e3bde381e0c9f00a7d8e118f6e795204aa3af5b029745a82ecb923a83fb5955e3ba940048e1ce2747fcd89922cebf82516884ce5e04cdfd454666dd2a7c8756cfe94e2f630d1ebd9ce63382d613a468bf2c90c1cd0badff68de093a94a6de3143465127e4f52d3e2733a678994ce05de46e47e7f7f2721909f0ddc54af0aa5fee60418c47206623675385dce4d0ffcc818c1ea3377fc6e4993d792fc5e0984d11c583cf121555f7edc4764231465f5ef72489863409f8ec97025fbc8e0d04836dc4bc62de5a79461b04ec2b07238b6fb5b61cf35607a49b93ede61e1bcc9b9d430c4fd9f4464c788fa34c09eeef00995dcf4d9d161f367c106ec0a6e7a5a9e541fac2b70c8f4c19ac2e3a61511f5b465fbe9fc60cb74af88cf363f98a3edc15db1e996c7f9c04a400e42bc3c61af7f12c228810a2464eab7a1a44787bee9e898ef6486cd5e2e2a22e839493c688734453999b0f6f62be0f5841e6c6253b6dcace00545aa7fa728e757b0973daee399a56725d04dc83159eb818cf452eabc65428db51a85e4940d37648fec66ba2c78db54b22b3623dd1d419fd6287e0c624a02fc5a4c86165ba1bc15be91df14cb978e082907da8e99f39ee7e5500f4012559337dd24d79c66ac1b7426ced14426be678c73ad6191cda5aa5f9fb42c0f344c9e4627ea9dfe1bf6ff89adea64d2a7b70de77665f2b4dff90e11ed9bfe002ef8ca2f1fe603c5e4460e5b3c2fbf47b5492a211c76b58038b87205b84fac9b6921c0fcac5f2e782866f0f2bce30b2bb73b63434c2ad37c40aa7d42e6165f684d8f28b5b89f499f4e1c4e56134f6f0417566253eec774315f96d8d060393ff04309a9602aec7ac2c031d0902bbb145c3c62cf5ce996bf25fe452bb70fff73bab159eb07ea8fe96ae56d1da6ea6f21ba8e27516327dfdde283801dffdab2244e004597b1dfd0c01e2597dea33ab2bfa7756c91728feaf6f0580d56b1a898793599965567f3f62467e879ba8c02ce16aa59fb379009fe31d5e3b47fd563fb9bf6e213cc300d4b3fcc96d95a6b2a094d4ba29aeac67d64b61b8e3f4071f221b1194586a514151539d59780654799ac8d12b812521bd365ae49c074408f3d53e42729b5871bf49d3a0a5436842939fefd88042a1897f34741e8e01d28362cd85ca7f66a1b4e902b69f433c25f18f149c634ecace442c652967f58009f6fa7fa4021136b09b4d206ee1a9dee9d1ca9d30f9ed95e5d2532d0d6968fe64e4196ffb81dea80f855a278f204fb80e73d49e6014f340a2c47200728b6ed96dcb4e130ee24e273903ae9c79d3bb341e484bac8c4ce6376f9b07940b565dadaf2d070d507bd630b7a6a8d3c16462ff93df8e2c17fa3d06b6b6923c3a42ebe78389e2b362e71d50f5eed781f86add57099a2aa1b5a57e1b02a7908d81e9601395525fb9a89c7a148e3cc90b814f90f6da188fa1c7e71000fdfe80fc74b270be5f26dc64b40472d7eb20ebf4ee9b144bafdb4bb0e1379944e32bf1fd752684544b67f768f7c79e27873bbec2b2c5ddb1d542ed33740f80536ca0522525ce1151d4a62f1af65e62800cddcff9506863e5f4efc2ce02e75ba8f50c2ff7e901be43a551e21f2221568dc6878dfd59fb3d4489428ad5005781d216bfe9ea4179d1b6180bceca2dc8e08d5ed9776331e6c059fceba3dd1ec8995b3c4c2e70b18ef205b73433c05bada72b30441abf6ab39392ea4b8c6a90b318a0f0215c2fdbc9a5df0d5bbf865e5800c3e547f666870a3d8bbbc2c2f218bf764fbce0017c02b2538e74f2d08088408403e86588fcf92314a0fc11d608194648c40d08ace9d8c181b0a88a05437c0fb757a41d50f743c6cf8f2599440114dff68a6afbbcfdc07fc6d1f291cc339c1e012bb2efdcc9f94da482b2c98b919df5061f4149b02c5c65896efd9a93f58ae3f81c9f5d8af98c205a384e331b2e072dfe0f4a6334fa0eeb4fe424150b0daafa1296c3d6ea0a6ef7572c3266714af2c354b6c0e8a9fb4aa980de00818fc08ee8c726caec8881243b01bb19c43c5ce38d90b25f3a8d84a208d2b90d70a0c2a908bc490f1ed4d25e5400816eeccae85bc5389e7fe96e4aa781ac01b562cc888c02387a1aee5d924fead9fbac40bb71ce12c2c79d75ba91cdbc8344a2c881869a4de23688cb9125ab57d4a64c406c9daceeb5ba525ff11e8711eefe30226e517644301aa3470e20e333a70de99c7ca08ac188031908b035561a459ae7f0c15d829da87324e1230879f6b78eee956a4eea23b02e6c20666acd4e2da754c4492f51b2c1ec781a8e30e2299cc5d5db93dd4d9dd498c60782436f161dbfe10d642b661c02e307538e5ebe44bd3f29cfa7f027885bdeb15ea2438e1a8c21274c80f62241e2036d3cd1d660c09f5774f2150bfa8bcc6ca86624efdcb3ff9792024e0438bcf5aa1436c73c7c35c9ab21d349a559109ccf35eeb8accd8afe6fbbbf29c9fbf5a46396c1fcf5530ca2a6daf3d440a5af4372c438ac0ec2f7ff360ed382dbfe7474bc5f7ed19597cdd0d6eac4336272c056f3ede49d8a6fa37876f60007aeb2c1fd00f8bdf391bce1dac7ebd4f58f32ec5dcf1d62fba425e6009f1b9516b6ab6693fddd1fb18e34f116d648a6892b889bbe60cd3444f088581e3afa334e886acadfff8714b9cf92641b9eaba96ccbc6470f6597f917d3f97227c6ec4afd9853674782812d7aea47d35f9d6f5e1ee49e86a729e7f1d2d31bbcb3cf9c4cd +MD = f0eeffbe2f70c9b7dec83bc21a29d1e44800b73ddc032a482df095f01d433afaf6b892064aea31db5901b3721ca79f38ae3a71036b6d278546f74e4db3ef9dd1 + +Len = 55472 +Msg = 49ed6bdc39c62135ff4282dbf6e3538bb962bae82da45c12c2e9c27bf54701f61a579a11582e9fa5f58e17abd35ea4513b58634eda02147209df7b8152e605412f33afd214fd243eb0c8255171db2eab46f55713a83c780edb7690b0717b68b311ea73c6761cf927ba567474d5433bbf61a15de0a03ad00fbf16cbb25cef707347e5ae96857366899ba2ccbd097c11b514c43f5dc8e4649c3e27f22c1b2866aa598b28e94aeab28cd912f5d41470f8b6e7c6c3312a227bdedf11cec9b410927fd043a868cb6a2757fe10b660fe053aea630fb204cedd5efd2a3c272e318e3b1b3277f8bb12d90b139203d90acf251e780f07d380bafb5620a711c5069989aaa50a8ede892721a7e71b53247990b7eb887317f04bf866a96fdff66ff7f5eb2846ddf0237a102843fc2367605549a3ea4418a5cf0d90049f135954efa94c9bfb2635048f37d7d8277a31a9554800d163d2851b396f88bf82349d940bc6a6816b6c9934e96884179a88ce80caf8bf299d5a42dff618ea7e98f9341c8cf30c85c24192e8fbb51dcfe54e8054880d8d92e205d85bceb2be292b8ba55639da848f46cca7868bc4ace751f5d28e583073f778facef589e20aa7811278a8dc231987413660776240384724a549940009773da862ac17ee52d8e2e2b5367c3b76d055f9a6452348cfcad7a6856fcf483fa44dba65fb28c7aa2fc1989c66392079b3e1b745dff20419697f21becba7fa7bff0ff62a4290da91182ceaf0904751d7c913c23ab54d60c71d27db77e585dc64926ba4da09b6f0b0990b1fd93c0e96361ad464ae4f9a2281eeb71dd946cfb8a3644a0b9cd904d0afbd46807ef3f6b93faf0ae3c9364213eee5172f0c75ef54df7d92749938e1443589c655083c6780998f9f88b2f1aefbb7092f5937fa4b78c1e62d27f9b1b512ea0771e69ea0c9b5ecc2799b920845a28463e7e3835e4deef0a6016ce3c9e903783e307a69a6841ee251826490046ecffcf9281417285b7d15c5f88b7f0ae3df8436ec5a91d600842143a02ad56c934cc7d5d8361ce0dfecd84cf9cbf6fb0c6eb9f88bcf3db8a5ae51a0bd3789c81bdf8effe18fb90f4004e042eb767024cc77bc8bf71f95d5dc661b71c0d1d2a16e51f97d2968173ce68dd6afb8d2140e8cc438f71692c2b40b7227bd9141db7df469af599a085def394f619b47280b40b21bd345d272ecdd9c9b1c8c18cfcae715f1599b1bb9b4b0a1112a0f80bf7d42a845357c11053ad9f5a9a2e63dc2c86439af9e4993c14408869dd9124be1919dd40a07a4bd95d52f806463d4e864fc7ec86d276dec69347e50b915ad90d46fd8a031f1c6bd68e567a394045d01fb8fbc2af19b0e0df9ad9b672e86e737e1407b73849ae8f9c6910ac800308a70d0a8a6c703a335deb9d6e533c3d5c828502c0fb4c9ab1559f9019f56718d621d2b70c5076de7e947f0d8e61d42aa584c695a1bcdc9cb52c5485eaeb5afc3edf0530fa053f60e3230e8da268b71aca08974f327254ca3a925fad0bf4c827b33d292acc01165c11881e7052ce61a84a7c8b81ebb241adb2161587e5b85b25d3da92e6fabab83a7a4223680809703da75f27e046032fa1ac261aa9109c70610125f7081eb871869ddfb1d74aa04f55513ed0ecc9db7b508950e3830527b473dbadaa00a080fecaeccf5e3093297b79d88a3b09ffb1b134ea14e4984bd073d8b3e04063188a9c61f77f6d266a1b7135bdcfaaca501c6dc94ef0a26b5d2d4b0a3a5c3ea1ff5bf6f63e8e730b47fcbcf3718dc49053721d881852b18ea194a682cf70193fcd6b8b02327b1461a523db4d84330d0e82592cfbe6d97654b1bd12ccf3ca54aefb4fc4f073a3a5cc1a4748ae765de8975548288f3af3855015fd2c6347d97572016f314b62b6cbad1fcd8190b87cdbcd54b5accc751f432346db3fc02c2bf02b88405c9d9022ea771e3d128edafe7b12f928063e25db5420bcede97e1110593df869a3417c5676dc9e0c78134e813b0acb25e15edda62cfaf09b95f7b745151bca51a1f197e0152027b22ea8937390074325aaa90d1e31f48a6ae1b75f28b857868ed508734e39f443c4a2c94a642eaae9adee97249207afd2e24957a939b773a587b8f08f0f59bb6aca80ffc3c14b68373519b3c4a002af62883933060696f2bfb2ca644b91f908152a25a6a0198ac1a431b8895dd6e765c1c32de3f60ddb573dc695be49749c4ccb6a1d785feb6139c95a47826084fa557929b3e509ce0903980987890925b80c0610e4cf63a573530ee533397d58c000e13257a0b1a584aa57123c3efb33d0c85da4f8264bd6158ffd892808f4c0dcfaa26385c17e42f29e1367005aa01d8b042a9ce417890bec530dac929b674ba5a52543caa1d024b761257e905688412b42057f150daba54c4ec7d5ef4b5557be82f24992dc47a9678635cf48dd245d45f466b227931430d9c5b47baaa34f739c2691eb8adb556f679facefb63904b07fbdc6dc8822534cf97a4c24513da63da3127cafff2979e55bfff356550499f91ce0ce64a34609484fbf07667f650a0487b91b1d7c313589a939b179a1ca5475c21fc5d1257876b131166ea891c3eb669e8d05aa9e9d18ead3df5fe028f4e4d4e3bd45a87b345c264212fa6114e4aae27c20c4ddb2d7847760537710571e9b85166bd65110f3fa05f73723269521f8f694f6c13d755b08cdc3386f90b8921914ce8df071835200dec4e5817f7f0636116d9193303292364ca0e0d1d7ca09bdf260a61c704eb8e11f3fc09dc25f2bf2c18a63b35c97377d725dff165c07e02aac9146b2e3efa31b55cc3ac095a1edaf956fef9a290f954edd6ee5d593febfcfb1c4e27c32c2ab3000fec6926fd3e5dcfb82b7b01bf8463afc583778261af31d907ffbb0e3742b9fbf4be69bc7818efb72674eadac0dc4b24dae667678f914b4c72714f97c70ceeacf483d452327539b888206eb6fac9b554fe5e56902f5bef5c45ea0ce7454ef71df581d271931ce2dac6782e1bd513494817356c86abd3c71268b3198517d17f56e00289a003d79325c9c45394b981ae070eb1d0d069c27b75c4149ff9a75d2c5d9e4c2467ea6cf4a2774c04a60edd8d99cc1babf6d3efb38d3f54c6cc5cbaa63c16a7c94eb0a4ac58b9576adb3ced8d0738bb24814f241663c2bdb5859daf96fb2f5da1debd476450782eacbaab7a575839d864f847274cfe369595acd405a4a0d3b5d39e7a1dc3909a1af4cbc44b9294b9bb92e322c1fe6781258dc968847735e9f687174ded722208616797ed2ae7c49fadd7cb48bad4a48db5c665c1f4b8c15869e7cf9f81180dab4b2fa58fddfeefd3f45b3621da75bf408d6807471d0e4d0a561850d99f5e5a6a22747d132d7e1d3cd845af15e98abf84f49a3862c722e0e60545226110ec102c2c5da8dfe21056c4a3bdbb8caebaad4034847f7ab99c82d4bd94cba19c6937dbb313ad5dc45ba3529bede4eef2ae905c934f64f7bc233bbcc72dd5ff0a7ed85efdbe14f49a080bcf0afbb1a37d0d70bf5a236f41985f14866b39c8e524d2fa9d5284660b2ebe9721360faa1317805653d02729c015f9141bf1e02abab00ea580fc902a0c46264e31685258a688af48ff3f8419dcfa994461a14985e677d9e1ef4208e85eabe738e7e7eb42c5974151abed61c8fe11e6aa41c39d60d141dcb7d26b15296925aa5d2bfd03f1d60edf763f23e7bc8c208950a39e0344e3d6be2e11c0de73957c17c6e6f0c2eb43b330c1a4293e7ff0f0293e707ba4b884fd284f94898c514a77d57afe094fba724fdd39c0478d9990496f7b8ea2a8441c80c221430e4648f0df8d815d90d3e5cda98de67cc5fc90d6f3030fe75b3670132533ac079635e2ef7ce6e4e9cd75f5ba8be9d1c1eab5ee29b58c0262ee76c5d1b524f8c66a80a6af1689aa8c075e71a3bb98017500dd3af058b35ce6a291cabef73c0e6ad3511c99751ddb2d88b5e1ef02437e814d9ffd95a51f265dc1af0842b524f5d917cdcd13604b80b496a3ce06289251ce1a21be7f617868ae91f705c6b583b5fd7e1e4086a1bb9f087a50bf50f52c8143ae8b0516576828c15b924bb0c00257bc526cfd5bfe1443137ce33c3531ba16c753065bc24e95707e66a8626a9e49e100d9de8df840ff71bce385cd1da3e319444fba46eb0da747cdfc60d05a17ff5eb05d9d77c72f2333ebf95dfb70145091a1ebce50f95d47b69663e21feaf3ccd3b424d0432e9229908804944d964ca986c66f6a0154061dc3c1e457d681f95a4af476a07a9732b8917c4d514cf71395019b23b8e064d0d07936c7e77e86f24eca579d35a369d8793cad1cbd7efb31bc08074edd75928309dddd54b99e63a7535cc7e0b6460c4a139b04b9006d0b6dc7a6f53a044844e66ff99ed3f6be7fdd0f072c864cece8512fb6696b41a18d905ee04a2d53e2e3c2abd4628bc567425f2ad36cd81e1c65b47593c57ba8a1eb6228c0ef70f2cad8df64760fc54f1f14f44dc8701e555eeb3d8c3cfe315ef58babce4dcc4b0a888a0543e88fc9bb715d6320ef20a0183ae2b21db9fed58b25d733f78fc905c3a560fcef31c8df32e285754a4f64a59039b2dccf10abaf56b935c24c8fcfe844a8c48b1159a44fdcfcf4f274f02577e4e2c3834b4bef07e83a0f1f7554c43ab6191d7c51690a60e04613a245db495c3dbd7d6f3972b1246930cc1319e692444081d2955668e15b6748484c6617ba9dc35349673f8bd94f0021d466e04e1f4e0b664d9fc95e1388988bfcba7eac5e819d2b8d3408a04ed0d5978fe0749355a03f53f5615153872f9c9698b236a31f52f4ceb29e3ab8faef111965487abd1a8103cd32a5975025989af182fd3603e456efc2216d7edcc4f4dc30be689dd5583b7f5e6c31435cd50bbb25246325d494d7b79141697b1394265d62020683e2f614dc8d0bcefc807fcf27b9e5abab1f191b73c2795ada6552cebd3a99ebd4ecdc5542e277446ac30b2d05352c9f71eb5a6b4cde330742dae634233debdf39fcf245d8e6195b362d616d7d2263051f403f0e6a6cd6395c7b39a0b8f560aa5918202ec72057db08c66ad7b907f1a65d26b04ef4f4cab8d04f315aa4e96113de4b4e5636199a8b87970cb2de6c3e4ad1a6957113ff764c455eb7a90ea154e36d9a64064e574b345ca7304817d9b2b826c7d6c0ee1444bd63b1b4d71ea6a3e2b10f4a863764d09e2ffebfdf8ad7b5ba02925c83aebb9bd2d34f0e2afe7fb4d84fb1e81e18c89391a7a59fc05fedaf160e0d0d027a7ce3543d40afebd3b4f18df28826161909fad56ca3ba33bfa40895f142d2847be0850c488d7d61c8cec1c9409dedb564b16f312700f67fd28328ff53399453d86ee7bf9d3d62d602548b53e1f723451e48596f80c53deebf12771cdef939b5baaf7238e4584590acceb9f47e9eb20c725420551ef976c6afd95eb4388aaaf349298e3ec4e70dd8ecc4b274bf9b8053865f2bacaaa48950c961438e09f4d054ac66a498e5f1a4f6eabfde9b4bf5776182f0e43bcbce5dd436318f73fa3f92220cee1a0ff07ef132d047a530cbb47e808f90b2cc2a80dc9a1dd1ab2bb274d7a390475a6b8d97dcd4c3e26ffde6e17cf6d5c5fd256ec2ede9a7cafd7eda9b892161fbca7463424d23ed1aa4c845835b0c7b1a2e0f409a780bfba3ef341aba8fe2a692d4f11b892c687676ac5a8fa2020aa914ab524812664643e4e81419dbd12f8892dfac5c7461ec867eef7b6d465938893dddb62d319de3a41650e78005374f2f85526bcf0ad5f443bbd6f2877848dd401c2c0398ff062948c08e75f641a98cc2f297f71c536ecbd8b4c789843fb743f939010030858962576a0c8624960f2c6a621518ea5715b86bf12b060da48eb0da1dc2769eca0fd4f89c31e2b20c51784e5c3495e11fb30225fb6b32c9aeb56d0b4fd92e89d67ec954df655047ab57b897685c38aab22ef22d59edd5616514c2b557aced9ab2c08793ba109a8b7c09346c0ef5c7ed1870d0ac931bb77cd194f600bea57e7965bb56dcb69a8628865033f6d7670b515a5fe4c9325c9fc3fb1b53130b2aa8cdf7598057596cddc3d112ff5c4a1bcc7f7fe575adbd1757ddea921f17c6a5323e71804c2e2eec66076639dec7f077d21f8fe9cc7fbcb6a574a6e2a333787de576da1a0186ba83eb994cab195f4fe4e4d893523268b8a0522d38f12790a81a891a3a0ee88a879932248b52f74bf1cbcc52910aed90383d26b2a7a9f355dee4e6d59a44495f1c97054e2c14c2b45e92503694f8451ec4f5e8abfbf14eaba243c34c01a46c3001e32abf36dbc0c11ca3392ca104843ae43062bf3db082ba7d9fe92a77169823bfe76920b18e3b9bb5644edbc216f00e21565a9774d0d5a9f660211504821660dd0a8c19a6157969b13f59ecfe16d3bf02cf99dba83890a196ee31b5b1d02f10e3b359511c58c354969b20065eec73781003e732e1d0fac9e3b1e1b485e8285b594c9a711b3e6084eedf6dd2e881195fd15b0b4428805d4a6712fbb789b24c68c83c1520abb19a20407506f8a6bb0c9ccf3dcfba8430ff4baa774569c317e260b8eb9307d599b75115c4b31fa08396589212f93cfec82af53349896f3dfd316aafc1dbcea0dc003ef4343eefddc2fdbba04352719d3024708af18d74ff4e82af3726b71c1563bd10652d6d12655e8aec8336a202695135e337d51a1e0ff01d57d782ed993a1636eef0170a2d40418514c355b1966a11a776c25ff71577cd4a89183d46ee19ddb2011e5adbeb7751365ae60746d6a959c053b4f6ee023fcb516d80bf8ac3baa17b70765ea9f11078e4e776b32b6a2d12ca9f9501c58d6dd4792c997081bf2348d764818c3bea169cd9e2fbc326f9fe220b85ebea455d0bcf0ceeebb9f28b5ebc0f05c54a5b7c8ea75b74fb9e002b2573cc2b4018361b20a350dafc00a7cf73e36a7acc01cf4f8280b3c500ac81aaa9eb54b91bf3606eb53a8e1957ae663268a732ec1e1a600cf90f29fc9155701b9274ed5805e38affd17b0dd2812cf85c47efad8241fbd65bfc3c044237019629e9f5dd3085507e767c4e172e03e125f618a22565bf0ef9e392ef8ebe7818bc7ab5556d6823a2027abe9bf2556634b4a8e1aae0bc20ba914dc3100d99df02a8b6fe7ee5286741dfb3a04ae76e328f6f19acee27b0ea6665409787cafaf1272386cc578d9ada96ddca29443ea2ed591cf280564169a77c3e65173c0d0a38f0f49228c8ace30307c367626f3f1821f984da66ca780ede63e4644a181ef03bc3e58119b98c2e6afd5b3151b432f955d96f7a643212c818831fe4390144d58209bcfba81273a198e16bd100fc5e6c1260a57a857658bedc44b78deae0c8e1962b42aadcbbaa641419bcee772d0c9adff6ed81ce7f9219b20e7309679ef23bfe8f3f33bd9d79a0660f1631bd3084aa440310374933080022491cfdb8210a0c429f7b41539e277d17294042d9ee0ec5c9efd745fd7b019cb55d7a14e353587bebc2bd7aa7a7fe22aed104c8d64ef213f7230753f240c714f2b255f4f21b24b1805fce86c0a144b8b36e286cb93777bb55056b083168a09162b07545ec60b5d689e0770ea6724266af6775d58c93e6e66cfeca0dc1dcd53b8bc0a2b0da0c54118eac7eba620440552926b3ab574987bbc277eb09aa85ad39f748a3dcc306498a182bab31fb3d86aca912aa982041a263e1d697a5f54a72b42eb24173af36dc6aaec5c81c79075b94b7932142f1637f0551849689a9126ad3b664441aa78455d9d9e29b22e5490935dc11e251d19766ca98eab05ccec7dfbf19c8747bb1d8fbfe20eaeeec46ebd6b69ff4b36ec9c59eda406fadc76d50179fdf44983ed81a17020b458721a4d40b4089a55d41dfd5705cd17a54718c955b9c8e427a0b2132f10c225b2e6a07eeeffa218aa8711daf2478d1756e03367ef2deb029e0889608d145ee95ad6f7820cc0def0c5ba78b3b0258cac7c32470f3268ccc6193603e85ffd5f659cbd7fe52e8a07b93408a3062512143d81b7d44dc3dcf6b525b39218fc2e3c2104f4ba26c8ddc4e881dc3140a5bfec5103eb5b92180ce1464ffbc480f6497db2302726b5701e9ef51bbf93f1c6615d7d7f475d7aa37b24fff4990baee2b1ac8f8acf561f98ceee658e2d5ba81bb8e01950465a75faaa2a48bff5d7f12609411f9157b8c3b7813bc0459fe8c1fa292cbb2372c302920c79c70eacda0654a2c3f8d04adf5050b82f8bcea1dbde06249be9655737beee348be16d28624ce330bd91b4233a3408f6022ea5bda56ab45da61a926e18e98394e93e57f3013346159670d98b49ed24ad8c2f575dc5d67916d3c54711f730d6b01a246b87476811d3d72cacbd8efa5850f614500ccddfe8f2cd8fd00d43237c088739f46fa549cafdf81baa6489da087308642c451db57873dbc0e99a9d1fc820c8e59f269b56d5f681c45f0acb0aa9a61ba548914615ac1c870ed05465a46f7b47cdd8269a1dc7500cbd370ab31ad04ca84e316bd76ef84f67d040c52d4fc69a9c492bea421d138ce17ccefee27900e956c5734f323fe1aee6ab9757648061e12eedf70bf3c34f1fb8798351d9a3b00e7fa18ab5e6f6fc9d9bf760a59bd4c5f18822e5e65fbede9aea49f0adf929522ebb78e43a7622adadf05a291a43bb573e309e6513c64e46510f44a36dc1888bbc62a21c37604189527c3a4d3fecb2ba49a0b6e11ec8202b04901ff80bd33fc15a3dc3af5725e1f41da81e69810739638660e30661e5a2d11805327b22aecd776a8533f9f447728271fc8cfa7813ddc786e9c93187af64ecfde702b92ca4a0227fd199a8a94571c901f1ec7cafa31e6acdb3cffeea75d4e338ae271e946556570cbb6b17e0907e1c2020e36c723569c1cd477dcb24e971385ac31637e4515e8983ab0ee434b8e6106ef1d8467a3b4e60f82d3932a16ad870d6ee3681b709374e97191b8a003f482a30ed51a722353adcf0cda8a1fa8a69112f682e7866fd6efa999e0765ed9422ee388bd5eb04a3cd7a29b142a58ab8a18de6c964a88e9e64321d9269245747f4c0c855db9e9c1764ed15708db9fc86106b7f9a5f8e987cc56995aea731d7db3c4672c3e94e42f09f8a3673e06baa73442e6c5395971f08f125943b481ae9be67e3ca6e7556a3dfebf62f43e1172ef0ab4b2f7d9d5e8cc375da8bd0d24c0772161d31be06643935c8a542591668f48ec4465b70ed415c5cd21d0f07bc41ab86b5773b2b22d37d82b40c323be6bd95ce1da462f5ebec1815745170388c98507cd486593e4140eb473cbf5154d8a18d0f15e9c8454fbb4a8e0b1c61fbc9bc90c4e1af2e7fe818fd13d123324c62a134f24b8b0e175f3b6e36d4d246b9ea2ae6ef6b660d689de83d490fdc478b2b2937f83d0ca6c4b0f8fda08017b10b647fcd6cd04f7870c92b2687574f238998c6008158e314d5db50634b8b511358cf07aebdcec01230f05e433f35f038d011f4293e3db2fad334ee59986513003a907f1562a57c4d11a9fe1dd12a6409e74d301c8f39d0ab45643f2b378bd1ea294f229bebf2b89bab6c8700fda32f1947910644e4fbe0b894dfaf62799e12339d51beacca45298056ae85b7154e95e96993e34ceff247a55a0ddb8a0eea589f0f5e8fc28e0b239dbbf6768aa87b4cecd5ac539ef09b99f3fd85302c481f296f07bc326797b35b4643cad60637c7c8b60470e3b5a7763c1707cc39a3b59ae9461ef1331677ec250c769220a433927db78e57f02b6510c2a0f149749ae7ec3c96bda3fe69cf040572dce2f30f3c89e +MD = e202d8dedd8fa4163fece1923fe167fe49a9a83b0295f96889166b46f79d8b4532c1be2145973e68a139501a12a98d2850d9fdec40b66b9b42dd6c309bb9266c + +Len = 56056 +Msg = 3d22c266a267e08cf07ed25018eb1febfe4ef79f7189c6f56121094a4ce76189fad7e53a6a40bdbc0c25edce31e36e55bf15835929b54a509e84919f81abec5e1aa2045b8b51326205754dbc3b46c0f61757dfe4acbd7be46d73b3679cfd0eae054cc7d2ebe2680743369a21205a3c586fdbb248e4e9803c34b717ab8525ee03229dd5a6743a87322e307e06c7680b022d6aa58db88082dd5c186473246bb6e4db5cd7df0ca3b66c2e2a9f7218b7547cbbcc60bc0fcca8514e5e43c561168bda975374869d631d3cabeea56dfb91404f7fc98addd3131b1f71515bab2470976cbf4855a20ec3e52a0d423900583cf702e328cbf6eb9e02cf2cb9552c55bf0222b904223b470b36bebcef03311701a01d4db3cd113fb586e9e95dd850dc4cf484ee4f825a3083378120bdaa0a2028632827303535b79fcff60f068d20a15f941bc6f01d05b17311faa173d7935bf969acd868ae6b3ba6047e067c1ba38c400a6eaab19c47b222ebb2a8db31d3b1bcda31c823debab3104d0735872ce286367f050058a7251bd9ee2f9bbb61d208b8de3d5f296d2a0726d31b06ef65e3758a1b6931aee5a9d4e042fbe4dc0e984a369b5a054104c31f30be41e07b70b043850521a67bffdac57f0e9ee906e12e5d7e3c0f22354b8ee37636022bf5f551d66c66b5c6879cc0d7fe7a9e1400819b2bd8e7e41ecbe9923c3f62e450239bcc188a65aef8996564f0a4b085cc9498e79a8cc56261cc87d710d56a71b5cd0b2bef262b93a67b02cdf9bad5da7888cb1b94e1fd1053ffcc66497e7731c3bded764587dfec37f31a03db88142682a5c43d0020b7775d2e6146cd83b1abe2bae8b301f6aa4213ca550f7c5693f051b32b58c5921d1de51fed7f862c3f677b8ba4ec0bbbb41ba2c85df8c66c7ac04d7aa771cd7c548c559b191a5ac049edf4f9ca284b1e24024bb4d7c6a011f21edec1e192ff29874c136a8d1e3389f9c6b7cc0270a967227c79576e82f18f23936c5281c243e0dce38954f093f8cd75792accf3cb0dddd813917ac833a32c34a65ff32e0a81e87bdb1d21ea8291d5e58eb7c046415fc96c4efce38de19d314de01f6d9070a18a8dbc399825f2e5e9728dc572a2da877306b5225b6694c7e698c8148850ff8c0e3a0c448346ebde5044ffbba8b09f6d23cfd16ba9fb5509923ae6a70b16bc28bca955a6a8f8756354826c032b1897f921ee294097f32b4b7e5ec23ec089b15edb031ec6cfe1995d3b545a04c381ca14b48c4607ebf61f75f32ae5436d52e517b56ff00ec2a95eb24ee35326379341a426d1ae2a6eae386f37c6d61cdb196039901652e548f9cd4bd557ded151f70392bde4eb0fe8c07e21925b1d33d2852badb520ccb32879ec1018d8846dd75518c7c2ee852021d7f9744e1143ee1a3e4d5c6cb4e6e12bd0c5e95e8ccb629254892a7c1602c3e099b24eb20fcfb77aedce2dfdfa29d519a660bff19e3e194a9d5da23585ec62efaeb099057e49f5bb3ab707af1b1cf8baa5c378173462f8c7d89c193362ca6414bffb3b9085390fa5cc0fd4cb3f48b2d573f8fe1977c168d0ac4f76c0d6253118749c1e9b4d286f004cde7b998d336c34b807373f8ee2d22fc17da122098431c2749a286dfe9e7c94612ce4612e678c9d1df60dd0a14d9caac02e81a1226fccdc68fd4350bf219e29b402f76b4a6c7cd949cf6716da8b300a516a00874a6e6a2cf7ce568ab83b3d86ec679cfe08c8a2b0e69a2c575f23f4161b3a051aa80a737cca1448641273c174b264bb64900568e9995d46dc589d5298c7a579a465ca4f9288d70326f55193bbae003ce30baa354e0c229cedee82b156fcb4426ba8376636da1f6e18885e1923874307c4a14070a5e7f016d14858781a636e49b89ad7203268f57182f421bc74e635044f794e83b7d1d09cd290aa11aaa4db76d26235e64dd960f4ab6023e47572df1ccbbc5cd54c73c81636ebfde3ce6603b2032ad61e4ed669dfdcf5eafaefd448358291f3ce2c75e36c4683db565051efe391174432fe06171a5ddb0064aab37838ba219ad61e7e26874a80cbd2f70ea6f2c55306882512728e7639ed8c6eb8780ebc93d955eb369b4d8a0a56bf8a4530c8e706a48a8ba182216f3737d8038b4f9dd01038b35b4749a74d470285d29d964b3f57a69ef75c50bc8fff68b230d305cf3dc040583656387ddd625a8c97bfdf65146f952e32eae3481fb60781be38a38b4dca78ad440e71b88081e33da05313fdb076f9a105f543ab67879dad766430b8465768184d14fb3e7fcd27feb7003bfb5993585f352279cfaf98b19e1dfcb440718e99021813def9226dad38a26e5d4658ee3cd08d1b8c9a3f11cbbb7eab380a169892d46eb123d0b089fd542a4684c8f5b02c5cd48884f65e1b746e6017c2fe7d9cdbf41796d1aa734ba0b81730b5687701b16bd1106aca56de321f8ae85d04edc3fdccdb6bf071b1d91dce31d3fa0e280852654d5c45fe6d819034c5c70e04b0357fc282d8890cb35bfcfd40d85aa24eee97b210141d79ec2c1316d95cdfe60c19e940d384a263c1fac6ac0be6de0d32da08bae2dffa251b09452d8e4ed7924a97c4ad9718465e22dd02455ba68c351cf52ee58b65e5e9413dade1ac45fef1b1d99771963b7ae5202e382ff8c06e035367909cd24fe5ada7f3d39bfaeb5de98b04eaf4989648e00112f0d2aadb8c5f2157b64581450359965140c141e5fb631e43469d65d1b7370eb3b396399fec32cced294a5eee46d6547f7bbd49dee148b4bc31d6c493cfd28f3908e36cb698629d53701132f3b60a29a60cf5da7c157e939735077f849999cccc78210cc598d9dcae1304c4fb5bde5fee7cd3bc67a1ef03fdda965c4d1c750c928ab8e177f27dd1299b89deaf3e3a3d7e52bdb6488c814e16a7ec2496614c99b6c610b371b038c4e98f0a46b766070a7f161d92c7df1ebb0924719e066e08b95eb4914a5edaf1fc1977eec5badb2b0f18515a168ba1ad91ffd98d94464d8fb5b3dda46ee47690c2dfdc9d2361a69094728adc0b3dda16191f4fa9ccfe06cbd5dcc8afe6ab8efc5e63447f2853ce1ce0b4490b388493419b920d2b10d59fa26001fd1c7b5c291f18ce3afc9c385bb93d07164f6709d3165e7f9b7d267322fea04c0551f59f50e03748437c46ba564ef1937a105e74a27dac0f8205d68196c6dbe367b81c1b0a2705f8e967ef7fc6c3457ffcb6e66c085ecb69492deaa704e25aeeabb7b7795fdcc807b3255f2fb30081f425a9c7990ea104b7785c288c733965965ab8906057e8c99d291e5e7325eced197b51c9a4bb2e9f1e98f95ad9ebb54302fb226d79fb3150e0d4bab4f32571d1178817b43518ede4c8306e4635753d3e5c165d176c52a0a5fb3b622856ba767415d4614ff32bc61bddc822b54917ba9cc933d156e0641d0f14e77c8444ede41f3ce5986387fea28b84e87d6ebddb12a673dbe6f17e3a91d7545e728e67c5a11ab44525b89899677de619e73b38c92ea4829504b2eddbe246e22aaa0f644a96ada47c6e16cf02ff392be2c8e262e8f6de1eea935fd54ffaa2e7d28ecee684ab203410dd45d44350077acc882ce440529b6d61fbc1e09fbf338adf8495937cc9ba8e8bd90c4e64442ffb5e8fe166d92b259a82a4a0b4d21b43f4d8f62a1339d6c4d775c935e66bc2f8d82046c98fbc67c2cbd5f6c4f9f0f5184c454b560fc3bb863a5417864362b1ac369a13ab08f0f0bb29e35af4580234fbbbafebe12f236148ddb22ac80e50fb9140555f51787dac58db3336fa780fc234699d3e931a60af52e8166ac2ee3e87ef1bd89381886c85e0094df39c031f860b7d97ac3479828ceb84093f3e8c333d10f2ab1504e0c4629dddbafaa39e3b68c81f259d8bf392e25dd91211028f37053beb574fa2278d2ad57d01b2d6f36950b279d07961319698ee0eb948d8a052c7b72e63a72206cfc7d111aa82ffaab32612b01fa87eda9996e74b864c86678d6bcde457874e249320d9c23ed4e46b21d230ef9b92aa97a0c490ba0286d48befd9c535bc56ec2ae01d34b7440f4fddba3d545cca9fad10b50a3080b45c8cb581fae748187cc5bfbfa62c1a449a06a8864dc61f36384eecdf5010c82437748c4ab47a46f661a18c37a30710c6dfd1758debcd6167c356d4277e79b8db8056b952f0c856db6d483850fc0ec353457aecd800b34ae4aa8e6f937cb178609df8e3a19717a15108816c129a895b7234c7b46e72be013553bb662e3200313bf822b3408fb04fdf9a15d08663c0ffac148276572b37afe228a860fd88b00bf5f79ed036c2db870e8bcd0bb340fad8884e71d99c11667b738f1c060a67082d150433e48b16e07164436fc6a219810e8e485d86440e928e71f2de005cb54fc02386a894477506366b2ac3a859d79bc8466b0d245709040f64b8b7f5fb5cceeba8e5c68a73c696feaba8935ae260912e391f4b5cdee90527d2496f8df042cdd72b88556e17f1d8f0ab26a583459eab6aeecdddd6df98dbfe450dce71425193ab34d91de739dd1435f30ac2cc887830a1eddb8c3965fdcebb446c9c49f96f6a904b3fe59ee37492f40bbeb2ddb5d56afebfb3202d7500288758cea0bc1e8698aef922773b1c9d99567ca83d5dd39f9fa6ebbb615c19892f89079ba373b77d662cc5ea9965ed407383cc322bf5ebbd18c4f95d176b58802deadc3b6d16cf3c1c33380014c45c4666a286c3434c04171d7e720009053bcd68d15c16c64c6bab02ead8caaf017495bbdc2fc24e0b2695f5fcdd0b00d0c8592967119476bd95b2607a30b134c43a16ba58519915d9591fea67c2e8c474090ab7d3821e441254397d0ac51e69b4b8b1aa3f73af5d5fa69d42e7a9fe1d9a06c95c3e371af9f3b128a2c32177187af54fd5b81e6cf14414f746a31bb5d3eac67f5ed0b9f25d07b26717cdcb2507bef9d681ecd9389831ac153ec49f75ad0b511206b08f0c38f762de244f4b91ff27cd30f7022c7b19ce75df7271bea674a6af6c9c0741d2526ac67611712a22c75d78437f239f9d3dc2773e29d3ffb0f062e97368fc58aa7309e815255def3f290902f96077bb06ccb6ba18ad12eafce9e80511b1b85bfe627ccfa4a9382252ebd37438e425071f8e514757445507f027df0e2dc163d235e86a830ce52d4bc2d662d5ea51560c4e4a3c25e137c4dff571f009aede2445b7cd7c0d332161f3f7b25f2df6f03150fcca1e5ca0ce89f97491c3007e51233decd9597403a5ffa1594771844409df5d92d4a0f57a50c9ddd34dfffa846289423cd3a9c063b82dde505c41e3bce487bb76316af75907af147c6e4c00a8587eda0f8516f93aa4133144bb765146c852f012a9236a24396025d5bc5419d27d298fcdb5462872afdb229d2ab9d7caff6886cd037356c32f079848febc4dea17b3e8de2ce155f222aa39c372b27c30cff0050e0904c41d31caf63bfe2fa4d86f436daab29086a245abff1e5b0848608112f33f817bbb1c86d1c61882532784cd02a79a0ffbc56a5f03fb16ac6443425cf8dac7348344a77845904653d0ddd778181d140ac91932baddb6142f6d76bfaac7410eeac266a64d4edd2d394fcfb7baac57816ca28be29c5fb67eaacce8bdb1aab17c6ae029024e133335fb78030dd9e6de4afd3021624eb185bee628a125bbc7b1797e8695a1c3bd1dc663f283c21eef39d58518e59a18fcab3aab2aaae00e46c96dec5cb36cf4732048376657bcd1eff08ccc05df734168ae5cc07a0ad5f25081c07d098a4b285ec623407b85e53a0d8cd6999d16d3131c188befbfc9ebb10d62daf9362227a9a696bf46da1724a172941ab68892a4d441702efea1f00c92a4f323288a84e6bd721885112a14604d4690c2e96f5bcccdfe3fafb6ca861fdc3dbc04d2aeb772adead5db6814858387b00935fbfa7a35467c0c75dfdf930bd80246e3be49c3b1c138542a1440717497d886dbb4d0f6c586e25fe8418b20bace191829b504b18d40811ddbde55e01bc5e78f1cdb9ad766d759c070a374331305aabb3f7f8788ed74f0b9548bfcdb605905ac603aff25ff7f09b875cf42d7fec7deb58be47950b8a3aaafffe6dc682b9a59660f97a8e977c719ce5f8b9e11635adc9077ac8212d816da8743b69e9264d10c4491bb3c2bb8f7b28b96a030eb2a07cdd36a9e4bd53415a6ca87c2e95ef34645cf4e6e64f1a957fb7682d69f6c3c16d907cc837ca1b4e736ff35d366d6c0412d8daf77c845322f1d178cf4939c7fcf27b30423bd7e40d6b3aeb4b1bc01b40aec081aa00f2e3bc63ff61ac4b684dc7ae05f7c46b475c02845606c2494e7b5e8a9c8f8afe2b5ac658a9c960cad2b3b5e2b949bb40c8d1c26139bc5f49691ac258d53b26de8e06d5426906695239a85c431d8c9346bcf3c1846ea27e869068207bf33aea2cab967db3a5af427bed7a0f41ab66e907a41094605d2facab64e1dd767f056162f488042ee83a68a26ec76360db3f28ee0ed69f779dda660247267dcaf101190c094a1d06b92e68504e0eed23259bef745db4575ca9293735c794760bd1d46da25a5b3ced90f1be100bcef0fb22f3892531286061f7929ca056ba4a9b99f5fba05839c846082ac66c1876337b5bdc929b09a12f3a01bd12fc8516800cc1cc3f90837463a267403dcf0493190628cd982047bd38477fff1684d327aad1e1eda5fd7c89738566d870b340b4163e223d167f8bdb000c9aef33e3b16c2f8d62c0cb31a3e79c516f3a0bb36d47bf75d0a179e336990b1c1ae3d793b0528291ccfc1bf78a1d32b8e90b6b39eacc796faca15ef5e875ddd848939e1f40894871a8d61499afa8cb0e8cb31bc139b0d86e1ea3224211dfecd3dc64d3d0f26ee5bf5f1541a28508e9d492c7a9e3daa35103bf2d50323355bc912eee35733681eedd88002fac9acc03adb3cf721c5e0277c306b68560dd65c182b8862f509d40c85e9c4d4b025150acec682110c5346cb12e7dc52e38609e904b11c32e03875a16b50443006e59354a3328730298ee2091a89cdfb7337d5ead3cc33bbe06950c3e636887fc2b12e86ff46d1bd3e1fbecadb3dc6cbcdc84247cea35464bd446f5b40c3192aad30ef892b2aea1e14ade2f49e2c502abbe058e83d5f07973e70d952bf1e7e978f0bdd436f075abd73e15471ab7df280032720b56827d4bc2c96968eac703f3030ea019d1205a70123631e274a5935356e47a197962444394f5daff94fe0e55c5773617f5e4b5b51ebda4800c3e8a0b1c4e5e374117ede776f6e2b7aef97f782ce5107d29902fd1794efd8e35d51bb5ccdacef361f5c2ade547012f8d5bcfd0c5b2afb7c0c5116bae749d8b761bd0e9f5041ccc309e6b1d7c50c6c5d4a787f61c7a74367ff612da2a9914f66175322e0174f82051746fac88cea429094f306e9d96fe979b959ca37a56e46d7c73c7e88e87c1ae290a18e1a6fb19b79fb54190c5b2bf59c846276e0a289c4f2b99faa008c709b44be22f336370a8000c9c4413213826db7a6a4b7086789d19f35a52fafcbd40d12e7eeb382ac9cf80d446a05c3cb1d5bb268461814bd1775c6827694fc6c5079345430566895100b88b66fed2749a3c67512711e6d6cdbb94fe9396151398be6914d0e624fbb0dc15965fa81c656bdb7e7ec4c537b3c7ca422b2171f15f82e5c1319b0619fe73c23689a344a09b91335f23e003ea6f5a33f28253755af72e0e3a1023fdabfdf44389d9c44cf563c4c487d4fb467575ef7914789c28b896f4a84234ee356196bcf09e1b5539816a510f871689157f44021a26828df490ab714468246c35c1455829c1a2b892eb2bd094eb4d1bf95e763c87a7448b7189a11e532a4320874186407fb32470d18904cdd512fd265a9968f95225132717fa146654e725ad9268d5f062e0f5108de1a1a340acab3ab1c6b8c2fa1e92e3607871f3da4d4055ffbdc0f263b9b91a109b7eeb77f6ebbba75cc2140ff22832e36b561153cb37dc27a6b3c102cbc4e0120ce910dba0133ba3c23186d44e67b809791d7941cf508292ca3ad6c095cd24fabc9ccdfc36c63d3fad73760791c5c55af8448634e84efbc97ec2ce1d86263b4330f65d5a098932b355047c1a6ac6fd408f77b2ada467aa545af7f17a3b64a583f0824965b6c0bed78f60f37d17dfc2629503990c625f009be526fb77140cf62571cd3cbfccf123f4831596b04794b729af94a3d1c089b13883fc4694be839fb03b3381b89abf2492f69eb054687a3e1e45876dae4d6c1e82ddc46d43896d24acc351d2f0ce7f134b4068eaca08f4e9b8ed7850f2479abb33593bda14032e078390a48ae8c6b582860700a08187a92c720dc3e83e6d8a19a26cbf0776ba4acacd39a8141121f6f4cb90f27c2b92eb88d22d16adf31dbeac58aeba8ffc2d47e0f204e9290a5eb7dc9494cad82889407161d1dd1ca0e6ad05de85dade14caa9ec9aa8c42424db7ccc7988d63ef8f94c98a99283bed836d998ac988c7c4110f5301f9bd5800126ba26d2c3b12b2d51744111c5a70ef9bcc8e73b4d4be501ae9e6df934a9d71fdef48e38fbf82736203c2d1301b377a5b6ff74131a9592e6e229f8c0299d93e152b0652497f7bd93f4289f55cd35a33cd3f1c1bc86f610615a0c630ce14d30e630723e2e0e5c58c73bae1a329ea9fc4f822442a028e9f7f184da3f27d22558aed6ce9bade582735065514031dc8cfd5e401b996666ed8427e0f7efb992a255abd409e03cb3f6b7c01f9693fc2d5b20d9ac5c1867d78d7f74fd09e73aa960c25db6d8be42d0457086b90277ca07a0f152154a522cd12634594774c8136cdd2934dd9f8868e0eb4824c0197e53d1daf948198ad94e0a543d454ecd04dc7373f4d1d6e2c1075c54991ac34019f23285b33c37820013e9a404d97177200e43c1bfb531271ab6b91e0de9411add5da01d99aeedb48946d57225865e07ac216442d45f5af0d7ff7da3f100b80e2ade812f1700aab6b72f746b19cc72f2fbae3b73ed10d2c49b3a1082fd01a69e94fd7c16d5e20cfd2c664ceb4c2c4ecda11d6fd164aa2716d70f18378c6c8b40ae42f78140b362fc5b63a56f57165ffc3ee747e7d56bd66c1dd70b4e2991d498d94769ead2057b38b6a03483a52b150327a47a33b9d65f38d23a50135f22110ba86369a014488436e0b460b4c0db0c76fddd6d217c8a200186918d33878ddf2d9e3f6d6d820d3c7b4c18c07f3496a4dc13ea974db7f7c75abd85293b4d458d531d23fb9f95b3f27a6b35ca4f6aee8c872c549f24d69fc3a8e98daa772ad9aa30b7c98ab2e9ed44b8c0a3e4a1fe53122c89c3db2362f293709d0387937acac42af0989143d919b1baeedba6134964d410ce80d1e5d790c5564a8f56fce79959c65a09a5defdb9b8053855951fe69450f85d4429d8ceeab7ae64998f3febb5d97756954ec0c25dd60c5faa282450420727d8563968936108fd8dba96c8e1a0d1d268d3e2a5c1667a54a731e5dd112e6543a26f8731dfa437d8285b1424740ac15c234e17fa65743352b18534869399f9c05dd899b10e24a2a2c7037dcf1d242668f85c354b48f79fab012cbacd721543226d29f762a952f801ec4c3a4547bd8fad6a96e0f4c670fda20890ef2e1730dfee52fc16c33bcfa669fa8dd0137e174b8dec86a1a37870fbfc5a4a28050d7d0e78a1978e5f2feb1c3f9440e5b63ac2188f1083ddb3d968090e58c11c0ebf4a7d85cba4b4930045e8172c1dd1ba185e452559471bc253d6b35c969e3187c7399b6a43ac200b57508875347d3a7b714c7fe53928e23b923d795b9629ef2c9fbae6aabc1657249fab8bde4fd76686d00d175332b1a7abff1cc9afc9fccb59c35efdcb676bd08b43b750b6c0c51c68df10a9d3d869f28004e532bdc49f4c9bbc963f41081 +MD = 61dfe89880b6d59998d665a690588916ea60177ccb16932e653ba6a5774a46a7c9cd1e5fb82961bbf1439a051c95ea4b53887eaf592d17c1644758c8fdc3e63f + +Len = 56640 +Msg = d7e6aa79e77cd08a6ef770bbe4bedf61557ea632b42d78637149670d4d6157d56ed7b2ccaee45d9439dcebc557b4118e86c15aa0ccc21c474b21abda1676cc56434d6d46422993e66dc99387dfa985358accf69884b9dd18a2c4d044488e78757fcf43ae485358c73143d0cb25a6239e8827e0e38419a21c9db83f138cb2427a4ae69cce6b6b9681add40a57d1b2d311a95b824973ea529d65875f0f89e912accb18e06c5178345a0a03a9f48ad67dd515ef4391f935d7e121b89700e83bd0542bf07751a2821a9b7058156af8190933f36b8a85bf011831fad451ad50b064ba91f3c9450792308b065cb781c4835f736b58c1eb6d56fdd41862f4df6a51b72626ab3e1027ae5e74f596f501961c68dda73d4f8cab3c6e14a2eae85ede25afe0129f3f79ace18c9c648f38b115ed0ab8cca29c301fbc5337c1f594f25334352f7c5732493b30a24c7ccde95aeafd2e4e050f109e74dd94869c0a62637187325d8c5c81487fa588cc65da6ec4bd54bde5780d13a050a81a495cb1b978e1258cb06c35923e1d472664463e31b735fb9dc64d230dfc5c23cbc8287201fa4b162d71416acff3c01e645c477f98fbfaf9b839adda667b3f58904a29d6a3b25663fbe736849f2f0e332bfb92270d57b556f485c0b986e5a14f521986640565ab13e05c700a69b9af8d618b4cbef7950e1b3bf4ad48d5022c0ff77b68a590def22ec3161a84975a4c34f052a0cabe7bac4f74cc9d0fbc9a86a068b9f71face4d2bd8b5e5a7a90da8d31be99b4d5c9d238fa8756b797a174570a8e1a5a5cc23ef3c7227c5875bc01198bb5a7b066826159245bda2467ed59485550e8bae438b5fe546fb83efd8396994abcc6bd0650f2b8d6daa00b070911008a95693e3d78119b6d5a5a31984d63b477ba3c033b9b4bfc18ebef95005b6428b147e70ff1e81a7118cba95bd0822e13199952a990cc35cef07611e9d94d1a68d04da85488f297295faaeee42c8ac05d384050d78a4978d668644c311a46fa67f18ff53688fd526a4adf72f434cde13bdc977eb7b37bdcbb879be9924caecdce1bf515dd7b7011dde0537ab171b458550e86236e92ca292655042f36f6ec5b4457675270e8b59d2a29ec51466aa5ef52d5f58927af9f26bedb876845a06a6c72accdf2185833bef82d933ed9a7096cdb3accf60893609c2c200ddae6d28fc800220f3efc52523beff5318893b149989744f3b339c57754172c7ccf4215c33695c1157e455e7adeb888ac789b0fcb3b2ffb5208e3cd4a132808be8d81f06e80d992c7fa1a04136dfbeeee561a49f91d4a67d23c2e3443a407bbb95ccaecf86c769c0ef9a4cd85b15f30dd6a37e83a05919159994181c8ce5b4d5786458fcac311e7d0c50a4039728d5563fb1b73f5bdab80d065453c4358ccc77e521c644a4c557cf7a475e695782d656752ed72940b423c20e961ee1b0b0430180774f0e1d1e76269df0d45028ae669d0b8d66e7eb8fbce2f6dbe1eb8afa8900cee78bdf71872a110bdf9e7e97260678873feee1b8c803de7398354820c63f0424f4d52f5eb9c42d2886254b0f6446a76cb8c7ad34e79912f94d918e1e9da57a2721e3741100d4c99866f12c1df3a77820aa89a0ec88dd3eec8e8f33d0fb8cd149e11f5454f6ec74c0149ab82f4e99894767cd734c0650a0e1bd76cfe47a35a801c4e13687267bcd33f17a75dfffad494592db8adffa93e76d6cf0c8c574307ce35fe19113f9f321689028cb9c614346af9e6c6e14d00770e40f7594f0742dbe62e498faa80bf31fc2632e4fd13e0beff9fcd87397112bebea378ddb02145dfb05256fe9afb6ec16f60ce3693ac067c39920a851b35881a6e457920156bf71915e84eee497955eb577dff0be2592d76011cc648f05f0a94067023a9e7affd93fb3758e51fc11cb69ac6ecea52e4fdb34083295621b83f336e6a9e008fb302554c889d6d849d6a2b2183be5b4b13203bdc105a391408d0ff8f7b11ad7340ac65ee23450de0d3e750d4fc9ce635b03b16bf0b8279331764004feda438fd1da3cdcb50774e9b2c3c2f9b78af147881f94dcfbcc89ce5aca43f9706812a94149095c9575bb61d7011d05f411e6c7c4fffe6f66a552c919138c35010cd0b9feb1bc3d27f1acfce670d39069d1277aae1f8ec1a5f50b1a18cc7946051b361886beb61cd12dc2117d8d9747ad5b3bb68018a6425e1e2b17c66f9bbb11259b6b65ca976a156c8325e8d1d89a13028c21f755d58fe3933b68ae7783f299ae7919186fc0b3894078d0c4c807e65f89a1438061acf8daf6a4733d6e928b233867b81b08d277913c0b78adeaa5dad733037197c69d2ba8ab0eddffcf77f33235efbeea404d24c1d1c393f0b442e60eb13b52c9ff1686d142c2ef622484b93b396994028081499f8439c929af6f768a66a16d8375b998e930795e00e8494bc2b56dddf0541f648ed5c68ed5567c2aced5ee0840b4e6d055068a70589546295d3c8503403587f42449023b70240961407179d9ae473edba9378eece5a60be06f21179a5e9f5b86d450657576a287c883ebcd4818a722096a45ef1a14b4faff7d25ce09b81bfa7b238e78b3755c87af0d8760ea1c5f20f7fca4338e722c93e50b9cf0e7f915f56fa645a48be8bc89b341e6cd2625d9bc05e4e4f4c09a87872f9f0928ab7e27ccd2b12881554d3cfe43d58c7a82c19173d1c78a9b46da50153dbbfcedcad3cbf132e8a987a61f6855ff1ceae1867c20b8e9f907af87de10fe9dc6dab8dc766d02fec14b3ff4dbd931339c74aab7b2022b9d1dee9a1a023483de54450246f2a562c4cf8012d81eda108fe8dc2e8d0fb02c899aa1f363d345456df8ae6290c4efa0f357da98b6351564726663f58ce1b53c2de3b443fbedddc3cb0889425059b63e291ecd4a25cb05bd79a9be981de48beb08ada7f448ae488f84286839fc4d939ad478da9f8d5d157c04373e7ed6649ea9984cff8ce0911ff917bccda1fb0d026763fa85117347df30b08386224d0e78185b462d864a32eea0f45a1c22d3147d0476185f387e27cd7bfd03081ac82ea287d02db478fc001f07b874f6352af08df27956cb8ce4896aae485a56d0fe61a898756816cd6c854badc291ce41592d9fc1fc3a4c876cd9315830edd4dd5623e4cae989d70c123edef3a12516eff4383cf35d3764a07d83abfa253214a84602019f7b0777ad83994389d2c35289728ceff73ad2a6607d354514c3cb88ca64786966c8657b3a473133d0e5e123b65aa8135e13908460025a97286b1ec3ac27f396e14038543ac3731a594902ecef13166188660570f793601cb5a9a037d61700147f70d485178eeb51938aad30ac42643516a0861ecfb6e2403cfdf467c0a82a5ca1e8dea05910168400195471765efe187951a6c030d35dac3ed68fd60451def9e906cb1887ed612c3f737d21c5cf60863107fc17c37f3eab3bd1d70509aa9a56b5590e602c7d77b492279be4132a27f8ce21da88001101d7a46e7e675928e90db76e3d09af56b6a7b8b4351b06e5a10ab13de6837f4f43bc191aca9f6b4347894fa4cb9798ff9a801397ed58e98888168aca94bc897070c2fa456fffc8903253ee9b2e7c71debfe823410900638939b6ab365975b72b2576d89cb31af98645e824cffa3ab28a831a685e3cb3dd7e3265a33fc951a0e5be62248f5863669bdec082a1a354d37980c1633decd5efce0eadf31558d2bf26c7ff7e7ba48ba847798778bebe5d6d223567a46e8e08f30f2afa2b758c7b6a64beb947004bd6272fb2877775afb6e81b1d679c7eb4af8fa813c4bcced8ae4b362f2a0eaba2f57bab064b2f74fbe3ccdaa55bcbdce54c3e2f55a8179fc20dca0175bc45ec4e4c0e4fd16cd12b277693d769beb3079461570b6d1ecc56dcfc7f5d4f0a7d30a25c6784c0473d16b6f1c5a7d70ad28d368192d2c6935b828e0cd3b0077f251733991ff04f74a3a62eb7eaa289caaaec601f4a0bfe9045a169b15f902b94ce1e96a48018cb7fa588036b7b7dde68bc93a5bd152d81b00b41d47c8b7447e5e8954fe14044e0c2c30ab97ee090518f88215bcd6c9ddc5d2cd262d0dfe2d8dcf539a3e1c92b1be88cccc554c2609f898e0406d2b8f38b022ad1a960d5425b04847a47289321d94b533ccb9f8984f4f14eba3b6f92c4fa4975ddfc8f04494ad716c5ae2826dfa585c6d910b1ae741e413ab26de68268c69d9e45f0cdd53e24df1caa4d530c9b1d024830593dc9946813e29b22f9f0756c6914a80a9fc0b785871696b95bad0a8c5b67c0f986438c5ec3d6c2defc756148467982ce976f3bc9698529568490a48feb9609664da4c28eeb77c8167079c306b02d54a12739317cf0f8c0c9705fef945d637843d675bd64f556294df886011430b09c26d1a74f2ca7d1fb66915342460b50ac06c33ef37d7be25509f712a1fd4293c7c42941db3508b147d28a2342f18fde03238658fb34e9acd9beeeb83c2e605775fd90916c429e172481ad387843556c2c2eb25c4b27b93635f161ef1624046c15579a0e88b1d2641fe89d1b4897f6ab758cc9d149c274fed835d31fe67ab9523466b811a72f4028989bbc343a8bedec7dc22f20ad91a7676ef0c4d3239ef9aa418f8d534df751f53d0f9d2bc48b95dfa36364f2bd11cb1038b6a991440d4fc4cb466c4bf3c6922a6bb8a26a8d0398d594e50da01edf5a89e3fc13e2ce522642302fd7542f098b68b32b8e68faa0616eb0cb7bb13936c024ef35763028ea07932ea07114563ca81091dc93bf73de8a1b959b51be92c4b671c8f76311fa517e48055cabf50fdc72b2864064c6af1a7d6c91b90220c2158810efb64d00a904f4c15298fa8ec26565df0f0b7426f2e0a5c253c91f703d85cf52f1f69674bb9105afa509ef3a04641bf6aa724448f5cdadcd5a200c356bb1e6e84e3cf1e6b8622b636b03fc9f5c54ef89d72947b50e3dffddf3725ad8e3168921730dc1ef1614c07d133ba52720b46b1923a510e3d2ce1684de147de32a10009efecda8f65b157f5d4c056b59f80f0914fe5a126db9da8c4278ab07dca75af7c14010f9950dd0c2a463e5d1b048d1641de5ccdebb49ffbba7319a6b3de143d938f55c462384f304b2f9715ab2a987e6847881c844f9ba4f23b7672a8f7e672f567d24015a86e8e0398b2c78e980bf1af9050d81a34f7691386895c839c53164ba45fcdd825a2edf78877baebd64c37bec39b47d4ec1d13c65d3aab6d56c3f03c4fe3b1d3395314d207ce38eb6dc5183ce753b3dbfe736ab2c771a98dac9ec9716e4835306be9cc3a1d9f87b6e4dc5cd1055f6256f2633580cc169c0c264c69910c75a11443ccddd7d3d2f073c3fbca2624a79d6e51533ed77411cd114c3598452e523da94a650f53304fbb4b93892ce34c13ab4ba1ad4b60c84a84c5a7c21e35dec75017071a2a533cfe3065daee48b0858bd6146dd825c2cfa9094fbe59c20823bc24860354f58200c897ea2391e633d8f764f23a3c94a69117a3d819644d670619ff1dc47c398583933701f3dcd0174c3f9e0c92415fb4177a9b88414988f98dc62a04d4f8be07ce4959d3d436cd02ea4bcc8bfc4f509368bc3986bd723867c2abed64bb324caee7d045874d07a49db903369601ce2dec8cc3c5fb15452858adb18f65ff90ab22d8124346e7b81e8fc15023562726bf668c79870ed22c1f7555be5a2e2a7ca20ca9f59b3828af03800a18ddf2f9bfceaa6fc4c7e87b8ee466c2bb94e8c45dfb14606394849a551b1a9d45aa93fc02225f3d8eccb098d240d2fc9186ba539b7ce107437753c5122d0281bdd361ba55822effbedf8fb262fb610c2678cd619eee1ca57c8ccc304f03e3be6a9f83ba21b7bfbc3c48ad50a5ddbcf964b24875cd186c43f81b18637263635d32582284cf8ab97cf04f31fa03ae8bcb327b541892c47ae89e6c5ee6e5162a65ff4465a1c5c0c547c23c4438e435758a771d19d054b8ee9c56c7c7420ee4e1deb8ad75986d248a269a560d93b03b233f1ddebe287cbd6f6708737bfe579430d045d979f12e7db12060e6b592cf883df20b076ca5709ba5529cb9a1a227f0be448e119a356f92e13efc3463beaae46aa929df4ad1991a3964fbe161b6e5be34417a9c00eb9a2cc3875688409da717526e5fb081335f02d3a60b33e4c3fbc739d0f3c4d29b1613fe03562a74b92fe89e4895c038532b1a1a1eb5f65251d0d376f8e1cf39cd4b0f3bbae561269aab20f640b35998ba632bb7d6e274d3e6ccaa93c12a065c0aa1e822b5e9777ec68187015ca1c1c9ef71fd51d678f38d0c57133733b7b164d980655afb4bb2a5c71be568a64740f27abb58912461bcab4ad9d70a57701878c350508c94f45bc325df02d2268e203be4ab041fca83175328babeb6343d82c14f796f5f89cbb9ff6637a6e8e35ca7cdb4a7c8a2d0c84bae2f6290e0d207396605638b7ce1b71682148a9852e59b1fd072196ec33c16a2e3e63a15323ab483906d766b8aa4a2b874b63fa1b73431ce6ba768bc291857621ad6a81554732ea967101bd932da73e8fcd5c089c0d908fdc7dafc7b7c6c72d47d851557ee855bf21275b89b1c8c12ee42f8741814db06f30c933d72663e4f40317deaa4a77925a8ba24b77aefc266126fa7c3155c4215fa615a936b8d98d6ee61468dc42756731186a67e3e5482599cab6b154a3f161c58eeb8662c9981ef253366687f17242c779f8277aff2d6d2d31dcad27d66600256dc341e7f3302822fcf67e19d1fec3a202c40089472c5ba01ee4e62777828b13c5357232a032177525ed162e5e6b5845556699bb77b57f76c457f2e001e7410527aa7ddf5b0e8b6d7082a52201587f25d458497deb695725c4be49ce0004e07df7aaeb5aae35f2706f4fc1916536a6c82201964d2ca86131b280515dec5bd7e2d7bf4110f438db3264bce1f8f4967da0a10b06a5b6033c3f0036a02c315ca5d82a4005aee797a40813429cb539f85243e3cd2104020a26822049cc9579a7b8c271d5af90d2c2eb75dd8948729fccd3366cd06c04bb1ddebfa5522d462f9daf4640f8a543405b201035f97bbdb0845edcaead5e242bcec35c01b8489acddef7b80a218d52dab0d04bbf0bacd2f6cf73bb1bcc6dceee8d52dbc814b52fcecc10ac5fd8de3bfc847aaccb38626eed0eb06656a611717dea2ba35acfe961cce588a794971e5b10169da80d1822ee0db28342c1d2efb85465bc675c725bcd22cbce1e5ad4a45cc00797c1d72374dcc36b6ae4ffdb6f1ffc70638c2f8482ee7aef6f95152a26ad86d8277ecbd2bec7b899d5d1531805f4f09adf86567f05323fb0cb8055f00bc9def89b535dbe871b67be528c8e214ae3bb557eda63ea4934dbc090848fdeda3e22f981d40f4f64643b497f6ae37fb478c730d01cca2ed562f98f2d06454f08771d5b697542fdbd1eaddbbb11159bc9009ead61b21bd52048f38d1f89f8b91d01088ec0bbab4217c759e5740376fdff37cc3ba23ebb75b053643ad6742cb58e688f04161bbac4faeaa9e758b69a2edd7aba5c10273b890c2ec628f07943bce32a0b6bd819d3feece53861c7aee1a6da46039f49e01e77aa1783d7ebfdf047a1a22826854a894854636fd55f510fee7c161275ae0dc6ca00ba47b8277694de407d4fb4bc026d49c7d1cac27e41576e3987616fbb04e708a6936c5a3177c3f956280ca6dae5d26bcdbcc3a9a2f46acea9069aee0f79d1bc121f7c2ea885e021491ec97d60796b36bc81050b6beebc583110198109b1294cc9daf1b5eb057bde9fee1098fb119a234acae9684794cec3783057c9386f504334326770878b1989d0f26c89f962e1c9cef6fb30b49b0478d4f3e01729e8e927f7d237feec8b2bcb72e857d0e9d1d492df91b50531461fe0ddb74d0b4cd246737b270db1a89a451bfc2c4d0e5ad2d506e337a1465c4a53a3f906e9161fa01aae349d33294a1cd7e3e33ac682bb0a85ae70353a8483fc523acd6f6eb820d6b840cac152c62fa766cbbe805eee88dd48e21d270b3046f08e0db16d2861eedab1d3942fe728e7be643be4b9709242cfa15a30997dea23ab89a54b6cb0b3d84099cf27355ac200b672acfc32962e8756116f50e91d1298a1b78a020a922e7b9cc29bfa7e4821e943f4977b885a03b5053baa04b2633a1467ba346ba347225743eee2946719a92fdb7c93d92716c26a516292b261dad13561e42ceee34a4fe9da510b7b8c59f832e17d2aabab66eb05cf38a1e0940e686a24d7ec123705f7b1d4abaf266a837fa0ea78b45961c4de15d3205025b558702114f7fa6c0b14ca3da751260b6e10afe87af1d968f6ab2c1901bc45e8425378f8d6e6c052fbf137ebd6e408b113ac1978076b0250e6a4459ddf6ecbaec789f36fef06d67d7625b14ae7c6dfbe07904cde2456a7b79e2acb02d0aa89efb1666fe4a1eac522062cc6e96e8c13689677aa99364761f399b91ce66a01e9319c635f05a404e5172860f935bfb63c676cccc327c1bfa99b75d9cbc72007620ae51b412169e7ee93597cc8be7fa7c330d70a27185b21f725aef75813772d9ce22808a6e667f62a4d15eaa5f20303303b81aa26c97700c31891bc3259f3e6f24dd19600c332d2209afa05216f0e4b1c0de94772d989eea5eaea72eb191ab5faa47e4ddf263eee7a035286cb83e5d1df1e6a4c7bc7284e081305c602cf402d2e8c8abaa2ae00bd9f2ccbd9f4ef1e4a01f3a133b1f0b6a17237702fe9eb28cef67c9346ebc90cc1f86dc2693def3c162d141a87a604d98b6cbeb61b310b28edfaeb048d2ae5d78e2e4ce2cf1732b3c8a8f632d2d871e55e602f4402488dc53c945e7af7e0a2e59499508976112819d41e20868fb9a68ebcf4ffa69fc111822d6b5d43119d8eab57d20f42f8ac5dd2bae5098238da312a0983a65a2e1b04e422d85e1964b1e7bd5a50df9bb1593272ffa637b248aa904bd6a4b9db47c6f66fcf83d75a5bee6c801eae57e05a98547f14ca31a349bb526896c0b0a67745548985c66f7271737b980742fedd3efa126b9cd97db1a68ce604ec7011482716add5e8387d1e5011a369c6a73adee8ff1aacfa4c727a098fc9a52a2b624cf1db70b9595286aa42295279bf43a261e307dbc7afbbb678cd347bcdf26b0a0141d43bb87b9d12a2f22b374c63c0ac02a7a4b4504f7fc01a7c3b8ae3b7a79f21a1c17d67a180b794daa790665676ee3dc17662bb3c2115fb90e5658aec89980a9c03942b7da5dbfc562f1c3c0a0ebf7faacd358d08482e78a5c2aa2823596b489b1b3e98626506460f122941e0d0b644de49bb2a264d803e1563a75fdebfaf581988db12e246bd0e6001461c9d655929d64c723738b9a1a87a390b769124caa5a1dcd84f9fe366c1f36d013072451eab2d75f928921509345ec34520cd1153ddce77d492dd9399ed23c5d90211f88d253e369e62e4d82d8e1d92c2c2f51dc15cf9fa4e813e0fdcfc9b9c3c25fee81b34a30ef09a737b9502311822f19ba299afbec4b48f3380968ca560b9008bac4f65d67f8e23f087c63d53d3e421433853428777953150ce5cf9ebb3ce166aada0155308d593de85479bd04664c66e4764b1de836f0c0821a6e0d8f5e9fbfe74a3ef932b556e8fec8faa50f043758f68647a3e68a073ec22facde7a7ab15c989c13131678c18a73604e53061fea32913d9082197e81d5f5acf0db2696ff85e659ea6983de82696ea4de8f8fc04d3cdc228e822a1944ce431aa4ca38bd7181f9082ac522f082cd181d102355ee48be00bdaa6ac1643971d3ff2f745bf4ef9af8313bed9bb5a70099524dd5feb1c3ff25964a0485654805cee6f9a1354561160b5d85a99535da4918cbfe6f3311a6487136d8161f265ad45b546a186eb7af3e5c1270c3b97904efbd1189b79b17d9e10f24ba6936af5524a3d3eaa3af52c15a10db6401ae880b3bb2ab5876dfca441225e85ac57306233eceeae108a01f7fb2523dc92d1c6bd9751c21d173a633d023 +MD = b09c9f68183d97d9f1cbbde53856bbb98ec3f9285814e0c414dba1d6824572c5dad7e1d88e4052686ba506c12f3050c56cdd0cb492fbd9afe46bfaddd2042a42 + +Len = 57224 +Msg = f297a2420dd860c0a70cfe74202087cc7f10d6c813fc58ae5a7d13ff2139e7a9edb5147e9a6bfde5421d2cd0606895ee359c1f216bcb6032f920a8c4467242869119f6ad9001d2a257fd2bf77c5ddea079c2db605131e581776793c8eb6c9ba8a66b4fb638c1685db05403d3bc26e94b112a136d0d566e039bf9dbf5584f7a77f4522881dad4467f13cbbd4b67ec3e58c67bcf30e76183202f7f8831d442675b427788f6be61f57149095f46c7d6662d605d1591277aac40f9a0a366a86debbc598277fd2b91fb9a1ab7f4ae220de834a77aef7814cb72cbc305337b1df98d02021afe7e6b8ce2614d7d816ac1b84cd4637764cdf7795c2953554058790ed69503e72361c4793130ac021062ec001b745bff7c7818aff3c27139d3e504d34dde2493f08e7f80716efdefa87eeb0ddc7e58b84061bf93bdffe759f20a08717a432fc36dede3cb298209eb52a605061759224ab770344d44467c5ca8afcb10e52dea21a1673a7fe1d6989f15c28313556d815eea8ebe061000f7ebfabc96d617051f5594e2cac722d172b3f9baad5e1c223d9cdfa1a7e6a79621adf219b1ee973194074e47ddc972db5ece0676cb0cf7e01daba0923514936ec24b97ae647eed1b12ded87fb9ad5c5c259845de25486b0fea34354ab1b95cf2a26cf163f7afa22960823971a69c65bc8fbbbddb033802176cdea4b063fc888988b90921b1a83dc5489c7904eebe176464dc7653ac0443606b52f7ab9206a19a3dd9e6cedc92465690d4a122d83af9ba6ca6793069d5b652af37362587fe2f8f8a759054be94454401d1b7b2ab3893276fbecd5882d3e456ff3667058b0db8cf353510999fd7c3f6633cc69bb0e26e1434cf7ab53f2554d225f79433e45bc6c206c06d87c98248d67ebcd3c72f5e11e7847f892de7f48e30e721c496da0fe0d0c7bfaf0583be5a4b19fae81d6fd4040a277601aac4671bd60e5c0018b7528f613ed9dffa14b383bdfe9d0c85ba6dd0e3e55dea131ca7822e62524fa0c14b59dd34b70450c5884a94f34e48e75650fcdc86dc4d5038db4b9eaaa8b9174223c9ac720126eede663739c1b5a32b8ca7105bd19a3148602cff90b009466380016436bd5e4dbca774d3123079253aa49795ca8f409ee5dcc2256b3a1bff6dc40eb4e4e07682a267dba5880743d6fae64a129088759c0ef3c445971186eb1d5571401ca1f2cc8868c2360410babf549ae80f1584e234abee5ae87cfdf3125c7d539047ca7a3456f0520cec1187e730079814c14b2f6da515ae9582c50a7d1082dc2dce21b5c1f448b2b1a9d35156777683aafca40350e2b0e5d41133723322ad339e176f4c7b4ab80cada41ec1150f2fd1582e5906e34b072a2d910dd43c7b46816b8c7be66a4187858644b97f2be27aa9a7bf30e130c862a3296a1cd7a10195ed1d940f2c97bfff47c6f06e32a0d79f331e17f23c3f4208784f042824699ee1a03b96f1c609ad667af41203827dd5e599459e67be169f42d227c7f9629c3974c24dfcea5bc8f4054599114119c9c69600a4bd5610bfc958d93a1c563a43ba947adb2dc293dd7a24d13c55f09c8c91f892c4da88da42a692b40f69085465088af06e9141184f290b466546d8b6ce1e54772c5fc6c3a520378c2f17d8570a0d9e4d8d902f8f26e801cb9d4cc00d9855f1d764b2d673f21e9188208f8bec3ab017b9c19253a36b9e4f886acf7249f11e19d9f53d80933187e6d16c38ecbafed93f5b91ff76fa25353ea65737b413e26112a566668ecb68457f8e9a79c26a5d705c5c853f603c5c94144de9ec4f13720625643f97c6c2a13fa4e833bcd4a3605eb7e325bad91218a319a4aa560bf0a9f59a3e0937f221e35d9d07be68eb0e0e899819fad9a924624a97d421ddaf528f16b95a4aaed88f3787b112c3e5cf526fda46268b0297194171d404d6ea05e32d51c9e18d6341b5a3a52931cb9a48188b390b31609e6d99be00195d52e3d3488a8f14fa57c0f43a329f4d8e5df11e086b8f2d620216f14ee0dfae071c32e22caeb6e0ce322cbbc8e95d654e015118c916c2f5e2f8d0ecddaff7db29bc3dfa35a2b07685a50f5c04d2c8b99c3f22000494bcabd9ca3625f1332ee8ecbb6ee20b6d631e4639d2a098f4c6919ea0cd9c60ee63976f01af6630756d1c77a02c645717b9203974db4f2c5740347cabb8b5862ba101ca24a275427c9dc1f3f3de46c1a999c387e1933167041feb5fe94c121d535d3015bb791bd050a41d873dee51f02aea505805620df20249fe6fe0f17dce6f7f6d764f9b2082fa6c785c04c34d8da2960fd36ab1ad7459a8b5d31a10bc4185ee001567704cff81db1c99d3c5023f1a84482197e6d796122357b41f0f981da094311b8b6067f0eddb50672f5c38af989c4369146b540034a12e397558d90bc55848b043d338fc47535beea2f0b68527c647d46aa6ec59c70c808ba65147b2fe228cfb183188cc962a8655b3e94568ccea9e8a2001664ad44b96d13a64a9bb52da462591e21f07e24a19c5ebafad0091f08eb2bee28c7a6146b834b7f8c9cdca69be55374ec556339a5c65d0aab6f67dc06075ccb3249279e52edca7746d916cb53cb490de42619202965eec4327f298435cfad3dbf73921103ff091425eae42a7086a26f85dcf066a11d7c7e0ca9beb5fc96a5bc2cd1863af3498fec964cd5427699e8106df4998ba13f9e7eb659a7dfdf1ecead06ed646aa55fe75714696a81ea979276e91764fdae5ebd6cac19657061aa90a6da11cd2e9ea477ea2ceb048720e22a29a38ff33b3cfd61ce7a6387f608dc842012f9210543b9ea1c4c2c43c0de1c17af09f8b4c2b18e23fa8dc28fff592721af4e1df07d49029673feb798ad5698035da8dc3a32b0a36c9772a0ddfab70cf1bae7dacc04f3010577c11783cb4f0855dbec94e3f9cebfb42bb5990256c7106cc98cba041ae647cfae1fc695a91bcf879061cd62864045830db3158db1fdb40b618956494da7495d6d773f2ea53160212194e00676d9d761d417a0e08acf7a45f97a19fc1baa88275c740bef6e446cbaf5f2776039dfe7d9054fc59b5fa0d5b517eb8face35476c5f172973852b947ad8406fe004de6e94127c7fe2e9f3658c1433a21dc5359b7a1a31f7baa01048371624ede5731737e32a21ca50ac7e46602e2027afada1ead5307b723a4e7ba92cef736a2e57309f9360aba64c0683faff29ab0f598f607da4295f619c9754007eed95ae63b810efcc3c83db7e00ebc7908d3e21c2725c9c108b438d878383955898f3812b9ea16eb5470f318da19cf63be04026925e7c8f41e091bfa41bf1b0e077f3ab2e12ca667708b87022f27fce2aac19e7735ca89d5eafb0bd9b6684993e12fef3151b731d3907e65fe4f97c99827830290b72c80f8f81084f136c25979bf17d2288c284dc24cd02c77cc07c9d6ecdefb702abc52dfedd013fb436bdf41f9dd6002e0ee6eb60e17270914f65241432bd58010c853fd04b035427cb32f6f19d7355b0077f9214cba022ccac21749c2f02d3b09ff18d3053765514346ee63a79bae9b5b538196914f2a5d5e196d52f4c27f1b66bf15f447ec20b2277570c21ba1584e621fac78643d2c053f6ae91f512927abc786efc34534f3efa9ed7afcfe7ebedeb52abe693e0a73deef14fef1508ac3669cf4ead295b86b544b0d5186b88a3ed6b5034bcba74d9e24fdc6336b7b7ddec66777bba4b1ccd3aa7b638901e25a74c0f247e922186d0781ebed1af05a58e665a78db6bc1208d93cbb7ea5d10475ed27ed570aff09ef3c602a081a2245c256aeedb5807b4ef2f8959bbd2c768753046606bf15d5044ac96a4895b563f640cc1caa7d9d84b0f19e4f9cbd8184f3885725fefebe2690163aeac8147157c43a93395e44524af0ab56c52ede496ec17c51c21684587625c7ed7c1912d2503836687f79a863407686ae90d2bde8b689a580d4edee79463de66d98bbff5cffdabaa879ad283507caf9f22d18dae3dea49a70d8f59b951960d837cb415875b9244dcf9239424c03669bee0471a3df59bad18e48ce2a20521743d88e19bcb11e9d566a63de651cb5c1d2eeb17da71faa24d1459ec808dfa2c98fdc4bc58aa392be6af568ed2f2ba1654570be8d5339628b10435573c5f76e00329f9ed540a1a7f001fd0be5fefd58e95a10862146c0f55624e40771d01c2643c2bef1c97d5fd0eaa1ede76953064e96874a92e9e02ae50e75c42f12b5b26e1cb696ef02af12a006c14465e7d9eaf525538b7f47bdfbb42c89403706e55e97f394d3e111448e97cce69d11d1e1ffeefe555fb5bb4e97e528e604a9aefd855650c3d26285dc082aa5985475c819c98e89f333a0c500a3ea9c027e117b5cab0bccfa3f0dd0e433cb394d170c2acfec6660c3a3faf5729456ee6508e90c81543ab07e662d72db861bf07b314f8a92bd091b2d3d1ebd22dd9ca89451aad319f565b3e6e45bfc50637f53b94faa5800dfe901b64b768c80043e5306d4d15f75231f4fba3603cdb17077eb7ddeb72378b978ccf57bacf4189cbe66330ee7122141b9dc7ed7df779d2188203f4af06d88ce5ac5412a2c845b0b8f6aaf6c768bbcf5e7e29b46297a61fb428a8430e0b6afa2e1934ff37fadd5d543c8e279ea3c86a40c0a960d8c56be621982d30d026f6bcbbfaf784400e1078e5e1962b3cc954cd0a8bcf59a729cf0fa8fb1a25bc0183bad478230b87abe7e9b40c4b6b698364e003062407976ada839179f8899b4419dcc1bb42fbd27a689809e6334dec79028b755a2fd37031942824394ec43597c00ac9eadbbcea239d6e2c97d83a8f5235b6a6ae7823f92506e7a964a43e52a0812c352d77b6974d8e516446c29b18b70649df2b8860fbef37a96721835eba0a632a4dae9d51a0a0422afa1b77d6504f7b2c68f9e6f33f362f54a799718e347b6fec5992d5f5cfc6c1e2363f8155ffc39f47893f1a428aa3f7d1b1f3f8368a9bac5aa104a80aea64135f60da687eedba77828a26adb7a7de9609cd58a0bc8214225d6d2a9cf8ba25418bc013b2bbe1dd0dc6b2d526b95c8e14e343f0f089e58bd9db042c3b2707ae514d9e13e973a5d468f94b740daf735b7a465ae270057aabdabdaf330dff99aa4e8c4102940dff4690059b2deb03b2efcf1c5b57a8980b192cecb66799e937bf3d32f2073cf3b8db8ed0eb26471ce2ef1b4c8e7621ab5e80d74f61ef674bab952826f94a688c983c69448287a962cb0666be3b6862a43d86e4cdf7f3ff8ebbd516509ef4a04066112948aa79993d34dab95aaa54f3ed6ed35a50c29dea1b30271098292d6d77ec01d7c3a924a015e6131b0823635decb91041bf0813af59d1321de6e11c5599f0b5799fc8af4552aa5a95b0edbd270be8e5a101127dd6af689f45220feae20e3bd51ac34f42115c46572e3a5189d9b1c1f983002804e787bb159034fbbe9c3f9508bf1786078b9c82b1ee8e97f0fc450ef5eea392d06b48943d0704edc10a92c5f67283b4233b782810dd94071917319580ebd29708ea59b9bfb17b2d1bb47095483aef23c1a959fe1e0435e82cb2dc1f43817580d4ea24f242977f02f32242cba6204319075ea8ce806a57845355ae73e6b875955df510096ebff9b671dd6e30b72a67df1de1cb5ee117e321b4890f5b1098b81ecb9285c4ed33d28fbf6c5e8c246243bd2cba2c76e714c20877d5679d692a2763464aebed64fbf0d6025778a794d0c0fa5c7231e03a68da81c5c21e029a75aaacf5a3ab4a7e1d3dd265272648b07bc4e0d4904463831b15d3c6d79c524b812a4000272ba4e1a3a0cd0d63cf39206b38b5bd9cccc66a365a48a19c4a5523578d68905ed4c23594000d2593da408ba805c23e1e31d296c090267f998ed2cbfebd6ccdcf0e6e23f947dbd33fb1269a3b114f809fda4fb0c1a1b68757d193eb7ea094de02426e52d95c7f3ff0bbb2f42b46a4aba731055f427440e25d7c5e2ae02027eb7fd68b6c3c2741932d60ae41808b08e6bc9dbb4c49f10cb733f5fc302b246f1ecf348d162b9069f47f08e02b42c7c55968863b1fe100612f62a635a66793b29d79c23cfaac7f3e8c6d1b12587ae4212d32544b7f0f89897271f5d0349d57399005ea60c0cadc09837f010a7030c9658aa270b414dd74caa7e84c9781d4574c20fb13c0108a8f12013d23911c6a5ed89741403d8752a96df650125036147b3374e4a42590f680a12d30e76e04328bc47d962db0807611b9882fafc4fa65ab35b6480757eb1598fe2fdfb66bcf8f386f632aa0d4a65292f885108bbb76d0cf9b0bada31ec7efbd7130d2f94e258a4d227283ff70a2ed157015780efd525ccfae9d9de042cd8dd841589216e0b029b225d22bb34d1b50836b5ef1a051351293b3949f268aa4f6d2b7cea677e9157650c0aaaa2533ba81c22f8b02a980c7f804f5183cddbff432911bbb968231ff790d3b2286bce9278abc04c2349153b11908bb4ffa6da9674affb546eba17f1439d2dd6449df39097257342b0dc08f9b7a884c64643f10a34503cc982c3b9cfcbe88f0957af8e909427d06f0179eff2c256df17dffb9bc502b84a9d8e1b751601015bae0a26ec2ce0115c136da946a0d219df2c355447517056c952f937f64e83863846b48a98c01b707ae28dd0897e67602975ded4902a0daa2d6c5c9fa9d3b3d58955ef4110f496d3b15eba8634f5e2d8328734f2e2c92b20eb4c10b90c60227de37e22f0e124f2a983eaac30e5a1d4c07ec2f045dbb959598794be1a9a5e4fedcb01f7f085fbaf608708bb76f80ccde782cb7933c77538c286b8dd4ad048acb39493c6f67bc33d973f4b60af08913e8bd3033843527719ea6d4ac6b04a99b96df4a618493f262dcbf135447f83c9974be40cc60ae959ad4fafad32f175cc065b5fbb848f4c9ee06d5128df3ee62078963a4a9ad118774340c2628a64ce7a142a3a36642f20880609d3c88983cc3043094a3f4f6c5c6a7c9c49fd35a0c11e534918c96faf679bff0ffd86ebd492739703986d2c0321adc980baffdd3c0a1354467fc6ef966e254c0e42d66eb7d564d513a966d95c04abbabc79cce97ce6038780d3c16c6ac0ce6d8328499a94017e9db7f18edfcd720eb09e2af6d30a01697da6c94b7e92ebf1e3ed3252f7ffa34b517f0577a7edf6215ba423003269c8af9726a4b79eb56c2a4fcad584ff51373580c769a3aa240d9e0c7d167b7ff2c860746f0ab83538bdf1f1aaa652194f39d7bc2f72858f0624df537759bb245b7d06961e7fafea934dc379eb193cee3037ac5425c4afaf0ae86fb1218161b7fa531c6c835811176bb829592a92c7e6ba9d1df938e48492b8a4b9b60a11e1b365d71c685c488e5408799e1fd7c7658b24e6b70bd746a6c285f657d2af8fcdaf14958129e7a57a19200e9c2e811ba85425b1121c9f5f88b6f969d487805f87f38d0ae521e41356ef18e39e15a503f2da336899abefb39d08995b9a450b05933935a3a2d0a006c74e79953e65b214f765b499b82a46d7661fdc6813bbce1691d8b4fc54c6c9f42dafb89fd78f36c308bf4fb11828432f7665390bfb2c3806e66a71817574b0500c9b6c6003f2b192b92f6b3b24165340408145a39b46d75b135701bf8f5b01ced689eb824e50a1088b4e7db45684f5ae56ec78eb8e7c3a87ab36dc130cea2cb53e03dc8300f993a8f1851da939e4a8ce1c2f49304f3cc0111072672868b29fa78581b5cee67df7d88e7bb18648c5fb2412923d1e5819169bd5b2397c4d44d91a5f9bede2495e4c2ba48aefd7fd995b54ecdddb0233918c6c7d4ed96b050177922ebb0b49b41b0f26e64b1f1ae2ef57b4dd6a99885c26b02779c0bd913a88e98375579481b124cf3ec624c5cb73385ed896c10f1d5c5920315db05c6b484bbd72c5f9f006cb0bfaf7c6b07a6638f4ff349b59923d9e993b3e9b864c75d8aa41e4833ac4655c4110c66a76b377aeb5b76d4dccc965ad778f83b5cae43d4655356d5f628819ff64af4f13dff77c4eeaf5c730731b21f3649bc52ef6ea2e2bbd06519d3991812ed734e66564bcf0941558f6e5f51e0f2af0ce67798294b4f3521355df08975765294020d19d8a5108b55f50d0bb38699eacb5ef27f69a8e37a50ade8757fff93ccb3f72eaf2d62a275b5789833df0edd8e8d0c0bcdb520663365b4048b041e3104da17113fd36f87a77fff56015ede86435bd80aaa961b9f076634f75a9f3a17a11049fef2503287c8bb71909bb7605cb33caa363d9301579f5d140a09d8bb0e4c5e753cf02e1569806fb88e2972fa2784386ad8af343b56a2513c85c0370adeadca831460f47ff779a5bb98d41816ae5e57003827012f64b94b93b0a9458d4f6b5f5cce6a2bd8f7586462f6c3301bbaeaa2549ece8346498c5203d2e989ad282f22e6b2385a8732c8b595ef20427113cf204e52cc41e8ccc26e7435ab8bd233a01d0a07ef09f6706f9e3ccc10d68081b6d9d79b48c37eb703a7cc1f15d465366757b117bac18c79f52a3fd6bd75afcc47d6d5c36a926ed0f906f4d94febccfa2bd8c128bf08b114035e86524fa668bb291e32105c3522e04a92d4ab8258714795a924832669cd0b4144fa8beef2131705b9d4cb433400ae9e5454dcd6a4bae54dd1c0701869482456e381c8c0e016a882b0a53b4a1872049e525db67256119bfa587f36bd928b28eb430450f0f8da36490a8baa9668dfa8f196d57f7ff6dd324447471f3c6bfcdea76d6c6ca4c2c78901cf705e52acaf634028a680240d8673d5a50271bd7c041033689f6405c7466853083ba0a46d49fd330eb6018a227423527a97756a4e0c84363c87803a8ebd9de7bcd4b8b431173e7152ef4ad8bd0e0d66ceee7369687a0359f20b086b9f95ee64f323eeab8380eea3fc37a23766bef8b7aaefb3e252b75544911243c283372473b50f8ab1e8ecd470127853cfa6ecabed15827cfe952c429e21867a64c10907bb0b82d3edeac3b9819e99a3c704feefb1188f18e4b840920fab4ef57ce1755ee5fc641288106e657da782db48095d8cabbafecdbe435a0c413552fc306ce2f398919b90aae253a00d361b42793b714a8203b7e4b1bfe47ad9ca7ad7a8e9b88c7dd1109279e9db32d9524c228325a2f1defba2a4e7b345a2826faecd0de05ef23bc4ab6320ac6ee28803fdc18d4c594869aba85788a7e54ce22ed62787d93eed7b72554ac5b47579c3511669c03afc18c81aaf43bb232c42a10eda2e3d5dbf44e5e4f48e918756c031457f604476f529a650a0b2a9b0824b6818a22758f349c120217178abaf7b7c7be620ee4088aa43a95664ea7ad54f2edf52165dff24442ad531b5503bb44a78483de15ddcf9852e7933e134551bfbb4adc61f175b771848ab1da75e6b1c2d7b4150abf3424fecb1bfef01d76209eea57a7ca39c94742ee34bec2ee961718b4c0e2964fa971549962393ab1dcb2790c9f07a8b35d1a3ecc35ca6343b453accb456d0f6b806d003a34c26c74cb5fd4ae7b5cac02a3a8dbbaf8754a09a4000577bc14b4776b40a82a1e3b03cad4a1482c9717429c3f9b9047074fc5a4f7a4a9669f9a4417bcc4a2e578f3af488b2f3a135cd7ead4833af2dcecaa949a11aa0f045a3e3cb1174196f8ff9cad625152210f470f2360013f8a091326057da488acdd96a0ecc7ed4fead0fc96bcacb9a2a36ce04d7ab34be1bc381532b6b412e9195ebf32f2e0b168150a0a622b8c369927a8a2e36f32c5fa00066d6116d1df13cb144e94dd8005f2ac00a38f98856abe246f29816f8301c10be07621b46b7bc1487acf271b2a5da82651528f722c988a301ccea7fa1881df2642da04fdc57b5a080ebb6a2a441ac10a8891e246f67275c12e1cb7ad67b8bce5ca037b71844046804c8dfe8961e005cef2dc1895577b195e3f9e40d7f528e2d0d28d05be2c8d2f47c0c124b7082fcefa3caba2dbd404dd6dbdcdd4385564d95df8d1341232947cd4e7ff9d41ab6c8502d28b019900b24a862515d21ceccf1913a96a773c1b08a7ae4e93c8a7c028d07f30f4c53b4205e92e0210cb143ffa1a6860d35f9a6a5c483a51283767fad739d5f4736e513c7221dbd1494facc36865e2bb8 +MD = 13ab8732618fea55ba6050a10ae4ad35122e5a79ea998bbe5c45d780509d2dc9290d3629b88c8b842dc761c8d01e7b41131f7408adc69c7a9b442c6bf4f6a100 + +Len = 57808 +Msg = 9a25e23e5f8fb5d5acaf7c4357126690952ce5f01aecfaf58193b204edc5f106f1e06e5fad8eff243a96178849f88c9806389e2943fa360ed2cf6b8e324f4a156f68d72943f54fa08192b010b3af7b8802e4b97d57843c07c075274e153fb13edb62258368ed2db1484c51c2e062bbc651d83dd6a0b4954a132def2cdebdabecfe796154669e22bf596c01861737d2bcbbbb321b64b0c83d939eca10d4f3c284a1539286832fb5327a99c9449f564ad00835a134eca05d4a0771c0e240077d6f8a98c00008c86f72747bafe4c1e8ab6cfff0910880addcd8394dd98a6a21641582f1f3aa3d93d7e70fbbbe4fc5157bf76a910a8167ffce4eefdb1ef09a6a00de5006346c69b575fa1201fb6bf30444d90fc31486ebbdbb16f2c396fc1809d833be7e8a2ed559d11147f4702192de8d79b62cb800520f29970aac49972b27757a9201fed8caa57496743d245aeccadf412974fdd5e51ea239fe3e40a71dec5d1d953997528ec1e5ef62841ffc47f1c1982f44eceeec12ad6498228215347f1a828fcb5d8469d6ac86d9706af0ec7bbbe68f448b33af13d3809e0017cab909341348625857a50c52c1a1a90c1f238f5594121be48c75479af5d97f08adf3b1313687a491b1898a5e0a81d80d70345518088071ffe288d98d2c11485ca52ca09b5516390f7c5c7958c842a576ca66f68baba1f0e21b2eef318b0e031b9caafdf9d7bbcada9e6700c862acb74e17029a37e53c3e9721b0b2107b97574e79b7f1d4243ffffb01f248374287b79d3e5068a21f1b0326da5649b16576ecfc2499a4b3a4697f798b44792dcf9b4c6b27988956bf04e8953067dc9caf716b2d84983d1ebf03f35c26a7ba3071b01fc1ba2225db2fc094ee0a2d955ac3517ce983fee59dddd302adb96133ca908dd7a6df3563b7d517b1394fee9a7207ddc6390811c3b966a355732bbb0d8294fb1d237e1b6b741bd0e47ce9f3136ce5dff224fc1b00f9c23993b666fd70e0e6c2993f7f1a669968b5d7c1bf8429d1c41da7b34562c3e6595d657e516f836decaaf202ca7b7caf238c320fb9e803270b618eedcc2f350693d973d4d4596fb00f7bd1744786d43db61e9c6fbf69cbf924714fda79c97de4d97464bfd7025b32b7fcdd9edf8297cb8833bee7b94da6cc76159182357ac50591f5e14842b370794df6bf8778b9ece2019340828fddbe2a6917fceee68832f325259176fdb4d60f37311e37fb71fc098905c9452a613b9a653e3925753cee35fbcc1d51f14db47cdf75a3b751f3eec88852013a702145a5d251f02fcbde21537db22ce104c63246ab8af60e6087eba7664292684a6402d11819c815ceb6f2d5119e672f1f667af70537be4412741b2f8b9d21d7a0749da99f5e6ade680b8a44215975422b76b1165445a3624e04a5e7602b59905b973cb2d0e77e928027112814ac00220e3e022c007d4f6ffb7db2574bb4df9a61160876117eab3afe50ae07525cadd8b20693c071a4677303286908b5ff5efd9c39287ccbe999dcc9cf896b4334266bfd168c5a0e8596774d4df38107d57cc2f347c44c67f1f183cbeccbdb4ffb13e3d9b5168341e78281c134774aa7fee1f04d8a066f4b5e5b34ebee9ce0de781b492d2d59c17291d39c47241eecff42368f9448146ce1f87ef9111f23015874e7a4e1c47c9f074c32cdc76710ee756923a8afca16cb908703d925c589c625b71ffcdcc3a7a269e0471e294374d8733a4f4186583515bfd291dd1029f5b7ad096a59087204540015b99655017233607e6365013998d1d8a2d10bb893905d583270c44c18b83c34b3303d34e83486a4fd061908b7698742bf6b6d064a823f8ff9da4490feeee26e81561cac42df59a77fe1678318cdbf65f1060be298f2e5b82850e2bc6dcccf1448d03aa6559e35d0cc9c565aa5ee02a9004aeb35c308d83d8579a5b9ab7a8a90d049a00b6b97a089abdeee75a6f4d776b3e117e514ee9f84d9fe956d00219b48e16754c1caf2243ae64f38bc6307c734d37097dcd3c9c2f7eb86bac1b6e98ba643d260b2bad8494943983b18234d594b28a2710048c4cafc85ba1d9d14f9e110bd33cbc48571961f8b61006f30f115237a1caf3bbb043efd6d42c5ea617a25f019329ee172e4932485518dabd01983249189597473b4a6616cc5ba8ee693e0ad1d76e0f0c85ac8c0fb11ecb24cee2cb7358f7593b9fa8b904aec0573eb6d99af92a899d9d0fabe5cb349256eec9797422dd60d7fd5fe73f2cf5ead7fb72fd85e3f6fd284d2edfc5e77a03ec5f73c4c2f420728220fe9e9efc3c3ba9c94022522ee7492d9155a0a300dbe41a1b707d4e43ccacf63aee372efedc535b1c80e0963655fe1c0e36a71383d4c35e9721eb6cbe3c6092afc13985a160a25a69c7a0b896dd7c7218244b8e0d1f2238571a97a4afea4de5f3fa2e298063a9263586fb4fcce844de43b12678f8f57125cfcd1a9cb570b56ebc0b8d81185fe84cf44148a24500f7af156f907ac41240a585abdcab5b4a47ab4c77b032d5bfe04d4a892176abb2057301b231fa1ad001460d5976570de1751a39c16ea554fe11959cb10e334d65eea89d2b837d59c94365db38402649d0be3a086af16ef2b4fcc47f6b774eb6a723de5c2dfd7b0d5887a353dae2af9b8293994ce6f0d65b5f2248471af54f83f03582a34c1889a2283e8d1bb3d6497f9185a65bd7d591db66f29f9841f0bc11dba41427086d1fb492d8719755939a626804efd99028181f571e38e772f1fb0cc3f0213be553b3b132f5ff5b228308e080b1e42aa250ef73c9e5b2c91091a2c1339a38766564dc24831784ebcd5d1b7675fd11e3a0f87e9519e98b91bd2849cbc512a85afb38ff9b0dadb0ad986a4890b246f788fe774befd1aa21e5db5e36a8d2ea1f4e391894612d38f135264326dbb030137f2d65ede08ba82449fd8c1fd4f790fbe481bc41238c39c4f6f9602c941a38e45ab04ccb13a253f122963a5bdc9d97dca2676c7c6e8530ba877449c0663ae1e890298469f5b04e16f427f1812c5f7f200c7cd1ac8eb2be305b498898deac9baeb3fba541032fe71453454a164097a76487246468209f22c4d6cb850c59d9e6853a9947f6c88bcf57b4509c81b5f0b118a6e09d25a0951ee6ae8cc791546d532a9894b4e1b25e578f9bec6159f8d52ccae043f46bab5ef324370fd8de7ab1620d5270a4a85d122ffa7e7b511595bf6ae9c7c102b09d375ffc04b7213a2960839c0cbf7f912541b946d07fb43af93a0c03d1ea307af2c8a5ec9c35593adcd538550bd3ae52b75773e3367c3330afbf709773121651488d756461ecb957218a00c6e44fc9636fddf06e150336ad35da49133ffb1caa0af03ef1fa5fea2584197d703aa65939db5faf25f08736f707f4e605ace7cc0bb68b7313da01641c70edfedf5359c64c662710d95d7acca4b299e7fd2e7aacecd7c9b2586573afb274921562e2eca911bcfeb5c6b070604ca253bf58592627d3eb456d2e3119357e1b8041b94dd16a202c311e9cadfa8a4573acfca5917cc5376d691413c1849dd5b2431431189a920e5058bbb98a6bb32592fff0638bd11daddaaf3787ab28315fe544fd68c7baa932b5e00dabfa5663738cd75b209cd599adbfa258183286988321207ddecfc42813c96184f2524d23a5bdcd9d6b48fcb1ad98cce6441c225bd6024015e1b52997480757c21b46a26c32c24d278204b90e23d2997279bc7dc3cee53e46400c5d6f35fc3d45852c18b5a126c09a23749cf7a719928d47881b98e466758f4839f22874147c7fde96f2988757e265be0d0b16bdba42872c236e13ace2807188c26a4b68ecafe1660bd27d4bd20d0ac032a5e3be512400a602f7fc8f05e96d703a4850bae1421ae9ff3aec7531baf9b899dfd75f6aa17a33ab4b9c113d0b03ad05fec0b09edd7ca8e59e5e79d366c335872b79e75355645380cb7ac9e47fb47dca00240071dc8741537f5bf043baf7959f1b340cc7ca4f84281a211fb8b1f080daeee31116b9db31cd405d4f1f01f7774611ae26244aac54059a2789164c5854cd3d9668da0fe908b793eb0ca1f6534920c130d9f580fb31addde6ac89a95c58255eb68e58492114a6ec8daf88e29b89938c748eb7f7ccbb8557f6e08f436d0957d4bbe7fdf024141fbcadae406120c732e5d1bae8099140209ac0db93b51ae6f9322f0c579f52559686c39f54ec8370636fe0e50240d96e1408ece43378d68f6df97871d1a14c778fcd87e9230f4413c97d2aa393381593b444d390fb0930414a8d30af189072e8700333125723e33fb9b0076d2759c66fa5b10d6836e0a8db038fe01a88f75626fbca8da15dd4d142d88b1fb81b107c404ceff2e08389b08b1d53ff4aaf4076c16785c02ca39caecb9a70cbfafb1697b43e544c807d8ee7f01c8be6c5f806453667c7a30ac4e5cc387403a4cc53b6b949de7042ce614aaf98759a4f12ffa341f460f28ed23e3aca27f9b622a2918b516fc1e6ae30fb5777f2bcf1909822c21d89d7b8ec097c2619089ffaddf4510ee0947d09b74e883ff18d574443ec0dcd1875506d63170b124968db643f580eabe756646c267db45e7cc6d8e4e1751d3ec3455f925c816799dbb73064bf44170cf6340c805454ec5daa3db665e1c9dd91be5859ca60ef1e273072338ed62f268c6dabf9d8c95abc97ea607449dd60db606a4cd367e8a69b34f82859353c9fa9b4ee3ca0f80df591a7bdcda6f33cc073154781511d8c5e7b6d8358261a2b0c1d10d85496409acc0807a4e3a314786f413ad6a4573da45d1b1b72700e805a0afd1abc825e54e8248c2230210d0018d3d24bb8045a5ac94916d9360e872a2202c65d1b444da78ec59aa1d0245958a68482c23c4fdef773a8db215e92345a1b8a05327528f8bae6f5bfe1156bfc80a9f7ff3903e569863bd2f47e5c998a92bf0736454a9ee3f1995b687a60468b1a8bb4940a8f536ea97a7def6aa082ee868510d6001c14a40e1e5d20d851627988d430ddd13f1872b3c7f01850cafcf497f62d60fd5a389d42de718585593e3c4e1bf35907a3a2fa479ce02bdb5c5621398ab3739795695442524ee2fbf84867ecbb8282285d9189d771b48664a52ce8fddb596a594e254d8f323bd5b6bf0f70e73b54e5bdbd5285d5dee3b48765ffd0574075c1ccf50b0d7bc6ceea500df1ebc023e0f022536492e54cf432adff2d6bc852af266d2a7908bab88e7d2275ae3d0a0dbd3e10a0462568447c8d62d1641fe39a4be4b44efdb3ae5fe12ad87672e91741502be33485a1e14dd321209d02611b7ff2a93cd317b2d9556d6fdc911e748a7730462470a1bce2d1ae9a71b2a6d3e28c29d05167457ace1199a89945df63d607e4195ef508caef685555d0a2bffcdb4767f6ac7c057fef1cec81a915543b8c8bc221ed324950698a6dffb7edbc20682a2378a881d636deefdc7786700b70107b70dc79a8d1e1d3a05ed4b21439f31bbce2f2dff94633f002fff6bbf66385f44f76b56ed940f3c052be913986a7e958683ce1bd72c3fbd4eead8bb4190af1ca802a594733f50ab219f391c8e59487b0c477c1bb6eedf2f01b9ba2f9485057e5a622149d598cab2b5e9472ea916e32b75a5a1f745e02cdd40210d91614d20ce829f493dbaa76399e992791191ab39ede822a5752b0c0c0e34ac39a74ff1ea534a3f8437cb7304a7e621398cef1f31098d48f15e107a680c05e1a63a07784a57d8cc3901b0049625d41eee686b7bb2c68d9eeb799e31291dda48bc1130ea272054ced2611062ff5bdb11ff6dacc6a66e10acfc907b39358adb6ae4f673506bf7e7cbb620939629912183d6635b08f4473dfb8c694f9a769b32ce84af78b1fd24b94d4d06e2a7fa0fd1fcda121f4a849a3d1204cec35cd39704fd0605e615c5eff1dbffdaa59d5c1c11027342a1933eae3879ca857e8833c87c7dd0c06684aba0b7fe346683803602091f09ba89eb0acd55b9485629268074bfd84ca89f07977e353c547025596f07e3da04437e5ad03dbc59e50b6c3ca1e4f895e0843aa571d29020c7c1332ff174c4bbcda528e9784796e1086aeed47e604d3df61ede6721e4f32ff521540ba391d64bcaa8309fea330bda1b3d58f5ff2fe657f53c34538ffc84f3475730f46da5411164133e850e4942cb854a51a80c9bec6b45a7e374a4626bf3232d70f237fa2d9603b0f9a1ccd1643cae5a82f48dea87024e2794cf465dd1b7f269bc0de9d6c16010450afd0d1298b5fe3493e16a65dea37784ef6e5e37dec81dd4bb4e6c8225f9f19b18a1b75507bfdda22b778b541ad62a859b58d536b9ad0a3616bca64682e9107acc93b4e2d8e1b36af2bfd8ff6223cff3419591a38bee23577560806900b6d4aaceddea0134a4e85592c03aaddf13cc96882e7cc67b14cffe7e40e235c6eaa4f2c58743fa438fe42bb08297a8b92d8a36192a7de6b2a675f5dc66b5f0fd0cea1b5a97a6142c2a0fb4f70ed93617f9719b9b917b4c572c7f0235dadfe3cca50dee3417fa9818fdd2b70c6be6a02100ea8cb76b6041932e54ee32a24a565c3c7530fc0e29ce2e9193fe9aa1a82e01c95bd315c1130b8e355c807ac8dc90d4598aac59851afe976dbb4f47b90527dcdd2d365c9a7cf26fc8ff82b6547fdb5d85b329f483b5707a19b373bbbae7d5ddc2c97e35ff83405f70a5ba8d4c1a7d1f465b6e7410e26c001ee2329fac357e2902957347f7103b85b4b6f2a8ba95bf4127e744823489395103af539b98d76beb25fbdc3b8a0b2d0a1c9af0aea5d8e9ecadc073c6f89220945084a05685b4e449b16282b8c05c5c1530b97d4816ca4347624ec3e763e569f28ec8df797bb6306b30322e67a2eb11cf797c601e1455157bcdf9fc8e7e6b5c9244e2d9ab82c4997a29d2a6ef37a0935f7e4963d7a760a6af762ae562500a409dfa3c5695a3c6659e25acb2fa88642ceec7894c1bd7d43f0ce647470ce1ab5f3a383d1edfe5a5ddfeab271c2d9b1d22a4dda5e494ad9728baa4baea333937ff92874df830514749c343abab327ab5bea84703f3e83092a9e038e99680619469cc6ed4ad30ed95f11475a026b12d1248238d0d41bf69ad0aa62b3e139a60ace511763a0688c3771c1aca6f5651ba1e083c382a95c25ed19235041f282b3e65ba8925e8c8e0dbd614fdc97e03bb2bbf451ccfc1b89819e48ab54bf69fd803a9325b0644bedf3b981fe4fb36f49788df49eada3c73eaa2cf3a4e892a3e4bb85f93b09eb7af2eeda786f7e6fff38cd7655acfe2028c60ff7bea264423ce2c656f26af77aa6275f9e991601442c6422239c1f36e7bcba13acfe2680749162210c033811883a05b654887440d6536627043c67d060ffa565bb2693a5704e0d6c33c024d09ac31883babb2ce57d20b94ca6bb0963226df26680ec9c4bebcf2f085cada3cd38bdda583f958237cef0d7f3799c9657b2844ba6bca482fc3d915175f520576fd8a6c5a431cc26e042604ccbfb55713687defb96bce2fa3efc311f357bdc9220f0fa54e85fb38d575deb7226aa7a3c7828da8cc7102c647c8e2ae2d78f16f689184512a507e0180597eef2a4157f5aa4fc1399b844e5444d89fb46dc7d73e710c503895ad8d67983770748c4bad95e4597f69cdac9a23c2a760ea5a4e57806508db2238a210b045981b0eef9092ca9c2830ff0bf1ce79e8bb8e199d145a7b6c0b8dd7ba3aef25ae03e785fb19ecddfa423dc4fc5cd29fde9e9209de21c679ac9fce1ec57a120efc003ca059eda51627310c8049f48eddcdd8d282c47e85c0504b06c1fe6c62b356178228b114a3bd4b7d07fa99c2ea7addefb84cf7327d987e989d860f17c55be5d121e6aa97d01a8dac95fc95cccfc0356dab2e2045984b5e0cfb36a0832450d1b5819fed7d127516481d4ce51c23f5feda12f2e7c0bc201a31889958b968d8414c0b1e22ce53150ed909b330bad0625fbc575ef3aad35ed78fad76e0c0773c5d1c252af0937a439ce5c0f91eacbc4f819de13bed0bc44ec0acd096dfa03bc44faf388affd36f47e8f6aae658fcd1038b0418507ceb7738fa125bc2fe629bb73c8dad07f8961a691b932f4286b2f5c8a67a64674953d464b049b4c0e50d7e5f4f3cea6983e463f15d45b7d450d412e4fa862d46fb4ac31908d745583ba9ce02ad46597847c63226d592aa655c6c0fa0aeb0dbb63bd92ca02a467454a93f72e9813361fbed436f51ac0570bd5581d444eb80d67fb107f7413f1eab7bd6d5525cf18969bc1c6402ba092371a4e11c4918d87f876904dc0c446fe551946b7656a225d2db817d30d3a9157616e2a84456649e34543cdd6053f1e125cd680f27660546951e13b8afca66f885c53e5301e36f6427a6bfe39cb590be6589bf6bf26acb7c5b9a3a74e9d038d9d8e7828a5bd88253e1e6bbbf9718682d2eec6026de4a3deeabb7bd59e7cb69e0f8e574f45b1de593e97af9185966c257075e15e9f3eea3c50ddd6610b0a53f376c25dd3a089ae04bc7cc3e97eb85e6647847a45c3a3e45280974fb414c440303bc1184046b38bba3044255e4545f1c7b0910d626ba236a4028e44594c492fc6f711033f98addbdc4274605a69cdaacc4431f73f07c835c35f1950caf1f7574a01289b0c16f722fd6b83f1585cce0dd68addd43618648612eedf0183d65d7b1c127e6c40522e0590040954e2beb58f98fd0b20d22e258c253a25b30e49e9ffcf8388e376da90d836b46af783d0129466032079bda989dc7cd9a3f1e4cd3b59d6dcee9d1a00ee3f53f52f75b66173d0d045d42b332aefdb7c45d05a81e0c01dc4a705f5a475949f6a3ecd4be4c337b95a3d9cd1ed22e62dc5f711397024f6a01b4a75899099026d0bf9dae6a9760cb28632c0ea4611fb37cc760d3b29fa6db53d5fa3c578fbd64c9bcecee28f0a3150c6fe06f0c888ad8e024b2abc39e18391bd5f1735c80e7ea2ac262fabeff06418aed7d5620ee76b8509ded0590a6ad6da2dc1465708517a03bf8853bf46b9038ea06892da63ceb3d135a9b48e3606e5f2d11ec7b5b46546e4387e01994dc49e074e18e5b6719f24e738443dc827462f7079c001be46aa63c8c97f8fd64fc3a2270a713482b2e91d3b6436e293589921e77a6d8aed59a15f25c4f574d2e706ae7257fa15cba22d2b525bea397c64704bac457fd9df47daa78fcd78473b8e3e115dc92bfffdb9ebdda081e6a8efb58c2b437d6f64f0abc6cb6b45807d5cbfba895dd07f599584a592ba78a4b769e61d4f5184c4b2bdefe6495cbfa69dd2e60c6507007cb92f7cdae90492bcfb7750d4064afe0859b3aec98fb8be431f1abbb432dddbaca5281d0c4f238297db9490110e843bb2b05e42d12d13a3fe77b08b428136b477941bdfaa437baabdee4e1e84c6b1d04c5d3a56ada00213213e20ef27cec63d760c875f4554918d978a10768fad486e4dc6c454bf66f88e63e8e851e479f0d91084d6f65df0e9adcd6568129240bc483f7388c777005b682efe735df9214b19ef83a74f64b7087dc7d6d18d4d1f71f089e9f429750acf52faf55e5de64339725b8f54c4fa0562900f74c94110a82e19b59092e529c4b8b1505405fc3c5e4074fd1e8bf17e6a7c671ca5dbd87d6935066b1de19515ec9c15b79106935bd0f4844ca7995f6254da75781065bdf3d13b68e2d86cb3c9d10df2a932dccdc559ca32b2b129596662f14d9a1b135c147e8593e566a0cba62072da9dcff50619473602c7d1a899cb035541fb4c514d3fdfb829cb2f0a473b496f301dbefbc6c837cc77147f937b30c47b15242aac0c0663478d0cb815a109ba578591863daa428a01f1f11166781814d719ad1c7012e8a7b85032986f7391f1c05da1cc470b28dc5b26164dbe3ae172fdd1eeb869fc672b9ef5d5265449549e3e2ab6e7b473dbad4c65dc6af72e3d6d53d07174e612f25d4ff05d08806cd20e357f697ee27eeb5b6a43bc2fadbc8c728d97cde881011abb6fd242b550888ac02ace01d87d76d88519424dd25e704f10ef8a6c69a74160d4531e1e936116ff62928938aad21613b8fdd40a1965e405d70e4ad59ed55e4526be2659492e82a0541143765c7cb73d457c9b695b608231137e3b81fe97b23820f5ad7b3d05660e230b8f3373f9e4a5d909eaf41edac5617493eef9ff6ae7ca619df60cf5a23b993e05cf0877c628fdd24a5522ea4148077903d7b617db596 +MD = b7740e79c299ad0f5e741ed2db715b7383cc07bdb8da2af0a865623ab66120673518f9f667a1abbb6b348a14b6a9c9ff64cd1f39aa06a1c8ba70e4f207f24608 + +Len = 58392 +Msg = 24d8068eeb64f92af9d611d752f1951389c6dc26d97d05057252e87611de4b75d3985ad64b9b512dd2aa7ceb1e7161c9170d3c6ae5cfab3b4e3dab9f3f5ac349a8287fe88d6a200a5bae923a788b9e6c1d28619c68fdfdb1adde8ea70e3560ed4b8f5f0cdb5ace8a3bec3c0e86c8b4c4461d35038990612e383b79d8a5f6892b63d5e08a5af2c3751a6c63ad70af0c9937f69ee9710f4179975e55782d25a8c99803eca934ba6893a235ed605fc90cb39bbb86944802045b714f08d0cd4b2490941f6ab3913a23ab794ec46f7b9c1dda1872d44d35f2129c6e147c28aeef6548fc3441ee98fb5d8747c2ce22ebb2a8d55625705c6066d30437b797c8f799d3b97b475ba372847fedb596f5c1d893136dfedb4109f2e6af5a744043f7d1d1d6aab7629f19465defa66ad41f9369c5c76ab89d319c13fa0e68ccb567fe6420d6e5588cf59a3d0f177a0f8436e1c7d22d942b72275cea2b58f4e820eb25d70d3b3007ce456c7f215e304cac21f31942acb200620c93a000f5c77088b6b452216d546c2f77d8331b2b92c856c811889bab8edf75c6875c024da90bf6b2f3ffe2d4192eb774268286e8662c8913833c6794ee6eb43e8047b7c8626171c62a04dad846f56e229e93e8fc751f4eea905c2dce9b58265cc889a9cfb91b01daa08991e2a56b5d6a888fcccf874aac35821076c15d43d309a64960c877e1aed79eb78e58fc368b342b9db7c96455abdc9f82c9d5fbd8c42b61af631d645a81a36cb559a414fe0069d0e63352d3e753c730d7ae723fbe00ab42e53a34482f812752ac7a2cb56cc5efbf91c7d29da8addf7c3aad00ef9d8f7291106d77eb08b74b98c4795aa627e1b040c7fcb18a42c00acdd14fe7d41f7a67965b844c158b29f88524df95b1d85c939bb05857625a943169c41b8fb6eac87198ec081d8d63e11462f534449c273f7f1773652ced9b323d993c9a615da6817ae1eb81511c36e788775efed130bb915efd39ab99f3aaa114a56152c390fcae69b78175508aad413d0c88c7a3353d5a179529b1043b32e9a0d55acd1e1993562663d66e829f6ff91a699b16227354a292276cffd68ed913c7715093dbbe1581982c11f34f22251706d6be74b6b2a972b7fb291d78b4472673c06a2a60482737a95c5a8d1fdd76a1eb9a1968c7b9e4d16e5989945075252a8b0bd11c177e7381403adbc25a960ba1b0fed57abd51acc89f88b4eac8991b28f79aacf1662aa166450db91d68168b1e3d4a1a320042a95e32d1d1aa47e7d0269fb5242fb71259efa11e1f23b1259f217ac60f19f854849b0f7c08593428ed2f6ba4616071ff42233ab5335e9e8aefb14fb9ddb60e4ee5871ed18381f924194843ae8a0bfcba040af9191d55950f22d6a46dab91a8fa732b481767a9fda3fd7b0f1dc7b9c00848acc6940690ff7ae0986128a233301ed78e7398df5aa86d41cfb73742f125b4b6128a6c16984594d3006e33ea230c83b9b8889a101b62498c4d2345203b9384f5432bea74f4cd25a115b3d6aae9a6f1bfb270662574930186fb3b8e8c1f7242ae479356492c01f5f2e018580b0e64309483114444eda35bd8e3e85cac262ab48827a8f8bcc948cb6f6786033419b007de33557b960ffb202a0d10f5a8d723a32cea5417f6520971bfb4e31d4d92f13f46cb235542610118237f9ca2a9bbc5d641987efd1e4faead8bcf19ef80028ea073526218706c1e0a6c4375abd7587917703a0ef05d489e487bbe0ec1f3f0f1f20ed0fc0d4ab6babfad6181585939a52c61d6eb39dbc6410a368bacdbcee481fdbe4ed87cf5c93e008ddfaaf158e3b3debb77ff20bf50ffba653ed9843a66a6892cd2dead9c2d1093b4c7d7bdfbe009f5262231ec326f4022afdd7f055fffc85dff67f6e765689a40cb21f0056bb611394ce169e75baa6c08bd7285a664364f42e0120874780443d17af3dc11cff03172d2bb8f576389eb353604d3af7194a40077ddfc9afe89720c684785295013d36763b98c8571942571c39c5168b0a02d5f6bcfbaa21f7d91bb3e24d29516a95ee1a5e146b9ae5483830c41e71947e2532765f02bd4026a07a4a393ab9c483a3aa8403da63b41506b35b8fb7d095ee27e1f0c493577d0d73c90409af8880e4cce84ddd594525310464d70d2fb811e29171009e1c1d5b04d9846bd44a19f9169843d24aff9470c1d7d94dbcf49c9ae3e84c203c1b834cb538390c1968f2af918c39abcd5bb6293fe76d2a2f94f2937a92ffda3ef00dd49716534f49aa8706ee2f4644e4fc4eb113b9bcf6c59f6e9e1f37e8991758318512fa6fbff57d5bb174d7d638123fa2aad5d5352e2f52450d3a3db2d745b272c0b16aead8ad5ff511ce3c75ffe5b476790eb0525acd7c2a73641adb2f4a7d663a0ade5123c1d0c7ba62c3a206cff92e9e16d1b0e7107b93631555ce1ba637703387cb4f1be36e681ddaf3e6d7415c3f9c96cfcd6d98bef45ed6850806e96f255fa0c8114b72873abe8f43c10bea7c1df706f10458e6d4e1c9201f057b8492fa10fe4b541d0fc9d41ef839acff1bc76e3fdfebf2235b5bd0347a9a6303e83152f9f8db941b1b94a8a1ce5c273b55dc94d99a171377969234134e7dad1ab4c8e46d18df4dc016764cf95a11ac4b491a2646be18e4aff936a1f8243f203a5ac822fcd6ecdd9690fd258823f0c899360e9719c457e24723a79e55945578ed4acd733bcb7ae0290b77c6d0c47ff8cfdd286bc5356a98d786738dbe076713ae2537698c6f1fe1d1f6a4a565b425b9398f0628db99a784cb9218f48405da8cf74aa47a612a324f3bd2d245a96b887670cc1632cf69b512bdf706676a083651435b732a7c9558a4c130af2c3e52fedd0024d72e031e19df08f5ca5ab296e0ed2ca8420e1129097f0c8089cd77131f495229d78f392f2c56473ee343003a80dd1de19f79d16dab3a6852f0adf6245048013b85bab42582f4f332dfb4d55b9c8d9177ca123fcbe4637f2882522e0f485577ea60551699b45797722e3494727a9b21db704bbedc1b86cb61ad3ea12c4dfe30a705c2c2e416ea9e6d3d26e037c162399d20aad116d720b7aeefd7d203f7bec601d4a86bad411a9284ab102ae3f79f633d39a408f49dadce50a8c2433edbf3a27b5b6a535dc983fe68f694e73f939f192c49bbe90dd59a9a078662773551494084187d2c6df6a34c8a8e09a7831bedd5facf76d3bb25838524075ce07ffe3c3abc8a7559567ef4f759f002ee56f708141949596b94f3d52a4689f6117739290b752fd76cbfb8f5a967cb051e33cb7a7e1835d80313c71bf3eface27cd3a8bc0d5e8717d9024b21bd245d74c9a1efb15e6813775cc025d47c7fde9694fdb341eac90ebb10b68c05cd2045f67319fa494f9970bbbb22868b2e87ad86fc5def771e554535c655221e33dc02fead0471aecc2cbc19b0a36f9c74878838158cc3b80273c91c4c5673d78bc822f1da19dc5e5e827415dfcb57a4f90ffd2e72f2b67141b4f8e3154317de5f7514748c9290e4714b37349b22c52136718ade87486e5f5689530ed3a3747f195355fb273735bd9ed7640a75123e9d876c9fcce4c621cebb716603f9e0104633f365fa4c50415641c788ebe0422a769641ca7dfe14974beb0db076ea8181d049c5d2f66e763a5b048c147d7f1b2f48dda1996645bc25535faeb0bc38203f89c55b1b840021871851a5a513a405a380b80c7b1a4e256271a3e4e5686514afff3113ae07a3eace3ab3a4a962f1aa3dbacfd2ee1e99c8b5233230dceff407699d07901905bc2a662e94f99fcfea7144538fa560c79b4ec3e49522f5d75740e2dfc340db12cb78e5509014f6dee0e35de771e481b9d50fe542372bcea32189a2540eb67293644ed26d1fa75d048788e0f30120bf79d994bfa8b2cbd5c7c52a2e8624615e2be92493c0adf130c550ca83e2d7da786c1b65a994728399d9c4aafde2aec21c20fc92dff7c5b2f0b5af30ad5340825b251cfb39a200d3894da2a486f628692b370101ed7ee14d3b4a2543c3a0e5b8c62940edf63de84c2297d17f603d0bb719c288fa62c29b206ef7458c7d7831de47ed399655e4934e044cf3b40023e34c564806f4c66f6ded1a4172632125af635ed5698cdf228c699cd16beaed4729996f5c0d898ed1b403abbd4e805555d9088996534a08645e1f6ac9bc8c8e13491ed3630f1132a607f4c1df3c3c9075290e46948946484662efdcaa67f17924ec4d10f17e344838f430cb0bce1058f02a1524546e2a4535454b80d7e0e224d86db4a68bfd5b4616e36845d766a41573569d915a943e55bd7fc2f5e6d9b717ba67e60296ef0e92dc7febb0d6b8605c6b29081c1b7e1b104b6ce69a6b94f8d8574541c3b6d5c6d4d6043b9a6e15bda4443bf5232b9e48fb6bb716ecbab51fdd1b90685840440c82b01ae871121144739ae9e554ef67408d9ac8e46b78bca49c93c3ba3ed7ac4802d74e62c3773d7d50dbcd491feb8b7a3d552ccfa50a1e1fad4c79c7f5e19121fbd8094b0ff1ecc0a29350a0e2b45d8e81275d4908034bf975920d120c0274f2d42ec601c506c1d71f3e1e7d5bbe7fd5ff9dd4d132d8e8ba8c210818ff9eda6302481f17714a3ef8fd48814ed98e34f91f051e08841f56eb6765f54d2f3b33db2ca07f0c9320c6dee35f1385ea884f505609b35f9a3b29048ddd5f4f394c13c3a9e46041a92efbc157ce5fc31d5111743b281f36d3b0d18e65f3a06f9c65ecc510705d6731c94078c132c086d05d1dfd44cccc3edf14d2e18645535ed70d3157d6d0e0edbb84274dc608e031a220d733f98444c80adbcfc6754ef26d67a693e493827535b4e432b8ccdd39541130efb0cfcb0372e57a0a75a97d084bccb656f3ad1194dfac6dd5524c0c267e9c019a0c4e2d92bffd7425a7a95c0f5a84d12d2da9eaba5c008591a2ca324211a117989eeb188d1fc15ea3b4db78721a0e7b78cb008a703b5fcffa12dddc16bdcee74e012d183d12cfae0725d63ecb2af819bc84478d30ee28b1613afd661eb383f54cab8aa92d2986c6b283202b94dda0407ac1f54f96f4e9be89738f6cc4c35ec5f7169a47f7c4654d48552fdb49c2b564360c805dfce0115bb5652a5c934dcdddefdac271178409b64b047baa647a960970dc7f44ed104e2d878844b224c34fb18960a9b0f6e8e2760d299a356f65c0a4bdba5880d235ee8872456509d3b452c57620a68420536e21312ce1f8e504d3da6f1e928e66a17110f82511c03a91759e18c34f672e642b3c499709514fd83dff1781b3e9f4f3844babbfc171b40b36b003a10ad66b9b981ba8e076fb1a606d97597c4310179c869cef7e0aaafa52048f99527f6e825a4363e1a19142df3df1477776b69d491cf67945d833b858366da17c40037bed20ab9986530ec508b1577423f984ee03e562854166f3467808e07a1ef23d9b169f3f21096d35fe217b0e91d18d348ec29639356492cfb1b449eb9de401945899268c9eed68bd5aa3eb9544f2aa5bfc2f90190e11f40fa6978a1d717dd69e20ef46f26794cdeb671a9379f219c951b285735073ec035971bc49c4995ee9b17083813f1fa21566affff32b2db972cc4e7eb09e0b653933cf7cf99f79d9c384e3e055912b97c7b591ce9b375c542f022c75c84038f01e050c7429fc97a0ec7ee79044b71fe86d4ec900fc0d026c66b9d8f53ae5911f1a63b51c4b7a7726ed05f81ddf0f71166e989221864ab484a259e097790c8864c6c645efee879cfe1db081e37508a3945429a9cada4ee71f7a58bfb7131393439bb35b5983a27d791715318ba7413c04b6885c4758a81eaf573ce2ee89a9564e11a152039b599d3a619a7360f637bec9fe2b463191d4cfb6b17cd6a85d1c25f6b116c658962b70a485c6c41de25a8066a388d40406537eb8119f276f0e0aa6a0028a34d32486ac69dc10b02cec38455d3f37a25936b2b046102a41cd0ce33d0c8e820a0d96f984dd0d0ea3e8844f623039ae1d8b9360e8c305a4a22cda447d7ead84c2629e02ae9071172c0b4b0e5b622b52c225bcecacc19a74e519069cdc98f818fa6c7a209df6a0d0b4ff9103b5857ccc2cb213c450c42731771c125adecde6952ea5ebd1b7a234b1eb2ff6bdf4eca680b9bb2876994d3450d4a08e1cf89001afbb8943a4a01575311b26fc9b9e3a4106f5ab7b71cabf5a698a30ba41be71c1cf4d911207dbb31ae4e17f132b15e0d4d56cfd7d5489acf1d2046757679505bf5a3157e779cf1d6e33ba92cafaf062ca628c3bbe8d4aa8b320df9ec5fd10ae52f723383488eec717a422fc9479b252aa34dfe0bf8a8204e6dc78518680b5ee151c8fdc79a3df128fcca736f035d012ecc2e486e0eac474357b6b2a3980f9477e40c39f375904b23f03a3bc7e9dde261aa31698c30c8668f77434732f8c5f4d16fa8b0aee16f408bdefc5079040412ebc4bf280e69e4c45d55d40e708e15c6147a032aa1e7c21a884e777a2c59b8d8f3a2414e9cbee8aad37ad3cd0264e8516b8e856f748e711f41c9138088f2e27ba1cd1da3dd39bc60196da64d938224defc329646cedf6598dfd6382c37d66b441eccbdef7ae1482e58b6b756c9eeb3b5efee9e7857e084cc89fe4e44de0d397b922787fa1abe755cb8de6cb04cb27b1e6d4a05ceb89bb70568c8bd9128a036682567e58c66d92931606c2f22c5d666619ecf330d9918e789a4bceedbba964852fd133e6c06394df679e86775dc605bc5a9049100a15efaa2646247ea3ff7598345b3f963a1e6caf42adb7b71385a4193b671856e7975da95d04331855dcb504123d08039dfe986709cccd5de82cb0214ef9f781ec9656dad12e61576bc1b15d5bff13ab66a496bb5f643dc8461bc858d7a15d3d938369d314fd3598305ee9087429e8fa1e70e600a61c8f82b7e34b2497f5bfc676ef15068b2936775e04da99ed45fe7c401414cb605e4919a803b718f27fa5d90149e709b60ada513f43f48649cbdaae55ee91902091e0f9a10d9aaa699795c1cd243e41384a97d27eacc551fc33f40cda60eae3696ffdbf3d61745d7fe6063d24fea94154410567769fcb818706e124482b8f39ad30e5b6d79fc2a6a7e38d97b349a68ecc86997cd1ad85997ccd086129af0d075e9d3f8cfa29142a7408826df285c48df393caaefa56720e3ffef05fe95bd2d11ffd61ae3f8dd73d56dd8b1c6d4371c35bf12f6a5b1b2f6463053f8d11b28f2b43ea02a6f24e8a63e2cb1e4f8df33cc378171e3b9e6bfc1068882c553d63807a7ceb88e3ccdbac428a699263cf258402da8e4d9f1ee986b6c2e06d64c6bf55432d6a6b0129c5cb3dc031ae05cb5af615f5bf040176e45dac04a6791848567c29c7ef3f7b939d55da26abc781ecf3f1514c31f80f111ccf84a062b60c3ca97372ff026caf84b2da8c10306574be910459508f801487c37ab5188dcaad0e28c9c3151c793987a6c7e83f780e5abaa2bda2b51032ce35a8edd1ff801d674764edaebcc5eb962709bc62e6eb28a05bb97ba1cc6c9678c51d775fa7f234e772ee6d7a58674a41bd2c2680b8f25af22c35ccfb091d11b09091c5b2b45c979a1b15b7da7aa90bb8e4be74b628360bacb6b83ff31d7a3b1232c6477fa717bbfb9a8b5b3385e3b68828114597b72eb15c65b1334e5c3c88fa25fb8b1ae2bc28889bafd60a1cafc13be1c50799d834f26db3a1455167ac71f4e4c1ff1919d243cd7903a6e2b185b220bc5a49312de1357d4b18f4a0a2728c8ef9ba11fe9ec2b436cd174c41b6de0fe3124169020acbf0f78678afb09f074f14cf44623ff435f061026b34abcf4140ff8e0b1561015dcb58e0510505dfd32042efd17e51bc847eb8a3700e855d27ebd28a17ace2a40f1b3df3226314d77ea685d611b4d85a36b5ba4ab62862d32a77188117be0b55686703397d68620862585a1c65a4484fd53bf242be20c8d3a1591e1d6bb75fb7e235451db27371f5169c3c2d5ddb061fe887dd35e8762bd125287fb98427342e151c703a7222c9201418a8735ab7b65cd91ff79ed597105e3e6b99e0019c4d3a697310fa3cd4dc1bd3242b98ecc8bd593f6abde7f601fadd5579192b5474ef6f67efa3e763283f3aec653208a49cafc7740ebc9bda555fc0f2f759e60d4fbf2f98d8a58c959b471fc842584cf291e21a2f626044e2ffc3bbaf5cf8ca9c9b111d64c4a254348c984cef420ad0574718b3ba0c355dc06fab3fd320622372d5a99b643a06d8d09ab724c9fad63d533aa836bc62c850c3339a9016d8229b308ddd3c0fbf5f74ea44083a00c326de76db1515af1c85c88bd9f68ed2eab68c46222071dfbb28c2f1f7201efc31994e22a6e3d2fa8ffa1f8ac1637eafee9a91344117df4cb3df4d8842832644dc8a06e72c98f1374391e0309855d2063a4b248b5927c6ef400f7f0db4a602431a959344eaa8e2ddcde9952dbd323b6e7444c0abe8d4db3fd615c202abfd15af72286dcc5f983a66856db8d2aead1d512313f0166ea39ea6ecaed0f7b71cd2c289df10ee09eb6a5a00aac5bfeb1afa46bd353d6b591863cd0a27065d5479ec24b816071a6816f530d60d3646010044c7a935031b36a7cd0a951aecc41298b45e8369cad1f8af6d736c11a5157ef1af4c7d7fdb9695e65cf843f6feac5ffdbdd88246d6b53a2925aa39647caec3637c5db082317de538760e6d47b676cb1d7b1b2b39a534baf8d04dd45237626cda4e73d8f8af31a322cac597899ec3b28c7eaee4bed0c0e9a2dfc6b3876fe0d9da98175d2faf326e49ada649393213c4af3afc4542c3fa44cbb6bd5d50809a98c8dbb0c3b3bc209501913908d2fad7600a229bd36209316ac7e78a486a04003839abe89311406cb5df37f63ce3639f1331d80605991b16ba1c04c5fb2084b226b16b2741b4f6875f56e4567be6f6cb6c9addb35254740ab15c70e8ec006d10e2a4abf5663b28f0effd48e24c5a4efccac9862c50309e9deefdde7ba1a637ad0aa7e0bb57006249e626b81214c9b693bc2263f9759a0540d1748ff6a27e6f06fd1fac11caa12ce2e087c47e6b91d830cf5a1973490d5284074507d264f59d8f38905071079a036c4d84e07fb76f2e5462b4f9522116e0d7df03f8a76fa82dd65b9e8051b4576036bba2beae9e9e236f14e7a5eeb4333adce725b4de3902ba5cc49ece5c4765dde28965918377cb51e1645681d168deead3ae3eeeff4791ad8302056cc93741d6f055421b86d963247bbf861f82c5965b8c9293e97321e181f992871e411a87e5d09ddcbf2139e2356eb4faf17b40e6174842d946e23e5ec2210488455c57848513c179ff0b2fe4ef6ab3299a33613aa8972d7379c513760889c68d647384d42f2a7ebe5d7d11d7bcd058966c43bd208a09c107148447d3af94670b0e1f09036e95141e4d2f9637483003c5fa14ab2436108be889a821d431f15495a4b77a7eadd4302e506b13800c1a433cc63eb1b2273c0cac5bb9581439f11d91cae55fc26778314309e8104e62ffa57f531a6756f7fcc1d70d3050f022442093e3210f5b45f1b610dc0f12fef74098e21340429f02c329ed10958314754b1c207fe32fc5b3c12d0c4958a21e338dac199948c9d6e23fc342f86184edbd765eac13b4378e2b671489c44d3438a2573d9a678c73ab00b32c9d472cccd8756666ab210c9d112763fb3def555fbabe1debc8e083b68808dda4406f4fd181179bd2b22a64e6eb32484f8d3d296b210142354996e7290a451fe8c0e34329641e771145b2459b98d6849ffc00020d17f67488711cff418e5fea58b345bf3afe1498a0ca4b3731967e895b0f0aa7bbec181573f3c56476a0b3cd828bf91c9cbb74611fd447b22f60a4f70f3aaf62de39e0c57636428f5ecdeb59e4bf9fd3a528d870dce84a3f1b93f43e2b0350cc0a7ddad51dbcf708608260effdc28c8d0ac29b38667ac5465c8cc6cf4cfda15bc71480e4c8fc5548025aaf203c495191342537384b004b5088c7974ad38e139a7aba5d7506790fc6daa3307b3e988198a7ad56f1091d3ef616d100016d3929f0bbcbdb0664b7791d40189f5163448f0bdbd764e31f26329f8d457bb358934706f0c583f9423c13b3e917465348d1fc53474fdb9f0bbfa8c5627184a144011d35c033e2fe4d7b72132c2bcff16dd53c07805335753d4e14002cf1958bbe16ff1590936265e4fa16c38fc286ac30a2d0b10dae0d16525606c8435238b305597f2ee8609cc0973c743d8a7814f43fef5cb8459ccce2b96be3865c0fd8b7d82d1fda3e27fcbed2c70cf9b2b8f559f9ff32b5decbef7af1045cd2cd77101aa52 +MD = 1c0c86f99e9262e28d3403a87b0fc4fd3983f37bdff3f1cdb4413852a502b558ed81c4c5e8f1d584119cc8a4619c7e81e02d0eb1bdf7e6f038023ae29cb5ff8d + +Len = 58976 +Msg = 27c74d76ffc8ecf7a69970c8584f294b04ee9a485e302bd630821e7ff050c49f9882f10db247adfdb2112c2589e1011f77c48e0f219dbf85e326f8a567324b857735efd60f05edc7b7e21d260fb551c8ac95d02c228f065b62a77912471aff236be62f193f8c151b5b152a131253820f4a6948e78a8e6820550d8b10b79048431d9f981e6a648bc246b13a33b944fdbafa49de8781204d9b636115e5df1d8eab3467142cb613b98421be37cf2d0f2991633b7a562ecf1d9535aafedae848392459478b8c4e2305289445082f963c6d5e2e4a049aba2240d673f03037fa9ab1763445e387581cd978464c959b1b5333e7027b649c4da11e26c43b92443c9a5f696c6c0563fd849c3ae0dec65be4dde2f588d882a40dd51f4dd0940c49d7d0a9c5aac1d96864e5b637090083b61a62e150676846f92545ac124002868df3c4f851954e47e0b6c68f376abcb4f6e5689ac0483399e5bb7a2b3ebc8ee859b6ffb5d6d61a38111ab08f02ab1941616c79740dd34261aef8fa0699eb3f1af54b08461c142d9244b92a1e5f73201240d81cd7feaf9c889d034fa3eb761d05a9d86715ebf8903fc2babca4176ad70fda50da2b5d8549f4fa05006cfc04308fbd86a5880b2a4a25d046ee89f239482179fd39d9f0fc528f0d2596c7943e81a1787c49094351632eb9854935b8887b2e6307c34780bdbe3f1d8c981e7acc172423e3dbff5d15e441c39e541031fe761fe19500ded46f95ee74618ed87755fafe06e2e3d21f20d44538ba9783254443dd3bcf7706b6bbe08358cd015d5381331969a2eae952173b245e009bf45b02ea4fb9deb028ec49a6e612f87815d6fac95b944a77aebea521c57e99e7cc9cdf715ca3ea33aa3fc0efffea097b68c765c4aece0313882a708f10dfac0474b083e2ee401a89f677c9c3b6272892bef06d2df961f545df5f208cedcb6278525f9744ecd99739725c0b2bf3137f467f17b80b249347951c265e214488e3cdd071c3a03db689cb88b52f2e9ef4331e1305ee6616ad228ba545d255fd5f568a55adaefdcb1f17c79f4cdcd59f136fa3e282b846b9f6adb0e38423300098e33848dc01637d5c69b61ee7bb27deb8595b5556beb4f4b8118b3eadf9ba357bb45e13c663db3bb4a8206f4f732c432b19d0d248a7b7af3975a51f86fefc8550ee841d337d6bed71fc8bf94cadecb7b3d88ac2211b58d2c30284ecd9d8fdd65ebc33ceebf71e7bd98c8124a611702099be108ea9c49e469cdfb20f6c2fc512ee44f18eb578f9ce358189582446bf6826f2e99ca84791f10c36b7ee07ac5d1f48ae49c55ba806cccc022cfd8ff5e1759f9da056e64f39bc5d2c19f374f6cce7b423c0dba3304c5ee838f07bafc5df314fe6ba232a829f8fd5eb62847ab61a507acbe03856b8d36dcf4b603b4c5fc0827df6c16a3e88ca53be9b190be0945044e1cd30453ce7a4dfca6201a32e6a8c5270f43d95e80ac2ee5e63c7ef6f3775aa325138681c66c69e21a55d1c1c8f4b887109b40bf1b0904afe6cf398ef489169b681810abfdc41901c3dfb0fe076060cc85db03421213b4ee5de256e286ead6bb2839294eef21e9f035263e240c6c5c6bd17b8783f06cbe15de0e6d9e152cf97717ff36c6f5064b21d0b1eff05288e9e9860553f150649edac9abc41e49c02d53a9e2dfc0a9d1bb0b391b3ccf7436b7ca05f0df169cabc591b35320ef7f34b0d5407c7ab89824b830d0caab3ddc063481e3d6bf604f92c0df2d9cda8e3ffb42708e449e0b2a6fd1273a38c1a80467eea5a21f4b6ae3ca1f079ad17776f69440c9e5a3c054fb239452d7edf6ba97ec54a9c34329a2e3b24ecf8da97e465d903a25e932781264d050482c62e0d1e0f3f502c9dac084e9dbce8b687d5558bf6fad28fb792bc00206b37bca3fe68a8a3f5e55185ea69d40b72cdfcdd5a33ab6930857bed051ea4d272c6213cd9e40edfedef55147526892c4d811204ade78bd9ada1685e090fdc0c2299faba46e91a6d31577e71d4a535a955ed402356d7f4ef7a0f9f3225f76e7684998e44cedf92f5c90615c58f50a02992f9ce63de6dad539eb86890e23e23b79fac2703f72e3f1ebbe361372f8e91550d8e03ebcc1080ac21830aa0c74cc3787cbb0b1f4c3ee99111d5acf03bc6d2d5cd9228e4a82733a30c57cf8c5c89166021af83bf527857f6d3c63c183b622950daef8575fb1c8fdf661efd79295ee318986ed70b934253f4079d5bd6b7c95f6e3d8b62c74b565c0937bfdd91b731f447e9e24f2c9605a333b7424f5238633cd8fd500701233d62c88822b7fc8d6b0f961af1334ae32a105cea9c60b5459887362224bb4c083968c5602fd3e23375fdad3585ca8c03176217a995d82767d00a2fb5f1c8d084b238a7c7ce786a32b5863341855d1b7d36610bfb14fdcf25738b6cbc9e74b41e109817c5e7f0bc119571d147d9341fd9eed5e1e80219d607e9d395421308215fbb51bd63628101587c882e4e6997bfa0a6854078457263959aaa514c38cb3ecd1c2b40a827746190d291f35e1dce2359c83ad1b4c6509f58efd748e4f50734f299ed499d1e110340fe55c77fdd20748cbbbc3ca36dfdb2d74e24231132022a569b617f48309f10f06a9c53ba91d7dac1e7d3284d23c0c39a20578adcd706497f8b4d8bb34368af287d2e3e1621397c81b4473dbbcee0fa2ace39244bcc59b8f7cf7a14e640b209719fd2319c758f83538adf24f457a6800ebe929a69f943a046d1b0c3e710c646523852d453752016c0d1648500a75a7dce5a2a933b460e29f2f7b640c099ec8d54b074ce430a365e4ff19f07e8a54418f309c8b8cb9c007a85ab563279c56b06fd7001c8741a178388525553b338ab7a043236b120e163bc87545641187b8ddad8dec069ef8e0cacf35c5111694ad9cb893f3a2542ff7d167e597f16a7a398316a637b5abb4f5d0119785ae813c214320b979dbd3adc97b1f42499592d24d5323d68f842e04452ab810c3780b887a5d711a226200f62f8b5701c6cb2b3e88c06d85300ca675433d2b382b1826083d4e323c89ff6c977ea497ba9bfc740d605d4c38d5b9a5769479d38409096139de87ec971cee97105b3959c335c43dcd687c5877fd159b86ad73597b09c63dabd2bcf8c057d9f0df39cc25b2209cc8fd05b01ab902aaf923e2bc258389c92bccbe3fff3ec72c0a829edf840df8f0a62accaafb7272d46eecf8b6b04425acac2b05935878e76f5478fee5ed4d0b6a75c521af833aea4c3d3043f5822359cb4f352d59ace5450e6f40de71d9e5e454886ab9303a88c55d14ac58eb23a792bf8579a9e5652a4ca3ab68b1f5c26f10697e69d7ff99e2908165afac2a1d476cf3df670fe909be7aa9996f1df44f5f2bf3c871124019bed873a0b8b214c79944f2bd9bd3b712f86b9ad9a276ffd92c739df6ef0cc44294099e66561f4dcb03b756b07679e2098e7bf1bcc1517ae85da3c27a520bde9cf8a05c27162827802d307a588586fc55e74848e34a41f80579290bc338b3f191633947536771549f6c4ce806576f68a0794cfacd9bace9a8f56fc4720179cfc84a30ea8bc89f377147692a5a5ab7b951dae691dc3406d24b590497074ae1ab9a3423b020c7e6529e4511bbc50de450e282c1b8afa1f444852a73fde38370379fb79e22c2d40b387efbe306c6ff79d1eae75ab9b873d9b2ced03a63a749a9d6312aecdcd27b525babc239b5d08ddcbed39f1e1f77184baf80e0c462b2ebf31a0724ac28e03c703ead3e92238267a17a250088747c0dbe8d53d2ae75a708e0657a3b68a17c85d943ebd798ea5ceb5c8657c2263327c296feb03c5506e41ef66b12b59ed0f7e5e21df0139a64b0a76286043a73f61ae589561e7454a10aaca97d6949ab21e2eb4f2f5279334d3e1a57db830ffe17b5e4fa35f72129de8b107e2ed66e3a3eddf464fa7b8eefee45c2b1098c892112992f6e00f2a94119d618e8f1e279b862499fc801d3bb2ce2781ee292695c999135435969799336dd8bf47e6936129246b64becc8038466a445ad7108a1e0a40e0abf40b1f47587b40d51a2f719bf7456849747df837149ae2efce0cedebbecd39a01b89d0bb69017eaaf0b1e35e6cb0c64f06d9acc18328a946bc6677854e09c5399256d17dd0c83946afb50f31f02f2b7f5c29c55dfbda436987674f7320bc2d8041ba4b15f3981ab241831d9ceb8840df5fb46a94e47a556019549e3d9ead187d11ff660c3c39c9f58c633627c584ac7af5c4c4eda7ce8a3158788b6c2fa62f37e86b49e81272ed177a9d825be7eb1755079ffbf0aa9f87e62e1a3f873a6d1ab6b0481d34dc0c2e21f27828bfb7852b7a7e8e362556b4f7878281e11629cc80024fdc097504d0361adb3d50dc9e1a8df040d99d1513d7801a3bf69aa163880924af703635f183aa0a1f3524380571e8bf37c859474acecaa943c192b1506c5e23b64bccfb0bf035f9a5a5c95d5253e2f049a3924361627e3b812af0cd583f27074eb7f250bade7df055d86ad3ef88238960b16f92c25b44d9dd79dd7ee3c80bd85efad0bb66142af617152d2042d85495633b19bbd381c38a3ff5804b59d0b39fcd5d8fc4775be514d3a33aceb50b1d193a89b846fe9ca4568fe702bc221fc764852857f3557b565171cbba65aee8251fcde373bcaa738e45b5978a59a67dee2d6da34fd1683c24b5d9d5d56b973815ae049172a43ecf2a609a4d41ab4eb2d0046d16a0e51966f748f409b26ad7c394cfc7dade86247820ae24514e39808516f06dc871b7cec07913a8ae7ae9d6514b89fe08dfeac33617373ceada8ba5c068fa5502ebd0f013501dde0e5471fcaae2e491619c5983d1b804cb620d2a26296d280d0c36b7e827246e7f6f6989b19500e8682e3e5bcc10aa1cb7ff0e9d6989ce847e2e79f41dc49e0f711ae1b95ddc4d9e6bb6ec7606bc9588ea0a066cd8a733168eb0dd10f6b265079e57e3896845730d8343cf34999d234e4aca1c20da4d42e526d98992ddb8225eec6e97823a99173d961b0f1cee7bfa78c1897940d641a6f92ff2a50239a07d1d45a6262b3b9fe4378d87d3b66b1ec20d368d4454364c055a8f435be971301d4b9048b80cd4217f0251cf438b794e24169020a6e5613608113014d1ceef31abf0b59c74ae6be593a6c93b882281d2c79ab988c77abfc75624f8ad2f391a6ace159bea83986ab5c62cdc13ca03e97355a1980dce9bb8c7989ed1559eb25aa52fc02c7a0d523757c09b749e30b71af9733415f9e4d0b4fd7584a25646c217a876fc4f9339653c932afb7825e3c57d2ccb59189230a21b3296e053f64ef0b93c4aceec7f2f58df33ac55cff00bb579d3051a8922db98552ea2b9cb7edec5a8295340ec8418b38afdedb06347ce1075b8c97f50ef0c3bcab94218f43620c84d373a5935eb1cffa4bb96141b72575ddba1bd8f5642ec11e39b1e04b5653a810e2ea721b0fc62c395334e89dfb8cc2412578c528162a3a4069bdd85f654547854d541a145fe1387c42ebe18976356ee82a2dcd0ba99587c9c8327a39f4c973688f5b1e0dd3b56d49b738ec82bb91c4193495612ea2d331f0e19a66799932a4210569ee65ef9543081cc65a2840347a8ad16a11ff7675d17c226ffd8ca71362456c0b1bcb2813426deffebac8888fea838cf65ffcb8ffeec2271ddff1b30e365c0fb9269bf1b1f3b1bd5c9f020926acb9c3d4cbb4ced3d2495c4e6e27417588cb8cee8f56f0e3df99e16a7763567b2984128fc5a64c8434982e5c28bbe6dbe21a5035c69a8a4b5e7d08a2c44ad50009790581de4fa6a38e2539d1a02df7b3cacef6095cc5423b08d19f8016472957951ef945862f51943786fb4964dc189fbb6fdae3c265ad45574e22acede6a7e474dc7a555db3f1e8c923ef2dd764ade23c639b4f880a2ffcd2391e63ab87f5392138154bb57bfc13cb8281f988564c4db650a3c72e114ec3f2290f5edfc985b812c836732de5d497b7395026e80f6814b1ad80c515198e2d4fa451f90b29cdf3d1f37a6647901007049ed640871e85e9c6d0cee3ed8162bb4321a2bcbe07527ee7404dbf62f932c44c4980d0d5f22a3f6e60ca7e17f760d065275e345900a7bbab451cc9309fb161e6cfec526538b98800e4102e14da0d1f3e3c00da7c94323cc668842e10d210627c88854fb540d85636c13c6e74b7cbea26c6272989408664a1210058845ee4387609c81336a8fb1c689ebba9a7ff31e3b75c3dac1f8418e5d4151dd31b9481765bca415779dfa65d2eb2fa8a3f3eb37e8864b0dc9fdd6e12c79b392847019c8e96506d96ef634e9af1c4956a9af4d53cf2862d25aabafa8e0459eeb2872479f3de22c92c17c268584a49f8c55b902b818e270f2190bb52aa02a7ab2c6c7bbe486bb7c0b1738b88179099b144f1bf1aeec3ddd36b024ceb195b2afad05785edfef79600b1930d324b8d5a3b53edd017f73c01163c7fee383e664a5a58e8b17d89da33f596f6e5db7668f2136ca051c71d4f3754405a2dde9bcc8c461080bcd16bbc180bec0fa4082aec07c609c9d29ce385e6fa01317a22b3f6775ab1cfd6ae26f5b8d02b4da62cdb6ef1cfb5cac0fdcc68a683e98651c9196c81e49726bd584e1facdedf418ade0a6a469cfb23bb8e4a7fec9e73d953163ea742904b15cf6443b25a84628bc0702a768cba344510b2d0242f863aaaecbe862f1fca481d9b569a26586d7f8cc5a7de1c1aa40bdf6f00100df5f7a86b8d16927c901f18ce9fa3d4041cf660a528d977b3a6e6fc3324fa6c95c64f47abc2b2e60839eb37794ad063d41ebbc095588999d587ff6fe0e1065844171982dc0c17f36a83db1ede2b60dc1ed43a19bde33cb71a5459d18911c865917ed2f48cf7ba4d1bf45b494dcfd9af3ce3ddd68f476741ca8292eb6c459517164408172ee41e458501e8414896bf5fb6b4237199f39ddc9e9916f83adb00ef4b3d1565427fb89f4e42fe916f2e665024cbb7856e7644f9ef1e62a245609040a890a76958191d9cc02e2ab421d573330fa0e68c6d5df10c347912544c74d7cd97052a9de05eb1d09329e913f14a7a8acfca5cf127092686173f829890762be8cef11b6d7b9f19cd2fccc64b6dfbc0a9fdae675e2c165a1a0fe85fd9b1d3212498fb06627a78ca050e9d2ec4e8480a1301d3b22dcce4102a76f9f6b2314a4c038d6958177d7a26faa8019f1b00ddab7884c0b9daba10cd29f4ead39c9f19f0f834e29cf6e4f1c520949093b8381b192ceefbdaff542b05aaf24193034be0d494f7fd417b519e39195cd0a9170e9ef7b2b8fbb2063b713e200774a180d83d5b4c7f0ff23f33dde74759385bd1f4c7bbac7b36cb89c0a1fb1bad2a8b9fb46df98102910b9d1c1f443d224e08537b23d97c9e3383e4943ba1104ba9bdaa711133f55b271a2f7af0f45d30685b261241d5a59a7877c1168ce4806b98b45b8eb59f0bc1488a60c0e16c3a1c3da0c44a8034aa188c1389d83429fe956e0c0d7dd99f26dd6bf8cb9e7f00563e3495a8949d7b0c60d4e3b949bfe5ed51a0214acedbb8e91807d1ea541875342ec3966d70c81d4f3bf974d9fb9eacdf18b5a09de25a70c509a29227824c2f5666812f6d7fbe9fe4e24023566e4ee3466334e66168d45b4d1ad2d61dc998932f6de3bd3301df876ffc6f8bd9024f2da5b9a47f5fb2c7ecd3d40f0a377a6c4541bd71ec58b7a94832f2de2abc681de08f946ae7c360a38a1bbdcdaaff1565ba1fcda2293901ba66f06df26c8af049a0668c1e9c46e2f5c767408534ff3ae3762c26faf07e6071780ab662edcf4b40e1ccf9362954ca4d395904cc34925b83ede941e2de73646cdff474a60af3c9a239256427fb678708346363092662e7b595f9b7004fc27e1b2340111260830bcbfaf2758aaf1999b56d18e3d286eb7ff712bfeec9d0e62dfad660245e7b17724cbbc675d4a0c572e337dc1faee29674d6c8be61b5ee58e48a5de716d0a70bada300141d7c6d05c300193f7f04a5fe76c34c77b83b048542584e57712f90ea1e4d4c6db5088054da9aa5b57a5a5d7de64af27e4aefc005c7d31c13cbb1b53d34ca1535d4ff773d5a1151d0aa3685af53ec7f34a24a8d64d5894bae7f0d806f91a7eeff05d7be19a212a213872f9b0d4016372d46b1e8fd0be951aa13a98f1ba5452e4bc017c194430d1ae0798c2a122b56aedab0dc4f68cb81c27911fc3dabf040778e8c362e17cd7f20ea29f29f58762c6acf69204d22a4d112be029c18ab03184f49c2b9602ea1d75872f0f9873ad115ef7de8045ea51865c6cb5e0fbc934e4b1a002c27e44350a4262d76e76e439ca1a168b61ee07aa69e53339cbd75ef32476c33f0f836e05a642e7c1462b10d693e25024bc69f1dc0195c79372be1396f9bba67e9a0d4a04fa5b5d161e1fbf2a769eefd21a1d7090535272ec5d19aec56b6892e5ec859ed80d760efd7fbab9dd7a3639bc02724c6e69057a6c154ef8278365cd9c8c513329e77c409ff064c598a792770bfcd04c1d4a97283a21c7b965489a9fcc02dbd1a091533c23f985ad03069bf0e6909f3a46feeec47f09eab926c3f0529dd78a3fe412e54ab2228537c59e37ee764747dc908ef496625621bf13fa4d2d3692c5479e7218b174f4cc2c86784fb7e2a830faa4018fe50c8fd395d4f79b77c0bbf6af76bad6bb90f6c253f09acc94533cc35e295fa9fba53c670110c2c07962db844013f106ae2fb1cf76a90e94cdf18966cfc8b0291e54e547cc6f61a67b4579d7c21e1f90d378ab5c5b59dc91aae319821429fdf7974113dabe9bde33c4901d57fd3e4c5b72946ecfcba90aa973527480f6f34dfbae954d889e3940519e6c4f6cb91c8151d3aa82928e40a2c66f6520c63dcfa91daa781cb936f490e74f01987ebd60c6593de36d0b6cc8abcfe745a7beb1641845d51107d54c71d5dc20767ff5d2b1215bfa67b9a42de62eac231991cf195ba25b75899644a95b171a59f48d39c0b79c40505dedc4984432456b0a64603f5b4f47d307516f15585f8842a248b24f1b3eee88ed92d2778abf820740aadbe90d28f137b4c1bc5710b40e23a93ac846850f4ee9412f389060dd4b3ee2eaa7e0183441e8b86d94392d1e944330ebe46f9c1848bd7e4c5dab6c95885a19ad2cec267c20303add608154a502eb60e26c900960c54acf72a99259ee21a10c7ad2d4dc067455629a86f82f52406361a7ca7274efabda5a27840ccdf1fe5ce4d90162e4dc27a0592b7066662c37f35ac264dd83cee4b347f656e070a507d2c852215ce6061f5947188493a13bcde373bca499e104561dbf6487d7ec12254de16e9a8b898a46c854ea2c468788eb7ad61bf16d3499eb62eafb7fb9e6403e1356b4d4b776728235a628cf49c01a7a01a86ab222259689c9ef42a74e09383b6d50ad38a855c6bde7685ad462f5fa60c0142e51805b021a99f6c1655dfa0105a3f7df2c25cd8cde27c009a55ace2e87ff3ff1354f7fe5851b290122b064a382fd72d419f886cecd3dd6bca9f8f2c0d506543ac6573848b297ae89470ded279cc3ea1468e729937271d3fb48060ab7341c79926c602f328954ade13a3d3d943a3c86257fbb5ee4b50adf4eea4abd1c8b8bd6808f310babf29c4f926508fdf244b16f91c83bccc87e52213ef78eb4f6c199958c979375bbd5b5bb232f35d549a16acce0a9311c47b58fc252d798964dc08fdb3eec4e156b1ae81a1cff8e6ca23bafc6988c63f569420ae913f3300c2a6fb5d31ff62a92c2a97d94063fd96b04f9c88543d89b00370d0bbf07b120be94b652a2b61eef95c86abc506856df7978c3fc3068f59fe5b8feda6cb87a2f53937daf738bca64c58646ed77caac683f058195f0904b374bf4febe17aeb724742fac156c276352cb03235730b4a93c65b31bd9ec42422ddaf4f301e96fcec8c8712ccab51152814e48eb43a4afb522928a7a114d0642483bbfc7e9098529e3f860e31677d1feb9f75b84f9fb4238e36e9384843a64b34f165d60bf9f782e3dab04ba43daf0cec26e46d8c15cf69a47a2d5227cdce5fd0b12d7a8cad5ce479d8a66999805f52c635a11cde3ef524316d6583d3f5a108844d8348554d111dbcc3c8d695c21687f6663c24da6dede9b18b125bb16dd6ebcc1107ce1a3bbc851936a8110d855d22e9132633f544e220b15dc4386498d85024c61b8a300bc7c13b8bc4b7854cabaa3ad6ffb8a3369a7f9d4ffba842091e0c0ab73efb3b3fcb48803d9f28717a7a84581c293188c57f4ce1ec1939fe312045fa7ef29f904a2f8183e6a7e276b15247cd7d132d0a64091f3bbcad5bdd9377b48087d6e5c3bd6d02b2f16f83f963cb7b07547e09acb4b07ce73c388c84b29cce296c4c7c79fc2c529a08667b7e143e84924caa55e41a0ddc90e54b5a781 +MD = 00c128539a58423e5d6290f7aebd26eca08e6e5da7b93f151293af186fdea066759c47da8e57c9de526bcd63348326cdddd28f1e9a3ebc08dac6321599a783c3 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp new file mode 100755 index 000000000000..cc2432ab6217 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp @@ -0,0 +1,310 @@ +# CAVS 19.0 +# "SHA3-512 Monte" information for "SHA3AllBytes1-28-16" +# SHA3-512 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 13:32:47 2016 + +[L = 512] + +Seed = 764a5511f00dbb0eaef2eb27ad58d35f74f563b88f789ff53f6cf3a47060c75ceb455444cd17b6d438c042e0483919d249f2fd372774647d2545cbfad20b4d31 + +COUNT = 0 +MD = 83dd81285c36d86dde72631a1a1e0d9c12b0e2842d499a63b00de87f11839565b21d9416f154b72034b7fcd41d2f1d9eac184eec823547772826ed90c53d856e + +COUNT = 1 +MD = 5c37bb6fe060007ce3fca1e6d01ed1bdd6e737f043a2929548cf1b08224a193e03c7314be44a496c8ecaf8a7458770f59cd27336a38ffa40588539572ecb946f + +COUNT = 2 +MD = 1866d500dffa85d4bb2b466317b9f60290b6840a75788fab44c6b58225f4a9d77ab0238443190cf275435ffe896c207f34ea8c99327b5628d00cf32955ae7c90 + +COUNT = 3 +MD = eb3c290d732fdf0768dec3f68703e8c1b6079682b51f40a6b9812977e53c4cf4e22b90ae75757d7c15aba886bfabc0da6a53cf6394002edc023a566d991639be + +COUNT = 4 +MD = d9cb2be61dbb6e4be6bc13eed890058536cef9a15f66c50529f086beac8ace00d1daae81b3b9f35529343ef1f14eb10e368f1cb2ca52a827dc21d389a778abd5 + +COUNT = 5 +MD = 9ee2322b9fb7d8b2648bb8171172cc6ae801bf7ace214366f5b1af0f49067130318eb355e2a669762919afe5aaac69bd4f0b1a8811da6e789fb6309b036fcc84 + +COUNT = 6 +MD = 40433cb85bcad8d5b80f92915b59215d0b4f328724d954edf9fb0d198bfac1a5f9ad892803f8b9227cc98eb86b411f34bcaa5df519ca898c95bb4b1038f7fe64 + +COUNT = 7 +MD = a9b539dce84264edc877e52482d42e2e24c675d67b14e2627bfb6813e3ec4f2df1dacaf244fd616c229f65b5f83070219b6cd4bc8d20819e6072f4ba81701f2a + +COUNT = 8 +MD = 068c9023dbb8c60bc2bfd60179423f4ea5b6cba524ccfeff66e56407c1352d0f2fb747772071070892a116b26662425ca12e571b68cea9389e9b492107e818d7 + +COUNT = 9 +MD = 0821ff6066756773830b396ff0ca5a3de282af3585a4cb75dc66bfd82b8b28b3431b98e82bb9123dc1a88192868232e66b8d256b3d36d3ce3925c44f1fdcc8ec + +COUNT = 10 +MD = 0d44e04872c48f1a58b699fa8b8589079c336f5ef75c49fcbafec604bc56f06b3e5d27034557daa2bf64219d36ec5e5769d7ba3779ea60138d62ff47e9ddfe74 + +COUNT = 11 +MD = 40984fc0a65f0d8676ef61674c32dd02bb57e02e062fe0d2da06d39e98fedfcbe294b131a4f3b17d61067b05acc9a88b4bb13f59b6dc672c0a751c5e6ca39d87 + +COUNT = 12 +MD = 32abe9d60b674ee0d0ba92ce1994afcb9e11631b21f9315a2c295852969bea29dc1709ccf6af63c4f066d81599e210e2aca54ef3067ac469340c5f5e70911891 + +COUNT = 13 +MD = 732ffe98c39b975b307c2c3d913e6745bbc14f25aa877d969b64ff2f3aa11fe7946df522e053b751856e41528ec4e6fd3e80c95e629aabce410b7b41d47b4e0c + +COUNT = 14 +MD = 0220a4b30c0b130f5a2f36ab0719266b45fbbe7ff390b76470bc685fee243ed0f1aee3a7742d7d2c2ff8009441f9664d508267160221308331b26af94583bdbb + +COUNT = 15 +MD = 9012cba6964cf6dd285b1bb9a1ec1d4e44fa2ce2a5cd47c3d313f93d50fb2613274eccb455423ec4cfbadedee97b4bd20f5f340427093997670a0c8484f61ed9 + +COUNT = 16 +MD = 407204aa0b992cc9ed71bbb7f1929270ffc92bc7b1be763496d6f7847c439f1d5bf6b7da4597cfdb225a829907116ee26fd700cfbb47b64870ae0ae0afc868c1 + +COUNT = 17 +MD = 5a6f4097c49da54340cd6bde5e15bdbb63823956f516d1b784f1a19b82aedac261ae2fe6c17841ff48df1d7ac8914b8c10d3456448a08bbfcf261b76c59f850c + +COUNT = 18 +MD = edeaea8d6487f61f54a5506efa31e3f75ab67e5d922bef824a8eb859a8937f00555e651d010f0eec06ad8db93f700834fbe915f9955a0eadfc52023f2653fd95 + +COUNT = 19 +MD = 099d3e5e4fd60468274b7f486f379487786596ac216bde7f095ef4a1617e02223d404cee0dc801175c3dbd02947b37e3a26628b7573f92a6ae26e34eec6800d0 + +COUNT = 20 +MD = e00b1398989fb003c43803bd76529180500bd11c1b5d26f47bb445cc912256a69800443c873e6b37a1c22c00af1baab2ed8652e828b1cdbb708c372da6346e69 + +COUNT = 21 +MD = dd4a911750c5cc144fce016196e16d7e5d7bcbdb0a66f4d0042969fb07dd7b6564f9f170961acdc3fa722ef53ad1dbe28e3d26296d24cb4e671dc35a653417e1 + +COUNT = 22 +MD = 30f6fa4eb878c2af14dc38eab24f6fcfa26ead343915294b7d5553d3c928aa344db31393ce7ef69af4f431c63255729e343627ca4c6e860c40fff1b907c5b1af + +COUNT = 23 +MD = 317486247c23ddb8c1a768f5e6b7502e3fb843ce433e3b9ceb2fac93c3e897463b5bf3e0008c0f04ad424bca268d2d9938fd65b76ec1899d6514770000648f2d + +COUNT = 24 +MD = 4a1631dcc913ab9ca3bf29392ab7929c36c8993a150264218700428bdf9f8221400d622d6d63c8b8fa6ac13237a4c4b6a42695084ab951c63b2d0c0d2c14ef83 + +COUNT = 25 +MD = ace129a0f644788024141469ce5aaffb39bf182de6e0c35a2863d4d4d37292d73c299fc04fb8fc468c83075328d40c8664b4e5cd856687aac7623807ce23f824 + +COUNT = 26 +MD = 11fdc99ba5d3b3ff5b766331ff1e47361613127e5250a4a8336d912dc5bce0ea5c19d538f344dd6ec1f18b79d58c9746a3b0a75545c56baaad62526bd1e1b532 + +COUNT = 27 +MD = 33516270a676d7355a674c361ed017b1f227f121826ca7bc80437c397ce8999eca0fa02809eed2ab78153f7b69107a3736e70c749de4fc93af512dfe7b48bfe4 + +COUNT = 28 +MD = b523a5703a9043425767f83cca5ee283b7d21a70529f0bb38bb9852c630d1a5e73b7046190cb9a668fd6ab6309e1287e6ffb403c44cf1d96a535a6e941508d2e + +COUNT = 29 +MD = a2e21974e2b234f670d2f956ff3dde1057c1d386dc927123e13d17cbc04bd5569c42b609a78436318bfa86760edf0020d7d49a8c67717c71297cadcb7071b1ef + +COUNT = 30 +MD = f9007caa6030a345b0ccb9466450102bb95d99d1f65f324978bd2e98fb87dfb2a23fee3a4959dd15f23eafd7e7837f3df74390616be737a3d78c9667ecb5f205 + +COUNT = 31 +MD = 83f3c1c5e74d339e8a536a3c74c61bb85abfac85b946e9da25bcbee05ee56d2da8894babbb1b67882f1a77adc563b7260af6d2054bcdf3360dadc2d2e98a6a49 + +COUNT = 32 +MD = 89e1ea40b7bdc4ecd47f542e3c178cfccf971662d97923da52dcaa5fdbd50f4f594189dc99450e501f5b6a717ec88596e27741c0ef6df4fb1013764bf6d226fa + +COUNT = 33 +MD = b7a0a34a9222a3cbe72d3a6f78adafeacd4750c040b6a8d6326f5f390c7f32ad195d3d1678b00c9485f42687555998e492ff8f10bbf8fc8c5a438108766bbe02 + +COUNT = 34 +MD = 1eb9a1f6763a16160225da065dba9159d571ed70b38cc4b1041bd0ec3d51532451a8a16415faa23f597a60c36056370b9bc649672cfae54523abf36b3b4167fc + +COUNT = 35 +MD = cc951db6163747248ed90c1d09c73091a4490f8a8c8c3830fc2935f9ae704a68496717c68d1ebf0de6acbaacbabee3ebdd6d707a277fea9ae0eb1469e77adb28 + +COUNT = 36 +MD = e6c0d8481d99875407c332283d90963f8890e815a9de9dbf92b99914b86f9536a1a6d513e3b172385e74e2683afd7135421576e89fee0a9e09765e4ffd2adf87 + +COUNT = 37 +MD = f61bbf3dd68c87155941c9997bdcf8f36e79c901a8e89305b1bbdbfecfdbd3b40827dcf2fa9ff063cfe5ab3788b74697541e32454e3d17ca4f406a02dce46a60 + +COUNT = 38 +MD = ac3d01ad56e1fe6b2a063114a627651e406d5c9fe46924916bf66807ae9246507e80b7b5e9352cbe281e70971e288b9b9d4445202949c533108fa5bde3cf2d17 + +COUNT = 39 +MD = e20b5c59d969565a3d55069d17f04db5e31aeb3611472266292498bbb1055e912f3d53a6b7ab579ec8604703ee601feef704bc61a29aa517761bfe99b6805da5 + +COUNT = 40 +MD = aaea7b67398b84dc13d94bf3394a382838604da0b54855a8a9779539c6c7bb8b2bc7c25e148e26080e9b5faad7f69531b0659e5d501123f122e5dc7ecb0848d7 + +COUNT = 41 +MD = 6a9a6d03bd65dc108f2518290aff4c1ed978e9e6192fb43c460a541093542e579e7c701dba97aeffdc07f69a2fc9ec5d1773211de1b2c915134764488521d262 + +COUNT = 42 +MD = b010bf4cd6c11b7ea818126751970af2fba64ec1812c60d12d8b0af1400c7853e5d0209b701713aa610c2ce29fd93e0129c6e76c94d1773b0ce680cfca771031 + +COUNT = 43 +MD = bfa6d76f4843c0748399de9c0ee622b97bf4a8cd8be64a6a02f0b0b091ff2b389e39c9d9b98e9398b0bd938947c53cd55c787c01d21b728d295ccfd12c15b41a + +COUNT = 44 +MD = 98debcbe42ddd1034038010993f243c7ce11a0425283682ac2868b2fb10c5f84d2a671b62d3ed6be478bc5c486c49706c5df493e862eea1024feda564467cec9 + +COUNT = 45 +MD = 983d8fa4bc7f713e2bc160c1fde27d26e394f25912af3380f81760d97fd9c155ee2965117b65b24be164e41625127f6792e36eb439384db0cfa3bb8f91f8216c + +COUNT = 46 +MD = 4124a54dde312129b77cec207548a67d2866bb7ff2ddb74e093bfe27191996c4d79a24203b7e3fd76abf758eb8ebdb62d07a75055550d67ccb30458519156642 + +COUNT = 47 +MD = 14918e30204e07b7cab695d116ef94422fd6b4cba1f9de664bee06180567781eda1719de6f0f1fcd4d80dbe939322197b0d6153d51323472197d6247943c2e87 + +COUNT = 48 +MD = 4a6d78826f0da3db5ca539e69778f0e31a1526811463ded44cb2ec78673a73177e607e4c86bb1241e03937afa140e856a3894dd8500c5d9cb3f4e40bec955369 + +COUNT = 49 +MD = 0312a03add84199dae17822ed140fe5ff6de2bc6a4a3cf8c02fa0ff662a6ab86085bcf5064d16a8f1966c9a70670d86b7556afbde68b9efddc26f013be67ef37 + +COUNT = 50 +MD = 3d4b176513fa9b5548271555ac2ffb74a5659422085c4dd4e1dd9971d14906f8cdbbaa5253434bb303eb3e9cfa1c467920e0e21efec08f238d21a8003e4baae2 + +COUNT = 51 +MD = 7640091a5dada4407ecaf85f0fc39a353807c7969f4aa0e777c9a35445dd390441b19d622ba8a3d888fff85ef27f4153f1074d9d791c1aaf19da6c792b4de145 + +COUNT = 52 +MD = 32d9dd94ff447c5a96274ae06f59a6a48779b6ff7e0b961ae39340d87594ddda2024ac5fea83d352baa0c13c26ab081c6d7f2791c5fd18114f2e6777df3b91bd + +COUNT = 53 +MD = a9e2a1e4d33ef6a2941d8907393e858aa1bf9a9f4002a2f25925ac45bc5d1ca32fb480f9df6e67a6d121499a4332fe97ac002cd9292820f46be249a2a66f9d7e + +COUNT = 54 +MD = 107f6978d6e3159aea6eba5d0dfce9072f095dc2303ccdcec18332fef0cfc671772f984ed9be5cabb297351370d461b3a137a60574d59f88be8584502ad645ed + +COUNT = 55 +MD = 8ab80e9f94bb15ca1fd23a5e16b6ecff9804c7608cf43cfb52f96cdf8f790038131c5e150df298ee613d856c523a69e443e6e1030e88e0f85d972b53cd61b9b8 + +COUNT = 56 +MD = 103be36ae53c9bd8953b6a741c9d1bc0715e0e454e0dd8c21e21b058e65570905912df26e47693098495f54d878663c2a16c64b5d3ff4d0548e03e1afb1fa275 + +COUNT = 57 +MD = 365d9e966773d7329e6ab9cdcabde01315a0dda4315b0a04447587e2a3a462ac2f52e282e0a86a7b2836ee08e5bcb7813a7f69682749b65524a544ec7f4ea855 + +COUNT = 58 +MD = b0eb14a9962e8e25003c682e3462188aaa574f91bd6a5e45c77981d6dc4ae23772f6d992db557117c4e4092e38de00cfb7e30497a383eee8a60bd8f5c52b3afd + +COUNT = 59 +MD = 1c8d7b5a951258e4f2f56a664c79b4b921f2296d360b6cc91eeb5cce08180d6d1ff0296db5ad9a7a4c2f69a5c2fcafa550961115d87713a7da3ccb619ec79733 + +COUNT = 60 +MD = 7effcb7a362e949a20aedd440451780a5910dddf7871eb9bd128077c15d7915586a527b42d1ee7e6c600eb1d7a9fc8b53e12134ed769df020e48939e730d2087 + +COUNT = 61 +MD = d2cfef685c4db75bb0993197297c3aa2aa1958b259f522399b745deea39c25605519212202e27352d2518bd846316dd6ca5c8291335b7e5cb97c0c908d41b0fa + +COUNT = 62 +MD = 7af4cd91caf0cb33181e35e5d4c3095657abc0bf25700510f3f23d9dce4aec4efb721762764a907d05d2b235f1be8021bb53b4a944e9520835662e5d02342030 + +COUNT = 63 +MD = 2729afa94ed2c15c6b639effe463b59b7aef4c329ebb794aa398475eda6fffca5a464f70c2c613b18eec13fc03cad18f6c8d7ce83f406ef2b9acb63001295c01 + +COUNT = 64 +MD = a240514383171a8e485c92183194086c17ce07554d7fb58da380ee9666720797544f221638a69cd875a80cde52a5135477176f087ce22bf538b8933f73e02ebc + +COUNT = 65 +MD = 61c67ce44835eb1678f4381f450c0154f85c5dde944da2c752ade52650f5f35060149e500fa1cac82a849e22a827871b7aba0d41e92f9799382c5187b95f14a9 + +COUNT = 66 +MD = 9c719e6d3fe0104a8015b5ee829f2556c1905ebd3e7dd1eb845f5f3faf96f365ffbf8bcccdfcccae126ec0d440beab3401edc1cfd39e5a73cee5b5bce6db39d5 + +COUNT = 67 +MD = 9ee4b5c9e3c167a5027f7cb0236609065f65d38303ea9512b8392b1617b359aca86ec39ccea50c120a7e39e02803dac19009a29bfcc25813fecbf4ee9ab017c0 + +COUNT = 68 +MD = 70194e39b3965dd56895fb99ae119574ff8881e36b264ac849a90889f043b28644caebeb41e4e2199dbdbd33612c2dfb49530265571e61ec5fcef93b53629e52 + +COUNT = 69 +MD = eeae9d8b4794fbecdb52ffd812a51f9a4f53d9185fb5d567c1d7c8518fce9873fd5f5de9a73be1eb8bf05a64e6675cb00021646d1203adb16df46602d0ff21ed + +COUNT = 70 +MD = 39f6fe4c66a81aedfa8f7ddf15695b9ef10e67276f6dea5c59414e6b62e96541f6f02e22beb9d42bc9f7cccdcb80972db1c7ca4a2a508940d41d34f06524cb67 + +COUNT = 71 +MD = 60a1d519352f06d9ffadae03ddf5a2e1fb07236a91ad67bc010bb2b998ef63d45e5fa77b40e411573deb65d84c410aae3bc09baa5af1b3d8c9b4d851b57ce567 + +COUNT = 72 +MD = b3476e4cd13e4e062a50bc17747f55331362bef40adc943846022893ede5925ca1a0c1323ac98063a830793f93e1ef01082c1420c4b7ed78c24656e06b03f234 + +COUNT = 73 +MD = 954aa26ffa2a4b21923e84524507fa60bb7069b53dcc1007020d49438ab2074985f1e80868aa6090a30636e308c34640ac76d1d73034a1dbbccd5307f7005937 + +COUNT = 74 +MD = e83ee97d1cb5d52100cef900ffc2c556f7d3730062a11f371e6a7e0eb503cab9059777be2d4dd31d02a58984444d9835b345c0f432c11b57854e3030cd5cffce + +COUNT = 75 +MD = edcdb391b93130bc87a2fffbd12434bfdc0452a3163b8b24ef2aa67716b5a0d06e36d11ce8fde2b269908de51659370ba9e3ea629d7317610568c6369dfda01c + +COUNT = 76 +MD = e851971911e8dd82bbd5553d966da4c16984f5b61b3902f886d3e0dbe22f592d51f3facbd66431e5c30d1340673e21e73154acb256e3386e285b09397801127e + +COUNT = 77 +MD = 382cdef79385947d054152eb35a8807ab4c52e4341c66f5cc0cf9826e90a26dadfdf90a390491544376c39c3fbd10d6d05ebfefc0e7cc0ccf2a3851c5eab4bc2 + +COUNT = 78 +MD = 0b65272a6f8c48d621c46bb5227d89798bdadd5558da1e271342a81afdcd68086c28f1715b460b3ea996cf16d5ce0c89e82f4bfbba167aa8e305136f78ee18fa + +COUNT = 79 +MD = 89d0dc3d84b50234861ad6fd1b67ccf46c8f1d6f871556e6d6df004c59805370c83fd981e77de4251e331cebe42530fa353e7260869372bd886992a706c6ad84 + +COUNT = 80 +MD = 4a8a89080d3b40248d61b4c7d5cedff2151c3f9b3766ec8a86b6e03b3f611cfde6d2de6a38a118324c188b2f2ff9707da2d485a3bd6aebf69aec54cf8cd2e3ba + +COUNT = 81 +MD = b8a18d94d277cbb8f7e72d5b6175b8068080b6e34618d467fb3d685b317d4f0a7d7b14acbf5048186b3ea78659c4cbd62b02090d6d35ab67cabc14073db03cd7 + +COUNT = 82 +MD = 4305582ad6577a61a19d68ad2791598bec3a14c430e1bef55179680c75fe96af6b906fa7dcb7786bc2ed94c7e17e7d0626c1efc446f10c955a956682874d8dc3 + +COUNT = 83 +MD = 420bfef261e5f21146a4964224fbd7976cb8b32dcc19ba1eb4c37db85e12870e5ab61f31d2eab969ec6453079a11c0e10c7f5ea44b75542f69b85d6d3821ee72 + +COUNT = 84 +MD = d2836254ff2d5878e196b69fccc932b269ad8e76ddffbdebf1f50f4777422697badd87a058b5b28ebeca30d1bd595e8ded1a2c53f5c0d19a2baa3a944aac828d + +COUNT = 85 +MD = 4aa68ea3a292de6af78f5e6d50758efc58f6627e27e2fa26155e9ea05d845a18615189b62040da5548749b2438ca18b8d43d1cbcd4a664caf4a688826bdc1760 + +COUNT = 86 +MD = e4ef2efdce78c3548d7d857bafe8daf73062baec7c98648a73a52614c765c0471cd391394cf8bcb61ffad8ebe4f1ab2a5f4532c39289d52111e264747921fb38 + +COUNT = 87 +MD = 883d4bbf5e4d13df161af1b3ce6eb727614561ec119993e5fffc03b3dfe84ddcd8964ca239e4c148fa8414927c3031de74eb092351df1886a38a8432141caff7 + +COUNT = 88 +MD = 0cbd6dd1ff53d55b6499614fe81d60841c31d9839e0de5d2b397d3a88a154d9d90aed7b51c1d7d3d940d105553dd44be515a3791f69ea255e1232101be8ebb01 + +COUNT = 89 +MD = 908c2a8b51ccd7157ceb4dc43aa8a74c25358ca42e81b3b799d717476a74257b4c4418e7edfda5d8dd7679145359b9b07938e3806afc30e8ba297d73d0a79dc6 + +COUNT = 90 +MD = 5e8568aaba4fabbfd20743b4f3834646de103db894486245e7c7ba7ebeb84767b687923262a6ed8d2cdf2993d41b66c9899beccac761d93e3b2ad310e31f927c + +COUNT = 91 +MD = 99f1ebafce3c2a0ddb4250456c760495e37879d197d282852822a72cbe8f7c83ef078f7bbbd8a234e8b36d6eee17c9b2cba8ae3d6a1c4aa6b8dad422ce700470 + +COUNT = 92 +MD = 977ca1aaa02bcfc9ff51cb01ca5384c0c9e87df076a6405564da26a751f3d76409e4e42447a364afc7291130b1e68df1e8febb750e0235d74b975830627221b3 + +COUNT = 93 +MD = 838c0c84e0571d752852e9bf16cb661722de4beecab70333d6a6089aea71ddb043ab574e659a19d4590fa7503781264561c15d1dad124f9c216c4cd7d21deacb + +COUNT = 94 +MD = d4fe6b8e412a0ebe636b8b4ce33d82c19fcaa876edf4dcac41a2d57cb646778b114237b54a2d175a25904cee8a849640c0d3916398c35d91e50e55a976128fbc + +COUNT = 95 +MD = c0639a2abe0ae099f71832a4988c2b954ee71ff11b3f8f2c851991a929471f8e37bb3e94dda1cf6a4a461f50ce636ed0598588ec4eccab4eac1f1b7b4385183f + +COUNT = 96 +MD = e9464a1575c3463a8a50c1e61c18202726368fc52ec4b227669c3b2004b15bd990983cfe3243222f1ecfb7b353cc98d8f9413d6cd51b77855c7579853b9488a2 + +COUNT = 97 +MD = 91315719df123fd441747d8f9fd9f22f592ccefddf8b3f3c39a90562b2ce6dcce6e55adc94b789297a9cd1584e0ff5ef1bdc80bce74af499714e4c75835f364e + +COUNT = 98 +MD = 0da355cf727cee3b34b1bd1e87870cde7075d4fdf1b1e689fd5dc172491e53ce7c3d2069596cd4c6db2b5975c3bd68ec09ee954c148ef56a7153399ca4f96dbc + +COUNT = 99 +MD = 760824a439b0681fcd5d22f8467d927a764febc457fd1eb62584ca82b00e1a07905a0117a955041892d2c9d849c096067ed2893aca5c841f8aa32dabe642bc82 + diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp new file mode 100755 index 000000000000..37ed20d45ad7 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp @@ -0,0 +1,299 @@ +# CAVS 19.0 +# "SHA3-512 ShortMsg" information for "SHA3AllBytes1-28-16" +# Length values represented in bits +# Generated on Thu Jan 28 13:32:47 2016 + +[L = 512] + +Len = 0 +Msg = 00 +MD = a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 + +Len = 8 +Msg = e5 +MD = 150240baf95fb36f8ccb87a19a41767e7aed95125075a2b2dbba6e565e1ce8575f2b042b62e29a04e9440314a821c6224182964d8b557b16a492b3806f4c39c1 + +Len = 16 +Msg = ef26 +MD = 809b4124d2b174731db14585c253194c8619a68294c8c48947879316fef249b1575da81ab72aad8fae08d24ece75ca1be46d0634143705d79d2f5177856a0437 + +Len = 24 +Msg = 37d518 +MD = 4aa96b1547e6402c0eee781acaa660797efe26ec00b4f2e0aec4a6d10688dd64cbd7f12b3b6c7f802e2096c041208b9289aec380d1a748fdfcd4128553d781e3 + +Len = 32 +Msg = fc7b8cda +MD = 58a5422d6b15eb1f223ebe4f4a5281bc6824d1599d979f4c6fe45695ca89014260b859a2d46ebf75f51ff204927932c79270dd7aef975657bb48fe09d8ea008e + +Len = 40 +Msg = 4775c86b1c +MD = ce96da8bcd6bc9d81419f0dd3308e3ef541bc7b030eee1339cf8b3c4e8420cd303180f8da77037c8c1ae375cab81ee475710923b9519adbddedb36db0c199f70 + +Len = 48 +Msg = 71a986d2f662 +MD = def6aac2b08c98d56a0501a8cb93f5b47d6322daf99e03255457c303326395f765576930f8571d89c01e727cc79c2d4497f85c45691b554e20da810c2bc865ef + +Len = 56 +Msg = ec83d707a1414a +MD = 84fd3775bac5b87e550d03ec6fe4905cc60e851a4c33a61858d4e7d8a34d471f05008b9a1d63044445df5a9fce958cb012a6ac778ecf45104b0fcb979aa4692d + +Len = 64 +Msg = af53fa3ff8a3cfb2 +MD = 03c2ac02de1765497a0a6af466fb64758e3283ed83d02c0edb3904fd3cf296442e790018d4bf4ce55bc869cebb4aa1a799afc9d987e776fef5dfe6628e24de97 + +Len = 72 +Msg = 3d6093966950abd846 +MD = 53e30da8b74ae76abf1f65761653ebfbe87882e9ea0ea564addd7cfd5a6524578ad6be014d7799799ef5e15c679582b791159add823b95c91e26de62dcb74cfa + +Len = 80 +Msg = 1ca984dcc913344370cf +MD = 6915ea0eeffb99b9b246a0e34daf3947852684c3d618260119a22835659e4f23d4eb66a15d0affb8e93771578f5e8f25b7a5f2a55f511fb8b96325ba2cd14816 + +Len = 88 +Msg = fc7b8cdadebe48588f6851 +MD = c8439bb1285120b3c43631a00a3b5ac0badb4113586a3dd4f7c66c5d81012f7412617b169fa6d70f8e0a19e5e258e99a0ed2dcfa774c864c62a010e9b90ca00d + +Len = 96 +Msg = ecb907adfb85f9154a3c23e8 +MD = 94ae34fed2ef51a383fb853296e4b797e48e00cad27f094d2f411c400c4960ca4c610bf3dc40e94ecfd0c7a18e418877e182ca3ae5ca5136e2856a5531710f48 + +Len = 104 +Msg = d91a9c324ece84b072d0753618 +MD = fb1f06c4d1c0d066bdd850ab1a78b83296eba0ca423bb174d74283f46628e6095539214adfd82b462e8e9204a397a83c6842b721a32e8bb030927a568f3c29e6 + +Len = 112 +Msg = c61a9188812ae73994bc0d6d4021 +MD = 069e6ab1675fed8d44105f3b62bbf5b8ff7ae804098986879b11e0d7d9b1b4cb7bc47aeb74201f509ddc92e5633abd2cbe0ddca2480e9908afa632c8c8d5af2a + +Len = 120 +Msg = a6e7b218449840d134b566290dc896 +MD = 3605a21ce00b289022193b70b535e6626f324739542978f5b307194fcf0a5988f542c0838a0443bb9bb8ff922a6a177fdbd12cf805f3ed809c48e9769c8bbd91 + +Len = 128 +Msg = 054095ba531eec22113cc345e83795c7 +MD = f3adf5ccf2830cd621958021ef998252f2b6bc4c135096839586d5064a2978154ea076c600a97364bce0e9aab43b7f1f2da93537089de950557674ae6251ca4d + +Len = 136 +Msg = 5b1ec1c4e920f5b995b6a788b6e989ac29 +MD = 135eea17ca4785482c19cd668b8dd2913216903311fa21f6b670b9b573264f8875b5d3c071d92d63556549e523b2af1f1a508bd1f105d29a436f455cd2ca1604 + +Len = 144 +Msg = 133b497b00932773a53ba9bf8e61d59f05f4 +MD = 783964a1cf41d6d210a8d7c81ce6970aa62c9053cb89e15f88053957ecf607f42af08804e76f2fbdbb31809c9eefc60e233d6624367a3b9c30f8ee5f65be56ac + +Len = 152 +Msg = 88c050ea6b66b01256bda299f399398e1e3162 +MD = 6bf7fc8e9014f35c4bde6a2c7ce1965d9c1793f25c141021cc1c697d111363b3854953c2b4009df41878b5558e78a9a9092c22b8baa0ed6baca005455c6cca70 + +Len = 160 +Msg = d7d5363350709e96939e6b68b3bbdef6999ac8d9 +MD = 7a46beca553fffa8021b0989f40a6563a8afb641e8133090bc034ab6763e96d7b7a0da4de3abd5a67d8085f7c28b21a24aefb359c37fac61d3a5374b4b1fb6bb + +Len = 168 +Msg = 54746a7ba28b5f263d2496bd0080d83520cd2dc503 +MD = d77048df60e20d03d336bfa634bc9931c2d3c1e1065d3a07f14ae01a085fe7e7fe6a89dc4c7880f1038938aa8fcd99d2a782d1bbe5eec790858173c7830c87a2 + +Len = 176 +Msg = 73df7885830633fc66c9eb16940b017e9c6f9f871978 +MD = 0edee1ea019a5c004fd8ae9dc8c2dd38d4331abe2968e1e9e0c128d2506db981a307c0f19bc2e62487a92992af77588d3ab7854fe1b68302f796b9dcd9f336df + +Len = 184 +Msg = 14cb35fa933e49b0d0a400183cbbea099c44995fae1163 +MD = af2ef4b0c01e381b4c382208b66ad95d759ec91e386e953984aa5f07774632d53b581eba32ed1d369c46b0a57fee64a02a0e5107c22f14f2227b1d11424becb5 + +Len = 192 +Msg = 75a06869ca2a6ea857e26e78bb78a139a671ccb098d8205a +MD = 88be1934385522ae1d739666f395f1d7f99978d62883a261adf5d618d012dfab5224575634446876b86b3e5f7609d397d338a784b4311027b1024ddfd4995a0a + +Len = 200 +Msg = b413ab364dd410573b53f4c2f28982ca07061726e5d999f3c2 +MD = 289e889b25f9f38facfccf3bdbceea06ef3baad6e9612b7232cd553f4884a7a642f6583a1a589d4dcb2dc771f1ff6d711b85f731145a89b100680f9a55dcbb3f + +Len = 208 +Msg = d7f9053984213ebabc842fd8ce483609a9af5dc140ecdbe63336 +MD = f167cb30e4bacbdc5ed53bc615f8c9ea19ad4f6bd85ca0ff5fb1f1cbe5b576bda49276aa5814291a7e320f1d687b16ba8d7daab2b3d7e9af3cd9f84a1e9979a1 + +Len = 216 +Msg = 9b7f9d11be48e786a11a472ab2344c57adf62f7c1d4e6d282074b6 +MD = 82fa525d5efaa3cce39bffef8eee01afb52067097f8965cde71703345322645eae59dbaebed0805693104dfb0c5811c5828da9a75d812e5562615248c03ff880 + +Len = 224 +Msg = 115784b1fccfabca457c4e27a24a7832280b7e7d6a123ffce5fdab72 +MD = ec12c4ed5ae84808883c5351003f7e26e1eaf509c866b357f97472e5e19c84f99f16dbbb8bfff060d6c0fe0ca9c34a210c909b05f6a81f441627ce8e666f6dc7 + +Len = 232 +Msg = c3b1ad16b2877def8d080477d8b59152fe5e84f3f3380d55182f36eb5f +MD = 4b9144edeeec28fd52ba4176a78e080e57782d2329b67d8ac8780bb6e8c2057583172af1d068922feaaff759be5a6ea548f5db51f4c34dfe7236ca09a67921c7 + +Len = 240 +Msg = 4c66ca7a01129eaca1d99a08dd7226a5824b840d06d0059c60e97d291dc4 +MD = 567c46f2f636223bd5ed3dc98c3f7a739b42898e70886f132eac43c2a6fadabe0dd9f1b6bc4a9365e5232295ac1ac34701b0fb181d2f7f07a79d033dd426d5a2 + +Len = 248 +Msg = 481041c2f56662316ee85a10b98e103c8d48804f6f9502cf1b51cfa525cec1 +MD = 46f0058abe678195b576df5c7eb8d739468cad1908f7953ea39c93fa1d96845c38a2934d23804864a8368dae38191d983053ccd045a9ab87ef2619e9dd50c8c1 + +Len = 256 +Msg = 7c1688217b313278b9eae8edcf8aa4271614296d0c1e8916f9e0e940d28b88c5 +MD = 627ba4de74d05bb6df8991112e4d373bfced37acde1304e0f664f29fa126cb497c8a1b717b9929120883ec8898968e4649013b760a2180a9dc0fc9b27f5b7f3b + +Len = 264 +Msg = 785f6513fcd92b674c450e85da22257b8e85bfa65e5d9b1b1ffc5c469ad337d1e3 +MD = 5c11d6e4c5c5f76d26876c5976b6f555c255c785b2f28b6700ca2d8b3b3fa585636239277773330f4cf8c5d5203bcc091b8d47e7743bbc0b5a2c54444ee2acce + +Len = 272 +Msg = 34f4468e2d567b1e326c0942970efa32c5ca2e95d42c98eb5d3cab2889490ea16ee5 +MD = 49adfa335e183c94b3160154d6698e318c8b5dd100b0227e3e34cabea1fe0f745326220f64263961349996bbe1aae9054de6406e8b350408ab0b9f656bb8daf7 + +Len = 280 +Msg = 53a0121c8993b6f6eec921d2445035dd90654add1298c6727a2aed9b59bafb7dd62070 +MD = 918b4d92e1fcb65a4c1fa0bd75c562ac9d83186bb2fbfae5c4784de31a14654546e107df0e79076b8687bb3841c83ba9181f9956cd43428ba72f603881b33a71 + +Len = 288 +Msg = d30fa4b40c9f84ac9bcbb535e86989ec6d1bec9b1b22e9b0f97370ed0f0d566082899d96 +MD = 39f104c1da4af314d6bceb34eca1dfe4e67484519eb76ba38e4701e113e6cbc0200df86e4439d674b0f42c72233360478ba5244384d28e388c87aaa817007c69 + +Len = 296 +Msg = f34d100269aee3ead156895e8644d4749464d5921d6157dffcbbadf7a719aee35ae0fd4872 +MD = 565a1dd9d49f8ddefb79a3c7a209f53f0bc9f5396269b1ce2a2b283a3cb45ee3ae652e4ca10b26ced7e5236227006c94a37553db1b6fe5c0c2eded756c896bb1 + +Len = 304 +Msg = 12529769fe5191d3fce860f434ab1130ce389d340fca232cc50b7536e62ad617742e022ea38a +MD = daee10e815fff0f0985d208886e22f9bf20a3643eb9a29fda469b6a7dcd54b5213c851d6f19338d63688fe1f02936c5dae1b7c6d5906a13a9eeb934400b6fe8c + +Len = 312 +Msg = b2e3a0eb36bf16afb618bfd42a56789179147effecc684d8e39f037ec7b2d23f3f57f6d7a7d0bb +MD = 04029d6d9e8e394afa387f1d03ab6b8a0a6cbab4b6b3c86ef62f7142ab3c108388d42cb87258b9e6d36e5814d8a662657cf717b35a5708365e8ec0396ec5546b + +Len = 320 +Msg = 25c4a5f4a07f2b81e0533313664bf615c73257e6b2930e752fe5050e25ff02731fd2872f4f56f727 +MD = ec2d38e5bb5d7b18438d5f2029c86d05a03510db0e66aa299c28635abd0988c58be203f04b7e0cc25451d18f2341cd46f8705d46c2066dafab30d90d63bf3d2c + +Len = 328 +Msg = 134bb8e7ea5ff9edb69e8f6bbd498eb4537580b7fba7ad31d0a09921237acd7d66f4da23480b9c1222 +MD = 8f966aef96831a1499d63560b2578021ad970bf7557b8bf8078b3e12cefab122fe71b1212dc704f7094a40b36b71d3ad7ce2d30f72c1baa4d4bbccb3251198ac + +Len = 336 +Msg = f793256f039fad11af24cee4d223cd2a771598289995ab802b5930ba5c666a24188453dcd2f0842b8152 +MD = 22c3d9712535153a3e206b1033929c0fd9d937c39ba13cf1a6544dfbd68ebc94867b15fda3f1d30b00bf47f2c4bf41dabdeaa5c397dae901c57db9cd77ddbcc0 + +Len = 344 +Msg = 23cc7f9052d5e22e6712fab88e8dfaa928b6e015ca589c3b89cb745b756ca7c7634a503bf0228e71c28ee2 +MD = 6ecf3ad6064218ee101a555d20fab6cbeb6b145b4eeb9c8c971fc7ce05581a34b3c52179590e8a134be2e88c7e549875f4ff89b96374c6995960de3a5098cced + +Len = 352 +Msg = a60b7b3df15b3f1b19db15d480388b0f3b00837369aa2cc7c3d7315775d7309a2d6f6d1371d9c875350dec0a +MD = 8d651605c6b32bf022ea06ce6306b2ca6b5ba2781af87ca2375860315c83ad88743030d148ed8d73194c461ec1e84c045fc914705747614c04c8865b51da94f7 + +Len = 360 +Msg = 2745dd2f1b215ea509a912e5761cccc4f19fa93ba38445c528cb2f099de99ab9fac955baa211fd8539a671cdb6 +MD = 4af918eb676ce278c730212ef79d818773a76a43c74d643f238e9b61acaf4030c617c4d6b3b7514c59b3e5e95d82e1e1e35443e851718b13b63e70b123d1b72c + +Len = 368 +Msg = 88adee4b46d2a109c36fcfb660f17f48062f7a74679fb07e86cad84f79fd57c86d426356ec8e68c65b3caa5bc7ba +MD = 6257acb9f589c919c93c0adc4e907fe011bef6018fbb18e618ba6fcc8cbc5e40641be589e86dbb0cf7d7d6bf33b98d8458cce0af7857f5a7c7647cf350e25af0 + +Len = 376 +Msg = 7d40f2dc4af3cfa12b00d64940dc32a22d66d81cb628be2b8dda47ed6728020d55b695e75260f4ec18c6d74839086a +MD = 5c46c84a0a02d898ed5885ce99c47c77afd29ae015d027f2485d630f9b41d00b7c1f1faf6ce57a08b604b35021f7f79600381994b731bd8e6a5b010aeb90e1eb + +Len = 384 +Msg = 3689d8836af0dc132f85b212eb670b41ecf9d4aba141092a0a8eca2e6d5eb0ba4b7e61af9273624d14192df7388a8436 +MD = 17355e61d66e40f750d0a9a8e8a88cd6f9bf6070b7efa76442698740b4487ea6c644d1654ef16a265204e03084a14cafdccf8ff298cd54c0b4009967b6dd47cc + +Len = 392 +Msg = 58ff23dee2298c2ca7146227789c1d4093551047192d862fc34c1112d13f1f744456cecc4d4a02410523b4b15e598df75a +MD = aca89aa547c46173b4b2a380ba980da6f9ac084f46ac9ddea5e4164aeef31a9955b814a45aec1d8ce340bd37680952c5d68226dda1cac2677f73c9fd9174fd13 + +Len = 400 +Msg = 67f3f23df3bd8ebeb0096452fe4775fd9cc71fbb6e72fdcc7eb8094f42c903121d0817a927bcbabd3109d5a70420253deab2 +MD = f4207cc565f266a245f29bf20b95b5d9a83e1bb68ad988edc91faa25f25286c8398bac7dd6628259bff98f28360f263dfc54c4228bc437c5691de1219b758d9f + +Len = 408 +Msg = a225070c2cb122c3354c74a254fc7b84061cba33005cab88c409fbd3738ff67ce23c41ebef46c7a61610f5b93fa92a5bda9569 +MD = e815a9a4e4887be014635e97958341e0519314b3a3289e1835121b153b462272b0aca418be96d60e5ab355d3eb463697c0191eb522b60b8463d89f4c3f1bf142 + +Len = 416 +Msg = 6aa0886777e99c9acd5f1db6e12bda59a807f92411ae99c9d490b5656acb4b115c57beb3c1807a1b029ad64be1f03e15bafd91ec +MD = 241f2ebaf7ad09e173b184244e69acd7ebc94774d0fa3902cbf267d4806063b044131bcf4af4cf180eb7bd4e7960ce5fe3dc6aebfc6b90eec461f414f79a67d9 + +Len = 424 +Msg = 6a06092a3cd221ae86b286b31f326248270472c5ea510cb9064d6024d10efee7f59e98785d4f09da554e97cdec7b75429d788c112f +MD = d14a1a47f2bef9e0d4b3e90a6be9ab5893e1110b12db38d33ffb9a61e1661aecc4ea100839cfee58a1c5aff72915c14170dd99e13f71b0a5fc1985bf43415cb0 + +Len = 432 +Msg = dfc3fa61f7fffc7c88ed90e51dfc39a4f288b50d58ac83385b58a3b2a3a39d729862c40fcaf9bc308f713a43eecb0b72bb9458d204ba +MD = 947bc873dc41df195f8045deb6ea1b840f633917e79c70a88d38b8862197dc2ab0cc6314e974fb5ba7e1703b22b1309e37bd430879056bdc166573075a9c5e04 + +Len = 440 +Msg = 52958b1ff0049efa5d050ab381ec99732e554dcd03725da991a37a80bd4756cf65d367c54721e93f1e0a22f70d36e9f841336956d3c523 +MD = 9cc5aad0f529f4bac491d733537b69c8ec700fe38ab423d815e0927c8657f9cb8f4207762d816ab697580122066bc2b68f4177335d0a6e9081540779e572c41f + +Len = 448 +Msg = 302fa84fdaa82081b1192b847b81ddea10a9f05a0f04138fd1da84a39ba5e18e18bc3cea062e6df92ff1ace89b3c5f55043130108abf631e +MD = 8c8eaae9a445643a37df34cfa6a7f09deccab2a222c421d2fc574bbc5641e504354391e81eb5130280b1226812556d474e951bb78dbdd9b77d19f647e2e7d7be + +Len = 456 +Msg = b82f500d6bc2dddcdc162d46cbfaa5ae64025d5c1cd72472dcd2c42161c9871ce329f94df445f0c8aceecafd0344f6317ecbb62f0ec2223a35 +MD = 55c69d7accd179d5d9fcc522f794e7af5f0eec7198ffa39f80fb55b866c0857ff3e7aeef33e130d9c74ef90606ca821d20b7608b12e6e561f9e6c7122ace3db0 + +Len = 464 +Msg = 86da9107ca3e16a2b58950e656a15c085b88033e79313e2c0f92f99f06fa187efba5b8fea08eb7145f8476304180dd280f36a072b7eac197f085 +MD = 0d3b1a0459b4eca801e0737ff9ea4a12b9a483a73a8a92742a93c297b7149326bd92c1643c8177c8924482ab3bbd916c417580cc75d3d3ae096de531bc5dc355 + +Len = 472 +Msg = 141a6eafe157053e780ac7a57b97990616ce1759ed132cb453bcdfcabdbb70b3767da4eb94125d9c2a8d6d20bfaeacc1ffbe49c4b1bb5da7e9b5c6 +MD = bdbdd5b94cdc89466e7670c63ba6a55b58294e93b351261a5457bf5a40f1b5b2e0acc7fceb1bfb4c8872777eeeaff7927fd3635ca18c996d870bf86b12b89ba5 + +Len = 480 +Msg = 6e0c65ee0943e34d9bbd27a8547690f2291f5a86d713c2be258e6ac16919fe9c4d491895d3a961bb97f5fac255891a0eaa18f80e1fa1ebcb639fcfc1 +MD = 39ebb992b8d39daae973e3813a50e9e79a67d8458a6f17f97a6dd30dd7d11d95701a11129ffeaf7d45781b21cac0c4c034e389d7590df5beeb9805072d0183b9 + +Len = 488 +Msg = 57780b1c79e67fc3beaabead4a67a8cc98b83fa7647eae50c8798b96a516597b448851e93d1a62a098c4767333fcf7b463ce91edde2f3ad0d98f70716d +MD = 3ef36c3effad6eb5ad2d0a67780f80d1b90efcb74db20410c2261a3ab0f784429df874814748dc1b6efaab3d06dd0a41ba54fce59b67d45838eaa4aa1fadfa0f + +Len = 496 +Msg = bcc9849da4091d0edfe908e7c3386b0cadadb2859829c9dfee3d8ecf9dec86196eb2ceb093c5551f7e9a4927faabcfaa7478f7c899cbef4727417738fc06 +MD = 1fcd8a2c7b4fd98fcdc5fa665bab49bde3f9f556aa66b3646638f5a2d3806192f8a33145d8d0c535c85adff3cc0ea3c2715b33cec9f8886e9f4377b3632e9055 + +Len = 504 +Msg = 05a32829642ed4808d6554d16b9b8023353ce65a935d126602970dba791623004dede90b52ac7f0d4335130a63cba68c656c139989614de20913e83db320db +MD = 49d8747bb53ddde6d1485965208670d1130bf35619d7506a2f2040d1129fcf0320207e5b36fea083e84ffc98755e691ad8bd5dc66f8972cb9857389344e11aad + +Len = 512 +Msg = 56ac4f6845a451dac3e8886f97f7024b64b1b1e9c5181c059b5755b9a6042be653a2a0d5d56a9e1e774be5c9312f48b4798019345beae2ffcc63554a3c69862e +MD = 5fde5c57a31febb98061f27e4506fa5c245506336ee90d595c91d791a5975c712b3ab9b3b5868f941db0aeb4c6d2837c4447442f8402e0e150a9dc0ef178dca8 + +Len = 520 +Msg = 8a229f8d0294fe90d4cc8c875460d5d623f93287f905a999a2ab0f9a47046f78ef88b09445c671189c59388b3017cca2af8bdf59f8a6f04322b1701ec08624ab63 +MD = 16b0fd239cc632842c443e1b92d286dd519cfc616a41f2456dd5cddebd10703c3e9cb669004b7f169bb4f99f350ec96904b0e8dd4de8e6be9953dc892c65099f + +Len = 528 +Msg = 87d6aa9979025b2437ea8159ea1d3e5d6f17f0a5b913b56970212f56de7884840c0da9a72865e1892aa780b8b8f5f57b46fc070b81ca5f00eee0470ace89b1e1466a +MD = d816acf1797decfe34f4cc49e52aa505cc59bd17fe69dc9543fad82e9cf96298183021f704054d3d06adde2bf54e82a090a57b239e88daa04cb76c4fc9127843 + +Len = 536 +Msg = 0823616ab87e4904308628c2226e721bb4169b7d34e8744a0700b721e38fe05e3f813fe4075d4c1a936d3a33da20cfb3e3ac722e7df7865330b8f62a73d9119a1f2199 +MD = e1da6be4403a4fd784c59be4e71c658a78bb8c5d7d571c5e816fbb3e218a4162f62de1c285f3779781cb5506e29c94e1b7c7d65af2aa71ea5c96d9585b5e45d5 + +Len = 544 +Msg = 7d2d913c2460c09898b20366ae34775b1564f10edea49c073cebe41989bb93f38a533af1f425d3382f8aa40159b567358ee5a73b67df6d0dc09c1c92bf3f9a28124ab07f +MD = 3aa1e19a52b86cf414d977768bb535b7e5817117d436b4425ec8d775e8cb0e0b538072213884c7ff1bb9ca9984c82d65cb0115cc07332b0ea903e3b38650e88e + +Len = 552 +Msg = fca5f68fd2d3a52187b349a8d2726b608fccea7db42e906b8718e85a0ec654fac70f5a839a8d3ff90cfed7aeb5ea9b08f487fc84e1d9f7fb831dea254468a65ba18cc5a126 +MD = 2c74f846ecc722ea4a1eb1162e231b6903291fffa95dd5e1d17dbc2c2be7dfe549a80dd34487d714130ddc9924aed904ad55f49c91c80ceb05c0c034dae0a0a4 + +Len = 560 +Msg = 881ff70ca34a3e1a0e864fd2615ca2a0e63def254e688c37a20ef6297cb3ae4c76d746b5e3d6bb41bd0d05d7df3eeded74351f4eb0ac801abe6dc10ef9b635055ee1dfbf4144 +MD = 9a10a7ce23c0497fe8783927f833232ae664f1e1b91302266b6ace25a9c253d1ecab1aaaa62f865469480b2145ed0e489ae3f3f9f7e6da27492c81b07e606fb6 + +Len = 568 +Msg = b0de0430c200d74bf41ea0c92f8f28e11b68006a884e0d4b0d884533ee58b38a438cc1a75750b6434f467e2d0cd9aa4052ceb793291b93ef83fd5d8620456ce1aff2941b3605a4 +MD = 9e9e469ca9226cd012f5c9cc39c96adc22f420030fcee305a0ed27974e3c802701603dac873ae4476e9c3d57e55524483fc01adaef87daa9e304078c59802757 + +Len = 576 +Msg = 0ce9f8c3a990c268f34efd9befdb0f7c4ef8466cfdb01171f8de70dc5fefa92acbe93d29e2ac1a5c2979129f1ab08c0e77de7924ddf68a209cdfa0adc62f85c18637d9c6b33f4ff8 +MD = b018a20fcf831dde290e4fb18c56342efe138472cbe142da6b77eea4fce52588c04c808eb32912faa345245a850346faec46c3a16d39bd2e1ddb1816bc57d2da + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp new file mode 100755 index 000000000000..f39a5a6f7d93 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp @@ -0,0 +1,408 @@ +# CAVS 19.0 +# "SHAKE128 LongMsg" information for "SHAKE3AllBytesGT" +# SHAKE128 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 14:46:45 2016 + +[Outputlen = 128] + +Len = 2696 +Msg = a6fe00064257aa318b621c5eb311d32bb8004c2fa1a969d205d71762cc5d2e633907992629d1b69d9557ff6d5e8deb454ab00f6e497c89a4fea09e257a6fa2074bd818ceb5981b3e3faefd6e720f2d1edd9c5e4a5c51e5009abf636ed5bca53fe159c8287014a1bd904f5c8a7501625f79ac81eb618f478ce21cae6664acffb30572f059e1ad0fc2912264e8f1ca52af26c8bf78e09d75f3dd9fc734afa8770abe0bd78c90cc2ff448105fb16dd2c5b7edd8611a62e537db9331f5023e16d6ec150cc6e706d7c7fcbfff930c7281831fd5c4aff86ece57ed0db882f59a5fe403105d0592ca38a081fed84922873f538ee774f13b8cc09bd0521db4374aec69f4bae6dcb66455822c0b84c91a3474ffac2ad06f0a4423cd2c6a49d4f0d6242d6a1890937b5d9835a5f0ea5b1d01884d22a6c1718e1f60b3ab5e232947c76ef70b344171083c688093b5f1475377e3069863 +Output = 3109d9472ca436e805c6b3db2251a9bc + +Len = 4048 +Msg = 49d81708d86cd59dea0ac2c1017a9712d6dffb754dde0b57a9023a39fc5f5b6be276fc176f59f6826610428fac3a0e85fcf71011db061b8fcf2bf085ccd45670effb6dc46f4e3f2ed08e981c5935187fc95b86cf46da675096b1cf9591a67842d6301116be93d8288e4d6b70f1b1db8aa5d203b774a21825665b8170351ee86801da91154570eaf80a1564945af7822df8232fd04ea65593a7f2ab1e9e84cf6ad6c494c9ec2d9d27aaad2b8f7e4f33f12a17b422bc2d4724c13ff8a8b62054d1bfb5c33b9c11183cd8df67694300165ca37637b5a781155f1c070d156339a0242374c6723b6584bffb71c02b935455f8cb086392f5e8e8cc2015956d8f19daeb6aca4476b27108387a2ce0dc5591154d0b94ddc090abe8f4363036b821062baffb7fe550ea7dcd30bfd86c84710081e1c9e450475e123c5ec41f98ff0149bbf6405b5207cad1fb2f313d0f2bcee9be3f6ebe623049640d9234ab644a172ab14ba02633a339b5b9bb38226fda5694f7ec63ebbb8238eb8219ec9c429f4bf0353383a72f2d21702f5e3c513499f04852710f33044512edc47a56bad90885e5713851a7efac694b869fa590076e844ff757d95de581c1b3fa3dd8ccd28cad4f8ae173ee1b28f98ee606dca89063fbef0f262b33053f2c854debdc9cd433ab77abb64f445aa9b981761c4761767f3b71c2646c7b0d873baae50bc9f0 +Output = c609be05458f7ab33e7b6b54bc6e8999 + +Len = 5400 +Msg = 790c3f0fd4951582e17f64a586a5f43363b8fc9412798caead2c28fd9149b5e662749a4850af1f5598cf18a04d2cc876589d0072bea4874c21e5bef28add84da65d05896cd03bda90a2ce39958278345eaea0b792fbbfbc054a18f790a189e2d8908c220d5f8b926407f0bb830fced47228766d0ef28b0b14e46e1bb9b62cb88d705200feff6da7541b1d9275c15ce25075d59a186516ec818bdfde0c423d29355adba8aa465e73e15a8950b64d8ee87a2522b117aa0fdadb9ef2b0f0ec37cf50de9d7ba7aaea928c54e878fd1af1513f94f264a557b240739c3b370ffaa915707a2c0c7fb37e8dc588af7d82a010a74173d90749e4cac7ea120dc2c2140d9604abebed8af696b02d6432c11f73696500102b2b6de7a5ebbf8f0ef6bfcee1bb9de2717151dacfc4148636f60c1b68150c188d4399c6d0066461a3454161a2109cbc313a7cd696141b5d108ed0ee8931b5db53e25608d5a279486f310f92eb1f9197cfcb6470663ab25753fe16936935ae07337a1b34236a4e91c74c62d909431d138186914edca27a0375b6457074bb44fa908d51bf45a884dc4fe9f38aa9258fbe1b1e9bb845e5c2fffa69d62c481d2b43ffaea220b8f79c866dbc3a4e272169d5e0d5ec435e7f3d9b566b511d3fe5b161c530850ef9d1f63ea5159f9a2fe15c19774efb8672c93a741e4d4ec9d8af87e2a5b562c084c242538a98abd51fcfa6e7430c41d81f6e59f8b68207c8aec51f3505cfd3ebf642d17382b7d7a563570addd88067eed0d91cc7c3ac44803ee0d7d769c250e7aace53fd31e5bb71b711d85bac3dd6012393e33faa1e6d96e56d4248464f425a2edf1a7efcc4bfd0777a9fef32a704d584294deeee7afb534ed50f163fc950aa0effc57757b76d38211bd207005e8cc27ef3dd441524666be7b27ebf9ac2e45da7aac554e7403c1f40501f41a9c +Output = aa01fa03bf2287b01f5a747c1536e103 + +Len = 6752 +Msg = 9eeb74bda360cfbfa48232762364ba9ac1abc12e488a0310eff0ffcedaffa1bbe1c11d4292161e7b79f120fc9fc41af2503961702123c90632b40d96b1f071639f61a56bd70dedf74ca57f7092ff2c74a0c64329d471b3d137716f9f03af17c96235d4df792b845ba506177904fc384938bb3002675a08998690ee92d824db17b1a47247805a2ad00c7cafc0fea38698a07ef0a2e4c81285a8775217383704721516464af581287e0a6f11ec87dc5e8a61794bb352a217be249063d52cd0dc0415f31991df88c68c264703a6a88f0747021309dabad0606c8242e975bbd7a9f539a4b3c346564c22e96c4e9668a4caf60bb3f1c1233935b54bf4ab9eee34b46d098fdc8932d5026ada47ba63cf03efbf04c3cd1095c7ddc4061072f9cccf45930e1d5c8bacec3089813e0eb6e595becb76aa636f1961a2bf3bfd062e5d90a38fcfb6fa70bb831daa66ba1436b3407e42e9d07b84b5efcacf73232fe4a960188ad4c37fe1688312f31224928c40ed794ce39ddffa735a9e1b34eab5c3b925eaaca6aab485bad2578c0ce2515f9485f50fee7956775b8866cc09ba5f7594c9621cccd55e05b959349edc5e1958b8ee3bb691cca7a374626a0977fbf69f4232c803ceaa48086d00f1510bfeb11fb312936755fe9b28c6d0f1fb081543eccc4a648835933937dfb0d5cc202ce35b8dd7444ac077faab59bb45c943700b0139f77dd488f7f83a164f2938a34f75b44f2798895c9f8cd73609ac9cb074198991235d0e4f3e4eb81ac635bc1cce30d400e9d549b1df185164a46f9cd88a342adcb54a5f13cf0359f4fe41811413dc60a80544b5459d68c4eb72d6f04218238c23958def5a14dfc6abde95af138541034f622df2a34242d6d45d28c17688af586eab6ee5af74aaa7474d796d9f8c2663feead82b50376f2f264caf36fd40a036c3df346997572ba3d13534e342905528bd848c86d5e3b778e926b1785eaabecd2c1929a59c252b63507d0f3a83f994fb9218932bbbade15925d577ae212cd0c6b04193be4547728fcc0d529aea30ac84878f33438affb779e3404901cf30a0c8573fbbdf1a23c8ce4dcd452a009b656aa3cfb5f6c840ff812b4f6e99ef1df47c2afbe92ea422f5c8dca52f134ca38655eec1616bffd7821803ea309d095b958a305d65d36aacc026807d5a7c57b0d9ef +Output = e06afbefa2804ba40d4244268108533c + +Len = 8104 +Msg = a285a84702f9cd932e8b18f774a065afb4e8b38914417ee9f4d9491125937a9f55ad6a57ce9fbd236146ef589c41303b449c72c4ffabc0a25039d17ec8e3dd847bbeaf20b240fc05df5df374d6f015bb395d47fc3474252f6b999a6a3122ad60fb019e2914a3324192184bd28873bb367d745ab71d64579a2f41cb5dc71b943cbdbe60fa5d9108dd60be20fb1c93ccb4f729d4802143fbeb83788dddf295381fa93d1c1bf6d225e333999975f818ed3e8fc3dddca8d8bc284e8808741a574111a7c5fb15452e335af2efdfca86cac8da2d8c9c551aec3f5b7ab763a9a72a581b9f9f256eb46dd74b850919812c710593b9ca3a72e0472f8bee4ec70401d625437914c1b1aa56bbbdd32f702354d44c6e1bc6dfbb60b132c192945b0e91234f931d6af8638fb287b8c6a80c3765bc43753cc8b1b903f2f0044ed3484ebdd97f1373e9f10eca49e34545be1445c7f195af0217dbf331d1135c0a51b54deebf5cca64dbd539c5e3756a39b7b0d6e13be82456fd83f2531840d1ae58cb918d9e8fc0d686cb6de748e83188dc0a711d62e5dd21c0d23ccf8d216c222eb1a4003ebffdb234fc31983fe2a21b75479ee22d33e149a9ef5b0ff95e344e1b900eb167958ae12b8f0d40920bc4daca92e599657a38b80002d779239f321b69905506e1b86e4ab3ad8947070d9fad2211cfa8d264eb540d353677d58b6c6f5ed8036973d2b1d4167e2e16678d3b7dc7ece3783c97010717ae0270d5caec3444919f41e7885c699a2983137936a130ff4ca9716bbb82b76895c2ccec05ba5061e2b2f6038475f089d711a707add8b01359aafb2779774e4613fff2e2e4dcadfef4c3f0906e075029af5e3ad79de8e34b3a6d7f3779e7b3fa50404c7f0e5c3162ef5a9655ed1773c3daf435b3acdab3ee187b636462dacecc730d418b2c41c6d7fa00521caaaf409e7f5bfe6182b507461a5a1176dc588703a4ee39cde59453a33d3b8bab4dd69f04c719ffa9c881c6996994ef35916ac6e90d6c9c0ee25cbf0fe196aacb7d95783bdab89f552646da302cb16768261773c4d30ed316caa1f4630e961544e2f3b38cdfc0452b430d2a538c37e0d9466876dd215d44ad466cd9e7ebc535de25f8393ffeb75bf5c8dd9e49b1b0c24e9763b77c1de0589bfec456e3a1aa7261eeacf09c612748795cbf1e5cc2a37490c1121fe9ef1f77a799b1539e57cd3594e418c1eb2d977480a8ba92d2e79960676d7d946bc0a20a9bc03bb86136b7e440b04394738d9047d154d6e2f44a19ed9a43abff4bb8f2773d1a6b6d7466efe92dfa35527da7992936071bf70a10ab83f3eaa449d2fe96285650485b1f0efdaa2369f7e151a33a82756992b75c64d78a380b705845bb1683ad09da68aa576a91eaa5902b37aafbba5723420b316c266a324d1816ef16fbf2 +Output = 8d0e0d0483e0f5a761eabec6a7a8f455 + +Len = 9456 +Msg = 598835b50e2376fd5728089db1aff7841c45ebcc22e14c47161aa95a9a965b0e63c6656441d09fe959cd148bb535a8ab0097fe738a8e986a93f04045c548a70102874d2e60f6a08e726f68decacd62f4bba12b0a6427605ae97804eb040022aabd33b3bc757cc1132976cd3ff55f6f87d7ca3c39b693ec3ea318bdf15ea612321c3260b5874a4aa0074b0b5640d3158ddc79f7a78abc843f463a3202dc23c0c0a7ec1cc29f48835f9354eacab2119d2e501826fde78970855c452cc4845d747de7caae8bc45eb47655fa324453024f91bd0e8fe2d6e2f7376da173df603d76906332e0b7fe74240dd5a5aa6b2c8c72dfaac3fbff5daf637dffb5cffc78ab0d22a38d78ef55721c4d9cbe1be84498503fa09f31fc87d8fa809ceb08c3d290825b30443fdad240e45d31ab4d62a40f2fda260afb8059460568cbaae5db78d21d6291bdfd217cc6c4661cd6088252d758d8c46c1f33dddfcb5d155b2fed725b26604e627a6b5ced0490e6a514f058da1360022d66be1a8c96860064aea0c611e57cf09a7d61789beb0216823853befea79a69b598c91836ac0b162e2a9d7edea2dffeccd0abdab9c2e534d43d538a2d5eaf806c7dfbe0c35615df216b8ba2a9a4b0006239f08a30d160c803ec99c64e7ec7cfbbdcfd791ddccce2a53813385a34187fc381d88ee6609c5b770bcd79495009df087f76eb2a8657a7235bdd4ad89a3f0257700df0c5b7c174976297ac061c9e37bc2c0f3fd49cdeb6019a90df0d1e4c1186cd34b8b41ef69ccdbb9d666c2aae6040ac707c01658b98a9bed400e0086834b862f8ec9adc635a81dc8aaf65c160e0fbc740aa9b2a84d4818f53b4399fbaf455f5fe96613a3136198e048fd92adc41544428d28933f1f2f3d4b203002c6bd8c54ff1bdf08088b8fe99b30faeae4b0ab5edcffab3c8fb7a66579cf51df7a2697038776a2ff68f6998c54136cd93d5c48588de2d0131caf542deb7937948882dbf7738a406e36fd04fda530d1e21a1f62bdefc705bb585ebee32abe4fa6745ae18d6de735d914f768c9f949a89a2d82811b7d2cda99e54e2d41b21f0899b0074e41b0edf1c4658e1b5dda9e7f75ca1e39edb074bd33260645b60c1c00f2ee1058c0f72f12b4bb29b345c3dfc4e9825ad3a1144f2c1bad1f8ebcb325b726611eb767ab2b072e8842c6fe4f6df789e8b114d2231cb5c7dcf27ec221dc99c8cb8ae0c247625da64f61ad03d7c9a5bb6fc943fd775dd8ac58177c62e291373e7fdd4b5d46556490932efbd2e7835e128a0c079f6b93134d80f72e2b7ff40e1c109e7d854274da81d5d32a08192b6f13b9e1c6147a4cd43ffa2a0a6854658cd60046fdf6a6512e0e9a26ce0fc712772391f306094dfbb9d8262887b5fa7641e0d15f231dfc7abd7b52724e568be8f4e684a85dfa311032ca976b2ca0eca6bbe1064fa367af42277c914e2178c20f76c1148a2443de3abd6bc06a6f95b567594b11a0e5605957fa76c922fde324066b47b400ff82afdbd85023ced720bf48b88385fb7f94651c84ee7c991a220c5e40ef05b556432064020c43e0e9be94bb382ec5a7b8707d1075682e092cb1f587a62b6c1fbef1da73d8f4a3491debc04f76a1734e5680ebc43a685ffbac1f7a12e9816998900b287bbbadc47ffa24bc65f28 +Output = 7c2cbb8a75f8fdf733c517f09b239688 + +Len = 10808 +Msg = 97242df03c0d31ee69542dc4c8cf348b23f17af476910c2b49ecbe023cee654be4ad4785d537d0bc008d87aa40ef40222f5a92af3e508b7805d7a366d7c4ef899a3997b8d56d8a780bab7020489ee13af9cbd42b005f5a17082b8cff16edc12c61d105d16437c7ec31b7d26d08627f9a284b28b2e547dfd0fbf0601322f045fce37c7917a91eefde1bb894daa9c6820b65e3768a158f846d862f09eb2355e2c1c542dbd3cda96a1771b69eaf534f5255589aa6fcb7bfb0b450ef6ecf40a5ff42b22b134ef761a15fdabad8342d875740a878a050f45fca6f02387706a167064850400acd50ccfa7dfeca2ab060f5f994fe854ccef3f83c6443120cda6f235e9b4788a69b0074de3b86f17c6d1321a11801ca93bedd116d5cbc861591d2616f03400bd0ff2ee1b65f1a34b6b16f94b5955a4e5b67d933c51e159b7a74f1aaa148e3d271400399e8b2619dc0c59cd59fd3b0198e1210e5ac74f55a23cbf5855c31d7e46fa7a626defc043382f1c16cc59aac341207a9af8a2404c9f9de057b0887c54ab47c3f10fe05aafee47c07e291b2f6a6d18ecd19c7f7ebf3e2f44a130d12540a2607f8ddb294fc07cfb095be69e23577b1efa4accbb552ddc757ecd5d39a2d2eaf8ff7176173a25529d39488b7f311b09c7155efff26e091914d1249c3e7f7bd365e6445726843f0dc2e2bc9e2ae3458795d096bc9113e16261fe4f843c05bc0a2ba68f04f3c87e1ce09830752d8437730fbe7a69240147470158b69bcef013eddec2b9f5fb7182fe9acc3cd6f3ce916a893182ac37909b356762f24973a903fce3bd4da0aa09be2135e14a0a1a1cc3bcb6dc37fc285c5dcbf8cf7b23a6ab1cc5df18b2ab8c1bb0336689e0a50ce94f180d1112bf92cf1f7959d0c9a0f470beb72557a15d1e01e9939128892e48cea3daf062ab8ce35350abff296647c9847a7f5aec625bdc66cac04a4fbc1c5a37629405535aeab6a381f25d3bc99eb270c05ce459ae2e53b4e457f661e1d5bdbdfbc1c065a93f791a33daf87a6c0c3ba030fe6621cd3af066b6a92a01a300ffccdfe2961c3f11a731d6d45587d616c1ad3cc234c748084f16d262599168247cdeaf850ad954f7cd84fb6cf8c69044e0f25446e4dcb71cdc2f97e209a3b996c17dbb17a34fb368588e020356c9132d160a180b0ab492ff042ba7c6bebb0ffe7a24b318d3c1b2d9d4a79b35f401e725dd7ee87cfaf154157395527eed49e3c1e36e081730e1dbc2ce7c2783550374d5a3ab561b5a1582f686f7587929d2dd67b9b42a812f22a6b9a286276a0e3054a30529d1748c939828dabc0a53d8d845765981aae542f6ac34fd202b58643b0f147e74fb0726ee1c12db7de88d8edcc4744f7109c1f0f044bb3b0493ed1b65fca07c1723419da7774af5978384c052c2c7f7ecb795dd8208b2e89e01867853a5ed9a7afac275324237d5a36be7f1dcd9080f6f44df5d3e80c29246e4b32f86a342362ae1f83221057fe81bf215b7dd7faae263221cf4882550a4a9ce0185617d44ebb1695158f62979a98bc69c76d71f371d82efcd37f16ef3bc312de03e968c7c3779016c5e1436cb965d49faa34c30231d290e6e9bfcd602257774ddaf78694e961c3ab7b62da5dc3b2b0caee1bf6af56ddffe7f952ce3229ce743685c999c32740585b1f5850f22045f7f27a6a328248c12308eb7e42ecb7efb0a0eba7c8dde7dbf62f990cccb339e6521f36699e047046a550a78c51173383d493f6d83b6990fb462dd1c67729745f695a0a5f63bc34342dc815c4223a075287178da61bef8a68ef5fb0ce78db3a77e3aade96a832fd5262761e6ddedd9a247235985790f73cea9acd1c6bf851f4f569189a5496ef3469ed64a8d0ac8954c13cf40034c10a1049ef7efee61f1408 +Output = 3761c527608317fb5943b927c5283acd + +Len = 12160 +Msg = f1dc4733d9d78240b9649039a55bb7dab97992e6fcb4121a8accc260f3234f46dece47aef2ec21c7f6367e3c36d8aeab2980765852b41023646874b7a9d0d605a47370f1f681814a7e669600c49f089198ccc6c5f607549b2d751483401ac5cd8df24962ac3dabb29a1a60ed1757cd764c880a95b156e66c2e1a2b2c81ab2388df735a6adec9a6e5927b656cf6a906418edacb2f4b49cc7caf80401a3128f81de3202c7252cc7acdaeb02ce32b3dbadaa6ea8ffd8c8710b5f8cedbb41b3c4c74e11f46e0d1ef305136e13dbb7cbaf129dce1e1663cb9bafd502d8464068d28752198301d23dacf587138215db2c9b31578e746d22286d03e01c5c492b9c39308eab4739210345fcca8da5f2f95110988c12348a907975c5f51bd22a4fd879615869a96a660a5e99423f27f9bec3bfa6a00be6e54b3936548893e27039a8138843b7421c0dad773982aa60a0881ee8fa17ee04039ee23f4e1f06f59175858813d52679d4a486f08c0051e87de1ad3cf1680af47c180ef1012d0794348ffb47928129d91ab7018adf4fb837e848091c2b151560a54309ec1c36f836aff563f292ec53e854b1a786c1c55fd77647bd1705b38fb125bc7d90fdc17b658a2269e9835b171019210374c205cb3fbe5d23be2fa7cc7e53c0e4703450e3a949b377cce26205f8ee819fe56e855ce916f4f761f7766e10d61ca91a4e69c36a650517fd4ea5830b3b5fc75905c8b75c26ab82b2fbb3e711230c65efba70bd2172b3c4fb167a20bf9618243046545d1153ed6011bad4ca17a13c9570e71a1386d92bf956d874518e7547310bae9ca0a125471a1ea34d797cf719a24e72aa88d33efa4f911318b8105f69786b8d16347411251b2a43a297b98b2026c8ebc66fceea9b122a44dba6bdbb0b54b080658b02be13ddd52a688765e3dc9d7090d24aa2828afb92ec21b00f2e89707b26ff16f572afecafa603db0a87cb70f620729c268d46565b87af668d1070363bcf376a94d535c20a74f8f50fed693b9a191bf6a37159dcf485c93cb0076c206307c2e8996c61f885e5dc87ee8b32780cc922cca1c531d9fe9503950089c9c9a15f16234b9e90fa929712f64ef7b3909edf4b90c9ff6ae7ca03e311f70e058c474395ad53e26f42c0f730b279a9792ff0b9eae554866180e770ec461c0acc02e543e5e92aee495b8194ca5f2726dfa082f7853d0a00b23fe75a8373e81679a80bde7b693908abbf64de245ebfe6639cc606aefa22e4e97f4a2f5d5dd3a78af61b81ca9016c822e8db51e323ac6ea16f5a65cccf67a953b9707dbe5677349c77a4bc58004cb33b62659e8b60852625a28093630f20d49d890ab43ae03b441aa7381cb84c333051b693f29177d2b34cd0f92e064be6ed33686971679da86c81ff35f14fa672f6024fd71c79ec0d8ca37524842b08325991d22d13a8e147046efa2ef892d1744ac9b8bf7ac93fae18b609934455b69bb05550c639935d8fb23e22a381264fcfc5146bad7be3e52cfde108b5ccfaf97b77ea5eb541ab64eadc8c0304298e63edeb7ed331be7e6f1282d0ed0cac9f236a16bd768ada4589f119b515f1601fc0472475a9ecb0ed5fe77df2311861c6d6d0236b12a752165f3ac055d5cbb37ee76416754a2ed1b51a2415c17f696ae68656146fcdab4782371086fabd2392004bed280a2e78bf5a305100bb22604692b4546037f1f7391db42ac3f046799a68601adfb0d16ac86134e6b56bb4ad834fd3639d504a2b954d48d20df30c3e2b0bb6a5b3e5dd759b5e8a6dba4fc0918f62860c324510a8ea9587bedb5f78f1c25ec1e63b35ad1996a6c34e75e3b0cce99f2ea6b583000fa78ad349a2b21734fef61484dc1cbad748de52117ea41fa0104a4fdbad9662c06a91cdfafa7751684f5620ea2cf7a12f2079c94f3b1d67cba1f85c03710be35b924eda5b493bc21c31f3798e9472da91cbed9b6041bc13a00d2df5c6a63ffc41cd168ad3256be3b1255270faa90ad1af99be4aed191ccdbdb05f8f8db3bf0803598d520b158430d7b7f7b9b6e12c20c918604a5e279bd0853a01abd13015b120e627b25b701133f05857c63bb353327ed6882c3c03c5d68718b8bd3991b0621af15a3e5ceb9f578b84f6f901c61ca141427 +Output = c3a84ee597601f9d816f710386c86944 + +Len = 13512 +Msg = f67736ebe3e1a4d3cb87dafe2ef8f892e3c320bdb68c385f565eeb036f43f1141312914e5e8964725a9b5b3e200b039c403a081a633ef99a2f334a4a6bd69fd7645048de8f4f07a46f5b1a06b96875b3b7a75098eaa2e19cf3886b8eb4c5775bb2d66185bd5c17d0d46f1e3f4334d63e0eb2fe2192e17acd6a0454b590390209c44fe72932d71c604f7e6fcf049aaca70e021c9ca5234c965b500fa9485ac6476461dfb434e99cbba93016a045c081557f40b1f0698fdd5d9014a450234f4d7e58b4530d0cba2149aa2f1a984dcedcb02913c607274eb88bcff719946b411f1769f14a1c02713272192083a166ed4620d32462c826876289e1a1785c6657c2785fc0cdc95d37589ebfae5aa2d645460d471b8d1bb06364be8ebbc98f5ebac00b02c8e3fc67331935657fa682e6fd64df4b9f4fe80b0a47919ded12179991a1371ab2949d668e009fd13b6f2bde3d28fea858b11780a3936cd8de5ddb6005eb636e25e894a36f9244cc8bbd84062f1bd326efba915757ceb60537b1c3fa3e28f9c7cae8c966ff598d1d179975a5f8c4c48c0c733cd84d82d6ed9f17b7b163df60ed499b25f765dce08e860ae605c3ab3aa456e2014bae363658bf959fcb9d9900a8490a8e9dcaa3a6e58019bf6cb6599e347611c9f7a1733d0e3f36639113dd41c0723beda1563748ebafcde823f955560513087a254fc053d6c6ffec4bee338bfc6e382b4b301f2c68b82e4a72b527ccdfd6cefd1ddfa5e079fcfa204155234625e2092ee381e3bc244644cba012586689676a3b277aaa4cc08a2ee8ba7136da0379b4e0b1700c5fe6ff1854f7376f8ecd6de71b8b4858007018a32d0069f3af5ed94328fd26217c778bb1cebd4df4ab71914a8490703662544d62d55966e32dfeaabded0ecbaa7da093171f3b7b70243e7a9d607f1bcddb33d272c90e908cbdab952b192d862fc927bf5331b9ea6a63fcd0e896a070a3d4d44edbf2660e78c52c419493a27f39c8d4b66cea7fc16acf733d310e3b9842b3006aa637ab092faf4a580043b5df4fe271216a34d429f8d06a6782b098ba32e17fceda7f23a837e1cd7f7811aecefa7fc4a756f6024a9dceabf6e264fffff9c719217fb418141ac57d6002e5d473c10797f137184f4be031fc935a12b78f21cc960c9ebdd07460c121a3a9a770f72ce2b0a6158104554a6226e6f0a209913257bd363d8294f18f3f83f0723fca81c378d76ff81b688f62c7f196aefc3d2db2d2574867ebabb331a669ed67952a3a0f32d6f4e9cdc522b0c9244c9c089b8d2ba42ce921e05fe1cd5e9c458f92d84a977674dcef7f6135bcd089afc1af6ad6243504c27549f6a4eccfe49ef21c1bd8e3ad78d0131986f10f45e66825d7f43326eda77a6a0eb923156108a1991c3d0c7c40ab775c847a7e308e041ed0697fcab834ddba0817f087d07cd2f58b7b840fe995d57ad2a68503a715ab7acb4e54c362726d2a584ce3f7a5880842d01f3909b216be807d68f1a8fd41a2231d6cbb47ac0f20716196d99c1ded733271f2a321602a2d3266b20497b979b3c2ceadfb7e1f73be382cdb1c9dbf13db6b75db0c807a38eb38946d08f56327a4ffe7f85e8f42060f26bf05f22314620895e4c1ba4e88aac1390f7f43ed83b23e816e342aa29d31dae424faa456a343c159c78ef6b213e774dde0d2fea4a28249f16e4ba8e1b95ae91963a4795df41ccf5f252908d4a257cfcd0e4d804547ff8df6ec2420721deb026e82e9bb618f56fb4e067a38ddbd6299b1a1d713f6fb91d239f2a7da7d514aee8b8bb3b089fd5a0bce7269cef5ec709930a25afddf45a0df6287bc1d2bdee1751785e9a2fec58fc78972de1143b8e998f318bd872aad947d18b44b33a34b165ebb7973d7e76f5cf9240dc14af0a8355ea20be8f9fcbbd57403803c620e2053731e6e39986d832b674a4cfac22345bcb3e483c29b80f8cb8cccf377f394e6ff7ae96c222cb88a63daa13571be0515e75f618935b4dbebde8c1b15e52e5c24813cc37c18ddef0c6b1ad1d30f89bea21c29c224298e381d773e97ef6c5a8f62438155a403f13b8fadef832bba6a7574c4dbaf5d846fbd14fc68e988f5c05429ac1046eec9b1c39d90215f475ba85311483bcf3b2fa0925ad7d3b9e869a9d4ff24b33f625365b0bd7c770c2edb8c7f030e12cbc61269e0776e47ae18ae5b376f1330e80789552978d9bb33e8205e21d280274a061511cff12b8c701fae1fa4fee150e8e553c8575410b37b7e146663040544f50421e286527569a8054f3c4336f7dbe8049a0861db87288df79eeb6b23042f74c71c222e21b3a7fed37bfc3d9ebb998f6d445b7095a7e1105ba53761b7e7b16e57f01aeee74f0e199019a5babe9652 +Output = 8a98643f16b303e3a799ac40c5e886c6 + +Len = 14864 +Msg = b4091d5252a81722ea04d4bee00568798ab687c8da5448f63da52919c28a53447fd820fe3164dbf3225dc7ea50df62f7cbc4eaf25fbe212773a34e4f310784c0e71026e0ad86abdf492a9fa64f49ea0a8d905546a5224aa8fce8db8ad3280784b45a38e010370f4e261264d9266b891a97c2cfacf6a94ce0a01ddbb1f21663faae5d5de6a09e90a882be1f6d1e6ec68fb201610c987aae3626ea53acd4f923889cc29ddaa7e4b55625d5d8497d7a2ad2a6f5124ed4bff81458f64d63c1f8cc98483000a46b3007bed70095558bb63c493b47ea5af29db3e1fcead0be033be89178508f2d35ab0d4960e76079924b845d389ff1183a3e6604db6de5a5e1ebfedbf5ca515b4c7c4f5f8731409dd8618a7667a43071f4ca99e7bd289300a23097de87454f17facd556915873ea9a61ed7fd8effae4b6768d4f16ac2e2b78f313a01f5698f4a85c3a8cdd390608544adf25876587390dc41a08aa9e4dab2f0176faf09df1bda3688cff586f5b01afa3463f1e75588269b7d841a433684d90d09bf4d894ffbb155445247f95d364e10dcb32fa9a1f4f7ec430909015fe7152d30b0443e6035b52a1eba2df371f90acdcc697983e2bfe917bbb5c0a9080b4c99b4ccfcf0bbd3d0fc3f8d0e3bd901377b2d0d393ec1f2e6630f13a503d8f9679abc9bdd6708dce915cf56529a3c56bb602627d6a2e594d51a64a821d978b84f7670a4506aee59e7bbf59a60d8420180c4e040b877f7ad9d82e5fe9df18f50ea75f96fbbc31551b437d9e3a2bd94096cf182df47859e4628e3b79c7f14c6ca22e17f84873826cc37d1a4b87f10da76692e358deb9483655d87050a300ac52dde00296c1d92c9d358d07ea25f9bbb505ec221d10c6b4d1524b5f5d1199b3381061c20aee398a56cff7e8e28aa24e0a032f66d3312d3a55b65b4af78a18fb9cf817b8cd2431463a21421fdd2c974f16ecf12423b6594334108cd5c872fadfe1e39659460a4ccaa7a7f02f228225395c01c5ec7726d769ecef64824862dbeab76152460e16e8a23fe286996b31e8974a00121255f92418f0a156d2efe028a67dffdff19dd08147635f89d11fa25dd371566a5838b3dbcadfe4e83a37716d9db62d93de7dadc324a27d5e88a85a018862733300a7cd4b0a1b18ad4aa77d173ae069127f16251ae47dda89029ddf50208df500be1bcc1e5122bafa66c889b2089d40e0560fccf4f165e5ade18898e636644a67e32d36a23a975a6421131dca714d2361f5b31bedc5fb2d11a7c11d103485f1bd0224739320e9658f0c0fbfcd1f60af2bc0b87871ec9e2f78c80fe28aa5436984bdba294d9e896acf8a16c6366d8842b25988890ddfdf5b37c49d7fa1f35d40635856be5e1df7e89a1dd0e792e6147c7a329bc42e0a3f3ec310224af2b913e4bd7472b93139c55d9349c69a7f03a5bb07ce6aa05f162e58cf4d16eaf96117e51794a690635c72383f9050353760ac8ccf8f8da42d6e2d27a0dde3b61285c9afe63b6ada60f08f16f384166e7867a96056187d45f58ccc29ec452162fa81b9d3cdcb280db6b05c68539771ac9e932ce41fdba21c63fc8bde060558480e0f58cf22d66680d0f69aaad43d0a56367d9786a16ba48dd537dcc282b0e0fbd969371089ffbefa4c4daa5cfa074911bc7179a67f2afd10e5c94f65e6ba63e4c939c536578999d085200c0d3968a665bd3963e20d9c045c021b4446a694599969fb93bf30067f9a1818502a16e3baa8a51fb6b7d15152a5a6b86bc346d11a90381923099818e8bd8190e742170aee70f0af12a66edd70b4602b269a5bf35f5fc03ce3a3f4136db13e1461c3ce30ca454c61e82c3a82e6debaedf50a3a6d706e7eb1561cd898572bba2d204d8117c6ac04c2a7b7c8f41dab137b57b176c20622d0211ae2ca1a6d739245d34de4027c0bb66be1d79ea39d90064def1ea5737933710682842d1bf92f32f8db237b9342eadda8271a3013df340feffba02b044216cddc2d8f861f92c538b0a88c9c4cc3cfe711d7ee01b76aed9cdc3df49be71923330c8c437987b2cc0ff7dbe7ea8177317f3384c19810c953499cf67a6cbe470f6d321f6e5c06e1aa2558e5a3daf3c5a5e287ae4377c262db72ace5a001dc5421c8c7676eb1ff97f6053e466ed1f647a3cd88c4d2052ec00cb4866c041fd3d910d246f4a32fd45e164c228e97841b6591aca158fbe4b8795d9ba3fa250b374e43063b37ca1a479cb156901ecc55d5b815ec7beb3f7b11f7447490207158791c3ef10eb141f5bbec2db121876bcbb7a7a72972fc0b5cadb267ebd57f878c1bcb6b1f5be1896693c501e83148f45a23ccabc020fbedfe0e432e7dee57c61a81f46dfd8d592ed171afc46859f3f485cc9fba6d006b65d396220e973559bb885dffadf82d7890cad814ebbe05e8fad2f489596c8beaf171d7c79eb464e5d65a0275b1abb6d06db7398cfe65cfb865c64e11ef6b3dcb1f4d65ac3571d79cb50411df0f84a3f1041b088062dc11e2d3e42be202d590bc4dfab258994c17eec62b0e941e2f9f4af29ae787cf9d66e8a39130422a382f1f1bde305500afa04c98134b4d63e8e35eb78b391b7b36494a8361ddeadc0f6363f77c721a2218fb3 +Output = c0dde2687728149c68336b03eaa19b1e + +Len = 16216 +Msg = 732fa474e7946c780ae494f9ddaacdf538e958b511556ea2fbc3e05aeddffb03451daee00cf2ef217c435a00bf1e1b09faa80fb98a56264b8e600ccfa573087cf9a724477cb08eb571583eed2f2dd9112176d5ce126cdf32a7a779be2dd7e8bd95b44dd4bd3812d9f20b87e8b23fcdb4b63df41c30ff60ff518071500e71636d242e72ac59f0423705447f1bd2bcc09bc0e4b2ca6c77725991d33aadcfab4034abfcdbfad842e877b5eb6cac160c7b6e475358014e3ddde871881dfcf8ec49bc3406d0e4c095ca4107e897c30697c3d454722de85fb76955f8886266129b44aac63499929b50b23b052348892bc56375ed297ba8264edd482eb95112a422faa96a6e7d2df0dd6610b685c7250cff21fa1d6088682b6a03681c04322836e8335f279cc5dd48a3ae6622f45bc032abc70be9ff9e51f774a15ec9514cd25055b67405a6bac92a0a54e652594d8223331b4f5bee038b11d280d13e89e8367bd14d910c74a11a1e7a1e374d9de59269fde66f7a15ff3d01ee686a81924e7c3ec4be5e45eec5f7ac5bd6011ba66b198c73ef124e5cdc8f502f21d19c56c6cd2296d282b7fd6d895d1542eec55e273e12fb00e1e0ace0aa85fc72ad96bc9851aeaf51a66a87e0f8b8102ba452ac612a85ffdf8437eb55b628bf24a778ab0b2f6a7803716775676b46b558cbca7760046ce655a25b0381dac2dfff66490d6890de57b08cb5b04a0a8d6a930c36a96df550182ae355daad3fdac4cb9311c9f79b93b51f9e5c1fd1fe1798a20f9d29d025b8fd26f12c5a200df8d650d5d9c7007910fb195065a9446f6ca84e7b07dfd1bb2cfd1171e86a246ba47d56d5a8efcb51dd8f664ad738ea8412005ff87cb3b8e03480b20e92f1ff816721a43a8629a04c83dbce33bab30c66930a9d30058dccbb59eed26e31d9fa78c82a03ad7b5dc692894519b31701f23d772dd0c8a955567522af3939cd095d7850003bd69073864a77370e74f50ce43044d0bf6b71f39e35182baf186f6970a8850b145ccc53289cd618761b5cbb2a67845d33bf634fec24c1cafcb21de17b31f1b356e838e5f4b12c50195354f60b0bbe3bf46c8a52886aa8f5e7b1e159c53b1c61c821da1231b10447bfc2e6a5d0447bd2ca1bebe2b92e52123abac3b997ed8d7b33b0bcc029c4e364301019b1c239428a7d7490e8c998498bbb78cae9396fcc6b5f3ce6d82210531133e6f60026139bcbd41e804dfed114c63390fed1f3ea6197146e5e4365c0dbb692ec837b47f90efd98c2c3f7a1013b2d69ad675a0d86d5691aee2ee73afa04b913c9ca0a6c142488910762d0f94f462627750e6ace6aae4738635eaee8e654837f25d396dc8c64d4879664bf50e4be1b3390faea7fbf779b3875f47fb9ae557c9daaa405e08857494216d1abece82b7356a733c368acb5cce0cdfa41f3778f0c37fe4741c03083508930b17e168213965862c2dbd15af242f91377dedf6c899c13c9c430c4ad724f268c0d1f16da00ec0168ae1c02f0b5654aef743dc5b2cb92fbb421bc3427acb0dfd1ec76341979dd1962ff6d4297879d9d07f846ed74dd58b46668cc57c5b7d97da7576bb86707d167f7beb5db77ef52b8060be19ed848540988a14776b01d34c8b855e6e9eb3030b4d0f2de13b775ec6492b5f6220693f0c1c2d217d910662787a9eecf11ce7f62c894a3cf3380a1d36953ff6dbf274693a3bb0523c80c181c84252a0e763779cf6becd97082f9fc6f8ff3f02ebe63e9a4791c41538bccbd7a85d2128b604fa8df65809da94a4b0d299e17912267e1058d098c8f8f6979dca95358ad2f193e93fb7df7f662d19d5c675d69e82f01ca21b51cb4f6bfac3bfe11b66004e0e82bc2897dfaed83611872929591003ed645c684793c7ecb9a39aa1a75921d87143ebef32b3089f440e3d6130e37de382c7b7b62eacb2f9b7c9c682c5a95020de6a10e9f4f42d29db628105090028c034c94c8b735091218998bc0af2b12bb58a6793af7b3d7d0670d0ca9b3e39a11897eb735eb23a02e283b2f3b0bb1b04e529cf1cb611e988c388bb928a3cea875b0090c4b667c358bb4a8b060a8b418c5e20f2e4847572c0dfa7a5715881bd4c06237bc9191087332a52935b8eefcf127ef495b3910273d5b93200df9c990c5fb864eef90d28eff2ae106e6ca4650e47d63909e262456707fedc6045bd0f6242e0497ccce92d8847b5287ec1e167999ce252d1f98ebac6f80eeb364c30414985fc45a7cd53aaca82edff46f3cc740b7221d680717cdf1e266803154b9cdb4ca98addf272d30d3134a6f9496adc26be78233887e2932ec703a8a86fcc6939c61e0a96df35cde156ed7ecb08af86ec2d0f44fd7ab588266c203f3fb8571be950640a04d0becaa3961de3d9073a5320f1b83599bb72b252780c9a5d81743b66761be78c89565fe0993654a7c783c78186f34391dca2a83f751948765d9c3e4da19651a24ba4d414bad77fbbcc146a7a67511d7a50ade049edd6d81eaf479aeb6d73a6ea9a12edbc856193897774b2681d4211b7aa2ce11e3cd5b7bae90ed7dc242475ca1738f34483755e957c2d15f71356ceee6b883108fc9675dfad3a8bac70393cd5257f9b493f832f642c962b93e40fb362f75836b6a78980f16e831cb8dc126a70576f3c37040b947a1b5859caf9cd5dd9e0058883c83f67a4af5101adc2509d403f705c9a8b7f0c4bbadc3708ef202c97b8289d1cd918984de23ce0d7cd7433a9103b72e0306e156dadaa29ea1e98be40e229face54b5a161999f20e347edcc3fac2925a49d594e34464ac8cb12a77149e0921834b59701944800484cec2dd56845b1db542cb0f54427269a3855cce4375 +Output = 33cab352bd29ace1a8a2faf0b48de26c + +Len = 17568 +Msg = 79e97009a0e3745fb799a0356a189b2053a368ab1b4da392e3c70731e276343b4fc8afaf81c92b0855f107b5d04017c8058ea7f2391cbdaf466e9fbe3d5d95d44f68f091ee4b4bb32fd3118a73f040ac460c6ce9879b0681caf3de95fa5ee7dc436e3a972e915ec70ee5c79d9c4e9c32dec5be784df3057136fecd9e61a3b1bbf18596a98bc4ecacbad230d69282b5c39462a587d24b42e5543672c2b9517bd821530baf4b0c7bc9fb40541d9fb513c8318b29fe5fcc4646ea44d7e74c93ce9d9d80a191b790958899d83c5b090f3ca77ee753c53c9d98fdc1cf04f6608f30712cb560371779c1505b41ef7619b7baca401f2ac5b1e8c170a180ffd83e6d2cbc959a518ab3ee888a0a23755817d6159742dab6e406d2470951ffd2732e5647e7a1d67b70d218709c6e28d7e74b93d3784bc1000b8285b42f9bf385b177720b581812e7d2be1f03ef4ff61c0dfc177ed4227c0f236e298f4945051e7963e8ff78c2f59b99bd2ac9eb75354cb174899d1290b2ec1212e561c118dca7b238e1abaf6628a1ab186149f8a88e70bbf912b99c5d0b9dc2b6e2b1fedc2127463f849866ce5201f217ed0b7fafa88f12d4da59d951312c19a2480768597ba71cc0fa4d03c01cc15501f697e6532db1a04d08053133c9a0011d3eeb6756932e1c036a52f0052debbb20a376975cc2de4cabc5460ccd7e026171ece6639d10c42e4ffd3093652f860eba1d2ff892111ffe3838a2d2e5f55920e47b7fc4f49b713aeeda6e56a7c79b35188c4a73bcc27b9e3a8aa3eb44d9ad28bf133ff224dc3e28262b94a0959f311882174f6fa47dfb15fae2d1c0b2d007604adbad56f57a32e040152bd8f55f509f3fe6c75410e9a649c069b3b7f7826eb0ccfc51562e1e564b83c2ba6890af00b299223a89c9ae8423d446d139da99ea008f9eb35b996fb04f395ac9b72e354a39d6f32e7897759d8b7da2b3af24ba8338d9e75ccefc164bd5a804e02d979c351c3f802d8841e6fa6a04a5e27f9d8f4241f302d31520ba2cc61ae98832928aca431cf2be2191a8a2a6b176e5130dc02e012515a09acd045d08d531482ee8a81096b5706aab4d649d29cc3e44d13cf54f61b6494cc3ca9be5852203a989619d0ffe5123b78e3ec1f4d99d248823f2d5ae49f0c55efae129cc23488732abc511cf613a332f332c68aea06c513870f60852a219b25ea6d8531acc91e76bfddcae59a9b6c75a00df00d36580eddc1f113744527a37d42e78c3d8674348dce56e19b4bc0e07bf5e1e326c10221ffc9a0b0a8a435b7d49fc89210edca7d50ecc42fde8848a1ce6b6b2a67f889a0f2148ac282e5b04ab4577d314c21305b3881b2100fee7712e576e640317b730e6d291bb3a3784bcea4e071d45fef3a50dd238d3cafdcf0d649bf0faf139842ccc98dd02e7aea5cc62ee14315cc966ce09758d2004ed23a4e739a23c1aefd7d5e8fa9447d89aa67c3aac06d5002c54c9cff880d056d6cb7fdfb9eef42340987463801e53b4036e149b1046d2d92da3df88e37baa67c1aee673a43be8b735af5164b2e4ee24f2e7dcaca33af090d73c555cbfe577e0b5b620cb80f0e17cd405b414194cdfd06df81c96ec4bf6cd2f0776721226ff68bbca7710d877a71a2780e59b3cbff05f7f891b8074e1ae373fec89f367a60aa8dad2316a3137023a36092b20a3a6e77a2d832293c165de770ed4d50643cc60481ab797001598ba840789d0cbd7678dc881cc79f65d3d4f35a4a5a3d43002c8ef835ff1fb0b02969fa5e61ac55f6caaf2824d68d2d0d3c9180a493b85b5b00c451eb387829cdd6034150a5236c31b069f38ee374fa08e14c847a6e5405b3cf2f4f29ba0be4e91deea60dbbf468cde6878ac982d9457d5f7ee63a6e92da80f43a1070086d7ac86d96a8f43ab1b411c9a24e53193ca7c123b3267308e752691c6f666c87ff43b25185baa295ce06a3c624ceba2b11898aca83b5a2b1e405d2a459b16ddd43d85d46566b7741bbb90a88998c7d4cfa7320b06b24481dfb5d44386381f25cddb11fc8633c00e30d43ac7d7af80ae359fd2971d3e2d191afd134253748a8ab1f667064469ccdee354f001133a1e172b2701b8b5881edb163fa29172f75ef3cab5105867b0e4cc7c633abe07e0aaf9f86745d695371eaf1da40a96ab6aa3475e41935cb7b20fc04228a166794a2b3be588295986f4367d7554d2bbc8756270b6c27879fc1455a27eccac613220a9c53ab232a950676d2d677682678fbfa2551a5f4816fd81be5a7976e418fa092d7f3f0cea2ebb37cba73b33a201caf16bded1408a9d839f53d1784fcff198adbd513bbfd8508f0d58d339b2bbf33fb2c5f3258ec67556161bedc67ff755d6b5642378f2847893901d9aa91c54a4b7abb97c5c7184063e8f1e97aa2de4ad7ac927dd3cce770c906921e2d298f67cf9844e61bf104db803b265b86b821c5f4d901067d07b38764e3f6c95fd4f28e3cfe48d8a9694a8f36c26f73652a529d517b326a97c204f1c95bb079972687241ff737ce029241e1f4294ddfba7be9375a0d9718b87e645682d85f9d8790c5cfe52da2649bfe936a44da31dedb2f7e0a9afabfaf63bf4a1c0dd444a385a636f8290c190aea20b78ea55fcc1f6ba769ad80ed1c8d0de73eb8e6ea003a35c94323681cfc4f818b16c5a2246d0fd0963486983f2e303b98aac39a9432b00c8c82e80ecadc90d6a039b5a7b2a53e9e5e773c6d7b6547514626a2953d2ca37e626e9c99b03a7d7e02a8c532a5051a4972aa256d2c722103722b0c637f8e92ffed7ed7a5478663dc14ec7aef55fd21566535d813bca55ba69f303781c5b8ed25802c2f9e0b40f265796d5d1a500df249c8a2dafdc6af65df3fdeda7c9a3c4073cd0eeb00760aa7ce82b3d2602da7eb980f998487b4d0ce01d67f5bb077990b6f169fb0590243d26bd358713d396babc59c528b4e11b9f2b2f5aa41c9e85fcc7c0f4716245a7d20c1edb3c02e2db98157019655cd67db82671fd8032566e0f23f199d62eec9270165245e35af55222ad0d1bd6a6211a5db92b791366f7dcd1b0cc82b4d14e8c202ca39c0483d5a25f6a77f303fb8c9c99cc +Output = 4b27bf21b328094276386a2254f4a96d + +Len = 18920 +Msg = 5cf50b563ee0db7866fb09abd5da2e36841db8e1ece88d07cb93f1ed26a2a9528af7604798464b41c1ca096d4d36cd43a2efbe5ec3789e8b172daa206c35c28f3bb2ca3a2d3a5089df8b6f3ae27af3f9072dbd31d98a6a216aef2f3253240788f68e11d706a533784aa804bc9d8fe9803a417e01360737f24e4047cce357c06643f3fcc52a6d3d3589879098855bf7ffc391c677e3d54e264a88b99625b63550aa4955ada17cb3e92492db79a3c7649e2b87603be7def7e4e7304e37202aae6fb4f8e23674b8e0bba32fac05fdbb7a87f88913f44a087954ab9ece58dc9972eae8686c09aa0b0bd48fc8cce49e207fdfb501a64a153d1e9f203b01a062edcaeacf01bacd4b5c7b5b70c404bf8bdcbcd1e756e2e74f642cedce6faeb8b90cfe97ef2c962b60927979cc8b1a3ecdd9798218f08f700065ec653ca39f47e9e05618d34fc6cbf0974d562d85d6086dfdfe1dcf3775903028a630f23d9af6fb4f199600d4135403523f191a1a02c6733292c895935bede894a27578a7686df64391380021456fa1ab97eb1cb2641fe55f7eabf16c0a2f2f93275d5747d153e2a3042759a024c3d38a9cf3bab5c6bccd6c0bf06b2a4bff0e0d7e1016879c50c857bb8a96b777f9a0d7975a7c8bee4432407ebc8b35e4058ce8f0b53dce930eaf46fe8a3cd008b8117ad047ea9ca4601dc5223adaf59de8b10dc37554837c329f5a154fd5529da92d5c8fe38d50b2b895e23e8fdfd3405085643f77e4102067a07a4700e9a5ff73fc631c55ec10dff3a27f19e6223593e711d5aee474dc4753bb8eddc6fe31f6bf8678bec68f42f2ba4c85fc652c8460525c4956e38d4fb89ef77f1fc89e5d4a35d484bf5eff50b4b49cda2f3484296d3c6ea6819db6d13df15d33552f5093c27ced6d6544c3a0ed8a9967fa7cb28a824b50d6753977ca9cf4f393c7229d3b273dd91df9a1639c64e34c14a5653f11692709bf7ae058a29e4ec387bdca0bbb411fa17ac29c68aae368bbca7716b225e979a14bdabae2c10ba7d5f87e4e247cd8cb4c6e0a5e593430c1f06fb9b8932dc9e92161dbee9c90aba92fcc53d770e6b4e8e2e0170fbea11495f3ecb4726b93d21e90e8c7a50f7546fadbed848d76629c1f6cb733d52059578cca2aad6dc1beccc1f6cae406c1d9a342e1415997be565a18f0dda4db05c4c14f7f10efd01d167f795cee7b3a3c258b2a47b2191ed02bb47a7939b247f84a1a861a85c1c40703b2efc93cd36808bfc65917270e49354a73ee0cb3a7427e5329d9a1736a7108ed2fcb459c36b9ab111c7959877e4174195f1bb333c9f32147b7ee1ec133fea73cbcb4d8f6ea55af81552f13bcb22d15023faa75a16283688e8c70985764946d5822528b3238639c7938254fadf236a06cdc425be5b819db907005181d455ae1aa284e6538680bf8608e03144286849ebfff8c6be813de03b52b55a5fb1d798b9898506ef0c2774d9e1f706b63b53e97626e2faf90bdfa6766840947d93618f38b39ffaf438ecc229bb3155af8c88d11bff2d42fc6fd94900945c9069fd660a2ecd2042f17133500be129aece90798963d5223f2731ad40408343ceb3546791f212c06f7569ad86e7103a6261eba88ad4458c3007d5de34dc91a0bfd83ce8af2940fae0de66bddf41c50e112802984df3cca5d61ce0ee9f3b6bede4571b5bba4ab42a47bb1ce6d1a25bff5b7f59cb5b28d71981e4c750d7c35ea5bc9e84536bcd08f8f499d0bb069f519871d665a42b0a0151d3de1d97872b0642d93cec420c26abc187d9469cd68f425424dbcac5461db7e93c97484525c8ef5faab0d7ba43ee192e6217d31eca08aadcb4eddda134ca773a3c7ecbcc2c337656b178bb2e7b99cd9a23c3fac37972077cd28b32ca6f96dbdf54133caf02e137c27e132b114bb0559f3d7c41fd4d71c4deee425e936f09324303e30f605258a02d711e8bf51ca83d982f9f3d5ebe8e8f5d6891a5beaba8370fdc7cb87293004be22ad9725c6707e23f6aab415a550ea372e1f7cc8ebdea36903e3ecc783d8e979b1bf262c9d345efdf8f2ef2629998cdd9eaf327960e45dd7eb9a7bfc3ca4a1fb2b4e7d19fb9e8c3030da8c51a04a35adcd3f24b6725518815cf4606f7b1d940c396384370a376e84456974de32ec4c7164da3ac749b73b30fffa836869c92a74830523cdf2866dc0e0a88d1506063bef0a855cf30c9530ac7cb3cd2e2e32ccfab03c4222db14f2aea89dc03d452069f0684a7283e4745ebd7a28240bf1e0e0686810c97fec6763144652f6a016c33e3b263064bff8de2d2ba15f7245da5ad084558aa02c4d0929bb61cf1584a275229aeb3f1aef715a05bd9a629d25132802171db1af712782ad6ba21a063211c17dd35f807c5b76714e3c0d398ef3c1d2e0e8688edf96a25856ebb03db2f28a2cb7af2bfa734b30a97071a1ea2ef70fe0d0c1df2716e2e5158b053540000c354038f6f7b6e506c68dd321ff7f647923db3c6829863d9e1940b67fd629d7c73b8469706ababcd561a2e017cfff17c0254b8ba6efb33d1365623e223d02216cc480b0e42d10de002972fd1ab87331153eb62543d9b4fc86f2028bb612d3c543f7bd761ce8c035cf458493f162e299c095a672078e936442e7a80503fca2ab94fdc224de42d0a789de600b657654370954a2dabab7585c8e6ddd14d0a479bba7fe1720f3e34a1e781b8fcb3e9cd2f337a033c523fb09cbb1ac2720e7b25fddc32145d423743581e225983d447b62b594a4df9b0b03b09bf4cb11910ecd5df9328ed3a6359d9ab8102303c83ebc0f65668531c43a7754b39ff320cf0e9d79f73a6e4900f30580aa4a3e59d3f606deebf66eaea878fefefbfa4bde42afcbbdbf24e930492355ef41d89e20c83202d92f8c85e0af8d40b55b4cfcd252b8ff313938260fe98e34f064016ae30ebb58071a70f24e4240e681bbdf2d8468f3e0dc4ebd4e6e48fc4b89fb0ecb270d59af7092e9de80c75a986a03f9077dea2617c6e4fd88d5ce3542c4ef47e8762dd3af1d804071ffa8a4fd791be3b244421a4cf7e43efdcde300c0a926f4ea57d6f30115cdbed2524be3beb5ebe55561d697267837c9d4ddef266d3f895df853707f4d605fa82a011ae282275c46185d10654d50c3e6368e5a70f28e00ca3bf163403a072049a0957b68f2d5545024bf574b6a8772dc4b678ca3f79e7482dab917fe7111f7e85d95d83cb6c9bc49a10f121225262bf53af0ed8a2378cbcefe33f5819a86cbcc88899827750b7d7ab7d6ab822533d5772cb1e6ec1f23eff6cfe863905c6f863e4af923f1d7a17d2b8c9a896313b95aab4833dd9092a7 +Output = 224f754618b1d691566b9b1d90808b2e + +Len = 20272 +Msg = e9ccb3f922e943d72064b22d7a89e8d0fa08aefb46016efcbf5e3a2daa6510268e8d5d31dc91bfffd5c40f99a9a49f98dcb1c099ee8088ec3b0bd28c204b85545f091a6fc5f158110ae86264f89ff4c6cf68ea31e94902fa9a4fe2bf5a255d9b26e5f29b232e95768577b378afa370c09bd533ab7d856490a3d474aea01c1e62a9cced9e3f73ff960f1a08bc16d799ef089fa3eff35c37151f3f8f413a585213b164145e61e61cd96f796b187464fabbde6f42e693f501f1d73b3c606f00801506556ec4d1af77a86f3be3741371188de4ec1976a4794d8b906e82f3883d31d0704803b8d6f79569d50878b839277dcbe3bf2f88700fa04d158069e2cd36ecacb7e5dc23b9e600866a8a33cd2faeb0dfa48f8c053de0849e2d1af91586143911a2d300ebc3a33f65f6661b993d2d392fec0539d3541480e69fe43b74fbfea067fbbb77fa3957da7041473905aacca12586c93ddcfdd21d8e348536e8741daa1688444a366629590d12d393f9c0b56e273982a0067f42e1fcb4a6f2573898de8612178089914245a632b2345ec50d2b9fccd86b3b248d5699e7ee78ab9098c51f60db21da01c926a26a8d211a02ff5df40875a56232db04cd9406cfcac445e54a3c393610ffe78269800c6317bfb08e8eb5fe5663f25372018595ff9e1cc6c96d6cd9c615d3c4e3633cd6033b444b45d59b1e8626ac1e289b8044110ddf44f6f2b962d9d0c587d0f868940970d8f60b31817b3e92a863ae054ebb0c0157e6f63feb7d77291d59d290caed7b9dc4d9670a30bd85912d4b8da5b7a1f861cad54fbecad1a908226170932c8a63aa511ee1c8718d640b84fe4ce5829ede1581388cd51d0776551dc832695412c87ec4ea01d30a93e2e6f6a3732c795cc504c43832eeaec6e7f856b5a07a0a2eb30368685093c376070bc9638ae16280b518dbfdcb7043b703da1551432e18862b2084bd557166dedb6245651a6e06b5b6380daedfc3a581d2e1a2c3a2ee45c138bd5f1498d3b97567d3b4d2aa3a2da1d14ca374f44f9ccd5cf6443445205888e2c34293a22286e0b2475cd1c3ad9eec0d3de576947bf043aa0245ccb52e1a8232187562fac793cac4a4878bec2f233f73f11bdd46b1688ac3ebebb2797e53582fa540aa2828a8d9a6d47b27ad28824209518dd09359cd4baf9b7f0f197acab1e252eb93b5af8fb55fbd80ce8e00849cd945837801d9e72d77f8480a1e8849365108bd4428c30f07f749e0a8181ff1f5ebb644fc1a9a7ed922ec90cc0f12968f86adffe609cbef77775fe1dcd2ee91f7458a198566045af6b85e9d7d747f7a63892afaa0e131f8ace6e6cd9345d32c48f1ab4a3b6c80422d4235b943d637bd5a6068f39b375cf24f4cc8eaf4f7378990f7ff1f45b4740026c65b2a49bba2271d154e35fe93b4a507b2ec8128728371785d70dfccc6495a884fb738b5ae288054b0c307f27da1d87d1f3ad9563e1daca72de5d4f72b6819fce2312db034318fa737b1b09f7e8b55599b9a3ca7e16f02c76f4544ef6a37052989b14f61d7251dbcb4ff792c1ddae2422ef4f043e5df3b7d297a78db0b20e5b84b1fe8f11e6cf23e2e95aac2e3f648e0e1303e51d2d71e73656bb8e4968a825031633e87916ed6d3ae5b8b8857484edcbb366ef92ebe74512a004c3294dda59a4166994cb99391233b3963a70136bedec4eec86583fc05be81217bec8d80143d850e43681d44ead7dd177c4669295f8d054194ba58f9996370b68e3b07dd98e20544830246e7ab979cdd1c8e188af89285151923361cf8e802a7cd468c5bf831c8f1a042bae69a0a81738ca795bf52944d54a0c6a4cfe9f43cdc8036a362fed1d6fbe35103a780d993c114b86832353c63e471cb2a7a362f283eef32d55a706b374c9457a99424acdbaffbe91a496832d1afd45b5083a543cdb36263a8ab17a6f4cafb7b321350295f268b64326eb51d9f9b119e9f53ffd5332420f0a6bebb2b135f5fe6288ecafb290c0a4e3808e2a6d3926fbb9e520b90637a720257f924a19ff20ac0126c5bc8414bc1d2b47fb874777b37dad6e89319649ba0c142c519b19d6a42307915cb39adc9f8152f3aff30923db225cd7e5d1b3e71f254ef8b630317b1505ee4f1e2f57770f74231a37f812dc225c20d7a333cfae3afe4e6b1ca3e14ae7c73db6868a5a726057f4021ff104ff1dbd91e46db249fd82198b0a1160b9d490d97e6e224f043d56bf4e61c498400b21b9386481d7c353a8e99d4c10f11b96a4df18ec7df7f556472cbaafc238648ed2c17cfeac3ecc5f03f0eda7b7df970f982aa5a7f61f9e4bb5f29142a56be308a578e8093931b55e27c204b36276acadef5e9d3727207f9c27d38ad0caad3bf72e42022aa57b2f0f88df7ad59d60dd001eed77f08da519b611320fc0be66efe8b1bf43c99d5589b1ab9ba8b4e528a894bb49ce8aa607ed28068098a90d436f3be433356c7d6b6603049926a7c6388fea2915f96bece36a607c51add013ad4a8f4a604f99c2174462285a6d44bd1af35f0cb4810aeea2320de727b7fc7e1ef25138a90ab80803955d8b51f502363a8381bab81dee07deb47edb755f84b9130700438fff7dbb9ad963a2124676ce21b0f0c792f88be4e36241ddcd0cef4113e93b0f87862159579103111de9f8e17afc0ac7d7d96ae27adbd5428138b292bc396fe12237696dc45cca3cc7483f1c70d55e2ff91911acef71c7be447b654a5647fd5cd29bac756b8d07a9b0f98febdddd595469301690cbd497b5993d8dc48cb581f72b2b60eca7b269cc6d7681bc0c649af9bac6c03a9a74a3acc207829dca029c349e5f3d40236d6f395f37ab19770b81746035c506d5c29a288151ea3298af8a99aebf882c490e6654f8c56290b842ab58fc258b82085ee9ad49b53b2f632cfb9adec4d7ed93160dc3ec985e9e4aaa871bd0ee9a389c99f09f7da9dbe0d40b5dbc90f7b3209c24b3fa8d38e5bea8938331a12957971d146d93af9872f345bb3f7387c09041bebb076d6d1f9e6e4cae5e3ecf3e7a2a045eaf1e521966d342bcff5405c7f5ed953966810ec4ff19c14b4697cdc6486decc9439407954e0d55913bd2ad766a709a305ff9e4c16e6d810afad12f3968df30e4b99922a48f0de8d87373e14454774820622c718d92c6166dd98f6600420a6b417f9255bfa06196e324cc33ca4a6e2999fb9d4791d2bffbd46106f4c36a5c06600413f35f3884ca51ce203760b2c1b90daad0d966c4b79bdf3fec6dfb5860acb0f5929e0bae040da4de244eb0341e60ebfe4ba984df4990feb4b44400829498c4b292b83d774bdb4ce35cfc2134d0cbb554723a6498e255b36dd2e98b7f84850bd9a8c46d3ae8bdba6c1ec24c4b85640a4be90e9e781e648dd9ecf0e4b59cec06b92965235f571f8dd70e2399dea8945b4324888af35a47fe7756ecb4bb6a2845ffa8fcf85b038b37c29fb28264b70718e8994ac291327a85c4952f63f768d43a1bbc0e54c49a8b389d37d1ae744d26d39adbc7dde81366a4504c4b8af0157a537bb71ba102789a10f58b136693b76e0bd84082255e89b6da98d0c39 +Output = b24888418386f144fb0e150166f7d9f5 + +Len = 21624 +Msg = ef8779a8789c6a860e8eb485b9d83714fa832aa45499bab80bddf43b2cb9e517cd78000396b5c09c81138eb8dd2fe4f799d3b39bbf6d02993fbfd8efeed75d39ce423c7f907d4b5257ac6e17bf8eb9a21eb1d4070ae2a4ac1be827a3f172a037794df5c56dda55ce1ac01d4966defd3e118457903be2e71b27c0a9fe3e70f73a5701f27d35b6243851b664f7da05f9f2fbb302df5c54150bebb026a9dcbbaa6aeec7fd4ef1f801b985f809c924edf5e763a89e9c741f74a6f01e654cd33901eec905dce0a88834793dedd4664b7c3844d1caf26f8c2d4d14bd732f8e2cd444ef6d2458dc624e059f01fd8f77579c0c32cd81c8feab65e77dda184c17ee72ba94648d39ea2731bc53599000a35134b7d9e035e6f4d9af8c08d073849021fdac0635a747b1001ca0bfce0ef193402c8260914e15f71ef382dd26ee9fa1ce5c626c68d94adaf4f4fa08e7e028ef2c6cb5f069341daf8319122564f064f1fc7724ef858d090c0ca212592d6c6d5e1edb98b0ef50c6c60f0a840813e09c29b3363ab7152a4df04f0e30d8271b8a881c6373c9ab08d8e1cbac20adba280ff0fb81ebeba018de2ec5209cad5d55451631eb8d6225c51aabbde82e3de12f85efdd4081b4acbe846d76c19d01578368b0625c2fa4e6f055c9efa7f5df105dc6ce605b4239c38607556bd77dfc9e0bb9fdb99ca1b775ef51e669cfbebcd01a99348dba77a36cd72e8fab4b82c5b95701a63d942bc25a2cd6a83149d1fba8cec8c96a4667193019c2c33e06f58530cd0752f62c15ed1e0dacb751fe76c621e1193602e55cc495b58c982def1e638cd795aaed4da66248fc9abcd1d5f542c1bc55235a809ccb251151b77fed448853dc715629dd274660606a5fb7b5959913c544377c0070576896dcc83ceab01b104464fdb2c5e0c4eea1e2470d889ff39c65ad1b6f4b2090e5acf4726ccdab454876364791ee19017b27cb1ddb355b77e60459773b4bf49d24bc605d187e7b2e85dcafdecd3f1a288e59ec8827a4114e780b11f2e9e634a7ad2ce93248e468fd4edd97676e9f2a5fb0a10f31fbbd099fdae09b347f0627d50966579902e9bcdb2ce1b58d7df893ce6866fabf5e688a9395edbfe608921650bfd072395074bdefa650d2f501319b9f3e1176db598dde52309947b08972493f57d401bb396eb5624493b64a02328bf7ba084b2df2144b03334bf9390c8e08cb59d9cec6c6bdea5b8e10293289e3ab0165b4415c33e51acf266d9f2a98ce9b1c4e479f03fd4aa5030d30f3559c2c42e2c67d201124e893dd9266ff2a361a4959be853d1ae8fd2d81485bdb5d46f59ac566ccaff3cc06fd56ff9ee2e2ed5a5cab2ffd70b28fbeccfec7faabef8c26f9d0cb07b7ab3325a261f37d0ff9c5761a392b16ff73f876c8a2137329b678a7a82b7f9800e0612ec827f86b5018c656cc2c3938b4072d0b6a94b3301e571160efff0ae5523b5f0ab8cf95d06be7f9e2b9abe2cb55133667fafd2f97517d5f391574f2587564349fba825314290d65032bdfac37ab421970c00410128cce6b1b64b1c1573002e8d71568b89f5233129f68ef21e57e39e01003d2dd0895f23cec22dffe4c4dbd849913a84ed9ae00099fb904c93b96a3932e0d8e1ee13592da969825329e923f0eccfa6b9d2b041d51ec66462ba2ba2638b224615c0434564eff0eace4b5c82d915a13d82cfb1e31f26cb7dccf83b46ad98391731ddb5ae59f11cb9b9cf9b732122aa61883b2c2e5f509f4ef3d444a187d8b9cebeccd6fe8d5b2191be3d226f49b24fb522ab9b9e161aa64a6fe4f45d82db18cf24e423a06f9cc3e543fa8de1b333059afaa76cbcc3e37502a990a6c51f0ddabafcda284e81246836d3be3a850e3360a578953bf4f959700a296df892ccef73f4bf05615352808308f5ceb4a3bb21e547152b75f116db4bc377e356210cfe891ed3fc4b59644fa8de12c288c83a8d080258a0a71bbce75cc11d773c1a6fc96e9be43552cb36c04e28c320338d0cd35d59dbbb3bef4c0c277572c036c965cea8fe683714133ab0e76b7f6e214cc2a339dfe6c1c0e654c830732024c2b87f7ccca8c8881bebf0600928b012eea1dc6b31e7326ac29b579a0c2c9e3b6c822d625e3d8d8eb69fe87c27e30da50806ba99ea22170cbd68d5002f14556a9090e00db22f3fd190a99353c82cd09ae9e5fdcda6f33d2e1df95d78fdbcde48db8f37dd8cf057f716b371857e68a17b20ea06651cdcfd4560a741830ca8a13ca9b7b56023235e45d538139f9f1908bc397d74fe9061eff9320d31bce04a36ec87b4c924393acb644891e9f0bec07ed4800aca08c6147dafee859e64fd2417af01f0e398239927c8ed6b752761f17c6ab12c660212572ee002caf839d7c8cc1a8516a54a76d0ebfa202f45b20d2e69c5395ce97909bc9c102b27cfa9e4aabca59d707ea99774806ead57cc1f34d9ffaa8516b4dc10b71dd6a4369513c84c71d6c7a8f03429f69d9cd17f88cd6d76865120d468b9bbc95caa1a71e925d7107434702a7a7892d99c0b38f0fc5b0ba6967f993075808f85b0e10a642c5eb5a94c35437f9df5668ff4404066a736b3ccc87c5a955bdf005eb331e087df0cd879525fae12db29199c4ec2944b19eeea6b64ede18d8c1392c6ec13294791deb4033f2a0c7eb2923080f4188118b4e21405142ada7396cccb50c3eb613db532dcd96b1b0b2da4bf2fd09ca8a35a08cec51c5ed982020c691e8ec34114e4e9b7b75e5ea916aa220e7c0da0f9777995f37233ad7084934d8700d372aab0a78fcbd824925abb7ecb0ea98a99818a01ed0eafcd78666ec1ea9526b14a9ec12017edb3ae9eb66616004e4cf9eee7378d6e6ed25c48418cf86411d4bac383c2d9229bde6eec32a2fa523bbabe39812c76aa928e62a5988bb12a9bbf5275f0322d3064ccd7f365fea641559759d1e5b5581218486318b1c776de812b1aca6a9ba6b1c6e39c5cb6d5a44e3a474f709b8eac457e74f00a43ecd3d060cc7639696bd03730c70e70abc47ee9486f217df904ddb523b87c02c55832b0c907e75b632f342140fbb0e7bb4790930e635252b4b476d1a667798a9c962de0185200a8ee623d1065d6262a7beb73ec0ab864a7250a022b85267b1a50132ffedd5f349a718175751e0ad0a1540cb354abf2dad3e0920a433e59e32a767bb35d967405b8832957dfe7ee42f4da47b95d909727816dd8e98930966443862c429cc234e68b99a66eb14214ef8d850900672719dd08334b4a9e1a5050fdf5a1782cef16797c3ba52489bb0348e3daed2321fdff5df0c77587d24a0c4ba24b77ae9e7b9d1102df8203c9c13de18042408bee73bc3cd390c43bc64e4eb6e8fe2b6062063d5fc7fbe9a711d3294bfb61cfc55d36d4fc2925c3d0fa958c252a941938080d7bb834273868c29f59eabdafd749de95ee1e5a0cf0e1efce4918ff93dd8000ffecbccfd7ead38c5444303f82f393e33f4c15eeace7d9064709f4c073f4f2dd6be4d003849d71bfb07cdf0981a13e1b9183756f8bf530deae435b25cadbeb0dc0088467c3bcbddd22682994326c92e82b38af5530b583f95289be97ff0ee302aadc5c74fbc53275389ab2780bb25cc96ab0362821b54cb6d251918f871a756c6ab4caa3c3435a184188fc1d841ed64fdeaeac60d560f5c7ac1f7675097b0cabae46518c80b3af26fbc7890d220ea9dbf5687487d235098c5e57cff0ec9d3330e3e58397daa2ac21c5bacbbf6c0e420e5d9211159ece127557af108ba71d639c8a36c34e277cdbb91de746bcc89a394775a0148291888b232669e +Output = 82b41ecf981b19e4688f26f7ab366681 + +Len = 22976 +Msg = 75136a44c5052980e46ee5b06ec445ab6c40ae14834214df6bf11010a32133c6637b9b79d3d7c3807aed9fd6f92de91df9ebb6e362bf4c25cd2c37113d7f9a1009fac4041d3203ce63b6bd147bf1bc41b252cacd32aa7ebe76d5556f019c049050da0d6e0dde9174851165f25cd8681e7fbc13595bc951b34d3391b059401a4d1e619f3e09a2147aca45c0f904aa92bc4973b80f45e56e0b3990145eac32844f5dd9a2fc7b4835e6189cf5b0dc2fe424f6bde27758c57cce24320600613be99ef3883d31ca969bc2595c2ca04a2f065d70e3b91afd332404f5628e1fe223f243cab799645e55ee1674ce8f4fb771a06f9d2c647f9af50eb69468d44296b24645c8adde1d9f4cd8e8513a43478cbe596367e20c2e99d4e1ece88c01f1e5af8eacd7b433e4f545ff42d8e873102fded940b54bd8b0609846acdb163db537e47180de12c042c8060b2bf11f45300a99c90e6eb1f18c5909e400544daf14f41798cac410aebe8059a5ac8429e13183b7d1d67c5a7e4aeaee64ef3c7b80988411aa9273f625e1850475cb794c709b04ff989fc68fa8737d116d8179e6d7c9509a50ded20c4c313fcf2292b8d11af4f43ac7713497978e7938a8bff4d6dd2ebe7a32b8c9994c3817845509290006c6bb300554aebc7223462cbcb09595ba4f3778f72740e74d7e73e9b537b5205d98c1a9fb511c4462ba4cb5525d456a95b4245d47341f3c768abcc8eb24427b46f36d6d516f66788edcf29a12ccea9c96e6ebf1cce54ee1efe45be79ed8b957ea5e2943aeb775a01f10a2a5a3076d74e76cf6fc2b44b61ee114b60e775c03fd71615df5ba2f2f043cdfc49cae16b73aadceab460f593d3a74a237071db706b502846f491ee17deb0ed0be48daffaf36139574961e2bcc7fcf1745993af1acc6c550c80882d5489fbc6bf971d0cc3caf3e48b8b600c24c331bfb478b7313dc7ae34cd0fa8d1276666f38dddf388548ef596fde6c5e26a39f7fd4a7a672237e178401efe6e8a0f0894fc0d359b930ba3c8a925081e060bb0b242cccb2df2c79e6cff58e953b879f4f838a41a9fbd77adff93a75bd2d767abf318a1e776133b72fedb213d02dcf6a02341e9095a7816f20d0eeb5e7ee73ca02cf7705bca1421f3a06c0e85d668138e8890529e665378346343778c9ca5c921e267ae94b4760994e41a573048fa5f34babc67263dc009d9b4f9c26296a3bba595d1b32eafa960db4c6eb1e8f50418271c1e9d5d6b5e4a56549a527d0751729fc9de2486262eb63b5be1950c4505fcda3f4f7b90597eb84ed4adae48694f9c94e0d58947a2867839751b8706d3806bc286c7786ba2b1e207b79c4c3126fe88199d6047cfcf41256a2a64fe850af3f374a50f1a3bb19846256feea2d3eadec39231f6e69ae6df5c220e6661f365e11264fc8ed7ad0082532c802d48bd0f70dd936111fc45a3c17b05738867de6ec847180fef472c3a00a7917ad0b4391f4544a18d49ef3c609800990c5356a2a02a00025178df35b8a3a1d8c2616bf494dc872118f7360bb7b39b313b4fe4ec8486ebb863e41655f6ebd086f967d65c0a9723a6b6a2771003a4998282e66918965f58bea99973198f39c200824c99fbdb1588a6c8e41905fefb89f175bf79b35023d569b5017bdcec2de4f9ef981d40a0d844b5e2349249e428faf276238d594c64f06df8c4972c8838b7c7b3c2d6b6d64fe638750c89586dad5b2a26cb1a56d5a3281ff75b6b850ddac8fe51656ceaf5eccbc303e454adf60928fcea0eb748a65eeb14232e5f82c78486f25af836498a4f83da01548ad717bce2ef4276dabb1908c7cf2ec5e9825fd6706832e3c95efde8acd21fc592503d492775b28bfb0ab8313cc55caaa020314113b46bb09c97eb48856f91b011a5f12e5524dcc6aed40e58b88b5f5509c8e644ff6b88073680bccfcbf719bc7f44bded0a7103bf5c8375ffd985894d8d08e96281f1fa201da5fd1edf0d1a4341c90e05a5eed9ce8ab5a9870e487d0cb05ca51a59fc44c3c88426964d0615dcff8f6bf8b5f2c17ccfd6f39ec5389d1b0a20b3ecd5cefa4aad87b3c684969ef20f144246b9215d628263fe979cfa8be0f111905a83fe8d2d533d4f301423082af7044b603dff0fe848e925120402abf71b9bc4d3e30f6ff4502133637a4ff3c05dbbc1e5a2f04ba689d3018e88c58fe5c02bcbe9818625380ab01ac13551e48a99b750378689a305dbbe0e7da9c7aa05b54e001bddd75f5109866fe9c3ed5cc2319370e6674fa88ea506b66fc58d8d0f317f1beb569740e7d2f0ad4db476cf1fcbcc9e72b396ceb98c49a3c58a8b9b4aeb3b89c89a2aac54ddab4d4d6592adebbebf535cfa13881ee7f3312f67567741391fa4440725e430a002ea9975a58bce81081a05b93a57174e9fe8fdca52839aa17825ee2c0d7af3b083ef926343eb20b9236d2d6f6fce4b26ac55c1422452bfcae179178735e32695cad6d89cd24e9add9dc7048b48601316b4e20a6d2067190be808508753bf41b6342acca0f5288554d3b25bab488f178526284989fb234eeb086e39dadb61cd985c75ff1e00fb88c561a9632de4ddb0f89c930f470939b9feaf1533c0317d32c2a022d042aa5a1d95c436ebb1a1ce87f764bcbc22cefcf2ad6897cef5fa5409ababdbf0dd45a6ac4c77c535a503c3f4f83b0fd08bd0ff717db1507bda9a98cad9dbebc13c6773cd5ff8eee1968f60a0717bf70d00a3b3cef605f9bafc96bdeed3ccecd1fe8433e956c41e6ff4a926e309941c921fbbac639cf2de1cba8335fe1fdb49a382208998b765ce314df58955173ffb30478d6bc7d8f48811b2c493611493aca665c0c744086a98f610d8fa7f20cbed47f69d54644087822a73ef48d05892605b17e99f83a02ee8fedbd81cb9bcc49d49db6008e14a2846c75c77e89462341f52270f54c0354f48ec1d8742ad51b675c63489fb978c5360990ad2d545b815340c01a689a23e28332e344b1ec2761df14db05faf2f5d9549efdda4a16cc09248e94643c07201663235deb80381a067aa30cd6585f1546a7d6c5341cf622257b88a437b7bd84575b0a37b32836357200b2fea303285f74f756f1a5ed1de43c21d5fa7923e4d60c348f7786f310000e39e8ba5541765bcc0cc9891403b39ab5df1e9e14c6a39f9fb659274b27eb0340ecee47d25b7192b4add59368a8dfccfa7b0b96eee9236677a9114eea0df2c771e36bad0499408b95a422198b21c90372bd43ecf1d38cb3fcd55ef54aed4ad30ae408f5d2420cced8b7592264b99ac6856f6fa804ce050f9602e923550f1eaf71b86d2623a0fce4e3af22b7dbb77a9e9b5736d00e20b600adf75ae0f2ba94e410274148e1f93954205324dfd86290121c3f416ef912c810a97d58340938d4f94ef82c64f396eaa6f56d08a2430405aa70ed3889acec63c7f25c8b2883cf077692f5d88041bf3863ccc3750804e300ee0029c12a0ff6aeacf05c9cc346c855e446e4eaa7b3bb4b120c1f141a0447aa6732bd87580a78d2470c44330e3b6be5c9d18e0dde31d44a3b1d478ddf297a2b9c6f6f301b85b9f720acdef70f4affe0b09bbbe72fa3505d676703875f5cc3aa152009657b680243c03af091d05cce6d1e0c3220a1f178ae1c521daba386694f5bab51cd819b9be1ae1c43a859571eb59d8cbd613c039462e5465ba0b28db544f57a10113406ccf772bc9fe5b02538e0b483225209c1eca447ab870e955befae6bf30dd89d92ddae9580ccf0dfac6415ec592a9a0f14c79acce9679f52d65fb8468012cbc225152d9ed29170eed6e97ccb769de157e26f6cfb68c4f9f3e84c870d88e592ada8bd9d1519b70ee389113edb4243d1e7152a435c9065c47f78004648734fd466041d2582bc0771c8af2283a426e410c993414778ca14a9ff6dc11b80a81839f31f7dee6e254641a42f6572ad8847460546fc9fd67c974f7ab1d82e3b91086b5ee3251f61bb3f2880f122347ed1351ca114a274ff10b760f82b8da80495e70faf375ce1e1e6b9cc63dda1f09f6a7639a7e77ded79ec3c8182 +Output = be7fd7b2e9b4aaf75165e4e66ec9e6a4 + +Len = 24328 +Msg = 9202e884fc1fc78b3ba2b78ff17b78a1f9e7e87840ef7713d732dba046e5059d2218533de23b070deee0f8d7f9c387c69107d5ccf4c2334126bcdacd4074dd870b645b5ecd86f9b963178f5a909b22889521136d02c895bdcb8264989e18b5b2746f68b1670985d6c3cee6e05f0d312d2ebe0a23110a86ceef0de2ca08da756486bfe3fc55cb94ae358e64310e209cfe836522b5c98eecbdbae3ba2b25c005e669de320842d40c87e2de711444dc4b43bd9ec3edd45eb1d3538e56839ed54d804454bf9dd42dd7aaf2467552a94a274403f15591d782bb55e3961c9a1a1e35793fa7f182b3dddb5f8c4ed8b3e67116487ee7406a7d00f48e9181763842a5a61b84612f8188ec02edd87f03ffa35a01995507ec406be242c586d9cb24be7186ac3809e360fb63329eff605cfe870bd17db1d9c1db4c308f41e9258327358abf75862874e8b34955b8297a4c783b8e6c3dbae62802c6f0c24be3ee060950f937be94454ae159a652847d533c3467ebbc2197b5877f812cc32b9cbbbb92b6c5d8cf8ae8cd139483114a247592fbb228a87071cf471826eb7a293b140c890ff688ef919a65460de77a524668b895c44f17746fbad1965d36cf8de98160b805953167d1e17a416cda75e309b214ca4667f373ba008cc0cd14aa9ecd8b20e53ea8ba80714874cd5864ea4698dd1062e07923b67928df601f8df3a510b9b2d9623a0b7f9954bbb2798ec1c419711224398c8f85d5bb343cfba992ead9947f5c1a500caf738fb7b8785fe2a3b5f484d9faa81f28f640f21e07716fb551a3ef360ef4a5572480d0a6fde0352b93f0cd49cad5bbe6033f80cceeec724e9f6e6b2ee52dbebed7af6f46af17a3a6dcec553c521c4b082541480e562284fced7d590d47043f2db2a5fa5e370e125ab771847a3a84b7d683cdb1aee81c8b096059229bde7f10ecdde9dbb73ccd6b904d06c2ca2916e798466b23724be170bb22892fa04fa9194381037819675a9790c53377f6c7d9c39695a3062427791c5b5b95e7e44587437ac67c3b4c60bf7da248800bc4bdd5341899fec38a26ed76303206b12e662374d8d3db8b17ce04040efe76e6fdb31220657903c06dee446584d062f7485a8495a6d1a8cf435a2f161b0e9c7069509971c65e3b66942786d39d5d3420f8cab28f2de76c7198ab4a9a13a17a12cf3d710d83702c1dc97abca7c4000194075eb648b23eadd8de6a5c773cde9932f822a2dee4d6604ed28eedc941e153ba3dbd97aa80fdf66cdd3e6e97dfee803aada535ca30b95f5f780d21205c29b1fc61905d9cde4dcc955dd087e143f8b790b47131bbb140afba839c60965d00a4c13d7e10051356b9bb25c7af3db225c79ed52c9e98ad94dac5bbe5b3128b8db3729730b9cf683f4446feccee93729d37cada7f84496ddc68eae890217d30f96675384d60e12531f69eb0874dcbcc878f7e8911ecb53941df90d145b3bd926b4533e87e0b239253552b039fd3ce080b5821ac8bddc659ebc91e3fab70bbf90cd9146e6bc47df6ceeb56bfbd89826e53191b099460631401adfefa6a605faf04a98194bb92d79bc94085ab8875d046845ad369d57c74b3ac1497ca2b8b92fb7a3de020177e19c76dda2190a9a1a0d7c9a4b393f539e27e1385517796fa3a24961e9adb268e2bc3e2439336c715db6a487d22519d9f93bd5f8894c852b4407382d3188d91ccf5d74f0342658bd867472970886975b770b8b7a5c88608c18d3063e4c1feff40604adca095e59cf12eb695024ea4248861b7446555795f2a08a364dafcf519f15266b3a4f67da46b17ffb4bddaca531a4f012d4fa46900f69813aa3c333c87e7b471f997ccf7484b0969ad2895a3a97620df9bec1b1e922d27ca6092cd99f02a6fb4d9ff7e19329bee3da9cbe7f6cfa3be99b6c2235fbed89c0eac6532d5fcc36977796676ac0a63adc4cf2f398d6ca90f77a55b25f62cfdde28b63bc9b854b98c0201531b7777a92e4348dbf12e2991fdc0913f87a983a7d760a79ffc09a014bf9c9a4fd544227759053b5779a2ae626fbea1f4b3416bdb6efda716329287dce98e6ce10cd9b3d41651d12c37b1a2244cb7fe040f868ea38b49dd2ad419b21af4219e9128ffd1c94d6e31e19522aee07ef4cff7053f9106168a72624867c9d6c79a58e7917e245ce6a585fef9bf799decbd3d53fb361f0df8098e46f74473164a44c46cb01e5597c93ef20ccd4eac637e5a70a25b31debe170e575f497758e4656607a7eba70c82de81a2927898ee3a1c128f6b8cf976235ce0f834a7ca214700474c20abe0f0240eb5bd186265e82bae2ec337f6569044afc9974e770376480330b9605992aa853f246a26f37d413d1cf6338d010fd427f90f5d3322ebfeed566976ee5b85e2ad5a14d24593a7a2794eb208f515eee9d620fb716d114a6240e23aac521b813fa548ce1dfcaaadb3e52daa69f79ab978590ed5fb84abe84a498deb8315ff4e6974ef9a72d4a0551b8c9f267f1cf83928b6a9e525fe578c5c0f40c322be71b3092239bff954dd6883738d6d71eb9736a2f7db7215657f00439ae40bb2d5d87ac7b80d87dc04c9ad92a4e0c868ede0788d248bc6f3408a0aa5f25f0c5ae39c694a3d5238406ccdeef1267e7f8ca839c69243a127e818e0732b209b0b436f24493bb9f21b4f154ff1470151da04a60be9595e04de1c74e9027c2b7e539401dae14134d4783186b97f3d3d4020f96fbfaa897c9e33b6dc0c81411bf22b762125fb05b7e0970e4771607be3329b9289bbcfcaa6566dded8b4b621f8deda11586d5d2e49febf0de1e15ca8fb1191f87e6920c6e314d6bef1466bc5cb29a98c2d1bd065f3163a56db6f3b6c8bc44b52d63067223bc0b47bae2b66d49cbde01029951c52bc104e12bd85c4719d3311c917776a89b643504098cb70f77181c7c4d244099cacd44469108ac05c38462b85cba8f2a15d83f233358e50d6545da5d1b3905feccb4b64825ae6f8d865e5e0ad792ac7123769e27c10ddd0184c39c45e51e2e5e9225bf5862600318b2bf8796aaa65b1854cdd6744ae1eb66561fd6a9436a0643cb8ed419cf942361d92673ee3e5c178a2a5c8cab399bbcb679c92e09be934a58c95ea8eed5d13ce37a21a7741b2a6e310491054f0581ad7c304de6e9af2046d82c23825a1d9dbc08164f96cab997cbc78409f4a2473a5a224a2ca5bb9da7a87c646c14edff603d5a2dfed654a23abc981935bf77672c2f3307c3ef12227fcbaff296b50cf3af1d5431bdca945d79bd3d4492ea20fdedb938f9d2376fa64f4cdd57420759a2f0e880b21b081c53eb4a1186aff92163f574bea0a5f336c16c989f22ec703685dc2b5a3f84f35f2de5ffdf6ffb510b41b9ee1e9ccdc709dc7e3b6fb5f4843604b7626b2a8a30df34202ad160f3a6411fc181d33ec8075b8feaa1c9b0f8b7dab8190a1e13a9250f1ef077a1fa275d654692dc971723589e3448682784777f970877aefd8b50648136fd42cbac04eaea6eb45ab4a64e2f54620dfb13a0ef6fed8e69ad83e21e63b8248d38b8e72ad332e09c88d67cc6f020b1a1d728a6df0d50b255a23bb871a7265056a5e44bf7aae154b1e356fb1c3f557baa88b106b4bc730cc219af9ee8935e52b036f83b09d678239af6b0b1cc8195589e8c47310f01a706356039d5e1dcc2a440584f44cffa69e5ce3f9e31465b52a0e46e75b64c716f273632752dfbd7e5bd8d8663e9b86b3903b23a69ea1821001d128ba7270b805df83afcebe7a5194a16de4dd0aa51bd5815ed539e5cb0873005bf7075d3bac2d5e1ca2bf8936c256238d90b10073a756994e637b5f9bdd264f331c94c7cd89d898c5a4c45c1cf60c0abf46a9c70c107cff923334b518ea7117e1fd29562f394cb4061da3df32d6fe7d8c6e8e08784090dcb2af2b8e4b179c80ee0490b268a2d1db677525b9824a74a57a6e286ac01dd957373d2a933a4deeb1e198908480aeb13571141292143bb5a913af3f96eb91a199a847f76cef72b0d34220f074804432e9ab633214ee8f0ab2df999b3301832eca8d345bc0726f2b0d9a0679296f4b9e209ec84de51a30bbe8659503ea0bdaca106f6c1e37c92da48870b1f34c55ad3b01d0ac2aada00410722d0941630f80bb96d457087afe93666b4c8926843b5152b5cb78921586f55079bf5e1b45185c4982475de1311988b8dfb6f6d97a281f2a6317924dc4d6eac524a4fd5a392b56befd4de6700420f6e10c3760d6d624ff0d343a64236498cab59c634cc6e65256602e705a7e991dc42a19 +Output = d785d35331bd7821c8b4a7672e920b2c + +Len = 25680 +Msg = 3bde6241514959ecdc41e729b54d3df2376a3b37e816368b5ca8f91e57e209eb32c92e3280b42e29f1a4dcef76d351c1a5907a706049d312b1ea71f8f96646e14a92a16d113af4d5f86fdad80a1e58f918e763e75c2ba33d5d67776b12c139f44ae1c3db4c023257ba49eacebb55da015817018527e4307227c8125fec1e6b8dfc5d9d6278357019ffdb12b9cfa15d432dc95930089b021ad9b54bbacda3621226af36ebdefa37828ecc5c7f8f296b265fa575d146799f9e39d52965fe78a8ed917f965fc77a0dfa31c5d00943168b12b5525c512aa5916410d1b448c7c6c5840574c6a479dd7de9ae6e753f338f466ff9791696fc4760d62550f44b6fb53f414a36cda43d4a0cb7ce6e5309a6bd22a6f1c1ac8a0489925b42fbf257406ca08b276eb3455ae944cd596e7250e6c7a91d66d325148991b15a2d7ab55280146fc965c481711ae3ac911715dbfa39d6633d1f56891bd587453daf74452678d43565ccdf3e0fc360cc6cd00c95f1e812d76ee6f3e0892e94d46b9092abb970d579c62468f2079e872dc74bfaa81b3aa28d1981523345dde0e84c987beef5b03ec3543506a541f381560851881d6279af0da4b91a8937299208488fd716c07f389c77c76260a40a76cf99aa5efbadeb60e07956f3eb475cd2bdc73c502c0427eb8a97a1232a1a2a8d21e01e234ae3dade8dfe2087605dbdca8d31688c36a8ee7e171c8cf20c8b9ceed347757f12ee8c509c9ddf7bf061939f03eedb333f941d1acb6e50770ddda9c26d34761c5cb54adf95bd5a7aa33b277ca4665dee4cb0fbe62df5b55935f997317811ea9f2f205bb301c55a2a82d3c187fa02b66567e4d20bc51a83418cc7ae627b4599b3941709f3681fa7339411a8e88c28ad3f9718e8b01b4381d61b2f387efe384bfe92829ac85032093ee2de26c8e2410c24e53487feb8da78c1e91a7bac8952c82831495759436648f37220814f85b699be5720f51d234530a9fe6ec015a5fbd7da795588cfc8232bf94ec102a4fced1db2f8c47a34e4ee713763154fe0d99b42bc738c755168d17bf97ea7f1f0cf505fabcd08606b843b03131ff57036ae9acf7526d76508a9d8009a08bc965a8746294fe0d5edeb8a96ade43af86b3fab6047ae9b1fa21b16a18285f6e6380bab36414638116bdc7e663852bd0587225855710ed84a72b33492c961500f212ac38a7039dda62066e9126d07af030e083de2173ee7411ef88d149cd71c1e97e057a97ed0d87a55af510411a818dc4618e36dffe5d0eded11a890c58f64fbe355f0fb33b2307751e241a3efe00177787bd160f2ac993529270d6c0a302f8e4db015e85788ed845e253e57ce5471bceb588f21b83b4c0018614512346386bf1c1a4fd8b1f91888c2a0d28875af7093e9d8a61a1939f03804e8d7e80bcf70769aba25330aaeb76dc67d849ead9706e4b8239db1dd4e8ec433e34b58561df59b0db91f612a4ed51ab2e1dc013eb43c97a160fc50cb232d8cee7b2ac8dff41d16be3ec5cad9827777cef6631af0b01994ecb84c5ead60d5787cd8faa26cfdf1cff572a0d7dff2a76c61e4a04f8b30a5c3e152134349ad8e702721464dc6df78aefa7c37ee03456ce1b5d31c09d6dfe90dc857dc6667b0615c357f9331b543ba9c148512790e24cfbe10ea5db19a62ec58e8ee2c31d1145524ef196bb600d1c07f8cb5badec936d6ebbb51edad9f64b78e8a408d0b4e7f73b09d18554471309141aa33b687f9248b50fe315467ad8b5095f674865ca59ac2e887a3da43ce0935c8b6288eda6995f6d620b218458c7fc15774b3a08d9f0c4ab5f4e3801be003b5fef8bbcb41e0321e636bfbc3b103e912ba4c256104047d13fd2effd2346fc718c9b815f42325a30be02535dd12dc7149a8c5f1532a9c9726aa7b2055f743fc66133d5d91e7018fc5369787ecd0ddbe70082840fe672eff8aa2246e93ca234ba8c3d0bc2bf73c9e554b091a7a53cf798ec1bd39e924846047cf70101316d85ce5c1b95a49ba9e79c209c3150e027949acbdcc059cc764606617a92f5d442bd625f5405e7398efc814570ca13147a5d7d1e39dcb9fba97a7ee6415f2fabae1627047adf131f9f632531c2ee6698919cb051b78b47b63e5dee79dfe8271e2c5a7cf9f473a0c457c6088426f0b41319ecc504da4e8b72c15ad59aaaa064a239e4e49e557628be449fabbb018393ea5fc82bb616a8edb7cf1bb4d7362a70ee433fee7012590373f25a7f24e7097ea4efb964d4012ce6fba3fb1cadf6d8d448f4d60b0dbf9ed96bcd80f3704c14ecc9463b00fd0e4d1fc50c836d9d815df748bb41bac5b1ba132c429db91ba51856ce0fb7707fa27bf0aa554f38146a0c6264030d8e36ad2d393c0e1b309586a6553988c943fa725c01f21ab90ca0f5769e316893f5eee68ab3f16c83ea5c652160826deaebfbd24fac52c94b4bc1c82f1327586f724d02352c030a6256fec51bf13f0b96e8d266d98832ed807605569859cc5f1a93df94cf09e74430f6fb3b188fd60e57cb3c848c0e18f3f33bda2534ea86e90fcb2502aac5f4c67a5ac01b89a4ddc297f398dfc9b68b791dddbec8a73ded82c998abc07af8d1fd98f2ec0b01d8bce4f20255bd3509f0f96afc319541dc66b8c27cd272921af546274fdd6df38409d1d06811c13070ffd16517c13fa74e9907a4f8378d9294e55cafd222d8e14f3b15cd955b705ea3eead86b0ec0c39fceadbcb9b5975feff189d9d1a4ab04d92c72d343a714f11eb63fa5a4820af9c7fd2c1b0c6b6b039c205856998b3a8bae73484cea811b1fceff6245a4dfd8e213ff735ff1abde0d58642a0bfcdfc169bb519b8d76eab4d6209fbd80142d11c8ac5bec500f7fd7c44a4367bea3a927e7294dd36090ebc7603c20b61e9c759ff1b999fdb50fee3f729b47773835f1564d20f0588be08a3c034b0ab7e6e3be69a6634210589800fc5d72f8c3415bbd35e3c7c092d60dd1fb0875e327a19210572ed2dd8cff53bef7cdf8ddb1a1bd17acf04747ea0bc0c8ecb7e1356e17507351d32df2d973e72f180c557eaa1f0206a3bec80dc6f0a076f857b887f410c6f03fdb9d095f7cfd5c4861b0631784d293029371998f4f56e30532216220549c8e098f49ab85e13d4b6d1331155e98d7c4b1b86a73aeee8917fc8e454d5caa795698375a5fb56c4e06706b021be923b6a39975dc238995e21bc6b44cd010dc054ed21bf7ae57e3d9953ab148fd1eed1a38a011ef318a0e08f649ec5d73a2b0e980a082491fd10f85feb22d2e4467bda98aafd6ca261820a5b06f7da0bf7befcdf4ebb6773a8cb8fb4bbf26d9772b5d0ba1af0a968a9a925e521fb13e3b036158b199fdaa87f0a6e3844be6741ed193e98586f67ae37a2ddde241ce5f70a2cd33bf93a00a8f66a0e4af3db325c1c328eb3f1ee29fbb1fb9ca6bbc1d2ae4c1fc0626c2e6bed95470a6d67dd614e968e4b8d55d162c99f1feccf27ae6c821c6b778ee0d19efed23dcd200f2976b1d288ef9522dd94a0658c38c81627161af1bc431205b7fc4543cad1036863d4fe66bf055bb75752189bcd2b21f5c051c1426ebdac49662669505aa077f2012eacb99d0751a1d30d8aa85f1e5d550eb21da51f61be0a508fc38e89d60e3a85c64541af700760c5398f11be9cdaa266c998803ab9b7e70baafc64c4cc26a0764e509572d9fd82c2588e7e78113a6c6ceaca7a3d403a5dfbfa7c69981d61d23729473b639fa4764f0d1134f835fd1195981be9b37fa5eda610bc036024403e5cd9919a0e5b8cb9cfa9afdbcb5583405574155529d29b049e6033c8d97b32435bf1d837ef7826cbc8d0c2e97e1a7d6730e13f530cd37a31497b9c3050acb89fc8e483ab638ff33adef4f2d46cdf4bf4cc720249d91cd3f23bc52dc06223539208341c5b270d82755688a823342e6f876ca8f6d01af938d5e9df910f8a6993c8be631acd867b4519d42e5b6c4072588db5f8955c4f03094ae81d4e6445f9e9b23ff3f7892e43cb76dc3895063e65a7762ce36664e1c4d5cf9b20be65015ed5dd21594b047b11863ae359ed877a52dcef25ebd2708fb91ee2976c798858f2e8a7f7257dc5e94ef5d46de4bd7680d4594755947205854a551241630854b97082b125cb185415669ab1f07b9d49de64bd1d205fbdaa7f1308dd4d96d340bf32347721cca3257bf2f5720f7105780f8e68df1ab02dc5e98dbab1f09a72d2b6c28e689fac96b0896e96930f877e8780abfd1ba9283aee3124eb2efec05f915cabf103e3dd6b8bca53fe739501610ede67da41504a7d9a02730aa2bccb01f2fd58fce792f1ba2dbb2d7db224816564752c90fea4796e4fb9e2a9cbbefcf27e35541272216bdb0cd865c4cd3289f43ef174b1921a477575e41e38f879e8b9a98117c24223be76bfbe974433338d85e4bfdaacaa26372bb30d6048b76200cffb5d2e9cc5fe6bf59cba2c7c72cc0ea2fc4cb8f2a55ccb197d926349872bf79dea4603027c25f6d04a67bfee0a507fd3ec34ba14222275973c1f91c +Output = 3b33ede208cee7909b8841d985306ba5 + +Len = 27032 +Msg = 2bb0b4dbff3946de0c12fe31e74b3a0704543cedcebfdbadf74778720d12342e4f336039be73363b7751c64b3f473258604f1ec8b4a66360ffd0036481dc62ffcce9b3e4d4e9b03645a58ea6190230db69829b16830daa163ef202398a2949e54bdb932668231d981e173e889b029a56c8f4991d667d18965cb55e3a4f7f51a7740fe945a2aae629acadbe3aedd1da9224ad0127837d15aa0221fdaff969e20fee8f9e8aab0571b19471f60438f7565726b6bc7a02950918d83fc8e0af6c64e36263983dabbc28f8816bcf2da4fa786c7616b15e0c4d5ca98516a7149a123fec7791c1a6c95872c519a22fff5864a79bbbd5c71dc92e7625b2ae8395e2e2dbf2d623000d2e60b6e2041e00c07dbc4aaa9dfce8fe60bfbf54061042a9ae64a1bd26203cb9025c5e15ebe728b93a8bcb62c692fb48f988a0fe2a43ce992621f71410915ff36cd5d12776069132b858918bdb9fe744be127feac54f0dad74a046c03c7d5003945277e04c8221721eab04ed872c963ad5e4c5e1803de92cbd69f78a51ecf731a35bb8071663c2c3950c8c4f703fef716687dbab031449602c057037f8e73cc5c178fc667bb15b6b4504917b3ee3da339a812710f5dc148fe6fb1b92d87407061532abc32475d3b3551a7b379a1d3fc6985c13d8fe9e340216d35f629a9e403dc8102de7b8b714e3eed7b24c2cf70673899f06cac7619001e216a36ee56acfb2019bea9ae07d054337c29e829b78188295d368aff82d10d3724b517f62e29cade9594ba344d18e1b5963a8a08fa85b3be37fa04f390a9cc2effad05db80d9076a8d4b6cc8bba97b27b423670b290b8e69c2b187230011c1481ac88d090f39154659494db5e410851c6e8b2b8a93717cae76037e0881978124fe7e1a0929d8891491f4e99646cc94062dc82411fa66130eda46560e75b98048236439465125e737bff4ace4645c3c776a610d3bae37c60d6820abcf6cd6532411e1676b25af94323bcf242abd4dc2e2acfc23622f852a2c97f8eba5c79c5e3b529c20c207e43486bdcadbc3c20fdbca7de023100ecca3eee255a23c167a16106deaf1f588523cc79e9e206a1310fba155b378dfcc8cb7b6efbd4becf9ee2f25bc5457601778015756bfbe6810ff8709ccec812bd933fa3718965552c266edfdc67eddbc45d446c88e85f2584c3a22662c01f88ec550dfc1e5875ae80072f70b34b0d14493e5619daea768b5354f32492b9a3b730171dcf9eef6d9374490cec05fa0fea37229e6492f8a8df96cad5b1523fbc6732e0576319d6b3caaff5ec9dfdfa592537110495d89b5debf42d2f17cadcd25f9ab8a302b696b11bda13b9c9c0d5558df01470f3d659fd751686e89c24174d680fa7e9f29db6ce509da95ab9791269e90b32cac7b1bdf046a4dcea898578964a39b6117cf7be712f9fc1b7b54e3aff032f74fa59944c9e2645381c26178813cdc1ec03e8ec3704828962b80467d47ea105e0e8f1a59070dca1a166ba02ce2db84f52a77ea3a8ee0f029545f0ed684e8c34817dd70c10cc32611fb08f6ed34cd58aeee5864599979fb36146bf087fd78c655c9f52f2541bee2dbae2eb821dd9ea1bcaa647f99267f944cea3badfa08069407b37ac7fe5c6d9ac7be51766363ac0a9eed00ae81cc6e75ce444299b53b3ea6ce52e2bda4a33bb87699f5b43a6d91fdd604d1739be1c2fa3ac11546320d8d892a26a182c0bcc5c668df9fe41f31dcf5f2a03b61501d19ac32df382609055fb59bbd5bb9cb1f883efeddb4a87a76d97d654dc2fa46c4df0616fd0fdba2a931b6a37565b53c31efacd932e853e493340ebe4bfc90d87f8f9287b920b9876fa006c1ed44178c9a887a687d8f88d62d69345e493cd79da3b7cbd581ff522fdf371087839b6344bfdf323cfc3eb9d79be558d5b42830fee7c43cb0e61038246e438e64e6c00afd28505eb75d5a5951653516a52b333f84a2414f8a63e7cddda361bada7556710e5a887a781f8709ec2fc4e85d0ce255b769cb8ec27a0aa5e3f52e3068cdc35800dce3ffef91392e003241385dd7ba161fb4bf750996ed32aff9e589804e9b026d15ff799e70e54826430691381a2ee32609898cc0590406ca284410c1764222bb9c3751f52d1fead6a8918d7c52b55f52ded650772ed394aae6b6709cd35d1b64d6282394343d8889f97e878b0fe1ed3ebb124aae86f05ecadbb93382f4406f016a5e58fc14e2a3c8ac2a19f4b0491f3214b9e5c6ffdee7b26db8b40447908009bf268c8d4d93bf0b3730af39d23f57e57259bc6107f3a1fa23517cb15bd210f64b2d18c84cd54cda310ec1dae44949b15a6e390d2de32ffa830017ea8f69745fa4ee985da10bdfbe1030fc48650b473e4363d61be001e44c0341003070eb3c9e42c7859dd8bbea1f5b23b912e2d9e2d4b3d72e1dace461572a90b023aebbdc4aab646b096269fe76887382badc59af2d3234bb93030f19b47f8bb224777fd5dd5531a330bcaa7f6c1e8cd3c0bfeefea02518d91c80f69fec687e80c3898babdec6abd89465d1ff6883fc46950c2e73c632d0310a851f46578bf596815383e0b7765f85b4fc84f0f46f3e35c85f8c8117b2074dfdae0dbf8e308d8dde43ecf70ffab91512cf47f67816cf3bdb288db90d493a7a666a266e191cb2b13af92b6140ba45012e7c8f729c412bb33dd5968e2f5ec650c5281dc450a6e1bb37d1c3b1e23b8ff47882bfe7b944d05671055b72e669576b9a864874fd45b706557c4a5b7cf4f64971507de857b85970152630f9db0f4a2567032ad2479f8f2d044723e0698d149ab9843dd7000223aa8ac6bba575a73b18bb0d597ef81af699d4c0e4c3405a6742a18c74464ac8cb6042456fe83ec786aff72348dd672e79c73778018689f36adbd9e7b5b88052bd3bec50a2449ee6d965bbd37d601d60754fbceb0eacbeceabe0c314769059568597e947073d2e9b9fd469ac6bc99347959dd58860a8576286ebed913b803e4a90feb9b70354665c467690fc985c615a473c01debbfbdc559847c9ec78ea97857beaee1f3b0cde8f69c6b27287aaf00f06a4c26c5529b5fe6c9ed894b341fdbdb2e6f6edf2e8dfcb763f6e7cbe37d7dc5052a7afe0b48ce3505baa187f28e959b27d54b1ef5b1286f86af599b0857148b0d02217c32ec9ab0ff8aef630f1e2c0171887f964d5ff586cb40847e30664eaa4b7b24290fae49be810679c8d5f62a74d331123180bfe964fb51705da5d2b28a843e8aebeab765c651d6499c8a3f175b17780dd5d5fb8e71de892621adc2c99483f35bac0a2f763238a167c9772079200304776c93386c163b91adb0915e192e0f41a053b83d0269fe0fd935e4c2da2a607e58dd03a109b9db100df499d02cc1efd060c83c0993d36bc9a9ca184cc1e1f58db8106d5befc487af4fd40c3d8ab6ec49a3f3debcb0d84777df6e5de7b7ad8cdaa0ed1991a69d05167a3734d0b973ce5471bce67ee2e059c1810bf9bb43f6eb0c175c4e69b4ae1dec960757ae43625d98d30b9b76af536a4d998835efed24dbcc2645550ba35d99daac2bbe02b0ea60bed0c846cda29942c62ecd59ac3d9f24c2d49076a0fb144087c28bb1f28672a16d71db2faa401aa9d249c2ad19bcd08e952925f950423ad99ce30f77a64f64e64ebd2c9e36133f6719f14f795ff11de1ee2dec264202362dc0149f5a479227f809bca3db99a26e43442e5c04a564efe474e9ce459fc272049c5f23a0fdd8239f4576292dfa751007fb08d197149eaf60d064b19d8e0b5525d7cb8392efa8c0a2aaf4a4de81158e79e588967ad426c31ea9a67f773864475a1a60a778468a66cbe13dfe3458094e62abb593f50c8495e3a8b81e1bc555b0690d27779a29067de092591d78a4d9ba89f598b150e4418b7a75a178d15c66f91b5727dc3fc1a56daa6551ebf1900e39b86a37d6d285e40faab76973e125208838a169bcb136ee9ef1002c4ee9412f32b5b29cebc417f5883a1619f992490ac68892f30136af6a797d0ef230a6e2c40f4976cfd96ec1fd5ef33cb8f12ef0ad1bd2d3cf9117549f641535ab78719955373c5ed68618ac83f89dce4e42fb418ff0e00b05569c4e17c8831d600e928e6b125611bbdc0a000fc00077e4d642653aab78e39b360cc55a0e8d6f19da51eb8d085f3886c28be4291de3dd80944a8436b663039b1bb1e0ee9cfcd3dcc3f6d544811e7a3d1fe5805a770fa82d645dc4097769120cecd1c85ddc97f0b3b4c87617e55c80eadd5efd29374d81f02ec1503d5851b9f791b5a52f34286fa59210f68e9ce1f194e33f831fc36310d3dabf4e5abfe59f63f1a59eea0e75f7ba46177d310e75764419d039c28419fcdd519fe7e616eb6d58f6e8db18d14831fbb8223289a4e0b7016758489de239ed1679a9426bc42ccadf87c88540e567c56fd07c3d1dc4e95bd3b521d83546898d873b25887031705ffe8c8bc4ebb29a5a1f776cc775d75a0bc2eb71101416d38137805ae07ec57fd3bfee7abfa0a0ab98119339f81a46f96ed7f19118c1bcdd742e2e91731ce820cf2a93dd9fe71760294f0d2cf793788f2d19afc919c49e700c752e1268d2021dfb4664fc8b487f83b2e1ce8ded68d4e3ef910e603ba62653f1136925e8287b3cfe1b491eac4c40dadecdbda40122c4bf5d45f4a0a5eeba50cc10c6121ba7bb4681b12b8d2a7ac22e521dc1b85c48aee91e3f4acf8024c42d45752c2028d62a022b11f08f2c5b6d46b9d9c4122562fc2adb87f936f3d0abb3034985 +Output = 475c0d4c0f0a1fd7044b824f23ccf22e + +Len = 28384 +Msg = e96c13be4ca1970827250ed859e6ffa64c3cb4a5331b9c9a8f8eedeff8608d031a1c33c5fe39ca818b8e16fa4c0c99b873abb8a31ea51ad1dae3519d65b4bcf9b9c5ab05454ec5e07e89a7bd9668ce3a8b87b7ee64604441b8be62816f74e932cc4ec4a5ac4851cc08fe0a4cc16466d49db7faad8cb3e493310769c49d06dd565e9fc3cdb88f36ed32d588cd5566282db023c9091f08c06f4da6ae8d78d3600e74a0f3a7f38b3cec03f66769d8d8ddeeccb36c2aa4c6a27b1583790587433a0218399b58e4a42a718449ef47d4214dbef94f2a37a35450629086125352bf32d95152020b1343ca23bbb76a90d0a9404640df4c59a51c92cac698c0a161ad113b28d371e609cee2abb2261e6b55d87e2ea84b1ab73185325cc09fcd143d769fd2a3a430114daf3bb0717f5401ea16ce1d3a7bdc7acff7f6bf85847fd66d83a443cdad87b5674c9ddbfeab547917cbfabbfd57dac907daa89b1d301f0f793be839abd7befae00fd0d4639166fc645fc8b1f9c85ccd62970e9a918af4e6ea05325a47081c073f5f9b42a818d2b25a3a01a736b4a9ad6794f162e8794884464b4c4ea829ea050ca3c7ced32adfc280c46d44bd050a929f3a189b2ae761111874fcbed623711bd0451c1feeaed7555e66d33195a1c7a490f14dee60bb88b4e5e80b52dadcf67211ac62de008b00927d86fc16c672280ac422560291dd0595370e41b1bb3ec4315a4061b212aba3a2648eb199595e74edc333fc81c53420dd95506584813022813069e1442bf507ac9be4b865554ff574138e071004aa21b4881541723499578a1d8fa93b535176d9abf2d920c22cf1c83e993f5957264f4197c69b24dd63ac73a81a824092a736511b1ede73a8ddb110ccbe6c04c591f4ad4ac93c41847569655a7234fbf1df903b73d28d0510497d75436455b957d1561f2987ec722fb7d687b9ff871377e2ccbf3c75b07f015a9d1f2df2c31f14cfbdc0bd68725fe8113a024f2a43312d963207fd6f0d8884f7583511d27ede047373b88dd598afb66bdffda4592ffc19e40a383e276dc9a008f7e0786b4e9f2fa6bf2e2134240ba2ad0ba13ef5141d45b49b7d880797e95d76c247e925fb0a9e4ee84a02eedf1ab2bf0716a767ba3bb9ef2efc61765591c3270193ec684cc658543736b76c9185f0891b836716e9ff7c7b0bdd54dc6d69db04fceb099c0a7c65a1f417c81502f364f48e100469691095427a49e6a2a818acf5fb78c929fdd3ce1c6718be50f90d15e6aae708ca01180f2bc368a12ece473ee34561b378ed749aacd75e2087407b0b48b52dfba07bbcef1d2d610ce9a79d9ab423cf50efa206d13b8e1476219de44e03f80d63529da63f02015daf3bfac3c752ddea26f7e3327cb0d2604986d9f0e7fdbbadca4a307e07c18883138d9160cda3bbd9bff97aa0a1f2ec6a1f1dbc48dd204635b7effbeb4d4207fcbf45321db59104c5a35b2df74beb245b83500d943853e0ceb3a9c8961b6dc9ef3bcda6a2860302d55887c5df7f82c15bfa86967b007dd2a045e05d27782a1585108bb59648e0fb3268e30a02479f0d910e281da63e8865d2f5fc83456d6132e5c5e926a2041238035bd9c305aa2a4e26469c6bbdfa5bde8c4b65029800fa6939e24dc36dc1800171b7cfba93b10ccd422a4b48673ade88f8d084a2c93bdd02a6f02152a087129ea4062fb552622bd20b439d7b4c08f9aa3b0bbf2b8026f2455676cc9ce25eb056c3cf607deac770a4ac18fbce156b948b80847f6464c8227971fcb669dc4f4272f79bcada04e8c38d4b32cb076a6c9774edc42d161e2953e81e0a47813561b03a67f1d59348cb0dd3111776eff211eaadaa522f0956516ed88629e7ab969de2f63c59e9725d7a34bf2551654e5664767ee0b6ef05b3495c92d1e0feb1a709c1ee9d5b6e3decfd2299af68ffec3e6d212fb779d3d2dd18035e26b8f4590fb0336ab380ccbd9c5abda9d9e2ab905033d407562245377dc64d83ad38316c779721b1a54f6bba169bef36c949d30437be784fe639acfe3b5c214b90e81db186c8740c9c51b4fc01c89f8aa724de0e9916f3508e4770edbee166fcf45021f2e54a12c3c00c0d4a06e7b5eb9cfc34771f442f4f77d3f8cdaf5d06df03f9a3f53b25e51e380adf6dcd0218a2d0583d06704f1297c865ae65b5d8e83ce56a0d833161d4642dd3932efd20b2f76ac06085353f866faa85f97f795bf45bc22bc5646f07c6dfc6ed8f533e4a6a3192bc08ba151c721e45bc41e1a2ed1283c1c535609c1fa5d52ce23da43a87289a72d59a6fb9efbdedc091ef54d9972afe0abfc33f60af588f863a04eb96dfd4782f927f6ac8c05124448d69a0c6602412c6a1d9c865c1c755fd7b4beefd5a5714f47c1f74eb95150bf836188d1050e8081df4dec4505cda6fb92f7c76150197b6e719e254ca78f1e9051764e3606f5f28363e3afccc897924e1ddfe4b86db7da630f431d40c70cd0892b5b6695dc66fb93a0a54357f4f8cbd9e0e3935f9f0f12bf89272ba598591aec89a74e8b05c010550dd963a11b6fb82174995fc1649dc8e677d0fcf5bc02624cf4d08290039fe52a14167d22bc6aebb75167a6784ed2418a43c6edbb72872b2ce56d8f1f6664ce955bd2fc475888db0dffd5040ece4b30ed857f9a618c65e9fed3e4e0b3aead51293da57d9960381a97e877f4df5376fbb2a5616f724a0d235568bd03e73cd7f14831e45d9373f70ed793b6f5748ed4266c3c22f9783c1b7ba2ec8c851491834394e13628cff4544c5f9a288258c0e1356ca23ab4fde2ef377a07a9d0d66d2dbc71c4116b9971ce379264233816aa3c9d468fff2e5ddf070b4d12bb73a6f035c07142fca2aa6cc375127a6d6318ab34e28c5e06c21271014b9ec627ea00fb39f415f65e4a5d55e26942553dbfe9346899a084d81cd6596c9cd17a85a06eceb8bbd246bcef3ccd99a8c47d3a8b02e6462725acf99af3e8876397a84b335aeb20ac28ccaeedc32457a7fb6aca70f0216c1f7e2ed1c915bf003463f7ef1f6fe110499bf09ae27afabaeb699693ee2b8638e72c92f723963d557398b1e7c0f840f5f8be4b0759eed121d79198fd7f3f754b12b361d036fff405c5d89edbc48e7b404de2447aa079182b1105ea8d90868f0136a524037fdd738f9f95e721a6bcf08dbdaa657b72b460351c28f3caceab23f9a77441f77aa92c516543535fc3ee614ccc9936703d2b29ee5d8d5d1b8617e492f993542293dd9ef9cb734bfcb8bd1dfc0f11200f6c37d5a569a57f164357417bb1a4d32b77f53bf716a8397f0183b719d9c4ca9f8c850408a503e231a2d3bb02440b3768738a93c7eb54b45d1adcad34d1068ea71a7d3566a42b1f042127c1c54549096032f826fabe0b452d814260cb6958f4bc929ada6deb8d9de42acde64319d0b1b912e875ee132e5456c14f824c275e95568168638cff9dd7783c30a8fa5654d8c9bfb601306f407a6f474e82458f69d8fb7360812234ee6436d1fa7a597f27e71885fb496036f41fedafd9d135f62d4821c51d93ec4ff1cc969875eafee8ec453c0222bedc1e8bcd48577c0f9c1ffb5b4002ea1c49854a691ddc5d7b3947f4ab8ab0c6e2227aa9fb05daaf8df651669afcc9609aa8994ad23329fb9bc700d362bb1e5253d1cfc131aca5deecc33ee17fbe651b8fa7e095808d1deadcf6a82b1313a74f8448a25409b345a4ac813d1e81eb82758bc5ef9d0c7204a5af66a24e254ae828d41586e4dba0367b3dbed0504a2a8e08ef613ad3ce889aa6938583df21b75d78f3b6e1f63009f4dd10ea9d3920f204304b2846dc5f373c7819e1c13080ef73ba43bb480a9f471d34d682f83baeb871962f799819371466a4b2e9fee4db69c76744812d8481edfc3cff1675da6c0452a4fce3a30cdea69596ef2c718e99acd4fa86a7071670652e4feb23aa97b15c23e743d4fc39ce4465d93f27dd80343f090e8a9b6912f3533fd83b28eae6473651d794fc08227e9443d6235aa75c3376fffdb0ecc81c832e8d705fa4db58761988e050975b59780cbc382c334385200b0652aa09a895985db3a2d905d060c67c35bc07557a4133243b59ca40569d8261d897d6808f00ab772eda37ea8e91c0d4c4a549a4c97c48514dc57e103507c2f1c357a6cff00054f17ba0ecc14a6dfdc9c2466803dd5d103a7005c80183467a5172fccb665ff6fd5316717808b847c5b1bb0a13013a7633462e9528c2b5fc10f7540194e243673d128bd65a4f4cc1b1331b8aab1b455a29fae5ee20a2317b1f69e300a3a22ed36cc6384a13f36c7e68a47022c0b0a27b5ccf428b404eaa55fe1fac74684496ce34e4c84725a3bba034ac358cd47fc64c5439a0f6f816751f458f1cd76347ffaa0dd4a8481fceaf09adb0f80356c7156f98d0adbbc8a826298e3eb094150aee09503c54e752d2bb0d4c391420d8253437a31aa5442262322720b504450e2bd67ec4725a8f7f5e641d88cb368fd9289746fb7e442aa5d32d7ab5788464af194d4ca31d35baf5d03eccfbddcb8aca2fb3101a81f6c9b3797ca6a50fbd7d8861b72594a352f446c6bf9e1df73fcc3bd91c2588ac29bbebd3a43d87c11bfa2a83a88c119b4eb5f2b04b03579e2fae9e8336e9be83797bbf604891d6533c54f5fd95d2a27b959a7a0b758f413907bc72dc97ef347e52839ebdbe66093c7b387b3e03abbfaaa3fc5d56d3b4536e54605933b3a87313416e0a2a9a0c98d374ff4ad37679c1cf06660d20c9f516849254a2271ea802d8c285925540082dbe9623c54c62cf615f496219d7dcd403424de3ee353d605c455274c7cc54eb00547b307b176d1f16b1d96af40a90d391fde3a8addca463f7cf7dc60ade5d27e93b70cfeca2d9db4a8d230b4c377a764b3df01d619bc8155e0da0c3ec29bd4120ea333c8a9d4d968537d2ad52ccee2ea7790fbc99d13d0707567828ec2ce9b94fe72f10e5654ce34f5854dbc859807f3f357ef0c73b57bb8c50405f7b668702d +Output = 5ce8e9752faf04b0ddfa82046dfaaf00 + +Len = 29736 +Msg = 4a14e363ccc182ceef6e82000374dfd406339232d06c61908decfbb8706b44cca6b3ee88890549c817b85c4aa22334b4c8bd7cd9a6834e38499a49c56536e4ed4aba01d41321c6e1219ca87cc87cc8164753836afe564403db069dff161097121e7146ced3dda021f5628f1fdc4944016a3dcf6e3fafecfa2b7820ede9c005450a1fe2fe2f037f907b5238ba48504f7e19c2876dd054ee242238fa174710d78df60e00ec90590d379cb3cbd5735a92943c2bd3ed1b0df18aa68d520599c6b5f3ca84c6215fa9ef1d3ecf72f8c52eb54bbcc0dc7887a49d32a0c1504045ab467d6eca5c2402b9d04a4aec53aca6965fab7fc9ca957cdf9c26f91a1e4fb5873335ca28eb7de35156c7a95396787e5838bd6e8ec5cd6288936e97e1e1ba4f222323c7e59bb5683b299b414c64e5b53de9887157f4a6a2652d10645dc40a7d43bf4e4b4b9353fb3ef2cefc1ee57ab30d1a14716b7faaa23f101647d8ecc6a6b4afbe3fa0fcdf03215969c11340bfe190726a54138f61cbdde48727988476313b9a7b8c2dfde1e8ad057377719e3ca58d9a9104974c528509526ceee6b2a288a1298e183abfe211aa9ff40881267a68ce3a91673fdd05398901cc830a9ed312ad03fecd0f6a6ae8e0cef55b8b01009319f97367526a024d269bafce4c72903729d0d392f325ffd4163b7c58d756568c377f3eeb1a1dd22ba8c51eb7f453625fdb3a154e30182b3d168e94e7ac4e05bdf075fadadd1cfc39d7291f26496bd0f28de7cdeb0c6c758ba66e42f05411948c0b83b01ee48f08e17b6fbd0394e26258057f0350d04965278f83905b15c68b635250679e779f7e8a5b3ffd361de0a0fa0cabbd65c3d6847798768510389573a98b852742de73e79b403fe9a72c8c133e691305122f3c59e48bef29f804a7d2c67fc9f8f26035cb7ef21a883f090e428de65ee23f5aa26dd72f9585f9c3243322f6c5e396460ab09a3976e2e4fc8fb55049345dd48d3146b64b11a0fcbb341b25b821ef16d91c2057ddfc007f4c37f5ed5b3f7cb910116eeaa80a83ea36fd14378c84255a5e93a21da553e9f9422d89cee42449d72b696ddc0e2934a97aaaa5c03b968b4b2097bf545a23a538269af959ac8ecc142661c9f34416bd23cf6157288e002ccf664efd64c4163d2640a5cef87a230c5948230c961478253e7f4ab0d74a6a0dcf77e3e7b6abd2b8aad7778f12178b118fdbd4bd2f44f875e4d18f3a353a7b38349c7c02b0d7ff1eab3437c40e4c6fe39c259f65259d3db4fc0c557dab25dcb4e41d42d8bb10467813a00ef656df778b6a6faa8be0e7f0ea6e79c7009fd23589c9425cf0401d4fcdc96124ac51984a10df001db7c8eab82022600a4b7a0a2dc0ca53f2d2a5c7c125b5bfa06e6741917ae5222172456d3e5dff0949e6a5956c5fce972e0754d64488bf04aac400a0f3d1631bde42bf3a29a9efbbaa5a863b9b71bf573616b31282ffcf766c37847f191e40347bb29e17220cdabf552d87c462fb84db32872c422091cd5f0b4e5ba4aa6966b520474acdd18fa65e73ea0ff76807056b4be32530c947a105b292eed74fb8bce6f78b2b24dd393cdd2c16859d569c2a4fa8b008a2232733b18789a3e2b0152a0e2505a9e3ef138487a73b537ed3c3dbce73793c61d63c6baab2bde38c74879877d53d2dd4ae2366a30de0e06288830031d1c329358b8b323a5cb6179c4417ee672dbc1dbdc373cb78858e94111ce481c1ec1837e5ea1e6ea7adfaa5dbc7cb14275509e367d50b994f38ccd75238ee46c3ecffce3b9afc093acc13f711a6adf3ff76ace59a8df1ba704e2211ef84aa3782f90156fd442de93be289730588c57136b82e8d1d932f1423ee18aaaea71f3d4539a537f48fbaf8f216e2838116197716421642ba8ecd91b040370a584a553e53d773d9e824aa1ca691a88e4bf8b4eee53dec6b3726d1185e6d069ab5145523f5f9f3a5a1aa053fa17a62fc2cd59bbcecd039725d044590779d0ec08cae26d573c8ae01e6cad34829fa9934ec55d8cb732483bef4d030e341f7d5e5a6bfd03b156b2b56802c1d1f8739d4a053217101c26055b7c4319bf805a4e572ccf05c3c230af20d3877ebac035e9ba729e1714820ad34c594d08db70accc6cdc4e9d1c2e4cf8c8cd45343d7e49276b1353cdd87d733aa502e550e089a95fe60565137b4a1e0803d1c6a2f8874fcee2640dbbfa62d193ec0586726d3fb2a17924cd197f9a2655687da61b6a7f9c58a6f12661e8c6b88797ddbaede0076b199ca6d10f87b2f8797d1d4e3e01cbc14d3f273840323d8a7e1ef7fd43d7753530a7280b76221906dca85d396b6cf051250182bdd7552be9f007f0b7e4c21da37f4f14e6dddd30c41770a9f223fa81ce68949011a7c0163975e93495612e45386deaf9fdb7279ec2826c80030849048ba06eebfe3201810b88195ff0497a9056751143aa828fc794c6027be688b6dd2b3506d2bdf6a800d2af3ebf630e3593903d488e97d0842f8d5ac8fa0715e2902fbee300eb7611fa2143cfff681ffda3781ef7372021834b4eb936870f405aa20ba689d2f130ede179ee237c79ff216470a2a3d9ede62baf4b49c1af49886da7417471e589977a5b3f26ffd3033c4f3b1c60e4e35baeebdff5b4f0df506eb9f463b111a4ff4a65dc0356bb8fae57d5bbcdc220eff3dc2231e0634a93ae53ce3dd4e51f9ddcaa3ec84925ccfed5c2635b175eee6c410e8d699ded4578dde7f8d82778c22cac4743c482fccacd141c769d8b8fb3c4bda68bcb80ab67db499be857dde4cffde892334533442b66e3b66de79ced0795d4448bfc3b2628578bd00b316ac18f7e1c2b8bbefca47558cf30d7edcdef606c2f692c6010061d5a1f24eff950979729a1639bb621962f1f210c3304911f34942974eb8bb1a3ad7f7e2af51411cf6d8d22eb01bf5481bf2693b91dc078f51aca4cf827f392875f142332b91630e179251b124c3f07ffac1b91c7d6a5f7f9796b2483802c3539b8d498dcaa743066406df489e9a9be888c4aa5a92c399094e6f32a77729a1c23312d599957b292d669d449b258a3da84c64039ed5cdfd57fd9eed9748dc1a9fc5e8aefe93f55daba4bf4751c17b20eace098e8f5071d28e2c8dabbeb103770fd9779c65ccfe26a7a6d5b2127a538ad4971c11d60a9862d964a334c4bd86013cf8266776497cce49f5454b8859fbc48e2e03551a0b28f35e2b484f52714dfd4ea95fd6d811599bbb1879db59655b16411b2822045c0bce450ce4c610d741b66d758ab2342c7bd62297d7292da75bc715e7f1403c04273bb78cdf5fa5f64873bfe30dc331a3ccc6a9fbc9ffad25e4213119c876690b6681dc35a2e3bad64b7b6f7b51d1787d32b575cbb62380e9dc6abe39148d337aaeeadb8e9319f6803317a3c5bea4b0c297e9b18f065e4ffb2debe3d03d4e4458e9bcdc1f1bcb02fbe68f844abd03827be2ab83d02078c261bdecc965ab7e41adfe400971a3bf854f4e2b3991b4b896affb4313146e39802576b59780c5e8d581d5be880b91be28855233ea220c899366caf98ae65769324f3e8d76a9f553a6dd567e81754e9093a4d9eec1862e3f22a8361510cb43cf7fe5ffbe8e69a3865cc869c71d3843fd6db4cda5e34480a2ea7e29decc4d9a3410f1a08e0647354aa04bf6e383dbd7cd5ebe15a07be46c7994ef8b9de7f3c5608c7a094607cc14671a6de518dde671c710c89927afef598ec704429b89452a1b9c89222db87ea8a571361eaf50e27bb528dd4182a7ecafa72cc4371dd8cc322de825d38d42e859cc4dae89ef06565c5d5102f5f88c63d58d6a37526eff0f455d175604accc8f90a358de0f2227ca7c8731419dd286dc35082a657cd52497cc74d2249dd47ffdb3f337cd968edac643fd70a12159bce036df14579b9970ea2d3bc098864b83b92c849583077d48d31986b72b69d257f640dccf1498030a92d2778ab9a759ff4b611e18094b35997866e9aee55d887ea7bbc504a45c5b1a1721f3d790e8481b3cbc89686648fff43e92effcd9e6c25a7a0f635a10cee9caff84765023325e0112a38c2ea2e82281ac0560490feac713f7a57e7a5fd5f440d462c79d7c6be5d65880f112c612e86a4a27043f8d52e0d0a6e3de0b995bc6a41d23af65a37d23c593ba7ebbd9ae97d4a061a2845d0755b910324ab6c747a51f632ef6509e4e61f34db9fcd2e3a378e9371904c087f06ef8bcfb8b23ef81dad92ded640877c8e68b0de532feeddbd3d196b8f09c11f473b232a469f91cf0acf903c7c03236d2fcb35ca6eae8fd3df0b445a72fbf05fdab12fb97ace1537e65a76d24d479e153e993c164ea381eb116b9cd4d89d36af25f3d9e3a1c829e124c0df46c66828235f655c487fb95551f8e08b511c57d49bad75ea3f781850494a8501f083ff8205f6b1eed77e5a7ac6fa1ca855dad67a93f5b9b9335a2918eedc29b775e2781c4b99019c59c70172a899427c69807399268331cf55b484f4203e21483d7e6c5752bac6bd35f648dd756b246ff299c9a0d1da60a51d33b662abf4fe3cbdb436e3b9d093f9f2688b0bcbc4250b87a34332046fd8d3004437f4e095331d7d307211ef7edbbb25aa529e0a48b6c79f297acd6cc81cc18562842b4ca34263025fa882721a1079364839f4cf7d6c3cbf98cac349577f09431b15666e83be95d3be44b5d036d4ccaaaeabb069b6b7d35f7dcdb448a2a2029fda8646c4db0a3e67c8d12c98698b2e096a225187a92c140544fe30d93e1856122d313ccdfdb7b544fbd8471906c605c8f7284897b93b77279ad699799e347c308fa0c9088039a2d1e3b495f0a2f7fc6fc24816285b58856ccbe18eb82798dd718e7f7c02f7227fc50d00a9bdd2a36a7477ec3aa82425c71b64a951038eb7f26b8617b62bc6e4b464d446f2befa5ae86d749f36959805a4da0188b0ea1814737512f408016402e957c5f1f192ae80eeb144cb8a8f2b8ab71f0f1a0eea7830a924c1aef212730f77047e8c36d753a7f5e6651bb6e35317665109d7cb73138f3c00fea304ed685cf6015a9022db7e52968351ea3c30a35e4b266e4c87126e927480467aa0e0b89ddec4f688563da2f3390e97d19af590a1ddf5c8e2c2470ded1b292580669ae824a9c5beef316c561c65fea33c53b0af9487458624fd9f65f17872087eb67a8b93df8a203f54f60c2095ca10b4e6e054a8ef9c429da98a0b4214e18ba0211df76df898c6e3315939c250f74 +Output = c9d46db50107b46a9e6d97d031035ca1 + +Len = 31088 +Msg = 048739a069c28be32ffe6bcb216d8f444a7b0b20ffba75b2201b47989a6484d830de9f2f7c4e98a530276865a2fe9fcc883e4cc0ff1d1d43d3cfc747faf9a8c46168ab09ec036d50b8fe9e94a351a9a70e69977fe11d30d0d0e364e1dd44ea981e8d27d6c1c8510b4dead4012a4ef5fc6462b505aca1f883a0c1e60b4c2d9279f0b5d94003848efe7953d45442ddcaf413936efb6890bb82cacf156f4d9ce7915e488bedbb216a52c3a16434f0e672b7a26289091ed4c2f5d677b9b5eb793208f0ae0385f1862e2fb33d4d493e51336c9939d0d6d55455054c2099852bacbb062e500ab1ab9b21bcd28d563c3306563b817f090b95f8bcd9b5317e85171dcab2a1946719f3488d22a7fa49b5d7ee224de09cfd4f66a83e9b99143060b6b5a734d0e3e464d075b888bbeded5b33efe1ca41f8744b514c24707e3077bc105a9ab543a6473a4b0aeb1794cc09d74ef2d9da29fb36a75dccb782eeed1b422ef5ea5d834359456aef6ef7bc0066d031e054a3220d0a0a93103cf970b3e399176fe0531724e22a370d894fbbf2ccefe29f9850b396b91cf901fefd8dea9869d3aec4c087afaa94ba4a8447170902dc6b19ed0765fe0c869a8544b4cbfa025c6b9cdecb5c4e7829fa8fa6095aacd23ed3349df0beadc8f07b855549b54ce918e620759d1d681591ffc539ba0b4502be23daef35480bb801a6ea7ae2d04615454c21d25d52644a75d1d28385b33b5b0362f22afb8b81a362229afba8a6514e8ca6893e3484acdd7d79a0cd90d9f6a5b69864976d0e7550bbf77f20c2bed65b95fb3fff4a3aa79650fe155e0305dea87ece187eb0595088b32e803158a03b0507532b5dc6fcbd3f97681b8007c05b2b040bf527eff47b13f2cd847594d5ea148ab635a2d052569ef9bf9979c490d5f8ef57e5d950685cb921df75359ce44950c82d451492c5da7d1f0c76926100b4d5e8bad0ddfb3b5d42e8693ab99855c28066bf43fd31dcb1a2b0579c130695608b973d9c7c19f8e575ee75bb49b1b1bb6e0f7517a3d82044d555a6f244ddd941e2a3e732fbd2245b1bdc0ae02d0e7e9ee06955a94fad17f9e0b603606c0b53bfa1b5c17aa54d4929fc593191acd947d29f1c6ae148d84b398a7a75ced5bb8b439274d15cc1b3eeb6e00ef1b60f3791bf73d1b9a8d882446d9a4a0524c5130a337b8921c1962b9c6a8fa252379f52e6cd23304ce445d388fbd9cdb94a853b57f9259bb98f6ddedaadd0be5cfca152cd6479e02a7fd8f2a14d0fac9b295d5cfafb58539fb08ef430e76d0a18ed605fcfec3b8a5b5fd90817c9038eb3a7949e7ca3db59dd0a419426802c2d8df3239f73cd32d5e86e903c70d97f1c07ad7428645878547b87cee645e0d6d0c3f4313d416f266ad89244b736e449fea22443233a81f5ec7f0e7c131470339ac3d9d35fc13bdff033b53fa0f0522adb89f24ab687881bcaf38695431c960a34948b512e7c97241001bec720278aea5bc601d10ad1d4b296ded95f9de3bb24453ef1f3d1f9ecbe724b95255f62f651275f372046a3cd82f749ee234af3484a76caf20170c0a376bd1922a18429fd27e75f7e7e9382db52963bad2872d4a3426f3f78c2355a221299714d82b804073342cbbd3519f866ec1bbcfeb83b0c36d4d7a56a7f464ed35ab05dfe12227c7c3ee1addc8bff8cd6162dd4c919d02568ca5705af80cb241d18a7e41d97eb18c5106c0cc2c96ec79399748cf69457a7a0eb9666310ded656712290e925a3a6148718af159368d2f053d9aeb6d71f91848fe3dd0d76ed3981b11dce445a338de6e29e363881c854e95c944fa17f8dd02c7ccf34b89eaa745a0dd686d1eba0c179fff206a37c17daca9071cc0da712cec851d61e02fca8ef45e3e76b206e6e09444bde90e4e6e9ecfabbdca459f230d5feab82e96b257b22ebdfcaeb9e370d9dec329e558b66b104101b4f6914f57a9e25e670376f8d63b7a25deb78c9fa0217c860cbd4f5500fa8a15b447add05527fd49f08886ea925161feae3a3320bee0f6f32d19fc147584304d8565a00c65b038131c64d070d21a6ab032deb450123dd574569f65db11d8bd13eef972e9cf6c1c24b3405c73ddc11da3334c1915e4619f704dfa94931e1bb9ceb8ab2b51da8230e47dc330d9fc6c023f782b6a597b74df4fdbd09122e278aae5ab22d42bcf1bfcbc4296568c7744a2edcb24ad03209d1a78c8ca6272a6151ac28f07755ff65e0912c960d67296708413f2dfecfb1b04da55dc8f116ab11a90cc2c0114d49774de4fdbcab675a118301bb6032e29b4d2a64ddfc8a6f14db0956b4ab9bb74fa8404dc407c007cdf662f6bdf387c75332f07c8981c27f1c0ffb007b0d6712667b7011fc01dbc6e9980086d3528ddc7df42842ed0349e51532e690827013fd225355f822255f035178e4387807959070134a5e84fb712f94e6548d777e22b607d25a56c30cea6b8a1b9692387d3f81de12cf25cdd4e8cd0f9ced6da682040b9b7af5c45b02de5df7f2801a813dfc3f1c753f4f342a113c09b8e9a7ac16483c31bfd0b746b1db692f805937eec44c16bfbd132154557afb17ed01c1f4c55fe67f0343a6329441fb95575a70ddaabfa74c4cd342bb0186889e8bae532cf9cb88e807f7279b24a2b3cdfa2c6bca5bc77f26c6f839b498e473122747c1913e0b91e1104391ecdd8df03dbb477f5141e3fcf39e1a6cfd95f53917427693ee0ca0a01eceb1aba449645f794d34320f07a5af17448252d2733959125fb3507fe02b21d595d9ab5dd2b64fe5125b1a30177d14264cf891ffdb3131a7f1767de342fb95c9f8243786140440159d549e70fbeaba8539b590c2186d712c8a4872a4bf928a408819c69977ceee9f5099354e2f6f00d87d71d5c5c55e96349c91e530c0a06dfda822df14988699c6dea185341c8a95849a95e7676c84ff34aafb3c13c075bf45eaf7f793d0bbd04099f5f4af6dcdd71e139a2c4378613ac137dcedba69b2fcbdc2e19673caef3081150f0a2c7d9944097b074ad67383d74eb5cf70b116c8b4c9c2783240e19128fcc2754c47d68d6acb3365999cd85d3351c74b7b94422765fe5c346197bf3228383491216e030ac9f7cf2dbf03216dfd6ecec954b0866f9ec0129e9ad4be42ccb7ee1b202b7da1d013b0d811b5e92683fa4ed1a2a25e01bdb3683f4474596364f0515bdefcc0d32b839afd38019a277588b9eccbe6337e414cdf6f05133ae4bf7600dba45e572f2adbbfe5a882bee1309eb28366f8a135c7f0dac6432dbd770abd6f2316bcbb065c80c259d9b5b1d443a0ab2dda6611e8c0540cdd85205b7af53b0ecaacb467093f2734a252272d812d332654bc9b1fd7b8cac80d4197bf60fd73722aecc1d5a85113796788339c686bca9690742425b31fd9beee1ef043d991fb0bdc4d61a15420ea13020287590a7ddb7e59977dcdeb741533f863c6734531366e47551034ad2d2f940a577f1dd7e1ea6018ad2472e143e1d9a4c686d82479ca0c048a5a1a03e4487f08dda74561168bce760b94af450de4027badbdecf7da0a579c53bbcc08d4b926662b8c5a36aa143bca696afd87408061058fd82c5fb08be3674791c51c7d164caab79ad6b91b381abe1d03c8187a4b57aae37200acbbd331fdec888fcf5bd4345f184f4568c84bfd99bcfba989199968f45ef8246f5a64c5e8a91c9691df778ffbb43620e65fe44715bfbf0c49bd1f177a48e6e227faa5118003aa73f4a664a1f911dbe3824085a99aabca8aeab330e5a537dad4573b38978c92dea2781f403cdfb7ad27fcf8947790f7aa8fecca7345fdb230759d8a83da36cd05ac8cc88ea3382c26488706b543b129db95b0315acaec3e74303b770b5c4718dbfcb320a4676ad5e3dfe0e95c9043b8da36d5a65bf7093332bed17f5390161cbe0d7bc6360c105b42587b2efeeff13b22eddd87fb2cdd46e85bf001e1182c3f186957079803a112de4cb63610a5121752253854cd0ec0dff1a207bd384701f6979ac5835ed095931417429d36725ed3c46766ab260f6c650b2b98efcdbf3fe9a81c57c7ff157652905270c2d4ba1007063ef8e9aa91287c8153244825f32e6ec6688e240d24cbe7bf88e1557ffede17a4165faedf469d9cf0a32a24b555662c7ef9c945ed90feb91e2514b39cb3218c0a881b491892343cd5a61b2400886f793e6aa9ac34ec974d28b18b7bcf6982eac60ebc670b0674e2acd697b49bfeb2fb81159fa5579a1e2a5bb8a5fc6ca46aaa5304a3771b15d804f2bef054fc1ad919e3852befea1c0bb74394f4d408d651412e247107bd32e64a23c9e593857f3a5ae253deea5104d8aa6ce108913881cf55d3c89587860027f8cc81b7eeec9e5f44e9fc190320c71d4a3427519250394d4ed07b9174f9e005b7696117c575fad05e76d86ae8cde5423d25d25076046f4392a0a7e56e8d6517fc66f265c5d617060e258354f9dce1dfe9de6c95bab9865ac7c0f811c2b4f1c73e61b0225e716598ea528767c4c23f5ee6ba7081bed430fb64bdc697100538ac03c624edfdcc78d169aa5f03c8127037aa5668b51108d19deff3bdf5d4f28c3ed320cb29226bc378028964c972420702ab1ecf904fbbfacad00f18be90017ee822ee0d547ac3d7d55b6c531951e576386f801fb3d9620efaab7c9141cfb6834079aa760065692871caef8483f55140517e26c3903c9fa0b5d8a8a23ff2863bc05dd29fad50c027e5d77f8399cb29f7d64d8f75a5e7c93274ee2fb5f986f50af045f2e4cbeb6d68aa1798dabb41d3ff4f54068075697356c0628e671f1b976348a887efec83c57d26e1c7e46907f3d92538388e7f40226020cc2110012ec1e7421c0e0b7fb86ca7f4fc895b337bee17e050a1fa33fa6ae10e81a44b501f29096506f1e1f607d7ab8c9e5989ab1c473e1933cf5e2406917be23964938c8b114c3a0fdfedffe07aea666db50a207773be28680d14dfd34a73644a0e7306f13f22397d2499fde0dad71ad12857440c181aa65407d8b80f0a89dd39fe545fcff71ddbf56c6060678c04026f3ffb864898c60b8e3bf45d183601e58fb0c20795cda1aa0f23fbd802e2f3b5ae485157cb7a52d08d16023f6d718de5c1b2469ed147501c00c7a6c5419428cd04ee1338f321439db7128ccf9d217086769f5c7610e8abba90e41ba88204158109ad9bba5e421abbc2ddee9e15ea7c2ff4c46e3dc32616fe35e5a4f262a73caa32e3655c6b414ac306c4c21b7620e34ae2ce06566684246f4668dd4352121071074bfa8fb8a3463c197381d82c59588fb728cf407987468668ca4f1beec933adfd23e5d4b4ecaf9f6146b854a7184e36e841038c8aa40fcc13a654dc873118999b2791bbfe81e95574cad00184d236f90cb34dbb086ee2a8bd79a915b9ee31cc57b3a8b5e4178606da7c536f341b954e8afc282c815c61c4ecb09647f55501ceb954755303f2082bf8e7dd0e33590baff9980d7173d +Output = f27e1a5b7d732b17c8d99f7d59c51dc3 + +Len = 32440 +Msg = e83ebbb5a5b39e89f1b03d2ad4f3f0e185a8c1de7c2f2022ce20d89cba8c41927f86b74371e24ccb4c3dba46c83e9c386e1add2da95e709c20e9411143376c8b24e6ae23897218ef3f440b26b1eb6085b9a9e7f1b531135ddeaff3eed509645d7f64869e13eb6cbf71cb1812b682a68e0d5ac773c830712daf7ad57b978992d0370b28fa38d3af018bddc952ff8cd51c133765fb08e4f2d43b53cf00b23f5cacf5e07c7f1fb4497e347f062db59154f77247a9d0a0d4ff192b41c9c44eb32bb860ed6a77f115a2fe15bbb7ed00178de7d3927c3cb689fec5274dab10916e68bd2139db28d57f2249d698c4d807a8e7b4de21c485738959a0d67e5d2ca6f77983dfccb5dbf47931261e1f1537f3cbca253afb6bf4fe5e7672e1dcc860b3d6c8d243afe2d9758b375e95569251eb099e04902857d1808fbf03ef6fd2f4e194bb72f5e94867813d9cb9e447247018e8cc1787b1726420a59a1ba940642f57b8bc2a9c82d1d04018c8ffb3fab1daa2f2ba27c89da2f407277181b756675a3eca32c4e083645ad9a323f8a97522d8b0afd1fbfaf4d1cb5c9dabfec0b9c1bdbd5285066bf3e84f7566166c6fc260b26aa6795dc6bfe62f4890b05a6c725ca0fdd91cb9e2da47f53bea0722ade952b0f95f1b13d405c969f387e85d65881e4b25e661a5f040689554b65fe30af0df1a85621de6cbce62c1840abbce5003f1055e02bb913b2e3376e75387772ee1f1373538e99e5422997e23a19177d8ecbc18d0b492466bab90e21d47e5a6c2c36f503268e503160a56eafad5d21ea34a67caa2844f8d29c0671f1e1ce3386e9f40ada47a7bdcba8d814b2e2de68c5925d964fdfa582c1d74a0761159e8f4d97c4e96b2f612f3e7b402eaea323589a385fc2d089f16ebeecf232f1e875ba3ac6280538465110e4686c10f546a28dd2973b76fecfaf19444d9d8926f2da60d8e5abe2b434fe2f67e0ba602945f254f92f6f270d09452edc99ba8e729d330fa286af068173aec73384b9a0ad39995a88617957addf39fc0231c797577026132229dfe5027b0974d1c4f8370399fe1b0afdd89d33aa142d3fa6435857f40a17c23f8d12c9c384b4bd11e4b7dedf86f2fb250b4c31126a1eef77cc25f691858a2d3854f439d5b703600c0d876182fa9ed3a78ff94870826dbc16b0a4b5e0fee6adb4b61df539f6ed6503e14a6e1c9f6b1ed5e528cc6d137610139f39186afcb9de352f046e68faef36a9fe5547150bd45730996f5f6083e475fef6778087f580392a3e2c17db09655f5eb35c7ef4c686f7581b1153e36a25682944d490c07fb6391452198408c8fc39a2aeb4884435ef89bcf8d35c7e2cb5613308c4dbcd01d868740931358aa02070165ef1f58bf07a88cfa119cb994210fb9cc0ec93e6127351d9d227aed9255e7d1a429949247cb46f10a24943bd50c481d6eba08ba427f36fb63b51426cdf22cb3ed81ef5b64129c7108b063752bf4cbe721785159fc8f51c89a332a2ce23f9e4e4adf77da9c4470b5fb9c529021415ebeea30eb4216be502d4a86042759a6044bc22b75387ac98b64ebd0a9b43c5bca4ad3ca1f9f1873f9d17c95ea3ebb8d27515d4d319c8309b527e033b00806aad634e32f35958b18165d384824998e5ed009242df32f416db5a6e3afafb506974c242245754ef6146d788487f9615d80c51a1eb303183b5b5588fb2bede2c488f2c199f526f2e1cfc7cb6a3ab3bead5bcf2e54c8a880f93c5b763190b3b8c9e692b44f2892a8d4b1ebfdf14998d70857b5eacc522c8f047990178cc4495f9c1af2a44cc4ff995822a3b7219cf1d5f5dc41f8903ad56ce378bc1414b0f7fec58adb3a99b2b6edf48ab5a1031c05dffd523900a869ec401ea3a714d13c05becda0141e3ddbffcb3151ea629eaf1e1ea62166a91ac6b8323e6118c0cc51bac63bc367f74026215b96df0aa3fb3e82ba7bb1909cf038836bca19d9c00cd55f3f975a9a6eab7a66c7ab9cdd0b20b27ada016b7e8132a993134a35b0bb99b23c506acf762a85c11434f8f12a4317f14ea6c2b5faffe6003251461c66597cce99223a89c3d4d6e274cc0644bbf2e8e5464745f8cabe1625a64d4736c343bc13bedc92f04913a7c5ceb75cfe56c19974aae5129db767c9ff3730d4eb8e216167f2a7f76ccf90ff526a1d8288c4583488c1a7b20a89a208782f2276a3919a74b47fabf3651ff2e6718f250148cd5ec008d4b6aca90816da77d44ab4c69257fbe1ab0f0d43ffe2640a87f760a8387c46dc2b3a88e1fc6c47e570d116bc5a0001d6bffcce6e3808820598bc270fcf59cdec0e5acf192c4b57a849de24edb13c8b7b0299bc4f920b474a0b9cdfe5589e5d20c53e08bb615c13a9a79a67c25eb3a3b8be0f614cd494bcc128be0f919cf2fe60970fbb2e634782d0d42d66a12b0e5075398545cec84ae753364b3f7d63feb994cef570dafab3ac0617bea9f3def59b9abd24ee3e34d6d2e67f6af710756995a4b017b027ee489a31b775b921400f8a0f9013e602e1df85634944c0b299dc9b78869e027d06af533afd7b1d91190528bcfa7bb584970e06b3dd0121cb99ffd2f897b1ef440b90df0a31f85dad317e7a894584e12a1d0b5fbc83c8a3c33b79420d2d79fee4c69247889b1302dc4f238a5fb755f45e3d7d986882c1cc0348f3f39d8e1eb7c5fc5e929b82f593853d9c5f249a177687bd0cb79e241527f18714ee9103c7a24f789cc82d30c69812c19001c234f1ed0c6661c646afec39f6c2853ad2d49c48eb01f3f225ebad9aeaa4a8791fce0ce3570024cc476c6d8c7bbfeddf4749c630ff5e0b176afcd22075ad8bce25af90dfcf53fdd28ba3c1a7e647f5e6d7aa6de2f5588d3fe6ab5eb21ba6e108ba21a46adc2692dff99c0f12a02245566c3eb8e733b72172803f79d844555430c86a700be6438efb799e805612188437ed4ed0c623436eb920024a1b58848a4c36d31d4a5570972ef3f23cfaa3f15a914122dd072bc31d1bae3afa02bff92b67eca4d3af927655814fe16a86ba74716d52020633b501d5a11330b016e17de086d225b9c3031d72fb75b13382c16b6ed2073673d128c33f52352c95dd27d751b3d09ef80d112c93a54eaabe771f9cfcc948054d69ecd20336fd75d1e1f7d125f5ce56b715246d6285c01634ed3ccfc159fdb9bc8369f6c85553558baaba310455b4961f64a5a687a6b43bbc6a80ce658a0e98e7a807f636b82012ecbed9c098d96aa65881faa0aa0d13637f785360916464ebf75f2e9cf6664af51ba7ba46868bd8ce89f48d2372c4c3d4a49e1d4cedf0e5f9133146aeb067bb4640edc78b7973e756db46c5f787d2aed65465465b20357a0c64a5b7f50bc4594d8516675617987d8575fe09e3923fbab3b7533655d33b0c6a1243e939b0840e5210ac0170080283a47fa4c3b03b13d1b1f4f25502ad0b815c4493444247afc19c0937ffa2f5b9e2fb23c15a262957da1a34ca0c2957acc32a221e31d7774e5a74993dc8b286c680d287dc360d0513bd349e61c1947826b81cd56b16c2e867c022e848c46862304771d37dbf2d764d62485b41dd09b9824a7a85025cc94305ddee1ddf5b8e32ff1e1f302c5d4e250fb19d92f2c951c2c7608b596c6cb5302d981f608bf5ea9d3bec26c6727837b960927d6cfaec343afde1987a30ac4d56e9d9ffdbd2fa464ced9bccbcd678b1db49ed2e11e3ad79c92db7e910d6865b5e4088d4b33fd268e61d125a3ae1c58433d0aaf9a83576ea185ec9c642e761a5ef3b8ee71357e51814d139176a19c7786800b1265976ae4dcf98ff7738eaa5f5b2e0d18021a49c207e13f84d7208e65423deeafd4e30bc6b96e341431b67b9114f393ae705ad5d47cbea37427a368be20b743dc6acea0a0c1348777413e607c16d4eb163e8fa9154a45fde40ab2a1ce8c9c993c89e2dfff7f1ce895047f0f6cfb4251f3df214a110b078d58d2c6c032f04e5d24c4a8003f6d67e5f20e00cee01cec86abe4a82f343983f04712684a67f65d1e49ad86b7ecf6b5ee22b05c35721603f7c2b19ccf1b403bc5436c1fb6fa09494affa7176d84b5779f8bbdf9c9af515903bcf867b022d9af6ab222457c55938361db43d2a7a3242d48a16961f1d4692c591f1ba168d7405f5f37f78230f73f9c0150f630eca4cd679818551d449db82e665d8dc25fc53ebc11293e4e4b7b781397e540bab3161b86fc3503844867e8bf99ecd1530b68ff463f2a7912424ea75a942cc5f87183893be3abf74f63df5550826188dc023f3c9e27902a76abed7801848bc842ce59a0d6fcc1a2d72d409891ae4016b5cab46124691ee4d3fed45488f786fa522024fce8863a88a41b582cf38c0d0d88db64f769721b1ab2a19fb7515ba2ce8efd51f7f14e6b2b4ea4628ce69a2ccfbdaacd79ede1094eab3aac2b0b3f63a751dc8d2c8183d80d3f5f1c32fb5723efdcbf5a6322348df32620862a17014e27534412f509e505a0eeb1d1a9924186e05e8f984d96cb0daaac09ba3ef54fc6c10baaaffc0ad07888d5331f6b5bf7da43cba21393bc330cd7b54cc4d426797206d396a0abf4e4a5179b5971f2b8d8728c9c8d38c012fb0ffcca6012744b2cb45b538e918f68801fffa99b65da2961f41d59a7847d3b918b9c63fa3fa9b3c81250f408ff10d6314d83788f678c3e32e3988b979305867504391a61b8eef0da206a4d8c45cabe76b25590abf37357b9a5609ac3c10394341e55463d0abe92e14319c88f023781dee2d87a57963a0674de181fb2bae1e55d1e738ff291930a6c1ee1ed87b0c1e0c863aeae38cc4aead2d21172fadd4ada4e9906401909f6d7d8f855251cde042bc1992aa4b612205572460f4cf29489138722900f16c0748bc683d617a4e668f36907eee655e454d6c19e43f6309d3701952fa36582417686a335f73db6768aa81d446debaecf52ff5f3f72174b43df350734b2cbd2298768fd833affd7eac3ea5cc32a3d174f952f99cdfc289924ec1e3bb640aa8cd5119343e013e67fdfcf1ab5f8a65325c1a6080fbe4492a0bce83dd148cf9a18d0cfa5f4f1148a14a1e6b9a77954b660d20fe93f850dfdf8784e043650d2131ca8fc11bf2aaf434cfda557afb9c7ef4f0d3d6387b69ab316e39811f962da9dfeca3156d0f166aa7f2fa5754d2e726646cfa90796c79d6a728b50d788e35b9345b109e5f8f9bd3821d44182fe6be693fe85fd45eb3c687ca1dc02d57376d7bb7809e05f85882574eb78241131e69720ccec848ee3999e720b62289c3781c15f0c115f24053131d92287a7908622f675385fe9731e4391e3359a2c8c4398baf67873c0c4068954ed6d7f569179a5a719d75c9672f9df0538b6f0a9262620372a53bdcfcff805211a32ebab947ae30b77006f061f14d04aeae612091a6dcca853143bd698581908f7f949310a187fa6257a03d2c7edabe582695ad6a978d28119309a7fcdb5598eff57146162b0bff99d7ab7670de2e66797b7578c83e5e673e54f3625d08e2b25a8a2e9c74ef2389857a8f64d71a2f443833684b51a137ce33fb6bb533141225f8c8315dd2f5b8de4dc7b4cf0739c79fbed8d5ecadca01a41910d86a2708cb3bf036e351d743b0471b46837fa843ddc133f1262485c1a232171ba247e0ebf73a6b5cac3f2ce3f50c1480623b634158f0be07c2bb818c04c056a5301507c57d6b90c3f5f179dd6d7562fcbacce03a227587a111 +Output = a23c6f210bcbcd989ce639e84ae02f01 + +Len = 33792 +Msg = d8c1db798d7971c6bedba16a6f32a2979bd874186e9bbadab465c7ac901dfb4371c8508142f430f7e1568aa8d3b2240f36fb3364f6bc291c44b6ceaf44ca929d061a21b3b86c398a1acfb8523280facd400e619ef4bd35c4df28af62282b50c18000779757a8338a508d56f0f365cbd9a359294fcf6787dc6c05934da207deb6c5c27ab68872c7fc6dd98a0a80293f394524b1feef82c76bd293a1f91b25e384bfa85197b1909dea58fb7c294094fff710b72133bcd69d7afb1b02edfc4e083454fa25c33ccb5c5bf93b56d49b6db31bea59a2779e2aaf10cee4ddb1ab4af5cd6eff1dc08febac5838e03d94f97e03abbd545c50fd47a83533385bce92e15157f400621814b837e8fd345bf0c28d95b170ee764941f62ef1125da4cb17dbc5dbce451b5231faa213307dd8705e631434eb7018e7d2fde94d539cdf30a4fff85fe41671f7507898e1b904dc9c36c8263d16226cb418248350df3d3486a01693ee1ebb8c8ed8fbbf5b80118efdb08473d3d94b97377c35a1039c88cc5373e83d8d647b939f314bbf886eec161a355ea4fe1c34c4f864f6ee6c73c5cf22843d9f469ea0afb3c230417169dc9d7b2e1f61c6c726198039310f954c3b65783ddd6020b4700751f572ed1c5a2a4ba9018f5134c267be5664acaf861033b4df059029248e34c40131d86a932a1f472b18761d4ff53fdc024b307446a5f5e7de441da25814330d4bdf2b61debf01ba89d99c6d2048f89b0d588406dcf5c924fe634d72c62fb70bb8653379030318cb4caec9e7ada4d922fef2720e53e7f793c5c8e84276c506e5cf2cb85b0cddaea3fbfec43600ef299a5d80c034b062c65ebddcb6b96ebf69c4189c82ae003409691e3056002113312ab36c371ffd5080aa6e077e80b80628d01c1d581be8f272463eae47ee16f639fb861d9f7842986ba25fb20a3e5c818b306218044acbfe3162e2df5fa7e982883561fbc0e68522cf6b1843209c6017da0d73f34ce2b1408ee4922b65d4a29d68ffc96e6112d0d6f63021248942ceb25c8ed518f98ca3a0d1f4d6fa231c47311f8148de4ca32a9c271703bb0dd7ad395adc12edd3efa70641bc37b45f28e225f6e465b347429c5ca9484572730406931c1eb2dca1b4c85a27613cc1e29f7a613550a9551b972cfec5ec6fb08570e0aaea7d3b4c2d820b84cb0e6e8a742a18cd24ec9a2d9049e46ac32b09dc09c343650c2137a53d027a6c75e95375dc71c3510be1c2a16d01cc88eb2c9c60c8a738acc9312d4e9adb1cfb6d1a75ebe41b83d53156a91a7c66eb418418afa38ac2c5676bd6a6b10cb6f917faca5c5552d16041df74d5018321497bd816cb0d16bcf57e383729355a3b1aa966218e19ef3a637d5d63d0bc4bd9ee1f2d4f7706363ecdda797d3e424e11869af74695a183ff9371f34a22b59c37e316cceb3bf6b0f0576175cf6d40aee145d0f662f953d6c7f906e95151523de32f46fd119f454d799afc76563f9743526035ab9c4099af3b9b2286a2e7fdf884da9908e92c5bd5829e94c2393bb0d50ddeb05d1df4dad80283ae13626c1d93c2edf6349c69a110b26c0fa2a1eaf12cb9c728550c9c7d17c5b993d8bc6619d7476f44ca52df7dc6b20b575eb6d2c30fff2487dc92c1ec352c43b71dd65f5b8cb8686d12321458be2983523e9f7d8f4787fcb438d7ea8efade2b042ad8de4a7ac0e0585465929bc1c0ddea8a8573bb9df85797b1029fcb2d84796146eb6c4e6805e0edd813e1ac971f2006898f3ab1d6fb3d18913c690b98c533b5bb3790cf202f6f14e56287f508ed548d84e65cd7bd37b71f1eacceb6014a63eacfe3d23568e796b5c57d0edcdcd28169c3b161971955cc94a27b583431bb10e7cb17bae909d55cb8be8afecbda78b0818e19cf58b1fc855f63d08feef0bf4394f7fdd151cba0c90519b2dd29cb84e9bd2d4630814ed5e868aad4fa4a05fe03d99aba9ed675f0e5851e1c355e77a13205e75f0b7cb8870098beae21b13a21589efd79a9e0d16fb91e14f18dd2a6759541068de9b0b7bbd2d5e9878c8c55d04acb69607bd8a5c34cb945586eed20a81959d0f75185131968087187c4411fb2e24824979b24ba94a63ff77a5f17ace3c6358ec6cb639348c91a9fd5503a607027fd7647912ed88bd096737ee8b814cea5be8721dfb201f1fdf1bb9ab8dde0b122d3a998e65dc64fd1a8018d91381e10bdda053116da23bb0d770dfd8594661ed9b004b121184e89b15be8cfe3ff935117724e1df743c14f0092dc273ec6bc5f567ecebbcac936e17999726b65753a3bb96fab0e0b56a554de2c72406bdaa81ba12350dd6ad747fe3049e58aa002dd74adb7642cd8799673af2c156f943af3fac089d24088aa4989de538a531a0f42a4fb34c19ee8155b547c7a0edc424d65a6bd969b0bacaa04298b9ea9ef5d023274a9cc0a8dc393bd9e4cfea5b0fc7bc5c49f34f5675e3f408740148a85f145758bc1698620ef5984fa28a021134b2cddff6f4a267c27d1c44b059c743e5c3ed3934af27e80f6d1780f1748cc2cb6c873fc34bf77718ec8591ce01eb142285714314d4f3ad46062608621deec24c5b75066f67d306f1c8cc7a2db8387b8dcf7ff0fd1680245b37306064e4aca2200623ce3be6b999d5785d686fdb13fc801855ed5de251efb796e3038a774ae4ff02ffe1b9371fa24c91b4d704e91209c1e6bf72b7c6ed51d39baa7c33344dfd31c8760b87d779a2bfab7f607d70b7459bb1092b7b42b71d47cbf3351fba3a7d50cd3285f8465c2db71bf97f49f08812a61dcf9248d443847c9e59b8705774c7d49791fbab123ba5cb69df9dfae6e91359637f31810a1739fa894a90f5baa17f45ae30d710b9acad551b7e46e0d27eaa2e589473b442a6903a134239105225062c777ba2c9ab03a6ecb77204cc319d49ad33abe3731c8649c3d2dd2b409c93fef199fed92674e5151aa44741fd82e9945eab220b1df61aa9103e77e2171852cc1d7c2704b795d58a37985a990554c80cab15a355457de840b7ccbef8045405e0389470900d9c3978fbda48746415dd051b098c4c5a0283a322e3fec788be11edbb89881598d6a563a0008d6eaa448d20470d597afc225142da3ac3fb14d50b471eb1c9ffd9f38ddcfc9195e2387f5ce09787a74b8c6bf5a25637baed4927568eeaa3b2d9516177374a13fe79af14c0b8850ed2488b3dd5341f41202896338817a7d5df1c8fbee62510fe238f6ea35d3aa81986fc8916748aae0db0277c781493cedeab53f55a4f0909b6a1ae07a986c9692e21c2068448187af3c7847c638065d814a3fa12c236656cd3f5500aa5d1f750b32f537415e4601e79f2aa068450104c2e6579789520cce2ec9b1fd816c346f75f2c0b6239cdf40126be22bb690825a3624c7c97319291d4571f68007adf3ab5789464417e6936bb7086690b701d187676d56def260066e9a9deb304509a452395f4f8a2424acab5fde7e76738135b2dd2acb7f0e0fece7b6b659b642668e8ba3dca330523e70279155f485f3f6f8041ec1ef53d00f21b0202508b907aefa7f1e6809dda91d2808d5d58f663e4a60a4b49c8a033f46edf26051c0e29ac73056316b4a3932a71b75b3c616c15c63b6ba27216436639d9ad5ffa149d9059b7837654d2eedf4c59397b490523d562b4170fdba449545fc6f80847f6a4550101a4a41767da1f760d6955f9b0b8333884becc0cef3c7ec4cb31c7752edce81105db94d4efffc445e2d983d4f083bfb641a56f7c43a756073afd06181981da2828ba9113e7ca7e2a9e0c8d415130cb7a6f7d72b06df47aa5babc5c97634daba4dea4416acbb4ad927374caf53f29e6e362a97e3fbaae4d1eaee22379888add25bc3b2e301858c32c27a4d53726e9a28fcfbbda70b65f5dd0ac210334f5e3cf1935d1b00a6a215f460f0f24adb4fa8eddfb271ff9ed621d7a26db746037c321fdd02a6f601da8e27ebe2641bf55d6fc6ca96dd741cc711c69a383ef71cab356421f87b4c7cf59fd44a98ca4e276098baa2f0268deefe6db2da6bcecf02b3edc94788c38a7ebaef02655a4d6bdb1fcad2500877d37a43dca4494e8e551e5c045538faa6396ef227b9247015fb7863ae15bc26f6cd296006a2d129a711d66e1f11da964be0b665ee016f21498666f4ec8bce92cb03631b94b75943408b93b0e90316a4db07bddbede32eb712920c9a2b3c6f931ffd913e2ee8cae5824cbeeb0735d56b7d36eb1ccc66497897a9d41d133185731a44198f7b3f0a5795dbbde724affd345af6a8ef3293a8ad015225444d71f978e35f65d724c302e1a0c0fa6ce677774799ce5c1ec770349d771667d88104b4eba3d6dbddd07c9acbcb84db42f5972cec64476f6f3408d392227b03a256f39d148132e56b2873bb5c40aeca30fa17036be0e74aab21606ed2290b5f6775459b3aa6f9ea47d4af4bdd24c62e009dfde30b3739539a3582eea6b54ee4f2860298a639b6523a7b383396a2546f788553b61591c2f30319753956eecbfa0a30327ba163ee840cc5175ccfdfe1f5615b2163d1150c92af7541392afb0a0a761bde2c714c2bea855c53add006f42782c66dd287ec9e9967f0efd46a05937afff00e925e1bf4eb6de5f40de03d166fa56f41eb7f3d006ef13285f45d33efb46d57c897b2f9d2ef8b0b036649acce3490fda4960031bb7b15e40e804caea51e88f71622b30d4c5ea873879f517da4df0c199fbb54f056279dae8f607f9d3d221779ff1cab80eaa18cc888a041d520d6e16b3842c1a159d94f37127c3e293f27e4848c6be079341effb00f5161dfcb82d79a7913906d4cfbf5289ebcd17a3495b5c1c3f89b21b33ec9d3229af8c02c4bb64f6a16097bb8f455283c087fb7a4d353d8aeab239fee69b1dbcc6350a3cc9a4531123473f4252c38e0f3489209154b8670556cc21c6d08816d1294afae31d54de9795318ff190b65f7cb64509711641531be24bec0b981ff34fe155e09e566961ea75c3ec51ef9a616cc44028a1f86cac5f3b960b2593ef4d597cea5dd70b3e879a5382e6dbb5ec1e5ffd0ef09c8196bd1fc15f01bd5a527fbe5a7cb5258260ba27acd302079a27f0b6bf1613d9285c100df1eb622b620624cf1891a8f2725c6402e058b06de2da831188d9e4d073394f7a6bef9f083166b70c25ad8bd641ae3fbcac78946746704fe0f8def62af89ac6159dc03acc4ef0b1060044e03986c287d54fa7009c3b95a1b57da9ca411f0d0e4fe601a7f02120ad4d46dc48a4a835e6bd78889765289742ff85aed3ab5d1ca289f318791c3e93063257f817902c74d7058581cb6a94018e3fbf72a4d239260d64339920992db45665b20cff949a0bc32e15271f050470fdf67989a04e49d5b96f35f8210f45010847f3af432a5767459795ecf4dd00421ca442586887f58820fb68ba1cd73b05a6698b4394ba1b13e8e296480f5afe1154d9b8536007c2d9fea94a535699664ebb3ae76e66dc2b9e079f84cca0f7845b50f73a2f295648378ce9596870be5d28b14ca6843bf92f622c1eefef6c3b098c7b9d463026fbdc1d764c244dfdce9630231f272986a98d1ce0e13634b3be14114f2c6b0adb51251825422988504297f17b1317c2c955cb0aa0a7061139c92aa646352713d90e89a4145bd7ac0aa2e8f943d8c6e486967fc805b0ce194114c3a7fb37f8ef827c904dee09cd3d9f67ef93f7c0d30340e401e16a9efcc18bf96592c8b56f027a33cf71fccc6891811a327e017bbaa38ab6f7c349d2208e5d1f86f3593dd7d112bcadbceb14386c523257f41b59ec59c687d80a4deac7f436dfae460721e1e00e8f918b1391cb028538a6b29ffbf67a76ef1912d1595177cbc252176d121bc3a015416910a58f189ca5c525f9c2579a2e5531696eae6bad7e5008c3e57ec3d089f603e35ccff302fb0229cac35d8e4d5f52c79a804a64f9b10148e82ad89 +Output = 3c56289c8875318d3c25da7aedf0d517 + +Len = 35144 +Msg = 6b6b51e196b64c95cb6b719e8bd86361bb1f4caef838d1e92a3945685cd51c1dcb23a3753ca1ef7f93791351a20397a83f8a25ce995384c1ccdbcb91b261ce0afca4dd9382eeae56d85197a12231008c290319ddae53c828fe0ce63bc6f4aab92976650410a47060c17c6356b46a8857a10f90a2de418468e853fe2d40969871781fa5908dcb1fe77781e138ffb7164fd138f2e6d224a0c7b3387b30c74f807b112903fea26ca23122e8780eac1f93bedf05a7713104038e8743c50c03284a1f1d1ce918f68ee186e83a8fa262abe5eaf3fe170ba4ea97048bfd44899d28dfa5c47ebea43239c430f4fe90baca62f51c36acaa7cd3dc4373e8ed606e3d5825552dd9ea6bfd7533766cbce21f8b4cab9bcf96c98b65e5ef21c59c82858abe057781b4d535004b169f79fded994e71efb1e745da02030a83574b9010942d646752e798e7cae2c255f4424719f0bbdaaaa4a63f47a75455e85da2537464cd52342f880c88f14ce3d8bdf025ceeb798ec2bd330e764301cd047bf16d14bd138f52568c982074e6b58742aa1c745331952144b739d19db17ac0f960645a67a723ab0f1ac4171957404bca99b673f08af8ad815949be7f0d65051e19c2ad29301626a25a19d5a9488c0a9ee47a338a2dbe50bb42c5a7afbc95b934410e74cc5770aa56751ec2eb60a2ae07b5f01de9c1eff13c9935f3f66712c58103d11919c33a2175935c46a948891d4b31a197d4ef94784a87220a1cb6e5124e859203d51c7c7245db59caa9a74941b282140a155fb3cc2e341354e9501587e2efd99acb0c3c850f769fb4b426eb0086d0d1df72b857d730c7903925deaa0b876a2f46c23984421a8cb66e926d75440d42617cb4a38580976921219707ad88831e1a6f814b5b91b044245e0b23f2f491014b4ba3c747afad414f74087425e51f32247dd1ebca5a17c673eee7f067f8583417b206cda44cb878a19a40cd1a0aa3ced5d87ac1d785983b2a85ed7ede38aa044e1ba65ca5400135a0fb07b995df571cb4e844748dfa7bcbd28ae6725e9bd19977ed4c1d5071d0a1d2ff25e09c4b82414916f7adf1a1089df2679b77f00b141a1a90beb7afc86de4c10f61eb3a396e681cc85a130d6287da1283d1339b70bab0c06cc5d3ca2d1f25f5918482748e61b7b667364fe8263fa9bb46534e67b00c82f0e92819a7892f8cf5ef564c5433a4569e5c53088ad379337318e8715cb452b9326fb13050c2e542498f9ff2e1107f6e5c0e79e7fc537d9fc56157448364d47c0e6626c1cdc2896f79db271b230d392779e47093458c93163689696ee3a8d9f40d365073246f633a0d39b67023131ca87c48ffb56d6803c050f8e6988469ab48b647f7ef5fb3bbcc8e131399e8086e1aeda1f0f57dce14c49a1796696f8d90a19101e3dd8675d84d84d0073d7ad678a4555609fa7ca50f4b9c4c408aabfed12727cddbe39f9d03e475d85a04e263826f3ad1136d72d73c7cdf00aea240a2b501ff11a8acb41284b9eb93d4982799d4a32779d5f5674be380ea9ca65a37638658a23612deccbea3f56d693c9e515eb567a1b6193b64e94c7e4586f15a97288a5396a5e122f088a8c084c25cc1699c6fe332f0a5e77099bf9f7928574968d80b1b65c5dd1f2758da41b606faa7763a4840618f42a09443830b0de99fcfb35d4fd796fdce7e791682a18e9ddff8802089a6b6fbb80ed7cfe1e9893093957f9e9fb0b2b77be6eeaae80791efd35d9036793cba9dcfda412521617667f943d48342ce405aad008ffd549c49649e7dac64622bf4db4facda2e8b9d5bf59a81baf48258c84e2c7463f50e883d650702df928a9aed1eff2babd066c2c0423ef53ad9a577d3fac0e9727b5df2f558d7912ea83ab22bcfa800bbf4fcfb2db6ac4a5b1af452e8c83107c5788b02faa7d6d5a38eba9b385412d31283936e2bb9ae2626a0b7128f1f467763d2dee2d3b8cc73452c527c9c17054bb963744341b30a32a15136de5067c8e154739fb708f581161c6a4a7ddd7e4910b77ee7a3f80c8915d616b8dfb40980eca14115ac22c5bd643131e9c885f3a5cb14ba33b6d72cf377cdd8873c426b334151268ae6a88f47058b6779821cdde324d901a2a3667b10028d7de91e83f6ac886c09449022bde8a232f640d628a4c9c20d3a7a932d62a85c1eee27adfd12b268fbd18cd018b668e32fc487ea33af204eb84d04adb547822d881488103a280c890568aace13e28f6f89bb95e6c468af6fe221881a8593671ed3d65670c29e839492b5e6b49ba924ef48c2b4f3643640ce94a04e0125af1fd6081bd7f41bdedf31aba088a73673f10a75c02a3999819912d6b19d8b1e0172fe2fcd55c5cf4ee8075611d7d16ea8bc69179f40dfeeb283e4ae3cbfdff7f3283e4ed3160a665865bf9df01c5acab04eb336463e0de82fc6ec262afa2738ec083d6f1563ec666320008825a06ad2f36f91da9d6ced11612ad1456197886a54dba4997b839359d6df731e99a8270fdae6ab0c8c11a4f0b0773c13cadd2c1492691ad5edc026c61b6bc067327fbc08cb7da8d3fb775d0d8574d4994d163bbe107a482a5360ce36998c8e6bd96c4f452ffa3138d2e43ef146ea42ded388dcf035d6d6a095acb230b809853377b6094f6f26ed42f9a16f235da22dea427d383369446b3f9becfb3ce0ac4ec6f2a611adf1c985f958f6192b30613ec6843b770e148eaf104d68d0e2793b912c348490e71faba065d82a649229f21d797f0ac00a9e7a4c1a94675aabeb7ff56e2398ad866093e78f5f8777dfae1c710b1d343bad70d1e7655633c01e9f402393a92991111b4b017ed6537b9a29a6e28544001282f05a2bfa7d122bc4fb46c3a3ad806310ba99983a26d7974c01591aeedeb56a0e87dfbde0ef4dc32368587ca716e64c0ca44651cc355bf47c9efdbe4ed29c6edb9d26481f962bafc54f40f6a5cea1748c411ad63bed27b9b2685a79ae08fd43709bf972c058f6183216c4daa8bcf90218f9dccf8f35820f76c737f01568201455e71ee3ca1ff425f027add0b5c8381e383456e3d1f4b61e51235dce8bda4c0713eb5d4445d26fff89e8c27fd6daa4f2755a4ebb0814090dcae495b91846ca44310e803d3a59adcd85c3cd9012da87a356d38dff3c7cc4056a72a559c594e3f437b74d75b09cf7b86a1f94aa72b0275c6407db5675142e2db735555899acdc3fad508e95af8294e8c263e176fc45cd43255fff68bcc491ae3b966f5b9d76004c1c4009443ff5ce8414f97a9cba7fc0802341c3de187433af7efbb90dd7db96440cef872b69ddebb5e94827c3b4474a3ce616ed60920c5e5907cdfd1351c1e54e03c5cff2342034a2c8b8b293f186b19ff4474695317458d45e750118131236938b2aab40a9a7f17439b1e1b679223ed0d73a9626fd9569470b598ec223b4d13b2b86e1bdce5a6a52c49b7ed1540539f81759a5bafe55dbda96e36bb98b91fe6d6c413a12ad21e665f2de4f8f8b15ea3e3a0b3afa3d9df4b7887a62a6538f0551d4c37ee74ee5afd44ae21d95243c98cbcab71f8ec156fe036985393181982d10ed7475e3b78c0bc85510af8e2a608dc64fc71a1d92663fe9bf6eb9011f93c0d23fbde6aff200436999cecf20a26b0f584fa2f44fb9b7008f149caabf346704be50049bf307279edea08543f3964467a954b075ce3d2f881def77d412c9fe42fdabb25a56fceb6650f29ed4b00dd3dde0e559643f26b821bcd967fea3e53fc1b6d530ec80db33e1e6157f4aff1000b8268b058a4d7d39119459d4f21a9012cb1257e5191aace659c993926d87a6b342a2cc1cb09e4999a1ccf726761ed25fa639ba38a8cc75ee1420f43e05f1d7d4c17d33069cda92c2198c3bc55357b40e9b528693633d40325b14beead9e4ab4b7ede452b17aa609bc1feae1a516e3d08f286415d1016149a75cd7b00b2092b00c1ee8cf4e8b6bc0ce047d78b370b7633f3fc75fd78fefa0eac72b2e758085edcd2d48fc7d9a5adfdc0923e81cfd56578e6dda9dd639ef876462cec0793884dc5f8b9d60db01f3c56a7056c65df7514c012506664999e19ba8c22b0c82b31fea47cc5ea2f36ce70ffdec8e89d30928bf1c07e33fae1a562c3c67d8692e7ad7b62a61f5293335751e1ad043a938ad5d1f4388e9807045bdd773c64f6cd90a1cce5bef096a36f65e7e25be1ebadb4e6edb2c2a91df3cb6991bf350089e1eeb8f7170c5f3fc6b19e3beb32868255786cea12a6f74b27fb778684fb78c636c99806dfd895d463c2aa54e5781c87f29c10cdfb2b9fa9095f2cc5acd4f53634e9e9002469badde46b323ab676ca83ebe979a0579acac002be315520099f5f441654eed008f5e2b072def64874b9fdaa274f6b0d3b9f167bdf2d3ec9e19dcbcc1780d7cafd6e6c2f9f558f81ba107d961e3c3405564735da8bc9898ea6180236b517c3fa904e02c9bc400d4b8ff88b1795e6052733e9a5888aad3d569e378ae8b8bebb4809bd2de68f46798d3d99b09556f5e55b1aaeeceea480620b1323ed4ce81fc59cafe274eee210da2f0a1a73782712dd8952be9473a1eb01944b03b3c80ce2ecdecbe65f497b4538183fa45d29d1e5f3992440257e489520d98f0062c6eeaf35f6a5f0765f228e9b32235ef50e1c153173d85c25796227cac2264284ad542caacc85294299a1930c640071c390cf4b9fffb63c1ecbb74804375af0a0e507045249b3b94a5dbffb92961c044f17b42e4426050597dc0fa1d82071333fd6cfdd355376c71614436f36b0c140220c916728ce0fe2191432d94d65b432e8e873605cd3187b2f27f696ff9b354dc3d52f9d53e01af92bdbe8996bee6b162383bd34ceb2dffe1cfca019f53dc052badc5679ce456f725599f8893ba3de06780f730193d6147865fd099f207fac779088cda2a0e356761fb62b50c46d542b70f45e71b429fe109391f8d189493fe6cc405ec1d1a4162d129a49970f3217ac929a462a3892e7ef2d1f36573784c3c4f66ecf7e6a6ff9beb5ad1a0522dc6db26769f3d427f8153dbb118cd832167e3c9679e980712b45519058654307519f6576ca2c188a45d121c6cebffc83e9b97335c97470f1c243102c01f4f8c67bf4ec4723ba9e686063c3d5be9a6c31e4bb945ac638f5ef1b3b2110128dcd6540b67062dd660dc931134c7049e4d044eecec58ed8fdb8751e75acc4f1f96aee8a2b185061f60db5a029e41fd764cfc5f1382e58678a618ab338dad108007668409d0d981632483595ecb26bd0e312bbd442f940dba89737c2ced2bebd699adc4a5276c263e46350f8a5dfdb9c29412e7f344bce9c1f0283337dbd137afe7d5190937c56b2d2090fb19d92f8a3fe0326d9564f8b12b74b76ee8ec359a685c8cff9a747dd6ac5e078a819f4484e2a00acccef2afea5371a18dc490b17a8c7225f6fd8fedff2859096c6642d550374e1c7404907b0be691672e3f5bed5ea8c3407da6ccae2b4dac26ef1c564a72ba64e801baa0c27c313e88becdb031cd39ba5d120acd270178c1e0a1283c2c42f86eede465b61ed1efe386be0440372cbbe1ec52ae03f1083624b7112e76e3675dd6ae9a9a42f8a35f2ad1ba576e6623abb47eae050384b6026f2abd7399085677269a92ccc9e8472b7efa225bad371885bc7482a43e6a7179ebac14bc152376c0f9427b81dd5653c14a7084657f2291e6647e7f10370ae0e934cba55c6dad6eb7a936a33ddfdb4fad27d56f2976c1162a46ed01bd6ffe8aecc4f9edc9250ea4e7c0d7a87553dfa16b9189310c069b1bddde50a9205bbdc5f136c75ca6bddf9fcddab609acdbebef79121c7881b109298d8539d3cd7cb128a2e4b48069aa98d5d651423568da78805223ffa42f08a3b595e61920396581295e6931e7866db2dd9dcf0cba1dc21e1a8341b352587ff346a37b7f0ce888965ea03ec0008199b62d809e9616504544f488e5c7f1b279606312bfcbf84f78792ef4d00f59efa13b2c2b5a5eb894b675c4df9abe10c1977381802d8070f2979210e8c7405225068a8ffa8cc74f5fa83901f3db062dea6cb528583f5d15667889aae87f3387c64c5c9f7aa07019158cf722622120a7a14badde277f82441f8dc8636072397947e509f1383fe9c45af748acb707ae1c8ab6b6096a68c09b8269c6d10d4ac2952e531b1b9fa584cf945996074ee8ff0b0b5076309d85787a337f1 +Output = ae61d6b5e9c68d619f1719d04a997416 + +Len = 36496 +Msg = a8247e7338eeec03391826680fc2de5c2011b7c640d157846b5ebe68bac4d68090254b9b145b9c08e5df73a109e9320926d9ce31f4d6e021f2b5f9f5581c36254de7150a5bca879e2038478446846948b54736e7060137923b0390afae8c9021483285c9f383d54c52ed4a17afdbaea1352198f05f9a855fb00f2a9ea55b09fae8cd43dfc6cead9be3c425642c36279d0e309b55e5e9f111b8a370cb23d3cb3a9482f654bbf337123b868073a6dcfcc3a83ce81d8235a42fba850a3d113afe68b6174631b9399d39c2fb024a0316569b6b0d26501dc8c641207e9ffc58d9c90db555dd7daaea0498e1ea54f32d2c5daec06afef79ee87ecf5156d711def855b0f9046040754c96b8fe1c1e760a6638830d1c1819ecdef462b5d55c838ddfcad9eaec7a8202a87b20835a07d9840b10a3bbec1bbef1f25181b4c3d35a4cd54f11f0d4d14c3945db58d66ab72682650c94339fb0ee946bbdb5b6e7e79f02230cde73860da5026ddde96114d765ebba55e0dc007eb2bd935f85230a3e5999122acbdbc8d7964566a95a8a220f9ca953120e1dd62e1154b0607963f48090f8e8d15d9063d726ea796833bb5a06d5a3786ca760e86714420be719de6d564c07ed281efa1fb45dd9ee42fd5b866517c1718b320cffd2c26dec1deefd3d6896ae6b589581c31643fa0d5e3ed26cd36beb85963789e31623be9a2a7f262b5d75d5a8884a8e19a7e1351de58187d5f9d709fdb53f3e5cdc3f1d5f3554c201ddf264ede1c687e70c3e7368fe4be4887e66032112d19532cc1f738166f63a85921443828b90d6f6f0629a34d226504f0c1dc139d275f52c8dcaa649e6ecf48021e35bafad30e10ef95694ca899933f048062c8d20b3c614c848a0ffddbe5ab9356792bc702f12f6cf2147724a2df634dc282a65221471b024a247eb73f5d3fa74a9d1f0fb14d0781bcb9d743d68ffe3708ba408001f5cc94adf8555ce18c60986b001957767825a855d7d178bd5b7c5ab3883bfe35df026e107418419af9daf148408f10bb19265b4decea45cf986a13636add2f3549591922363c17a43bfb4c62ed04ce078676151567a63d75ed541b88d0c89578eb4d00539d254195b94e043b53ff01d47691603ce689c258b0a6bda46872b3893b3ace15478851f7f84fb34213f24eba3004c734c80976d088fe844680502bde9fcedcf793c9cb437f7cc407bb72f721694ca49dbaa9bd85eca809dfb70540f1af55b76b206e0ff0c551c10ca8e5ad9278d592c80cef28e1425fa8e08af6a55ae08bd7f06be9a298506b34b16aeed495f53c1c445d4e2b6b20620be95aa8cb82b9cdd917e4d12592b72599a67fe30e9444ecaba31a4b479c0d7b8d6ad4902601b188155209990b88402d6a5c6666ae260e73bb64c27b0fec7ff8b7d5574137405e67272f68b5c6e1a1cf1133acee55b3b84de5f9f431d6e4fe6615c9713081c726d7891080bbda2752a738dcc1ee77d5b8f795e31e145f0def4021a7a0e2982e9155a5a5c02fd7d1b9225ba833eb96f4a6ed55a0bea6eadfe913560064dbecbf246e274fc56622696becc436717a35a908bbafc3344e1cc3625c3d644b80f221568d688f0f135c56e1433cf808fec66b34cf0ecb3d9e6760e1875233b3864addbe3ff3d3eb9bd8429fe2107d78fdeba3d1b3ed1938fc4d30fd211f0f4b30494cb20253cf098448951e25d927300bf7fb65f6d54d950c50ac0bc5fe4751238006e85102d0e7510fc6d2ab01a5cc8d8dca47f451c8f032f44aa3c29a8c83e48194a7b87b69e376a06063de2449bd171fa91e58ed2bc904ba853bb35e3f51e7c06e96b5482aac89acfa383bbba3701d20104f8101d69de615f45a24c3e02991bf0d3bb3d37390fe87ecc64032438424218862093a69dd7b99008573661f9996ffe8ed50b7e54f49c3b0a488129a77b0b679ec5de1460629a642244bbf3e105be59a41f86fe025ffd30e397fe728b947317d44fba10ba674e031dcfa39dc3c451289d0375604b385482e1b942a7ec74c350b027ef42b4cf1b948162b506a6c07094ffe7a14b3767e95c8c17156fd2054239bbb3455155804a3fd464bad692e063c55435d368cfd504e46b173f72462e3afb7c5c84e6a663222ea03d7bb7900c71e22354d15f1a68ed42062287594fd7f1bd7b8a73a8ad60ed866c54bd4fa62ce313f5ac63d72009eb9fe5a1b6ccf6e8b0a841a6db407460f172c1134b46df29018251a55378eaa1482391fa9472424abfe4551684550349781826e1ec4540e91354bfa768eb7f164af59197e9f43be366983f4436906005c8a0232667f4d35561b4c71a69d8e8523a3e6dde7df9e99ceded8896b999957a2933404b85fa9f5533c8f2661fe62b3b6025ae39182a555e9b0ab776d417aa92e5f906b60e00acd2d0b8c7f352be52bb03d3db0f812f860fba17544b51b2a5334319fcd0caad03b281adcf2ac90864b96c6f7cc781af8498903ee87df61390478abbab0180aaabdf8ecf90714e6b6a1ce42219cbe05358e266a5fa748ce272b5030999b2fa9eac3f3f459431a78f6bceb1143b8266c209d483741297dac65465f6285049fe320fbcdb3863d39d1d6fb61b6c6954daa49f5531d4b850aa683d3faa435830550edb3daccf83bdf8bd7fbc6c532ca906a3234fb6ed7507c270352b698037cdc7d918a9f8337e598016a1c8eaf00be9b0659ca95be6d022eb8545117907778a1b3bceea088bdc0efdd1dfc2df6c8e7ca192124b68e7520aed4f73d923019fce1bde06e7240023433695419291ee3dcba1d38d1d251a81279078c96baf9638008d67c88894badd62f40bce21499fa13c78d01606d9a5e8e19ca54faf65edc98a3a811ab59fe091d2ffdb8e554ea64138ed30b4f1ceb00ca1d8800c8e8d2fdad3ead206568e9ac8fb1fac8917ea2ca528c99b70c34a6477cd0db108ee6e83f44364029353a91209451c26c85063595672d4bb516596e8b0cf03e04bb951129e4272bac994386ddc18bdf252e60254db80d6355fbffa653f0d82b4ded57e046038daa2b10283d6c9dccbb82fc30f46bcb897b4a2b9bd03adf152d5c82c3d80c28d65615283d27359f90f1f68cdd2568284dede233c29e980e13aec11a4d6ae4da9dba0b5006c6c13d74ed004ee92adb44b755be92e8440434704a1c22790b788f50406e0629aea80de53730b0d9972da7422d4fc79172f7b8a769be19cb5c3fbd7a83cdd8fa4152677e5af86112dce7d69aef165032adfb212598379ea8bf92fb88ee9b471d2148f08cb2c7ce497e92491e1592bb605786f4774008ffb5b82ab017fb66bef6b1043fbce93f56d1fea575482b55678ef213b9191bb2db66c86f718434a0cf0b930c8b6b68cf9940cfa9e1a5bacef3332029d58765b5a03082c9c67a24f9e5e029da8a34bbe9141a840824b32e7fcce14441d04ec891fca759c2154646a2a208f7e6b2854d2c45c39e58a4fd00d8831de0f43fdbbed83f3fcff0e495045b71ea8fc97af9b6f9bcd08103f8ffdc79844d78a98abab2e8e67e57decad2f884d40953fb69fe63e1c7c5dea277180bd36ef49dea37784f5480c783d42e8c9dbf46e9d6e4f60fee75152809bcc5e2396691a7a32ecc70de9bacbfd689862e6e4b59009b1eb5aab114235b84ab6bfacfb3aadb3affc040fb3eb8dbb2577824e4e978e213211f5b464f60e4e1f6bfae493af903c7d5a9753fae338fb9d65b2c8bfa3502d164999e38a75c68a4375799307d3ab5dc38ee69e67abb505f7ec5a1edfe0be75881caefe28c743b4de5ca281feabe65eaa215bbba24aed215c94e0165856c141ae109ccee9f56f1417a6df7521412a86599a5d7052c8c797f4e4ad79cf0d3fd8b0afcb1b720531f217dd9739189c5d1ff88153871f2e2aaee664290eef0e2183b781a3ad6e027095068831938ac4696fb15fa7c6b38300af5b9cbc9f5d60508aeb0d8d4b83f116460b30174c1fc234bfaabbc0f6b3cf30e27a15cff2c40bb33573dbefbf59dc0a4d4e5cb02c809da8560b1d06dfca1aa28f6c56c8d1ca1831cb777332cf99ca34f2f89464fa555dac7efd0de1489e6d3efe58e71102178eb496215ebf44ebc47c7d31619b80450b277da814b9fad7cfec776751104d547523dc9723fde5f6d1ca352049bd84f9ad039c33b9f6be1e499441c11b2f7c29d565e6014a537c63f90663eed632cf194e2723c685005a1be21ea58dcdd5553db764fc885b2bcfd944184fc29063294cf37b5a8bff409675a272ebf4f069a23922076654dfeca801bbe841c5feb6593aa6e788a7af1c3cd491785b1d0b5529c41f366b8c5efdcd83655f811fa894298c6e53f7451dfd12e2b8193c30a600b387b5d954585ec806064b6356f716665fea54a7ed8bd24ce2441e3bd85749d2072aecd969e169b41d3273dd0a75d192c4fb5ecbb3a1556f72a5cbc775b87d33ef54cc1cf24f0629d8b1e7b6e3c36082206896a791b02ed08aabc8a65c7bc98b31ad5e8b37cabe8f0128afd42a064b9c3bd80424cee0e6d5f4fe1cbed5c9b64296dea90e8079174f5e42d12126691b4adcf4af28b45804e87747cff927cacbc0e68fb58e14849bcfb8a55784211157f3cd649f9c89411070da2eea3e9ca5906ee9678bf13c14d278d6f948e4612987fed4cfdc6996c292d5e65a74747a838db2660f3221405143b282e7ad2b2fd733d5bade6f752304137e637475850a8b4bf5272fb204686276e682168d40d343e4df46385faa782f1bd51923f65894e651a0f26e1484fb6ff37a9f30f00b959721844285b4efdc6a3041cf10fdd560bb271990745f8843a243d8a1dadf74bdf8732c746f762b99dddc2a4fe395e4b53356cac9ea9bf78621ed6650be60639290613fa69cae48f5b1a6f85f43c36ddd7665196478d1bb0d14798e74847ec05d8773259eb4642d390e1614c8d891581eabdc702bc508bb20a46fb7d4d43e736605314725609ec2ac1bb5e4514b068dc1fa4436e47a48df07f858483954aa64f531240b024866ef98010ad1c4442af50d8c23d3583e990f093abcab6bafc97c5233d3daff13c39c43e79e44e86a06764c8904af4fba04336f8f2147328ba3a1c534c61de269beb1f6f6f7a38466a1f9c4196c329196903382211184569141bc955c863a74f45d16f9569f5761df0467bf62e5c4e57946f7871813ca9e68aab60bd29a9b7d59aab4942e1ec9477e35a6838ff6cd140b2c68c99cb081d3b8e6756fbf8aa6c543ad710fa6fa60fdeb3ea058c628b5e7f54d6c8fd36e11bd2bfee3094adfc513586d36b1e8bd834dcd263b882f01e423dfaeec20e8d8e32467f9e7209c205f3040f2ecc419ee9cfdcdf6615af40bc2937059d1c501735dd014df68fddcd5dbe5a444798e641612d692b5f9153aceb8fe515501c647c9e889dbb950e93387a3f82c6cc758efbc4da0c56beb022cd12c2b2aaa666be161ed16648e862ac9bd1e317f71bc69e268b5230d211f69ef9c87e3a261e7fcf7c3d2405666f208c5ffb45a465b420b66a3b22613de7c92aeb732ee61806bc0b37801cf59497ccd4fd5cd3928324084a3f3ac737eaaecc48fab93141012dc003b07e08b17400cbf91c8d198ceff9d1dc0e30bd0f78d5748bafe141d571c2104b7f8d93b35528a28b05f283ddfca431ee5f837062690a367583b1cd0dda8221450d452a95e88de4ed7233bf0049919cf3cbc98ddb2bab96691e712f64bbdc7782d21b59b38e8f07a2c9a707be5760777eab6961c441481908c8c60574864f877786a69da6b7da8f3d74e30a52968f5601a6e9a8d83a4e32c72b16dbb7da49d5a5634d62ea04cef0301c7e4357978cbd0f26d0af61874c8816adfa1ea91859e6af109645e7f5fabf0d28bf2f47cac71109a3a5020aa8c16d89d9d64ab2d0fe3ec71707b34afbdc6037124c4aadb0ed0683b5dd2d3e2f2b77933731ec8f94b542bfef28376d96e2684071ac01e3da6ce1ffd5ffad668b091ac53e937079c40da6ebe16e4eda47bb5bbbbf3501a4b7a547f07c72ff3e3ce8eb925881731bff65bfcdc640661b9eb59efb639db64ad954bce821dd8f0fb5295e7d2d7270e0976c01e7e64529abfc6fc6a1f73c9c50afc995595ea5f9659468d80825fcd6523c7f21ccd9f2e5f5f1485721f2a81050ab9285c69b42bada5b160ca5ca672ffb4f1d83ef09c037941dedc50dee56dec56d2de2b2506a4fd869cf50e89367fa565fd59cc0fe33ab10c2ce94c832cf4429652a509f265324da50e349331975a1ddef25f0d54fd39cd680494ad37877ece713e6440f85b3d67aa0f05a37a4f6d2fc6d8d14ae5716a95ff70c5bd217f735990a003165e6f2d113ca750848fe81fa5c6b896cbeac734d3767764c26a9b3cab9b7f69d44d2a6a1403dffd7f96ead746859998d88c88fe4d7821590539643f8c39e480c1ec125c38a9bef4dcb8dbffd9ac83beb9f23b32cc +Output = c1dbb811cd910890c0ea647ffad085a7 + +Len = 37848 +Msg = f82310ed964acf4eda8c243d817de2940e65c1791c425385f210392658479641a9a6c41c2a2f467c9a73fe0a0a0fa0fbef7767f076f2071b17e6e2a46d567e4b45a9374ef5ad318defdb91ec95ddedf94f4d00cfdbc0a33ae503f91bd8a4e90ef3b4d14b9fcc78ca004e45abcaedafd45670f5dcf5b20f2884eee4534039bdd3dc50fadad194047bf653820e5049d0d52b67ace069d3332d1b2f0d144e1ee4e227041ac5330ebbe8f873b0ded0f93644f7ba8fa2e228f793d24fda26aa5a4483fd5999d26c4186582f3437e3f103cb69e1f205ec06bb44a0d2d5b550fbf5c7fe86d6dfca25364e15c22180e55c71758b129675847d93009e4349055be9f8549ae903547405f3f965dabff1acb84b1ef4b12e4933f0b815d34d3431101e6ad2a14f68619ab58270919f98f3ffae97adeae742e8c107336988161ca3343f532b59df8e6c02dceb9ce03833efa8e65f0ab6dc5bbaf6690be604c98cc292f7bc460bc2fcdf752334649cce184b6d07aa1da0b700279abf4873918c09f6f1ebac0bfe1f3a20bb3267af0b88d07117ba81ceefa1ba9774b0f3f775871da718c62b627c1fd1999cb08b67778fe2c76ea6eb05edc110724de5125cf9e44f3dd02e4133cbea48b0e045a973260ad6b73974f0aae0408a20ed05b08965c82720e1cbf76634a727cf4e9ac8bb612235a742cb98a51145b0091cb9d266015d2eb9134754e3ff7ff75db057f0276fff85014f54ecdec8f90b96a2a982db14cbeb6e2e47609274993ec2cc24299f9ac8512c29b6f33d4d83222d467cc7d0e83ae7a8f976245cdb1e87656aa77c0b28a61e90989ab5abe70c7d38d1dbaa2dc3d1a8d03d79a7277b3557b0548bf05362c0769563a83b0edfbca51d0c6d31daeeb8b84cc2fbf2dd9d07380a51768e5f903fe0a354878c507dba2146bcdb66bfb1189f8650a20b6489bbb1db28115d17fa4ae52231e0b057092f7919accc51c55319e3e4af16fca6877a4b8ca2036564e70a0b7ac35ab00dcb423600a3e9f9d21ee20ed0a600cd89df6c8c8387f4ae2ca1a6dd13d29e93580b1cdf6268da66cf589ca8b1ff0884f7d8b8fe299f8e41596e47e0562653612210e4fca6c446a0a54a6e37ef80d52bd7bb8729e6b17625d197159ea98622235223c316367fd5b03a3c8145f2f210c910d00094238757627e63379e75bbb3e0d08ce1b47961309d7876fc59211c60678c5f4cc746e7d701461cd668238eada08493655ed732ff6f463f08fce6c86e0c32b0924ab99a9e091308198519c4b96b5680789cb8b9e92e8be1cdb4a8bce2c0ea0bfba6e2685582cc71297cc1287e4a2e9a41f784bf97e331a2720cd0c1638b9cb7af622b18a474599d2dd58281a544f42ae9f6a30cb1961fcb2089c49f997630fdd506fb7432e8a2d54e19c396d562907897227e68de4d3da3feb5ed1e2d888f25951ab942a8e58e60b4cfee30b7abeacc74017b9bc61273743517b306c7ca9f771827cf4bad740788867f6a17f227ea6ea81d036c12eca984ec377f1e0e42493a86b5a457ea9cf593edb19f132fde79a55afe7fa46ae4c71d4c9eb72fabfa76b8074aa02e07653eca10eef5ec16d97dbbb22a550b7500b5857dd3c50145fa0c37c1702b97abd7cb7518bdd4694e1fdff6d92bef69dc4a5b04a65e0f5c8548f500dfaead5b7efb84dc2ca7a45480b8889ff789b38646caa2e4efc8ff0813ee175b878c8e422ad851467533cd7353ad5ffd33ca0b2a5c87706b8198fbcc96f45c8fe293361454761bfd1ae9b78f70054b5ab6785e1cc689afe384566d72b760aae6174a0e99a6dec8474451ca6f7ec836fca81a13252bd845921f8bbcc01d3ceba64e3a7c99c817426d1bf46fdd26fe072c3039940d347d1cc17bbe507f70900618b1e9e9db62296fb6c6590c9f10b0a632765c489c887f1ab7c07791765a62e38465e1be281b1d396c6e080b7ee3e6fa56a30b9799d0e629be153ee76f81bc6a3295aa61489bfa87d53a8ad24248a6ede0dfcfe9ceb3ba301ca29cba308da5836967ca3c038bc8403b5366cbb3e6fa6617512ea601da04161a901872832726167303cbb52193904ee4e0245c9866e94e4522b236fbecccc500073b772ef7450b96923536695a5998190a4defbb6f7b8bb079e30284921824162e8b31f9a40c4a1b3c8e26a4892b0621f968ebe2aab906a07f48706474f21ba32e9209aed783bb4a2860ed9ac70e8046d4fdb8d6beaaa75f5c69e962396192f12fd8651337b1476a7f32f313bd0beecec494be5f5457573437ced647896e714658e4aef26d9ed4c5688d9fd713293802f0b6644414c6fc6638009ddb0e1fa0ebd13e4d1120524ba10cf85bad7071472a81ea144fa5017f3e8986a8e66d7e0828c36ea838f9d6954793fb8f5f7ce9018e9eb93646b010c9044fe85d3051938f4456fc29319f3198ff241ea1b3e09b4f7570aa30f2dcf9c100b5af268060651e89b17137c3bc6b3e10e7eafa72448f1a291e456b1bd2c64e79e0626aa042fc9e3dfd5539b5f58d6ec405e602644fcc48f0d1124f893a7f5ab9fb899056a060f5a9612e99d0f49d1061a69b2150aa5ac213b19a4503bb2acc062cac026b229a0d150686bedc61a60b30f18fc0fffd4171d9e564b353fdd18ca99b5427a76fb0ccc913e410a1e3ad49790f4c453aef893c8c96f8023fa97b81ea720867d130ad1c0cb1d1f7e623bcb184285a1ac7283b0a72ebdf9b9067319510d6512ab30c96e42808d4db75c9da2b98633fa56e515fc5d50da0e40ddefaaf65f1b6d813ac750c633f7524147c109ffee88550f912fb54fb23c34780b7deb72febbfd9bab7517b067f3c3a8ce465f5ffe0b3822e12199f2d56d12baf99e596b7ecf49670d6331b58efb286a4aae115e17352a2d7fac08eb2ce51f8642d1832451bde75fcb122d3a3b85e6e26768ce8ecc8e91aba71f909d4b2cb15651b7e7420a004df28ef268b2d01c85bd8ef6f546a080051a020cbf8d92ac7ec7a0a1f4492a4ee3dba39472b40f379b684be9142a15a20af50ae3e430a60cee46da2048be14f25f57b368e9c22b6f8e5f08bfa9bdae7cf9c94c45ad2af796765058c342f56c83071338f02c41b71cd52e5fdb3455dd69880320a288d10a01bd70970b71a39389717aaebac8c754c81632abcc32a725000c3f327af5d74fb71a342f59632d2c6e351a7f392dc76709b8289713231617d91cd9fc4f72825b2f12f78c4d861689b9b86f44fbe9d6805a316c8c409417184d207fe8809d869ee23e47285858e45de471d57a638b591322287b05c4f44ec8e4bd7d71cec5389d7902afadfa6a1afb8708099a0060e3a209f3c09e20c2118c285a6f427a883cc94bf6ad67a4281ef519d1682e6328faaf7a29f9bfd48c03e4907dd1b52464e7c4e380acfff61184dd05647d920c41f2bdeb3172d560c09a54a59e21545cd9edf2c8474ad160b4d105d237b68f6c2a803fd5b0c89945fe497ee041faaa7455a3f572a0e3866490882228d1af50e36117b7d21e675604a395a5d8ffaa121b76ae2f6b24238982231e9441b8c49132742db868e0eba62d4f037be82ddc45a2ab61132a57774539fb18eee563a2cab9e226b3f29ea204105f17639662fd9fba62513338a14b540c76eb946c48a657ea29b73d17ae36ea6e5245ff8c258a9ab33a13220e983c307a251b274efe5be353b943a6409626e387d713a201ec0fc13da12b4214b2b664f3842c0a15fb4fd7871f6091e5fcde6a0d4c14edc02cf9adaa25ee260367466c0922a2cf59a5debee4da7282a038d9f85f2fae452f7ed4aa9946e040235c68a03b7ef3f972a4a5040d690dfae7d0b6190e00644aa8482d528b62a6232cd899bc0af7b3eb097e1f416159976d356aef369a5cbb60d32f604fe127a43168825629e83b47467678c9e1610ab34c015dd1fb7493382a388b19dd4b047f1d6ed03a4463a8428e524b218ebd1ac629e4202ab22d525ef930e1b68519677b29b84892c60dcd2a15155ba283b6086489465846054508846064c9c2f1ecef4cf8dd620c193728528d4830e97afc31f2ecb07cb06f2c246d023cb9db8e260a490d36a302a870287059635152cee04615c6aaf3f65a73446d2131284cc4652713c96c82230e597bf80bef337b1a12b32199ae6484418ac7097fda9bb33f2ae421dfd795c9b553615e17546dcec6f3e7caf83334e6df035ac660a19a8b58d7cfe79310448337ee9716fe2b46ca7014726644c1eb9a6d5d4e28661e9b51abfc28f9959f14dbf09b7bb732ec74fa8fe4d18811e2ff1b87093fa402ca14929328adcc59ec9d2099da9db358007eeb80f593a4d20ef5e6b6879dcdc90cacbab8bdbcd44281341d7e3c5bafd01fbaf9edc7274127be56886658e71a2b7eba56975be4a601e5701f283153e13d82bfb240ca0ae16569a78d311db9fd9c98c3e2896393b5fa81e7a2224a150be2f1f3b1047ebd0a3da94f41811674fcbed35feb39657888af0ee142e6e6fd9482b60d52b375cc2ff2e5d461e103b6abe4c6f4dd11e1d1a291b5237e00b8abff7f675333d82fa6c727c7dd4adb45dd6fb0ec19349d695d78454cf4bfea0f7ec14b8e6bb0ed0ceb646e97a088da5d77dca5ab438e465c6a8e2c1efb851d8bf46e6983cd765cade89c19fde49858cb1457258cfa46a74b8758d8a39e6a158ebb7b7bffeee0b1734cb2dc630fe5e11f1183d329a40a3aa7427cbd8353eb6cb8326cd55b467c960d866d085f991e0dba1dd710d9d7256b001a4e5d36c2657d78d7a7281e6ac654dd040f305c069d393c87c571461a34d2d67d623a265074e24139deb6b1d24a7852643dd6e0deeffe06fdc376c6d3c4ecaafa4cc6ea84a615b1c76833ce03759b1e256d8e769882c6b9de7594049a3222fe0f52a5ebe555924b1ed811cb84d41780a602a985a9f21dc5a8404b67e42910302b3839b2e92fd26d9ea2c322cce2983a84b1caa6a9ba7daae9b82f6938062ee1ec5204c8067170a9c55cea7c422d77ac3fef64521e4860da215192910c45f9a3a13499a3d3e6d770216ada208b213036461009006e2861e3dd812777e784eac618545adec7ec9161416114c81e4a7c9925c82b4a1fe6eb588cdb5076303f8cf98035eac158ff18fd93b44cdb621597255d7c3d97a9e087989dc49024acd25a9e975dabf41d9ad89596e8d4c2fd2f3a7b5ba0c251a2c1a134aee188fb83e9ce25bc30210f6c4c7ad9d9833f1755d3b0fbbeda5c3080e6d2ad3e968d737be2723f6d51ec4bfb805a2ac9f7fe60f2cfa536e58d6d9ccaec9672ab782024eb58c14c3937606211d31108f6db95085a5f71ad7e4e790ef72f672593eae37868b945cc9e651fca65b11a14ce8295a6032fc0dfc771f0ff8c4bbf26868339e65a807a311b4f9ced5da6efbedfa1629273acfd4e7fac77f6f0be1905d1b5b607574ad93a1e7b4a536020fc6798acae862253916a0562707dcae31f342416ca53e584ed28365cba9523cbeabf97f8bbd9a5a027b2d7187d0c81770c31ec1af9447bab108bf188601b0ee415174c3a2d05543f2ad98352f01bbad69aafa836c5618039fde5be62cd6d9826162f23d574a1e47d151e98966c33bd8e34edd6feb12399ce0fb61b9074f535ee6837cd5f1537ace66122654763ed200a557cf6d73f133eb3c09d8785d95a8ec985e1873ba12f3407a955980a599078d786ed9654d1b8c5a7badc90b77cf5f923f9bd1fff8b01006d58589f43cfd62e7243b013fc2b7cf5064913b599d2601baa2e2ac61f45559863f88bf9882916c77716551e318ee8135c05d364c16c215cb8ad9b382f627572980460254c17eaca32795d13997e72c7057b9c3cb2cca232dbf2bed48455191575f695a103febabd40d72882a89cb576bf14be8bf2566b447097e629c2bf99079a696cfb44601ef73eca57e9c34c18b8d56beaf0e4ac04f83307b1b67ee48daf51b776a281ce702e68cd5bb78e2f24f3e4db820a1e3fd7c48fbc91f8fd765f93587b4325409c66c97b5ab48a7d9852be6a0e142603848c3ff331076fe2e78759fb1f5302157c6b3ec2fce2c1061a3a7ed15e31d3390c7ad0ea0fa299a3babd49d63e16a754c0e614fc1e86f9ac4744cbc7563b90335a2c1de0a2d3f4d4524a0966320ea3a32c7fd27359e1a2f481fa1b9870c1fb66d0287d73951c0fd960b60f27a5bb8564f1810dc519a33b637cd2f4d15835636810f8861f50fb59474899d18703adab3ec2a21d6de84c516d7a57ce0e5736669b9f04be5050f25f928c6de720d645a375025b87ca303d53971d012dbc18258395cce59c932f81814fae9ab6719823fccc5305e386ac06d064c7579a46f58338db4d03877447296cd311a8c5f5b3b925991739971f9639465b2bd37a5b79eff4c071f72550327a80c17830ac29c385ac5fd17f4901993533ee9d0d64563fcc4609ee28fcd36bc55b9f249acf9a4209ffa5144f4fb92f8b1793ad5deeb39198bb0c1421546a7dca6bc0b97fb6a3b9c6adfd521231b2c3bb6ffedf4d501039e5b24b7678e281c2da1fdaa937e7e2954c25cd1d70858af046ab64a5745ee87323da4ca7881da5e5750651765bd9d35efaf598c8d2b1be2fad6879923b51a8e7e3818409d77c63503bbda99364030291639be4f6c15ca8ec6015a2183aeeddf2a54686200f75368d9e945792e909dcb706973629c4dcf +Output = 0f4ca74294cd5248aabf5e6e266e0437 + +Len = 39200 +Msg = a22314d2173ca4d53897924c4b395f0ae52c7fff4880525cee9055f866879af35f22759903b779898676a216feefd4ed75d484f83c00b58383b9279e2732cbc2cb5479b72abee5b4ab0bd0c937537b7a47f461ad419225c6045cca10c191225f0e4389f3355cd3a0d2de822c9d6f3cf984147de3fd3d8a6c9a02a617ddac87114f770b16cc96289321782108d94a00b153bd40651809cabe6c32237a2389e321b67769e89676cdd6c060162592ecadebdd7512fa3bfece04a374a9033a321cd76ccb09313c03aab1d81ec84b715e2def49c75b690e257e866650a078cbaf1c7b99fb55b96545a76b913b9e421da76605c038837b3885c28bde4f70a27d06c955648fb348ba45ad4e123e02d13fcf42756a52f2f86226835d32f88149f9410dadf6108da5e30aa2a084af5bc27fdfa8866e9c11a83311a7428bd33b35e768cfca77064a99879c70aa0e1710db84de7f81f59e4652544d18831169072ded81f7f50ef752ec4e04fdb4d9fc8be5f7d4b1ae26e1fac06ce2bc67eb414bfab6966c76e36d0d66e24933060de933a77fc925552aec96b824d97d3842e47064e8ae18951fefe3cee873f8e7d16370ebc5c6c3be284780032439423c3dd8df332cd2e29aea063cee0b8b36a14df4aa7771d27331497b2269130af2bd05a7ff2f2909b2cc6b38808cf198d47aaa2349142af61df5b50fe3b199557701c1d83720885b7074cb10177142a2babb1078b58a9839a953938b2aa55f21b8519af4f1cdf0d004da31136965a7b2d0aba67c57a164a3ff930b78610b0d769df4b88294ff0a715746c6cbde30c7cefe9495b69521363c08fd475defac4b5c0e34420a887e7e454f00b2bfdf994c012cbc04afd8d1b50daad86cc23c50bfdcf35761153412f354d54f1c77d269db50426c1ced897a8a1dce6ea52fb0be14fd34a63c2a028311a7d27d2c7c21681fc528ec05fa0ee45d745d05182db3c0f0c8ba69fcd1599881452cd00c55325ebd67c684e65ed1d7d51b3de6ed43ad1cfc436be8c892a11aeb36cd91e18a6f13603e047ce79f381b9a1958594dfa069bdf78306ac9f643d2f6839b07d6a43f4fae53cb1b3247ad77557694a560d92605416ff2392684a5854b33807c102a09d94fad01abecde97b5ae3bdb144d687522cc2f979b08c530fe924e6336baa4377aec54907240ea5e9b4c6f14ec3d2f5cba26c008d9973f4c0472dd2b7efa9a30fa2d515eb954f569f2d81a277657b74194f72a2e3afa7c625e93e7c29cf8955c21b9ab55c750862281f944fbfac4878d79e875f0085a04d8d59e740fd8de1d23b6396a5ce65d26f01258f67ac0ab27a931a0aa3589de5d18313b8dfa7ad1b8ed8354975a5ca35b3b6b9c388b0f3520fb84c8d1e707af11883a11386bc9fbf0224eb339397249b06c556e10163189f9ed3a08f0edc8f4a892b7c97f4a0e844c2ae0fd58e07077aae9987688046cd13ae61a07112f15d6a89d720a6a7f9294546d01dbfc379e57d31bfc5ba73b09326c4eed6e3b95357d9b10317d00f39a51915478f52e26430eb26a49c675a44fd6168c7be4770772100855bdca498c71e68a450ff2f595a9c7cf3f465efb2788e5c00a8c12cc6d12b878d3de984d335e79c7a98c7b5a6c16a8b300bccc40adfa86f22fe8a042af5e9c72f25b8f15d1a833d1e9b8376493d3d9e51774b74c1cefe235635635e1b59ee57e1afe58a84c983b2f6b5bcf1bf22883edea33c8285ead21100ea079b2671aba24b38d9b0e8e76ba69993dea87725cce54e3c4a7db597c6a0c988c16bcae1944ed25d1ff507d8ad708da2531b1f9b9e1a168eefb6df7a6e5af6ae3b10770e5aa60d9922d75031bbb9395dd4ba07085e55ce3786ce71e72bc84ea6cf59c97c415063598cd8507728d92342be25cc009010ebb2ba450b827141081f1878209ffad65a2aa868970d8768e1ed89beecf8d5e3e58cf48b0ac0e18dd973812c1b0dd99078992008728939e0ebbac205d87592374222c0310e26fed72950b3c6272a802745016e48a16eb2c9a736e19b1cfb4793881097a774292be57e130ad6c39a60f3261ffda97222a48baaee82df38ee88813dd2f58edb4beb115e56f0ee7ec21e9cb221489b834961cf7d4e0052aae3b778c9e67437a203cee33089207dc735fb7c7fd1f9af43479cdd84d1f495e16f66f2c2c77e3276e559e39b15f3f52b6a9a2ac59e6b4540a1986e6816da097ae609779ef27e2fb864ee9af4aa05f519c46d2049d3380de9fbf6da7d991b2de5ec318fd5041e5ff5072f61e3a1b0ee10f806e5633cca69cd9b2aaa5bb55283a0e651940b58b9739b508ee0ee999f50bf79d9f2b8279cd96a13c6668907faab4a690c3c987cf9db39b57f805bfe1bcd63ae68c0af2049dd3e0a3c976c1d8df530e8a3e202fd3a275eca83d8d24bd0a4bc1a35e7beb33c05b7c30fa59b428701f2f9bb1cd13604c858e43e52d80f38770741c3c06d5d0db365f2b2299d3370420ef0d44589d3d43ed6b70176e3b4cdc4f3b984f3418a1996d6fdc68bc85cc445f3726214a343430b56977fbd6bd90b1f0ff61be8c1c6f9f06968af54c31b1d8e3f0306d2b3f0bbbe3729fbaef6e87ad59a6bdb2974a01980cba7ff0d141ac67b400715381288b8b816d327c41b7f879941af553db08212a84c50182d11c8699db5132f9d6567c499641766852feadbda94150c8e2bf95fd789e59d3d62a07185fc9ba87b131a69c2bd8b4a7adac6c209e05183a34d826baef2dcf0a67d3f689485253269b21d02d47193360d72afe4a7d4d93d057b99c09f25aaa500d7f1c979fd343fe1b8ec4a4f2ec3dbc59df2be44e000bb3d5ccbf91880d34cc4e9642e86b33d336b9e048a8343918e3bc32ba961708c60a367857fbb92eb3a7b5802e24b45c4bf6fd7f25e116e80dfc888d7507e24c0dfe00242bee8da57008c7a5a9f48235f36870d423f89fe26430435722e0b6b427b7bd3a04130d5ab3180e6e7a00dea612b199450995d80d65a677f78ac89c285e5cf421aa124036c4fe11416befcf97f2fc003ba15fc7525887abd775689a90f8162e41e5922f1feae3588742695ef0d96f2e1fb1ff769a84fa685eab68bbd43e0cf2027d3be0fe6eef6ca9c81892991032aa57021cedcb322835f4f36f04dd7867c8cc39b75dbc9849d40dc5a1737bdf6efc4d5c5f33ceaa389a0116257f91ee4e3807e2abae3fb01a181d01af097c8d4bad6786704f8c34531feddd3333d9e7eacb1b40c2d971fe89c14043e85d8564f0440f4af64cec18a14d210d41289ead6208701ba2e839cabf56dd54f4767faa8649ac6e9a2fd59d49ab0371f667c686df786e3bf3e27e5be45f5efd7c5c50a83445a5bb0302310c74c2fcd0fbf73abb89a17e685ed02afa1f642a042818e2a623bf64f9d9cde7ad491875f1f7e0e393870d06698ab924ef98eea9319fb11bec7a3f50f0c696dfc8f137d49d932ba8580244700721a554827884434e8a2fe5c1624dd167706701a593a7829c77df705021cc220ac89da2fbe7af6021909b276f03724f287f47358c58eee8b64a0425c50d2f863a29a7f6a10cf668745afcc93c843532f99c3f63c468966db3b5a3aefdedf5025eecce38bd10e1c30d8f5ab2710e1fe3a36f557396ea27785a5fc2f341eaa40040b91750971af8d9b4d8bdcc55c8b7c8ee9f934d4a06277374f16cdcd82cc6e7a6368c267753c41333dd2efe32db854aa1d501d928e620c5c912a6510cdae21f590e34a3a5e3ccd75145b4304e6e11d186b8a60077af99d6216b7a3a231d811021e717ad68f1988ed5b9584af3aae4c663f18aa8818c1b0e44a3ef7f661c2a22c56a3e2d0aa5b1a188e0213567b7858f0127b5ba8ca32dd5fa630d081d0065bd0f3eb00cd1289e76326317d7f2bc7c962803301fe11c57930a53ddbd90f0ba49c50b753006a2e7779be94219dee152429f2c02bdc82021b03d1a66870615b22eb07b9683f03a150b8a1babe371508efa304b337e88d714945b61b14cc996d4d498341aecd919af99c8a1591ef52eb828a108cc496b68b7a72ccfc4f61f9ca9a345de095207673d8b1e2254b0b0a65833bb0ad305b7fb9252770da96b514fb8047e226c9fc34b48485146a583ebddf78346fa539cb5ba2efb06c26895a6d6895d0ca84aba55ed57382cb6537eedfe1c800a7f51f5adcb120c9f97075a685aa417b817ab8b0576f2c3761a6688002f5092cf42d7f8e756c6eb0b3490a4dd02929b481797fa1b0ea151f619e78b6a981a215cebec8daa84d30212400a5a4ff7da50845217efdedced4a755cdd6e746302957a21999c407cc0b77b647e640460049d366d325297095d16bb8b501966b59056f18ce50def6715741047f3aa456698ec2413f10b8fbc7a1d904d487388b94dcc89d5d8c8006d5ba09792711359311fa417ea5a020b1ecac8bc4ace662194c05f09a47ab6bbb519a2d9ec01898ae8212cd79a78205657d77d062be9da7b7172783ba0d4bd6768d7e49efea9f41eb424ee2ccc504bb78e29a53898a2b5dc76e97de572edc64dad1ecdad6f733a5ebcb251de28ec6c75ec46a9183800e08dcbafd8d0c2cdbab6ad74c5d0e86744922952bdb455536cd998b8ef6fb40b43d6994cefc4377d7fe8906434cd118cfa02228d9a78fc8d312bba07e104b3cbc6fe08462c897904ff2c7d73826d91ea44f5d0e951f0c4a3a5b37cb9e6a1de49524f3f27f6e6316a20c99c2b187811890bb55af048e5569cafb80458650cdd8ccd0f6776b4a407b8cc0916135cb638723588e92ae81e598036847a6cc80e579c2187a7bcd08ba2f5ea3213b3b7efafacacb7a51e99657657245d077b766ff58234ff2880b163ab29628dba9492ea1d3f5689b554c480552a608cd30fd7f75e45f0bf114abff4c95c1c62343d53702b341d484254cf389d00d25805af536e3aed3b0e8ba36206a597fff9a93664498192e83a73a72455f6e2620bc5e4529b3383ff36be110260e6e1f59940082b3dc6619ea971d4299f0ad7f8ec3d343c47ef0d237dd11e07cb3543e68b213a1214a2a929db636348de7ee77c42922a793a16968f2ced52d90f3ac4b81875547f95bf73701972dce8d9fd1ad656ef4b713c51232b8a3934e0f49c6c548664dfdc89c2c65baac6c870592d79ee707a218d1548bedfe1de4c85420443a21d156290b856abd2d886af4a26b60bacd75b33338ca26e937703222ec019528a27b16503ea2129bde9db17dd0841d9f9d5bb09cc6b073c2f96d13f453784a0f5ea5f709de7cb480426ec8a91c776e9bbb0c22cc178212e9b84702a306fec35c9af480cc676fd1090d7e28fce2afc45dcb19723787c954fbf89076b5930fa1af0be93c0e6615f8a4744e4affcfa7cf5422063765b3e0ea483efbe8b26425656505f6915656e98bd12b41b7083ff9dffd7454daed1883237d0fcbe11016ca7f1d3daf292ab6651b2da71ae5dcc01086d81677e524120a90f8cfa2f85517795f4607655bf2010316f85c1c6fb3dc864472ad01dea15cf1c34a12f39707d2cca66de7dbb242d36e1fefced8bd43f1b5a93b9c653feb45d33aff5e40258ef50eb4f37354b4a389e0867283c246f3bc4925b16924817869295877260b5c80eaea3b852e72eb8ab114fb0f0f8ba549789b3a6297c23bcf336ebc4ffed7845420d97a817da8bf6ec575ee33b67740cbd33667ddacb0d766310dc6f83d17359f33472276e588b8d6538dc07f3d37b1e138a52e711c92dcc3ee9118ee855d08b89ecda3d3fa756047c7c7125ff82f612035520ecb6bcac46ec89312c15c1b4636cfd77f3721013e39beac64447bd0e71f35e7794b1edb16cd5b8e54ef25d496a052ff350efdbebb3294c836cb3cbebc14d6b00e8eaa465c7623ed5fe6770b727ba4af35c9e5005fa8e6850a52bf6b48d784562ef4929efdef9e2a8435c442623f415222068b78a433106d3f89784925adcb446b1b7c37839046d0726b91fbde41c5925a33357a1137cf0b76cdfbeacb2e17f54371abb2861e9a899ad664aa4f498dea7eee97973f4d6eda20aebec2b1cef7033885c5926dd125807e24b0d04dbd26c4e077065276da7c43dd9a35636216e4d8cac63e59b35e548f8cd51af051f30cbc2f8b263e607583e2fe1f043f647c6df06ac19a7aef2cc3f15755e7ace4a1cc2acc995bbd8484f23202ab8fd92195fee4a8f64e7889b2e0406e25bb488e4fd1bb48003b424baf53bbabde5ca331ca242ff5d2eec50b87260721c31a65a733b9c8127e397f3e5b24da2a15df301daf5a2ce1f5eff2fd2021b012cc6986d813e0ebcc51cac6c50ef2383de0abf23dac1d75fdcdc684d7045fd5c1904d2e8956d380c63983bb8831283037dd278c2a46faa599c906fd11aa3ce2bebd29bf43832e41a083e8cfe068536ca859f6405c165e06567625ce458845515aa173db9f0f4d88ebcf6e76762ae0481fe58cd15b80d442a463a76adb3505bc35fbdfe5e481cdd0f87a8931b1ef7b4d0f0e5f91911ce9d5140000655b26fa8dd12ab270cc510bb45723cd941c2c7105e642e313a550fb2815e9c5403de4a040ac9c9ffeaf1393ad9849b0101d685ded4611abca00b3a4c63a7f6a8e0bd4737f28effd02153ff2273c6ab5384e39be7d9f093e472bbb6339e23f64a14d9cf083e6835e0d873cb3aba3e5516f27170f3161881efd9edeb2fdbda8581c6ba4b409660537938da034b57f6829473066cca33e1ca26fc2a4108c2d589971ee621a7a17c41e1690f111df1f618132d2cf733d75357d104f92085fa1bebd245e7bb0508c6e760929a5b78314401dc4b6a79f7aa77103818e3f0702cb4947b63457f2272462e40db044b24bfea2337f3485ade5654dda2616f198fffa96bd99f86d7c68803fcc76dd447e842f0686b4e4f02b080f2a759062503ab1c01573622342ab8 +Output = b4a0f09610f09a60ec1f4137e939de10 + +Len = 40552 +Msg = 055f7d523693d1c8bc83b9289741d02fe09396efad4670c635c4f09035e9571c921358dd3f781fe261bd9208b1c4d76f22c5162ac5a0803be97190be86659064dccd60235771732cb6271a1e6ca40579469106554fe21954f163a2d55c93f56a2cb61b8d4526d48e02ead8d0908962359420efd714b343f994c1ae3d7f1b8d17c9f61381d33e4af08f2d5487e41df78b549a5918dcbc07121bb33c5db7a46151fdb4d068c762dd3aa31917ac3105cb64cd27ca806ea46c87ce63d59fccd677010e18d8abea39965487d6a8a53fece6a648edcc7794147b40f5f6006a855bd910454bb5b0046c7c27838b8fdcd678513b0d17e66514b43b25d8974627abd88f64ea75efe1dda29799de6055b7be51130964cba1b2b72bb41fbf6c2e3c06f89fe745bd0ca53c84f093e27e81a0be2034fa953183c64522ee14f19d40125e60137f9d4c9663ebb98efed50d9bfea08dbdf5e77316098640f2eeb75304117bbbf2163c4a1585b0ea7ac000342c392a3fb5e1a4b6e2e4422ec79359b603a125af459368de0f7254bfbac3ab1cbbb925df24a812256ebd409375ed1fedc42b23e413de6a300e929fdf58ed1eedd0e55814133179e542fd491805e25021cf153e0464df8a69994d58f35b28a0cef3278d8788642321e60d25657e5c3679adc93eb4417e0fb1390b49a2cc5b7ae7ade68ae08e2957ffe3539c21e842171ee5adeb9eb0a3432f74343895b26ef561858b18c62a685ca7bf3975f44b7c3c37ff2b0c6abc366c0cd530ee7415485764047cffe166097b4205267a88b0f1eded84aa6bc06a1fd36fe16733e6fed3e817b02207da49f4fcf83a8271821e8b7268fb92ce46c446c0812242ce9373f6f2a314e5f859db1227f0e8b4238d9e3112cfec4afea7d1937a6a1f2789247f99bb30b52e9905254943539626584f37cb164adf3cc38999ef4b51607f2a4127a48ce51d63b3872e829a48cd3fd870f142c6035dcfe4952540795e6eb37a917500adead3ee0e86ffa672f814676a99d47c6a1fed6b2b727c704dbbd02941bd709366685f3572ab9e9b148bf306d872e9624ac918785ec8a6650f8d0e4b476c2046ff874aa2a79e154bc828f284e8a237dcae27655e4641ac0907ffb18053478e02bf6e1a9b74066c9cd6f79a4a63d2c6d3dd615c86ab8395427d36402f2ff6c1adf0465a8aa38ca978852172be10a99f2d20a08556553669fab85d43c2a120c130d8368fd6fad7d6c61ece0349b9d0c9d4bf0c69370b033118019a42a0726d9774bf6743e74290fa6ee925d35424ee4cae02cc8f929792f484a015c6316a874a60ef00fd25425e1e572e4f6c451aac31a530097fcdbf8aba26ddf856dd5013e2dbaf2a46f8c4ea496b3574568563b27fa093eac2524c938be6ff687b0ceebc68cf460da5c88edb839145ba177dc7a73e867198df87055770ac508fbc260a27e323fdd0a2fd6adad4b1a84c39940e337741133a5ed6b47b70601695a1936dff5bbf1c9cc5ff1e8f45b4a4504431ffff31b8c1f9c8a61faa94ea9aa2b2bbdfead98beb98973672a1dd8082efbebe64b374d3c3fda45e0f8ae33224dc78072790636fb1ed9f0b30b9a5fe8a5031a203f7487a606d7a684cc36520fc6e7add0f9b0453b8c265e41e7ea316039c2445a471b695e171d32b9efe229d697e40a65db0c11f4640722a0699e1b137fa200f11ccc50c8e33350fcde3238fb43553cbda79a4bba48e4d46aeb167b56c93ac6811ae7ec7afd82b7ca0196fe026ba3ab24e9eb40f1ad67e9ede6f3b0ceb8e50b86bc0e7af8c8b3adae1490e7605367dc581c7f903ef3d8e9c607b679cfc149467e8a90baa6d72ec91561a093b99d0a56b3a9b7c806ded04a7fb7cf34fe64d01dd5011efa199b5c809c83567152cb1390b43c2446cda0e6826761ae50bf3601e826ba29d7d597d56abfe4130ee0400c10f62e559b17fc743839afe47ba697673bf00021c24f5f21fddc2e76cad6ae6c6de60acc435a4411c252fd0204391b689fad9d97480b53baa08dacf243aa68bcfe004be8ce291a47b74fd37798eb349e79cbcd0ae78e0817f950fa0607d0016647d18c4b99e8d17e8d8cbdc59831756160e728ed0f3c0eb27ea2902265ec0af0d1d62655453e1c2ecb96267c80a04069cb7c3bce5db9ba22971f09f80c52d805328ac4a64e8d6ce0e7f8b7fcf0bc48103fe7602f217bacd0d912c1c759a90aebd06bc1af145b263d7920ccc746e9deed24d5507018f65955cb1a4240dc53164d41f5a7e0452bda8ce5badf8c11bd875920b2674192be4229d3b215d512e58c81edc501ea3f741c67b4038a8befabc40ca9fb2f043d37e9b58966b6f48bd4d0225a365a1d91c84e566aa738672f493740273c124866f7c28162a4a03fb5b573b71dd60b0aba9cf2b1802283ae5efa33cc3ee1bb8eae726f35d5f86c170eec09b88f30af223866ac318ae1d6c1fd436be937887537723c421b89de650b15fce49f44b2b10489b9dd3ee181bc3298c9222fd79ce9d360b9eddac4c3359c697ca6e3d4f8bb122d0b08423a6e9e70afeff918659b8402e88fc4dc3d43583b57dfc31e966f17eba0eeafd3ec25181ca11c733b8810de167802599849db47788f8abbb82f7261e173b9567c7d3193972af312f1a57952beadd62ea770f78dc47f22033906cf33a4141f7e946410ab608bf84ad344418c3be85fb682593485bf852a4c2992c1e7a410658ac4473eca1972809d78fb15d54eb62383a158fee9ca5007d90279f6f851e7402d749d387a124d408d3b2042d847a5a6089cf6d304655e3f3c4c12db004e0723c93dbc8a25fb9aac8c925a750fb7257bd7cdc93d70111e55087f03ea79e90e74d0884ba07825d9293e271008e62db40953cc36bab77e0edda003a3a1dfc35bd7e5dcb117cb31974af451d79af61befd31f00c5b734dcae4db582a89dbc6d7db17bb3836ca9af438651cb1787a9f2275d9c140cdf92ed7b099b64593a6a37e296049548fb9def6c7fd8cb667b8c50f92d5d7e62803c0103a5d4315c1493b338fa030a68510282707bfbfb3ad317a8d3b6c5986d45aab7c6a6e2621798a37fdf52197b781991f90e1f3dd30b2ad67a558e76fa939c69823291688f124333fe54329a70de91a6c383de00db5def4345ed28e43d6bf0e2f0e5d9b910e2b0afaf261018732265cb62704cf78cb99cd88c18fa9fa95cefc1744ef4668fff4d8112c37f161aea127a6661c0846f94b020bd47880bf6ece56f9cdc85f364ce9642b9bae405a07c142e4fc6fd39ec85c5966a1755bb8ea27e57cb2ce2e227e7178f148ac389cc7ed7717f1e478a8bf349b41306f810d90417149faebfa551cf3da0b3a1a1f4f758f8ce74e623e8e663b9043874c3be7e884c207ad060df7aed9532079e13e9a9a0e4afe1ad36f7545daff15b0f6d16e7b599f5fd407ad2fbc8aabd80ee7dda6bdd279015d1e5187e577b15fb3538bc9d026d1f976d52325cf6eaadd0016449b6643e19b1f2b2deccd7c6fc8964db0217054217c9b5ab7026eed18d45755baa01ec9497269e24acc854ffff863cb8a9de14c54914b7db0ee226fbc681c8b88dd6bcc7b2e422bf24e965a299822b45f66ad7535df8f265810725c5f3f56a2f77bd8b43d78b3ee6b9a8703b750d9f278a35b368b0f6e3df591e61cc9010d814da2eae958f8c313fed9e0b46fc7926c1d7d74f91dc8f1abd0980617c2574910d2792bd394557a82f3332ad41ba6540a961c7f25b4b31f56314e5bb612e91337d02922dab837e02392cfebcb819428b42aa70422187700275fdb6c5f805e72de8dd957678e48fede22d6ae006a3a145222468c5711bd9c06a466c17bd65e6fed52b253e0dc2ddb9ced6ff8dd9d3f23ccc6239e2e672dfcdc4617e373da93114c67dc9daf6b917f4339c353c9e44d5a0a5e63c20ee16e278f8e1759ad55a260e4147ebd3a031af3bd4ffa462c0509c3f53231805f49292509c48eab930e36649ba1c13ceb6b703ef0773b5a6fc91d65738ab3618a6505ff3030a4628ccff5265a55cca1296d3c68c6f9ae15f8f831486dad11ecf5feabbcee1a7f05ff5e87ad0a7ac8745bcf267a261c7c02305aec75cce474aa09dbc2642ac94a1c568495019156dc3eeb5ad57bf729cda67fb6f7f3767704212ec6f300cc862b30f809c72bd931318540d6f2732368c88b4ed6f9ca55aee8dbcd85e696bb994ac84db5c432c855eed4c20b246b9121963803809b0350d049604ce14231e14ad06cbd50351e48093cb0d9c11469299c5e35087d85a54e274e3615a2b0d625e1e5a4b0a1c1f8409443a3edbf6a78d320490bc3955eb839f920e78e90d78f6fa5b0f98e7111c7973f2a3466cecd9d77f77f419e8fcf45f88fe6fb21726063a7df5af2bf88cc9337521aecacb6e5e2fd67275fff357f527331c9f83512f25bb6d70a18abae9b6407153a51273f5b4e4db96aed504d17ea9227f1683136367d82d5e9f1bbab2643efcfb3ed4030d7e950356f74f8a03e123db885d27fa7d3d3f4211f0755461437d7caac485d5300bcec225f7c5ff69dd45c2dadbf862d7265f402d3e2e3480e49a74c4ee8e86e7fce0aca618bed17db37d7ce93b6ae8fbb396bc22e08cb7abb80479ec057474afb2893739e2b0acaa14396e35c3f5f9755593fa7570377a1c4e4a0082b1de4af1dd06d663de31ed8970181b433e2010be9cd5afa765b4d88d07d98d1b7c025658dd082eb673b910a647881893e28fcb41e9ba202b596b7f6885418438bca7433f230b84944bccb26b1b17ca9a598b95a9dcd01093a3e1bb2937009a4d0c338e2f5f6f9cafbed35f425b25b5d91bb9ec50e6b5e552ddae3859bd9513dad31d83a3d2c2cb4b557353e698507ed2a1714bc177ba02fb7f376374598da564b9ebe0373d93950998034ca243267a1973684096307b1df00103c903bb48a37d29151053e0607e6d0f29b61ffbf62c001a05472981678ad2fb99d5825354b276993f90847ba80be8135d0cba236e2948fdbeec05fb1dde16c770156aa240470382b1ed335fd8b1fd5cf3dd0b49ece636a71b8bb5fdfc8c2e1d0d05373889d5868e1282fb1d71053f44a4838de000d76b9ea1c2a41a82199b34e72172869fd28213d80e46351f8a0052e5bcac7638915a5cc80d6ac14d0ae0d79506a70cf0e278ac88cbaf272294f3001dd4f17cf298856a14e88492cbe4915d8d014f3c3b79fcc09b57907438ca79f4d3690784dd516f3f0ed06c0f7d1b2f3f35bdc5a4ce0d60e8863e849ca09f27799cd5290e37508a442c518b87df230d0525a8b4d73711579ceffd061118976e36e0c60079cf2a6931e3e88d9c70a0dd47e33e9733f53a43562eff9f620f27d09535a81867d3238e50cc01dccdcff8f26fe50be75b86ccb69cc9d2bb1fd2e4d11d01f7cb5901e06c594b39e39c5bbffef5a17d2fae6a5d23e956f2e3ab2232e246dc41a3bdc9e58593f7fd4c78824a5561bf2edabd2e700db44cfc93847bb6a6ab3af23c1699b75c9948c871f2f24c884c848d63083189f686124c653c2dc480a29495fee40fba63e1c437ee9c1a2b1a0e98056300121f50f75d6eb342d700f2c58fa956b68a833e05d0a83cc4785a9d30604355455eb4bf6074d01838f5e08fac62b8fdfe98864d6e14a5c70c8b7f645a83b3b43865de8459ff0cfe7f18e7b99fd4213f3cc858049306cd27e4c1fe01d568d2fa59c5e1625c5291f095ae8af3485a9ea4f1886d160d0d6ad9edca5b1849962db24a0d81bbe0260b791d254eef1e4c6dc9ad5729d444bf2b5777e31afa1f822056699b24037ddfb602662ba7ef8a403b07c0b332d1c2927b2b23cab249dfb3576138fd4cdb8df63e2701002a8724cc7309fc3b0c911f0dc6bf61efb569f2a04f6d48a260a6b8e000519e614b487657922a805d1b94b2a7ba9ec2b0a8ed00ef54d51938f3e76753a91c6ecd8ea5e76834f42d77e44f15e6b343c6bbe13572e714231b1fab301197a4d2129379220074c7f13439fb32b1514d48de6002f5d12e19e1ced4caf35042602d2a517f3f4a13c79c3501c4e23d6de5187a5b9280a43ab29bc4e6e7b39bda8788168625603cbbb07fb06dd5dfe293172d3afcf47854839abb6dc485f36cc6677d57bfe03750d31ef636ecb28e7967500190c2cd4f7a9f1ecb59fc2a254bacac776e5d54271ef06faa28fccf704a612c400c5b61787ef3db35fa0c58eba0d3a2f0daecd5b1ffaa2f06172c9117de0708331e157575ea184ca5ce637699150207942dfd095a8b56e99471dabbf7bcdf7085468f6dea3472df75579027c0008e36bbc7ec53a34a8d0bdfd9a584926f3101a10637af27f6aa203f2620c0f30bfebce24969390ea5c31232af1baf7a5dc21800dd9cddc1a914ab6daa83f6a49fca069212c24e0f358fa947728b81021109403f4d2d6e49b448dd7b65381d472486a065c4a5f71772491d88b4939dec115cf6b6d567d512b0bd3302d6cbc97d32ab16b7cf72c8d9d4960b7105b27a7ae753c801f6eaa6df16f8487e8f9d7f9952add612a3c737a8d4ecdf9ab6769b40fb84109b321457e16f708a58e05ba43e0d056b00e201c8170bb42650674e74d0d6448d0d07836cdc12cc852c8954dbcdba58420cfab10ea6e1926c4c98a89bad003b89b1f7965a21b942a553eb378aeaf30d07916e535fdaeefe1de9cb137427f1cf933482ebb454cb997789766235f83f9a0828ad7740259c5db7b25f2d92e42387360f29f1efd7b2378817cb7361880895d04d488b64096247b630f5457c643de8ee9c5d37713d058333994ac9921ce6770c89b00e1008e922b5d00e09952a796b2986bd2afcf74e23268885034c2941b3f938848de8a68995333a09d871a99e9473389a4ac798f49dbd6ffa8ef43fb2e3430436796264dc159ab99930a663f5db583ca5258594813984aa2beb3eb2a27b6657365f01c6591a68e90ca087dc17c6450d3e29ab7c8cad08e19996604498e2cfcc04bd3b3d791a2a3304b6aa848cebc624f5f59da37f5ea680b41f2d482ec00bbd4202934cc49b5b41e1d192ffcda2680e4ce7f0bbc1d50a120bf3da4fbc8996b54ecd9e76b4248870548fc5a042808743a39f3927fc96901011a31bbdcaa5fd4ebb7cb14dd03c1e68bd5fa708840cb04faa79db7a9819d4f565ab5634e1ababd +Output = 532c2cac96cc2192174c50f2f9c4093e + +Len = 41904 +Msg = 190970ca7bd95d2b26b37ef95f58de291e71d4c512802884e417779ec048d9de125cc0f98dc7241e725cddce0fbe50ee86174d1bcf0c383d00f0675fcc37ccbe4a2ed41ff8ea8e66007e1065ba7217f27170ed3c6a3f905f22f61035d869396f4be872e5c529e52b5882e065685b7b5c6ae47cd1ea037711d3913ac9ebc5681c9df063f3fb6b6f9403ce15772163c654f6dbc181583f377b9a29acc30d33a0ebc6b06ff0a29a76ca88cc7742ee713e049fbd85f5bbdb16c6ff262fca469b2a04508e5d85c39d40f56fe3cd6fd66e2d92ecf290d41bbe5d1a8af08b869fe54e90c3f4f759655c153b417ae1a5e240d92665e2aac781d2539ec4ef88a01ffa54b7a549031590bf3fc785fb798d19d08be993f59b76f3fe427b348bedc0cfc084a080f54a604cae05bfc3cd5ece83068a02fd942a887c2a70d8632d848db5202674db6094e3a211ae4c8458581128ca209a2c2521a6213e26ded73b13b0db02815a3ff2a94599d083954e042ffe110593d9a6124677ec23acb51a1f63d0494fde7b3313502f3ad3ccc3ac39aa3c459d2ce6f5c162a4e4bf4a84b43f3c9606ed85ff3f2b53498c02d1fd235f9274cc7c33eaa09c3cd411fb48732b0566aa1ac6be0deba2783a9746d96c3ddeaf4daf88f00c30099eb07cc0edac09d8a8b38dc1d1cdc0e088ab63852d37811ec970f5abaa752c724edf2cf48354d51fcb5a67c50568454d4a43f9a916887788a884a6ccab4c1c3e150a2980509618449846b1bca406035188ab6098da84a8821332cbd339ba89d5bbd97c4d9d9859aed41f738df4ce8055088aa03cc1559b75d4226aa79de7fa9f08f32c42b18220c54a8fb3203ee946bf9389c27b1523d8cab1fb8e321ffaf704c4014146d67df6f1c13c7b5dc97fddf9f150cc3f1c15e8e773663c5b061c086cb6aac44352b1619a00ced22cdfb7cb69ea86c96f20545236e20a7e0a9c74b63fa797bc206e45eb28d0eec175c6b99a7946d3bef367079e1dc5905b27272b88e55f7031c572611c03f9444e20c7aed190cce1b5b339575506e59fdc9bf06807c6a6dc2c1aa62f7b93437784152abef9154555b596e06cfe580be0074c3f54b94a4483b30651d490417630683c371099727adac786a36d217bfdfae6235c1728da000ed174bd7be3735916047d36cd390e3016f26bc98347d7849681088ed8dcdca3258b49304afd92b5d25fc16e1c625132b13e2b9bd5f7d4675cdee41ebf5cbaf56feb6ef3696507520b81ee28269aa34754b3af618cb9da70f3079d54f530dabe95f8cb4e01a339f86a73eeac126c6c36a75adf63cf15516504041d78a2e0a6c63eba48883a408f6f963ca742095d14c8513aa3e8c794a10f36db4ad2edf484d5133aceeb3bc3737e38e4033233f703c5fb5be43a9bbd323632960eaafff5deb2bc7f43bd2db44ceff874e9c3b7c1a2f54cc6889f74186ca2a03d5047006b1b26e0919147379c81887df3403ebe43571fed8279607a2eb81a26d6f8f217dca3f927799ed182017c127069f2eb6f068b0d85979dc4d4867c676f6bedf36cd2def33b3e54a3366ea45478dee612f391a785bd0ede15aba921512103199228d434dbc1e899047a6861183e5b04fb716c11503dee2399261d10a0e5a76317736b0d7b6480573e76791b246ae734ee12203336ac3f539a6e6cb01c625eb3c9741dd199ca0d759753283a41a38b5e32fe3474feb20a585eaa1d688d4130f1f15475e8fe9b97db5839fd2637914e6a105c303b72f856192e03b9a2ba292505d73af8ba72802771c84f8148cedd3840d0549df258262b7e51a1c7c56cc346d8c34f30afbd20c31f31be3b06ce2f51c9ba10020079e4916f11abcf396bb79a50fdbba430a62576cdd9adb4c9fe2ea2eb15b5e7cd9dd891d4b44a5a657fac2956cca5dca3f6344563094572fa2783328f2b6ed4c18bad329583a5efb3704afcd37a35617275f83ac909aeffff11d6099e426152440d097d9bc6e5168a053a1aad4d95ba03eb165ce7210fe34284ce30fea3b6e8bee99578ccc531575207248bce8eea6fc02039b3a59990a4294813ae9996961f97e8f82d11c7b23b743faf581c845f0910dc0748ecb85bcc1e244e8b5562297e37d2daa453168f49567284888179190f5ae62822a2c895e388e227d01c51968d066fe5e478f8f10a616b4b23e4b3430908074549b10f696fcf484584d5a906d46d87bff569b60004fdf1ab322c7b037f810706c6ffd6fdfa5a1f51af68b3a0dcd2e110df0f97e3c193cb4cbc431981fa2dae12a07664790b932ef259bcb78d2c9e4681aa51e5c3c989c2d7c910d5e70274c312dffd03062be13fd18bbbfdf44c3a7eb95f16e6c7a2499ef4627bf75a1dbe10ad8c7bf9cce0ac18954d4cccfec50c51610648e418d639274a8d6cc604d5735b8caeda8ff2b55d82e7a5576ed21e7e8721a5ce25ddedc3248254cb8b0db1fb6d564d010da02f5a456f9dc5299adff7e7a04690f23f6d4e5f43bf808f9d39be0eb471d8bb00d80c29d43c7c467b91df3a87f0769266e0419e36d57417daf625054e2347e03737dbf6bf8a650c9fbb9d487dac684f79cd06aa039e8d6eef6f961ccb6a36c670d43073d79068c52ee59bd92b814e6fa1bd044b5122b4db022c7a19d44f8db3d1387169c5556eb74f9740b53977103b0537a348c86ad2a53cb63ac510d934f082ea08a130e15d2c2b5af4a34e9696fbcec34b6b117dcd15c4943ce8281013c5ac725be0c13d1f6aeab51f6d12e7c8f723e9647ad4638f73c34eea4ac3fc13797759d4f120709ab9b33129d92f718f762d32563eb825fe07606dabb28aa61a560a26d99bf482b863ae547bb04a3cd1c213258a7f66ca0418c478e6ea241511a28e61d4a5e57c5faf05a97bb90e517821fe4b6605865a88ef16f705b83b51e1a62a932cd89d6579e4ddb592be20b76adc162a5397bfde71d57f736fe5746370aa074349fcc145ed4b610228852b76913a824cbaffb95ca91027738c397952a8f64cf993d9fc25a32cb617a6d8d597d3856b3901031ddf17e8357fc47bf22670d1223d7236f30c83cf077c727dc6211a03f877926c936ca3a7d11f7f7586e8af85b1984edc5102757b7abaf63ca71c4dfe5290d301c20d359325dc25edde9f4f5820918f94bc0f6179375899df209154bca00c2e8c53c9b5f6563d1eaca253379398b19d24dc3c2f1267dec22cd88717860b710ad3eda90b168fcbd27a790c4f7d407ee0545b90c78b32d4dbed78067da3bb49cea039b3203cf60caa1e0bd37f604182c1eede14112fbfc34be8a716705dd71be4b9dff1daafb38a0c6201afaf82c245a6b810cef64537337ae60ec0d8fa8870b3e6866b22b9efcd610c03a9c72dec4ef87c96c85c14c1aad0ae550b9bc3f5cfa3f1d628e1a0d25b12e5b8c8afa7e72520001b0a2de586b2b50a2300a20047c01ca07930fdad83be85b5c9145038da52840d459a4f00aed291c020a5d5f9a5cb86bd148b60282b7e2444dd95902aed5d8e6abc82acad6093cc99f5041cf53879490e5242f059f12156599d5458c34acfa5e129ca2a34c47bce5d4a25603e2751cd5cd85b9787fe3182beb158914d163030383478b3dc0314ffd4c60e871a9bdc7b6e51e13bfc79361239c0a9210e7c06993884962eef45e6c8c512c97bd2bca0b90e63d9c6fe8bb66d937250f24fa2db47a9c22b82b3b1778ffad65e22adb127f002b64d1fd65c3bfb947154ea57b036a253954099717052bd39b9d366f5a3f98913f3442ecc134c240362bdf370cfa012fda6dc5a70a9fcbb4b63322ef0b99cea09c2c7db27d97250a9f094f4e027a0ff719d07adfa85fef0f87d8361e81c9a7daccadd0e31d533e74fc1e0d4f0dfbed17521c97a552ce1c307afcce923f37ba9c4b48eaf30301a51bb7da97de81f82f0d2da2ba9cac52d9e42a017adea67c5d51827e2a66d11acf6b6cdf7d6101175c550713423a17968e86ff96b9584a0026b71cce2db30a1733f0759d3c7afda1eb6b68eedce226f1c085761d1893bc5b9d2974b9537c107f69278c844380fa5052cced85c9395d0d068c2814f7155ff7372524b04a0676cbd58cfc253117698b3905ef88b5b41c30d6f7801f0351b75b7b36a7435ff6bf851fad5f1073a2ddbaf482f95820c6f715a854088b9bed5500dfda670323d15d239de52fa689c7c9781be0958488f67013f12e3beb4f2cbb7fdb8cfe40340ad23fd6e0e887e1daaf4b258b3e9e4cd719c447e2a4ce8ba44d3104cad7baef27b122611d04152a60119c980f7ef61add56af232dada5dff8acbcd2108db3d3ac7c83b2e61cdeb20c72f4e9d9b13c416da92d094be0f1ca7e3c8bd9fa8acb7ffd86dc42f8ad55171455dca1668fc17f2c93d670d9d942c9b98f2662f5597252bf728497b11018d83c3ccc45526526228ea923d063e1095c4f0705237d6438ea56c21537abef8a63c89a3c4c19dbfaba085badce56a2c6009356b0921f45afa557f8169945b63a486de0b52c294e9fc42e2dccc13e9909451ad0a11537781722378701431aee990480c2cf7c0d5785cf6492193f983e33986a276f4372762fcf79e15dbb98133716a592d3a232615d4a401b1bbfe00ce588f5ad63a33cba5a3b93a9946949ae84fd30e37a45450686a3453b3cc8927f8f7541e5369b12df26c519423dd2ac1b1326d7271bcb91b18288e874f4c04c10a21bd35150b1813ef61a7f4dc29e4c036231fcf040abb4ece169ae5afc5d696abdbb2e943a7d0464789a4a2ecb1285e1e29d16b1716c2b3313b41b4f8be676e842f1b8006c6418ea0ec2ee57afd5f62124d6b90d3693710ea9f693e55c01f113c24e04385efd3b2a3932e07ae96f295b996d684608a802ea04afbc9ec5266477cc2e97ae9aaee7cf7858d4eb10347bfbc0cf88fe50107d5fc45e09ee5fca4d7ec121e6d597ffab244ca3103abccc8a8c2b7bafb8a5733cca597fe056946418a331b6863fef75f1d346b046dc37adc1774a0040e79136bdd44483f45a0b9a528fae6ada6ff9985856d6fedd62294ead57acebf12d7bd19ce81618aa8b1dc3879e879d77c85eed4b297ded384f0a25cab7b49d14dcfdda46803e8c674c4376344a6decc2eb87db56b5bc1a0c0542d995e1f1a240886fc747373e8ddf203538c53db1d7603bfce8e79611f3bd276bc09b90f489f8a27a1f1b77866b66a94b71d6c303cbb45c369c8a550008c027fd71483f3db291dd85583fcbb6c39249feb7c584d45853aebd7ccb5d06c7b989706228372dcac07c19f9209e4014e674d7813dfd93fbb2c609f01718b6cf0dbe5d29b8235520f910c0786a79a2edd7dc5e548c87d3345614949cea32607d31492c2e748e4453a03de15c79e85faceac30ba85dde0280b22cf5d9d114c460c8cc55f6e9d26bd14a56252bdb64e6d093db68031e4ab26f4b61a64d584a32f8388a72f9949a3c387bebd45d0b69d8f77787ebeb3a68536ea6751e6ddc4d3cd215360bcce13045e7b981a7769681969fea4b1fc75eb175ed57b9d691f998525cc34178e76c5f197d6799f6eee926b02870a76c3de7a08a89b3b257702cb61416d72f52bfa25117581aa74b4c9fd3b62fbf3f699561d011c25ef1297ee210e28ed56211dc0fc0d006473c2d16071309240a55909459aaac15bdf8b524b6535e23228c3ec32118c40671bb14b1db6f2994069c69813baaa9f2552b92e825d7d782630051eb72e373e73ec68ac67932a7fe18665d02945aabe6c92c3b5f9d28ff1b0b50d3db619b6016e2c107ba5d1804d0d465f38ed03512716e5d26f198b1255b70103d1999bb0914224d04141389b0aabefdc58c8bc48e10d940ee34a52afac255a1060c77ccef7d51cd185a29024bea3ca03b9233736f437e69e99f5ed0effe1095c74a884b73a115c3acf30a1c271dd1ffde2643dc4697e25ab198025d655d3550e94a47b1362dc2b34a853331e2c4036f25bf5969a47c9975cec55c2afb7e3884e4923288c7820d3e796730ddff6b65609ad3c0a5f96ff86da99da8c432cf9e946198d54c882c49a7a23f8f8aed827c86a5fa361bb5e0a384ca8794b37bcfdbf1b8f4ac76f8bb0c916d74abc33d979d53ef9906258a8d1f6dba199c6366fd753f830c2492a98cca7e239d121150195c3ad046dd6db7b3c07af0da1c6e64e6fed03865ea2a1b3007e07d1f6effd5863dade07a185efe033b5ef74fb13ef60add4641884997be33494ac271fed92e7cb64fa8a94373ade9e46c45c0e75faae7a52446e9df860315033fac4b6e47db5b6a72815aeb4647d6503554f42b4af3ebcadcb111285faa33ca1192f219c65ca0aec913157c316c57134cbd4ff97b51a5d2e20884909ee44e02630f0caddf32fb17b5c65f72ef8bfa8214d74ade7b54a431d6c5bac4be719240c6790176fcfeb919cb23af6bbb172f31104b5b46c56d458c2d613a2158b2cf199e7967219a0069497bb37bc33eae73b4e17227dee41c282648737922d82842d17d88a42a40e89a1b39ee4b15d4a24661eaf406e351d1cab4da64fe65c7529c2cc62f5eed9c37b9f3a84c93e037a335dcaf499f00893e8bac35ce3056a0c249601ab5de07d64e47872946fc9eb211c09990db46c314b30970fd17c571fee7c93fdde4d7f5b9ccd13a4f75dbcdee8e551d523194876ecfb2a792ca14443c439a00a214a333a103d5817d41b7da477981cc45d51eea01f525b4896db349d3564a46e9cde64e16b3c2f1554327605753c54b0e4e3c4778b3c12c636b18ff6ea03897279907a1953d280e49f290dc98adae0dfdf5734c2d9c1373935abbd168a21365edde8ddaa700833cddc88acb75f79a89a7736a44bb0e9b2eaba5126c5bec3937af26ff65c6ce5301834d8ba999c219428d4067ed8b9bd6b21ee2c33cb2ef3880de0ac2bf7ec715f0dce9f9f35e9da8cd31d5229329b444a26f8c34aef81b8fd61cf28e5429bb5a9f4d368c253ecad78e17b9f0d21ff863840019ed5fa601bdabce6698d061eb8f4146ab88dbd50a1409b1577926c8d8c1bb831463ab5722207674df9890b20832ab6bc19673abbbfcc49146120ddec5dddd6af42e3e560d76caa2d604319471c3122f012b891d60e04339fe61f3ac50164e2a41a3655d142f2ccae2421f83b8df3a02f2ce98b4896d1a0df8cf74cbf819a2437579dcc6e6a7f17f7cf8d6fa5de5678a1ed60f0b95f19dafbde10db83e465e491807f11df57fcd131e9ee482d1544f16ddf8688d372c6271c61d3afb832af69d91d43edcb11524383f8ac497a3ca454bc8ac31a3bd6bed06a9fa68f07745ffc38b75328daa167b516862f3b355a5de9b57580709c93eb1c0c1ff24418b15de5d6d5168ab50e256f111adee5057859f8812823509cb233552b69209792f1916cdafff4db046073 +Output = e3a3c929d0ab5ff911d9d30a690837a9 + +Len = 43256 +Msg = 147a080a2fb010342c885634f31d1e9200cae030b5344075f58a40abee0bb5a636c9f8a71aaddd8033bce9f83a98bf701c4adcc7513e847c6a8ffc12ea86fab9575d5a2a914812d362b6683455d36389cc527fa94d6ba42e1d1f59d610c336299fbc975c3b889876e1fe3db1efd6f023366b319d50c089d433c1bfbe07cc4f3f35701805c17555b1d91cce37aea75087821c5a6d024719b5d7fe969478a92f43420144edca1732cb7298858e3a5069fdd9ee62df0d073d1b2f5d471e0a60bc7dedf582dbff77170ed3fbc97d3cd925cc6368b1bc1608de4c6366382566fbe0345fd63c99079cedc025cd01cd5c486a3e4712afcbc853e2919ca1d270338181b2bf2bd9ed8c8e9a2a8f94974641a72299ae74c5d6c8ef333202977dc91afb893d367dc1a0335608943adaf2b094fd3426bf1759a3c1e4b777bccfa2f6c370df1eec535b7aa6fb1d454d267ad3fc53882da382d5fc593b58a8f3d1a7c0d5e86b9d083511428d85c387f101977722b006f6813d9fa738fbfc0cce26f6eff96c1501b3ab4ac28ffde1a04ef2b163ad1c96c882d1216c072c8dec7655f54bd602c594143e6fc0556a5fd98b81306046a020edcec5c1156ed6f29012e60e9b15b5639c5475e60587d4247ad1367c3695428cab8ca1e96814021340cb62a8a95d8ad7629ad91859cc431acb479afdad410cc24be4ee002fa2b8d844c9502a3b578b092e0ff16d83ccc0281416341c8cf306aa14ff326e30bffe29e33338fe1aaabfe248da454e4d3052369c658c3f9d52372d5005f89a3414deee6731a28b0eff2e48f7255d217da0022dac5d2bd0a607a731451ec5ee02495f0f16ed1739dffee1248415c24fdcc3d7f38c26983570b95e9f3d7023d164058974398c1e70544edf5f37d4fb413242d97184e75bd8c31165607e2699ab20f0650617394098369830df588a905e47c4108fdcc8fd1f67b7c35a5066b0e5ffb3faabfa1a04194d83dd8e2f5e090de2f28536dbf2057423528077fd58eee5c9f6514c2857f25c61b8ed530479efb8cd743f4cca8dfb3ec08aa59ecc26de14466070d2ea1992c73ade68151e03cac6cef146baf1c068e4070938b704f505da3d9a612388886dc39f9e57bec623209fae12a36998b4d3d0bd7444a9eef0eda0784c2c294acb0ab95aa0c13544017bab347e5d400791c469ad76ce5ed23c1dccbd1dd7ca780bf10f318bae62e0c662512add7c26857ec3179eb5e0bdf8041dc8d5b56cf0596fab2fed08262de29a5efc56d909055ca3594257d981aea76e76fa88bdf2823620bf7f56be327e91a4f61182180ac4d2290d52a18bba1928a2afcc9ddd72685745b5693356d93d360db2f974428a4b303868af447392e6c4c950a5debcf38a040716534e77245219fc1a1cf5008e82bef7f1c2083811fec00be1ec11037dd0858e69a76dca19a5829ab7e2ccfa2051c38f30f1b5823f47678feb0bff591822210136cc59f6c31fb90f10b4c3d747a08928ada512fb25aa007ef6697067cd682288062adaa427a60582adf8a03f0c5756e8f147e849ca0fd2ff886e2cd5a38ace4d5f29b77c4f23b01b17182cdc755e73fa833dff14365f263b2b82fa4aa3706e75cc31ba25427f0004d57a2f538d9d2884ebf11f057280445a660da36ed402492bd2aaa94808a03e626f88714f59fcbcafb2c910c3855c7483c177f0ea3e29a995fbfc4d8caa70b1606ea8b976e36479a25f2f99f777dafedec528a666e9cbd4dbce8f6e9a2fd6a3235944d07032bba5867a8a844951e12994f9899089ded11326d3ccd4199fb95ad6b8c37fe64eeb89828b4297601a5b3fcde60075fc2424ae9e931946b202031f9f148d8c8040da6dbf1bbf9be5da2f86b012f61c67c3aaed6a95df8d0d619b3aa6f30abfe50f729864b168577f9945476607d44e70c44d18b3618771d1c369f314e0a2e2bec399549ad6a795d76085c9164d00d3c22ef476a08077baa73155921160bdbbb26539e78911e31b9536d756e96ae473030987505a79193036b2475ec4fdc3146afb399a58ea85b26024233407e8e6f6dc5dedee08d4d49b274e27a0563e1cb38d9081b530e9f322e03151ac974f7023f4331098d31a0fc2210ddda1efab3060c429f98038979633be654906c225e9c3f492d796e3d2346ecdf851a6b5cd67e5b7d08943997bd6ada2c8f38aaff4b99e83832a2f5f84aa67d2166cfad32b2a090d8c19457a1e1c57336337808743477c4a0df1ad6fb9d975da7014e46f4edf936f6691cf0406cefa1a3dfe2f719bfd25f03814563df729608a0c32abb2bcf04c8464d9295ebd565eff5e2ee0968342601e0c7c73eec902ef8cf4af98c3ffc3fcf591d99bb2cb1a4b88cfb1db1d837ef77c920f4badb4ccec883071f3ca9fc26b69f27a6d25b6848960976d682f231ab0b1d1b628a042ef1d25c66204f12253608991a2e6e108fadf2dbe4ccff4ec7c5466d15a50effad34a0cc069125e12e0a4fd753a4f0e48e617984d355793650dab429be10cc364e03de5256d6739f6d0006ca62bf0d3ffaff7484b0f493517357cee3635a444097fbd57fe5849ab578b397e2d5b1159b4bd48e6c0c4ed01885d9111aa3c60997016910a521101dcbc791adc11b4fac8ef78d119b53b8b2042ebb05400e088eb220f82a72980d6f3ad026a2e5a1df34739485c8a305c6bb9cd49a25f3f076361a5d058d68c8d1218b28ef01b107d43fe1895afe03c0fd5f5afdd2ed96f9b3a2483c3db3e8120fb755485754c3cbe331616c794c4de3c10fc72111e6b9983555b434ed2881321db2f1a4fc169e6c70bb7bb46d0de20cb65f59d4c39bcc4a7fc2f6edb075b4778f8718d549c19148013088e7a2ed509a41c08b9f54675f8ef77c88bd14060270d9b6133fcce04d0d1923217cc7552a1b07d5f4d760e3d3d430d4d2298463fbac80b2797b01ed321a2d25cdea26cfcf1d5cf1fe13659bd9c8b08e6bc98e19f089292ec3ed6562e10db19af6c65dd7c00fc5c73fe9dee9c1cafaebde038d8281a5176d8b2d83cbca364b053487e8e79d70e6a812b139783c69748f716e3f583f7ef00127a1c9926e425df6ffa53479c7cf14271f0001a1aa02c1dbfe6fefe58a75278c31e0c3413db07ed2c0b4ed28df98f2c6cd5cc4008b554773bd9f2bc4e33642612260ed72c8ff024b102d6f6f356ce6f9a63dfd1f60af89c937627f70ea20b51281b8c481908c9ca2767527a769998552221a2958ba901d5f045057740fc31432c85ed50814e7b28b5c32c27bfccd4242c977b547099556a7acff5038b4abd4247ea99b70d6aed86849ccbc576f66a25e24ed3d54ce2dea3589b5d6597939797a1d4f8456463062cbb7d971c432041a06acd13e1c88d82c8b332a6630ddfa78a61ca72c22e41b06183ebf8f3cc5143ddec9ca1408ca02b20b21a39c69536d562b0556ff5150cd26e04705613bc9157239144e7ba3f26c0f47edd7c55d6a10969b5fc57a7bfcd539b65931945b9e865bc804c4b168924298c3e02d9da79272be5994792a0d48c1d30cfdda94f6b5f56eee23c371e14a44e301b12b71b25d1231f83be88a8fd4f177569d46ff97cfd1002df9d129885ad17283d947ee283a6d95f9ceaa187e22029b25c02d10d91cb7c409ef6444d87486cbbcb1095f53bae35ed0b5246042a063b2ecfef385155cf82ef48cf3505c07c3533ed0f661cf4f12010f97edde97d0a3532eb210d8f6d130b5804b04d88d8515ad6cd185821567880118ef7d0fc8532ff06d722b68d849ffdc4fb22f49d78cfc3ed90b3d3cb0b4a3f38f1448506e78882f2bc7a9d144079427955ac920e48ff58bf61683fe1b86f43cd4bed66ce4e14a43ec2af28eb49abc0c039d78fa1efe8029666c0052c08f07618c37bd91e60dd4e31104bc1dc483d61e0cf2a531f1692a7b8c7428b74a0d4be61827548bcc5eb6914cfd6cfade5350b23402d464f6406306ead773a802b2305efb0631a712646db2f26d6ba27c79da8cfb468d0fb824b860040e57a1a4fe5320b74cdb7052bf78eca3ed5e912977c1f2d52645ae917698fb6a716b408b4232dfdf63c87407b05682d3f5ac636fcdb588543a84ae2cc6935d80b924e1303e5de0d5f38f2eabf7853a050eeb85a9fc13b1fafbc0aae49525fad93dfb203e4312d83d74760ca9e58366a991827482736b042bd290015352cf57e688746a0fe1102a685f339a9c1aef8d443607bc63d439f37957696df3800de93b11274b2fa8c45bf92c3e54fcf818326764e1d9d89eef047602b33d3fbd504349706a3007faade16253fcc8471dabea8596b7395b2418bb746d13ebb26b34ea942ed3a533674b5f367f056104fc091a1153ee675614458d26eef215d61a2a439d94ea373c7f1b29e805decba103be45bd14fdf073dfe40df010d438152abee2e84b24528d92abe5e970ff44b5d539f1cb627c411ef77292526b30cf1a4d514ce6da0883a1425bf7dd48cd88cdd11ab2dec4dfe5c1eb7fded066ae474fd29ff62b9a0d47022ec9f41605efe42397ceed69a49f6b073c7a27fc8b933d106ad9531933a9193a88744f3630cd038189d515ee9a413d496ae0223962961d1666bbf8521f7276b51fc98da041fb435237abc0f00e5bc922e7403219541d63cc56b66a48b5effc0c25581406c1e1400021d182f08945bb0e3228fc0ef89fbdacdb470d7faf87f5aa69ae96bc39157625c8e4b07283a57f75fbe8d4acc893672244dc766964b1001a3d1b7a43001e523d9d33fdf895e182f4753e40553caf0ce7241519986e11b7c6104d333dbf5260b22f6daff5288062046e67e3aadd392b46095f8b8f3420694893a2460edf582e1dfff06aeac40899102814230012c82ed9553a20a04f43a11c37c94738e89616fb7f4aa35bf0f094c232b1831785e2a41ba8339d8e28120bbb6d10ab3e53a2b7b53dfaedcb27cee1752ede8833af0f177772ba46ab4711f590b416f6a1b8f48ce5bc7f9ebad10a0bb37ce9a6f6e6a3e597355cb08a34a9eb56ad4a9de5711203076b575aada51870079d6173d3d557bad570896fad79607957993a157c2461b694cb009615fc90badc00d4535ce370f3cca4ded8777dcc1c2e3853f1f84b8a24086c09d576400958cb67c0d9f4a9b62ce752bb8f9aba534044eb26c7dc4ef1b7ecced1ad5127d8b63012a57c2d806dc2b00aadf969d78c82263230eb8aa72f0ebc540662390c857fb491f0ce7a102e51a12d24aa772dde5e6c9df0e1960c9874f1ac06a8907695f1c37641256cc16e56453ace273555cf31628ee55e80b7c4a7273760e4f9fe80d8d7200535782cb44d16d3f8d446c7e5a7b2a59ca6dd6139f1c76683bbc7fcec818a3fbb632eba76a2905933460dfca82dd752754efe717f014cea0d719d0a3f783725e222e2e34bf34c6b1c010d7c9d404b160ddb86610a4232126cbaeb9ed04978630819474faacba55a0179c7c01b6b7870d4c0e7c842311180000c36336561c8879baace48097825d68234cf5fc91c09e35893a51fdd5a65a385da0f60555da1f41b5bea74ee9558412ca686b42cee5a0e07b830c0222a990d6c98d99e36999f4915a12e4ec0bfb72a5f6370559d3ef32160c33d51c72e461e02ed17457fa20af7091f0c4e3633cd0298e02eccb0aa5fee02391d6d12d1d766073b5b0e97038f7e7429f6fb95be046a77a114720d9d1ac45a8e434acbb1d765d8081752133a974fd55680cf95aae7b25a2ac3fdeaa39e44e84751a3284ac0ae03d7dea88ab3bcfbab293c328c76f18aeee1bfc8fe4a64d029d8caeedf191daf092f038a541b5b0264168bed00cebc44746a5a5baefe18f69dc70186468968d95672486005be1be4aeb2e227890ea28fa929462e833af538b296b811f5281cbd7a45ffd226385a22d962f1aa9bb34ecceba2e5da018db41716dc311a7181b3ebf31eac592bf6a04d72bb1cbeaf590b7cca6bcbb6a062b00228ec1ef83202c8c54f60d05d8d9588a5193fd60c3a6c831fa3e85a7ce656939a676ad443bd47c5d9fdb0fe67d1717dfa2b45bffbc36a203626bd347559d5b93060bcf37589bd25aa6c93a8f08e36ea9d27812d15e0ee7d50c13ecc38616cab749376ef161dcf82a73a6d42801a42691eac66cfd30945f4efe1f1944ea387d4c77e1d499de01b4760e5c26dbf1c1073ef185afabbb31d1174278a2f2076c3efb99f147585771cfe67dd178ce5fa4d959ef9f2405854d06d8e004cff46818d36cb54e105655941121caef1229d3b46489edfb13301851c738deade87392a60546d6e277ba5fd241d0fd9c3b15d5597077f181c457fca3dadf465a34960f7c9c310194c3adfe93299a1cc23cbaeefbc4ca06197ea0b7ad077620f3fc86650460d7404c3e56b93f8f2831485d3fa502292b31ab8b33d3d618a5725f886a1fa419dd9af22ede183e3c214316e6cc83d767427c1f3139d885d3134688206bc2c68eee186fdc6ca3f8f82e5b141f8b0fe046b6ee5db9da4c240269a3550cb1d8d188b0c0a99029e3d68af7802a50a2d1868e308f4e6b3db91a6b4e92ae9363e92dcfcb9c89923c5f3ebc23ba40c0395131065768d88e8ba6cfd76b197bffa97b412be8b4f729ce9f99545b113eb879184a77d480e46ceb9cab0d6843a496ac187764af0edc9e072c501b468e0c8089ad37a94ee05b4b862216d7ec1512a194473641c7b41e390e8dc9d98d389260929862646e8e237484c078fb9f99ab678991e78bd9aea7420c4a6e56d718b9a0bc623170dc94262f0cfe39422ad65832b27cf00a8c025d0128eca659cd3467872e920e943ffa4ac34665c17435d402483792ba8689ba2abe8bfad8ac1796855e11b060993fc6797a5b7c7859679c8ff2415badc777def5c05cfc6e155c46fc6d8c448f4885029a9a73cbc7b86935e978f85e3194ff74a650c47bcf5d444ab2fcc8d70367b9b5956cb5db145be2a7f6228323afb7c98624b6ebfe634c79ac9153edf023be83e852384a33c8087bfba0380a328df67c1b593af80d92a9a07480ba2218591789a2b8465a5c4c88dc38cd01b714351ac03c2c241430c43e64a866788fd60d3876ebb1dd0cdc07a3ac6667c6b0500deb3ff085bb66f061d16a522dd65db2a5eaf0cb2546883d6020948e55cf1d6e7f309e3f4c4817d4d12b5d79bc1cb4348af59f4bfacaf706c1c93bb67f6427f6f2b3883169134e657c14e326fb92bbe524212d7219af81c091644ae9cdcdf671ce3aa3cfc5643429cb53a460d27f9b4cdb363f496a3d4df237ba682c2751b1677a8e97204683f1aa24b24a2f292d7bf218fb80d6d5be84241d933e89753a805e60770d2cd5b7ac70f0f77a9be8e2845d4139952343784ddfaab773079fce8ce0e7bcadfc5b4a8d0198ebdeadf7e7de17c0b829389ab4d1a946edb0ae8d56fd7477271e97be82bde782561e6c3e84b0a8fb40e21bc4ba370d59fe9d872819fba3787e0905e8a864aa1800e2e1a60022965c9968d6a7d2a8904bb3e1995661adf3528a154fbf03a9d0c1b0d11215a55e6b498a64712d444cbc85d225ed00743bee6e13eb7c2dddb5e3e430930974b989ae2cdd7ef23d574a186d2310890f9bce1c32e13294197cb06beb46d1ceac85cee86c585d63be55cb2c6c704b77691e8e0407bb93a06a +Output = e59bf25055ddac5a6b2ca13438459d89 + +Len = 44608 +Msg = 511ce7aed3294643438955c9d1be5dfc9c78202319665f89b94c9f31c6562dc68eac60d1c4461e2f2302a1c154f37b6512fcd8258c9e04af0b0f2d05d48c697650effbcd6a84d2c8391952ccdf5457d6b14a77b5984c8877b60462214dc2e6a3dd10400a8d8c68f8ccf7ef513889f838bf87853a0418f4c80455c9ebf99fad337f35b7f1f505eba526c300ba2839677185de881c99a94f8c3b27e7cca0ccc5107b87e9e8699860b98da60e6e770caa6b4b750ac21fa8a1aaa4a5462d09f036201c2d5d58b3edd11b4ac8a0d5edaccb0c597492965ebcf20a87f46d74fdb4094da94f9baa99ab45b3a5503e5752bed13ef604a9ff1d8e4b942c3fe40b44c0457d69172c44e47bc569e566705c6dedc5e86b4dd56526c6b330daac3458a6bbf29aa5ab97905c0458255434bf4c07deaef20176a1303f0b33c6db63e4c5eb4d198ba63364f4c8ef06cf38dfb28fe83c9443fda792c93105d23e758d7cb8da1fc138b1d81cdaf1e3d74fda92d28dd8ad80c5aa0a3296c35d9880f152849b3cd9f28911c146a9a089d48d8273a5af9fd9785f4fc40800bfbb8d7497d985d5d923b4660c186ac99b89047278aab55b046a87f933009c70ebc6ba03ae4b07ce79a310b7ec0210a2aa8a70e403608afad105b27c9fe4774c1127261380cf90eee4040d64f7a9c19c97341ecc6cbdaaf5cc5403cedb9820fdf786d98d538eaa9de1ecb4557635041f29301813fce89fb2beff81d82f451fec6689dc5a70b0dc433a040c73b0ce62932726669ff80af19b6eae3482e313fd8025db36601f5cae48b5f31da4ef9a62605abd0e5aab4a2617a60825b53e294120fe22ef89a7baa9141b61efd179c48cee8a9e1a2b5cd1c88d2cb55b5789b07336b70710bc52f3540f33f88be3987268a57e7191f952c65f67c95ede510dcf1c291931a0e1662f38a2c75df8c091cd7fee00dd7caed652710c45abb78c0fafc361ec49a7df2c95db339d3b3e52affc582fd68ae231309d88e46843edefda77f046f8f62ea0ec4ec72c7f38667f39277bd1c921cb6aa8ce2b57facf8861b5502b4004e13b0bee8184f333fc76317678713da14a4041860ee3cdc2f691cce762fdb7dab1d908795798f28130794faf15c1da26ac479e118436ae89610f17b9d4ed13400f0d7fd6f88d8f337c74c12d26f30f20f0eb699259ae6217b70a2a73cf84bcffa3e1584e8beb340f87716f35d4904656bd318a51b4d35134a18bed5d7a481adf145c7b27393848dffa774112461fe691bc23e996be2ce4a8c79848befec395a70b86d1a929fe33697c8f1f0aa628579995c86fa99e41813ad03c23e0827d96212f68401e84c45c76b6c0f16719330036ef2802d17d9a92b4657c66092ffd83132909b1cc71132dcd50129f6fc9c94b30724c8b5883c07ddc2d62f9822dcbc646a0720dfc19720d38f18d116bde719f4ec73bf384d73aac7bd1f5c493a36fc5823da93af7a369647d413a2fa280b4645996fd209ea2908558f83daf83b971ea8ea8b8220238809b65ea20e25ed519031a869bfced0b4b723d4b43a39c995a9c3488a6ab68004018b8914710e50828e256401c6ebb3bf2d9f0710e862468b2423a857cbf6f2230443ee1b8a2813f696ad86c885d4e5a0d243a13a6426451ff466948414561c7d987be7f7a8177a2650367b1e8b3f08f24bae3d914bda47acb0f8979fd258416c14a02169593125ba316cab74357e602c003b36a5fe12c0b9d0562c0b947213872f3d04c12c2998fab09ca27a1317bdc6867726f8f94432dfe90bbc37c937f5474ecf1c9f8f5536906462fa90a29f645a54ee78fadc0320775185e2d4ef1e8934d9b2d364f14890e3b33c1e487279e64fe20db73c04c42c38a0511a43749a21d876a4b3b200684a9d23a47811f13bd62fb4516c3d020b886c5bf9dd04083f619a9c0157f72b5896054c28b27dbd5996624266026e624df7bafaeca5b70872caf3c0451ab4d08e35b4832537fc1557a99022981440840fec7cf3b5fead03d8c09c7a0c866b9e7d8c336f46831dc7caa231cb740c6415c5c95adcc2628668d5e4cd2fb4259bf3ab2c0a66f92e43130702bfa3966549660420bd2cbe5ba3c60e9a3e67d872c66e9b779210b9840ca5a13d92515bb951134f851c59e654b5a9c76348a8e5e86b7dd30172e3044efaee3dc5624b50732b9c0c6900eaf6e81c62b4d274696900fb8fc64c156465c96e5b113ca7f7f12d296edf4f03664c8048af3b6a5a2fde670732f9da020b5a9e078ae005dbfdda41eb1a1c998c4273a7daedef9d6272b2551f05f21dc14e6f3726ec0ea356b3684be11c58eb1405f8d9438d35de15c89185936723a9cba3f02f7cfd11b7d0bf17b59be428c62337389f032b92beec97d86314d522d089b299d15a3c8d95b28785197c1fe08d424cdf63aa37aac27f77036813de5454a3e0d8e74f38d6df74932ce2221e34d2e9bd49c1994fd25b26dcbf1f00e15c9872b519bbdc6081f7af687b99fe6d8a29920f043360c2ae1b7b3f47f26c9c800eaeb5f8d982521360cb7dfdcb919c44e3d3c89b23813e9275f5255a8cc76e83398059d2bac17c0fcd415a2fd16c1919a417607b2c8b1223ed1d154348a1b5cabbc01753fa2a4cdb7fb9738e55ee626cece57d30b8eefbd6f36b85bea07c20cad7c684e8f21d430b0a8c60a5c3a906b320b66538531d4a202b690d193ec72e08400c18fe5d2b0d12f04287e2a52c8480d212bf0e75a69ba3f78e01ef7e034c0777194a2075d3f987b3747fd164d95a5a9372e12fbb0b5eb6da530a9de8c0f94cdf76aeebd698a6ede68abf0e9d3006a4c76f82287dcc01ed66409dc10970b44cfb9c9dbd19e97399ec0dabd6b8e107f3f0610865485923cc0def11e54aa30b8c5e03cd109a670e304665ece6423cdccca0efea82a54342b743b72d8746d87d9f79348382f261d525882bf899c3d3f3a34b64befd1f1add53aa214703687178dacfb777809c9a470e23e8358db826fafc7287ec210030520593b5e4f63a1e8bd2d4050f960340f23e9c034a2e89a6414c9891f8bb03244f61b2fd8ddc3620352c3895b24fb126655b73059ce8c2e26528304b6b17a28733ec6a60a821d736f32b4fe215fa409afed92b77b468fe6be4f3dbecc9c338a9ae0a3c77da73a7b344748c9291321c1f4d3c37d2171b96933f53fe2e8b3a603bfc3fabbb8b2e3235b77c90ffba93be43cef92a9d3b7d1608d2bd09693609a39ecd113aa430dde13ebac7dfb2087ba17902946631a80a172d5d83902540bd6d428f135bba71ef3f2eccdaeb21f176604f76929d57c34ef4812e6c350b31a237d7c0baa166b4fec6967c2a25f80c0075379978124833b84894c3cb3a538f649dcee08b8e41707901f6273a128cce964ac1e9b977bb7fe28de8bc2542c6c07109889cea84d34ada6bde8c8f5358afc46b5ef5db3009fe3a2efd860ed0ad6b540595246c27849abf7eafea9e5af42607519f3c51ddbc353bc633afec56aff69a0c953584d8ede684b4faefeb8be7d7db97e32bc1c35abb73ce3ba8425726d89f98e93ed93b67b4c6993ffafb789c1bbda8db528f936e075eb165fda554aaa7f13501aebda19a9bf1b5ffaa42a3999829fed83f3fd05e9f791a531e99d1b3eb1b6b8f13c6bdeef29275ba5c559f58a3ad146a4036dcb4ea3f6373897450daf89aa6d1fc68e2ed6f2562e0afb8be61e4b3842214294af98e3e1757dcd9447876db618ac738a31e5827081312c0934dc1d9c870196b9da4e1e1c060774d3f24dc7a461a129a90ea4423dfb20411c064c18c5bd4ce92373f8bb6d94de724b358afe3aef05d231ee9b988545e1230a84f7a57b8d0b221ba31e249dc40bb14139c57a416be0556bf853ed0f067cb81bd8642a859f4529e99249c074409517002586a3807c3a9a9f5553aaa4e7f7ea99271b11ac9a02e6d56700f7b9b0848ecf2256e1c1cb1c89152c23350c905ca0ca9ca5c0b8264a41274bcc3136bbe1fdf558bb9cca008d0a14a64cf80fa8b3c2f85c89a171ec2622266534d6b10ab34bbbee3f3c64c29605e5eb555974d8023769924f1a9e949d711bdec04ef3450262690d6a2957b93e62d122c6c205c753e96564809509c6b8164eddf802c413d62947dcc3cb6b8e8d091e74289a881dadbf36faa37978297ef9078b6558eb1c38889c84d28b68e98be214080149c68419a1237d402eb465f7028e0f8eb932092f67b22c1fcf157141d6fd07dc3787a29d777315e01c85232b1a2a92fb8e5f82c4aecffd33003bcfb6cb1f983ecc931f44296fe90aabb20b2327253c353d3b2efe453c1f9587a2abf2aac4e4b170b1a413a05f22464305c4e612c534c3308eb6e51541b9cdca12abfe5c3212bc8babd914c28be71c4c44f77cc453a32dcd20c1810425f36433537ae1c8b14be88547654e783a61152e384bee2416b0fc7eb8f8dbfb32f6e1292cbea3d58bb7bbc64ef1c9abb5b8b851a96943195884b7aa2003fae3aeeacc1367204d6d067dbfb687248e4145138d1d5ff8838d5f46e6b81e89e6a2e2f7ae5bca47e6776cc67cbdbca7a424309a1dfb21a1b667751f12127b32a82216430d681edc76da03b97944b321133abe77ef51b80ce58fe037c21ffea8474992f974a22a860680147f3eb1353be46d39cf8c88ede018ece8b57e477190cb019d3f6871b8ee9c50e63f536e0a9d1ea3e7cd7a0986c55568d7c2cef29a953d31803d733d8ebb4332c32241e1faeec9c61296433b4b65a6eaf3853b88435da4c1841d1c6e7596000ef1508f74cdd6eebd00556e850665125b86274c7132900898ee04eb6c3527ddccb9f0c58e4aff9370f93084517d70a1a1d6cf8a1630d771a0091c69a09615e155632a6b963b0ec3c7474f0c06792c5ca52ca67bdd04dae8c01c8d1d706009148f37280af666ae83aa31db8e0bc2414a4fcfd4a92f784074e06e7f90455aaa7f637d0f29159385dd01fefc93ca2058748809809c7552b11ee8481948884ea129b97c0a515b8c3bd8b4f7d9a2aa5b19e03620d2da155bd7edc1f283cf9f02951b7a7d3e093018797cab649b43133a2b98425df3ed795b57e951b4e6adf43e2f5b8cc8d6d9fcfee7d2cf8d69fe6d8737a495080b5d071adc1a81d66a68edcc17f3d9a5f84927072ce106b96c5c2108e40a166941b0295f0c893a9f368af473f4ea485ccde219fbf0b23931cce49586dbd4acc7be7046f38f3d6259739b70fa6e49c0347c2b3ba2dd4b513eb01f32c8c30a416caa24c59f0e3ee24a4821c92a2e172b762dadf3c399b634264093609845b2bc9e2c5510293195a3badea666cbdc5c706b0aeeaa28ccfbcc31a6ca88bc09d604a66c8a8e599f498cf35cb1b1a5202177583878c9971f20ffa9074c10fdb67d03cc934ba7f90162843cebcb117fa06d2888e2d3b6d9392fb7d48e9f6223f4b0a057c921c3cffee975dcb37aee2207486b422e85dbb6c42fdbfc604de4f66d76c39135924aa53fe5461cdb49b157fbba28cd44189ff565295367a8de003ec6d754c00028a4416b5edf448cbdc0e424cc47724d146960c624075d8cd81dc2aadb3c2d516b3a6b2b5c289ced6084912c85b07971ffa3bd8f28df2834c5a24bbf8b612051e272ed27e8096b27b96528b8ee4b2ad763b4d5683ec30fc92cf9a1adeeace02815b58e06096afb6150cc6f730d01cca8c70470f76c9b597396898c1d0c05b7fd8c6c1571c83392c4ae1f3002ecb8a90bb4fb56e7bc4f4f598abad4b7ee55ebf8d0fd4b0f2b4c79785ac7311093590729b1014ede36c739a490f440229b82c54368d2f8893d9df8a4dc2d3b4308cd2f2a467e2184e1eb5f7b309f99071b768d03dc51e486030e5670bdb8154355fa6935fbda9783c5a40807f323a70d77178b63b5e4d6af8788dd0584cf89b982cafd72597d7880ead87d7060e932ddb64f07897af297acd0f1d38bb9dc5d4d9524320ae7cf8c26597007dd0057021ee005489db3e3f024e6338129e5465aa698ef51252d399b1a1955ec7659d6de79fe2197c8e81ea6bfd2342f088f75486d9215a2eab4216c07326d7465f5cf9096178a3c31a20d84269bde25503fd1ef498c7d6d8203f0c893ada2e9cf5ca8de1c332a7f02681751014917aa287dc216e38d0ffa15a30f776691db91df14cb91b45ae8a760c3a4d4f7e5c907b8d2b087e29db390ca1ae44129e600b6baa79e710595acfe753a1cd6b175db8529c50308efc45179c9f2d9ee84b4f89e8b9d8b45b8eb5eca6955e81fd704356aa3df2362b20bd1fb3bb255451e04ad91787cf8d77465e754649c6e771097bffe4da6785dd2791b5f48e3c00fa0dd06d9a9ce4fede20a2de48d9817a60438618b50a46bc0f81718ed170c8114b148ebbd471af750a9e219c20cd04b735cee0357d4616255cbecaeecd1b5021cfa4c44847ae958c872f593350acc73a8c0c28dab0064c6e2f400c6a69d67aaef23f1f97769c2da1ce54c8486af15f50bd7bae7cffc3500301a5b4961a4a8e154d33ff3de3d2de516a9eed2fe22323b654ae1f90bf15c7607e6061d660d030f15b23f18011db2e17c67e367e38cabab7dc03caca70761922e00082cfd01fd9cf869f8512732da3617c634297d1409af1de2d5e6ea65cdbb6f0f695c6da820f1c6a0728799a42c4caf6fe80216e3d3ae0b58b3901e34285890bb31970029f37446feb6a0a09a318c0c0907d9f420911010c9de93899bf8d35aae69c4fcadfe8e422ccb86823c6f5cf53d9a9560f4cc3cf4de5fd573c3c793958d19cbaa5bcaa780d2b91f87b3702533b3a720a2870a9c7f3e3d4026d31c0009034794525cde28ca978955f927bc508f1239610200d697799180bbe9f480827db6fd063cd7c277e623420e1ebfd943ce035540c887b595a981312d034e7a81bb4e420baff5fffe9c1fec3440a45168bb2d05a53b4631fed8b45680bd08926589741f8af5de1c24b63390aea5feac261d395078a462d13bced2fa9b5f4b5096b0d09a6c54b9a150fa06356495f470e4bbce3fa14b061db253842266313e3d7df809be9715ae17ec3241e33e5aae270c5e95d80978589ecc2f72d8c97a0ae08028c790f47fe7055f248ba2243b555805ce3525967380dbf1294323ac84d6c1080ab41a6bdc89f311998d7bfe7f118c37d3572e3183a75d8a0b9f0cf795cb697e647663e572bf696a58ef75b46f094a0a35a3fac3f2f5aafd9b309992f6115f48ffb573488baff0d22b58992e53661ae6bbc0913206914cb4a29bd465efcf2bd0a31a537e6d810fb1d870ee55734f84332f57fb6808a4cb15e78bc559c72d567c174c0a6d605e4f6f28e07c0f16ed1159570f404b3f55ad8a34a67354c85467b625f4a0ffae6e3774e3504b45856848c0fb9169c5f5cd7c7a4f94e63f386ce6e593ba1e1a9dd84f28d16764e009e7b2d0e5857ebd7033bf4d01fe2603609c5c702a458ba877c51ff4b9cecec6e892d5f2dc91851afab0ff6a128c3c86880d50c1b23eef90825c303e652d91e16a923b8ca76088c6d96cc33b4ae52fb2f8e74a3ff34c52ba07c6096f9b2bb617d90f6c080f988ea8558e932771b2076ef751d252b518bd0e4d2a32f0247043527b30efccdce2a0a8b83ff7964e9acca1ce737162bf4a37749eb13428c8a543799a1e4b42d6e5c5ae48a678f0aa468735c676aed7da89c9d44082967e4e72bb747c010bd0c44a05a24fec9d9e4d5d40112582121ace7d7a167cc7e05c807eb52b6900b4e070b8686c1338ef06ff88fd1d33be249163cf52229aa59b2924723886ab43d0d9a0d8f7f5ddb3f591886fc8413a536ca5602759e0e2464e4c03f54d6d89f3e6231d52b923f48437a7afb9a865806972be8f2c98399cd2812fe5b0fbc84a387f26afcdb7df +Output = 679859e91b6d222361a78fad3160c6db + +Len = 45960 +Msg = c3bf2168feef31a15cf6f40856bcca4f661f27e9bfdae7153babe21895b5c1c9d8231053170e94375fa0de90ea7a209b9554407694e32b2865006ce20206fd855b7c5c6303f4e24a2a3251bfcb91ac8726a34b6c71182e3dcbe192177195c2e3341330202b69c4e3a5f4741b61c9151a02547051bd3f995b55957c3e4928b9ed4c30b211f534e108b82e702e15ea035c0fafd9afe021138beb6653dff28889aa891a0abeca1fe3c44b276c804dbb205636fbab0d428645d4759a3f82d47ddb22d41b61af13f06f1c462891977205110f608211f44b36d63edb7a67b057ce575e1679df6d3670301a917906fded90818f738a31eb63f86fd1054ef4f0e345a465357dab7f9d67cbc51462f43a242416df595c337af295b896db5e0dcbe0a86b3f1b6fee6dae9deb25b82b83d481897806f840402960d6589446f1dbc8b6c053f5ae97cfc0d3d93643631bda556b86500c3a7d80811580f8d32c51866fcd55058ed83c77ff73e55426fe7b22454ae546fa055d1a09795e3f5c77c435488d2f28127fa80db2f587eed67293822a856c01d743263649f437d6360d9310dc5f15658a8d21ba61c388ac5ca5ab238e86e42aabdb21fecaefd26469d80640b2a9d064fde9f0a69544af35bf810b2df8b414687fb5969813d0f892febe64ed52d429cc737b5df8d5e0c63207edfbc7f177c6645ab9cd2cad017108fca9f73e4549e546f42bafd9aaff934a3dd0c2190037c0c644cf0de31ee8056d6b80055c126fcf7989e130709b09e0266814a94cad5ccb3545dfa0e4f0ef7c6a542bd76f41adae0e398526e63066736d90a0f888804eaf5966d1cc58aa7d9da6be91b59e5b6d49ac0dffda62f17f14c8bd5cf7f4027634dbae8dda67d5f931cab19ce611e71669fc0b37940d67ba8ddff830edb9ba3a226326fb1238f8cd007d3533b4f16d10d6a53d169c0e1980a559480424fe30034098d404bbf49b60d268533e656675c25850ab82398e8f3a23dfb6c0e2eced3a5723c28e1ec2471a6f3212a642978896b7a55c64b4b5524ed018494c70ab78452fabf88284cb82639f847b5193ad2df3ba4b58a555aae92674ad09901662598e90d97cc93337d7a329069428a0cfed412beba72b6496dc28d745fe751b3a197b42555849742dcb42d65f6713b0264fe9d02c52e029a0b4bec08931e1c95a3f760cc694ec8ed5e8a86e38fcfb0ddadb5171b75fabecf1f84ff820a9bd66ea53e6b8d53699cb58b53eb93859c6fd1219e2d833d973f4b0304248b46ef23b14de330c29483871deba6a7e08885ec9f69204cc49c5228a06e50176ea896790fe67c4d16bd1b0c98e8095874f91a9b9afcd2014a12d9ff61b9df34a6c0103add07603ce42daeb1b918e289ab67a911465529c79e218d28016e3808ee2deb0d9b39357cd576ad0af0f6c8980e54dfd243faae2c3b58fa370203c1008f329555dcf472894518947cc2fa322018312d42f665c58bac199fa0d60320b8148e9d9814b19dfedd93f38bb19ba5ae438cf007e02f06825af3ebfa0ff4cdac28926268d4f92e29e97958bc5f63998f3ae8e68593aef79ce2686da712413e3905de823c905389a6f32922830eea946f48a56f40736e0f27bcf7a33c8f80d8fb66c38b87d93966f2a533ff8442891cbb077308cd21f4b3df55221b3eda3c446fa5f1dcdf02131ca95a1a2e14bcd798fef1b2218001db8c104568440274cc07126dea04a6bd893117ac5c6cc8b04e9fa781e3780da57b0e66f83a9c3c01b87760090c81736df43ae9f66b0a24df66a74152974aca8f6ba1400829a25fe39a3bf511e9d1d995fc907cc2d6a49d9ca83658ce4e385b2215fb37dfb5f4c2ace9cb2e02f2742dc80ae86cbc1fbab77a9bd35a6f68bf13f01262baf95fe228b01f8b9776c6f6f4669799163cc6baf6fbb9f4c2b0874d999be97e55ef9818e6bfb413bdc7d7c8d2043b2925bf3c23c0827b112e3c1a726067f3a4752cfef7710e4fea0d8095682b235e1f07ce0093c8c167bf096ca2bbecf6c98ba52be51c7c3e3b84f33b8063844688f138e3b489641af864c0bca088b3cae38a7286eae65cc20f6b2b53493951e04436359ab8532701b598f0b6a4774946da2749a880e3973c440302622058388308648a4d9caf860817c225e52ef6021d05f8b71b47a2b00f71e314d2d65e9c914df2a396d1ed05b0a786bcc2908392900f6527499f823bae0191df3fbbaae2ad9d671de0e8aa2a7ded4d41d979be6f525ef336de09309eba8b85de0340cbcf3a7f3855c6414568d2418c41846ae4fcd66d394223050c5d9768457dc8163fa6ca5bfce7a18c7d45505cda386db4c5cf8eb29df5d32393fcc730474af8ac850dcfcc1b502d2a80447a87ad82f017af5c0dd797be48e55600ec7c01c20f642a68dd381a0ba39c1ceab36a7cddb5e42026b644cd07febac0ee69940b8f96ddae4c55388f86cf6191bc8d6dce9529aab6b42a72846f8f147329b110dae009997f3cda45d26deb1b8d1e7b1a2945b5ebd188dcf984516492db57659ae68fe1f81b9eded8990d911a7da50ee8036c05281f194032135a09b667dbf96ab4cbaaaa01f6c5792a024beed1c4bb6ff37471dfedf9e6c4d7e5f8efb74bef38dc4fee0fd0d940902bd896192812031a500b9673dc8f531a3881bcbf381ba96da3790699f6cab2b604ecea29ff01686fdf7ddda4496df7cabbc9bfa568bfda71d0d39ee8e22fae735bdbc281b5076de8c857d1c1d2fa572ee80a9c22d7ccd4fdbadc117d319c96308711b9c0e8b8860dc125fd5d07d8f3df33d0bcb7f3b73b59e81f08b753760c761d2b3a58088943574074cae6366e405425c8abe54b03703edf08ef37c66063cc8484bec7a2fe284dcca0c4ee0d4eef16443ee43b4c3605e516262f6f18d04eac63bad180368ba769dc5675f4eaef32ae05cff01a85c38f0513f353ddb94a2f8e2139fd2241b63333e5f2586b6dc3cd83e0e85a1376305e175f0cf6f4262288ea538eac2e43026e247ff0d6d1f45112107c047ca6ac0105945dbf8352ee1ded69613568f4b8f4bab400fe9bc91d3b930c2dc0e25485ba17f4a697837a8f80cf53d0aaae261211ab7b2f67f1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0622fccda2e251c9730b1fba63b2fefcb1025ec7476100f9b8d648fee5fcef02eb8bc79d5381fe9fba66f667a87f0b651ef35b14698e2f6d031b6de33f8c8aeed8b101151fb2ac5722357944238c586fba11055be0808217ab1b565100a982ab584347a97a2cd18c34f706e467533c792cbbebe24ef0af664b4690ccdbdc7ca4d4b2f9eef53914ab7d4c2dccd67c4e1df1848d6c07471df55e3dbbcb138dcf87f870963a036fcc3165755c72135ff3ca72db583d9c0c44314e6125b05a45f1b11e0cbb3f47598eba883321588086c40b5b50dafb9fa8b8a6a6416d21128d89acc007c753135ed2b34fd60b04b089456d0565841a64b4f1b1f05f00a1dedd0df788c2491a0a181e98470e77eb25cfee4bfb89f21e9db9660fb72a7ea711bcf51dd2fcbee89dedf8e5e82d069042d32544b84ea37cad1ebc0c653435955d95b58c28f7a7634178c838bdb22588ba2b90c3c623f6b9055d3a3474fcd41104ffe5cf1543910e872112fd324e5328de41a765af9a8a58591d871470f4c89eba63fc530270ea4ef17f7f9fd0521e1531addf86cf22ccdefaa81938e3bc8192e06a6fc48b0031b8f2fc64bd325df4c256d8bfc3cf4d3cb17cb566fe47a49d92196bc6701961f5b11e2048c1b2d275b4a05abe990a8a687451ae06e1174d8b10b7f086f22816a4dbd573b239ec4fff60c09c52731b6ace9c1bfa6f8dcd27c8936e8137c751bedd9dab7f27a24937105b1a2621ee7c5eedad2e331760e3c3e49e8fa63f7c009afe8b229b2f87542847082f70936797d7240c1ae074e6f5924d96add8246ccf6b8608bd602055878401fc73142d7b1884205d747b2eac7d2392104b8f8d36188112baee66a0996ddaefbc8779569558b660f59d7bab0de4e8209fdb34b054667c12f6380726cf71ad5eaccf28b542e31e4489285a50a7c76097a9ff80543453cd056f1cca39743d7bed51dc9ab00041fc696c97afd5f68f2d55a30acadf724af4786a2f384f042bb6fa501257dd59f0014e345dd49176b69ee93f9facc88ac672da9bc1d9ee0bc6ff240c12e8a3cc67ad4164fd7129a4d845d0b4208e95ea50d8aa6887177d0789b4f90a50b599b433510172f90df4fd6ea29ac53fe8ce1d74867654e1899263fe68c7cf4e5735bdcdacfce2d2f38a0cd435a5c73053e790ac1cbce563a8c4cd9f8b3ebf8e35ee55a111a2391dda5f4fc39f905eb45858e0520bec9e7fdd6a80e7acbc7f72ea4a08481f8fea2c1afb429720c8e04e5ec88910c483e4a8c01a4a614ddf73aedccf324d37147a904dd461d969edf030df8cf762d7215c80d95a6686df06309495f4800af8de6eecdb813a04eb4e033e733cb7c2c4336a7a918181d2e0cf3ac6ae406e2bb55c3b945c7837a425879db9824e46ab1c4892f8714618dfe398f6a77e39490a2d0c6529392ff72199192424b53830a63fbf7aad010e98086801f8c99e55cd20a06d800e1a1ed517b6813b126490e22ebf2665eab9518be6ee88b5af771c5729c00df0d547db6df12e3e470518def7bf0b1bf94412a560e5d7abb1cba0f3736ffc5c4bf16adc3e4830dedc7f5a78cdd1b3eeb94b9570b3afb3d971a09471ae8db5d705f4fb97b2879eb17fe3a204f1014a3d1a63ca49f08f139089c0da2d74edad1ca34262a45729a87485c477f9fdb82e85812f29a7a41e776f4e9eda7d431a228b988c4868b8c8ee8692a454ce3070e136a1f02c004ad84fd454ad2df7a58db6a27a15158b43cfe1663b15b10855c5f2eee17959ea61371d5e107e4d0318d2ea0fbc8f425284b921a1c36b251eca21e40cb40d2bdc63c5606b2684a04629642d11d45d5774e81f1fb7e04719a80a1f252ebe3e2a4cef1d9999eb42d03733cc10574601dd590a5c4c17062c170a921846b3547ecdb24f8a5958f35b453ce475044ea61f4c85581b274d997ca5dcfe97b9391b619eb321960026c31087ed97f9997668f81d706db641da3ecb3e85ac280d2e776915b5e1eb3e81df1500cfeac4405d134ed8a097c81c4b5a9a59ab2743b311fd07bb312cd455089bdb583a495f99711965f69c72cb26ff716c7f93fc753b7220cff7cb5f0bf419add5f6d32035f540ffd00fda8b29f28517a428f6a83716dd672473daf4dc8c43798755112be1e44b3b3f8cd15d8eff6ab1f3de4996f3c59244a787e67ad09e0483720b8ab8edf6fe6ff6e6174644be2ed4be17e35545d85f4dbbdc847d7299db6028729653b4ade8e288a422e1f5af2ff4756e7a7fa7bf92f6e3ca1b695d1036741d32ca88c0698947776f7acd1c530c95bc3a756293fbcbb4b1d941cada91b443c2b49dc4abca5e1345708554233a434ce5044a9a950d582ba8926e2e858ec353bb809693d130e5ca758fe90394d5526ea27480a41584f6b03a8e16e0e877e2385a1f3b82db4daec179e60c780bb4b88f56d3be0bbfc2f5d6da14c29e7dddaf4630f902fe246117bce54b661dd248e43384da392dde67f42419def7b3a0307921d2a66372372bcf012a089c61930273dfbed0a8a70be4701c8c353cdd1a00de3fb19ff39bae0e1322caa5f5dfc881d608675f72f3b2b8d82473cff85725df5d14405e39b6d378b2b649bc3904dd47893200ef3e908d65bad092f7b0de6e2c643421598c7051fbfc2019b3ac6d6bb40bd12e085209d67b86a55c550cbf5d688203b72a8234a4287df4dd14e685de67ec8a512353cc385ada17225052966e2445278439b190345ea6a8e6686dcabfd3a9b1ecc8ba542d8403aa979228d03ad01c041b1f70ffad3f14c0d826a8b88a77a1ec83810c4e2097b1d42e6306192e0c752dee4466ff592a26b124b83ddbb8c4839ea7b4bff6bc066328596b60cdc229ef096030fa0bd2a07b0e4ec583b0e55abd4cbc0c4bfa4a40862b9b13cf6a91c8f82b237db0a1a442803cd8b720b47aaacd7b42d046d565e6993285e4a87c175a1f07aa73115d3880b4d135157b62f32512aedea926f499691ae18c66927ebd6dd22367c9929b29dba74ff6591a58e96a4b6be20f62f45f3899cd211203ef1e749012edd9bae7d2c3d62d9efa83f2c7ead616ff7b913121d58439e66f834994ff073aaf3c00cfddc9afde91922ebd09073144796628577bd068dc3ed7871acb7d761f1e58fabfa56db2f760989134477feb88f2679ec3e7b9c618bd0285df1c608b44cdc91f43c4108dfcae7641e4ed9563390ce87b02dfe21a63c34906132258a5203004c4d8a4627f52bdc3c74b75f846f8fb713380def9d461f4339e3357b65255e784a1fad0d4258e210987d46b08f52d708a5eea5f518287c25aa4dc371a114a46d13d36e3d60f237aa00a0c5757fc6afeac539bfb99b349b026b05a4af47061f062dcf937e8aaa71d2fc48fa555cb25e85fc8121e22d52c3010575a0dc5fe5156c227de47ac768dab215daaff92ffd2d00d12f9419d76a3e4aff037fa0ef98cfc67a442bd61f14b86fd2bfaa0800916484cda9e006a0645206e11908a50107953dbb8b2e3d9a975434bc5fb42bd5554b387658cd509028485d341e04909c1aaff96fbcb65541d7f6275922940ab831294557a423a0af9f68767e7a3c0cc9b964211d3e8bc61bbde6703471144cb00d48d2f5f6a99d06aff97a4a9475bf8fccfdde4e79753930316b38d2b2fa99c5d1ee08dab428f09c4145901dd67a51f63bc25789d53c56891ccea7bd4f0f9b0066640f8d486940793e92e181a7126b06eefbb556baa7c42d6458e47cae1bf768b2f20e96183136a68c2995fd6f04b5c8cdf01f3d90802c24f34e189739e658069edf2d7e8e4b7a2a1552d31a9719d643c1e9bec7bf8d3577affb6a96563764e0127596cb107eb30dbf54c35e8519777fb02db97baf97882d82a603026fd7c301f7fa6e080891895874798e53a2cc3f85840539e2c865cc4e53960a63eb8f1e6e33b7e0badd4da6121b075c8156f9d75c23b9668273c1aae30914a83f32251d30b0f4116bf77aaf439c47546f0a6ae60c779167e61671caf38e680520ac61675054f92ca2bee04ff3df819fa524e5159e66d465931b3ed386c9da488dc10da5d6090d57e89a462c2bcbfd64ab0e330c19dacc8713e8f06ea4a2b29a0fd9ef7ec8b679bac4f375eef24a02cc0a2e1c7285babff6ece74f42560137222d5cd19b3043867fbe31363e5144d9ff49ee67efebeef6d9a97e22f8a3ceb2096fb279a3159779cb5ebc4fc44f9fcb24f0b5de2d525db959cf17333794f16b765d43af3f809c9dc92dfc8827f4441e6487ea47d1c2f1509ee81948a83053aa9280773d177839399eb25aab0f481b1ae697f76b86439102cf7cec2af27fdab7845fb7ead205569475753c7e26540c09d3a74312f2de25181511f8a1be896fd97582697d192fdcf774ff0bcb111f003152403603bd9a96da9731a475b457fb5a8d72f7bf93ffb1aac3d730587bb1dddc8ce938089080ca907e635a6d7bf06480f3b6c778e97cbef58b8511ed0a138d50a82ab1e71396aa82f1308252bc5c9494d0d6436fc2afeb20f4921854664cf6d5cf8b0969ede61ef8191e82ec1ea471dd4b5bd16ec79e21722585ac54386402b52995a856c6780f391db7c3034acfe5a58dccdb3ba053463447e634b428649836ddcff7764852638e2683ad5fe7e5d732beb1c89ff4d643af813e1a3ddd539fa214c25c91197e043f5c09a9c79eef2ece049300626b2d0128fc14c5b70039013ff5f4406ee104d894e6d11d0517f3d4bf8af8eb4cae6267eadff09dea381fa556a9ef0cd649eac9d4ed6372dff9fcb04d766bf125657d5c3c535a0a9d2e0c732e573b2691f83abe499848111eed0faac2f1717ab43884ca6580db749a8a085311285ef86798fc9e391007608a9a36aa642294eec2cd8198ae8dfa43a7f31b2d4544e2e820ce3653ed7c28c9eaa978987d325bb517cf7bae5fa340df8d114ee913d24f608344f2c4ad0533b307c1de5c53484e377be47bf4c0e934b1138da86f +Output = 55706e7a05d3d21c345eb51aa80c5bdf + +Len = 47312 +Msg = e30efb16906edf9aaf4fc39ed77a985b2f0c5aed2f27f3a9abe75cb00d9805c4e226775b98d438f28531eea42c49c8fbbc181a06da4447aca00be43fe6791a55c0df4cd34782fa4a9d90e6872b5875652db957e671db6a825b1edcbf2d5091028523c4a528def049fd52f16e5d1066418ad95bb47c5625d4e4098c586b8430753ad925fac051e198af61588148d96536d95f6c99841c3e4a41b53c30267dc056e7e9b8f9994494dfbba363ea761c38ec2433d3bd10957d8b7c093472e9a3084c923ac5cb3a1dd2c5270259ce6f3fa80c723dd847a829ac409decbb44395ed20045b694972b4663f2fd658458b9ac7d3ecc65c260d4409110aa481bcea016e41a07446c86f5250f0f45b32aaddec97f293993db2f1d42f6a4ad049a39a5330741e1cc97c01f249ec405d694f866007676c1af69dd0a97a1a3ad0881add11d031dd9375b6c31a9d7b847b50a5fd7b829cc6ca1b59124a75ab6b33c1851aa3ca057fa6b01b2b31e83941238d30abb5861d443510774f1dbeb85c688a64ebaf9a6974951d0bb2eea6aff6f473922994ae6364da7a7aefb991bb7eed475cc89badc84d0d112af2a7554a264ca82cffaf58099928cdc66ca4ab1f53308cbf29de80bc796d40db62d270924fca9f73865c1f7a51be6efc4e45776e69e0cf1e880ecfb08a3400bf6c168502f3ccce08662161203ef9f28f1d326323336c82fd7ba2c74ee00ff529a6da0f3682e1c85e0795c9a5b169dcf151f21ac830424cce7d1123e21b4f72ac8ba37b879d97f2d6f33fb585499ca2c574eafae7f0e09123f4f05204ac712dda82e95680a45de225b175b11977f0c87e0ea37fecf5e5d4708bc6ce4114236b2645322cbc27b22aacbaee590ccd04d27d87b23651afc0ab4699eb1501d2c4df021b147a84a82310ee77eff9c9a9574556687daab08eef6a18b7f3b2d178d3ee00ace6ac84962f596d91112fca9d56959b298c498423e0b5595e67242a66df1ca4434f5f468245589c6ef8779a298147be53549f470f42f1ab05cbe5973d54ef6fa6b4ef24fcf3831d99ec4db2de65d0327e7d1863a164c360468873825cc3dab52f9df8aa56b88d437a833eaf1c82c389f34c41746ae49f2b89235a8655ba63274680e8613012cbb0b953b6d9745696376a78a6f3fc30e96f5623071db8971d3894045ad40970c2e7beb432ec666fcccd3c58b56cb5e836ae261e15b2e5e86d6b907ebc6d5381074af34b5f32732cdbbdf183094928690b6a816ae2e07e2cd832b47679a79e920d7d0f7f88562b1c478c227dff03d431dc16e0900b10d1e2f22088723f1d5b4249d06bd74ac1eebca4aa37a0134749d12d45dc340ade91992fa7750869290a0040f780d912f03e9c57baa9aff26de9d57379dcbd4eb42dbe054a129f84753b5a8754f6fb7d8bab29f51010e3f8f244ad43255a92630c16dff78ae9ae1d6c6fcf817b26b4e6deb4e3e15cd5e2b36eead720dade69c470ed6d9aec52baa08907cdd3cca8abeb73ec68c0e39132ae5e3cc170fce09a0f7d01e543e0e65b9a55a3e3d2ebf536f7e59216f866ab4a362abb1ac81e09a9907af4e5a6fb2cf7775cb480233b84fca8ae767d1c38bc90076ef641aab0a22ef40556dd28bd9f24c3f8ca41294dd0435a28ea0990ec2daa8e957eb47d57528096a6783a3d8aa54a1cd445a579957fc1990f6d5afaf377003838a501d474934514d9099b79f4e7fdce59c70b7894ebfdf1ac80efbee1412790c319b8348adce2eb076b5f527edfb67503cf01caee9d3ed09ac5164137e49724bf3d26022c97f085cc1e245baad4ea8d6cbe16d4e51c2ad2449a8d5659f9c560979ff9e1bc6ce481a1a258f9eb902093ef24c92b2ae148535481a332d9f938d0e6a29247ccc4454b02988bb1c379ff05258387222274fdf0250af67b4a6b67f226f59da8d026795e69512b27c50abc7d8a6adf7e5e4fd22550a70593fdb8e950d3096a89591c2738606cb5a062bb0f59983b408450ea5b6f41e64f11966a2359654e876dea1da575626bc9c02f135e25d98538d88cdd003a733941889707ac88784572cae5939a7209aec61b7c9c3f6ec8c946ff748057138f106b4d6219fb7a667ecb24ee166cdaa0d638f6edce1990d087f94daa8cc686d02c4ae49a09869bca6aef00662e92fbd252a0f6f5117338ab41be57914ad50100bd6ef2a16ed4590e8a6cf1d044b37208a48ca0251ed2c2937704a1bb53191e7b7425ec1aa27b5ecd6da35ddee134b9de5c5a76f04ececb33a86ac0ab3df93bbab12e25585cd1f9617540b8c49c9d5fadeaa8dfd919bdbef6466f18c3540be53924e652fce67ed57541c3a733cf53c001cfe66f5218262a75e1703ea63da7b7912fcce98ae7e86f73538a9daf020e87748c9199fdb2ae7a1cfa1c86c663830f3d32605d64d99523e61b23f088cd1412709148e43e81ad4a6600d2a5966df478a7ed3f131d240b9f48192e6473991afd708e6ad296fda8f7eb96210fb8a592606bb0c7cf365fb23e03cde85dd1fe79a51ed475e9999f382f181a86198fb2c372f31d88d623053f8cb3ba00313655b6a5b5f3f89da8eec13c760e70779e1e3e0cd893f0dc858cfa07d26df4a31347587be06d71635754dacc70028e9e663038ba76b49e26b08f884bea4a4417fb3be59428b16edf2769fb4bb0672ef26a9169f867dfff59466540a565df6d0450bbd49ae9605f659bb6993691dce0183dca484326a682e8a9a6d9b0cfadddfca63fabdccceaa1ab16933b099eb4307432433a173d88c7597cdcba0a923615657e4fe1e62dc0f3f44ab86751518d9e9afa84d60117074b30127f47ff67f8b1d34b550d539673c4e58a7e849a44d988f0f917928d3d927ce11cf72a2b8b7621da9007948191837303685e4940d3289e2ab06406282bbadb00feecd6fba72ee3cfeeaffe1c9970acb266effbf196eb3c8ca302874e6c00f3f43ab8b50c35938637a9d6c07138bbd096f8ac33090aa1f2ab637bbc7c78e5465f42f36ac9a14477b66414721bd9d56d15b00b7503a8dd3f1b54281c3edcd84096ca155ea084a246a0afd19999074df0a30f96387dec0d903107901d02026a813f12a7174d5a3d51aaefa69d654b95f9e379c503e46ea394a0f05c3572740c76accf211b1c9c964719a60bf40d113df74b81205db38b4f9adf90e4fbecbc5e9f84520bd09ab61d8591556a33fce2b6674fb820ac87dc5231318bb2e6fd45a16a4a3ddfee445163ab969049e3b15a8fc864715e86bddc7be66b235e7d00aa9575630505aaa5d8d9178dc93379c6c33a992e6f2262e1f5fd38d10a4024b345ab3f632a25bc3bc71e580b72bf7ca9c7476801e434c780d3769707a2f07471c15336df2fa89982a683fb842f3652e6d126a38382de3b06df788f737fe7f2c8881dea1b8816b8f6f1aa608c414092ea6b68ea37bda72400847380a913af2614146bc7bcc5e89115231225887b66b331107e8a73172818fa6cd8291ce0be6500f0dd5e375ba6b879c52bb90d1ff14a674ae832da01c98050f346d743798e560b97e32c2fcbd9a5715277a99eb1a8bed9852641e1201400a0a22029b140a76f90940dafea98e9deb855866591d2d5872459c9560cd490006604048eead882283c5fcd581c456fca9b48d87b9ae61049b42331ddd1a1b6161d9354756493b6f66b6592c31953c40fb6a6de6a1e8dd16d259c1047b409fea833da907b9324be70ba400e6f86469f0486ea08afa11ca167e50eb522489ff23d554469101aedf12d857980bbd780594f789cf7caa724f8c06f05b10bf3b6094bde6b1ec14061f773696caa4681a37b47283a2c29b539501d401b946349fedc6a4ba9520dc82349e8e2a3eb7e09227d92024c066b3fcc3fd4f4bacfa6bfdcb40f39998363f69460f46dc9b4f0f28fe8a6933d26fdcb40206df95dd364b9d258a104b623527057c53c8728971dc24e450b57a7fe6fdc47aa6eca9f401bec6212d65989c257b9cfff17ab4b2272fcd00b26cbf70d2fe745264de4d9864acc1e7b05848ee0e2377f771c66cbb78f06c7b38f6cb4c3bc60cb3c81e4a7165fbd7a09b5322fff906de8b5c13604f6d07497c6abc66bc2a3fd4c45b1268280f944d7477bdef78ed0e18e338c859140c5dac2cd1245768a55014aea4236e65675f6e8acafe7700f3226f28904f1fb25fd8ddb3f49768f7b7e113982cb926cf7744810b1f7e8240122a2982e90f7ad26e6123385b7e5f1265db1aab793d560f462ccd1efba4d8e0520f8f18cd70321c3fe1c8e38f3f0560b924710e1515c7cddcfd9bece8da4087bbb7e913c3da0e37dd3e12dd1744228abaa560ea88ab41b042a1339d6d8884dd560b7f9a54b5d8cc4d624a4e7bf37e3770462f6758668c607ffedd5813146a8c2af398d6066956829833b75e44b6e010e4f025ac0fad6f869bfee14560e7bb393f587eef645e5102c79ba333f9f412bc1d898be234eab3ca9f88868dde693e8e9e20770cf3fd90f3e28154f82214dae423faa930508420d3928316581502bd334e35cc553dacddfeefcc13d348800130ff2cc7bfeae37e4a7cd9d7cd8c1bfed0577dc5f3c9d4fecbf86628ecf29f4f47b8062db78a6f95d665711215cb1acb0cc2e2a90e1fdebc010436db6ca8d98bd2566f233fb9902d2056330e575a69ea8f964bc2cdc830df481c24747bf2967f78e251f07ffdae0dcf560715bcc26e2302db9f56594b342f4a47183a40593ef1e26393dda0e131fe8c6ed56d6c8a93400d9ac8aeda305174ac8dfa76e46439aab8e11d32caea81c8ffa5855f8e3a3f0757daad127700ee7519f6b2718e9cf072a165d73724a20633cf03ff334b5ad94289a336c9584275fb378b29706787c91045f5a933d7902807a5902b31ca73cbb74afd4b1da67e4dceae5345be97af2d4e4d9c7b700a3c500b2855f2a1340c7c2f43f1d454893cdeb62756efa2459c85f2615f3534e62fe40801593acab0ae54711c86b9b72805907b4a9d10639ad437c52848bfc893f04ec6d7a4edf567e0bb477cc5e28eac60cbe4be2f8e4abde1ad8f4b5e01743807f40d533ff16a802a19770bb438213cd6f7ba2c15539fd64b4d1871a9e37ffefd40a51d3130712414d6ca725ea1b701ee7cc53b5545aa0f98812743324e330c599855dc8290527b275a0859c8069a2330c2cd94f94eb28e52b086690028d68ba366e6383bfb54acea0ef967fc5010c924329ade0855017b0041fb8a1b5bb1a2641121db6358c0e0e65864450165621b5332f3c28b41ddff2b9e4f4e8ccd0c7a2201cb6a028fde3ea1a1139bdf2fd842442ba2e889fc8f425a2e4a5f5a682f3a689eaf902187f6efa552cc109e95b9667f866df70a6d5e6b1559b3628d12610bbb5094f3c62a501a7ad1584c477e4fae8da91d98177c94a2e58754022eb5eb15a57f413bfc5f34e8a6887ff8e2d4e043f5fe7a72b61178115020f3e54438157fad937f11c80ee981b3dd08bc757eb54d3feb4b2ef21451dde08c59b3d78327725cf4161d341fb80c293abd3f0a6416f3f4da5a73d06d68311d344e15f07e6915380ace06477be9b18e06642aa86e4a5d9b326dea5a0505338e7e99b295112391cb3e6f740908c49a6ca9c62458849bb4bc5b4d3a97c26f0bbbd30434d1249c0d9df6c01183af90ec4a8babd6218e4f20dfbdc20c8f8df0e22c9c5540a99f1db2349b8a82bc5997d2b114dbe70b74afc88dc093084b4fcee06a3f5581276aeea71a969572bcec1f7228ac1d001e1e03d54dcc8ad5d2ee522cfc26cc9c526d5715d74da9878c5271f437bb3ac96374936ea8496d1c2c54c4ef6ab7823c3291a024f12a8e693371d58166a9fbe9e15fa6bc259f058462676c503d5c3e07d0bc10fbf2940bc1b93392413ede2509a0c586e74c361ab67b119178fc7ccaa533d7f0c362f3ea37277ef25b46c283d0a9907916a57674597f387d8e2f7eecbf63cb88a3c7aef172843c3bf706bddce703a6c871b9c8da1677c676bb5ecc6dfd697e20c4ab2fe91bd854b63f0738f7f5b6f1bb210f9215956aa2c52712cd14064cda004e95dd99d92caeab59d0999da3cb57994e2f3dee7d60b4b2f9d2e9ab8314c670680e20cb558732626dea4a969949c2ac1fa2322a7761e4845a2788f81bca29b73a9d604537f1c822a4dbb1aa7e38193abdefd8942a761a85719812c57775ed1eedca05d026725835252d38a1fba1448c509e96f33fa63efb67adefd83e1df9eda91d7734ca13cae119674642b78b2aeaff38d60e5dfa382f63ee88f919ca356c951f1f39ccdb066fa81242565bfeb59bf244ffae2d78f0698ee443f2b08589e2da5763a7d4d3f427f9b596a58e02cce9524a799b562a4ff10f16898aaa55dd999f4dac4589017d5035d8a9f7f9a0571a47d2ab9d81183b0e0f0cc388b04319d70d8a63dc946f87338304e31443df3f77f865ff7c56499d09b64f57b5695625e54c95ee349c25fb190cbfacc415c86a488e8adcff7cc55e2a2b66afd97e96e90b83f6b7154a29c248f8946cce1761c1d530caaaf09c9464b997d931bc960b4e90db3624474685c2096e088bfbf0b42c6507acd2155dbf99fe213147255abe3abe7bdc9f913741e5a396a5711349c994423bb8ba36684ce441f2f558dd71b696db8b708fbdc663126099f287dec9a6dfb2f376cb1d64462cc931adcbad85fb4b30357b5c919af531869f7733231955f7fe576f6d91fab25bdf07e20a5b3b9640059f846dd65cfe295ecfbddeace0dec26e902a0959d29a58cb9c1a7caf3d8e5ca2f1132c53b387e430524bf13fc7472a49c62f053e93050bd517e0897333eb894e54b000d24897494450a9d2a5769a16d92007cb08e6fc5c45a1b9996dc4b6ae52f0e45119c23640e1f060eba694df6d64c739c17f72863362612f146699f6b2f6ec3688f2ca6cb1505af7a309c91c1933e34d516ae0ab787580c963275ab37f82702f0b23084284dab7f66198bf5b018e9bcce293d77313c62510ec75aef5fc3ea655437423bfa1c52fe68f191ba30dbc173ddbc000e7ec9d798a181b3dc51172b43398afc4ecf159e94e945588fd25078028a6ba030eec42a4c14fdfb02aa665c24e739a92cf5ae00eb6d814ac6f31b5fe15aa4987f1f9fccd3dfa8baf2da360f9303aff3673c5a0c5a6c31d2f04190fb88d4f343496fc151c847fe5e1d5f0ab806057a457dd1be237a7bd3abac1c55dd717fd45b307ded3ba2048b6ef2a768e806630519e1742ee8b402e31f5b01ee7823c1c42ac4c857fcf99bbc580341b5121cb2fd0b228240ceafa7ecb87d80af4e28314f4c66bdb60827542dc3dfcc83b8a16bae83d18a8847c5c15d0194172ce1f744e23aa6ec7c0fc3e44c1ce896695e4cf3b60e4efb59d68ee5b0852f43fbb60973097005c30e5657b293ddae3dba7567e190151b635a1d738b93bdbf85704cd7523176f3e0018e4b55818091311b909acbc932c750fd6f0c395305b55a4f18f95906d9f1b1ea1a1733b1a0520ee1325e08cde1c322b85dc1658b07b140dc9ce7fdd5f39fb72c8c53d390b73125cfdd1a3f1a9caf771f5c2b96b83e33c79d6b1bc74b6e5e7e4d5789bbab2fef242be357c53bedecbc970cb3534713ad5d25e61d3bb394ae55c0fe11626d84cc7879f7af31ae3ffb71b3c1f111d4228e8ffaa064c1cb21100c2c02935e645059915e8c890aee1d5c14fa2e5d58dbd577be802c7b0fde7e13dfe2e778160c1d270d3e146dc777f09f44dea460aecab6c9975adcc86c8a263a6f8a1f481fd145b55a9d11d5ede874355fd5c6937a1d412478ef53e56e4a93f429963c8bd2505474f7f02749e49bf2aee474077e41600ef8f1b2045a9b9c41c19c7bb1abd415e3e673dba742521f167c614dd9799b2f7ab7804770805afbda2346bf0120ab7e5eaa4cc42457acfe3a2e54a7cf2dfdd80ef0a3142b0f52e5b7a9a6e4bda2bf163f00e12e20e26b95e8254d365af3dff65634e8ac964fe9e654c53b61497a8559ffbadf8e1f8af4929af1a95e0f73c806cae4bf8534daa67a4bf682d93740a4d63b18a66892a9fe60ed23f7a35f262c95e780a612a9280f1e07ce0ba0f97d74075baac4520cc7df7d393cc69abc73a40026b91af945d08a5e02bc344d2289a969ebf1b7bef08d2e64199c8498b9f494e222deac8dad3cbe96e731ab52250d8b6a668e0f23e04251a208d3b041da1195b84661d96441e502650fcecf448361b0a555c029055e8fefb38162d81a9f631d0f1bf30ff19661fc54f6f41e98c04eaf97344893f7bdde5f150dda7a877c5191331df2deda3d2c12c3374217c35dfceebc7c77ee6f90b63643289b061cf375a8e0c701b47288bbdc5c4b295958df14e481a8ee86d +Output = 1ba0cffed28ddbffdd2a199fd299627b + +Len = 48664 +Msg = 0bdb7d92d53a6edddea0f945c9b772e1226671f6e6497911465fd752a803cd0bef1ef08afc9acf32741ad5d1c4e8712d632e73e0576aba66fb1c0c75ffc1458cb005b4cf7a35c212abf3d434792d73ae4750ab6b24b8b0db956cc84394086457d8fa900a57f18ea50a93be16f06fc28b5532de40541da5959bb6d2646ebe7491ef644ee39cb87d1219625b213094a4ed163dd707ef80dfbf9564f38195cdbb657babb4015071d58260c973fb418562fc10d95d67fec8a77f0bddf342121b82f906368b0d7b04df1c682ecd4c2b2b43dfcd6f370888df45fd86899a4eec921075176f9aae2558e309b8fa32bdf66d91bfd5652e9395ac01638ed0af4e2b19af0237bdab8d57572970d8966af5ab3292c3ae250ab02e1723d6a91afce9d897a5c8ec88845119e8f87a51683d9d52649014e21593065908f28061cf47c8faf63beec139eea371f39a4eaada735df1ead1d9f99f903e2067b7893d575992991db99c3b36b12b696155166b53d3dc92ac9e3b792acbff8b1cbb19c51afaf0bdf467fce4e89590081872f71d3b26c33c923e62ec1d0af2a11043568281f18a6f638c3343b7627b5601381b47f934b9f884fb75d9e216bf6a299a6bfbf20807b652726ce00cdf935c04f1aa71f7c567cd6a1b9dc9e0b70dee50077eb8d605109ba95fcd444dd581210ae3cb239ca175c32ce701437fb484366ed1b84296b14c25509c7ef6e40decadf958a7e6508f8ae2b2a7cacf27d7cd496941402098d4645c2f71a87e374c7d09bb9666417b594e33e4a31ff540e6902f2b9f3fda4636ff482f257365b05ddc3c36e52fbd85c56bbdab22293e32aa74f19a33dcf9079ec6f236020632b507b04e548f2ae0d79c8688ed6e0f3166eb2296a044400442d660612d4e8a6db011a148fbdb8135d7a54a9d94cdfa5742714226241b928361a4779dfd52269f0844593115105941eeaa5c03868812362f037baa0d01fbffcbd1b0af8c56034f25687d118977dd8e847167c2ade67e58966b7528453ca3ffe825b59ec4a248056f45b8f13f5832a302c411e3ef316745dd6fd9abb314b10b20672e728c7d1e494ea2afd81ffb8308ce69026d36aff4836ed84f383fd34dabdb61c234cb31ada42a480dce11a7f6465228e36869aa4e9caf6d7ed9d1bfa16881d91aeb6b041c9d6b0078dbfda5b3e4f5cb5cdd70689c180af80f955122d2c97a98de9f533f94bd79909808cb3ee36a1e1814d33332077de63fa975a7420b572e66b5586b293c8abcc0175c63b7ae6037d9b452994fb755aa0cf57fbc687298060a471f9b0c3d8e9d5a9ae0ad5b3b4fa7d4e3628c09d327c0259bbd76db2f16684e3dfbcb2ebe518224cc9a9271b3bfd6d24a0cf4a6847c8f524237bee56b59bdf83ff5e3d9e85ad4e85294f8403d362c9a9157b76ff1db7f5d92f47dcc4ee76ed1f414cb53e331fc6cd7d6c911023e11f65f4cbeac43ccf80c35fc99d9ff4ae1a105606ce4d65e60790166eb2c2a5eedac5cf1f1a5a1d76229d057fc54a70a803019e1acd6e9696ad6784e48d9dc1f2885315038a13485257a0e0e8c856dadb245d9a0746f46db814de596c66040072a4986717cea235da9c8942733b37abddeaaeda4adf9123c0ca4f0444f087fa05bc0025aa3c697e857da0dadd728f5c26e25fcf53dba781275a44062ca1bc17224b14e15977eb8ac957a1fa5622a0742c97fae9c0efb9ee723157ef71edf2d03ebe612aa3e59ad33cc6e7219bb02d8c75780ada00603ac427ebf510c359decde1925f51f82a19f05657faf10caf88fd880ef9e090f1ccbacee6962a8f69c258817379f7e4a9cb5a8c6757e93775355feac952ce0108c23acdbdd59d34926018a4ce4b9cf7d9418a6591886a9aa5d51bf433bfd2cf09cdbcaade1dd951681a86d1ff3eb1805cfef878530705a4b5caca6ada7b9f599941b8ecc3e96f745f641b9fa2edc63c99663d1b184e3ae42998d3852a20943f2bc0d81a1bc2d00bfcdf5f4445b35b7b1309c0e47dd88ae775c1dff9bf3951fe35bd62a92224ab96a4eeba864439d1da5e7c1c5ae030761d3ed8382ee64049054bba111083a94282fc14c5cc4aebd9b8d01fb7f4ebe07d03c93e849b4bbfe9f2d2294bf6ccab457f76d3f99cb643d3c51c771c38fd630019b9774dd56c12d5356d9d7bb249b514ea89bede6e12cc405da814c19d9122cfed9414ec53a3e36b4b828938d9a7514142b937dcb6ecffa000e77b309943ba0cfdcd99f89cafac4ca3956f0be341fa5b0699d18d0da168834d6f0cf1c2819377a8ea78eb26dbc7d9ec2ad15d55c63ab2d4901e67e8ec616a91b36c7d9fd749709d6f344c78a4d09373c732b5a7907cf90b2060e5cf0aa4b68c38fc4c97b1468839b04e9508b76119d8df159d6f2d4b8e38ef5b9f36989d078b744ee720bc153f1c723a4d5d7fd3dd99f6fc8d031920e2ec4160ec9622a4ce1e09c6c5e1342ff5a41989ddfd6aa34f258359fd09d097b773cb13668415668ac25e16715fd6016c6f1abfdf5f0479ff0a28a075e9e00a5c8de0e58586fd5cce06d59061d2fe33d3ebfa4eca08d9a25dc64b828039c41342892759d1f556f1f85a24e720013931ec893ca9167156d6fbd86052946ff92d1a0402d2d475aec0aa4ab06d2460f37616f556615d2f086249befba33b030bc2436d07f2f58e513344370ca4f758d99ae38edc09f6986aded7e891e6dc89587d4f42ab3cbd860ad466dd9e11117f47fab2d432058b540ac726f3b7b001697ba8ae236112b513282e727ce953fb3acb2035540ce683d844a5a75ed1713229e1fed07dde0744ac35ac07b372c02d21dfa5cb8ca11f689bb4e4e99873ccf75137ca66b056ad14c7bfd7870fcef81fbaf1e5f5fca332a224e81f5e2f2305c965c9a5c1697f568dec233b80e0526e5b6cae8b351297a2d8fa3abf858143be10de341b8117cca618800c3285e3a19558bd61e0096cd2f27582494fe03d6a786630f3861639a31e5d29d766f67840ffa033b89f037a0993f063803b0ec20ba751f47490014db711c4501143632c952fba561f1293b89029e2046c1b61adbbed3c9f53a3d2d26d42d68946524c5f32881fab01e53aa6fb06c2eb897b795edf9cbe980d4bfb462a040c3bf30e22ae8dab48991d7178d3cecd0b9f54a5b6640b4820850df2fb4791e7fdfe83f176992afbbda6ae51debd7fef24865a54b94bb3623adcd2334325296104379586c88d7f1bf75a4110ccc282efb63706f2f2745c9d4615f687738d5501b77d8448991a1e6e7e3a8218c3817c413927e6fae28c8b3bdab6e75a0cdea93c9046fcb158bd7d85cabdddd47388c07615ef76e719e2b3d0813621356fa79a94171a4b4b97f610d4555aa0fe2d36f400e4e4334209156afda21a30a41c66ad8ac46e1c91c7427cecb69797d0812a8b841ebca89620930515e5e99220a39a569320c8dd0e77210621670b1f05ffb1fb423bbf535df0fa36ab951ac22595b13a4fa4a0f92c18206134df2b9308f99bd7fdc482aff40aa9744168345d4d5359ad02d88d1d753aaf1279975fb0541f16860931ad2b12de3f2259b7acafe27ce2336f24f3a6644f4b7e72183de371d0d099e71b756114dc19d5670c0a569f72e971f7225b2093d68419b0ea3ca8dcaf489829da91ce8494c801fbedd3cddec5edcd1d595a186e60d778b875e27d1f1aece543f788efdc88c83c7ad57f922ae65dc9542246fa6e6eb41feb53a5ec93944c25c81aa131a738a8f9864b843ffe64b7db2e15c8531e60a883ebfc1d53e4bbd4ce189c91205f24d8ad80c87813d3c19a972dbc449ef8d733291ce7bf5f7ce21532d7f5df587ecdd5ed0cc4d1da457d6471b58e424a8842d29400aef26be6b78c1868cec23680a43f1c8cd917efce08a3ff67f457f23724053929aa5d159cacb7d35d8000470f3862d0836db0c0d7e3d794b796ec02900b59ad1a7255c9192216f818a2000674faef8d730b42f9fdaf8dc626ee75182d693e54358f8312e6b837fb4cad57f14c8c43c7fe3a24f799bc25282853998f69be21b32d6a5b6f8fff89515c2a5e94004cee046762fd4646aa4c3f4e6ebff4df7aa26e448b455b7f38899eb971ba6b3abd7cc7512e32628efa51501ba85ec4e94f4eda2d7ad7532f23b737f74bc1e3566e4e853de45ad8dd1cd31ef2990c9c217c758b3ab197d32a21a0b197f12ba8eddff1c2a03ddd25bb924ff065a93fd712b2c4f61eb80d77fab2c4900e0a4e085b72f5040a833fb594eb367907616f023762abaf2c068eae1b67a167ec0faf9e49c7d6cdff6d09250398152d3a4a10aa0a0c981af515b1e206b0a58d9479d6e7136ef584d153bfd082196a6180dbdb3af52118de0c7e0db0371e6f95a9c14a5f52a90fcd22cfca649affb4da7d8f1531a340bc4cd498089537116df49e8e70837236540b8639cf3db8bb72dc82ec652a7edbe0fbd00c190d812a0f4ee529ffe01c7780d45e3a24e855cd230c337c3181f263357fa132e595afd8e1e9003c3ee19bed049c3d4961e10ca553ddf1a700d49867082caab4c4aa1d9e8477922db4248b175de785e01ca457f473b6600559aefb67f7976f0a5cc744fb456efd86f61564870b2ada769bce920b0149e10fb25d75d68254509c0489d07fc333b4d08b30b2ac8afa9da595bc75899afd073e918ca24316d811f2524e2a8c7c6a5a82da02f0085bcb61d560fa6cc09f44350a7d990b3e43870595dca0cdb1ef7741267908971b0c01a98ea404d2708cb41d0bed2f1b188705ce0efa0e34708aef2b23debe2264fa51e759c56850f9e1c101bb569b5c626fc8bdb63102e958dd365b1371902c66d520ad9f4b9162cd4cff9581408a39bc5c446734280b76cb54e1636dd82b1fa0faf26ee7bd2c828b1cc44b0641685d86db0d4d0125a447589074d6ab88fb76a3fa4b9dcb80763a83dfb394a2bfb212526a87f195e059e5710e652744fa6dbbd04190dcb34c1ae578145204ff41e3f28f9948d77abe98dbb52d46c7d2a31e69c67f668e2756972da849040e644e9a98ced5c4711836ed84958b7e4add296a1ae6e231349056577dc4fc6e238a5c326f70be8f5106dfc49a82979022bce3fd19c238856296c1f8503e8cd4e6c9e147d125a20df9bf2fba681cd000e20a692410d8e0e78aa30fd64f7598fccabb8457784e2ed4cdb98d3b87b4d3650b3e3f9b8aab69bc3f3db69db61aaf2a41d79bcdcf5ab3586f7eaec473fb001100d0cdbfd1ba3187d2df5cab4e9e1e01de96be2740fbee2d3186daf1b74fe4b9555a99fd9075d6eef7f0488b53608408038161f067722da7c66ab82fbc340fb28b443af1416ed836112920ba7f126f9153101dc5cd8df07c8082bceb0d47df91152617276f15a411b0d26ba51c144f524fdb47f3cd8fe4f012775fc034ebd2d98568b50c740ac8f649949ff7d4f691bf5c3b7726f1f869c6dea1272b9da087f05e949b1ceaaeb5486de8141f1439d53d0ac931bbd567fd5567a899a9d1f67d79f3224fd54d8207ac70359e97644e885fce0cfe4ed25f1e202fe62db76c6e11daf5aa39c217253e87031565dd4fa5399c286f334c933e5abba9f269c0b767f397d884ff7fd1f8a86c88f0206d30ee5786ac6877217296217c5855c4725d8481351e5ae74b087cf3c1946e44c3b28a7083cc91408a0ae71106dd78c438c93449373994a7c015329f2a97d8498d3ef9f327fb7225d2c6b197ef8be3ef808507ba22acbab78b92ba190c25d6b50640cd7df7db837d983086247af61fbce61b7f626c0a357cea0b63dfeaa0e20deb62657f57cf2dde46c2c5454dae94a2d5e6fbc087b4ad8e87e9d0724a9b72ba891e6255ec5909be6b07ff88dc17db47dc921d531a4e8b62c1b8707eb09801518bdf44b00a0b8f94717ab55daab46c02668744a8882a477043f1d44391092659401f7d1c55493806f69557324e26bf690041122f45fa7a5d7b107c6f80815a3862798bd932b48b7c76e275b51ac15de23649f655f8119c70c3aec950e37305855f57e19546bff27b5eec9144b526c014852c71bb03121660da275ba65e60c0b693451edef5de256a2b0e3a6f81b97e66594314dcfb7e70941b1493ce35cd1442aabbb3f4c4916cef77d1c1a4251bf15e4f38403a35b9438102e112372e3a68b002462195377c6171a1d1c77103a0b172b3769431665507ce2e37477f9c1b3695365ee82ec2e18b775588cc54920a473a42887170f1c425b1f961b415f3f21658b380883ffb834386ef6140dd749b1b1b58d878677ca935f2f10ad898ea5180810635822745b43226fbe5b56a1fe5b5ac830109834b56a107b19d3556d3bbfd84aae856933606dfbdf790aa88f86caf544d7cb562f25f0f5697935afe4483f5fa2e33860240fd94d26efc80b892b250a914b5fc750644d9662f77a9edb16c0257ec8180e30afb09face83e8877339521175475f480b9a87bcf5c4a2b3aeb69b14727ce7b3d8a197ad82c142641e741c33db9b5e3a56b292d16704f5ce910628b66c601af34e63d651482f1eed08f52776d44c69ea8c3fa33a1fb2e3bd1cdd43b416d5ab3fe0c44e8c8b47de60a73efc60fbb512d72094015d6c592d0d869e74942e6808e8144558b5a886118d8da413789e7fd96ea85265c1f952122e72ec23ed0f81d48a7d598d733c7458c230e6f52449073e3f77ed18fe3358339e7628ea2526ad6ea57093653bb39d049d155a29fa87e5b1c833e6c36896b611dbe4e72fb3205557a792657885aa5ab57cbf802a71e785c47750b1dd97b0063d7563a97d3d7914203f47522fc79d47ebefa3eb6f10c481e6eb52e0c0120bc306d956e24b1a9d6448ab23ec0397e8ff0864571e705dbb44a982aef6335e06671ea6531421e109b04199ac959c7d39ca9b893d7bc6cf48588cebe9547fe23c8cd53adcd19a174aa2ab7945d142cdec3525cceba5eadbd827f17586ae2e351a8edb25588d0c23dc95d6d884319f209ce9378dd60f450a075d87be0b45c6cd2cf780e44ab9009d3c145425ec491a0bb831316a812a7de04243a023fbcdd210f051770647d80ff9f598b3efe26a4bf5bac7b3d17179fde51594eb55bca8c8b6e1172df9c48c92b075bd76951b179d6530f72f612b903d8eedabc9b1d25913158bd3063d4529215748dd0cc3daf396d0a75a148813efb54456f2bbc6d17159b36cffa04f4e504464fb91f6eab660b0de8a5af3b4cefb1dbbde2432134e640526e1077cbe5474745fea56c57841f183c556945d75b144af4befaadd158db39dd6a4850bf8dc0829aeb1a5e90ae228785b9870b2596f5f128b07e11d4c33e29c4903f2ce9d59addce7cdf9d2013b7816d7cc8a82ce6d9ccfefc3716335b5737904abcb44fa51b81681bbed20f9a262e7e06f4c5f4310a03fe08ed65f50a6d8cc8ff8990fbe68d96f02f7da5662ab6b53fc0d3098661cebfb03d67a622b7ca4ff4166c67f57e3643ef20e5bd2cadb13f38102c1de95c6e289d036f80c34ab4a99df92ee143575fb1ec55bec3690a5df3f25fc9a8250c31654cc3cb9bdfaa74c24a0f97a7ef584f086f38d05e252903faf41670534357619f45e344a07ec152c183c06e610168506f0030e23769f2ea7bc69beac64a2744fd11cda237a87695ced0747db77f71a80e28a5bef53c4d5c9ff158ffa8426324a837e7ad0766b18713ba938a4f735aa00e6eff2a41a7229f8efcb376a234f347c73f9b2db9bf5a6eb5c8855ed4e40b80975ba7efc3b159fc6f6f16195b27bff683b250e9f4bc5a93df83b3c1ecdb6b90d07603d52262dabb6ad3e8ae7c23ae7804176daa6164973eb771837a3f5f6418e2477ca307c28d24a9af91feac30aa1771f65c38a8bffab7651c5e537678dd5ff5567b2319da5a7f518b79d194579b19f2d8845b70d56b45120cad12392ebfae2f2c661b01b12a138def08efdb9f67c7b1434ddb61afd331e6c7d6802f8af04dbb50a654664fe3298364a61f2a11f769d3c21f7f245418c408d7436501935984bf4aa496f1bd6f095b71bb2a29b3334783da621061cc2443a1c45a895752e29b64a3c7a84a02b4fb3e9fafd97f8f03a8e7157e57bf20ddf9d81485b3d7cd74d9d1e2765418269c475475eaf2d5ad50d627fadc19e7572d2dd6512bad2c0ef5872f8f1b6003320e34c47bd43dd21300176c11e2218179fb26c202b33dfc1d4feda5321d95b52df10bb739d5841fcbfdb4dee3f936348f2e2dc5b0872cf00068535c54e4bbd31f2f155438568d63dd2df5a4f7891fa89fb08a07e20e41afc12a017b7cd89a0811af97c4ffbd21474f7a21e7d5fba586b46885af20b046e2687b3e2b3361f9f90959dc2e167408732bcb82ce06b59076d33e66e6f3d50130fb45549400e7a25112152bbb06e10a8e79075e821121a81f061a74d3e1e53c42846f89dd6bd25bb631cbcb92566eef403f18fe2a7ea6b42a54e4f89f7448bdbf0ae1262ffc8aedd1706305dd8e827e3387e5aaefd6ab7e3ec6843a7134674d50968372b13c772049d6c521c13784800c5856a9f9a09acc0462e38272a8a8b39d2f3db78cb201bbc66bda6768d8debe76bb53456f64da672432e718c95874b94dddf73be7e79188 +Output = e80c87114b6d6809540c3e14d0575bd0 + +Len = 50016 +Msg = 54596e319842d5d6563d842d65172018ac6af08dda7a3699575dc0a57a5fbaf9fca4c67eac0f4fc8656319533da81d0d00d19515dd9b53c35eb856e89e2d9f57b6f941a478f7b82b60057b54c766d5165a65f0bacb3b33e2c633cdc9270c92cc6a9f072a62c2b8082e6bd2b86a19ed3aa26f2a030c227efe76164dd17dc43b6100df3f98d437f966b9dd45058d881082c0376a790818dd2056a9fd86081d411d60011177351f204de8a3fcc59a7ce4f49c05d9a227e5f74e4e34067230df4d09724da64ded42d8c5a304207ff8bd119b1f219f09d250769246fe901d5ed1062b1f0a26a56468c7d7d249d9bc0f13407c2fd2e3336f23fff42650c20ef8bc158d4d82b9040159958a5ebb4e03474619a1b562cdaa68243d7bd672c4cd68682137e5fb85f42edcebe72d9fa8dc081d43119a1786f5231cd52f3eacbfe2149dd32fd0beb5fc53bb71f428400ecfba6167d4c43a369c0ad272184746dbd66623d37ff4136fa5d6bccebb37e5a965c5da2cf31d1204278310ba3fd7873f2fc4c1c82f3b41db7520a8aa4443d5a12591503b758ce9191ff89c55abd7b8147898415a458c9223f69946af9532591d98868b3b62f8059d0cd03fec6430218136496932cbce4c6cb0a96083b8eeb945440d52d5c24bafb77473c12773c80aaff33f02f8c8ebb8e12ab9bcceb55d3d42b38c6fb19e6c2f8fe149eaaddf89bbc536e2d35445ca1ea7ec2f243992692d3c6d6da876fd43cd4edaba8227b05a7bec889aa6ec4953c6e97e755d6b59f9d05af816c6cce8b8d11ce82e503cef22944c70cf416bdc6ef7cd69f1320d12f46fc5def1915d66b38220910d1d95a3cb4c0c76e96d770603fb7b340d6ac7c34452a5a764d0ce7f1c2a8360bfb1d9d43cec552250f2b8d0fa181c6730cc4076d0c121d9d94dca3bdb0f6cdaacd4b18a5dbb4efd6c98d8413b97d88ac1222132800461feb7cef7a3d87904893c4ec5ce1603208ea6277c62afc0d6262a3211003c628e9d661cfdbefcb273f4d8e6bca74f0af25d64664e393cda3fc2d2c5b9e7ec25d03f4eff85952d01e0a3e6663f1ef01aedf30f1ef6d1cb2f3ae721a2c1ef78934e6bd73e372e54ad731fd094f53ae17938d710171c2f4505f01c7f93d020c8f531a969a3ba935aff56effc3887030a6ffd91cd19675d90a589e9545e8e83c592a0816cf4b7cc253fae9bd41c9c81544661aab0ec7f6296572cd608cca51f55b4c47c48fad5df9fb5a6acbe07ddbda5448ea920570d463d62016c03a5bafc61a1c521657dbdd6afa863a924c0f1bee7b3ac168524b9116f103132aeb17823d2a2caf92b4516b83c62101a6d10828c00d9e27a46192acc13a7e4b16fb7849b8efffb8b0319898e3029d38701bf3530daff595ccdff097f1170416faf81896c7f00815f53c2be5f7246d4794895b4b15b6c3944819dfd3051b371f6d7d52d9f8ced84fd84095c33ea013c78aa5aa7176d6aa9bacabdafe9bab89cce4d7c183b9c0d2beeffb40c1380a1330a8fd5b56bf73fd1471025c6b136c6e87d7b3ef34899a99fb92b8b75051c70e0b95fcf87b4e034da72bb9eeb91ad26808dc7e266cf6a0908e66f584014a6b46c0c8210c5fa1291ecc433f0c68f05218a869b3218d6f7758dfd35e1144506b6ff8b60601645749e2ec4e1e3feb627fd2fee5ef4b26828355687e4ef9aa224bebfbf6187229eeea3c9fa2b3f3c0bfb02964f78f1db8ae5908c0ce34a7932e813d72fee4c920c68e7e5ee7acb2798697ae83051f13c4616d057129cba5afd3bff6d646d780e98cab3a829375068645aab4c1a51bc7da3a33bde237607e50c03c8aae448d33d49fc4f3d32c896a677b4deeb94e01945aa741a4ac6d9f8c1662ab7b539e525c827e703ca9197658ada615cec2666d13c6171b4c2842d5797139614b7eaae36563a711778cf0a85bc94476a78584bac0bd283536fe3dbea0e1c3127d78009ce908b83d26e738bbde3ad5053b7b3f7725a05903d796d497acf88e1373e8260b41e21067dd50581d7a72e635dd0bed2ebd00081bb07aae0ce815f908e13781ab1a704e060d40d5499b21e67d2ec0145df16cd3f15412108b0cdaa25727feb9f8dd33dfbc394146bcca98546f83205b615d474b193505a2ae65b70882caa6257104cd33dee3ca13038376be718cb518e56b1fbbe7d5cddac39d2b9a104bb65aa01b7ce9028f53d0aa402d93279de6e366a556c501a8c33f871db8d5841da7c002abf37dbbbe76f61d9b2d60f6594e2141969ce4eb309e374561df5952d3130c1510a1506ed39bf9ea0f06b66221537922b952a9f90fb758aaf41f8400ee508553f4070f80714b527bf649f1ff988f4176780872df98971a146ee9f412d218d24bc0a509b509fda65feb57a223215a20a96d3eddf36db6020e1cdf180d20b45979010bed61203b5c0278b045715e6c8d58035659d8e1aca714985f6e545cbba1482f9c1919367cfa1009046a7ea20eedfed4ff54f4b6e35fb46bfb659cd8a74045b6d62b41df4ae6e536a47f8f8ee9d90a5c9a8ddb3fe2b26a0233ac2b370fad0e316a828f6d1dc91e6c10f3488765b506f4a83300ff3335a1e58890a40a4d3dee2999bd36628e170813ea741e2e0b387157a902ea674d6ff8907ab17b94f8a9820a1439eb71e4375ee8816094e552a9d5d02d6c0c2aa9a7da9d7a9d36998a46564d4a9712fdd8c06f448647214fd4afa108a5dcfa9bd0a3d46718a2497a8abac78dad435188d438d5a269a667bff9a07f6b92e41a4d4aba5287c56f48aa627d7225cccd0b855f171e9c9bfcccc83a22ad6385000fb17071e16a1152a8bbb9e4d2b029a2c585e1d1a69dadb8b50b3ebcc79aecbf2f6afa511da88d0aee20f9a765b7345303fd04ff0a200f78d4cb5fc56a8c4a801ddc40de43ad88f68d7c9a2ba7958d5c3b7d2105b5be419b90bb15d2e2922ee14f77dc801ff3a5840b2123f814f5853cf068ce6c35e2e4cf7d4d097bec46fa5128d035dcef155351eba11f733a31cc63b75275c907185952fee39316d4354d5e5e77e54b5d7d22dea38ef55383e4b36ef4ccbf72a5d91fe49a216b3a26c7887744d15361c7a58488c74d3def8e88eabd2d39f41f9e9fb8e2e388ca6c70984c3a707f0896da3908fecb6e61cdc688d2ece52ccc166df6b4dc4f8c59143e01f8f665c38d80f182109f2464f964a88efc6ca1079ffd7058844f429e9fc7ebaf2f5999615a86aa2b5bf876b37d4ab0e5d7caf56cf84b525fb7aa7151f6fe05ea4fc28fbae83e608f1b7916fc65f68c37e57636cf6d769056bf7c3029073d196deacfbd42cf0eb147ffbf99823bee76ffb5fcf9a1580596e81c43139648fb928480efb68b678e18c0793a82f777992da7b9cdb285508ef27e5e8da02c24c00dd89290e0175a130393085857be919d0cba717705dddf692fa3e6ba5a4d2310e7d4a061de591f640e3a3db77c6a225080c27d77482d6d2a9ad35567969bec64bd032ab115d31fc7a51089d6856ca25a463a2e4d1df67259e0971b04097ab93209dea22d0b17d3d444d06d13f7588a10b99c0476dbcb975d8d69b81e177c321f3ae197344299e40079d4581e4690422a5762a073261f34dbfdc5ad244512ef72dc968a4530dbc8d2c0a6eb43e7a672fdac1882c06153e32bbe257aa516d149d37b77fbfe7a4fead195c297337f2d951124481bfd322c2ae34b23911f0129c9c774005cbe7378d27385b1dc5b617810fb5c5bec680cea6489212a90f098aee7b572ba3d13b0e9183f0cff3b2a43388f12b0de74cf56213893dcb4fad841b33c23e4200d8cb71314aa87f5242e78c157fdce4a3561a2530f79ea5d2f2490e93fa944bc5e87fa89503ca34e37e686a514231119aeed761261c1b67dbe740ab35aac00f99093ffae636bdb64e6d0f1764c1905e751b145c1c801ddb11925239425a2c562544f3b14c6be9cd3a17c5da75846291dce6b9603ba90dc71dfd6502e1923fe810a08313ee2bb6414f8570faac1410737655aeb3aa2151f4a630624c3bdb618c0326d769f5fd8cd936bef9c032f800ccec73db9d9270532a5531326078bcfa0ca6ddd7fa886ad35e97ca49742fb89c64e54528681b1c7930d20abb86bfbe722ea0cd6c10d0f9f39919b2475ecadd4b020ad57e5a6caf2dd0c4c3e705386732bb9afe7cf1f532544f657ddac52cee7470032ac3bdaeb1d6d0d3629d270c42a07a3b79f0e61e9d5e4b2333ecf37d738174774ce1d708a8dbf9a8f1c53263d425352c45b13773c37a54fadd642ee4f5d9d70f44bef1a31ea613eb77466f64a72ab2146aa62c1d2b0e31928229bf89fbe46072194452a79a9ee644fd0a26384215ba9cf1b60d445d84ab942a25ee950d0ad948d359443ba52b39598af89f062d4f156ce1cb210fe2428aa8dd3f0230b3b3083b7be70d87c6b5d6d526f821f7f1418b2b42ccb1a741b29675a45f45817647b7f117d5f6b485a4835ed9f2f5331552e4811ca00534023a96a4866dfdb1dd2eac12b20b47ea6a61099cacce64e121e9e718783165ddae4454dc8c5273e771d0b04751714850fe523039a674b42a9d705e955d6619cacc3796c6bdf4ef4cb8968a38feef410fc8e0bfdad0cd2d35124e0fa3d4276824e47b250a213cb8083ce6048cc06d794e5073802930bf192b08ebc2e8e45c9c137e78c94fc01218428529e4eba0d339361f7439ced133be3305af410c95edfbbe2396493da35f552319c8f3ffa409c9efbc49b371b8126676930253b8efc3ce4e5a3d6f7dd109b8d28229f96dd6f771a0af5cb6b9ef42571b394cbf94fbc45ceaacd501b752fa897748b6bee03e86797281140a4e7dadd94b80f54e47c0d9efbba0c6c8922f18103cf1d609fee39c288cb9d876d96a39362eee65c87a46ebcde9be788cb76f4d954707f0a36fcd22c716df12c302bed0b4eb0d04f5d496e03f9b8e5315ce1a805fc0126e55dc04019e3a7c29b97082599dab653b9cfeb7a28df999c02a7e3999b7d098b7e5ed911ff51e178520ccbebc37957c70879fb117ff2c6625956fd27fe59f23331b497b6614ea388ec0bd78e1cbd2dc0c7c608d29dd5c7deb1c4af01c31543a4ac199cabd42c767ac61ecbab0a0890d7844e952bf6eb0677b88b79857e21766649d84860bc9dd2d47ca008b1100e3951ba7e108c0fb51ab3ba05dd41842122de979b3b83aef5311c7c4a2f4ec3108fe5c6cf0b816cc67d1952ee5ab47976a1a411bcd6831fd519c94177afb297c1fd0a55dbf69a8291962f0f8f626cd2a4ab2d44b7b9cd83a0154168b2fabb02950915d40f6235e5a8fe5b4c8394b9043d87f0bd3655e17f089c3b5e76a096980c5cbebde3dee20a6f2e248645624792a3c084c7a32b5d6651171daf5d21f3cc9a305b9ff3ad3d6576ae11694f4b970269fd500078baafde3c2e5eb7b10f4124b15c82e6a98d968b31e6b8522bb105e80296f9043174374b0c3a75242cb90d14f419bb2e9fd09be033707fdd455332981015d62f67f8a23143d3f7512acfc631d4f06ad421269c18edc3ee674672abb6e5027e0e76a87f3595836beb35b3faefd6891873e7e04579e3697a9c89cfbfa923d5671e08141cac53b1294ec7f619c37b4c5a9a5e9df69796d9aac9999b0d034f1717ca76cc092a20f5e5e86c06b14125a29793ffd04e068a8cf58ae0951249b93006b06d20c3136fb9f864ac864fdd7824660d45f7aa2b30fbf15d192e4dd104c8ba5c25b2e91ca285f73fd3c5441cf56a2c72bba4999a2cbf14cc8dc73e5db449b92a6b02d98a5be258d6ac743c73ffbc7140db47aab7d04ed635c90052344a2b79a7979113011e47a3c580f3a77729c3db142f513c28be13cc45556a37f938f6825025de24054c2e5e88ebc4039af5f8a0492261fc5158b65d57bd554e10f32359b0a05a9afb781eef9d5775ef53d6c3877c5efa39c632af00096b6203101b4a66459196e6782491dd7f5e89b9365eccf70a2f7a92fbde566ac6da00f57b13c43e8b740374ffd41fbeab6b6fffb6f07d559f2e738666be44e40c93c2a3c67f39590ec220e4f70920f9be0899216a3e4d4997d665929b4503026723278c66b0023c2bf68fa4f2263e1503a0b5dca48ac53980b1d1360e25194c5302901de048c75e7faba04375cddfa728de26700a886dbbe64b46ef33b0e0385cbcace6d7cbf146863bf32ef6628e16aa1b6b8a1099bf3734fd272ca08b005ce0abce65919c087abc3208e60886b1e9f3e305993b413231f961f28cd905e2008b6a7528c24b8561ae18520700acf3a782cf751c0f115f32aff4597e51d41de9b973518ece4ce0a1c8794ef08337bbc5f32b4a80e08c9ecfc53e9c7f8f581c6f0750c4263a32b2a187bf803114c972cbb1a0f6767405895fd59b6c1ef6145606d18d4d7d8a7f63e78865764719d4d13f3aaaf95b2e2ea7696db518cb3a9b5357b4836e0323a58cfa3705a1b126ec3f871ab3d3ad736a6182d9f65302b15facc83ccd9645ba279640101a82eda0721639ce4605fbd84b5022c6f98b63eed3cadeb6d676b3a278085fa01eaa8b3af90dcdc1fc10a4e143fbcf9119225d678a2611cf385feb71396baf637c78e84b038ec99220846712d6bcffe4dfc85daff556f7f26dd23baace28c5d6ce8ea3550401a3bb6dc180e1961c2a1ed7edf31ca7d5f7bcd17e42b3c8d829768f4c3add8d0ef2aa3e58a0e1e4a1d4cb7bf3ac52140ba77b2db49f209be250cf39422d69012f2cfb1cca357854e696675689e7d4cc907dd9bcf59f85c9efb25d5700e97bf2cab90a8396bd296942d57ed201341923ece14519e1c237c558e48d52f8fd8ae46a2d64fd3eb679845f186e890a2f93dc898849cee9a5cb30a66debd79ad81a689600a6f432affd5883e5d2d60528d938eeb954368dc8c47e5095053f8717bed1c6c92d030308093869a4386372ce6ddb952af10b3e999810f01046051e2accb284ed83a4306d41b6690a0b9bd36ea6270523ac977c96da9b0d664ab2f09fd8ad58f427524b3e1b551a5dd8f9b7a826cdc759e375e85ee07ef0ed7fe38ec56714ab63a487a3f91a86f6360d079009741244243220e2406e2f533c41f1495a0c7b04b277deeb3ca3ee7519244fece0f2a724192522fae9c84eacc95d76c0cc1d52ed671da271676bde2f7dbb2d3eed46febfbf18e6a2c9733f562b1eee857a3e3ede07f28ce707c6e87dea4e4a068cc58b9f7c99f67a5e1383e7c802c2f802c3815f0bb2e8acac499ff8d53a00c42e12d04bd834ecd2161dbeea26a59ea8f461ecd8f8cb6042b3686718c52afbf86fa35f3d6856144a8ff632d5dd73cc08ad8db3d445a86e39bba7c066407d9623cfeb9afc939a07643a31a22332f9e5a7bcab88e978e68d02238c5e69cdce59d6ad701601e06d508f93546f6aeda475f6904fde8108e2173c998a738bc379d171a6c552c5e53c6a5d39d30d05640ff785d6df27238c37c7397c26b254d82c77953a5fd3e108a3cf3d7c320d9b2ca8e4d5eefdf5596954079959e58d4d6242c6a1e6a40bcbc12ff9a0f905d394adebb8574710bb8b36d342cc915b86ddf85949382a368cfeb53d74383ea3117a6e64fc9a7dcbfc415b122353d0dd11af00dc79b8738bb9e23b58c963abbe29b4f4813c0001643a146cbd03bf96fed0192248c2c35118252efa0e53a3ce9b9efcc6ecc138608df76ce2106e70324524a4c32aceb95170412d47cacd8915dfe38a5be4569429adb6b331d8ee16513481ea79ff082ae308b075cb1a7174200f9a163a2456b3ab57eaaff252fd0272319a52ad31d9988455d580ea79fa055b9f24f8d8193c1783f1158b9a3b05c4f3e0b065d37fed72c3fc32e72c65b1ad56f306dabc2f8120422dca0eafeda2ee74b686ac8315ae5a10405b11177a52ec70cfc2145cf3c06e44427a8199e75eef63176f8f42af86aef7e6b087220438435779e93e40f2746228f3a98ceeb494485da7ed9688ba10f1f933d5c1e2bfec326985eed0fea807ac6e95c99924d1dd69b2dc734acba1d7c382dc2d49bfe9e93a35783544fc8114ad63cd7d3eb2cba4f40129b3249213458423343997303eb9eb39c57f22b11a05c5c6ff16d64f0e9557c7140fbc626ae4c468d08d22da0ad895e4f20ef2b2df65b5f6af38f820170905832ffb6ab3352ff4a2359a8523fabffac582773d785dbede8152563cfc717aadb3e208b81afe91a59dd7e436947aea6a69fb4a5b87f17bafe58ce0ed2aba8480e7beba3ce023b4478a3becafa207e26530d0fad5584716ba91b37bb1313e915f7d2a8261d931026b15d63668e31e328bc887fb436fdb2a8f146a9901b68a4b6a02b9e3cf3cc30670bf3b33eace4a554e7f94de2e450a218dfc16ab571139fd6116f160bda1463b08f4df77bdca08b51de49c25ee6e709647a74c2539d7aa31b518458be59d370a943537644a6ce5ec8a95e2451c428af34cb47fb922807772d6754ac7bf97220f931ee7ac293d4e6604e22bbe2077d5c2ed8235c999921e5b55ec65a6a40573b496104491c2a1bebc2d77cd13a364dd7fdabee2c91782fb35b3bc1a9b5b8eb8940d97e2c7bf30b35954b53ac80d9ffe9474c92b4a14e9baac6082fe381e996d187a3456b07770c8b82b39195dd79fd5ab5c1f53cf2a1cc929fcdf74ef95ac1ddc5c7404ee73d87b731161dd4799daef2ee14010bacfc2a338d9001324293d273a34b561d44cee27f497cdfb17bcd7a789b4d9c6bf6e41d54395b35d9871c335cc939711f45b087ac73eebf740b91c9b66372b0a2f8e30dbf4a357b8aee7e4a60de98789d136ddc065672a56453720372ef8d24f9db80623a6927bb8c9f4081468b7152dfd58d +Output = 19b6908a72ba50d6cdb85e22b3b8070b + +Len = 51368 +Msg = c44b267266af57018ff586b5f290a6c4bb8fdad3d0d0dcc456709fcf788533d46310eaef952db94e588de03f8926cd8d9e293e0de835a77414cad36bf800cde68d7901b137949f4b4de340f8d5e0cc128fdb9ba03637da2a02d631cb71d2a287476eb5dfd34cd2a375e0ee085d246afa958d37b3423e3f8d277d00146a637a609bd74ca2f2bd1afcd86a3196a95b6eeeb9275c6f95b39c468ba58a716c1b1d18909c0f211b4f3eff7f6a53ca42eea195029250fcb6fcbafc36371508fe6253582ea54685d66a085371c99acdaf43cb9878b45b812d836158311cea01a8a0e3c87eda39f5ab763ea0b66d4fc778c4b49e2376c72683af5801833a5185f23d960f87242f9a23dba9905740b9df26d823500cc0da153fe769a0347b91bc65a134d65269729bc50111c95b29223e40e6e1563a7bde73e9955add4dc6f4cd883485c4e59348211a503ef3ca0fd00c4e58b757b58d196b0920f45fd402c0e0e35f50824a88fa54a931f7b7addc0c70d9956afb86e0d42228f0ffcfd4193e1fff885fb78932cf5bfa0a05bd0b771e926805c5ebb45b56c3cd6d43d452f2b6b06319780ca877115f954431acecc84e9b83108fcf47e5e97481ff8817587570bb97786429b14106870348412c58b7e4b3b21e8f4e4868d35dcb0e9540ed8ab369240febb5ab77f8fccb7dfde7582c27017e978e11becb5da8330233f61a19c9e19144d4599f012de5754a2f82f30f60ae6ee354c0b1f6cf7a41432ae1e60af84c6681e9bc94c7ee6b89199da83248d8e10b6aa90229d071fe7e3942aa594589d22c2df08792b082b6905110ff1bbfd4c3db95557f2f438a59714c42f97bb3c49a6aafb261a2a633ed1259502fb95d9f7c68ca1fe0ca3764b6a3e5f475553af0cda871f7f3ca914739959b25e1110880333a72d1cd0392453b9a6a1ec7eec356926fda86e4145707c1a37e57bd2da9be11d7f631ede13d7610e04589974e373f12455229dd88e1bbaec36aad6a1429a23dc9bc08e96c203f5efddcfd8c7e7cf175b541a6862d17ab277ec7f191ce6e74df982e1d68ac23e74d7799424e857cb5e2440fc6860be11e555afee9d964627c21cab33a13aa2fb804d8e31f866b1dd2817c2551862a285e5fe1755eebddec0129e9b225926d2af8aca7215ddc3949927be4e90f2d93d2b16e9b95176e41f34d1f7d95a78cfdfef06c6dbdc4f7f6e73bf804c4c8244dc960aa0fc6de0b9861a62c0cc388aa6391e86db11e1c80aadf161f651f431260f3b23ac571796aeb1d557820a49093a6cd28d6fbac2d1e5d196b198e6049a0d53af14745fcb132410fa12a40a087efce98f7d0d4cfbf7a187c820e07f1a276b38563f818d14e0ba31fd46af51f3468e4dc9f83c2ef993be2f2a2255938163b02bb5276c556189f18353562c58960a4ee8066164f74840ac46314860b9f6d97cac604e8d4f5d793a8390b373b46d34bf76c95b203c6488fc5b5215aa58c6e34148dc277cd1552925b139f14dcbe55060488737e654dad71edd10fc9b069e2b7e7f8d34b391d52423aab391f325aae7d1fbc4aa3fd727b59449f26fab39d91cb4cef818ba0779f4b4ce92080c480a5574ff06048539b79eed307b016369043164a5a1260888a01569ab69e601a99043c9d0cff96f03270d9a1f2f344c1aac040e921cff17bbe400b2af8f9e7bd0e91d60ff86db55b9d28c1b64638addd53cff2312d0067007b231106997a3c344515cab09cf2cc1c46694f1bedc77811f33ad42b64ede9a0297311367f698807a857c385e0d803bc93fb2bd7cde8cee6f2c78ddeafdda0e130f8b2c0940ef2bf9e216798ad6583c2eea5fcf2d0e3d7e3b83fc653f71ab34ef97a9daebeb0a3e38e395ef0e9e374b6be306a75ddffba90ad69269022ea4b6ceac17908e799c2fbe26851957e98fe216a651f67db86a0753a0f569f199690c56c94efd4f60f788f0176e89052cd47895c09c0d0b4beb01bc5f7fd88c565a9e0e8bda71cd35bed28532bcae84fc97a79fbe7f8b94ff01309b8eac4510da1bf45c40248e766c5484d404fa0a55cd6bd76afc66c299463f0c779b05304d890f97d6a2c7b3e9794b28730a911d0603a380ae06dc7286b6170de721151a8107c800f4003e7284e12525d8b02c66f453e15bcf6a5afbebc30bbd509d566469cab7b83b04e35ad73855157b922668df22a79145936ccf46f19f834a8c33be56466136220d70cd5ee36d6fd22d19a2f4f468e9b72e8c8d16c645084b6a5788d50f47032fa6415a9a76d0ad82fd70a5f44d97cd8a783485d9b59ea4b9b41c546489fb97ea5bef7308672146f46fb5d24b92d6b5461cef7a1e540ef14be5fc81934ad17cb89ad5b72748c1d4ad1063c879688829509927aa43060866489c92c0dfc67b1a30ef8e97857044df236c14e8ec333e92505977c6f6602d8c56346972b8815b08d9c6948491922cbeedff13c432876c98cbfa5a3086d6e0cbeb49db27ac0ff3b129bc621eda02ec0c63261adaeae984a509d8497792fec4bd8e59724028d6c7bb873d81b6dd670530399d84ad63be393fb09fb01ca92c4bd995cfc95cbd5a6970a8c67dfd0a130ad2c7b1dbbc3b89dcd156ad48901803d898b8294afde82f3b88d4f3b141eebb5f5c93ff9a77d0e0f1f2428d5d628e0a0d836bf2617427a9c06cb221b63609b4854634f34b60d2381b2b2abc791469935d1217c7c78ffa7e8a84b6ed0749d9931f2811296917ae13bad465a71616495449dd41f5c781eef21c7959c23eeddcdb8f6abf0e7e0cc2f8439699f9def89bb1563d7128fbfa63c8d8a3212d97a281f25896951ee4a0bf4a67ea1e111e3bdf3f04cb3bbddf69f75761aa93abdbf8777bfd2449d7478401ae7a3798996e408251c80ef840dc51182229e827b966601bdcffac33c4112738890d176fdf49a7339e22613d4e9d3054bda3f463c2b169fd99d286f971dbfaa26e82f22a6f3ae05188a66a71237c982b7e5257ce7457868b37185ce14d027efdc39e604ec5bc8c7a85c6934a8c04e91b08d77ace3ac33643393396a1c21f34992c91da438f38fbfd29f5742fd4c0b391e185e5e9828f09b424a6bcb18d9cbc130e2fd8bf084acf77f9d585779a3a882e7cf011b6e815716c6e043776ec0565d9ecaae407ed6c677959c92fd848ccc74f4fa896acd7e0fdca89beaf8889e3d27c4c9574b48b18645fee530bb86d01f182de11dd41de9c1f5d1c488d6cc3b27278b292035b8dd946ba0c05819e7374b757acbe6e0c688146a28a24497a45fbd64d9303285342197f1657433a00f89f593c4020b163024b142947f47c577d1a7e69828b5c3264738dd334be8d7678ec77bf1ccb5fec3843f85ffa1b9e7ac5a8cb5ae57d078f5151e39f48b9f47550e6934eb720c21e872673b5051c186adc215da0506ac2b0954f10d8f7d827642d083c6983b370605b4d16d6fd78729e1d1e95c837c7164cacb5b5fec69b6ee979dbc3ae2715f3584132423437b3458b04eb143120346aba0440239f3976637ba3dbc97b05aab37cb570963b685f09c8203149799e15389f3858ea28c4eb8d715782ce5e940449344482737af3ce27bbfb6bb61ff5fc1852b58a8a39fd8d4580e16b42d776951d155ad27a617ea337fcf304da92ec5b828b083f842147be3420fdefb76411efb7a6850b0b8d4d50a301b3973750d5b5ff8eace2589d3800d1b7f99aac82fa66a15e4f76b76cf4590150999d5cf8468df7f4203d880c42f796dc60f682b294bc52a316bffe7f084edb602171abe7b3660451ee8b82ed0cf50bf4c08dea817533541b774151420d9489b6f7cea4bda0b09d1e7476e9bddaab99a784cb446e107e1e3ddd95503458bc94db690ef7c893002ab06e6a1cfd406dd85b4a2910e70aff2970d6466be48e39a53411bce5b71ed745be18dfad39e2ce40868d41d06aa938fe6afdbf14d1229e03576e532f078898769e20620ae2164f5abfaa8013878fae15729079db68aa5c67cbfb5c142874e625e7018bd6847f538f7d3e7e5acc32e0f72e4b01303979e71af8355235987822ec2f28a760af729d6735b597069717542bf489efb3c235e0c56298b013d5e6e121bd225f59a1946f7a8fac54b776b18a2c7be98fc67152bbdf91b2003f7f65a37f377b1e2239495c21c19f41ede9a5e5611ac68be8e554eac21c0dcd08d358ec4d149f6e4aa525e60591eaf90a6e59187257bd4eab8ca0f03558086110a0551e23eb0bba4393ae9f9e773bc49d833f75c8c94a528ee5eb5e71ec3e86d734dedb9c114cacad7347db44c7ee3f27c6edafecd5da21f37f88a8203f1c88dd2f5a870e2dde9fd8d2863b912a9ee33987d8094704095789b80d4fc8c72ef182ee4cb302973e1e562fee431c05ba3b336483247fea444da22dfdc7d41af25b790049d201f3f792b5e9e4644dffbcc1b5db7373ffef179eed5fbea2cab0e3112ff3c68694ba77b7789f1d119f6f32f1216b2d9a3f88efa5cbbbd453151f8ddd0837472323514ad70ecddcfd98daa954168215e9b74e58fcbdc0d37b5bbd6ef9a249405a466efd9bf8e4b86ab2d88c54f5bec0f51fb5d02e341d406e0720e3017eb8567e7659ec50c77243fb85cf589e5f7fb34ea145e1a4df1f8fbd9fd0a68f0df2de022ba8b3afeb04e4227a559a7ab4536159148509eb1f4635ec9e4305fcc0975ba7dee1cff3d40b3d7218d1ce8484c86f96c1e9c57b653fb77d7b0eadc546f453b2188bbde722f3a46ce9ea6146514d12aa31ea80d0515aa8d2ce89fa9301b86ad3610cf9d4586cad6555f60f3a9a601ee5fd0dd87464257eaef14b68c07151e56e30fc0055d4c4dd1df58b04cbd09fc8ec8bda38f20e3ead449bd994e8163f77f510cf5de6389aa7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9239a14b690f363f7813f658364409e617261a3608e012108700f20d002d789920a1be63b0a666ac7649d316dc2d7c816b56ef0149d579f11c8ae4845de955ced7c3f11f81f48620344485787cda78651a7b3da33aaef93fac0ae8e9f4ae1c7c2bf2e1c539642549367675f3b4d59dffa8e55e8257e7404aba0377b470f63d1f91c0f8fb639fb475f1623d2f00994dcfab37fa353e18cfb0bb07096a3f5c2827adb0af388ce1c434e98a4370dca0184375e5791239adf7f043882671cc3a7e22d4449cf311e4c504a371116fc5848df9ad7053cfe7316987d7f95761b43b9fafa9ff1ab19f134773b3992f8247b10f50b65b22c4d32d94e5fcecf4c063ba1d1ca332d0fa80f7bbf07e75163edfb01cf735186e776a0cfaa906d5b704674066f83492384463fca31978973e2bf9fc474b8e4a8f7e385a1b3f9a45f6a44b691dd0f29fb915b4ac9d3d36723fa023001ecc46341e4faa9f77282bb04c367c8ea22541bdebf4ff91fafa3c887351e775f407d19783425d377ed14f971021674b8463c67f4958a1275cdf0f6c71a7c398777cd4d7671cbcdcc2e95a7cfafbb80a352ae54649b745d7233a0370c31824121999b466222535d9c3def0d4552bdb5554d912b575975a4bfeb9dd47e039956d4afce4d65d0274c90200873fc7484db733fcf35f458f6ad03fdcd154417293f48bf50aaa702ae614fe1ca211b9c78baa8314fb7641f5d41e76f1a4187f59bc526d408a54f40506682881b5ecb5301199929f9fcce361428134b6ba26e2655b016f3de8686137521d01be574342087c2f132b54b5b26812a2e99a77e2231c1c8bf26ba947301855ce2a40fa97d8b727b56516beb32760e0fe05fb81eca9e46d4ca7484183f94e8dd5f2a8146cf1c2a0d719003257dae229ed3a785ca8ff64b9edee6245a1154076df0b62392515c1740e9f66541615724a0ac78f6c999c03aeca48283a212c848d33d4fddd72cd2a1db668b7a8708f87ede16dbf3650f847a87c4528738697814d9edfd975b870731a89258283e9a19971db7d664e419cb7337e55e196340ecd445a8c839688b812d6d126458b03e42d7283774318fe11b8dc3afac226dbcadeee018b9ab445fcafff391b8f3231dfca6c63fba43ae8cff30f5cc47889c0742cc72e3d7d5372d6a0d02b55adfe05fce6cbe77b2808945fcc493e13435394933d4c3b12b9f8b1ae7c1622654062f2b4191d98663d167329cb166997c0f8ba909709a2bbbf28650cb82da8dae4e57a9dc7ddf15d51e927b665f36992800dc504b07c0f891b472f79db733926ea1a203279998cb11505049e237cb8c40ef72668100fec1b5cf9536e6ca35dc9ee6565eaa4bcb511e4deac4999fec18cac3971233c51a2e2d2938362d22a8144505bce5eefc424e04ffa813120063e5d066907ceabddce603aca21ffa2754e16ce51cbd7a15c36bcc4dd15fd5c3f69c59bfa8cd2d500e923f3f1d18d64101ec1a70be11d6fc17507d1eafcf6b4e6ee56eb6262d85e676d9e7c9ef4947d876dd578de9078b1b06a41f5c888c5b0b9267163351c379e7de64053461dbd7547c5b2b24e7c720d9570fbbeea5bd2d602ccb591e73b891bb0cdba067bbf60e1ddb0e9f1efe7a1d9dd43b57bc4e8b6ab702b83f5fd23355cbc8e4c14a45c1739b5b9fba6177480bd143cdfeaeca1e9977ded7d1dfb65d4e7ddc2a6fc547658e37c3b685d69a5870dc6d70b5ac639d420886d01684695e033a0e53b2c0080ae757ddfa0665aed3d7261aca869e5f30eed2c24a1637325dfc6b28089223d1d607656f1447f7fde0c5171183786c0701233d5ceedae15882c276f0f018d6eaf475c742ab5072cda8c4171c4493fea3356cb11a63696824f7dcc52fb44bc19b8ab9e71e6827c067535b8e01b5e03c7bf74e96c651ccb6dee1d2beacfb34cd2cc15c2bcbf3d6c7130813e4897d660fd66d5354266209b1ce6b2dcb316ed9e0e4c0e5fd10f3657118ef72817c442e5dfebf0253033c2a433bba745384b544e30cb0dcc4b611daa4c03102cda2b43e103916e3fb248736536ff92fbe6e777dbfecb8c9e786f43f4a51f64b31c373a00ed09a7fb553ec36c8b04ee773b75c8a5acc0135d045449b4a1465d413a6295c410b725de75612318c47e122dc270e759ef4b2a8e6beabf78c51a725dc147f788f31c706fbf6a32f867cdb6b6086324672abf4a891b8cf5af850e3c6f5d51cfee28cc00057fb44399e966447679b7303bd3befbf39fa58cc76584240c4b1aaf5216286d5652d9f55bcdfa340592f76b669eaca74464def56eeb2ec19b370ce6634fc400c8b545c8ec89dc1dd9f0ae6665d01ae4f20793cfe48a708dc29d9325802a2172e333723e9aa19e6a69ff4691c81c7c2d93046e6ce6c7dbf0e8eb57ed3759b33c2c49f9a704b9b3824c2b5a7dfbd862f99dc7c96ce427c383949cc5ae07431bb50a6546c2a916ae2de70144ab7f9841c188de2f305b3ee9ce4c4e66c85e8aad761401e3f1f65d00a5d12dbf7ac1d0bb2dcac41a67ba519129866cb5fccb74fb17cfcc5bc58b013d9270ed058c71161186f9f6156380147c3dc9742d9bdca686e2941108adc587c76c6cebc150fbdce7759d00aac45b0bed638bf15825f093d39f078c851b3475309c2b866d68d0a9cf720a5044fa999c67434460a04ba5c15385a07b5bbe663e0bca136984247de11bf4e8816e96ca3a9c55995ea04d6ac3a93ee579f6e7c966ab5edaf1801472377f86ae00a1f97b8adf02e127c2dbcdff27334d04e127dc63b1c2d8bafbc95bf14c9fd15a69b30bf1c1e3c268a2473df8600b5da8a50f2dd991aea31251b379c315b8e8fb305429f3c760939da9403923e61f8de1ad0e2c2cdd7ab0b42c537a015d6a5b5f804d24256211fb4362375e261bf8642c739555d1f7af880ce639cb50a61cbf13f41ea8fb14606fd6479d0b63941e57059335396d62b59f8909c6fc2562486aa4e64916e970e447e2c3f1cf50c109fce9868e5553c1457db5119b7ae42486149ee14d0c74ea1639e581d618923533cc64b7d1282975a7992d9817c6316f5e134e7f9ae821f26ebc4aebaa859c63342bf3c1de30530284883f07dc7c81a5290d401bc338852c5625af8bff84d3cd83b2131ee5ec64fa44b175eb59fc59688f591040567bf2fa852c7fcd35a4dcf69ae53f3988dae3cf60ab6ead00c42d1be98d4b77b5310fef44273839fd541c50e24bf4ac478a33e470dc95e771627141d0203e3c7fe6306d4bbc654cb711167f124ccfd1a268e9ebfddb68051c65ca7cdba88509170a1906e442839fe36a6fd3736e2d6419f58a58501e7190723cad2f548c9c680b2b0e4ea6501f8e02de6cf0be2699be2ebe798c201c2f0403557ddbe35300d3ccb7a4a71a6b95a1a5dba2493b1c915a41325c29d66b1cfa505ec0f4f0823ec6ec3e60a2b90b82754cf0a46f72a6b0c301ef96a3fb61b7cdd9a72b1d1490c2dbea3db6b3faa66273589bf7b60d6b5482d144ad7cf7c68c091fdcf0b6b815296d37243b6d57c2c216695bf0cf63b109044fd0252763dff636934ed6546375df056380534178f70df8ffbf441e0e3e5ad1de208235c834a2d0c49b20789f39502eefd092a2b6a9b2757c1456147569a685fca4492a8d5b0e6234308385d3d629644ca37e3399616c266f199b6521a9987b2be9ee783bc9955552bd642ea9e2c72ffa677a66a9948786592da862ab948d2c0c5fe6914bf6d434b08046b579d5b5fc89ab1bae5fd9810fcadef1af6bb11132ee74c6184669578ade279fccdc3572547adcd68d3497054d249c0badfa65b10a72c7017fa3977bc22c21f3c7396888c23e7b3f85c06370a906e35ad0d048d92d19d52d39fc17cd752afdd7572a0575c05504bb2a7bb54fbdd24363da75c11615441dbdd9a850c90e6b19bedf1692a5c94f17eddddf031ef6274abb0d5374e45d921f17c140d90b086d041ee19776a5579d132c3252e35aec7657c4fc11cac0608437dfa35e26e00d915b8be115480105bf850aaa8fbc8ffb30091629093936b88b1689d248b10458887e6a50288d252e36fc1db8ee252abce4cd2316d246b3e027398ae0a90dc4a3a2eb4ed1499cae6b93d6b9efe683b7bc15128037e589c451d8ff7740e7a3cd698130adc6e11 +Output = f7fe9580af6332b5dd2a7abe46df67ad + +Len = 52720 +Msg = 48ef65f0fc7dff9dc7ec83d701c1b95b48b4c4cc80aa494a19e3d3479075769639f9b3c53b849caddcd93847ffdc29c2ea4a8cd24da8214a8079aced0db49b816e75e82618f341e6b8b2678dbcfad4bb1587a0373b82a58672b0e2bd4dea1d9370cdccba99b23670e2e0d6514001006f50d3c7a453201d2776f03c5e58fd45f3c667272ac9a9c372e2cc4e3a94dbf6052396c8c19c6ad15415a1837936d75bcaf8adc11dadc1301441dd96f0bf6efea616386c351e490836d62b7fb5f05ea73f8f05623c4fe0c480867a781cc9a45f7ab2217ba9e1a30cf541f7f8bb8c7c707b12d9d12fb6efc8db390dba66bb6363a87ebabdc4ee6223b8de6bb632151800a60990d79dead78450e2fd25759c9550590369f92f4c6c96a736f080c390199de7fc923c2ff47e40040ab281f274216fb4c797f99103abadecd0ef2016076990667447c88cdbce4422389496844bef08e254ad83931c05afac34ce5cd281ef214cf917425ca7aed7d0f50b2bd42ae7630a321160dd9e64e612ebf7fd9f079397c1116a744960054336c87f0a8918f1c755e72d581691af98437cd0cb27a03d3cec46a824f90fbdce7e3958f94c1ef57eebfd6832e6fdce0e6a6fc38d0f54d556f61f391b14bcbdc1cdd0fec1c543dbcef3fc29b8f7eba890ad4d360d022b432e06248521436ded644e16d92a9b8f8b00956adab0ee622765349d9311a62e6f0c45def5fe2e2c35fe269251fb770aed5bfbd1e2e3766b32d728e74162a3644237dbd4ef797c007dd980cdcffe00bdea294ab8a919350db12cb1b4a8c8a2d6a2f9ef8edc5bd5f2ad3b824db9f9dfaf68b0ada89719d3508dadf68a300a4b8a7898a995256ce308ad6d549c79b5bbe8503a4a2814adf93caca220f441f2458aad5d327030744b4c65b71f4275fa3d718b0d49c0889b4fdaf7535677434639de2790b2a7673bb8c6be600bc5178f0d510071d3f85bac7c315607c19d9ecfce8cd07950c33188d07d9eb23fafc63ed29096b01059f5a82949b20889edba55ad9e8f60354bf5253b79eff3e487e9cd34373711276abe57fd2bf19cd5ef00a07d1b4b8c89c71dd8a2c2976c21d6ea05dd4dcadb40b31f81a1defd0ccd2cd677e70cee4673c0106aad6180651f2330ae72da365785bd7eedbc6abca09b2ba5a393785fd61bbd36a3035d902505f623909ee765cd1c0f4464f7d8189f6474d6ed28678684aa46f74a4dbeb1f6fcd72b72077a3e842d32daaefa2ff8535390cf1a4fe24b9848e3bb29328cca1e2c4fb01e559ea9c6e1aca6936c7743028d06faf5afef96591c1dea065bd0c2e6bce51a5a31588ed95f0712dbf5b9e3f53d5ebe45f1994f104f7becaa6f928396d522d1ef43b2d506d0ca854d3efcbf74892182d1bce55e05088629dd17d8f4769e8d3da532b367955c7e67b2ef48bfc699d6b062b9ddab8070c40a66fbacfdce40aec743a6632ace2aaa1fd2b0a5cb359605afc08f881fc9afbff50fc21586e5e20dd59349cb07f963d61775271ccb07a837e7b3e7eea027ecff539e151c7704ad33d15bc0f2e65d2e8bb663ffb4a785f6f2c003691817e4500a8ddc9bc7b873c9a72164b6e1b043b44f6463de7647f7a9c1a277bc0d6d46026a0991fd20327a5df12f76d19e4bf31dad893f6d6894a5e829f5d989d588962aa73185e22fcb61919a6159b933a1b5902a8dbd539474d6dcb421ef7779521bf2476c7ff3fb6c6f8e2921d417a799d13550d9a63802d0d4ade98e822f00b21f80d42149d88cfeed7c26d6b093031a8e35a6d3c1c6b991e58250a45958728fe8fcd6baa938ea67238319e7b5d44e0e36b8b4e4d8a3c19d528372cc3e9bd8d3bf8fd39e68bb1e9159c98bbeab83905c0fe50374b17722de63dad66cf7a03965ec6155354e0a2f62d77904c25a47d2ec62e51aec16ebe43b5fac05ee4d0e9d2db799e3e722cd25c4e4b90a5b8ac91ba676e081b2cda6109b902485b8088e0c13685f061caeab089ecab127f102b1737295fdc1309e51aee83c67e034f0c78fff46dd443cb84de1d7cf8be2ec8ba6e238056461cd5394c409aca09dc8cc622dd99a3828af095bb7593c6cc3b5ed5071e00f3ee9f0b2165ce628f545de6606ef89ac9b37dd697c930b597e53b2f0582752fbb3e20385807d67f78e5fdd845cdbf7c42cfb2f9f587cd56de9194c5b660d7611ead36d927930746394732def0bfc0c2a13fb0b75987a9fc2d59eebf8212934990c4496a2aa7cf5b22f0a366fbc57ae2579bfdab1e495519e6968f88d328575da40bde67cbb69d22d86ab5fcc17f6c6ff86d0051ce3d6d44acd01d9e340291f1dafc7c5ea53fff31cc2de12cdc3e03dfe61b5f27e3e440e0e2af1f8c2f41b1caa80e99bb21a4740c70a2bb73b691df96b33f60b9f9de8e831a8bebcf2f66552c9dcacd09dba48a275871bb4deb0b6e48e231cb746a6c84afd6ef28c3aed0fabc2eb97cc73d80aff706135727e41b2e5ae5aae5d3d04ee1db8a514d263821f0edcd432f7fc1f9641febf0159e3c319e314ff34674a5d6247ab74adf5365c9f6260c005baff34f34e68c908d2d4dff3c8093b363c365a2ab21e04445d7824969196d6997b46c22910f6a9d1431b3d497bd3363d44c8a25044587c6172f4810d82c63f75a3976f416def84e5157e8422e4ba17d0e7cadedce7a3058d9b711c0b1d3822219bbbe3424f9d85cab1c65d87eb0807788d02b5d48245c74e43b69c984a34a826ca7ac7349d46d10a7dbb6f7f78032dbc9e3ad042fd87e92fcf8caabcf101f90b979bc3203f33932de324631273f5b2248238d62d40b194b5a8bbee80fae83c586ce87e0d1cacf1b94acae048c424bd38a1c5709e320bef6a360b0feb4d319a96b027a1031ef813381a768f2a53d9778164a8469cbddd23d5e144b606d3243a4cca21d30a2c612231baee17bf085b078631abff2fc86e577e122d8ad872084502249ebd2b2e2d462d94fa2210ccf496cf7194435f3c07b4ee2f8f34691327e2402566076d0da5a6b30f64552385ea4ce58d2cbc35fff062aca2325bc19fc73a8f354058d9af116b4b93f35a021d86504feb3b10b8fa718840d1dea8e9fc317476bcf55875fdb9bc7d886ed9b57a10cb95f589e7f115d24e33265bc2e814adb97e224eb04bdfe4c2d2579e794286d0e44012ddeae6395add0c077053c6cd82312dd01008633edca5d1664be3b3270dc4d7a900c0a14c525d53dee7008b11fa030e2c0607c300e78c031e3cbf10471192e224bb122a3702f69112867340c75b58a69ff756750f4e9feee73bb45fcd2277eaead48887e3b2ce4c0b1654edd7ee577f92aa9d815159081c2a0e6aaaa1899b766313c9c237aa100f315e4a9828fb29206be883edb04fec154d7e8af8ab8e250ef7427ee31a31e25fec28fe4ba4caf5119479b0c3137a765fba53bc52d3783e3a0e274ef076916cc6a43a180d32a2e4db7325cd0b6120cb84d755a7bf01910d83108ce2f33210d7cbc15d3fe7bacd1e0572b482cb848a160c0e4cf4471d1fbb706537e1f336f74bf7ab591bdf2591ca17f7ed760d63007d7dc6ff4af20f6b6f8a75f0f4f96a8eefd0caf65500593710996c9952d8e6c92861663752c9bfbd5257a981c30cb61cece087fc954f3f0619143880bd35f52f403f58bcb4d3155d8c6167b1f53402eb6aaf483282d6bf480d10c36a602a7878eda003561718fa92443018473379364190c37661c59cc2431413751fe2c257ed560bcfcd23a154a5a24a250c24e43a6786a67a5106a92e4154a7b666ed027ad6a40824e881750ddecf39f4c8717cf6a575e0bacaec06ed88f853ee0926f4ca7bfe1f6a70d99c0b85f385ef42c14a524285f7a0941fbae56026a085ce379f2d238dd9092ed21f38e235b47d44bd543788dd75937648cd00130614e37ec80b8c1879bd69e715057a3dbe5005940da48bbda6e2fa3a0f4824e8c23970e18041d0a0e954f3664a56bbddb6e1f1fb5842382a07c43fa61b323b267f9795be0848df0405240d72181be20b44eda8414634241729a5c98315932c1668b4b8de0728a38cf7b720d2275bd70f90fe922e808439cb330c0098a473df00a21a430a26ea037fe495954f201e8231c39b178aae3a5d904e824caf71db3c2c58519c080d95e627f744d2b1ab6ccbb9054d9f1c785c7aaca28e158e23d22be1b0df2da0633136ca554e41c06f4e9aee7d9a92ad84f4776856b8c3fe63619468d24e5c9cd1c7dab1293b494315cbd719540d58057d093c0c9388bec7d98f5f09e72693c3fe5dba249991510444ec6a82b12b59ec09a4b1e080876fb12c64740c17ed39dc93febe6acddac3c9a5b83b71bd7efe2ad0ccbe2c463c3c8405e8bbb9892db5b037afcecdee9d065be037322ea08dad867b894b370c2f8e070b241d58666d7107937ad293246382829c71380081e0cfcab2e3404afbe9ce03e71f8030d536d4a84e66b20596b39f05816f33318800cdbc1ce385ad3bf1624140e1ce8aff0f465d117b566b6d15c5ae38380d07df740d25629002a8f3cfb486bf73edae0c802fec84c2a60dd0115c4369d4accbabc4f9cc2cf3a0834b0c2a9d0cdcc7e42311f81e4e428b32e830cc8dbc4cfac41779f87b211245856c2f2e4dce2442746c4b07bb1804eb24ddf97d54d7a7dd3c481a71f8e9f7daf77ec0275dad5448a510b5c58b890eb029d6f5d86065ed3f79692fce0c2daa4821a8487d965373c0c137d89a554a6ac08afbaa43780c2607c4a040767f9531754b134e97c06589910e083aefe30220058f75a22766745b1d6515d6d119c8964bbde75adfa38e9fa5d5ac652afb5a36657f6c65edf0469469a4f27847a26fe1b1be4bf4bc0674bbe35d4be1b566fab6caa40779fbdf2ad7d2c95caf40e131188e9867a596b2bfe833f00b34f6ec89a71b446f68bbfac72e431b7d02249fb745cc9164f4d670182b7dd417e85754b01240a8ccba930bc6a0a1e37df95ba4a86f52f26a6ae206278ea95295853e6816fe201845f5edd8ce35d56a841c4db8ad9f0803a08d233c9318a0b2ae9115ee6473a5db02a3302b88f6c7f5b9f463a36edcd60b2fe801dc04d1483c899643af417ab63b2c4bc4ca9cea5fcf4408032c922ea4543f00e5ac24c28a384f1b307356193b7eeb76117db11a863f4ee0961dc29d5a24f75f357698f24fed27a944024a5a1ded66ab7f0e6f8c228cff05853ca532e0c47f8c5b000b697da43ac7e723c64542d0c6727643804a1cff7efe3752e4f41e7c000fbd132330fda5affd81a072e1936f32535ee6895c5de0f453132626ecfd93a271c576884eb838afd37a3ff536f811d3d79fbd35c8cc77888d8382142063538c39d9f3e3cb95a562d23ac9f84c5a00d185a1912998500b6333ed2c559a3902e7ef6350dcb07b33ef812905222c9f8253e6cc2910d4d3e5accdbbed926268e9da1bca561a04542b7f68b0bd1cddb1e08180894f90823c4e8ce4548d737ed7508e4676cd46cf07d5391035b78d67766284de3ec951ac738c2bff20d49ff86d7e2af7cf7d071a7c79460022bc1ed3d84f84855560fc595fe7b0a6878abfd814bdd7b73d2d06ec9b5fcdc0dd947728bef1a8ff34dc3992eaa94361f1767a24b353bd0d28a7eb4d4ccff7d9d0073f6e0f8e19d24505af5efb180eb9c66179e631890381f8b15d457710ecd261dd1eadb56fff89eea307c57b7e36356e13642578a7d29b151404dd046bd333faddbeee97dc81a9997de9cf5021e65e5254e2ea6ff551e4e798891cdb28d48502d1c4389d1cc7bcad5cfb85634a44bad8ec9b3cfebba9e3d704940be48f194fe17fdb94af79fa4a9208e8ee9c4078d369a238230d4001204b22ccb008e7c719feafa909b53942d9af495612e34dab316e3f61a784cd8224acb8da152d7a096cc32bd69f97a5c6f36ee7eefa21b7055a4d8cbdd14baa5376638f65423c8e05ce97ba0b5e3d05af1f36a957ad3cc7add8704ef5a84b1f9e9fd66f163d1e6ce3cae223f04f90a124e6705839331ec5cc333d50b0346a7488256f1f9510b95ccce50d2f2c7976c04ece82bc3e95adf989f11e59977e91f03b92956989c3f7a5e8a97ea668e5d8ac5561d59d0cdad3aa0d9c7a30528da9dcdf6daf139b5cbf915e9d9e504b999fab6027d1c34b0a77227fbbb89e886a98809b3f27e672e5f8665749d5f47e9fb10697a7def6a42e81a708d7426be11b4824988f64aab7658c6dfa368c5ca8fff805236965fdbe4dd882d0777f5f07aa9f10fee5ce2711e562ee70eb294e72bf5bef2cf5cca1436f66fbfe23d7419f1e878bf4c9cd24296c6231e0f0169383e9c10ed9d47daad89c1259bb64b2db5480e7dfa2c4c96ba602747d73ceb9f3858414a8538ddee027ddc4e62ec078f3cbd7a652315d2ac231af801c500c7c351d993b06c2a8590ad83964e880c19152af2bae2dc91d58f2727c6e54a132c623f52f1e704dad55f293b9dba8d8ef66c0a685e6b8918bbcc31070266e8bc9fe83b54ea52d1c253a5eff640f6e5fd15d0558ec363ab22fbcfcb49491b138588e1e05feb88758986f17c442e9823cefdfe86f6886fd5491c16705ee9567d067ddbc8b483fc4298c5ee58b5b512b98d155329001be479d3a34caac891bd67a7e5325f233222db68b6e8ffcb830b29b0025ab65c0c761b8b17bee506a0c485f265820e0c8490a281c07dfbe606c5f6c03b91b96ac8793cb7e009b9a9b4e03a7e65476fe0e9ca3a6c8919b7a5bef7a3462774acbcde724ff2a29983123cb507947afeff30d043f5915748cd7b29f4b1aa6c900ab2ccf5e7b3c60afbf0a6976fdd0d15367cd6728698d197a7e6c661a47561604ded02887683c0ca6e95812bf5d09236a0457afa4fdb8e62d16912b2ee3fac51f0dc2d8e8edb294465916ad71be7a0bfc6fb2c2fc3d1d446c482ad6d0151a4019e008c9c933276257b74c22d54bacf2d053e68a7852449c00bc3d4e48053feebafeace1726123dda1aa005933292641af56fced5f64b554b219d57ddedcf037c910b50a2aa02c6debdb3c39d383705e6120fbd5fb9af9d64807f74adac2b68310bd2c2b3a18cc7afff207acfc7f13b3ae5aeb29921d97888a30ad9d83de183a55ae182ceaf08a6ca3966a9af74596a65eacd4d16d1517d44239fe5e22599ec4618a81f48251eeaca06f6be90dfe81a138bdbfb4d4a9022136cdf375ff5ad08afcfa706d4a6281a0be26158283d25d0b0536b3bc0e01ded62f9292cb620a37f2eda6eb7e8a4ccab1c4636d4da4e8b04c8dbeb9d06546365df530e54693915a65fe35fd0f893652477ccd7d32b76905cc98fed8d81fa08f1d5050f4cfd916c14cf550ab0990499fcbac0d4c1a037ce1f2ee9e18bd8536737e089ac54f7ec1f50d9b9eff52e7ac3ba31dcbe2ebd14ace2856458165df3169e8e4b563acc8bb7d12b8c800d3d688ae3997ae488f69fb53d69a9b1cb975b8fac3ae4ad3d0002ce1c11475b674a5057ef4e25e85ec13b6f962804af0a18ef4ac772c001ea16d3caa84764e2a1e9b4a353bc584a1ec17a34635d1f70506740d0a6c27804d0959115fc2a8fa63b701805a7809c8a576bcebc4b7544c64ce6d2a990b667168ef0ad688e2702269281fce761276d198714cb6fb50d3f114e3c273e3bab37c753ac9b1ae4e976e455a3d5d1071d44882c70d2b7269148e1d2bbb116fe2d4497ed4deca586de585fe34a355b0fdebd46b5f4873b168e1ca88909f2cc5ec927f8aa4914a0ea721109c9d99dddf1e831e5c2144b540b7004d5cf9b8eb6e3eb5c6a2922a59586415b6287f661d233c63cd5cf54b1aa8bc39c0a14d4c77f14205c8cd86f01ebf0c8720a9c1533e07bf548a74c3a3ca70e156cb6076a4f8d65f4a2a13682cc2ca0740f6274ba868100f1efdab7395ec208d1d15a05b0895a6fc4b977c20276c02be08dfab05adc2c89489cd09ed69a94027584769e4bf76e883d1b511972645ed97a6833bd7a975b6b65da3961967285919cd08c3f913c4245ba42cd9b3747515fbe48be2a9e6a862de61265be0d792f2ca4501b7824aa7e2ec8ca5dc5d58230253889fa563aa8455725eff5f28000e94a287da4c67ad46ab9e51c8237e19783a055b668eed3e3116dc1cd5aadb2bc5c6095d3a8b9084ca06d9ba3cb5fc009b477b2589a42fead62d82635145dfa0de10678dc97ae6175a7c0590aa9bc155b4b11baeafef11f59c23cefb1b371ea782fa24e030244fad1f948a9bb9dbb360edfe4fbd81787ca9aa7f26abda887e88d90da81e178eb49041d6d0a3127fbc686cb87e1ca746564c29c9f43c3641e98a0ad05c0f25c2fe06e7ca40705c8ec3b759660f91c8618927408a9f77d96946f63ecca67a03c7135839f940c94011af93dd916ce58cd2fb8218488f2168087d149c87ef2959a5ddce60ea3978660f6a4520c0fce09da096a5d88e2c058e27752c4d8ba0e2ce6443af842594437590db14497b2749a0d340d7a9e1deeaf1cc188678601f6e0a0d2c45cc33b7f3169dea4a804b55ea4074e361b3cb0d9739024d6a468cd695b6a882d6619b0c50f03c7f2eefb6ee89238a668b1dd321d50fcefc1fdf992b1e7a3b2cab6be5f921ac788207bb465aeff11db19d1082826c1b3a0dee6a0f88d3fdd0120c119ae830f156db1e0f8302e45336acdfb35e9824044d691f0f74547ae86e1c407b41404368e073bb11f44c2ff0db3f992ff1ccc5720ff6faf852f7dce21e3291d2626923b81d3025e921a19a72175212abc384160f899dc64a30d9c194e73c453e85cb988a15fba6c0926aeb7eefcd93505a29e080c247cd309762f1a5d122a5e633ce6986d1bd84bed00debbf6d9864454024eb70c2da55d00efa33bee4ccf9f3f3da6053585c080a62f462da989bcdb3fddbff859240a7521d0950872922898c4e57439ab2c27acdd085187a78bf16c217b8e467395f0bdf4cf711a7a70d9cdacbaddb02e8d5222ea32ad44516ea8699182261bfbf21c89f242c3bc766737c05f244f034017f4756624a60e379056661888140352d6c28b92c10998e6f3e6f344b844ad705a6336c954c82fda9f9fe41ed3c47708a2a7155ec0bf2a5c954be8f5fd6b094fd342c99c49a033bafac9662d1bd3f19de42ec9ded860db37c9fb13fb5a0eb13f0107b05789baa44920876ecbb6befd7329ce1b7b6e7b36191058f6cd54bc4fbe62268d738b741c15af4e60634ae21538d2098cbd098ac570f70a23d484000f5e7523a388d568e5910572dd8c3ee9b35f7b65802c1ffc03cfec730db95e66aa8fc883b4ffee05bb5bb1b948bf093262478466b831386b7b967f2826e44a4c9bd2cac +Output = 6e5ec113d907e387e3703973fe7b9f87 + +Len = 54072 +Msg = ecf5d9e29c1c04c11a9503cc223d0cee4866fa26df2b4f7c1a017939718f545746c0f137c9169692194105b2acf001e2f0e70f2332517a20c05899644af454cb8e00e5363593dc83f78d66bd0670ce8faa7244ff28d0de59e964dc68d87a30ec0ce03e49a73ce07dfea2ad54fa667bdfbe2f2222894d830dde4dc9aee3caefa4088683d7e8b9a96674a862e14e7a0eb9734730f41d737225e83ae99c338b99dac91a3c48c1b13f28a2c60ecbcb53910412e2f6deace7b28a4d53c29b8f66377698c5f103f7ccaba9d025387a399a0baae327fd46fd544b2255c2de14c103d05fbdae2b7255b3f4d346ed685660f685922e3fcc95d96046d74aacc56d8f096c7f80ff71fca20e228c4b4526c7071006a43b52ec3408b3aa90723cfd10c22113bd28dd4c09a5843ebe2855fb35f88f96c85187e38952f67f351797106322f2ce01ff72430127be4e5026466e08f91c3de6ba063bfe7fd1cdad7fe886d07625a4334be6de4df0645d2a8b4008a8d35f04e6bcf87bfa56eb9de2f255e5bd88619e3c5561a553c81d70349f6a4f7d4efff2b0a0852ce5a0edf6bbba06b7941e4fc302650a217c77919156acedcdf031a5102daed4d526257ee1201e2483bc01961b6ec309d930c469c778f8f10a6746f865432d0efe27ad4765f965d7d29df9dfae68b68755d8794d1b82cc9d8d4b53a1f9db675a304f00f08a2ed8462b9fcdd285d987ac1eda5ce4935c7019de052147d4dea2e1f106e52058a8bf9a162a4716a7a77f9fbba036d73aee2c8e85fb7893ff3227caccb4267fd84d62fa1ba62d541cbce489b490cecd152148240a971f2d81c13e3e46c189b61106088fc37b4833edfefe919214ee6f2edb0b02f640e0bc62712e65e996d76d0bbcfa819511605c215717e0dc935c658c05bf51d15d81e8aa2c41663c99d74bcf5581f71ad13d76c0ae759d1a75e1563788aa382158cb5b62d9bd6ac73353f964bbe319d821a62ad3ea61f1d52145eb384a14e0709886ba9260eb9813cc111fd2d46810596a642060f52304930150cb9635477045857ab040a91319a7cddb64228a5a04251540ff72b603fddf7cca9e59308a1129876ee3769b7d140b9c77705bc3ff1cc288ff700e1549043efa7a0e8a2224eba3062cfb3b2070b2c8a3adec8569a181ba2d6c1a3efa3c433ae329c12ff55e253b6a7aa1981f361b65494780a963865b956b4ea6094d25df5aa09f5f539080e8791b217d938115766af50bd3ce99f6d1d9a96cbb78f64c032697a491fbdbd25be682e936372c56eb6011c38efcf33b0b10518f0291def9d5273100ff31be9ba709059974890940a4ce0435583b599c32c1ca7f225eeb747de4d67a50fc2125f36a0dfbe193001dc63c362ada94b3606e757c04c4e7060424e6efdc2c65ecb6689203d5235cfa337c320f69bc0ee9d0e6b3cfe6903318f3f2b3e2ec3d7207972e084df0e2ecddccec39f7bca5b2e334c3032bec2d4a07870ed51973282d5a106c545514c74c932e3ed856e93d878ad42cedf8e04434bd09a1d4fa38989ece684aff8108798302a19b9894b92d95c4f74afa9e887cf920c0d236ef0533cc49e9f1903b96a199146f2b0019f41de47ae645b185ac7ea21af6ca855fa0a1bfb4d9898fea84e797afde15984d62b47d95ea449b1516f23792f1b048b2d28b7ff8813985f59bf284bd3882e899ca9b67fb496f3eb78d7ebe6ffbad084f639915fb292af9c6a36b6825c3997963f67aaa964bef24d1d8cd419b5ae94ca01b7288a7198473c464f94bcfc883d214acf84f4c3aecd5cdc085c7fd568b9c0cc2bfe0e3986e7b57a64536a38e677b15b5bd5c075c8dd8110d4f597d39bc80fb1f272596ef109ae730f730895f6efdcdd972dcaefbfbb40787d2fe0349a381d5fb5360aa679357dccbb6426981bfdfa3dfbfd4295d5ef415f5b7be77d06926031eea9906461f3b9f3f2a732b3d84a901914b4e60cadd1da521a5a1c11435f8eb5095d692d4dbcd9654fccbb7dbe2e44eb5bf513b8ca0b91ed145b0ca5e307ef659fc21365bf0952ad1d452f5a30317f114c2e6a2ead04fe8ce3ff278f581408c00c681da21861bc3805911cedd0fca5476fd147d2b95686be03a70b42352c6160e9cff666fc3e8ca27340f28d02d85dea317e3b498168b0ecede30672ec899fa4c25a1c28dd283a58f0d54edc586d1f762b95b2f797c403c62d43c775f0d40a27f0a71d7c3d974be808ae903044235077c8b85d616ee105a62c49ccefe49437472f2778b5901447cc256d554d5883a76ba346892b69581d19755565253a32bdaec86bac796717a461c1720c6808066ade25d0c49a2991d09c93074eda5447e3bb46e4274c4529e865776d3434c544412bcad7ae423216c6ac0fdfd863e54c7ff9351177829cb38a33b1af5b28329590e12cdb94c7f55f55d4363fa0464fa8b8d51d742bd0d05d10590ac8efa6b2a2f0aaa64d167fe5e40481c0a7251605e544fb6a9ca29ba27f0141ed3a7054c7c4d6c4d1bcb1fea64d594119b6d547aa9a9ac896fb7a6775a1e38ad3846ba704a3b9dc39aae5b898e3daaebbef4f5f903130c94d0111b8bc6e2d9048276011eba8206d48882032505fff0711a0d1c279319d79d75e16f3f92c45fec5a3cc29df4a90e488e50fe04f1a3d06d58c3b14a8243766d062f8cdbe74c322d68a2e53621381ce6531f366e79b1b1a51f1b9cabf7194fcc2a0159a7ec03ba8f53af533169b79a7780f792adc5b2fbe3181fc5921b24cb828961beeaca705fdac46bf2d6f3afefc3bce0fa08fe2e15edebd6154616eb5256cc56a3eea81c8ad562dfab6ce8a88392b0e356c64cab698b3f4872110ff64d119be8f0f9af8da149d612673d6f28beac03078e30d6b35e87bc7ec5392ece227b9d208d54064d0efec70c0c8fb1b908d95e558b8ec5cd5ca80b7ff7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453eec38102fe7cdda0581947d8864bc377b5d9052c698acb8b6f4570581477be0394b5056fd5a369f7551480b361721df78961661d509f2d85282e7dd99db67296d0254ec82798ca15437eaafc32fa945fe68a223fe6e736c8442c8e8dcf399814895a87955c24a6ff08a0ec3c60acd1b6b69d611a94298f5cad85cbfb12cad786a99dd65fdc0fa6bf8ec26ffa534e7c04e0e24a34c02fdf4949815dabcf2fd7f3173663ac0e21715bbb2c5bbe73a83d524ca10617d4bfcf97026a6c256c314163bb6d57075c21b0de7925d7112884baa7e222bc4b36a2074fbe861ff25398bdde7d89daf52dd90a4daff60b79daa89e0b8aac955650a02e79671f9f99ea2cf26d45d41300ea0f28b245e82080f1dd8f862c89b9c28880ec1be47b14a29bb58917fb942baff98cb11422413eaed5eb3521b0ff4f17480ceb3f1de2a596cdfa29e587124a8ac3184e7c30498c8aee9a3ae3fe5780dbf70ad0ecfa9e7afbe7c47bddd196961ab07aa7f1564a339ca5b243d5fed97398fc43462b63f6bc5c53db270ac2683ae6297c637b7c8a5b6c60fafbfd99cc51d5c17ff3034031933e7807d47140cf5c7794e42a228a522a83883b0765b57a411bad857f7c7998262bbe102a1c341525535a7ba6ef69eacb68863d12153b296cf1281f939ef6739eaa8dbdd3128780bc04e4097de9ff9a64a3c0c8c2131422f9df9a13d772a00a22444dd7745b1f5949129956571935aa1ebda0a4bf6926ad116d6b2af2ff5da4db7f6626b800e6e7f603e029dd85f461203d8d98b21f5b11dc24042c8d4d168af1e641724408c374e961234cb637220993abef6e433b9a98818bcbe14f65b4058bfe4483c37b9d464ab3c9858b37a8e89e902dec19c7ca88292b2911e14e1d5bd151d821db615ea642823a9d048b6f466a72b1dbddcad52afb8a8783ea103bd4ec66661334c3eddcf955dd5cc83d5e6d1edce202364da2c620324b0013b4f4ba04c5542277a8323096b41c8980555ca4e353282bcd5719a4bfabdf500441325340f70b164c1915ea41275eeed3d95332e161eb1c49f0220b017ba93b64bfdce9c983f4b75a1d7e5124370c516ad32a603f8d939e5420a5450e2c1389db37dac2c7f176cc4abc55ae646b8c7bec4ac976265f887993f08a980d46830113b0142661caf81fc3fe82492c4c4734024718bcbd603375b067b94d264f636cb132715fbf94e4766eeced6aa261a54354d1fe792d17fa5a538e1bab83d11a9260c5dcb40adaa19af38d7f59ee320f7289f066f79d0d46ef236b96fc4953103bc6723a6c6a219753f9ea1e5d3947eb874aac357c36c880fdc9091386a35ead2f8b4074d006f32e682809b3c0ab29a24b3e0e54511fd20e4cec6d7b93b77959355838722807d7cea32af427c86b5f9d860e1dabbe81b35aa435a1b469ad2c7c17d5601cbc9456dfcaa4b360bea271430061e2220a84f1cacd4caca850aeff7e9ba9c25ad3d6f7c9a6414c48ea77e8fb80e063a27f4f16c88ed8963d92e27bc78a7c6615b6f542f4ffa6c9c693134a2fd033aa11630baabbb182675d767027bfabf85233ae18bfc99d7e31c1029d2246b601bf59ffdf330bfcf128ef43808bcfc8c3909e0167f7ae476f8d23803ef5a8fbf2a8609bf43b1f38cde1db423c305da785283cf70b710cc721e4d3531e4dbc67af6f107f7249612dc09809bbca9dd311e720f7da2cb54ce33e3eb9c364b1ecc1e01c4ff280e638a2705761f5525a97ce9082b6f0f14cd4646ba4bd1a39aaa0d32db5073d46980c608525ca3afdf013a62a56618383bd0e11521cc79ec4bf3e633c441fa9edea4630a80b2fd0f2e6ad615aa2dfd90a9060b49bb1bf992e782f3ab8d07f7c9d614cd8810f75005ac4cfc6ca701a3aad4e3413ee688d519e5ddb2047620ffe7d878720b73c85125d13e09f22c7f9f0947ef1f8f14b190f3df7aadc9101b779b6e35fd2f397474e225a48b209b06442e8a8ff294f614b1a32cd05383fb55f336ffd3db4dc2aa3fcd2216ec828314377d154c66eaeb20cbca66752faf986ef75d15e87901bfc826394f1bca827557ed8760bae91b747423bc14efaeb667d4f87048da72c5715cacc9150991cad21fead00541f581127d7e0aa0966d32fa167b12f120350397e657ff1c96dea629fa93e96b8818d645ab1f38a20fd7afcfb1f3b7b7605c6683e39c4dbe1a1dbf0d668d261be3cf65ae9babc881c26a77491606c0f4013558d5d30e377229bb7fcce24b289eeb85c99dbd882cd844b243f6d108e14f897c450e43123ee13c4463190c32735d05d86c938f58f81e0d3b7069719e7b127f8dc58da23ce683c844f34232f778ded943e9309f829cab92629711561c00f549e654e47f02a0c26449cb08f4eeabaccc34a9f55c999d395ac4127f1d2605507f127d9337f8003586af34bdd0acae4f5547394245027c2ffcdc9d1335311acc859e9a2a7b817755a601dad14495d32f1ad811a7e751ac07cf18716e1cb193c203e7551aa833989b58ce27f3cf5edcd47383cdb6c20bcf49680459f0524c12c9608918d45c82c67f05809695ef5c0dd7f5b6c7cf5395387d4e2c913a64551a5b31f06fe7f6f3938932b5c1280311e892280d8a822a828a0be7fdb1bcd1611cefdeb9b4d6060a824276ca123ad9151f9b70e4905fa558368ddbf455f817f48d0fed51a22f084c1523385a143eafda056c66d873b8528ab07b80bce86ca6840d23e43492438c1cceb3fdd241b415d52c8d7045af3cb0aeaa4d8c93d39b0b93ffd449ef2fc3f001016d3dcf253b999b076733d8ad5d5e18667c3635b1f3c5a8e78984fdb520d2ad6fc78ead2925a990289217fde88aa97c879033ff0e17533756cc2bccdcdab2566c4b56f8d802d4690286a331fb55212f80220c7c426642d3b014a4f8f1520db089713d3ebc63986a17cd5bf1503d63c5e29a0619e970f2e2a5eb96febd37432049d197eb40c87427eadea8c881b3dfb42170d7747db801f88ac9783a7afb014a1fd4fd9b0f91d6370e2310240a48f39ebf4ee70889bbfe99e126af58c50db6828e03d4aa73605cfbd4333890447d4dda2e7ccb4277fd272b4b9bc2c625ffd16e16d6c3a606b4770adf9778a9eac15cfaf182eabec2ec3a412c91490f1831f0514cd6312a43fe92c8a2c856bd47a5af75ab09cbda1519a66ff69fb890065471f0927aa383b5af5ed9a03e6966f59a93debd79e520c8f5d9fc5c1f87f59ac804b08a4ca16ed65729a27a7217137f30c89a9b4bdd2f7911639aafa93dac201cf71586c4a128208691b7740be66f3ed8ac3dd7080a528ffcc1bf73c5402040c3e7a42a6b296c1eae158d2f546dc6df22bd3cf3270336780882df3aec460e774d44c0e7b8b0973b4e23882ee403b6ba8f8a1c72313e47ebc5157e8796a5a32e299d004125bd3600d75a6ce5434eab6b7f8150d6bf421335c2f811cc4ce59affd96ee6b94ad5c509ea087fd4faa5316c83418e831985050082a93d8b879c6246ed28f8d28060b0b0f6dc458062bdd5283b290a29d89db9b674b75647df2075adc5599b0f7f04a5807e44527a23ef0348f7c6781d94e28dd229910083ac18619f028f61d28f281012e0cf2b24a6cf482959a83ce0a6fa1dde01c4a0c186fa92852528c1ce49516cc2dedb340273c51053c12ced05b74ac654add0cb73e83da51a9db45f4535f7282ac8f711a613670852dee2ed1f2e6b33b08e33f53d485805a9dcc07ef9cdafdeb52fb12891fe2b7ca0f368d17f74d1d28c137c92604fe020cd82cbc53e88e1fcec83880d389c98f9b8bf0d2eb932f52f41ddf9479f475ca2fff034b695e0241f4b64ea140c87261c14926e595ed16ba67c6e58693cc723f8bbd5a9c7927bec926c2465f1a04659305f0dfae5d2f89bd49615089beb57dc9e7b73897cb6a4a212a9727a1a7642b8f2d2824148b7e11c36199298440d71fd00d98a524a6502fafc8dbf94e31114bbb019bfc02660535347813775e6259dfbcc306a92b5401f4ddca37c450fe334d814bef6f5d37e97d78567a42016c6346f6d2a94d941ba42112f652918e56f1ba48d1cc850e465571f7c3749354a61fdbe4022b984744613eb516d567f0837319775cdb47fddb6f9a1987a9713f57b326ef1a31932c1661d430f0674f5ecce2f278b4c3bc123e5f7f4769c3e4aac947af7fe466442cdbcc6aea4db150c07866ceb2a12dec36b64ea8e73367f47d4204fffd266fb52dd9ca894bf45a72fed026338debc1e04f8d649e63ab3faaa00b119dcfa9f7ee185a81b8bbaf0bbd011c4bac7159269f4609c8e8219af30dfc6c97115f35a4f5d6a41c7fa2446c3aafa4fcbec6b505310473a30e8bc72b2577acbee414921ed44effc166687c24f0f1af62f3f4c5059f70131c9907fc8efbfa15ad9d55870e9367b599f6751fdce8b086a4d26352cff071305c10ffffc4966eed8dc48cdd1c380b0dcbb632f53b28d272ece37c230a2cf1138afbda9976ffb97d85e1205cefcd214e7f2f05c5eaba40b95fafa5025f5cd705cfe300924c3cc50dbe7d79cc305990c1dfe7575990a5e3a327bd47b576870b4c534ed9b2ed5778e5601ffff586e542ae10689177d6f2a27a6c95cb05f6b574303dc7cdc10257bc4c92501a9f9a781e5d3d3a19e864a8648455c097ba88eefcfbb5d344863245788c7c973291141a0c158ce35974e1cf130b0bc5159cd33b8af3e5fca6ca262894eb477caf949bd3f41f25edb7e2f6709655b62cac7280a30762f3c95b558508f7b21b87f970d7acbec331e09dfc4a92d5aa7c7ec306362f598e07c2cbeff8ee8b281f4178ed71ac5349d8427288863db8548842c41e9ee669c04a705e6027e037977c3194d211dc99f9419d9e4f5179279a000016835fd01f3fe35a7d6fb9e9e34559e0b6e95e42791b95788919544f0ac30d4121fd22f56355fb098ee6570e777bdfd444f801e8dbf6fb5c9bae36c64918d68b4d548f5e1e48ba03fb8ba859dc813697a8c8a1d6a8d39cd03cd5a0e7cce18469024f4d12366147d22a2755d1f89f85b14821e713c6faa05cd4583ab97b663e60a8b7051995e8cbfd8581057eb41df4a88ecb7ba71fb32e88cbfdab443fee2dfaa7545e7c21256d0d72636169f942ad06e18d049a9a466edd898d9c90fec278be67ee0142c45f56895b931099ad58d552a8302bf41efa89e276cfb4a6a22b4934514d957365e0adf9a7dabb16b9a597154d7d97be9519a720fa8d9c8d116fc5e5cb38c318ecee9be6be000ae9067219d63739f000e6e9ef1d7e8dfb4d35d616583e79333740d248d708cda4197b06831dce2fe0c0f9b38a6368987aeff4aa641513d68cdb4bd4db54ed0932aeffabfe737a260d08b6bea07a2276c1793831d6a5b0187709f43b7de5d57b5bb17ca7b25ea3e51fdf055458e812ef77f6e8b5958f7f079bcb2351551328ecc829d943c668b135bf4ecebbda37a2cb446bec7cc85be66aa128c05c8c654e24211efec762190cde955bf93c4fee39d1d2e22cce98924f0a3029b4a54964afeb0d99d37bb0f81ca848116e1fdf963ecac6628ff52dbb21b0f1d4e574b596b30934a03fa6d58d4a5b817515acb1b61b7fcbf4ff38ae5ec4228b333c11f885c3453f3e2d92fc60fcbee791d62beed637b5879f64de4404a029a74ea1c339b94568d67882854bfa9b9a236c9ae3bd7ffa37a26ba43016341d8ced2bfdd3a0b9a33aa05827c8eae290b7dc0e471d4737ccccc560a8764d76a31504d43689560d438346e504a302a042ddbb80c721b389153b988758f810529a8a9551362d833d8f0b6f27015dbbbd18d467c900372afa3d4dc2e79cfd88516ab447a8e3074ed1ed9ac42707403cc07c6389f1dca7d414accaec885dcfdcfa7b5bc3e3275fe052c7f7edecfc92ae31d554c90142b8d85ecb7abd7381b435d53547b10ae97c614884eb917eca9c38998a6dce0019b35f600024deaff2f5bb6b013fb72311a7f8398c3e58e657a6037e057741f64be090a3b492f64496d99543450c80388628cdaf47b8ec2b8df8376bad39c9ebbf8794ae508aae3b57aaece66a76b250324709311d20f25552d9fbe5ea7d0fe85df092093ad5ae9b1caee7dad945f674fc4cd4487640156d909377762409bbf40d63b33ddc3b9d6ccc2fafa9f941f3abcc7e557abadefb7a2e6cd4a5c3a67418b7271fd19d8323b751736bda313252fd8a26b55251c34c8414ad3afa2f1ce25b4385fd4de477e98392c344f6ebdfba721e8c1b55a3b7b1942a9dd0fed133aec599c5753a1bdd97d8776662848e11d41371f8b00d1882d1b05886bf380fb3805ea22fb11fa97ed5bee8a6ec0c829048e769b29c0119eb56e386ae2e315263ff2f440ad684f622493ecdc90b172e24bdf6ef0106b90cbbe5329c5e466f030cd43f68a00ff16a909e5f0e18e62cfc95db49ec2f16be5bba29a782de2f7c8876a796f73782ef6d927a2a94dba6d353aa4be74682f6976cb0c749207610e04b691f3dd718570567ee86a5455a72949b2cb5d8e743cbcca9656a205e6e1121b2ade43bf28bb7bcc06d69da0adc73f83de4c025b5b9c0e679a1b835 +Output = feefabdff9401813859320b7d84896e2 + +Len = 55424 +Msg = c5a1f3f7ec3d2e5cbf006d4a38110a422318df47c7500993c8deeb894c6176eb5dcaa84d8f6e53c9e25920f5e9e5d3122c8cd186ccfbdf8d65672c2b382492658a7419b0479dbdaaeb3e7108a2e263cfaed682c80a383e2d4d518ea9d025388013474d095df2f265a356666bab3041e2729dfaf3ca30acdd47421aeb5c89f0a4c2ed4c4119967c64d24a0a064cf6f5b13d8a42f0540ab3051de2d7d9247b43395d0b1e3ec3b1e30d40c162c1cd5d08a6da4561a8f0efdb0b95dbcd5c7021b7a7ad4ccceaa36aadcab4647885758c01280f755f02e607ab5878d2045a87a3d6567a555c2c01ea6402f8db53388eab689ea6c245e57d79ab548d7285bcb22a28ae8cd1d9eb24598f1cd2cdfbc45ee4c67265d61a3bfe6e63679e60576b39de3418aa66481155deb7820be2790f2e5da20b1556e6ebb10d5cfa7147824e64e682fa9ebcb385dca1639b6bc3d403453e84d17eedb1ddde7f1d73d0cd0f4c7a6a9abd2e7c212f01cb1bcfb9181487edb0f42c674184f9cdeb2e3c819a054fc59405ca234e9bf70c846886bf8842826cdb7b8499fa6627c67a18bb4c576c3e8b8a4a8844d928c544f3d02843bc64de0be6a041ddc1604f1054625afbac4c001574f15e5bc6d081f241dd1d0e5c858212f9eccbf93e7959f4a094805440ae7fab7b82b62ebc9b135e9517cee80faa56c93ee68bb518b92dba87379421bc99a295c786f787649263d01805a1987ddd4277da16e7dbf728b3aa30d20028c716511a7f85882c66bc5a90f22fffe84f252e66f804483185cfd40bc3ed2b320a2c7483cb05d3e56922dee54a1d519e2d8b02dcbe39178167b576276a107d062de3f418d4903f7c15cad8194858fd83be15a622543cba9148e282444bc45e6ed743b721c2ad34b714be317216676d5fabcd0280e3959b29ce5fe1ab8e903630b055a6e6bde51a600b06cf39d9d207fa9bbbff3d93cd2013a13379a45cfd6d156120a9afecbe5a3da5a89cb5bc22351b37e683a38b6bb3166a663476dd926be592aca9c377c25a1788ae7f30e4de5e8c275677f8f4f7bbf9d101f96b38d79968ea028c6b877983b55c1f5ff07c8ee9131213c485f5f9a0857d0bafc996545d6512293cef446a3de1ca04263eaaba4079a1265092b7fac982178c40d91e9220a6b2299f97d51df1617964bb6296ebca857b9605676282a0b8468d93e3f9184bf1710b9faa621a05fe134706a46aa8ef01486bca4b1d178ceeb314902f4e6e440ff7d6237215eae3803db6ef4c4b7a17b3b2ad86881043f5ee062c1f04461d75c8ed9212351414f1afa1b75ea163e8aa655f652364648d437ee6da28ac09ac44e3fb48563c87209953e7553becda7a10ddf79b8828417ddf67fb28936dbea31b2ac8ffd6cf97964233b7956e75d8b8b2e423559d1bce9c2f70ee1d48908d8b6163fdbf7a366bff5318b781df84842bf6418b9d4a8734719c6367c1305c9fea7e5741902ab82de336ca92207761065a45bed67a77b29a858f070d1d311b1c4bdace3d7bce9e02c85211ee7a1c5487cd0821acf50ce5295e6e23893834132c33dd9099874e3114380fb57498b7a42f0da533b714f1680986a280821b228ef52cef64fcbd92b68bbad57dcb81319a25a186bc9ce10f83618594e6a1cce1d2a2bd78130e2383788fd70c329b3d707e9211118406644c7e59e1ab1c8e555b27596fe06678c407be46151c9c8ed55e989de6b0529ba491a01b244eecf0bd76d742c88f22e2a507cfdbff6e834a50e22f6fa7caef03a9c733ccd5e71c700d1c298752ed12f3d06cf4741a68af77b6e38c2fdcc624e77bd47d977ddd75b54c34644d9563fd544c1c753af073e8be104bf8060e0eb7ef23a2c7a2a398bf6882a6d1bf1857aaad21019a5408f8f5c76501b91cc40970c2a8175815cf80c230b85ab8026332e2a55802abeaea5d9f39bded1798861f1909121d7a198afd45b6f5376141fe5d6de4f706ef261f0caebc20f75ca2dcb8786b699b73d65a7712a1412713a2723e131309f7af2e2e6beafa9707ce644f3c5791b6788c73ca56ef9aa412174d453f9cda93bc332a9fe41a982905b70366137c22019e0d185f02a54927deb66b02c7cfe09f3dc343fbdd0841dfd95daaaaa6afc750f43eefa3e3fc55d17435242e3d75ce3462a7a0c8c07a9bbf6b097fa15bba28ad62661d1d61bb67abbcdf9f530b564b5b13266b91f4394ed4a302aad59b64ec1fd0cfcd55e5ac26bb9efb05f8983a001b3889c9dbe10d03236a9254cecf74bcaf26bf25d4d5953b0b03d07da64ce9947cb919e430efbd62b6a6ffa5125db33f634c7f4d219b3f4da3d1a730e48f2ab0867e1be417861312944192c42bafe91e452b576ec49d720589f2c8463ac9c7fc426fdaf1190ed5bcc52193daa12bdd005da98eb04645f50bc74c7be63062861fb7759d31bdefcc0752304a0efa3b598eb1af6e3a2efa920665c908384fc230c2ed76abcf8b91c09c4254fe89c04623704c263d3504230f9e6950b6651e528d8ced5b4df10b5d79229d77f9727ab4044d33f444c8512a357cddc8cf9526786426be0dcbc0c6b9be426b8081f2b1ecc4cd7003cb1c9b76cc48c81b99efed9d7e3768736d63430e58a4b557df31ec582b9909391a586d6f9ca933305d9cfd2aa468f4747b020ac510ef83e45b56b35f0159098078a54c7d6c4825ef62c4de859c6169fa3cc7a444accbdb0f3c8a8e690db475bf2f2bc20806cda640f28d16182ec9cfecf9d898f5f4e2c7c0ccf406de185357de8511567830dfbe0b53222f4a24492f31fa5d6e3fb2d94edf51bda227eadeb6c4c3809135b3267638cea9b182458890b3877faf89ac5b7854140cebaa4bfc9b5b309ff9a7574cd5afab4b222a582ffa59e865e23dab0e4e075d0a68d003550d8a16971837e3f6e459322f0ca926e5750b64398fc2779ad7e074dea101d9921439bb8f764b21ceaa1cab7ef66777530ab144203e80d8a81cc8a0b21ea6975bb85068b0994dd77c2fe15d5f69cc1220c034d14478df96e023a52aab6825035702b865220ba3cea87b9191fbec40c1f5a07a50cdc44778e9f6615af306e8e62ff957fa0c54b7cef997128f79072b4a7ab06c0ce3ab20486c9de278b28055078ba6166f96faef9f178a4e9f0242f57656faf24cacb4d2cc101e12cc0f5fd630110fdd0bea87b508ab5c2b09be26060d3286f5575367c5cd7e83d79e3329d2276c3e95182d8370d25d159314d43ac6d7b55a5b76fe4c61125dd41b354669b1b5423b24dc8a7487c5d4be6d096d069e9c88800ef1d6ec0f655617c5da6fa4daa23c0c74a027e464a9b95fa130b013f4235200f41002ce358c1156bdd5d664b7b601bb6cab2c5a6e46b3fe16d1c6e83135bce0f71baa7a3d503598eb6ea430afb93a50f347c25f0d646ba5b634d60ebe9a6e2afe59f8798d796ae637ed01912a728ed1f3ba117aa9ca885b68a1090b011a0fe6f01312528fcf5a478999140e90aaa648534d4033aa41b329145f8769647c471ab791208da91aabc3c9bb062f4a2929bcfb48771279919415a2b777af4e8ac0d03a1b4bb345210562df9bfe7cbeb7c036d2f3e0a07c82d22afbf10166270a1f0f61f9ba4bcaad112db381257e551c13bdc295a0641cdb166d05554f1556c50fe0147297dda086762b2db5a3bc771fc959b378e2e6c16607e8a92a8644458336493bcf07f12f74dd64367e9fbe8d8a8a128be2ccafd4e94ea2d0bad17c5b0c3c55be593410de3feee1b426410dfd2300f1331c8646bb2d92a3604b56430027ca09855546c117ae50a991f3b33031b3d1fd936e3933e0fa7cf443263d249c9e886f790e658d428aacc4b32e1aaf8f01a53f931f0dffa918b49c5f93afa497371d8e80cbb7fbc59ba93b041ea11381d725bd1c792931804ee1a39ed9d44d5abb326e83d3679309a9f0156a0d6de36efbf88114c2b651cc65ab12e642d3a64bf16e186b6f9bdd767c285acf41a9a7be36c7936543dbe8f526bcf02114d437d3a37a931ee77c6275dbfa131a037be8d8503af9f544c17d6356b945369801895b97fde7868331a96c900e47339b0b2c2611f8bdae0d8f987dc04d190d1680234996a01d8a8be23ac4610bfe025182fe0f41aae776e56ec1ad2b1e758ed6798d06680b3c1146b99ee6179a406e6d08e3fba7f77d371686815b5ed460a11f1550fbd5e54c05fddb5c387a62166136c465520c8889d8e6fe5fed2218e32e3b7bf38fa5d6564df873fc24510c87c3f5df0b7d380412419effe4cc3f92051d70d5fe299f8860d17fa70711663f9c7af3815de2f314215a85b096607de9ce560748fa338da07579da9f04677fa45c6f75d0e4ea0560bd0be53a0011a4c546c147fe6e1435c99a2d50847b8d65e2cf8ac6f727fd358fee3c04c4a7487bd076477a1fe2345fa9d9d52a7ef4ede0a2fdb42d1caf844c4abcd52c77156bcbaf65cee6d2defbd5e83959b1b4f8eeb78cefd3f16802e5133830bea37bd1e45c0d1b3fd540ebd15e2fc3a12a4f0ef8b447acd05b02aa8a4f0251dfb1f76319f690a1838d91901ec1267d95e076bf739d7c3c94b3122fd9cb4f2820a013547461e0fe8057ec564ac774711e1a5292c73bd2a80641c2173c4ec8bb6ab6f92a5b64a63a207a79c4bd38c1a7221f0b0f5d56f2f70d4c38ec1a9f1514a33dce7038c98a5e4a406262dfdcb7258a38c8be9bb68331931e9c35db87dd3bb57bbdab72563371e6efccb8197afcf53fadb128ea222e5f7ffd177be6cec83686b9eb6571d44a7bdbd0e14fd1dc381f28c6f0d4b3639b87b932d145a53c800f003e83259d0a7685132bc9ae70c814a92ccbaa4a5c4171b42804f11b7f98aace0a54ab745ec260957548ac5d5f07379d35030a134f8459ebb6bd9f85dcacf1798b418bd91cc2b0b6e96eb1e505614b022ab735b6f2f4fa364aa4050c243efa1a6d4e4ddc3fd30ded57e600cdc99df5e1f22f56bbaf59fd9ccc004837c01770b897c316052fbd1f44a7f9c29d1585df4177b393abed7a0926251a938f16fff95cf1e811dd54488fc2c1ec1fde50dfb12aa08b140d1320c7da3b3a0c9b8fbe3d0d630463eb173c056f8e0a3e17e17412a555fe02698b13dec2f7a7dbe3931be6d3d56137b7de602854f49a48d0320cabb87e558548bc1bf7e641ab29ef8bdf99b62f45b3ca127da178dce36491aa6f246e04d9c4300e00ba4c028c1e48ddd200bf59f9ffab1c5b17e42f2ebbe3b16424cccdcfe8ace989cefe2093e175f3bcc3f53bc544e262c2339ed3c3754dafb453dcc2821841b580dc0485089bfe34658a61bef0aaf84e7a9db0b2eab9580c275ba5cb397d79daab8b641733736c0795fc09c8c45874474afc21b3ebaf8a3185e12fd13b3fdbc0d28428c05b9245d613c1f7428777deb4fcf9fabd0d806e84969083bad185efd0bf6f5867ca1f1408a8823315822ebfff563b42ba9a54896e220da87043773e7039f3faf4c6435e051ce7c327fda69e8f216b0191d8526558f003a6d9d93f4f0907b8184e9826ad343797b162400603cc2430402a10a389a8c91886dfdb02aa04f267b95f88ef88ffc03b05ad9277761e2933066d896e7dc875f44f6990ebd8c7c2a8e60eddc778cd817ac5ef3d2180edf61b5b428ddcca1ebc40095e411f60bc3f22a643e1d5040740fdfb12872ba8a1559147916215f71466a4bca836c9ca4a307e01e6da42b413c66baefdb9be77a20b3dd34251408c103ac7712eb70f9fd85f63ffe01135105adb6de7981a017459e3c6063da286117c015230d80c1966d0927aa917ced7a14446abadcbf41d272ca4d5e96a9d0e0fbf83ecff8e7c10a799926b0674594fee3ad1cc087e8d391884151182b18a010e41883ee838501ceb9b27dd1edff9c67fa2427900992f7ed0ca0023dbfbb086946ad8f0f2bed164b83e1878fa41f764dde562599e042014d6642bb2fc2e58c62ba23aa92508441199ea2fe5a1809b508f6cf915e9a8a822b2bc5e67eb34cae85a5178118afff44a130732cc1b862db31d9ecf54ea6b11d0ed3863eab2f34e15aadf58d128892838b0fdead47139f5b410e2abbfa736a1480e4201e259552c75a1b4a391088f2703f7341fa6aa833b7cefa257fd2af2a2af9d41fff7e641ab2fc93820f830fa3ad2701599eace4b4632424599b77b855a30229d26d2639e146caad499afaab0a9cda4061f47e6795fff92333a95a0d912f026bd3e1bd756af53caeed45e7e9bbc1e1a707b65f9f4ce0b65d3023ea3d4111a310b0f794b50c40db3f09bacb2a2bbea5abc73ed0fa6db7d468fb85b8b60a1d4c9ee6095c6749bc1ed40b44150aced5ced50d0873076ce7ebace26936164084678cefa1750aa7c98fe48e7c65fa39b995a9659da654cee354bf9128f2cc78f9ac514a6a6f1daaeba706efee3e86e0dcc29f4d88fb51084cb807645f7f4737ef538262aeab2ec7a4ecb1cbf3ff2f58b1be3d4134d29aad867e1ae8772c24f1d815a6d4e8d9ac8287c95b9f48385205dae0f9dd4bdc8033232f7099fa89d43b366b251dc34b257006e58ad6356a9d7caae35b7e1879a01da5449f057428d378accc93b9a89017f49499b5fd56167021b43de8a0252a78d17f460c975e89a13e8da259152348f294d38e739114cc6899994917e01c6f890333ac2fdc241cdbf16b850bccadd643e5261c3a2e1becf5489cad6fba58c94f0744ff9f506f62d245c8fd225cb2b89a4a1ecb7020b5f894b360c3569b54c8397235b8d1809aec228018731331cc6054582024bc258d8fc57e7833730faadce6b878504cd921295b44fc7f74d8757e0073ccb084890d1305ee35763b83c587c56eaf6e87e6bcaadb18c78abddd28622d4196e75fd7bf12e4973af416942f5953f92d6c0925a7d130501c1d64ac6fad4935f131b49e0e1fd01dfb35aacd62b220dc84c157128d3cd9af6cbfffc2b5cfe2c57e480958949a56d6f8d35e7bea229aad4806e839d76e556b3bdae5bc953a68649062e473ccf2f746b625b84c303b5fdfe9b532f800b62237fc06ccf6788d68b7da4adc9c21ea2001a5d52e9adf6cbee8ec54ce09b3d4de8a4fcbfc0cfa295223ae48381e3dc06f8c5a3a48044227565cb25e2fbb4b1ad8d68983296c74aec33caee3ad966b26343b45fd8af5030ba4affe49ce994128af914bd4ab91828e1a773eb5a371547c2cb2fb777e098c7a385702903120306ed16ef9291918ae37f647e036905b6442a777ed3087ae59036ff661d9ddec835ddcb43408e87e424cb53335df1aa1250a42fe8dc13e5ff337d9e2be8f5b6ad49620056eec901f092cf5cd922798ef11437dbb6fa2188ae57804b06b1900078e7849d72c5cb6874d69268b9798a191b37eb643154b9cdbaa446ef3ea0f825f2b94c8bdded1b2539971c5d1c8babb35762c8b09e13631beac4d7701cdfb48ee367c1b0df8d419e077e7625488064c46e3dd7a8485ea7db075c3bb8e8934ca21399ebf5c2cdc63da533a7a6867f3db4296f1f34765e0e73d9177aadeae748c849f6d342ccd63169dd5db7ca1db0bfeb4ea1a83d6f3b1f4c289a9d396901316a4f26808047d00a8975a4af77573c71d2a57a7ba97c1c63cebc90ac43af098fefebd2fa9579e3da0736b296977a4bdbcff8a39f62e52960615d9fadb20228e8bfe6a24a6bab35274ae82c7411cf04864b0dc31c4ef28ca06ed26faa70ab85c642073d77e924f17cba53bd51cd9e90f9afad83fb57eb6aab5be4a9aa64f14ab0e0184c89f62e3d5ebf3e0b36b32f17bc61a08b436417ee07925bf5b6761e9c2f01df76897c0f4157c173be2aabc9c058cbae82fc5cbf3d3e79fffad58e79a5ca0d26647e621027ee28b87f369db5b354539f112f292b82d87a97610f94498d096cb3bd70907914ac5cd6f661713c1938633adfe3b2a3e35bfcedd16c70d77c74864e2a68ed923217c595cab30fa41a8d62489520df6f885167c7f3f50b6b9994c3c1536c63a2a9b9ccbca3345f35dddab891daee98d69a4122ee6fb14b4c0cf08cd3df87d9f3a11ad7152bed4a398ba7ccdd5756c52141b4972aeca919c4fe10474b77be38cb41c0506607e5b6f64b7d08f4b35f4e99a4312d4212e35e19977d5ef2c21b6673b1359d78e2248db546e2d39e97121b83ec404c008b690094febe379069a54c331a01281362b3b5bea36195a2ab75152a40695c2afc43e97d5c5b3ced1364d252a4aa57fe2f9918598b7fb7c9969322d5c935c5891077ff1cd8ddd3d06961e11a76ba9403f2de9cce26c69fdb01712bcbaf2bf0e56d0f2cb89bcb660212a35fd1b9b946e8538b2b649bbdb6a09319195519d44306bb12569bccad5c4cb73236c0942dd476f9a7ac6513ec64dff592d2bb2fb627b3a389670b940c1d7400174c2f30a0a8758d3a0617b5dc1262cee440451b5b05b6cc7b46511b6e114294598b66b49929adb64d23c3aa1426efc7184a3b024b43d5e0f0dbb5885ea0801c00d9ac49a1bfe61de6eab0191c0a4f8834d7e40f0c4bd984f10e7e036132f43f15204b173fd2e76a1043282b7d244ab843d189672883896284c7f6b6012f67a69f478945fbca7944d0167108bedea7ff4a1f72352755af22b4ee63c7c5ffa2f9a636affc5d106453304bd4d7679f300753a9e79f8f28116c866b0e5e350a6adf33d50463ee0a704037cb99c101ceab75655730cdea6379e604263fa4dab88a004c0cd2a3352164b3ed7c08ed13d5e1f4891194e8bf70ad3b35083ec03b72c805fcc35fe3babd0a535b476983251b9a2ac6bf5c1897b6751121f752dbe19eee9648e2f54c064728c9881403adbf089dbf2449d184f99d9b11d1dcc41d52a6c25a3a51da06a02587bc7dcc1f916a04b45cab9738556d8de5e24ca0dcad18f00dfad9f8563810c1efd540550557ad77a5a96491dcb27bee1d2c9a29e2b4bbe6961d2dbfb30adf8228bcdb99fd2811c9394d562004c4ac280999c4611e59c1ee276c3f8f37a594cff918557f4f2c1d6238f1892af7b387a372cfd12fd8c5b472868f164e2c31b7122b92b7ee428a59ab6a3c0698fea695c81f76c97a571f1bd97c2dbae6d8d5d1b286d108d01f6b4d0a97d7d45361c55cfdda37b52ce4907f8bd1ee343d84ba6917d27e500c2ef682e88669fb42683966ab69ba9c2cc74067f04d7c8b3d770807a9d740988ab7547fae009b844c5b2a3b3b95a6866248565b70b87cc7cdfbe633d05dc0e73202acccc2cd15765b81bf611326a37bb6affbe373d999f1d4567c76f42ba545ec5727f28eb57ed9562321629de45b8410435688617979103cd1f3577d0a98baa0fded7878807eb6248978c6409773a8584d90d1a260c42cecb4735fd3c2414f363d25e6eaf5bf14affbeb13630696f07615d0479e56234ecc4723145e1b470b965ff7c54bdde6fbdec1a2d370fa6a6252e33f70bd233d7cc4d22c0086dd53f7a8ab8c9b03009e739922c68dce3b9709d5ff05d7688ebcc0bc9cb6abb4cf0c1955680cf37a268d85c8677fcae591c6eae5b04901056145229ceee89c4eba1b7b83e09f5217175b3854d9f4111dc49f0f6b403378fe6283a94c10ea5bbe6627251b596b42449ab19523bd4eeade9bc97f50f5ecc3b95a1b5db44ae5706a9bd91d061c9b4a697937a21e5eb4dd90dfed427a189c6aa010b846bde40164bc21d96d2a7155f3ec7a94692d034f739b58b261d3f06af5194e006d4d2565bd1abfce1d719fc1c3366670f239f3473367cec1e342c77fed8eda9bd94d563a06ee3f6033c2f00944af0475432877c3a65c09c1d0aee303da667d3292a6bfa7c49f +Output = 55a866b255cba78e3c8363365610472b + +Len = 56776 +Msg = 64cacd547989cdd5b6d812b2559351df4e69d490d5481c4c2414ca437a9fc0e164d683a33b38e32aee8ddf8e01d4c3f4d67d93632cd8acd3e5cea9870ccf849d160bfde468e540ed1aa4c265fb6c6ca1d56efb7bf25ba75dde1e029b6fca240603d105be09782a47c38784df4945950fd2a3d4812fb85311986d9f26ab7ae743b29161d925d8ea60709deda5f54685665586e61cebd7f9189a2446d1c9c5177dabb1dadec4efc85fa94ec45f075686cde67ef8f52fa0e0996ca9c044d095fadb779b3875eea40b6cf602d3b5855fde6c0ef3d4b302fb52bd9766d526c8d1da869db54345acdffdb1e021e04d7948d66c544d40ff6dd095aca2c14c20ba61fda5a569c3f70588e453ee13b4d2eaf9b6f541f505817707f28d1524efd9ad2dac61181e7f320288097da94117eae159c62e5c51ebe02888b18879f684faa91c2ee27d3b409faac5b4559711d03d65524e402dcab9c5883b1ac7559fd42ab618cd4f5c2acee605282d0342eca9747ecb95533cc939d7a008756f3187a712dd09cfd03e52f1ae1b99bbb0323b683734ade48d12b431bf77d809ab9516c55925d57d8fa91b719ff501a784ed64d62d90de831936f46a2415911fa10ab4f5a897651fb128ed15629a463aa6fdd1bbff9947ba1d30f2acaf831dff7917c900a739a1fd614030a69f1252b93feae8df5558d0d1c28915be08c862f15c45bdaffd15715ec57b4cedfd660b6f763a1309d5d3620f2fc8c46ad6ec4a3d721bf8c85333be8c0560aaaf259d5ba37477b9032a14e3bd8d756976c1f8bc2ae221e21350996ecd4a77b0b7bfbf299c60284193fa233d2303186bab73f39f01d5dfe35a9d516b6abc49c7cc72d55ca363d61582ee065689ba3a32d191e5dd0b72de6463e1639bab825d57b5e6e5de00a5089c97adc71837d96226b0c6d75d8de2a5cbf7c5d5e8d7c53bc93bc4fa96fb4d463e9ce06e69748919af0fb7cf07d24cbc82def1b13938ac6c8326b4196cdc841963572e01338af2e635b80fd8c321d9acefe00cff75146077ef3e5d4c48ea71077392408a5dbf3b51207174f779c1b0fc7cc5bec586b408e4744a689a126e3d9ad613bd10cf5c8de2d8038f3611fbfb349054b10d5360cd3c79147c0cb2b00f5af5a34e9c71a80f22c536079c7317dfdd92568adec45fd706686242a811f810ce36099b352bedea984fd18431885d867eec94f441c1fb4dcaa8fd6278158e677e020f4be3e57145cddf9eb0fe3614189f05d3953c327a5711a1ad8384a7b93ef2c27b06ae877e4947db63300a6686bcc845de15daff251f61bb394dd2b0c3bab3dc16769ff95a1d90ade9af5e01f99b82147c1d201144ca455e6b6a6d16f20548baa841bd234deb30bbf8d300edb6dd54da7455184e1f8342f2097f5ac38f4739c2f90f11eda1d8ad6f5844fa1405a9c7ff8f64c99ffd70e2dfdc37a29de1a70f5ed089a1409c0e9130d0ab545c2d2762eb95f33bec28b9ac8dac374e8e324e51f5f656770288b5636529b014af7881ad074ea9771ee6872865412a667dc86487ee341f9b1dabf4ac782bfa44f42cdc30b9812f841b8002dfcd62b6f051ed1039b3508c13774ef4f3d09e32eb139263746af82c6acd3e51582ed983f6f4e67af0ab1244e9fab8ddc0d54aff12f3f23b00837949321b679d1bf16c3a7f4dfecb333e44f0258d33d69ceff70ac07e948f5c6acd2ee3ec450db17ce48394447c2b8bd4ac37cd1705070d866cfbfd9bbf851189bc82852a1ecaa13908053cc1a7c17fd514c2eb8277999d027279d132bd45a6470ded21bc3bfb738ea2697facc9b697a9423986b5d1b4d4cbd12c452cd4f8a30b8a19bd8ae4c9b0e5785665ed28315bb9fe42a7985b7f394951bd606f4dc6913ff9ab647c605cdfa55475f76d0c5b546b128855135d2354e5b9d42be470d6f64a234e1b7af9db8836fc6e3c12bf5c092844b1980e1ec8ad05d318ac7384515d94d0a8ec6cf56e340038e83cc5885b02595e667871e794cd136532ed05d35e4b85c761de3a9d3f696bd28c006fae80c864264efe2400b23b7538c9f680a3264a85d222f9cc3973b2df90018ff67af5e2b36512310fb1487f951486cdce3dd1e1fcb793460a113594c43ceff24434dfd8ace2591a1b427f22d9c1117cd5e98699523f5bccdd6cab99829c002f3f246933b967ccbf2efa7eabab06110b7fee6df8ef3222942b94fd488179da50d191b87a41ba132a31226ea272ac2f80b296af883b5892a4decf5429299a255ce1c5f735aca4d5630d02768f957c12e5582774d19f795106dc66d8c5e3c98a5c56064ced61edba70a8e2bffb7e3b624158eae35a815c07c20fa1b0a315ccb0571a9ddf28ca5d6c5bec0a706e94b4c99d9a2725ab4aca5dde5dc7054c296c415514d2d9714ebc902cc0c1b26e3faeed000626614c638bfa64b022fe468571e25f2cec624d55d1d1e90b51ad85e7f07672842ec0c63267885beff8c41b93a33d7b4a35a1464765d49cb700883af4430dfcfc886a9f2126accc02927e52b9cafab456f3bfe38d40444cab176c15ce6f5aa4567d8662978f10bed038557461adc10f386fe4ac8d2ac702cfdd809fde3c04747a533d94fc6b5c3943317108f2153896d9f1362ab0eb05c50b9ced5f8a72b4745052b6bfb782384642c7f996d4ca0a501fc0e0e45e4aa89d479adade3bd811abc1c41a6a329c4aebb64015a76e94dd45f3260863001155926b2170a25a37c421b3ef901ed4813d3285e5efc22a3b5a7e3e69d72dfc06b6ad5f77d6354d5774de0f1d416205f8b72398feac6f6f862802e6d274ccbcf273f50be4351f7e00caebbe9454be2dcb60c5d7d37736a63eefd9d5a907c8a69c347358b2b5e653fa6d4fa79cf2bab4c0e2202aab76a0352b590cf136baa724cea02d2c277d14360c0712b17f43df03a0e23c7ad0d13485150ca224c0b3f39d4e5f2d718db6308e003d3dc6836eb480320b22ad88b17afec4b0a354911a3379e51a7b0d2a87c3c39cb9d6cdf29cc2944002d9ad1c3efb0800ee186bef18f01f5b791dea4719543da923e8ad12f48fa790726960d49f3e0c906e085023d5b1f978231dee2b946b63ee2278502c9fa522ec01dbb0f7fdcc703dd77beb7578fe6e04c18203201f919f355f909d87c48c6b1a573684cf7f2b9ecfd179242c295fe6c6fa55106ce24c584482377c6d8ccaece21d82c3a24ee5fc0e060be392125dc987779dfc580627f7e43276d5241fe90c0efbc757b99182f4c11b3810ed587f800fdf62b12cb3a7e2dd175490f5a4713264980e275c7188edb2bb099386264e7126dbad1630105682f7dad9962843e8c8ae9d5e1bd216814fa78c8454a5a2510594138513ac46bb3ffa230dcd0526d835b2b1c01b65a7f4816936b33c92f410a4202ef290e77c5e82ad99f91ed472c8e1397d3b0f5b4c6aedc0629e31944513b794d5fc752adbc8b1d9e5a471dc5241340aa9d7dffd2f6afa73b84c1cf4bde3a4b6afacaabd8b803646af16af66ecca96efdc9c7493757c104cdfc5e6fb8307d54f650918e8b30e77bc9e58beba68eb6faebe93b46549289711801175eec007b0269e1ba5f37cfbde035a718820ef2c2710f8c388bad1f7f78b4239b3189b6c9f0503eb3a250dced1e28c69f4e0a91626dd3235d8dc35709982ce4487c03dbc09b23b80c0c78f0fba23dc49e941bd30d4dd13ef8d119e1ce3becb3ad82dcd8256f6efe31d212947008cf118518c53029ad744fb8da234813e06e22390a87443ed99c71a3b7b04fd0be674de130a9515de956d61c2d71e291323bb0896795a8938636a2f001d47b943f80ca31700a9f009dd352713f7859cc8defdf0d2e8a6db9e1c8129564e1b03108c627045b9b71c84784457674c9060c7fd50e42c3d81c2878bb3112458a864da681d4c857ce81fb62e43f8a81c68ff76485eeb8cbf12c55b79a9ee528115630955e640bf90638306c6da13bdb034013f89cc0ddab7826c83ae0bc8c7128b89051b6553db3e51cfde0ab0af8e501dec89864552fe6df83f65f280a86d52315c3682418dc1ceda8ca5c06ed403434b4abb086fc3e0299dc76a0db0952b8b3066055223f659882541c2b1bb8a04d3e5a23fd7f2676933988bfac64497e903af2fd852b2978cb35b769fa540da7946137d7cbb77477fd212137ee6e4b68f04d73d184b97774099a3b4a364a5cb4ae5ff62da7ca6690b5033e85c3637fb06d4cf1a2e06799e5e80268136b591665ff8ced9c1e126d7f6f32291fe7be66d34bbc04e80480115cfb10c68c061acb2a0c7ab6a99b4a09926040896ca8098140203d25f78dcd7e379747ceea9319fb7f699bc9ecabbbbb585ca0c802a0cf6f958f22cd77d89a21046119e9d5aea127d47b829fcbcbf2035fa8f57d685e6a8231fd2f73ef6160aa51dcf9bfc3957ac0d7d6a1b0dd88776206c99102043d7559a3de95a1a4d4cb9a9e5f79b93af3f166e7ef8ba5784dd667fc53260e7cba7a5679c807ef5e9f3542488d1c5eb2569f8a834aa2d6429879859eca06fb1871e429122de8b5632d3861feda5428b019ef8c485c79dbc304eb3b6c92b6409de03d120b94da8c690b3f4a0fcbb3afbaca6c1c95b9931e5fffa609f441d68743820fd1d4813fdcc6b5c49b29d5ad4c48f49f9bf9d6612690053461a45bca27cfd3b6b8fb779b3f02b972b5ab8cc386d114f49ae337767d09a200e32b4523ba8961dc67eeec7f2ba382a43a235578f7e997f589f041459a0342b5fec79255a80698eb4f3d445e1b3fbdd3891fc44018091a2cf99fa841063383ae2527c7d288ddf56ddf4533ba962da7ab22ff6dbb5fa608055a5fc11b3a00d163e6ba6a4cd56613ceb8c52f0714f3ec75b850963d4746ee193caf3016ae01b871c3fdde17064550983c0baad6203908ed89a1e268576238d3010c59d5faaca5524d70a7b393d24854f9a71baa4053695d4771e6af189e74bd57f5b2db7868247fd3a16bb516b3778f721605f5edd9aa5f522ef783f3422e52a209df99dfcab265070e7e9e076f5aa235d6fe4b9142285e3a57b9898003c21d6fa73483795adbac482674d0de4c5e37a578790dc3138ff4708a81124749dc88215c664add8f0cb02777c2e013f11eaa4168eacefbc43d9c951602d0a18ada2d57a7c93284edd21b15710d6e40e40884aa26e801c3eabdc108a8a327374d57678307f1ed07dda837a2b0a8bdddaba8514040d54893ed7d0c5ba0e6986117b0e123fb54dccef50bb05fa5296142ae6a9a94355705e44317d8fead41a6c7609304cb00867452ca88ff9ccd03fb2862ebbb2672c1bc4d820aa1721c38d4c2be5a5ce8a5fb662ba48c8ffa96ccddf76f985d6797c9fe3830c210567c5094fb979343fd5a1804c239a2ebe9a0e8ac283b0cdbe802c42e2cc5da800c4c1d89da72ba7489ab80e2aef0488dfa69ebc8434b95c1184244de93c7c08b041a0405d7d65c590e08ba825a4f0a009d604ac4c127dfa788e4c082259cf09bee5488ab8c48e55c0af029565ccc53ce53128a243a4646e9ba48cbab3aebf72d2b9a2fdd5030d207f0f051f11eeeb251abff2e59172d78221d1ccacc4c0b50d93c396e3ddc24cee76097c8c5193ca2351884bbf5d043cfcb31af4277e1917a0aa0d0d82f789b2864ca44f254f42cafd32951976cfe3fca5f889ec7108404ef4be9fed244ce1a7b2aae967323083537d64ed46531196804599259cd28bbdc3d1787f200f0351933838deaafb1fdecd699098b89e48a52fa43df6ec942f19ddfe80b78c8b4562dfe19d8d01c742dca08a5d9f599f9f9970898d05c5fe1bdb03457d4f1be23a9af17582fe54e0c10434a874090f9e3cf8adbe30590d57788b9f6c184db45a098432bc8e388c8cc5dff18b7cdec4e2474d4d09cffaaee86db1183cf8bb3e3ddba50a7e6a438f1476f340fa1e265fb4e91db83312f18ef923d6d67dc5a0a3d1d787e282bd2747c0fbcb87be02eac85c49f25504a04597d1c28141f72905ca5f26b1209130ec9bd77dec2f9fcf32e72291538e4322feafba713bc171caf19b2eefab2e736b9b72a323e0a1652e04a44de6c9caba3f25c0fa588bbeb5506cfe885bfe72f0153cb66a162e44d8c66ae72772db722fa0c1b1daa0f9a089647fdbb3923156cfd6d54e757d5e7fc0406b98f65d11ec6bedda6aa2710dcfb6ae301af8bbcc40da5870220c81f8bce4430f9f03cff3a136cd79d39af250b304d589a39ffe579ad740141a764a85620d785fe496ef0af957e8a4d40a4c49b43a82925ef0845bcb8f39ca1efdff8dd90386624ff7e5dd5d98e7665539a6813b225c52343375603bcae99916e7c896888e1721c96ddaf433bf72c43e70297eae820cd10baff9ec5250f889ea7dce2ad976d0a23841f6d8e49530c877f7fdca77233917cdad368978e80fa2820739d033825bef86bc6010d9e2ca79e81649edfccd8c2d607557be155cd6edc6cd3111fe7c601099234124796ee7df7a15356da747ac1aae4f82139172f4719f16dd73a32a860b5bc1c09d2b003003133bebd4df5b43e69d83e01154f31236f32c6580885476eab2dd060259624dec9cd190a90bcff69a1758983fc6a6d745ac55f2c016c4d8b588be3adb6a5ae5a2fe1f4f75956c6f3c0317d2265055eca5b0daacbab5415372c4ad85b1c6b1a02e1f6d4ebfe4fa56d74809b84c58c6f85ee903baf6ce928f2b4ef20f0ad52f2897e903b50f60415270d0736f3b48c2a4793d1744fcc78035e70ed5ff71fe9b22e54328aded71080c1182a0227b861198fd966074550ad3edafec9e7d6bacbe392114265ee27f192cc146d7f7927c7b7bf2db247088fd535e8ad094b382446113524643ef75f23a5989045f160a90c8f561f4ac601d0ac73180a200c73d2f4a5880c0c8882f32343b6fa481a86b2cbfb051c8406d9c98f90d994a2ae124d542b1b36afd5397a7cf7b7e0f85d53bb72a51ca4127bf8e0eaf9bdeb05a2ac09e10c6f42c297535bad2c1bb2bb3c40499cf83d446ab7d7bd6b28356bcd8c998f37e3e4aee951991d107b430e1529e4d3976ec78c012cfe957ca6c0957ebe7353a52c1be988a65345634fde41aac8a9f01e934bd95a5de62f9befe0067ddac1ddd55f957124e81a5af2244dfbc07b18158ef04acaeacd26d2458e242d5f43fda424f8b1d4429966c4699302ab0ac3b7ba64f044bf36fd393405ec0d78a79c9f4d30822181765cc12816169ccdfe34f1554d2dba44c35075ab5993fc86db371f1f647645171494a1eca4198cd30f415d8c84031bfa248994decd1081c65ec605b15d6f9cf3c1c3918880265368a26b64b6b61b0a2dbeeaff14bcec3db5c6abdb9977b8a9a5e27c088226c770ed7c25af7a5fcfe57e17072d03b57170e3977b194e4ffbfbbc1b208f70247775dfe102862dfdbc3e69a1609712536acbce459647364293f394b0439ed8f5b0c2be75849167fc4a855f0279c5c6f312bed4458fdde7fc3b31ce6677af03170df817ae2e59bef8054aecaed551a83113ca943bea55d9d93c26d7921f38a504d97669ff5237795d771f90fae5a32c79d86f9c8d1837926631533eb7bcd4254bbdde33edb2b34db90a43ca9b3d32ca59fb2e4bcdbc0b982f9537626bd30a0a68259ff3fda2659287597817f44e99184dd6773052283a6191d253e112f432dac6ab2c28a3b3c6fe34cf2cf79a8c3e7cb214ead8ceff5c65399339494192f70cf3b9134074694fd76de5c2f7f298bb9e4310f9a39893da49934247f97c21bf277bc9d5e9f42578b48f37ea7790d668c36d55142f53a85c551b5a108027330390db67f473879aca2c15300424f9d7eea29d7bcaea648f2b3e5e55136bd7496cff7f1def7bb31bcc949c58905ea21fb5a25fef9e535fcaef5bb8cdd11b10d743c9f35637711b3ae884812c1fa30e105659211b0ef8b9ee1133d72eca1c486f2066b4ab6ce2047ab67260252280a24c291d8d988d58e76b295d15e27efdf263ab7c5f77e04d234dbef4b5de19760345d695f1e2a9e28cb4a04e1193502eb3671d6140563220ec465a720eb19501b57fc7290a73e5240e7d1e8d46cc0e2cefec2ecc03d0f2fbb3d72170b749f5a21d6c836d13e6bfabe106ec7121c6d9872c6538031642733c3e829c875bf1ebd5cf9e83c8ba9599c898f492b03f4e62bbdd64c1ace4556370d0db341c7953c82b307840c27b1b1438bac8b9b0fbbd3a39975d64301a7424181f4370a67bea1b00d4ac62f0b1e1bf4abae5ca09e38db09eded19813251935c07e4deacbf02f64f5408d42ca1b83eb9d1dfe3c11834a764a1843c5fc70cf28d8727d0ae3529e3686f8ad68b5047c399e5854986e577dfbc9c83676229a007dee903349833fa0f014618f5d57f92519dd0e9b5776dc92a19c832c414c0d5795615c132f3203e2325c1f95891986291cb7853501d18f230840cd878fcf473f0fdf4a8f44664bdc6d9c8772947027f2b2dc60a42ff4fb99a0450beaea22e4116dc6c029f19673fa12743d88d7f25b1c6cba258b2a578e810a27c2d8c8fd40890fa66155ef5908c5c161a65aec269c00aabf583c898fd453965796b3a4a50900960cb2b5760496b9eae3566b4973673a1d7a5d4ae5f4499be552dc0e15b08a12714818ab2e4faa60ff87c23c787f49330579c938982b7ab467a8176a94b66039220727a9809090358fbd8e30d190be86231c008848abc457add5dd4b9a1d07df38b84453156df4b21c02ff0b1d5e33adc6ffb7bc4febd2d0285aa213ae5b0d9f25ea132a453e445114d6b90d943e451491934337466212c857a4ea653a06ddd36a0b0881a8880bbd1ac720caeec77f54f355379ba4b500aacc533ab2d596f5268599990ba7e1c7309e52eac575702ed96cd3f95be33b28f1e6d3f77ef981eff2f924492adbc1e3760fe85b7fc0cef02c7e8e2cfa9a9af83837a5c54c2e5e2ae345299d51acaf0cd7e016177c794a4fc8a8f236ea332afad85f57188cec923251fa180a32a31f8fd0cf5a932de768ba386c9eabcd3581ad6cae5665c3acb492d9787e1420478a091b2e34531693a0abe649e1fff62a258c6fa5223182f74bc8e440da4fbd2274f4f17d21cbc91698b17cb16ab807898d145be448f04d44ae410cf3ab116b9c76c01e4ca181a7d8a7574643a74873bc3ed1bbec4946852d72a7be017f0dbe3df616dc0d420955725309ed711635cd6aa150fa1d9198bd0a3f4961eaa499278f7955c54f61d7344c2245dcba360466fd6afeb0f8c07b67734ab2a32fda5829f977095483af5fd6eeab978e9f9548e2fcd2575b2e444316f14b8ffc318eaf481485ae243a8917bfd2457b9d81a257d3d19dd762fe9b944dfcb81dd7a0102304691bb09ed47d93519f966e6400ebd59c24141b531a34e37efdf708cffc2d37e15fbfbd3ef1fb572e8f04ec8cbde026ae5ceb7fc5e1bec51c9daecd3f9634726160d8208f1380e7c959177271f91defacf47a9115e5879db92445c7c11ea456f734fb9709a9bca99466449cbe42f384fa7347ebdda62de1d75a32a4dee61b4a3514906d2934fd31224f22d7bc3c1f7b2961e9ec87a42045f9881bd0f39cf7e08db84d2f8835c0f2f56c28901634e056bc48c71fae5ffd2e923657d89993d8ae6368786a813cb6837045cc6236ede49c258065f1bc4a12f023fd8d285b7b2c0878dda88abeba3c57458494daa897aabff7a14d0f2be3105f4146124c93a360832060642c9b2ec0d2c7810855d5e281369543f2c487cb53b05c988db1fcbd14a2ec9921ac911ae2aa88c39d50695f269490b0edbe5a538b97e86d55f4d128c6ec4ff067a75aff20330bd4da76bd6e095e7ca0a4591e2bf67a775d1191bb66e5c3cd0ebc99335bf800b32d36256c8f9808bb7b9d214db542dc7bb036f536080fdde63c76fec4a1e898315536d8d1345107dfaa5eb3537fef32783f3cabbb7c937f1e125d448971606de8b5532d860cc2e04bc56f6bd9fc6a110f32a931d6451f3bf718a606fc3afdf65be6218015797c36a25535d75bab21fc8332f303f0e201a8e3c80 +Output = b5d524d3afd57b41114865bd222b6616 + +Len = 58128 +Msg = 3b7fc100a1546cbe69374eb5eea8387f3330df12249639961f562a74b34f60b0a8bc7c783f6572fdba1732811f5188b13a404036e1ed8f877cb6ae01c4fbc839ca1916913b9c4909e3b0285871d97a3c7ae4260ec01e9999b3c3682c38b936eeaa7ed9721e60b88becec77626ba8d7c5fb05d7c2498f2075ce679f1e99f374764fd40b447018882bdbb169c6952666f7c6899c7b04a9ebc2d4889dfe6e10487bc101f52eb72e8190bae944ad77bcf177e25abd617ad4c429ce10a8f540787ba209efdf597d096b63907b513e9ad03ef0575e829b32797152c3e6092b9692d5952e8410ec49110e4b664fd8a285cc17082e7f3352b4febbe4bbf208c7f8c81dfc38aad210a4ae32f1434d2100c01642676ea317ad89cd6a88bf1cecf2ee811d7e30486bed15489efc2f5d7381d41887b61fb477d5384c46e5d54cffd301269bc41d4624aa24471b153367184d4838b09d49999bf149e516a4086a8793b81d6076078b4570591371e45553568ba4e083c3f53acb2a45ffa46c5d5ecd599ccf343bf60116663d1468109f0976637177cad12b7f4fa8b301b6e6de10194e34a4debbf38fdfb557b3c7421971bffe35654b6ef1506e921b5515b99269b3990805289f051de7842f565821ca747b847b11cf43519572100562898e814fe264a058d88f359477fc4e67e156baf8f01dc8e51df85236a14cfa90da0db4abefd48506b7328adad7453b4c2b88f1e668efa648ff34fc1b446b8147cfdd326622133e788d310cd84f867e6ffe60782729259ca23b9f582da29823ef31a70366c34953152233c37627e7a036228656a17be5335c9ae26d5205f967f0c81230951a9d4c443de1b89da691280b5ea1933ea857f1dce4a54473b3b6d5b35cc7c0da6f38b26fa8e3f23315ac9e557b5938e5f7a5618be18fe379f5f8f59eb56dbb1c09420dfd29e07921bc5f8b7b42584b7eaff408d15849544a13e7501a9aad2a4531e2e35689815650e3d376e77843d7f0196f7017137b9fd055aa6d90d52f143c2f40bee28f6d90a7d230e700e8c5e1257d3b20c3d8cccaf1036ad4662c9a81e94b852508054c2f0dd09d662e598473042383a03f70e4df97644e0e0668977934cdd9a133b1c83c6c27427cd992289475526d79f1a36ce5a9c17fa2d651cd0505fc63b9c85d87bdab1d48b0695c5a4d6053213243380ce50f62241840aee52c44214cf530cf31bdb2fbd78b467fc2a5ad6fc8539cf96be6b18f66f9aa4986f7d984bbddd3d06f4169091694d9c307a445eb8a6463ac32f077906dcc7ee8596cac6dd9fa1927e953b88e2e5388f0d1520e128eee021a080b49ac601923540596a624ced36b9e46fa87d44750bccdcab8f12bfd79e00b96400f2d67690155337aadf0c1f02ffb2e3fbe218714de2398ddd67dfe8b65478496b159ac4280b28b22aa1bdadacf074b2845be192654bae3c9a651baaef99579161779542f0835b49586eb4318b18a42c004f3230e885a548547ef596904be1dc729d48ab501a457db27a921323f4cbe0ce307ce55e0cb9218a39f0244ee8b19b1d0b4745ed3c81bfd779c9fb1df146516cb444182c6d4468aa1a9ddc81fc115dcf25f3ab1e669a9025d0ee21cfbabdfe5a2f0a51da13f18e42854137c002bb851781e0536a34fa8f2c04515fbfadad581525421aed9d2af2d22eacce9f790ab174b39fd767041c1d58a8a5ed74467eff3c1b8debed656b46d76b12f956db7963651f849f8b6089cb4a225e536411ad442d96303d4ff92ceac0cf2650acb691fb774a31244de6ce096f05ed3a359bd2d76809fb979be50a6f3ccf495d0776ef1a19b817fe34e3536845c7d50a3f416a198a0b228347a56e4499e01e86ddb8eb2fcaedbb95c702b4585cec983c07aefd9ae20e5778d9c6d2fb76a5f866b5d910bd094f9e737ab16b6a12e8b9581530e7cc3e880cf0c8a5d2f4418579652673ea326372332fd66bd30e0640cae6ee73b33dce0cb573aadee8df8903141a8605e23057ea1c2350be95c4b5891f4109e40a603f00e389e6de8f1dbba35aef7b0b9327651babe670162e1e9f36592eee1e47c3f009099c1331202f67eab06c6be17798098b84e1cb0f069c31bcfae9116ee5e99f89aa32965356950c5da709ef4409f2b3be19cda805b99dfb916717fa727f317c0747d606d19cef1750b1506b9fb4d7f237ecd2cd96a1b47b6830242fa57e4c4406651eeb186d7e278861c8675122b8536d60c9723e79703f85e89627946d8a561b844599b442f2ab493aea6914be0445d337fa5c698b41969ef30658abb78c409b1802b911a7cd1137af3ef736f15c481db4edd2a451b93f07d1dd5977f6c28219a2debfdd267e07c8212e88446710e8817a2c7b7b8747874527839075b5bd992bb72224632975ed6f4341a2c979d295c2fa3ecd6b866d1dfb46a1a4214ede0425c7857d403b5530b18800bd42c401de36b78d3ed0c99a518ec1bffb075cb441bc567120f0c68c802361f45e2cb03f307134a05667db6fc0741b270b9459d0d043e66dc5f1759c3a3963850c03d8eb2ae6e4008a7d365df94fd57f5c54b0a43e40e9d3b2cea2f4fd680f4b2d4498862c2c583661ad64d54a76634173c50bbefa57e35b9de4f9371833b7bf588b99a0c2a603aa6254d176628c66e5d861c58192ed656dedd0b2d339210f4a043546bb7ce878e5132026a1aff6330500b7788c7675e273191e9a49ceb47873c6ce1a46b9682a7eea8bbef7a1486a0763329f303385dd13a63b0a1b477285e506d29ec306a98ac05ef414e8d4f76e65a67f942d4891d7b81b927cb841cfa9e64adf4ec0f3213c51f6f5c2e5b997d2b810db11d4342e44e8ffc18cb13c307720194094b0fd6391cc38fd337edd8e197758f172b564bfb72eb9549486a559500ae8a32b2393e53d679ba70124af6eb51bd53f415178caa0e1dea82eb8fb8ed70f3f735c99353a81ec955f9677ad9e382e1c30f828eee384bae658d5c8cd657eb5843db3728fb821a3cc937dd866b11516945321bc257ef50256d314269951a9966d6eca5fd1f27f2597ef21d7592bce7de432388bbb015460a6935452cdf80a1a41930ba1ca8e0cfa8dcf2cf4f382e6bc824ab7081e2f354e6c3620edf9bcf2b9a726f1f8c7cf5d9b24cfe9a1d44ad06ad50927c1dd4d1a33fe2804589b15061d14a707b5585ae37fe34e026e69e82e0172fa053966df75aa02e579233084b69d00afc7780a9531215fd5e1cb22ef5208d299d9df497aca28e0fae9be48a086b1f18dbbb13d22b917d10412489dc4def98a650043f3939a393ed4e0ba41ece9047ded5ee19e77fddc0d350e57490d474bf0e822e803ae684363000887bace7ffcfc2b1b897d0971d65b055087a32d0d88ac9fbc3bf84fb6e00408aba721d99e13f2e39c39775bb7af50e1634a4aa8a42813f836c02fec0887786b44b90572d5e208933b420be331cf7555d12f9e04adb2dd8e2d153907dfb256848e0de43eb9df93b68363b93462af3ecf04a81bc58ca15fddf99b92279ee924f0c2462c91ac752aca0efefdc3ecc723d97834427fb38c114446c3d9cfd8a44a4cabc26d20303b344a3874481612cfbaf1c654b077c4dba87d7f4e5e651f6c5cd48533244ef7aa56b38a7426af86f16aa469a9d46233087bc61d6bbe9bd5b9d344f8f8c092454af8929f7f27f4ac04b96dcc742ca380ab01da9bdc78b89e1523fa6183e07ebb85a063c1e5ba9a14523dca797437d0302be10794f10b5fcaf6e58179750288bce2d4a3ac585ce432625e26fafa745cc4138ff97349e505fee79e668b4c8524ebfb0bdea9379d7798cda11fbba760cdaefa651cc157942fac5f9516216b06f7ab36bc716313ead8b9fc8d1155eb8b97633906ee09aaa75155d7800cd660f6658d1e7d18446dc36c186798b83437634e8357fbe9b6a38cff8de7d5d714bee1f3042ab41fd7b5c5c636a75a50e12b865781efba9c52e2b3aeb6f91cf156e54824a2e3f814978c506b87242897e7384346e168a97258d8b9d35383bbe83764977edbc2cf730e41f1c09c76a9d9b0de4891144b6f0843061df1f620392810cd6e66214f90d7a6773859e90754b2d89df4caad1061caabeb4eaf11571b4d8d801b7f25f2e2aeeaac82bbff6e9fafb8e7d6581e402835fe08da5f3780e8a5081d4d2e2c554b5565526f5b4215011cec5c7bcdea6338d6b3ef3f86cb4617db0b0571f7d6df218781095cbc43831fa6ed6c439093f20a3957feecba6f0f2f6c20c91870a8090ba1c811e953963151ca3687dc549d6522ba64c8606e7554a5b4c3e8af0d025b6030c53c83b59cc83df3523f846e8934f8f674cc492780bf01517ed4a441885ed5b0f2c9ca66d9803abebb13fa62c9fa1359d28af55a1396c8debc2da692ac7bc2aecb5a0bcbcf21de88eb75acb5e22cf8713875038a908472a8f6541494e15acd86c95de6690005afee6e04f9fc54362eb9012ad23da9f0853cd7d87cacc9444cd57745e8d2fea4156bbd12808ab2be1cbdb71d0ff7a2737726bb2b5d6eb6e0c7275fc2717e2d95b56d535edf05602d48ebd4bc1b2d2c75dee32aed154f5cb8c2d8dd340eef1f52e67fcb2a43e0fefc49cfe4886262aa8012fea16e62b30d24d6769a1b4f8a46544f2f7f057da1e1a385d66112941caf1ab9d5b95f945e5acd689cf0f881f4352255d8f980dabcbacb839bc4eb2edf9cbe3a04cd114895b80aff988c4c64915e357118c52cf9b5ecdcc98caa62711005e32a087723edfdc7761215c69766063416477b6c5a4911ea4fde256c2929527d11f05d221802faeb9736812a69e4b7593d4f6d49a9476555ad27f294afa60b64c3337f686e1611a6d6d35742248f293022df5b079a7304916d4d70be5685cf5f9f49ebb48695e68bcd8f248867b3d05b6f9de1008e6a842018952c43be3702cfeeca2e80f200ce0cd3a065779401412d6bf18bdf258c68a437b591bf57384a283a3ac47850f54cac91ed969a49e5f048a080b7fdd057368033252d9bb2081a0b1a0229e503d1e6dd709d346af9d0621fc5b1f1d72f695236935a7c634f34d6eaf6b6eb618b2531220855cb54145f1b25140bc61583215049f0cbeaa09f3d154a68cf6578677d901cb19dc7f029f09feb43f4a1137c1dc53ca3f014de229f59abe8b244841939a82014ebb6c9cb2344f4be131f6b9acd1581556d677659ba2871ef15f53f20e7dddeaaa6144b4865beb3eadd9d884fadb5aa6daa7ef3d53be64ef460e3e41f16959adb736cff524671bb62cab7f40b3e4a3a553db7e1059327958109bd2d543483f73fda3d504933e27dbe40db296e0d3793b47daec87b3e70e82d96dd7570c01d763030e1d8cdbca57d45f683b2d88902590400c01496bc46b9528ec156e547c69a651e0703305f1f3ca2525e0afb302eecbc5d984ff89b0d8b8868054c324a13d636f8296a1189d42e4bcaa6ac169131e145fa93f5013959c137a915bfe83589bc3e65a577f1cb58d4bae61a00db3aafc9594e4f8e5135a00cf8c87f3c67a89caee3cd27b751a211c2683b04c3b98afcf73eff2786590e74c1444cae4c3101c130bfc51c92a18c9379ec10134f3210be0d9f53b87799324c8092bc2f69e4df9be42ab3e0a47219526dbf2bb21dc55a477ed3028ecc923f9bbd7c8d8f0ff390813bdd30306733a6d30049d46dc9e3c63dbd7271f71fc484e6fa5a3729c8ddd3259a1fb0785576d399f414b0a2ae2de3056c06289dcba0a0b2a9c45fac0f1405dda19acb24f9bc1e1b9bc836fd65044f42ed06acff6ad721835e435d625d36a72dc4a6d6c2be63f4dc79acddda68f7595ac2ec657877b875dd8a4fb7093d9645aa85fc69de3e0ed651006b1bc644879fd1803fe8b57cc52c25a05202ed2ae35fb867e3fad3d32d512de26b874d6225912ba769bd22d49d930052e2b7aa9f8e53fbdd061050284ff3a7722696dc5c61cbed9b02493d399268d1f47a4bbe1607d0d977cb30bfa7d71c624234d0ff8dbcae8bfd821380f6541c3f17a1458428d044c5aaabe28ecc6359f2d51eac3390a6c78b2171a28aa5530b8c3ed02bb942882e64f8408c4a10753abdad3cbef4efb0855fb9598cb6c10fd56ddc8f64b9fd800c2be2f1b48e2e7d1d473d275fd0055a969e27922891c3fb083863478702b4684c8efd67f1a750eb9013f75725317c0549baeec41ca84894f2907591192ff1919e0299fbaa42225131a87e5485b5be613d3a9157cf66a97e42fa85e4819e4fac4f2b6b2564db3d4e5069349827b946cedf9191d5b759710767db16ba66ea2918fe6dc38db7ceec239afabcaa51d89fdebf6472b66afd39d0efb6aaab2f7018581a4e459cf9b9d9816fc17903ba8033f13b07b68260de5e6b3911b41f41dc97fa215163cbc1186fd85d51ec2cc84cada6f10fdfb22f597926d270b58f448c126fb1fb90a2946729a8c220a88de18a67707fe140de2d0af4a44a583183be1b22393ab17ea9fa2281736cb210bfbce5fbee16309c6ef07f6b541f3cba8504e641d73a27605a58d721b88b9ac73aa0dbc560725244dd000347c6bf92b31bbf99fbda1ea1f83c36f164e8cd2f2e8743e86e8812eadcb0d253146cba0ebdb05482bab276d5a8b81b0dd5949ff3d91dfc7851b5564ec672fddb4bc67ce52cdb5a5cf8e0d116e4568b88fe4c729d396751181988db1294abd8f8786496ca9305377540e59c0a5daffeff4960f36fd20be84420631fcab9b3fa5704b7963382b672683d415614572cebed3182810035741888f0e472dbb833e8638b3fd9947e77a1a228848dc97345e8bf6111a9d2d6286863258d92ba12a419aa768dff81e8c13baf9d2fb19e34936bf232aeec7c36915e4f18beee0a5b7d049840f27670541bb70d25835ff71d9dfc3230bab740c96770c954f8f330f5373fb9953dbcd432ef9a473c5fe78880bdffebe5b598e510f3364e64ec30c2625b318acd90514217c55bca5bf5e6c7107c0d7bbc301fcdafcd156ab2d925333561708864cac23e753572130ee5ec175f609b8e4eaa9a6ef86d949ae9704f07e0d2833ef52d9e2ddda883bdcfc0560da004308ff795c74d8d5d4a5b53222cc4f736c02ae9393394a3a6f72718e5c31e84cf52ed5171f4edc104ad189a6f3cdeeb06ddb8db9e210789a952fb64f691ce903a7942e6dfc1c455fc137f29c7fdca2ebb3275269ce4fad2380d874e4360a234ce2a1d222fac659ebc33eb7bccfe2b54cc44fc64d60de32fdbad773f8cbe1df502cbd88df213461dcd74ea2adeac56dfc2ab9b10d9fa54f4fcb927b312e8b65361050194c7a4fa45a86cf7918d86f13236dcfdb51948d4b413973543769eefd2713c24e100cfd6c8c562905a4a2c6eee813f80bc0457c70fd8ee0c5b384f4ef4bbf7cedd4e027ff9ad1c50efa4fb44874a69b0b02bc5b04a85143984d858482c99be4be3ffcb6a6ad7f095cc1e72067efae22a1c00113506d0b0393ac768500ca2f638bfa6a90a9ede75eb6a273f19480b1f496a21a8a9c7243887f795ee1af7504621aac329f5081912de545fa11174f3979b14f11aa30df813a235b467fd8f3a14734fe5ac9e39105dcb25184673885cd19bc70ee5a53dd4e8149fb3547c26b8e7ba198ecf8a947ccd5e26f1adb3f4af63c7dacb7814e9430c5b7003321b70654672921ef13ebc96d7e4046c25573c53a4abeac7609692bb16e361349f5fdec7a7294426c02f13f7041937f86bd1e1f24ab451732d9ecca59e48edc7dabdd448803a9a26aad03d25e85a2c16efb867f39c7da96f4d91f9baf8f8702d92b9f36078431eaf1fc69a9bdb136b581f8f30e030747d1c3f14ac33bd8e92e655d8bec7e5cf5c10ad76aee182f1702c79aaff409d1536fa709b46d85257b07282ae98b75f3bad0bb2650c6f4660d5148ca0158d38ec519a809a6bf16df06362a78003e74b14bbe0ed1615bdbbee04a0d713062eaa76676cfd968e1756f52627331192b04fe6f340bc0e6d5549f57941d75853cd582fe2f236242fc2a3b27340c3b7c7aac42eddab9db265ce8713cd880c0480b1c8955ebac8a7c38bead4d54fc807154f5e58e57200b6b161d9c55bd3f38c1fa48233253733a5dbcb82c8b694be640e1664f1a544836fb2e7e886bec61c7372ee0b75e0e7f5b2eb1a01fab1b0157304887e859783a451fca909e450cee54f4d26cafa2c5d9d3383efff0731427ba8ab2e019126cfd211f13dd44adc6efc63e0c7472c420878cc08c5b06acf9c5f69746fa480fd799b04330ece369c26b075e0481688cc6936c11c33fc91e75e1f59c2d5cdf166217dcd34945e442a76afe9ce41af9c460045d720a30a1902e859ee48e8e44f0b57e8c168871ad001ef4933fd1c88d3295e3462a89b8f6cbccb8d9b69219e16577d6a85513f7a86bce12ae91f5128ca00e370e82695e3098f8838e5960841c3c502717d8125f3c4a60cb37d878805ed473089fc2d2aab7bd5aeca51622575f3fea7ac3e7ae32d0677b28165d829a6b966b5fe032eb25f40299fe0735fd1b1134ead693ca0ef6ce88c82f346839e91cb09e43b919dd564d315dbe9afe1b5799e4fb446fc85c369d76eeea7740c8f4d7e8b5bc12c1cfc62b10503647b8a4936117c3cb3f2bbd77a5f99661c82f5543050858d2d370eafbf769186df7adc057d094ea73eb395b434ed8689b107b095f0fd62e8ee56f567f17025d6b9023952c4e2519445c3b5e2100dd0ba0356d0bcf5b1be0f72e063adaf5a3c839fb634e994390f8477878ee9a23ce2878214d841b539e1515977cbe92f71600de21b51127179e2e83283a31351f74662cba639bcc5e2976f1081b0c318722ae62e960065c3317640055c7527a5c976ec2eaf67969e382ab926a29493f0c8e7ace3aae57c3fdc341c7e56977f143ffe7459750457a4c725b01a3efa042ee230b29fee529e1de6a6edfc265c9233a737abaabb7288800c12e449db537c494a90a7b1c4ea7403fd39250d2066f97aabdcf2b0d744a1a6737ce653ec3364c68e81ecc7c31f66786c75623ff9391d5fca38d9fa5cfd2b8e99ce06b7060c663d1a7f02506d641de1d0e625f2f53596696ee5d1f5b0fe8eaeeb70f5f1ad50f8f37b0288da284ae2e6a705d0c4c8fedd1e266e6b2177eb639de510048246b385b02c96d0d388565ded7b5ef333d90759e46d2d160c162612c21325e2e7567694c9bbb67acb01f8f76caa4c1dbea9b1a562cfbc5314104144c1f22cf1af714ccec684dbf72f29b547ead067b0c3bfb0380fbaa6b2e7facf51f41e9fb1291b986c2d2491d67e641db7fe7a3c5ce18f65aa41ba56b5e64a22c2fed4e8c212b9dc2564275289475584d01e043452a69d6444af4b46ccad62de2048c1b274cae09a6311e9b8900852ad18a00aea62716e1ebfbeea11678be963f248716769d00455adacf81e8b3fffd90a4afab8ece0760773e7133127205266a194408211b0a9907d9bef0ebb6cc1ab2d65504a626259a109ce53108c091228c6b2db8d0ceb44dd5b752af3d10d2c95ea85a7f953756d9dc9cb2649f684cd5cca0a9f02abfe7a8ebfbf28884c9fb51bca326e50309836306c6409480741d8653421f76d7f589f3722d084169ea2efcf54e21fd9aa59582b4a2f78853ebeb7c48d9f9138078837791d6fba3937a53103132b491ff12727b0fb9400abfd6a000d4eb9e8fcd51be79717d3376ab8151d697d54567dd5804993e9281e06c3c235a1f0276b26587214439aa18825808129650c13e49da80312369b523d303255cd250a5e944f122931f12e5128e43157d98837e05fd9e90e360baab8fab2c9a33b0905d5f0c182bfe5124b7896413b37a235992044bd293019957fb2c308ea1903b06b040d383a9492396a7e5ca71e7f180fa87a1fd1e8e7317682d612ad2455bbcdb28f461d9a45cdd913e8e8905bbcaf88de546d9298b211f16ca98609f8b7c7b364de37ec3251fc73c02ec697636edd13b325aa99c91f3fc8859389b9e7ddbc040a676f2e9327a28c07d67316d6043532bf845331ea9d1f4e862a9a3772261d320bb1384f2d6554a443768ab9142b2c886be6e4058daa3515b6d5240d182f4fbff1424fe87169873f1b7559d8be32376730d3f97f22c51590b039d3a54a67d82053a0f264ffc2becef8598d0024c7fa61b6c1f0293a7c35520abf158a995e5ae59b43ec5f38ff6fd6529970c9f83aca1a5637647e354e18cc2eeb663785712c8240a17a21ad7e1ed7b2bbc180a9294ac3a7aad2f8c3a94481753552468f5ee178dc504876dddd5 +Output = 6cabb6426692892529859c58876b2837 + +Len = 59480 +Msg = 987fe2e313d7c3c619fee3e67ad3b6b476ea93002e2ec2bd59cbd605384b3c5dccfe153946a041c3bf36bcd829392e5386f6bd8f5835262758190c006a47908ad14a21429f37957c708c795f585ea6311ab415d59b2ef59196eafa1590a7f7b90f2baf0707e3e97995cac283ef8b47d49cea43dae06056847b05474b93b49b73ee69678e64ed624394b63e4dd70839c67261efa6101472876f349cab59b3a43fd6cbf0e1a09d2a61d71996c4f61da38f06e1c04211927022da3da13bcbef3aa62f1bf308a13b695bc4ba72f13512adb5be325eb5cd2279dd24e9fd05d1af832f611f1709510f46bac56378da7c2e81c2041b72072a0cb541b5005911543aaa62d4a005ee9661ea0441da5389b4bb443e3f65a44012974bd5f54a5c653ad9d5c7f06564bf5a787dc4a0e8a906c3ff21afd6d89b696c0c64214d8faf0b6dd42de71e38dd82849d267f4955235793433e9f333c008a20b327ae2396f90bd373d949c4df1841fc180dbfa6e968860bcec395bd597aa915d4bd03e028e36b56fe01754c23bc03aa315b0b1e6c219b12ead91adcf7b2d035b74da9ed0d1535ddbccff41ccc71d1763038ec19a5f59c92dda8b5f8dd4f0667a40026b00d36714ff6694d9ea2e1b2485ccbe9ff5d8d9372f057ee79d4fa5493e2fe0493efee2596f4f708386db2ae08fe3d8a395c90879a6b0e4dc8a45bc0a1ba6ecafd7de75b99fea2ae54f48ccd9e5eb5572d6aa781f196f75b4b1519557a747801567dc61a405c91c659001818f2c45cd9444f7a8861b8379f6beedd180458463005b8366b7355eed8af59fd96ec785a97e6d2b0a4d21bf9a190f94e1328adfddf74f6dd541a32de6cbec7e44f75c1d6197cbdf1dd2a0563ea23fc154dcfbdc8970aff63e01d3c8b0bed12754c73e9f8e86cd6e73c52bf9d018ac0d9cedfcecdde2f9a711464b81d3ca6015794d036ea8b20e638c83291d06e2f0d439f4229343f4b91affad8f1bc88515d332f72f1d18afeb48c8ab2c224ba78abfbc7de16263fc6aac4995f2e8e7654eeb0264361d86e700a8c88bb9cc06ccf61a84e9ddccb6809ae59f9e2b6be8e187c778029d024beddaedfcc3365cd0c9bf8f23d65c54a417a6415234ad2725805cf2f450e84e002ad692e5e046672234439839b2017cb528296a11e7dcad35d84ae817ed9c632c34703214414e7d83832e90070b51b78248a0aa4f265e60824fbe3153272de428715445f884d3026d3ccd314c40c19773ef889c7a8e96e3935d3349269c11439d97ef491329588857c7cbe65a00d59f02835dbb247f0a99019756aa12badb03f3eeada5e48d6391dbcaa719b0ba0220c6baac80cd764e03257474de98120f97b40c1bf6fd4f789151abcb55f0eadbef28ebe187d612c5b4a77b3a41372023816666c6b6bdde0c1961f1b5259b01c73cc19d892afeb3062fe022039c60739b6383851a6fb6c7928c7512f1030f9d58abf9562004780583d767ff6d2ab47aeb8073fd938c788aa08d13b60b78cf1c04af589c328f0258c33db769c38693a4989ae026ce876395ba7db62170e17a1c6fd967d63d250e4b48d556f7c33a9e8f370530a737fb187744f0e50bade7610cde9c9f9aac80fc4b8940bf3fd8a135a92b41fdd54c61f7bdd46928cb3ef5446be58b78600d1d6ce808d268987074e970f9e39057982691c7ed48e9e6809574c829088abcdb44d08f4c3cdba827003a75376c90a487e36733f432a0f43f42729ffda63f1793a1b7cfd7d290d568ed9934584f9722b812f8609d99065aa776de51f7d70df6c2be8328102620a6c297962cc0fefc78952fc5fc2e0e52b075cd189c9c3d9fd0e4f5e30699b9f392a098a1cd261d390caba4406549e54e6c169fa1ce5f2c3d3c86d23809e900823f9f5b5ca3ec0ce565581af81a55c0220406791a65a5358ea004fdf2a0729c74f42b6a272f87508a0946fe7da9f611a60ec1d3d30122ec0c91fbb3b348bae01456b14f81fe7c7a8f6ee4b911929f7c22f2d55a7c0f4cb23f88e7adea81466e18eded760d6f500d6e0cbdf58442a6422146bd57761e871a800b454728d899a8cb101c781a10967bce793f1e1658cf164970e665418d6697768f8109cecd1922d363eac04870b437f92af4ad78336e6ad407ed0e6efa6fcb9b8c47806ccd696eaa6fc4d9091e4dd4a6a85b2e0a7108b289823dbd6ed406f96797f5258357feeeb88a273cec57a7d43f67ef1a4d80227fa26664fcc1a8d0d353290673930b4e159649ae6652db66a92be02cecd1ef4044e72adf36f7f731dbf6b617f52c35db85cc34b6efed180ee604a7a120081ce684a0561906823dbe65bac59624bf963bc1b2b1dd341b7c14fd5234c85e70a789c1666ebee5e0faeb1327ee0d7cbd7ac32bf2778dcd5e95fd618d0e2ef2ac0dae8db1db1d5fa49d2c66c685ea77a6721656f3cc453636f44cb52d9a31871acdd93c1b31d0de4db316d30f33b9a02b0aa9c54f469fe924f5676aac7f6c863d467e7efaf965dc3ccb2eea6a5e07808ba301e96d6cfa50b937f1e492045c6a842612a8e99838f40253c90f709b309378e99345c6a5f127643a60d566ff7dbe9feb4a5c5fa4e6902edb99d4ba41d153433cf26ce397f0c7a65b389fa3974cfce0e46a0bd595eb4b22c105bc9008763aab1b83c16ca985abf038ddb5d08236afe7c01639d3e1b37f7eb29139aa457bc3f113ebe59a513c5ee241e4ba6636e732250cc358e31edbc7a31ec0ce518f7e89b5a48f3c2535615afd14d20fed3bcb4e1908e60b8bb3c09e2064190d3e5cdaf6794bd24765bcb12a91102a48cdf76f3e446312a426370e8d87210e58c9243d94bc78799a045d98385ec251d790f02f9d2799cdc55b2f11e047e415437a7bf2deefc8d9a669ae732ea6a9fd4ecebc98e5432b7bd182f28760d31bc25fdacab74f93bb76ff0e15fe5819456110efc337912786a17b4627bb79c9469a0052a6e76138aed5f67a2a865f271331c06c9a984b3539d3050d353a858ad300d78a970fbe5f317b3f3662a7ae4091e3cfdda9175e0cb3852150b1913ea86fab37daf19cb177d1db4bbb34debff6500ba1bb8541540e923c32b9133bef927addb3dc6d1ad5030e7a7e8147982ec8cbfde87ea5b2c7cb447cbb9ed0b712e9633cddf75006b38155ed7a10e1605538645f06af80d823b358ab4e7a807f631dd72d18c450ecb7833688b0f2b8c3ddb5c7838eb6bd1de2672d5c4df499114a904542f6cbc6396b893ee0a5af243f22d1542fe33ca110ae4751145c65810923e11c02ea66467939f3bd99da9eba4ecf1b98a89699d34cc1e46247dc75dec39990e9d1763c5838cd6350f8c249f15f2ce513822b66da2ed7cebf8b507e18cd16202d532ca651d4705897a1ff595ffce6ce4331142c0c235a56e7334b16c5a2240f64fc704ce9f8ed33d019e4155cb46747a659e3421fe6b42d67f44eb84bdf3dcf1f31e38886f27e85b8b503368df238e1bb511b515bd59fa2c032bddb31d0ddefba97f8f19f7daedea027ef055a52c61d00bb1ec2668c57677e632b180e339ed1c5931310b9d718af34d70a3a4832b96a04fc702db65785ebf12a18c73753db15deb7d45e6cbb2667d546e72dee3e6d494699b1ebc1d3a590d6ec098153ce1d4c547abf330e8672a90ffc0858a2c27c4b342756952f8d20f68e2d6fdeda0effb5d560365735c567d3436ad0530c6b40e05c09d0b245f0a29d8562de3840a2dd02cfeccc0368e480872e17e1a5919555992cc5a2bbbb8a84f65b20b7160e065fb3a28502f02e8047351e87ceb8c8dd44d634ff6f19d6c752818deb9cf0b8b5d248fbdd5d85ed15465da33eca1518af8937f2fb78654e4395df8c37f260d74def234a3a4e3d2b1fe8614aa1963307888d3ee56e6126887bc950d47a49eec02af0d30c40579e6f1cb7f07364a5ab2bf4db4b9aacabc5fbcc5796053725e329c9a1e8b063fc223f783f8bbbdc6ae5ec70fdfe715adadc3ed1eb1f8d02f8f66ac65cd4d539ce5102cee983928d686bcf895fc807ed50d1b818de4dea424581199d9c17f92620a36f8d3088860c20a55bba9b28dcc8b03f0e0dbba18b999e2bacbbea329abda5b1bc4fcf0b04cd264b07611a914e917b7c972d0ddb0f5d654e9aadc1a51854cfd49f62ff6bad34eb95693968a20bcc1522e9e33f2ad4222d7279efacf010a001b48f835c5addf7d34cd7800fdb62dd1fca7cfcea41887c793fa0fe26940213ddb9e30d6039157a8fa9f8f17a9e0248edcbd6a6798f8ac0bafed655a9117b24d65d508d9596e221736533ea337a589421bf7d8c7795598375485082bef8ca676e275e6086e4d2a120e72ef6b4e0e4433e0de81b6ed383592a94c601d2aaae3017a043429eb3556e1aa83093897213ea954f8cdfb9ca86a66d7c9d6f7eb765236540c5905772f8ecb330ef4d2bae85dee9fd0256030ad1ff90584d083d9fadb5c9914bd64bb42ba19d19c17015e6b8a49e8ebefab4e4f3c955c06b7879d3d67bc70a5c80e5e76c314abb4dc8d2bb1ae0157d394a5a097aa8004d6f4ccde47dc9f0246e2ca09d38f01eadeaa3dcbc2af5f160f7d16ce8c4f02247ced1a4521244b777f73616462072bb5a2eadae3a677ab4a2711c680361465e4810c387ad22509f6d8e39c162a13d93589022c1e65ec2d1ea3b77c5d9ee1ef6d6cb8f02462c920a7da9a41c8339c52921a5bfb2108f82cb80cd9020dcb9feae7c55808ebdaf6dab30c0118218688dff3de5d0f979782f240eade1e39c5349c7a1556497941967d42f67eebca2ac1c8805b7030261871c5dfc32e9989958a4e4ce2197b739f90527b217a806a272d55631bfd257695afeebc21313aa442884788b7096684fccca187145ea0aa86b6cec1a66ab7301523b4018b4fcb33d415d154198ed1526132b28e579013324e437ac58221aefca1b561d38af012dd541b32d892108685d5aaccb7737aa1a987bba2943988d281404d3c5ca57cd94bc981b33ea9f74bc6611c382aef8212b83a088e595309ea68fad38cc4645be6243b2f9cabe7abe9bd0c703f1053122d066e11863a560bc058d72f9a334ff50111b30c3549d2942811de8e27912891bb3c2bbed25fccf61afae04aaed0efb2f4ba3702c540f41bcf6adf5e38d4f567840179f7b9f13c31c1f61c0a0fc3cbfb86c6d2f896b8d5a6a87218c9bc0242fb50fe61a484182f267df3945807356b367ede89d7eed8fb9f79ce90b5f94298b7e7daeaad7cfb2c3c15994e1ddc4e58cda5a9668516c8f06c0b294f0c38bd7d02113e1dfae6c3bbdb5392543fd7351926c3d070eb56b13c7726295eb4c19a7c4495d200740d97646bfd83aea8401336aba0faaff1f5bb65269176c497dc021ae63c3d9e0138a0b054dc17623e5f0f38c203d02c803d0df5e316b9899bd11de14ece28fc8aae0626ffb8f47aeb7b52a6d5b5f9ee7e74d074157b9ab6aae71258e5133a24f8b8f04fd259c2fd95de03084b7f1efdd5e32b682389c052ab680a0713d21c1d319e86b136862af426ce4be78c27e7626bd2475b7708d465859a2c7741d575ef1fa8f2d69409d366859452c90075fb242a894bd478c07df822c6a12fd5e2eea3a91e594652a8675b9a783f390f33034bf84f605c8e796411693390b739c22f3fb647e687da2c8bdc4dc13abc2127a6e0bf6eae7a21fa31bb422b2298d33ddfce306cbe23925ce9ef86b96ddc9e1a8dea662c5cb6990c8bfb95f47f590d1aa655fed50ca2e402299f2da6fe20eed56071d5d293985f771adb4ad7ce824e232ede08caf68a37e4f3f12ad11510791dc67ef4a77aa9d90387624a1c389cfd1e1c703693a465f2ccedef6582db35a7bd6717abf53a7070777a987b0be42e84d41b1470773fba7f80c2a0c7017716e17bec47e202fa758c9d9a86c6ecfac04a0dd1d19ebfef1245c8180c3695123c8d21fd138118e341963b90331306a4dab790e6afa8b4dbf4ac6e983c9b87d42d15754185707d1d5bf41a03a84ba20805332703b6769b2ce81c38e937df1fe473df4061a49779cf4b10029ceb54084ec82698d0eff0bf0976fdf0b305e8a56b9655490478de56219a51bb030618809facf8acf461ff679b27b75ca0afa061901cdd5ad30a2e5a3ccf1e0cdf007e522338112b181489da0a82b245563cee9b7c8fe13976616dcf4872e1bed9e26dc501f4dadde31177617d1057727db4b99a5676c8af948585fb6c0c019998b3cf226268b98afe5fb2441c570cadbe20eba7475afa84d57f5c27d124e665c57b8bb16d1d17f9100621cb10e13abcc1876b0a77c2df80e356dc9a9f42f8ea074389ba4b9a5df3c20fab3e81364a682df1210b0d36df6b6312ec9efdee9ff00712b1852367f140bc813ae496dca279aa66f5f2323e620c00bc737913b1433e6cf0eb5a1e0d3da8a564b506785dacb7e2efcf060d63d02c605b5b740a124c9ddfe51f806413a7f325c103ec4f41cfea7a939790c72c91932bf78bd70a9a22d508fa35401c0199e8e69f0ede420e72d91d5b35d887220d090a99ebea3acf2dae8e3615e26e607a508d06bd24794eff4d714d912676cbac56a44763f5c33bd5f01aa2a7ae83b6b2f3c5fef8051d88dd0e1e7494c2bcb2d741a30bdb3fcd6683625344d4eb838ea9993490a7ca564574e4cdd524f3805cf494aced3b117fd79dcde22682e3966dc60a82c3b3bc4b0c2c97267a2a03ea536d156af46bb301168df96e509adce2dd730d58a0022025656deed06a8f38231ea88d8228536d7cabb9aea0c8051f9265186c5e2d7d410bd89fb274ad39db53450fc39f91dc87181f8bb42098a9f4cc8e1bed3b740c6626ee2aabb94c1233a15008816738ec48fcf869d295c870a2b8dee559977d98d69e2e76a1484e018a36c8fd8d82246cf951c1bdd2a75e417380dfde771c4e07da9a21eb5cc8bbed263a3555b0995d45e23effee7aff6403ad49196e1170f143ba424df2a3e29bc050d41d78b254ec5d4bec3c649345e1a0993e13feed3b6e32bebf3cf1403ef761502c0ace5b5ad89e7c82ff87e421deff7f8455f4d526cbbe2e397652f983d6b86e6b83bf735429efbc29d1bf37396208a74667ba8ed812ce51d7817b975941adf2b911b3c1e9e83755093974523875a358aad2b6e3fa4b4970c2e7d6e26a3f28233d3a120ec21c608d49bf0efec41fb8dcd81d529b347c19d32230c9a15bd8114b2089442286cd51ad12ebf50385692f79f9d0f57d2daf25c21ee2be9ed71450b08983b1c5de03f2fc8b469129255af078357306538eeb5585de871c9f84fccd9aa1b2c1bf72c72bc4dd574b3849fbe421b38fefe3fe3991638ba64b6d0a977153909dddd7e920e44b2fa689f79b52f1bb9cab17f626a0c1a64dc8b3d012ee22227dcc6bd7ec1705dbaabcb42fc36a00901750e653ae28cd944b74bc8f4407c94e90c8d58522b376ba752035a86948fae64d05c4c43dd99d76ae32ce7447ec4f20f31881a934fc1f30ba5a722a34f6c5066652190f7bbc1a939d8a5145c4a59ae0cb44d90dc9fae9879ef3d57dcc7b4b3889bf4dfd12d82a354105adcb623894d643d543788ab6ba054b72c568dadf72c3ded5c856a735b6a2c22a4acecaaf2449805229b11e377cf4e95faab5062a24f18e1bf3e2e5dca72347829016a3113183ad43f2812f85159a9f43eb2af7654808c11a346871d4e300f894e86a9667a5caf03006b062a96f4096a5f2905698c6519e58f4b2f6255481fee8b8934bb8676771a2cd0661aa702df60d26aecac986144e5f9c861ad8e1ee8106695a690c5fa25921af4bd49002abe603ef4efc026f99f9b792ad85f4718ea8776485996c75c2d033144662640c008e10b536934a6b27c5e640efe081eeaa9cc210dc82de9111fd6264c0b42d757517bbe02f38aa6207dd760c13d3883f8a856fd429cd6d9bd50935078172f32752a98dd80193283a8267ef60e3050f4c768a061a32211e7b571c34655143be09df6b0d06744bcfdcde8cd7a3251f21fdb6d31049c027fb19df5ce8e6f8cf97036486c3d05009a4306373b83da2c8c33a918915c89b860b5db4f4d8f33dbf85fd2822379f5c74b11e5b45199622a9ffeb51d49b018be75630200a8df2e9bb91df7465f2dc6135fd8f0c2983166d6adcf83cdb2c5b58f2e57869c78d4dc46ac291907a7bed27f39069bf487d254ab263499bc74f3ec94ebf1fd852626a967520fcc4875a3c76577396bdc98f2b82299ac6b5bf8d12a8a4ec0bb5d493b32783b30658b5182f1609adfc4bd54190dd788b58d4ec6c40bb9b75264874a98e3f3d8498932b3c30ceb04685b4941cbc23473ee53e76762ecbdc6156d85b2b65a54b9a9bbe124ea668f447183e2da7171c3db9563c8433459f0eb885afb0a19f2254fdf52191d6f9aa7fb79c33c96a0a90030694163e2aed01da839a139c94a47e00b69004d15d905df69efbd98feefb46412d8614cde38fb7e8c97d4d478bdc81f9cc52aff96ad54904041c79a8ba53079e34137e59e6918adf9216a5d80eaff2e447256932862f354ff2e75a3b577b9bc225259b09bc5d4268e64d6277a5859b6c30f07ca43806ea7f6f44c6714bd9ca5607a3b406ec59a72ace0ace4ed9c642378e9b2e7608c3313d841b037220d75c02e3741178feef80ce51352f8231dab0ed690dc8d17eccd03138545a655ddc186dc082fa867a8697fb78b6ce3e3629ad37c93091dc238a8f0293d713728b4fc740a6b4b758e985b25a4a75f3a86e1c01bdb7ebd3c07e6538589d8c76c3319a31229ef28f17d3569a92cf5ae6e8631973263a26d4a418c691dd5f5ccb7dd7241ebcae24ccebbe60174c0f4eee279d89cc1a5bc9deb177136437e02d59cb065556b6e132b4fb340bf1301337548da3d5d44321bd370e25b6770e28e969d34495a0b73c059070bcbfefe5e2ff6141fc63534694e827e5aa15920b407643bd1c4cc667c983a771dfe4da14848c5a6c339d11cebc33f85b8c9a7fd52fbe2fb213e28e6f8f95432723e27a6402c88a35cdead581a286f09a55ab0515fda775dab3bfc1779624aaba1322977e639938c554b169074dca59ca8cb2eb73b31b5c5c834c2726e7162551340af909afe9ab43505c9309c5e57912ba16fa9658012d600bef87258955fc14100367aeee9f2cd847521c2f13c1999b663ffa27f4403110d411aa1b84c7772c2e76ab1529a303acc3fbcc203e45008d1895b3cd90c2ad92651b59b1e156dec116c98be568dd78e64bbf6a854e58f80f5980ec31326eec0e46735a8fa7e978fa5166d0c7b135d3af6806c0054ce4c749af686ffbe52c35ad0083755cde678e0066b342620e935b2ea03894493fd0b664a5b502d2aee4cf961ab274c18eba68fbdd1aa85f86df598c7ebdaff82f040d88c0cf6e5e977e03f31c671d65c0c94e123f01cb65210115f087fdd9bb246714dc8a1e7a48a7e319e98f0c3af17c7c886d12d2741de8e1d7834561d93a27e313898a0bf038e6f959a2fa08910cc8bb5d35e1f4692ee267e76c3f4f791c3f5f51b648fc96d55da90a46e5c3eb5fae6e179231cf7342187c8cd4fd307f0a75c4178c4d5a36c813dc76fcd8a50f91357dfcab8ccb59fe900610e3086db4abd0f8ad33208e96b81078e3ed5c16c74b65d055a97950e50c54eeb9c0e76ce0a858e45bd249fe7f4e5d669a41f87ed935475069b381c6dd146c1dd0942297cba8157069925114b832018fe31f35450ef6e2e382f22a950abdde7a9c8642553c5410851e9abf370b0b04da05af9ad32e373f72e68eff2534b0b4ec67bfce0dfd545009c3131bce3e826f2e4a1baf90019f64e6deae85df2295f65d77674e29d44fdde6a024ee431a3e4975f888fce54ed75b25b27a46299e13aab416a54a108aedc002fdf6befd67e89a9658200a38df862c19aa1bc96c6ed2dad98aa14b2ae7d7004722b01664ed276b79b20b60f27a55dda80eb996115b7b8db31b84d8dfb2b5a59b567b7be073a4c3064e71867ce8ec78bc257b367e2db6cc2c13767a97b52eb8e8e37f77d9c306aa257379053cf1f2043c388a301dac2a9e2bb89eb8bab6eb3f150fe391b7a3f628be6b4b649c5c108a108f0e0c55a0800b9954251ab07e94450a23d052e2dc1c46b97c102b03f3ed1120722e538dd05f1b5c2d3228e1d5d0cfaf666d40c3361f0bfeeff0e3d97c32a15429128c2f0570d75d8bee6bb68247e7ec22e3e5c078a880750c121385c0864294fbe33fa2075b4684b8816a954fa294a99d59c9426c5eab071a9f43718792fdc832c9f44e9ec770bafb12ade70289dfce21f872b2d8ea969a63befb0499fdd9d814eb349b925c5ee59bc9bd1564a3ce43f4e76a7685f349172d98c4a6bd70dfacea7286f1aac317eee1cf21853d996cf05e4f39f83b22ca67c15525bfbd93162cfb8573b8afa4a3be154c61a15512bebda958659ec11f2370671ca7b75f0d8641914d82586aa60b3c7f6706d073b7ce931b2978d2e1915c1c6615d0f76c8737d1f2f23b39a072564f664997796130 +Output = 1a3e23dcac1a708af7f8aa0f68c64f0e + +Len = 60832 +Msg = 96ddd4b72739cde68e6d41a15a53ecc2cdbbb5a89a188f89ed799d09acbb990cfcfd76c908554421fec1552e59619e1e66e35f42013e0762a0a3525494b0b4cc8be8fa7658602f42f7babc00cb57d42c2bc90f0b1d8755f761e5fef6b24337924884a8e5a1c254f4813fc03e389f579423550d2a755c43ef3727ea1a8edaec053dbac73f6ae27bdda539a71026a0effd5670a0c8922397f22b515fe6b1df99ce7173a1ab3c2a6ea56a8eba9f1fc2630fcd00120dfa461aaa444ba382a2b80795ec957c529e01f4f5d9274113aa6d7d738feea920372b94bc8afdfe17e9cffe01b709a15c18cfd475f8ec8494500903d1a423ae2ad13ccdd30550bacd0f8a46bad9b858f032fdd7ccd1c5ca4897febed0158668524edf8c95be2a1ecb9b53a6695a89e93675f1c5a26c9b5d5a0ab57619e9fe21c1387e9baabc75713a1591e7b643639b57681466a1cf5483f02e94f35428751f9e1680c0bb0717fc4105abd1489b30b77b94ce816f04da85338d04fc28dbd2ac12714dc470a8fa0709f40b2cc86ad785c97f88e0b41313ab4aae6e5b3d09fd0e45d04d6e70a604d9ba6a18c0ddb8404d6ab3a8491902e93c5d1938d63cbadd8d5ebbe88864091fbc7bed3a55308e535786b8988545db43829657cc36cdf65c7386ba86d8f3da32f67407d9b268f3f8ea4414be5ce2a608c31bef904297c66106e4568f28c62024d0ce3f5da02ef01750cc518495956922481469eec44331d590a1166b3e84e3df92b11d2fe72a8c98cf47f651fa082e7859aa4e4d8278409e57e48382e2d62b4a84442ab54f03cf63b0dd8c8c51e3fcf23d04241446dffaa5a4d6233cde64014deeb0ed58a062c1603bb59a9f63cddc783e4c76add62067d2be9e8102f9d56cd0171cef80a1ee6b78b7f8a8f1f86fd4f2a2a7c97ffae28f0eef66223afad275bb48b1b6961b50d4916ecd3fead871ef48b23fa7f27ccd7b3f7d53904eaa0223f6c997cc00d62f0494a65de6f2ca7a3263b63c976e238a324eb18f52a4d10e7e6ae2f5b9289a34046aa8cf25719732a729f6c6225bb6c1bc24d342f0a6379d8efddbf303742f07dbf9bc4c84cf07435583b903ce21fe1922a72b93f2baa3585c98fbbb344e5c4f912b29fc8c74e2524459491e2628c33b6bc100abe14adee6ef248b72d31deab42fe73906c4c9f00a7d94ec3dafd9cccf9f599cb245bdb1f14f87d3436949a2e0bc143293b434f910071aeb89f39ae37cc75745cfa47be11e85ab1b547d3a4978409c5dcae51ec40fead58e2979d4ceeae9a2442a88ec39179876abcd9757aa27c46602d4def01aad2fac1c45c9f056c21024e1ec7878808490d2cad7400a8c934e5a69d82710c392dd86df076c5443ac41c4633dfd877d0c76a6c29afebbb664e960d9ff49e88767fc4d1d95e96a5d4f866a14449e81f95851dad93d5cd0f1439a609c71cbde2ed495e81f17c8996c54e6fe3a2ae3cebc10295558e8dfb205d86b42f855355c7f80ae3f2db6924837626a691e1654d68edb060187c511c9baca63ee36d310c94314523a8e99cee18722189108317a013761f1c5adf9797dd8c18a4d9d15e38d423786c18cea04cb243cfa5f3fa3dcb87e4bf18913af9f372667e94577403610449254bc6dcebc6ed65718bb0d9302612d410f35020d0c5d6d6187bf0a7f92b911cdc3137a6f7f32651b788eb82975660aea52b2c03b4759755a6da4a0f87df2708fdbaefbf5d47f983224be898fbc2ddeefc2e69562d89106f8a1da7fd381232b80a575388844bd38412435c8ea5f2070f767bacbaa486fe8e32d4bef3926b208492851784e56540df37ed9bd65e7a58aab4a16a93a1e59e2c418dd3a52f308d0926d28057292acdfed3c94b025db26f2b372e3763be2b9be436b7aa745708d4a027ae4251a802d76da664de855c30a71b6e7077bd41df642072d097d3b25a94042596b216fa9409a6002ecae1b28b9cf5db26c002e567837b96672055b9bc578fa12a74198944b12271a584a9f909bd44fdaf84c7015a764001f9d87ce5947bcd1ab7eccbdc9b8a7d8b57b040a861848346795a9c3e2eb93855f724abbe799d26f2eda0c08d1ed211bdc3c23848f98f2b6622a5d4f46ac8af02ed9984bce21827da2a2479f335448979683f13435839b7bd29fb13bc85212e894bab7a5954996a310bec6aa7753e3f5eb38b443ff410b2bbfdcedb0f145f3159afdf0f3c478d4887f15d1522654bcdce344b5d9753a0a6f31c859d547edf520478a8b5ae41506d5f791afbec7be99f5878d3c1c20d660ef314d3dd354b3e0b1a449d0047c8af2318119aa18e2f943e8defc9137877ed452c652e0d1a0fd7b6fb7220719143e614523960885ff6d825cf079fb5033983040f9c08bf8b1348f038afe77c034991ab9e7ee122fa7821dfac6edc390aa8e3a63d17d867011c1e41425c369226503e734d50a103e61a0de69673e321e76c6bb6056721960480a424b8e5b25672ee48e5ef4d24adab62f8b51db568e231eaa7ae290878cf0dc797150cfacf3b618a4d8e04c2e07292d97ed5c2b1b1fc62ba0418f88a5264a577538caf0a01b37aaab8d62e50791564e40cc305e772f302412d60f45b2309341656162f71ee4146c62758bc8432e87a192f0757c5104889167020bcf97f2f620b3b2bfee0d9872e62f5704fccc27e5aff620d48e90e7f7fb078d2b2f3db4997ec6f48adc577d7ca17bfd748988c497ffd226f49b1e20a5e95a3f166c8bbea4e206ee6acae3db5724af2d8478614cc5198fc87fabe2f7b9e3c8e0758e685740d5db6a08bf99fc2ef731b0dcd03e09998696cf1ac7c4b45b71b937ef9ebec995dead2e0bc3612727a36b4e2399064139cd4e026ff5ac9eb51c950d2da2745aca85e4041cde23a36aafc3ce02dba33dcd761e2b263f82feec6bc42ad6a572530752e8b2e319c7b920a3a3fa209ffc457e0a7010e7ad2e1c2be7ae5693aca0fc76ce2200077b35b17108729826ecf9a07310ab7b594699409816bb590cc1e69c3c80f8b8310d56d384649871bbcb8298d61036322412a9b25b8254fae8eb2c7c84f0d3a008d6106682427d4d88437f73cc927bfdf11947b99db3df02d0335ae574a71c8235de4cb4922789f4345cd87a7f1fe1a668645c9f8630c63a6b9f581d342c39245f2df303dd9d242d681e76f5173ed0f330faceaa3d816f67623a0e6ced07944e2fcceb9c8b2bb6c1cc923f2cbb78b0aef2e38723eb2e44545c09641cc7c193ca4cc21ec7c35aa77907bf1c669454ea9d55286d52b7bfabc802164374e9e1a05f601772ccadb05f1bc2aef5edca5ae48902d06a7ecabd0e8afc6891bb7cef22d410d3d1f272b7466fa465b30784120739a0e365f04bb0d463f107383aa77481f206ff22823af7c43f56ee3cfdea05bb77d86a45f1631e651b89fc1e3993f72481eaa34dc42cf742517f517a1726ba6909526bf4c73a91297a6d4e2dff6700754963c53900713f266ec894549c5db977b8b5f159baf790884845054bd64c17db111a6fd07e3057da5ed9c1b1d6ba8b4f4ca9015c14c3a4ea4cb82a62046ac5bea3b7a8f98592c8c4e959df7b0b62b7578dd8a5e51bc553b74f6fc359d2e89186c5e1799c5fbf184ed7f1f7998480c5f943e7e4dc192628571912db1888ef049c4040e8a252ded2dfef4810f3893a3e9c3581c729540da832724877876ea6a466db7d00f1a7187bdefa07327161b8a9a72c4c54b515a35db022b9a18ecc36fc4d6040c672a6949db5c1d565fb56238e84f0f09566a30fce3af00e6015e9c691ba9530440d967bbfcb095bb279aea3759a49169225487a8336a5efbd040e7fed1344f681abc1f46a889d4020d3b25fe751ff6652db4a0c050e0903be43838997c1333a85326d282554442db8f1aa806b11d987dd6ef2ecdb28e4f36eba900b172d2ba3598ce33e7897c5ca81bbde2d8a42a0223bc888438deefe66d2527d2df6bef3d9049f6b5febb9e9be831a958fcb4c1cde75cf5438a4c61f05f4f19119bbdb55858e554cb3072278b2c6f419ceb6981564916d9df4a71a0e78db8015f4eeee174f0094d061533b3a4d5333b011d38c535b9a89ad9f1e5194668fe851e9175e02de61463d92586af63831bda380ab919d6c950aca6091d37978190f8d1dbf93dedbb952dc6d9c18761a687c3a45c510bd3f8cda3d5f8908855580df11bb6df573ed10a0f51ba9ae809c0156bc85a96f797b86e04ec58e587fa5cc3f24e9aaec88bd6f18d0c30792dd660335736be0189ac88c0444ba262b3112051610cffde0e7f2dda2b48e3c2e551f7600a51cf171e8d0a52e6965dbe96142344e1b97ee3956356326eba4d2e9af6f629f9bc364e42a38d94603ef34fad8dd61ce8e66055f9e2e088cbb2c512ab500d0f99d86c2d72aab30345b7fb9c65e8c927eb167cbba8784d4bc6d4e3f5b2d77c7f8f28d92b4aecfb3e0b93ef3b6bbf7d146cbbfc7b2d8e0cf9e483426e3e07f5083e4015ce27f4c693364546930b6c5250e269982b05be9021b96038d2a96be7282b90aa9c965cb5b13a6e8a39d189e97be081b821ad64874199de6fd9816dc35debacfffd127f48f69c5222a66a92c2d3eba6d515a12a42d81a703fd952a82a17d2f79e9628f6e0f1e0a2b85f13114f17684b877d6d7a6363cfa8215899858bf48602fece463e2e318bd2b3ca87801eb4fad247af8ecf69631de8ccddc29059627941a92bf6cf711412649d8f2459922af7fd8e4271b3b55479d49aef6a5322e031562625b7256a3808daee03662849e8040fd3cca2a1d7c687ee03f3fd48690c2292ee4213da6a0bc3982dcde956b67a839ba0b4be246127bc87908207eaac34e19a6a177949011df73ec5551a7f68611b238d8110b5b1f67c43e92ff6a45cf8d2df420c640bcfdd08314d2f760cc02a1f29e2b846d07ac16ba5564456100bd69ac3de9770ad16c77b123db388796e34243158c0ccff0bf6ff1e6075b2b8394c9e0ac85f0b77867bc4541f87ce6fb31dbebc58411fbbe635ab31a01a790755c940f667b9b1258f4878695b22b43a4f55333d59afbb71a9dbf4618dc93587e1eb4829653dfe21a1ec0bd4890ad67383794636e5732ccac7786f3091f864a47e11081629623ee65ea4f32811b6a1a60fd85c3b7421e021bf898021553e82f78ad9053f2cbd1ffe2621c2d69d9cb23c4510e9bd9e328200f28dbbb63ff20cfb98a1c426f7a50dd388d10f62854364c0b3a1732fbc2b6f0321038661cab98f2b0819c94012c0850107311d4e514145bdec188d14668323829b7974a67e0b7600899f892cf676120121d0811c99fce19e4ec49c0e25c02c19f26e1b06d24e5e067db188402b6c314e592def3fb7fca4ec6c54347f62690533a63fce056028a3c764de5b2c19e96f632da79c3a33c72c22b545caeaa4f42b6a278d22249ff0e3adcf9456335a9428ca0fec3c8eb5c2d3cbca07d3c275e82b1806c4abe6ea5daa341e721e1865e2f9fd805a34cf969628621b18f3a95dbb70d7c484bfbee7b543e4f1e6272db45c5f681f70095f5eb7b66018f78f01c4e48923d13bf23f109e5d5aca6ee5f5ce76d5b44ddc4ec0868dfa5044322a6e2409f086cd58d7c9ed8f52e0087aff033cb8d94c9bed6995a6af60bd3d473a412392337b0979d4f1e6fed13f4c98c6c857a8f6ab7a21ee41278285f164a5531d2bf3ce7b260d7e39956334a2f756c1d7d7ad9a5b7918415581bdd6b74adaf974a5c52df1a3823823616319b5a9339494055d50d7094f07356d97df59606681ca497cde88f2769721d364ed01d29da39f992e9698bb24a47313d70c6245c6a0905f816cab93691fc773ef1af1f413735ceba7f83aff47ad914cc1ea6c5b89ca69708934d416c83686cb7840209e23884e754fe21856068712510f05c2121e63a824ead38cfd227fe23286e8f8215c5706de8ce0cb401fd578c904cb2e19f300fee53cc550a6e6506c519171f33e1c63f88ff570ce5dc1fd272d49b6ead3a626b029d596a9b4a26c77912e779c44e233a5f2000e9c0fbb72cff6546592cfb6597e6b6ba40296e508a689c4667dc64c4a91bd3336aec65aeab5acab33b07e91fdbc326599f5de0cd97b93e9caf232c91d4e3a058581222ea98ac8b4cdce60d797ec1739d4fdfaa83369581511a43ad7302e010d57bd93b553b1c3178036f6d5bca0727ed1756d45caf24eccd70e1ef507d3aaa139beab7d6dbd3439e7a4d13ae05bec9b3c06b643f498d077879a8fb128b18f67a80ec9e54c1f8492807260758780de25613c564134df95abbfc3dd89f75a27d73f188f8b936b4cb7d73a34f436b1df93ed50ddbc2038f6efcc34b8ee18302c664b866ceec802f5205856bf555251596d3d1ead233b378caa4947826befc5d5ab69b2d27d5e790652807270178f01e427cce05504ea5dbf61c386ca7202adebfd263860c5cb5008d4ebf7e7993126083a493055dfb21e17bcb77d019ee53aa7f1ed818846930a651df7719678ed402e4b0e99301226eb2e018184c8510c0ec2204c18c97e4a2ab3943f59fd2517e2dea09985745abd575ad6de587f26db9ca2eebe7894db55136cde202b9c3c358081f1768f8307e9e536b31a42a68ef856c2d3b13b8afc486709625650f41ceaabc0a42211fcb841173a1cb1edcef7d6efba65b0bc0c4f988801b72e8485459bb7033f38a731da375fed7a51b4690ffba9f22b5974b953da18fe432510c044dd44d23906c9d2ec4141b95266310525eb27f28b081fe287617c57ace69055a903d7b61838f4406d034f364b6bde13e809ec440b49083878e334964acf8d95d0b3e217532bb11aead1eadcbbdf2615a4ec695f2298b82ba6b3d442a36c63016a61f67e807b8ab2d451a7253a3cb39b0b0711bc7783ba2c7f77ddd55d39ab38b4a277641684dbc8b7e6f6a82d10d11488fe97e4607688cb8183a3d6cea3d09c6dd9f7608bf44e9d04267bce3ad839028d174e5f83fd9e895b8be8bf7e578dbcf48cf8fc67363dc05784891fba0f45f5a605b786388585d64be4ff07f2b11d1ac74ffe701ec733d32085b1054132726e622e661114bab932f1236948b24d092674877a944923bb35dd9e862756ce58cd2015cc58aee9b33fd9cbb9ea3387fc708ab7efb14cd85e790d537aee615f63928e407cf54dbf0e5d74425374fcfe41795875e05fb051781d2e38f1d307422d6f0b22da4f9787250c4f2be861851c92b18c35df080a2ba282ceb3ad7daf3310b3055176f012fe91dcc8eccb48526f4aa9847c4e42c0c3684a4d67e036cf8ea7ff2b40d56f2671cf3f70098e81fb62d3d1efbdb0885ab533e458aa4c96eed16db3db756815687d47b4e306a4b6c6a3e8cb1c7e98515e8d9fe14f0f35269397dc61a463c19b4f9d95dd8068a05f6a8ee3e5993388364298f6b1bf0b5c6e544e7e98f4905469524f3409d6b3f3d45d904fc1e470e29f8d73e2e6173304d68761ceba7a8fa2f8070eacca645d21bdf66496d09cbb49f5b5baeefee5fae0d7c37e376674b63fdfd4585aafa7e8bc84eb5853a2107720e151ba755cb9e7531a8ef062fd91b88d7940b8d82a1fcb26c1a307f0a6fe38f9eac81f108ff16cddf75064bc004feb0e6ce2acbfba4a98f2ec93e0186f9485576aaf453b192b1003f69e47bd1f0dd2552320a04be0a6b6a37e546d156c91c0abf97db97f88d55557b0ef15e09a6a12d4249140373db2c8aaff6b2b821e749f7a0f9a08384f7ec13b8ec96bb112d3011de99ae8fc120d338bd82e97e8f59b564425aaae0fed85d832189395b908d741950ac416f50e048bc891353eb49294a98cc4161750d3890eddb6f44072fcf548cbd0a366cc923735e3c3058c7f75feedd67372d0c5a206d9911261d8596fab7b45039f34ed4f13c66fe6260d941018b793bc3766b8c97dccee9342e9d6c1687d72ec3e2dd18538b1bf62fd3eacd1908b56f6da45b4ca6c5d58b23dd195a2cab3e82306ae03e5048c64d2219c246ae4dd92cbd1fa4425410f6207b94c007420b317206f221edf15baf2ac09a2952c9422d993c500e15a9a579d0c2ba591c638ff726cfe466ce3dac1eb693bfe79971cff9df719d616ead6ca6c282b6ad40941fdac712a778893c235b1922eec3c4aedc8425e46f64f4694ec51f42f2841cdfa3207d58a31fc5f6a9ad7af590877b885117941e2fe050e4311d0e8bd5a5574b03126f2840222a74245e01950ef9650816fa54a6439e2926fff7b8e4c7da9ae027f8c60ae64b61bd7eb4d889cee22b3513758c04156328389e9b45d530e98da7f71aa986fd6012d99df824593a09751831d064c10bfaf521f851dce6799bd7a75cbf4125ed2ae5d16b71108eb938eab7565205648f2a37e9f361a5a008b821e93c31b66e1e7180acce69c1afb235321c6b44977508ba96997912c98a4608127381b62feaf9fd8e72b02662448fc9f64f59ee417dde73bc3871ae702d9b52534f1197d41fe495b52bf8f119d5b7bcde5606982c03781d4ecec27bc10f70608b85d61cce9748039de08e120eeb92d6913b5c8a808f4080f76456c2e5ba2bf8631bb68c45da8e0def995ad16b0d88dfb806420b64a99d635d0014ca04b636e3831b9b31606e1c7c535c437655c4019efabd9f6500daf78f28ade4dd4489f7e9928c6c5148dd5c1770333448f69765dc006a5dde7da9b7cd0170ae41d0bdd8d13977113525afb4a8ef251290760e1c61711463bf039f43e390535a3fceda3f651fe371251e6a8ef5773ac697fdb18ef5f6c49950b94204997c5dd11f6766966bedd876685b9851c8b17b38a2b20924603781e7d8c81d62b96d96f929c2eb44ac4a5f074805c065e745ef50fcbd9d4469db5335a158b5c6090d07bba508f0b1f0df7e0c0b446b321ada9ff7ec47f557da8b426bf19094965301b700da60fe45ff533f6efa3f20202b189113b9789ac679ee57711198413c5df4aeae11f39c68a04faa135d1f6797e0a9cf8dac7713f80fad992f4999441ef08cf5ae92e852829d7bc6e47c0bc8ff0332614e0d6de854636f118ee0bb26a6d37193e9a568a8fbbc7e9bc99e2cccc05a5e4d3d2481a2443fddc57420256e3ad04c9046929b273bc60131ab0daafa42aed29d4138dcc82e699ebfca4f00a444adc5f5aca0a856aa82ab91700facdbedc639594492a5e27caa5b0779b673502b3383c90518b8bdb1ba25c202ed5af52a6c39872d7b057995cabca3689da7fb572a2f143842f2e5b63416cc47efddd35f667a31e4392414e191689d7e4bc32c305a70df2d667f5523b927b8295c5dfaf67da55e5014293bc8c708fda50af06c1e8aef31cccc86955e11008d8f7e01f4557962175b563c76b23343c9c420564289845412fdbc302ed1044853609bf247e6225863ec45874e079ec20bc2d61c36d90e468aa87da5a7e25aa71286fc587e0f40304aec2b2f4a2fd02dca89746bd076f16da2b5580c88fbdac7d3e8e95a1e3a9a92d4414e5ff393912b0f00426a99c8f572610c958d5a834e4d9d6ea920b1cef9240ad4f73dcf99a964e10f88421838e1fdd0957c52a4e27ce4790086d3bf332591f38d6df168aadf81489e8d1ad52c7fb5f5395480ee7f2c326e86c69bced0e67f9754faa4462ffc2a4c959a1b590d9543dade6742c1c428df84e8b29f680f0497ff12e47eef8ec906f6dcf76c2b44ec4e876dfbbea3183794c30e92081457468032ad74a6ed310bbe4d5cec37d4374c7f02cf591c1fe320f934e1aefd5b1175e2380ff245c87e8df959fbc1a1da507c7e55eac985ba8eacb5de474da7c3a359671a1ea68206df166023a2bdd4c7f646f288a89221fe7fa371ca29b92ed676bab5dfc4d78631bb6d9bb23a29f822907084a1f0fe17721fcdd4fe7038b91cf260748fe8cf78d0795b510fa94d347488c3dbaaa953909ed6f187840213701c7f134d3372d4816c83a82a40d971b1444507a0aabddab30b0dd93164c9927c5e869ae7d2492fc98c401cd04fb0dd971a2f047aaa13dba9402a4b7ba4acfc056a6dbeec74572877b8187ee84318d80d7eae8112b1939e99c597100c4e929b32c99e4701218306b47973981d25f8ac3bf92a480fc7256aac23baf08e6965b52c027ffdd0e2b513a755b93014fc379f4a120b1f1af4b18909e1fdb2a6fe0c931b9d7aa701bed59579d6520f78d0bffa6252b9cfdb411f41da87c720fe146f7d2622f60f3cbeccd55184a7fdefaa7705aa409d20f9b557db449e7f003eb376ba751a5bfb28e9801b58e61ec2219147074b641dd91d59429e71ad8f1b0ee30994310d10346d47daafb5842025b88d174a6d46a2c4ee33c6d4893c5e3914ad105182817f82b4e0c2d891e616ef59a6cf14366f95a7154eccc3b3d35422fb18733a8f000faca5bd21df149566e8aee558aed1665c4b39af3db518fbd99d692d1a978111287ce7e5dd0c65187ad85f51986064b361780360fff0e03b557307f3edb07f3d32b82360e0a7adf7b88714f2787118df0af51a68fcbd321c306c7c72d5ccb20a9529003710f813bb8abd74d1e02b1471c18c28cf1a633625d25070b2b8354202ba9727715747c0eb574127f5b9d481f1ed03d29d432c16dea4e78dbc803156ad07ca3f169cdbdc0f86dcd667e9b586e7f523c2db5e5ef7cf0cf9789713091692e589f12fc7fd8eaf8156292d5a164cdc43b4a09153420481734ddc4b5b05ab39bd9de5c2bff5fe54af77c751f23ffa583e7e13c50a20627b42ac5fe13e6c3d2af5cfc2da6e0b55 +Output = 7815bc09f791a55dec118c6b84e5423d + +Len = 62184 +Msg = 64e9af0cd50f12a21c5ff3d05c8028a8ad3c2461c092be04c2063469823c6f62d5c588363a398c51ba867c39128798c414d9dd894beacd94de526e5eb66795fce30b64963cc9121b4621ea33581f9775fc339edb973c2c724de612561f360ede56634c1425e82c688ad746a57570ac232cf26e3feeb16408d669273b03d26172f67447983bbd63a04c519776b2a15f366dbf569d9671fcbd4384b6f4ab62161e8be75d0ac8713e2b5536e59057db381687425dddd8a37cf85bdec6695f0fb64cdc639652122b46716d2f39daac45c02c42228be7fc6f6c23e5205f826701c863b291fb58621401db5be49a3cf8087ede6607e8a34afe55a5aaf189270a5fd4cbd5199305ff54f9cfe9fc109e854bfa95ba9b7df90a78bfe672fa4d40915162eb0da2673f3312b6b6dd20a3e89937bdba078351d28305304e04e2b2b54401fb2d22d47def4476bef900f75c027df44eb3156a6c14fecb32452a52c16e6b9426f8db59dffe7ba99bfe1a2a42d579a935eaacf6d7a9c3f54c33aaf281534e356cb501d6955220d3d52ff3605d47d47efbc594cf99771aa907804d69fa4d350a54ca5cf6a5d57b1bf2f35242b641d89c27ae949eba684b0fe994db603442673b66a0b45e196dd3aa7cb1017754accb2b410c760b43639d517cd71c7e381c2df12a9fd1b9f80472a8fbd3c6a8406ef652d24700bd3b4f5a9448b2d86c0dc1cf54292f7bad4b819e3cf5c06a7d8071a13a61c7fb5daa16c803d48bd6d1bb1b958beab979e219cca08ef4e0b59d1e9b140b76f32e92999f2fc3a8cbdf564b10c6bff5a394026acdc0c77f9b6eb121d696ec993563050ed2d9ff4cdbbba3c48aac17d35794b2476c450f1f595f609209700553f4605e14970ddd4921325f2e708dbc0b3b419cb691798d5a824e53781ceb7f2b99ee44b0d6128525070b3291aab2d525b96268c224a26abb7e0432dbf64d82aa8ad55fec7731206bf410c6f61f638baa38c1be700d09cdc7b549a4c481de355630dd58cf62b2d6a05007c064b9e80621202444ca34f6df0890e45139a4e8c1baf3ced76180ddce4e82b9cbe45f886d12d854a5d781b0c805759fe24547b14e5b3c6f83abb7f931fcf4ee8d7df98ce805ca19879fdd81af46cd40ffed528203c3718905b4f05026330d6eae37703ca1835d3a932b2eafbc5401904f3baea30879fce404851428d67a3500d71aaae0bd13f98170825e8319b677577b36415c86054348292409ca6959d46eb02f90c0673e06b4c6ac5345ebf4995d2ae6f4f5a5f0b07d1c9bb97e0658527ee07d0a24c58bec9c3fb2f73d5d97ce690554b0b58cc0a94a84f20a8cd50018f9100c0153ff821401819b30b394267d45b4875be6640098790a2fe63bffd88ca6e7e55b963eabe4ab346fe8eebb2910b7de87dece5435e4d0555c34d4ac69174f0e0f0235aa8fc56101370637f828ee882b5d22b585e9f5180e80dc9f033922ba2c92dc786ab520ed90fa72d673ac7f8045100ee51ea33318dca4c5e42dd213b0ea77d3a6a7a55b1588c01413563c2b66d1a889a548ec069a68cfd9eb52bc53f9f0c5ce0988e8e0a29191d435c6615a047a2e7d3c2b4bd6645909fffb987d4b5de584b4e73605155b55769a86eda27420e5a9d1f3ee480b40585a1f5e2a9f62a471bd6f89d884640a79764e4cf387e183bd216d12ba6b0df40dcb225a2eaaff953d77e63797ee3475a89ad8d0009809f5a89f39e1b63d44481f63ee38cd248cfaf1ba01399bcaec6588e9205a3a5e553d4e291da70b451906372b6c402e977099358ea8d60ba0f6a2c16b0e32cc602b2559ca01aee00bf2f4fc2984b97a8a133aaffcc3570ff9b9f4fc288b9fdc26f4736e87cd3c5e1838dc17671fedd886dda70a0b3a04d15b9d23e1297dea933919f0376a699aacf354842fed2322711236a7ecc4f52576510af61775ce5c182000645c7abd10f424acb4edc17aa16cb68601fe2ddd02296068374714643b9463139785bfb1e55b34aa36f9ed0ab2f2fa357ee751d8e310121fac180f29cf2e8bb95059422e630baab5d1fa79bd9c2b67abe64f35cf0f53ee971e336d03620f1f5959800a1ad02c0e344c986b79a93e845001e0e3abcf1b7c39543f36dc3a5ea75d78a31f5f75e5e991707ccd281f54d98d964062526b90456b18e5729ba044ac2c766a8ae39a5fc233054ea6b14794efc86f17baae2bd9d09630cd2a28dce9b52e1a7c529087c22182d3b5fffc69274d6a520ef4a6561fa523659e666b36744acb2e827f4c83358ee6a15adff1cd347cdc08cc162136894d787f002c4cf60df36b78231a01d7e092c738e54e78bae4028559fa2b0911404fff469d86b363de3976c2082a96ccecb48d61fd55797a5f69cc0c403845306b331f821a7b88c60ca354d2d8b7f3a8817da0e24afadc53cc381beb4547bddb33823ffa2213b367c2ba6d703cca00b3c67469837647898e53f8d9bcb25f595ac0c3c9775b571c8e26042a66dc69a537e4214e0e264468721e306d482e8901f4397e24c16d4eab83600bf17b5f9fca7a030cb84904f862495268415762cc9df2c63cb8a00101498d99572b766e7157c549be10feb86b5d591a29bcb1f630159c9183eddcbf76dcf6f96e4120b0e93460e1bebcf3eaa542ec9cf9461d91bd513abfde2b3c4eb74d04a7da9941ce0e4993f19426f141affa4800634764db7c39147bd2da8957cc8500cc239da16fe87ea6a2c9b4bf65906cb56fec274e7e74b672ebe9628b81bb6b328fcfb4073c80bce01be4d027ff507f7d111e4fa31fadae9b37aa2b0a758ee6e11968453cdcdde98b856de1efb7f81de70d80252b69300bd8889d9dceda4de0569176ba09f807efed07ec4fe0348e2d3a8b9a12ae0104b371064b219e59fe40da207f7a343807b44ecaea81c21f1d96bfb5f57ff3923190aed83b1d449aabeeb3ee0ded8543e422f8f5efe15d1faa42beb118d2c3c2c088d627f5fb86445bd12922a77bc6c2a62032b181d678dd3f187ea78b75e639b885331a02212dff17d386e5d68cbd5c569543262ac8dd00e30049c0d7ce24a0216e0bdae9f90175e6db105e208833bafb6b747b711f52319fe265238347459f042ba78e32e9c94bd0d211b610d7f1849d890dd9de44a0187aa61bfa174610dd68a34f5f665b4f2cdd9ecf142be1bc6144d75667fa9d8f5c7c35b36a1c354e0355c04b750cb659be162893a1fb0f5ff9f93d964e4c93e6a6ad75759d197bc7b8d369e2f7ac62b0a98258a48407c7a0f5c3a317b55d8f6f9d164fa9bb968043a5eb865d0dcfc71c9629174ce6d77249fdabf11fc5b3f7f0eabeab96eb1bac8a72a40004e1fc4d642d144bd1eff47920b8b80ff7a5d8343234ad728556316763c607bd1f98bb5c52154add7cc6e542eecff2e5e77f54affd24ec8abe245f1998491aa6f65d945cacf7d3b6959432377ae9615c3678adcf186282dd897c2e2aefa4e7a3d15610b53b7ab8bc648064bf8eaf0e5a2eba6dfb4d9577522e862502317f769df7abb6cfc74700d930b30241f0c900c8156d1b9d6265d4d0f46ccc092681cd7ab1850e121805b3f44355942769de3f8f34b8401c207ca0412553aba89553f624470ca1e7f55ddaf5e38da2d8c196d495d3c463e04f7fe38c07654b45479df9810167f6b427f77cc35983b5bcc09bc6c43ab90c51b719a599e3ca334a0506dc7b26bf96e2777aa148ed60543b2e921d03b0bec4d71ff0ef5000aaeb1d9536a9f9003b07daaa8f516be64c08bdd226e2397efb11da51acc899a82cfc28bfd668e2d504d3038bdd95148e6e58aa75fd1c50ed997ec213f6395c2178edd14d8e1f20ee4181c4e10d742b2befcc6adfbfd32f43c090f72e764981b4b746820505d89a931b9a8773c6f79906f6ec65d8150fbec897d1e16ad300f0a91190a2b1e49a380cbaa5b30ab1254467ac410428a7d9e5c647c8e88eb5669148ad519917d26ee2a0452ab06e750615953952ad961c388c83f7fd7564c6844cd8b414ce00785a8098e4b2e567bba2f4dac4a7c9ec1c359b48d0f9eeb2ab610aa34d5eab337d69fa3cc1c4bcbd2b02ca7c75c9c1f051d7fa5dfa43bd410f05b1efa1b9977a8ba038d401e89c376c2d7dc4753ffb6b6026920a9c6348d998792b05d8acfa9b470923a8cfa6ed9f272bf7faec91e124f42a4997dfe2f941eec45e2d19c03d5f5baba100518718bb03051e660248dae5b3ec084bea473743baee34af8c7bc68e6f8e9b23af128354a9c2dc50ddeb4d744573b870e61a69a5a40094d25a68fef02abbfa5a12d09731c06a18ffa802a49a53c73f4cfae4f930530165dfab0c4d4c3539a4eda247bc1cf106babc8916461f85f187274f2b4eac70f9911ea6f11c6c3710832486015bdbe49ca9cfa8ae9bcb82f8764b0c7ad0e1a2f1ffd7749ed116d9497e46e786da374037cf802e520b66f3e4f6ff5a56e79792ef97523c9bd613c3eb7c9dec5ca3f8aedc1317438afeb77fbeee8a6149fb95e8fe41d62771912b9cfe676fbe0d1ce6d5955ddb0edfdc87cf8d453548da74a44b23e5ad5da76c250d8b26058421afc85e699515b8d80d9e8a59e5483892ba8c63686b1d05c5cdcbbd98a1a7671ec368f061a40d68fef9c4592ab50b58f73515d9d4bb6f48531ee35530c09d8f8ebf8c3483700b47d709c1e4099dc5d1934e06556fbeeb4ddac6367c586b2e23f80dfdd1d9e2577deda35cd2fd85c0caee6b297e425ad83de22d8cdb1a8aa34be51483706be23831c8315ecc0f55426c8ef644fd5478803ff1bbad197d054431dc3ce5b93f59f88cee19907946f594defd552079ae01297c91d860df89c459fa65eded535f2dddb5e9c5b782aa4efe49c3f2859b56db1c1b49ec6ed547af2ad1088f61e7d34830d4419b9e8e4346c7d566333b0b56f0a145a15fa0a2beafffdc4e8a0a1ca19038137c050c461ac639a970820970b626ff222299bceff7aa1f43be47b09bd3ef3f982469c85136b79aee6946b8737c6780d953038a63f889d32fe12c1b0c714c8b8bc0319b599fff33cbd7e610bbb29a6a93bd03d4a7cb3563c83da21215818e6515d9c44d035e884c6944ccd9f15fa70677e6026062789517355c125f610d9f155ef68aa6f97a382df0375fdbbc8c759cae5869f73d0590369fc6e2c8961c66e38d9feb6ee3fbf91d873907dec540ee745f9b9e61e07c100a2d017c165db7cb17ca5d4f6c68eab26656d12ca9b383f9d5b3350b66f2e4fcd9089746115de5b6f83fb61e69314e4b4e868736052f5d7e09d2b016ce1c463bec5710aa803fae0fcf1134c02de62fab1e3fe38ebae1d76656e394296005a9b78b43f20e2caa1abee46b5f9e802e95bc1da86e9a9070f897050e67abe5551557fef4c7dcde4732ac7f73be1e2ab1896595eaafc34f85c9fa5d7db30426b693038c91167b5cbefdbfe851d9a9f218128ecc2c2e71bec75077a855ff9be8ce29a37e4268536eb683e0662e38a8a10b391f0b97740da6df97f72cc1d4daf645e2201c3144ccded7cdf843326481ff3105019a5308fdcf74a66033e7b92817c4c360ae83324e73cae2edc584e49ed4337e1ac18772ab012f839c03ef36ed12f3d64c7c63ba41f437cba9354d4065e8b8ac53c85c3b7d04b83891e402d392b07922cccef7650d2ac58e12dbb4014003699895f6f9eadd9fb6cd292048197db9ffafc9eb67ba1add1d3512fee2ae96ecee49c6958607329cd1484afee88f17f52c86291cdc42d1d4e7c790e7fecfce6ceec7cfeb2d1be4c1b2b3dec50abec82ba9aed6a97e8398d9ca4d73df31ec524b121b994114ad5bd70115ccbed82cf9251d2fb6da7407d8b26ecea52ca38e8951014c0bde6345fea56577fc31776310a93112b3f6e756fa287c520d167b3cdb4563620c0c436b37f587e0566512eb77808d5eb447fef664039ce293e7e27fb0f1e2668611dca86e8d0f58c2a4cf4a9472d81ba013e271800b75841fe5ffde701b245f603655830936a4e82834d60ad146ba5161a3ba4fb508b042995afbe1838cd15582c3d68571b8ee96705e50b295c6dd09de3faf166ac1f424e98cfd10520c9250d40089340edb976c826a65cb47b8e64bff2fe95009ffea31f8c42ef443630f593d34941b4867447246a03cdc51e5801dacba8f84f98a3a71ac49b514bf58ef77a8a91fbf88239fafa548fe6d1a155189cd29c93ba22a8becee65bbf82fb4dab3faa553aa34d8502b85a9d2070a0f01964ac4c1fc6ca785aba75e6829f93f7a141c715763b64effeed00ce131899d394c0bd39c4fbfc8d1b5bd7de32e87c174a2f6555472744d53016cb95373ff85a1b4f99e85bc035617121a0a558f3f02736570987260d89df46b43f84f55d490e0d5fa6da2cca01afecba44de5d58bc91d667384d8b348058b343b11fd6070869fb8f7871b06fed92fe7458dbc87d2e01aace55faff62e4fc0653e4b861b3c2f8563d93519f3855e526ee414012d7b0d133fb0721eaef1413a0433f0120e9e533be086bfc4199e700e696828dd50f019b028ba054e65f9a4a21c0146c8c2ffb96837e86d4302afd60bdfbb12787798cc986eed6067a2ae3f9fb29296d1bec82ab56ee686bf362259f2d8c41af92adbed74192fca90ee78dcdad0cd27558a5f6ec98f67545f3b5dc16b5c6b8789f12146eb326a8df1d0bf41fa7d9a437baf2e4d4ea1551d4c9bcad61d7498a34f55d29da6bf85efb3d0eb37a8c2e1306bb49b8fe9ad972aaddecf5fb12733b474dd56bb4ccb6839fe7664868ca68a374e2110fb44ba15c3ab8ad626ce7e24031f121668865bfbb2f94b92f64d317ea04c7ff45a07d0b7306e2946f11d7f53d8797a786bfc7926a4cdd6de4f946ba3b38c55af74daf765b81d4287894634a97baa9fe58e552cd155a19fae58085de2b8372ba911633807a4e05e01b6f0a50c33d909c6973a7de40e9e2f6bda520e24f6748a49f94d9a853ce1041c3fc3d965492e3e814f52724717ec0d7e9e19864fb66cf8f9f33e26c7c845bc40ee69d89d05d2c8807e4616e2b8b2c14d6906ce4c4046ff21c9dee3b590370fd58987aa9aafed2f29ecbd6e9d3919d44206c1ed04dc2b272741d7d938dcdd8343d9c858468fa6f9e660608461e148cdc43bf1eb5ed243f77424ce1036f35fa2f2a6d1e888ed26b01ea4d75f14fa67343ad23ed14169b5f770396e91981ee6f44ab84d65471095db387ec907a0caa0920e9152a697eaaaaf834a5c6347a59a00b4d6e2d46d411a039eb7de85eb9a196ea741d272479d49a8161d438e2ad0a24e96ca383fe1c8ddafb717bfe0dfb1fa506daa693d39cabb698f7cc91b28e62666595af8ad8bed0767eb65142063596cc0c893bd1055b9277a582d96112b3150d1664fca2753f8c0b4a26b844e5ed8974720c576f283b2b664d7f853781af74616247055b421302f1c44efb870ba77a26cdd093decabfc90ae76a7a858dc8130bdfa87425cddde7d2939ba58915e7eb5b86725ba05b5e0dce09c003cba5b17374e525a38276f4ad163ea940bb63235fab227e1944589a6c383b0cdb8a57e01835293b3e01ebfbc5451bd4479e91ee396e2830773b40f966c1e1cd4c3222d863b512458e248b67c2e7b1b944b310ad2b4d0e45d015b30f7ff3947de063850ef87d16f11e5ae3ad186696d4a2997de487a05b3ade341d213a65c99b229efd084905cdba89156340584a4192fba21828e100856bdc46ede3087107a1ad34f938d7e79d0e3904a8d5e52b3890ba7d9deec9f6137554aeb3d97cadc52dcac61825279b1b68c87922b25151e23a697c7dba94f99bc3f1dbfd590984989c15d2c851ba88af6692134f8a1f86e51c733f25f0f47374f42e6f2906219de87918eb8852f338ef643043adb1c202a7a3823625364b0c357254d8d55577423b514e60e68d743451fe1d8abbbdcb8da05bf0e1fa0f1b1c53cb1f9970bb5d2a079110e35185b0036d90d4690822ae6065c259d322cfe73c665ae93189cc55ade3c52ae357b0391e98d8df5f0174ed237e63177a2e1d31e4e3ce4c219efcf3564679d6d177b161ee6a12a8fd36290a6f40bad4477a6b7d9e3281a2fa0ec1b8aba60bbf3e2ffded1b67facb9424b3887c6335faeb962f4cc0f911a82b87bf082699174e99eeea1d0e08ddb1d43ba8d9f34c6115b71ffd02059dfaa6266849845f8608ff75432a843ec357f63e197d816c62c89f3a76494fd497b9377b4ef59faef37d6c40bb23b5362de5f3321ca611404ce901f6179878a68cb9c6aa9a47cc9d77d0ff9cb56a227cbef44330d3b70c07712ed87a926f3f03d388fe34d8c48db369a033d9c0624e9afd2f60eacd34d42a6616ad286531e56512b3389a98d075897f67a3987aa0abe94ee3d6a067840c31924cda801e851e52a0a4f05c490ff687ff93c95932a9dd004abe1f02413906b59c1dfb320cdd4c5523eacfea77e7a31780b10f8c96e22478671a9470d8d8661eda26898edebef1d5130121d583dbede0994bf0a2f5fe44ba3a85e17c9cc6ace5d2d30027028ea15ad47480ae1b71395bbfc1274d0e32a02e1b8c80a61ba84d932ccfe97b06d0cd7f0ea186c49d2c37e14abcedeb1e33b97cb0aafc6dc3e1babf3e69bffb5a39f88a18348ec997815c39e09beefdc486030e604dbf3423f786b28e2d0e387b0e9534979a131d8905089e17fa95058f8e1f6bc0f143a9ca7e4425a2a63eb2f7e335e6f34ebe40e02bdfb647356a92ddd0610d4942143f15da55810251cbeb4f3c4d19b1ceeac44b6a43eaf4e8ea164de17a6b6f9cbb5494903d4d23bc5051ef9e6d55699713281934d7d4a7919e003e25be2eba8da38ac5348de28d424677577df9226133e1dcd83ffdebe5abf0f15d31beafa0716762363baa09b58038dc254f82f96f21b16306e0389915b48d69f989fe66b804614b561a33fb22f281e0d7a79d42b9ed1c5b33aa2a74ee37bdcab192fffc77934bd6b3549e6f6c25bc35cd0aaab6f7f28d15dd021607a5921ca403e135c945ca6174bc7f5bbed776624b93ed2d9e9fde7e33718cbdb9f27024767ef92275d9065ca60ffeee621b710e82bac3b892181d8a247fae74144b4e6fc2714f585a77d397fafc67e901aeb20b8bb022be1a071c1b7975fbcb9f2689590889585a0fc8be9de4202ebe15e795f3b6f28eb09ed376bc92f2d936c30abd6ac925a87a0e3223f8e209d7e0077cb951a5107c32a90399e81154eb48286e573f84e4b46ade5aa0138517d7f16ed4789fc6985fa6c12e1218753a867227c7e321bc35109ed898bf883de8c364a4657058abd8bdaf6fa96be82f125f4749bdedcbef952178b572dec18ceb0eac50c62cf6c5802a9f1d0bf3b1af5aca2a16a6e3988f937b9add7f9a59e29d3e5aec6d0b0493fd0b0841dc661f86924bbd172941022cae9377c9255eabef7dc6d2efd0870c97cdf37d86712f8c45477852b39b92a33744fd91f0faa842041b3cb6d3874d79515158614390bc825bf8c49d8494650640050e7bed6613c6b0f404792ff7bad55155ce461181998c4b14b4e002aa1485d75d6a88370e0d847676b28c6da85b9b0819b9be78ea43249329cdec96234dac5dbc865946491205e531cb83052fac44f63baf1cd22145c5b4a673f5e7b66d0453b0d66193adbde55da3b3df9ee4396dac2a02f3c5dd1dfa20294bae5fd9ef1849c8ff33b7b25d8d704b0004837c6f7f8a7379c5bc54383c8610b97876e46042b06355421aed9d78ada634946b4ecaf5119668253e4d30f7270b51e6b58c5d2e181e7d0f55b5ea316633c601aed1d858e2015274b42e74d4a367897ba4283234f168db0dc0a1c0424a8248cee6ac24357c42cd46c65e903f8bb3d499bb5e8be1ccc103d00447bc25caf0116e7b441af530e94d1ded73ffa2407ed7d37385c6df1ac56bc8990e3a46582bd462f5204922b053366c82053fa75236e7bb55347f676bc48789f77bc74e8293e64eecc71b387b2f2db52c68bcb9316aa8b3e8e11225206ceb868806ef88caa6eb84babf2dc0d1bb977a653513427e887f5fa7222b92e92d1c30f3361f9fa0f338a6f75eed3684a7184e94f0cfed9a1ef001086e283b16637e2ba18fd3ed960772182b5cd613e470048464023f1504ac9f5a952ba48848cea5d92b8ab91d2a321c6abf0f64e3818500ce3b000d535ebfd1cec5f10cf4e0cd07cbe9ad1b88de219c112b0d362fdc74817e8260a722f8a72bd02344de1b8ecd3876646d97cb124475ae07ccb65365ccfb37e2ba990e7311220125ada466a36dac5b44529a5e67293d93ddd461e8addcf26cd4645f604e7c48d45571dc60bf2cc7fce1e2bfbd6d3e585505aac56a2542fb9fcff466d2fb5704bc3b58028432693fddc594546274f25a7427b66d525c8d7b433de15bd10a1fea3b3fb6a36bcdc1687077fe14d81ee3b873ac8da63bc42ae5f9c6c18ae4eb657dd3db243b61b1b3d65761766d98db90f6d61ca71c80fc99e015c30b80792f961418b6172710becf0de53a93cb2f2b789a1df0893cbc5658fe49eb25d9283740516c290612f3255173bc3bdcba059f0926adb0aa936861e674e887b7015ca2e2ca60dc877b838619ac5f0dc7a6b6a6d10127d5919cffcfd0f88421257590e2fbc37928f1cd3c61561c1028db3dacc35eddfef7c4d5fcd096fdaf5ff7c26f8809f127970b84a847b557a2159deb628500f1a56fbabada14b6f8bc9cb45443028bb7febf0b3e3199a5c3773c761c725c7600add5f9d8321c9f8e5e5fd1c7a5d2ffac5109976672e7a5f3f235fa5d56ca1c6f9a92f8aa7f48df02e721d6891279e422e0ff2679d6a2447db57a912a8a4e62b2de5f3dae2c39f41af97b49152387c7d001083ef4f769ffa53382e1107769f76efb734f4fc3605d1b07d49ff8235d192843dd57743f9f362efed7508bc8ad38f87477842bdf4c98a794b6419ecc9a56902bc6f65429c2966f79e06608d878a5e3dbe4a2beda6f352512a8d49579a01eac2b5d922140748edb2 +Output = 9d1aaab0a6d2ed8b4a37349620c2c842 + +Len = 63536 +Msg = 66d9f6ee0ec6c30f4f575ca2bcdca198d2f67fb494aaba4372b5e9076f1fc2748313971f3eee2173af967da5840d74eb7246ffe9d8370a6c9f2f795b646a69ebd9e3b8116869c73d1af57e45b83b919f307f02d439aae8313a9d6ec068c51e772fef60aed45e3dd7581b69699f8d811dd249915d012bd9f90da6d11dc5586a804fe297ddcaf60ca731b245f9822ccbcc204eb36c76e4672ddef3a959c14cd46eff6265869159bb176d5f1bdca93ff713e43370e9e2fa1933762bfe5ea5c9e5a90817d39172aed28dd3ccf2fc5cef8e5ce4a3d0bc8b9877749df7d813b9f6239932abe8e7b51dda732ca1d240e364170ee944dccebae40a581aff406044fc18a644c3ad6ea2d05a304085c49085c51a90bbbe9b05b6065948b7ea3d2d90034c39080a280f80ecda2cd721ced48c3a1f4c22ba164ac927edaa3a61d862e33246b8442563b3999ce2cfb91dfbf43eedafa9e6e05386396f4ce76c0b18e886b18e8dc1bf66403306fb81ad2050d9e403510fced75c9f4f050068159105a5c1a9ac1e477e37a09752acaa7dd2d769c5a78ee6a448397f53129194fd9aa782db4228d59e0ae0b90da97eb2efdd978d2bffed972edaf00c8dbd85d2ebcf07671ea38b198d0c6975dc33f801cce6982e5c33f68835368b30442f668ca9d72c3dd0f55d51dd2cd8ba4e17a2ffdb98e332a16c3122800311d1c28fbb29fd5c1eea3a5f24e756113772a97e0415e6987f8342d227cdd9ea8bd94d060d11b003e658a40a6a42c0648d84368fa7a9b3917407878c5ff20693002f2ebce3ab8a768b6d551db6cae3cce3d83d7312250c29cba8b8c361f7d0a578bbadd8c561525d151397c191e787f240560651cdefb7088b4c1c9eb646ffc9fc6511833b9ad25f8d31b01e8201737dace6d85261717cd7bcddfc46e5455ba69215a4e4cebfd025faafe95b118070163070fd9e5511253e6642a0e2765eabe545b3ac240536155764748aa1c6cc4665d2dcbb5c313978e49263509bf2f8b92d1a27726a6968699cd36adb172a4dbd119c125bb47e503f7248285499e07a4b271b593edf81bd939c507824e6c46c9cc396fa24cfc2be408f8e79f303c84e2a7a4f3258aad59e5d00e286ac351c8fad22c77d60d588ea44e46e3e770132db1ecfbe9807f5ed718d70927dbc2dbb20b6d7378155ee553e1219ef5f26bda789efce717494e5529fec9367439cf628858089eeef4d40b32174d519c4495caec0641e6faf47a48b91421269c194b7eb28d3e1f5b08ef629fb30c0f5562709d0e84668c02f685a20ae5794a0dfec988d6f778753aa603640350f838afb0aea94695d536dde3f2e995df2c21586ebc295c4332210c70d287e35d9c6e19c382782ac71887da314497f08dd44cf9cda5d8b8ed05a35eedcf66e6456300022fae922174aaef8652ed35a16dec1d60a0190f83417d9c80714c5952a4d6af1739858fd13af6ee70ed6f3b0efbee233b9a8846320cd44d4f9fec07df0881cbc795a9b9a096a70518554d10bfb444eed90176154b9bd465eaee20cad1ccded671a88db815f415b3eb2f096f2a13aad0c76954e5367ae85700d08d4ad18e585fc40693f3b7ffdd8b67df26aee4c66a999556c73e99267a911feb73e064a988d82d246f04fcf668ec2cea174866192e89a14e2f99da2b15b4a6938723f1cadad02b8671545b94326698d46dd424984121a9b4008f8ff54432236d499e0f5ee8c83da14d7a6a35e47b4a229ccaa6c05d01ed2cec781121808a14ed0db713c21d30d20955ef9f77d9aa9f5926a4732dccab0a1d35fc041c552cf97775f7b5b0f29a87231d1c61c69c6536fc9dfa004d3a7d7f099f83df522cbb5fa104e86b980375db83258967aea74b7f615523d48b00f9ca766b88197f8195a5fe2cf18be3ca533dade1def79c74cdf73c0eba7683cac05ae83ca138d0fe4c6af360bbbd20a1a33c07e455c81caf5d2cf10d465ca3f231ded38547b412fd502d0542af65db33e645259fb62fab91898f04e32ffd8811fe94ccc7f4219209315ac845351c700bace79b9658b4c5d5c3ac0c130fef8c94673b48972ef7fa9c7072a0eae5578b636791be4ab5edf7e6abf26b3f3e994e040c20bb5560ada9419e131396489d9a0596e2123f6631ce4e92f096aa648138fb6de3b99521b92a730aaab4f9d765085ccb474be6e2369568292532f6fa4dd9c50d02a7d8fab0fabb56a7f9680a2462c3753fafd3a252f9dddf1eb4a76835acfb59fc2a83441b8674f2995573697245e40549d2883f1d781a153b903e470f2f28e53e9646a66f7a5a7f0d5d9e6dd50e392be44867010c7ca77c1a5a2e1f00dcb82f589f759a1332b65c62766b9fa3483d399d7602a0969400642976e948d13243a8b89aa287ad5c230b47344d7783606aced3dfed86424abf7de77b026ce6cc35d20d1c500794332b0c1a1bc67dfc033c4c360a8a3aa5fd2f19d2db1bf3b807094b949900827e6438ef5991692b539d3c42227a6b362847e9d88a1b6855db7f58760d953690b26bd7258439a7f8409ae53137a3f2f14fa77a2a6bc0aa3bb7a19dd1c69554aae6c6703f3879057d3978c1a9d41bd3f492985aa0064f43fde2fa33ff6e1dfd4961e0aeacd4e3f412b4d35c0c864660d8779705a9c82bb824c405c54f429392e4da66ecfee7ef066139270ee9ccc83be5952ff5c84ffa8938f130cc52129ab825b6a5b585f01ebed13ce074c225f5b7d441cfc58c0c1039a2f127b3982ca7df546d4993027bd78ffb36ac08161063870d23f2df556b214c1b2a3705921f2f6b1984aeffd4e9cdfc47ccc643661aa60bf8a235adc50b9222ea230b4cd058a5fded8362768dd856763f55dbb122b311c93f4304db5b5bd77098620103c367b00a38fff0718db5f5905a7858cbec685b41499cfcd278ea8597be7db494ebdab2129440d58b65014fdd118ada1e13a8c70690066a1dae26111ac4cc92aaca1040a987fc8e1e9458b9bf0d23bc024903098bbb25f9277b9d0e6c33d527afeea6d0317c9986c5ac0ac7b895d99b22fcf577331352068a61cdd22e842de00eba0cd53cea8e5bfb0cc5fe5c53f2d3ea9ffeb4af41313eb0e11700b45e4d5851ccc0e43e6a617a4946e8c20cc02612e3b29d3652bd39ee258a371ebffaa9fd13976171b874b96e0aeb01b75c52d9c498c54f70cfffe2b172bd7c808411da4ace9a4d023d81eca3ea599f42cd849455645883f87981b215030b75dab31c34cded46021a202a71c852231008d2fddc61e0dcd931d1db2e8560f4a181bf727002ea3b1f2e22c6ef27ccc8125dfef7186698d2cdb18b64ce8f16f98e2a2bcce2666fea02b297ffcb5ed4c904c6c438eedfe6cacffbe8d7088e8f8aaa186a842284c8c33b4c023d8ce9e49675e7a51bb63a75356e758c7a6330553873f10e20a6ca9f67475ef3f8aa3576c0c41524180502aea307c2d8f764e0e2837a28893ae5c44e36b57fdfc9b9ee25d89df3c3c651c50d845a4870b6942cc1ec3b436e2b65ee7fc1f403481922606c3e61e7f6af32fe1c69a48ac63067707de325b61f8abdc58e99819daf7f7a28a4629e865f2b1f2a55b3951e5c0d55587108c8153fc153d6051decb3885537c378f5c2434fc27cb644029a57a4a5f45135bda0d52177ae9c7ddfa3d96542c1bd54686ba35b2de23e51c722eb3282bad756723e7a77164485534f3563c8b0de72c13b091b03a5d63f1981dd2d883c2f673dd6ff79a315ac2d2fed10071537b48039ce193edbc2cf1505c307b3082aa89d665c6257280e5bf05e59c227ed400a6238c21a73361d437ca0fb610044e6dcc65a6315979858ca7b78f5da3ab352369558978b5cc50dc9b2659b4799c0e9229ea49b77bf569d7e2b0a41c6d409f6df95f3befa6feb2cc872ee4349e40eba2072bf561732f534ed8b8cddf67853964bf094c8d6012af2d62a8553d67380d24cef25336296f6c7af197b2b079c22c92211d615bcc506e86945d57d8bccb9ba0e5050b3e85fddbe29614fa968b3e9f7f8861255fd2ff185f8515900c8543bd9fb62cc4817020c90e2df94d9a8542bbb15d9f3da35b68d4409d98a8e1aae69da8a8312608d0215e87200c55c24f16a7b2069d542f4dd4cbb244ad485f13fd604323dbdbda8f48c1d4d516b718d2028c0aed2410099289253ce21e188fa8cf31f88ff188ff93dd1b7db6de1ea4f44e923f78fb193b10d00967dfb1bf7852a63650553cd880c628930b292e306d9e41e0db11ec18cdb1f09fbaa32fe622f7c897d2db8470640e71520598cc957bb9249f661fbdb5c55b3310bd965f3496807e7d078a90fbb355ff80f36a81f6d62b3ff6660a37972df8df84f8200b52dbd6101075ca2a1f75821b445d0715fb87deda0e653922670c6f3d22f4aaf9e7f9dfc677a6041884b37d0dc6ccd7504b95b83d0fea1646cc6ba89513389af29cf985e8db229e23d3752e1d2fc842fa8f08a3b0207e086a6f518b2f7f4c5abe19e2afbd636f0213b4c17d93a7d7b0da6ee8867a69a87758f7c600528db9502505bc458e381796b0cea152b6558389b9913e48e413f0cbd60dd3ef476506e6ef08902ea381a2c4c2ca1c95cf6253355f9f11d33646de6dad597e405730bb83e3cb6554446796f3104f3a2e26f5cf1c94416a0eb829fbc3a582d1dbc716618ecbf6439eb9127d8a63060405033780a6201f50e1b1e5ce368531d4a8e23e7f716d3132f449a9def383978102ae50ed3ccae0cb346ba1df2f170d8e90efd19d9391223b3e3e54429538a9ba0e6e679f445b2de3ef2c86b71421bf077935f6435c01746564de3d30d84ae4b50f8da41c289cada1fb3dbcdd4e6cee474dfdd6fa3484cdb94f7289302480f27cef5130ee4e52090c3ee66ad946c04357f28f984983e1d63de54163cae1a378179403339c2048e82da16eb93463e4663e523366b9b1e136fb0f95f187777b218ce8ead4af0445f30a0c1fd0750ca2fe04533165d1264c95fbb6b45bee4fd092e5d1503cae6410d2ad683fd824abc0b3b2dfd0bf194bea9d44c0e7ca88cf6a762a397b9321a7722c1e9b17f8caa7072f4edd5a9c198682f4dd177666db6011736107b400913533a9638fef59ee683f17e33415235a40de42d1a1a956716b8c31942343ab85761bf2862a0f221856301676ce4a7d63e2c4302548c8c3d256a459ca7470bd85d2f1af8f56be7cd0d9a1d2119240d1bcd2fd65e3f21ad4848a21930ce4835e19b17f8784fa458f9f595cf3bb684148ee7a518a1389e8b21170cb86615ac3b5ca7b8b236ffeec820c3e27227d38930a80418747bbf47a84016f69dbd1bf7aeb1f98de2b5749fb7da0f0cb075eea7f3efa8e6943e51b1873daeec53a64f9ee27a170404645c5baaae1d7104966674d0de5cbbd2798e60aa72657a54923f16792d66b791c4059712f595bbd909d95459ec75f4c9add3d97476c11d2b3158f2f5448f2505650ed673490e59c860c5daf1a2bb2de45bb08097b3584141e42bc8d947f6b8e9c7d6ae5e20ddb73d1baa7d2a8962c3bd03a2fa66d08183233b35ec87a0240fb95d0b6336058a70b19af5cf77192352ae2629ab7426d35f6996f5e293059d75fea50ba99d7f9af2c07f462669ca63574233c328325ec4326f87ea5f8db0c9a8243065e5f6f785d9d4290a367525b94e13dcfdd543c0eaa8bfae91a7da6a3ef2c46f88bcc4f5e1828738b0642bb37ba39d5238470af5ad2ed45b7a4ffb7a740249e302729a033479342ee723efec40f4496411020a759241481f02dc836a0f433f1b61bbe897d54a756c0d1a4448afcca253067ac4c9106c7579d9c1e4c147321e89050d333c6a62c58090abcb410e7922df8735cc58ce1d06ec5d94a218d25b62ac8adb0c695a5eaefd105ce77de396554a21a783bd21ef57070cb93dc9272b96066199d6973b9a9c421aa22b47c5b0b42354647d5e923ff02a65c43a5acc2f431707ee144e74a307f00e1009473b34ca0b9de12bc5b5ab5ce7073a1a6617d2d46f0c3c58079c048c77792af3f49abf01637ca2117b029e17cd5f8f4043c0b2d46edd09145b183b9448da578dc89aabe4bb5f2bc0f6efa49b4ded485eac2d4bcda708d8dba18fb4b9f4a02a393b8177fe83e3e2bcc1f34b61d92ed9c7e7d41a1aa80e200083591c580b691788e605cfb94d796b5754a3ff15ff92c80e8f4b8a65d25b7345690abf18eda3b3ef208e0faf88ae2a4327883bf231b797b51afa2919b67f46fcdb2b39572bde63fea390b44bc5e0a3e2d3068eb1101bdd3e137682b0e4f81fa95220f7ad4677bc19b7a45a0875cf6cc8bfa563bd0b2ded1bf13703c5ce4461dd56829685ae1e30d3053f6d8018a8e95775eb5790936c6bd14cb248c2d2f2b1fb60d6727af32046bcf4c86b2d3f2bbe317e5ed6b63965bdf07e8ebe22a36194a5f98337e7962c822a1ee5ef7a59c63fc931666da87d9877ec1f12c08fa03f6e4f891f436617a167ccdc0e46f1e8e6f29147a888d1c0731e4696e51c4469eac36ab8111170e81d5bf7b4b81e1e7d2c8b2c297bc4ecb29415728e7c1dfb60d21889eeff4e9297fef34d5159d16a87054dfc4f868e33c459e2026e5e421f15a3f22f9630474597d4b2300a8a1d7086efdf84322f615166632878aef2251a08dec4be565a9804781d1d4278cf3eaafd6aa44669fccac0191e4d37d8ee3396aac124c8a7e4bd49a96698e7047fd1746b0430c56f55470a7d09c4e26498f9ff8c1986d0f355239fbc1fb9b036326287502af983aaff429ad2a423eaea88e4cf1d366f69c132777120c6f410968d5e3e3d6d8303b52169ebea8bfec3c334808feeb642f5b9f3056867eadc9aadc74123933a51c816821988050f9a0f973269ac7107a607261d69e001f9e7b0d496a7b1e22fea333797ddf9b2cd9a20cef8eccf34a90d009e1811627f8289e5b361fe73ba9cb0f790b913bb84447399e2fe9642ba18ec849a89a87a410347cbb2cfb1d38d3f4a67ca8c7747f9e2caed7bca02b161e5c90593d87b91e70ab5b56b266e7bca562b164d7865197446e49de1d19e95dc8e2706228b2743e1e73845450c80b6f29fb775921379ba93ef752dcdabe66a7a809b08cf28180ac24763fdc8e8952fa66a842820c401a5c92ad11f87cf6699dc4b797fe225ea40f8a9ad316f511840564525807220a96594a7ace5b8a28bce726d56ee140b0a90f56c98a2b0cc869372cdf0211ebfdd7476e45d02c8cbe252cd64c7d5cd4df585592eaaa435b17c839c53988c8ee81a4cf04f660940b1f6d14da020c986753778945e57c856b646bb237463253b3ffc7991674c6bb8eb35c493ce163bd8073ce5378a2481ac318184b8bf048dac2dd064caba94ac89de2b97004d0caf2a8a927593208562aec9c98acc81d1187a4852a90cc7c34e4c0144e3438b6885f665d48467b01eddc6c57b37cf6b7d680e05dfb0f80d5cb3680b1e13ae27de62d42f5fac05b755658cdb030641ea5dfedfecf406ecf9c58e764213b2d090c2c84c4da056fdb4adac79611d90b46cf74f78642c358c1b9231ef5cc24b3b64ba28b757431fd0269bf5150e1741a791dddc6011e4a735f157404b91b6374f0228f6bdc2b460fd9ba4d1d8287ca38bc776181f7ca9e67b09693c13a74c21abf793d4b82680b506625ce54b46da30e19c54a50eeb087ddbc25c77c0040074a2b38f254ed914965b393881d6ffac74397efde5c7037cc7d8cab5a5d91e8fbae3d47f7aea710c8f9c8eac4a13996fd803edd66cd04c737ee270e928d77d266eefc8e9480384b50b2ab14ca079da90e6d177829cb33c88ed99538b8343a6810b271f610f226aca93866f7e278209bc3b129a6717d83a29ae5df0f13796011c0a1a265b52efb999a34017d541c4cd5e2f57d50840b7ebe23bb0c7ded857334406399c4c9593e7ced4e828d671aa8bd33e0195fab9eac82f10224698c80fb3b56a15efc959e78bc682df30e659bbcbc801b07b92e5e9457cb6330ba39917e8dcb03f7f3612330c1d47a5bea94c6113b8f4d4f485572bea67a86375a3ce0869266306e937510eef3f8dcc3083dc42ea0291ff7f26802b2d5c7124130dd969ab2f1d1cbc3188e3bba9efc3250a7bc9b54163909a1ae38f94e77b0572464db4355328d146a93c59d7e8c81b0aa1cd7e1c01e428c3c703a1a7755077f1e18d607e3f30d53722edc9ea78b1446fee23d874b09e389abf6309dba28c0c30643b071c4faf88fc231fbc69d635dfa344215155c9ec307d688430b7eb7822bc42b9006600ff7d142e44c9cc8dc03d6348487145da68b0ea56e9aea2acbf6be41189f5020fcb220da8ff4a891beafe2e6f0bd0bb5eae2a700ef5fc5282cc384635405d66a88d08472791e725ed0082533cedc82cc2f71d8cf55b721dfa292851326e920a77afa05f2ebf08398dbb7a701650f010a40dfabfae6cc88b7f50bca3ad573b7409bd7ac422d9262a8a763703afe7c11d7e4d52869ebc68118ecd55abeaacd229bb310804b872d97f4fcb589c4e14b399be2fb5604abcd956a51993d89ed1ce9228a4c89f341e9abe6a255f98956a502be03f83db470074a15eafe7c81e68b953ce734d023a2ed25e560eac86fa5b2f3a80f75e55f809f2b8180ad1e90dc3fad50936f5cc4f3628d58001cfe60159994c1ce1957ee24bbbd17da4d2b9d1963b9c857a636bc7d6f6ca94895a443ef836d72078d9a4aa4848a3dc287ac8fe31d410bf98164f5853d483f01fac2ff7c9707218478b6594821195cfe03a8508395ce8141a7f05556f4ac82f3f65e7e01fee9380b83b40558baf2dd576827c741f5e792f9c1e1c637bb1ddae52f82a7c9df9b1d65569b351b799e26955f31dc646215a6e776402f6fba25afa04d35621b63a63a5a9873d1da84a4a1808fcf773606df25d56f1477471a4b69edf980973eb191f5b1f144c0dd038cb5dfa10880fd09cd77895465880703177092db692e7bf3e4b8340b17ec6c1fdfc97c3ce5df02936704cbcc3c49f79c122d579afb101a4e28eaa98bf33ccfff23471d096c7d8dca3635657fa0a25e0ec30606de3b2363ece4f2d91ce1984dcde3968bafa740e5d9c1701d16997b8680b364655133509df5a03a8c64e8e830aea41e8ed79e1154e6901ebd392fbcb51b68b03e99ea801291e429890b1014beccf047ed2958d9201a2ca80b8f6b4e34076c50575e689908e639279aba6105404f4e79724cdd7e929c1c74d0c154174b6b47ae7849b684c81f269c8519e4a1fd5f471ce3e935eaf295e8ecd376f200416f7f306b01db2a9a6234f013cfa0d13f22629809a76903882c1977de574ef1603d9e40f72fdf72c5d7e98c0c859d7e4cc32755ac2f7fb39b8a367cb70c6fd3eefa2c45e37bcb4393a8d0d638e2e48e6e681ebc942882e075d6c765273c5e8c34d1afa7f88ca6874afa6e375f8f7cebea3ad033883b77745c395599f68f21067ae8b1cdfe0b782533f84d1848336d7b0b60c4235210685699db6780ecafc2270867b921bd9f490596c7f4dfbc77c028180282f5b84e5c6e74e38582d14148d92577500afcf1220fbb92ebf683037cd8584a930f839e5ca4347937076cf0bc031a40fcf085a90a2be97fbbc3657ea975145e7edb7ba76fe023c706778661258d30e9483b1e6e0a416ab6ebb02a9050e69566cbbf67129d0a87f2793ae73f8b5eac9ab95490e829398460032399e27813208b03251086ee0aa92519b85730f760d97dd9a1a2c06ffb80a58b867b1c29e400f4ad743fac6bc8d1866c5a9edc6f7afeb72f8b1e9ee46fa6ac0c4098e66b417bcb5114ba2c1b2d473dfc8683edfe946273437bca29917e3d9e0eb9b8e64712db35776d49ad071f527351a5d008a9974ed79ed7700a7d0e8fa21759a3c7c43f665ca8e7b6d735873b50f1204bd77a690a0bc708d6e9b008e2e1b188202febb065686beac853af4e4bfb665dbd0278f3de384677c56c33557f8363aef9c7c34e1f8149de46c97d5ac79d38c6ed31ab1d1286a48b043e0ddbaeafb533f43654ffdecdc92bf9e0a595fa5dedc2a50b1cd0ed1c68ab5d054684b68d307fda24a6ace8777339a94131e62b640fb8ab38d2f2b8231a41966ae737e1465bfa723bc23e87a5cf701d942834a1d92612c861d56cbcc243b47814f7dc7502bf0d8620af9b008066391f809369a5e5b837c42e2e273e226a6ccbac7e5abbe8e21edc7e75ad9e2fbffa75ad796c7fb04f8f6746e40a896a17d157d9859bfb214e973efb1d5aa8da621ce8c4e225776172827952fffce4c3d24be34412867dd48bde723fad8c65abd808406dd77cd521aa78c1f988e79655244239943003882a1f5d40f3302a1ec8a825454f5e59e0177dd908e486b2e847941e1f72e4fa654b947a72bfab1c1c595adabf1382a4e16c750d16ba014522c2ab475e8638535d5e729fce4a284aa48777917560484520471a7cb32402888cedef25be7733f6b68c3f331e3dae9c017986b130dfba24e5d1f38fa7ca8f636df1ea2006eeddccb8fc859e283f46fa79590fa2b838df2a783188acb953b3be0ff524a100923fbbadd7cb47b5f9f74c564c9acbd512bf3d2090613db3687381b822240e720c60acdb449a988c13c97ade7cb0964f156346271607a85bb0d994b1a072d1250349888b6c79f87734c46c5a11d86aedead22ed3ea01577ad4ecdf42969650e12000350676f0cf3c04f10a11339baf783914db6d35d7b0d77bb44ab22c18f56d0b8f9d918b8786a42d573d4d0880ceb9a932373c1e121d3c4e3abe4b8c8127936bfda677d3c7837754feeb54bb0f2d75e333298ace39046ff4852153db594d19e8533afe75372f7d24effd7072d035778f1f989d6dd4cf39169d5d134426d1c82b9840709a60f27d42315ce6554c4e8654ff6ebf226be5625c8b58d3ed721a68dcd4a01369c8354159ccee018e0ae169dada92351587aeb26d56fcdbfec490c1a31042300bf95e8f0fc99d08429254e9cab8ec4a6faf92f1f2062f72a0a59b9a26530e0ea77bd7300c2f50429c6d11cecca16445586cf9e692a4dbe1fa9ca3bd10a5ecf766d406ecf906eff8c1227ee0879ee26df7454b5af637e771363110f0070ec431708e558a7e576173dc3905e6a4b64e0c75c2f015c6c73b6779ec4afcb3977e05ec302bd4422990f8133b0daacaf29068f96b51dfa95dbf0eee56b9a9be4702bb0243ef90ee8463d28eaffdf2a25890c9acc9d48047ff5badbaf6c6becd27389bdc +Output = 3f34a88ce60bf70850ce8549d0cd9638 + +Len = 64888 +Msg = 5a70edad7300edd6bf065b4c58853adb6e4053f33adaccf4343bfca886367e11c0688466cd636e58260c9c994541809f5dbff7a64843d9f4c1f0ce60d3f16415915f5f94086551f872a26a7eadce9044eba1b251aaf05ad6e71a82b38ea2a93d361d263f0b4fbb3f0b916d02767593527fad2efe482978230d80c0aaa0917412156a806fbe69d6b35aa04e2d897eb14f83ac10b40a365b629deb2f4cef06ee1b970e152d09facadec599b507ce3111c55e67037cd85e2a1bfe2377a164493fe024d08e80d44cbf48b54249992dd6dc3b78a3ad5d9aeb0ed698f041b1e7a18ee92579937107a5dc779365b3ea8fb4393a392bb65f38232e1cd31a3585615803bf00d1cb078a4e49f5c5c89b02da14514909c6c78a9a4fb3741768fa24b8b4c8e91fa0df4a458f2f4ab534a7eaf83e4cf0503b88e7a9b6c467cca33996d6fe02efe8ae764221afb6fcc97082a9cf7a51b77653a07d4ba28a7c5a9399e4a17ddc5ac5c339f804f805956b46d24749108827e3d6b85469592c3b2900c315037b7cb01da6d073d8b0459d027c40cd4d471ac7ff8c7775ec24d32ca1b25e31e33e0a7c5820e2bb83209d9af6db7342c2692f1f333c86e7ba4ba7d82b701341280faf43ddf917d9ef903616ae2b14ae92bceeb8e5b08cb2bd16cfc62d048a4bbc36928f16f919d4024737989434ca1aa48980197fae32dfdbcd747e11346a5a86fbdde76ae78db4a68fc9a90fbd3e8de0170dca67ff2075feb7bd893dc95b736ea6b5d4418d1e82c2ae14d08790170f2eb0bc54076bfd7c0d1dd36e1b8b07a05c7e44dd04b172453ded3f956473fea8769ab53ec5b971fdf047ddb5114113e838ccb28a191c3105019473800f2f9b61a01e21100bb326fe8f7d04e789b52a54ead82763e99604caf5ebd71aee8c954194842853401fc18ad207708beaadf2ea5beacaf1dce7939d013a94ea6a5195503b14f18ecbc6eda6a12c48299cf213b4714ac3bb5bd685850dc8d178ec4842977b16a5491670505ce436b549074c36ba15403b49cc2c828b01deb74dda37451d3dd16b0d88e492b3836bde749382030330135a2498b134b6c5c46ef09de745eb6a8e6c6089ec5cb46614ec31a85e2197a80c47d3282d400e42c21de99e20eb07e895cfcd814e566575780609aea6397e67732bdee368519b5e20ecc144a9df7ba12ebdd9d8d327d099e155830d23f2c053902dce30290d66022504fff64cc84f7ba15e0ef74377fdb89500272d9df56656aa762a793a1c76171a8d2b1ecf4e896035d9f34466f0f2bbdd307d76dce978570a2d7a256127d38347aece23fb1a3337335710280438b98b010d0e51a777fc3df97b479c67d68630f4906f6d98d454e8e3ffee0ce4f75a0e49be6124c747fcf2bd88174514d09604695b96646e24f55a8dfa1456cfd6db2efd6cfe5805007f5d9e7b758a2fbe0be9ed36cb7044b01d77796f0a708d7c46d2643e6e56274a8e66e67ce6d28247eec6ca4997f9e423d426ef8759c0e693a2e2c75d3885f5cf30f5dbb5f486d314468246bd81671423224f366a88b0a2c0f8456ef0e44c39346df2c74b260cebcc1b07aaba12229d5810da973f1fa688ad4fe5a120fb15b9244d45f06904cd9218753c3e67d092476ca5b05a2ea70c6102afa9a81504473e45d9d79f3517318fa05d0949ed451fd904eab7c761a749f5662179caf68749903f188e1bd7e6a1ac0bda561574f9321dcbe5d825fda7c50c82ab3d51eb0c8577bb1353ae78fa83af02f50be8237331d966a0fcbe2d2fe86efe58dd831e1c62bb61d00f9e40d940612cb5110b223b86d6802309d817c81ae2812d42a9b43e4823d859a834560d418a32224ec69ad997dcbf74e9bce3f9c332b334520ad8fb9f79c9b608b8e31eedf2bb44ab60b3d5ceb3cb9d82b2ba4b4b243e74f6f0b0dad083dbed15720e92ab607024102394b892224da6be01c4451a81c7f517a16463410ab708b9a900f3e59ef8c96655660a4af2ed9583f3286f9810f9c09b661d1e5bd5040edaa7e0c80272fd3b933f505160eb5274bbce0f512e9b79dc6c87039486ae6b0862b2d79a6aa5248381297b173bd5254a4ddba07442e8f251704c3d4c2b5b94fd38130df084ff17a8165a0ee343780d202162045f3ec10a2891fdf4ceb0a526f54412a952ba477eb23c1c323ee09cb3fd1fab629a88ec6968b5e14fa37f54caf96ef6d448734700aadab50faf7a08bee92ffde3ae8a31b819c6417752fe30270f9e09b55b18c54697d86eccbe7985d7ed39a2af22aa5a9f43ab6593639700e642bc9175120f8af8811d8f92f345dba60f25e0ed7e522dc5ef4c95cc5fb18eae97b0d73bf6c15ebd70936088d746d2d259db00c54be974d32591194acdb3a028186223308e96083d6d2129d7f1e53104d34349600fd7f570eb6238343507fffbccbbbd7b62f752217faf31a6c988c2e3844605e6558379454ba73cb21f1473d0bba1ec46fa4a0211af26c11ee8994b1874ca7a7fa257c7fa4c486bee1442c44feefdf9b6dff8e1b4046c2167d57e954aabb8f25180baa936f62d0e0d9bf9b91f6cb82cf5986ab7b3866a99a818a1682232f9b3877614e5a1523f6c3a3da11be93db8cd2bad074cb53d0871093a688c48107305470dce44e46764cf9b81a2b2546ae7247fa6366763322ff0b3c23dc8634d1032b9cb4e8ea73e857d58ef654609fa2c791a0c61d2656cc55fce3887e51bf2b781073bfd8b91dd8bbf9a0f509faff56e132467ef5362f3b3068125adac1a05503956e243024b4e5cdd896acc84ef64973bc43d48b303d0e22df51019e20591c2a3d14a89bd7d99e21f4c8742bf714e8e392218d4b9ef0a391c52813252879bf7079dfa3582cec403cd0cee1816dcbb3b55677ffa2fcea99f1abf0060c3462dd6ade57ab11ae6d9a92ef028b852d9b386d7bbfb25db4ab6fe7164160bfcea4e47dccf53634d6edfbb8b21bc883b0f3f57064513ba8709373d676a4a9bc61c0732dd830cb5e20edf212cc632f2982766962b2e4f22f9b3374445f92578e9845f7ff92a2d0ea36de0c35908135c33c8312b8e9d37c5faf1bbfb53382e0b2dc95e1775ec3ed55634ea895a0fe630d29ba6fe77bb540b516bcd4ad850edba5a930ce09cf0c874c40a055b760233d53e47d0f82eb02d5dc8c874191e69eaee378c72c3b55f5352b5983a21f70983b33f75b4fffaa34a2125b0b9506ba9ae108d5a97a8076065d7f18690c3234e5c329ccd5cfc25bc34c131cda2d7083bc08624a58378db1c886b3f7b102943f649ba1ff6cfd8f52572a3b4c43a963d45a8bac4163f1979bb4376681fc13b9e2ccfb38e991579b3038c317640867551f0ef123554d27529641e60351babe27e167885b25d37c9a6810bd13ee7905d8e631cf83e084473333fa2916b17d60429dccb9853eb3caf18c476edd5615f343ac7b7d3a9da9efade755672d5ba4b8ae8a7505539ea2c124ff755ec0457fbe49e43480b3c71e7f4742ec3693aad115d039f90222b030fdc9440313691716d5302005808c07627483b916fdf61983063c2eb1268f2deeef42fc790334456bc6bad256e31fc9066de7cc7e43d1321b1866db45e905622d04268b5fd4be7aff012e9db13f0ba68ad9e7ef7aae918f39bad4b21fd001f78beae8732fde640231232fc4aceacc0a603708b4a474d38b4f6c0a55b76221587bf20d3651a6c195b28b22f9927ced7f1713ce9e845cf3b0dcaa6c389515d00f8db809577db4538fe3d7acaf1a6bcc7f1feeae1f82cd9e8a52049edd41718a7721ab61690c8d965b556721579d4df584fb262bba382d20825ff906b644fbdd39e85aa9bd66a906a287d82585a389f52b3958cbf10d12263347063846081b34c2323456f7448d30efeb992dabb5b657cc4b0503568a030c17b7aaa82f03662daabfd6dd990eb0818e0138ae4c5c3979f2b0a9764d27866eaa1254dab3ef43245db190b2053d99951759152be9ffa9f8390ab479577e02ba54f7935486f468b545d81088de49cec81663ed2b07388e3f0999c4a107e60e7bc2d7f48a0aeb1d5d1d93d4a686bbc6b705a1ff30266f3cdaef1e4861d108003f5e23e6ffd21bf7882f653bbf912bf7ce5fa3e9bfba2c5c3843e8be50455c9e51917be93a5f0f7dc2f5dcd4287ff2f89a9eea2b3e44f852f3c299a4e0c74c2f6f073089ae144e169a2b6b2c65c5a93f985dd53240594bc789c5918a87e96f49e419f236ef9450688a2a80b31be4c74343e6f5ad4a69af1066d770ddda2e2e546d64217f5351aed9ff6dbdf6af6fd59a29f4dbead0f89ac41762a82d4c0811f547505ed19ddec1f1867f836594b94caab6f1f879688887691811b7d75209a2a32e790acc038e22259bda719e607394fb7758cbd7658bfd55e54f109a80a568c46f38a5cd48f2580ccc08f8ef97016712e7a3d6937c8575310b9552b55c5ddcffa639c063c2adcc0d73759a07ad050b77846da93c02078780f75efed649a567ab5fe6db1e051306be4ecac54516d12aafda10a41f9a849cbc3536656bdd1e916de8ba665a84c49085aa531b4669082d02553757dcaa7f3d4951a636e49b2c02adfd3ee2a7c624e1fa12b90c7a180c8b45923c44e1b679d1beb918d3eee84003e1f9eee0944dd673921467095eb870ddbffdb9fbdd42e70292e828dcd9591d4db06b34d09e803bedd41bd79272aeb79cf8141add0dd459485c7b30a24271f6288fcdcb433501d78936c5a548448f53317451e97911ef430b71cecad498a77d2cd69dfcb8d6572c0e307e3a9b42bed643bb539040880826d4897f71e46a8e14d32b58539220d4cbc567b211fc0bd1b33c3375c9d3ce93972bf9f9b042367a4fb404896a7f731f1947330dc5fafe4c6c938354d0a35425f68a49b9f07e6b10a037e8bdabc16baaa71c28edc11898a384d2216d5f2fb743d7680f5ccd0996d598d74e41921868ebf7bccfee8dc5796b7e80742bcfe97661bc5d914ea074383dac3abbc1a7d4f9778d918e6ca6820f08cc27121cad510ff417c3a60c154eddad5cbaa7ca6797abb1db42faf485eec80ff02e71bc71f6e29f6c42841185d9e5c92cdf98a85bd0de4f53397c22b66c32e57d1f2987a86b9cb83c52d1fb8cd5ef058f221507ff013f9497fda853a27aee2de561900acb0facc30a6d0626a4a357e7161a9345bba91e261bf7f623f4ab484dabae4bb2545391645909a72f47c2cef234319a0e3c59187851c0fc00076defc9424db31adee7c900aaa11b81e0d4a29b7c0fafbddb61ad0fdbe11074754333254bd87ca0c53cd22c71dbf9ab2a2981575ffd3ad123835a510cc0d9eda8cbb0e62ac6fef091b33b4c3102c8176e61c9ba4292c1e4af1e9ee086e8cef81c57e79051a1b066eeeb72e47acded6347ee0a48d658db64d893e932bce156106a78559862f147901765f789b185fffb215ec1679dc7fdde2a93c7cc211305c30dcd7982d12e1ae8b58357b077d3766b95146dbaeb689fbd3f9ec9114626548c6097c1c42ec0a0fd33f411dd303ec7110daf8d9751a3478e62055bb6be73d8e91d97dcf0de41802a3d18a4746d1088a81590afa153007bce4c77fe00dc83f9459f1e197d62392f1c1b618e2a9101318d2768224d8218a2f949573e9432ef4c3e5fcb05ee4d10043f697f3d444e79383ccd86a4104154539c03338bf5541e283ffa0f20b8015ea600a1c24075f7f12323728c938e233c1432e48d6488b28933d6d85b086f217d9b0c5ecb2614200178fdb0da8f1baa485b3a77d566e2d0c8f57f854f2b78200559befb0a5cc35912b017f300e54d49019f3f37abf1882145c3b68b5be8678f8e4894f0f052f7f5ad5f0ed380349771e0669dae6192ed369844f854f1edb1b2610e2aeb2db7169849dc4ebce90b8ec76d37f24696d9768328ffd17cb199eb4b3600ed4402e7c3b370be6429abb897cc1089c98acc23d899803ace5d0b7b78bc65c75896207373d9aa8bcba438ea46c272e27005720077ec36ac3b807010ee8888d7f95c06d8ab6d6fbaf1a7211f107cfcc8a22128fdd8eda4bac5818fe8b13217a95bf01685df0128c282cce4b5994e26a2cc68318a703052fce8daab71753b8ac1dd0ce00983177e48db60044c25a879075b655c24d236e9d911f653298f275a98191ce3e24c22d8a4781af0416a2e7c7cdb92e96b8373a1d5dd5f379f83681fb27c7aa29e7eb5b06bf5584943bb429969c96b79ace8694379a78f9941d680429793d09cacaf32ae15cf927fb1bd877864a1697d8785aa274b0d02289f1cf25bcddba9427b524c1a285373f419c56f61e3f0176589ff98c5b08a513625ab50d3bbd05f34a91c449d1a4d5746fa875d0e6e41ffe2129ac7b7508bf77274260e42e80e7cd3b441ce9f7209c708b267f2d669f37d53a00bb974819e6f4de9019d11e8e28ca00b874ca9b6154d8a0fdba3427d913a3ae0a6e075ea4e132912c28fc924f9093a3d3141345cfc557b3176f0eb0fb791182310df43f0f79da47fdd58e122be6d02c7f43ed7dd2b693ce5be5e2896b32c6c05bdf8571c3769409ed68af268af428a1a34a80ccd2f134f8b166d93b93066b70722de37e29a007dee3288657d480440c2771f3b9373ce33a01381b4ddabca8985d3f35eea8bedccec85f3c2c7153cc74f2006ecd6960489b33a4cf47a71e2442045da447a79abbe18253f82ec93567e2ee3f1b8ed0250a2330f21eb264f288754fcf581390fa4a20fa4ce3e344eebd5d02762086d452d1dade6a2f1478017b3a26dc78d9caa73492189425d54b4577ed16eca53ddeb147c926542bf84b13a69871ce2c22bd691f3fc572e58c44033d9a13ead33a540812f7f0f739e345f0b19718eb9e75d107b430e72d4b8f99f0b66ddfb8d105a020da6c259c825fce5f433f037cf35a6e4b9a6c670e8166b0d48b6d639ec82628c14831ab8b2df34e2904991bc85659fcfb79fb2e5dac99f37764a387e4e02556b2034d6c0c63282d169eac4619edfbe3e0fbe62362f7b0c8a1e71534d1408b91bdb4c84f674c84d3eeb6806db5e0c78bc2c6342d6488349919bfcd50ae11e040a803ab3be30f91a879f71e79e558465d6982ed36ad87adcda892d3c4c37aaacd3c97fd1ac9d5d7157f068d50f17dfebf9cd81a25831da1cc16092d7958a4739f4119c6d361c5dd80c78ed5dc2176791a256fc2e22f729afe2bcbe556b5b7c21e7f300e4ef3082b521a35ff03bd6c3fd7caf1ed54f8ad1fcbae81034222da20b2be85de73c7c549f440a312af0c86d65c5403a36528f6b99b69d28d27e63514c3c5c03d2a2525c0cc018116c757edc8138a4fedfc0677eed622678dec4af126b95d88345b5450164425771433e6c89d62367dd201d95549e4a2e70a799636defc4e85caee9d6dd6c3732c12db0140dbb31e355b5deabb4f2db1fb0db6122bc5f4606007cb48a485b0b4491ba7f07d0c6d0b1e8ff681cf8a1a164b9d8b05f9620a5ac1f3da9d1fad75b075347ffaa6b7f8c6e076b5e5b981119b7ec2e0b9c73da4064f9704e303d5792f59674b69e365bc1424188260a2bc7b063c849d74bedf2c2ab3fa2f647b8624f99dbbf3835e9d21c0927e4638b2c4c1202fecaa7f06cf088f95244466ac47ded5e8395f913ce78f90d1afe7b6102049b1fd01ef22c695a2fd9b1e2c32c1a00f8de2e777daa8cb6e4e8ab34f22e5587d814ecc54a427ba603c70efcd10e0191fe734cf24a8c8d226c0649364c458f5c457cb53c24f50c5ac13ba9f1147323b77ac86f94c41c4831faf085610e3927e85fd1ba01f69693eed4b2237df21de8d7da47f6bd8eec567c1e21d043ac9ba7b2a39e7bb553b9cae8aac4fbe1ee40c989a96c82fb1f7f30475234ca6cabcf9741ad4d7aa4a0d0f9cedfeea3cb8d9e6e2364b094dbda475e5a1383d42a70577f2bd969277e827ea907d099aba944891f5ba8ce9cbe63d748fafea97e3bbec5b7c7b46c12a15d05612a295083e9a7938598c1f10b31309178c0501028eedb8ce9bbcae0bc9bb517babc469dbd3b2b3019416cc270d2c5187620d45284d25b3f7d6e894195ec1f280e24b4ebc7ec4401430bf5dd6df185deb9c2d7eae274b23ffb567c192f00ffb8d40a00c5349b8669ab5ee98c433c1756cbfcf733f2548510dc0a1fd1f888db4cc4c296b473b766ebba90d479a100ee132555aed814d02854a80ff0f682d2365638e4f33415ce7a09e968330ff7fe7e864e636b41ca96207dd7ce7c114e7b9557a8e7a2be8b5f1436c03b81c9c8634d42af8ca90b941501eef3cc2d9ccbe37cd3ad5131ce54d7da14c7914d21930ddebad158049001bb513a849f92037bb8515caea80cedf2d7400677fff1c1d82cb7615c4bfa69841772e2f2af25efee58b7553552b097f5bbca9e59de1c05086e4bc8a8ef0702abb80b7ad67175bc8453235fd9f7a956de13fe4ed5b22875b43110733f9796f5d8fb6f64989cfde3ee1609cef4fd73950c7e3f8a7422a39e6c13b9d388fc36bdac703332c1781b108c3fef352eda9bed013922f3cd9619e980948c7c2d8362c486b4eb57d99979acdf3f5824d0158ed96cf33cfd4a8307d1a2222cdf95b3a7950817fc56598786235772b9109144c8c4a02ae219638fda01314aff704a0381c9a137dab0c9b8cd1ea598a68aeadec6394b5eb6dab1031cd2ce8d98d0b2f96dbcd2832af992a3bae91a1f94f6355a23c1aefd1fb3bb935cd0da586d63891be7f91c9851935cdedc3d5555f8d5093d6dd87b84a126db970685d53a01bb14d16d090fd5e30070d0ad65b7fa66b9eefee0f81183efb699a4965c5fb0ea49eeb08956fcca53d3871fab0ce26b53175f1539ab01893ff58e32a8eeca3b8b928f3fb98d93e4288ef822519d4537427fc226d46bebf3264621d7aa97b5686a277ee579f745c1e5955c6f4d8150dcb945c09a4db50160372aecfa07f191960a6b2648373e82d1ff892c7cdb73b5ca2c2bc2f61201123ee73658106d86ff62e0f01dbe9dcdeb92eaccd0d197ceb48e1f7451a0adea6f0dcadaebc137c24f4d8238dddf0a1fe0934bf2e1e41f0cfda707c1f5409ddba85b369b2062f32e11b462b7ef1008cef241777de84abdb8f1937997165c4e5f3e85def98eac2c34e74616efca081635a12c11d05c7c105d30e1f9563d3a5bef923c08789ed34f812060f362e70dbefe6dc18f8ca6dea3542bf0eba1f28122f753ec679ad99ee97d6da39c93ceb77f83c89065256008d358436ed4ecaeb75020f3f560c2b75566841f6c8704f99bb4603217271d10814cb427ba59a8fa535fd6e30578a2c09d535fc64a2738f0110a0e4ad439e620be6c024941ce694ddbae93b18b339d7ded4c4ae2cb11a23abdfcf8734632131936bdbd18b3c7a011b6c8d1d005162557bb9de0054dbad331f8e9c93beb94267270be6f268ec9dffe8b3b3bdef194ccd68ed4b9ae60a73e9e687ccb1542d492c502ea72e311398b6caf721c2edf341682ed9d323e925b56b87302a88fca77da7943ce82ef09bb34d4ba0a0d503c7874e54e43e446614bbe18af37dc1c00f28017e9d6f99ac6b36ecf316f89e377d67a6627553a464bfcd7478378c03a84d906193b904186e6b69bd49c1f1c493fd2998e1f6dbeceb0e334bd76320f7bb4afdf05df971533d8394e5d50a53f01f2f154e58ce9fc304e9349032e1014401ecb9d663c37df1219bfe8f1f57e5c9e2fc73ed4f6564d2b5381a680e18f793821c0b3a2d80ef9b229bf0e1b01170f8e44a8aa04e23f5c008e32bfdf570ca8c47c33a44449990f8496bb2030fa1bc242d03a38dde70193605d2b0776e5141d657c78f1e2f7428b19df48c1ec46d91f6c60d06dc86b497dcb3edf0fe0223261aba1252ed767b7f6d261cc65a58dfb716b652fbb6cf5738591a1d35b8374e3fff798acbdca2155cd5edcca7de525ef52b05b8ca4340c1c4564248c5d0983a552e9b1941103aa98890f9ed78d33a5115ddbb29baaa615a037a3457e96caa502f4e28a6feb4c6a1cc47536582609922ddd6e18c1414ba8bbc6ef733e9b5f7f69708291848eece64eea2011e0aaef53816bb7fc821a8d4bab9d993c20dd206955304a55968e6db5ab6480dfe5be5d9fb88379bc7268f3651c06411ee9deb5f962ce9a450a6c674ebeee27eefbc2ccad3faf03f706ef068b69ab7789ee02a8b5fea602ee549b3227f5c175dd874ab5228358e72ab40f4f3530f79d0ba1fb5115a55104c009bd76c7eca90b1a0cc8bf86202ba3d60e3c25e8ee6522129a2b479ee34a20589e25ada50fef582310cf444e9271ca677a08431d1e9ec74d5b1504c8251bd62686764f45dc0edd9727c0dbf266c5bb8d9bf5ff583deecd0a594b01080720a6986721b430eda20bd4b63fff07f9b1f786c887d310b8efd3e8192fe504f603024c94aaa4ec9123736a40bf1605d7a12f01942066dd3c1c5c551f55f9157e3d89b1a39379df732da4c65ba0c9529d3da27c9372231423eec6dfd03fd5d00c2aad56285ebb90100b00877b97819496c1f2562adf706c0cf1b3e6e05003bb2c74dda8777ed294d456271c0505c74270d8af3cdedb073b53afa418a4290b4d5b86ab27357667545c8978f29c6e02c2980c298f33f73018948307d3a04d34fd15ea8660c6d7d265053f86b9a652ecbb98c701cbbea6836a5c166fa6791f4940e81b0fc3c005bc3d5ac2d0cfc736bd93ef83c880c38b99d6f6d43c1f733190bf5e9297fe95a27d43e9cdd7b3539c2dc208dcde3d06f8bbb501470d9d42f6b3dec5dbcf4fdc10ae2f2ebb0be2fff595ec613cc35eed8091ab17d944ae4d011b15ca711655f7e2c74596150dfd00d58e69a52e0864ebb5841f871581d115d33efae8dcfd9f7d9b412dbc662e502aae8fd0311b2dfd860a3b88fb86459411dfb8048d89f59ad19ca44e0e191d9ac1f3129691aea47740e1008dc1a5f065e598feb945028ec69889893d07b82c2b6b55af534332fc70a0fc7b8495ff12d4f5a17b8f8bc139a136c4386135ce0a807b18be6cd25296682a9f1503c4ec3d5fc65bc70dee5076b930ef6a6114c5194895eee869ab7812cc425b6581fb07d064dc5a59aad94ad68d1b6d77933137d8c2303a85c04b3df21b8cb3d59594dc7c82ac0fcbecd8fad98b6ac0e89df780e9bbde7e4f074dfea4e47e2afdb52ed47247ba0e664a69eae042837c45e7e45a9c64053c8cb50054bba57b433647258a82128ab8d15a08b58b210a0217e7940f817928f7c7401ebaa6dd187f27e215590c8192a1958231d54ac57304c733632a3959ce32973f05aad709ea414b0c7aea8203764b2b6971b4afae32c6ec51fe252484697f7518419ffcaa453c082cc29973168a37eb6644ee1a29edfaefa9b1aac3979f20d9524f24683cddb1e7d988f0503952da8e0f27ec2ae6f90359c11a0596f1b3d94c73aab2ba40086572893a79c9fa74c56bca97295253d862a33eb3d02f215c1b3702d0d5534259a93 +Output = 397f31ce80e62b43e512ca771a2714ff + +Len = 66240 +Msg = 74f681a02d36c11c4591058f72b5d3b29bbf6728ebfe605f25f9b8b737b3f9e6112dae9bb72d1861953e23c614f898bd6a819442b654393c4c41a3a74db51ef27c3c96a64c444f493e24d682695d377e5a1f70911f0f26219f4797c02d9ed0985c2a1f0c1404cc9ce54b04099c6c16ba14a0e25f4fb68dd4c5127a48fcf6769e5900331336f4f82235bc96a5d3ad9e3c400cd1f26ed1d81e67aa3688e5437acd1cc5b905db9d3ba2d37e759b36a937cb856c2794a3e86ec72d18b1c80e0f43ed4d8199282a85fee66a998736efe74a2e8bc7cb8a1684b797be63d5509fe139c6943dbbc54c36a7b4a016b6bd23ef3d2efb25a51ff02c1b56c3938867c142c41f970007236838a0d51dfce977fd4a7a937d8e9d9a596902cbe3b1b4569bb94cc201d2658ca7114f118a5308ada27f6725b80b9b4278c2d4bfc7c4406657ce397578bbbd46314b1e2f8f24faa83d166eab55a3876176bff9fa17d414dc1a09f301a4c4f79a2d6d74f9d376a9adf498f6effb5f493d7ae8da447aea18030ff3e22e2ff4fbd0c300b835ff51fc07ef8c66b75345c91eadc6dd65980c34225b136fc3be54b1301d8b54acbabddbfc577a28cc0560f04e37e06b241a45508029f1008afcea01026096af26adc32ed654eaa3f6b8b5a4143fbeed4aa89a54669f16ff498ec0d48db7aa316b806adddb0d653ffc144eceb7ede9c99fe915281ce509d2c91fde101a484e4242dabbd154ab7264a8c33257806ae869eb86bdb4ea2452e3d2554a9ff13b0a4a7463bcf088559a7ac06a6925b7de4333f6269ae118847a982cd80e675ab966b1cac47723c13464e90db4fc22a47183918872b595ed2c085b9e5132529deaebdf09a5f4534570581a5746f2348e492fea681215b9b2458493f168bc4701f5203dfcad3a665e30fe7366cb5345bf91cfa55fadc236b0f677a7edc4b62dcf028d316a855146519cdf5d01e9273c7d6fec2c35ebc5f22c6868015a0e27ee503bbb241ad541d969de8241f2487701110b0de6b27625d771c2df0800ed1871c9c6317fd5441209ed1b6f85ff914a7cc38eba3b9df3eaccc62d6424a70a909e85cb77a8637acdbc247e2f93f16ca995da207b93c00d1db872d180bd160c975dcb7316098c207adc572c49d18f809b34a0e8d956e16ac585bed5ba3b169c3596e2e5950818de1f50cf5045a9a37628415b0f5becc9b2ea1af2629b076f627331134a7c0fce5bc600d110ac82f3f558a454bc8abe408e945f569faa87e9055816a6ca5485774076d4a89405c349a63445d318ec320ea6cc3c31b56f244b2eed2ee38ca4d2db3438b49b05d8d66b31c30c1f4b0bb1faa19999cdcb72465f84395f11b9f45dc2e01388f18bae22213d0ee2827c6fa4cd27045e700a3c56ebb044927a78cd90f4eb0f38f34d0d0f35721bad42d49e714fe21473639a54bab85916b064f2b5d238fe34ace97480056d7af457a87a22824877d1c0eea242dc8e28b89f184f368c58c18bcd1b278c6c93faa1c6fc96833d8091432e584a8f2335c53149deb6d8241adb1b81d08fbbac6d9d28e48652470cbfd673a3ebbcc2f674d78994fd4f220347f5ecb151d4942dc40893978dd4f856ccee6808ed1d63bf1406c86abf439c91a7b60746e71d9f585fe6eac95b441d8270822a46a798fae5defcf7b26abace3601c77326d892659308dd336136cb3ffa733ac243615210d0975e1e5447db415b1ecf383b6c5d6d47859578476791e5259dbd37e963762ce70ad743379ecf7c66c7775f6beda33fdd9fb8c06336bd976bb5b4911ff42ad794fe0d7045b7be07c1c267efa0a18f64bb1eeb149dea77de3485c6d9cc5d96983f3aa8ac65d9cf6bd2d746f0c1d246634bcad87bddcde940e8d39c16dae7e4f74e8751007f4e2a2f03d0bd6bb6c6f3c4f46b27fd0b253847ef68dd5030d7397c2aadb0727c5cf8dbbb74736667c5bc101dc880a20f3b8f7bb20c328fb678c0b03b746c0d424c61f8618a11ecbc19c9ce30aa8973d1571463978643dc54119e1ae9a42dd6ba668c0d5fdb3e029d09438694d9ed7739c1ef8707a0b73ef2e9fe439d049dd7ccf1a2a21c2fa3b2f2dc52c1b11d52b630c0496f6b2037be784906b1bd5d62176137ca3f004de703a3db1d05ef3e61399c9d4aa429cf6a63ce79deeeb377249e5f7e2d6d73ffb3fe984ecdddb603c10767a119adab75f935ddc1af82e51a8c75b00ff2b3dd0bafa9b97d89ce6e351a287711df1257da8b3c8b69a1f3bd0e41a33a32429aa63a820eefaf7a627f9c16a5b638c35c97c5c981c1b8dbcba11aec30e72e45a93654d535202dc82051005b850a5dee12d2005a0b68f78691fb0835259d4d2268f6214f2435409a904c2991d05dc787bc6f51e8e2666fc9ce329ec38946d5025f4c6999e5172e183bd9df618f96bfb7e2d881180fa565cd09aea53f64c90f0c17a1f35a80ac3f6ca85ee973c99d8da60d745894990b24b9cad7e450be0e4369175e883bfbdebdbb5f45106e865a797bc4ab9d048882f3b69a15259fa0fdb940e7e9f0e46094ee30e9f41cfaceb5cb5f90e51a0fe5f119ecffd02ed4117eb8ba10acf3fcb7b61cf0cdd5d5c0aa96ca79f88a955eb73fdf828370c8961a7989ff190d582c062b8d26934e026821e5bff28402d79906568da1ae5dbb8dc2d675368a76e91b57dd89f8c4c96d9a3c8af2f1bcb6a867da1d6b7007ffcf62117dc288ec4e6c71b1b35a8ee7addcfd026dab9f290ccf703c7cc01816bfccbd0f56b81cc5fdaad81d954711846218397b763223526d165d335bd6c063037945c54aa11ba0eb6bf6a16b97a92450e9f7af8ecea6bf4243d6c8a2f39177349fa33a3fc3ac02807773481d937d4edf16dfa79bc950f9f11f82023960b3d9bb067f761e68f8752495f8179483b68a7769986a86694887e4720ae909654d11fe767f82d0d626803f8f2d18b6af7b6080a8cb0038f7b7f181041585f84987a867b74e653c555fac392bb9526c5ef559629c1f7298bac4c0329c4cdfef568a255d909227492fcb7f7a3245cd9fd94cfc850d3dc78dfc987b5e0457fed7d27e1047cbf4d1e1aa91836a6b78923569a7d151c3cc0701035aaa6c02ddea96068bf28f2e1b6aeb10da4071a0fba818542e612f85753adb1933d6c65f86ac163ad7519c82b0fa4ea7cd3df89775172ee20b33851ce06903844b86d3e2fc4b3db68db8d68e5a8af4b8930265198fe8615d63d0bc51b49c608cc942fb55e4cff5c1d3aca51cc220c48a531722eef122970b61be3dea99d9dc7bd692a67ee94125a4d1b771f28fc7a667360595de42cdba362a876faf392a5e9799ff3c27b1a8b5a8b160a2d96a848295645328b12af2b124e9b2b96a3996cf2a3b102516e40c8c12982fa099fb61405d0489422e5397641dc4c885e14425157ae34eca142b75942db0add4fae965c9073e2f4a1f62c7bb6be3503add00e019d0ba3f91e82eecb4402161a4c4dd9803db3cceaa4a02879e556fd23f2615cec373e86de35c9478d49213d479be7e03d72123edc977d9e1f52290d7fe842cf8fcad946029360522dc6cad8cbcb275ad2d201e150f708fdca81b6de6debfed64aac4e69ec93f2bf1b5161713d366699fee2152cde4fccd809f882f87479eff1cb60107b12d3fabed45d87af128a203df006cea9db0e23bd6c3b1fd42a1eb0b2809ac1f21bbfe301e75fafeac2130eb774d490c0ddbeb80e5fadd00a0556cb88e8a0d5574dd43608d2ec3cace28d7c86ebc00e1a6cddf44b62d556028c9eaaf58206bd234fad7e341567d07dfa45e42cd34d890efef86314f45624463662c978eb510bee879836242d66edc65fd8e029b9f1a4171a7a7edba284ad4d794fc193630424019c40d859997de72ea9a2fb0e0e40f1eb25e0c20ffc0553a0ebc20dd5a784a804e423df34d8017f0f5e509f4a5ebfc4c3c7d7b7324f3cd9b9044618a017770a70f5bdd556678607f0f45e374f19c2cf6976abd8d33abf822e39687c83414fbdde577b352ed690047be2286dbccdfe642498f9a1833cf20f491185a41fa37354956fe8993e93a406f8de5bbcf3e9c7158dc53d9b92d478b3c2234a29a5bc86414ec5825bf62d3682001f448f850bb1661d81d441a28fb81201c51267e5fb0d1652fee4f7f601cc081a4b8f50009241d85c357a1e32cd34cc809d6af930fd5c465a626d17becfd8fbbfd998c8c72bfceeb2768b9bc42b7335d702d05817220843cd969725a0d5e1ff59400d347917570bc8bb8544b708f7d07dabdf0f190795b115020f9c5cc27b658f25394d6702c4d1f78af3a3bc04373edceee388b72c98f0c94b12f632f409d0c9efb95e417cdab3d75b532323abb5d38d428a4f61ff669572c86dcdd41911c3820619f178c41d33e0a3205d8e5df830f74d3fddb9fea3117a005c8da07027a0401ec7917d96e0d49bf8e7bd7c9982c9b37570be1fb8b2f777998ba038b7c0199c803ed8d063ea1861d315cd4eecca104a41d96b13ac3ab9d3ea67b00d4e5f71ffd10c1211998d61eab83707a5d642b71448b66f26479ecb17797d478ea27a5bd297abe7a1c63f539f1ed7f6e1d49100a9d0a424d82953bdcacd28a13d628539cd3a9ac41168946fe78d5505b366198f93903f46a9bfee04566c1687a9fd249e48305531d10f11196c7a4ace7b1960d63a0dc42f0b79e23162ccb35554d0bcebcc1f67ab711839e2967c35bba95cfb57358fff588de5c4b748758b84be9bd2b4c16e4ebb6212734dede98257deaf4da4eebd2d5d91920a289fed0ba0579cfa9bd09376cc348c51dddb68dd2d8b8ecc21fe1bfa98c6fd26e7d199c032b08298e372357c6868f459f4f7609297208a1b50cc02c3b48e95bf87860225b649bb322e1eaacc1a6fd8f035ca774f3f4e1fafd3d128351b68ea188a15ccb8a583c55afe4e89f24cc9b8c912bd035f8054cdfe1db5e2bb47d668d662094ff57b0f2f77b68a596b99f702290e579b6004e5038a80e2d8c2c467907d91e90278c14c681cf94a8fa46c8843a4ab12b5ed377f5ed9bfd060e80b9d0f82ac3d9a9ef2bbedbf390793494eedfbd05b86c95382743e702d171197a7d7246a236f6ef499ee5ed2f85a0aa6bba8a910a21c7c3f906430c25b1f615e03b67db87a06f5f611440a0cb9ba5c692d48ca0a115c150dcbdfc454bc61e6a7b9ab89d2128cd630136d9da0ef911efd3e3edd011bce4a5aaf4767bbd38708013436c76baf79762efacb78442c86c8cf48fb50ba43db7282a52ba94c42e75c070dd8b4d983455c4f41de287ad2f3c07be82ed38a0c1c2422680cf7aa6d0b39059111e09040890f0d83263c997570bc7f9619d3f4e6f8e5b6426bd13ab47b45997872b94469bce50639241344a6760346dd7cb08f670a2dcaeeb8d491dbb0084f3e6bdd5a6149a4b5de584af0d88c4b6e18a817ae0eb862bca77460242531d7732d7d9b46c9b79498dd5352127e2beb51f22c67f5309c3b28073f0286438959c1f018919df5af5b2bc085a74e19cd699ed48a3fe99f2e0d89a8794a2c992f05a810dd4ec487695efb226fe8f83df94ca14a41ee0f8cd6504de5a3958b988b4181fa2c315ef1ae16637d8265a55d281b15cdd420bb9c2dba01695e7327e426b40c2695c7d1c6c628013c6dcbd9e9e24b48c9b146823fbc91308dfa6185fe99c393209a90a17949fa50d9727a0a86a053c6e889edf809db7c57de17ff2a3a5d06b372bb2a527bb213eeff310ebb95fadb2c84ae75916d32d1e3c4379a8939d8e3e99777e3796096eb17f849d861aa5a37c6389f7bc2fc3b4860fac9d2277fa5e1a1f9415a6aaa5106886efd85913636f0407eed7f21195d365bcc4f24997e3c867932b7fdcacb88fc9cbdfc94debc19ab07b208ee1047213230c3480033a81558dbbe3c4bfe369713e18fa7748ece8abea89c824735282fb28c7a44f39a9fc8cf45f65ed3999e1402e33e8ea335c002a19f78ea28e41ec13dcb5bb68d42d7bf6044959023114478301e5522af78430a0a48e190f1c1bd9e3a89d22d2ba0c2619264065098e9ec4c31ef6e0407aaca194f5161273042670f4f2498195d58e267fc00b340c3a7d8087ef2e3933a61c7b8e735720d62eabdacd237f7fba0bfda3b03c736c121cf9a257db55060b621be5168619ec4182f13ef6a408c447469fc4330040b6241c5c53bb4a32eed095f207b596231ebbe842c5f8dcacf9476dbeb28f763ab94922ecba3ca48e9a8b29ea0af20b3e5d4d48e4965a3232c6bf68a0954f04281e8916f300615231b144054916564e3251fe8a20dba41064d2b91f8d94f814d48cece0b74cb3bae3dc0111575268c5c7a3d6963eb95fdd08c63c7acfd7140d04ac7b6981c7b9456cc3cc355ee7b0d9c4fbdd54865a1200e7495161ad872a5781263d979898fb5b930dac59a4fdb6f2f3001cad40e645e3c904ffbc6eccc35a13a13b5346e901652163aa6572ba03791a5b9a87b38480ed769e4e735bcd667d81c57b86d1df54c9df6ccc4110491ed402b45fcc285d4c86b5c0466ebcb39b2b953b071682a47bf192d11cd6c6d08f6d73b17462e79930164f12f095d9a5ebc915abe7eda160fe430539a20adc78dfab35fde033385fb5050d3b53d1f9ccdcc0cabc21f1763a6629ff4d65c6996895f50f3eab2563d761bcb5e477086550f8787c17bf0c485b390a47b56df347c939b5ca1dde22af2bbfa10fb465236658c759f364c82561eb024ea618c2772cc253522e4180116680541de554240b420cd0ccf64a45230711465ce41e6d3c907c6c34035399d9ce01aa99fd6bbca641959b374f713df083f58f9ec9707528bd1e0bc311fa32642fd3487b20a236dead1bb003c482b8731dc0647b1cb6e225fad1b96720df5199d321b62c16a1999accc598991e25bf941c9a4e5ba797bc1a8ebdfd88f7a9016001117d15a70fedc2e8bcda5f2401583bcaaad4a630bc0ceec2095f8e5f0147a100cb249d9b953b3d4728febfa0bf8e506d197ec580cdda8bdede67e1208f2d441978332bb9da8af531308c20580666bb4e0ed41e5f712cd82a639ee902faba3294403229ca87e2d1f0fc0dea167fea64b5b25f1a95500cbdedc18b0ecdebf651b94aaafe96434bb9cbb50984a0d22134e92da621e9138122711fb7b94809ea8acfbf2312e5b7ce9509830658bea6131134a6319c246293effca6a8503cfd9dc620c623cd7f8a724df38d8ecd3aa3c9e4dc4589f10ee44b0cd77de83d716e17ebf28834972c6540cad1fc284bdb724a962a34358a6f42b0624aceffe6af0561e28e2dddd8b3f03ef2ebf75d3a68bb9e0d6698bdcd0f24cbd79cbe73b5be6a82943cdca7f8ddd276ae88a7b303aa25ce33d89caa24b630a2541777ce10654482e844bd185f72b4f0e7f134b40c6959e1efc86583f62b1140c2012197616d3b6ac5edf9ba753a3db3836fc5e8be6cffdf287d1ed0ab376daa07a3e3570f9ff8411580b815a3fc16c76c4882d6817dbed1c840ed1aaba2edea0d45e69582c1230fbf4521af4f82e63488c49406be623ebeb659fae75d343806ba2f52d9229b64ddab845d12e3925602c12d2300dbe428aeda106ec22bb4f709f8a84eac57f761b2c18593c6c5f50e3afdc9564d42cb24a91cac71307cecd1f8aef90294899bc596e98fec515f73b5e426e2567459dfd9b864772abbb9a26fddc46b971b205036910bec903d17d3f30623be4bfd8ae8f0e29ab7c2ea489f78bf214435c984de5cac0fe2a61257df72aadca55c713cad1030a6b5614592ab95a7afcc03251d0de1eeddba5756865dd7d739e1b156d6f7e2a870b92d55ff8d6e9c554d2ab754a56a605dbcca930b16cd9622b97337c28e0e55e10b51a1f80faaa6fb0dd2078f6da208782f285050d2faee7f74ca99673a3b3cdff2f3b2e3f7f1cd8955219e372e2ef0145d9816bc5806e7385bdd062dc3116753b83c0e290eed1ae86d4203b5b0b9201a8c436cb7729a8935b6d5057cf03add26a3533f331c4494fe9d5bbe6fbbe99e730550daa9e65edd5fcdd91fbc8a5ba63efc60cd68e99e44b42d9558cf1766740510e8e8fa7df9ea9ce712da55591fcb850a8d3e2f3ca430f36417583c8bd9aabaf4331f13ff14b8d54da8c1b0252b53e217001cf2dffd62a18c0a461ee1ea4679fb58065a345650f348c25933b62a463c69e1ee189852e2a7eb95abdcdf4052296b802638e468b9dc1e882c47d4c2ac7d49593d09304bb6eec9e10de04e84d5b48dd20516d6f1fb7a1723c155469b8e8cff90902c6f8fe85d7015f791f55dd801a9772d5ad39a1fb37dbba0c3d55ef351d3ad6feb1cc780db275aee579e7462f80796266ea30b2c71967752fa49b3e4b40dd862ad019a845235d87c9a0f707b81ee5876b80eeb2a9bac805e636a41689df43bf2dbe4b1fea9e3b628c211fb2b84a8e5a7a2dce2221905fe4c65ffb187f4d1fba6db8eb3f5c8791d7a376cba7be97b644192d49a1bd3e918a567d2aa49a1ec430716c74972973f34fb62e8577298b0fdcaf2bfb81db0a2f6efd3a9d5b78c8d399cf4561b7cfd7c2432a94d7a197a8edacc2965e7309b77c1b5104ddad89efc05edde05d01be57a14a87562ca76755f20ce9f8ecd5d79afa17c868660b5bd80d0823a9a1157347f2de32ff0f0947269fa59bc0212ab3393bdce9d1b0f54d263c2e471de8539d3d4966d3dbf93785af68ef4e8885f23b16b3e32bdd691bfc6eb029aec99d5c8aac178ce09975c2c134c04278bea5ccbdb7f4b314e7d8bfe7f61b92c1293a80da18dfb8cf940f3b787b3857a0deeb0ad99160d52b8d9a817e70d0e234a93a70ea18246317781ff219c753976d65d03d1d479ac1d63b28d14e5362a05fe637ad590e68245ea2429723cd947a24efeff3d72f14f1ab8d0e5fc6025345d95c9c86a5802d64ebaef18b34e26d786de9b4afb5dc41ed21dfa56d8422355b0778e39d3df1e6bd64eab74ecbaa513abecfa8c137b3a42ccfbfa88af7276b5880b7a761a0f8269641020e723689e2198e2e46e8bb69de390bb962589d8667b6cbb542747ce75f78167151762405829d52621976df53328a7c397d26f5c3dd0e5efe6f46006403db3bb53acb0291d54eb2279b1c120463a987dc43967e641db7a0df6836f9e2c648575a34f160e33c9613cb4618d1e1c41eb4fe7027c5ebcc5b37e4d7f7b7e7f947cfbcba89ad4e3b1bfde9951dbd9fd6429a3c6d5b3acf4b518aab38e8d8e81f422b6935e476475348e6ff229b23833cbd9e02b5816b832d432f9ef58acb67cadfe0ec51a22a63179555785901b23059f836edc36ac6abd4988d4cb86e0deb6e6986c278335825fa99cfd1b2f1c82ba08afb5a1157dabdf3da2a10dc031ee78c87936834287e146ebeccb7baec03d9b2de61d449e9261ded809c97eada8ce0a7b28d69ffe20a92f68cb286fb40c3df037af0e8b78f276034144b5e6f64c66b4262db2436009c46248c47cbde90a68014d93f0404ba5d096a1dbcc0d43269ebef21134390f491827b25c302ef7c1a71598192b29c1b459df1f5775ba3b3c5f6f065bc248b4e88fc6ce1daa8a8339e37540c9270f8026f725e43f1ab786988f118b93c637f7ef1086c58e5399387b026a6c2b4cb9300394b2181b22cacd4218eaa842a7cf7f6582b1bf379322bb8eee3a44c803f17a5417cce174f5bcb840e04386efcdd8f552cf8de3a1d3efb77a8d2df127b27d062068bc6ad0fb54ee9cd1634c22a01a00bede635a5379c6d248c98d9bd0c3267b6f6fcad9ba9c5c185ed2942363885c49b2977a4cd5ef70b4ff88a0694c9cb48149143d57b7409add8cca1c333bed687835e21ce0b09bb506a7b4b08422a7efc2b73f5f0b514fd8e630a344a33137043450a78f3e6be75c7049340314da4a9fe3c0d8761e0f31dcda5144549ccecef9250ace1c8f8e3a2f99ebf0e140fdef8b8f6dc7cbb7794e6e62f8959445981a0ef46b3f0bfba2fbf42a98d0943012fd7c6cc5f4a6ff180e58262c7e4bc719840d497be3a4a92e9474ca55bc630da1dc3a22d0474e1e73da61cdf5e7c349d972bccb43a02fc2ba6c77222c9c95ff32f38d5a96a90d3b131850005bb842f45f4de523ca5ff36dceebc5da2458732d4eac3dbc2000297e7e32ee6667d911ef337e4ef9180939d3f379259945d845c07c6e11ef7536eb103e8e03a820327863dd6bc0f43684491bb07e6007980553df45a2d29c9d319b19db96576d8facbe78e57e02bc2bba6b6e8e623ecd24c5e4b330ae486aa1db81c0dbb0b15eba2d2d55d41edefaff91e7f4148d8793f2014164c5fb3b02881ae52ec846da22ab9e0b2332b21a56bbf304d4ca68030008a2b3198cf1730b5ad80e8b29bf9b626ae8a10985a47f7766c70b3738597abd708e80fa0ef8b72e1ffc45fe8783bac6fdf13730575bd50608f54444e7c9b37232aff030d279d113e06ed2af69fafff56ea315c02f3fe4aaaa64f7245e2177c654eb4de360da8761a516fdc7578c3498c5e582e096b8730c52fe6cfe25c78e61e02cdd3a4185a2c074dc0e6ed9a11f56089ec8b8132e4cd30baaebfbc525c0ecdd59ea5efce0eada57a84ccb78a18ad841b82d712e0935a8da50bb43c5a1d50f545aba771955265455620007bbf43bc6771afa336fb1f733c9d925fdada594714c1795ac214b20d976f272492b02fac7b3ac76255f8f5a1bdf2b71520698c6bbcd77c5259b2a9e0fc340eaba4e339183fc56eb7085092509242fe76956e23394e065910b0f59699e4334b082aff0c6a35a009f3b698822a4a1cdce6b28eba3a58bc640860542492fffb70bc8d39f63cfd592dbaf947517955dee707f011ade96d8831bbd064c056afdaf45b444aa2eae76f4e7f48d36cd83607813ce6bd9ab0ecf846ad999df67f64706a4708977f0e9440f0b31dc350c17b355007fed90d4b577b175014763357ce5a271212a70702747c98f8f0ad89bf95d6b7fbb10a51f34d8f2835e974038a3dd6df3f2affb7811880bba359e8944d066a4d7aa5a815533fa30dd1811df3814394d7409a182ce4f0ebed64b20afcd44d7e65273558c3e59e651cc563da6fd76012c3a8e886c3b88e2c829fb19b1ffffb71b363f892ea14fa33f9640a4fe4e723bf18eaaea2187640a13fc6b10f9a2a60e2acc357dd047bd39e083ffcd50f4b0f184b88451097a8d908596c38dee7ee4e5fb5c7eb9d8f949b11eddbb4002b8d72acd0046448cdca87b08412c18f85a5e43762e41c5b07d9e12e0ea9b867e608fefb3ae154c127460d48343ce3a7f00bf308389a72abe9b62640df4c8262ab4824721091cf0030b5aa2dde5d07aeb36adb40ab7d86f6c1d3eaf8f416aa8707e563afc5a80b8c76941ed006f5a61a5c5d0d8f3fefb1c21c9d9fc4d19a895b784b3d02de96c2cc656bbbed32996761375d2a326a738b94469dc522fc6aa74668f42129cfe06d5689a701c3e5aaa419e0d581e8bf9b8cf3fc3eeba1d8f99cde767aa0731e1763a16fc0a0f294cbe4aae570d4f0b3ea3e579a0b83bffbb9d29a1d494b7d5d9e5e336462e9f7c45fb1aac1996408cbc21845ac7e1ddbd93dd0efc9ea82b6e307b59323e86d51f8e8838fe1c9ef9f7bd58334a0212a8405f8207608c8d6ae52c5f2370adbab8fb6f8e2c0e28cb803587737ab117f3a56e67b3993568ec7c2316bac95a5a7250f62f357f4305c5df2d6298e1f7cf2bdb30f2994ee3f86c6a0f36b3d4560f +Output = c8f4adc66e0757b59eb2bb9fd6024bf7 + +Len = 67592 +Msg = 4894ab2377710e4b4c4dae0f4da1eedc8658dd0e2ee2ffac8784515206f2876eb41f98afd4547cbbc68034212bcf0c8e4a7d1d43b3ed15c621f53bd8a57cada80148ec4652119b5af3da84169d81dc69d394c8767d662044d36272b77ca04abff7b6b0cf3bd1f3919a04a5d8ebdfe7d6e844e78fd576a68d6373ffd5d384e51b5e12ec32d5bb0ac685a59f4d5d12b43b533580750345310999cfe91cf2500624fe03a65769f86a627a667b5f3b42cb01da109e124ffa48203f1f3873202d35429f32e8263eaf9bce42ef40f5cc96b591467d464d00bd743a1b0af4c1a743fbdd0846b9879e092371a5e7f6f65937f9515e23820e60b83bbff73926f0cdb9df5d02e82262cf2e8cb26af6a64c2a4d1fabecab593db51028179953d6e7dbb76a2a55c0299f1a455efb5bc557de87ffb006b6bcd4c348f0c0aac9010a8e186722acc975d926c7761fb33efc1194b87533ca86fff986617e8de151ebcccdceef914b25b037df1eeb5941dc43dc5604d8305e221cd26f48e21622f8b8238c43773f7033184db267c9930ffd40c10cb5502f2c52ba67664445e3d6851118b3c128b381b9562288e93b5684689ec79e1104b99be081be549ecf7d66c19db12a8e2975e88011be47ed672908e703f7f4611d5513921be11f9fa76b387405f8d9f2a30d0b50f22ad9bb759403401857f7ecc28cfc322dd8b18cf635b665f0f5a937be0454f1a16d249b8e1fdd3c84f28dfc1ce5bf8662a9f0b0e364475e07af80a3a1e02a2ac58f12d5da53ffa3efcd9fd753e8c2575f5ec652977f5225f22e4880752cf4c406998ab080b7cf3d03f216c68e1d6e6ccfff1ab9390e4184587ae714616d1c880e927375a8d4b6d26568d811f50d2b8f5892d32ef2997b40e19c47a88e2d093b8282b76d7c301d29c037cf00b13f6286a221dbf9eaa96824369b4e8324f323a80d713ddd21556a0bba68e1dbea3b791a56b3196248c570f7ff7fe6ef4a48d2965568ed10c2cb0740fb01f8e9c78ada131c5175b13576fb80e350f63228b37ecc026eaf4d85185a902c0dfb7371b3eb399b02d72dd84371888b176595e7bc8f13bd8c6bdb92c6cdc3f591d2c1103e16547cce271f5ab43ad79fdc1d60afeb6d332ec90903125dc6a0fd97651bcbb4c22b66bd4dcfe251be35c6a505dba7c980f4fc2d710d2d63aff0ed269cc9ca9c568702d8328599a3666aa87c054ef8dd311ecfc08c410a62ef7b6c475f12367e3c30f826bc89a631983dee680500c9afe678518b40e6d2e1ee092301964037e2dbeeefafd4223283bd784072ed3a43c808cb28957646ac691462ba5c2999f4519b89907c639a65223ee145a0a5448eaf00dffce617a7c181c94dd86000669653e4c882944f3766958141a6fc1666d1ec357c7687095239b17594251603ee446e1e746d0082425e64f05f0b8e26e835080e6a3d7f368f3b8180fd4b851b7b272cb155fbc6e2027418f2051a5dbe11e18af570fad684a6ef7a5251efb52e5367140633d2f059c1d138eef97e71c72afdfa51585595ddde7e235357bcaf25bf2bae83d69a85cec59c4c4e04ddd2277bb3e189e8f5c328801004ecd9577ae9079b839106fc8e2858fedd79eee089c84c29c607e983684dd4cca6839d6b1e6173e01a998a9f1251c01f72d77f2e9c90e587313222a68d3322db90826d9ea4744b22fb012b2d1930452693d07f7016698df6aa725d0738c4b2654a4f0f98130cd688af32b14bacad313cc8ccb54dfc3a8e9eba2f604e74e7cb915d544b0273105d3bbd95e4a3d1b0ca889a33ea6e58eb2ea6e8d1f4224684b78750f7eb84cd672863ad918bdd92215a33906de67a3163b636bdc0e12bb884bc70aba2b5c528fb7f26088d70a1f7e8276433e2711a908c6e78c065ef12d1cd2374f7bc736e8cb3aaaf55f3599507ee7a4409fb53f67c4d9d927926e67f994834babbadeb260177f0241c2a0f64ca199afb9c1e53b5fd8e8cac706c8d1919dd366b7fdce696902f9baee69a5ab44852d1b074b43bff1b3784ef2ea0ad89587573aeccb32b6640c3f17439ab012e8a82658b1726d17edf31cb823a280e765ef631ac2899843d1a1c3b9fa0c5ce79978f9fb50fdaded75062a98e1c6e7889344ab98c1ef6b7c32420c056a050873d7763c756e43a29b577b3683b5dd8b36ae157537733338da168b8cac2c3b4f52433e425951cad7cbe5a0c4fb084d086c06d074695f1b6ce7feecd9f0a9059e0d4d2fc009b419a9d9a0356a51619bdbb34e140dc0ddfe84204bc4588588fa810f55c92a290da6b55f27a77b394a407186d44ec5b088531b0d9dc0acdd149074c30da8d519b70876c6ec559c153ae1566149ef20cad6cfae2a65602b69f45df5d2d53d756e48a56aab5eee2167bbe516cd0f83a37251ba99e1230178bea0b990c93cf57f994b040d770fdfcfc335d22f44a59ac24971aa8adc5743093d9249b1f0a56f581d36badba46f88eb9a312f0c429c9301a2cf25dd7682a341795174f5e3cf19938c841051ce0e98096f46524a61650ae630c2a32e3a3580d5f466c1c93cea72b649cbcb0c5e5d7badb4ede245fb9f70e455e4a8d9b1d08a2b312ac69846b81934e7664167dfecb23d0d80659bab9c538094bdbd8c57f41db5b245ea0fab985b93e7fc0a00cd3cca5bdbb642b7ebfc314f6fa647a2a700ca09ea20a28bd60bd867bdf58b4390be227e91e81037272f78b56936ddb929970d9c6b53969950931e04fbdb4bccd4f15929d2ae347607b6b836f407e63c5a1756e198471cb4a5ce8b100415d1e91466ecc210714610e8127e58b27207a8a322347e0383db6a300eadfd795da444a99f4bebddc9cb7442d319af070da88aaf1834d62f822926a9e3f531cdeb394c3efb050b9d101b3cc279389e64435f5ee889c66e9edaac765ddf0f617477178c3f1a86b5c10cdbb6d165599b7cbb8291b9f767bbb3e5cbd5d6603af10f59b571147e6f5efbe8739eea27db4a92ceb8dfcdd1a752114c0dc19e083654e13b998769872d8ba06b894187415c10690568758eb8f3a63975f8d63f475021ac753a5ba8c52fa050ee734b33424a7141e8280f670ddb4c9eec036014ae36dbc39f2e5a5cc904518fe9c81878ab3501cfff6e19f150dc99b426c41bc89d48e7c931dc0fe00349f3aff60e35b1cc9a3655a3a101b82266320bae9145c59514da1fa5d9e8fd044f2b539b9c2f8956e883958d777325e3069a17fc119a9646192759839e71ee2ca25cfd33286279baae7de21547cac5234c366b87bb66b4f0c453e95390374e1cd20d1f55097aed686a89ddc398950053859b78ea05569c55a4e4519e55b597356cb03c99d5d55f009b4beb10f05e7204713dc29b75d6c6c5495d24bc65595406c0eac74a041e68e3cf189c95c58394a66d91cb048363cec01032d53635aeff117d11521e1a9275b2548464cabe90e2c9f93c14cdc47a1ee6a7e9d5a44d3302e5ffc87f6e9fee2fccea13c6281222e6df9291124fafa631a95ef6b88f226209e4d77481b3fa9dd1c3fe5b431686a61b67d8355612ab649178c3fe004f4bd87eae82aa0b96b10e1617ffaf6e4e7296eaf3189d42af4e41c8e575442f7d2fe2dba39fdd9f8f69db57395ca4aa187c81eff1f24d8a8e1eaa426fc18d9881553dab446d93aff67b723fb8c3cf890cead394f4f3aa7027831a9888572efe04423558319a40af746c5f1a1693747db46418746c7b48a614121f35bf949ca26e7d567cdba4892071c31e80c36a581a777eccf8d917bc9edc52249486187b38387d3d83b2fab1a586f62d0e5fb6dec1fe817dbcbb576accd8b9d75f7c413f21fab84707482b7e912cac071d3be77d068212871a9398c7b2a1cf83d0f2ad5cf21db50f621bb52495cb2b3927f89ab77adaa895acf27a77d2bfe9d6a399cb592b19f9f34e9e066805eb1a3fd9063f128140ca05ee486aefbf9bbf2c41c209b82f980d9f075fbdad7414ef878af55312ac5ced744915f883dbbdb611261c16fe81e0566f36c1396962d121acc846553c6e97895d67db91f8b9ae4511eaf84190c4bb7af0577318205498372c1b69d3f44a89241da509c5a2dbe602aaeaf738136a61c1aed3e5c866cbe2b661eee05ddec29a54519b411216a4ed6538b089590ae57be1075689c8a12b3925fadd3a416059538085b4f1e5c8c73cf367d63f22cbb8725fa639ef97640513ec6340e82d0d913d4f267c9cef3d954d23a4b68933ea75ed73e80877c323ec0b9017c46a7f4aecc006b07cb26cf9a1a67c7bfbe7fafb8035e4694cc2ca654278b7a4d241c6bcde844db01fd30d616ec16459f0ebe65379f4278671412bbcaae3a976e50e81b7e8e28aa1e06f3f197f3681cb4ff594a6c59093ec0083457e77f50c2a97113ee09e63540268f77096356e4b5c63a57459e5a3dff694f9c63f4bf5562c42fa6cbb519f206e13fc504c33e13769d66c03d16c96522289252c83999cfde8834a899cb4fe86217bfe4ccffd37bc8002c9d1c1dcf0a11c6795c6cfe3348a0bd25214293af9dbd8fb6dc475f3ca614b834f5c9f994b3330babc4398bb5470f2bad19ad55629b8012cdb65f2ba21cc08e25d02cf23fe8f0bed1921627485593997299c259906a1168ac79fbaa2c633647a8362d52f932b0a992ccea1c14f994d11ca869e65f90da59fa2d02250305dcae6430b45fe917db92977c9fb040bb7a99544f8a46fa9741ad5fda5ee44e8a1c8a02c5a9633821d94288a91c2cf423aebac2950dbf8707b02b8589f62f36785da229fef4a40dd813810c5c49d85aba96fc0d82da9a2f668e9c1142b24ee35906bf82e17d6b91c3ef16cb9c0efb97079b26dd1eda1f193e43c8ae0b7a887cb481a9b4792dffeb6ad6cb6e7153ded6922502dc72f3956e16377702ee36272a12352868cbeaaa445531669de300ca3de49d56b0850e465577d271b5f2ce7114fa8a0446e19db2c40d66b0fffbfd05f48469eb015f1478f7e87c7d701f2aaf63f4e804f5c22f609219df713dc032d724faf3897809eb747bf19d65db7e33283e88b7f21e7686fcd7010271fe3b888af5cfa2f7bc8a7d820a1a9def9d16cf26ce3f5f9468068cceba4e3977eb72e5658e8addff76eab0e9ccece4e45ef0e7ef3aa048b27c79271d6487eb4dac6f33af18b30e674e326ef3e8eeda0bc81264ccab34db1601d74133fd347fb9e83a58b1bad39cf8eb699ee687a9e72e81862c0549817e87a028c156acdd5f8447d93eb39d71ef7af697280bd0a37413315429e23b119acc01758fcf990bf2767356cbfce8156fb516c4f3aaec66e783818241abaa6c98aecbc593e6ed45a05611b8e9d6c4478471f4f9e90b027aaa46181a5ea7bd18def5a721b5e2d014d1eecc087f8759909675383ef1753b652324a023671f9d9fd6693c90dd0d69ffed04494d7458ce770d8a8999f332bfb1bce5bea6445b7189e7d1331af3ade18e5c61338fb2914c8551788f14d888b5e5dc501caadda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bfd8b123881e3ea4cf2bb2ba7c955b467ceb9fee6e98481d9f0a204a3914be7eb7919f109c4b79b3651bcbb4bc51b97cee55175c9f8fc48abd853966b2436102de00ace244fe5f0083b22e1309250c11839a42f39771beb8d64baeacec6f4eea1a6dfe20e701989212390062cadafd0e2101473abf06e1b0d3a5a8a550602d3e551fc052ec1acd72f8f86c266938337ab2d14eb97d15d2799ddb4fd744dda504765f1801bd12a6a61f3797e94d07575d1d5381f93a683c1b1a35cacc31b05e4665752eb4c1b0ca386d3eac32de0f10c04acf06815fc5c59f34fb420c809f010b0aa92bf360bee22fcc54d18a841807aa218c05d952f5150cd274de1d9773365c4d4237460202959423c32e78a7e9e3238ad4a78a7dc0d56adce9c789e0f3a440168a79360f468c6e59d1ed84af4b4d336ded131b47edadc139a224d8c1e9f4bf4dc71a4aef506ec558c733360406ede3b22072141746441ad3e71e90a41bcde1da42410b0be8e4a207ed2b170ee26a3a41b5ecfe5791437c9100dd3bf053d8afa54317ffc9d8960c4e8afaae36a76d4002f4a8606e9751f05b3488600d57bd309612c4b092e72b0b15e7cb83e21c9dfede25cfc2c420177d19cd488863ef236c96f66fa6cfdc4ca7444dc41f7b0aa37bbb8f88acc1f43d2bb311443a5ae5b26c8b394167e680a0e9c4020d096a3926c0837bfca7cdda6a021249a5fe5a0013375f21617d419bd0d87b4ecfc91671cfd31c31533a509b460b1cbc925ccb07eed5f8f7f77046f5837c527b32e8e67a46be70f9b4eeb2ff7a4dbab434dd15c3ea4f40022dc65f5562de31d05ded441b3289651b474a5bceaed0d577b208a0fcb0ac1d8c2909f384140501947960971e3b3ae5de36d6b3d0899d534e3566d479e8f479db13c0694b42f9a810adca46490adbd78ca61a23cdb4bb1e81e57d1a0439303b3814742b7094c3108c22b2bb654773226bc19f118cd7321c58e9d8d8634b674beb54aca0bbb16a1f4fffa05d399a0bb0c4afece6d6990b371b6afc775fc7a1913cfaf030f642f6bfa36d1c948fa9aa68de98890b73a24d55118f7360c055e6f4732ec843e7ee70d7ce94afc82d1f583203a3ffe62b9b00608381c4fa4e9c3f5fd71abd41585edf4f199be061dca21df679f8d5e1c62c2d3fb96777acd145b3b7b1e356930f3a4b0fccab38c764da029c89c093630bfcdbdafb6a14e010f74be549b41c9fd429bdfe2feb3e638d710e0d7b23c2d3c3b4121991b224fdd45b0ed1e7b396ce71d33b068a847a9b1f0c4a2f9748e99bb6fbdae4c2662f6be5190463d3084c88ace1d00e249d74d8e156bceb25589022ac7a3c23d8afbb910bd8358454dcc6364ffb81ff465fb5839cf46e2a6c7a3fd06dd93fbe19b452d90e40aa1ab4578d3e20c858bf38f2c402189168d2b5d77f0dc0bfec9dce9e7baab5fa6a0e39a0280ae8f15c37427d29bf1dd3b0cc4896d7416fd449a93e94bf6cc9ae7d492ce01f006e1d954fac286d20736250016de1d0d440c161c8b3bfa4881303ecb2d53efb8a7cf50cf0bd1d178fe1e750586cddf02ffc2e39e37346b46458a2be307be3420fd821c800be81af73310ab6b88cb4c2b86bc2dbe3c75277696333fbad67f67ff74b48d168f77fbd3429728c0b168ecbd854264eaef70b74fffb5dab10e2a037a99d123011b03cca3a92c8da38529295f780029a2e4b98338fe7c8d7413209f48f9629ece231e35dec33b3a62788e9a77eb8fdc8490b223c7ff01d87279f583d10fe320dc2c19affb4d6dcfac000ba89d3c2bfdee97ed01839de04c1ac73b69b949cd89c9baa8937f941eaddeb012ec46066f1e7f5edcb4e2379248fb7f44a958339c0a05432da8d243d865890d56ddf8c6e3be855a03a66a78826f8316c3db3469d9521d5a2b2899b92587197c29e62bea044ebf1df46e82cd5b1050021b67d4390fd2806423cb4c7080732e811ead560c6b5f7b1f2175d1a266ebc0d5cde7ce3daa0bbcf599d9510673ca36b0a78c1d9a635157d20d44dd84405274064dc378e4228e5183100b5df769ecb09f471ae91096d4c3db3a63ed0f71d4e8183d936ad923aabc9108b9a9afed6b2a819fc22f0b604a4d9f1b4ba69065e37b9fffd02a6908117ca3f66ceabc78b6031bf42a75e77a325392327480b3b72ecce216f22e305a2300306bad9789966de8d2f6ac44312f2d8459026711e5cfe75aa31581ecab848fe5cacaf416b3c0f33a2b19d02075098c4e682dabb0a32add83377df7fc573198abe7b6c90ea772d675a8c03e712f93ef1023f6ab03885241f533a2dcc3bfcbddb0fb91a4d5f1468839c0ac3fdccd58b688210ffd80e1d0e52f1c4698d941cddf939afe00131d96a8d4f7106cc9eab28304f3dc1baf5c11177f55bbc4b379b21ed22a5e733c88fd8905d0af3dbee45bc514f0ed7de563bd59846484e8c8e4130beb4e2566b8cfe5d91ad1db3b22569f0d46ccb6acc975103bcced346db00d6b374d5b05632e5ed9f9a27f26dd9ace06cc08dbba10d22cc43ec7443cdbdf52151186f550f0e3b2546b2b3d04ad9e972d71d9a27a5285d733c2f20e20abcd5ebb3b1691aa88af66ffbe23901723846e6daf47a579da5b210978dbaf6265f09fc8047ab474a2b7e916631a1cb0c812a061c4c1793b20d8869fb0e2bc8482ef71c61e31d241c7b3b532ea7d3774039fd98462d58230ce6464811bb59a099b20813fe8ba7f94701967ffb4cb84c38ea2665ff9f254ed2bb5673819b2dc64172a4a8fe4a310df245f5db77293694191b0f35f0ab665e2d111fb2f2b68f8167f734a50a25a3a946d0c131484536950e551fd0c0580399447209cf0d15681a33c71ed0c926e5156b29634716a8a1993c1fbefd18afe54840657c9079bf9ed9ce6cccf1e454df9988d841e58a5b5de6ce015486a0b6f2b24873e0bfdebc1b06606ea4d202b77a7dc566c5d54b6554c4ea834931ff77132185229d22e615c5e91053103acc589c084b5a56de02ce6c7db92e06c7defa31db1efd1b8237d186ca07a577f0e93e2e83423c5bc7579f8f586289f10fe44532293c89c3a679f845f06deb41bd02711936d2953e59f1dfa49c0d1d73d3ba6200530750fb585593eaa469aed569bffa436921eb665c79969392e470f5d9075981a1a6d92c5e72a95c2e23759dbcc7e096645ac93b9896cc44820c0cddea74309f5b42acbf817a4285d6c4c8007ec32bf96ea3b425d4f18a9eb3b07994cea9f140c802521a8912664ce4742f66765ae453d124368cda32d78b6ff63d834d4da44e310f52a73ee41e999f5a33376d35128ed307d6d87000bcf3fc06e2112f084fb0de9034cd68987154509f5bdc2bfcbd91bd711d715f0340bca309f0a53b84fc4e17ae81f3ced668663f6a30bb7856ed44d78c91c06ee46bcfac27eda93a66b2102491c08339450ab5b4e4393d1cebab8f6880bc2b674b45145f876384f5597ade4c6079e4718d5f2af735fecade64fe5aba75261b10dfd7730452d99e31035ba0d944347e3e576fad4f8407cb8769ef8d139255f9334928d5e2afd85fb90c5d3e11647ab9684b432706f9dda6dfa18510bcffd32b9631402042c7e72f541d88a03de9d2fdb610e27e62be07c5aeb5c8cbfde5281b023d283e6cc28e76c9dee5afa4fac5b2f14f549cacf80d8ebc4cc0a71d6cda2f3e18e715a8c7559ce1f67b5190c0da40e1afa2672bd2786bd10f768a66bb73d11468858f3efec509640e526f4762990f4ed9d3c92972cec3b4a6f15e1efb7b684ad60b93759065251acd73f212098a870074efa9ec009afe2eb839098e53785ca909800897a5bd59cadce5c039dd3611be29ffeebda5618307ed5775feecf414f9aaecd8ea64560b3ee2b0c30405241352a00982e488adbc07ef5288b5ed76fa026058eab7f6b7a53c88dde1bbaadcf78280184ca9d30510f563322cfd7f87758bd4cb264583688d8d767304a5f3e7231771313454abf2e79bf400481ccaaeed5ead4d74de32f22df9537a130b09cc01d91d5e222c3afbaabf48c3c35bf573ca4194e6bcc82bdceb47c7fbf6351313f78f29a6fe7aa8a8bf2a07838702295e75fd319fe64c97ae31417cfc956b3a456f034012b0861d818fa4da487b598df8545a2b7fdab29ef166ad1788d8f5a6e9d0fb08a82198c00f82f5691b87a84ac8d01f2b8e8142672cf15443a4a71a7e878240297237f8b9d901e45b03933687565216d8d5c1441be73cfea65aea24eba7ed9a4c78dbee3167723a5809874c6d2b4005db5b83ffe1abae72e8b1895914d279d019c1f6c150423ebf0a344b3224ce03b5db29b0bce2feaf7ab2b26c02228f8eac37556eba3df1ce3b168cc830d3c704ee81452ec3456ba7dcac637b663c6794f44f3c2d2121fc89762719e48ea29faa7775b9e75c3377fe617dce9fcf8be1f371087e193e23ecd637e3e48893badd5c1a5e8dc1cfd4ac1dd1cdfbbe83368513eb0b241c586c481f48f2f49d884309849de4c7a6634f916af446f0c1cb66db5c2aff361db82398cb6ffd5109b564ac89c9b0717d61cdae4e928eb791ef436c37f58dba03a771654275ac04b662464dd3666a922e11758c32724d581437f4bf0a155dbab86b7e35eb22a6148ad71174ca3cba33a0bb70b27c5d2cd934eba25c3e53163d234c7193303d94896f5beca9d612465bbda7e5a8961bd244d85274cc3c75604c2c94720478901d6c4c38ff755fb2b9126c1dfdf7e674e9a0e8b593966b43e5eebb89ab122ce1eac408b4735fcde2b9609564e026d63016f64b5c264232874a2bb8754144b2f9a2998d1870f0886bee4e20c5b5bdcc16034deb8f5659fb073a0b0b9e5f2273a0eef3c2ac1daef81502e3f688a44532ef58adaf964b622d8c5b979d4d2b35d79d76db8fb7a32385a79a28fdf5d7456f83bc1f7fb82ce52fde55d654c9cd0447bae158dc832ad798eb61231e537345eb9ad8a9433f216a6bc5d1d1195c6e1829bdd8739156d95197a7fcde42eca3cd0efc5456e371547a4809778ed54c36f7e66f02339779d819eca416614f068d664070d72b4897ea9c2e71ee176ee24c2be79808a0d43450b7fdaa55b22fea5997e9c0093258f80e5985c7df74ce66d93c930091c231ce69b3348161dbc8e030e971b29472fcdee638b6d1f1abdb2004b0516e46a296914a96f8f0e3e4042f3ae3400f1df31d8f9ac12758cdc67f57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acca055d6e6a880d3b919ad062fc6b9e8b201fc85ef5429cfda727539f26cfc81c62860cdb810b3fa01079731f5a1a3bb88930916126876484f763a73aa11a9aabbfec1030e2a0ded269cc8c4c1a946a35e67907afd644f602697eb2a2c96f33cb30ac09f7060555430c28ae81c466a493b65d9d838ae7abf66bbcf850165a2e0b734a4ca661955d6286023c58de0d65427752b594cb0bf0e17cc2fadb0e47e3dcd64b7ab79bed31c155edc829cdf536d2b7fd025c0d0e8f541b153c9c17d4efc00823f6b30b598ceffa3fd48d1aba93c4d6b0e631c78bb1bed528302bd97dcc45576853114676c93ee19ce3eb5aca06897212e3be90f0229239707802b99ee3ed628d126ac3c1613eba7978dcf4bff9a118977d6adfd83c6e968266a93ed4d118a816b71809d60f7fd359f5ca7ee9079c28c335cf3a9079b49ad2ae87dfac1e679679a3c18f010e72dac2fd4c6ff19aeb210a8f5407d55504a4e592472281265acc3a7acfd9eef8a82f28f1db3e463e0e9fe20c71ee0378cf433fc43f9df07352a7edaebb610c58904f0075ef60736b8703fe1fd143a73f750455a709b8769fffb7e7b21cbad5a8bbb8edfbf18ce5ade4eb933bdabf4d23a656abdd1df88006a28add275c4dc7539b0b55e69a0a396f98b56602f69741cfd3c8b6b8e4d4b941fb8f227102a07e03bea4bcd8416edb3b130fdaf7dd92319e7db91add06d36edc5b334c11a859561387139743703137ab0439667cc806990a14c62cbbfc8b2d205225de9ba5beec1d94e689babee7fb09bcf08d147e8af4bd397e80d82e5280d870c54e718367ac7c588bf8a085f98201dd93d3513985b1024c209bb424cfe64f27901035d9da03da427258875dec691dc6b1cdb5b18d7a83cd7af1c26869ea0ef714c85b119cbe9203484df1af471ca808c8d0a45f189dbc4ddc179571a6e8925fd1db43b316095dfb5c3d520280194 +Output = be112105220e3d5ba2f2501a3b4ca1d2 + +Len = 68944 +Msg = 5f18968ff8afe0bb92c8267dcecb383520ad4b1382ce4b216a227384f9901aff7597d0b8f937a93f6b0fd9ccafc381c81aa0c98f2a832f7574f61f07dd9dc3930dd11cea218a5264a0824825b197749f8b71ee582c66c6ed4e9a9b58976b696e100ca3abd86f82321a699c103c11b8c15969e1f5f240b994e05610ff8dc2b59964918c8686b0e1b2bf0cfc15b8f7f6366ececbeee2d8af6f1372a68429694f1bf3a80000931318eb78b291bd8d12d507b0e8d3cc66f85188cd358470d22adefca39827a36861cfe52ea4838f232afe3b09012216e56647e6f7e9d34befcb0a445eab28f66b61ada9c72bf914e30718da605fdf54c7eb38917ad4ba9bea157dfc0b272c8105dd5b3e2d8d1bd23370cced9c4b330f734fcd923c3e62ea2ad0dc2c92555acd9e9b81ac461212537c2ec27aa70d46cd535aadf02771f2bf17c4d2dadb7ddb619f65c6fcfc04061f270aa18c68ed3f19ced480b322b493a319b80510cde7d6c56e01d23535a91ebc9ac91228c73346784c84f0e4144e6d1d98761dd552da748275374e5fdb4b83b43f36bc58ac2685743533a389e788a7b5fcc4c33251a0dd1f1bd1e283d5305d8f7d184823ff0f2194f2a941ad82aa6af3ad6b9f2db37f3824c79535a80ba0d3d3bb365d92a8364560e9ae7355cdfcdd60143358d15ec0ad1ae34df0d665e50d0a6359a4ab90e31761830ae18bb0c5298397e396233baa6688d6bfba15cb4634bbdc49c4789d5ebf1e28843256134f75e49f45032d328788f608b43c6e250a706f8ece6601b8ee662041e60ebfdee0ea0c951f45f62c9d3eece1f31ee85b7ae8ade1b0324dcadd34ed34f61fccf9c1b082df3a04860f36aef3c946078c55dec5fd3db6cf64b971500f6b7d0a874c3aeecee75ee9e6c598009228739f61fc7e2ee70aaae64e6ff3e30e4c427af8c092cc7913529b1d340b5d5266438f6f36a14cf4b0521e13d2aa1470410f15263b13730acde0c33346d9edbaeb7e7fbeec9047ab977620bccce00cbfb1aa8319a6030b097cce0931e148d7521fec16570794469527e0945144dbf28204dc6dd9eaabbbff87e5141eefa244a26b54fd416df37138c95720d821e5ef42a16d7b6fed53ac7358ed8d02572d5b333580dc8408f5f11ee3a26f5b4d442b86f22554e2994306ed56ae1be50132458ce6365a29bee4eecfdf8a27e1af40cdd65ecca13ad5c2f0f5e9f067d0d5f82935e73f1f3679068fd223d7f1732f23feba4d29097f88199214797a19cabbc930b79f63d4b620a5fdae19517418b533e5bb270535ba9c9115d16e15d8dc9beb8199756921ae9b0760ee27bf59d829baab605528ccf3f870a1b531894c0d5da74663d31bad28d274df17b7eb47bb73fe77323d5a773084fe5d47289e1e65e945a49e203f212bad36a2b3309be7ca7c4872b84863de7b2885720fbc1bf6ec270dc5d1c39e24c01494d249fa98e10c2adfc37ade0aa8dbcc4b089555ca7bab0047d18426005feeefd597627daadc8a660d940068187e59589945625c7156a95a3aef3fb02d79bd264218852098804a19180ad34c5607fbb4b754fd37d92fee1f2f488bc9ec1b35a1237e3a4e2c765629494f7af489eccbc9ed5bee50caac83356e04efd906ed5f48c0f00a6c2c66b680e88b7dc67cd4d17d8383be0e0c786f863f4af4484496420460977be361f770043de5652cf66814b9c0f3f4d86639baf8ea42207f6cbfe6bb4c9b171b93d28e9f8f86b88dbe509c66eed41818a1986d75b616fee4460f5456cd23667c8a9f1738289601519d33716a534db235853c8fe4edeb13e09c2f93be2957ef6f0d0514b64e3cc5df5bb99caf37874b97dace282cd5ece9dc34c6abd9a8603a5ae6ac8c034aa08ea1c08b241be4a96aa668f54137b63e073ed77da5919466cfa6db3d870664ebe3fe93511198a1dc98caf75ae0ecda0cf56f4dfc88cd339037bcb5600ea7e3454d5e9eb26b0db5485c6b4ea41033887c3cd85eea5c75cf07f9023bbc27ce11d55329a7573b6169143ef1367cd6f407b663e0d2f02a70aef39de237fadd6334c47dc877e8897e0569c6c4778a3c17a0e3f2ee70b5f9a8187babc36fc1354e953953a1d60c5b4bd16e7d4cd97549859b2b716c01e2d10457c7ac0dadba39777c5d5e1d8c6bbbb0144ceaf124e6052440b569c14d1eba6cb2002827b78df0c7305825a460aeb095182a961c1f8479ddd6aa62551c12bdc8704ea57b55e16224fb51309f1b7d42e22331073393f8ac99a731e2903665e100dad8ad70515e987723700874857f7a7f7e88c7a048e9a63ef97373da63c02ffd38c7c76e72ad99a9f1df348d665d5f5571595ec9060070b515989c9b6acbada5d2427cdd7f766da0adc33c5086bffa4a43c9521895e511e743c7e63b142d65e1ef72522641601d469f47a927ad4b51473e022df3bc3f91bbcb28d722298f5f9ad87fd3af8014b0820f900279a2ac6f35a82c76c444b6f918f4e4f9b87198a2b6d69087e1033a2e3b44c9cfae2e8859faca6eb6f2f6f350e80723d466b3f1361f2fcdf5249479a05b8718992e19881980ecf174e5989e9e124c0cee92b94123bb2b5fa5e1f9790dc920a5e6602b53b5ad56dd3805f25fec7e0bc8d1a649317174146e1f7efbe37d6d579941ae2b92386b4f598bbacedc41148c7e05082c6929303021ec65625ff82f731c2f7fe3eca7a1208df36cf2c0a5bc165710222a9053d9c9a193fcf69487f7be553a3c190a0c3712a2fa8327b1205ef37b7c5a0a4ef55625169cad7f2b31ad7e6de94b96936e146bc028673557bbe26911d11a964d198f8ca790dfc4cbff39fc8cc4152230d622730e0480e45c7d30c14295c99432c66c487cf5f98e1df78380d8540284894b4874b51637fc656f30433552cecda805d5a0be5665a5c92474527c207b8645d56eb4dde6f2441d97cb36138f930955ddb2db95388ad1768bf2b99eb1e6ee0c7c7c7cacfd1a8529ffe7e403d57f0fe156eb422825d0dacc36e6ff678dac8588495b144de2188734af6d932eabfaa9f578681da0a49f87752c396afe3e36135f43f1c4e61d5212e4ad468cbb996c9d394c12b4243e5fa11675d1438b4ceb60397327d4a03732eee1035817d3273db454d9cf4edd7978f05a1a98d1383d3233bfdfe68ba2b71fe2d4b98d7b9eded6b6ef278834f3e0533ce622755e2b9b755698911433152581b865d5cc0243459d6bb13f26af8df8564d65954f308ced1b8f6d919a12200abf363b61fcf2ebe5fb9b43288f05d34beaeb7d7b109084bc8ca7e6e56170ecec4325ff640794bd44590d4ceaad7eee6078ddd6dd9fc63b8f2f66aa975097a056744c58e7d430e2ec1d8a758e666406bf66ec19c2e41ad8ee6e9362af4ece65cdba75eff14b0e8165b1da661ba4fd42f11de0ee33c7d48361b0f8b533455c63db7d666b8a5475c3357bc5c6994e93cb7d0681fc37303b66715e5b4c2d1c8ac10725e876bad7afd0e6e5133d114c6cc9eb8896ecd60798a6a5de85cea4bba0a8d91ac3b58abc02cf00558b758a86d063c40ae9651834336e86993ee4a10ae63fdac5bfd201ebb7e80935f6130ce309c18ef64010069f54e49bf74d362bf0a3af918ca475284d15458bec1cc29f4e5e0cd4b36495a73143306c617c6b4a58211f87d8394505c8660b0de2c5284cac166c1ba91d9b04d0477b813d912c0627a6b8421247eba345f065187fb9ed1ae67a08ed4032ca2365aaed63f4552068467ba14ca0960e07adfd79332bbfba12e4d209d1e06dcc0ed9b2ad99ef90f0779de8032decee573be6d36fe64ea1373a8e669650f19446cd12a8e4ab950a433c1434066b5c176e46daba70b950250b9ccc7dd8f1db70e366fad4b9224d8ac2bd94a9d1905ad8fa306ffca4359914de408760f73c06c948e3787d558481da1504038d8d244dfba4018fe032e191355a2ca5581ab9db67204b73ecdf5c98c0e3194b2961ad9d4613c221ad4245a152256a10ab69f1c01111a7d56a802ffa05d40252c576b5b182ef7b0dacfeea2f31e702aea10d6b1e91c3fe853d60870e7191c902a9f4c3f377e2323b258c57a59b49fa69842eaf5eade0586bada6eb3ecbc276411c0260caec92f1935f14146958f25c289af346e62e0dbe6f047be4f2dd0f0ff967c8129eaaa7bffca4bfaae5308c30d32d85b720dbf436798806f9906d1e9e11d36f64d87acaa5613ab4a07febbc7c51830c8a727e3dcb718370b281449a2a71a61fdbde22a3a9a76a1c7ea1502c4a8ce4af4846dd90823f3be0972d2a29bc0128ff01196ad9d6b77c1fcdb22984a16b9a967803c29365cbf97f31fce6735ba9a3385df11c153179b8e4141a3c6b8ad6eceaa211f3f17bfd0474075742210f515df177cffefec4d56694db40528a0bb521d34ed83850ccbea6e8a1a404dbe0e19f53d819da3d96b4cd56ab8e32892ff0827805c05b5961f42503884cf548d741b18607397679affc36530a6ba60ffb7057024e3122b34189caec43b8dd11fb59dbb18c959a5b1897e9b3833f74c4791be898b29357067463ddcc5a4f84de551165fdf097108ad86b2e9d9b736552b0da7c63b84ec0fc036ca6ca5678b156eb529691baa59faff7624d39dc6d415ea8965c8be8ca263bf58a6c0fbe9d2e21c702b89672290e727e638db0cd96d0936a35d137ca6f506b52a779c31a25c1e8f10b1133a18a267a7455382af656d996fda1218fe7a6083523aa130cf37833536f53ea91ce30af70e12294cee016261269c094bcc6d514416f7b8315cffe4b094bc48ad7818371fbcdb1eac5123c7dadb77c74e6ef663d363e021104391fd3b38d453b2e42eb33c441ea81371432a70feebb0734ebbf4bbc98270402b64391f83bbd43be9ad0bf7344b5a34b6f5e6ce1166797cf414a067d86d2a636d0d24f815f16ebae109adbafdffa9629aa2a93cb38676adf796d361e0feb3dc90e34d3f500377b272db1502019a1a3fa4dfde6745aa3c88b1c92a24a3c5a12e2f8d1e5fd27083b50777de56ffa9212e6e13e2b858703fbfbb12013a714076daa17114f41db717252786764448ab62b14ed572ba5c46f4a58c07f51dd9fda9549f25dd868245a6a54b8d59346d2f336adf9afae7d1bcffccad1162495e5bcd4e6121b471b0aab697fbe303c1ed9327ad88dae7cb5930b5a786d4f5477ef9370a9fdb56501964cb8fa12e12574a75c40be32bc5cf4340bac8b1b91a82ac449b2bb3d91fac3cf259fee3c4e17ef4557d0866f4117e207b83a2a6445e9576cc4e2445a19ce08be1f6583c4e1d937ba0d7259cda5752813f84b7ecfd1dfa5f0ee486bdab3a879692054e0330135f50e646e5fd3503e6e61b428afe49e52bd57ad2c5947c951bdda11b22e1115f1d14a460bbf09ab3a5bf7d51ae42b140a46a9ebd53628c2927d19dbc894e487d672759a92a2f71c3198df4167452d9bcee9ee8f8c29060631612c64de3b36beac8197484b2f260ceacd21e257fb719c684e2f81995a68fdf6101d963c4b8e223ba5b9377e8f1de42ea1c39e342e7f7d9e1c74a944f2d60fab33f45829eb751b4a87e15173e9640ac5bccf5f4405e0a839fbc3efd519d8a41671b791ef437211a3ce1a7d726684e877c74c0cd1a91b830195263b93f6f7240173702bd47c0d6c0c2369a3c22e04e40c6a438d2142b878bd8fa475c7b2baf732e1260d21bece944e2ed8acac686c684b4cbbca7cf740ee37944585b974aa857162e21f1d303ef231966e7e783d45dbfd16bcaa2cf03a4d354a1253b1654d36889eab4912fbe4ec7c0433026ed415a5ea6f4f1878562efc805912c7f7ad2e733d3e8973464648ebf91f3020d556672eda007af9a751a465e06a4ecad273d2a25aea8485023af3586e906cc1f7eac0dd95714736020825ef1c25cc428cdfc32da549a5678eff6c99a4feefcb1ab9aa1ce269beb7d1a43802fe3196196b1b887ae704f30232bc3b186312c22887eaac538b90e6645c4c66064c37b435b84ca9f3e7c2763c369ae93b7274ecbe86a64fe8568fc725ea293663cfde2c80ba9daefe6f2c37fee1c0fd6c9bcb75775e1519440c0e69e3c46330824fcf08e0bb34200545ea3d317d56ff12a4bf6639595e94cf75b4d5843321dcc994b1503f0139876f32a391bb5086789456fac6eebdaa48f1582a12f27d8bc3a1652d0a84d5d569a4feff3986a376ef5c79219d7dd320bc137e182813eaca6c738beb40977f2f500c71a83f78bd4eecd1d5dff4cee3e9789bb02420d1c4065fa5cf92f9604771c30f5343aa7be837f75b31d9d2c9352c04f3b4f90113516625a1f7ca3ec675c04b156b7b83766a59996257ba3f561012e981523dd3c0db1345cdcb3d16b450476f8682f5d1508cdb594e0d28435dbec3aeaf54999ec2a83547931591890f212bb7ca605c9cf396e5c0881ccbe7c68566dbe480b46b0000f3b45a9b6e9fc03097ab49cd56ed46d0a155764c4d3279ae23f887a03741622d751389267d61afc5b1d46b918bcb318135a08164532d5e80238e027ac929d076e4ec8a7e65d6c428a1b99973a53e9cf3c929112e88de5e458e24bcd7132a322268c8c46bcf06e8a090e2393d494e6f6c86798f70914f5f438c431d7ebc4c707a282d9fb563fa0177a6d8b5b521049235931761f319884ac443728d396d9773c64da68323c8b9f8f30a2273a4d567ee96198bf17fc68f080ede3974cece14214efeb8d87fa74bb65de548ddd10d7f69d6405ea6dc406e806983203a0686ca635964ed068fa7b922fd5ed359067055ec3f2f17e7d1302d991f5bb047a93ec22230a6cc751c710a231a9e4a5109a6f060170f3e1e273ed23d778d70047f9d02441ceedd8eedac46a3fdcc352ca35859aba7075bb2a6116753b841e9d74f4c94b26361a9b7cc017689ef111d529c2e96b73740f70b1652f3c22ba1a129e3f27f554d29b7597f18a1bd3695882bbccfb16a0fe299913fa87f7418d222630138cc14246e8fddcf98cf261a7f011fcbe4b1ae7614caace9bc1250c7fff4eb72c682d62e57baa9842a08aee5f70d9690149f6ab6fe11c4db36b43e7f4e9d2bfe43a985b50dbf276675553cdd2736f8d408828615c9f641debd6d2689e7a7896c584a08ffb826be3c22bdb94c3503ad5f6762e9dc9d018bbaf946f02df39a6f86ac6c47547e78d5d0d8490b7849fc1df9da487d52a1bb0a37934685b39afc4412e8172afe8a3cd6e840001baa8caab06a093a29c1feab261c3376cb63035770d9b353994402fa284d01ead1292594cf799b43d56fdb5a483380dcab8557325ba3b6297c6d0f3b33c7c40f153f3d43e0f0396869a5614ed64223820d60bd166d3898a0bbc2d8855f1e3178d032fc3d4d958ab3ceabb8113a12c370da3d5e8a0e5f02c13e8b86631419ef2ce84b890c7c31372beac9072bda6b09adf8646216a6e29c93ed10405aba81a73347d20d37d78be7d8a647762220159d41511df0429d870d1eb1982ff4b91e0096d30faf47c46d43c3eb6c2f8073d72634ccb030975b17fe6a706c7ab879b8a35c764998c3ad9df2f39f8257cc3a7a4d8e50644b9c4859168014d54b2e6317378d17caef33f9e49d70abcf198fdfc7b958c78369dacc17fe678319c7dfdd0265329ed8dd20100aec43f89c9b50c983129a1853b1d750175d27a78018525043d551f2bc8a115ad786736d3005976079025a2b1d4c1d3a22dcc96654660f25a02ef5fdbe1d8e3f131408f1d580ed0c702fa2e8286234f4002353aadbd89fc2e21923a625bf1f27853d0b6ed134d8352f417937be1aa2e479d9d05a5f978991d13de5d53b974d7af6aa83cb6d48e2437fe1e800259cf17455a6455e26ca55f83443427246ce9fa02e0378f0f1e4939e28b7f52ba611a80b5b34bc9e789a8c61d4d243668f8b9e01f5eff3c5a53272aef26aaba089a1501054283c019f2fb5337a93ee975ef7d0051316fa31d05707dca5a30f47167370ed092dce71e2b058d6ec2d4deefb3abf154f21981fbc7eda8e08092b0895b090093fe979d68846feb2f3496853ad7bf39772b8d274afcd742de44506cc4d7f39ccc1044516da182e2f568f45afbde2f3f54482b219f26c5c2201fea8798709f19e56273a1a204f70b5dfa6eee8739847958d283ff6cd841ad427dd1af98b7543e7c5fa61caa2124cac54376be817c577e1155181f3873d37aa1e896332a1ecb40fd724c10ea78a4b7c7ee9c295f1900b3fa4a681f96abe3a0eadab8b0e1196ce7e544e62cf79def48d2565fdd949228c1901cf46eebc30ab679eeb9b74229a189d041f4df35e37cf471153249b66a382d6f573d8bcc6ba131cb7f09a4b1d211ad2ae4089649fbd651309593dc3913a73de483a4049d085f897c163907d4a525d861c581e0883973d57d6225238120fe999c2ce857f22b9e53f83eb85f1f1566822141015c954eee07c40546ae4314b6b6f2ad4af44037d5f7cc731828f5a54c30c5f10758e58e9d4eb0f988eae361682c84af7c782bdf9f0b653dd8e3fcd75f7aec5ff463ed9b1a30b0b95c57e6897b40ce8ddd42096561f55f096b2e991e18b6f0d8591c31d6dd443fcf4173c10f78ca3cd2ede06d7bc74c16604f575efbf07b6014b5d046d46f0fda95c8cd0765d8ff5c193ee1cc75278637dd05fcb2f37f4ed67f9b2e910647ea0db762d23e2f2476a8cb30a4ab041b2a1fda2f8d49973d97b0837985a50ee06945aea011b9cde3b6bf5383d78d8b0abe4ad21c97674983ec8acab183f730d1140ee5f10a1eb48f35ec5c78c8e88c8e99556f6d99a0ad1ab3c1a003980c2e8260e5f7d639e1958f8adc40b017408b1f61ac0c93029a144a93f1cdc040685a8cd6574ed01f86c38d1bebaa9a312a0925addb341d7098219bf3978e87fb704748eadf657f2992d0d06fb6f4c7a5098939b44f706d524f5797692f7cbb47c8675f24fae623f67a30220cbab9a8f1737de43b953c13260418c55b2612dab3e55d280b161b7ef4c183ca695353be94dc798daa3911af7a7b079e4017eb86be3b7b4c13cdafe0a2fd2e620c3d6d890dc8eece66a77b82be08869abe81612fc54f5433b58e0de99f71a2616bc56198daad500f175ce44d6f3128333cdf0e3667a56a6786e3affa38e382411e87da5e7a1e3fc822e5d6500c796f00319d5d4b13c240600e4b10a30db740a99af1225a6a8020922fceec4b2465cd7a3358d8ce681a58a59240da749c616fd3479df40d3a6784f57474708f457ab619c87e0b40d33235b0d94167df43765276caeaa9f75858ef5ac7831dacce2cdb5757996f42c39e4a0a49e93353b16aab0c8b63ce9942c8c23a6f574e244d008fdb67276f34d7b3182a4a94e76264b2ec0d0f95dc73883ba03cf27d8c76307a55ee8da495a77e15129971c0de9bcbf367d0de0d4e16a725fbaae7625323170eb029218d7d0b3538ebc0461993605580d1206d16bde31e1c573cb4b22cab7f324113c96e8fe08b92e6474dfba0409fffaa54335e86796b83254af0c9838fc7996b26ebb448c7efb7a486efe37fbd19d445f4d751423a0dfef85e123502308e88b0eb1efb2211d01ba917a26dac464183467abf7b7bb573e442fe9f60f34e42a494d8c9afc65eeb3366620bf6907ca5a12e6e52599d6c3be787a50efa013972518968824e802f8fa35f0e931ad6b0c4926038466811ded45d58d9d74ca6729c342112bf63f9d43bc01565ce56e9931cfb7e70f213937dcbca19158ef54d8a3ea0ee80076c8e1d8e3e0c10241743941d30eb90ec087ce980c25ad0ac707100c84c3408c0d4d73be551b5961ae86f2453c74a20aaa34872a1ba90a3a64abb46c78aa44592394fefdfcf94503956e6c43f42fca8a47080c99d375cf702e086fccae0b19ee2167289ebec4ae705cf25046e2875816ffca05ed1bd025348de5e6330e2eead36d8c99a885c2bb2e6ddb4653eec674363a44192fda04340fe90bc4a9805add9171cbfa23383d95c72ef0f57400324873603cf166fa572388aa43af36ecd81aaf94eef318bf7b63c309fb06b00015f954d97b359a62121b2838534fe33af1cab53dbb2b8e02c54ea865c22010d6b5b2620dc98cd3fa7c4375fb034eb752ea152bd6fc4b8de8627e00a90fec9a6b5b992365ed9e1aaadfc4f95c1d51bb1c0e229ac677fa1d5b9c1a523fa81258a54ed62147b114765a81c53cc16703f581a41a8a75f5e14743b94b278e5539526dd892e41cdb96f0f2ac6fc593ab096f67f324814b3da81286023806fee0098fac3ff5f24d34cb8f5aa6ea1c3baf0e31b8446909b019f6870dbf0a77f70f2c1748cc26d540845c5b7bb75dc91f3cb8415adf11a90c4f73acc038e802e1ac47f22bc74e155f93f05c3b29f054a919afa9370c43eac7a8c88b87b4fb30247d05293b7894381128309b8342cd4640109c713513275249ec9d2c4b7d6a88284b0bc2622621c8bd0dc41f3c4c19274be7279f3e3be66bfae39995f2d95e9356dd04c8861b1c4dcd0853f04c8dff7d3467f73d39cea8bd435465d06611ffd714fd9640919dae4da8e285179d4ea5d26258b5520d1294ce8a09a9e58d6c74decb7169346af5ff52b663049b15d633ad3d8208e7a450d32938c80cda5134e630e40226abf96b36e35f5275849e6fd2972dac9903e5cf8c53b65a36b999af7c53c57875ae26467c890b7883db1f5faa179aa010aeb8d9e8d56b87d08a4c275fd1d89bfd44d9d0f8ca229ed4a77fefe2b5ec2414f005b40f38be16825354e2b63284336775fa4fd3310c8a10f0a867a2f98b014dd2b4a9280419d1f31e9829aafc30075a49710c34433105e0be810f146ce0ff645bae005cbfe37eccf2004363b946e07fc9264f448afad6ec1af22e5d9551e50194d901d2f383e6b4d8747a08f02d867efc02602a8dcdc7db0be30ea8fc477dcb831ef4b32763d154d6dc14c22a4dc1feebeb860fd4139e559a3cf51b2a2b8d6b32662026e4ea0754f7205ab8ee0e59a79cca0a1be8352404cee52cdea663de88a997ce54b1804f5b40299413c4d81523198834755099218dafc7fb1af85938cbef9a4664168d7211bbdd0afa3413be176a0b4c4694a95d9b45c8a9f7a97362dc0b58d07f9b79391f6f250396c7271c2e953d9ab53dcc9fd499d1809c401b266208b8b4cdc9ad692d64eac90e047cf70ea40566ebd269b0e0b2cbc63245b84a06eba13975278fcde2a312a28b747a175f9e4af710dbea5968989cc4e041b1976fbefda8a03e882ce73386d7359d8a44ca8cf6964be0b66014542ec2cfbb70d54589b3497594014de31c2faf33091245f675f08bc46a358d8bed6708263b5ccc3252ab641db360f97f67f474ae407ce38d61201ea400cfaa766b31dd0e49dd43dc23cd41bf230ef8631bbc6ccdc82ee634596e97132bec7d7cd7738baf6e5b04eb030128846a7412364071e1b92b92169563c23d3872f4d04638155830313ed508fb2f609412f90fa1dffa1999f10e3a588a04593c5d4f697b96fe8dba1bef7fdb113f3216a304b64bfe3f5d96a00c1c25d31c3346746510c4f9187174b3d4ca0b4f19e632a3ffd0dda828f4d8c2f382a248f2137f409f8fc96a4a4e8781567d41bda5c4129c5125fee29d2886de2b357af06f410f4863ad31f07c6a1a0ddd622462cc13db15627d57b6863fc97d1cfd53d379041d141a31a594960f56e0d23f5d46741db8979aa08f2bcb82c8262ea1d6faf9a6d12d2de4cc5d818363819bdd93718628cfa961564f495439ac61c9ebaa6cd86d541a028e4f53230e6878a2046feceb7d48d31f663f1909ac9cb655a17731fca2ce6303f7d57e65fa8d4e4e7b98be89644c9d3c9906a2d322c1ae3a8ce7524f8c669197e607e72f8dfc8a060cb7ef4a24039020b74ded98e542d0e074a0d6b875452b25248d956a11dab4347d7488150794333388bb00423b48a5af214ac51ea393b9177a0e90fccc52543f97768fd153270eded3f9e5b76dfbb4105a8e286b5f77c4d4ad32e1cf0789f38f22660f6851e6aa8762aea4e1c2828569e8140686f119d3c488a28fca09aa188ce6eb0dc149f78e98fb8343a68406a02394836757a1a26e4fd206a2d41cdb4c9eabae93c4838242776720ccf0f9ae8ea7248353c6b73a1ddd520523d78644162d3857a85946b04f8e6e2c46a66ba3d65c60bed3bb7a0869d6d14819ba900ffea1568d5568dca83c43d750bab020 +Output = 0731e7c8d81d7e5ccaf5aae79d5d1b71 + +Len = 70296 +Msg = 78ddeeec8f43fe3b6a959ddc50d16455b6649d1a58ecf86988428073c6b8cebc929f7cc47e0ddde787ddeb82a5f68157a1d1cb332735face1c453cf231bdebdfb97904efb837dc763c9d0eecf07eb84eee59e7c1d5224f791b4540d9a5e9d5db95716fb3644961af30dfed6257ef70014404d90d893c5f322e4b747049c2f478cf92a359aacbd65b0caa702b02d310394cdb895f6c0993c3fd5ec0fe46d2b17e0fe18928b346a24277077f911ab102beaee5dfffa61351f32f860ccdc4a172b4fc68096aa7422d2c1afc02dac712ad58112ac4345ee202896dcb4023eab5a0e33f2e0c65ae45dfe19c94e14f307d79cf1db31e47bcfc0f4e5e364449e098a4d3803b7863eed92028a7d404387e7aceea7b87d780e9ebde0aabce0087cfd2e44c669837aa928558cbe0c654ddd8911472d3aed5270d37d984fb9c5c24dfe9ca16994c2f82c0d2ef90f171b785674bb330cc3102844f666786f7a6416a3767bdf8c25f4a35a0464d4082dd167a532f13e90f1744dfd802efd647f6959f00d424bc89da6e0a5c6bdaa33a135a02c3c69d684468857fd093db3d9294420c61b6692895c4854819c9ff80c21a6966df96b774122dacad5e9f928380862ef98397f3058f25763802e622a0c1fa2deed129cad4216da1b1aab07c70bad643ad8dfe2a1a1e0529223c4cadcce0bc8de1be073f511a304cd3dd4d01cce88c6772a8747631eb6d864ef28306cac7677089d1b67cb3a57e955b1fff895eb2ae848efc803f109d6475034a1197621d03c02c2fc0ebc269606490974c7cefbe46814ab0aaed80ddf3de8a6c80c65e8b99641303adf3450fdda1bb6ebf4247b75b46eeed7ae8495321a92b8158fd85b82f44867303fb063efe3424cbdd432e43f6bbc2da799933a6f6be2eb11fa39e4dd048cca74c6dcb9fca0513d730e86c0a1ec80ea02e66067f7a05db235f1f72f181582fc80fb05dda49fcd0ba3f97c8b5db55196621b88985b6677a009fdbc94d4c5cf5fed52c84968302a29b92b90cec354a2c55dbf88561b1ca526f683e6a08383c67702549077b81fdd3a2b2b7fe56358f8f95e38cc3ba7318ac9941b01fcb4de0cd47876fb0324ad7a9f926f7679ce20c8a4dc1de08390537d0a6b299ae3e94306faa83064563e6766dc576e30e6645aa65a5fe541f866e1106bd4362e008141594c2a2768fb65ec466312be2bd5b644f67c62158cf48b68c96067d717dd2d67586b76b2756d1b9a7de62cc5b3a2349e4d9d8b251df27e692c7aae72f4d43e03a8bb06782625fff091b83e1b84e67fc5203023aa718cd050ae3d10a0417043c4aecd51ced7a0638d166baf260c1cf837f2d6d40c142df1bdb30a26c59a5bcf28ff14f14d1686e6de7072f88bb5b02e8559f414c09250831eff7469794bd1408efe146d797f240a633460c2a31e4a933bba0a5e6e688ee4d2d7fe5131f28b4885406e1eba5e124e99c6b76612a236b6a987ac197c034397a7d12a56660ae4379a5a649da65fcc1400dbd97b40ee1f197d673bee600f292bdc7f6b11ac1166ae4ca0aa62c3d0dc0b26b8597ab45e6e2c15cd4c45c0c88a120f3742fb7a82ad0d0aa7a1f6797dac8479f0c9ece37fae7f112e5fa7f4dbe0daaead448c37fb01e452f3ddc15da2d82089197d3a64de5a82ee0ed89da2b5e7e63925e23c8ad71fb4c409d06bd6ecc96fc29715ebaed6ecc80ae3699f20f2e9e54d45ae94d9a3510ebc5e0c5e8bb7fab2c50e16892805ffcef640651515ff81284990fc1dbaec4042ca74f401d2910699eec2e19b76f7edf84eaa6d97e858285fbc7c6d4f951e58017cc32a0e420457a5ce6a198b021941e46285e5a01e7959dc247c7492feb622cb31dd10cc508e8836e27820e05fd68603e0775fc63eff802e0025a4905e401af088273ad4949bf2fda9619a23f6dc44e726d35e62b03755d5ddfc7fc04a48bb21ee462abf74b9323aa1aad7de5d76e8fec43e441e18dd25642c55589b393c7dcfe29e42d58762b0ae69d87c67fa52fccb472cb340df4d894969e4d199a1a7fd6af3b425bf233518a9406f0a6963ecfadd0e132e838a04fc06151f7d3429f79473900c45e50e8cb4bbe3d2e45b10a16d94a776084e9f9ff81acc69be0328c7ed8a562b15ef7ff62f66b2989ca5871ccf92a1e9f31a967af807ee58167f2475631fa48538271dede33a4b44b5d13dbb8b476bd3517ff522965df96f1910b3ac9f94099f0f344ef07a970c5ba286bb0a3b3383b6b5d732233d7d7c1328604cb9fd87f3fd1d9fb98a501d7452050e758559e7782892c8d3f967e6f4e8d6d65649f78c0213e5b1b437fe3e11ac300103c961c3c79d7abd6111a03ae254a6eb76c937e0a277ea12e575ef5972dec5e6cc22ed58e089d03d501860e9d2eb1b3814b41956639dbd4bc3c0ae20066e2928553e4727517225b1275a446425209614b687163db3f9b1c4b594b5024adefc5e358819bf98eafdc16d63a54a7779ca39e2ded90712107a06518e9e80ceb591f0c37cef723558cad688d11dfd486b09f00017cc530c7678991e0ab51bf0669c78a5a902ffa5501f89100f190cf688e7dfc4ce5aa211a03fe581a5a3345e867e6e52792ea867456e21799a10fa2037e661777f1e64b002228402cbe38a7779ba3a3089bd1d09bd29584bfeb035541c782dbe86822b7620e2fd37f9f06ec9d4c274e64728cdfb3be395fd99515ee09b3f8cf0812056b290d3a997bc5451c41c4996da2e0c2bca262f5315168ec774288f17b3fb638713b68711988f89e404b4922892cad1b6d5206f2818e2c31f7d68f9468f61e62d18267fddb0fffb85fa224ea2969a141fca9f258d7f8a98b77ac100a1d93102c91e551066776a33d81309d18d5c183d970916d4ebbf7a6a3feac537a2280553dbb4b70b34627acd2aedcfbd5169c1d8ed2f1c1fcb6f3ed2094be9f0d0023b53f569e0a2dff88e221ef8e88487262350529b0348b4f5444ab41ca3eea3ee6f7d76bc5689c1a030cd24b2e8a9a737b94e97db80f230f8274ec0eb8763b6430e5af01a8d2271ffff48dcba54af2a15002e0d7f09aeb7de6458a02709025fb68456f202f8ff697e460f976d91079834747923e401c0c21e67e2e26dbd3d28af8e0bfd042e9320a1919be54b32456a1c92aa9ba90dfae83ebe97f80df896a99477e451ac92603fe08e7856d1bcdb2833f74ca53c829f72c5e4c261b65f814b0bde7ac05ac8f90fd1891f6cafa54b5b20fed9f12d14312a3a570cafc566af958c2e29a9ad36c028eb1e1b872360186b5a35dd0fe917525702a1d142d98254118be38b8e02605803a3b9d746db91c4e14618c051ff106591c531aabb51572137919b1addf8ea133871e8ed1c469ed3458b342e57ed940d52e8a31399cb39897023b15219ff18a43ffc37c787e30bc6108004618223269c22e362863ea5ce1f73b8d2cbe293906d72a902f10a3f5d0fdacaf614714e2ca47a4bec8d3a8f79358ac75be29844c5e178fee6e423ca0722fcc2a5b1a5ad3ab8d198cd931de6cf7e5de5c920db814da2cb64602b64f18ea1ff1d8fc38feeb54bb1507232492a355c358ab7110ce77c13e27feb413e74780f6a2210b4a07140cfa1e976d55ce83f51da2c823dacd5f5d746b804a0109147cdc686d52f77e351c72bea4816c99f61e19451d7014bdb3f4f709328c2abf6725f8ca2497e86a36cc4a7c962510fce419dfc8102066a65bcfef897e44331028c47350aea3c4d3fe64abe0d622e9fd332f98b30bfa77913e368374cb38c7053fa17482743e34c2772cbc73ca40a0a7cca56c8f75c7f0854670db5080318ca4950424e9dc2fe03d886ca6bcdb46ddff97c682e2b64f788b5ac720a807f72af71035ab0c4f406f4f196b904471fe470f7cd90337365ab8aa62817a01c7524a06997b307336378afd1372a391f52e87de642516135cb058ea47e710e5280a94d71920dba7f7ddd8515cc9062dcd9f457435f3e4009218ff53ef410bdb92e6af75766ad52ffcfa0252ddb8e2a0631928dad98b9585405c55ee43d7926c6db044e59aa24693ab56af087e875f701e64d8173635502bcc4204c22bf0ce1e212efa306b0f565c6eb8887c287da4276547fe3336393d789f93b1d790d6e77c16297a5fd3fb2b11acea34b5c1e3da4ca28b4237c0de85f62116063658cf040bb5686b7ab9acf03accb25cbb320128683cf84b2abb6e502dba95abe66d244d5564b57687046bcb6038d9a897641fb7029b56c214112fc5a4d3d648efb51debe18cd643909e80e40a5727bf503e85afa2276d4efda96a0de3d2a3845a1a0106379694799c6e3364c091634aeea77b37d1480598ee6b664f7221c2072e831ac5e0e8b7c0b45ccc730a4e57f07a8948771566e547ee3f6db4da26fb7a73d7ae5163ec07c2df50923871f6c95afbcb3598f9e9d604060dc564a24b1885320006d248094c242532cedc7cf1823079558ac20239a0773dbdb78652f7dfcf72e56a6f18a64d918eeac986b4a84a19fd0f8f1cbabe0b479b378b4372911a013b6e21505a2dd3af2361c85f9f81e8bd8de18bcfa8e0df1d286389c28b838fc29583759e9605a626eb7d168fc7e526c534b3c8025408e3a0ed2af92c243407bb890cac8154968e9fee27fa3db43dcad9f76d8cde479ce079f17222a8c60c49941ef10f201d4853c23548bb92ecef9da0e0f7208b08069e4f3c254d5ff8731ff45d1ae6a47883bc36c7c6a2b5f96567c3f639cc301face5cbd729c27842d14f834c707934eeaf92a4ad8bf7ce6305f0e9411bd7f615f87d95c968c91c2c8ea2eaf6d90ff906349db3ed7d0207b039ffbbca868b0471502d541ac8aa733f12e0d1603ef21b487aa50c91860a866a685ee198602e83bb1ebeb0d333aca402c6d1df948868c13cea7256a08d597318f9d302b393099a7cc9f953fb9018d8fe103cbd999dba136beacb3a237935f7435627c6240564723ab9a3e29ac73636b959eb137767303a5ce37a602134e73a72e622d7f2a0873280568708b9bf4ee7bd0aa48836cd115e973e456fa2a5b6632d118bda254ab903d3086c6b5e62a812928930c4dfb6a7a6a561f510afb4ec9afd3f2c7ac6ed430dbd3719b394978ce0be4057707a0c383b0db652ea4e49d00968d8cb5ddc706d77c54b578960464179cb95e0340db60d4557a323a68a4ca9d5f844312b6fbb7f6a74acee95cc57100441f295b7a29c6eeb0c9232eb68a5c02935ec268d88b6c10d50c2a67edfb341a9a6be3ca240a6a255b3ea4562f23d5d2ba636712a2d497b89e3f647eca1401c9284619e9cf0bcf3acd41325b22ffac703d38bdcac695cf405b5ae98891be7e8e46243834eb9c6a718f7759a8427c548da44542db841d775aa4c5362fa5491efcac9ccb35fa3ac07c0a5786b80e38726d882f72df9bfa2469f324e6dea5424776a4064f578b6565bcd6584624d6a26aa2414dea414eaa5af0def0581ff248ac9ec4f731241fbaceb66c0014594c48c1ce7826f5ab4cac9f81c09e266e1cba92d797e61d3617997feb43d57ddfcfa9fc4485514167f68f468f30a4ce339516bea395696fd8138fddedf64eef22e1349e9701434a21dcb0f48bb7aabc2afbfb64a535e7a5b4841c8d10ebd2e4cd11770d5864736c437fb03e09bdf66c9ea1c7493ef1e75b45f9bde2069d180b28e0ffeceb37684457501b678bcc3e7c193708c0e371ff0cf6d4e291319274aed0d02da1d1f2a85ec7ee4125846ad957151c4e60351e851751b638ff14647f5c6f5f8ec0af1eaa183fbacfec86026d8a3cd1f6aba6502026e11e1fa0417baea02eff91cdc523f40d09362610f32b5181daf89007a9cf36982f6d05192b507906ca20e52dd69b0ca9def0d2576e5e2bda89e0a908d1d45f07973397ce448b64ecbb73e76535fc5a7b0b6b53145a1352f0c42ab0239117ffe1a2f236242f7508ee6d59270875b0640d191626dc48d37d71144733ec7a02afa2ed396edf3ea5cb786a51028c186fcfbca281dc13ad26f1b7f4c6b2c7ff1cd4e7d069a04414a623173cec28749072e416222ed15f19765641d0199b5a82df061cf71388f723fea6375f9b0736607247b6028db512f05a21bb40c07bf8b7b1c9becbb7777cff07db754cee1d561ae670f8de1ee5d3d44ada60c14bd337104d7649c8d60a2a086a294d7f45d9682237e67b1f62e21637b0e6fedc2c1faa0f0ac24a68ff9f92d28e262c8142c9c118ff1e9940ea386e8d34edc1fbe1dfa61662043d3684c64bdffc48aedd557d1561949fffdd256721673f45769afd91dfb8ebd29ebc161cc9a33d0720ee0e41c99ea0d10b5e94ece33838847953efb4ab8910a3fb6413e170aeb8e83f5dcde642129c58385fd9383882d931469128d69de978febfb91ed2f564f872569724a9337fffac233b32e785d979c25aed49661b6c7d596845876fac68842c1314a32902394323487b52694fae92be42b2b1f1c884a63a9173fdf62a1be47bd160b9d432d0ff8414bab83c1a64cc8b8aac02f819c48c18a7dee324e31181f83e05e94949d99d151453c4ee6aae8fc09f13ace7839e878a37e0c77a5bcbf517957ea1e6bba5947cc3e118eea4ee44e40ca4204e9a8520f5be141b4518bdb6509425843b0cd78e11bffd24bb7da6847c3fb80dabc32af0e197037f339e693e49a6b4f0b4b1e1d28a44d268d34969e6dfb4c9b57d91d27fe47f1933b45140f559398787f24f571a2d0f3b55d49caac4b50873c8429b1e1664c2d00955d5f78405e927ba6249a9cd907b728c2debdba662b720a67923806ce90ec2407690df62d6221ff893154c555b26327c5dbb8f148f2d7ae0bfdf8bdbe7bf5a79c5167b0a5070cac2e346d149c37bd596d280378780f7ccf75533a2fbf75123259fdb5cf2fb51d2b9f162bb238008e67c2aee6787ee82916af7a468358e6096d48563f7a54d41a24e4bdd7c7b1739df8cc53a919e3e7a82ac05c64e21236a3ff70424cda9bcccc3e0313b87a8dfab4b5940093822e72c0b5b0e0dc7474cda891d9aa26178c06fb2206ff18f456fc9946219eeddce7f3385c87edf5600613e0ca8c771358afe86f78f4683d5d93e115527b13ff4e96d1d9c94e6df9cf50711353908f5cc58ddbefe7d63870dccd10f081ab491101c4746ba40d472ee8db4d08d3eddc4987ad484517b356f9998bf3f27db8266b1df844b694ca63ddd42e1088f3ac4521c6979537b193aa20bd55f1e3ebaa9455c9bba981428fa94dbad1235b5bd4b12ea9d42c8e5d7f1c2d70b3728a768a7a162d940b96566301c8c34dec49b26d0ab659eb7311c27d9467d92edeb0c45fbff7720bd2bb774f53941729d51aa0803702fe64d48a8998fa18214d9e1d7d314d40c0a866b94d5987fadded4595cf13205abfc8b5bf59d536866f9918994a080b393ef42f57818c85423e22a483e431ad05c49e807adb3e30f9ec99b5ecd3ede1291576965fbbed35b4614f59ac8adfc64d366e9c81b7dad1bbc0d5ddddbfe7b75a6cb60197a2867f986ffcced8672753783dc1719c94b1ff1312d5f936b6ff75126c3dd9c9df5e4c358fb16acf23103ccf001d67951acca3480a226fbd623c049a3d9287bb1a7d82d4eaf7955867a2699aa80de633f232a6a3d243a93b68a64a3a063e7136faec0bbda755b73ddbe6c2215c16563dc4ebee6c8fc00d7773453039f0c7010127b2cd38ef54384426e330ab45c21f7c370065eb6c22053b29229ee122b79ee64ad7b28dea7a8136f0a299828a98a9b8f478f2678feff84d32447d78c495afab0b64a103bf52f8dae329e7ec55205db8a35b7c2a20b24e7637b3b34700ea9e19116081e3976106faa5820032cbe3a146ebb2ed7a48f06e7ee0782a96fc3dd2f805d33c759931135cdeb5ce9c1668de2874842ca02e33c22dd49ac8ade016b3108ec5b901ee4988c937c837715e377d27e7d921e4fc02b14bbc2177d3d5fda928553fe0cfbd31cb0957c525fbcad9e40becb9b48dd7e6a39f3f161e51037b1c0a014899272f7246e4e8b37f8083d57d9c2a2dcde5e96600f20680a56f9117747c3be9cc506c9360228f9b2d49b1b3afa24a3c54325a0a310cb867f375a75a1947ab2961939b1c808af684169e7afce1e4f3ef31bd525a9cb5fed3f2ab6fcb7433f8104038e49510e6c57624c609377d2bce4d4ccef8dfaab580cd89590ef2eb07cba65287708777fca47a3e0b84ecea3f835e8dac7420c3d3e55ca0c6af57e78dcbf47dc7677a1d9439964cb314a490e8b92adda1efa550d8d689203b7883d18ba101aa42f1f46a782fd43707e0e5d7ee18ba22f391f7b78dfa5bef0091fd0fcaf4d5c23e347fc66f2c3ce54f113a27184a1546eb819d62b7fadaf65d234d0b126d79ab045ba29940d8d53fd3ce28e82ff4432fd1e81fb7217d0e1d9a56fc2b2ab4f44fdc8ce64bb4dda72dda403982fcc14dc7eded0620922c004dfe5191d9dc704e940defd14493e0ba98ae8ef45d44563af486b9d904d1afb76cd23d947cee499064e1aeedeca58c176695e1e1e1d25e12a0e67320cba7ad3b635e418d7b29e9c1a69eeec2acb186c581d86189776d7fddb2534464dcdcce951bea86054055f5e9428ddad6ea8179cccfbf357385dc61a41216542ba138bbcc7bbe3484323a18101ff697b40fdb0b353a91862775e8ad6fa877ca0081831ce86a227290b99ff83f272150e18488e407a9987b2ead590b445cbdce68e48498f2d25d68b33d4e3d7e41552be6b050ad4a031a3d0f97f7222d16328aed3204d8f19ab83f74260d90d355dc504cfafa0e063260f35299899b31be1c2316d4cb84edaa7b1f5bdda599484cfce89bcc50ae441db2c6801dd91d583cc4c46b30a143eeeaee2ff1c8deffe40cfe1b598d18360cac57de208aad51ab78729375af4ebdfd425898bd507f6aaf7e2a1010a41b4d64c79962ba48cedf315a6eb8bbb9999b219a038148dd5284b28ac7f0477b219c5656be7bd7bf046ef3cbff5cc6b74b8563da351318d81df2f4191fe28779f2cbe9410f50fe5716a6f7b16ea71c0f2c22c9ea3776b7a7a95f7d11780f570655812570d40ab778ce3147f604c0472b041b5eb251d1adb4be71565c1b9f3f8a136613cc55d08a8af2b4eb8006d0cf719b17271aca4c806623d086e050b9c76df423ba3bd9cb00f54bdae939bffe3a4bb9bf2e0bec11ba24a22515875e857818c06023a6aa22a021a1484b077673122025bb7a6bfd45e25801180c378f2cd9f13fc454f60efef276bca919d47256de58a8b2132446138169095072da29d6736139f857114e877f5d63a35987fcd0275b0a4d021c0fa11ebf82764f5775aaccd175a434e1b2e4ce3c60de15085c09749013334e3da01741c23431ac96bbd16ea7bc6ff14d813e687c7903543fda284d618a0cff6d409e73dae72a907f4373e14dd601983c05bcd38677ba1f14be563a3539821e96385e3a6f620903fa54b6ab298b033098848799c121aa7d6f4fbac475e63bb19fd17e21e96e750def37c556a5a31dc24847c64194417c7638d67d72875adfc3705026adb0d316b74635c66a27e5f6553496a254699dd812579bc6cdd45d1759f10080682c599508e794e26d191a37f144b94359a7ff645ab4e6be5cc4b78b7d0a28b1d9c5c79a09ba9c40e9e20a879e60f7d0d8b52dcb5537ff8ca7c02fe236a30fe488e4e7ccc0a8970965ea7d8f657099725afdefb30bc92d5a362e8ec48da4fe3ffeef7fd43797cb646a993bf74d5ce75066e60fc58550ba4d92779cdb88f53deac25058597670817a7f570b665f0c299384d853a8cab5ec8f420421cc327e140e5c6d3a04831c01722c8cb784a268a7623c3b8504e2e10c48ce3ce5429028cbd355b0ed7d68829375f9a005fa1e59a9e617786b83d6bb619fbf86afe3acd9a9603480386b2d897fab6ffbbe70dbc576469cf5cecbad2a35bd9b4c49578d7af7de8144e477d81b0c3b1505aa8de29657ab541b75846f18cecaedf579473bf4fe74c566b948731f844e732790fa3ab2943dc5522a57256c75ed3ae9085bbf2d034b864d7f87057c2d0b12c7395feb0375237903b3ebd60e724e0c8fbe3a200f518a4f61fedb971c509b794f6e62fe6f4186f894d9ea8ae50d16ea51628d66812f5aa50afeed30e634253025f5ae7ae0428dc86f64f949db8e6d5d96befb996ae4e312b04664d8c223d2c0b396e9673dbe6173fa1cc21cd73c7aecc7982dc2b4b94c1dbb9fe9979863cab05f1bbccd6efe29819fc9ed0ac261661f4ab9cae946f6be4f93d12476503d3488934aceb55a4a0e78c532221c8243587e88e97b1408e3602ea0a4bc7cd3f938d1b6edc826ebea38e2d3200859002a7992e9efe84de2c75b444be05ab207df001230ca51290825ce46335b47c92460f1e2d695b89bbcecd619fa4ca51ed537b1d368aa12c59944f92d4cab8874d72ce7f6b5a194077e98fa3316b146ca2548769dc854b202878fe01e86d87363ffd58357efdc23971014ef1c08d7e4bee05b75f6b792dae8b84eaca149a9af9d85a4ef8ced0e0e555aa8dc5c37862801ecb8d6699d2a328015c9843efde7e52a52e1501d16fffc49459be9790a86b99a33a7c27be3e561d18648917e0a5abc134dd4d193d176967ab73740fdeb9e41949c7061b6ef8b10e3f412fae8d9cadd5f5dc49775883d84f099c20670419865f40e5adaa12ae4e6bf4570e805d0ffef166cfbcd4ba21a6db3d4856658733acfc473ae56c4fcb78c6c63aa835b58c09b4161bf999e87d6f9cc4ec8863feb4d270cb2b5fca8cecea9f23408f274dad789e6235923f49e39d142f1d38eac109814d2b3b4f5d406efe65aa2d15ed8bc0a60109c1194d8510a9d1da4eda7284ae53f205ef668d00ee3ebab944fee0d6822c8c4b32e14cf071304654e5ff93a01fa50fd9bc27e254c725fedf1c8cb9d44e76b0c50faca63291aaf23d972ab6a9da0ee72525f5e5a2a63eb29a3851c10ba20eeef5bbbdf1b1de8465f2c6be540869fc1856b1632f70e80366691ce0aec3097fc76bdba7b7f4c45701f2f95d14525bf7240ce2f1f85628fe9aca3ebbdbb10123ba75c3fc4181ef8d56dca379400e0c8a9ab63f24f8b8d59ab03c1235c04c15a538c2191e56dfccb1e50e59859f920810dcd13a6ea91f7a62574d3bf1050ab37ed2df4fa04074c84f3d1680146b94eb347aec495171f083efe06c10700263670b190bec04a6c77ecfbf63bba83c7d026ff565f05ffbe28e8dfc27343550ecacf46bf652cde26e6cbdfc9470b39ab10a2dccecd3fcaf5bf6e70aed2bb3690cf1a55c2d386e8bd00e94752723c90ee74ef861df48b9f4d359658d5c4b7cc35ad1a859fee1692b72c0dd998a594af1766d4a64bbe30a64df229403c327e3e84cc977f60a023029ed40140a3c95cbfae4d1be4611278097d5eeecfed0559b5069559ea0dd0f760f95f8b227bc4dde73c918ae766d7a9ed65e2afaeef239059416e276fac66d8d55135742829805c504899ea5862f70c7c8ee432844a766b51bfc0cab647490f892dbe83f9b4e324215acf02de5d59e9de7fce40fa06e531c608f40b66e563e4a31561823e24d77c83fa9a9c2260e5883bc006a1b82c572cdfa270b0278f9b9e4b9189379e8143ab9eb1627ecb728330badaf61d65c4b6a2c5179e81a34cd987ab2a9b6cc2d40efa99069071829c1b2b8354047ca9d4e9dc9fefe5487f2405e5e86700e7512522b19d828a3defe595bfbfb69a852e66d82296b0accb661f08012dd12071f47a6618d1abb9aab955d93596891f0199816bbcd2e45dd3fe46c823a0ee63d153ddc2765e0c858089f4d0d52f53fbb9952e8af17a125f28efa02e93694932d115551e156b2a578606cb60e6b39f9572c8741d0ab7c31a92e2352298b167f337e2ea623b218f9585d9e172b249f257f7da5b0c4fb07ef6d97f0e8d7ba0d210cc64a57731a8c2a946a93eef7f1ad6a80f74eb3f088ecb5bc46d3255855d11ef58408d433f274bf98e1febbd964ed2f0813e2d9e7d7832b11d55a964fb11acfaa321abafacc6b3ef28e3efc63f0c6f9816df2812f6973c60aade7ca028e32b9774ad05a3c2af80f1db9c52f0c17c33069600e481ba1270d034b1b2f353fc1730948ca608c7073d696ef21d2566c7a8a3c9486ad51212576982755344c383f82ccc6793c404f96fbeaa8f574c741556d77660c1f446bf77945ed3687ac1a154f3e2e6d5c1c1aaa0585718084d348dc40b67eff1c89e405bb78e73f87f957eb5ed9eb075e54645579f3d383810ee587aa5629e033761be883cdbfc0b3a8741a282ca6e7b1adaf01dfb2395f07cea9d000f3015fe2bd96088890d17a993df13a41a2cc7ed47c6d379d4d2d7377b6f85dfaf99fbea8b4c4fe108ec6bdb72e41b421d8e64d5545318f39213a716f5c6389eef64f8d03f03b21e1f3fa1a8bf +Output = 1d9df21af213fa2041470e95ef679942 + +Len = 71648 +Msg = 401d972bd7488b2e73c55c268acbb22b9f58e3505026133196dba0cb497fbd91e2345cbc852152e23fb0b5ca8cf9897f1c7e9ca3d618af061e31d677533422da9c427c7be527d4a2248c7c68e16dcec8f5ce15f992aaabfb832d5e71b52318aef7afc012fe405b97acc177a79210c931b3b215fb8ac54e3a4f35ff607733e9357ae3ed29d8552de85eb76f30a5c9c2dfdd916351c84fe1e809b380ec9f4edb96ad47ce677c4f93bec2d62baa257f00fdfbd2c8a25432ac303a0eaabe375b38fa18412a75f114d541618775be171cccb195df0c963454f73869ae457e46414688443ac8fa3f8e3b98c230131485876e23341ff7d6729f0a281efb19d4d5ea4e69b89b719f6fa30dec6e3bce5376a82e7d5ffa500a16f92c29e25ded66eb3d97c4fccaed0c883d9264eb0e6e23f36753e49fd8e1da264ca7633b3c8adf90226bc2993104e892431329c313bb2e03ac27827b2170ecac7fc1fdb400b9e5cc81108b16367edc969dd8627db07d19ae5ff07f7b3dc6ebaf7ac31fd2114020a842cf46fb43228f9a332938a24f7b8ffc68f7032795ab7d3825f5f31fd7e73a2b4ef01bd1bfb9aaa9ed4ed3b9577e36f6af8435088fe74a4e689e9e22bb78d85e8bbb331e120bd4c8b38e5a4a304eb6a31ddf3da59441fbf92b074b6323b9a547e278b66da3e0b6016d33f6de41b3b80c984f44860d8238415679206b787446f03b6ecc43dc00f75b0383cefcf475e437091d72346072a82fd13a45c1236f66617fe69b2a243340df5dc70b2cb05be12e5992ee36f7d9f4ca8492e3ed8a73aba194284ea9e34039936346d4f6de2e58f96ef4e114387fc41b57cb22781747bdb7647c0b4982f08981fe4a52e3e4b6f09e328b72578d2cbe28332c29e931b545aed62afa90670bd9b11419ac7a2bbb52278ca1ca865da78dfbfefc21c83f83eb8bd1794508fb59d0298efc0b431b05259b637c10290fb9d79ca284319eab7a56583fb31139a6a117f3553b97c71c5b1203a1656dc90d2a4511050c82f1dc622f1d071e89aad1ad5517501e778d9787c1662da409edbec27e6411db3c4c3a031de01102d2e3e243339b66edd41ef24fd9ccef810b1d8a482b9dac3b86342d24c9ab45a9176c432c598981efd500977c033ecf449be1d986f3c2c07288331d8fda858b5a7ece5a306ee8886da3bdecd6e6c2b534e3c213427fdd34c96bd0720af977cb5c2f9091161bc162af65dd5b242b63899a0847a04576f5f0885794945ece87edf8533a4fa8071bf9fd44e64b30792633be35f9e9578113dcf77305ec5300bfd9761254fbacdafe349f686224c079159be8905e543f483ee05ee8ade0b03827771e9367ffeb3e73fbdcf8d84d9dd237aa6041004ac7727ee404dd14d93f1dc6b037fffac22dd98036fe1dd1308f2d94466d716734b5a8dbd0327bc040c658a46a0b7d96ac395330cd4bfed4345d32355859481978d2915e8c30ea3b7b0e90c98ee036c225d95588a90cc469c1d18821c96aeda080e6d60e0046510df4df6e3e05ff520695d38792b08896183fb1d8607fe98984b2b91ef415bcd8bc11009a0ab5b0f8ea64f09055cb099d6a16c6c9fb641e434b78121216b1d9a9d23c3bbb35883b50f7faf819d9e3d500e6afd804f95f50447f39bb597ebde6e9d7dc5679c865e783b4c0b3c927de35e81570af306257c8b3a75c7a9c34222bc351581a7eca33fdb9aa1ce94946a6717d7dc212f63f36cfb94c4b18833ec6f05dca1a4f6f43dcc5195f7761403e21d1e6a80ecafe97e3ab7ef56d5db5a6937ddfc989bdf73b4787cc5d3ae45718399d4c1ebaa0ef7246a4292a2a10db74701972d70d2bbcbb5c8bfa2ccb3a36dbd51cd665305972d84704e374eafb9cae440e3e7b0e6366ca0318c952942b848fdc97ad07d6c02ed2ce11d35915e4a15ef9a26a3df42b9e7124786459fb7fe93c3856f88c169ccc67c31522631394928b761e1ea5284c0cb7a7f1f1c96afd0febd0a1e07a57b4f3a00e56f71a4dd3163ea3ca843c108e57a474cc9928486e9ba48cc08d5b00d14c83971d7b052968d57e68edc18915b8274074518300fd9a386d54fa26b67bbb7e1b47b1d5ac101d7853add000149f9426948dc7d8d8f1498c501099d4142f3a326d045c2e976bb8a7c55abc676617e8faa7a878bf398c433f54a8e3befc84161083b764ae4fa00209dd57f71e06e37d4b81aeaa61aa364ffa8104210df6e216bf6449127c5b19c347a28cc94e7c6d1bc22b85a6e5b3573765e00d9ae88ab104e818a0aec1433cc3081de27c1f511c8906ac17b474dc57c12778a998784159a632a8a680a49073c9f5543f57b80c5791c00c4a1b36ae9eb6e852c161e4a242c4461b41cf4ec9259fb6518da1423588f99854082552b094dd52743e3e5536d528cb795be5e776b90bf21cb2a3e455168a358b3818f16ba1000be80677f38378996acadb08961f99d651bb98a5c7f3690c40b9c23d3a652ee5bbb60354e51394decb17a981834d2cc87d3825ee1297e94760e68ddc5628a1550be41b1d546e92c09567ad98d787daa81b9a43c8eec9fe033e1b833d6c3c6418a27c3819671ad80771c3cf94ba560b40d6ead9798312100782608ba7a527ddf62a85419147a1d07b0632f7bf53412756532fce4af8f9871cd3bb8d64297376b748081ecd1b8be1e3fdbc0d5fcbd096b33d710c837607cb0ad93672ba1fa79622a60cb7150c5e7209fd69f9bd498bc11f3ab97a6c24c244993dd820f2af4ca401ec99f4b142a4edb3af42a321f6fb0e61f20e004d2bb45a90a7a9805303e90a1ac2b7bde8e4e4b9aaba4ef3d2faa7e6430f78866db26576b9beb27a2740062f35ce6ffa041ba73eb6c896d21a7c17b28b36fff415e25cfeda2bfaf7b4912c7b1cbbc8934b0e74e49e7e20263fa4d4d80211ac328de3215cbc9689dd441ce156962fcb7006e6d3132c86f6d98a9b65c2704886291ddc3cf627a568161d09b0286ad27f797cca4c33268820d1438952d69d8395bf0df53636e3039e8887811e59614eec97f7e368ac552ba4f8b296247e5069e2dda4589583b756331dccacb55143481ab0bd58aee681188c341fe8622153a2746c2b2ae4446c4730bb33b1fc79d86b12ad1752a74a72f7e06fd1aa94266cd75452ea96a8e3ca7d9c4c03b87b37e75cdb774df9d93eef6fa690110243f764b0887929c16bc799a17fb785ebbbf43ac67df4a774ce2bc228e87f2718f6fb02d41ac730d6b458a15ae2e401704319974f010e6dec0e7ab1cbad245b15359a10ec112646fb0cfeaa51ccbbbe6f9b0cc79f6eace6881f918500fe67f421883c549f767db558fa217b2d452406114c37925fccb65b718bda056ee2303c637849989650b3c3170629dd9755071f7ddd01bf37231314cedabbfbbe616779048c29a278a7b2b95db87e9837054c52dcd6d118ce7cad59c8929e2d9783f4f42b4d453aee8461df55998874b45cdbe756c01163cdde6b72873dea65a251bff50141032aa0eea87c2430b039b7629c2612222869db5235a63262076987d2b0c4aef2cc3935ed6fd9f5055caee720785739847ef2a1dff33ff28a5d01ed0eb0a859e8092e56899e3feea1f59ced9d55c1f26e7bc6c78d8d83ee3c54f77c0ea5eb2ba920d2aacb1ef4378be4cb70e21dad666987acf464ecbb4f005412ddd979d34bbf7beddabad540f94b900319f5b663bdfc0a6dd06df62e3c5ec519b87712a9e1b280478d5eac6d5c6a600c90e00a2b1eb06cd104af9426dedf0fd5b4f15ab4170899a76cc08bc2876fbead7cabff4db10c15a03832afe95c0a9a0e7a4e373e134b2dd61ee75b86a3e211b0855c7f10a0986da213ff2dc0df68ce8bb296938dfd02a39d4cdb0202d74cc0db54fd71be10dcdd9f3e1df8f38f7f141603d255eafeb665c29ea56a7e4c3435f79195bc9d2b61cb5e6194f6ca93dad2751509659d3eeeda0dbb4c79412922d7cbe42d4af619aea0a8236d118d14fe71719143abeee4326a484cd81995979e0e21f3cc0210024bc5452caf2f8339755ad21f880e25180a7d39f85231c0be3142bf697acc350dc1a0fd25623af52bc6f46066e1798904ff7baa68c1a90bc562db6eec3f90ab62979b98b68f192b1179a6e30f55d163cd98cd61442d69bed5ba41f6242436bb2a551ddd863db46d1416da22c1edfffb9e5ed926339f582115c0dd1fbb30a7ad8d848d953e74f3035c26f7e625b0eb999dd808c3dd1d607caefc15b1566cc9c9b2ab5588853cbe34103165f7e3a67d85f28ec2feebb26816c7f65273a0de8557c252dc7e049efd4a59bd8b1da2d79e06c60870a1056359388937fd2e3e90c49ee4018a3f63a1988b5e54d3200a4c346641cf7872d23a192a1c467caadb8a6ce74141c792494e7740487da4c7c40c28eb8a6a443afb3e9134a7ab39af1dd2667a0099fb415eab83b03ec166db781f63deca613ac02777a99e52ef9a05ac729b9f4b928e124bc3a22569a68225cd8ecc87283dc4ceffee4aaf479909733172f29e47b2e9ceb89bbde5f0b65e6a6c604a2dcd84492a2baa5ab0ab31edc354d852be1e84723d4c3dbd39fc796375fd9dc719e0c1319d52b3c2e9a93faebbbcaea548f88d9226b0b08869b576f90d274d2a948a79e3ef1c126ba2664cb42412fcd284fc57b1528cfc08bd423589f992795be4f336c9e833ce3c230ddf66c5fdc8c1ba5369388a872a237dcc3e7902e7294151427f4a503cef1cb3c4812e68261c5a32244b8d944940c3f07a1a33f0ce63c625a0ddceeee27ef59cb3b973d334ff853398861a387b49cf5f75501d8bee31d1a634d7bd8bca82ae24040f9ecfd07a2a07d7a14640c54a2f12e468a19af09a4b1e27f580ef9f032f94dc0b1524a29331f408247872ce4dcb51f0ea26e77ba71ad3a0bf7de2070a60346636419a5154824354971a983f598b64c15f1438385e270ec8be1d2caa9d294bc7178af986c5053ce2839378bf7757927e4fd256cfc95a16c679c89432c772232a375908e8eda326db704bdbf7ae17255040ca09e7f09b35c378e7e4448d2302b51c149020d4424b66e4aa888e06b3635ebc631828d9d3b1e744e0e28bf9243190502559d582cbf1ac6918492d871395d14a054d3c8ee8d359641d57ac125df8e45bf22bb0002761d486fde47c3a1f02d073186ec817c4e34260040a52e0b69ed9c3e5ce59553ce307c4c1222226c0f484bd0444777a4d29c9c1ffc5236c186d961264097789f4be6da9cccbc853dcb114b23297eec16dec170e754ec7bd69ab44cfd9a6b2a5363c2dbf86a715ca5c82a9da082fd8f40b7653cfce6ee7db93a10a83ab6bb4afe9a3708e587db29229af6bbcefd3db190f0da68d71ed2bcf7c9711b5422122b2f73c5d9da81746b3298081e0504d9f3a60fa38cec8933aa00ed480ed0690a7b3474f1d74df3b7a36463d14ce9163cd5ee885301d3a28bd562fa280b45f7fe9bcc124d79b66b2f622672d4b0f1cde0d8e8ef5b7ff2f735bfac9473990b5b790d44d02b49ba344617f74994f2a578506d13a94f4fe0f3dbd93c30cd20c70014504d333dcfa00b8645654c947a7ac22612fd4a810a1434e8a29053974adf823b0533bfd7643e4d8a6aef1055c0f827bc5b0457a3270316e6bc5771646fdb5e578c96da9aafbb76ad08f3295b6e8405adb5d735283f44265086d01eb71831011456e527ea2ace0378901ffc07cbd50854b3d47782bb4defa082c8bff1cc76f6dc14bd0c683ddc9077a0d40d0d71319c4bc58a93351396ef71407fd9b70523bc39267d0c77817d9a24abadd0bee7403e1d7b782cc1d095822d3083f0795abddd960ca3bcba6e178cfa211bfbaea6776a24361b88bb8ae0643ee36398bb25abb77d47df71838c30e582a18cc24f275dad1a85e35b84ab0de240c99d46fefe83f679587eef65445030389d9ed932f249734b0b7df9bfa954a8cd63af6fa75dcd0704cf006af23f0c099685c0b4dc8ff15940173a07cf1e7b142f32088756cbed559a1c1298acc4babe16ea70c9be68bbdb8439a5fa2572d7b0f0c537328fc17b8eb3b013ece77df2da544c4dac5b152f56a1f35045653f00fbbc9dc9d5b4b6de0eec3b82dc44e32afab91bb5b1350db26703c4b76e00db7d70ed1c2f056844bb52ae0eedeb476ce97bcfe9279cdecaeb99344e49f88ae0a3ad0cd0d5360cd369f663bac38e51a3b4ea033531a3aac54149bdc0866965e71a0c864c6adc34eb8066c7cf925a160ff3d1fd70628a3b954a150aec0b351447571bf3ff4e8c5315852024ade8d2e70a4cb0192b18a503a36c77a62136e02899d167d069febaf9b9febf14d6256d573b25f0d0e5e28895883ede0a00a80f15472f5ca60cf9ec9b6133a002e8d69de91af630cf014ea963bc27d4b0faccf66ce7b776ef58de95aaa3ea5f99567ae91f1253ec7e3dcb8be0a7bde83570144a91f4004306ee0b4ac9fa895a229f90d36bc9b58038dbd7a4bee3678502111c7016e4905d973d1e705bcd773c5934a6f14199a198b96bf18830e7cb37a15e541b8e31fe031ab676aae2955a5287b62ba7431a9e926a7ea7aaf93d4f7c8da849814a849ff00bfaa25ef0faa9594874ad89e2c50309b68478916a4c7ac0319f6b65ee24fc80e56a2010f965ca9d06209afda311756b380dd2b026adc3af3794481ddbcbaa5231958e458e5f54ba6b2a729706887c33698b449b90c9b0960a375e3db5c10fd06b0d3b81025fde2dc202d2da7fa27dfec57d5cc84b38c81123e91c39eeadc3880c21b63807dfad63b53a2a2c90f7f139c66479aab87380bd0f3a1086f8fa3bd59f739cff016768e8bf40e721cce18c5106c129d76af260d646aab9c9672eff659f934e2a717f87494aa7a84e960795f0e123fbb2d54def1944aba665bbd474a476d1486efa909ef1d1eedc077ed2a475f00d5de179de91d293bd34e06953421edfee2a20ef43067f0f76f0e109cb4e7cbdddced7db3cefbebe7003cde243de41152a51d4d1ff544d3de0856fa959ea519515dd0a7bd15f1a1f348182c92eaf97c1165e1f453e0ef8f7bc1807e0170eb13065e6fdde44769150ab4ca3807c3c9f6e42ad54bb77aceec75a174e408b3207fa1eab26750ebca0dd24a3b4aaa51bc4773fde19a744a4ab175b01b74d1eeab26cd06818c28897c52f31451aaa31b3b3665e5ed28b1d8cca822f75b7685a9f6d030bcc49695a9e7ac161af5a01ba9ac8c62ebe13e97adba97257d1d314b6d6844721363cbbed473e2e36310733a8478111416a5244e507d47254b4aee4cc0694c3c144674cc9188be01f7886c2733088d206e2222fd497e80cb67c8f5af2d61ae36c555d8e6698e0619de47d30b3ec3c831fb3e80cc212409bfdb818e9d39b8330730794135e3ed83d22033f00d2e1089edc6e285e45fd6aca8af5b013e6ed7a3575d98f5e0870dfdd5c6360a568a599afcd6f77a6d8bfe2f2ee94095b95324c6d0529b3d10dd563cc9d8376a0dda05c1073363a78e2e035bfa9317933770086418196b61ed6e3107575c1d595ba77cc7b6e6105470cf4df8b4b4c843df4eec44d7baeea99ec10427275cd21d68772574b0f6e4c93bf644ce04553aedda74362fb63b0e5d4c5e3865e0df3dfe5bd56a8f9e6bc94d162b50a4907d57d94f6a50ed5ca6b2c41ece36872aee46465c46b2e2274ea62a29f7d9440334064f67b9a0467302c2273d986555af90d53b95546633f4a662a69de1477403822f964ae89002a05825ced0442c9914cdd2272b86ec4bac7be70a9a7202fd3870baf71f7f86e88dafc501005bf51904ad25504964adf2f8d51c9e473072a74c0590ba0e07ecc1e20f8908f564279e2539b7ff157711ef80bde9a9cda5ff39e44a9727410729554681592ad6e729f01f786e7bb746810ceb3a36755459127dab45b885dd07a56c620b1db1cb6c65d79b73330e585a630fe255eb4803d311394600dc1e0d8fc8cedeb8bde3fe7c421b4130effe203920c10c15f16b029b66366083e938f728fa42618d2209949e2883b8b98894366d21ea12822e267a39773c9fd4c91cc359a3929394326ab85b7fd9a916e818c37ecd529ba48bc09335ae13abfd62129aab2b841ed4d650903ab0e3bb4df5d2eef28bc05084f083741872822d069e61a4a5fae1a755f70144c3216a97689909e053c5fed82946b5466a2a52cdf5635308cf7870d9207bc6fd7e3b35e46eba07c028e2d2dd9b739f30b1404b32d49b2eefb10efb593c4ce7e3f4660e4b684212b7fa4a0504e361895b771b3505aa2d3b80d42248d2b150ac1dac0bbb745d1873ed50645ff708f6baee4323d8ed8001c2e4bf1e21ea88715dd42e90050655247289b29aa75e121c7c129ec0fc935dff0b42fa684c49c895412f035fb4aa594e56b4a853a7e00aba15ef0f5a689e490f5dc30e6a919879a6a157b2de90076f7e6995bbf82526f7b8ceac1e59e5b74d19028f828aba7fa38bc573c37760c6a29cf15572efead8e1fdef7253253b866f0540cdde328da54f2cf5acbf91ee8ef790371b56a1be9dd073c068372632b2b9bb60a5abc9d4b38571792a2d93000878428310ee76681dcd0189b751c591e43323a9406fb755504b42981495e75fdb2c9b1d5bc2d7b201df8f9186296822c3e42665c6b563d925ab879c927ff4d3b01b814c265a2a62f10f0621fe4879abf8d4aada5f023727daac28cbce7422242f4edd59963fd84194644c8147355ef52a0b985231e09a0916560d6eedfbd919ffcc988cd5f84a1793e64af9887881c80292d91367d6f44581b21fcc1a9d817bc99d982d0b0de7ac959de8d1e99a48ec28705365276daea4c4c7442f7be1821234cac7845f0616c743920f5093221d2843adf092992b2eee879e65dd384f45a6e95a0cd9fa6c413245cca5bfae986745fb5297e1e79bddeb713d6b1f7a6f30ff8f554e7304c7cfb34253936661858d0cfa653099364223622bae3c3d69caace4cfc4779ba49d2813e330c28dd570f942e5f1a203b1aa691d5df9c27f2ce7221f51ae6e990278b419cf6a197c32e112b267fbd7677d5a15e2ae24e32dec4ef876bc1b1bb547dfda8fae097f7a9f604023268db60dc5da917ac639898ed08898b2b91366379b5b053b2a16ded14476eb5ccaae273cafb343ad4e3f9beb011c689bef9f376625739ae7e9971dc74aaa7b26fc67123d636c9542ee3f018ca692d2f807c6768b0eaf0259939724a5d985584964bf5f590a8dee034d40a3b9e8733c93a8910bee7d97a55ad11bdbb3188eeb8da9bef7d5cc9eb5b6144a69baef4610327b06ded79bb4ebb14b2d2a38304d9aba736cc0fcd0285424ea653bd6e293b59e2730d88e908d3d28a8d4f97e494ace976cd2a3153fb33215789a0157e9e3939f5514df5a83aa0185901930cb890ef0ed3af7886740c5b75166f0a3832ebc12fcadbcdc859c94a191ad02b7681b20668485e3583bfce84b9f5b7009a3d6a99a7fd62fb85505d28314a49a769d25089a24f69ff9d99ba356c8ff211bfe0c2f93ee79755913e3ec11d620e655b1d04ff29534325589447e4095fb0bc2def6d865123d97a906616bb19ec7f03dee437cd89ee8a453931f0271cbf736e489bc2b78b3cb9c8f78a4d6cd3541bf149aa717b309bafeda3e55b652359aab6a4887b03599ca8cf2afd7b5cc64375bc4fe23a8eb9c5147d4d40e23499a8d713d637ff0028be36fbcf4209116f151cd3362e0b8e8205687289b71cfbfc178904322cb724852be4ed48fa7f013a4361c4b0d05ce115c70c6bedca7441d73011166cd94be70b6023022c8955d2b478f50f249bb73d01a480d7eded70ac978d3fb8dab015de07f581e8ee7125dc6a00372125c2a2e8c20866350eb2aa72d989456a0053bd60275671f0033457a4c793b88928f7987ae37d1d11c49c8a5af9bed2a862369b13d60d83b60f5573b2598de9d5a2ad1069c27d15eca41d88cb9488580294db477f807527a96767028b9c595b652755934bfb82f12421b83e2b268055f70cb44af9d337ee58afbb6ca70ca08dd62b83a987fb293f56c1ff03102c314d043e440e193ac038325cf54a8b36ede19723a9bbb45dca4103095480010215bda8ae2d096423a8b5d4d39704be878c0736a44a52377ff0b6a77c4b2d8464a81852d0b1e5412a5bb79eb80333979b155f1321e7f5a7fe3700b27f557400b052fd915a84fa66bb43de1e8edc4fccce1469eb21053e8c35079fc2a705ec0c71c0ddf28008e11b531b99d2ac84b1c4bd03a7fd3624653ad0ed144667df0e0e355c29e4f5d011f58e2d6b39b59f21f5c45da9e7b5b8225a3e41eebc5643529c579f71e7305d057bc8f3d2d22e7df8f6909ce0293442fe50f9c09fa2e6c5422d65053687a41244149029612a6bc3af3d9e5bdb30465741c58fc397888de76547ea17f834e5925666802886b111e2cd4149e4fbab4067a51e6cd576dbd02c24526362277d595fa4d7f56bb3f4a56ddb982ff2d1e8d6f690c21d60ae2b420617f34d5e54df93dcc7ff8c7d89639ab742a8bcfffe776e868d671e1fbdd55807a8a1247700ca098c282391d8779c66719af97d56c1d56b89f353eb4d169886a36ec26536abcb4ef05e0ac206feed9d0f6d10eda1dc9172837b3f019358b3525bd2fdac37c661c8abc20b79739005a30301758a6baf3a08058d8efd5cf4d44fa36da955e4d11c0b110cbc44c8cb431cdf20add01eaa1d908292ba3b346b69d31c976beeb86c588ac29683a05111446f0623005b355ddaa07d334757a43ce2912a08abf33ce8a5cc22e7f818b702781e0a8143983a4aefbc77d7bcbf16d9ecee4e09efffece69243d479901a650f5cbe7ed3bdf3b7f1db48e50890ee26d2d75f1b43be6132d69c8639e3d211d59870a4b592f61a18d30bda574e5a713ea84077f42e8dc3c9493307d58f34cba34e428551377257e77f1fe541017fc4c8da96ad7b22d493fabed45d2a043e74389140b4d449b9599e46860e24da87757fea688412d9295e51982edac9cb65b81ff209d7b132317bc7d9cc999521f7ffbe4834704dba028f68757115174d3103c3f0fc426a99815adea9522bf48047bffe746916ae3de6b3a9c769a0a51226e3cf1e96a982d82f635d25b549d56e0d52cb0f94db96dd4c47901e66e1f5b2cde48bcb77617c867221cdef7467ba539f44ae7a3633aa30b9c7a5daf77d8b978c62a4880d0eca2d1012ab570dfa15c9a4021344dba35ab0a5c0659da9b7d948f8fa83e4c605fe247fb27ffce0956a48821783dfe3cf2ad596ae59d6dc45513f7a28b46230eb7b15278da6619abe3a58dff18adbed0b8d28130dfd073d9a95f3a659a070ec23e3679e00c905aac90863042ca2a955ed1410914bb9af1c2c19fdf429f2a14643a9a449b852599f6a570fa52545c8ccf8323798043a5f167e5fc6fa060563edcf4043b110dcedc706a8a71987eedaa0917a05adb3d967ab05d9e71e7a7349312b49de7aa6c332d0227fd1f7a1282f8f5d5df338d7218958570ac6d7e3a6c1beec28ccfcf69fb939423f08c61d6c67c7b04098cfeaad149ce684eeccfe1a5de5965fa7be6cece170ea78c3eb6945e4084ed45ed96ad699e738bae75416687e539e60f74596156bf58fbf8bfdf12f54cf6d9bcdfbd42899c5c22f1903c90bc37788df2418eeb38955b675d97461931a6bb0e96e9db33d94c717442c52826e9dcfca2cc6aef331fa1fd33e34c5170ba58b9d5fa94584600b59bcbc79d6ef1b9ddaf6dc478e203b1ea27a6b1686ae1396ada7510679c44a7dfc06da89f74b9d141773603f2d1219678c209f073f83256e2043801ea0ff475d3c9a30e54a345dc103e44b16023567753b4a4c7f3632cb8ca2164f5a5192013989fb52142635f8052ebe0f54a406afc84e7bf5f721297082918421321238e283628eb08f31dcd65106652f7399025cc1241a2e0776f3bed08d11a84e593075db64e8decef3758345297e2e0b57b4f9005ac95718be1df106e34347079d3535a1ff8e2f4bc1bc8951e66d8d84469afef650fdf3a35d04d186329d7fe66493ac6790e3349e42fe52f7ebb7b0670c20e923b51c964fda44baef0984c56335f8449cd77c812efdd77ab797e1493c0ee34208e5c9b176bc6a27a1b69dca1687cf88c221de978638c45b01797eba6bc55e94267179d7a089c1a23ee84cc078e07603780e7dea3caa318e761ee4868ed5ff5a0cd6a16b65b8f7a5271d167af2c6a82f2efbdeebaab8cb8f85e6b7301da751fe1c83d50f2ec088caeab39f4c2ca0c2663788763e58faeed8a17f7b3980cfd30ae60789157446d16e0a4a2ba67f0551635222d834efd717f45927852550961f1ae9e04220dea27e18f64f602c727ad190ef698971a7d3d35d3d9d896615b07278a89c74b3b669fb564f41b1409f67cf697faaee674977ad8d9f4fdc8e489599de92aaa530a413c59075bfb3857e62a76773858ba82d4903002e9d12f051cbd1a74879584a10265971fa17cb6d67e1f6156b87f596cbbe805f3c23a15ed9b9d65d3aa71242931843554cf88d5b046c47fde81090c5bd5e81f578722c0c48e6047ad9b247cc95700fc50eb06df0dc67f97b59ae01b77a8f946d43e7079b17e6e88aa6098d4aafb41b4b800dd1a1487b973830eeacee7be844112f10c88dcf22ff07303b374f3a5af2537 +Output = 7ef299973c806e23c1ce1476fce44a0a + +Len = 73000 +Msg = 95e4b4393c2c65ccd4b6112ad1b5703e487dd224ae3b0584e3e4791f6e6ba2a70b379ed463d418b41ae96c430e6a0b3bde0e222daa0476d11ae2929ba2de258e0440a65516173990c52bd66c5a34a876fc49b3b1769bbae53b63603ba7198d0788e713e5dd5d9207de6699cd3c7b0d96a916cfd79b6a996a4d5129280786a2b9a0142fab410ee9c26b81fb8f3ca70344ee5dbcc7a0d7db05599336894a8b2b4d53af40d0c9920768776445dae2205228d206c3aa0d4c47606611cf87f692f26aaaa08f7bfe52b4a207f7bed5b74ec2e95dfa2ca86b30a6237cb33c4a9502bdb9abcf64d566b4b7182522b0a9429a1b30971f3fe841ebc0f6a361c4f9ae4355e2602507068b21da71d8cd617d0b6a24a4895e449317e55d7fe403b0bccabd828cd188bf35f502e35629e01a7a9b27a6ee3aa082d076854569468148bd70d80b5f05e1d58a2abd9b6e1e4323c8793a6ab5b2cb42c8e4353f5ad2c3d42128fcba050419912eb4bcca62c2dec48e2d0935a2fac8cca2eb5d15fa8fb19c137b915523d6163b491b6538d91a9945f540fed25d1980688713638df38534e8b9efffa56484c21b02e522ac7c305ded243980078d17da5e9fe3b070eabc32ff3b0eae726d140479829c5af0f30b100643a0f69edafdbdf511e3ac858a3d942ac2600684e991c39cf1c774cae5b39cd67cfeca5deed21376069bbf96780f43b1766c70a27e00e9cd76efda03fa31e7a6f5da630d6e9ec329a59452695f3a26dc7eba5296d46b5d54399bf363db8cdbbdd6bc29760569b5561755cbc8e5c724f202d2152694d90779635327b130cc5f65482c845f593cd14583669479b2bd273d2c3d221b6653cf841ca0deb7a0fa5ae473b3dc91121eff3e125013446f2416032282e03cf1e09dbc8b08803bd41cb6837ed899d5d9182788ec9ab2f3c404d88d0c29b653de88596ad9157506743d5a8a912423f15631316c38ccd84c5866572313ba0e26d453ebd62d4f26e027622e41d61ee3ad307105321f6fec19d4517a0d5fbe4f7f7c4a3b48b03df99095951aef724e3fd30fe08b22c80a5820dfce299217bde0247e7432088a6757e067dd06de903ca0299d87ac835b25832a22e44cfb633d2bdd81dab65de255a9964543da5456716f797f6d4e9f0248d5fe459bcc906cc897742d82b091e090557bd6cd7e9aec741289609a5abce3fcb666effb8f995ae58caf2c7609eaae9fc557c385daf87bcdf321e617b92326c88e28c80d7e5e551d725823bea7b1710a5ff2b373d7b52b05780bb9eb511cf435c50d79d8812784f6b235bd60742d545a8d134f9e5b1b23a30b0e821e0cee75cac3ddaa64813b0ffab20fa06657a87c16b6843f0e4f708c2f13f1e9b9d1e3d00ff16002ba64e31fb1dbad74d7376814c6410b2acb9cfd8d31f87d95c387412e8cb55d2ae11467dca295d9e2bcfeb642f29871b9de280a4f32217a2f441851b6ca789ecae1770f6d554959911c93da2e23227d934edddffabaf8b05e456b5b9150a3e989c37722fa525df62bffde1c02e047f96023a2c3b54fe4e6cbcc68a7e6a69c070f8efbeaad223b78556ec7c4e3b26fabca655e00a87b4de61ee4f77cde55cdc0054aeaadac4c49a7b96f3619fb20025d771dfbdcfcc59b76fe920024a1e49cdb13002eb41f58f14bff0d136472b268d50f5360a0d9b5375f13e06be556db7322e0b7ae472fce9a2bcf4d46ed70f00adc3b0d759366d4876806d5200825c3b95b157752ae0337ab10cf39b7fc1c634e39a35522ffcca9f45b7f7908d43722d64f59480230c51b8ec2aad84fd99e929db6ee324f2a32bde7ff25d50993b48332c65533a6169a00aa090632f4cc1f056019c4ade45dc196c61ba1f00c8bc46b3588b13f26a9ac7067ad8c508f1cc745fd2bcfccc9e0a1befa789ad3fa068d64475c14756a2e23f22d75e3390912bdd9deb4b499e7fbf9bdecdeb984b94a3af5d00b26db5bf0270f642ab3f548f62a49697c1e1c24f6f1190314a60d339ff1a7385e907cdf36de4d7494a68d3610351e084ab35c6918b35ca6e408754e4fda00e71afa5ddf477337c67b6208baa707df22e71b619fab640d3f1488c5f4a11f8a450a0b88446c0c52c0a78f6ebb04c7141e1cff33acf52fb5356dcd040cdce5cdbbf56c04f4edd228cbe0d6c823709e4666af07db7a3f3adbf0b7803a7e495750afa2c5d9d912ec4050eddf1dd931b4fc6168da60efd0ad07d8ba487032309a9b8adabd10da238222b5975175c58f30be771121caf5f2b1c2553dcead0fd9d936b565fcafde67be5764a6d4d8cfd43a141070832173eb6e92cf0ab9f9ff8b3aaa960b2bc1cf27c666c3e2124fdf46fc87944fa96e50040b02aee7b25cea8fe57d9794f24b94abc2d73c12b0e1dd2f9b9e6b743ab97685b0975a9d61dfb62e033a1fc7f857153bdb3335005997b1d542e2fea7df08ccb687db3bf46d894cadbc66956de6ec3a1f38001872b377438117d9b3b240653adeb555b9b37f639457378b634e6313eb9e03c94c31668c7b7a420df35c04d7a847658d3da43e7376739d30f03218d31001611339051bdb420aec06276cd467fe37bd0c2d8d53c3db4815dea4e1ac3491917c6847b57a6e7e773d4ab5ab571b24f7e559f337655ba91fc81ce722c83e56937c4fde0b2a4c190a5c6307e136fd03cf06fcf56a1d41ca40de7221bf14fa4752895166cdd47df90b72d983d518158106487e9ded237f24f37e68ba7e376f4d15c9f547c41f0a08c2a6329351a66987e6d266528a1e1da180d0871a28daa54e2367c3e9b8b4fa2c7621f89e1b8804feb5cd3c7b07b621282efd56aa85a4a533c58943b5713a554f710ab20cfc65ebccbc6089822d9495a0472d5ed05c3e76e54358fe11b65a2358f98ae944bce528db43b4d3cec46080f3118725f5764f204be5fb7b6650bc6d2f57c924b023b1c11192f0a5c794c1eb08d53435829c80ac4cf39a421d08073bbcd3eeebb7f971c158f03d84d56460ddc7da5c16dd947921d2b45fdc9ca4e393e7b422c6c105cc2d97a7c3fa60fee55e186a254e7026e187c47170d04decfa7f98448c3e36106b0fb6fda98ed028f776e3cbba67a21c61e70972f5a697aaf106b7c955da7fe2f66e9c3b18c98dab3e2e104641e9da3da0488bff17e7e1a473302c8ca4230243145333a83731ff4f648d8723e35a825047b23160fd1a95a32606dfd5a2a028fb6dc5628e2f508fdb0e9c31aac744011efd2de3dcd1c71a6fb28fb8ec76d959d1aacc113327aea319e662f423162ebf6f6bc289bcb876d8d0c0d4a0184a56fe8f737028e048d1a5cf94e7b9d5f7a1240a38780c49dcb0378ef8db7da243a07dfb6fba90ddba43fbc6c0336909932498b90d5852c865fc9f7001ae39d28b3e40de47b12f72a48c0fc6114fea07113f8342926844847be378408455baf04ab8adffa35eeee72e3247972f4226179a7a4d6e6eb2cac444ec2ac428d6ea44a7972e2829c7b58382bf0d00c3140381565e5e054a3ecdcfeb9f1dc5963baf16cb612a1f84f66d90c5bbc8ca75cd6b8c6c721ecfcd1233ee9684b90a758cf3addea109ad5af3fc5422acdfbdec764581053ef694a038e6696e24675d6ecf9d5207dc329a54c44c18bf1cbca1d11779a8484b4c1b6ab8cc889a068d84290e954d6e9c0fae19734423c492c63ecbb6ee495e20892dd498cf9342b295484d50c3e63c6807b15208cbbf5a97655c835d8eac6e46169286e2d6d190b1e571829e0f6599c9826aa689cb32a9b201c2a0134019a1435912279ec88baa8ae7c772ff6111ac46e8a2be002bc5d86b0239cbe1ecd71fa1bc745fd28f09b8c50112c37ba1339e67a2214174d3c00f4ad189accd7a2f0fe7a682d8881293e3eb9d191d1ab71396b416afd8eeaa6b78d8d47aeae2d369999e7f0237c73971528322a529e58bf9bdb6ad142b759a0d389c74d32e25ddcde74daebd2798ecea2f15f87e8ee3052d3bf4cf17e1118bf07a1e195e1fa081a21e7c9d7b4e0113479f29876cf51c0ef637f6e582a2ca635a64e72ce1665aa83269b4b304540d96d1cc48363706998c9ed945551b18a90b941e7e1325aa5b38c3ee7b581fe2c15dcddef96fa66861696b4b6889abe9b56be6d16b38f294ac1b9ed55cf496a0275186fdc59a82c47c8ba6b2e7e7f9bdf76b97a5370110cc54370b47dcef2f354658434f331d93c1f3dc96394bd9cf3d75f4f1c169d846f95b76516c85b2b34a265b4bffcb61a108cd4285051bc6f31039ec3a4e89245dc3cabeba6bdea3e986d043e73315ce744012a7b941df162edf4b3dbb73204d1ed4a8f98c6c6f2b9b924bf65f149acdd312cbf27b1320304852b1cdbc59b5bb4ed1fd0e1099c1b38f159f5efbc9e1c48826ff0b13a3647e091075868527d0d5b865d1e58e185ba18eb8d562037a721c5923b6dac91a366739c29f4e5d06f90523362d664e11c55e6023f4e9be51d63e0fb2f846e5a01b539f0f350f8e1eb9b356ec187997ad8853cdfd04dd75739490727ace39ae5c9daa04a041b05e9697451a309b06b3132be79dee0e25700b347c49243f9b6d7743d5301cca1916971c2437aabdf5e86d368197a018a9f73f3f695e5754526b19953aeb2cd932fd48ceb87501862e7fe0328b85b82d5152373cbf77bc1447ed681c42fd7875e35dd238699cddfe99bf96a66c2de15205c81cb3e55dfa87623e8f5f552da7a6147c5cdfa073e82e1ff2b71a8c57c191ada2162c45d8bab58ca5b4e7dc446274ada40f4dc3c3c71da65e6a1653cd00f131294c3046afa4a7ab69003a3d0b50e8961b13093c5425d3174dd8232956477b79a2e74650ac5f64a8d39ae2e2471a09b7298f9b71eea8595b0529c876b93e356d580ef7cb9594f46c2baa6731c367e0f818ab8ccc59f8b658cf848ea2bf8c29f692eaca1f33ea60deb95a4f9446e073422e9162b35cbef2f8f211fc1530d95ffa97a347b54e0aafe5c4d02472972dcc7bb566a890c1a21622b8fa9a37d4cfdd62b060f6f3ae9be96b96346d337ff5f38df355e3ca4e4b29be6764f0717214ad17254960421a46175775afb33ec6e0ee5e31839dc9cc6233b348798729d450d7003e880c0b5bb33f91aa697dfd3498c7d8b61b5df5028e3deba361e6c8c02c6104434282b439896c007c8953d790c286e2cc43acb6ba784d4dc04495b7ff4f550d7ba24ba77c71a38e3537bd34a4093163b9231174bac86ec1e6491d5d5963ba022fcdee4aec12ee221c9d447c3612d245c6e51497cb25a52f5e980521950d99caa7eef307511554a478e06f180f88706f3bae3d87b537fc7f715ad56d7df7f94f2b2be3457221defd922bc76ef71114c960a915ac40a77a9964b716a8d7c9e27803ac456b18df9213b2a4d3e7b655c53b7cfb236f341d276682d64f396c2a5d2d769aa1e30bf67acf1f731beb13fe8badd9cfef3658400ccc12e0088a04c37056cd1d8014130f9e1923c127e3d7b16e07bd4b026a75b930b45bfcc902673c26dc515c6866f8d204da04b68035ca1877317197e374532f9c07a6531b095c3c84a54780e44181e6b6f80b79ad4bb4dbad133ddc1ababa4b56ab3b0d8507ac6b949afab0790d78f4bc5d8033368c5da21996684230a672b5688a625190641f735da3b115b132a3a31cefab0ba45f8d14c1a03cf0ac9f4214d98b6347c2897df9e7a9b3d71318ca9ce098d32a7d2e0bd9af1aff0f160cf411b2958518a6dc8ea83b92491d2728b787103f42b74c60a09aebedfac6f7574e53fa9212ecc1c61a256048bb0f76c8310bb2cc3edb965d14ff7bff753ed6e71983b96950ea9db0e81b5eb151d78761ffd0d02610bee58c2faf693ab89e3b241c48f802883bc100c1303eb7539ae25cea7f71370087c057b853bd850a0fae76214bbe450106b5206d0c07410883101fbac09ee6555fb02579927dc7b5b9b845ee33131a05740276b458c136b9b79814373a5e1b596d3c5f3815b3eaffc3e0f94da9ff69daad2f6c5ebc7480ae6102a22896b9be52daec6bbe8366d53156affa03558b1ac9d8c46832df29062fa7d730577bb7b889cd48b2d3859f709299acb1dbdebe151a1e49d4f96ae8b084b19e288a9261ef466fd99c3ec365a36cb55f849ceda14215a647177b04b766f4a8dff18a83be4cd1e72692c9e4c05605d150dc0d293a89029946998056a010c8b423f31ff5d6b7715eb7fa3a91b871a7160822f83b93d3281eccc2d008aa9649fcf0961090b2196ffc153d5a7156dc98ac0ebc23cab406d05e63fa32c1dde0bca9d14227fd595813e8c7c4f12da18020baea14567fa30c428092a9702942d76ce24b5f2ae4d35ea54b55f6c76ca243896825905b026acbc6ade23750e9e061a0d0e855e2ec29116d4c483aa3d75f0e19e0469af9fa112da40dd90c9ba9c0679f9b2f8c17be625bb31427fa4f15e2ca1a47d599f70f9e1923c701901810e8d2b26aa86d91028623beca7a9d91cf335dd2c85af51eea1b768c04e22c91c762882165dc5e175f9e51d797ca8b32ad58b18a885e1536338f2e27eb0246cc76367334b652c8737db1cc46a39d2bfa565bac89b26963079103283ca5eb4893c46a7a338292146b05c77e53157ee7b0734338196c014658ad7e4c13592598ac59088465f425a8c89fe84e4616f2261eab193c80deb026f22f0882f43036a0dfde177b133192ee51f21d2466cd83510aa7e49f0732fd6c9ebea9b22652a8c6f6fba0468564614cd0a76de8fc63b8ce3d0fac4bf68d707e22026ac4f2e60374b757aacd03b31b2c0b65e18250ff19067f8a7a27951992c546a552a0a014cd11ec9b3df8d54647f5ccd580dbaaca2f6197c0551b2bfeeaa9d44c6a2f780690055b6e61af42466d0fd99f52d952ec81484f5a450f0264019392a1b957c1e1d3b7cd791fda93db16e2fa6a5f658f8c98216d0052eb60725de94a4c4701c5d01f9109647e61112cc9d6f9deb068abd2fa55ba5985978e508814c2f51c16caf9fbfad9d6872c01620e539da44cc8ece7314dfe0ee5fcd4270a7dc343417c1984ef5a03774123aea46dc1ad643b6f9bf3c57001c67a00791f698b14debd1dfa9a831a50f0b42f5f1b6f88f2c58643ff1d3c258a2a4d8cc75f2fa57f6f98dfb46340a088e9e8365bef9b103470342e628e20d663e265890410e335ca9edaac9106ad557309e621eb4779c13a0d4d170a6ef8ea5295cbdd79590ea2be128c6bd7ab53a1d8f9b5d9574b9204ce43dae540e44dc920eb85726e6337542374b604cf7cb8ed81615d45e7256d3fb6bae1824c18a6db958e9d2e2b55e6b3c16b5e5ec19e669f34e7e74ce3fa93dcbb1b6dd576338b8778231afbf758a4275fa08e63f53ce521ba365ad892f58a41a50e83c6065d8438935505c01c94f718c7ba4dfab27cbbd9dbf4bed03d3bdcd83c3a2d3d43bd1a53acc96565e0306aeebf62a40b428672315eca1b1b2cf7100748487222777cd4418c2a42d18c5582111040997feb83928f0d5f7aa3a74faf3890df5b5de8c13b6afb1ea5ee672ac9e982fb373cf69ba15dae5ce24ff66b40d2dda8eed7deb5d536c04d95a3bbd8c6dfdc3c832babf529020a685c0760744b3df74b3576a3802d0ea5611ad8ce860159e8aa873451bab1e6e92cefb32e9259e0a66f38237e49c85870ff3c75ea5d03c06cee4a403111c271134fa33ca9ecf125b2bcfec7b638307dead104635585537d31afd4359423e30b4f7a808816ab9b73e2dc8f489477ece6db7f7988572579f6ff962efdc0189c1c66558f80c0f6df33ff74f390602b84fa0bb1a3cd3a65fe959d4b5f7efe17750c2187d70ceef646cbd12f3285627f8020410e8b1a446e69c1d5756fa29548f74346b96015e7d357a420b25511e19969c2473e3858bf6842e16dbc674fcfd4a92a9d923381f4b49b26b4a8641b27a1c747e3eab26df17b125f2eca4e6ff2e31327f0bb573a5dc198b955b7658a7ac02017deba024323cd5fa2e0442ce9479cbea305dbd4266a24d8c6ca876248231dfe9aff552fc19c89b4124bd509a516283107a59bb32f6302e3b3dcc1623c69e2e838106441cea6d596173623ee8ba7aff4b998a3fb3c8f863fea530d6e4e96346759d78e415487d98f196bd6e28341589023a69ab43437d576d1f7128d66f13d02651e7c363a88bf2680b097ee752d4b8cab9729e701a31a10d28f79c76cc12541c4abd52868f1ace4b4ce0e1949b4b170bb32f79b8a1b7b9354e5e924484f14acde464220c50aca4f1d8de26be71cb2c5ba40add8b7e72089bfbf0bade3e331cc1bb96b243b1a41f124b4bbec37ad75121089f2a6704e32797ae6876923c4a428e4cbf73fb16b39522f0d43a522b123df24d56f0e9d99d9ecef220461f13c96489f438f761043d9f8a85e1f9d8e6ee3b560eccb1726113c69853a2a9b36912fb5b6eadad33eeb496df570fadc652dde1a2b96afcaf3fb8478a4f8a321d80c96f68f88815d24abb239800b7a6b8d363b99ed9ac32deda2d8a1b42214fbc1f5f49394e52b1caaca3ce2aff64751f0d123b70fc1ae4bfa4d616d1d81282fd79470152bc88119b9920ef2ecfb0a967446befef7d319290343476348dd85c704303303befa2a5b374951f19ee06b4303dc33f50e98abd1f1cdb10c9bfed3ca2e1364e5b444cfea0e382c652c6e115f84ddab24bcd70d4aaa33c7ee7fabbb413f832c44756c18cf24a7c8d8006da5f2de8f4d146a5ae69c18bdb3935daee4331ec9b3a6693aac1163de4cd181a5ce05fb3b424c7ee7dfd022b39a839bcdf8a8b32d2096f87834b8b124e1d917de359ec228b1546247a0ecaf5ca744a3d19ca9e6f69b998aec57cdf8c3af772adf82c81ba0c3b57c42d0fba901ff60db817a3c9f6e4e39875fbe571f01dd3322715c88eee9a0f6369f1702f7eacd5fada73a6cc6db5ffd579a115e0e279495685c6be8234c6f9ff7281f0b815f37c78009843e4386f66d6262f7ebad7cfb26626858efa311593926a38d1d2fa86522bb71febcfeb73c1210821804e44a3b6d795ccba55480854b2dd90c41e90c80f7c8a553ede0b65873cac01db49bd77bf215026b131fe11b5d7392427e97d4b0cf0e6d29d9cfca7319f6e6ae00ba6de43e9f20e140ec7b45f76095d7dc21491c31f5932989b43cb58afeba72f229529ed87d7fd435a49729a25cac74636fb0eda5e5ddfa047854455048051291d0ced04819e7edf82d7defe5cf9dc11c69544ab346154452015a4cf33e8e35e5972ba217da20d4937175c0492131650ef87c5ce48001b17c3996f1f9461f84f767af3dcc27f1300d57c7c455ba300941026f4bbffb6ae78907505decca7ea7ce26a4c9ef6a23aa6fc6ba2291036254be70763ecd20178e8152cfb75331744572be506d090a7ee9c0a8970385628fef8c2bd95d9455d24f6d045c28b7e3c906ec15fc52a16fca9608e4a68eba407e81b31ae0d19e0361d254043fd89f4845944315efa03f01cf5850622fecb706f8b33c24d3c273938dbe3e3ac0ee93c8b0947fa5737e6b2855d89f0a7a44041ac52d2e33f957996b1ebb338e27931bcbd1b1a9acce14ae4c23bdfdc4cfbf2ae6ad96912e9bb99af5dc733ce8bbeec0b97191c814498b8fd502b072787585b0d078966efc0110fe988f8b6030c52809fa58dce4c42c0b972bba59070eb5bd1e42edd7cc8773834bbbfeaea84e8d687ff64e3b06a4bfbb4cb6135fc36ed78ffda3d5feb3b6393a0bc8f2821a2a5bd7a8151b55349c4ac438ded56baf802324d35bf8b62b719a5ec52633afc1ad779d0fc086d47894144ee30cc724d12de0a42bd21ea53da0df17023d89dea2bd28e1395d595dda746680d4a6b233335b58378a6f0f73f02c518c4975bcb7c743b8cbb0565a9b6124888293165e3fddf3d1037a9c92c94dfb35e6223693e137286d84fb115233158cc27da8c293f1d5de943382c1714f5af6d64c15e8d705fa529034a2f808d0fe955c999c1419f12502e9ed2b4472ac21057be7abf350ca19ab68022d71461825259dfdf572b7e6d5491759fb8e5e88aa116bdf6bbfc6d99b1a3f1725e6d2b39125ced23e463778eb9a68a17c07fc8dfb00ef5bdeb401d988865b9b12be754a4a7e373ffcf75f5071dc22ea361716611ebc4f838a3bc873e8d905b57a61f7855916206db9edf8166ef98e5fb02772ac1b2bd380f9bae54fc4fa858de737200bc5d7d183fc90c972ebd8f425729dda17f837c37ab39b1e1423d1234ce0a8b88596a891aa4e489c0aef619c6704e31349bfc766983e443c6a0e46271aee1c869ad570aa0a367d3789827ccd4bef5fe8eb78c20503241f07fb8c41d81e97fb53f3891962ca3c976395ac11d1f9ba7b20a52912e8e3ed92466ca5aa808166ade737ba8a0213e8fee8d67608ee9aed9e821edc9e575f1f07c3686169656ae09a0a0f70abd10cc31a8ef6e7496d56102fd8ff984e9a9f44e54495c966cf028f2a8423b46419de54541d9a08bd9654ac98e8ef660af8cce394929be48a0871fac61c1a8d9d20b023125c6cdf4ab0bd48407b974dbabb0e857c7523bbbb57dea9d49c9d043e30abb9bd141477d905b86d8f589f5546298cb105b4d554e2037125beca53202f8ff69dbe0d3ad553db6ea2ed49ae86968b6fef971958b9e85554f5ea6ee5e95885bb577b0f85039e7b076fc2146ce99328dec79a6a55f2b395aca1c252fa67a25c1f705ee29d08a42daa5c76828385234a02c2767073052d0ba4b2ac3d3ba3f35a4c6fce4d2bec4b387ff2715b98622f37036793f35bfc3dfe61af12f64fa435c96adc331ad7b77de6afb81c675689a038083f59bbb4decab80e205b46e0724eefa040f40f4872217d6237dd6d62015c9539d1318f27b4be7fd18deff59316281517227bf527251f46bff51d3767d24d96bfa581385c85009cd27f36cb1297a982f70a2f931bd65f89ef7c458b0b055a83c243b27ffa5978573a7e989005fdbb80678078b3cd8fc88e1a54bb32f6a16aa369342d2aaa390ef731107d0b135145558f0dbe1be457449c6603e9f4d1ae673fddff5901132baac6debf4d05e59a2e4a983869940937bbfcfe1335984435389f462c9dcede3a340a6a12704623e060a7aa8ae1e6e43513f7080c09e8f63cc50bcb436357b26b940cfd914e96742bc2b4ec8a8fd91c5c35d3ad74ccaa90cef6cb94cd126538c8b214bdc54fbd80843cb987c0d9355ab109d814d5e6a7b9f0b326ca5211c017587669d535dc82f0f2b6fda3b428c1453e775066b6bfa71aace4669558ca30f823c9556b6a5bae6c7e18c966efe546860a6881caa0bf725b0971d11c69a47d8332911ea8ea36099b2f4a65fbf8768cc41dc2b4691a4ecf231042b0880c076e5f8cb80db33fd35b260d35198857455ba8806f326aacd4871ac73f4a00ca5bcd3539246ab5f09c6cb420bf2d3695b87bda3a5540f6deb962e93851e9ad290960ac42bf7dd586f704ee71d1e82c3939b301535e2935396528386b5ed3b7b377f06dae6f8d3c884eea7c07549393cb2fcdc5d471334e4440a1ae664f5145f00e441f851ee4117e08e705ea2e7692d3028fd0c475a86a87b395f4330dab7f6736266bd0b3c87df18dc3312349d952da19c2c72b54ceb08b24cbb2da7f298ea0585cf9961682a8684546aab98b04fa67de2e5511f5ee49d7fc0c8f618c139a23daaf70df2f5ab96b983715b4de3eb303b89a207f404f5cf4a42033d21eb0ca7926e779b3e697d882ee601d1d29d1a5350fcfd07c1d3b126882cf47341c494729a2ccbb1b23832f36af8768fb5403f7854c960e1174f893bd00e173906d2639bbb825df1ece64e30e43759e56461dd27bd5b582452dcf067a851d5eedfb8fc7b7cfbc8cc5cf831f9312f26836e9665da013f4d32030089328784cb153adcc19a64e576b170e28094b85c66ea42428c17b6e1da9aa65eb644e433613cb6b2458109fbf231c739bc9c002b857a7dfa925954ff6aeecb5c09e744da32d5b1de1ac7b29bc5ddce723887af291cb480233b2741c4988ed06ce6c23fe5ba70eab493c715416c16050096e00be19748e760c8fa23fdcdfb5425ef4e1be2528e9fea531798894f6af9896a2d9cc18f781217ce6a71e775c4d4fb85e39f5cb58f6fc3cb21c2dffa5d1a50f4d908656ff29eccddc0923e4a6bc1724d3b00b13e03c8e58e8e0ab1f75cf61bf96aa539a328fbf459b52b4ea660a80ea7bd068c668c39d3ffb506bbc0fb0b2eda6b19aae38ba832e4b093b50444074517d2075ac97940f3a12f1d39e1a7c82e0a42dc558bab21ece13b71fdfe765daa20128988c16b6ce91554d4c8c3f3bb8e1b9a43b6160807a6e1ce3c85ff881992631713a2f8c31c08cedeb3f5026f63c380da06491d12b7e558e159e981e9d9b223382c45ea20ecf73025312b076b5f62dc7a8a8afb6bb11cd90d6095102bfc7e12fe39cdf0054e28dbb0e2f75d87ece0810456f85b6391d1c4aac71544cf205aa4e1d2c7a4d0be02341a3fc67f35bac100ffd21d97aac898be5223e67a33b3dc4b7b7dbf9323bb37dbc9ae34d7053788eed5b2674a91c3d6289bdd853afa457789439102256ed42e3537c4af0f66e1acad1e4e61eec9120e95d07a7df19343c0e0a2c35bf6229759d2ecf9b192eb57a0ce422ca9eeb141c688a8714d589f3d2ce4317b196fdf534f2761e3d8ebf2f809c4d9c38be4dac182637c585fba6ea02ff6782ec70d05b672c53ee981853e515c135da9944bb62fd6c8d4a631b1920b5eb9df54e148262f691ecc9147e8fdd1fc5c46556f9dc3db182b49d17fb899dd1d80ef93f4cbc12c96a6a36198a1d2187ee21c4d5a559451db0d34607649f6a3f0fe21527de2674c9fef4be0f02a5b93685757f8010d982293e13ce9d1d038ee8d840d26e93678fdc97b3e75eafceab13d1e71f +Output = 894775bd8aeff34ad4c3c09342772a7c + +Len = 74352 +Msg = b840be737ae06ef772ae1ed354df437b5b140a363b7feb6a5648811a322f99ad2b7289f165f1c35f0590a9a1a1dda351f4f36f04d79eb9876dbfec689df247b8c56f3310ac2ed4d2b94fdeb163b8aa74e90089f6438c587258f754fd71b73054eefe65d838dfcad7f6b2640d84b97f6ba004fd176791efb381b862e298c67b080ee9c752ef4cccf72482e4bdea284bbe83c6766c2bf7a6d34ecabe1ef867515d8df60085babc03b8ab8705c77f4d35f6f9109aff7804a65929f40fb97be2dadad3eeb97a827996a5f4897035296f669a69a811d7340217cd79fffdbc087e3d07489899372dc9ae436550cc0fd2d805323d5784fc493721b8a5b4322e8685a36c55be49c6a4f5731c67a3c25b61ce3b46dce59b779deceaa017d85317df3d33926026702fd0440cb7634cfa23be9a305fae1afd4f1a689d1036360b80faef1600d399b7789800a29cbf111b6ed1840b041bbe538ca7f5608d6a95ff70bfe2733e14dfc6abe36f5c54e5bbce4582d3f5be8b9844372bd95ba11bbcdaef166073d58dc044cf9bdb63663b12baafb9d1151466717956905db8d3b1744205e7af3e4ca404d9eda78ade5a2bdd88b45ec4948e141199f4bdc99cab9485dfbb1a18fb2bc3722e0cefc5f6b91be6df5c59f599b4fd404d169a6531b22db75b1897e3d3fb51d4eb345bd3d30975f368b092ac4d0f8ac63dc60f789f6fe2d25b244658ed42b6f0b86dd3fe9cd5a0cdcab7f131d726216a100b044c0e6b1c9d8ae810bf728b598e3bc03f8c7aa2043cae795fcb60812cf56fee6127a52c44e18d6bdb5f895ba4781f3487c694fa0907bcffc2c310a9113001750e528c3cc0660fb691815b3cfe750ad293f4136417f89b5004610e253ae06faaf315ec23faf4b6cf186d0fb5cf4ca5a14b5e1e6996d5f4740bed837d0dd06095f9b7ed6758532ac05a6bce4f80c697a9984bde8fee676e74c1af963af4c77d3d0682b692444a14913dc3c09077ab88f260057a618776b2570cef70e3568c6eaa03bc702c25a31c48abbc0c021dc322858dd21b64caca6725d6f438009ae8dae4d9ae42bb6324e9ef8b9fdb2ddad50a6905fbe9221d2a36e70607171a2aa369f46ea055c96696248dc4b4549817abeba6b2c70b22e95fc7a4847035b86d85c4e1acdad0dd95c0742b4043a0cb3a0b6b457a80aaec9732c1643877b962cb5693b37aa3dc805a6c82d0e694e64eadbe324d476ced098d68cd2f0a64cca0acdd7d72bf45a1381c60f6849eef4faad68ce9c600d5fd0035cc920ee27e95fb78e32b27650646904465774f509b03661f3c38b88d010159f625b908a80e3dfa973045da532ff40d3843ad3ae4e1290aef98c62cd639229d373ae926445ceb26728c72917107d23961c2414c4309e91ead663c29c2c4885362d4cb6f9eb0c8056fbf5a56a7d8099b27aadb8e535b6c2bc36f41b83bec5a03debb06eb9e52fc21f790a630dde8c0bbf3c22206fd1edab9987b7ee029f7c13513b743a22d89ae0273c8fe28fb8120222bd3bfbe2a9c5b4e94529ba9722ee47269902a9d319f062e492f0944e9e9515739a559bec01b15741fbb3f1bffd9ec41480d62e393da2d2fe38d708e8f687ae28300990ca9e433b2a17f123fb840002b18f8947c3c834b8da7aada0ed648c34c73ac27b2cb3fdb908266be1c85aa49b74117677113e187ceff4ef0cba4cf551c6f70aab8107336972a38e8ba4f61ee6d2b3384c9ff3e0a7c52405acde34758dae116cb245eca6b4e02bd3a22fcab18d53e13928ceae0fc1e0749bf1c79f6f30f306431009f8aa23e70bd5c5b76d1ef78e3813ac2bb10843d8831c8c150254f42c4238454bafc05edddfff66da31a9add804324745a16ca603cc01cc34e1b94fb051a6e269768b9e5b24caf616dd0428c7f22f7aaae3af70f8bbd642a5d22e9c25b1395801e16e9ae556c2f3ebb390e0e46e65c6aa1c433d3ddf247fe648076202ed4a169374dbbce30271f0c749f27ea3f57fabe1afba5329a256e484a7e649ce6273beaca5757cfa94527d48248b4a8d03c7aad022976b62a1f8010f964dbbfebd20b09bf7ae6392a8dee9dcc7dded1635f833f3f94cde7f6a8265c587a020fa59db8d0feff90921ac81d6f3a85cdec5f86be7dba84d34c648808364f0702167d52eb476f2e7c64e1be5b52b4aaa8812c7ad26e5b43b06ddd86cda5c655035cd9b74b75fb4ed336e737514f223298183203681b0b188bd2ca6b1db2a5aa2c682296816288a9bc9193fba76d6c66c43ad8e8288ab04a8c0491ffa263d44fa5c2c1b53416ff8560fc4fd104b57b8e556e88f3b9c53322dd8a9c0a01c23c8c97f21cdc0d9a492be7ff8383102d35f2723daaeac4d47de8a3ec5154e5d7c3a82a809dd5b3f54ce3782295d774df83d9442ea496f0bd75e409b31aa4f4a952ed85f5ab67d02ff2f43beeee96d8d34e8df2c9dfbfe68a025d34665ec4d640d2a1d1d9ad59095122a859eaf688e3107c54a596c32d4e430e9d4f8d847a34a4290d35b20d740861c445fa9f15743e9ef677851eb9a7cfee80ea80b0f68fb6de4179da0a3280756abf144593b4239185a53db9e827f71195408def581bcb03f4002de7688445f771fd5d6350395e83cd70f06a7c76e3bd3f35cec60c5bf5c4f1507085556b8a378065687c5e0eebbc7f3ed6bf630f347bf549f42a551ed7a0da188cdc584f19dd9edf7cb7439992e5a3f939e12458b1f2be634945bacc3740b940c713f998b890d453e23c89441da63f885ff747bb24cba26b133fc3cdde4b95af6a53c0ae30f829a9e334b77652a65dd3912a559f53ada94a9b40f88a946a774fbcc336fa48bea5c9c5c75696fb8e04c216a2d56c0841dce6296fe26920456607078ce2e2ca8a509cd01ced0ede053d3d38864f89092f422804f408d34c836abf91d54ccf7c0333084e5c0445c4b40f2c3dfe4b601e1ee3f876f8f231decd8b5fa4c7fd2a28d255f685ae24a3744282776e34525811b6c83fc5a329e99fcad2d0868a7c59949fbe4fbe3bd390b8589e06134debd9a9a0f8e33a1c3465572346f87f4551c6891177f9412a9c74569e6cc174749f4bad847bce1d8c9b0bce7ff0c0d92005d7ced087de56a404b717bbf391d8cff517e6095ae6b61ae745cb87d610da441ff62d85f6e545d195c1c3583b5c898675a31cd89c154cef9f7a18e302d1ccd9278a6cd8cdf555d8d6fb221c4d0ccdc2a7581699494229324b117b3a7ce9f506a6fb547013f8d0e24fcbfbb03087edab149e9ef36a55930c7474bd344a429ef423b0adf6d0d5fc16899a18bbecb7306843de7a8e0635d3a5a10aa67a76c30ecb26133f110c74229d0bd13fe68a82e022bc7e731325cc31245a3bfdb408538fb2378bd16ad0bd899e5dd639d911d2430008e8512acf01f4b1276f8c8a06dc67d1df802da823987b420813ce3b898ea32bae82dc7a0dbc6676910e19a27a45df51a55a19740eed3eb193eec5b5fb9e46ca36b6dcace6e5cd981f806da76b763f5a12825e7698a41b1286d1e8ee6eea750629eb1867636572425a2e503fe256cf13ad5ec455c9a55a8d6a23fd8fea5977070e8859548b229d9ac87e8912e6cfd7a5fe5712baa9d8434cc64ccd3f77d596f46df7671b660596c8f3d9e2c97fc89e388dd6124c41251e7422b420a71e4618f5cf9f0a63fcf6a4f563a8210cb52a6df2e3418ab49875323006c3be6ee6924634bae80ad456de10499e510f8291db8cfe87014399b6aec8a6fbe16e3dd8a268d6b93a2e177ba323eb2e3e74d41ac44382017f05a4a4ba28fe8876f9bcfa5ec60651fd3fd4732f22049bd518aa59cddaa7da22977d697f9a6136ea289256aea7ea0c9906b2476858bb6b80c2aa54df98949951c3cb0de766f78ca5c168f47b55aa7177485afe380c3928a63c7f15e0c672c6764f3699d9d3e7120f8ce5daab166f08fdd074a08685a559ae4ccfa4baac68e9f80468143c2a5a509053b2122833615a9465a736390c288702bb430753929f8b3faa0686fab477cf91dc76a4d8f4a7eea4ce9bc63be9ea390950824895c03e33b309bbf8fab6671678f0da96a5a06a4c96d4f95b736412f72bd5356f667d6e6abce82c70247b51adaf5786f27681d1fdd03f69fac9c5c94ad0100382b01357b7c21104f9604a5e1d9cd921c032dd0588bcd792ad255336b860cb958b5ac820a22d4ae998966ab5eda93e5306c3fd2d75c1631d7b6f5782cb43cc92914ce5f2b3655c8457ae2480a53d4dc6ce1029724d46adb16d8f19d40be2dca39d6eb1f473d20f7c3d90c0e4cebfcf1f1f01a8fc97b57bf7896ee155ffa3c270b6a8764f69dc2a795225860bef998d09027ec4f2db759697d9f2f72c2fef48a0e4e27a2a1eec77259f53bd1d90324c2a7d6fc37ca2eec6386504a283232f34db2f0407ae1868bc252b03af4139f2d72a9bbceec47288d282338d2c7f64c94fcba0f66302e1bac224ff1ea2a07341f5b2614e8defd6ab841f4e73db4a792761163ea0d650014851c8218adf62c5876d6ad90be82853bfa2b4bba0f80ceaaf326412eaaabdfe7c31b99b31aeaeb82c08f90adc4695732cf5ec83facaec40cb895e22bd257362bd29a075f956acd3988e08fca9f15ebd5a456caf6b9b1302e22fab78ff919ab4720225b5cc21869e34c73eb85b2facb9b25adf47dab1a9b85bedf41c9a34597d0584ef65915561a1667a4445d849a7f09afbeb512e56d5eaa089e1147457d944dd77a78c303b68659771c1ab0a8776e97bf238d751cfbf2118cb196a7741429162a3f433901bc07130725ef3d830422cbe056fe02a6790e42b7d45268a3cbbedfcd07f619b3d944d9746c324298e3242c9fd3875a16570bc41650c4e948e6cde13c5f01e38e80a8236b59746e7e76fb206a13a9d9e108630c24d17ec7f807eee0f4bee724f664a9774868262f9842004dbbb1e6009b2fbc816fb0e07325a19a5582a2166c9fd7d14b8832e7e47ad6ec1b2118bc6ca91f60ca63797a89564648a562a32018cf6cb826c7240a5b9a98170f26d2ad8caf5a085d8cb5dd690e688257212c94c81995b67f71c63dc37c280990395a39def2821ba157d06990b27adfe12ac8d4d902d564ec1493d2da93e93c54d519d1d2271a033c6173bf9ee70f99ea0be270ea2fce3bc32c0769ff766e47a386bc1614c174579515fa3ff2109978c82113e979d4c2b3bb24bb73a098298432ca9b67053633a13201ee7b28c3aad50226d7bee6b665652a9b0a807c7dadaa591d52453219da489991bae1b184b6473e69a861df2928b8a7fb8f00d1ab5d02acfb5b5109c0dae642620a140ab83e37c385f062c1c17f2699c2b3755e85da2594e120fb1aefa7d2b2ef3682b2e2b53f37f85a421cf3fb47968d127e51b1879ba76b3da3d3eae3c66195daae48a8bdb6022d50706f550f9424c7266c7992f7dd6b062bfbd336f119e4e260f71a5eba44c8b14d7e27593e84baed59c034cead53462e5653877862459371641dc6993d53f210dbebe3750aa1cf7c3729f1a90aa5df60576b6f13b9e223bf5e52dbdca97bf4c8762a123cf663d90048fa5ed6b23d7d28a974089d5a77ec28aa66a88da125674496b9321574537df609d1cacc1692c603c72dc279e66f7349e299db4096d8b011c829d19316f904e9f410d3fdba3e306e3af95b3dc0414faf919cd28a0d1e65bc84fc5f3a60bd34488257f8d01fa852e46f67015d8a95d7a631c03cce665f0eb15791597fc428529e4f17a807a96993f2eed7736da7b5b1da4da468825523017cba995ed7b3b30647b4d07ff909ea7a1633fb1fc29a5954b83fd9e44a3bf2f48b1864cde6d1f5b5f15df2cf3893a38bbad9226500f4d946dca2a13e8aad573e790b9425018158f817a52f342ae94d3f7d48fdf1bd29cdee93f0bae5c80bb865a30e97f2cc6465332714c64d547d100bc9fdde343bbb9fd29ab4876886d9af00b59bf0c5bbdd92fdac47586949c1c4773d7243ab212cc7993d5897455bb9a3760d3e2f0c445f7abe139776167f49b3182440eed4e1fffd8918775aea9b0e2e5c365fc334ea8c850b099f7fd3799764552ae4103012978a48a87b42e6e969b819bd9b2dee32c73a5adaba063ead1d60b4bdd6584b17a5f64e69eeffc8ab3ec9450f5aef76a1b21334139179a6ae5e30cd59923794858dda10c94ce1ee750fea54a829889cabbf980d40907aa9d1dc4cf59a923e9ad0c1ae26631f89e6bb4f93cf0471799ed552416cfe5169c6dc0a2dd3dd60cdcc8de3daf5b3d1683002904e2ac0ed431ba30c97d9893ec77c118a4bcebe8865a81156e90537fcfd68df5471de59d77581996113b99db3243806bf3f6c9a73b6cc0fbd70eb6c0cc9ef961eb7804bda717f2cd24da398790089402b61341dad0196dd69db0edc8b4e32eb518786f360c752d1e29e2df5dadcfe4251699ba4bf06a70efebff5e5f30ae1339f5a78fd04f7ab3d148d9f527329f581b3b129cc04165b18ee782724de8069035ab8ccc53182e6a2eab49e2abc681d82e4c054e026b1419fbb9c1915983f38df061af8f860e9a3b7d77b90eb2127c4ca471fb3ad9177f8e7d8a44244daa7df2b340993e32dac50e05d7b2e103be989cc6d47bc70cedadf95d829491ef04ada7c670d1431f24b7cc0ff1bbc36871ddb1dc9a0d5d6594a643e4c83842083a8a957118df041593795be3ed5c1ca7d354712eee3964aab572525785b89d5ff31ca2fc614cebdccf12a5c9f41d54898d04c503f68844a4f71a1001e09d0cbed86cb7ae729f5e3b818a91092e87d3d647f695a5da81661b03a56429026df6eb9081bdd07460c7fc51ea06eac2210156a830ca5ac3ad30d7801b351612b3c3afc4649aaa8e188de5e639eeb5d87347d059bc4a6bd9920b9f17846d1139f4dad21c1b3884e94e18bfe97f30b39a060b0e02a2ff2043ba603c70e9f3629fbaa51c3fb07da6ac8ad05101c4b4292e61b6d64ae8d0c02aad95773251af516b8c8b55d62a535700541d65d7116262bc0db1f1d998a495b5f1141605c58926c6f3f4448892a1e10d3567c1126d22a56d90632758b965e50d1043e1934c6928d77648b2feef4f8afab4162e5be1dc396874333f6f54faf959928ca281ee37a0c79df067e049449bf05a92745a747867d6408b03c5704b19c2fd561f7ab3dbd6bdf0522bd5a96a5b16ad435bb62ede77df7dd2390315408c70db082124a43d12e2f8d7c68516a814953792ab1817f6b1aab26faad04bc19c8ab30c7027c8469c5d3ce7ff9998e60c9480e52b2738a95c6067cc1ed51bb68f380ec9d42c28dcbb5744eb9fb9370c8d3c0ea5a48c98ddc22825505dba8c07aea473a715dbcae8b9f899496f8cfc03ddb46b3bdfee3f7b292b72632e26a79c41f36a0efadbb853dc67c26b34bbeeb144251f0da1f6366cda91d96d5ac1735d90507b664dd5fa036dcd47b7b9ed15ff0cb7b085b54c84961d81dfd6aa34f833e2e12f17d47096e2b351b197c5cb7ad57b91a80ae29731e33a230e07e3273e0481ce0d89585596d7f81c87721ffd241cdbdc8f03ef7f463a78a0ed66d0414ebab3409e25a02b01c9825551b0902a1bba72bfebdaa5aeca822020045c382b2f3bc15f6851769be0a29b2598b8e0fa6899896346f6ccc9c5a57acadc52e28de971f352f576a04d3a4989b4e2f4d717129f67f027bf2c7b408acec7fcae970d85429042cdfde7e817a69429bacb3c2621b6568d179d8c694119643fecd91f560a98e256764c131580a106ada5a5d9d29ec59c629df8b53ed33a8359353c420e805a2fb77acdec7b7b2225672dea74c090b48298413870a0fbd5753d5e3ec8deef70c08c61e739c313113b80d903d69bff6b50578bc58338c3d28014ef46786d60c1ddfeb101c4944d568e1f3156c709f4d14ec60408b6ad3219ed0671be1b64da37cd35f485539733d9666dbe4c0fb275d0c40e3367d3a75093043a6b0d796a66b9da58b1daaf73cc830d92074e75408d4ff956a04ba0d026260cd9659b5a280b304a8f7168a0d1203acab595c2c258413736c7d41de7cdbbbb4f0ae7d08645d1826604bb97ee5938e7e4feee11bea49b6ec38956436e49183b13f67a14c46ac09876dc17cf60b21b73a4969ca431cca2dde8c3ae27feea438ca1c4a5cfde3fe15ac2420d78bf85d1c452a527e2e3785e6ced9e652f5e584698419df1699a6b3bb0915c26fad37963c4365215329c4fd804194102c5583c29453aa9e54ac197d6832d52e9bd6437d85997c6f0fe23f9178bb5d40d50b23ef27dd60f09da1b6abbb9dc4ddf2a3a66386dbf293fad411f23eb09810f383505ab275bf8e5826f8df13ce7758ea71caf8ce7f4a28ba7be69050a5d6e8fe4a93a5b2b128b02a887a780f296f1809dd4badbaf7f595b53627ec4d2f9c315bed6840b7143f1e7b6296171c530ea3d75282e2dada877371bf407682924a9292d838cc2e036511c121e63cb9cff874b95e1b48ac9b624a7663eabfaf9284854997afa886232d42a262d54965e49f13467c7f3fbebf387349d061381294bc71d6a817565de81a2985820dddbf5574f8051a19487fba5c9652615e605a1d64e0d0961a5623d69e2ee12bea5a14871cab5bd393e37e11511c36a33cd8f491107aadce233866533bdb5bbce55f03fde8a5d12559a12858b88d5d12770250943187f4ccbc7da3f265a74ba1994d0c2e8b6ffb8be4f20cf4e5623c4bb76d2c9b5a911c2e60864b38ce2b379670b4ab9d57624173c0669a8a8a235a9b5889b71b0e3eaa4f99f2eaaab7cfa5f7f61650ceef453979667f6f6df9494e9de4d8ae97aed915bcd33400acd51d2d42b3f2aa47b5514a09619cea33c56c7edfe6ea6195bf08e502a6da0bd3888c240314d9f67c4c4ef9a02c5f995070d561cdd92f7e99d146aead7f558a9344a530c5a32ce3e10676deda31280b688e4cadd426286428780ac909e7270b80bbf0b9e6e97bf11a966150141a96aec0701a99af7855a0a605ddcac458deed1030e755f352379c9d5ea703ea431bf21cb8c7ebac2a47b2b71d282a595eddcdb666016b7777f044cdd1b040d9353873c1daecea56c67f28b020827e3563a41c07adc780ffb52688409205cd4d7b7cb25458e23c2bd75c6145a2752ce501e266788ab22cd8a45ad58a022fdfc380493c48b56047b7c77ffacc3568cce4a3f92b8d7f49c5bec00dcafec4871ee7ee3e501362bfa377314a63d83bd5c4b0e458d9bb1e06f1fe92afd7333bb3f1171fbcbc490378c5f68f5c2aee3854aad62d920f85c972283486b168bbea2efccd9f54cf5dfa2425924c25be72bd6de5c0fa351b721403dedd36d31dfd52609897d78707c6c94a48e6f227ad0a3d7a1c0dd4a2ac0480348c750d55557bf6f16af262d40417f343b6610bd255193b11a419377b3fb1909cc78884e8bdbc6a49ea69cbbc32c60aa8e4ad13c6752428bd248fbd1f351dc7a5168437eda5330ed27d5a7cc0226561f25a0784745bbf98e4f3bdb01f2a8d87e5dff490d4aa746733ba60f050315aabb89d1ce85c97400e21b84fcaeb8ea563b7aa561a4e3bf505e61809b10d0e3a5a541469b9ffa659faebe8926814efd9edc2fc255ebae8396d622cb159571768c06d566a73ce0771e1abeb42021bbcbf88704beeb89b2dc5f0204f0433becb8aa05ce98b9058490c450a56cb438073aac658201ec27f7b0f50a9155edab4b8f46cbb3469ba2ed99da75fa18a86b3b34019d30f31f6c86e99e175163dd8d96e5a77f0cd713ba237ba8b44622c5645da0405797fd4e01666da351cb82da88d3a1164a62b3eaf52f1c763310f1d3cb7865b2bd3d853f8d9f264cdf871bab440cabdb543b42e8fd18668c1ae0ed9a47916d9cf4acf5bbb93afae0e90d94196a48eb3ec422ebd477e64031923e7ee181b29f49276cb38a2d3ed3a999e657eca2904987c29c19770ea291afc3b30c7221e2e3007c03297490b398ed1599caec93ebadfd7833319a6853434cd4c6ff13ce2a21081bfbbd418aa231f585ae57e0e661ffe90c6e9c032d013d51ed00bf8d309041aa2ddcd9b8c512850912ad659242fa2793a6d5c27b06b4670638e8b4a8f01f2c2eda2ce4a3e60b7e70e41f5bc850bf0d436ff10bc99b75a9b2da06472bb6dcc8dc497546c898950374228ca34bb8b799418e49e0b7934beb9efee2dee029d1fefba33e66ef81b9fd5bf47aa4e321eab4d42c66a70b963f1513ca05e38df205b7d50f10aee2497e526e8373c6573361444671ceca8e4e580f5766f6bcfbb980d9b0b672856899edebf5f7fe7171972332dd840baf08609ec1b2fb3dd3f2254b4dd5c0ec5348190cb03878a40df7f53867e28ea5c0417719146eb1638e3ade6dfc8c5406814b70e5897e2ceb02b2f4a9ca9cb622630039d2eed2afef579a8deecd1d9a49753946805f113e5eb96a3d7d4255250c020f4ed039251e6995dbdad7a7cfbb3c98da45e31837d48298e778bcb95302ea04345f1bdbb02559afc56c2f74ebdf6852f513189e3917e108f04c6f16e07645d13814bcbebbed480f20ecfe1bb92d530c545827d75f2e02724f619d4142a9a4d1e214bac88d9ebe1cb4014c8481ce872cbdbd16adf0416d3cca604e21c1c28f6cfc081de3705f413e495422978bea8c1cf9e9ef07367aabd02af18aa0a7ea8e0a4c97eef6aa585bdda68c873c1ea8e842d086bacc77ff439436bb5aa53a482a139c6a34e884b293619452845b8430250809397de6fcf8bdf2b867c519c405eaefb228f7a346957133db4e20dc03abcad56eac423c0d8ea251769cd4e28b485706567a3f0e38287eb9432763a7e4416010c58710b6f1e878183a038ee9d83af7c052081511a294415c948655a46f196e23d771f03cf230cab1ca44fb16f20255866d798094cb0043849512ffbceb5c7c756c13e8b6568b1d83ee06235223caf6be6e76897ffc950a9a0f7468d5a231136e4c15030c6623fbf670f10f83b1b764d21ea637ba7d7b2004ca5398d8dac1ba763e1e46276a20eb7217aec692e5f3262845b2922e96d90d2c8e5898aedc33f9f50bd6bbedaaaa765faae5506807a6c42aab41a2c18fd75778232b6f3df0b058537be769476de72225f23db6eb5ff7c63e17fc705caf9f88525073256f5d6060f856f6581dfd027a2cb75fff05340fb5ce528a03e83f562721ded8c32b6d6a984d64ae9158a02103ddc0f3339dd01619412595634b8727bd4d9604505866f788b86db41bde9f6d479ed7a05b9b793378ff55c2996fcf38d13e3d9cd4e0912eb9a238b3fe99420dcdd8c20e7de6788e5c70adbbac3a5fb1eb5b9e4b58aa3638b2748e514370d0291df44ae6a46815504cfcf428a4967ebb940e80b7e29e9d3cfb943736f14a93ebc05837d0d50897a1d10bf1b08a6a767e52bfaa887da40d631d6cfb0b1011d1793d6e51731aae48a872056dfc659e8d21b0d4e5672ea4d0d59f62a278a9acd3fb1c9d60787a426e8eb75230b43d190ccc33b6f9fcff862cb909e0f324c203e19ae64c2b86fead527a285a027f1ac53ba965cdaeeef7326a37e44db7b866fe427d22e57b46acd53c954e85ab05058961ddcd81cce51e91d179b711b6db9a8540ce58cf18608ea37307b03cf2ef054dc793f33b1a8b7d89aba40a94b836688021b21072ca7bacff41f7d6e5a1e523f9b6f1606161851b033ee3663d8571d7d72e53d336593f0cd2ec8d49ea7e8e6676741f9b5d697e01e8d45c5176e433ef72afd928838c56b802bdf390b15293d6aa49462c95fa1c351eb33755a79f24b939ec6c98c12c65b879fc4e33a4e49b7b7e7f8e9c73dc07c18f239dfa367ced3c152c32aa580117121df1c9bb29fe4f5eda5d1e725dd6e8ac216eb6c78c443681ecb956e6b0d311d0d8e489afaa665786a72a1f36bdb267ffbedba94411bea68ea8d9fed4316afefa911cb9978ee55afbcb2fb871fa362bc14db19ff92db4e66d2fd553fd448e849630e27ffc3d4301c630b412aa7c2bddfab639bf6f49ec9e266bf57ce84f064bae9c7e03641f48f3eebc005469ab5824b3e1bb322dcb3075bf4280a11dbc9bfc49bf386e5a9cbcd87b595da736ef87a9f3b67e1fbb1d4613429ec0ec25f1153f708057e8631c665a76ee11339ab07e14c21dccafa2a5f621b666fb8387583cbb2ac7259809070f1fe663651f1c56060c28feeb0969cd0a4724827a8ecb57d7197f7ce8a7d3c57fcfd3a0a1944549e7392e41245798fc482c93d985367a58b0007788e93d49be7e13458c0db99bf1e944dbcebfbeb8997a790b5563a21bc28d191bd17080f45ad4934511f1b7a8b7d4d5388d0468500e66d595dd5efc36fd370c7240c59b5b0248f6da1694b5f4016f934b663b7de8c2d5e9375abc695371768084bd2fb4071ca4e40d843fdc053883271e42ab24081d8e5dfbb2c613fb86111e5a31f7f47e12ae07e5413a5465c5d838b9079d8639875bd8e9cec422b5a4d28dfb8266824a4a2f046a36cd449c0e366f229f59cb026802020896febe0a337f756f9ac287f22eee86a44b40d4307d657463f0271aec284c8460f2bb0d819be180bf5f532aff24b5339c69da2eab792cee84e44f9b7e2f0106f9cb453aa244c054f2bb6394f8964ab35976e477956955868b62187840e6e92fdc07e26bf596e499109538ec65eb76afe35ba6da74b7a6e38251ccd6bab3cba81090dbc903fa14f822d41b5bcf8b01cf4301687dd2cae8ae709bb1e075ff71189d4c787b53d61a182f625409bddeb3ba804f7288360ae28e5e270fbbf833a1288c2500a96d93bca33f262b1db74c5419a22c0b2429df5e2c53dd3092cbb52480e402bd7dda9ac33e5b08e8bf453dab93b2827d7932b1222f57a55b8b77efc2c7adcaf51d2152f69389f0d219f01981d1b6380eaed9e8f8407267d7ce834742a6ef67f1b1ca221f4ad3c632503f489e7ab93607eba6eca607ad0bed8477276ec4b3c0f9625e74040b4172508fbb32ca37c064b05a2226f42b0f79e5d5dcf60cca00bd545764af6f7ddadd74fcea3fcdb0d5aa5020d4fcac55a19a07e8381ce55fdf464cba643a2648a6ede6bf56d86e8cfff0306844d7942c6a549ae61601c12c574327b0e67ff115ad8bed0187637674471e9958fb2076597290e8f6fb0d68d8709c2e6373e59a8cf8a0d3 +Output = f7c284f51e9ad854de17561ae0921eab + +Len = 75704 +Msg = 91686f2748f6ec783ab53551d7a0642f3db692986458a8a498f272bc2dddf5a26e8403b1d6c60c67839c3720e7fcb124c1fd45e44b3b2e81b57d298ed395ce1713881fe2b1ef62f42e9d2c57fe82bf1b81cf959b345b3d022946660db4dc3a1268bced414139952a23003c7f83fb331b6476aa4486817e2dda9552bf387ae19954679256ef6c4e0e4a0d8e1fe030b82d5439ab67a973980cb1b2152ec8366cb7c2d339a9214f34aa8b0c4bbf7ce6f458395fc18d05fa34a796e4d6e2cad98371974608c340abf005cf449ae8bfe88fa4f931133d02ddfa047274bd62a82bcdd1bc09272bb5482927fcfea42011fd32197df7caff08e6912d2baaf336c8f4f3de1964bf69e7ee8819fc8290f2daec85c0adf90d5b7fdba22aabcea0e694fc9ca0969ef8063d65b4e2b51887e3827e2fa0717e05dacf85d401d828ebfa720b71201c01f9892174568a1108b17d717bd9c1b2d0d90360acd0bc9c00fdfbcce81a6591d3eb7afae5161af799354710ab2a2c5635b25e9a183e63de9dfe71095c3e77df5df5622f7e9b994e143cc9c5d5cbe847f6b874e690c4fc864815e2912f855fece740c72a088e0f00c1ed8cf9c363fd6b5a12ccaadd0d917b496ad8cc299924a2b9f434524a9684f4e87117153b9b74acabe9ef4fc7bf29a7e826da22111fcee71a382e0f0e5c0112d1eff27f061b54f12f64633e1683cdf16d7171fbb1c266a554343fc91a888d42c490a6a1ec8aa52130acb2de920084411f7223bfcf28f3c3ad11eee837c1316c087cbae2b4907026f4e8639603df567f47527bd634f97d296ef7c3d42daff478e6dab6a928d6bce7c441ffd030c74b932d38fea8a8de0dbfde0d47f6c4fbde4ea6d223600e04914ce7df0df3e2616c66194d369df37ea96d477c01b4c44df7d7908e886e2fc2f73da7e91567e155c0de53b9aa1edc835c1bef6b7a77f44c48f9eb336d3b53b6f7a24a88a093f54a4fe422a3e2912c922bb11f0338a81da1d89d01ec5a2f418b986319e335e1e6e82261d0336760ab5620171f6cc5ad07f4afac18dfd8b2c3e7e3695c235cb87bd8403ba393c0f12174423537cda9f07aecd60c79346e2c9f73de9a5b6f9d807dc2b15ce4e875ae569799f3af4e6ad73e3154a76c14a5059ed693df5df081a2b54d7eaada5d0ffe12652e3ace1992cc1a6c316338a704a588b80a21accd8f84e822ae0fcf1715481c8608f0de53a936d845762a2714137425c34a468e2f508fe1e9497209410ff63da32fff2527357d3e632ae37f845adb3d9d5b374c3e4a2b674958bad101856f3d64ac4decbbc008156f5576891e624097ee45dd2d2107c141eae2d16f7f001be47086c47a37d1412410ffca8d0bb20cfc5f101f7b010fb73875ef9e2be50862f970c54b19c4f18f35ef31c9d372d2a83497c5e47c05e877149288094d5823ac460b72c90f8aa65a0eb3f35aa27c4b7a073f6c167a561c679de8b3fa1c02db6191ea9428a5b07b0b78054b654450a4ec3dff0b9cbb1b33f19a207a59e10bb7e9a3b4334f235ef5083b8d43d3ff1865659d7eac5e887db37cd5e1e50ee59b3fac44125726d1be9eba1ff2e28a1cf9174df065564428a4266f14d4fb026dd8fc133bac0995f6f5fd89ecdd3073e21d410bfe5b1236e5b7133420a1c41bc4ed758452295084dc2e9ade69f536769bac6b098f09e71c05df0332c1ef4842310032684f3235dbc98ffe1f5fe3fb7c8dcd1dae6b17ddded1437dd1be669060fb3abc28fb6ebf820640b0b6974e876b02a9e062592cfc64910c0979e1afa35b6bc29a2a1e86f661db6a3809d6dfe32d40683b8d23f04d968d612f92f072891dc9c154d88021e2618f351f82e73e16a88f31b7978f0dd75d0c6b7884b4564b8c5d5e7399e8e88c686cc8ec87911228c6392cdae96628a29f58516bb8f504f0926ec27ed42082fb5fb84c27829b03226d85832fe96fecb746b73c91947b2480164514fdf3ee99372fbce859dacebb0b87ba5b3b0074fe1d38725470810d5d04ff2b7d795d1bd249bec0c509f7f2dfebfb21df88963b09dc5fd0c092e8755782376625797a6fd738f60c0abf41cf1acbb102349d148eb3fda11ba97f2f79bb05a53e3385b2b1500cbee7e003202c11b291a58502e033a487e89936bdc0e2319231fdcf256dabe4cefd9b6f5efcd26fa88351f84064f285821b9490d601776033c3e923e213233c859d6ede573d8adab56f4fb5de0795fef72252de525c02f1ef434c54430ce2003985a956774b1afae23de8e56430e2b6ede51c49b738498bcf996c8dd1c0b0d7f29d93fe448e4a7936d561b05a49a3566c4b39f98ffc16d7d9ae92f412985469b9cd76ff486fe4fcba1f053d49b99e857c3ef31561122f7d176805b190fa985f95fd98800b54ae2e74041bb5b9e89cec26a690c6b6e15c2491b00fedd34f42618f1543aa14a672b46e6aea3f303e64337169593315d167744e6ff6d061001b16aefdbda5ebcef639b03bbb043823c00166709685064a1617568b0381c473eb27fa9e4e9818320363405dd62c58ff76fe0ba38fe311b433b2b1ee7e2984127a3b7bde40ab233c60da28ba83de193a4fd36aea8b76bf7784f0687eafef27448ffb3aa6d9089553d74770380a42013c13288b2ed46597fbd2768125ddfc3770f40f3edf63d4f6de2e521ec1b2819a6d8aa47455b0d922a9e4ef07c952773c006f1e8f6f243acc472ea23c3cc5c36c367bf02f4968fae6e78401ff545489bc5bc9d036406560a1f59fe0d190892ffdfdb0b4c4f043ef6d1e785473ad2c5a41e9cacf3a386d6efc5049b3e6a747eed82bef9739348be13fb789916abc2211521239c0a341868d66c0f3c4826846278229014198fc86f7e2187f60ed697dd7783edf4e7a42f6e566ad67bbadbbd003845eae5be92f7e5ae0ab2268039c87d339d5851fc622069d847f6b3f6f882baa6731bd8d32b7b931c1d73a52b43d862e203ff1db8fcbfedd489ec8f8d1b7a043b30cf87e7d7b80a50b038ec50834c30fb2e4ec2bdd2426cf3b73468fda3177f7ee5625d7d1631ade4899e76a0869869f792d3db7b915c598e464acac93dcf8eda2760d3f3757d103ff000de9bbc51705fc80ae262a862563cbdac4f602a16b4e56d6785fb53feb3db9a0c8e92a2ebd6ac3460520395f8c56793e54163169174193dd2edf5603b1b3fde1e0125b8dc1f657e80b4fed88439975f625b3281a45efe0f3f6661f8c6b8e532b1c0e58cb6bd03fcc88584eea9255476cff76ee9d3d7fc580999c1ac061f543e6458229ce0321035c44e6646bc0b27806a9078adb471acaece02a4e88da11567a2319d480d1102cff069f38f417d78f2eed0d07bbabe878a090b8c3cd2009134f7e7963c81dc6411c972bd16edded144b91316a24b010560274ed8275790603cd1e4add8d2e6bca1dc03337bf5b1b90c45e1abd009fbbed7b537292692e30ac5dcb354bb94d264f69475f73d1d98a8a031c700836c010c374f4eefb9286ae98654ce1b433c21f5968f4568c8a9f618a6f93dd51ae5b386253200ac6d7cba94f4f6af820e3d57f6f8291c18ad4f4c918708a07a250b85a52819f6efa1f43485781ed1f98b1ce6e1a1fe447769622eabd6ecb9602041f9f196739c19f5438b43a659d002285f413e1a7b79157b86feb00d11c337ab2d72f416cb6acbe5df01480614143c94790974c82d046352124f56a0246861042293152f7ddd65d22b491afdfa39092dfea21e318f70f18bb882f82671136ce9c5dcdd27277e8878bcb535146898d87354ada2fd2f694096de5c2d06944ecbca8bb2d4b444c8941807f81edfebce5af32f8eab716947c0f1f81d5dc70a94fe14f8a7644d5246295e916440c6f043e12bc3b78034d987033b9a6912fe50608457714d3468dc71a8aaed9c335012841b9bc5dac9ce0cb177c249a1e502e24bef0099f6ad8d4fd5a28b71027f01cf295ab1ba4af0935f51af246a5a3c7b5cb1aebee746382128dca78ec0397c52828e2f0bf59a9d2b6de209d0811481de1c2c33d0cdbe7ccaf40118136f93c3d8d93d29192c3c180ca4dd286522437d919d362ee4d1b1e3f13ded84c7b3c3ddfb3fb0b957b2c209ad80bd8b40d289583c7c49f07987e2f62a62fc6dfa512c3340228350461daeea84ae1d92f1f638da3525e218ed44a42bdd1fa84449ac4f6c3e3e1f9e72e16523387947d00721e44c22269918eebc881d9fa09b9834499fd14bcefff45c92874c2f7ef6d2eeda0e5679fad960cc440123d8b220ea289db01aff61bee261a587ddd02b951c17733961b31f2d91247fa1d71ea0e2bab53d0291dfa2b6e9209ee950c10b9d0c2fa1d7f6540ff02a75c3dcbfe8195b7a589c29ee52fe729927e31e3d889b893385da7cacd349db8d4eb53436bb67e5b9913f7878ffc19c42d616a90c8d57e422b88199cdb7594a3a0dc82ae40f393be8ed9b80da3cb87ea6c9ae2c3655cd384a362bb20186bac6c13171334069f9a898cc24c58aa03fa415511dea535877f01a9d5d47b0b7eacbb35854efc44215c639cb8fd8f2c0b3a71f3afa95ec2bc496244c9aed83d175e370f0c7a2f82e3a1f5c4a311dbaf4d0f234b5a8a159464fb4f7d248f5d349c8889a895e0f4494c30e60e69d163bd3041ff67fbc8f331e85b6f5bcfc0327a77f3590809c9741fc4d3df82f38550dd1c97ac4e7bac1f23ae326be6b28980970e674e384e7bd78fb35088272975c99879dbd308c07ec1f22047ea26b5316f11cbac103f4e3f441e81708805f3e8f774b0d31b9eb4860324a5649524c102267215894825ef5ce35697fb88243a2801fb27482d173e0b0b43a44f14e7bc42ce4153c79ef31b1cddbe5bb92f8de47b10b54701b07b455701d787d10e77903a8e07ef2eb9b0b9c55ade36722647db2a4c2978c84dd2b3b00e66b5b22cdd23328f4b50864264b1a0813f91ed145a057cdcdf2363ac256f5f5a7a96ba15205f72f895de97e017ebf57b68d2f3a2cf4cbbe95fae9b747b61ab0c9a92b171482a41f26e01293cd24e0c70e1634c78ad972d9a3283384ddd71de4c4f115eea5e6ee9a55c2103fd9cc42c8733aac03dfccd1c18df0802e152873f441f7b8a266812b038e9a6eecc7e359ee8e5111799c4d8ce8aeea7c1d5e28b15199538fdcd71fedfd49df8b2517f87abbc7ffe18360e9f8c19e7c73cd49565a9f636b07f887e1abda0ff7f1733a7a3992b8adb8cb9e10a9ded53cf3c8474fd43018c4cd8ff994e94c597a4e51bfe71b05c8d0f3bcd46014b2dba29898d863b2a621e72cfd9c982aa6aedcde3b08dd93a781002ed18446cdc02a23ceb98d408a842748b2ebe179e49b88a64da9b5bc47da69b1c6a42e333999395702a4d644a03c91700bb58898ab7d7f5cf92837018c20fb7c579f42b3fca091a2d0d5340eb841e8e373f4c2a2e3ceeb678d311d5bf51daeb65e4d62576b78bbadb5d5370d1736a619a8145ff72222556c565ed919f7230c064718fd8c1a742fbe2e2f4fae618d419904be9123fafa55c200fbeaca26d39bd2ae9c84d09e45568ab64dfe810ba853d8063e06a7b2d9650f09a2c2faf891c6a1f13288a34b4ed869cabbb4239a3a455d492d30f10e220bb9ccfe121ad10024facb958992b6032df1e7e310e48195ae9f3a06a0ae41769238e73828a864812f537a1ff82d72f4bfa9aa7e9562565cf8245554c62e1139c132d51ba73217a75e32a94c64b1f6b615f76ec8a21b8cf2aa73279221fee20df10e1302ee366ed52a1eb5a55feea5a9b971c16bd78e99e94e122d3934af2845aa412d789e23debd2b8e4bb53a222462229f2ed2962a01c34b77d2c48e9d7883756280f71788eba1daf7b7f6840ae751d9d623877e7c58f33b1ab4ce80784749bae8ba08eae41a35a0e1a6d3ddf7630b57cd2c14e0f4040b85714fb1ca9e190b035a4528a8b3eeeb25e284f7a8762be124cac4e57e3f977ec3221018cd9d6239e72d9ed0a176de34c250debc7405a695b9857a8396ad87cf6c93825df9e4b778dee9338b95bb7ca51ee3009ca134677b9e53b979dacc696ffa4c330be0128d2a42f3bfc3c5e02eae83efb732e070e3153bdc0e22bb2a90e2f4c28ebd008557d0bbf37013e29388c3a9fd5f099259adf52a74e538a836b2cad48d11bbebdbac0eb26f10f65c23ff86e982647b474d2c9dd2c4db06327f238a220248b2f2840e26ceacfee59330176adb2574126fc9f361dd225c25da7287a355d8b02cc50cd2db5953b65c384644e1f73cea697c5e77039243e51210af33a8f866d473d3d4ae7efaf9c3e4bbb52c7eb65f43eb1d894bd5aa7012556583dbfd723312329f7a05941be5a3f98e2b22a3a1031d0193c8c66a8e5d405a59aed5236bd415e3887b5cbd44cdd3153006bbf33fbee267af9b9b24a6520bab6d7eb3bd4db04c013f47385cfe08cdb231e67ceffae91067a1801eb69af4e0d30171fc2d805e2116246c1ce5b03d107b1438d9fc5b18439c1a04e572c4cc4c3bc62712f6bc34318cc8586f0a03b137ba577c57aae8d2d87f8998740bcc3eca701c1c9c9b49e8f9efabaac31c513bb00a6c2f7a6e2c9f6b7c70b94ec409c2d80a83b0fd9dc1d2e6b94ed1adaf3102f5e5c2d0b6c88ed4693d5ff5da4e160ee1558d92ba70ac989474124b83251bcd85d70bfea14c88184e1cb7cc9afc796992fbaa2057b672806faa9696e83089e1ec58a817ae6cb0e1a6a508bc25719c69596759e859d1bc40e4b75c324133f3e6a5d5179a429b91c6ff60d3330e200784a1232d594544d250a034d3bc22c1f2522ee6eb15127ba31eb4daa7cf999a335206b995018ea25d160ead8d73014d0dab04088316726f4d7f636ce6e06c42b847f685116faa5cc527ac8bfa1561379e57a1b48ffd06f9295f87a21123fabbfeecfd3032f23ce6a30be65a9a11d7342cfea475625724abaf359e14d6f8c9588fa787256a47aac26f196893fde6b7a541f668b59ab37fe957a8133f78dd6ccad30e20ef37ce689291f69fb29602a72d75d58b1fa9705d54ab1d938c97503965718756e81bf51ab9b419e840e2f40a1f212277fe0f3c6150121c7b86b2efd3cae3b9a5ca975a25ba3e09fec97549750cec53bbeb3c76107e450b47a85c0aa05d920b79e13a7c1e16983d3fb6bd615c693fefc351d19bef318c80947be34f43b014f36fd665d958516b2a27833bda44d6845d2aec4f3c521c8112ce7be91c2244d517d414b9d088fd2f6742d96112b2b752325ef505c5ed81ab187222edffb0ae6adf63269710146c4d5b1e03ddb91a9e31f5dc26a5d7162363280c0b6278933f3eb079769e069f415d9c15acf23c00fdac2e2edbafce605451c8188fd7053e89d941a3af2f226dfec8a0d63f5ef9fa581921c38e743a50a6ff5f143acc241700c2f96e1adb0214f726ffbc3574916b20119746d9a3a96b9db4738b96a253b156744e3554121428ecf10f4419c380d8082df50527ae8a259b299beb2e0a2291dd75b695e574e72e32af561a66cc56c552b6b19b13055af341b74eaf6b640f3d183fd8fc3973d9795aba7a8ba71f61b7a244538506389a6903f5f264c9308827994b1bf4ea8f89aed7cad334550d5033796f513f7bc8d70b646e2da7e1f00bc5d310061c533876433c28f680fb46a0ad3a9031470e268f3ee57856c5203328ac48371dbf1dff0dcafa8d6b1df43bc199884f8a2827f22197f9ad14591e7a6d5f8b18c969a553de9a85309757fa5d319cc505c24f438c4c9b3384dcd037263833fe4d9fa883d767568eeb01bb583b7f0b834b5048fb754ebd059826c6f4d717de244e170823ea167359f530d4a857188a4598da91ba4dd661f24f68b9e20d8ac28f82b5e5200c8a7588e7bb2065207c7d8e66b7b60a66424e8c233905992a0f75b293f2dbe2cf21c19e5af72b09384979b04d8e22566f30c735bc1e5664bd245c1fea6468f6a28b0bfc978b512efeddf37db5b46348c9106071626f08df47680a4a0e70f8c61714a94645de3f20f4c87f2927c0f53bf47faed1bec1b9835928f4a368af27fbad5d2dedee664199aa8761552c3a54ba71cd06e939acd4db5305afce918562e1c5c31e65f9ba14f390a96e742b971e3ed1870d0a6b96d761d57c901e118a363300f4df40e05005b9479ceb28be5d9e53943c35b7bd065d91410c4a3451240e49ef50f4f13abea0752fd06bc54cf461732a6af593b671c3f436233283d8e97790d165f419715c8191c9e264fc600214381481d100d07fa6f5155fed9f3150fec257b2610c2cc005a996517b109ffd02fce31f6c91a366733e7f10dfe8c2e10048f2b4a05bb57fc927259bf2a4454bda4c06a20cc897fcb51ad3f48df33620288f32eb568ab3e22894e8307049f884e69fffa856183678e924a4698c30e384e41f88d4d81b90adc06d6e9d7854322ed4834e90cd0307818be670ee3f445385af7474ffc970e4291d3b29518f758aa010707409c60b739d29daba013b801ea8f71887ca9f4d16ea8b6898fb0a005a9f26f1f061f5b413222f6bf030e586ad75579621d3cde2b178b7803dd89c973a6274825437c07f5ec71934a3fbe1ba78615d57d399c9e44c4a1e1c9898ab9ca290a5ac0ff9badfcee283af55d094be17f354e82d8b37c43fd52b8839b9aba31ba026c994364947dc0adb46864d92e3f4b1fac190268bf504a06c7d919a312d0e277485716bf06a1eb6ac94a5c150eea7139b7e9c0a3b1953425d4710d8c0ad028d1b4a381944990f6c540444ea5310979ed379b194c98374217a8f67e3dea59157979258bcba6716928e3fd4171e0c5eca2f3d6164cbd61fd450b0e759dfa9230d55f843c4c656ccdfa781e3d60624651bfb443be896839eb15c461f99682a4014e2d699cffceaba9a3c84e4a5c01b330ae428a19ece1e796f09d98120fc9b7104dad7bb4cc2953858b9b36714d033412d665522f5d6f94863f5c5bc8f118f1e638a5638b9cbd8fe91ab97db919b1f37d9fe54309c55b684168ca512422b77d0a78dec82955d3855eb8e9cc2ba95315fc718906ae0aee8a51d5af232d8bee810476205397e1b35d6bcdf4cbcde531c514b41a4326166d233eecd379ec1405265d9932acdc26a54099c1a321a9b592294fd061a17acf235a8e17fdf967a643939c48de7a000ef1566ffcbc77c702c069342e23c9b11f5758cbbdf74ea827f1f149edea650c80dec675e607742db201ae4b342b63d3ed50447c45871eb7815767ecef1f170763b5b933e74ec1e5af9e201d4b4016e92057472a1976129a9abd1e0eb64535f9a1bf5632685705f7dfdfe631db298af9a2b4895ca08bd15b5c6b3d36aa246aeb2141c6f9cfebe9692c0b290f4daf680e5aaf319a42900402ada8eded33835be3cb86301086d215457d6c1040079a582d3090686d674b529577be56bab92cb3ec87d5bd00f3d43093b948c44b73b201600c9e555b7786641ea1f39f25a4e5180b3d75945080b9e259cae86cb8f8be0caed62221eeda07e1a41390f1b65c77334ad5afdf889448d5a197943110fd8820207664f3aef9977230b5dc73f649aaabb037cbc331964aae7208933bdaecd6e6bcd5acf4223afdbfc96f214e6cd34528454c116ad2f08818d5052fb19e2c71068cd9424bd206036f7729a5a9a163125412fac8fcf309c7b9d076aebbe5252127986b6d2246c66f2a42cbb2ad1b5fd7d41e2a3aa01c49d2396e435983353fadf1e674779e07e00a9a333d8e8164315d5372c5ad7fd6187041b455782e19e2df0e81daa6e99cbe9c655167814f043f6c7714b16ac1a8de6879ac9253e716767d236e87432b8dc6ed33a531d53c81f3cce80ed8b98d1b0383885de331d4b66350dbb661958b6362c4ad3584d07265b4444f6820e10bb6ef8917cf305c1d801120db6252e632a5f9ea7a0b46bc1937e99d5428732c65010b42cd0b621aebfce9b5ce7a417c48dbf228432f61df5880fc9f9e58b8e0c084bd7553185fb466b351d65a0415a1f48db744b0a7bb8258c75412d6ffd74647c86eec50fe1172b52cb24d270ab89a5e44af06687d3eec419459bea326b7a61f54876d6dc65f9b01ef75e0de9311b2af87423814b9d1673a70736baed4424873b06ec1527730797185005827a808300fdfd8a05b615b396be10ae09f115f7369658db0a6196e522e75bd7ca950855ba5d3d908e67fc6abfd7186e61de5f67129fa4b0111b5006f5f4712160d93707d9aebad365d1af90518a84f45d059f088dcf70f7e3d51ce182d8469ecfa79b1dc15afbdf2663bdc8fe30dcdc561743301aae543edcff8c094c0b329c8190b31c03fa86f06ace957918728692d783fa824ba4a4e1772afbe2d3f5cba701250d673405d2c38d52c52522c818947bcc0373835b198c4cc80b029d20884ac8c50893c3f565d528a0cb51bf8a197d9d601c987429f89bb85727ed1a33def4630143362641c681a72926834160ff9ac6d0a44570a9e89c6468d106dd7866304a5a3ba2ed936b75936c553e5ac5319882ae192f1b53500abb7da4e45996848b0930608e8c32cb0d67dae5f76e3f65d35b590999d6aed56337f6021a00f6d0610a44303d84d87bd5bf053722ee27f2f7ab51f43a2514cf32646286fc8611c05ed7e6495459cce45ae37be7556d276f620d394764a93dc3f4cb6382203b8fdad0ec970a579db89b098f9f75136da6319f0b6f91cdb5825a36d759a209a3c99673d2e701aba304165e1de04ec1623cf02af06551c9ec7ae85502b5653d514779940546bde51c37cce5190ef303ed44218286db15edb09ff4ebe8172a1fb6920ade0e569d886bdc552b0b4c004f51642c3229114cada45a0677f1ef8f456621a09e58673f0a046a159c5f57d4f8511596b641a8648e2a41a365bacef332c28ef1717e18f0ee9859a4b59f830fb34ec0e78b7b110c03c4ef3251ad06046c6e2263d3e9ec81aa7a337913468e0ef4bd0e952e3feb81a316ab69b833452146cb948e5216523fc23c800911eeb961311e47362b0a8883e0721e8005f80cd8765d5dc7689dcaa9da51a7eb4df29594fd051330ee6588814069a13bb765cda86fb5d6a583eae64e374c438623ecc318bce3eb2bf4cb5bf8578febe36906e7ffa74797bf2088159b7daecb704057926af55d476deab683577a37472d87561c6c9195396aeaffe92021dbb8100fada41a3ab3a09d1cb18f2d3d125b609ecdbb7dc321043f3facc16aa865820c0e697894f1899f302746eff8248381231bf84591b07db0a2ab293ed995deb1caa9058079ce619bad76e11636b50d60eb8b406b46edfda74b99ffd20b5ea9efb28c2c4c1705be1e8ba80ab2675332733079406d0be0435080989b0b6e8749747a14283c1b5c11a041274e1518a37520884262fb6f1bc154e823854b71845fe877dd93e0f515eeb9747105dea91a680169834266df150a2cf8c74922c2fa3fc44234f9db12e7b7d28c11dc7fc71c6d8e3ab8496fda40803129004121c14d7b905fd6c47b1325ff83fe762c68c14e083f926e0256ff42b61a0f4b17b8faf295c5272f8e5164754836523a903a4613ba8e06f0e7bcac803e3ff2243758de8e00db3eaba1ee954a04620dcb8264b4021701ef0d6411607d6b2b98082aa1fa746f6b1cd7b9b31408c6afb7b58d68a99d8033d10021f5b9bedf5567835bf4cd4a13cd3840303f6f560177b6651bb6854a988c53658bca26b90d55c71265f1d573a0aa2751aff415a64742a066b7eed5adc273ccca2c1f25f067a55d31b3098185986a50988371957e0aa8fc36ec72191b90a2c39a6d5545f990bc805dddac70046d864a8145286d41be03206213d0de288561ce52da1cf538fb03e713406b2f5482967bb88f990b95e3f9c354d89b83590369538fecd6b2331933e7ee75c60e0a8a137a8aad340eef1ef54baba532a731ad01e9ae30030b8c7d95094c083d9aaaf675bd943899d5c1c17e2fb30426c826e4c3f73a2e227f899adfc1b85242539a2a45bb41ac2afe927e0cf6277fe854cd4d3802b041c57ccee35cb7bffe64d77cc7fc0a3f9277f7e5971a25556307db8948d6a2ad156c91c1099441df672584b7421100da65f1404fbf3e33e97805dadf5a184d8d13783d14502f067326f4e9ce1b1d65aea137761558d1b8400952c154037569ecb688fd1d69855c27a8637545c5897f18debae7faf68d18f5a18f2d7be7969e28991f5060b82fd97975f1c5a2d3edd3c578ec34451ab8dc76cb0b7dbb48d440dd159bb572be9704c52a104969c8a2fa210a5bd9a827fd794000684096d9b70886c68ebab80f4344b71f4f8f0f165168b7fd7a5688c0c385edcc1604930cc73ba22678cec50ccd3fabc02ff5073f6195f6dcd8296b579378dc98a54834447d70abafea701e498d5c3fd70219e6b66c087a22f5c0b46ef5d898f09679ff23523e2fed443d28481c00dfae966c221dc9369e6a43cb1869530baf6e5a18582bee0a9b492684777af1e3f7c13d7a4dd811b6e01d4296fbf943a89c6c70a1d3c0995c6a5df1e48074976c34b967b2de77cdffeba682b2d3713035cc656ab50673fcaa399646ebd7a7751002f1b5b4386f66782da084ad3383b119cbf3b8b044d8708a758c95f8e1963365ef04a7dcf04173c602a5b8f4a0833eeb27a1db222340ad53aa9b5faa32c32ad4555caebbaa706e5026f0a0178ef242204bca5299365f0bcc455d046e4fb0f3e1d2844adeab8eceace74bca846373633fc507bf73d286042ad25c34b3acd20724e2f5fc9497ef0d42e001a8d9c2690ab01fd46240ac582f15ede36118bec8dd04033c449be433b2a89daccb763065b127a8aaeb9e1837f503d4bd0a1c19e7fe15cfb1a34304df47447cb792e811dbeeed1c05dbda9ab7fe7b3333a02c22c1e2b08510a9389e6443bcf9bc9fbe0b4e2c96d67f8384c85a93f295d1c3c78de9138adfb3c6db05453058b1266256612ef2ab6472a33b15926df05921c58c9fb0190b4c257ca8ddf485de2f7f5b4fd810c9a142798b4c06f1e4fb09ae55d9fcd95b9836e04b308d14cc83c1421b18c4761a0efd0edc6610eb818933d1d53e19a763d84c7ea2e097086d0012f8f23fbad17c4af0bcf6e7c801cc115436d4277abcba41e94b24678061ffc9a11ea1232fb568ebc9ee7b6f90b73d29d737c334848bd74b89f03003dd93ed46d82d887187945877f51dca5c0f8e5d49596f32d3eb87437bcae866640310ce1e34a0188976f0d365eee5643ba8f994e6474793940451774918ae27f6a58b1aa65300f209624d523c23bff99cd17b8c872d5b75e3735ceb49ffbc053a19554b859fda754fee1c6d714027caee2da69ca278154a409d1c37e4ec9c8ebce2f1d912879732eb5ee08d9ba09788be21ed5ddeb3ff9139f611b5a06bba1 +Output = 961383579cba3897f7f55edb4451c308 + +Len = 77056 +Msg = 9cecb98a1d426aa0a29cd913450109ae3430c3e4a9cf2d111cc59e03b7e5b1b90acc986a000cb3ca118a6188ba24171b2a97afbe3fa002b9b062b8e38c085f65e3abbbc0c2765d1265087795a919ef68c061b29228b54b44de74b45ecf216c358f51c9934dc8900007dfc340fa29ba1d5d5575674e5631380dc2397c6878ffb176866bec884a731d5dd7ec939599a0c3683da04598cbdc1fa415f0463f554162001249d25b432ff0d0b79b9662b4c8e14bdfdb34ee5b73800d3581c33c005acf96bc0a4daefdeb01c94977504ac15bff6d03cc3d38501ee4afea93fc48c071819e4d576569bed0d9ae5329c9330780a536731e675ef007d2f2fccef749dfaefe828ed72375cf06ffe89e580907cf605c0ef677bb498453d23e32dcbe29a33ad0a844338eb878b4fbe0f2ad19ac6122ab5d53803fdf532d6cfb556259ce553d7e7a3a12af1b000356fd16d0000c05f01b8b53e0fd09a7bb29912d0bce223cde915e371d8c86b11a97a6d468c60d03ef3300be3ffdb0c6259069827c270ba24690be02fc2fe2d1224645f21d7499a2497b255c4746baf9942ae91c606c73cd9d03016456a015a942ec41399910972c267b60f49edf1188307d7ac35da341060a738f25d3e50981a310027181a5eee7adbc1a50ecd39bbb2013853e1bd65d95b567d00d1c08a4a16c3af0628038881c07c5bc36da2742da8d747056430caec2c7672ce3d911d050c6f273d33cd34c125b1eac6f0fe5ec2c9e26a4d37d4e1ed568fb0b71b10674d7d9c1f38e5d7d2213d25054c3341583fa7cb38a7d70a39415bfacd57d4df1787ecc2ed8598c3ff26594e21bf9f1bdee8c4ea3891bc513f9ccf501f2d055d9c38dc7c28afd7120a451c85c68dbede7152a3d7c087724a633403183ca3270c73f4cf4037142b328211f9747a52fd19ae01c71c8715733652bb99cb8c56b46c2d303797bf5effa5f4f17282939be44df37a9110e2b849d57c9815e2a4c4280d267f97eb27fcef0ce1781a48d8c50efbd021b45d79ec60884f6df9e61c580c6ffe4772c2f75a53b7c61a432f806ad7a3c29b837aa32e41df5981a84e49aedbf5230c5aa7a413d837116c9fbf40f9c8c6494c90c0f4fa883b1987b3a3b315114d2342b211b495e71b61c3826080fe6cd3e2c95ef8e5dd8e2c0df4ae5eef4746d88d8f1b99af7cfac525d39dcbd6e53e7d1d76606b0c43de42b54cfb085491e707a055e9980b25add4dc014459994ab7f257e8279fcec9f2ff9de51c1899a16c8b2a1bbea55e1c5acb02c108826e9b640430a3271fb3ec66b32671a40824e251b389550d39feed9c0828b76ceecd63ccf3261be1633207941dfd67056f6cd131212ca657de8405ec2cbc48e3e72c104d7fa6d6e8f2efb825807139c2b6f7fa8544a274210b73f1c5993bfa0014013d7fea4148a057438a75ab205e5e674ccab8ae8932fb39553db2ee364f43ede357dec3740599f8b3db1ece89695af8e1ce65bf2f8738e09e462e9c29bd21ed58dbe4abbd82486fd7467b8b2adf3b043d71f70723d57ca9b5a7a31394c81c9ab8562c039c433e1524393661732460e1e651f706f4a238fd31debae4f5f4a66eb8430f5b7ecced91014fb9e200ed7f4a42eae04f2071f043a957d090cbc751d1af1f19240383d96c14e6807d427ee885f9b93d4025c9252572bf7ea784b4a18c2366d3ed990c73fec59a3493b66d2f2d6129887a731c6a0b24523f89cf5107c6aba6ca28cdcb6fc1a9d710d5db3cd5b91fc83c5e96e0117d44dc7dc7fa011749be5b666600450f7d2829dfb43f725eb19c21d38d1fb8cdf44a9ac3e29359325dc1f12315ef0de559c70edbaf41823c9f5ca2e8666c0af1f8ac39ac4a39ddfbab5d04aab8c88a74100cf2bf378000f1ead7e7e57b1a5b1002f015919f4be3d59ae60247df4b5f5e187071d4dd8953111ca45d454b893dca9bacdb0e32482f42b5038694f9e5d0e5db8808c711bc1d0cbd386fa2485707642b38e68cb3cd04e5722bee1c890693bde1ca23f06496b367350abb6702026c8f5a3ab4978438f9105ad5b5391d4c2c48c39d600b56b7ba932c91bd1e08f9b1ae8118e1b9341a9065f77778852724ef18e9a82952687d87230c73e131bdcb9b443859ea6c33f05f58a0a7b49b270f70a0dc410c700a86cd994d17c43ca0f66dd2f8743b2b1438ba6b1eecd5c59d8a4563041e65eebd31e2587703d2b942e8cded4a0e50604582360faa9d789f0b23d1e20976e229112d6a0302be991224312ff5957ec6b6583b56d8dc5009a1f04a9aa04510edb976c7c90b88ae83e1b55e088e635c1a97cce291393caaf558dd8d24205f43050a8eaf93e4615a2fa286ddec1a5c1ca88f040679b343e4e84e3359f2e4b0a3b4a6a9233f20355808cf192f4f2bc8370d06ae1584d97ab44edc824f8b5fd1b9791856e13f416d1e8be1dcc0a6253031b4891bae270e598f959e5abc52143adabeda286818ba81143565523085a93ca34b90ed2ee4e458ed58fe2d5eeb8464ae12669e06600e19efa1d40a0d622a35f21eb8832652de014405966a75cc32e79a0038186a89be8ff73db874a5c02ac4a4ca6a8e02d56deb2a27d192bf58923c3514d938031a4e6bc1858d12a8342d6141bb216e6301166f063c4a468a2544cae5acc46d4e763025e505bc74631294844f8d6794c54a5a057ebf6af664c6ad1c42448438cb420656c82ae11a84f002b624adb7918835cb56ea2dbe12ed914db8d178931b07f22366e18175658c60fa6f6798abf54a47ccdbdf13ae3c7339a92909b56b94630b29eed795f3e5c7c9ee289eda9f3079f4e0fcd3edd5c3940441d5519798358ae18c5700d4e73be5bf507a20d00bd3a5c1aa425f28af58dea5aa464f7b836ede39cd27f3cab9a864a5c3cca4359c3f4c228b44e760a56ca172351469fdc7a0eb686eea26e405eba301aa988f77ab03dbbbf66ce312526f8b1e84a8277adf9c20f1d40620bd36464f77877648f2c2a1d2f28e22f8aa20e209ff1b7a0e9f25811d6aaf1467b2d578b86becee67437d99d04ac51f8eb4bb548c986c1285c754203f37528d72616dd38c534d5970e6367c42391dbb2bbe6c47b17ef90a338fc5da14fc60e9b75559e729c21b5fec578799b741fa7e4613ce2be71734b99e45051f2d0e5cb1cceb44441f3cf95a4023dba28dfa0de164715b81bbf5c1a90ca39c7fe5f1986e29af974adb2849e0f2b7bcf754d5aa7d1d439ed99e9f02612517e67cee5ac677342edd8bfc189f8c9aafa638aa4962b9b706f2a40d77897a6e1e9d86948e497592c58187e0826ca5ae5821c6dce9c91ff83801719723b95d5e240c3d7720a3e1cc202dcf370a23c4846dba228b1b4028275355b2ba0834725bc4ccf21496583426bb2cb24df47781d33cc9ec33726a6aeaf549f7f4a96d520d8d5a54eb73f8f558e328d1b3e5ba360161fb8444739a40a97a58a1b59bd684e9ca3ec66a3de8add9548cbe07627e89a569a97b5c837251e96f2c509b3402836717d4d72f48b9b60e7bd2d796df36d525b06e41da46650731501f75142673c60c02c7079948eea68ec585af00d075a108d2a4685c20f4e907a9bc9f9ec7acc54ef79fc836a2fa07c0ce3fb4d3daad85d54d066f40a7946fd2e88e30b9bc0029b68299a995eb6e525af24b796e4250fbf18beeb7264ee61439a90ec8e368204bc9107f1c1586ae0e93de537d5ecc026c041bd7e08b8b4c7e9257b8d8ba508fa3fd4daaa054095ba531eec22113cc345e83795c7bcee149f7736106d09d09a0dad98696c6dfe7d9ae8ba012153bc7696be620e6d98ee561176371835109f80648c447de0007b6aa9327aeedca254213eca2bf019a4a0c2476d8f5c8ca9fa01296742deadc69da60fb8c47afa06ec0b6894f80272e7eda066e4a6a11bdac96781c3f9547cc74d78f302016c24876c7d3aa5320d2169bb379963e4b289adf4f8962ad1a7f50c74277d999a8d012ebcbfdc8442d9cd32f4d00673b1567f2a63fd9023329ebf9cf8fcd704f5a53a02c51977b98e2e1f4b7eb3d59b7554a558febd97378403837fc33f26cb7c7c760b6dd333cd80d4bfbb43282f649875a23fae82d1ec2f9ce8bebb38957796d95e529d3437477f92548a29773c5582811fe7599269cd9b329760ca2e498faa8599de3e85acaff23286c01ae723f69b40c359e836855f318c376dd76b6d9b2249d0b8360fb98e437aff66fdc10dcf4c79379c44b64e2c577471eec935272365ebabe66f17876ad9336484b94e2169fbf622b8535aebbb76b0edea8ad59fb0db33d172cfe83ece1c25602038d3884b127d2db6ff6a8494f70952690193ffc9ecebeb6340c9053f74179944619b69fdf7d7009d2f2d43404047497316b66cf700d9a0c2a901044749d2b7f71ceded0814cc4275cbec4e46bb327911b18810c17fc79996f1d9646d031f634251103bf3cf239b46baefcd2ecf918b4aba4f13afd17b7ee702994d390ac4452be84d7d4692a6b519e67ee981e32e262719549d495ebdf6bec389e634c78904bdcaecd88ac41b35f536e1c9c561cff3aeb7dfd4188f57a9221cf058e5a03848fddd357646cc4bc6e3925f9785b03d99e97a37e3a3ca0f401bf518cad5fe97bbf50a6f7f0214fe0eeae24278463840c1e04ba6f07278af63b13647658a4a7003ac3ae41b4603fbb5120ed09692619f139a1372240e02fdb9edc8c6518eea89c82a53da709b010c6463ff5219f09324361fb8e4a6fecec2ebd691ddb56948aab3783e9aa98876f7c3e69b0f29e93695d37724449fca46c5a0747ad3b9a1ca9d6b9de46cec96ca8579a2cb51ec04b2bb91ab3dda36fbd1d081d06bf287c0da2999a12c97614b667e2f9f785e8dc96f5e19c1eded9418d6a936f14d80444edf15e58dfd653232b0aa8ce6888032c0d64612c41ac7e0a9bf1966e006c61bd1412af668411c84d011d1397ee5fc04724d3a25b9aeae4337f3e8b9a3800c32d36730753adf0582aff2badd6f751d2a663d04faaa90ebe549daded944a19ab1dbbbef090bbf685156b92e21c2222acc240f6a389ea8c6ed67dcc36bca53b7c172a42e5be4c98d1c4dd0f5ad7ed26a14352935889ede868319615e1a3e7dac8a1e8ab713cce5bb091d9dd728ab6f262820f52d91b11a75d1e8d1788ba707c2336ad550d8ccfb3c404d8a9c3a52e0a7306dd919fcdf44d9fc5b94d9690dd83ee4dbeec252ebf356ea65fd0b8c7a0d3255a53fc2703044fb2ffb12495a79da6bc7fb3bd42a31b5522fed60edc62bde12be4f8ef196ad0223904eb49006f1f4900151255008a62978366e1a0a906d3b8d95f32e6c165d679947dee07517800ef4bd6515fc9353380f2870932a90490cedff1987fb974959a47d33ffc2322b11e021c071a2743fc8612c79331571c63978264a0168c177c18d5ad37a3d01fce39c55e9a2085372c2b46b136292d9edaa77320d047a3df1889d0548b7af2cfa6d70826811f7d6f50f510dc5886b71c548314bebf8f8b3bf9419a71a20df5b2d97a4d0c62536a8cf958039170d66e056f9f0976b45abcae7cf4c67cf1c97359e4a7f668a458f6f083e881792594ccea8a6fa4115535b2b73207d6ef1129d62546c4a6d3cdbc8d4a9f1b3d0bdd4e4e5c438996f718acf7e6a6ef3e3086cba8b57e64e0c654eaa7eb996478c21e7f8cab195124a0853d16ad5a3f7ef9a91b658b0a1d06c8c06fd1640148d7244f84e2877a7b0f961142797bba6d1ba31e9597066841bb4396b89434755cdabb071b0a51f54baa404369aae245fc96b54dc6b7c8176760df4e515aed4404f5eedb8e4e9af8677757a22f25719b6272b8cd2b3230a61289f46dc6bfef2bd5ab48137b29d322430924a3ff739a09332215f33fa0e082c7a91b6b851dca6b437d5f654e469ad162e23fcf471fdc4de3376576708e483bfb40ccde190f0fa0d2fe8d47940f42a44b65119ab274a8a7f7251fcd6a54e84021e3711bff0e1f5b08816a10d90e7b096134328cbe2c9fc5e37dbd5e999f411ddff3b0cba38589f868a86e7789ae948f48b23b1bc6a222164ca3b6a06ab7d3538a13f463b32fc01757f612d2127a3f94668163ce587fc0177729a4397a592f5fb4a6c46a8a4762266adcefc72febdcb74f04652b001ffa5807920e9024dda5b0e43ea946b576d0b425df6dbd2e9dec6666cdb7a849fd4146825f4e3b16cfe6e59d4e0b8ea138ac2efd80052a9aeaef30423fd3dc92a235615bf3fb90ac9a536c444763a8f9f7551576315e96016d759375fd222e86b9374718e28f4772e78bc38ddd6a3c1c5d5bf60495d295de9fe00e56685b14727cd7563dcd81b5e611e079be5257be74b5215f4d0ff9909efcef1f7823c724f297961d2ef77b6292b401fd7a58e486bfa955afa4224c2ccefec3356f81fee68383e41a8112c4d3f54860dd2653794b49a46965ae5f32a0fb303cee81358acfb1bc41ccc871f6908a497d8766d48e62af30dd2fc02955b3801b9cb971a0c346e9bb4fa269c7991ece31c88a904eac735cc9015c8e031ddb1a2b6314a54660f2b80b6e39e97624e53d8bc26557344be3def7a67a6c9f036e05ea308e90a8bc4989271e01cbf0127a54c20b961038053aa2271d07e03faf02ffc28595b85a6db1f988ef8885e7fa44a07f049b5f9c30ee42e1d5938d776920546ec2b8a0adddd275cb434caba034dabd1d3df39a0387853db2809bc8d8ca5c90298865de4585117a48c9aca1bb6ab2e727181d53f041860f037e9f26d66b0e5f9d372bc5940bf5939be3571cbc0453cb1733a711d52767137f5ffc2bf293bc0f346f88fb3bdaf54e3f10aa51148a33e57810ff583481bf076075515ca00cfc2b8991fbe38f6aa7069cd234f34764e9a2c420a49b90e8e437618f3d1d711f3530f73f0323114371595fc87587d73cdbaf85f325507cd57d4ffcedfe02e842fdbc17c71d1e53edfab2d233ea63467a804837f8f02b5adff09d9d1232817820bc2975dac849e9d299afaed5123a17a68e2954b2a360ad50d4ccbcac793da33107056bea934a2599d4bc4ffc7b50bd294bbf56b0ada4f6e09049e61d108bebec54ec9466fc73b99c3245304a846bc9ab4f66c8637d7cd9f7c981a3d4b6e0c4bb2c2b79e0627ae85248e6ea2fcbdfaf851fdc244ba13c991ed7207073caf0d046035e76e763a464747f2df81cc020e14f237bf4f9a788e6be4f92d66adb2060f5610225dc7ea4a04b4b66c4a1ffd40171f0c2a4cdfed6356e9955403a55f42941cb93013021d01e7f444dea5fe96d72960e4cde692598f7a85ae43852c9e08bc3b9ad9392fbdb4158e02fc3970b51d713e276ec3baa65bfe3facc3954a579fae3a19e57754b1acb90a5a90af7d425818403dd68b5fbb0f0ba0f89cdb08725093a1a01b747be12ef9f1b360ae2d25d145ef8fcde78980f3c82ff896fe6dd76393f99644d9ab3585fdca7436df8946d021d1831b7f41dd4e5e741578a7826f20d5c963284ded95f8ee1d07d8ea988d9cd4708287fa8eba6af4f7b70c7d4e20ce82996e8f7948e9cef473d30e7663e37f8554f5da0079ff8db341471829d9d3b7c1f2214104c41950365240a22bf02ebf5d0342dc3b099400c3d92b65522b7121bb5ae30597690dc6dd45b65ab34958a58307d3555046610b4b47cdbba14de055985b1da5da40ae7810d19d00b37647791fe80e0dea384ff5731494e2be460a9b7f7d35e77450e2adf8805d5ad67de5835b2c5dccafe8440865c7e7a1501ed53a984794940ea192aebdd95e31c168180a5d5d2759475d298a46e830c1ffdd2b7c0c41a2744f3ca7c48664094c1f3fca584d02d37d5b9fe7c441ffd60b758cf3a703f3c74ee02807357baac4759608e2b354a4cb0093b764fe7b95414457331504a4e66ceb686d9c49c632f872cecd48649aca76aa96ac8a801f31d83750d878db18a1f71490144c4a8c840e0c7195e4b346fc3c420d864091535c05ab0685067487acd28f0024017ef8296c0b24699ee780c385929f4e6d7a3f9d30672141a616189063245fa5a22f2fa87c3791505e4a72a5b960f50bfb840d7cbf344a15400bf3d4149d56a017a35c89a55860520c22412c4075b6c5d1f4e2811bda2907bd9941004cc18c1b4822a5554e35397790b818e083998b84d715e935ac21652203092a9d7257aa211df63293e197c2c8d2541d48e8931c51f52e471fdad1a66bfba3d532f02857b77e662ccbc546a64cba3e78ecd82d1033138627c80eb196ec8dae6b472dfc3ce753b9bb86620a8b0b31bd5254bc2d10331966afb6ae8adbaca2741364919a00b88438064a20ab1a0e1d1ad309fa5cc358ef16077324241db3203bf61284cc4c33f92b36a267f0fa5c689e2292fc82d2aa7ede5887d647050af14c3bd86e58c85e9ada72139fa2d3fdf88e68772867e431ac06ca782ebb3ab8fbef0b3fb7071b43508ce32730894ffab735cc41e8d2a2f662d584d0924765c5286b8ecec7a1eeea018ab165826d145a8bda7777a38db3008994af166cb52e3a5e0aeb0d07eee859961d0355fd16ca255ec490a1c05ec157078c72d323cb3c1e87124b84ddb6b29af88b01800a4c1a64173c4047a90e7104c602f68e1f5238798accd5bcb2c0f3b50d1cd56d0fd6ac1e9e8aaff2c5656d0eac4162cfc811c9534f80b23cefd554b0bf1aa4a4767d275bdbf604297c2a5d7da390df1f86d298b5be76098cfabd7d95f5cb99aea5093323b6c868753627e85a92369504c15b4da6bff503353d40156c9779d9120642797f1747025d5b22b7ac607cab08e1758f2f3a46c8be1e25c53b8c6a8f58ffefa176e6bcfb6953e4727bf7aa4ab34ee8065717b27faf0736340cbee6e109fada53110b6f7a218735c0cf3e08998c707c5b263e7f51915f390ae61437f7ac5ec936576ea8a80e5ddc49b11dddc11bb0f936a497f565ea8ef7f1d276a4fac99385f250f7afacb73ea3b6287c73e9e874263eda0b5ee445fc388fd6cc7412e901d630048fcbafa49350af3d43103a7c25cc1ccf8000f52711c48cfdfef066931083987c1c46d95ec2acdbf75afddc5e2cb3788bdf25c11a3562914cf5601f4f2856d1bf8766516c357fe35eaa82f616efa3f81711136fa5d0dc46cd970c64a5b11584d5b974405652916e7a19e6b02dd864477afd1228514af85287cd3b5e1e138958c799b7cda583a925549073332a4ebd0bbc8a6c14a40b7f5e8280363541b67af69c0e7921e02f91b0f3f86fa795b878ede6a2675a287b3811c79646109602b0055c0200638fbd0fb65f372334f7805b94ff2c4d236502ed145df9b117a660f22e0f5c96bc3b97ecdfa137d700d60d2fa90f0f6496e209640e4c8fbf74f8360919be0481546b24efd5c0ded336bdc7bbd31f35f5dc27f666a89d42ba4c15edbe6d71e10952a7cce23dc4165efc3116c9bb3585471cbc33bb8a57f8e8ca83eed7d22edd78df77f78bc2b6c6c17abc621f085ce7a47f2a262b5b829b9313cca01cf2ffdf1422640db40a9dd645dae51386639943522df8397ec327120152776a5772ebd02744f57623bd812d2f413491c674f6819a4daed37b6c4c457aad0db64efdfa96f76cb39ba1846ab5cad93245a7e27a8ac407d45becfbfc1c484c15ebca39351acdc324e2f50761555dca6695f1562d441885f33b971b3c7fb258177093cea344f071d2b4e9ed6df52f3c59ea6b771898deec92da44721656fff99caf71654dfdaa9d457a43de977d895691addfee426e5d673aa0bda8918978562b0f2ca6392b416f039acc84e6d6b34098441362b4afde1b72f5c966b50065984cf88b3871b7fe10967e4c8462e6f523f619cf7c7441a933c2412f548ba40ee687d258c4fd8a29a8868c8b89139697273192dde48c0e06d5b2ecb8191a5bba69650659f1e38b0a5e592e503902cfe073d319044103fd3d2acb5e2c5d6b0eb2496dfa57682da1e85b99cb643c36771a3064150b3be2f59559940053ca84a63fad281719d0e3b60dc7cdca903bb7778b856aeebb7b30e0578a9638f4066f09a7bd1cc569d20bb1bfc97e959ade8eb87b9b6f0bdca9f5a5cce7576fd9b9342132a3d36d0d16af79478933934accc2213499fad6366d3a2c3995610ec88cd9d42a84d575ce43d6f8ed30742c6aae5b99fda894b6906d065de9bf3c7b8a26680cd58ba84774018915f8e6cac8c02b620a1df0c313b3546120238b6e20e731e8b07dddd649c7facfb8b2d2bbcf16ecde5bdd98125668c8535d2e218164a65262a868a5e7e58fd3b0c9611dd1a93298d77485c906e57571e5fc53aafdae9133dddcde096182933734314eee94bfdcd8553d5daa2929a2f91ee5da4e68686e7c61342931ce879ccc64d6c16e8b77de54619eac64028ab90507000b344cf906d5f7989046b55e723a47a101c53e3affb3027fbc1e19718040a6362d8530c921e4a5f05a709f6edd2ae57a581a3571069e41c8d301f744c14f056d8a689d4087547524d0d6131fa544474a0c95f982bcbc24613a35236c42dd2c8e68061ac6ffcb6f1c3aa199d9912f74f7666011d7e9b6b63239e12552cc90218210872fc352f19ac0e0f8b9046a94746baea005d65533fc23172d865d2610ee2fca12649f4870fef90904fc08f81a508c2c805ee9c7dc001d1e42cdf41a069b7fdecf42c2a9eda3adfeede94e036a0f442826a3770859c906944882816e1a2e5993e750943d1392c508da093c532bb97ae9ba5ce8e1515fc8c2662e6bebf3b1a43282167ecc87d22a6df3e23baf065716b86511a3176ccb49f0c5581a593a2b4a03c71de61df46bc27562feb4e1a3f0ffdd4e4b1275531473668d88f68096a5324edfec35f90066776a4ce50dafa98c1fa09f919cc2ae422c6be5466727b026445bf20cd42853ca3092dc1db0e2c1335d487d6ca9c5245e5e48f51bd5182fb6687127032972969fd5373730034292eea11f1263a1475e6ef046e68ea819bc5d86daa65b9e9f71ed4d9f88a67096c5c4d36b86feed10047dcaabe02848f3ff2486dc989b9a768bbd8212f5055da801bedc7501c5f3e8bd90d4bf0a6f1d6e9f1250c0254c85c08d165bdaa6d7343eefe3a285aa411c9731b1f6cc8ded90514530cdce74f5c6451e01c03ec4a35c21363b0ee3a9f9d0e409e71818912a07669885e34dae1ec7cde785998577f23d197fce08d627757899ed3b22ec3dadeb7341197b87fa50ef2090aacef8e64b3fed72a579a74c3e7a7c84b3fc90b9fea541e7f47ec28111a605c07848df3a36ca67b6c7479f3fdb4056775a8e4c2ea59b98331fd2476aec54461ff8ed829a3b464df43c5c0429d430ee6d35c168c42a373fcda1615ede6661a95631a6282fe31b68d30d9e1e31b2b40e0f4e7b2ba216e0005c82114e050936f70d2b5c1a21b5b180fc41f73780fc337c05aca5dff1f1fda188cacc61065c39f7ebeff5a1973a715d16e04e953d3a1501f65728cad841f8ebfb8279dd0ae7d37399845b03b9f8c1c6caf38a8191f5c1658b58ea34809038a65ab2000b38336c31bff27488b0790a84c0809543a4b3a1706bb6d5671065259a50604933b9c76dfb04422a7aa445b5609f9256239dff1cea3e79d0aab149278e83963b9db42b3c97107b631fbce2281f102eb569a45e9a9aaeaac2448bc3a64c9b5bc09052e843cd8ca509c121dacd8cba5e9a5ce35a8349614f957ec55b0a9a41b8bf56bb85e96720c903a6fbb50b6e4629ed457f7a40bfff7330a08899bb411db32135168a952b73ee391671f9498c5b98966ca34637c4311b7bf2fb062209d657cc768b80b1e32e1c935bab30f1afa2b17e197547d1209f515ebb4729a5b914a9a96044eea455f85bf9bcd2e16a9fc27e8b941d04769af01cc145938aad1b81b3a03d665cd64a7ab453800e951c246407a624c4068ffccc858cd608b2a3f5c37c9a531c52af895c2e89f086d36f063053b81392d3820cdd92a7b7ce28ed10820c7dec8c5997dc45d283546323cb0ccd6aa7a7aef5b993c84dfa300c74f534676c334edef8f609dda72af4cc0d9800e4545d2941f49a5838be6e88ea1f212819a3a2c13bb834d9cdb56417ea1a3ea81c19c0e072568f25d3ece90991b0dbb641b9b48fcb20b914bd041a06e5d125cc1ec2ba166aa5ffc041df54f929af8aa487b74ffeb5b8ed82549d350ae4bbb53692573211506852f22b9f98a1d9a595bb92a45d58220839ea3b879b690f5e57ad1ede0f1b4d28ef8339359b49ca1966c30b88c5e3399903161aca366b8f4471f86d613b7a896c403b12a8473924936484996b6fe823f2b4cc986fec5a8cf56de025e79d762bbcace25f0083b80e9bf7c6e55643ae079bb5d55d7ca77c2df8b12def791d595ca09b3fc745360fb0ba87509750297f0e1d6df912fc4e1b9bd4a7a7721ea36943a1751bf3804a8733777ceb566209a15fff43ff5ff4c97dfe14b51557de17f00946a33e8ab9a666bf5b3f5fca93cb5d24c9a1b1eb6e00ea7d3d454145c16134d5188b7035f632f47bed36749ceb57fb8204eed55f71dbac40d9bef1e5d06a7ed09e96799c41d67b90b5caf1747295c3a33791346206420a706f88eedf12181521602c2066a17a41263b63a0f9316efdafeaf4969d341d4b35880b00da905443f2e6b62e3c1f068f63086a47d42fc8f0cda57ec3b70354b8b6abaeee7e50074e68b99a6cc5c162ad72a345afad748de526f19782597bcf991c60dc82745c177fad60429faa9177e379945ea02a09a324e255a79c2ba576368e30fa8264bc6e1ee963149292972b79a1641ce2f6f5f4f5285a16dad48832d635a171b7f576f273434b7a0c26da67b6119ae63cb74066a020864d02fd2ce9c2393da9e9d0948dc5e49edbd40e6214e4f2be267716f3e36cf464b2dc4d9a8443c18c0ae09d1d265ef4e79fb3f13718496b58435bba1552a3c979ae326dd9ec9ff515fd63031aa4849aab2d7177625d2da5f1a5b04cae9a8bca4faaca04f1071efe60e83caa92f180fe74efd649eac9dac710b43e73c7a56c1c6d0c6dbbebbf0a04f534313b8df49a49c94ca90fd74697fa3ed8cdd8665a90ea5b3de33acefba92e5d4a0b5e149519a333acb47031bbab660279242296a13e5aa2a6f428a2a345a51f9091ba2dbc47333977bd15010f5f32e4ff0cfa5c62bd94c9ae682e709e2491c3708df8e3516a2263168da64f2cfb876cd24d08c28556c158bc06f33fd68e19d151c5bf3b3ccb9739efecca21f9c78c235aaff3cff35109d73a97201732cd65d29b03b83f65b2bb446ba229815e0a6a90fffa648b92f693cf8fe35c009a289e4eb50d8bf6b566b60bf2766c76430e483c2af502ff4b8c88c823b25003f6e6eccb09abdf681231af16ed313b0890194fad41697632075d0f485ecca3272e5076d3fea75c9e6559ceeec29b3d402d74a66dae1e672cacaf51d9a8f9fe752bae65edfcc8ab9f97273d1adb7c1b2503677704d7dc7ef623cb7602690009f3d348e0a26bd574738ee321229e9c7dc0f839e7f8266b639755f9a54c09aa6bab0f651078b4975e2334d5a58f75c30917f53420d30192bd172981063df0bfcda5c84e1df93dd612b67045eee8c7b86a35e39e4a1cd21a347f86aac25f8607d6e8e44c2ead6f593834297a27b5 +Output = 1696988ff6cd24d9e910d719b38c6e35 + +Len = 78408 +Msg = 3c4b7eb4d5969aa664f884f3a117de0067376cd1c4fdcbe14c786051b2628e4599a22c8ca716367fdb90c22b211e36b2248fb9ee6432e75888e1c928f53e04be9f3d50411fe32c86074dd13372f36424df2e6f0d3ff892614cf376731dae03dcf723d31c6784e6848d379753bb1fce1f3f1d78767cd634c640b74f7a5137f366495c9b65a481ca401856fdd22528de6aec63ba714455354d0b343d84ba633c253cf19264016342844eb3ebfad798fbcf8f081f46bffbfebf557326db7fb946e179e99f60a4b0b516d7554a11f9f68c14d0158e3c1453f5e3c87af4c5cac17a61a84ca9a3b5f38bbf5c440060b5cbfb025691ee9c6ce283830a538d8bc0043e6f70239a735db12b478589f72f319eaf61ca8429aeee321065c306db758b09fbd179755919c374ff76f92b15c695f710f9d3f626bac3ca05529c99c4ca53581a506c4acedd11c36e146132446c0a5e86911af0cd081232c8123c1632d43f7a01b4f1aae1066c27e0e864a76b6ab85c79f3467906e004f3c36d4d840cd978f61ac5af9e7adefe27bdbbab917208c67851e5009ab989c1945d2b74ec3a222654cc4b4f2d81abef4b6e55ddf8408e5c3b7630f05ace4c709dfd135b55a3f76f1d7e0d7860deb6671b597ea3e4bf44a42c519cbdc12d7139960defaac7319f7ed89ad4d33e79478d20e7fea55ed672c3d348f010d7bf404508f485094bcb64790d876808cf3aa589e1809c8a6d6d5fe4b8c4f690a56a00bc7b1a9d1ee7598c8945ad91be1b0a1a84e68d21fb1a6d542d642e74e63217fbc675e70194a5c460d50674179d2bcfeca6b874569f6cbc99c65eec33b986af778980c378118df22886db44c14f06736416de9f001f6b4376d82e68fbb2aa18bd302316c93da6cc2cc349855879b4dccafde074ea221fea338b5d089379a53c15e1e748bdc2f83ab3b5da9fa5c63ef46682475ddb51919a17067236c5b57f01c6c452c11c458b25078315fa6ddbaba17fce9ac19a54c8396b72f559570e41511a03eee9ae7168736e5682fe7b6303cd5f086108f0d2ccb077f66ed8122ef21357c343293aeb960e3156aa1496044e5f4c592599a573a6e883bb661dbeba9a2fc62fd7e78a5e1ddc98aa14a28566953f8fe96cde81e05dc8d7e9658f235d418caf6c358c647006c7ea7b48121132e05570dfc13e4cc1f937bba7f19608bdf0145aa5e28191c958b671f0cfca021035893663a921cdbd831f761d949a3782afae0e00672dd9121b907332303420a79ec32b9faeefcd7d02675174d5037655844215a54df703f3573f3968f3b632a022eb95b8571114a97ef794d43c3a8ede79b9b5bd1c49d91315aa0bbba1ba02a2c9e9bdd92ced6ae8ffb7876452a547c495f937705a8a211b5db93053c1a756569ca5eb28b6ec97e28e8f714d9ead68afe0ebe3e59121a4b23554f257dbe5f764a20767cd7c76624032679cb6a9babb496377004548782a81a76397f078dcad73e4f878f107f494aaf4274ec8f93506372586d8b708f67b30bace68451ff43f2b685e67bcddccf5c7dab7d0ab188412242efeb16458035e66767dad7f5895773638237d5588684d40efff6a868e11a7b687c9d474c0079ccbe459aec5ab271b395c2dffe5902e64bc38e76381e1438c9537cd890ec86afd080b48b240a112f4dfda6638937b8802e4bf5805c69b818b6a46f4175af99549c5f4330317c1becacdbcb46f88d3ddee608b38967a43356addbd24c881daee48a9a503e773939365ae0a01ebeb1f95f1d7a4715fc862c6f295a347e2abf4dec25d289ea77ca0fa8c28ca34f5e5e818d3f213e9a8d67f9ceb3b0044aeffcdce7e8985ee8b596f5909e30635d59eb5cd5c58df8ab9cc221f1d76dd0374a6ef2445d4c2dada338919a288c5ecd33d0e1e53b1103ad9d3d4b750ef416c7cc8e24adfe6e949de3174a320bf104137eb7b7282a7afe351131bcc4b4e34670d8b2ca614680125dd7cba5e4a2fee1c48cf8532afe0c26c6ab382c6d73abedc701a57a2ac021355203be2b1ea8167654f12b3c4a30454bd69db8e0dbc5be8b3ee9beba46e5b26c1ef977506c65d830494db8e9126bc6abe99b5c909c25ab9d4cd376e16231c425192b8fac4a8694be15f539d0100b00e574166ba22b0df3a2755156a5f93ec6fed50c5f9525650c6e4f8a1687df8874770a819e9c150917195d05e66e78674b67d72e7fb1a98b8fcf6a6ef776bd7e91ef117f4df4c681968048439eb16c45c1ee940458783384af6fdb3625334658099c2d61f232dc11e275dbacf8054144bb019020825f5fcadbbe2652483416af1c3cb2dc33dca2349b489ba47ad0940e973f500575dd8ae89538e055d8ff9aee7a1f56408b68d5642196fcccafa9d0edf6f66825bb8951488c7e8da3400c3f8083d26c21515dd21b05ef63880f07847d5ac52cf3bbd92f7501ed72ed25c0912fc9e479013e2214d3c890845901602b37233a33020f5381e896045475f2e32c26ccc411729a6c3a28da48c3d23f4a4195f0b3fed32e6ef53dc96196e02fba6d100d0fa9c80e72ae84cb669666013c442443c104e981a205cf0c73bebe34dcc075fb15c6a3f30bee720c8890970faccf7c7cffc9a7b1931026ffb92062bab0e2b32774ec88f06e767b2e1d36d7a3122fe93cbed1b02698c0dfe3a0807029ed307202ab7fd98f30d2fa9092fdca741301f4e38ca1756949745478d84358fad8461d2d38152817e9808ae48859c1fb15c24a11e7bd79e22bc72f2fbefdafb608702ef7a930f7330f0ba69a7bdf6090910d33386e7a30399625ba78d2f3c6d3f45b22025d57c958f7d0d812dc0328dd2b3f6ad77f8c3ad83f0c90d4a2da30ed326380dde2fe01025a8c99fe37498d593ad53b6fa957ec367d084cc3ad15906a3935e5dac89850b7ad7b56acfc27006d465b3f716a61d6ece69548d6504a57c37f2eab998cbb1af14739a8bfb92014b1e45dd17d314e8d53f2301f8d4acce9818aca5c8a8ddad247de540a96fcd94caf7b49bbf39c52721426652b48eb21d84cd2a5733e6a7c1913d946f6d325971abea1ab39751a222795f9a106a9bffda65ded3c8a15a12341edae7ef7e4b20e0177ce0ee46229321061f2703c1047a4d66d40ebfbb0b0450f5de488786c5092936376c1475b4816bef0976f362d00abdac3645062901665b3bd11e012aa5fb932fa227edcb1052495da6eda8f4079974628cdf639244219e1b39d02314f5e0672b457940f13df003787cf5e920b20eb8ae5f449f9edd1b61bba0c8b6ecbd9fee51a9cbd78e4341e16715f7808ed750d2b835db82f6d33eec438d6d815903206dca5583784b2b2f2a53f95933e581490aa9990ed3422e7186dc89274e04d14b2fbdd10becd0fca12863ae85cbcdb5e0a7a910445c29f69b78ae1b5ee3952e087b53a6c9fbc4be7e21c0bee110f07dfdf3df24e6e35434a60be0cb7a09b3233f98b35b276cd07ab05e91b1d7c9f3e08834745c5a316bf079849a21e38806b6d8cf07788b099b371e27ff0dcdc081e76ab39040090e1530fc2e06a6022837f1bb6874865f98cefdb0c4325c2dbb409889b859595b41fafe175049e13db1eedcd0ab240c0ae210d44e7c51255e83d8fdce8afa2eb994c361b2318e5afdead27e00df3f92f4af0ac5e09885f1c8e0f21e2173994889cd1862b51afb9aab9c8cdf314eeca085c763d74e60f547d39936016bb95f2d34b5a0070853b828ad8fc4074c3e54bf25f1c413801ccaafe7784bb092a573672314045a9424ee8c6d8b21ff3af89f763cf7d57f5f142bb16c43da33807ffd7ebdb2ec633fd5c54f51584bcee1c4f44e329f3d26d19041d6cac38a901b8f27f86956fe29f2ad64f8c3bdeb7c2be97bce6fb2a50dbfd733a569c004d14d1c175f91cae5b496f5f40f2a84a912ffb15e7e5bf7b43e12322aa7b202effefd70f53a9cd4470c11f69c1dee732c974462c2e65f3813c0b0e94e620b50f41d13d1ea12f23dcd3a4df585a976531d13e445d18fe13b699b8344c660dd73bb3876881e6efbcc1e45303dd63b2ceb238ec6a2b3004bc95fd7728abb299134eb5610ddb8d61e4be335a415b85b7705e711d2c190c103aa9d7d640554438d592c80c817e0d2c680c31290c45392bf6710a3f0e98f5b73a6ca9543fbba383baa28bd8680c0eb583567e5db93ce676dda474d0864d85501858e25f6b5149002f18415325e7da83d3076b66fca5263e726341602789437170e9337657b8bd149f4eb90b5fa4292dd3a998b33b1060c96137e06c66eeb8a1c0a7ed2789547857a7c0337f59c352fa01a786e0f8f13ede269ce253d8e04d47842faff174a6f33fc517411db8c7e0aef9aba66ebaea08b34efcb7c4d1f08a0927badc52ae32c64373be7264f1146a83080077baf54d670f26e1e12df6b1e73d4803f2c99a8a59f9302047f3a74b593cd9509b644cadd2386af6eefdcb86fd7a518593c4ce1036c786d722382fef2522ca1651e9058dc2c5677641c2a4f23536d0aa3fe2bd66d534e46da1a11f4266db76cc6bc7c45fb14cc91a8a0b3786170951fc4791fcf0cdd7d53e36dcda1786cd4bdd296f0db64614ec4e1835d7a51b4831f65b50e1307916d5d3623a04c11d8ed5d31b7d5603c9e46d7b7ce129f1ca9a0d22dbbe2eb87f8862b7a44713c183969158c24111dae501b93d488b92dead754ffc592819fb498318758d927bab615b0ab8be68e5adf0135c0ddb93a6de2c50870d442d577b5fcd43778e9ac0e13f62ae7d506325ffa38fc267d697da72dfb22eb03d4c4bab3a9d904817ce78056633f93138ce773257ed88c5aa16923f2010c39fa4f38b2d529a6b61c9ac058a8e55775ec7e94df885a31bb1c68e8285a602c2260bb18a54402a515f04c1fdd3003da5709e621ec4d546f7c6cc7e2ff8d9fec6ddd214cdc27bf3ce8a699ec58174530ff11cb75df99f4fa95f2c53df1b246b3e41b88bb9fa7e5d5f9e58a0f118433c135ad367a0397c33ace556ae244f2dde84dbff84f36ecfed70e56267150a056f5c3852e179f6c4898f13dbeb94074edf5717479efe81d92aaf0a075f85d9235357040bb34fa430b7ac454caaa2f61fd4118e01483fe6327b6676c7f8d7f8358e70387e5ba5d429549113f959e57e0963409abd0f4c0e547623b624d19009b48754501b58f10916d6e9ea9277b021a3f360e7eb62876cc79183329e68226018c45fe57329c5b591b4f3338892b763680afed01cc08683f4640186a52b23adeacc1f53065c986c228569a94c294fb5de1076fdb1c7cde673440b2cc9a8f8359314ff43554ffd8f31bea9a66daa0dbb7eba65cb4ae6d1f6bcd81c9f8c5034b9ba259c10e09249a157c72fa56da365c6b25f57c3688c17474996b2595dbf5d8cc874625628c21154fd458830bc93dc8a2185a9707b46225aa1f678d4ce54c7412697ee8d9e3df8ecaaa03fd2eaf9f65834a3e74cf3a367a34e7dbcbc5e9f26598ce69d21c184550ad86db306695437c37450adc372027ba3b7930a5a7f2cef384416fabd3333aa221f048e35c821154e5912497e6701c2fe65ecfe49b05c868ff47f83aa63aa8cb4e71b2e0b87ef137b6b4f66d8632fc1f5e1d1e50482cc80a306a6c483b3776145b9081ed2191cb6bd238e626bc6cb1d3ca3e87b0576eb6234031339d3d318cc571d61dd33fc4873960a55e8932282293534971cd6fd47af95624b5015231d226b7caef59bb1e0de98881c55f906d37a721c744703964fdd49bcc5a3c223e307e56f45d493da745c3745683707d44d8565b40675f5c2825fe37b08b1556608e1775dcd06a6c68180f49ab0084a2b3ede92a3a44638128dbbe5159ae56969fd4373d0bb183f1686c143209a363a7c55ea8b53f4243506b085b114d2dc58904ea27d608665d73b02b1b55f7d6d4337f13db25d6c9c970f9921ea0166e2bd896b82f675b59c09b463b6cdafd01a1eeebf5caa18841bb8ada634f263cdb4f2b5e2696188df0731134864feaa38a908210eabd52db12e245176136ca45dafb28621da6132595407c82f20cad72da6a94f6dbfb5f59a5064ab6761ab5bbd5f57aac83a57dabafed853669ea4af159f6cfa6b1cdf18a60ef40c289450f253306c74442dc81a7a643d35ad232e9a96ffed827527b30f5ac64d04081fdff0c5cf6b830409344a2e10a0ff5142db42085485a81a84d4322f22ea23a488badf7b88df47a6712f124ca0ae0101920d1e0019efbbd9a8a539998155db7c537426eaf93242a9da0aeb3c80aefb2c85668714dc663e20f7c87e308e1aac0e048e6f9a9cfef46cc86a3d943d4e3e30916a259cf883bf8f1690887a85a305c8108c0210e0afed8db0dfa1da32e65abc4a7a622f1ae2b08279afd0de248989390bdf96d460cf8e7b27ad80751e11d13e1529d531afeda1899578ffe1d72896df5b0b866b99d867c39186720b3b5b222495faf75b142f1332fe8e6e0c0a1acf398292692cf85509e582ecfef3271cde1e216030f2040175ed194293e359da92c626f6b7bf18bfd55f70338fd37df155695bec2a9cec1f5a367a4819de32e272139ccaea9857935a9fee0c9d028c5338b4ba113cc238c3309d9601587321cced8078617a3f515a2a3550daaf26eecce88ea051ffe876b78980f100e838a2e475bb2e6d0f1a728ea4ae4d204eb721c8f535b330eca62246c59f1fc931a532d3ab22334fe1b0579b5a79477ff419b1c1df6877307b51c80b853686ccdd2f5e24ee343b8cca975d2acc04b43c27e50b62279550d32491d47048f5aa7e336d8122cf8f9ba602461f9769ff27f7629fbb043e2ac48b80dce41f713b1f6fecb65887cf82c81e21430b7bc4c727442cb03d32a3b766dc18995353ae953a1461b020be5ecc6567bff4ad426cdb1674febd0e77f8c9ac47446dbed75192af0e2ad18620fdbae81526f17185b2c99a3c411cab4e9db0095facb092f4fa91c2afb091056a3cdcc4a91ebff4b0471116fcac65901113290287ba085c470a31399b8b850af49cb08f85dfc6a34c8a200128990e5989f9832c41e4eb974810ef68342414235a8db4ad5e128c09c50c950d528fad63f3a16ceb30b5c0b062af3ad31c02c4daf69087a2742fa694b44ede800d08994bf8ab24c3b6b52e54412591feb5b02d8e733578037abf7cd094b17b0dba8c787e0387694a566b9aef4e24836f93b494da3afd2444d42a9549e0d4e90add93b1769ec6a8e392318cedf41c9d9a2878c13ac8580afb12f9767d1339a70c08a6dad244d95233ecbf7adcdd8e2f02f685092ca5c69a7aa9b496c6b6503385ae4e6afd704ff39fe85deb3864f9d64e8051f32c4dc961581ae48cd354a92d0c40f2d874bb9b0b9bf7a5648d14d021b1587805b64ae0ee27f8f1bf0f48b4e204632ca9b4813b18ccad1e6d4777a18fefe15fc75707ad9f4e9674a3f73cf40112775465596ba099867b317bf417fe7f5ebd81ae8b1e700350a5d5e2079bf6e89b101281cfc57c0c7dd487071f40477e923f7621cef9e8a8c299adefdcd03e2712afef8574392df0076b779525bb0d1c0ef9b5c7af2477fe08d45523d3842a4b2db943f7033126c2a7829bacb3d2cfc6497ec91688189e81b7f8742488224ba320ce983ce9480722f2cc5bc42611f00bb6311884f660ccc244788378673532edb05284fd92e83f6f6dab406209032e6af9a33c998677933e32d6fb95fd27408940d7728f9c9c40267ca1d20ce920db5278679dda94d78254079654e3b69324e446dfe98962cea9d6a432993b22f57750a6d0c4becdfb0ab2372918082fe320ad56ee72618209ed0e78f00e6362fb92e4298139bc7e7cacc74611cd69c5a1f432e56575be76d88a2c6f4c9a1c159dae9b64fb756a42b6d911b8e2dd8f1459f02376d78bd6bdb4f1befbbad4dba7663ae4eda2003ea7542000041ed0fe9875a4ed8fd72d60d319c434b2bd3718b4efb83f280752a018bf1240cc28302ede7fa2ff94c6d2e33391623c08e63959ba94b728a8adf53513521022558183a632e24ad82a3904b47b966c2372a8741524ffa82fe408507423d7aa4344dd43db52482d15b4a03b7af7a3328994965fe1808b1bb36ea90cd3c6aa61122e7de954991bca26d89effad544265ecc312553559b18261bd0272ea7834a51d56f5fc9893d7a289ea87c9a1fdfe76bba2af0c971d1d6ca933a73b1eb51116d372c7e62dcf0636cd7eed121f7121d57497eeee7d47294b0876f9bde709ca06c2f6864e7a9711f7501a51717c4a6702b63734635e746f9dee0b8c83d9e2ba256a46938e05a89574c02137502ed648aeeef53213b1014ae5e845d2257dec8bd33807923d65600b3f7c480146cdc1110a8d564a682b8a65a385da6d0b39639990caade4d50059eda802d361bdcf878ad61fdeffe9148c2a67252dafbd93047dfe80ae0ddd6cf2a75ee277cb3dba96007224f3b50f026313a164a43ca5212ba37d088c9fcf01c6e2b4a999904f05790c6f2b392c528bcbabd2b2f2766a5a65a48cb0cdfd1275430a59b6ad635a36ad193da113a85c07127d8bae8cff65a52efbbe17e6c8502df398ae9847b6f7c4aeb16e1517cb740ac3f32ca5d83a3fa8040371ac6b63f0a2551833dced0d90460a6f60f5ba08330d7c97463768b950c9716657fcc0628c58f3f389e301c9cc212cadb6c17ee1219598e458d1b2ef318ff39ed1779a368bd83cd501492a9df3ec91e6f016dae8c839a564e5134b5e5a61f7176ebb3d7267a6ac174a7dcbdcb01ee6b57d5462719f402e836b6a968953f6186a80163e88a82ade44b60f6a18892e7793ef088a2dff6f90ea6c5628f286a2c3f2d63721fbd5fb2fe7e46c99d3d791e10ca5b1d670910e78e46854772c9b0e965aa19c6c4e799e3d7b4613bf8123ff9f8a31debbebdcb3431bdfe41599e98fec0ca29491f2fb6a73696ba35fc306be2f8723edcef23ad48bfb438368bcfaad418329de177be4065e5cb58a0efbf8540dadfc7d74165408b00d23c1051856ed3358d7c7816bcbf87aafc44621ae6167b6491bfc3fea80c66bcc011b5f3e86d63df81cff54250b9744ed18465c5cea5fb5f312e8a6c17983fba25bf0fb91f2eedddb69d4044a2b89499f1228f389fba2792661d13d3d76c7fc3aa4f04ea5339d7f8d6ee4164db434f520525caba80dd69c7d992467d13108f9ff7c87ed0ab178bf886cbe0e923e30d43b496fd94999728c432980bb1f10dd516b33264b1504f6fa5703a051da11e3632a77c100f136fcd5218344ab699e9bbef86959ed66969edc63c4698467e7f32e886dfea7116eebe393370ebd5342fa8f41afa13871fee6c2592f481ade18b692df8c87502c99a64412c53d656ea6404eb1468ad0c9a655488184ea89af3cc44c8a53d980c55fe2732abe5f481e212369d1fe853ac01560cb8795bf554dcc9298336493bd5e29f70d3572f2b9d45c0a8d2e181edb07c49fe7d5b235125c30a812453f146a69707a5edd93864f43af7c152023b646035c7919e67afa253d018b574a33fa2c79cbd3048d80988ccea3ee9e42b1e9e0451572de54406d2272d7a2b3bcf3a35801a4977acfda87d6e7d1d8852043384e4fb823a189a30c7e9ffb84d417eeae8193934e4e1f01f2d221a1c06623481fe4859cf200013366be1715b824d5958a4d92004ddae58767e30e9c4ccdd6410f57793c64865551fa457a8ea3129088b4f0af844ccdddeb35adf139c408a3be94fbad2ef180f08f35c92cfedc49b328bd2f2e879183429e0a878c02dcb336213f6593ed3f9c5d5bb7adb0ceca26c7f6116d9192d297ce204504317fdd69e8096d09cfef95451647ee67a8770336499140209b2e7677cb02839884196c7943e7bc7ca3be98f795c4488b76a00df4a25ac7dc9dc303afe3c534d8f668007dd44c9c22d1c2c1406651548d9da250ee8ce327160bf8f0ac82d8d739fac41ff413988a80bca4949bf29fa0e2a0166280439adc517828c3fa42cde93023e631688c5c163ad6cc8986e4dfac2f0074b9567112561364eaf4158e14f96fe426eb379917bda5b2b3268d97c1e4c74145cbdd9fca32d054a8178acf3e762dce1e840de45bef55d2f0e20c95c6d94fe4e220921a22d11cb9f894d6a0bafe0e4425b247d89929cfa9fe42a0695ef82d6e024df09adcef5d2744f2658d0adf85d8e4ec71e0300b77ba33ded58d0acff43f0eaa857c28bc160f25c6c40ebeb9391ec4a918b5e0f2e28659fd187b5adf18ea7fdcdd48b6e5dbe403788e8037197c685d6ea8b40c8e9490a953e5aebf942002ce4b448b07eb1348868e018c145ee45807a3ae55231d126bda49c9b1b98d8dfa827c77bd9c3a509ef78de9acd717e5606bee9623b55cc07a4565310ec939d73424f6d34ad4622879feee935cefd31403f2b5fcaa339c333e732cb8207f1770623e30d3dd40e0ef4c05268b06cefed4d524804e534e79ff3afc06db813ba50de726b115cf7235399792dc5d450519cc3689d417a9466468f24899f7cb9f60f445870e05abe8ed7bef3066769222a25eba8b37c536bbea24f6d14ca94a1ae9c80fd79e2fed05684ab5665b6378983700d3b111e3662f89a7ab3e957c972eadfda880e7f12d68340a7c9d21a052e636571484090ec201a155a1d91ace3d4b0c09a21b71f5c771ef5fb74d6fb9cb9d2ec5ef8c6393d4e2ffd35d49333aa710a2707f2fd2aa65c2e8af080f8c1c5d1d9ed1e732d80f0943c3954ff7753e6eefffc6a206708b62cbbe7cc15c1d4461e7e50f7e0fccfcf994bb1ffc7c6735ef697270bd67e215490cef4d75ab89de74acbfd3267bc8da006634d7e5407fddb2fdb90323ac8de4a306d995b78658272fac8dc1632f4212c828df518cdc2582541d21f2774cfa55fb3a3be9e9750ecadd87cd6ed662cf53bb6d091165a80ec04d585bd31ad1bdf5ac2754be9dd0244628cefd1fd2eed70954a3409c025c7214093fa509a0d32f50404ed28847502f057be29b690b0bdfa01e5c1455e53225fa0223bc1a8bb9e4d2522123db785d85a5515336eec1427fb482f802d380f160eed2b50f9a4e0e75185c3ec72ca360de8233914e05983b0db32d278aa967f2d96ef553fdfd6a39368eb9084b004af28048bd3d4f32125e2038773b1a2bfcbee5f6e49125a852d2cf92030e1ddaf19b115538b7c918b2144d90fbd34fffc1ce1d132aed154faa53a6eed4c0be3119b3083440812a1de9f5ec6925508a7959a8f55022d82b47e34432e188c0ba8725e2eb526f3a10a63c9b933d7e63584d26c7f51a86e2f625702d1a16997e8161c893315c1f32eb662c5dc86a716c47cfabb392fea18df45cd366b2faa16aa145645c50adcb1c38c22bb4f29ca8dbc7957ae465591d39b472af99a40a1b05a8967ba6efc41d46774edd49b8208f425622f6e2d2d65496a4fb472e43c170eff5f980fb553b6052356093747fb29f3081fcb22761d2d1f5446b5cad48bd5d8a17d316d227804ecfe1abf0edbfaf4316c9773f3aa8fb30061127328ef95a0b548cb7afb3ed1f33000a9577ee0e9325759b46f0950eabd929a9c37b5bfc3434dfd31bae290c74a7a31e919b1dd2fab0cd75d068bf096147d06cc4898cb7b8449c7973b49a1c3d3719ac34dcf5a3427f9ef7a81a113fb806aad8bf0fa9b262d51afe54359f72b54be421f3affdf606ec6a8f428754081c80198bf7503b82d040cbc031b391c68960831e6296af51b471a0bb1432cff90b6e9ce5120daa9f6d223f6d90b1398e361f870fe623823cd7c9d1e9a1af1d89010cb572a39a8f6eb5e3d65505a0cf1037c3606512d90f2ded3f8eb97f5ea54e99f4e3c30089428737203124e524eb12fb169fbc6d29ae9b615d37a911b3ffa032b1b844dd4c7c6f5d41d04bc39015fd1c6395844988090bd0ad5d16ed51952467cd93768e76958db4d324383584c8450845024b5c9676f5c79a7fa186ba0e51b59315e6987a1668ca5ead889f758a714b3536700ab790ff92bf1fd7525fb3ae88bcb0037fd977970a4efcab85e4d50851bed290d87def7fee95ae06f4a53da16db4e25bc917418ef12e621f7d452080b83c473c4a4beafd1798aaded24cf4b0e0e63d5df8a60cc71b67ae62da28f550eb5804c0d4c40c0dca32a6cd6f9981737efb1198832821c5e59512044112dc2f677cabdd0c58cb18531e2231412d5c5f845e1f89fcf03901ec313d7236754d42b924acdf558cb0a36e959dc8eb7afdebbd79a7b0daa0ab019bc6913b2ec2b1515cea784644d25545695389e2c304ee9e76e85a9b80bc005b80cfbddd9eadb0c1cf289ea05ecc1154dfb2672d6c4d96ee4d2498a89394d16617a703c80a78b41a9c89a08c07cc8d882e4cc5e74bc78f619cb8f26687ed86b7dd070398f6c643d22167fe57e4761225f17d16dee605508f021ff863e20898d75d4a5dbee818e87f1a5e3892593b57d4b5edfa42cf8952cd09b40b1f1688903af4fb42a862e30a77c3d6cfd9fa9ec70ae7f9b0d17cc63ea2103fbaf6b9e00559508482e3dbb73262da5c248d2d12d84f143afaf9524e5cb4c1fd789920a160c8ec907f0fc6f7e8b6ba78e72a853a03f7a72c3928f474356b7b87d4650f4f1af01589977ac947a5e9d09788408766e2cb2d47ebfee7ea614cb9594ee8ca3bcc6587ea7cb33708e282d942785d983bfd00130893d9811368bf080c58a2e609ddafa03d9f57b4be36f8210447d05c2bab5d0508b1477481a458f3fb8201d73bc724fafd6fc6a6fa0be04457675737b886285fa2d4d726a7bca0e9b14bb43244216bf4a47e8ea23ee9a1bfb66730bf6505f8af717ef70c180a0d75c826087bb574eb29bd3c2e2aef58d2ff9bc82b57a3b35450ff0025b935251504aa919d17f22a3906b23913959dc1ea8081fa75951716b2009618f1a291865e32c32ed09b9cc9cc182de5dd96cccd6eef037ecdfc1198981af119c95cbfb62f7ccc4e518b17cc2ada8ad2ea92fec3b6979ad582f135c17d2c7a934b4c123d2f3f00807e4af5b9bbda5380d91e965d7826a29f3328f619e7a1ad05c5f52b73c4161a55d56fb91b15740260179e45e329f8d52c6ce7c51a6e1702f1e7ec7df2948e744ef56dc458ce5422013496600d22aa8d1d8ec2453b56f916d81f968c52070498dc3cd9ca0b2cd74cd4ae9b8724189844d3275cd90558c44338db87d8ea9215127e3a181c9ad799bd6ae4222dd0726e96fda4fc02f0da052294ba34e654cc3c5bb57bcd4e8054f82e2473aeb69aa679fdfda644559651384f6c2a3237092be6ef02504dc2740b9f09a1eba5d3db4b66d443a9aa336e64da043fb9e43d7027b146f5763e3ace81daca53aabbe82ad7a1c4700db24ed17b76eb7fc7df7c325607fe0f5c02f9f84e57fada3f3575f1b1a748f360e0ea781b7b8fbcf29875c81d676e9050209299d783157627c70fd88003dc5e31baa8baab644b67c893bc9a046c3359113b972ba3e8a4d7e2c51847b933f9010e940c21c1ddb9109845a330a162c6aa0da87a1639f5237ffed411b7d3b4299c46218735f52453480042ec145b07a313b3fbbde210350bceea68aea15600d87076d79c7f9bf4a46e8f0fd9cdb7a7531692a9c537ad24d85523f721acb6a6903e1f2ade674cab2704a2f10eb54dee41332837325f874113a339f42d327c21eb55bdafaf758dd4459adabafd73642907e9e32887f2352648299b0413cb2cef4447c0ba9222b5fc9a9194b22880b10421bb620238782d20e058d59b97ef3f7b3594d6e019177b80a0a97f7b0255aafc09281338c659d5dd66c1682f0c072a5229bd4eb4c69c34fcc222d97a2d6ac87d28a07540a42fc5c855f3d132f2bb8410ab31b6bd0d5988eda99e61440c5880042ab516ce7462835e385 +Output = b66b220d8c6a43fa86b2a4ef61b3c922 + +Len = 79760 +Msg = b4c4786186aaf5a3d8ad42fa5bcb376c504ccaaaf09c8e8a0c567ab7f1a1eca78ebfedced9e3b7126e43757e796f493ad7e193bb78d57137085b825cceaaf041d4b7ad9d4806fc3722c0349d0707c0196d866be1014cdb8e45da5acf7e7add5fcdd33e349cbbcdfa3b4c07bfcb3aa5f05c63d98452a8d4770dfc8b7ac9babbe9c23c2afd9ca93143030e774c8fb1ffa6eaa2650c349264daa6e89cc4761292c6fb19f95e127930fac02f0bac1913d625606897e16fb2949f59c715144f296be0c09331c1c4d2d207bbd64c483109335406e0f86bcbaf6bae6ec17fd41aa84d1e59d25c8d7c5d20523c2cc086a13b1d1b232f0f131032f1ef2dfd616ba03641680dfd012a00c221c38b59f1cf30509c620080643f05e22f4bdea44341a97c4ea6263da90018a8dd43ef84678ca5f1b811e6f9805873682ca8c8ddadbefd227cc0eab9db778eb75db8b2d6a823c9c57a111bc2eac7226bf1f034d1284a63cfd39fa29a1ff72998a80c1a763efe6475e948e7042af3da9484096aa83b4da42b5c299507fde8b0f3c625708cb1833ea80d9f94e7c943638befddb2896f2f88df1e470d29feb2ec6fc0edfb42871c1e07effe69924e2184f73a52549c4b58d79321e25027a9bda5b59d4a05be4a30cd39964ead2e41f407806b52970b573059ee6ee0a72a8771a26d6526d428812614e70a75a9e22b23b2cf8cc4c5fb1b20d6990c2b5a5a1e37ad3e2168b1a9b568b9b9545da5d793184e8ca48f2496208e153c03a9b1def9758cd0d8f8e4696d5d84567bece834013aa25fbc9dfd04ede3df7e5c44f4df9d9408cc92beb58f316d3f67870cbc22fdf178eedbd5976d0a88fc071ee26a8494fde9da57a16c438900b09381a467c910a596e4091f3cf800e33480516d5cf66517f7a1308c50affe7ea183709c3250c1bec5e74e6332cd565e4f91fecc125c9849faca2464aaf81750d8df5cdc65e099a4cd9fb389c215946014e12ce7d4dfb5fdb9fc3c12c2495ddc1d4e4e4b48a01fc076b63f7a34f843504c19e3a6eaa7459afde07f7ee0c8578b3a784cd323b9db7888d1fb1cd09dea98bfe02bf19bdbd0888e1ef5904c9d8dc5f506615b3d525535ca9bed58de2d119f35df0db031a4dc2e345da6314df187f318a092ccdf94166005b91f17a5cf40cd76be90cbf229f3f6b7459b472decce7b69ede90c51a7a55f01d6993f6eac008a4924bd2a27939c47de7fdbbb32b5e9c7b1966d04dbb28a9c869861b981ebd83e78b99ab61709608972b36e76a575603db742269cc5dd4e7d5ca7816e26b65151c92632550cb4c5253c885d5fce53bc47459a1dbd5652786c4aac0145a532f12c05138af04cbb558101a7af5df478834c2146594dd73690d01a4fe72545894335f427ac70204798068cb86c5a600b40b414ede23590b41e1192373df84fe3ccd55d0b9fbbd080151ca4629c3d5b3578e6e637c15ec9f1ab977b0d0ba50b67167409676bbba48d542c104d48ee2b1eb54c5fcefdafca18bec99c785714c13ea87bc1e21956e497dd9c9922785418ed7e4d47579e0fda4fe011bf212b2db98f0a504b24af76d7c539d6078932596ccb5c51657dad6843be98d6aaaf8ed83a83c55d6fd63802c640ef40222980e46ddfd6c082e531a14b8f6e8126cb89fd8e426009f7a0b9e2f92f8744b1ab69de65527403663a32a23be7ea78fb1d2284fbf363bba9293cfeb8bb89497eb6f62d9a4bbe80d922b9535bf19524f14c6355cabf56dd4f1ac83e4b0c7eb74ff32dba55f33da0a345cc9cf2d2f6edd001545843cdc2d6af1a668af949eef5ed0a186ddd7178cb8b4d76654ab5963c5fe3fc76ad462f0e92d21dca0c9b5f6d20a2bf2e7ceef76a5bdfbc96a9c0fb77679b6395525123edbfe9f5e6ca295b86af6328e6789243e3d9a6a817581baf08b0d0919e781728db0008f6c67c1c69a864f75d7b1a84e3a0ce4741d09fef3a55022b8f7a68bfc5401bd72952699b123b050366d7aaed5f07016d8fa9c56422c82554640f6a728384d9fd9573dbcfdca75b3249e070f440823cbe9b8b14a1f1c7e0f21847c558e80f0223420f18df51552e291080b3c20d7845e26c5cd2cf2ebcfdadb409c3987e495ef0390f69f4f9ab4693c39ebd7e4e51e5820a064815620e422f3e3caa5bcd9bb40d815c16365b126a166822d4518c74e4467e6fbe9c1425781dc1cac3c85c6bce2122dc67ccfff3645a09f341634d4b0ad5cf817b8bcc696722429a5608b32272d52579a4df6db4fa08adfb4cdb1c3d1fd80522c90b1342d6e4cb94ab425a2969d1911a14962ebff5c85d213ce27eb2eaf6293cee446f188e0b63a0099fdae67bbc6ea7001ac97a1c41204d5b9ffd1234d842b6335d6b53584013a6ba47b9c36f3fc507b092c64f391cfe67ef3b20c6c5255878e07f8c5bfa2be28e046182270f019d246c27aea51200ff5841dd6f346586746a3dd15c983c73d8403015ba7a21abfee57c0107e371962c0699ae73c5dca39c74927c6273e8c0fda5858deb236ee4f03227475c731c868c5a3fd6b3e1f123db7e26a72652c4bc5aa34dee9c8cbe557cf3b72232bcdb77273c7a7cb8f16eaf3670427b319e9a0df623ce63561cd9a5a91072b913267812069593c8085b19eeb7322e200ac0305bd90e5211a03b867d8072a1358619b9fe304bd2e32d89ba8965ac32bd391e4e4f0c4a1f2302518f8507ff8bbd14fd68e3ad487ff5afe11b2748c7967a4722be9096c17dbf04c6ba6448a07a7a433a4b6b8672e22514cd03716969a180bb3347c77f59b60e2f03d0c34b3eb4939e382b3cc2b3439ce6b4390ecf7b9cf71db8b09cd0fc11370a6e984916bf8231aa60cffe69f2e982acfe86a782e6cf07f61bc2b69091d5621e70dc9fb30d2c7cf118015a84171dfeef12b2e48b9082d6ccc345bec7004bb9f172626c2a0efa9bfac987f71a092738365a856cf163fd8f2a18015b7d31bb610ddaf35981ac34b74ddc2a7f33b24f59093dc7e8bc4687589582bd36bb0b6c85fa11570ec2cd21f773b7b297d7f9dd89f0233ffff5206a59976943f78878a84b3e805632f55b0a84f3c4e7e90fc618ef7474b65aa3dbecbcb7355945ed60b5db638eb86d203d3785556a911de20149b41c99f4a1ce5e56a67e4ec8c8f1a9dc5ef1a244694d5bf023221077db5993b8ff71f8c17b7e91f041721d57299c3c65fc6e26c3cb839d7d86e12062ca7b62adf9fafae590bc5c01b51d08d010f60198dc6481fe3ecbeb25d51a011a92505770ca3f0727898fa7d32a0778f92408e0bd275a1bba682c2d3239551b67dce05a4899c888500e005aacc7b6d69c0ed9c21b04d95cc2f1ae4bead91bd6115034547f8e1ee328c6165dd5b4b4887f76718dfb9c68acdd82592d96def39adf95532b5bd3c882775ad998961a89f86b02d92ba5178f73d2c336bc7d6f66cf9a5445c9258d4ecb057151f43621bb8c275d1882619cd6196a5b4cdee9b5fbdd0a34131424e739289ab48757fff0d4ae7d2d367c7753c6066df3a37c20d73a2cf7dec4f6a2070f00fdcb82ab37b05cc5331b3c002e65e6a2a332447f6bfeab2429f96056e5155bbbf75d4ad62788d93912ce31f5d0fabe56d3c136cd1252d72e672ef01b363aa2c05012e8c217a1d571e2ef1d45a339d788c74781505dfa45b07b257a2fdd9d6e79d09463554e22d7d76b2509d7f04bb8a2456d2eee941f7d142b8509792268464d3e88c379163468d27419fc93fe58e90a16db4491fee808c040f6a2e14dc0b3a464991115b5ff0fcac772fe611787f32a0238cb20e47e6d1e82224f4fa5cf3ce7086d541074aa54272ad9172981005d68d02ccc838e083494b8ae17ab73bd697cf3ac94549b5ebf5266f650d385ecaf2e4a614da244afe68cac4503ddffb2c2ccedffd9c87242d9b14370b0476b7372e3367c59654e9b0a6d248d19ce91d5d03fbe0e2c54417f29ad88f03f6e7bbc2dee5d28f5b4f3f3289fe92e6364714e1a3e2d8094e04f3c37afff1d062efdf068b9870b2b777de0c88ac3d1e988e746282f03fd1a54e5a28c1d6ea00c703836acab7bcd029632897396791eb2233ae5837b082fc5984bd9af609e205a1d75b77f2c031783f95b17b02bd5bcc61bb352b28b04bb9d95c90828e15746f61bfc9a6ca4e591b4883fb108b19d542d5a9ab63dc6bf4caa31a757800760baea541508f87beae29f2c288002909a8defc63738ad930088f5552cef3e3983233eae0829ad1adab24ccb5cab263094101549d101895c911785eaa1f8eae18629f8131c2412e77dabc14e245bfcf95384a7cab138598838a262d64e990d663275226a9a22af4b9b73089ec8b80d549e92ab302006a67fbed195037bfb2e304fafc39bca4a0daffbb229a190e9e0a73ee22b656493f6a8eb4b25577046d5a7a57fe48df4c5b37966112a41c417fd5bfc1b2e50c506d46d86b91abc74a18a33fb8b8c2a60ba2913a4371565ab69edd99ee5bdd98d87c53559c27d19d134d63c1b7ec3595652f8e37dcef1f58e083788eceadfe8024053692a0f5555cd28402acbfe91021db5a753b97bc7d8b51b63cfb0cf9c656e56056fc247aa5ab1a55165d4b3ff0dfe0abec91fe89ef868cbfa18b03ffc3817f463b0e913840fc5d28f55fe4714634179c6af78bd7e3cef4083cab5e0084a4640f694661bec5c50d88462105fd9ea2e2c466c8ca1708c91a1864c875ac781426245840306e9299cdfb8f5d4a6548b0c48c668233d7ad098168b08ee5642c65583d9e6867d845eef0eb27410c18f2f25f8ce0b0539a7f04ac91b65b27c7f02c5cb3823b827c4e4928dfa498d5b92bcbf62e7bdf93cfcd5f0dfbdcb9a73881bdb61eca461adb1a1cd8518da131a631c23ae98e6c9ee8365d183faa270e465fbdf6e7dd049b6537ee71e94916aa60c3599056aee3bf9438937db5953fa761c881919710e37ebb3632a7ff7d559a895f1688fe43d1802442a680f624401d2b7acd08b52c8f5f3d839dcd1c90da9c80436da738e3b27b48f2ead489dde4c9f3d4d4eeba7654978cae6463b90a322ad63ee35daf05132b42b7f4eae9389a586b755d962f94dfc1f9254b0e6d6fe8c00b900c2eb93e5ffad20039368cbaed22f2cabba18cfe7d692376961f92286af680f54c9cffe61584577a4c49fcdb39c41a4373934b19d9e79c10fa39dfda3538e6cd292adb92b03243748287a2202cb6528e19ddf27d61e7b392dbcfaeebd3f19d86264ae4dadc8f368d9082251012742be913040bafb1c41a6abf5377d3c3cb25cec89fa414d715a123eacbee21a7781712f3880f17261731070967d32881201fe5847b81d75c4003e5f5c775eb485c946a3fec655a4b5b87f66e7f3960989adc88ee7106a8c8b8ef42460754c3617c347d5ca3b6df9dfb8fc7430c23028685fc276b02baefa8cab3a75ffdf340af6167baee406c1daa91c8e82b811884b79bef3f9ec31742690001a3a83dd9e97ea6bea149351d9add98c3e79c80927dc827363fde14a417a5e359b5b32991345bb6a9df020413edb38af133fa8d294414c251a6bd99c9f5dc0f1c5c055381a7c30ba9b2bd30077cd8e2e15bda09357e49f7d212c1a5215377cdca15233e53ca41204ecabf4b60ceaa3b04cdbf874f92b43237f26ec922c715b9f36f716c6002529ef995acb8a85993edec182f79e0180ffbe3c4399846a7125e28d984403ee683d24a91fa0a56b4429607b98e639f74a9cf6616a68525aa0a24cac1e06c58ed3164a24e1ba2f46522add82060d6c64f0e375f483a021816699869d6fa43469cf7b0a138a624f9c2b0afedfb5b460cfdc99e000758a1c692cd4386875667706c5360c7d01e02df737906a998c233dc07589e28a2a6e6899581909131694b7ed1b0df76a2e7cf2dedd86c9b872a12abf237a219c899430995431a1a83c751ba73bc974e2f97ec6da88b2c54551784f554e33453d7a439af286e4a92ece52ccbb8b322aee4a2dd0729dde044610eed5095e7df776e5c4ce2b58f9c9aeb473f1b1750fc29509d2392e85d02ec6974ce464bb20df4eb260f5cc313aa82fd620b3125f2ae3e01eb52896a851eccacedaa3edcee4a4cdca5c375d786defb91ca13a65b34936d5711ec6336e28e65c9ddf3b2cfd91eefb1303bb67975b45546e3dad32d835627feb553b8c401fc383eca5d4a9b1ee67e1769caa72f5cc5309b43e340236b610e372a1ae2984fc2b48a37294ed53c4b586db6e2b04fa88c1dfd6eaf95b3593e80bef4c4793a488c8b1aa8fa67f49db80f22bc267a70e5636dfbc8a21c83d9691fe4b9c3051068b3fc9e94430e7fdfb712e4ce086e299ff5a104e65d7ceb685b4c46cda8eeb14cd3b9548d85baed5ec2f412810af3d034cd67a75c541f70829f8663c4d8cea3415621fb0954e5b3b756333a69a0a41b402522517f087ca9b4a06eba23f4fd5d02c5c6e07c132769660b50dadc5c07515ec751a1d2fd2cfd8b0855b85f602344fdbd28a37a52e874e73ccd627dbf9628cd1e86070ca4a8f25221ebecfbbcb9019e86c7c26896b17cb775196fb22dc8e827853fff6091691eb69791d67d6d26f961bd14bbeb410ad7433eb5511e3928360aa5c0099345f5d934d3d7f358f405c2e3eaaffe57046d2b371431c516542c98c2fae6a40924c7c839613ed212e3ddc49179ea18503350deff701f2a3f215e670cfef45d36c0675250ca26e13faf0794f70563785b604e6918ecce0efd033647252c899390ab4d0e077930af33c82baa80f79cccdd1dce5fffe4ced1d48c3cbfc7fe06f5cb47f161b9e8dc9a93d1b27bcbcb065459ce493a20f2a2115a2eea1751fe0ce23b28fce404a39b41d42e149f341a30cd55f4577e2890e84bf26db7045fa6fbf764b0b80b6433ed23896ffa7b665f9c86561261a28339f1f031cb3bfd3d836493dc91bb5e551462ce0809bca6bef5ba2ddebb002dad686f9cacb9d178981dc746072e9f3353cf6c8fe47de387ca870a025450ab9623a6b1afa7cc2ffcebc0a48c88f9ac50ecbf8b07b34ef7b4f58e1cd25b75ec72627f48b7d7749ff0a5368ce5b6759b0d8c8f4ec3d8ff61b4ec7552ec689d1b29065cc5339045b9fa60c9d0d02444c3efbf991822ea01d9edfbc75cdee028d0406bb997a186b206808b0520da66c9bf6df26787c35ae8a8e6c00e9b1866bba44f2f3040901f3bfe199072ed72d286f60ec1951e1390365725c5c58e2770c7ffbbbd3b407dbe56193c1d8da7281c0f0058b99c3ba24e5d7d317956a69a72d05b0c924527c90892d04e9edfde6887c456c226d760edd9d08380576c84d001674eb84ad857107274cbe770c403c2ca4971e1b5e13e54c721f298ec61a96690ff3355438f6ec2807e549d5fe4b7b537f0da1dc34424859ae442e1a4c074cc95faa14a18b4cf8db71212b698ac5abe756d07fcfb7aa3dec97a1d011d138780a4fc212d370309a08ac28ee9d7a57d5cf71073f5aaef4cfed775b96db1d5522132763b752ac4adc97012119d895a800f318db6ae7e3c70344949d09e0f80550cc2fb48a860a41c570b8343581a261343b937487dd1ccce3d9378daf882af00c1daede13d851be5d7c198bc9026a29798f29f91ea422ab7694a753133c7abf5deeee08daae4868ada16b4b5dc2b5a9d8d72492b8a4bd0bc45e2e18ba62b21a4c27355b6871b9e8bcc8f89f7a294a8858fbca69dc44b494d61d12042e6498a8dfb0ccff448a6ae593da06ada79ff36f02e364a312efd1efb3bb9c3ef6a8f5122071fb1bf65f230838bdde9d6c8c7606dc78396be20adac4631e14ef9a9890ff175309d8075aaef9b55bc89851589cf4f1a093e7d5fe98baef30c23ea29a3318cb3c405dfee2d25f129a0bc6df6b2de24644b83f7233d37a5ed7ed549718a4054415e6d3635e56e25564f14e9d2ef177e54df19c411153acb8fddf580179ac6d8ac74461bf38032b88a0c0581307b05cd5a18626cb01dff70689de73662513f9a639a23098d7a1e2b236c10eca5f31381e2abf04976941034f6333cd5084a1509f52486779a3f8afdc0d3c96499f3db4c9cee45f2eb23f799b73268d46fe1e1a7dfc7d2fe704cf380d0f7918182d9c78dc773c5e1645a201f2a1fedcd1fb5101481e8ab06c62ef284d23bfbdc073162b620c102ad98831425dd505e178e303ab099fb7118f252125a43158acc8d772756075a8eafee5b6e5e3f781c5c31efcc0c8694c7bd9b52bd71b228a0eb8c37a00e09a4cc70ec3f7918defbbaf3a1404e98b639115d07bd5e8b9dc9e0b199ef471e96344e9908abeef62a5fbc8662de3ce5c75ce08fedde9fd8748dcca72d0a97384b8d7770ca1d1a76a018937ced2601642874a7beb442dc18b4e8b744bc161acb8814f990b72f860adecac25fa69456946814e971d196bd9cfd7f4302cd9e4c48da6f2791464fdc2344cadba735c58716e4b22831ec269f05bc960279e80f9640b0f093cafdfa777060bd41dc01162d3c4ce0e6876a9f0ac350e1581281e6a343ba4db0d644bbd242b0f697769f22a3a50f05a6eab34c7b5678c5c65531bfddb244eb212bc110874ac42b4eff7657a4c199a4dbc47cdb8b4f92d7cfba6df7b02cef3d4733e97500c908afdaef1d418b127b5307bd2db8951f1d7bf6ca9d2ab50427c8a5973465c97dfd18bdcdfa6cd1282274bd2d2c6033359746be0e45c576e87d21cece186f6bba1fea7a04943611733dae6ead1f5ee0338ebc97ee0e64503a5dbd25312c0e420dff99922b8139c6741b449eb56d212689724216f24d63eb8a581f4b78e5aef6fa1aaa98bb47e46abb49fbcfceac4360b7d07bbdb38960a358eabc93fdbbedf50edf91f03c3ec268a9482864514332493f27cdee9a58c712168419a1483527c6acdce42b16fc505adea44f0ef5c87a2a9ff6bd3c1f2223b243c2aaf5d0e808e6648115bbe3f71abbbbdcf42224a2979f5aabce38ca7bf2fe71150504302afdceb66aab251bb58e05d160ac405677f711efd5753724dca1712ef9ac5eee9462fa230818f936ce26c3bfcddbdc13af251cd00246e9a6badb94ddef055854aaf4f33ad7e3aacd97816fc7730777d4bebe3a9ba0c7b2d89cfdd3ee73a4a30ae510445e68afac38b80a7498feb386223d0ed5b33f5c1522f984d901160ea199c941680e18b19000864e8c94df74998490a388a73c98932e670d0e9654b7e659ce04c8ea86bdd8cda8a9e25b83af24645028cdf836e1bf435bf2df2e9e14d3f369d6f1443108f8f885c9404d99d7a95a01fb0026acebfc2a5ed2d52a70ba1cdf33347bdb86476309b40910fb6082bace1c86e9a30cfbdc1bd6298b1a7b2c0375a0b9c2e114ddc989aa05cee59644bb490678c4fde5b5c1b058736b9f0bcf3a6f48b361256b507ef0de3be48ca9723d43663d3cb7a59e6f805c2ce1089138242471cdd0f8d83405c7d717fc50f8bfb355a240bb30fb0a17f467c2a5e7d9db532dd2758cdc09fcf0771b2670e32261bfe8412fcb2a24ad6d94f1e104cd144d49f3e1270f5f6f0fc19710e3dcb3b52ca583c956d6e3d0ecc2da80e49818fee26b0f046ed2f38600fba05edcba330f6516b0b15288fe7e4cda4dab69da6bf85f48e7d2c97228dd64f11b6b7d73f1bfaf85e78faf3bea9b41f666c7dd36367f086606d2b3577fd3b06470bd42a47034507590cac97a38a660b9ae6cab55f9117244f46aa91d690757a838dac8c62f1c1c6864d93dce592e3d969d107094344e21683921371e54f6df3eec2a7c538ec557d0bc517892cc911d1fab39b98b68939a323d8cd9e4f410bbbb0342e9c72fce97310fca1682238d93b7617ee2a6167041557a140e0ba6e3819f06ba7dab82966f1be79973f6de6235e04826887ece62bb24974d4fecfdfda54d6ee7c47b17cb23f3cc463d7b5dbd883cd7e7176fe0e96c31ed9f1c2359bdab58c4513ab06fcb6a5b3656bf8a320def2f89271c03fe82e8f0158fff294aa218437f8d6ce5fb25a6b4be41969debc1ff3ae47d02d597bd960187a665796159609028f2b7862a487d82bcad4f40fb782ce1723f685f1cf807c8bc68eb9e1e3208b13937c70badc23357c9f035fde1aeeca5ab04b90b2ed0c2c83c5e0e01d1ca954928c307f0d6217ca65e91073f2ec4d30a076381641dc63b828fdc293f3c918aaa800af6d043c4cdf0f3262f8f435864810fc23de49a46f68a1f89d9c0af155d67d7961024674a9bca20161b68bfd815ad3ca75b1704e1684173edac10c9c471f387eae057c1215a945df7575604d26ae106897575ee14253b155dfcb9ed2d8cf0198fe404d1c7aed205306fc1b2c5d8cf05fef98bc65da1e98c716816a9cef2d024db979629cbfd15ce57c1463a30e3b9b35e73c32e3c62df31ce5ad18017480602847796299cc9d211d3f85e0b921043875e60a6761eec8ebdab615500a501146ae1008f61c89999684b7173b767e2fefa453cb04ea3a37a88bf082b9be6928da697dedc62cde0ce4a14d911ce20d04ea4c9847b08392c151b6fbbdfb25a80c44e0f4f279d1b34032fc67bd2a06b7ca4ef41c461436deb00ee43f8bbf47f507ad9bdeddb713f07ba91e6f610ee962cb46254790d80a064a099c24b7ad2d395f3d23a4772afb7d06718ecb467093f74df76681eca308f2d8676612076cde5a5d1bffac8878904229b1d4e534f60d5f998c3f32241d368aa153ca7145a562424970b760d849db272b927923f34b5e80f72b38c2feef9eb7eff351a937ffc2d76b63d4272e46e215563b04ef4a158e44aefdda9a43c1485f086f8222a62305030a1ddd685416aff2f0d4fdb002fda6920829ac20bb3a3a6b35f0e64459b833ad70c55a8d10624aa84287edcde3aaad514bd737bd2d037ec4be9e03781a6755bde384d3fd2bd2b91d947a5bb0b5c5ab6bc03101d962c41c50eba06424afd8711aac82d1206d0d063b2ed5cfc040f5a9c7af5c94dd23241af9041f8eb2e1b292ae13e6db5e9dbc39e857c1d1654ce3ad4d6083782f36cb82a650420b88789dbd605fd97a1f8586580e5866ea07a036c2e51acc333963625c3f183261103c43fc18da8235cbeb146d9479eba10e0597ed77275f4f627491aeaba4161bb0f54956beca0a94ca980d7f6202787fe343ae38ebcd6554112fff82d43c17bed26a5ad43b78981f84541a97603b370bec2222aa295506c8b05e55dfa1285dd4dd641c7c752c555f62e6e3bc766c4ecd926a9c4b1a076935a6c73acefaaf0fe539ab3758552e68dbca180ff68cdce54d3de2c324a42ab7225b335755c71b55774d075470c3c5fa1b25b0474d8ad425145653403cb00817183769547ff0b2581483401bcaa83a33a8dc7732ca589c35a94385ba9c27e7b29ea233d8515ebd4043421d3370ead53a0955357974de7c3e946e40da4aef10b03c04578bd5f783358df367456a73de38c6fab2c35405bc685e3d4c4850f2cb387ac59e1612a44e5e78fce6f8be299d546832b5b970b3a3da8e1a70abb6165f72e14dd021104e64e38ec662f576f65ab776640803d2d17abdac6c75ab82451687f804b553d8db0eed57b9a3e39ac15c8878fa714882488938409b24f1be66369f47531455713594a45a3d706b3072ecf0f75bb93086fe1874d30f4325716108e157a0b7cee3423e2f1fbb933542f052177aefa865e8dd6f99ec2f9aefa41ed476af54646737ec54b62e99d2e8d725d624891e058cb0ccd6ce1465f3f55e84e286d8d8e4c874191d631041f62cf8f8c040ac509a50e4b2943bd21914e2a77d79385893ff98a2b3e25c4c19c7abac5157926ced2d568e79f209aeb1c65c87f1e2b4b9ec7c80caa1ebc96a8b0c0afb18e443505d8749b50838603096d10b07c66623824d2527f2cb80d3f2fe8ff4ed35af7ae10870cf6247ae67e130fd992ee54bad3c1dc0362519e9a26dda160f8b910060a557af909c1e9b4748e712ab0536d9796ec3165468736d5d63866a03dc121f1d26b00e366b754927ee24d7ec92a15ab0a0a9ef2ac5c1562c5a6c5379e8a153d8ec7c5366d734fe30594d1501df0f14795b36135f43ebea38dcf39819b827e6b97d2447cae943038a13cc9495f46650fd25d2499cead972a97083038a538a1ee9630eb20aa88aa05ca4071c4ed790566389e55a89c37435a79f845a75c1b4449026a45cce1df21cce926875d492736ed40cd70fcdd5a27d59ef5e66810b8b9fd54c4d0cbd4e61c10a675566d02df9e07838112e11294c90e7ea7aef5738f979e15f708c7f45c0d535aa38b9eaae09f37694f97ffcc55bb77a183ebd9e50e518dce777a2bd0af8a17ae47834c91f8af1f7a8f8cc37b3b53a3a001397ff5c36c5ed6ac9171fa3ef6dff9c7da01687662022fd77db69fb44614e2a62462263d6c83c72ceb24c1a8f81ec5aafc478ef84c9201adc753ba3ee74de1e9193ae6dac69f286ee3ded77bf246aa7766a985ecc331887906255b59dba14650a434c83a0f0372f917ea9c0669fa1093a581ddc26a833cdfc6a5e38387c16863321a3ab9aa432f31f3f29ff6e3ab80a6357b0727a6e99738755ff35a7020c0976f45cef82cf0c5d0046143bbe3dd732592ff926b0ce710198eadfb3d2941f773a831e5740b7ecf29c5b137d3ef0280884a89f02b010e30099f2a7baa17a7656e69792eabda4fb3c5c48ceccd69bd0144d8a4b0e627c19f7f136fe53fcfb3b31e4f85fb0dfe061c2a6d4ec306e85fade1a9ca451af5a386e087b8d84cb61938d9b6e2eb18fb2450ce3c616b1eef7ccef54a753d37df16bed468cfb57f6f2a8f473c1a7f6b661cfa37ce7f3583e396ece6473ff9cb68ad8fd1330f1d465f7a2edd4b871863a36290ed7ff2c2c47930903b0c851b5406da725d72e170200b7a901261d3569057978d55ed66835ef4dc517a26ef12505e201eefa4f14e9b07ce3b6d1b69aa8fd72e7817833507c1faec991a12c86f4eb310edfe45b91915b8c7b973d4c494a0c689b998cdf8b08c0ff3ef914ccb82adca1f580fd1a3503ea309729d3a6e95719a5bfa504a3c2e2b8894bd8651431d0bf7bdf59ae53a94646b060f6f98e23d80b6f792d47459d10f19119b4fbcd96ee7b08f3f35dd094625554fd8518ca9fd4cc0ff1babd8dc39c5162d0183ebf928afa8d5ad574579f600164965e9923045343cd51d3ce45dd8dc243978996b1cbae23553b8759b172473127550ae261fb5d58f0be01e23392ec2b7b96916b6ce961dea7bf9276a6b41fcde660105d4c2bfbf3c262cb61218bc07353f6b725b995ac13ca0d7d31fd0df0bce9dff871ab3d34fc8965b9b3d570118413df832c5e7795aa074fd0f48027c3e878fb4b8548d8115b8eef534017e8e84503787ee92336278ca6aa1426f5a79f38dbdb8f03e9a598f919262271b19b4c9e6aea2fc2d27a679fef48d02e25388d9459a94f52574bd3bc7135adac69324577925c1f2031ed5fcc29518c76d88094e43c8a10da5a73ca8de0427c5a0955dbb8c1f7d46c0a3516fc9eedd065d527bc10caa85c03b9c58455ac7618e457ab174a40e3d80c23fa941594422563e6d60d014c2bba353ee809fa1ef808b01cdd00135747b36a44e5e200547b12d8d135909d093bb3d8af8561667ef1d4281f929efc4d4bebec379d07a626be202c5feb4ccd4bfece54d543957f148805b32a73faed6c190afcc3cb0bee5133d5c858a1497a589f931178cbab2f27e622b803281bcffad69801af17f7bf1f04bc1284fe908a7a448a7860c4ae5c0132b3a173580a8840ad1b63c428d203d6565a73abab28e7f6163cef54d7a3f0e89541d542abcd0286c41d89caa7a4a1bf543954944f1977173c30df1eac94d2253753bc38cb6e23144325dd893b75812223e01b08936c2424deeeb184ea88ea003f71be1d5df4d53153bcc6c88d4e8b47eed732cf1f28d46426ffcb4f3a8820c0d52343b80c68ff261c68ac514536a775dba7ffb19a5571203aea9747439b5caf23f2b3d27dd1893cc5b4f7ea0a36bdf612d7ec76acfce2a142377b33aec986134e6576335b375ab87625105c8455b510bcef5fe5fe240f2c676fe1dc221a86358105f4a34ca35ce559455d6e5c9b770c0177c2c738d5e00cd019300b4897445de25896eaf81b760a93 +Output = 9a0341947a5736bc03c15141619a1e7d + +Len = 81112 +Msg = a504e76eb9e6244f9036f6cc7993d68e4e02fcf9b12bc80296c6614002509c4511021f2e3e03c679dfdd4517ef2e0fc210a07791d01a15ca2c386cf753f9c93cacb86ee7195ef0497ed5dec57dc0a3268469ae350afad08c15f1e5a500ceb6367b0e1ec1d35d6c66740809fdacb15b61b146e80ee634bfef5ad7147191352adc88ed76e3f36a017ac95c0ee70269fd1ca01f6f44ec2eab9c02d440848f98ecd6da3bbd7601ec762a85bb34ac095051fe57dd89fea4515b3a15cfb205825ec5cb79e23ca1864b9420b10cc47449ce21b0e0667f64970599729cafb31df0ef7d636ec83b8d09ee230455370666494c33d943a499a04cb32bec9d5e89f463b3dc47c0d70161123feb7d772342ab91305022867e1ed74bc1da4f23c37cb16212aa1f77f5d84629a5b33421bac06aa9e44033b3db58341d996e4333c6d67d7674ae929c0c0664d78845d15ae3c7cc1acecbb3d1a58ddc49a1af72d74fdd7f2541b1493503d4e2a35067fb2b86a1f96a58b94be9c306fa574365811646dbe0fae17bec4dc28ae91666e25a9a8c941824e9d1a2021d0bb4d0e6571bf99316c77abcd422e93170a0b6307d97b2dbe952cde8dc61249be3323bf14ee6861fd75d2f3a84931338ce300e17025a785ce8ceefbfa32f5725d89d20ce128ac7d065c9a0c452e8d2bfebc0a384374af6f7d8b511d5ebb5a4a3301d07e46bb0c48f0a3455c007c92fae1079ffdde6103395032ebc927f9a12fd34d9799b210084450cc6d7986bdd30ed8583a98bd554371caf62775e2687aa1b2cfafd5bfb210fd8b4a6adb246cde064920529f7cdbd0b762578caa1a72473e560a71c8cc2bc6d324afd5f78604044fc7f27088895f3b689ad993dc3cb18754417095d963e78a73916f2765081df669b9313cda5f79f403f8eed592c5a0cb81e9b4848e237fec3d75fae79a470524d2a17ee00b8b969b27e129ba5451ca7455d328b65d675f5ccf36f59f0dbf640019253e32928a4f813307fccaa74d89223e725fa3ddbbf06c7748c1a635ddb528bb98f17d15d80f56b3c1ea7ee2258745aa6bcbf575adfd9be44ff195b92e72ff28913b57fbf1507c28a3755fbb862f6f3803eff3bb99b15b84a107f60e2e17f3ee926e3bcb62ad7210212fd599cbfc0f55ff5e57262bc62be6e0674f8b593ec77c012c90faa890c8f8cf6c88e383779682a279683bb0a6ad7982b1fad73c31ca6f81d910003f84f15102dde24f391c954c91d3df62e4cd20bb0c5a906843ab7d378906017294048ba76fd66a334975ac2231f0054214c45629e1d398b50c0660428b361dd84299e86a6af8891650fd1b922740724fed069e54a7bf8c5401dd143f0cdb9d97c7afa81888a6e78edc2d942ad667bee2ca1e69b9d260e3bba189f97b82893947afd03b405d83ddf34781864ac3b843b1387658d7d68a275277a7809680a1594e478622603df204fa2f83627083c49911b498ec1d387dcfcf00b069fe8bc676324b4bedf6be93d4f9f0cdc93a7b1f37bacb1084188cce5577b93ee632086b289a079c0e8263cbc67937ab2b172e2a97e2e857c15827fe50e32dadb5df9af1e8cc28e10481b20c61fe60b5f8851169424098e9143abe803aa7ca773945981d2f6f1bd550731df830000878c202d97dcf4a594f0d5ea4f68b2c0c45e102a42f74e94cc372e52c01a9149b6e082ecaba8766b5f40d226fb3cae68f745d9523bb41d158460c4650ab35a2a6004b5789b2033c1b62a434935a627db09d0f8bbb432eadbad75d1510678e4094c9fc1b7af6eb21062562f3a45cea481c2a6744bf4983d4e0f215e00fc8fb64f435aaf932eb77bc12c6b9ee173ddadc2e97055ec450f9ed6710a7159332059650ddd86f36226173ad912992607fbca0648d5a385edbf96db9dd81544f55453b172cf4ebe91e00de534f226f1484f84b5a57e67fd35cfacc559344fa988522e9d3ad810de0410e52904b4502a7f026237c912a93e656869fc6ec62970354371902ca1d33a03dc286d10ff1cb9f43bedf47c3a6f2fc5b154e8a435aa82444fa5f211d29fbad56c5d1b217c9486ef23ab55859ec3b89dd3f5f2c229dac5fd9d512ab1137c46c4e90c9affd2bf7ab8e226c0aee5acc134f5d480924cc222a856fda2d40a73c6167bbe5272aaa57b969fe69ebdb83332d3407afcda4369818ca132c142628b221449f9ab42ac4f72d38371587bbe5ef3c2dc6ecc63b9d8cbf2a776efc2c1cd42067c480d367fc448b5b55154b0a037ed49f0385af55415e6229054941ed03f0f343b30e018cc0ce3855d0efc2405c606b0a4610c58bc2abc648351181c36eb6fe5af3b8cae3a302d8aa52eb79e9612273e21704c539a1e3400a8f7e4859bd94b6300f079c172370d0eb33bece8fb23393c8fed81af96fa353d28cd5e20a9108cf455d70f181b296a57afbd05c8db0122f21660123457c5a9652b5befb7069818e1d679b77dde0f2eaec23a6907deb5cca8dc5269aa868777bed82aff105a79d972ad5dd7b663f0405b143c806dad461da60c4bedd9ca49879158c1f7f54ebbb6eeff0cd98c51d488a6cc4ab2c1f0bcff33ccd10689cc12c125d3a83d2c8967969ff70c23c751c3eed712ed67cd4e1f5999446e1c8134ea0dc470683b7db48563cbbae71f2f0ac65a3510ab07577078121e9ea9978aa9d953b4578858b2771b04bb7324338b25e4b409eb0ffa28fece140bff0ae06cd3e87b3eb190fb91793361b7484cc9a54926e49bce9ea8089f2a46a8911a5def5b1e6daaa6098ee463d4620661e648431f92d233dfe27abefb93903c7c6077dae98411405d7a7871dc07eff2e77a182e4e3367194662d614bb11da11e86596f724204f48ff6b21018dd3f0c10291a12e7f0e89942ca625d087ac0c6dfcaf230cb5fc1009b364f15b1e404dbcd9b24a0b5a2d21eeb937d0bb066d0f99e0c884e243203acca2ee50493656ee2b95657d8c8697186d149c3d9de15bc9ddbd3823417792b7d9f390a6917d1ebb565d32a27aac54545a665dd63ec07f2380bb8567f1f95c6d78cfd35bfc9d9f9d845aa21f9d736dbffdd603026549df05cc0139b7b9708646f15e3ed7523be17affb43c5dbd84e9409d8d1528dc27855807b8db7d628516298bc759825b02ed3c0d9288c4a286d0be83b21bb2690079027a07f420b5df16fd8f33acc5de97cac9f71c0fbd13222a23f86e9d07d57dc1ed6d170b0877278dac45c9c006a5a5800b057c58aeda00005642e9248fe74567ff270fa89d7304841df5b21cae76d218e87ed7ec00bdc7593fa94a37b269017322f2185446701f0238e71548261ac6994aac58511c85203ec677ba5fd82158eb3d145a956e351f0fe5631bcdd5592a0b18d5241168fab2b6d3f2602369d9f3d938d6fcf67a8badb30cb0ec3222faa6773a4266b44ee326c94e64650bcd577944fb8027fcd33a71f79517afff77c7e1e4973b44c03509237f1f13f09f6c6493356d5a0231e10a12e268e08dbd3b86845a1907e6bf853552e12e482a68afc7e9b378acb61c0cc3397d6e53adf3d50036e1a7f07538a52d5af6634a3aedfc4a22c603bd6a45bd2c8dcf8db73829affda082293c19b4ffb9e5c7a76349b6bcb3e676f7d647355a0eb7e0ae5655e730456a448834f9bafaa3985ae0d97f4c58cbdfcc3a3f75734d315eb8ba762db6c09f3b30aa203ed2feb21db9f8f50336365ab3cfb5401b87fc5d2b609760e71dc7d4bb4c78480f8473ad1cecd5fffefcc0280a88502161fad15ac5df2f5caca5adad93a2daf39559c25d3cf9613f97275dfc8dfdf429705332efd63d68b1a4d4dbef6b3ab96bf8d8518a26ea82fcf73e749fe33887a1701a89e603822ca9f635b765ea1afbf65f8a89fb82c7228045c96fdab541f2d189d83d05f6b7628acb4daad6b94c8addf2f5d27af7962811aa51b573ab1e1e01e113b61557e4f29d4aa61d0980d84c68dba395cd2d617cf84e5dae326cd9f279a3565cddcd0fc32a9cc776c7e6c42bde3f1c38bdcd2f067d5875c2e1a17a5580f52697270142bf79e8381fd8931a0e8949e625127f09aee7f1215946f1073160ff0dcfb99b84cdd157827e0430e2dcaf1e8bc294eaf65c8040eadb2b058a6d5fea926c5c42ded57c112cfd1365227f99e993790bb7fef88e6e57b056840af1c6de3ed6d89e56c0c03dbe02ccd9e4de8fd084b13e8d296a5aa2f1408f1790a5dd029775f558f774e603c0f7f8352fe1d8fbe8d1f615809a2c053ef4a0662371eb7f27b27b18c6da358cbb435f200c70be934643fbf70a704cbfc8325018cb3d3a7d76f33185cddaf700374ec943817387c0276e15dacfd501f7176366d690f110230aa1e048135d7287ba80fe4599d27ca912ba0c66d8af94d5b1f0ab477b75b6996d255009a049f047ce41c5d05975e5778f8fa7442ce84d82203fe71493b1740827e5496f7d88b76bfaf9e889cb450a512655af1cd3667426ecbae1e4e18d9198be4b9322b1000f19c7102d1af62832606074ed95d61351e89bc863606bf25770bcbef5cb449b4279bbee5d2be207a7ccc45426583cd52cf1b7d033303bc60cb9a9a539123f3f97b560fb406398cbafbcdb5e250d0d964c69c83c1afb59f3f99a0b6a259ea9d655f23ea09d6b1f5a93582bf8b15b523dfa775473e069cb5f663c6c7482188a47c55bdb433dea7f9e9bca3e8b91ea12b27e43e5dd4d239bf49ac6532b1727ea7a2f15c14ee989c17e0e379c808e6355dd20f602e229d1d198df6149f7ae74d257db4b782767f0ece136cacb3d706e23a628b834ea3b1b73357b35d5400da649c6102386387fc608b159a8552cffb285f5ddb0015d4ca78bb2b7697f6efd6658af17c575e7fbb41ed5c0fcc2b402d882b28807f4a3242020f7db26cfe9465c06fa385acd9ea2613435b3ec983c438723c571e492248b2c3bec2f934e1ab02f5b8fbb0a14c43b7655b979a0612e88686f16e07065494973e379fbd9836703885f56e8fcd4c08f9a86495c41a4f19a236e8d1dd3f478259e2086861ff639060e1b38075994fc6676d1cda2f7eaed415f28136f34c71ae955fafb198e30f9826a961b5f48dddf87b13d2d94e9ba8a44c4a68e20bb67985b3f7ac0fc4eb80d4043d8e939f236d1bcf4d2517a409c306dfbefe876925b584405a7bd778616df0542ea88dd7f273acbe799219c23184782ac0b07bade2bc46b4f8adbd25ed3d59c0fd3e2931638837d31998641bbb7374c7f03d533ca60439ac4290054ff7659cc519bdda3dff2129a7bdb66b3300068931ade382b7b813c970c8e15469187d25cb04b635403dc50ea6c65ab38a97c431f28a41ae81c16192bd0c103f03b8fa815d6ea5bf0aa7fa534ad413b194eb12eb74f5d62b3d3a7411eb8c8b09a261542bf6880acbdfb617a42e577009e482992253712f8d4c8bd1c386bad068c7aa10a22111640041f0c35dabd0de00ebf6cd82f89cbc49325df12419278ec0d5ebb670577b2fe0c3e0840c5dd0dc5b3da00669eed8ead380f968b00d42f4967faecc131425fce1f7edb01cbec7e96d3c26fa6390a659e0ab069ef3edadc07e077bb816f1b2298830a0fe2b393693bb79f41feca89577c5230e0a6c34b860dc1fdb10d85aa054481082c494779d59ba798fcd817116c3059b7831857d0364352b354ce3b960fbb61a1b8a04d47caa0ead52a9bea4bada2646cdbaec211f391dac22f2c5b8748e36bfc3d4e8ea45131ca7f52af09df21babe776fcecbb5c5dfa352c790ab27b9a5e74242bbd23970368dbefd7c3c74d161ae01c7e13c65b415f38aa660f51b69ea1c9a504fe1ad31987cb9b26a4db2c37d7b326c50dbc8c91b13925306ff0e6098532dee7282a99c3ddf99f9e1024301f76e31e58271870bd94b9356e892a6a798d422a48c7fd5b80efe855a4925cc93b8cf27badec5498338e2b53870758b45d3e7a2fa059ed88df320a65e0a7cf87fa7e63b74cea1b7371e221f800472664230d4d57945a85b23d58f248c8cd06ccfabfa969ab8cb78317451fab60e4fdfa796e2e2a8b46405839a91266d37e8d38bae545fb4060c357923b86d62f5d59d7bef5af20fbb9c7fb42c6fd487748ed3b9973dbf4b1f2c9615129fa10d21cc49c622842c37c01670be71715765a98814634efbdee66bf3420f284dbd3efafc8a9117a8b9a72d9b81aa53ded78c409f3f90bad6e30d5229e26f4f0cea7ee82c09e3b60ec0e768f35a7fb9007b869f9bfc49c518f6483c951d3b6e22505453266ec4e7fe6a80dbe6a2458a1d6cd93044f2955607412091009c7d6cd81648a3b0603c92bfdff9ec3c0104b07ed2105962ca7c56ede91cb932073c337665e2409387549f9a46da05bc21c5126bd4b084bc2c06ab1019c51df30581aa4464ab92978c13f6d7c7ac8d30a78f982b9a43181bbe3c3eb9f7a1230b3e53b98a3c2a028317827fbe8cf6ec5e3e6b2a084d517d472b25f72fab3a34415bba488f14e7f621cfa72396ba40890e8c60b04815601a0819c9bebc5e18b95e04be3f9c156bd7375d8cc8a97c13ce0a3976123419fa592631317ca638c1182be06886f9663d0e8e6839573df8f52219eeb5381482a6a1681a64173660bfbb6d98bf06ee31e601ee99b4b99b5671ed0253260b3077ed5b977c6a79b4ff9a08efd3cba5c39bec1a1e9807d40bbf0c988e0fd071cf2155ed7b014c88683cd869783a954cbfced9c0e80c3a92d45b508985cbbc533ba868c0dc4f112e99400345cf7524e42bf2345a129e53da4051c429af2ef09aba33ae3c820ec1529132a203bd2b81534f2e865265f55c9395caf0e0d3e1762c95eaaec935e765dc963b3e0d0a04b28373ab560fa9ba5ca71ced5d17bb8b56f314f6f0d0bc8104b3f1835eca7eaac15adf912cf9a6945cfd1de392342dd596d67e7ffcb7e086a6c1ea318aa2e0c2b5c2da079078232c637de0d317a1f26640bc1dac5be8699b53edc86e4bfdfaf797a2ae350bf4ea29790face675c4d2e85b8f37a694c91f6a141fd561274392ee6ee1a14424d5c134a69bcb4333079400f03615952fc4c99bf03f5733a8dc71524269fc5c648371f5f3098314d9d102580699ffa0b44031d6f036970b56315fc91c2107a45267c21367411d7ef089e298a5a03cefaca51dc21beadd12b8a824fb03f1094576e77b370b2ce0abff99fd68d53316ab9f5a56077944716f56aa8792ffc14c67586c6608e5b016c38e681b6e9f3ad3fc13c9a44e122c9a4bb8a0513318791630815f492f00b605ed255e04550a9dbc099259ce3fef8ba1ce67f04a885702b0cb7826ed536127f7524de37fc31f4419fba3729e811747ce1fea043a39c342625ec52b1a1d12e9321a8d5f5561e51732f9cf7cdabd924a6967c942e9ee64227312f1d497341ae6ff6c6e3a4ed664ff4e2c9cdf4b9a697abacd8d141f4e438a2d0e838b2e428104a57077dc32caa4e2b7bc9404b9c1a3c1097abde1a3016763d67b03b7a5ec4f2d6e5030aec9e7aeaab3d03f51ecd948069d96e1103eb0d993b780f9bfc5dc8d48a0312116dbd2893d8b90242fab8b6131bf48810bb8039f041846ee0d56ba433d843ed37d2f363d858725cb07bf7ff429b7b82639d9a1c39c41f46a08202d77f4629ccd4c8eb9d368eeb7bc3ff15c0cd8cd0f570268334c4579b3f318eade3354827697e9c00352d00a6d804107caae2549759dce2f6043e609ab13a57e757e472bf2babe8dbdc2a421709e73c973e4f872117f05f4d1af6739035117a29961b5a638bd31bd8f2bcc7ce89e3f01fcb539910c850f802d98af51e435d71ff2e2843c7128ac1720962f63fc090c75102ad0ee8d37559b1d07a89975484bbd290c9d32c5849664190ab71dd46541ee5549a6d1bd1e3d0c49023959df11dc43e6e4e8d35b57576c21904bf4993d4834731ca182c4c1309d58944ad84919f27bd0744d665c2c57f7e12fd32e7316880f13abaa48c9a89714f3c2c45fdce6f62b90c3b532ef88fdcd01ef3814897a6947ddfcaa6df45cd83ac1968d36bf024e1cced906803df5b3b528d860ee04f053a3781a87376e645dd76b178ea51bf5641631bf2a986efae179fef334040b01aeed8d0a2bef5f488cb3984daff418459fe1617c07c2a920eddf2d479c9dc733e2ebc3d57cdcef91cf95f141d96add7c66440718874616ed40b05adc810360115766c384644844c68d471dfaf25093212308cb9c916bdeeb42b32fbbc97cfd207625341fca79896f2d8fc580e3ee61bd3df5540f0c7b29a25bb254eb5e51c6eaa5f2bfac95b8e415193691dc958c70d71cd34b79e2bc1e99f473717426cae4f64d930c35af4d7d3fb8042815ef72e8f7286a57e2fa77e65873c02d5f0b2e7fccd7d1c2c1ff807d7572c03333d8e8f0a6c98221533cf3a867425f30b3f4c7bef5a97489596d990c3faf34593f3a35b06a67e250d3907a8d4fc7182378c8dbcaf82d440b04e1df5126d7264340fca251ce6a538d6bde52bd976cb5aeb771b3cb5dca09edca439b75b1525f993e0677fb573a9d80220ec45fc798fc7877d697e8ade78adab37b169f6989a7024240fcd58f3f88d00008189c67b2b72ac0dfce496fee9078c87295f8d4e2c52652927808fde1dc260db4969b0024ac6b9a74a2172b46e36f100e63a87cc683ae79e435bb2989602952fb86851955a4e40e7d597a69574b689338c7d6e99ea742bc1e79179c9ddd82d6c32f813bad663d23e23c99b289900b5ad908aba1d0fa8925288d44dd871bd8a1f6dab8ed94bc1de28b939d8d4479ff6cd76f4e2ec6442cbbeab96974ade2d4bc7acf51b7726c2c5161a6ad83f0cfedd21c44e718e64dd2864c44afea79fa1e2e39567521af3f137b4abcf21bf55a7c928ecfa0e59adc248f37783dc6512a5dff19b74cb4b3fd7a652f1f94ddbbe255b617579f1f49bbcadd919b3c909f3b39380439fdf7e76e0819f915ba51ab2f1f459e260c4d5ab06b7844f6d3d1caf65ce0e125b173b159669e8ee78c002b0883480a8210f83784af6936d12b0f3a206bff98c38fae7a883cfcd8dd3371a43729c645b4d3a747ff40b751746bd55784119e105bc032abc1313bbe3ed72c7f82b8c736037ce2f2e8c36a7b26bca889e9f4c333356b87aacded6427549fba22b2d954c5b93332a009e38b9e3046123816bc79e899b933e174197ffd65b4a2f78f3373da1d221db9284621a1da309accd412c517ced2c0b67d5d9227ba3e6c64e06f2f5d766e2da50e94346c6ca3c9adeb9eb1a81dddb693b260a78d9b64a1d36f348d360d42eacd8376cde72ec6254323074484ce029bdfd9cbc5174f4ec8ab022b974e2ac4db974e93f2fa68c238f744f58691296bf902bb45f5ad2025695462fb548b141c886c3995ae8d61be8a2f151280b8753d576420773e3754110c36574dccd6157379b50a21068862e3a1545f0339e2fca33e6dd008a89d34393ab9a8c9081873f137d88ae204d3b35807cfea73b9f504c3358592a13bc708c67a451f160f3777bd493f817daf569c4644067e0809dbd6c5c4142fea009d18df554282dde91d69003750b79d0ffa65d5de63e36a307abad27382708afe08abad52189ac59fb091e18a75f3e82da5552c5f4de04236bcf712cb371a2a3dee0b58f92f2f7738da3689c915ff061040b5744f2c3f382487d7ac539bf871c6397e07d2ef099abc81a21f7c97a1a0c0b4cdd43467c6f301c5a0c89316d108a0cf4de266c1efd7348f1bcc2b65a25e46e7e57598683e1cd55d9b9014116c96d39ac0123c0baad6a7ebeab85fe6c9e7a9c3457f02966e5aa937102a5df292c468801ebfdc36033e1d7d570a9f82e0e4f12f3519fb592056843b47bef7230b3a666bb110cfabbfb89e2da9eb74a1adfc2712fc6b0a191ab86e518775680a9f9fd542bf2e9cd1a9eb33e32a8265abfad85256e39eb73e25276f611a763a11169cbeed9141cb0f8880e38720f8fa088d1f7ae232da8a30094b905346eaf49f37d828536f70e5cf231eb701d474bb212e7aa79e31460c588ecdd80f54f91f1bcbfc1b5ea0e37178436eb5398e1f315ca791e272270bc41c7c55507d8cca42ef9aaf9ff56ec3f772b017e7189620e322bf0b32465e503ae59a8afe863586e5826c9abd001f38ff2432c2558433a059dc3d91a0021c3ef71cb115ec109854913c09647c68fc6912f891170666aec71cf0eaca338eaafd8227899d2204fe5dcc8539b6e5134d7fb75594bd02a74fbcb3c88e5ff3d250b46370eacba64badc921c5c338feea5aa177a3055d512d5ea8a6caf1f7e8b7558c235d9c4782cbeebf15647091d1d56af8d94baa9efce223b27e60da3b1b2303ac495866b8be6e086732ca086a66bdc7ac65b34b2909ade603c2f112d293ffa03c5dc812c7601b45eaff60536ac388b7e4a344b2a58375eec2fae4626658347566e815661b72baeb70048c183af22083c81c66a6bb6f248418afa3909c73a9ca5071a62b5dfb324320cab72181fb6b73815782ee13d7a1f02d6795641eeb45e72280e52834046d9523d84a34e8e453ce37dcfe5354c2d47a28ad22a894c8f213059d392749945229a1b6ab1a17b7bfde1134449d2739a56a3206b222a513979721510aee43b3c946c1ed449bb57c96e938e6ba943343fc0772fcad9bfad31bbb9d23c147cb69ba35ab047c7e6a39c238d47acaff21e8c19a11167cdc3b1068c7a19cc4f889bf0d3f8883ba8de0f82a130c79dba89830dc6b36dd85aa0fd2650357427cc924bcaaaa80f3688ebcc0b6c1086a5455412435c20ad731d01e22fab7e5a0518445697abebadbed4aa99a4e8cf1d59fcfc4cbb5e7b58ee81411070f2a733bacef93cc63c55fc3b1894d8cdabaef4223dec82e42215e8a1340908a8ca52a9df3d4b7f04e0596331c1250a14294293a4849f553c5ba2d51181a42b25970314d90f958da24c788b496af5bde6e62c84476daf44427f84b6d616bd0875fd3b1d3e9261f94cb535ccd8726164d476cf3e915576d094e24e06654fae1118416d2b86825b3252df13b07574028f5b3f9d3b08d8907a8248513c25b911e59b180bb8373bdbe9531e94de96ec53ade9b53902147386b2b90650d0bddf62f66cf5a95bc74b5e5ecbe82b9fb347df311e8c051c4a92c4199790af6c842f2bb40c4ec87ebd2d6d233be06a8c51230fc9580893e221c2c30fbc9bdf582f14d6af07a7eba99f5e82d7218bb41d06ea5fc724df680c20902e05867c632c054cfe67dd758564d45b39dafb4eaada3b1a59cb1364e3f2cd674fab83b6dd60ad240d4efc5c282902afecbf47ada13c644f8845922dba2e9ed4b26242dfa09e8d367df4f2b0366e90c935f4852d59cc28d665b72fbe3d280b44e0ba225b4f2e3bf0dada4f0642be0533800b42421701ef6b7c905a8aff7799547523d0be5ba82fffae6f6fe2df9fd67b6563ed807b662e6b278181187385df6fca2fac7d3884ef9f6334d3ca6f7c9b0d40af156cf9717c5200db61eb2bdb34137a4e341c685ce16c93cb292164ecb975cc4d286c13ac4fac933e4b77aaf03ddbe00ff6208d98abe3aa82ce8c7258b82142beb5025c8f1ef7590acc42536d632595d5610e0ab0a5a131fc426ffa592dac6e8439d4268260beccc152dfc79b2a8d263f1349523d7501a4b813507f6670838a3e2536143ecb6f59027da47a122a7f0bbd7b7706b780a18d16bfb273f93723303d15cca80ca585a84ebb34ed5ab977a0d107fb9a875eed45c8a61a6a99c827eb0179ec5484959e14f68a1583ed7e03900a576b80557661892e74fce5b0c9fe353bc039ac3ef225399a78aaf032deaf53d9d83b4a8a4d9aa1b89aee57d6a302894c97290184719770cae58994e351e756c008df7b9e7af53a0786434393f9f161a45d2f070d6a7174e87f15f4478e28334d77ec761a54fdbc9bd5b03b51253758e380d02f22634f9073a3f490f7d9fe53d293d6dc768230a3d5f799a196bb40d97aa0a0ec7be29e6e0cd289ed7ccbe6430feb23115b792a8a566a8408ed22aa5dea4b15c1626eca6804a96a8c3eea5c8b55ec55a701b047ca8dbcf3e3cd01d070a2dea3408e7e70191b870adfc6abed973525e32021be14fefc5d6dc4aecf5f9c44e9dddc58881bfb8209ef6aac8705f13e165fff33f92e9212ca462e0af1a44b40eb2a0749121a79f8907cbf39122213c14c20a6b0f7d12e718231828a0f5b0817511c53d8a3183eefb9573024c3ee897f25d9b91140b92e9923a464747ec04d48ba39449fc18194d7f2f38fd812b7ccc831ef98dd5a430cea1d133682c680a54594e54c06f3e31621bbd600db951a582cfee6e88dab1b53f4ed128b1d8d288aae6fb4fca690b95d8d92834597a182b61dfb340aaac98eae3a0206d4ad290477d3a93cb8d74e70c55c156fc0a4fe8d513ba57b81ad2c394639fa74a5ca20c0f765efc1134173a5d81da300047bd296c3d68c01e01d4987e66534e070fd1aca73d592069e5db6c51062c9e87394e43b98af2d8ba863b816f95c5feeb8ae6dad97933e51ac846e5b089bf89db07899e819f5f85d3d28ee52e98fc9d3ff669fd6bd2f5356e07e20d42b59cd742daf6a28f27b7b1b30c552c841600144b7ae27c26f2a6f7abc7374dce2fca7205da1eb8aac80243a05d19bd39b7da4c573fdac1d27e4e131a33cb0b1ea251406c2e8846992a4923e3ed60021524912cab6dd9333721f570037029b0f8b43a2bbeffbcb625f69439c4e3b562e0052d9b8f2b653a1c81a4f8aea9d6a5250d8c1a4574436e16d4e96d8a679d456101b7834aa1083e4b46639262045b516d564ff447b6a4d8346b52a77fa3a21361c136cb25f849a78a19382669a9411b97378ba30dec675a4664d6cfe9bc4b35a8edb25b6858b0dea2a22d9d09c1106d6d57490edf3f155e16667dcd11dd2011fe2c331b5be8c6495b8849dd8b744eaeb55f911d04d7354b6a1a50893f2caa102b26c2f345d112517c7394cf37e9854538f669b8c6db4f890b2856ebbbd1709af68466cb703a1d5ecf0d175b54493c9cbec5dbc76b74ec80c13798dcccf5fb1828ee288b224c6dd91afbd96a2cbbfc1a0f74ee323cc9939853ef1c42bbc0d1f0890b0e1ba42f8c2826e8e2e205684c27f2aaaae18103cc398bfaec07d1597c8ce18423633e0a02b5bb7a3bad2878b42b300f18bd82491fcb2ffd101153e98452f8006c4b370555e7a059ebb1dd12bc8e914c3fac86c415b608a38e4a8c976fac9628f3bcd94a0f259f2efad86b5eedb9dd092897d79b3562de917098c38cc70182a4bf9c6afeb7d97ea171081c85ce12dcedd967bbf707377972bee53fef13b9851bd8d5334cd66a0659572b36afe80256a15c027b00149ea0ec7e1849e9dc3c6736474d7c5af340ffffb4280203c1f212cdb9525fdde3fd1da7ba1929a2a9f1f09c13ee8d5096c3313a91e7c8aae348d918f63eaeb7fdbdb64c79d027410242e7f5449ead57485b64b3f550d0ccd66e732a1dadb2b5e8473483c4258bef6f9616ebe34725978f705f12e84b618f20caa8ac3589b1002e025ef3a2009cd379564324f6d03e37f66aebfe72c0c41e4bc6404647b9f4bf5655fe451b49a316a7e8374888213d5f02b1d01f9c97429fdfc8029f5a25c31be9aada2137e8e8df82b5ba009e226d393dadd61e6db8213b623ab76076b5663c6e68bc2dffc5b357912594f442bb15ea2ec6c4a3ee0ba9195e832730a35124496df66a147ac84ca55ca18ccb7bd47c9d5d656455257924625a0b1ab8eae1466b6fbeac7cb0dafaf36b8f6b2d5255eb7853f07cdd1ce8d83ddf3a58a0524d14c9fb274c0eaae107664758f9c4cd26aaa397d1d5e2db410ed37478a88fe47dd68c999910716fc6b9287765fe35f72f0147b16e370d686d0e4ba12dd42da759d4dbd17cc24d07725961831d422bd559388c2a316a06cd5320ceeec1a223a3ca56df2c39284c7bcc2e38f4e78c4c718a96998981357412da8c84e49cdb19e0b6a3bf31360b14d2bb82d6502da640d2ab649756c561003dec99940a2647b6670704a469dc324d14299b63225656b000a5ebad1a67b65158709127e8c8ada33fa3c1b65a9367a04afdc206efca6544045e70045bcefc106a4dba6407e8d6887074221c8ec470b47b1f3fe741f09ba3e5c03ec3a462fbe47c6d5d74eef08b0b03606eff8dd51633af765a2f9f32bf76abb29c137a8b7b7695b7c17e254692d7ff51ef86dd3021c2eeec5b0692f79b645e1bd11c67b1436dbd1330ab3554b3926c2eebda083b590b41688993a1a8f51607e52605f23c1c72fc69f023a580b8e552dfab22966086b6afd32eff54ab9633aef7e3f7a494ce2d5ba14a0dfd346777ba4b77870d066f6b411390 +Output = ab9c962843a730b4b1249bcb507a280f + +Len = 82464 +Msg = 3b1c2d919044835fed0ebd296b444e23bae20d570970389d268eb8c7e7d1a61cc8cd0f08d573f411cb9e950d7ae8f0926dc284afcdc45ad9834146289d1f6bc4f3e5fd9a0a164b5338befc86094a982ce29c4b55e45fe61a139827d3b87e3a8a048c7faff5d48e0c7e9679fce21151d86199ebb316eae34720bce22e00981d5642e91eaf6056c726e34f94d7cbe6207e31e1eb2f2b0d5a48f0d5ffa33c121b10f62561021144fd88b011d57f8d710f079b9bd333ea6f5205cb0a079936973ca06867d110d045391a2c03c55df0592559e7f02c261cb9d365fb838178b4cd89eee0d8f441670182c4a14eebd7bb476a5d5d077c708992e653c769f5a77f5c09e2a6a055fe9c21e06e5519cf56b8e2e7fb44094e79f9a391b476e4eb905fedc56501e679ad394d5b00918dfa43add3a31ce61d27a83494de71511bec9a1b28c35d3bd2eab8042cfc629dd2f30463c1a6a6896c9167010cd572a0377f2d7db40db49a8e2f85c667ca7dc10f4203a255f983761d131e2ab37d9fab5f2db14b3aab50673fd07e46a5cd37456d70a63137a399f55936337532dee0b9bc7d8e4e61a31be91055094e8f0e7970130457da0eacd24d48800fab31001e1376f72d4ed2fffb6a274790a4cd942c8c29867d63821d14c8117b1a9457ec3f02b423f41334c7da30ac2e7a11066836dfd97f7f953dfd49acddafbcf74da92dcc9e8a4c6430019f84c8902f5de29081b24976c738e4545842d3a35e9dbb3fceb95db39e0a6eb732aea2f717500b16f34ca1f3bc14222b29d21cdf664f47b70c13192650ce95f07bf664ea9ab2260176f70a7ec6f09c89a4a4dfeb3ed39c18ce20f96ccc764db561a433f2204ade5af1f9aca04d96fd76b1ff45504cf1606afb2a260c78ca400dcfff3a9611e1d8284b9baee0b9ccebfa382d7695fa733cb57d77c88ebe941400aa509e5ed53fbf736e2538c7735b0e1e21749942af1fd7023b4f067b059a7196dbdf8ad2d42c394441df74dce10b10e9541dd6dfd2bfda581dfc085ab4a500d84af4247b7670eea2ac1088a76ca39664b96f56f5cd19ecc00bc5f7b3357d68cddfd794e024d2889597029cb07ced4b9539b4410b07f6b641edf1fb0fefea527d83cf0389441cac25eafbd9807aafd486ba32bfaae81ddfe3abc93bf44ab466f11c2699ff4014045b8d44669eccb2dc3f2533f659d85810ae2e95e0edaea24b3093227dc97e83383e69256c92dcbe09c663fd11a03f6df1ab5c9d117f837eaa42d10cd86f6830f0d664e513e5119b03255bd83607852529e11e28f734310e2a30bd2cd17a64e5d32c67ce821ed2107364f40e8e17124861595d7fb993201b74013ec99171dc6889475b26e2c589e6018918e640574f9e4019ffeb8124b96c2fbd3e2c3fdc3782bb3026365a629de5549eaea77450a2ee6f2bedb2747062cb046da49e0444ddfb11edb246137e76d515aa9d9a548874029596101cbcfe84fe9b185865082f369b3288e59e35a07c7eebb6cf0705892ea05b634f73815688ce9bc641c97228aa2ac708a985e75117a87fc92b36b2db3691699991fdea01d403ad7f49146ab4a16f7776e5455118af1a79eb996e8104f69d6640c0042086d265784c578c1a5d8333ebd981249c7dac9d802401f89a8ed48bfb61c3ce4b6de9bba534547ba8aab83eca39646bf00876f93c7d4b1c26013a25cf0382a3913f80cfdb4026273c23a858bd9f7861744275f656fd60224de38f318b2ee5cd1d830167c377b6d9ff51bb496c11a45051b2115b76ad265236be3b78d6ead49315c1d34c04e1ecd818bb5ad87e9ad07eaee1b3f2439386f40a19a6c25940373ca2825e464786b06eb0eaebcf9c3fe434b455c18166b9684ff07d38d7bb37f611eb4c0a1d346febe1ef64d8f46d0ac9ba8b98a5d18627b5ac1171597ea5d8f95a19aa3f9872a3837afcb387109a0265585a32c5aa4ce45353957d7181bf2a285f53216580aa2a6281005e62eaca2fa15649a98bd460f82c8ca329e8a6b0356c67c23be49d830d6e3e22eecf4ca69a66fb82875e16696b279f63fe26b62101abbb8d7f24b7a65391f88bea38fcd54a9a912a53a53910452bd3fe839378b997cfa4de758e96ba04b2f962da04c30047265e6c96ca06fc8f22729c4197b621febe68daa688016829b987d0479b69cf9af3ab6ed73442d551f3c264be9b36003e624fab997bc258c88debfdb865b6e94ae8bf589e4bb84591860c7f8405c1ff60a1a379d6d09f31ec186d10b5ca72f75fece45374772ff259c397151b3f1fc66a65aa6be6ed619c9a415432c63264a0e2e96087df206e84b092ad4d09af18fc6795aeaa503cd040dcf0ea8a7405558ddac67c1b69ae3ea49fdb944fd8bf74495c19f55d9c23b3c6b90d754146ab0d664f6b80379a8967fa2c8695440fd6fa5753d9c7ad530cd3d53a813e7ec58c54d24ac0b405f919b12d627bf854375b73cb53bc6ec2fc5ef91665328d6a7710f279d1ac5faa0ec7e4e646a205a6d7b8a85065ac31c31f81eb304409aa2de6a0ae04ef1acb5161f9c7cce2e3046377545e8c909157d945dd72ccdfeedcee9aa2511ba9ef3e207b1823883d273cb2a0976027dc51292bf5da55923cca6cd51a80a3650914013fe38dc0c15f54f6bcd8e975ca51d5efe2b7e05e296583a20beea06c8b16715cd721bf662051547aa8aab2641df805f1251357533a6203c6b89e6c7434d8ee9610be15dd4c1a0d109f9b5af6c7d8c9761d92a7fd6c39302003b24a83095874f91141f9eceec26900c93549f371f90ac8f1bb382468f4f4f815b3a460b29de9cb0332d25dae524f914dffe823c264ae2dca167290d69b36951629e1d4d6af37550d1a07f633d1a60c54819d4d63209feed02cbe085c34de402d9a69a71d9744df587f0280264758b90544d13bfb35c3522a848255a5c9d3418290a4a1315cfab10cec2ac22ebc4ce089cfedb333ac04a301a7273f5761ffe03e92fa89b7063f1250e6e786f4396ac907aa577eb38c49277c1b168e1b0549658929d3295a9efd4c4cf7a19220c59abca85e796422dd7928c46ab60a98bc99178adb9747c02b1ba529a6c0af5969c4009472ba2c28a87eec001b6e7b778ed73f6a33aeac91b581660f7baca5472cd0def26e81a06ef43fbc59b7a8a85f83eb2550b68020764517d625ffce3c9316a69eeadb38869cc9a4dff7c5cb5af9a4be1165ee756b16e1c53f94b98c3ce52f2f88a64046a75a2f959f01cd3f59edf8364bd162f6541b9473e783324f6ce48051e34b2513cb4e2ffa42a0586b6de2873c1abb9a69a42a6309171bf080953910f5f9041207b923d0bb11fbedb95e805ab9c84b1f3823ee586f17847d857f8ce70410f7908a3b7f1bc1543b1490f37078939bab78c9990c7a8d2fe561c8f2840e64714c2604170b16f253875558f55ae9b4dc002d86ce2fd14ba76622afb6c98cff642c5ddd166ecb375508397a2de5b602d275c7d68afd6692c6314aa4920469bb30bfbc7d00504279a4e5475c60bae667c72fcd20941e4048d66b610e50ddae821f2ccb4c9d5b829e86470867598181ca0159c7ceb53b67571d3fed55b6fb623b779c12b3b535938f44560203dfe19012c9193d47b5fce4a5e4d378e08d078dce81361a180f867d352539bf99b9821a296797b8f35c08be1c724f89199ca8372285236ae474f748777319c78fb00d27f623fdc03a7108fda311dca967ad876921cb8a8a80ac2ffd3c741da04f8c2ac0614570db84bea3aa2107a25e32864b2bb29a9403527fd7a46e726ed43f1580eb52141a93390982cc809dc833e3f09d83bd3c685cc4b59743f4b333ebc912b8b2b1d9236fc11b4c6ba71b76ade0b3257b2bf7301d3d1516e4b680956b544d791d66ddb3f784bcaa8f7ec9d65692978a1ae21411cf2568fd8e9c20bcde478c6c335a65f0b4ebb34441edee0db561647568cbda35f9e376f34a8eddcfcb0c9839fc73bc052d5ccac188dcd44652b6e18d6ece93c423e107a11f74fdf7bb0a3987809a2918ea40c7ca6d33c1a7b6f7d77b33d485e5d586e3af1536c95b35a936fec8b8f35274007306f7dafe58688e0fe6bfc3fac1983ad1c434bc8924c1515947dbb363da5202961e2eb9d382f0e14e771b853880f3659b8885ee8579e76a680ac175c1d90cb0f8b91ab9874dd75a5fd64e0087496f6f07a50fb50483305c2cee83e455762b716080c4c064e0a45f09aa601e314492c1dec0daf7506923906d9c28ea66da36ac981a33b7b064df5a139b5ac57d9be7c1e784ef9eaf54496cf3bcb86e3d2cb5cb66316f87b40011b2465343dfb273f3d8ec9655906a6c285985f53c5723953135936a8116b8ddc1cf6a77235319f7406eb3a114b7c8d84ac0edefba8f5e3d3152e76f704e0422771947b20309fa4c55ec064b35f913c13707f1533dfd364b3d8a29e84416dff8bbf8a4a9eae99d9dbab8ab3cbf40914e75985ac9ca89f5e7dd45237c0655938716d44a07e0db4910f83c6a1dba738ca88ed9eff86b1be13b9aeb9bd4bdf566f60f150272edc747cd96df0d962f7a4af60a347a89279b446cfbe45a9871dda16e2f2392921a95e0fd1c085a4e253d14616f10c12307f164a58998286f2af58b16fc66c2116e2d59c812211beea4a3311147d48e6f11068a0cca70cc01f1256e1700475c94f277fd550191161db496eb2d19eaa7154fc0fdc948d210f7cd559098c32c26c6ac5c13cd71c014845efe88de6eb9d4bcc90807058b27baf9c76d3bc2cc7eea4ca6c2e257e816dccba9c1514bcda9df0c86c7eee819d893aee655b5bda3a66ed1e893b31cf0fb38999ec88e9dbe228eaf8ee3fb997c4b63bf32f646b0d00a7bfb78b5ce4410d7ee9643fb87fbc98cab4ae94676413ceaf2d3b33638c3db14d87260127bf6d112c76ba242838e774ffc88a0d6a707df1c079372fed1204d2b4fdfa890025ab9148bc0c386cc7d4fd34a0eb97dd514ef486ca776375becaeb6a6ea5619aa995245023cacada8f1da815c873f214a8ff4d8e7b6c7c71c52841fa63a7494bddb240ef38867a160129ebffc9937ac4ca1743341686e985d7859cd177809e88147b5d5284cfc483b0725f6f0ecab052472f9c1426772906586b428c14b1eff3f069003672f718c83f9f78f0129a2141a290aeab158db997ea51e986b5cbac03e3f3a0179d9d0547e0f9af0f7f825c175ef301657e6b29aeefd1e85df53e513c81b3c3626f32187767298839a003bf47febf1adfdb7fe7afeb53c57e3d7a7e023c21f0935256a0fb14979afb2eaec957e46d8176973c723f6f500764090090f985b6be47016b5d378bdc3db065d408cbb276abc64c3157c1ee7f34bbe2712896f0fa62e9d6f09bb12f600715f0240c17eb73105b54ff16dbdb09c3c2444cb34f0055a4e85d76fafc91bb7d88581f31d0f1db45826be62de1d7b83b23c8e3af963660eaef0f7ed97e355717840816286b5827b1e7db871b7846e3116ccae69c10f594bb5a6778e5ba9cbb5b958aa93e5b90e0fc083e725e03bb12dce9d4b60723d0798cb6efe57e463a60b0394a6902363e8f7a400f086428a6dff44770e26f535977d5811345218590dfbbebd1a6126fb39bb34bc7e9cc3b8ca30de219fc2333f3282c458c286e0d2290e529bb10cd8c928e4d77e37704c0fef470665a53f13a30030780850fb251821cb27f6119b2015def9f40fc309c6d505cc2309c9a27ca8280edaec85bacd711ebba596e215e5268382f538cb6f175333489cd6b2f55897d3a553cb0acac12648643543cd8311453e0741bff7ab29d1a242db9408408eb8287b4c6c8633ea7ec6503dc479ec8bba3711406ceec4e2977942470b75890653501a2b98a2fe2fc3c10727e290583bcd97275a0959c22cece1d048029fdaa8b0720a59170632773b600f5965b7d009c686d2f75cdfaeee1a027546432e3a5c17b7d13fb159d7ac30ccf23d15985addec2b997f2f298f106703b8a994cbb20acf47f9442e44f6b5e82c3839b9db019f88af045a48de6d791c0d22dabe1e489a21490acf556e957aaca967b71b28ca37e2399bf06fa7501380473a3f89ce06f455e58a4aef80bfe3c36b091e0125bf8d42f2e7aa6e2c41c5ddda8841bc84f400b345031cc42179d87799a5d6347de78af0026fee0c14477779ed944821e719a7828efcad9cfacd410e5cc4477cd64a143390bb2510086b119ea9e7bd7ea07dcf0cebfe653fb2c206d1dbedd9a0d9f11455c454b843afb47c923608069c562861978290ac75f2600f083fa8f46a2de3739cc7c10d6db22a9e9dbb7f8d43b223466c7b3aea0562b044fbaf7d00a07a281751c18a8e56b8d5600960d5b93a5b7564d3ff8487b8a9b98ef154f5650b6ac9eabbd938a2c56abeaa1c4f91f14bfa26a51336f7eb567084d33455978b73a3cdd3243852b08370ec6520ad3b9f3c373ff076471a7ea75e17fd0adbecdaa0cd3cb9d2066022597167775ba55b2ad6b9c62c425a75a9721c7cf2bc0e7bbb59911f860e6aeb5f0c1538ca165c7afae129c643c09991d28151bb9c9115cc9467977d21208c7acf6705664598fd1f77252e441c382af5639aa6dae1d31967ce93865e72509595da31e9f9cf2baed3096a714a9ff23529c286c3e3abc841d5d2a306ca61e6adc4e83168fa5215971d18779adfb435e3b6590d4fdde1bab69d075fc1cad629fb9061302b70b59fe2850c15500c434b5b238ef6f3d16bef9f47d4915c65b962a880adf6da63e011b4934d0c3bd8347ac6f8cb0b56c631b0255ba3ff82a4f2dadb1d344b1cdbbab338d04324044b6f0b4cbe771221c41a447062db72d98d69d6bded5ff799e12dcc93c35624536ddd4614fcf9d4fbd410f5a7e4e3b2092b07a1767a94c1fa7c21a6f0f5efd6cf476472473abb198dfcfb09f3672587bb83b2822d4c3c73e7b57c8775ec740021e0edd80c0124a87e46c1c97b7508b9979f53c00be9c0d3079327b84a324f6bf14061c18cd79c4b77ba4b7d6895f40f4486d3a437db86aa031e0a81984fe6dfe670a673ef478bc8205f816de15051536b401876d9aaf8bf825e0d2987c9a324a877a6375cd659e8203d4be00f2c884bb3d60c7e1bdc7ddc2d5c19fa3e2aed01e05d4754fb0e6f73205c922019b3ffc0c54f960323fb7cc7ac1f143ae6f92b3f362b7314f5763331c7c53c73286d1f7948b39d4f198f5f49a6afe832a6bfc7a651e811bd72960eeabe7f332264e15040e50a0ba8261e8d2ac4157b2aa70328feda9c099899f76965ac925d74f497fbdb445dc75772326e32ad58b76a104db60f784f43ed9320aa6b3a07a4b3011786130cb3b9a324526a29098082390a26d9a1d40aa60488993bc410e5ef25b2ea5bb0e515c9d66407e9d68296c6e1bd14f97b95d41c249feb8238d53425143097e07a798adf375cd75302bea06aa850a17e6664b68d96009de98f31fc30c6a2a67f396d1ae30d314d107565a956d7ec55d02ae9b7dfa3d437d690ce46f784319f9fb46ccdbda10eee88f720b672b5b8b7578fcbdffb914342b30451196295050ba7b41cac553b1944245097d1a68cdd4f7c5db336c9a87445e7b3657e59434572010125be93227ad64a477101daa282a5a55b48c5313290c8da65b07cc4d41a5a1463300c60a05a2c63a6564ff641d0423c5233931c75be53f4e2da1b8b91ab4d48a2e59ca2fbe1cfd833f0c1e2afefada70a1ba870ba276f9df18c6397c221d20585eb78437c36460fb7e4628634066e504ba90d1749f2a33d5c6e5dceafa372b3d5eba8296b821972f9dd37ca1a3d0e9ddd85c9f76a48783ce92710199f5ab3ba5a8c323e10ecd168c3814a97a7bd14f88756e4fa6551750261608561dc6d2083dc772068b29df558db78a2d325ae08c812c46707813422f78bc0c28cac053e7423537a919bbc0dac0a6b4768da38737447795905081a078431f0d183584a97f6f6c946a01172a1cb1802423c0f81db66eb1ac2de402aad0f1997ba2f2763b2721f818e7d5de73a1dcde49a390bb4cb05c952ab79728d9b020c5e83776379174e64225910c7425f0af1ba574618f7c8b9a8c61bbee56a59c3d2ed364252b34ff48e55b04196ac99fa4b2b824a7c725cea4f211a95e3ea70bc33ebda7a3e3ae1ca65c19af8144c6f55a4e0212f804f0e008709b0e6b2356753f70078066d35553ab00f1f1d874b6983c4803fdc6cb366631826e6999b72c6f2e5d517ce28cd34aa39e6479838d00fec73b4e13988c8ed7cca22c396e6ca1600c712bfbab62a0484c6ef1b516f04eaf97924112e1bb62ab165a24fc5db64dde5635f78b26173502f20d1a230740e81109d77d6a36fa5a66bb051930fc269a60881624b9e6fd19d130f35e41e8e175c9ba8563980cabce71374d4965ae200f6d3ebc63f66296b75985ac3ea0106470400636840ad7523770f79d66190845257ad68315df2d76a5f26cb22bbc324c500a99356f512b803dec987fdfa97f08650febf4cac2ac1f5e42528fb5f4a30bad8fc03c76098da84a2a766f16b596ec56a2fb9be34f72e358afd3af5df80724d15637a64882525cd4d13dd5bbcbc46372ba61e2ffd3f6851dc16c9b9424b32a73e45bfd575a2df076774b6e3f3aabf031dccb64910ecb5725fd99dee9095b7efdb099bc12ff851597632b7301a0a2252c80948b174e45ec09dac7d3dd2454a4e7519d6d0bf0dc3ec04b5a9eb38c3b74bb3c69e123111aa621df8324e0f4333ec93dc38ab2ccb7de7986453bb56bfc61766697e125059e381672685c84f77baf0bdba89fa7e19c673bba97f497be597dd695cb159d8a64f44049c3b549ac927837b1b9064bddee8b8f3ebf33daf1d72c64505ff90d1df38d47bc41f99f921c1cc56671692f20429ddcb93783efa4f9efa81ce2f5f43ece4585405f8407367d1f4d506e32c2572d20bc807d6f4656364a0a51e0b6d37b59cf918c68df011839f228161bfd95c102a6974b0d508f7420ce0395c5963b421a7df4e71a752da5d737fe0de7241a1c67b2056f63d22b9d2dee3c6f2e2e8c31a4f317e6d0e0dd6dd95337ce6c30dfb7c0b57f642d5e9b1fc21d1d4476ea56b88da1830228aca0dec4c65dde27be5731a2437ddfa6606e9a91fd2e9c3c542b45191bbedf8e3318870e23d893862700f880ce89288b82069bf1e0c8fceae66a65ebc433c57e0e94e529de40a524057d9ae0b919d5293e0372867aa4dd0f2b94a97a3d7a6a74b9b677bc682e896dd41d9756b5a87c2bfee5dca42d2ab3159e5a7e48da0b250eaeedcd2a43ea96e01d716c3726cd73e03f1e38ff6ad3259ab8fc52ec4c5e8ba868bb43e8141d74173c198826aef15302992cf5dcd6269b1b061ad5b8e6fd04de619f7a9a3b3f976fca66798990acafff7782b1e0d19d99f3003665534c6f372d441adfa53bb9877642f8cef48e67d13364bffb9fffc088cf21df802fdf1d88f16abdf19d9813bab73030e6dbeabb6d4adb55116eb3080e1bf566c4c3319070e75fe95ed7d2e6a7af0cbf5fc4580fdaa265c2b1d19e0c9045f56c91a1c650955b9e3d56087eaae4ca52e4983238ddbfd67e894b6d032695f9ac6175302fe65ceaa01a9593edc8d8958d513e9a1fbd7353a0295c95a4eea58384e5fe12b0ba3df0f0118c1ec2d9199d2675b1807f27aba6552343efd5dd4590095a8abe0b54cf2b28a2a7ed70442e5db8d27f79d994af4b07f7bfd0287adc9bb44fa996824e76e5945e879478a27d33bef816eaa19d14ce53272eeb1f3ff1031025d930d7ffcbbcdd9599a86e7c8ccb9347065789a9728ca1220fa51ca51962a78da8115ef1341d6ef86cadb42ad391e04fdc44d4323f129c88d072c332cc26e4e784bc99bb5673b2f75ef8dc35f8032092e73723cfd10c8fbc1fe885717fec42b40da71ac6997c64030f2e594650bbde80d5b2faeadeb6f54c5c8ae5e9ab2f6b738145549b8393dcbbfbc2bda4740874ca262cbc1bbece87aa04be66f3d44ca9b6ae2bc9b29b369772834a7c08e8957dbf471909cb07afa175a7177b2891d097fde2df0c9446e12ed7541a06bc14df73d0b71c46814fc6cd0fc21ab5005a57b0a9bdb37fc91d200d5aecd600668f32d1bef48b04c6ddc074f8c43c8713a44e7e5a9d5da5c9948fad6d9bf2db70be5c21da9e09c714581933c15be173cae6316b810042010e336ca9800ff50a6338a7eea3f1fd0fe2353d83e9c7ce0daeb68d12ad84f5341f70536c42a7411fd674a282bbcef931c90ba9dfe2b646b7379bddee30a9db9165e1e07026008b7e1308d8a8725372ff3131eac24c95eff2edec8058caed89cb89fe704f9a9a28c7c15bb6aa784dfeaaa34e7cb577f52e533a4f310cdcae7424e42caf7520d2ad6f69e3c9132e0ce0d6a7b7dc33f542866ab52a5c54d68b2f401d02ea6b49489de775379c7d142eedf5a71495b8550c8c8be7145eeb58f21f9f9d07bdbc847a5ec26bdd8d32cb126aaa39db15dd17b1b5393883d51ac481c9b5dca185c362d67472b63c27fea355eb46c871e8fcade0751531ff4b7db9a8b2055466ff1a54eb739afcda091b4d67e47deb8f9bb1980750825bfd2e7e98d56d10bcde764bdb37e08da84d8d2319d6fa921b7a8a766694ec132ee3fab7f2965f6a4e6e87c2763a2fdd30fd40a0a9117225c0c951c58a278c4a137a3c94577a0d74b1ada008b660d60c3f6fa01e6bb5ffcb74026e19732dd599b1f660ae27ef0bb26f026b990c5a579d1c2b47e6e212f7d5bdac5c0cc2164c84830f036ff463bec5df0326fdf87548f26fa694b4acd70ef7062d97f9f78f458cff1aa1543d86bb019a267e920b401ece926802e21c708981d61cae7b73e775359eafa6e573b6650828f2df1fa5594d643cf63f09b15e1c18b5effc0bd7bd4ff0da4490be2771613bf3eed4d1571f4965c7c795961c1e2b1e2e1e2d25837f3a514a600b28d956143f9370dc61a100b745bb52a301bd3f2b24972dae4317bbc8c9578852c009c31265703f724b13ac0b76802de3f7151fb0ae89a4fc0ef4e17feb9a34241e2946d060229112f81f8fba9adecfd4c0945e402e8e0a92c3bb9ec41a8ae9db8dc86fd292131c5af3351a4904ffaef208eb695e271cd51f1bdc3239e8921005b9579c9d8dda47a6b6e4ea4b579b51d83a6adf5f2aae8add71c74a45d8485d2f0b675b85a5e09972cdbf6e16051a3ed3cf931ee7abcb926a501d457c6c3617b40e682b4f9cbe886ba225144d9ff4ec815304a67c1cfc8252513ec24216b3d6313cea9a5fb4ccaaeddea67b567ac3e17d4f3004910099e101dfbc3f4b5a7a1f23115f171a90b35775ddb411d5380f94042e95c7aaf95c250566061adcb9d1690616463014b2db449019ee662e6a209ad27bb65e3e699bc4e98ebcf39ab7523a56c63053d29ddcc8c92db5e6e653bf6c44b11246cfd3e1571aa44147e9d5851991bb9e10d8a4107a8d939b2271b7246ef75919ffe3bab542056123866e96e27d4340fff5ab881ec069b61e9774f7083956fe6e07fe90901c562fd44d8d6de2dbe7f0c650af9c6030ca3fb0b45485c341dffb6efd94f7fa4c797af3fbbadd1ebbfc6591d079638d523b8ae21784f5fe2f1eeaad2f2b536c68ebdcd31f9b76eea40cf9d2f37d7fee9b3a12231faaca11478036993b46355ee829c02237939deb1a76381a1840341c725270046b2a749521a089c3a05a005a50bfbf31b237e48c85e4aad7dd56428f8df12f065888880253fc3eacdcfb66e7291a44b24dfcdd5b8cb4cc8cb1140dc034b2a999864966d134ffefc56f9ebb7dd7c5db043956dac0858317a9122e08470d036a4e62e1a39a6b27f79dc6b88096e34efcb822da7f7406cc06dd9ef8c49c8d500b858ce5c0b66d10f0a680dd48bae212243e88fc3dbe96ec246aa608b5392c44e7ef42da40cda12755701c7196624abbdc07da409828ac800b00d5d27c95604e99ec4313a638ade7b07af819dc1593b8aec4a52c014abe13f5108cea6d39dfd99bfd0c3653afe9ee7c27a23aac5d3374f6c568232b8d4214ad1a69b519bed1725891ecc6fb6bfb882326b9586991c09d5ebaa1da5978ef0e8d9ecad7046d1ba57a6b9329e01549614fd89bf7967bc17e40f4c0962d960b6e011e4ea4bffce4ef5bba6df3b43459e65cbdd89cd5439cb44804630b1a5d3dbfb20953b29ec6e3bc873eeb98da31b3a3c456ddcc88a1d8cbce7a078d9236ec701af0788543538e998739aaade4a5dd16212439eb431efc115ec60cb247db9e3ba6543ba1203b4c12d66b299746093caa0db67b9d77038d417369010d8d83c95edeb50b7ac7e6b294ef23c6d990c458fbc48df137a707f2c8a6e372f3e5f804664e836696acde48ac5bf42109276fc877e00b596e4594c31363b5e0f9e370c5fe505feb79319a74d5876cb69aac73f1ab0acf1295f52284be3460c9a408b684639eaaf8871893dd8d0bfe060282797b018f399b3318399e2583749b76b811d65283e51c64a462d95f44188dd53bd8bb1807eb71ea315295e5eb51d4e6941b22379a9ed586777ffea8ea5cbc875b2a385aef55251fd306027bd68914880f4afe7f6d5892610453c416492b109d42d67956afe733487fbc5a53df9ac8bf9c29d1b656730188cd86b0140b14389b85760477e4421af899fe041a51077001cd202268f0ae71625571492e8aa882e6b581504b06d64aa4a443961bf54f88f304d69703c64b80821eac05c242488e134570e35ca22440d1310596f516e39217f5a5761331daad6c9bbf5c7bec84c8b5a7cd440920acac02c2ec7d12405429c4f2256613edec56865ef3e3b7c3ddb1226f1ee8fd1cefdabddc40bf100c219eae9cdedd8234f12a63db12020282b3e60e0dbe4884e15e6b76efbae35ad4dc8f19582a52eab179879982725de883c7b5bd0653f95d3888bca26fa3707f24d579b9a6904cb9ede60c7c079d4dd65169ced3db4861d26cff6cd4eea2ece986bccce42ab9417c44e707afbd0b5858661a8fd71f3418810912fa92ef21bf1684e3174d370dd7be50dd2789254513fb5c6a872b248f93d59763c440e3b87da279e8d7496df665dc8c38eabcd2c2f71b8eca33649db34a6c928278836ecfaf0a005e9b6d321b7263619aaf9f381d885587da1307ed57d2a284cf85ced2efa9b9a294c22d25d583ff7b6304c4e7ad2e15d1eab48985e59313d8db5a77d291143dcb2bea0dabcd20ed344278b2440a7ef8f79c766e19d5223d19068532c04c6502f4948183466abfd9268989ebefade15b63600729fbbef69ac00184743e8a12a5b96f07229826e73fbcc8a6c64d100bd99fd5b541be0b8699683ce6b09fc2b3a2840c096ff39a0d8d71805df5ded944e0174e2f59d32368c57c191a7c869ebe65ef0c06cfeb2cb93eef412def3752230b6469c3b6cdcf03ab66469e3c6566a97c44df7dd7016760e0806b7526c9133ca8019910fd2046fdc7d115e074dec2eb623006dcf9b8c2ab0edf9fe21116b4e862796ca5a15d339d8727279fba352c1a943b02a2bc93d6ee16473ef342a28fbcb72644e027e70d8985e2fc1a710b1abdaec0637da4050ca09371c9173fff3c2022a2b25f15503d48208f03ff4de3172afe6a99bc348eec6902c9eecc6d7f22c911795580de2b6b3003a5cf9c853f9a092f8435ecd2b3febdf0c9e0816fc4dc0e10148ee406cafff79ba1bf90db932bceaec7989e22f6ac05c9ec7ee49b42d065ab0ecef703d163f5551d647a956034f1f88f522e99e98ce70acbea54948ba8764ec2a64879b14fcfbc735e9867395e099955f34c9bef09b83fc2e35fc001bca687caa546ccfd1bdd5e4dfe98a5710f7bfda5ec46cd89bb1fe58bda74c237958cc2913c70721740a4a707d4e9f4c9b1dfb219bdcb933c0984786130220fbfbb7fabb0dc540d8256bc232b621ac985ed8b430be83981988d6c84ed94e5fceca7158fa4257ff3e0e69a5f33369988482b353d06ec2f1d01bf5e87ab793f3e50d0e50ad57842c99548b5c7b9b2e4d582f333ec953a0aca1a07d0ed054dac388ed14499ef755af32225a4d929779b25c8ce2dee31625b2d43ff4a41a592ab7fe920dab93c8d070519e5de100cf51afd8c2479be65f59e9b122e4111e6d8cb7912380dd5572ff583ef01c808ceabe2c13f8eade99d5453a806ed4bda53907ab87c8f649ac9eea4d40411f930091c8115657540dc521f08d884e4d107665a37b29abf6565ff49838a0b9ef80226b7846e9070c9232eb62cb12e8d6725b986810bff1086c381b1102a77f13b1bb21d5b4142f9ad3a8daa4da6664f74b1a7a5f5091c5b4f3fdbc5d919abc138c925ae7411ff8873aef96bda4cceb38037cb48f24e64d8353777e85cfc497787b71bfb7d651895a2dcec8b5108ca5220249ee017408b1fcf56e0a90a36c39c8e51ef74c5cf30b9b160f189505edb93cb049cfbb293d1aa83faa0786f4d9c98e3262abafb94da5d35c782d646d384f0e764300c729ceb00d9af21e6fac54704fc90583e6d7a7808967d2b02a2fb69121ba01292d5e039ab56f0ff754b225569514cf26fb9c49c3459fe448ef33aca5fce549f1f3af23012824ca393cee94a2e77a +Output = 88ede01631be9979161282df952658a6 + +Len = 83816 +Msg = cf13dcb4c1485c1b1bcf49096dc7d932ab22c5b683a94249ee403391066c9dcf17125bc2f88213c99cb36847e4d0714bb7f46a715533aa03e8d9d5645df653af711a019b0f5d26a2d9a2a862051d80436a136b5adae1e28db3404df8b1c7749006b23606ade17deffb24712177b5ec60eb062e3abbbdd32f76fd0215abe8e6bbfe6262cd7a1700f729bf2b4de2a19feb63551dd8a0cf63315a995b83f260937880b2edb6200698048cfd3eaef0e77f2bf9899ffe2f1e7bda869bc2092f37610fb42b3f8a44b62b5c4c65130c4791766ad6291b7213b20473228b9e710a763ac7c354c0109130a248907f102f8fa66bee21bdfbfdf293e44458f256812a2405e9d5b5d912ac7be61080d49edf712f450103cea66775ca05954e5754023849aabd11d7f056409fdefc45eb26e39433eee9a4e38478435d4dae2c42ffbbdbee108ba0416fa6f3a57154074c0e04a2ba4dee2b84fdf80557a6d61b3bbf76bc19219baa7bbcc86d94895fed80bf0a40cd4a5ac13979ae62bdf75743cbfcf983d5c434560e418457740d66200ea2bd1872cd738d8b606303992877cb791e0dd727e1a0cc8164a4594ee4b1c87e1ee4d2b3be83b8011adf8ff2207fdbce8d7a60196125355c8fee1a29f8880b599a49169805d069240feaafd1c9b79d51b208c7b22a0cb928292c430d3033142680b28a288ba3c97aa84c0b3d0a66378af37fb4fa259d7f6c9a247b0274f9096d37e8d96b3643008d4bcc4a3ecbd5d101b9a6cefa3a1fb0b0499f6b11ac2413b727b3a969effa35e5613414dcf44d943f6d46beb952dc737da064bb41c0fa598ab8daa32b9f0e9008534a13206e14a7cb75272b3f531af159063d129b99c4047152276eb82cc83a8087d7ec111f72332d3b11be95272251cfe3f018251dc93bf15d60b21880705bd567a24ab8f0b160ee25cc1fc2b43cbc64a04676e935532794414e1954814e1a8d5a75d31bc91855959d1ff5cee4af5aa2a307d4efcaa8efe166b9497319a9a032c7162f4493ee3baa0ad4e9c29dc5521055fbd93dc211bd603569ea7d2fcb154b184e073b347c39b5d4b1a2a5c9c4cd361ee92edd07d6b69a1425a57baafaa061b4e50306960a783f627fc97f4ff5f29d679b7bd77f3f04166cb62274747f69fb03a3caaf9fdf20cf1e05055917a0eacc96d767311494cf5ca6e5087074a299a16d50053e394558ee6f0dff3a090ddc4b15669af5ad1c3ef52878ff7792aa58dc5ab35bb94b824823bd5d5e2a0d83f1a34a10bd2b31207a685c37b192b6e1cd323295752abddf19f671bfcb310b4c515b9f9c78d98ae8ab3da9ecc3c8c88d212d5dbefa9877a4f3eff1f8ee58ebae23fb7ad472099fbcf7fd765de022b0f77b5543f6930c6019fd97a6d36ea695f2900c457e54c258e4892f2d53aea6566704314d05e88d62866075f817f424f15fbf156763c50d9da7875b3596d55ea324e449e1b2a02364324312508b27d8e83fd89e484b6ef1564f1a0af6eefe527d78422569c664d64f66cff414f9b0cc60d8052f50fef6766b2269c2d823d189cea9464e4b0adbaf096a2ca5ae27360842746c51e74307a4c4699d0e43fcf50b7c001a4bf143aeb57b8681ad84dd62927759358b75e346844a6bdd739f4313e070c5e3a4c13c84f18d02f69200e5dc74e6cf896662a75d1de372527b54bed2119340cce225bc06692825b5de88064bb6762090691654f47778c423adca36dba4ccb9fa8c848adc273238e3188607575e1192711cfab5b29bf2aa79916972d5a40277982a456fad339583abc961b1a9769e6f550774914090376c7cb09a3c69161fc3cc44d2332193374e337881cce90504fd63b3edaf455e31525391c35a3f040ae5be63929ee15102e1a3ad4e20bf142d85c4a7ced86a0ec6a427bd4e95fe75ab25980eed779575dc8324f13074d1aa004e9f6b7dd457a7e0a91fbaa1b54e72eaca7fce4b88e505af7edeca8f91cacf65a21d88646bb33166aa64122682d902af1e9d2a1497770b6218f8c3d340508b44c76685e96527b540ef1d4c43c4442de2671aaab06df68edd9a9a6164470be78506a1ea76895a3956c073f162423afb6bee1ed688d20897084cee2eaa6ea5ea11a7f64072a0f5c890658e88eac5617532fbd037028e552dcb7519b10e7fc39dcef28e0d45729f67d6259599431561a220d65854876886580e5e4672f6401006a52f91dc56c70120104ab1add4fae38b1bc6dfb580294320b9509bfacb7b312f7ea527320f67c2fa261a094b073c8f360c148de35399338eb49140d0f6f6d120429d7699d71a8bfe00dec6fb43a20caddc0989656a80ffa9e7695e7cdd7a96e0d75fa99816a7043286dd0f45f1f503f871ebfcc32ba64f7a3a221d87eace28762733e6b835d7d4a0a1610db277fd1b1db5020d8600d3c9079603a47884bc30ed1961557f9a72a45037b0e7c93e82fd268f98e53550ce185ae1531cd7120a564a94302077ae401b483113c612ae4c501ae6f3ab588260e27b055bac2dfe81419782ea6c28d908e29278d2d2162f22bd02a45c88780051d070e8637d00afe99adccad564198494a036f335325c2aceece5b01ba41c3169894374b2b7db8d0a081f54392dd215aafe3a89840f6d051684cbf27826cc7d6fb6fc8f92814300ab346a0860f2dbf613a4a8240690cf2ac32ebd52bb36104c2dfea1234903c27096c5c4ce91d9bd8d973987ab04de0cff9d91c1b82bfe7106690a3c172066df459164368e130aff44fd66e005c620acee6b56e20c11a37613ec81d4535fd223e765b9c6302fae29820fd2ba1c947f355ef7242536b550a8dc7e0c72bf4e6e14bfda6b7e9c2dedc3ae93251dd7b62331b707a4941e5f2b8dc7e6531d4335633c33b72366ba55ee56325209121e73332760647d36ad575caf3deefdddc75bd823acc6888573eeda697514249fd915d8a0c3d65813c9e40c96a75cb3ba3309f64f93cd43e3ad42d885dfa01ecff0e239234724dd345b5063c86bf91cbd6f87e54a4e95fb8851971131d8c0a0a74c237f385418b3a04ce188cff38de1ed631dcc9c47e6597d4836adf5c83a5231d31fd1675278835f82e0a433a5e0a953f813d3cbe48705c97867d35917d7db746e205839a90df47ae795de7aebb91df514b024618f42a674cb72abe62d5fe478066c3b35c29faff862475f2e2ce2e4dda03de4e6afdde487289e5e23739a1446814ca3e403f65be1da3f4ed6cf21a71385023ee0ab216909763414994f5014e5c908b8ccd5d9a13e39c6d4fb3e3f0e9da94758d9edd6da029f7cf4ce2a488b5dc4e8a177a111291666221924e004c085f6545a58dcc4e27a8abe274c6d4b22b75c34876dcd679a71499b44d91d3766d353706de6e0b2277a1f42d59b7e2181fa78339134c3a09d57ca7b7ea35da2a78da7e5b90a616a5109464f2441c7924f2eff2ee856e987d9d1d108ee08080b2cbddcf9654cc7b20930e72f3fc8ae66345bdb6db35ba9e3f7e6468cbd92863b9d6ad9f599347b53f7f6ea284cb89d64da8af3381bc96a7b9e9f114d12c940faa19d86217f4be315c26337837497fb55e6c32fd7482a931877021a9416349c0fe05dcbc43c1868bf127fb788deef3001030c779161058e82291a4aa8f05b034403b29027fb23721b9153507eb347a430d76fb3b08fe3c2815dec87d3c9c6de5fb2a4bd93e2f56aefe5e6ebaf1a28bfaa0af3cb7af94b97ddbb82ba5bc9fe9329943c3a4e1915b604b64071613c19e93645a0a738c8c5755deae3cc89178a8c6a5281efa0c90bc022ad6ac8dd40a28a9e307f303123d9c4cb9317a3a5dcf22fea937cc5d31a60ef10716bda6b4f4b0aa872974caf3310eced5d2729f73fbfe6700033a22e339baa98ab4b8d52919dd11db3f1e4f81ff1558bf11a44c6697818c641b070f83d445b800313cbdc2d1f47c49d93e1551005686ff6f8de5c82a52cb2fdfb157a5fe4699120ca7b4f4c5ad467d687290e2ed28b6015c9deffb1ce8cfddc1a7bfcc2023c93ab7885f415d4e1cc06d5a66ba0e22725f6962cf81e7c9f6f881788c58d263c4e4b25d013b117d4bcd6833eb48fbda5874066b08ff236cdcfa6f9261fe9d8d18aa9da46f447ab17ffed9bdb3022e96b4e9c42520b55857ee7e1c93c50fea1630e6d9fcede0016105df524642882f0e342b131fab66ef01a7dde8eb1a1f3085aa33e7a501b04e2299e9327c1e4d65a742a283b90d666ff095a48506f5af1961e11c475b5f17a96c98971abdaac47ad85d0a868fcb4643ab446c5185dc31fd11720a897e3a98abb57e837b897c8fd7380fadac12698912a8108fded6324a643ad9792e8c38a5ed83d818d56e07f1f33cc71654df6c91556d96a9ad769c4ad74494029713dde1b75e21c198e9d1bd676d1fdf31555911746253241de57ec5deb51e116393aebec1bae838667b6e249c3f765291f2936bf83cb299c0b15e4de302f430148a0fbf750097d7aea131da1a2a673b1755c013694351753658cf457cb492e90a75954649f5bd19d1e9c13059b46ed331fd43aa401c9c40ef4a264f045096a6e5d4b3e5c8d0c48990b3a0e9e373f9c56237b293153f1f774c1407bd324d6be4172600307a484aa13b9d35493fdf948c38b37160311147a2dd34f8225f317f3b2ef7eea8c6b2cbfb631502e0d76ddb9225ff24845c39913e233b5c1113736d168db8f3a136a6a4e277a9ae4342851b61aa593081df2ea8b3be75c80bc7a9a200c3e7a3cc62aa721119c97be2f9dbe095367029eb3256ea9dff92a075143aba845212738cb324cfe1aa03104275d8d7876ac275230e48d377770099df61bd131bc8b7e754a0abfaeea8d4ffd43ee24cc2b7dea6bbcb7affbaa55e08cd38974821884673d6c3b6af92a6bd9f2acdaedcc19e133337e273cbf21af961a1215fc640214cad6584cb4a68242b62b89a94e42e9e0eaf09fbb9c4983861590d847d19f22448f8937c5047f991bd0f003e1b1f44282f7eb46fc386179e3443650a85bfb1f1b9e9e312fc44a18fd0e89420c7daccdd0426c9c7076d1abcd0b539fbf0340a2a1df5d6d115bd0a6f1583d6db11a3032d1b3bbc9a1bf60c04c5230f0142f3552df3b0e14f331d9ecfe9656ad59f048188d331ff4177cd561680116693048a3d8dc98f84d5dae2d922cb01a298b67be270da8e2465813f9352a014b329ab752dba1e06441d83a933f838fd20acfe7590858fc4ae6eeee94e599381774dae30a0434f99a18eb3dd49b0c19c577add8e0637615a0fc61736e18bd8fc457793393fb9fcde2f91f1fb84fce373d99aea21cdf70dd2bb2370c4e779fee9902fe11b467ea42840cfb480703d1d2809759add5254d3a352efa20fda9463edd9ef1e437f01b42c77b0720895e1ed0d79a3761d2dd1516049831164457ba65d952db13e23f3cb4f56bcb100609bc1b8acace27ddaed158e1196558e929044dd54743087efc547f5406d07e45acb399e14ea965bc4088e814d91d4db4c62bdc18a4b12ad2cf6c8d2d749dd30fee0c34244f4d84383c42aee5ffe15d6fd737fcec92ade1a85e8bc5c7ddba782c77ced29af444ed194a07919cb339f0e00331949739c095c654b90f6c68b0d364f0015d8c6615072711e07c801fae6ed1f3208c62c071aef557fe53623d064e7f01aebc42cc48392a3ad454da68c740084f0ccc95504994fd0f6379f28544504451dcd7044f65ede96cec02f2b90dcc4dbefe3b7810cfb0a626ef6a6468f3407c8993961a17f58a2d502f6e1038077b6ae8fcc353298b68b841ab0c000d9a88ef50dbe1cb4b8078be8ea5807c0d3db52576114b6dc20525fa0b9d480e9dc18f654fbda061148c1e64cd56217d6137e3481042bc0f04c6503529cf07d53ff0bda62e40bb2299a3e6e7b54b375d5c7e6b995d99fc8117554f3146492f9e1cb07a79946d1a57034c370eef8bab622599b7e1061df40b223a8cb60811a9b15b882ea8294aa647791079a2231e66d5e5102de7b2d68cf54dfe6d8c17315e56260141f996e2453c2475156cf80d4ffec36c37750acdad86c2285c7a1cb135d5a2a11c35833ae07c2b057131175f4d24e8333c51b6093d07a640c04abf971575f9f32524975c6050b748f6bc281c4a907bf0a4445d9225c024ce01c2a7ede87f537cc58d7b4fab00f0c50cd4d24c2d8ba528d616a7714ef9615b87ab7dbb953bd7c66439d71babd4fd041c40bdf8de5b8e653c8f3ead9ffa886eb9cce80704f1ae586bf152c94614078d8cc9922844485d2e3d77c74eff0abf9001ef91db1de9ffba407b945f660735e9c637f9e2499c3b0c4195ed5d58732e48c6da1f3ec86af3754d9f46e8f2f6b09f30529930d49d4f86b0b255e1917bff1e71563b39edbeb210f9271069d2299f3734e11b19ce95c224f396aae2926b579a682b8dd2742b6313abd999eceee82b3939ae26a61dcabb6e70099269438b61451421bc1345fa2f06cd7f8a782e7b7c2ea77f63ddaa8563ed90d3b57c8c2242a6dd00710448733d72c6df8a167a29b99ee51d7ac85d0de128bbbbbd26557a25462c8f53ac66ddb6dffec242cdba3c0b0f5d50126f1eac5ea75a8b4f6c86d930ab67970b138582c1d3ddef59a5d6fa990b76dfd3d8d6a802f3d309165807888b5ff8e040418ea887d8cb3078a6b6ac8c199894670d6b4af49390feb7f1c0cf5fea45329b3f6a982f75304b47d942990bc22b357316c7da5d0ff731dd3f99f5d4d2b855c414ff9ae23374096d45630b3f8c978ba2f9d0a064f0726c2e4b7b4411a1b71062c837f5c898ff3293f2ff484f01455e99c070e332bd6875521c4c023fdeac2d1d64f9f3082e398e60e9ff9964a99b7603738eedeefe4115f2baf6788512fe729fee2cdacb7d8be47d314c46a60b029a86181204c13c6414b62e5fee0cc415a88d71baf3380c5bfe91d2cc973cafe394cab9e371d3fd3b3a457f71abfb7c599792f28a86786312a245d569d44f1da42a785deb7c4bcc2d4f48b512f97bc33206547b84dbb20a199941410a4406deaf25380d116c522ea21a66d92c1eb41f08be7b1390390f8ad6ab2c1e97308a796a4cb1d03d8b0fad026448f2a663cd1b4388b0c396eab769b39faf75f7e002763f698cae571fabd0b6f595086810ef3c4b2a9b927e34d132173f714d149c975e954270af48714d1f2495f6245a6d410c886ce3883060856a6a511baed5ac71b7d3a106dcf6c91e23b50c134c64c2ec12631830ad95b5fd9b139e54a02257b70c634cf63c4a6f4663d121938b6e5617d642f42c0a937d5e4c7ceec52ce3e792e2ac0be7d72caaec68e19e1fe66072ebe18eca7da613fed3060c09155900a229c316a882b685c338b84b495e67225e90bab060cb89fe8281502bb6ed3062d1a53609e96ee03b0253dd79eaf9159c622de90e7ebfbc3a4f93b241bff5b7efbb2dc4ed98535d38af655fd14b97f8b7c6eaf712ee0046b1ad2fb4b6ead4f890aaeaf32a7bdb36621295c4bd33e11959d1f06b2377372f49e67edff30033fb2ee4034e285bac72a3730c96a4697e7f6bcc67cda8e00c80ec41a7ba5ec8b9c6afb2a15a50ff6e19e219f25ceeb61732d6ff77a60bf226408105d2ce600c0f63fd5ceca10831ca34074d6e9f02e2543b80b2467cb3752e77f07b29a16292dcdafe2a0baab9b767caf957a8e64ab5dca1532dffda0831cb2d21ebd1bdca23c9319c6427fdcc5aefe3a27fc9b92df7586c36b7c84572eda66bfb9cf5aa01877e72bd516723a7e20787e90df9a0136f6fa5109ac9475973673868d8bbee7086a2a54b3af4a3b41759bfb6485f2464e6ca53cb1c2c672589b59d50e54b137ee8ddd02d67f5055ac18d92f17924cc8924117e4e86162e3ef838a1990ccea19274d9fd4b2093d200a74b0983e86f21e8f1eb2e8120b1220d87994c2c956c1e16f33b338dadf69110923a2b52dd69aaea15006c4c3125cdf80080a6f1c84c14712eae7bdb5545caf14a020047a03aeff757f93f97039ab7682994b8d0ed970a0bead8dc1d62a9050b974c904a78097878807eb04adc3766c6cc7e89b24b74894cf2615e3b1a49cbc641c0e444affeced35836c64d05246478afe6217d2b0c189c0df2091dc64ea38a0f05031b8b437872a7ca8988c68a39e89b72891bd5873f630233e6acaddf16bfcac4f5b955fdfebb35e101e466916b7c57cdc872910c86099acbfcce1925abcd3aa4c3045457e918ca2437472f60849ead9de66ca7c376f69d63536c5047ea1c274e74e6d277bff02d3b329b67200cb5638becf05ed59692d3a2f46f9b6e5b145969104615850bab27cdfac657f88929423ee1e5006a6e460331e6bd42c2871e979ea00b66aa52b0808298b247118561125fcd35d3a98778f7b731408d6af5a0ab952a1f0d0d1e69000413457e9287c79b95b9c720bb689275dddedec48f2d045bf5b96952d8f63d6ef8736946a418c2a489ac832ec899fa464bf4812e58b8b0706652d17d3063949409c105e56fbfbaf7e2ae5147f7a31a32a87b1014ee1d0eb292ff3fd53fecd738dd0400a41a04175a49c719b1700d58009c7c73be78e484e81ec79ba32d196c231c4444cbce6f42966600c3b55c5f1e7ad1fd92741f967cdcb5b3cd2f2272bc1d6f89b8a2b289a173e060379be322d366ec09557e0bba5d54fdc9bec145802fee7edc4471efd99db860ef5eab2cddde8d98a5a42363d88f199e1354a1beca2e5df044d07face79f2f8db61e2d6018a9b77bdb67ad50787af341997817b6d81f336dca4415123c0d9e10bc6068a65c9bab3db28662f92386a98e62136a55336b389f75887b495f50ce900a0da5272f1c338733e98b87601b052c760be3c2627b342b4d85f978d8d187b6a60b2c0a1c94150164786f21b8a1cdc4dd4aca26edb6efbc5a21d7c730f7902a9a444578a86b1a524f1c58f0b280cafd9fb667a85d8330f8a5455c5fee29b393ee9e38995d0a0a22fcbb8c1bd620c480c5390171394cc18735dad1689ad1b699a8034c94c2d7ad1b713e54cbace983f457bae1a80978681212c67e09bd5662e5d25aca925f3bcbe3b88ef828bd44ce025b205076566fee4145f3ab6bde207f1f738bfababd9f2b22d991c05990976e52db559403a6981bbbd547a0b68597d5ef947d243563699681da31f487ad4b2c8bde40f576845db629caaca4113a232bfb3c1a902ad903d4a7c555dbd99dc9ce556dc9bdf7752589322d0901a4862c4bee734986c2a8d3ad3ea1e5be78e7781c5a8fd832b003595a7f0545fd98f01afb6e41f24d255743e9eb77c8e58b13bfe03f4c559ec6b55ff2b75a4ae11501550423affd2e7a6eb94f584ee8983baa08e0afac28476413a0198334fff5423f452eb7c45371e9769fa82d2e2c1fb033bae550b83a76b0a684968b9c4c8048345240cf89da5e9cf65cbc11207cc111363cb7ca777172d2f57433769919cc4f68e50416047b3cb8765853ad2ac0c8863bf81ec6f2b685f389d6b6ed344e1f7e626440313f1f55687efb35a957e07a39cb55e2ec2ff2f53be813e89774d4c2fdaa39bdcb42acefd297ad29acacc5204f6dbbcae3380b0bd19c94911d6191fdf5c8ca438a130c531e48d6f95e335501f3aa92a05415eb0fde2dc07926036e178e44819a16bc25c9751ade6b69f379674b09432ae6cc78498921fe675b63535aefa7c5891845e198ff942d4872f41a987f12343142679c00fb02b8256388290c4179fdd938b4260ae33e2b57243f1eddb84dce7c0fed3d7e5b575579e87ad676ab4093521d13de654aa0416224db6f7e1e4379d5f6674509d2a93d2c8f4244e05686eebc7069f0f25b43d52f1dd0f3c3d87b9e029fdc9bea887fd70602e7599169d276dfd8bf44f93fae5188b52794f40f7da3ccb1542769a4618dcee971ffd30dad9383fe1cc2c21d691b3394e73858ead2f2fbd5d8d1cd4fd7c64eebe91dec6a9ead6f898852941efd9df86318c9389201f157b26e8160b06aeb4cb1569b25a72d2c6c220cdcb96af13da1cac22edc2e920aa7f1211f68f0a16291e3c060c6ede2784271ae487728cd65f470ee4f8ce70ea4b539f6932e360594e5282f56176346f9b91d787e17801a7cbbfea41490e5fc264733f7c5faab1de90f28ac646032e01898cf7266e09b5eeabc1bea652f4fe4fa26862b9e147671cad98c3e72e881383ba92ea3e91ca12416c070ca2ab34d4e871adb9a04c3c1899d09fcee69f879d7ccb2e313ed11baf16a8ea54b4b6209c335ebda4de050b1eecb681fc32fd84244317c95ca5b090c4f4df06175b085a8ca6c602a4b1b037027bdbe9ec5add00307d4cfedd11c4ac2c527ac4c51426355ec9442749c9b2426bcdad320fccb28e4a91b73932f161c02dc618b0fe6e74636b015595f494afbfa35896e4e7172270eb1702f2eec33c9f41a6155523d8874739e586d94590fd0151b3459d02b8816a9a73acc66115a98c20a90d2bc5c0e36353ec346bad4d1ea9ff6425a4d32f63ddc14e013e5a473d0913156c9f64d5fd4a419bfab7ac37a92bf4c1b3a6e8fa5e4d07fccc950b065ba8c191c04a8186596e7b6b5667c2df1109da727c0da497c53ad7065b9523a1a9ed849484979c306c4279d0b3d671a1eac628ecdb6396862d19a6f13aa914c79c4a049446111582ca58b572bf9e492e9ae368a78e235f541a8bf053e63b5ed6a730aa2761419debe823c6b7b629a9e3a5d40228d0e74f6001e45b94ead6726d5f43edb4829395ea4a36161653f3245f902a9de75009e76877c5414ab504ffea290657c216a18dfc65023c24f5a53900ee5984698815c7abe0a139dbe14147dba8ca70d689d5f690cd1aa15a379a685614e36e35e58560c8d0fabdcedc15eab03332b17878bb5045e6d1de2c865d22fdb85ab3c304f3333dcd54459a11ed79166cc1a22e5fcc3b9a46ea4b226e6809362d11ed9742c9bf893a2049d43f42536cb9e9bb4eab8318fc61a690b25c358bbdf7cb74394b838619abf162f390bf0a21bf2d757fe86a68facba91782dc601ae3bcca001f6bbaf79d974a097ed2be1de3c10f692892fcac03e95477ea6b524745c0afe9b04fdab453808cb5ec51c9ff118401fedf37c462a65f5b1a7f85968162c7dfc9a2445d2cfa0c5be0b2ba5d3e396ca7af1a432c2d50720f77a8b7a769b926fbf85c05ccc1ef7f1a226869025bd9df53025051ce5ca0d5f427fc8e0f50b752672e43f0b423a27d59e373ea33c86170b69127c01581060faba3f15528e6ebfeb3b400918dc2c16b9dbc7bba7c146eb524c3e72a8c3afe6398641db99e9cd5706421f864b41fbaee4805d64635b050113023350daccb08964cf0d837dad2f25bfb00c1e6e1aafd5a0b682a3a1b3cc4195b2797c5f1e1a30c2bc2c73c6839d115ead8c39470e517533a5bddf2771a29322859660ff5ff5c39c7625153c121e032a60293fa0c6e775e6749681be3c90df00a31462823849293a2480d0a703bae36cf26a983fe97cbd014c95ef2ebc9d0d78337becaf501f4ce4efc60bcefd79996d8bd7acec201535cc5443923f9ad105d25e51654f507e13e2ff7e307aa9640d7251f9e37113bcc58fb527d2b97e34af564b20352adf6f667b7b30a673ae8228c66f57a6956978559196ca18630fcff34c236fc308a6f92df98b65d581b6dcd0b00b7a5b1fcb52cd1b20b2ca06f6a9bafb0dc779b14c2450a259a3256c6678ee774ee86cd8e05015757a69526adbcaeaac32afbeec7af8b8bf0a75fefb68606b645f2b3f88517d15e7ce771657643b6da7b9affa83d87e4b97c960c8f8649c2dbf66cb3ef7c5deb6b9416280953c032934cb4f963c0dbdf274bceeeb2901321ed08d4ecfece57dde32fdb4f6eb092a089b9018f8e0c2bd969c0ba6cf56e82c25defa3e5c305961769b2af4e22374b9f1232f9189379e871d58df10dc49c1912933d5224c8cc892673cefabab0324b7cb15d143b1084a2271f060b57bc9336a1415478307c5da19975d7560b954c22c80b99db4d91d6d9678acb51c129de6becdcd78e8f5a638fdf046e49b74ddf521f757bc6e673cb0ec1cd407ce0b8e83953ca28fd97ef68a46593f63e54468669c183755f9c52ebb2b43af7d51cc64b2f849deb4de0a7c77fcb98f1ac491bbbca8cba191db59ba355bd786402fbfe71aeddcc711800101a828fa7f32c2c3a0a04af8dc989e8daac785bfa177ef4ade647fdda7cb46cb4dc5d20357d36742dcba8c873191c9c8c518b0e3484b1ad71337b334c40db9d0287500bc5f243a763ab17560e8a4e571d2d1e42bc3e437cd4c3c93c967fd5f785a60bc0dde4ec3c8812e0d6c49fb79f29a99297f5969ce94521b2684d7c3c32caa2f0dde1e788a9e78d85d919bbb0db2e51988c754026894ed7b744e5e886a52e28afc1765cb1861e9586cb8280f2a197af808ebfad98c34e404860d4274de54c8188fa0fc6ff47a9a5543ca361d578f23dfb2d39413c2df015f63abccaea6982582d0612b8ba64f5378e8ad0e0d1c7ca6768c6869db92fa0a34130e445f4a88c06fc7433948b74ade69654bf8080148cc64a190c35785eec82a9f20f2ae528a63887b2c70cdaed202cfc28a3b368f5b5d52f634e8af222303ea0ec71dc44708d475f4051643134e8652055421be4d1e21e7953d210cf101831c68ed0fc8b169dcdd3ab774d16f28339b3890f0c8c3f7e0cc8591b6967bf10f67b6790ee3161543695629d2a048c7d1526226f17e7a4f61a8ce1aef7447597173ff53633d0074d1c04f4278d72993281f8cfd6c06f98f6d2479be14cfdea26fe94b6356fdf6ee4e8a2decad9f97f4ffa8bdffa988c81dcce88c676ccec635d271a2912e4c81eb8171f80eba201c521f98fd13ef2d7063469b12fc409a897861b20dc5355128d3331bb98fe7813f1551955421881c78c7a2e51065d85aaed5e65593e7b135730e2c3078597ceb89a55b47cb12ba7e68b3aa70908a7c37beb327013ddfeb1fea0434593b53c185806b055869ccce7bc98e24e199537459407aee5f12952b38161d133e0c65fe78aecd196d37380c3a22c0d9e334a807e7bc9101171af1b9a77ec29086f2777aeb9b345d313b3ebbe4fbb1911c68717f09bb6228d05ddcdc95aa5975d9f6717e07cd099b497fc724a0dcc914343d9622e9c4542d32e43cdd2a234c88e11e3b52f3ceb299600bb990974e7029d4bbff39ac5fcfd7e7b6fb048d7001924374be3ed82699201ce5fe45f1d80e9aa4eb940b7d143bed94dbff99e719e25aaa00e08ade5b24f725177c8cd5030b2d4bd43ee2826c0138e45c32e45fa755aabcc98a7d2cf7bde824a91dac6b56cfab727ee304e3ee87807c407a2d1ea1c44821d7a560eb82cbb9c1a1c7efdc59c2dbc0f26cbac923368c078fc1bb4c8f96fd8232177b4282b633a309649b50944c87de37c24c5c9176262b51eed710f9339187e3ca165a81e51e73e8dbf9ee90d6757355cb02c3c2b014908fe9c9926803ccd7f1a4795b06c242d8471451dfd4c66e28557124273e4a1fdf519ad9fb646e761b648fec6c9ab4667b2df7eb4be8863aa53e9bf9af8bae0fc09de94f7373dc56fa4472b6b5c4235403a26c0e59557ca1911831ca843342acda7dbe72211fb5351d9a34205f0c77d219af5b0331a2126b94ec1adfcdbe70bed6f8018b2eef61db2b6dbf7292fa19a9655aac13fc57af5f57c14080b3b29f0c5b169ae2c16b4810cdc6faf475176fa18ead4783e2fdba47829f8af55e99365f12e071bf031cd29cabaccded31eae2813db0149e0a1b9de9bd8ee085f5fa9f7fa35d6e6a1c8968466c2720a7edfbdb13196afcab9d39bf0dae972a7aa05e4134b5967a2a333b70d7b93fdb68d2d3c01dcbe3e5f1c2df887d00c1501a894c8446f0917b4970b8541839fde77908f9fa68fa23b9b9a296600059153baed54cd07cfe585b0dfc8a7ace95682a22b6f5f2bc4f335e4b64e5af5d6299d17dafe68d9f84f300bfff384cc474898daa05500fe0721abeef3255dd5dc257fbd13da323772d6854a6a04b30c17f66f85b1c91b89e0ae0bfed316d52c82157a2f0a70afbcc9ec13d0c084a908c5e09547b244057bcbf8e4b8c8bb5776629a0ac2316a47b668206a5375fbdd3eeb87a875344e653033b2a491668b5b2fe803903b2b2f70c0d7f3d7370cc2d61af35bf7b2ba50a143b23bfa0d1eff66c5ace2d8de5a28d17883d708fff7721a2977ee2164b6e34022c22523a0649ff0e40bc8134040fee02a065a6e02c8921fe6d3beb42fac8ec859ddeedfefc9d58fe79f13fde5620a0361d9fe8503f2ab5ddfb13e0e681dbbb0558ff97d4fd148aa6cd166f7524fe2d1cc7923dc67f8166a707afcbea28ce28ea232e59a44fd61c6d03d317e0b6d01d1b65e7ad2b36b7bbc45ab7b33537c9bc9cc7133a563b0a96bae5cf410754bff69ac1464065aaf33d9cbcd2a1b1f6f6fd830c5542d309d981f739b3f4d246f34203a155ff5d235e7297f5a89c45ad7b7507b99c7901016a638bc8263929d39388bdcebff1fbeb20e41ecce2acd9a380ac919892e8c96be6c7de5ad117f445c75130102a1e2849601b970a28d956212e29876fdd96138e743258b75c961be2b924c42e3f8fca84469e6c77212ca26fac745307258bc8b33d2e61a66ebe86f38e89e1f2a54bcae5fcf503db76aca6d523155b2813d0ce22684261f0af981ebf7108ef22045a11b4a7a8c6fecf624a9bbb9409994e6c0f231ef7c05dc92bc990882a568706c58639723f1ba8d25477089b7ac4247f6772fe87d3e6b5617f70acfb767ee9519310bb83436ca02a8c1365ec4ff38f4ecadefaca603bc0229dfc5cf375d0108d +Output = eba0cb61e419fa2239b2d3df4ddcd592 + +Len = 85168 +Msg = 5b8cdc3193bff514a3a34f33fdb10f720393cb5f1de33e15093641607359f721c6da47f441ca8f114dc296700e24c33138a38d3a240633222328ad4e1244e2592e6f1bb92a66b8a07f8a222104290094beffae3bf9fdea269749d153a9850b1a3c5442c8751ad88be104d98e06492e643eaf14aac550cde8109e95b960a5d82c9890a2694b6f57981a37a4fe3d0ab5695fb9a9cfaf8843323431e2c6602bb356e92b25e4d4ec9d90d32c6cbbd0f7fe6bca2753f1e02cb3caab099ec4d19f0361d72eb2803719123ab3e9170be8956f322601fc5a7fc487791e2eb3f9db8a2f160ca030879d7e1f6063788e37ad6e71851c4d8b50b5d8260735a907aea472a13a2d89893f2da42ac88ae1ba8646096d2e5415e81caaf1f83c9781842a57e2c098e5f2a4f110129d3bd12a8242dceec9f37560fb06859665e0edbe11b71a5ff4f7d9e269e46d50de81e05dcdb196a6ef9d2837ac556f50d5bade69959b1573a51eb461c0626de757625e81851d9db845f414a1e3538fa6b0931388fa1f72a53bd61c7791b1385e6ea6f39f91cc18ac35bfe2a688460e205e333326278b567d1ee7b92dc41af53d8d1448bed907300b25c8394e837713464762e7480427eb84b719358a41e5cd0d1b7605e645150d5b7fd5c2a2bc2ec7a1d4e8d7f8793a59416c343596f05ae7548092d21fbd40d627aaaf24a91bb351b86b8caa3d6e0ec83da6ff645abac16c9d2330557229ceb4f40e1e086b894dda1376170920cbe95ffece4367dd8561836d6e1a39e67108ce4c13e916f1ec458a3b5b529ba77814460e4ac8e9283b83554ec81724847d364db621daf5422ee388b7840209dc5dd7a6f584569041c26f09c799eebf5335a058bba0b74e66356ffd0f57f2fac76379a739e2b50432046dc8614a68b15b828d18e1f849c866eb3110cc3ee9176f70447064ceacee03e7c5baa2414da2a44a47b4b391580c493671ea75a0ae08dc6d7e2afeaf05f6ba55be0614e7653c37771455b6d4acc1170076b292e40a74164370fc8ded86c36135a1d53fa477241bef3d2374270c90d9308991ac74c50326d8620f9bf0f8feff6eb64eaae14d05589c094574f3412196aef2af4ab7a75e13169c8aaf1f224e9dea459add04ad85f764c2e43ea1141b5662f933f415782de5e4659652e4ce5c429096e06077604cff31ae275b974a272134e64632f6ff17a429075b0aa6c2d0f648f149bca02e0378ea1737523faeec000c000f8dc205c559cfc80062cec751c1fa9dfd78e9de526a77433bab000713fad290b78ce152df0cbdf1aedfc2a587ac8ee3231cb93ae0dec07b5cef411c43186ede65b8bcae0cc3dbc98c0beb241bbeed0be330770856dbac06c2a56cb62561c8324297b9e1f488119ac36db10cb500fd5d663d8d115b6a252e9455e89d60ddc8d476b341b2406247aa7a8d7d24fc78a720d4cb621d98921339fb871d999d94570b2894bdea985a6543daf4b5359930d49e55605ef4b55b5c701ec47372848f5b2180c09351a37653ab0b29c30733306a1d0f86e95d59cde91b269352efbcd5bd5ca7c12daf0ac0f92a34b40d62737e53e62dc46b212cf1a2823a7d22daee6e6605c51ff1cc7440400a7d1efd0e01247541d5a24c08d8ce6fec83094bf9c1633d63016049708afd0e910feef9d2842aba7530a9f4da026c39a328bf3515debb29c0840e9c62f4ff4d0912ac6b78a59608cc6560cc5f54d4e6ed522748f5ec7e146276b0516b594ee3b8ade1bac60b72498c9c503a5f760d601329caed6394b4e592fecfd25362f3bae709144e855ec664feffffa7a1101f8d5cd42f8a257e66849844f286e2b6f5b8dd4ecd8f7c4898416ab3f77ceec91357127cde8904519cd8bc71a1d5dffe5cc7e4a394e5756ff2c818e3c01f0e49f0a57b486050c8b65ccb46ad652714e130ce4230f2b8367bdbe14fb5e0fac939be5ee1613c493954b0447d1fc4e447087ab4401e6e7089155c745951e173e741866c8aeefada1ed49f2cabf04874411a42632695917534e57b697ce04bf42f084fb6bf18236d41dd316916477940cac08ec23cbce12fff9242a8018aa4e46a372124c7073e6968186fe4064ddeaeaaa268b9c9bce807b4c5b919307676ab6075049eece2d3365c2c6085c52aff27a867d73017bd2e631925e7a550cd48b1d96b010c74d26a3ce5c20d359a0564148db7e40f6ce63aacf85bd432abb6a35d9dc11f56a8fe8ce2ca827cdacc0696db213c953e115f944b170e88a9875a0e19731e6765d08fc092d513b75da4571ce62c9bf4a64e51c4a63ee70cf32de1114d252adf1f34ac8fb4cc1ec6a76a1d7e9b767f092d6ae45227378d67f6e572345f798e916d1b7e80ae784aaf9f66834564c68edbbcaf3fc735c9aaa19cf63500b838f28538cf2c1be9a1407c2cdfaef8a8e670723c638bab37bbe3c3ccaa53fcc02afdc26696dfe8cd0fa835381fc91fce9cced693cfef8497d6e2d36e47f4b1df165850e0b9bf70c38929e0aa6cfa4240b15010ab3b94dcbce24fdc69163fa57ec5ab378f7ff33a31d96b876a0f69ea65ed9d266aefa13a0ea7d1e3a75f5d6203009d7f5a32a4ce80c517315f50409ea5175e23ba323f27f5ec11f20f6a7670d88dd6312818f9b51916d5e77376a4e768f93a0c824e962ad97bb710897eb1556334ff55e37b1b7662934cb08dcbbf4c1659daebaa89cdcb221a6a46fde4369b0ebfc0f172a13199c50625949595b9551700e5c7192c0d923892d29b53e52ec940f4c00fbdd364a7a935079b741dba8ad4b604a9b97e7d0884aa981773c7c168609da8b6ac58dc2776ea9bce10abe974b342df9871c946b46c2c64c246d216ffd8801fef277ac0a193eb893452866e9a1d6e1d9c29538f1e59dedda5b25056160f66cec1167f389d6a0078d522f872847b0067bdc96681cfb48aacc7a087a8366d165c3461b06ea462f310ba69471dbb33c164043a48444ee3f67930f9c035e55a5a7250f055873de38bfaea0dbc96c6af79bd786241ff2350ebebe9a34324ae3ef8b81eabb6aef1558fde6df89f062d55f019222a9bdad76130aaf988589e1681b9d5a57b1a094721c8634c103894798fed21087a9cfef1808f5f688f47cba78b6572ed46cbc0c7adfe328e3fce6931c43a7d343b8e93f914ceb23f9f57d2e8c5c436fff60ffcf962f8f33b6cabacdd5b9dd4ae53b7c07885b64a85a2d2dc61959dcae2712fe566a8804d5c7f158606bedfce7cac60aef53a0fd0427ffe109b64bad59ea172a295e85ce8f85f551f3354c814a82dd085f89da1eb7e1e24971d9be1003c6c225c0e88556d17f6b39eec851f4e3abd516c0915334442678b986fa0dbf3c3bc853a5af23384c12b762bb9b9ae243846298bb10a8f8295427d3c1add70553b78e565008cbed4ffe6e8f023583b3cacafa10b77e47b4e809740aba5b867cfad88880488c0be06d80f4f12b1ca8f419de00114e40cc0500a4e1d0c989b8a0820d4b7407bf5fac1558ff4bcec7872d914c091cd7fe8262f3b4f5c877ced9fa99c43b94160923bae7d4c1f145ac8abac1839995fd0e174941b824546d8166f5929bfd82ebf014975582f184285230463b13260f25f607426b3cf206e347ec2c1d0305a2f21a9ecbdee20266ff5f243a6e7942facb5cbec8e0a1f342a188d6088987c886e0cf2ec2e480892c3309b311cc3454eb8598ba5732858caa00dab10578a8caa100b4410716dcda565c088966e4c2e053cd309677e16642af89a409bd6ac480840a307212e6559a47e2d1f3a448b379c61acacf957db299c5b48b4caac0898e9245ea3e80c3992da35fdcae44486495a4e6bdb25a57f9168f19e6f6382a66597e4c3812ab4f0628eb3baf05e19474a882c9800b1100b83d5e124d92eff8c9558a95a07b2ce92b0071febf86e69d6246e22bb82664286e62c54625af5ccc412759bac9e470128638ea2194cdddd39bd54595dc90ce0f8a4b671e15b7e9056c236e140aeb0f5b8656b64cb53721c7aff82f8053d6b956aa4b861284292f4488fe2a49ea0b6534d9de68c8975f7cfa1d03f283c464a06e2ce7d4bbf79f9a0a460c30b4fda21c3ecf34743dc1a329db41ad511894c73de6b0a4c582f667b3b721c1f3fdac6b9ec9f4fd5b04aaaed2fbdc48ada74b7acc30a406cafff73e06db8ad3f67c7cb45776d99d9fc5d8dee2cc3b6a7ac85efbe5ec958267ab707efe080fa6bac9f508f0b5fb99b4e9d2cfe3dcfd873ae455c7156af3ac2dee0897139d1ebea36e9bf5d517b9863cf91ede40ae81238093b668c53c4cf880501632f23b468062c2d7f78f1cb1c79a6c1396a3a164c3ce4f076d9ff11fdbf17a2fcee442f5905b6f4f8a892572e24fdb5795675616ec968eaf21eff9dadb13b4bbc79444da630fec492b4dc25b7aef9f6137165d26025bcb34424fe71c8a49a850b97cc1338cf2928b56679409d5dc40b7183b0700a980ad3d2b3a29334e15cd7510f848bf52a62a5c9840eadca7a867cf954fe44546c77d00693930ddbb0a8caf6aa13bcc688cfc536d74675244c66d215abf85427e72d34478b7ae7a358a6e5623022ae9333980f6427c6a1951d8d942c5145aa69535486fc64ff27762380b0fe69586a4571e60bbc3c39390433234aa50f8e4e04f6134f8fe6c9d73b575bb3301c5ef7c28be142a4dd454358d84f7ceaab7b46de19931667d981feda3d62776113db5df4c9b03b85d492c97b5139b362edb39ce103fc63ec05cea53a1dba83fa1478a5c2727c7ec8e7c9d254e90a76759fdf58f4fe75bf863259d3453f8e5f61e8ddd613d06c94d3df9267cbe7ea4e8b87a680fe5026b09d27ca90e2ea04940057b1f8d129a9041083948fc89200c20c6fb11ee94238c099adc8e4f96844a93e289c14e3c65a56e59d78523334755a601da8399c1cd377e28cfbd873ff77268225483031efa813bcf3e5b8f413709ef05931daff261e5ce08c0c7336f8c59436145a57a3ebbbc2fc4f84caf4771a1722edf708faa842f7fc74a3be2b9b5579c1be7d8e2104baeb0d77fd8f19aa9b4c5f9fa0cb75e967d09c0e67bf3a2f50608beb57df9380cd175733f70f4cf31ac51039d52b5832b3702a2001804cfeddcefc629051e1a81ecc424d1b537699bf0b9b813d318bcb515e0c731809474e254d7cedd1ecf3c4d295368b10627de5b4a56a4081e4f6fc6722accf5560156850647352c2b9b11c14f79bb77e454b1f1e1be33d484d820d1e4570fc608f9c94859c495a0abf04f70a7cd9970f02c68f28f670423b7215459d4ec2c1e09ec619ec7b66cd5107d29fdcab58f469a3d87cf7bd7815025d98ed0dc509e77e937941ae8b32734197055ab30c8095342f6830b6f8637f4416f44d9532ac37e1789f52f354161480798371b728ba4419af5df18b309848a9a30fad5e1e1576b1541f95e25d7877b6b5362c0f866cc7bf2aa1089eeb8138db0ed3558f11ab6f9830e152a42ec1658c5104d2e4af00e7d0a81bbd18b485177f5f278c5191d6e93c13cdd1604f5aa6a957d7ad5d29dc6cf132b35721100cac409cf29ccc28feab4505cb593f49a902b7ce9603a37e6a1eccce5120e0897ec0c3cf1ecb275d8b7e5c0fc33369a218415bbf291ddd3510c50987dd5e7ea6441bb3ff92628bb8e52a29379da805e50e2a3f31774334d7382850623f5a23efc485b63536a81fc27577538741fe3c97f3860b2c6abcd0eb49104769605cf5ed67c67478f2e70c02a12d8307977d35422e1d67b9e9d2d8f9ab4599a326ab1f2795a597d0ae657901d21360be886f196d29b7f9deddcb748ac58fec187a91c726b7ecc445526c8f4571f293b4fa1a0fa14b1c6ca52cf0ce2501b6e9d1455416703361a5e0c6427558e492c3f1d6c84065fc136616bf890b52c68137d56d3d338f73cde2a8f22f54c295bb997e05bfd341a4668f387ede56997db97e2cdc94460bddf723a6bf7d5409ea35bc626e47f1bdabdb91135136d5838c2668df78a1796adba90fe013729cb74dc7d6a5f8aac2627a3b11af21dbb0975c909bf52babf236d4a94e60d8585553253b8c508d2e6db7774dba15d413105d55bfbf76dbfcd9f630c0892ef475a666da578869141d1b450bdb314c54271d5edf7b7d6b72da573356b668505112b877d4e472fb74bdf3929eab215c875ffe21638b7ddbd78e9474b05392d0d576b30e7aa9f10b97571e289987304e5702dc2f47b866cef260b741a55fb0b56aebbeb43670aea36432c38f62350629ab5ade0ef5cae04cab97e8229da16908f7b701ef6fff51cac3980b4d637d4cf56aad2d48d389955eea7d51a000e266d06323a54a8e1f81899ccf1eec0329aaba7e44f0654bbc2a0b9758174237ea4e159877d24af998e6e7d72023f4a9ffc781ce6750ebc42d4a5c9a716591a881cae07dfbaf79193229ec5dd342ebbfc94c51425d7564a6a29b57db106114bc6f8238faf7655e56b5f2a01430a55bac4de033c270865758e4c506437d3353db7b1d25f7b21b8119e8e80ce57f71cbd8542c2e36e6ab4d44bb7171b8ff04d66e6f44af5c75fa6bc894b437b807d1c4aba5d84a86080ecdd1ee479f23dffc26db119edf11882aa3cd81fe297611ebcd8d0a8b8f9b1ed45f6747ee986d6642ca8c2ad4bcff33d2b18e776deb05e5e76ee649ed065b70288b6e8c0f647cd9ff4ae7818d4e0cbe1b1e753ea9844fcbee2f1e2ba7b6af4530da4e86510c3a835a2f56e0729e21702c71e89d5bfc3b0b28999d7861a87fe714d370fd5d978eab7cff400d2ab327922e32515e2b5cb0ecbc33cbf8c2e2b49cfdff3ab9da0d5f988c450dd15e96046c48ea1747c0ab98b7d2851172736e34ad13e4158171769793b38624f4b64da246a320a221c3f1dab59418d5b01c54e9627d0c6a1ecadb1de4194cef3ed9e2e768665c5ab3db365e2b28738078649aba0264ff9f598c43d9d3e51ed577705cbd19ba26a7c7b1830c64b61f7b93f34a8ed7ef431ef85fb7b3a840853e6622c40ba3c707f123ecdfcca767a22dc9726b4f2747624dc3ed3e93aa510892d49821b94cb486a0903553863b6286fde18906e43b93e49684dbe06122412f3a897a7bae5daa2c1cd634e62269d05255a5df22355bfc4f6001d4a5055837829c4d6fdbd41dd07fcdbd90a08879d98f9cdb1dc72aceaa2d12037e9667945c8a21e81f4812d64f091c0df289a0b3a4c4394ceafdabdec405165281ba701ed7ce312133ca50ce4e526f8d01aa535e5a7996c0efcda0d17260d3b6861a063dd1d635c15369764ff6e02f06660a87c422371affd43ef1f0dec5b1f735bc123b722b9391262e6d9f6e3dc541c8b1252b25842dd0405986832dbc18dc35aa7d5ee154b55655201b06dff19703d0a816dc8beb37fcdb2547d28acd702f2fec2def47d901db874769ce71820f1726f6401f7bf1a04c4eaa1d241b8121b6ca880c35cb43e1e765ac3f3d4b7a944471a38d3c1d20d18541f0eec3085f933aaf88017a9619bc419756869d96618d5159b8e47a9aff30725b00a4f57af02f8285f3f304cfe3fab2c44d243479bd6407883c2c221a1626da45e1250399ba5b58f5d2cc1d9f2a0202949a034b1d18802ea3374f7cc4ee1c84a79b5b358c478082a72c730b2e743ef9b1440929aaf9498e55b234d0c10e783927372cd27c1f07c94209d016a34c155ec053201847e927ee43b3c36639fea3c170bc822490c856f56f72cb882737effb6cd02f5e1c6f82171845e485534706e428324471f1ccd7ced56d4ca7e1bf34965ac21e445213c2d27a6d7f773770086af8a15a02c6b3f11b1d053bbdfa6b4df83531d512115d4fe512357c820e01101a8712ab1f38030ba6ee3f801099c3a0e9a3263b1080d6921887a4c3ef008388bd7e8c210f6f468f35f12503e8e75096314ca73a86c805f13581c23d06347dd71b8418a31c9203e491cdbead8f0c999897dabfb9bb1072d502aa98d00ed37765fc42bd1a8cc9c372822b12644c2f270ce4f273a1f881a6a749a72d655104f99a285f836ca83e0da1d0b32a116678805be03ecdd8854328cdd0238ae515f08cde66847282b81669d9420c0d9d26102eee5366d447aa7d80b160c4b536a3beb79980599344047c5f82a1dfc3eed41fb92c051290d6af5837b9c032b842439703333c85ed9ad3967804b5d355eeb8cca77cbee90a6edbfbd44fba169bef3ca3f71463b1886d6f8c3bc74691ca8319408248459349f5778edfda14186427d8091ba4bd846da31e8731341cc02a9741a3d1f763b95555cb3be1c297df1dd15df2f74c11a7a32629afe0b1fe097e11761c1df1e00337741f28616e0b14cdd51485147229c132dcd82bd2a7b614cdd901d3ed9d8418f63cbb7de748385e7d1b45ebf980cb7b23af72248f7f0a881fd72af1c96516a19a93e663fbb7e566348a384b2edcc07d7d8641c19d9fc30e7cf3389e39b060452c63ea022623dcd4fa0c34ce3cf0cf6e48488b2b8671a94ded157501c6e728adb3930d81eff4e34fd788839caa22c2f78ddf9989d25b83ee79252743f7703780370b9808df93c37fd4e76bdc00dc60bf5332b30407c71b98290b978b55b45567c1b3d3c17c66440df80f35b7c785706fa22920c4af1c37f404af0d02671b490a577305d251d62da14ce928548684bbae82ac2af051c2a0a912f9d0d0b50edd1004337763e34c48e2d65d8edcc5430925fca317b076211e605bd22a1cc7f3d722cddb729dbc2e5b79a054ad760c29217b17f6302ea5a178c1e820610e263300e7bc533ca763e52f0db2b4cf4be49ecd59dc8ebd8f66aa7873c0cdbed059372008d8831daa60da8c4712673a82d40ad367515106fe41a4e41febbf8987e866ff2c29535fce3c7439cfca53364465d6fc4c802852a1bff7856c72e00a5e5c2764fcb8ac493a7e1a004ce2620db91d6810b171fbeba0670b23035c16897b3be4191f8c742217ae36a767607b05088729d73d2bb31724c248868bb14b4d061004e43ead95338c542ff7c74e85685a28811999b6361f55561775ad79669f2860ef8e0124f5c4c2f96db814b36a7cd68ad99d6c1a6e4b5aaedeb911bd4fc708b50cdf0ff87e1ce12458b2f898118aa534972c5f5f42e25c4f061a5e85ee0dd096c59e11311685105e58ac190462d9eeae258e1a8e992e82c3f8603dd72bb8a58c8195aed8a745772ed5701fff45b3da81e98b44af5d75f5911b5355bdee12b11ea98a8ff418a53f1c37c4b392a25e91344dea85c87500dc41d6bb4f3e1f611cd4a3465c8d51ed90b0e6717dc361233a4fb77587e3c917605b935fd262a6ee0e36d891bcac3a6591734a3f249c6a4afd5a91f2ef074101a968b90887326b01aecdb0325757bb556beccbf55125a51b03de422a683dc508def0b07e15b556e2242094f3d699bc0445a4d25dab65fbde746332e5988c3d722779df8926f450d899b7ea9ae17725bb4821c53ddb6452da786fc9eb27fc9188ad8db0f15ff53f2c351b1bf01ffbdec29ced0e5e882a9458358c6f03be95a99298b38a7d6ac20d271fd390bd392ccf61689013885bc0a7a0d6418cf705606dd81074d5f7ef63a00e8067b0c9d612e1e0d4903e82fb2d75fa8116888da364c6a13c56fa2595dee22c7f60e2db9fb6fa860a77f6161279e4ae5f94cb8e41a99a3744e35fcf053db9c8454590bd3c1f039c2fcca20a45adde039742bdc18638d3e051a36dbfe7880f29f99e21355455e56a6e18ac273ecf4a4251a9c7f01b1857e58b1d8cbce2c5cb98c4f4fd0c8f618638ede27b35a5ea0fb4b74f4fe1a751108e19d9258d9efed55dcecd8c0a974ad04ed4b277fc2103179eeebebf5dd3ece422235f9efbc43a15c03eb435f61118aaf34c1008435b24494b217e7d2c47f0bdebd33861cefc8273093c2e6399a8d4fb717d8596d4fb548d027615f316aa65822f4febd4ceedddd77ff2c57bbc0285ad0e8e988975a89ccb0a150d87e3a4541b37bf0061c24053296b8600e625c733a713a7d249ef0a02ebac27eea35adfc46f4b4cff6f749cec511520670c9da0e6d1c8f2ba3e0aca91d630d43eae4500bd68b21e7165aaaab137c5e98355eb35a7137494d8d18d904e72de4387106ab247edb65cdead2d12a9c3c308db2ad92d7d5560b8b468420343a8fd9d5030919b6be79d2eccaec57bdcde56a6f8f12d30717fd584d76defcc7761d70922788463303cb0bdc5d0398d536ec8eb6014b0e88a791920c8465d93f283b2b0844f0ab39fd53731507b53f1155c5ffe9df92afad02b74b50f5d54ffbdf7d7bafe1dea33be9a7ab2f617d94f2a916408370a63114b7e306b35189cb8dfa68e4e184bed8a9773c0663d0c944e9bf41e30b4ad22d304589469c1e1fc6760771f945b3fdb6032495378b0c34c976f6cd79f9e4c31e802a3e7d83b1f3db44951d1b54e627c5f9502790ed4a2c9d2aee3d57c7c4e56f94d4572df2b392746a11eedd97a1c972dca887b513312d2a6614062f0d71b5aaeee287da71a9982c670c5bb2765d6f672d9c1a168547c31bb8f6bc423361b04aeec324f5890a616dbbe2e83c899f65fd7c897327bbf46acba404b433c21b61ea24f4d321913c8ab2e94418de49ee69b03a1f178b4fdda0c4b7cca296420546e3120606c122d670866f9e620a2fa0c72a06cb6b939959e18154ccfbcc2bc5dbe046652466c65ebf62cf605862a37d2ab532fd03e320ffc9ac1b743467f7c39d4c2290d084f43bd3d28928605a5dc9f10c6f4264fc8f45b58f6c60c0dc2e95078147178fae25043a501d551e63b72da67a1c2a03322ca221c5d80135ab4890a74a2477b644e13e6f660c74e711380ed798ba226346a1cbbac9eed40747ce7d08f13b2fe8dba150ef7ec7166ed568e3f0e2d9aa098c56f8dd060157ca54488089010bbe9be4fdc24714eda7fa42b2538ee2fb5f6a85d4d00524b01ad3331f61c404069243f35f28e2c2d0a82dcbbcc40e038f811ac5a3d7cf908b8bc676db872674cc4985893dfb6f0320a58de2d0bbfadf06dd7ece4c8698c3f429289205674cddbd42b519129028505e1e7f2aa6a1d1d011b31af21742fd497a815e17158883996a2c671595adcb24d97195f5a72c2f8100a073f3ccc3699b9f12fb6894718742435520110f9ab40b235d56f64aa1706c84342e25b55e7a24d25c75290ab8b472f95b549e18fd7f8dec20268f19a820fcecdc8e1a799a8b9fa4dc5fbad0a49775ccbd991f2a3c89f76468a9328cb6cdacdb08384471fe2a4686f10fa08eebacf55dea4216bbde50025ca543832c43e306bf55a12636ffe2c40969297cade4616c2d60040756698e29154489f360d5ed950a334d5251262192ac732191b6355134abcd4383824490c62ef4e0f5d2f369d25c2fb13b38f7833cd0cd8ca22044f8f9697084fdb825e4741a04ed2cfb12c44925b9615356ea742d26c6cf008499c524e6f83ce8605405bd671302eb31baa953e74ed23d438560de0f0d7d4f4baa424194c2ffd63375710c869dc6c31f61759d218e884b774ef5da09effbe0fe0cfcd9f37f323979f0b2ebf903bd373c9db58f54c6f8208aad9faba80cdf5814286148937b7894dc5c57c65ef33ad9e1c5e5a501a6a63ec627cacd59e29c371682fc37f556378ab32ebc35f8dad40dd7807278b89c1708d25403b99fefc6e07db34a02898e036d96de7cb587392d6566340864da15cf1137a8d6eb0aa2c3f6d22fb742d08140b00fe1f5cf6a7c8b5316771413e6b232ea6eacb0ebfaaa37ec8c5ee0635ade841486efd3ee1333925970c001e07eeff6e6cfc62e371044773434d7320e990441fd844e738c21ecb70b0d956e65033d6fb9038bab56bc202660341f488f1b811ecd9084714417168dda356db60c040921b38263b4c58ecbb9e3329d807f42d35f1724384980533f7b3990bf756001f19178d4f4e70de885a64f98e87659bf89a76cc7c068db76c603bb981138eb8d85537b63a59e8a5a0c6007df6696a8d2026c20e3b35bafe258bbd2c3f95d28f712cc2db6fc67d563be9bae8ece6de72adc31f610879e98365608019cde7e82df488022677fbf79962aad962f56688f4a858d3ed6c3ae0ee34c7cea9b46f983b68503dbdd9621e151cf1a7129b5131b918cd27d9eee068e69aa8ed037b97ac61d66cbcc81d61b97371a66a21650fa169050a634e17d34913a0eb2651aac6ea4645c3c770cc62925a69b26bb7db08a0ad77f6cf736d7b4b1e4d78c1b8ca631c93bd3fa5dc6dcc6f730dfbf2fa86a4f62d777bb3717a4136afaa37066262d808ef47c7a03688071966646a4715ed4c6a900c80566fc68bd16dbd103d77fa8c7703e944fea3a57b58da76e7b12e9966c67e3fee0196d7c2e50190ecad1e1ae73077ad9c084d4d90f3784c5b796e105cd0a117abfc0e374f3a122bb19f804b51fdf29bb8065c07aeb4e7edace8fcdc94519e9ca08ffe6e98984994495bc51432a41cba8040f85c3d61cf61c4440184781020d6b5028e0207c74ed59a2914fef2ee9e12dcfd47d3a5c3dab189d5a4916ed7cdced39ce87d038ec8f68e519590f9a320abb58774f44ea2aee4e5e50e8ae06c4d8be0a63167f3b760fd0c1a7252b08b498ef124a547a0c6f302bfba66f735984915c56894464108bdf4fbced0cc7d6dc2c27a1d035504f65214fe9dd561d52369756b2a37a4544a88e245b3da87c913324f36bab5a5e0fc72218cd6834f28d554b2b9344208944468d0d111b50afd43423e0f42e3bf9d9efd3150ad97499676b3d496cddefb69c006c587328cdd7fc69a96ecffb72ca4a5984d326a39d787cd2de4ec3f33043b8409c94f5d8589b964e15fb43757735cd8ed7b1a54938263a36be8a2d068ab725a1ae411d9c89511e4c0a15133eb1c2c01a4c5f0b4cad192c014eba0c9a5787608e11fb5ef7e89f110de65aa3b9cb07ee665339cd2094d7cecd1f2ce7214f4b056058123e7cfeec0aee4b2a79691b6b951d7cc07f6767c89ef4a071412daa6860e2f134409e24ae6877991308ef4b64408a298176839e8229026315af2221661f606dcfe9ce028cb6346092d69ea3889d36f9fb56f7b19ad980e79885b12cdaad833e43aeaf00dd70af22286709dc5ef7ce6eaca55649694d0a9e58693d252c77a5d33e1393b83724326e424eb35e4dec9ae803c601be73dfda0803ce28b2d22a42dd2d9d2e91104d78a58ed22d91ebe847069f5d9c99412ea9a4f929265e721204ac80cfd2140f58fc585ca5cb2faf873d3aedb089525795e405c71ea87072eb55e1d60020b96ad318074a3e3e800f25f8056d834a823dc203aaebf311a15b02a0ed9bf28d09d9485622b61fda2b8150f1e69d3a62916a2f92f4d66b0459a0f48040510b898dd125514b4eaf308abc94d56f0b3a7418433b1c7424caf311db2d7e8a93bfa8add90673d17280d446077dfd0f1627d18f7f710ab945b750526039f61cb2736cf257484865a02927b5f858e3377c770d5f656de834b794cea3d69671875beb48e3d287497875fccd8315d222787cacaa10ab8e2f670907a08eb4cf9b5aee7bbf0ae12ff17a52901805d6563562b53d1a3b985e5ad09874886b7141bdf7f8a951dfe9cedafbd477a9e6b0719656a4acf048e25af502146fe8d2a2a963eee90883cb82d0506d6a17f58e4aa0bff4d970aeb0e000886bdb5e444caf4317b06dfdd76612c10c5f81f57d64fb502cada23cb81c37eb8f7e7bc42d422dbb63ecc60dcf28303d7932ba94c413492c66e1bd459ed3408864ca6435f64b748eb2e4afbccd9a5191f197827a4c11ba81f941893fe58e9043b2d0332841d13a19af48799f75250d6b3fee681a87d8d5fd5e4d84900ea6bdc9f410471f927bd4f89388b20a3860ba25aeb7e9fa09e111faf0563dca8ca41f67a31b4e806a93dbb81a15f7a199c5ee5db884769d44b305076a0c1363e21f3bc94a41880f3cb1c4c49d70a8da1bdd107ff7c49c88bad715af25cfb3d0a160a94b5433a1f07b7e169ab8394438211ed708e708ca20fec5ca6ebe217db53d20de8a4b621ae8b92147c6d4d068206bf3989500b19e1a62f799a29d920f7637d841f2aa4d516c7873dec58dc673473f03eb80cf6f76b999e519f73ea1b78803ef7a10fb65f3d03bbe52134d9bf4012cb82668cd82e2a30636b1e93bd1248f33defd61b93c60d87599383c9eb168e2b798ffc965ac704b2a34f7d4ff90c4e04a3f42615e3126d9a87d07adebb75060621ede0f324c9e36989862670461272fa988cf9c7504b44866d236e3df0e390eaec227c6bdd3cae9b3a977fbe4e2b9c1f4341b7f7807a7c913514c7ac3369142102b837c52d284d91e10af200b65fb4b9cd9ac86e1ba7fc04042bedf42c0e7af18a3778cbbe96a793a468e50029b6a2115d1f94f4cad8ac2705f148dd82daaaa3ac25a943358da6e8ab38c2844d394e6f1c598451351774415ded402eded58c7e920c31f63d1631da1f02f055caefa11a32cffe4c036b3c9c37a83eb1e70809cc617378ac7c3830af284fd73b49e1815cc6096baedcddec7eb9a8a82c467a07d344e3e62c9afb8cb0eda5dffd7215d77b0090343f6a736c300b77e868a2336fdd61e3e34040672b25978f7065ec958cc009ebbfc75237a4fa569d642da43c2a30e0fbd7ae1685f6564d92f2396069867309a2760e3f317d23c2a08642f49c1f14eab32a3fc35cd58a3838cd427597afdc273ec0dbd768ddf5760ab571395b35d3a79444bbf0f4b10b80086948d429ee438c4604f8c2e4aeb69b6258801b8256b43e258dea4456701f4c8a2f1324262aef6042ac2ba9add6af5831d938441869fed7ee6e946889fc0fc447856a0e974d29cabb1f3d34cc3f28d6fe9f61592555fa9c784d8003953b2312c6d4163a833e39f238c5f60a48cf683c5112c305b204f0b34a9377be8317a25b8f85e04ff2e5670141061dd42970b9b3b29a25eec55d2744eda941415a77d6ca2bfe8df6ed2afb1f5e4a7c3977096163aa9f51bc6948e978e7f5a6332242058421a9e8d67af53c7318f9d9e23b81a973c0890d18a3ad7c76c2e16e3ce46278b4f9edb898a42e7326f6 +Output = 5565f039b204952c84fdf78f8b0cf902 + +Len = 86520 +Msg = acdb9ba02f57523b61fdec0b5d0dfa69e3cff00ea2cd87deb73f5f0571c7e945575e848e6c8ee6d0b1e3be0dec9c97b2a8a500277dcaeaa5912551485fd81f65b7024d1d06eb4b32d882a21a9b0ad852a61093f57aa0028d47b87929b2fd5bb0d5ad3d7487d5480adec4df5af3bf82f2e5f6f3a021b7973fe0e21ed1f19d67ceb8489dbc77b4a700cc8fbff47b2360396e41664ffa77716264898a67a41f096868bcb51c5cef2ebba9cd8810bb9e39d048d7352a8e49579fdc97031453ed0a26eeefcdbdc0f0a6e47d6583d83c99d45e7ba2a85a6493129e4ff3d200876e31af51cb2dc72a1ed622513ff872857afa8c1088060704be6b06c5853f52c70a48ac99371d6123e1881e2c432f061fab73020e739958f7332780463591339c2915c4cf1ae4b332a1828016596fbd909207677d4aa776c45911b3dbeb12ca8d3362a0fa5ecbe6dfc68def176902be62997e6466f57989f397f0488b8f08402290f5e722ea1a22b2b87113385b2e321c279fa0d05b57b80d578be65f09bcbce3a996424fa6198e34e0f69580173c4147a333c4c366882b9900ab365d41766759e40f598a7a0f53eca4e41df88574126a77027747fd560b1ffa18df8f207e680baa27d3da4e4698626d0252a68e1dce0d0ad4626508078027ac9a8afd8c1be88164a559480a04861fa419dd9418809cb9c4712c2470e4b13a80f9dfae6e960f44785292db969245aaaff165ca0ce6a5f40da17e8d1b35c7dfddfc85aaaf3704db50f6279bda38fc8bf852934e539511494d2b00a6f242e99f2b6d25f93546f0ce5259bf90bf3dd44be5040f2ad3d6073decd85979dd524001d31266a4ea0bfaa6e84203c32bebf471e0ce806676f0af5a5270320ec5aff48d3bb3f1b1b5ce4bea797a9a3b07888485507a8f08232d3227e8bb326b909f2ccbcc1a6d2b7dd60a226cca2e003c5dae109dcee31ac2d3b82c1480029a286b1044ee0e83172c6c60d72bf8641bb1b298992e9325a33a2b68f23f8949a3735bc97f0a56db7fa9d8758f1dcce6934dcf6aa86d90fcac757d6b00d29cb08c5bb67f0486bb1c6adc6270d5aa105c70fafb4dc5c18f113c5a11e9de3382df5fc7c6595ccc05efe1ad527a2e3a8a6dbb9f7f697992560b5bd12e0915cc037d249ed1800e42fcfbeb04efba243503c27b23a3e54b49af9311c21df32c04e632e1ca201ca25267e990c982593e044403b870afe9c44c6051671527d0ab42f5a8a032fb54a1631060d8e4537e050d12d77a6deb9f6a0431ec64b292c81bf0f68468bea95092dcbd09cc3daa52ffb938e6ca029f2dc8d9ec0d1182a6020375b27142567439fd27378c73bdcffdb6707cd9af1712bb6334575b746bada7eb39f11534e2a2376aab4690d64a09a6b29ba85832948d72c57b3c7f9856edde5ba47a18494a7c7162d0b1bdfbcda27579a0820a5a61587975186120822cafd0dc1e172386764a106cfe42bcec2fe09395e9d3982f67bbf9fb718ee73cd33ba4f50f8edef54f543b119dbf35b1560c288edc62a9b98cfe1ae0f08d7bcd35d9832fdfa8f09dbbe11bd815f1cf502c6d5beae3f9e601b96803abfb25863d39d19511f62d0286a33bd849cfa033d3984d5533655ef70ed742dde4fc1dad94c66a0123bce5bbb9f0a899ec3194094181f23ef0ca5a83e8ccd4cf135a3e9adbc6eef0ed9a98c43d8871864aa494f8a3d1a53daa79b53298826602c17d50f51a20a389f8f60dc41a55dec8ea916aa8006fae7ae8dc37ae25df409e75cd1b6557bcd2f5cb390d64593e3687545edcc26043551e325aa89c97cdaacab8b266939c82c25beecc604c012ac3ea1175b3eecc35e251105bcfa7f733ebae1194fb27f05abde4ea15ce231a03cb1aa83cb6d34a2d9c3a0b4775754cf84c7308dba0c85c2c09b8467e1f91adb0973fa11daf1ae513cd02aa8762ae9e06154125ef1e1ee6e0effe8a6e1a40c0196f80857e646aa2cfbbd076815efbf5448e3ff1383cd2995eb7df3f4d88d55e269a05dbc99f6c8b49aecdf69e31045a9afe96f31fc48c7a8ea982ec8231fb8cbf62f72b6526c8a76af021b246a270d4f0af6db30a7cf393580d101977dd5854cc0d7efebac125fe18c8f332e27be76c2ee7edba622eb0eba52ab04e935494bd35e4c1da303a2b993c7d6bffd88213293def3e8f90a06b8a5b498b143e5d58cfe22fe94a2f58837fbf58b3a092809913030f87bbfa9bcb7964b2c8f2e0c24c93bb361dd31fe2d5b887a1f09d763c2432698ef1c40ae678bfa6ad9071e1491710a94086ff68a1c84d7ea04d7fee805a8f57b6a334274b1b640b820b17aabb614f92974b55725d05458b9cf0cc6112e331b6cdc592b8905c717a78606fa1dfd4566081965da6dd34a895df010f37bb68206c1c8167277ee2eddad8b8fe2f7f162ff9478ca06aebfc7f86afa9cdd743916563ebfd3adbdd56e015ea3a4ebc61cfe2473157a5274d05d145550f90ab720507818261933c755f5212f60fe6b14ea87530861ff446ccf8a6ba195ddf1a106d0eb028d6fab20da64cb9445e4e740e48f29e900b162d307d06cd42b8438ce47083d72684f8a56fd2d5f21c500f6f6959607895449246413bfa661a4a4369b7b76ddec492147d618cf6a5c50db0092780c8a6def2f0f8c7db896de73b671a51e9d4ac4a28d7a2ac7cb6ba88bcb9a90f67310fb33bb9aa8904bccaf2b337057aafc02b0070c87d18491d19ad85b2b9ebb6a39d5b4a74c6505f9a6583d93c93fab13a422e8f6f746c9c33ab7c9124a0811527372045a9b3e4942b26e1d5fd2c989649d91bb054f0721c01563c0897c6992ac3c54855e1d90d4a77f656d002391d07f6d910f9005af0728e0337129193fda081301ca1a2a0932987bb28f2d42052ab48285592fa18af45e29bb3d59c6f741d695ee45277703ddb625fa062fa4bfc2b47af32a4ca94773e0604f97c3fc2c5498238e88fe5b1d40510c80649fc20e62efb56ef57f9340f050128512d03f4b9ced4a66f8176cb21529ae0a2ce6309d75d6d06d3d20e624141dbed02106e6d18516791c34fb126e967078dbb1ab66d9660a4a5273e9185d39a9d3d564f0a95aa7d44df2a221e2af7ef5fb99b547db4ecdea81c33c20a048eba4eff930f5fd536f7727aed2246401290aa4b88a54145a17f82543f8702493a46f61b027bf393866af9485476b0ce01f2f12bcb35888a7dec393493b501bb9fe99d78ebb85138607ce233a647e43e8dbe3c41ac2bddea48cdd5a377738dc284494c0096f1fe2d8dd534222dbc6bf67e9c917572afc5cdc9c95f8b32e930c6b30e0b9a4a4c83d9d51ef7fc2ffecc609c33faaf67ebca9bc989ded30d40712ff2e1e02e51f169a3ffff33abf5348fe2ae2c7ed7d10473bd10b55a6350a0d8660a6ad5a5f10938f5d51ff116c7873de67e2e25d5f925489966f4db234330eed1c350f1e573bc76361d273925ec1f5dd3d2e2f8912774d29893ee6afb2d193ad9e43b3cd71f31adcda0be11c0ae23771173f0fef3a31998225e4c0ed3588245e637d5bf633c916424268d83cf53bc140829ff40e4b43d23a090b6d0930a94956182c38172140324a2773c963a2411bb20bbb7c44aa308f978f1d3b6238c77b4b08eb08aeaedb074af5a7252e9694bf4c1f3c2940fb9a1a414494ccb6b26522a3d2342e3b510c0dcb398d7c0c56a91475397c5b8193b31acda60c814531f4d7d6f082193b9c55ae416f914e7b46e0c3d3e706b365274df9734fef09bc4c19237ad07f6a2e053a6154145d1d09fbfe35dea465918a0abd4ef89ea6c67a45246df61e669191004cdf69a44b5816fa33f2fbfe13a66ed27373b41ede380dd1b94fef26e21ff331ef7108abe69040a63483c2608b42620313104c4cffeef5564a21bc867c75c30ea4be97a7a95615a47250b85856f622111ead1795864bbf67598be4b990239efb0f20bd041e09e4696ff25451e1421d80f892aca4fbdeca6959f70e3cc7b9d58b814fef6dbf2c5b59afd10cf9c4b6c2d7337971e7eb38b4f0ddfb7f8c7da905349d748521074dd919948568ac6bb4a08841ba1deabec9ed8267f1ef253c61ac8ac66734ea80eefc1dc077edd660dc3518b5ecf709f10302925a72a3938e7449f2ae707506a67022dab63113242e9dff0d027aa3d22c8462a558165353ee615c009838ac21f281ebd4e8496f024f5a7cd9b9fb9adfcbceac3fd32564e2c6b96139161860b8ff84b590c91957ed2dc22d034ed8429f49323dc64e585edcc1dcd810caa8293828092e92eb39746144458e2e23b9317d3f5fa5dd3c07b78e4a5c4f0c08507c2c068fa55fc1123afb4d652e9efae6fe0618c752e92ebbf593daa8349f61b9c0010578c85bed4c121783917cea1709fed66fd9f37e98fd9f69fd51075f693c9b53cf54f61bc23f9042a15af7a41a9aba5aaf37d6120d452b9d2ce755b081616490aeb4bd23e2754c1901423d416801c6ff41419927ee1b1099d3cbae274cc0c2443e188be8b0759be73dc7ac36a1e78b50e087ab34cdf7e4dc9c8e5f481dc32aeaf7e0f0fecec91649a15bc3183ab4adebe78a8add3f542ef1e190078796f1050156be7aba9fe821bcf68f205aa4e1752cd0cac66584c835664d81255a2ac2f703e50187c0a64b64cd87c2327272f6978036b8dc8260bccea63ac247545bc1678f3d3ab685647b55d7efb577e4277c7ba273e53ba845ba213e33e3dbfa9c64dcefa9fa759d7ce05b8898a96f4434eba7f032c0623b9648f39ab35651b18f35ddc1b5a1436d32230c3c1d3e97071dbc9305ddeafed0e4d1ac4843aa471d86bcd0820adfae7936abee8ee7e57db16477c33fefb56ffcb3fcc1c36f503a9325525bccf3f62535fcf358ed733e91b78b95bf1ae2c014138612ba9890d89ac6ed9ee5ff2b953647f791f1c4599a619df5aefd23419ba9b9cdcc1d4452b3f60d421af594fc2d6013a8f03fc005896bd9552bf3f5a6988f541d7160331f62baeac52f011af03f212d93a6a95d019c1f0e1c8539ee6c574376d7bb09f1617577e3d973af1d923af80a4a1db4f7d8430980ae43458a1d4844969f01911bc35cbb9d016136097cb1531e3edde92ce40ea9e59d0e9d6533fc2137d5dd9c0ebf98e45adf706c6afa32d0ede45fbc68cf6f7eb16b1fa7fc4ad367ef0ea76136b0aa70c1c63988cea52feffddd2bb537f4d606689b2f0babbc7e7700cc17a74031221f565825318108190ed27bba5a26fee2cf6f9f852f10235ddd217076d4a7db601e7cf7bbed3e9d7ecbe0529421924806385b0aea88b5f9e208d5ae7d5fc9fa051cca37761253cfd195cbf44182165ac0efaf4fa7bf09baab9871d873cf43278198b2a9dc577d39a1fad9d33b123fc1a333c0e0451877e02afaaa80f2999fde55f0ca916712f7457079be61f9585af71dd3546f5b5bacf4e0add42a82553ca902d376b09edb7e8dcd80de42f4ab1475911cce3f52cf05835d207347ab78a5f218af4b79fc275f7d09aeadd8c5a0d8c7cd9e92f2b4092df601012c7ac67a6853f7f2bd4ff77d368dc561c1a5d4d03457f3c7470c078062d77cce54066bd0f049212c40b53943705a7138ae3cba9f93c0d4356efdc5cb50a210c68ead2422ea4c34da7a4c0a20b94dad91c80fef85937ccf475f4a575073d06da830c157d692d7a38bce77028b6de1cb0ba381dc18aff6459bac6464a6590cf3d1eed5af629665edaec1b8baea0ab16a14c54518df45c7e7a0dafe56435c9243e21d6c736d718183b1d8a38bc31c36fb3ba1cc1e3ff15c25d57f5ab49e0b1ace3740f84c4d90b5063387aa0dbd1edd0efecd8964b13f4d70c7ee1bf83cf10103600e0ba289907ad5b2634eb92e8f3e15bcbd0f74d98bf668f6cbb499a69aef83fab9191eb7dd4d72acd00406ade9b49023d4c0d72f63f16ec07cb731415520a055e693094ef3977d81725c7ea1baeb1e92b93ff41953c902d3958637b3dc6f19002b1c0ab5600356eebedaa9a07f3c01a7eeef643de7e7b5ae9ac415648d053e87db268b91aefb8f3309e0e020b341f9c1ca51afe37cc8079ff0d362e9e39d916b9b15145a2cfa96fd0811dab8d377577ef0092fc09ef479462c46a8aa7c82a219cf9a2d75867afeab2deff1cf7c56bb3de4687c5bdb077b2fc1904f2ca47ef1110d184f7a381736dbefddcddafa6a959d0c120dfb9d5b8dcb4532cee727ccfeefc801f2eebe39cffdc25db771fa2d671afb786d46726b41972bc0c07043173c1474f9a039956d3a9f4a02471ad819a016271e02c2e6d10711e9ac9c4e92c8292db861eff13a2c072eeb4e053c30a9f13d137576d757077eca1368eae8936a5679f6dd2a8c28f0a62b2aa37a6c8068aaee4511321a6f88f93e1d8814b4c16844a7b4bdf890ee55a8129ca50f0243e06db83063bcf28cd006dc7c8ca269b96c642576a6c27606b57d8395b54bc3e77b9a1969ff80063b773823b4d92c4dc7c13571b10a20c1eeaaa6ecba76a8f807c4b080564713bbf7e90db26b001af79911592b086a9bfb22bfa4bc8f4bbf351146518b89dcf08a4e9fe7f6e3a3e6ed89d71fafc14a8c882f3f078168b6f6f1906afda979239ef7ac26676fd3072896368d298e801c7b0f80d34fc9fb4ad8c411bd0558b8bd879a9cf6fc9b9ddc48880b9de725c9730fd7a406ddf49b69dd02f1b71917acfd32d99d9c27f8c885df499593d93411c083a7253432afedb68c54cce39974ea75394b2a706a05d786455151198007dd97aec470f60e4a56936f300fbd16eed5b80345d03e43513f602315ca797c2fa16ab9d613c691526a92ee1b46ce01e4133819800b30445984a5f12d6e3e1e29e1bc6d428a209c569e37917cee70fb030767f4505800dd8d3bca27feb8f1f68532ff11a0408e6fd555f3e1db835062ba46ea1c5d232a8f6ac94f4010371f85a009b54f65d37a8c4d464a67cd81e6c978461109ed1917ca80b197c1f865315c28da819f09bf8f823ce3bd9bb9869e9fdb898f35b686432f5d8946361dcfb1da7e19b659026117e21292dfe625fe02764275b7381017571e6fb4dd04f6d31b912e6bf635f664ae1c6ce803ef99449cbd4bbf2b89a038ae2825d8cec72a1bf910a835b38e4c46dc91aa57cc009a16d80555ba4e92ed66c2cd1e499de51e16c4c97a0b60fa7a640e026966bad19ed14ecf0efba2fc3e2e3f8db79bbcf7493ff93c126190e31758dcbf18a932cb2e005b7ac607cb1e38eb7eea9053ce76421410d91fbcc5d099a1a3583673e665be20a8a929432981544afb5426e624da8f1fa630e081725b77bafc4e517b2829c5be90da874240be26c94f6ae9e762ac86df13c4135428ec48216201e8037a9fdb36be7f8e89a33d06c2e58f67bbfa54dfbf041306b94bfb71616f2368c1703075258c08ad9db3769ad458421ef87e7be05bd1ae59056e1189e76e2362298b741a17842642d30403597a12137e11418a3f2216e688dd11b7084ff97252904ee3406931390cee176bb9309d84138b05e852ae4e5bf4b4a96462f79ba0b8ba1cf66ea70db16a236008307475145dea1e4ea15ce28f4b10c792207acf2f12fb88361b6d843fc937607155c21334eba2fd05d1ba7df0fa65eed8c745fe8defd9031add093f24c88ebb2fafb602761b4a44b63a436b21614871a0dde5c44dadd7302d0a269920e68db2ab94accd488b4467c8618444713e2d0272cad69adedb7a71e549222c8481d8f96dab32ce3caa25f8c4ddf99490df8813d72494fcb207375acc10a853e048e4f1fe59d49fb306635a24061fd5e0d3ee283661bd5477af925d49d715b9c49a363ed6370ecc5c0e910e7e806382e1a9c3a229089c5c90331ffc0722f6c8920441227dc93dbe884113a83cc3711623cfad34178fce6f8c4044b95c7ac80ae8f59a5f6d670df0d84c7fa9d755a52a27b40f309a7ddff7dc458507e254f5fb3a1ca6481db6ebfdcc7f4975d69d9c195e056e3a2a492d9ff0c1757a11382d03f5b7f97f172f545fc557e5aec321a27e47224eb33f7853c27a227a82619ad9dfac761866d246d3716364f8b7258874b373a9252e4291cef9d90728b36bf368c8eec56791e773e5ed1734d72166186f7343e8962dfc1c1bc08dede48f98e8666a0d247b72bf5d182d612625601d781f18688ef614947db6911925526960d05f2db821d89bd268c6bcc1e75815b41df02d320ae984d43d2bf5fb6be6e35c51bfae403be37fc91d8e05c9c6d394b2808f2c40cac4f103e0d869b510069003c3144665d14090fbe1eaa2e9634c7f91364890056d3cebdc0f6866c6c055c1dfcad9a079906461f35c491e913b1738e8a5b8f3006095c7a4ff4867b0eb492b48df9c26fbe7b38537f345d361ccc84321555cbfb2238426f756f506f3ff552ee757b8447d45d25d423d4d6bcb86d440c3dba060ab447c9c6b9cfaaf107b0e3f23e9daa37e49356c9a90ec424ef7cf94589f20804c31e36a4a37d5da96fcd8ee96fc6fae6f405135b9a49ee15c9e1ec048265999258a5d433bcdf313e7e359bfb915d3efd0f9ba4b27cec1d384f846572ae7b815c7ac4ea9b8b5eed593dce524f2bcc3c233a3d50f5da611935884eabb7979d87093163bf0499635ba1b281fa0ec57abd017fd3604d390faab37d2508fac5317541856a9c956c5441bfe737dd5fe8cf883fe5451ce1235e985a34f3c263bfa111ae7fc1c9768e9a685ae4d6416b1a336784747bccda1fb6aad3b79e221c0d5324f626508ed0879e981baf476f5ae60e2078355db85fb67fa9c60e0f704a37b175c1830033cbddc798a95273af53d1c87cc42fd428996e215eda3f2ff418c521ceb89cb7ff8e1a7c32aed541497e65c943106bc663afd2048eb854e5f6ac400df5827b5e3b42c5272ccf3e988404297a3d03ef1db2ca679104085418bd2e30dcb3c828de300e672f4fb69762a90da5413146c5bf5d12b72e877148b292c71bf6d032a91d231b87fc630be88600c06287e981f596acae4944de9b379abd9e8bc3146708055f90adf6307537ecd146e7b52b5b8588e6c7a53cd22f29b886dd07ab47104d7d2b9662857d9d8e7c64c7bc31c07c7f7f5584547c2bd527f434a9181630d47e6cce552c11142bf41e006a6a65708dea623f0edd6eb1343736112d446c985ca5bc91f49602bbc672baef5778b70236cf19ed8cc8792bf56466638e16154750c954bc9c25c03b160e3877b76e91401e358ba7279e0463bfb36c73f713790557f31c977463b35cc4d280e1b2d55af0ee24a2b507e5791f3b2e30898ec5009a192afc69a5d743e578c67a756f347adb4da5455e53283f2811dc9bed7bb313cd3f76dc7c5609d9a0d9f10f7a171359c9e4be5ceb34ecbe46e8c593e6e765186771dfa416b082db53905b253ad1fa5f825b79d0a4d1bb5e4068f201bdfa647931566e3c80dbc9b3c7450ca5fbc672f4cd59de87d1531c87e03a6acebbdb379cf0972a8c02fe66c7c49f0d78061d02807386f46abae198a1ec0635e025b366eb6fdb1c7de341e28112466584a3ff336b3d8bc361a7a4b6142d735c2146a97acc75cb4af56dcdc44878e31cb319948c1df0105355dfc3fe486b2ae67865e6faa9c90fbedde6ca9483bf1e3becb20395fe57bcad2cab67f8a66ed3dbccc9916ee9344e801e9760db9caf9ec816b475d6773938d8d053b82d94fd154407bbd35ef47e30969ec8b51ffa100cce1b6811d8ee5d2bdc271fdd247be298281083d453326f5f0a47c1f4eb05aa0f52e2160022cc8c3ec21b56ff65c4e3058fcf69bbd50bce80e400c943c42545505e5306693c7a8e199193424579d5c904812cb5b16ae7653e2ab029ca34c2a876f9567f75af5e2b63517629d8e7185b3c070faedd9c2efa3ee6412ab3c2449c2a2cd3cb4c02e22bc50aae54df37f3635628609d68f248562b1f9a1223f713e914feb23015bd6d55e6c5220b83f2d0a7f9ed07ca79f49d41abdea32944599757db77dbf7f96966726f8aba96ec9f16f1ce5cec7d392b9583662a44b93e7239ad289f37671f8d374a075f5e3c41c62d077d80f8fecf1e99e3060b650839ca5fb5a27faccaafb147a5574ef646abef7db1ad5e119464560f2a3089ee5f5ce77335f21e2366d35dfe4b065e6afc51a36eb906002089205961208eadc706cf53dbf6bf848585b11ac404bd97a2a65c6968e6326d0e232ab1f58dc87ed945bb9601c0b2bab86d716f01972402878cf3cad3ffd6adc1ababe5353986040a6448364b5b73c7a6663ce51dcde2a6fff63f4d17cd9dc92368ca7e88ec6f4843aa9dbd238ea9b335ba3a03806ea08cf32b677a9c182cc81ba4b003556d2b516d61e3b3f022fc874faf9251934205ba4c7494d9caa72eb290a584fc068563286ecf419e19e0164adb8f6d57bc10ba3af019eef30a44498f6cb56ff202fcbfd3303ce008088d9c04c1a0f29e64a26614c9629c4fc2b52568961a996cb19ae65c99f2e77824f439bde92b4aadf4beb24ebe96c7755cc36b44f61c29f27b2681ca93387f77d5dc937e3b779c0cd22d46f2b6ff96ee3e36c32c7405480cc86a37260555d08c830c524e9fce114468b6c9079be33241d2d6d427f81b1d43002cb177d692013f964d1f36fd76d1dc1d23e496548bc2f67e6b473d6aa8d11e8b3596c5f0373b187667a23d3db8035c583b3ea6c93f6f96acbcc376b2f28b26d14d8f193a8ca5a08c22826b47dccf4c83c5803fe24761a8c392f1dbb84274e13b3b447a9cd8685e3e4667c8032a5e35058a516987eabfb42bb5797365dfb4d92fc95cf0fe65abdaf59afb5d59ead89f46525a2da071b1424bed02479f13729616bd80834879979d1ae7e33132636510aee44292152461db8d02345d4f24d69e59e0573c625d542e13f5ca4c74de2b12a50ab2a1ce4bf40658bbb9bf5e5b097b5efa8a22355909154a8c56b709a3552c938a5261b32e954c15e13675b20033b58fd3c03da7b4dedb25742f79d7fa09e7e02dc9daad156a342a3c5685355b7bd25332a296a1b8fc070e74fe9ac82b6fc9f4bbc014a2479b460094bef9cdb30a5c11e1d7340cab8b216c566b23c37db15c37fcde187c0d510affb119d8645208db33a60820ced6b2b2a7e01d1baf3af42812b8cced21afb4098f5b0d2be17e9cd5204add60d1819a4127dbbd8a76a863b4ebb6319b7b75ebca195942f92c80eed44095fdfefbf46b56530ef279ff0f23882bbfb62b70a61fd50374624a2da0275ffb4e110136764c79954365ee32b95f2c3b9b03a4ea8c77b3b7741227cc256fffb93fc072695065335440bef4f7ed3d298112bf0ed06d1ceb9b21fc96f159ed3ae22eb3587ccbdf0bf9cea49036f2e50567eb92710a9235051942c8a28482ca9bdee492bb562de28aeab5bfccd711804b54f026d67f43eb8a98a11e506de92da7152904a4e1be953690bdb8afc2923680b0e7204419c866018004a4aa94d63fe8f0c4b11904c8219a53ae3741e0bd2e2ee2992bc4bf68cdf2383405b7e19028e5d57f4225a791ae3b9c4fe38b17d991dc54ceed5d596c48e52af9e77f3d610f262d205fcdb26263a3d1696594503086136d4e0e17d01c0163bd1af30b8e8f1c346170af1b0e8368595cc464657408365a95e037fa0ac01df35961d062be637996d737db16a13ce6e5a328890469aac939344e100ff0a0c71e6694268cb3254bd4f93d8ac654d505d0105d7c7b195e6638b25e405d6a04256b4c7c9f92571dbd772e4965341095eca0092ae4d26a6c35e078d970ec61335f6274e1e17b9093f406dd251467bbc6c4e0f8596a0f461b5fb8ec8647c5bb769e8b448b944f48ce1b0970973e673eaeb41544b0b53c94b40c49772f6eef62150a6f25416117661758084e688b3d8295e5c955f86e603c7f6319829a8c723c58ca9580cdf0dad2b6d38cdf60a5f06ec57e8393f83c8425c48db273904a5733860785bbf5e8a074f3b61c8b463188e985a8cc667ac8af39cbb29cb3d950a52ee9e8c84082f17134152641bae4da0edd1c8b2b3644b9e95fdbf85dab3d456414c796e5753bb556fa664d82d400458931d34e286b20b83a7f3e8a7fc284d19dcf693864c4ead956ae2c536741631d01cdf21a4b6dd46dab823a8e8a5f759d574617f7ce9455087a38b0607869d5087f99c1161da4287f434e182d04ecda519a6119fbaa4c45e8c9803a9a3eb51dae097d876b2579e6970bcc208e77d079956e08b66b805682214b6e122c408b05b9aa618e40eb52d45c09e499da6a731a0fdc23376fd919d45c08eb7f3c065453ce672d1cbef898bc77477fcd38663d876aeb9ae4313bfd034109ddcaf31979d0974ac97a0cd3b4648fcd8302d1f296874ca45505d6316ad677552e3c78006044bc5a1df054040c944da1da81cc96e6e15e0d3de28940c817a7f4c41bf4437377e59f11c5bb140a1659cd6a9252da955e473138c370f27f8c78ef89af8e6b1930b9228e436b8a15b15a591d7c8b470bc6af152fefb3cef7fe934d63426fffb939e0ea7ab08cee942cf84bd9899e64b0e140c30baf7b5c99349f163c1abe87bd5803ffbf5545c9f150dcad88ffb4b9ed76a042b24bf025cbf84552fb80a48c8c56ca6a437abfa293e5ae861127f4cf284f779a0e0b39b0f6102d0a88bc49958efadc32f0672201e2b315df5c49872dca326ed406367f858345fe46cb16d42a2b0ee25fac63956e4681babf51ad945c3ce82cf68116e92dd85f600cacd66dd3cb5883fa61b740722718452ed89a44e2e5395a0b69f1a02f5f26fd6613433e19d6a2680af6ac4c94ed415d35d95abf492ceca018a510cb137f627a5be8a66c83b4b238975388e15d00c2aada3c332c187bcba5271dbb93629fda82f31347229acd509caa60932654c963d627e96eb3d8399c123fb93a20a32957bb377c6e86e48a463c4905174401aeee8624c8527e10cd288e6961d4995e84a1cd2e0b63c0eb515bbf7f2a5a63ec182964d8c229b248a137c2acfdd2261c188061e1a96df9378b56ce51b7a5a99e70de184bbd397a091c915610757cf1634dbc1f563cd6594ea10010c99440419e1cd34a85a2ccfcd9a6fdf19db11a1fbe8b1cae97ade407baf9212eeea973517486d1a18f5a286043a7443b5c99f4dbb23a69b7ace5e02c03fd81cfc8de8602a9149fc570cc95cfcc872ede5416524bc9c26be19bcb12efaf14e79c601cc07bc430075f30df5d71feaf837f8d0e7b978a8bead56e46c17948a51c3cbd496be54d41cf17d87dc76d60850bc9106bb8e87dfdae3a2d4036f1561ae958e74fcd67ccafc0946e8d1aeb7a728e61e41351662b817eb9dea0ba805fda1498e7142e2acae1a27ffdf69f15d5dfd3f211f08e381b7d24fa8b4e934eed4d65a3c482d855cf413d7f8aa29e11f832a322a0e8b687d55b66a43b31098287dba622868012116136583d1f785e076bd5c69998e5137ae2810d5ff7336645b6ec9dbc36f523860a28bd60c3602920b72e040001ceeb3ac959e1d5c63bf0be00e8131adbcb54db517f32917f42458363a725ffe48b87ee1249a9abb032f116f037d1e47de9ed39bea480785a06fb5af7a6f03d48032fbf46bb2f8cbdfeaf740b419cc1243736c7dafd6fbc5c9593cafc952e6335202bd5ec16391ef6887301db6f3f59d99d76ae2cf3c6068dd555fdf9dba718b3c9c2578cc2900962b884e4e7278055a303f7153def4ffdf6af891b76e02305cbe63d6daf27fcf609772c46b7d2295d8b51ff259357d04a9e0b764bfb0c6ad28460e441dcad448df4abb14fd4d90018986fd705b89412948dd265b611c74326e71dfff89bbc32752a3d5c26c5a2ce2fd245c7df340fdd84ccea9e843f7978a9fa06d6bd74bc8c57b31675f412975a4941bc16d88d2ff8c2623d69dc0e8acf04c703b1b6f0151bda981c44e0441f6e0feeba0e1a4d5b2df557b20ee6056211df56fdd70b962fa7a7e0391013e2a1d029e028f5cdfbfd42c5b430d4ccac6906e1adda91e5ee72f865935423b57487493e1fef1418207c00dc80a105b38b0875b3d684276c8147d5bdba55c3ed8238a1f6b4f5b32443402fdfc3ece7c52ba527fdd9e1e1c7d61407575c2339e3951ca0fba6241a19ecb1977985f9c32a13aae566bcdb061f764257da81a8cdc0349b0ef2fd63901ea437ff50cfb0e00acb7d75968959e09be73a8aef31cbc6ace81db286c2995e5bf13a310ca8f9888cdc889f364842b564b3636b3d75746ece380a555dfcb0cdf95e22f35619bc01d8cd312deeff80cea16124c16d548b0b4faccabf1fb38f232070570ed629e1941726e2e565b8fa737b7ae75326d7f9e656ccc5b875ef1ea8f7b1414a33e0508971700291447a98ec1a8513ea1105a4470c21640807b945a6a7a8486e1546f1280d31f9f7324e4280a50a104ed5e6757599320d767c18ec6357ddd5442664acb814f42ee0d83ae078449245471b8254ba248729cc7c15fb2830d94e920b416a83ad3e0b13dd495a1c21a41c9d8be22a5cd5a921d0b1b75a3d5a231d216fe511cf0199f75aeb8098b461c8fc17cc0ddda4d51f5b4bc006f2eafc43a8b9f8598be5388c5a7ba7e983882f864d7f870b57da4c714104540aa9773fc259214ea4be0d79a09d3fbb8b01e0b167789b63e57e4662283ac513cc682b4a2797231ace948fec5b266ecf6efb030ff2e33409a23c303dcbad54a553185046fac98504e0f4b2ba485ed08a9b5a3a72b0f711204a78df08e2047ab3a79f2c5ac45910b3e1c5bf0becad2c951904cd02271cfc51e61a9ce9f6a6ffe5d1e707af0bae8cd0d9f1fe06d17c4c97f0e304e6e1bbbb447c09af088efbabe2d8d62b6c5a30c102d15fb7d47e31f63929de2647663a17a0172f608e326b4653c456dfba364777f2cff7329c7b36f323cbdc7d4c3c03d80ebc73f7a36a5e97df9e4e6ac1295b7548dea1b68751f10bfcdec74f1eed7cc63575bdbb6ebf3c672f6da515a8bad484ab03458dbd87cc056d6b86e5e4010fa8be49f5f518b86d7eea39452898721a6cc348cbfd65a52dab1d780187c7fe2348504104edc8de59a4b90a15ebb8d795f539b41b4fa8337ec3b510207def6e1f6c9463d0eba7b769a144e9fda53173aee6b54f1ecbadba2616dc38cb0e83d86ddd31b94237ddcd033c32dde5a02acecb09de22bab89dc28d6c3bfaea83abc57463d04b421891a8913e2cefb522cc6e56245d34d8609fd11b8d795d652491bc9cc5191fb9d8ecce7970d92655743eddb500d98e6109dc7138403f6924395a454dcdb33f8dbd15c92597e28aaedea9a35265fb363bfc7b294c4e35270f0a31e8ef4147b3a8103421fb7e +Output = 74d3999c0e44dec762aa901977e04d20 + +Len = 87872 +Msg = 9ce5d9022ea1905be288146b279d6aea63ff4399e4118c8319d9418202a68206e5f6e812439619870a0b9aa50c31e5cfb022bc8ee759bcd96218359403063956911df36fafc33a2a0f37664fe32f63ec94c00455b77d996a3de3c318e9f587230823a2225c701ccb59d4207094df0bca78a0c3f63ac54abd100393189eb994f3b1d09c3230e5e7f250aa7011068906f0c28ba2775a79f85a44414c9b099a8751f6eb8aa71569c2275c80fc3923757be6dc4948e2fee0caca426396aa12e288c23e3e138af246d5f3e5206ff0d2eb93352ca25f3e0e43e99471311b4ca1d7c1d0f28fe0e2aec249dd53506f3efb3276641c5e8c9471ea7c40387580899ec3570278a798b73326466e0ed9a42c86934bfb124479eb111dac5701f57069f1ec75e0394ee41168baf32c7e83b8c15c563a83781dce4bd524a160337a91f5839b41f39d4b6cf935c579a10b15500663c36d83b5b132bda54682e335cc8b343a17e3c20d68d776829100551e5917018421098331c84e4769cd776871b3072fffaa84d6ef6bce913764afcf1d15b2bca8ba390b542acaf409ffaa784ef7adecbb9a4cb5ac1df8513d87ae977212cc3fb5d423a4869e4dc96e25409a345f2475543062e9ad46febe7a42263583180b9095b8efd52fee7fd07e8664578bb515d2b4b4effa59ae87e0d7dc3f31baef17b92eaec627b7e00a10226c3c36bcbf2709c16e1a6e171c3cc03c9f20147e5e99c26afdd021863d9391431df0bf2d46032465a50ccf515ac46592d1f266362e39b12fef344b04ccc55cc7e2a97a4711502a86a3eca46e2ec9d7bfbbdcad4c279e9067ca1b2d9a57457898038ff072eab7240eaee376d661f01fada5077327117166f9d7ac50aea4beed9cc8c9a81797e019e40f19ccf0bbe34442d69a3f2fb4593ccd5e103baa7dd6c4bd79802a9ce17211f00eb52e26034a4e6898be9accd8ff19cba76e76f4a83504e15ddbff6b9016151af2e024df03cc4606319b0b66440a05dbf9ef8af6ed84b5f2bd03aeea6c732b4a05c1378481123304ea581a65c12309e59ebbfe16166bdfd7e11fbf833c325e688d81ee7b46c41d490b1e4f3117f22bd1dcf95abee9918b781158bb9dcafab35cd347d22d1a890cbfdc1433320e1e7587fcd12755309fc1bd95d6299fdc74340e1f3c6a02c409094da5634dd16d50efef456ceb43b13c878eb4c091f33b47e867b9873e630eed1bdbad322574fe2fa0f201f231ef3511e7d3b83e7b00af1cd74de852d6b6bedd4b523daa448587649076768b7ec383c6e874e77a702e009b0aa9f5c2bb649d80a0989df3316ad196c764ee5d5c26650292598a99f7e5f56b8864280174d6737f22961534748da46e4ea5af935280a16dee6be8c6998d57355964c93789730881d934ed959654c8942c1f0153e93a00b003904b27dd8eeea08693208b82a2232fce5b6c3f1e2904af69bc2ec5a7ba4a73dab1f9e44b51825516d87526e8cd8e3108f1db5a947321670e637d131769475d79b73b266b3cdbfb111a0f30435b0f2e8fdf820d8199e86621fc3562beafbe17ea885915c6b8c03b804337d019b46fcf6c0ea9816c051e51ad6e9fdd26f57949350e9bd8e32efbbd6a3a352ef44075bba66598dedd1e8ed3b7a303a9d6a13e9a602f49984a045228d7e751735b66eb9a45cb964b5c4cff924982a9f1561dd6b275d5aa7c84a48e25cf32d3c7d7919716522aedf072f738366af3d8db2fcf093a7be707ad1874775b5b030251ef2643d5d369e3f6a687026823ded98fe8219eda7b4da8528eded4738242273a2b8eb57fd370c185816425d07b2bf536097a5f397cefd5946f486f144dd78aa91331b6bd5727cfc48af769157ac371f81a41120086b5d69b421c0ee7c2aa73c730770d37697654dc49a696df288c98fca4e080d6a187f28e8fc17a93eca42abc09c9849410459af546da73d88e6fb16b2fbe7164d64d7395df9f7bc1d0abf6af268de17c557ce7350afcc9a6b354036c4143ad522cef9fdab81ed81978a821c8102ded993e0384c71c7260f19f24d72864d7fb47ac55bf82a5a65b42eb84f1314e0f7090d6c2b9d104a600625bc575c71fe224eb5d671ab82b9fcae53125af0f689d320c22a1cd7c4bfe71a0ee212570faccf1e7470efaa2d471eea95375a28de73dfab32c890aef78e47a54601f2f4b7efd27e37230a56827848f37585b14d05259912dfb60b65313bfe526baa6da8132de9186e7b66433ac41753648be4b033158c02397101acfa4f778bd03a0703a9fd5f679ad897f2bec0e674f2b88904c0da24d3d097f7e8cb4f4fcc243f4379d4b4b1d64cc8f3e776e542e2a0aa02bd36c9f0022589729b1ca1d38dc828a78d3c0a9cfed4db2e940ba7c926eecee64c1d9b7a37b8c3e65676fdcf6b4c94a7a038655d4bf37d9c7ad59ec5bc4da5a833ed952fcefae5e78d62a98fcf21f1c875623b9f48092ec21e7d20e51d3dbcccf71f6d8d527c4deab2583ba133d8de8e5f4213bf7d966d23f15ad493c44f72c9183b7b1f4cad9a6467d02a8033d1a96dd040845a471bc7569607304e3be3662129ca4452181f29e910530cb949bce0eb7af5e3ec4f19bbce7f0aba90feaa15697e246fc26f419aed4e6948b8effb138bb1cad8e1f000c8f00ecdd9f886f3ff16b80243fcaca55be5647b751b810ccfc31747c9c7d4716d6fe7c924e16f71919d59cc774d4acafb660511f83db77264360de54d2a66dc17927ca501e812735b71c5fb5050d412d7e3a2b568bbfdcc7f39183bc97611b1561c4fba27790a99db489f078583d32dafe2cffe4cf2ce5b8f60c8a3c5378f91b741c3a0dc10d2559f6647798d72c26bb1f7ef24fb9ea3d0032191c5c6fb1aeda9b79ad1b64be426f67f51e9be8a1c6dac7772e21afc08aa7910061a551d5e35abf217c53c86ba9e9ee830b0bf565ba3edf60dbe11b7875b6fa08809e62ac3fa4c65dd03d55de02ce7258666f6541a9ef5081201864d8a534547aa2d00afd6bbf9a75d16274def427ddba5850a0fa3bf60022264df2a9c329899eeec1b2920eb321b1a6498b3227fb16f209350e5b195ad98b15082db2769e80bc8dfbc031d1894559787b04a344520547a0a6172beb23c20414d27dbd6799211ca6069ea35c48ecb46e7e45f9f3359203452b23315859a2d44b314a903d2554066268b2af56f8000bb1dcb8fcdbaaa56c224d9a3609056344e3affcf5a14701c1e9ab661f68a268a6681cc373a5bc26cc5c93e402a62fec9c04d4fbb13b091096625621ba394d0ccdbcc7d028f870fd691e86695dd6dd2524d527af8fb27269cdf5f24a477201d4c8d56446e17dd0128c8eac910f4119f6237f308156af8af5aecc064b8fbac6a8deda7b8d67dce34d7cd490c5df90ea47e32977d7cdd95a9a800c1a8b5abaa57059f3950d82bcb1978319b76b976b5900aafc851abed9e9418de0b7726f19a5147f4a392df9c543d6e785abedfd796c09c120e1b3ef5640d31b6e64689880cf7c9904ef5896a0a0f4f13ff3b1da632d4a70bc130828f9653673dea9d59b972991ee4c3ff31ff5d0d7e9701721f5d0a4acfef9a483336a6254dd590e214105be39c848b2675d6bdc69173f9fa31869d815b5fe1b8bd7503f13a0071cb45273935d6d20cf1c18abcb90c2d514a109d6d16edbf40087db53025d060f5af79688b2e626fd1e7a185da5363459fe8291be97a0b902dce1081cb51955995050d5ed22ba3b0728ea24287342b3f4e3ae78ca33929751350026535f2fd6cf8728d649ebc3f46574d206b43c9c88ce4d8d86a1ac2bbd08964cfda00986d1d786e8624516e799408b9b84aa082cfb0ec38783eb0a557250842d54a9ba088ed9d5f64189a91071bff3ae67b2dfda53ddce04365255f7ff51890bf4197a9c54fefdbc3bbcaf25c50b36717673ca8eda62f56c687c96f8ac322c4ea696512a6d6d85a017862d0edd4bdb4e7b96d030d6c6c027e111d542c11cf65e30c8489b1f4ff50c9f912db301a86bac3cc2faa89030b79d69ba18bc86366da45a5966d5b3ccd6679982b6fc794a6df383a04fde50c96336c81f694e43a91b86eeeeb4c1710baf19ce04d1d18c58698a16d8d7ba5eb84b5bc5e7cfe03f9c886db2323847a035088a06bd851a84fae8dbbd119a250126f7722aba535ac3383ac270cafc50897169220955dabfa75a714d42f3a105823bf0e5bd42fba417a4bbebee6108c275e85b499e75d8a83e9d8c486c28f344291ebd1a4724d1a783099352f59d6287aac265678fc588bd90eec134025598c83ef8e67b8f0bdd494f8f485d4c261485712610e4a2ecf1e7e773997acd25997b09f0f46e5f9d2673c25d6476bda526a6113ce328a0931b0c89549b80953dfd43d22f6e5d7d82b40e259c6f040ec29ed0d42d669b50610f15bfba50af2148cc0ae0dddcafb2638f00c073ef6f082486ed002121a57cffd4ebd1cd3e6f3bec0eb77c21c6ccc6e8c033db0b6e1e7374e5e4de3f9dafea14727407b4ef29a9d1cc32ee23b51c81b84e8dbe8c737b1759c49db6b0611f6349f29aa998eb4334a00e637e0c3107ab7c41f8b11d87edbb7c2a00d09cf55faf465b44fea0b827a401da327404c0f50bdba15bfbe631dc29841ff5732ae2d596b2b55a4ff5e03bc19b3a871732ec4e6a7e779de510f9b0271aac64e882afebe03509c3e4beebe95317354ab0bf3c7a900ccaa8b7c367d27ee6d73578cde40854785e6905245f98211cd36387d238e1452ea363b92604a8f68faa5068330a93bc23bc33fa4fc6aff4531dbae49469eb518c09b63262579b56be2d9d03dba8f6dede2b090a66a79894641a370f2d56017bcd04896c9ee814681a670590ee4698824fb4d37f918bbac9f6d3c34fc488898c9a9cc4ad034079f24c606e56936ce172215e799ffaf97d5bb14e44ee8185ed4d9ada503eb9e633bdfb20c29ef3a33975fa32e4b3c67949113f95a4328dd7938376c51367e762ab91d0b0e7b0357208528336fa02209386b445b0c9641005e5f9d566f66fb63d48357317c7d48362b6d26374a4d62ed09c0c6ea59dcb3198497660c3e1a04dfe71738b5d485202faabbd42f4cb7518b7f4e15f7e06b1191729c1bfe6bd40d52d9011c08b5471dcc250dbcabd552807d1f4fbc343ee5cf00aeca399d7709875530cd8bca7d27b39420bf3a1d62c3723a4052240fa3c15ddfafae4969ce4f056f74d9024bca9b6400345cf6f4a36ea93ba901d7eadd824086ebb4c5f3fff909fa1bb01a3cfc36b1a8c6735dd1e5d89809bfbb52663a9d19aee97a29cc8abbf79d9bef2dfea07e1ee65d7ee925c875b11cdafb2e0259964bb02f6b0f43dcfc60c28be2d80145d62e517ffc2370c9ea96fda15dc53fa8f249233403c10a853ed7f1523782f56ad3427294678743489bbc14a94fa28ea745b4808dd0f98101e7cfa29559c94b7dfa0db2313daf0de30d930a393d607fd2e4f040a35f1337e1abba7eabc61563fdcee2a8ed0ae54117b4be46f7c36963ca648efbfb0aa89f92ef2ace2c08e1df68a663bf0e4bd47d652580435b6e380aec49031b1b701438942683199caed93e5d25037d4b7cf72349d4ab87ea9a56b5b716ef168b0bf09363f665f9640445e139cf345bfb1ac7d3344672ad1bd43004c9329576b05ac82090b345d618c5c2688d1988e3b3a1b0fdb2ff87fb65a87e688130a8d421c9057098f1a548214fd944d578739cfbae5d0354744e2b5e837c517da59b8755f33303fb3606c8142ee4f6918086f0499d26a4872957957cf1c4702cf5e038c345db3b1604dcce77df900e4fb6358603faa821c99316c2377fe1250d960941005d58b697c2a9d3c2ce44fc7e7df1b6d1435c3baa561e4a249a5ce09e2a9938939645e6ff03f0606b978e319c6c5e1b3813bd2297c6d095aabd82436d17f297d38d2d5c9a5d430cf8b7d65e27f5dd1b9ec835a71089d02d50661bbde8e2b7e766ae797818231431e0abb7c2afaef1407bed6019b2f39f89bc3063d0900f4b9fb376a4d9f6e9e667c9efad1fa1fc3d12560fc6faedb88123248904fbf1124029507259e295362c170af010c59d621319c38bd4db2f3d37924ffc69b09a80283ca42de332918c67d82a599d45007505cf2b0e143b05f6254f94e72c9eeadd56125505eb3a6a512c23ae88ad1e69a9979b22f2ff8ae077dcc379f5a817709e6c72b996dc7a9e28eb721e09cac237744b0611c7015b7d36c096859476aaba27ddb6686d21739b78185bef6960d0f86992b89e16c41d0ab763213e4022c9261e1c55d7d574a5e0c35539990429bb3b0df0fb1e5eb250377e56fc1a85070342e5cae98e7c20820c9f04a3b1866ff16db60876290b569571fffeaf90dfcde9af234bea02ddcfb88d6fb922bf4cbe140f062b8234a91b4d58b0dc8437bcc1dcb93b21cfcb56dc99d1b9e52f18e39e73ad82ecd7c7b49ae83a35634275a8ad6cffb1ef134e93d1a688020b3164c78bc0b790cecf58ba3006b5024542e12fcb0af10c064d1301397efeecbdc21984f06bbbd433e17e368529578bd50df0beb5472bcdf9e5af1b9e73c4be5f59ad9876e538b1dea69e9604b07046a51c3ad1e6920e6c5c65796f5b35781b7280a76e89bdacae01874065294cbdd737f60615f98c276b805508690a34676899bf8d93a365864d5f2bea207d5e9e92001418d74895e530183ce29525e1314a376ec6945e6d640449dd12648b56712b900eb9b26e3ff67e86758e7028dc6414ce26e8ed1545a46754435f8dbdc4f3f85a3e8f13d4eaa99b4da77286ad765e7cd0707b0a527ef5eaf0d708288f3a958cd13bef9817469d1af03b25450e5faed6e0c3e378a089a703c200c2b19a27b44d977f819bafa43f71f0b91d37d5e8c3b77199c8c489f656462a6915a5490cfedf1f81bbbaf8b41f44d199c0db9eb24b93058a815a79357226ac785790366ac3a5dbeb14629cd69ae81565c6bcb34c94fe1efea3b6f8d78939caa72efeccb1b1364f04222f068c50e03e958537de083e5d106ea666734d19d3f78df24d868226050b654b6cc055dfc1afb182e95985a6349c631ff583169299d5855808ee5cc096739716c854c37610fb42565dc0357b19156466c0a2b4920fc735b6bd8e91ef7f2a120abe2e45d232a3b065e1aca81b7f1dfb11745cb7768a5f1794d7c1c22103816eadcac76d72cb3b943831794e15eb189fb66d1b9fdebe0f9378e4327df3d83bf5565aba9ab62f255653b9a0a7d8c187babc3759ce38ff4b31e96f5b25d6719c4ebafa726e3af2f38f3ed6dd45f2a6fde4995fa1c2f3e2b48b5cd5a64a574434e3422689487fab189750356998f21fed95d4429e2ebdfcbe0849c39e6be4e4985b726b59c9d2bc17174e41e0113570d957038c8961e5a1da214695cdfb0db7390fc2458e62f29a71877f88db6f5b6e43a09d89fe0d19769b7ec9d89f8840509978b82171944deaba506a76a5d3d25cbefb18e78660b7df74795a189d941b252c4edaabbdde5311541a9597fa1f18b09dcefc219d3d4f60e7995dc2429efcc973da9020cdc190a2c13e97692271bd2e72a4bda4bcd34eaf77576b52191973a202a47f4d1bbe85139444d666c9ac2e1ad014d3fd6fc343ffb64bf964ab83fe435b44fe7d4255aee84fb5e91d5a0efa0a3887e59820adbde606ef9e66547f2b21e034a43dbc078ca5561a26094e1a9f710e86590179c32af6ebaab0c3be5b58c223ec06faf3449cbf49ea3397307f8ce3e488b4d5c5d3f9a6f715d72943b925a8b8d37d5182ad5daa8d9e98538b7e40d73d176f61af20c88a9ba987f38f090049f1939dcdd4a25e0bb3afaadac9b769cf8abb0f51906a15f65bee29beeadb772a70a4decc83b40c373ea6017975bb56315fdc1b0213f0409eba4c62e7f1a108dea88fc6d9fa62e6d1911a32dc19faa4b11ef2f91fa453f6c8395c9a0b4dea23bb2baccc72b32f8c4f4d64956f10e5b3a36ab84fe6bc15a7275b9755a53a2766545c847633488a5b24e62dcf9f150d219ca5647613e5b5b02083751c2240d92f4ecdbf5a7824f3d1e6ddde480870e17d1161b012139ba4c038638e541f1c800ceef1b5dfcdc30c9ef9a6ee7527cf03048622039a62587345f35e3ba40807ac8dd96af07cb0bd3500f1d3d6fd7979d2768f68d7758c9691cfd5e6157259accf00729bf7b7ad8dfda653e730377a2be0418198b449fef090bc548d9445907668236ef75427308fd70d945382c9a63facd3f144226e35d0e099f3d740a458fef855131f7e31c66d4185379b370a8a4fa8cc72fd9a78cdc211f73835a3050fa100240376de6dfb90ddcbb240d5a092b654897b2784f0234ea532963b23ee10f7000eb4900d423c84fc4f98c6d6f25c0e40a97e549a5ad2d10afa925a4bd6297b8873aafd7334f5c43d7f6f9fc39652d1fd9af107131f68f3c3bdb115a343a5b8fa015b01c8ecd3d901d98b5e23f2f39bdbdc77a1b7b432115fea86ff92bd1209e516496f46a0433df9ec8074609ecab67bec76c6d0cfdac4400f686ac2a8fb18ca40fa789515c06d8636f365020054cc4e5972e8f6b8df87049af9f99badcd502a1fe2c03ca3d7d2273738b2a0be0e47d392008aa2059cd42e2b902e8622053a84f196c8a5e0f6266d6be4ef952e73b39c24842e6b4cbf362d2fef7c2abc3f425b649b144933a7b4b9536c7e87e8118a189f8236aae4a31772164c64f1c2d8022de74415cf426917ab7c53d1c1615445c9519f45f963d5129d7d5b6b63dc6bf46d08365f8063c6b9a4452fac0a20d8813ef91feecf50e1922fd38102096f7783a935f654153e2d35445c444faaad0aa6e9d4a863a512452079b741db4b02675a52fee895e62818f50c10564f2b7c67214a92ad77135e7c483b773229b12bd7c30ad1a1977bb826835c0fca2d25057aaae1a1b38b826bf363c5b1c6afc4422568314ca5cb6e74b26ac4a9145bffeeb18e3f904f037ae1471da8e573c00cfbfcb456ce69b416d46915c68ac97e348ea865c4dcc4817544e3e06590cdfce3afaa21ebd551e40d5da70ee2135de66b6bcbac11e5d8880a0d56368c2239c900d3da5b810012ddca86e8d097e146370d0c97cb9759ef8991b12a8a7d485bb6bd1ef9ab86cd1103c6c6cae5685326e271f7a96ec5977df8b4c6bd76b941884890d774ac9daad0e8aac3b9c7c407546b62a35ce03d2d0877dbc49b65e0cc53e12493f7d91617d71ebed431f24b7c635437963eea6e8913698f1150f264375332e0daefab809297f89b9ecfef6f10e81f7956dbc7ca4a335047535a86b410ea903e22c8be7da9a818c979e0399f63373f905b9012e0deccce8d01349d60f79e9bc4f21f6c6ddb6be1c10c1f4b6ce1f537251b184632b55426c8815bc0eb49f3b7fddf504fc1966805fabbd9af482b8698902bc0fc407c6e1ba27a5c8bc3867e67412117d3296930d80f0fabdfc18e8fc679f4168f9a828eff7352a3488a4b834c579db290f5d23afa567e125759b955633b0aa58a91761b54e380cc919ff7c6b9797bcd03c7500abf799d8990810a9bd16be5ea77c5a5b7be5bab24f18519ad415f61d3960e6104c9d0d48e35d810b7a3850c51d1c7bfc89e442868e2ca2fab7641d642d24b93dd9bf4b9ac91bf5a3d5c0ee47822e812e267459ef4dfefb845caf94fb7430f56d9987dc3414eb755915d6204c9d5d75d89bbd8555563663200a1ce448d62ba28ad51b47808c74081584a46f3c374e5ee231e651206f7be3b60bd394b51bbdc97bd6a314e4f85fb6bf684f627f18ac44332d1742b96175822ea5fd2ca80a8f7128e148ccca2153873f0a02827d081d30b5da7ae286f3cd487021c2348b6c49a2794131f699d0f9847db2e3559fcf49284f7f34b8f0ef2b3d64c74935c5099364563c881ab9cbf9b462a81a654b34da37e963704c601b366af3debbb7bea913c0a71c72c092dafa20d433d03aea0175626ccf54273c4197d603b03f40de1474bd542719718cc7a4cebc9c2d5ae5fcc4b3be0b08d0ed27f6897d83fe5a8d115c6445a6a5b40f59a0c8032c584fa2ee6f31c85fb5cfdc96f98c4aa0208c336a74bc63e03e12835796168f287aa18b9e1ee4721383ad70554be6504fcc5e38e563cd941f0a12508a2dbe4adbbad607d678d5a56e99f1102e929f79d72a59044bd19fc1a9343cdeba0eca1b8c41787d5c250b47b9202326e777c0ac826304ff63683bd3c8e21895aee141e982360f57f9ce8e413d3fcc1949a150d1969fe892f7cda8b0c13d2fde304d2c9e06c221fc751b677c3f1f73511cb957cf5c058b23cdabee42df6c081f06fa9221600d38d498b39ddf0ae7a0362866de901cbe771cafa8166f69972bc1f9917b5ad83edb472a3f3851e5c0db303451ebfb1ef134e3636c2621a6e8212dd1baf031b67e93bdf26641bc17d2ada70a2189f8a9c748e2b1a0293fdf8571ca561cf78e41f4e69eb9d1bf07e9449d03707fbd6f06683d7f63ec24b15d96a3ff50609b59c2c95e524727ba1aa33f34ac2f1391487efb9b243ff7215f65444036862de17a8124834164113bdd8deaf80a0f840c6b57a9e8380f6a273142b6cfd6c12cd3d9c62edcd4d8374838ee6e7385d77b36c1d999ae2399ec3f0f3a16d847c905785fd90ef1716a40ec1310f22d86519f18304ef4744ca62670e19789e3f0665fd8f201ed4a82e4d52c56399fad734399b9a1fce1c31dfdc0c28f9f39793b60e2fc7b88f3706d0c9d12e9b29d7bb6761022fd2c8922fd68613d019b4e218f7e37ebe3b447ea9cab41a5b4c3131fb5b2ad592a27131954adb1ea1fd2f064548906ad10ce1240758868ed9fb32921dabe18681232a8308b955ad0d28e45c9f34af64bec1d7bfb626dbbf393cc090a8c64f8569b9870f008e801f7001578d8d286b0cc5eebaba2c920e1be7654d862326af52caf9f92e0346e516892b1af195a08dc384d7ecabd146a83563294c1af3699b8f13591378977eeef2a71a71215f3972198a320ffd4aa1349c4add4ea7bffb9e9ad15b486713a3286458342cb5306fa27f347167270f3e3da0fd15c7b4df59230693751a822e300bcc2b2c9ff5bf9fa975121ab4c1857a2df3f84739dae80eb332c83afc424dc2139a8e583d9b6365f19ba1926b5553e17ff5db0627725088e9dfee11803fd8b5da6ff04b97eeb23f1543717ced4ae100be3703c72333af54114e739d28d375a7babd0f6b419822a77f1cf03edd2ab3546338010e8f675afcd40f073268959b045ef22a5b9d004b2bb978bc5c9d6d416909696140feb5f9efacb20775c1fecf4811bfdf813cbf82283ef7145aa09b219b1b4b8302e377f2b8f5a802dbc797790f8d669d70833e6e498a18c6cda93cca77036f14c8c055dbc5698167d8ebc82eb72c96f2ae230565fc254e120a09baa2996c44650727b82bb152aec501913966db79c16d9e7e9d1fbc8b07a4a4349d505eb05c12428c1758e95bb0a8ca6a43a7e8ef667cd6087de20745f5ed30cc6d4a537a269b0f600be9f9ef1761b7d97f686c07f68ec943106368c0695a1433a2f6f424246dd2460e654f8743ae3e61552ed16e0231fcd10d0a5d950289e30cd6fcdd48e6191f90874176aed5ece2946d71b55c1a04f514cc4d623e21eb01aa51b26b42ec1b5be21f04fbd04e8c38d510c7948c9e6626a0c6a2f32677fc14bedbbe1abc96e32bcd2e363b960e2a95b5e796db6a1fd425d784b19cd8553b809cbd868810771ee3844d4bd26aa536adc97a76066f1edd575baeefdbee4a37d9d67f922fe92d1d37d9e4bc4cc8944ed55221dbb2160be05f9f7db41cb2d76f84feaa677e90f96c8d209d0e073a6bc1a112763e4af9679b8305a9b4fbd08d511667c67cf0c29c9b47eadec79e2a8c3d957cf0245d83c26d86308b58d5b1cc7b02c44c5922d867181cab126f7e23861126e41814464facb4cdb2cb1656f1254bde76b472815ce9616fe3e07c33bfe9fad9fa6684b1a7772fcddec183ebf918420e01876fa8caa405b627b1643b5a18492322640c1c35c22d0b470717f154260c15f74d86e5ac278383d91dbe017ca19aa6fe8900e2750e4b0a7e1449237cdef88aba7f7ed46bd4595d9a7de022b2065db9d15e0990efcbf84fd671adeedd93a5e0ed85be01943b05a7ce6a812b74c700e06d4b9cc4007bb34ff2979cb010e4729ce308aad9bfec06f6f76c07684f5422cf04ea10e841ae0a8f550ecc1391620d334d60ebe94937dbcfa7eae985ac4e41ba4ab22c8a4dd37c92703f8285f96cd4288f26f79ccadef2a6426fbdf01615dc56a12c46066f7c77ddc6b27683939546012ae33480bf21f9ff7982eb24073b51089ab0e3f931198ad5db000e990a4bf131930e492180a1404f9f9cf7be0a2f4e64b9f88cdf3d2b342f3f90b142b821645e7a009bebc9ed642b37466a1aa98232ef616ba724de31f22e46ed14fd4795fddc2272b36bf566e3f6d2e7c8c63fa4ad0d3372d976aebe4377839d9035131a4c3f3edd161e9d9e3e56f5298a3d6736fb32a2b68a213930b67f97fab996b54ecdfc21983a701d03d1b00064350caa99cc1431af3fd0e839b9cad6bd077ea87401976d3ca70d1e285c8697204fb0644d8e1652b570e23629cbdde22cf079674a75959452c241fb8c2d6f3c0630a53ed2cfbda861b3f1cd917b2d2cf30b037c32987b194332bb4f9fc2ce315e8e6794c9ef8e854c7f7c08f1263d1987cd9941cce8bc7eb67ee584e3bb2849c1cf7400839bed8bde49dd62d98b825a53aec76259f4de3704fd3d25f88501d7a86a570c90236f2e8f99b275aae99151ff250a589a3b54d4b7343ecd3eaeef5daaf59d03903487dfe8e587bbf5eeee82e2d6de9eee2ac4ca55ba76c536a7455e21d7929fe43ddc3262b3c9903af9fe7f971ab0afd651829a690651b860fca85ba5a6f43c0cadb0a8959af4bcfaa945aa94972cf5d33e32d7599e7c115e1d9cd8beea1e628a12c9b4e9f1957cb55b589653a2a01b654f39d3bfe9326a7e887757d5f79daddcfb6be9e86e2869ebaebbb56ce3b68b2d132c41f48d311e52dbdc4b7375de6885c63baa19572a0f1e11c39a48c0dccf7b186e94afe0e4c76b7640362fdb7d4d15119d97e54326d6bd0314c76fc08f52dfcd953e3a8ab9d048e627ba53aee6a5fb5c2615e4b88b5b591133af4a795abfdbb124b13ce14cd34bba171a9756a71db90459b6803dd3f762ca84b48141ab50ff5191902f9b0a4b0450730953693b0ecea8acfc5039ad457a7dac997cb01dc0ab2d605d7b0e7e920347eff9206d1f13bcc79459cd3253c000c90fa0c55b0e896fa3157bb7c21662b91ed25c86b8cfa703dfa4416fce83f1863b228cc3991a15cd61256d5e4c6e17a633beb5eef2c943246f5155b0549a448b2279902ff0ace044d614b4e703e23b5b252997d1a198729ee52019276b2353703d995d43085393668067e4da8f2f4838619774c73bb9bfe3df94ee4d88ab88d5daf666a5369a8992ee937fb15481b8ce878ccf4827b98593bd24478b139f6f4c99153edf01ee4d5a7f2be7f3ea96279df57e29ccfbf45e1f1c62d778c27b7124d67a385900cb593db0a5a02ab7e8ff2749eff6de3f06b3f66bb4f08eebcc38ff4199f59ba9be27bd31755ace52d6b9eae356c8f4577d21ba29af4546160e114c3908f92f63335349602f5a47320be26950571297dba421bae4c62826c7bdb49c4b2bb57cc3c74672cb48313ddbd503131f45563142383ea91b8e1bb987577d5fe686ad1c51e68bb9e144620ac6ee8688beb626691195c2e53c5bb276bb67e61799be5286841d9d9f30988f4679a5073aad3de5a7c039790fd5d36ed6fa6b7943e3175833d0d8f68337d8fb696a84ef9969212675e4bfab796679c362cadec175414600acdeb51116657a58fc202aba2581246b3bd584e4c26ca33292934e391c32aeee79f41e87c957f10a7720f2e18f739c26924925af6b67044efeea165ab945d693f3c781d50c8dc18252e37a1007bf1cdaf1861e85e4c4016af035e3a0dce93173d2af9b635055807327ee2ca05ed21b0ad232dbe2bf322f392f1d12a5e79b64206f32b7bd556da23f5eb7873cd54b1b48dcc5ea506b0fe21c03f64fd469ead30c51e7536d5c24bb697fc616200b8881e749b5c65978dbce960757e7a6f436029a03441ade05191063f3a0660472190398c1990c6859145939a1b866b7e73b777bfbcf6a99c0c955c162bcd344a98b04cfdcd609079c47f6798bae6961e339a614b3efbf2b1fa3fff44591fa8b024d09eef40358a1a2f53ad7fd905c3f58df12e6c43ba50c8247839f04c658221ced87889f8787e11d9a9ac7a014bbcab88a42749529a8b89902650428a058b479db122f37f8f3205cb6aadaeb92048e92c9b940bf3036a9b48328d639d698bc79941e4565de46e9f0b7cf84689ec2e5782bfbdd9ae5db7a75485387b0df74a4cca7106da18ddfc87a3c9d568f917379c91f6e9dc0c113854ba0699b160198f7c392acfa63ae4a3649a388c3d92092b606229613c9485b64b849cf72e203623ffed5289e34b602adef9b064ecdb2bd24dfb416e20cf22f833ba319c1ad4b5cf7eeed27ab8d1b95a9ec71ba69d5de3f309662456b04350c8b562acce9c050059a14593ea4e5656fb4c0c609b7a9e9a583cabbc61167a78ec7986f4d6dc3a7e890ff97c23cc61a1d590d16788a828b9c78fd0efd977fc002d262df3fc03fb97297112746c5b7b01af101d18b85283a609a9dfa704fe4f52536460908739d1b3ff6e99650c232ade5277f85b729e35cbe634dfcb2cd0fdd426dd26b3c1a5423ad5af95364c4bf9a1876b6a18fdb4c88f25d5d94397188ef06e368744f070d89471db0ecf74fc6db014947c37a2bdc4599036d4f78dfc880df21a8b2c5dc11b2a9b9b0c18cc5d1074c19c35a0a9e1af93edffd8cf58a475927b2f3b5150c192621d9798f99b97695558289e3b5a4713a405d8eeb33f39dce9d11d9e9c1098c5a5be76b95a2bd100bc9fe3bdf1fc1877f4a0671c8b89e34679bc8dbcf5e76d3c5c45e17823c2345e0f60729ca8d97b64eb86576c3f7fc93aaa04279e451b6880ed7b7fdb3ca9e80ab761804349379961f17e4ee6b7691440e470924b72f5b318c228f9ed8d28148c1d6bb3b8bd5f9af66e51f491db8febe08fc977cb66bd738c4114f6b3fe86e06da845b305ea99a5abcac7f375943877a313d77d2707bbd365d4061f37780d7534bfb92932ba2de2096da8f09ac8ade010d9624d663f37f92ae2c71c80e103fb69cc8dbd4514627a97bfbc960960374db047328e90f5780d63d320949623b19995368a1648df8195dd29cb8ac9451ce609c60ee9ae11c738980ed62f82245f783f6578dd4205d25a64119c77e25da4d5a5bfc006c77a6ca152fdb4964bce55c0efc11fb93c6d9df2b3e0f8035d92193f0c980e8ce31aaf7218078171f907da982db246533dff2a8553ffa7d641cbc14fc4bbc1240ad8d7d07394046795b9372882a0b7524da3c03acad4719996f0e62a578ea175459c2ee5ea0c062125cbb59975 +Output = 147d1d18ae48379a7f5af267a6483062 + +Len = 89224 +Msg = 78949c9eb7b9bccbc704afbcd677b7bcd1dbcfea286d8e8fd5d54dae9b578cdd8b4d9254cdd554449dc7986a94ea5ae329676f42777d68e04177b97333db1be26ae52e583733639820c219902819063051c4d97c5e041de0ddc561c465d096611d42b8d37d3db16f59dd7a561b6e834a50dc55c1666a7638b3a78ccaba9fc601aa4e78ec285a05724e0102e5f44f98db2e952a3915183890cb0684adb9ae736b1befb5ccbff128480914fa653b260f88f3d9a20bf6742e8f2bc88f94eb666447780fb99aca6ce39a92ffaafe795aaefba88f03608ee71fdeddd7f6a7d62f633cc795ca7fd232fc10efab5ad634533edc559f965f67dad225e9190110047236f2126931a35eab3b512aff5218f77986d200f0a33108b3100b5578f7f4fd95a6126073362df63f6a064be2d9ea47345086b36c72fdf9dca1382bdb227e47027b44ba9b204622564fd6583e3974aeec62a075fa4aecc3bb4d557329c8d36c1f7d2f27c939156b58b46a5bfab8dfb30985c74f827526edbadc0a334c321ef456747cafe5c7c358ad5f695bfe9f53dff381a347ed39d2ff3f15fe752ba885650e27d25ad7137772bd187c613236f7b8121edd6821df1881b4c1da40ae713049ae5fda3187655a3ff1a94b747ec4f4c8cf241db707ae21fc80a8459dbdd74827a0e43c3bdd059449afd97d9cca937297905a0a3e87f015f80b92e8924020f5884b7e9f80c23a4c18606fbbe1fee998abbe894d048aeb1cfbbd476a2a1f955ef317f5ab091c4daa326d34ac4c020f8e8ec2798e11f6e95c8ffe8e756a427eacf06c1009ddd586d7213cf0f9e4be4d7dc802f2746eb530003b3631ae5c92230607b2986104d32dfb6d376a49b21aea8ddfe8bca722ad082e88cdf6bf07f5cb95c151565a87008a3d9cc56c45bcff30e55ddb9ed035c8bb0efc2ba6507354c081a5b10f9d6d42e5c6384dbc950c5365aeca426297b0ec90ca21b80908a99848f13c3b8ed2be8385bec93923e0aa00d20fac87cea39a03ce877fdde690b0a7ac0d0c559aa083aab34cd5f069ce9cecbf318d11ab9dfbf4be709c00068f906b34ff9f68faafc39fb798e6da5608ec01733bf448c02cdba7a8aa028b32ae52cb27ec7ddd77a8864ad9cb835fb236a22538566a94d7f94304d46039e43095fdaecfff2c1ad933d493610d35e74400c44254aa765db6ab3af389b8c775c8eb99fe725d3689e8f7b662968582dad50c5c3f105ea00b26ebc95c10da36a4c4592fa2593123916b9d339fc15cf5a02d057104b49b7006ef61f727b1ef0edbeb86c582cca179992ccc54322ab913a114910c7988886fb7d9b4cc3cb41fd581041b668612d5c20bf12d200319c5664652583486d44e2484ac8d5083619115fdd8bf179675f6854e83689ffad6a875f5ae03f113df1417d62f938ce5006e55b92f1be29a3b2c4bcaaa24d900a889c817f23a4b08f203d1162b6f8748d8dd1e1cd0d6ce7aad9e9be72d09d7fbd990e815e4a44b4d5543d9aa69c849963207f78e8599e31e1375fd0dd6c0a0d5afe75c554deaf8ca50fbb7fcae47dbb556146877140c2a6eb5d8f9a46bf13c7473b3ac41f4b45b682b53f472c594448f8c2bf94046d6aa53daf01814b544b4c26c1f6140a3a97a0d2d74177675568c0a1c74334fe3a06cb3cce5e1c57c5f0fa5e45002b920715fa29f86a86f8535bc104d189d0db3117678d1dedd2088ed55072171171634b51210c9b030c5bedbdb88693fc0e27dd2d2883203928ba0948ecf6ca828bea71d993df31b36dfe8edf159b61022370b8a88cd377d8a6f8efcc3e50d1dbe194150fe1365ef4227cb16076d7db44d7223e29e2d27744d3518cefc314cfa608fcaf749796653dc042efc23ab0553c9fd8e821e924c0f614307b23f9a7164978809b98056406f8ddeda4750fb98131c3e14110fe3ec775003224f960bc385ea6cc73fad94396cdc1e98a093457c1fd09f7c387a0850d4a2db334e08698b85e1a3cc30d71a9a72522a2eaff671fa9d6d86909e66e8c04ddd3500569d9d128c0495e03507d0aba8756b641b80685ab6795d16ecdb6d830a8b7853105e8f9dc1dcabcbf6449eb337d049048c3910e4917e8bd7c9e27ee334330cf2245227774cf04b541a966cfc47e82dd4ac2a52e05703789bde810326f35e59a539824ee756c8de454a0522ccff477d9e205a17952f918c2ad2c2e5956e93c736f7f4ea3407edcd642d9aa86c8774a32893d1454c42af2f4b4ead0a78ce5abe6b08b2e4a786e67f7a6c5ce62408f7053bab98c54db7e5c9c8fa495b173a3ba60e11c42588fc3b5b4eae54c53baa590d9e10b680e0b7bbc2677d9ec0b9dbbfe7e5bd30941f9075cbaa9c882bfb9421211b6b335d4d6aba82f180b422a8d96de9b9b10018b36b1b3554dd0201aaefd7ab78641843dbf769712daa94672a5bce1451983c9b8db4b503151aca3091e203127ea26c1cd38750f8e5a44579888968d17718ea04f694cc9cb5fbe69ff8962ebef5ce37cf7d41f87ddf15cf3e0a8cc686f1d9143b3433e768fc2760352632df17a58f8244214ee86ae4a63ba0f78c6d9d8884c1278fb88ecfb24740dc65df9f85558e546307d5a825bcff908699b0e77c04c1fab2514b49399e028c7bfbc5f570cf73b51477ffc1182fc7d6d73621ba8d2d37c6c3c016a10e89014ef9310b6940d9e5ad3fb8f4baa905a6157d17077136cb8f2d43263e1db63bec8d404fda835d3c8c45cc13db1b420546565f848991e1a5713718c9ee469a7c6a52379d59cc2fc01184a3d0dc6d4af94ca065c4cfa4f58483ed2bf24ca2201423a4c663b1cb1f2c1c73ac37213729a763fc77210232da30705664e880bbb1cac08bd5e80908934a5418d08fcf0146d731717de14ac1f771de7aabf5b319b667e90f4c758a0cf4e0627df52211540b535e075f4dcedbb60f7662e95f0d4295b4453913525b5eabb7edaa04360db6dfe293c605adb7077ed1df15046fb5c0b8767d1013c7a6871e979ea5e614ebb22a4b78b758492cceb880c19be66dd41b8578389c321c900db7471d788104d4cd5557b4e13e6856b6cae4c6fd75a191d966811fe65998437add91112bbf4df091c6cef04da0545d491dc594429b521584c258daf57184e755f73b23c487396685e678d3016753680f19ebd3723fca87a300c610d26028a3276f0efa4dc00e5f311d1c060779ae9f8f261e2c96494f10bf8a93698310cca077acd23fcd5415021ed4843067c0ad2b51ad2546b5a02ad85fc7878f1267b806cd164f994d2a9678d37176fa27239734dd14c9cbd72ea3060b1f6927864f33fcb1154cb1d42ad9e8d85ebb0b5189b6e1bcc5d26004da01c34cfa03dce8af87aaac11932e6a3c257bb6011b0decdc505b752608af458c8e36a8c01b533f6efa394572eab91748c458f4c45da50103aeca90a13260a12c9088a9d97a379376d5d105a01afae436fca91a0e4b7d97e61855959d1a1b21a350e0d7aee82eedae60997304eb98d8ee1693b146ab3db66dd5240d828687ccd71667b9a52de054fee2ba1704243cfc59594040d6468d66802f6080b73f4caab12a44d72710f7d04ea55c79098f8d565d0fd84f25e413b0076c3174a60d13c319d3a0b99d5a186986efa5227cf234f1e37e82669b4d7a9bead5be73b6b78420f85aa3e86dd3ed288f09c099c316d8d2d4f0670ea048683011b230044f0746c8340774eb01431e144f3bd36648c3220316abafce9c9e8676644baeb0d9c302c3b7223c4abf725335afcc071271c0b98b93f8812ff7177b75cce761fdbcb45f1a67f3228e1128339497068324a8d74772311e05b8197bef352fd0717561a206d42ec24f3e5e2c6638f02f702454ce71c0da6765f16b928cbf774c05a02e559ef9f3d6ebe20d47952aa090f59adc6ee17e7519c6625324f71a8aa445058c94d0929e781d028841687091713b0faa7f3fb4ea7d53943af8db4e52205a2ce42844a516f00d2736e28614a91a690b25c9326821db310e89d7de64b5076c9d9cdaa13d4586e4d87ff1981dd2d2a814b51363a4017b8b58a689a8639da3a2e11e708f5f1282ca9ecb384594f3e220b4c2277a6f74a487fbfbd6e253f13a257fd0b2b815652be600827d3680f492f872b4cb1ed2629f4d7eee86343c99151dff1c6ac16626ca61860c8912e9bc2a59d6f4c8f7d3b1b50669e96045277c7cb1ea695e555b3da762b8d22482d835f26a69e8e6ae7d4a2bda45532dbe1b84b609c61e571afa930a121f3a152e53463254b2f9ecebd5154cf09894b54621980d4e1ea51db84d0e3b9942ad26bd65d7313e3a8fa455e5fa5f71ed14c08640a0c7a8776578d85c97811ea9941dd813d138518713d495b4e2ab84c93a162680852d3e5bc630222d1726c9dd55c326671a8fb423eb45534ab37952b6707ecde92d873951300c3dcb7470c3655ae050689b7e909681bf36b05711033b1ec22384811dc0e20bd6d23b98a834c9093cfd1e3c4d0d663c0ae6edb4bbbee1aaa8d2586936fc94bf54888669154492cc9ed692e643521d83ed0c09b4bfab2e7df97f6dce1c15f2b44f08b5d10119470ad082cb7fa98842c031500d3e64f3acff7cd4cc96153281538ef9d0b7b2de702a98aad1f0c7d65e5a9e590039f4bee398fb797cab6a7bcb02db04dd0271b99696bff6ad22e565f8b9fcd0ea8fb5335ab13c1685f36319572afcd1e69c86d240b50d0d66fc4b5d9845135cd327f07b99b00952f0584734ad34ba07f26c3952f6ef4998046541e5c766aba6c4e9ecbd28ff28d5c4c160f35686dd4e0a5ad26140ac3d3e90470e250b848b55c4bdf322900461480915f47fd98a2d50354e9826a754afa81189fb46ef077c12dc8b4bd258297e53c83e4c00bea772b27b30d4cab24f687e8f135070f8574685133b3df408d5459d0823b09d8e44731fe4e8cf74ea06306713cd55cab0dcb15571b511b1286f80cfd1ac677ed0cbf93d795fce4dd5dfce0ba39f517d9efe852bfee10f304161f5902bc1bbcc0ca3ccb4417b1c7dfd430c134a718eb04a2689aec3a87f9ada126d891f4af2afca34b42d4425002bea9bb0270d2b528c3dba8687c7f0a8167ceaaf62b42f554e93e679508b46c180224d83eef6b5e639fe24445d12a3d3cdae5185c2f3582cd2ee21e2c41dc4a8a32fc34d110cf792de15ca8bd9ada748e6f8afb551e2aebf62644db8320389fdbc9963d63757d99da40b1623a39fe64f8ae26c08b88c1755277cd2c341437b08f5e697e509e04451b2676ed362f04630e1f5f0469ff67c3849be18cb9ae7841074a0c6442fae1ef431b13c64bea9b13212b8a437ad2ac6aeefb28898e4f68b5f614e57b950c951cf4872e79f61d10e9e46b4eea28b2fdb0041e188f1c879773be579b40d143ac32a2030d749f07045bca46f3751e10da57668d281a0ee7732ed28a8440825085e4de076742d168f3dd45573e80a56cc0b578c0ddc6bfdf8a3bc51636f71283b087fb1c926127934e02e804867969275f4edd41bff1b9e05b2f288339d12c8dcab09bbb355bfc16a15124e741ebd3e104a7e6983547878a447d6f79e36b1abf22e3325bb69fd9736c4c7e781734602a3f45373cd414934e04aafc32ea21779857945186aca94a3a2d59672f7d0fb8538dab41982305879bea3c6176b4a0cdb9e7487bb46e04c8cb531c7175c9ca270d6e4e88329886bf0483b6319dc94577843074137d914edfa77bea2003a3f046a86fa39da4ab14b4085f8cdf109e9c2fa7f1abab3abcc3e97f1656e521821e91c4f04ed466d13c0127dc34ec87ab2130657953b58427108082a0f75387faa192d39ea4dee1b16910e39852cc6b8551347d5600c4d286c13f82aa2fdd8f6425b464c94a1fbdb2288dbc024b0124a3c8a62006375bbe523270dfa084f5a0551780f91ea3194369f6b221a8a22d5b8cd4002e087becaff000cefa127b3e7343f392f0fd544e2b3f5038a509dca368b72fccd7eb22ea1006a894727e970a70c74634fce3b240dda8c18bc6947ef5e4a92886be1cd0e6970c968bd9534d0c11458c116d706173c33cc725f6d6edb747d94aa8511c1a649d5846ff8f2f2195dd4531a2d311c6697471ed81c65fcd4a1ace22bc317743e6ab90567a1460a94a5d5ce353be46759479de8139b58d8230d60e3d2ccfad01ef4a3b3175f9a6489bf9e2fdbe9f9cd3774bd93ec834eea10df20ff6949c2bc8e0e1cf649dbf5e840d3b8e0d4df77384a453088287d4f1ae240759eb6e1781fd5e0ab36c3bd5f7e000aa947e8c4668fd8e37d2e92306450e357e628833d23e33c93d8db4eace00e138bfbcedf41cfba2a762cecf1459474594dfb059604cbef0b4f2b4db2508180bf7f35dc80fdb9a08825c62c0c63e86e8d493c9eb7df782b8a3b2df5b75249bc4d0ee0d894a12c2b3918d255ac336626c7743259b076337f00806539255a41aa055f832ce3d430428778d8cf995c18854ff5649f487003d3b7455b82c30f6f332e9ba63f353fcecdb86d60019b8706716cf55ad94676f10ff5b398395a1add3d11e9d27952890db5151ef3557a5c37d3679c9d6d732f041b03f2a3c4b22293b1f7728d42025bf6e0e6b41832fd82b3948811b4c5974444df2929048d93d09778265e62020c5d8f3773565800eea2829a177d27477a5cb944ae8144fac5ccf378e7d4d6213936e2a2032d3a281363adcf5c077f5de3206c30dc21ea750fbdaf9b81fc7307518ff70ae0614610346e3a1a9fd8436e9b37648cf9317e653b4cd1c83effc01d1c0fd455501904211b6a34622717fbe16b4ba9414edb89320f2063e7640545c9615f836d9c7dfdc38f00a0913ded3020190144362345924354e26cdf3c358b74ea260c380cb6b85f57d8888e298268926d033c52c0972102d139f59a0eb819877d0d75a0e7ecbd5b3c99f34133fd2e9f31f9997f6cfabed650ce05ff22b67768e3bcc88c7746952106ecea92a38707af2b8a64a47096f2279748a4f6bf562e81e4da0de302edc7177d787469c0477d2a245fa4a81492445e7050da672ec0c539470f4a8fd109dba768e699aed3661779e5206175a0163de1a18eb03ab81dc4f7d60589772cc15a3891dd6149240b5e023374a3f25c4c6319f2a92d57a395b4255761d1835a3dcb31be06d522fb5fd82ed9037307905a416e2d4a5aa7374f1c2a93ce2b9ba5a6b6fcb809fc22a08a0f659d76d89c83685c4918183d10be74846e52f29da75324a300478ddf2f5ab38b104975db997e9f3e107dbce17b7e2b74595b75328fadde1ba5323a84327302d295a3a783e6c9266e2d22dd4bd1c09d75537800ef3bfbfda55343b9f51431a06e5e74b5d86cac267406cf2485f8ccf10ec46f3bde9485a8ca7240b23abbddb5e7d18346e2116fc7d9054e3896daea50c81409cd06809208116af2cc5911be68c3589a03aabe5930249066c3865e62e22aab0e5f6fe86c4502a421b05cfd1ee28c5a7f94375cb38add11de6a5d6b7bcebcf1469822b55986258695064a66434bc93ffba091d1c5fc8cef7fd724eb7f3d064f792126cda2f3037915752c3676ca036ed6cfc107d7afba9211b2e3c5b456912b6ea1831a8fb523e66ba50954ff87c151d8cbcee431cbee625ca2a0e16342e4eeeec1428367f40d335d3fe9a826ab8b4fc939c0521b77b1c727506527d3288701c1296aef74d74acab4ebd51a335ee9d070c4a038dcdb8a293c64397f4e3103caaf800348fc8761113750d3926dc7643c9612757dbd2001f0618525d11a85dfb3806e1675482cda72b017eef81e0f83fc03cb470b066e9e845f5b2f05804ba323fb9da95ea0ed3e53e5e72b348c5dcf767f981ec9ffecea4dfd8f6203c8acd882e9b2c7eb4bf2141ea069942effdacf13d221039fefc36cb405c9c3b33acf0537125875049364e43aa74530cfc1ae0b3bc30dfd75201aac1f3db05cfd1eddb2ac3e35bd91be6b370fc22207fd19000b571c041533d81a33f76fed34cabbfd674835f1a67a152e9305bba822a14ef858cda3b052c260eb88a5612853005a58ad73be3538a7e0d68384598088a4a9c0790721b6bc0800b4348fdc08c28943150b95a3a97c00678a8cf4635241ec727df66b5dc15beeff9ebd1fa735884bbe5d0a16aaf4796ef17338bda2c55663f15a58632177385ca7d0adbc8c58ad301358305f9cbe38d7c8b80e47de82cef06d7d255633805a3b3e728bcd51193a1f892d08d640b1bf25328396fbde31b17a300ee8ac5c85c9710daee0bcbf1f36ff690517e46073183e78f9593f6c7908eb803626cc642e8ee85caa33f09e13a9bafb07e7f1c2ac4b0ce244de7c4e02da2aa61c69201322b086738e0cd1b69c9b37875cff662f055e75b78cad1b4d752f1feaea380f310a37359983f3c7ce63155e552be7a96f255b6341f84f82317a0fb293c51c01858d2cdc17b1713ab00f1e17ad9d28244ab649bdc6b14b1bc2b883cbebd79c5ed8549663353f0d922249bf4ad6da493e885d316b8fdf294dc8d892523848408ff2067db13b555037edb9ffdf1909d25ef0c41a54e4a8727f0a81452fc34090fa9b4ce9b0711dc192d906e6bebe524bee4c930c620c37ad1b515ca34ad4e615089bcee3471fbce809add97cd00dde3d556272107c51b262886511b48bb2625621b933725e8c5d4d0533d9cafb4dd530fbfa072c8af9421a2e0e4780dba7dddbaebe249fde012679ef31afd728c85faa48defd6a754d0e5b7514a61020f97f2d15734871adc63ff32d7002ab40c4a235a4d5fad223953fb0c53ed86b44f16fd3c09d48f0b423d14329b87b4f298ac95877a6a66b7d19fc9e865582992dd7d6551507cb24db6004f249d0c2cacd62fa9c291aab3d6b206eaf20224fa3c5f3db3c7e787a160bc4ff87f7827e2412935d8722f9ae50d6f4bc6afb6ae490f28ca70f62b7fdcd2a98eb8a9a945766e2671ca3ca0b5aada4db0f577ff8ec689eec6156298dfb512124ef8399cff79724245c788a17545bbf1e8fff15930d33b059329a3ac21cabd9b034fb5efb03bfc013488cc8e747620d0563e92302effa101c4261ff1e09e23984e27a50e026e69d7c056aed41d9cb78d7b49d130e3bc5a67db836df696afe28e82086d7450615a5a7be9762eeb29de7dea9a44b7f999a5ac3bc9e426ae608902316a95bf44b54bfdb999c8eb67be041606b85351db0831438782390ea2607587eed6a44b39ea9d362be02d860dc9c70a621c837af2987bc22114c32b1d2036841cd51fb4ba71eca825651aab67cda5bf8f4f6bbffabae3acab2a18e879104a8b4dde7e6840dba8a84890f6b7e04a2ea9d0c9628d3df01767881ab0d340b13001e46b36e257885fcb07ec682811bfa05df9030e6f46d875874a6f1177fe93758c92f3efbf89288084d5efd59876aec9404a94d5d2afc49c9054afc1531d37998fbc10ef6c300ca97a5503d5758997f7f557e74f53c344daf7495526d1270dfa8fd24adc54f6d538ffe7d0de4bb4fbbae1a382d16f4bf9df40aae7d89ea697470177fa3d2647f2cdaa10df5687934a90a9bfe00281842417e0cbe05cf81653dd890fa7684c9de5c5ed6277d4b5af150791ff9769371683f37c5ec70a99f0d44c9b2bfb0424833eb05e4f32ef6262eb9e4f05016bfc7d6a1057c61487e0b099029c3f3d876a726e2b5159a8fcfa592ea34542c6814e2376fd2784414b68e0029e20cc17787af5e4858af44293f9fc6ed4f94b5f5fb8931af8502be5db9f09b18dad54f14dd288425d5fb1882afdb72ca1ff81244da866c6b0662f7aaeef98164fb66c537e0da3f8214413f2485223d878bc76cde1a9f91aa3de01683bf705a152b064c69f88d3866fdc9e1972b3ccf2e7a4bea49249d487512c44470931fd03454fe0c308d0817d978da246107f1d1c6d6cab50f5f4738d36d55a8fad3cc89c75d972c17071483e36dbd330c8309eb58868df4b732670acc36dc6ba8e5402dd92e16d4a3ce79248dc4bb3420054bc4eb72dcd0ca07c3666855a1b4033243656fafc62e5e4affa3de651a5023f780058782ff71cf4525f2b0b2ecac92229dd993c8ee5fcfe36da8df3822ae9fc07055349e3dfe4e535359ab35057add1e15304c61d5927e028dda96261d771bc8e35dfbaedfa0d09b154161c733486c8c7412a362c4edf40d25e20d1551d22077a1c5e39a2d7edc843553db4ec03bc8d582299eb30398b86efe674cee07e835357134f54a6fc1fa76793620b3f27d7862071a483cdabc528be012599a87e0e26a1d5238a6ed90b2d9ab9238df1236049acb90a6e691814bce938b3e0019e3af7e6bc8b497ef148d1691112cb9678df5e49531c2976f0e2a9ede790307051925d9243e7103bc741293f45903283babd1aa2fa5a338bd8c77628a85ae9992a9cbe3105b78d49dd9cab99b12c516d4b823535f9551b2c422bb845f56499d0abc2905f6c8d0f0da6b3bf050e57b6a7bdb7047eea9d5ebc9f97c6b2595dbfab379c8a59f2d8141bb51efa1d9792c0c783c42eda48836cd1738457fa4e96d9ad6092f2dd43094ad87b46e32ff78e0e3130420af48db7c3ff5089b28a4fb0664ba93e6035b7c101e88bb3e0d8a879fd9945b93f4a449af28aa9108ceec72ae40a9407691fcb7fd7b048fe998425072d5426822257e7bd8727ffa13d945f76d16e938663d818a63ac4457f73def7b60c0675455a89f18ff04bc6c45b177324ccec3a23e71b09c4b98903cee6358b072804946b4e6cfc92ac6a90e24be4aca52517fa687945396bc29306658714696affe3067c847d53663a08d093a6986688885656ec80e301fbf466bfcbcd181d51f2266df18347b06b17ab2840f18f2b3f453bd1f894610e05bd78a27a3ead116cad532d52c1387e21d3c5ea829345754a0a3cee453a6ba8098c5d50e9424fe01b9fddb718d4dc271adceda9d12267df2945ee1e3ac95f8a87ef694da17e7cf3df383aaddc24bf45c6b186e8a52552c36d76a3e441f7b900016530fb2b49b0d738050e73e5374e54a5f0361976f282cc770b12d3031c14b2f67c48ebff4a8804a694bdabfc92f5ce49075fdeef309444f6a1af6cf6ccdf1de793258285e77f06bb55bca85abe623d2065788b4665f3e73ca8ce04857084ab45583b6167b6e257d6c6a01bb810000bbc9924b144e91e0dd9af134c47ada1d5a02a1f0b1d1f6e629975fc587d4e5bc47e20c8e343509f335e2303b6a5eac347788724e20ea78fd173c215f112afc1f1f58af993ca22e3e22a8313a638ae455b4f0e0178c4e5a30ee669a17820eaff0eb3362b3551e688b4df6dc7cd686ec49b941d2951c830648561ab134020565f9527b0c25a7301fa05ed31948ecdb2ad82d832f0ef913e20df9624e00b8998700fd3997385960bb46fc48d0e5cc1008c9b9bfe1cb4a8658467c4559c1cd517bce9475ea319336a445cf5be99ca0adece604fccf143862cebd8accbbc069b5aa2bbe35ed5b7f3b436580164cb58d3b40f5b742e131eb31ae38c9fd5a45b24e7cde238388fd42f6fe6eb781e178bd416bbf7999ff698a7a5f80e1e21f97d3a35ab16c66a35e07ef3e271ba3912c5847d50cf30a11053ec6495d7b83f200f23daa6a41e726c7f4af6c595584421b85d5e6a4cc9cff4d2e9cd4963fe6bcc638a2d5d2490cf98031bdeecc0d2cdd8b6d74064ead58b189838468f5d4156332cc5c44b12ddf05d1e7a12e48eaa44bc538ab9dd43e44100164066d40e318d18cd6f35ecf956830023ee4929594f372110d0313fc266b02fdfaab4b4013f5ec1c80ed8af327ae635a5d0d847ab4213cb61403d08f0ed270c46cfa6abd0db69e29f0d432e78eb987226da46bc1f23790fe77333c549d83439fe37c337f7863cefd4e2fbd71709182a39532af30f53c552f5b1bc0157c8561d687b70c4dfd0264dec387935a763f3e22fe3eb79066387592ea44c29852e0b4b17f355ef0449d471577631c6947caa1eacf50eda8ec33d76f4c35aca6c89c2377f47e9231f43b61ea914bbf688c3a954231f0b8423036630ea976e40786c295720d180ed6b5e599a439c7e71dec9701714ca78024d94801b62890d483335af4e8f38d3ca731a2d78d9960f95210eaccc047fcae17907299b1f10ae2e2776a2722cd65836e0d7a03ebd69d5ecd9f3be0774b78a8e3fdbb13452d6c78ebfcfc1668c4264af1f47506071b077e57429024de7fa1d750c72b57bb043ffd676717a902005afbf98c9cc6298e24c1b7a1f3803c0c02a32697ca4e5b9d09d91f63c4c837a888fd4e7df62c99577f90b7636bdcdb1920752c14a1de6c215573d8960a5b50e539b8b8708b209e9f9d511d30002001cf85b32be7b7f038b7a8355da8f14a95def494ff0d648b818e086eb2b2bb35f756b8c7ecb7146d05888c867542817d4ebc41f9eafb88538b4b474d3e8ea30105d54117342dc13b1cbc88cee70cc3dcc3a6a84f43e3ff6201ffe258896fc16d7274a90dcef1c544c57a25767cadbe503cc5b2fed06cd29e2ed161f55afb1b61885d760f81aa286e47eae9e4fcce7abf0040e66e5a3f08f159ea4d8e7adabcc68db533871400f3a3ec355e812f1600135840cd07a803a942c9712e8ab2b5a982caa765dc509d2dcafa830cb5dc2e57328ceded328461be78c78f8a51c834eb7f87589676fd26decbbafb7ae9cdbd8706e46ed155b4014e7d9b6ceb4b84fe8ba30cf34dbde3460e8e74c63083c86c9975a7ecfeda018a61388d2fd8e0b0bc91d8a09e1319c9a3c6fa700bb6ed96e394691f8efe2733a5ff91e501da78121503058c816ff278e50df9f5f3958dffc980c9927d57a612f93170ea09787b74b2eb1219c6e9b0b9b5ec734ca654cdcac6667d49e094bd652ffebde5703a519c3a50e68c9209bb52bb6a4ebe4b7b14c1844d6c8ce03ad6f6ee6f601e5da86252563b6b3010587b0b9e8f73910b92c9aaa83d80a3a5d3588bdf8b42ddf94b1660aeb3884c655d59ae0663ca0d0d22564edd3ea0d556e7abeda95a496a6baad68de9c02527bca0bb019def3b7c7ab22275c959b46b1cfc37e4f5e45e0cdc4d08a0b06a2b0a3baa0ace083aaf2479cb95e61495a5ad1e9c63386b326a0d74bd1662aaba803d0a02afdbf24c0c4f33f4176b67fb59e3854e99b0b24b53b35a81669b80b70d08523010f0012e3c43cfb510ca6a91b955789b411573370347b7216212d96abab33bbd97d7dde725487696e8ccc461ad4b2009c12f55ff6010b22670915ed97085ec30ab572f7fb1a8502007391d731e0ca42282c601aa54587417fadeb70e15c78e11b3379fffc7a984dad6d91fcdf2e12d6eeca21e40c665257c67c28b1192c248e91940d46e4e953b4dbb7470791312e374688a55ca9d81ebde1f0582e8d0bb433f443a77d430b29cff1fd1b87f67e7edbc5c484e4ec3f2f1c38a6f459db6fda69b9ced2f3a5449d07a6bb9a0e5d8a774ce31a2b0d71f005db610c87c382bcf9a858920a5a7a2a1fe4605f4cfb54d9c9f335061246a99f5583c19d7cfbf19784786739d812302044fe9574aeff7ad0c97721f4d5111191709df0d65e43c6741d425c22a6ab65cb8ebedc783a5b1e2408313082de0d387b09926543a66b6fd726aebde9008699806f9dabf669bedd3808c9e72ca78b9cb062f99561efb36c353305f309604439e36a136a6bc79b26814da9cc5edc2c9ce61f4c17bd94bc3a12b4f091e06064c56900d8be44de60989439495685c650d760b10252c32ff657f44ee7111a7b58da95c6260e1e18bf81e56e30fc5e00a8dac4baa4ecff3bf2445e436207240ba0d7de1cb3e0440108a0f95ee94434059505968eac2cee23209db544f9da79abcd5bc686eacb7311cc44448deab4a46f95e63abf90b8fc8011b29dc60701a7d64eb4c397332627e57b0a6b7dadd42b893bfb45cffb17c6cd46317c3912231b05a59179c03586bed6b551b2a0bb0935fce7c32c3233afb9851e78e530c3a56fd452703d946a73b47fdbb8ce898aea603539bc7278e30761223b174d2f640f02ace5bfa3763a63a53b8ebe23aaa5fe16cc9275ad2681a54a3f0c9b3897abc67009cffe3ff82ded0db41ec0368694aad61d925d20ad881fd13613531c0bd372247581aa57acdd566a543c6d9bafcf773ab2b9f191806ecd92a1dffd8bfea398bc7a9b52aed6a15627b64824b778cee9912669c16441be350b0cd2f8ecd2748094738d759a381262e234c2740e940b8895e3325b1d53feeca6c18cb3d339cee0491ac881ae33b8e3065a4bda25641dca9573941d2159996af27a7ddcc3a73b2e46baed055f4bfd7d20b144d5807b6e263c521f8614a526267a9216c2327d11c129ee6b8f21f36887bdb43dd4a44c8531e6f925246bd91db5aba2f812a45e0b5f4f2fb47daacc82a929fda7860559fb5411e355869b67f87f0227923c9dbc804f32e9686f3e39c44811d802382816293369ab211b37c44f092a8a65ae830b192781c5e7b260bdb5eaf1edee898113a7264abb0860a59079ea6165e2e6f8dc2e5e982fc305c6eac0184699cce8a4d4edc3319d7bd5893f01896324ba8463a2387af2917ad7b5238b368c861dd407dc7580babd0c0837329e6c8c513cf557ffd0033d958f86c00a7ffc301d51ea2e9cc6f542a43977441d790a6965eac85a478d6dc59661b18c0206afddda19899d986a7765fd7481445259e966fd545bcf0bb931173eb1e66dacb7e7e246d540b941c8bd90f35dd4ac7399902161fa4e3acefbe3ced8c073d95d1c2af9ee058e263b7a0e605055dfd0e3b095154e5d1e3213be0c490f3e0873a5abef612a3ae048e7f700308eed117635474ebf1cfd2a294c8801124c8b12b118dfbbc4a5e5e5b5d9b8299df98407f0eab6438b584b10a50bd268b71b280116293006a0cb86ecd17345e1153acb21d576a60a068ad76029c435b9a3e5a5721759455662159e84406718dd12cd230d985b6f18bd1f12771bf82a5a655683d4391b7831a51ead3a7707b964332b1c09be2ba9d61b9f9ce4102a18f177c833b5f002411ec631338de9e7901ce2cf26d4bb49bef8ae86d7259adc99e557c53575d08048746217b1ed0d89457d9e43c3cd144846c6e26f41ca108215cc81d819b25f27f6e8f51cb8d6766f41ece20383715da9b9e753b36d3015ad250d826b50f9f06bc4d2fbcaa8e8a8fc0e114a98e6500be080c08eedc9f61ed0302ee6196bab48be4ac8e2ac127219c21251347e5ce7837f43e8d088e88a907ddfb7094cda44acb1e131463b86215d53e7433c1e57b668e87bd6e52f397c1f188c2c88802d54a0c930b292e36474c824055dce13773b30ce8101191b4d391f32bdf5c05dc569d976a1b3554e3ddafeb4e51766d83be45f640bfe09078450254eedb96d3032e29b4cccca09e682c265891ef692e70650697b6534116e8f3fa5efa3dddb92065d8aae1a5d2d16d3c9a1030b71deca76fdd3673539eeaace76257778d9880db0491c3d02e33b89916f15c5431fb6fd0e4b11a9e475ed56b2923888d5431f0db113b45c2ef2c1a95c1158425e6697e92cd6c8c60b7e99fcdbf233962180fd1c997c079de7123be0845ecd0ca5dd0e39531f5d4e12ca7107cb34cb221649aeb4c9b07a74d3b816d9bab60876c1e99648218343a482e00ef1d0d853af0bd3a060d27f81736d5afeff6fa58f332b22aca018a1106be435c065bd3b51af7ad57e9b3427b10c2c8130cc03abb5a45a0eddcb990747f6af5231bdb0fc69b60bb595de7f578dc199b178ca2737305cc704864533145ee75cbbdf748c89f035070a82a5147 +Output = 594952b2f39975168fd0efc76e74adc3 + +Len = 90576 +Msg = 7273562c9d1e1009208644675921e0895163daa04232cee35699e9e1b2c00516b31c15bd77e3c4e6a0c359c854d3de5888ca811b7f6f3a388d50aed121b7549303dad68cd952ba3df0ce41f139098f4d92f90d27474a0c9cd90aab5cfea6fa49e8155f41ca5339379911c48910ab3d8df65a466da3ab8b36c12fa62b5074405fec35798353ce8afc22f2a939dfa02e433c53f3959a7a002fcd2768e61f0b6efe97a2ecfa7babf6b313dbbaa8b0d2aa95ed4ede47359fb3ae855bb9347352cc4d70c4804f4ad2c385f533bd7e8a28fbab90b2cd2a7b02ecdc723160bd5531a175ff04fd2ac82b39994e627b65768a68aeade789e6748bf3e01b12272acc90379dccc82a32fe9fa218a9d0bc037ae038c6cd55da2428230fe30867d423e157d4ee6079d010f31444298be54800a112b41a7764878ca0b08a0dc296304f9b6ec1904280b76caf7369f57e09e605f00924d3337c5ac5e31baa85d009035702be46aafa43a7ec3ba557a309a460ba71abd01889051978f94db874ba2615e21e2daa64112c683b9e91565cb51e7cc62be1ff1202678d4ceb2dfb0109572d99f8a437e70ea2c1ffe01eb04808df03d22694fae9250a7eeac0a2bd5544031524970c335b790c7ce10a36ab8e8c4fbc856baa0ac47a56b4f980964497f391932a034be7e8dbd45f8823c09157c9d67188010d75cb8ab4f62233f0daf09f6b7053454b9bb4ba61339d33a3a8ca46dde882f0a38328dc8a0d0de298c588cff8734964f297eaa11bbfc743c939108bcaea1c41567e00f941c26195754d860ba066b1682a22b0156acdaf59198b5020073ffefb0cac7e6742dbc65271bc13dbcb0f365ada852ea0b623fc807be8b38efaafcf26af57c7b0f420e623735856c8e1387e41ea098ec9678a57bdd796615c0d0237cb26c5065bbe5b660f646b78594aa7312541f3f518e5ca681a15de8112a7ffe0f0593e61f10a52f11e2a3ba0176f25f80ec98e8d1699abd69e1e083b382f706fa0300c00f93fce2d59ae11f788b6797b0569217e4ae9f54a51d85cb9570f1b8fe093760cfbc497c2c7d834a536886d611109f3f03d3e6f6b3c2c2220f6aec8e6ba6ac3ad800375597191eed1a94ec7523b914d0a7501e3e26602a19b9e74411c359d3c0a0f63309a5dbf85a3676e50f88aea77f47c981756d843224fd6c94dda5914294c304c8f2c954b4244fa52d0f806fab9d7da6dd37098d5ed672615b3c82fb8d29a6b265cb8211e6ddcea600ffdb7aa5bdb15e6e1d8b0a24a0916c03c8dbe6f7e1d495a5de5071f4e92bd02d4ada6e3a427b76d08352791815e2f32b0d10f2276fd514e5b5c51352c8ffd9fe8b0da8bdee448690f2f0689d98df8d4d73e28ba03610c6b1dc4074a51fb319e14af5b8b4f394e42bf6f54749bbefa0c787a131d6b7100196dc62f4503fde2691e5232cc3f4f535fe09d1939101bbb435d2dd835f657b7c1110ad30d8bbd9767ce406635f84dde2a3a615ec07dc9c5e24c007de8ee38b9c9d237fa8c3164d800ee22ffadc15c780a94612af12df3a04f0e9a0c20993f8c9b78f5ada93c1a2e9c449f061ee1a4a767b74885b467bfd2f46ba58cc44191ba9dcbeef34cf6061fa39a60826fa14cf6aa6cbc77f17255e5382ac606bc2c59cb3993c7d45da551357db60c7b88497dea397965099097de618215a781f0a2bd45d6972b58c59222f893604cf951215e0d7da6ed42791e82cc3cf2f00548ede5b2dba0c0886a05a2ef4b62c805b27018e6debdf92b944f68b0cd8a499bac54fa99b2762e6b3545f9a20e8327a69380d2fdc58434caca71b9949da55849041e2483c2e11e090e9c4e99458a12e5dc97b5db98c5432901ce9c01140bc81938948af773a9386bde50c95d564030c875fee907c046d15022ac3a7e9a833f1330fe557d2d9523988baa9475ab6d2a5a46fd9509a6d084451654bb9397d6653ed4a4ac9d586e8898fff2d469aad9a7a037dbe16ab12a0412c30e46c873cce4a20dcdb8e05cfc0e742070b4c2bd4b50a431e2f6b1481efabf132203a6962d6147c1c2a1cda2075e33d86c5a074b8ccd6d1a58fc66d5720e52edd71bb468c18736d9cc8eed90571fdd0e2deec0bc65c503dc861a12bfefe7d53876b67a5250fb763e31a7c68fb3fa7baafc9975779be06f5db4793c6e5d2e4fde47fb81baa1680fd63916e208e59714932182afe6f9c7b8872a416c4a848ac9c6921350097d740a8b2e00c961b39db0b3e4d3f5704622e6402f992abb2ba44ad89f2670a8acc76e4456900104e6b557f18cb1d07d499802720ca9ff291c23dafcb55b67fdf60a43e9fbeb1457468612356346c775cbd212040a9a72fc1db0811a1edabf7223e59161633c8ac49ab9e867afba62c1947821de6f940c9cf7f3481a20ccff6efaff6196d6a9e9b1acf5e270b93529c76c3134e883be5371729336e40459b0594401ba6f9e5abb8842e30736c9dea5f01ba5550a9041d1e45539546112a8599ac992a5d4027887b0252a5fa227dd5da4687d8b2cdc450e5b6a8ca97791e2829b515b29ad492bd6911d73f29c1a5bd94c1d61df36b0f1913f77353d0fcb2eb4c3a4044ee2bc9a2f93f166c90deb80a24e00f85710546de2f945db181206b5757a89341c5ca3ee1a1e6baaebdbe3733f14daebfea210e289ef9c2743668b9e5028ca939c01464e1f9a51e860f0485d380472e1d9d52c780e8b43c1c5f5a212ca352dcad5baece3c76f6cc73132626516889283f28fef56fa340450a6a592396d0a7b81cf70ded5990584f0658b7bb46007007950b9a3a5d551a57cee60a53ac00d7b5f9309654b1ec5610a04e2d9719ee9856afb3c8e8c254cefefa60d213e4ba7f70d286fc76ddc15cabe171ec5c55995e9fffcfef834748caa4ed6944f6c9740b53396884c645d5e88b4a42987d81775f4df5ae92bc449799e4484dd77ed2b417f78e63e3e5829096493b6ea67d163f06eb21de46e652d7b9277bacfe1e88f101b841f77e370c67c23045249add8c26e1e224ed6083fa7fa508f7f54d4864c175100491d85d5be2190ae822ea017be57cdd5f3a942793f5e9e35dc539aefe9bdeb946d176aaf995f723a4d8189b3de1443731744643c7d0f4511d7b5794aee69afe7924dda25dd9d904fbc2ab0d7aa0b48a5bf8fb6afea760dca7b60babfe48567a2c0a71f5f1445b396d5125da9aba5a413f5727ffb0df9bd08cd3da4785278d96cff0d8086c5bea3b6a21fd851684a1e64c0d509476e011f75d734819ac0aaceee586744c2797028582b3a68f86a63804029a09abc96f7f9b7a02e9750b6830dd0d29db43ab7c30a24774c57c63756905136bb7b820c411476301130c0bd6b60b976971817071f10c18e3bebe2598d173cf10ef4c05849385b90c792125cca8d514b3eb880f1ec04d878f16d75586edcac62824c9e03752c0dc736056f1c085d415978db9efe92ac103d5424a6ba63a94790fdcd45942fba35dd48d3ff848d9831a82eca99b579d012e64e5a9e09d344b58368bddd93dea87bdbe342e91cc106c84149ce989f093a867bc65584cc26769f43ac658d89e9bf86c8f19c566c0d6eaf2baf2dc342abb11202a35f818cc307add9af0d7efdbac7ffac59276dfdd79a8e6e4a2f4328c5fc6185cfbebdd014bf864c5bfdd877b8888d8f032c575688500c13001e40d9c1e4190b31ba5f208066d3a4977cc27f4bcad97ad7f23bff8959d120bb40e1dc0531e39db19d90046fc33be94ad3649edb548b74bdc34281417d86a062df4fb8fbab664237ad7705499f67245e4be75bd0ef4a869de593631783d398dd41b2f809194b02ab343daa77c2fe5dba2a733f9363beb75fa1582d75355f1214ae3121994539e5f578097c5ff4a99a46b82fd18a78900feb3fb668c259d315ef70f4bd12f5d9f4fec204026afd10e5ea3f44991ef568962907d79b65b8d6aa56ce2453dcf2d336ac5955c400a4da458e05da1fb7a4ed550241e34ec81a11d8310fe96c5f04ceb4e887264a8ab2b0c31a5317ecbe4bc8535c34010952472ba7687c6a8f02f272749b929c1d6ef039657671268799b3a19821295a556b06cd1fe35dd04430866880abc3e1c416231e358ba72d78b2a41e2d376816b97b209f498afa42144e8658e002621dc7e816063b3f3d554870e6ea1988395cbeea5e482c469ae985c5bbe99a86b777af4e909a7e7b7ac57e3a40ab64fae454ea218671d0fd86ed21fdedc4b821091802af58820628a8a6a27a7b0a1777b028c88660c13e980775705ee49141baa2284b733765db2c0d1f3c975fae39e6e7fddd82b6e17d0063a9f95167f73e38c8ce0f01f5eb0671f159d5f9b440d22ecffeb37e4e78951be2b2443c409eb685c432d8c35abd8edd9e7bf4084267eb39b050d1e0f12f8fd3ceb8d988352fb188de7d2d202d837b5a5bae222cd1cc8aeed41ebf1167ae720f6de2419e0f5238295dd7978038e4d5cf6f1ae6cd2816ba35828e067a789c46b7095903e495ae51508b679d4b4189a52323e6c85310ee80f601c82d82eca214b2e845a7c491ec07e5ae56c7ea111af340bf3b502651fce6199af5bc908a67e3ea52cdb5a5c9b35fd00fcb9dc3703ec50d8b4007aeb3e7f387953d3b0e1b94bb469119b6ef07ac63f9f6efa83f269d2572ce1e7453fe58af263ac7336367d0a4aeec523209117f1a49aaea6fc6fae01a57d2fc207ef9f623dfd0bc2cf736c4a70aaaa0af5dafd38ca675e37ac1b5afaca4dd0391956d6a569ba143ac325017cb42142ab752ab50c2f99d0252961fb1e441385a5102225b5040f3853d7c7d72193f7219d150cc9fc32b6b717eaf008fc9172b2be82be0721ab70faa663d847d97e70c9486bfd96897222755867220f1640cfd9bdc7a6f57bbe93dd9b0dd2edf4f2329c45c089b5247c819d9f349477dbb09f8d4b75596b13bbdc53aa1c4434149dc12d1dd91da06da0489224c9b3cded9f762fe00261e28a31aeef6c35a8b4a8cf810e291c35d2c58bdbe5b19d0c8bac3bc84404054d065faea01359e08cda32061691fff06ee6bcadd01aae350b3ba8342a6c3fe4772104814461eb834d3f30dfd65b1afc3536b374b9a373082c5851f6f10afc267ccd1968005da9b4863e35bb64ec0296055d5a7efd12b8bd0c5c4a22d092b151ca84eeb168690cfaa461b13726a73f647bc5122b1edae79a17d1e1163da5f7dcecc324fbe1069dac444423d1b03f39dde5086b17938e7845eb33c76f9cc7484e50123ca60ed8d46fc2400df985f68a68fd91d5b2ff8ff336d30c5d8d62592b2c90fc965e463239bbcb0ff03d1c6f99ac11ebd29bb761e0e37bc6240e42de08ee2bece2732bb545f6baee4b0ae82ceffdbe80f2105fa6a9e241ebbb50a2e87a099d6d719323d471c70e75aef17da106047ffbb4ef6cc0e6a9d20773f306eaf70541e8f41cd302559352307c7f415e7426c2b68b5743330fb08883ee63e367e877c5f9ba9e9de159f212993402d7c7a2fb234be606879f9d7ce1fbab31dce1f6c7a61a6596f8d40759cc3a762aa57f2ae81e16756bbe4908858ad91adb37eb8a7b4ec56574886cd630eb7eb3654ee764841fb089f53bd1d960dfa6bdde98e72c194c853ad5a11e5f1dfce06c311882f835a4a4c441a4bca8754cdf149a845744181bc46638f75b0a878d0a111ca6e45ea3596d84cf7d8bde597f0cafbd6ede7afe392d77fcefc550f3f85632968e9df0238a757bfd1aa1e373d299ffb5cccf2942110ad0bfeecfdaf9db5f512d13f2555cc456fa5920a1606ae41184f232abe76a5ff710e098ecf0efb27fed4efb8406a5a37c8072140cdd95100dc01125172e0d626ca91d62af4b6bfa42778a89e58c948460bec66946a38902d9419108837571c4f619b4d08932f53f41805e63794fbff3ae05d494e15abd292e79d07163565df40dd34566fd5ff1ddf788390cd1d87e8dbee61b2b5f8bb80f57e97de44939187c2e864d9a9e2b0872deffb8ea61bf56af0de00891238ef001f000e7d5a7a637c9d2734befce1caf7a52774c80ab5ceec435742b6ad00d0bbd8160bcca01164279944abedb1fad3d710c5f625431398d89a023021ce76e519e76895b25d811bee7ee7d24f0f57558e36748990985ede95be87d1b3bdc2b683169db41adbf1113a13b7afca601dd784dfda36ee50be258b778d2e52c10dcb5f2b5e70e9608acc74215d4d47ea77e221d39f0428b45af7228cbc4de7247fad16ef52d2083573d6027080b1aff78bfdcdd96cfc260c5bdbc2c7be385b2c3fe3112a22e15fa2d5b74ec8c9e5e8cd81b0f0bbe924d0a0e85ad3ee38f7942276f5b7a475a6d6eed8f5bef1e0f0dcb48283f23fbd860eb72afbbdcad5907c4e4b6c6f24f4275663a31abcb26cda71f6b6ff3b2e902ac99a4946e8233a0dfaf7e7cea374476ec5475faeafd516ab91da44ab334f0c16e7926cc3bdc11275f56671a6ba5a15830de33337ff20856c23a7540f436cd75452e5bbfba26b03d157e412791c9f066c147f483f135c61250fa610b4d14b99ecf0db5f7500ebb52807b7f2d1300bc333c463c64d555154dc3d1f9e2147b5fbe4abbe80b94007d282ed2738356065f4e003d6d4ea2cc6049b955926de0b72a4466ad44550c888ffe8f17e0d2e14774179bb219a9c00841969fe9ed174874a3e1a1567d7c10235e660fb029843b2075008d38d41ee3a543c4f6334c66a21056e6693bd5e9454d82ff5f3fd02fca3decc943360f16540fc1553a9642e48436ade34ce1e0152283782acc1b572e14fc45b26c3e2d18b7b444b80b97631975443368badd4e882e51c858f4d73117b1e80a5c56b5d0ae753f687db7bb2f6debc561d7418263cacf34de3a57f7e065179dc53791317c30131d8706ed760a6a5e26c3cf5f75b2558ba9242f640207aebc69e0d4aa35925627bb4af40b6c76875304c3b1932bcca0fa2b54b8b769f95d26e8f7a41036b58919b50eb59fe3065d40dc0c1e5b2915458137ca56b0b447e8dda7743651b958316f774cdc299e3c54de18e76635d22eabc75b1f89ee5575ea4711e10bfd31fcf7af9eafc826d28af65157f049a1cb6b5c2301aee2dee205ca09a4b885514506344077921a164474ba60f5b1092d896ddf2ac802d1f0ce6a108bfc85331c47268fc8be8e4286587c29738ea4554770b89d451aa5d7c29f35564475b1a5bcdcb052bec00ec1e57323cc0f8f348e7e35be1f18862274d2c8d9e3d9acd85d915a463589289e28b248ee0aab840c45302ce0ed0b76e3399fdfda71920e53bb58644a90be54b6d77b3e4d7dcde975fa1beae38f948972868848b9683416de5f707f500cc4d0d36ebec7b49ded4c1c1d8fd4186f5a1a5aec2a97e9400652b2aa57ffd90243299e5eeb79d5d3900869300a9d1214b2c606fb05420c81af4e9b3c9d8a5809afcb52189fc903b74ccad7d22a9a431834f9010396db75b58566d276af935f9b7132a92c3a39d0c179f002644e502dd2674fc3c66dc8c7442f37f2f91caf52201dfbfe1a4940cf8abe045377145354dbb026d993e89e73c6133e97345332c2402c93eb634b82526b7f94557aeb184aaca61abcfc95c0fdb3c7f729a8e1c242642376db87cf530bfc351c82f0511361cdbf87e870f3e4e785c3de14d746d235148921690833474ea575096677d4d94ca7731ae691915ea3b47d7ff33000e72cc9c43ffe6515e3ad0fc5e76a61e4de6dd2573021ceecb2c4d87b394f539e759c0c6b0f161ef59ca9839e33194f1fa747c6e27434996465cd6a43b683a28e11f554e43b3a9640f6c6b97478fdafd3a85d0d9b339971a70c2fd24d542abd3e20eb2bd630f67b86668719df258204bf66201ee80acaf812fa6eb91ebebef44d36c009b77cb43f44805d1d34d540de117543635f66438d36d4fc872e42caf839d82666ee9b0e41f9c8cb4c1be4b4ac983a197377d28db181106bb5028cb939626980dc02086f3414a4541f0ae047f0b24914d7b7ec240590313ecb21f90428758f61d18841517633978a1e7864853ade06e80895ff80e9e2bbe84203145655e1ae3bdff7d24f98b536dfb2eacdf6eb9a17e57ea8a93eded714fab22c6b0a32153a915fc737d40c47f6c784e8a9179364e0bfb25655b8750bd0d8841469ba5daed8e4e97cee69513a5bc40ce86261c2dcf5b94c25a1781cef741440419cc1390cfdb9058f628a082aea67a360a65fea50cb6494ad091866f073306f4a70b944ce1d702c8540b081880724f0f7d17c8a6ec6642442f8f3c3cd52bf7975822d0150bcccd6e4e5676dd0468e6df470421395ab2a838deda4b3c49713f7895d770f3350018d24dd391da22cf6831d0f4b2643be1a3ae473a5c784c4c051cc4f41cee47bc0c7dba480216c3f1fc8a7faf2331783c5a2fd17617f6c406710d4f3f7b0f2948d1f6fb7e7099cd14cb74befc1ba8f90bf642e45823c09be5add29c81365dc4ec8ec57a3d846c2a81fc76f5a542d0a6969e70e8a629deb732def31581f4e0fef06c739d4ce696c080b8198a7041b167247b404529d05602342ff820095ea1c09b9287ce753d1f795827e3e626c05325feb53a64a9c1326235c66a27df1ca7f3372889747e31103b53705e718f66bfc66d73e6abeea37ac17bcbd191ccd5fb7d0a5802f6306c70f0b7bc129372dcfc34b7ddcd83bf1f34064f67b3c69831a3485d4879be5393477fcd3286b598ca1255241c7655e5dd6a19f9c19a2e0bdaa93a77207633af519ed0ddfb423dcad60a13fe586987298423e2c1030d31ed75143da20981bd0b4b7ccb2f3ece95ceabeb558bb82f8351bc6848ef52953705aded38242b23c4312ce9580a24b3236cefbd0215654faf252f4036cad9b9a81c273b1246ade3b0e79aed5fb8d578516e4b8804e28751756f83b3919bbd01ecfa8e06b550b74aeaf63d91c87f78a5869a6655423a45be3cf560c942aa29f56b678857088a73dfd826bfdc7ba835c229bae92ba467c71d6b806f8b313f431e8d2bbd35f33b072ae33ec5d7607a3558a4947b1312b036f66cd8570046a23303bb0dd7a85ead9bb37308fa88603fa0ee5ef1c514745cbad2a6c5c1306a1a222c5bd77bb831265803f14a03f9613d9e0dbf986e36b2b47a37810f552483f13822d74f536e54ef65a1c3cd8b324cbe553c2f531f81b5009fb0657dbae37a6d9c6c953e07d1b050eb15535938390a08f00316e880fe638850c2bad9997538d77792ff6b3fe92b9012e808b6b218826395eadc2038b4a593b6f7e8e999e3a477f01d7ba0a2bfaef901a149aba2d79b196d7ae9c3f0ac646af8d657766334a594309473a3d85a22d1e1c88001b07c3f719f3aa6994fec865640e770479e7025775e7f4e3d8ac36d61d9e51480831155b253b37969fe7ef49db3b39926f3a00b69a3677436600079f112816df0c49dc425b36bcbfda46997877bc13bd90acb3fb027d24d56011b2cc9b423f3191a297612e4ec051beab6565ec099bf298af9a894114b4165161b7030e6540ec32ebc52c111be8d8c786c1868a9c48bde1c32305f8957b82a46092c70d09b26b5a85e40796067cd18f593c7ef5fc909c0677fbe57b9801a6e3aec48cf9b80a3b82f172883f9712b860a344a390a30a09614e73bc6c74dcff999ccab966f8bed946bf0f227056411a05e56898ed082b72aca738df2db463f930cb23f0c73456c1105f087adacc6e62c9a016c38dc46b842322a9d241ef4d2043ba4eb7bd03588f6a520cd5d152112f3653ddb7e54040aa7f31453a3b7def113cdad9729ade4aa0df286ad7f69fcfdbd6813bea761451521b63997b9cf8d028a6bd22b5f33d8381c952c0f5acfe00f524a8afdfc2a8f417823a252ac8e876f2fbc1d90658a9b9cec351adc377054b079b4ab80c5d86df673e1566ac51b569ecb6995ac83d9b53c457b57fa5e74e048fc4e7d2f4a92649cdb995dc94c9f81f9251942680148ac82ef0feb5317020c3fa1bf08f3d281fe9b78f2c055894191e607752dad26010ad5b198deceaa4261fd31b054b2a6ccc25b129586f8c32a0dcf37245d613c29569c54bf38525e5d66ea73c86a560f9d38457129b79944817d1b7ecfda6d89eb1941a12b02c97d7ba46e31b051c55319e9bf5c575c20526f6a32a41eadba566dda2b5d84441a4dc3a1f2310f11e9ba6a5c329dc77b74361c5b7c71b8dd2fead721c25374042d175ee7dc3c8eb3a88eb81907fa201f7f38afd861ad4672b38f52776e4aa14cea2274fe961ad53dec152aa9a43c0b4d289f5169491f6f75308b06629709b32339b82c6c86938bba9c99e993732b2f0f57b529979c90dced8d271a6ca5595392021faebb166f582fa0601c5fda8e356cf4c060e9c2c835e2b2abb61d0002299f2da02372ad75e6a6e0b2ec96432ec46de8091de8238f215d875f04fc10ccdc55a283b31ab26eda2643d981bf15d4851819d8891a27ad4864f38a29913e7f15b94910853a8f23dfb8b31c0262b8461f777075cc0937e95302e1765064f0e27bd50a8fc25aab599b6318c29808944d3b92d5270d3db90cea3c36699ffe8fbeb7b0ce4791036edbb62f58146a3811b0816f3137743d17deb41cdbac3ee684db70527b811bbb4070d9245c5aa17a973998186aed2a91b7275aa9b88756a436014fc4fb85870d89dfac4b0cdc64568eae29956a9157c103af83ebb5410fc10cf8fb0d349bfe7eb1f1d6ab50e1dc555ed8dbec176b2255613ed8ebbb2490c470871d35100ba898206e004c11b330fe6f7f57275bc3b4d63b9b01b0b0760235c9785d45761cace23f1ed137359889d9296b454e1de035ccf88fa5427e808c9d7e9162444d1733e474c8f273a6d90f6ff5634b67450bccbd00e26caa0b8a5782f99bd53a7f44642728360a084abde9473930147cba8ca133bb5c00ef41dc8b6fa15d5d2ff3eb6832c42ec2ff0b8e40ea5e9a469466abddb591c4061906bd4fe9dea1a32c9154668dae79c25fd0923bdecd698ab830b0a8cceae429314477cb7a182d4f3841c787c150dfb130801303aded6587ef00e229fe2e820f3ee25028a9b7ca085ceb8bf3551127377b0557bfde2556e641be8a89d6c5676048c8918efe2340769f77e9d1d1581bfd4746a798fadf034eb652f0efd9175bc558de812402c5574209cd2949be8f81ab9c2b4ab68882356857a55c84918c26e5740c6a133c03d714a2d69385a31d22e9829c8a401076b4dc2b9d1670858d8f6aa73a92823546879373786eaa086ac65d0281ad5f1b2248513a2365da3d805ff9f650429a73f73068839c04e375de34b223c2fc3a30f0b96f8d2093ea42cf5e3d6b36c283807c9a3bda2b9b5673e1368eee48bffad747cedf2b7ae6ca1be054db0dd45a64e43f8db3810b7c2b89db929a69f93ec6988f50491c1ba79f501d097ee412526525a6d1787f26ef8b4034117d9ebec0c7fc31085469e91d946aed45ccf9d9f1b0cd1b2d33dc623b9e1f547bdf95808f248a93bba919ce92cef0b7cf6d530f816a64056b8ca1a9aa8baea3986a5525f106cb1e34f034b14c786ae5700afa9e48be70cc512ad5e2827b758a30c4e6962f95453a3ad0c37994b860def04bf76c8fd27bd7a8b680f50c95fd6f0a9550bc90f8825094f1cd10b2b65b0a17d751639dce0c9037d7aac99002cdbbef869b7e5e580ac60bfc5a5dee9ce3d1ac57106abcdbac5ec8365c4856e96dd7a73ed0c3dfdc630667997348908f7e9b79723d683221e1a9217a9e59a5736629fa66f7755dad1776706f1eb9dfb9b6d044d1df4748c736da0b4c76e4c7c73f1bb0a6167b1ef2ae80ed276598244212d8d61bfeee46f530574e54eed2020f801490a537bd6bd4ae8ba86850cda8521a1bf7f9a24574d55989b2390d099f70b27c630c61238b7ba1fe67dbe641b00f57026e13d434198c38d8ffa4db72e5145cbaf1829d95c80e0e43f3282fda87a450f305109ba37f4555adfc3c61f51e23063802b0f2fb68b67ec114f6338174378d578299007aec26396e72aaa67b90c4385d5e3e683db49a78e091edfb1fbef19797ae550aa1a9576b852a95b2ea85207b91ccd30743f4e3840834b68e9aaef9f51951edc100fe017358e9a68e2c435f563c1617d8f570b82aa1c3f9f4dc8c782f4733082d80324cda517a85412712a852c602b4e23c6f42f313075d36cba095ce881b4f57078f5f27d6a4d9d3c53c23f598594f2dfe3ba866c7c88b5b5131795943d369467e5b63e2512e4a4dec08faca18e293c2251a130c23ce2b6b55884b58e2210002cedf7f9429e182b686bd5256af6725a89755ab6b90e0e46fbeee3454ccceb994dd63dcc4c68526167aa45623c5aeb0e73e33970d77c85e6d76a95cd469a23e03952fa1fa90e2e176b0052bb8c381da8800fe007a3e4c42706401ea6021643757dd8af7beefbf58dd1028fc9d0fa64b92c7fc0d384f35387d704006805cde4b999cbe06994be536538254ef5b13e5ac0d7a77e7d1104ae79e82acdabd82d623d0bc11f5120c1d21e0eed22c793608a50201b5b5cdeb55f8da828f8b9efb15670424ccedb29a2dc18d3cebdc7fdfd5dd7844ffa0b2471c123a582f44ac2f63be3dbc3615ff5dddc06154e427f57816fd772a9cd00a8b69dec4edd52b6d8787d0846c999683bef7c3651e0834646891ac079dd66c5c2102048227c8686b694b46e01c3b97c62341759f839e2c54170f933185f39d3170af2b7cef52242e3e75c85ab466414ff5857b1969ed364bed575afcc83c8a10e03afbb92eb9873c6fcefdf91c60bca69d8980dbba3e7bd35233a8714ff95c81d9691e41ca46b81f621e8ec53d712f5381162aeb5cd92373ae69259602723a0cc306391cad41e05f812d22c6fde3c2de0bf32153390655b469c27a75c9ee4d3a06d7f753bdf2268233c2620545fc9fd0a2ea0e1b370d391ceb064f168db7bc920aa5fdece4a0b312dfa7f689fe06ebb1adc199494035f8359cfd4b7f3413b09d3837f6f20895ae97efa2855a0e47d107964169e73bc8ba87e56e17baa84b51e1f657886a13174097ca7cb7815f08775cc43227fc0f0ca6982c235bcfcfa6c6e8adcb5b5eec6f919cd8fd3605d79005379f5c7a91a64ae5f3dae2bec4936e383ac65c18d57be5c82d81eca7ee6029a4218f860bade7c99e1d5874e8a3dbe9ce5da7d267d8a8c00ed32d12b545e1197ca1fc7a8258bad3fa9f0da182748e61b1dbbaf5ef6e5b4a8a144438061141a9b43f4efe869a07ae21026030343d961c083c668d599f7cc9657b2e24425a6a217483eddbbf7cb6a33acebbeba508da63fc0612614c73f386c68d539f122843c9e6f642d9d605b0fa6e8985987edc427db5c3283a71f3a8c9d6d41c701e84b4e82f1fb3bf733edbfbe4bd250066c2b6b45afa0fe0702684dabcd7ef610d75a5c87a86a9573d2d20eec5f105eb06c01e4e14342f1bf0156d00a11e35388704feafedb48d67dddc681a38ae8c2106e162940af8f0b399c64c84ad3257be3638a7e6b030c5b8fa5399c8667b22690d2a6bce65ceba6f15430aae079abbbbbf1989b5ec82bb123d999c4076e02f8cc3a51f444c3ef51809948dc6d8decbf7cdaf8a63c933d53c4eb55aca91651b53d159673de8d1097620bfbf144787ee390603933a6eca7d00d4b2baaedf934f83df4e2c03600e5e5100ce87e07d1c8b4a121c8d8004cf1a247895a33387f131e7948d54dcdd7e5c7151c8cc71a2250cf39a025e7eb2cb1371e168ffa2b2082a46991dc81187a76c9ebcb67810dd2ad8fa46bef07ca145d2afb733b543875ea367950671e98513f49fe89f720556b45727bd5729c2f8c5bea6a4fcad5e2f7d0213315136ae004a5e3d7f8ba298364af144a8d5f397e0d33f1d4ecdcf3bd1edb0121505fea61fd210402683f011a5750e17ae41354581f8bdde5dad03229634162ce82ab31b0b357470878d44b7cabc166a78a2d71202bba0af7aa5315aa6dc9b2953c93c53ebfbf0944ab486d3cea77103ad00c0478ca551594dbb412c286da6d0fde88197e8aaee7617fd9eadd8be87aaf663da2b463d36a47df91be0446da1ea8f926a2e2accd5dc9472748d118ac129fbd40c08590bb857b367a7be2466f33fb0ccdf62d8e80d8f6c1af1bba1928547635a3e24ec973f3c960cce0deddf049709a0c8791b87fe5745fdfb7eaf5e3ccbd7fe58c9286a3419cff07617ca613cba41150dbc1a3010fbc8247b2063774f7efec7433d350bfdb7051b8822e173037001339673fe6bab459c965ae7e664242881bde5c83a0204dee196ed775a9dc180f1034be6eec037fb695b7e1c60ad259107e827b45fd8b0550a688b5e5e67deb3b88c155c13b81ce6d97cd106f8dbb9803951f147ce1468e629994c1e155ac2d1ffd7da1f94dac2ce92003aefd77547bebfff2ccbac3e9657e6321701a6fdd5a26dea84759aaf917b3cefa01d2503391440fabe8624dea171e839d34d39d880edabcff9a74dbef2b48052edd9090ef647644b91c15b7df1fcd8b96a4bf874297c608e23fcd48f4b420630086bab1de622d4f98cc37ca2eec05db7c34309583a15352de8be58aa05ee7591d91b34b8716c380c96d6add60085203dc67d940c1981d2b632330098897e757d4831cc67ffec378d994016a08f12c9525b40c2193088de30e8a5f5e03ebab0fd3df49ab3f86b7a837c4ae1880330ffff6ad6ba06e5f102a4f25a5e0a8b6ccb18a0adc723c4b1a9f6273c3316c4a76a4bdb85a55ba286e519389b649eda5a71d759a57a40cb866bee815e37d33a3fb33e9696aba1ce0d3097a1af2f25924d48405021dc9076b2687474f71246cdbf82e08451f35fd04f8a2717e0e6271a0df85e6e6c159d2bfc498fe851eff8e6f17e3a8bfda61d12149ccf8274b22adc622a3699cd4cef532eb648c3b2f46feb9b505394e3eb64fb230d99c8b4bab83f1486d2ba8baa0c570e56a6ee6349354686a033884cebbaf346868dd2e82758abeab339baef567e9d65d2b151ac17d25d7a15e34d7eceaa6243afb28858209388ae5a737f4178cd8ffad171d4d486cc9a3f576acdc2bbb9b0e32f10d24bceef3f262289f3c93a7f9497fcef6025bdad649c0fd0ee5fda7146eeafaf990b58f6361bb482fdcec21e1302fb32dbe5e5fc225ae51e9a9f54598a2cd698c3dee730d654b766849a3832760475422f5d25423e41805bb8c851f9e5654dd23a0da324879bd43d7273c5412465132842d5a6061f19898f3023f8dac060bb65e4dfb35ab2b6b310aea291d585ed7cebfe958fd02daaa7c2eaf8728381e6c95aab9e405abd6efbe6206ec3750164589349e40929d0bc83fdcd8fe77c92bf1fb8769071ad128b54c8b02183aa009151290d0c3c977016c447c32f7e4e59b364872cff6fda17d568bd4602fbfaea3d0db331534fa4758113a9b4215f80408a40cfb73161693614dccdca5850f02730343c9d026bd847c5182a86aeb39aad0b5d99fe6f70e2d60f5b00246cad111f326fc93960b7ba4eaa7ad2221ca2250aff60ece900c4ce5e8f8b5f3c8638e73b0b6664edb75cd2f3f8e2a970b353a8be2ef4d1602e84b5385c14f1faed19f9e182c014a14d81a89c76f7b858bdefab3160bf4f4b3fd91dcb3e9fbf47eb79cf7a6125e23d6c4fc5b3ed6206c3809db6cb5d696e927cea907ffdd4cf09c680f26f6e3fd4a95aeeb09e25ca9b97458652f4ec9b361e2de095bc605a2b2ac755e92672b3f5cd5f85f1c7e6d880be54d10614d7fdb0d59ae2b5ea30dadb9036213c09342c4a91c53c1194f834bc1ef5a75b93e436e3a00a19767135fbe5255b0b747f7e50ddded23c976f228557a17030d8d9dcefd868c7ac63ba376653cf7d3c18ef16c7b59ad0ad0bbf2d735a2e0c93054e86cf951317c4012bfec22d78e6dbb0c3c53adaaf05b7f6ebe2a8ccac13f96a5bac7f248a4389da2d51b87907dc11c46253515503ba80de5d06c9b505cb89906614a68db692227529faf04164a806dd3488b32d8036334e7c64811e207d6cfed987edd67e4eb85a85bf118c7792e182a1 +Output = 55b1246cd46fd74ba6eb3e7c172ce240 + +Len = 91928 +Msg = cde6c49de6fb9e02197f00520855d02be9b104f593d85cc5d82751811657494609ff0c06e35a7b769f4b8027929e41f24391999a7c93c8ada14b69ab41dca56aeb68a7b943d34f4454c92bb82802a32796c473ad5caa5f546ea521358d40a7e01a287bfe2deb8335e200ea4cf3085e908c537c765aa68881e63b6266210ab56f3f47721dc92c7d11eef8a62c1b38daf6cb459a3c9f0eadfeb117128826c239de02ce735d401da6a023ba45a1c71a7f20fba2b749536a359178411be1c3f19af60ac46508ba4666a9264db1f11f37b6d8c573bae39c438803e3bf63ba211e407f003132645e3026f6a2b9d0644c16e5e4d1bf8b53a51f0e1b999bd45a67d193418b1dc1ba55624c4d3d078c44763f760dc68e12e194892fa343dd550bbe92fb035491fa51c76442779f3ecbd7c43bcf1b4ce837d492065361888bcd134eeae08f0394c573dbbf6e3c716677675f915ad60dd6e276c620e21f11af26bb3e60aaab3f2f0a66b9fa3a635b88773a6fc97d06ae5ffb0d595e44a38550474bb77dc120b069b1738a9d0db604aab3981b6ca272da8c6ae27248e1b58d77180be0c78db5ff4aa2e276314efb15d713cb8b0130e33764173d3a67211fd12b8142e2c87734d4dac6fba43d67fb35147f1ae8108f216defea65d9426da8f8746a3ae408e563d62203063d49bf7e0d6bdfcc5a2126f42535cca476622b17ab5abb390f0e400cae29424a68ddbe4c45e31b2a08bd5f24073fa340394dc53591e65c888a62f1f504f76c104e82cc2c84841b7c1b6ba178ba1459824b8da1ca531f356f7e8c5ee77f9567a016bf51e77257c80abab455b9e7bcd4b2d4aa299e980e2f351314f1a9c70a1d42e91db545b863081b0e1fe1af3540fe18fb2ac37809b9302470831105855e743eef23600efeb1c4f83f34ae224da7bdfce997d9214d2a2182be6125c1619a56db4f59bb0aeb47e5ea747b24dad6f9fba5c678d2620d69eb98243497a602c5aa6232472c01282f5137d57dab9e793e9f5cb9561601f17c74aecb86ce7c11e7581bbf761cba5d71f2278bc1ac38de7f9169eab80dc6a06da60cdbde320b3509474e1f6df4fe3113ae04becf8d6eacc4b91482261f7bc34468f97bc52b1a1731614379b41a954c1f6f149530b8098b13ffa5a928b4e60107a1bfd3c221735e6a8d42f6d4f847579c1ca1396b93d125764b63864734d103c03ba40c5d7cdcb3b9b392be54f4dcfa939df1d208888d1ff48597420a070271761df14e1ea41ebe28bc7cf8bc781bdc0bda4c8790fe072495958904fa9541f2322fedc08e020126be8e48cd95ebcda60cbafc808a5d05da626381f59d46582efb59e28b34fc4c9483123e6465b5baff9f2848e67e0c50e962d7c73d7e830dced98316d698fbc9af8030a5e6b73eaa90ca0977e1f475b0fa9edaa20322b22a7ad495d2ca43683e20bcd1c77a10ed65019746d29875ffecb51c525c6f133d75d9f5775e8fbca9748e3fdbea49fa2cb2f90ec7a1348812cec1e6293babd88ab7944312024c8b2833a21238577afc635b2036742cdcb6161cc7044588dcf903b752c64c062a394b42043cce56369ff8261f1735bab986739f6e7c908a2dfe0e3fbc870eb1504d7c6b5bc5872ea56954dc9eb9f394f380921f5f58f08bc47015157a8d414de64f22744fb64929eee4df4544259403b12cd96441a04fd1c9d77f0233e1cb2016c8a4268a16fe8d3a980128ba62024d1b13b135bd5a94a565b9b4ce8f899673063f6c49b1ed8da3b00c234ea87823ba5abc835b7b90a74fbfa01c41388f888dde3ce1a56f44deb379c8ab80b470e19496afb59f2249701701131f23d3fa8bb8c7476b016922d905bc54038489512321f675b1c75a8ed645509b253b0bd3863ae9e972274a8f66e0a2399122cd23d0aba395dd9bcd66c420d7bf96528521605c6ba95eddb8936d8e53febf2429eed278c597a3e521d91ff1bb07da30ecec0366751098ec5b37d655f62bf45044bb10d083046a6bfeefd00027fb599de63d56a031a5861cdd82897eb3489770c79172fd056399f60db1bf9541247b611b1b4151c5f09134e37d6e50b3de124a5979e046743c9a4ef526d4f83109a943358eacc3597921fe182e6e151e74cca7a37a42f2f818d43b5f56f8702032490dd99e7f3c16c99f40219f6f131c932d4e4c9c804ab87daf85f34a11473628c585b154a205236771c3a9d85a94d3c29d09fde78396ddf693f3580908c39a72837465b7fe66a9db014f56df18de6e89849e5e64311e8e08e84f379bc62d7598eda19dcf79a6d0aeb6acd0be903913704ad6161a7329f43d165f370932cdee2369d600a5fc0fbf67f7a1c07da9efeb005779ce123200361c85ec015a33ea2e9a61d9364070e79f8e2ef7ce224d471dc0144f2d5254ec7e2d9ebd3c96b3cd5c853c73e8a9bb7797abc276a1b76388d139e71fdce4c233f1f9c79c91c699bfa16d626cbee6c707d0471be6e243d2fb31f139b382cf651db907694fa8f1cd0625d83b8c5f017adf72e9a10f38cf84e8627273d1c81c24f4fedfed9f281f36ea0f512f9b7401be46a41abcb94c6260978f44fb4256d2e6fee70ab954ba58beb5875da660a4ef7a868e61d4abc6044e4fdeed3bced3f995859d0f373605a54cadb78608a498d296e5594651ae4dbd365977f7993ce89a18cf4876ce0cb20dc91cc553bd2ff7b2f9ac2d519b8a899600fd83ea7f563cbc57240ec8e5a068991b48d94c2dc96a988d22310b1a07239695832a4c54e278673ace1a8ce6b8d0502b7a1cfac03a998a39918efb36ecc3c6db3393a780a943a3a914924a381d913ae1f9b5e4df492b93e53f6baa5803102cbb55e7826b7346798c3d9f8b4397545f250fcd93f0c0c9b87975f19ee612b3d21d304d667d0828f0cb9268d56feec1c8e0028c8d5d651a03de7b48614ae253c0ea0deeda1e2f92114e5b16b324e97f7cf81b195c8c01c77bfa99977bea3b99fd0834f266b6b22ce3fde0d0aaca51378357a29d87e75b7728b617067230e52d9161ed8092ad579d6ec168bf44c9ee90e6e3df3f97d43dd313fb3cbfd083a7b684dc80c0e76be78eba803c0a08898833ac86192813bd6d8243af52e71c4a4addde6034dbec5829a6d024a5db7e73e7c7dd279a7f8309b42dc0bb9fa9dfef9749a8d753f92adce78eb793e9572fedd2f582aea86d7020da7c93086c2ba0d953a2ea2823412760e7ed77b750a8a2601365a1028c1a616aa716c37d0095e7704992aa3beddc6d4af26c197624f65f3570be450d8eadde4fe3a45801a5103d1c40bff2f8f8f28404d0b3a3baab68efd2b2a973b6f54f6f3755cd5b7ea1c42845ffd1c9478eaaf2f44969206a2f27d9a1a1cd35e50b279d8ac63ad3db3dd832534f713810f52c41842536956ef65aa50804d39282165eefb0fe93c800c174e3aef847453b76a1f81b2bc40cae482adc71a46293765f1bee11c57f43d575c2c2bec2fafbb05931a02024b88c116fbf05434a233ea72e872015e3a64a41a0e757ec75335f57e603c0fdd9bd1e81b240a8e6bcbd9dfecbca0f251fb1e82f8c0e2a9ed8997b186540e0190f79c9e658d64ec2c3d9b8637d0b43a7424822847f5dc43db4d556dc1d0f89dc91949526aaa87e3f261f95bf8d72430514120229c2fcac32d18ef889579941ae26b78a2af0dfc0c5af363ef8432897a55db88f069d146ae4f76d6a095b0593f7958ab1da72a29cbc24c7bbf8e755c7f1e5e1d10357cd87baee19b342717c041fa7b4111e771a9b8c4e7912a5c1205b4f7436d1093a4e8a1e7d3bdb1ee1261e8e24deb2df496e449df5f54de919b2dc29d15f96fe8cc0fb776e7beb84f22a68add4af9d032ec71f57e1e374ab3633d2e6c50328cc964a632c8780ea5bedb16ae27ed0d9746f4db523d9e98dd361cac3ee18ca9059a01548a791f3e08d1ae2ad96ece86e1853278d67a6b2a248e29f39a9925ed58ff249354f537bd501c1e6b832e4a065d9247e308c10e4baf401dbbb7ffa64ff54d30daf8c97c1d29f2ae4131c2fa0c59e287924fbdf28debe06a6d2d81a8717928d8940c6236dde4f9d0547be958f964ea941f31bdb25158e3827041cb86d243066e66f65c02602f96171db7fdd15e1d3edfd2453cc84674ce087dcb39dbe2e16a74cc4d136944585bf4f57c6d1dbad143dd6400d79ecdce046eddf0591233e2c97e2c8734d60afdbffc744fd378902f9e0f4ceb0ab067d33b282977a5c435a5a80d102b1cd3248e46903298bd8c7e86a207e56a42a7a512b6c6e8b7bc5c88d88a840fbf47db1198644288ed87c3b684f439d6150beef60b1bbd8436e9557dc9e585839a5268629aada61fb4cea9089909278761e2f0db3aee9e848bd949b5184d841462a9059803971d4f94fec6c541655381d75447d51083cc821ce8a39f3227022aaed83d1271952a90f494878cfc7d404debdc6e742a9fd9d560b3fdcca606823eb54c7962534c509c6a2c75b048c5605425f7ef28f77739270db7b2adf27076e93c923518270111ca5c231bdfb4e2562d0c131473f5ce8ccf6a505cb395d97282ab361aa47b7800934114e48bbf38744114caa8e5a3fa27670d3a668e0ec5e7c367a47487bf058f9fbf8e6a24c64c5d38b68b06ee907eab666cc26a9ddbaa59041859ed42603e21383ddc073b68a2636c87e0a8ff39e08b461f84d3537b1b38cd23e2df550d766805329a564014cf49650f4819a80eb449ae9bfe2b5f6b8d299720cbe5402562c67f3455d1c3691751aa934dd3799d6e68d8489afd023b648dfa757179844677bf1ec97b0445d43f3eb5da4e60d444735b7bcbe7a2fc5955e85fc88016a1cf29d45c58966847c49b430f4ae63c58b267a4018c60c79e43c5cb3f605447294e0d88d068246839d8b0112f4b91e06765bfe5020092d5788938a931f37a857b31775ee38ea19eac7f121b9e72cdd790ccf060d5df0a471ba822f4afe86f5c28180bb92e228a76003635e4c547169c65568dda256e13b6e81f195031b5bf25a0703f4a18ca6b88e58c9fef4c4ef8a94590fca359345b8f7e6c802e4ff1c68c84c896642becb141cce0b4ad8be0e078b21ad14ef9d85e4b3f0efbf15313320b358f85b9e01ff82b16d118a21ca36aa54b42804f7fb07874ba74e14bf3906dfc4343a19dddcaaccf53ec306f670cf39971a6ae2763535696613ce480aa0ff70a3e735e826d834b892480a058039417dfb5c59f693d47651ad3d55a51ded849af779d312a17b060f2d93ccd1e6acf53e2981df87775f3109c72ccc7121a8ff2468f3fade785086987128f3b051525144c991e3de495ed0575ee81cf53d5ad7d7a05c9493d0dc1d1d030e65ebe9b1be5682954c44325aba04177a2b799a8a747b44bc887ad4a933648e4d0cc9d553a53efc9304ff5ada57d89ce9e3455fc03ed8ff1cbedba93e3137b8eece943ec06cc2e096f257e8660f9a953d2ba0b5849db576831efe7a237d5c29f895924b7e7dabd6a3fe9604864a14a97fead4c45ff9db54f9902a6de1819b8a73480d25173ec085c41002d8c3700c81b60a27b3d8ba133f86fca8aaffa4be8368cf4bf31319cb960010e589a4e94bc5ea72e2ab784823df334ac15a054d8bbbde1295def87592b060e68542b21d991c230a4cd3c50bd3de0762baa57be6ccdbddf8320e50b9df7cea7b2b297375bd2e6abaaf54496cede10b2cdeb2ead6478a6d6b6caaa24f78a2a8b51e66715781a4c66a51558cd13793459174aada85c571975389db779e25c9a27da822342cab2640027cff15a37b99bf77c3b4d15b0d386296d2c8560eb099dfbc0f85425d045bdf6a767a6c4b7f9e81c814f959c0e986d71d8f9ac707dfbc67589cb6255054ecab8b87ed192f0c48916aafa1f91c1f03fcd0087852f17cd7423b97de656f6380ac4bf980a4b9e93ff947dcd33ad77858db97848b80344d95794b48248821f8c0eb93125d9650e02cc145e3b7a259bc2d7c5b4dfad8381b9b1272f6b118cddd546f4c1ca9775bb7b7ef4e0b76bb0ab329e502a9eee366ad941896ebac9dddd8e3405c5d8fcd4437878d499e380d5324f52076e18f2724cd2690a16d3e9db8b21567ad1e3522722845a21de2241e9ad939359d3c042edb41f9847ac58fa2c63394eb25a6c3fd4d529837b420637948989c2a61047680f4d2b6fb093bc6336f2205d4ae3f62e73d7c2953f59f1ca3c62ac609a97f0ca3d54805fe36160cd91b48132b2f2f3a67aa70a0fec8a978257b5760da5cf7ef21e86b8d94e9a0881a326e64f78fbf7205fcf4a44015849f88cee612a364b246829403f7c50a1f63811c5aa040b83732499bd1dd22c479b85429a1836ea8f93a4c40d7ea9981dcc49341d5700e91dfa4bcf0cff4abbed0ec0ff34e5c421013f30956b00f19361fd4da0aa67c6a02feede561b591e4e9d1624393b64428844a98403d560e4c1230badddd976b5bf3de384c574d5bd32ec4437773a1e426ece4527a5d918e3bfb569f24236ee5ea4cc5ab7a3b5dfb8276f0b634fad7e447302a483e1e2937ecdadaab3845f4941ef5fc6ef673ae18f9a79ee401901feb903964a314e8e5b369980405a0a9f11dffd7cbaa4869085b3faa16f4669d42a10bedda8a84238ea7ba1b1cd6e4b92d2b95d87987f983326c5b68a00feb8909afbf35d3261737ecbee54d6a458ddc6f64e9e1502c902bf6f258c8845d19bd39bdb4fa999e548cc79ef415367b2279807002db96c295c81a963bb10905779f9d72f322721bc48ae7efee5ac7a02bfa29f8e8ac947091c167ff0e0d78308e98fc778396a7c5ed9a145adc0666db30c630a4a43e925f0b80a5d5d9c31905e4111d736c3f7fc359221586c5005b54ba455d1b3d77d8b68b6c9cc2a2bb34ad0370c90fb704443e908cb31db130ee3450df7a06bb41ad9e99ed136c73dd114f731ec8f36bcc3c5d183eb6c4a97e67a37bfc4d0c27835b3fbe6bd47b5311f814ba84e2c69081b1497ba2e625b3d20dc8c204a0d6882528c0814ea5984b3f30246209df312f0ae929411e0ae8da1429ccad5f390be60e5d4a6bff4f6b614f02a6f31486db4e4f2d26f01cecb5232c03d6c475e0544928410403e49a9b9f29b6c2f30fa06df838c468120352329802e30f90af5f59ba5a1e17d1664dd10db594a2ec61f58e32adf8162e3b050a407f119f98737dc1408c3aaa5ded32b4b2dce36b65724de706960f59cd2ccde32389d4ad642a0135e4a6dfe630e20fed9684ed48e7aa701f7bdb5258763e71664a0976617d3db45cad9153f3d1abad23c196f85ff97126df9964093cb1d9bb3abce83de46a125edfa333def8c8b2d4ff3cfb4dd8232f36cf69197c2c06657107810c725eb313c765ce75ca1d9e5e4b280e9934dced4c6996f2e3f251fe4a5c77a25f5cf6e1a7b697373f5d8cda16dc473f5af493e03087dd3da8b5d220f0443026c845d57b35f41de57ae16a04444d04d825d7248343584b50520bd8f5bff1da152e732309274a9ee00c9ce2a44f6706dfe123b75eeea38935c73d8b04202a1e787b2f0714e47dc231dfd719439ff2f65f782176fa97323ef4f19212d579b8a45696c1a923d45832dfdad93a689cb67b5dd11987dea8cb1393b65496f0336413b7677132be5fa296f2e4ec6b9cae7b3ee3d45312928737b01c00c93edeb7f413a3d687ca6ded229573e756d4663d08e7f86916409f9e3ebc96b63b33266c304e23cb4a98b9e6a1d869ca609f4eb1261da578ac388c53a7e00ac0f09c50b9e2693e2e03c529b2e707dc7552f1dc729d88f1e95b23e1103cc37f0631a2e408d00ffde7fb7846b9bcc9d4cf74f599e835d1e4a46c29273cc30efd6f456d6bc0c3e666de77da9664e8c65ac20dd00c7bb5a086922771e53e05688de576246d48839684fcc213a31932a7753667adbe94e79ce099d324a380ca7a35500af0700ad8c85c27234af54164142e11c8b23599916ef9a2b969ea69d9ebff964af8fe6d8a24f848e1a8124544b48c3c7907fbf47cbed99622694061fc64f3a07e659ed960515f484554848b9b30979fc2d5980b7033895b544c30d0f98d1856ee5ed9b624f8990d9776d37d302f5722ea449248357510db98393f1e990d76a0e10c356d9cc0af811f388582cd5ad5ae3b7b7312922d76fc3558f7b4a48d1567a1963c649152a88b24c0240138591829fba3c2d05003c4a875d2dff8e2b4fe9174257604ca558c12f03638643ad3287d73e308ec379e01c69ecf7f531b2b3808a3e16ab511726300c9c347129b710e90eb64cccd0fa7353ef976602e1699cbb275f1a0e02c51363cf88fdb7323dad14cab4d96dba0c568f8cef009ef9ca7c079347ea0ebe4990caec4c17bef9ab67997fac7ef7eb2a1a3db6565020075fd1e4426aff34001f2ee3e7781b0eec7af0f5b22fa5d1e0ce2edd105fcd4c76942edfa95ad20454b06e3d458f900d8736b997f690d6a2377314fc2f7dd06ae401e3585c79faf648a7af358ae4ef615669222eb18299ef5bb36d0948431201bc13bffcc05ae280485f926b2c2ab170d68cdaf87767580fca0987830f220ab78b53e52b79602148c052985cadc36ed2941c44a3bcd1a98a1ee004f7e89d12e2ce4d2372ec4c2fb66d2b217884317ffcfb81efaef633f6e4a6c155e66936d319f169db519d51763f9b43de5d54177d5689783c88b820d8b61e380acd1561b3c391347d4601228d6ad7372f5971c7ef85da49dbaf770ac764c1be841a51b04d862a2799cecc31edbead6f851b81d53ef14a811db1b7543b775dcf626cc2a4f8c828ddb16a33020fb18a678011e8c1f42f76a8a30dfdbfad742ee52622ccb25e1019a14496ea057bc9fab990bb3b1097a6db4aec32ce8fa5d1d18a3fdaf46ae5e4792cd3e365deaa9e8ad04795dd33a1edd4c259be8e66bd16d2391003ce2118bbc3cadfbe1ad024759746053063cd9b6b1fb98c0fd1b75bc99d8c672bae977f0c9625d8a58d9c7205bc7569f95320fca5089af3b51d03ea40bfce75b13a10716d4ca84f3842860bb57708e67f2fe04e322be1113ce4cf1142a5a9fc42e53ea84473dcb3c4ce4f6a0b335afb205e8df888f6267505bd9b4915eb993b4f34647c28883da6f9753b058d9df6289b637c942ff3c58fbdfbdafa50fe06e334ac44759016458934fbfb76a2f364ef3ed35e998da158d1a44410cd7a598d6491b1312d018a8edb15b6e325e1f011cf89228681288b5adb871adf0af88a973ff4e7ccfaf371642d0a3a94abd0f0a73a08d596d3871e461da4e4985b621dbef5ccb47a77fc578fff80fb7270d6917fcf4c6102193fe6a518ac35cf373d6f6ef687abcc1c62a94cc3187e2f0d994f15efb2595abaa950e24cfb830626f10c11e2c4423460fcd324f84f370cea6f86042bd932f3405a09983b2150bf930380521af0fc35ddf181c33f83baae8fefd2b5043f627e42d85d41539c236e040b48aa3fac5e52fc072191e9647d867680b1c2f9438c5e2a9ae84836ea7f94027ee184a134cd1e33943f0b965ff42726d8af988b83f51570181747459ad9b416b4c77be048ecfa2d3f46aab6d4c2f3293e28b02b8f5136abe686b9101ba660a96386ea8d571279414eb4f9cb614e9ce657b9a469b40534467ca30826eb7a0c43019c7b08cdf20e0869167364941b66f68beeefb690a580c840e8ceea88d9296bf57487d33bf03afb14e791e2db9df3d26114eca2b3a6beb9e9e477db82284a9cd5abab8d1f818281c8b4fff6a66ab5f26dd835be8b8d4093ce129d8a560be24e189e4086f74a7744faeaf7f092e64fef08b5655a86cdb8de63ffaa7772e8730844e9016141af8bad221624611fb50410d818c61733ec8a024208191367329f53c10848ac8d253232e4a30fd8ab4b9510429f0265216e2697fec873feb19ea9a9438890b9384ffd7ea93e04c7c41e5555dea494d4cdc72117e0bd4599e071348112c67417e1845fd8e633cdaf08a1d76a12b5e7d6a78c0bfaae630865525eb263d55e6d590776dbda2210a50ed76a8dc5756f85fb3d2149c89e3636e1a5bbc5d9f1bce6fd287bf40af3713557cefd0ae07d2df9a2fd2b6d0a56b34baf491cc14bfe7e6b64a3182ae3d0c1f92a4dddb153907dbd7e661ed8286e76c12ecaf6574261ff753025e002fd208f6af6d261238765db4bee16503dab2bdd31d089dcda55b2dc9ed02f47fe9f8935f53dfb3bd40453c31f627c73e01b357318452434ccee677242d50dd480736152326036c24542f0c1c28c070e71f111b4eeed28a2c175067d0bbf6ffa3af14f60ad2e0398e9dbb353bfbb547455b5273f2048f58b3a92063943efc44d70a1b9edcfc7e034542711f57180d33a2de00c6e46e91972bacded53a5f68922e3fd276614ee6b08f6cd9323726d01e44d0a27bedd3e02dda47132488c544d3ee76c2e461701f2ab5437cd7a5ce06ef7458c1fcd5dc850409a346b8471898ee60d97151a30a3157feeee17467b8b88e7a9ee4b064308702ffe8fff93e026acbcc8d6926f0c32521b4969073468beee29ecb93ff6178ee11063dc64f3729c4527abd32c91043026f1d62123a0af0aed528075751965bc21864ca2422f835ad6bb18f52a4cb33d028837bee337b8e024e5f79b60ec9820cfe62b8a0da4bcf2efebb2b531de93b98362c08acc4600ef1368d4a3a9ec394d4ad482fc3dff69f4df3debabd9e310261806132d55783178373f8a16b6a4c3a200c5e561399c14c14326364168e6c3133ee6921f053aa52c1eee8a7d0d82c1cfa03eb561a71767f8ba39250e855626f16688efc85209e66b28fa784f1512ae1697a395760cddbdfb92fb2a7ba5bdb6513d616ec1c2627fc5f3f7c5f563e0f3176598e806c16ba15a6bc0d9015079fbb31204a183ecc0cbccee4ae608805a3b6278833f9c6b5d9c85a33e93480c37518792f72a9727c174d096786b10e10ae1586f070ebf61000a1de7d8fbb83f72724f1e9d6c6419e0e5818b14c7770c5f8f99b778c7e8491f9473980474ca6097b88a337bd983298ba8401a948dd378e48086d06d1d9f99f8b647326580f72623aec97027146cdd3e37ace36c108ead268ea04868525dda17d9d95560c2d6e6a2cf7d43038f99ab751e28742012311f81e4868ddf189b601989ca5f8a9ce2389185262aa5bd922adcb6332b44e54346a33caa2f55d2e0e26a409aef378191728c7a54959210dec1b1ba5d974f1c3dc8f6f17b8b4113b6c78698bb531c137d4ad02979124d4be806a07518369329a90cf99d8b50454d9595faecbc499cc50e2828fd043f2ba136703580f397d58fed9927bb49ecc70305c433d71e213e08bc70d36f967ad1d35284cd5860297ad193e40db547df4ab67fd8cdc24188746100db8c1ba033c434b4baf485fe69f77134741825f59634ea7c4a2548c6ddd47083beaf6ba2187757e59937741ed7eff147cfe387e3b03a0173aee6c52e9fd299bda0a9fa2c876faf6d9602cd5201a8d4366ddc4592abbebe0e6d6ee1e94d034f07182821901f11cda537d2dc3865c68c88c47f0972e73752950c3a097773cb23088b968c8d3e021524f5442b2272cdacc76a582e14f13881b011e4c66992ae982a8171856462b5288564c354a0c732977ad5d43de96846ade804db8330283220f57045c6c62baf7a1efcdcd343c179ef0b8d9fb370aac639955baada5bb2da5fe20e8fab2307558c8a33fd118bf0281601f7f7293b474bd7409cbf264cb12ba78882bbbcfb745bc23f90b0a9d9e1a1aee6bb96f9b9ac4be9823ea51193a19a9a51935676cff106dda7997406ce049b0c323eebcf7c685b02d2b7e906c1129b9ac5a6fc63011c0b116ab4c3a2d8d768d06cf851f4e409dd95aaaef7804572c34b6d33f9fc4f43bd1ff1892c287ae89f7e0f8e861480ef6824827a4d18a140960ea0d0ebccfb06b14bc47d29e224a693779257e4a8e3a77f21f2a0763a550a886718f45e3fa4e36c476c07297a7690095f8deafa1c8cc0773063b7ff5fe14f1ed72e14addedd58627540cdc75be13355885abe3309eca904b25e374513c67ccdf168c87724f4d42877fb276000e51f0ca4a1582bdb63ef9c3a5a94e3d085221a285176269c9bf522a1e3aaa00402a19316ca3f411bb2f2a23ae1676820adcd87fe60a458c02329e595a2ddf3cfba799d616dea2f453a60ab367b152e8e90dd9be61ee97a1a3ae0d5b5b127c7de8cf56016e4cf22d26aa83bbf9024b364eed0ca7204ac071533b897a4871eb8bafaa39fa9c774d86dd437c828c91ca36e085598248a628c4bbe2fafc49d3932ef7402a08c9e71cc52079de5146e735ae48dca996048a376282aa462a88bedc2e689a12741d22c5b396558f70528bf5672dfae22c7a7f5512519c564c2abd2e52abbfd787bfb2b218e8de7827d605732938e8ee8cd20cea9dd0be12aa5a55f16368b76386d81f49bcbe1d81befbde16bb11adb3fe35ba5ecca61a628b3e108d2a468b9cbc8feff466be18937ce89d45e75f511bcacb1019657cb82f39fe756b6cee426c700dac1ae093d994aac6ca6a73cadd0d37bb968330f99e5ffac30cf1f408e4bae979dd22f0e3686e90bcedec28fc58708e2ed404f7c6d6dc17b55e88893b7a6d70fc0b765f57cb0776f38f33ce9aca2e184b5305808a688cd8fbf298f22f0a6f4dbebd7df4960c49a49237a72d4f3c2e1a3b9aec94ee5a5984be508af88d9fa7c8e67b9f7949331a61c26eb00cc0b458df253123fb9ab62a652501c463fd3efd299dce44b4174664f7abbbb635983d94ae32a1107d3584e6c1598cb0fb26f159b70a3cd46fa94f0eac74a6216e7ddccace89711de267ca77e18179b587b1bfa3bb564fb770a65500c946b75980189be2885429b1f1da92c40dc6513ad145b1c37da88f5680b76122954877c6331081c424b852337333e3b58c509ba99f8bcda24529831766847a5c5aa36dd04e0d9659eadf730d311dc632a846df69ba2b1d265b00b363ecb4a8965e7e22e09bb9e38721f114a6f03e4123a7d0a6e2eacca9380657a7a3d8eff3b8eb021c5ce0b96f371315bd667b3e5f70d218767cf61677c19053e83df3df64aa4756e5aee6b843520674f7b599c625027143da9fa8b392a73f1efd9b052a0254baa4053c755c65be433649fb117e9dbfcc7c57b3c648ffd45ce06e23d678d69e8e110270554ddf6512823ca0ac0dce902ae977201980c72e2ec0c43f2d72e67109c766b14d34b92dba80570c321cc05dd5b2c14e6900f39fffe78656d3bf3cb375eeb86626b9f900855a22a86b527c0f1300bda67e738b0e157d3ccf9108e04e18ad81f9a883a9c5b93525da1e58098c2dfbf48e1f7f9562baa96e142df5d8283b2d48d19b3bd0649f3ce90b15d56fbe6bcaed6f16cc1b853393a58c6f2d2e2b25969556c78877c47f94f5a41672b78c149630b22903245ecb64689f2159ea3e200ff1f0f413a5cfa168d10bead7e8dd728646bd21ccb9d5c94440b50920124872c0e207e984626c4cde06aa59ab0a9bcbc3b6fac5cee1d2745ab436f12bb03364d2f2036f82b683ca1e1be82a9626ad687408cfdfb2a43d16cf4c8a9f22cbe63e6da94c4eb5aafd6151982c274242fb91c2c5a6351f0afef5ca901adbab6c4948b88e4a4ec645c05a9f06e01654696d8dd574e691be1cfe5974094c6f719a44cadc2966365d90b5fd2feb6bc077a0eba6d49df7b937e1238cf53e89211a5dbf0b010206d02191c4912ad235ed51f15d22e7c94175316156d574b73abb4fbda2544da294e2bb52d660b740a6648a63ab4a387e2c8f55a5807b19fdc503b7c3d5edeb907635d2dbd1b0ffbf26efcbfebd66ec4720cd4ab487c70e9794c2fb76401e015416910f329fca2ad61d54bccb7bbe2ea985f9b8975501780d0dbfc2dfcc2fb877dabe1a6126f65f0ef35c04d1ce99242ec3d94954d07182e89ac4b5045f6737802c839a70507bc6ed10cf4b199c41f65d4236a3f5e25e51afa2977cefe20fa7f773a9386503a388fddc753ba9cffccdbe6ad76e81721210ea8d01bea83e6f2f6416f99b4a29b4cdc6c0167a8b4d13d1daa486530167d3e522c2ca233559cff8507f386b26a9f7bccf2279b0c700ce29385609f97cabeaf8ddabba55a01d772943153152026bb47ea06b678663ce74fe61ea290afa259f72a6af99f9f171aeebc340abf6e557333ac104a8a369a14f77dbc6ae2b84bd397b02362eba2e3cbe665a686dffd755bb19bb5304b1e060a5bd30546006205b023a7ba8423d6168edc18ff54016e14d954314c24355d1f3bff7e7fa0743d9e740d8986e9d2d91dc8425ea4fece309270adf57b82c394341e54e89226a8ab4493c7de1ee0730c780cab9f4df390d59cb6016099d88053e345eea9d335281bb6a3e4fdf9148ee0a3c09a6340bef3dd921df0fb4d81f61cbb374f2ab9587d3f5308d7919bf271162f88713333cd51a9012d1f3dfd3b9f3f0a76d8e3cafd1266a84732118e16e3ed79c8e2977dbb44d86847ce913f51e66b7f692e8d7ebf823234f3670625de31f7210640f8a4e547dc3602a1ad7a6156028892b2504b0c37127771f8d819d4f5c3a3c51eef4ff7d53508f21adb34e68894a4880704b67fbb87ee676a0fd07799d38099fee3b54f77634f8a9cb2f55dd8b251bd8ef357668a2318283d35c052b89725d9436e9b7899077820c9cd4243d0bc1eb7dca4946d2d547358d4c28fe2bc8f2227aef858ffd462217904729214fb4279eb52a0f3f01f9c8e5de33e85a4203c03e9740984419423b9e7ff5b7b5dd2b5e1ec93710c9bdb7bd7cbcb1258038e2e29b3452a93ea62ccdfe1fcd0448ad1b6e510118d34dcdb72de170ee66dad50c621f984d40e46babdd21b9f89a43892a6021a4f6e131faa020fc421133cfe12a47b40d58e6a0326875ee949d010c37003b75fcf8c0df0c1a9eb5794214c723e39a41d99b21d9c10b9c4dfae5bf0d7f4607344f47fabdcbcfb0f45fab922a64e062ad453f7cf8e13b5b2631f85ead2ba4cc48e60a1735fe645da13a7134616cc8a7e2996c7c635aa0b96182fd665301c19398096a9dae6f84aea453bf83d2034472c71d49ab83f4e3bee7351c5d69cb46630cff8f1690e4d5a9e5f2bb06e6f1fcca4419ff90c077ac729e927fcd564fda458c12a0094226ff584d5f8d4505fd97b741d4b5b383aaa2de6fe14b3d825626400088c5ff2efdabc3c2e15ec898f1be41a697949d32566e094269ab3655a7d25c50aa287fbb3081f12dc15618059318715baac4d53743b8fb0073c53f370c85a165c0ee11518928ea77489cbcb6ac4e4e49556ce3f83927bd8f47c1e0904be7182512423d58ce49b686bb593c110307e056e0b550df006356d92dc8a1c82da1c879e74a8c38c88b5e4465b4218062ec306b92c6a3525f15cec56d020b477a5bba49892e855a3f97e9988dd6f16a8fa44571b4c864bb20e52e3a4e96a575fabcf47e3e17b124fb145f697ae6373753d8284e8ee21c81097a7d2219acf7bb746d80fe4f2d96ffc3abc8a1750d784e7630dfec683d520ce37dc364176e8a7fb21666b30497be5460042d27c6733e19c05374318a008ec4759508e88d02e52a7a5eac84a47eb1899bc695e3b53f10fff9eaee073b545811896b5596c690912595ed5c587909f5083a9909bd8a9a7768e89c5655c561395be5a6b156094114d7cb6c7d19c96114370527909d8cabfabc5612b3036e4eb80a52ef25109d3cf8a7e38318aeddad9680c615326b049b21640bf40df87f445e8698eeb8accbaac4ffa7d934fffd16014a430ef70f3a9174c6cfe96d1e3f6ab1377f4a7212dbb30146dd17d9f470c4dffc45b8e87176b67c4b6a99da5cf8e93b86cfac5b2a157e36e34ee40f7580deb70094bb0c7a0031c05ba3ad5c9af0e884d94fbb7cddc034eb40c2e9df6a738c12bdf8c06c101f2bc85f43cdfbc071901299c820dc1126fca9c401ce50bb92f8779b396f0e1c1dcc1dbd13a0c0b7c1086f2f038283af8dfff6d7d23a6b5025476e021e6ffc87403b46dfd8cfb26528792301c58a7aa03e655de1fed5371174a47f5a71693e37d1a1cb2b5d01d9b3f00bb479d9e0c8ca8155634a4e48bce7c635330bf804da161725350b69df3e895fe5acfe062b75179ef7927b873b02b86522117d7ce9da0b5cf00be6c311e8d0bf3093f713138a6edc7471da7455126e9794a219c4bf45fde629d524343edf6e5613efcec9420eb684f488d0dc3ff3efa5b36c459a2f24d6fff91c2c840e2c4d6db74aeaf05d09d9 +Output = ca64defb45d234f40f2cc898b1411611 + +Len = 93280 +Msg = ad819cf5a16103eb7be3904894498efcaba3e02fddf09483d185bb9934b377d665a455677186dd8241eb68ef127032c8269db07db90d241a37cf6ecdac0b25a37ce9e69254aeecbc6029e1f2bf4df477341f2c071ed3fc18aa311760473e85975a19f77e332358204062a4588128fd933ceffcd7f288450591755e5beb93c13c67fc2f34f72b48374a615929424875a4a8d6c7f51f7526675661eac58251fe1a0c5937bb860fe487e4eda76ee9f68330df9c35678be2c8c860be64a6f3c167b7aff9b61bca17569a77cd362e5e7a4fc14909ef37201652af17537306262b219dbaa5555daa8ac3f86ccaaf71891c02de4ee59d6dc45beda5e3eac0ee03d757549323bc880db2562729acba3f5224c41056f7e70f61f7c1312c49f265720c2f62a43b92a4ddd534b1183bfea1a1d9bcddc9087327de33f5db5a39b2745b13d15153b780ba013c881ea03e249e5e8413d00fe0ecbc2357b22bd582a822a63466a90a5e2dd0612f78f4287fd33f716df06e9047f8d718ab1faa06ec7b773bb716f030f742f1e5f52cbd1ac4b48bc2dc7c41b5053f7fa57765df533fd47b02e408b02c4b662275d8cd00ddd66f8a3919dfd0e4e16abcb202ab5225425a37e40365706822426df91e8346d97dab44bf6b40a386a5219627951a8ce5beb6b2c75b54b94b437dd959107516768010c23a1cc74304170b16ec78da14f97c8ff49535fe123d78c06e7df6ccf81ca9470b94729e37c400d143e9f31272cb418e0634d98b03a687b3354d18af7433bef827b3b6ea0730271b26074eea2fc1d85bef8e8f2214ef39fd35b2bd47132388cb1f812fd63caf5690c52cd08bd245089db7899febce7e564777922fbc5c54cf66fae427875da853d82a41c21de3be98fc670f500fb8bca63801d7b435d82f5b74c0c6e428f285e79c5d2f6cc7eb9451220607ecb65b11f079dd6795da0d1af39b790eafdf83adda8464dc16b2712efbb49c58b9073de6feb1132c1ad4857e61832ea4d0d49988f43749320806fdf65e5d32ec002be8a19689a90c8a4bc8c46bd5e7708f31bb7efd5e141889ea175341c3ceaa084ae4ac81a9a9f12f665c52da39aa59341b72f7bca0cb75e38648ad6d8e7b7a1b8ab76d87b81ac24f4ecb927556814a06bc455bfaa678335c03176dab673e447f16eb4e6f5f0567332b9dea06d573284e3cbc127f1722393d890df9c1f621f07d1408b5034571c7232458c4535d88dc55c35f84139cd26fce3fb0ba77e22b675dad940c091366cc666186872697c94e6078b71a7edd8fbd564e8b1897d3648f670819ba4a70ed5d460bae9b452b3d66ba834b3a8781610b1fde237ce773d551e34e1e278e050c62094a596878c0ed0daa0da34df83150416f16024c3167859618a62cbb9d79cdc4f8450e5689fedf29773e48bc979465478f1eaff23b5a7c444f39cade3e7538695b2555cd3e8f1da36a3dc1ee2d53a705c71fb2d4cef2c344d02e80f83ba1543a7a11b6356118af64cb33964a81151f645e41945cb1d7617fe3aed6715aa4291f9c32baf6b8449b53e247503a5d83d34a9eabdcf0aeb25edcd0e155b16427bf010bb0e8780cb8eb57f6a276248744cda0cd8612fa8b2bc342deee842020d11fc60db2c923241fa75a506b9072c801154f34f9bee111e9979b56feeb27584b5058eb60e360ca1fd54339cb278be862b13e1b2d690d0895e2ce8038132cd23c5a9dede3c195c4607ffaf7eac2d7af0eab54c9499ae638d6adc3a4c58399574d467f5a63e82cdb8bac66d2efe9bee5ae0b7b8876dad46855ff620accc3d4af261be57c07e28bd7486571140224a851e9d79a9edcb03f62bae093fa765c47a26ee1b699f8351c803eb102034dfcfdbc68199854a2a48fecac583ebbebd558f8cda0dcfa5e6c459e169802e9f5f825eed3d85ff2f13e2ccfd3704b9652b67178ed613ee7600c70f87822570c25a189afd11dd6c0f0077ed3d82fa2d3d388f9ec732bc4a7269f04570a58eab5037d8fc70aefe506c886eebf639e2bba98d2581a0a075684d9ad69837741a32bb716a0fd2756740ba043e25d1bc3cf92c61cf5ca58fcdcc4a1bc064465e56ab86af4251ad05a6b18a1c7c373a9a874a588ef3ac605123eb0a55645627d4d28a2449d84e7ac04b275f299facab455033904d18ed5ba5164900e028da46680c3326c9b2729645b326abd42ed2ae5d06597624d59be1fc237ac034947d3c88625b00b7674ab9f67d13f2748065ae4238007cbe8044adb6c9d4badb1d9b74d68346448b4d5340631783b5a35ac2458563ed0672cf54197587fb734c4ac189b2dda954cdfb18b41c010a77e90464eea6f863c5da0956bfa8cc636bf0a28be5addfe8d3e7e6f79f71d7fcbbae23ea141783f91d6cc4c8fad125811760ab57133818892471a79c6d04eafef37b2fbe506785318f939837757f21f90824cbcf8cd205fed8f3a363a765d865b1d88e5e2e078a919ef6ea0e9a13202fa0b58a31cd2c26de63d660e9c8e51ee5693ec645f787f29dcdff30dae32dce89938b7d4a5e76f99c47a2769b6c333ce2ac167e0267595bba8f251308eb4f7bbb332f0b55bb630cbd16d03af4eba0a0d1dd080c1fd80c247c74f0f7350cc8c6291218bb005e70ceb533f84482d1ede9578e8c06fad410fb57f20b53dbe24a2c57b2c102c6d220ce29317329d1b95b84d8330ae53fe5f83ed198accf59e6441ccb87b0891590e3796d91e9414e0c79f1d85d1d2d3b78327d8dcb7db05b934715f9237fb46925395f06d7b3216435e9bedc8f3b458a254015c12cf6ad4d73a3b664f886fb5e09a2ed89657940c0dffb4a592bcdd4b857b1c6201f901cac021a6c93895ee450a8b0b379dda435c0654f32e2c57d412299f7dd3f35e294f3b8fbb709587ff5edacd33f3ca2bc670f6055f6edeea211756692e952e2669cb112d8143ae852b681609aef66573a5aea5ba004eef9e4dc0d3803692fb784aa60aa2002bcab8f8cb87e68526b6d96980db1adfb6a99adf776a8e9db0a17c5348ee96400e3348f0f0f50dbf6d0586994d5fcd038f52075fa3e1386bd96a5c0c1a85b34ad62f5c9b3d282564b299a2bd7cfa7c75bf330c55ab0128a9f49c3dfd82979e2569071c801be7d77dddbb545d7774cf3b3094d24af992065fe9804aafe9eb02d9b103b127f3fbcb10d5b3c402a5956d5fc8bd80c6f45c7993a05ea8a9b84a856f946a43182b2da82884c91b336e24ffe871f53f4f04262a4f007e8273557ccfeefc86f9dc2d4316cad14581793aeb2cdf1285376f91bac19af327fe962a49895ed09dfcfa5f05bf00a46e1d5b71b09d4b93b58fad03dee57d61a244999d795bc7f8f874fa2b3d48d1e58d18617b3cf934dbcd7091c35b3efe30387d0418d3ec325bdf8865f8b15c467cea9913c157e9a3d41501a437f97528492ed1600220e5a6e39960c12d2aa16552cdc9faa9c8159e65d56b6dc87f320094cf6733c328ed2c777025993470bf384d7ed09d9c5924307654d575deb71c90f9626808c3b3adcbffaaff72744b5fc75644d58403d0bf5ef0db6842e267dcdf612efb646989cd8b649015d6558329185669003844f68d32b9b24b5e3a581af5b27c49d11f71f4748c6a904c3fdfc43633337a40c99337b3ba21a75150527ddbd6947ad64d35ca8f6080975d9a29d926d7eb6b24f86f64e9db70a4a18b1dad98b3beb5fc599bf9e3c819538fce270ff128d8fb6d3b51bddd05e669d852805334334222c9ac6c2678ad7fec6d43a20fa0104450a2f903e9961ecc1f7d0f4417b83d67eac7ae6ffb57f5f8897c6261803b7675954b994b911c0f6aed192931a02bb877357ec76e20878acd5246912e0bc841b4f0f185f25d78c108fc33080f97958eb82a75602f3d105246705239cf58515b49891b24c0f4b11bee745314a6a3fea673f234df7cf9fb37aa0b28c30d0eddab7c8951de7cffcf04647c02b5be6d6fe8efb443ae1bfc4f20434a5195b0d5751995181b1bf025db66b13cc6531e9cef3c76992b33d4ef14f4575654198057208ddb5d0243e20fdc281edd2a568fd9878a4ec973d8717a539d2f57b9b64539e6ef97818dbe1b65da32f387b326d9cc3ebac06ba304b8441302137409d3c626cf2712ab45f563cede6c7861eb2bc41c1cb414a8431e73f65c0b4ad5cbdaccc4e41e9104b04e81f2eebef49459cd1872296092a7dc90683736a01ea387321fbb2cba5fb458323f7a1510b14785759c756ea78291f5c160b0aaa9d506c54387b4afe4c3e2c50a630e584af5a3f88919cef26f2b8d17192209bf0eb8250e75cc57768504b77d3cb655c15409d039735724bda2d6c4c90078e97eb70f29e930b54b88836b5a0a3200f8571635f5d0991e20d826cb5d93de28f8ed8d2239dfdc0b39eec840f3f452099e2278c03b4665366a4ae55281fd1bfbdf1776387e77e196c8ae3acbacc10698f02b63f4c9223d66a91bc5b358901fb946015b9b2039a71ea1d2c353abfbb5779679bd17c8ec8b778554b03509d3532ad4b5259146ad976b6b614a221829c66c371470725f2db632a8fc8d21bd4f1d15323aba63185c1744cf64b67e1cd4a3407b05624db76b265cb71b44bf9b8ae64408980459bfcd907375e2f1b0df83b3bb0c537df0f73143c05dbabc57cc0e177dfdd7eaba63886bbe04e3e2ff88be5ea48f06a7a24804752540dfdf3177631689b90053d02b160eee257071b53f0e0cc5af27caacd26e245208959495c50f4d30e51b29e140fee3cb7f8f86192ef925e412bdcd56bcf6b8105ee1c3cade9c2239292e5336cac8501cbb4b09727a0911ca60d098e82f259927eacd5419e992ff6e2c43b917f0fdbfab80a9e2094ec6393f426913aa52812f5f536030ca0e774b95976143cbda24973e77b3fa26d0b7030a5f8e26e44e94e38041a23d2577d56e771191d99cb1c5409e477037102864d8f5614ab9dd4ae61b515e9c64714933d0dc43da63d09d68229399e882117f5521c6eda2b4de6ffd409b4f558ef8af1ad98cd444c9b0c596a5e41524c46ffd134446aea0ff2fe463bb26bfd5a100cf11f14e6dd7f38452d6315b622be373c925ab3d494b8218d2a0f2ba542587d2d1a080ebb69cc9946bb12ebe2905c9650c13bc7369ab26e1613a4f1fb64c26b6de4fee2c569a342739ae04d611bb5c8ded66e1afb4c9d1d1b8bb391c8e5268f31ea7a3d6f6d91a87e4551b6bc354863295a581bbd2ac6c3100ab187b844033d3b82f07b43d6265fa932edb45e6d82d9e2b58035d6c5ce049609053023f1d719cd46f828dd43cfbc96ec2ad2b23503b17d807d15e2ae2136101f4547a68f109979cf07d28626fc63c9e98f7e622c397e6c43b5285b345efc10b5e82aaa6c5e30c36395e4e9004ac9a4b38223f8a392953167bee9cb08d5bb1a557455ca2a0e743cad38fc70602972d9c2b97fb04bad9a5f7500d69c8c33e78f7660556048afd838144765b6b716e3bbaf8bde5374f8f268e4117b6a4ee825f2a132a61738b0d1682167dd2685a190dcd27fbc4ccff331c04d67449eb160eae66e61c4597acff42f6d00bf3a4c47febfc41bb5f6ad3add080978dea4643caadd26844ca19f4bb5005fb8787c8b78a1c6fcd647fbad1e58a2b0dc8635d7e9ea3972008b8a16c2988d61e5b567b3b21ea4f535eec6303c4922cbf8e7bd7ce72dadc96d1d6d61a323192c1ee2866592c9bc45b106e0e71302fac3548f95d3c2e98ca5308ed6108bc94606da8c530189478f56ee4cd632212aad3f85ca696cfba2689de13c5e93eb0fa69a8f1f582813fc90b1341d0091e534bc88f344a2b8ffecc40bf5c2617c2f7a9d5fd317f049a16d62dd38f41a96dd95ab48236adc384e3d1187f49d8939e77eacbf1d02c5d6d01e6843537e6ea188e1fbe5acc9607b74f7f38a544a204da1a04730e36c43602e94338c19f87752559e20f9e5dce9e2f2b1cc8b9b44e137cc741f6dbcc0f365fb43370ff30eef19f21eaced6501e32f460f1f24401a2678e66e77ce0f8d4068e4cff547852e2078bd080248b0f4c680fd546dccd9267a917de3f2ca623dd4d9797ef0db36e2a5ff34dec39430120ea877163aedcd164802019912fb4b6f0b4807f4ac338ea8fa0de807634898e6460641e8f91f9256395b0fe25ad9217d6e353eb5a9d9030d9735551663ee21ede71afc313adadf62a8fcf7542cdc9b0578118c265c442a6d07f5fa8037ed81957c66f4737297fad8317856631b7e0e83a36d5eeb460d6b63b6d046d961df2e89807ac94432df8b034d5dbb93b945f2649ac94568f98d5c7e4e44c886742b9f166db6e917fe39e680570d856a68ccfd44a885ce23d94c640918d40e1be16b39d8ceabe263371fc3dc0918526bac6b7590675367a087d318b0b10e761e3c16a54d0dda33ba6ff97982bdfe80fc16b9f1d45192806367b9e0f1a144aee1d6a667ffc5c26b821b6f9df10030cfa01a20f88ce1c3d6e10b5963485416f71b6392d84d60e4e85ecbda97c35a4f6d0c39490026b277a9ade54a062164060d3f45749cd279c238b4f3d2fd5626bb0774f68a9f3e2e2e973e87f450193b925fa20ec42c0b6adadb0925e145461ff41d9ed47e3c3fcf491df755f0c79c553c4d0811f9ec74deaf5ddfc47df5ff90ab1dde559c5da81067ac7cf1c7d3374b7473c6119e749b2fb02fbd6211860f131086a7ec5d7a039bfad143cdd2095688db5250602a4aeae87dcf0681347be121e4f6a02b4a17eecc831ac05ca7e08687c1775b9015e5d09368ca6fa46f5e124798ec4b74dacda61c80e79720c1ef53e2c7413c23e9cc08bb21903d4e2a931efe9cb60e6b97f1d61684d62cacb88c2b046d4e769e2e63efca08bf13e0eec163a171026d61fa2b0b450f54e572e45d9877240d9f615c43f23abeb577ff245f8cfab64fed1a89ef922270e275f5edca08a57bed1b0febf2bc979401ce0b73c3f744cd0d01d7cfa627395a1d42b83d581839e59b7e1c65e6bb6b2922aa9855953f2a25a8403c23e526e44b43d03c4b9e238ee1673cf942a65b2ffe9682283259c10560d02cba3f331dcd9524a2e490f2d73f0ffedc291aa8285084ebe92da27839810ee32bd46a06685ff80e3f63b5fc9fa4c1b0e04e5662af674c81443b1e76e507707fc21d4cd5b315c48f0a1c2321e95a972bcdcb7e6c6cfeb60527b31eec602345f493e740277a898b15978050e940eaf0de0912fb3bcd6171d618382c3f474effeff5d4fc822b15cc306c32d7e932c07f3636c775476d49d0727a3cbef5e6f4fed08c68ca6c4165087dfca610783b6592c2bb5b4515a9028268d2235f86ebafc334ac15425c59d1b04cdd4ca33cc754cc122b41133d2d45e837b4ae7688b1f9fd8af96cfcb8e0f6543b62b8f89d63189b92fb0b4804566e725da6109c61c64e0e51e8c24238533d84a8415da910ab1b81c39f3c5c31b0f6c1490b0c59b8b5266617eec7cb213d31a231ddbd0d4cebf80f32ac36d81bb979559877f416e3fb1da54b9fefe02a0b5d3d66bc59bd98b218945e969d3448fc609fba516a5c7a049e3c6b60ad39a95a2ac69541a6328aaa07c1a5e2d2193fe647102d4bc1a2e16e12ac05d58220258624ce6c2244f4a9104017a71567cf770387477fbbac82c09435649963014c353bd5d549c2988c6aa15bf6e0a2e0ef74d0bbb610258d648e135106a49d9d164ed7b84bcca7236245c9b5ffd11fbff1bfea5edc8d0de6c0b0680002a5e9c806d8d636b2533477fed0e5d88306e0677ebe9ceb3b44f94b4fce1eccd91bdc149669d3fba97c1ef8ea82a24e30e09979df0774eb52e66c2d3a3d84020a74f9055d884d5191b5bb489dd17b8189fcaf599b110ec9a3dfdaff4885446a075fa50cc4baaed2eb7e9dc99153de1ceeb9a6a94b61d710beafda43d34bec4f602a74bd6457751a47554b0e5d60467adfb5f3cb68804a6af3c4ce9d62e7c83c9563fc7995053c8215d827896abd4115fd603b426ae2f502f3bd3c6e8fef84bc27aa80d40f3a6194d765c7cd31915a889846c1a0db0043a32ef7a839b2d98e38975cc65f1b7d80dd2c8ca03c5aa2ff5d60e84b69217ed2b61612a671642c615c54f9116d422516c555bb55793e58abdeb7b31cfde6a51ea6498c9bb82c5e9a71e11e16a13be79fe813803be66528ecb73d35daf18319840e29c40c7063e68623ec2a3a7d313b98afb669e81667aa4e6141eef9c69f529f5837678d3cb36ad0eca6abf163fa777da6eed6ce8bae432d57665cfdff93c6ed1f02d5827f9351f736d111cff7c051cb480d6573a8b18a26142b0e5c0ef91ce9cd1c9c70bb7c12658cdc0a4aab5b211e1d92846c1009f5a52200519867379b11dcd53afc62d642a87927f3e5e1037bd2922eb20c34200c470b76e537baf7e7f1d8dd2f7a184a593c66554d265b51d87530327cf8978c34682b0f27be5c827a164b94e87e4e40ccadeee494905cdecd92923e53a5bcb714a52b299790de9fc7dbaf8cf47d774223597d4658987802a1a712b2d4980639137a6666c353b38867ce7f25e1fc15d6e3db8bfb07b33f561b1f4c205e44267ab7547747297b7dd4c06b25002f7ecc6794a0b593307505518087a9177f3e700486cfd83b488c801d784e4bac4b79ed8c9c55647f51628c7d886cb408a5eb855ef848f3b38eeb7ccad5c45d7aa4720bbe8146234fe8e01742893ae76460dfd8f2825c74608b3cd6558f89d50bf8fba965ea1f7c6575924849097ecdbb4e9fed57bb76b492cbd4ff560beb4cc0877b391b1d3dca5075dd91e98fa4d18dbd8025071a244efaaf688a34b1852f48fe855d66b11db7a1684676ac92599d5c4c35327914e1add8c44bf98a36d3e705bc8e68a13c5baed8db41891aa7e98b9759337836323b5beda913bfbef2541e77401afd8325642a573d732bbc46e126df82ef78c708adc389ac445f5b8a82302e379f8e64f2c3b4bd0d4fe0f9d5ece99557edb693fe959f3d6c525ae855dac68af1a09dcf2af6d86ad93c4b6bfb495e4926a2a4359a9f298957c234ddeaea3c1e0ca29e3a447a0ff11fcccd8b2da2ff6b9d92e41443370cfe0d187fb4b02d2b77f73a123eb5c9b5e04f75d9bfc366478d1b52d8c8aee9a3fbeac98df55c2fff092fcbac35256274a8e6cc02a2732fc12e3e5704bb2413a9137f59f228354f314244db9eb5e9d0c6bb8433eabbb34be6bf6513fa74596166d5394e4eb5e2176cc3a4ee9c59999126a89641d473ea6732c12e1e2c8ca54f8791b71af636d9150c0dee791768ab200ef0ab7a5253aefe3fc3f7da0d5c9e2a660967448b1380d48971700f829b951a0a14125206e3677d684860dc2f7cbaae8c8cc86f6ff47fb27f9ee816704afdcb8293894d449bba6146cee7990555713885ac68d037223c4b5906952262ff3bd112ef7ed0adf50e4645b80a95218f5854cbd8b72b53453d1ba01935b7dd30d5a735984190a577d9990f9438550672d68fe99231e556d5f89fef77185b418861da652e9ff1cdaca2d5eef3ff6d26b8825649897782a44d05348180db61225e56d71c02e868890c00897e57ce21f4b8d224760ee677ee22c99620c6ed7e023b2b19d4c599895a0e692038203338030c5c86e9930d5976ffec2127c9cd167397653f29d741c8d33c434696fdbcf3d42b67fa3ec66a9be12cb362110a08aec90b7ba385c86f9b670e35492540ca09ea8eab0ac0097cb3bf31d5c576f81ecba4f004e373098195980ca5c47d79f8cea8be9c1527fcb22563b7b9e7b4247de189fd677b7c2b163bd8a01b24ea39b7d6b12391c5d0e0a9857126e635730fa474da8c39d7fb9d9bf2cb711c06f5e085a6766642795575d14859f7d14b1e2a311a2914e2858be1815ec2f81ec74b1ee0b27aef24cc202cb7f2a0b301752ff4a235f8300800a79774d4619d9a023435677f31369f2abb75dbf8c7d0fd50230f565cca55f0d5d91fd50829da24346bd478813bd5380191d1abdf31ea3b6881daebf3020f53819afb304e8e5633da3c6ca25ced33760d4dc0a61a9167323ae6d7c19d51b4a67057a9f52c016a4f50307e6366d7e9ef9a49d3594f58c07823ac9685b01bfe403ea9bcb22515beed52d27a3a438e50fb35108a43c1ea8e83cf5d8786dfd344d7590b93f5de4dac744ebcf0955773112f6a2c45e426d949dbaa743b63711a10d24bf7d02e9c1bbbaaa03a7213272892f2a607a6b8f2a75ae6318b12aa2842eaa773f8e1bb030274c703e56f2237116efb753d1d40a9d76a49e0fcbdb94a005aed8d7969599794607fc64858411bbffd9064372a09a0dbc06d55639d1f6ab4ba1ae513a758be33f72b73ddbe0e2996d767df804d729c4725c6fb3a214b1ee2b09607324c570b73b150990010d8053884c853930829e08be2fd4efaeadabb1cb705806fc8d2f3e61795b279e13d13177e587d09ea7e022c8056bd206a3ce3c535dfdd169d3b0bdda2513c85bfbbf7a63c9e983f551d95ab9699e2352fe01d6ec59b79e14a1db7fcda19b3ce0cc3178737e151bdd8570f7b9e0d4ac39c62bc8beebee33a5fe98cb6376594bd48e0e71d08e7160004d8d43eff476336404365bf09b0a59c3f3cfe8c32bb7bce04a40aea181671903b01884842cea817bc009d4aaf173d81686681f17481b59ab07ae770fdd5d1091b7fa03a010995e25008c7e1676927847c14bb88456efe8decd4014422cbd0b506819086929eb910acea7a059b1cd01feac60fb34dc9a3220a4decc61f5eed3e8cd5eda0afe49e4d33142819e2a8d3ae24e902f4f6284ff1a9570e895c1583002eeb1c3a918191d2832456a0b6a3bec9cafc19efc70151773a7deb0051763e946d1fb096ffdc405b0d798a3c8f83ddfd4d7dc8e648fb541d4e3106cda7f77c85b8022f58337b364142a2474fe5cfddb31cfca48af46cc47e54fef643b81fc93ea0310cf0d4e4d02fc33cf25d51fe1a85b9e7114041ec2ef4df661e051a65a139a60abdf37c8f9a60ef982fd74c8530dfb4cbb398b9eff02b5dd4f274375f91014a1dd6c272f211af584264504dfbad4b9e28f016e4eeb47c40ea2823a774252ffce8dc0050a2c2457dca146aced7ec33c67d4b2d2b6ef88239040395e329ba004eda321fae2828ddd0add45957906a32de37495e15f718b796b1394d6306dc3cb0806d82e3e8b1c2e15c08de60bbc3b335e56f2c3d0db196fa702dacbf92184fb26a02dc8a6ae9bf3053465c82b0755f7e16211a09193faad4df45564131da93c505867f0a256d0d3e2201463624fb7207380399f2b03f6da65d34bca08cbfa388d16d0d0bbe88577b56be3de37fd2a571d98b4e82591d59ef586052460924194e5c2ae8d78cd808686ff1a6233777644e692c8a407a75ea307f5cb9ba1d944fb60454a52626d8aa95bc30116dc26638ed656befb5aac5a8ea208e557550acc130785ec45ff306a883e9fdf23bd72b9def5cdde14a408920acfa79a7f038ca184e16bdc8eda7feaca367bfeb05bc43fdb4cdd6f187022cbbd95ba333c34c78bf7f6df615678c0d0174b3fa4e64082be2ee26fbb2e4364d04ffc29f8b56f2352144fcac4c5635de51986d41aedf316ff7ebf6c087fa73568690cdc31133c08bd82f3124e0222bcf175ee20a8ecfce6c774ecba9f3323fd5ab3cebb267d23de96eaeaa144363d47bcd68c0c950be45ce1b87043c87140256fd449af1f1cad0da3f33d5df1883c640de266802b7431de14f153edca6184136f75859e631761fdad46f3309c21a87dad418765b04c6ed627c79ea2ef2c7930223d8b723b97c8167b8a14018c2809f9659cf4a16dbe20abe3e458497dfaa7e44fd56211efc468c1d768a9b70ac6e540fb9bb61eaaefd1c510ed89cabdf29598c0e41265c7c5cc648788b93c5e23c6ba37e5d6c2af0a088c768d390df73dcbb23b13a4540ac3796954914c77d06633cfe3235c77c3354e68dc6a71f97302d19c890a1fc802e5f936062c6a50a8b8b5e7c5fc4e242f982ac10b2c3878786a30bc72708ba8f554d23565001caf2d40d36aa719b6b13c5d24ffcc7c97724f9d6f7cbdedf1dc2c378fcc38b6697ca82715c04f219b052fa9c48ae50295cd41c21643342b584befb7b56549f55a9f6194035185bd060a53a793ca1e653a729402ad789dcfc8df86fcce675e66f601a0b026851395fea7ef7c1828414d8e499084bd85c184497f382d623a40b04588ada205c5c0508bc44a53db0a14649a3a7f71cdd168f0e4134e73f746b77c4f1dcf9328775397b54aad5265d9614f652ea7f066c459bba08410f517f28b721da950ab18059511851f60a13dfeeeb9f70b522a0fc65e8e86b8c6dc49a88339b61276115cd54e67022cab69ebdf834859bbc646503f3d119c98b84f16d0687a22428aee7c5145403559d6d2f8e6eaa492244b6db197bfebec0c2e7704d002dc6a1fd36901df4445248f2803eb7aea76aa302bc7bb36acc47efd6f7b9d11190895939bab72e9111ed9b4ea254c024a66aac6ac7bf585cc465851c48469fb75a5ab8528dc57d675725cb1655fa4e8d31b99cd18b2e8eae71784f275baeff7dd5cb5dcc422390e38e9b36fdeda7a934d3e7f2fb5931acec4df0ac6ca44b76b1bd5b982b5a89ef9222ce8d5a0bd566b807665d3cc47159a2c47f0b70a4b49c0f5b7c25e439411fffbe303caf231c0d8336c52a1a4f561b4e7f640ac7ff62e5f34abd558b80f17888ab60a381b5e414230c84e8187c68486bd96028c6f6eedaea058fc585a403afc984b0706646b60113d31615bbbe2087676cc3c4123da0e1700673e46735001c3ed4d011c1581a6ad234f9417897075eed942f8b2e36319011d7fa40a4966f4455162016276c79a7fa9cbee9d39985155afa03dc7f73197d4c049348d24ab9cea8c320ec0ce66c4ed994d77d513842613c08d1468a66b10f7af6cf8b54e47801b6566301e6785ac60ba7c38a85f597b90d4b2837d393a0ad4b391f86b0e61293ea6a66f64874ddb41d30138fc6442d933b3b795eef8c50fd293603b98ab211dbd1599d47a77e6d8f6ad8380bb6b65c76624434fa32b35a6591980c9226eb0e6fe7be866487f772be910ab16cbbceacd91f1febb851ab158d10b9aaaf39f360c6b9f3b2eb6e6285d80c32104169ffa731ae092e07a0d62aba23255e7f186da156a4b3832adf623f525908c52825cbd426abaa4c66b4b6f2935565a86066ac58b65458a7c13f58d7b3f3d9506f93a5ac1e946df76411d015af03f509219951ff5c356d714d22c91773693e32a6282f979ff4ee8f7e2cb40c53cb4e010114d0fdcec46c800d0e35472715a1fc5a47dc4f015986a51389d53f2827eb20ad8dbbdc748dd044af76201f45a5af0e0a970e1b091ee0b8d2ada636928656d875587523e3fe334fa2df0be83585aff8258a67841dd1673b29fcc97b39831ba907098f6c9391fff165cd6b3a9d324f3b39966b2295fd84bc881b9185738aa402c1158d0f19e5a0ea86b5d0aed337e757b54f7b6f281fe3bd8b7ea0ddd7298a863200d093dd65c08b742cae8d7e1312de371a2ad23aa4eeae829a79fceadc2993d8500c83649ed964cc96877f04305c2f2d9afbf4541920103bf38f6b050f1bcc3287936625fd5606ee87edfbfc2c1ddb1726613dfb090272e61e4390ec5edb9fcf2bf7b4b81db0d25875348cdc72f2526250ed2795e110573f7f4916d737e37f1c91cbe7915c945798e30d9a0b815435bdbf1239cb3dc43d969b02557c26cdea897d627738565b273e55dbac2fe3cde587a552fce17bb88689f601e531a7e572b4236e0c13778fa1a742214bb026c9f23eb831e9af2747c29814ca3eae37d4a82b3840eeb95c9c57724c70f112b6c2dc617c31785acd0c823f8bcdda285325eb3d308dc790522bc90db93d24ee0063249e55d4219ad97145feaf7f30668623cc8890a70f4f149866f82cf86f98b0053b23c98c8dd5e9107e341460e9bf5d88cc8bcd1f2e4c007cc1c02c4529b93233a0b06bdd15925854ab9e3f156eb925bf5bc56a68bcfda24369d41b75fbb60378f5c2a1484166b3d85e9ba40f27da8b21fab3ed1623fa7686bfc29f3d4e15a04f9ab90e50a9b997f5f79ac7a0bd9a0a6b39d5c9aa1bb8f9b1441a1bfda96e951210220788b7015148073a3e9c888e0ff599b98486dccfa84d8729062996075e8af68c2142e1e49c491de86d35211d285b8abda25f1f850ec6099e02538ca668f4ae65e031b2c9b563ac33d81d0fcddff79d80a7752caf99b54bd7850e059240f9a82dc8b7b2275942229af3b6bd2683743271087bbc75d595be7402bb8971730484624f576893e44f218c6494b19ddf3bfa2d49d5279e4ee1d1e20fde90ba7b9fc3a1e8933e85e2f519969f2975ca3fc95503f013f67f721436a00109a3d3d745d65b38edbc73d1de8b2807f7820221a6c3937faab19fcbb75d3c8aaf4b63f2714cfc94e95ae43d65f6df43815efc214ec66a5d1be185d855a6260141ffd179bc980490f8a26d8215dd2ab659750ebb4bede72cf9feb80449b1eb096429a2b9823811c1ae1b664c78ae88e4e25cc05c08aa98439771acfc3df10a1778516e5e6cad928b7c3e74f918fb7853be8ea7801f7d0c55a6d2eb0c9cf3e190111f8ac4c6790572d58400144144779730732ac3fae5a1c79aaae8d1d13b2017a0ec8e793a2af90c6c749e2abc0a1503fab2c0a42574f70dd5522cd885274422ba40f0083223cbac8398a5b8d3cccf4e7fc61f8d199b8abcf9712d8d2348ac25cf9535ee49042bf7cd58cd2b12fd04bb32158dfb61c9cb497980716c363fe6b55381f697e93c6862ac4d6b0e042b63fea439928b78903737d7f89ef2284d8245d87f88919d4d2f71a2df05ee21d85b7d689ad399d88f5d0c9751ecbb9421ed4bd0e68267cfa6dfa933963427f67459abd1c1b7c2fc07bb3c2a150124e42da65bef7f6a870aea077df10b6c67fc9fed2e8236b5737da9c04b12ca62caa2f13bea6672b77bd98725644d97151a9eab9469fc726347b7d61abde3da88195afd2c7bd888dfb2b5feb7f0bbd1d4ac6737ede2a30d37ac552d09091fddf79d76a1e684d82a69d81ac13db7be3411b9e0b5382d085fa91db01f49c1293d27d370aff899c7dfec38926f350de73652bf95b421adaef23e18531d2b5a8280af37e347d12f3a01bd7097692c77a9711e29f0a528e9095d7d28d8a74c49de40d457492a1eb9a13873fca43f8299975cea858c18bc63aa09dccbab6e1b237ee65d9e1cc72fdd9ffca6594362e5c813523e5eb28f6ab2037fe37d35a2165bf6f99198d8af82ef88c6aaf2ff73b4a7a00990121e69a238a83817ba1213dc77c8e326c40733c673ee1f187622d27d9cefeb764c2a48017bfabae00ecb03cbfb874b739c12f4591f527e754f680fbf3c35605779609ae7008d80d2e7bb22634b948b0ead9671c926385d27db49abe7fa3310ba064be2e14ad32276e18cd0310c933a6e650c3c754d0243c6c61207865b4b65248f66a08edf6e0832689a9dc3a2e5d2095eeea50bd862bac88c8bd318d3f0e61d812b642e22a0ba9c097efb89a30eda65f7a85beb7ccc3ab39b017f2df8b60c0b6814ae6da93da22a20a47a018190cc0acbe3b1a29e914c0e7e0d6c243e2d5f84c0acdfbbf77767536aa589b9c2fe1f7e480b56bfa264573fa21a3aaa18a95900177e88a781f062ae23fcbb10ebc95d26f899ab914cb7f4cda3b26b1e1ccc7103c8f429aedd3b3ca109047ea56064fdab5a1930d5e20e9d4f0f606dfebf093006719843306dba5dc2766754f5c5638951f8f486ec06cac92a21aeb3ca73e22e9e9de555dab7e03e88f89fde709f3788d131d60e422f9ef0e596e7fd1fdfe9c532aa65e21c405f576afc186bb4327364afa1184776c0ddbd17ebb67a5d67729c49238468639b8a50ff1d6b8d1f3389a523d345b3086f1986277c94ec018f2efc6895eb695f2df383abc8f3d33026fcd2f424e8e1659ed4d49ae60da2badb719e077de5655d7c2d98079b5bae95614f7697327c431cb48220f8948b3ed7b0ecd9bc481cdced1a9ae688e10daf9d96f3f863786a68ac54c403b7248820e6c3f337dd80fc408c6dbdf7a6468426d71c7ce10f535db28303fcf55d02aef97679175101b50e20ca0a1953e63859d4c0866cc8f17fa0c14f26af6e60bb4a18f534eb8dcf60cd0e14543f83df32f919f85926089049ee154f515de758baf41fe1abc2768cf0a358f9f092ffe7d2dc66dd094b28824e901f21f88af8ab7e276eda323e73c0f13ba1f943a63096748e6bed1b4eb13dfa215f55a0a90adf917e962d6cd23e01fef07980e20bbe71b48969b703933b39d93c4668de4a967b81442689b0101dd6566c302f401601ffff5800a956db1eec682b74ca05f233f5da22804da06a9b94b3f96652e2679397d164c1628968e4fc23896af7ac126be4e8943407b2544ff38442acaa3d72fbefc75a2c411fdf15bf97d08980552d96af4913c2366a6fa34943b24383d5caa35e4d8281e +Output = 676957018f570ca2bb684be0fa1f42f9 + +Len = 94632 +Msg = fefeb84e6ed6fa6ab473129321b6ed5817442a24648a1666ceffdbeeefa9f49a44e3e433805d289226646a075664f7fbe7ab73d3b76fcc183f136cd56ba6b341a8ada49e3e22de61e0bcce93817124776a3a836d8a167d160d51beb9300687e653e35f594f2c05200b02a8014ae65a16c779c3ba848512a95f413962e6d15ad06c0d7c2a5d838318cebf5f1758ca831e27f099824ec674175d6c4698361013481cb365da0d30428e527a5b9e542586d8b1286e8c8fe189a831594b22c8ca9a968b5e8131093a28cdbebb045de5ff4b8c8ea8aba1f0dc3ba60090b2c94307d702e09538f6f9a91f1c3b0bc21eb461ba82e5f8b68919c17157f59ae1554fcfb2d444e1f2f384860ec2f1f0fda76952bb01dfa1f90cb198130535fe428e952b1353dec917ee53d8dc0807f41dc1abdb3652a42adaf1616708f6eb443b3bbd22e2c8d7d50fb00ea77336a69f8a34220313be5b1bc302d0383a723df536266fbd077b568d43015cfbba94f578acc877d23a8b2dfd1b05a61290c353989a1552036ab4847a19a8e5dd99691d07ec455250930141564ac38dfef23056b5cfd10efcf3bb8823fa6f5254f8ff45d4b0725a86076ac0b1b8042b0248006ed53d224cb08bd78b104f1c4b69bf9c96686118387b7c0cd193cd9028297a7cc27f4ccfb4281852b5ca7e787723d689384a68ff9437db319d86f12e2d7871ec7b3b64a2ed6b83722dd8f14b7f8a260e52022bef14c30d1f4b118ca8e2f91398c091ed61a081b5801cc20e5d0aa695720c1914b06326f91e04bd06c4eeb349c7ba0a4fd5747395c3a9113f75c1800cff8f168a0927688678f010c74bfaaefcc2912df2c612480a85fd4ceb5d4c1f74fb0381f4c409929e7336943704adf312d26c823efc2108fe0c3ffb79db528bb3af90e3bca7b0ab2859ffd1beb9b089753d73929c3e4abb58a298a753b87bcdb3635cc2497bc5bb0b70724ec530aa780b4bd0e47255356a008d30d7e0bb71ec5a5f92a90307efcb3101b893b23244c9be46a801290a891ddd152e1388aed9f092ea581d5215d7e18153f828ef8726837474266f2a23eedad984bbe3b3575ee2424dd6a89e6b2408e3b05b96e2f7f7ae171f6fb8dc680eabdb20fed0c980a6c952d136d14fd27f453f5e0964f54a5f538e8dae63a6a38e97cc33206132ef59ada9bb9d20cd1290a27da6291a8f470878c10609f9f29a19a69203481f576d20963156351e81f3fe2686d0e34017b8972898d4a801271655e116d99f909ec1a38dd1e92652d13d72d94024615ff763b768fb3eb403acdfea4f40fc4d3e70b5899971bb984526b793c494eac8fe96100e42d28b5588ebbd81f9f9b679b1360f7ac3f915b27de92b0aee6a6943a65c8944bd0504b2174b78c2e5274d4b6f56982012523f9c84805f7e60abeaf7deb19502e17cf1f43834d7541db30aec023a18208e62817fe2551b98203db50f2efdfbf0b7209a42730ea4e0a9863584f24857253f1223831dce2900380a12b11ea884b546d746c55142a50d8f87163ac5ea1cd52e4b6ccfbf55505daff94906371af8f9978a3ea55936a384d99df437058730d862f3a68c505157578ef1a13500bc1f66b022cb09145365ec8fb219a339865cd7e3f317e1562a0797dcdc636602f4c0a29b8533190801b5eeb7adcba5ea51667aba3407f75b4728c5a1a1d8c3c32ba555609dbeffbfa959325b7553659f4f1668ee9dc0f5e6128289e6284571cdca94280550b6e0c1b11a5f82f4f90ce0e8364a8715890480f2dc89b259f59ba83756c2948861e79483c01d351104c236848cc78e86a94caf4fff700d1c2f67dadcb3cd142c0939c28513167bb4beae278be2880ad769f4fe92b4e4ff593afded2072ee8e24f401d321dbef5cc56df93d65fe3403f01125f221c18d91f85f86696a5dcf09586a654dbedf53e02d5aca007ba87481b9e9061565ee15cae1e62ad4243a188db0b58dbac3e8e810d2cd4af733aaf08d1a38c0eec60521b3fc1710b8b5d27123141ca2a19abe56f39d0da1aaf6cb4f2efb487a05adcc5c523239619c85ed80d16ce6cc8baa2946917664f6a12dd23a6d445f5de3800d6bb169964409fc53f0a1a05c32ff5bf160f3461871653e885850ddc6910fa88ef9d88a74e28682cb679b98c6fd8515dd4b20f3723c7d93b552e2aec53d118e18accd7e1c639b7f1e8dc63c6c54a540b6b02067ba7c719221cf289fa3897299722c9a2bd6eed05b140c2a759560e8444436fc88385ccaa593782c99aa9eb9306622477beaabae7e7589cf298a49d58a4f86bb4034020f33d4f5f58220a46ebdba36da559fc3bc5009afbe419436f5789f476576f596c8a4aded8b444ec21aa7370f5da03e5e823a9823fea6f94fce77fb220312c4417d5fe308f7c57c214456a556d7460fa389a2e990973e01beeaf02dbf9cfbe92ab7ce41ef40eff2e97432ccb2512e5abb58f1c59c92f3f6a8d149fbc5381bac7bfd588e4a6ea8f74132a373ccd24067ce7890f4eff6ac1e3809ec2edddf595459d86591c08adad4510711644b62647d036fe53e32cb51c3931c3f8eae9a9d2beecf5d13fa9a6cd2427ae465d80982e682c75a6b0d19c92be492ace2e170cf77626aa9dca0a946373c14843f1bd082e87407564227e9fe9e51f199f41d6ad881dd31afb459bc504b665b59babbbe4ccc01b8418c2942d76602c3708a0b8f9e9186add863cddd7258e9d9cc9d61dcc9da50618211ba2d3cca208f986d52e70aef85658cb0a51394a4ed1643b2b431df598a8a839983b11511d3de79659b7a04e203e1346589679e78999927bf5dc57793d6bcabec2cd64a8442377b398e5175b328aa364820df781c15eae18d03a07ace5d7d62d15ca4c46b962206b3d27343ab1b47fc2213860ad88a91d7e44fcbce5346581012bb24690ef627829910e858100540ecba09613df42016738be94d5d6abad21d75f25d22b48bcf57b4efb99a2a0d1e70daab7af7b7fe021c4c782e0d5ae175f2c3a957d8a67da1edcc18edf3435c68ef48a1d8216b4ddd39eda476c86de2c8f5c3871b712df326ada9328c4aa119a6d1cd9283a456342d3437172e75e9e6538f3f35b0d78f15e4fd12e69f868d6d617d31278466c0dc7c74f2765efc17149f28fd5b1ef0140c6546d0dc2c914f801f5d3c07e251f36c5161e66c0c453f953329c7a06ea6060031f1acbb3e522f796bd8b6daa54c360d3563da9f4237a99097f863aca7dfab18ce646b2cdab17580ca56664ad63ed0e7afe298b707bc9c2e54ff9928d1854d7dc609d8d60a9668bfc63f15fd7b110a214746e65d64bb6297f1a533bcf57f3257a147ba62d5e9515be6fc8b9b9fac2ce485f78d395f1d41f2f651f70f1ab5a2cde585d8774492787fb2f390cd47f77e57f25e55f203c88267ec6dafca480fe7071c2dfbbe5d7a2551b38dec3b7dda47a315e1053055a56c205a6021948775482ecda6ebde2a87a0f97032668c483dd1ef76e9679d5f9c4942c8921616e0cf0c6a81587080b3a230a0724bc868b10862649edf41df28965ff8be6b55f85a057ce2bfab524cffb41f6e3f3ed879be23432a14295c9eb879f868c553a8e1feffe0bf0f0758e916a3b38a61755f647976bc6860318083182f5aba64b2d579d3a68028f9d44c000059351d605624d4eaea14460b5d74354f9ecd1724f0a569e1e0a346067af438c5bcec4ec24bf16f186595ed9c17025d65b09ba78c75e05930969241bd61183a6eb6224611bb8cdd0bd085859bc6f0a3634b0a9124a94ef0c9b19640a7f182ae032e1d2cd40ebec7cb142d3591d107ae505964fe74f5b6d7b317f56b4a93f93a8a0b272994ab4fd56117d52605a20f2734c1ef1505bfe2b6f6b2f7eb30ad44890d378665d8fc07aed4c3c5807fa0d0b5176bf4ff5e7098349b68e6e8e1a92c41939982072868aefb2cff446a87331201023fbae30771a1f9a8230889e4ed790b251965380c570b6371b29b0ca6c39cb3fc258bea8929c5ae28caa7f7c0e3f38eca9f751f0d31e78facc6138f63b837720e05ad3b6bffcbfb2045095a00f161738a13fce5b25f0a26e522f21b477babe63fc76900355d7d879a7c76d929818d616d5d40b184473cd122ae80d7d972c0b89753075e70aaa1fb9d57389cc5fa3d017c668aac0a5245386d5207eca1063d901e91cf7fa34d00fe32be96cc5bc43afbbe1421fdcce8ec02cdf6cd82279fec15dd6a098b56b062396099d79174474cf63c504fce5272fad84b821bbff4a693f0dbc4fca9113a8f532fd0441297ea3a9afc035a4425563861edde39ce8f81fbc92089f1025d534ef5a74b25784c18ce9008138b89ccfe6b46bdf36fd5809aec46b59f30bec16368c7d1f2c2ea1c36ce80686a2ac5cfd05e2ec3a705fd50582e12a1f00104c6d2a670b4ae62918dad031122ee7f1fb736d8c206e3426d862288d3ec62acfcf209ce9958654e9529e535ec4089d1c00a97a0aa8e90704eaa62c3329fdf78d0d06ea8e9c600cf1d78462cb9c9226ad0535b7f8d6394d5c7447fa7d6c14eafa5e56afe0905682b510139af1fc6a0907617e93d138ed9b901dde1fc685a9697a6bb6696a01d83aa5a4c2488c63eed8cdae0aba2e516456623fcf08a8f73a178f8d9c83957173b9660e1707d5739f0a625350875ab03c223562a1419f412569cc6c7f9afd6fa77358a4986577ac091257f9f68800c5d3737c2eeb5703e429d4a360e62c0c4ce1fd1010bccddd6d9b8530fa53389b12d8beb8ed03b5816085ec970356a34ca9c1ab0edafacd9148f4d76fecfd259427ba887e3580e99246e81629dc478d28f6b521a75bd8d11dbe738d773a5abb8664d7553e80f96fb0f7bef5de543f663bc43ae59c1bed74fd4eb61be97b0276ec5adda96c67c3b4680378e026f3b4baff82c16b4fa3af159a7a2b1729277ae4208a2bf9aa42866411eab47986434df7eec2f727248b745f7fb140e3d8b82a9fdd7340ca5ab997db592de0369ebb41a983f53aadcd2bf3af3784a6165aa5a7e67d96ca9000259ea6a83d8a8bb2d4564c59aa1a73ac1d93814c74b933319869748b7517ff3d3f013289aa21fd7526e25cca51f4fd43c8ea721901f8aeffd8e5a6819ec74c543e462b77f43510581b8c57607d78bf16c64f0e37acf30e181fb318fa54371c07cbf3dded9c3258de2a9ac8b69d144da79e579222e626c51ca54838406615f2aa6080e66502b82b69ecb42d3721460d88a99aba554e025860321b810e24b244ce8483c188d8252c9dda6f015cba8c931c707ee36935245c952eb38fbe20baa6e6b062fba38d07c0ec6c01c1b1b95652d59b7ab9b93bfb362df386a0dada7d7d857ca4f14f91ee8cd82a330ab0be31e166831489dfd2f5799d393b80dec2a95d1d31d04f076737e4e38d7928e439bda321bfe2f0479aa19b5568189c54699cba20785b6145ad726d811e2ac8c6ac583cb9ba5c698ae39e1008f8c46fb64fe61941c8ccd494b52c8b5354ee46c2867002710ae772145e397c0a73b5578ed603eed3abab157f1ed4c2bcba3a4f8278b398ea1a2a966e5b1233ec6161f048ac84cf58896ca06f6af9a83fc6753f60c38164a7607c33037a96dc212a60c66e33d72f62fa8811effa19a05ef24582f82777fa2b8682f47e3d65e94b67285689fc7983657783c66b7c935f8cd611d6b2f4f5cdd8f4a5473903ddcfbd803f0d0666ea6fe268f64a7c33151a6bda70971bbc8954422379a7ce6e8d041a1dfb667e23b8596c77462a9cee1d755e87d840bcfea121f9ab669298fde23ac389040f5b9351b4660af9c347edfb04e756bf6ff13bebcb61e5029433027bb85c59ef542936551561ac97c107b35c2d98df9c7162e4b7950d78b429274cc8213728f3c1519d1100d1c4969046eebf73d58b06018c9993236edf21dde00d45fa065ed7f38f2833eb58fb7cbdaff0736c4fd1727cd8bb1d0b1870a20ef7f473972c63f2571c783c4949a9c0958d59366b4a5b785fd1d9a3907cd5db48d972dfad2be0e968940d78bf2667e8d47999671567716e36f265c5780e872427ff08f890875e1394804897a191ae8be6ef2193ef29cbea7ec4f00106600d1308e3374ce5c12407875bca17850df5f04978923b5d03b373b3c408d4eff3c03e78208e5b116bdb3bada0f256fdedd6dc78805bcbe377d070527a00bf895c58fd02316e91a7da0c3683da61f460c3b996f0a10ec41718ab86f751783f66ec3fd52380688f1dae0f7e8672896e522226b64e54fbc26c489d2dfed4ffc30d25dd6d48b7fca1e75a8d8a3203e933468b96c0fe16c335579a2dbbf58ed7e8d0bbba0c0e22ab889961eed012f901d1a252923d6c60f5ab7d7ff5d767e9c11f86006e67d06af591b856abe6b5ec53c82a39919225bdf373228c5df6c2702be5618662d73bfb5b6ba89b5d3477386f8512832d45c6985d5afb21fea091bc78c907c02ff0ad4e4d54fec27b5fe377a5a70fd1bdeeab8a83917bf3305b52194848ed403e3aa0fe6c0c3f4e7ebf9724a69c76a7dbf3610f16d509529b8d80311ac38689062bb36607ffcea1efd9fec9d2e3eb680fda6390878447c2a8bda87e50e767fd203a512fd18e416f374576c1cafbe2b4b22a4fa9462d9be5e072376b8b23162f14ed06b629562bf8fd68bbc6ff62d0f07b6971d3e33f9a2ecb31b97349e4f5a14cba5093afd5d2e19aea2a23d0b75abdb3fe768adf48b6ffc172bb4ffdcbaad63038ab32b59bfacba8104e72ef47c47f047fba489ad776eb8bcb993c17458a3077de833ddb06f7f9ad91853ebbb2c2b6e553d997c64a5e746292ffd236c138628c1284ffa0a55efe03d48ad1c686b9e7cf2140e2c23fd21cee6f3baccced29ced58b0d027705946b536fcbf690123e942a4e8cc41f16666797c6f9266a27d2f7fc9ea7d0ee863ca404b9a4f78903b55e9f6229c64d7cbfc6e72094d96eefb85069c3c20577d5bc5aa048b26f41c9b28996d28443ddb112cd6502bb206bc36e6a95a107faa34297d1ae9370c83ae2baa7993638c7308213ed99f3c8b5e13159c908acd64ad17b53bb98306c8cd4dd325b2ef3b3eaf63e37a9ee6a49e45fc80eee4b4db950b2de746ae5961247b017bdf6b09192098f63f284eadcab4647d5f23cd60a2da6a7ea8e822f3aee635d20b21cd6a63fcd7c81e8f107d189463a19a8472178afd7313de673dda56d7a2c96b330099839813e166f80ddcf508e96d1a59fc60fbc4cdf3730c2695c2bf6bed835d2b1edfbcf54a01ab6d55c9d69eebc5ea92c45df920264d1f06ac596638473be77782e132240ad5f0576dfdc72c22847e5dca186216b556e804a88293b0dd7c180b4cefc14929cc0ff3aef7a3381a405e85fa94c855a774ae4910a7107bb92c3a100473300cb0cd4f6a9f20326ddcdfd331dc39f2850491bbfd6c2fa342e33593ad33d44814a6bffae4c8e03b706f4b2389f970aa4fd5945546458215ad617d6c0b607ad10a138c5688b2a088ecdb6a96b6d89fb65b2165c54f21082d633dee0c5113cd9395ff1bac7fe4c6df87292676e00130df50f0ec533e8b29b50d7f6fbda8d435555e735443f1e6bc09e96065092efd89edd64a11463c084d73522de7c5382c1ae10d761f650541e8cebb881199c95314a89738bce87022dc31db51406d28a2e4fd49116458e37cb4f5a5aa116cd98b37d838c1d57f03603eb54ff261fda1bffb72ba4b0b65b41f87484ecc4dca852e5c4464ee44541c4adbc7571932bdca09c707092cfcd4a0b3c88d5ff9adfdf5c3eab5c1c6f1afe4691b319bcd9bf4cc0ab186debc20edcebfe18d7f36194c52d249f3f751c4d7834467bac21684ecce4a1fb5e0045df867cb3910578d79fec4e3e0c6af97a6162064252975fcd5ebf9507a5eb80b9c3c925f38de8f05b55c727f19f691a17db2e34fbf475b88763a74a42b470ed9c602780446becea6b5ae852d5b4a447633f4f58f9bdc1dc14f2168ce98398977c1924041cb79bc79623c24760f8b711eae247eac23b062b049e7fd562bfbd1ec7734139f2fd70285a24d78e19b81bfa2d88aa52cbd8ad35b4ad65ac54b578f40ce3019a5daa048d35e2aa9f668f4d709976e9399d33317cc3b34a8a35f136b7cb0cd79db359c35697f1cde3ddeac605bd517707acc74d70b054a0e76d1f80ca704545cc9a6937251eb693f3f657003a079ce63581013bb1e8e60b5c808ce1bc9b20de9f8964ca7938c59f583660a68e16bdb94ba07d86a0fc0bec5206c5d3feba14049ef6e907b35483628914740362693862c28198d8de682ab6507656c2113bb35a336942796410946fff272db1575d917532aaef8cba9bb71bd045bc5684ce734205672d9a1beb6d3a32d4da3afd825d530492ee3cd625556f69fb62ebd9b0d84e8d66e6e44b537233cca425fa9565f09ec0c01143b1837a33860de70c80a166e223ef2ad262d747ef152b8d9aef76ffbaefc8f53bcd4499faad03c5330a0e83af717655ff02e542eea4c17d764c43df39f9f406af89d73947576369e9e656c308ee72f4c49c1c27a5040c62273c4b139e7807d1f987b9dc8c0da351bb9628a971039b83cdaeca3a94bb62f828400b414ad24ac3c4476af84b485a2902a9e2bb9a49267f74bb9e0040237b9be3f7e2cce19153787a397911079fee3c6982135dc737ca644433061d39e4acca04b4803ad55da84c95ee52cb436cd6285acf49249a47edded6a580e5e4678d0ee51661ffa86fbfdc91c6866b8147b85940e1e2848602172b86939cfec23482d71f8de6afcd7000851862928633a8fb6bd65a7e120cfebce6ee8db8dc65d424cf1e9bacafd6e720f27442f5bffd0915cc65998a31b186659d78e472e351bee9336cb02294373d97914fd83e5d2000ade7894f8587f641a7bba04849c7f85d56b0747bc6e170fbbaee0592bb025f081a69bbbcfe795da8e9de0f29abdecc47e3d2d05f281c169a216530231a23fc87e1bf7792638a5a34a2512fe927bc600716f71acab4a89ab1519359d9ca56ab189a553730433f7e6d67d16d373bd5360376b99e4f0b0b7fa9d1f4dd575a0ecd32bac795471c0d2ccbb0bb417456add0d57976d57c89e9281c190644fc37a0e55eb982fc275c7807d8039b673106caa2f595db7ab3bf9636509d442b68e1d185f52d23e6519304720ad6ee28eddaa02edc6243d8851aa72d1fd53afb0df70521be7c06ee764e370ddca110211b30c2f6f2553c897139907eb267573e5bd5b03af32cb86ed5fc842dd608cdca39b7a78defe54207f88ae6adb0ba355ff30c67543bb5b502210c80748f64639ed9cdc2462da8e0de9b8d2e2ca34431fa34099ee000bd9922b81c9054615a7e096be1a7c223f69577dacebb9e02abf977bf6bcb70da9ab15b3bab486fd44179b47091dc847b84dc5e26be23544747d862f591818931d3ba160c172d0980bfe30a886cb50f8caa221c1fda09f1f9ae7b367719358baf0f0fedaa0ea2b3df2c468603c0d5b5effd031c16b0c3f982563e8ca4716c1a9a931f3ca5f03e11582d10b1834cc32a0de3fbe8bbc0d5cd89c5beb00e28a9989d06849d804a73947428ee17774ee1ee8ef588fc6f88d3f06873685b24bd52981edfcc8ab99bd7afbbb61b126065c655bbb816e1b2873314b6f5c7e8888e1b9ba895538ec252ced5b73b345ccf1ff4f23c923213253a778cfda359e29a394915c2bdb6142b1deda8cf4ed63123ebe2668a1a771b281105cb95329ad3ea3d8f88e5cf60b5644ba89b9c675d4a0f4803051cc732644ba9827315fa0726e91943878a30efdd0e6a841086fb5601d1b2fb707d1f1088f07261f618802b66274b09743888b00579f904ba17913ce32bcb201b23888de3c6fa38e6f55b741c154135e1793d5dc93785aefad6cf9e886def156788a9f72f2fbf5ba834e27db343aa7d41b4d54592d78ef7554cece74c289d400844ea08a5ab205ecc6fcba4c632c5343783d703ecda83525bd29fa3b8dc54346fc0cf2ef1b9cbb6b5fe6d95bf535fff155ec92551a0e15471104e505909b266f094dfd69dec1ff817795ead2935a9327dbe02064bdb4772277e8f79a721265c4d29729c04b2aba74368f5777e4a5f82d32a384345da244ff185c98c1dc33e88d8075debb09ded28dc35e8613911d144b81bd248da3df62261ce83044760597123a6c8423c1e531144789e16d41cad0c9f0b46a373773bbdfaa1427e9e7905b9a290683c01a48bd51e999ce4f9db515eea912bdf9c0663672ea69e579d8dc1a6e74ca435abd0e608bd215b77f4ce5c904d15e849ce7c0ba26056ed2bbf0f2bed745402db9513f010c298503c6f762d551932129e9538a314523ac5679d8d92d1bc1f1a7a47fe4881a17721aec4635221e15e213a5accc82156ba9da793799518212641ae5ef03dcfec46364b9e06597b27f29aa9b9c8c95df06efc484b63b10566021ef4248a7e70057e049f56efa1b57fa7f5692c9d452ea1c067e62fdc554ddd2b18c8433d59067f971316797fd9853ae6a7f51dbaba180d4746edbb3420461919b5b735797bf7dd19f84d80475f5efc2748da17b1a6ae756c3feb780b70828c467c2d65df45c8808f1aa105d6a1a735e25e84a51279568cb7a95bd0e2e487a949e2b76ecf550d1c5f00bd749e5ef27ac04f81404dd0a4b5b229ab602aeaba129c7fd1cada081a031220ff570ec5b52d19926c73d41b1d82d42776b07401be4aa6aa08e47ffd83d74111f317b8a493ef86cd82aa35d72576a6293a1c3eb808a40107c95631a3defb545a15412c49e3147067706df38360f390b5623deb7c0dc1240f9f8a9f799ff1c45ff26dca44374e6ee6c2398dae349c3c328b801acc42249827f81c0a0d2b5d2999f6f8231204ffeac1e49774c634d2f157127d4d374a40c5e76f6511dd259ffc9ebf7ab731d09b7c9f44023959c63a6869939fe33b8a9845d462003747f33ca5d4986007323ec38cc58cf45bd78d350a008b628d4797bd80657c77fafc38b5cde23e32938183eaa3db1c085cddee454ea2766f9bf9d6031e111b36dd685a8ddd4e0d7cdcae64834a566d98accb5dfdbec5c101afb0ea1b777ddab73efadd374c5e82a94327352ff8ae1e3fdc2e70c0c2f107e3290b285914f21783c042254493ba3a42877a9a4337789a585b75bb3103aac76ea877356e8f246e26e1cce7385bd790c2ea16e85f7f1c6e9cbb4f91c0e9596c1eae7385ae3e6b5b1b240987850d4d22c51b9ac3f7382007577c0a98f2fc93827d9b8e8dbabb5d5adaf7768aad10616ca37c64a18d0b19f1230e453539b5df96f5f036d1f67e60d9e0ec9265231deadaf88d0305936060b889e27dfb179d9406325cfae6f4002c74b763ebab897e1ffa3ede04649cc0aad9f6a9135f1f1c677c9d32493125e906a7d90df0d242c99746e0dfc7432bb44eb1f3c2a3e5b2dab056a110a0452e8185efc04b305de188d75d7922fa25a2a3d2ecfbbfbe0365210520e858ae97507230a9079c28b2d824568a7217eb80a427bdf78900b04cc8b7dc67cdaab2ac4e238d8019715885b924ab7a665f39e8a2b8864e263629363fe7bc97eb676b087a2df2f1607b3e2ae7223c89c03953c220cec27d5db097344d391c3dac2f161066ea0779871a4836f47580551a66c7a1a0d2d8e19a0078eb733481c59a52626886f0419507cf151e53c72d58df48141b958d503755b64ca0346273cc3071de857cc927b03d1a1365a76f89f1795db7749126cedb3b429117233b68be092dd8db9aed3067c18bc19142072cdb8328206106678b499525d4a4a237d7278ec6efef73d4d2282f84be15c6068c638737fd4577a83bff0de085dd43d055752bdd82458a08a38dc1955787a5e63f25fffd9cb657614787fff323158aad5a337ae23e6260012ae5324e2c5b644ebb9f47f98d28483b446105ee4b01e9175bfef66582ba7846beeafc1fbb058378683c19ac5d0fac9e99169a226c16d1b6e11428e7fdd25551f5eb897a621a761beb88cf967af106f3ec25374fe4c8f6f4703f8ce9ee3e69ab668354fed00ecea1ac01e4386560e9d383f967c763acab788fcd8cdbf25337cb673f090d83570fa22033f212aad3c7d6171fa6195716718ba64ab34e98b5323a9e6af036ea978b75feab63b5c9ce13440c047cc63daadbc64a239aa25fd90b6162b3b50b7424f4c58db4d38230b47ed5d954464e95de6cb0e204ad87a63305e86a95c1ebbe93cdf953fcac188e2b4ce4156bad22ee3586c4045a666f0a57c4280c8d915838786999f7ff67d920971ff736d72bd3a524dc8837914fb8fabbc8b8cf07cde160276a1fd0199154968c6a97b4031ce16940b075e245e3f605d386032890b217c445420372f7b30b5e8faf4e239c2adc98fda505aae4adc6aa437eafbfb4f85be33683dd6706377df6f57072fbeec015b2d04cbfd80a177b56603506eaf10b3e3b9f921612b1b91cee6230bea397672d554d0a2d2002abb4a8de2bb140b1653f3bd50f360ca69288a36a7279c1129aa3eee85fa5e97af4d30ff1d537378280cf726b6dc5cb416e11c452b84ccaecd4e9ee26cfe2badf6d86fa6fb3f155f1086f5de7104dc51ea668bfdf74902782a09fe18cdd3c0abc9021068c6a88226946af8ccc9926809ac5fdf45529fc6d707806578f0a4a5f7ee731a2fc4b540377d6005d808ae88442673210486aea1332d5edbea1c9763fb2dd495e23f8fd9f8920f26ea7482c56a1e4b5824d99d1af4654968569ad4811e50cd8a697d5dd5d39d2062ea5733a6e35d8f8c8c9495ba8275e915a4b38487c71d0500acc748ba2f643ac2c0f7ecb417abe6c524febd074525e8e9bcaccffd605e25ff9264781273b1064c559dd3756fcff80cd4613e8ba63febed86d0dc6c50d9d48f059e1464094a2c0a8f90107351936e6884033fce0b899d27eb66d45cff57bbb9edbb453958f75304571acc3626bdf0e21c2ee957ddcda3a1d1b5de53d59f828430043218c882234196812f4457162581842864ae85d1a863220623db3a7bd0f9b7c10489c1b146c9320e60274a66b64da539d75b695e5273c4a1cb7b96b14d1e6a3ae214ab4e61a41509886769754a4e65ab6ae6f33b49dba1cefdbc510aa2fd31b6f542ee1f1fdb25bace8a1b0a8a8dadc447d88a3236a39fd5e124d34e779ef57f649af2ed25744c685b1ac7ef1e1166ce93b99509c1d1a8fda03d844573079cdb58a5207f1e7a705d569fd7eaade2760f790f7e89916fa390628fcdb63f421013f9e9de9fb0f27bdfe89fb2c4df09c7d01f64ac7a4f8477d44ea0146b8357376e6ef0951383e6543739a4c0455e8d3f58ad3f87a4a2190e128dfbc22ae64cfb36e042aea4405de3ad70356934cf76c8f14c2977ce33354f91462540bc102b43b176658f1a8f601088b6db155addcd49e124a9e4c2aae0229ba2a7f5e9aafcf62959e3a23d17f6c312321c2c802e99a9715c473646ae226f76c90a48785cc5fee4b0444ed58127e4910d83166c6ae2d2e91c8bd523e7041e6be2d6a333cd90422ba40efaa974fb5b4e6e953be73ab0ab918efe2a21fe8d18c216916de0a664aa455dcb1082997b10917edc04b8460c1cb0d7279b079bc643c38cc50d488e4a1e7c0202f72898aeeca264dfd7a935fd0d90228e919f65b588b66df9ed332e488616bc3c1763189dd5c849261d80af8c667795bc75af0564d0e2e0b674692e69ca5cb200d8fbc14eb44c553a3f065ec00fae5838ad0022db01900e830ab135b2d3960dd6a2b73dcb7276afa2a303e7a1f17d948aa35a652104081ee817d4eb2d870cf446dd60311cf58e80e6b33ff537f22b713bbd84763dc292396d039bf9e1cf0590d9f1be484727dcef8fd6812e8bfb0216d26548fc3a2276879b37cb07d694cb081646992856efa8252473923aa4f548acd7026ca01d0bfb2ff9192fbc15bca4858644b9795034394a2df43bc28ac6465ad3fbb909f0676a5a10128ec1a530d92faf54e6e43ee0d88532c0426e465844494dbaf7dfbb1d0b2f668bafbd8ed9b12d1bdce71027dacdfebc3f6fe5df918aa0cda6eecc841526d785ea5b59d99e76a8524685a7130a60de52d98cd05d5b5f88db27657655370379f5985a3d8d666ec7daf8884e0b58d94d7df65fd6c99d0d2900a52685356bea3e3cfe7410b21be3b33d5cb8af15ac7f72c4feb2a02a3fdaaac388f7a22d99224ee483717b51a41b9303d8dc723cee9b76af594bd588280f34ad39a17543a9f4d0758e182570e95f90b2d6be3f85067580c66ff21eeb42f3ee451eeca58183a8ec758932b71ad2f6d2d4bd24bcfadc55b992a971235c74d00113a09fdbef0f86cc6edb87d854472a80f0f5d794a25983499a6d8f8be2a6ec949f2784be9436d595e7ecdf31283041c38fe69f6d85634657662413ff86c091d0721c61f778dedf72692402699d7584c238f843f0ace3e80b7f37c6264fab05dd13e5ff2da3f0ea897bebb829bbfe3ba673938dc41ec2af8e6c0c70a9454d90e20aec26091e553f02a5a9c8198bb3ae96c81f4391e3e6e408b50dd92f708f7c07e0989d32f0f326066fc6fbe0147d24bbc0042e010439cea0e3a1c861d9590f761c502e5121b4e6bd62aa19275f42e73ce2aa16ba88a2b77f7d2f06e787949354467e9f0eba7fc94e05bdea9572ec3d42b779c3647708e5cd0b215c6882264ecce689b910c13b15e1e06835d357616ff5c6dafca8da55a1b116de8f8cd3f9890385d9440041d213a07c11c488168bc47c97338a2eb870335325ce6afc81f48b24aad608853f2b0bb160225d5db5508600b2ed369d1941e3dcc059b46094fe9e55dee8cd48c52e453c1401c9fa3e9afba8a071c69d05b0f9746fe7345f150108bea8775af1dac3086a2118d006b8506d9de82602d885a5bc42bbe0b3a20be4128990eb782787d29e620ecd392a2c5a22061273b4f3a008756f2bacf9d17e8f04db1eacef92d3434d4d638ace0da1a0630ca6c2a2995fc16d2248b3ce9376e926dfdb2287dbc6fe5e53a9b655581f0977d72d7a9570c8b8e984985efa90fcdcbfba4eb507aa68ec199b67b897b2af7fa88e2f025520e6d634bda51344711750199700ce39a6c2f3c54e25fa5cc457ea3c5a32c4aa52be0195f4f73b76ded02b7a9c77d3e378dbfcab936ce36b3521307c62c0275cae5a225352143f567e2e562bf13d2ecec8bbf01493c2db8eae153ab0cf609332dbc122b7fe8685adfa39b974bfda45c23d6bb54676b24a8bd73af020c89b70f682fbe70920d57742f9f93c9c2ed482877ff2358a63c1982b57983a1376f7276e4a115b91e2877cdf2477c8ed65b54ce43758562782792e36d73701d300fe1e63dc0a65966a26fb4a23ba43ad8d040aa20da60267fc617274fe202ba68f38be9cdfeeec62e03a5e4c9dca9725cd4a2689a8e32090f901cdad755aa2d54b2c6fe3fcc5da3b6d490cad3bb0aa9d4e0e0761b11798eba0e2a8a8e3ed4ca75b629afedb98166a39dd6d35a473665d37d815f2cf4a52c01a8b692ef1e21366e862a5b6236e88366b7de9ac801bb1acb131b804ab8535578f847a074740de5819b5fad37c5018e92bb2e8d979b175d4e49f585eeccf2bf7265641fb8c0f94c717e2ff1d9045aecaa302d285353b991bf7ac5dc93b311ce9078828d268571ff909711e5c04553220f8f80f785cc405ca13e02f0d40b2ee765ba295538521663718eabe5783888c345519077a9751a1285fc236f2a25a8ae44a2df247887451c86cd646d7b3e7a44ee0ef23538eec557f04dadb400a31d87bfbb0a6761c59c8f62cbd20a43c7962b5c101c9cae89c091529b084be1f40c08597b319a8e7d7b3078125b386c747afb321d762a94d6aa534f7cd9b358a8e2b4845beb3a591f6fa4492986745fc57718e28fa57b6675c112296b8866df223ff0d2e5adc34c3be86f5889da4a882b3928ffdf10ebadb7d35272df9af2e0008261c790efc1f25383d628abdd2780263f8fec944f17c54d2f98de4197c405c4486bd4f637b2c5e6b08d2c17e597d236d8d23b37c67c67865469ae49f576aaddf0938d8e0c1241760d08f546ba27f8edb3745e420d75eef3d02985513a7759be296d43b0d36cef71d7bdf6c091346eab5e0ae83b8ab0d626217cd5ffed32ad05414dba17243f4a7acf20b31e21599e0016fa4b9cc4a9b79dd6b8228e6454ef13d6d9331984e5cce151e5aca7d114218c9cc70aee51cd0dbb5e8fedb5664aca9a688451406c1cf155ee61660626d073914df5a898a897431f2758b9ed3980b9d964d3871440215249131851a1a93b1eceb90a97344f94e229df96f99e749327815a4b671db7bf6a2b5e9f1212ce908d855c7a7939ad42757bc5ef3f619dfeae02b75053c52923a37d3f5a09c20d9d3a65a6c9a121482c7775a8b5fdaf1c2fb7de1a86ef931b1a88cf23ddbb47fc9dcfd0267cb173a6bf62b7c68fb6ff85b2df93e2539d1013f0a491aa9e991cf23e98656a082cb95f87c1b2cdd0eddb51048f94ad4aeeb48a426165321145a9b4ec3e85dff0755ac8f20ee71d2e24cb14a13280e9e15709147c499a68da23868b232cc1f6da1de079aab4d542fbde37272572b9169b5876192ae7d1ad5dc52c0b7fddaa5d0998e2f7fe6dfdbdce8ca82eedcaddc1fd75942ecab68b8e10ad12ac5eeb9f612378caba8964d10c1ab2a69286a54f5a6c30dbbbd8203879974dc2f44cb121a19c301037b863efbc74d2bad86c9c8e6e8c1cc556efcf5 +Output = 65675664e3a8666da431f5ef3bea1f38 + +Len = 95984 +Msg = 18124380cb93329fefe63bb9397a63d764b5c9a72ee5ce17a37978229d7119ea8c132b0873e07f2033c697b80c97504a61bac397bb216e3f117a8f8f47aad19af4772a8b68840439ee839bfc4ea6a6c0965639571a28ea14ba0d339563c917e0d9a608b2b3690913a785102e078fae608cf2f18f53e48abd25982bdcfbb533e4c1088d245b75d5d5e634bdf5403ab053caf4b5e66c3b9562da85400d16586dcf370581896892b2a833f86cfa008ff3c0d8c64b046f17552d623a3ad0bd990cc9c005ab8be3a7e6b41739e3e54f76c1d03fce7b92635f10444421e1ccf7605af9e670d4d0d39cba20195feb5d35d760aa86760f3851fb0fcf08a0fcaacc959d8830aec40040597615c2d24c0abb9a19783525cd9d40d29af73721551144211e9e262743c432c562ba98face95e8a7345fd5427f6a38cef8e3580bb2aa68ea2561514319c4b2cac638254039a6c5e6f989ed37eb4642d673bdf3c6dc1d3fd9fafc386b0da7c74fe9b6f10a54e4583fb01e056bdada64d351aa90ba9b11d1d6e4956405e9157a3d145d82c1e8f8ab9ba045a54613cea8abdbd4b84fb62f27ca2c555b7b73b8d27a8f5562cebd89c6e01227563060c916475963f2edf71e489b1b63a7337435d7efa2c519979b40aff84eec9f918773b58f137fc7fc24863c33f7e8cf97b337918495d52d864ac570c99cbb09d151758d6b504ebee406110c78080b5c0dfa640922afaf280291bf113d44bc1b588677a6c45afb5f0d6565bf5498f5d5ff0f6446af397892723ad7983b8d195d8fee20098077ac32df092a5daeedcdc2d4bbe050147b5bf1400bb40faac1f757dc5019bd89f08ac0c3b909ef6d50bcacf4c680303abd7ecfd3cdff7d74268192a87609cac50dbc901f3fa97c7b09ea1ac7f8ebed084709b393475feb8004dc955c2699391e156a2a5c61b40cbf607e94b519ca8f65602526e8437d60b6a533e85e2971117b52be17e3e8cfa8219da0a226f0c41f3b52faaf3a8700e4fe50ac141847385ac30adede1b9ba45689077acd824682a37163afd6f1dd917f404c6fa0f047971ce086f2076b44db20dfe7319c31e3ab26efdc6c23750bd83a64e2a51450f33560b90e231b3da91c0e0b85f0989b8fe8ad9d055b1f2fd97c1c525a76f99f11bb2d36e998a1f8940e27f629dd472812e1426325a1518511262ef3fc09d5456ad08c3f617b2103cb5973861b203341333dec29856941e0797d772d0f8733aac61d84bcbcf123c816a6faa4a2e2e44cbba5b4d76ed978a9db2affe9dd179836ed491d95432430ae3f9dc539084be1b373c0a05526197d46fdd4ce10ace28e51a6fd5fb33e3ccf1d0ce5db2b9382b2dc2037bb8bf552d821a724ed88c5109c63bae153fcf560897d472744648cb0df318db10a6125ac12a0a3c1633b70c84bd4f29c0059afb9e537b60a09ca3bfcf01881d797c0fd4eb22db855380ff532210c14d76fb2b66f6bb122373147e78f6efbc351698ec461402fad8574ee9b77a873e839a6f050a9a3545255c4c2d990e1411cc688b5c30c450e4bfb20bfabbf6871386baff9c68f1688100dcb225a28cf5254defd1b427848315a5f446a6d31e86fca1492b7604b4bb622074c51b07fc2963342cfaa88ccd102a258e6d629f6b0d367dd55116502ca4451ea523623bc4175819a0648df3168e8ea8f10ed27354807d76e02ee1fdf1c9c655ee2b9fd08d557058dabdf8dcf964bfcacc996ae173971e26ea038d407c824260d06c2848a04a488c4c456dbcde2939e561ab908c4097b508638d6cda556465c9cc539026b59c4d2e75c951154d5299935093f7b63438ce85dd1b052df4f69ceb62806bdd2591fab9d7884778bf573b4f2a10e501d6c0b739c73aeaadd3af445013512fee88e1ddb8e220b559bcddab935e70fcf190e62baea26b81fc89f518925f6430cd47f2729636112f2abe2c76ea5e52a3f80b0f882f0f3b6f7c806e762cb738231bfb4a35ec43e8197e4bea09deba248ea79db359655e1907b04f81e989bb3b8b3d1b6fb4258bf408c6ee8ce0caf264f162d1681bdc2f92ef3a5fc5ef23cbecbdb310c959dc8ef371970e8ba84987a290cc3e944bedf4278a7d29b0f39579ca5f1083edb37bbd34f861247cbcc4ea5bc1464dce66253c457deb45c993593562c3d7dd533d8da756e1a7e8c68ae7aaff2753878cf71c787b1e273c765ae99f24a06b9580747cddc7d1ed93ffbf0c4a1b179664468b3e29470f93664d96c107be696e44fbe4d3b1065da4ee8eb5bd382e36617c917ef4df27a6c25bc5e36a1f6e7332542c0b2cd1a0c960210a0b7505a6f85728d45efafa9b9836a565dd6f46d3726a4ba753e2a015c9a203e82cce2313d1ea01a5b79b1c213852aba3c12b0e7bdb78a3f45b8facd3c2dcefbf96132103579c8f8bf56fb4472bc907165b37d6d612dff5798eae786939934ce6d40e7fe3fdd13addb4e3437bd6ec1023e8105060bd22a8cd69a97354b247c3f462faa044394a9c3162804a3dce4e8f53143edbaa3ec34656791b2e24b17cbd6ecf7232929e4b1c2d7ae1591b6662bd3a4c3e09111c4446ab397e1937bba4c1cc760f975d916533088a60c08353bb22301c784943da283242374cc52c35424983f31d5f03b71b99790d9941140ada66daf1881ca10cd191a1def1a260b2f7ed3bd345ea3383f087e570f53b3bf022f3a167e803c708f2dd40ad173183b918053a72f3d95b6c66b6e450ff1f69b8374109ec029f0462ee7db53e2812e3bc352a267eb19ce9e5008eec2a317e2ba789e7aafa823f07bf370b65eeae972f30d1d4863309b57d923078636916d800529d4fdb1fc1744f526f0ed95b156ec4cb609cb05c56b374e8791be09a29ad764dd3f230c85acf29e0f8e095ffe6ea32c083db5b4743076e4c6ce1fa39e47efc0de0773280b8b045df67391239bd99f7d49e28dd703921d8527e5306c4d1bd1ff7253756e565b811922c70d4b4e40e825c21fdcd83b3b3318f1fe79cd77bf840be24bb2442dc572bcdcb1063ee04b870ebb1d291ee4d0c0846d43832ce3da10ca7619b1135971de2d6c59036419a1831e7b03fc11c6fccdb3e3dad5f25a157e2675e2fa44a306cd541ae88c25c0ebe43f4cfadd19a865608c9aebf888a418d50629d1163dd02d48192e8629e99fd0b258742a559e54b384f7dc9f7254898a1d51d80b8c68ab8d5564ef5a63187cf9f6503cbaeb08908f3edcef1dcdc0d1135ff1cbbbe42cfbcfff1da68dc11a200db811ecd328bf25a198231c8e9033435ca2cd4a07a7f0879a4b2c9b46cc5753b5fe82cc9c932bdb9099b5ab1a4415a80deecd9c175c1e1897437916ae0a38dc99d28b243eb4b579044978e4e870cdc8ce4bd90b148b1d766deeed5fed052385603b143be013c3c9a7b1550f219cc56b45c2d9dd26bd5569c5546ebd2a458114b342055aab39bf911ed83473ec5164591d5ab55b74782eb9477ee57a8e50bb5239ed46c9c7ad0f9a14c7fe5972151259fc1c55cd2747102d9a733bdc40b037079b46c0d05bf71dac2f849909db7337358b0ea27b66af638f673b562c68ed5ffb805559b78fa04f8f1719efcb4ef03bb3713a82ac5a3a8fa555df20b1308d9af59121fac58c2f0f0a758de7e7f316879c56a8deaa2b6ffc380d6680b5be1a4fbf76b28c437a2cc4e6f1e968a4f36c81b7e45f9fbb00d6120f36d85d7e3a1ce81fd610f579811fd5eb32345c4c767a92cec167ab2801f83af4793ea155cd19ccde59441fafc791ace1e176aa25a3c922a795c8ec39585cdaad7e9f33829f9b63c4a855f02d770ab090a5b83a78a3e09a0c098a49352a8b5c03ec03fb4dd72915986b4b523ab71049c02701f48c9e4760c3c4b6a966a20b26be6c72e1fe9d4c4a24492e2c20af2ddf380f59c0abbb87de946f54f612e566a2a6a5f5cddc1b8a6a2eeb07652589e8dac104c8861b22277b49b26a17821e2336824093a730766edd7ff9dde7926ac9a323ae572e25fcaf9ea83402f4fe73cb4c1ce4555742d97d0bdf1ab999af7c59a026b60da01171a8b17b9e2375cd0ce54b3a3a41c55a6a415d15f6a263c3e71f3a91c4f3c427a8991b8897d6823912f99ba5e962dac0514139eb36a02d18d3a4d92e7f0f82afca0a4498c8220388ad90a4259abd7cbbb705082782bbdff4676ee6c3906bc3f0fe839472d90fe0030431cd82f55c9495c416339281fc62a0cb07c7199e0f6d336d8d73e071a501f240648083a1460b949ffb20f4dc6a9c6428f7e6f852016ac03eaf49a838ed4e9d88b125f14783c701713c39153b0e7687a6c4aa28544ba0df9a727e93d8eeb04b05a122948e1cb2246162e5bc44eed8536cf87a704bf5f9d8a95d7a69f6b00d46dfbbe0341f18b34498f48bb3a214ab0ea31ac099e0055cf292f8a5f23d3c4fd43d87c799a17fb1aa3d7a95c0fb88d50172b3e36cba85b0767ecb68f552995c3e478e408abd59969f797c6aacf8504074024a4bae827cdfac945f293ce0cf1ecc2757b1d11baf49697483723e4076d2ae7a67602adff3d0dcfd3b518d8de77bc5026b83346288b250551615407c0275f9039389a77af16b4ee0e749b101e85d7303501f7c3bedb99e45bebb7853fa109bc55431ecfa7e984a66ec7870e5daab1c4f90eb714de546996b02ccb06e688bdde735bdc208a23f17b7d14591e1c64d0911b351da4178418bf06ab0ae7453ce0792bb96f14c6648fefa1e1ade9cb32a826f3fb880beae92bafb7ecf3b0ec4c061ed7024416dd19b47585c5e1dbfa92cce91be882c6d90216fb5c7921ee4c24b3321dbcf7a14ec213af8127817f1b03a37a0b728a4f525d6f145cc5f219d5556c455840063e8bec01e03c8d294dbd13c03c4b302b000769a8ad4159f0ae185ca5db2f41dc5924f613da006d35c25131b7b24397d1a338953808a2bbba25a5b8d4660b29068b9a7edddf855e336767fbde7e9d101a93868eb1c8e9519b1aede88c78646bf1406cf4a47323c6aeb761b0b8f3a03f624b71b48a609db23ff8517a3284c39149120ce62c37744d044cef1edba4058c55457a8546622864053880cc7b0db12f5a6b1ac1b98eff37e0626094cb22357d401c119f5a3021dd7765ec7daa85b59cc1d5e715f10c1d4dafc25690ebd0a898cf29d7615a7d0285231b050c558f49700bcd1261571166c4ded741b1d241d7455f192c59bb8b530184a26ad7108cc52f94cb2d32504154540a0bb275f2f86a298c448106f1fd9bc918967e8c5000e151f94a87e7611e7e619dea193be256a9bbb34685e7924635425b81c09a887e065da5e5c31f2e0b3d7426fce692150f4e528099ab8a10e7c803c9dec1604e76acc927076f380b8a2a1211bebb16ff6490a450b8525cf274bc93e028019c066d5d1af939dcd08e3dccb20aaa071926094927c02d2adebb5f9b693ad7f19c44d49fd998f79c573a788dda5e394b371d6fb0334b52858dd01add0a366921ff8e4edd6b82cb3e6a74dce5f1a8f707ef49fa6e7d4ed302f8d53909dd7f761324472eae67532f3358d1cd7dae676dbdb0305bec5c6729239e3f3caa79527935a904168b53668e0bc0d5ecbd671607ed0864e6b26710cf57ec828827646bdd19fc4978ec9649723821059d2d92315006865c3d4913d830107223be0905382c20ac8bd84ac6887648f7c57126d645c0ba888ac228e929e5fdbdb740d7f223e0fa284fb73e6a8004aec3b9eb6199cff449ad8517ca5d826b702d91b31cb1db85f70e09883fd8eca7da03376e46633c455453bf90b5f77e4b085067873faabba5b7ac5dedb7b81aca6b34e29c4da9174e6b19aeef743d79df36b48d3fc96330aabca1913a4e8e8706d2e72fe80ff1ed79ee7de7667da611c28bc8973f4271f71f668c68005ca2ddc7918893c3d5d43b426eeedda83aa7b28f681b0a18233d6b7e45ab26d27abb7b973797a2c267a66d425ceb162753d8e8805c1a5a5ce44c0a41eaac7213112eece02592d1660e0f10044901155621b0305fe8450c701e145004c60ebe64c883ae5cfc18a4216174afe2b3bf4fd75ca406789d2994f4393cd9216820802a09403c481b879f76ea5db9681d744a0d3d4af764db46884bbe0c023221a05be54beb134c147e27e90140a92ef6de887a7c1b7f9f331a5af9253867b1b2fca62918eacfd3775ad1fa5ec41b91c03c8fa1717bfba22523818ef718762a7ca3f367e8d5de78a4ac222d5b3e7d2b1a4cc404b60317f831e0907fbc42ca06ef24c8244422aba63ce09cf47f363a65555dca36c237411be9d00c4ded3dbfc19afd98d0a357c3d690a6b6e24331ffdb120e069a2e9f0387ad70696bf26fd405009cea0f9efbc394505ce4693fc829e6c0cc0db14390dbb5fd501c7c646fb32ba09130339f750779ec71ca0bdd5f4532f216441eb9b3364169edb9d1dba3b9b00b690fef1d5a2bc1d593bc4ca46dde2a268b4e34e97caf9473a7a61e90a2742ca192ed9491218d36ac215fae1d7a6146ce8990866b63a439ab2c85a55bf26f1bf38d3db6a351c832c0a908a2a11b5b136aaf9fa5b7feb0ab50dabd286609f6e871d684d7cc615930b3a96bbce7b7381a7b4beff547b461643530d0fa775fc82cbd0d677a64e6bccb1590ed7f59e484b6810ce607930b12eea8cd55ade86a4f5335703a1115485f6c36fdf24c6009dd920c61365f328951c52c1ebfb531cff8f66bcd913e560cdd9ec85f3eb6a2bd8f178dc7355eaeb5ba624fa373a30be75180d073f1449faaa3cd2a1317309a7635c185cd87a85ff6995083da05f9af56e57cf3e1cee65ab84e81dce8106c9faa4e2a74d291aedee29b0a59411b1bb485215556b5ae762fac4a67611cbead5ae054aceb84e7e4a4001c1a4066f79bb3f891a4695e0486870d03c8574f768534bec5e34a42eeec37b5b8eac9ba300c2627b2e4bc596599e931172f1feeec86c57c3e48219b3b180299ee1665c958bf73a91190c0264612deeef1262b79652475cf1a55f20c411aad132807a502d65824e31a2305432aa3d06d3e282a8d84e0de1de6974bf495469fc7f338f8054d58c26c49360c3e87af56523acf6d89d03e56ff2f868002bc3e431edc44df2f0223d4bb3b243586e1a7d924936694fcbbaf88d9519e4eb50a644f8e4f95eb0ea95bc4465c8821aacd2fe15ab4981164bbb6dc32f969087a145b0d9cc9c67c22b763299419cc4128be9a077b3ace634064e6d99283513dc06e7515d0d73132e9a0dc6d3b1f8b246f1a98a3fc72941b1e3bb2098e8bf16f268d64f0b0f4707fe1ea1a1791ba2f3c0c758e5f551863a96c949ad47d7fb40d2ad58d16c3adfee3aa17bea13e9633088f63fd821b88c78eaa2413d2e5eb33a83bfb6ff06f7056ee80ae4ca2a820311a465a68c4c6403a4b555ebf7d6e3adab0d84380264ac7f2f12412269454e4a3d1efbd428fdbdb36500ca8f04c6d0b23c79e625020bc316dabf2d7deeecb5005dfea213d5bd2b6364d2e9758b868b8a95ceccc72685a29217f8b83f81a71fec184a41a9bb1316dd49339ae5b59f7efd5d141d649758b3bb8dc4c9ae4cfff4d7170cbfdf0187e6e7bb2bc526aa980fd33c53c3457d0f5c59e52b4914747b9c89024b06fdd0a1034a62c3528191f9a8d3dc94a5b2ff2f0733c7351eb724a480ca8010fd4b4fead5cee702293e924bb0c7e2deabf245421b12d9eb31e08200066239628c11a7e9c53af2f132a5d7158f75f93abd4f78d000bec6546ad6b6199718d6499b96ff2639582a9656fd85dfaca5c7afc30fc05f1dff3478b1e3e9779cb5ffcd1223802a9aee38fb7b90c7327121f445a57b4479dc9dcc60ef4d43a07b025bf7d900517c51c5c3288aa4c39445b029044bdb2da5a45f35130a5deb1e9ec493ced9759ca5c4a574236c82a19090190ef59e77a26cde0e1799ec5b0a796bc64e5af8ca862b5d55f3f607728aabbb254a1f8496cc54f0721cfb7b8fc7374ccf35a41f463998839fe7a945bba66f2c9c868be682d3e74353ea40a1404be2a8a6f0b33732dd739d49f9420da71c634c46693fad81dead3f79297045b8bd01e614269026d69945151cd0cb467c150f83ea9c45bfdc152d4cac82944f3d461d70e17f41d67a969552e0154bda83b8fc3a52c6a506dba1efd3b39cb3a6180ebdadd5a5d02d66fcebbc5d6fcbb0042eb1d744906569c5aa7b3a5721d534913c6905b73d4415e1f2cfbb5a8752b0479eb6c489a18fcfe4575aeb60b602e0eff9aae051f2a67535a0cab7a104e8c293319467e9a32a227ed1134c960543927c6c06a66969fd34a82f6318f88f95ce320ed22a2b3b3f49dc402ec7c0b69f327ebe07bfc84d513c83c7234628d062bc6a5ff8741913d52c46cb33c3a8711fa93e1635943644ab740e8f91aaf96e567484498fac79d3f4b3039aaba814ddcadd049d178b7bf612c490b035aa32127adfc7f61e3c1423a4c65dd61eddcda2a8b7187a350d5e0d8e14535297af9d63d4e37d8e2d8bb2a9ee4d9aa712cc9b69c11fc1d61783a82e274c9d9b4022000a6f69ec3844011b10d930033411dc45da1efe48d946532103e655b7b6b76924ae505a5e1dec0616fe6e57e0a6a275959cc63af5aa49e79134d215e9c984eed1f8819c1965ac026c1cb4aa79244eff5158c1bd1072a8a5c069f3757afd3017ce8f091966370d5de511b31215d79be242b5186de158ecf77649525db479424ee51df0b78cbb967f49857375fee71387305cd234b0859c447a7cf6b6dd6642fadc473e60d51bcfd16022fdbd7a7b3e54e3f4f7f9c42140f395abe8663eebb8827cb7fcfb877c40b9f28d58d0d2bba3b2222690a46653606e8f7e2e571f312d508d153270eb0972a0c6718c984ed0ca0ab69aa31cde43851c309cd26fc85f29cbd708e6a749e7ecefa574a2fb35e23bc268f73b4b741a36653faedb98809e325b21392287e941360c573ea1e3d1187f44fee55d187000fcb1865b52b99016d2683550edfa123dd961a4789137689b1df6400e136b191c5e68cb4c3eba40ee905ad9f450e80d035c5454ca7adf43939d42f817642cb897e4f2d728a782d84ff49ad6cd513723bc474f2edb65c2aa27888fecab5943959816b8729896fba060878ef484fbd0999023b9fb5459cae47f6444e570f899f8487d206344110ce04ad09ffac1539bbaa676fa83dc5fde3bc4bccbab0e4b1429cfa09374d3239ddf345835b22b6380cd27cb7a8e1c7ee6f51e158b062e5a9d6f54077a6beed197e647a5b9e26b3268193aa7a0e4bcbecb5bb4f9ecbe782b1d14ff3b3b113c25e03daa41915329c839e70894d64c632773b5afef569a93c97a5ef9c3402e6626612c86b427cd0c2edd7fb9198490b9c2c74b3680316428399e966a27ef8a13dc02fb0384e218bc6b3a2974bf10766896af647232e5e2de846f037af0b2ecec50acf1483b29fbe2873a2d610ce3c715ab144a8b90dadd5eb3d7ef4fa5f01e988945577e60663f268bc4d2a98a654a6a0adc43a81f791c4fcebda014ce10e6c08fb675cc7c00ac2f7ebf6274c1fec90fbaf198f16928695adb085feff47c0d0c6be8935b165f0aa6681523e938170aacc339918ff5508a27e4a274089e9b5b2324c2f953b6eb213251ad5e317716d7e82e9e75aa4b5a485df072278854d597aec22befdbe50cb97c426f5a730665f66b02078e69f4ac6ba40860c0979e928b544e0dbc1b292a992b424361d86e6a2fde475b22f577b0bba63354865c053afdbecf4fa93c0dad8ae85a11b988368f4ce906847a765ccd00087936c2001035b6944dd9fe6616fd545b91c1abaae63b13334669de132c6a0175e2eebdaa48ec7e7dd19303c0ce82bf2bef3b7f6706d54e650ff295f46ef187937765bc8333c51c216165ff73bca493017c677de61fc7c3266907e942aac95a0a3f810ab35b295a2908373ca668cc9784412eed50b8783b1f5d902025685a4283422bee614881fe3dcbf100825b60945d457616cc5a507df8f27583c4310c07a6894cafb68033d104b47b942f1cca5233902941838cb75358319e5a488c47701a1bca96d98da99b27cabd40d4337099af2b2db69cd61583e720f4edd802734688018febf2f749244d159f4b9a29bc31791d6cbd40c0d2d64eca5d839d1af851974181f62b447d331f9e0affa88514e1386ecc9e97d356143534c266bf5c3e59f0e58afeaafeac92456ce4a227cfe272942737a0c8960a0543680cdc6550ae263af4914d97ac3d076687177d3e908dad374f940cfc925470216d212eb77fae7f1e777d291bd79a5b2af889d8164e7d57c6eecb2a5a4d9d1f774beba4de70a72e447538db5e062a563bc624fbd6941a3bec0dc3420b514ed8ec0a518502ab02f953f6a9aa87c155bf3ef9ce2da7e7cc204fb2669c3626cd6428b33a1b4ab925a9f403b8e0be918360de9a71b7b1d1fbcd97e89b800452848bd44e90acdf217a06cea24dc42dfc1cffc1b0f4e11bd90f0b6db44a359d5fd91498e13a81e96b67d78ade509df98c88658f433ff30e8870a279205b0428d536c91b7620e28f2056e6cfbca9b44dc9305af15c3a35b164865a6233b735cd3a027006142a16f9c7aef9464641514f3a7aa58e01cdef2df7bafbd0f54410b618a5d200c4406750e8d7d99683febb2767cf10103de068a9c9724c6d6febdc08f687b7b28d4a1bbc0b394e687bc93cfed898611c155be94e601716dea895e3ee5d10e7c377307b64b93c1f64378b1afc163b615d9326ba43461221cea8286b8ed4a829dc8adacf7179481631be2a9e48a822d878be2923b103c935e3788ebd10e3b746a5cf305f0ad4c5f9781890100b16b38e189e4d6cc01da61ac51fad219d12a507c54d1b7258511b91e04ea3b86ce9584ae33c78dc971e10971da56fde5deada31e50c81528378b2a612674ddd94a878d6819f93bc5f8e6f769313ba3e77f2be8fac154c45b2d1f200b56b74c9aadb7af89bcf87543ff32a7dce70788713b2b9e8c36f62940de54466726302c2d70ac879d9d53aec60d7ab7577c490025bb33403d122ad87bd3b0ea1f156de1143bec920e2b896cceac159253518eaf7757c95a97f371365ea5bb97ad94cf0fe157ee5b75f80823c043a9c57b1736eae899646a275b57e78bbceaeb6d34d20d076d38404f736e583d6c9dcd193dd046ec087adb65aa4d506591b5420866256d18d440ed153e1a9ea89f6815c825e948141d934add70d0058ecca127f9b927a478359ebe41a89b5b94549f3c026ff062d3513424e93f7e6b69b64529ab9e6747b7f9a8405f536f138314b9bc528c742bbc4be3e62376a71678e707b3a89642cb5aa903ffe8cf145ae7683df3330bf3073156192b16a6e88b5ee76f527b2168b3d2bc2859686c199653b7928d1e5edb99c5184a503d50c13e6e3fe2729dd04775a2bb8bf948cafd5a3a9b6df68f05bc37f9fb0df201f4bfb4394917b08b235d955d2fb53c145c2e1b1e8c16ac0f8113765286ba8d0f13426142ab6588bd8b19a764712abe55a02a5d71f2233a1a615fe94144068daf3cd7da1ccf6267cf880a005b3852dc872770a5c7762a0d3a271fe558ab48707cc20e831a3d84ea1b9abd54a3ddd4331362af68a17081b1d932d21efb2516d1f2535500ed7e436c2c438208d0ea154e94d2252a7279c0b49224f4eacb59e83eaa5129b7e8fa247a9c03268154d59c7b9616707fcd1a7d81df6e16dd2bb232f2ff5c1b3caf39be91d569e972b238e06671702fcd13bb0e962b8ea65aaeb69dab8bc4a7e3a2c5685e52e869417b8c678bb19fa186e8d3fa8df0f73207c6ef7ed4ba3b3e615625b81caeff14721338c857f0f57451af0dc7c5ea48385906c55ceb15206d2a5bc33479442e89891bd659579a0226a1e8c10cda51e227c2d0c0ce7b2704b293063653d0bce726fae7ddb107275626ec28862047e2658ed9c76a39f15a588d5ff7f79cdf63c97b4c19c755f33361f3b4e0c5b87af642ec026d3a25da49bc7bd5a37f85e1f335f4f1241bce8818a61b80a4281bf007fabdd114b928b25f70fc988b369574c5cd328e9953614271931cd3e505f143b20d82da505fa90616469e1d31c5422465ffa288ec06d4beb8c9662315e7aef26eebb962c2a62d42088dbed819a4126d5e3dd3548e9e9f6978b995f2c955cb68b925f01ece152bf290b70d5db54b9cbc09082386138307bf1bd41ac771c8cd330b3c9572e5353b946962d8129734379d10ff31a1fd6cc44c2cb96325a1c92acddfa037e3aa7ec2a3dd11cdab31e6898ce0838c1cbeb45b7d15ca0d71dbdf7ab5c0e14605806a67ad76344c6c07eaf9080225717ac9e213ee819688407264236749904e4d0980811dcf5ad2e9abba0caaf065a030c18ea40cdaaf5226180fbb7ec40dbf1e9849a57142e60fb87fcc3ac235c486c3181272549b64f9773f2aa958dada271edf3e4b547b76413d069a19fa3cb2a3c6400615424e57fcd85a5d8381f88614b220c6f913c37c160bd2bc10cf9fb075aedbd1f3726e18caadfc10c086a781e67d1f8c254bc5780c9956aab59eb95e7ae14e1e935174f7e18c96dcf6d3526e3ad41de65678fbfa835a24de8f04241d320219447b6beda5efe8ad1a8cf4a3ab705bce7e1307d16418e2afdff37c5a6d1985bfdc222e42833436b161f966f5ba357883bbd194e0454bb76a278983e6decfe0c45e1e251e105d1b464bc2a6d31ad8bee018189c933e7a4ce63dc79733d293a7a932d5ccdaedc8fade208f30b65e0893662b6e8b74805317968b2442ebf9234ed102df92037c1659db98a5a139f4139a885e39de0eeb34ac1da8260359b2ed5afe469211123bb3bce10cac54b86da838c9390120ccbfbd7ece1d535507805030736693d6a1ad3f98610519d7dc3b25029b345ae0387e4c043a4312b49fe20a73c2eb6b3f1c610880ee1a64b6ffed186c80e8bd98ccb76ed0e4c21aae7d686aa97f6d7ed6fcc7aceaeaa5235eade400fb1cbe9fb713fba4695002a1af1a83ff260b35451abd719b4ad94dbc5b50b06d12c13e87c788ab7b41fe9d6e3301b5469df90b6496f8df62255c6cb629a2e2bb6810e0ec56a54761df62eac6d6cd8ccf65bb3833c81961801ec68a9735fefb8a5f7e3e63c0e47fd6b60f934216c87af801e444692aa9b8737bba4fe62cdf5b485d7bbf54a2e095684a66ff765facf06f16e6c84b2b2444cae0aa05196ace9274069bdc5579042895210ba7ca2dc58d8309452c70661386e4c21842a77c47219bdf512ddccfd9b9cbbe5024b41dbcb2d25d82096f57f20f5fb4779116ddc3993e4c3e1c50f3dbb99a96f6eeda8bfd00db881fb7ae7d3a3eaa2c5a78fe0bee59c9d1b53068a184c8703f427e941500e81d1d90dfa44266a5429e3352b38301f3dd0449027a456f36fb1bd55c773562e9058267e9e75401c3b77e94b6eddfb8f7d6587bfb0c4be5a589a121e10a598d74335b176eee0e962a7761f13df38e7dc64442c0829541a294aa83aad4b41dfb2a150c21c73eee9e4a10dcdb206afbbaffa567b941bbb30084ec27f2800aef367b291a098b407074930243a536bab41af4881bb8b0e61c89d6ad027b8b8549c9d7ee1951339940c3a5da4af1c97953f8555ae361588aeac93a8bb7b84f99ba2fc0e26e7b58bfbc15e2f73743511d37ed829c63258130aa3901069c3b54eebcc2e694adfa531a6eb5eae7ad1c761cfc651cdaff87f36dd743ca9c347723cace3d89733c50cb3fb55e1e2a10efa10efde984853d0b07a8fe8417bb14ee44d46b0a5a1cbe1119a64c690d4d172f5a59d9054a29801136588c7448e1c22320821f83a8ef87add6d4805138bf046e1a840a22de468d5d28130d9f0ebea0985f5a5864266a4da97b40fdb110fe7d2e5a13fddcd15aa921256f0e5ea99054c059d3b216331b64768f8201032699f5e2a190409d93d4681fe6a2eb5dda05333d987499045f8160a78bfe56c1fa0ff32d898f6eefc6423eabb48530f6f09be052a3b399c91c3ac6bee94c5b780bcee9616a47d53dc932b157475c8bc48db2d0c1f42710def9860b1f2fc28b8fcc656d10cc7010221d245494f7af484111e878ee1235bab06811a26ae8176383cc51e2ce388eac1742759d074e03e2e72dab6d497665d3d7f85c21047aa18ffe8c12eefc36fa1597d9c50f00c2f10841218a1266a94e18d01ac40b8e8ff74d5a7c26e62d3058c92e33810f23fedd14c9ae030cb82344e6135ff7c66b709f38221d1c6cc3cd114334e03821e34a4e84fb1384b0d06ce0c82c3855e62dc4ffdcdfff51e77255ca10668068ebb14dbbf55002ada321feb83b85247cff3805afb7fe9375ea9b72c9cd1d6481d13061bbd262fbdc583f4121bca8a4bb562cbb05360869d6eab1acb6b5d43d1156c33eb4a89e5f9f448aecb3c82159bfaf8e4db6f387f3236c575c1787255aa600fc3d3ce47cae750c9749e4ea6983f84faf463b5cf7bfb9e3ef0942ad7b4dae444dd5bb128878ebf4d6f14b9ffbe3d3db322ce8fed23028f60b5cee85609698b52a90c5cf4c4f72a1ec6b4e5552c9f0b6a97a664591f4eef71e9f61cb5fc603b83506d357328287a82a2063a708d6dd8667a729cdc16e7a8bab7952dbd34c6de1dfa07a56d5c2b95c22b93211787ad8bf0f4bb9f3eb1d6a083453283365aa35b69ce6015a90808652688e20014c2690c502d08d4479722c114bb5586e815009aaff502ebf0d3c5d1f5e27c402de7a843ce4ce1a5be70d3f1b442879e9b0ee483379775910a656cc07960e74a2b9e7318b27ace796de6f21aac024e3316ed57fe48da3f6dbf67041cf82bad85d58ed17343de58b91a9f8523452235ad225961f32be9eae9d78196ccbb6a5558f560ca3ccaa106cb8e4397f4c4cac17487fa0b4a29eafe6b195a29b80a46682d51bc665b8fea6118917b2d7574247cf00d795ceb8806015d4e9bc5c82de76d6bb348aeb8dae2f008ebef518e9c55ed897b7e5dbe90647d263eeb72e46b74ec79e1afa93bf3b03b0463460a2783889ca89bb014ac8b2df92eb1f339f40d166ec1a3975fcd217eca72c228612872e312b333b88b9bbf88fedd6f5b21e05bf47aaac3a9d954ae7126bbd03f5c79b18ed6140c3dca74759e139b3fca33909d37989c078c1eb9e0b3d6485530060288b27031eee8d720f596c0d0ebe876ec1b0650ff39e836e5006c628019a664ac3f776974a161bc8687998de4395ef2dd1d8a2b3c1f672abf55c353cae347805d1d044844ec4f818d73cf033ff2d4af49eaeab0b982af012e29e12f907dbb61fe6b829508985b2c1f005fa949def1b61acb4f68df2968c31cc2ee8139adab0f787218d92a6d2cc7237872076bc45e0e3608e1d916de3b79706911ce2d3cbf93b177ef9a11336b5980212fa60b6dc3bf87e9c78dc767cf2a126672a0d3f29ef493c52e6325b2bfeb2044bf0d93a2c6d2f3b52a0c588dcedee9013a7e9596f13a05a3feb9ceb2d184ea2849c46929124e64b631dc3318dd9ddf8291f1daf25f6dee58872674fa482cc617f654f7ca4d3bc1320587bed0a670db309e800bcc9196382df0317f53cdeb9c57ee44a34f20a1f272cd95637dd15ec6558ab38eed2ebdca6a6263578508ca5431581cd77e3289debeb28c89e6067086377c12cc1ddfe88c5704426458a0d0d7ed5c65fa212cfa6f5edcf697d4ecad041e9d262d234c21663bff580f943e060bd324a674feb5fd8c99725af70f2b1d285415761ac91c6f40607a2dbe008972d92bd567acde76991db89d41105f6cc8db200b8af9d5f8db020c9e47da652a1e293c9a310c8816d60b0384324a8c57b703c9a7eb3310876b94889330cc8bc812e44f998afbc63ebc3cc250b50d5d93f18998132031427229de1c8070fb3a0c55f0acfafde15e9654993d2852c19bc97e56d574b15a33601dc90f8d8dce3a9dee379be60f2719c5a50abc3592ce0ea06751c8f52715aafa4e3babe411af5225e8a064854a33bf74b778869efc9d7ec1b361b8bb09cc71e8c41d36aa84054c4948124efe356e184a93c9e48c1994b3d36a70eff1dfe64ed18758f90a6c37eeb31877a27a5840ebf040e71e276f1c747f9565b3bd32cb0a5da0d23c2a53af010b60b6a9203c12020dc6b87c96889e8b6d3a274d4788e26d3516754732c0d44cf826b7a819684a234a2e264502ec80be4464a005b86c953e01f128614b3c0e99237462ea8c6452174f7f18c392212cd6ac18b72238634b476839d2d39d4ec5ae34519fb6a2b990a6c3c1753c6fb1089b4f6054eeeef76d4e13f75de64f7e6154d2c6565382ee6e974ffd27f9c0247ed4d2435faf03af611caa33b0df89544a53a5d96f0a568b52b49a3a1542ae00f44be0cac1ae9f139079d4f3b3097559e9735694d2234319a6c34d80275f61cfd4c61ffb6033e8ac622c39414eab3814a47c8dff67e6731fd18d0fd745970018850e37e02585090140ff8224690cfd0de435f121179a0e253bda89485733b4646febd181f8ee289b90b857a5ec75eacd12672b02c8893bb34c7262da457ba43afa2495e4c2b46e00bb205fcabf2e27db94dae3aa63f923526c1c4396f7b7f9228e832a13692002ba2aff439dcb7fddbfd456c022d133ee8903a2d482562fdaa493ce3916d77a0c51441dab26f6b0340238a36a71f87fc3e179cabca9482b704971ce69f3f20ab64b70413d6c2908532b2a888a9fc224cae1365da410b6f2e298904b63b4a41726321835a4774dd063c211cfc8b5166c2d11a22233c189cd591a590dce61d4eb848da3bf864f48518b50553ecbbadb9d11f926e312c3a704fd5532db53006accf9e579a88cfd04d0f45c5d9e3cb6fb00a0222866e81efadff5d3847e9a9b4d03adc102b75d886798c56e93b6c2b15ddd021312745eda69a56a1cb8bf4a3967d8c7a9a5b6a2f85bf0270e5e5006b4e97c5f544ad51c00dba083b634640be39f926f25cd6b0255c71f42c52632afc68724de6e3a51c9983a16692b623587a0dd +Output = 236e77b91257226f00eab1655661b64c + +Len = 97336 +Msg = 83ce5a9c961c1c97252afe0dac17f2394c0ecdb11275a53a7c677edf3965264531485e39c57a3a8b5866cb1f0e2dfb41d39bb739a059541ff9642bf1bbbd87e31463c2f6d37eaacce2dd29bb10a22620143ca6f6cf9637a7d28e8e2120a96f2d3505cdfc478f3303cb75620a3bdf3c7f17dae00f2a9417780ecfef98f290a5ca9b17c873a9149cd81c18bd33164a0405e25baead36bcbb3ab50e957eb8daf2634e82fb838277aef2dcad815e2a4c485b7fa958f87d74ed96d033c9fafbee1ea0572cae52581f31fa131cf7b5fd4ece28f6aa2617862573336625d3344236f128bdff290bb674ed97c94d675d19b65f154d486033d93816bb7fcefb55151933a488e2b3d421dea9720727188106edc3ca8e694d73ff139ed323158985fcffabbbc1bc96d523c52f33d49454474a5cc2eec1f736007f20d3255be2c4eb805022166f77183843914581397c61d76f6a2429ecd96301e1c67d592e1df5b02875605d9afa82220aaab4043dc5885afd7eb02519f71c9fae6c6317a5af64fb7dd42d374a2d1cbdfe794365e85811f87a022f874f39a9026d7c4e06c77e59f506d6514c88f82d31a964bc4c421d44d8705d6afa97875151a65d06ce9c731cc64be393455b43ffa693d4e56054fc692366f72624f8c95eb5e17753182c76f495d464bccaccf6d8434232884a25dec700e5382ead7ae71655a732fd8c80702b8a2abf9482e2f9013040e46bb2bda9a7987488493e25c9c25a7ff6cbd19f4707cfd45ee316a534c2961554573e254751139b4f3e7f0258a9ebf22b869091e5d1895aa7712d1d90629d47e81399649e0d98e2f5d617187a15318739f6705f30d0e34504067053f32b6c600a69698298234fd2e2d9af6f184c53c688e31a10124e031bdc69874e47632ce8211f57881cda61f27e0fee101b977a37801535ac72911167976319167253046595fe0a7d117cf6ca323f7d02693ece638a536a3c37e236ae9cbcceb45e431d61cdce2b69614f35e36433034dec8976d10c6761c64b89997a553c502ff17a9e6333576155f39c47c47eb129fa8ac09b097017c15595ce645229aa448f1542b0f42e605548afaa54f5e68297102d2a64941c2c32eefdf9bcbf80d055ddb1e17b9b26b3ae4a7dc383ff066ef497bc10faf97a6e5e9b6b51cb48c3742920aca026e083161563452dfc69443ce8981fba84c0f0a4ea63c71fb975585f6860f0c7da4bae52329cef31e8bb0ab61d193e702b72e898814ff9abaecea859bba5649ebe650d2facfc63176f7ebfa23825017a1796c910c965ea3dd1dc1b2acaf8f06dfbb509742c8b8a27b839cac9e4c1501f6fb4fbd56aaf801d4a261a993c607c7bb8c30beb59524aa9ec7495f3c7f713a95c54e6af0d35a49342340b6fb9e6f0111e18795adc588ce432b887e789ce325e05fff2655afe3fe6e18f5774eb913477553bbc8a5ca63921b38b086fd34f9587933c87c1f812375f4ebe6770776931f584b43d43824237a8967880514d80246b2d940d8990797646b249a22b0876cdd3d30c634cf63670c1040457569e6bc854fc8eec86c93be2e334b96f6c44c1f1586bca956f5f8acab425b9f6466e18678827b28c804c61657dfd9538fdd35186cd74763d7265442fc8201ec3e9678dea50d788553fc0f3e65d346564a45e2e727a1599c21eb16e86461ebb27072fd43af43499b08acef74ccc02b25b2a8d619fa777ba8c3beb0fb77646198b676ef53dbc656c032a1e7781108f02845707f1f39cc2610391bb30a9a0c1bf55d2cdf6ddf09389b7e8577a6c7102e049f275e658a01d168fe7c7d8460cb635ef10f3e101d7e579358a2109f53983d111c57e49b5fdb0629807ba0f75024e04bfe98abd91ba84c3e4d8262b04ae3c5f4596cb21f1f9a4cc86b73add1ec9b1b32f25379374e197ef2b9c0be8811a52114b2e0376f6dd21ddc1c0ef4b29aa06caa58ba46a94944786749c7b4854c3f06f8c55cf50abf14e1bb1ea83607fed75d28be4794ad81bbc0f26a11c5466f23c0270d2d7b8f87c5410befc9b2506da285248f85d3c28bd1d12a87396139dee5e51606fc2b5c5c85b4451c0e2a0a7b844d2448ff9466cc4921764da928ee2017fe5c2f23950fa1b8a3ed0fcfddb4bd1f4dae771f5738c7645a7c19eb8cb1e71c744ff24e39080be0986a57997ded86b5ef39965f8c8711c5b492786afd437875df880cd697d3df901a436ff56af38cfaaa4c235aa4f01fdff86fe5c20b1178b6a89acb5721f1a139a20ed56e25851450176caa7b50f256357e5afe6b268a4c5157deaa3a77fff56fb833145e4e10d148bf01984be10c6948beea0ed0e03c87c875ea461afa4d5084d556995045052866f9a1793705bcad9c4293a38db8969fae7b341b534968272b71cff0ee9af0ae1d6fc2d9e70f71b7a2a1fe591c20371855e052968db5ef0dc62625a783c051c6ee79fc16b69ec9fbfe4570abe6b78c76614dbc3424e03058d75aee29ba45b7075cb0a3dc4014340f01b590f887df053e530bd790a358dabcf1989ff3fcab8ee3ea9c5076fe003e454f6ae5eb7a174fd49db33b28a3705c9e8767a192b55247e10aa598934af3475349edd5d137e0aaddc3cc6d788fd724721b3099828eea80835f64d29dd16dedad83a6e7663bdbd4be47cfd4ecd2fdc0cc2f9bee4fe3d4a74f3b4295130bc0afb88f3ea10710592bfaac2618021744b02136f226575e914aa930c7668f74ac0c08cf1d89203ff93f1763779d54b74c8105c3ebc84549b0e925c27bad6f86706112b5bc066e252c7ca9002cdb615d85a1ee48d14a765fa3f15982d8002fcbce6d6af592af3d6a736303f4de58945480a15f485b3386eafaf198d464d56caf167f75e159fa1a7a6e90ccc3d4ab7a46bdfdbd44e209d386166878598ab392cad915c81b4a6d81cf6e7477ffc83a9faeae159cc0fe3408bb96d48c64e2113e8986dee5f61c800fe4038c7a0b218c60f6c187724f085872f5fcb42988e384dc75b029342428c81152be57677869175aa9a8d1e231a8ddcebfa885f4580764d919e5934707f7ac42960f53b4ca17720951c473412b583a68832ad86144e667c0e0878ba32411a2f028670fd662b522e96994ea239e8f04ccfb1409f4c1d8d420542690bd0b0f52b67465fa60e4ba80776baab51e0dc5b38851c4c913618750840f4341192f392212248c91d8c290313fc2665284fb94cd1751ed6461a64a53485c5dfb2c0337977f933b64a28eeeab9f285840ecda64b7f665de8a5402ca5309d5d74d8a1973397b5b02e152ac2e6641e8111eda4cbe1aa1f818996ef96fe625065fa6a7e4847e71e663a66d9cc7e794ac012ac1a5195ba6933c20170ca373465857a509f6d3dd1fbfee1257e353a613cea92337860f0170c1b9ace0cf1d80da664fb724c2f9ebb161f2c3a6124a284bda8966a061f792ad0e019e608336954d9ab85b8cdb6f10f3572218dcac23f4a94a228390bb7b8597d2a472fafb77373c701200a6929be34219ecb070137981c8b7f4f88d150350ddaa32d9248a67ed1380fd5506ab08e92a24c2f8e4daa356068e7143f9e1079afb0f1d2f71a2710d6f47dab721675e7917f24570bf8439f80f4847d46bb220ba5c7bc3e476e63b3eac2f2ab58b69d549982cd4a67482c5de2f7fb958570ac7359e7ad7a688c82ee756b16dcea91535a1271f01088868af7f039f761e404d73a31d86b8d44bcab49dfb8924611f1bd83641534b258f988f610811eeb4cc1cae797619f7fc246064d906e0ef1b31c0356f7364237beeb4be1ac98183aa3edae02f24cf159c971bc81f15831e6b95b4e5b349cc1a7a1a2fe402b478e56d3d1aa13aa5f08224387f56e683da42c0cf6c61b810e5a0aeb67c79cf5542848c2b5e7a327638de217ced89a5ee40fcb9235921d4755b5698382ce7b72878d175ae08c39d01f27a12d8f8e8f3c1618cc3560dbe9ef3979cb513b3c680aaa66cb819cc25e0f5d7f686d113ed5689b6a36dcbec808df824f393dda39e825835a6d212fb1994be33d3ebf9e11f24c3bab116f98820181f8deba2fa6ec852bdc120321e28072ed7a082c0b7c2f704ebe8465d536305c3c63cf560fe87ec6847b359869fd58715bea883939f4bfd7d8eb9c3bf8e0fba2778ac915c5e9173398286c31e1c8601ffefb666d314eeaad518b9c9abfde0b5a9c36750039eedd55cfad5fd8718bc1033e754ad0dbd2d77c21662b8b1277870c122f7a1e5442fbb392d1b594018da2a6841fdb6b1fc8afcbaf44f215d9f59741413d8278fc2c97d6475b176e79172c8e36c2c245e677992365ed9840fc9e657f912832141af3da4458142c6cc1718645be26a7661628be0baa28c61464bb16516ab734fc97e0eb872bc49d99c1e3da53821330d79923450be6bf249af793d53c34b43038593bf2272a3311fa62b54d3eec51089f55b057ab827859d99e70c8ca57e5cdce4a4c19aabb2831998a2e099062a7d5c634171c74e41c0ed9429817823b12b4c8515a869a486ca57d229736d04edf40551d9fbbed7573eaa3c954ebec48058d2d55af617e38c814ae1338fb8717bff053f7915d9f9d44963e1dec6c91e785ff064091d3dff30126354359813c25108ec8ac352910c559b9b224a8c1f87e59b25af9490444e1e284199c42f077e099c1bd23d348ca5378fc08c8d013aa774a4f31681e1b356a32d662053b6fc1b024323844b3e155b16a0747efab892d38207e94755a403af6b8c318658b26a0fd778844f71d1d3745f6817783824c0b2ba3e68908439ddced3df444a67b3e9e2f5c6ce6245824fa79e613a16b9d83cbb69a301b092357a2b78911eeaf53df43ae988628b3ad1d25b40164cc8f4457f643cf034f60409915bc64c11c685b3016e2f67d118c6430415d0e1d00d7bff0133908082ff5e389bb6496acd8b9da5a9f343dfaa998c587d5ded6e5452b5575aa000ee7c2b0534f1f18e67b298a1a84660a34a4f9bd1747699e2165a473500e4400a947107ada14c63e1ed618c361d7f4cda52408e4a49b8605b6442497f6e568a0a0d02239be003a400464ab4cf87bd0e65621dff6b2a9b37b5f2bce7f901f9e4bbd2bffd7483a028461ceec0d279782bb0f4484d98a997868e2c2a81465e76e66c600af3ac0eba674fcbbe3ef355493b69a35017774945d3408b0bd3cbf63615a84f63b4c6e3aae769fd497d86cd98a3ebe9b5eb6b7c2eb47999e12e0e4bbfe8fbfb6aaf39950a3f410c110b1124fefba421ea1809d4aa90a5d33b1e91d18cd6d3fe804198b540d551829566370dd4b94ef67d4bc6c541fe31c18a13db2a2575dcb3352a58a6f72017fb572d5ceac24338d1efe526d0ad63b9df4eac6eb8023c52d3f9b7fdfc95c600d0c6bee74e305ffe4eb2829e892557ba970956a10dbba0e2bb5e78fd28952da8ad64998a9ab7360bb74592b251424090834a81368daa2a18e3d3ebdaad8ddd7bdbd14bab62cf8bedb64993f6bb9cc4f82e72ea83ca665e41d7ea9f1b1dd84bf6f67d53be38d1b810d61f04d04a8d4b3de312c11d4668a41a2212f132dc1cffa687c940578f765111713673e360ac49fe6bcac3678439a1fe3cdd90b67ab46f070a557ffbd915cd7c12405f84a07257a602db5ff70651ce6aa2baec1a7c472094f8a2811fa848a39d539d36488c67eac152f505403f398fdbde3b61d3533daaeccd20e2376f777a019fdd76a3770579dcd68841d7b1597cee49cf90858210645b125121d7a13a97557151bf3a02c38b5508059421ef5a0c0e9fe806859b67f38c42d3ae74effaa1e552ca7e50c23aa5c6520d7ab35b83b3b93b352278019ccedce8f906a3ae40205dce8812ac17d34fad6f007400789f0a7a960772b157375ce96f61c8c86ea3790b3f1b3a808615ff76997f0eade8e486df4b0f85e60eb0341e608e5367938d329a4f0454928f7b2bbe7be9a8f00efcaf33c48dca6a9aafdb0846df3515cf75e37758d3df36b68b5ae170c0e18b6d5ffa248d32bed37d8eb8239ce4ec3774e5e22ef6fa59017dcf038c32a536e48686de2e2f7ed1a539c551fcdd3ff7612665d51da3f8407757aecc2b1bf7177fecf9e1cd05c2b15451ec4ef08230d507567e22efea4e340cd6b30b2aa74711d20331ab6dbabedc65587c05ab267803be87876202247c92367d7447276f15a47f5bb671acb8c3915cbffcfc89246601eb2c1a08f10cf3e988ae5b168dddd34ddc6900fae68a619eaeead7ba17169b6e01c6be8e38ee54b877fbdfefea7e008c6dbd99adc7aa2942d07ba4b4d1777896b6e9ed6856531f6d88f88b39b9ba3ddec7cbf8e0bc827b2c65e4dc7344c19e2a6f081f3db5d5a4973ff6e59a683cebb36f16a75a21bde7c9d3b8f78bed8f7c879e93dc64e3d094c401a9677892509aa8c8101d60b3b6ff99ae6a8e55482b843cca3f9d747cfe50628272995ab49fab3d676ac3aadf08132a6a6bf975c13055b8764deaf2cd9977f116d4e3b74b94cddfc169528f002bc2da7c5fc1440548519937514d56624c6bfe5352ef24c3ca531e7aae1283c38caf4878988e6660ae184d61ec2d15e781bcf8ac7f0419b99aeb57d79bbc2f95b508f2c3b8b943800c0a539a6112c7b9c3eb6ea6bbeb1c9990e73a7cd497f8f33f90480222ca71cfdcb82a457286d245ad67ceb69bdc93e046d734eecb3e667886a5d698894a67cc8aa250077301cc3788b2a7708171163a275bc581f2280e7224ea2d1b3eb19bf2a0496334f50c2bfbf07c67592f4119e3acc55afaebed378c94bd99fec58894deb81db2727b1e680f7ef5bcc4d7b5258961a4939e1ae698344090cbb7b037d8ed3cafec2477a106ee8eeee6682d55bfa7c089de0001bca6e5c31420ca8157deaa98707eef6d4c8f159aa892a7829b4eab53d5b8a522c7ca2d96b847cbbb611c9375ffc927de7977114cb330079a0e69209628b21200a0988835ed9f2fb0dc29343fbe79624da0456dffaf5d0cb6278593f1f338cb2dcf98721b34957b24317b09603cfe133d5980883dfd682b796f2a6211b5db350cbd2067d12dc91267f9988f81ebd5df202d9efc821deff8565dde375ff107e42ff1e6f5d219b899feace8331f4b8f1a98751737568152d7df6bf77047255d5cf9f64298a8b8d2767ac400a082ec8859f8c88fd545e84f5e77223ca961d33a041d32d9cccf6ba54c5ec77834674f5021d3a05f32ba9323f0a008e44f3a8b2c7dec50030ea0b2bf600d2fa58b36d484e6bb850bfc3f127f42fc98a4de2bada32ef9a654dae71e7f6618851ef17c2c852d12ff1c7e4df6cfa9ef49e4d2cfbb4cabb7de45bded0f63d303304b23a1b7ef697c77075551a083b9faa53ac991547758c9406c243d261b2b5fe9b07e41e702304a75630e04b039e7a132fd2f1ad9b1ca80752eaa51d2f3c370f9f58dc76a8bf61f82b5f4b1a660a7656bc27fc6eb9a858ff513ccc5968c5008e980cebc92eb3f6e1756c5f2e3869dc9c821482fda8ffe4a4891e7f2f153456a40c8bd9c008e80b8bbebee43081a2f40c08ff4a05700b941d84f988463d718279853d6e024045e81e8dbda2c7499d06cfd6511d2c1ab2b093ca36ad48e863cb348a8a7138deb1d5c16bd1619c99425a0c7473c31aadde7f2de13bb7da1ef47bfda4daac09e816199cdf62e857787938ec6bcb047831764a1453726da6e80bd9fe5995e51e685bfdd871d8009fef2ae79741c3a8eeaf62596fa84199544d902c5c3423e51e6568c99da99b711c053db03481c276232d8af4676612018c566cbd42baec74b2e825c51210130377c29adbebb02f37c0b6d66324174c6ef50a85d4d675595982f87a38602da97d582e29b0e65874b36c4f2eedcd4257a93771c4b840ecd05e359d4f6cae88c3a96652d3764a00f8b2d0027adc8a709b77fb9311b3a9a7ba4973df8ca725aacb4d4a357e77423123fc94d6a276852880a3e979550b392f80e3e6c71932ed1a2732acdf13f9f3725d585fd48e04e3f26ef3a82a7609170b88f4345cde552d60412032597b45884b0e90d90226cdcf56cd31e1ae5ef56cc33c4405a7c3570e057fdf87aa9ca327449e6aab6a531b6fdd05233b0ef3175fe0039a02aeb182b7904b3651da605af9e676af7d14fb34eb0e7e925f511fb619e944c0d27b8e1c50890cee39f2aeb425b8fc27f60607616c72a045f47fc91cc166697c1e16446e037929cfe6f96df7d3439999bf4a60ea1a8fd406a3a1d98f80dfd9978e85b9c0f6e70ca101f7876c2d0db5ce80e8ec171cf0809b14bd36587eddfcd9c9d2d75a515b1c2c31f5e35b58a0b98fe0e695309b1a0ecdeedecabfe2e73a09780584833d5dc1381ff9690c7f840ba2874e427cbe97e464d9097c0bd586fbf14224aa84e276638c720e01c6c83f15cf1e28db44aeed6c287f4834867e41a757d03930a5672d6af1d33993d35b5b3ee04d7a47d092a70ce185a2da7606a0a604c94bfe2ef40b3f2fea8407796160ed9bbb4e7068934a2e5696205724942b60c0d663fc67b397480e5ef6450102d48cca11ab3d54d960395058c891d8516b3e529f881298ca59ee56d89736b365418233f69a96db8b71959773a471da64e7a684cbc2280861d999ceff70c0d6b32e379f13216347d103a9f390bcdf71f627011c03192600a1a0b23f7c88ccb4132413d5104b8cded4a0df2c5716c4e62fb4b8e3ee96f4c8b1359f71f6e84393aeaa7e9f941dfae9bccf9e096fbc0681361531a135407aa8ba20ca2c16960bbcac48e0c347a193afb1194f5381b68f8a34d2d61e7f20a1e8e4ea9938849c0e773486a10ad2de407ada0458d2340a454950740e21753c4fcf561a765ce702320b6eed293cdddcea905f1a224e31c21206b3824074bf9e6da63938c861e7ce61c28304e0210fa4773a69e3158f1fe6dd088484d6dd044ee4b5b4ccf7102d0a82e29b532f80113dd1c020e6995ca77c8e98ec033725ec529a44f05f6b2f61bd7db4dd637c238aafde6aabab177f718e0cfe1386cb1421b4799b15788b862bf03a8072bb30d02303888032baf5be242341822095fa71487c68024aa0c1df31aaa08e82e4b4508440b549df9c9de26844146c3cb82c060cb04ec0b75e75001ef3992534646f6b546e4f0ed8d875b3e7f86d038e78c999125a151e853a0db298d30d8eb0c5c8e83c963d1745f6e7f8464734903f5c39f30581a464dcbcf2bd4753e2121f8e2991e3be67ac4f7e5a7b3039515b76ede4dc8b2ee3dae36d8ce9d57a01f7a948f92cf2f1b5151ef936024bd7adac5cb1331b4c68bac7c3d443fee7515285757a9f8210340f99d9efe2563f282ecb19328c7af2371175a37a80c328debd06acac855be6915d82a8e6c83fb534bdffd4f858bf22a3d02aace5a9013d2b2bc07567127f1b0f8716b4684f8455044392b58900b386b5df2f069f2880d14082fcf931aeb558b6759e25fcdfefc69fa6cae56fea1ec67426ccd83063088a23ac025f95c1c6458f1061232be046b10dd0f08c3280c88ae98e484a1ec46110de8f1ad018b37b89a13ea9d57bba52bd57a74bd1582978791afded86f3b1520c79158c7444ed9acdf5e8bc6376d6db93841525dd6b4cf83b115c01b13694a526fa259f72a0d5ebb891f7e3f6a49aa9da9c01c4d8f3530e79d694cdf670d420056ba69df3b4d438f37f5166b68c6f833ba85271e976a583db6f8b997b28d98c52d382cc1e09534725c7e08dcab6be325eaff274387eaa1e08e62bad68e60bb0b43ba0751c26b8e1f76f8aa05aaaed7feab9c815ee92caa9a9435b50e633d256d4aae8df14936cce118139e690f1662f88cfbc9c333b6dea658c02cb1d959644592842542fd9d8d61a04d4a892128f0ddff7b6502efffbabe5cb0a663496bf43ecbe961a957f63c1bb01432e8895d2e0983b9e7b0869dcb2d0075a6953beb51b3572cc7a6d0d74569b7f6ec09b03966f5aa35c63e8fe78c7cf49da1ca494e094db4eccbcdf0c755e63863da6f2e24283ce36d950f74838b48a9872c74ca0a976875a7e281503cda2ba1f9827b7bd40e49bfcfb8c5dce8240a8fc0ab1766a7688e09dcb06347ae4e74950678d0f19f75a6afdab5e4118bf32d27d8a23487bb0938f1f999d67f922f8b723921e2480cfade342d20dcbaf5853af24da65ea5ac05f3be8d236d409ef9cada001231e7930a4add256e2251ab36be8f8e3bf858f0cb48d015c19a331b39ad3ce9ce3258d820971b5212574e13a4224018b7941a3fe5a2d71218efdfad6bbd0b54ca85f422da2d6f4191ee38d549f0c48bbda451dfd18c24007dd0aebc0c74d5df7b8f72399388596281497a5684b47d45c2bba8570b8f476f84df18cd986f1cf865c13b52f9225a33551bbb1e00f7eae54b5c764c1006d1cdb27db658abf6512e2dcdc82557a5f24271b753923b159dc8dbd954057b9d23a97b4efff393c502ef180791174b6db20e8bbedc699f97f68ed8e4ca49aabced6163956e150c35b2c9d9012eaf50f409f5f794ddfaab199595e6f1315f29d07fa3f013793351d2e13cd53d1963e4d37a9749cba0dbe9f4eb8c7a7121dc75825adfa53bb9e521270eb6912dc9cb93867470f6e5ed73d8d478c0f7f724381a5d1f82f7609890d69c9bc58155b84cd977980183561c58f412cdd203f5b0f884ab3e1c6b34bdcd0ece38f84a477d7e134145d773aeb5f1c83a4b4e12ff40a450f7273a852a6200261636bd407571b5fd5e1e415c5222e4d1d57183a9666bb1ebeb6b3bb9b44dc0a91f459308525dbae43871fd81d31b988d5ee1113bed8ab7c1d29abe8d54d9852443c608068069c3646af16a98c3e88367511a754ed7360c8f67162184ae9dc4141e388acf624e85fa501d071587224c0c367e3e66c5f64680f36e031403e313f5292d99d78a746912a245516caf4148c8899ccaf83c33fc630212e1c00771eb43df15c3935b73f349bc1ad822aede0048b4e6a9879c7774823d953c2d2ba2c08cba71869777a5ab0c17fe19bc084118f962fc68998959658af07570afd2fe1a4c45d1516841b1f6d6407f74bd3e22e946fe4e76b2652245d9b5343dbcb00c8eef0ba5c26a6c016d44c00fa78ad2ebf7ddf14d6246c29a7bfb0641e1f8252664f1767f4832292c84b4013ef0c94914db1ae67999eb240a9e5b6e3f0bd6b504530000be51343b8bc3b0ae8e0eed1335f98a4873abf40bfb1397577c19dce1fecf7744f38c0505a7a0d7026d406ac3b7d9a8919c0715dcf4822b4c99aa7f3eae30e3bdbf47090a28b273b76d43c6cd12f1f24c8349b5298f4083d8182c321d7b3db1d56210d4cb676f3337fe7785b1ffe8f3e399d2568414053d64682d9a20ee3c8e268c87ecdbec3d71fea15a2bf4a71529f1703f6e4f2b16c48c0a1d1bcb8fb3b51baf0ab58e3fb3dc85e66a2e17d11d00f086ff811d5d1b95a98e793b8fd839e33f4a17c384ca58cf784e36009de647256b4e712360f27a3d6765c07de04045850bee3d9b323492c720493c57f95f49e3bc5762c9acb3b938201091675f606d170bebfaa138d6f8501857fb78acb49bd88e0212f862f96ef28e2f5a6c7fa0f715b9f3cd79eb4a0ff6eafad1f73a8e93803aff2014263bf208ec128a01a39a9a0d80763489dc06302802b27e683535e7575daf08b16903e8f7d44abedb7db5bc6b19f3be657d941f6fea1f5f2fff530dea50923b54ade9ca3bc168573e607ad4bac0ecc971625c143b1b81d2d32b5e5da5de39468257460c315ddbe1ceee5289792fc1e4420cf6b516119a97e63bc07d063104a8af07b12594e425fcf199e53122a133ad6bffdc788d56ca0ccd9311e2a80394d04f41a3bcc30ec6f74ad5ab7253ef8273338d85e51d7580b01dd3db04f7c06a6bf767a62848384f6f2f340da369456ed45d687b7122d85f104b70847a71f1e5ca2c1c20fe90fb1fd33337946aff6d395f2e0325a34a09c5abdafb96a9a312a77941c1bca639b1c8a1eb52c83f62a1725249d03d020f8454f140d79a29079d1007fcead1c5af16ca89bc0821775f8cba8c25620a03dfd27d6f1186f75f1c0bcfe4a209f8c36d74a5c929da38c922a9723b454b152f277ebfa3c19c46d25ce9279dd5a1aa35f165eb0eb95b66ab78622a0e2dcdf6fa92d38c0dd589f12946bfc7a20c445e73d764fab8eeee4374bd615263439d17ec9e8b732bc1d29eba75fa207fba549e238bec65564f0547db6e017be92b1b107ba701057c2b08980c4712b2b56474d1cb9b86ab753e52fc35f6dd16fe48ea492e38dea37d558e859556b40eb19f07a1c262ae4d844139c92b044eb411216d4a8ae07eddbde5f6effc01388512ce9f86ae9dddbc120c3c471102f0c3c049269d082a5c24ac60b42f96f32ac64777aee8e6899f878cd3ecee8e7f4dc69a2498b93c730118c73a58dcfc88f532ce2ea84100d25e30735c9e37f9e5c05cfd5856078e67181aacf74760a35f426b25683e4793f4b43753eaf2bbf9b2f2c76838c1307452dbbabc1c226311c27ccfdb98b335165d1c0cbd236cd2f4735fc6795a8cac84d2f679730d5c5cce7f1ee15f54b9c1ee9800310d8a8f2580a351aa9f41ead44663e2c7706f77a63fd1a3403f00b456a3220b44c384bc1c04df931448639e602f921b2522a6d6d7fc66a45ce941356bca8797b88da6863f17647e74135409a8a6ca1a2308482c7a7aaa9ca7ec7aaf89db352fecba646ff73efe8e4a7e87af4652986a419fc7db064119e6a1c73195294bb75e81d842fbecc1ea4d17e8730191a96985f167aa54f3d6312ceaf7fa98e2928a8df865c69c8866d4256cff9ab34311d9e7c2ee644cdba08cd9e3fd39fd1e462b48b0f163d4428438c1aa128306b332562a26a28a05163699781d55746464ed16196bf9af35a3b0748c6fcfb0ae6a715aa7ad0280104c1ec381f77f3e512eede76a59fd0d33446233f01e85a7fce15573fac6bcfb10e5bfa7721308fc3604cefbd63b5a025f7d1fe39746e2dd94b0552e9df4003f796b9fc1d2f05132956f16efc750bf330ce6500fec7955c5e84006e6fbb59ad1ac46458f2f000675f1c64c1fc86a9af3ddf899155a166d057a28d139beabdb663c1e378be0d2873addb2d52853c95be9452c51907aae76f0bcc35a9331174041ab5bec2492d85205bbbd5875f3fd9067d50a100dd8b2222c42b7f9800db878187c87ea05bf92054b0e3e3ca51387d714001a6ae9cec1fd2c8e7f349caedfd13f120aa79bb1900f8f57cdf8224cf87e6248c5b8c0f74e5656127192259f2dea4a2e8cab432342df573ad5216a0ab014c72194800fdcc7cc5d4137a8c7490321be04667bb88f2b0316f9fc3f08d75f28d73d2f6732d9cecd86cd59df0e56f0260f46208f585fd90963479ba77b3d463906cddec4e688b3d8870920ab47238555b266535caf0fad50b0964bf13da715b3da862b2f7764178bb27754a42e49334f4bd7776a29394887735885b2cc9f3e27c6e8ad1d81f67a55bdaa3e4000227a61303bf54e53471b0c4010c152a49030035057cd0572ba5ca4fd2476058969db3a03e6656fb9c3955d9b51976762249be50b66137de61a2f17f548747b1669c6383b793054d93957f9e99d605761c6c23b5c9618fd48a0721d3ab8b20723ccdbfa4b66fe741e12d37fbf46c4a93fe15384d86a35fa16e7b63331e7c7305ded8ceeb822286404da884d81002cd3592eb04fe34502facd5a7be87f482c9d11464994165d36ab3a0ae6f1d33c117c59e978fb11d8f885f87323ab776c4a83ea819268ca5ab1900a2e9ffb2a6d1afa9ebc0e14f8789f0214bc5dfabec6b9bb460a17fb68bd11d911bfe3c7fb1591d4b410f03bebb66f15beb08b64c9e9e279b06a1aca55f6dfeccd3982e6d9b81ea12682cfce8014d13732da2c680d386d65b60c4b34369a9421b925dde62ae739d6527bed4b3a066ddd2da3c1730d44b2f5c37af9e76f0ab73e51ff553473054beae476d9309e2dad7e0ba7db245ea14ba07520d75283e9b1891430995056a4fd55491e342d10dd18905940e9ea55b0900c27b843e4099a2ba89c641ad82a4896bbfcac5e9f36a727caa3196e33a6f5488f678bc03a64ae8e0347044a2a8262d0756bdbe8e5641e637355abe8aea701ada0c125fcb42999412fa08bb7c5e3761328331743be4da554210d52e9a9fa4867f6a11129ffccdced943584d448b204d73aeed8ff7847ce626a16a8d1b4055bdfe7a3d7f86bc30c0bb7726a301192a1b523dbab8cb1e71c16a52e38416b5c9eadfa35e4e886a088f42fe3b64bbef9af057996097bd9bff0f968a07ba91e64833ab4c3b27adee9e66f6415f397af5bbf70b2aa7d3d8e16ff833b09dd897bb1cc0e9df9db0fe303a6b5ea659ca4713d455f558571421d909a3c82e6e852d1c8cba21c34c94821824c60296f3be29312c359e8c3704a26b1439dd6b426a5df1df49dc601079418fa3a06a7af3be29370cbd8c2c10496280dae1facfe02e2e225e94a01eb108447b00211fb822714e0dbc1549a2aa8b69fea1c4a8c2127aa99751c4f865f6e892c68470a8ba4880a09c84665d54cd73c0cfb2096eac9ef6d4380000699da8c1335674b68de62d9227caacd84eac41a86ed955d9d5f54d49b9eeb2717d2e8f3d30151b1a57a69850ec807b92a610cdd37b06d15c6405e71c609fb03fbb80730290e9c0c58d615361f6a73abdecea3b9cf03c70b9a3453416cf344391abfb1cb85bbcaadeb77e246f4d253280a9a151aad46578191a1bfce01096b18fd60852089a75228e5d67d41ffae4a804649dd8a62f6832a352f006212bab4263c30ddc9a54fc70fd08832b1b04cae770a5469737092de680d22d1b82265d4032fa7483159139dc523f3af00b73c136edf50458066b9cdcd7223803ab0b93f12704a30f215914aeb68bf4ed9650b0dca3da3fe1bb5c9d5bd1cb7b8643e2359f6768044867b5752d507319e865a27e22b9de5ffbfde518ac96545c6bf3b12a901daefdf58fac44a2497f11aa207115505889cc6e740df5184d45457c62825c0c6f5ff8e041476955c83745fb6ec55caea762ee02c9dc1ce51f279d7f385cb25d85025ccf248dcc8ef6241ba2f7a73b83cff12e7fa45a755b3380cc3d1f4814ca881f918be0865595facdfc69641e9a19f7bef2acac90e9c4b2db3a7ebd4c6a9aa03fffdc1e3aedb1fdba51165d3361b64852a3528a855e66c3bd4f0aba739c16f4e90e8986b27a2c2774807289ed78a3ea34aa39e641bd8b8fb073a8bfc29386ada5265cbff5e54c9f82f3459154c82804ec6d2966cdef793d3b0e2274433532f2fbaf1b720b175a8e6c10571c70378cbe0356eab530db78f6e7883e80fd6b61ec74118f46fdf79d1bbb416fd34aae194100cc43797268d2e23a49c58cf81e5cc397b480e4d26c5f6ff6ed575ee91615b56b36fe5b9c80cd28beb97e3f3d346c9eec00b6f39260e6b1a57bd5645555c942cdfee102b50ab3f1fb403342d397d7a5fc5ef81c45ba7c0a5155b28d97557d0eac8bb517c5edca647847aa3cc22de5024e340f07f46267a281e2b583b6fc794493454141d5135baabd34acd613e0e0da6bebc45ba73fefa0bd8aa8ebba34040a07944f29eb63adea527101b8cd960e58d9ecddc0643b5e2d8db55170ace4678892e0a57612c50a4dc0647189f839b9a1229e22e0353dfa707acb7ab893f4ebe8bb910cd14f21b8fb8e77c4f19db027e0cd685d60212e0d920b34e96b774bd54f0a0f4ce2ac5f001b4411c19ac2e3a03b63b454eb30f4ddbac959673260d370e708c32d5030682ad56a99322972ba6eda6be9d0276b78b3113aa0bbb5577303d83c1377c4e3227e538979dd49b21dd8e66d6e99bcd9a2d6bfe872af9b6313d54a2f68f1e5ce7644ba28188aa08cf42587f2ad7753835b90eb5b38098c8d9b2f64672b655cf84cc335d0de03d607279ee4810d32946f8927bd19589232dcf4594e6ec299d06a8d44e908330f942b9e8b26a2f69126a715e45eac3c123258049b31cc9755ea2a1f0f01587f758201423474ddd05eb233e80ff69c4a513709b43d350710635242ec6ca3482afe4790f9e0f7bb045fdf19e9f0ac6fec16e7f8ed8681a9978aafb9dba3f8619c728be1acd8d7c3f85d5663ffcea9af892aea2c95c03e3a9391a998d3fb272a3e99f8fa44653b7e151fbe1914f315e38856e9ad953193406c41e9e6bebd582c763a34e5a7cd4b72c36fc0410fa5179453608c84d621a945896217ab8332b5edad1fe7aabf5831296b1304e5d72dd74951107ab83fdaa7d054bcdbf00a9f63f74c0eba4f7250122b73d4310c56d37e8aea305c51b7a3b66a3416dbbc3b4f8dd2b9d054deaafb19fe457aefbf73de34e08686d95828c3fe999139c217fe8959045e2d5f5e4ea36b2c47cde805169820d18ddc9ad47983a6e8d4ee36093b94ef17a2ec80d8468e333de395c1e627476be767f846cd922bd7dc63fbdf9bdab97893ecd761537a0497b78099256a8f343caa7da2864b5b03b8ffa72867d4c3401cfea6b4aad7d24fbf2485a2ba9a34a7bca135a40257bc5272d8083f73bdde7102e2374c036d36b6d40b5c78287dffe71354f8c561f89d622cefef06ae5c149353c60767121b8e80fef56ce3181bd83e684b2fcc4c37e6790fcdc247bdbb4bf036337ecd82ebc2f664691dab327da8f2e30f40826a1a7fe043f9eac84be26cced4b00445f9e5ba602fefd7971daa554cae2795af64ac50dfeffbd052fed7607655c501981f105e06860f027082aac994ee1b941be1f241bd3b5cdbac7ea40d30e0fadd8e9e74972f925206fe0886ea12ce74a78d8af63bc450a372a074515d449dd800ef1b194b247b3f4c095845a20e74b935ce07bf243a5658fff488e437f9b5e6d2834108632e685f3a5919efd8cf0872a6a7ff55e6687404e9716167829850acbc12b548c893813839b5f48d749eb32761dd1ac16796d32e98dfa8e1286995b3246322e1609bf054b2e791265dc39c61d03b010a910c9b5e7406045b10b4ad82733f2edc1590da3b0bb597c27d86eda75a885c384a11f31ce5ad1edc22c1c0a2126e8140ceb86a73aee8af69bb2ecb82678bd2547cee03f1539e9d6c46d7f59967b8c415735dc58601488024ff0560795f0d0c640eecf464269f2a13644074f1dce59f63ebc516fc6e9cb3fa3151d414abd6b273e851eefec6796dda64426631d8bcb9332038835b5baeeff43a5b4fdbb1ae6b86f26518459bf4 +Output = 826413d2301c9987ce5c170d8720a790 + +Len = 98688 +Msg = 3488243b211b998b66f458b30226f585d02dcc7dae8045f4df6a5797ae154b1854e8c3231c12fa94c5674de7286cfbef1bad29cb945729171202fb5f38cf14d9bbb35f537f12826afd9062fde824e9e1106e07d6864af6ba01a5c3fd808f0a55319201b39242b775d6169edd8a7648c278156e85cc81364775f9b559ce7eb3f47e2caf2b9dcb231d18a20a6f568b9efa1b4d66c0ad25702536a6dc5c6ac49a1f692b73a3e7d54ecb8adbac9c938b76f1c1bcf86f725e2dbc0c553dec9b88443cbc345503b987bfe5f56a8e4a8b9e550e320a2b7b6453f474bfaee2f2abf23bb53df25c335b09fed521f6b86284eac5bb35e008cac82d4db51658d257e02b06f0b50a901b15849301d62830cdc79a4d6094e69545e913c0e7dafc1501835b2d57eb27f9a42f2007d3dca800719cd4766315c3dcd40e2ed672d341b4dadba93850a9efa0b4f004e0b1fa1d30384ac0c62d811fe5607ea616bec9d0b6c9323eb045b50a8c34a159a905fa2fc6091b88c7269fa4b6cf82a20933845023b5ce421d9dd821c50d8a46e736a287cccb555101b639f8590b624a353acb6a0388f8dc05c0dadc5425f3f424acbbcd49684146fb4615c3d6fa66c7243968c65f29f834f21683e24066248ae7cf0ca946c7278c3d3cfdae3386d6415e9a210b3e8016736b079bdc91b76431b9075fc1cad04f4e4f02b6607a96f9df69c3bfe1a9759ac1f9fbe97150fffd1121bc7ac0dd6b00b2bafe0b82b31118cacf1e0af2a7f0cb45225a364a84283551a756264c878084e0059ac3bce4e17b2a1811c9e340d9f328718c4a0e3519551ad33d2b0dd1f72101b83da5b517ed6a26ca06c65f7c1858916bf9ed666bbaa4932ed951adc2b8203d5b4e7b16531d2de66f64c70c649542a99a09e7fa2ff36ce53f9360d163acc9bb77370b86a1590b938e939592ff39fb988525ff7188acf3378ed11f23bab963a4935f1eae08894e55b0fbf89a56eaca85b4b3ff747fcd83b2a4fc574bd2c8381f382e7b3690953c535c04b7cc6f91f698b01dadaa1b3e627d087dd0f1b0c28e55ed0cecc541651eb61a169ccf5417c8fb00c9d1bc64e7d8c242ba52bc5e8dae6e3a61370324e23ba572996d4c0d6288d32c21355162b12fa6db1da554e313e091a795259a40f2dd49edf5f3eaa05c7e4bbd8ba0121e82ad535a0d9062473a6be6bd107e2f9d7e4aca1292f65217ecf1883a71d9a69f449cf147f2dd8e92ec9996033b0a6d446fcb4f6ad83e2b79f92bb52b3aa9b7eddd42a72b33527fcd10b0c9027c90f93caba8007c30921ecf6d72f8184ed8ea1137e89e8d3ab8de008ef9a6403cda7e8d1c2906d000bbd3202f0f798a152ee91238d5fef56ed652314ebc5647e4aea240a99689eeb182f174274a6109f7735cf8ca53eeeb3776846a3741019fdad50d5c3936b05facad21d43d6ad81b5c6eeaccd4a896f8fd5e1bb233cfcdce881768e9b652a4aa58040a4659b9054aace83c953d1d1fa32857c0122aafe55e543b5bf007328d571c5155d5637d111d4fa9fa5beffab17520291b90022a6fd7a80b8d77141e92ee625aa98643ff241cad79cb26d18773f54e9cd337a48694bfeb4da789c55edbf891e8af63e18764d02e2057ffcb0c8eab1878910cf80b7ba085ca502b023991fd10c30e73255cfcc03b6547edc5d02a1fe784fc19e6034d01de4a3167b3f9dc8349b36fbef8c812753a1143f9a71c6dda2489bd6557b4316b5e95f244c0e4e314a3807a4d4011cf7595ecf22a59388263354f7bf8316750656d723acb1143cf3786f1d627e7805a4ab2befd88c46c8f42849edfdb5e65d17773aab1028e5dc7755ad02c54d35ddc7bfb4f0b1bce00bd00773e9115c4f3dd29d80500f3207cf45488e323ddeef07c91d667c5ec603b332478f638ae4d5c9c04044bcfa6ade67e5e76f364c91e806313adcdd30263661a36ee907cafe0e6358f5f44c5211ee48c1b8dc796204d57b889e74adc65bdc999be41d2071f64dbd15252b88b6e5cbe4612352962eb62bba47ceca6881e58acd945d8857e06c38197d6436ec9954ebcd5cbd7df703145f54f7324a981341a5701521d718c6ce421b0a29b2f269cdb2661ced9b267fade4de0f6f71a6cafed113a6e775dd75aaf02433fc3c34a8ded4311a4a56af04e150a7f8dcdc3f498b824ac204e1207d70c6e793321f2de6f6b5c0ed4a1cfb236d27656c10e6abff663d67ef00b59c5ece3ab7a081f848a4b3cb980e637a856b9fdd78a1922d875d1d570d96614f8b9a01c026d452440f5284aa28e62cebf83e07e76461e71d5bf31f839e40bd2b78afb9fbb7a7397efc80e7c5f60d1cddae2b23d9bb0566429451fb37bc866ad60e005541ecb19e259aa06ba371fbb9ec21a37228ef04b619baea2ee7cac000eb965c7247385bf6c464416ec74f3a6a83fd47716962f85d1f4a2c39186b95f5b8cbf48f501d3ee9d7e3e49fa5c031c5319b87bfffc958b1dfccb8985df160dfe9f9690b111db2cddc83fa4cd3878a407176d4ac70949e4ab7bcefcb0cfed925dba93a83eebc50494eeef314b4f79c72c029cec5402741be5395624fba06374e2a75d9786d7bafb2ab6f7f75deb2f0b2aa2ec6a90323db532fd090a4e98a23df32d9d656f1de29b07e9fffeec52c2fb6abf06cb61e0cd3cf9918fb59201d274fa13fb1be304646b944fae4fdecd591c52219117b1534b38a4bb912dad211aa25e221ec0c9d568f337afadf11da41cf84b8f365667d4e02f9a44b77b8941a34e8722af5c08d918bc59d2a3ec8f1f3416bed39d916babb4ab43f4a8a60da89500dddb55f88a559a4d638139491e86c9fe11b36dd0a520ee3307920db620a01741c814b99a3694162ebb82170fb1200239aef84f19fd7bb7504ee88db4ac6f5197b097834df4ddb5e8cb9de4462f36084efb6aea765b03368880bcd1a7985e6c8dfd2a5a16ac779e02fa9c49f6821003c562d0e7eea701946605d78097ccb590a81796e6ff46abfb04af45ed2891f61a2749f3ed89c9bdf86f4501438c2fbce47266a2d00fabc1f177546279e4443075fa1a9ca550a97f8b2da901c28fabbb91725318c04ec101aae250b9943083053dc93c91b64a2f8f742797a1a4a727f9be3044be5dc571b24ecd0b13e71636bf9a19179bca804434dce578a792dd8cbf9435a25e507ba41e04c0ed37199d45a4b374138186f8ceb8ebf0b5dc3338c0553b08d6be4078408bf5445eefd3cd98fdb161980d94bcb661c8cfb40830c0ac03da3146a7d6c52e4249e0c601bdaf1811bb690e059cd4e5789c0adff3307d38119a395ce0ba69578b271d8d367e4aab2afa12dd32454642448e2a9d64dc784dc6a2a77f33936ca2adb7821b56bfa73a8e96e76d5c381cb40fc7b65525dcb8d16b1b0316660ad7f6f22397d82927ccae86b66d274a1d5e251f6f3671fcd745ae482cd68b42c6b13da090e42d765fc3ed5a822e71c69b127cbead3258b27528caa5fea6458f70025e0028f280070e94e15223b1b4965a42a132a933720f5f680fcab8feac15afd3415a13483aa2dd4570b6c17e598303f57bc38cc027da3d0d63fe8363289b2c2bcef6796ec41074e084cd831ec6553e34f4bb7e62dfddb620b08b875f21eb8e12ed1b81ed84197a6c04e0921865d4b206f360a6a002de73a7ddb7eb79ffcb7e908613534ce48498f2d83716f49dc8087361fc2d02f8a61cadd2cbd83a2a04a4ae812418134b1b7579e81a363bd5f8e78324d53a1029fd5837770e75280b5ea773c697f8cb21a4ba091cd11a74772df83f2533f653feaacf4fb4caebcd08a030e83db41afbcde80eaa5ca3eb27ea2fe3ae4c608952dd772afc714561b18a94e613cfc2a72bb9af1a6590dad1dc96c64fd882a31a952f2a114796c9005afa0072fe620bc6e34cc18541a0bcf31ce3bae4c6ad43d1a55d8c2b360b9cef52bead7bb1dfd5a0aceee5f84774927a6e39d24b7fb689d709cd6521d4b80657214063aa322f695d0d07e51b7ef4a38d5b00d72c0b86bd5449e97d9a268551604de6e9a78b380f248fff8795ee0939556aa0922e7304276fee189b3f365bc331601a0919c4e40e1db83f940f9f999afa2381c8fabe170e517fc189b80b20a6f3e24389a8e31ab071132dd3309a8d0fa30e0b4438f4a9bc22844e0dacadbe40cd59c832fdf2c23b4825320ea1e6cee078b4a7cd8f1ea177098626f0c4251bdae84f13ccc0f8c3f8c978b70b098b4355a29cbb2aa743e6882e0cb1f9a77a21bb6c4b8b1f99fe072f1d9322931192d3b6494eb124296b6237ba9e57f2fdb4b62d80d698f22e0b75286bfedc6e6102684a9453ef83bd9efccbd5c480a170dcc4764c77a20f2a27f52adc424e64a0e3e95aac32df0f0ae59c8ea60794d0a6f832dff9b6113c335a6f7e98e6df3d763d3d2eb973e78fb9472ac656eefb454713e8b0af1b4e42f1adcb6dc672f6c08d194e0ee29f71cd71cd8fbc0c021dc9fc32ce31952fbfe90e27f13d8f6efdb78a7e03424f3de48fdb7eb1b8f1c963236d5fccaad479cdf82fd1ca361a635be81875441129d5a89e9f6279012dcd331d41a1ca629381e039feb13ca290d9781bdd05f9c598ef25c26481cfe1e796f67d2001b0a2fbd0617223d230c71856bc1a81360aa4c314c3c2d2e49c9e48aa150cb48566b234edb66c46398fefdb648facad1060f7d3cbea689292c6817793f692a237d4da656049ef0ef03f60008a5998099ce105ef9d027a4c9337d29cd903d7951fe362b7b281c323fe2a62b05182a73ce17618401173c1a7f0d5d9e102a3a233447991516ac5af2e6b363f133f72a1efe70876eeafa5054cb08ade6c983dbc24ae7fb05b107f7cd73f4d3d50de914ec9b77d6820ff000ee3db3d2865233bee1165de07ff2d16f2c58356a690b648757358bf36fe8aeda3137ad600f52904fea2727cde6348f2d9a13f39c0fa4dfde094d2b428b1d7d28e84933cae443400b47edc437dafe97bf91279ded4b72d1955d52e4686616e1895df31597a79cb97da4eab1a2b0c98191ac13b2d29eede059dde735c9735d82881cc5914abbc773136b9e7e832a2de3403558c0e09c8e6288056a9dda4569c6819f215558b37be3692689997d89842347d777569ba6dcfe9c5e5d9b3f5ec424227fa6c04600f2b0eb402c90e66164d8150cffc26850421b236340ac5d21e531d718b670a736f432164307d352346858344042c2db2b562ea99eb44fb83145661c14e0c4d0c7d90d86c9abff4594e74a220bf0a6689aa1cf8b7b28f3d4ff7d375ddeb65b67361999993e796334e56a247aea7a0b95208d646582ff47380ef52c38d097a2def44e6cda0c00bda4c8796d8b465f50f54fa193b430d7a855c235cb29b50519bc94e00dd5ccc24d19908d8bffba0114ed8a66c3f42f22a5b2cbc78aacd6af4e64aa66e2f8fb4eb007d02f0624b01fd60263457ba1b870ade37e12f13edfc6bf8b775b82d001f6850429d672b6c30c02b86cd6214977325f4c7bb0856c1b1bcb75be2673e79b6a2a72e00c38125d46299409916b67e5e808622728bd9122ef10d7d1602c9c021a1ef8b548fcb3f95ec919bbffa0698f2257d912d4005a71e12e1643811389f076d0e9fc05073831d65fae067976dadd41bbf5c14b0424a27251a59711cf2db100feeb36d90e0b611d5be58bb735484af6a36cb5062f9c1f134a2a4e9ac5f3fe58e750e83d67aa31c44c448e01821e6291bc82609de90d52546608dc748e7922ef28dfa29aba911e4bbf4fb010e3e9bea345fb466ad714e6b643c5c3479f29b92431dbd8796d5c7114136b844db116b9bc0e2be905602f46a951e5857c6e823ba8a0ca0c61f668e4cdf72c6d109041ee4c4398caf61ad8fcbe1eeca59b731f24ecf44eb0ecec42e3d9c906ed1207d7b6c4a4c66ea57d9e6355094fa61d435d0f518ace6862c576f8b8078f86ca6e64bdc59039469bfedc251ebf93098a65d85576f2cd957c08819de9313acc925a656dbfa465d552153ebc7b903b425b40fd81ddbac0ba812bdf3e0de47d1112425641234fd0bd60572293ec29bcd3186b493ef6514c5a2ab5fc63768fdb16b2ccb3d290f10e413f4b2445f0faac5e4a5b57c74134c4f6d12d75a8b391e9200c400a8c793673135767b03d1a716e26598785c55ef3df130cf8c77855a90bdf8742c6f94c9ea396311352f3c93c96ddde767fa3a01cdf3146be5e5ccd23d7a7ac4b7583ab88246c64f48904ad9a9ad731be920c950e59c406d4c6b09a90b11ae3d092c5e68159e86b71deea183a0ec50bb6594ade46e35dc5d28d3e4e8e4c9bd668ab2abe28c8acad11a11e99895709b4f451f8cc54e0612c4e0e30496afebcfc7a3b4c62dd052ba26a8c1cb216f837d60f0890ffc6f570829de6412bb54bf0be9baf85a51c83e7f3d30c5ee25186b1e75ce9add8fb770e614891db560ba8d9a5339480d575b96419e18e6fcac7770a516471a9f891098d50d49d8968bcb9da48d866a874673a127d2c9ec9abf74dc3bcbc3d0fcef6119fd9d865b5d476e3650200b267126f7a85a60ac9f7264f7f5071daa859dcb9239854ba86fb1998ba2c6932e467300cef302d028c62ca5e8053293640129248a4195a017dc3a8b0b272f6e599034dbe2ca45aba42b708a2f52e3b6590c4903337957233c6aa124d40eb33af3ce5dbf1a754e788a94e41ab525430cf26ea56f7428f15c7de18e6ccf9f797e64c695b45e3b43bf41ca335d60c57a1f95eee47035978bd34308a86ce421aac2134185c396664d093195035b197caf77ab56ae0e5e0f4e11f7a8982bfcde6d8f6a06d5f3aa3c93dcc2bcfd1dc9900a9a9d6cad52d8d6619dff8905b1fd1ceb6bd0df2c4d83063ec35c09c8aa564ab412d1f986438934edffc5739807d1244be1ad9232d7070b754367420c0aaaf2d567b1c4e4ea5a731ac0af2ef9345e3eb6766ae8909b1f9561e64b307346abd0941fa4976d4d33da0f672781cf408eb154b46da9eea1b4ea2933709ba365432b1ac41138c976fdb0f57c9436c33447c74c221f9df3efac53f7b23f4b446f594d8fdd6270a16d9e3ef3875e137c1773c6c748e88b488ff118f0ec1e07ff6dd47c1af3fe079d3800cc3211ece1a3f1f9f7ecaf313d958969813e6876987c669e01e38d4dc564e109a1daa1a867dfcbc1a2e4de607981e3fed609aeb0c762629e241333b7729f70a30712c0f96fd9acb30fd65ddf08b4a7975e7847325a5969bc2cd26ea4d5f5ebb54402f547bf389cb785ebb514b2d7dd1b62b4ba66190b84e06347c47cb70f5c27a1d3c8fb21a5a3b54e4b6d693e928b742ae58fb3ce1dbaf20f9bbfa7e094cae166adc17b5ac8ca95b01d0d44768cbb89fe314f803f3a14da79f5e78d182d3ecadbb769303548183ff48a1e0f206e744226c3813735089880e97ec3972782bfcc481a478279ce969b61b9273105dfbf87e9c1ad3f782f50cda65edb2bd43a55cef4fde4daed014a9241d2b012ed88a34091545c00d05844a7fabcb7b3e8fe08b92889c69e5b8a3e0adaff411aa010285564a314e2052b7bf82bc0e0952c75e1732ce6773889107aec766663b1e52156aeabd7604dde4ffda68294dd3b6548e7e5483b7f0e3f3c04215b2f9d3f85603634ad17c5a9256dd29a475d360b5e1e23f7c4b0648a47b6e690d183782c4977cfcdb48ccd5ea02c03bdc246746fdea09b92e76fb01268252820228a7be0f60e2962065dffd4183596f63b741eceac76599cfa9dea106931d0bb946b2ec457cc4ddcecb3e373542f962cf912bc8f914765ff45659beb1383e848714f193e335a4221aeb602a41ec308494546d61c55bbc5a110ed4a0b2ec377aeff5dc5b7515f101b948de3cd3c99f6346738f5dcc07b836ca35d7fd8829986d787beb9987a84c0b0e6610f58775867d5a712a037992fa74645dec3bad6ab1caa50997d47767159caeb590cab97a864144cf96095aa7f371940989c19f3a4410fa4179a2e0dcde350ec9e64306433f4d9a017bc5eb9113dccdab2955da22afdeec96097b30741672a31579e4da69e1f0ce9943cfa8f90c0475c5433eea9e5592f089bfc402b74eb4002ad436c2494ed95709868d2f4a2c9720ea80034d07f5cbba9f0523c420f7a7aa7c8daf4a7bb675c7d4ac94cb0ef5f3537d38398e19d0f78f4881f0f14b919c067cfeb4df7bb944a58d2e6d18a208a7820004480a2ea784f318bee20691bd2fa8cebffdedc3d7d45485947ca4bdd52231255cc55dd0ba128a72144d909dcac105c439d111ee928369607759dbbcdc01e53faa28058ab92ec9f70aba1bca5b0ea20004d4d84669f068b03f7b4a299db512b184e67dc70528161a3aae0491ee4701f4997fbd75dea9b6d765575c8e9aca4e4d759743002e8d135e0caff79ee528ba3470481df750fdf8487184af5633900c55e4a0e1e0a5fc3634f916414be0221f2211b48645718b91a5fc79af0b28c4b15d6a99c6c30bc3e321a8978e235fa1b550064b82eaa0c107525eacc827cad6f1d66ff88e31b092cec663aa3aafc4462140c68390417f4cede020a4a736aa2522537d2394b744e74d75e2b4e36bae8dd776cae34b046d7da9d1eae7b8b2375de7471ad176ce291fe3b27e4df4c18ec73c649bf0ff8debd1cfaa05ec791502ef9543b158a0d0edcb262ecedc0b5be5a0e48ca2134a588af7c3db0a2964f98d38d0bbd94faf89f367893d3cf573953399546185e097febb3e2ad7803508ba46e81e220b1cff33ea8381504110e9f8092ef085afef84db0d436931d085d0e1b06bd218cf571c79338da31a83b4cb1ec6c06d6b98768d97e176037ca3a26a0a6a4291028e6493c45f0462fe7d578353fcfc1f85d83c1e9fe8648e1a51f1108ed4fadf71d0ebd19fdd86457e868fcf423c408b56d796a46d728d7d9d6418710970f311d92f5362862f71df0d47b3fb63e51c35712f2cdb8b205f3668628f17e4dec9dcbb0211d2f1d555744d297a9423881da2473755106372685d2dd5ab51bb6efd9499f1cd8f7d5fafb990b43a262ba593665b98a5efa0d92766302613daf7b1fcddf866ed14833eff238a70792dc6ce3bd610bb95c5add51ac621ec5ef02438562d58d9d6ee9df3b2269cd6be179f5265862928bb3ef4e6c1117580c35dbb7277e72de3319a480e67574a5f8f701fe2af0ae7587cc8109ea8cc9d9c076047e0f0aff9eb8393fbef9d2a058353d3c2ef86b8edd360dd8b5d304c1c86819434145efc4f8b23583437b20360eab19f22e97b34af21edfbbfb3063484e8d8861a8cf130912ab7738b474497eeee0f4eaa50fae2adbc9abf3830890a493b62a265ab76016142a6626bcec34c0215e37ed3c694676c1bfd749f463731dbe6b67590005bd3227b86a1401ecc944cfad48c39bac6275cb86cd82f749f4fdf835a7c441bf11a773dcebcc2b7bf0511e53913469e0e97022a8f36933c3fb8a689a522dc6ef46bb1f1e5114e3a2913139da78084e0dc5afedadb3c551d8700e3724d05d379c43b7530605b5d168942a46ca6706f43cdd7a551b745df8913bcf8c5b8a1c3bcff0e3391d6d779cd5e1856ea9c5f700751919827c9dfad1f4441690c6e6317a8f3586f6eaf221ecf1618ad801faa31dbe61d39b579864830c742a6aed4d669de4fae9b5f5fc7d6bc5fa80ad596ed2f1219df2c935cc63b7deb155435828814cd627559cc7f451bf5895b1143a894c24a5b5bc339da1bf1574e4dd4390dd4b2e6ea410d3e7406690b21b63362bb3d85f52917a02177f3f44d5f60b911cd68cecb3596283dd4a8487dc72df3ab454404a311a735d2bceaded09cd275684790c2dae2f95d43279724bdd846d495dd44a8c4936f16d62f6cfb7195379b95130929a650cf0ed6d34fa85bd37548baf9bbfcda3ce3a59435f6d4b0c6e48e30a62e8dbe2dabaf716e5e2dd8575de27311166b745cb974a57725150ea08defc3776d4972d7f3c19b6f3f3fa3c2551466c9e09f0391350682495426fbb08812b60d61f764ce5be7cd4c6f585ea2ff60fe6ab6e208790adda3431075088567a980ee9912249f28747f8c6b025977a15ab299e5ef03528f6c90faf699a58da116cc817f1402b90e1a3aa5bec834cf0f641bde1a1074dc5725c3b7530f6347c8dcf17c8097bfba612b873ed70471178e0fa28daff0fd64e6abc42ed240b232438e882649f78c01b63addae40518ecfa1dfef4f340add9ab2610ac7e0c822dba58e091537ce282d91cab68a8739ee75ff374a8932b8b5dc4ee81ff8fb2025a2636deccfe685f4ac785d9a3a18282098dab84cd218a516a810a37c58adc34b3501a0bbccb2a971fcde6601537f96c5a6d8c58ea0723a708cac15985d653bf3f204b8fe8238c3409d3866746d3a203e3e7e01587acbe3340875d10c8dbdf4d077f1391d86f54db10c1ae17bddb43f0abe4ede62d7825a019a02483150147831153b83915154b363d7fa69802b9a5dbba4afdf162d31f949cfd5fdbf4b0550b678683b0267f39ed97f6b6119dd3906a1903565eb12573b7d086553fed50cf8d11febc1e9313e6a8260c26aa1793cc48cff540569fd6eab3bd2450d889497eb015a5ababe53b190ef3aa3d8df660201be40a0501b64e4c2d6bbd96cd4f032a1d7d61987da35e9cc705b944dfc5a1558c6128ec867df661d0e33a7047c8e79b7c511ccabf55e3357c651f83cb09c033424d393c0d7c34f0412c84266e7a5b987497bd8a978434add519c642764c2482e6b0243ec03c71c32b4e810069efc8ebad592c202db7b8cb792b94c90b15350a1f93d13ac54416a034521b4661af975ad09e51d4aa76d75911a2735fb0ed5b9396fd2877441c8950043f393f7d402eae856f14ed3649f91d44874a4e8d5bfee4f2f6113f664d349b441dc334e62cf7ae73d35db5f8b986e1bbe100dccce786c6dc8674d8525e7e489cf4a06dc3fb582443d21472194de66b1db87f5292195b01fcb6398b31d7ce21b3cdba323d33bbd69c74216dc08e82831315aef80a7ae55df98d48a02b418eec32aff8cb7c5e878e27c26cee1602c0f345ff751559918da27c13895f67232572c0a3427fa70324128cc3dd3d433309825a7ebcf2aae6b9972c51e5100e05fb7b06b08098e7abfa2a727f5da16ea9c6f7fb9a6bd82302d205b24e42fa476f78cfacde9a5c63dd71a081ffd264c0ea5d1bcf5c6b0dec6c41b4b5138a663bea0435593579144421f13b624a26cc608038b67fcba2d92eac6d6cdea6a39c12fd0776b5be0307b1ffe2c2bd683f2276f3bd90b2eff986114bbdf5d51177e4f331e95a6980217fd300acfe396207ad2cc9567011d1585bbcd09b16415cec86060d12a91d83bcc2d1abb7b77f3f64b7a88c6a1f4378a89f58c36e99ca8decc97519ea2b78d0ba19d4896bb43707408612c36066f1eccf9b0cad9d4419ae5ef765dddaa8236e05cc042031bf08c3826393f7a20bc336b797011592e0d6c6295600e248e7c665832388fb6f9e9a7a129653af97d6605d46da5e83b434a9de372f6eaf9db108be1e66899f8e1a9634d8677973a791716966ae4c7f6b0a38fd6fc9d7cc42ce9180bcdc2e96f7fba4f9bb1e2dcb3a029d63fe59f3921f282e2bb96e62c29d060ab347cea06711096bd2a6029940b8f38d52f6247a4338573170fd64371818211b60a684069a430c94c67e5ce2598a2ae93e36570a1b1e5fe9d523f47f561ae66b8ec14689b7f7cbc6de2c74339f166f5830a53acaa13a080061146662050a1ea345805c5147940faa219892b299c58c822e2d15e35df21a1b1db60207ac52916a8dcb0d85d282a0e897aafe87cfff471043b52f7cd7af5ce50ff21097d35907696f8aa34ede284627484bffdbc92d6aaa7426d1be98da970341b1d73902874848f2a564d3f5f0c90f3d61dfd610b5bbf7cb6643d127d99320bbd9a016c2441bae1f04993d9e41f0497dd5e49f2b0103a04f5ecddc0c1618e28353b3559af84a43fc9089b36283847d1090575fa277094c08f6b707d0f7eef1a3085820130b9bb0942f7e5ec71f4e52ff79803dfe8197a4ff17487cfae6dcf623dfd79cb3e6d79deccabe65577b13715177a662c58673503ba7c960124aac9909bf77f305efc6b10e4a92f19a009e820e7412f582ee66f7c48f82dea08b24815f92814d8e8f2f950195422a1716b62c3e570d1fba203841a3b8bb1b2d110d572d3f3dd1d82edbf1cd95163756262217ea08dd08f786b1d8df09bc4240432ec279aef3a86a35936c7b305641df96abec1a6ecad7c08799618069cc79628b516b4dc7ebf9cc0a1dae1150496f3bd01953d4731eb59e8bb7878fc235e81a503cf9b0726ced871741609adc38eaf13a34f322fe1fc918fad4ef13fb3db9f0fbb815ab97c0ac22c3c92a1bbc6bd9893ec3750bf8173cb63db84414fc2d116cf28d67441e2d5d25757bb39ed82a658b43908098474c3500ba2b2c9bad4d1b179e839685effc29189721a42a18bdb680b161bdcfd407dd7fdaf54faef6e4fc7867624b76f27537849081a4c8646bf3f0efffd4ba878f5bba05dd5758bf3cdf18b6f12d1e10dfb0f1c8645c7fa47e456167326c61482ed839a4ade99ef09bea7df1f9e5852f84bbe5a7917357c03cd35d80c12dca002a7c851d2bb08a714a453182421ab338aa81ea95d29258a0eec66ba276c1ff95cc6e25da2051232a9119bccf9475b1149a2987faed618b2cdb45143517cd08f15cd7a14153777103b78ea442b79e86a99cdc453eab87f74d4d79dea16dfcebfa22de82bc8ec87de506cb7341723c3ae1f7c2aac9d4ada4e98a89534f40f3b29a65ac4fb297ec4eb6c4f9b0368ff7d6a3f5024003307a9be9db9efba5585d65b86f68908b378cec603a3fe488d47960d6dcc58f558697e33688e05d0c7ce00a3c863bceae365060c9b0c6969f0a67e364f5321e25a0ab84b6d97601ed7624ab0df34d8f855cdfb1db6db54ee3f96c6434887275dc445f875316896fae0cd24f15fec55e7771e2e77cbb3595bc682eed2eddac1ce33b5bf3f4864030b90792ff3beeccc0ec3c000b96e06ef1922055853a3b099ca04d46d08172c4cb742e0bc2670d893f4c86e224102587edcdea8a3540ecb17b7d41c927e1223cc8494be6a081a1256200172f3ad2d2a90ed58c75042836cb44e1e18bfffeded1b09f24caa172f3c7b16eb79056c42ffbde12cebdfada627f7c34f33560bfeeab09dd8360ce204b98b5ff2ead7ece84a6e4ed7a0a1f3fb7f7addd406e520c99f15e6d2e502e74f1c0f51b432dbdd818d1a8cc56067c3d7f585e4690dfdecd29cc34b6ed41c9562c66fa2bc0b918ca34a5b3182c5718bd00cd18d6ab2f0beae46315208adca8af45b24a956bf8998c204a8c3ac2a5fba8847b62f55807e24c13df8813cbc8d26584cd6fc30c93470624e7bb98e0992ee4518dc40b610f69d9fd6716f77aad4f6231dff11b6d312a2188a4c99c50dab85baf29c6808ceeaa7aec2445345d35288c940f5607557b4bc393aa3dadd911a1f3e878f1bda24dad18263da0323d0664cdf58628ee8b18b1d58e219f3242e6f29643a1cc286ad37899f4dbac5ae1c80b0c9b6cee38d8b16440c13178955400b22b07cce02aae2915e79e26f31213242631cfe8314c04ee6dea74004e3dd708e99a7d23b32c34f68ce86c45fcc399c1bc23d9227894d776d3bdefb9ac9293a59fcbedcbcf94c5e3e386a6614fd63c49d5cc01434b7719f29ea0798217fc4f80dda59eefbccb299824a793a175b1c46179138f73325d9109d77a5c8319e3d541aa12dab5003a28bc57357c2ef5bef9b3b1e0cad9b6ae08648535dee639afeb8f0ffae74525488af78217a92f5764a3e7841bfb9e5ed346abb0b848d000c85a1213430ec8b35c16f3af3562cd240a89a5fbad6ae9b332138560ebe26bf497e973bed6976630e09555e577ef30e31a74941d7c5fe33c34379a9eb6f3df9f82625a189bca46263bd0c82dc5977f1cfb2c5cf27122b4814179937101c55489f28b6e2a7aef911cd58cf28e07a4e3571579a68274fa830ac2a218e2b49ef138502e58fb5c4d6e9b16947b10255c831dd0231ad66e3178601d7ad0f8b7c7de360211c093272d062a66af0cbb070888f594f15ff5450dbd0abcc964bbf288440b72fd4cfbc5d781512da44d9896ef1968c9ac1ee7e3d7779005577b334e284b3d06b9a73a1c930698d33ce5aeb85b5ffdd71cfeb52ed6d17b62ecbe69b1f11a56280f775816a9bd88c03f7d055692813c2609a8661054f1513a4fd5640529dade3fc5655e9a60cfa85c75bca659dda8ad1e3bc3027097ff9df549672c3019b25bb3a418538f02648010a54b98a784fcd92879f89235e824e4faa21cca1c09cb57eb74393fdfd5a3994299d1e32acfa447aa8def1c498f87b0b3229e45af404c5951fd6f2b7122b57a5c17f790c806c97f0e3d4fab93d45288879092a5d3085eea4c06631e2d30c2abc4e865a66b70920aba52c044fbffaaf5deb6a3f36fa729914459bc20fb49f1b5e4d4c22dfa56286f1894ecf16957b97e215a77366a66d4d6a1bc2339c3b36a1f22a2b62e5d00b2368eca78b9c525a7abb645b676ae8d8841ccf840726db75671e81cebaf7cb659e886be0fa5f7b19c04063f09bb22646c5b2bd5bad2e19ddd349d0806bb3fc0450c673657bbe843bf127910180eae33a9ab271a3a6108ad26efa82fb2578e659d2a99fbf8057e23385c787f8a763a4166b929916728c82f5a2a7359958d51ef8aca84d59b8ba299306a695507fcaed7cc0e9700ea2e0a6aa06e654d576470a43375908be8543deccfc5b55a39a7f23d0331da306a7cb7a72141e6d5a1e5d3cdc1b225e7866835653cf4c556c57fefbb32aa5be99018b52e042e5eb71b1662b15b0aabaf1ecf744ca07f0011568c8b99810281f2040cee4772ba35bc6c01069a2a048aac5791e0e922efcd5292d7af1e19c0b3156d60483a936fd4ac3caea5ce55282aa6dab76383ebcb96e321674493226c5b18731aad4e8ed4a14f3523289605fef3654e49e463229bc28aac443040c38fe0c4bf4404cc8c71056dfd6a783a620f4eb05c4d4ad2f0e8b910db775d6d25b0aae1f9e535fcb4cf69cd3c8b7b0293e2a150accd7f167d38e23d5507b16270572137c90627262f7533389b8c1b36c1ff550ee5d06a77f016a7d8c3fc1666cb0cad8dd5aec49224ebcd76c1773f1d13efd3b0af5ff33f71076fabcc5f73c35e58b6adc8e5f388bcba9d4f5853cf00b23982feb48102b42a95a37c1937afbf52c2a45d48b39c4f1f690d8b0529b227c565c9c2993e7f204047a914518cb4a3cfd3df66fd21a730748083f17200d2da75fc12c2099e52c9dea5ea3b1d6669b7fc11cf909136fd73e388694a47e01661ea85c4c7aaaa64f82a38ceb825ceb6420206dca2a9fb84609608265e2bd266034b88469924699bf44c87be5510cb838e093a6f66f076253eb28822f5c7dcaa0ac08d020020e4e0076d1b20d88766b8e13834eea20bb1c9576290c5d7c309cabc731d5fc446211c77b57a5d0a31a63e84b77cc31fa5b456f1cca977cbc65eaf6289bfc5ac3d2a358d4b2edeb3b793fbbfaf9a54a56485b655185aa09b78e53f432dfc9c82ae07159158bf0a9bc035d8d948160bfcf02ecfcb6f2ca80d83a563a9855b4d0c40bea2cb03b34889f595bd1ca9794febf2b78b9af9a6f7ea8ca604dab9643e139c59c68275940247fdba93cefb4b873b1226d00cdd50f5f93ef1081ff29fd85e69df6700d5e99f9b82ac403865121db4f785886744b20b043e8d59c0589583b750596f8b4c3b874e2974aea21058781e4adb9af455559fd13782dd0512cda8e4f9cec56c021121289c19c35323a40041b231eefb39c01b2acfd97e3649cfadae0b4651eb1ef3d7f083a36995c77f1de5d88e6cc4177be5d5ae99229a2424fcdd2fcafb4fc9691070851b87ae247037d163fafc96180f679a7dcab37acc53fb390c60abe22afc356e4b8805e761ffb6cefc7e86bb64030743e474181e68e414894b1349ea6a33acb37df2ca88a7b402a44b20f27922df2f968aa039ce2160ae9793e8bdb0b097de07c261c0d91d18831bf7ea28197a2c465d1856fed21f4e30298de9ef7c25af3331c2dece22ecb2a2faa9e410e29570b45e359c4f7189360408e01dc896f00314fb2670dcaa3b0ac50b0815931e9b36e0628a7c14f587a091fc358c2e453b1be72b9620d3ba33a95614bd859713b4033430bffd35a443153fcd343f0ad22b80158ab9f5999afc16bbde6f3c050b066117927b279ac7e21c7642843d4585eab907e038f71792bdd95e31c743c64cbcd7f14e66032ca58f3e9e24ce8ec5a6a04e24f5ba2e35ea9e7ba5d56da1c01efcee2b2d2998d18870021f3bb93b747d74c7d390e8a3dce9c883fa91085eddcbee2c2bf76cef72b6adf0624fee4b39528fad7e7b6a5df2d86379c42e4083049abc1c5a74d60ef8786f90cd2814c6fb6c19888c7ce76460ff96e66a75bf161dd28b43206b10ff4916de6bc98dd4b5a41439de655c08c10fa68a51562b2a220fbc862be6a6c2ca4fd82108bf48d61f1b92173971e2747be6156742ef1b2cacc4a0d25b12eb9375f00661ef151fc10c482edc2017d8d39acc9354419d0c6bbe23c69a5b0e032b0a16e7c5a935db3e841330b01cc204cf27ab6a79d7c8c58f5f147504b440b63390a8c476bd8544f49064dfbab4d7300e286ae0ff8bd80f41987ff638ed12cb53108ee59bb36f218c3723842370bf2238a8f13e0ee635b229704c925f8eeb0c3291b0925d14593cad82386712d8e2a3f6ac28cccd6f4876eeef648ea11f323f791bf613e467ad5b00778bd0b075a87af03ef7d165ae7723381dad352529512dcfb648af5734d2472c21050725ce7a71cd654697fe2b2b80b10310ce1434af9edd6b8eb0de0430c8da858c53986bbe4e352afd64be6fcd56ffa875a095c6b45a4b41b05ca35d2fa5b2ad09fe31d5dedad2930481d001c36dca14c5f4d169c828c04196fccbca37a85ba0654e1a9340dd49ab43365a69778dbb50e612f0a453d1e47228d781d0b0977e66868c782d4e1f4577a2ca85304f7e7963c24219ffbd1e60dc4f37ebf9023bc20856ff762c6e676c010a8778ddb507ad5540cc74036ed4dc87f16231cc955cd08dbcf139170a7e665061b35cf810f2ff2f47f72a37cfbeff7cf7a17cd1d2c24ffd9fa8ec76892ddc6c91975809c80516f8c10d632446a372c24a3cf4911f34e860e96db5d2533a765e807b959945099bb8955446503c4add61d07bc093e57b43bf8188bcb1d06ddb2d18a63a2feec53577ab15fc451a7ce66273a6095f8d5f07214f412a9e6890b4e13f6270542d038d3eeb97ac8b460138cc1a04f67e7da8dd8f3be0271e8369a883dff55f8f69894b143d247fa82aa179a7addeb0771f1e6c102dacdabb89c26019dfa82e680b20160289029d262c +Output = c9cb1c3613312fc95a1c2697a147585e + +Len = 100040 +Msg = b6ece902b7087404094d393b1a3d44ce82de0ea69705acd33bd4462cf982cb36515ae3484f0725ec630e8b876c9c223d1682060f667e8e4693bcc415189c187a07b65565a01cd31c22deefdee1d4b8c69997ebf302d122e6a4b7482bedd3503c810726a2d1cfe65defc64d86a16c6d33b426a49b9286ce7b17cdbab8a1aedb45665540470ba8c67772cd8dc8d3eca84b0e36194f3f26fccc930602025bb6215d5fa98a9c7530dc3252fb97ec9fdcd3d550cf3257313813a2c16b085244718b4b140aece838ee8e563758533a2ec5559a21f9d7fa8f447bc54903b5ef84697fd92c804e757b6a45aacbeda9faa82f96622abdf08181d29bfdd2d7ef23422666cd50139889672d6af7b3c1827335a0fef412226534316bdd1204ed9f34a62ea9f027ccb26d24be63059adcc4eefba2f51a82311e5bc496a8cb894fae6bd90bae0a5ab28569d9a59a9c264759b325bce39a22f1033e65dc65f1060502100345dfe390cdf7c4ae6b7584ff09270ad977303d996afd253ac47a4c2615856b4b62a3427226f1c8cc975e84ce2a183b3f5944cb90a4f2576bd650a48e891dc3daec61f1a7c45cbb5bb1bc663bb3138d81ec870caea8cc1d219a4fc1e968b462d86b83b6d8b01ee68242f7f0edabff4ac4b862c89c7d71bf8499df6bddbb318e6c65705aadf021916ad177eb8d1ac6b833443bc6012bcb85bb5a696912897c90be6490a5cd8e4b043be6a31ec2094f1ff3187bcf86bbc0b6ef65538432da7db0f7ef4b5ee19186861c09e553357e82c92fbc8babd3343a9c47430784e2b71c353f8f094f9002b96035c3a4508e8447fd0db9d1228f9e207dec7beb31cc264169bdca323e83e8ccdbaf9b49de74208602b595b7fb62015aa2059569529832d4929a2b2ef4624ba63db21a3ac58f5c272150dba400f666cf53bb1ae8b1eee0bdf9fd376539d43431ce65c6e0cd883f12a2061000f7f0d469d83691d014743ae4e60f7840d481a954d8f12aa3be07d130cdfebe32a9fb540f789d828844d54731a0f875258f12b5f7a17ecbec5fb31b67e9616ca4debdeda97c18757a09b70f8d71dfb67d302f5d0272333321793524a04056a3bd5edea7202cd1f30d2ac39bde9fecc4b1807fab5e9338e9acd434f5c41806eae5f0078a5ad0ed83a971a0f20e7349262747aba6f14cb675f3385994b9ba99c9845ee09f40b097aeb6a4f61c03351b64494d5a56a4e5d560606d4c0b696e36c8026e10edba14f5fb9c8c6f22a72d8d077e5935c460a5bc30593ab462ba7c0570c8e9407cb1432ff2c4f1b10be0a3c4962d35e4f70bd6947048693a9f962b2f483c9617550b866e1b949b64df98deeb99c0a70ef78ebe84a594c085cce4c4dcd9c73f3e7fb225daff755131a7b62728989e785bcdd2a5b559a5083ef08c8f33a9d2aa5c028c689a25d0ddc06a22c6a31c2f707580bed54e13e3080c1475d45d42c3a01ae78396d7150b05b830c40386acdb5601183995785cb68a983f89db822c03e920357ef9b8589092c1018425f6d10af4aa9e2d2c5bbb86548979afebc8edfb4d15f464d76675c54b85e64a761d122410151981e31eb8bb3088cacf4e5a0f1294a12d1f7908f414faa9e6fe3c23f79173ed911d02eadbbde43d3bd24a5e1aaf856de79627c75ee465d80a88c03008b9e5d80fe9d1e6adf4384fd39e28fd943cea212ab129cb3a9c55b859d04a6ace052d7e99cd973bb5c9f6679b1c305e07208965fe58c63b10a692f1dbbe22fcd0db15893ab19e107ba2e42c9934a9aafac32adf6c73473f6969e42c983b8f0c96a4639ef77d2c8e88e8cc47d7cfdd08f68d973a7beaf401cb4d1311992ddac3a9c9e067da198adc6304745f5dd312a182e6971c34a515a6c1bae647e57e4c4890b0548cea6d0024945ca41d312a919c2636f12e9d8df259d018277784142bc4d3c387b52f61d58ba45a26295dbaa2226ae56e17c188d34082cf9c487fd9bf5efb694089b2de533b1a65c12ae96d8c5bd75bd67fa57fff835e470e63ddb3523f8f0949b07acac05c7ee43cc8db29996ef400f110535bbf4bece9446fa68c2a8e170d68d38f0f6515594160ac3dd80f84493d8670d2025bc0b51b0815e24b90741cdc669afa938a8f32e3f57e166137c45f785f472a5e1b09404620fd9ad8cc1925de0aacc24077f29132c3e56fac5957bd1a423e6456464f15d355ced61b26a4ba7b1eb2effc7365fe96918a4fa1bd64ec8cf8fc86d126b9bd286f309cfce63d631b68538ab1c71002772815be28aa147235492a9bb90170bfaf36cdf663530ea926b2389a46bc1c243d512dc5296a8fd97cfc70a8f5209ba3cf724aeb38b63c1304c20827a398b1ed50d27a6a8c43fca8cbdb75b76dcb63f2efea52836357f22a1d606c3ab0a3f6e41973a6b7397e836889ace2cf094af03379678bc7cc7e5674da560cd955271491fefe56b418624ea01d385ef9b1e469eed4b19dbe5b73907ba16b8f0f7a6a337c68393468123982d8f147923c4de2f6ac68903171f97dc9c7db669ee107b5792ec0eee8db0d494a996ca126a0c58cc1f39dccefe68ce629def110e059e450112e6ce31a15f2dccc69f60dc12d012aef4edb2c7e27fdf4d74a4931fe7ef9832104d6e1711faa3830d3f7540bece904ab428a79873c35f0fc934d919f582e96d23964af95001ca59f5cd73eaee466621b59127bb12b1b22bf3f64f76cf06cd04b5480172fc02f6d418eff934f1d5e8b671adbfaa5fe96d149d8f52c0c4d997bb5dd91dfe768cdd73df0d51b99a0bbc8b80d4dbe0abd9046c1e66af928779fdd375cffd064fedd2abb0ac29e3174636136bbd18e896ef0ca50ef2a246877643efa5a31b24f8d46afe5652fe3c2a1409e08abcd34ca1b9ea31e7d9d757354d2e8255f914d4f1af2aee18882b3f23038c65765ab7674cb811952172bb6f216d022e1f186680dafc86ed7fb25d6692835234a72d11d2f87837615463cad8cc64533569a78cd3053b039f0477e14d0911efb0a59a9f1a5568b008e903823ea6b1b64abe1cf42610f925553f3f735cf74db97bea299b97b408201e68087e1b40d39fd094ef49048ea560b2a87f6000dd8533f8fd60b3f5c4d4ebf449b91ac91b48746976a4d7f8cece5a39a8ce53e33c5703ba57c6649ee86d883d16bbf4f2969ed867ebc43d6d61d2565cd892bb7e84319d2271c12a0d9f20894b477779025335307e5cd3f5fcd86ff99eb063033d55b364d3d3f770cc699c73c164722392d1ba10ff523a7e01a2e5b861b8b5c7aa214b0f4116cfd545d84fbc11f642910e828bfe7d548e422641d227586a11753f6776d0fc82b0c4245ba8d6cf655f2deff6295d7afc45fed545c3aae54cfc988798a56e68d040c9c27436685c4a2e76a19d10c26a81d7f0892f28d79ac9edadfd45753c18680652baa286c54b0d46f7edf7e0a1eeaddab3dc5e7021eb695b221afe64de7db267fb777708920e372f1e0f97078059d8b4d52954480e49c3cb916b13d2aa1b57ec2083523a4338504d7590eaf3f24e8b0cc10ac10f115831b58858366d4373c1197e58d4aa5d3bd1288b1c64445c3f4d3903faf533cf795bbf537cd6931f19766641727ec7349b3256cb0cb36742ae97c01a7491549d3faa3faf5364c2b16ef069267aa11f8dd90c4eb1ec28db3a0ee34870f205f00f0da5bcd856619a9f06b778a9abfc11bd67c786dc25652e96e2b818a41dc3849985c6cd8af06d892c53443b37b0d05c47e9ec85a652d8c00ddc9ee720326a90c11a85d813dbe8fd0de71f174d13de4db1b1f3c1acfef43df33f000a71ea6b931a4e7b632f535484a834b0a3763f66749f6265c15c8457f6eb8c741915a0370a099410052a1140ae8fcea1563fae195f457dcb1b418d74995b67738987ee5d64138ddc1490702de9290759a605ea576c58569c25d864ca83c73276d2554f6f4fcc8e4847ef0a8ca308814229557eb12a4caf41779dc4ca54b3800699ea2dbd1ba937dce5b23add9aa2cf1346cad5b727a6ca53971e08147aa4d2ab36d313f7561dfd129476abb10e8c431584c279c9d2db4a5afab5b909642faccd3f8c9c8e9dbf5081caa8b7779d398ff169d8f579ba7ea1c019114249af9870f52a9311e340e1d4930ed4f8b1b51f081f7c8ab3375ce5632b88ad5e35cb83b1ab7e733ea5ee49fbceb767e9ffe4b13df823344d9328c400d5bfd6475e36860168a1995d47044c28ad8aee05a2baa4a42404721f0dac8efd872548a8337ef3c2a54a920837115cfdb7cfd3c65a954ddd2b76c0c21766aacb986f60fb56137177f9bfe9ca069410ed661cc5c67803314b6710bcb140c59bfd81e4bbbb268263b3cea80d1d261afc7a40e810609b92e3617f68a2770a77f705ec2bb562354a6ef8ac69787c25f47426c0b8603f35b2c8d1ccc53e8de4cc30773faaea7af2e9e7a91b9ab85186ef1c657e1411bcc6e175fee7dccd605050dcb3e4f8c77fffdf525784a24947b93959d8d171c153dfbd6f5b4915fb88ed94505e848bd8ebac9953868026a7c93d81b0d35357dbbed085197978e735820d154fd986ea9b4899a65fb8867e50509446b5f78c3ced385a0708dbffe6f7c64f320fb7747b9b114794db50103fef685df6edb7d4a7626acc81b1e5368bded01499247ad5d534c026d35b0fa5e1b19aeb20ac86d52dd7c0b8a3a937b55c473a0db92286138e14efc7f05329cfea6342dc428706f616b9d49edb534614cecd5e9af09e8bc5ec980a9b6a5840e6d0510a91eb119ac0188500ff974492ad59ddd83cfddcde55975a7b21afeee7933a275cbc68b0c4bb99c5e05b75f1a01783f511743f82004b14b8ebeb3f6b705d6e32b3bc6a09175110f90d22e5fef0cbe3afa4c11402843ecb5fc768a7629d9e032f9a026d6ef529249ac1f675a0f732ef7a0cb439f2fc89419b881a6678a1ed9f6a8a3ec177009c3b37a936839c35f51dc0b3ce1fc7bbb30e18b890faf23fb479600eb224a5ac32db3c4d73be553f8ad520245f13e554549743d33ce383c99b47cc921cf57f6a756b25092e8450765ccc24f917d4f058e663a9629eae81d20a70fcbecfc258cdec819e76d754026cf3692b8c68c16d3bd0f9b5e136ba90db7a9b7cef5b09e648f0b4e5110ecc0fa5d712c068d277b07facdff5c985a62568641dc99e3f3a9c5e3a5bb562254acc93807f6018d5566e86f26ce5961befb3eb6f7e6f55fcd2ef90220c6be4cb6ebdc87805a706f1ebfbf41a4701d169f5b0e6f533eaa114716461304d9503519677b7362be1cda8a6ed49bcf4e705e056c0dd8de4a80a06847f53ed75bd5858507ee24378cce77a25c6fa32ece1ae1f915851a1f733fb539aa4dad23b416e603b37cc1862b4cee6d6fd8814959e248823ebc5c9e21aef7c02798856f4bd8fe99536e72d8035ee6f390565ea858913ba9cffbc7e4bd960f07a71cf1448ae67552d00c61b47cce073da83362d431ef6175b18a8378adbfa41610231729d807f433109eb3a2fe63fa529db5b4544ec463eecab1b7e25bf15ff34cf31fa69d022346fc6c932af1e4673b59257db015d8e81c03b88cab2df4e8a841d4324342a0a9927cbe27d5bd1af5fec2cbe471f0f3990845e6295a8d8fe63dd91078892da92f1f79db972acacd4da5c2ee121e46dc1eb97685b677e28c01b8faee18ffc7e55cf6d90c0cb281c4173740d72e3f7e5c1e377fdb5d8b94b1e2238eb53a2e781bd91e8699aef348c9fabd23cf615c023b428b4931441d0bc731857cae089ca9154d9f66caa47788a29e3e551cd3fe394131bcbbce93b5ae9595e7ac21a7d3c099618263e617c6aa18acc2bd06abac8b3593d2bcfc73dbe7e5b7500655425b2770bdce64372e6614f3cc5243d712ef60e112d636010c181e7d3fc87294ffba4462088b500312e130fba5f4cfd52f4e200b54cf102685f3b926d458d824067a8136eac11193eabf65f8e0b2494a2b51337c01c532b306f521a81e06204e802245b60d798e2fdf861ab12494997c2d8002fcc2c084f0b9a4becbc7dc325a953bf7a816bbaf1f19c0b9ef1aa1a8b45e64f3533fc9ed24c48bf85774e2f6906c4c01d5b08d5caabff4a97a6ae15c39e5846f481fe758994f2f3813cf1f55382eddca0581f97d19f9ab521abb5c9e55eb68dfa40a23aa95831ae4c8809b35990277baff3106fab4f16c1c97b51b574e9899a92faa84cc6187d3663e2f5e80fc11a1398d69bcbbc3ccbf6fb801256d6d139e37b1a412a64584e2243d83711ca983e3af75d124a98eb52cb3464782cafa85ffeff2a3d52088a2d0888d24dbf3e87fc584801045aa5dd23c500a2e3b543d15453bb94dd623740823f8f5bba4eb012dd02076cf28a7774b76aec95f57f57decf782d04a1c954fdf66de3ff0d5ee3bb68bec1fb5d389254963354e82de9404319d2bfd43af60624e1ea1316a74e3e0427e4e436b5036aff4894e603ed918180dc0a009e0986af57ed5a994d28cb136f832afa998a7985d73725fc63b4f6b02a8e748bcc8de9d5097125e2fcf224286012e781ae5de9676efa6d2492248740a299a8bdda489dfbac05e28cc0a407d1785fa0f5ef9ff17448fab0db19bcc1b77b961d1361ba21a7d21406f312aed4a33ab1fde3d7e11050d7c0b7ac64de448937fc5828dd62f35dfe3409b27d83291209b244b7f191d471add4e7f4fe197e3a4a44d06ab7c3b18292ee61476bc163a277e91c0eb742ac5b3dbfa8616feeed4f34f82c658b6cbaba229bb42e67da12e907cefa44a374067209e99f6e14def03c8a9ea285b2ce9d694fd468e3fc4db53a3bcc55f640a6715a84db2377976a4596bda0f957e859c8145d10f5e4838cd92a8679b590193a8b79410ceb1a62015bc23097976876aed94fece9f1bca827ed4e6a4faf9e97d0a352c1174cc2ff34915395eae313f82e2f7071c7d2e8e49f6ffa69c68a9e36e9677b8752cf0de99484df50238306e768692a8e231fd59363efc30766fd1b90e536580677f8579b71a4a9f1d9fd9dcedde4d294944f2f6f15db4cc5b97d7310749e8cc0df3f3c9f8c8f67fd669965090f411d1783d742b215b0ec273672414fe80e6e38f12a296015838dd5620ce9407cfc4ea97a4eac26e41f159e56720299e01480e1664faa87dd5f700c54be86ef97750bad002be81821647dada1f333a8cd3f795ca7064c612441d314a734ea70ef59b8a49de573102e2f78d7918c60d73fedac0d2be46ba68af91b80d1f6707ef508fa12ac01d9a99ade9baebd93f6cf98bd8d656d6094a281d3bdd37d79b55449013499c307883ed8005a957ea081dc681db218041163ffa9703e8f024525bb4be0ec8c7b7d0b5a66233a2e6d487e883e8cae77686d4608524d1205f8cf4dfe8e06a67d2dc8df96d5c5becc01e2697d8c88c71602daa7772cc8dcead99e9aa88010e6ee5281715ea7565d00c504cf06c2a0b0767be024a68971f3a01d39a843b26e2252a22d7d1c4b53996f3f360bde8152ef1b3c243a3108e6fac84c16d34a959ced3c65233f7a324bf869c8eccc4f392dd766bc1d44812b8666c5eebcb847ba1bac2e440944d31cbe0e72fa9f7ce36a800dfb7411f01151eeac1b6d91d3a59078e38aa75639d13b18203d6cc49a2595f8074c0cc8b98c1c6e4f5b414c91fea91327e407806adf4de8e20b7802a0a03bf437daee980d3c0ba3d4e822339fbd7498edccfd1e7457a5bed87fa4c02ccdcd13242a921667cb702db15458ed396c7378b997f096c2f4d2f8580c8b939b18d9c350bd8faa65951a4a89128de01b763620fff77a7ff3216624052494e3781be28351f63fea63334aa8b0c509a2a2853d20354e03307157dfd0547a4936504167e18c773b5cfd1081b6bcce84ab5af3e8f50e1e135eca12907bba5021029013ea5c84b30a689fd7600321a16760c15cda2dceea336159ec3884cb58a4eec42dea52bf3c1593d7d2560c73e02a79621a71291c34ebeecd4f2899fbf65d4178d9d872b064e56511abf431280d664bb9d74e756a70953d80a5f109c0bba2a10ab2352afce01262f9ce9b2fb28b736e34fde2912e4fc7f410ab2282be0b2d94164190e9e9100503dcb4db36a7dcfa476018be1afc050c98f9a92d634887568107f27c4e298735ce56f935147c84636dc79231714842db92b83a7249f492a5fe7c6f47b622b83d28e4f63917a5144747e804fd12977bad87b8c9a19546cf9472dff293b0692573b9f34637deb60f0e7c2ddb719d6e320ade87f13bd3c380ba64af36d0cb614191f82e63e1c833d7216115a02f6030e86c1db23b9193df78807a66a69f75afaee049e2d9a762830f389d4bdd8719841159aba3f353440ef98efa92cc503da8d00745bd12094c3809bc971cfe3907dc4f5c2ee9c2e172e6a61e8bb0028391e1277f62199777d3d76915d5258c85d9bdf4dc1e0024dc8edae0e7944af3a9f0fd47b13584e47397c5afecddd2032e0d8da451df7383a516703c52bac02a440931a325168b83ad16a7409a27ceec7201dfc07609a089cb982b3ae845bbe0e21932bc73bba9ff64cee0bdb63968b2f25538fb81133381c092805f30eb9ae1f4cf8506056b4cb23b2ef689b9892c013f760d983b9299161484040b9512f9980c8a8d1262cbf046a0c57d472cada531b9f2e238edfe4db147eb2ad2bd42346d99d8df64044441173610d958880d50cee24a3b4010bccdedcb466946e1ffe7ed1d48e07d626a9bbe5b9f9f30442ebb5358ea9d605c6496162f1433dadba29091073924b125b58ca681c03380e98841497e527cfc296c32e4d3d33ef0e2e0aaf3f85830b1a6ab706a69313aad00b08f3bd3204e85f06a20b46a01ef3b9010b38060f488f16db3036442511936f22df184e7d2a69049b4ec1f523ea92d7be936b0c1bc91f2f372924eddbe5391666724bf3cc809adbdf2f1801cd801190ea0911fab0ee038c040c9647bb77e5eb5d27565429eec20959add713a7c8bb0b0fd7f277d79f8257cd4055fad0afde16916700189b5c2bb99131c8d2b7aad771b464d62c97c4e5b5172d29af1f766ec08a9b10e82bb21b111021b1e7070face9621885c0f84575d06c3bd90eb2b2db11ce294f6bdfd8db395de75bf99fdd839ca05bc6dc020a77d053d22fbe904d6e30e77b854ac1b7b35a00e98eb185fea4b2f6956328befb36dd555af168c12d6f465df7792cd935ea9c829111b7c3585752ec2e224b3301f91df93be8b34e3c267ab607f5ba2d3bca266a46aeb261d5e4a40b8eccee690207bbc7dddc483e60daf57c12bf9cc8b29921406f2b4a655c92d1da1e29b869e7a9dd47a995ce9983d5de3680a079af80a0b48d765128d9d4ab01e24400523a9927ac0205daee678c5d5e6db860f9ec8f2708d7c2e8f4c427755ba9691a63e4ffc94f7f5a7450b163bb9da824c7c585c57644a9bbb8552f3c3908b9f640947000d7ee46112c9b7ff037c26f2b9d85850cd49188c988f421fb3e309a51388de58698b3e090c877d71b18f64a35a9e0f14b8b17fe542279a24ccef9d2e4caf54b7855c4d441108ec3cca860c2aab47fd36ae1fd92c44c8bba172f8eeb16c075abbd5649aa8bce854aeb2d295ef3860a32501f6ccd81cfd27244aa156d4ee1b40c3fe36bebd5c8077460f078a776e72817e78c8b35f373f8d1bb87b7def6f45b76e544511e89c7ba4a133976249c9f81891672835483ffa2e0650e9bc875c211f197c025cb0e9346d3ec504a5dcd75be90c5177bb2973d7aa62887eab233137f863da00c7accf45418d47c1eda72338734dcc49cd599f3282bed39cb2598ae4c3cc02d30b42bb28c1fb1061724f19f837e44c10e47efea54779d6d67a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003eaa5931e6be5c3f7e6a62cf868cfe76c641899ee541e3c21a3b722a2cb82363bbbc3865a7b6efec11282767ea898f01ee8bc1a1ea87b1ba2cc3d8b6967d6c30124575837e52ae2d2a95e0281b33fa311e92a7fe37a9fe59ec398ba217419bfbcee09119ff040f69273e1d6e7d2ea88ad2e09d02711b2257d516eb7b03876b0d3e180ba79e5d9c26a38b4fc9a4dc2285b810213d1b6db60a63e688800fc1320b0c5655bad0c1ccfc0bf7e7c806cee0a81a8bd52c9b1422083522d37f8071896ba625ffa22ad32a4fdd1e85c837796b6896ce194f74a10ec7b5566cc7fa3ae9b598017a1c21042ca8a369aa68ab5e4b5d99516e243c96d4df60eba4d7f16fdb6f5e63457747d75c7cdb63b627c6ffe8edbeb0643957580ca5c46d2c4dfa92c6ff65d5f25203bf3253018739643ed0cc9f53657bfd59772eb16c5553887a4634ec5ad4011ae93e36b1a26ec4cc67737ef913db15eeb776a388a53ecb25e4fccdcc89e7e2607cd6d22f3a64b8bed55a68716c9bd29bf5d913a21b83f394ef18ca068f7c2691131bbd122613b5ca0ce8319eca2222739910f7843bbf5d53fd4ce220d82b3e4b506f200111f62c5c72bf32d7b908960425a0b7a5926b68e173eb8eb2005fa9edc963d3827a868d14ab5204c2a5b9addc002adc9c9bf2c6dbf78728207493e9f6c27c2ffccc3f68511b132fd63cafca59dcf1fecfd4ffd791fca256f2c1628f04f02a9e0683ab4eb056a51c98ea658c0bf0a866b5b9dd1bb1f7bf93bf53460986b6f1b6063d3490a0c27a33711b7553710fa0dcf4d735139a8d5156dcc6a8d9faab5400926575eea0f2f53cf55c59c1176e9d99f3a9724fda01ea28d1881570ef21e3f62178d9a94f7cb8719c298d456db1d15638ad2f30ff19fc724414268ec2df040f39f3fa60faa43689ec1f7a60f26dfe7a4a4ec667581a0adb9af72654142746d452733296312df1de5b8acba433f7777e8f2ad24393a697bd4c9dcf91519f2ecdf1532cc9916e7ce76107db7fa0e2deebadbddd66302415afdf947ca719ab2e549d20437b89da2a5da3233463c7a49749fc74323f9c37272bda77a805cadfb810cc77111c89159c79884960e126d1230211ea8b4056442ea9b393ec4df3a17e7af5b4102d2d9545f38706db883cfd14bc749d4308ecdfaeb20185b3e01294c41baf53bb4dc5ddb93435d82eb9886cfed19ae8f409de6e19cd2ac9995ca62e3b4b6ff29ccf105368b40b39b50587b513ca0b6a18c399741263c5dc07142cd236a2ae0d1f516b9ac70b7d9818ecb96a263e3c9d1bb6ac860b0e394977c7253568b9e00fbd55561866a3039fc4ef9c009886b50e8763861886351b7e75b61dac23e9ac77114b5e50da0343ad338ebdfcdd4beb1af64ac4aff670d3078b9174bb1aca79dfa5b3f2d863b4a44d0f3a8dc376e6656eb2ecd6b0de39f65123c9d8f69fd4cea5d52f9213c62fbbfb92838a08f7eeba5677ba4acfcff90c07d8cfa8c3358121663a0edaa763ece13577ea4121d2ed308eaf437f612e566a78052362c56e58089d4ed23ae7bf74ba9729ef31928a4a8e63b41902f99baac84e5365a561cce1eab78e3a11694b4fae7d22f2d9ffa08f1a72309b741d7a9e7be72df6df2cb3874e5162871cb099d64363eda5b8bd98337b26af4b21215d7a1bdf0f677e7ac4d0b9d78649bb422dc10ff7f4783c50e3d0171d8ac8b8c9a6f61e92622811f07356a3c644025b8279686a85d1db034e05dd74b34d64a96b097b0aade0c91812418192ba36319c15ff64f9ba005e7c2990b41a8481df5179d771568de5cb2f54a1da1d1fd777eb61321f23e10a632568071c8f0da2696f9aa39188befb9e963c26c899539215d7e8b42f7fb75a998d8dcb4f38cb39c34231f02417bd9cb40b3d52e59e1210bbd030f7fe73996b52231f6ff4be29b25d87d44fd19a0643bbecdc88b9a1c7bdda62ce700495f3c73d6471678575b5a6989ef604f276358b16b9ae6aad3ad103e21e15aeea5d72f8abe0383479f5fb7124f61bd23f32a7cd4500076b48cfea8d7340ab171840837a3e24d8795ab577bc532bba19f065e994d74e8bfd04d760b50ea9035b06c5a1c66480e688a04a96e2c3be555ebe76877c3e03b0a279f7d005048592bd4e835a57afa2c6f4d31bf58ef71c721301eaededf9adf9fe1097b507f584ede047d019c880091e407ba0001b6dd4a4c96349a9649acbec62514d8c38721579569b526c73760230fdf28d3312885542044b09366a81dbfc71b46fd210dab5d972b170cee3024cc37fe01a2afed73cee3631a0018a5f6c9e9ec2a5032bcff462d712b1cdb1b5473a68bd0d444aeafa1de1afb4b72e73ec676c0453abe3924fc9f637abc559ff600a2af1ad1b8133fb35992dadb3d17fd9db4be21248c2f2265352b8b552364145a74926900d3c32dee9cf23f1840dc3c36ec0f45746544026b37eee6500e13b56b645b44cb5c678139ee63b26a45df027965da39941120cbf5ecd71413de54e21ab93334991da6417b990dbc3912c7574e694886ea586c85ea9d0b9c085bcea24fbd41c0d3dc29779ee317e4ed713d439d3e81b3e002d0383492b506964c2afdf2b6ae70df62972a8915aab3ee27e9cf4e2dac48dcd6f3edba13fbdb247b0ffbeceda1cc267799632476edb0a5ff7202497ef2cd489d7eac646805a21cae26a523aa435d10e2d7295750096378c081e576797acb8b1f187b1ad8fce3e5ae17028035bbaa066df8840ae92554d031bd7ebd666dca0d246a64c4ac0827e743891aebd5323b6edea57c258b6a0c161ccfd7078cf25036741c6e4a2d50f48a3424f64dd3d099b1fe851a907c0012b0475ef83a3432e76ed6d5a194a0fdd5364b919d8c77bc4b3895416534040eee087a13e740a654161d143d068b50364f534e781792091fd96a6b8066f76dbc29847f96aeff2a8166abf4fda4158424ec4906806d45d120ccae47eb23c2fd344a8e1d8e556108e15d803fbd841b83ef33803b52a68f17e8ab6ef329a67efe9bd98d1ba3e24d879b8504bc24ac8696beac61b596ca57229efe1135e3f711b61c5ee9427e5faaf0d866a035db263c05b9e0523bf3e2853b6b4effd6c11c656edc62095ac7d3628bbf86ba708afa27180a56bc9711f500aa77219f9e6a1f606d066d572b25475ca0796fbc37d82e2e17d696088f990bb2b7e9025b548707ecfdc0053a7c41c280772da90c506dcc384948299cec332c82aaea769ac2bfddf06432b41a16c34cb65804ba1483f2db2ff78596e275866158caa107c5aebba853eb860160c252ede68a262c3a9a0f64fa69b86540f43bb11c60373c42e12370ffdae174724696aef856ba87e85b6b6e81e7071f202ff925b6b4d39d7a239e3edb796d96b96a3996d404e8518590af01acb99a4be9f069c40f0e9eb3d53bd419cf0f52ee9df8e0ae63dcda1479ff822563269a7103fd33960db6c005bcf36e09c3e6b80587b635fd8b25b5572b718de38e772f1ad61efea399f3601c951114169f44c661dd6ee08b3529a4a305ad784215f580cdca1d72f49c0fa67ec95e6d494b72a48c08e689604a2ecd7f6e7dea4be0e5b61247c13890fc50bbb5c1a222a9b0b87b0e71e7d785b07d5873cea78b05d792f871b5d1f87fa3ffc749e4a5da3eb45d736d7f387201515e6e078ef40478e3436f737c1659ca7763f1c0992e3e1140abb33399a303dc131837c4142cfdacea3f439f0458047862c662a44a07f6293de864e729ee321ee0f5da31c9171daad5cf9b7db55ea1914b6e427c5ef6a98f915dad1296e2a6d09f3b7fd7157c0d798d3b9f96f8f2d71e19a4b8d13dc4ff492652b73b484708fa3833503c61257521f9cb797133da4e25b6b0ec2a4f39a261e20fa9eaa7e5ffa2922572ea13d8fbab00c74e97d0dfafb109da070ffb1c37deafdbaca81b8334d297591069955e4a1e8c76498e35c9a2c7fa6a3108ac3769c97400e8fb0ceb4e912e16503f4d7f088284218fe0cc60ce7171a7919ec750dd2919c4846ee2e3f6e83fa65af6a502dedfcf104b14fb6cdcb656db5058b5303e068570a9860534d4ddb34f571603b1733e578ba3b32cb4739f914c95bfde9f3269a24b7ecddda68f7b705a6f25d15270a603dabf44c6013c320b428959aa646159579f2ccad300d0c75f0fc9ad76ae7c20bb44c84f311bdf79aa0754b1824975de8cb2da054d0c3ecb68b58e355a8d40b36712e65dd4ca037c57e21d4ccc14130029ceb107b490828e7495e546e5b76367f08d40f519d65042fb1a0cb4f18ee5c81739d9577155431869f8f7677ff38e443cfaff9f670670d37cf84b705a7f933d3c3b797dea232a723124ec20900a695334a44ae327230837c4c4ff086eafc567811eb90289c1dfa3b262ebf980c59b9bc0d24a4abff5c376b9c6530494e5224fce28c26db5f909b3d6f91c7bb7eacd24c9cb275b9844469945456ded36eb52fc0ca3bc46d59150ab8333a82d9e41a6f735d8089f1ad83ca84f8b754bbb87fe7621d5cf1653525e92a356b7979b94cf1bee41159cad794ba9bede94a48b82cec6f70721639604d8701dab704217a9ef98da4e78dcbaee1ba67c87f1820ea369f37580ddb8066f694dd97afcb57b49af77e34756e7a70055a670cdb66cacb47805828a299a0b5ab732bf0b83782d3cb7bff073da43de77a1b282fa08ebcd7ba205086b2d930d8f6a26b7a52c14974aae78e81b297ac51ba6d19a551186d9c290faee6c132a74d42b32a9911f101f3b3dabb5876e14c6b30d0ba025f9c5384fe9ec1cd500e8a8f2a25d7d1885f42fd60b5f3effcf9748097d687cb3e83052ea56e479ee1e5311b176af1b8086492ee4c19c6bcb748db3e39ff1174705508f5d7fe8effe95f518d84f306b114996842d066a2432867d6e0a1bad572878ac586f0b03654f8d562331d7e95615f763987983d2517d2df0e34698a525a06acc13e7a33ac4272dfc9c82b3e1c2d2b739d490dfdbdaf5906d795ebedf6af503392a8eee97f2cf9d71e9948e209991b29e9f3ac38ea7dfd87c981c37650c706a7a032c9521d88f063d742f0eafc19a0f1d613ed7f1a1862ca5a846a83ff559c81708893fe05eae90e6a31adb952435f73b8365c20fae31b57111a5bc730bf844999f6c95dd6d7662f6e01f9edaa8aa92826b772dedb7279b673c01190b38940787329e3e1feb2da5f59204ff8737400779823cbf95a5b105108f22670e6277386928e8e3aec21c80692092a5a3b8417fa8307b210e5e171bf273cf4f8573e700c8e9102c93d88b1cdcf491393612f32198defefa60cca1079751d27877522d872adddec0d517c2a0d575c962492f9f16d0f28bf394d697ee878ff18cece791f41a6c1c487c650835dd0b02c9e2f68c85d8d6ebb4b06340fb4897f530ed1a5a6f1dfe906b91aca7037b1e03160c4f049739f0e6e4bf5de55364cfa50e80d3d222bdfb03d21bd3e531371695f0cc224d747aaa432bc6abce2163a1cbceb0fa3f3381cb3e2522c20be8995c80ff2c57b043236bcc33cf35438bcb742d188277eacaf1d6060baf61604f2a568cec33d7752dbd9a47a1e1e38cb926af959200321b109684262cc8982e8f716d805fe988e459cfa17d20059df0d4fbbcc9e731141a2cf73e6431784fbbcff60926ff575345efe1e73656424bb804d30291bd1d032e479d6a8ac2c46e5138429344758420df197bd439eba0d52d7035e9b7bdcde8a0890e725e86b6dd36f2dc71a36879d8fbfd26d0508827239441a9d9018e48acb819d4bca9265584b2244c0d0b813c61e1c3694341d5e01d389eb73a39d89635be2077b23249a94b0ff61bce4468d7a5d994cd95d579d2ac60b0e8742545c06dfac57dbac398bb1b9391d01b15c4518b2b98d92ed41d05b6539fc3ef8e7bcd3bb431703e22bb92da881df35e473eb3fa1ef61577066882245a92d1143b22c586338bd7a51859367234c10dfea27d04dcfbd709d6330350dfbdb19849f6e3b138c0fc3b576d1ab0c9e0a6a563ee2a4c180a623eb4229577cec425a2f785669838a3ac23bce9a807c9d3f443f5f3ec949693c03b7a9cc700d8b7167787b152826e24c2173c54a8435957d26f1c796ce33ede18888e6941f2e7ddab9d5f424f77c28b679f3f75c56d60b268b240475141f83393ae5a51aa55e27f0d9ee90007801c1fc2442d15a58cc82ddf93c92644b6acd95934441caa32b0e564028cb31fa46429fc8d6efcf0a878105f9b1fdeed4b421991a2b691eb903b57d74faf2242ec82f13c036af24fca58a30f50aa37f307a23b6381177912776a1d8e0fbc16165e5ebfab2c89bf69f8502e183cd2f9fff3b487f857cf9ccaef257eb2c91a574305e1db7193342ae83c48f8a2e700ebb815614478af46c2b90154c36b0631ad72e6f18cb5bdd1fd719e284ad4d89ad6c7778fbc0b0ee3b387b4e035e04d69e04b0b771c9f34cafeaf25d86cd6970a82d3212735d7fe1036dd11af193a262ab7757b5cd1587f85f647d940a6d1acb6b7851912f807063515631eaabaa019dcfb993e86f408266cace4c24940eda0083d8569364dc1afb816c0e5b95f3bafe7745e5ddfccd6b1e5ea2ce9d98151f966db7a197d7b2d7f02029c6ec54f336fb3ea6ddf4ea3eba95a76c755d9b226423a5b0c2fcecc75007ba0a1bfb4d3afe2a8256dccbabf6f9632195e0e321b9300eb83e4b51086beba8bba75e27033d78e2fec072c0d6989fed59b991dca04c1bde11caab22df233349b16c0dfdfb7d4fdae09e3082ee9616babc41f898bb5d70084ed062f0c58f9f6117e2bbceba7ceb78f42a867058720641c5c995a5c75fe523cc09e3395003b8857b75d837b4aec423860fe527a8bee72902aae99248e5e3a715b1dc6b0311f73d38cff3c76e95728132b8fd0753cf21b6ff7074dcd461e408b8729f04535cd3eefc4b9edc6cc37f1866a00e9dee455ea218b4b7e3ee667ecf20c6aba3c526e71122632a0523bb323fbe7fca59dc93e640eae23345fb560c70eb28a2b7dd12a94a37c135c027ef348d968290d9a33d6139e28377818fd325848412e4cf1fa28300c8c032abedc20e788b62f28be6c457e3ac02e5151040427068000237e1491ccb41fab116e9f62897099b7ffefbbb22d4840b1c8f214ffbdb138a8bb0d698cf103fcb319fa0de0b5f9d86998166745a9326e67e4e3734aa1b231ce19873f422661edc24a4a6fc3f38b3decfd1cb928795e12f9ad0c690f5b6f331947d2dfdbf336b880ad470c32cb8e8ee936e7f9802536f60e2b564073745206314cd8917ee0ea269749d72e56c66a940749616f783620e14f67a73ea073c271bf307f9c5376e5ffac26e31b576b8717ef4071623533869a6368e9adbee0273e6bfbb14a833c900b6a4d541c5c434ddf4822fe1ce2a4cfeaf43602d3f444e833dcb655e136bb511176c510798dd525b3bbf8f2e3a5116399a7dadcf96b266f19bb6953aa937991db7b96017a13a9755cf0c93400a603aa6f265b5d664b0e23b7af1a93edc300b92f1fc90e671647a6a38e9dacbb0e020c3419c16f64bb846cd761d3fcf2eed82fd60a651e87bd38214e3e7d425b0594f1af2715f939e311b23f789b78003a875d98e5721b2331034d25a76fde2ab243c1a9f95ee22eec3c5db89d7bef60d297a93c58f9ec839a3091f2727e686e3e96e4ea37a4148bfe8ed50a7879475bdc907d8c0a0079ef1f47577b46afc870d115c23a88ef7698408e83fdb0a0693781f8404ea492aaafe8d10689cc0ce6789149c3619448f09ddbc4cd59eef53d3ce8595a4bcdb4670a1e5605e4ab +Output = 46d35349de9566fd96b2c2b976841900 + +Len = 101392 +Msg = 6e18e60b1ae35a71e8c12a026fbcc8bdc75e25179b746de67f12f17f84d7651b0a724b80d665afdd650915f57fd3b07f0fd5d4cd3188aead8dc8338de42056e2e8487eca51ec37ef2daf27af7770457beccc457d1ae4567eba6010063fb4a8c5afa16731b2ff5a71e9bb4a7a801cee78074a606f7d10ce22aee17234c019c48d0886eeff222780294033659cc25d163d07570deb83957d611253405d8cd910029afefb7ac8eb11e1db21605e64be229395fb343854faca028ebf62cace7cf6eb0e1176eccdd3755f618c23088fc47b42593fbd9f17c71fcfc92cbfc3ac88dd110bc7479b5867146c7b7d95e26af98912fa2a9068f585e38e6ca2418f4e872d3d3a2956d0923057cfd1fba0341ee4b4cb21c596db15bb7d081e29cf78dd004d35423e8bd2a2b5a4520a0e2b45d20d65347517b53fa0f1570588ca51c4817ca7c1cd0fcfebb17e64bbcebe1f5eaffd02169f28d6debdafd84d528cb0bc6182a2ab80a20861e71400d3c71462c7dd3bf5394600e2fe957e68a72378d2a8a69aa6ba0501207d6bfede629b17ddc8834fa46513a8bfe84fe56fdca394a0d0774c1bb50434fd8766c46830f2d078a9c9c27962ad2757e4146d55b57bea027bfd216a65244189c7ffef050475451cb1d81bdaf7be8590390c9c83f75382e1f360a0f9920e32aa845f061ca7cb80af29d8e231eeebca54315efd5f6dd262237ec75231036a0f4a08ad9117e29d891a59f1a0e50ddeff8a12331552dea194b2655abd7a82dfde509912195d7b9366468949db5e1d3f2c1a25b26ec511682074f0436b3dd515a9a480b625563a54211a010b1e04e5b557ebb2048f1ecfce0c5366a7e4e0c5b5772e05c03d6ae989c27d085dee3f2fe98ae7015000c7e07b623611b1aecd1a6751d66f59e9014ed94f59e867d577c183ccf559bf4a260c182a043786536a9cd23e8408a8b28333edd295e7525a14642a26fd0479f4a51b4d6aa721515b21139f462016d61f585e6c52194e46067ee0869ee848a586aad4c12c0617384c5946757192e20ab9e897ffd8cd656a5f1dfd403f9c6e6b889f001d77096063b079fefdc8c2b46d069ca84e6b9973e7ef5a83000e02bdf483eb6708549846fb0eeb03df5298d42790da58001365c2e53e9b396d15027f68fff6d12bc99b0f28ef161dc217fd895fdf0b6ebed819988bd249e8305b85faef8228062de1fa0411da62144e20d71c3d7998b32fc39d3e0135cd58f1e87178af96e9cdb8a19d6ddf5737af2c7410d5eae8e7effcdbd9fc70ef8d5157c5b03fd3c2a1f071136d92b9eefdb7041b8efc8eb462e9cc29b5190086f39b0af92897818fb835023e50bac8281cf57d1e3bd95063706b48b31adfd88466fdb38cc3cae1839665132a2f2f348cfc2e4084fdb4597f783b1883ee9421714d41fa87671f1d28a3484be0f33724a3062df555bed4d190e422e3a11b8102d3122d86f1fedd5a0648a55367821bc0f3a0b9439a6582df1c1be8511387eea4341c8a00d26f4dc3a3eb45d2c7c62332063399d25ada06abad85550be31c222e1bd31f0f32a2b77d89f6f17109a6969f6428964b9d05a85eca8a31b919c067c9119fb65c1a7f63b340cf6fd83409be3293e578566bceb020fc924303bb5d039d9de8158e91ee988b4ee087ae50d9e1101dd4079acd1d6518c905548fd3da3fd14716054ea0d79f2d3d8f039c66fd48648a5c0ac0cada106fbc4b2c08681f638e97914e444e22c0c29546aa497c5d3b5460e44b6f6bedf94c5acc93148314b7fb16c2b817a3b74372dc6c435e9de1010829d69050b73e68d82df1515b2ba183414b0f0b70a77e70649c689782ce71e4a96c99a20bb6b5a53bbc202d8668ae0e87bee10ef663608fc15ca46e5e19f52a5fb2954947703bf79c8fc2f13d4223a1f6f8a18a52de43e7b0a5878f9985551c5182324caceeb6a8232f406327c2e884b680b5482b2011c15afe79c4dc1a7902a864d875e33710fefa23004cedefe5ffeede870d2a32b065e7efe2d3cfe149248be0ef8a94532f4246f36c7337d2035ac69b7da4f71b0a1b7e002b8519e1aec9237fdf54674bfdbb3228eba2ac7128dc673e01d439e3052b47babaa263238e3b98c8109b022660b3e349e49ff4d63dcef94f7a6498938bdc6ba4f8f254add3c01144eb2710ec427084dec133b8092b78a357501dbe32837812474d3c958963a1b679d6bf37a58a3b3b6fe926a010d8228eddeac750c8d4456329224acdbf2826b0f13a2d1f5a205c3085c44053f52e14e269b22af95e688c87d4dde2a5550896273480377113ec1b8da7ba497ac01495c6830f0d5ffa2694a6d0e8cdc555ed3b42c80ea6d5d6d5c0775e3308bc7771ef62b469392aa7f6a7e6a3a9d3d4c6be5b2a374e41f2adc69218319746c2242f68df832977036ac00b72d78abb7bb1633f0709a6d2719fa4da98a84ecb33ce35496579b58d924d6c0970f4f14f611dc32f00c4801ff9b458e11f4bc05fb87e6bda1b1c76437e57e3e9098048552f12c8723df243f233f5caecd4a356caf93bb9622af7d4636f900bf36405f6968c995952e71a5711c769e246df3776d39d0d072bba8f38b30f01cd6faa0a63da21b85e1526c524445c198936698f89444dfc3d7bf26e08fd03b112a40218f7e99579c004217a12559a0ba5039a34f8e3b011439bfa1bae07f6a8c0db95b61a8a91e4656701c1890a2b491ff699ad2a796f5301d3fb1e909a8eefc05c8a6c3487bd003686ed22f12db4dbe0578f8286cd31cb606a1d00187d738dfb6f0ac2ada6c0d51ba80e26b284e0c7cf6ea33c76a99f7f46aa8748ac7a4e8a585c3d41edb0436bfd178c5434d85417d382fe6260d360799cd9627eb657c7efbe6a4a705c6cedcbc2198e35dff0bbd3d6dcc77cae141dc14b40d52a9ddd85c317e25ad763a467fc54f73c4f1c96bb01bfc52713c7347e5d3a2709d5c9d4310e4a0c94ff681e580699f9bf2d5190fcab768346ae13fb2a5750d52506a20472d93f30216fd5a369f27b663f54e8a727d8e25e4bd5fa31cab7779452469034f12bde9628af10fb42c7e188e34e47a3e491eda05e10e49d058396aab81cfb2e560c0f86d24883ee8a8db2a5d4a1d84cdadd7e8fa9e8390884c594607e104bb84884ba4747c19444e94cd8063ad8016ab2c47e7551e4613aef845bfecdaae89b6f9cc722aea2adc4090d3af33c782cc4144ed398818dc5fbedc9d2cccc733a9f745b1e5f2f7435388fd7c0b3020bc023a68466415f69cb13269be112a4f2aa8bffcaa746f4be946626b35290b519254f136d1fb71302dc49430270177caf9e29b7ef4b1e2208311674a8d8d07d28c2100111e644c6e06166ec0667247d337f3f45d4f031e4db761221be3abc81c2012e1979a42ea089c033c8b0ae81ce05b69650817fc560bdca21d6fd609cea6e497002ac3fbec887637580072e7699aea9f681fce123be39950a3b6e33b8dfb5039f64b2a13c6762b0f7bb13cd4b03b4c226804ffc9327d44096f7189957891d9583e994b0f0a4a0118022dd744736a168f0f482ba5cc318318db3047bc3103068e437595621a8cbedd75d6c0cb35afc021a869b02c8b98cd1b71638c2429b76e48af6097a199a6aabc513c97bd7964efa6ddda4bb1d32b888dbc9be541d5276713dcfad041ea306b512ecfaabfb131eb7b1a2a4cfa45525bfc3739e1b9c5eb878c4694cdb79eb26728692098267f9f4a1ae7ca425a54b5adc35bddefe06e7c45fe86eeee97299524ae8aafdea626f58202b14aba5683bdf49fa4e88e4a514239071839b1550d613a502dfdfca369dd39cf211c137344e3d6cdad0a3b7bf0e5c7127525c475dc9efeb9ad6b60929acec7dc91ceec353abfbaf9ce8385e9dfdf76cd1833867df9b7084793a8a9184c42c2b79dd3b310b7ca1790a404ec187087ce839be385e1f731ed967b164498f0c1a0fcafbaf69a5e6b831ea80edc8c457744d25aa6312657a80502ce34b1991ad3e8f831f53546813c74105501d5b9e1367025eefc16cf9d71e528f7a47e9d4cf20146ef02dd89e2b56102356e7625b64db71ac365a5422b38048591b60a19e984907511748de8d55ed060c3d52c544715a01d62737b329362f9852709f2a383340cef53ba94f7fba158b87ab676ca1636b1aa6695f6f5687b2ac42210b6aeac68dd322055a11ba8255075d492d3fba619724e2a5da72f1cf91eaf1d6ac4afb7ab97c9f1c620e87d436e256beac27d69464875382b1a2423555bc27368bb2b5764b33362ac92c2dd83f843ab2ec0a3f245cacc1a9ebe991e28589abe9af8b5ee3cb5fadd49755f6b8f856d1cff6d23b3807f9f4c1902e25fea9b8469821bb3fe8c167cdc4d5702899e9bee3bad16513f8ecd7b373a95947b049b3c0ebe72ca0aeb6b55ea28b650ca69b25371e85ad0f8d93afc7673c513f20eee1e1890bc4c95c32b02815bf1cea0495f496a11b90761f84e7f944540055771faa701b946d011bbbc0f2c67b7c0ade5f91c8eb9af892d548e90fb2f64dd1dd657637488b0e9113db4d865dc66fb35a826695a50acca9d8661bd15b2c20fa7947adfcb9f78fc16b19bfaa81a9dd2ea085d9c57773f4045066e709e4fd6119744db78815e0d7d94cfd7f27da2aacc4d9f0541f08de57eb64d1b47df872f876f5fffda3054fd021dd10f3c51154c5ba2d4c3e6c0152dfa53c2de9f63d91ce5925e6e514314a61e147d9844bce2c105bc31fff7409d8737c0105f03c5b64c90a2c89d8a540dc7260b1e19a83b8bc75eec4f4ffffc977fbb6dbde3017fbf3d2d031703f1cdb0aece744ae9e33780bddba5750a5d5e937609cf142114fc544d2f55c248042a9deb5be27caf624b6212e08a5bd5bbd102088766cb8fbab6062afbfd62c05df535fb62d83bd0c1e19075220d6c28981e63b5c8c73c956f575525377c71034bb8095d77c800d47e949c42f4a11e895e7158fc4252ffb8af3ab1da4645759779dd98901f245440e4cef60afce7eb5e8b84224a98bc8d9ff6eabcc8cd0ac8e354f05421ad8fbe9cb10b3e4b9f346b3eabb1703f10465e81e2d1c67f201f137d597adc80b76c985e5fd3c573403916a03ba3c3386d92eb24dfaa7f4bd404cddc13e7924bd14d89fc4db33c10a4486619c7b59bc4e524cbef59bf47dd7d5e507600c105d17fa50bfd0723f2a22ff4e201bc815a733b6e7947fd9aa092708e53d1ac81b7b0070586e718a099b647b102fea6718fb1c4f26bd517c71a195217407573c418762bd18320fea381bb802f5176f200bc0f06332c0d54cf34c0967b9ee7f2e2b88242ab996125b75b306da255f14bd96ff993b33257211d5126b23dd79fa6781862eff631fe2a5686a364cc78f400460bffe1f50758f92c2fba39e073131afea8a68843d57e790b84830a0042f5abf12080756b137969860109a1d609c8acd0e9aba0070c589e40e55dc1e03c8ccb453e29c2a7ff3eeeb575836eb10446e8b96c10cbd23f13168119a230eede1fdaccc56a5e1e231ff5350db604f3eb146af2a0446017f6445e56a1eebb7e903556e256b0ac4017a3198f3a2019013697802716d5015aca52f23c0e91e6220b53cc4052ab31b0555ec81e7b4fff7b6f66e4c14031241d13c55eabc04a257b97f1a741499892e154b98d7d51a44cc4fe08e55bace74cc17b22102067661dedde95747fbc372445ae39d6264dab65708ad42e40cd75f00a58ef9324547413fb47c5b0562ad57a7fca563ea3dfe3fdf07e7f1c3b225b923a458474321802cc165bf8f76f061219d22195337078dc6ae741502b853c06c7e3b9972fe442809ad193b59614ee6b66ff4c8d3106b90320a78c0df8c97b15e5993d7e2285347c04bf7762290244400659b394c3f110e6d3c3b6fef0728ff79fcd39dff8cf9e638e328fa53c91983e6c63ff4278aa00f5e8be4aa9af0abb2a3ae247031f1dc0b5bbdd34f52d5d5ac4fdc0782cabac19ced419bfa4811cbd3c6b8aedae01ea4c1102121fb897c01c725ed1c6a9f971bbb02a58ae561302e69c962986274dcfa0d3f563a885e8545da4f42a6340ce8577785fed6f54d167c7c94f40b9155f386f9d0a5457e3bba48efb523cc697b771cd55e95aab2758b5e150fb62eedeb2bef8cac566a6387e1b30d3fd7b690530a13df76b22ca33f567b3a22f02a009f4cddceb9b1d3c1aac32d3dd5a88d31fc6ae39cb39c845014417df6b5e92652d71dfac8e0fda51f0c285f865fdc79d4de5f3514fe9ddb415d12094eb0ea4b69fc67eb810a840b0615d8f0f0c5bca10261b0b15040fb59ff8092ca4cfb3bc0cf77f25b011d8c2bfd2d9a8983ef902e42ed27fe575fff2511e78965f77e24ae0cae86f051035e2d8cbc37d248c5a0471dea8ac53145f168fff8bf855722ed3da60beb5278a2423a3b2a7872463033151ac0a2ade7d81949521dfbd075cddd9427f5e82a7ee47f7a93df2212851693c0c1d7375f8002bef191bd07ee58683ddc17d447206caf5f141b4300590e61066f9a97118204a92a87443fa98808dc553cfc0fcedb49ed28305bbed9f0e8f7d54a2e69f7bf7cb7a334f30daa468e0f6ddd601046041d8523f8dcb9747e1bc2487a04b3b2beef137220278ed1cff1ebcde7ca3e7642f15f9892259a9aacb0a8a627a4de0b2665a5df72672ae8cc3957bd81c301283ecc63cf26bfcb1322ae9339789753c7a0e65531533c49b5e46f3a84d3d2c122a0b6790fdd30b2a7871d6a47966479b1d37b0bb2ea2d5302c09a7e6b067fe62d0fb789a2de02b91e84061519a993b790682bafa860c2b09507c20aba4252d81133d87bce52bc473fc0707bf7d8ad772b06ff295cdc83c93662efc6b9aed40096b52037dc61e7c3d3e46386284b39204b56fd611687f904af792a9aaf738cc4843d98a514320a97a297e71df62bbf1ab8ff2f401e88abcac7f37a6ee6b8028da27246aebdeead2a74820528a7a0c7cc3aaa9dacbb0821844579e82aa4a6bfc4b9fd343820bc59e4114cc49084d1daa099ff4e8e362fe498f2b27bb632654acf91856a2c86c5942d419e2d3bd5e77ffd9ca54acfd7247b7096473bfad81c2b18f2b3ee733531e96dcb204612e2093f4b0d459955e6106e72f9df30dfddf4eb05a42fcaf37627dd0c787919fdf260a1f3b286440aab1a4608e223634b8b1411006ea0069690cffa721052aee54f142d5b531151d56e6b8a991abadb2728a425701aafa843cd52c7085b520bb03f4c6becba8dcb9d762ac28c6a4ea05cfdceb0bd6e03bae273d8cc3420223a480b30e40eaea3b74c0c80774b9884bbd152b8394e3345435acb88925f29694393fbe91f2af6fb1fc978952f3d6c06336d6f8a488d301c4c951d8ba0f23cd02c7b569fa4a65b3c0afc029075cab07c101a9b6d65e12f31dc7ab1097e5322ffffe76679fceca50f81cdf29ace5a2a8d5bbf1f8919b2f62bfbf1ce29b5eca39dc4be71a0ae629c1b8b248fdac455a3e21b434305eb694fb3b1e2bd13cc24865281eac03c4272070930e92279de24e42358904f09646c00710735c7f04b6295c840529b744183b0807804f39ea52db2f71a8d8bbf0a24d10c04d232e8bb1096a408de497032fc5d296c5d4a729fd9d8066a223f4d68f98c2db1a24622a3955291e27614599d47d7ac13dd6f1d56901cf94f37b2db0354f77b148b4dc78b599135d40242570acbe6b0766aa9c652bb4878d2b42d92659bdc9f38768dfefbc41a38e96a1c9102f051dd9bed429519c0222afa81f89915380140224c4ff07c3eb7432696ea300c1ee2dc8c4f80b3350973b8cf875b199b912e07dcf3dbc4952f2efe956ff45bb1bd5f555176ac482efc02c959ac9e3a80102d9b6d5579a3cfff48103ddb813b783591eff04c0d7b8a039906a1d908234b1bc5a6dd5971b5b116cd2226c3dbf8e9ef405373b8ed75d385fe17aef7e2fd841cbdcd34e60a21c3dc85db591048b98c513429e1a1925e90eafaa388ec74efb37adeba7be68e108dba38e4dda811a6eac4341843f1455d4a99555238a20622619df015ba4043a99816ade4ba757ee88ab10ac8a08f4e9a88fcd7cec5ffe0be15edbb85f7dc72156b59ad84f95ed6a7f47e7ce20063f53ed27a48bc37ed4aea58d206b33ca2627b8eec006ca14a630ab195530e6c558271b07b6fc797538bceb1b49b47907a5d048a356e43ba236b3a485c56f3ea4d3c5aab671595ec18ec93a8fb40e8fc4ca9d8e69ebfb14dd0375f413d4f3a85336d224aa702ce3e26b561c50fbe3e86008f1e2a8eba6060390fa0259e048a42ef5bf016a1fe1b95642e5f9158dcf2397e57ffdf6d28f5fe463a257be93f8c2b694eed96bed124faba9eb6933f64ac1aae49a28ca2d11b2cdf0217cb85c6e8478a90415266429074104f8d532a1c133378ad30b9977d78f4ecad9e9eda61459e386813d2021b070c4e870d5a82ced08bc5cad0eeb3f4b45d5584e17a50da4b395c1d8b9ff82233c95d8f5e2fb0408b2a7be9abb45efd786f02cf09ea4ff8a31fdff8d340b220b9b323afa75b1a3beb198452e89200626c33dbd63d733f82f558a741103d96dc44d2892e11642a86985fc64db01101e937b0c9e0a69f8841e8ed9e406d1f0e207a2f7756c3d447eb3b042b222bb7ca5b81efb2376bf592fd25e5ab3c106c81b203d1d66de532d8307c119a18800fc17ff4f68021b6fdc67d5448b57f21af575b88c08cbca107471e028dfa78d89e4f1f36cf19e7ac408a8b1c1fa64fc96df7e3b105838b1ddafb7d7680358a5aeedc01ef8267d1774547ed257165f52f30cb1225a7a12281335c157ff232962f86d1eec81550263f94666c1846dab97d7f3ab08daed0c8f69ad2adc6ecd9e47eee94ae6892be302bb64dd09da6ede2d8e3ac849023f7c6a498c50ff27512bc70af8f0979009835643266e15b9a86ba6ae38957d70dfe64b2b49d01ac96c5652d5029c7a068c67e12901867fb298d875b073af10974ccea4877c24c9c56da28dc59c9af87d12f535b59ca29245cea92d3d7251acf604ba090689db869bd394da552d98bd643bdfb6a14e6f07f3a8523f9dcb39ad1da62ceaf0f940cbcd3cb1cb1c4c02135c757c06549d384b4cb4681f59d4c38b6e9f9bbd0f410123ca176dc2837e6394a63e5e87581f9ad6a1716f6f0a259bd2796f9b019a07a90922e23d73231b39dc02150bcc142c0334927dbc8127440f2cbe848f5b29a384f6582bb53f53c8f143d097e84721790ddfb027f40829a6b9c4be7cfd2c46ab4175ea624999cdfe26569225888af85d17425b0e8a6699c40864e9b768f779954af25a148f14da31459ee74c60fa116ebc1723a0042ee0329777d0d2673f2ae82e1617b0da2300e8db87107b1636f51468987a7ad5b3a568d368044c5c75e31a573ba3d5df66faab54a9de4ffca42be4a970fffd93b741dd48cfe483cd3e2aa242edaee1f332ffff5d617129a8d42e660b2b04a6b28c5e165419f2274dfa7a269da66963ba29b93b3268a9968f49650eea112914b6b5528aa1d0cd95433d5a1db3f093d988bd8f158009c82534667845e2ddedc614c4b7d0ae8ed75c317932de22469ec2036119e4d2df5d442cddc0b161ebc319512cf65ed69e9ffabd209d0e6532eabbaea6c23f9753e971ccf1e6c803c539acf070b6abb69a97ef3ad60114f9201804ef11109c39f1fd3cb95542f024e4c1ef7712413ddb0d5fa83f0c07886aa8a75c59129d815753f913667a7dd061e4ec5f59945e8b906147b43e3508ef16370910513dc1656bd47d9458c3ffdf3720298b1c79472b8330e0a1bcd39daf9845bdcf7bf514ded40deb1e04e43173113109e1343393842fe6caef3f8a2e506d7f55f83dcb10444c6ad23eff3dcb428c91fe004545dc3c030d670b3aab4358122e32192b423c4c2175c365ac4315b405bd7646a4328999891f356432c9754d02ed02a0a8dd014cffa92f209096b94e193e2342f59c14434e96c6b8bc672ca5dc36283d5b0e07cd338f760e50ab1e77337e55839db514cfa00e8b473bf6d1d8fa84133d9657a8436993487d40e2cdd5e108bd67214ff37549e103be461b2d7cda7164200f3c6b561e5f170bf5f03fd0ae679b8c04bf48fa98a8c07c4f2667f818689b930a4ed96bae4d5218f435fcfdf815a060dc757db618d0320fdbbb49e120e419f53be17b0aa5e89a42a0368dc46a8d4c640d151a4e46f1e8f7504c2bbe807e7fc508a6b899a1ab5017ae745aba5258f0241b10a7199f8845b1615b85e6b3922d90f5012abf0e1003e66361fc565be34c1f8afa9caeaefdd8cc635bf10036c9b3d7858349e167b1265d53a1db0ef3c6b0c4d1357373e1ed32b6fadff571867fa3073e9f7e872b0947db13968f6aa66dbea28243b41fe4b0c3ef8c69fbe12f3e6bae84c86136e482e8fe17c271efd062d63712b7e6f903f30d049c5c7ca59d807e4bfca07a7700a87a24d4b83b152e2097f1070474a5dc2e8e64af5a10555de06b5e0a9a32ae2bf48beddeea43610c41547ed3bbf59cd9cdc8ae39d52f66ecc8b36333181262b2f18eb79acb1359e72fcc2f0d40d244994b3c3fc0405250d6c3d6da1acca22b322a03209ced33766b464f802825b333773159a7d73e01b9884c5641060a5a7e260889a759c31c3cf54f6f2098fce0f0001ac154e320b5f79ddca2369963b3c20b0772ca55ef461411859b7ee41903f0d061d3f5789af79163ff5b09596b369d5dc15ef815c439924ca354f9ae1c94bc54a131d81c0f4f2d972ee157ba836b669aa0bebf2de47f4e13034c3f4b6a0bc8f9434b9b21e0151293d5c5a0214ecac44e30128de2b27f9de13fc1ae30a3e18d5ae281ad3ecff1e6d69e8851421fcd2ce4f9eaf2f8c0c31843a355c5123cbeafe5e9848cd7315e20fbe39a098198fb070b58b87cb491e223b6f8892254a6eb7726d2c4c86f86c237604f8b27542cccf90de70b89caa84566c789cc347c74f0998a38b2de8c62b6c0a03ccc495e5dcb69893f34b88f667557d1e1bf79ee29767dac75ef3da247b4233835edddf49e6edee9abf477977eea5d829aa3614e36e5a9fa34ca64359842f594b55053bb813fdfcbb7ab4567342d0e361f3899011fb6950fdfe4f0dae6dbae4245a4491788b6d28c0cd9a07338a5e088e9ef7fbb6671c539e1bf61f6b5f6c3cd615a3c9d275c5dc6f5f0273ffefd5ae7753893b18d9fb114e4ca161d881cbc9292d29cc0ef98e7f92d9f3841f99bf3ce5b946397f7a8ff2d4395abb3cfc61f4e54bdf8074414f79efe27621daafa31ca07836dd35725f5ffa892815e1f7b623d116cbce4c7290314f239232795a0ab57039611081e8f3be86e514570d9b50bfb637f79eddb7da1179434fa044c17b6f1da4d0b8aa04d47841f424690910b9315c556bd97036b38037ebb551830d7eb26e608abef9f089f6f35f62331d7d79e08b192e654d17a6e64fc3cd2e7e659be62c16970bb6d19a9f64cdd69e900a16330b2a472cbc8338ac8a729e1f7df25b731f6d008629d290da5be78790ace11a94a332c11505a2f338b0a1300dc7db45c20f0ecc169918f211a2557df2b7270d6a1dd6a1076f9b5ef389f78cdea549e239c4a003a550ce48abffbec0adfa07751c3fc0f1ec43970145dc1db97c5f64b84105ccae1a941a1b103bca59a7bda7dc14d298b9abcabd659773babfcd3d5351439c3ad35cae24f1a71e224fca482fc9b99d05ff2c4936114f1477a7bb863f35a54f917d55e61555da6f6eaafde2c8c5736ab0cd570b298dd788fc782d844fead1e779b1ec8315cc10f8557227d49a57aaff412a1457bf629597f03a0a7dacfa2d2c9c7909cf4be0b27f80b03267cc07c6255f1f4b741f17f308fcf63cba7ded23e59fdc9410e01826cd976c05e0865d2fa4b2b2e4ab733457a5c7b3aa83eb4919dc2de3768ffcfcd5aa41ac888af2e24e44e3edc744e0422b34fa793c201e9879d7ec949594c51527dd267aa3ac351d89cd9ad8dc8790c8d67e3c50dad83d61aa9f84f9da6666ea8530efdd3e8d7a9649067e7a0cbbab4ec04b36416cf4712d14fc9e1a2d4f0504556944de4176e7d6f7b838db3d2a585c51638f53dabce1831fb5e2fd7795cbe90051cc8394afa464f9ab7003581ac07bf18df08f0c78b6eb3394f7ac9e81df23efb030d62080dac8b9a7cdfb46d40b32089301fbeb7017edb85f862f8c5b693a894e18dfcb31b18b9d74f7caeda0600afe3b69a25dec2d1216df368c276b93b435f22aa57e0950340fd9977837c5e78a3b4ed1894b331fe1b5dcb0cd59f8831b5d6611302251e04b76a0550e0b8dca3a2793e0ba9e8e16e3fe1e9bfa094c61f6687073889d5288593a8fd893503e2ea22bd43f3c3c453a9e576ca0191fad56cebed9f9b6d95171e5c26fc90ff0213d4badd795170fa0b29c298f673482648a2ac7684ac1bc99c2777807cf8ad27e1fbc17658b53fee6a765dd5097521cb92492eae70fb13071a497c321930dde9dfc7dcf46c9f9f061407fd975d87cd4f34c8e921cef8e1c203fce0b83bc9ffcc5fb173f42f611cf57a67487c6d4b9925c2ca724d1936167efbaa3b9f6f34914404411cd21baa1821100cc4e0d30113e3ae96409cca232fb263e9f3342e0120e5400f3e3aabfb3f1d7770d9510978cc1d6ae4ea9d6c507bf0df248e22f2a02d24a5746e8a6aa4e04f133c1c698af330178a1eb6cb6a4ea9bebff292e857a21496a709044de267ba3a65b6f486d200de768eac6bb36e6e2770a8cc7800b777859fb745c5e17d941b63f18a0835793225bedb264fc1c33f73bb0c2ac3e8aca0eeb478a2fa01c6ba8250491dbdf1eb07b4650214f99313532d026c95fd2cb1aebe894db9371b485b8d83defa8c4891e1f8eda5e0ef83d919a1cb4c868a2931018362b8f0f39a6cf7ab732598f9a6286161dd092298308f23808a1e75018ad549cbf54cd2c61bbf0f5ab2bf819c96f8f69d97de428a059fe127c37509d9ae08d7f6956bd704fbb91319a6ff3cdb979e21fac287d94b9f95d3361bc28da92f363ca1e7b88656c6e59376e477334d24726407d1884f535b1b8a09d799a8c67af8084c5095693209bf10e0dfba0d47da304d5339622d17c47b7621ab6cb3d81dc89b546494e81d40c00be61d3a138205324e5b8ea7fb2f6830182bebbe67448422965898399b7ee872f5050169fe525202d78f35cc21f0b2f3f0873cf11ba24a8069d75ff5ebdd8d526cbc40ec165f2d2c896cc3414a1231118fa203b74967dd7c864f404c61cf8be8c37a401303ef1319c482bb99cbfa6f33562ad483990bb9818c3eedbf95bb809099dd83813fb88045295f8348301fc9b3d47013b853046b19ec149cd1e027f80470447fb9321211591861bedf0ef8dd1d9b2065f83ff86ea0166ee205e99b4e9eb74db92d83a232a02227d2c0c12c15fb1aaa3fb5884e40de9bac51ce0a9c10da0f57b4409cef60c4c710439fef1010c6c37c0562f47c6e000c6b60bcdb90db40c900f5a4f630283187b995bef14b39fb36146b92ed1952deb91aa334c5200a5d74c801cd183ae570e4925dc070441e12d311b6c7da9baba552387de86fb02aaaa32b4d2b8b5644fd5e28e026d48119a83ae28b745579b4fe4853752a23c7b892d4894c42b828c34164ebe164a688d915ce155e2ae64a2b640bea0d7c99dd30b0798083a53708cce78969b5fc5ed1b9061d08b34df5736b612d6acb723a772f8e02af97b5709cde5a4c10f27075e255d3a85b0f601b8be1602d64238d7e1c11862044dd060d5b74141d701b4384312c18e08ad713b10a49fb7c549a40ed426333330ee81965bb3a9f8e158507e254a84055f6beab6e64f19daabab41ef060a10fbb6c2d6202327e771e5fe41048a356e4894d1ac99c2274c12914f58a301d678639cb31627b57cc153eedacff0fd3b47ffafc6fe0d2c94ff087e1d30514df03312eca88bd29a1b004701d4446b03c4d6d2b634273aadfefc647afd132270c209b2ae887b4a596a6cf428d4e69c2638e467b3027047cccd09cd8dd7473ef4b2c2e8e83d2fb67ad3cc036ac2ffacedff3969ad18215d1269efebc09315cc612a255ea4aeef3f85bde91bd086d5c2e0819d7ead5e82a3063b75671a19c5f43d91fbbce9c3030d03908ce56009b0078826d84ebabcda4230a965e9a3519fe0124f0ca9c064b2477cb37b082431daa36c57b182dc1a7361181c86186424ebb567cc20ce2f79451676907f2d24e79abd157af2c21b60932947fd9f9d6478f09ec56fffd341ea04a17b8e5ffc6714377d09f961b5807683c244b2791fac37f7c1b3a2705ffb9f37111215e51cf59efa0cd23ac70412448b5397a5dc4742474846b9cd3d1a6781268dc48dd736d66f2b92f8a7eb57dab2f204c93c8fbd30922b565f562cae8c76193e175efef1136d123601a69754dea902ff61e15c287efee8192ea606c07267574b95f122f6b282f62177a191a6280f0169e7fb09313275c6b6ad2592fb223d29ddc6ac0becbe95217be1ffa2f3c0ce386de3f25f7f56de0e55653b9a04a3ded71c31f8807c3c8dd96bc82892e4acccef30de2d26bbf1200920dc51e486fd34a92f5e3e4a4e36546719b3842920f6f36edd6016268c0c25fc3d9ccd3a273926e63fd5e43109b3d113ae2a7b2f50a629fc9aef14269baed432d42d19628f5e9bd8731f54fd56bcec2452b5756b1bc258e28f158ff08fdf15f20e159b2467747dc5f4c3f476dc588de42cdddaa62a546769e659ef4a11a7d08312debd4a5784b3f6e9492e64448f9c99652912a824633ed6c4439dfdc90fed2e090fe69a069425b37b3a698e3569018c24228539b2f8c574535cffd15e1e553b1b317dde1dafbb44d21c0cbd58efa405924e9b217c1ae48abb2b7e8d79ddeef26fcbecdc43da5df0157a81b955286e4bd737bd2729d1835f243983fbc152a19a2e659a5d211ff3006dd92f4ad31d45a81a65511561258a3cb50c74e1df87577d7f88ef285f8565bc01c37e387ad41362835fc1b1ce1fe169962eba087a84f6e18bba5307a4149b6cfabfd64af357bec23cad73c416c6702ef027be383b4f670f7a862ec098d57d587f569f49e6ae2f106ad7d115e12320d3eb7de738c9f2934f7371e81ce4cff4c8b90e41fefadf4f943865416ed83cd79faeba9cd2ce7561e99e05e9e3300be603cf72242ed8f40596cce02d95a21b7edb626547ccefdeb82424c99add238f3d52ea07b1a428f4385d4ed0fc53e8c8fed02e074fefd63782492d4561d16665dffd32574e2791e8d232e7bb167052493dc33b271c032b88a6a0e002a789a195b64ccee9647ebbd7ba5dbe2be3b487a825ffb04d16d095d70c716687d5cb7b25a886e7455c724fc9d826fda7cbe730ed9dcbb602a51dbd2e9c04e75c51609c1f9ff5a4f49ccbf5c714d4c9b836d0f41e8c6e75cc31b44b943ea08a0a8510ad8a82df2e7d8e5154d756b14de48c387c45dc311436225be612da8f7718d7a2566f398dac6899cb15048603aeb635e77069745cbcc5e0db36ae5817d70eb1e03ed5ab47473e2403df538c1317b399a577933c379403d3fce472a081d2757a900ec4c255278599bf5bce5029ae65203a39ca1c09c577638598669a158fd49a7b6d4565fe73c85fc8317cbb8d9b53336d5f16fc1c76a9f940f9912f1a37b37969045e7c8b548cdee60865b38607053807917fc4b6d022fbf3b0fb45daf19a7f227b19f044f15b7ee08892215d1a0499d1760e5c20fb69d36765acc59be612146d797ea77173bca7805a0aee5bfbd7bc90b7caaca21e06e764bfad98a63da2a013a6948a5a0138c18c26d500c5d3060b0ffbbc9d836182a1b26605a4431fd38bddab638147c45634cd93fc41e6c91aec15ebea150ded64681803bcd3b9b42c3d9030f3757fe39e680b4a869805069ac9692f5efd86ea34a35f3edb0c5223351ef7dc4d4c4b8798c60ef37bec69b10e09d46e203e37807bbc4fbe683654957697d95878f0f3d8cdb49d35e4275bf3fe141e5036be68d5bf1ab02c6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa6761148b254a2ff202b620c2ec2c5e623bf61f05e483252fef09db752b6ea0842069636445e570fe73a689dc9a2e3931b3e26519f56924214c55d10a07055ecad0c9ead4e2489699761f954f7ecb83f196c9f88738fb5ca72f4efd3c4e9a5e8661cad362643c4accf36b6ca202cbe5aacef4ffd7130376c8803d889268f64bbfbab243973389349ed2d0355d8df5066542aba392f047198d276a9994bde1cb7ec3c964f9b7f7fb17fb97190986128f2ada360c3f3691eefc0c1d59cbb52386ca64595e12594d483f57073f2d57ea27ff7edc61664da79d20189eefbeb98326ab85a8596a7f55c21fcc6acf51674577ee16e6cb8f9d51cdfe313484f62fca50290eff7c8793d512be4306f3fd1eeb26fe8a9c71438e5926a0402940f981c0ae4de7a6eff3fb96df24a525d1bae4a4dd37c2467c098886520d2ec34a51152de81ef9e5db362160d25ad80d910f213744a2a72c136af39ff64de14bcb8555d9a6a42a0468d66bfb9367c6065c853d6d02461f965fed376dbd694308ea1ea88c8fe8634abd5d432ec953555a5aa3a00ec02c13cb871abcb84c683b44d0a3750d4bf18d01035310c21c276f4fb2f1b3e2255a6c14b479ea474e52b045a49c262583c88e6f613e398036eafb2f8df7dcb0dada10b90e932ae4692f8c558f92229cdf7350dc00a8282dbca4e140123e844286b4e902bcefe2554508b6bab90cd13a06fcb99207184494595d09cb6a4d145ed2eede36e7157c638be416bc49929bc6a16ab3d89f17f57cb31e5b17bcacf2cd6692d69fb68e5ed6e3cc94a568ace80a57c625f5f02ca3ac72eebf6e31e48856e9a7bb8352e1f276f4c718bb3de320ccd117f63221dfb6ed3fd61d16f17c3dc30436742be2969e0b67dd8a48f1beabd5b66510d75bb89607c2dd5d5823fc78db5e46e9df8f36cc5ce316d292abc6f1edafb95a2cc540acc2a20b677cefeca365a0df02e78148e332117bd8e294815bdb641abc7888fe5ee6876823ca7ed5252a7109a78adf544b559913857fd4794f697c901e05cb7a153a1bfd798af83f66f27acdc011d1e26b8d22e7bfb39236365da0236819b73d3a8703d1520385b0ce84623235c4817bada254fd6fc4f63e798077dc82fd74ce3395eaec947e4bb2c5aad241eeeb14a6785bd95f7efb291b7e9aaac255f929b56a2c7657294375ccb32a7201d3ceb5ec35815615d2a05355af73e0ddc754fe7b45144f19f79a298700cde97acdb58ad44adc762555fb9b7273d2c236c1581ca72e141e3ae8cb8f69145be0b4c2e7bbe62034de99ed532afc3181f7d42c4babc18cf68bc3e31dd1fc579cfeb89cad71aa1f51397884f2287b534628c0ee76d252c7803dbbcfda14c83258ec8d414fd4a9affb2dcb011ebc7540eafd00f121bae1477bdd2a964883540b56513b9b150b6a39f962994c200e7460351d9e1b948bf673ae12191faf43284b5fd6cb90463f75231482ea4d4047ff1bee31a156166c19b5e3858e52597fcc5b3b23440a2c9753d71432c7ecc58f9fd9dfe01289f085d374e0de94178d5dc9a1b2dfaef00d3c8bbbc11c3611f90dda02ced3f89c6bffab196ec430569205a5878bb2112a3255a539e2e842a422ea3bfe84b25b76cd022a0a55df6cf7b1a0eb749046769fe30b2ab8413ef08d894d4735c92444015eb5d6b05dd84fe2325620d08740e4396886a1a0a4c44ab4765f881064d1b92468413a734e57e1005d4ece02394b64df08ed9258d4255701304885f51f62c5c731cedbbcef032b3779b17c746e0dfd790c68854a99071f5d012fc64dc07f6dd2028343f109853470d0a6b38dee2eb7f0bc2103ddba13abae2f3cd48110cfbb2e2388f97c64840594a856fab580579a2a603d937901f002 +Output = 9b7f940c3d8399eca7f0728a3e5eb0b3 + +Len = 102744 +Msg = a2c760ebf4cd94bc7d82c769e53913723e102c8ff117f0f2f8b540cc4e470f12a409b881563a95e09d7bcd8506796d1a23cbbba1801ec7b6d88f42148958935b46af28110ceb0ae657e9b53c95ae26e6db4d3530d70b252006c27afc26830a0cef7f57a1fe281c57129326967a21655fce5e4345de2934b9e8168f8b0e109cae0643ee3c1439f3b93542c99c9d1a530b64c68de77dbf1c08e7522aca274770c8f5c194e73665b6972abe4655e7e01874064cba1e9c1405966c40f2bf5a6fafe223c2f2ac4cf58e7658cf44ca3ebddb221aba72f2237116e9dda6907490d28085f80db0923e31a2e0273d6b018cf7c49c0ad65f6cfa1e778ba34dabf1afb60c37dc6c75a1f4611b5cffcf6404b7d7fd6a3c6927930963510427fdec3ca0647b8337a5e9e256cd2073484ed7dba8a5ab141a3a72703988ccdad07dfa5f4c24f4ee7181b55c4dbddaab6a836b8c48a9f9220a13e90970d40f9705977f629a3e9f02f2c88118bf78708fcd33c9217e2b0d1d76ba3368979043c23011204b71f9a5462342f41c96470ba4da2999a131720f8dc5f8f99597058fe4b8b48724bb9e2e426ab6b772b872d374f72c82154bc728f85f95e39656781c8405485cf55f75617f30ee72220f41ef868d032c84b3727fe8ac599875be34112a7f9546c445c66784deb0cc3281fb8862057740f651bb3ee4140cc13ab680975f8e62ee9b55d968d9dac56dacf8eac591c55066740de98a75ff7505eb25a3d6a99a79fc8177f58b078ef5fe975b54cf9a37564504cf468e21d55d0d92f5e6f5930ba0177f9364f895600727fc9282cd05c25086b17f186f73fe8c81360d911da249a0e79b916cd80bbac58fe284bce85bcd08d08005a858f0e2ca08e055ec7560bc4115df595653f203f5df511b4a4822c244cc7b493e6f22e9df4a97b53e2654cc4a4953d36a90d1a360be523e7314e508cd22a93422dc907c92f06315d15706e2852afee8efb83002ced5ebd5807529076b7912ac9bc8c201aca24c5deb31ff64b861e87e2ff2978807cc26c9b9927827e579bf9af25b41e2f6075b75d5dcc6bcac96197e70678f9dd24a0b00669459d005cbb7e770bc948535c89745d77fe35029709ad1fb3e9fa9f8f7a163cfa2556a911702795a144354348c09b63842df8af797725d18a05014427cf0da3ce5f35d5204a93afb8ad7b5bafcb7ae424e41d1ddb4a90c0eb529467581004ef484bb11103bb3119a47d7128ec0ab163bcb918ca46f48c527a4b2a75caddaa540a835ef936428e57e72cbd2797fedd76ce15825146f556fa99673a0bea985c96879ea5da22611a0f0343b5d43e183d71db61c03f55ddbf4ddb2f597621c09a0b41e61c40729752938b5b01bb49077009675688e0fe0df3b0b21bff511af6f146bc0228d88165c689e1cb2749331d1391e44c12e2aa16b2c7b0a5923930abe0cd786b61eee95ce456a92c7d0aa6f9769fe4bb14b0d4786af74964c87b0d4fe6f3e99a4e1004dd4a8e33e7997bfefd37a7fb4bf4d817b39ac40ed1f8b30b63727e920743c88e7757952494f319b5c8c53e7a4749c4ee58b0b25365a96da57721b2044af994c0abaa0ffdad106065ccbdc7e4556a03c2c84b46c9a860f7760b7332b2ddc5f165fa905321a887ec89797fd8ebfefc212f92c905c402a60cf780c57510283f6ac8e4d913330fb02a8b7f89e5d3ac7689af38c853f50cef0aa487b6fdbec2cc6d63eab2a4945b3f86f61f6a734dd64fc9ac3ab7c5bf4fa27d0770b63111260375e17cdb9be8136cae53f9a005bd050e4db10915efa52376d09aec41b3b9da6b10bc3ba27d80b0eded2f9eb921a3c138a2583471162920c2a1c95af80a1b4879ca4e77a5ae00cc29efe37f143b949335440c4d47fdbdd02c6d2d3d3788b808a60f22e163c1dabdb7131a0b5fc7f1e3aacf37a408eaf5ba0a9f31139ec40283765bd3d95b4d911e0be32dc3ea6b6e4b0f9074d942824336e3c47f6e7c509d51613ccbfffa95a6559efca949527a4c21ba245e7d734848ef4e5952be7e92eafb0d3e95a5c05ead0cf6bc170c06991e1051172ed119a1593bb0da7574142f7dd8c0bdab6b5afcf7ac99adf17c952c768f5ad590a4a42206b4a1d4323fbb7ab883225687c118f518acfe4eb32b7cc8d8074dec1e48b14ec3d297b32371f2f94d72b875b54798dba2969b1af6893be2a51090c7123dbf8c332e1913b3ab494f8f3fe9b7be5f491507e2069f162640fe7023c9f327043d6eb72f9c628d5c3cd200333c790d88a835db27b747ac732a90cbc95ffcc73ca96ad24f981c0af53c25430537561d4434b27ec033a12400673e1a69d9507d378205170692cca716c5bdca2e50cb78228d1f7553e248075e755ade9dbc7ab38555c1f7fd22e0fc21680ff8071f45a8a40fe1415b6988e0ddd37baacd7fe7f4c6a325f79bcef574b5a1906f27f94129394b8c853f3ff02b1f0014e181aa34cb4be8b5886add769b33f0e39229856a7452ae859377bc2a508299bb2552b1cda1b594d53cc2f4e0fa3ce47e03543a1e04a0c7710ead8473fbb8fee2e8a92d3f12744629876c9bc0fc30eac435609de8647424b359492f898712ae009dfd82e598086b06faa048932ba0726aaab717361e7d24e105c2f3c77d3035a8d7d8497d9cf27212090661d4031c19b5c5c03c939cfc666e86b397aa6882145008c1e753bbc309cf25279e001cf45f5a2924748d6aa257d07e9381ceb398d87ab332f3045eea8082f15c53b3d3d9a1ac475c658001ef87ab3fdb2890f8e4d0ad69b3e30c00e974f1d04d194bb22c8f40a2c07627ed3464535cf3129da2e6bb4c9ecd3dc73c30658044425544427d869bbe092cc197317c6d5883c6413c2ee6fcb4d769e28b6fb0b2e0049e4a0f4d16321b8f00099a374e5da505ca284f1df2225e6b0dda58f8150e25ec6aa9730bbc982dda864c60d638a8e4e174bf36445b520e00802b3f59d0f67862210f0839e83277642626759ef9d37abf8c729c3280f026307731a90593006a1e87d7597837858ac4761462f1d061e8e847eeeb5911a13963399a209bc9b07d79d59ec1171925da73ec92935f7ad8b2045d909e286bd9da217dc1308ce39b24fcb0b1e9c71b87d8eaf01d916847ac589c23e44f312e0e6af38a5343498f04e32f9fdd3de8ad2018922731e78cc5616f0831665903a6b37e4205ace3621a925a7b096d37fc4c931c22086bf04d827c47d11ca35600847d8695665a9b5724d7dd7773ee5282783555e30a28661afd7185af3c07c0c835a1167622c8d5a91c29fead65dd381bce9b588db2f3937594c5aacb162023bb38d2a06cd1942cd88f2d307555b63318ae39966a895a130df70d29ed4178e96a1c96a6d1d928fb55fc361567da15ee1995a48201f3d86f24829c855e346eac554f41bc5dd013ebb1c1f9000d5958b38f2340bdfc88db0259c6183fc6659dc6fd4f7833592cd1586c9eda92de6a0b4df9c5b2acb2ceee672e4ff4cb9e5b72d3c2abbeae6c65eddbf6d15f404362b9f7d9fb5ed0bd2c9f28127eb6bb4e9c8a5d65d279aff001c5d0d117eb9ae4f9c15bb042c9bc842849af96d0d2817f9f40be27522daa9c96f5f19bc124053b95cde41d2a77e290589a782be4dca079ea3290b7b96f10ca8bfa98a76b8d019fad4c2b6110ddc57a23ee0c623939bae5f3dc5f6766a284f257405094758b32b9c6b89c2ca48fe79a10d0f6aa3c7e134c42aa84e6e86c79bc8f6393e38db2faf2788fa0e043f2cb88b5dfa1947d1e5c155d29ab96cd216171aad0dd050278dce2195df42c7daae3ce7956a791699ef7b9b9e62df76365ceca2024b68982515af14f9fe061b01cb2c3d1f27321807478d1df4ca6a979ae341e85bb9ad16bd0e7b871c1f00099cccb01662f9ed5504341d633d98ffd4e6f13f75212148d4d8c25903660cdb9893f9f2f8c6a852d676ff54f6e295483702cf0dd0bd49e0da5c77720f3f8c3dd1ce9a176eb3fb08a247f1595d4989edc7d6c5d58195f91e2e3376ed330f66cfba36f74afd91bcb8c15d505520dc3c968c4a1abc1113fbaada4307f3f73e63385eb158b12fc8b1093ca2646fc80275ea8f4718ec079e162be67671ace4344b20c22804748bc0a3a41afc77d0dc22fe91d7b3058deb9d114958b2fe3f8159e631f08444bc99e259306355cf9fe4a69d346c782ac6467ab5ad3ae1f4d55616fb11efab60b1e2949d561f94b50569f51b7b577ccfc09f9ccaff93ea9c95ecd15468c787a07aed3f35be57a1712af2773f0d9fa93ca37e6b18e66cb53ea8caf3b7df81ff4b40424cea0f13644b350794d3934ce5b8966b4f660bcc2a223579e5ed1d23faab2a6a2184f159c58b4e30b49db4671a8cc1efb07d16bb318f657f0ebecbb8620661ec28cb0e33ac789ff63f6719f72f014d91f626ae42b2cf6066d5f191451ea50c50c8870ba8015b4de09df769040c5d62da89277b6795284db5a45016d416d0541f687f93c0ac7c837736154d9799e82751d2482734c2e354f5e2a1036c32cf61e0727c4c8495236741738b6db6beecc57e375357b121479fadf6adff165ae95a1b4d46defba49821c8ba20706c63af64e9210eb5e59b9e53654a3cb3d97667675961a5f22ec222da94749bffbe707a2a1bf943e9d8162e9ba64516c7bd6e91b22016613023d50bba2b0ac5c1b6cd95429b25b89b927b419df64f02e2ca2aaf60fbd4413fe4c699e817e2665f5b6248d2f10f36721cb31d81e0d0c9ac0992099c6f030ec8797e158de0664680b517db03a61d84167da50a70e93033cf818fe78c060b9072e8e4c7d00cfd2ccdcdd595fc41b96c30bd3852929bd808f03a07905847548fe63bdff6da250ee1edaa82c0e64a4ab468e5563c0e7d2e10ba3de44d29ba46d3cb7a59ebd2b3032e895408a2e849382565fbe60f0c179b13d2910c6627e84a23caab39efe13c43d949d44d832bc7ea87d00acf14b6f288d8e33e69237958c6498bd867482f4a36aad4313badd64ccaa25017fb9332955b28934de1cb4892240bb508ca3ee364446bd373b967125e3f3d8e2c51d3a8887ecb8ac55ea8bb1fca32f0444c1b2613d5e2eda3aef80787b1223150b91e4154578971aec700fb862286e693d4251fdd51d8cbc804a9dc4e8817e28c1bba2480502af011041c2f4f92ce3cfd4ba6f74d201615eaa2c2ba3b2de549e75ff07b94cf75aef5fc44800384d49d8a97e4d5e8aa617211708bc8d706540d696e086b193e33546299c016295f5eaf43a128e23858848a46564b2fa97c2bd71a2e4a1e96042c8960c2d718498b351a2f51b945c4904506903c4c163af8344e0388febc938928f6f85fd2aeec7021875690e12714bb6e8ef80ad4a610e0351b2b646b6c9835ef433159f9029976e99ec144e6b0b142c5c985a82c06b59df7e59aabda572e70481714969439d805570677561107228b13603ffe9c60b1984255594393a5dca2fd1aa7ffeb7e3185316880afaa55ef001ffa2ef56bd98a38dd136f16de7d2b33d4f5f47c46f72d5e406be535f9c1a108b3405b73e39bcae492c6e40b0307a28b965003f6eccc53f84cb8add24574bf0a95dacd614acef8062716c109496dc9120bd2da5326262bbb1df6e06dd896d1708e6f8ca8e9999d0565ad0dfafad42831fa24837d3c2d3e107ace87eef84e5fa166a7a12e082540491430d0c55c66484e2cee065a7608135d2ce8a93ceec4f205e52c13ddef9a693afc4a1252b84bb0d36ad769d41be0330bfceb4e4102211104d3a3ea9ce51fa140e4a1dc8955abe8267a87b6d275dc2483af807ee47b8d4506f7b72f5233dc6ec396dd35527dad79b124a7f53bca25702c104e420da32f15731a0ee9e922fa5b2bd8a726957679eada32df2cf963e29e6de6fea1a4c03009b304502048f8a1ede073a7b63a8938c30b6ad665f3883c37b0f837a4921bb7a92e7d26dc57fdf8ae4a2f84ed29fe128dab9635a711815bc25c0fa252bdfced7e4d4d3826fe7b2825d1d3e6d34a1d2ece227ca3fb3b9566c7d9f3e6b30eaafa0f763b2d0525b858dade297771852db511d7e5c967590d85cf8e6caccf6d6f05e41211ad82b4fdb156d7f7dccec378cedb34984ef65331e261e5429cafc39136868a9562a493925b202606c0f2ea44a2b6a05fdcad1149a205453c5d5af659b67c4490f173abbf7dc0311ec9e6e4da5929830018967c9df043162498d8f00fad4eaac905f7e2cc40bf62069fb197821abd4644acb87a75f2a4c1c0f43297fb4385230a44392100cba42088eb5bed840df84ff3401bf418d0afacd91a6fd5659ea81619564051a547f7d26a55edcd275b6507d57bc8d3cfb3ed4036b1979194e93fedbfe4145801db41e275846e1eb42c89d6b106c6fde2c3e4e5a162b3b3d14ad30fc496be205cb008b77121e6ca73a7ee2551881d5c99271e04e0d5c92264e9ebe4f013458f00edd7b926d35eb8acf51b5a7baad6d73b082303bcb1e4c895ef0fd40b04b18f34bb33505c43dcd0a73d98dff814f855128d794cfd9f098cac84c747dc100b073f42a6e4da196bfaaba8ee1a906d8bc064dfaa456b464256f0cf9ca52ce05ade6aa9b7dd69fc101e025ea4750a5e98ff7a253e58cd4f960eaaf91556c31ba6fefd19efa3d194d524f2864256308e25fa9c88bbeced610e9d2229bbc2696af74e40b9d49eda8ac1f4c4495027c8a63d991230ab689125b0e9a0881452e67556b67ab2f0374b86dc77c0ce574f9b4de5c423449536824286db6c3eaa6c01e3ca1ef52bcbd4ee2f2f932d3edf36712c276318ec02bd8861985bcd72057a835d5c6ef74debdf892ec13155c06e4412ea0a5e395279656a2aec520d4dabe2358a138ec93fdabee52a9b3a7e7d8ee14530969dce9b8296f2448ca672f6260edc13f767b32a20dbcaccc394f19cc675d3a6d4081ff2a5b8e65880414595fe64439f10dffc36439c00bc4329f6469e6885f3cb88747d6b330f0dce09cd54b94e31d767dfee8acd6b4ea123dfd4a39f2221c0840314645b70350c80e85459e1326d620350cf4f46af7d2469a0d5da500c6fb4056248d0fed520fd9ec520ccfd7ac0eaec18e8ac34cf55ec1f533f143a8c3978588e58e9dacb97862e877ad6968df2142b2181ca21359ea24ce05b78e30b45b3856e8cd679bb64523a18aa9f33d3cb8ac751e2d1944820edf92e712fd5f25c0e92e92bc0630b4d07c95ff84e5cb413f4c89252e81670a3762d27c96098a7463189e97fce1e251b4ee444ac0b9a9891f937cb1b372e15eee4f0b2aa34b294cbc37155ce29346f96ce92af0d0073e70e421be483e7649fcae04ab75ed3ad1fb36d531461f82d538530db886452710952777cc4d3204077ff12441f2b6411b2c5d6361080648f37b11bc7b7f92c1c67253f625552094b035521e5d05a0f64b4caa622307395e485e3385f2514b4fb674f42d67e4acb0cac94b636b332fe308d8b87205c81b2b3a4e12faab8fd1296729729df27018d0bda83783db0fd56fca4cd1f367cf3e385fc73a7b059fb6f75f1c69c8638c078d1f6eb1004b0014251635b166f791152e1f563487af158f3214aa442d29acfb4e5669425939988e8b631fc15d03923244ff778bb0f665ac521e7f9c4cb337668cf944660f055d870b37677c463a57184576a79a878a24a0efd2e8dc979ecfdbd18e6c96925ca3903d09b95ca2fa5439882b62fb6bb8b70f53e8928fae5aeabda47c6e4e73ae2f5c996061ed03c22e0885743628ee20b13a36b5f91ff165fcae7e49b6182358353e98c20da7d9302917d5f7ad9d8f4097c3f0c17917f14e8a00e78cd06e320979a8b3b51907a3b2f9e9f20c15e3bfa6cf4f2a91bf023e83276758ac49cb2020513d929020a6e3c8f4f152481b75ffb1ec1e4cbd2769299249344a2e7ea96e4b506f8e0990e029f0ceb08f323adedff062b3cf9a4ea742fa541a448a0ba38cd8fba13e88065de6b8dbc9f130d088d0f0c7c23bcf91673b39fc6bd0557d240c57b7950c71dd7a9a8f908030ea990e63118fac09b39c0352cf96bb66072fb55d56189d707da2b0b5e3a185b6c5e0da16f12ef3c1eccb162a29b78b7e25afd1f032933d12f1e2bae963734d0b3934665d1e2a1becd1bb1a31d6d35ea1177a04859bbbf66c8509d3758d8a48a6db204db5e71596f318c88a0a656e9757831ac75dfff75bd59da4a51aa05afb021220fab1ea55e76d188fd004441de809cf1e8509cde9dff6a23faa296a69e6a584b2f7c1967fafc3578d96b00135a34071d1d81983e7e53849374d223a3b9e299952cf658a07329e6c2e48be1b5a6b8401f13b0db0961e22e92828a59e4483d6c68cdc2e23612246bd0e605ef0f0a35cf5d92846e258ed4f088ea72415293a6592cdb88bf131f164c08a7843209cdd33d4162a5587c4d5052dd7531e2d3e243e9491feff81de22612d4eeaeb38c39b910314abca1f4e67eddf9eb7045507c3ca3275ea0943ea27d449b852b797e9410d39714715277a087184514d670b2aaba102e63439b5da9426ac432a48cc927ff0bda866b71ecc5938b27b80c6ddfb4e5b6c7f57f16613d9e0db9bec1f5533aaf42626953093a9bc9bf089eb944c1e2e41f58dbfc0c34a7b9b4e1f129bb061548ff9784d01f4b6b523b518f86fb3f7be0d34bde6385bd2fbae7a49285e6c8fff1cbe1a18bbd067c568768531a9c40c9005806c65c89e41cca2e6a6b7c7f8342d22da8862bea5318fc2cb7b21f2eae126d38f35b8e2191b810129b42b78c1e2414ad54fc59af1a856cb1a4743aba709f4efb7864a254ac49b51a9fe0dd1881eedfd34dcbbd13430ccf9e996015476eb8cc27ffab3f2b1d18e0cfdf0d972894e75a28fbbbfe1eb7f54d7cfd3f58dd90a50f46eff60eaccc6dbab7c1908dc63f59ae33c794c5d85c880dd238d9ab84bead3edfb00eb7e1a2906b5cae3366f96a8a027c171db94a1b0d3828b2f6b445e019817baabbe1d285c81a460fbccbcafdc37f8c541f837bddcbf507d25e1e27de3102a145c434865e5eeffb4af4633fe04c4deae763ca73880b6df502d88f33a03de6d9e9f35a05169a1305c9a3d763fb6d931e36ae373b0515c77caa2eaf700e8558acfe0ef85793c4aeecf291ce3b366e7ab1abcb72da3d312c24302628e611517ea0ecdeb985bf24e7362f85f1d17a96292aad80225817a7c474fd899f9d8fe8803f1b2b42958102e76de749e82cad2fc811a397efbe7abeb6f4791ebf9e71938711f3bd3e92c0a5d61881a35a54b97f81eff7d6831350bf2b2c0caf2df0a09abb9ddd5b53816656dbc0675cef5284cf7a4b1006835f80f24aa51f02949b0345436b3fcf296c5a5d1eec003c502df866dbad56ef9aaaf29f3ce618e19aa881db470382df695a8402c824b40a25edfc8ecd9d31586efd8e0e28776112e71e04a6f1ee0f54bb54cc8d01f1eb90159b778d78a4090aa75f3c8737e1605d240573ec67b34df5c6611a45f0d90d94c93d53ac034946ceeed9e45191ab7f8cf965b5f6d1daa38c33895673be6682dfe9de77339615506aeb726eb55d5d25650d47b40c58eb7bdfa9d4685f9220b3391c83cb6a5b8f90a64532c2fbc480b9b209b25776246f3cb8d14b3851958e06690a363798773f6c4ca421c86bed9ba53994af867b5cee4ddd53f5af91ef38e4395cfea30715ad4d22b248694c003650c35745296428ee1816d6dbb366c7a6b66fbae4f7fd5b629cf214ae8be827d92217fa7c2979b1f9042d02032d1a4561e2d4cbee1bc371e5bf82755b1785880d83ff245c6c021f9679e8817706f393f0d2303826f7a180be209a7b58f66c4b59db417deedb479a4edf11f83f243ad6dbec4ba89474deb0762504ceac0ee5994692a6ae395e9049a79f6e1261713639ab9aecc43f78c428943887175f49379a5b10f65f45de24542b1fc875e7d431e1e743dd342fec9911a0c0eafe7a8eac7520bef9371b414ce462c8e6c9d83471f9174ee49f6cb9a6922225f62a04c48a531d0276dfc2715021d30292b73d7b3fa7c325caaeffc533d4a3ce734405d51a5bdb4537ff42547832063692e61d90e313742f5608effa88ffab2529f386a8a4b6e1f0023ea4d40b3f83caaf00805ba567b1d45255443fec3ac091dfe08d25708bb769a044efd85372d328b1aa6fc4cdc8037c843f067ba9ad6c7a5fb32534c503e61ad9ba2b4796f17db6608ef0b3a260f18fb66c3e98058136486f1353bded46f5697448610b1de409de84540e106d570375ae84f47d49dea664d8a821a82e7b6cc03b95980b3074ff07e4a4cec376d5c19735302e12bceb4534611b96ddd1cad486f44ad82f17c8e89849243ab40501b45b1218f63fa8d19a21d414ba451d5cb323680e295f190a4cfb7b7f59cc6203632a0fe353ec53b72e94f83a96c65c5994ff5f8a94837f5fb197425b33f1d504566df2394e0106c687f394363149d4e9fc82a166208392f1a1d46661d10ca52c168a84c4ed6609262fa771af94b7cf327514f549d64797e8a31aae383a061ba22aeb8d293a04a4feae19574ec5f6935f861d24dbbcb8d96c40d1e38876c57f8f1af6d5133dc11f768ab00dbbcef06896b805f7c5ddbc9fa3fe61cdfb8e33191a6f152328fd86c1b84dd35d9db68b98ff913433af3e3c30b8683334378937306cb0af4010823cd4e97eec0d9d86b16ac49b12a340e921d5d103ade0e46fb80dac652bf574d4c99e34a662e6624549250a5e080e21e551d617593899ab49a0f90317f308fcfc1768bf4c9db095fb3b12fc617c3bfa3ab67bb1f13d26341ed63a994d6e414f010c79b2f80533ddb16f79bf2cd7f372f1370cc753225026f64218958f046a16eb921b36330236e36ecca27e4782fe3110bbd0830851df29d9ccdd1f651d49f8c290947383fc834e3a3cd45f3be324e0a22c100b97309be7d05ccf615821a89e8fed2d90735be0c71da7588a8e642d27ac71148788294b05e2da3880ef784daf5a932eb5888716f620f37728cb6ce0ad3872242064a2b92e182e5ea7b38b00d42969df0c4ce8ed824a0976617762061b4d1788fdb105ab0878408afc2ac08bb5065787ba46e62c14a4d1a05c1cb06718f4488748fab9ea3b0df803a7de80b5f9f84570eafeea9d5334333c4241bdcb4d34ed6a26c4263e70dc3f13d157344549081be0c2fd5a06e80418913a6ff1fa6115ee7ac199b46e4feffb00a21b42044c3cc1206acaa0307a1c66e86d2db4bbfd9f33fc4100cb447f4d161341b414baab9e20780bed22e3b282078903036ed8c9dba43bce82d386a9fe7694d7aa102e0d361e2fcdef4ae63840e1bc237987176cd02a7e8ea634fd740b05cb8b83a02a1b0aa48fd7577f03b35edec9f51867418f86ab0cacf45671897ba9ff86c92b747d259bde52ad2800cbe2e5f7a267771ed906102e4ef4a2aa8f564c7aef0319d5da8ce965657aafa629d6dd9052ef1d75f357422c9d2f7e6f2fa4d582efbad115da49786c39447bbd7541b0da2c36c20f8481284ec02c5389116e2c60ae75bdfc26622e3bf596f40d562c451e59c6cfb5358da9dcdf738ac1dcbc395c53bc445266e2f519c2f5825d759e84a30127aa2dae82af1d248d89dd3894e4bd0717cede41ceb450c8eb8d777a9f55b34adfbd3f9668215ab501baa5cf0015cdf10fc369603053262eff7d210c37a0945f786fb59648e6dbba5784e34607b4d23a2b8cbb6b0fb9e41dbaba24d36f4d8f667a27565529e8e85c184e5d48b1a91509f48f9c0974d0d1bca2ac48794e44ec886b4fe97c130ec9c2cb82dc7b07dcde87f135d4e2667f373441bc54a3dd6ef3ecd54e37b20e40c516f8872887103575dbaae62a9fedae5cac1f5012fb23b1ecbb3f8c08a02366257d27c50915d59d212fa70b68e81145894dc2d2482928f61e1c327123ed59693221e1a447cd5cfa2ba8710a5464db2d063fb4a8bfd5f426d23835655242b92f312aad8ca956af36db708f4db7bc524c1ba97d3c3fa690275036d0d05b4749a16dc014e5f959d63779af893a58987f8b10b3a3f4904403e3e03f8b1a07a313a72d099d17fd7dd7e74d8ce83b019e68d22c87b03a79585540ca7befab1eff1f2ab830d08a7e6bbc2c9f3032b77879170ab94a2c75c38a8e28551183eb68027310575b35a643ca8df0b6c3f21686cf9419fd279d0c3681b782ca2acf43ad55194352b355d41643501adb6cadbff349e5e941448d699ae6d83671ed5c19b49f19a9f15fb77abd7e0f925653ed1c878e1461ccc983f3b760f72b9283b1d64689792c7c87e3020122d1406fa139940a472968e8df081255981e4b751357e32bbb43b33a5562d2aad79f0c6e7e1a8f431b2ae8dbaea32e3b35547d62c6d4a62bdc7f2574efbb54804780de9a111775fbb321c8ee5ddcaf32e0a2a9a0c4b2890d94336c727d76ee4b187c9e3c83b8affab615f069143bfe02410eb7783478f39b8d696f7c281c0ad2f29b349cfb85a308cd0f4794fd498173ffa390323eaf4c9b6c2816da17340fde7ee68802a207baeda016b7b63d8da14cc3661a160cdefbd6dc7949d374466537636482b6a0c55c70d6322819ff8fc65734613e6bc38d6a148362f0b064da74a54a1d0bff1c47f25b176b800369d8595afb9be57b8e45001d09eef3ba1179a3f0db1a09273e16e2740dcaa8bda3efc01ebf1cf58c938c25b817223a36a3aa5cdfbd62667430b996845e56888fd65c656b29ed58e7faed41af5508ae6f42f6073b99fd082f17b87452b21808c02aa8ae09e115f4d4ecedbcc86aa735ac14e40acc16f4d99f1e9ce6a8b216119ac65a05bf8e9cb39a9116ffccff07b83444fcce5add4ebf0e6aec534c055a8963d3fad156d88b7b8310ef7082bb312050f8c6bbad9513a4c22630230754ec5a6478117a9769e936d5910078b4472c534859cb3a8ce74c6f0478f1bda147d26ae5de266847e6becbd93ed280284a003b648e92b1c17b00081c88b58be28516a32e2cc10231fa1222d73deceea76db6bfecbfa38912f83757527f07f492b7c0eb868b6ab21c4bee2317b6d62bf95855c62716872b4807f943ee856c607884d62c3723aae0cf8159b6e0d219a0e6b2e53a5eb8c5fd2b4f4fb637c16e375d95624d871b08f213455cc37cb83cb436236f02d9d0e56982794098765c94e209916b36bf9c0d51b03ffe323192c7ceb055f906e08470d6172cd5cff47e66c74421facf26cd3f656e1647eb488543581eed8e2ebbfcedacb0111544f64d6d4fd6ed160006d7299615723fd608bb37b946963362b161e45216cf08dfc7f430e2869cc7b1a5e1504d6cfdefdcbb5c2b59f0f6f28a0bdbdd32110fb689ae9938e91dd715ca4d143ef03c5c5ee3a78fa7a0e6b5d28e129161b368792828f2650bca6445093344987ae94d3a94d4167d34f6ef7cdc560bacf73de5b465a5dc7f33ef208faad4d2948c9e673d9a984e4e59c3d2f316ca415328384e6975e9b40f38be1c5c01954130fd79520d771598299f6f58c18ad3fbaf7b0c6c3f61dbc23fa0a11f55145fd79653e0d55333353b368d62498e405780e8782207df30624d35f5fff022ed18deeb193dbab7d7df819fab046d043e3f1925a7e0e7f0ea689f19be40586a94aa9c5ad4f7c7e06afbb08981be8bc98e740e8e91afd31b98d4fe1484cb1fd50ffb5a080e76c577f470111e98f66d8538dda74dbdf89408408eb34ece0a0d0d68f55f204e227b237e28ec867715d9e142612c87b321f25eed7d05ee2464e9b7a77ff5c81d63b38d0e0a89e9a6849884b6eae467fc94b5c6a48b3e1c0e417d7ed280622802a1335daffe2f6eaeaa72189b5f18121fb7a5e76f9fa50215098f07f3e2ef6a8544c43a66ec273d16ee2e42faa710b3a4f48a6a55a181c5c025e8fd118ce4b32eb42ecc3dbcba7f66ba96acdaac147014b22bf65f7a1b9098fb50063566892e865939bc3b562d5c277570fe43556c71f65851349310bb8924f48fca66582500149cadb268a3cbfbe08685df3e8a5fdfd250c4cbfb4ca8d8ec786cf3ac4a025460e35155cd89db8519579df8d13336e231014c649f162ca678f0b0260f246650f397ee4e71f1a4215a4f80f107393aa199d3b1a785578d1b51c2230d98ce9a1c54214c445dc46ff82cd6f571e582b045952eba3bb7f5145efe588d504e30e6e10be733e097e884321654c52075f7e3f5aa7a31c93dda09980719b6973a3391c7a1536bca29472bf6a131b8a8be801ada621fdcf81decb4f0f56c668962bde5f59dccbba91ac8ac6c53d696aec8069c1c4485837161155c8f4ebb64ced0b7289487b9ed2673524ebdb7a927dd9c6fb2e2d815f0dc113c4b9c9d6d790f8c0aa3cbe884c7e83bcf5b11521333da41a5a454a735eae03349c74067ea6df49c9c9ec3479412987a26198fae7d8150bf8eba9c384e3825d12319a3369908240a5761a32c5195dd393fd160524ddae51f143cdf13c9a354f2b489ec91e41148de2233941f231a607f02caabc6ed0641681e7148c10cf3159fe35e44013252071ee45ebea97267c854574e9993c3cd0da293a2fcc981f00fdf98e2d20dec910ad487284851a646bec026a3524039f7f1d55d1726b38f61ebbabb5bbf3d7897f807f2da5ba0277ceacc5712fd55b54b940a6318ec089d105038351232193f2c7ac00dbb1e1d5ed4f37fd2e3c35aa1929f498ded764f15c3e762ec4f542aa9173806c015ba50b11582e27f5ecbd86494b998c3dded105e43583fc95a4cf71f22d9e1f32e56c189063efb46cb3e5766198b01ed3179d4e0584ad7b47a4308071306598e501bf94f71d0d41071435d0fe9bd8bf332412103c9653396f861e6cab3667779c1317f691cdf75c3990374c7cbf63ebd256e822f60525a551ccd18d1caa2429dc9bfdb41cf14e4498ba523f689de233455277ccce3b954db2eb026832061c3e0b2ed963d54172b888f52f304e91e413e099599421b412a0e763199477c4c002bc2e537c7728f526aed326a59b45ea1c488e060f9d093e3d83c79f887a80a036743cc4646f0245fd6ec6c125db14549af1b2f595aca578720c7afcbaa6a44d47a7bcd4b22977f5cb3d5297379aa7c43e50aaa0dcbd0341fce60fc9b188ba2794eb30dcfc22f4850ebf090131365ab97509d7b03b5acd2b2c94f88ee38d3cbfcc932b75a908026446585ca7c95ac794bd71cc7c38124da48fbdc7a4f74096864d542f172f351c23f09dcfe3665458e6961ceb9d69501f4e94b4ffb4333f720ba5929e3a1536bc449bf3d55c7edf893f8d8fc76c35b0ac79ea1ef3254de639c053c30b76e1997d36a6feff7b9938f300123ee29123909fc6ee5054809db16844d689f9261ab9b97ab013b0b94c1d00c8b2aecf84c99c43a62ffd964ea93d87f9bc4be9e03723fba135d69b9dede85d09ed53e0bf8e2052a81d8b3af806e7035f638d403dbd64de1ab6cc12b21527423420c2b8b9e7c9274d356db5152d5a84f66ac2be972408bb67a148a86e48466ae80b7fca0c7cf33bf60629871e92e4675f30809774e16c3e1883e0ef5b0de22195fbefa71fa43b2b331e53437cbe2134ea634b7d5f9c1bb0addd3939e0cc7720be8096a27bf40d6f94dc5f5cc825ad78386197d2cfbaa3cd882b962a980a71c2c228097e99e2e6639bcec245896fd5abb9b9da2a4da380df37edac33f94e7e925150cc8e020752b1a874008028d32639feea9706420d2f804d91cfd88d1eda19ec9934434cc7ded45b5abebf3f163bcd786262d9554e2c3b39b695aabbe220c3e47fe540c2aae73624e14135349f72b0a6cfa225effcf37a7cda820d0e4eef1ae96364090c37187185b62c9491e5679e0a60f97e8a8011c8977c19821c9ba1a96be2250ea1e2cef0fe27f55fdf7e86e033e4bd45ad7e03a009f9b0ac3f7ec4d9cc8a9cc3fc44974f0ee52ff985c14d1183b9820dd15d458b54f20bee1f6ee536bbbb5fbba3b2ede6384c30f42d5456ccaa6ddc599e845404f8e37fba14c26f4a99f2d26800d45f50faebacc22ebe005be860209b5db9bb87765c80b2b83fef7ff7cf895bcc1f4819d731f8061254e659fe3ee355a733e89d5dabc34a823dc26145b009094e0a549b4dcda71260cf75413c68b90af3a967b10f8f9bf40b22a4791432c5f30f1bf16fdefd4e79a264399c236c064ddb70c55d1c468f41aba4f231d3d6449b97caab020b6f32ce5fe9bfe563b75f70b7206e1bf48f11a5fc2b38261509097570acddfc43920872e19654974dd929362f4ede5838b7d7a3653be2c048499923122926b917f443f9d010a43c625007e0ac42a2ac495f25dc8f4d8e8afe1657f704c601b3190459d5c3df3b4f41aa5002a6a23782b6f3a093d2d697f0a70dda93b10a0b849740de990558764a6c46a63ea6f429660203bc7bc86d9babc38e957bbf7b80a8433826b64d12d1a832c37ed735aee4e0ab0dfde6d88905f6e4172d0188811d987d68e6afe3a4fa03359f5e8edb38e66d1280c9879baf736c7945e5d794c13edfd651830861854bc5f538a9a80038ca75f8fac3b08a474097038974606c9260e8ce6070325f1a437af23e04c52d04fd959eda61041cf709e103503d3e989b303dc63452c024fa7d8cad0de458ea53fc46a4ae25f4dc254be50948c4c4714209596e3b9f247b9c56959626bcf5a07c42f38af487054058631d85c19f84bf0d78c626f4b9f19b866b003e27130de8046e46b23c08a7d2170bf4f9591201aa73eb0e70ee37aa2d3f2777157d7b144972da9acaf32f6f09d78305e48de0cdfc1bfc8cec869ca0a92d1844ac9859ab1d5e147a35a86fdd601084bac7ce704c0c4c19ebea5c5d8797d6b9f374162334fc0ca86f72ca4e557d687d9e2399450e53aacf860aee0ec161d2892e0c558c346e2512d502d74f69aa35da2a787cd3777aae79f5ceaa04d09f97124ec604e94bec3dc065866df7ac8f0f16ea46f7a029e9ddc5b5962ee457b99ac1c04172decdee9d5d7b4decbb70846ad0580f883fa819af2f3ff1cb31a94864343cff4db14cedea2690f9d22f6832bf82fe42bd06449299131f822d5157b479c61f6fe4154b72aad840facca7f602a3ab3780e4a8b1dd221dbe97c3e7e5964213e203d47f3c1535cef5c12ad9ac8c8dc5ae3acd7b6261e0aba7d30d49d556638a1f6bad63b13e319749fd7b18fe38f44ecce0a602c8c94b5965a4881b998d44b531f7cd472d6624bd98004c0a5d806db31e032ce3676bd883728cb2b1c4936c11d448b2be1315659e7a6a0c126d0b509f0c22b071c0c1fec6490c2bc0c911502c50df0c1d04d49ad66bab39b58f22537f31bfdf52678444ae739341bd298f7761321b2808751c2ae1e6346388467ddcb0094b17f9cdfb40886cd2930b6856785d129d94e4d664ac4d74a5f7ff156652fe0d54d8cc56cf5900af1aae3ff80ea97c5cc6e156cb4685758170958e9e846c95b85dc06ea4491483a4fbd1cf7b30a14b8b378bc2a62a4cf6a7149abb2450703384c63d45392109ae08f6dc3e4444e647386ff2bd0998695d50029609594304441d4ecde487cf8edc259bfc00f5b3eefbbec0c4aa580970f616db060dafe4af33cc27e0c112ad3a8aa53bdfbc021631d5b8da501f3405ea6d560e691c9aadc7af2c12246f5c528355e286e5d3fbd44571912d538000063c2fb80d4dcaac06e402b77df743d7580fba67edaccd3586a03bf23a1d716e92fcc99768129c46a88adae8cbd7e326162624cfe0a31c51a5b8b136713c67b23492a78e9f66160ceb32945a9c44c19b256d2164f05755d2aa155de8732ed77d539466082396ac614761cb676fdc63d8fe4b3ce19d37ee3b1c4cbe72a06345427888719e9542e3e655aeeca9a6fd5e521956d3a067d369fd64a53f8f998845842bd546ac54e9410e9e60749be225f5890f06823bc0a84d9c2bd57d79cefc3cd4e60171cbf308383c7a2d0fb891f4ddf037e0d50e3824fd89ca43e4dba13dbf972fa37f77e01e5e02816afa8a46d88c2a2c5c28b24ee81e58d887022fb0db225d7121cc3abc9a16f33cb0d17b614f749964ff09a27550148bdf0551e09e43298a5302e48ed919f7811485311681d81bc07a4004693bfb7495364550989a0429c03dcd54eed60c743e915e75e628f10621c4a585710348b30786cd8aa264ac977199f799c523e0118e4bb33c64b728b84fecb629548 +Output = fa3607a8a745851cd93698626dbc3c70 + +Len = 104096 +Msg = f6fd9380a1b38d7c2cd61a3425ccd763a65455e27d1a65d38b89921f6ae0ee24538812a73ea560104aeb8bd660b25a38134da82ecb98b09f23d187d48fa9ea2d429a3a124f7ac52d0e5147d6c168b1cf77a22832310f51a744bfccdafed4fe2d8cdb14aa1b5d443b3eb0561d901364929afbded6f7a7d055b5fa681bff8ab38cf9f5a755ec7466a2a3b2c19215defbe744fed0036487b610402b637edaf38fb2518dfbfc08e7b2ca05fd8f1c97efff383c56089fc1d88b3fabfac6ead6361c075c4e1988b8dfb11c2c39c8a5606ef8ec4ba98e9356c1d54cbf0e98493c7ce2f4e2dd08df4484e9fedf0f7514b6846c6b39a068c86b6b1e9e4410e18254ec68dfaae5d0ebf4fde4d9e8269d51e259e51dcee2a02548feed9d02a7a97d66af36317d0c7a9210732a160d2848432b14ea6ad1183e9135a1cbb1c17cf922baecd45323fa0dbedf0d411b17ba7ed4dbdd04ba0ce948f6797c3f424837d85998cccbab64589156aaf4b352cd8648eb39deb97545fec83b5db8d1b8607f4f0a4777a1a308ce0f42b94f0821f934ad708c3c940345fec548297d097bd1fc651d1014e1a2d6038d6a5447c6f2616cb64c1d221accd492480525f270f36357227a3bcb100f97a016b6c304772cced56a6534b6d539b962585a98408d89dd388e0910c6b854134caf0e4dada2370917d1a418204cb0be15fd2fcc8ee8a30946b2b3d62a60d812b0625a3c6ad07bd7dbf3f11389079aa9533f6c07050aabad2a955ed72291035c743682d665886003c9d9356b198f6043c627f992cd7a07928c3ff359d3d23db83f346e64c3524e53888a5669f76b685414bcbeb50dc0218012b95ba568abeef0b962062dafb6ad91c10e3e554c231ca4e507a3b7ee655f3f670a7c0307a47eca8bca337b4f3de5831b6ed3773f40e3fae20e91e297f02b96313a40bad946560f5d74db94cb6e5ef23fb1ff16f9492420b2db6e7c30e9ec4e19528e140518dc87d666e7c14cd280a5d4dfa97ca1c649dcfe7624cee3d9092fc6594d57b3a379f99faa404afaefb4668301b9ef603fb9f76ee59920d647ec01e15767cc0d6d952e6048cc77fc5060fbf41d16b85e3ddc39a932b7ba31bbfc8c1155c3bb380099efc04675907b7aee2dce3eaa1fc2471a69586564e31dbda198ff59496c5fe4eb0267ae22dc9ef7c4c4b9695c6bb5e6db5122848ae4c2d643ec526ee126a89ff52ffe88bba48e4d4c885fa814e65ea187b7b0991005478d4a51b39973333bbb1e402dda27307207ec416502bad6e6008664a9abde8ed46b1f8fcae4e7d941c0cdfb9bae50c873aa0eb676803784748b4020b6c3dcc793f7286e3e562561e2346c2af10b1db4b9c019b03828713831cb1eb27fe8f2f8aab9ceb6b8f7161345a16293d6fa763b6bd175f75304513a444786e4ab2208684139792edfd0a036938e17fff38143a7b1638953701cbfd1d687e17ce37906608100929f5ce8ac14f384f335f0ab6c3eb400bf8c3776a4460f149843cef6d42891957fd1d64823f38e0a5eff747dda499c2f7e694f1ce6e11675110115a05a089a80aa8cf6f6eb1c8ca8c0232701730f91792fb361166fea1432b67e5f808148c44a799864fceed714e6816ab23e20daba643832146a25a930d4ee81559c2f2f367a56bcc762126b4e4d099cbd3ccaf03f7a02ae1122f26693e220d49ffe4d061998a8c1c72e41226364c081ef04579a4943f5efff46bd6864e4b63de4aec415942cd7700d6a62427bb30fe0f19db120004679bc87dc6ef8cc631785ccb27aa4d0bf4b8f411d5d14bdc35c836a0fbeca8b0bf7df51eeec5ef3e6ab74011459fbf5d86be60b501ae0521b1030036368e0121ad51e048321e200f5dad128dc48622a00a13f110a80ee624494b064a095a9bffc7d4248a4f4cc1c180c66ec102e2097be5560fe53798514c44fcb34ce2f6eb8385513c7584d636ed8a9f9f2baf57e659aed127833edee9025a8481cf61d772556c75826a714f01fbc1953e5e184c4bc1cd21d27b3c272ffee09f1c31e470c2fde3adb109931bb564dc43c6b8ec33ac3cd6c49b5dae15789a8d98cd2519575fe5916622b378d0c3c11137b2cc89a27a334235ec7b132e555da7fe2f094eff9b94fc2b61f880e2bf9926cdad297f1d583da6023083e9d668c0c65bbc6f13de28846a89f95949d5fb458381f0203b08a8c4589611d8b0b2055c7f2dffb6f677694c82fe4356423f295e9e0136615bf8fe6ff08e0b1a0625cd9918e15381655fe055cbf4fa6ff862ac5cfca7ea6d4062cb89043686a838c623ff5a12625eff0c1038bc0a6916db0506c9260286a496ea82a7ea4c1f03e6f7ab07893db69011e09b5db9ab29db787abb1b809d8597add4d665391b2ecd9f5ec54a4cdfaad55c81c43d6b63b73e4f585bdcb2c581b713c6191967405065a05ff5200b54b98f1d743d6047a09bafce124b853336e5936742dd6d0b480e5cb86fdd314b498d3df31c696ec4fe31b0832d1c9d685e3bbcf6bf95b88b9ec3233622cfe6933a70527c0edaa169e923e0fd2d418de8a7ee8460b0d4846eb10949b80d5fc869841d7cf6a003a0acddfca19a875cef2aa0989a33bb0c693b2b6b40ac83ff4f34c2ef1e119467051468f682f9cfc139b4d4a45ece22bfdf576a4398822b40f39b836fa64b40872726f6dbf5796b00e5fdb0bc52beac614f69fa3cc1e767a75df43219b61238e68f5b240789b7edbe8c9bc12b0673ac9331e957b15d2acda4d6d54b67bdf4e207b6376cf3a033cc3c85e5827afa9ba7c84f4c0f4bbaeac1cbf6c55be43e61d06d24222e3ae96b9b0d7a818146af852272c0089d667ba5e88f563ad029a7f7887971d20447b5cdbec3d2e62a0885cea1156ca56e8c0fdab6614dac44729b047edef79d7ba4a5d8bbe21789f92b2dd6a8328db90f36f7f79fd475902589783727e04e0af0dc3a2b26dab0f38b38f84bac5cabaa0bf1b48b296b469cffc8d00e183fed910048d323642057a93cbc858c31f65efec146d613c79839193fab32e7c4305ed62695115018554411aa204616bd92103deba0dd101eedd5ab61bb0152c083fa20d02b654f97ec3ed34ffeca89b3a257ddd78a2a0e73dea4ba0272dbdd718d783799865f60874770548ab27343c8b9ae55018d4d6d8add1ecb9e6d12f66bcf3150ff2050315b19b11c06f5e0e3415a7c4a1604d7cbb87bbc56a1f4572c23cbce235da3f84077b55990311393c6d1d75a03719b29a7714cf5f199c308ed1e059715416bb80c81bcd2679595fc8cdee2c047a0bae36f699364130233b8c7df0f24ad56f20ff3fd92d3f8a1179b93ecff375d2fde75a1f6117f3157d0e73adb3b1f61ead170954fc9a6d9eff2e18a707f27da7b8050ddab39bfe3272504b4972bcfc999847a7efce3e371ded27ecefdf52a36105b1580fd6e9e9edc9a91c38753be4adf759e0f89541256fa10c3d009f3b6f68aa9341a6132b3cb04cc3ef64045737c194f4bd579acbbffce38414c18fd46a256f52d388b28680e2c143cbb467377b3f35c144f525028e2d7d37781af6461bfe1e96139bfb243ceaf1d4b910e5053b8ea3677fb87d11196835ce71f31eb80b5c7d090bc8352df832a41cc060c8e6fc16a68f7689ec1ee816d5f107344d53c0a85651c2f8aac93c21a1c3e88c5604483f05e13051b85284a0234743c6cc3fc4486f164011a01e911fb272397dd887a6718a04b5f62ad4746ce8792c8fe3a39fa690018efc60577e949dd1bc1995979f14fba10d628acd40e4eb2eca78d9a7d72883b9b3a2329a8ce82b877849d75aba90215f417b2064716ff60f2669f875f6380fe7b7ea5d0f4184243d75f6e4fb7f4dc4e7572b33c28e74cfc4474b8632843dfb33a3bb2be028ce509abc0606a076b4ace05a580d0e1f5d3ff43604cc09079f10447effe232c62f774754638272282ba0f34fecf471ad910e47f97e122009c516c3509dcb30a51060eb45f3a3981c1b6ac840ce3113bf7804679a9fa09f1119d557217d2eff4cd7d42f98a0b03adaedd00634e60c1bdd7ae9f92051bdafa80214a9fa8753ca43ee9bbb5450f082eb079b56341cccb18fff84a8947bb27854e89d61e2a381b713bb7d3681edac96d6d3935f4758bbff5e6f9e19fd05c821a0333626e2b902ee43a84248285e2d9e23b77fca75821f2ad132fff763d644d2114ca8a001b11c985b1bb19a508bb8c35b1d283ec682415d71b06fe8cfd871b53199ba78477318dde37e93d4015c982c056c5764434069bec452b69447f296ef87833656bce73ee46438b09e43b91303a90cd2e4f3a5df75547e9ba5d60cfaab9b73e2e169f6d5d666b1d09e1f8a736dcf656165df97eaaba99de8c0810fe60ff6cf88c2558627da6f51bb7f9cb7fe9400dfce8f0dffd3884918638f52e1a2431f00eea188807a19098038e7c328fda0c3e2e00b87c6e333be55d5ba506b76709e6fdd240bcd17bbbba6117f9bc6b7b9a1d65e8155d25fd590be05e98395aabefc831cf6e55346e70d2b0cee2c777605212311987d0d929545babdc3f4488554c0a375bd1efc4ec58877f2dc7e2480afcb31c1f9095ec39c67b0c3f0aa6a505b7239ae22bfaf797eb3f28af39ab61fdd2768354c00ac39117e0ae019ade454fa9bac90cccf540d3a17059ed8871398b8be3137386be13d1d102fdce6069fd65ac264e36456d253203a16f4364d25366717f28d6551e417e8a7877ffebc8221a26fc96f915d139359a68f56b3f5d24012ba14007cba9d0f99ca7a910ad7747cfb2a43fbfceafe150ce3d68af78504fde330005825aff46d590270d9b1605f2e8d7c3a514c087b2062775558ab08a2b600001d5d0736d1784fd5d1209c5e2a807fec16372abc72fd83ec728a778394b491b2d2d7cb5a1c79a4cd052e72d9bdbafa033f763e10cbf596ca97e60200c23cbfcf898d1820bdb87f7274cbdcda002425471dd62f0b6e4ec4972b36f5861499b1dea94897929c7d094b87bf8267db052942181ea6b5445034dd9640f71e721191679ad0f0b7a21069e0a4d10b8b36a72d7c99184a1733450f233fcdb1cfc4ee84f2c3edca97b5b8c8b935cb204bf9505a7c068ac43824737cf290a4cba1f276b4088e67cd3bbebf4e5fa07368b10c49d8cac93dbb210023a4d1f08fec9ce4f249306205a2aaa66b22594f928cc457daceee48f9d8d8ad9eae48c754bcc982a96bf3a790f1ec53056d2fa8ef338cc24a6470ed85c3671529c3df7ebce52fb5e540d8c6d1610aafd4566a1554061236e3c4d91fab23d51e0f0b1f7b8f0cd663ecf367258d9b0ba1220691fc87ac5d99eb13b14531a02bb296ad8f2795dcc77508aa282d8f47f71035a52cc751ce75d5ab7c7ec9e0e370b808d2b8ea95fa09d47e8da4469e0cd7e6575ac3dd7a1463d06b25ca128094ac18aba1202d5911a46699c662d98192b20acd4ddfa6ca252e7473361c88d95be8bac8435156a7c7a115a07aea4c01829064e2a7078a09aadea70ad8fd93b2de2b86a6dfd3cf48c407c8dad4c509e68479dcdd90c4f1fe4a7c537932f49bd5c87d648f9e2cfe04b1de6790f97a76f83f765a052f9d4372ae0f5f096e890808bfe63cc9a8e64da2362fd90b1491fdfe5c8ec6a4ad1ae82d7e9fb3ffb14442146b6ff69d248823ecfa0108904b9305c282ca080031c349f7613537a626aeb1c1761f7a533a9be7a8a65cdb6ac607f50a5a300861e421cc98ffd7d345f24ebed685ffb03314a6039fe1483adfae75379f8ccbaf11eebbdad701906f2340accf1d43158085d731de9954ce0d392b653249bfa0e3577619dc7d0f65f38936514e5c556bd390aec5e05ea7f53cbe64604ecf9bb98d7aa4c43852d06047bffcc4a15c66098f9dbfe971b581c6b0b782edf3fbca1d96c3a143581eed88530dbb8d32e51cf59ef43225f9678a474f6bac958993f1d4e47a951ea2a90de500bb9b3567bf1f39e6dd3001e03d6b8202240bdf7860bbe761e7a8de80bbd9803410c343aab118dd51a0e1068efccc7fb228c753292acd5df351000a591bf960d8555c3f6284afe7c6846cbb6c6f544545c1077902b9d23e8402c82a9492148dd5d38db2f6008b612cd2f9a8e05dacdca534f3da6cd47092fb4026c79be8d21011cf7f23d0ed55526dd3b256538d7c4cb8ccb5fdd0454f6240544268d5e5ddf07694591a5713b4c370ccbd4c2ec86b9d68d0726a94d218b53b864595aa50da35eb69441ff33a51bb1d084212d7d621d89b8755aa22447394d41d57d682f374e8579568bb0c29d3425cce6a31b87f47053b3a8344e0620706f3639fb4c5945110a461ec750aa9e36015655c30378b852a2f3227c038f67d13809e46b6dbfc19b5b915f9d65682291e30164197bec182515fb467a791c67cc3631773652df375df7ef9b665567c4c83952941efb4eae781b30b6b80529cad1f84164f4721410d97db544caa735ef5982de683bf81ce5bc3137e5cd3e53eb82ecbe202e620ad88e4b870e22d15f2cb64de94308f8c35871e67546229b17444f921c5b3ca93008ecffd93a177a5fe77ef917d6fe83fe7129a97d6a4081e08f9866c058b79e002c95f9206b10f894ba0412fe7695001aba53f8b4c4bfb94c081df96ebb17d717bde9c5f11397d2ba1ef639e1b46513b4be8162cfe7e877b66810c85bf4d5eac33788e4dfb614af2c80c5cc8612d73538d8226603366363bc0a41323c989a2fbf23d3e420e53fd45879e349300463db23a1c7710342b8f3c978ffe56508bd3c57fd5b32790341e8ea74df3e942ba37c01a5d12254af41ae7b2edd5089e7b7871a3e9f5e5ca2f3534f1c3a2b16db1e9e5f4eefe85bbe960a2db649e20f9821a6926210d620469cb9f2aa549d3ca52dc8a9176431acf34e8d6d89c6386aac84014d0240288860d67361d9eee36a1c69715ba9eeacad0fa3aec723f2b22f97472da689bdc3e9741926391549bc43a35a2f0350efa7f0466df4a71f2ffdc2dae3923b82da46b802dd38e4d6f5764dcc68681ca6d7b20b59d5e5a9d5fe69c90a01b57868361f98afbb21d1a982bfed1a1ca324364769529ca3f83be2ee84a686fa2de9b441bcffad0b779c0771d7b5feff66a679af1c6a8130b2c9b070dcefe465621bf19dad51bd76b0a07b338c1cfd89390fdb8f79b7ca049bffd905e109a4bbe86b9aaa7f334355538b7f481b96983280ece658dfcec9a81a3ac74e2f884a66276539e89118c15fe6c97e4024b74193d4ba24abdd13f293c407059a16f0380ca5a539e89176c9dec0c7029c2603ac15aaf400e8e02be7400fe11e8a45b60017f988251aeed1cf5a9820a6bc9de01a408a2725a0977b1a4584556c8f2a6e450089aa860007ce446bd342d5320af12e9ce8cfed6341860e0c97d08a19336d496edc68d7287aa0cb8ae8ca188ceb9b5b935d5ad2919ce1251dd0eef1d90f57bfab786f8304c60db7206f02db3dbe6313cc4e547fcc07f101f1b60d3e2f0c920a5ed41b34156879a9d4cca9b7c501cd099032594f62f14a3710bdb7c98bb9c0abe175e844fad0592600981b18a3445d8f97afb5cc07076116f36e8b2e8fa55826ebd4734ff5ac408e4c47d38868f489283b2d066018b8ba24323ed3c7ab4dcd0dd68638bfb64aa47500526f717690d4660320d7b62863da0125a54e3f5f1193c329f1a50ebd3a196cd55e4b8e6cb7c3cb78218638b6b73510764836f01b9f40e96ebd44d76b0903c833a1f419bbc7dbbb12b5be6234215ff47c8e4a84715558d30d3f94845025e82993e3f5bdd45f80c76b43ccbd3110af0fd0edd556f0c240229dff10a00d1f5b038e9acce546dd5782da525dc42e23c6c4fbfd84021a749b5a897255b4e253c0e87c2ce62a93cfc45ff877ddf18bc92bd65623c2f04edaceed684fb02d7071be3af510edf84ba55bb13e0ac9dffa8f42a687f71ebc0e635f5da2ddcc9447e7a79d71ed20c8cf0c924923b1ade9dac4afa809fdf3cfe9acd11dd1a31763d93411628b283b26ae53ec6a31d2f6a9ad37c76d449eee966125a8c07d460d2694d5803ca948a99c6a19deb6f1053089f2273e68d0506bc9f55c5ac7fe2d3a571b4a888e44c4d89462dcfd91d9bee8254a31592d25b8f7b526bf7ba6eccf0b7fcd017ec9e63364a9590bbd8d647689e605d4bc1ccd4f1ef265dd7fdfb1b21cfb3aa8e792160aca359d24832c29a29256c58febca3f794e0c4324cbf4f56cdb73e49f67595cb165e3bfc602d081e99de1f9d14cc7e4ce016d3f2404691055b3544b53529222dde41e215ea13d15b209322337737855c3e58fca59adceab135126df735ddee0c6b15f725cd2a44d8270a1c220d45e2ae146fe75442c782e1c2156316dcd924f325a12135f3bb8a1d140cb673c040bacbcb243b071f4f801d6a08cb1a1464ea6774af094b430dcab25161982d766e3839cc3da0c41bbe0ded95b1500cc4c768f2c0055672a56a2d2044d16958191981827e82c0951d5a50daabda98f3d44bc81b716cb1af0118dbee5724d1fd9087c02d48bd40810e6d726b14494bd72b352f6aefacc20c3f60fba4f1217a22c3001bc394b4cb90d43d9a2939c712c0b3d0c768a38d3090488ab5ca799209d29acebacbc93007cb5813f19a801b95b75363b89cf3d7a44302de33e9593d2912fd38c6cd4ef99c3982369f48520f7bc3f3352a8f4851c52e56a49a88f8ea80ecd48567528dd733e33bf0cbbb18696ced7b8f44c70bc53c582c231530be63b66707fec4e1ed9274cf69879d7938f2123cd4b92ecea2f9b0ca6da4c968136f748b7eeb0602d6f10607f5443e0c1c7212b8e4fb112c77b5ca8aff6fe1b85fd562612294543db0be9293c86fd6fc2ab11769949d1567f0c332a2cccc83a80a5e27f0d940d71be4bfbf79c9508ccfcc76c758cde6610977ea8f19bb03d8c17cd26b418c38b723d8bd36c3df2e890f698aca8c75201e9a73f189f8b35b078a1ef9d85a24c51bdef57f9e79f453f54368b6c90d759173a04ca1c9469e1d388c569a1445872d2bd2a3cfa0a1ef05f7f433c06ce4b68189a569c2f70b6392954d8d7fc70a9fb811894b73e445b78db7a931705a181f3a8730341cbb50eaff43572c6e9aaf52b0f28b5334116c36335eeaca903cb1970396ca1476bb1c1baf6d329930343e8a5bf95e25dacf1f533e144066e6b9b80823def97199a277dee939643e8d3fbe2e034b8c272dc865f6f800316d3c7a3459e38648b44e16691bf4cf77824c603826ee139dc3f5a14607a74b474758262d728bb73c435bbffbba1958f3cc3741b35a64771760f905ca6f941c0a5d0266ab3b63985f87884734a3a0fc5e86148a37b2af9f8465029afa14079c011504e2b79cb25238e89f531dbed1e24217ace3cd1616b46b3cd808dddf47f3b4d82541587dc20c4fcf668ebcf4f33326e7c7f27b6ee0de554c43f87bb89e48ab0f2c2c97c6d9ef2da2a79d1b2b5016935e2d624ba25644c9fd0b12dd8852c36f20e24a7a5f402359ca282b424c2eb410e4a5d9459ac00f4fb7f7fd0a35ac8e87750f440c303fcf5bb0b2de3740d63525e1f8ff703e66666fe2d0620aa9f4ce7b747bc152211d1bbcbb0c5e04ed90c05abdee7ed4778f72b2e65ee8e6ca72aed487ed6a561b243003520054b13da47d38e04ffb792b845b9f2c6938a5826e5419152ee71f049a36b8df54684417599546b2e32168438e48bf1ab9f94fb82fe8d28607dfb5c6c85464c9d141c762f8300c9c7295a8a8f361981915d4ed54fe9387413dfa2147f6b38e783f884108c9751304c3024140fbd0b4924771863d237cc1b09be16a716c7bbe5466e4bbf0148de2539f0e3cf5f0ba9beb1577225de6cd073ae83c982a71d37cc50dfe3c0221a002f2ce61a0ae184ad38e488fc99b8eabe247ebb2b45c4ee35133fe7dcc2637d5f94718a47553bda5e6e1a86084df6540d93f6decc4ee4cd4c406ff0a7344a05451bc457fc3cb25f65c4efc935a11b1b4748b3692d3c8b1ce5ea6d94d3a44a24691b81c9993009863bb3b0ecf541abb2f3b910e4be6d2c5f8a57b54ed280e86d342a3669becd960148d12a4bd79e0cbd8b7babdbf07f4d27b23ee3793468b9422ebe4eb2cd73ec432593a8704d14c29d76f6e0a973d161e7f60654ce69ba1135c14e573f55b170be5a81b7f4d64461c55eb16bf7b9120f22be349598f2f394da8460dc69e804c7e54011d53403bb7ed7ab418a21209fa96a7340327350a3c882f07c4abce4ec665a8eca8cd845d85e56d51de7c05b08c521cdbf97e8135900d18e272ec2dce6b0808f124b3c2d29a4a574ace14fb8bbf6eb26095251bb71f248c5c7f4f640724ae9d99f9cea1a3dc645f2852349da47931904c3ee6aa98cf14b3ff549d1b01daa08f6b8fe6cad7357dae72d1a29302a3e5df275b87d6e08a27b452579df9c5732705f04fc3e4768cdb6bb0b32784ad26d0c67756d1499837a3b8ddf119a75ad98927ae9f2c9889c8c7bf6b5f8b19aee83a6ec6968ca8c8bed1e6298ad7cdc8f20e1e2fe8ea8e16d389d2293f96f90cd36dfe9b83809e7607f967bd8ba11218a80012fb93c66d289469cb75ba10cccfceb09f7f8574d1acf96362215a3d1e51e1a52a980685dec4f3afd2d438c03c00c04a79f90432e9717e5600de61739a7b87478f90abf288f4d8a211d0216fefa59384b39168808fce7d1c697b070d2e9f812c696be9d414bf2b8badf0dee58dc92ea676cf19276bc9dffbc480b3d181c4b79cdfaf27f2292ed4b2d1bcd5eabf7179f8e93c80ef246d8a3c3976cf893cf211e119e6cf157047bc5fa3bd6f462da75cc1355f039f62bf6726f2e4c2fb06317742409748059014c9da4b7a14c07e72bf4b81c00b01cfc95e031452f4f0888ad1067c4bfa8a329de46af27c2d225adb8adcf6e801db11925819ca48cd2f6a040776f4894d6cfee9f659c04920326be8a5bdbc5e4bf6d0223bb23a4fb58253a801dad1d9a9729b00e5eddc6b57b956a3f836faaa531ab582f1148cee14afeb7da87a3ac37666b2ea9b6f6f6a387ec6146c8ed8557f0e67b96087e9ae527fdb8be29d58d01c0eeaaffe26a0cc2d4b6142e70f7fe6399c8fcf72557916d7bacbda988c53870332ec58f85c981b9de6cf3552ff17e5e88ad5cd0dc463ae0b286273b3905271939c60ed70577edef018b9f596a7c7dbf3a1e0ba1b1ed0fe5790495d19ef7d143513ec744d617b9e8da9c78b994fb84fc4a9599e83a9e78f21bc28a0b4f1fdfa4f5e3bf779c0b7e2de61a0fe453f12c9c26ae7812daed1e8d272a6456ae0faab4b46f37ddbbc59324a08ed5681befcd155ac336c0174b591d37b6b5225029bae8f93bd0f5b9f8a163965559b34159ef0e536e566e745bc138b9f20d2cca1098a850d40b4e1af7117134181d6488d21addad1a478c7670df561a56dca47036cca937b2574553637bc4164180fa46cad919d4518a98923d2bfbf57f9447e70ebf323a713579f7a038e2996c34c30fa6923945aea0115c130fa0c7b6d475932ae8f9c57b366a8c4fe14349f2a97d4817eeb28d7c2885389512dafda70dcc090de256654ada8565b4fd6ca46f4f778471471c18647472cc35de0123cab0a9bd1a33ee966a8269289205c5454ca750495513ec82d224586b67b9b9c69c5d9d23e24618c544ce64594962f3892531760b360d9a395fb8a4babd4e7b52867514d1f8a16bae842f255c5dbd6e0c538e775e967cabc86781f61ea904bc542397bf4bcfce6d8e83252ac6417d9b2b820ed297f8f9a7ac8440bb2bbd6503480e25eb05ca3574f1dc30c30b971c11832b43065bcffd0442205562466ce7c6ba80b026748a7f3874f9e2acb0b121479fa9cb812eae0f4845d6409a132a25ad0825b7002c92f42e8466bb364a4225d3dd97f8d164f598ea141082b1069776fccd87baf6a2563cbdbc9d1b0e2cac821cb9705b85b33932703969ac458517845c87012c785a46c16c6a278282fc62cea8dfcd740c7e0b5461224c1dd6332ca632a13c9c13d9072ab1297092332e0773feacf9d2d449de87436b3267c185698515b8948a4792f9c1328712caad35fd1a94adafe87b9b15438d70a70ac5f040898c49a367821cb13d56ef788c3fa8d61af15e3a3570d65201a5df24872208342bfcc0e3c461caaff794ef3c6798fb050d9b4b334a52a0175a2303356d8431c6f4edaac0115541487872f2b8dd17a11c5af8d125877f7cd7a59b89541e5b117b7cd583d2eedb053d388796986d5a3f8e9ba09c8b7d75c1058c65de0b2a150bc41c5ad896ad618ae0c049373598cf3ace481909cfacc4114367288db5015095236be41585ed9746c5a81e711adfe5077dd8c8b57c95e8e1f3de39f4fc448c523bd3e7c72b1fdacd6e489dc0d2a34a39ffc6460c1cb962b7a94a30c04b5426a75ffcfc69f0c4ba934d3a3da2e7935d56d6b9079a2a97b016d653a35c2cc0ce19124f887a617c951ce4e58493b4209cc294f983cc20b16f63fd52e8451b1ad13bf5342275079818deb7e2e92fd2cb9721bd30513e9976df33a0e095f780b2de747b4330e65db7b46d48baf1b3ce04cae8b1c5e65def88be1a438523000829544707055a4ade4be62d29c634dbf06ca67c0552b9a6ad475a6c67a925eb2bfec1483af3052ef3d52cb2bd9d19050453c8703a4f51a55d4352ce8fd5051546a3a3ec8984a7ef58d3f67276b814db545a9f59c31424c679fd15952e91471ae2b88aa87542d92857d8d20107afbeab7af1999d3259d9a67de54174b6567268aa8dd40080a61f468b545dc2c2dc8d11e2b945befa88b6b1f38c34d1c99cfd8ae8c41e892e36c0e66dc6f85c5ad6f68b26023233ae19628555628e30eaed6efe37dbc8a6f07d846469a1102212278193bf7cdd9faf94537d2df8ac067cc04d3f123570ee59d2d06d299353b88b36c4b80979b65781820015e7cf2ce6f1ae0eca028195c3dcef1b5d07ee2184488d1654ae993affc64b0eec0d567f470c1f2a3b8310b5cbfc1aeba09f421819cca32d16195c0a0ce087c67c291f11ab0e9c25e00e933f7b29feb7f45a1f95ed7a114f68d42271e352a0dd22a58982878b8d98641f59b13608f316b4b2d72973e34013c9698d2127bf3e998c1d465071059be8443004b990fba07e6e541941419ac800b4341c865e68a9a224fab5f9dc0f2f9beceb049720847f558d98568beb0301acb5de211fdbf17a8d79c858fd3d0ac139eaaad9f84935f8329f0a0f57b4ae955e4ac26b6c44dc4991e6f0bfb9287ae938b9ea055b9f72a3ac2f23b433430ffbcbff8b2bea1dab7f76192e4adc02f2101ed743171f87ecfa189a7fd5bd2ab99d4c20931317bac184907cbb9ad460e2ce62bf207fd286e7741e7d78f443b01df2756a749173c0c101878e332010d6cf8c8afe1cb00331049a045499806597afa3ce499a279cb42c7eb1ba2f6b3fc93ac32e008248300ac6e4809c6c1aa1260129bd2a8e55e1096644a5acfaecbfaca71a92631bb8d778a0dc19d16b23750f94ecd899cbacff3500fbd9c34014ff1586fb7e922372680f14f91670112b5fa8fd759723dc8d35cb7f2cd4a979849c886cde391a44256032b5c42d14f892df868d5c7f452b87233143201cac11ac0679cb4b5867f8126e87e5b5c41c7c1a632cc6fa076a531b460affae2857a30bdb6e24bb6317b9e9d1733746521325f288f05cd6a62fcdca2cbd070f7e38982479c9fbb6df86041c47991d1e7d8580ebbfa5a18b01f2061435dbfbcc84db8b766041d2b6344f511a1f4e29769ce017468581278f715d967a0fcc307dd29cd7822d3a2c41e7e03b73f716cf1746bf53936927614c9acee96bf912679bfe0916c84f277ad280c52daa3d979058f17fb062e90ce15ad4c2998aa052e39f5dbcc3c9349e40f0958aa23d7124ffb423add83563a62a22c5d5012693e24700781468f58c0301247c8d33ae20636fc153c6157b87879e4cd472caf022650457e39c60ed940a5dd6cc694c6cc9b78309185502a5c335c03187285147fa4f9e1e06d166120af899900b9b7709dbb5cbe3d7d71a648515426954723ece79f686bb884fc2f35f7256d890902df5e4d29cea18d8e7186bca775cd2ccddd4301e60c8be641201efec182911d3ebb1739288a461b6d331e5a9d19478a4d8f9ab1b9ece3faaddde5aea5009f5f33aece67a118b391d7951615803a8bca69acf4972932472a070e92ed180e3c36a85e8dbfdba07055943e78d496ff2252ead95a9b800740de195b2ba563d4ee0a66735b28204b06d16cd84c7f2991938c97c0d2a50492557ca96ababdcf7b40443696418db640fc6b270898fd7f1866de3a09679dfffc0e6d80e6461da22bb74ade6f45d3e6a8da8d8c786638e0bb24b2995c1e6bb76cf3196675d8ad240bdd8526a572e3f8ab299e65d0bd1796a2546f7e5f01f7750b8de822bf77559f44395dd8e1cda53470700678b7a682e8f67e7dafbd1729800063437e6d2bfd59fd533bbaca6001e220372c8ed627611ddf2a44f41c68ea2274fd904027fc8d9b5fb485960932e049e2077a6ed54b9c7e84e12c1725fd20a18fe4383194f3edad92e3a532454b28b2df6657e25b171c530e2a9dde7fddb546789fa4195d1705d7bd68015627b4c3653fdf2bb01095c7e4a48eff13d2108f5958b63bc02a71bd6109cc03cc567497aa29f75fa19ecc86786f94ba7cc89f982256b264eda207fe929d96115b7b938ec9c538597daac4425897c436e20791b6e89b1a896a6de3aeb4a24e95ca3e1a8f093c29820cdf86e1cd43a6db0c37eed3f54f7611fd340db70d3f7df6e2461081b4b6524215e2194d1d9bc312c401bfd68f984f646f9f8bffe69daa9c6b3c7d4e105a3c02625e856c90c8a241d00d0ba7ffa12bea8755677086e35def2dc769dd66516e28b9f9d32870f2cbd2f902da2e8d90950b0fffa9f1373a1e57ef90dd16fdc3701ee35b0a670340c72b07883453808e122fcd4457693fca763c7b3fe0e11fd7cb4aa82d321393db1db6c24922fe22c22cbe8bcd7bc2e7baec06977b7b2612b50616cf17541366eb55d9f2eaab17b9556a200f411ce37733091d0cecb5cd1f86a9e922c0764fc497f8fe5e16d8868e6e54bd214943b4375c53e9a13b96be8e723d2a67d1a3aff7078d8ccf73b033e93673fd8b8df71d6e5e54d3201026e2a7a0494367f1e01b46649ceb0da93b0611d54e4914b44006666094414f126e1fb239559beac9377bf8d6ad82e06181e850726e0783672657658b9a9cf8ea755ef664e99ab801afb7568449bb10438bbfec3559a1a14db2f8b406ee4de1404388bc4a8ea8984050b7a897f7fd64f660752e47997d360febd19bfa18bad3bbe1834c12cb2d532e2364363640b1a52308f05ed0b6050a54dacb618fa04d95035639eee52991b1742fa4478aab3d9b718c1ac4f7369fe4c585cc50ec0f6df1c1aa90eaeb2f3c7aba7d6024bbc00a0e89f3d9a8e5a3b58d09f6bdae3aed81ad9de672874b659776a7138116f00780c612451751c284aecec93587c4a0c0f3923e11c60e2e53086de4fbed635109078ab58abb08b562f26dad4810da47122a684d3374c7bb82f826193d8e53074d08241acbad15e6c4e9325c394238576a8ef7715563fa1b79d06aeddf4a303a5be95ae810d5c07e32fbe77f100425f7518706537d7def75c0f60108eb0b4011bc14f5c75f1b51a5349052bdd33deb4f4e7d5f9ab6a9eef2e0d4b31368b8cdb5f7efbd61c2670f8253103dbf8cd7d088e9d8c8ef05cf3eba60d048b65f391d4e94e4795b40a1433e16e36e2d42b91dcaaa000afa74d828f4c8548798d77678031c5af360e1b135000671adaefecb193c1a5eed620aaaf4c9a1c73962d85628fc16b9f116ae7f2df1a922c4eac7f50e07c05838d0cf2eea60719126bb6bc474620a683c25aef373398a5f798aa51f42522457b5ebcc4c51e2c31a164c96a5a35d80d19c36eaf64eff2e8e9636a031fe46cfc42a5c08ed73761cc9d1bd63e2fe14015bd8f1686e086b1f19e195c1138a0b480560ca8bf7964506081eb5da63cdb0146ebafd3245e7a7e46623500fae2ec817841fde5e540376083fc7dc0210585842720803506134d805df230e92e832a6c5a72e4088ea0232abd492dbe3d1e63512cf8baac8ac36290aeaab7853aaddccd9d8579711a3daa17530485a858fc06f0cee0b9ba40c37c07cf1813659dd7962db7e608b0265d5eaf0bbb100f1302f2db835507dec6b7dc5e35b6eefad674c92540012c6621a3936a4dd94762e9e79979f0d21f9a6b05161c5903a4b55329f82cbc835ed39a94fac18ffba6444bfe6d648df47b7dcc3fbbbacf8adf45b24b95ac83d91ab90fa5f75d487ec703c7dc0123b118b5e958cc3fd1ffb8f8fc627e443d3c7eda56ef5b1b860dff0451dbf4d72010db396daf2f14ca701a7c79f22666575ce1386db828c9e456d8e89ef6cd71f21398709b2e0ccd3cb72be41edfc88e735bac9f4df893a4f0a9b90e5ba6ea44123ffd15d253b9db713b69ca8b89f92f19cf4d89783f201f237d0bc0087acfcff90c6573a3becac23073509a209f2ccad31e20819cea52aaf5473dc835d0e2981eff5e249fddb413d3057cdd7e7dd7d417ced201fc98afcafeaeeb615457c72f0c8f63a3172f0a42d1585aff15a48efd5057dea547a8ac11a80a8135f46de1e74a430279ba2141c1c3e2579956a1b689255fb2c5deb8bbf189f09ba08681c7634090b712f962df33234a1f16d203e319ff3cdafe5247640cfce7975b9b31fc25982efdf9455246f967e5fe021839a9225675d3b922b348a6a95600a1a30cd4a0a94443b73e7e2d971a4c90d599b15d24c3a12980c0aace50f7c2642d2e60f5570c9724b73554e79ea2f4542bc71983b3bf3538dfcc9c59be70c33e58adece2cb2a8e1d83da64f962aa63d45f20c0c131b1a8ae30a6e69f319ccf0bbe91ef018fab9faa978e2cf79589118dfa47557a313371e62dd037f34cd45c38b98b05e5f6d852388cd12b56b9d793ed87ab263334cd377d21e8feea72dfd151f3e9b01493593c53be43de9b221e417f81bcd160bee75fdfb741ba0945e7e4f3d84e8c0207a6b498b646b52960b5d0b0730cd5a7220a618a588ae7c438b50d7ae129e822a63961540f6a4da61836982cc60bb16b20aed309702506afbdaf9173a8fc531b1199b932241f16859b392e410549e3211d5d2ad9a89095205730375a8a466b4fbc4022af8ee59e5c8c15f999bb37e95d8a9ddf776c5e21ca97ff65bc2f888f3508a54418ca4e537f4d55809352664294ead9776f35fe2b12f2658304e3433d6fa961842a40c9c472618069ca65556d5bd0a8792d8ff12f7df8fb35c15ff6f45400ed69409cd86fda5b1f0bbb5e75f816be736b4ef4c78d701e38e47df024528691b179f8390ab41bbc99fcc2c858415a16d2a42feef1e39dc49725974e4bc67bee461cbdafd14fcae889939d1d6cf7aa7c4eda6ce8f0c06b9eae6fa9b4eddea87923f80d5bbc814c71568686d834796c513074627d54924e0ee72921ee8af990c4c36263d73cf734e9993c3c733f4524382fe8cd169dd7d997c9e89c3593a5d943bd025dacc32ff8b3ba3b0a98fdf97683b5cdf93f2d0f82cbcf347534a861c688694e5746ff8a2c5241f99d93e0f4b7e63a8a636192a7ce0d7f83495629cc0d1570acfd3032943467b8fe520e98c57cb256b4b8385f4f3fff536b8534a832f15d3bb49be31ceca54697cfc46385fa498a72c353fde3644cf3d333c53a943537c242ebcffa1ed1e38166d4613d28f192c1173cc35cef65799d879265e28e5125072eb915cfa91293aa9ea2b4f60249dd18cc9782cfb3e14a4ee90e03c6f6f56d7e47b2e9ee5bfd2a14b7b13c189271acd40b4a1eb0d15633aa6fed0b525ec065ba365fd8d098101b723a96632f69f776954beaf3bad842ca1284d6091f2610a22d63164f00fde9ec25afb8c6a4f949cedf06f0ae4839157229d04f79780d84a74a668cd909edf920b17faed313b0f71a13e4e1aae3647cc052dacfc907458ad9b3b919f365f8ac3da832cf14f6216ddcc63e348616fab7392ffccd94579ea1ddebc3442a8f9e91a77c61b018b6db4cbb88ab6fac4d5c734113cecf57b3595828452da1eaf15047f29074f83ae04ee20abd95099a011a2f8c90b95b8fd5061c2d6240a9b125be1db396e4fe180cecec5ee78388ebdca44a503954d8a927356c61c5b4c219b728a14ef24a381c9745ba2c990f640e3a9b62507019fd301467d769e1e2818100307149351d3cd519d9d9f83491316da55ff5e1d7810fb1370ddbaa39627e83ab55ec16d1c672be0f29da566ca167a6977273a8d222a6a909a7e7b75ead0f9e1319905c5aee8053d1b629ab83c87d35ab737a09e267489406b699f5a43abb3cd1fc0c7e22fdec231bff468 +Output = 50c00b0c40a630260c6c04a34e07a9f9 + +Len = 105448 +Msg = cb8a168a971fad03ae945ff6fe6eb1a159891d6726ff65d4574b26dc9bafb063d4d31503cbae800922a9c8c08b0245f3386fe3ad930574432e574b94fde20690c3a9abf7ca1cf763d73ef2895d07c7bcf107d3b3fe4dfc8bba87440f586b9d38805500f0fc31b91bb49b05d8dc45de046c991601d0a0a3b5e1233ad515101f63f21e3b75c9b46f39a0082836708433d4916dd31f72c611c88d72546c9a9a3119034e840f996fc0c385cc832a818b6e3348cb33964a87efcca5bdbb5e51d07d639a2c0544d42855c34a303f3c7723362a79fa5eecc2abe5ca114c9633a07cab489fffe39fe2a8d540d77c84f4ba1433c00c437bac41f99ac8b9670e71f16463d1fb1049a52bb7e94314f879dbb2260efde9eeb25b2e3ab7d185564ba2ab514c0594a75de0181c39d3e9eb4778c8206fe9f8432d83f336e3ea5d60744d360c0eec530b47d70fa16cf83e9f155362ccfd8d228911abf7b5c71d29cfb1fbfa5a528e20863012790c2abafb5a0cf5eaf061f04d0a895ca27f0b71d1e92c335f06c0f4e45e401abf261d22086554e5c655431a620cba1d5c5b56ef3df70a7dcdd6ff2585dc9e7647b7eb374d0814ab60c349144ad8cf768d13509d55407661ac94b829ed4873ae7b873c02b28a75d01e021ee5ebb6eeef9d6da285020e96686406920902eae64bc25db98920359edb6ad968952fed4011f532f4af2aa792195df536ccae0920d4830309d67d4fb754ab11d02dfdc7ec63fb2aed21b65493fdff284b7ad8ef48d1283fd5f1b321eac44872fdb43c8a1a6e181c36e58f5dc19ab3697a1c68e287ca18dac5e0a8f35db2abc49832d67ff4b8b4d177039b0a437bdf7e6bb8452b0548bb9c80ad460d38a63bcf48b0b2ee9fcb38125781c4a34225ed30c5595912e9d2794caf6073b6a428605bb634b81f462f0aa57e69f16fe522434730048bde5cf1bab4f9ff1937c9c1822f89c9d0590f6a945295c30ab755f84b8b56c3c3d9852ce69a07941fd8cef809146a74e2e622063de34495f6c3b9326bc4dc9de9498d0b65c780266de1db565ed2013fd60ca88b6c1e32e99fdb3a550db96d9be6779b169f030dbeeb9a1a62e731f5319414c97f8bcd08c6ec4700eb9833afc3a0abd8d6fd155663814bb1a40df9ef520546ac6c01b66d35c54e327c74fa4a1f002d6bd2e5c7021d173bc8a438f196ab0fe97ad936a20a3c123af88e08d6e7b7ee447d92c0dfbaf495b388ebd1e293439b475a4f925887e6bb517babbe8f2e915339369ff72625f1e3fb18003e948d2392a675557da28b38a9dce35afdecc6b71554bd80f064ec1be95ba16be9cf2d51da4ff3735f46be3cc22258242eb658311edd3bbd1561b67b901b4bb5385b1bd75d8afb31a00dc9f9ef6d018fb7b58b05541cd7dfcde42c17be823d6595fffebd019eb518a8bf54771903062501b1083da159ba6d7fb7f6f95cd9a00367847e09b0d54aafdf2406bf262d906e747276e1ecdb0bef95a0bb2953689b1716b344c55175e27eae0388d80033c7f178bf7ef71debf3ee766823ad8977572a0a52f8f8ccc7a40e7b2681ca8d5dd2367662c8891bd19af18ad7d88fe84efcc3aa2942ab0913b9e6af539a9eb7f3d9c5d421fb9ed0d5278039b47fd75735b16b6002c8e5efa1498fb3537b5b643c0627fcc5bf3f233fc323ebc9c38bbd739ea994a335ae68b87b8feeeecb097e817fe35416be73fc56956308dc49b50451ec05acd52f0e5ca17770c7eb33b1ec0a6c8146db9d424363c6c7f8b6bc5c1317c30711605e0eb1a566b9a8145a59961ff68939de07b4e0ae7dd8231fc289d20d4a382b0c6cb5500a70f3f82fe90c6408458495e5a2d2bc7fe31cf2de0343297aaa1f62a1fe0c2118bca51e0587cf3e0c80fac1b916a3bd1e201dcbbd299200a80a451fe6bf190c197357845eddac0c75cf7127220c2fccd25b631782d97e3fdd9330c8a454e6fa53bc92910292aab6895b732ee72c7fd2e5bc743ff6bd10ce626d6ac7a3687bd10fc0dcadb84fd124914c873ed21d9ab59d6cdaa9e17d4f957fbf7b82aba1de7b95a6c04049bc2a3fd4ca36bfa988885f43931dbf0bc1447d7bb1e96384a719de2d97c3b27e80bced9cfc0619351452b61e58c3e83b30f56ca06d3ed0f52334e41fbb6f6c1d4490172f0a81b53e6affa478e4568b3b726c4b34180133c8bd3574b2394bd4eeafaca6d61d2ff98c319710975f5e12d130b10380ddbbf3c31c2675303adf53bb6a1a80d95d974ee61223e1c4f061e4c612ca7acce2f378afe90ed1dfe5b4524a1ce28f80f1411d15b5aa0147bfe969e1bfc19a604f312a53cbf66f08635137646e0ab91301b5cce2c1345768f57d09ece09e4a834dfe71796be537f2db3e6bd1089ce8d9b77cc512dfcacb6fbaa62cad1c67717e04e0b5e770e311e776045759919f031b391d6e70b67245a335ea3aee1c26f9999b615e6683f9e52d5c2a62c4b21cf221af2031c3ef36ad4e8fd49b7587e2c91c3a09d4be4c2d9b0db438f3d9121a9d33420e75d2311eebb6efe9b70a06a4c94f0b5f7fb772891bcfa6b774615aa1ec99196da1662531e8237eb3f7774173e17a33ebc8199e154dbb5c2e4c2531bac79a5ec81f4772778adf64b9c183df57f9e4dd3515ab77d81a19fb25e3ea406b168036a4563dc1f8ba31c8837ef58958f9d62fc6cf36a6da6830ae24a17b2ebec191cb8bae10babd6160d29a9796e67fc99851255f82d22321499bb4ee9fa4bbb01645048f8704cd65b5ac85722e9fd352726cda2b57a4bc2bacea5c321d4a69cb56cc98616c4830b0787bcc79855b5c7aaca86e9d7dc4ac70a1c4a5d5bec7d0fb9b86cd8c852def28f16af81362c3232a8d2c681cbbd9fbd67051163f4ac4f8262b9e2e789b5c11b7679e90a78e7e2f4b5e21500fdb8bb14760b837d889e8ea354f3a408e757c9e4424421c9fd23589c368aeafe0a384d7aaba22900942dcad114f838d34dd369fb66e7c2462f490377cf0fc0bf6dc6975e6c7b6aa383f4749a073a09cd399321bf78e743158bc36435c4133efb94ee591e5cc9d0ccf46d2c7cc03b9f5d472171aeecc54cae9f4d0b44da27ae091c09e358e14fe3e3420252e7c46f8219d308ea4836f41787d620593365af968e6fb3c68c9e602c9d195e786988583a7989b3ec29ec165c27cd07ee7feb2d90e20c868337e89d0340c6cc0d70708820f2c7ad07b2708e8304e04e3b88ff2425aa7edca9c954692074f6f5a2ab3171ee2c097ebd8068df24a5bc6db0fd0625bd5e43209aef7656dcb01645a8683fa7ea6beb838df2498a9990ce00ef3a9494d063d61cd6e8a2e8b0789146bf45ff8cce68da65e9a677038a4c718256c02f13f761b40c0e637e814435147337b2f5b2d2795290611b85fc5f3f538c882c3a05aabe799881de7dd3007c0c45a23db69cbf33e08d84b00ab790fff069e3ed59fc62f0732cd1b805305dc3e5589f44c6bced1f00d7b50259d7b7f4b4b50a71e36aa8ae5d338e9eb93be4933c068f768a85e4a13fe9828117df4cb43ce85c587ac2e42e746708e11e581d707ce9e33186aa1e50fa4d6dcaa930b7c4e59e6a1f84b7ce177521e12d990760c2347d4b045f7c22a4cc7de72da26e919d3b21b425a59b9effcbeea7e2adec773edf3b177d599e7a1332f57f58780b52a3ca2cbb1931f10f2de537bd9ee159991ce9ade8fb29539d32aa3ea6a9be79838f0f19ef48de5a77484d97a2b0c7e17f02f030200c236df479aed3fdbfda4baca57673e152ef3a6fc58188e7c6c61661776f7c6d3efc30185ecd3fd4f95ff4268d9cc501b60903613c1d760d5f606b18e0d3ed20f1f83c916861ecdcf4b3f589adee77f0f0a057f3f27e0983d92b41ede5aa0cdbc3cbf5d81d296566207ae26e9ce8170f8149ba80bf2f9ddbd28b5d58ec7e55fe32dc0e54e36024110b192d1dc1162cede6597d9fc8bebd75ca04fff26bad4318bdacb8a061c2b35e1313484fc0f523fcae7443c9c587d2f22e2cbc42e9d36ebbc2b2b7330ebdadbde6fdc65cf31196bc281e9f672c2798d17d6714b2fd7d3357e0826ca540bd5db0e54d29cdfdd7efcd11bcd320632a598446588bdb1d073b5da5906b4fae4e4dc7ac65d52b47c4b97fc9e3916e10ecbf9b0755a413af0de16d706115babded18628aec6afd47746e64df075ca8abfb15863ef2d00549fdbfe7ef790e7ee61638222f556dac9343891cbfac97789ae205b66bc4a2286453416d615ca804cd56178708152fc1b1de8407ea47d456742dfadc0c2f9ce584aaf05e746094c4ca2940f183c053c5099209a6fd7d85babe2b8f479eb812c53161573b97393767630c4f0240db6c3f20fa647a57923e2ddf871d99a1e2c65fe112d0a5585b22452e7b8c39bdbacb889e943f02873a70186ebd3032a4340a1e2a4c16fc262ab7f69303a2f869030449b8ebf3d01aea9e12d23a61b314106078535974d08f4c9ae427110dcec138a8fb266e2d5371174a95a08b2c8b802c6c0712e794a302153d965130373d54c02c055d97461d2834f829502beb3c56dc8f32ef52d0e40d3902a5b7fdb9c4a23e0000d4f3c88dbee819467799483636a53c942f47b4243f1c9c7ab1c60fe51806b76603003f35939530657d5fae197e1b06a37912d8e3e6347d8dd515a42f54bec4bd8e49149544c0d01ee7eb9756bba28fd953609993b114f867a88900f3b6caba6fdd3ae33d50ff7acb2dc99e6e6dd01abe24ad90c41e32cf80928cb0e2dcbf0b056662259e26a58302d5761dd1033839ba835638e59c124581299d3e7d25103906b03b46286457ab4e758db01f2a2f8f66e5e70c88a9381cb1d42704132e42b6fc4142ef7c688a3616745cdfb9313a6e3bd2fc762dc41897bb38d6ac4566db275eaff56bfac1b1c5f35880072fc6fd68b1c0f320357b385905be1881945d5dec9642ef5633fe62dd5d9873c0f339cd1151366775304d1bc329ea693e80702f894ba07d28a87d11debdbac487a4284dcaa2a9d5ffcea847887034554d8a5de47fd75f4b7dd8dc536cbc45eee5a300d4272ea1ab2a311b2ffba122490922650152d1c5b6a0358a8be9a1c04f45706214994da4638f382449bf153ac12be923fa84c37a6b4a5f064fe836908231acba73b398389b891442391544f45a103f2954a814e3c5d6b5edf3eac35d1434b87875e886b4cfc285f352c0d8d5804094d3940f4ea852dfca903c63d07c71c9243a9fbaa1cf5ca5edc64b341954b0479ab13d5ce92e9ec01d9b6dd5f6852759506f559c61eeeebdbc2976d1bf08869fb140b5037cfd06121f7e2cc39dfda18ffd853c205f79d274819b6a3c02575fb369109f85628a255050a6edcf5f4c7cb76c1ab7c8f316c454deaa89e5bbc7c81d329f5175425c790551a4252b82f8157a2cae5d08b53c20f913c57a3123e04c579e5b7f3584ea8dab8304679ad1970842dfae90621e6064bbd17aafd0d32748dd1cb37d48b2cabfbd6526298f939fd19bc5a9f667b71a2c2788389f2752036a283e65e04154639ba588b7ef6c7178ee0faf0ef38be7cfd3c6b89dccc7290b1cc363b12ca1d24bbe0e6e082dc3d3c8d9f8cc6c2c315907f813e308bd12b0b4dd292d43c6dcb4f9735275b5692832f601f1de4fe50a634905898817f4ac918727e41b8c536484e3781c403e260c278712853508d2799f0988a21829e7e73408896e8ef936dbca9018c64e00f8e22a02682d6145590174cffe0823dd1b7520af7e33282905a4fe95f1eb0fbc363ca2ee9f44f3840d348d12d1f63ba013b8efe282dc478a2442795b8fe505be728e3aa214766c2353753068b126b0014544ea4813c49d9b3756f3573f5eb086426949d3543c2bc1b0560737f804317f447ba856bd767adaa334d52facb290b20a2068e8fb00c2ddc8699a172309307875ffc284fc8c6fd6fc7e973b448b46b05e760059656eb1e5fff2417cdeb02d8b7e3391593d50fd0ea796c2009333130fa3ccb8ab2fd08968cbb295df67938936a1a9cd5a1c7ea2f0390fee161564b63e6e86fa64b6c0a9d4b01d1fc57a2de408a4d4aefdf65fe21a256c63f2477a80bb33473e0c96c9a3b8418437b562e9ce5fec56eebb779f4aeaf11edc1ba5ff030486800c195c560791f49a8625de4198caec72e5290c973de120a9af08cd6ccda8dcc3dd0153f035e04dc283ad38dfe3c829eb2abd11f24bab389f65200a4e4126aa75395b2a12cf31c19ea8a20f1f2fe6291237ee441af497ad529717f90dfdfc7436998d4b5823f4d4717daabd89ed936e7a95430f7bb9450385ad57263654a8ce6a862e441ae4a80b0d6b3de0aa9d5e6e96bb31d0bf0a11bf8b2043fe5205aa1d9387a480e571c9e9a509b204ebcfa5adf92261343f87ac55e588850deb517ee6440686ae426be8d4ead1cda6e7f517b1145327a69782734b274e90b16cf895ccee8b5b18bc337371414be723099e12fc6ad61ba431bae523c30adda5514b9d1615ae884cad58f8233ad08515db3b25f47f23a3b9a86190543b25e24622cae3663bb894d6a04ce58f5a182dfbd74cdf4dd3b4566356470371122835006c070741d36207334fafda0a018b484178539d4ceb00ba1de5bb9cfeca9a5c809780871d7f0365eed5c24427d3927a9348dfee9627b13555b13feb51d6f4bf333fb7d17d914527560d54925d42d62b4dd352519e3c1e5eb753646d1ec9bfd394bf2d74d6ac8fd22540b7633ed1ced0fd825b54e97ad0ac9f4699a0ba05544021b041ffad334becd90a6b2530f2d5120ed04b66fc8640959a056014b83c7a6b669da5c085d821ddcdd4f066d84881551e67b3164bc116a0241a58379db16adbdfe1b965e4dd7a2b803ae786a9256c1098a312c15bbdab62b9efe287df16de180a270d5e4ee5ed6c9ca6a133082bfdeafa0cfb26a0fe7743e8007f93f0df2c9651c812282873c4077fa2bdca89ceaf3adf1fcc84bff612ca2af6bfda777cdedd536f584205f9c692b5a9bddba2700886a456178a0d27067bff3d03c9e7627d539b67504a6bfa4d74bb3601d4f6d28254e63a5c951d13babfd14dfbf0a53280af765a8a9fcef7c1441cd22a44db48b53c11571c44644eb83c4d93f8dd557f713790b377b0b374da873708a7b9e4550992b216d6f6773a7747c0b98aee5c7bd782570c982b9df3f194b643fa92868a080f45040d49da598088d72942b24eea1c2655b07c7ef2e79f12f70ea36d564a38f846a93fbce23e6c65fd6d90b7813cc78a0969851966d24b7895e332b8b83804e44370deae336b8365aff0f56cb7d65223de7262894e567f4c0f4c18f340b60459a7f57abc52436e1e7b5df1504759548a6175655d3db6b2f3cfb3d6ab7456afdef0918465a358a4e6cbff14f0b43847342eed2df399a57f0653a4ec4fc79c7fdac9ef9c18cb3d90553e6ec0cc82f592a793342ceb06954c0a37b9da6ebef9ecd3706a22642e44e8f02f2785423813df6b3b04d2b1f8f8a255e84d2176cee18f6fa09ba7d64120e73e3ab3e300480575e582b9cfd6d5520a9fe1e942067bf5dff5b6eeaccd98344395cd8e6a75375d0ead06dd74c84033fd4eb118bc8c4ab9470c4ffd91d8b7f166ad74318c2f8a8cf22843ea5204be10e2d8d2560176bf8e6d29c822f776150ac8dbbb27b88db617d8fda65ae82aa36b63c4d22bb1544ee7aab4bc096e3433d2f2a70eeb701e4e801b83bac9b79894c5e8991cf43cb38d779863981b467198dc7ca5ebf7535fc84842510d9140ed0692f9dc2f5a1402df90ae8ce8d310ecb899bf4edec5d2d097f2e5fbfb5c04867d651ff495c7d7c0c9e565b72abb6dd4279d430853f16f0f41f26edb208482f37dbeb378ccc7d88be0c84668da5ebde64a599068e7e4986a6ad95574f9a53cb26bf25cef50d4c6b2a8bbd92874177181a5413ff70729df80670a22600328a251dcc284bebe6902d37652965c84803934dcf6aa293e3bb4dfbb276e12c9a954405481c36d521f2d7cfe0ef69b8813658e35fc5775f994a8d6fb938103a981b30c47c29181d841970d9463826bfb6b96ec64a4c073d5bf3c049cf113c94f5c4f244b075772ad8ae003cdd2b2346ad33dddcd829d993f25eef713a29eca1783a916b2c2bde64e45890e2eef1e8b32f4dae0f538176ca273222ce42a7a8c9eb2215233771d23372c026b2c0b1fd7004afe845017f644bc0175f4a31b4f874142787531a6fddff488dcd949d94ebe3f40093682c482d7d85b7b0cc4d77650abdefeee31e4f86302f688a70cbc23976c7e8b85f1a0758c740b71c3de01976f3ac2252ba8836552eeff9672e93626f9044115d1213e26e93b7c2ab8330c1b498aa69bbc2a34ed36250e76bb73d9c159835208d696101f648b37e66878698a55f7e6c32e2b6bf87321adb9ef1119ab4f860c04d4c4b8d784dfc93543129c6d3b1f2d2be0208b1fa07147c09c55781d3178d97a7a318ae7d0c5aaa7e6a6372c6f7cc43680ae24bb24a0873b31b567cfb5d864da256118b8cec956bea187ac40497d56937e38cb53961bc67a5dc57b0b332128b464d7e4d2d55747da224b7e517fbd5e933734e1817b6f801e5eea24883fef8f99c71a71be8afc189ae7762fd8789946e64a3709cd2af86e97d3b7f6af329013eaba8d31e4663423614f8c333daabd99ed35c3968f4b62dc674aa363f8c1bf5027cdb4b7eced7c02dde8e21b09ac86d218784f3a50532b440d3220eeed53d9cef15f35862097402151423c69c4e4719a08804e47a8b8be400a18d509f57f5bdab80d640f27da2d297bc9ef81e7f92a3c3dfc55410102885aee6d2457c98ac22dec56e4b58b4caf65be0e6005eb410d33193ae8d8e1b735ff2abd932aa22cb9131eaa1c3b93652370887e5268575297393aca6d61d35d33972f78a62547db8d34bf959ee4089a45d46ba82b1bb4b454990339776e5e4b0dcd9d2cd1ca02fddb0d6f97d1612372630bf80a5eb27bccc1fd12f68b60db37311cd448aa7b6c2a1ef77f3f5815ac8427818e1361af25226bbfda801debe27829ef656a94cbfbe6b5ad8eea9773ec25ffcfce51e874395bce5bda64a361fca464bfe0f1253e3a9a5b7a1f28142e6afe4851195437a430cf467b9322b05592327e28a78ad04490db6cf7a0865297b163bdbfff88e3a1a3f370898538c9593ba8e29459763a61a71066a09363d732580cbc66f16e711efb6ee8f0312552cf618e1ead4761a837d5efd50f986f1690b74fc0e09f83745eafa7fc5a1756e13aac489ebe21dbbe19b5b0348f0006953567a367a74a5641f359254721b87bf92d646eff515922f099cf0801b96ab8d792d1ae1d3592558e7f506d35e184d30f0a2277acf15df5c43a7a5dc91958f4622b9dd65e15f81f9e555df665041d1aa7737ee91438b0c2cd7e4037f7292b47a97224a2b6c2fc031617ba474113e1a136dbd239e171f1f860c7c91d186382312218fea993c70eae7a28fdd656ab630551b5b4f08147822512b97d73b952ce3f70628431818cb0803f1ba12a020511c56c93af937023f1c777c5c5e236619fc0f8e17df11cae8216c9623cc8ffeb8e500bf82a993a91b16df47f4adf2c2a57744038146ea186e3d0cd9f49299cb939339445ae784d0b51771d4874d1171785b7dab91fe0dcb0664ca0152ed264e892feba1ea3c7241b427156a3cc4e63b3bb0a2d06c91e0ab579f8e5867649e5043bffd1f5b2fc5c2c14eb3533b9cdbe8967e9ab83d87cd7f0af540245b7f6a99694e5704d549e51c849533d5ad5c573f30ce4fab2a663a11c66fc9ae56c6f0f1a2e1e1987f103a17a4037d39ba8dc209b2a7a8f35bb8912734140f3e7fc2992096828325820e2d7acaa17ac789b6830ec3128dd7f904398afbecfb1cfefacdedee3825f106cb240f9d7610c6435f04160c16e69e2cd39a02c4ff758ffcf6f522520caf4532ce889cc68a28800f11ace935bb9b911bac1c56375666e0a13f7785690409692e9fc2eaece5ab3b1652e34ee50995f8ef172750fbf8b458145cbddfdc2b1ba523c638c1b8907f407fad110fc409ba1bcf9c23b6b9ed493d7ed52df75286ce4139cb54e8d2928ed773a79ef27bc2f341e4c47851183e0bd706333197741f088497377d29e1f3be471acaf3c0b23c29b356168ee9c1f2e470d5fd3085eafdb2b866921a4a8dbbf9da9b9d7640108042ba4c1bce465b11bb4e12bb928a5b28b523cd62951480f326d61fa8903c3e95289cee599e2f8fa477bae6f6be6e70a9f70df531554f5fa32d84cd74a97ae483c1a1655a676d05b102fc79341ef9d08762c00586c2c3d5d1f62cce882ac4a953f713d9a692c96443435cf20019f323cadd8326ea443788876816496c79e0350cb03871c38508555f222279df1723137b4f9d80e4437520cc6d8967a9009631b6d65a563baaf57f0f8795385b805246a0a2573afc274346a9eccf50c626b0455a50bfb09668578b5a5afe54fbbd486444bdf97dba586aa224ce2e2b4b52f418ff06afa65a26f5204983a5f84734cd166c88cb70a73fb2db48f9ef20c1ee2c53ade07460114e98e7e2ebd24ac84ea90422eb143c4a42e2991a565959af611e9d6cc65507424708872f78cd720573a3d56dce1e082bcac486a4cdb6fb9d13939f45a099c376790da93813dd99870c853156192ffdd3401e48ed474c31136c52013f5689bb344c6ff504a54ce7d47f15c2e3b49043c90ab987fdaa65219ad4256a63d06d180428f5129b14608376361c2d1e87890195925decdde047f3b9b3d282b8f78d016e7569a9054a6296f597611d0f7b615fc03ed11e94cf3ad0f97122f246b1309ffb9b91614a2d9947d70cae38bd766286d178dfc62a6188e0e176dd6215e79f1a320235e373a74fbfa6fcc9263061d29e50a74d8ca87c774af92acb792e8223999c121fd7889fca25e9cf7b907025facec632e417150a5137c9f6b3e098680244bf3416e38ffc54a229ec8c1e86a8223fba836c1079f25cceda405f3f5b83844425cee1b292a8335eedbdc47779d49219b401ad1edc1ce138b371953d80b9f3c1564a49ea988aaf80bda9eb44519091833c146fea4770279cdcf21e820df495e2d90e1634aa8a12312118c82c16c368a5db24791cc1d67823de2ac2b70d1bb4d035841037cf90a298a27224d8d15760a81899945b53361af440804884851696b3f512fe9c0f84a9dec720c7ef8a33bfb47cdc884f047856398a5e7a907fcd83b29e22aa0a724e6d2a1988791a473fcdf08e531da1dc847417452b1e840228c5f5ba1bda2a01d737a51f1302011263d485d6671af9e342bcb8f84efd07170fa3a5d06557a4c3054e766129294bf2871a9bdc8049fe229b76442b31dfc2c56a64ea6968e91fc1c1fcc76733b7a1f093e85829077059a075e9e2663b8c5c142151eb0c8b574301f487bdba9775aa126f86e7446258b265ba5ebb32d4cb7e0c1cb2d141396bb98d843882e1bf280f62043c6eb5fbc9af7a501df7166465d0b643cfc391d7eb296d5b573e64119b77e838521605398bfbe6216ebd9b5323f9197fefea82cea03aa75f2c18ccf7958babf40f06bb83653cb1139935470acba23db65b6e9e865295457afe399fd8ddf3b321bd675f43201be410e589a5ef25722bd15c766d67c9e24e9317c9681c3c5608a5a26079e0843f86ff9cde3a6bfb12eab9382a76daccc8cb91bdefac2a7a5cb36a061a92c259519fc7045f90e71329825437b3414525efc35e39d3f56c5faebb5633bc315167f8385265312ec93660fc8ca33956119a003ee1d39eca49b2f42853706fdff576dd5787097f9c7a2c5f5f48c2e33ea7f4a34502d278b4293dd50248045b23164da7074e376f6363bdcdb370deda806dfa7fdea980883a74c6fa521c38a7851cb5ff4d8f36290aebb15301eb3d46a4cd763d14be23f7e493160b20b9547c8d6f768d33324fd61979cf9850a3274e322e2e84ec2904ec3aecf5af7206a001c47758f8c020ca9e1877e045a87fe61ab3f8ecfd70d26b90c5e82b8e52eb635fb19c23e9fc3fefa8904cac011167c1d3af927650a7a29f0b0cef7f51c750e7bddd479e07f078051d0960fb759443ffa1ac669424997fea84976abaa0d91d7244cede92fba3b45624091b954838fbe9ab34db10214f529223efbfa422913a4d1b0ecbc76c1dd928e61ae542230678c71ace59b1f0d004e0129b580580f690c06c2574050367d0c48bc326c9ae04a0e11503483e39247b1c76239ba5621105125c994314688882723a8d46f3903c5c7ec5591180a354a18e7a10f24c6ee8828d15f49ebb4288d67a1bfead8872b695e7525a1a3fd7675d7e43e9c4c14f86f077bfbdefc33970b32357a0c350fb793165e38ecc427d659633fc3679cdabf03519817d9df5f64703b616fbf112d48d1a3ea07c8f533c5736f6cb8079382b303bbb84bb10172115ad7b7f959d98a4fa36bab2accc38bc44240fd84d2bca764ce8a5f0ffb0f162e399babbf831a814c86f2341a6e9baa63448c64c28f94a354f261eecd2e54d5fb8afbbf1ac130bcc00abbf74f350a1a22f8a624f964a820f3edc6fa0ba17f1c39cd7c54a37ad8973aad4d8741a67b5573ed22d08218738ad23f2e13541aea63497f922ee2365e9b1ccd1b469a398be6e68086da0501635b6054fbad3ef12345ab2fd1804f8a5f530708a9b7a174a838eb6146b3fab6041d3eddd42a14bab63dff4cbf0b53cd473959de7d7cffce4cd602ede6f0bbbcd23ace283c3c8dde2fb68664bf22879592c8b5cd0af91ddd0648cdb4fc12f07c6a5e8ec2983702d1dc3a00e666586369ee8b8b42d6ae83f7510b9c24da8d118b18d2f13b7cbbfc4c5842cf60293f6fc0a6ec4ade651fbac3b998fedc16e1a74f7a42b6016e3e0294306b72608c2a1520588584fe3acf3ab8ac6b863945931a501b282da2c13f9e4fd11e7a4613baec0f7fc1ca30dc3f7c5ca60d92cacb23e33367fdc8ae2a3337e5d6d647af34646ce4893b7b04add3080632f9d51f3c06ba4fdd2e27621dab57ecae1d7b0a82a91056115d27e8343c667befba9d950cdde82c0753ba8cf02a86cac37e84c6731b6eca84a1416a13ee0ff418ca8ccaa1fbf54e62e9028d56133d16a353e5817a1de0c86fa267f8a14a6d255aa4032ebff37a3d7c689fc1c3f7f336ea482dba2c330eb64ecafc1280d4167631c1914fab56ef6fa05cd2e8be6b31d1f4b5bdeefdfd513a8e958e56173d946d1abdc79bf898bd5b9b205c6099df814e5f47268e63df40cbcb9c9f21f8c95f8081f316a22c3b6c87b97d8ca80ab76a228656e816f24b65c0624a9f049a29e047140bfee0baa1958a97aef44d759544e5067f93172de438df0f2a0e8c7fb1cf273d52f0d6287d90ca924f13bf6efbba0c5c2b881d7b1c227e0ea58e181df364b75a828cf0fa2216de45d87b8c5b5d221f03e557886e65bb040d576e35e981495e17f533dfa431702c2ec59c22bf2c25837a3781f68c438b2777ba5f6496ddf5b1e23585e0cb2e353ac9b0e6113f0b2ce03b8c87c63957eb4eda48b2327a5bf22945cde3b2b36aee808304f9d62f5cb09bd46ee9a609f583f0a18d071e189db74abf18dda4019a04a3f74c37f014a3493cb15917e482cecda369e1de95f615cd8cbac0f4534a1e000ba2f130ed83716f497ed5a320182620dd9001a91897569d75c530984ed179792e029e653cf0399b28796f1bd75e9e3605b046e73470c2bf8c6af269d55c3ec891829e554cff8e45705d7fd278aab975c2473c197826fcac371880b9a53ec086bccf9b81bbe5c206b787a27782a0fa5889c14bd0320e76dc0c6a66382cedb12c3635f06b086787474484516b93c5c356c2cb108c10bba3c782bd0d45eb0d93316452477190d9409fcdc0172f2a8db71913a104ad92930607209d00635e02c93eed910b4603df8078a9e76e52956d47f7e30fa2c5164930136c96ca30f461c59d289ea658dfceb95a7f56b15682e8e87bb74375533a329464dd16d50f5caf3ae4bbd7c32a634b6dbd949a9aab61753b2d1708f6f87ce3c583e8b9ab7ed54f7b9e0db8cc1b5cca202ab03f94d1cfc6927478aca1f53cc125f915dbd8002cc72a3194ce3bdc1acf532a28921a6a0c2190fa52caf0fa187f382cfb19c53391aaa937e7849ccd3bcf7924844e95c4d52ab9274bd08e778e629e97fee01d69c26e8b298c78596f2e4f24b249c1b18289467d73ba59b4ee1d1fbbd297cb2b432d87327eea261c4260c2c84befa7d813b709507824b31ede230b02655c377930319951b086fa3fe771cee669fc4d9408dcf7c49d219916c86eb914b8c2b1a1c18cf94b66f9714ebeefc80194e64f5fc269765c6b1768572d2ebe655551c61f678e4b91faa837c3492942ac45340995e0fb298a6aacad3a7d016f76b39fe16c92b3e4c7f419aa3816ccc349037c28f0d4f065d10427e44b587550bb6bf39ff3f3ac795fdbd435079828de5a481509eb2ee7dfc2c03f8a041ff916b5e6f35e5feac65dbc2a5e84dc4debd8729b9548df5f5febc2374a1aff641b0608ad15a8fae890268f681f0600b884660466835257d6b70e71d1de13879549c30626e11c7f8da8582bfdac352f6860eb924155b2ef358bdc34187210575403b230fcdc05384a6d6724836c9ea2ce2ffd9ea482e70fec4cc99b839c7dc900e7783b976d1fcf9f5dd80b7206af256a4000ac18916b247b885b0aabb3d8672c5369687f2aa8affcf82f3351d0e301bd2f892d1617bbe763bd0523e96e9cbc46d62a6a2c8b5c5403dad15e9b71d6e2476d1ba4157c55a325695c59c5135722e0fe2f9328058756146462cfc75ff72189772ca3af45c4f2310bc52ed74884557b19ed75ea3fd610df3358195df1c04a03ec30ae3bea864f2712d415988490ae85e7e8a4eb80b52ea4b625cdd7edcee6472acc1653f12634781d1da0714e28a881b6a592b47ea10a056b504fcd9a8f70b3b1539e7ff0012c9498e6520a0ba8de0f24a8b1dd80163d81c17c31979e6e63ea1e6b89285db3b21d04d29cbb439db98ea06694bf4ba133aa66edf5ce40084a4ad07878d590ca4f71ef76f31d9c73b570b863bde227ce76dfba4a1eea45c99e66660ee0103f916f23c727f7996cc76c55eb349fdebb0a81a239f51f74164edabd5da34160b0c58ba31a8a1cc74b0548bea73dad1d6bc1ee82749379e417e479c005ba3f3faac34f8057f1d52fadb9d51b8af37826b0911800e889b0c2e147060f1cc81c158407054c1e13a32b0b619bece50a93732ff4989e046c4698f8d31a0b01617a7ab32d5756cb541951ea7907b363c7618b4068daca56afbdced515004431fadce7de92b040ee37aa2cd17c930f85de64e7887a79166dc888dcfc89533b4d18b5e55cd3aa8b0522d82446f8d841a99430106e85ddf2b84b3a5bd5acad60b13f87ebc46c90a58eca25c0b15a41fa6dad358e793783efa4ac44c3f6fb5944ecc3e5639bca2d111982159ab73d6aaa307e07ca2eec058dd1602a9de6f201687e6a30f54978ba6e03ef1a1abefebcd1a08b095bf63fcd2dbd0b6e521c2d104bd4870d1953f4d31cfc75b5b93f3aa2f12c58bcac759f657fc60282791d09005f9daecc3851db019e519a7b0ece6dc799325bb434138748d49aea098b40127c14284610eab977b072a1d1dc73c304952a6138729b5673f1cc9a2666015be5ce1a02e15d98f1678a2a7bb04c90e39b963517436a4ab501fad8525c1a6396df90d1bc0514dba036d9363dca6dde768f4549e3111dbac5adbe8831dfb92aa78c4ecbc225d92b3c423816666492c5127c1cc953260f73fed3d74cd745a4eef4586278a3d81cf02c36215b94336ddd3deea733d5f6b1fed710bfa6b1027ff903e06658df7052d3066f1f76359b519f6f335f29ea0797c3d4e0e2163dba9d015c90e4fce3930d3c4179ace6c920d0840cf6bf1c0ded336b7ed0e92bfbb2ae70750648d54ec4ce9463d2342ddd488d13bda5417acffc274e3b4d3f4879af06cee3ad1c628f69f993f3f55fdbd096c9d6f7cb70d69ed8c5e4a0c24f0c15f448850ef1da2504172093687f8a414180293631e5d7bff8e791d735eca2e77f26e62b7d710cbd6b30c61b37cd4e2ebe992dc9f260f0777ccd3d9e6108e55b03bb624aa5a72e6c136b7ca3e86b05c4964649fabfe935cd88ee0b92c8c360d752164f3b2e00a9e1ab1b96c600d56bd3671bf05100cb1202abbeae6cc388a00cd8fbffa56d1a198e80b5b6ea0798cabbaf8ed3655ba33fc753d37884e7e54d4c06a105e1e95ff7f332ee5f887331bcedee13459026fdf97c2fb0fc63bc55a31569b9f4a9294ecf904019f349ca1cbd0a914dd969f927f9a18ddbcc81a7465c0980ab4e43b3630ae626cd048672c635624792f16b58dd9ac80cb85b773f53d288d9f9754a0e492485557c25c703cad0b55f97401cbc7b67601adb1bbcfafaa123d438fc34904dc6ce5aabb99403a6f94467af27f6aa8dd9fa36b89fbb40a7426b1dce659bf00d4c41b4d04265e8c729cffe5f3b6199818d06eee55a0ad6e620bf053e23d893e43f8fe29e52c529c7ec98623bdd160ff2db16b1c5dd13f433e6a0291cc982f28f0b09624a5d3a5d15bc3e51b98f6c745e5e9a1dee8b7f4f1ceeaf07dec913a24a593ec278e42de92d03324b4ce4ed7d20821191d3f7953e0db34c1fe8951319c2849071be6a28549a6c149d8a600170f5e00d9bfab41e4792cef7dfeecff9cf7427bf0e6f61a225da5145e6e67341062ae2febad723430228bc42d645ec4049dbbd1ad7206d33e3695d56a5d5a144834c25556d0dc7cbe44be5bd81825c8eff65bf248a55ef5603c3eab768fc7c549ee601b230f334116488e5b86018932e86aea87c86945a711d7683f89ebf6729bf651295951bdaac194c36d3f09d42a74612f3736a50511d86fda39ab592e41c4b65d260080c4e0469225380c174cda1d43f3ab9941e45c3d6c5d40e4c1b85a4e944bbb21838e0b2da97b65f4143b686a78fe8af9242bb0c836b9fc3d0bdce6c1fae58fc3426351ff408f9b00e6e7fce368187d5f3821340235b616bd20e20da34ff14beea58ddd43c12783377699bf117b092cd164101172d11b366de612f67efb3896aa9453d581930cc4a1ac98d87b1a983e5a903e6ea173b2035346b4cad966821900f7fc62421e060746702e70aaab8f5cffa4f4741581412679280fb03df8977bf7b6d1ab0ccaddf42faba1af2498b42dca897a4b58659146e7756cd131193e6598b91ad96aff583263433abc7347d05ac225181af2856a0ca41313553d31417feae81f13e125406aea2241c01e22aa8aef611609694b9420b8ec4c63e9a86670f52c2782fba45d43cd2efee2ae8f0c665a26bb42471ed6292be75f23bee676e1c16b7b4d3fe477661351b84baaf8bc950a5a51ea1365f9d005eb93be43533879578f649e354e567ac472b9229ac483c007e61e2c568ac6bc4fe2325c015776e1be7e289a6648c128e9794790075b298f5ab36b2e97f4029511b382247e5bf6c0fe220f6b593b8218884dabbd782576a90aa87f185e0b78055146cc3f44c581bf2061633996905ff1acd82dd0758a32b71faca4133437efb2198357d5dbffdf862a256a2ba6ad215c5a0114f286f22460a2a920479fe02e4470526d0dc96fd8bc27556e6a10fc90009cb0aa4a34c5154d9a863cdb296efe645f9b540f987f34091cd9b51d5ce3738679cd3501066bcd260f2b40f75a4927baec465504cf96ba171399876d13cc9395fa41fe3e854c14920a8074c5b9d971ed223bb814f71b338b137c2e82bc1eb9d625f24d2a37d0b239916c1f6ace87a4a60662c56697786810256cf183df41abf004c96aeda6606ec4afda8b1121b9878ca2a3c42337141e4c50511799059d328c9fae9cae5a6211db69affee03bd8e348fde7fc72605720e79c11e9ebb59a1552fc8a2c95da406325c9d4c1ffa34d80811f14b67c98a9358a1195afa277a01ee9254362cbae602c4bd6311c97e17f26e011143a686a7224ddb8c5b1e5d31713fa22c386785e2c34f498ae56d07ed59d0cdacdd05f5b1ab687988936dd5267bd2cf9f0e0c3720a43c91834b9d101b9acae8229c089f509b331b9ca88b17bf8e428b4b4b8d5736420725da98bc3f2921d6e120f510dbfa8e382246eed8ad63250965bf655d6e9a194966ff715cddac7b6f39166cc14415d0d23e05fae90ec7ec81cf49e00ed5a2967dd57049f183fc240e6071879c50491fbbbf58312ea4442156589930142506461f11cba71ccacea82ee7c0ca0498fad73f36cc463c167e7ff1721bfa0fe52ba4977c6ffd210a6a746b4f92a89c76a173e734c09e73cdbd64edbc5092549e993e91a5ebd0c0cb76152e0855a7c681e3924e29d39e8842a76ca587c59d74a9b570780ebdb65e966806f192984c054327aece8683eacc0db2e3b374e97ff2af36e6c51754126cf3b6c6507ec909eb22e41602eb4ff7c197768681f43abe5107640e03605d796e5bf8efc53d6665eaa9bf8465c89649fb7858b1ab9647ed125ae352bd6a185ff54794cfca5efef48660006671aef555fc18dff19adb8f60b9122b614db5433a743f20f2ca44011a30be5d38b0eefba0260182b2da247fcda7b5a2964ea23c9d7dbb04055f9d0b5b9c4d2c779e3907bd1bbad79 +Output = a803e7b32b146936ed9418708bfc3333 + +Len = 106800 +Msg = ff9831ab21fed47db66095d13b9101cad47680044122e5d50d4044d208b10395f87734be8cd2223891a82abe682acd9db8b503bb60f6d1d8b0521d14d885c2b1a089e01b5ab9752515363296148a87e47f8b013f5782d5d1af8dbd451a4202866095dac975fcf5cdabd1536126f7582890c022990f0e1a4974b9c96db631ee9a9e65cdd0c3e3c9b7b940352886ba68ef551c0fd06fe2c8c8669eec94939aab78c3bf5f392eb51a6ba94c81f31c1bdec4356770ec5e4606d4ed03ccc39bc564a5386c380b9dbc0f72e1bddfc8d061e22c9868ecf6c681fcf771b21102b5f93faa6434014ef73ed153cb5bf6b18ad69eb1e6e82cf58edcd3b85a716457c9806410aede620a26848796cded6fb532c037da88afd8f19e9fb39f11096dccc0a0fc5f8034024811d65ac4513df1dcb068d82fe48597f2de12c335fc42d36880a22f1d41fc8a10a07b7264be11252fec16a73963321101367c2c0184e33e33f2ce24d458ffa168bbbdf6fe7c32b3b5ce12cc7f6d7def258e27158c11b65836fe6b040b2f05f05a4ae20f1bf36842773fa3708a6b2fd967ce59a75c0c81c6788dc3f64b2dd61fed3533e4428b7a7a7b2512bbe0c31076cdde5b0afbdb0d3301851c231bba39d52964f89efbac3205cb6aa8d40bdfe86f62a67565f1e82245dad0bfb3033ef7ba17c07964cebe56886ff4aae493257f6b2b0eeee0c49a87a40a54f4cd8b21d877be2ffd5f4429afae6dad6312feff9d1332ff10a5fe5806f999fb02993ccca4b4279aceb6e455051ccf7b1a87d6d4090f7e5f21d9268c65ec90ab33409da5231858ea329236aa207d9d48166aa20c8c0617186aa7c59d6d24f64ecdea37151d4c5b05721bc391c777ddfba0e4eb0feea10610333562f3e64ad3cb19be908559f838d5d6781270c4b2997c001d3844f7875231c4ab85f69805300a5fe5325ba0c3f541a5d2acb0ddd7d8b37e3c11156e6003616432b70e4bfe14f3e787a501ba559c30295017badb8ea388626afee91dd6228a5cf27ea3c6dd876ef8ca6fdd6f57348ca81bddf5857e01e3f3ce8829ca8fb593f512651dd2499163dbd91a598771c63c6b5a85c8a550faac7a91363b3e33c76474baf1e437ea3bbad9da2edbc94a5928ba36989d01ac96cb3fda9188416b5de52414ac60bd698c5b38f631cdfe8bf538ddd79ddb6338de288ad220789bdf81fe4c451df92b6e8d2e4054ad96eedba2541b641ce9919fd9aba3a06b7413363a973378cc184ba0441c3b1d299e61e36964bd069e3153878f3dd16efae27218919822d34223e3a8bb0b6f782e4d1f4b51500be4aa1a739909c45e61562b802f8ce9617e0684bc2dfae4258e430befba63004d27c80cb77c4e2990a306b80520367238a2a0a19ed80790a586f0409bd8a65ccbf6806fe9d86655b05c92f0c996941cef6799e45151ecf63789bd54e94e224dcd7a5baccf575a2f05b3833a9337b0cdcdf478b49c3fb1fd23bf33afa2c4dfb99adae029329f319ed9d15f002dab916e1b72c578484b5c8fb04fd9b98ee1e68a7b3f984fd958f38c72deb1a95d9b3fe82208099a1d1cf793286237db744e3ea6b8d109868e2ba9e01901fe9decafc32127dfca81e35b89f0d11fd67b1db3eff799b7bd3717bf5a821662d043a28e2403751e939562af1b90f4af3d0352b60263651a3cc83dbe0e59b12aae0546e16a7553eee93e62c1b45ad839f4d9d9027ed466210ca3c8cdcd4f3281214aa24f9d5e087756e4aa385c36c7e684677a3d6b31e2f5b72e8096a04be08eb07b7c81c6a8dde061ef03bd1b0c07de7413ff10d16222bdc5d32dc18e36057ae3fe9d1eed3a1a5293c735f8fac4e1484c472e22b94e6ea2bcf996f6a0f6e76c423ccdcf18fc07f472d4089000479d4c956ad11c2adf0ecc260784dcdd74ce8d569dd33c51d6ebef887f442e367b8314d6e4aea52dfc49628a67bf1b4d980405a68a790c9fb0106a5d2eb079a249dbc5971c8e66c98d688d71800f5cf84bd0fbba6985e80b72bc8e774a151a4e99ec8a617c3806067bb37462ba3c47e77379971ba3c0779b043883603c3bb84254ff89ba6b762eecac7240e57d0d8321f9480350a1f262594ecc70a06beafc85605cea2d510e868409ed1882314bb9aec68564e1cae3504d39bf7dbd3eea8d1ea74bd63f97c9b5d57a6c25c23ebe9097c178e557855aea7eab5bd4411f0215181014757aa36f64e7e8368e2c0d2eb1e3d168ab393c21d8f48de69ab475fc397882feee65dec83ac339947c490463c39ae09fe10f56fec1b7c8a9fa9ca79ea348e7526a88b09be07057ce179f8c246fc5d563ad623bba4dd042ec1a831fb1fb902659106c82b2fdf6282c86b80e3b5d6a97fd37b8521d2546e5f722f044fce85627580998bad33a5e96f5f21cf06e349410b5a89c05eef12198113b6c7e4913a4d29a7c94c2c73faf887382519c869c4827d22893bbf7586942838d7e355e24810f6692e90056b3f1e5ec5fe1784b3f90c49ede27ddfe0327cd963faed104c2f6c603721ede473f2d97a9b054ee84c273cf5ff3dfd1cc9a63208f7984ba039509dfba46bbc2648a6a85f29e3064fbd0fa315e8f430029c42323b96589592346c442d3334916733db0970f51ff44760f2bd0e3d8dcd2dc2971be5b2844142c7d2fd796634f413dff07b547f048f5be27109535f931b0af7254d9bced3d54e5e151874afe55ab8a7978c7e3a494df9bc1b1689e18cb006847d55c25dafd82171b3238392be3bc22520ab52b946a6ad4851432645e302bd04ffa2fde170b048ad3dad3a91382dccc33c66767e952fe331a43d9d0f2ea9aaf33cd3b2fcdef4406b05241e3deb97352c4b2c6dfcad4037e2946472afc81b4cd9b5666602432a8535aa1682fb311e97aacd9b8db6079e17e592362baa67be0f12d9c99b8435b9a387acf32d4ba11a60d944026a2d2c800fb53e414c7166288e594a7bd8053f2817fb8e5861c1d4112d223f1f97d494ac9bdbe91449b74bd136f767fb8017b80c5eebbea4b4d0129969302f317b4ed85a28b4330da7ce915e9587c2d7480e48ccd4e2ce66bb090529816d84e6a8fe503f42e8acbbdb39df172674db8d748b59e0366b2e1cd8df24382244e0ad9555a4c286f3a69d788b7d915669228cba0173ece00f6e4592c4f84ba850c304b5073e6a414fb130f425f553d1bf28537cf32f596e29ff6f7d4ce9eaa01b9c8aac6595bd2e577d04d2bbfee4f5016d8021e2d4ac4d556208fcf9718b860fdd8dd00333319ac53a87989fc2bb4cba52916d531c6bea1c3690963d37a4e69826acc462af4e02f3aa37ca54195d455487e5a3c65efed0e8dd94dd9aa4dd3e5ed855fe066289137d2ca3cc7b4b217b5a7e1b69af250b9e45d7844794317af9de9327e150e56938cc324a2377d0de6b569591239ff6e8beada4fd48ac76349561c78112e4b074ef6b6b9963cc52ba71b36ee565fb5d3c9e9ad65e6565db60bdb2e5f007344c22a3d5392011fb496c4b0b8a96b553c06ddaa7dc263232e9a5cf3c8ef332c220f8f2841b6c92971d5a33c94913763bb8f2df2f36f313a6296a465923192a10c76e581292dd89f2570ae8775afa3d05af7238cb7733ae320334cfa332c061a2b80940eb20014ccf7ef4b58010997e643c4253f70d6646590f7ba7a54e875dea6b40498853667f710dbe478e0aafceb9b819dd2c6a1990adb6c57ad9c6ec936a69b9de649d7b86797bce0b0bb97b8288db3f20e63dbc018291a8b5ab4c5e86a53bbc8c2a7ecee65b518a7c63ad9b5e53ee48cbbec8cc1d8a188bf4b43f5bcc2d49febf2477cf3399279a1820479d96ad99bd3a10cbc84926c3e5946f2072b8552cc703fd08fae2b556636aec27f0efe84612f876974f08eb1c4c31469021ffdf4ccbd71eb2d07832768ce101bf13bea67bd0836abbbef1399a3637d4fee7f70e3253c503f5fe6882f06d172b8d94877ac37c6777b9a696a4c62a3484cd43327466253a3752c338396c8a79a403e1cea7857d110811844dcf189ea3f0abb226a46086c34349dd6bc8336b8505c29a18ef6a691c9643d69afb1a09f282eab36810ba1eec925b9b87b1fd96c5eb4a1beaa4bab6f6ccc11c02bb3302ccc63ac56b3bcb5412bef88bf0891382c8befae5b85a2eed1bf639d319a20c0f8f34fc76a4982cacd223b12d4aa02db5e9eb658616821f8208ccee8a5421fd96b649a035b8b846af976b160e0ab9a4b6c60b0a8b69bf050c599b8fa026dd902ede9ed690fc1eb1c2feef879c951800fbc9986a54366387e26aec7dc326175c3e648f0ff6f33de69d753b96579e5ddafb810df58f011210bad95a3951b661ca4be4a4acf632986d7576d9b2dd6aed8b4c68f64c7a6e3d27ec115f52da7c6f62eddb7a3e1d4ea0af0180447d8caf69aa550dcbdfc4b25745fc9f565adbdc72ae8ac57a53ba8bf933c82e0646e3c034b0abdc091ffc8202e372ffe9a1c44b3e15b91f2f6e7c9f04942fec89bf8131f116c750388d60619298d5af83d8226d0420df54f3eed1dc5538af286947c39901751e06d4b8bec5b8ce9b2abf5e84a677688413726538e85da9cc7e0f605959e834466c68226612d80d39fde6b5598bfa454db725523037a0501e69f6a980f937eca6fd5d5ad4fd62dd4895b47d1f822f5f72dc8756563eafd40b58b973f8fb52f6d6363ea2a9d9fba73d8e8306452d691fb9d012b1f981ee9e19e6b2601fd4ebfb4aa386ca433d05039f44ece178e249fe895e4215b895ef26c0808bee741a45527ac1c0124f9b116ad4654caf1945447447c3aff201ef2406a5b2b08f744ff1a4fd1d751b1d789355734c4ccfa4caeb399bacb6c773f21fa63fe9aab3beca936b382300553b5a2d4bf27657b3b9f7a086eb75f1166d43449dd5b1e50bb22e9d0dc25f1c5127b421c6e88fe80bb73ff714cdabe96f8c5735462d97e9f7ecf06105024e038f711b235ebbd588283b28614ba8dafa232fa264479e0843f8cd9491f99e5c607095f3a46be303b2a994257194038fcdd1e5c9540abd8f6d9ed2afa253fd26ada514d217770476e20070dbaa966416bf1c3d108717e299d14aaa86149c8519657d5c4b1f2886cbb0bd5f9f7ecb511c5832942c6fe7c3c4199c93dc5b4becc10299faa30dc8e06e89409f05509b410d13e599818102d77aa0f55d0708ea8aaa1f6b7e9e7600a7dbe62add91d28eca659c75ab946cf18439f1f5348a8fe0f53116723671ea38538051ec89b9873e33c23c9348f9862c509e971cd8fb62c7a2f2823ed0e1dd087a1856f63200b102338f9eaf00155f2bc2f50acca8ce24171a6aed31dc42b0d961f05fe854fc1273404a1d295f6c7a6861f9c79532773657c206a1eb97391823c1a4f72361001e19c06e32a2b5834a7aa3f957f6f48b3bf240525adcb02985900fa29747e4b1265e5a8899abb0ee51cb0f9036726d7e878f0bda7275a5985b76a285cac66e83ddc965159c94b00222e21b4add880bc5bb769b0b8356f60a3c6030ab0c1f5d0ca6e38681d60e616330583d75c7b86df54a51546207f11ff39ae5209ec5c34e9014252579b0691385fc861ccd8f83f291a6a7ee8a6ac481e8e97e08eda24291c29816c859c64564eefa040fae9f6b480f72d2cfc14641ca5eba833ff40c2de528c520f5ae7223c402bb4aac9571debce3116a6ec3051967c9809d5c5e7dd5b7170dec13e46e74bf65b2d26a1e916eef9114f741ec319bd8bdde34e49971ea6621e4d0d997f5b8c58c7323dea6889c5eadffd1efc94649abb025e24f2172cc90edec678d35b27064fb7ec750c9d1d768ae34b2cec6ddb33f24ea1e12731b1cc5cf8718c54a2f3c2c17282596f4d7b0bc0655f2758142592190ad50c52ab52b533b377d0851c66c698411d6e7c434b8b73ac6197a752ebbf197f212eda4eb98e7d5800cccc90291cba6ce53e994634ff8d017a0241efd5c0d8f2aece27e28e5f212f330992c8e4cc113b01502f1dde6ef5acd1f28eb38a9f40aea374a12f782e0780390e408a3edc83f59a2ca791f2e093f590eef666b36438fa29a9b0fc200517933a633c9fdf56fae4d75b676a185e4f23dc7fe1cff715a71d68f3bc132eeb39af5d91f0cf70415d4ee164d970f7ee1180e02bb7b7ffbc776087dd2d3a49e9551eca1fc2e199a6947cdfcf646a389bc152c17de0e673608f0bafec6b3a19055326aa951c9f018c86b6fa256f22826a47e2aafac424fa0ad76607aadedb47491b10257c65cf51fb1d445aec645e7e658b78c12ccb393cc137b8b89eeee47bbd9524625b053a30fc406d26afaae7d493765c2e9a5eece28d974be950041f5c68aaa98aba64a84795d77a87f3a9852bfceed51acce3069476df65c3498652935240e9c421eae13ed0cbb3a442c9ff2ba9dc2cad4bc450f985f74f6e10de46c883402a3919ffacbcb50260a623721f7da129aa0e9e678fbac1c751112d72c3a20493b510290bd2694b65c9b41f0cabc9ecbb94664d368e7e3338b2d429ac91c9dc1fd272da761cee9adc36f7bdff6cb6937c35dce19714eee130bce08bf377e613cec887b3a84ff3aa50ee9685b32aed9d53d499e1f4e8b2d598b55ddbae3ea1b287e1763c09361f84a73abaff91ad161227b8c4d5b4d3711759e673a247aea1bf316368fd02981b2fcb628bb4ffbcd8fbe22a86453f9dd3ad59974866258f8f45b697847ff93c8eb3a2ae302b6621db5f6b7207bafd0e82a1821007b2b0a91249fdc5f34957eb21191665d2ec2fa2c846aad86ebc56ed23fbbb98d60b50c4d3d5ee35dce3856d7c680ed19880c00847b887a4e4d1b20461c1eb78ddfb6da779f0712e68d6e98a46a87138ab6e831affbeea1d90837919e1fdfcf946096f1bada36efabfa9ed0a28e129e3323edea2995fbb8c9b5913f54eb6d56136bebee817f5cddf08e4f8b4c91c1d1a56793b66bca4e2392cdbe8604ef55ef8d7a0c2d65eee76266c107151d26135253fa601301193476c6c92602289c17f085139e4ac2b96521612b4c2a9eab6594b144d98c64037d36d8205e402a92220d7cc118a3425f647f922585284ba2571d5fef668f0f0956c8397bddac9532029ae6fae1e34f5153e15c68489aae9b5650b242ad978c9b7fbf8d340ac3f31c482d5629a067542fb20b424c1cfe3206e1d35af70532575a469125d18c02ceb151494ce5dacbfb5b1d31c64968cf60759829bc6513ebe99649c1a5ecc8058291bc533db7d76daf63e4195af8c28ac457d7a859254020ce0007e57fde5538b92df7ef9b084ce8dacaa50692d2a0bcd83e3ee3a3a0107d7ef7ff61363eaa08cce68283076fa1ba17ffeeade05f89e216891c703e7e0b5e671e9eb94b763d12486bfa91e5465c4df1941f63e607e476f9d91eb28c17a75030c46472422d94d1b62eaeb0b734f330c1f7b5ccf65456f81c9eb44f1ef56adf4689ff109ccd37c3909f3d441fa3fcff33cb404da3dd47f1d95a5b9a59afcc7822efbd18bdcd9c64524e14e0712be005b16f5d6a60fb3dd0ca9c9318ee9f529750663cff47b7393095abd40a4e3532e0b5545ba7d046bf315ac5e96f205c83d9597ded38ad02a4b4b548e91619486c1cca2ad98a544832802476dcf1a15fd69aa8a74c597048556d4b95c2b864edf2166a5345867f683e39a21fdc44e421d177b862d8d613e0d1c6c3230f55b38e7b7a105e2e20b42f38ea4e3165dd6b4afaed134121331a74806da6711d7277b25e9456abf1ed9515c90e934c082f9923b96743c2a404e67c07ae8ff07b9343e2120197ed4f4194b465131bd041b000449362c457efa02a5fde15ca31a83c8aa64c5e6e6284d125837394325e910333462f8c1f7142a938985a4fffa531d2ce7753e744dc30f0d9eb9b0e9157849da470d43fafcf6b94a3ce22999adb970a81cdcf58b59ae245248531ee935b8ae3d68d380a0f92c8d6fe69cdaf263546283712250f3b2f072297c8eeb0c2cb128a4bd3b157b99bc904aae391ed1c52ddc070fceb9730191e3da62f07f1aa36b9d566ecd6b5381b0a822bd435c007a4bc77a1e6897d5ee9a5eac240342db41eff79ca411eaf05c0fbf413b42fe452bb70925c57952df2012cae9e74f9d17af441cbe8790fa1ad0e2bced4fbc6b6980778c502d88525a400111d7d65bf6959472f6043ed104988530876f213b0b34209536437e1dfe0df5701abe16afb61e99826bb5f25c6e332501080fda46466db418f145dfc0c0c2e865cde8d2d3467a667b651bcabaa2b3555e2714a26684dee309a49f78faff3fc1eb129c30500c71a265cb7cef7206e0bf4dccc8a0212d4d566f379a7252244d2707d12158ac72caf5488521880c04810bd9df71fd02a983b552917cf55195b4c2c3f2c07372df4f092d7a52be110360e1074858e08e6048a7bb9c8d287dbb3c3b265dc1a927bbc6831b9457b9086b43e7e1efc5724fbb63d4b03f173461fead3a38fb6c21556df80e1bba77a079a3f3c86ebcffdbcc209ee53c62604182c7ce6602b20804835fad5034d4fb9bec15382ab69850428df8bf8264edb1766a7c68688b6bdf793af8adf16ecb2bd4ea28d9b6c269fecf1bac8f5232c952fba08743e7dc0f37a901a0bf9ad1854f70fa44a013991952acfda2d6feaddc8bf9ac4e278cfb8459bc60bfadf366ebaf9aa5d153e9438e94febb445c2ddd0fa498173bdcfff2b48dd9dfbd3da334e593787237bbe2c9b20cf0def9e888cb4be4ff67b429e7c9851b2807033853435c4232e9dfa0a4326b02a7ed2844b77e7695572723d8ed86e14ad25ff765aa9c3605f1922fcad786a3bd4e703b3661fe79fdc7dcefafb833af63ff70028e51465d24ddf6900024ce41860bef99872e543d6478108077f1d7d7aed6c08d79ef49b7e71d9c6b0c33112da506f3aaffc887a914914a3ef73f7b407380d9feef2dae2e95da0c26b4ab574f626903d665d49fa4543b1391f94b26d4fa2543beb8b37ca9783bcf2bc134a88f0459a88583fda5186b9ef2e143bce07a8aeb84369c28bb0fd6696ce0fa780dd5d500691f1fe8a0eca2e16f969f3bb11a6dfd26cd6334744af88b6baf291c8d091b86ce0c02409808412d1218d370a29de981b1ead480ae4126ca55ff14cb31131f135fb4f4ab965490a964cfa702bae947a0abf7b9b471dca84eb137842b00db29cda580bcd1a0b8d67eec24e59a02e7cf819e5bd878c503c53e07c141e4024981df27d6245cc11c5dd3327d53df807fc84d117ef972b39ec6c2e004139f3f466e6f6d1ff2f1fe686bd1bf43bb7a3e9a7c2b8dc8e64d4295f304c268c204c0b839a600c4ef3a6184499f1adfe312441e314499a166af7bd09429385515ba8c892bab672be3dff1583f67cbb7935098f530bfbd7140416438f15cc733d66aab9f8aa72abe9688b6cc944e5b3595dc4405c1c581a03daa08b352c3f96acbbb26e49ec1d2e4cfdcb9c9927e51c0b05d50382b7e6e9625926c2afe865562bd56043eb122e604588301357f1f35bfab7bc274b8110bbbc0a39a863ece638473e24d9709f1ee88f72696faa458909c4fdfa4a3aea7e078d58399ad5ac3ac36b70809d6ef5773d7756d81fe4952e9be6431fdac566776332eda71899a8cb7e14f7041e3ab7cfc5999ffc92bb635c88db218d677f87a545591512b0145520cee04c1fda6858711762d8576673228b571003d36ecdc070347c78fcdfca53c34c39ea34307c5a03a96f7a6919c065339d2174825f349370970983d62640073b6cae5c01deeb2f10021c10b21b17bdfdb18c0e0ac748932f037cb03ef209f1e1a6aa1bd9243959fea7f515b2e8ed7f424abc1add157e21f3f062a887e18ca66e90a9945aaeeb6d581186f3fc11b62b99bf4e2599e849d267f447b751634c973aa1496fe6ed75db94b55e55fe0406657c859ed891be3017137588771c05ce36ce5ef6090e5e6d273d29c7a6296e529f63343a8e74f5d5825efac1625837861792303bfa418045c2c9e56f5f1e8f2f4bc651bdd1b42d8e86d30a7f03967708bc4eab87be20d17450c35ec1fb3e04f0fd4e54752cdfc3dfb6f80b1dc54742ca972c5765bf1ce08d33a21c4c05185e4c2643b31d0a48675d7536a32a31eb39403ae39a5287a63c04fdfea48a072df995595f03f1e48e767c44273920d412b91e19ed0adaa24d226012216df86bff7570f8e8bdb066227fa0c64253ae262e4098a6a11f6a9982521302c2ff03bdfd4043a78946c4e9a4f18f6e00790ea2ce7e6473b84e8ed7d649b2524bde5887b7e8a1c7a935abf9765a8c9dea1fded443b0e6039b2ec3d7c957b29334625333bfecffdbd110c21027491ce887ceab255e86b1d8b2268633dc2a98281541804c65bbd276896ec3c8281bd4d041fbd0205f7e3c55a5cc62567f20c78356e26c5c59d3be1a4a861d7c096138d7a12e0a5fc6f60a2cde96c4ca22e8e55781db73cdfcd307299d1d3bc63ba7bd813deb963e358c9fa0d50c4a0987d165f71e73332bdf286236e98aab114f6dd74f60ab20462bb0616411934e8eee78de0495702700714243c4c854f7f7b5121aa4d1e314f209ffe3e92cd26ee4f74d91e27f28cbb643bf2055a2128ee3fd330c23da3a00dc60c9bba28f30178612de36234423ade7c70d8c5c1f39ec50984f004f0206606fb0ac4d12a132d4fcc1993f397ce729ff8babec6a8841ace806d4ab88e1deb0268a261ccc0b6123b3940d21b791e9dc880228c4e385a02cf4d9526253e2297c9b5db5bf31463180350ab862002bb241fbbaf2aa698ffbf9117046d9429b8d22289be988e4ba2a771b861984b592c6d6d52698016f2fbbadc87c3054d776604d78c5101e590fb274b1a6af1e4a7f9e279ec5877e56bd45a7745d9d8984fb595ae679e7e4009f7005a1dcf773313abea0d3285f55d2d14062cf84ecdbdd92ced70c2adf8e6de1d9a666a97147fc6c9ecefccf7e3c4604228c1482bcb033f5374e54484552038f55d37a8caaf12e8db52e861b62a632be727ffdf77bcb4a6b293d4962d7f363f08b29480713032a06983c099cbb082b78a6bae623a871638d2b00660b05c701addff469a937e2816fce73f1e3d5f692cb35c967c7c14721d3a35444913d615f2fdad169d38833c731be62d95141e5fb1eb627ed3464b0f7d728854f960d46feeee25c9326826b5df4fe851a959d4ad6eb8e5300f9f14377f0313fe199f3dc4373ace2a002c4fdd811f557400136b9c8ca54d72d99057304b743c0c51d6fb5df4680f00b08be6fa8213955e424aca723337020dd920fc430a4d6d44480ff5824e015212e98ed45509b310d71806d9778af86cc9b657ebb8e4170d70a751137b6d8cfe29543cff363f882fa72a5080f5ba6ff36d183d0cd70058845615a53d8f78917b0d989d50e44c1958951f2fa732ea2400c3a9db47e7879b39bf3b115b07979930865eb9afa957eef46b9fac367743a0f9910e388532a0659672c0a0552bf42b875c4e9905cb88906cef54ce150ced6a48a0f25cacfe744002394e571343b4cfe7560f443893088626eae39d2d390f0a53b8fb50a6942bb3e5da8a407e97020db83e4ac23249ff588c23f7216446d20984a0d11b593cec47a81e1e627c6f046e63daa61cd935958f05643663a37a5dee42221dc5af3edf82b1cdb2c5f612e2794ef3cc59179ff0b2f873486ad31fd941f40487578fe12def69afed72d5c9c5b7e2506381d3ce3b49cf19d63eda7b6d8b040fb6d8e06efe13388b7870ffdcd5ae87bb149df50b9cddf11e88e8a2d64252d90b53508c2d7978872bfac75e9339e8a6fa87b3649e3bf5c64a056f117a7f21dbc005c87a66c7a5bc551c80d9351aeda5d663ce0acf4119b665f6db11ae4d7d72f6754692610f2241d286a2570c9f43ee1751f3cee6d6d12936023589b9d4f006744bd5bc657a787c6adf35c25ef174e785f82c982a21a68786d28460e43b01ff032e7ae0bc302ed7e4d04201743708fae7018050e44b1f381d0dd08077ab39c56bc63fe6ac58ccb80a00cffc969a858e0713f8df5c7bc5a4c35c21d0ba4b1ec074bc2bb67e1bda89a218e79b0c42750aabd79a2bdada1e3440678038f4443a59e5b846397aa0e1b175bf8fc61d565fd89cf4701da690b44e5bd5f4a06fbd15f688619955e71069984b9ed16512fecc5fa213829d07c40f5cdd4f86f071df350123602bf30f92f8a6ec5cb4603364430784dcd694479fb5c48f7c3d1043d124e07f5c05fc384f18431fa2409fc8ad4c380cf676e8ac4830f0360521e92dbc6afd64fe2d56ab6e50d7ad187e0a19046f5a000a6a837fe708469d913a6176c88dbe9aeeadebb01828ca5f65758a6e8f35d529bfb84b07a6c3308bc99161681c178de8d38da18e752984fb322e050e7625124fbe6a2a8eabeb14c7542dd249e190d11756d3628facda6e4926af6442e2c8773aaf88075a1e075c1adc169a623e7ef1ef1e8915f9e6c4ee13ea029052fba46db13818c9b428a06f4c0655a3fb5c6b5738d4b6a2154a6d6d1f252f7086e8435d7e04245ae4f13db5257cf1d35c63de6aba1f63f02b015f5436803ceb25d22dad67b9b3a132a066966de6f214cc7a60923da897e98332220920a333eb79e0e8c73500ce86e65da47aebeb614d95c9783788165a7464063cf6a5351b57c83bfe11b0807cf147527dc968344566fd79aec16412b47918a537818ddffd165b0af7f59fe2c5ca9ea47bebac69a6464db28a999944aee1e5369b149f48e0127a7659d9cbcdb1f9337e26497f318cd7cc9b9525ef534f9214e1ee16a418cc326da7ae27fdea49674e060549a9340000c45d56ce2ee8a075ecd0baef65f9ca5e7bc47d46fbe194fa3764a054f11b09a97b1f55fc1daaa772b7288606a791e07eedf54f9e8d599a9b35c17fd3208eb0ba3a0a1b1885426e72bb14dbc53588197b0b64ab977dfa643392452b2cfe34fc1c49462f882e57fd5b42ba4093d6877a3b1d361999926df9a894172bc953b6f5b5f0fa19b6e0925a1792423dd851360da76b96210c935a62e484600710e7bba36e774f6208639b8f8cf3d55afd6f3cd9a73daa4c584968a5cdaa47486b82ec0f30256c91e87e19a4a4af9b2068f842e624da9a21e57c40cc4d4df57541ebf140e144792ebdfbb49f450dbb1682b4ef3d048b8f291cf38ade4bb69116f9eb713e6a1aa0c2efa0158a59545dc5b36aece53198b1ea6378ede4ae2e44b3fd4a1512b4f007d4e636e46cc7cdabb364e4e0e6914927ee23d111e560fb36d5b4d084c3a60dd6ec0984c84e77c0ca6afbe874490ee51abdc5c79fe948658e038644665927bb3692c2546a375174e572e23f50158fb6b1ddaf223ff94eb675c6db7065dd21404f4f796c722f3d3322517fb11b52fb0215d84baa981b5a3412a51b1a27567be548aa9495873f2343a9913c057d083c126d360027535954298e28ae0b54cc1df2492c7c97516debeda3b980052040392ee27d356017bb24db10d7fd0b9547efaf7c5b993a7ac37d793852b277a902da9e9c37541e8d48b393c13b6ee292d0d86307c25346a749c12f8fe33c24c35407a9c2ebc4295d08e798c8db6a57f26ec35812e613828206a057d1f485d41440a8987c22ed492e03a9344e3f5a335d2a95d4c6513fb7b3020038250ef54e44cda5b3f4633746a842e2ad7bf0a43e7d0b37204a8a41ade245cb1bb4b8f45cfc03e6424f360ae774cc784c7675b240f7199184c7197f2cb6d8e748a67aeac4e4eb548db823cef53aa955596856ea01765c8b47658763fcd7c23e0722dc3f4fa38cd5dc55b3eb39a1e25f1c781cb648a0dd0eb34b5a53e4ee0bb6a050675bc5e2ef52764e6dc978527e80dccf4e7ddf1da3000ea21db9aea3bc395a59a2a7ee481ab4a4ccdad07df5859fe39474a68c96b64ba19155fc209ddbae7f651589927e17e1aef780690f3100a377f0179b18b31fd5b4418c84038573fc559b496a782beec3dcf6e9faf5aef676e10bbec34b1be5888fda49b91e02890d2524c5b369f8a54175f29dedf8156fff690cf186ec77104a798315033bbd27c8362811ca2d8c4642c31222a8e00e7326561c384cc56ea905bc6477ca205d5415d2ceb6198c91d8b00c7f029575400bd3f2621c7d9ca9b6a09ea6f776968b19dc3f3e3b064eac64729960c51a7e543eee830724813acf420368711d6f65ef7d05c6a128fb3a87f170b2def1a1c5f1155f5232d9c16789521661ec721d55308879af1f065f19ca87929f21109110c0960ea70cc1a3ea7ff0c1d3407de92ef7421e42df5c9ab31d2ec0a750a9522869cbe4cabd66908d5823ec0494c639b7ebb4ddc70ab214d026efe21393454cd593bcc7026c50f116bdf47f3d11d676b9b5e59f85c791343890d1e02b146be7dee670a09841052c4e556962c6df3409fdfcdd4ac53f7f64b201dda237f8a38b0d0cef58d4650fabfdc98d7de72568584869a5c7cf99060c08211a107f6a76a028aa41d5fe00f6d4ebc065b8e80cfbcd65a444ffebfeae92009a90134b906a8ef86b6f015e394011dfe3fbfc10bb74cf1a54c2d96196fe5f63114791e29209bd45f47fc33c3977c9a3da562fa95a5bc53121283c78887edbf83148738d99db95d7f07c02df282263fd4c7e3bf913391970b57d1279fdb66e899f9aa294cd677f75056ba8902dca49b6e17c06490c9532a0b5c942ac1c2f81dc0645053f5535e1e9db569c9770f6e29642577ae06df77889cc14b4590e707abb0c5283d559cd24f91b44c63c1a2e966417177e085fe753f2a06750c8fa01c3ec59c806a003b8b16e6d3e0ec753fbcdea07c5f9070aee2ba4d9c9fe41096bc23796af75e6797def0f784b5c7f42e3efeebb67d526959368682043a60b6335e1666b0fb7f0e3a445a6e57398ad10706439db08f9ad285f72041ddc306f2fe7873f7ff1b6066ab51df95bbeaa99e42a95930ead4de4edd9b240779c84b5960a1b8c7b5c59703639ded283357a8be798e8c3fc60b91209898ee6d68b8a25bf250713065988756eb8eff705dff1cb4142c6934e282581a7f76fbce4b22b06d2c0b29dc9ef2b5e3ab8ba3088c5f5a019b098c9ac0e7977edacbe8c46184da2f96384f16c262b73c3c3a647b4ed6f54976bc42ebd189d3d032fe11ca7c5d93f5a97e5d996066efc31601b023361482de5fab48a2a50791b12084234adc2b8261de33d1bef98dd41ac18812baa29667428e5cea59abef65842c0479e0016d09f6bd0f48020e3608a5b714188c44bb3708bb57c46b669fa3ebade5a2149c90bf16ce572d0d1efe01e66f5c1e227d1166b33f1253726596e13a3eae28430e4506647aa20d3a9c54346f62c6a007bc276ab4b21303e91963b20246c47905c6e864425a76450516c734a339da4ac6927bd79f9cd0724a02947ad66edf00d766f97d42d65a71171ec567244d0d8ac9807d21d657e11b0fa197c0291f547c325f06a5e886b52dcb04ed605514d6cc9b26a9ddfb9bbb6ac476ec166cc0ab37912f7e72a5d41cb7ab699da4d849dcacb5c5906071a0d5ede3130fd233fb69cf9e58ff67fd5707cb32cd549900347587a40daf5dcb2fb71105e681a7f13806a0945bd7fa7187fcb4eba0b0d17f6d3809e06f852a7a90d5708761effc370f08672da8b6ae84df6221507420d2a86c9a9fe56b805b027cb798f225894367d8f56fb4d009f8b9c5ee8cebc823111dab23a63d624f63f53be3d6c0a20c12263e4436e462407d72e3d854280d361131c169d9531430e9c556d0c69d57d6ecd4978b6926c0088162b1e6139fc3e8579717b395c0d1d330f56604f4c2b78838058d1152e689b0b8ebb86e47bd8ca858c036b768013bb4edf7e206cdeb617e883b879c90be1fe798904ff76cfbb804991fa6dbcc8ea244855f434cde71b64861e90f83bf1802fb84d31107ffe4d66bad37e0a73fd3a6007b9e124d82f0567439908d4d2a7ed38b222684267d13787be99b5c803e7ad7875536c79f77d1a27083b4a97f5f7cf204d52d11b960d21e83e2aca32d54ee973796abeba919a02acbe4e7bc80ea7cff073249625747db29323cfe3cd4ffa9659fa47fe6f0d4f66fe4b18c6f0848094af0bdfdce86ae8938f53d02923dab35d33e2335521d562ee2699e25196bf4ac765fdccceebde156ce4b875c3bbdf40e6081874eb57509b412b8ef3444227cd0f1b313391b639cde49b3906d91dc46ad8e08452e799e6c408151495c87d24d015d88e5c50d1e4d8a3babdca95d2f3f9dbc30e17716fffa3eaec120e05cd1e1d80a4fe8e31c545fe524c2e0a1d61d2b599ba9e09b362030290b96fa722bd7d7af98769125c18c6079956730e9952cb65b7cc1c72d2f95aa7a18415a847d2a9b0288ab531fa55ceba1fe2741e322e44d3e0027098f9bd6d5ac653eb599e960a87b4b4cb303301c4e08df719820f7ba7c5ba6282c44e34a2e5a730d9014c9008c6460e935a2ea612418a9e4a815ac45b04edf73a3df9e8620feb22c7ea7c480c37859ef5f614cb1fa5bfdeef64388ec85822c6814d2361169f3b329d5a54477ca01a6eda4b0cf953d4d3bff074d363568801d93d3af425245e3e66439afc14c2caac8628a23fb716956f4935f653ca6d5e3137584d93bef6149dc8a2f29d37447de4ecc943d58dd0b23b85a635e04c75a05be8b8ce29b4f288ff60a0a95f396c806aaaa376f503e9f1de7a2c78a070d61726f54705dd8d82840d34260969a1a19de5c8a083c7a2c91b0130ad06bebef88b3b65eb39d8d30dce6f4f1d58e4f74a9afd4ca7b174f1d9f84bb0122860be44c441408eb4410dfb2fccb66bdff7c4d1405b409f4a24797f4f65014426aff92089e18e17bc41c4b36fcc73fae6cb8e9d57a7ab7294fec024e9f62b2a48d2f6f5a3c3586e9a007f9f56188cb0b587e016a7889607d82b50318fa737abd6f13d2cdb8ea67b96a5c626ac580c7793543fa4f7a708465dd3b10c07202cb11736572bf7ea7e26f75921b03833f836ca5a35af11ac09176d1c691f1908122354c7cb5cbf81ea57074319a5c3525ad5a0c0499fbb3ea1624e3102d18f08f2e8d5cc2126fdf8f1f60c8c356e155d393b5eaf04dcbe05d90f4938048930c7d3eae26ee2f077fa9beb4f5bfe71f6fb9e524b4eeccee2abb806a65af5b1c3eebd10c3d49524f62df11e18d9fb172ed49001b1c68bdeeed54730adbe5fb01124b842bf28c2294239fa77af2db4c884911730d63e6972ac2d8d73a68dc9eee212cd681f8ff16723c7bfdf5b81b1edc2da3bc703df0cf4e25b92b8d8eebcd3fd5f036b2c33ab46617f463c65fa7becae5605af80d1feca59075ee88c0abfc72cb463312b3c772ec308997815c2992f11ae7cce953bc75ed9d8fae90a085a3235b9f3a367d2de87130bc079b301931cb28aa90d8a45ed162a766da59a11157ce115bda9271b67b9172fc12987def21d5b909254a619fa5c138abf02844d790df871c92cb2429a2c981da66ed9823c99d26b418c33dc76975dbcf8ea0fe30d4d42741d12516dff485d7c7732f015fcf8e0c1be9b77b9e72ed0b3214484fc59a587c7c3454cc51f7630f53a5c15beb7a14d3b0f6bbbd6d78b341842f82bbfe67b8e11c3abeb71811cd730f9d490a5f7fee1803ee3465bcd15519261ed4c553b3820fb232e7699ada41bd4bb82a9f34376643953ea62715234efca880d2fe5e145052dedb534672c74c489894ea8d024719d0d546a5540ed50d567be3f1c985e08054e29276e0185f69af96a20d463215755a54b4a68ef26d1cc120c6b5a963cebe706dd6e6c8f409065ca66e076d5c29154a83f72e3a685209c7378793206025575ff1371763ae6aceca48576d64d8f8562bf39c90e8f93a30d310d52ec1039ae75ded218d429feb1f830d0ca3cf4119c4792403930cfd7c3e6f5d0dcd0de685db04e234bcd86100751154ec4f0f2cf3ecac85caa9391d9e8f166cb00259517cceef50cf2aa76a416bffc074d396e51d4b50995027dfb227bf42d05a73560cf62f77b98f5b42343450a8d044b619020c4cefff42a373539e2b8f186b7466516879289cc3c30b574fef96f4ca8ae82c378de50800a0968a687055b571aa1cc77a389c7b2b06954c0a9554be74a6969c256aca4428a3abcf2d0a3137fb68ebe771ea2dc5137a626aeace6c8de1bd970a6c802a440931458a42759c006755463a061a671b1ba2e56c670748f380148bcf635a6f7840bdd6544f3f00af53d3de279d25c2ddb224a0a905dc747fde6fc783a05614616dcde0a5b9c319b53f88f638ada8eb9d655426b95dca69936b13ecafb9ffb39fcec5f70708ae118288d93105ce202bcaa3d5ea05c53db2dea4a56dabf6d3c774025a8be0b24cb2c7ce4910f765081df60c1e6d16d2b2caa21998cd111d6eca9ea6d001db4d4b67d58e5d188608dd3caffc8212851cd62b9e38528d77642d27600aeb1b5f40269b3c3789aa4a302c0248f3c58ca8f9f450139f871137819b7878ccf01ad5214ad77c685368ac61610951904d3e2af0b9c2b2adab0ae9ec4638395b8392e57734a7168f4eb6451308ac7a308da963a7831debf112ed070a99e132451a05f89870848b1ad0257cdbaf85f3830b50eb74ecac3ff86309f773130df4082806973b8afa4a998c28dc11b2008dd64ab73aef43081f22101463ac4e08ef1331f739a6f062f599e752eb5bbca689c8c05eda7d42bc1a0cbe8eb42cb77c93f4cc7a68812d68ec8a561613102c0277c900ca32b55822b126a2cb715acbe3733b5be2ac40be76cfe96d04fbe58c9ee865805bec1dfff664fe716d13dd17a81d4564c26d6c0016f045a0820e325ac65c0cc3b65f2da681b5f2bee6142a0764e2b17bbc2479bec3fe1d752fb29d1323334d5f5c145ae86f14b1dfc91aa8379473ee151289d026f859df7f50817c42300ea597a +Output = 6d999b715e5314f60810b0fe655ffa3d + +Len = 108152 +Msg = c62cf8082eab961b6cc9f5167ae70100cdf7f4ff89e028d5f12429ab21c00f0eff540b376f833f8fc69dd372827b453338ab0061cdce3149e93dd6bca9f3171394a7da6fd1389246974e571be43f3c8c722fdd92e77c37054b59bd5ec0b8a8c16d6e8e3bbc913648c525ab980af88f1264cbb21a3db2e30f00be0618ced8672173f04e209858d49d396af4715a71e5cef6c7a77f393add71efb4da733b1cfe3a8c7743a8cd53134edc655d2f3e71e7c6116ae64b41dbcc33ff8561f66f491514a149945ac34b9c61955e0b591dbf3d049bfd9405bf5c585b1a77c229d32a53b89baf6abee20716e14b9c29775e248e907ec8dc361a862af327d42694cd86612d60f1ed5d93512ad3e868dd116b688270a013e465ba21ea020de2b4c0c624e67bda5744be3cef8041530a4fb0ab53c2aeeb26d41a07f54091b6ea953427cd8babef29986a47aabf3274caa9db86acf6524548d5de69c9d2a70933f0785649f8c489ae10e71a4a8faf33ef101b643dc66298c30f3748664b4cee07ee15bd60d4ce8f2fd5bf1f979abf78c3aef7adccd8e8cbdda9b00c9551884dacb792c2dac8d2e9f40e79bc59856a2b8cabf7c922d7ebc6dfcbce1d1c8c640e6b7277cf7e7bd67f45e49e5b57fbb834932fa32107697471119f1be3c3a6e71a8c474d4b1596e5396a7fb5635aa2b27b2061841b43368ab4ba4a1ec754441a57575f9a9e67c004ffaa06463c2a225fe97b6921209de7357723f75f2f951103ae14e2e92f3ca23db94fa2da4d8f24c864eb700299de247da295cc678450b2ac070af8bf685ce3974f9f7af8005150f3d5b99eb0ecce946b1d56f1bd2f4bd21d4b82c7a6b08f2c1ba9e3b728bc374dea252e1ab28335e006d0ae8fe9964f175d60c47a256f9c25cfaf6280f2ea0ac4b53a900d90c4dbb057a3e7ce7423232973301837c50e4c75bd4a66fedff0925c5afe279ed31988aa647f48d5e53d91b16aa2c6260cf367c5ed603558763797bee3583df602e90379374a18cdc44b5f57479d15718487b5bc65da18b73f27e191572f183ca59b15c3d8eea0dd9ab756c2140b4f3db532fd032fa15743c328377ebf6d0199459986314d51282eede83e9bd9d3bab5265d0941539c3a2389a3632d22f94035694a1e6aa05df7e84846df899cdd9efe5f6e9f1fd7b209801afe2b4588bb1d379916a417d9f857323039003567114543e8cf8845c5cd0b81fca3586ffa9be0c75d65e2dffe0c8e342f296b464157f6aa4ae68c5a24d4894fb9f8b2527e81d00f3e9f9e6b1980e517cc7ee6653397f85b0c1d7207fdaecb11d96700971f553634c32ca162313ca40390a03a3a43b9947fb6db04f3574519f0e2570ce5e2ff5a617575b36d4f28131f01f82f6c7ba5123ed08708c63a80bb145e309ce5d16784bcdae09b347a2c7a94a9ec8ca4e343babfe38b472aaf47f8a4d459793ef376fc6d7cd6235eba30208910e51b89827cd32b764e89c5bc821ac9cd3c6b995012099de3c01194171c4e27bc4ca2c46036a7a91238953f6c1967aad040399ef124f57495042e7d9ad84c963787eafc855a7c623eb13541c4f5287065cdadf4dd9506191c0c42c24a4c62fd0900bbdafad19b7e82212f73cefca442144b8d441c4b85b5003e150a3061d884b81ddc06c6814c2466f04c7c911725496622a235b730ba6fc7046efe52fdf555ce481727f154d77c73865405152ff1ace2bbb470b52bec70fbc51745ba090295d3e832e5843183af304c0fb5632a5194117c8b9c1e2364df23e8d688706e476f4d64f6ea86ff99e526a8453582f28d2979ceee62fb026be5c8d7746f7a120c09c6262bdbffa86145db03bd2c7a6ded92a41aa66a53af47aa71f9b9a1e2df998bc5959963f71323f8d9c640435485b9f81ac67c5b2e124055a6b66cc7b0bc351ed319072877282726a857962217213882613c35de9413a00ff0765788ea902aea771a3fd286cfb4f5ce208770cb28b35903e29c9a8e9aadffd5a1408d9a45be163900070a2df01490d587dbd5788472a488227838238fb14edf9ff07ec7c23acaa134287873738d1d45f659fb271cbd8c7663905f5cdaf22396d92f027aefe630381c6ac3604068c5a4d4ca87e0d8dc39570cadb83f63b9a781b5c4c1bab4096d85219493fc40edaf7c89f624a9a016d2b28797ead7134d01289c79648ff9ecac10ab709250596304547da5788c5cb580103b169e29d0f85a13f7149301a6d8136223c466637414ebb5189f2b90f4ff6af890f27c3f8300dacb2c5ef519a313ca02ef59b73d7a468d26c2abe6bd503db9f2eef22b2015aea8d7a51f33ded8e5fa7879f72ee75142112fe393511c59b69486bde054d46c4aedbfc81ff4592e98cb4d28657268e350a058e31d13b4f5b4243d65829e64721cd00cff25e1908b736408636d2cc816b7622a2a12d48e0d7d909e4ea0b2d70d6b7a45b1fba28dd9bdee3194d50410d4c17e2c20393eb08a5a0132e1043735278113f24567de58febf90512266a14704b41de72d5cf72452939f7f8475d686a7a4c29b25323df7e4c173ef75e8ac758ed966e1ba41a7f24f70910fa0ba37d3751dafc9b8246974710abe93f523cca2597882a42db1f7206739006a9e9c012379340303660407d68fe49ac50adfaad74fd998b8f0748eb884351316e4e3dd7f9b30e6d2979cc22625952f0e1ce3ee1c5743d1a3695216c18dadf39ddc5772eec35b7fbdb3b23f6b1a66a4f593f83f77590055ef021334446ae9c787edbf6978d9fbf74c220f29ad589f2203d7e645f23e564b23227e92480331b85a7ee56925c55975074d7b26f5c688d0be5075a994ec8edbc8305dd8d540cdeea0f98f1bfe6fbd22779abdde4a4c69d7b0666c13654cef2f659676aef3090490e0c586260abf6e2623729ffbb4d2895e6182952a6e46c36c82bb91baab4620c7a34a9234529eb6a8933ee7223b40318e580ab697b6c350bda80778a704df67ba70f07aeadcf2dbd050645efde87ea98f1d68980245a9e0485de2f21b07bc2292cf1f08f2b2a526c7e14ecc34c27539883802031124e2b9352cb4c6bebbc59876483f02f4dc9ddfb5ce62f96fd10b29a13242bf6f5a5423ad9ae5bd3a28e3138f64b8319760c44ec2a00aac551e29c004918f93c2efe968d831dd9f3456fcd904aaf25d844800bb14deadaf8eb0b847d6e05048b3ec87cfdd780534574ef933fea3564e639c3b6dd610b2c8c3909e0642a4efa6e958189fe4f7c3434817c369a5d54acbdb625cad2ebf83c09cc4c5456d67d3750d3b832117378096b2b940c320ca379e94a44bc34472875ec056134c82b0647dc69eb09d9cbfa5f33b3d5a89980a868d3769f0f741b1266cd84d7262a7080a86bd88875a9b1798238baaf802341b9d616cba33904d04c8b08bb2c9d104f62d579901f0a23dc8c3ee4b0802771d87e6e1da9efcd88ff4d5f4828cffdfc30235b90311d3bba9598d1b235f5f307ad6c7d72a1d33153008b5fe64e3fed509b48a74a3c118ee08525d74bab8f975748eaa09033fc09057c9d196dac0adfb019594502018a783823c9dbfb91ab78e3339f6410e0d8b912dbd8f868c2af498d02cbc15231e68c23e9eb4c5c78e81c2de5e1345f38e7c60da6e58952129bbf5a101688a53dc44f365000a4e8d1b3f5b9e8669dd59ca7c448564958a42c5ea5b9a9d01785959215d1eea0722b3c9d99f9a3860d3e8ca71875725ac2e96076a10e387f0a7dc9ee94992e51308e0a038d7fbfc60ee4995456f773b0749c6f6215ca5479cdf85b182ffe97896c9bca9424ae85ad1f52433de450d2e0ca3799af88908666ce8fc9cd6c74a2cf82df0ebe0428adb1bb120ad26504384250358fcd7de336bca89e867cbe9dd88a1fc246efb050806a6eae60a03da3fc7b9320a23a7a24fde1d8cf1184baccc14f9feff3b79dc8b64da671e525f29297e2ff938174e1e8348ccb7c0b93d5a3c5869fb2a59440f3b7b20f26f8e21862a32f11e8ae1b69af83041d3fd51883957dd57ba4dd042e63fd6de5181c531396a6a6669a788c55dd51ee3a750e91692452a2c040fa95da9c0fa7d4dfdff778a10aef6a4381465b1439a1afd5f88ceac2ec751a118eb7b9fe57166ae8b44dac144860995e48e7ddc6a2d4e9bd53698d1393d2c59119e8611d7c2003cd29d4525307b070654fdf527715ee74a58fb5c478e1327f4a2cb6547bd75b2bf7b119dfff91459bd3069b5da81b64dd290e0025756d1a93972790089c012e6fe2da9cb97cada65821fdba43dc1bce9fb27ec7349b90019f12ab03f1f082203c2916cb735c954941fc959ac985af8218dc2289565de27e1e471780a50bc2d71d34f6249211e0a4e5ad7eeb43273f25e4f0c9a51f3eece68daf0da496605b997f90e936aa2f284fcfdf19fa5543533090aaa4c903a107d169b4fdde4a70a50dffc760800026d4b04cebe766546c8428886474638836dbd53ee358ac35cf479b0a330c8f487b6e6d096e77add5053a7458b898e32162c15879d4ae7cfcceabd72b7e4db2f7af6ddc61c13b3f5bafeeba6e1182e673b770e1a6e37ffee4115a28e01394a982354b9502aeb2a96cbf395154f9d2ebe3a732e752aa4d709019cb26a46d81c16c9f900d58617e6a6cc572df99fc0941e5a4a00fe9938790955a8756f51695993b50c3dbdf93eef0e05553bba97286a71e424091e829cecd485617205e99309f630b6f56f4b084eb7be1248c0007eb89e2028d33dae783854d9ee3195d5fe3527801fb255441f0a883fb9db72a169848d567fe5c4e673666f99783a85de53e50ded6efbd6ac282b68cf707d3a4492d826ce50c719f0357c0f0c26163fcc3a1f92c1cc595a4aceba41b85fb57fafa0bb51cfc402a69467851b7b214c29675aed9d42605349e7b6befa40b00baaab3c36f6a3031dd29cb1867b2e9064ad765c5617ba53710c4b8b3f7bb0880721000e4ffd9034a004ceba89176d9ce632c3e763e66fcc3b093ef346ac5012324d76bd104edf8013a6f42b95d7806d5b2014a41af3aaf43aa98896d97567731396d5f281d1d80eff1fd4abb3a3ae2a4bde323b8526b2f2f554f01e03be3fd63365e454a96fc207ecd737e3ea6341fc3cd6e553ac67d1eff4734030c96f1e6118206c8c900ee7926036e47a42ff7f0ab86ff494959f4d13c06c3e7735704d3c4c3135413e978dd8e5a4a519c35fb17d461129a84ab46f85e0a9b3984ea9149057fe071cbcf3fd0002894068766b1e7c6f244a34d3907f6edc90663e1c02ba85bff1aac511087f33404d7e0e620c1030b91020e33619c5f53d8b210fa86489420e70e5e345c05a99255827b48f28cdc0ae3e735a7d3988438a01aab3f9b5c7f0cbe5821e6102d8593b12030106a89e55d6140b44b0d7127f4b5acad317dfbdb67fb747206bb53f9c0ae4d99ece75cb17b8fbaf47d5dba9d209fd49170bc8b3bdb14efd8e6ec3d88919347332ef759c2ddc5c290bf62c96644a54ef26dc5af02ce9126c136f13eb49f06b9766729259c0ca9d3f391ab4215c99c684a9927bbe2cb06b5b55788dc00317f20ee25eb349f70b28ba794a5a91e37bbbcf47361563e58cc193fc90199ee0172fa04dbbc0b5fb266361728d0630207a9b99a9cf0f287e087cddb1c09fcf08768c145092a0e5f3a3b8fecdeba0443c1dcfaa7665515520a904ff1c0f0799a2bf703492ea3d21080b8e57316c11165eecbdca5701c332f2f9c1c1e4853945d67743c6bccb7eb162e44c3647193feeaf70cec1f4a94d071d7f1cedb12a1e1ace286c93753d4bdc28b95c61b7f9131457306a56f468d71bc8c37b492d079c62af59556366498cec830f25a0281475cf7db5fa53004349b71c4e479ffe239c63a49365fe36f629279a700fbd43734e684985e47ebf448b2341a7e9b5cc860767d25d042b8e4d0bd69663827eaf1d8427e42a929fda7285a75e56c7534039c3b4643f9ab4165418409e71e6ad141a0154762c6a80f8d5208b9be44b430143ba9280c18f5f751539afdb20a3101c73ab372611d6e8c276421621d8dc4cb8acd24b4f6c4cf55498576974fb21706d2f6c181d633d9edf5cd49118bae1350d7df526f8c7373d5ae358b79287c994af562b3e83a9076bf88fbf44a813c4c7a7bd0a6aa35bb901300026e15d4e01468bf1d0f27f6c9b17b518e977f769ecca2f74f9607aae3b077df7a72ffcd7324ca807427c3933636abdfe3c723047c1064caaaa50a24a2318eacec5e998aac56fb0a06b24da86c62cb9499f7c7932ab42a768048146b7dafc1f8f66565850207748c432328aed2c245002f9dffab41248e8b5f13d8c7bc97bc34274bf6550ad2c1a7c7fed70f1fd1b2b3034e1dd545edeb69a59ca9c20575d7eedd66ce632d356cecf3a9eb519a2d9f2db37cb479bf7cdb91e22719f2eeb69fa9a74a5047ff9bc0cc64c8d80ee81264c0beae5620f46dc9a49357abd2bef68dc5036b2e7be89277b689b02faf703cae1c93576563ab1d501237a2d1da1ca23cf1804dab677ea5fc3bd10454bbc908c5a1c00c84ba4a17e95b5d9d2e817e45f79f9c6679a32842c8dcd939d9ac591355f0d332168d37fa1ff063bb04516a5e782fb649fba78bf5681a10d540f9b6c8d97a3b6cad551b104e71e86105d2575829326c6cb3fd003a4464064b0d4c58b5cabe6710bbba6a170f306a43a58ccbcf75483d53250c3b8df85b282fa0ecb546a42de4d2b4258b5accec57b765d93e20f6c19771e16d846cfe5004d79e836317f0594307491f157821e63f50c94034f9284f095d5b897153c0f31af77888c89629c0f042cd1f9eeb88ce9f94326a36b48431118a05f888deeaa4d8f3a1658c4dcae57af9c29f6e217bf5e6e653bfb9ff85283e6c7333417ac5f5dd40bbb1f49b5e3751b0cc2729a6760ca3eb8fa94516c584ee9925b221940d66768329e6b82b5e5702ec3c3f48070163650858cf5eb6afe7b074900dafd70b67632f7e9c3d6a35950d20b5505fbf98aa98c1319a6d3bbec112a3349e52905a78f1aa2c1b0ad49ea1eee2aa02c73cc632bdaacc8307327c91839995fca07c753bc087a50b9706d3ee16969cbf150af4ac42296c11a31753d991cc36911fd7d5f04e4c8be6685d8fda12d10ffdcfb6be77d4c1a2dec776ff29abbf9904375f1767096d4333f5552d06621676376dac8e15d4080342facdb8d26fe83fce7d6e93e0607e6d6cd48a35f392db62046568de16ce710fd6a3782b942cda8d485882e5fd01d46cf97c792512139445dd4d8848eb32712b125822c1cf810b241a5f38882d6c13c472538e84e272d5a43a9c6739139e9cd77e9f4a05e4fafe76ad07fbe4f1fdc0f6600046d0052f140fa4c89239107168a783cf5a828509290788d949a6db3540853af94e90caa6e3ea9458a5c37239491dba9ed0a2201a1f492659ae2859a136f37ba4f241d378a9c781d30e52b974d2ac9b5448ff36cc55de1dff95f3edcff8c39aa9ce5d9022ea1905be288146b279d6aea63ff4399e4118c8319d9418202a68206e5f6e812439619870a0b9aa50c31e5cfb022bc8ee759bcd96218359403063956911df36fafc33a2a0f37664fe32f63ec94c00455b77d996a3de3c318e9f587230823a2225c701ccb59d4207094df0bca78a0c3f63ac54abd100393189eb994f3b1d09c3230e5e7f250aa7011068906f0c28ba2775a79f85a44414c9b099a8751f6eb8aa71569c2275c80fc3923757be6dc4948e2fee0caca426396aa12e288c23e3e138af246d5f3e5206ff0d2eb93352ca25f3e0e43e99471311b4ca1d7c1d0f28fe0e2aec249dd53506f3efb3276641c5e8c9471ea7c40387580899ec3570278a798b73326466e0ed9a42c86934bfb124479eb111dac5701f57069f1ec75e0394ee41168baf32c7e83b8c15c563a83781dce4bd524a160337a91f5839b41f39d4b6cf935c579a10b15500663c36d83b5b132bda54682e335cc8b343a17e3c20d68d776829100551e5917018421098331c84e4769cd776871b3072fffaa84d6ef6bce913764afcf1d15b2bca8ba390b542acaf409ffaa784ef7adecbb9a4cb5ac1df8513d87ae977212cc3fb5d423a4869e4dc96e25409a345f2475543062e9ad46febe7a42263583180b9095b8efd52fee7fd07e8664578bb515d2b4b4effa59ae87e0d7dc3f31baef17b92eaec627b7e00a10226c3c36bcbf2709c16e1a6e171c3cc03c9f20147e5e99c26afdd021863d9391431df0bf2d46032465a50ccf515ac46592d1f266362e39b12fef344b04ccc55cc7e2a97a4711502a86a3eca46e2ec9d7bfbbdcad4c279e9067ca1b2d9a57457898038ff072eab7240eaee376d661f01fada5077327117166f9d7ac50aea4beed9cc8c9a81797e019e40f19ccf0bbe34442d69a3f2fb4593ccd5e103baa7dd6c4bd79802a9ce17211f00eb52e26034a4e6898be9accd8ff19cba76e76f4a83504e15ddbff6b9016151af2e024df03cc4606319b0b66440a05dbf9ef8af6ed84b5f2bd03aeea6c732b4a05c1378481123304ea581a65c12309e59ebbfe16166bdfd7e11fbf833c325e688d81ee7b46c41d490b1e4f3117f22bd1dcf95abee9918b781158bb9dcafab35cd347d22d1a890cbfdc1433320e1e7587fcd12755309fc1bd95d6299fdc74340e1f3c6a02c409094da5634dd16d50efef456ceb43b13c878eb4c091f33b47e867b9873e630eed1bdbad322574fe2fa0f201f231ef3511e7d3b83e7b00af1cd74de852d6b6bedd4b523daa448587649076768b7ec383c6e874e77a702e009b0aa9f5c2bb649d80a0989df3316ad196c764ee5d5c26650292598a99f7e5f56b8864280174d6737f22961534748da46e4ea5af935280a16dee6be8c6998d57355964c93789730881d934ed959654c8942c1f0153e93a00b003904b27dd8eeea08693208b82a2232fce5b6c3f1e2904af69bc2ec5a7ba4a73dab1f9e44b51825516d87526e8cd8e3108f1db5a947321670e637d131769475d79b73b266b3cdbfb111a0f30435b0f2e8fdf820d8199e86621fc3562beafbe17ea885915c6b8c03b804337d019b46fcf6c0ea9816c051e51ad6e9fdd26f57949350e9bd8e32efbbd6a3a352ef44075bba66598dedd1e8ed3b7a303a9d6a13e9a602f49984a045228d7e751735b66eb9a45cb964b5c4cff924982a9f1561dd6b275d5aa7c84a48e25cf32d3c7d7919716522aedf072f738366af3d8db2fcf093a7be707ad1874775b5b030251ef2643d5d369e3f6a687026823ded98fe8219eda7b4da8528eded4738242273a2b8eb57fd370c185816425d07b2bf536097a5f397cefd5946f486f144dd78aa91331b6bd5727cfc48af769157ac371f81a41120086b5d69b421c0ee7c2aa73c730770d37697654dc49a696df288c98fca4e080d6a187f28e8fc17a93eca42abc09c9849410459af546da73d88e6fb16b2fbe7164d64d7395df9f7bc1d0abf6af268de17c557ce7350afcc9a6b354036c4143ad522cef9fdab81ed81978a821c8102ded993e0384c71c7260f19f24d72864d7fb47ac55bf82a5a65b42eb84f1314e0f7090d6c2b9d104a600625bc575c71fe224eb5d671ab82b9fcae53125af0f689d320c22a1cd7c4bfe71a0ee212570faccf1e7470efaa2d471eea95375a28de73dfab32c890aef78e47a54601f2f4b7efd27e37230a56827848f37585b14d05259912dfb60b65313bfe526baa6da8132de9186e7b66433ac41753648be4b033158c02397101acfa4f778bd03a0703a9fd5f679ad897f2bec0e674f2b88904c0da24d3d097f7e8cb4f4fcc243f4379d4b4b1d64cc8f3e776e542e2a0aa02bd36c9f0022589729b1ca1d38dc828a78d3c0a9cfed4db2e940ba7c926eecee64c1d9b7a37b8c3e65676fdcf6b4c94a7a038655d4bf37d9c7ad59ec5bc4da5a833ed952fcefae5e78d62a98fcf21f1c875623b9f48092ec21e7d20e51d3dbcccf71f6d8d527c4deab2583ba133d8de8e5f4213bf7d966d23f15ad493c44f72c9183b7b1f4cad9a6467d02a8033d1a96dd040845a471bc7569607304e3be3662129ca4452181f29e910530cb949bce0eb7af5e3ec4f19bbce7f0aba90feaa15697e246fc26f419aed4e6948b8effb138bb1cad8e1f000c8f00ecdd9f886f3ff16b80243fcaca55be5647b751b810ccfc31747c9c7d4716d6fe7c924e16f71919d59cc774d4acafb660511f83db77264360de54d2a66dc17927ca501e812735b71c5fb5050d412d7e3a2b568bbfdcc7f39183bc97611b1561c4fba27790a99db489f078583d32dafe2cffe4cf2ce5b8f60c8a3c5378f91b741c3a0dc10d2559f6647798d72c26bb1f7ef24fb9ea3d0032191c5c6fb1aeda9b79ad1b64be426f67f51e9be8a1c6dac7772e21afc08aa7910061a551d5e35abf217c53c86ba9e9ee830b0bf565ba3edf60dbe11b7875b6fa08809e62ac3fa4c65dd03d55de02ce7258666f6541a9ef5081201864d8a534547aa2d00afd6bbf9a75d16274def427ddba5850a0fa3bf60022264df2a9c329899eeec1b2920eb321b1a6498b3227fb16f209350e5b195ad98b15082db2769e80bc8dfbc031d1894559787b04a344520547a0a6172beb23c20414d27dbd6799211ca6069ea35c48ecb46e7e45f9f3359203452b23315859a2d44b314a903d2554066268b2af56f8000bb1dcb8fcdbaaa56c224d9a3609056344e3affcf5a14701c1e9ab661f68a268a6681cc373a5bc26cc5c93e402a62fec9c04d4fbb13b091096625621ba394d0ccdbcc7d028f870fd691e86695dd6dd2524d527af8fb27269cdf5f24a477201d4c8d56446e17dd0128c8eac910f4119f6237f308156af8af5aecc064b8fbac6a8deda7b8d67dce34d7cd490c5df90ea47e32977d7cdd95a9a800c1a8b5abaa57059f3950d82bcb1978319b76b976b5900aafc851abed9e9418de0b7726f19a5147f4a392df9c543d6e785abedfd796c09c120e1b3ef5640d31b6e64689880cf7c9904ef5896a0a0f4f13ff3b1da632d4a70bc130828f9653673dea9d59b972991ee4c3ff31ff5d0d7e9701721f5d0a4acfef9a483336a6254dd590e214105be39c848b2675d6bdc69173f9fa31869d815b5fe1b8bd7503f13a0071cb45273935d6d20cf1c18abcb90c2d514a109d6d16edbf40087db53025d060f5af79688b2e626fd1e7a185da5363459fe8291be97a0b902dce1081cb51955995050d5ed22ba3b0728ea24287342b3f4e3ae78ca33929751350026535f2fd6cf8728d649ebc3f46574d206b43c9c88ce4d8d86a1ac2bbd08964cfda00986d1d786e8624516e799408b9b84aa082cfb0ec38783eb0a557250842d54a9ba088ed9d5f64189a91071bff3ae67b2dfda53ddce04365255f7ff51890bf4197a9c54fefdbc3bbcaf25c50b36717673ca8eda62f56c687c96f8ac322c4ea696512a6d6d85a017862d0edd4bdb4e7b96d030d6c6c027e111d542c11cf65e30c8489b1f4ff50c9f912db301a86bac3cc2faa89030b79d69ba18bc86366da45a5966d5b3ccd6679982b6fc794a6df383a04fde50c96336c81f694e43a91b86eeeeb4c1710baf19ce04d1d18c58698a16d8d7ba5eb84b5bc5e7cfe03f9c886db2323847a035088a06bd851a84fae8dbbd119a250126f7722aba535ac3383ac270cafc50897169220955dabfa75a714d42f3a105823bf0e5bd42fba417a4bbebee6108c275e85b499e75d8a83e9d8c486c28f344291ebd1a4724d1a783099352f59d6287aac265678fc588bd90eec134025598c83ef8e67b8f0bdd494f8f485d4c261485712610e4a2ecf1e7e773997acd25997b09f0f46e5f9d2673c25d6476bda526a6113ce328a0931b0c89549b80953dfd43d22f6e5d7d82b40e259c6f040ec29ed0d42d669b50610f15bfba50af2148cc0ae0dddcafb2638f00c073ef6f082486ed002121a57cffd4ebd1cd3e6f3bec0eb77c21c6ccc6e8c033db0b6e1e7374e5e4de3f9dafea14727407b4ef29a9d1cc32ee23b51c81b84e8dbe8c737b1759c49db6b0611f6349f29aa998eb4334a00e637e0c3107ab7c41f8b11d87edbb7c2a00d09cf55faf465b44fea0b827a401da327404c0f50bdba15bfbe631dc29841ff5732ae2d596b2b55a4ff5e03bc19b3a871732ec4e6a7e779de510f9b0271aac64e882afebe03509c3e4beebe95317354ab0bf3c7a900ccaa8b7c367d27ee6d73578cde40854785e6905245f98211cd36387d238e1452ea363b92604a8f68faa5068330a93bc23bc33fa4fc6aff4531dbae49469eb518c09b63262579b56be2d9d03dba8f6dede2b090a66a79894641a370f2d56017bcd04896c9ee814681a670590ee4698824fb4d37f918bbac9f6d3c34fc488898c9a9cc4ad034079f24c606e56936ce172215e799ffaf97d5bb14e44ee8185ed4d9ada503eb9e633bdfb20c29ef3a33975fa32e4b3c67949113f95a4328dd7938376c51367e762ab91d0b0e7b0357208528336fa02209386b445b0c9641005e5f9d566f66fb63d48357317c7d48362b6d26374a4d62ed09c0c6ea59dcb3198497660c3e1a04dfe71738b5d485202faabbd42f4cb7518b7f4e15f7e06b1191729c1bfe6bd40d52d9011c08b5471dcc250dbcabd552807d1f4fbc343ee5cf00aeca399d7709875530cd8bca7d27b39420bf3a1d62c3723a4052240fa3c15ddfafae4969ce4f056f74d9024bca9b6400345cf6f4a36ea93ba901d7eadd824086ebb4c5f3fff909fa1bb01a3cfc36b1a8c6735dd1e5d89809bfbb52663a9d19aee97a29cc8abbf79d9bef2dfea07e1ee65d7ee925c875b11cdafb2e0259964bb02f6b0f43dcfc60c28be2d80145d62e517ffc2370c9ea96fda15dc53fa8f249233403c10a853ed7f1523782f56ad3427294678743489bbc14a94fa28ea745b4808dd0f98101e7cfa29559c94b7dfa0db2313daf0de30d930a393d607fd2e4f040a35f1337e1abba7eabc61563fdcee2a8ed0ae54117b4be46f7c36963ca648efbfb0aa89f92ef2ace2c08e1df68a663bf0e4bd47d652580435b6e380aec49031b1b701438942683199caed93e5d25037d4b7cf72349d4ab87ea9a56b5b716ef168b0bf09363f665f9640445e139cf345bfb1ac7d3344672ad1bd43004c9329576b05ac82090b345d618c5c2688d1988e3b3a1b0fdb2ff87fb65a87e688130a8d421c9057098f1a548214fd944d578739cfbae5d0354744e2b5e837c517da59b8755f33303fb3606c8142ee4f6918086f0499d26a4872957957cf1c4702cf5e038c345db3b1604dcce77df900e4fb6358603faa821c99316c2377fe1250d960941005d58b697c2a9d3c2ce44fc7e7df1b6d1435c3baa561e4a249a5ce09e2a9938939645e6ff03f0606b978e319c6c5e1b3813bd2297c6d095aabd82436d17f297d38d2d5c9a5d430cf8b7d65e27f5dd1b9ec835a71089d02d50661bbde8e2b7e766ae797818231431e0abb7c2afaef1407bed6019b2f39f89bc3063d0900f4b9fb376a4d9f6e9e667c9efad1fa1fc3d12560fc6faedb88123248904fbf1124029507259e295362c170af010c59d621319c38bd4db2f3d37924ffc69b09a80283ca42de332918c67d82a599d45007505cf2b0e143b05f6254f94e72c9eeadd56125505eb3a6a512c23ae88ad1e69a9979b22f2ff8ae077dcc379f5a817709e6c72b996dc7a9e28eb721e09cac237744b0611c7015b7d36c096859476aaba27ddb6686d21739b78185bef6960d0f86992b89e16c41d0ab763213e4022c9261e1c55d7d574a5e0c35539990429bb3b0df0fb1e5eb250377e56fc1a85070342e5cae98e7c20820c9f04a3b1866ff16db60876290b569571fffeaf90dfcde9af234bea02ddcfb88d6fb922bf4cbe140f062b8234a91b4d58b0dc8437bcc1dcb93b21cfcb56dc99d1b9e52f18e39e73ad82ecd7c7b49ae83a35634275a8ad6cffb1ef134e93d1a688020b3164c78bc0b790cecf58ba3006b5024542e12fcb0af10c064d1301397efeecbdc21984f06bbbd433e17e368529578bd50df0beb5472bcdf9e5af1b9e73c4be5f59ad9876e538b1dea69e9604b07046a51c3ad1e6920e6c5c65796f5b35781b7280a76e89bdacae01874065294cbdd737f60615f98c276b805508690a34676899bf8d93a365864d5f2bea207d5e9e92001418d74895e530183ce29525e1314a376ec6945e6d640449dd12648b56712b900eb9b26e3ff67e86758e7028dc6414ce26e8ed1545a46754435f8dbdc4f3f85a3e8f13d4eaa99b4da77286ad765e7cd0707b0a527ef5eaf0d708288f3a958cd13bef9817469d1af03b25450e5faed6e0c3e378a089a703c200c2b19a27b44d977f819bafa43f71f0b91d37d5e8c3b77199c8c489f656462a6915a5490cfedf1f81bbbaf8b41f44d199c0db9eb24b93058a815a79357226ac785790366ac3a5dbeb14629cd69ae81565c6bcb34c94fe1efea3b6f8d78939caa72efeccb1b1364f04222f068c50e03e958537de083e5d106ea666734d19d3f78df24d868226050b654b6cc055dfc1afb182e95985a6349c631ff583169299d5855808ee5cc096739716c854c37610fb42565dc0357b19156466c0a2b4920fc735b6bd8e91ef7f2a120abe2e45d232a3b065e1aca81b7f1dfb11745cb7768a5f1794d7c1c22103816eadcac76d72cb3b943831794e15eb189fb66d1b9fdebe0f9378e4327df3d83bf5565aba9ab62f255653b9a0a7d8c187babc3759ce38ff4b31e96f5b25d6719c4ebafa726e3af2f38f3ed6dd45f2a6fde4995fa1c2f3e2b48b5cd5a64a574434e3422689487fab189750356998f21fed95d4429e2ebdfcbe0849c39e6be4e4985b726b59c9d2bc17174e41e0113570d957038c8961e5a1da214695cdfb0db7390fc2458e62f29a71877f88db6f5b6e43a09d89fe0d19769b7ec9d89f8840509978b82171944deaba506a76a5d3d25cbefb18e78660b7df74795a189d941b252c4edaabbdde5311541a9597fa1f18b09dcefc219d3d4f60e7995dc2429efcc973da9020cdc190a2c13e97692271bd2e72a4bda4bcd34eaf77576b52191973a202a47f4d1bbe85139444d666c9ac2e1ad014d3fd6fc343ffb64bf964ab83fe435b44fe7d4255aee84fb5e91d5a0efa0a3887e59820adbde606ef9e66547f2b21e034a43dbc078ca5561a26094e1a9f710e86590179c32af6ebaab0c3be5b58c223ec06faf3449cbf49ea3397307f8ce3e488b4d5c5d3f9a6f715d72943b925a8b8d37d5182ad5daa8d9e98538b7e40d73d176f61af20c88a9ba987f38f090049f1939dcdd4a25e0bb3afaadac9b769cf8abb0f51906a15f65bee29beeadb772a70a4decc83b40c373ea6017975bb56315fdc1b0213f0409eba4c62e7f1a108dea88fc6d9fa62e6d1911a32dc19faa4b11ef2f91fa453f6c8395c9a0b4dea23bb2baccc72b32f8c4f4d64956f10e5b3a36ab84fe6bc15a7275b9755a53a2766545c847633488a5b24e62dcf9f150d219ca5647613e5b5b02083751c2240d92f4ecdbf5a7824f3d1e6ddde480870e17d1161b012139ba4c038638e541f1c800ceef1b5dfcdc30c9ef9a6ee7527cf03048622039a62587345f35e3ba40807ac8dd96af07cb0bd3500f1d3d6fd7979d2768f68d7758c9691cfd5e6157259accf00729bf7b7ad8dfda653e730377a2be0418198b449fef090bc548d9445907668236ef75427308fd70d945382c9a63facd3f144226e35d0e099f3d740a458fef855131f7e31c66d4185379b370a8a4fa8cc72fd9a78cdc211f73835a3050fa100240376de6dfb90ddcbb240d5a092b654897b2784f0234ea532963b23ee10f7000eb4900d423c84fc4f98c6d6f25c0e40a97e549a5ad2d10afa925a4bd6297b8873aafd7334f5c43d7f6f9fc39652d1fd9af107131f68f3c3bdb115a343a5b8fa015b01c8ecd3d901d98b5e23f2f39bdbdc77a1b7b432115fea86ff92bd1209e516496f46a0433df9ec8074609ecab67bec76c6d0cfdac4400f686ac2a8fb18ca40fa789515c06d8636f365020054cc4e5972e8f6b8df87049af9f99badcd502a1fe2c03ca3d7d2273738b2a0be0e47d392008aa2059cd42e2b902e8622053a84f196c8a5e0f6266d6be4ef952e73b39c24842e6b4cbf362d2fef7c2abc3f425b649b144933a7b4b9536c7e87e8118a189f8236aae4a31772164c64f1c2d8022de74415cf426917ab7c53d1c1615445c9519f45f963d5129d7d5b6b63dc6bf46d08365f8063c6b9a4452fac0a20d8813ef91feecf50e1922fd38102096f7783a935f654153e2d35445c444faaad0aa6e9d4a863a512452079b741db4b02675a52fee895e62818f50c10564f2b7c67214a92ad77135e7c483b773229b12bd7c30ad1a1977bb826835c0fca2d25057aaae1a1b38b826bf363c5b1c6afc4422568314ca5cb6e74b26ac4a9145bffeeb18e3f904f037ae1471da8e573c00cfbfcb456ce69b416d46915c68ac97e348ea865c4dcc4817544e3e06590cdfce3afaa21ebd551e40d5da70ee2135de66b6bcbac11e5d8880a0d56368c2239c900d3da5b810012ddca86e8d097e146370d0c97cb9759ef8991b12a8a7d485bb6bd1ef9ab86cd1103c6c6cae5685326e271f7a96ec5977df8b4c6bd76b941884890d774ac9daad0e8aac3b9c7c407546b62a35ce03d2d0877dbc49b65e0cc53e12493f7d91617d71ebed431f24b7c635437963eea6e8913698f1150f264375332e0daefab809297f89b9ecfef6f10e81f7956dbc7ca4a335047535a86b410ea903e22c8be7da9a818c979e0399f63373f905b9012e0deccce8d01349d60f79e9bc4f21f6c6ddb6be1c10c1f4b6ce1f537251b184632b55426c8815bc0eb49f3b7fddf504fc1966805fabbd9af482b8698902bc0fc407c6e1ba27a5c8bc3867e67412117d3296930d80f0fabdfc18e8fc679f4168f9a828eff7352a3488a4b834c579db290f5d23afa567e125759b955633b0aa58a91761b54e380cc919ff7c6b9797bcd03c7500abf799d8990810a9bd16be5ea77c5a5b7be5bab24f18519ad415f61d3960e6104c9d0d48e35d810b7a3850c51d1c7bfc89e442868e2ca2fab7641d642d24b93dd9bf4b9ac91bf5a3d5c0ee47822e812e267459ef4dfefb845caf94fb7430f56d9987dc3414eb755915d6204c9d5d75d89bbd8555563663200a1ce448d62ba28ad51b47808c74081584a46f3c374e5ee231e651206f7be3b60bd394b51bbdc97bd6a314e4f85fb6bf684f627f18ac44332d1742b96175822ea5fd2ca80a8f7128e148ccca2153873f0a02827d081d30b5da7ae286f3cd487021c2348b6c49a2794131f699d0f9847db2e3559fcf49284f7f34b8f0ef2b3d64c74935c5099364563c881ab9cbf9b462a81a654b34da37e963704c601b366af3debbb7bea913c0a71c72c092dafa20d433d03aea0175626ccf54273c4197d603b03f40de1474bd542719718cc7a4cebc9c2d5ae5fcc4b3be0b08d0ed27f6897d83fe5a8d115c6445a6a5b40f59a0c8032c584fa2ee6f31c85fb5cfdc96f98c4aa0208c336a74bc63e03e12835796168f287aa18b9e1ee4721383ad70554be6504fcc5e38e563cd941f0a12508a2dbe4adbbad607d678d5a56e99f1102e929f79d72a59044bd19fc1a9343cdeba0eca1b8c41787d5c250b47b9202326e777c0ac826304ff63683bd3c8e21895aee141e982360f57f9ce8e413d3fcc1949a150d1969fe892f7cda8b0c13d2fde304d2c9e06c221fc751b677c3f1f73511cb957cf5c058b23cdabee42df6c081f06fa9221600d38d498b39ddf0ae7a0362866de901cbe771cafa8166f69972bc1f9917b5ad83edb472a3f3851e5c0db303451ebfb1ef134e3636c2621a6e8212dd1baf031b67e93bdf26641bc17d2ada70a2189f8a9c748e2b1a0293fdf8571ca561cf78e41f4e69eb9d1bf07e9449d03707fbd6f06683d7f63ec24b15d96a3ff50609b59c2c95e524727ba1aa33f34ac2f1391487efb9b243ff7215f65444036862de17a8124834164113bdd8deaf80a0f840c6b57a9e8380f6a273142b6cfd6c12cd3d9c62edcd4d8374838ee6e7385d77b36c1d999ae2399ec3f0f3a16d847c905785fd90ef1716a40ec1310f22d86519f18304ef4744ca62670e19789e3f0665fd8f201ed4a82e4d52c56399fad734399b9a1fce1c31dfdc0c28f9f39793b60e2fc7b88f3706d0c9d12e9b29d7bb6761022fd2c8922fd68613d019b4e218f7e37ebe3b447ea9cab41a5b4c3131fb5b2ad592a27131954adb1ea1fd2f064548906ad10ce1240758868ed9fb32921dabe18681232a8308b955ad0d28e45c9f34af64bec1d7bfb626dbbf393cc090a8c64f8569b9870f008e801f7001578d8d286b0cc5eebaba2c920e1be7654d862326af52caf9f92e0346e516892b1af195a08dc384d7ecabd146a83563294c1af3699b8f13591378977eeef2a71a71215f3972198a320ffd4aa1349c4add4ea7bffb9e9ad15b486713a3286458342cb5306fa27f347167270f3e3da0fd15c7b4df59230693751a822e300bcc2b2c9ff5bf9fa975121ab4c1857a2df3f84739dae80eb332c83afc424dc2139a8e583d9b6365f19ba1926b5553e17ff5db0627725088e9dfee11803fd8b5da6ff04b97eeb23f1543717ced4ae100be3703c72333af54114e739d28d375a7babd0f6b419822a77f1cf03edd2ab3546338010e8f675afcd40f073268959b045ef22a5b9d004b2bb978bc5c9d6d416909696140feb5f9efacb20775c1fecf4811bfdf813cbf82283ef7145aa09b219b1b4b8302e377f2b8f5a802dbc797790f8d669d70833e6e498a18c6cda93cca77036f14c8c055dbc5698167d8ebc82eb72c96f2ae230565fc254e120a09baa2996c44650727b82bb152aec501913966db79c16d9e7e9d1fbc8b07a4a4349d505eb05c12428c1758e95bb0a8ca6a43a7e8ef667cd6087de20745f5ed30cc6d4a537a269b0f600be9f9ef1761b7d97f686c07f68ec943106368c0695a1433a2f6f424246dd2460e654f8743ae3e61552ed16e0231fcd10d0a5d950289e30cd6fcdd48e6191f90874176aed5ece2946d71b55c1a04f514cc4d623e21eb01aa51b26b42e +Output = c23bab34e1a28657134f13a05176423f + +Len = 109504 +Msg = 16fb3a652164a37f101e21405bd090a3656501065b5fba255f6e7e49e6410ebd5e9cef8215ab6e435696e28bd55531364cc6952667fca037deda7e74e0e17b8bb847c47eab49729c1fc2c4b003fbac786ac58e5879c544508410652c74f8c7fa6c2542c1ace7b770b5ca5115ad6b0b4f068b73065b62ad599a35bad8682bfbf4c15df0b3df2c46a95ed711239d4d56a5673fcc97d37ae33b687406e285241d60001757bd0ec1262d63118b429a489361d60a2273aab5efdc36f3d0b1938b3825727dfd45ff4d5fe60c9f47db6b04cc6b9b14fb02a8bdd8264cdaa0ad5a07512d5cb46cb57b79fabaa0a9cd54d92a08abfe84e2ab9437a600f152fe3ea141725f09e72c734aedfe936959a617ac62500947825cd937ce62516f8373cc32e1a2a3c03cc3e934507358add5598aac53ab6dbd38f3f15a2813030c9486bfd38eeae1c8dbbb7d014a62f1b5456e17a0a621bfa9cc2e5cc3edc1fd11adc07f4df050016aed9c997885d245c9d26d255202bae7536695823bc67427c6f8a87468b0dfecee9aeca463a6cb3e30a4df1b88107fcd032fb1cb895b3569729ac607eb769c889c093506885855c334e24c630b787759014e09a077530bab5ebea29ea0e991bebb63fe26af4179bd1bb43a64a3e1aa7494ec2667cb56ffd5d38ac5a34db2c57795cfd06ea2093e122e43338617f3210406318e8a4e0e18cf1726b67cbb794099707632452859adabb5b7be313157e3f29d44cb6fc8205e8172bbfd93b2e50b0d9580ac1308d9cc70f83864cdb7b5f827a24e65800137d9d42e71234efa9e2dbc4c14c6410b30a5493eecabc272b4698a5c76e223c0f992ae926faf175a4dae8ddd5a0935f906401fd1fe1e792afd3d0215e5ccc2cf0e90f9e5de29559b9a97678f7bfc589a05a3d8f7944258a7387c7913c2aac4f41fdb9b70e5196f852cef34ab9f2812b5d3d85ef9d7a1c8b00c2fd6a0360591f8d47c7e7bad08cfe0acbedb79ed13cc1418e7971feec2320f215d0102696491a2d47a884d5e7edc74c10c44418e47ec7d7dd66db0012dfc8a200ee181824f2cbcc8dda3301f01fe0914e2574baa4cdcb9a9afc7f63a6b90eab14a6067aa4eca0c57aeb66a181b9d664c47fcde68a80290467a8c37bf0354f67b1a65fa08ead35c2af4a8447253215412441b44f0e5c8c9f93da6bcb87db2782785d984c5aaaf72e8b763065531f39b0ee09cc36b8a952e6c02fccd4e6211365c94a24b0817c6163affcef8e83e7903e72367a40120d08547d076b1a838d8fac34ea998fab78012c8d5d16254011c544615642fd92ee39731b0fcb2f08a718a04bbd6b2c215462d3940548bc0034455d2bf7cab1c3c352cd3a876164bdd43aec6e312e38ab67e2e36493fbc55ca5acf34289562f1d32e0cd5c3cc26e3bbb630b1cf4371772492de66f77a3d3be0c48a1358989a817a36fede06e72ae0ab32d76e8652a5b3e6e8057252ee5699cdec4e18586e9cf3b9b5cb967bad6a6a361f6aa51028c76684ea6b0162814f971738e3eb2ffdb07018133ba729072da7e2e5b2fd76ab1fb786fed7bc301c6f5f48121033e52f1d2020b816b618ddbdc23aec771fbfc5f4cf758e124ac3a8ff16e7e19e9883eb2d2a580d246e511860e1c39d80b3f35d90d6d901e555230b47e77d0d56c4101826b748782d74db9e5f2d075e97601b5b39f338bf1582592f8ff891fefd5c94a051ee7962f873be5902cd8d9882ce3da6384e1c306d7b6cfa1f71ab1b5e0b186af6f872344e11033090e9ddb40aa66428d5100cbcb4e864563e7b54ce4077a25e5dfcbb54f7f6b10a53ab8018f79095c8576191cbb1704a2a363e127f6a483d64cd23dd2cbbcbd0d19139fd2e1133da6e086832c52dbc255e4de17094a527ee6490955f226238696c93bbdc5d20383a022e4e7712f074fdd9cc8cf376b9bcbf46ec79c9a0b3e482c3a15aa60ceb46be6d123ae81ac23fda85fb69258d6eaeb7f22af7a40d777826be023de2a53b066c95fc550e456bc5c549219d8d418ca5de51913977d1769b5a45008e188fd8204e6333c770fcb2afc50d8753b3fbda4b3d496b64ca5478f62840e172d0328a3b6cbf01b796a561a5e3b976b120212145dbc3fea326fd45319797ee1393f619ffcc92ac4d09aa3e4e263634df5b1d293ec1a8941c1136a4f3af326f99e8434c1678c27db350711253966a0906ec55badcf5de73f715675fe479f9ac2c5881ec257839bc0ef364a45b3b3e3f4e5c339cc7814fe35dbaf63cadfcd5ecf26a18c1d7d2ddb1897be9be0f1e9a1dde321d96a86ce12e76874c04f641ac7916a67093d19098a4496f6a26174667eadff67d7227bf7e9b6904d17e664e6899be94f12abeba51dc79574ea51abb8bef7831baf6eb810d715fb9ed74a62def9513bd044e4456f0a23fbcfd03c186f074d26a3ceb9dba76f97f2f09ac5ee62bb53ca80fc60b6e5c3ec324df08b3ae7cc014296b18e473a17bf2ed8bf0357f024061dd7c5bbc097ff82e1a5c7c983b191d67f6af4769b3763edf7bdd06d3025e80ace5b1d5ff304017a823dc261a36aed1f35a703ed482dd8c6f6265b6e17626bb434718fc7bea87e558c9c7cfdfa62325dfdc16c6cce8beabc9298dca07e4423a4e8b1797d93f3ca86793853f8f936061540509a7f9ee01e41758bc08ec539945f63a1870c03748a9fd097e3ed3054ccd795bb1a9049b8e7f7e78593a39cb152362db824dd9db913040b41a945305d1b17768779495f84dc42810ce2695559d1ebcf6bdf7cc3200855b1bc208b69ad65475b4c12f530b26fb3da88295a9f71a7c2913313640447def74c7dc64a4cd44ff9cc5f843e7de026be4c8dd4e1dbb7286d3bb46d1de1af1b7b43ed26ec7a501fa14258598f879c75d46f9471b98a98e84e27564924dbb4226420a0aefc42af68d045ccef62fe25f198bc228c2c2c856be7ecaf33f352f5a8247b2eeae46640b0094f03d253423b0e7daace80c4420b27bcd415ba1407f1f13eabfe475f35c299aee6b39ecae44a40f5b3eefc1c6b98b05fa62048014b27b2354b8560a731936a437552915464b22d83800a6a9ef9cc7a22bb556a459d055f8ac25ab366fa31b669a347766a342118c967a738b68d0509b89c3bad4b8e294db1b8f4bc18f03c1283d928aa86e305b71a035bf31d85d0c383b1396dad8ef2214c97d9e737a400f3248f6caa24e1ee7cf7bb8f361e84ce5c0692d537c63ffe6ebdd770c14d962eccbe4e99f1eec139df0528b75e440a4c27d3d9a5a83fe1bc8a87f05fd6b5372423d39f271e2ef17651b4b37af82876d8ab5dde112b65349b092d9b0d9419176f8ce6e99a8b8003227978e43070266af27b1718ae2df0a9386f210ff085e3a79f6c7ab66ac66c76dcbad4437e72e847380b9221e34c4cb0132104f7bf28af78024701ae2e6b4ebcf39a5959cb6cc8ac07d1417246f2f3d9a9d34bcaaff8d70956a10e094bc6c15615ac7a8f8dca51f9f060c7a24fae60866ada67f16982e4cbfb0f028049754ec2a145aa6d6c181ec1703e770a63fb1d56d4badc14723363407de5918bbe036193250a8b6bbcd2898305cee2333a55a4cb86093aac40a6ecf73dc91d840fdd84381f7f701316861ccf2fa69bb5294a7144ed29e6115b39bc60e92e0911b58021320ef90afbffaf53066c3a05f8c7462d6378b170fc28888c0dde8906bd5577e301622bbe7eeebad6b93a0da3868ae51397c7146db53effc66eac7e88df56413446b76c0d144a34f268279616e6ea83de6246e72ee5152be603c152f2003e688f427d5e6964b8aa30839377b2826cbed843769e46f44189755dbbcae4b8845a6ea5326765e8b0873bac2c0718e197f2bbcbe49e587b2a94fedd0a2ad370be835cef751b8508b8685e325fe8bcace2dbd36bff8bb5e256daed122b1730b1439fd47193df495d36aa22c68d81001cd3b6c99455dae1b24cc7ca9d9cf4af02b9fc5fec3d47254eb1e923d95354a5e9f13008d556008e7382e801cfee6780ed982579bfcfd79b65c081dbdb3ff7f06cb1b41bcf9e90fe9e7fb83d397dd468ca54a79c5cda053e3ac920b55cb1df824d9bdf7cb38e00d4abc9b4d76af9cfc931860f4243ca64602662323ace477fdde5260e9651b2d48313c76a6ac4b0be24ab82a8f6154f59b3c0f222e6b06f5d55cbd6be030a8b909c7f1f4561d751240da101114241a769ab831f9f539397fcac7a248a4d4e96a9733627e247234995d6aa57e491498118a9f530f3dbf86fd2247895efdfae6293c9e177ad9539188822301d7f8dad5afb518feccd1a4f4572603fb15b34aa6df3e3099523d6792c7f72dab85e71ed936614cb99878918c751e247fd58d6b3172e6106f6c1857423e04af2bf1df87ad90d7620cdbf92e553f52d19e0654068fcc7c67213232caa6d6f1d10a82a7bd58a35f837ffd1d22579e0933df10d0c2c9d3485c380a5369c87505bdcf9f0969e25940d79b66ac169a788d72ca5cc948e57191183b5e42dcaf04899802b2cb335498c485e77f6eb127b724b5e750073fee8da1c3b295c8ca636cc58d2b22b6c2b54a31b6ecae2a9c05411724bf555150e90ebe842517addced9301c1d35792bf0d56d091305caa7e3c00aee9d9d47123e0de31831d4cb9b95463855f81b927d164a4e93f3df2b400d5da3029bd332d5fdae442e9229cb309a0c3988dbeb03ca1c31cc4e79bd611cad7b9e70ff4dc4eace00838deba6f6576d99a847311a49bd631a6a8b2d07289834a8419c005359cb4f9325d896f2d95a608d28f3b02fd0a19b72adfc8662de3d336230f6778a8de1c2d4af713c83e0c413552020a192352125c90af50e56ee964a47d112ad69bde8f84384fa34d0a92f06602250bdf7e3b6828c06172d39f61db9b7c6631a67862b307e4ad6287faef5ba5ca3f63db768cc423a23c58ba2714e3240758a570a63330bd375878fd74ea29f9929a3d96740fcd561f8a27216eca2246062daebd8d19afaf179a0c37e14c026b427cbf96de8a2cc81d910a91dc4a4009622e731395dbd8e36db946beaadd9001c22e11651ec68881859b2791d95ee67501a31dfd2643526322fe4f19356578c5faf85c8b9a8b8a8a40eea6a9cdccbc93ccd4d300a817c6371cb14fd0ecac65bfd321c88ebca0daea35d2b061205d696aab08bea68320db65451a6d6c3679fdf633f37cf8ebcf1fa94b916d423ad99602878906761f263af78481d2747a96e87204b4a1508ede01d06c7204d38308ea64469dd2f8e5f18af4c02da67022c9cf3b2cad5e1f0f962a667fbc9d9c64b20e97d28d4ab53b487465e36710e995db5a5a9526dcecd5bf3f736bb86226439ea9a311a198348af4a051d47738663b9430d62566423f4821eb001aae79f889956491ed20e1fd3bbeb5c07ba5476f7cbbfab7c6b7b9a0d083d41373e50a9b9f5fe7684d545099b46b5cbbc039658cc01a5f055f5f6998d5afa2b75ea73e95ebc4d93018830a8f5fc63c488b7ab9466f7708c9d7a779aebf6bfef1c33a3c70d78ce2f238f63a67a396fe72c4b16c24f19b9c0b18d7126bf68090cb8ae72db3ca7eabb594f506aae7a2493e5326a5afae4ec4d109375b56e2b6ff4c9cf639e72c63dc8114c796df95b3c6b620218d6d0f572825920f7df7ecd4f37cdfaf879364031d5ea0b6138e14911ce114ea4ce87a806f0e9ba69fd67aa416643c5a403fdc2614552008a540cc04f4c715c809a8588f42950c45ea7cf6ec0d0b9b3e8b74fb946c6d7c06737b25d4f6710c05ed33124d48c0cd348670c675837ae5a491b82914cbaf9cf8a6ca87c8c9e6e2e71f130e822a99c7bb9a3a54071eb700d47a96ce70da21692665b25aaa162e7db7c7d0b6f68f28e0224e63066a86ccd6166d93526e40cdc9d7d9bd06408452c7bc0ff07170207401b0cb72466564c04eb292391ed7a5bba5552a72f353bc59a7401dfda6ba858513ae39ef7bc1609c4fef120f9872b3f2e6e67f5989aa654b0489197fbf9a6563fc64c0620c462167c317159d2909107a72d300fb310f2831c8e02cfc23d96817a61a865463bc50299170c26c3962645b3364d7df5148ad12da8d7efe3a3f37a8f718b64de7eb94eba14342033147589d10e0298e531e9bf622d8360c6c937a1ed9a576d3009b96b4dbd7bdea777e9349f091218e9d599be588097caf219fd881330bee701693fe8c27765aaa75cfbe67bdbde46999c154e8f4677a6dc129fadaec9048ab919c737b6d6641ca920481fd5ead9da6ad1d6f064e3b55d1b4fa8830ee7da90cda7e9d8a95f09bd235e38315bba972ce433793487ecd386062da298c201a3b1c570125c0875c904bc8366db6bcf88b68c2d569b46c6549a4349085f56aae266271ecb3262bf247bcb2c3e6e949e411fc92c09855014bb02490e64573b48392679009eec269fae9ad5b5397b54ab32c131bc0c93023c69668dfa2110ee6dfa6b11d1e7f9e2abb9da62bad2822a7ae0334c49da44fbb2023f98a8d90cfe90b8aca7ef40dc2547e8c308a9b4038481dbfe7f71ed0b9b29f7e5ef76f6bbda34f673a1d534134d18bddd2e0e38700154887b41c0cf676ee8cd01f90104ae1fdf265876103c3fe872ab915954ea781f7768424992fbd8f592f40c5bc37d341df3eab3bb1cb3a2860a3488011a445c3d4f1debed74fce0bdacff7d7e2aeb1e7327962dd77744fb8433db19bbcad0ccf96ffbc0a3e34d0f258b51cdd6c3b8adbdcecb1f61ac7a9b817411deeff30a1ac23e9469137a56c4cbd2ad85fc1a70723c7dfc10d0289f12fc6f7b30240f7af6265f7a6da286c4a22f07453e649b9cfc9d999b9aa9785ce2637a79c5ee8c8dcfa4270016e7a4f117bd9dbb4f96c3b8bd5fc64c2564082e9a45299ff8a606cd07ba49e82d396176a6060a9242192f3e24d178604976847e9b1ff15050f0fab34ed72c74e93e28cfcd86d24cae523ab7d3b1248a6f8749d77552662d6745c4cb05994349036c87570ebe896cfcd872903a6d5f2d1fecd4c3b99afc99941b119ebc6f12d6e42af9b6da1b9455a6126361d9747ccac33db1cdc84829277ff75d88e3c73f91041ffc79c03c87a942a69997315521e601e06d5031f880597350f5240c301e29fba1fbfa418fd7ca4afb61cac28dd2f1447b73e5771a769226be94faa64832e4336794b2fe94195b378768570d8d148f13754208182c8083f296a977426e226233c7435e27c7a0be90e129d692e14b11f754743285ad42817f8faf1451204126854784467db92276df8f02c3d318fb2c589f66ff502b112d15f0126c52ed23a3906ed3f660e6f3168be7afa94ea2a930bfccb6c8f81490e96e7e7ff9d8434e5bfdb3cef861bfb7101e917ce175fce9b1a552c01a0df82638e161541751c135d225acb1c700c1c2e61002e716d9a61131a1c83f8cd24465be077f1b7f4fc55e8890c038dcce9bcb2af8b29ac3fa3cc4333da3717c0597c3cb58fe428c32ee4cf1c774c0c41b8c24314136f453580f8738b15b02721860c4f34e8575b8abaa65a05250f5f7783162ab81f6804f63bcceb4d5856ef97b1dddc8609b019f0a685d0699eb24f1751a0afc2377cb32bdc2ff29f289139cbe4d92bd27a592a9dfc687b73689fa4c92b48195be313187b690bd2a90fc9cb6526e78341c4b8563ac436a1480d3c263418f6b2aaac95fd8fec47d19494666e0c80ef2efb6e37656f04d98b1315f39d012092c0d8196a280e6ccb388840d0ea68f8da7227003c1ee3c63881fa062bd0d74b048c0cb3fa61a1f27f4fac996f0722998e98ed02314a3f113bca256a4b885fa2345e6f00ae72f0854b5d2929ac8de268f4e776fd7db12aeecab0bdc8bd8d412c0a7e298aec22a22d17ac2778ed434f6ff4a9ea79881b4d63cd79eaa9e8a724f16f3361d91d3860f2cb82cd0c9bf212b5772471fcba504f7b2c6ed394349eb0fa49c63f73aa7dd1dd4f28436f1f62d34263a231107b17da3bcfd7a11109398e4e827fece2f9b99ef58be6b229df5b391fa269553c333a93ad9ffc7ba8cf4166f500a690ae74b36e43670342c045a5ec531ac103094a7f24d882248ae2ee7fdff8ad83525d8235eacdccc91abeb80795e6b5f463fd28af35c46199f646ceb8a25e6f5e5b798a05ba9da07e63ab9f4bdce159499fa235926d7a25a1e65dd8b7572f307ed38af6ec85bbcd6b440d6437684bf007dc80daef7501b48582ad7243a574d72ce1162db2f32d39d8e66e6e94e22c6177451d7d8ff461f88df4c0052334344cb0ada7971fadfdce0c70552529f18c94e1ff03883b93a3d800611efa20ad77775260c49cfb5b3372510b4bf1c03e74718d35ba61b9face3b28f44db702b845405a22f6a40da5d50feddfd73a1f70ebe0c20dc872d1d0ea0b4bd2d7a691fca78f0f1ac3171e31ed8c291381680f30fac9c9afb7214dbe002fb226442e9422a44cba71b65df6aa82d14dd0d1e35826a814ea440fd8f46b168fa5161ab6d5d1455fa34e54de5db69dc6a13d5014c2f9fda96df456fe8d8037136bcae3a81ab291b012da27031bfd45536d838561155201709ae616fae1a468a34e6b266b2c6d90274f3db632f7288260f8c9f83318d8bd52b943d636b880b32794216c67d3a94aada19e89d4bbdf5cd58b3832f39434383511321f19d9bb1f8786133c04d60ec828522529522dc9dc9a6ef8ba07520d7a03ebdc780b0efeb4ab6c6a1eaaff451182a8fc1d12168f0997e93018d9170c8ca28f6969741df17b7b8e4d9ac114f62da1ec48ed7e3dd9ecb54408d5cfaed975fc45007abdcf3b7be033e539b1dec9256f653422fd6c4e8bdac6a97853de1b3df755c9344cec85bdc0a55a82e2256400d25de543f66996f0efb83b89cc6e7aed7d06ed1e8a3c7647052ad3febdb172c6b41a86d8d3fd5a23dd62e591a227a08c75a294c1df86b723950b7833a849997ffce53d69fbf0422a8a0cd0173cd13222c66fe5a3b494ef595a9072ab0cb781349206327fd60af50fe0fe24a30434dbb85ab6094e6f2cc7ef3a00e9ee52c1d3ed5ec58fa1cc131cdac67f08bd6117415418be284a7a17e7ef1fa50482e03037b0476a795845d25e9123d9a4eebb430c01e8d1681d3b1df660f0c5ecf120cb5487383c1a2ba910643ee15221bd7b81e5c4b235f4511c059d4b95a9c9c3785cd37916849aa26095d5e8e733a7b3079774a75e33f26e839983b7f599c27e52a95b8eca8b2145d2295a981dc45d56c84d60b1d5138bfada9f51acfadcffac157c95cf3c96d69d68949b556b4c6c31266d51eafd1de67f88e0ae338bbca9d4299b294354f0e131889d3f27b915fcc98abdf15bbf992c84f5244352907fe87ff6cebef3fbe06b899b0eef16ef6534a85a07e50b04ce84928933b713f26ee334e4dffce517ad9c2e0aad522bf5853c550011d802b2051730acd4b37e97d1c37b5b948d2391a09ba73c43116db3bd3d58e2a47049b2860ce6c6d1df9a68f0afdcc3b716b55201917c9897d3e512545f3a6a8755e7ed998c3c3ff0e26f4d12d0e0840e42a14118a53688734199f894c982fe8430e44a86bfbb7ffa65052f814e0e0662b6f1452c005c729d02934ec3a4b80861a949b094cceaeeb60f65f48350efb17a1dad4886c976c0debfdbfd2a1764efe7671d090cdc51f5ee89968661fe09ee201ddb316f290dd9fe2077ec114b0f1bde13683c361679fa687aa0cb6381e7231a5e85e82d48a825c5cc7102bf6740f40e5433315aa3e967ed8b8cadd0010eba3189b254084dcf0cfb6cd1297e9480e23ed385d0c0aa29a245646113f2a508192d466b5f4a600af667a79d4894fa564d38386601b054c21538ac27e40f965baad63cb7f039abe24bd226df464ac04a9dc22adeac71c93b268e0be60a70fc92d3f4149ef01f53de7304919e0de80fe43aa551f6b94c301c3f0e2ba76c5dfe32fe4e762845428387d7c58fe384b60ead8ca956b51089b1eec782b171f21dc4c592ad085ed8eb6163ddddc8b593fce62cfc95e1249970763826b0484d84fa77d3f7d97547916115fcee13e51c2201bee9f03399493d48a482c36096420a3a3fe2949a63eb58eec8da73308e20190ebf6dd149272ee25b6655085c43586c26437cd3b87b5316d8a283d2fd6aca606b103f08a032db71efe2375c6bf8979206ac281bfa6486b168ca81753f2221e060dbe8fb006356d34d40b327545d086522a16fd529c68c13e6695cc2c15d2d7f3545ee143062a9eebda94ed2e019b2cbc14bd7670d4b6e229aa69a234ac4f7263178dbbafad6dcac864592c3d7d59ead2dd2ea3a6e9933c8cbaac5ffa1ff86be9d9c36542468f5f4f23b06630138d2f4ac5d30b61458e3ecc39c64bd8fb5e32dc1d8884c77bffead47b4321a25eb588687143043c7318776c8a500c7dc8e145de5555809bb84fec1ced79f510d95384d0620724a4ecb264d23ed208450342334513b2ef3b85efe17cfcdd46e7fdf783070a97e3172d0c85b1c9b4c5cb24c179c4cb1927235f6059792bd59db447022160fd6dd62fbe57587fad80db7cc81f97c20df0deefcf31b295ed0b7fe24f23de929d01643b1b436b907cbe9fd6478d0bb13ee26cfd3fe48b57d2d7541e60ad29007bfb13e5be512d9899d6a9643dca4436e06667d83bf952335fe1b0b5462e8f3f1ca36bac32012d0c97518eb31537efb794e5461d4dd095bcf6832c334a287fa2e192e1faf0c3d840f7c7a62f68565cb7bef78e18d01ad46929541d34f72b78d08d521d4e8519bdea3d91864591c619bbe115a6678d287cac8add0a26d788194c5269543369834c6ccb57a5a23bd7a5388da83595bf9a2d0b7d76798565fecf7ae3314d360891125d33829aa1c12b9dc22757a20ff1d0341a93c8f1dd1cd019e0b2525ec30cb39e10089acbe0cc3251cd408c7252ce7b403e404cf99a76bc771242351f66c07b4e49bd18bfcbb78c6fce5bcf3cea9febc00b156b074a0e0465940561e59dde48b14ec374fcef1d8a5649fb88585400c231e575ab91684d4863ca9e6167e4b0bc55b3be47f9b758bc93d482505b1b7b6f147203a72e81bf19004a5fac1cb7e236aa0cf00a3ca103a3b6d292afbb9d7a62f62521b63502ddc6b977dbaa6a93dd583cbf1b243c58a8d01de8af0f0076884e557362815b781401fdf794f4d8151c916c3e922e8f3ab2b2576b39e6c0232f7190e14860f86e0c3b5c2e0e13eb983a62e72ff7919bc3abdae1feb5df512fca8d56e3460d923120d342afc9702bb9914d0bf7bdf5f8801eaa5c07b55159f903f2061dddcfcf8dfc7a4fe139a20ed5bbd0692a47b41bfc65b1141abad5311b46303cf5822ff6b0f990d266e1220b99346d7d3c37647c952b7fa89c38e37d131bc849eee5b6ae6692a788955268b86075a4c6a20f7f90f6da769820b1f4a45cff3aeb7e4afc6d0b623ec110ffee7bb809f6b400327e0f7ded36413cb8913d655b0860285459991be2b72a5e6c3bfc2c6bd3e3bb42e83ea6fe2f6244af31bec8d9a166718466e9149eb112d209d9802a15dcd447a336a51e67d249ed186e8f03d5a65cfe4d9ca371f0bd19206b3fce3d9271e449f5e1e920c4bf867a86904482e987b20322737ed0732babae02e72cd35c23c2169d82617a9f5796817c5f75e28fb61444a583c1bcb08d58ef63583287fd72cc521c90a468522af8966c24799f32b1e2174936227313729f68ff1b55c7d0df7160e595389677ba3b3dc877e6056d1baa1f8002f7a0264bedbf58a93d1f80da6fe7aae884719a75cccc23d231d1a953eab1dc82d7c05399d236e27a2f0b77e4164abf331e7614fe2bd600bbf37071eb1262d13e495045ecdb843f06c1f8409ce2fea4ed7d3081b3e6ffe1ad916e5151bfc6e08db2ec57b5680bc0e78c7255657497fe70172d6b277c9e492f9227c21841429d09aad1237416520a94e51630ce399b2e7372c92bd95b25a9aa8c394ebf556a592a97cb13a954eb9e8772306d37b07cb76016906e3a114a75a6c61f41a75aa2c7791016a2d5a22cdf47aa7d655267b11bbe891f8cda2d614fbd06465570df804a7d9a607b899cba5f5df449b37ecddcddf730c3123a0e0e9a55934af4ac428764909d24e82593089122f611c24d51548092b43798ca41a6e7f91399a9aa222ca86a9ec0934a239c073f16822c2ea0cc762969c97b0b46ceab2ffdbeef0afce4885425efe757cce9441adc075b932a895123e805538dbbea7652b8372f3f415386f5b8ff6eef0d74ba4ebd1ddb2b5d2f940ab5879cc1ef8ebc19e97ef4c78dde16b7de7b847053c2ec3340322557c733a15638acc138702ffeedf812da243108ca22fce0e27c4e585c70fbe0b498e71a1b8f08016b61dc42b1376a7f49e5e94813bf9acbe3633bb98d7056a6137f4b67651daa01f5ce826b659ec730ce8d053085f63e9911d5da4ae1c9d6fecc6b428010aa754aeaef111eae7c84b3c27a1336936f6ed4f84478911be5f35749fd8b18909e1038d543f6b0de692994d03da1eebe73921c012fb5307e4d325c169673858760f1482f5da1e687dd3c4082682fbd79bb5ebab7080e8d9b682a59acd6aa4b47abaf15639cb1043d511343235a1b27579f0b4da46de32cf5df31ec973e8dfe63d6901d1ca192be615d75196db402a0daa74e5133b1d183001aef91402e9d035e6a4acba4dcc559866aa83fbbe654de755c9e41ff7468146c93c9c4423765feb9df45adb6ded78a2f0143228861b024ba3751bc623615757de2471217d95744f8cdf73fad0837b4cda9cc6e6dc673180bc02f0cf677481ac68eede72b951f7a8d8ef5fe01e9646de4dcba7fd6853c2cfc7f8cd046a89e78d8e234d017eafd03facac8755002fc1a070273d35d1e69e80ecdd192bd5a77141784a259475b9e85c2e9d51201d54d4da6c3af156bf28abdb553b3c0d4fd707124febcef445762546864a260b1f1067d3688c2927dc22d22727999e72812091463b8eb0e997ee7047dd3b6fdcab6862d48da34e71cddbfcae8d80a722128af72663bc333a132ab2a55bf9925c6c66ad250209c9fc3d5b0fb6ad77bfe4ab1d21faf0fcbfb16031d1a9270bf9530711300ef0460090d2abf588af064e81f4e2f70a09d7bc14270bb79b6af90a892771d4d77fe05df534d2946cbcb5bcc294e0629dd7d4922c0fc14ac34b4c2fc5728f7fc7d66147f20cd8d6a9fc0d716c341f48fd827ba9c1c15a7468f38bcfd190721a271e51265102c6a1899695d54a7ba893703154699be4de1bd4893e51732a228e3f7e3661d8bda3df52b2d550231282293f0ce83b812156294d36ed1f74e8a8c1571f9a6250e677774d7a564bbea0b5f4b23cbe853c20c9851c2221a09b710b9db729049080244b51c2149f2ce4ce4ada10e95eb095883f178974613cb26e5309a7c3fd5332202655f9a8395d5d4448c5a33a51255102c0c7db55365b7f8689ec6e150c132c82106b395faa44f1a9b79cb1581e4b3b35557d5cec2765cc62b4305548b93837f1117bcc607c4b68a6a047836b4d891aca05215262bcc25fa9dcbca4848c2a1b15326df8d436d989e20aad619a6749b568d99b06de7ddb00040978a3f00e52a0977a2906e361551d06fdb8920df3f2d5b8d7d3c089f316791b444c99b5c6168e1ff2973eb48429ecb9814f60ed79ec426109b2c88aa5dc91959420d0fa3cdfac54a0a0e77027bcbea49f5a1162819ec40c771e650a1b960f1b02dc8ee8f916c3df8e2a4a3ed3765b6e5ec2ee93947223612800e031deaabc5495681ca784219b67c41eb0470ebf8bc0c76d3fa939cf260724418126758260e955acc25e656afc9548655fb363ff1542e0444ccbf91d97a773c790126884c3814a91c7362557ae1124e5a0a9579ec29bb32f5c225bc53ce81e7c551c401aacc57dfd75564b5278826088ba5174045a744817b9d6e72ddd732b47186d84abe45cf5d912e65fc224910235f7d4419aa574a5e2a90e25be44efa50f202cbc9e34f0ba0ee710ea0f78e514d49d5a46c66a44d47a75f29ee0380591beb682715d6226d5833cfa73a03d279d4cf50a0cf1738bddc565abd9fc805df93b2297294f36a84d1f59cc82df3afea687470d1a8486f2c6adc0615e78e59ee46eac926fdc7a1e2acc85af9f333913366cdb8bf8e56c219919d03bb6be2f715b3f9c9cc86cf42f757109cb5304000d55e3f8ab2f7eedbf5ef0db626834267d659639dcbe676d8435f52d4725bb59950bd4e79546b6d0741b1c2afefc44916b0a5bcc7bd836aec57242394b9ebe0a536127f172c5f4dfeada840536fb553ae252769da09f3f7c99343f75014476dbee5ec45c6a35a2e0c6a210b332eccee78b46cff47499eba2a884d4298fa24b960f0b9470a41d279cb37ca87e1b5719610eed4f191f50a2e69b69e99c1d3da6015d6e7d774905ebdb576e34ac19c49d701250dc53c84ccd121aec6617d49fede6819268b7807556645a839c8653bcc2db3f755fec9713d2eccc1433e2db4f8a0b227c3e7972f6d00165c0c854f2c6f06c3e66c12ab52f1b3d5ae939455bd5e338e936e505460fc178202fa15e1d6b8fe9b72be8564a280ecc6b735e887cba62377dc747a32549919232d70debfd32071b51cabeb77d841563a8bb8bf265856dcf88374b9b372ba81744c0f545baa3c1cab54d2a9777cd97c8b9c8a9cc3fbe6ec7af8ed834a33d6ecffdf342b27b4623be8bbb133c608afcc445a29e5e31edcce89cd5d8b892074c820677da7b68a496be7a1d63ef5f44ab1ff45254f0649beffaf714326d2b12a8f70654a7e8aa4483942a7a01f89c820ea170dfb1ca004f3fc56751ce9c97e5ebf7a693904069ae500644dad59f40cc8c125e519f342c9224109596948cfd087e4a8e3b7ccdcc6b67dd7046c72c73aa8d3969b1057510eb06a529ea6c878604c7b8655455d5fc022ee055c4bfe65ca579df3706cad6d5e24d4aca563ed35a603009d3e702a121fb0fd99c5fa5172444b9cc7058d89fa3ff61c820e0f2b9a0a4200482fa6b7962df708eec1c6105f210b3c8bdaf1618a1cbaae6d49370818159ff72179878a4e735bbc9ee05dbf8ef90d09bc6146c88f8cd916e8e74a0732406341b3dc6116cd98557504a21fc3a434c780c328ec239cf8d7c26f58d6ad7b23329c79a8e1e176058aceba778aa1215cc14e5a92600714f94d4d8b2e5b7f45268453ed6f787eea3342264ad13cec78d990aecd5e30f79a069024a6d846d132d2ef0479a093439cba4218205f951a2d53ac4ea5bcdd599e9956c45cd73767c6a0c92ac8ecd0d40ff2d110c573219eb1237a8a6e6ec3b18539e7c907ab9b877328b9333594afb4a68595acb4ac710ea6f1920ea1c492940050e99f51d5e1d4cad315ca5a389e4a12daf648787bf1de61266937ca5eb8857276c2a3a5e6b8c42028953c91690b28b78b79807b622272923a969252ada3ea6e3419928e4e7eca25a18e16958694b516efa5c157ef918f9cb6709ad531f35755f144d8758da27b4dc686e4b111c993b39ff1977874bd79f312adddcc7c1530cc36dae1f614c24c0b1006338eaaf8290014e38f67a204c637f794c7a2fc882b238d424b7a846cb0e006826f88a2cf09aed701f5aff805f8cdaddbe4e323da9b0e6d21719d4cf04e6f22921539b9aca9f26ec386bbd74f8646cdd9b217927b04ef4eeef0b8ef0b78fafcabb11c202f8e8d44aeaf15d03ff315d014cbbab8e7ed48ab114567eb0cc525ed35bf9a96b61bd1d139cb386365c3cd5d137e4717afd8ad2a2efc24b172b7727cc6bd5f8ddef652cceb87ae114f7cdfbd6c56473f414b8f149e6169e2dbd46333e526b5761892a2703a50e16a5b82bf7975e025803aba5122e621c1efb6806aab178836cfd1752373bcb37ccf188a0f29c6b87c9b0ab9a5bdacc9a74881501b4ab45e7e2bb822683fc92bdab014d72146e52bc6d02fadff4d48a5947dcad7d77b6215e5fa3b0ee34d162675ddcf1ea84947d66ed0181bc06a40621400016c31e5974af8bbc8af2713fa3fe878a5a506b965250f0b52879b9d3a6b907fb3a1bcf1da6a3100ef87963d0bd4bd41472ecf0fd3b411f27d85d34e8d4eb43d5ffccb2881f0293a1e3cd310b1813e9811f053c509f00225e77b1a06bf77d9c974f20f1244794bf7e313404781c2171d94be57617e656a062eebd24e47638bc48115db179872039acccf704a0323c1224ddd2c7db770b413c26c9e9dcbbe448f02dcc1d0d4570ac339a5e580ac02b746bbd155722bce7aef3061d17db2d49eb978ab55a6bea4abe1c85b0293e30b740b6d3f64d771cb28f8f7501d567342e4b4612609318df77176e74379ec5e8a81e0b07bcd15fff338b195dbc4b0a385d1005ac14ee9d8bbf60314e39e02652c6b57441b10d64cd334b98a597a24ba19ce3da401b938355e9416dfdff16e9d4d8aef8691b260def7a771435da02b2d8b46ccfb7bbab52a7bf612b68d16997d8a8b09f674347e2cbd0b695f5cd92c8436d52ebf73d5e90e807697377f601b7c5fc64722371966ccafdb024cdb77b144b8e3d36e9e9d3c77f8a004b12b805d1039d727885ed3b3254c80ec8a5e2e41f58e1d7b97506337ed610cfbd215d9e6efa5381ba76fe5fbdd2fa788a6594f66fd32cc57b84dea53e54617ed08c2ef31512e5393edced2a93aa5b9570f516d98e2238b284fcb7528e6144b48c3b732d4eb31d440ea103c33e46b30e853db0b404afcd44ddc7da62f6658219fa177473a145c14732ab8553460cca8ace25a9af57e1b2238dcb8ffcfec8e356210678ee97309aedb0e4be01316668b255964bf4111fb1f89cf21d482ff32f130af1c9c5b7dc70db9232f5f689bb542e2176dca8b9d3906b1322ce6f104c2ef7bbc1ad2189b10bbce07f7159d57357a53aafa5f6d8641823f945e8992a3ca8ab3e5c6d2a96183236a0b27b539ef639c0a927ee04f53a11c95642b4ed032c64d79bac51076577aff1dcb35b0c6babc22675c8fffa98bd430433017a9425822b22d898a0e17f3748969b6a59abc4fcb97fa6781f014a55767d976a82b618a8c534ff07a4df6ac1c6cde6bfbd593150e87545219741916a71dc8a6513796204fab617e3a32ab07cf03dc49ace3d3b1015ae58aab0e1f864fdc814da76088d0092502913e6e9d8cf908f3de3d58069a209d2eafbaf0904abe2e93eb1f489210254a93c7fb5456b246c6b59821a49446f8c8a00fcdfe33fa7e8e80fd2d325a474096a580f5866f0e24e77215fe5c153df667ea495879430c0d66d90255b03a0bd793a85ab1673ef70fc5e9c627e0f1e5b5e55ddaeee475f5f761fc793d64c9c456cc2cc3b3895f1383ec6d2742c5d2d493db7b42f5d2255ea8ea7be028a272174aaaa34a706f37da1de58cc7b39d00912cb4e2f001c4d99cbe7ac7d5bc0bdb6b2fa99c6d7c8b61b13a2bb9160eb92391fd0bf590973f1b36849d70a87c035e367263789b3c60553f65497290c8bcb45d714b53733aa362c2b7cd06f6dd2b830fbf42d85244809aeb3ba969d6660a2b6a15ed6d36408438b7b473eb4f43e6e26d62d23c21095e9b3b09d5ef455b44012e778ca3485d64158bf73cadf064b7e4c6099c04961f6ceeb56c49736c3cdcde410283a627f5d571c61c81bfa8a43112a02ffad21fdb3e0dc0df9ea6c97f470b18437ce6638e2ae5dc80eda0c676c4e4922289252ce1446103e02fe9db9715103aa6d2d479ab06da65c0dae1e870f5e302add15e5ba60290f4fa87dd1108c9961ec91000d8c0ebd7c858d4037d173686780e4e1e1abe1b05faab30c10868d7054b16deec0f543c669ab55375f2de295778e059c4e88dd048ab5eb556302bbfd6362c7a069bf98aff4362e3c9e83a20de7ba0aef34399d4c18da1800d16d6069166568bd10d155a1a68ee0f7fdbbfcf73f6eb9819ca569b18f8001b563adc2dbf52318eebb13c2c3051b330f83be387b0811dcfb8db6895b790e6f1b20ab297c89049edb746d263e9b46ef2d39729ec3c90b3904105344715dee2ada104fdf745971c42b42c7cb39f075dbf825c076f40ac399452c64e31cc487fa9b3b822beaedd050872e09f7dd8a11c0195190073954a3c365e9d2ae833541a706aa2a5406ce8a0b963e1bf352f3836637c5cb9ab82d12810d4f83edcf3884f8c26430a3f28308bd017ce507bfb33295fb88577799207899e56760e82755b8b678717d60d394b12e6ff0507a4c5085150ca11ee605b23ed4943851e7b41545a9cfdaf8d3d48aec2589a142962354e6ad141b072f246dcafac3ca3f319dff949970a688431aec236cf797a4a16947bc27b8fbf9991dd885d31926100f0b9c0b4e02dd17fad042bdc960da5fe449af6e49a24bde6d197bd7263f53aec92672138f2e888c3e1c1522056c7359a7e91666dc7a139df43fdf29bddc59ffa7150b15269cadce5826ebb9e8c4697c3271030ba7e7591e73b88be15e9941edf001ef77d9f357c790174fec3910c4afcc0affc57492274935ab0769d21e125fee11a4a371db8b5e2d17c622c2f78cd9bedc91fc092384068141dc27e112d43ce76eb4ffb6fe537b794ddac44922cae4510e41182f41793d9ea19185521e906e243fa7f56f01b606bae21238973986b7cac89781ae940cd6d5f5aee9efe94ddcedad03eb668fbde839fef6e774e3c63a74341ca04ec547b96e62bcbd7e1c136e8ae0524b614e6e073ec70f39a7c89455967757dbd77c32ceb1124268c85eea0c42ff1b7c29e6d34c1068e497fa91f7f077bcd09b1060d4fee52dc8529558db9e5e33e7e68600f49ff907fe6733e6f8f360291049c21a352f54dad6e3adb1ed0c26a33df13f44d7e93fcde3121b6e9d4699e69e4bb5525d4a4442f583d712293ee278a5051e5986102be11d017ad2f0d26a1c020bb1af5538fe8dac9add23951ddad9a78ae9e809fe056b349b18baf97d1bf3c5ef7ed924dfcae28490858b3c8f56efcce8699866991595ae47bcccbf30f3926e61e379d229ef6904cd98f3237d9de19b876612a7cba285156f30b34ad43b2285c8aa3768fdb74cb4b9dd0254d0f8d89dd0a8fdd47bf663f07a3a15a24f3cca938c99baed4268b01cbd1e61d66eaffc5829f602f3915758c8d0a39bd08b3bb31f1479ab69e24bbfc53f21b7b1410a7456fb19c90ef40e8c24d932ecdb6e8304b1ca11b1e4c4a8a136a9afaded3050691fafdaf92c8e63268cfcb1b1cbe25be6d1152b7567d0c77ef76190eb9322cb0239abff3a56469d4e88a4e691a8ce0a81085d8d9ef9eeef7d91d18c18ab01c1682e5950369304062ea1369b357b19d9fcdd0b00d5a3066ac68b5f6bdc3bb47bc286209792ebb0e4eb5e1b96444cad1080d9854cc26c007e826d75f4e14d234139c7679af9663380b048bba0672171 +Output = 8d9e1b982326923e265ee9f8dbe0b586 + +Len = 110856 +Msg = 66bd076aee07bbd16bba68bb18b0cc003da40749b1a147229dbaa45082fc49647ea1d590cb8601ba88e082cfbc2a315a98626955fc74b03e3df79a6e2617eba73cd2fcec466860950d0cc6a261e021505c2007eaeb9d57e2896e1f204ee2bd9a29b944256a93218a83a8fedd0fbae60a1348aab1840584340a88fb0e04450666ccbc74e33cf08bc3711bf027cea0c7b144411a51d1927f5c47adf5df4f281032ad4456d0c667e8655fcd6529a77a0b6d78731f73da2d8f83c946d73b3873212755bab0920fe17e9bd526248ba130fb65364681bfa6bffed116b967ccc50e826d4b844bd11f44978b5c8ef7f4c5aadfc2062207dc3d2e126db8706e3700e17b2b170cef36ff7a795d7b6da40c1ad1ffab706f7b73a764148037d1b327f1d5538942b86368b6696c3abb2bf47ca88ba249fd95a32bec474b31194600429fd054b053f271104cfbba4aa330afec77c111c434fc47ad15c101a9e8361b3012bbc4c8d221dfd6ca16a9b4bbe49d03905c95439e0c31a12ab97c0f2b09cd9a527fecf848ac766137a483a18bb0856afa4274eec12e28ad3116068c6b26de28680214693cfdfe5a9b8c8e389cfa31c9bd5df6ee27c8f37c34c2e5482ff716815b2e8443367b3f68feb613a2752b67c7e293656b58445bb43aa4616affe33d4e33ea83adbe8e0134690a59069eacf00c6fce078cdb0828fe4ca4c41b63521a36f81d5acf5d9e0b66e370aa8da0e494416ff5267a377e220171aa5482e4ac76e2b3b152d29a1326a575d04c5e023a1a0ee7f0085df70c1066b19e5bc8095a19f96c8db1defe561a99261288a34c184c1ae1a7f55ca01cbcd414681f145bc2cb242999bf1a10cdafebfe1ea68107e5f00e6402379fbc15ecf4a3f1e98f614d540bf4bdc6af58e1ac4305dcee22ba08cf9179e9154fd25f696e651f0060a3637b55d4e10cc55efadb484435a8aeedebb14c2744d6946b62fbe963dbaeb1a96d09abd2edda82ab8102a3c20f1b4c28f55ee676fbc3950e85690da30e39a7fcd1c7b4f4c97811c6dceafc87549025f48e9d086ef6247b43337d832f9eea6c23f97a19445e2e9837755bf99cea4f61d81e375a181d416d93d1fdf30f750928a64bed81ca92444087b31d4508bba0275d0df5837b59619484c8b2044979de020e31e7958d4e01303dfdf786d3adcb9f09c49d2c9f90cd18a080645fe794b023e1122ffd957baf91e1bdb26506aa17f367a9f7fc8dabce206f61dbacf0adc9b3aa568e60eaff948afb5a1689a899ce48fc25cd9c4c93aad478d4de926dab6fd9ee64cc6695c4f844143ceb9bc16136c952a1e5b3e42ea95d433f37b96578ebbd37a6b1b89db025e6b3cbf9425aec979bf08308ea5e6615e3580baccae0fb85880c8304fe0aad6299616f082779213be95e34fee9c122348d40a1066de71c8462f6638fdfe4a2f685a590dff129e869d9251d8f57154a508482670c4980c332727cae180434762ad1079647496f296893cca583dd63c5aff0a6c78807b6d8d5e126cd6815021346a60fe908d755cc8140db33a122b27d99f83428404e8e43b6d67c2647b95460922b46f1ea42e2bafc08da31b2cf0a5958c4b5f2fec712ec1d7a07227d98344555893316b5331ed9211252067e8b7341337db18c881a49bc51f54e29d15ba9aad9e75fc1305112123787cb1acdfff61d714bae60a6ee3b999c6ed9a40caabb77646e50582445c54e888ecbd567d29ad55b5536d522ebf16c440d31f9f62c73943f45904559b63f735a50dc9f14ad685239c4d053c3ba721e92fcdd92578ad8eab296a7ee974d896af6f585e09b38667a53bf05425003c695ce6065d5f76cf35f04861bbda6b2aa1ca4a44f00c51a9e36f06f5b0b926df6bb4064522c9e78cadc7f3f76184d8caa70ac85c0675afc186f59fc5c1451a10977302d2bfe1359684a69e93f695583924d55c1627d2285db0bd78d90c6544707b0e5e678b31fb5d28f0babff178740699de880bdabe45eeff4b04a7e896506f950a8b5c2b38a351295adae3d8aa96b3747ade957576a2e5c102c5caec64a86e63ec1c28f651c802e42971a812a83ac0533ec25baeb7a9e2a4995eba8e3cc70d66278366a339c3f31801016545fdfa9da49ed5b6ecddd566285311ef54ab36cd1a41439d884d419203661ca3c91830dbe71f7b4f9675bfd0cae4a1e1c61c721e0ecdff263c18ab7054cd35fc328387eb9935458e51fbb3b2eab2613a592d0380a221f8a925087c0e7a9acfd718cc6a4d4974a6eba5fc7bad2640d2419449558582e1d29ed9a93ddcf3734cbcd25f5291665221ffe8e451fffc14979fededf2ad0f821f5fd0775b6c4ddb5f25f5c8db288e524923b13fe15beaa213bdfca76567d6973194900f7f2ce83759aaf9755ea300097f0f858ba421607dc92416f228364675abb5aebdf39f511bde9463f1676189cc560bec4404e0fc0c3a5ae35ab598fdb2004b631f6354270d50aabbd980148a2f40b14bf5ae2b1bd1e9dad84d88205ae0b1be73b048cbc8605236677a331c6fb6d1882b1cea605e735a1c7c472a3cec664287570d1e66c3c955d00d7ffae9c8d78b09002654112244fda825d4167f30d7255e63724ec587bccdf00447321d2425cfbc71be75ce05db57069b80d737b6a7fc8c4fac7458a29f4d2ee26c9326e016320ae621c9e787bb08a013b9e726ec4d1a99620809a0a2f535d53e4c7887ab1d348ce40ccb0e1648650d44fbc0ad405b121e5111893de7631a9b5e836ccfd3cf59aad1ebe3923027feb695d2ee3b6146758383457d710e5d8dd9f99dda50089113fd562bbe2473be58348cbbda61bd93b7517f3040fa8638f22965f86bc8a806f5ece768b5354f9fe3ffa0231fb0c3c75a00ab5e9e2acda9da024a2f7b8a30956201ec0f63352231448066b528990255c039ae3ccf926314b7ed0caf943530c10ad4faac42a4aa16dc6f46de7f9af7c39c34ee376fb1d50e1e5223f5402a371e32ce99abce2435b51e04d6fbaf27129540baf1eaf919a1fa7fca36ad09f9a2018c572faa70045380abe97db911ddf14f50144fc3e63a485e4ecdab135c24102f6a274314d2f5823df895d183522002664cd95e6ed18436de2dc507d4a129efdc7e876a7761585011769248e6ea8dd45e8982a4282597fbce7f58b37d838bcfad1c201c4ea5ad3bbfb8576a503577c5acb8a8c79c6cd615b3c5e1545a7dba0e25e569cf070a74b39d306dac5bed9e74e53ca42f4811df032294076117fa4549bb4cccf93d2a4f363e713d95665d32607c981d41a7bf03529f5c33401283bdf0f1b4d2215d6f8d5217ed5fac0c1f03f6f75d6cb527bef3629ea0ed97f69474924dd011ede454bf95ce174c56b9ad53c6d9ef2ad064bc2fd184e4aedf20c719ac4410f4a56e64765fa5917c2c0b82d24e88dfc059db11092e06a9ef6c2d760dbd68e9f2ee6839223e52ce67a25e29e00ca8b1d587f7681fb6786337e5693bc14420ddb53f4e2d43b03a20a7403e2d0d7fade7d301362be4297ea310c18082f4bf006e940eaccb6b33e05ab38c37e6db160ce4314c33c6f6f56ddbf296ffd5f8ac8c0f17d2e09df957d9bf04fcb7f1a97e4a5988df7ce3c888ea8055bc33bf4d8b1851c932a61f9e9a8ae024085ac818f6ea9a32215decb9726942c2d7d8b973e969b9109449ca9b5a684099357cf4aa4e6248d5b8635c7a306e75c2403b3f0c25c4b7967e681990361652cd1abae1ddb345c7dc0b29bd6b516e9bccabe7ba66fecddfc3677da71dac09b9381e813a03e409a9cda01d7a0d43ee475a616ad624a2e9941fd5f6dd843ab6d672b76c47ed4f2251130dcb3ce08661eae40740fcb5d0ac77144050377440a22d057bd895da53347054aa9f5085976e090213e6b8aaf69aeb394d363f6e8c503f58e252ce6bae946a0b1d166f5d0567243d0de874648319730733057fc34c558ff571673c01afe6b09ecbdce3e74ee1ceed5ba2ba8314cca106c84a53132f069153bf82893cd58fe6983d4f58b4e2626bab93c215771a08f7a0438163fe92f7d60c1331109dce147e7ff7da28364e7d7ce03ca30fc10172e96c5b272cb616bdd08712ff7c84e7f8dace7229fcec01779533bce1f3f1798ee8d365b8180a38ad234d354a1782b1c1ae0c32ab2156aa05270eaafb7c78d0a1987df9b0a03b676a20c700bd9c27c9f34a91cfda4006868ab4e97d5c03d7a57f5ab49dbd7ffa21595b9cfba654e48f0243278033c36c459cb14caa80248e666cb22fb81ae1a7051f56378cb0ec397f732a162a44460865afceb0b904491da1fe2147df758fc27100831f4a49cc9719ca51f5f488225b45284fbe3f550c05d6a84a858a39d4ecf3c184ccaafd70adfc7c7d3f957c02e582bac6bd93fec7c782ff70613ef44b871bc6bdc8252872be860dee6b739c42279ccbc6476d6e16d32568457364217e113784908a5f773d7954f337f215656aa201dfc0d4022f63c93c773c34a03dc72c058fcf8ba0564b4ed7c0ec7c016406e5406b38fc18cf591a36b0c71d69c5c127d44cbd549e4226af8cfb6e61be249151d6f2b11817aa4136b28978a62745f6a5424fdc7dafb75a2be317503bb2038488340aabc0755cd6bf2e75b3576f3ad224ce0dbf5f6b4250448889146263ad6ae8f6179b7db8636414091a19b9b810de16d60ad882476f9379dbe53d8e696ebf048bae02b8573a83c5e0cb1e35886484fc08dbba7edaabae4c5b903e1839e3fb5b73426408d86ea045342d336366a26154c4d4c7bd8b630b2c963e98883b899a6e2b5951d7c26c64227194fbcbc956fdb1a89a92c6d03234ab0a24df6704ec26ad32673ebdaba029ee37b6c9c7270eb48302a1be134f95b5382607653d1c783aa927009d12dac67bf8e4f73ffe06162059816e8c2b6009f764784adc62f8ba20e25799ff8ff63bd4e307dac0c8fd19bba5a3758f87a81b95b08f63a771102e73d962b7d88d747ccf2d2ec5fec06295f0e7c73b5ab08e26fa9cd9e658fff941ce0ed6deaa83ec05b547a86d4c6cdcf76a908b44502e98d8a089c64763681a9079e30263080bb36341b333253c36d2da83405e15226a4e8d2227f30b49320a9722069409539d6111df002d8230b6da9bd577ce2223fc15d0e9c7dea68cf63fc230e9fa262fb17b9df7bf1618dc555ad7cb9749ffd74c95308219e7ada11d30ae20fdb34deed0797426307b3d91aaea0ae03f5ff2ded43328657ebc85282f63b79cb24de53382d110d514cb74f31feea1bdc08edf9d3b76151e66bbc184a57f8aeeb8288070311900aecc9553633d0f38bedb34ea84ead4a3177273f73907ba74b17fd1a43773c7dffdd8576d847a922c6de000b8385ae54edb22537ad7cecb216f69e7c4fbc353eb5cb88007b9613e19356f70cd2a141e74f3e6f8e0c38317fd8316c9773f9843df45fdbdd68479598bcfd9f39ddc9ef6b1dc40d2ad9e9d278586f6f51f757b2e0834185f3e783b8ad077c007aeb263f4820eb05f55bba57036059b09322fd46912c188e2c3f7202893d7b22b845e0b9e7205c61d5dcd1498ab69736463e13c8b7b58cff6eba3bfd9426a10ed9341ee5aee5be29b4a256307423d00a5091c3c1b9e747dfa39e0731368997cbc7fe084c0636ba6379f67292296fac329b6433b8018aee36b234fd25d82f056168ebc77558dcf8190c204cf91162d5b80dfe8b35f6662c0d83c44661e0e191d9a64583e80aa01f5255680eec94c4f0a390a9f4c00042a66bfe96096db865e63a6852632e8648d7173b16ddf41a5ca8fc0bab96e287e807580bf16fd2c683aa8c955c90ce329cca6fa971e4980bf3a2ca654d9822f31ef5dc921fa017740586d717a9325078669e6284c24860cf51891588d72209adad18007b66c3c429b12124d581703dbf6cfbf8b55134d4ce3e03e65b915e1e1b5d1acbae0f00614c51247ab72e721c6e778a3a2466ce7d7082b844c6c272e9a6f5a0461361807747ab36e2a5f76175ef4ff22fb9493ee21ee45237b1b486f2b63f557793a66b8d81880063872365d1a9bcdcdf5d41ad8b3e2e76c704adc3c2b401de681424e92c62af290545fba5b60486f053f69843013a26cefda7f650e00604e6217f2520db52ea5ad0c8c74aaf6874d5926d9427cb789502e083d756d4161013a8bdef3b22b9ff3bcdf6cf7b413d5034a4ab7e82716242ba787e97fd274bed0d07b5ca6089ffb77303b85a61f6ebe0b492979e7b7c5ef79dce81806c600c627d464e00b8998cdaab7bf7b12355daedfe63183b3b73d67a53e975d8cc07c3380b6b72d86ad9c9308a3b991debe6733eb91f189ee9de319485d240e844a4d7375e8008999ed21c80b94d87e4de321c9d8ecf7e10ae46d70ddb8fccf8fdc0b0271f8cf78c7e0aee94dfb8aa4e26c03ed0257a32d7b23130adfc2aff501fe2b6d0f59829f92f0ba832a585e9a5eb1842a025281b3b1c2aa43c91aac337d19351fa89ab8528dc5db023b3bb2b2f54c38ed537e1238614b69b814118fff73b5ae96c83cdf360ab86702fb0625a368a488c3702ae31fec45f7d45b57b9bd686bfe6ef8a065beac4104e1d45835d00b52fa38d2f962eed52acb25094db7e1dda4ab04b465fa50e5083b4b719251cd5fb013aa165a20099e625a26a874192135e84af4860dfba14776509c3d5507fff8745bb394dd9904ba953b55b36b3be023bf44bad808f80446040b50a200c6ec57f838d1e8e43c64ac2bd54ea483cea309823ed444d75e0e6349b2054a362d16e0c441818d1e88ae05aece5e166e1fee69e97fbd3709bc2411affb26905599043550ec4efbed1c5539966d20637ace36c75dadf2390090f9e3bf3d310effa938c836cf96afc055deca6b5812264a47f0a4474fffc56c6ad45bfffeb13094cc291bde31f52348c3cf3aa605cfc94d1bb0833ebc5266ada867ecdab6238fa5706992cfd9e6f0d6f48b0ccf0c95e703c80ad6cc99868734d81918d80a0486b2345edf741de8930b56b6a35ec320e9fecb4431495df8b1a2785c528050d0a03b969d64837486844668c6b0cdcfed5cae9401056d8045806717c64c6c311486b20589a446842d3f28b93f97a49957b993c0d5d58196e94df334db48e4015c84a60fc81155b3594e22a675da7ba5fc8b3ec027142e0850a4f73e0fea9067f5349823bd5e3988a71bb4ef2dfbab7c484c10106963db6b181fc3b1d893f9db9b1108cffdcd5a8a73326fc1bc6dcc82c766a84031271215ac08e92ec9f778b29aa46892fe01412f6a2ca3eca5c3476ff67577ce02e05abe890ae813586795a3906937eb327c75edd85501be7e7eb48a51f30f1853221dcc3b9040ee0876e91508ca17573f91715c6a55f9c5bb028c786669cecda66ef3b53033744d5ea7eb9d505157556a02cbe18cba0c70cff14790a044373c61194500136f028fcf7d059323a9a8746632de13bbdbaa6e31cd7e89ac0ce91347d3ba33319d6c43df68df9cef0d6b22b89430797445641c84e989c9c63e54b09f00abd5275921f812edc2211f271feeb5b95b794271c9ea4de7f1c7ab52fab2eb32925c712cb41aee8e65a630714736f214c799a30b3c75d14b5f09a7e55b88b0ec163f9b82a33ae6cd22c2cf6671a9f238fd51125c4c4dd3862a06686fe7a0848fa004f2f56fc6702c91dd48811fa63a8875461cff69b0a92adb44495d3fa8eabfb83333ef8a4c3f2f3b7c385bb1ba4fa5b7df2f6f256ce6abfb59e727c3f037ded740cafb834a983778162b50c86485f34d82c6260fd1007c02bdbe6a0515107f75c41483db300fe7e0317dfad4239203aee78dae696b8b2d79c63b9e7395e9142c13cd23029b2ab2fc64bcd45575d8494463c272f2badb32c929eb3fbfe1463f62e6414389ea6d2b35167457dce9ed56b69e111e1c3d952e894f49b81a859c43a2821d8fe1bc4bb312cd110fdaee359e6ddd060a56723d7332bcd3b244017fe3639dbe42aa7f4aed2e0f3f66cff135a2e2c70dc221e738934dd91598acd355713e8fa01634b1ef2bef434be72ca181e6add284d01f0b1b11435a8be5b579b18f9bde6f7510e2ad01cf0fb32b816d9eec379627ae9e5c597fab87a3240e731880f41088e9df80090145db218e6eb3e116187852c830698830ff06f7de083dff17efbc68eef11897ad0c2c039a4512fd16b8ff92b775a10bd7b64f066e5368d996d7489beee62abd575a78d5d985194740a1a253f6ce9168c659c63b6f40523c90532bae743f24feb2e94814b6df2554365af73300abc933af5213235b8fa89c96ebfbfd196c95e02211204cdc93d5b86a5d64ac5fada6d0d557ac3abd61ca7e1cfa302448ef0be6376a87ea955388c85f11712c7e44b8e4eaa2f80e0f97365595064e908d36e595656df57a8b8edd18772fb34ff6f18dc441fc9d09cc708ac781b8cdee40e4b1522e93ef7929a6413d64f09163244484139d9cf1aa6e8e2628855a348a2e790dc11564dc62fa5a438b8b1ca212b0be3a47303c9c8c7050971cf292f8f0805449569c6942d477fb52976c0c4bdb16bf2ec3bc33f41c7c686bf96bdba1adf116f2873609c92a1d09fcf57a381538b0c7c03d941baed6ed260362439cb53eeb2197c774dec5e06416a11a5838949829789d095a7c23483d29fbdc3c6eba1ff914b7bbdb40cfa3e791fd6a68762095eb4223bb71add7ed06d4c3bb98ca06cd8550d0c8cbe85cc1121c608a4d896f9e70a4d2c86c495331b4c6e9a4fb2751d42a765172e92de3e47e1658ee59dad83e442148b4bcd71bb2d160dc1cd60ef1a052f5d85e95a9fb7a7600650b2ff2d0e1f037f404f5df97ece7431987bc098cce994fc3c063b519ffa47b0365226a0015ef69534d79ab6e5c50ee307a0f7f79bb67f4a25cc5f7b5d083d6c280f398dc66ac35e4d2eaf2f56dc8b2af6863094f03397502885eea55b99eb410e2f617dc40b11e2749bc2ec3ad9940f4d7391f8312985152e770f570075f937d0fbc5f76308882a9265fc76fa85d099f4b042aac861f0a11deceb1ab4630e5656bb8e830b2bd13d8dd58454fca8e8d0d3856c321ba081fddf2aaa75df2dd2a788b7e3a9243a94234f33830eaa0a83bcd339371994b1e0305a7973f1e999ef314f36edf216fe78e5bec7202d6b724a66da16cae6995bb44278236e143b700afc9182d3e54a3f268ac4d88438a6aae4d5d1624e219465a53c1f6fc5693b79ce1138e1be0b26c5461a48afd6b7c578fb11a166ea53ec985d2539a49d75527ee0772a9cd6ea13577f9e31953f332fa53423306ac70309bc8105ad0b21c2e845eb3651fa420c7abf791c69d0e7334cf9391268b60cb95399bce563ec76d76698955793452bf9c1c3dd9fd7a8f53f843bb2e63091e2fd32f6b3cc438fc73c323d86e1dac3b837522c532c636791df3f3546a86f4571580e9c11c2353b3a7ab6fc67dc0dbe125093c182cdf553e59ce5ad9e5f0f18e0514f547ccf2139f718599fe051147c60ccee4c138975b616fdde6c6213f75358715de49cfcefd2279e82ec9847d746cb31ca93ad69cbd64f8b923a39cc0f3d003ea0141b50874bf2949bad38c63d637b098e60f973e0fcb6cc6adecb933f20014281ae9ed4d1ef7f830ba867d6301d97dba4799fb19a6f734acc22c16f6f4282056678d08eb605f7f33aa6ce8098ba483073a6462be279af8d21ccc36987edac0eb83c56881cd4816a906e15cb5b83b58f63b196e8a160921bd2a578886f67a7e5e0c0dbcaeda5467275cae3c062c00780dc6039f0bd6d437e457589d410f89a1244cd055a0fc06e925180e06595b9658b467dd44b20e8eb3ee4049d5550eaad1d4e2a7c426c6d20538c59b5c4dcb5f83909ce1202b019b1e116195d1418830a8f65a1e98aeaf4843b8e1d0ae520fee7118d1c981b5747bef1427e7118510dd6f0f0f8f438739cc3d4bf9486ce47da5b9c3b2e11a1fbbc39f6d2f98069e1ce3cc659f84456eeaf05a68885d2893b927c6079ce239986be4b762d533210b20f629b076982eb427371374fba961ee26d71e7b0c2760ddf961cfbbb543114aa1770f662135500593130127df9799326b563b949d3b304ee8cd30ce4c3227db3308f60d2bd669c1a3069bc7b0b23f2eeb0795caac982879be799321069b054b4a0e760bf315dc76dba45beb0b83d4321a8dc5a3d6c8a9dcef195f3a70f81a094b09f7e9135e1893a15eca183c76f8ca9e3b33b6984744e6ff0f0da117b3d693da8df42b0929aeb698a85ed5e0260d76daa278595d8e7a2662dd16cb6768db796d0d135851031f4e3613928a82fb92b554460c22b318ca29bf06133ffc71993876f9ade76764ead8ee22fdcc817219149fb857992570b55f781c7b652388804f8cf65c5ec8e981c535590902882410f3115bf3332120bc460272c7d188f8213d1365873501eb84b1b0183cd2f38c1b0f5db3577732a34f5bf2bb811ba95b1c7faed9b6f08ef5542cc2f311a450048797e9510cdbd6630f2fdd592f99e12ba285c3c57417ec918084f27c1ffd2a37e74b28b77bd788fa4c3006de3bd2ece483edd6ab4721873a9a48d315c043eea0ca87a0493d00c6d3b6eb23bd2e6d190011266c1d98940b7af216d952ab2f29a9a1dbf4a8b8de1c89bfdfa8788fbee218dabe087ef0e5d5bd384d69a5290547ecfdc67a3887d5f686c77bf982d84ef4a951131051d8ad628bcd7b289fd27cd5d54ec5b58b226ef1557e5ebb7e8093bd1c14d43838c8415e61222e8aa52fdc6fed05584b03012f796034e652ce1133a7eb866fc496384815d7f6b60457a9ca52aec20c9f52bc9e1b41aba153f4129541b2364469ecb128254a9bc02a29c8cd3a95054116dcad113374132e33830d4f16ea95008ccecb78095381cb609e153b943a3f9466236b4f7e722bcb75ed59b7941f3312a19edfae3e6d59464c1717bbec08e184f1a96faf38b656379fa5906545aa80f93cef7641410282af413738c49e7b8b714de132971edb22c1154e39dea8171f22d32317c79dbd8e84e470f0cc481cae17df5d5cbd8d3af2167b49ce9a480f6e3df8fc4ca7b0e8ed65aa56f8596566b9b72a90367900607496462ac71e81edee9912bd7d68273f1fb0174b87e272e44efdb40c686014e60aceea53abd1f22d20d2b509329f7d0aa5f29fe1580dfd1fce4a00345af93726353eec76e56b25579569644204a40ee600abb89ac1226073c82a93aa96aae3cb7454d0e71c3077f7cccb84fa5c1c795bc05a05ea5bc6497acd2de2d193fba72048af1c36b8c886882777abb4a17f38c6557bec52906014af3db2823beb71fddf42bc42d833a9cd73460c4ce39d32b9d0408ff05607965e8baa66d66bf5945452d2fad96e254aa953a8e7fd2977dd98e41214a68719cf839a839973c45ae9472579e9344b0621c6b3b09910d8f9d6428c3a8863484f72304669e8cee783d752b1b81608014ed591edfdae4c846bc343333a89db2c3134c139bdd36c37f8e4e3921dffb92367cc979cf085f4ae761b1773826762a5477dd2cf0fc7b058329886510c04cc23f97d443b39be9dd981543bc7b2cf9e45fab3c180d0545faab978c75902c3b5857c6e243329c6cc7815f52c9a4c10e270d38d39f99ff7bec205fc1314b2cb09ba5925b42f512cf51ccc746675aee9d3d85a508883df3052109098e63e6c793d45282a708a405fac39ed5875e45ba8e6cf07a459da0e8cbe28f1d5dd10c06cc4c851f2e5de67dd46522127d760e2dc9fd7640f1a46be6b476da24954463ef434867ef59096383477e7d0590765d4f37383e7e736645f6aa2711a69d84938de113207c8ed3c41e3b58da372928d929be6471bc35abd71e953b5d29df5945e58cf4d74e3685b15796395f2eae522bc247ca36839e3ac8685bfbe537c28b21012d32b5ebbae5d135416a347489bdfb22bbb3b65916ddc1dce5afd257aee1cee8ad16e1dd80bccdc0243382912031f052006519c9055a6a811b9f4b120b25f5a2f2e883acf2d14c0027db710bdd76b25900298658d37a6a5fe51279ee421d3d38e6f0c5de77eef7fe33ac286c2753ea3fa1462590e9056a7e2c528375b9924fb17075cdfd76d976c12eecd03b6591400dcd061ff8adc311e7d6a5922fd94bd21577c1c391595b705102e4900101f85bca6baf9c18887c08a1cd54cea30a126f6ce51ad020873c8eb795dc91456250e47e638ac379e3f7f6b4f7a65e59b5adcebfa1c91c34684477fad11cfa8ff06182319ddfbda224fd84293ee56bd940e596159315ce54643bd3229cebf46813f3deec00f6b21bb5565a0789571cac15826f77a3480e09e3e84c38e093a75633cd9fb67616c96dfcca1f56bf469a599a4c03ecb9a906d94d148842845a3ae3b8b86e98e7882a1f63217b1ecaf80c68390bf77cbd7fdb4f0a872f4b7089d6970a7cf3993995feb95022186891b69b615986f62f9713b8f08209ea588c67a2f991e1d5c155836dc42d969b3bfcc76fcd6186a60e2fadc3461e626173c03ec791b6afbd18239a9ec76145afa0f375af34bbd3af206d9424d844593ba3f4546ce7dfad52a78b24ba4a54f7fa9e5e06841cce35ba6e3a12042e5db820f110f3ba8476a43d757667e8d56e74243d25c3150f02746ffe7c6d8bd1d245ba63fc61d9efe15c258acaac51f11783d68531f48b94bf5775da1deee04809c9ae04a0e6f0b08a9db3ef713b1c25b7eeb87f68e10d346da7750a03dd2c1b6c0ba7d9e4cc2750d72f8fab515c72fab67b7132b3d1c475742c1694188296d362d54becb159a75632d960c654577bf77cf3aaa7fb0ed7e23dae0182422447f752ed4244edd7984a0264ce4961735ea4711d0ae426de6f002ef5dddc6b0d660fa61c35e9828c22b5ae99833b5ffa4489fec33af31d8ab459b0c853a87a831ca3c52acce456c16b1da03d24a43832542f89abe1dcc959cd742cf10bf057cf913c17dfae3c53bd9e0d3f1b5c8dd364b71d7c9ea8a51195e3d90836acbbea39ec61040384f960cae10af3fad0fd18d794db3d643758dc841d11ae60df121b08569bf45df524642e5c9e24a12bfcefd514f236c535fc1470a4a384374bfcd286f6714fb6aac3493239503ad9139240a45fe9cd894a9aa09f9f17f4829981f7f9f56b7dd64ae1f61e9da89d6a30c8f38d9c486c771f39685a37f6640b70a972aa7a11e6857e83533ab22fb61c2ca5f0d8f4987a595ce154e894c63e98797d2be1aeecf38beeb348cda06cebb7ac311fcd8e5f5ff5a99a4c93dd12e9f25b040ae6b8830aaf4178bd218fe8a5025b7569b493288213ac6d38a13b5fcde1bf46f800c15e95ba20db9a7ca6294dc6de78b4d42a784d7d1061005bd537522c4d4cdb78f106fa7532e2c7270db949cbe043ea767cd927fa7b7f8c09d421e09dac1d9d966f02a3a520972c6aed2003d907dcf1e2b0d2785196cec4f35fa6dffa85c124a264daf6159102b28c6ee4e1b8fb4db360efeca94b085691609f4cb70c7f415ae4f7175d8c2e2a3fd7b78f4d2f659e163861ad20b0791fd99abb9ed09b43a425a451403fd19f17bc91f1a9ae08edd504b12d9f4648933286e7dc21936f78f26f2999dd03ad8bd1120343b86c093afc64147c4a83dafb967e902a5f664fc7341fbcf87713e89a612775d646effbf51a1da9753540305c53abdcccdfb204d8711da59695d64a75cee52fd1da9ea5c53819b841e8e3105c72f315eb29e05752b1512c9abfb49bc42033785dfde3d1535d3f8907ebd643a3fa4081aec6560ddefca3992d7d15a22e5ff89aa235254547917764f0c77f91daf3796a3e3d7ef1235bfb33765861285c941edbc70dcdca48dca990240348c1a9658616c216bfcacad541439ed700f5f6c78c84f50a4128fe47bd56ca27989db7594fce63da805f7a735d11cc835bd1a3fe2adc53b6ea2712d99cfe0abbd6ebadd6bbd949102b79dc3c37e529e2d8840b43e02d0a98308f2c9b2cd00d486c7432e5b4819b4027e09738b707dd7ee0d5d79d96bd41387c27f3935613fb56c100ef8d220c82f2dc5c546fc6be0fdfdc8daf1534d6211f34b810cb0311fc6b3d578cd6ebc325afb2b5bbea4a54e78b32743ab1a2bed2d4c20a2a4b191036114840b0c8f8eeadfe11b273b02c0f8e0c4c52217bc8bd7bdf8ce5ea198259d4cf4a84036c31d54168611d25c955382cea90ef0b7b8f1d44c9fc11f83f2434fc2dabeb2fc97ebf0a740abc783eac16e8ab6813a1b8dd2456197855fbc5e9e8d7b4d33dd9e7c8f62faa7458151618f3ebd93b858b3a9c1cd9576a7b9cb1b7bf8ceb2b42abcff5c0d99207b8a35983155dfb700e7009b24bf40c3949820d78ff435b19c24d88ef6630b52ca6cb0fd4c5659a7176f92e09fad0bf4d8855e113f1268a0684671a9c2f5b9a49e83541f34b2b3da585cdb0877095f80effbf3370dd5a025b51a08ee66583c9c84788f7c7efd86c7402959716f76a3fe478660d770b0a4b7ef1a0ebb44ecfcb0f8b6d373af994b046b7f8eb9dd5771d37b9f27610c25cebd92c1039ed346827887c8b0b33b0868f836a9fb50353e5196f8c0c77234c786cd2ca98817b5d756599e18b7a9b5ed79393e431fd32b9dcbcf4b75c1698ef8756d392dfca45121f0eac84148c5849ae44dfed57c9114f838c2e02895d57f4b12f434d8e1c339a8ea9282bcf4a53b93429cd4db923885c031386373c5448a31d818ac34c7f2d3fe9be759f63bb74f891cac6cbfe127f2a84d9621c1c025443f4d310bcc2fc1b4759d5fba879e8a44decaf3330ce9fdeff2d652b7bd26f611e5dae3c00989ae5fb0577210db9d7c9ff6d617a44d3d08d24263f4a1a05a3587a81997856756274a3162b5198ca92cc573e6705cfb2af75e198ef25c15ea722a0881c2c88015aae87b37af30f5521969d84493a9916447c7dabfd263a8482a5d899bfbe5ce58c7cee05eb6d3b018a0e196a908369a5968b4286f2b44c213ccb69dc0b979bc900c722330628e477d71b1215c3470907ad8b76525636bedade7b9d7a871f0d54bd756966538cd25f10a7d2b06aed3fe591626236af1659596e9dba9bbcbe792fcb6f0cc65b02cc603b999f610ddfd4e74bfa4e5b87bbe546f718096630dda802329e527aa5f09c2262d9c250358490b4e13982e8658d2a487ed6d2046de26374fae985abb9bf084e8c4e83a769443af55e094506d2f4ef080dbe5d9dfb37702d2c37eb8020d8d98cc2e2298b32879c51c751e1dd5558fe2eabb8f158604297d6d072ce2261a1d6830b7cfe2617b57c7126f99c9476211d6161acd75d266da217ec8174b80484c9dc6f0448a0a036a3fc82e8bf54bdb71549368258d5d41f57978a4c266b92e8783ef66350215573d99be4089144b383ad8f3222bae8f3bf80ffb1bb2b639235ad52a97f5ed0bfd2e5f653405c8ddfebafdb5d7545bd0ab7e3f66ab6cdc78cd22ec08f41b9d565bc91b4d7786656c958e1d4c061437da16e4925bc2552bf0829c32fb091ab59cf9aa37e7898f9c8fa330d2362cffa4f414c7933aff003758fa1364715587a8486d2e4fb3f895b0bf9e2f9704ba8b35c70b93dc94bff280ea8a24eb1c57c6f7d11ce1cd43331d4464ecf6e6284d2b6cbb91d5b8f993a09b5dc94d215c8e7d26df8f413b05d79aea1826033a114374bc5a1e09c2ca08aed90b2e08b1a277feb7bc4ae9038c3492f451cff12d603beba72b26ac84968d51ec7b2ec4169e92e01d0fc635d146f8aa15aa413d1a95a4e4af97324a78dfa05e2836421bbaa16db5e93287a40eb69224a07a30439c120d145836c7400a15d0082ec51e7c384b76e48edd15d0265b7fb7375a03912c75d2ef13726c39d2c99b0452900a71f9fd3ce08067e736b2b63fc63cc231c2462194d973e287a44d7b7fb7563f9c798a472e5e605b72442e5750c6433b414363b5d167ebffaffbe4abecb58c1c5b1f63b9c9a291204d8513bf315bcd2dc8912f93071f0e325bcd32cb607386cebcb010b5ad51b57eef75ed3e7feb4d222e37e459b4633d230174a26a8975b8bf37f81bdb37e02f9fce9325858af945b0f8b43c7a57d90b3a37aeddf9b630a4766343df8b07e2723b71795704f0fa4942ae7292656fe4fae074c820097528cc8cb51fe6558bbd2fba5e74ec3d3082ca6fb60f70bb6b1b8ede3f5d230a44e2b35aa408cacb31e4ba950c227faec8173b90a5f771dce7e1395bfdda518cb3f2db68c68af74c98fd9564011e6bda263c2f3e04a6f05a54ea7d1236cc35f130bdb75f7312f65a3f7c52afb3a54b3fe94617f048aa86a4307bdc7980af3ae859b7d977603d328483c584c0ba7398507fd9883fe88eaf5b1939d9fa51ffead27d75b478e466465c048d7e5f8be5ddbc686af2857abfc4ef6d88f82d313ad0303a7bcabc962abc314018d1c48e9875b4118ed95965aa81c1ac0db98a94ec65921f4eaebaec06deb4b51c11a858f81b082999bf343ffb4072632c808af38115687a42b30c5c675856d1fba063617118091f30169e601e9b921159ffb6d3958a33fa1c8a297dd8a388352c109e4eb0074740c672008c80fd71353a9986cba61e751d10968ab6d73ac93d41e4b1672153335ce153f30bcee0c05d32b083321f5cbc31e35ab89dff98aa88c19f354141a66dc1f52efe7454dfdfd7d70724ad8dcf79f6f9692ba99e47ac762fa2a2739d5b46fe96858b4cbf6550639bfff3a45de12edab7246c505fc23fa3e0817154910c6f8139da11fb6afba25ef5fd68ad2c3c4b3bc12ee328a082e48088ce3a8ac91437e853af3b06e41d564879921c2e652b7fb89beb38a8fd242baa8ceb568cb21d40a278675f05b744dcae9b5056be85490ccfabdbd547e2008560716b6dc0c8721a3e1cb5066e50fca5ffefbac0c4292fa2ff7593318bebb28260bac0d8cd88dd1519b4fab9b75dcf62cacb23e2d5bd19b2a68d83d5fb76b49329dd7e40098f98c1c3d5caf1571a17638dc24e2569bdc1bc8358305afd1f71380a6e160c1b294fc0daf38835e4327f58c7797c1106a7a230e47a2b0937429301b0c10ab569026c72bd92b51fe5136192e635403e230725b06847d699008c74508b9aded479877957fa37f3e7b05968a288aa3cf55558d6ab7d55b5630f59afd5093ff4d1d344e0f0ff67a745fc60ef182d2cb4df04193f92922869ffaa36afdfc8450f45fcb74dce5b8661b31fb67f6422516a73b5d4caf6554446d767bfff01473e60a95c4b2a509d3895a7a0e6940726aca02be0f7f357251dee82de3207c9e470bb64789ce12812d2c5ac166dc781989308902c0f63258039c37a6449749a4ea0420fe8190ca57b096438e6b8845406990618ed9774f2051c58369072a002d431c714114c2769343113c6a853550eef432b5eac0cb34d122a3f3ff92a249423a9ad199aa2abd3bcde36ddb1caa412b115dab9fdfba8873607cb0ef4fc6cbeab7c5678dab9248593855ff6b98b0bfffa85b6b349d0bf30ff299e1c1a4602f2da2e75ca57fc0bff46baf1aa2610f7273a2721e3161881fabc042affefb361c13e346d7698f7cc8154e39e507df8f038ee5ebec1f95f7b152b2be422dbb123ba5632a016241900ec3c93b89227bf71a595a0efc84a0215409b057c1d64cba34ea08dd0217fec23706c4fc2e7b9b115edae92277ebeaceaedaa253548216f6aeeabba601102fdcece627c5fa9ba9a3781b7b7184d9dbc567cc70fb25b7819052ae65cc26d63aa4d46cdade18090b760f24f6414cd8dbd028e702975900f54ec73dec989bf089e3989fc58fae4d2b52ccfb44dbf76f52b59934406f1be2dafab5a03a5285e68260df88d120e5f06fff57aa4b87ac27a83d61ba13ca91e7985ac6dd35420f418fe5522de4d8e47941445739f58c93864530288261f2e3969737a0fec7af5e8817389998e700d47008ea75ae2834d51691569892142d3a773f58eb0ad7e39d4382225bd1c3e0dc5d2bba5813cec59a5ff57757f412c4be13f987500a4c24f2fb376b40de5ec025c91479a86fce8809e8d75a0db045ff96f12b8a760510bb8536a0dbf2c9a2e8d63c2af20fcb10c54b39a0c863cc9325eb9a3f2a07030af07f7f243a169a769f183cd5ec332e7cc487dab9890052e680e4949b2fa80d220a085b2b4f5757c12f13537d2ebca0facce65488658e492556aa69a9610329405347541de35a0a6ddeee088a81532a7226902d7724b2ba38f064a0cf88c0624c1165f163becaba61f5d2e364ada0d2cc1bacf0ed8d16ac06963bc2776b87bd2e8d8aba63a84d7085bbe66d747a4aa2f0f1632252696227798f575608d3fe44cf0fdc3886698b33c17a532d20b0faa2c6f0dc4d0d803e347825dfe4ea88d0fe15de86f234c82e0bfd7840acd11657d9376240f8889a50d9ec9efbf58452a3f3e944ae71d68fdb0021ffd670f0750a4f298db6ac2a7f4320bb43d51040f9202c34877d3bd2843c1b15553c03e395ba0c85bb67f05bf6bd11ce5c92bd8544eeb0dcf01ada9270f963c1c29bed143e101934327a4c83c966b30d315d84bcfcb587cbc7add67c1abae10e901bb4e938b37d1d3a18480abee80e60095cee4be91fbae75460b5fa4c269be205e3e2cc4a4d40271d696d599ee82ab02eb7829bd3d2501ade590173cce59b276b1cfe243e836b3c219442d6301110e3e697c8148276514aafc0414f63a0e9c308ed9159daff044390c250ea3e08c7e37a24491ebeb4c6610dbefef5d9ff8ba0257f22d3e7691623b01a1dfd8e78579632858c224e34b646417bbfcff6a98ba409fa39f92c68a6c6cac53378ea07c9e655e31a86fb9d29e1931e0c448247f0b9fe855f3573a5be1325ea1ac1185d24ba2d6579b48d97271a4acf6dbc4480c3c64a481aee82c865f20bb25842e02370f900343312ccccb9d9b0b86b9f05fd0bb2366cf58d2278a44bc24577620c01b58d1777d00a7fe1e6060bfe8d568d65d0670a1975781b5d820693caff88629efc5dba57d6037081b789a4cc5c47a4611bcc0e7624183520070cc669761eaca34c5130fccf656552324ac3485fdb1299f3c98aac89d538693b43a34c668bb0b7ae51c38d429727fc6132b09a1e7a9eb46046c5e22c18ebdf27947298563737832945b932b8037e284c27b2eb218d125b6a2b08419647172bd2e77a78cf8a08afc5155b15b810317efa121263f17a34351a609bf14ecc84f54425041258ecede28aaaf15bca260aa573dc192915abcdeb77cec619dc0dfae48634588e79c5acc481eac32f76adcf46bf6b0c661586a424895bd1e2c97441a09ffebe15ba7d0efeb1be18b7450d4908e7a936417a75838959f003739c6720d2976a7ecfa47cdb38230e3a1bbeaf4094f27ddee3cadf30c1ee76a5f5dd506122775fdfe3be2adb19ddc36f846af97c91e8ce4b73902c747551d3ff8f1596ca3746c72a7990f0d54ae9c3001acf54c4a8d186c61a51c3174d88f1596acba124ba0c89a8bba33493734ff835047729e181b68c9700970ee1f09db6fbad87d93652d18d9ecf7e5fdb3b1549556beade9cc39ec8064ce9749a07970c2c81d1a6caa89ebb57ddaada764a459daa76aeddbb1692225b27d05d09397fda360e3270a6637afb1a0ead0c2c49e6de7a4e4d8c06249982ddb8d331f72f5c085f7b31 +Output = ecdac47562752574729ea6d7aa90e531 + +Len = 112208 +Msg = d3ab172a5d2b7d86de2d2e8eb3251e770f0dae2dfc5bd0ea9c306b08b5d201146c5c8f2351b4b4699cbe1607b6cf0225fc655241bf1594c68fc468e1b91a2a900e34d1fce69917086570db2afdf0c37a34172508a89f2873502e26b704cd5547409ba75c25c2ee8cc0ab449e8f6eaa9d418def2bbee1d41867d46d339fd1ca608af9d7eb1418811c36d71a0c7533ffb6ab2d785109c3dfde5d2005fd9110d10474b62a52be8117e14e5c251bb5250aeff8618723922e93ecb978b5bce270b25b873a683928e6fa0390a22d74592e126eb290e6496008366b034646189bdbb48c4aee59475c3070a98412fabe6835615b60215b6a7b3b1182c4f181bbc33820c04638c4256145c2fbb31253a2eb213ddf8b7eaf2eecad6c5a82e12b4a626f3e1e0181737b3f0f3822a40b02c8e9dcef22ba0eaa3fba488f1ac87e0f70816756cf05322cf0fe751946df66cdd76a4dbe4b75391342edf2c1eb1b30f4d3260ab0fadab1b82ca75eaf8eed897d78775cf4824567b4e28e954bf5055fa11b5c3f94c80668dfd842b4402355deda5216f1d8f1b00053c5a418755f0d73dff128ee496113bd689cd55e152d9fcbab0e52f4b1bd406cb99337638752bcd476fd94ff18ec891a1d1f6a4476d354baba53304dc8117d14aef5505ec9f598ea2ee6a75b4991eee6c40a084eaa3dfb12cdcabae56513ee5ef992f5f183712b1ecf5469e8247acc892604b864fb941c3bad1af7a2cfeb1bb364143104fcedfdd620f1e38ff0ccaa6b0bb6816eaf003f9d22ecef6d50c28c7cb520097f7d92947bea621c39f7b211f43bc76b540fa8eda0f3e8ab2f2ec0ca1fb561874a4e877a76f5521ccc7f52888c7de07efe63b5adaceab532ceb20c5c062c7cb24db7f5372d0967ec32d1d4979b9aa9c354f34e0829cdfc8c3424cfca97e21c92710004510aee4993513561c6895bc9413f069c857f6564c247cc309d3c9ee7309c70db52746ba11913f2219ebe85e900a5e6c7ac167a96dbf1f1585c5c2a8593b750a3c2d34a17875e523ba6a2e3b00970d9f60556d439df18dd6e8f5e4c9fc3abe883278e5152e41c9bd7669d3cc76386285119a83af6d7a6d69bbeaccdddc95e80a40b0f49fb3834161f671857d516d11b016f727575ca82250772ad74e6acba602ef5bdf9b98c8e0b393079fd832b37f92e8f1d4e5dc09412d932c90b6374a6d0486e002b35e712c24d4a2af679a9a20cff02128a57c1c4e43a876858fb2a09171afd40a51751a882843b910a5e98f99a9d4fb8f40ad6fae551f8f22557d5cd7ecd2ae53006d23895058d1801db0124ec30fe76531f061e5b470dcf381e7dd94d897d5794aa73aa41f9c726a297eb0a4adf98b66e3d5a188f434e6859f92a15cc757fff99ac3be6cf887222b63b5e95fbd2a4df0e0dd8d0c96e44235290e56942bab74307b433d487d91576056e62ac4932aa59fb368a2f51ef7669ea8ab5bdf97fad8ca569615db015388957d900377a27328bfd61781b6eef6ca3e890a3f937edea433c74cf67936364c374233f1fd7d8c5dfdc36a97d6996af371549b605452cf5ce947c85db79ec1f8c24f5284aa86eeabc5f5c253e8a0bc68f395ef6c96b635697752a89a2a8d8f44c2ef7c1a135102a8a507cf444197739111c766b2ef0bb9604a726e5a2694e686b5bd0140cc5e70cb2753d1f795e019127853a1e1a1e5b3c7ff117a1c50376055173292974a21b189a9648acc4a1d255383d5116763b6bd06f1da6c3f2c07952673ea906bf12d3d6ab7d44a60c29110dab0d655b2b9015db3cf17a5511e67fd71383f9b5d75e37cf4df1da123b3fe742eabb1bf620657fe44d363c5e09beaf1dbe0cc03ea2ce708ae9b9b2fa382b7c7a5c0f1dee3c02d1730cb393e7c49032abd19fa7a70aa9a68fe59e7365eb35f74069d3134b69ae3410e03228f729a43009b20556faf6390067ab68c65c3ca5811979cda4168eb2d0443179a2962041d0c0cb06743f4dc4a799a1df52e613c2418ff4c679569256cc966852aacc91b03a578369a97cf993c3ad31cac00b58d5602943873a135fe2508feb83e8a2643a975641f89fbbe1ee7b2cc2f3b7d3f3260570ccd58e55dc9e86b523d4031f81250f466f79fb03ed1cf79dbb20e047ccfd59eaf87b1d25f1d29493780fa44cd1b9c9ae74b5685d05676088861ae36ecca284212f3f908a86c5a2ae53fa722f3a40ee16b8748ccf1115de758aa96751d95cad9ddaeb8f8d83c0d9901a5f16d3a500a506a37d0f64f96f98ed2f9414f6dc75fce45f45c135d00b60c03704373dfb4217079d9a9a21a5bdb777dda59367be339a802816cf8a56ee60c610b17e77224e6ba00e91d510fe47629cfca28cac65dfaff99b256094fbb1012b0f309288046cca5a5e2b6738ea54c2e3f454a6cbbbc062d5223c1d5ca89b6a769a481d7888e45cbcf530f9a1522effd42e838acea720dc9e2421aee946f5c42f1bc0c44f95fd484e3b6832541f1b40f710f7e0bc104545db099dba43bb0736def96131161501b798999bbb583764add503774f9ee078c4153878e973f119e90c9cf30cd5ef36d02375903bb584516ff570cd7f7bfe0181d31b7ae580ce7305406c3efc920be5bc7638105b74ed29aedfbdbf195b5228a59d196b53723c5db103d109aa575155a2194be3c39c5936911c5416c547c43558fb9a12de52221e15dc331ebe2ba9d0ab9514d11a35b2be41339b992a453c6fc17606382c2767ff5a53fa43df17fb9cff71fda20848df0ae6acfc12f160a2200995c6a5e5f9f548a8f08e41b5212f02c5356d1d37dbc862a710dd47c19dde8e57e14021b2d0b341263c57dfe9542d4a266acc0b4cf9550dace6a8024306d801d4e1dd743bb58931fdbebee723b5ddbc49978134f2a76e551eb6c4091fa279c3a81d056527af5f6254fe291f0a4e27a05744f660cfeffb8025099924fc79a71bfa1d21be1ec71d1a548501514726f43d77f992578bd8e4d7e8658f1d82944b50f26a9745ca04aca225daaf4382452adcd23fbde0cf6a11a290550ebb5afa4eabba8bd1c3d06ef242ee8699be62b4b3c58f9ddfc543ae6a29445e7ec52cb39674770835ffdb0dd841d80f29898f7a7540d79c60cc8eabd8b32d0a47049fc80df3546a2dc391ea46e90affc66eb29f5a95d2c2a9be586a418a72e0d1405c409a6f773720d59a0c2580acddd733732c490ba79a20624bf18ff43d6885400b23243208fa76fe9f7b5b4fe832c6a1792829eb7fa92e820d4aa83ab32bc9ce537a9582303896064840d29ee485fa806d9be47d81793be4467d76a4feb006b0dc4cd4a8167beab53c6270b5c85edb98f68d6109d691b0519f90df79467fa5af4fa1c9ece44ad9d324e91fdbbd45d1b0bd0788d7a579f391bf8dcd03b2210c9354815c95bf2ecb27a7dec659ebc344926910412f17ba6e6c507b27886b1da52492f575edd1ae287a6e484d77795f9c04a3b1745854db88aaf763d55199fbd72ab204fc3a42525994202f9b7d8fa241cf13f1099b8364a8125e4cbea66244096c5bb7d9c53aa2c43d669b9ab357139cbb60d8e840ccdd386e2d3ecccef17fa5b33615f4d6e027d23de8953161f63a138f336efa8f58cf9f840c42e6136c3412c7eb2635b45c68eb5b4d2448ce979f0f1533bc25cf4fc2451ca15ef4bbfcecb87021f285a9d7ed78603e51c84360cbf91309c9524ad93c9200979cdf0fc82dff768082cafb793fdf1562239708794537525c9d6a461cc7eef794048d57f9824fa0b2ddeef369e58a3f62a29e650b95339ad541530c43eac1c8409de7dbb67010b75c0bd7d9d067dfa9e5d6c5a23e4453b21cbcf7e4742e733c456fd5e22881aa8429156ff5d54e481a94c8f50639d90164d8163c15d7196c1b488240b6763c85ccbe029c8ea1212c59177f14da25dca476b1580ce99635142df4df0e9dc929095ac6da48ee5b68f32f15030b6629d5a3b151894ea6d60ad439ee8d29e049d19ff5e7a55a5b2cac0464365dc3f26e4d68dd5db1ea95c21e1209e19477c71dbbad64c96cba1e3c73c9c0239423c61ccc5ac280d8c7fe7ffc376373fde2996e6f9d701537507fb248a90b84b0122a5ad8e1276007cf293829ac104ccf51a06376d5e1730c04c5b6b00c0c00ba7a6550fb65d6a546e95d132ed8d81512ab222557bf7f8af5be3a72355a8c40b942c027bc4e95f89bfde43894228276ceda68db9ac11103f966240b5efc53ecb5528307a3052d0110f404d0e3f4d8160cc5baaec845618520e4ccacb35829abb692f61739f06667acb40603a1b5a09ed4545fc668b235b973207a7bbdd7d625c5ea6080057807d2772632f858cca3b52c6fa14a02705647f90276a003e12103e9420b699005daec7a32cfd88fa3a9041efec6631fe78cd6bb7307440edfd3ed2b823dfb6000a55abcc127cacfa17a33b1e91738467f9e0ebf59768f6437b48a91923f5effcf31c745b980f79f2edde9ed18dcf2ffa056990f9e0ca88f538c83265a59b9f5dc46d91e04238787b29bcedb745db8d2b27a1cb3280eb81799237fefc2d234c88eab384e8858a10f957c8b82e3e1b3481dd342b1e1c7e682734127f6b3f4f9024c2a8ddd2f666dc04048c8eb4eb20ae84929b013af7e5b5a48ad234213052d2a808980d4df97142119c72c1c9e16e63a9e4411e17c7a3e2680301adbcc4efbc99191b83a8231bebb89c1601fb9566fc785eb0b212f04b86f8392b5cac4178966e70ade17ff7d9214f9fd0cfc89bacc1664e846ddb064f1bcb89b9b16e5a8ff89eabc99743ec3b9b6cf44d7b9f58926b0a4016b1ce7e21095891274c7154886bb026f9258274b5b29755e6960e40da41baeff22e7bcc63e825dc1eae63e40468297ea71cba25c9ef351136bf8408c6fe1e9a912451757a20c9d6ea37947d9666911f6ddd5973fad9ecd2b858af04fae89bcc9e43ee0de65baafe2478b18580ef5d85b7e7fee3daeb24f6d5e1ddc9e8a9c912540daffa3ae15fce57f21990868b054e1fdd08f9ccab541a29fb9ecc12ba1cf87cc225ceea6a4ec3ff345b2309921ed4f02d162a428310a92ef6608ffb820ddb5331ddf0774efe8b74afe4b17ccd00c6f3488509ff1ad1205f72d18a15aa225771bd37135427e56162c554c06274617073cff3fd34cb2c1c35f1504ef38ae0e972d4df8c235da9f2443509d45d20a78e0c13e188962c77f93ce27b4317bcc00db10925df4778a2ca934fa261cf6a495c26c4bc4095a74b43fec6a10af4a84630d6caa89143016646daa58d0d3bb9dd875e5302a9b5d41c88d62e601b1ce5fa0f3eb9e63698707ae374b7481b1487ca8c0d3f5318793b72346d8a36d7e2ee41d563375d23da5e374d1bf5522ffc6c96c6cdfa0c314235d2d32f5aa3e5f939c43fdec37c0d6b2351d01af039c065c0d8e41b03bc78c36bb4f1862025a9c250d7ab2bfed147dd5821190c387d50b33ce7507efcd2435f35aefc1c7b3ab7d0bc12b3b539eb67a3654b746a2e8b75972978986435fc45883c177f6cac617496e40bc6152528d15fe3279eaf52e293742ed328655f88e3c0d784d7d1642884a751097ec6111839655a5be46636112eccb5ad8cecca06a2bba08db1e512fe5c649bb22a42ae47f446234ef20958a5cc13465e327515f406bb2f887a32495160611c9c75155d26a694e67724132b1eefea697bb598c3ef8451cd0bbd2367d0252f6c0edba8ae42a4b40c6b071e3dcb0eb4876c82c24447b012019de7530ee93f2202afba87021a83261da117750158acf438c7368c27aafe7e85a5852b9f1b02db68e5be3af91cc68d92afe1d206364f4be6122d40de67d3f991b90327a8d414ce1757433f03c7f34cf3edd29fccf26a0e27b3e39ae92cd505ee5f0dc1aca2f97c866ae60db2ba7dd6b9f17648b5fb81cd764305f4c8688635d3edf1a42b0605694e9713117652dacd7d41596761d02b0c4a45f0e90c994c0beb1c5b29a48bdd16c86256f4df2fae938653e876411eda3d1c1320e2162dbafaac30b6dc9992e5079c632e224dbf5dcb9dbf9fefe425f3f28451326a95c447849fe171378ab9c1ae2300152452705cc7fbdb0c5ecb841caeeb86920cdbcb662c2e9526c4e87ed78d04df88757de1403b593caa2d57b7c8d4ea09bc2378c1bb63e0c243ff4340bb26ba38048030909c781e6af5e6194f6d06e8713d58fd45abde4f0f65611badc10dabc025ff1aecb610b3cc6c1390a99db76f438207c9a5bbcdd1c2e774e224ad94620e492c8d844197c20799205e54cf58f70726da7e806fe5018366b53733c57d65590aa308c5b36fc172f9b6c2df667e1822982b8c543ca666d74fac7b599d0b3e56c6fd3d4f802b2ab51a217eb817a93b2c528563afa6746a252eb53f14b8d0458e2a856b703c3c7634570ae27d473cd88ae27294d131e1a3f36089e2e39d6f234581f643e65c263c774cdd8e7d79db98d4d47da08763707cd8a1751744bf3a503389aa36f0447ac6046803d35723f7c48085011730bfa37d3b5e113cb692b444ce9e2bb54c999cdb5245386188da0414148097595bbaed2d91f2e8d3c7bc7f898d3bf55f59c02ec4f740c5b9910092e01763baf766c9dff6730c666ce690fe86e5ef8195866c832b49f7463bee3c26b0ff8ae671e070de7065070478a1b4b3d56f257ae870d34c66e0e534791ef1321f3382a44967547b23de7f6d8767ac31ed8f7a2bd8a7b8ed0052871af1a1a4478369c77eee59c9387955d1ec09d6cbfb47dd5a2ed67961e7aff549541604d9c975f8e5c0e1366388e951ab1a804da8626ccf41fe728482beae6fc89a86b7164a7f675a34c29ba80f1c5867637b5ad619d4ebde152d578ff484187138a436ce5cf84b9124f2e7fb1d5ad0a3716b7cb98418996afd7740ee0bd995dfc90f128643890c172c02a9f1464d60cbaec121e733907e8521e0ff1177175e60b617c8b2c09a2f78a462501f1c6c7f6c862ce8d39ae501c93cead0bec8b5d890aa6ec7f846b42c2248a288d9023082e2920f4ff34c7ea98388f5743a633d9b1bf0649ebb386f98a06333a2b38a2221ea5cd8c5eaaad5fc6090b14818f9372c3f42a9cb602814eb8f9ea64c3336b9c2c04119c91e487370dd0e7ecadedd0af286fb9edcab985cab2c557ad3dc7a7fec20d962e802a7ef8d453cee7b009151948f95c420e20b9f3e132211d813d7ed14789014913c4ba2c855b660e702b88368b59bba56a7e4654ad08f1bc78dd179b2341fdf632f9625a87b05768d69b51915a597d1dc61d53727f0e6e9308ee9be7bdfa303cc5129f0b421a4afdcaa099af1bbf4ab20a4309d7bd0d41a91aba313a7f7f4223b45798c61e61e7d63583881a3854cc6d1f39900ad1ce11069787021ed097dcb3e7107613834cd5fafd8d455917e0a855eb470f93211687b3659e361a1809a6f54685607ad9a5bd710c03f9f4222b897357b4aefb17b04bb76e47f4b7c09e47f0bafe7f84883246444830cb73bffc15cd4bca97c81963041a98c9647b2e1e68ac29c2fab8f8bc197a9b5be45f581cf46eb0cfef8591f65ae5cd6eaff0cb51b0327d1afa9f910add1beccb6b405454cf5b6c0ce1b7e632f71ff47cfd9efffec8899c4ea7bfbce63b3022c9899c1b6a4e9d69c992e880df80d0f53c750c33ef57b970a628a3df16dbc0279d66fd1526183d8d4e2d9fc7c5a000b8f640c2cdea06cbdf69a6d0646364d3e28f29eaaa52d643c2e2d86523abfdb824f2854837b87dc6d3e148d0b1957f713be7fbec42b42fb5efcebbc1fc5a3fff23776d27d72163b2335437293074d3a31aec038a4516cc9dfc5b003bba9b0fde9dce20e617ec6098e70b9a6647c7097067e76a4c1b3e5402d0cecc5bc534155c7840c50d5ee31e7fd64e9a0c6058c8e10a2057ba2cf470ed55724aaa85edf8819d13852413cc426fea655fa5e2edb9fdecdff35de002c865728e9faf63906055f48f87b4a07077700a9710b9354f83ccf36c65bca02f03720f69f6f2c5e3f7e165fef4446c97638b1e2dd6cec146cf56080ed65fd242ca1c154c75fc14b0622cd9a6f35ddf08aec70f6fd86eed9a45a4140f6ecfe004c46c6a7f4454b9bd4c3e36d1ad86618d012dc3a53f2023128cbdfdb55493303d9a69f74a8c821ad25b2066c549475aec04c32317326dcb774da9ad49b1332cb4f31ca4f5750fa1b937d94fcaf02832ee5e93170ddadb4b912f710a12ac383a33788b5ac72682b5398971db2acab2515bb7a588ce5ef40c28db1cfe5a6e29c480d1c0ff09c863bd19f9f1f12bfe6c20fbb9ff5ca3e7407604f8b270671f8e3164a5c37c04823b23222e607817b5df05960aab7dd49d46f2ec2f3c4783e5f0e9a79c9abafd7d914e1cd1c65a34169169f352b1d1a9a78ee6aa28c06df4ebd554115f4fa03fe0eda6cf892c7ecb4a0cb5db3a1742692ea0bb048a49c90257c8da6a96ea1511d4d79302ff99cc2378d84f1669e7b75e5905dac3fedc43f7524ee379e97103ba81d87d7fdb152c86c97ba16c892917ce5144a9af2b83c31903f1d707feee51830e77cc0cc4a8863a657f11a53fe34c023de5928fba4531b293381edc8068e7b4a43de872625bc288736c0988351f3d424670fc2c522b750829ab20c015e8ad956ab13a785e35c8b81bc8f0de13e4d2d6946e4f4f9c3b7863eed3457b65758b6d895b28e8603e8012871d2e6f803bf3054e67f2be3f7f200d0a37f6d41917698628c31b890f7fd3dedcf22b03252a88189de14f42e4ff564da4609995d9d62f2670727c2214ffa76345d04e62aabc7957a866cda233c2036ae4d498844cbbc59689efb17c16c7e6eae83e0153b6f6ae0a987dd4a8d3d00dadf31d596a1bcd131e9ac2245fbedd76bbedc4aca0f1e2107994afcc1a6d315e5ef9c3460eee150105cb743b92b44b411e7deab50f058785ecc5821dc1a8eedcc51d4cc53a6b997895468c60df9f192d5bc039856997edf6aa528030652d0d7129884240b43d635e143092fa0c284d24b9dd388475521d4cfc64316bcea39904d4622c1e450a7b9dcbb40e71e2f6f10d81fc701afddb1e6d2a231c37c3b3977c0cd293c7b57be71b02f7892c29b20ccffc4767b0c7ddf8437cb6c9fd0d0511c31a00fea3cc37b1c201248b95a903a7546fe4a7ac9dfeb4b53946c02374400ec04615f51a52e7e1780f619a132992c98325fbb87845e659aaabfa8a13c00d975bd73900940e327d2775d6400e73067a4465b5207a873eef0c18fbae33b913b37c1793a879c9c18fb67cad04ee4d08c27f7639691c2dae7fc2c970b4ed27fb6a0b4c4c74314b3b1e0d690b6e1c8040aa1ca1b01ac5fddd0fb4068225a8d16cc4f0bf8bed245c493314871a07fed45539042e42bcdcc174aaca175987cb800fca13b87999bac493d5b31d0256fd10f0781d6516d6cb3f1a55ec431c65c0fc8c835d7e3e025c4ac00cd272ebe482feb86d508d55f0f940781a02d3f444ee0d8af8b45b01b070b878e059cffc37f364562286f02693ce8b3600f40f08aebd7bb12f0295ea2a60d4655a307c5dd9b90b719fa5d4b245b2eafb0faa3f812a950daa322d7523f892672d813fc137523dbbb2ea968221910d236f500cab8641de8c1d091e43d1a27038785e6fe6b228e63bc00d42429afc47ff3bca039b407900c1b1babe471fb06011eff7a632f5e51b554510905c4510c84607867556d65d63710f4ff4c933abccb83956cdee291046cfe6f967174b54f9c07a8a4c2571727067dfcfa710351b1bf6ff83cd637532ce724dd2b1bcd45040343de06e5039428d6ac843c1654e86b593e9848cd602d21b0622a35593078d066cf890c51f5554234172b22910a57602579e63f492f77895530c723be40d92b42e52a037d9ee309bb58624c75964726a0ac728ecde7dada420b4494bf70ee7b043f31aaec82b5f5b8eaca28387b00355730bd95b01bcf7b037c22f6d1331156473840511323568cd948b3245e4b4af2b5b13802b44dbe1215edd2d89829ea33685ad6a486033d3588eccdff5b69501548a872443ef03f05f5ead49878a7e19904315503a9a4e29634616ae7b467e7e38c80ece8b4a5baed2ffdb8d4f74f900d97365bfd128aef0588212a9bfdc95b03fdd5085eb9c0ca2e2080f01c98836df79de44c0f4517ab39e0b68d7aac0021ed290f6514b2f3d54f843f0acde0d5e3ed84c5b598b5edbf79da9bf402239ee5057aaa83a9349174d7a762796744d98a55e8552947f97f846bd23bfed109081cf38f40d49ab33c214d26a5cc7748e0d9d7350d079b644fa27664311e55d0ee222db33ce857b35653166e73648c719e4ad7f767d0f19ad082300cf5d30eff83ad1aa3292f7ec96282da0b55d205336465eeac0025e901a4bc1f3904ad7b099b0650bb802a5e4a0348fe79b7a57022c5b371cf3076e04d2ea89a74e81e187386d65688cc6994c99b1dfa26235f6bb454ac07dda33485b1e0e0385d1aa565b1c9859287785db0dcac7a63bd2350365c73c81763c2ff37f46dfb8f3e06c3f168e5ac9b341e7710d7b9c6a19b32389eafb58036de0a2775692842f5a456fa39fd6db3e71b2966536f45bb6a4cda68d3129c7cdcb8f35ddca4926f023c65c8ade3c4240ca9137bf6f7c2a0f44e867192299b067f911902cc2b5ec84b42cdbfcbb08b85526a875859f5c31ff61cb0d34a5923c5a5d2e5a6c251cff72773e93021e816407edbdf5c1b0dd9a0d633f41e7a25e932d61ae3ca5ddc78642d2c62da3eff06fdd8799627a89458ac2b20cab390143dc686c58dde0d1feaa7d2f8a50e8169d005f5c0462b912dc2ba4b6faf232aa8a4094e5f5e625e90993aaf554a5d77bd04016d4c69d8533eca53dd8d0bfda867ae638364dfe7a0d2f68518cead47b07d1568958a6bde6d4bb20157e58b93a7b5df6dcc628cee925b952fa5c1484d9a0e76b414e6d67e4dd92c3b21258895972799a08fd4efd7919ef782ecd9c5dfb2f5ca7c420e3458836b9b69efa99d63f5418f84543873432d1190374474909e89d76319c34d0ffd9c8782261a0e349f50780381a009a1b1d367f1a5532e22da8d07e3250f4fc3ddf79172f816afe8a8275f983109c5059412e69e658f6307444b2bbd169c72fa6a332dd0488c2b140ee84cd01ae7f7197a7a21e8e05fbfb83c32a77376e1430e22cdc14cafe0fc513421e42d97c12c57c557be73be4a90a052d1ff88be745c89a835d02a869b803ad852aa23402bb13b1559f0c157e6927a08a7b88f65dc1bf76ae9fefc7532730b3bf903339c9e325ddaff8d5435aa118fce3256da057f0dd1db788254e43c317d0f8383e1158f3c1a9696d89ee00bba6c23f05efb05d3ae938a502eb66c2f47faa390a0ae33751b0bd8de5723df91d999aa703584ff707ad6e81f4883757222fe989eee1d8ef67b9c0224ad659cc31b92b2207eea4aebfef68524545e88ab5f036f1cc0918079ca65b3183fe69015dce1eb8f9fbd809ca78cd20df6aa2e3158a39788ccbca07573e35c1783296210b9f1a71c1c51291901046f4a93f8cebabc59926166f16770248f7da11ba08b3a2f5c85647957bcc7a7e7bd58b0bcf29dd69fe03523d25e0048d488436dde63f8a98d06e74b23b44ee8c13cb6d189225143d1218287d1fcac5d5d1c8cfe4584d2a50d9c22e6679815500b7de37acfe68b90a7a6c81762cbbade739adc4178866ece58b585ef75d0918a30e17d1103b793298e1074371723d248d293cfdbe9b11371e903aedae10669d3dc17d248c70e0e9afedf258b61cd7928d497c6221bcd774c48d70c1d3ba204e9677181667c52644174634a68d50125fb04075dc88113f099f2d00c4ae82bd9275d9f190eb63d2ad9795d5173e3674f3beb72f513ac2d15f7715f4dc8691c7d0a48e0f7b5e726c8bf982de9210f887b67f55b3ab80f815de14f053f3a50fc672e93f7bbd09197d4603b456fe4dbbd311bbc308d0a2db94ee3e6426f0512340df0d943b4034818c467ed445453baadf6a39a836aae892d5f8bc1974bbd3f5bf7fd83459ea27d221f23189b44e22ea332ac2ad461f9946606257b9453c73aecaba11c8dca52933c4b4e67ca9014ca657ba1e7a3f19ff1ebe96d7e9a25b7876eaf882f7cd5883ccfef363552f460004d48015b6297f604376fa045391002c74a5a1f16a33eb7ec6561871bb4b05852c30e66e090c3905dc10f8a59f1d13d5d1861d27c9164560495589d85607262447f653f31df12e361215f784754b7cbcb412d4ecbb7f50717c81af60cf6a91257dab2f6a97df483b0d0c5f677b25232946d32f07e874f3fb8865f2d1ce7c2fd0f5d9e19c22df6e5bf47d97175cb2f063af509442f90016449586bbf2fa46e66cd807d35164f888dfeff0095cbefaccb416116c639628a195ca6e708cfccf9f434dbe6c5105327f0f28ee1cfd4a069d62a39f203366f67d364fa47b677b20439b7d851463ae953933c4fe38c4a7dd4db68081167a1271906f4db0424b203fb8bd90e43351072a9f93eea9c5777d87c2f8d23fb80041a1c388ec1b2f009336e8f1ad6331e1b7f89977cc762bdf760de670c4626d8c9c8fffc8536ba84d7b0db97ffc8b77dc6707102686edd3c438769f667b719ce8cb422a79ab2b17fc81ca15aea6e36b09be60eae9459623ee6bcad72122f4afda75c22de11be0e3d34c77e3c7d3f47632650a110831fa8424b81275eadf730d2b4218f148cc14749b851b0b12aa44011d030d6bcb71a05f30c7556109da771ea3dc4b5df8e54e321bd3bf74d7545d72934172e2792e101ad83f9b83c63d874a09e86358388f17851ddf6a085ef9c7325cc7405d5c8fd31fe5c8ecc3682d2cf9271169cc4ff2f6d5675024aeeebf08aa403c7fc3babd70d41e0c510939d4ed93c3fc64a08635738ac3cff54ed1d1aa41074838fedcdf6fa34db0d13d7f5a5280a6545cbc2581160cf704e6d14d55355e789472f50a1e59f3385f754783e7e32898bf5a0874fd68c3cb96fe1dab742f6b5dc835908ca2b52ba8bf440f8da129f460e5646cbad2f018092e461b335522cf7c8c89b7a9920bb56578467de5b3ab4ac87085d0412736717773c4b32c2195f29d867752aa16e4f83733837ad243f1939605c21c4f25c337df0e82cee0ff113c8a610649d758c65ce69804ec9d7a8438934e25382df31ed307a6885295181d150ac33f84787d3c49394ed0bd8f7feb9f87f3b50c23bbcfabb7e4dc29949341e5e45528ecd5b0cb27fafeefd3ee7bae323a9c7a8078a25f29b970883925990514e1becc673617fd5eef4f6a180295565873f07d7d76d255b4d4f1946c8f52f20ac9a630dee2da5956e1ea487215f66a78fc97c5e9637339b3cf0f06a81ce58f2f64b75e3a22226778977691cb6dc572fc9b3a5aae88ac94907373e8d7127b64ec79975d613e17b02adb9c4d0a532bf74b198145b22da6edb288c541e0ba3bfaa7d2ee353d7ee0bbd5730485170f5080cd3d138ddf9a89cc81d6ac1aab5c4ed8c93565efb529a610e2285541dae95b95ead1993a1b167cb96524d17a2040db87bb6ba391b0899038b7c237873b2974be0a9bba5550eaa73dc63bdc6927ad0b8de43c512618e4c7babe0954612216c58495651fe5655f33df0ce474f0a8ed0674ab6f17b3d483721e5ec551d677f9736ef3f56ff242bb48289fe541158b46f3c37ace9c42ccaebaedfebdd9ee221aa9058c135385cf460d9fe806ede2b801fa03b81f89dae8adc7ae08ba92b20bc18dcfc98973a4f44aabcc4d111d5f176545bbcc2b858410c7c0e9e38424291a364756101e765a990d4a3737cc7b9391bcf97320ba39472c45cd27f7e3385c38c00022ca9905aca6d810690f01af860c4c41b41b944d2b246f18eeac9f76514ba9e0b960c3c7a403f328e93b766140715f430425806838e08dc6c96a7f85123c370ea53864654998a6b83f25f438caa93b27eea647327748e7023d994c0ea7f4b3b36ebc4486a34d39e9f43342dc2b9b2816f706b155ef45c5f2d4a1ceb8165a65f69a532ad3bb0bf3e28fcf2af66b2e7038a9ae8676a8bd6ebe15eacd2c69559400b364dff398b81ecc9860722e934c5ab48b048e40ab9a2b8f88dc1111a8cf89f841592c8f423e00ce974ee32ba9dc2db225719158ffc2448db6e06110d9af8d07ca99d74fc283e11115004596b8c5325c005e5669ac1f01df265c87d106dde655d88ca8da1f710bbc9ae06016c5f1b1d8a331a619bb97a9ae60ba49fb3640dc09f29a69d961efc5f8ac55fb54da47f14e9654491033148621ed60703672c2b94ca12be0f391e456edd5c7e0f7feaf3ce7622d07f71c7dde6154b8c42cc14ac3456ba7d6d1b63a07c29c9ed5a83a11d8ca8e26a8767fbafa951d280c822bc1441ddb76141bd8d820a08943a30f95550e21a2a5f33463b222e6d11a12e3b80d82fb76005f78ffa6e9ae251c12d3176426112714b1dad04f9e7cf7f59cf57117c608c6ae8290348ca915f792e99dc82468c4a4daaa0fce78b57e172173605dc7576b52e6430c7e72aafc880ef214b17e1c62a15fa67c6615b014ba065fcd84067f4da2116c94e640328c5ef6f3e1d95a8912a60b6dc99f0fd768670c27e4efba84d63f98c3cf73de8aec03b3b5ab48a1f8fd3c46c69d824c729fa69b954ca5ccaf2db0e111662d34fa46ffae001b0739b14bea787ba015b5c9e4ff1b6faeae25487b7d561d001c2bc9bfd84e9bd91d0cfc233909527b6232245dfbf47eb113ab97e72f5eb14649a9418118fa508c920121adb06114d671acca32218e8afedb48e39a4d6093e0bb97a8b4461ce5dc6fff6713d7e889584809048cf9515b3c0ee376bc5fc68c757ade477feb1b2373bbf0187a360778aaf1331a930ca6b814b5649674edf764ad8f64660b8e5fd2f67ebb7a0c5624aa747410546ee1f36a2ed7b28cea805be33201134d80b750ba10c048d6f1bea9e85dd78af94601a13a317cb7a0479f5ad1a9d8d24305ef56a2678a7f7351f6fcf80d24885342f219edc6ac5a19b3d35cf5bd1d8891c2bcd954a3e3489b538787a22d63f1a88b3ec24e9470834155a3c91814d71f80e0a941966dd48b941ff8b0b0659aaf41486c032444cf1a5e56970902560e7e56873bf6316d6430a7ded1e1e85cd3a966a20546367dd208b9dd37847b2cca8d5bdefc60ed4a9b1f1cb89b8114bb15c75fc190f24de880339a130ca34b3e1434d90e73e791ac81403bd4dcf8fa2969f173cc956f312ce18448209dcc3933f35b163e28f4e73d1f7b4b5b1fad634fd50febeb9d24aaf2fde30d2b72680fb370ea5b97a4edb5a27cb99674e90a16d464090f482f7b80e2dd392f5c14e0936892c9f0416e3cc486a0e06248c476dd621bc72708d3db7aa3886cf7dc0a9a8ef761e11d630e47dc8f94daf8ff37597e9e04327b5611ac62de0666add3dc00c70be5182a260d78c4655f8da0c0cb1cc232263053587257fe3a600d99691379084a27575eb1f23646b109e3a2b3062571c689aaf6367d4217609d4b03c4366c175c2e87032d45e8281b9bc3450173dd53013689ad19bbd674f7c507320fcd43bdea028e5fc18ff8334a1c14d2d297ac2f8c34b3c029b27bdfa8e1296f706165c29cac56ba9656cd2fe794c0914dfcfbcf0e8b12778dec9a1e1bf798020f793aee1933c55ed325cfe4990caeca9b2930f930448d196ef199faf7123e33159d2a090a9fc592a181661a098ac6c5e3a6b5769a660bf0f347e23be537024aaa559dda16f93d9d28f4fa98df19f0c94efcf00ef3f976424578dba98c70cc8ef52afb2ae64814c88f05f327c2be142004b24b88e406b5588b0cee0b95c484481fa3acc12194345bff3db98f5a831a102c502cae1493b07aee89822ba73c13c04f49186770e5849e9f22b498506feae2ef5efd462cab4ff09679fecf6bde5f3eaea2a8e47b44ecd8983e4d094c8a6dde74652519d3537a01aa63ccc088b4510a6438c2ffe9b854531119eaacf5dd894be4ed0cefb29519f652d053c6a7c6d16b9893d081634aa4553339f547f46f2773667c1a9070781417b847fba8701ac8ab733938339001c4272528d4a3f049309c239cb7c3b60453ac01502c308aba1c101cb464da19e59d11106ef18892718a0f42d44b512c42befd58734e249eaeb7e3bb8cba41a5fe155a1c91b2be82f11f14ecac3e0379393e52e339c94d53fc7f6b7a47a42fdd55154c701b810c67d1d5f249adf89f46f2b9f2ca29067352ae5ef27f6f886b68f1862d3594c53bea1796f3805ee2ed3a73182636cc6b5e43cc3bbef28bd0bef0da4e469282e513b2cd495dba4862b7fec644364fa861d5cc5cfd18fc24e3f01a1957dfb06f4b5c68fad6791ef1e1c339f3246a3c4751a298688e48c5c129c990b58740b7e25edeb3a7248fd5e3c8da94009f092631a18b4df7d59674ea0a11fab6c8b0ce6486613cdb1de706a67dc4b7f79f5d34ecbb599412ba4a3128ee8fff2501791d7c2bacaa9ea8c8dac06a4949df0bac8f0205d414c025ab26013d0c48091ae1cdb2b588a6f8ad7c79bbf531f3c1ca3f5efbe9c37609fe0278ff5f507d6afa31068e8dbdd8f215490a1f88435ca4c65eca5dcdef61f52d9752aabd2345508bb0ef991913e793c678b5728a482c90e651fbb21b217e8d9bb2da89bd4d48c4b4a8b15ac2527ce4a950a43e63090d8e125f18813a1f75d82e9b3824c8952fcd5d5f7359f0413eeba61bfc0a7a4ba5a432d1495392b1eddecf99950347c4a2746e1e5e1f0ca9d6b2a61fe85f39d99cdd2fefb8af8ba18ea867f619afa0a248c0d02d9a337c52eb418fa68ec4077a9b3eef018a1d8db6013ddcf8ebaf3df7cab969d44e1daa04269e4bf616c14cf54ad15b4fea2500b7eea618e8348b848bcf67225ba366fc872fd3c057a9de7113509d5b21fe504c6dfce9010e1bccdf2600d3e409c095dca2ade8d8136fa4dc9c56aad8beee25d9a0d41081b1c9f9b58f05049528cd32b11f48e379718f9af6580301b86fe32d10171e227f1a659a6d8f85021efef4c6e3c4a9ce8db83149270e00a9e57c05ee579c8128e292183771ee29d668d45bd8da5a78b0fb317f37d888f4aa452d7bf217f5a529945f0a59287498875af12af0fda85c92ab249eee6f8c880dc2c96ec1b9eb332d7cc96287fae87a1ddb9f8a96b678fe7b85d8b9f656e364d9439a05e1a346d33d821a494a4f1479a1d524a3536d9006737197f6d5f3552f16afe669dc3fce2c5f8e98e6298fbe3b1a2fc99cae88b91b8357a77d15b0a991ccf0f6c13af44be79d888d62ac22af6890d1d69d3070bbe5b11f51773df4a93404ed1236812984abff583fe45b71afa90ba393d05f8d5e0e07b1dd0cd6261bbdc68e82f03b4842218ce7f795bfe286a6948c475bc6476a3b8df5936367b0c8d718bb8d16efb84df14c1bfc9c5fdefb0632773c66ea07a6164ad4bba578f97828045c7cd026e16dc247dd9822c3ced771ee49b81a5533db4746349cf99269f25891599748672b6a3c8616114f7418e291cfeb049e8e35d17689ff7f883c680010c79a26a33afe0b0810acb04af926e40bdd45681b1d73504a1c1bac7afe5e68f8af08710c27c219ceed89bd3cda5ea58a203f2bb98b57206b06726bf660b3f3b75089c0a9b7df5d352693804ca02aecb4a1c2979f5e4708824fea0424ebcf69f6b3065aa271bd9ce6c2b440a3d2f1833167b4f2f621add237006dbe2d261b925cde688820dec4a189c9d34768f81a30aa7aff85e559f044311fe2e33999fd3692db95924b845d33c544d7dbc49b0fbcc7e389989590782719b730b96fcdde1c3fb277c04aedee19423aaa45df4237ef2fa93c732e4dad4296cd4189f849270d0c69f55946a1e11ca9b333cde075fa908bd4fe5dd719f75f516bfc9afc953ed1a00af6a766269c04a2b75abaf0bcc069826db9a0b87bbe44f1984936a23a8d30a59c64f0d3068999d44f075636a0f140bd7a5482fafb6aba1f5d10a312bf7af2c028267db4c90ea2e88222e7dba8f5dee306b74cc521638983c1392a75ac6fde9bb5249632f595e9855993b6065d350b9d16ca4540761179c4ccad13f38ad3bdde4b46837514853454da420be045178e93b475b79481dd528b8652a6b3e00e5731f2748ba4ad464cfd0f182e91ea04316ce7a0e8e8ca2ddb7ff8112bde3688743ab396f7e74940f92700fb6640d465bad1b8332165da6add4929d3e99b15a8dca495940f686fdb027ab4d4fc1589a0f2692d16aa3338fd2190217e291303d85615a1561b4ca77f31a0338c3839931fa1dd5131cb796c4c6cfde9fb336d8a80ac35dec463be7a944c3e850962d47a488fd4296ccc60ffc1893888334fd23206a4ae54c72fe46e821cffb335c20dc48583f7bfb0f40f78c33ee8060dc56a82d307250b45c6e60db16988c3f7a00dfb3d47ee1ae38dae5fb955b56c70dc5c024f9c450c2771eddf89fb84c03643fca6d7a16042efdd673d0d9449c146ddd13ae22db35e5678216b739999afdcf4014ebd5af540ba2d609926c4490d7610f0b3f5801a09b923a939d50d6f9ad0fb447a563a561b2ec4c1fb6cad6058e8bde2f4ee5f201637b9add1181daf88faa0eeb20a082bdb32ecb3eb471634ab842cce8537906d8cba8457bca5920182422b277f418e1b89adeb5ef21fc86d0d32a5ddef36dbaa7329cacd81e3330c8f90e316676392cf2b890ae9975c8cb487da6f37b9550a7fd36bd437a839ca79b7cc11e4f4d8ddefccad917c636628b12064d3036bfbe393b56aeabeb9111def02defdb8ae0937227101c841dda6640be0b8196a8e8f308f200d548a3dd2f61779aeefbb1c5c6710246df65d8d820a6acfbe8993a97bb71a1d3c59c2bce31b9923252f15c63a3762ecd965fbfb63e078f65f6aa6442641ddb3df428ebcae541c092904ed340c6dc0d22d5b41b0b2b0da5c8106cde7f89580eadf5717c79a6b4831a3b86bef38d2d1dc51215733d5403b090da32e1b597daaca22e085640f26c7a57c91b97e282e3e142dff660c36584106ec8af167b1bf035c9125001c754f3e6d9ad8fc694249ae82aa3c96c43bc2945a04033f54682434a7146eaf7535ac588fe7d45f39f0eaca2dae220ee24e45dd0d3f554069e674e5b39402baf9b506bb154acf077599db3a1d22f7f7eed6a8c42884ca1b2e9477bd89f72a4a305e240f06aa0f1fa5a4e2a55aef0478703bb4f0b2baa8f92bd8f46530272e87a198d0fd6bf1ddcd517bc8b4edfb91baf1e4310ab3cb3801e91bb585b00a5698d4ccd02c4b0681390285540edd30e6e5f93be7b9349ec25cefc680c4128ae9a55160ed46aed1438d3f2a505b32754a200ea79da63b1b8e31c53f1eca5d8e31d8a1beeff09d3a6bee91d28245f4b10793ba901d79d32ae3a9f4f0574099fd74574b4c9ed41e2940867fe5b4722cce6367845e2dd901b30bec033ff2cecfc1fb4ad774c29a3c860b7d91cbac8ae2b3a7c4f47a966ecf9e4c217a96b91b06c10edacd9d22eafc3914fb4fed33361c481ad1934a1fe144d3ef70e25c72d046e5f52eb62e876a682aa32742b1101ee47506b7e83792da683b3b02c1f9e6949715f7701a91b9c587420029f1800de94122b19d7caab60044bc7affa2d5dd1002395dc57f2d80a16167732ae4c3f03f3c3764acd50952fcdf3ff28f0a581fec8e3970576f6aa4a7ff824352a4e082cadb9c670c7dbd2f7542adedd883ea73cf44fd754e71b0ec7e687cb9c8b8418b2f283a02e4fc2f151473ecb10594f3a2612a6eb7d20e6721cea43b1db5a84cd3192bf77d5cd8c6cb817ce6863cc6db754b4b727d09ccf70b41bca9b740fd6b212eebbc1f9e9be91b636481b6a59f0ab135acf20e1e36c9 +Output = 0c6a8572fda61adc42e6a4fd292b2480 + +Len = 113560 +Msg = d64d245649c9736669bfd0d3d4a5e869b93c8b869071031f0881a4034161a4643c5d2d9390ffb10b5e327eb186a7925a1b78b08e150cb38c463a238d90b1064d5497f8c82d707e41df4298898af6957e24022bd22545c70e843222d6e331156e0742ae7d8ae48311d43546e4475a9adeba2125da29e5e7adaab3ca64a3aa7ace3ba8763b0e2368822554b249259b4980c61fc62f87b5ba72a10342c139e5dc75d90f798821f4d49dbae701408c80496e31423558a97ae9644f6ab3750ba7e46ccac0dfef2b206f697b365e51e4d343b0e1d39bddf5ff1b8b9d32450683bb3abaf403cff59470e2ee5188ef05955ade4cc0191f47d50bf9f073a11ffe08e8856741207124c5a9d5342227dce307dec34cb55eea1db0652b9aba016ae501f56d7c985eee032496ef44d8594e74a32699b7a7e823e7eed6589158984d41d8ab9c00e0066e1a1afed92559676d3ecffc09968001f32ef62628de37aff19cf4d2b7fb036018f210a83bdf8f9960cbf426bbf027ef8278321d45883d8d7e7dbd326976e8b415126c5dbb7b603650a37b6d56cd84faf75009825497547c1b6d9b925777774a8d0297e50400b688644cca9983367f6c7b3be31f001463c2f0f3f6bb2c099869a74bfa08bc7678d5c5504b72e931008b35c328baee0652a8269736768e31335b8b74fc8e8ce58e669a3765bf31c9efa14e6f411cc9750976e5e1c38926f930666205043e1b56df830c877f4a020334f4edc7940d376a6f74545a06bc9b6877d354877ce112d0557343ca03d905e9b7cc3b548a55e0eb6eea9c8965d99586f1ea8881cb3f185cd78066875835e1826173609d8cbb6e03ed1fe4f649a6be5c84f2277b5920d6014ef09d47e6263fd61830832b000886b7d55c552a1bedbbf1193558fd8e4cf3c7a00c12911574c7eec54acc844f04d2110ce917ac4174374e99f94490d28a18b6b61ceaed4de620d1510a6432e277fa187b0e51042504d879ea8712bb8da4edd7786850e3f645f387a2b873bd2029a6d40a132cbb2d64467cf627eb0727601931ce376afc7859e719a29c20ab70e27d4ea23fcf58c35e2a5fa320f7fb088745cca1d360bf3beaa58e37fd94863c69278d29db62634eb82c28dbbc5d1f98e118b1d7825bb5a8c0d4ee4b25f7d5eb874d99892f0f65363bf3e1854146fb40353be75a8d836425a21d42c55a7021e504977ba883fce5e2af289189f8d918664d5576103cff561b5a28918de527f191a8ac3a701f516bbcdc7241cf293ffd74ef0f67e3d6f813f3ae9ce38b0e45cd593a35dec74a377f2b897af83e1c9f32d0e411c1baa5952113672240a71cf23da484d970974ed6aa9780e8bec0182240e4f3028c7cefff0ae54d61b1c95955cadb4c41f7c77155736887639b3c67f0ae16e68bd113fd5d56cf27023dd90b97fb645b147b3ffcdc63076793989b4f3004d08453976617d88b3bbfacedbf7bdf59a879fb05e7379500dae821bcc3190bcb799403e65d84983390db08c863f1566b0f6d9e9ba769a6d54ad1b5109d0ca88a78df42c6e08ec4d53644bdd6adb424b90201a44867db3767c0ecf69a117230c9372db940d77b84fa95c2741f860e70cbe7fbb6110fd67140a2ff8d640891ca101d450f5b2a940229151cd5acd445622a27247b0087a07be759d3217668b39fe892f1ed20c22163ea1e1c878481a2245d2b449c1cb7817ee44e305bd61b1ed6d8fef7fb95856ad2c5188833af736ddbec5a23c06d87c3a2c0e8dde38e071a9869ca20e0c45cb675436b29803694eeb2601b8890fce0ad0e028ea460a616f10d215c3445b52f4f74eb7fc71720ca6dcf3fd83db3d0a886eb32aa4b7b242fe95c8b1dfbd16fe77bf846bc2a9f75ff315a14f808d2f1c99760d8a39bdb12394cae2c753d2dfa6a8329da8b19c13d1a837c64e3b295682928967de15c28771e602a8ecdc1005ea2af2e32525d258103ab5cb90003a33cb280b5a8cc560c5cc56ef9388b50f3a3764630d37abe7249a2f1249ab9c2a5754ae9e4e2cc502dc816bd42b219b2aed2cd9256476c04519bdf9cf99075b9421cdba94bb2491433c3f9972e85ddafd8f391d9c9158ff76981a2f605229dae23384c0913a0ab68c7565642e538410e190ca964b0c54a5f6302d34570d8976af0d1855164345a15918715078e53ab991b27fd7b34df0703e6265ad2623accb550f06ec965f7bee338601e2e515e8516834b75657dec2dac9bf61fe502d1a456eb9befb93f703f9965e959ff57e2364efc81f96cb274242229790ac6782488176addf06819284601bf29afc2c86726092cd071d6fbfd532d3ab804bcedbbdebe75bb591f1ca539e1ef2806becc73bd0fbb40c5ec8111249573b9f310891f0f14b33f1226707182029cee483c8990632752d9ddf66c37fe217e86c10b73d784e1cd7003c53c14872c6f845b842a45801b99a4a13ce4f8499b032754f2d46ba4ed6a561544a814b2260ff129ded51a7cb137a8fa0510da6ec9a9a29610d364d6ff33fa2eeadefb6aba263d9892b398bfb2d5edce9b1867d37319016dac994984e1d0633700035016ae597192e7eb46b1e51a7c07442527e163fb4cc30d4da21559e89919ce429c20cb5293fe26a5adbb14af5c8b495fa10060f6897f7c18f8f13023a5ba9cc166efd9b9aec3980b5343053b9544f2ed5d9931b2c2894122d1802e2b8e04b2a836eba035c7cb8242c2b38167301886f7e3129fd8fec9a492b8291aa55cde5720947ce76fe8fd2f75827150db34f14fa7bcd572104627ed903257bd3c182fd551090a780f1841e6ca19e73a3ea9b693236f487201a18b6346c96fe096c9e172621cfd19bc607fee69117b0738984f9b9384d5665417dd4fda04da495b77db777b56bd931ec69f907bf2977e7308a3af2083e318b0b005f9746b00c1342a052cc63eb2aede558a142842a26994019c16f2f5d94ebe75eba93d87490fc9eb47d8685c4531a41226c2978b048e468b211a306221d1266d77a75cdf1efdc1c189c48c38dce617075ce1f15424b52faf1b01025022698fa0923afafce551c4b5b339585be193e03b15bb5d266ca8f7747014914944dda11722ac3f6408d47ccead7df44cba01a7b637960488432e47e3099b05d4eff705d9104352a1ed4e8e145fd88993d1f81381abbb0e02110ec702cede867a8b7d63ee45485c3bfe87a58fb2943fb98c40cca35a72a21c3f111edba7243ac18038625fa80284b8a14667488cf83d4555a07b242b03e85f33fff4767db74c3437f0ab3320bbf3a240557c46d74bacbf93e1c80d05b5095256a0f3d936dde258166de67297b9d080427a8d9179d6b3afadcb5a65d2d12d7e10bbc10ebcdf25b78676ba25f44644db0f7e42325ce17b9e0d26da34799f7b69ca1a061df5053cd8f0d5cf531fa8773a0f28423066b32c141abaef82e2671c9dea836b0ccb964f43ba50ce04ff279025aa4236938196ed973c4f4258f57138a2dabf97e525dc88814eb05f407e0db8244892c56494d0e6b1dbac7abd9a04f6fe009634b0ea1d0d1912bc291083a016c051e298aa86aa40e95f9a40bab96a7e3bc6cfe77304a20693703ed57bf72ad3802df8566d416c23c731e13c563ae9f9e093345a385ab39c78cffc0a8ac0f116ed449ca8b5ac5eb6d4b749159905ca8f76ce8b3506d497f64e96c07144c73e088dfe98368bafc822975a9a748b02556784e19d1fe65a983ea02f50b2b1f458d0ebc4b3a7f632f18e99829b00351ad1aa923332c1ded4fc99f3017474d93089988cfcb4a4ff1d2223609815629e33887f292c12c3f92a0c31d174f65fc5611785fa1064d4ad58a3097602d041ce36c00fd03404cc3c45102ec1f09d1c7c704bc1bc668be008ccbc67632a9446ce0cc2810fb3d184b10b50b84cdd305306466d745a68f16f185fb565ad762919a59bd6fe6e1141955f6513f5f8a378ab6cc9c5c55c7c5d2ae6fad52dde5056615bcd43ae76b61ca44e3ba31050aa3dcdb5e39add4b0c98b8798665e47d1fe4c6f98953b8ae0b2a5c8776462fd95b4661e97b36e4af7f6bc3d9e9adb5134b9cf286b64c459e76336211fc457b1d1c5d0e1179df010e3d9bf00f0df5c6273c438a0a3e777ccf60fe61f4b7e81ba356487c33c4de5cf2aef3e922d8853f4159a4398e081c86c83254ff398e7637f372d0545a467b1ee23a3a561a34a449ea0c86a518fc838a1152fde4e76839f996d6bd3e8be6fd6f674937de00089c0ca8bdb076b302f3b1332ac1b9062f778713ecd7e1d08cae760843b32adb3cb3af06d2eb556402b623b52068269fca7909f21be6e63020d45c4d9076e2b3b7325a89b4ffea35e412071f9eb9d2b82187a8bccab1f4b48bb848be9848ad90636137bbcbb4dc2d905085fa0b7d665c1ce88bf86301b462b3a263e4c3f1337b27876b237fd2d354efb7c7cdcf7c8990a3e6dc2e4d9ece4481d9d5467a381d7bebed2149392079b3e791f220527ee45e9ec7c0e6f050e962dda7c56c23e7139997dc7fb65f6773516124317cfb4b1fcdf5d461a9b4dfadc2b0525bdf28c4bcdc149aadf15b6f6c3746baaa6734aae1e59055e7fe0112c46ee023c126ef98c14c486fd48293000a6b7c99856b6565d2af57927a6e3fb2d36e57621cc9e22ac9f11ca51cf271e2f5f7ed09eb10f4429b3233d24080d68785c8fb57975167447dd47883acc85bdcd6e27f5404dd4a0ae4770a5f64bc2e597f86b64a5745e8ac85fc4550ad8cbbb855351cc1f75acf845484c67f0caaaff06cb06f82872dcc2b8871695546c7f83c19f7ab97ed0feb7a94634d7b61d3c214f24c0e484d927b892f3ccedaa0007a31cb30141f0d8507b24c1c899b8abecd8cb9647ae4d1fa5d8e21645a26e2bfa95e12e93fa1804389f623b56026aff33a216aff9d9e3cf0da0206f1f783358ced8d972914646dd1db0cc138bc66fafb6f9bad265ebdb6f95aac88ec8c37c1f0ae8402f87bb2fdb863bccfac84a1915dd6c229e0a58b669f45554d5c018bad72540cfa5e5cd1577f8bd0f51aa0209ca1d55d87355a4e756903c5fd493ec7229b47ed27649f0aa5aeba0eda89f72b4450d6366e2d664f0bdffcc441bb2a3347f1efef32112ca50cce574027017309b0f1401387d1afd64e8a981ac1bbaf1745feb5dac36eebeab666cc2c838bfb040a0c7bbd7a281e2b69f1408e2450b4ba434aff758181c421cbfe809b972d78627729effcee3a9b95829d5aea128322656a5b36891554a091721edb540bf1d06c21d104978c100f5dc21450f4355bdf60e2bbc3de26ef6583d44f452186dfec6a308b2258fbb160cc50e0887532e0d4f3d2f20c3c5d58fd3f191826c8b0feb4a4cce0b105e325782855886c34b41ae96662867b6b62994e0d6802e612325610611b571967ee753db9f89562fb61120700bc017732dcba4235e994edc7b4efe9eb4878c246c2a899c9628ed490e1cf140a05eb675b74c1c0fec656a4afddd2258879cb146a07c6739ebafb29bcdd59f9cc68cab5acd1b8afb224d071915606ae81d7d9789a66d8b2812965c947fdb99f8e0b28c8ee9ca6f9972e8bbd37c6936a1e892954a086e540bad7531cf9e8f6ed98168c08e87c9485f5090ef167d68243a6b743114211f50491eb4d8a9a4718ca31b27fdd641a893b16e0e173ea2eda20638bb01849ac11e64e8ddb7bf1c12820a30788af281d8d0341d98dad8875a3e89b2bf7d07c013fce38e78657c7ff2cd6343c2fe6fe2ea8c5bd1c99050854e58597bfa0a0a5b889a4981ed586e4a82fd42d79fceaacf5e369d3d28de53472a9de9f7034f28a79f750b65d517010653602d6e87824fa1945d7cb23f2b4d278f6dbfa653a2df5eb90bbdaca807d13de4b4876ae2afab243d7f8ed364edaab0dd564f2c83ab8acb65ccb4c8dec16b4ba758e56f69ad59a1aa0b280342cbf87da4d61cdbebcfd7783636953cf1da1bca2bdbcbfe6511e7c47a8eece4411cb2e8666bad471496320faae7e39b89a88f43d29baf7a6d63b1e71f7951d8f876667ba28584f0968526dc244f0446feb312134c470465fb1964841968db63d15f8fb1e9c2186ada23228842da9bd1d98060e2e93c6f6396b95c45e8cc0e17544e9b359c9fec0867e6c17e7728fece9296d82d4a0a54e5b8ba25972e114e65f9aa15514b8d747bc846603941a8c18fc27d044cef2f395ee9924ce229d730c24a188a9f66f9561763c89b3322d878a7d1a961dc3919a14191e83ec18c9c49cece10679a8f81e57dc2f3df16ab4678b958827d55b86801305a1267bfc6defdedee1848bd15b5c7118e4eb83e4b516616cfbeb343fd88fd9d9aa7743758fdb1a232968a81a9e36f64fe3f932473b7b5429fa4a02178fadb0bec1dd0b2c397298e2411c982bcb9330acb5d1c63b4b7eaef50eac068ab4c4dedc6fc09dc9729b9f44b20623abe95d6554e1d9076aef07b5f7bd7909414dbbac5a3b88bff3433e797102901143017bde72ef7bbd792efeb3589219d3e4657a6261ae9e3a52b2446c90bc21299a1ad5e32c681eaf13114bee3f12f42c1a01e948184e68d58fca93c1ca652034593c53bbaad329a6de9ed7afd5c772dc8b2bf0a6a8a64f5a529014c04687f7fb276fddb015b8066a82df883d4138fcaae0ea77c3383bbc8f420eafb02da90d43adbc5b08959f1cc3a8dc47e2acedf85fc14766e8f197153e084b4ddba654cad7922ab50c5111d379f89cfde43e6fd0c3d548a55dfb41c32d4c4fd487da0f967e7fc2d304729593531927908c1e45ea9ec5f81c6a7dc12f25b5232efdf062d9ff1c8b9d381fb4c41ab485ea2275f7b0b8385cb4579fa0c0edebce418511d5fb23108dfcef81f5ce9670bff1ee6a0e88d9d77e536b8b65dd4f9758f76665f164b204d0d673c0e01a8ff6db8f372611dcc84a65e2ef6698f01161ca36ea133d7d749f5d150a03fd0ecdede4ab47d188134e38194a2b5bc160fcf02be8574442ac308a3b9ffd72d51317fedf2c6492fb95334aa371678f6995d8ed83f4f61f865ab06c725e9437ef9237d1d6fcd791f3ca3f270a41eb2d17f76dffda420fcd93f0baee0b381677d3f1f30dd002e8f7f81a397756a1fe5b54ee82cf39baea75f1d417b80d17cd5d0a9a145ad626deec90edebe48f78ea41a7e2e104a744ce4026708f7180e2ff0e1bf36262ef50039745ab1b14beb0f509983b50472dc80556bc2be9c16c81f5b58e66a4ca23689d219ebc92afeb3068d8af619840d22ed5de3b6cef52dadbf778ec59a43d7a56f5b12388185e1ce08bd975bc81969e5e8700299d67c9d1da4c7fbc362861fd0253705d7875c95ba8a53171b4d2f2994062e610251ad15a653ef38664f9deb355fe86d3f27097af70000b2cb255fbccbdb0b5776cd0107c6413fcd34bdf5da535401a0d5fd2702120e28d2c1cd05a3ebbb798e7da502e3fc014c12953a186d98b5f54942863feb7a094dffb5c0cb6f723c1b5e7d764d4ab5f896b13e409005940a45defb3ebe67bd85e2a21d8d1b800de1434ffcbd2aac92aba211666dd742d3a575da66a32d375b1879624fae60860d3f83eb71e6357a009ee0cbc41e6895b63c07b42b4ff6bac11594a8e29154d1fe9b7fb9838df8438e56f548cddece8eda227e04af81c5628e21a6fe6cc242f460a989229810ed89aa483200ea3b738eaded3b446a04f3df10a132cb54ddc58dc1de22bf262b8fccd307398cbf90e225b010d1ebf1361c810738caa8213056de909def07c41a497d96f87e64a48ba4e47f21d463cb91a9e8c03cc10d586671976b8d4074e879b52c74b062f13f98463b6994b5545fa41686da41d87360ec90289110b98f19d65d59eab3a9eaf72310ab1dedf73623ea0cdbb3dc5372e13f5d02dfccdccebe9cac766766958a51d8cea3ea920c71cedfd767fb50d4744fdb12c676160cac6d592d02896dc887d615cac68e2577afa6f210ac1f63de00134c6be41280dbb09c88499ebf2db54c0a568f73471ccb3852cd43287e79d29ec20fc2dc23a1cc73d2a69cab772ade4f5537974ac3ec79b438ddd96db70754b8d2a1a21f27dd515e962090b94fe9c61a4d257cad732905abef806ddc4790c6d6cb8ea44dada80ce95da2c028b7eeef3568acaa2bd336e177ed615b04beaabb81234323b81396419caf99a5aa3daecc191e39aa4672aabfb0990d3b676ab9a540604bbb1f083ca1f0e271ab9e5fadef4e0458e77dc008d2de98c08984fa52168d0924d4c2d9efa08eccc76c857c70cb3c81870c4249b5dd5a6347cfddebe881cf944b0b442743cfbe950742e0327bd27d3c4063248e5621dc6eff68e2adf16990884ab9236ecd8208f1cdd93f1033b7888b1196a4fc5e62bd32440f33bf1140785b9078e12ed15a0659678a12844cccd6f47701341222f27553d20d319daca8ef84a8c4fdd613da3f3270ffeb0d0b94e11efd5d627e6863ad2a15fd6cd848054eaa1027e9f2f9650c237685291914a25f50f0e5b08f8338cd4b8c5a55ed57e84e32531c2613f69d0592f4d46d36ec677a411e449ec407e44e2ea19e8d4b70b44693ee1c42a79fd4b407584817f4e776fa45b1f49dba6af8a859f2546371171bc0654d92c02c59ce80073d5ac9d1ba3327f578702de120d88433faf6890caf61641cfe2a1f10b8ccf20900a6f33bc93ebbc6be31dfc6ce163a73280f6e6cce377a218c4cb003316292833e9714b198fc0e401fd413e9c734636e0609742fe8009b29547533625821ea1c63c5bec1aded97e809b17aa8a0b577ab216f3ab4814f4f8af32e19cc918d512b0c9d41fa7ca5f125086464b1ff1befa0e6cb32992e960fdce4f1c3807207703595985eba8997a29d9867726416ca43e5d287fc4c44574475b64ad14c8e12bfc29b316580594514a82635245d9c631cf0813fe85c7715860bc3a3b38f2a41a8688a12e6ea6030dfdb5e47eafd0458c3475f5d97381b535d05b996faa6fb16b28dee97536732ed5cadad2a46c0c32def50e96b897db58331d9f49f1742550476b935495b7555cd23a57f56b8577d54e9b3abd41f7bda479d1ef11689efec9d6d60faa33f932d72cd495157c01f87505ad60341f9d10df3073b5ba7d2ee1633ff1bab3fa05f4e50a20fcfa7ee8765b2ab3eac1f891ba527f8c580dd72eb567ab44fd368fe281cf94a7f56b1a42dbd0e6353f2d75d9a5458fa340cf1fa5641d41583efd9d98c3ddf4f0e632f8180e1a61bcc73f3d7fb7ff8740d5cbfc9cd5cd2ab4e6ceca30a0564f843815bf71f781c2cfeac1f98bdaca90ec7ec8171af0bf8de05e72beb10284d0e954dd18567e4f32f710795003f5ecd22da68d17279d3b93650db12223d0ad9ca9a052aace8bcad8bba131ebf1f0ae748eb2e3a5cbc48864ca5a529e8ff21ade4c863b1ee1063cdda305af715cb3589f940b92690f4def2797af1fd9fc4f13bc586d611b97d7eb6837a4bc8b4d25327ac919620afa20b8055573de7c72d1df5e57bd8d4af9e620a200e71fe1cb30842eb4441b3195262b258b0d582ef95fc8edd0dd85520e1b22b28534a21adebb95e2ddf58485e7458fb0c1e755989ae114914c3711dddf5f3bc14ef40bde8eafaebfcd9266aff8662ecd7f689d625c400c715232fb907298b1f7e49023d7e4f217ed0b858956d0724ea54ef8f7334862f8b66a360a15d1b0cd7bce6eb2abe76d18931f34b523784f385fb5ff2cb3643020871cab0514048dd77694f88002a008f9d99209b2bdf7e734243de5058bba92cb0df1fab5341119170fbf95548515ac01e8eb6a47ce5520891c6c134763527143707089e21e023ad46fd6acf7db503f79e8b2c13efb9ae4816ecdefbde232b3ced722c1537adfda58bd61a732ad59aaa90170755deecf1a6243e5e22eb16442b56a8d0ad2efaee0e922e9edcba336d6d959abee6d4ffcaa75c23e556178f00440533bcd25257934d0c6f5e68a64f1aa511bee9435c5277b02145fae1fdedce3b6b7b47015c547be55d00dfa3999920d586dbecf7ff95a775160d057308b32c661c17e5d6a772166bf69b9919ee91fe93877a50711939c85a9cf1ab65c28fa94879623faece20e1458b8821383fda22537622aa4b43af68d5489c4356b5d3a3771612bb163af16b066e6efe8ae7c22a99e56d60e30966e7898b5563a24d1fc9667481ce996854122321a8978e70fa85db57a2fad4d500f2cbe7b582f502d4799b07380094e0d9852047dd62cf85e3b29c3f7bfead310de920d04537bb7182428960bde7b53ef22282437606aa810e3f512f50e2b897de592cf78cf86213b992b5f38bfa66dd2e78dd96faf9bbecea8a9e89ba2d938402b154aff52b8563db18a5421aaf2645ef0676c4d4928033f932d8e11055da801b801c8bf66791dc8712dbdef27c7ff3c44a025fab8773f0cab694c80bf1da16795408fe392314081e3fde2c9be8d0714eb1e4c9e84f239dcf94569105683eb1ac9b8e7915f4885120ee00ad8f8ac458deecb29603300bb5883aa2fe854f64dc35c531af15326b523fabf7f445c8c7e50548d04694f088b28537ee43141dd910a57f76f2df833985bb083873473967d05254e24e1607472f371abd112a3a27d96c18e2d6ad6d8f56337126bd0c33009536af5d2efecab3861e3173eb404acda10a2ff9dd3737b95e297567342d6c3e9e22a6a56bb7d15a51bb3ac723eeb636f1f0232078d59864181d936e6af34b8e65b6d95f86e9a1a81c9e950b7d9e12f066cea0fb3c3105fbfe804990e426375c8663b5e0030cc2293138bed53ad6d78659e617ee89b1e70d7be20693120ed6457aa9dadb5289995a49fa36a8fe117a6555e7067ef3d0d1f53ac368d98745aec5ad09a6a607f8cdb7c1838afb39e67219e541eb210d265d6fa594ced8b6430749b7f3b7d495c2a5ce32453a4070be652082773479382acfc936e6d715118f966e06087ceb8e8fd81a16bfb31d3511b9f5b80770ec0746cf8e7929e0134b93c29f21b8645f54b8cb07d96383e5e978e715e0633f0dfd12c34be6ee9857a6f8225995740cb47ac5f52414d12b3f106c831da62aed337c07517dfa955e56c6152c29cbcbe46f833ffd0b3379278d4c65045983bf0a1116ace0914ecea0952b83468c5f307a04e0af3909cfdbf754ffeae175d3a0240b5f7bf7223dfb1d9749bb07fdaa423bf9256c3fcc347a293aad66b0df407eb9a6b8ed0bbd529b13e19334f6fa4771b8d0b42f87bf2bc41b82c770e912449b3957b578a4af273f31e8ba898a0eb12f6f003f31974ef04a6cd1e091f0ab4a8631b2c7b748842647d631021147b7720bcd2c094ae5183c8d9bbc8b327e06dce0213c82217dd8ca559f3f1c649660f47751a8b4b3f7976b0e068729ead7a176098649573f9b29add8fb876c0c1ca7d2f2ab0ac4055549063c5be64f239427a092ef8dc97a46d32b52598e63704108781e37c6b9d774a998a90a4e5d6539f5d6fcab6e4b6a0781dd5257d8b52989ef6e5a66510872ec358cc47013f7284f9893a7786f7f6733923e4964eab3a07de91027d56e228012796d2f4bfb8ef53b9c7133a505b82a71a0b8b81f38f17d93622816f342aa878de1b439ec599754945dda21dfc5980c4819f71ed537f1094106f0984e8312f1b50afc84efb2a2bec06938e2773391950d8a53fe258c24dc2d34243c55a3ce473e61a090b49b23ac764b37f609b4374d586e69c69e9a2f7eae761d7397296ef070623addd977bca5fc8031fd15dbfbadaf32a3188ee653695b4946ce91986795f19945dcccdcb023e984d1381a2f412e88739a5495054314aa2a5aadb3553aa048833c0e1d3eb0aeb3e570678502ba586aadaa1b4f5b71191195a3b19af46a97dbac97f2391230bee20ea9ebf50ac9a3cc4d7cdd0c6d6fdf2817dc4ab70a79f52161d419bf0ba2dd0a8cd835d8bbf1a923df6d0a5abf81ef642d4f0975fbeb30c06f9af4fd6fa97183cca5e5ae8ac4d117d00533b8d679c24c42864e763d20e32f02370492c29724e46a7d7bf4eba5a40ecbcfd9b52699e056f40cba3662cd74c3e642d91db90e5fa2d2d9593a7326aa7f3f477cce4474c1face6cbd14f1537e357848e2dca7719a5592441deda5ca4cff86e68d62949cffde1e00c7b06d3567ea34b3a27e02535d6325482a9cf80313f65f379c20bb64f2478f737a872ae5ba58a81da8707e46216208401fb6ee6387fa04b529771d8f31ed7f3f4617df06ee074ed155326fac8ec8b7e66dc9fd6e218133e9a5d42f5e471689ceaad0edfb9b8c958949524b08ee0db0858544a9757912494f91c68564aa891bac2940ec561b4f18aff54eb4edd7a78eb7f6c5772be723d1419ddca434c48bc14241e63e8915d554bfd99621cdc43caef842baeaf3f44c5889fa7500312db5073b654f6916f395b63366b7162b4c23adb0f9a3796048e24b63683e2e0c5e9b59f233daf0723d26c9953d200678c7f2e79c7bfdb6e32d8c166847868208df8526011e17694d6b0f1b6fcd6f7748d030f8f55a48081f4ab0662318eca0c9192917e2949347eb0595083d8803ed1ded546e660510f15708d5a71e6cdf0ecfa3ed9c0127ccf0ed857f3c590d7bec6a97e394691cc7173ce09255a4b3ec308ef8593ef7482318c77324047cbe35d9b13845276901f8ce337a4d0e607e829a799ed25d3f9644040b470a1d032ad04974671f84004524aacd3e8c1ddc3d40b132000f8344729e671b89b7d276d3c9c036acc926a966b9218c95c610726085292ab4674da06d90a69aa3a3b1523990b27a61e8abded744b6d4288182bd98ee46d6246018ddf7d946eb3d64562fcca3b4b23ee4701b2745ff465f54f13836eabec6e880814791c6bc9fbf602d6a2d912b709c431fe8c74b5f55b2a6c85cdae8e56f794ef387ebe79c2a922da38bacd7ab27f28b07b247b35b84bafd94a5e5874f524f320c1936ba5a0e6e33552efaf5a86ada32c422191c7845e0dfc2ae073470f1e2c0177622cd7add9bf7beae6869979bcbc0d192cbe53a3bbcb3fecf808eeed0dc7fc219308f72fab4014c94a5a21d4d4fcbbc9ed0bc15b8c71095a501e51d7184c7889ce08ee6f83ee69b7c134d9df1cea9f1a0b7ff9f5f688c13a90bd58146744dd75ba33a2b58a50e07cf31ba9e1bd0e1fd32f23e4b82397d15560edebee233792aeff91fc49e7eee2df8a177924dff0a4be00fd68ee3b26a07366b7f2ab74ab01fc462ae472c350d8a92b3031eea81997a127186edd65bd965c4d225594812a91263707437946ff28a2806fba8843105e454b79dfcfcae51bd7bb37fcf1733baaf6792fffa697823c9231dbfa3ad65d6372152aa10a922597ad59fdcf0a7167b432b5aa0241df617a41e67cda4b8a890cef2c329ed7e40672a6ce7cb726a43417a39281329245254c77465b4205861bc3863a99bc7de80f148ac2bc9a8f342c3c11b9bb79e1f25519fbf97f1baef39beffde467e546c8c8e621dfc6628b48d78944d160be750e794896a8f14b8ff891f71dd4a50078a9b94e33caa1f56308bc67038379e997c0194310fbb7bcf0be8645aeb25bf55cb66bb5872e553d5f9d633f17770ce18f30be713199db54196c024078258fac3a146584e6b1eb20c62f547749542490a587ef3ac02b64fd512b8b5042d64b0c5aee2f2118fb6a88e2e518795fc2c6dd21ed350687585b9ee123abddd66d96ff036a52f6e5b5da5cf9e836ab216bfcb04a89173d4cc9c71f117be94ffa91796d7eb05569158743845460367759f4cdf169841d47d825b067295ccd0f77eafa3c14e9c0e46f18aee73b74a144cd084288c605cf8df3151f6071ede083152124550a3d1ccebc11226ff54cfd79464d615ea935b67564411af13157a9149bdefca0abd3ef8fc419a803cc11d5808c6b34595a3c5968f550ac02b0c1b12ad3c88c053ed4c48f4fd9478b06ebaec0670bc362204140cf6cebda7c37547e2e8388db6d0a67203525f907f0ec0112a19fd51462456cf41092b9ae450e379a8674c6f1be58b58deb0d20f018c67c888bfb70323f0fe6fc952f632f467d938d9c6e29d7e270e69219d1f60becdc8399e6458522e3c7d7e0c40b906567cc90ddd7395994bf9a21b82537255f54753fcb1a43bbed34b4672907ede959914255149e9cff303f1e8e85780852f439dbd8a98fbebb9c1c20bc5ec59f1512aa280bb95b60c3b4494356837a0b27d3815475b8ae7d2c378251010765e7bd989bc6d955754d4c27c453a13a930a4c0316293e82dd4ab7c44d905cad518e89f44d64e86f542b43919a9496312ccb698cdea25c8e85eb044d6725f5d7f05c202da74a608f60c24ffab24f5ef0ab182577c306f7640f29bad9b758f50daa182b4b90c0683e01da196bf4cb20ff7ab728cbac9f368de1cc8171257184d7e78c5157f20d28029f3a48eb485205e7ff701b9080b34290659c031c99b7c9be0f7e3b58b47ac966a2ab8583962a352fa40da6cf298b43f50261e5e2fb73ed498ab79156be4f73ef72f5783ac69cd75fd054708f8e6f60451fe2d2cb33ee1701c1fffa5af8d44d2777e0c818c0f014ffea0f22d897a6c10726e870e02a6d706c1a1d1e6a4a50809519341e256c6e13985c0463b22c7a8fc37e3b6728c63b2014fedba6919c0d33c1c1b8216ab35efdb18dfcdc263531f2018fa360abf09f4e81d6ff3ad4d6518f34d5357aee7b07f9d3e5be353b9a14114ac1e8037291e023390852813de065bc75bf73d0b9aeb23085cc1415fa436b15257cd1f7848f47c6c6fe9c24d3a291e10ce53accd432a7c94faac42469197e251b2827e5ead41c5fb01ea5ca9e041c2782b1521646f12eedb9e7970b9302946ab32db274aa46a7187dd2341ca7ef50b55e89825517d18fc44ceb55727de7f70c75f33a4dcecf2f17b78113c2f54973b428d7933150bc11758f1fc60031b1ed32e9e387175d56fe84e592086390fcce4b69024e54f899fd290be9b15eb646bf049863607b60c25a88906fdca781eea9a3a772786317509b0746b2e0341490b5ab09dc8f21defd8c4b3f7f5738cf094ce36d8fdc09b6c83338cae319295376164fc4b7dab0dfeedbf47a2a40bb8233fe3440c141ecdbeb0de31fe225e57cdf2c17525a0ad16c7d91abcad861dba35608beaa706eb491a07131cb19cc1197b53d2c3a2fe72b8b92f59ab5f1803e3959b2a832042c0addcfa64a58eed555aadf92b6049c386747154ee6c5dd668c4c24441b61e54396c960f5554ecb0a58bf4573dc390bc72ca5eee5ba8205db6ee59f063ebd7b7bff5c3ca67a331731c3ddcf27c660e35a23af06023c73cfa68b0ab2403ad02f9ced9e4901e3913a133d0d65f89d018cbaf36c43ec9420a4918dc645393622676d0a98704db5ef9c786f56ef2c89a46eaf45e48eedeb11ed62191e403a5b398cb7fb519ad41bd6a52800c0550cb1d2f100c120d04b69cf10e2da1c8b8bd09f07426bd1addc3bcdbdea99537fe03e127d770e27ef4f35e177d975c70e74bedc3ed6002193ae3d5c4c87e21855f057ed7adad501d54178cf880f9527b23d4d769b3b624832924a0bbac88216c08325ea50f2bdb768695922ad4be0455d2da4f785383a4e74cf8a636f722255a6e3d09167876f50920e01614d57fe28f88dece76497303c3faf24ebd35069def1567f6a276192d4397a9714cff998d86ca54ccc9f1eeb197d78402b4e2900b887255afef947cf4c47f344c39dfa565e9fbded30a09614ed157308ac49c48eeb52988ad44302cebfa3c230f71e21dfc17b1df79acec652c1efe8a2f52aeabc8038f637746e5b3635352f8237ba38dc09e70d919391784e9cf31f368f5b63327e23898867e317b0b6e581630cd905f43fcad4e3a25172b086095fed0042f797edfa97a6340901e34b9b02fafde352d06a0ebb164f767d1f8719f2eed2496e94d6a569b96347e078fb3ff8709240e517929a0a5222686143a80b1e628cd78fd0400b47e87d077b16cfb9acec53598672bf5609bea490e6c5f0c72c71b75323f43316785b09b09b66cdf16697c994ff89fa2aff835c54d44d68356442da27f2a7b7ad463b8faa080fffd06e987b5a17034afe36c8d21df282163e0dfe7dbac492d5b8f7b0975c8aba6d3c0b18f1149589b8baf4b68f54090d04c870cc2974615c9420d4e1aa30e90f1e1e863fb42842c24b4682751a5fe1953abcd6d564bd91aefdcb25f74f8decb51a5f27344b00e6570b8a282cfba842c3be038541b9fd1b3016a232190fdb5d5569e536203e0249ef006f2d04bb95f43f9a83c637ad9cc889e98d427071830296149afb2a1698323333dbdb24e190beb0d626e0dfca0260627e759f24fdeba3212165be7b5a296acaabb778b4f5006abf78d31d629798ab62db408f5c3b7c0a9d9b2dc63a921cba5e70ec4dde804dbe138a72c3e89cc470320ad85b40b49efeb387dc5c9047dbe8948b61a2c809de835513ea1b9862ef797913234bf9efba460bef59c8a5ffcdbc1603fdbf9a181d802c1c256d9b70828ce0fc0ba6af7436ab4cda8c52a0455a008ce0aaeb7d35717f41ac0a01194ee3720fcf77b689cc7cf51f515d42aa9eea7a9d2b4f6f99e942463bcb811e39857cf3ad944ec1b07ef2ec2b5bb4dfea94e5f3f2ebd39315bbf99fc381720d239cb4d662517a104c1202571900797289aeb4343328209f1934fc5081d7c517001bf2e5d810e2eb8411130090489443ae75bd0207ea1ddbcfdab4211cd46282f88ba0e6b4d86e9980028cad393ced9a826f6928163ab28f5d3889dc3d813296327325a2a1b20664696dd727bce36dbf2d26206c091fc702ebd3e4478be41b9dd75be9e145a4929267da5b36c046faf9d6224b9888a2447da2352b2caf0806dd0ecb546a48b9fa6ca1d280a1ed6b7d92a5e950723aca1148a9e5c85150f2dc9f004cce0753f6263a40dcae32ec5cdfd0c30599c3c89f17ab296b217e17ac832bd465bf7e0e65ff446b814daf652106fc58fe8c52d9293cee4a50a07dab3de5c9b39f8f98200d6bd14b48c5e1ffc0dc5d8b5a93e916716958331bab15b6ade9c1c581a61d32f6532b08b97f906343483d85a3154e277e87320d54ac0ddd04765a31936cd5eb29a098c95ce18439b131e26e607a4ab3587cc4ff830a2eca4b76de205d4a88f4ad3861b6ba5484281381956d1a29a56208325632312d40258ad093b968a6fdf48a05cef85a415ad8701f9eaa588c27de958f30cee57d0b95c76cc2253be9fd94c9ee26b7c40eccf2d0f3454ea20a98cc077d9afa286256c30c32b28b5e7c507c71dab31a8125a31e3ce5d281800bbfd767e3dbde8144eb57600aad145ac5be538ab3bb4a18eca603badd8c6a7bf765a5bca83ca3788b90f8ccdcf9e8b62e0fc11d60876f11cd9f4a55c3bd321a3752de0eb60571959f0e4e5690df2efa1e0a7030c95fb0f52e549a127fab00e6314e2b65f47e6f61e82c02090ea70faffd7805ced68a354b798f9cfbf99efd664e2134ca4aeec663cfb4bcea3e99b25c32212bfc6f52279b1516f8171ae05122f692a044a09f9d23ba6c230308fd408927cd88c47cfdae6e6ab1556ec8b823a2926b17dcded71d2a121ee05b551ae0be4344c42de5d4f14ae02a5b09ec6d9b6f88724399eddf6eff40909bfa0b39bb84ee4d883f921f19badf48b3ef6f48e3104270c983b3ffb72baa8bfbe914a2f86290b27c036b264d43cfd205283791200d262c54a2197e2134bad6a82f569dc0e1913947805930b66f1891f8bd2e907def9e708aff07a6d3a4d73b4bd4bb723b875aab91bf42877bc5224d35b53b8c203c110213a166bdf50268808ce12a6890df51cf04c61071c6cd56cd641845cf317fe7ab98901c0cb1d7d76e125d8ac8e86edf6f469fa937bc101adb2cef369fd93d8733c1d513db2daa8bcd8650c5da6abe6c51ff52f7218715d73d3541f5453f005b62357731729103ec658fc2c2e63f56613ed8e5e0764f64f6bc28166a098d4fca009d7e6018066a62fdd6bc69348ebe24fe78624e803b86dd20ad767d32e8b33cd4a0f38716b468555f0245a20c807f1f5989d028857402f6316b6a160a7ab319a7e7dd8eb4c2842d51bc6655b53d20b917b03856ce2260a8b70bf91dd76bd7ca4119445c3a5847529cac266a78ec2959ff97a1bfa36b295a79342c7ae2e3a7b56adf30dbf0a0382d08798dc99db52269dbe6134d4b7ae476408f0a157309ac43eae1aaf21ebfdf245ccca35b6cc19450714597e710751963d4c49bd6d1056ddc88c6b9890be0c4a0624c71062c380776895a337538855189fd7ae7a6460072e90d3766890029700ae0a2feb327420143edd0f1e00cd112508359f76b182244d042dbb8d845c26ac89f75524ba3050c1f644dd90ed482e7202d0bd20f90926afbec5bb75f22d43a44676e76b4e9acaf72b579f2e8d8bf5561c4358078f6796cd0d65e6b06df8769e4ff3571d8415d73a4a9fe44565fb1e67b11820a9092fed3b9c78dddb6c3027e1231714b9df240de1d0881d741b37f21d6d997773dab4a261d86901455176e0135c3ca0ded467f7a459aadb48f1a528edae71fcf698b84ed64dc0e18cc23f27ab47eeabeaf833fcf852627e22add52b6f002c01afb78d5b1f591aff2042fb772f92a7666cbf2ab6343769a69f844a6207ef12261dbbb65f83a6d1ca9e483e5716b8f190d28dbe8c1e850ac52e3967754ee7deeacf19c5b4d9a38fd455367a3fd727479bcb086216edd7d05a4d21decdba66ecc012562df357db9f9cf3b2219a076a33e7b4a3a7cf389c54e67ac1f2e3c108c636a5f571b3a4bb9b94e83fd70e1dfe21150de4121d953ef2fa35be564ff929e5cee87c134e36d00e5ca1340d04816fa9a4555e139a8a5c54f61c6b7b7ad966e5e9585e955b84956244bd333605e81b380619563ece6e60d57a9d5dc4fcd83c212684117a44248831edaab1d49aa89d46bac870f611d7d90ee81709e53e7c163206ea3934908d24e7c7e8348b2b59627052f132cc1d4d416bdf37f43ec84b8192fb094a46d935080e64043fac4051172f3f12204339452676c06ea14412bd0abe734fa93386928e10326d37ca724607ee0fa9adde0e45f4aa2c299597b6471e3f204bfa9d114c4397c3b1b16829aed1372536500f04c63880730755ac1b70387f528c92b611c8a50f884030f7ded1ff8510369b58a54c6e94457645e3cadee609ba602640f07e4ee200b74b1c2a75df726129043d685f13501404faf13cd9a368988509b045f39da9cd75442764f11d69989c0f4fd664a34e5f11f936f9f6fd16ad69d1767abf1dd13f08d0bc46ea25e516fe30e27803aae9974ba5378acd6f8e496d021617474bf2e5f0554d28b7857f7cce0da7b592a6ac5d10a37557b35759fd2d1011a412948942ba665c82efb8932a99fa0227b8031100ef6862f95f50e449188ffb99a7a3fed5c5685cfe093bcab0d08a8446ea6cb2235658a2d807f8c7bdcdd636707ce6ee3fbfffd0f27a8b70a00033907b80200a44d418978c63ab6ebbab8744b118e9b1c0e8816af8ea243f68a789c96e3fe983e5f71cc37ee8d563d33017b8e3f208f40a0d915d79ae92817b44f1a1777005a9772dd9b9381e232194fa0c0571aed12f8b6da45b1d5e52e168570f9b3fa720f588e6d3eb406a01425177d8bcf295decec5a73ed62c6fe1c9b06c38191f6bb7f28bb09fcc1052ec20c9280241df4d9e4c3938c5415f59dbc4d3d31fcdaf24372b002991ee307f60474c892d26b03c7c3256a0dc3f0eb28d4d534a0b0b57772b0986a05ec41935fa406c299dfdedf9051bce5de821b2f092ddaf3f9e64b0cb00087fc35ae0431d16869877e91a00f9d562d0fe7d9bf49a68f058025e6c339652c25bf11ac5369b41a451f2a31d91b559a23ed111004c269c2fee50bf84686f9fa1bbb822e57c4718044938406b08c1fe44489426e1121b98d6c2a9264fc7cd43311f86e7b37c96e630cea735a4ee865fe38ea633c0feefdb9f855a4710ca25e9fae7fbfdc1c01148a452ce173dbba8eaea8185dc325b29f0e497028699f8000059b575b992ef2cbbf9862b59a7e8702bd3c1c16487cf3065408820592dc9f202e80882cfa9426fcc8ac93d7175f +Output = 0004a32724fa38c7a1e8dd3159037fb1 + +Len = 114912 +Msg = 698d6ca08193aa302cc1dbaebe24a5b8af67d869fca4f6ceca7af39e4c603925e838ef8295287b1288a5452c0fd0be0fbd06a218c7b27a39ae6664a61e2b16d1171521994a1a73bec6232099d364620a1ee9deb11772286198818ad1c7b101953d49894d68119a1d2d65f35dd28796911c3a149bb48c0a2fcff3ec880e9b0159a3ffaf07b6b7f915079046e0d4e2648cfd1ecc3e66a7288b9de31231bd911f05925d1c2dfdb1978f9acfa289a11dd3e30abf8f02f56b885e487985369a3a6282508b572905aa7d7430488dc200dfeb7e8b45e44f2882348e19dfccfd6e3fd2b625b2e8619648b1aa0f2391f3bbd0b545c8d8548dc8913405583a6ff00047778a5bfa583f78333d1b7f89368298993821089e66249d438ea94db5f7751afb5ae6398a2e29721428adcaa203d860e27df895c2a27c6f3d4c644075ebf6820382b3068bf2894e937b4a3795805dda528ab4b56a90fd062a761d78a5d3da0106f7d70b242dc6d2573dd90d8b3579d092693bb1bfb9102ab012bc3e6b38895fadc23c907e6648c709764295abab95084a2277d1e8a41ba2772a28daefa06b649feac8dcc02577f4502f6d171e69174c21bb4e5c0dd9883728c54b945a96e8d88477653913f2bb23d56f42da0bf76962bf3eaa9c58e1bdb16bec0cb3d49f68820672faed9f567c1a403ea9289bdef112cdb272d7ef4324d8e7a653818445532bcbe26f418bd822a238a48a47f5a51926f3208e56fa87237345fb0844930f119b7bcfac7d0001158365aacd8043d44864d88fe561a236244c2cf3144529850a9abf4198e92557bd8570575a1baaf4e5962507613f0ed78e2945975dcc6c30a6f03f411dcd2364837001b41960548c5a828191e93a68f2c9d338eecc2187974e64a2d6227021b0cd0bbfc7f29769240ef195336698d50f3d12ac00498ba04368c09009901b48c1041f539ace07104469aa09f7bea27fb752ad4ad6bd53e0ba5ecab3e14d16c0219174643593f97275d37784e5daa08e71706eb9770ec26e86964bb06642a9b058dad29b9e2bb5b73eb41eae04a2da2ac6ff1ba1eb261e732e7a0a32a0571c40ec4901a0df7c8306287468305cfe97793d677dac3bebaf163b70d1df9875b69a6745c81a0070ab87ba7b1db2f5d721a65e105c806e47bf8034e2665f5582c0e35135f1b207ee74647c3205dbd813bed7b16280c58c2194d8a137925bdf6782463083420ffedd28c2f6ffe7540c9cb735bfc6b0249e6077470bd71d7b3f0d44e98e9684daec270dccb14b8dc4995854e70fa2b644abeeb0f5f92acf667c5b4ef4f2d67ebadab36ba7347fbdd48831dc15295f58cfbbb28709f39870c59e38e790e5abfa58cf698c7e0701402ce00e99e996665f6ad79444ab8189c73fae8e59e5ee7dbe5bd331b777b33bde73a9d6d189dd1e92bf057c2e052c659d7db244ea1a95b4946ceef333babf935e52eb73cd1d86eebb764f528e3c7b94ba26b542e35762b8423329974970b3738a70afccd5ce1a40a037bdfeac7bf77ee6e3bc708cc6def290578b0541c118422876fcc930c3207b0ba95669d0e8268be95cd1b62c8c90c848811d2663d47468010bdb5228262006c274227942ab92248a38fbfc0cd400a33058e6e0f6d2524dddd8534f031ca24b8d41291749edc3af9220432a75c4b7ec1285ee1c44e2375984846ca80acf2fb136b8742c2fd64096cabbaf28ad843c09b4af3dc3932dadf4bdb82e4685674ea083800a9e3a8d913ff7b24adefc3d1764de7fdcbb2cdb3b86511ca20fbc0b88803e42f357b33b3e14e4ac1934ac17d1635a9cd2ee57136a770957cfecf6e464ba2da5383de207cf7b585226130439f170efb027425cfdc02fab12bec57d1a6ab41952e03a0e1acdde1a4c78614bccfff26460e3a182c2c716fff4758397d422d7c9f0f335809bc0a4f3411708caf7845182560ff2128a0794cfa6fe0c8d3a158b07287a1581b32e35abd90ceec9e307f4113ab31d547c0712e1cf614aa776ca3999a27bc4578aa1f90abd5efd8fb71045d9b3d50990c14ff6fe18a4242cadc947480501294a47a058d895151b669c27aba16a7fa00e8067aaee29d181660a9b1fdcf9112ca413b4badc083a3294bad58e3307b8c915e2d89479a9ef4b9bb2c7271d28b5b5ab156387dfbfd3296238a1565531896cef0f281e6741076914d0d5c9d337f4aca9763827a962ebe8183f146cd090f872e22ee2af7f9820c3198a4e6cc5d1d7f9e45db80202988757fef6b4366bcd10c137688bae8a574241f108b977bc9c6485a5f36d80b209b15e5c860c1df090d64236e4ad85512575cbe6739e548040a536335fde0a805e70e57916a18a258054dd26cbcf9b99abc2493ef3856ad966a2f5d8ca9306353fcdd49ecffde3d446917b51447a582d9030a342aff7218fb662abda5c15de9953ce1313d9a791c38a9502fd783524d47dc8c13ad07be169d7ed3e823cebf874437e8a205b27fdbbf3695c738e8867551a918b6e7d9a1230724b9818939dbe8eb6e2220d7d068e8329146ffbaffb89790e93ea25dfdb1cac2e859fe488b496af5504c12169cbabe5d59e25dc0317f20802d6c4a91ec668a5b4a13d2d44b7ea9ec8eb50a544febea79f106460b1630bca9d63034061e35ce3abaa593def2e2124b69fb8e139272e922e7116cde2683a8688418d33d0bb612dbca5da5ab0a1a309c829df1d6dcf636e2bc9226cbdace8066a784cca95d5e04d8f9caacdaf99d815a590afa10b7dc5033d2070856bb97e10ec11264cd5b93f09cb96b0de159e280ff5dc0fb439babc180d7fe8601317626db6130503bbf0e82a189cd4d40a36fbc16215e6a01f0db07742ed7244de4cfee56f86d0356c01417820b5fef9b5ebb9f192441eabe7fe09e68573f67bf4e2b93fbf726f2b1374b4ba88e916933f44ca682d719e1eb6152f2e7e185c4b7c61fa4550e0c92dd6d2a7bafb4004ebcfc996eedca24e41b7db8a17d4e48cfd9e4f2bbdc7d7c882dda2843e1fc3b0498e03864b47e1165b0fd7826830df6ed88436b370cf605374516cb20f9c7903f4a47900461535deb6e99280eb3912eb26539dfa260e8252495ab999f51b6be33638b36da8eea78e986b92ea669884e92d360d68a62c45ae4a1f0fa1b7449f3955723a36397c3d0e4abd612aa2f43d5137530d65bad2b14dbfc9f9321fbe1fee9a7b95c1c1640146140887a667f6460c8ad2255928a8cf18f07ffcb4f332f3e84d7b4c780851fb1f3d748ac87c46a6016edcddacb955a6f7246aa28ffc472111b699e8c2d5e9327f0f28f4f7ab8b65172d99bec635823ed3a5b2722b02a6b3501dfef006f2d4ae50d04d4c9aba6d8c380e304f0f64d6a092b97ef4f1cdf6b08cc9d2ecae25bb7778c90a1b1b7296224b58c918f00efad31ea9f6b14724e021af033c6521374696e14288e8e19bab2f37548ea2cffa95df5dbd443096d00c0da01364e2c7f01c127182ee3b54fd57bce64aa57415f150cd393c8df9479a217c474173eb0817e6f312d3659cdc5f40cf3f8136172bbbd3a49970fc95c047c8778cd591084c764b41ab7b1594e18b0e732a436a117720c56c649fb68b6ba2a8045716e5c2fbd3f40523c325aacb476aad8fd668ec63e8ce2e8412e663af726a2e904d98a07df7884764f3be67025cfc875683592f56da97f1e011b2a6f37eb5fa1fc2d12b3aaab00d55530752ee926b0868926563b8bfc8bd60e342dba18f3272ecbdb9e99bb31461de2b29f3f8b05f38ab4bb30ff05f099aecd2bf8a206d889de086786406dc5b4ae7c24bd28680822008f66cbb688200916c24513cd8e06083e1643524e4eb2ed15861967802c879c767dab7f087f058a9c8221f7731b0622dd8a119af9ea934fc1950326cd251ef36b140bd34b570b7ebe81452c693a435a2ae834b8f9ade16d513d7463660e38a73cc70a6125accc65db54211ae668682ea4953f34c42527b642c3efa5f1246f288a2b2990fdeca2c0915f385b9121cf00e93583b6cfdcc0cb04dcc776e5241d07c1a4ebeb5aa3391f7f171d66eff2f281573dc4979321671c15fcae5eb879dcc581b8b3e8b24ce9f2e32022b559586d107d02545fb4bf6519f48806c5e18228d238fb34119b565fcb6beefacf73deb94ed947c5878af355453f23632506f98bce55d0ceee8c5be50977f8083db5d2419cea629aa7ac69b23e443346249f3c700a76ddf6e7fbda344d95cfcd58a5ffa07b2ee746288f8ef665a25c122cf0c770270a773e96603da7f853cadcd8aa93507a154a5a82badfbc4bd7f279a6c226f6a48f3128626012baaa309d99065a59dc0a4c003a6e94d85e61638acf4a79d78df3739026d461e606d39aac949a2b9f9dbc21ad7814d4056746c3a995508e65a0946618cc74ec13f6f5107c51eca4f13ff044a6964dcee3615c86c36e71863dd917c53f8bcc7549259f208143764ceb1d57038017520c0ec7131b6cad25e7dc81fe2f78e73383e1fd2259500bdf89e9c0411cde7dca01c4231af009f3e639ce55a7e35961529e7af83f196cfd80f279c35ecef62c2e46bfefd4a32fb52ad29faeb5af657c922b709145ef3caaf30d079100b87bc4f7516e97c0b352736c68ad0797e201ab8ac16f72c7494396be303fa3c757e3baada83cb57f9ef6b1336292fadf09d27094e6c3f733c616433b028e86232ba28fc9b1c6c361d490e11836ddf2fba53c6e59121aa93bd43923020a50b294b25cb6c414893bf7d2b5a5737bda7a6e42c3f74fc9d0031ff200d8abae32b3ac7a66b23536e0a9d237e950ed98350bb740fd9dd174809f80be21b68064a103cae24514859f897761728085df226a31574e3dd496a8b8c8de86f05f28d4381d80889c604db4d03f35f13fb6d090e655deb9293df7ecc539b9eb11352d63448b6debc107f62d515bb0525b565a6a3613ae20343c8da7424c8368e8cad6a862b7d37a577e075f897771148806e524c5e55601e352b06ecc8bcb7f0ba2ecfa2f3d61c2c45509d1e4fce8963a2b0937423556dcbb1318b9b072029bee3fa8fee68689439c0f661af0769775e6452f48079e311f2fe02f0e8a89c95e0503c32d451dca7b432fb491385efe2210e7dfad928a7557b65c5bd3d75d7023d491a3ebb77d95d85e186ddb29209d393e8582fe7f848404e2ea37b01347a78bf15bc3d0ba308bf9416c0a6f5f55f519e3a0c1a12b16fdb54a1c3b19bae2cff4dfe4bb62b9b10d4c918d02b42789864294bc043c31ac32d73054ee775ab96a0cf4aef3285279ba50d31dff402e15c141d649d3360fced3e94a46ba5f6f360622e42cf3880114e3846a7158a9ef9556a60cdcb71531f9416a0c44374864d314e502e14508420d3975ec399747c88296ddbce7185024b61be7daefddb8d82b16a1e56e502f91bd2ca3bcd943a0656802676afb7f8d748fb3d15aac263735b89c080016bd748cbf2d7c70d2d65a32a039b1ab7c65138dd0c9b4effba92a19d61585f79ce56d7f8dcc8e8ca8d7cbacd59d6ad2fc6188fd439e012f70cf37d13e038a10435080f6938a5884edb07b5082bdf185fdfd643f32c1548d8e10b7084af6a30ebc87358e8ad748edf408ffba121bc448f3711bc038d42d8eb6064e3b776f6f276b1211b3be33fe2c6e49bf460e2771807f95462cb036da978b2853c75dce2d1ec159abe2b830d6c4beeb3080f17187b0e4b249d1537a0a5c7fef6e5868938b4971f64ab8035e714b5875f9f7467a557ee550bd5a7d1e2b31f6d4044b2260082bdf4094802a0d4c24ed62821597b2893ed4090724a783cbbca27eac3c15b4025a7bf11ff796ddc5e5c0495f684faa81754343cdcc6d4b4a60e537cc87acf02849da60237ac4307d028382f86bd8d2ecb6b58957be38e555a34197ebda62b4d87e6d1665764cb5e00fa9b7c3acedcc19779d525b8694e24c083a279090d162a16cc69c4c969ade8d61a5506787e8e6963c8d374f91fbb2bc04516f51477399f199596a5f48390ad3bcf8d55a9944c2e179e7908a7ce7e7143c09d7846ac3bb7788a7f90407a1cb615626bef36d9bd199b44ef6b2b3e3ffe2f3e5d8c0773c6771bf34d0d1515fa0a4e1b185e85158a31d7025e25eb37a5db6e0581b8bf967fe9eb1827a4db1dd2b1cc42bc2a000f5a7fb31feebc5181580fe65d2f85d6db1014ce4036defa5b4bb4791f7ed90e91d60918e5c6bac4e301a281908f79b40b2100adb5a242da940e1a3bfa87f51661a6d9ec9a0fa7ab27489d25e5cb1ec1ee59b671bd9259e493c3ebfc1aff06824871f71987f0097013d407bca308fc664b613d00a12ea97e1f1130a3c80d92b90edf6985f4926a7a704ee82d13719909ebe09d44a9a0bc11ffa0f0184cd923237b99391a281c5131055d48607d2b7f14977fdf241c0d1a06fc193343ee8c402857476fbe6db747fd9caa303d296136ed15e60a8744a049c3de24010cf64e72306991115b098bd346fbdca7ac5e3944fe2dbc2657677ed3b26d68635bab463fa37a1d29d845bf7d74eb9cb69565db33ada9aa3c7bced2403a708e6018569d32e95296be1d697ccdef349264e086708b64505752dbc1c216c2b13d012b3f7ad06ab9a2d912bde94c209e65b9750920d28ae96c735f8776dfb4f61e4d7cae06a38f77e9819f892f816df1bebd3c361292863d90a4ef6a17227708d94cf3eb6932be5314beac1475f43ff444791e556f52c2146cef73b0cd6873af1506793dca056017cb9821a7e42eff70a0f401ad5e9ba535a75bd3a2bf3810b27a84f4ee51a5de89b518e68aa4b6132e7936cf8708f4976aeaf0f788161ab6dbb1cd4e4428999e727b45e305dc14e5f378486e2b95e50079ddb7c7aaf996cdf062e96d8874690a99c5280160b4d1db8a4531c8e12cf6492b27b72c4f9135bdba35e13b01609e89c83ac726e255745fba87f9c3f1f5b0d84871f90cc1067eee01d0bc9ef911bf82c5822c3bd4e785d84ae6a949a2199a1698628351467ffac98dde8280b6b2545f59465f297e918dae030c48413ec03d6be2a35fe127242fb425053bc88169e5874c2e66d6287c1348ad9ede920b111f40f0db95a6ac1ea71893edf05ea25efb6266e14b2c1ad09f10104774265235cafb88b32b861c95ea5e9d3fa92a61bb1d586f0816129bb4b96df3ad10e45a54c60673d32b6bc1b07eec0ca36c1306a5d4d12e4acd6ff550eac71f78bdb46d9499c779e29c3ce198ed2ca7c04304d846a7356c507a2d6ecdb9875d51807ed120cda8618987e1c575bf84383f35e220c61eecf1c124334f53af1373e0632acf1eea0ff56ff341b56e7a5e85c74a96274dc15e8546d469e00952d429cc6da1afb77666fb3de846f8aba82158018b08320219f4f08791b768182d3249bda6c9b912fb143c9a6fd7d855d0357795ff208c0dad14f92b630531a8c596995d178b35580081802f8edc9b947b02aa2aafc77c9705276adb523b81e0a466e351c7d06ab00e158fa34f3e8a8f30f0bb68a1e349c8aa96093e6741a1e8510ced44be7ea143ac38309fbae3ed6f776770f9df5d3cc723c89ffda9ffd9e954ee80dc057e223862522dcbd6b40c5bd8cf9382711e9dbdf824f3bf215e700b367663c1a3b935b8b8cb4cceab992e7cdc90eaae5d0db4d1b214cf2dd544b0757e0a609ca01622eb370b5651417b9dfa0a123e22ad11c82cd8fef9eecf9adf50b4143d15057c30f8667a12fba1409ffcebbd5689691422f5f24c3aab174946c360fbc3d3d9d5a808cd814a75d2d27daa05fafc8997fd0b5589655a0cb3382df70b27ba7f2408d242f586c466dc177f2de32ff6ca41b4c97424b121b8ad4edb133c00eac0effdf6cf65f34977c8f9ecad0ac60df56e20a4794b9857580d759a407cee1a3f419c5cd6a52ea1509d5f0e51042509b2272be68c8682c393d994b0a6525914a422cd4c803ea1949863302b4257b6b2a873bcd5d75ed72e121b92666c46a99e969a780df5b7b2eaf722568ca88edfd0805abcbb7f5aff607dda5904bbe04681bdb285e85c98cb6a17e3b879aa2e0a2ae2e411deaf0363217b1fd0d2baa99885c271dc25dd6a53de9dad3e3970c19e89741aa4878ddf6939b4f1df18922808714de0650ca2b4b20c3489d01623cf03b5e1035dfd41787a6fd1586e1d6ae5fc0f050509e4d0fe4fbc827e5656ebdea076cfa7248af456ff8c7a5c652a6b69dd2593eaaef792d194b82f94b842ef78df94e70fe274ceff5e595606ac87bc3b147c9e973d8b0eb3e8c7e4d3de22582427d6d0427d04f6fd019b0e5d2c7c87e407dccf129fe96c2fb3b04944b13e4d6be1053248df8295d84e1d4969cb51f1ea200cce65ba59d5ca5e3c05ee17ddf7d373e9b72aee36d216afa6b033724d24d7c6d642987822710e4f33c1daf9497ee6464a05ef9467d6418bfdebc20ab948326000d4b1c08e6782ef5d240e40c8092cc2f0c49fb85fc8e049eba11f79dd848458532bba79e3e0aea681d794d2a3c02c4fa39d434264d17c53387a50a90101541597f0ba8d6a031bdd6981749922cc6e562a37e219bf199c10ac205f806de72aff94cabae36bf950fadbcbb47c8c557a3d4e3c8427b8c7c8e80e3853e8685d8e7e1162c1632ee9d567a05c5e622b82d96ed751315396048943286d35c83c8b09fad85fd7f5fafc338a80de7935457c124f8d20f285a3f76589c0640c072f9a22dbaf6a04811959f1cd42f60edc236bad4a3751cea525c9e6229fc8e08f8ab262895f2b51efd12a9797b04e243f0d7632c69f8cce9c65a194778d3fba4795fa506db049c5276b94ae4f908ec3464ac52a2b8b78f950aba8f6ee5271a117979b74ed696d69122ec1bd5fab5ef3d924811de0c4bd57aa3f0594f0b5089de7dabd5672543e439664d94c2ec964bde0e1d2914f1204f09268e1f6e67fa9b69fa4867f6537655e9c5303e324b24b2843cadf10df3cf5cdf16f64a53678fef5283e21762cdb89bf0d45680ba92db93dea27d121f80c37f5ad9cb5284a68af6168f0b4c331085370cf80304b25035703bd40cf4d02487370b037fd0788176402480168efda856a78cc4d822c00fccc82a55c021a65b95047e08863cb5a4dc4e1b0bb6481911c78dfeaf38635a2e0c0c288c592128a27778127d710fb27d177058964d101bd9322ad13bc66ee7477ddcc50c1a6bdd75a8f266c6b2c1f566c2677b945d6f7c5b312eb2eee47dfdc89c8a7e39966a2b519413f978ddebf51e6793d2aa69cec1344f0a123d2549143dd2c5b2b95fb498d2d35d28f854e647f071761c2cf4a680e0e63d5dab0b28b123caff10efc8d3ac55f12ea3e9ba5954896a9ea6b0709f11ed814913ad08c55af6ef970761843fec775808c8b170bdb145dd6e10c970111ab6cabdc2d790878843bb3e04a2f461cf93729c25e40a7bd4b22474d8dc7594f1d90cfbf9bf44e7bf76b8549728abe1cc56fb2939f5fa2c355aea336d5df3a33dd0d28406a8a87e672c516b4d571d28792e3c60836bc23759bc993a5ce27cb4651ab5f6a8380db425c120f285d2baae3c75c0b270c9f535c833abfa05fe7350fe2311c42ce2171151d1a17aef1026fbbcea229fa07505aff76cbce3270669f17f86906d233b472ea1da5d74d793c49940e7dc98910165fe6dd426960eaed32e4fc19c6219b800546c37bf70dde225ff8efb593da103b8a9a1e683734b3c41500540a0437ecce53b379631ef606fcda6ed9112ef8ed0504a2a305e1b5b43371f36a04671d10e684b8a727f411da12e17f345b43e891bdf586d2e10eebd5826e43a5cf97daed10bfdeb38d236542ab9db1685979b3e2aa85cf15c367dffff8337a6c323d766d942cab065e50fa2711368fddd47962ca16da04d375939818dee91f29f601fa77b9f4a9086125d96f8ad39efc93eafd30471fad73bd3b1e097cb7bb43e38a6df2c93f6021604a09045f9c682b60758afb867a535f64077abb1ac6d522c181d7c80a3457ba216792ccd8ba74d301c213151b137dfe329eb315003ef52e588d40e0c5fc16396e237db13c554a5d3f789f654e13b3b8eea9d1fe7646a4cf7057b12241be25080d26d19ad594732fe23f37d367a27df562cfdd60c306686dd0863176c8a30d8dc619966ee9a076b3b2c1e247ade7641d54b9de2230a7cc7041c3c9c4a0d3553263a4d517c1a1db5077a3a8a9690bef988d0fdc2c055155408bb680f41275855eaa6e957ca5be2b6df89091e1e435a7cfd578e0668a2b8d4576065eee66b225786520de85dc1fed74fe2ea6d8638e1228f39cf0b8065efbe7ca5c6b9ae4b1beea5a61b81ab0eda9cc5125ee74313eba0cb124170ac311278f4e5fb0e1d49bd71b52da2c236750e7ddb91e719e956c27e4d5b85a44076d9aa3cbb834a97d97f973143341884a6f300ffec1383fd641df1628ffc34e1b9adb8d090effdc28ceab5a6a130031a1730bcae7b54a3d3de46c0c72a2591047bf72b3d00a1a601d6775381a226f07b48301763da3b082127d562c7b482472d205e87fe8548c1fa48bdf75ed0999f0cac8997bc83270f49d3623e00a9a2d5d0693c45718935dff05627279ab7083d52d6a5b41500b947d25355d8fe9407bb729928ea5296f96ea8713b5ad1cfe379f2390cf319dd52304f4a28ba0dee1166a8429cfd0e4923ec773c73177075cbc34f5627eb17639267050a6367db225075c5f810d400ea15d7e11a56c4036321a7eeb09ef2aa5dfa4ab8269e58d2db6557702c1d35d7247fcf6a9d6f0716f2759644cadaa05f06ea59cd1122038163908a1b412a68fd72a2119838145707be382cd627538a8208f322b87c970e6375929c4be9c103e04f2d7cee7cff1a7220f9da3738a207dfde95140ebb85bff56bcbfc7688698d2c24823fd1ce87e7c2b53b0cdc814eaea4e250dc344046beb3c0ad292faf9c7b3d9d40f8e6bf374596056c533a93a1f59ddea6b9cdbd82813b1ec6b0dbc1c2349113da26a1c1859a587c1e3bd5d24463170e175b4f85a19dd7c099020f61836fd322be4777781b7c8693b13532efbe7dad0b132f1e2b2c6b2670b4cb3ef1488350348de9ec353152ace6d5cdd62e78abcc503aa3ce309b7fb3897a4aef0399f5a4d3997c84ab9fc337efec643420fb83f167fe67e4187751eb858a2f941ae05d5d8a917db52d9f34b4097596d169cf8cb8dcced9d45538785aff34d7c2a9c420c6c3e67c124db82dadde01e4326b5d3c8f093c78337967596e513ad20f32bdc69d1a08e6008e831481e801caeb983d09e087b7d165f77c8bb215ecbcbe3825d53ce7894a2452889fdc8205b94192e77b59d2d1640041f075b2d7cae6643ca4d322d6e826d25c21161a667e4df8cdd507577509ae770b5baddcf165eda5b2a326db4295fabeede51dc7ffebe755bb8e4475d8d12f5e96269abd0d4e40d73cb966e2c523343e9a6d2d71a8cf140cee8ba91188c8551b84e9d2cf75d47e9d3d5009c5c90071d5e401bb840ba86262c955abc71f4fbe325a0ddc80e5a8f55c36ff95f0e8ce22195d4b5e9b9308411bfe64d312d6e7c937781b2e7db72c5388ac1081f08eecc37d58b26d04d95f3e8cd041a5717a11149f818a3f1284ef07c71f4b544135dcd47688cf8d7c492dc939f174995f636c1edee8e384ebb951808c0308836f781ee399400b265e5ce46f97d46635591d49567a20af9675cf045c4bf9c0a5e7c0336f5a20fdde179f23904aeb9effeb124939f5cb56fa2d5078098b561c2226a8bae63dae000b548a5bd9b7c9975f81ecdc57e64b62168ed81d06ceca638eb88c05c6c839ca3481a90dba62d0e7daaa07833ea013697226b073e28aa94f5229f4b4af6e66a4f02b75a9a0e0a3f907effcde4cc7c5d5a361840d1b43853802d77d380ea4c738a4be7ac03b95b5535db0273e00d1d52f10ebcd591f8de0a6176d8010431fbdfdf8b712e1c906877f52973132f932c3ee4101f6d86dde3e221638a7de0b13cd5d32a1e87ef7b78ce57d11854da48f148bca608b1b9499102475e54ee1c54567df090b6608463d582e339b9dfe713b4990037404831252e925bce00fdbe019300bd260160e12ec5ba21ca205b61dbbc58382a90dcf65a03bce61b5451d0a03986c252c63010c6919e9aec14714d8a52aeede9be1211cf58a66fac199359189136887dcf7719118157d5085cc9b507bec3a5db9294896b75787eeb166a6253e3399610e2de02f9dc0d5a84c10aa03a48beeb68d60a6618a15b9b3f157ff23877b77471c80dd565ece7b2ca0bdd170b38c844f8501bb1bd25774f10dc7911af94d7ab0a49ab9a3cf70e644002e92162d5083af3c970714149f321c73501c7a083c1c2422c60576846aaf8506dd7c62768a754c20ab1ae8e55f79acae6bf1df38d9e41803bd616d021e2f761164e0e4239cc1bcbd885708b91ad4082b75a1a90f896b12e3cb2de5ccfdee8dac3f7029b90a01577fe94c020453b9e57727bc7600cd099b3f89fb8f49ac753253d7aa91bb54bcc2e4287a535b8c939b2ddc92a49137581773743aa80c8c5c0a94c7e0ca8eff4c8596e0628b233809bf9c2ed4e3453acf1e2c046bfe8a2ffb8ceb7ab312b88c38f5e48b8507ffe874b96e78e380a159e725c5d51fc14709ec2fc48aa228dc6e1aba7994625856107d1ef1455f2b1a1728b4dd40c6bed7ac9679bc523e7b4f276a49a2857afaaa428b66e13e983133f51c51dee1e135907a92e13f7bd868a53a900a1bf94f7d70e118179abf4f3173763a7347330fc4161669fcda62109f633a3492324a504f5e8ebba7aa31b4aa4d0cfb9fa2be92f8ece27422f9af777dfd88c06882031deea7adde9d8c40891a454be83d8def2b3269714a0a29ae6d92f8b8bc0377be08ea00c1097fbd663d0fe09578e3453f290f30456408f709636cd94c8fe9afd5c1bfde6ac4b4ba1d30d9a38c361775392cfdc5c15aa5ce2b096a13b6c48186e4a8deb50d88e30ec0152602829840aa67a77c8e9786773b9dc0293c89f26199555ed5191bce7128195a63823b28053145190a1f1a8fe3abcc1808b828821053b234216f281de592636120a6f86dcbc65bf234ebdcdf71bb5081b71b350c045285c9424bb4ffb6da48c9cbe55cc20ac606e36b7950edb7c6a58d82da11e8c3f24a9eb62344dc7b6c2404f3c1dadd58bce03d4c4c09331c7a55ac1a7941b0c5cf7b250b8a4a4c99d4afa306c0f5082c07729025d888581632cb6ddc8d66fc804681eca0e557b89880261493673deafb52386ca6a330c54b8c7133476ae4148a04195624c8dfb90e0b41ea183907ee4d19ac233d30a4f302e4019cf9a63b9159648c11f5b954c650e26d94039af59aa7ca38645805577a02d5e71b51d3e01b65046470921b595917821392f421896881e087a09595cab291de8c3eee5873eb33402d2288734ff9a886ce67584135e071f8f45864766145566a7b683dc869b95ac460885755cb10aa5d1891ae9e8d9ade8018fc530bdd9ab7063f37be9823ee21fd89127d473d3683616ca2758de2e05df2502ccfea724b3a4e322def3c54f25f58116168ac28f3da50450a3b83e86946dc544a5976d1af668f1eab5e495f7e395093f5b81910b105963c496f35008e4faa7fd58e557e5fb2553f307a33b5da66938b3fd9f286f69bafbcd08f05cdd7cef94d6ebceacad4a44d2e6dc18ffabf5d8d61b04cecee4d03093140297aa2ce4b25476683cb6996c2b366b3c2b2806594aaa1e79f5cc92ce23f5408bd0821ea5adaf87d616bbd2e844472930c4009859277d6563fc6aa0eafbe7faac832bdb46476dae3e44048046f6cdc9bfcbcd897dd81797cacaf036ad2032ea6c98ee8a4fe75595a7add9c90fa88ff2f228d8014dc3405db649a67e9efb9eb7d3f7135348f731e4193b81d8cac4564dd0c369275251c05f3060d49d45f2f20ae989e25fbadec7439dd546d3ffb1ea826184c72313ea5e443ff7c1be2a6ef88ab734a2d62d04df5839636ee337d71338ad543c1e18f7e3b5ecf7b607d6d876e044e19de027d143cef7ce422ff89e9917bd190e40eade18593e46fba0d09635b3987919a332adba4bdffc0ae0cd6e43c998bd86b01009c2d93dcdd8b2a012fdacbce25f4ad5000b77f8d60e1d3bafdaf34626ec9712deacdcf1749565cfb29573b706b7fb9932fffc4a44950fccc92740d03e881c79c79d0b632479e0e4e0c7af91cb68de04ab5e7fdd2fe9dd0724ef553deba168cc2b5c0e9ac3cd4c67035908531bbc1da0d3f0abba7d50b07428fddd951781a29372b28c9e3ad9d0e082142804ddf9ddf5137c25e81813b09c3e187ee0a96ef35703672d7872e595d8c7c0b4acf9684989d1cc986fe67a0406cc07e02789b1839e48439a2f5239c3d739255753565186e776a6aa58d1ccd53a3c93ac729f9279f3a80e7bcbc11d8163400ab702defcbf946bd303aac0534ac1f4848ac7d358fddb8b8f7755a9d8f70644397cc178b01a19171b4c6d9a558c225ea221300d4d39e0598f37d4f1b34e47ad784f960cb7bfffe1452da9491bc2e5e0b41ab435b752897bd6635081f6aeaee490d88b8357d7ce331b4d67b4ed1593e4841c5b33df735e572ca2d141e93ec44f49bea7c3d98a0c746355afc312adb3d1d8d02eef0dc2e856599c6019d32710576aa9f2b585ff430be6ec875ed4b1cd0f79de34518967aee024fa04f1fe901b64bd437541a25ffa626cbbf96d794a6a062fed76429a8b395e5664c6b1b0a26bdf083137507ad1bae0bd6a0cd84a9f111ec1a5faa889560f36b781ac4132858a2e141e40c8537e0aeda0a0c8878fd94abff9b0ca6d9fefbad20ffac189cc6000bba9b09993768e72f1de053663901f9d519db3ee77217fc29826760a71c55b53ed8e8f49972b287a543f425d52949a933c76596cb05a2dadf2c49e91e267a00d2b8d6458beb974ab7f8bff463de571b3e84c474efe91220547b01a5dc2f854b5df6cd7cfee6a9b8cd88ae3f70dc9cd85bde7289c4b0d8551ffb39176fbc1a2d470f48fb51184c5a6c804977aa889d692240ea25c7e177f1a8295ace5730ab0f146ed35120e50197fb8c0c3d7f86db361838b5d987ff738e7371e12b1141ba694c91f70efcd16c0a10e870e14e4bc8d7b4324025736f5d74088156be2c43bad466152e953361ee2943421203b53c08b66cda239a28b5985addc4461816db3ed8d764d484631afa5de9056a2532fbfd6ac88cca980666a69b79c719a94f6cc8df470d934d0a61234098cee3c655f0295d4db6cfbf9af71ace52e65be2647cbb500b7be55fa7d90b59d8eb09578cbd1f1673048d7154eb675c0fbe8763c48fb8f3bb3c454cb9e6f5120006556945b7412ecee2ae3dd2b81edcf6bc26ae0e1a3402cccb2d94cf1f72f1c49d526c1f7321feb7cd8ca582e1a3b9ae7ba4119fa0af35b6b528b835f727818d1c8ae08875441ed441a328e40c889a9d599a3f07b79ce51f66a137ace26539d00069670f3229f79adbac48847d5fc859e273a6b4c38f995d7c31839275ce9323e56850223e462171f7e274d2c87beb5ab2cab95558f9daf742543c6535c615ff38223c5ffe2b14f023003e5d827f7c16370a1737fc6e22837583c2b396ee4ac875019c17064b5aabf96025932fcce322dbac20fb024ef878723aa70c0da9aa262890ffe5cb195afbc79cab021506c8e73d4b670d1f2ed54cb4f369bd2e7aac8ecf5ac85ad127ae762a003f28f69f9609c84269ecb7903186da487b656df3da68e5b995d49cf8cd819d5562863909c2d1093baa284fe5a59d4ea46c833087ac5ae847e8e1a30f20c4ade6a59850d7d7f36c91983e6cc19a268e91ada53ab8aacb6390121067cd50b5b84e98ddc28c5dd78edec49d82a69789169acf39d0f94e30c40cd1df7fd5c5bb68f78cc52299cd03dc9dafc415f7265b731a31bf97ec1f31a61888ad4f9b086c1c7c11fce5729dfee238ca50bb45bf0420aa85a4f3e39634666db7085b9f814e6f46c8d39fc9592f1c4a94c1d714da29abc63b9879823bbfa156dd8f1855d8b8cdd211f795e0771af74daf75fde6f01270f7b3f8ad4a7849d38e7c902a507751a4b87dc77c5a80590fac7b0b942ea9752cb99f53e3aef459795f04c9f601d59fa0646cc1b7ba0d5fd20177e13e7e5ec81b764e18c1220864ff53168b0ffc8c093d607f74ec716695cac736a551389861d9c850d5ca365d02f1f51251eca2f314d837266f6f0324a1667827a670ffeef8f42a3819736e4a99eddf98bcf097b3490d42e20fc3f1eff9419edb831236baf3e7167442313c59c04f5d1a3ac04d351c492e42d49fcff103d8a5b2c9c96f84c91f1785dea82312eca3080749d03601151853b96c46f0006788175dd8eb2cf50f28980d7d3cb50e95656af068b4d49fba075dc6254df4668afc8e3d3f0bd1543c80324b7c5354954112f05625c2bb798172a6e99e396fcbe49254c16ab00f5ab7a250e07aa0945f763822b8ffae5d26e1f6b9a4458da4891ae6158afa5c3951272b8e6cf69906b5bb519c8954bc3c107210208699af452674544b0a5c84e1dff17835315ea0fe4076dba857d390cadeb83b55f13932c43cb7895fc00fbe8b6fbd150fee315d1d783f52e0a4eab0abda0af4d47472ac94342ae1ee3c825da888d08e58f40d21d6d58b33dfe1088031ab00b926a0f4715795650a50e06306dba3d240bad35093acd0d11ae0accba40eba3014b6d72d2560e8ec4f325c203e674938d8a00c8a271212a754bd589280959fff742fb79b4d52a7273d0cf028690e018ac2a3103850a8e3849da084fbaa68c4e573dba2ad3daf38bc503b4d0a1b22353e7b3e8ee9a4d3ebef4244a26585eab178805528f18ac946023567d333c9368cca7eccc90ca815944def14417ea7adfe3f2626cb06b95337af38fd2343f7cd50c559e86f1fbf006526f099d2958424f39fd1bb093b5dbf95f9e775ad992b5929a5791be1916e06e710f33fe658afe24a111fac542dcc70d998dd6be2c1e86c8fe178d1b11049ab92826390fd169f685a396c554c5caa197b02774a635c9379fc1fb5a45e0ab660e001ce17778db729bc8f445042265b1c12ad318b8fb7c0f3e6a6dbfe58ef58b958059f4df5fc9b98d9793427e63973eb191fb8c9f862057ce81d486a324c95378304539ee901c148499dc84699047928f6c069601de9b58768f987526a90e04dc98497a4d12bacba85435d26eaf5df384445cff870cd7575f1b20551725aee7eb41cb7da3ed8d26205207f535cac0aab8a0658ed817ba9fb0add6ed1da09044cdb2350b99297c6c151bbbb665e85aff5208880d9d072e7792cd2107e1239c63aa73edecd7cf6ee7ae35b7dba61212397a0430427de41a262d0469690ab5ba8ba90d5de804e74ddd142a652ca24fd0a25a1dc2f721b765f5a8d917dc415fd206f207ebc7c87700976e822c73fea77c8017daa7f23088f92c2cd591282e28cc1aaee90150cd896f5de5c373766522ff1cdcc447fc535dbd13e07e401578189010053c064cb8248277a177a4fe7dc93fbecf610adc324099f1ed5f8c6bc83707301e8662843451212cc92526d3eea325ae183c595c743875107afddef1c58e17c122527cbde71734c5865661bd61b89933e0da9a42c14d39b6b0e29c701824a90d3825bec2797ea38aff91bd847e1184964fc53757c388ce2cb79530b16801a65a89898f5a938e56c35d5ea2efecb5cc208c8496631ff01abab69e00795e2ef4f13d05574cdd5035b8c74578c854ac5b16c09f212e808e06a7d5867693a2b27d1a7b227f61fecb29b166cfa7d55dff17c3129e3e7f8c687a3d3ed3f8c6db95271c6b666d619f0718f5618397dfb0b5ea6eab0a571feb895fc21610f0d9b1e0dc41365b8a14670deccde1eab0adf4d6bb5eb26bd3d746f69b7f88c2c595ce9a83cf04893e41ffe48b810e8a5b09d26b71dc50471a6d45b818bcb973dfc2d7cb040ffc77f2b20e94df590feefeb9f27bf630ad2894a98fd8bcc1d4aaa628777b474947ad0c2d3d26ce9c0d9b0386fb0e31a2f095a955cd5e71d5fff0828e54b333c50cb3f67b34a142942f1bd038962c0a7a4217c137a6501e4162ccdbbd167ab2ca741216649a0d22879ef4cf976ade69ffca354419c3b8ab4e27c6197e66d9aca1a751d6af177356be81b1666a202b367ab1779ac1cb9dff417366a497ecd70793ccf89d2655dac58101d7ff7b5f1c59331e652bf7670804657135e4d04f7cace60c8fd28ff94a591846f00190d0b8bb723a885f853f00a10146ba42f337d083e28e9fdfb3aecbf9ca7784d4721a07427f2c679f32fa8dbe5c1d7d24c64edc74d17baf2b5a1a668de0bd19e0e9e611d7a11d8a51c541b744bf1c07f31339a768f9fa481e4be522fea23f398cbddcdf6322357adf07bb8719726bdf18a0a33945a434f12050b8083258266b42b5a378cc489bbeafc0110426bd338df935329bf5185032992f3b1e124a99386a9ae4e4fc5c78de2bb7ea3753e89c9a009c8ed45e9d7793f1b1156e86c0c1266a34462cd9a5f363b9b6ef26893acd8d949c60ec6a7dd19d909eee007701c5bfab4b72574d6d35d4c383c8dbaefcefee1cfc50ec00fe85d7dfbe70dacb56ce8b95a70f6d3ffa66b9b0e71c5eab772946028505db076abcca44d941066c070411910fc6779696ac9be8aa93b569f0a41cadff28c169079dfc28b6098c405c8ed9054d3f7b3c873200d394d6eacfb287f8853260a70d1e51f7f41e7172319c956b5a27218418151e73d96d8d05c404fb62f2e55694dbf6ff430ed920c226114050f9661597128a997962fc600c322d28e35ce2b290bbd9d066e0afc0840601b80f48d2c2be122cca9cd60af509007635022bef1ba3950decead068f6bebbb52430b132d1000045da639d5ff70316274b48c7d539d651db7a5748cb6c7a2c75ad3b9b4fe966c41bf0561fc30c035c88913c995bb530d78ba233afa1cabf41897bb96ef2b3f647f635fec4fedc10bae03066074b37b90f658e086db2b796e238b53291e1d6ba6f20d1e2f5d7103218794f4e7a6c667ae2b1635deac6dc05f7cb842c6ee5fbba25e0eb8b181850715e99177d5b85eb7a36b64cbb8da5e117688a0f316cc5cafd527dab7f978743d67489b07a105f6dc2f5bd6fa9c0166dd11dbd7fc8f34bea8bdc403a48d8ed9268429141cd03c29558050ef4afebe3283dffacfb7a6b3d046cad71c06e4511e530b0f8f2ff9a750b4650f1045574d2bc62f49faccd3c64bfa9ab58647744bde234a708ed973f427694bcaec724c4acce48e5ddb94bcf88c448c03c4fed3fb7347e0d07571d59ef7f48338c64a3433809f8bbaf4b7c8a71ba54d367a9579dc88116cc3e5b195045cd6c9cd4035b594012795c5d8ae7d6e64ad2cb1f993ec6b87202caf51e148b0c0907decfced26f8a94d3b22f9d141cb01ccc92ad4729224fae4cf174cb96740cda22e3c2eb92ebe0350fa46cad8bc297d7490f59dca01955defc27028825720ce9c492f8822337089d34195ee1d5326324522a6a802b1391a91856e87d4bedd6ddf5d3b8bc0bb9ca754afb4b6279d2dcaaeecb2a5a5378ccb8aa656fd48f4d305fbd8e49c0d4dbf0655a317c57ff0cca1225dadf939fb0ceb2b93cdcb279fbe31725abf4b7050440146aa339e9f047f403ff3fd25298235f404ec37a41925db7ac341301c9279b842b8539ca40d2ea232685e24bc0c439470a70e290a961dc73c7f3acb81dc10a8251b0db7683305f1f23beac9105ad5b4db7278165126fe1e10f685f60dc5bb8032ff57186db8f0db0a1b383ee48dbef3bef7b8842a342d2c72d9d15432d7e0dce6d5be3426f795c9e486a51a8b1d55fd75c75df6f846418eec89ab4a739b071adb2ea19f26875b4b0c1edfc086a2311eaa41c6e34de5d1c1e896525d5287c4c66a6abfbdeed0c7dafb4446d56984d6f3b6f791ed9d9b3451e17085115216706c2f2a5724e27c41f64c8758dda66dbdf946692d5a59cf0fab81c8b1faf4cfb07893ee164893d280294a68a43dcfa56cbbb30717ce1509ba5b23df476ead2bfb8833165bbd858bd8f0af68a76a37c469a79761efcd61c3dadd5244d400fdb3b7f77743b5d83a00d2c8d5f7e10781531b496e09f3bc9295d7ae9799e64668ef8c52faf6b34d23c9f42e4896df8a3eca181da15fe23059e8374b6e3edca37147df37189fb260c55fb3ad81d5f166c2b1d690dbe439bd1a43803030b445aca95526f06aaf51d7b12aa7a31c35d521af72ed4f682748a7463028f9a99aafc663800a3b6bb6000659c336cb7226d94f77b5a2a5e0a9bda37026c804134289855250ef5486445b7131a1e7731e39ac449dc2cd3 +Output = 4466e3389bd2d272927d5746205b0850 + +Len = 116264 +Msg = ccf82b1d937c4ee4f18ce8fa431bee10c5841d82b6213c89b719a1b27579f68f87873dac9a5312c4cb8e3035549f37b26bf4ad386796424325015841aa32c2470901cc0387b17cf2fec618d27f16e85b3b233d2aa4a8b3fecf72b2261d713b3a1a0fe10aa5c015d452dba7ba0ca88a72ffbad840b57f15217e15b849165fe7d0825983a93ba864d38e76e6d3437ca4617d608362e142f316fa927193dc2450720886bac89091f2587c3edb066bbbbe8f7ebe4878711ad2440b90e6eab9e7fe86763e8e4feda245c9e2dc903cce8c6164c97c2e6aad2e3c1379b71d38f3d07876922b08269a03e78f89f70d5bb218134828413d20dda7b8eb0bb02063d30946a825f32f35dfdd60133938584c60875fa361b57e8249accf348a23f754a1b7f086f63e0c65045836bcb9467bf82000cadd3d81f87939660756bfb7a8f4a505fe76cfb5a59c509bf3f1d3cb7e463aabde5e844db4ebf4fcebb96f153d2a2719f9e276ff04c30ccf1e1c4d6c671df5b1228ffec0b8c2c39700c665e5bddd6e1b6931b4c531c3811b40a4f0d340679a3a1ed672830ee4ee5fd0e368ce31f7c334d4cb51af3282f4a8e0f184a8110b716d5b9caa3ebe3bbd7be2793f78a05f6e8bc418156411eab09d866bd192e0f1c273604a6c98cead7714bef1b38c12fdb74ac080c88dd6e2fc23bb7a9e3ab701d574b546813948246651edb18cb290b9e596516b31d187511f620586b5489d23f197e3fab1ca3387d05bf6239291207b429afd4119d92e216281eff7dc639b3f600471ccc3f398befe5961ae8cd2cd2b147b4f6a484dd2390da9fe35dc33b73d68e4e726815b7eb03874b7b9441c9cb1a464cc4e86d47c816801bca87d61fb05525fce6fb1abed47c6d47eae801897f53a7bfe559b1633e1bab2b0b886956f7f669cad0f1c8aee6aefa041f4096ec5e01ee86ce84ebcff414de362cec1761a94ebc40c6e8aa18701fc0185f3a7c52e5897d49e6d686ee88967bd5b50f4ad042a2bfe73f4c398c2f5351ed41321c5db46ee671d4eb2d3f7a1516822a8e8e2352a6c736b098e16a72ce220b5bc4117d3936cc870f1f1943371530b3f3c65bcb67df74a7b15b4c33d8f4b2eb156cd631e2556201fc0f058a5e2b4ce3b7633e38e0914ac2c80fe488c06b8714f498e50c5e6f796b32176c853dabeda9dbd1900c5b80ac105b2314d9c7a701017fd4c87cfbd9653b37e4a8c4742b757ed78e0bb647123b08e13187976d1bc3491dbcfb044917a7ea73e354b8903e86db41150bb711ba5a24f0c7a7521f5e4054649de722d4cec4017c9ffad1f03994278ef31a9f7a0d9bed1031ee8a5cc30aabdb0437591d534c18c87705c132c1201c47a4b2cfbe7072d9b61cd7b0b40e74c7e79c46278149a288ee04ffd6d659ad01d1a66ed87d87716358f4fd65a385312120a2ae1eaf1669ea33c663b33957ad70d374993a25b70a228f36ca09a9bba2500cd3c99f054df4a55037bbb6fa6fb401b39bdc755583cf9fbf7ec82d35365acd028c43391254e552b9d5728287f6330d0888a31a7b72142360296230e479cd00b858856d64cfbe6ad72c2286708fad1b28c7878a06068a6627b332c535fa7b9384b52abc5b12e2664ea846333290a4b4bae4e45483c584c06cc8b44a883cd8edfe2e8da693d2f3cd76e648394cad9c62354d63fa8313b5caa5c6614179b577888b2128ac7d645518f642b2d92d3b069c0e8d60fc7285700d6938c43a78f8d9ebc239a63e965ba8d1236a10b362cd75cacd0175cad0af65e13d9c57a6047b729029d470fd6d3d417ea4a8ec587be96c86f7661cf63bd5e9ee896d8614bac1d40e388e0339606dc189e0aba038d6f35d58f407c10f02bd7e9de328e9f6fa4070ce64c2e7a32e819b7b7dded6c5128fbaa96982fc65c3aab677c15afddd518bcb49351f989b160d51dbc2aeea8dad232700ce54399b0d4203f4aa803c283f1856172ff080b1b555671355b86603153204e778e8133f3e0809ad05151f78315aa3b0cbf25a678b1e6dcabd77d3c5c950d6d61fdae392d46119f97796323dd6e7369e8f71602d15bcb86a5069be3657e43f45199955666ee1c772689ffef97e327148e11a4c82d3b4d96ab50a7fe53f8090cd0cafd30a7c0e84905e7ee03bb5b1063877397a09539b635451d6b342feaa6dd65f8ad6ff7a4bf3ebdfdf70650c0747f5a87b731103d4c8afcd5ad2e003b638e988b6ebc5f82e77ed532e4a15ff99c8f8fb3cc24a62f59be57e03693ced58848f1eb08bfe642a930d5ed7c7befeed0bcaf619d205ff723f8dfa6ce0ca29f5d32f981431f94cc4d7c4598863d0887582e41f8f3ce447df3611a903c418381297537b3e78471081b8bae9acb8eb2ac7b0ccde096d65caa102192044ad97963363833eabb9886de5b85985b1317f645827edb804edfb064c45fcf6bbe7d8c2dcaa4768f8800da3754928943257fdb3ab5aef442e39146945543572e61d4c5c72ee18708166775f94fd80bbacb6f6a735cc19f8d1c9628230cf6b4b3fb872b1aaa16eebf2d73600e9482a528cb8faad8bfe265cac2935ef731a06e64543dc60c856b341a95cca25c6bb6e0f5ee86a3522637cd5f9d33eefa0c680ba8339f9f860909e083151b43cd1c9c4289fcfd5dc7d8e85fb5751be212e47715e66254bd717c187a6177084c48ee5e554cbd9be1211e1ea33412f6412903f51488a70529b327bf8b1c813ac4b42b21a1a7f9093646400122443c6a1426af098ef5cb5ae93652279a1cfc5ab3fb1910ad0077ee642086b8634eba1f62f131db0d9596fa07e045782fc8af0f2204005001c000f37495376ceeb855bf3372d19418d0cf8e8a9b47d9d28a640217b72a0c25505cc06d8f9d444cecd5ef9091d65c380e40bd7b4ea1720cc9e1db9dfcde6aa21653fc57f5fe69045002597f368a5af3b7af30e1e19c6c64eeef41b9bb6392fe7cac4f3aafa3029e4ea3a50b4933b7d433e58fc43b7eef635f56dc75dc02adc4e931631fa4d438a34d827b39b21a9a60eaaa812d468f228f85de55d84703e379c5a8dd0dbed9339ab565811359872c2145c5ae22e9192e73c84f54eae5ae5ba777da680de4f91a0bed1562a026c1959eaa00bfae0c623b94917080b49c4a3ed5698faa26fe7d157e5f5ac4e80212fc5f82215cd697b3707c460a823d5521b38c028f4b60f5ad4e7c72fb50f4d3c089ed36f12ca47354f5b251e5018ef979e353aaa1f4c3afd1ea8c8ec2adcb831466cf2c38d81f868df3be18c9a6ad6e9bf6b2c98f4d58153114371b758375f856b88dcebe074fb9a69229057e19a49ecf1331c71ffd260f15f20481dd7cfb1cceaab0834a623df5e6f9797ecb017b6f5d62590d1aad3586c4ac7b29c23e64d5c461bfb2a691f020975139ed7a0738cb8c0cb10147048e60876b2479ec71b80d7f0842c5983b7023ffc1eeb951d2e599a539c20c70ab3887a65788da22be00ab48c5c123e908c6e76672224a190b89c1f01012975b493be169972eb52ecd439767c0c53461a2f953168b5c0899592d2ab5ba2b08d187a05817549e70d64589b92423d560c7ae114e5635255b9b65d8be3c5f95c89a0d6ed3fab56175e3cedaf9c6137a0fe5d717c26d9804abe5d69264cc25d6407e82ad3958e3fe2a1c123f3f97ba3ba981c21296a4db816041556304af3778d7458e66747a05fdf94bb6bf73dd40a096641a0ab2432724e2758a54872bbb03f4b6daa06ba844e7493665637de1cd313e568508fe92a37699491c6cd389dafd019b0e63062ac84381a6c53245eb87770a1eab1262d878feee87b4b4d111bbf065bad2b72d47b8990b637e34b34399f960863633c65fcd4447f5f932690a876388dbcca5c8483c724e353971b030293fa954cb70126dcbd10d5d94f084be65dfd2c8a734bf757e54b2e49ef222fb60d24e5114d32e4b992ca9852cf608737eebab48096dfa16a3ca9f3754bef3ed6539b545b963024161dd81356a4adf72f90f7b229b566273d6597df804dd094c61fc48f862287696486dff37f6f6ef03ffd3aa1f04faddd43d8bb4ed55584e607ba46e31b62b739478638a527702226db8c0a007ec5e548000e7acdff036a873dcb88eba5d73df811947894d95745efa4b5dc5a2fd8cb0c048f5ce957c7f01cbabc012590008a4a652a266f1f9568df0e13282b7dd8bd7dc3d3e80d9a23b40b1114561d747f3a84b4cfb88064baf9698a1c83d103463b31c06492b710a734d6d36cee3fbd93bd5b82fda57543288613ab4a65f73ab1d2bc7cc9e38265b2f104741e3008f5fe8113422c73ba257e8d61e415551a9e9bf2627b6c60dc03d7571875a0c2059800346084d4b9cb962d7dd8b715b7a7a97548e82ed4814075a4f5874abd2ab23e5935b7dd9ede262fa5e5ecb6c4241ad5de14a2198acb4c357c4ad5759bc09b335a038d9ee367563c78341245991100ce270424ce07b54bbdfdc58788f53a2d11933c564b3adbe8473506edf60d14e5dcf085e4bed3c5eb898a0411f731ddf473952ea6851da238fa3cdcd43ab896269cbb28665e67739822a1750942da426dc3c088f2bf0450d4a0101479a5f41b6f87f75a2e3f3b54de13e4a6e1ee670e057cb5a9cf6b677e57f35f4c22aa782b1d293599a0d3e7c029d7c3f8107c60776818d52f911cef711f4e7ae273da9d2bbbeae66562bec57c07d8b007295f4f34e222bf78ec45e4dfb72be385f198dbc3c8578a5be8528cbef4a14952a1199bcd2024c5143578f0209c0629951067cc59cef9b1dbb631862f7ccbe0490c3dce869e899690111889da5a87cd9e44e9e7744c4bcd6330ce4a340cb32578bf2e6017a9db946ae3c72a636f0b40102381a599acc86d910c9b516320f179605e7de8f6fea55f0341e74a52461b117920b18f307cf9e2d38e2b344365f16c7e5ebed18af95157079ffb723d6c31c267b10c2cef494afda959f05b4b285d7f413443b26a266a0cd672962a8b6de9c33a78f3e71c7e45fe90d47d4ee10470124763aef40b0279f0fe5e39eba2b79da48fdcfb464ea8756618a24477bb66e3c60f81732ef419eb93fda7493e39d5e7d6c651a4d30c3453d4af37c87e20ec232af80212bb9bd949764302568aa74532ea8c7b6305cbce6bcad3098bbab7e0a8819f7a203298cd2e186ce3e4697192195030bec87703b317a9128c00c5f7010e9a643e0e1c4161d3ead9c075433f29059851a0477f5aaef20fec53ca2854b9afb5f4d24ee14c44056e282c7bb0568672336da462a7270e855fcee53a4a57771664bfdb551a0fc01d22c68c8a296e4709a1f34fac86ff5e4c2948b4e3a485c5dd3723cdd33f0272a5a943650326ccc71674710677874a1ab0fcd85758ef56225eaddf0e2bc8dae819521d4a89211893331b657d6630adc04e3b0c210c534f1935293020d13fef7cf2cdb2a18ec0d847ea175ef8fb1b80eb9e6432b670a8d716db49c5ba661cb6cdbc6ca21e765e624195f8bc2da89079f90c190a8c283894a7cb701e1f5cd7d746f0cf79f5f2726d0ce1200b7ff137ef7521c9f226858afe48804c97e41809b7651a6698dc65a54f26362ddb54579a57ec79e767fa2b287a75942fc19d4a2addc4a3b28d46525f9f1a1f929a6f6e0049db6f01fa9b8b99afcb61aa39af45a3b0d22733d5a84b19c35507cec71587224bae8baa286f2946f496834c5e8ead0ce71a1f8af096b26c52638962efeb4578c3f26a30500976c8ff738376aedfe2ded708f6f86c861abfd2c20edf83551b7c492365352fef168806febcc9a9077992172b383cb7eaf68caafd22951fe79b9551de073916746b1cc184c9a5eb99f3bf1dfd6da85159e86b71714f342417285c646eeabc825df6efa59224abd50bc3ce51fc01cbc74742d49ccaff3d2e685449f7726a2011f04c8939c3483c03e17c3859a39f2788379840a366bd009d5fa1e69175201433dfde71e484bee6e69f8f95ab90904c22af7b481bd0f32eff6193aaa8e386f976711f223c52f32cfbaa606ebe2f7f9a15134e436ca65c38d3129c1ed43a195038589112b7aa8f8eb196b11c07ecd791ee0793db2c33328ea6f74dab7a0541a927fad6ebdd17ee8cb6f8d4262f6512e40bf0ee77c12420c0e9640ae920c1ba8493dc52e613178a976a255c258b04cbd0fd73b091c1d5a150290d66505efbce432a8197c9f0260e4f49c0bb92a1685d1930e48cc1b4e42ebcd437e2699b2007854a6f17e00adfc404e43f74f618fc610d54d7c57000cc43777998019d4bbaf0cb720945c0b9815668b8161aa8482d522dc7d21d353bea6a1097923674173914764ff4b3f492c72fdb33d90f51b597bb0b0847d679dceb1d08acab03865426dd262295e4f40d1ddaecf5fcd56af7b80625a4cd83c64a3ad6d02766fb3ca910d54b98815b37af01c21e5ce60f5c750acdfe1bb7c7933a5621f7a64a801f7c637767203b7947feff8fd007491fbeb40c7d04dbbb0478f3c988ff87ca349744bb4e094818e19d53839eb2538a890a3b398dca733bbce02d0166587a6a7b4ca864c3927ece06b0631a7925e02ecdb7811e8acf60ae63513c9a5482ccafe6a80e1c62a342bf6b19a44099bb2baa605f1c27fe7422a79a54b8f0de0f1d0ee921ec2ec5ac126181417d829ad2a491e35972e2536937abc45308a16d6dda0c0552c938472d9c58ebc0754cd71cc959c94f0bea241f2e2f63e4c2387d2f823bcda33bb571981f09fd0f122be8ea287684a86d8bdaf664a71b727c02a7b4b3f294abba22df8c38f94785ea9c4adb407c97ee1e63f29f89a73d947cbc57adddd51cc4ab0ceb6a68ab5ded551a67608fe0959874ef156afba45cb36aa2176b7e67a896a4d01fc32c94a27de822e90a8526e02027a98df93932fb67cc70618df40eda8a2e18f7270349b7e01a422a49ced41a1dad0ff6bac0b78c29f883c085fd5f2527ad441bf67b4f009c71f4b59eab5c96095baeda3030b6a1629578aed3f8bd0af7b8edd8c202f90f0b75c71589c945065bd9e292e9f7c4bdba29bb970854cd1e62c782b80a18ec45c5ac15c49ba711cd8d9e67cb68844643890bb91383bff3b2016f8f544f4bad47536b7d3d24a3376e272f9aee0c74dfd567d21daee688c5784bf77017f219a0862d5a7a09e56c4a6ab0f3f8756637d5e5df0345c3915da6d3bb15e18da2e15a74cbff78953e50bf45a3820cfc064bece74725cdfc249d3c56c741302fd2515fb5a7a11579a00f0a81776044dc5d3f797c38a012a300c5ea6408e00878f0d814ab5905bd21aae5b090c4f53ca0eb710ff73c08b062c66635adf898b6f39ef40dd84893fc17cf734605e4d750e4318f04fac9c633b5e60cb2770ed1e81a2d23cfcf0eb23ed67e363f538f8d3e10bfe81ce95a7ef916d017c561b40208672be5cef2140711f847bd110c0d7d30b0e72aac6576898d002525f2e0a0cf94753bc88fd3e0f901d7bc664f91e72de53f57b537d1967c6bfc4595cf962d81089ebd2a86f6fe1e8aff3cc05f77b515d826822643c042de2275c205cfd4e2dcf17e20ba58dde3de19f94969d54fffdb6600e6ec64b404152d071af4584f4929db8e16c659fb0abe3b4072b1256d1fd53b590675ff2f42b8082ac0c01d47c8fe23390ffd1ed10b356b5f4944e461ad99a49951518794974d205b54176350fac075196cbd1bf24dea26b02d7376c011af5e4c681da2766a3b22033568ef1d57272da9cd84e5c14b32f9edafeb70faf47cb4dcbb28b467340879dce512f4ff5688c96492f2e0d09bb66152410b5784be8834d4bb0141c9ad4b9422f3c43969717bd4c46d75b1a2b7cad9a871618f0fe8587acef845ef201e6b0d8fe1eb10fe5056ec63ad8bbcba1806df3ab17cabdf0a73e325e35500fd0fed326e200610204bc05cace3b3867944f0fe9391bb22748d510a640cbd1bd30a48cf684e93bb61fc4ec21aa07b9382b6ff944d92bb8782f9865d23f4fcb424961430e8ce127755ca38993754425848f6a95cc324dc4f6cc77a57c01c825e742bc5e37a1f10d85e3e346e7d7fa6694e7c84a49ed8bbeeb48fa386d2e3ec7f4433e46396b1fd52fdd0b8ae77a3263b05c0f7f82b1ed8e9dcaa9876d6fb999b1766d63dc947567bb72a4bc5903f4042016c99e40277a1d557b0df8446c42826501d41de8c1fbab71c93546061d46312b3c7d0e4bf73a515a82adf4b9cce06d5a0cf8dd249cb88a990b468fb66e32d21af6b4376bc83513f60811e495379c3fd6c0630959cdb4ea7a5f60ff309ebfcf356ef5816842744c6f35c22ea0577de122449c0b4ffcf7b55dee0afe3e56f510c4c9c854090efee20e30473ca2d18b3b86c12b49ced08ad18ae0ccf4a63edd7e0f32b51817d4dbbf1b2228746350ce35495f992d9ef17428495c2e4931fd7eff5ecf45355b3b14c9de32ee40aa7a4fb8b5456c1d8608bda0e28ab965a73ce17cf8c8ff139aecb0ea9e89200741f715aa109c2f8350bd6e239c93f4b1d0a20cde26466c1a9f8fb709a54e4630ee7028f5a38b67c6c2b78d98c19f679374d8090b307112b331cb320d39aae9257a8d917fb63b9e4ea59f25e697d59b745a85e0ed5e707b44174828e0a3c5904dadf5573291d45b83c01c3bf7675e17bd4b52976bf76c2f371aafa1692bc6c3104e5182f47b7d27cdddd7d9b2786263d40fe6386c458cb4f202a8a59018d60ad627481bafbe5e8994c27706ff140808236eebcada8ef994df97da3d3db41cee07fe83284aa0a0094038a5cbc681788d103006569c1bda5764a0ee705845c1f60b9ca9b4ad6a6b2f3907092fef08db7a051ce1e39a345883ebe78b47c914ecab4bc963c4c063e684e7f74a3a63f1595869fb2479bc219ba2db325ac87869c6932d4c59626bd53a8fb3d011f4088419aea4957720ea29ca3b9c4a03fd4e8c77381aef329596068ed803590566c70944041eb280e10c950dd796f72dee31c426227b789766293f0be8405bcf9789c701e33e1aeac30aad8efd310080a20a5afbd7b6b02fdb0cc8d946d39f168f340779d16e945bcfccb97235d52fa621c2961fe1355fa3ff27e91f7a22ea8357b111d35816ea7b0c3a01e408ea4a44733fc0bac85e4d9ad762ea060d9707bef6e92d38009ce2f4823dcd0afcd81a05a16b20f3129b41bd6da612b58699bc6e74c3a3d05069456b39bb640c9b07678eb12dfef3495305b4c8d9ab546d8fd33bda26bac2d0e5da8b3a9d0f136ddff98aae6ca1e2f4ed5f26f0e5fb0d4be312cf2ffcbb3708786bf98ccc1647f9c9979f9d1252e79cd318bbeeb04b06a7fc42cf7b2cee56818bbe60372fc1cfc72b0b758806592ac86cf81cc924e26709422be6c69e9b48c2849d6644ad57d35f6e1bb57630fed40020c6f189280a59f91d94ba193a0a3453cdceb3ba30227d4afb90077078890dcd574ce137a3090400f546f37be88343bdcc19f0a19f68f30f3931127dc641fcb5795095d97f288fa5320a3af5904d9d87eb48c501e1725d368fc87fa5026fca42ee9bb57aa3af22713ca6378e1ab169399121d9e3e088e447671bf5f0145b9efc1ff5e81ff7e6e7eb7ce2914e6ef7d05c256ed54e83f2b0cb28f41d67e44da16a7225d6d26314039b5888f03d7467f97711f5604bb2f7e84a39199f115b8dfb1450f5289acf83a109395efe6415480c12bc7f23e155e0b44a045222f75f62d382222b86802379e7be882e60ca37e433b58ed3c61855f53d55f0694e1fd916513d4e90978a473ffd41abbec177c38194e9efbbf0f8987eabf26524cd93b2ef9fcc3eec04c2231d0c1a0cd6c774a268573547fd498a07c326aacb4d445bd036e2b758077430a05a3cd211401ac8bae1a522fe627ad58a0cd5038baa5e7d1d32458706a890dba440b4f024c3637bf533a6377cb22be10aa0e0870b04c103802dedc3af9900cb18159dfcac264a963aa881fc2ab503b76dc870beb42215f4e06d05f3baa06b08e5221e7e1132762070865ff96e32ab5e9dccad2feece0359273bb39f91867a9bf1af60ffbaaf9021811667b7b1f3cbde80f4be6222ce32393cdf1f509b12d48b26048b0711653fa254a0c2bd5cbe0a400087cbdfb6eb4c9c07a1738d400e21e06b68c61c7d1b2ca9d16c9793d55c108b04cffe2f14edf68b70c9d4dfe8400ba2a72539c8669bff41e0c10fc2869586c773127dd9a29cda0c5f9e6ccdfb7238dac4810d9234ab5f6f69e952d1d53014fd37997065cac0a02abc6963dfe16a5090a9c56a025014f43d542a87482cf7613437ac005bf320f0ea6f72e19d03f1fcca3e3877a1209d67b289cdd6b0f2b016745b9354448485705660010d90c7cee4926b245df60d1060d6f119688f8f24dac58b9596a8e7b7cb75785e0f3f96cbafef18cf438a803486b2725865706b1b5630affbeb0d837ea74f9dd11032d9ae05ea2d8252e3dfd0824df5d0f5d8ee5d32bcaf0e7dfdc0a2adedb8a138f2f64090899285b28b93adfbb063cb3e5180b11572731374ff06ea8456b217ae065749f5d630208a0a05939ae1a28f6b6289e0a758e455f89cbd1fd492717b9bf66291dfd9ed9b02e69c4907ea9c64a29471b39179e81b2f5a4d0947aadf15264b81dff499b23d44a9bf99e9d237940b6da0ef7bda68ac44c41f7083a5e32c788c1bfcdc1e685075dad849e9a25d66d0777e5f0c854d515d5f991c308b6409b84197b14070f51ac0024e22ae61f521163a74caed817d52a3b524d5f7654cf50ff35fc4c89843e44ba889ece117e70e083de8f7c6d6e2f73d4d2962803a8236a529dafd1b9d38f53e54f16f29cd1b75cb0843af3e8d638853af0e8c7212ee14a16b7026e287be97c28fee722f8a789e8a23eebafdace74c0f643d1b75f578d92b418905c45ebc10ffdfe8bf9a56e8d06b174fe0ac3e588c97f31cd733ec08cb6d348d646a2b19a91ccf471c13395354966ad0e9f3489d9013e4158751fe86348ccbe4097bf6bfaa41e47352423c9f7334a7d89c79d49ea0acc08ef57a34da5ab38ff7bca0c5955b98a8d429ce66b5726d53cec2e7e94304890df1e75494ec8608062c4781a2830346a2d26860c07d9c68f81c23e4907403d456a5268729a4ffb3baec71c59471ec765ad6d99f50df384e1d298719d019e6b220127abcf8eb0fdd33a00115a4475c4e5946423420c48d464b5db62db11af64df5a0aa9b0ba7fcaef7aec018d8ed9cf6268c6cc63812e479092077c93b5f78cd5cb780cb69c20f4d908076773a4cf497490e1ffe9eb3850fdfda949577d0b75adebfc2f51a2290e3867cead9d24aab594b3622845c8db82f55f3d3386c56fa1a022039c027b1c7975f0ce6e7a6d00b63b36b3fff7a8ac501f4d3fd5b22d788385042add59755fb92a5973049c1c75ade09143c17fe91f3ae43e3daa5a23caada508ee6db72f876fbdf8591a62815e1f1d69be275f2898c5ecb8931bff36ea8298b6aab7bc0817efb963dd1a6e5a4e8c5a067f9c15d5cd638122ecb501d54ca4c883fc55d8ad85cba5129b8f2fe5ab781f2e049a248f11a65a23b710129d5586bcf76fd28d8e5585f98b00e327e21954e516e99c1ba309f0d0316e97a1edb99b0e9751984b090b913f33a9a0d6ae0cc544779b3c6bb01af56bb29fb62044dd6415da6e11b1cc1c9fdeb2f252ccc7fa2ba5b695d58534c906b54db7162e4125746b3701f922360ce4607f87737abe560a916a6601f8bf98b7256931221c51464e8743a9994cd551115d0fb58d510fc4d48fe9884c56af0e89447bba548af3a454e276e18c72388da93cda190ae02abb3c09da890eff91aeff8b1baf37eaa6c41a2547364d32ce171e78652e66b89dad8387b3c4e473f5de8c71bf8c46cbf92a10983b14561f1491d3b837724b4ad7105d91ebe847544a21a280edddfb9f595aead3d90831978a627b44d761030775982cb1094fb2110d2ce4411d10e0e555badb60978e5a2cbe2d77c6bb97388ee789735d9287bf2acd34c42ac3c1713e5cde94c70d135a5f2e375bb65a614641bb78c3fffe0cc901f8fdc4b6786c36fafd3a995f90339c9f3934998c4a7bd6a04fea8130c26b5a471ecc687cb17dacbbb5634bc2c76bab7d8d89b3c0e233445b33635d68861ffd6aad4511d5f5724ce0f3cd3e791927f16a99cb2cfce82429b304579b3f9f872cdd32ec636abaf6921b56fce3fb1c0528f6cc6d778892baf158115bdd0e955d632f4e26df93885706bb5d56deb1366f9ca2b3e525fc988435ab08d4855dfdff3ac13d78e8f8d4202551558f8133fee3d6eedec6bad1500c613c594646b64fe91e43af7711f334fe787dfdfb6e1bebee623bbb86a8af6fbffe7c614573aff1a778170295ed2b012e7a81b51f07b1740bc939c8a961df3e1b77fbdf46ae9389b6e2cbe559cd08ef5c960cf98ee09d2da8764984a388f941bb682b11ce5a097ea3e8d2a637440545f5759059bf8b478f60e3eb7e09807610fc499ab731089a56daf4bbf3c2e4a8bb85738c44256a390fb1aca0234feaee326a96cb2e332c9e98d880f82c61218ba6792a815754f00a25173af802eb2aca1c82ca2ce54958bebb293807dea67cf69d6d04ffe1c2cf03660e19639b7fb28235e17e307ac7ff534459647b791779a216cd9d58a1f369dd58f2c2736b5234af24e30d966d4392f4bac5a0b38a1889f689174e3be66b22f06481b097e12703c9502402af2b40b62b851a7750904e306c9ad6b21a4daebce52f377e519b42b2394e00e7eb4343cb6049a452d31a0d0f8c9288436436128a040f6086210859b2a7852647eb23d1652b6f1fbdab85f969df26b88cba3e4b0d058ba96296a6b0a76c8bf08d1f6b5df5f56bd9224a7277f1ccbdc3e87cd4ccc8422a7e9e12f50be320c8fc3208886e0046d66d3b505e2d19ddce47013c87fc4e52726c833681b0084cd295d136e96616a82548332da77d54aaeece4169c67e01aee9dfdc71cb4189491f79e51b2cfaab81dee6d462eced349c85a633952eb684bff754e4453034e8be3604e835c170217c69e58970acf13c2b297b524f1f2a3a2e317845315efea9148cc34507258b3af06cc0bcd7562dcdef50ca27e8166da4421e9679b6b6233cd4aa31961fe7903a764de4f91786f78c41820f2ef0b2e555c4155bec55c447268704ec55d07623b28693dec8b1ade2d9ea33a6c2195325c10ccc25378f17bf08a423300ed96fba2599b51aa62639744911fc4dab92a5a37884998ec5d31f0f25949bb92b9b22c8263858251be5b8204c713250262cf8e2ded403e521b248bc3000c4e426863dd216dac39a8490b88b76807c5acc28eb68767391e4d5bd235aaa51455d9a3b1f6c9a09adc78a87a8fa39b830ca2816eba8e1dbd9fa4c544d4ee71e7362011a55fc024d6d58986b08012891062ab4878828738532921008151d88b0f5bdc5b46004e20e88aa389b6444a5a352f8ebfb2f6bddf84248ab59195b01b142ad8289dc1bdbc59658e5993c194357bdb148d26ff773bd7f8a88b7d87be4b7c0ddb21b08b5322afcc119f4fe1374269ce055adc83fc74d40e432b4c0e4941d16bacee89445a777529f603f38b7dab877029d0da6b95b103cc233c06149b259aac143630d618e630e3032c86a7ac955d2a47952aa08a1aed9b0f67b480fa206037dba1ab27d6946a6201c3101c0d2a74622951d40923d919e4d0545c3aaf5aaa76c9d90421dbacaa0eb76f9ad4e892538195adde8da8130f0d2eaa092901fa00d0a58343ab7154794fefd92ab685f582f05450521660f35880f112c0373a28eaad394a6eacdeb45e8d6fa9cbaa2b7a8a162ee4378b949e7ba3e1338b4ba10ef1754bd38f0e6bf6e130008682982349f25aea0e96d38c3f00e0c6b6714d7dd19c91a4c9adb8603f8aa06a185968b68b4226527876d890fc709e67427b26179c74670cd2d19205bae24575085702296803e12ccadf81e8fd52448d80afbcb79500604b960284a18c7088e9fe844fc707bcf241abdab6db6b2e3c001717f8a4e4c8e428bf48767ee0bccf8da1e935d791f5c359c46d5fb26e8ded88b0bbc228b2545c6cf2ab50e2dc4f832a9a8d9da02d36bb3cbda365b62df5bfedf3a10389272d2edfd934fa16a8b00d889079706b040842b13d81ae2cd1f11af687d3a1106adac4491cea5c626d67d36f2cb394803ef2c081ec11235f8106666d15598605a4e3857263d65f0d53fd3fa71645f327027d9d74745aac9666be0b18443998b0fcd1d82255fee96181f9b8f7f53674a8782f42527a643218a8a071bfbd7dc1589b2a27209a6ce3a420e3a529728ffe4ac99315e3a9389b2e6e34012c282de847a879d935db28361f5744700334577b571d2e7fefa6ddd120e00321262c4ff5c34c435629c038c81a4fa3804ee496d2159b8ae93d1c5bba3628943a7471edcf15af1205c4f0a683dd2f883dd12955ebcd6c2eb996b1bb40b86b6fb5dfa00e6085f86d50cd147a4eaf207b0f56ac9baec6b7a259c20d044aedd41df82f61bb8f5a50dd9e0ed3ba10da4a055ea31470034aa56f2f89d93ebf1e88256d2c5bfb44dedee9584dd670b3a4d4ad92820adcd29f5e1ca5b3bd718993b20f7b9d37d66757cb19e453c4a31e56e7fc13b836e8030e0931210760a68f947864894c9c54e10e3ef5abe8465c3937aa794a103f9b7edfcf360d4e6be5b96902ab01ff337e984b600615d304a2ec9146ac9d51cefe2b5ad7b4d0508534ef59796c4a7fa45b755658d38bdea57d1faae21d75428a17f2c74a33d2d5579d19ad0530cc9496f360764fe473cfd2f5bacca7553bad1cf0bc6d4f397ba589271faecd7def05b14f42f46dc2366f3213a53dbddb55582b916f950f503387c2dae9a1fade1b9c9e760118d9f43d866edec9454b372d0b6000f587b1ff6245aabf60d1b3d8b81f0570872abc02efdc2d5f0c2e79f229906347348b5ecf70a5eadd6a8521f52e578d46ba723d75b338189c573e7193b3aedb6e16e93e46c5702a3df0046cbce50cdfff843885d4f364d69f93bf58a2322c707b82e878eec96d11e5db97bbb54606a3a3ccc3bba716261070a6f759a70ed3cb785fd1354fe56648df11863669b70c803b7a5c087784476e157a2f992bae6b946c97ec9cef7f2177337c19075fa1e81ece754b94caa48f9798f5ae43b67cbc72601181d658016845e70398531f6d602664a7d8862be0c5340001be7dcedf8d0e5bb5d80a12d1015a058d4a4532813d4005f74b071f9fb3ec5685a56ffd3fa710656b3961a359b45f940478021f474613ba4deb3e304a1f68a168ac43ca05d31f861beb0395ff4bfc9d4f6ab56e2545488a910154e547d250e9941b1ebd97d7e3c7ad3717702d8cd827566884a88500867eabd570c6ff944b37f03a2a5f5e7b062f0965c5ba4a419c3a01ba9754ce41769d84afbb5cda2c019264508f37c2892dc718bd37fdbe30efde38a717fa68cec0ef02d75d2e41641b02d8a775ce2cc70296c08692c0f0227a1ce3782c23bb6f0b7c0e947dc59a02418f348503aa02ff2da4ea0a018c4adee5fbea76fd562feeff4d913043a74ecf1a4260336155adf756f97f8faae8332ed78435e6b31b2c12456971f1d85ec6934f2245f9b8579678249e655eb55c13d8f8beac1375fa1aa285d89820647269168737c91e303624493f9a86bf4b7053a5f1b138446c7c616766a3ec040e699e1f6b8ad5ecf07cbe3450f5c8f994ad595d6a65bfc0c028692991d157e7ffcdcf78a32252a921b0ceffffb71556b79a8ec80ae32ad098869aafae6ac00f5f2563e7d608269eea5bbb73f3e9541cdcc05aad7a3262bc1c1f5dc364770ec555fac235ac423b137404ed58d5936d942da526d6625a4ecc767a182b5bfe2b5109d3542acfda7750e633cc764cbb4706cfd358096864d548cb2035b03c0afefba438808de4d7c49c6971c094016bccbaedd25a0f3757e17746971a1aafa06f0b4eb1b128964209412544317c9baae3f7ad2892b0753b59a20c6931315bca66c82ec74cc18a222e85413787f4c3817407375f6ab3cb182411481de0bde98fcb7c6d01ba216b7f1ab1e6cf2ac521f66830b4ff48e2e0f72c0c203c918500f8866d32e86310df62b70c3b9682b75c14a5bb4c8e96035ddf58dbbc4dab52490b80e3a602af558ed2ece06913f8911de014f02696bbdfe9d990c545d896ec6cd29f28f1da07ba22d7a17397cef21d0b649d166b9e1f3e2decbc13e366b91b1055cc833af5d1054079be0fee50d921cfa72976422f2ae8d020c50ebd7e7ea7dd9bf03ba9dd76ff92c12cfa9620166610b19e59d4d044a47b7d91fbfca84c577dacf19968195f70c0b6d17cb6c60fb4778be6054909d53bd60c0925c76c8cf49590b9e59c31f320726096df76cb2ed2ac3ce7c3c862457688d415d34753a446d04f2e6770ad99d64fc86369ffb6da8a56cc8bda7964fc1b3add9e4ca4e4fd15d3f23a660a16bb5cfff52164790f7aa21d44b894859663f293308ad905a8ff294981c42c92f4c0782befb6160c5f78e3abab58371480e0c53cd4c3c29225124ad802b3ff31cd10f37bbf0cc8de2c3b15a509520c4dabdc5adcd12f4f75e59f3f287ff1280e2b1394966c0ac11a012b00b6668e5b599ec07a1c30b8c8d3700cd1e2ff65ee5395312525fe974be663b06b84cbf46c60e1f2eda4f84574d74cc3c8ae8bf79b2594d26ccf7e9dac6adc3220b73f6c8689fddc7b1b31bd9ca6032aec332a8f76aeaf5e333df3032dd0f319e5f8cbdef2fc79e4ec2ae40a886b1dab041ae415c6166e3d401665b1163d31cd83ef7632f9e2dd7407781813804c20adda0ac171d48559d75b03dd8eafdb1cb6c2434850e163b2f395aed5c0cc71969834acca8ce822f9944eac61843fd23e3d699c4920f2a67fc95e7323f9b30306d3dba8064c4915d5dde0b8fc7a104a1fc842a4828b76d4cc5d2a700ba67e2af9c897a57e9a41877518d8d0b359686a45c11300fa77b3142219c14c94af760df6de2f4b385f16a062afff9b9007905a3a8ea55bb9cef28f0764ebb0c7fce0d5857d6d443e81118723081dc29a6dd0438699c05bc8767b6c06a66f44aa7607a92e0d173598ea7a65408dfaecd9736f4daf482ba82e5996d4a44816af480332b27af6f6c94c80996142a45dc25602b79f3f05b0ebf35d8bef6bb0a89aa68ca818f0a1d2a6642db5a4b0b70feb1800ee62be3715cc206ca1e4e247edaccefab20219747374e7d71855122dd91027575dbdb24523f2bc6d22dc9175ac8ec73398987bd8a0dcde68089df16e81d98ced4cd9a599a206cf4754fe01a3afe79921a204a036238550c7cea4d3e2cfed4eac03dd1e9a5aaf62e48073b937bc604dab186b10f4c21945dcb29143f18df5757ac9f2a6b013967b2bed62419b9ca1e9b841f8517c463dc68ffb8cc60381980a41e840c44394632504e5f422351751783266d0ed34769bd9c8f3bfe680747f14e8a6ee00bba6bd6557ae51e36ff418ff00cf1e6c861cdb896fe0502ad02f529b574c25e281114c450c91a00cb0fda0880ac40854d9fea5db6c0b671a5b77b8a876210cf3fb9db9cc0cd60a265ff88e1a388db62f94e69fd9a7bc2d3f891759412d6fccba9211ac023dc5b6b8e6ae8dbe72715184219a748a093bc920c3d5de71647c8cbfae37ccf088a6cc4aace7437ba0b901dce7e2caf678cf64466f7bef3d0392758bb8d5c29dd5c07664196a5859aaaeedbe4e884a26ddc12637f7cf33aff2f7afa516b435120d5cda8f9501756078953eb2be529b212159367dc19a53ce19f36195329cce5516c2205288724299f2b91b409f0a65ef2adfbda037a3f6a260d0b3e473553570da3a71365a86660b0161adf159765299e29be226bfb4c534b0d4ce1940a6116a400cf5c273058abe8bd41c4c545f082630d5ce99c393688bef49dabc03580b4c2f7fd37e3cb755bb795b8fdaf98c2f9efbd4a880aa0986af0775fe562333ca1d91dc34f21b647009b43e2e21aec7700a2de19964dcdec7a9dea1636e08fff7e54d6b3fa779d382b023c522abdcd67371ad44c9ccc1dad5805e14318c1a8439ad4b741d24bfcd34b9ad389300ec82dfdb63455f40c1c5553c6e188f38c18a397c733ff5f1531a2e2b3cdea8a644935c50372c84484466f2e6f5f3a5fb65d89e5aad14f0979f82170eb7008a274ed194d911405f6db2865285ddee9c5c6e37114fe13a369d09cd976b05e6610b71042c7dd9ca193673ed1d210d519ce4446f3a64f7faee8bfbc2584910d854d814f3cf457712d92cef63fcc36d64cc194f48c0a0d79c40eadc2affb0bf1e8b18a1672337d360c8d58eb09671e56f5585f78a4c0c6968554014cd37a8faff2f527f28d05ed6fc0ebcb99b95355db95fb0a5fc85ae96a555180b73a63aa9c4680f16fe7fbf662dd266d6ee9e17bd8b1121bf671490449d68f728e4f46db5b65dd6ceb1d8646c3d3c5d4f6f5c1eed2d9360af93a0ba5c96b467d5e7ca4a041a372f0f088254d17275288ae77452d5e70ef5db48d232c7d964ef7a46d0d77f3b1da241cc26977b15a54ff11d91bb5e01aa69ad4e52026bae9e187dc7ad1e0e6038b8ccc56b36546df35aeadb59626ec28e428b6cc732325c8a68473309279ad0b0f818bbfa3843c488d2dfe7744eee73e30bdf6cd9c8032d526940518ef809d4aceb8d767aa52f608c3f370a8b87c75cd049101431cec5671ba3d0ebe29b45b4541794bd9485028a26275a0c4616dfc57e86862d774b6253109d60c7ad1834b8d106935af0e1a38a7e14b0b54c0220f61449a97e5348c13956df56af9875c0284b40f41335c0faa8bd8da1cd46537136bb1be1d16bccca6118f11c684abcd04be94b1db10b2bef2c0b1b951bdb12b9cf9b8396ec6adf65127c5c18bd6cf54b6ad4b178fc1c296a5d8f44f468b446e207db093098f6897a96aaa7b475a6261bcd34fa6bbb0dc253857293267c78f7d327a435179db7d3f133cb5a57579f5927bc30ac60b889fe92eadb8d931fd02d74761d90b3c357c4b23207fd682d0095577ff051beb936e60fd4f3bca31964f1ad3e6fa16dd27b65a6db851951bd70e3935d9d70ed87bc81b38de2a7bf31db4a66c5c1f0ab91cdbcb3756e3579d0984ac3a05f9255eac4d8645ccfd64d31de4187553c06d6c9f5d4c24ae9da482d20d2cf8e5d3e5ea9f6f10b88e2d2b7df14ddf834076a57429bb2bca01f8f269eaf839f70c0fc708ef9d6915a452263032626a1aa4ca494c4666087c038dc7be9ed661c8daf54f35f768fdc1a1d4ebb67bb246b01303df717fee50df25b49afd784822c2f53cf4fe51422d61095df25d27ce03c7fddbce7020c49347db05f2a3019dfb89cd4f4ece87c996683d25c0b0b1061fe6e7ba9cc4f3894e6ab60a555bc5786a91d594c323055fb73bdff4dd4db21af9714318d0dc429cf0ac293a49642e37ee5fa0a5e8a844851e704423ae80a54d3f1ba28ef142a8802880b70e2568c68cf567b10b25aadfda2a9a1c3acaf6053d4f2a788574848fc3348ce20e9fe608c82e3e893d00b741bf6a1dcab2b91a5c6ba8425784d11e82e6c3153cb41f487f79e7388ba41069f4b56b7fc223df6a0548e8e7a205ad7d0c5b42de19770a2c9522bf0a4ae8cb2f634c8d34b4f6c461aa657f7efa90502c96a1424c1af006eed45324184973976437f57dd0f5b3fe9db641da9cc3bd7fa9bc592fc3c3979c2bd77b94e709cd0bc4cd308bd916e3e47ab35e88b59fd57280e7d399e985e6105ff91cbffb0e5daebdad9e55b19aef2c852c1c185de180df2ea3b0ef21d45429f7c3a6d3c8b9bdf6ab538f59fee46e2d597b1af7fa2b481c1f6a61be01517a3f8fc1ba9ed4be665a3a59940725a5c97d443adbb61eef73cfefb676751c6fb0d7847dc86fa36edf6fd72a4cfbaa319972f1e5cec130a0cc50fc125fa2b791a078724240d4b95d919e0e300a96112a46c4cf0674a7e3e19a45e1089dd58779b198d5c9b44c8afd157b4c256d64def269d958175dd88d2476251b03b17be05a7cbf2b7ea355acefe36e2d54d5f6882c6b370992fae1a0dbd865268e2b0476e66a61efdb9e8e7388840d0e58e4b9812ad3547ff3dc41d38a498c80226b1daf8ff3179f6af63583696fde7b9c0a2c7e902ab817c4627779b23201b44b1215eed9bf46c6a75b0961050f48f1b8c6ddc4dee9e86d8f2e0127e63a7b2f72808bd9361785d20b3d7880edfad31d19ab3bf879995bedbebf6d4298bb4f7e3366ede337a44b5e110de15786bb033a4917c58df2a18914cd671a7e3c4d051cf815ca9140de1dd7534cf27951b86ff5c1ad08f9cc9af67f55e5a72f636822884b1d9068043d53ba4c8b1a5ae18b6fbc1dcb84c08a0e3a89c29b81da80852e5cb6feeddbd44aa3936748d760b8ac8919a803b7769d43bbc0adf938f4263c8ee6a63a2161437e73ef2df6a84f4984428b1ad62f80890400b0729f3b20b6e6dac2934fd99cd4415b1a1b250b6b16ab327cc0c34b72dfa78fe5bafe16d4d52c887d28a074e3095bbfc0b9448f489299df8b444b99c203a6dfbcd1864a84e3662e82b0fc91e854f6186f82e5826c6fd880231fef9902879a76b260c854b58 +Output = 54b07d9f0931e38598a5cefe5b749572 + +Len = 117616 +Msg = beef0104c0f21e8114d41dd179e75bf4be4fba4e85b78cfd4843b46a99c5071eae33f9d81c5975dce3cb0c8dab1e523e4d57854695a47052474a8f005fdf74a99db9697d41a657d614dde7c6a735e6f2df95eea4b1ac431b2be2fb26b48e62f194699c1eb7438c17adf4f5a3f696dfb87df13d916237ccfffcf23e041f3a989e9a2bd9e10496dc48b9f77f4d1fa705372e53b9342fadd4a7c361a1c3284bdf59b8e767eeb2090f113dcecdecaad22018faa3abb6a07623bb88196c8b5729ffcaf5858f6e4902ec19436127a7207ef702e9c95b3e3dfa81e25101e783353cc09859ed99894feb3c09d298d5a60812539e04ae11f58fa2b6c428015ad449edea6bec08cd664e2bc788f35b1e12eaf8fc94523815021dd4890a14010ca51ba244edb7bc722ecd2a553fad924c134e97ba8bdb50ae8e6ff9c45c1ee9461f34c497c4c1f2d2085550aed60825a5d0bd57552ca8df26c10e7a2d614ca1506a1bbcab981293331d6d0599f40cfc7272bfa0941ec0cbc3c281bd8dc2a81272ad58f14812b385de959db1e041c2fffa20dada40092cfeceba502cab273a22f41174ca36d9abb21b976dbc496731178703986d2197f25e8ed0042e513609ba1dbdf6b13c960200324b668e9d0b612a5f4380c2ff6e1cd54d2d242a459a1dc336d9660d24f1c1596ada0f8fa3d85b21cb071a3fa236b14a51f8388a50f97e23878f4d45b491efa40c6cf028257326e51377ef4dd298baa4e45ac9b53afc35c4580532c3b51f94c9602892bfe987ca5d7fbc8655563b3ecd4c7b5e13cb4a488cf1639deeee42b9afae377cbeb9ba507057fe67bdf7c945acd1827f0ccb8cc26599d2162e29a364403ec1368b5bb4bf08e2641bee7de7d829bd98b4080169a8369a7a26eb2ceaa06357ed4990971e1f0c69172951b03ffd2c56e4866f368a04e73a82548dc0be720043e33c3337a07963343f194d5779be9de68f7ca93296dd5fc212297cadc7e40048cc97de01e1d4f78b0274493c3d2364b3c01f1ebd363c887a542c21bbaefd49afd0e3f8bf8a38afb68bc1af2531336a06a0f5379f122849a96ee5e2b21bc5c4c016a7e93742ad73fc0088e6db00f6952657885a9fd1a98a9888dc2859b54559c2c76b1832b23c2ba78a5256265074ce5d0c60f0871bc73390cb9a5c792584f1ff0ab8ef7782ecbffd50a567cdcab6fef1e703621d9a8b2dd75ea6e4da128a72bd0814d5d059c618477b0c819a15c30b2b11fb162af3fc5eb56a882a442560c645e80a3203dfd01ccc320c0c53d9a3df53b2d07675d123af7417c9947f060dd3dfd31f6fd9bd14b4d69e2f70c1c05f60b1f108e9c8da06085b8cf08c525c9983d2f1ddf21a9b9ac9abe6fc15ac70fe788cf72dd6e9b6af52b1f2857987d00dbc6869cb248e2068419434fb64dc91880e2eecc6a7a10e2673bf7010c3e4097068e764716dfcf58806d9adb5c318cc0609ddf75cc3b88a7155cd2f1ad132b0ca6e980958362ec202fec27bb19b29c97f53e2407692f6d19ade22572a0d386c24b6c38107e5ea2edc1397c67755d82ffbd385f09c7c238ca9f8080fc9dec0e68528b0f306e4f9e1202c9fb59057eba682710d2f57e90662a48ac57f7eac90c5f5aca688de992384d6302371830b2ad81d15c4242d4168fc957ca2d0d1e072b27c2aef68166e2fbf04096b22d8d85f6ad3a7f0f8a8ec110183b6e72a4ae02b55238ad1ba36c9e739b49ebfee18255007ad0fdad25052c91a771fdcb472158655f1b495a7c714119bedd76700ca5cc655b135cadbacdc58ef78a1c997d0e74a5bef90825650b6768cb89caa7e76e489fce902073b44f085278e23f5faedbf3e0e2307e2ef5917deb51cd5d291a52561a55d5cdb19a0f8196bc18ea9064f032c1797fffb9c6a9f11bd216a2560dd8716f8142d8c9d495add621ac82de3801dda1d536117830cb6d64ecf43ec14a9726f9c165b63f1c68096b5a0bac9b8087310c95d167cccc6c4f60d2f496ed48e4e363a6bcfa83a9fd00f0b5c4cc5ad6d6f98c3bf0572a021313aa44862f5c9168331791c72a3a35db40f0d546768ec397739b281154327a46567bb2277c71ac87929022f2b9c5187935d6392f1fb9af3f5ba3ea9303588d7c948f9c6712df02c98e57cafe1da6fa5d4c2b41ed4c6e22450e410413d92ec42c3a4073b366f73cb492f90a17ea6233fe106a8fef611ea53f07fd05023a07a6ebc428c89b0d5ca2cf2cde60fe94895de21f1e83c4124da083d5326dfcca85be21deb31b9c5a71ed8fd8825000a08ef09fc4a1ce09b46dbcc9f27b8f51ff1b6264c679ed25f2c9655d028f57dc92d5649dadbecf0eec115257ec4319a04c5b4c3b37e7adc65ad5b2dd575008d0e01f425236afe7621dbaf9e42f337d6636a7d40b8f86ee0bf7294e77237eb38c1caf1253fc0fd791cddd1bc537a72b224293825c59c21e455c36a0c11356186cad175d197a58f02c70fa50919218c35304a0dfb41333cf30fe8052319380880115ea7b291e15c180ab8500cfdb22a686d15254894856612d5288cb4f208882d7fb9af4f963b0dc3cd21fd4d65f3f751c4d2a897255a484b8fcd2848036d8a96fa29b6300f7c4a0bf893d255baae98fa1dc8be6d5e7a89a5251d0066b62fb6c16bf7e4de626cbaf97354f7ab65a9b86b61408d54a6add2297f613d967215b3b8bb6c60e0f9d3069426ac95d7ccadfdab768240d365bacbdd85e00660a0e82a83d0ce53be3a79d6e5f9e5d46259810fc146d6fd73046a1bcb20e4844da670c2289465e4018f26d0f2d546dbd373ef97b8b884ecbae9856bfb36b3dee4ed7524b1ee7b3c305fa19fc5a016d3b281bd3d95b3d337327dd36273b0963dadddbff725c55682d311b3e966449ee388edb4a862210d0363281ba93d77d5c931de15e48d033fdf730f2457dba72634db1e9c8127e9787bd45327e76172b8a9f7594193f08f7e7b97c0bc902eb3f5ee367c3d6feaf35cc40d64bdc5e588870688b409ab56515b7dc78c423d674e55381e6f5e1bb527030996c5a6ebd3a389076a5936d5c8311e0d8bdb80058c628c3a1d5fc92c8f6db470f8dcaa0032aa07d527ae90b84c170e556c153c91a7d6e31dbab4444b81adb621ba1390ad0b844997471ddefdedeb747af1a23f88bf92a2097ed6982091cf524564d12299651b9776500dea4bb09598a7a3eb5193dd7e1125ef2e8d52c9bbd0047e7d266c4856399acce67a4b9ffdc2020856395a0882789a9722ea8a31597885918165d0bd1d762a420f57a4c10c3ab3aa4cc18448861e8ffe1b796fd09291f12444a76bca58984f3bf249ff1ea847e31136afbaa5724c2daa8200aaae4c656fc02eb3e57aefe5303ef61704bfba33bac37acca3282e4a9c25bd48e2d3703a28eca753e7d2cba6f6d3838b5aab2b445f4a82e0e8d8a26003f73619c048e7594430174d19dcd222c882016baaeae1c3fb2eb4b330beb7d68aa6533aec14970aea14e66a229feda3cfd4d8809b85c6f8b5f57a0c24e053f35bbc7e750d3f6a9542217c72ab23056f32507192d683c12ab6293bb56b485f009bc11e90cbd2474175de422d5b7100cf1a7f326902ecb9a225515e74aefec445753b9a54d0d41557abd49e63db90c80bafe784ccc8c998a92bf64d129508680a0fb45c89c14dbe1f0b89f9dbd288436b1812d084d0214585f09f6f57c770359791b3cbf7494529e1be87bc5ee9625b377e887c5ac1fca87e9bd42c0aed3e123324c14f650ec53ee5ec564db4c825f7b608cff2134462a9de551eecf5ae78e628f065509db8d4e572bb7c16a516d9fe31df71987a005c30eb450317deb3289bbc1c273665f07b06d256837df97b865af02af6d8569ef125ef940d158ea4551838d08f6a865ec1894be3f3ec77a135f23b12e4196ec52a703069c44fcd280845e4362652c8a9ae56268b52cae82deeae5abfc5c28b1e0df9f7edaf2b62e7480a07737357f2794a56ab752a7f14cab7769458203d7550a5a98b475612178a1d4feab2fee1ce789e6f21ca0273c31e9a3233067ef1f404f76636a0416db2b98ffcd6195059224cb18ad2b1630ebdd19eca7df06646d0e20d193e20f9a2fc1ba7f911d0f025b79d8b900453d4b8c98ccb26bb3f60a4d091eeabecee051bbd596c2ee30066af5514356700d7ddd9b1f72a2f341af473bebaa2028833ed3ebd1ae78496d13b5ec358b6f90e6606d93bb9c2cb32aaab1b600432085a163a75c3071ee1716af699cb12162c7528d820307a9ce3fb160c047e18a5a3a9c0732799c81b2fbbf41fca33ea5eea7f44da1657e4be60d887a097e29d03bdbf5920bb0504e654bd963f58c487951a72e395237a9d32281125ed3a533c543de208c99bd063853abf79ddab4692c3a4972c8fb05f4d0025ee177d56989da10b5bf5f72ec28f02c708c4812b81b2f06f36485223cf9d2e3db786d8547a67f10f724931dca22d64e5e2a0b3403d902565975e66e69234c65ab399849ac1434d316e2c000d3ae8b47b9335fc5241d46a6d0197515f70bccf632b790b9235d8bc5999c5eb295065f97064aae3c95625c56fbe1b9df831da5240674df5a39dcf466f393d7a98ad4f3bae9d28f10d442b40541411d1189c3856d9af3ec834c3cff35b97bb35c3194c831c86d6ac86d38fe2024ca176267b7ee3164b740eaf6d81cc05fb68a5105b04d8a267dd9e9ccaf9b362adf5138c945401df82164e7b648cd855ac6c51e83d21422887644fb8f310bc5c813230b1af60b91c9e4d1100709a2034f4eec1b48548c9962f944640147d04d90e8356fd964d12b5e540dea65850aa8819167edafc2376d4a7950b9ef6e893bf9e0e0bd810c11592a0183dd5e658803b640d0fc46a5a50cb378e263861f772f877fbdaaae464c99b16fcb6f5e05aaa331dfbfcd897955f6127a720781d55a86ae17348dbdbe036b99115d26e0ffd2e5a8c08ce804a7bac7fbe0a7fc5f1a83dff269edfd3bdda64d2578a18a83bea1696f95a0c234db43e0e45dcce86a6993a9d8da326fb52fd5ccfb184110c2cc96ad1ab1c3e2866e91ef40448922504cfa62e5daaa5b961ee2599e72b4300a94130f2eb74edf95ec2521b43735509d3f38999dfdde576b458c71641a638ed7cfa72e1018aa0fdfce6e4694a889e9adbacecc65b626d9b11e14b30071e783c6b9d37863587df9c0afedbc860adf640e4a3d69d1861c58e4131b8ce80ba89533fd288c9ce93323e4eb1401fcf0ae463b57f4f06600376b90cf116d8f5a3f59cbf406c9216d5224b92a81a55ddc9f06b17e95fe9796f078339c96d35ae00447db590ebc95376362b9c8a7154d30fa2c0d2890f2eacce00539260c6cff3fafc60e7690d56ce9df74734004e03f90783caae0666bd4148ea93dd5f288d0cb9a7ac1f74db21cf73eb0524b2b84a96d61af273096c7e80044caae36d9c574064ccc923595c129e209cce3347b711f3a7ef9ee8392a5ab12bae006c332915d924f41fbbbf981282cb920b2868534059a08b37d63fa7371be498fd4059d7af1d20a616b14e9807c59d5322ccbc95c00ee9752605c2ecff075893092686ae0e55816a16ccaf63dbadbd697de7ec84775aab35d23d6bff98bdaf268ce762b718c86ec887d38a017483535c82419f284e870e54a246e2eaec8510daee4b96f9b6c01049d18f867bbc8e89b29ba17e8a2ddc395900e7ceb5e1a7a336971aca7cd1838e745cc84cd8991885f52fd030b1fda055cc53ead766616a92c2ef1ca5494f5a11d290458420f5676faca5975ea5a41c89360215a607531802065f19d0671a8dc1e9d6d0d55cb7c4706067bcb06f0c98fe1e7731e39f9ef71d8b4dd8f3de1864c544942fe793c777b098dc07cd161b5bdb0c190536372c500bd82222b5b733274668332b63cd0dc856dc6c425ea2bbaf4988505b45d6e46af47547bfbef9511d6bdf1c8cf11270ff8ab47f330a1cd3da701b84f9bb84ae8fffeb2277b7ac5c8f5d30b61a386bdb6376a97da47a8b4b25774c1da83e49720554c11d1248d93bc543e3689de1df333d3f42cf5b56f70bd887a48330762e18151c7f9f571887d60746809cdc937761d51008db204569fa3bc7aa1f590d3a89077fae0f0fd0be159d8e90b9a0f73a4d730f820abdefe7029660e657eba876ab23a4d5d7021786e0ce429b27b1b530df5f6438c4f8fd7c0a3079e094adf2e867b1b47c5ef896e81fe48b274dd7746100e038b2729b172dfb523b213f68909aa6f8d62b0cb9f5ebba2590be95dadcd69640b3797a6ce404bb44ce30bee42d944e41336b490cdb9899da7ae7668196968ac5fc1446340d08334e59957be96fdc48d4f2c37dbbf0f5a54a702b28954aa9c5b83c0b3cba39414bb804d9dc3ffe7c7df93dbc108cdd0dc4bf9b1044df9f182e619ae7c6c811b8ecc9f9834bad837cd4f839dc6b484ae5df7f222020243eeaac073f2e4b243d74fcca5d1b2ffda6e2341810aef4b7de87dfd32ee3252fcf2729f3526b3397647d64035b29f0f50eb887a2eab714a042faaa03e7e0bbc7f9d78c6efc23e5e92edc0dbc1836f65e6406b4deee8133cc1e462a57749f4bb36403bdbe65e0cbe24598de3dbfc9a8ff4fd2a3144593ba0419744517fea83bbcb9b3a32bb4294c4a4eb9becd766b70a278263c8c16750f0edb8ae58aac84f5aaa0ed28ff1287d0e8f44897b665a3b50d8609678d8ab09cb20d93f1f9a7badf45c0bb3380a681bf85dc4c503eb6f9e00922840c61c9cbc8ba579451ac16d26354c224adf8999f82e9b1cdd1ae8ef5575ef49d134efa4efaec6097edeb2254e8a14d317cad12697fdc19d4024e182083d4a35e649d46c19c12d1a3adfef3c9d6f20ae889e83a681f26bc67cb657901cc33d8cfe796d4ad15f251c1792cb0b99410a153bcf03823ca8e4491143ddc219b423af78580cd9acd5589f839bf82aa8cc3b97afd0f3522e9de5657c51c670656ca72de24a5580e2c022050d5fd902625d2fa63358b59eee2dc9dc3c64b423a6793278cad4b9e939ac3bfd1352f03b4c7070e184aadcb0e1f51bedcff1296453465020a09bbc6b07f5e0e84419c02ddda289aa126bdb40a060464aa58b88bad2708ab5f1e3df9ee439cb470e28eb627c6fe4904af033b6b01bf3536ba8748fca643c993d6185fd34e455a9dfe4b461cf451c04bcfc689b87748d9870bc5f6b91be004af18961fe90821a7147e1cdb44cae9aa7e6d50c579d068f9a535bbbc6deda506b9cbfd62b8daf744dc4b499d26b18dada371e7183773e73d991eb1c39f845b74bcd9964fc72a91d8fd4b1ab34a120771c4c2d4aa78ca8d4c6ab0ee32d748caf9bd29a90f9e61b50c8068d74638531d9fe84a5fa2c73c22cf20d1bc329ea1b93bc6a37ec9c5e82c886c89c77d79de98df18f0cf29a9316d6dc46b61eb7af7f1e2de2f5ca6c525bef3c996338194193fd85b9c6e66a81137cf5d652684f6b23b970eb58dce248232f6a0766379116edc33b93682824b45489cf3a75326973a5d025d1d57686d665238f8139f8e794435973aa754a41a33687d8f1930f8e7f71fcad34f039c2539e462d9542fe8520214ade7d52cf59e445f1a37a305236d524b977834d894d662b11b4b215aae27123f1dc7a9529d5ee0f41af62d19ceb1b1a71355b22075074b810c57626a097ddb7e8ee20b0dc3e370f126d19fb5223c7dfde471b2216a415b1cdc04ffa520dec59ba941e4a68fb35a1ce5d2e12147951f13b2d41d25980bfa49345be1541cd1385c15eb1a652a58083d0000dba56444fdb12687d9722aed90d2bc62eebe24df9c8b7ae89792bc5ae01e1e637689a1d281a1e791d050466f857d1b230f2d618e59ee824141756c3f4c86e804981427c612aa9efae809151a4213faa62de7fa69d74ed3fd02566391b33c05ea2a8f1ea81793f3cb0be4be752d5b00f12e3518f57f721524c17cc9d77d091e1d1542ae01fa258d0b20286909af1fd60efc5fe3bcb724f1bf6630c59a11b5dba63f75fd57222815c20f1e405c312523057dad8245e82a0ed5d8ba7f61d908e38c92703635f76432f8c00e68f8193690dc9b671e187b4d166e016220b43ccadfd7f57a7f20e1a08db61a3f0c65d01ac59d3cd4debed655ae92c870d01ba2c276904fdd00a248a6ce0307fb5229bf9969504a3debbe630a804a152bb61f73b951be8adfe342943c9ce86f8862ce4d7b24fbacea6ca08934349dd0dcfb47187718698dc94d892d2b9f6c382f65dce187a0a84a238aedaf9a7294e2cbc61cf7c4729940e368fd7c3a80974b3883d9e586825e0c306d2c3f05e13631404025796807578b745c28e733e77190ebe34fc0417526da583ce5a03d298ba68391ea062a80aa56c65192d7dc7b03ef90aec5da7d1f079ce520a03a0af39b29dbe0f307d3859b891f6ec1b5ffe554516e0bc49b0528093a1d40e67534e76fa39255c9e22bbd310cc8db3fe762cd6c9cce23d36ba039349c49c53eb982ac0efaee1af301fad174c709c194d7ced954baf81e7ab215fa91abb0d6316ebdeb80183854f9ca08686ca3294846eb0ab41391342341d82d12274d9c9c46fcad4bcee3b72e64a71d2b22867297df8de004b10bca5ab145b02afe6b533e05cb1a75ff45b5cebaff00c29d5a2ad7e7241672370f01ec516166e91fee1ee5f643cc101b25785c863a7ad4e5059a2fe41875a5ac842301a99516f891bc45b9a2cd8ac52b6a49014dbf530903710ac860d0c546185476c042478afe5cbf10e190cf1e3c35fe70e499f8530bfe84c1c9e2b6cefc84664352a3e188a489ddc78648b34e1c44c8352ff14c417fde28095bf3315770f7a2d1df54c9d9921f00b1cf53dfe30d5db0e007de23e710ac4428a61aa92a4979f06a8ede69456f260f17e538bda5b98a9eb896e7e60b646fbf67d1df860d3012385487c82793e3a7f241ef7fb35bc5d27a060494fb76232f830e05ca31c9cdcb62d8f39a6d8d98a8917716b12bcfdc3e2c12796dcbf0f6f4776569641026c7ab563efadda2f93334d40182558cc7a4d49d241cfbbe4185c783b426348cebc7bafdcec3182da05f50a3265af33e0cc59eb38415c53d3077af8f4263c20ee274013dd077d3784ac206e630c713a966e8a4577a8d53ae8674b583584997fcd17787ff8b3d97eabe045d8565f03e359cb5ed724dac2e7a0b26e0473e003abf8177552c483eeaebc6ce5e680efefb4a78d381ea4699dd0a873238c43caf33c0ba1d71aa4fa157e328c80f777218d350c0eb68a9ad7de8c5c243c5e09a7e0b664311e563e88f633aad997a9bdb674daf3da4aa95ca7fd81283ff90849f964918e6fab93d5b3098591de9a7ba8f12f1cfb7a75098e4c8345b940ea099941f75406980f322efab7da640629cbdd7424718f69b6299447f8407bb19fd05c1401845954c9df9ed299a8adeaa638dfb1fd8f3c129e67f33cd517ec1c8b0b26e22b98f3206beaa9dd1786ebe69041043d02bc6e1f9e634f7da21276ec2c086e3ede08608565f1c47cc9eb8a9488530f77ec8fa1fb2699fd8cd7f6c89b0356b67c81592dee28739334194d267eef0d45e5038f841fc78a820cef0b4dc39184844dbe11b7e553ee8a959e322c0054ce4c16f02270f811a371507fe682d067004c04fcb89ae558c11f03c12127c32a2476802aeee53e65734019d30ee45be4589244c5c44378a7a9c5111a908621ff9e79b32c5b7d3d637872abb0eafec0a9fbeb8f91ab4e19e0f721400316e3b7459aba227cee958f7c319d9872113e992878bc37f8f4173365479813331abcfd8cb7bc40851ebaaf102d05529f08306fd04d88f064354b7fd4f9adfcf3127e6f4553f4bfdd627916dfd95e8ca046509f41f8d62b5bd5373980abe78ffb94a487002df7d30e604d513ba51d892e322bb1edf9385b485a870b28dcb92e9527cbcf3d744a3c608ea3d8a43ea6ea81723e4244cd0402c23b976f1deab76b583250c25de5404eac541937ba04af23528cf4cad6e2dda451ff04dfd07446c8cd5adfeb01ef8eac2a4729d8dd757ac609c8dba624e929d2602b4bc7f1080bb96cf7c5b399f199b762de32469f2fbe352fdc7f8eaf3e8cff8546c8c1fff45adfaf9faea6b6a9d602fe8fdefb6f81ce132d2e4ccef6515b9e29b828584de7d88e1db9075eb866e81155e28c81df2a4ec29a44cff16ad03a30d615d6f57b40f9572fea4c264fb72464f16cd7546e77a4d5ffa665909d298d4a02d65123f8ae31cd6e9a09b7cd293f7069852bfd8df864cfb5c9ca170dcbe96c4880236e567e1653424eac6db12b7db616d216e7ce3b030265255a1f2d45c2fa1f99ca2f053f1b7b538ec0b2ac3c83b891ca04ad9f9e0430765fa1f38c15ae85e089b1f0957fb5c81ac0c3411edad5fa52d391a982cfecbc71cf1e4eaab9f09243d6775d879e79abf08b40737994e8fde2953a86081f2118d00a3b8af9a15da1a21686c04c39dba97d54b4e45cf93135c9755bada02a45d829878622f97a3a3693b07cb363d0503329939cfe295643246ffa919adb6fdf7cd6cd9ac13a931ab3813aa5c15ee08bfb8dfe553b7f5a936c4e9b68d82a5e32698042c5c03d9a83bb032bbe54ade8c34512cb9a16cf64a6500dee4de01d83f3308e9da3ba62eee9bf91fa02f7c157aac230a1c83a8a02f081f659bd3d156fa6647a24c11a5b0ec133a62c302549cbb6d590076bf13fc41664c0743359b27fa077db7e9a6a7678aeb9b848a267a7a35bf1997301e561166c9ad4b44cc0654295ed1b018c1555cb16a450c5f6295b7d2ec8b55b06819e887776ab90760bbe46eb36c16432c579647d96082a97f4d5c793bd9c55f6503878db9acd9f2b961dfb04d7671d1ad541d3580136fcf464c6f12f3286ca5dcbdf85ed79b346e9ea14ed97516472a0df5fa64a7875a3b7c37fb845da3d4eb97ef43e4195e51e4d92338d0737422b613e134bb96e4cb54ecb905b9c16f84975c406e05c71eb8ba308ea57d8fb989dc89c0d32194514a825d78979867b70413f45883ab2802f25a6c8b9dc8110d0507353ce080ebf6602d961cb80996a1ddc527e089bd8533862a55c1299940971d9ce1fb61bfe1fc94bd604e71f497559617bc80892326d8fc94b2d950d86580590453a561c6bf8b6f9a83b6c941b3fcb7707ddf8ac5531addfe4d7a1b6dc8ef41a754e3e57dcdca782dc7fbc8d92fbec83730a6948b5421b0d2ec4d9040b10d5eedab5df7cc52e237dcf4c576a256c252d69e7caf5d7014fd7758f9ba3a6802373f22ba9e9b98fb3410d1bedc856f31ddb48f0ae423f11b4d5559279e4134f554037fa2e3d2e53bf832278c016ac132ef39cbf83ac51d6026d4b67f463e5f0e3ea38bbfcc5982cd0aa8bed7ed3a95ee12cd19edba2b3d08135c39a8b91a2f777c850eb66418b7d7f2dc5e48a9db338dcdd842916b3d983e9955a84bffbbed559613d032b0f7cb823934cf863c37e336a8c20f8d55e478284227cc0f210be0d315b398d9badf08f5661ad83aae35ed112cf34589800623ee953a6d9d26f1521680cf2f5389b6b45901f5430c08bc9847e0d4af2cf58ce2b91af7539c165489495fce5e49256618d5922dd6a351b62e004dcb141fbb5ffdb15ac445b5f91ece923b18eb6397d57c92a22a5aa8910af563f9413b0ada65bcfddc0a0c90d83669199a159e48e6ed27b7b85396c2d0a036996e9fed935b8867c6283270d4ba84a207072d41a11a94636d5d12549a176038c9344bf26545af4533c7a2392aa8f0c18407c89a153cb476dc18ce5ad86d32451cd1af1226a0c29f6d40c42f39a9620db7244e734d5234a92b71f07123dbfea3bacf31157f74a8bd9b1bff1aaac5c2cfc9e52792f067fc4483f0de612368ac9bcab63bc217ca4be7e6e1bac12404f850e2d2bbbfa780f48f0b1e01f2811c2475750c34e297a9926576195fed506fecd5287472c41aa704d2ec82c1ece5ff4e79e25b843da61a657e724b5566d50d87a9c652b568f0e314544da58716f61a12ef3a2a929bed24ac7c020004f45de7af13e2f5ea72d23d0c5e570db9395d74591ea402c8c413cf4fa550bed45f8d034d5aa5e37bab67bbd4383144c11dc215094f496a8d7fc123374281102d6e0f6b4ac736a6cedb5868542a05d2058acb060cca50ea49969f294a9ac07b77eb8b278ca2bdc64dca4c49757cf83def48234e48d7e20a65cf54e871f733891a9ca83dfd3364c95e3fec681d75340fe51e70f5a7be275347f38968959f02c17e490fb784c151396b03e0cc355ee1cf51d65b0410c6464c58cae5b29cdb56ab0bbc689c0896ac9ddbdfcf7da67f26069a368b826a38687e001b11cd70f357d02abc5af573f89e7e1698618456202c3b2807a9779f5cb46fa8b0b4c1f72f2cb741108dc9ac304f6384f93fe82f891bf663105cec967a53a9b64f77971bd7fee9ba81aa209b85e6d48dc911b118021ac0b31b4de737da6cb494c10256c232f4ecfbd7590328418b5999cf7ee7f8d2511f80ee23736ac42816a8cdfc06d689374a6eda41783baa687b10d42f93b942e99d32538795177faf595c3d0eb03e24ee8a79510b8abc0aa2c15aa0ccbd429a0ac2310f21572654280417d8df5be24b423586065e3e93a764b4dffbfc6b7b22db15e5ed98c07f8bbba04065180faa465bd2fcbfe39ea8cad4da07ad67a74c21851eb7b495d80b6c92b441ad60d47e5c60e9434542b1e3ba1abe3b7db6789de12f650d2bbfa8b03ed2c8817860b346d77903c360227f2dc15fe5e13591e756a80273501cbf37574ba665688dbfb3eafdd0a7e3d72b116c25cbd9639b9ffa5fbf26cfe94d3c8ee9d934125eb626dd52178a5d0e74066e8a2f8521277889bba06ec2013e86dfb34c31a457cbb93d37676cd2ada9fd5b9e6d27b6459793f63202fcff92b99150b06a9b1fbc175fabcc0f46ce201d3bd1aaff5585cd19b68f666bb30409c135368d295ecdcaaa7019a133eba63dd2f6119926001b4217a7fc5fc4d9faeebd39395073c4d508edb42ec0bca4838c30f6c373cc729f2cf82fe425f6b708ca176602032f135ffe46f3933090b98d96a0028e41d8f13a112416f0c1e8955723368439ad459495351ef4eff99972ebe288e41a0a32c6147b0324c73a81bb0e84825b86579c8f9d34de80eb24bd17c6f9516210d6c23954f1fd211198ab70567263b28f081e4c9f83ec5f2fb7e6ef4561644518ad709123fc7ad478e34dfd57774152ffc8b212c4abb25962bdfb4391a42754d9982418a823e206a2244eaa381a84047c9f402b333396352c3be45bd1490459fc9ec6140cee9d7f376398bf22e4948eae96b1dd15a302bd373b897f2ed9621a28c83ece76e51307e0a612843c5bdab83fb4eb7192845db728c4d2f7d0dba961061d748e0f91ac6645f7a441af09bc4cd402d72fd15d0fecaadfa70aded740f43ea5509cfe79d1630d5d363da276a31018865d5efbb680246393f0028056919b7768bb3f6c25e8c8e0e1b0c13e28f8ceb04a664737171827fbe89525e0df0320596f9bc0811e5b5b6889fa15aaa9214c4756d833ae093fbc1be67ebc23fafe4a8ec1da6764eb90e54a5ffd810f81885383b09d6888135dad6b96930e742feae0bb665e7c3e14f12d316b9f4d953693aa0c629b2fecbedac092ffbd65f90730ab8b6711473622e4fdc3b4c9c06352ac1b8b74bccf02911ebe3929e207da093673a3cbd910759cd31ba8426423a25d3a6ca8ece692f314916e071deb3d40be65ffae9aa01e230a2550891d56be79dda5660ad403bee7cf9b9aa5e2c14f53ac251952dc4dba67f442640e4e89d9115c54d15a33fa9c054ba508ba804a853a5ddf87379ac82c69e3921fdedce3bc9261b1753f12b374760f1581ef0070271e59f91206dcf9bc525f7d49a2cf4eaf237523196278168e62a355cdec691a7c2626dd8267a8c8b24aee6ba9012fb1f9ec1f12876a6d0b31f090cbb458c330cd7b4ef19f01081d55781ac408a405f3e316e7e68500fa7aa6485de1fedb17996244599f317d03e0ee056af02e3258feb5c95508dccc254b369392fe721e6c3f83aacd4eff82a1f9c5186657e35431b9b72cf2de5475f86626f9b889dac9ca0978d53465d2b9eb5022da9761efb2970c306845d1b4a47bb3c1a156ecfc8439df88ec154e72cae8cd4d73847719f392df6aa4d64ac600b51b4eb4f48ea0f5c2a9fd17f970a75ca1598d0ab6ff2ac02a1aab092eaf5032ae8414591ad790c76c4f1d80673339171cda2cc7b363ebc068a63cbfd4691be16ed85cb9512f93a040ba314ce7ffefa5633a70d30509219c536965ed50e1efb6fefd6efb20fe702944d080a6013c92ab7e5fa256335b97fbf44c6dbc2b7e935965dd924910acf009827a54b43e52ead473330977c6bf148651379e53eca7d171ab5e10c8a8a1dbe802a1f39e25aabfc54c9cef5f459f5fe574133edb1bc66fa6d96a2fa27046f970cb2ba68d3faad92911849a36386241bf65c6967b414236a2f5e839fff0011147e402b5a912bb00a6c8d25323287082bc2a3aee5ce583ee0a0abf7406b13bed15580c68192846fbe47b6e624e9c31ea85cd558ea58ff15f891dd929e03a5d53832c33070609b1938c313f0fe01c0d40c25601bd7fc7f450c5381d9fb413cd0c386a5dd9973b659046f32fa201306c4e1acb25c41216f48b66627320abc5f5e0dd1a7427f548cbbab9c82562d861b6da3636a9eb850359d615a4c3f2edd73c961a425f3947b84ad88eb80a998e3653adbe9e747a00178bfa7a05f55ea1d109f896ec0657b61149b46dcbc48d4a38ab8f590c70b9add8f2bf3c8df2acf03cc6ccfa1f51c96add3214fc0a3c8635ed2648af8784f0b2d0f6ec0344a024019edadbede428d68aa36cc1e67c5ace77df2d9f691798663787004b7933e80efd82aded184273c83eec5f83d12907ac3796265d2fc49564658476a24461b2b10b6da7ca23411ae5b03f7321661a29679d997b4aa8976132634fc2ba0cd6e75654e93039b5e90576052410654c56a948d370922e7d97e5185a704a5b7a9b6d45ff7db00376431dc268239e152be57097fea3d5d156cd095e726f784c35b72ec635b28ff010564813ffc585faadd0659c49baaafbd93fb64bd2d5b357e63211211e0e35c8282a6faff2912ddc781e6f9eda3e7b73b1f7d228a32a62423515fd9de11b0a5369c87bdf6a10ff8334d778e7d9b7af0284fd463d0cf4efd6c967dc83a7617759783752eb8fc861b68a0467bd6fabae70fb57fbd236bdc1db4b30951b9767e2a1007fde1b8843bc3f21ac2469c4a4e085bd0fd82f490c4019627810addab5b4f4a7a905b77e0979e4a3d79632ff29ad08732dc49c6c6ad458b748358197d3561a15bcb10698a0fe6eb58da76248c37dc3c4b7a960c75ee55ff2a7ecdff74a2edbf3c0c951ff92b5a401d73e40c9f8b87c59b76ec48370dbf7ba9e1d0e22a0a6ffe9be35e0da6704502fbc4313a753c6fcd934fb10c8281ee8b734b0573f60254d9ebcddfb52a55538e7459f240d590f0bed37388cbd0f16fa92718d02760f128ebbc5a9ea8fd60f25d07938bb2194fc703dc70d7f8bac2cf4f35d9c57f137d78ae7de81f4b8819ae09260f71f0b8bf3f570ec62335987c6a08101c69dd55fdb09cb114d63f52f5e2ed602c49af4c65d602eae1fee50294ec4e564f11e4d1086d30f65f57d7067c3da4468887204cea37a21162cf998192a29c78e06207ed140af5ae3618b4eb131aa839929f0622a2b0bef2b719c58dfc497cd88eeec932a7167549179d4ba9510683c9d915c37625fdb40f6d61eb90482d6a2598fcab2a381c1a67926a2da9cc8da167da6feaaffa6b1bd7d44c9e20fceadec09d30104c5d986f8a34e3bd64dc1c9ba40521de48867570dcaa1e3fb880fe554a1a1dbb017df7ef115dae8d73163fccfee7c030c850c93d9e5d7b52ef8ac468128e09ede22fc703ad9b3f105ce173dfe900cf64b7efc2ec9d4cc87a1e60f981ca67a93b86c98257bf7bf9e87af4352ef2ce93fc9fc9ff084a16aa17cda9fa3cc245602637f1c665b75e8378659510449cdfd26ad865da0b354974ae85cc42f3aa85c330ae3eef9825d15032956a71bb4782ff220a59e08fdf33dcb0df5e6030d3d746dd31e78a699b72e4b992caf5fda3767ed49e0caee0b88436c122c6de8eee886fae6ba213748891a57fd66cf9860118d5d51bf491b841a91751f8ac2a685b37a206c3f507236ddc36f7e89718df10f8a8b5fca835711b20f2e5e964b0579a538288d336f210cba10db441ffc07333744bf9c8ae1695a57a5dff5d871cd73c6a95a7020e50a7129e9e276b0d8cece93a4412f86c91b06113bcf0cd89cc51a1fb3fd3e8d1af60e3036ce3cc26caa6b2b92584146a433bee8b947cc1f35b617b73f5b1e0376ac8bdadfe5bfdf2263b205f74dfa53db7a29e5078f5c34a268119736ba390961f68f2ccd70278e61c04a2bb9688134d4b8f00f0defe59f4da3b1c57e63b727439ac230e6b69c58928adca5c2f1ff71f9b5ba6fb4af8fe99c2f9f4b019ebfe58461cded130145c31b890f79f8309b93b138300be2168199f9d38231a5b279cc8c13586b3d974a5965858cb1456d7e21630bfaed806de437cb58027d54e90e63c3780ab34ac1d4a2d846fa5590efcfa379f4bf1d77fcdf4b7a87c839f589a63292578ccc24c70b25dc93026bc1ffb7a25abc27a1ad0b9b5e6e267c6c70db68c25f7a85beb1f1166ada364cfdbfe55ea56e2bdc830ce240f70efdc61fad277d9a93a79e92db871df938f57f1274e9eb341d0883cb7bc9f59fc4d64c5993b50d4397a77f4f88d04a5b609943b3c75387d7cf1dc77fe107e2ddf877b9220ccc3f43d242cffda215c317b8ea42e7a06a5917ec304da928e5303910a9b38200b53b24ab3f37a5109eb0b5aaaf21b6e7778a7bdc0ac05037ab073b7534e28255b92a6d8c685e4dbab33abd9db28b2884c2418c0773c67df6a18e6c8fe0f029f41e34a7dc83ed00889c89b8f9b926466093a7d0d63207374d0eee53c6758280c52c805902598bc362a0c42e258d9a176132e4d1af112d86243c4e7983ba438db02d370b68b2e1a0300913a58bf690a370e61f17fbd6dd726371d7642c78d85a9e6780467556969eda1d9fa792bbb0f376f98028234ac104f2f6b19e2b77ecef75238490910c53c5482590bba2a6a10e59b1308e8d358143b91303afe67f25521fa96a74249dc01e63680e6a237d0cfc035757d1a35fc538a10ff51dc7582b8d82415b7796d284b01130403a7d0998c65a321c77cc8f34e99034b17234c9a7a888337f23507148843bc34eb51912ee73488ca80a6f8f76606fc85c35979c41a918c6fdffb842b3a0ca6a61635d60b50bb4ab2312f62534a5271421ef5797a09a1944fe93370f6e0ea46da1cbb2ba969785d8b415c81a16be9e602627dc836d8275f3a968369e20d6b314357581e9391ea55b839d4d35c3b5bef493658e274f6a131c27051bb872fedda745e930b645a8fb7cb931ed40e4926e179132d54def59db069ff24f250c900c6dfbb029e6633e6f837e5a1001205b9512481419bbf457b5fb3ab83bad959327af7d51d2443ae6e9b7f99e1e42201a1d2ddf95c23a076d894120de4618b61016b5f354959773aa516253887fc98bd6edb07e3d3892d0a13f2178ecd72d160ec1c78642d9a6b5928fcab39d9b5e0a98ede34f93e38bf6fdbfe36a6b58b55e95102d5da1053aa9a58c374267dbcb4567050e771f2ced2289f1cf20e2307935aeeb2ea2fc831bf6eb2ef3286da5d7e34b1d782169797ffb4cbe2dbfd9c73e445f3a147ad8ba11456c5e458c3762498d4c1d6a73fa330a2a4e0c4472d885cf32b2e5250fbf12e43e310574964e7beaea73ed2c9559c3565697c55d5f68d2f3a8afd4aa8938f35b884109c970395682a3c77606b00e8f2b2830cfc0ae1016714e5defea10ccc540cca4548c3f805dd95f509e40eca20151482014b58859b912cbc41f2fca01f059b163cc052eacf7b6c7174e21709c808f5d6f7a8415ca239ec8ec4abfe262dc6fe0855b7b62448be282236ff2658473af0f25eb747cebbcddecde59e37e74f2490012e83806d08326397de7fcf2e34477084b4ecee644ed96e0a135e3c7c198b1ba135a8240d84648942ba084403f5ab0ede98adb7a5e1c934b3dc407e4d0376db68f9ba238e53c103a3780d577231d22690589e061c0b39ad6bbf097fd2938469b8e92e0187ecd48d4a87136be14f59422a93228c2f218742922a0da3c55010412182783052c61b609875aee3d9c4acfc0dc6dfac67db5e9eb7abc19c7dbfc6fc23642d52976602482db22461d42849ceca7229d94e8f0c0c4cb2b9cc643904e54efcb1cace43258e7acb386868e0bc14e10395a56bb33c35e1ed7ab6216246b6f4caaa1b6fe3f1adf03f4f69f0948068d229b79317fe5b85e7aa78ec2da228cbc53c8ac6d4df03412e7cddd913aa13551e22e424fbb6d686fe8838c101af17ae20e0b84fc58ab6c2960268583aa7f14445adbfcd8f7359b376f53ef715bf9fd8a855c7389a7d98ccc76e7349edf4b6d0c918bf1f4bba4185e17fffd0f27a2dc5cbfa4bf3dc3e35aa232f9330a636b06518f2467c99022a98de870ff120554e1ffc4c9b13f332f9f549b42caeebe49a7bc5d8fa782fd17146ceb8c3ca27e77d21c9cb591b87f272289b9ab4072764b1af402b5f9458beb22a2273cfee51973785a504ea7cf3032adea951cdfc015db26a2867da43ac0079bd8a4698b065eb09b62e67e3aadcdb7061f367eedfd2360926ef2cef28b27d147b56bf92d2bd59703db692b9479de20f6cfa5b7b354264227ff4d92295d45b2eee283d6297d078e776ede3ffb5cecd445a2e8b179eba8e8adfe9fb092dba4135706f4e6ca237bfec1c34fa1b87e7e3bbb42095287ea30bcec12f010752acb5a4bcac7135745b950a781c33913061cbd20540f84247a4725abe4499a1a7542f192d60343170d4aeaf25143ef531c4ec23b83032e99c3738bb41cb136c8e2923ef4d1b06053a1b5366adad6abc2ea9db2d574ec382fec3f56cd6131ccc99942ab3963d7515429829ad6c58455a69590f5b6d2d2892b1d30efbf5bd04463c3da9e28357ffe5fce3a80ffb955d54848b0f3a643be0bd880d0bc51b39686df88e2818aefb04fbfb7644fae5f5213f02983156d6fb6a57d3aa6264d118b7a850fe3bb2739722cba0e886fa95f82f8e66093c1d200c53f61763a96791cb8099c8165b4c7b9ce7d9af82e48b860ee6a711668609f9bf0c2cd5a15729f7d24196e05eed4321acb2aa59fdf42a50a9c52da73885b9aea4114090ebe2385dcd79341c408832f02721b242b22c5370696996a9e7d188c95bf1e5dbbbd12f4dfda605ee63a29881aca395ec4803935fce42566c0cf013c4472c811899ba6b33134660d920c2e0309db6a9d90800668938ce01900047d749e63fb6c9fdf468c78ed8f95f007fa6977ad9727baaa94987498b1ca87a6f3fa4b999db726115c455d0ec24029b2f5810e49a94668864b8c470f7fc07c3dcd97f41c973b45ba4fa7879ee7546596881573b6863fc39d940eb3fa3444084f721341f5d23d2561877a9fa5e51acb3919eb51fc185df276d5e46060b79e53664a36d92b3508ed8e6c864c2ca6da842512cd4e2445e71d9977d7f749f0168409bdc865c6a7e3c6c96692373911dcb7e2d9811234f7246e8fe3af20bec7f4c4c133908ccf1215d89bdd6807d70e678df6d8cf4637155d0bdf803482c5247f3a141457f74d5de74a8b39ce650b85c42eeb7581923287db1c11b52ec669ef000f8cc8e54d4870a14522e28df9df5e3cc1491a5d9d2f35e3caaeec6493af10bf6ab1b70237c9338bf0e6406d6a5a81156f962e2d103507c03c3d8c9f92a16f04740a4a765dd68eec7461bb356184d7975f5c19b7924de5b89c46fda76b46f517541fe708667a690ef81bbcaf8566460cba2242c4cc7eb7150f51a644c5a6883f3378f882fbbaac37a59ba9a17f07b7baa771131b66d0651dbfe7f13e48ca11c6399ee3aac3a03fb0a369ecd4f67013ea4fd0f386074bd719d48f455c9db979f28d18124967330ac1190deb1093a740e5d9c74acb57f8f55076d20a676c7ba60c586eeb268e7bf5b12f0f101cfeb628f06ede81b300dea80ccb37a9285c19825bc129d80be181e9ca0ff8c2c2dea4b156369efe06a705d693fe468864169af429f1d03fbe074ccc52de5068c8db7ac55d588e2a8cf776682f358710e64206e3bc10eb8a08a9e48892c79d6cf79e3f4b4ffd376d0c953847259883a9758766395e450220b16f5203d2f0693517cffb2b724c1f30502c5359c051c1bcd88dc1dd54b89e6981009d275a813b2bf016b74d0f6ed0d91e62d0884785c9afd8fd1fb7e99246cd4005cdda71a39cb649197a996d8ad2d23fdfb6bb015f24ec3d7f88af64fb83b4b525eb06607d133eec834cf7d6c9ab817b4c0dda370459d9cfba05ad0c1adc86a909fe927039282b9ffa354f9053e5509951decc329ff0e055579d992b18d9abe4590e66e6fc63e52b263e89e44f07a66395307b3756726899fd595b071c028c2ebc246a0df14dd458b16e8d1ae59aea9fc10bce915166d861553fdbe84fe08f4fda46862c3d6d61ed40ce437a3f2586167c77ad86b9549a76075a0218d9fa1d0e5c7fa28a0b4bf2b47e64934c8230e1906f7d0060b6c415a0baafb6dee1d89f34ead4a6708170f173103a66d7d94463d54224af656f3fb1a61648e0818f037b892b4f7a26c763c4f3a158a2646ae874ac9c75a3de0d4cd6 +Output = 8f16c97772dbae3fcb9d43ecdb078c13 + +Len = 118968 +Msg = 67e96459f89195895fba434eecc35aad20778f5d63edabcef9ac276b3313fa1de2f9af101190bab9f48f0c181b90e53aebb6ea034f94772aab4a368512f1f187b83aa407aa51d742bc082a24c33132c3054b832dee620e630530aea51e88fdf0d0f56cc6299e932da16cc5fa4d6fe84f557e8363a81e1981eea6b654bfa0c76112712ed5f83d96818a0504231f12afe7c397122de5923f8d50f376185d00f6e166f813bd7df689465e191026a3e2319237dd57140d84298e1260177c60713379b4d043052293148507f1118b40a7135899997b9f88bd7f8c1c35c10530bb2630e442e5354edade456cd52edb5d280041d114a557bf05e89056ba9b3d35a6760ede9622d56895908e750c8f9d642e9e56c893fec218230ca0a836ceabd7facc1b8a14216eda8ad1680ae05d59bc81959e6461ae6afce194c7faf381d77f7ecf60d1040b870b824adc1397c097cde98e218ec5dcd7d405280a3437dd4a93fb28e499ad07a96344a3f1787adfe0ff2e31e82f06b18f06586f733e4b0a8b7d397eafcc583e5b4a9a83b021d1e3bbba1725fa2d6d541cfca2120900772f22a3007aca504dd725284a921ff7e4f3b1666d13607242ed061cabb8d4620275986f18c43c0fd4fb8f651d7949e0fa38496bf8a220e4cda6d3d03a0add4d3603744748030def35d22269dbe033c55dda0b31807b446d55a50d7f19b02ba759023e9559df46dab783659d4c6ee78f53007f21cd45d3f424123b900e51c65ab4997fc01402eeb7a337e16737cc6c2425d22ea1a6a9d6608016e66de295b74c8ff1bd303e110d6e41151c3066a2ca6e1b799f1ad54f549bb2d9957d5d2605673231834da2b7ace6d946a0619f9709547c1d5af520de558c0182d02846a9b891e482567f079ad109b3f1f560ab5332bd92e5e89850ffe21bb73920d667c9d9b4ee0cc02e346287be173fa197527f4d93a3fad06d2d5901301b280bef862c6fb798f648c2f2b8d3ed4c582e6c5bc360bdf8849ada7e95bdb374741bdb6c7a82822a6977a30944bf7e9b63244990c67523d9aacf490d5a1b8c0b48d803e15c1bfdec8cd33941ad525a4c880995b73193ad8d94f621a05125a428cac9cdac7940102688e6ed629b9467a7f167b899abc3435e6b97ca0021e2e1122276a2977bfca31f84382533b88e8ef3c3c51afedd0ccd92573aacf5735a2c137967eb6807549e20a94f4a7da947b87a29ac23ae6e7633727f682f46ef966e71f7250ee8c852e9711eb5c50819c7cb8249a33b7007095d460ca8bbbd3c9d8d75c33775df63fd6c5a0cf2fc9cae17b1544b32ca0d50ce33562583b8200377736706258615835d10239b8c5901103e503858e1384ef0cc9ee9f3808e38eb2d068fe778ab51ce7bbb13f20d43fee84492759839edf8900b84499e27a5cd9dc630348fb74b5dec5e56733afd225dde325d5532c151d6d794cfbc4d0065a7c04ad7a0256acdff860eca8b9ae25de4990f9b1e4e01ccaf6e6e658b2894378dfdc2e519d2199b004494fda33b465e5cc2e333191682c74afca130fe586a8148fc3541e8be4d1c27cdf7d90345b08c8c00b70d8eb0cba8702a36165c050aaca164abd355108db83eca3f45f3dfa94f3efc9211c54465d9e9a03401ef56fd215dde2c83a7f162d70be27528ba31b80f385e7c2705fbd6c07d05a3d8fd74ca474711c139288853e158bea06ca164653443cd7d3798fca8c7f4028c83cf87f98526a671dd1efee83eeb05c8f8f0a0382627f19e29c4706255153ef6e9adb61345c1444557d27aa9578c60f5b4ef0cba4eac73e6e5d27f8dd1a962e9f4de299feee194438f8c251f9205773088e5d172129afb5e530a50b0a578156d8bac0925e84e3d756e9426d1581df1805c1c16e8dbb8300c5cb30c53384a008b965d7e2d9ad0e8e3da31a647129b77ee18da04a512cfbbfae616dafff2e7ca4afe3aaf406e2f3d94bcaccd0a2648b081a468c3301da74330da7ce33a3b171cb3a98bc5e5cb32e390fd4dc2a1feec4541e80e7a11660871b4212b4f8f7ba19ecc8098e7a519a383df835cae94004fdd36cd1352d153baed90a16c45831a4ef79f6ba83e07c148c48a3821b86c9638216939c172f74e845ecc4486eda080e6d0345305f29329e94f9703e409b02770b8e1155e020bbe306d6ef1c3706d1631d0911ef52ad1ba50cb11cbecc8e81ac04ca64a332c960b84c1809069f67242f6a0c0b6c10e4adc44e1fd7a821e9dd9ee82c1bf88161f9c49030908c1a6386dffe7c901b1c785f88c3965f7ee3355cbc204395ba5e82edb46da124313a94600124eb2e90c7d0a74f17a502a782e9b58067a1608d1cb4b2f45efa228a7272461f87d85551c5762ba3b4dc7fb6838f4e8808b61ad55e7ff000ce9c19fc4475bfa791b4a2c277e14303259d1520578eae3f9e021317963d1b765717790b33172325cd00758761aa8409d477617981704b23a215e7e85674aba162fcde3bd0ef1706b46c6c05152a75146bebe32693ccbbb08f5207bc11df072e7caca802806611e6c228e4cff4e98caf367b28bc010c5672e04701075ab4e47a2eb77503c4049a3280f68e4ca3703156dea590be5bb7c1e72f75525e839e9a20d39da3943e5316767b35a70f83570997ceebc981f6478499e76d8a263f04be9f25dfe24831ca1d2f0b66fd8d26f68bee71be11bb8333f4e7828006f2ef7fb8617fee8fa450e224c8dc1ac04a00e72ec781ad27df6515b97c9b6d575917781df44c5a2a1d1e23b3d047c1bddaa39178bf59397a422e6548a58c75f9ad498665e435933036fc1750d1e8ec3493719de03272d367a8319b091ef04a7c73e813169db64a30767d35724a3a0ac3191d64fbdd691b9e66313f9135415b4e5185b6a6ad38bfa94003f69ea5b59df7efe97f21fca6727cf08fcb67850a18edaaa4d99c8f4784194842e33c80e626316c7845092ca56891fbbfb7027ab503e903c8047eb06d380ee39c73e24836240e334c6f07fa006e6bdc438ae8a2dcccbed161cfb3bd143bd8a6833116783027fcc8c855a4c122046916bdcf8089eba3ddb80483e201c710250589934fad6ea27b819e81763e94cb283f80fd609c5c59d41c12c9702b10556285322304344c140912118ae2aec31307bb2f8d1f56b93f20622f18e4956a6c2fa9ff68cac952fd33eed3da70be578cb61e3c0703558cc4414ebbfab5dd4fc4cae853cd09c90dee6a7c57e8b6c9ac8881dd18e3c2f54199b5264bd77a6f2b0ff2c4d1d857bfe7384b4f003e1b7d5ca7197c48bbc4c272200a8d414798d7a6ae05c3fc032b0a799b24db8f531535c268db806df78f4988e7afe85eb397832d1f926a34e5fa553f67a5a637c04a8f783e466deb1f8907105123cbd6b40d0e48e5173c0ee94c1ca32e3c33abfe01e70897f8a9329c5867831cf4bc5bc15fe5649f029dfc95a6cd3f6f57085e7501d8ee1650d6e71664076b7b911e505416851a9df324806380e38eab9498c1bd90d18339ed5b7ae63243242d877646f4a789c56257443ceb70fbfb5363796840556d72633ccb60b459c767835658c21ba9501f9cad918495dd831ff7520ed495b6093632bd9b2ae920f0801d7c4a3431826463ad7480e9eb5cf55727ceed794639413928ee3f5bfd5e5b186c67af2ffed9534c053a86ef6445df5b455879d8aa658215a65d4c567938539af0b71c17bc049933446e3807894ead76d08d58755ab158363b7936bcd56596823ad8f58df19aa2b3db8e08c4d2cdfc4469bbedc1dfa3402568c082f1ba5c8068bb4befe548020c384b287da9c94a284e6182ce6091c1b66dbec1b5876093ada8e29e5fc027e1325b03bc0b28e559ddff78606eb4298347799e0b430080917add513ec9a109aeb176a5c735b4bf6379d1eee3434f0f6e6fd396fbbfdf92dc847077aba20a65d10625a1c881efaffd78505579d0939bf98bf62a2180871fdb370cd6639d6ee4eebce2783e743c3f8e76154c92bb1487ab486bd80b399970241f0cfe050040df5e2227a997912cf6acef7b34dc57643afa11af21174f793c3da8eb4efe7f12eda5e28fa6724d246ddf40fc8e9539e53e7c743a85d446c8ec8e713259ce7e67786c8a650f4d1cd50d7c1733ea7be729fa88ec9876d093eb09ace48c9ee362b108086652348694913e29deabb8fec3a507d5e733948adb620c0f9f249edbd082250022d1c6cd28fba85f03be7a8c63e8deb9f0a63f6161c07c2cedc4ca164c5d57fa2c5e367f6e76b49222f6cfa34c57f7cb957b0802eb88c29b7cd7b1314a95094d0f71f41bb984eb49b8eef8d1f194db7141fc5eddbd1d87c1b8c7e4ab3fdbc17f38978030bec8d50c3201b6a6d802024182d4d4507b1124362e2fc4e2a094090724498b4cd294da503ac95980843204c2e48ee90999e6307f3979d2862150588b7f0245ce998b939c1fc081fd6aa74b6bc3750d779e1f34e38730adf426933872955c7034681f69766d61a08c1fc45ea2cc31c228fc2e9a3983eeb7bb14df113303a27b2ce2c2f445b03735ab083ba71e4b4fa77c3886d8b7bbfe705990867b63469ec7168e08ac9074bbc1d8a85fcd24ed291e0fd7da99049bfa784e1e3bef79da8bf46fce72fafd1759d59394b3295d0e48a6425e7c2396b06d30071261e5ed4c0483b7387477e234bbd17a41d8543d4b48c0b230fe30e475c12813119ae743f792e57b309fabc6493c55fb3421d63c10840dedf3d329846890c10090397c0479a19a2a5b56ff3fb165c374e04217dffa94ee441b9d75ed0546ab4e12e00cb54edb32531d2cfaa529c2ba95da9ba1af65f5d2632cafbe94e86d476a1e0121bcf38a1e740aa416ad0eddabcc87a0fc10ef115aa98b9c6bf26e7f15c3162f53a1e448ef0b883eebaddd0107877bf49faaf29207a5dcf5f6ac23f6a7179fcd0b0abd9204983a6fe22e10e75e653c08f4d41cd239e6751ef728856e6ba61f5cb03ddbefff9875b982a446fb20d42c40a432ca6c91ca08a9d5de2f40e41d29710bd1bbdd408aee9e45b6fbb6ff62d15e163d87cb7feeec192b537e08a0db228c465cf9c477fde9a0b3cc8ba53a7fdf93d35ad17984c3b3df501efe30126ebf112846024ff6501b43556b834072a98b94642143e120c6e47efca72c51c95633a20a1361da5c2fe80892fa8f03387e89d231173bbcd486f27a897274e8261044b1644b94fe09fbd463051feb77ec4d4ecfd2b33547207262547f07845db92b46b1df651825903264e5244245190eb43f0fb16bdd2a9527b89f55dcc74d1315de35d3d667db8f621df158e808612031fef465c78fc1930569ad9678ca10a44e6fcfda46009a4809642a4b97c1eac154f320584cb9c6ba99fa11c951e952ed637fb25b0a7eec5aa6dc0254d7ee00528bb016117207847c53ee6e570eb18e6ec382bffeba3f4c47b8e9fc1d0f095c6444ba4829cde5a538d1bb15d7f5bf2da90d1d3b0dcbce249fce1279fcc39059671e7628f9b6c083a081e4aab4ad7eab1c9ea3a630b5b82fb334fa2e8c8c1f81eb87784b19d344aa23e30f8f959c5c913a06ba93e01e69a832abe56c34df0360620e3520f299dea343837056c358e57aa1b3c686945c7f388e9178c59e22e86f5b21314d2c70fae97fd1cb72e659b5c1b4545bf0d5f6455b376438cd10fe3b29375ef1221fff2607395c857677153a011236ff652d82788acdb299e545c778089716094255aafc67209222c3ee21dea32bfa0545f3777531a20b00a0a5252b97fae4ce1055faca93a601180dc3e63042620c1225d04bb7fa64bc2171a78dc251c359d42ea9752d073a27f9969108cb4964ebba973c85dd4f766460fad567e8b090d39fffc880905c6d853c00cdd00c32a52742eca09c41ab6782338ea759eb4ee3e0a6062bc3a0eda09753ded2f26f98933d6fc895258198a8a43dbfa5ca66971d1f6ac45bb4bb4593dcc58358d681d5cf9c85ad92881991ca38d3f0493fc703dcde72dcc0ba6bfe87c42590c802df94aac318fe215a76113cbe9ae31a30a91f83ac4292036b1f731cfbe87998fde53fc55fbe4cba0323a180a3f6ea91336964b2075e968c4d624dc3d292c0542e1f419fc0da1bd528aecd36977c8936bea45dd88e1b5cd3b7c0d91cf698e77219fa44aa74f0edfb1173febef7a0417348d685779f2d577250a7bf78c67f518b5802a3760a9725a4742fb09a52e6a5ff587c560fc8f908d09ea36b67c0bab1085ed50872e0317559c71e7d4917c4290363f25a118a02f3870830677a73ef786194cdce31a4543f9360dccf5bd4cd3d5801f4fc1d50efa9fe13db3e216e620a2fa0697f22a573f6e9f7f721331876654598e0d693bbf39ebe480049ed0ec6f8eaf84495d682153db5f2ea1d7f41343354cf42541539c344301b4c254dd392c6fc02dbacbdc8cc668fc8121e80ddab2a1deba60f0248d33d0c141b5ab46b49f70b668b1e58d7ee23f00e2b9f087c3fbc09946861fb67b7db9ab90a54c12440fb6189ff85383e0ed85f3b8339467b565b904015f75124c5b2748075ade49d3c66c6e3955bcc69b30655b6a557eb79a39b5a753b29b3fea15421e0f9b0af4480ab8419e91c85f95f305c262e8567f59c0db0ba54938453bf331b7113278198a24c21735742055b87e8daf07b3c3c5da3f54b75deaf52d293c1d9b73e5cfc3835cb37b68c56cb0eb1826abc1806e9305014733e55e7afe9b3a2d509f7db7f71af9b3f29e4e5378150af83df815fff0c24ddd08a36d6ec078338a60fbc2dabf3745e90640d57eb6209d2aed143b1de5f96a3dbd01de7a7caa705b53f17bdd22c2867e3eb4239572f316e4437dba707892a191da657b45391839c9afe7726b29a4059a2263003fb276c050c89c5aa1b3753afee8390a78ffaad6fcfe476d2adac30a633bb533248091e29303d7e3589e8a7dae6ee454bad6488e1bc77835c23f08dc04101386ede32cc3d87c971c3c40bab1c9f4ce21b4c7daaa4f93e292dc605bc5a32ae3bf42e42fac45bc45cef6a1eb2076025f390dd94872bfe9ed4b2043a50b690f8ea7ca8982e5024a47c12ec90610de21ff636e157a2e9451012a35f2ccf77d497d062edc0eb638ae07bd8bc1f4ca29d816697f815926f55386f5c475bad1076017a416e5b9670f71eb8ab5909b967eb00c11e728cba20b78e47574d255e131dac34828ab6c3fae1a5def553ee5bb053049244f0fb9e9fd478372ee13876e2141ebbc0f3610873e31c4b613d4b983e8e035695e400c44f449ccb4d94037c2ff1cf6c6718e8b88e63f88a59659fe344c4839aabdc2aafb18042502de5f4d23f4f44c2ff7bcc787cfcb108587d59e175bf1bbad139d7d569002f725a57ab0da285055be48c7aacf205dc61d8d5080743d62253b09d96c9c85cbabe6d5984a2fc2b8783d0db71ea7027d113751d38c931a23dd1c477f5e171ee5a70b16c20269eab42072ed940a569db459997a65aabb19bd4d1874973d0d84da555c12ffc0d2cacdb227916755251889070cb10fc23662b7dbf73827f0c7de321ca36e576cb0878a9722a038e95c9c8581589ed8bc4a1e99f1803d395f8d557363a6d5d2ef4c4c74372cc30dad43502e3045e8c8804075ecf67c28d472a71127942eed792fee3f11fa0ca2f089215d0f7c9b38e7f7608e3652b4a401115c39d516035e5315de88ec498ce4e86540eaadce21353e07f192026ced57c724f5f60651edd1688963508a8a7231fd29e620928ca088d4993da8d5aef2e92e93ba6f41adb4eec174c6bf7527873338be5c274520e1d8b1968af9397f8a033e46f3cd0e921f5c65bc50fc3486938fa00aea264ef0a9cedee421adb5477c4d0025e837f568f8c45c4b46304f115ef03ef6d7453666c312626d4aebd26f916e7b19e1d67f9705cdaf07f3824e2eaffc186a6dae83e8f64b45174cdb165d910fb70825d133870f2065da9e1bba474f5b394ff286c0e0092190cc71a60b7a44d7bddcfd519aa0dd6486ab8e221bc307b6a68baff872b5c53e4a73ff74392e716f947bb17e3a4b39421b610cc0f70a9db56808ec2923cff2477bf43f6c27e2e27e44cf897f9eeee9622be6601dd884d9ff88acf1445a9658e72b3779b75dfc5dadd6becc7d4bf3b66bbe21d2604599853d0e61056fa072bec46323f57c63e6aba45132c49fcbc06806dcfaaab2c7b16716000e71d27ccbed862aa2fae4c206940abd12b70ea4bfc7da8e592f3ae5344933689b7e977609aed6899cd11701c6df872346eef161569a90db26aa21278af13b4def71e31694c75c87f7c33ca88d56c58ab5b17187efabcfcc49638e151b27d7b8f495e1e5d400bf2c9c167c3fc2bf69fa4948b6a0f1c04068aba2aa384fb5afb09131b66a3223a7807312fe4fcfe31e7be9fae734c4a28ab732af9c178f626a3dae8c8d2d14f6be8c6401eb5f1b8a8a167d102dc9d01956c1c7d18d3a41f5b16734ef8cb7e343a95758296af80e7b55d2eed2afe97ced4c8f5352a52acf372b3709a2db8f08d013e935d4a4a1108028b82288961b32e51328bc780b6e9ff081b416eda33de965a24be548c0e2895fabce027a09e85aca5494ec8ce88e1be75ae743180c4af0ccfe844ecde743e1e1851e76f031d65a64b6dcc9d56313a9e65fd6796a3d3d84ccd09c5aad414d80ce5eb06731356f9b7be2073d9da584b3b3388b9e2c5f9e0c2cc09cf02ef587cfeee08abb863e3b85d77f1d2f2ad669a0178c0e9ba799f6f2b5758bf79a2c7a3409b1b65c3774c1813f362786c61c4bd8da0365592014cc9d2f987159370dac18e6793c308cfe89f57daf2b2cb7a2b0c3c4469abfe2f7a87562d057fd4ec1a7e44ee12221cc051b4a57913408458e23c99dfdb5b4346b12e215c644cb266ff3fe0990721641b000e996854702ba0929522cd0bc225d98934c122240ab094016d0df3034f63128bf3802326e025c3a4cc63a65b9f0a6a5b21b1f8b53853d5c9ac098666eabe594e0a16241b0f0754a138d8f67b30657bbf8b705a986410bea0738fbdc2a1ca51deb8b7f5916b44b60060ff37cb34cb801ec898b25e0c7bb12e39fd13a6f31b9eb695e2223a63726a5aeb42e4cc0aa10a016f77ba769ff95feb85de22746d26825e28111466a5f504192e50780e208a9bffe6a9cd62ad2e1d30ddaf64cb5e7fbf4dc5e156b6a15105b3b0848c0214ec9872d4bb55b2a26e6bc6b7dd551c758ba7fe15cf53aad42ad1b2f87b7b38664b9202a008fdd72e5eddf59b046dd810dedef78e37b5a3bcc70aaf8c81d021832c1b17df3f20508f53e645fdb1398edefdc6b2a5b6d741c9da1301e354155e0a02862af8aa57bf64021740564022c12e4cf1c7d2c942f599b88d42734ed52e497385d472f72e644acde37d4b4dc3ef8d50d29fbbfb834f8b06cbf9d2fe7a42efd37c7cd491feff823bcd453336879a8abdfbb2c7aa12a04c39719078df8f1c6bc6ecbc940753d1c8c04730b497082294c8dfa97c616ba82bb4f09eeb6e8e2b2ba258ec47b3c79b7ceff3e825fba0483a25f0dc40ce08c7c82ddb7d9127f1efce1a43b46643c4ad2d3f25b42db10a5bf949c1d3bb2c747f9ff894c5009854eac1732f8d5623c59748228f2d327380de4098e5185229394021a9af0db03c119c84618edfbdd064da5c3e82cbba9fae5faeb7bd229c20c1a9ebb5aca0368fc285a559f443f3d60cf6d7e793084cb20d50a21acc7affcfa82d5ca0f034fa0fe22692c0c2229eb1387d59b2427b5f470841a936959a0372473af2f02c248138fb0feb3aab1424de71ce4033139d78bb49b3529fab082da539635d27b307429777a20d2c01911cca337a39ce88d71fab2c160cba6f3e04f4f936e9cc1755d4b7d27d77195821fd1117f184f904c0ba8339fa561b64b3ffde01163731eb88bdf6b5f2b787213f2c2f79d4d05739d2efdfedd0bd372df294cceb81a41d821854f07cc25cf9ff414081e384aa4d7a96061dd229a0922d825a4e0319dec38dad3011a14cc5e644e0d0c4ef9151505982c3c96165beb0e5dbc6ddf24f45d8608fd5f6bdf290e094963354e87b841459117f6f26255627e97740f9438257d0ad68bcfc4d642c5d50ca0eae88c3b0fdfbcabf7b9ae9154b9add8f2c4163a330c6a06bbeba0216c11c04b95e2ada4661a426fa8b3a115ab08c86d7f3a663a66d3ecf68aa9e6ceec068ced9d0594fd303f4beb6fa7e4eb4db310bd1cbdcf2e00a885e1a4c6504f2bf9990d6a19e94e5496fea8b55f1f1b2402ac4f3214f91de8d35c51710a85ae13350e3364e6539dba67842de3a1f9ab163cc5ab2a088d0f069c9bcd593d2ef38b0114e8f3337bf44afa05025f361aa50dab825a6a61330d424a67dec426f2247aa4d3b27fca095aec96a8b093e62b10f0950ce35ce7921d8427eb0a1a8e7a4bca67721c7071a4d8888595bee578d4f5a7438ace6761534ab4794cdcc33d6e6f62921aab2ef1f474060df5b4bfb6bc5b19fd25a4f2991d99ba89b5d927fb75992a6df2e92112a2384e77f01b88668c4a300b05eb675599147e9f4c8bae9037d00a3f235db19b562c480bad7aa851ebcbd3b4512e2d5e6fc2e9033979c1c35d1cea52d48f4756b757dd105559873f82e4ea4132f2ac7c46abe1fca52bc65d8f85b2ec2e0849096ec1f3d00f408df8f99f5efacfc14c76c6d84fd3b82a272774144a56594f217d2372739104b82243f70415275122751698501cd199fd4ae6b5d09ad87cec357a7d73469c5b48aee9241af810df9e8f22641b2e3b712c9965f9c28bb9bf68efc824cb52393d7999b329e9effda2bc0263d1426f5c67407a6be9f003434b4ab62ec18281afd2d24b66ae79e335c10436a188ccc67ba4c057bf2d64ebbc481af175fca1ba4841db2ccd5ad3ba0165fe94a431c11adf4f34972a6c262c6dde610a657c2ee44ab31ca5afd6fe5ea9b6338233732a55d19124a2744e3cac9e33a568c6ea34e9fe4f1e1cd3c902b575db2a6918f60e5e999219e0657db0559772717360edb8b0ac3e68fa02dce8a9acfd6bb21963751d7f799bb9c49e8a0e9fc14a93fb2ec4219ca782a804b7b72198437fc3ff62677acb6f30955b5cd0beff48ba305e545f2415b3f58ca10177047fd6ed06919aed5dc49b62dcf05c8c4f003148b2520892a1618a4810a163303caadd3de199b40eaeb326b8f64c49c5a8e8a17d819ff26480c653039bcb84ebb06181f8bedd57d355e037ba4b37c984b1ffc2df050db9dda98d37af94e80db048eceaa504272c423a93f7f1437984d0528fbcf8a763060505fd5dd365c0a585ec923fcc1b3ddb6646148de447d924b173deb750cd6b80e57a60edf7751bf574849ca9f56be70b445faa221cbd204e2ffc35da6de1ebd084f1fc11a32cc1a484f8524fa95cef64e66e9fde1f0f16ac53d5dc4dd949ac9dea531bef60f27a5bbd30fc5a6f561c90535c39e877a383e624e71b391c6f7690208603afb52f0dc22815e2f1d0c13534930fc169abe32fa4aa183ac6bcb911512d74fc7a2b4b4380cc8d4c3d530503fbaf717e884436e28dee51801b439144871903507849aee43eb2818165808a4e8aae69ba6ec9036349f77b3761395ed8daed1d45d097c1b8a3e0daca92dfb8dd8c98debb42c2b47b81ce7ca5bf248796f4b0a925ab9dea8658607e6fecf9f87aa775bacb2db8b0f2dd793e125e8e76437a6a8f3630e49218043a57b89a55b0eb834ee43057325f900402a7c865fe92aa1723b7c188f3223450744cecc57b4af9c92a4432e7b8291c9f70a10efdfd439271e4090dda5200a3e418445594f42c6c2112c21b06d2766055cc132b4e12f1c230b46d644f8a962c672d29393047c00c320d4631db09ae22cf1de4687fc50403fd9ccb0c0f224b9982bce2e1c0fc6ca1a523b8be8fe4392bb46bfe0db99ee41d80a30b4e41a286b1dccc57956d9c9af2215c000849ec7f43adbf48622326fad860d115720d92b13b1e65709d5faeb1c84fc1065832a7e9316220aaaee6e4acfc452ed1c09c7b3300ef8f1540bdba19ebd759b3f5729fddbf7a960c3b29606350d9c3278016e574c8f8532ec7af483923602ded29305cc4b39e29564f1523889dc19700f9a356dc5ae0b8a37a5fe17b3892439d3a946407d675e27033d2b481aba8b242746958d38050c75ca1f20c46f117a5ac71c7410cf0a8c8432f879bb842341dd7399372c100f087418493520317945b0016f17b3dc9dee3b58a5c61932a0ddfa590472d0ea367003b6b683a1872b46b837139980128c03caf8e7a8d7c2adc0096c1ad0f22315e3a309d994ceeca1cdf1bc9c822bfd7f5da1a8109a7da0c49899113efa265727c3e0a634f10ede777beb268c6a1e19c26c6dcac30381596fb817dd0326e402e6a13af05b20f7d916b112f945a9bce40fb06df5718c795919bf0443ea1fa192ccfc109cbe9d0078fa0df7a96ac9aee8b1ba409cae9dcc1c4d0dfcda561ce59355451fefc1ddbf1aac0307bb6e525a9442fa7444ccaff03f94354004f9d726911a1ca78e275b9a5aa700d1a3b2dc56735de187726e3b9c2f69c5ac5837b6faf885d345ec31af189575a7c3f6fab009024d1fe8aa15d91678482f60488234b9561309798e8330b07782688d29888618cdab06164036010586b9d32a5a7be918266c4fc0d99e99086d77c36bbffeb6dc31f224aef9413bcfe739615902874c6de5dbe6aa71e64076e3a0290e2ecfdae9ebacfbf129e9f20c16415a7ae536c74100fc9ea4dbecbf8266a639d2fa6e6ab837560cbb5672cc10a05c1f1e56fcf2282448b83e7c246eb182f45658b77cdecdb167d73c038e1293f1f43fa1ec6c4599bc4ac3d5e72ff69ab5051f1dca5dafa0f66cdc11c59e6dfca7a42cb429e74a0c356d52098161bf947972e480c79375c852df9bcaf12646b11de676a3740077f62c4ae357ef6c52454ca8472013b099aa733a86c62ab83567e135ae1e7f4a47ee0d4de83f85a23713ab2fd78a5337b3ddc3f83da1e6b6a2677e0c23838027326a64f0e12ef895d6862173f61dea9b2cc8b1b320dc99c4266660f487514b19dfe1afce5eb49cc9c9132c1f23596e4d9cf1e8d5c0d4c84329bb26693a2624a4a8fa5a50c15f06b08751377bffdb42d16cefc5ea9e3906b634fc3ae4cc60a15a15fb0102a98caaec89b6e034ec020cc91528d56c3967c9bfc0901ae1aeaf35acbf8a106e87dc1dc058ba92b4686c20974e2393c4f2ef75b2652d430a6150761f0e2e14feecbbc3fe6ce2eb84f57822be40768daf8b4ebf209b1a4fa974f2d7136a3d9b3e38aa21d94eb6371133c487c0b4882f6632f3fa9ccaed9d696a04dd4c8c5f0fa6fc35dbf366ab220373cfc42112def593ba7dbc898d1db8a4b1150d0ccd08deb3b7dd46df5d4828b666086c61e3e17cb2625a79794a312de5da91cae6b4a1a50efc0ef6ff9b03a7b46afce5058046313ccaf8b5de9abe79c75719ab6ccbdfeef3394960c698644b87f31bc28ea0639fbd7506f64be71c08a3a6fb22f18b0a190ad02b18d6ddf070abaee3995facc0249ec0d3bf23c7e067255ad4d6376ac6bfd0811283a2f41eb399fef2be0b1df27c6b5f0d7508a59221a6d3351980f38c4fdeacae35bd437580cd53b7c5236c60e3ada002bc6d28a7a4a2b07a8170adc1457fc33cb388746b64d05da1231b209216d03451f9b399a78cc373338289020c3d4e557c6196ef86dc2d6d5d7c54c31c726d7c89c19e910836738bfeb12c98d393c4d3bbd45b1d4e534f133b1582dc5672ffe9088860a7402e2d6b1a71fdcaade57dee999057962876afdfc8a307c4d6b4e21a5cd2bc34f5f06ba135695f2ff1bec3e6840a1ee2bb92ea338499662523a4ce81051503d28019b8cecdfbd321556c515c09c6137b6e4468bf0d6d2075b3cf0fad8fe3da0875069f3452adfc573f8a80cfa948c7d8b717b5c2c192c92f0d9040005ba3913f4b43798251f43d2a26a5eca1c0f6ce733c695bef2faec2b99794ea1a06f8dbef895ce2394a630822813aff831f7479e354d5c5b4c6159fcdf849886b00482ca1a5bf73b9ba7f0fd8f5a623e3e3366c9196d98d84136bc2a4962a8563d615e5fe36e7888400ac96a5ea941434dab1191688d10e0d9615de0607b46ba506e69a4da3719b48db704f11e6712b06547901ea9178d191dca8444aa383c5aef13edc2871ca4648a96e8bc56fb9e2c8fef2a976472d72b1459797eb1ff51dd253830e17286df423e90bff08ecfad60d28b28242206b6bfc7f783b7fd394cecf7c57b2724de94f6b18bcfb84f4a07f43603d2ef693bf27d3c8aec17144ff62e6fa216bf248a8928eb70623a1fd4738fc33f701dc479520c7dfbfac580a7174c94b749cffaf4877ff528be9e89d5bad982274ad9b8289f159233f6eac9ab77ed6eec5c802f8255a3d69a2b0d12b5a47c7aa4a849cfb0a13f811928ad75c2ddba062a96f94a9ebd3d96adf3af44ddf91db39cd195907920335494d7370e53125a63574163d3af85f53e4b5daba6b3816736f90ee683ebe498138e4caf1cc8df768d5da3e5521d7672d45bb029c0a004ff0aa1a764316fb417c4eed03e25880ab68d2204a8504f585d63c435531b0d4990377ee436216b5a58719ca90cb3fb5bc16a90aed355aff35df070344f3e6019c0c6760c85db499c02217f1f404d899c402c8ee88fe7a40e1b8546f445b1033c37be736978e86f43bddd817c037c9a93dadc03f9049096733e292ebf5efd5c7a9e275c4138cf471733ac89067cc696093881d92a59d7ede86fe510dbc1a9d59b9d0a19ddec1837df09968007d4b6e5c70223f7c3b744123656c0d491983dd466db6e9185bd4ca965eaa34cc532d1ef92dfca450c45606b259ac263290842c3a4015bae81d3f2046f7cdcd689bfa11d35777fab4c2cb2617ce4f3a3eb3b3f091db6d957185592b0c66748069aa2add576734911cd93c35d05db5c7d1f59bc0e99a3f174936bb5153254efc542047d801f7b315fd5a319c5862804d90c89413ae070aaee3a3fe29b7aebdaf9c70d9a87f6363e7dad833e02c872f3a0fbf457f5b9c40dab55f6a1aa68d3108b72e48b50c44d78539d5dba7d936232b834c285a7ee4720942cbb7aaac2b599648bb2d8455067e7caec56139daea0c80bff1a54b845a2ed9107b4f60351387e6a5a9e0acd642d94c8e498d3c9e3d3bd80a4244b90877d7c8b2d099c1ddd05c68726d1a84fc6478636cb4b816bf8a31afe6a0af2977c7fd368e7e3f4602ec379a239733a353f5cc5fdea96a6eab6bae66f9bf1d136eb51fc127d6a87350b1ba0a3d9ab48e697145a0389a2c9aee5bd29ba7d0371d39d9bff6f37c5dc023db542714fa15bca96194c32f097721f4d57ebc7596859d85b04e2695c1d7c308d3867f6e37efa490410a371669c2aa5b52e357e764811abeb34afe73699ed28c04d1719dc6aaecba8a468a734d977a8e7ea0ec71eca22b615d46ed00b62b951a19b5bc2848cfeb84b7ba2bea377e490a9347f8a9716135fa38c250e249f6712f7cb3ad9210d7278b53d599df99ef6c5c4b48faf2a556c105b03de88c97980d58984bd47fc149273ae93952c7e7537af0011461e1fafb63007e2a02642188b01206febf25dcae712fe255f537c252eb624f3acbfbe4b77276dd074d0d6a310fe8433ccc38b57f8bb6c9abefa39d56343fa04ca7a4e523a5c5676606ece4298337d7968a2d0e24dd7c29abb09feae5fbc48e9a73819eb8439897b6fe8721faa0ad3e9c87872936fcfc6cf5d6813d8a98bd74d4bdf653fdf25d089a6260a5fceea4d2af32bba93e50941deac00c07ac9166fd6bf597b76d288f1450f11de2d8c3bb5e5f1a5f00a37effa72b0b74dbd48c7d72c0a8ca3b7e6cbb559b18f36af6d66d1c1cbcc5c20eee8bb31727601c8ad05d9f83462252aa154e46d9489590df8d16a67888a46fb915b4ac3f92626c480373be246c248f88e8c4628c1e89070b6e5477e30c6f5c6a8b270d14dad02d84ac7c6914793554932dba2333f9223002d0a32afcc68b2a7bc54f50377f5dd2d911c42ae3fbf944417aac23516715ae4e7a9f1a26257c5c654a9a1007ee401eae09e77e0372d4d12c45f6cd74f6c7c456c284dfefd7d764cf8193c716a64b538bcb52dd035c5c8dac16469c1f16ad34a42f10e6ca2c10d61300c8dfd445c403fafc92b26446f4cc5971f819a0455a51cf36afc935b0bd12c85ea5d4d13b3eb2640423a89691323fbcdfa7b0b91143be207fdde1c2f430bd67e1b7408df53fe16f88822a1ae9993a3eb5b21bb9e8fddc504117eae27520386a4079ad7b023c1365d03ab171ae9e5e679ac395336aed3ed740da2f2491e01657d1797628f0b7baff91c9c93b5ec61eb00548c7a5e596481de5b138f9f904d9b93b1325083f376a85439bfbc88884edb08bbe2d92078d9a9cb62992e31902e4f6e3f344a95c3f84af4c4da3b9aa6f6dd1749031783f37a8fc28afb770507eeaa942766f7cc634abc6323b6b7f42f9f1ab766b6dd8fb28f584b3b031125dbd3d38fd38d0030bcb42729c01bd99c0992b96f7ac4d34d9d602feedd77a599f626f2e7a9740cc9b47db3cc01d1499c1e17e3c7edf6a0c49d353a34d820da673e2e312213e2c4a034ef87d6509faefc5475c0482712edfd9855a1a495c659999d35b6ca779ecfbc2550cccf144eb1c295f6777991e061fe77098dc77a31ca37fa81a9663f71d7256de9a93db4a6f9f8c8e031e3912aa5d123992623f028d3473c5b337fd22381e4f60247aa9a6f2fa5d57c150c90b6607e834d934260751fd34d0b7c9c987c7700a6e3ce9d2d71fad2a3124c7ef74d3b0b7e6cfdac30de54e214d9ab45f944618167d3659fd57403861ceafdc12cb7de82fe408be7ca2c1b7d790de8035d42e670201c3437fa3ff1c9274b515b99bcf0eaea0f667d94271bab64ee5d5c2c3fafd4b90464ed049b6da3ac7f70d6a4241a4c2922b5f6f896fd74bdc52fdace0364b519d41d495c501f1d94cc81bab7b603afa5c1a1d85c4268e06cda8905ac56ac1b2ad386d46826ae3ec57bac8d393b531b453452ad2af405f85a7591642c002f0fd34bc81591e5c30f28d31bd9927cb499f1c2effcc9727cc36dde6f7fb7c89698fc820a943f540596a51ef325293ecc2f91b4a04ea18474498e5c4cdeb67789bf8dc175dadb3c1ddd25a25ffa684c43e80e528f2a1af49593a639500a8fd5af8b6f50316ecb65b2ec8ea985dfb66dc2c94ee4e1189c8988a89bbba28aacaab104887765d879976dc9ca798d5c7b68f1dc3ab2c1a08f0af591572b6be673be3632c17e3aa14b9af67ebf5aa0f920067728ba04554b5b408354c0d1d2a74ed9e71e03acd750ab35f4135796e63f0b0ffdb5b721c5a068f3dbfbc0f40054a4c26ccf344b646d00320f8e787486b5a54b2a8c17523a281feaa58d3edd1c75dc426c4d3da10b81b257f0f90c3ba8e45681a7b4c4dfdc69e6ef881321d54f92602190a107f7f213296d3f5bfa347652877b1b35a410d2ed26c82c945322c13497277fd2799441abcc3ba3bd2aa715899eff2f18a12c453c483e3a18bb0c99e2e91be1e87ac221d1058bc52684dbb01105d68b64a27d5cdcb2195aa841dd0025bec760ecf4c7ba0e3c234d9ef01a6d7022c8d6218e494057ce21334acddb1d847ef1a2e5ceec33e9d7cce22e56aa74305f9cb8574fd91835031e6e084750198791624fdbf079b4eb3f4e2cdc9ed4eed8231cdb0fcc750dfcb8d7b2ea97821bb660e210d642b6679adc71d5b2b0e003f1d50ee451ed6547365715a8f7a6ba4c9a51398ddfabea728116fd82b87416da02df3b7e239af0ed6a47a0f8375a3fd3bacd2e6dfd165ffd2556b9ddf5d3be9c93a86b4f8fbb5f2721f04049b29c5bd99e3d8a5839685b3110026e8e71b31f702d9865ff9c38fa1fe2babd4371555486cf0715f89a8a2735c984e43d34fe827f5717f33752f909fa350dde8f7b6b7301d49597f228640b32d842e391479a2ff1998ddb9fbae7d4e3a2516cd5d8c80073354dd8f1ebde4e50c6a63332b1716eed7b62e6dedbe8a300b2ee30bc915243037b999f9bece13ab619169bc97a69879b86fedc9dbee5bd79ec4cefedadf383da2de0b6983253158d5cfce5feab6cc12441ca858369c76b77d9d3741034920a1fd389e391c51e28fc14bfd7784a6166b0342ca939e674f522ffec86cc2f161efbf6feef2eae28bb2ccbc73ae0622fbc66e88d0f663dd6a3a1e8fdecc9a56908961da6a216f45b1645087cd5ddf8c00c6fe45680b374d4bc1d1c706fb09e721017d0e9c3f29f9d806e5446721816fb9df3b0edc4c795558abd21abd72922197da7972f1c69b8d843cf368dd738c3c8b919d5bca34ca74353aa8118ecdb3a46996dfbe0732445f3a59136b9cde6080fa609da29e5e7b385600bc41d756fede1aa92836491ca51d6efdcdc321ccaecb8adec479e5142c003f90970243c8c44d2f93db8243e04e16968d7b1608c8b77ac16eaa582b005d6a566cc0f9407db4501ce972086417aff945aab3cace5d2b1d1292a7b3dcad8fd53ee7b28d59f04fa5771c845f364d3b23f0b7f057cee46a3102ed5513767613ef5da3e444fccae6bba29f7afd46db80352c47c9539709054526c12b0d74f4ba073723fea6a55819f133f4ce48f25d0f8b5cdca734c3457cc7d2c0a1e87493c2cb5fea3a28e04279e4bfbf06e8e54c49c506e90271bff44147ab6e425af1fdce9a3c695f5239f457048a50bd537c23bf40beff73a109cff333252c94db597d5df26123b6991ef861ef485c49ff436de0acf97263392d12f318c48e11d027acc162429bd8840bc8fae36e344562c7a55e582b0459a08687c176fdf531dfe8f6c97865444da98ce0b2bf506b3814654478d0e807ef8dc2790ecc56048d511a05a6935dbf8e602eca09a1b3738a9ac8d5c0b5950f7d475d710b87513e7cea473419418060034e4e0f6058fbefb55c5ed3d664d67d8b63b40a7836740598f1dd2c721161c844ca770b67339e3250df93b92a6d10f4a269629fb56832fc5a0e68394171967aeb7b46588ed01eede5ab04102d4cc8e75adee5bb438b128548a654e517e082da4fc7286137acf264dc252c536f6282d80d2ab9f7b32d9722ed404fda65ecab78ea3489d00228bd49bcf4790d617cc34931e35bbf84be3567a062a563ac0494d9534a070f6ed1d40ef09f86a893ca0ebd818f577d28bb71c61a93e23b6ab6c37e138e1c99ee46db272f7cb1af76f8c997448519db1fa3d0c0a44aa2ac1281bbc9937726ea00e64724c21296ac9b778889236b2f33fa15e6d9d5fd534043e3e25e5b7bd27a374e8c7a40f7b20a71d4cfe586b8143218700894482270827f5bebaee4229be4f1ce2fba24a270538a7f044ee6e245302b40ca625360870d15581c3dc5f1ef94e103b54705997e1255f4ca27dc705eb88316b0d6802e032aa677088d79704a24558d91b33c4317c154d495f2dff8ad55b050306366f17175b3273510670447fdffaa69716145f9db178cdc5259d1dd82438bed8b70415e78cbe736591744459c20089123ed0880ea1e8c11a8e2925bb8bd383cd1249436ae414560da12b6df7967169d2d68013958ca50ea78f2b0a4737dd392b70c607670c3b06915e1c27230456302004ac6afb1bb89ab4512c3344d15eca3bf804caa8ac3b6939efcfdba3b3b6c544f0ddf407f5284f89fcb40a7a005f1d45d38af5f36b1d694c7cccef404d991086c49a1983c2fd146db749f6b06de61a9128e0ee11f1e8ed142f9ccdc27708f92ea56c41352c3fd0aaaa755fb0c0fea966208f1fcae7a4dcd72ec6dbf1db096883bddad4e7d9f76d86febfad40a0acb20ee31eeee5f55a20dea1d2839521a745ce346c3a5f712dd24adbaf4929b5fa1dcf9815c52cc211a071b1482c75f1e7785732aadc669de7e73d68ce9932a8efd2f267fd0b65f7d144d885b13d5af1d3e966de1d20c3052f94a9cea306252193babe795c28593ba2f45a4795200ccc728143604c6f40500cc1d434b7f9c9c7efbb7df6bd84d0378d98401c7a3c5328cc2636e1bf32a326875607c390d8e5430abe7506a58792939918d32eeaf9f7aeeac18689ffcfb531a63b8aa3b80c423cedacf0cf9e9966f6cf5c58a56cbfbf05d33b7c7f93b03e167359a5fbb7fea85b9e6b347c2f221508354d1aa989f674d58f7a60ec033b0680f696a0f31315de4827e58933e18a6872d6d16060c706dec827687af7d8dad41536dbc2b556b8aeaa8f00391c3a3924dcb7d171f5b158c584a2ec11c999f4717d3b1155660751de2adfa68b61c49714ede236968ecc52f1b108ed6e89cef0a6610d1e9f31af47376f1ebec627070dff4e5ee61754a25d2af86255da6000383969b5ece93cd5028122543033998a01aca733cb3c6ebae23701b70b9b76b633f23c3a617aaf01ea84ea8ae41adcd5dce49f6acc4d049c47e1730ff7f9f278499b83a4679cb3bc670770c7c1c31b70076fde09d09140d1f6f0f672013efccee2fae5fbe595708ce1d45b13b1757ce4e8150d1bc15148e0552c34e911b0be4166d90b48c2ae0dfcc0b154769c7927b7e99ed4a586d54451ce5cd27b0f995d583dfe9c93e82fb2916c6703f96818457471d1dab107655dadc74a7b31e33f049cd03141e23e6089d54dbe0fa3fe97fea0e777c8462c49ba7aaabcd51175ebd993853ca23fac88b74fcb7d217d464179c5b558456dddc88543de7b8826ade404c7c5e666b11af167874f6ee08d285ddf6a423cfa2d022be38dcb4f3d757474aec0f9f6364170e1bf063f57f5dd8d325718f6eb8e8e83bbfee2d9ff9c08b0e1ff048735b9f596a1e753050107755b090a56392caa9848bdfec970554ce64b741e1dd96b98d7757908f60734bf5b7c2a20ac73c9f654397c0bcbf817f6172b753493555f7aeff3b04a78afb7c599d6ddc0a20c8819c93f3f4b6fd90e41a43a2c68ec65db0843f990d4606454c037536a12c16c32bcff404de93d7b02d6945ee0e3b270a5eade705fcf368dd1583bda183f90fc8f86ff25ef0bbd47bb5cef81dbcc6cde86c7 +Output = a5ae7657c8a242dafffe258172dbedcb + +Len = 120320 +Msg = f96a6a26ab1e3356b5741160eff9295d649b85c5f8bbd0274e835a1ee87a6380905595d8f711d2179d3e3086f09e42ffb8ee9a5db2048b317b1a34b7b06ab90854fbd49072ba8dc303cc450c1123f9061d4fc5efbf97a75a8c4986233c4e73a80d012e366242ecc2b0c557da9ab0d7db5b661063659dac0947b75a4cd44f16ca8212acb310d0777c6cd26fd8d36f63e43ada82a1ed3e20a8760db719c0952cd57cd454edc48db75afe9b94ee0486258a825423929fa18d9edff2a67247473d31c3ef30cdc6a033c230c7ce04741da535fa7bfc1cc2ef7a534b0f2d3fb38dcf451f0c483b5d32731dc8ff25026c5d6c4e6bf81428a04f702f810c57684a906c7b58d3a220d26b00d48feaa2d0346d013b9d72749f7feaf69a4b9029d655789b3a35eb48626d72614d4d314c561476ec6658922267a8e894fc6f43ad6f1b6de5eb7ffd42eb76701ef2ca7b2c7d54a0b6356400286a6370d2bdb6ceea1ce696d0f4feb096a1358cc02acd71482b3b12e61288638e8ef7aa3945e8d9e8c6fc1be6be7aad4e6ef2efce5c20bbaa4912f504648d635abdaebf50fccd0bb053a625afb1bb9b7239f4c0d0f289005ac0217098933ca996deced79f4b2c0d49ad2cdcb235882308ea84284f53d1e85e76b0ac2b075bdd49d9a019af98cf86bbbad66777b3abed1a68ea4fd2e7c01dc05507d14427b2a77c966cae074c7c1f0f64ecee8691eaa0af9d6e5ce1161d4488446e066c5d0bad36fc7abe30d0fc804c91b59b68390ee4d07058780448b208bc2a2c732a112c9a7ff51170b08b17507a2b7a94a411df6384c9efcac4e5450e66f18a4106a9de145f697aec11e49438a2198301c28324c2d3907c7ba8559f018d80d098888ee9c3df3efe5bda453ddfca43180b4af6a7acc5ad47b2390088873abf469f39281551065de3e59415d8eefd9181dac5d22ec763099898fd4fc7487496337fa0df2a63ddae71b1c6bb2e0c40eb0595bb7e82bbb48ab7557ea826ee43ede15f461cefa46a19f2e8f8a107e29d39ee64b2646b31c019eb1044746b1eafac9668b1452db9b787acb1b32e2b171b63827034ebb0d1909f7ef1d51c5f82c1bb9bc26bc4ac4dccdee8357dca6154c2510ae1c87b1b422b02b621bb06cac280023894fcff3406af08ee9be1dd72419beccddff77c722d992cdcc87e9c7486f56ab406ea608d8c6aeb060c64cf2785ad1a159147567e39e303370da445247526d95942bf4d7e88057178b0900946c901c4281f4272070f10711119b768a4371d386d6d0230d1a286818baeecf197b49dd34fb27036d556285db0143f6fba75e27039b23c704c81f702892f00f0e4ef8b2dd272580bafb734ae5d25c2c12fd77b670537f475b8ce5fdeb85a556ff321d3bcf986825a5eda3b4e6074cac6ca04f2071924b2a7dc30c7fc615872d48df37b660c167689ab664524012adee655a54f37bca2ff6e82503644cb50df887a0d8d15524cbd025b045b18886f8789966198de37d9613270d5b49e406b25f4821610b0144ede2b395b83123c6a4b1757e1d7e6d2f0625b6f684af206d1cb7f6db70d1f9a44616e0c14c7fa6744b5f85ecc1336d50f8a5147b1fe2866a9599002978b4a2c57cf329bd62fb84f244a9473cb55b68860607cc057da28a81b58910a5f921912aeaedeaf4ac2353c3394546086a44e33086c45a203e6da14514fe94eb62b74937389dc1017885778991a9eeca408e61d323612b45c2927f270c60093455c43f9cbe59386e689074a7d64dbdece89668f04474cbf0babf589a3453ea4b32f6e8ae04c6bd95fce2ef907fb74ffab30b6d1a6265c8bb7742e2210550b48a9acdd8fda45ccd0295eb2ce6166cf17e404bf2b415ba8e0098db805df7dcf46cfda784fe1591e35ed417d11b02d56ee200d67e5fd6f9a86a9fd7d7a3946f267ccc128141b0ec9ce5280750a1fd9704b0854974601e999443ecc63c94637dc734969d324b3ef356401228400d3f184f743e0389776510ce4700254392dd8f532eddb62c8cf81cbbea12f913df7fdfcbb7aba302183305d2ce9a8371317b1a66b611ebe48984ef1a6dbb08307b1853f5d55e86929510cf3e54ec6f3a02b4b55e84c3acdec35dd10e257ac44a72912b5a57b74c9fa087036d74a627225922d6c6f573879fcceb6913bbc2bbb65892bc65d95653adbcfe18ec983869bed73df51c92a1fa9bf8d62da79b335d088f659da4b4ac4a313cee96384a139563ff7ea6ebe6cf7457e98685564e3d36b5a9a2359394398ebeb2e0f1dd14d848b6245d52915c5c83481175069c3f50c74219d11abed28e9fcab17db24762f6d229f8728ec98df9b601033a37d6090e9d32627ab382fa0c0bd9bb0d6e13beeff043ee26c1e0d5f77b07313e7fb015d7071b15e7a69c9532416022287baea323f17878028263df0650cf1e1a74a6f03ab34096d05a481ea1def2a94771849a53744c189e46ef0386c5cd4c268d2722ba205787ad452210db330592f2c6422edee743625285deddf948862e0b4fbd17d5ccd44ae70dc6f63efc2d81b30043bb26c8d2c7a7d5bfe8ee579e463122d56a0e172b63060a83495d88bef7f0b625c9dba78ecb36ad0e9ed6815a1730bd0c73d39de16292c20374a7674e58343e44f55df1ebef6782477a32445e336264cedfb6df7acc05dab422bd265045162f4db83e366e96b2dc0705921f2f0d7eb09908383a7bf1e7ab01be0f347920ef0f9c7cfcf37b73c140a9cb66802127ce270787c86d4996a0b998b10e200d8e5735bdce0aa7b6e8eb26bc363005f8e4e94e76c8f7b6880cd99cd5a63a57a1efc7581e25f7c19578c914cac07f1efaf7488d736646c4abd6fabb45083469bac7b7dd5a1f34df9ba5b3813204b449cbc1646a99ca260629877c9b63515cc4dc98b14bee0452603df262f2ae7d7004cfc5e57c367f26098580d7b3bd0c44077be54c0a469fd0e1f0d13fff7c9522de9b872428f5ffb73d4475b4aabea35a901d4fd0cef02c20e358e4a2fe48e64d45a397a8f734b66a1feab86bd6e4b130fd250ae7d08743c2d2da8f44757fdb6fc87c49fc7d9f4daf2fecdb95decbb047bd47d919d55861473efa439cfbadff0ad58a408712823006fbcf51ab08e02b0f3eea2cbf33f02f2e863ca405074fcbaefb51fdf15c89e801f216bd140bae7c182080687072fae7d9572613252ed1cbacb867f493b212d010b13760795d934dc2d0bf2eb628b545e8102b3365b8d079b48b30a706c9b9a2b397b5fe43554afabfeddae1f8bbcba3db4fc0675f5bc84036f24097c2f9eaca7b3426f8faa9121d6fc67824c0a2ba9c03749a317a7e25d9b47c2c3950d922a1d814eeb317cfa51052f91b69a683fe89211cfd243f967580ad87382e18ddfdd34a9891ef131f609dfa04491302c5f41594a78da2174b33ef82a208c8b37ed8d9535da4ff853ec0f0c56665c37def57abeeb2b05da9f2ed60f46b22bb9932401e82c28c56d6a462c3559e060d607685c68fbd099960341eaf4330fa4942aed03d4975dc979fc6b2802b29be2362e20af00824edf7c26524052f921424383ae59017d60a34493c3cb1a687e2d7edb853b2d898f1fb592cba2cfa1ce4cee26d0cc18e6199bf5b6b6dd26837088d796ffc798167aa168cf12d613310009bf9cbc24c1db70f9b5eeac25cd0c5b3a69e8f61de834f7acbe6391a4c7b49ec2dc6cd929a3624d04abc10d6cb80a268c5b58d203c6e8ee89dfd8aed6932f90c06d1e8ea36786980500b9417a8e85b9c6d66ffb42da3c4781f2b6d3321eacbe489b3b4559b44c3944db5eb017f886fc3001b3d9a2cb37eada20836782113210a58d4a651433be18096537c30b9e13d71105aed4ea42e1c0dc90c9d28c13ca6e1d6dd3569c8ce31e9cc5cce01d273732b309e855e4e643afd16b0f7b19cd7bc0fa605e7fb966c3314424a571173cf7f55c36e8c2566064a0ffd8deccf0e74dee8290744a3369673a4baa4bdcbf845d0855b4368509574d7caf00bd2cdb0848e0fe259c1ed13ed622f77e458bdea87053e6aa5a04c57404292a0a3403a0d8757eb5475f635c8d18cf91c91be43b4f38be5640dca9515f9391b51fcbba0801dbb1f11c44829dfd362b60b25651a022be32efa045db77bf019a9b670bb7db28825ff8cfd3e15937371dae627d38d3c80995f7ef1d01fd3c572e22097b63e1f87371148694e95be3238cc10118039dea21d1b758ea85ac7f9c34942ea426e116b5d08a6910026aa80362e3b6af19c6300fcc770136ce4c30d89437fd0c69a52d5062a5a2ce954d2ede8659a9cbe21641da707f128844a5f71436549f3d92f3e34d11ac565608cd1ebce06e03f3c655c68aa316b4694f7e7a5702323bbf0b94e0b3c4e6b031c5b220a55869ecb02d4a66284f850e6057a164a9e01bfa183a50cd8a639cd5e632c4dba2d6918b897fbecabb5b154af5c4d45b12b85504d289ee52dbd517f0fdb9caf8ba4230090624799a4baf0b8db0fee0079b722980745f3816ad049c27ffc18e1ef6848c8daf85437de133b2021a6d8d124bf6df968723f4c208d776a273b1d6f65c84ed400d08e41b83cf51ceba7aa2212b2cbf70923febfdf436eb8ae1f36b28f72b9d4aa716231d3c6b2f1c188be9df41fc11331d1ae5707a094507d1ee155bcc5fe3d20518c92b11ef9512bd0a28f1974f1c0ab11caac3a138ca40cc0a9b37e5090600b0749eec0c43cbd8305d2802350b291bd5ad019d72acc35e59afc76649124ffd2f946a09344f1997f9eeb1b8211a808e1135b3a6f34b778801455f8d006006f10adef52991fcc777a1238bbb6562698ced1c89872efe30e74b342c5713dd7304cabc07f52c301c9faf667db409cd2c3df2ca48e82bae34a3bfe5f669896fdd5cf69567150cd46138ab1e504b134210c8a7a8bb70f141cde3e5be856e6a008e2416d0de3039d1df691eb2cc278da85e55941ca9c888a140cf4628a00cbe77cc82b3d734eebc0ddb5b8f8cb9f17ee95f0e428fd998f8b4d891698c11eb8ebce09e541131f99c72a0358613df50efec5819386a14874964dc4ed6509eb4e1b712a181e69cf6e1e775208baf06ede799949efe13223d8497933116de100fc050a9b3c2be3f909453a14427c8f56f6ed85ac61df4cb63b137465fb09c2ea3326feffba001e06dbca06dc8e1c6757f8c91f1b81c73d7a1d62b3e032cf4c2193ffc2aa2a217483561b521d542124ec54aaca29d83fa0d9efd5bc043134d9218efdfa3cf51693f918b7a0592d11248e8af11b59ddbf036032daf1747ec0e68494b00a2ab335d8d2943d76028162f2a91c4a972dfabbd1a776f0f8a383fa10a545a476e5ed25cf9a490b47cbe99d1be67905a208c7bc881a3ca63603e956d40e0259d510fb6cf4caa7bf99f7de361ca131b0d09cbd47b332e4693e28074dad495b2e891e7651c4ee50b8e128d7b45173c6dab73c53c3df7c1eb87582767508c1d0b12770d69adc7fa485b1d15e9e76d8b8f1aa7a23d779704c2280a5af337321d38014ba94ae87f943a49073db6ae94a88844ed895f8fd99ed25c3f42a2f78c403f9f55e58e373e59ea3e1a2f6901533a600f8ca229ee8638230c4007fbf8632b2ad2dce7bf01cbf15f239c108a4a73e91f65ce1623fc6679be2156d086a37e8901842ad764adef05a1e1d60ba1f0bd5fce2df90dd521400aaa81c7c5cc5ea700ca9c85de06a5723db95e1045375bf641754f56aec8c6dd92ef16db105492a4388f0236242c501c40ae8492e9d3f2e93a1ab22d22835106ba96c6dcd6a6a83edb579e85d05e16b4b7883aa31dfe1f5df0c740c6918e2c812aa67b10424b063d8e2b58b90a255f044950678c093f4a190b83e0682272bd1689271cc179ca1669fb12181cfc0793d29f0df596d71ed9e634577a5dfdb66e8f80229135a6ab3f8aca14c6f4cb8e1ae760c7cb06ac23358c1349f7eb4be2a6b3b69dc2b4ef77e867a3394a8aa2425d0b3586d127b3d7c6d34f643d5b347fcc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df144a1a8139f8f876ed5f78100e7410024eb29fba350d98f16a2863802ec700752987ee6669cd4b05a8fc3cf5cdeb8fdcb6969fba3513787958c83cc5eedcc61d46eb8c2a3afeca506cbadd84d0d7ec5d6bd4ce6d5ae928d1153ed607f55a8d00f4debe76b573bd80c40122641e2270acf4d6f47cac78f02229f0f9ef4c2b9e45bac84af2e0146cbc3539d43dbfb260f2d902d98e33a618941a486d24fa3541152111f945c5ca1e2d49cabbb9bc710756a3c2444cf85ce74e72acf94f0762bd98b02193186c7b1cfb871c9f7e1c45ac01d97dff5d0283a679b88667187c985cf5ef61e012db10af4d77974834e718961a039ad06b59019e3c753d7d2660c164556637a8dc1c721d4ba2a47e8426d10ecaa983801b06c014c030390422bbc41edf9e0cb21d3787ae1f8fa90816e0585c39549fd71710a6532c71e2c3b39589d2bc1e49c77e3239aceec610af911d95c88e8b569c077f9da2a9c1a08482f7f8c8136e54afa7176f5de3d03f3b9de5709af2d71099925c8c485fa6db0d37e8f9470d1797323fee110b2334a074e341d1198cbf359461ae5a8e75aafb2779717498d2a07817efbd06fcd97a99210b38a08e85cb2d561c7df1bc1455689af0995104899161285e8e38782b2b940cbdd3c541048361a76ad1381a632e8a2e456878d15b73b92b34688ec941cef8fba019287a3270374ef3b317ef8bbdcaab20e6d1476fcce8e91b54f03644eb2db75c12b18136191815602a7685b38a8ed8281c45b0ee27562ab95846065c0b9b089ac6499d39066dc2593f3d22041e3f7e0611ba52ff096bb6b67f7882b0b5aab5023ed61863c09c1e85f9540fa600466562cd1977cbfc8f54bbce6ff26971c2883b814138dbce0ff18d60a494c0b80955e2594b6579872ace704f119eaec74b47ee977346cab82c03187c13f87acff21631bc37643233a4ea7c0947cda840adbbc289538957075d1bcf568a85fdcc686ff5fec4be1e8665718804fac87f6350ac605ec84bab4209035af5f2817137d22ad728dcb9640ad52a3b4910d85ab89ce26f1ebcd2edf1978160613135fe999a0d7e41669f2d475cdf3edf734361c8fa2498d11668469d715e89a331e9ca7827e1935149b6a0c4635638ce0951be1ad03b8380be53decdfe617fc2d8e5005fe16dbd616f47e6095058d21fbc4c963787f0d7339bdbdc09a654e7c61070c6d3307ba577bf99269e8dadb4d9727a14a588093cf0974a69d9d1fd6cb8c0d3445e7cd1f29e21f6890c801d850415255dee3a4e5cc199e6acc6e726b49fd057a4872d384ddb7da437da9370eda98c939c990489dcad8af9ce575095678327410bd6ab785e38bbec57902d6d96cebf0cf72f508067bc50c9f61575132e6cafdca3d45f59ccbcc41611b6b5de257e96da963785fca3f7d49f4d86bc67b1634f6f9408afa3406f7e6a8fd5958945bef944a2390ac53865fec2fb348e5b976fef4106fb041d615ad230f67434369c98d09143be49a3cf0fb77c27a754b58899779b2033c791d884a8af711cfaafd213030aa04da95e10fbe513f965743e2ee8d0c50a3a5ec54cf6e93025544fbb90377af7e26e92bda23371d09af858be2e64e007ed98338166b67bfb3da49b217e0d1ea030a96c8a2ebf44fb32e866fd331590a9f1d3ac8fcece4858df9446aa439cd54cb387a08b5ba545dce8bb08c2e304c9f23d7533b62b45378f34adb81e87ed8844938f9489d2ef5bbae5fba5d6e638712cfa062fbd25242fe763765a45f40620d1f74ab14b3aa570df512fa402e5b9719d4f0c086d65721aa9947892e630f18339073e5f9b3ccd6b9153e06f0c8890b28d6511258e9337df1ef139c9cbe3b69bc4edf5073f8071331913956dbc76c41b46639cf0e8577c668b9f4368bab65b4ebccef70f00ad98b2bfbad606dc585d930f7236d0425748973bc91ed57c50ea8667d5cae1a66b4bcfca702ca232d564042fba652d653ea35a7595507ad95b6a2a0f27f8e3f9649172845c1da98896e055ef62b4701ab29597802b63be987ce422faef097fc13d728333a73383a442d96e9793a8ff275b2736a5b4df08835d5f567053831cc5a1f6eb2078f6994e8257376f74cb4354e3601f2c584ac260a6e3aebb7bf021ce36269093f8ed5150fe6398be2ea4a46bef493a5d3e2e53f8ff79122290d7f8a4a4095bd34fa014715d0479cee8bb8b322ae8707f8f1223130e276aecbac1080f94a7342aa4974b784843c2e5cb995e733947a7dc727f9a797ef79e622035b9d7ae0904de1f5b5c2e66265b4cffc586f4c76ec8ba10fc20f1f5f196ccebbb73c39936b138ea73b15b60b82c4babc76c7e7a63bc6291111d441b1c3a7242db9e9cfe3625802a67b0c7ddfe1d29f72877d8fa30691c1c46f93a9a80739b4e1ea22a841246fe0ac0c339860217300c6f0eccf0ddb930d9241c9b17252790370be835d4d1fefab005517a03cb00a612249b20047093e5f132ee2f3d143f9a242bd685957b34bb44bec253fb61c2d430d0859dddf3de848cf8d8beb154a4ff3d04d5e17019d08aef737d8916cd43028ffa340b246d8455d1ff400f1eed3c07ac204e130db2b9afd8adece7fd166d78572a103280e76ca0e9ce8feb2ae8f1fc9607a7e1134ed97229f376345844267dafe881d99a687eadfcee2e1a7d4caa24263f4a142bf5171a07ce8337ce60585abfbdefca19f8a2c331e58364c0214fc981529d74fcb05bf19cc57bb90870ea58b030c2cba69fc02cb03df8919b6fc731d2c80ac82f868d3d1060c782ae7fc4bdaaca62a5e966c02ea27df468b53ffca43f27f7da6b8096478b27cd5a6792ced1d411372089548a122f2edfb2b798d56cf0f9ce7059a55c5734a3f609dbb3f0de578faa032f7207207ed7203748833ad00ec5f653a0fdc8b5335baa56b3e9122a5bcc211882c71d9fb80021bf11071317c114d74be990c2a8b1d7520b973d1cfe074f05252b5bb5d904324912ba2c488a306dd91fdc673379d6a054ee2eb5f6a283a0bff3d136b8148bf300f7eafac2718458649920890171c93d1ac8215c885ef847b54a1d610c9974ceae38497a6714e45de07f5efe16d6b3360a601737bb7a8ecc51f1b7e39bb0e848bb9b80b320ba7905b59a3dcf58f0bb148e80b950753d6cb8fab246c44ba00feb90e937add6ac6bd74bb26603b1090a5e0deeafae9ff1bb931753720c06b3103e93e915716f33e15c0b8f80a20867c79cef73a05922dca2e3129de5c4b32f14c92d65c306d595031a5bf834b544531b579bd7355ae4464a32525844f43a5d4215c623e974ee1afa9ba4b62a424f152e157be215b8cf79da073f4c3aa28385c3a9c7ed2ec4a40cee674f92095410f52761f65ce87bcabc7beb41406dd875efbe0d96893afdddb10604c2517af06f3b2ec0740c58acbc565565c0fe859dfae25cca9dbfb62783536bfc67be2420542e6dbc5dbb0b518f908ffd244c2bfaf9a8c56743594a4b7d3845d7a5a0b0eba71709dc1a31a9752ab2523bd5f307f55b87206cef1d9d70b3a8bb1be3bec55a503e2da81136db1d7504c5a83cbbc09906c895620bd5589e0dedf5528be10c7338ebffa9ab92495358cd11cbbf6bfeebe3b24ed0fe4722dd734e1c0304d12c404566a766500c9a1ebb575d2cc7cd6bf5da8f703e303ca436cd1258b7b656cec960f64e68696e768786e8d254bda7adbed4a52634097b86b00382d0f509389a1572e51c355c7e8794a1c998ca07c26c4eb73e963bf1ce6f54fde6ad45653e372c617938579305724ff442d6160fe651ae6da0e8da50fb0729a486162f32324e1617fbcb5674cae2c0689ab4c13bda03e5dc13459a8ecbf737dea9343cd8da86db7ab2fcb869977deee31b5b52f5682bfbeee1d5021306e78694982ff3bffe888474e8f407d932ebe14e0bf351a45671f98950bf9a47747e1faf9c2edd4f68fc19ece3daca2c64d5a192b3a347af6d7ce697aa2cea93dc650915fb5980f1df88a0c9edd78ac9f5e337955b94bb8075f5caff35437b5d08444cb0fdd9660b2ad723f54c13ce1aadbcaa414bee357e3683ada93a2dd40ebec2f166ecd61707128fa95748b51e865409027dcad83d1178cf987d00117d0fc787fe210e771a4b5f593bd72be60275b1714730217a5ca102819263d118ffc7eb3c7ec8ade5f641d9dce05d3bcd034f8d9d824499fd19969d40a443f369e19df18976430f48364f47c1a0d1c293a87db034bba07889fd5911b4d505af2eabfba315f07a7cc75fdf73af831b065f7a65e2dff82c06458f5026862d914d8ce648c789f3553e8afb58234f9224505a0070eb4643d08d5a57e4a35eb4cf15ad19eb268c88bc9cba91222049d4d2e7abc2069210a37453f0dd7d52e373a84fb9cc4e88c7b697dd7faaa53244520e157c4890a0e62100a12daa84f9be710242d787d8b5e185ce4a00cd4820e812c120f21b74de6fc35cbf3c455f6197b6c73730d3f17483fd492b668276b4de1ed15137c21c11549371f543367852144bdd76ec37018e5527f0c8d85294b4ce7e28f073c5ee043c99258b6b063694e0372e47323c70ccfe0aac687fc30be95f38ac45cdad547ed0dc61c8db3c00eea182a0f22a68a7f427ae6354835f431b3a5647976e00b546b8640ef6bc60402900351dbefe460cce771cfed50baea41207dfe0307e4979259b39125b35fa5d0da4578cf5d35b0824975b66313f3797956ddc5e56240d07e32164573f6f93bf6236f0d4ddd43104bc2e7381b04882826e1454ab5288d6c948f3ecc3ec91b2cef05d09dfbe264f665fe56d399c4e17ce63a54fae6cd32b261bb9d940a9c4e0f27fc2a894e2f43d97d56450753b787fe43dc8d64feb2d9586261a33b5bd30a493d60cd8db90648400e652241dd7ef412ac324ef7619bd9b512fbf030971fc8619bee49e9c0f9eab085a58f218b6dbe50abf62a50b3cacc5f0ff5051260d510eecfff204bfa8cb3a16f81dc1502063f3ebf729fdf69d219bc95e7423f3d956c57461dd112da313b994894a99ac5faff4353522011f8445a64514d383581c343219ac4ecdcc489db1e9d5868214bae8704f3ff5b86f38406dcce816783d2012de44a7ec4185de92aa7da47a85707836eda3dd492acc033978c7a3e50a8a2b194f5b1b607441af192ab8becda9a8e2c0f598d9c6601f2b58509c0de7422786700fc8d0516ee6015bbb02eb28f7a540af0f96fa156151f9c77cb5eec527fd7941a6f18e68385d1d80e4c3f233754dda2ac40507de3548b5ab84780e27c2f24bb19a401d4dd98f4baf2e639c952d89f75a9a4ec9c8e5eea72ff14f35b319ef46ea751b44a75963d3101f4ab1f72742e0671bd7087c782a17784aa12a1437ddb014beeccc1ec1c0fccc41e0f9006a5ede78cf098ba2f6e34cb117d6b6f021a2d256fe1a7e5b18900f0b1c8e3b59fec737b53d4c1ce168038f00e156a1f0e128f4d9bc0d200666ba54f436ba41a9eb633347ed0981e1d571288d2e88b3bb7d555ec5802d7ac7b42613b019ced199391c1c5667a6834b45155f8189d6b3fa00135741d3e2564409bc94664d30b4d1f1d83809348deac7c0d77b0477a76b546f4928753b947a286d641e3f584ab2f81b81d189db247efc4f9fc63d8264a172d4df1a8a42abaf19e806fb63c48292b6bdfe2dfee4d50793f955865531731efb36bc73a8708fbdbf838a71f919421eb5e137948fd8074c33c7e104740c3daa989eca7bf64ca86cc445d8c92addf11c9a8e1450643d211685bf2b88c09c2a0cf113f07c9d5e5f84cd37d84b1d9af65510cd7da8a69e8d2d31ec1c5a6468a30ead9d16bcc52e1acc855f733efbd7bb91bda55ae37d80b259de539ac186f90e76744424849445420d91c78feceb1da797491e934a106df86234fe8e074fd5d40df011031c352a400f9c77159b16f322315d40102588ecc70fddf4e172e6865e9bc70b99ccce657a9a4c75ee94a3e19425a114babc0c8687297e3d794b739413e8a13bcfdc887f5a7649cb001fbb6f653cbca17756c5c1a078c2e240d920855abb27a78e938aff476a3c8135838626fe3e57ef303cdb287bc44eea1d6613e39dde0059bc3bfd6da940cd9d740a2b8dc5f31907ceb775407ed5cd5df73874354317d559421a0852e7bea329a4fad32d2323abf0370dbb931273e543b8986c04b42f4ead0978d4346bad672caf9ca58c8195b4b25586d6a8a0653ea547ce23d757ee125ff89f889e9cd4c0af7c38ca344512dd560e6cee078e74818a8c22c036961bca77f6d64d15e2fd57b9f31669add962cee34c052a39456856fb6fdc6ba9d8801dfbed644b23a5eed352fc7dab7da34d2e61f69bb3c52e0964ffd8434eb986e3b4f5c492a94f4d70de827fb7b82e0d9ba5d9f474b133b01e549eafa08eed060d366c63a89021424b1d52640ab7487d13dd522ed84b0c3271cde0dc3b56cec1c64c69b2ee2722ed473ac993bfd0515d7e7bd48b11a9d61ec878ce475ccce31fd59ef398ab97d9b42cddf0f51d2dd314a42a67f666f41cdbecfd6fd94b18b48904d312002907cf00c1adcd706ef3550a4d9014541e5463d1a503cc784f63c9651994cecfaea08a3acf536bedf84d60a74155e28e82f03568ba32eb0db2d5ab1cdd8830ee838994c81e76cf5505617b534722da8cdaf11908f534d681ba95e11718583f45f0eb751476bf038edb572e76299f02366e7e98191cae95bab0ccf3bd92ab04bc3ceeb3849fd60e82c2580178ad73647485c03903f84b2ea2dca16a75122a853cb1b9d8826062f817048c7dc19c46082f68df842e51b0ab20853dcca9627dccab95756c75830cc937e81a29b9bdc2f44d60020103ef88131bf4c7a4c0484be1f33149f5c5ce7b8ac9b52a8dc9da8d32b8b35139e899796f7d726877228d3ccafacd5efdd90a5743b5b4e63257b94fca56a9f5b346192bc62d4548cf36f9f991aab1dc0b1bff4afae32d749fcd23b1c2118c16f78635482013b58e3366532a3ee924eaa8f274fab93b67fc5c91e05a24d0a2db8e0eb67586170c632c1a6577d7a16fb05ac6320f87a4aca7f20db8f4f87b356dff48635cfe2190ee41b8f58666b9db57ac0002326d09429ce8a7732444f98bf4d29a06a593198b58faa9cc02f219ae072306aa0b714f7204c6c9d8941234ec97906e65f84ae743c8df55b29184a930e74941f2419e5f840715dab1ec6913a27ec02b4afb2d73016779246edb2351ab20a519a47df921c0cc5c42c4d3527ef4d2ea397b5943a50c5c4f7fca89d7f965d9bff786668c7d6e7c2368daf2d35d29bb9600c0b89466aed0e9cc8c43a889a73b204162a55e5cd53ef3b6baf1f7988a604de8e3c1299c2debd0747db09fe9b96e4f61fee177a43e3b52932e77c3185fea9659aa1b0931d2d48be06579c301e399d4bd22c3e03ff19bcb67fc2c41c3f080fabbdf6e3c0be5b4a2770c461db96de538bf98f2a0133685e39bedba7882844b00764864cb14aeb29ea039beb3fa9e7902cd2717bf0a55212495c9c6703e647330f2aea3bd3274f706c5b6898faac07eba5196da460b959815be58fb32ddd91f1297d8d31a4f81ab624d4950b9b3191be9b2aee23cfd40123e7e61fec54929772fce909deb521bf43ba0bbbb37fbf279165837d8a9ca9cb6283eae7a31689ca40efd9ca937238bfd1726d371136c92bfc9abf9639559f2ad5a6405157f247cce378ec59e06aa19ec81475b1b55ed43168a13bb2c0992891f5c5a2f77b6630f1c33e7d32460cf0ceafe6b196003654ba6e2f847db0c5dab33b786f449de0f9fb789728ee54e7aae1e18fad7e927bef39658c26317a7a29e11f2521b33000f72c7c195be86d79345b1565c5b5dc8df830f75d9d888e149abe295256edc224bd07364ba2ab204021aca40f96d65efb04338bfa56dd7c23a1ace2966b3ed4fab03e3f9489b0fdcaf75925f39d7a9a3197a3ac08fecac525e33fc357fb30d8c17524008a7d94567829d313a8560d0ec02723c00fd1bae9a9b3e9541d736e5e37704b2193eacfdad64dcce5a43cf83d25371670658c486a1da82c0d5d6041d5bb36260b577dcdfb73b789145dded695ef4c0e25a09addc6f0448a67ae4e45cfcb3b47363b930928cf1baa385b9822b97cda7d684769f570dffd86eb7699f4acf604212ac6d71bf346cea2ca241567086c76d6b0c09619f82b57a4115cdfd90dba0536617f9670db896505322db30e131c85cc87b29bd5dd60c76471b78c6d6295c30972cc6da251f5534418ff1d925a2b9ba16593d793912ee13a751d3c2c3bf7d22cc733c92ae7193dd1e70ea1ae5e183d07c2caf5eda3d429a8a3f44b900a7e96f2d75c35651b63794114e2eb9c9f40ce6237ee634e95ff053176e347235e98a5fe3b9c4f0b6f729a142b0257e78e53e4433d64ac30d81df8677650cb6098b463c16c7a526843c514cda1e37339bbc0031d3bd43d2efa9f97bd1ac324d2497074ced28d0c1638b97dd0120cc9ed97f39f72bba392b36e2257a4ecc10ff2f14b4d99163ab89fdeee39bde3f4c89db38d3dc645594948b314bca164c0c94d20b35292a00a045f76c1dcf9a021fba49eeb529a616bcd696a054b450b490d3b4837284df8816bffc0d2dc15cf2adf9caaac72518861ab9fe362680258d03857e845234d88275bdb2dafbb94d955e100673f11ae32c14046cfbaa76bc5dcd72d717c0803e762408c1da6fff95769bc5a6511b4e2e90138187f8c8dd3eaf56626842a1af39ec8d68d21672da5b1acae2524c2d0a223b80f6f83469ffd208051dd90fde0af06d17a48d94ea94c70b552db16d0f96e7b4c12c66b77322a1f2446ad1865fd98c802a86995ec17303d0a26f6cbbaa3aa48340eb7a8ad08fd2f47b13f8ae0c6434ae2ed49f7cddc034f11b6f2a3ee43e823163fadcb4668e8e9710def78fcdf2117e8b5746f428c285f626f794ffa6e9a8459423333d1f66fd616c9476318bcc4b78aad737d088c31c682dcd5205d9853e473a2c272ee16146dcf7fd1c9d2c3b0924f11c1918e70921cf97ba0b5963586ec0bcde628e96c5929019e092da9a85730bc9ed95d22cddbdb1cc8667012eab5e378401896525db08043b0680f0bbf2b2b49b1353083f87179834f9100720c53634f95d47bc76ebd1c0c3388ce879cceea7cd57fac1084f590b37dbab7223f01f3f83b9419a713d144c1b3c61c9bb594e6dc97f32066e7da8933df3e34b1e7241e18adf2207fe18fa31a9daa59b68e3fb8df553a5de5c582fb7ae0a5d99f894c3a17695900b05c6abf6d7dc01666ab01d8fbb9df951b72913fff2e8c4649b9ecd08b0a433af6e8d4e230c081c33a808dbfc8223d66768387ff37155beb5eed8899d9ed4b5fa21b60b40af289f090a355d5bb1aee52957cd991c9319f393d9891de8a9ecbbf506880bd62a0231f1787ecc34b206cd9e6c308901c1fb0d0644fbb17139b6f0a6064d766ce45f7bf2da2a5010ecf337ce90a8782a61c5b11617746ec1b7f8f917074b748b4506241418821075c73dcbc2a97f8e20dd3d89cc3a3d7b5f897b8150f2cc2bbab5c1d55f1bce35eeabab3081a0fbf26a9b2c3d2f969e01d319072e57b016c6819c5636dcc956e60000070f135e65cd900559754711de28a6ce64a83628716b68628eee920b614c352e170f81ca05461b818ed81d9447175f0f5998f5412743f86f31a68aca388e149da4d9d2cb22869279910eb8081ff78646afa69ae57f75b82c0705caec24d625b675140e4b05b47d542bc02153afefa3da2e792ffbc02931ffd7b45c5a6b49f1df54693e31f7f9657a24965e5f3f283f339ebabb6a3389e9516b5a47fd5511ff81078069653e7dd0534437791217cae1b9c710471c20ba6a8b89a094bc2c56d705570097ce22674947534c79567efc12d47124daf8cfe73c13fa2e4a7e363f02d10c92d056eddf55be187c6712bee659ec639e7ce68736e55386ab712dbdf5074feedd1de4e50f7e205c704a2e1db13e69662535ce91cfefb1f4c012b007a06ee6c48a8561541d4bd5e7cf2a91e48549b342610e9835dbe2970e1434ef5c66c0fd584011b380314445814210255a890332bffb0e2dbb82446c9a50dfd2067284fe70a8c8c3b274f2d8f27102d1c9e6f34ea49b3e736beb9f98611b1b414cea4250d569b279310ddcf701030b7d77c3a270bbe8a4538d3f7a832b1ef12475f7835b4f2cd7bd47258b0878a13011ad4996feca8b4ab568a55e95c0006863cac0cd87a69940783ae485751df27b76b3a059629a2b38824546d236e76a89e6936eab3ca157f490537154a4b99ff392d1ef7302f37175a06c4a5ece6a045b951828a2e2090ffbefdaf57fff134fa04e4f5e6a489d0509f925d88ac50f75e659a0173ce1a6685e7b17978fecf5ab8b937417c89b5f8efc74b818df839f663218746200a1400b241e51800bd5255abb478a3f146202b556f86c33e470e17e48bcdd33768b9f9f55bfd2d77b216c053853d701d7074f21206f8b5122f49f662f2b21af27058acdfa46e0c5683892540ba0a48398f10b7a62c05b991f789fc5ef4f88009a78cb3d199ac47259825fee3b1538eddf88016a22d325346562aa44910e5c4e574d2896bda5c605d6679b7cd099dd683534f8976a90304a7c1c888b1b52e3c0e7ea6a81eb4e2da7674f0da5d316d91c205db7a941dfc602ea0c01419802677fd1b959a5ad7d437f95a27e124b7375302a6b0749b0a82d84399cdd0e0d062eb29d20bcab0a1a4eb6e7c8b66b4098f9ccdbc6b01fbdd3aef9f033e39c84468082d4895c3a0b0e9773e6297d57bb6dad1abad67ad2734891899838dc9004a9a717fd5b02fbb63f66df182d9b7ec2d9d83f4f042d0bd7ef1e5bb81591959619ea98a0fe749515960322073dd78960c7c46622b69071f3b09d98d831c751417e902e46da7bb130fbb5633bbffa209a1cb7b5bc556cadce74556781f4496c0dbee2007657def70d57c5ca3b1dccea7ac1fa54a44a896670218ff139c6de8f02c22837b8dd670eb6907b808fbd1590079ed56c62fcaf45e2a1935d8b0f4d622972aafa94d4dc9f33901fadbf099db9499b8f257fd2a6f12bdaa9d4fc375f8c89b6af7293a406518a3df97853672c0e49a172a68236351353b6197e16a6dcb62a7781c63cb5adcdc581510ad44189370e96c418f38f2653631c2a8260c58c87159b661f176f99bbec436e8bcafe7ddba064cea25b443f5862f3250962fa36a8510ca7a5ad3b91c1056b9922bb06d0a208f1d86d40bf49cb5825523aa5aea4c0e6b08b7f857f5e8a1ae01af731c14a364d272aa12d670b534d99f93eb04a9c78dd715cd628a4c8bc328c3933b397b23c77ec0b65a7a44f994a37623c0b34e7783d3660d11c13970056563efecaf0d25f8f2ac5e138dedb4556e7d55d3fd64d670ee6e199eb3393fd8d26707ffc3470459cc89e3e677d78fe7a9199c9d39795ed596b25551c6b845cdfe418dfd4cb5596a6aedfa4bce9ee6cbd1df7a74fde89b325ac752e382531c454787e45d71d49fbb6c4cf3ac08b05382773371f3c15ef617a91184cc6c863def5cbeada8f92141bd2f2b829fac9850ac07ca15b21a3909f600258d64ebce252c9c3a4c683937da00520e098f30c3589911e7c8086f03413e0e77bf5596876c7d849f3303b864d2f543690b031bdde5ea14212b9f364a2680128cad06e36e7e52b46214040d54c73c91c10993e424831f8d1a92cf167a444ccae8d90158dfc55c9a0742019e642116bbaa87aa2053ba99fb18a0107610050475f0c5cd6d57ebfba4135f54e23f7b442f8a07be36c7f6e9dccfd61beba7f337c248e5d3a7736ca070fabea68f3330257bf3fc68be1db29fa0849749ddae99573e65dbac8d9e91fb7f42024eebdbda3b1f5cf8022cb1982bf4fb8612c290620338bbf9c09646266d2d7dace68eb5e40588496d42e92ff20f3889051f3109e7ac4fcfd2b83806846619f220e5ee4de815552dde8399d56ac9e9b1a6b7bf5784b2e225e8ec096c2676b36400c5910050daf49ebe4ca56e5cdc86f9ed84b415d3c79e42cee480c3972f8837cf2e1d79a8d6e500af16a24762c7aee64bfeb5d15f4ae29ad72a14c950f116e1ee57ca167a89b4e80379f6fcf70bcffb349e4af681cd5db2b4355bc9ee5bcdf6d0fb4d632073d2d96ddf4a0b942948ad59dbda11e5cf4e1ec88ecc61b9d03beb29810dec4515cd4940bee1dfc4a0c7810e5fe9afe5b1523396aecd1d6deeef336a81821e52f002bc2eb174f602f2bafad463002d1c23f895911df44955184673e6555085c49321a67a2f69ead9af918f3eada405f387bfb96a44c89219ecd0015fa4ef9f346f989cd5b1373aa327f9b2cf984be7066d061364cbc07426cd1a7028d8b5d70cf5e603a3cf73420a0c4219e9ab6e3ccf446a38230b626bf6399454c47959d9c8b6887f76d294bd88bd09093f6f9173a89e5a9c279c24e622c2cc03c4ff31f3f231fe64c17311e979cacd25135d4c284cdb65b3e4e68e7f16f92021ace2d4d213e8b6680629817287b5fcd207ed04c706ac0a23dd8315935d3d4f12eebcc8e0985b5eddd75e59c52cff16b4af9731ec7050b64093ea40df601f977bfcf5749c19fa464a979a017dc406b9216d0489e5049a08be8a94a69fca1097b16a156e80f3660b42d9552ef8f78d42ccb28d435d5db86fd2341a9d60e5a0de47c8a52d2bceff2c3b1f2828c331c3420b22ca14b1c66c5a4012d4bbdf6d40b9c37b2d26f9074617b7db7b85690d7945613013649ef906666cc96b8847ab80e8a8f405e27526db5c3d80d7cb56d4efbb636d21b951401702dcaa3769563ae1b96ce5c7e62cc81f7820c1c5711932c712862c5d9995362ebe0457d0f56785d3ca83a30bb88c4592ea25f0bd0d2cb17fe94e002f7bc765be067834b0b31836e78a81de19c01039d620a1a037060dbb7abe2f9b2fd65439356aacd36f08d4a88d87ebd9aaa3551f49ba2842bbd238bb67ffaf2fd73fe84b355906a6648d19754621363816b8d7506e252e7ac4184a5b983c4160ae2eeff62e503a4029a67307a204d56be696f397c3e0289ad84e9ef6bbd29ac02d29d7d490febc1336fb6dda11a15e07a2c4463feb89ab4570dbb3371370ffb0cc973c510da2e0a204e266871575447dd3a75bc335702aed264633776f9604c5151d8a15e4fb5c7f2bf1f9794dff0d40e1d680cc42323bf451147c4200902e7f9f134d7db746840d04a0934afbad3cf365d871b5824e331d89cd1a11771df142b32ef3030532fbce3784c056df1e3807c8039b098632b4ab58e68980439dd1b0f9a717405f4f38552d050d3738a0a2e0910e5952ce7e454016f736f8f67e643ceb3226b015d9ae146db7e656c902e230495f590bbb8f495e7c55cef5f05e1d690056bdccd980e19e71f3c85fe0839a59695d06aeddf45568d1a8ae01d1ab51a7c16b29111ad35745c26f3f9d1fc12fde79adeeb6c63bdde1bf5650a70af4c58bb71605074a2f93cce780c8a8e73a1731e2b87dadd4c4677badf553401cb8dd7749bdee29e8141b7649bed00dd76ce4e64d13300eba3c767925fc228787660e1d01d930f3852f42f47190023650c81d8e0124a263c6f27f7cafd14ac7cb8adbcf780e69eea1bfcea9e7aacbbcf3da257bb79341278b8506f8a41b389b59a5cb1104c41595be640319244588fc21119141c8b598d48862917fcb40887cc23560844070b0634baa84b4b016e68e791ce572cd2225e54e29a3645dd796d695c8109ba3bab6e1ca01c82f038550ee6c4aa6812d5f54f43d38b1690446f05334bc6fc9b6f8b59bc9e841caa72754966b3938ef71c3b26bd62e4fd03725315d3fa0e280e2c128fbcbfc862a03636e10f64721203305dac6c968d34c6ee8b66f0713fd63cf9a8d7c308d19cfb0c009d8be1303c5d98c1a9f5776f03024081c033b7424e4c5eb5fa79838512e27c3b467f32b3542edcd1e5030d70b1dff19bea44d300d867e3a1c18737cd0b7e0f4fa4965de5a29d85f4273c617988848843aecad060bcb511d5f1952c92d1f64ca47f766cad6ed31a9138487a73ce1a8de0d26eb349415d6fb7554a6bbaaa73bca29fc766f2fff82312e1d06044ccc889d91fd786a5b08886b0b44ffb2edf1de5b2cc32549e9e3328dee87c1cd6cab703985dad515b515ddc29d54be4d7b71b513acd5e3d9893acb25d15f3b50f100e8384549a1a536c05fb8881e72f9c7c9688a46bf529c8268c48f732de33d9e5f69105cb44eb7549a76b3680cbe36474b510566e9c21169ffb731405e49f1b9397b6838c53cba9306cb29c9a9e0819e9a173ba9efd2b6a4520ba1c58ae00bd601879665d70c3d7687c5a219709a7a221813936c2c052ac6124a577f1e35ea695a263170743d9e73afeeb2c3eb3c6e7657ee834a48d9bc43b2ebc8d982cc1c0795cfbfc527317c1ee1aeb27584570d0fcc00a1b0a0a109a1b6788c7173132f2566fc97e05a9854dccfae479ad66aa45306e2653bde2b81749f7908b3599b82472025505ea8c2a741bc35d8a05bf7e2e47b1c54485bb9b210c055c42b90d5c3e173e28fac7c50e1c25a0dfc228f7f3738ab06e56293ec2a1aeb975556c3425298b4bc9c365fb392e30b7f189deb711fc4194a9f173123480753c622a16b71bcb1650c0ca8cd7b49385301b47eea7e1b1b484fe7d29dff9a4aab6ab2b7f3d460d02759676030086316c34e564216e6a7b2aa9f662144f1af7944ed9bf6e6fafd795e4d22e941fb7f22cebd8483fb5b540ed2a1808fc089e607d2d734dacf55d1219c2fc5c05dc50bd0f7c7b5b1023c8ea4330edd7a9b28dc6ab7b013f027658a4d43a9c671fde57795b0f56065b61ad5f75e3fc38e2f6f013675f0cfc359aa9770f713bb7aaced71059cef2afea166c89ca6acd91707cce2ef9011bec100a5772119260b46e53d56951dfd6c083eb0b4e8ceee84b1ceb2fffa98ab6775a6e6a7c24c394c633165b6c8b6a8a9fef8894980196d6cfaceb1b6ebf226505da6deb7f8e2c5e55c0bf70014e9897b6f6940e4e738b1e84e8269b6382f0b1fe59b0e16298f746c9def51d10e490846b5fb8825828f448d19a41b6c63b1d21ca9fdf540d8a49d48a55606981937bd928f49bf79e69fadc2088e7757f33d03ed174a14c67ac4d9100eda95c3ca4811f547be675077dc563d87bbede76af328e7ca09ed25a452804936d78fe2a5fc9dd56bd40057dae7c6560 +Output = 705b0b6feba65898443dd8b3ac2848df + +Len = 121672 +Msg = 9274f0455996639b87b937abf2e79bf9daf55d2927b853ccf376f97a489b5b212bad369cd9825a8850b152531146479525ba22a45e22f163dfa68c5ade35780ca9770b84e703d13221d32ff581f44679d9821ac3e6d4f40ad7f405c909524b1215b9b9250c819241010716bac85a604cfe378faf4938246be148abee505a9edc765b86a6cf64635ef9354eca70df5db79dc0c78f0fb4482e088ac7f23bb53711d444bb30b9150d310f45204c01ea0461bc050b8cbeb22afb51a2a1fc52cbde5a375e9fea51fa58614d1fd46801e51ef366eea2cee0999078c67881351e055d5fa8907cfd1f7c0b97bbabb248fa377314a063d67cfcd143506ef5afc526c97bc72ec29890ab03f07a60d201117348cb6d744cedbf9bc20b2951ff72d3f280ff3bd2dc3dcc7ef8cdb3447a0beef580eea5e99130be44d4afac787f14870b93b2629bc7b1d91fc16be96f8c16050747a465071ae7a27f6ff980ea5edb0af8685ce591693cde16c892c5eaf16b7e3105b455d7cf5a92d4fbaf4daf8210844169c56bbcab2803ec7409eebc8f5282fb22e71c6099d0b7cce09abdd0d5fa1c6ffdb49d2575bb72282c9a0ded501239ee060563ab5e9338ee868276543ee3fb098bf223d3b03f50525a0bca861bf5ca9119d6d1be08e93ec3552f2043a41149977d48a4ce42fac8f26525cc8dd7415d6cc4210fa37d1bf1d2b66864a6f1cd2da23a7bc81f1535ff91b5b0bc0d6e3f1c086db0c462a77078a30ff6ea840c5fcfb12a5638cd103720b6b274410bc7372dec7e4999016c32fcbec9a259e5dd0f584cb5a09ce01a4a51eac4390491ca71b8a05db5368ab6a7a4ac4d3259d14c25f0fb43209b611db4bab453c6ada65f34e6ad74bc42046c1999f4026e945141e8be473c9fde5700be859cc7e4e3536ecade9a2925667876ce021e4f20af6ca4a1ebb708e50dcaabb0d72a885b4e9fdf79c9efe6ba49edbc0f08b29e0e552b5d999ed40fbacfc205d2dbe7fef397929a8acf351241946b2523d33956012c9454150024bae6cc48f86bb65a91736634884517f31483eefb9b548a3bdec1dcb2726039316f30ad636cc5930caaa5628e8ff1cab1564800a306e8563ea0160e8a9dc1708397621a1c47269883af4f34a798d70ff83f57716d4c285ecc03c86a26be7fcea09b42ba7a72d7ed490a3a84878c400f4e377aea61565ccb6c6f9e978dbee37a12e1993685d520bbe6212ef9375172f23ea67713860cccc4a74c623ec783359c61d32e354558482ae05ef33bbed1b6df4df41793e456bf720303da06ddf7bd5e13d8cb60c3e49961c12850f324f253fe058a2213831d7ffc0afacf98d601c2e6b257365f065f598910e60ec9729e9378edce603a6c47528b449a089bba888e5cc6ba38d916b3d1c95602f564afbcbc758d2999b1a6be8147384b4fb8917667e9d5689977fcc6494a1ae3cd6de334171c6e04941f396853576e766a9764b296b569c921e0bf820933e4f15e8b16eeec9617c51a2d2e2f12e46e8122df3a2462e7094598bc67cd58ad3d94706751d1830b10d6f3838cfa0415c1d63f381cb415a73e44c5b5fd9180e0ab34caa89bc723a2e29de7c85bb07313eedb894c114af61f8e2e717187b5c7f3b83935f7fdb815831484bea4a33ba5057dfac8c021ce4c74846b64981021760fec0b79fc7e8aa2d72ef13fc16d82e314f69ac33f542860d1a56366d39dbdd45bce125e5e262610c6b94e33c4c06d7468e222436fb3407a5c7b7f3fca38712b00e6b7acc6fd74a7773c026258a5e4a228c9fc10f845fee13d8d25b624e825c125bc602adb0c5cb1133f75942323cfb37d318ff283134bdf9d63be9589b6c1e0f3d977a1465ac774c14a0f91cd4216f08ea443b1b8230dbaa486b3a2a3a82dce92c462d9aeef9b39aae63820ff0aa2a184a980143e7f2ebb797d6aa617c951d329058b9abcd4c248f59a580b6184590e86c9aee4be2f942a45d04d68901e1539e02558ac181022e9cbefd7189ab7247ebd8a35e9df39294f2f08c3b2b4b16246e0ab33d669aba564546c1d1053acec3b50777eeb4aa7d37160ac334a2b891e44511f83e157ae3200b79992ba3369978b6815efb2a6817cdaff4407f99eae33795b0aaf968c20b0071dfe9fe0e3f80eb72deef1059ccd0bd03558a687b529872e24f221baad0909bfad24aa480a613a06c689edaed495689c2a7178bc170104aad76240186572247190921dbb51aa02c25c6e4973f5e07b860516e5606d3e91379adf74775962e964edd05e0160dd4d3116266f1da8b72cd5efd0553a5ee9151b95f3259e34e140e2ed67d7e2de01059d1d38c574942163d30f26301393087a9ff225bb569cf71131b8deee26731f114c982cb53f622608c68ea0deb3b3a6a70bd6fd9e6739ad449a75bd0d94c83e5987b08ba548b9ce03f793c6c7e267c884a76b043799b50ac1654d8d9bf68566c5958ddbff5542223cae472154685778f9bad9c1ecb4b51670da67d40012529f3dc056a72a2fa4299b33d138eb0c2abdee8e48bd267fe4da3a41ec1da3b0d5f2a94e34748e9e88eb09cd5a93f69789a04b69df7e4ec3e75d05e103edee9ab966f1884ecc936996716cc50abbdbd21b27f894c68eca4869a8bb03d5ce4897a404fdb6cd36a15a75c2ae6308370482895cdd57267504d610c142ef8947196e3fd3b520d83b2037cee6b5ef7d8fd7727a47e3f927b9623584b284ed48e1cae831db020d986178c948e66bb1904cbe6997eff0c4f0e44e2c6e8367453a22c1cd2224cac7343311d88cc9b6f16af5202e885cedfeaa7e2f85763ad53e869467e5bcb7f794d536542c419780f63212648af496c3f07c0d6d0643e1b52155bf24f7a49b6fbda3f4a78c1059b009112cf44583a658e28f1b70787e7fee36ce2a61cd85d81c89c5f473c1a1162e722fca3727de93961c0a2f9fa2ce1d6ac51a5d842d0577e44264be21949bd6e279b37495f8ad6564e516d2644edcc2101660e0f7e0cc7fb12ea7db17caa7a1b466c6b2767f9724a987db8a26425076c871c93c20ae83f86a97b7d2bf2e6c808c808f0d428545d94f4880e24e47d1417a1d7df8695ed2eaf7c3bb2b8087937a5210370c61d25f8c3d712e5f4225072c0e63a39c39ba605e40fbdc6fc19cc398ee5ee5383c2e8c435b490c8b6ba49b3e6d8b63b0f788d65b2c864225ec36a5e148b2c21739617408911a43ed318c35807ddde6bd0d91dbeaa5ae14d5681de05d4854f633c132c0e2c72afa0dfda47cf827a0544be29d181293b97b079d191d14d78ba8143d6a18dae5c35a7435b519b0541ed5e0de7435dbdcf09e44f3f2040fdba1004013d123f6d32b8ba94387b3b0ea9d8f0669ddd94d699ba613d26f3c553ddc2741ad2f8a4079aab4348de2f3fed366ad44eba1ac712202bafda25a6eeee685459f714cf4c0c08afd9e7d8e81a4f5c15522cc88584eef6c0389cb7941e3bde381e0c9f00a7d8e118f6e795204aa3af5b029745a82ecb923a83fb5955e3ba940048e1ce2747fcd89922cebf82516884ce5e04cdfd454666dd2a7c8756cfe94e2f630d1ebd9ce63382d613a468bf2c90c1cd0badff68de093a94a6de3143465127e4f52d3e2733a678994ce05de46e47e7f7f2721909f0ddc54af0aa5fee60418c47206623675385dce4d0ffcc818c1ea3377fc6e4993d792fc5e0984d11c583cf121555f7edc4764231465f5ef72489863409f8ec97025fbc8e0d04836dc4bc62de5a79461b04ec2b07238b6fb5b61cf35607a49b93ede61e1bcc9b9d430c4fd9f4464c788fa34c09eeef00995dcf4d9d161f367c106ec0a6e7a5a9e541fac2b70c8f4c19ac2e3a61511f5b465fbe9fc60cb74af88cf363f98a3edc15db1e996c7f9c04a400e42bc3c61af7f12c228810a2464eab7a1a44787bee9e898ef6486cd5e2e2a22e839493c688734453999b0f6f62be0f5841e6c6253b6dcace00545aa7fa728e757b0973daee399a56725d04dc83159eb818cf452eabc65428db51a85e4940d37648fec66ba2c78db54b22b3623dd1d419fd6287e0c624a02fc5a4c86165ba1bc15be91df14cb978e082907da8e99f39ee7e5500f4012559337dd24d79c66ac1b7426ced14426be678c73ad6191cda5aa5f9fb42c0f344c9e4627ea9dfe1bf6ff89adea64d2a7b70de77665f2b4dff90e11ed9bfe002ef8ca2f1fe603c5e4460e5b3c2fbf47b5492a211c76b58038b87205b84fac9b6921c0fcac5f2e782866f0f2bce30b2bb73b63434c2ad37c40aa7d42e6165f684d8f28b5b89f499f4e1c4e56134f6f0417566253eec774315f96d8d060393ff04309a9602aec7ac2c031d0902bbb145c3c62cf5ce996bf25fe452bb70fff73bab159eb07ea8fe96ae56d1da6ea6f21ba8e27516327dfdde283801dffdab2244e004597b1dfd0c01e2597dea33ab2bfa7756c91728feaf6f0580d56b1a898793599965567f3f62467e879ba8c02ce16aa59fb379009fe31d5e3b47fd563fb9bf6e213cc300d4b3fcc96d95a6b2a094d4ba29aeac67d64b61b8e3f4071f221b1194586a514151539d59780654799ac8d12b812521bd365ae49c074408f3d53e42729b5871bf49d3a0a5436842939fefd88042a1897f34741e8e01d28362cd85ca7f66a1b4e902b69f433c25f18f149c634ecace442c652967f58009f6fa7fa4021136b09b4d206ee1a9dee9d1ca9d30f9ed95e5d2532d0d6968fe64e4196ffb81dea80f855a278f204fb80e73d49e6014f340a2c47200728b6ed96dcb4e130ee24e273903ae9c79d3bb341e484bac8c4ce6376f9b07940b565dadaf2d070d507bd630b7a6a8d3c16462ff93df8e2c17fa3d06b6b6923c3a42ebe78389e2b362e71d50f5eed781f86add57099a2aa1b5a57e1b02a7908d81e9601395525fb9a89c7a148e3cc90b814f90f6da188fa1c7e71000fdfe80fc74b270be5f26dc64b40472d7eb20ebf4ee9b144bafdb4bb0e1379944e32bf1fd752684544b67f768f7c79e27873bbec2b2c5ddb1d542ed33740f80536ca0522525ce1151d4a62f1af65e62800cddcff9506863e5f4efc2ce02e75ba8f50c2ff7e901be43a551e21f2221568dc6878dfd59fb3d4489428ad5005781d216bfe9ea4179d1b6180bceca2dc8e08d5ed9776331e6c059fceba3dd1ec8995b3c4c2e70b18ef205b73433c05bada72b30441abf6ab39392ea4b8c6a90b318a0f0215c2fdbc9a5df0d5bbf865e5800c3e547f666870a3d8bbbc2c2f218bf764fbce0017c02b2538e74f2d08088408403e86588fcf92314a0fc11d608194648c40d08ace9d8c181b0a88a05437c0fb757a41d50f743c6cf8f2599440114dff68a6afbbcfdc07fc6d1f291cc339c1e012bb2efdcc9f94da482b2c98b919df5061f4149b02c5c65896efd9a93f58ae3f81c9f5d8af98c205a384e331b2e072dfe0f4a6334fa0eeb4fe424150b0daafa1296c3d6ea0a6ef7572c3266714af2c354b6c0e8a9fb4aa980de00818fc08ee8c726caec8881243b01bb19c43c5ce38d90b25f3a8d84a208d2b90d70a0c2a908bc490f1ed4d25e5400816eeccae85bc5389e7fe96e4aa781ac01b562cc888c02387a1aee5d924fead9fbac40bb71ce12c2c79d75ba91cdbc8344a2c881869a4de23688cb9125ab57d4a64c406c9daceeb5ba525ff11e8711eefe30226e517644301aa3470e20e333a70de99c7ca08ac188031908b035561a459ae7f0c15d829da87324e1230879f6b78eee956a4eea23b02e6c20666acd4e2da754c4492f51b2c1ec781a8e30e2299cc5d5db93dd4d9dd498c60782436f161dbfe10d642b661c02e307538e5ebe44bd3f29cfa7f027885bdeb15ea2438e1a8c21274c80f62241e2036d3cd1d660c09f5774f2150bfa8bcc6ca86624efdcb3ff9792024e0438bcf5aa1436c73c7c35c9ab21d349a559109ccf35eeb8accd8afe6fbbbf29c9fbf5a46396c1fcf5530ca2a6daf3d440a5af4372c438ac0ec2f7ff360ed382dbfe7474bc5f7ed19597cdd0d6eac4336272c056f3ede49d8a6fa37876f60007aeb2c1fd00f8bdf391bce1dac7ebd4f58f32ec5dcf1d62fba425e6009f1b9516b6ab6693fddd1fb18e34f116d648a6892b889bbe60cd3444f088581e3afa334e886acadfff8714b9cf92641b9eaba96ccbc6470f6597f917d3f97227c6ec4afd9853674782812d7aea47d35f9d6f5e1ee49e86a729e7f1d2d31bbcb3cf9c4cd26b07e4412345ca5372e797693f1e552e0a53c33c4a47ef148241a058b174c93b84fa9a835e6f9c01ddd448bf10330f08a188a5352332213b461dc57d18f040b75aae22549048e2d4afa06fc79d47ec4d4ecf7508613138d5b30284a762a933c46084f45b657c6f5a4cce652952b78d4a767adb4c70bfa6723d82665e2b0a22e13b3188fe4a74621159d0d14acd1c52ae9d3d4067ce47fa7f6a300307ee9d8eac5f1668b3cbcb9b984b3a3ca258f0ece847693cf0f664957bbd7db33b09cde77420b61c2245dc5c3d858cffc6a2bfbc65e991396e759017e5abde2f7e1935bdd744930bb05541249fbd1b933e26d331c61837ce36c854e25ba9d3a037a94f82542f2fcfe48674952d4698af6f51f5fd8747ef53f06b2d953c5bf0edfe1685d569350ec14535f12e74b676ace0b0726007ed0a6301da74a10626a841480d7317851a929849003140f481280428cef319e69c2b840192d486479e8c429bea81c946346dad6651df8d2b3b4f5dae09d28b91c9c53f7620c7b58f37ff7a602a5c8b0b16f28933c7365387493f01e70d9b15a7fa69edc600c8cf3b6784514b694dad7236b3b427ccf044a74f79a97a26d77887a28c2777cf4233eab1bd5f9413efd0ea1843a6b8df77d0f992a1bccdf1f204bf569e7501c8ee73fbaafd0e00b6bd75f13004d97d7b3778fcc739a4590b955abd8b233f0aaa08100cc7e5d4e7ce210d161289e4cc2cd9bd3f6193f8b1b01bdb10b4bd1de8cf39889c7cea5cdfc6d516c73445215b60b90e2fd653425eac00164767ce7a22c4fd5e095e8d0e4f3d24239319c94771b37fec5cb9f9e9b63bdc8cd028d9ec5f07ce00f1c14051cc9da8a3f84778afc59178f82460fa876f0c2bbf295c51dce4241601e46996cfbe64dd187521f5c2bd874e92358fc773df89582dd186d8d458967fe13f9c12e0bb2f3c11785da338c0015b4afe8b03678e3ffc49674cd15b22cb761f81fd273d4969400f903f137a83ac4992fdd710bb018c829238f2dde9e95f631d49f1562ddf8f73635b6ac8f06ec473faa21881e6b01b85b8e53d50f912bef18b061d224ae41e50cd18452642f806750289b3d98340597ffdfa70cd1115669bc934d51e0cfda2629d7572ddda95cec71b233d7a1908c2cc01c721c4ca87e2bc5854bd9bfc92982374e168323feea9e4c4ed1a06009fe40434f9e4ba7dd0bfedc8f43b3e92298c1db3fa99d5db5904589075ddefe26c49b337f12e20b3865aaa9b71d2885658eaabfb1f7c3b457b8a8d0e2bfdaa36f440536b5b6289f42f5f7d307c17ebc1773068bacea3c506bc990c7e9e0dc756de746f4f872678c8221ad038717fdb5c2ae9de739695258792bc51923a62b9fa7152517502ee5f9815293e03e08ef99eda937795e5d4bf40a450f6c98fa1147a6376c44c5d2ec0fc5f17213347a9a8f21cb9cec25ac704ea581366951c5d496f0b3e1256046c2f5d8641243715648c0e57c93e6963f098bd24601b755edbdb30ff34d622872afd442153b19fe853f53c124e60fb8fe5ed619fd39feac5c14c68b5d77a3263ffdd4896ab53ce2eec7713d2b5b1193d1b655030ca6e85ff821f9ea5b298f6093f21c37cd475625782a42e2fabb912fa15b3017dc101b75ab2b72b65429cee058d8d5d3a5bb0cd00daeed37f7cd3a95549390ddd53f3ff65b7c5976b04009ae74f526e65ad708e9949d9bc58b5bb1ccd4a79dde5ffbfdebf25ad7b3d636e8d0d19238f75464f27bf43d73121e2ba1dc07df7ea1e30bfd5b570e14f430d3125055f6338efa29718b17d79ea81907b0ced7825cafc738e64e72e037c125df3035ea6b3e34b6f02e23e4b2430fe2b586a92bda5e8e754a60cc2b1768a21d21e9887737816fef7fd14a43188bcde3fdcc75ea2dadc8530915de6afdd1208062e650e3a325ca0e9f01091c4f9e6c83a92a3afec470e5cb3caa8b17d897c2b76ace9518f752ca7918666757a0a374297f47014ee7d06b44adcadc1af1e51128014a60fd7b2ff999b2a96cdd53c26b3f49ccd1c2ddf5e426221bd75b90e1943cef02b87a77e5ded635722094b025db2ccd60b342f006d7d8644586c3fdb3d35bfb9da577329b019968688c65fff14b58d4acaeb6662bcdc43bf1f1387f8456eeefc42fdcf57aeb481434b7388751442b2558ca06888e4d516ec71fa35f7ca65b911e5f9108aa234d017ea9f6916b4d0d8a0b0f1b9e54dfe7c76e18ede6c24a0caa543c7fb352310ef7ed6b856567ee66c96d86dbf0a80bee0c8fe4fc597fca67010dce8c3e9b9ef5be2904cf4b6eaf9eab27362fc5b05ace06d18cba03daafd660f21ea1f0acf1681ddb7cbb8ba8191df8e128ff679453f07ddd170e2bfc7fc08daa33a712aeb2d1deabdc306c3cb34b784262341c7d7fba395a8ddf180cc58d51de1684ecc86a97c7402b1837520591f2f3eeb42d93649501f1f617133306a47436cd22c623a022a143715a35149855309cd469e2fd8cea9e4a5b9d6499cc6fbe596267e8e6dcda335bb6deaba8f300f8e41a3a82e47f1fd90cc35953659e55f7f0dc3d993aa6274731038ce4369ffb1373ca0e576fc39e78df373328c005bee6a2448b23478771a36c5f4c27e722ad49f2ebcfa7c7e2cd436dbe132ad188125418a139cc34062010b5d306bbe2067d61098664bb136416045b60e1a2c1afba09fafb2edd2aac9c56b466a2e950d2d5255fa2b5db7ccfe081542585d8b7021ccdef5b549d50ff4d3d102008f9590f1c5b9d47aa4e2aad9283fe16e714dc0aa1689fc89256cf899c8d720920332444b9cc6a7d2b5e448596d2013af09e574eb1a1b34ad04eced2ef0d812ad3dedaf916406f4d2051f2e05336069a86bd5156b541d3e9f6cf7660af86e68a0744a2b79a7f54be71705e453177b53c92bbf2ab1311a6aeed1feebd45c14831a5aba504ad50c0d90603ad3c985cb52afdde61d435d6d5a09b865f7117835028965c0b6bb77c5ba5c7520a4df0afaf6cad6fc759815b07c7e94ef1028f97a676c09ffb7120ccce2a9da49b01a1364a088cb54bc36167e52cbfbdcbfa14c4f1230dbc9da05105c1706e4388df13ba2f0881fa16993cc117d6061d16e10dd1d93864fa1a7fb0f2db802475fa70af02057373844f637a3244cda4b4f93de48708bcaca29a96a65ac561a583193adbd875524c9d1faa8282141a83cb9d9800ae23b7cffc446e9c04271bdbb50cc7000227acf38baef4be7931c489a92a79c90ed532b450418ef8b9a7b7ac52fc9f8749c289509623cc95de40d3a098c769a76ec33343e6b97e2341f03c02a41048d675eff24b08a7b76f7bec50afde9cef029798c56405d3c78664a8b2c4f1714c574e55edcc27613fb416da429ec4d2934252faedfff7b7f088ea7821da824633719b9d85bb3d7aebcd78b5b1559291ddcf6592b5fc028e81909a07922b9fb8838b266ebf00901943206923a6bb90005612980724436f8003083dfe0ca18fefc60fb571a5836867d016b1cc27ba06488571b50142bd86b4fd579b0498239c128364114d3e2d0f8c1918175a3f393b90f255822a18508e53f7e57cc23d9a0c4943f202ab92e4ccafa78c6472f32178012627c927ade5d184791aa8df03ec28be8d215033aa91e6f800db60be4d5805c3a84d50a30a6595700c5ee604f2023896e959c28c8d1da690ae6ed3e654c72afd0031e04435b6233e371900d913c484fcdf02215f436e549f39ac859210562fd8b73940b238c2c31783b3bc056d1a5316f8843553d56e384c27fc3e698aee5b7b54cf3a961b6fbc237794e33108edef0cbb47c6114a0399c002c8c513c975f70e5f5a9498e4a758899b243d04ed239e07b1b49c40aa17c1235177e339d5d54bbb6142175f9d51dd7277cc912723a6a92f60317e89fe91f69c9d716083b7f49fa8e1ee8b944d55940594f2a941b25c58ab522736944d5981536d1d049876bc3bfd67c8b8defd9bc56b79004bfba32ff2a40fff8a089f57aa7149e596211a1366e37b3765e6b40ab8cbae5c40fdfd06c1411d1f438efc73b81eb930e0c5ace36a82a6a35c547a8cb44ebc704feec8c80bab06f129cd6d95f5814667a82d33138d016f7463cf5708031c2aa242770d5f190952db036ef9a5a7c377f0b700b78b18885f1343ff5467eb5c805ce03fd3b2338487479b18a98b170bd534d5e741335341fce6c48d788fb5374705f0ef22a9a0442f9cb774842f8d82e79bc98ad7f38552d156ad21cc69a8d406043b2e022caa70d142202992795050358e5d9084b3f7e363ccc86256dd0e5c45c389a57c239730f6a19ee0db52aa9c477357a24d5bf21d3caedbf920d42df68ca9a1fb9776b0ae2521f84168a0e18ea6b380673cd3bc27e365af8d32344fcb641e4dd95c0e3d0fe62af8f3404d3e50d9b7a08858039d2ae05a0cc792e7ba02548a53e7d1d1867ec124649f6b3f090768e67faca9d3df4ebcf4b94f4ad3b6c4e5567ccc00a8d2213f7705ecf2608adedca7e47c382cc9bafe9a80cc62e28d399de89031f17b6b20e78ba383dc9609fbbb64999f0cf4a2972eb627e7e0fb858807a957bdab3397a442c8060b31cbcd86908464be2d15b30cd4af7747ce05e8daa801991936b69fd5d697f52df9e61fa8e06f0e81a475444279ed389433eafc560a591dec9aeecbda2e5e39913dcf4788358c5f8f78fe9c61a4d8327818910a25b417acdfdfc262dccf869ade056e8d5016451e91b1960590ded82c9984e2596e2ea50e9a0e19ae024378e0bd57ab38250c01152e5827c5f7ae55f09f7fc5335a01690bc42fddf575119bd3d53d6e92319e290a0f749825bf9cb744331222de11b4cd6a0548f5805cc1563bcfbe9fe19c5423c6dc0dd16d103066f1fd43e1a3bacf37f507634997e0db13df52e2266e8eb658113c2cbae511f3cabfa41ceaca7dda11726f87c18129e8398807b2eb812e4d30b2d7d73bd5eb6c4b75d1a5259b835ec2aae8bd45885e7030fe9535d662a4a0147356193c84c52452dd2be57b5ef4e3b265180cbdf2a7f95f09a674d05819376a1a61f7a53bc8a145bd5be4d25af8ef496ba77c11082d0d3071df75bfacb59b9b709f7b5e421c6d8ede08aa14d8b50cef833e15291218330afdea428da79f53103db9ac4fe1e8109308db40272056c10c7785e0ed5890f455776fe3208e00e73049569261605410be027badf57a0196080d23e44621bcd67aa5155e62acffe0625b1f367a068af7769692f9642edf144b0ec1291ab7c463df4f85bd3948c5c5103dbc9f831caf4c228ac52d5e8317c23d4106b85360d123ed3f67088fa9791ea1b5d4d565eaee982ca7be4fcac2d12947709b98d7650b9d0c3c62454b1844747d8c0fe106b86d62fbb5256a8f3437cfcf6127d1900e9959a50d1e7e55dd4e4d0c8a17ca50ce5432f77ca183971e6e3e3fdd536c64a2a3df1e7b44ba9540be34b57691982a73cc9088c3dba4c9cba1fefdacc7703d6b53b8e14e7c02f389bcaee31928547bf1fd0516547bd40d82f69573962ae502afcf6b544e6d5d57ff7245fb3c82052d8e0e1809f5281c4b8a958d076324d49bb73f80e142c0d3a9eb068066a547b327932752c96f8a826b2ca76e23da5f44efcbcc7feff41c6cd195a0e78c1d20665148723abe8a4a1156b054be2ec5803de8329ef1e52a2a31b7456903d56bb52793f41458510d10cef25ec30790ea32c76d36dc5e2dad92294343885baa59adfdd5e03834e8c283c3287d1dd0b0111beb671dae4c2e45fb5c5ed6267871adb0f1ff550457ed6f4cf7e15789a2f804e3b0bc303d4550b90dd3ee486be09430680af999a048c6dd137203323004cf8a331f55b7b1d0fbd37195dcdf7e1d79aa7a50abf4358fddd47f3d77573a7e9d6ab33e1afa32769759cfaa11e488b78ae391cbfeb0ebb5981c385f260ece98cb6d0a17f340e6bd8c14ce1b749eb0342da25384d814e941617ce7e0f79f14dbbf5be0b2c9d3f83043cc17efec571f1eccb16882236758bb9fbd34c9d15135cee2fcdf1582f98e542249522e6355fcfcced679cdc5f25fabb9a7c6219e6d59fa9c17ad4a08fbd1b3925226e1c0e270579bda2e6ea8fd279a190246f0453ba7e55676f2594121e8d4fcb13b0feb44a3b69b842e6cb2cfd81026965b3eae03481976df574817b2fb3fc62c3ac0cbc3bca1369e22cfcdb29993482bae14c10d641e661b832171f8347d5a8ccbfc4aa9e4a0d4eeb1a0e0ec92ade788e67966a0227a8cf220ec3639b9151e9895cc4f3c423cdd3e84e6d2c6ece56b76ac768506aab7522bd3af50beb28f7c1a4137c3c6fffcb95442a98d88cfc33dbda8120685255c1f904674a6cf4874dbd876468c8d4269d0f894f1f87a62d0c3258155d166bbf25ae7214220b3a24aa29cdd0093da34098af422c7fbe4ce936676e047cef193006df90b22a6b4ea9c3b2c1e6dc0f4fc67500f93327e0d3a958e776cf1e66dd60ebf8ead1a201845ef0d50e095fc25c4088810903b693ecf5ca4f1ce5aff24aba5b86eaf357628ddcd80d2cb812db3b1769cc0c0e9a4bfb5720eacad8a025c3b4cc060b878912cdabdfc7988383ce7ed38f2e7cc4418d8135f3670b28ad85ead8b3f2d70ed576c6448e90cbfc21209a0d6f44d5b54abd111a98205856167722aea9d9d819bb12fa1f4af5417289561f1d808b9162246f1d9da5c32cd1799dfdaf24278908a87bfbc4cb6193971af3609c798f4a4b5d28190792bc032b555efe42a978648c3c262dbd56722cda547d2102b0bc7af1535c9610f57785e4282e8711a028f4e4d4861271928397acd457b2d8ac9f7dc4b59117223481ff6c60a13a84bec5a4d300304c79f6224e8ef907a886e3a4fd55e24a1eb3d6580a54ad4b8b244beb0eb75da92e3ef7eacc01612174a5ec696425680c0f5e6186211d4c81fb68dde59d023b455a592e299aa47b2999be3d593ca3c54b8b8a4c98ce26fce8fddafb61da5427b93330ff8b34d8c584aa284cf0f161788cf5b02dec7c120ce524f31acc412db1695b5ee27c252ecec7088c91cd2ceef034e0685c0db56f1b0ae339b2a15bef46da354b8d68d60705754743a24a499ccaf7de3b7d79048e95cecb17697d95298680437f46fdd201e7f3e8f604f4d1fb773a3171f8bae3f10bb53f3495bd875ccef02882a597a3a004d7501c2069409b73709cd4545fce56fb32d1e9cdedad09aeae36ce2fc2c551ea943f1e8af43ffd5e3f82bb26b43df0d2dc05df887a70b0941f00da5c0bb197e7cee875bb420a81860b659ed674bd8f31256d6e3c006cd21dc7193fa0dee302aacbfeda27bf4ad88948b807e9fdc76274835b1e7f1c1beeba3ae266a4b8e3f2a23fe48456e86b52d68c1c8ee7dbe61b3b9a5178c809e876e7feeec7ce263f184c7f3c3cdf3a06910c49f58c467b8429e4bf03059d666d0b3567b10b83a35eb4282e683c174087138916c5988c794c1f1e85d23d65be040c0129bb8a6bbccd86c3b1eb3a9588774adb571f2c3041885b37733198b77d6809f99970dcfcef05e08dae4790e07e51b781af64cfc860d37ece0bb3901930e3858d5b736bad96825204680fd76e9ea0da0a6428ebbb53a7ea50b3dacbf15520ff1ac425bef46fdd6bb693a686c665ef22d439fe188f96903e5e000994d6768ad740882a6f77b7719e22a59e275e6087428d8536decba606eb4474e2934ef18bbe8d0bd3d59e29e959c7127921bd1b139984da7596e60e8661a286d83fb172ce156ec3c489de139f3f126eaa1e58f21e9858ae3ce9753c993206ba6d12a466ac6c54347f04ce212dae932eb375b88202df7764ff3edfbcb9ecdf841384ae39c133dbf255ced4ceff38d7b727a062476adf7fb33f1fac1b62f2ab786e2e258886fc74720b6088799e6e4eac7956dccea108c00d6ef460b51ed3d90bdf77a0cf78369c47e2325fbd85af66731ae19e646febf6e811657426581106c2d9e9a67b0f72d1c88cdcd1073f8ccdbf9ee90dc5021972b7c8eb7cfba92ab311f00cbd17d721b3886dc872e34676d2c687c5c14d11e1c200f7eee1818c914c9db4594b2249c3a00c078dcbde14fe144c48104f890a05635820e828747ce551aa9947e726e1e925c7dc75325435a3109552411ee574d4e531c68fd830e48760ed115107923a02b3507f474ce222e6465658e0a60eccd0b6026b1e77337e07d8c9af2d2300bc90e71a425c7204673823f3ae677b518c99545e814c6c1883d747b4e504cfded4242fa9d83d58476d2947e1d55e155a3e9f5ebaab724d4ca0862c5335a074993b2cfb63a3525607cf2a10c5603cfa855d43239b4c28814c4e8505191358a7dc3c2be8fc2633f1d1e7db1d02d17c916f63354164d5e7be940864507b20c5dff461a166c7f37ac242518cdb2eab957074dad646cbfb384bb048949cfdd050939e461df34b7d7f3dc586dfb9ad41302e323eb682250e82bf2da9a649159481591644021d1b36b9cac81244570344a511240946b204925f8f688619f356ffe0971905ee52abb1c30fe66e5b31c5289cdfc6c51724ef2947430d68501a3674f6e402e64322716113639d1574c8776f6fc096fca8794925a26068eaf93c48962ca6607f911b00e7436c488221897e8b968a210a6b1da72a296e176865c7e1c60a84be3c689ade96ab80953ef1f35effb992d188ef908db924d2a58b364ba6a708d578a72a206f01d456ffc666a4ad5e41614502965061352d247faddb361b9bb03f2c3a664a46bb5645e492e00bce09b67bd7d2000bc620bada224ad525952699184570ad86da2599e3e04f0e975594914926a1acf1212e567a1a0ca488c7da1c0750f45054adc327a78f3532e5b8815a5f9dec0dcf16a0787ae35de9de0828b162db100f42363688072df00d658b428a35ca0ba2e3fb19a9530aa8e593fa8501d1405e2abe17d2238958f9ee95326a9962279afcde630c51a8fc884859038185d92d594346a73882b49cdd6703327c104b33147c2cc2fb19d32576829bb7a0a5d10e7bd97a88dc4e0f75f5071e2fd987777902b14dbf585a6831fe14ba7b64fa5f40406da8212fbdf050eb3f747f05576d65e03cbf9cc6abde9e798f53e340ebda8f41707df4c58b1dda2a7074a4a218a386276f010fa886bcc79352e673b702e927f9725a98100dde5e3d6abd351233905652d8907c80637949b5fff0a159d7e1c6d2f3dc7fa1eeb8799e5eaca4f840ea52fd0a1c67e0daaaa16be6e1008bc38ad85865621ffd8642a8b7fcd178a6b8e8088063d3564c44a74b1fb865f5df6e1ac9045789fd756cf35824a5aa34b0143fe3877673cc254a25b36be4ce05c7203835713ab29ccc1b41246ee9b54d96db48806cc26c3dfe437c86baeca7b4c5925999f99f8a724419b289f1498137ed86984bbad83b2049d93211a74071977d2d056337e660128fd0ddf556458c9806aeb5c1fc184f179a73dcf09b80ba023068b22da6bfe1f201e919f2f85e35c284ac176fab134688629bd3b0121dffa991cde655b08c7e954cbb0d0f62041b6bea1733c14249800734b9cccc9578a0d213d51877ffcc9480b2df1da72dc7bbd8a968a1435c3ba9f873761e92b0314c302916df00ef00c228f6cdc266b62975bd3528d682436a12e0b1294fcedcd8602863fb909d08b996126aff91aa959a077e3fd049faa2455964707bd6cd85ce7b4f370be388c7677eb191ed11ff36a9bf800be77218f36dfbd833b65a1b4593fc0924b02e60c58aeaab0e3eb9e133d92c873bd6f569b13468d07d91303496b960eabf90f7c16da47843223cffdcf798cce842374a6956392ed1a0750fa5e3bf58686a16d6073a44963e90906a6f0c692f27a180c7947d0cbc406eda3eebd7063106a6ca2fceb5dbc2e1bba17ff3eceab1c9fc3c1377700fafc11b594472cb3e994a18238b745ada8cd11618a728036df34394d1a48ee9b277c8484ab6d74ac8efa710ab7f84b3e16271324e86580a9362291dd9f14744a582ca78571c85d025a2a232ca529c3b50d26682bb84204cdb9ceef9cd904d1b597f4c1dd6dc0ae5e550cfe128cb176bd96b15a9f8270d54a6f219ab24f7ecc83ebbc1cb728be316788894ce1f3f82cfcb8b02fa8cf57bbc96101dc4689eb2e5c5d6cfe392828acc6fa8753c46366ac1a7b0c306d255f7df29557fb8010b4bfeaf3ecb08bf768e822b3ef5de16363c0c0e7aba5170ff0e56c150c40896b3f47d2b7247ad61de4ad24bcaab0607b572e960576d6cd1272b9e0e906f38922f68ebfb1fda3422006c2741c9f946a33aabf43dc550ab8b84dc2f5172f5ca7be405b57e85d75f68a35f1b9dbb5532714c43b7074318b0088e9c854a96ec30cc6847842642e361be2d8009b02d634bea50d6ac4d6f09fcc0aaf93a4a6aa6fe0c22cab292d562fd8b159b8c498e97e576eee14e8097c8f44c705ea8e17cda94a3b9fbdb44cbfa8567e1fe1d9a5d57a1cf8cd008315bba392465496ba03beb972b845768ac84fe8bcd192438532847033ca13f73e039722db0f0560cf7265e781c1869d54a9f03933321aa56e45dda7c46d29c1c1daf7564aab7e0d766daa7b9fdecafcb9f789e1e32a1fd13ce9c869f8677526b3a2c28504a1296856fa75bcf398795962bb0129f340098d98232dfcf64261eebc64e2f834796d381824aef3a676fb7df6fd42598cfd40a22afdf4a9e78554e085273ef700bcb14463f03d68df01b8301ec333b9d5e82cd8997e06b8f3b9b6c5b6f3bec990f15f55e0680a63c7bf19398217bc91f78936f68dae49714165ee65f7d04ab80da0de333693fe2c863a8462c900c5281968c4c6b096a61cfa116688eec7ca0a9f5296a60e79ff0a43fa62719c8736c7640e400ea73d0500454685f646df26086d8def761023f64727851c2fa2b2f7b6000210971dac4f664b8ab376a52146faa0dc516ae398cc2959651864848bf13d14cc9e29b8e96a96346858d2b49313285fc4244c30e067f90122c0d8e91a0aa4c8f5508c20fe40d82765dcd01a3f73d9d3cfd0e29e04b1fe49427b527a662b3245049087fef2b8744c0ba8397f2d4f572484bdf5d60b9182574fb09cdf773d30b381c5e3faceb9b1cce122d48d6490e8796b534c7ffdeecb53d1c97cbf5526e63af45668bb992dd9cf6fb36beaec1cd5fa0dfbb142e3b222664e2dbbc209d09c00e6addeea5bfb327c3ec3c43ecddd66d1f11beac7c4c4cfb8504421919a219a30df310d2e1d0b05fcd5bba9320fbae223a01dc0b5a80c1a705e7675d4100327f0654abd30e6459977bc01e06dbb9a931ba067fbb597724bb6012b8132735d8d680260b598be9138147cff3198d967bfde7b63636e9adea9b4bfcb0b54cc1612c23ddbbe0dadd728fb9c1c665b6f08af97b877bf89b8387d8f23bedce22218ff239e24a037bcffb255a4bf455d8765ab6ce00dd9adfa680f72b26cbc837e4a9cb5aea123bff2f11e4a1d5298472866fa857a8c77836656a783f63e72dfe79430a0f4bb0e4d5895b4018e3c25c05bf3e60b0e5c62b207eb8dea769ac89f65de050cf9da2b88f4d3bca37fe5b57127f4b52625e562e3e20d08d0bae9846b0010612043674019d0947d5778b50f029451b0fd468e3fbe01a5625d4b946feac1138d045cc816a7f4be40460214fd1aaaf21fb9f9c1c0ea6b9ce1b8b00151c5afcdd1e1cc6775db663b4d97a46a456172bf4a81c6e6ae1028d8ce0a719af2a4d32774df19ab255d30f1ec73e71fb081f3a1787e3663d1d74143717a17c6192d3309c025cdfbedd45aca6502529b061f357ef3d8d0a1f1e8bdc4113129ec900bd95cfbdc6fc196e9eaadff6b6d460fe6414001b61c08d6eaa442f7562f761de4cd066e2b8864e943ea8103d7c089927b1ecdeb40a3014786fea76c12b1cb896115f1613b9f4cab8b6130b96dd4ca5989d40ff9a0ecf20e64d4dab68d38539b29bb031b333ce1a76858a1695630722ab66cec72fb8044f12b2dc31dee4b761de5c726e63ce88aa483d6bc5bb95ceaceaaed4ea07ce560b984124aeb5e739cd53c3f41087e29b26983e369d7bfe1990d0e5f1cc948a5ac2e168a576604372d8dd72d3cca208abebf118790249046e6ae8acb3e368a4892178a9dd2d8091f910b5d98ff744b90176ed5cb198b53133b7bc5389b2f6854793d8753a38794b330187789714e26c5253e76b6ec5431d1ff3a68ae1dfb0a53c969b6b5b2bcce7c737bcd077ca0dab050f79d51f2c7510799b41a35abe499cce961becae7bede01c0fe061a07b18ed90160f1a3112bdc3d73b184d62d303d4843ed499b2bd7edca8067cacafbca6bc99e421bb432caf9fbf4f94e988c281d4e3ed7fc2e644d23601c7fc3203e3399079165c28c3eead1ca84531f84ae14626642e6818d7c69a74afa0e9723b9343f1b40918f341bd48b318b889fa07c3c3318b7e180c05973a21084dceedc5415858e158e29b3b3d050b9716177f6dee7b9ed0691a0cde5b33b3b21b07151f81d94e776233a11ec2548e89fa34f8ebd5f1c6c95be8abe06709b523853c78c8b9594aecd1a6756b01d9a497b19ce6effea831ecd2fe69ba6f4e9dd338e9995f6c5ad6c81395a8be6fe6f616e8a9da08ed1168916ae5b6aac854e6579278f7222f505a7fa49bbb87611eebae1bd642c505cff37d9019135006cf27172e6502df66dc7eaa01131e3479e40db3a7bca182fd263b07cf131038af1fc89869585ce597419badb5b651643ed8c4ce38c776e127d6d7a6946e3dd325b95351dfad55b355423a113edff585145fb9642b81436e0a3421f06c84ecae0f4e4fe9fdfe9de71530e26b090a6b259f0b540c1c74976838d0d27bd3f1bd27c02126b740a685ef5ba02d21a0c022a4434e1d2c680bd38e283f418f572f1fdeece46050443fbe4a9d1262bb929bccbf85aa7d4bbac1983e5cc1f7c152a79541ea0a952b8544a7775dfa3bbf6af7c9a5ea930cf0713046074b2b7da872f5bdef4c063dcf604fc1f412ea10a3765e9a15e6ba44b127d27d5777be4bbb2493ea359759b2b271abae4f504479ee514ace7e1e62bce44b229edd670cda6fe40caac330879c5b45f2bcf79aabd0169846d74cd64ebe20579b4ad79d99b23d3dba8006cc12634039bf8e7b5682cbb297dd3510c2b0f0ebd9c6d1f49fe75ba99e380a7eae8ca007e95c8359185bc528fc786858483bddbd4e1fe4a2c2684f4b821f9aa97c58caf8c1744bff64b945002292f181fb61dcfb2110f360b9bf058985abc1059a095cb94e7148fca00dd3de96d7613c30b5974bff447eccfa3e06fa25971e11ac00ddc00cedfadf7edbe9fae59027d5ac9965264514f735e877cbf3ce5bf26c16e1b6837944d1f635a6000b8b67c5ecb39ffef07f1ced3a28feed2cfc54ee636f2e7f9a10107eff88eeae76f4b8bbefea3b9d5129d6d1582025b30c4c2c72961949a16a6ddb5259cd385dd3be2d8a6db4fef8ceb1bd440e52aee5f81a4d2f72a9c5c48aeefffc7396f596984410a1d4a84c79afc33aa5cb54dcce9703316597951541521008bdfb6ab8d13b231ca2c338b6989abaf9872d9b42056f8363c5636fcab0867d80474fbcf4a632d7ac0da7eacfee16256458839a7102c8077ebf749e588a6e83f108ff023b7e25ee4932f132fae2888ef5aa9bd6dc4f572bccc439a5414790dfd57377deffd17ab37ec33da5ca0e884437eda4d50653835ce8742119177083cd982748a7a438a7d3a72efbc7bfda8c01a5a25d1961b7e3175c3fc97e3d8dbde9d394eff0db2c43db6ce6a9fd3ecf1a33b959131880d4ece78287a12945f7b5c0f23cec4f0724c5174a7ac6dad964a9570d826556e643074a15fc36cea366f1cf8e9fbc16baaaa2339a6be0c51233bfe7fcbed259047ac8bb610df8b2e823f881f33dedfc6826719d073a76607ba4c473115ed8a35df4b7b80e3d759a76e74074ea87d0448230a9d00b56f61178306d64e5f2f6aa75494acc77eb2bc9f1f95004bf0e2193ab51b1690141fe7c8a7f0149e50b9af2ccd1087538c789e5cc02adddfb41507e45f23ec493abedf644e9369e891953f0d724572ebb331e62777bb05d29c1cb48e4aa986f3cc5430319f753ef6c9cb04926cbdd6599be67c486cd1e0ec4f010a809e354e5675eac478c320f98ea161e402e3001c63ed9f4807c9f3d6f576ccf001824fab39db868280e21c0479c161c9a7fe94aad2516231acb3aa4fb4b8834d5b1e800565a633529322efc57fd0d29ac7e603ea6d6e39227e547db3f2be300bd49b4fc5a37ff61cf7ae23a66777bd3fabc3d542feed2b00c6d4f46a772fda11b5214551b90ed9c8f5ac400dfb5d299f9bbc901c4b7540b4cd5b97dc0bb48a4746d7e8126ffae33fd545cc64012b1ea4def9bedf1eaf8126d810ef7276f54795cee6c3708feb1c67dfa051124288a535bea3e6f33d43f53e321b83927f9919e397765bd4df8b8d295be6567f861dc43a81e291c070d8a5e522a5dba5f0490819e7ae3aa4297f3d6e903e64139591859c70dd46ae81169701efd680148fac1d1f07b6e74a3372341cc7d10236368df041d3bd8d2536a7d57be2d5f946256b5fdd3fb7ea2cc60a7b1c48c6b85033b90c12f2a9ee8d5930673c43cbcea2792dd73cd6d9ccb4a9ef19575b460ec952bce1f714caf24eb05c532b5adf8892559b8b2216431448a6ca16b448798d095c3f77d9834820d004d0a32f6e3aae7c7f5c8578451e4a5283437b1a5686bc7818e9d79e854a017b1c375f32c803c8cac019cd27ac91f63909014f73ce96237f5063083063f81bb8c2378d1bb1635fe3e07a691693c5a16500ad9aa6f8d04b84ca541275657bf9edbc7837d26f82fa2fa726632c41e1d23e30ee659b1c5dbbf14f65fe57d2fb2084d3a3643e4a872116ddc6c353000e122c606db73a8264fb2ca73ed3bdf49f1ae3cf601d498c9a5c0049018f721674e8975ad2986b720e949f9a86998e11906d74785669da7be53455b480d170cc3adce7e4c4101633830db0f0e558b472f6a49d962e50da618d307de6eb90376a897684c7eb28230eeaeec9700519165ff844c8f090da2f84bdd9e1a7e9d5ae38883fd6cbf0e77a4b6bc051e48be39c1fbed75c4f2210c22d9bb5e7bf22a7bd7e60be46b77b560332300ab01222bf2efc71e5c17b8ff97ba34f4ef8f53f0e4c83387b3a55337ba70a5e544dc270b4b43c39f45e3c7d9d4230022c7d12e812439039ff1b6bc1604c1d202792be1dca16283d8e9d5a9505001adcd5dcdfc4bc8aed8ad152c2cc0ddbb19c09e6cdd2093c08a63ae59c7e389baa04d37f217c130ae2557a4522fd88 +Output = be58f383224be75ddef2824d8beb1e43 + +Len = 123024 +Msg = 8f62cd9226f64e9aadc5f7a0dabecb2871a7465265b59e0a405a487fc65ebed6d531801f90805888bd06e3d06aa54dffd7b55c55909cb080da9e491250f74931ce27fb908e8e159f91383aff41fac33954bebfaff31b38d31c29b99645930c2442ed48ce68480c47f3040514a5e6b63eb06a784ad65bbf6acfa0a0f5eb599015f82b6fc066d7c5e9a9124bf7df91ad76b3638e0c8183ccafbbae06168b725c6db988764dd063c8eb7c09149037223049244e09df3bbce809a7f9f4e16c05f9954dac675fed139eb7349268c7f4c1c71fcdd6f2aa4e2e9ae05c29713ed83bedf37c4049dd0610ceb3995450846098fb6074a1505500006a9da3e78615153cc2f10eec25ae6382e04972f8d3afc1cc5374e2572bc79a5be0a642db3a4e6c2ffff6ca5702bc4c905ce08925fa30608858c3dfa18bea6366856401ac95d1253c2d69792ae8ee0962cbdfa484ccef85f290b6332779a5a54ae03faa029f86888dd3b4e30ce02ce121b5b08cbc51d4783285b3a590fce0a62e7aa003876156dd47793ed0a6f05e1ef5a0ba097691c88071bf23fe841d83b03bd9edd6e1e2276b95a86f08a0236c06051665e35a95b1e6d7c56f06ade37709988790e9b82ae37b9de6af52a17e3fe27a9e19e10f6479f38b1efd85b056a2f96f0cef04b542705587be6678510bbdf97bc13ecc3e0606ecb6553743387eedcae5ee74f17f31b8417cb5fc4059d1cf9531053c6c8e84421c7fef8407eb6440c224b78577bfffa187a455d97361d85efcc4f57c89a8e513ca0f764b9b710f842b54ee8c5d1db5156e262566d9102950775b1664eb3331633d8d72f6c573879f4b9c1cf06c405afb3f2aad09390fcb8f4e1ef25d59d87019be2269ec4e99d57b6b25c8196cd1f63a43da762b5c05c601c93610d09d3fab1d95f6e595fe8a00ffd2177a6f257792bcbf5c07350b9b239030cbf8237d0fea570a306d599cef1012ca99bb5a5edb3468fed8e88d0c79e923ca0433c0c2f133af65f98aa0f26f0e9e99d31142e1a5e7264777a29d274620a1e00a480d348c900ded78c2d2c6b3018a88ee078f747cb0dee160bccc26abd0f4ba05bf749a890859ebd6a057e162f1bedf1222a9e008997815bdbe81cf4f0203a01c215bbd8fa37ba73aa9970b25e621e666ecf8ecf2a9dd2bb33126ecdbbeb6da77f42c66476a5b69cd67fb0ba4e99de513ece562e2e8f36b6c9c2243f60af5af3fc34e5b5864e179b661e9ab8601192340aad6087f5fa31c1087dd9d49f0a8699c1329656c9af61e1e1fcab174377ee916af34a87215d688c67abfc17b77b74eb56e254b281280a22d2a07e61592b27fbd826808621272f5b7fe307935a70aa7b35baad736d6684b0a090612121a9e2d5cabd8f1f85f60ac0b9a988b1f898abbbd6320cf3eee9762de4431fd12d72a3b1cb3ee2adc0389f5e9d75fc0e0241dd4fc0ceffce760f42ed064ef6ebed23ff02421117db506d417793cede02181ac3898e17f26da3666f909f0a72fbe12c3959d7da8b02c71285ce551aab389a62030b8673914bf78d709b170c306b99fa072ae501d8ce84b6f0a529eff00c19d5f04842883903d2c2ea8ef6caabc5782bccf8020d7d9929c906aeaac5291706e53fc25abc660fc5c531ceb6dc41941c201f43a783e5fd16d73c4d5020c2c3f1fe260c3786b4da50f2dadcefa79e41f67552805ddbae54ec500603b28969ad6baf6778518d81fe04ea6a5c09c31e7987aa2b509d9b335b0ac1f8543a756a3dc46768a9412779e5420a54ae8da54e85501cfe16df39115a02ab87d1506b60efacc4ae118eeaf92aa8d13e66f3c4ab0fe07c4f55ab4bc4ec648b38edacd1da5d7535ac43835e7c2899dd6bf7c4a7b073a916938f7a29da8c90df801ba85f32e1ce38e7b1c6e89f79a59d71d388d50b4b1a9a6f46d479aea52826f1edcb59f727084ce4ded21fcf985c8fe4acb8c2f810c56636fe32b1cde08ad012c69e58b397c3f0284d3d6a890f1f2348d5ccf8134f3a188f382d48c4a94989475889d1e4be71b1266f516f58486e05f2d13dfaf960d90fdc671cc50f79d4b113f6266c06f5a21e63c7c684b9ced99687319431f6f032eaa30d99bd2adcccc61d31fc7d96f7d58664d8f5512a1ce2538a796833b877c80777be2c77833c9256a79e649d111f7c87be35764b25cd08db611b1286aa521904dedb3daac533b5e1678df72111e71790b44fc1d93929cd8c9f893b913939a6512d0755cd5d3ca7d4c1a33cdff5d9274ffb9a5081d0eda0e5ba664bea0178e07b06a4fd35a7c1f8cf4a50adf049803c0408a7aaeb997313853614bc078faa67f0d046ac9a516e292f5628b3289956b65b5ffa496cdf4495d98727046030389d413e5eec51d69bb983999df4df41d736c45604b48c3eecb851421fcd8a9fcdf0ea85702502a3c50a5a7922db8aef8c3dcdaf4964d014d5fb8aeb517fed2ab5236b6a0cef134594cc127949efc20ee02bd5b04ae2cf1d9acff4e78e841e6da885224097b30a38655f4a1e85aa0b1c7d817afd8bb6df9595b61dcb098284d4f296ddada3195e08c1347fdd7882cc84aeff3c0b8e499839713e741a64e3c6fd3de8cc05b17a9513330c123a75128cf41ec5875ec5137f6597d9863a23303b52d4fb9bed456f35f42516bfca0dc1d2d727a4fb6bb2bcfba68417c2beb6f07852723fbbc8c15fb7283204b6e0c52934aa53fdf6b6f9ae9378c069b81cb29d04887025ba2cc7d4af3bc456c6231da108ea4e3107c4ec50ed58c74fe4e888ae4671696df58dcb66748b668d3c1599d1e61360fead2a1d5c5fc3234ac786bb9cd489c8491c604e7dadb39308a71cac2442b226b7653aff1971444eeade9bcde1355e17779d58c392c130d45985ccc720b54319ebbe8c2420b858b490a87c3233cf5ac159e6bbbd3e457f9500568a9d5f9442b51c17a20f0a9b7cfeeca3cc8aed28fc6060871dadd8a11c6f9d97fa7129863d82b91ef1222f912d885f5ef12a75d8df8f3bfd03181a7a83ce71d881052701affd53231e00084ff6db59488ea3763560884cc6e08e5c28423c3d96b2abc07cf6af6ac26d2b3d1e45826adee98866e52be603635a731630d433413103e79e7ebdf3708b83063682a5f814b0b64bb05e9e430050c558e12ab64e3d55f93b098d727404dce4137d23a4b6e73c695feb183409b41da5c2458c64d772640738aa0fa0ab8834f4e58967ae3942f077579f8889c4af389021abcc6c7990f9b242f89bb4f47b3259fee3c54f19c86b64a516560bee423009098c7139af19658efc6db84c096e4377c204d2f3b2d81bc5db17d736e12d7274dc8ff158e26c65f1c771cbc234d1e6d2d1650738bf026fff6bfca2a767c19e683d0ee346ae1a498f36cd6ca411469aff9f9cd87a78d7f685da3d3eb9dc9f02578d81cd9f8c93aebbcca9018e291cee52af14cd557ab94dfd986201faaa265cc7609106afe878f41bebcd30dcd6f54f7062556c465f26b4db3903a2f66ae7ec3c38a525145c2ab8042682611cc5404cdd6be72bc970c0e9834e8a881999645f2a7846af49523979290f6118ca5e9e450e1e32925b79e85aaa1b7f27f0a01c2426c1fe1bdb6525a5df08f1ce621d5ff6671bd02688b53d6694524a1908398fc9958823d136ff6fccbaa5bd08808c05af8cc7485ebdcd00bbf67583c1bca03fbe1b5d6095d89b786c30581b4d82254ffef3b2f3a1771c02c934e7a4b8aa9e9c700c942ca05cd3fff2c4a29513f3736f5310616aa5414c93fcc43b35644e5f269e0ddef0a7200336ff0c27d2d260e1144a875525c0b8b934e548e2be6b149c7e8673805500ced3edef6b2a2d2f3708bf53ad00bd8a29fc76012770982399c104c7f24ab253b5b06552665c3c810254c0ed15e68a783180d7eee4676b344a5749d0fe70910671133db68220695e3f5fd9a5468925014be0cafd04299003a2d9ce4feca4899f8d86e79a43093c3d6a8469eab36b15bbf596dfba0b49bf183fc30293615904856785f36c2d893da4f05ce24be10ec51ebb0d76a46e4a30e87dad7729e1008a6e9b9ad1aaa622e60b8d53e33753e6bb9ff8cf305ab1adae0af8f39c91e03d93a1a63002d45168bdf78e03dd4b807571b65b569d3b59e67ee61e2ff359e352a8c4f3d0278793bd3def7ee740e6fb5d8ff84f3e0dc4db773c0069dd1bf06ef2425f11059022f1b2de69dc78be9828e15eec40e01295caf26df0786566d3e79ef8c69a4add350fcc27ed232296dd9db37708dcd73c1c8cca7d2ca6637492f1bb2491ec1a7f4c227ba2efef9f6a35ce3650b47f9dead7b571f21b9041c5bbf1d96e5772fee6c6fe43c7e89e29c92f4f0c8495a5aecf35b97b5553b2aabaad7c6c2e7deb52b433d7b70f7dbb6c042874888b12fb8439d52d692f5b79e8f3e605f5ed7ba1d068216337f205c3c0dbcfe34cccb2cdb8bb2475add8997296e1f4030943e722d2630e1559181753e280742fcbc20ba8b6d3b216dbf9a4293f15661818aa370ae34558629cda38c82bc2b3ae88137428f903fca5560af20a4bfe9a99a688e1b67d7faecf75c0d0bd26f31cd4043982ab09ec6295ae750992481e302c25787db22b825fd07664758f4e920e54b29ccdbb63cd926c67d0515dade4953437f1718a57fe1a0a012daddb0d30069525c5abe69147ea9df4957fc8f7f25846307c53ab9d333bd0c884d00d0d5da409d04ca3a90cebf9aef74cdb60b0b7e7c6b171aa9265c253d91f1282b1a96b5547447a5b6f512a4e13c25f0ab162b5d25a3d99dceb4c3be067875f4c558bf998c1f50729c5e8634670f8546447887c9665273d60f2bb00601093b383650f78ed0e545b95394d57712afbc59e7f8c6ca27c10d4dd552ca06168b6c7ce5cbe79d08104f03435fa575cb66f1b1fd6090685039d08b89f2bac52e482f493c9037cd1ce695d6d4869f377b7a4cd4ef768facca00e31791d3274b2f86ad25a2698e27f5b040bd6ed36ac40834f64c2303689d7b5e6f7957bdbaa1038e0d9b7f1c94b179b5773d790cae245cdc17a103cec6444c9d9c3a41781bce90a878303c72f275913f63e05dfa15605dbad659f6a14fa7250491e1b9cbf1dac01b166e3f33507b26942b2d8265457ff5155cfe6342abd0efda77f62680e5ce79310edcf12755c91efdf9ac5115e6890b37d117b47a83c790687501f05d9eb1a5308902ba15aa6963c2f2e630d1a18786665c2d50117f92f2f6b48b7e2bc58b2b61ae6903c7f763db2b406288621e8050eb25c79fcf463bfbcb5c1b3ab10165f30ca6983203e3bd70800ba8c291047c500e556d097c81ca9531943a8bb9fb46e5799817b192168109087a414424fb836e1614a8f6dfd745a76e846fd9095a36e9efad6fe63c39b78d0cb6b478e3ad9e924d89fecec1f1b619cb55428d6bc73de7b80d273bc8f465e6d4e789c598bfd4a4f9ddf9f9ea7624d3902f3b0da4ea64c71adfc71600ee95fba833499209dc2e8c633721df220f98bc0539e3c27f6ab2715e4cd8e1aad04eb4d0c57b49ffaab232d3c0fde9316419be729cc114c3f030cdcb7be1038f4199f993c3a75142d16a7f90a0157dde1cafc01e7f5e6c3723e4c4ab946ae477ea7db23b5656129afa5e59e4fef105f2e062ab520b4030a5acd83c44c1fbec2a7202c70ea50ef4cfcd95aa15021ae736573b655668f1cad332141ee0281d836f83302055d95a5fa8f117586cd6178d6f2a41d772bdf9a0895e9e53c5f157110fc210a65719bfbbef0fec4c319f705d68007de9ee32de1c91d880c23b4532fed3d9a93f5e8ec7706ace1d6fac88aec1e882f58411f12aa4b247c2528c4c35b2807003d4b05ff9e6e2d7b0a825b65820b658b38e241f64a2b3536aedfe2de896e12e274e96b5dd851ed1b0dee354f6e19b29bff16fe7157d5da5827adb11d310bdbc1c9358b8fcb6e86522fb2f88106e5f9d1f933a6fc49d78e511e0691f7f89dbc1ea8d3e8fdddf063b10e6517a2f2eca5ddd5ecddff96accbb2009f180736a04e69a229063096a41fa81879154da89a31101386f603d4c20cdb6dcba5b371900d3333c955b06bd614a7ec6363b9ae7b461910b6a1a16ab3dc6db410ed95400972fbdc296a05e422ed50e8b8a59f6b0c3f397be04340fefec4c97203322518591a3419cdb59985f704039bed3d6764c99721a3986d6ad80f307f361725db612b5d6c5b2acaf3d7eee3607475adaa224fe842364382a7ac61aa1f6ed13b20c0ecc7154ec51cad406715d810e678c039ebad1b9276155fd2a2bbfa9aa5e4ad9e19e1bf33211d1e55fc15daefc421420239402e46a4a82be12ec0c12819b4da8f2f37dac6c36edf9f0a6df97f7329b811c55bfac153cd746e7272d3b5a11e3feab933e868206459723e88b42e88049afefc5af1a107d7c1c12a2cd2c1e0932657346078a5cca02475f4e08b9b875453106ac7b3543559ac8f92692ecb3cb6564b2d380bee2c94b910da1ff044d57b88fc7d2cb06960e59d3067a2482039fa284d103502cfd4d49fe93a91729916ec9529cff4593f2efe0c4a0682cf9f5cd114b369e20dc939c23155a2ef9326b04a101ecfa94e63d3f58232eb65256709cdc434a6c97d48dff025ecaf84c26c25f67241e8c5e076147e8791a2d3da35e5628f475345e1ed4be0e624bceb90e80c844449c7d4cfc444fb94ccb9596e8a64120e520c01cc24f216ea8467ae8f18c8760e8cd9505cfd09ef327a9b6042b30a5e99eb1d67ac6e5704bb921c280d7cee4e298199b3288eb7ebd8f1c573076e4ccaea7923f203480f2cc1b466f2ac92e27f2dce8597a2d7f353f0e8c42c1d0aafd958929c3b51307f01a581b498dcd9497ba3da29586c8730ca22b613d60426a7fc6cbe029e26c61b25cf80a1752eee87d5f42af18fd60af4b0e6f0311b5d20c9b6af51e3b4e467880bb817aa3203112210c7478aa88fe1b3aaa60db86678a7899a98f4abfa1a933a25f7dd3b3a0a0facbe7596312cfa99f219f884f631f7296c1aa22ce7e859e7a5f6f737c10794289c3187bd91a79692347146fc87284914f5a96351140a02b350114ecdf82541fa550c86243882f468ff5329baf793fef89ae94517bcc9a5b4cce756f63d0d94037bc1f9407259849cb7321966a41f7942d03cdfd74ec1c33a80fbb8470c4afac284d449b8fb95d79bf0908e86392558924a269c16466cebd2f0b0db36e247f6b5e4c60ff410c25df54ff0f17003301d554d38f25b3035700ca0c9485c5b9f086c3019a4687e59981709c60adabeea280a7de67b2c98b600462587781de4bab043eb31bfac80e6069fc292032cb89e093040a1aef0fc690d2dd38df301fa257edb6ab0aa26b4d239fe1ee7a2cc7cd651552a0d065eb7c907125f4f418f1859d4a153290c7da6b8a29053394250982d60e7be8b09ac67407e920d4ddc3bdbd2522428ed5f07c303c11524096a4f870de86662ae31809779e43b820c3b9e913967d250700a5b963e25faf5ca932fc5e2386fbae91671a4dfd86d41fcd80df4c9963a6e73a6ff9ce231903d1f5567d164d1522bbe00d63becbba5b1a24a20533d5ddad74aad4a437a84938e5a198e35e053cc39bfb944a92b0e73759efa7c58ff3f222f8795e226719f635e1d58097fff302c6940884399056164f24571586279aabedb9ce95dc261d29e20dbb97ffc1be6f13ef30639781624f8bc38476afc4730ef600d200383b5ce927b07864846b0e8b93f49abbcc2d7f98d37d9d51aa2e25262614ac279f707f3eec13376f8ec78d5f2cea6f13405c53fb0f9ccb2fde2d59f8633f85927a8b2e30197f1e41869be1f2c71bd6f45bd6867f27663597b389b78e96c785ca2f5510c8963a5561d2b0b24c4dcdf8e58562c12c032404119109e6efa8f5d3562896ce0d4b8c0557dccea976a449fc6e26caac0b8c1d5f25e0778f237f1198becb160f0821bf56ac0bbc6d77b6d70b17a6d4ee23a89b6f5c089959330563fb8b829c7cbffe1a6fe7c644a75769be4d696d492f7d40e45b3d7137ed2620322544b4f2bd3ccce47990772cff1fa748e9ebe3f0191f3d414c51841bf204bac83e71c8de798771669b30853d1cd657bb08267093521385fa6a1ea70c11d5ba6b6d9a282958a6d7e8fe4e583fa7846160d1a07df882610257dc2e43d1f2a20864da483b9b04a3e4b1c97258fa4731ac7f6de370e8520f9aa0cb09c1333c728cfbae0269fb2285820b2524ed36a5e622600377b32b6927371c5e3587fa984e2e7711511a135d55983c3aed7fba69abaa4abce2ac8971b0c014be3cffeead3dd6222abcb6a95a1a0d8d2f54764f3a862c87c0aec5ca0fb31dd012a690d624476c4222cba586c4dccb462de23abdc081915d366265b5ed37369883f9a17ca474d8202006507241a4b9af5b1d33cca4a3bf154687f314b344f3b439bf9ca6d6cd02044df61d347979bf10e28fc9438ef49ff61aa4d9ad09e23c6b5b7fe81d6159d235d12275961663c5b0e9c065ec257d194ad7417e48951af90712c2eda9ef2131fdd312c15ebd6ab3d899376d8d12451657a8e74aaf02f312ce850f1311252b05a27b4f6755189771d01a7c4beffd547c67b31ca5a9f6766f09ddeec21fad81386df260d143cff1e8e0931765da8cb335c0206bf7fd19aaf8ff41e762992f2bb0a660cd65f08a80fe502c9125166a6927aa1859a874159796fada835b48522f5795ed1f8d23f04d9c670f70f26a3d7e3c6fc37020d68f452f40cf4915f4bf971382bfddb0a6a95fab6e613f339faefb5a564837c8eb32bdac1a49c2f9651e6bceb4018f353f5ebf11ad4d83527d64e76ba6cf36067aa306f6d070746d6216b16f74d9be86b7b773b86cf8c6b6cc084a56a882f6434d8d28f3aa6be9dab54f73de0a6ff10ad55b8586f38d8fc754412d03a487fee82a962c8df063a9a92472b803beecb02963f3fc65893267edddb8975ae106d65bda6619abe97f3a40782789c6d778834b2726e13c780fd5902e149043a928070625a6f735dee826097815ed0f9f3af3d8eb9d3bf2064e611810fe20a642141850d2fece1217c5f56aeee5ecc65c5b873875ff12717c1493ed4b1e506bf5f391a0ab15a72cdc3f2dcda03e8ed35702c8d48df56fa0228cf477a71b277a0aedfb607694896a757e589958c9dc1ed8583c12fd2759673fdb0b1fec9eadbbc929ddf7fc227db429a9fd36dc2edd8f27856d5b8c3cd8ae1c2c604be14eeb177ad0bfcd05688af242e9a50cf414990f8bb0e31801ddf45d02a57c644fd4e8746409294a590eb80c0665d7836a2319844e0224af25b1b65d376ee6d3fed7adbcd0fda4d6bfbb0febbe461b03050464d8b6a2ba8ac061259403b026ffb60040d506d4b7d900179875b1b3f9f48c5f82f10cb82d0f9a9449ebb093c54f3ff7aba94eb5ebbbe4cb5a9329d5fabec8db7cb9976e03a87af32b4a853e4a2d6063f61ef0c8c7e4337f5d2e6cd3a5c981215916a1eac6bc2925d29ac9da3d00e3ec271e3337d3bcb5daaa2cc3d6837d7ed921f27054fdb270d346c1c58e272f8e3b4890612797ac3285487776061a4389aadd344dd531f415a590a9c1838f242af8605bc0c29c1a71283ff5cd8af581683c94c48095e9e9e042b73804e0fd467ecb78699930696f3b6a9890108b99a0e4384e8a51bbadf99b53c358d8cef9fd545a97a13399861458f35a2e86309009c546136d086f058c0c7fbdf083750cb17250c5ebd8247c6f906c8db978a26123d30dec58ecdb7a0afd6face84efcbdcaa1530a2fcef9d2eaab7d3a182e089455d636e030462493dc34cb9828818c95b0a90b6f555e4110ec70cd6833f08bb1099568f8de5e75d968793a8a97644c1bcc5222fb46d024bfdca8051ff2065341a6d94c3b4a7cf4d3179664881f3f65d784643db7e86cc966241bcc673db787cc946a8ab15ce8c9095151f29da759fe5141a607a9247a598d2b91cb49fc4d50d83a10c962fde91d037f748cce18fb40126ce125dbe341fbbc59d2aacc170ed5ef0293b15713c9184a07c5d925586d53a16bdd42550b0ad87c16a510f976433f9853baeb9787cee165530d82a950f75e86a862041d851d1754cad4a5d60233b55c954e1f2a4241a1dcc9132e62e8e1894a8938133d3ac2e2cddd25126ea12860c13118f4192b6a7f38d3a186590972fe74782618bd11415e6db861ffc63c6867518ddd136b2990a4ffd87d329599f3e28cdcf6bba3f1e1b5bfc15013e8bc3cf3941268242826fc37bc4070d91e81ac601a1d6ea3f9c4eb0f4861b9f7db07ec2c112880ce5809f761f4724223fdaae59da7a35779c771a79392006553a707c0395038ecb904bac74a31d8bbba39fbe6c4bad578e413e05d6a24071dce55a20043d9a8758e3420b419fad9a343da5bf6fbdc1d9b8de7f955bb86dca710ebc2f37135e2e3f5ee2508f7d8ddc169e9b45f6a94e2861b4aa4d6af41e9cbc2744ee2eceb4cfe953cb0090b524cded16ded673b6a8d023745c92a6edc95538cf52e15db83508d1725aa017ef08fc2266eee5793e684d789de50971fdf470515784ad46785555a22b2f936773a0c350ef59f779d9130cdb81f2166ebd269ab06048a67b87ac32b5fe986f11fb92cff3108e80e7ef2f9ac6d1024dff93e620b06a2d615f5ea01c976d439799df457e739b2b1666192483b4fb8424972ab9aeebe591628475b79fc0e7bfa181a73f6b7cbf8e2c56cf78343071f61ee7d9f791bd53132e6d557928bcfe4b214bebf6f3592e46374c7ab148c3c4d6a1443a4675cf4321298c865b440631947b6b05f2c2a337d1cbb9b3661de974b4604eb41cc77c3659e85470e47e16f22a34619db935d59cbf5e1101ed401c020db069eff1035e9d1bff77bd8b3379e05ac0c20bc0e98aad7d7304dedd3bc5ed4136184649b5e0f7e5b348b4d610a95cc4c4fee8904a1cea8a8ee7b2ac8d91970d55fc4fad5badc755b85a0f5b722ff7f6a59aacadd416e465264c15e1a1e9bfa084687492710f9bda832e2571e468224ee707d08004032babbda48103154897d965ff4d8f72a0d5e288378fbff40c6c5bfdd8fc9d766c10bcd9737c875438efe66f2342faecec161c5c08b69c0d67469c7e80798c97bc4416ee5b70f4eb2508760476ed6b5c5bdcd6630422acbd13419edd80efa3e46e265880af06b246a771f6ca5cb5672d7a8aaf31cc6c586f8addc19f7cb799e90c47e024f09675f34accf725673354fcb2b0153cc3ec25b1588ba338b679c52211194c4fc2b8867d6979e5aa08dfeb36bedd97088d3aab1ee6cbb24dd09ebc0c172b0b6597d58a418df940ccc4136067d973a3198ad03ef4d02e8d235daef51388fd8c0ae285e7fc42cb97121b967afcad02c7e43f3587ff8f24826db022f6d4d0f17ca4253225ea028166fe91a18181a41b83fd3ce2ec8b7e3e30816a8347dca9b72bc5e272daa7679b2ef6a8fd2a83591e55c8e650f32547ec2612ff484e775daf37e4acc06cc0cc795daee3d1cc7e269bcbebde18225956aec176e0fa9151675a1f84e69352a2abbc816bb4f7eddeb71434ba7691009444f69141b212b6d77138413b226432e9afc528d19eb8052165084ec96263f4627d7423e7e5190595f5da5b5bd2cb73f23333b25523aab8f2caf878ad03f9a4407a87e7fdfc8624095fa0bc7b8a319c48c088cc8ad6386faf435520b9edda66cab6a25be85ae288ae293be32ebb3f2279e224c5d718e9afc388bef594828ed24ddc640e3b92a6b9e0ed0c7dc9e82c8cf212a83cce7e56dfebe58665a1647f6d56363d6d5c364b2e6e1582daf193b2624ddc739fd578d89664f45bdf8506349e806ebef7eeb8585c923d4f892a304918e99a277d708b1769db3fafe193da36fc38e0393c579b56caf9beb316c860593751f6344444477ba0cb21e31a72630efd0c355cb92b41bf0001246df270868b34135b1a92c5107df1a14595c89533151766d899ecde5e09825508d0aaa72527a5aa434ad75788a6d2ea05589a70ccf1e1c5347155f542bed841d67badd0ced6e29339558080128eab21fb7bfe99932dd2c3e36372e49257686417cf8a81d611914ac7cb2cd3408e00d5a2a07374181160df6fe0c230cf6bb938375cbf3efd60384d590c4ac5953d6a7165468794ee5512743489c26e4c54414acfa3ca6c873b2e2787a958eb73055e81eddea97068517e2edbcf0201bba9a6f84b252a9f160b0945be22d5997c8e438396e9579b28aefa6bb010ff7f7ff440ed34615e4b2c68504476e95f741430bff2eaf7208991b62db76c00195c1b9ca57615d8d4052cdb79803c9d44efdc852a5c647882a0561f7e9e6a0cfe0c013b5b4f6a0c3a31b9cd0ba5999f248137f4292c9dfdfc83c833638d34a80c23e338b8c59b7bef7535c58d10f87f8ccca91622eff1e80cb87aaa73005651c228141d747534986224334d545ee3aedc16c263ae22fad72192efed33a439aace7d2661e4cacfe240e334dd17dbe5bd9113f6553142333bd9c79a641bc579136fb79c9ea052c809fa16aced3e34791c5a38c77342ea1596a3ab0cb792007f1c545be94c2d99a74ffc532e064de5085b85f9a84659672c780dd1a9404cc1c625eade9ec2f30c0854d61d1ab0bd6a3deba2db3b36fb65e24076c002a692a5e8e0b1b41fbb8736459905c905650330645d3f51d2cd9f42c1808cfaab430a0941ad3770fe9e5084f98d0a0b70abb5e42620c9f21182bbaa64d89ee605be29888b1bfa99bde3e5849eb15148eeed5bd1fdc6c13079fee6f926895b16a47067900f9d59a2d014ccb1afa68a05d2b25b9645cfb3a17e8a97ab91431000f9f24abc59a1f300d7a96ca896cd02c6be833bbdb89c2fa991ce445e3f767c3998cc4969f3da5548372a4bb5fe956a0014e88294a0cc83cd4622837d7b93ee24e356fa2558a6eefd611ff07641b01e46785ab6c7a8c16e911e3fbb85f03bf4577c3ac37b12882e74f7e2e1760a7d9e1e5b424ed33b2b2e798c6e830417df0d45b5d04bd79c0e92636e2b9521b38e67dc3037c133c26a620b134740746cedb78442cfe9c76f9ab92d364291f5c7431a1489b3a455f8ffa7aa45529a6369e88177857223c707cd1156d2d05e8ed03c136bda4e6ed6295b4dfb8508e73d997fd9a4007f8052ff063964d64d514948e9e226a4509720ee1de36364e2bd7f75f44eae46409607afe67fcbc32220b1abdd14f97a72a3c2b1b7f676676893b579e65edac95dcb31a4ee73100bf7234473761a38cf2d1b381eba05990f12f05c2fd668de0c3f967d887ea1c613250f9e2a55608904d863fd7f748f6fce6a59f002351b1c715e9e57a5179a529b341c1b5aeb965ede0d248f7ea7f25f27e746fd9ba2d41aab43394c8569bb49e6ccff586fb91a1e9d43c36a76a4dceb9e123df15670324d1c75fdb8c3b58310a8281fb1e33e6a6cd514d71b01fbbd99a363a557bd4da448477f6248cabb804b320df3c45ffc05be17e8b61dab3d02fdda5423bd4a9ba880bec7fd6914cc416e26c7220c20728a86c84806eeccb95b6ca58c2f8e88dacd8ad4d825863c6834dde8ec1105ff22575b88bb401b0121057a87442f47f29b61cb4c28714cac2fe92f1af5572e269c0aa0bbaae80ec2d4bfbc1244a976125e33c667517718ee83bce61f7b4af14130030ae39f65569c74e885b8e6349552838210c8bb9d776df44e7778d6830bd99edede93114e6ef861fe8bfda147225dabfb1ed2ff6ae4c5021c77b9af95ca5a28fca03ca909d4612c8013531e67a97e57fd55387555fd6e2d854b545ed9a93d7efaf462bf3e1351451bd04bb60c974ee807684bb5e50dd3e73786cb7ce5451df1485f87dc5198534c002769f0ac783a0cb7ac9f499ea280bf919ea1723f1a564063262e78caffe191fbad1066cdd8ea067cb6a5a8f9581f27321758e75d9580bcea0cc92d20a686c75cc5e170f715b995c4faf14c7baae9be87756444b73327e73b57da51e928bd4cb2065fb7aedb431b3f0e04bc9bf78ad6003d5602d29fa65fd5bbf49f9af2ffa289e2ed935b75f10739444261e0ea7d1e4ad390ba3627a677579d8a6eac91b85942e00dac93924dfa42524ce4d0d03ae7a5dcc6c3687782de2f711e37948181e18b82526bdd9cd464e8ac86ade2653ed2dfbd4ac6dfebd5f4cbcb2292e94ee6dba24e3e4990120ec7aab78235ac06135026f9af2d13011a4bbb2039f92156519845a833ce618e77a30707c214842f32f03a16667e9853ba438c04c6e2c3444cb7e424c572a86e89776c11b8b3016d282377a80323d660508caced4bd8457552aafc5885df0b2ecec56869f899aa3c6d7a6e02f7d553935787ac5e4b523e85edf1fc97d76bd06ba21d7a74e450f5197d659bcbc6dba67949b4f8bc47e904d2891d63775c81be91cdd010c71e416880c2657f76f2cf359ea1a5109bc3f53f07be9ddf8b67e91c3d8c8dd9e4f9138b0ee70a87790e28876ff9c88271420f5371f8f3bf288bea8fdb78b72433272fc31055b552667b601259acafdce134afd8cdb2af80f35b0e6fd81cec9e460afea74199065eb3cd1e7d0854cb7e402e5f35678621d36047ed62cfe38e86a22718adff2b6e0ad565bc2de86c9be52291860fcbfe1b04f3c4dfdf2f572d9bbc0e065db5776cf56fe7b18b766ea1b01d00ccbe8754cbc412648e5b83024a4c1822302d1127839cd7c5973c3ec56d5d83fe9bc81654e46f60a9415e475f54f62b063e927e96326fa181e5a69e2b5f4bebdd6bb2f568d5855305c15e08d8de48891c7a347a5e09ec51af256140eb1819d94fb515a0fb1f946dfc66e1240956a1a6e78b7970e96aa16c9fcee293af0825c0a81056a596332b160faa7e455b5ea008f9dad81eb2e51d56e65aa112c1a02e3689060c7fc4b0a7efc2148bd96946b223c5f0e6b064f9cea51541234add8061af64fe9dac0108996f863d904c9dbf568bde661bf25a2913dbaf2affa84d298e9fbe728096d5ab7df9fe7e323b73190ba59592ee411ce3bb7f16708cc7bafbf38c180a5bdcad39d4238d6ee81283f45005ae0fe42927c9f3e3ddaa510581784ef8e40e95fa02142a70a578086e4ad1b2206a557416f54c7bbe8730f30e4b4edf6ab527b55b7ecaef75e93239ab2221b08a6cdc44972fdba17385ccd92e72b053560dce309d7ddea187cb25e255b464c9a8183cac26120803876ba67a02927d194f407aae1c89bfdf4acdbb98fa8c2b6c1e1edf31405642208e9b866c0714e5bfcb1fa574751cfef723636bd405e3e61630c33c6a72672a76edb7b515c8848aa53ddde72a23c21c97961ecf1a1486156694b7ecbe48cf11751922eb0db37bec683c1da835a4f3892f37725de182dd49cbce6f68b31fe8a7a9b57f70ca54458b872a51713d753bd52c7be080a0ed43f3b4225c28df745e5d93372feeb2277bd870ad0bca9800f5711dd7fbeffec06483ce5500b599f29a93b012b6cd8ba9a963b318cf2cebf4dafd81d016e45188b9aa68caef8788f727fa9edca6958d5738addd11fe109fbd36dae6f8e4162fc2bdb811f88b27131e80e2adf961cf5dbcc4273d1d2b0e29d6a389cbb6c5fe0feaeb4d5852660ccec53ffc6bfd8ae36346b650819ed88e10bdab8a9e9e4ef4788dbccaba8d02b12277af98575d947a348189ca191b8908faeeb96dde13e1a1d017bcc0a6fce3bca4c26a570e9de0dc57f9d8f48217bf173ee657a408bc207ecd1565bfbc267b77cc21faa8e04322b2342c1e504b17dd216340f0bdbcfb8df3b5f34228589e5c7b1f12db2e8ac1cc746f74b47de29075cfee6b2f2b59667c99315ddc8b0ac8e95ef41186284cae30ab408045cdc7161b6b56e16d7d6c618ee7b5a18f68414ab46c11aa7646c47d01bf7dbb4cd0971d30ac3320360474913757b96af540aa78305ace4a460a8092b2297da23416a12a57dae9c41380f05a0871b326889494e60f83a07d5fd3efa3c491a6b1861093a1e390012970536e4074ce4940c3e49f28847f2eb02e438014ab60af85cd5edd2876640fecf70c5cd8feb5d25631a1379441b5cf8f5bd9d059f91eee8b8441ec3282bf7c7af20c3a7818d0f4d34c6aecddc9c0197752f76f081034fa3f156a5f349b1acd500be385c2559807549e922d498f1682e49e2caa93934b491d2b4894c3220e79089f12dd3c3783a03682c7878c0431a273a7fa1180e4ba51a2206d2b52b9f31601462a8f4a311c5615a37b79f9bb99de810ae04254a70aaa6a8f388157b5610ad67b8b4a70d4da7f5e6b1e733727c7bdb9316f9b833cd4c9d2d24b4566b6e0edf4c9c56d448546a29d643111b8db33b668a608bb91387126779415e5f430fb35e88b698639d4d9564f1943c3f348766f3bf33bf1030c9856c54f18c184b608692e6ad813c5460b10dfe4d7087af2083e9f8389fa5d3b92b1486dc4869ca8a0fe42d2a1948b5b7458ec615b5db45a51ab0fe173260437f8fc8d6ab993a0ab4d6ba24d4696d0777d94e11951423403eb4b09977802aca4436ee0e0688735107647d9554789494cbf6b5a6749447e615d850900092e9ae30aaf0f4941bfce8ab409646514fa6a2d9232b4f5b3e2f804f0efbad5b6f87386a723451fe5cbd17c7f26bff74f4897ac9e818d2f218c45517de16b6301feab01b1624eceb539f258403668a65712764c4cde4f8e02decaf93d10a7426abfc5e6a1e268f0407885c09faeeaecbce66a7f25bf789ce8290d4eb6e3fafe61aa3898013a400f18061027f5f6a324e11308d7a19ba4d6321990d483d1d2f1874c97b847d050859c613600dbb44df97446c5c848f930c4811eda2d2c70dbb63c2557a9fe2b16fe5e285bedc94e37d4e6e025d3a46eb8d245a76dbb093751d6f0b2fcff9cc10fd3cdb9e641375afd41b98d9d8c2c52b99a0051a000b2abe1be5573fc2b9c28a7a06b94899dbe310aba4c9db154494b9f86418c3580a12517e6dae6d9a084d87aded846aa65c686ecb9409ef5be93cff72179e582cd6d5940dae19a1a10df46f5f9745ebd3bd8b31fd9160fdf4d84463ce619cc1c496faf192519fc31df13faa58ac04b56827d5c10743d7ee263a344fd6ec1ce668730acfd3fd49bb57dbb6a060d5c7afadc1cc87b15475a83a37952a505d25af60958c969a5b1e7197f4e2b93fba98c1eab4fae9c569431478f6ee5c055fc004f32308adad1326cd25634a5ebc027ed36627e750092d471a27a0c74dbd98f4cd6b45077ed4cc69b8485176f5a15582cd6a43192547458ba3905ca86540b0c9f20e251070d92ef01849e6efe8b45daa973e2f1ace455c1795fc531a0c5550475b25e8abeb83e3c2d770493c9dbebf001a2a1472b5cc18f1dab1ada4aac62077f0f7b960579990e7db05a3e57e86268c3c761aa740a3212358f891cfa759c7609acebeb81de4e0680e501b73f1d63855e6696843d99420b5f91827226bd7ee0a3ff01f3aa32c784c5699da6d60749d63014c27cee765bdada35b98255e073c7ec8a6056f5238039b9d27085b3229febe73677eced2df9f1540070c60e8b35ac31e3898dd92d2275dca43ccc5cfbd036f260296cd01ca6ff4b765aa5c72a1efe127eeff0eccc08c9bc5354e349ff8537d00659752deeed453f0bd9ba0629aa4e1cd10638a66cbdb5d7645b7300aa297f0ebd8a8e6d0127739d35707b4226621caf7e5ebd7cabbbca9c5bb2f3f788276d0cea2f1103f00ffae487a152118cd0da48db6c07f5e58d6899adeddeb51619926900c9b58937e15bb376fed6eae97107876cb090a8c6ad204ddf7eabbfd07a7f91b5ece4635556166887fb8234b8bd34d9c6ceffebbb85722764e7d37e43c495256e0b1638b4d8ab923ef9ec95673fe2be6e19ae5520b0eec4d2bbfe86ec8273829d96d36fe2d39bcf00ac6e73915391a3c713146bb2b9f694ad6d8550472e8b37c932947f7bf1576d81759055b392a238666dcaa5de0b1a25696ef070c0335cb37540e1fdcc9c7efc15d7eab24a97c4dac06c598a0f2ec9d57b52c84f044b589436544451614f62f95255e62fc2cd5a1979a1198ec28fa643779b85616fa11f4860ef2410e684b3f3ab720b14b89de252d69eb32a94b80ffdc2bbb04e8f0f015e996419c2b8c6e269a5bee2179893ee357bd79ef3f23297430125c17ccedfbf2544758ddd44a06ec9b59ed39eef49de3fedce35617789acd1978c4162cb8da95b067608c7368bb9a27f847811392a52c080f52f097127e1281a31b896f1a3406e33f80326faf3736258224814e2afcc55f9eee4328b97b494fdc88f9fddbb14bd717e15630e71fcb7c3dabc208864ab9e9d1ded93334397c6b6b33ed3ec3fa6e7237aa801ed81e5e167205cbaa6c380d90f04b3a1e4c61b2bc9845ed9a99b7779ee60438a149daf9da6859249aa56dcb3a425cec52c99bf42cabe68179278f6c426d17072104fba3b069d05642f992fbd1103a7938738e49a2eb3d3243332b5746140a7406cf2a6580bb92e8092f4fa33ca20c693711e3b907a273876086333f91230508b8730f4632a7c66256114bcd6340fb42b66d424c4116af0938e84e2d0de232499fb8514eaf75954d93652f802e322f8e1f4d510b398f1a3e33212428a199b7c123659885dd6d262f27f4a2c585bfcfd4d97abbfdd757dcb0baf85e38358fbcf8ad448ef4a5d7a2937a864da35031039d4cbc262a04b51ce73336a465b20d6a75a31bd9a2effa30fef4e3d82277cef570e0da3b9ba6f0026a08a39db8fe5be8c06fb32197a41ff9fafdd2ea4ae2dfcad5fd9ea157a651b8c19f07f23802c15f6177d40fdcaa8e240efd1c2b247aabad540bce0066ed206374622a4beea687f7e025454a78eb8fdac35c8945b7257cc476723302d162a52e0bb7d44ee0d3f4d7c6e0d07b734e6a439f82e1dd0bcc9837c29a954d9fec273f0f08cca6186f51289b0f3b4ad6ba66862cd7ec9e2958482fc1ecbc89d875f0be08bcdbf99e63e611e51c4f5ea819ccccf2c4722d18afd4d4f9ce6f5f85e446d47c3bc9f07898fbbb2e6ed460f152e43c78af3a35e0bb844df4a97876ad2172a9f5ed5e32b0f5d84efd6d92f7b94df6ff46010d5c8a62a0c33ae69d785813bb64fa3a61684e61c5f1db8151cc09f24a3ce423b34a1d8e6f5d51eba70a8ea46b2d148a9c3958c609cc4f12d887e829281cdb7bf4a8a1263a44c3225dd658bbc92ec945d54ed80bed08e188f0cf5fdad7c7b173981e1f12499f18f18984bd401c8ca4d3d54ed518b9cd194b614c75eda064f17266539d3ae497d6c2f1bcc61cad722a9c64e258d5b54280c3f3a7324acb1b20df27f02686535487fc5e257a35c406e50949b2682a28909d596d889ed9a016c824a39cbfdeddfdb2079967e174a8705c804e650dff5cdef8739996c283667a70a8a200722accbae04b672b03c1a3d9176a39a34f3c97551a7b3d7aa52e6772a1d3ecc4465266b598309319e905fb699f30d31637c9221d8ad722dc4fc3e923e20d488f443ef413621ee3d89a26f9477b38e464cc8e455dd0f11062c92b35b8bbbe800972d6bdffc67d21111e0ee59c33ec34351773473e752fcfb71a4c9357b44e5adbda030b9f4db5136b7ea3078f50b38a321e6172e700fb26814a104a2956269fad84ab241b7e2e828fc1cfa64959f4b002eb3e0c80f9bcde69625ea45528ac172676b7519ce2503524ef790cf1d6196c4e86f45e33e9d9bf16691de703b34989efba10da4aff84f6d311897fb04f8987bef569b02657bc913167375c5d7d65beb0589c074c60308b442de648ae4dacc9f942874a81cbcc1c6165934b8810697f10564520cb8abebd1e4e7aaf1257eaf9a87534736dcd71284f6919fcaff4bb92b7bef26cee07945409792cfb05f6abe172945a7412e6137ca27eb1b6f8afc5bf4e988b34de5d1c18afb8e476aeb1574700a9e095979d1ae103a943c38bcbeed07deaf7c0c217bcd1b5128a66361056f4f9bbae1e247bef1f1af4b76991d09d8bebbe2058c3bade46c6900714c49b10b006d3ac57e307f8fe8e66f5f132443cba411bed4409d0e940883841c881dbee42cff8c288fac99e460807e6a395b13223260a46cbbbe14587a31421ca94575674fb32d8f8914949be2fe070c6e39ee78f43911337017359e3c02c8f612697b10c3389d6f0d110622facf87ca44394c3c540bb3cce04108f1c878674d65f2468d31e06a4b8e1a54f612658f383de1a2e8fc48daad9ec3f4ef99f2cb6716685e19165b02a98ea907a1c4606bbacdcb890b37711439fe189ff43b1263f7a6442860eaf9051d8145a4928b40cbe6764f651fa024ef06a0a7408c2647af53980e4be11a5acffbf868a264c1772e2fb9e5dd92c0d4c9a808f8ad23e6132c2f6e3f2f064ef0e1d9669a87851173e11b2b37490113f14272a9953c57f4f568df8b4f486cd34be94a5e43ca7005d7a32d2cbc3df7041ad81b05056494cd7ec3e881c73e7151cc24a3420cf1b1f912d2da40dd32c13ba1f8e5adb1bc76fa1febcee43f67b045124298b45e83b765b60ea70a22be0c053733870622aa5ae5493f1725005aa6178ec18f27a1071cf611a507eb2546440b4b065390f0c4dd298b4c45c6c28dcf63c20feb0e7ce25f04e63491564d41f5b84defffe084825a317681df3bee8798942cac50eb5aabda2c843bd7ee03578d86c06ed07756697e876b7e4806fcce9e335f154540c2ca2ad77c392024ffed981132e179c7fee0a6b60a9014ba65d94ccbb9e93ca13dd3cd905eab1e7d9b8a91c226165054e69e6f27b475d9c8c21e30b7cd86ab7f344f3ee17c10275a5ea4f7240a4bf89095f92466f98debb49a23c6a22a7c165d3ea30b3584e6df6dc1c354b16010d72d856782fe5a46def046808af5213801adc5559f16d9bdbb0a5d7c26f4b7f3706e4d8ff748574f382e5f9b0a3b6258f1f360fd87001b032ec29a15ea58826258e556c8fdff60f56ba15df9a0ef6e4d6bc08a013f8ba935cf28f0571b675ffc051539b9036e17d80e0bca230b8ba593e387a8e7451404e3f0a0088636bb911ee9905eb6a42edc7573b01c8d968a98aadddb66361423ce9c57ca4b49d8afd6598ac93e686cbc3f4c5150ddbfce86b810cf1e1a64495566ad58fa21085dbe801a7d326144a990a0cb1b4086303fea94644bd26e0841035db568d2324842823ef0156e6fc1f736b18026119e655730bdf3b89ab98897c824332bc4e7903375537907dfa266e228e1fa26468ee5a0e3856db9d9856bba0e4ab50654c9668d127df3a908a1a9d6f1a2978051e027a99d9b30b4016a38246041a98cf44031cbe41f1e9d6c061161fb83f6c8c63ab1dda95fcb2bb4d0546348998f2445f4988c64a748498c2823ffd0f6766405e6fab9b153bba5664066f331c2e460ac5ef13b1eb71f31eb80582d0c8ab4e6b38d98ca200770a59832e650b65e27c6a9d7d2446cbef1eb0cb73465f8a130c53186e28b7ffb98a0cd40490840bbe7cac0f7c254e93f6ed962252f273fea6894027b8e8a4ba0822b77c105966b7ca2e1845737d92ea8f4817e72df0d4cb6cab7c8d3e3230d86cbaa1a6da2678100d7bf664ea94d779c0177d3f89a74a9a6d5b4e71886f2202ed3a1378eb6083bf8f498d9769d2e8e793420e54f07f9d13b282fdfb1f0843df948a551aca704f6b58822604799f8cdd10b1134ee9e094dd4206d2558a635b186893afb5ffbca4bd710c09d3a1638a033e4cd355fd32f9a125d115a451ea3254713b697113ae4a5de1d17e2d6a86ab0025fc988fb2dd920664c90e13fd048f3c +Output = 1988faea94a568f809c8ac42c459a624 + +Len = 124376 +Msg = 0bad26882e4c755da92b289744c3631c5ad27e30305dfd9885f1c2ff6a2f819a548875087044517c36c97a1d411a73ad5e9e9869e32310314222fde9dd44f51f1c26b6eebd5915226cae389c94b005f97471da6e758a7ff6bb5d59b0fa9de0828b115303bf94aa987361ccdde48d0246c5d5ab068f9a322f192a3e1b6841280cc8d0b20f1bfcf626726a9ca5daba50dd795173f8d95c1124831114f4d038b702fceb3dda7c9ae213915212bf1e3ed906b76e9b0dfad7051d229b4301d98b73af4eea5a2b887456a9fa9f94f257218308a7b2890d9b13f4611d4f330b2c41465ae75673cbe7953b2ed2dc8c052d6c382d72a7a6c06319c8399db64cd97062174aeeb7ef83420277eb448e61c14a26dfbb40d55aedfbf067edca56f7354ef7cdc88c93361941c4f428753f7bee535760fb38c30e5e0aa0bbc5cbba9ae56e07521ce974b0558be4982d90764254f307a33583f928d93932aa08c9679fb2779a8d8e2ce1c501c96a4d41bbbc1ebad03f8fb148ff122730ad1e00ebe76c6412b866667e63dde3a25cfaad1e9877e992060eb6b05e32109619fef35ac06bc3e66ac5eb068160c5bfc487bae392b5aae265088de39df25b137f322a3d7d02969cb79266edc3b66dc7a9dbad2f3240c36863637f0844b9d251e6a1edbda39ba7dba8b51f5ab147a36314e0d12d0180fccb0808d248dbee3bf556358402bc9dbc4c44175e76d47b313b0c7d6d0286de1fb35cdfcecaebfb5faad7d5363350709e96939e6b68b3bbdef6999ac8d949c0f2ca68d0bdb7fb47061672694c79e57c15629d338d59d66d713dc3202bd8d38f3fb533c4e536943af7e12eda0efb0528e9586bbf0e71c6fbb3b793f5de27abb4cc1fc5a190703d3cfcb4140ec4e237dee11f042834d70acb6c0d100229ef599561ae2751048c7eb5db372aeeb6550406c660705848b42a4763e6432f5458669cc80a60ba89b3df0d5d117a622c7df20660c2b835912fafd562eb3265a6895930c8dc78c6690de9ac4aea0c536d818b4777eee3a9597120df2fc4e78a68abbab828cc785ceac123fb6a6ce6a7c28a5731d38bf99be6a205cc93186a87e3e5129eb181676356f81660853d124873c0dd2d3b4203f282e8e704568fc1455c60e8492ba44dc5f3d948446205981cc84aa5a179bb0798736e4cef40d2f6ab1e43c4215edc33690a8d4310ca6d7e0d085137f6539d1074015abff5198911a070b72e8e11d22037e23b8f2a851cce027dfc1c959291236e76d5c57ea85c180e99e4aff80e2e1c17c50cb2fc5bbc90e26d74dbe4fe3e4a6e1806e8f2b6f115dce2f1cec71b972ff1f92836ec14f2ca9721e0fc4d5e4d8c5c3116afb90bf30ff29307146301b562adc7b6a36477688608e16907377b65f220072ca23b6f080f38f44d08358731bc3377de7fcb4dc6cb1df537850a1e2f82a3e2714ae0aad81c964cec32a377b3456b51ca54895eb3a2bea471fe2d0d5246cb0c0d2e11830c3ef4e50b1a1698e2063e9d9fa90672d811d33740f80a11774681cc27d734c44c7d3a05d349f7b1670692a28807a951dd2344f6cbfd08f14689ae69e7cbb3333fe250f56c46ac8be94e51a9abf5dcc269ddf9293b948f776617382c7694f4998e741efdfd999fee11e461fa30fb078f2449db18b746076980f8095dfcba61bde13c8c64aecb36a187d2acdd40a1907eb86ed00b6899d8903b350744a0c36069de408374a963db6ef220189a0370e058ca54c14975176bb440d41c288b395b63308ae97313e9f51bfbd48f78a0ef5fe40504971b0748269d36e02f53e5a3b9747d22a8aa17e5ec7149f8f8c03fa775ec0e8538c946b37212c65e270bd58ae2646e0ea661dae0273885933abb0a1e8b3690df8e9b59e0b8dc9858ee9983753efbaa58cde08762103856ae3fae27de078c311b80d869575ec353d56b4518ec3501da08036e44f10e386550eee4be6f53b49940f5ca9da1ce8fa0de8656bc772f3da52432543917890259812fa4f857d5767156d7b71e456e08267a2716969f9478b4b641db905be95cdb49ea35fc20f79c61660de813cba8f68eb136cbcfebcc7aaec518486e45970f93b107e0f35120ec10767fa5a5bce3207f8b9bbe8ee43f0b3c5a9fe6fd5ef9e328c06fed0573b73027911536fc9e864fa2113e37fc1055f3067cbefc652d789f437f08a4590d262e4dbcb7e23ffcfb4b9f4a087d41f977f9b3335dd1ce3b7d0d8bf4bb4c18a7d4af2b014df2975ba9dc1d3fdfda84270be7eb8764ae5f0e6ef3a929712f69ca297a6967bfae2b45f8cac4f6ad94ed217b835881bbdb4030b41a4426109375fc8d59aef6f55e244150dc3d7958f4a66f2d96a0284aa09a29b84a05f181c164c86812a2b7d74aa9d819db30d0c942d4998be76b85fa45957fe14a9394ad015db3226eeeb14ebae390bb904401e9c6a227fb40629eb11158bc96e498177b9b884723353aed40f5f9f49ec022169fc836a2e7672c7d584d0c6741deb980d2d60e0bd42f2d71974414892b367216d28fb892b625722ad842d8094901a0d99cfb17879b23704739ef5cd9c8b9db0a6c64517dd042dcab1735e5291615f52ac052ca44e1dbab77103ef86bde1005f9548f28ed9d86110aff715a4f10e25f79262350c90f1d8507027811c7d60499eb7258676985b9ba4f773d60049f2f87d0b6b6d19e8bb2a601f9e7ce76165d3fe9ae06337af0a27e8066e01fce2bc615365852744cbf62b76cdcd158ff08e39ef9f0e3b7a6460a06a7b6a3be381c6db0b4f441615a11f46051937fd6ea135d5f2620351878efb9facb4ece66c7daed005072c9c150eb3248b7053971c09e95297526458175537701f516a93e05cd0eae14ba33bcb7b4e218a61c4751071351a5f0ea5b1827da0cc32cf67b6f795d976208b4c77916d4cd7727bff09d4ad95a7b9e55bf0515ed3fe978d68e20abf352c33349cc21f5b3bb0e40d67d7e0e587852874db871c7f2d91be19e287a24f5057a9d5f8cdbdcb97485fb4a361bddf872d2b4bb8f84c653a300703692a56bcd792f4edf4dd0544ebf836001639d3e2112a42c888d65997662412c8614c808e176894fb25827e4da65b076e44c2bba3b1e70f79af73dc8c5e1851e77f50b849bc430a7bef50915c52fb545db39eed8ae5fdd1edb1833dca6e7754cef7f9766622acd5eed6b9e6e77e23ad5cf710d20e29d94a83237705c833bb9c0d7f894369d71087d26040d775849e62fa63db11a40a03d9d869b1bd0c3a6f88218a92a7db661880a50067fb8d12b625a4ae5024f2e2f7f06c18d5dc0cef0da9898da7fc114c2f61055ba1bba484f555ea1b12746151402eaca555eb50ce1090c41d3be8d1f5cf9941c680a04267e684495e849875e156f51893b4537e5402ae6fadb0d663ff73aa08d58731ed48043130dd48f9b6ffb6e43e6873bccc1d7e82caa3b94d6dc5a603b90d17f91b81d8dd3f0bb2209b28da6c9c98067fe086ce8e83b3c7d645e4e146e0d1d56e43c1def8c28e629598d95c0ea1a6ff25422c8d5219424ed992d9bfe40ec821f9fc74710479c9dcd146ad963afc19c035677b355e09d3b0efbb109c5b91549034bc064990c342836c1b023381ea64fc38d6ff5102c3ecb0814535f12e171b9296f913c31e1d8ce8be8c739e742b2d059807355b00d5f1a036c79678cc1e61cb993a19781d070d8f51117e31720cb66eeb8e99cda8be87126898de7dc605db8dd3f583d30e0e48e9bc508eb70c2da5baabb3b9238afc11899f5f5a8a9c6bfd7bbfc1ef6e7191c38a68b02189c2fc8f5b413cfff7280d35785381b729cfcf2bf7b515b894e84011e3dec6d31406f7b7d35470fab3006047612d8650d5d09e0b846c777bf0c287988896fb1ff078bdd3a54e0625e194a3dbc675f3d4093f56f0c44e5da60ca0e6dbdb19c364a968ad5763a652fdfd5536773ad550ad4e6c989019c33ed342f3cc606defb64d998744a770e5ee0f70d2a68e10b403392008c15e177391602e4bc6aab3815a476b3512687f954dc6e69d52a4eaaaa223f8646fbf2fc80be94909643f4e6715ce78f2a50ec23ce8b0c905e9304b11a3ea623ff237d548f4eb0dcd038281197f6f5d506b0eeb35455982bcc8d4a4919ef8e7dc075c9a6ee2c1f70743091e010d8682dee2ed7d26ea2dce128ff679a2e9dbe3c90d9201b26c2a8f38915757c636c083ee9b2eda7a5da9e5b79d0a4cbe1b0ff097837c8dbbe77150e18ce1d0c18189db1ff247a5b8065a740c7ea4905ba90198c7f770a0d3eb22d682843d1b9b846ee2d386cc41588abbf391b349e6f42a6d46cad812ed92eddb7aac15cd9abca5dc45b9d7214fe4315adee7c96ea320058f8510a3d7c68175f7c7beb017c09d6c5e7e3351fb13e3b093b06f2f877757c0f4ce59f933ce281a04484af1a03fb64e51f6c0959e5fcf8f02f2a85428b613f3499cd736cb56ff208d66c148fb6abfd27349e1f09f660003352013e5c6f1ed02da7b48eae3035f4fffcdc2348dd3e28f2ed2381182d93dd386c34242f6bd3b7643e40f943f55f0eed7c7ce32dc0df6eaf13a0376cd2bd1769456a3fa1c6a87d3f2619bb114c13c93a1ff35c27a7b456c46ec047ef2d05342da44c989bcac6a92826e8dc027d79ab4eadea961cd9e5689ac628bb878594beeb53813606bd55c386085565fdcfbb3e91ee089af69f9b2c99e3839a1e24923d0d18b222c8e87c54c192075de98cfe0a6caaf66f9b41fe2b298d77ed9b502637fabc8762cb9364e3418da7ccb0fa6d9645a85b1df50735ecb38bacbbe65278361a07a700f50635f86dc0dcbb39612d6a85b1e0adea3869f79da6cc0ce772b1c1d5c0bb033088161baff54f306c0b690e958d2d26641ec1d551a67ce986f7f96193b16a7463622fd56ef2a836313f470bdb04e9904aff660d35536658ab2b779cbca05d5a76dda9ad13808ed27044efe7c1ddbcf384247f27b37432643e5454fdb8563cbd503fac2c0467a90e11638a2daee25058f9d535ac32d3881227bbb709ef9baea6dbd05fd8aa6fa2f1fce440620ad94ac6935ab0231a360e6c4ea8c94aca365b1bfedaeb3c6d6021831a0f38103c8b554639fa1714d2666f799b62b247aff1ec27a1a378ddb601cdcd512b9bbeaec017dfd3fe9207c42b5141f7339988079209cfac742d45eb1b4fd68a8290f5c74038994aae4b85574c5dcd4861a6963be2591d089532fb76764ea7ae5a403cefd2617c84526715f3933a24783503f8b1a985189b4eb087bdda7346a3fcd31b8e403a916a32114000c6904e6df7d536d3af34c84ee7cf722a0f66bd53b0701a0c506adfe4966f8de6ae095411ef47d908bb0f360aa7b64223dcce14a4be3fc2d2cb9a6edbc5a9840e134b3d4a657e68b797be69b5d88e82120b5451806d699a467871473508e8addebdfe1102a0a56b4a09e86938c07eb75e629f7ece06162bd1219871dca75491bf73cbd920e9e26a28da353f7ca7af6b6faa58a276d16dfbdc8cb6f4b6ea14b71aff5a9c8c885deeb9d24ff268d74825adaa26c65f169794cd8274d9ad1851a7552752622ec5407e65b8db8ae397726e802cb2f1731dbc7e0dcb7a27a87b32eadab45b33eee7b0a394568410d72e55cd50f6a32b992d023f052f6fe68e59e0070f6d1f18b438d7e4ae72ef8b2be518ca85d2a27cb99094611c76fb1f49fb82865e1c431868feddc91bd5c703c704e4ed878657edbc8c986cb967c7d9c0a941f02e87723cf282eada4347b28193d3e0bfbeda6985886a37e646cc7b1cdbab45cce677528b3a0c24a08f8f580b779935c79398814d067298592a6bbff08248b5a2f0b48b0d28e4b6a2657763ac5ba00a8d6c86464b1eebe44ccd0c395e9dc9b9fbb306c6caa551c6682ec57869272e889ab26e6189b91f42489779946d14767b5d9735abcb979c7d7b5342414cc38cd675ce16790fbd54dbd4f0797626cf9720530408e117e80e02623ab6665c17021ea6264637e314d3d67840d3888fb774d362624911b67eed7ea54de98fa10bd785b624c8430fa4e45cbcef5071b3b255ba1419bee2b1438118cdf3a263248855352c2f63449b57ce952965b8d997a981fdf09130fd0f1d14f96193ab8aec74c25690aedee28d13dba8460ad36a458541c57e336609d8f6ec48e997caad01b9670f6b0b02c6efc251be9b4768cac42cdd3a47652aaf14b5522eee66c8746c3d8c8944ad9798c84b79feb18241a11c889d83d2904297cc428ed3f7686c8634ea79eca3fc65ff21969b910f2424985680c8c9a71d77680885e85e8c05808c61a6755f106033a4018bff9e3e96da5678fba8334f7291cace66a8f735a5ca2dfc5bc90a1441ca2f7012ec4ec43f2b848de383ea51f9586728cd15c87bb014120cf0be163607f3477713acc92b86deca9a1fa215351994e41da278f6e58e24e2994d9aabff1a74941c768536fad5bdcfa9974ddd84390cecb5cd19acfca7c246ac5aa5f0f6e315c06923c0bdba938e3cc133cc6ac5c38925f93640104664b8e64bff290ea3c8a0706602a488f2271ab8ebdb66e3801ed337f0c5354a4d2bcd6981246c2d8e32db4e1afc7bbc2afb29ec2e7764703eb2b2cba3633f839965c87853b1b773408a90028df78b84eb76838092ef0e3b85e7ee8918f6a8e3b07b72bacb8e520b40368534c7dc1e06bb00ef1b1f2bac69e0254e185967b6911cd393d8f0a3851b16a0838bd1947a6a25013665de138625d4d49b216e9fb2b665d7f379cad898cc4b2e51afb206e7d9aee12008d690e495eb5c9d4b5d85e47911ee59466216d245664ab9497219af7be00975a90f880de1ac251c3f30009303aa7f8ee6bf437dafef5b81011ab7197742dffdf392e54a329f97e0a4effa087bb8f45b02e949df316ec9727eb0c76cf55ccc808b668de3b04d1bb023a05a8c0ac1b48642e90e40f46cfb54693f30f11fb739c51c936a20823d1756644d0865d84f27d74dc67cea1f715bef69ccdcf01bda8c954c226248d1f7f5980efdebdb0ce9b518cc887a24db03500a2761b2b0114d2fb8c31a5fa5c4041b3fc9b9ed38cf18c60f6638ef3550ac426f4a059a7b2a9988f62a83487d84ebf3133f88f5c24862c285c4ddc566a5f399e47bc17c978d450117296605193834e3db1572ecc3a05211438e7fe3ff0360be32629c404d64d900e267ca7dc109685561f67fb881fe6d1b0e6b263148917c1721a69ecfe5d4deef208db79abd1f0eb06b88b842458b3d49b103db978878ce0d78f0cf0fa707db359942354354a1ae5cc2732472566e4901f2ffa5fd09dfdf0901e738e9db25583a152f4d60cfb7d1c12e60cb31fed019ac9b078d4b11ef35718234e045c855dd665cfc06da768bfe4776f7b66583d936b372c29a69e9cf5aaec47ecf0cb7c0f321355069979142bd5664dfecf72eb0277c40d9d43fd9a9d6298f6e0e24f08e21d36ad37c8068079656bec175d0477e7471ccf343b628a22f49aaaca477bbe6f0e4c12e497d430012af4d445ad6166aa6f9e0b9f0b420e4ef75dfdf99ec60f0e7bc0309d8776955b8c9d911a2f3e29d447b42d3e22207979d17f4aff66a26d68ec3f80b2f54232f100c2acf550ef53fd661bbe821e926e2c296b2c6c2db57bd6d6267dd58feb9b6a3e107277c0f9577e41213a0b6efc5eee55ae1c9052639cf0dff19275b5b7311f8ae39c11edd0b6df7f612a5a81e2ce38ecb4963c7331534f504d7903e55986998dc894443629f4a9675809cff5da2e84651b13a11ea3214add767c00bd372e509d4bc59f38598364af72430c49370259354e3f6ea33da96bee29160cabc47aed5fd9da7372e40589ae4c707feaadfc3003ca5405bf653e2af8b1f1881fa60eb83bef3d71645ddd90ea431c9b58935ea1271c0c06b1be621083cd78f3a7405c59c81859099b3b8e02e9f2a1ff118bac1535bfc1d228adb7b525c836efc127e64a7ad1c7bc75e1996833e7ab1bb3fb8714a6220ff882b7a171353e95cd0bc12ef2caa803fa82f472394e7e8261ae675217feff610a6e60a1ed688d202bc5a0a8eb4df7985440e8caee9033e2617f53afa7b6844f583a4d5b720650507cbd4ae6bc6b6cff5a4e42e5f0bfb425bb9544f24c537d359274b210b7b514c15021246abea964936cf97765f8135bd6a08ecfcc6e5c26be29bc537426eb46dd16bfd1a79a8e7b1f1cd11acd6d31b76fe0ca389096473d338e6f85f8382f731e50d7b72fb8912cdcda73818ec8a1437bdce623d14c9b1d50410cee1f63d8060f9f0759559147d667364f602c72d87c64f551262109ce337ee222e04c42ab8c2b41dd4ccbcd291438a0c32b19244deec5da9993e246673c29d23ff1115ce071ebf9b7e5f4c49b62ebba8d46e735880718fd3e11979adc83eba1b2b5010b3d63ec1725d96300355edae3ec38192f0d51d8cdad03d36fc4a73ec139909de608be863ab58b89188d4490ad9e932189445b8fdc650f184d86129dc113184a65d90e54d4d560f965e9d0a787e2dc92dcc380989a0487c8bcb75273220db0891334bfd266041e1680f16f89f37778df82116d9d96f9f27725cee3695457fdfc76926f797ed00772e23a9da280bafc7a21a47f0943b3f3a6214341ead8a054f6f87879d47fa7b191120bd7aba03bebf52403316630c0ffd8279afa723f655a1b215d8b5df929a0f3990b99efe258abd31194313eeebf7b7fb15c8989f91581db79c800806ba45a0cdfa070f9b7bfc09672fddaedcdfdfb2f470e5bbc864f40aa7a4e75e657c6415f5e70e953a0dfcea1b0a6bb0d6f1af34961070d6477612b2a9b3757fa3dfdfb6dbde36f783e173aa763053e283284f86087fcfb2c3d09b5be653923269eb9ecba467e7ff1d01478f9f2bff098c8ca8f073456c17e578754e850ba6405fa9899c7b0a8973b17562e2be83d5f09825a0b9ffe8adcd55788ad3af6319722c2089718650841ce643aaeafdbe3f5e50fc202bd3f2fc9bbad8c0318ce4538e79598491edc041c2657509f18266a31a5b18118c18ebc04abd9e01b24315bd5ced5a6345d9e3262dd613663d75026bed63815925f55960a205d4349cfd7fbda6312d0fd5723f9c24df23a817ff1bfe9f0d40e23e93c6466b3b814138e1a8bc32ecda6f89df5e0c712bafb9c74838c4f8035c921f1ab9d96d06ae0fce181a23c9c7676aa849c8dcda60be809577e125c0eddd530fb1bb81700f6288a6c95d58336adeea7cd70376282759e5c9b49f89be72cc0c588053a63bfda593071df7c5387c46d64bb29940232787d0aa29f858bb3b30a540b009b097797f183b3c72d0a0a6a8155e0112a49209502981fb76fa7ff01105106965084c2bf900884d56e3328f0b91fdedf4083e74bcd89655a1d8d23877160fd2f01422ba1a3137782965b7df7731709ec9d6f011d4c6315d00587cbb6bbf8714313de1cfeb948fe775bef840f5ddfe3b18756e889fd99a3b1be34422f4e8be56b0eb50117211dabfc155ba588b7df0ec6a4d808025fa18187ae2f3151b79fdc1f6873829b9915e2b9694c8cf44fa8edb46c6f0a16f12f51ca6bb513be75b8c7d8a7761bec8fa65517be2e94e253a202d344885948407776e26d8263d6074b3b1f4259379a5363559f8a7e47d3826ee0dbc3b06016dc3e737829f3ac28eadba86bdf796025a2b166c954c820384a640a167073c8f302c8d9e437a55737aefe8236c573100efc352b2db378b8911a35d11bc14efe7d72cb0ccf0d03ef82b2087b089ac2e1b6ae4305251d1c7b6e8038e8644cbe6b169aa99e81108bef8a929dd579d5e53fcd578f7748082fd3310b01b288592eb94ef8d911b2e8c9d1cfdf3333e2fd5694b3766f042eeb3f7a791904c1e09d2c43870bfde8dd0c3a30b2e65d08dc77837af999663e125ca7bbb748d689158f43a46f427c8657e15976d4466fe6dedb187d102f0977cad315217c08eb9a8f85e156684ad99ccc1ea43ec48e003062ae81f597a5cd6390c4e44627d7a858c737a1d3f263997e920aa6d2e41ba287f0583c8ee0ac26640cc8b1844b33b156451af1a7ae4b30ce523bddedb37dcb50007eb4a38b80a90ba744f98676bb8b1591864d3bec6033ee7528c5e9c322ef2b3b6886de18e1c9ccf8d018a70add9a193520311b4d3127618367db5193b9726be9dc2f98e94e0d2a69e0bb70a7f862c3986f39c0413c6fb9f56f9aaf959029b494102b5e9d13f7a682fd4e7dbeba79b733d9c3c558e0817a53a6906e49554977d2cae6a9a4d1fdb3cc9c4e18bf824366bfe66b94f4dc110526b339184f6766381e530e049106a3e4bf3436fc3aee5454651b9da9b57d72fcd70c1137e8450477ef4eedf9d2306ebbd35b9572b16d3102fbefd68e1b434bc3fd179547d47ca8a9ce2522f3e8ddd2ab9178e626a37d4df4cce9a2cc86dbeffcf17c51b2748cd760235c297d556d54367222a58291ad1f9c508f8ebf9895f3fa6c90c32248e3f51d978a8e10a87d87df0ddf6010fc5b3a7c3f57f701c10fec6eb6fb55f1d210a6448306bd38426cd227cd05825c54260316e1b9882d80b82dac7922a6bba0a14f778e77336ec3e9b783284b98bf299c2dfed04a9e8d581d5c462b9d21ea2504752912428d1e9d42cc83b8082fc3fd0c0f869381c6bbc7adecce36c153f7efb89bcba70f26e24f26759bf4c194053f141c6093d57d335fe853973335b98f514c47f1b5239d3449f3475e571e81fd8032f8ff69dc4e8e716b25539970cefb0a1dfe1dd5265c9f2e47b62d5765561730f719c57e0c9717bc94d665e1f900d56adc22b28f8de18d6c82469b8e3cacdce1cef35558cd03898203eb5095450ba903d55a423cd0c88975318d2b641ae2c913291a2182b4003e7216d8a63bcb2bd065b8096f75858e1de8d3de5f617694664593f2ac744819b10d6c32d94e11fe05f0e2b47cb2128ea527f7ceaa1ed63e3ed9ae1168a60fbc8ba4726e5c34b00e9445f3e00c8b1e56c9c30be28de4c03cbd7fc5fae8b0616518d7b7ffb1880bba15c54a109168ff83063a8e9e8d6bab3c5c888a13aefbe3a00337ab7b7bc0abad050f83caadc43c7fb50f0e672b0c1db9b68458f02e111cf9b514cb461d771633ec750f72b4356bc980b0f9e0e95e9e113613b124e87853deb92fa6041903b20b26a66bbd3724f3ecd3b0df804adb92ef65872106509a4ecb89b8aa29f10f258f6e1416eec91b6b46488f3db9b1fb92a0bf8f3729090f644ca170761c27f1d72d0d3e9fabcca1488239cc8311c14713d1ce6c521174402aee8ac7687f30445d809e867458c43f021d31c94e1cfb36ad0efcdf004424c5090dc02e1fb7ac7f1f169c9c239a324d2e73cb35fd3fc252b494e537d0258d068536cc24fa59ff1a925b71e02bd4b964242250732efeb913c12ff207305a3fad3606194c96daaaaf6dcbd8e30b8cac1c99a57c0141de4202691cadddaf469f0181e821f563be2195e7e41c2521469ccee579b870e452efa70307932bab6f3dabff4990cfef790676b730c6273b870df3ae1b704274f1246a256d2c61c3589e1504c6c02c989fcbba524e615988c272434a173de6723d82d456a9f420758732d548dc5aac0d96e3e93f79683cb78d5c064fd99bdd6a9c8d6e0d6a64d8407f8e5531e6aacead02e18bd55e6551364c4de525eef4b7dca2969fb01b0909a2a6131d36923af50548370aba79c3379383aa4872d3f2d636c45101e5384b351aaf63a5ed5ba5bf84eb76ee65381c403dc803a8ad04f0e907862f1d234ec5db16dff287bcaf55aeca7103cf5c35db1bb38dec9e3b1e7940dd7c9349e0cae36c35cc423b3b09e513445d7ff605df8a1a9359b791b36d167e16fc2020b4393e78e5f8d528cf07bebd61253e2b08b193dd4b90171b9c9d430142a9483a04163181a5fa1dd90f055cedcf5ce0a6cb48a2d44ad56da45d1b797afef89dee56fe670704249ed4719f3a24dd58ea21c3f111801fae3db47b64343b9a5e73c6233e39897f2cdaa38d31f10329cdcd0489677a71486f09d48df40dd3a36f7c4a0f624389755753beb879fbf923100bc79208381843bc548d0b6760c3b89019f26216ff7795588c8e89b3c59757c42903645ff4e5900a90365a2ac79c2864df47c1a8d7d44d9507bb879be83e465ea71086db1b89bbce6f6910bacccda1522ec2b4b467300c8137ae287ede7e5d43f89760063655359c24adb593cac881ecaafba1a6181b60c1aedee2f912d83b18a000866dbfd89be8627cbf525c1d6898b64b1f1a84e6d8cadfd64d871fdc3e413fe4608e22943d379b4ea452eb4cb3eae339937e1832d3014d1cde956fdaf5522aab94c3f918b80e51abfb2212d6f267a45f854d5c7fee09693b1cc08d84eedff2ce89bbcdc68ad1080d3a5c5d3cb2739c259b04cc3e9847c6896e84f34a892f2ad5b5e1fb2e342430fac84e14fe62a31d241b30e1ff5040f7a06a5f3bac62d42559bfb31bd0227c6efd4b83e48c918ac9b3ac5e2822b4894f1886bbb11afa7384b2fdcbaa2cf45e147d3aaa4677ad7f048cb4e9194913956f5a5a270e16be61cb89f67820c5282dc3f2fc1da54035145ff7db6e4fe32bd9cace3b2dad403d436c3740650a192c7fe017264aab66b6cf5e8d665a06813bdad41cd04c1907e58cd953520ed0997fd91b223fdda36bb12472d60c390793e22d2dae8feedbde4592a556a1c22ed690adb7dcbf3337bfa2a82f3a3397bdabad253a0be0926043ec1962c9c64b5f511d82588f1ae7d2e309cef65262d28338fb778bad68e330d93775742525f6ec8964db6fb1d9680f66650d6a87108602bc6b88950b8f3dd7feb63b5be1475170f0053d8ffd813037ca32d7fe70c33eb6a65bccd8ceda2ec024e6dfac86a0e767157d1d1bca88dd067ef1d31488014919977ad8d94fc012840c57d6c8add925597a4aeea59186cad60520835f353151a60017211906d7a58de577b5529f4697a28efd46bfead18630fd5d4d411109d4d660df3a1a9c97346870d4ffbd038fcadcd3e2a9cd5f1f9ba1b7f6a53ca3c13f354a21885069656b8e1ede1a7a52fb1b82e9b98c4036b77792d59b2fd4561e1d4d1c9c904d15f8a77940219a0d063f162f20d062db3a3fb6aec699419ab066eb88689ee672fa9774b4951e0307a5c2572c29d5c1d0b22eb5301b9f9ee23b422671aea6ff74afe85fba8e41c9dcba0b3b1455182dd336fb1fd1351c7c5d6f265a836f434f94ae51c5158c2b730eab905e7243361b55412b330cb37e8e6ec489f4582b025b857e7a41302f39731002f81db064bdfec96945bb3d17542998c3e3804a5252b7b978b850a4d80a6e834889157949fe5cc207c1050cc13bf26de5d98ae485b2c89355927fee270ca9caf4e9c21763a5c9b1b5239cd641746d40b2c280b125b112b57d9f3b768cbed9798080a0253212aa2ae9f40f3428bbeed3b344ee2ac2cc3a926944ffc8899f61f183f42c2d35e392902e98c8a0e7611b795fb73fcbdd6294bc911a496eae3cd7d577aae299ff76f783ebb855a6fe1267b420b0022ee622a5968d85b4e35b15af97c41b5ff5ff7b6d68b9a932a0ed3e5806aec5b1ae7d7b01a2d72daea110985dab01cbf0bba63f58d11101ec4935436103324eeac4f3da2d73e668b3228f5366a1a943416594514e3f7a48eeea56c0171c83d20a2cf9de7d8c33cd5f01f7c55efe3307de8e4a4fa2166df4b71ec242eec4fbf58c30efe6965e57d1feaa1a6cab2327900490289918e8547bd151283a5c9f13000d6b5680fc6cbb0d3e9547c7dfb30f626015bfbc0747d664da1bc924f50d51a7fa46be3c1429f5d58b5e0055612042f57d798026f1975c461df945812c924043df5d9786722860c1616ee4a3e3ed8acfc9561a686c696e7639542ddd77b0577a290a62eeaafaa4675d426511bc8d1f67b015df0eec30859b98c6e2987afa1fa163f7b0e302e3392ddb62f24d7f819943ee435e78d58f2a2cd8cbf4508ad1f1501c8001e22ea4979b686b2cb5816d80eab0591944ccd7c48055ddd3844bda850cbf4dc68a82a1282680a564c886a35ed2c2e17fd1369d0d5cbc6710a21276434dc8bb8f4ab35b9355b0bc4b14d3c59b72825722ccb7613d1869023c389327a489c553bc81154641af750a30291d36cf707b348295a3a70c29d839a6c63271314741a0eeec4cf3cbaa5a39c453b78953230a042faaafe0d327a677f0d974e5621caa1d86eaaee689ccbca57843373fcf20db407a9a20912a8840479ac0cef6cf607b3424eadf91048d38e7bc6610ccabe05b7403e29a5a8ad23223153ac527c1c9418f498b4375e4723b7b014ad8b271f807094bf2918f7c8bf884e095ebfaf19d7989554a6f17820250da075ff373a9ce6a8ac3689ab2681c0ff79d70a7d2d773afacd886d6f865b3f58f1f13f592cbda0272faa31a65d608f4f5ac398d51dbd2408463ef0f9b181db5f4b905539240a14b5c6240851c6ee924098d8f10fa774fd88a57d17d7201960eb575b291f4b0cab1a19abf8f386b23299dc1bfb73f5232c43954eca50fdab36c4bc59a353c94acd1dcf47e9d6c834d724cd969f482c521b01bcb7f1ad6dbfc5b22392ac1cc54ce3889000c140b2fdeaa71450c6d8778a318ac2c374379ade747d340f2ac4679b532106df697a6c94d1eb58515669fc51d6a550773b33ac8fadec96d70791d9be87b1d7ebc9cc1f81f6b842a23944e332721c0edd2feccb5bd8c8f2f229cc403de5ffab2dc97df34dbfd67a4a55b155b26db5a3fc36a91dc95bd9ef697abcc7a1d7d52bab52d70f7f960ca75194f77a5b3039b8dc39b1cd619fe73643e0ab9371c4f9fe6f4a209c9fe22371c0dc6079b4216ff486214d01ab0cba6e8845dfcf351434cd819ba1c1360be4829e17327a45a9210001d4c5e2300b19404190a1a1762e4e40e72ba2a7cb79147ff32cb6a797311583553c61977702ce5475a93931ba7c0ffeabe46b75e6937e13c7033426311f14268b406948085a9f512c78efa88c653fb0d5ac43540fc3e9e42384f41f9bdce691aac7241f6c7c55e06ee40b2e7151a5fd6b6d746ccf711c9a0e973dbb5ed1536bbabbdb412aceb8a844d7d4eaf3a80a8e770e44e4ad03e0de912459210165235cc403d6d9caba8f52b539930599d3360a0077fce532e2fd58b3138e7b0cff1d0ece875d0dd5a7a485caf091a7eb38f11a0f90e396e4763baf7c4c25ee08090b26e32fb805d2fdbdea8ae513f672400366ab4143204e27628bf4b765a47ceab34f08e32eea4923a328fd00641db5533395dc7262aaf55e3996243d98c5f00add2f478b08e4c2831ee82b2acb423dda4a50aa0b8a5d6381897513c40478ecd1536ea70f8f1ac684f5d21d498f8e903b113e1ef401611ffa1ad3c935f3e6f9a7dcb5315708b5dc8ef28dda46f92838e04d083f150fddb12fb4564f79ab379ef43faceb4bbedc8d09dbc26a0a5138bd2fc9551656fef9a28a1fa6ac767592642045fadfd4f8b8605d7918d67cdfe8a5924ccea9a014df7871226ce816981fd293b64715d8fd71ddf394382583ea5e7a709d1b02d99bb4be4e87500c405e0870b55a3d9340162e8c31f4c95f09bcc2c33185e329ebd9a3f98814f91fdc0d72c6eff88263f58b17f68060748df59b3d093cccce24bc17d1b387921029d1ee875da75abe8ddea456a249a1e1b52fd0f7d3fb3a86fd369c6973b3c83c3309496fbc46469a17e2a91018f27fb7e29ea217a9d596b0bc40b291c2748026436b66526b3585bd0bebe170e1e5c29f192c5bc51332aaf767c19f712732807664df8c57f3dbdfd170e0959b8488324064c0422b9a7a3c0008a3ac332a5591d39b4d04a6db9f1b7b4fa80dbc89459743ca429e6ec5161576a6cd21fc53457be5f29d1768abeb0365af2d91f97983b84f549bb8b91d6cfdff4a2746f72b6a065570b70ac5ec265d379856697adba95e0d08b1d83229e5bc43fb996249392dfacb1d8428e425b7f298130bdc6837215124f06d450171e919ecc10bbf1d05f41eee02eab8eede088a31263433eb1652593d14b7494f7de1dd9fa465a39918283b6726d2010a9f80edaadcbab72afea43e007a782a44d633d006ad8f57e5f93219dd92254c61f187e2aa3a83ad4e7a7fc7142c9631070349bac9e371232a307880f94cc9e11b5b8532d94a78607e0f4bbe2232fba6c18c8a63904ff44e90466438635ea8085f66e2a5e1138117e34770e9d1928dd199fa5d9302f7fe223ec25d08c2cfa90955980703679d8719a5a95610ca5636f9b8d32c11c7e578e55d2ccababfa8b32b267c5a1416f170afebbd66fdb586dd6845a25ea688214be0140d151401f0b0b8fa9744a093162621dd0c067739286a6469ec5b1aedb15d5b8ceca5df31af87f6f8732e6e89148fb7a51d9f45fe46c4364c3b8a359d9f989eec51e2e2f6ee202e49977e479ef495b968789a30ade7d526151655be41f3e3f05dc434e7f9b463a7148b9ef37abd1f6e51a65d00ee14847bed06237f80b3259b07ce03b4e10938ab82d8f43ac677141f852e527d68d4b97ffb925d3e03e948e511f6b71357f58780bb05eae42a2a5e142f98e06ec42f5c78684269c4719c3317a4c5b8c90381386fe69ae6b84ddfe495756d6e9da92d56af5b9eb0d973d5ce78e7c26fa18cb433c02c1f527fd89e8eea7f3466d0c0d78d6cfd2f9a44b19b0152037542629b9760bbb41d9501726d445a76752fd0b134eaf7757c90cfd2f6b4eb1f669ad3d730a7a8a71c1706c456ee2e82b93165234c5597ec0df8407feecf8d641ee0bee989f1ce2ca24056766074afca86d456be28b7958a6b3b605f8c3a7efa247ae978aa24766c3978b82f93be227767806d2bcff639761dc2f71bd7de060800d21c2d992ae88e6827f697f8b5d2b0e19d701249fccbd9abf4cd5ad8a16fb63b4e21b060e96cbbb8b5d657963f069e7e93281a9faf93da9e38a9c5956cff2e5c58bfa8074b4a1baf8a211776450569c5ca5decd8f9d9a27df8550318280095eb57bdbd9437c9d5d70e9e7e9eb018383eabd730fcc1e458d09b97bd69bbb81670b3e49811943212b8aa173518668733729c5d8d14effd252089389b8e0f70d674d3fce1854ccdf9d8c452e4ec519a84e806b9ab276a6c31f3290044910a6f007f21cd3ff946e2b3c1c61932205899502852b1333d1c79a3d4e5b6617996ffba17041e5b746ab967fb1632c7be62cbc2bbe60ecd5eec6ca4482424994f9a662cc6e4b8ddfea09a3e0c1e654ccd5979ff282c972093c28c5bd94f10951afded80132a646c9fd0cc607e447c695624eb32f78a16d5e38622f10ecc43fde2a9dcdb863ce8b060e298f4d9f23dc560ab6981b16a51935720768d6f048578b0857b67a8830c5348be4622a38f7209f3d63b14dd331203f679d058855f9dae8b79114c00679afa604d1e146683e1dc178da814034d1fcdc877787ad74655487b6de8b21751584faf7567efa93553e7d5b8f9a9ac204098d503b51aee1f73ee884946c073a710fa3d1f6bdef50f8fd2343f77fa5f143f0c2606d1605053c047bbf5749e9ed288a312347007d1785f443d0a6730a491e3d2c2661275874b04fc1b5aba75203b89f1379abf92c5d889e5f701147203fff392b10dc1811b6e07b4b05e5f6d7f49da8cb33ba0a85998d65e6a0dc5e905c638f3fce125ab9223901883eaadad4563451d8efd5a71161e0e579e14c1bd314e7a9eaacc881c76d469d09be7ea5ef9f3904cd0ca371483d3f9779cff51150fff803bc3b530fc4ee85883013b5fa7246084c082897db9291f5e676bb7bd192842147150836672a3c726d9bbd054b14d12e922ac22758a8e6b07cf13234df3037dfce8572072a6fcd99b7cd38c11a3fc718719547c67ac3c1dba559d2a49c8291a0149e3739cc1e1857e115059dda6bae5254e84819b4abb9f40a410b6f8c3207feb3cf9642cebda3699433b1e02e20dd68d684318588a9157616274aea30972168268a3db694b7051b2b79bc3c67e80ac85109a29e89448afe438d1f992c5a6458e76e8c09d0a2a3f9218782f72a398cfd6ee8f9d9191680d93cd30810d1d4576d60dd1fb0e4f9168010cdb4c4d78dfa748a92d5a9ca977db34ca982d5c39d61023d6647504432b34c63bcb01a126dc9da2ea79495103ff8090d612e5c642e17b3d79ab14c90e830cab4f5036b4d41717ae587d52f7c887646f9aa5919460ef1eec9daec1a4d71e5676ed72d3d0ab197e329c405ed71f98ef99bd591a0fba8763f8ea7465dcc6867bf0bf3ac13bd3693bf75dca533a31b989d5e836667c7931b1280a05e6ba0542e4e16dafe63d738fb4c544241b6626729aecc3455e26c4757145a2692e86b9daf8119fd92b20b3145363f9559ca4254b8aa7f58dea54c4dc09175da823880dd61e47fcc1782abc7f7f9b2365c03b56cdc1cc2716f34da1ede266e0cbaf0727bfc04d2c6eb6a5b6589f336a5d6d75e27fa82300e95f5a823164fad6dab94d2f1d45e9d8e8cbd7c9281df478448d98f1e9a576290d18c38f2ef79be5db28a04e7615e4a838a1091b7560a6f22207edaa94218b498a04d0f26e0410b5d8e649ab54980543651f82d7cad01183ffc3bc3607852b09690dc9d079f122efd8da8f703e361652772c8c23acd5fcd1e4a94dbdca371e11b11af554d528993be4ecbcc2bd57dd7c77b26d27a5d73184d8a1e76666a12c086a129da30c0f3d40030417cb5863246a6c986e0d3c3e7645e493d35962291d979ddf09e8a610d5a73d0ae7b397c2b1c35ec6d7fafa7294bc0f675abf4639b8655168814929922b179ae675a202dc4c305623f01865db53906105c2c09b38c61b8e954dee1ffd0539238109bf2219bf595a99008f07e27a69e2555383e88e0f605c4eb4000fb82cb5dfc1ea327ee2d1e5750f518768edd3f19b405731b5a25bddc47bffa7822d6832d78f62249e9d497dac6e29270e6624cd93ac14f18bde7239cd04770affc3805811d4b7bd0bb4f0c8099cd19783b336a8d283d3ecf0a91c1d80d161520ee23ed1977632244c8d8e6f938291004f3ed12861abdc496f6b2031e3cb08a637f26842715f1b82e992eb195208b08af86dbcf5470e77318d8d471c01d8b32f035bc756a575bafe6b29ce6f4f17785c08aac1b88c92ecccd4755987dfe1a915f98623b33da256c159bc001891952f9f075ca61939218241cb8c1e1987cf337fa2d9440140cc39f23bb24abd206c1e7a7bea34bf55a283b9fa3a5d7b0088999584bdf1e9b7dda9ba9a73720605828d16eebe3353e8fc355beae8e05452f62381299bf412a9bcef41fc67409a47c1c49ae73f6b7cfb19e15022fc6d4d8600196819d913261e5153aeecf67e22ee0f0a2fefd5a4e394e0cebf2ae0cd0ea28dc275dae117ca1f841c29ef88f2450356a9fd8de8a530be3946d18bfac83eb18767cdf619c7a8b23d94dc8f8565ac8d7de72b49e0370a7e0c8faeccb42585b8d5509bf5ebed68e26401ed5355a0ff946c0de2ab262219de41f27d7575ae8dc15fc5055dbe4fb2b4e1ac84c36068e5210b62493c202e06e5c1b7670fa429fbd30d0e33b8f9b72c329cddca680e88063a423089833722799b72269321ab5f7af7c7724e8d06eb81637edce6c9c8c60beaf9bdc908d3c819093d872933f118b034753a7e654cb3574f6df0016ff4ec9c36185332545de68f360a2153cdde1b4592ffafeac733d957ff526243e0fcc060288738ecee3b45822bc23d3778da32e2194d16bb3b2323287a167ad3a6460b00c72eb41e5ed7ad9bee4b23fdbb4d232fd247ba1849845b72c89f80da493c94231bf511f02d98e682898f1bce1f9fb7d3c4d6e22a7abe47dff2d7bc7f4f4425722dc5958be2e5b7de03756dd22b38b677f7e0d5195539b015ffa576eb42c8849504848a170528e95865e460306781e8c2744edc0c635e5dbcf7f0f545a92f7a33a81c36bb1fc84497b6c63d115be0155d42093f2b2a93187de3a282b60de1cff42273e2a0b72d9044fe024c9c90be04ef69f8469f3441a700caa26566f5464b827973d5ee55bf95064680d5fa8d847e21f202399009d1d3ecb4d8e67ce9c6b682b50359cc81e61b8695282052da984b9be4115f252fa964e9a92c4d2171c9d79fdf0ab462c40ae96bf3e275cd00643304470c0187303322a1b286e17c16b7777ffe722fd9a593c85e68961b93864efe0424da67de94d6d5b9d6ceebb65ff85eca1a221259ade98007fd2c5bcbf4c073458265d951e1f944dc1eecb3f6d5f454293c02a5096274d90db98c7d9dd3215b6c69949f08a10638b090c88165fe1321436afa30124e9c9b19a59ec932a9d97e24e14f002c5b6479dd374b9d2b65be8cc2aef2fa9cf9ca8dd2c74b86b20150a413f37e45e5987bcf0c185b4e6f8f5b5f4b10d24cceea6478e12979fe4560ed95e1a60ab75adfb302e53de1de590654608997826ed0a9d424edd3117711501a183703d99bb4b874d90fadc69312510f58214beaa8cbbe80599fcbfc3a41583ff7bd10d43c1aab261d3370f0b6c2f8f60ebe34f342e7b2d2df9f1b208ffb01c2f81ad7e3e1b5413196f88f498e90836f4c065b83834b0b307d94cb67bd67d10ce4f660efd1ad01fd0c0711b865a57be4d8a1c783b4205404fd26e1b80eaf528582fbb1de552974f24707fe24812968bc7b3880dc1d8d12b525fe67fac8f80c959ccfd49ab55120790ea15e772b43d05ffd738f7406bbcfabbec46417346d86a5f81ad109394e8ff82b7d3a98ab1b3d3526f9fb35b7d1124e8f20e1f69a33481b6085ae15294849d96442996f49da36a6be73cc0677f8640662b8e57f4275da6199b775a5cc66d482829884e44da8441a8c880bce90584c3bfd37789a7359c5dd6e592ea06bd1ba5d4d2902dffeacedf959e1bf77481852552943a22f770790f9a613dff04eb183d08c9a1b48a60fbcabed25f0e8e861febcae846c2694a8c31c088c927cbd2db5450996d7078bf8369810fda609b75ad9d854a4dd671364e6ad5e6d4e2c006dda238ac33f04f590e5288a11eac2ff2c6a12e348fedb3c6282166e5d1ce85e9a79d2d8c95a282eff50c42208c3fb06fe39d0221ad56856cb1ebe0105039821dc1bbabb5131597d6cffd2a28b3a9c16f9cf7bdac26df7abc6430dde0d0b248f5a4743fa03ca8029ff7bbcd041568d7544b37cd3e8cb71817c786bcf1c3c74f13d85d55f862f867be24be874d31fb66b096d39d533f9bc211545409ada9f718eac5dd8b0836851bb3af7c058e89d00426d861ca84bfec2d3b832f408f13b01b0d058b4b6a17bcb313208aa4329d951409a858c13d9e269de8dc8efe106180d9dd1fdd1398972db24ef0510fc3dda93afb8f2f1e085ad9b8cbd8e9aedc43f7e9ed6d59701e25468de9c76594ccea8acd5ee56b2d5f6683f23700d5bf3d0b73afb07676fd5552a5ca55fe3edfb814c86fb653839bbd51b3deccdcb9bbdd5882bfc8d3bbf7e8afb9ec260d534d100cd07684520ed59c9cc7d2ffd52c31179bb38e990d9f0c528cf167dc8d49696f3331966b59636797b85e634282a39b86457480937ca6b70d8afac1dbf667b110187a33bdd237ce1924d624274d9677a3f6445a5ab95974741a148ec6c154b0bd3d08c30e64e275ab72dd9a20ce9b31eb2eb160514c2db140cb0d230f8686e4c1116be8df8a09fac922b319d16e2876e64f2a37199d9a19de0e132328be74c9c6261209a3aa04d9fca525379bb4a4a30fe84d431626350ab663e503a4b1b4dc36eba9a9fd5d697fb08a7277e22ab642d27a6918c98e84f0645ce148f638bda88de2814e3f1cae687f33495f6748c3d2d8862c2cc63ee08762699677bf9c059b45ab476afb405a30c34008627d8763df8c9bf4f37eaffe2c3b1a82f443640340f8965a84b490e34527213e05a77f0cc5591c6201656a245b48d0256334195d161144393ffd66d032156768dd87882520d887d1db0ce60991363afc29043469a72a2561d1384ab7641883073e604b437e857ee2f4f7bbf47 +Output = 2ffe47050b7d11e79167d0a2ae01f70b + +Len = 125728 +Msg = ce3f8556a850b2eccc74d41eb19735da1bbbe2ce929ab92c138cc2aa05acc3ce6e360e6867349e60ce5a62b13a2ed9b6346cdfa5a4a8c7598935a954ed46fd041953694505bed82812b7ccf2fb5df5680925024a8780b71e76b8402e821bc5d4345c3ef5683689cc0252b9e9dd6bb27904b0f3c7256ab20342de2e43aa7541c7281a34817ae4d8d404f5d29dc6a237708cd4592464ade091556f1c984e9a99645d55f4f0210feec98266bf169f48add50858dc672e93684f1833b13757d3f6333bd5264a4701f233e36e275c51a63b31e205259a6a6272c5f1f29627ab6880bd2b617198d3000d988fd5b378c3040a0a81a3dcc40063287c4973727034a15e8993c37de1ad556782ee630a71dcaa41eb4dfaa9eed7deb0fb897fee1bd8c6b920dcc1f32dbd48277868e0d44f86df0959aed1321fd91b32ca17deb22e811eb8086f247b84eb2076036513bb1aa8ec8ade0cf1225fed61d7725d5865b416f284cbb2b3bcef1f277baa4dc565db2919eb01cf231fb6fbfac67ac1b4afb27f8a44f00f385f7541a35ff588be7a9af3ae554b5f2dd12dec2c286aadbc3a32a42e2100ed790b1f39dd496c7ec6a35dedf3ef4225d7e2cba64025cb8836ab3b6d264382b44069f4ef1d629897a5882eff30e27087ebf799127ee424baebadd6c2b9d1fecb5321fc4babd1003c22d01411ac555dee2fbb9d182d8efdaba3e60a8b31f3fd9c7ada3f36cebf2cd30723180bb0718fc36dd3e1a1964adec326fedfb0d4d3068e7f3cc696cf54a5c61a2b40d5845d906c6bea6d930241506a3b9e5d19eb96a10929f19855f6b7f27b248d96587042e853f2a647d8b79bda08ac6e8daebd6756753f9ebd598b119b5cecf4227abc481ddec9af7956fe7f05053f157658946cae3b8aee3e8cd68929cf3c06eb24af96b977baae0bf71e1558c9bd3c20fdb6cd30c1d28622d41f48233eda6bf93f925544858b4b03a161865bbced8a94866cb36570de11711bad7611108fcc54b1adac4470052d6b3e0dfa964699a8d9dcfe46d3b078353348c93a7bad23d1056448c4439ff0fd4ab56b9892d0873df7e5b4ad04ea669a7143bbbcea7d5e21133eabc5c87c1462a9eec389d6c080f2f78bd611808471e933f4cb25e6e8086586291ed65c6e38058fd15df5ea804c6fe0b5ab99cde861ca7f43419df556e844660ce81f86dd268d044680035776b35bba4b7c6e757cfee45f18644ba12fc767bcce52c9ce31a4a3113575dba40c7d5e8e3491b700aa10e0da5b7d5871db6d758f59a4fcbcd37befbc8685a659a97121635a329df4d95e65f8f4d4ebedc2a217e89426dfd92973180f21f58cffb4594c41a4a748db70b11cc2cbb12d9e4c2ef5ce671f9bac9c53c712ee10b41d97fb8730fa37df3cd9d1ad3fc85c460be2d8b649bad957bd95e5a3ccd61d473bb91f7839442c8aa07b86bf78d41c5dbdea690361759a3c957aef5545bf636ce1828fca636acc738ebe98fa73d53b9a3aceaa831f81ab72bbb43a8485932b4c985a1223b75560bf8e0ace083ab5ff260cf460df8ac45420b7ac8ed99538bd0ee7a96f2c3beb2f9928c7f18ed55ab129bac656beab27dc6f12c9b2fc7c9861dc57d76f8cf9158327e55dc9374aae98cacdaa53c988928d865372709442995fdb6f4cdaebf9bca2914c351ea8a397fe32cc0a1ea82beead8e02118e49f025fe35b77178f342c6d500e6b5b88ce8ff29893f4d80029c2185aea80dd5c58c238812b7ac104adb1d649c39465f891fcd62f6afdb417fe1155d0fccce0dad217a4399f8666c98cfa7978ccf51da4752e9f1a1a31c29c804b07dd8f6bcfeacb41478f301085286234eb6f9303cf26f883a1eb3a378ff850ddc2c32ae3f6f684fd86e475af88bbbe1f8080ae2706fa9caaa315437578d5d0280b3457dbf2a89f9ae6fbe8ca0dfe0118fd6e86f56199c1f2071abe82199f9ed845a38eaa4f5b8bb7ec1801e67159db9fa68ba5f55b7f18f8528e13d3eec01d5cf69337e56999d9c30adb498b4f799e32106a938d4135022bf9c1dbf164e1cc34b2860bf3ddedfa4ad7b8383f14b7d96ecf8dd843df35fe1b71588f41187f2bedfdfe537c18b26dbdb73146585daf0db43857dcaf720c9d355dd4a66985e2cce73d5ea6e4b6a1c4aa3dd90c9d86c9bb90ef7b1936a623400823b8a9d119c72fbf05398eb414167f8ed001e3452c926383594a366fe80497124767020e6096b4e3ca116360dd9afeda225e7305bb83860a0a578cb1b44af2d24d726777d6dc0ce40078dd715fa9d32a89412445b02793a38715b4a29740e3c6ba6d12a40901984e4cd2556c36bd8cee995c8f9ba6f93cde342726c90d910a7e02b9cc1953a1c76113a053c7ef609c94c7031d5e0c72b218a5ee5b8b83b5b756aadadc5e63274aead975611ad61d82cb86c746235d2ec3f160eddb70a6297aef3762cbe9a41c734a12c3f5bba75ecfe17d2ba2822587b2e6d9a82efec156d5b62cc4232192fbe0ed641e9a40cfaee4750ea2aae0d2083f6794afbeac71e84839ff817abcbc40046331e7c730bb8850f4bfced7c5ff3aaa0206671300443862e9141d2b018c736e49f0b1f511f775a5ff0502a1a819998334c350b47094d186422f19bca680207ee044ffac5b0fe153e272e0a11d9daf6b7e400f2b94003e42e394f9c7f233b1c6e4933365726165db5d8ddb5e7d17e6c35d00f4d0e0f2f9293bea2fa5ab13b1c6b56fffb8fe987dacbeba65227d04ca1b3f8aa45cce097ca9c9a33e0e07acab0ee13fb70f66119358848d109563d0d3e3c4419027d1a043350b34a749be7af80fe686ebe13f79316f4d7a604fe8289ead59ca3aba8253f75b7f22ede125eb433a33da20c6e11bf2418816c68a606884e88e89268d6690d39d93f2947cd489f71e57add8390196308fb2c6d60d731d2125c102c638e4e3927bf8381d7550e39e4cd07684b0075486aa5c1ef11186b2edd5afcbac1583c89e670a47fb531164a3262cc8b8b468f36f01f293ba6f11c6657889483adbc9bc71ff48c6b0ae9ca9a03adb18d6cebcdf545704a9945eaac4029f0c1d14d43d3b97954218dfd0691f000b49fb81576994c0fa00e50178c8485fb9a69eac9744c289d974d2cb70fd216d0817c52ae6f5a04f7b85caa435e0afd748c75174ad86edb32c5f7925f8cf7d21c1c32a4615f77e5a4bf1bedf1e9a76f3dd0cea0f8f5a29ce1e707051e0567ed8c8ba7f654cd5ab7bfbd35624bb3c3a4fe6e5acdfa564e31520364ce1c038a2fc7d8c590af416a42efbb91517646c7655e6c03e67980dc632c24f835800dc85f760b72b99b430f4eddbf17029d2a197805d4b0329cfdb2fa174faa8173ac8947402a98ba405cb1a230d4afbce6e523a59cae49fa8c533abebd8e62fc1c6735adce3f1edbc513b80791ff41c979014cb6cb00b586700dda77c3e808eca4c6345ac751ec6452f18d45a84ab56f7f06fb7139d4de1e71b0fcecd466859a3251ee16d469ea9d117d96241cbcf3f7207a9aa08f31ab0ab7c607e6960ebf4eef91cca89d8e00ce283f3c6c965de4a983e790097420049169d7632db1ea9f50020d34dac9c8163ebfbfe7e4bd366eccd1d4457591a7d1fdaf697789ce020de7944d8f72011f1436ff8600553a4e7aaa31ca21ab8ed1fa94b206adc2955cf25ccdda4639ec9ce2fe0f1bed87b4aef189cc508c7512a3689f9a356c9fad0234f7d43bbff7334668de18061842d45cb9b2caeeee99c52701658f7f1de9bffcbd00d2f864747d268f1e42d0e74e4262bc6d522cafe05064ae30b86a2668725073bfee9a9c7773423d05b400c472a5c8e0018c9337125b6258463d80f0e46f08407c51a8cecabda45bdc971e1677a5940fb8a1aaeef78d2ae5f04749e3255d2c0b7e22aa64330254d2eb12b24526ebd030d8b9f93d568fc33f76fe4c67f2e5c2bc0e8a29c57bea58887a4e45b9451f832baafb098af908354c208911e515afd43a74b1ac596a1fba67d1735ed99ce9b6e87690613ea6a189f6361020c35462696ff8bebb88c746825638a8860ff5ef704e84a08ac22602c623ffbd026b78a68a42e2dadeba5c0ab63cf61544c316dcb9471b520a7d41d2f4bdc4b63e4349253e9b792c9e57ef10600354e3205bc85699bb84ce6bd6beba1cabcd235cb58e848d6206dd82c7490387929a3aa240d3051990083d3437676144d5622de428116e7f7fd1141372328934d1104153daff9340afedc7ee0702707723cbfc5f0498891ddb22fad7c1714a6ea8fd21ba9114a517007b9320ad588eba7d4fb755b0ec7d6e5c41b7581ad0f03dffab0160ced9e6a46bfcca5293316417cb38864c96d5f37aeb75721ee61520a9be600acbf717fbf1d9b6930d20559995f5cc92ce1d1a934a710853af8e0984bbcd65648576968f0630f217d7bc8bd63ce3540362ad8504e5d44083957874c47a14023616b11e48e95af87d3bcf9cc3157e170191aedcef53fe662a580e1e88ef7c7ea8041277cea43d10eebec1510727ac5fb3e188e8fb9dd5c16f7eb7ce7720eb23e4d9ff68ca3fc38292eafb704b7b567241dca471d1ca439b7b91da4e39174a370f1ce2bbe4c0d3959046e3c136176599d40a683f18e22f3a7619e16477dc820354562236c3315493115ae20e7105bf1c94f23d1979ee80e7879c33d9d97579cfd90e27a2109930c23caf611da34d4e43a81c8cc89cf520ead6a4387406ec19e3c6cc59c672014e6b3accc6b775f5f8563810bb1528fff68b8cb858ffa74949864419206c927096d532397aa48f07a79c6e5734c5c615ea12d161fb406392f0017b7be45a17eef04a4d7fe6ac988a425e70785da31d3de4c6cc258901e3d1f89c927c0d59aa844410b32571973987b1e466fba076d681ccf1a68f6a08ce0d489fb1a40331f3387a708bb3822c1905dc767969640598e98ad98624061dcd4fc852027a2eaa99147ab2fdb28334e10cab5cd04810190c7c07c6956ec60a889e60fdaa86f78c45202c1e33a9db7838a506dd95230e7ad9422902fbf41096a602f8e7d450c49e9e6379fc5220f2bdc7d6d543ed7fc5f0a843d9d4df3e4d88d0837859a661fea94de54793859f30ce35a900d402e69d432188008369d5e6a9ad2ac89b48400e75f9ae802cf2affd722b266fd9fcdffe3aeb188458c34041c1e6fed1f5e3755aca4bc70a0fc1d7c17051540a9903f3509faffb4f9b1207c898220779af9f894c70eb37cf841ba0e4914e3bba5e3da8fb38143a479481b3e2f50a4ea910a3034b2e8006b5d32891ce9dcbe3656ed58967cec3dc568a35cbf6a145da4a61186bbeceb23ca6430f32e75c6f55f412f11bfd2863e963c759d76e657cb442eb254a0f162be2891df90b9895e3985092bae823109d6a5591135fb10757e27bf3f326a5cf900045aa0da54712ceb45f365777424c196616318bec274f7d6edbc4aa8ae8c18c9cc42f74875e99d9b20b46f050c3a57ee58defeb053807975f4ca571fb40b3c5c0edf7553943f3ac993b09affc0ce375efa21258334cf54cbeb5dd7003156ee373a849d94460e8ee71d7c8ba0287cea58d3de4fcfdcbe34592fdb5d029cfbb8fbedd6c272f1b3f4742c6cb39ea9b2db7c646abffeb1d972ae30e75b9f5d66071a774a96982dec26115f25a553dafca52a3a5b08985aad9a2bacf6552f0932530395648c4c61037e1f142bd35812d6b1f2a433bc054db73551e28ccc4a16cd4747969916282186772df9e3b03417cd9c5650693cfdf162bec1701f43691ca33e77196cb6b3e601abae6ee1ee40204dced5cd702dcaec4cb0fad4223d146160c2f28c64007824f17610e1aac024e2d3b3f169fce104a4e1965e9d4a2bd4ab625f4a6df365cd74d28105f0b2e85ac5fc0629b4440923a1ade97d29db921251446dff4caf695c4c2136fe2a7eb95a50231fff3b0a08b0692e14c7086af255d9639971970c8d8d216a1259ed72d58c07e57bd27c93622371dec2dcc77cef37ca6c5c51db8f34d87b29adb9b843af9853bfa453d7949805422c5e2ed595cb00aabb1110989c11e6efcc638e2945c9e7ca2e23e40a623cce50b3512dc12a2878d0dc622e4cd78700c5dede57af1d8702e19d651353a0a2f733f04659f8ce89e8f33cca1b66b616eeb3ed6896b81f9962209a026261c47d18526fa8540ad761d97878b35874bc43d92054acdbe2e0638e0db06641a3422d9a328df17c65f932d2e70ca876055e908891c11597ade4680f1f5d1b41a6ae26f55ad7ac63a8988f6da56533f487117f559e9f3d4a77b0294dcc1c9bd2da6d1bd241d9437a3139e9f26a1ec044887982c89d6b8e64eec839c29a5b5285bd035e897e0f51509e41a5097ba5e7e677fb2d6a149273876190ec1610b5e9cacd0571b375e650675e64733b7077056ad41ae1b29ac097227eaee2a0b5a8dc2298e7f7c8a00acb2ed006c6d0df1ec3422b5d422aa66263c69476901affa0842d9f3f5331a2c91c37c1ad02921e198bfcfc46b14acdf463c4518c96bd55397c3c5e500696f4bdede271dbc8d7c3d3ea0bb54bd18b57f311dc245549206cd04edf34de9460fc659adf8ef78c1a56ea47fee4e10574faeae85e9b6539ec9d016696d14f9f18403cbd8f6794cee24dd9302719badf901d4871dc1540db7a7c494df3b207593566cfb0729a3803c82f1d2d44b21dc255359828c5205cc03271147f6635ba8530b68b3e19a565bd246112b9b84cae403cea5687aa4b2d6add11ff757efacd95a2d5eb90e507826d9f8a76400257d0fbcf9200091c04475db2d566baae6fa4fcf44b8d63753f22a78211a46aa3522a3785d331476ada1eeb6c41f6d96512f53dbd6ddd204acadacd848d29942bca0e95e80446ad473b38c651de0c3c337322da66d35751c6290f720f537256fc3e12997ecbdcc511b609610c00236daa0eb2557902887287d825279b0b1b1da50ccab4a29040095ab9253e136ee8e8395428317c81ecfcf066d040b02a8072a6e49b6a0bd83ce492e300cfe060b93651c1f8e0d9b7f16ba043856fd7284ed08224093c132a00015a9220a8fb8c00d29406a8f6293b324907fcb907889ad2c1c76998bd410c55ca0265092bdd577c376060bce3d3822c1fa800efaa3cd8b8c0d713ce402dd59ac93aca2efafe4977ef578ea93c71135b5a00de9dba7c886d4841b12e67223c4b6954400678f6d88064e9df02627a652c72931447dab0207ce287d01db4d696d434ff5524482f8b123287d03ce867fe3c13ef10726d8027440a29ef209ba38be1a69c780ccb20e7c9d2b210cd50c254e6986571a1f565037f39987ceb9e2171e058ac272484736503b0090f481e01ffd88aa6a65b04c74b6afb63e7b34ec8ef5ca5aef10ff69f995c64fd2a11b2bf556e55132d020e2f65b3ba1cde3bf0125ac328355433b3edeb407bff0fdea1430c34a24b844b9425f8d61013beca54965a905aafcf142f16d13c3f9f1ef38c457aa7dca03a7c19137b3e77e91802cebd5550b7aed035ea82e1bc5a5dd5e4b63f27547ec1be381fa043796c1d6869e10fe180b982f62d48baa34d46abd346d18898b703209de41a35080367212e641df665bcfafcaf4efc468c7b7f09858e30ba554c043d48249b4a2f68f394e885e8197841d65c7a3f678f03a37e076b2f865cd38ffc884b5e056830168bc91543c1d19fdbe622d5630d2cbf71ce25f2af34e8a9ff46822614fb07a098ba6e33225dc722c7a4f04f5e6f780642e9d5ca81bed63f168ccb56ddfec0f76be9d4c0a5fe62c7b18d45567611297eb34ba7414ba6be096239c45c1d52fcab0ca49d5c43362ce5162982796e64999f3f8e0b05616ef89f7ed7fdb457ca4341f77548548e978e1151e448269c0c40de340b8165677a2e77a8e1d7de11b70d42c8c63657ec952ec31157f6ec835ac7b25d5eab1fd27ac8188cd1f367df9be323dd3217b4e1b15770c0ff2f49b8f296b207f1d86316d34df8a732d0b015fb4d7bc1233d1a126ec0b0ed4451bca1462663c05f99fdb90628ae648ee0655957a4a0f12446f5d33fd2f9f2b1fec3e0d80f3e1312803e4d95f0906140b2e61e33913a09bfa5b6c8a706b27dd286dddc1aa9b77c94fba329053e4509f2b8b0e9119bbd575fd9fb4736e470eb309a8907a09e5669619cdaffd66a42eb1f72642e641c91867f6431f361f4cbc726aa5407ec55917602b434167bed007111706e62bdac5d03a8d4d941aaa019ae5f26bd317057ff0ef3024d21886f042883233e3a90b3864b669c7fa6837ee0ed34a02338af1e05a0ace784956e48d49def0b61fa5fda93ea333b83b69f09c81031a724622b303be7bad488e6a002e83dbfb96846ad7a0c5c992293e62fb925c3e09c3f62670708208769b899c035b5846f8dbf93fc2a561f02f21eb9e8058054cbffe29dd53b0107ad17a2233159c30e9928e656be6417adfb1a82a64a877e6f5e52bc990814ace9865ec41795d7a738a6fb6b2376afb785fc1c6e3fb9a7665012350bd8825c6262cdbf9ceb4047c89f2375bc7eb775cc4380784feac7fddec372077ed0a65ad7ffcdaa9b12d312bdbe993858ccf34ebc4322ae963bf7f35e26085a74161698640d20b05d22c0d0dcf372b3de92aca30e114d3fefb7cc105af44f9e9a1d45ad9d374161419f8c0accea3a68ac64660b383a8a9caac2a6ed5baab2544f5aa602f9faaa2df6fdb719041f6ac750b691ffd13b455555f13ad2e6d5db0c0252ca20e0c3e576cba1b493f8ef8e705a0dc2f95f7017ea7fd7da7962f21436519a2490182f6dfc5e4016f431f71fc426de7b7039957cdc96cb1849769c1863cba547c8d699cdff2d3d50b245a2996345bd1dfd0607eeac296f76bb98103204cee89643c29f602f971df4768a9e85be450e4d183b33d7c9a61968483e0b0ba9d9e8a29952acdede4a46649997375f3593566b2a4fc5d2b59b7d8f87dee90fb38b3a0f220d5e84bbb56b4393e1f99079bf3a0adbba2a7a1087f03ef2f136a8c241311e7669011c2846e0f40e0171c3fb370dae7510de083afa1609022b8071469a82532eec40efa49d4c08606c2c642a8965c8beda4d37c54043704dd43303c105826f840daa89d11700f3238885eb9824c6dbf18d147320192d073e81eabac200d5a64e538a750e52a436cffd1ae4b4a7956ab59fc034dbd327204ccaf400ba1ae0b9b6448d3bdcceaa65ee1057ca107076079388bd07691cc67df1060b9029c237fc84571f48cce987e2d688c9162c1ddd04e3de776558349f52d3c98dd381754fe11111ad165f31c14041ccfb53780e3f155f178bd919e8f6516d9be73561d29d29e4fad33ee445eb0098434afc84d010ab3dba66dd2e787ffc16e3c4403b38a42988791e2d2c8469a64282449bc2f1f629384da4dc268190a57837918e8e35f9527422ea6b787bd193e900849bc2f25421b727a2607282ed0ffa0ddb6acb490147206ec47468aa976bf4546786f54fbf2732ff0c0492fac97e24ed0e8f82f0507a25e338c26d8f4fa0ece489e7ea68abac443a2e331867da82714ba74745aa6b6decf6b3eff7984ea54b37483902db8e23634fa576634874bf77b0323c73f5c684fe3fc257b764391b87d34ee4ef26eb1f08c5ee39141b4c77a0a13bd9ae60d661d214e0940d6173663b3efa95ffc95701bd238515ab6ea66d749530a9455a2f96f11c9b2f6a1ea207cdd0c7a6d531368de8fef67689a136e37c029d25e9604676d3cd6e846e0a3982c83f52a1d00d2de624aebee64f51628c1f8fedc9fb119f84129db72d89a2ae69b2e1181190ab81dce8b94adf5cfdbdc9e783bf100accbf61060421953d76752f065c8460979af6c4bdb526ec4314ad2f5c846d9299101a7056a71a55f9f422454b1824394569e1201c08df779224b51ef71895cc168a35545ced2dea5fba3a3ee99a73e63a86c5817c4ad11bbabc6a2b4fa6a4171379846fb14cb8bcdf27218e7a59f001e770386b66f1a8432d3a30e6beb5352e008cac24dc5c6767f8d97cb665dd3516ccb4ae405483c1887a2cadb3dcdab55b6e2201363682a6562d3fa04944aa9f8f5ad29b92dd77c95622023515126da139dce828066855f211ecc830b98f38abf6224884f55a440c26a5697bad08148543bd2d8507ea5cd725c801b279be0df6c5b394feca638f168484b0c5ce1635de038f90accd24fdc1fc4f8a8a2c59a0ec887f366d9481af84fa4076b81ad56817e3d48013c8b0bf4f2fd3b13c23da8819b8f5ab65e62d2bb3f24939d6f5be11cf8f2c9a3e8d0617db1b05145d02c929ead1a7625c21ce9a40073f6896e148d9614fe83d917cadadf2584432513b9e1cfc5d1509c4f9fe61a59373816c800e0579b0a7e8c12a1fd821622189ad50d1c7bad5cef044b1351841419622ec34664c754bdc3a2227c52ce4c31d88e5c4fcb092b625b43ffa0b34cf7c07bb8a90fa14e09c059058d83622c8e5a8be8f2a877e3088b9d43b36c92d9cbd58b9bc0821e5580ba489b9be0b402a5453a90dd40a7700b81bceaafa2799357ff9bc151c863428254994e96b8d1b95a99ed6d653ee318fee9c0223a68ede265e7b111a308f87fd7365304c4363fba73feaa69d4cbb343a76eb2d29de6782ebb34d873006b667247077ea76f7f886cb81e7b6b700ea059d0b699e22146a1df228f15cfae1934859a6f231eddbe3336f39e675c833031c23f697d390badf05d62a0720df639ea1f971848515619c982ea2976225358efe7bd3066c1a645ee11430ef61620f310a708a7f82824b8d1b76665b1a629af602e11b35d61393622618d82a9d074712f87b3c7388b8ec4d33c2ffa1fd04c5d0e00059969010ba815b607a394243ad8ce26601e1262db65587b0d91c989068981c65f8a938965c24d797b1abefab95376ecd9548d9554c2e7dbc8d2b5b79d5b3fe6e830e2e28fac5410af8e303b3a07ae41e512b10c410408c42764ed435afcd2ca68305ef2d18fb2e56ba8f0cd051ffe8d4b0087b0ea52439ef4f079168594c2d8a7350fa27393ed5e7910089a62c1ee38d4c5166796d521d2f51d5f17664a957a6ce5fedbbcdf8fe5a06d7f89991607aa4809671a8eb529c6f394a92d4447d51780e83283f69c20e1a7675e81f145d04c6f7680b21b19e4e3b5fc5f4269b30916ace7b38367f126ba57a7ac6cb376d28410b26b158329d89105fe873d1bb5bae1b68a8ac457072bd778d5713128d393bbf565302d0e0f8f39a9422b05a3756fdf6678be2d1005b6a2d299b6b895819d5ae438d5e006f091416a6f5284491cb078865a57a5d91450822c9982e945ab78c7a6d26418b1f76413102d05a154d20614dcd75e16f95c7fdf4f80ddac7f77aa6c03dde4bc5949921563264b440ebef71b3298da67b904ce2204f4cfe98a0dbdb0c2fe5eb44411a3b12bff2c55bd090df54e44d3806135c2b1119d6188af9639faaddfd9e8ba751d4e2f63b0bdaadad00bf88451493916e5f53e259a71363aa4b48a285d40059d8a5338f8e0621d5ac7c3fa005daa88d0be565531838c672088452281f3a46cb2712a0e66c32d5db17a861b5ffe8b988ad53d1c6c22c289716c153d90a1fc36dc5b3a79566106b40671bd224a3dd4af6db3105d7b81f9e654d98ca3007130ac42cfeb4170c3d6688135ced868206d16a1df38de09a81ac4f256121b776b28160d55a52d5bf083c24c4d230562b23e154de11e68bc9d0e6c736b0f6e9d96ccbc6475d006c0f0f70a8c412271dff82ff3994229c23c6abb26fea0eb641cfa05e570b8d49446cc18886c9a35e388fc29faae89c0b632170b3abb7e0ec5999fb9da59a51a9f968bd08412dfc32405c51270b43e4d0a46aae5efd38ce059bf8ed1e446c508ef57350645a69834fdfd5bd49ed2ea37871f2d308e6e52cae833ce36495f9e074b32d3a214514def3318c755cc3114e6f566a7d65fb3593239a067ce51ceba807dcf6c8b393a875e91ff107f42f944c21cc221beaacb288115ac628346b8a1d94bd508abfc8bcde8de5a3e3847510233c3dca2d0b7de482044ffc63c6e48d97c7eedafe9a469a8f5e1d05a6a2461d7a1b45b32f4cd133f758e429be113a3eccfdebe6a2d7bfe9fed630a6afc22524a74b5e8d912369297eabb1de9597bf4623c32f1405fc7723a392cb079d6874ce4148f2ba0123884d7e69237b98eee61c129442d3a68d1ed013f04698ce09b762be90acb8edc1c1188d1dc391267b6129300da1b5f2ee1967d68b3ddad02a8f9a95ced71ac592a60311261cafdcc1a305f28bd62b79a3f95351c00b5e324f4fde6d302c4016fa99a5a13e99381a561e3ae09b5ab4a943213b1c4b599372ec8a969b70f6d9507e3e68c3b3c3ca6dad452070b899e210503387ac69830af086c25ba71dd13700a1e6d4df2216c7454bba6f29603e243d3fb2b178c7223569a289a6167345f9b5ea35628a062cbf4f95e06f712e920b8e86015107c0a1931cd4430e603dbf91dedbacaa2adc5022db2049b9fe704ff892a7a1dee002abb4a87070ed2ac9c88fe9daaf1458213b92768f68d717d1c28bd83936c387f98b1a8b1bb5dadc93db44658bdf298851397eb017d03f63df9425cdaf12976611da25334a644fdc48727fe0539f6231f8f458067df25b48d62f66f16dd7d310d813754f610ec4c0442862e8c67246fb84d6bee80641c35d620ecfc219f90efed8c17b2e1437c21f1367cdcd58fa503b917b03e3656100181fccb0ee27f893b6806ea75dc861d05f32aaf12c7f9a06788b3bc776ffb289ef4bb3caa41c5909ae6b65aa6ce20f77f72e8c7d74cec3e248fe938a1159d8d969928e6da26b8cf96cf650d4ba15a3117d6366d344bb2a7c13583ccc50f826771d70a72a579a16bb68cdbab6f3c7cf45587dd492fad9102c6e1471fea45f2ddb51528871422c88f8283e0dd1787ce67c2eea502d358d277bcfdffda189f3717ecbd4bce2d0a7561831d3c4b4d6a97b3e57155402535bc302af071a45705983e9d363beefa17f00940c2b69c18cd21ff4679b7ad2f2c995298226626b05f5c7a51e8c090833280b042db18788198b2746e6f91eff826af088efba5082a95ccf28f3ba25ccf446f7e0fce28898eb3933ae4b9acae8809487895e3f8f1ce8f30cfdf97a8f9e633039a3105af7449060c7830c1d093e8bfaaca34422589a336d038c9649c10d0e9852d30e674e4ba7a6456dbedc4451f2e1d27f480f579b170f356d60a4448954c3c5e92db417fe8f5e5fd6ca7526d3540ebb75c0530690026e2518df1684a3e467256e14bdceddb60d5956b5640b333db5aa1f4399e009941e6507781d2bed3be6d3ca49e0ed79ba47d45616157be20e9b40e448506e783a7457b1a23494a5a9b7739643b9fe531a72536d5325f3704513f25d54f32c6c64247fb003d9499ddc7d675a88c57bea45315904f3020c5e7fb440f2e00e8446bf836f8b1397c516329d217f8f8fe0bfc8f947a57c36211d2cf0af3d701f10978b35899b47dc91bf5a9b548dce75b734142eb1c7653ecc3ccb5dbfa59b915bef85af7079073439e9a2fc52fddc1379f7c56639f33488782de95fd4b3b8f1b0bf0d5596ad081b1835aa34cf582ef5a36b5b2422b170bfbf60f57b91005edcd976a0cc6e9f911dd713ded90c154d78ce1f23ed0e7a90210c867e3576e403af10b6de788ac958a8d114cf6dabcdae295483de257fc71968da0ee211f8f73dd500e024ee6dc2b548a0b8ea4710d9c783c129d861d92f72f3c25adfa599b2640b249302927a144d79c060ce09fde22024ae81b126bcfc436e300ab544cb9e1cadf63ff609422677a8aaacc93aa54f5e68871bd6e89de5f114bd9f01941122de39e0577db75881ca81ea0d8a3db999c8ebb568d83bfe5502a3c56852f80ce91f3b8d7a18212faecc61e9038fa7ad59f60ae3e9337550d20e87e22718051149662f680843eb2a15d3d5321f27ecf2f87c628d2d673927d56b2d8e3bcf2fc0cc2991ea928f59ea5f97585fc101921d0da27f0ba5e20c05e7af213426f6fc8e0a0fef8f996901f2d48d67cc999b2bae023ebcf9d332425d7140ff7e691deffb5b5fa4e19d5f87b61d1c9ff2f9630e086e7798d235e690911ad714c782a26e7b68bf6e6b0ed13fa6a1cb4d8d60e7ddceab03bf2f5e6d5b633cc80da9f4331c808a9588967e7cbe670b100cd670980f6350598c5bbd3527366faa46904e2e6ecd69789ffe6ca07859a1916a78a9021758f6ff8d01c2dc787d2be45c04e122d9a46def210d49eaf2111db5c2de6a948a31f75c3d9c1fd1b3b9ea0cba826d8ee198005fa84da6caa00fd7f3c29245fddc60e9f62a9524b38d7f3289ee9343e11b2ad9408229f3be26a858d1d61ebb7c82783753b08761d05a3f8df264b1f4b7fadf51386b3cc133ea9d18e679fe4bbf10ea780b7bed57d6ae6d64ccb9690071e527f0bdbff08fca6040a0a81a9b77241c2a2473e9218724feab4f8f6912e7bd7e874046fcefcff02c25887d5470be49e8d9b52394de7049cf5bb690d05a2ae93b9fb84aae84f233a2ce28fca43881af1b5ba2a0eb7e93c395012297aba93a8380b3d15f415aa71378ad1a9c864d71b238329562798c7210f43e3c0a378aa72af27623eb51cb5efdf244c5e3771a0ef1a3f0d5eeab829bc041553b4f2078f13e155918855c617a71b417c3480338a9fc03191cbc1dfb51301108c8fcd2ee993b5ddf2793cdb79a1d42a89b509723e32fca1da2413d41631ef7ab6d89eb660fb1206ae9bd22382e4f0289a693bf564b0b5d613f14860f21bb49cf818cc689d52e219ed768065db785981d7d77e86a322d51962bbc84bf2db3abe7bd6bf0a48a00c5ed690ac6b2b65f57d69873beba38f43b2ef08fa5dbd776728679adf6409ee781d9273c0fb1bb3ae667801d8ed0dffe7e9e363485dfcfa2521e3ed944086430e9e48a722de536b6a822bcebf54897aa9056651191556695bf2175546646aa7b62821b23cdc7a95131bab7556e8be0971509f5cd64b74cef1e42c5c5d995b225805451e74bc38379077207e077155b32710b70be5c8fd30ce3d4a8a41a701bddc7bdb733448375bc9deb17239b6f581b38ed6e6af549a98dc4598665a56067f2ad30c37e3461c08a69a86d753804779fd1222769cb6f30d02463f78116e0f712a55fff4e87f92470ff2c838bf97f3a6eee4c64215b8af9728866748ccb6c799c548dd31adbb3f1fec2d9f1ae4c3a00d6c4be8d38020763e364e365ff4f7d301e1f6cd7799c1cb98259432072accf6b86091b1af46b7f20b15e6d744f2f9deb167a5f84d145bdfbaa26faa86f9799faeb3fc4860d045c905ab96707f2c848eaf409e853b864f238e4c062e20b99340f74bd5d56e8592a335e1a62a990c608b0552299dc957663e1b09a0e75bd2e2849c1263825fcc6529a1a05d2c19f9547ebb878d6880f068d969c286fdc2ad2e10a4eff075bd0f880253ce059f875b2a0fd7c6140de7b71d9b81600197dab03f8f17c9c2d60fb5c1d75354e4aa6c99a8e563f604b587154d2d6ac957dd2d44dda7fd8a22cede26d950a71b42764e1d97a96601a687e673bf362ce7d0f842d2cf005f195885b1c99814590a692ab84ebe02e9ce42ac8e373c5fd0a0b610a1c0de43445eac221008c5cc7108a0ef2f94e799f345204b07cb8c505dde4f4cd377d218b54166cd834a2a1ff5ff2eed3d57d8158c4e878dd79577b0db88e5d55f607326b9aacdb093f88db6efd65c4b69ff5a20bcd1c19a88ffc5275386bed3cde2881658812af0c778b738667572323bf4355f8cb61499a26f3d5fccc0226da664db8f9aaec5b8a833704e63c4b8c93c9f317c03e5c9b2ab4fa8fd4e1d5bcb7050323a8819e62ebd917fa0edaa7539f366161f2a47270f2d06ceace188b016b60d56bf29abd57a8efbaed50c12f3a9e9b2abef07c278d5affc77128ee66876fd030fc5864ad9c5a3d7c396c8e17842a4ecb995a53f022fba996bd75c20cc12cf9a24f4a5df3c37858e878a2a004d2bae7a08b809a70f43d54571a4541e2413b33a5ff6905344f7bb89c25a3957ba8d8fc660013de0e539886853217cc8b8a0324b86704f8c3a2ecd2f3cadfece0690cd36891848d4cc3a5b6ad7f5de06cfe2d335620de874660344e7bc2c7f4e7b5bf2344aa432690e6ed7b3c6c882c1b2011e60bb7265f20f9fa61b0c7fc6bd5f1786276d4e0389f2fc83abe7446edfaa249b35594acded7e297e32f24ddb05fbeb0f77b8bdc41bbf0ce7bb040fac4afd73d31a033b294ffcca5194373ec40c9700178bf4997d07bec88c49e3d144e8f3174d7883ed80ffcfaaa9a8a3fb8bbc7b7e25cde98c34353756f9bf4d333ca3d63891b89f0adae53ff00dd8fd2c38fbee8cc2a45e3cf38d71deb6830adc9e62ecfd2840203740e996c5068c0f79d1b3395274781c51c1f6b6894cffe276720d7f8f997acd1eb8f31a501b2a9f8860cba5f9c6b2ec74a75b4c7e42999da6be8bd5166ccc70674deb15bad41b7604ec2b78a93db8944daba17ce620bb02168cc636b92aa0cfba04b9cd2ab9c75c937ebbfa8963f3dc83d8b18ee96fccdb6ee3a5eca05a5db4bde7458bc9539618dd1d6375c2bfcb8ebf3373caaeb634ee55cc103ef4846be51bfd7796be29f1748bd10b2f7bd9a970a8c6cf785e7d5a04744def73dd30322a7a4e383832c33e3645a29b71dd3af34ce798aedf204da8e473712ad482e71a4d83e36eb74daae627b299fb83106913e823b1f6481dac8558f93daaa90c308b14ddc3035c3665520f7bbd13ad3bee6f0c051a91fb7d255926aebb553aa294ed4930f6dd6f167ce9b64817cb378752718234da6540673d8d173cf214ce6d9aa8b22685e638147812e3c0ad0c681b1c7f1159f95c5f037e87f348ead0ae95ca2418657704fe59e037608b89bc8a20d403801c805d9f7a6fb0827dac6f2341acc94295d4210b0d3cbff352b3c5e3bd03649824764f4af498708b803fdb7399c900fa5fa524a556151265bd310dbc1b300a211ae31ca6988230d8fcabfae6c6a82f066bf1f5155ff1987d730d7e5c61e35de3a5cfabfc8fb4562f97f9b6c6f0d1c02f60c07ca34e5bb9051d4fff0db8a4c5a56e43e49301b64c59f930f5593ecd193de61aa1964cd8ddc362fd771548fcaa311d46afb51511781ecb58a1e9d923a4f8a7084c3880f26c81eb21d0bd3872744d59e1f4a8f34c4445b57aa1bce95bc728489165cf1330ce055fc2f14db18f8bc2ca1b9bb5c4ef17985e9cdd1a95feec9474bed4a42c1a6b1767e9c20ddad9575719fc8c24b08358dd6fc93d4d05937a05d19681fff439ab81ab9d2b44dcda41d6ee8cb03dde8f71dd8f06a99c62a2d943072154279314f70ad2e6143cde1aaf05f0d4ed48779bc960675d094ed4b37016bf6736663034b57985cc653b09200aaec8db2c8ca22fc82e9fd545ac824fa946a1710d02f31f4f976b58068a8474bb971ea9565288d4d60ede7645fe95fdeb9a5446c344055f2b2c2d91df71789e2889994751e250115bc9cc49f28c34469fdb81ee3e748e7cb3007280d9370d26bb4be1bc0784236fbf271255329d88b12bd1cf7268dab5fc4ddae32bda266a95dba79f105e8029756af058a3ee7ab9c6f844e7d927bea3696383279ccb84b873ef637b4c401d89abc5ec45390f6cee0d6efc702b6567804a5cc4e7db959a1e4661481c7794a46c9936e382217bb94f0ff5c01370091e7328a063cbee1eb0c598981e2b99425df9c8269cb7631ca90553f65a78b1fb2ba48a97287adf500ed5f0fcad4fbb319059bffee08b05d8863861d79046f623d63cf8a9dd9db612fb75d7f5bc31e34b85b3062477a61199960fc2022b2545696763fa3e48db794bc1cdd4eb15781c778430260229b18e4623b3fdddf3bfa8b5254019be33dd32e5a6066f467ecd6b9dd4f8a6febe5485c7734c9ad2afb926ef59fcdc91644be8c7f348306ec0d8daa6be320e82fd36fd04ce01224829bec7ff4bbecc1fa3cca4d9efbaa0cca34070788a07e7f5af00fee47efa1ca7277494cd43af6fd0ba086d03e48546c6eeae35fc809eb7bf9c599152ca6010567283944189f7500d6fa84b2d18d0aac56bc9321ae72009488ceabc33f95b86bfd294d04464bdf43c8c54463fd4c45532e03a6ebb09b462f7475b8970541207490e4f4ebc1e29e5c7d7b367216089ce7316a8f1c52c834c36945300f123ae1a5cf05b1893fd65aa14196eb5bc04469df2d5bcc42299b44e6d3d7a289eae5648603e6136af4a96cb8d192c38f608244b15e41eeeb89870f1020879095f3c3318bdc108aefa4ce7d098a196f9b8b34a5f460d75777170dfbb5ebef8ab1d166d12dc41f98a5a4d7e429f7754ffeb4fe061ec166968336b2836e9279e17be852bbe2386dbd2b99383a909640d53752210da6ec8a4c8e8cf74ea0b0a14542ccf95a5fb57578cfe671f8b3e3069fb4075005136ebcb9f77e5ea5e2d30026a4d3cd44ecd7d15c211117972a6a31201328fd84eab4789f6c8f5b31ab5620e620b161041ffc1bc7bdad9bbe5a985ad6c35bac15935a383d4c347f6a60d66e3434da37007fbe9f4c040070a6daf9de545303ce3fb3cc964415022dc8b9b042715fa2d1d2727bd67982ee2919120b45f930a5e65bb287fd24557d08d50c90683e0fcfa3f29ed07bb0b89b375d96492c65ead686f22628e75e9c097307dfe329ead3a52fd96b48d98213ac2e1cde3ffc0af00a22bb750bef73473c0ed9aa15221839c7f7ff5e318a7e32957fbf605c3f58deb53bf025bd6fd2f5892ed301c2cb36b0ac8eecee4708f583ebaebdb33a50f0056c5538beba032e0585758c6d689fd6c6c7472aa1e5df9886232da04d36fb310293e10db69e23b51595556e53730a68eaacc320ff9a78d7c7b09f0fa4fe78bc64c071d793b65c38a44d60d14a7eb57d9ad185788dd15f23b728554440dd63f29a868a3edcbf170910220a8db8e80b8565ba0089a3271d1cd30ef2f6a7703774123a8cac0804eea707a7b4dc254b8700c9dab6ecf6081d13b9c8fa8f5f338da17a611b979c143da2f93312552615b28045c82b0aecf0e9b8c9dace86ceb3b10b21ae999a0f899e8d4378957121e3187447e6ef8bfe8dfd6c81d8f1657c6d5c21b657991bd8c18bb694dca0b8bf10136d6ecb56b8b11be2bf803815b3fecce98587109ca59e588fcf5bc3d6b434395dcc18f9f3399b371422337c8dfaac5ee397324e16cfb6bb152816e2a9cc47db3220e4e76787137c1c251a0acc923b9fd4e7368489e2c865b66144ad9c9960524b0c41080619c0376548a2877412f30c27e61248888739e4de0b63891183f45b02debbf0717a181589fd7b66f71589206724440e753581b50676f209bb149a31e428c4251c208182e4c3f33de7f254791d124a3ae2763652ca348ea3fbd3c893896ae81a6885a2fc202cb850a931eb72b440a37242b1de4a93d487fc5649e5ec4d2596450941e30da6a82953cd6cc4a9c73fce393880d008edd78c575cdf98a8b9d95d3960cdc823f2b6c4bbb6fb669ab05058f4165bc22a52adea59721d47555a06bb6bf191d8db9ee918fd187657a22a32a2377ebb0b0b4cd84077287b887ea82e2f514e267b9105bfa4ac4465fe7c7f475887d427314846d72d44f282c2811ec0378dd90456e0b19ae62ddd32e1663a1eda49b918db4ddb3aff2762cb8c09486d527624a3c1473d1b5c164575971bd519a60190084fa8747434b2fbae4b739f760ebea39d613102a184da1f9695e9fad85a53eb9e24d49d036c6c2fa3975c9e8acaabe849ad3aacddef0dbe2e547cf5cb55954e12e14ecf7904a76153e620b00c24e275510bd09610f915c39559316073265a1a3f1b939635ac195337ce6c9e8a9bd6bd1c137f48fb4186a2742aa3c5605b26e25b2a3f5bc9c12657b796ac94769e1d22234aa35ffd36c4ed433f409f03527028ff93aebac5c252f16bf54d4c60ba0a670f17f925877775067b0d9457ecaaba70a4fe6e2d9a4e23a2cd60eb20d95e42de2811cd443a520b70941c1b7a7cd28a3be3a0fa1eb7b31d0e444fe2bc31294b1a16bebc367674fcde16f14281445853fd2441df18beafa3766938e0790879878d43752266dc4ecd818c13a606d3aaac36ef5789a61f725b8db4a250d1efed8caa46ebbc6fcc5e021d5c09b2759b57f77bcd4886414ad9a9b6bf22a06127e3bf139978d6cbd7011f041f29f4580bceba2e169b6174d1141283d1207bb1710ab34ba3a30de57cf688d84e1af818b5ad98e083c687ab32d02a77a3223f1d3bb10da50e00ce573eacd3fc51531a422942e8157d60756ef08c65f49dbe673ee87502c22108948b9c7294f2c158f76ec74d3c4f6befc73a8aa7399d393b808117c547259520fd1d0706205e2692fbf9201b09f0e7cae99871cf39d3fe50177e4a304f41c2e064661ed62a90f997b47bb43ad59c799849033652cb3b65629890e0348f9942dd67013440f83da2dd9d61043b33c489ce81f558d08236070980638a409cbe8d6e7178f7f53db6caeb3333908a88eba0d4110959d6e3464bab7b6098f2db041b1a1037da615f8eda47027dd9a76984475f6299a9c452febbcec602acb9ef1c7476dfb83bf3d238495787aa40203a20f5a71330d92775c1cffa0ce426042d5a11fb1c84cd4b2a4590b33f4384739f4434719f59587eb03200a3cc6fa5703a6f8c2d6327eec5ec3958d095c3e71fed507c15639db84896c1e652611fab7c8aaf3b64501c21028c860a4627c61893c8f835290c5879039df3f99c877e988782bbb8565fdbf47f8fae1d6a61a4796da68e0812f6240b4e3a3ab2d89bf6fd3fd6f77b69dee1e99b6a241ae3dff98a0c0a946d69bd8aef76f0189a9d0b3359f3ebf50d2579b860e4a08a7b18ff3fdb0d699dcda3def7a61c54101960719e3f423626e60facda0af9d743c6904be1dcc0482cb147b6f4cfaceab3d7b95ba21da94a2f8e8ee4c1483952e285d0527a2ff32aa3a0dbe1fcbcb708662e0e25e955a79c517f39ae089921b7d9215f8f7314e485a524b6fc8a0db941c9b4d56ccea7bba14f2086851a7e518aba21a47f675c32eda3b58f432733223b30e4b59cec64640d7b2afbf66178372fe82f358ec1365cc721cbcb725ebd90394e361532ad2c1f1567e7007e8817413bf572895a1b63c0a6a1dfd1e69b0d71e074318aca9b5f6b6d87fd4a9a08cc1e1354c4265dd0451d10968a593c56b345a5356f7cc1317ed78a7dc620b53e171c6aa86c82f67a5ab0799223c7d03c4f9a1c243861b30a2ad1d09bea396cc288ca96430425d0842529660764844e9622dda9a334d02c8fc3e8e474d1db2d2081b71ac70385688834f64a78a534f40eed8ed244dd5e7a2cda8b4a8b05ac82c292508ca6e3382af0fa95bb586e408cf0f02c1a8baa53387bef3767610e23ea334b2550654bb49448f6862d49384d6606eb4406ea1454f3f7628bbf7943b7effd1cb40a847561311aa95604ad9b921b9b2f651bd2b3ea1929e4f6d7565efee08a776b1f7718e48dc09373f607f0e52a384cedcdf7f179348de6e7336aa86f8855fbd903cfaea506e5356e65ead08cfe68c46ca1ac7588c28dd8fb5838c860340a0a8c5c00af2938f31fa3d8c8d31014a716501b7288af4fb44b91ba3337976ff133e39c8c72f7a064b2c2c3144105097dc336afdcc343289baf58de0c6e6bb8b6087d29f5c286b9d48f39b97fd2d259474b9ed36dbdeb09ae84af3806e5639ac2e8b798cef65cf1ad1587204de11e60ae2fe73a87c10d5f676c035cc52505829255317d6a96f0f468d6299c10f43fdc2cd0ae29dd85309640b5f3b0c9b5c80cceee692c6b1cd91e92519f816b94bd081dee6245b172eb4ae4f30ed887002195b314cd4a43007bfcb4085784a04b2c912bd991f2a602a3e9aec3a3487facb8b9f958ec3b84da600b387afffa717ff4e3c112bbd54dbcd10f18785f653603e3f60c3b349493131bb6ba19e76731bbac9c682a5e420b2a2907acb1a1d32cbe49b6663c34da003305ab9385ac6f7376ca179ba0e7ed50a2e27ff5d008f6d634308781cc7b606ec2c4466f1ecd57b949c3e1d5e6e72bc0efb3d46e83f364b4fe5ef6096c56ec114ace13a765b8d4759d2087a19cea81de3903b1912e0f816b852b6e47ac85c19a23899fc6fafd5a2af96675790350840b475873e83eabf14c510c7cd70d56858be58d47683f194d6be71c37d6eab7a6ca7338b7de465728f9fa988e21ff6 +Output = 38a06f112c885328d1b624432f16ab7e + +Len = 127080 +Msg = 089ff129ae85fd110d61c0fde63e30ddf7350d3f2ad6b9cd0dca491682b7dc91b8642bde591e6250055a2fa9009b1824279611b929944e9cf31956076cc359396374c3bfc5b411f21450e3c1144753b0c8e786219c3480d2e4893da88582fdabf218df515b0eb1ff218d07cd8c0b8a8ac0719300ed7cf978c763278136bb71ee4e98a81e81f6eb801357c155cfad65b8f97961dc83355e9683f03b1be5385c0a5d3c45ada032677cd4f739e245f58b44594a1840c6275a320275a2fdfcbf6708094cde86218bccfb4bb599fb56ada535ca2bdfb11e1993562b3d83afe1193aef390f9d326ac9c30560d806296a9b5a943363deb9f3d4b109e68f07bafe0e7cc7d5cea838e5b4f3a3fbaaaaf3e98953687b3b3edfad215d541bb255a5b965d598c4d12720f91305dc0471ade13b3d38b98cfb27abb4c63f3db2ef97f87ce8ef6bf06043730db0a0b96376377bc87fb0904debc0a6718bfecf948ef23cae5d6f4740c323b78b516d4001016e4af91963f4a65232574a3a420fa7d790f8b68d00359c41f177dabf137bc4597dd534d1faed7f7aa447a899b507d41199b4fe40483cec24d23862c23b7295c88aa4e2711d83c0a93ffcf472fdbe048635f8ed3def6418b2f0848b218d2c5d94be406cbf73bf52282b00948bc23c1d7c8a4deb4e9eb5093473e2bda6b0b1020640303884a5a81b3f8fdbf2acad8a083cc33a6039fd38a5f183db60174d096e6639fcb0875a4604359313749f65afae0e0648b4c7b3f4d53346f6dc3d0b3d87fcd02d3b923ba2f5546132842b93b3f6397bfd50c069f18240e7bb99e09353370f2e4a406bf0c3d7e21ec08917df9fc7074ce49aecc63892628cb200c88c5664e97adb29db20b29028f543eb2cf07a0bbe9e82fb1373d0efde5e6477bc9f4bf8d0dd695daa73750a6e0c4511326f4ca9a79c61dcfc17c17fff84586786743cda0d7f7b44a093162bfc8b4d65f1031d890a6b08a3705b142c0c261639ecb230f2e887994685259cdd199be44e3055f6932f36ffba37e7d0dc4c6e2753b7023028a81d4bcb20d410070e649034b90ddeaf5d23cf871962fd790882121faf0b4364976b1a3b3a457991240ddc7f52d2dec5de5aff74de74a4ea898a5f039b76718efb968dfe9b23df62a0be4d98c44cfdbdf80417e74dc6cc1714af976944eac28e1dc92d7c0b144b64cda16de5d624437ff4499f4a2f007de8f41841b873103f4c452a801e52c0c37ef2dbc3cf5202b8f31a5020044ccabf456fefe558ee90efb1bbe1104a37d152985697d7bffe8d6502b142227d6cca9b16cf590bb17d11dba3c617656984ecfd9b42fb321ba46e519203462b1d57ab18435a803c2bea3b090baff405e4ffbbce6dfe2f5b4c0a4d848c5685c54cd4133fb4598cff2efcb783d2bf9f7a2171e6ccf7d25cdabbf9d007d9f3277772adab175213a5dd227a2d51de3b414c8aa115ff2106aa38cf38a2e15f2253c9f7a81aa803d2f15d6f2d4479196e01018659ef70d4e140fcef91691a082a3144438e08fab0dc9b077ddda5056a9f08237c5f1c26f6ac47ae85cacebbbb55ea6fbe261f16427bc963b451f8fcb8157d3ad67c452970b0e6d7f8ac78cb60e9a6d3d13a04039ff4a4fa7d53e467ed1989ccfb7812822b3246feb0ff1052de2f8cf6e29062c9b19253533ea9114df0f35463531b2a380e7d8eab158b3d591f6fc5625bf2df715e9cfef6601c28b6a9eb0586462d365300d8e7668f17a8e60af1789fa22623019059cf6c4c74d1ab0049c5be3c75dddceb8a79b8866df80487fcce3321f4d7842e12ec3c6979b332dd54bb919dbcc8dab6dc6b286253d6b87ed9efa83e26a3ff20107dee1ef3775628551089d1ca9e554916e63f8b92ea0cd7d1028663822e7c4e98ab0bd5a9c41cc994eb2e406708568c80118369f2db077a2a3053f7d22102a0f59d1af564438ea8597507535baee36761157e643a52b1502ca09962dc239afe6d7da3e6ec9cb3aeecd59c706d3707c20319b8e534f6133f217bdf0b69dd4b504a702e0f097693c194347501674cc785ac46b852a67034304fe8ae5c40f71d7ed2a044da837937ca9bba1b6c0f942d98a5c4061559671d0cff108dbc2b1818704e356cae214ea6b2478e151b2eb840e336ba2a941584d4b97a1a0493f0e8450e05572ff3ac9de85fe1d9eb748b5f084ea650ac39a16f6321052f9b4a5811ab41412c1412ed0d06bbb0c226e1f0328ec23fb0156bc7cfd12aeb77db472b3852ef48dfa371a94707adfe724dc823d8d92547ffed914d4c27be72194bf33108430164966479abf3f31c1111e893edfaf1610768ba15fc8f6cc4e43e74b631268560da79e092bab8d3f233c67fa91640df5cc711065e9c40a824870ddcf9f53d20f2f5b29e259d3eae16a9b99b726651aa00cf2258d4f507e4c6a4af0d2243f31da1fc6626981d2e8c70be13c356a5d65a3366c439dfce8a2792824b8f9be4f0835436c00155023075e8b9fc80bd9a76f8dfd51e30e7f17479706b0ae8caa0dd5af3ece5b6c214eb7266e19b590f0eda8beb655ac554246be248a514a2193e62ab656700cd491a088ad28019d6b4c9aa1b3f5b9d808e30176b02799044ef88267d94ec37cf51de2ec614dc9d7f15938db1c30212eafddd221b862fa657b344d2d867c6b2434126062c143d50dd98342b535fa1de8a0af231fbbc0f8062cf3b0dc4c63b9ab183bb38c7bbed5a77a6732d0cfb7f2ce81b39ef118c6143edaa35804a999517a17e656b9cef33e2d5a8193be17fe5228d9a780167df6c1a81acfad371c81a509c9aeb47b59956108004eefcdcd31be800ed7812059b792ba53d51ad423c136e293f177619a29f0dff24ba1904df69a7c97e01c8f1aad09ee1c503b6c3dbc798d1d5af9dd0f05601da6e4539618c178771b3dbcb35f2b99cbdacd997fe8e80f71bc47c67e36dc3149a4c5705fcc06caf7ff6cdc4d95d7c4dc25a98f8fb3e84b38f75467959ff2d6cc625b725dc64b1487baea05be3d260d877380b80c1d11df3b54ed57e3a90de34e6602e4009612f79ee421c375d38ae6564acf9d8583190df16b8f01c8e071c92836784fe8c9d2b6b5f1c09014e79af1e121f29a8c84428a1391c61fb5e4c30ae24a181096c02f04556a32f60bf7ca82908fa649719f42c5ea6e0eec4b14762b15176ec06b177c5305b3f56fdb729e4aecea3724d5427e341e66e601f90e0f9c3924e8fa064e3f154f758457f3e68aad6ed841b7381c7966f802c7eb302ff3f0b7091307d8c30bdd8b156c58f5c2141c8ec0327b1a6bb8e13fc8412290f8c7ab272a79845314571e512a29ed51a3cf2ad538a5daecdeb1053e3dde228bf6ff3df21f98fa15b0a55a2a1a298f87fa105adab808613fd3f6757bc9eb8591b90f2bb03eddd391367b038e6bf7aa19439c2ef7b4d6a873f9fda480f315a642ad7be6ea2ec49b46044ccce69610e7760ea709c4b58d1b39af3b04e65fd90f0f52da11f865f9cba4b89ef8db3f11a23eb9d59dba40b833e16233290446a24a58278e1f735ac9ef5db1e629d4bd5674c3d3bc3d50ccd47d1bb17a83737e0dc2ddba2c71d393d170a18eb6d25b977bd9b5faaf7b20d07e71492b85a6ac3c7822d08919bb91a78cfa40ad9574d863ee4b858d43d992f1f29aea2ec8f527287dc500f2fa5f55ec78e69bace6a3f3991a34a309fdcb2f97ed648f39c9017cb88b33bfa622cf78f911b012fb3ec205adac3f9eff51e26f38cb6898eb1a6e05633ce99d1147ae7343d3f157171261b71800d6f9ebd491da5b1901a7a1117d59ceef7109a2cd5eed635c24d89ee605507eb465145dfa6be98562da2bfa62b202422f4485f928634fce06c507e14e2f9a382394aea427d3253e156ca66562ce676388eeb272ed5e02ea604c758caf32dceafad0097d016a15ebcd13a760b60521b968d9efbe8091af5ef545920f7dc190fda691b5370b832424d6699f7ac11899aa6b90be2a86c0cd72322afdd85e6e7ee693644270aad0d86fedf90f22185b67bcfdadae45644db5eaa3770975b56bcf3c5dc2319873b5bb23603c66d5204ff4778b7b309dadab212ed5b45566177c3a756235f34cdab444f5c99e47327d88c850b193c5a1c76b77a5255d6237f90219184d3a07dc545efe4da6a9109884886bdefc820de0460121e42efca059de8013ab8b390fe575085f9173e76395d9b15788c8c059d7bdfec8626efca05a3c88928588cd5be6c162d167bdc3a0a8e1a603c4a2d94a0673c6d3b641e7d2a7978e1e5ce2617c5eadd10c46e0e8685030d9094917274eeb2c0bcc466448c7c084032f98049ff1cbbee558a589a02b0a4bccc05c9244d8f42b002a992299e033668a4ead8bd34cac59125f1a14955955a6e3d195a0bc98c0157667352945cc8ec375e423c495fd7f20da880b1e3283c0b6c0b57acef8eecd5fc11a90d4f6dd213f6898816b7284c28ac05bff13022aba0ff5d47279844b7a8e62ad32a207b2991ee4c45cdcd363051b46536c7f8ecec026d5b7234ce94f6615eda7913d02bd65064d000c954328b546eef6e9c022d0717fe2f5f395826b0e8ac49242f2727e036a33c417213c3651922cceed9178e02c9fcfe96a0ffa1ed25189e5be6ec174f2df2b99130d492c78818233ee4ffb7e7ffadf3a0cf8badb500ea02a7a0e9a22c1c986f766b5d47b889971de727824fbea15b330430c4f31161699c8fc5e4717eeade857a8b77894104e8e2700867ff8d964ce94a29711b0830de959bbda62c4d810c2425f8ea0069e1549961f1786e5ec8c83bfb245ccda355911453f1f77aa1c86a73fe1a7e553808216b43497b44381e19519e884bb0e9b8ca4240c79e0383a73f9b8d5afb30b661977f9c78392b24808654bbbd076ce241d146e9a86570fa06d5c35a1e2838ecd500fef7e67ac928d6566cdb2b58aa96d9ed49d6fd12690fcd7214eecfce16e14aa20fd9fb06c64f08d2c0853a05120e666873902c6e95c9e45fb6d0d6b5729da9c7dbcc1fa4cb9eff42794152d84b51d188eb9e9f419d3034e4d08899a5f229dbb58957ba1e801fa1eebe97db97fe670396da88bc53284ca3488a9f8266418cc7b44203343a8cd9d71db8103d0bd259e3d967d7ed6bdf261ad50d9cf8bf05ce540e2e56f5c198d48a188f33e0fc702e589bbb1299536ac582d18107627ae7f86c0974da657a4b19a0286a882c327fee4c22fdc127d17031c1850e692a5d8e11f6ef3d17ec2f4eaf039371988a74a8a1a6b8566d01ae9973c139da48b731a321d906b094f3a6489e99a1ceea608b93504ea3ee9d8eb18f926835102f71bdcd31ff97f6d9e0a8e2ef4c9ca6071740e7032b2becd936a4f796a0c0d6a3c0cbb5474fe9366e1dfdc4a902ca247518594cc0279a79a9614d7c885023542e0c21026eb14699dc106d95d4a5756dbeca9e6c912936bc967776c46f60a7b457bd885dab0df447aa23c0fd791ce3ac6994d9ec7d1a49de27e0e57753b7911ba63bc86e084b3c6760bdbda69e4f5c07ffe0d0778ce01906e505633e3c3f2cb3a4efa9dc8c54662186452e354e262aa607154cb3c764ef5d564cb7c133dfbfa4d83ff3503f0eba9fa525d9558e8994b2099a1548358e120b041eaba73f7f9116cb946d712a62800644c486ac6860e1538ed9f3dfdf47cc3777e405986907eb300357e1e85438ff81ec8affe2e3935ab01d39ae20cb75630935048e3eb860151a0aee155cc679803524df0ba0070a47f23e220db2030120aac8e80e3e347057fd68c3d176860b4b4d742b718eddaef04079fcda3e8fd44b42b8f64d43e520f901a33cdfde9ed8a8ef64d6fa536c659cc35730db6b75d52cf88b9812f3d459424d45c3063b15c7df447d486e97bd1894a35f24d9e2bfeb0af5cb3526f608017c0ad6bf0d35f4bf377346ea9504d6b021071a419b4a75002f61ff3452f58901ed5fdc98bd7542aaf9a448223640c11389170eefeb4c9dfbe163b0ff5c986042dd75e1b5dea3076f6e0109591bf3862b14fdc5978f9041c3692365fd0c8694ab96736c8038674cf6dbaf13f80ac62bde0cdec79f50bd68420fcaa6962c682d235f820660926718278bd9ee65cc60ba16b7e59a71f67b1b5f1a80fc3282e534947fca35bdb54e73eac5a5200a296b3aba5f37c87349746102d46ced39d8a6b0e53f7284006ac26527d03b334ee88cb4b24affd90f114d421383b70313f452a9fee7a3788f776bf7c6f5c4af98d36d2fe6c06353ac15b1c67b7088c6299e9227c7bf849bd3a4f330af7c681a52b0b6b33e0b8bc0b11e46f620e308bde1a00e33280e3e7434bbff19caad4efee3480f49a272a0a788f4b4d9eb235f70a4c16dd4091ef88b1b823ab800cf9fe2b3631ef7fa3cca91985fa477c47ab467dbc858135235db69eec34917372c824f2ac98ec72eb230054927bed9942e2f2bec7e76f6eb9c0f951644d73e580a20ccb04105c1261cfb8b0313a9064188fa4341ab7088bc9bbb97fcce8a334cb2a1e1ad942beccac252ab2eec0e06b5d03a374017edcead7907f807280a00f96c2c16898aaa5003eb5eee327a94e2d64e1a90538996d2a7801c3f9e1c00ad4980e9f4aceb27f5b7e047db7885e4a18e4ac0d5e1ca139b90f622f42b701440233501027e7f4de4cfea34fb66d5a54bc40b548e52a30b31522440a015ededc36ed49cc8680ec124344f4dd4653180e960daff430dd9269dd3529fcac45b343d14a5e1cfd05f2ebdcc57bcf0de631d8249ffe87d7c370de6fdc867faa08290b7fcf0f99e1f3b3ab8814ca6d73731231e69c239c306846814b6cdbfb81129aa380efd0cbebe6a8d1c3a74360fda643bc5a76a179e1387de30e8aacf8d7f1a29c8321341b513b4d0f1df1991222dc40c80eb41ac950b0918407aa8c000521bb66f507cc00d88e1ab3f5781e2989a183f561d8d203057d2be4f540dba9af2f5f936507eb24d84b8c50f8cf44ff7872a7b5026979bf75daa77625e21e4e1c77099241a623ffe6f02c76865bc00c95ec06975eca744738659eb83802e675f3a533f4297708ea7b0875853ca201e9586a3b0cd5805432b3aa6c3b9a27a6b9cb1689297adefc8d0b10f21d7a367d1e4679bf96052f8c1a7e25ba70dac4e171f95753b2b45291402d962cafcd8da403d696fec37c3c9e670e43e3e8586f293704f43e10648649bc39047faca52c19428f4e9305991c1d90daa18312c18ae0817459a2d319ce9849e3e88594af764f42d70cf6ecea626c3069ab027074bca9e9ce141c7b32b00f8184beb9083b00a89d545ea4d9fe840cbe41ed0c920058d7c888a025694dbf01fbb2039477d66fc7ba7db0276d341591a2e9d3ebf7e2f41cb63a7a382dc9603200e23392541ff83f12c9bdf907298b7d76c7fc3b029b22cb2b3a2edf594437f2499bdb5d3d665e513eaeb484485d4a32b272b27452a74965a02e2a854c4caad52e55673f9447e6a0a6b34063a12df653ee50b3225885fc9ead7cf9c4a7213d5d379573d3e94345cfe37dfe21924a045373186acf84b5a0c8bbbd1907da8053fcedd26d94acd6d0116d452a18ac0ff8b3e90045c687c4ca66535504e956d8a326c9a2d0fc6f713a37bccf70e34f0e47e7d8ced0b1b211fe09fcdb49c3bca89f8d537d3a95a1b0d8855a735f0c0bb376719acaa81b945ba02620b654317c5ebd7303c7f6dad4043f8cbeb730ed52ae08e3d78a186ebed0554d578cc0bd0699618a5329b25686e9d3d05221b311c43c83b0f793be25923e81d219b4fbb0ebb73025ea08e9732ad039e2cd394213c10d5b6b736e05caaee4ba76dfc571d7bc56adf800ec08cb4065d62688746a6de99f0465e38f9be86571638e2244df7bd8e64f5360499cb968093d2e0c59988aae502352c05ecce97643119a89a97127c1e478ea60b811e7f248d36bd15f58e47fcf1c948272355821f8492e6e69f36617efdf0f8aae04b17f934d626ffc2825ee6a74bdb26041af290f8eac491cb2a13b56c63556a1e1b07076ef9440c682a96ab0a020c88f9e78dbe736b6b2285b83bcb7e31e5d2a356f75624e83fc34f4e9854043804d76982fbb1de5b032134a681c919a0cf6ad7c48eef3fec3eaddfb80ce97c33ea9abcb4e5712203b3173fbd8cb627fa3cba232c75d9a54b6950812f9870593de75a5945f30725aba48b10c5059a8f85534bed58541c404de9369b7ae7f3859c239eaafdcc7ad19bfe050e86937d398a3da49e0ed2c1f63ce6e797629f79e798c5ee16a419d20d1ae80da1c8df680d50214d9f1797ceb15e87eadbaf690b677bf6d205018117c0718a2c31529162f32128cf573b4c4e58fdf5c6d129ecb0ed8bddd3dfddad52d4e90de926ed5074d34379b12d419946d35f5806df97d1706112a3780d00448b30c899cde961c4a595ff3e7b8bf325c00accd72f6fc3bf53ab566f4af532efc8bc56555fe07696fd219d9cb6d81799c3e58e9acbe8735f62b4a06ad0003b561360dd6a2774f36e845f65bde97b769c584cecca61b27059a46237bb9296e2207304a300ad0da2f343389fc99cded8d786272d8f7a358254229e658c1820f0f6f190f13d7a1449ce419292e7576805f1555e9a109dd870f8e2517002eb042e7f93ec0f4c15efb1a786578740a381c493cdd97b76520604eeee61a14792ac6164630145530608a2241b6dc6fc0791de65f78018e8222404de4eb84083957e544c69b5db7bd6c6e4f007be97420c001c0eda3cb88f939b396f083c95dd7de4cee0acf118eb0c903eb15230423a383744377ef3a4932fd36b4a26d7e77ed04596c8349e46cc30d0791005ad0e0e169c1e87ec8e251b7e346217af70808e190975ab09a2ab45caed5db4271c45e32b9874a72bf6814f0727e57daceea634dd97333134e78f7f634fb246c0642de401940c3e431100585212be24243ba298a6599803bc533ca1825e406dd96f0e361ff6aff53dc9ec5ee75eb3b51f3ebce3fbb66bc9a9d0f9d4b082cfd2782432040d27257420058b884f748dd8a6df3b3d6516762a03450d407423261ca86be07454903662f4ad27ff11ba1334bf0669cd6be17fcfd399c10c56a90ef46e2c5fae7b98aa68c2a806ebb59a0f72759b8cbc95804f6021b65d61de7c4f02d44ff8db0aa6482d91e07073c37b4739cd86ed316b59ae84f38329669504b1ede1bdf3238924d95a693cafbfc4c58532d1afd45576d564e353e86c4402a9fc5e9d5c98ad8179259652a40af840df8f0588ff88503d5c382648cd7022aed4f7fc11152ea27a0df48a5500c846bd332d59fa5c53494857f3f5da1a7b291feb6b7044d1ff29fa480edd793832d0c52829d630af7b68202c5df712b7d680df5820613e76516b8b923b38c73590bfdf264a2531e149d74c453ed5f78dc9517681de7808ed6d90b453424345dd2a3a949557ee05d805bb54085e3792829bc16ad06d5da91f9bbffef3eca5fd19476a6ade19d8b57ef73fc1df85c3e97f96fa45ab94b729f32320efda0107f7d23077eb67588c48ba67881a317a24076d00248e7c1c2e91504cdc117049103aee2e889f99dbb2c6739cc1e7660600f1322266ceaace6be8205f1bec1e8b69ce5787c50ddc6cf13893df10b1e6f100b1b844e98c9d7016364aa404064a91b9bbf38357bd99d1f1a501789dfe1803cb4de5aed550bdcad784b663c0e95e21a909ac6c663736d35b15a5af915966030ad0a3a751a372a654d94ce4761dc004e1c1688819041d3ad79067cb144737bb643fd978850b24ca383df46e4f28da0208eb112199abb4ce0c1f2f164d52f4f182a46f6a9a123bff29b8964b739412e2c68d8e7d0eb46557a3c9e5d66501036e0b064cc3b8401f0dcf531ac109e9d26ec5b1c7e49fa8979c4397715484dccdfaa86e5acb061c38bcd41568193aad816caa5ea4a0740db166958fbbd8d06cba5c01e380ccad2eefd4dd07689b2d6a86a5209d0df8b66e1d7d41bcacaa7438335ebd6da60cd5feaa1c952f038e0ba74be1cd75ea338d5042a9ee232a1196c99ec68414b4d4a415d25da1971f3cfbed37e759ee239a203d88b244ce1e575fa5645d00e1936c45fad05fac47a5eb26c3b2816d10a07598bc575fedc471c2f656eeebd7db291cde350aea5c457ee4b3b12475b1e44a0c1c5617798e0d099b8364a338b10b5f2c984feac6599b906fcb3ff58ccc7107a6d59130c8d2b2d0293055ea0b37771ee39acfd7ba4c51c5d396f68e8e67bfc08cebf80b145ebaadb623b32d2e10294c8b0d3d3990dd6d045a3b5d554329d75e0785100e25dd2d87888405d367e529d26a1822770eb3f9344ae3fdb373bbc0c75dcb63a2c3f51348e87cd4447f5e7d99c8e404fbfd77fc3fecb55c11e5c482e5d6e67830b54e75d71e33a7e73e222f88ef986e2c24d07f0c88da04d562ed269ebcfed71ec4915a1c72d006266bda4786265de5724d67898366797d69b2deb3dc553a09d5b866cbff2c7b7968d02dcb7db45bf3353ee3228ccdbb4d339d3e3186ebc395be5974cf68935e891633c4c554e2b91fddc0ee520f07c8fe9debb5a984c4c103406e646e3ff09ebd965d463cf3f8a0f1d29b2d22f45ac7180d63ed22be285bdcc2c1ddb06c8b669e51165c39423e37f27d974a99230fe021edce8ba41b61b9a6ae18889ed7acdcb3af25aec328fba7a9447cedc0856d3da3a4f43a3786b604ec6b3c0d3f699b28841954e3e29079179f9011bd9d00be03259a9da0e4e46e643361f5139c089f7399f569a49e5ffeb05aca1f633b7d485d30379165b21ed20005f80a42bb9d02e57bac2d98007ed39964586e869fe555714be39732aa1c2a01e9984544a6110aa5b1a768680fd540fb45a4c6cfd31e2b67fe0679afd2c6be8e68a96cbe654a00dcc34de2bbd44c8cfe8314efe6de121268d108fd833404d5d00993485bfe322cb13a05623a55cc01c9a812b072c8a7549c4d51ec56d8bfb8ef54bea1c07bb0d54d9c39b28d9c3be5853c05d31c99c7382af9490dd2c4ddb012d1933f98e3ab44d77450985bb1838159c5551e8b5a59053a5d592a9d024803610978e9893f0dc27847b2dd4c9a8a1d6ecd695a67134504f602e7095f9ae6f90583d6693b96bd95589fc64909613a01ecdbab4f5aca737d846f5d73c192a1dc26c7168558f0a3059e03f6a33a0e7974fa7882c40a89cbb70c2c21306af460f2eb5e9e068556a75c73fcaab587a731bfc02a56821f5734fcb7c29d0804c80b857dcfd8b36cceb1e0fe1148459636492b677c9052423d9992acb837c3341489db04a22a56b563a9db68ca391c12c2a9fe17f396fa1b41dfc214965928a4e2c43ca760feb5081a7793d8afe502a1543980f719d142516eefd417e56a01fc39a3f28e90bb9a0bfd03517749b4beebf3e1fb3075a9f48dc9b110dc2cd214e3220e44e2bac9cb6913355c6c1f0f1a99a789b5e98f87d6765c0dbe8cf3f82a02a3ed79cb669010c864f6fee0b95cdc537819f74bf0d1b2b52eec254ec3460a01c728da701d7833d1f92c7dfba004cdc06f79097e1ff14ef147348e4b22237e8793a8affa66e9fa2bd9c122e45b70b589939133a9a44d72d3b0cf41ab9bf74c3c11534090ca4b2f7e0c9b35c472075c56ed49bdf5084fe80270a38695b32b3dca4812d45bd00698749ba4fec26e3089ce838aee89d25d77278f9aa531f42519d640ceb4830082feb38dc2c407d65506995f3a108e8ae1e6ea169be5a8e54ea80b026d292fe22728e3eadfd1bb32dd99608943692bb942fef20c8d90220e0eb10e95d97987ff5ee0adbbe26b040b300bcb078b4289e6e887e8795aecc6f8cefe8a01f8ecb4de8decb907b3db0de7b62381e3fce2cf993b497365e942bd2af455254fb4ccde071e15aed63a69fc51d7ab2b257d93265aa30b3cd922d92f2cea7f8786f35f2c03772334305f5cfacefb6970d3f59bb6b28897ebdcedfb4387164459ae9fefc75902def51e0afe2ee88a27f9f74e43a62852b3277732ee21c2e26b43d09fc2d791250e96a72395c126ecab6d986fd31f45692898b1d9fbf265b5beecf2db2083344a7ac2d4926ada1089bd75bf4093488f35bde792ca6adef9f603fd1f3b53f3c9d8eb1fac3fc5a22fc927b973a9ca4a901f3cbc22ee830c050f031d5ca7a250d83729553712ed410a15b0e0bc92c24cd08d6bbe6a2b8ea5116786f5b30754c2e9cefc0d7df42cde2ad31f93a2e3c177d6e81496716ad2d0a566542d2b43b27085072cef87cbc8a1156d3d792e8410f22a99fdec3f9498b64a74346ccc430483334980a25c810ab35549d23b675df7e65406ef67dd8f287e87f9ef5a9ff092227cfdc1cf04fc3a3c72d1a6805657bd7bdc99b1af5245ca51e55d4da0ab30a376e789b71d8826a063f26b80f10158acd84bb90d6da69cc657eb0816e6f9ec80a7fc562a35efe584515f81293572490a2629cdc949e27e63b7216312d38f0d72dc43cce2be41232d2e407a6af5b113208cfc3faeea0dd2ea9a0fd409107779bf3d4553a66186c7e4211ebe09d9c49c36334e7684f92f80a3273ec4c245b91aaff3895440c6c7b9f15280b5ce88b5ce9443a6da131d516fd687359c06195bd68c26973576940ce19ceaeec783ab8c9081e38dd322ff7989cbe17cc29d3467979cfdf86011735b272d11f05ceee94fc9473b8ac97b46b2b5ca5e9ca04f3fe44429a1333bd90dbe73ebee0fdcd9eb08632c742524e49b01db1a261c9ce4e2dbc5793ad03095073cad1faad2af0a59be4579b6e64c26a670e40460842023c45302d4ef58a60f0cddbd116cc23d49da7a57752856aa090e06b6d0355d93d58e54e284e852050dc2aa8b095d65ee601643816af3fca4547ccb3ac6cc2d5dc2e7e750d04e46b458d1aaff4fa5462b15b621ab9e3e60a3d197c8582d4e7fe6b2781231ff49bc1db8e2e6022a6bea5a32621cbd5a320b10460804f94fe2d8956de9df6e5a003da7f49d647ae4d7dbe57dc13d9fe6f784517c76870372b1c2d4bae156ef299c50bad6a92e51c313a032bf7c8b3a8ab453d03b8a5a60dfe2c40b63087e9cb4447ebe24af4c6d1044c1abbf3a0e748e9201f34aec84f6de9e67a02e075f5d42214e1ba756c4b81295c6b647a4cf3639b8152473430dafb60d31fce486011b1c5b483a2747a018132c38bd1d62d569d54e17ca7c37fe71b156ac874d2c6dbc8b19f4816c29e87759319f270a1b29f3a87e904c2e725e2615a260a930a2aa2ad583db593da5a2bc2dcd815cd677d1befb6e0714519935b52b18d4cb5690c04b42c2842b6363d8cfd72768c44920d7b015460489ad578c063be19053889cb8091cfe775da70a91989f69dbc72bbb42b3402f0f1309516a018d241cab8c71994ba95e3d59cf42d6fecdb863cd43f31baec251b11a2f32d78e680a01392ab56bf8330b5d85a3b5aeeca83f873e5a6d6988e4d37106e5a0db9516bbc6672c1136fa002d5f4bed0921477923cf8238d4342beeddd840f4437ffedd5ef39c582c033858ebcc1273e637f8888fc301a5ce857e28996d2e24c5cab1061b103f78afd99a856d2b41fef5f9e71da9ec2369036369d92db8393ccbc596d81ba6ba5241c108cedc044256dd6efc8099d1514b1dd6d44bc141c9060076969d863c74af8bc26a7a60e07c43479e20f888faf115c1e6a7c47e91474809e7979b845bd55634e4a8d22045578ddb9239cf9ef06d8d999cca8d8b2f19cb9120821c3b8a4511e52fab1e45be3bfb4051304b023a2b7c4dff26ee11a3a9573e274066d6512ca646ac59a6f6d090571fe3eeb5dd6095a98517a12e38765eb4b806b8c17b38f2defe629bb15c05be671f515a5556eb11dee8ed2497272f9fa9a8c5d17753c8ff81b65a5a889ee42df4e9a25b72966209e11e88986f0756d6ffb66a75cf8588bc57159a7c74e6f546c524dedb55c44de47bd0f1e3ffff736a7e89ff8b1039018f27c42ceabb59c16fa4790ec14709350a74a62eef8f380fc3eeca8bfa8399b9e1bb6a178da521cf11579039f58e8da0e3944749a267dab149172017ac70ca3a1bd9b0644c7c66a795a710675e727719d7a35c49e6ce0ce264c134aa881ff70ca34a3e1a0e864fd2615ca2a0e63def254e688c37a20ef6297cb3ae4c76d746b5e3d6bb41bd0d05d7df3eeded74351f4eb0ac801abe6dc10ef9b635055ee1dfbf4144d0e24057b03e76149a55f1a42d1b6537dffa21349519439271de2885ebb2275e24047fac76908da850e143d04114d5d152e0b5aa99d3c20f0bdebd0b9214fcea60af625682548ec0b898530284c2684281d26119f6c3def4ab0e03bbfb6f28b12bebd19cfa12e025798209811dac875113db0dc7d372000bf874e3dd4f4a137b2ec1b4c50753eb9f3ca74d97355b98c8b100a1fd59668e1a9b1a45b8b52e25101038f31ad09d17f6a910088af455056d024b0603b029f2ea3b08129556a2c6377a5976e37e7bccf167c420a381243409afc32221ff439243814530bc5a2e5eba142b2568387272591fcb7f2a054f8f635f70de9f6e3ad8ed15d98975e85a555f85b6e9f0270c71f6782e0b67a75f7c45bb5b23c427982baf9ecc040828af13ef7602a8c472d031901bf4aea190db65756a8bd7da4fe4f252c52688bc43b400318e184c2d43461befaf254f22e74bb1bc1508e32711a7979f31f0ffdb61f284ef76ffbb71bff795daddcad630d538c8e264db30f49368815b8a3250aba9ef08efd5bfdfd8106a081b4de92a14822912affe0ba588fdaf18517af263754435f2fa54619eac5e27dd78a68d351615a6f7eb8ca0292d7805c448a73a20805a4cacd89bebe233d0b77aba91bbde7db737df5db5a3a6292cf0ed07b9116f1612ba9c51516892b78fa149a9b57d0d938f6532ce221b03c540fafb575980387d94092c2d1edd967ec26db00cbbdaaa9ec6b758067b102849dcab56002f8d63fe09c0c333ac54d6d092a419ac4adb9ee783b6b9cd678bfdfd2a8a66cae243d8e19968c82ca0d439f727cdeb520b86cfb6efe8bdeb8e9269284f1f947d1ba77f6e6b88a5e1a566a93aa8708ec4a5e5265332d7cd279930571476f246e081c340eda8a8c11761110ee03e166acbc1008b05730b4f4a306aac07c58ce5bcbd9e04a5775184997cdd4e321046e72e07dde715da0bad1cfa4a514a6474dad97640b1df0109562e9fd2527847886db71e8620cb905f4d65a0d72e257c328cff55b231e36d5b9f9d72f902fa0a64642caf03206fbd8f99edc9192bdf354f62f601fb6af9e4ccc7af9c5946ff82633456615acd498823f77c1e1931c2b652c685232346698ee6362cc6fa07d1d60c45fddd9511a11aa4d1d947de261428c31f766333ac7a923055dc97e52bb62fe7ffe9cbbcd3be9b9a8ecdeb70f41eb22bd48f6832837519328a86b8219cf7b57dcbe1d1d5fbe9328b9620b2d881287d104f99db28b5a24a753ef4d0b640db8f550fae9aea706a0701519a461db77ab1fdf75b631d29494e80daec88ad01ace6f83418cc021c89438327024c477c5b7577349fa91ac7b24cdbc437880dc6b0e1eca3e71026e68e0e9a80226f5fba15f1086e2b552677256d0f669d77de7631a9bbc3e30d5db6c08fccc4c0556c58ee4e370dc80e4a21e9d9a327e5fd29fb7565ecfbd46caf7468efa45ba5a6763e2fb48c793e7c8dad47b71f6ed9c3f53cc53e08b581d42408ce55a7ad990b86541f4a901b5548f703872f0ca53f714a21685c9658b3eec55b3aea5f22642ba2820839ca59d51a900cf16bf133e0af3092a8e61e4c32629953f4d65323cdb0d5b030a8c39c859961aecc9056808423b077cb0529f8c6d7a8d943400b169d3f24c6e0c0014d2e6e71d262c9c3f4f278d1b81ae03ec637f5fbd6715010659c8399ac60a90ed29841c861f93cc1f7f4549c3edda0e51d4c659930c430e97692213b4af88a72958bb96f41da11d7f1506017ef5c6ca665cecf8ad185051eb347c41288f08bb3fccf7e6d5c4d718e4acf434cb4de6d0a0786dad79ffbfa38838312274f8fd65b712b39ca9899846d6a39a54376adca9869392f87847034be4d0db381851f90f25b69928fdf0871fcb95630031b0facd9f4b276a2672ade387bae502814e6e4fe224f30c318e061c3a0ee8a948c4d3b5310b856312f721e2e742e9125e22df8092da6bc6e2b6a7b4b85c85bfeb2ae9e902612773bc6901c29a0551d7fd93bf49ae635dd98ffeee81bd1ad4c49747cfe189c8982c813cc02b167ea9d3ee05a013ab4c63c4a7eb4cfbbed65047eb9fd8271dce51fe1fe6ef54c31b7b86bded0476fff1f808c8f0359b43fb82ca56b7b53254ceef58c6fbd1f846682170dbde6edc4300952641a25ad8d316e6cc4713c98bc566badd34e02a8e06e14612c64e41bbead4c5adc0860f5ce2a4e6be5b3897abc6126eebe8386b8e8b1353fd0bb12fbe7dfb03ffb3ffd56009221d20f19a921afd4e56154f78e752598ac5902aab7b2c62efdaac9a843faaad0af484b8be6b41c1971ae9d90650a1e894356c9191d6be303fa424f2b7c09544ec076a0f1865c8c97927ca137529d5bedc0df2ef08a4cc7c470b094b1eeaa86731c041633d24086b60f7369d59c57652dec9b3817477df9db289ba020e306c9a78a99b539128992deb23cfc508c5fc3af8f33ef769c2701aee7ac7c62a145a452d4dd86eb8e5e3877417f62926adefddd714e5bf6d07268a7788b2f5d708ea0dcc07a90328de801e985e3a4817efb9c1e5995857d2d85b52ca2dfc1fb9a0943ae1715dbf4594e749d4611c9070fdf27d911af74f4f98970a72c503b2266e0182ea059701b38b91af94cb1d90b66b126785f4630447da5227fdf88a4bc1b38a4c525eb568d735179665e6add74cc9a22620cffc2530102521c832c04b0023c71db6c769534513d1b4d46e4db2c87c2a2ffe084310bcdc788e6e0e764e6631106d93fa036f61ca68814cac8de1adf502eb7a27d8553281d4c45bd5ecb4686e2eb25641140bd1ab34625b3beeb261e6c4ef21c91c7125c2c27a1e33c41b8b2d5a929a372bb70958ddfe6c86d0c388a408b181469fe32af1ba0621b27ce243012c74cc66bb0f7d35bdbc1d37e48386df16c9153ad329a6a1340f02bc77b7249c2cdf593a3263a1d46c01d9a98a80e0daa7ac5a1046b32d43b8db3dbc64f8a420d438ed4c32520ba761861e76432a3b3913b1dc516b2e237bc1114f5c95354661ab27e4f72b593f4126af7808af0dda6ce39ff898c0e92d9bd54793f7b8db9fc12a22dcd59df7b11433f462db1eaa5308afcd4b30e882a0467dd4b8381079f4b1c99031520aabe5a301eb6b88127e497ed0a050c432792fee234f38786c9f09c612168f16e1f4517028fafe7a4af80241eedf85cd4f3b30f55e1d71430d9923709c1c427eb44f890e01a9984bf8a631f462d176b68f47381e86c61f127416f643b027f804023bf0cf348dc557dc173d08c50c900a833bb9ac55ef8e814096d6b1f6a01c415c483d562a0e023835a9a7e19e075e53cb774a4113f03bf9f377693de83b2bb112d2a3156ab0eb57c60be73146585e0cb8884e5f795ec3f6fd57126a0d5fb2cdd689e69f7efccd50ed8c9f5a66560bafdafd5a69dea1a302dea456a8ce642e1217dc5c46cf68349e1cca24df76a6e3b7c334d2e2bc5f55a807fdca8cb41f0a08472898cde489cda9e4331c32efb172aed1cd6c7caafe584119b1d27846b6e32ae51d107746b7d50ed465e9e74a1c350fb7357b7a22f52788846f031e0ed235f4822847f57e9907375dc1128f0e2da764c3fb747dacda4fc8c883d0c075076eefaeb8c3aae4a3c0bdf0d32a7cb49c4628888e0bf9a1143d9c56aec01201cd1a96bb6d081a214e8dfd2e1a9642c5be9dd5856b9670c8498d7dcf3e65854d79b56448a389b5bd1feb8f7615ea73ca2b2ae64b22a8655ad09bd792c1159ca0b3bbe2c70acd20008e55ef6943ab822a5859f53a31b66a014ff55431b564cab3f1ba9cc6e146cba420599768323de07eccb76cd32744d1342e365e3ca9e781efca2dfcc8f58b2b006c6311f3402621300edfc7c661d84d6be1bb60041cf264cc93827d3d861ec0bdc90ed9bb1c08c6d6851f90547ff53121011104387d29e5c2e454a89531562f24ccb968f0243a43eac613513dd0001efc12b3a54a3902877b3311197075d5b8edfdff4a62d75f2ad5584774c3109d89458d3fedaa0f00cc5e16541a5fc2221061c34cf863c3dbee3ea2188584a031e2a5d70227e83d9916d3f47a55a3b4afa838c32efd736824f08f3a231e030d41cd859696fe7563500985640045fcbbe2f2db5421c42242eee43f86e388cec661ac7d328adbd21eba16dacb9255bb467072b21ca1d6e0d28e3bc82ed6503859f601e5314a4aaeae3bc15cb18d1f7ff2ccca65834bb05f958769c188782ee0369350661951b54bb0599b73bc6d0dbb3f4c4c5e0e6beacf1a6ef0b43a455f46fabe3a78613dc639b39807c822ceaaed8a939b1434aee0dfbfa95308aaca8bed04db02849f6ad809367b88c2ab1e7197732719109c612d0223cb134750741f32e36e5b233a75753a9778a0ebbbc8ec39677b58eb8c4f49d6b548b3e8c1de83c9150c96ccb8ca283e7513e2abbb7a85540604cd0daab5a1ae02a6b77585767410282a67f990e55b955dd1c0ab409fd767ad5807ef6e30df288a79907601b85a988b4c21225953a9cfa046bd32d1a55cf4ebe97c195d4d5cb6bb15c152cd2091d2cce674ef88a17d5deac75b0af527807c303dac03ee6794e9231fec945e5bc44f5b9db5b9953b50b09be80c7c1192ec7e18c91a47981c3220410c54c32ba66c7eb5b6660905adce78423d540ebd73eb7b1410494ce0d79efc934fac67bbbcf4d169d52856606531056c1bc44b5f4717e3a0b7ab9c6f2645fea87e45ea94fbe7f7f67e5f4a2bee42f87827cfba8d88fc585d03d3ae8984c186ef0cd3d43ddfc052da269d2ccec55ec204d5f8c4beb6033987a9340bd67f9c25d56fb8bd1cf52862834244a6cf76fee2709ab1f2696ab717defc5f3ccc83206c0a3b76fdc8c85aa79075f810b47fadea7a0a9dec23f3a263c191a7a9d21c08c9ebe4911eb7c601a270261a23044be63a5f9a1efa650d3fbdbdedcfeb8db6cfbff8ff99a8607aa7e3a0c74d3645683262bfcdb7a5a2f3f98642851a6a65ffcfbebfe0f3235952a7dbb0fde3c2ee510cf40919ea8674646a4dedec39bee1438366bf3d200818ea9c0b1f2e80716592e05eda034a054fbafc852e878041861ea5186568b2df15aefef249dda59a41aa5703911e38ba9b844abc72eb90aacb0d8f7450f83e00e61c4b11cf7fc5d61903db92cccf491efe4cbf64597cdd53368cbceae06ff425e0cf0aea2ea9538d423bd88cebaafd9ade60d50d50dfe8c35f08b7ecc244a7b6bc13a8fbd5eef15863cef8428c15b8c6b28d2627d78925838b2e0b0a44fabb2bde96cfc7639501afd41995641ca41d1b211e1d347bed260c615920c40706910daed4c9cd464016fc39c84a621beaad10809044c3bc806cd66816839a770cdbc4c33a318dfc74a3d60b3781bd183dcb4f8780175607e76c6a15e2ce0e1351fde9b2538179f4a72ac5af03d5d580320a107c6a1f5bec86974fd15a4a8f7a9a7a04d2ad5421dd6c3e33bba9a15be24bdc0bf5cac755d8f29fe040c993af0b3ac28eca940416051830b8a7858eb0cd0fd3aa7a0ea9c46b9fc8d3eacd23dd43a789e000c42bb70a5fb4bd0943f8649ee263747fb231380302b49325d195aab28512b0fbaa35956b873cc9475178f7d6681de28d61e8113dafd59688834397e6480f7a31b2bc2197433b55e83a8adb0205658d197a48f08a1bce66893ec8154d64c294397a29ec1bf822fb726ba89eb03edcdcaa87de5666cae17bbe809da3666ffe97896cf975783aa6225c614ca35f98d649c6f712a35221d15e8ed53ee2bfce061c8807b53e1a7f17532cb7f1997ea7f45ce5648067dad4f07770c92623b8036b6bebd6e7a6a13a091669dc31e18bc0c99e8c3c92347f48d16f0ac8de16eda4a13dfb570b5f7affedd48a4a880c0587a887320bd269adf1e6adc340d11cdf2649eb5d149ac926355826049f6e897a61139f6d4ecba7f564c2ac30eda9a5fb0cb7fc777c0064217eba736f274fda68e1bd5f9471e85fd415d7f2ba1bc252dfdc9df9d109f6b10b30a755309eb68f4f9de8304e11b2f1c889a909e557b5a3dbfa4e6c005ac85021ff8143ef423d089cda36ca00aaa61e4144b86a392dee099e0a5bbb7bcb0f92343fdab7f1de4de6ef4b2b7542a95c35ecbb888c3c0ae60494614870a9f7272780763629feaf63aaa54538da9a9a2fc919628bf8447b38153db39714215bc960b54706225c5208b45d7ce1626ef9ab5865ee5527190b5ecc1855ba2e685540de3106ed399152b7948646a79536444954309356a0f017c489b2ec4417e5903800825a3dd8441e0aebae271dfb8716a45d280612fe803cf3ee7bdba7792f89197837958a66cb304cfa33b296fde7cd26c3bacb0c883ff7876af1a866cabcac6f95bf6d459dcd262870c56db524cef45b384746c5e685b3d97fa2d704750376a4f9883611c5906c17bfc1bceaf8a308bc2b7bfdb182081e74ad1debf310aa74440430745176db7e8567b724caf21a96c40db77471f32d73e363b15bd5160821d75626cc9749f4da0be91439b7a98c0b0d5f983f69a26c7090440bab0d0da30bd95009935587730b15b4776043777df1e2a18cb31b285b7125be8b5e1d50019ec492276d1ed7ec9e3d7a4f3cf0f476d80e740373f8fd5111fe43cee98895ba67239d2ebe45b3b7efed7b0a244298ed29cb479af6a58a13cf946434d1d13723d160c17e0b8ca37b8c906746cabaed7753a37cc1bf8366ea0682a05bbb79ccd48a16bfa3d9361f8e00d09f7374bc5a7c0241b40633250c6a533388b1eaf4cf52ddcfd81eabe48085c928b42ed6d97881a2106de6f60cf30b32417dc604d4a71568c6bb6cf81a8ef9620325b74594b01ebf8a1ad27cada353201700067d9bfc9297c5ca1d523a933f47fa64cb6570a9b9c7293b574b79a5b8a93ea001d9bd28610737949e2ee725ee076901d99affcdc935784fe3c71362d23a22ee368dbac2f72386ab6df282cf8c1cf98d407a8484e396f1e91693ed73066f6e3b132e0744cb694d6f0b51afe87ff50657be78b1779f6810675e167a5eeb956b27362f35366464f65004a0c119502c2a01920a090e43357e7b28e33c7ee858b4330e05c71048931c0ed88468ca931ecf0b79c2fdc1756b7675156ec66b8335e3df09463f5aee7028fbf560f984cf698fe5c4280229ac96a2e5923d8a9d5299449bb665008ecc889797e9bb15d04b88c7210fadb8bf6f238e5d2dc41b9ccd1f80e9a3e6ad147948f27334172025ce091f3dbac873fb23be834c4696dbd259251359404fa7946b3dc41e62f9bb0d9d46f29c640cd65560b44c238b2a5de69d36665b2a04827728e386e9d4d738e05fdeebdd89ff5256ac91238359e30441ffe0047fbfa9c04518b6b56628344c567c3d6571aaf47a877df1b3dc4175816cf7ae78277fa3e386d133ca23cb9547c878fee9e92590a1605b4277aec05637d01afe3bf2e8975ea4e8f74fa34d7eddceec7ff3b4a8688979ab0fe97b54e9aa03e05bca6298d8b427a65db0550c5550d23d5d1d54a1c0751c03b673b27db45a80de439de6fefc6697bff396c9a6bd436ae1f2c159805d06ffebd2b0e4b94acbcf7b4241008986f87d9c356d61ab2b47f180fd8a33e272b17dc9e12ba2861160583dd43e3fd6fcdc31a1bfaecd7803b11e80b9c26446c5f72e346e4e4c62bcdaa39c75f00555b2a46c86eec56d9bfb314a67d4247b0bab6a79a1e69362ed817d4a1da3f0e1846cc386a23f5bb285562afdbcc90ad8cfb76de8a8c695867523dab447fadb64e17fcc089a4ddc4cd2c910b0e604f00e016e84139f9abf2797f8656a91c6fa000b60206ac586c18cf2a8750c7a146eab2f354f531cef8ab6d493cfe581b4e73360a26335ba7696036398ea58ef73f110c7a0225fa71182b4a97a5cadae212d8f6fdb06f1ff99e430a40ec32ecca001df59339f71a4cd31b18500be3b6db83764a76e7e17eb6d16a5426ea20688253b7762643931bc5f123e05eb470746c68f6395e15b20246cb7c1cd5d0978b87fe87951b6622854639eaa9a8e99a9dff8bffcb9b8009331254226834e6bedb41c9345c5aebccde3674197b16f189b8fbb23a0916700f98803404422b73bee2197e67d3cb1ab8b0fd6a575e9016644dc8a64efab72fecb9f932c9b1a2c1bf2875e3c701573a0f8203e34d5bfe9e54e4ce2fe4a76704c71ee61719be8116e834bec2fdeee495f8ddafa7a37948d280067414a4160c36c850adab9e6fb0bb618e5de1b0a25b719c486b7d00c157fa113a241f35518f0e19d6b8b6fdce18f853beb8088926a517234b9f2f0c39115e2e0946164060d9d4df386d +Output = 6d13cbb91cd2e6ccc1788c899ef8c3ef + +Len = 128432 +Msg = 537c431754e216d3c5e35d6229c2dcca8050b6f41c6bdd56b0c5cdcfaae77ad2c27586c7d3b3b8aeea48aa069d42c1ed9f5b6288917a63a51a7dc09f39369082dab33770a8c3dc4423b51e74f263023c7a7030f9afcd60d32a820f9e7dab7602c3c0bcda7b1a6bdb96b32176ce2e88ff3a17870e1f6bba260a5b20941b4d149aa4247fcdf3c14bbc6bc91bd2daa9397e06d8cf90895c5be7df905d49be245292a565e611b8bf662fcb807451bddefe00073c714894a9295dd4aa2d850c391931f00d5b6d731ca27bde5f94bb1fd5c0cf64cad3fbe9590ed20e30f70fad934fc1aaa445abcce1e9eacbeee3d8aa956531460b5e743074f18cb8aa25b04a3ade88feb00c916a1522c2bbb5ca700426d66fd5857a7a1003b9d4f8a01e308b37accf12bb17e8f6c0354cd53daf4ad590fcd038c290d4310d50f2f69b4a571791a3dd0e4cd07717ea09d0420dfb2fc6dbbe9e984a064b3c9a9d2edc2311ec9750aafc1bec9e08769c889629ad17e77e10031f1ca346a7d9b388d0cfbedbb9b27da8726121e961bade99e5b3a6693aa637b59ded57b6b0af5ef91ff9f61084111f878807761a4b8cb62407077f5bf0e656bb5e32eec02d67a5d864825218165b3e2e863570978e942e12424fc054d0e577fdab14eecbe8a8900de8925a5b3739e285b41599c9f2794d49dfb0f2bca34ca163cbbbe13ea71b2681f04f9742ae53147459cc78183fe41bb225549cfa31c2ddd5084e4e8333686f1ac7e490334550dbe3bf8595ed3c7ca1355e63467842f0323ba8f6be01543673c1b477cd97c2d940ba2c6679aeb2eae6bbd004789d9e7ea87df4dab820d12d3b5ffe31d7d7ee954ae1e997abc56ad5f22ac560bbd10c1347833423c44874f6cedaee393559912d01403e41b39829e6ce6c839f967c56571835b0f86ae10339341cccb86f8773486dc0728c1a91bac5816752e8920642f4227caf823353479d760be0d50ec85b8f9747cf9f6716e41913057c6335d8998f6d3e7be8a60708cb9b9171b9998313a986be9ba322916e8a8d2c483a0a5822d302655a534c630e6bab95c88b98226140420e1fbfd46921c2f6c6fd9296efa765e8d795ebabd02024affe2e74940c0ef9d41da31c0406c56656bae4966305eef0277e73d74db7089eadb6e99c14a9e27e43d56fe13ad02221b6f0456bf803c11ac8403e40ba7e8c82b0a4412aa061a477971dca37fe2fff981d50683cdd4fe68bd2073c4d788f7578bdb08046c09c1e8bd9dcfe46d98b257693c2942f9b5325ec4dbab72711508a27dec2ec1afdc2166310fc5135524c5d61202e126cb97648e54241f5f50d2b95381ac2cfcbde3b55a744640c2df2da6d01cd7c2b1cbf1f151db8843fe0f2875c527a986f84ec6fa3fe7dfc76553f9d1d00a194246735b8563db76adc104acba91e042d156badc7c710c4acd9d6c3fe3703a55e4874a4a8d1ec47dd16ac9c614244c26708a8aba98b86205c7bd7066381b5dfc3de6c94574fd371c533dd71b0ef6bbc2f92646e7eb5089af4a6818f35c5bb59a92d768b2d979a3c087cca50207a3bf96ef9c77caf0e3d395ca0fce6ddc9c01bfa7ebb139273e8b18f399cc119a95e810a86f85fa25ece057db16f93c1566a2b9c1963b3eea965d642b27a4c0346795ced81209fc16d62063d23021e4b336193794695f4a902bab5092e8d7a46173793fd3266c27302a245853cdf10e22a4e5b774d795c2b468f56cdf7fcd24ae53d2c24e0f3521fe736c93e462bf1ed01d98980753875dc3d8bbf7453f0dd7877363248d5eed72fe2c59a4e871147d681a9277b08fac725ae57fae88b91213697c8aa535780d70abcf7c19f48b79c0472673c4f4ce6d86c639b0f0fe60628ed0b9b9e2cafd1dc183d764517d04577df9cbad1e68a25331a22fe04d3ae787a069c5815bb25086dc12ce72ea069e461cfc64bed2709de5d98b428e31b290e9de712a718e8004e136d52f5852159bce13cbac298fa133adf4de1c2b4cea1f11bfa352fae9b8aca548478465181e9f47f8e3ec6da47ee6142a070747dd65c487ca6cd99dfbc09a5bb6e64829aaa61b4c32d1bffbcf6e37a0efb2be5481aa33c4652a18cb333c606cd93df52688309263682191645f03aaec9c5d8be1c82bdf503687ab133e80916145cb05ec4f4286f5ff3ffb37e1b3b24fd6540a602f6f49a3a4f20b066c41afc172fa14db5e508bac6e9977d6d602e0531452b46005e8e54746f5b3055ad40e15e7578c7443eef2df4cda71d1ca85a78eecc614621a2d44a3830f3d9068cc4ed7297fe7678e726f07005f83a93d908a6bb62a94d6aab0ea50efaaf55834aee47dafbfbff59c9f52cc2fb527dd9dc80b6206fcc03e55f848c7e355849d4cd06181e0b370defcaa30973157c8ef59a0ad1a55b931199a77d281149b660ffff5487c72e794643d37aae0abd4014f2faee1fd38fc31f8e6c43a04e9e91400ec720bd5ccb8a525ccdc0440f5a64b8d5e373c7317127d4cd941c1dbe9cb191080cb1e2654c33da429ebef20b53b121a83fe2f2486a86d95d0851c7e7acdefcf6b8501d6a183a86fe30bce18512eff773f583c79ee3a7d546b129c55334df28dfb24596f49767fd9769023805fee6e43ced9e6fbd4253719176ee408a9e7dbfcbe2d8768a3184e81533d720137f5d8e0d0f7b112df05255453ee65f12508066c33051e5b54e57ee817585c138fd1e9ded4362d674566c286af35b4b75b4b0c7cd84f70afc56aab8e2175242fbe0efbae5719ae61cdb6993097c932b3b30d48af4c6130ee7b143ed400087cce591998dfb816c68ade6103d28c1d728ea2eb6573ddeed18fec7ea36a31a6b867d76e4bd395b2084ade12acfd2aa6e6a0c151cd4b2b4cd51ca01693b144c48994bf897f3a7e7fe64a6337ff00c1fa218284dcfac5a31fbe1d2c587a39a7e642cd77f7cd64c0e4d2d1f44d749e008b95bc73e97853d3bbeef9e7c0b173e980968aa74590f30b6570aa17cfa81554dfc5a70503b0864bb60a3b78fbe3e07837d754b3df7455bc86221b343b04173d6b33eabeb85dcd69a2726a46468c1fd25087a42441e21d62db79add01c031438b262e00773ba99bbe5ca0ed65d1472867f49f18f0954aa8cb9e9ea71ef3f8cc559c53f85c2619bc1146381bf9c0799131870e54a82669d98c5e559a02113f171a5fd41a020ed2407a2f17b587feff3f6c0bec7ed69726725741e63d15e2ad2ac4b5daefd1bb7c2fe05d65437954803afec6641ee1b12879138d7918c02deb0f39e78dfe32f4c0922d19494e3687a48bd1019bbd313c18f9aa8b38b469bca0ce633c14cf8b82467048abeb5d26621439cc03bce22e009df7038349987a55756d28fe98ea452eb5d1195b74f8b1ac784cd616ed1640c5607d06bdd44c59c112f6727340d8c9beb5bd88710ca73f2c77cdd98056e0cf5209929b80025970c81e7028e535207efaf03d7d34daf338abbac3bc8a21c843703f3faa16fa46253142e4329a9e4acbac0b58e0ed076304f1e936677c735604e7aa8b1bc5e59be2c6255978dba4de1a9ab11799e5ba800bc6ab2ec19e77137a7ff37ed6d6ebe10e4d70d7e1ef6f65d28d888090611cd0b6f2a8b4b43752860dffc220c491339f108fca67572026675a4d389eaeac55dd6b3c89cf28912f382631be7acb3de65d5254dc0fc2b4f26a1ca26a76d90d8c2f936ef68803f234af2bdb9093d4232ba43b634dd908f4faf87f54c612facbea4c974e96e62ea3897586c6e073c88c2bfa3386c6cd12286798eb2af379fa2f96bedda512f191ec57129dba55238dbe0eeaa283eff2c89860d3c8ee9ab3bf81b80dcf3a11b11414c60cda7f97aa0d02fbf9f0236f50128b0e2f7f6662c933097abfd4d73c2fa065fdeda4dc4f102e9f1ab1862eefefd94b9836765bf4c23d0e025e53423b721b25253c629a255edadf9499ca6c16d8031e27701694f7a6c4da7872b644b5826f9d65827e81c09bf808913925a58d127a4de364c7db147db2b3058164a553688215e6465f59c9cf7063381a00a0fba5241ff39af2f6f350eee2d115c52dbc2b3ed5cf106deae7022a38b2c3c126099aebde809afdae3b2660ae03b541a498d38924496910fcc33d0dcf27bcd2ff5ff8b6d0b1ed52cb9408f061c3ea40d191694d4c7cd7b0560487036fbe8e99f3a4c76c3faf1a5715a8fd86423b3a2a7d4df371938fe4b5c153e9f4619fc080ca800ff771a1a976541c0d0a9890306770747cdd42ab188705586ac6eef3daed4b9dd93eafb022164f9b4064aced515f72af0979a0f7fa8eeaba12625ce2654a3fa02c2940040e9ecfcb9f7cc678277b4ba6a42df79c12333822e9b0f393e8fe6e3411a06ec4f5789c54313a2d593921c20054e18dc1e8dcb637f898fd2feb71a0ff8f8b7f195d0b7edfff872bb90fbaa165227dac8f05f32da24603c0ddf60b9da9aed2bc2ad0bf3d140f4906c032afae7f14e99a2ef0de650adbd785c692342cdb765e6d20d5fca09a6b6a07952966b2f3350d9fc531072618c0fe94114654173df015da22f52a701a1bd076617c49746c8ad1057c51d43874fc5e35e79bd3247623e04a59b6b1753b25659b4bb4bfbe901d1e127cd7af62c597e1b07018191c2f18a807eca3fa77a6930fbd7c582f5607f5da10ed4bff6db39a6e4cd3458ec60fd5535704416b3e026db8261bf003057a1aef45f7362b22e80cec5339aa9becbf64ca83c91a6d91f8b9471c5104a293919543fac01e9d4609f5450bc9d0a654e6cdf6d262b5693a3081a4e8461d74c8f36dc076738ebca4c15e60bdac3e19c72d16be8ef89ac5ff51ccb7d221c2e16c49aa4d03360bf003b54e25b0097c5a0d3c4909fdb252eba904a368210b7c51463a55d1e7311fa12a90cd7c2e0913d3eeba6dc169b9644100f00d9f1f2bd22c1f6f74366b8e5137e2f8e34d7dd48aea324f8bcd18345831cbbe124412aa4cdabf8f1263d772291af3959980e6916909a0a4aa15534cb721d415ba3f43af72c3ee433440730730b32511f6fdb16939970261d2816129077be19e0e78fa63cd507433e4b58675ed68401102ac268380fc1e2e0bf98cf2d3a6bb0015d77fede4e7180629aa5ae4e9a20b40c6768d08c99fbcb15e651ad0a00a2ae4d74519763ff2a3650c07357baaca4f4349412d1f99eaa695d2ad54eaf80ff5f25da8112667d7def793b46062ba46d4c594f74ff17a44a38070b98269621de6d1aeeaaf24e3008e65c89923c2a180626cad7e3ba5f3157a1b3f71ec74679cc32ad2f13b993bd37e56b39fc5c3e5dec1e09ec039648dc6f40d47bed9348df455a4d2a7fdacf8ba75735bac908c10cab8ca6fa39156cebdd9fe908693d05f8d64e8b5f23d86a11c3a64c8a9ca46aaab11d226118aa24063f19823b3607162d0b89d83bc424ebe6096d0027fbc1839e9929fcdf16d716b200380072b893f2023186c45ec552dd8f0515f1214ae2b47ec04da6b2a82ead65dd96144d8556120ef4dfd026abe4b763333baff52e8a65b1b2e2a09a61136098039e1e3a00e00ea9d20f7c21ec5cf20910489d120b1b2fee0da38ae4c627c8cf3eca8eb6dfa43079356038df0b2e25e728b7390655377b6a2ceac6204bde5e81cba5f64266353fe3bbac86cc8ccabb93e9121450b141c0ecad32d2db66999a4656aae56b38f5757fc13ef668e5c53b85dde3bf8f93dca8bbeb163184aafbf4835c63ccafcc7789b3d281f842aaa01e4383a68af1715a8b7e730f72aa9d77f5cf394b2c7e852de5168c201cd84fedec3356d50744de6df19ad18916cb9290269099db756617ab001e4a93c4984a012dfbd3e9c4e83f696397930d8e463ec70f7dea9f47e4f85173319a5790013d7c4c03976f446a18ff6a0b141759c906af18cda80114798bc3a706f7e60fb17ed1cec0fddff628ff727d5bf130f9c26e9abb265e9b5b92567423f4efb9841792843eda93b66ac35765060096e4fea0fb2c9f0e7ad88dddece56291ee6cada22d1614b6d58d02c7c5699caf91add90310d71cec89434baab389fb547059dcff92f9d8cc5fce6e94add2b9af5de60967641ccd570665e5875ef446b3121ba27e58c203a18ee50eb89552e5867848102c498018c48ebb0c022396ed34401c8ead02e12dccdf7b53a1f04c98db6d2e7de0558387cb6ebd2f99c5f4576e96f7020a15e9afb4edfbedff63325c04a913a3220ca9b2b232d6c0bc9a8f0db86315ad24064e01e026e12e1f4296a798b882404fd364f23f87a25ff935e988a85102d0894880dcd516b5a480330bf40e1814b5e84e47fec9b9aa5dce1c7640c4cd492c887124991a3a03d1c0a8e4c9eb44257479d1b510c765595aa9a2d7de84545301c0049bbf060d36466f08c3a1a6c95f1c83025ed0def739d72a8d60aa6d62ab00be8778c74f0cd762e9f72b13d7140c1e725487c7770bb643bf20b34cf694db99d25e2e3a5bc561c7afe88d88d2b0b6eae64cd26d060f6930d601323ea6574f4dba0d2e90a2a36fe54f515d89403c0a125d5fc12a227ecd1f0da38fe7f326808cc4191c62ba334c3c36c63d9da5f250153611c69742d65c7ed48c0ee1638f19e79f166a190901913d04bb802e6a8043740ee7752cfd9291d0b92f41a38ded65ee89698a2c257ad98817a5d7b404723eaf46553f63a95ff7a53a11cab6c8ee1ef231970f34862b8f7e0e29a6d70a24ac378aff97d3dc9b186cb5b80c83bb0d8fa326336b9aa1702dbf569b600fe234369d3b2b10e60db05ea7da9679a2caa84261b5b321f71e052eac7f8fb5b7331d5860d58c2d12c34c44e71741b48c7e5ad1ce8e8ab4a242472cc5e78afa75733c7bf2f8876ef283cb659aea2e2fb94c91b84a1f4eb654b4a282ac2cf1b0b3093e2be3f2a1390dd5ba2b43c1c05db1cbf95054c6638966ebc3dacfce787b088b8ee2b4825e2dbd1fa510723cbcb0fe62de547f326db0516e179f912a63bbde60ab3ad4f632bf98e7f8cf96b967ec07a7cd1f39d1b1cdcca21a3ba0ff67e5bd3f1f8ed5ecb36129c5419321d646415611522b1532f424013e48596f8be9ab2d6d587937c454a4d81dfc05b411fc737225e9f281c49975b7892e536d7e6d5e9771e2646b2b9b0d2c78a4b1cddaeed4d45c112010051615581938c41b35578293e349eae070fb1caf5bc801cfbf91f8053a541e30730e956b650426095f5ca99b480b674832f935d94dc2904a2e8a4f8d372f6773acc7785a02fce3b84ad1562606838402e029eb22b540c7bdb63c6dc4d8ff765a00e520ac699fa7988659fabca55eab9116e1cf2428bf22aad52cb5449660c5441dec40eb0f78cc3a905b29d7bb09688335c534462e9a2b8209dfc8a505effec262513b9e7af4dc0f0769460fadf02559cb58cd111d6e6ce3c2ca1a3e9df97d656c98832f22b0519649e8d1bcf4cf7c7555f0fc0daba84140ae702ca9d519bbad9b46ba259d17c750e66e7f6835d3c866544243a42fd453191b76625f31dd43fb8cc0430a50b797df4b6e81a9d7c9b3bd44b1367d307f1ced98217dc73a90a0efafb9a055d40c6d92077daafa510da8eab5b236e14415092eb325b18a55e04cfa728774809d729309a8f03dc2481c226f15e9e788d112926cead7b0112a48c29c83be122323a6b2a68e8accaa1361bacae3bcaacc7e046318addbebe41e468c4641b21bb5fd0547094691ca1a499adc7eadaf03349176d5c28a86e78ba84614983b27f3a1801abaa26f99d88b5113f20ae2357349b1c674faff8d15606ee3f602de742c7e5353a80248275a75d069b5e01fe49d84659fcb127b43181ac88cab06ba2b48c4fd4c79898ebed2723e0872aec530c47d134f32b99c4d42034bccae244cb1baedd461b9d891c4d309008cc2c760ae9a8c41716640c10035c27f1069dc14bc05818f4fe3500fcdde92be4320ba70b2823a8692b05887f055d0c8e478ae908ebb0864437080475e57b7cdd8070873e11e20492fbb515fb244a6bfd5551c4ebe4deb19f90bf9d6eac0e0b5c80021f8bec0a60fa4e1dbc6ca64bcda5f8995adcf20b216ecf02d3d07bc861c7f86a76db00c64409ece484b8d48ab8eef80ab4c45e5f5c17bd78af819ad40587b14f9414963c39279cb376c8f62cb7401c4dd9897101ec0422ca386a51587f05735a8220f694c6bc27329884545c4f032d0ad115701a599bc6a07773e87d58a8053347e568f774305608f4d435400a9ff4e8a54ea6d1294670a07285a66a17d73181eb4d348dcaebefde92a1e3006f7d36905c1e5a4fe66cea753386d44844fcbdec773fa17d5055ba5b78d1a4c50603beaafe6cd3bb1774fac5c260ba3e677e721ef2a2f8f08ed68128b04ec1b7589a53dd941f5a3e45c8693925f9a07509c518bc6460820d0dd70aec42fe82fdecaabcd124213700f7cffe78663bce14b1397771d66084fd54be1e5034cb2ec04a9cc22fb959b228b5f1832b8d0c8b44e84256e24e8a49e7ebf585fc909c0f27fbd62d9f58af13df0896bef9a056212d35487fbad7c618f45be207975e586b5b86c2c5c80b0ba14c7626798ba900d6f620b3b89f76fc384b2bef6cc9a4e98b8373c75153d955a59889097a88aff2f3c831ebca3a3514f216e3837b3c6c36b7c84b4c9be7cb7567eac9a88a99bb14bfcaf1587d321bf68e7a0c05fd95bd27365295bb692de7542f6bbd697066d44e8425e762982f308b54a12ddfbb7fa0a45248d97b84cd37d84542edb5f696028888009c72e5db7db98bb3ce787aa01b9551d2a0f4b46ec3eaf099e1f5e2d14daa158496ee2adb09697dd7773805a039e27c1a708ec0b891737a95228ffdc1be9c71d85f4030dadd847036b1872328ff741b45d4b17255ac59296037ed0f0c5c46e4267fcebf7efff0adf803cd9be07731767e51c590ea19864622a875e05a3090b8937c029f6f79977c44f672366fa802d4eb7132e322e1e01802fe91375440633349e0439756535f244211debc7e9acf7fb4bb6033a20d51e929c0a8dda196a59f7032f870db9332ef1cdc7af5b45681bd02b7b84815a5c0ffbf76219bea3a40422ffb8bf2a543f723f7dfaca8bae3fed7fdeea0e921af14a4eba86637d7321a65afc263e55d6a9609fea3dd9f37493015cce781e06e35371dd5dfde790f881d4f180fe811aa11f6e956af76a0d491febe982ac4f3a53e10b5a6a2f12b3b44304a916b823e353f010b2a8bdd7439c24f1c8840cfeb6ed387b3867a0713026c3a9c425c9933a6fc9eb6a0c07ce30de40d75c5b00c8f70fb845e9cee88fb0d0a258e546c95b9a450b534e0d5bab4f8001f127602e1a954beef001186dca90425d868ef23de98d7442fcb1352feb1a41c6d3bc4bfb8ffc124b0df0cca6ce58dc63b723a08dc98e8dff2c461c0b2a0b643df37d76ef85b6036b043b6439e7953f436f45ea3f8807f2ae767f1a53d4ad97a5d50d6970983d9fbd5763778db2bfcb7b135837c981a432bf6fbec8c0777b3cbcfcce9c3533fd37b08bfb6f18cc53117947ecf1c262cddec08ca79fa78eeec3d1df43a783e59f7bf32655b37170d991dc7176d0a087ff475031ac179f8792dd82f10ee413297ecce39b150d1e6ccddd0324883cea8db31ccd134ec90efde1ea5ed6830a397c35ab107ebba475fc9a439be593af16c083cfb586021c8c5e666ab40432628d5a3eb6e825bc422ecce975e5191b9fabecdbc0a82e588a7e259adf30eebf8575400450f944893e9f4a15e49d439297105f35aff350d4ab7aeff9d8341a6cfb87ca1109b24fc5224df0ba0023099b1dea843bde45b1e8f8092a0dc65bfbdd3d4b650f51b19bd275c14d4058f4bf97aca11828dc0db617e89f40312a172782b3268d39b965dd43a17fdc437fa0fa1abbda77b749c9d1e405a3df1e83d401e005bfcf3ac14d789b4e001a3db4b63d86d3dd2f5187f899dfc7bd632054313f979d5d878cd9e6f23bd3c88389c882ee8e8d4fab721718725db75258e13bad24fbf2a662aa83a0dec7cb5fa4c1fbb5a174309878a387b7fff05ce94cdb7ab6569f9e10cd1e5f3992a1ad2c0a70febceaea764e13605a35974a1118ab69b1db38f508334342ccefb26bf1b4011122172f43b6e71832ff3fdcad8c36f126718a608ec97451c23d51c289119e352d0642e3328ae9d395f735349d16eaaa9c3a5251ef4a5a751750fe277bb531131f3bceab195adce1f3c2a443bb599a54355ca19179036c19bc884365d6352337820318eb8abf16dfe6f20b6e6abcdc7a8c891683cead1fdc2c53d0120b29cafed01cc028e9104e09e9f5d9294dc91789fc202fbd527fec28d13412909cfbbef593e942e7b706e91c775eac18b6f6d20f2eb24ba2a724579c55a989860e23759837f92fbc970b5e64198ce2a138de92767edff8d82f12f8832444b346d159657356bcc4fbeb86349d3b211b4765e8ef6c76d9b5d27cc43589c7761e7778e625035aa4c14a471ff214768bc49fa09e3f3d91601105f2c0951cb9be297c87522ac4ce51a30c1c212d66364d5d0e9b77187678d389073390adb8759d72ea6f35fd242c43c8d5ed423d0f04e6730898fbe1a377d48c3ab1acd5f975947935a30a02cdfeebc11c2cfba76b5cd775323ba5415138c3a934ef8db43c4423aae2c536d21eb0ca1a637da60327c8a0f20fe5fbbdec16215e7a6fabaf1d6bcb86763844e192dc5f433031d9b6b0b2d367f64a779df09a8e1a6f949f4cf9571caa649edcc7c6ec2bc9f6fc1f68a2b5df5589bba187fb506a6ba900c1147c806775324b36eb376aa01d4c3eef6f5a4c25393ecbf20258b236d0ab36c97c03926c8563d01bd240d26ccb947cb25153e0558199fde173b55a83d7ea99110a2ae77c397dcfd4038fbde243643810a52c1ce0cd0fc418728d93c1ffebca20354f0a172ff49cf7f5707791133fe372d15f4c478a14b0df754e0881a7232c7f940c74ddd74cba002eafba09b98c11617c4a090a374d36df027313436c2542a79cdfa230bdfab9852579dfacb4dd4464fc98dda9532dd87f90996e77bd76af00b6353ca042932def608b630a83b7fee5d8a834957c1b1839a62d549f297bc44376a98ebd038a59b76630de93a480a37ca714a85f00b978a5b9ab703a2eb914c864a922d78f64ff65bd26cce8a5dbc481de4a93768f7d7c4c51904bd94bb33307f6c0939034a77182bbc99869f63de4ade4d6a07c86cb8585f47841ecef0e819ab36c5b6791b642871895dba8240b8649613539c1754836eb18dfecf5a70f92f90118d4de2535f4fb2a0801239de92bfcc9e2d9f5d96813044513c784025ae99b8662aa647d9b0b5786bca35ce23b4820856bfb7a21af7c49ffc04c086f64e80ab9b6568af959f814a5103cc48f965d6d2a3d38defc830524bf71f4f36ca230bef1a043b236f74dcb1baf27eb047efe3b3ed2fc84b887303cea955ce578b73630e49cfc9aa4f76ed340e60f40df598d0329c9c11bf4207feb2796de5f22087af909290b74c1deedd5bb615d667eaa9c6d818e21052de356c7ed1313b0e71a718fb5c0db011c124d3ae18d9cbc71069ec2bc9c96c0c444575bb186779b3661ac6d90e0f5a022360f8b69d747b344e226bb51819cef55c7f40f0b5d846e9e72ae0b1125e5d262cea73faadad8fb68c1a6afe6b99dd160f2af6a5124c4bb9dc1d8e0ccfc26286c2096d02b14daf55b29b128c2b1242764390be63968b302a2d3cfa71ad031128ce070e570f1d821aa9eb8ae9c14da41de1f7c1b0a95c9c45c2cf496814e81116392a7d8031e2b10c5752fb9d930fac14d2a82717b3883711831ea6796c3b0b58e9bbe3057d67e333a51a8d2e0b230262fceb171d1cd8aa965970372d1dc2a6f4c801676f5d73c1987b89672690504d0f4908b94c4d119ddc2a0f240b8f468bf4bd46324538cdf342c2e9b20d895d3524a046362bacfeb7ece041969c2b8e615fafd06b0f763e203960809569601364a8e8eeb642a266a1cd614fb5665764d13e88e93b567e8ef0863f9739c47c3a7fa30b48601a981003879781a8f37c8e83982fd7caa0ba850d304575c6a5459a311ef09c5d3af4c58323681e98cb03d51e758ce23f7891ea1c3f5c64639523fa1f1f7f32d52a1f4dcca8be70ac7452014bde8754c3636b87c8bc6baa381b7e23f4b1a051ef738270841e80bd0d78d3dab1d908737debb022b6ae5a906ebfbede56d93b43d39c84f6548d964ee25fed27f971f7899697c984911d115e2d094bf1eea1384eaa2d8ca6e3fee76b54af07b2caab3cdc35ef1c75ff12775c9c828e2463107fbb9caf0449da785d5b8bf28b41cd91bfb4837c12bda89376d2e4b1ed415d2ef9d2d0a953a7e004df68aeafe09da92a695ba8c5142336abf5072c1ed10e86048cda6fa3e1889ea956d8e56f6e8e077e2018cb5388704e5fdd449d52a3558399211da02516b4bb6fa8f45ab99ddc8f96cd3214acd76c9ab914d15fd4c9dcfff6a1e18cb85af2e05ebe043215d54ee87959f2ac5a6adfc2c083f6992cad6ca021f26f5ae3150cb57f8050980b7eadbb2faaa0bbe5a8916e7c12fb74e3b5cc0e24fe0f332fafc8e1d9d61fb22400c1afc1aa8468d3f84a45f6aa2717804bc6f207ab083f2390ef0d74a9bba8e7c3526d363fe5dcaec4d1ef3531c3aa8bd620f4d0e3a4a5472049e059df6aa3dd30289c96530d3ffd73ef15419117578dbea3bb898d298e23c89d038f6275cb8cad0ae5eacd42b8496d6c5f23b06b440d6a17f03991e02140eeb51d1e1824477ea3c2f03995cd6f19191074e27807999344443ae9d7118725fc57d70febbe403b7b16648b93f68df5e1a2fd86cf327fa7b3f142a04604e75a584cd969c28ddd499bcfeae8af043a652ceca1189f361ed21fe8b066c8006a686c5bca3484d747326db52959d1419df263b4099fcf599d9bf0ef2b43444f38d69e4e53791be5a57e578fcae5e1f3df23ecc3dc2347e4248b8fcf5b40a337782c58ec1b3f6eff20b3c3277495c763278130e1c3adef1fdd286250e964cb0153f301fccb8e656ce05b1843d0706bd99e9397d56643af51eefdd2397db8a5f4f0b200470a6ee8760cfdbeac857eb59c6ce18a696cf06fc37f8f4854be42195a78f1bf9581e8df63cc221d2a3cc78ef6b8f36f637eb917beb9682a67550c10791238a5add703327c4a519d849d54dc2daa52af8c43a88f88c30fe13be91e709be7101a59b5c8ca09ab12a6844f2c898a6c85b3ac64c4bf69c60cd698237e23061e00865fc33d8d521aeda0f0fb577b552314e28b88158fabeae87045ab360f02e0915288a86c649ebd6bf39148de9cd6fa88a3f058a4e895562a160c284e1ed95549e49c0d5d3737bc13072fdfc8d255176760a57b78b06e335a32b343cc37d1a4b3a5639917ef63406e4492671d0719a23c80709a99d17fa8002b03a3ba4134f654fda5f5a2726b7102138189e5226bc48c6b1a5d103110dea569c4f01f264872b65529c806aa97765adac5ed290b93a4e1886b6be4ba68fdd054bed404cd56416013b8bb4b7e2e78fb02263af1aad96cc2412a6d1d52d12c0a54b8f5701ea58adaa11a767ad57a9e6ff46c1943e78441b8fd210ac4e39193dad17cfb6b017f76ad6517a09b99c1113d175f3129aade4d4a2516ebe054f15bc833d08ffe5e2a2d60c976e1b4b14cf8edd2c72baadb2db8001fd2b8798d39ac5ce27d592f1defd67b3301e3cf05637c078f6baece62baaa62541d189876b1ad1f464b0008261699860d7e4bf37d4dc514b514639e27cd4af92cbeb343f7a18798c7012d9161e79f0abeb6c4290154fa9cac8af12112aec04c107f3285f8506150ce6987d1b7aa108fae71f47879be4325db9502600ca435e366263d63610764cdc149b7d00ea6149b457783e8cdd4c939acfd3b61fbf8d147977c7be71a0eb8990a6a64965024d1b8eb8f1a81e5deb45f8689462ec9f3bbff0c4995180bad843c0f94372c636c726d0883614ca9242c20d103cbcf5cda1c932c5532fe1d2cf03c3a8ed79931c61d420419ff5002ed5802f631714a9ef81b8c5e67fba236d22623f222eee5a07afbc0471a9d95d683608f5bdbe1a97594e1710c49980b3fe84b789e1621199acf336e394de2240f2c6d4f69cbc3f4cbf595ca9dc1b04121b68ac4a8331a3b060eedd5437c77049331a7c988c8be31876460207998eb4dc284098e77418156cb80537bcb6d033d4cda358521997a6a91296af90896f3360c9af05e7308fd6fd36a8aea3be92fd8206e3f0b9a07a0a6d18cdae0b1826d04e63f68bc044f37900517bdaaf9b8a3dcf937efe45ddad8ee2fd5d85adf2504c037bd993192e0d7c049ce12416fa20651be7b6b97d0dac949934b8ef1f7485e71e95aaa448581840887d6b139036f00405783dbac5dce1cbfe537222c62b1231fe35fc37e45fbe66ea778c31a1fe63bb0ab9768ab6b8078580de1bc938829fcd20d140e663a16a6fd92fc706a2ad15ca9a4fe3a1d61b6861df39185afd17791934fc0b084cd996cba2eaadfb38cf60e332902788aa939ee157f8fa407a665896991acd460644edfaf64c9397cac1df75723e94a78aad157489a2242246db98c5dbb21a08369fba8e31da3a54ef410bf1c78fcd971cc4569bf2a94878c903c4476b5653c7442696f5e3f7e4cb0cb960f8b11834dfc775fcd81182b9ac975b656bc67c0d1bb5960db29b3a3562a99768faad6c6cea213e52b964d30a46386ef6d37ba7c87e114a8944b625aea44c779e683af0c82e908a02a07b0eacce029ae2ff094e0856ddd0843cc33eb3087bb67bc1e859f945cbf5873db28a33bcac8bd44eedf33f4e71b4990b50d9d517ade08bb813ec52a809ed5ae1a9fa118a8cae2553981befbd73533220ddab975a6982389b6c4c76ddf0ede82cdfc2e8c0397e60ada64c9c3c6958ea2dc8187c3915282cec5fded8400783d97fb2790bf6297900ad86e9b743ca222b72aea4f64c572eb33b4d37e976b42b896ac070fd84d32aafe3b897e35bfc4b70a00fd5980ca62275f8d2dc4d0a9d61827e886f5004cd0fa8d0c9cb82ed963144265a2ec3e2688fefc58f20555419a24f1b88b885ee8d94a60528e928811e7020862c152c6634e37af1b0c8a4ebbf8a69d23ff121ba8b5601e1549546befb94904fe42d141081b9c22e0629be4a05764d232c8d95e15cc04705db446fefc3fb1dd410db2d79e56f3fdaedc7f3e761e2839eccf2650b58600fe33b7b06abfe2023c330a3dafac6905e78e628086c8b7b87a59fc4018134c1b6f9e3ad9d6c10a03c8dd22b9f2babb9a8986dce4e11b89dc3c813871e0b4841c6ca7250a6b88207d2a463b70c751b47a8ba132f479f9fc5e276d69ffcd2298cc9c55608b519e8a3809763ea857f8bc6c94e44df876e97805e424783309e4eef3a8b0d4a4af8bb2fc0e7614aac9373b394c591338007465981bae4e55bc82f05937c0679dadd5fe91e14da3be469699a95d076dfb3d202be07314d1ad0d8404c5f28e02bd7506d8be2903d52bf69e3e846cf6438b587832a5955deb822573940080218e4d2ca5a74c8ea1913b00d69392242f7e2e7701e3ae2991831e2cd707d38b81f195fd3bd304ba2ebe348dc6fe9b2ab9042dc345a4c5d6b981c74936c503b8b715dd0e4fc4ab52b2465fc4f7e866299cbfd063cbdeb044dbccc6a41a365bb1cae06d8769e10c01361004cef0babcc7e1965e7f1bfa381c024e63660ac2a21ec23c8c911294ee6dc0046bd239da65ac8f702141be5e250633eee5b78fd19fa6a8108454d045183e5b0adbf95bb22981ae375fcf3b743fa9789496be30cb1bf283449bf72e5a531d0c0a9e6bdda8d0ee47d261511aa34eaed828bca47518deaa5bbf1aa2b13c67b2ddecfa4f4726219a60296ff0e45219bc5c93a090e620b075386b497fe3531ca4d59838cd2293e52e0424d0d320eb697c0abb8aab0c4b59fb232f6fb34b073a9bfcf79f0ff557e45138abce2456d50696ec89c11d6e02a0e523f3d56971c188415bef793a48dae6ac06a6af080e78b8b10ae58f0d94ab4fdb419fc4c7dee7cf3bf9690c79a483b3e775fdbca9d13c47756ab83aa307b02c84841c82f519e3d734df4ea2f28fbc12a98d983d2f26897a8c16e80b094e770089f450571caa1b68d2138481cd93edcd9a575f7ac296c71a9b165f4a64f16a929199248d641af94abd9ff5f133387caa63da3bba88a85eef4d70033fdf79efac457c806bf4f0e3449e8a873c4c05d272ac1f1247ace4b6c1472ebe329f6d70144da44d38f5b443201ddd24a93f8257ec1c2cce6754d237583458776acf5554935019713d8eef80a4e19fb37f353773e25c0b5563a9fb4a7cbaf4163095ba03f1f7e4d6c2e828029993d81c0755ad8f1a14c49183d2e655f4810c82cc1922e5f6e90c620e2ae731c6da914789c86b115eeb5d680ef71bc28932a7a5868418626ace99ff6b7db475f55fd11c4cb5f9637489e0c44e4223f70375ce66a5fe21e2145094941f091836eccaa0839a45e0eb2497548c89d9855e2af188ad73aec7cdbd15040973f59adc74c20664b99fa71338bdc2a808e4c95dc54fdd6236bd918b2dc5f146af6ac3cf55ef0ca7f2edd64276a231ff138c785e9e36d56e375307842c0963321b8f197757fab9348d54f6dfa8efa97bf1f819c87b4f79b7be96b220828963b7ff8d263d428b16f3d2fe8e54944b3303ec5234032542d02613b119c8f6ecf8bca28b7287dd4929cc09132608035fd5804abf517764b6e2a37dcac5e252da2b2a4db283bef1ddfca879ba4663bcd399d85469f98cff54b817450a3cd85cfd03e7482ae34b46ee976d6b1c77cd894e87f45278b3aac0c35968b4980810ddfa88dcdb1a1a94a4250005276140ae3078a6bc8c1408396dabcd80109db0f49c7cc2f14eaaae03d32a4156f5b02a6e7afafe1849637fa1cfb61d45a140bdea6329ba0fe80429ff9aa4624a1d31bc752f7c97f1d390a04aae8a50a1b1aab65cf8a9771cf24d13efc33c69c8e60e7e2c17a57a2d70c1f39cd2cf6e7b860223b124a50101b4b0f23d149960b79a6cf8f9f91eaeb6691f0100022e80ba69718d51afc561a77653505056644e017f76b3459f8e3b7206d151dc084e8d48a21f7ba461b09ef5805eb49050443c8ddd513679cf9e2a4b8eff6b99aad99d0c79337512020fc0d219faa765cce23143fe2809fb52f682284bd3d8a0b174b9ee36d503035989d0288b4fb03790e5350b2921b535f03d4bf083731f58e4c9e7d6202faedf2fc7d4de1c84576e66f650cda564c18d701c8d8d7f07c8280d8031ac8066fd0e4c70d7dc15c1247214bd8b71bb1ab56d9c3a51e687b85c7af2419f589ea579f8782dde0abe30a0ac62e1eddfb36b1a3c3a409ee3e2ad62b55db338c3c212a8057ba6f3505ef652821a0b7f00d57e766213d57d6cda106240147e04d334d5149e1c821d963e3ec25d02e248ba687c5447efa2f569b506e485df4b0b713b174529246a65c4a72e79a6e40f50f6b68c3953964e0ec2bcb971eb88c256862100c2105c05d1c2dfeefec386399f9d05d7afeecf82d060375190dad58aecf82cb713b989fc6c782ea7d91eb0093e959e853d8063e644296ef5caba904cd5b1a565c08e76f63bcede81931d2c2634c8c9bd6c711b217106a8cea6f47faf1a97d43151f5ea9c48ad36a3b32ac13a891ccea7c229bddc60df2f04acee6b5cc29400444f58ac969afb7d36c1ac36ea457bf46cc91011be179d49be64111bfad58f72c5421e858b39a2fc61460b54e071cc8434098ee170a0263f2457c559325c6f73ddb0af3d232e88fb4dc9aee3c415f7c626090cf399036459600c73ebac5d1e49b423739c078097c121d2ffab3d37e3026b51f010e2463ede970b819a0fe3833c7122d26adf37b59806e96573f4e17a802a69a400f3739b18f4dd592e03f386963d36346e525cccc624974805911aa3878cda8e8b7391654d9c09616f32970f9d3fe5017109f5c394a2631027bbeb4661b92a18790ba983c6ba17032541d6069ba0baa13bac0d824aa9d626a21a5a4c54d8e4a99162c2ddcb7490a617dbb953d6873a7c94e2a9f1306076f03d57729ba9128da89c21e45ba3f2fbb10ea646df971deffa4453d3f88ef0ced7c21a381ca88eaf7f63ef17e5985de08ed24a87902589608412a8927fab806344f70ab6b79875d195ab756463f0ddc7a42b70844fcaf41580c789ef6ed039bf9da6d0f355c3ee7c523f5ad2bdf499395be1c04405cc8697582b9df0ad4543694b9514f7dc6f22371ee6476adbecbabd1bbbe1cf9874666d72068da02452c5e9b78d7dcb36e5388a6167e433a52067dc4c827c2df20abd1f38200004bc3fe7c84855b376496d59fd838bd83504d7c91d56fe3867f9d6b23610419f265b53d38d65b75f00ff4ead19ec1acc78de5b0808a2f7be83971f6e396430120dead7aec0787929723ed25b6505dc67051df24b259635b58cb32f19b09bb600c15213a3e9e864b8d3f03f8c6a349852e3a7e5bafd9b7fc687344cda231d9b124b794fd7911d40b52bfcde67aee218341a667c7f171a9f997e04bfd91b52a7efb249d3753f7fd5c7824af715bb7822b6b340febffb795bd5780ad03f20a2a13ffea9e6a37c76ea97e1c2d2bd195c7f80b51fb5a532227c227e2ec634b87553ac3780d289cf6a49cc4f4cb6884ef8f73928eae756437bca2a9758ebdf6d3383dc66b8dd51c0c3b80fd5d0ed9ee4b351891489ddfdb6ee0c92cb708569c644fa7793385020d7e900087a36bd2663f4571a82e3dfc014e10c05225eddf94b108026c4e873219d44e95e46666f485125cf9179e234c7e4be9029a50a3bb88500dd9103b08d79993c3aba41484a2e38ad8299026d263baeec61a65b5de6cefb7ad85f5778e853543abdc374c598fd9ff438d8246cfb44fbd347254d3d286235e73a38c928cad554a43822e6c39fe00f62b8f6e7c8fc0951db094e8193479cbcb0cbc65fa87c2723e4747e9f2ba9fd0f5fcc9c536771b33b6c71c801488ca5173b53ae23e0467249603980a8e6fc7c27533a727132a2693eee453cd5423fa5cef29a9b1db96fde4c824ed008dbe086dfa6cb1f4811d654e4c94e51036ba8c36a3c673354194192b6b17d15c7f19f43c0c0474ce0ed579cb46554b095aa0f287280841ed0ea02b70e548cf7ee1280da510976a042ac6b68362b1f0092e6bbfc6e28b7059912fb74ddd544208425ca731aea20c475385be0f38176ea0309f566e79bc990b87b74f2aa9b6d359111c638a4c90c5f81776f2e72d02216effa058e64418266340bb458fd0ecfe11ec0bc4f760f031a6f53ee773b81ec2b5ea1339d6d82a93015ac05cf5e9631ca3119f3e01925cd9d46b322e6d7fa99d259e6c7bb8ac608956345ad7f569b5d98d504b5141371328f0e7e51a0cda5f4b2e6b1080f4475653e27bdf58f6c8519f40f694812ee5dfa98d09ec4d0a5e9c47410ea3fc222f789d269fe252829bc2e86e930f5033150ec6193fac39ce82dd0bfdc79b4fbadb43cfa2fef857114a864f56a42040f65b2d1925f7a952c1ddbe13c5446afe36b15455e83785d93b5b282e99a85bd5d11ea71d33c0684a9cc5abf927f3a78a2e6806ea56c81f4b59440520c82e26816bd6294ca3386d63b7e12326a653b565fa65e7d78f3f293003abc9a0329414c61f28102224be2d409b96b026c0f32934331183b7e1eb3829c2e8c2379988bb26736af82818d02c63c08cdf63f8408757511147060f7ad09b0f81ab514d5a6e2501454de90ffcff4fbf0a0d88ccca3451dcebce4c586c6706421cc187cea7c244311d8dcf6ab2fa56ffb4c6efaf0ed4a65ee775e56d2e7fee1300c135adef4c068b7a4455b990b23c0b0398132f7cdce73fbaca8bbe3f9fc4fad416f56baf5fde88d1ee069d04cb41597cfd8dbe92a176f7dc5889bc1e2b2d620d2f417856925eb1baf77c658d8a19639773d9ecfee6e82fa29c79e758c689c12296a4647377e98eabfd01a3999326d1d977623b0001bd4fc402d6d06dd66cc0bad998a0947511881b7b50e7b76aebfcc994c119448668c0a7281b07cbff38c91c6498cd281e59368fdec4927565fb7cce3871183ae97d2ad278d0edf1959042edc41f4aacd843028fb3d7445238b7aa7dfefca861af5d06bc7173038d2de5e69574a699913741748187237dbc47b33e4f34be5a474c9abcfbae8be8ed4cbbfcaa02c93a83bfe7150bb5139f32177080c896509e6a45b8e5e68c85fea066851da1daf1bde2d6a66c94ea4239422c621a60803df5292f39fa23a7ebb5350fc3c20379aa944d1001d3a38319cc7afb2a73ad8ee0ef327d9062296d47bd19ad1a82556b7e4e00f08bf2be1c14d93b081c25161ee3fce4954ec66e590476ccc2dbc6fe3cc75bcd0c97324b11bde000d7c99720acb1aede1ae79f7907bc62dcf59a08844a203e0fa8c62ae1009f616aeeb55253d4c4657d82dd45cfd5da11b899d7df8e30137527799b35066513dde7b161df2623a6c14141a261d96fe803fe3407b4527b1b91c2d388f931bbc5d5f5d441a62df5d332d7fbd96c3c225099fc58cc1f97779304606b11efe9712fba13abf74fc1d7d44a9005d4dd5e89ce74518c7789b3d2245d6e94b8719421bc2adfccd5248846246907e4372db7229c039c23ac7b4e0759fd6bd4ff36c859e578a89b7dccf7dd3e2eae3b82e5dc7953d81ad2dd7cbc837e74d6c058980c6656540cbc53c186e9ac0c01602a9e44fa70527bfe7cf685d33c444ddb572dc6e3692d8a83e97acc07d8719ff690af77229c133e2b2d8140630dfc2f8a7d508e6da86590a6c1811dc45e0fe86377a1f98e118abfdd41a552ef5dfcfa523db8d9519eacbd895e4d128ba727693b220e32999b399f896bcb63a4b6d73cc70acf2e2ba6637fa0226740ea3e6890e2425cb8d173904bb40e7bc93fa31b755d76fbf3787a1a457fb0480f5c9e33fdfd3b05f2c2453f52d1ac2f1a1cad2a228a04d7dfb46441ad9c7a67f45f512a1ee08ea286f87a973386c76dccc83f93d2e136db395c0f6a167b035f865ed1ab6230afaadbc0ae286c37d2a057dec4d8f4d77f8e96fbd6042e9fcd974bf79a587672309767c73a636b79607f51ace77a06e1615a7f0052a0448f4b97aba63581aa0993f0c188b9f8cfaff35330df11e787a36ed76805ffbf06ae0fe92be72dd79b8b5c3f6f61a738f7500db47bc1deb205720a7dd87947b0c3808cf44336ddcac95bfbebc80e8ca4810e121ba911a859fef1c6c656d6d53629ab35519821dfcb921ff57e71dbc4dbdb4e93013f2af96fd287164949baf2bfa792bb898114ae6aa42bcb7fe345fa3f8476130da49a6c342ec69b6f57725aadabbb61f4a49bb4287e24005892f9a7501b2914998fdc5b677224a8b0d6a96790c4a9db2b5923ab756e8d16a1175336bdedec1a1d376d517a4b25d0a66ddc940980c289b63558ded213cb80e1d6ef22c99b23963161c9d8dcf83ea5c873687a684eb9effdcf87d8defc63d183582a1613a1540b5e657e7c1027f39a8f8df9853dace4909a6e5d23fc96ea7b1e11906b1c7f120bfcd8f795b448d9117423ec4f0a29c6fde4b8254aab61c4000aa9bebc54a2d1faa522c1c029e953cd1ecbdd325e23f59a95339cb77beb84e2e17701644cab1869efe96985e168080fd7ec28c99a49e4f904471fe4de92a1a62b1004fd750659dc25735b518b734a6c380b7b8f5efa198bba891b6d5405aecc5feb46026e331ab3fe7723bd8869af54c7b031fe0cc307e530603bbb7ca300c7f88f210d88bfdfa3d36b3f1458d9ab7c0f70e890341334780e72ed59a8f95c1b7d723269650b1d0e3ca61a008d31d32477a40be0559923c69d27acc26986f549571b06b073b3576592de510c96009b0078e0185901935a5374f4f6704eca80d42e0ffa7d4537134c8e7a5092f3d48772bbab9a8498b05ca11e6156fdc932634e6ac7aa1a4a14d51587e0b53e271c0cfd987d0eddab6e8f2202034ad5596d311a85b8823202bb217307c7eb58b045b02397bae1deba2c7678c8414e618fc95ecb17790f3f0fb86cc796965f9d2ffff577520bb0023588b6f7c9b1ee5cdcd560c2988fcdabb19b3b95acb2ae55e699615b2fe605d2bdf1a5318ebb8711b12fdba371433a0298b1f26fc2c3442d84a07851b9b03fdaa3f5e5b8afe4b51aad2723e03a59d0de35bb45a8613ebd7e7aa3aefd5810ea949813ecef75c404e23159de0b6c2a2e99191589f2109b76e3492179b0b38e727b0aca1f68a8bfd302ee366e878f4aafbdb33f53bf59500cd660986d0e346f83f86c871196815ecbf7245b59d70c11d0c674b7277293f2ebd26186fd78535a7bb74de9580bc8274c298427248c7b463e4e0e0b79be68fa9061cc6baf81a8d5e6221f4f573ac58fc0347e38531a452e44becfbacef530eda70ef1b4f7bcad484fb361579396021ee48282fd6a03025090933a339bb994327c3481f16a8bc94804f5a46091c0164b15ae32e4ddd93b438e55ee04646dfb6f9c6cedbf8c71954bc2636918d62b7aaad011fe8d32ff487daa915babbd94ef0b9422a56db1f089d9f4771fded54a97a4a0484664ee07b27581bff3a80bc0e78cd000398a9f9b2f6917cb492113a005cf02dbbafa836521b1804c5677d3746d69fc502aa489d3fe7fa8ba759e15ce3d807426ccbc77a9eeb842b0f4a9b921e93955ccf93a253d6f8433df15946017b77f70c3fc3 +Output = 42f52d40a12bca7b219f88adfff40c79 + +Len = 129784 +Msg = 1f8283b667a75d890ba5e6a5d62ae348599509e78e07c0d8bbbd264f999d578bb60eec51180dc19a237efc89bdbf4a9faf836c324edef31b5c9c47b029d7eef2fdc90b07bade25eabe0d2a610769b42f9af38a8b25b36ad2e3070679c03a4c45be58eabe974112e1a4fd7a15fd4fa860e28d6cdb59aeae6319a56992a7eef8edbf66915ff55f0fe79cf4f48de79aae9a4ef8190833f94638c61f7be3261a7a53c99906d31d60a4646f9a9fb10d714e45a7dd99fcfbb9bab7b21c415484e65bdea3995300576b59c0e599836ab6fd11c9b5e3f59df919934aa445c5ce0b7b22f5170f80d0eba8b763c696a89e2b667e8f40b334d5753f585865420e3701015702eba3932a204045b5da3c1736b5d31efd10f45e8bb6539149beba2479af9f836ce8fc96f53f5b8b1fe930d71b9a6c777cec4f7ca7057ec6847455107a5d7e2d9bd6c3901b90201207ba1df033225b13759e6c9510aae7807352bcd92453c6ddf77d9f8a835bb861d616a96b6897c57a4eecf2b1b0edb8467d1f97875dd89e1be8a4398b15e84b01f5c57c4fa13fd532719f8ad86e1516a10aa28d230f352e70d615389bb97e0078ca8f3fa4c664b0c5447fdb13326c2b1882a447b321b39f63299645c25767ff50bf3c9a72be4c81bb31538e69e4381f334eed6d427b98197d49f00809d7e971103b9334c2733f6e9a9ee54ae36dc21a7ad445a6d5052cc3449eeb2877214d7e41a65db69bcc879fecf5fbb888b35243767d749a76a7b9c642914e4e151edb4d6a6762c706b16b3d389d5e7f609f30c2aeb141f22c49854aff88e321eab4da0713e86a100a0a327007fed6487319a3c0aad9765600d3d97602ec704afecc94d3c5903d39afbf255fe0802abbca0af465f35bd96df82dfd72d326be70594f4fda06c7a2e9fdb98c334b8b247f6c586cd810a133e01f3f3967fa9c953c0423544361f563c8fddeaf13d0878a3d61ed514289114b567af2d57dffb8bc560632eb375b82467fb617d528f8dc259cb2afebcae715eb78132c18db6be1fd6567625bde7ed714b6304d479a4af2bd4566888499b114d9eef1d64caac67e1e112f9dee5f515a941474664e904f321adf855f62d66f76de5f1cd9b71196f9e80467caeae35c749042894c30328d020313181bceaaaaa2c2749d1ba13965b923e317d19891288dcee877e535a98ecb418925a6103de8024dd47b865449ba269759459a40923c0e18ad471ba71ddaf69de8b7e770b6b4fd4727be01176a1ea80b0cfb0c2a0d205d343900d4ccb5f7e9dcd9d3c6363d93fb77176f7331c418a749a440119d2b5de4ea35aafaee9a6f0ec903832ba9fc0f64a64a94c6eb7e308b17ca1d90e3147a0a04494e7453f4cacc2b0fcefe1218afa19c6838e18dc1eebc3e26987242efff36481cf32a43ea8e8ac9a4bd27b9bcfb18211a60ac5fb4dba3865fbc9d03e475d28057a10408a445b26c6b568fe60e7c32fd08160fa8807ea6b61d8efa6d1d634572a160eae94b76abdc0ba31ce136b957f7d961f2b24c5f2e980a1871cabf51f7e7a339c42d07aadde12dacb7f15d3bf0d9354a3dc34107a4f2cc61eb60f5c750a605337a1dff68b04379784960ab886369c6d7d82487fd6e8d0b714e79e54eb8796e57f4015c388cc9960fb874472a1a703112ab1d45c9f6317051845bb76d972686ac1b2145a2d93d2d79ee765aa97bb521039ff5a3f4a2a5a208734e94ad5576f63ad5c4e32fff65e5bed1ad0b8bf0023cb19af6ca05dcb34a9e059ca4955a3166090b335e66660967e74b63835ae01d2a248566e2840b21101c208b0ead0e1f7d22a6b7ddd076f35bfc43dee99db3cf9464498e12fa96b89b89ae65fb7dda07e48c8c9688f398ea6703a06866ddd0e0227accb683eee74094ed9670928e24b3434fa718885932b536064c4722a1a1187b6df8265de86581a250c0f5fc6755e94174dd87058aae1d6e0c2ec344718d3f4845b425c77078436ebb143b6090d67286011829260d72eab81e2e26f5d5fc1c300ae7fce90f884da0357a8ce7920e16bb013f481469e8e4bb4334b65c565678dcc57bf4ec4cfd68dfc7da2eb8f4649c88793a2af72976d2208328bda27b041bf37e5753f8b0405cd3781c6afd3e42ce9473f117f6d2867e8ee6f281eecd6ccd1e3b636134c2b7f125502888dbf90f7288f64c5939ee7faeae757b4b69d3f75605068768c90acbee7d57e6d07cac32510b0b3337e904c92b2837a9623a150d7d4fe6abaedf10e41d82963f8a08df1533c6b98ef82e9dccbda33565108b1b170ba5e4b77c9c5d6b44dd1419fda61a1fe0600845e52f40ef2bc775989b816e7bc9ae06931a2b78c62c36d95e727fe6b81f8200404615759d3f3d01284c4695a37c135628d0b2e95f9d33eef431bbca48b9d4aa676307c53bbfade1ff6b0218f5ef7bdc5ce65a399d5f7f5ac582814f3777fd0da3832eb63274be1b0340dc80dbe98f9f18a34aefe739c025b7adf9fbee1fa631daefb2d2ea2619b91e12fd53bc31f7a74551ab93a7f49f58b4f94d59d379761ff5f0baa1cb9d66c2372b8d1c00905afcc936a4ad4458c3faa3b0a2ee4f4f16deddcc6eaa3ea04c3f35d1b3600ece60a78e9a5ec6262dd5136b182344cb672d7678cbf775a9f97337024d97a950b3b2af7ac70065b53b7cacf679f5e2ad8a64f0b0377d8a756e84b285e7627e2d06f81c7704b313594a61cb2b1d43505e8063536c5627720bc827b9a6e63c680d91d9f66c989f577a212b7bf24b33174711d1a794721eb4d1ce03524d944cee581afe4640ccebb9808983c1334aedbecf0557f50fd18ad8314ac1886237bb98776a0f14dde8c0c1d34a11a7d6639acd5d239c44c7bb926692020860cd18b0eed049b3662a3445f8db2c7c34c4de62cc5b34499ca37a5ee75cc081e4767f5479cc7f92460ff7a3e500f76d70e3036c44300005058b5517e3f64ad41b46b3cfc0d3d355bb747b0111ab728b641c19e1bd444f79886793e5e0ca68a80d23fe484b4e0ea4cd4106880242667f17586ae8bdffe94c2c1f7def683fe4a5c3f6a6e7a3a3f826855ee15f422f9bf0917d3caacec99627fa9c5b5e02bd857444a8f4d64f3c5984eab454b059d8d987db74d84f770a1db2f8c4755937ac12bd981f303ad77ff9660529a6a0cda7e8ecfc2686fe412a4794308012098d755427c845a23ec4d6a072dca6215928028fc6fc7a8edfb291dc76aab97b968e7e135bdb0192079da815537a140b03f15397bde457371b54a7a4ff6d55f927c2301601d93a47c0ea5d21afe459adc5b101c97abba7cadaafd566d8813ed2e4b0f327c0cbda0a8f345d8c2f245f4fc8ef74eba589518f434981eca8ee5a4ef6e0300c40b8c8239c010f1e7a400c39343314c5e6573dce7fac15fc18bc93b785da4d8e2aa8ecda10dcdd9e39434ab230064921e32c53cfb560f75fd0f4cf53b827b47526a32e76134a2ed613320003e4ee7bc547107bd90eeb91dd779ef86cb84ecb89dbb27641ccd56b8cb11716757975127ab80b9d36b2d7493db5c0f548add7fc92f2dcac816404fa89baf9734e17237608de26a12cc8ac89493464ae2fbe4bae57122ab87f035f4495d7e101d6e57f0f3763686f0479f0b8c799910b6b133048a1e4a28283cf6fb177b0d6a7570c1146cfecdaef06ec2d3d808f50f443d5113438104ff3d5f3bbaaf9ece04d17b461819724820a794aea823cbca851fe2c73d9e43d36f1bc95cc95e13307db5f03f82958b06aa6a7bab0eec2c8a10ae53fe09f6d13616582de28dbf82f543a77245da7da3b9aacd66506e9dc5c43074037dfee9a3cd7386df559e50686ce50a73d1861e56b18054f7274db50209731573bf92e345da050c602e71ad3e07e063777b2c141e8ee975a0a822ce7bba46e7174b4c70321c597d42f58e126e66a456ef9b22eb55b244c3e55b94569d672a7d70a9b22cf2d4df4e1a236a4c93f9cf396eca0100b6cc00b457aa08c9e180ac5d22433a5602c404e338308ca82941cf9f57705ce09c2ccbbb5a2c06a4e2a73aea8ea06b97ec4a68f13fb57bb1a8df040d3c367d278064f46d7f49f4840b3b54ca1859bc7f09d889ec932aade59d122af7af751831fdf5293f399c78c3d5cd985071d7a357f60ed639d4f899d0609ba2d313c4849c8f6dc8a51b8c0a00dcde64320d92c6cf3b5dec6d77a7c5febdcbea43fbad68c39f2f513387a10ea78ade46d36e238d5144362afbedd0c8dcef338fbed9882b43b7da516f20741d446a4dceb8f6026d7a9b381069b9dc08d78f52f1a83ffd429963cf57bc586dbc43e5cd5a5737a7fd97cac43b3b6e521c8b18bace94916555412d9ec2afa1f6424297ad7822c58c94553d7b19e57dbb6a6405db64f86068c9b77fc930cd8fc665bcfa9ea6d01238f82f7dcd2b0c6a70790ef12553784f602678c4cf007a94268d1f88f174b390356f83062afcf4a729cec84539186890f3d211a720e04b31cf3ee6cd465051d1fa80fc5114ee42d64fe23c8c77325de78c72fe915f2ec40b08e1af221dd83f5a00c2f8093b9d8b5a4b49e831702fccb5a28fbc1dea6a59626c1bd541e85ad09ad0bc0278df8912b5b46c47dea47f397dde6eb6a753119fda7143f5872676ba06f2c2a83aa11f9d7b03dfc7de948f38c288b69ab819b2ebf5b1008c7c58ba6030ef7d55c8f0ef700cc1fb04dbc0fe2f0649fdc4eabecce23693c8068c1f7447bb1f42a7ae7f672efd67747b30aa4aa0cb8a8ac199a2de070f92010050cb52f4e80ac8fa458d254edf7ca29787b0d31284d3040d5f6664cef35451e644ecd4dc4a4a66da48aa9844057a2bd64b854618c4bbe024a699dfae84332144e30458827456a2d402783ea301d866d3e6981207fd9db593f99dcd2a24b6f588b5927c7bd8a813541d4696e0772ffa1d0369a584a1f0dad7d2e2abb67768554e3737bf2d09c72ef6e3b61f80b7d94bfe0c5a9f03646df67cdd190a07debfb6e1e2347f0a6a3c5c1910476708667cd3037c1b5d08976d6edf52a14662dd35910031395ab87c6031570d7adbebe57325c9dd0c7e08bd67ca8bde0c1f6bf5628a15ceb6c0abd2db352d55a10cafc764cabd99ae608868f5800ef9c9c387b9bef89ef52d5f58f015de08638a67c87eba286b5c81a30c0c8f25e5105af14a9cb362f85f1d654446a89274b1777bda9dfbc53f7026b4082aad328adc40173900d86fde5707a0f258fc08feea08c73a87a237b68efe220145d82c8c9809a3b798a655ad976c60f7a998980357aec88cde35e67d03886b8be0887a46de28356ac6a5eae27abc43a8baf6d62ea4d9fe26043f57ef78560f0c8d46b266391c3aa71d4f66298b97b799ffaf39dd3c3ae6ba9c17127a47d76b179e8b5b47236622110f0b7dcf445f3b5ffa2a399b9822009ef8659cca1c8d2e11b6dedb8617969a2d0e7288503fa35d4f4ce05be6332fda67cba35d4b40f7c6af48a9c99f901df14fbe1d1c58c7d48c0c4a6a2759b7c4e2996838ea7a6fa7a324d6849bf0277cc61d7053b055979345fb753012427081a7a860ceaad3e30d6236d2e7c9244823870ad7cedab3094029b17fdaa35d07d6981947bd44e465a98249e05bd7a86cb2c29c46e6f21da76b95a2acb260e5e83432607f9d1f2841fc61c261595df92faaf7466024acd1fc861863ae6fc1999c4b15129ad6b01c2286af54e858b292eb6ca39d9600519c63203068d76b4bc49e5baea40c029e3c61c8b965e7e28c023a7846066b1286c995ba5c26ba2d761359167d99559930058a432e79e27f20c3876e5d1551d3c2d5eec52a21e92ec6f266ebf0670a132c0426866d055a9737637cbf575eecbc8c6de8c0f8eed6f7b4ee424ca5918c08d8c4b0f2f39cd2b3364e64dbd3279e4549ee1e4e66e1f610c65375c90bbd7dd2dca3a42950a4cd6b93f0fa544f13d8f681d2f9cde2afd8f281ee7be1a12f32098e4d8a8a12b1bd18d70787b929b83f58dab8f5bffaacf2256e0bbf16f48b5b25840edea5a848245375dea76b016933d4ab0cac952d7dd411f147c9e974365bbf54841afc9fec85a3f702c3ea54cb5902894a88fde976e150a20f26c9bed4b62f5629ba0f47f37372e10087c79233116aebff155acd3cbc69f6de504822cafd0e2f8c464e5f015058ca444d835854ef6649a6dc2c2743d7b66631d0d54ead82d437185a4a43aabebdf96a9f9e0595559d28be47f2a600a5ce86a6130190e0fa0a135a40837434112b14dff8882878e6681fb1d34ec817a92aceb7b15da809c5183ace937a8f51fa289310e2c24f64146f853e1880ebdd7453a4c31639f28c769713e1edaff378cc2f0aa9d8ecc90b620bff9f8239afe679c1bf74cc26eeed810f353099842f0d29a6d207655853c351d5f572aae972b74c0d65294dc51ba166d9253741a7b0a375388fb5f2a54e205655fd33fd10e2c44d9f3c7d0564f74caa9d5a62508b16c0415c9a321b5436b6f1f47d7fe3306e91f0efbbdcadb70043ceb45b4e409edfe8007b981849d59bdbb74a0ca307d87494f87759c4811bd52b45c68e57bc536a8f552dffb4f8b9ec1318bf0149d569a371b6de9cb13a03d467a24c9a2b0e59452a91dc37a4c261b5f188dc21d0d674598cae8dfb4f331f9c9d56aed514d110fe4e591ee674117d780baa19b4c48589255a51fe0beaf6cf7c10f565e5c18f0b046f1d6e728f705da0a5df0050b15d08956f43b735111f841186e12a329da2b7e611513362736992de74aa187c23e773183ff6321d5df7edfb43bc344225a69811b997164cac57bd7fdc9ddaad789f692c40dc071b2e2a5d77fbd94c9ad6253c25dc417f87b6e52e03621ccf4b3bff5b402677aeb51e216335f3eabbb34b8914810e02d7aa1f7c651789c95efbea81ba02356b81718a778fb3e0430a21e25ca1c1a33dd73a3298131ad806123600b115d1120a27e70f8743503584c04d371a64465064d6aebcc2888bc16571702b17ff3b20d61a7c29eb2eb9682266bbb64cfcad7a0a5e7e0a8665f8da6a0530a630b6bf0671d1a7462d924dfcae85e3ec6eab55a4b0e72ea84e0bd0878635fe2e760ccb274fd60f00a91e9c578b766c45ea20ed54db094712a41aa15d3c9c4f005241edf7e2a009c5e844133d3be0ab5f59cdc2fefb2d4dd602f2e9c01fa099e87006961cbcc82e22858340e2422d27953832752793cbb97ef525285481db653339bb61fa30a6f292eb5ca3fb30e467840fdf8253378d0059f541db8f15a5376d39e0c01500c4ed839440caec8a8ef1a84b25690648c9b9037da981d43da69712db074ef19fba75911ac0143ab1854c8e64c497b56a0a4a0818fc99d88c57fab0a7af5d145ff03137e96b1e7a387fde83070d9ce4fdd749e4318ba1e06431e8c31a3978f1d3fe86e48aa2580fa1d73e428c80f71986a92f046207389077acd7c6cd46212e9e4e1d2368f64f7f6013d2297fcf24d79708600524dfac7d19514e381b55f40f11573a712ee7635e05ce30c44b48a483917d9352f4759bfacba7b2939ed95027cfb2855a26e64210055ee08f997e04b228612f6a4b79858e2128bb65c250d41d3bd8744afb835a29d15e5807c4dfb3f7ae6b9ad7a45bd7cbac4cbf3b204cde33f8518dd0073f1a200c350db967fe40a8a5e56c17998d2127bf8c4460233dfd1067864865f48a1087288b8810fd5a1969a17729a6959de016ed8fc1816594af470c0f2a892df4cbc398ca3daaff63cc9f23994a0122fea33db89fdd2b41f1733c7854aac62dffaa59df69c4e3e8bbc8dd9eb453b3cc3fd8f0a364fdaa52d4d7551eef5f897f1b3ade8ee2845833b2ac999550cd3aebd1ffd4205789ab12af4a458247af6f9bc80bb609ed12747af8d6578a071d031c45865cc1e02789fbf15a7224f610d4fe968b84f2c1e5c528eed48bff4fc9a8d80b1aff0aa75de3993b766f79533a4631f748afbc0974c6c81535cb57836998a9a31c4f6d15733454fe2c921217725fb07ab1aad83c55f5d30c588a455a635efbae18a26ba32df8c9a9eb8e719b5f7e0481550ac9c2ffeec424eb4d2b2d5d78687c7eac88e8d4ad61df41b90a67682da8bba1442345e8fe360f3c888b849e515aaedcc2374f1dceb7febda65ef402eb178a34fb573d87c0831bead0e8f8cc965ca5b198095e5fd92698cddae1d9e632cb6d7e74e80272b245eb649ac5e26e93e9018b72719f1159583de0cb357158914ee5ec65584d206fe8ee385aa4d9daf68a42c9060279d8cba74e950bbc62f0831c741d212a66273606a4e4a4f867b82aaad9f8b73e772cacae5b58f0f9173484bea87f5cc0f5edc1099fe7ee52e47c9cd54798fa782f7378c7d4bb3f8e269b22afe3816cde64ea8d7c4fb0ab2708aee9a40c3864620b53bcae5b2a2bcde9aac95ac5d1d5b54bb3f7d934ed7ff72cb58d619855796e8323f4ac4f246a3af8d9f569cfcf1bf812c09caadfecc135c926f4c89c5eae003f8a9d5c31485f77dcaf43375207c4194296e86bb13d03857689bc3368d276b998fe3338a1e49fe6fda11f5e0cea528b63ad6786496cdb48bd34402c8e4f681d17d532cc01b7902ae446064841054be0ee8a969518eaad01f5dd2d2e8d33f68d34c63880d10fd49619047470aed7149c5ba4f212a034fd43b8eadfb3e60ea69c8837a0e1b07bd1bb1473067196ee5120239306896fea40809ed3d457196dfccd8abff878f07a0c2c6f0828d5a999661eeebb4063d8590b3ae02eb782a7a06d92a4b5cbc14199085c713a57f74786d7eb15a44c2c8a3fe1f55551d5b101647d8e7ebf872504475abdd390106101352b0720e4665df5dd392246f3cb7cc718b1036143b74eb90357d2fe9fee9d6702e40598e24b729bdf85543d7b1540593b8ca404c8d898e05b943e6ab04f26d99e7768f6244804fca55b0db15e3fa6485b84e2c1e5678e1ace94529077be77e96679a3c121088f88cd2ea14b23971904e71e4230ffe0a8b8cadca2186cb91b06d94f48726ee97cd0c584d15351d8032f6cdd44da9ed0735adee1cf5af5cb8ac2858cc992748747651cd1f0726f6f1f286b365d1738c3786189281ce0a96241acf9a699a9d85e89a631ba9110e2b8a77050ae0d8f5416127d48342d420e29ca0684214b10e0dbbe14b28335c7326146a7bbc8d89b8754fbfe9a7a62e78a6e9e9fd3715060448b5f510de0510e04e5672f0b0b40d4391c7f760e8f7059b4bd39b9563b4c2069e9d7bba236654da0b1a386dce9d8b1efb9277402d7b800f3a225f39ad390d9d773d1e52e1a050ebc52664f9fe902cd21d78e6915d7cc85eda9edcf0fdeb0e4f3b5b84dffff92d9ae4439d9d28d418e65e40ec5c6240040f920fbbc23b13eea752c0556965ba136fd0398b6034b276e225b432a823105dabcc3ca3b74ff9d42a24343af9fb2a29f3f2d0d74a0a726e4fdc9a607d8833fbb9efee3dd822e5e962197fda95a99398adb0d02963935c2ab4eabb1ee379f305c163ed312c9a1f55d69a68df48573b8726730028b4b5b7cf99b7df12e3de96a44c8f0126bba0ee3f0e0db8ee17ed6b1fe4a4297d4459cd8886abcde7849f65ffe1ddf2c48e1d9ccf93dc37b20c536b8871a913d01b68e47b042e4f43cfa5a83f08b487b4acf76f2fec6dadd02e7183e955ec86c842c845d09aa82bcfcad6a78b497c899e1d18b084a12ae2f3852ffb6a16d34a0dc06338b0d1812a327f1ba90c2d9ec129ea66a6f93b7a9ec11a761a353ec826489d1f044330211414f65df8e93b80f4fe1acb9bb341c4a8e2f42c2a6f5532e421e2e6f3b03ff0b11f3682da4bfc8bedc5b52ed5dd3b72c9ff1b3b7143e1794a3f969f4b208657c9f94773985af6277325c4769d9db1ebc9c0988938d76c04214bc13255ba8ebc234a3119793db3bd4dc64e8d3b1b2c9770cc7200c6537d3d30ec6b8659a7de8888bbfc5bc71dbbb344515b5af78134de85ccb18765e09d8b41cb9d859f0efe24c0f3b120c8219473206ef4c519f44f28d2675e055ba652561a8f5f166e1877f6939b5852c672c863a9c41fb6e89e07dd1d468064f1cc270784e1b72110ecd068c95bf7d80737dfeda6fce615ada7e3652f101f8b6f7aa1044769af8fcbb491e129da989ad4995f78e1bd51cab1376b28d06e43621dda4ab62bce4e46e89543c97cc1428074c0d26b20b067be3974288fc708f5d14211a985f8b99c2faeb96d878ab7fe7231d3bf302c7d30d79089a100de853cc0284a46da75d1a232674897851b65d35851fbaf2ecdcbb4fefd9c5ee4db8e211715abaa1b6bbf67385969492af773c91a1d5f29cdca42fc1cc7d6e8a487caabbe525c5cb2a32af327ce450cdee588e8a0dd28b575ed8b0f17375ec6a6aae2e29d2786e405e2bb4fe90c046709af4c39d2d97ddb8efc4ef5d9955d80540c7dce9ddb51cb7ef31a82645bcde3131b69c39958872480c032b74829fa9f15744478a4b8e498839dee948205c80665f2848edba46d17b401e05c4e3a5eaa50acdee79b0468d37ea7df8e29511f5b65fb48a38203583d908700ecd211b0296f7af5236b080405d6da97774386f7677c005a0974be701c7d193970bbf719a5d9a72e35fa0ce1b5f3febb57b7ed7bb412c765c89b1cdc3ee48133eef332c1a5f6fb33243258266b3ddbf6376dced0c9901a0fe9dd67c52b2b859771610acfb12e3dacf8fa33fcaf1c38ed1e4d71212e5cbf007324e55269bcee0dfeedc96b51e93740ba39e78b0af8de4b143f1d946ce07ee16e57e0ac82fd833c9f7fb5bf0e8faf9871d9bafa033996b6212b1b510a83215ae35e9efafe580ecd5bff18f06f886e5c25c1f572234726d64ef9b48190ac6e12d9216865633455673b553829fd3c3c33ded9df1af08a5655a2912d4c86c52fb2588785153bf822b3456a5e903e14e0c5a509c21bf46bf0d826dbd1d975352ae1687a3f310d0e3b598324d14dbc7624bb8139e49cb750ba0ae0c0e751e564284812e2dce262dd6800fd6cdb89ffcbcebd7b518fc6c0a27e90da26b6db5cbaf08f5da5a54fc1cd7350ba2bc26c8d7ca7729a3909c197ca02151cf787a0649f4c5d52ace2a1b24622f3c247cf1df0ef7783e6da9ab4c42e0f3fac19a2c8847b025af7dfdbffbdb03f8e1daa4ac5b08e0697671a8cc7cf386cb694764f7a45b6db2f5626d7926b7390ccd43a7b8b53c01b5726e22524414fe323dcf4d6de2db89f84776a208143f7de52ede1a99863ec806b2a1baff0a2da3a2e8a7d7e1dc6e916006091fcf5cea5f0cb73851e13687cfb7a7bab705678433a7ea8f8915f98b2074c1b85b41692e390dd6b102025e8d7552c227cb17c4df1abbc3d4c55cb29793c10b02c8f0b191a8430df69f8f66d65562b2674b98aa84c558f5263138a04a77bf32570d7fdebb3956dd678eead7e8ec51c8f7dd2a912bcffa0ee2412c3aea58d9d8438d2138e148b3c59254973a4ba6baa667e420112a9739719779c9fb0da3ab7d56bca768ca72e446f58536f6551117bb25e52b9307b771bdb44f74693ad49e91ef3054d6dd3462e20f952ca4cbb7d377b074af9f49ad4d43d736cdfdf8884da69b7ccc1b7ff9aa174f08fabde607887c96072ebe76f526b46ed43931ad2b133bd9f66faf495f3467425523ba5a9c913a55111b49060b888ff98c489cef2999b23931d1fabfc19c52781e3a128fc3a8216c2717f77d6d0d26e5d37ea825204bba17b3759659cd4c596ea8906efc2917c259bd872253a60f29d25e3ddbf59ba3b423ffdcfa9ddeceec7498d92836497abd9c48fb521f2318f94d6118b0c6f82c20bc8b7aaff2728eac487376c6b4814b43a26de71f3680b525a59091bf1fc25f806fcad11efe2515e958acfbd2fd8d04250a70cce2402b5e3f69713b6f6686c863ac4262d02762ff5403c9dac587b92fb243063f33b2af9e973777784a41c1c14af096c25bf4b8a55cf84e9626d982387bdaa2909c0479d0dd6e07cac827e00496eb1c522afc92a264949fa07f6994c8f23fba7373cc06af629bc6b5719f7dfce7ea57a4c5859d711b77519c27be5d3bb5f0d25a636ff284c74f28caceff0804ae7ced2ca446158bd20ef8ebb85e480b278c6eb7d366b9fb9bd6a27d48ecfac66b21317c5fb4b76d48c9fa11b9bfe1d1d761040e5c46c96e30e0c84f67efd2bcae65b8f64037df9fb046d9a0a469b70a362d26e06696ad7726ec0eb3b45e3c51d8b9084d0e661a9dc8e41c0af0d2343ed43f4bb07accd280fe66ea3cb6de84208aa993c302c5d4d1f35035c3378fe5ca2215d701116fe52627cfef5cd7e736932495e00ad5bdbaf6cfe9bb6bd0f94836b04f7d44b2e631d123a582969feee034473c7176ffd429569f3f116765b4e82f0f5a931de7c6550c8286487c977c0d8e52dbccb9d99fac8c11beec486e39220d8fb5bcdf1886cb52b4d0b56127051b0be81256260b86b101a7e7807142fc924cc1ff5f2addbe112e4b133e06f7209537676ea25dfe1fd341d25782948c85c57736860e63afc2a309a5cc56b06045089b614f35c439c18fe7117d7704b35b18176de82f1bf73b1d7f657aa40ffae8e192664284fb3712434be5c7b2545fe326a7c89445d64c9ddce9fa9c8a783f82bcc6d6d724558e9899faefd4e8f5dac46d92e728e70538515df3e5a09e7ba6b8f6a3438b788598baf07e70137f8bcc6549734a04974b12fc3d07b73544acb8e22bb22cbe15edfe0fe3411701da68ad4c66d351b5bafa94f4e6afdfa9016dee94d86e030d610126fdfedd553eae2ee5f0320d9ecae6a606e1e756dfaa7941d057695156f80e519c0b8fbdbb185f410ee737bc91a29ec01139bb97278800cae6907ae6a8ec5271d5bf227ca92d62419097e45adadb37fb2c72dfeb57e03c6b99d669a87978f1c45c9f6374afec5ba31388c452cae36699b113c0bde131809672afd211391c50eba912bf305fe3afd7f040544ef2499f3e67930a99440a71fdf97320ab7854f43a33bf825a0991d362cf4510a9e17c465b88771a07f0c984e4a6c6f1f1a7a1504294fc793c6d856ae5f91d85fe08f9e073cc467b8487fd3dfd0321b26e578fe987456ff061dc1cdaa4161030b5d95112097b77ab897a1411a98709de8bf88f449abd807464d5f6b75faee38d5be3005faf4e9136a137bc846cbae5f2d51b0df5df75b491bffb71656b1c0e087ab6960db79e09894651451ac9075c8bc42faa51d7f692c4ddbd3b7948f5d64e7cb470b0c4e2673ff3574c595104b405f3b6e2fd16c8918a388ba3778bb4f2abec7d2eed59c430a732aa40a4773bb2fdce41365c1e54475e7af747c4a5d1e9cd34612f17d8bbdc7b8ecab0a0be04afdfce4f12f341320acdff70a70529f5021f0f110fd4e421e11952491ab287f821387e41076741da723540983fad7a76f20db70d3f88eeaed4fd37a5fd7e879ead7458b7920c72c61430d8ce701239d03035d6a63cc86aab3eb3a951c7591f60ab2fe8233177668d574d4293e6f7caa92313e88c95f7eabf74c921ed06d6c1d6b0d79704641c8f88b1f6f88912b2bf6a61246710c9bbe1441daa3bc83a7c117944e7ffebb8807050baaa750e71d77a8c60e3dcd34668d0e1afd35183e0ad80c0ddfd8d499d379b6de7f4429492daae87b8dea464aaa35c1081d0fd90880f8235f264c99e80968348b040ebdbe430be04bf71682544efc5495a2faa8eaf16a84118da3f5b0141aa69aa3cdb14e47e1b5c1b489295d3a2bf049f4be2deb437758ab7aa492fadbd83593c348b001217592622c0be46a5609bcab7b230f135f65c7b6571815cd46e909ffcb4860e0b90f9db8c8645b858ae0e143a0f1f76a2d7cf8b98bc729323d974966259569f2f7f6fe4aee5b35b5bef68699c9ef8cf99506143c7e797430a8281e4e38f77440c474dea007ba1a03da95d43660e677c7804942c798f69ecf6fe5af416c3629d006cf65437c47b475c603f3a1cb9e5fdcd48eabe3410550177b1625c629192faca750babab3cba8166a880a6274dfed417b1d7617e1703211b203a766d7692fdc8d3f068d160da1ebae6e4102c171c9fd5b3eccece0fdebc4fdf35ea7deeed066a2e470450cd745fe7bfbc1081c1b9a185e39d5e9a675243945307114a770bb54cc862169fcef3c56b779b2fceca6089b6b55b8969b9f84767000093298b797aef56f4081501e2ffb4c2e3c6798dbbd8d69dc9e7b2845b48567ac4e8b1a8a0d7a04e5f6156f2cc6f6206385cf8a7f5ef64214ae21b32d5b6e137b67a696b3c5c2e1316baec1e1a84e1d5fb8bf295d96dfdd46110fa62022375bb77d0b72f8668d749bc6d3ae057e0b2a6cfbbcdd3c0a4f22b9eecd67e6b1ea26a6b743182299e4a56a300d9e5fef362ed076500ee3654ef9b76ee46047af8e5e923ed5eef905ce5ce8d0e3f9b8a4d513d45302241b4de44a86b9dbf70bc42ceac139495e445353815bcfdd27d844f3c0c0b75a87ac6a1afd6ff63a96f999cbb27cd128cecd2a7bfc0c5483908778951ddccce1a05e66f7faba4e8aa4dbd6739e0a2ef8a85a334fb543885e9d8de8c5126fba1ed5f9e68329afe8518977232c96b5774453b415d6944892f5b4b13b8a87c3a99a8f4495c77396ed1aac9526ff82c3d59137a3791882629bd03fbc1aed641ec0db370818cabeb6846a77ff8af34a7d6f69bcee071e65dacb78a4772cf491c9276b330d1a95f458d6cb517cf511d62b6e534a5f66ef27f849744da71aa9f60c07d2ed1b412efbc40ac4a2d310600e15f9d849bc3f93ae043e4ca0178b147c2e8896cbfa359fbd4249ded3cd82e8db82397e21ce3913e446d189078e283c0979d14137719ff0201abb9f4a32f3b123bc55d03a5dfd76af062bb2e9d3992986330b5b984a27270e93879170ca0dc4d0097653fd3132c4f98b734fadaf85e3dca55d6a564b744e6ef6d63cad5c7528c8b2c491d0118106a91ed2e9bdea9473f117f0f8d93d2f6c278bcf276ab2d6e5f5fe66111cc69243a7077007804c6fe0afd1eb8c88e7ff8a239a9bda0d92d6043d37855b4a190c83db8e74315e9dbe32fd1a77afcd138daf496b61dd00c51d8c8aa348f8c0cf98ce2dfb07efbfa42871c23cbce70f8781e381464ab9a9135485c38cd86fe8b3dd2d859550ca0b2a56a6e87de1bfb70c822eb3727ef5724323f7d0385c48298c84a7cba57849aaf7f0d956260fbc2b6a3899c7382419c21f31eb99f0fd0cea213445e773a6f505d39d10f47e6d68d4694c2ba6e064ad006d276805fbe342953b960ec147035482860555aacf244a1ad166ed36b2673a96f6ac77fea3357291a2510a4169b7f08ad7d1af605f5bea66692de560f55548eb82691f6c2e1c24461e0e415020e951868fa927fe783bd11efa4a1d0df3565d67d9066835e5bfe11c7775bcd4b6c1fddc7634c36c60ec86ac4c649d23f2900372c22a5a421047307b742d82b671687ef6541b8d925f95917627246b8c3b2ec174067dfe7bf7db9acbdfdf9bdf9a065c3af1058d59bf5e7be65332912e16561fd56da95bc8e1a4a6747e32103678c21d12159bcaa7c670cb62973517f3ca31a6fdbf53791218c9dcde1acfe8a255c54be587854c66bef30954bdd603c1a1e6dd55c425613fe273c4717a5d2b0d77376d1a106a1b7ced0ebe238bbc5f82e19d4d4344c71a3988cae7966885e15e273f0c1b78f340d39cea7137ca8f331dd3807c3006e1ace651f5ccb3aaef137dad05af4f87c7c25112afaaf841f9857abfb4f485d31a2030871dfb320942c95151b2de1e048fa9e09984f1cebaa05f81ed643da8731a7dfe7069fd794d2709c45b6e22f0b9f2fd677791cf21fb2cc81aa4b6dd03ae8acb37560259f23e45ddbd1260012d6c99c7cdf5ffcb59ce46c92d2ed25efc4c1213c57f0f9703a3454c25c0b1053de62b0ffc5bf66edef99668a2d1e148fd14595c8f34b9401646ce5ee2ab88b689ef51dbdbf19d3e1844c3af61d60b216dcf08ae7dbc28db92ed891cdd1b0e9b774fb33552fe1dc5707976a652857773b445c611776183f0df611d8dfe5a6b3c70cdf82449cc9e8b4c5e56545e254ec53a3e3c8e6569f307656a33ba2eafc621dd32c8b1a8a1471715bd0cc16b00b7a06682122c2f1d9fa98bcf73a9536147d32446cde257c640f1345c3ff5625cdb8ba2d8eff4bec5b05dbb5a846456b918d9afd1acc13f83b2a10f0398f92c82e20e560a7becf8a94dac5dd10ff320ff5ebbe49b1056461fc5af107cbed4afbaf3b1e8de5f1ec6109f1dd7fdbb5c987b44022d6b9fa855e4a0a49e8e5b8ed54b36fdc11d43921144cd3892a631a9a574ef35f10b01bf55186c0820001430857fd479498fce4fbf8b0085f69419e231348adc9741dfa32c045061009b93c0a79cf5aee8fba95db92e608d6c8e1a0d23013b7f89d6e15dc4f07539a527804922ebc022072a7cc4e87414d75a5edc3463242aa72e92aef303240217776c82d0e0b45e5f0ce5ee8c33a745eb29ca085ed8e581dbee3cef70d3e72084de31425fc83ff7ed61f2a7be810d1a52429b46946c8b65a4319e4bd91b83f707424068fdc2d3b2526c195062bcf0bc930b983ddd066000895f7e6b38c33eae280b5f9bb3b6b9b7189724917ecb965236ee8b96418eaa7a12e0a5f694b2616e6fa15783888c3a2fc649d9111c964805c4523af8c8edb2fbc71ddb95f6d2335e656defc9842c9c42e5e9027943054dfdc49f6f0c7b09c0aa317ce7f0650afea791d5f115af7f2717fce16570fc00ef61be3cf07a61cb1bafd76693aee94208707b42230e126b25d79398cb9f4e6f74593a9385e9821b0d334144a5788a629be2ac1d4f5db4d9dca93376fbad413a250fc10bf801e7e2dc5ef87ce6f55153fd25abcc3baa9db295b662e3bf43dd494aa8da0c106b9706d15783781ece45fb766000b9b09cd6dc9825ab47dd092b842b4f0efe94cf9a7134476a9e15aa6f4350bb344a75db66412d1f930a1ea632d40f2ae44a4dd4f9094d5536589232d513d15fcee9541055c89ccca4944ac3fa1f4061e4560323bbb863aa6e0d5f0e8154437456fd13e3ac582c53654e29078c4f041d968b7d64e865c06d9a2442e57becec2155ee7bfb72db27dd5e9e821bef4aa4868351853e89f8aac74307045fc9c5158f52235401af38d39118ed1fa62bfa67c33211e159a5586ae0f01d6d2575c605e6d506669c6b5779981aa4c651494597fd2b315a5e446f48df29ce44df87d6064d66fe7875af206019ec2940c450157a5bf71bb8f56e248bec7682533505df5eec8e735433827bd23d17e655a648515a061d35c3c52c5f7d3160a160cdf9c856ecd4cdc07fed50152c2241cca03ae17d2525e94377850864d36e9334526a793675c1758501f787720d95a46f592dad2ce1989effb2820889fd29c1976a61d946aedcd16b60a8083108f976047a299cae62fdbbc01f2a4534d5179150bde5d2cec0ad4a394508bb9a47d51f54aa36984dcfdcaa4e6685a8ad83c26c29f4fe4b15d3bc49b9572088f5efb10727925d894f50bed2712e9b193b30b2bbe8b7b42d640d9234b13ff758892b159645d9a555fd0f299bf11f758127046de456ad105e0399b674eaa495119f218a34752817e59f31a86d95e21ac6ba267d513b7f19c73a9db0722c2f039d7ff997498027b9217de1c0b0261f92d239bf6a685fd5d850514209953e8848e271dcc53d2f7d95f1de45fbcc6d7de68beff6ba93895553e28faf4844ea566ccabdf29b7848d3b33e0c85e02a2fa51ddb23f4f73983aa94633d0df5e9f641783caa62a16293d019ee4dcaf730373f3fa91ce0a8c1137aa3bda38398eb2bf3731f81555f63da1dd1ebea3cc9474cf255dc23e35695026e86d6093abab25111655d8bf25ee4e361e31b2b02ddd73566655e8025881c172d4798b759e2a6304657dd0d62254b774555685745bb49bb447a167bcdc6be1c60eee9f409992f8f374f8752cc3c025e7131b9b82cec03a63499ec5c0499e3d7ae81b30a7266b5388f5843a1592c6f608c7ff594e0f76fbeddccc86af187f312c00add3fbbd1a0f1f477f941307cfc453e4506348864f4cae81a92eebd1a56933d904fdc0d6258830fb6917b7bb410d4318dd3e04dbcf994fc8c32308fda7523ce1cf1288fa245b6871cf3975f5d12d60a5e44df5786e8e2c2289178904eb6891bb5ab6d6a18cf5104b108dd06fe6c1474c1417bcd4a287de2f8950ee7fe828fcb6365f1c54d5f1e307eb694981f855315bcb2fad791212d03042739be7242fb862e07fec9c75be3b08ae6063c48c55e955a7fa59fe13bb9cd5230433a335c96f61f79da9d102d692fde81791b0294fc9da091c44ac5deebeaed967285c83a28c13da3cd6bb03b7853806d365dd45af4d598ce9f03c27289ffda430fc7b942798f916d21582defd8c47a948529477f0fe4491f7df0625f5cb7221d61278fde500921c01c8e11b0502bd4dcada7e26b1573bb6ca8392c0d2cb7ce0eb2ced17576d6f7820835e3e5a930942ff8012d87ce29f79e6607a8e5c1aae6fd48e4076eb49f1b9d2b742cf8ab7ac474ac5cb03901af049b00825f4de23670d16d90b933d00c93f7ce7473501eb26b9312e3f4ea78acea4dbed1d8ae5903767466fa702b92c4697a385d4055ca7f927372bb8003f9c9b29be71d9b71ecbaffcd7e4bb3bec470a50db3561c6f778a40fe140fdcea4dae636cc58d31fc640314c4fcab0b542cb74d9785878d06ec7b7d1b3f0591093c0205aa9e4a21b98885bc412741ff5594426b02f7191d82f2f951b23dc526c78d6da13cbb7bf30e22e9ff2c49361729c2b906355134544b51acc5ac5478238b0a993d0a64493065f8d6e56da8b1db397ec22718dbffb9c9d13de0efcd4611bf792be4fce0dc5f25d4f577ed8cdbd4eb9208d593dda3d4653954ab64f05676caa3ce9bfa795b08b67ceebc923fdc89a8c431188e9e482d8553982cf304d1dd1450286cec75eeb480b868bc4508db82d9dee6f8f167144d93e5b26d8553decb0547e15eba1dbfe9eb520c80ef2e0048e4a6ce7ea48032bbf5b849760023a6ca0552a2794cb9f3325f10810f76fa756233e592b18f31c8ff1594064d4ebd51617c3713c68a91b51444bc6f72c4b45f582c62d99a9bc2ffa2594191fc55690619d2bfdb4c5dec2b19021c80afbfa4e9b339e74c3fae7afe2b2b86918bff6eed786fb2a214ab147dc801f95ad0511138fac13a93aab1a2ee22f22caf0032162f08bbd812245e4fd4a9a91aa5dc614577b52c2455e38d82f60f15fc9265d8a7f4511ff9d1865ce6584563490adcd686cc6de16d3af028623f7bfebbe2c1d86a63da01dc87428f213023954c30d79a1d5fa84addecdb6c8af0ee1434491d1aa7a52bca4add5edd4785cca9ecc1d5945259f1ce3c10ac404132eebf2e6d8086a6e1cce30b7ae430a27ec605f162dfac6ce2cdd55151698bd12d056770f6f204ae4046b2e708db6f78449b1323bdfbcab521c6c7e5541c378008ba74c38d7c7c08ea1fa1a62c4c8212fed2394a7a34d6733f630dc0c4cc2b97ec954eefda24d6fd06e2170f903e50b8d5f4e12d418fb8ef642c0daa47824f5d001f5ebc84f4fad3bd147cebdcb9c3b1f1887295b8165971b6aa306b85458b1c6ddf0af234f4d0d2363f3702b8c6c2477916544a8ad09f406064deca281dc71a5a5ebb58912b41449aeab21cca6b36c09527ee145dc573a688e38091d512eba1f022dab744a1336f109e5401bdb205656f42aabbdafebee957ad7c86362ddff756b5cdd7f45e8f9dc1e2857837a3187e2cefef06a8826652f44c3c72f3758b64b59ffe804a6b3e14d43ead4be0455753f7b626be6f5955298748261cb4f3d8323566d37aedcf271c723a344062a0aa2bf620b5abd98c71b63a27a44e20adaca7fd94b68c879231ffc35f832062bcfa5051b405958c22a44033731dcedfadf10d36b00e80bdbd4603ee3400b28ba22d0831fa7e443023d4119ab3f9659afb8daa0743431c39564d721c4214c082592d9cbe7b88806e98eb6f98709fdbf99d6ac799d4bd29a3682d92740f2710f2e9e0541fbe8c10ee88d0a3553179f8a39d6eab14ebe36ea2f8d0ac1f25a26c815b30777d4cf0bd57fb6bf5f87eee84410283a09f111fb5df101d07440ceb9ad7b6044fffab1e4f51f9a4aca9df66467ad590ec62ccd8c402b7fced0c4a6c629d024322ce657c8e868b631292dd4907f71d7cd886a77764b2f655a49f698c8e7b47d739110274419bb8906dd8ff008f5fe231ac3327625d97d4107524f1b2e4188ea7dcf1086d323b891306a6cef1a65b2d96b090d602775a5916a8c368482e1dde9b529601cf270c04d42522d185149305932cc63bbf7aa38d4d85a658b53231409be5277401e9b633bc12749024a0ae721067fcde022d19799e54f24861b9fdbb8fdbccea6d40e21eb114c5933714557cf5aa5b4831596524f15cd2c1b48a29575f7dafea7af338cc9c743d6324362f2c2a3d0b00b6c62f962fe66c4a166f5c1cf413f5fc90cc5f45667b038755cfe5899868338ef73c1ed83e3ae86bef2e3e1334e5c9a817910091f56e408730a61e9b2573fc7b5e83daf108a06faca7907843083a5177770bc2b933981bec1f85836bbaa58d4e51620ce974602996a65db2b5585cb5f019024ec40740bd3c8932bb0040470f8f3aa35cc969c13db0545d936f0d911e9c633e4bba58ad4d02d6766f639da1a9c7800c7198d10cd3821a57c47b0d22b401be8662a31028f4c36d19479abbfb847d8b66f45e938a15955e15ede142579ea993a33b8816f9da09b8e3eaaf809dc739c3788c2397802970895db5a79377051c485e7d705268265b1e9c01a9d6ce9b83900ce2f0c539379c04f8c4d7e7cc10e0477dd064acbd0142070b3391a4d828e45ae89dcc05fc689f36aec378289ce87ff6c8de6b0c3f9245dbf9296ed20195e389d566c03f10e30386465a933d30b481bf094c8d5a3702ec032e8b4847920b09859be5d35bbed14f5e8a302f0ed09d6c0906c5d27eed78bfe5720028edd2b1dcb602c10d414e5a0c2540ee5483c3cbca3b88ef4360a91d47ea8d3015ab0bb0e685d2a376d908a5c142313b0a84536522bf5772e7e9b3180b7a46c41769832faf58d232170c33dbf61f25c05af9c693fdfc3bf7c7ff529293fe6664360f8457bd98cb17f7c019233423e4254bca657fe25afc26e98bd0b368dcb6b77b86544f9aae86f91ede00a601b63511e6df784e594161a6577673a2117efb66edb43b40ce00c881954f318ce840e12c3220472bea19342019a68488164a001894828352dff85c5763f9f4fc6e29b11f3776193c1e4a3b3b35054a8c00aa8c7679d872ac57fd092290c6911e1dda6a92fdc738a97c3c3fa0b57a0fd756056628a39f5277be76968a259d4f1b7cb9d72c8dfdea9b8d5807f6a0ec1990a0c357d51abd69da9acdcc392965771b132fbf96eefe783ad7045de6ff45b2e0674b2725e71c00fe756973d4a40851456ba5e97828b42aade4a90718d96c20ef31079ec211a25e0bd6b253069f6d25c20b811e784405471d3cb0ce333649abe4895e8351a039cd2846103374207c3bba7b2c264149db19b1657f7ae01fc49de8f4b8a07d9dc8937d4cebdcc9321dda54440fc9793f1de692e980d3c69ac53c22fc7dbbeb0f37f93370ab17abda384cb8ed91cfc92eb3f7e7501aa08eb234d2bb28169d46fe6e47723ab8aac322b5d70ffe19ffd81f8494d920b4abdf6cf9a5da00e90e347354c561337b5db8117cc4810011224f197a0490e3b8ba62d2fcfda80d5fd65d74d3bb29e25afa32af765b357ae000d5257c9133208d96beeb26244dd6e1bc6b0cd270f1cfbe47db0589e354f4ee61134a7381ea609b079cbf5d61f0e4d58903403a2de283100e581a9ea605f6a30db090451ddf2a4ad5a4578afbb9bda405cf1af13a2485b61554f79eea710967cb55ffdbad370602c77dba963bd1ebb7f877a1e0dfde5d1a2575a26ff8bfb4a265aaa01d791d7c2ba6d0f0676960f6752aa3ddef643994a2056325fb181880bca1567af3c8b7152d3a4402e7cd8d644563fad707105cb1b87fc7882891a4f41d48029546e42d58704b82f7fcae81bf916a24960e2c6f3cc35949d1e0ad8a982d2255fafc13a8ce5da131d79056648ec008ca22ee009cbe2b5c900a0ab2f3f455f6f8b0ff9e50fd5a03faab8a0b5d5a3a0594848dd409be5750453a8ee90691fb8e92bf35cd4c6fd03b857ad21694aa662929c3d5f0dec4b1fd0f6a549aecf689b0cc3088e7c5ac280f794c50bf3206ae3b32e7ac9b4458a02a97a1430dccab65254e0adf36e23ac8487f29ec4d5ff6790556f9fc1f63038ca185e74589cf39f9b4bf552100cca31aae3e1a8e0a4203304d3e00acc2624cdd28804441581d27ab27c81a388eaa6f84085f261e3c04b439dc9104a4cd69bcfc8830c120c0ddfde54510600b28a52470208956842ccc92fd7af80ecc88a2d94f893e65c80a38440ed5402f8215e54c45bc65b1a822c324e4ee1b240c3a332e3ff25239227d55838da0ff8f859f916e6ba59a3f726511f25702a1514c2c4440358d134316635d42cc6ef689fc0cd1134aa3d108cb3fdd84bc7c339a74a7fe9997202a8d8d0277093206cc24cfa5cfc24a7db21599f64f637c2578096cf188c0ce743e1f6da4cc6127322a69e7b2b003d3fde46dc6d3911600c519a51c520b3d4351f8ffa08f83d113b8b85e2a7b9f5e4de91018381ec825af24bd766c14af995d7e00370c0bc5e25f611d0d8147c25c200add1fd91f1f19f0090d85457e9b5b83c5fdcf9b62ba1a71f5027ed4604184b428f4898f1ebc782d3eb0d98dd7f80b1fec98cd34da8904b23c0eb80c0c455f710bfc5e4462c7cdcd894f7a2e68ed3198bc783bbebd5b258afeeac30f94f673c07a9ea6df34699d38b392710e79a35656fd45202351570762023da7c7407b4b073e826a48dcc972d58420c517514201 +Output = ab8d3b412cca345287637a58927032b7 + +Len = 131136 +Msg = e61b2ba13da23accfbee01b1d9e79d8c7ab55ffb4b1ecdfbaf0fea135978b8cff85dfa701a2b3ee24a481bee7cedb8b1ac388d4dc17d6edeb7dec5b0fd1b1faf1cabea1e9a0b7c8c1e565804d416ad85135920b13e08cbc9e87586d93b3365309a2a821385eafcb3bd403f5ca90786eef9419f918967eea588fdb5f8d968933cb9044ab8a372c53d702f595cc36b4bd6a41892546b41df58e09ddb74a064afbac361ca73bb49de147f4b2c6deae802245d058262ac3ea4cc387e7fb558ccc491fe688bad9717521e32bb42f8e526b5c06c30f623140747e7d8c72923c94bd7abb34214cffd852645d1a823637dce6b9119c276ff6a44d09307a16126ba87f2ef2916ed3fb63a646fa33955177a882d81ace38a5e789c45b70e34b026f5281c45aa0d9f678adf1486f197627da4fb02776cbabba804b8b03b35a79d8b40d75e957c4fb1ae401c3c7103e9d2fcc2d0f25ca3709045d7401806c422b1bd643cbfc7e803ab7ba298e61821582bfb9eaf0516972c929db9db860203cf722429fe47c43652163876fc1963930cf7e4fe3e448e90174718723101163ad46a2856c5fe72ae63784c85efde3aa02cbd1eab28b6acd859391fc9eb912ab0592132b53bedba985f5c1f971a3c8592e006116d136359b619f01887b13e27ae871ea80c061b843b6d471974253b2caf5259250ba8547b717ff36d742a11f37c85e9f424ce90b9e0b6c3a2e3b7e31740a73ec24f8e90fb52b5ca8458ff1177627c0a7cc53c553fcf615722ad783d2f8c0a3d50ff6d1fc2a1e0fdc7fbd8479ba89409aab6f7710050978c019a12505adda1df37e4ef0ab7a62b149c255bb94895f46fe5c1a8ece3ab80e8a7722a24817994abdfc6ba58c1a8bc986d9d33716472c5c494acf7cfcf2743f57cfd6bc28da90c2ab16d7611caf1bb11a12c0677d8872e8e21408b21ae0d093be9037a3164b531e213a0cc3eb9c75105a09a7dd18d1c5857f3450dea67a5f941544b0279f0e52a5d6e2963e67673a6fed2af3f896a796ba672832432e2373c8f269ea9a3178120232bcee511e83ce1839f32f5a756e68e0406c27902070bf9adc8c417b6c3d03abab058f7c7f96c2a1d6fed46313baae9f817c9b461be695924a085f5badb1ba1ac678e4311904aab52aaa6db31000ea50a0d617c58ef98847a18a9ebb847aa7c81b63a71f6951d89adb8265bae8d5aeac2505279ee82e1a13a97f7a0b6efc5f4bf0722297ff12eefb301356fb1cad6dfa94864542b5f8cd8e98438bdbfbbb431f0c10f12b38ac503eeee9abf419fc9ad465e5eb5176ee153114934e9d893be5a9b4ccad49a4929ede5e51ff266f47d7b21f80a43bb982737394db3cd0b5f2d97491018183c16a4d6204f8ab028b13872c3802ea71ec3a8afeaf87d115f0747128175c486a2da7ce62895a4a390be43bab35c938948d8aae0abb2595cdd7355f0cbe394c5d37bfa44841d3571a503e67a79f6018f42c076f504e311568b8b9e5cafc2527ed7e36619bc5105c2706868db9eb44064136154147df36ba873386c7cb67ac458b7f8088c5998db3ff7d61304a90017aec3a58b669f4b30fa9d6005786773b3fc7aa427c6e259818f44332d1d22414f165b736512f15128f30fecb2794b15e61128ce0deedffebd5b5f69ff5092deb043e2b22840fc6e1a3cd3c5bba7e8c92740ca5e002dd8ee584b4e5ed1c3804102de604c1d1a460acf7df1d16829c9f53c31663b49ab56911a061bfceb9e74d10d8ede288cc5598e105d6ffa01287303ee8b074f308fe04fca35ce29940af6f699fc622ebd6cbd60a3845727cdcb705905f6b281fc02ff90327f6dcf152f8f186dcff746f735f8ea509bb140153b4661491c71b9f72b3abc188d02d5b634c69f52b0a25884489493e14a832c219f808182a24bdf6733193b45069423bf4124f410476d4caace19c21c38d7d53920a323773349dc9541247581932ca17880307d6f3b5f0ab2ef0de1cb0eb422a5e639aef1757196c97ee4d393dcd137291772a33735807be4d2fa57b47323fbac18ca8ab810cdf64b11e0bb45888bcd192e72ce2fdcd98587a0678ca0102a4898dedc1e94ad65e46223a0965d40624b91eeb96720d97111e580dde8568dd4f1af61f9d44df43f4957dcadcda4ab5f99d97eced4d2d35108449be3d3a09126df3ac9a813aa8c650b72638ec6e272899f3907397f0d737f50ed1901b544c42af8803e7244741edf14fbe1cbebdf3ce946f9b183ce996105d32821bff60bcfe725cbe7ddcd7351b34a3a7deda362b2857460a3332b3d44eb773cdba6febd5a654f61ec73176fceeb9777607b55357c6712b706d1fdc2c4372673703d35220cad5c8b76bc8a303c8fe2f9b1fd6b1e4197094601e5acf18af3c713080c04018ec63691ad3f8e7d44a5130999fc4ce6a91b3f55bdf8a0903e264265ca9cd12487b8c3bbb8848c208e3711ef40ff60555efd9e2c6291406788d97fb1df740551a08ced51bf13eadfc14cc6f3cd8e0f3205450d131739f6400e13653f6f1d095181499a9aec75128385ed195d6931c14749f9735104772ae17bdcde56a11d44ecd1f7b4df65316ad48421f2743b71de5acf23ba2f52d34213753cd23f9dfe1de9399f226852cf5c9963f039816cd5ce3442cac9f529d5a79ea43c27438c47fe126047cc7ddcd74f9ccd62d6cc23e6f99d48f788ebb006c14ab2e3c6a896814e2deffa9a662bd2aba36880b29d892ac85c89b1df5810edf8df443a97b6e23374038dbd746a6648d777dc51b33cc62ba13baf00b6867013b524054782b799e5da5ce39a42d3b5bf3de0d2ddc2f00171ed005fecf5bbf9fe5ee29a1470f1e220e7009898ece741c144a5f22dc80362821574437e8440d3385de1aea947ade66a03b655bf5aef32d55490e348abbb12e87f5f03bd4b5d254918e9e70cf133cc4e9647c2187532b084d5674e365561392b958947b2335917b7f9c2ed4754cbbd51087c86aa23fae2542ff3da00ac3cfed1beb9b663227ed30c663369625abde1fdc21b4a7e4d8df0cfcbfc30ad9a968a6461b9f8da01127ecfc9060363ea505fd92aecb59adc34037d0f4af74506b5056ce84fb61fb95e438989016254ebce606da9b97008b63743e564a4d8d1d7e2966fba44983830aa48c10eed2f3c477d0b42a84822d0c5ded78f33d37b58f76565f73f5f452f503eb5ffc0911124e5a689df8d6274f8ef71e703e2a087e24d869b8bdf6a660c0061b3cc07b7b113ad9001ccc1cf0e8a1e379dcadbd0a578c18d60b4022ba2d5275c6aae4b25b61187859c92ad57978d39791f6b842e7c203bc1dbf8106ca294af77012ff4a4c9275bcb82b8b8c2b80a287f956e4781b5e4a36c35e271f30d507ffaa0d76afc925b11abdac649d71808d391285c8b90f7cce1d495f78d888c127f2d712d15f5b8b7916dcc45ca5f608f22f7ffbbb724ebdfde4124c1cdf5c7e1975899b95e57e443c35982bca22337a8fdf844163505382580fd0ac7970165c5afc24303abe9bd0690b721b339e846594cde1cf26cfb87a6b04f6e9154730fc6afb495946574ec08deced4b2f77934acf7efb1d9c4ce806b577e78a86d146ced7f76b7f3f5c0185197e7c142449daaa9e6742b52a545ca7b5bd3529348ac25410850d2a8c195eaeaa14a10ea881b505701b4b2e6772a0edea69621da4f03e1ca308a0e3c33bb0adae63fea332bbccdbe31f96c1ba243f39d1e0f1006e9e04991e06b9236b2f91f294c0e77a49548cae65c89847c8e5922bfad85449e7d0c049d013c871ea519d1dfbdfedec52e87eed86bad208ea433424c3a42e82a7550bbf77946147d76e1ca052058481e5f40e29b47ad69db4a9bfc4dac8c2232387216a532ce62d98c1aafa35c65dc388e3d4d37d6d186eae957f8c9edac1a3f2e3abcb1121f99bd4f8c2bbf5b6ac39a2544d8b502619f43ea30ddc8e4eafad8bf7256220380e0ae27fee46304b224cc8a1e2b1cb2a4de6fb3ee5452798de78653e08b01ec385f367c3982963f8428572793ed74cee369f5ae59047094df0bd0524e0455b4903fdcb606ae61f427f6c2626ac6c53d66685d423896291d268e3e2482692645d0a8283d2b10ca0be4b895a56d6018e9750430d655b186fcab98583144617d8640c1a37a704fdc6d03935957626074b95864f4d476fe8d1ab64fa7e25e94615f27b3d4d39f139c00ccb195df1271e29556b234a36424485d8edeb29d96abdab8cfa544b17e0614ad863ad1a745396965b91375abe7ccbfae7d6b01cbb64ef0797ec0797dd7ce4b5d7b569516c2601111c7b14154c69ef9f6c91f1dd58424ac8b7d2cfd9d701349f6f12b6a94538fe282c9b41f06cb41fe1bbb218d21c9d615d41410587b117e176131e4d789be6ee59e06449829bc5ed6079b9ad9194c0b333d8a94107d84b6bc8783a7655dcca4214ec8873325629c8aa0b1b18a24d76c0fae29e2af0d9064404f2e9c9a7945da9e7b55a8786285a420d0448f27a930a1b010371fbd92fc30aca07ced0143f1b7650bf7cdef49ed1da37d9e5b381220511f49fd76c07491c10764b3bf1f2498e47de8f31f214061b01891053e46c66f246243c30d421a17c059821c3d7e850108eef894c595b0ab0589f3c260d82de5c483e4d10ccaee56d4aae2ff8ca5ccf5ccc12521e7d30291c3fd8b1de876af4ad689166e9ce15715a6036ca4d71c633cd8fd55e1af649cdc937d415dfea8b465057dc0e3e50dbd1ede6b0852446cb09ed3aa721d43cfe8541c10fdccccf7a4fff666ca790ed9883723eb9e53fb1c1de365d1631ecb9c4cc007bea7b077eae7e0544c1b753fca21291d8a16ed25b410d237791029705432e9fb8f27522a0ae5d0c5389d22a26aeebb75505869eabcf334f1aa6189597e0198a18c65fa0bdd0797f13037c75c4058b7d3454c0f71bd2dd13b6c3e84b0a22193a1bc4af042edb3fc823fd1ab98d4c8e3de72db26e33f2671bbc88f649a48faa2a228bc7bf8c252c91d6a54177cafa4093fdeebf867c846dc1cc53c6f41f9f48f4cd6a4e455e24dc46cbba653305855ef9e9165cb26e2f5d9046c2deecd3c772148d0eb7480d70ab61739b0a7dd57445ea19432e848149b321cc44b28669aeb1f3e1e7770a229f366c6ec5a5bab35d81df3ee3897f4e6a0ad0bd57c67329ab852d5c63223e25e6f9e20dd8db6c17978f63aa7611f52e16c1379a7a9f15cc44682b6d203d46900e524cd132f0148ab8eaf1fc894ca8b8c672b1043bb100aa0fd768949d1ca5e97bfc176962985675481114958b9dec770fabf75b0980965b746f8f534864eeaa9643dc36f648747fbb9e4615fb7a42d138b9553f62a27949087cea29a09a835c03c605ba5c7520f289ef00ee67864e6ff8477501e57b1bfb329c1398342206663aff2e740392de86398fcf9f3e36619bc4b2b142e09ee10a9959962f819fea61b25ba0e49a45ffa350fd2c991e0f1efd04a7948312727adf9321ec4ff76891c6e068179c7ef316c256b3827c5574e90c5e72b942c99a5be2b671808a3410af1e6ba0fcfc202eb67bc14f7bb9930c623238c079f2947ad6cc89e4ed5e962c94c0ba92cb943c5d5128072d72c14539fd170a0d7122f198ade573e89d4dbc10e56643ca0df50203696fbed9f233ea921c1368b619447f7823e60af91ad8047213679d932e8f4fb581ab5ee19472018961cfcb46ece78c9dfb16b582e07e0da4915d2eaac7d343e81c735db0b41c18944094b85c568ca77e76101a3288a0463d01bf8d5d4451ad1fac5031e3eb82ae574b1aa65300945e9e376a9f746dff3cbfc6f720473e9ad9c0b3ba71d7a5561126f3ba1bc7559f2071a18ecbc51aeb5f8163ac8dd5010f587fb51a94286c070fa7ad0b8f35d02d8bad66d515b129e53d465a383ca3563fb7b143192f42ca05e83e0987870b0a9ffe85da0603a4e58d44633d32a31e889c65e9c00ea9a329d3497e7ba689c36f9707af9d7a1c2d0844035c6f2457c322b5e1adce9379e6160f91dd95f11dfb6973259ef3a9d5b5fc9a08b68275c12dbf1cc951c1203678191b5fdfcaef9a2fa2e4d6b8af3db6ec2cffb2f5e9af85bab8217b9a4a3d55d5ad8711f99d0aa4bc864ca9a1127e361c23f5909f374a0bf6a87476cbbc536e8b3db346bf7ecac44e9e1b0cdcb013e9e27c1c2016edddda6dfa76598aa9fad70564506c9602b85f3254e07ec01a6738bb9fc3fff16fc3678d38b7824ba5bc25d09bcef211ab5bfc24353d8defc410a923f99d7eb35fa339d0edb88f8301efd1795e8f85b6eb1e1180d972a8d01f88c1a833f93ad11fe5c7e583e9efc5713e706c273285fa447745c49c305e05bf3808a4b97792df2313a81795cc018765f07935702881504a1fff8c07e71bf505b6e4c6049945422bb540f38def934d42de5241e401e65d6e40a533a7177122a58dec78afce908e8c332915e6c4e38baa30a23ddd2f438613b1ed57f441ec12f115963905882328b715d6db3adc90c70e9fdf65d631274eeccc2e6569e6fb5a8af66883c0766bb54ee5c0dff4a71983e28460766997e03c5bf7eee882770d4dc598e9e54ae9d898b62b7d70aea4ec56c886ebcc01c42cb2e3dda55de882b071538580da1f8308678f5f7359c3669794130fc7f329566b6716e5f831d69a83799744c3eeb8a269862cda38e7cd6c99d064978b785acf0abd57994e11071ee4ab234f297fa0f87a9931543497371761a04fa6bcb8108ea91a38601d57e49052aa5a0d381952d5ba051f360d049af79d6806c5c25ee525b5224bf2fc82e99f5bdbde27665868cab65e58f818ac63ad9bbc5c6d32c94314cd59d4aa523e908c6ed411f63a993d57ee097122edfb1b79eb01a3158483b4ec402594feb4c773e81a0788223b785b0ddf9aea4ef37d4d1d19cc6d574e1aa50cbc19ff78aada0e42ec0ab303df523c4cf98746c4dfaf52e796912d9ae5faae069fab66909ac2ca2d334235439cd37ba5ca52f93cf90dd769efe46668f2b03a6a795e7cef0b3e21f7ae42514a0a687398c082840fe6254524843aaa39eab7d498c7a7a4ec8298b042ab8fc98f9e7ddea68a9a79c60d6226a802085b96348df722192b7101876eff8ec98ef09ccfaff75f770f3cf7f550e654d7d21cf666af3c86dc3e53d6801d6a4c76c458fa246b58142465600e348e1ebb842c40e307a7ff478f64efc413408afc31c47510133c9b64f111658121563a6c857b79e48de4c9d4a14387629764cc2e8903d78742901be28bb7cfe96265c3b85a442a63600226cec03ecd3aa306c853fb16f2b8090273ed52ad01af7e19455f712ac4e8347c90965adb23a4cc82e9fcf652493afd001e15c485ad6bbb0d39a27873fc0b61a081bbdf8d1d396a75bb9a095a5d88851584cc7fb61586cfae0b21cec412157e3a84afcce93c71035bb7abb2a3b21937cf32a1e2d2fc891268446de2afb9cee0972402b163e3e42da158b270a2c9659b79c2167c50a4fb39e87fe7627b55604f42ba252b81b5fb5ff3293ec1fc061616b19d9acab3b1559c9b181ebcdb77a200b9e1b779b7253f00adb3b134f41a7330133fcf4c70a410b0fc9784503482ecbb89251a4a98b427b65d62ba384f59358dfb22f4801befb52d8998a8db0b19a8c63ceece0c9ad53df76eb0aa4a5264a576f5e1caf41a16db48ce760cabe3be8eb721b9534e322aea3a7e4811f9a1af7b818ff6b316ff9bcbb937ca104142b3d704e41f4a6e0307c4f5f88371a4b19c004415cc4d6730f13ef5620f6439accc4a45f08b041a620e56c059ed5a0a06dcdc2543ecda7352b98d73b9a07903865a20e0d38710a1e3a108103ef02b6815d477ab86d31ab9d9573fbabb47bf2d63d0237c198e10b30c52616c0436766d63056b5d5b196ea9494cde30f34fb725c9d0aa5e1f1a64bc50b4eb3a461abb7872f21f913d2a56d0071ce18cde32e17b2cde2e2d70b68d2c352b1e1171377b27ca2d1d1da97053bcb759d214f89bde9c115b37609aed0a914e37627811f735d9dd18dc292c95e5cdbe56386fbee4ff06fbda5e7e1a285d79e06c60e4a4e46c2d3037e56a3305ad91a0c47d03bd98d35a50cdfbfc5ae30644b02c91dda6899e90481cc1475949fb96e31728676141ebf4c4b8a851f9c79590121a6dc9a3513d819949e8470bdd504c19b0b301365ac964ac3cdc2563207bdaaa986d3f07d5d99fb821c2ffd73a5c3fa933b567c95dcc389b9d1fdd23983982de3908b45071e349093709c827db7fd01612a81186c584def78bdbefb7894f27217ed8b029cffafc211bf5369a4b2babe4dff384fb1c83c6647ba8e39b9e3d4618dc45b8d04a814784234dd18b03e02199fe304892ed399d56df0f3f4c21845e28c3e845007c06b9a70f4c1f96904defa9efd6c2ea9226b23338677945cda4edd5d838db16cf0ba0fe12a877296ac55499376f8a6eb5dba3ae1a5a2814fd1f63a49bafe1afddf0bc1ddfcb8ed01de70eec675305abc2b8e01bf74fb2363a645e1960c60f280356597ae92dbd1704136d17f239db0e334f060141c0ae3600143ba8ca039a1be9cd1799b157886ac7dafda06a7c6112a21e73f2ac457270d89f9ae759f148f7fba554febad18747d3be3f2a22a33e6579a7c8647956b5833e76ea3973076248b37fc01e7814203aa23dbff9dd46d953346b61db4b7cddf9ac3aa823c7ce9c8a9bccb78d7ba7e9bfddc9eea3dccfb8886ce9dedb95105220ac3b634aaaaf4e3a3f1cc9a037f54a43c0f349ccb3b652518d939dc9d8b9c8b4b9299a029e320dd3f7d0650b2f94d863063a6fc8e4834d6b01093d3aa8e198124d65bad034ff31e460981832d50f0a9a181fbf1d01cef02181bb2bb2682046b5f3805457e15f70e7f3c4619bdabc57557103b65d7de1e1016a19e7a5a8fe6b3c25f9e4fe45eb415b4bf5cfca832555319b96e3fedb74a6a734a60fa8edb45c016f42eb27b51b19cab39cb12360f27a9b0249d6758cffa77f6c0ff210a91acfa229ebe588c1776092d539c45b167c4e0e5f8d0c4604db69f69a883d915d7a0c9b00654285ed78bc602b5d67b5f65b2617edd0d404f5a064a92adf509f8d5ab9586d3fb0a3bba7939f206819e8a2e7b93437d5ec26b1d73e03b755c99fcb554c66daeb8e669e8c7ccc5eea69578eda6ddfe7dca33febf84c92aa8c070669c23c42d3f95a43188fde642174b4871c8bca9758859794e67c26e28ef297881b4a1f88e2d992ddbc2a3ee33267b9fbfe7445e7144147da43eb335fcf2a098942555c85821cc67afc0424e5ec63b82a973c663ba590227476ce18770582cb8e617c89d52c2373bf5a7616d8b9d95d97694cb2218702c608118d4cd4ac9d6c0c0b180e046b9e191f4a289b38453908c6f71da025331980e986a126d53efa5996a1b07f7faadd352f5d6418810913483dc337b6b3243501ad58b25d1536fa1292c7ee54c36471364406e1154f6ff8aa7050136c57f4f5c6d80a3955f12f4d2594e02a045c42fabb11d90817fff4499de3104947900fcc2eee1d9e8815724411217cec24c6b0ca220d4651a71f3086a11a9641ced7ef38c843f56a89eeba7f53ad10bd3c8f2860198ac1463939af50329b648578ac0dbc219e4425c1d9726f6bac2e059212246cf03eec5e54bbbb16e0c9ed8cbb8905d6a9416c48d6821494d7b3276debec3f41448e3a2260220e4b3a4a93e02e0b4218edc1e04c2e651b701646bf4e9099d38d94fd0d0b0218f37d8d7219f8468f5ce35db442b83fff1191a5cb483036977b82500007a0b0ed151e78f4c26d7ba1b0c6878cf61591bc716a14d544bb2461a1f0043bac6bd33aedce7b374f8853cee852e9b09cdcaa29d579d1e947381094f13720045dc50f7ed7de12bdf40165836de8f2c389860fc398316b7bc24f518dc3c841feae54cc158dedcdfd5241075bac29314a5e9a39263431400148598dc89443d88f10937fbb5a7e0b7a0ccfdfa43d7433998e91acae53fa0e1e3bff1bd20d0a623a26f9b0ccd80f69b8761645199c5a68458c04d0d861ec14273f98824678bc5d94440ff5c680f2473d10bcee18435c4dd2f95c4c40d89800b0a5ce677281aa49021a3ec534eff7427c7f1c212cccfa62d639008554327e324f110921f29284b317fc1e95946f6ee9fb13cc84c383a535a3ddba02af0a1f575703c1485335bc0a5a7c27ed6199c99c3d71368f7911fd34e059b14a9dc9ebbe6ce08f5100d5b0dd2e1cd33328f9b7d7c809f2b7b9f252fef03fbed3ccec73f60559dbc2781d13aa2750a91d57098a2b0f50898412af56e277f21b24a8fc488c94b23f13455654dfcaaa21f27843e11487f7538affa3698ddc035eb3be83c9e0bf9c11d9e52be50c7c9bd65919332d12d640e912ed691b6f90f6020769ed78a0ca7a0c7cd40854aed1a82ec79641fea45ecfd2d2788aecf62b4c9da657c3e53b69de87729e7614455e51a3b48c0ab657a61679400d634eb02f79aa06f491901ef22c0b51a0efb45e772addb676f7e49b309774c2389cc12c01ff8fbfccc0f9da17f500a087ffa558b0862523c39419ed82e52dff6691d4d84760d7274cec92db3fdc1fd5b00077c29f1612a31e69c6cd01623d5e33dd0a33642018d4017efbc0de23b177b5acac3a973d3eaad3d36bc850910b450cf8c1dbfccfcd4c66f284f9776e5ded055ea31f3d7e01b1807b895de514106a7e5fac2055c25d06f9e1cf03903e8dcc3b810cff065af44d90cc900c335df524f48c19af13aa408a36b74a6dbcf6c99ba4de3a4866469ed5a1412041cfc1221b0c08aad6bada204cba0d87a6523989c1eda0cb89e1e359f02e73ba9d1ef01fa3214fd045cfe474d4d03ef72bf47946d5828321321d93ce0394cebf7cb56d5653d0ec1a6aa76ba6a935d6299d1838994cefffebef5dea53b670dcaf7f079b5ea39747f9b3f5b24e30375d8f4841f9f99ea2618c004759935f4f081b0299fca128e0fdeec01f5ac410715fa8dbe62fd051367272134e5405849beb82a5f113c64a4a787a0da8e7b0b0603706b6896cc60b088d3e96f78c12bcc3e166e78183269e40421bfb16cb8c96808e1966b0133302b52c6219c744536e63a44835efad4a7b4ed55526dd88c0494ecf617adeb5bffeb8da5d1a322f302ff78ea71f7ff4ba87d2bcb5ff81a1f42f47756f5189e6b5458011bff6ccaf41680c2af412d71bff4a8872af1397a980eef71a93893618cb8da75ceb5deb46ffacfde3bfae69657119bc61b0d18401fededa199e9057be6b2d9b366fae3278d37569437a40cb83c89c0b345bd7db3de6956d0cc0e5835a0cabd818cd7626d76547cae4b48861d96e47e155108501cfa0993c6eab273d7e388eea8e85244cc51d9a8f21eed3c0d8ca83cb3e6f779c39e550a4b9cda3ea9d675d5f021766f8d464f442a599b16d2465f6456ad90e1f0f0d624278a90a1f2a218d820df48ccf77f3db71ca35afcb3ed905dc64ddd6eeb181349215bdb84fc6ef96002ccd24354212b6991a533d6f7a9c48fcb6fe609fb3f95e203b7c4cf0d63a1d65c8e1bbdea57a1c250072d8ce7a182622dbbb29b6a8de2559348516a6ea997a0f7cd2b200347282a23705106cbfe523eb3d8490a7e29840c9ab38c3d676763289b320b56e5194709d088a62debe7bc8b276fb340803c036ddfa37d313fc58ed40f64c245d8f687c720f834e78e8549b14f27f823b7ede5e22cbe2b2c40ec9f0e1d0c58d726066fccdb68031dfd008018f3a9219d6d65b4d247ac9e17b0041e3d8bd2d6f215708780c97f1cb8817fea28dd9d3695e8cbf7a5f916dedbd83494c8225d4380ef5d574cb1e6869e602a0d4ad4a93df2724837c20aa4f45e00a58819aa56a768faf468965d4549b9e22a73e49f78409e5104fb9342fde78a707f8297eb640a927f5e41c793436eef51a7a46007b04680cd26cb7f69cabf466fe90aaaad3075e6c5c26a481c88fb2af3c82724d4fa588030d72fee46b28479460ba9bab762ef4c16496c80c0bdfb5112b6839acefd7d86c03eb048a25e3f0d3e0ee62fd2a181acb81aced6468a734cf4994328bc62bd7ac784d5f64575f8e99d1a4a72c69532eef45f18b478966d03e198ec3868d020448bd0275ef7a0b5f5ab565ce95be70afa123dd3811c8af05e23db083198f0afcd554b2de980878019b2eba4fd583f11b85ade86a4fb0d0545018b1e7b156a71fb6c1c6fffa7d1603df801aa1687445011146ab987ddc8b3a0c2d0b77ea7e56fb71a6d750935275e49c6bef79dae9fceeb8708f4918a620257afd15aa11509afeaa563c86df3308025644d12f896f89330fce1c02ac984fa5210b78f4f297f3b7a5628ef95a695d0ba1ad4839107f5a8c6bb1da4ba63d6a4792da9dfeda9ef1b5175e472e719fd56ee307cd3cfc94114970ce329a921ff07b54dd0d0e45e0055554abedacd131119aaed6c8919a382df89375bd560c9a82becb954ec9c105bf3701cdfadae5b7921d79bcd2dd95e61128683af334523781907ba5cbb7d87a8fc89356f76f2badc765b80c64776c285b4753a04c8c1f918d8ef9610c4f08a8e7987db95ba00f8e22120e48060589797cd3da2851e3d112f708a95998f5be3b5715457790342dd34290c1122ffe7a53e66c80357bc1f3466eac2011fa42758c6ecd7f144d81f307a96094ed5ad8bb42385fda7a52ad02a654d7e20c98cbdb269f3f8f01ec2ffbb5b70fee2c1f1ac8bed35c4d595f1b9bbd3a1a63cc0ce83b8458c9f9e2e484a4480c0d2160d53b2f3457b05d44f9841af59ef219b2cf2e33403c2b4419df26994918e6f32e25b05b4d361a8edfca7cfcd9e3ed985348044ec4a9a1f229248c27335e0bc7e67920d963eee9668c4a6cdde4b96b54400010eaac31ec88936d3bea914c0a141c57f32612f2ab58dce1ea2aa07ff9d1fb9fda834165598bdb11ac5fdd73506c523abdddc4d1eeea34397b6f97b82795d87fa7c52ea4775082aa540382647d350aa9c74d041d12af44a9771934e2631479182f1cee7fd48b0c9fd9522a8fff02b81dc6105b24b4fc60ca83b4029f4ae25001c6f6fb67efafeb8a92e830664469ed2f30a4349954662b1517cc7b4f2d63ffb515efcffd2713a1c317123e87fbbf0c267d952aeb6f810601b9cf1962a92dcaba7273e690297ac201ec8caf456386b7bc234f988b64c18418c038678a4cb4538a830fd9d15539ce9f79a3fd5f4a655258b85017f9e29c17d2e194e016767c3c9dce20043138c51a2444f4b315eebf7e74b33333c7579543c894710da7b509c86caa51102052c14718e4fb6b19ef199ea89a65567432319a523f396aae86c1898fae2f682f21a2d7e5b0148fcba9e8356cd462fa8110f58e18687a61ab6a58127f4ff786ce23ee4f236cfc8bbbddcfc52a07b8ba5e62559173a6909d2eee11d5a41665f68dd8080f5a4200095ac924d0688ad2f09ca4d6370c5038779980a365a687d731decc84bae2f5db63391a8bf9b0f44e47ac56fc014b1bbe7b7ba07124ff1ae7c3416fe8b465eecb33c73059839bda872a0e073b62a86fbf3365ec0f96065604154640a89e5b936bf595b9320071941a12522418edbca2a719b8b1d35b54afa8b26dcd48db1c9a3a1325039a12eab7839ae94c1904e07af2a914a060d772be622528945dfd5159c236e5adf61d6fbb301e63cdc03acc4f4e6bea263c8ce8d8bce7f7043c67726870bb5816da925925bc2722478311c8a606cca9b1cafe1fa5157559bb78cc082cd22b1ceccc146f7d944fd547e60c7e05b865e3d190ad9f9a0847e118a77d7b3d7300848e2f15fb2934f2dd2d7d9d44e4dfa22914321dd13e01e9fdaa2d0e4410cfd62f89881994cf3abaaa869e46c5c9e91bd9e803b16ce79ed63ffe9de11b2d35068e4d7b81b4c601f1dde1ec8b793b713d86cb9a1acb5d4b96f8746eb849096f3c11685e00e3a42752e7addcfdc7afe481a04d79cc64d574a6e7aa03d6562bcac16968b3f999f007384868d3f049adcf82c6dc0728c206b6806e0e11dddb1ad440f6ad21de50104e2c80918615679baeab5af5e6b27b579dadfc2f0d31404d083539c41c419ebb589a10c657dfba1fee75ed397d1bf94e769a227b5a731e38f308b34bf7b5ee27b32b8965cdb1a9a12b7cfe055ea7b461eddf71818e15cd651155e383689dc70bea3b4afe5c2dcea5c22afde7f00845287fe859c01c8bf667ff875b28d37ba1ce6a53f5fe87c691b46f0a6d6fd5902408993f5bb58a57f1a7fa277a9accd216e5b00feaf4d4fe8b536e85ecfb73d1c998b66ee7d05c0c77bbadb0d267b9338ef867c9ba6fc84813e96d37cd194f6fae3f73d19ebf061bd10986adf30e1d02826cde1be4dde625e40cd79abe47fcbc5a934e11e0c02d08961821994cfc9ce189c99f60eaad933a44243a291115d03a570aa1aa4e9215454f6deaed50b18d331d7538434c8d63d7ecd6016d65f17e7c1c2c1af53883637465815f249edb7289a616153d7acbeca12688c9c23d795bf4226e16ad5f32abf860e90ad997c8e157cc22d2ba0607720889b2ffe207fbfd34f257211cf32e3353da0b6a76cc185e1ff801dd437ebeb8709eeb10274617d6a1146dc6dec4b4be19297eea76bc285d64a259b1543550049bdea7a71c785b8cdb0118746d148490aae79a2773e89743a86390eb86da6a0adcb16f212c3f15645530edc642930c4f9b8d139dd8c1e3c56da42de835ce7b2fa5bfa82af0eaf411822c6418e9a0ca6f7d9241ba2fd87c3726fca723fb8201e79971f900e50c75f8e46c01f8ecce3d64a39fcaf8e3acef3d66d5834b42b57cc72a50c86f8323f9af1e784df2a69bd3c3affe05f68ebfbb2c9fb758ba95b96a42cad49ca355b21d9872c9be72b16a3c011545993fab814ea9441a7dfe7f0e48df1d85fc68d7575049a3e8ca1587d9b4a155feeb10a4723828068799937934a72074dd5e0c82541027045df737b46b0c29049272261432f62d398701f5fecce38b7353382ad158fbd51681dc75a19e710c8398c4ec7524172d5f816da27a27bc849b8021306ed661c87cfcd04bf9c4a1c0658a69d031c609ad0b1f232595e560a05fdc9fb9954cf0759a37792707ae0ce91cdfc78df4a94c20aea8c90bbc769e6332d10a12ff3d0660e0ca3d93559b10fb3c116452184e5d2cccc6d5a1786bb451a6f606f8f727421ef31da41d8e2c6c5b25c7d6d92715cb25e7f1cfa3342540d03ec3fcc8378c021443ba3321fbc26dad7c5b859faba004a082a21d6d7a43d2836cc3820d1adbe4c55518714d48fd9346a254f702107da8212f60558cd537d7cfb36d0d442bb758b699c0d4fbd05e8bdb3a3cb19cefff043c30a4fe6dcf81cf39a52914e9e47edc7c944bd4ba3c45a5bf968b3becb4a4c73658f87eacb3b23745a4902f7adfc2fe6be701f704d7437f8869c8fc6de91f6fc3eac36cb63c399e68543ab37367f42d28e48bc2785be887ba065e899d07cf4c4978ae3f16c39863361671577037b2e7181f51bd6114a54cc90ee449f68b250b5b75016c4ae44f24237dec71dda96fcade19fc4e7babfa3d39e5d2e4070dc12b6e82757acf08de6fb4ed049938478b36cf46d40c048c57d7811db2be4aea140ae70372f11fcbc6946f064243fc9ca5b98048816cb8306eba3338fc5f3ecaae48798a7255b9878840b63c2df8b7034fd185718ce6e3327f43c4aa283d5f09e0528a8a0c2f28d693e32f01302de435d9fd43544f1131fd3a12b9f3bedf28226ac79e8498c3ea2389fa3df7f169f08ee4cb4e834062110b0f9587a838cb26ceae0629fcb0da8a18daf47782da238888e09a0b7119500ce6604ab22a2e77e7591a9cb174dcd96500f770403462e108be6e080e9032617219eca0de1bf87bc64c40f9c96f853717967fec3c7f1428fd99ed83cc73142d0d1005464fd02f2d6022a1bbd65f327a2e23d4c6d0d57671d395df9bc99c47092a533a99abf94b232176cd416cc67d18f54386ae81d9f242274cb4ce9a7e339c666e0d1956f9d4f3a6b314390127cd9a296005f1e3ff202065291d8a938b724d2dcaed53f55444f54c5226e118159c842723e33f5bb7888319b57a6e59568b91fcf46bc7eb9b23ceaeee65f825f2726d6ae9aef57d8583e0c17c4bc86071d8015074f8e3ce20f9d63af261eccf50d79c813bb9a2bdfbbacfd8e812472d4fe021c4b7253601982fb27ce8ab1d58b344b7f694a3c5918c85b6dc736e6934434c69d655714d2a633dd9e13b9228769c4236378eedec8cba8d2c58b8a08cfa1e754fe1ba5d97ad14bcb30485c79c9d6e48adc075086624082996ba2259410313e35a93604a840e2f24d45331abc821cbc0752e0173f0ebf7f39c9d4b0913d3e62f0047e1e8b0c204fec459e9cf59c8175222dc9ec0eb48fc73945e9d3083e0e7b0d79ba9889c6d48b2f984f8a2bfe4e3763d58b77fd3df9812149a83500fbe9b0156fb41daa5646cd9fa60e8b6790ca2953b3ee5f138f45d67a3cda7f815b19298f4e3253f7a4be3ec2d7a547b03a3f74792db94d5893bbedca8647589449e50f037dfde2779884062394da670ee4f33f5dacb6e8d531a2ef9c8fb7693faa948af966dd73331bdf4c4743779389762fb38899abd99152440375bef25a8c676fc1fa7099ae31131938b84e42722ad83bf8815a61c794dce752df7dbfd28368bedd8d03fb3a7b6a78f4fd1b04adf8f35f35d059a05be7b9d4036134e8792b95c9053b87c9c0190645a59e1484ebfbade393fefc2f3d91cf533f844933f88cd6d7628b64cce711d1c776239f8cd53cef0e3992add8149a08ab2ece2569f7ae14311c0503cc586db1488d1526e213c2a22a4f14d361880b4a26f7c930521d9a35205a31ca91ba35900e12fc104f4c96ac7dff0dd59343eb7f0ac3fdd2b5135723ea449822e2b66f55622e5ec59b28bef7506f041d36ea428ea0b9f1745b81edc4d703c17488f425e88c08c5ad8e514469eac781121228195f30022d7c0d0d650231bf34264c1b5e31d4cab830f06c2fec95300c1ceea277da02c539549162c6c43e9f7aa2f4d323178299c0b68824886797d22ea3940364e75d2b9e62af2618f148cc1a4e48c67b85dda064a71f1e56c139d46e0fcaf1e86e8b5ce31031026373956e9c94129a6e602e042c6b7d05a1e4c35e55c959140c57d27f90c5dd9db0316dac89db18f70491bdf0a06a6a7f72b77d9a6a370916d78a7bbc2de87da006131aae688a23864600d28a490cae34d022aeae35c2a19c52efcd3c43e3d7b26e01e39dc10bfbee3b95b5faaeba10cec30da0c23ed2eb51836f1227591db47cefe30fa11dc568d8eb39ad6957da5af2536099ff0ed0adda74f090a5f8fedba591a1e7e1022032ec5fd204ffcdd6524a8903e28c2c22b0e22d5b91dca7ee16d65c24b386fb8420d19e4900e39714c17e6cdfc3922032bc0fb4995bf7ee552bb75952bbb78d59fc30b087ea3e3dfe6e3604da8339736799091391361c559be3ef8f14469d42078cb09e730a3748fa23195add6ca8ac280e79522a6c746528062707539d5fa1f699fa6ff4a7f73f72a6cf75d1c40853dfe407774e4426a5655c06c7f50927328feab52bf40aa5aacdc0015e9cd480f0f3e35a8ce4055a9eb8ac35d9e3d01a7e38498adb5a7c6a127339571b28e4390cccd31b98d3f83ad68ac05b44063a620c5a7c21860e436efdccd978b65b3c5b2ed27cf1a40565ebd7445e2111459127645e4c2134f7a7d8f640680d361f230ddf6da685b7619498294c4f2f47871b900faa8133edfff2d08237adbda45be377a605187fd9cfcc67520c5b2ceeb622c694a8e3feba0d6a802b19713107f7c2c20b029b8612375680dcea49c10fb9ecf17bbf392ba20a590e784e7c1067da091696ccf7426b817a0c4f50e395b178c1374d564d61aedc05a2f13e9603cdeeff9ad0cbf45ceb96803331a5ef51dcdbebc391d7e549e56cb7651f5187b23f1aee774067597c9b5cb01c0c51369c98cab1bbcfa9ca8a4fa2b67e89f016c4c8461cd46f09f04981bc52f067bc801fee2d5a489034c4cdf4664c16b8810de26d5ad2dae3177f6ca79eadd6cb4e9581e5ec2f915ae09bbadda1bf55326e32b3383f58b126fbcf8c15eb0af7bf6f3c6b86ef78bfb81516f811395862811d4ee030dbf680c01ba852d289b17bcb873f85d81e7df92f3bfe3098185f662cf828105d17f46f37e1d266e662ea8977fe6476e362856849ba1b097b241c88bc658aecc8dc99a815b4146f595dfd494c3c74e7afa1d9338dfa352cc147d6f1b8ce3a1b78102f50e1fb3716336131e4d1a9367f45c5c284836414407268d7c8a89a0146759cfc92242004027d58d0828fad74e7acb48680b45e7fee976f65361531a715c8694994658a40db3f29204a0cb1f4c6ec586d51a75140de3643c96386fbf42f785e5d7e2ca1b64b7fbc6a65d21b7fc50e97c11fe4a61db75ace4b768360b03d8d62827902cd2df847f9f5fb6955dd8c185bc811f4c3df2208f7329894c8a2e6105ffead6d766c8a9ec80b3357c5d6c2158bcc505e124ec64aa6c8f0429b93d3083c1a41f7043caa8d11f23526d5320f0a0f1303aaf9314c27c353a714414bac7de11e5d28df65001abcf32a5decb81d01cfe55361e2515ba8371ce4932292187836522b876faf3350b1563a8571319101b28c680a34779cd3e86bd045a630bfff22fdd09c1de2ec34d8638c25ce661613a24f692d5769b6b2bf8893b436ec4a1d906977ef4fc5d2d0196249c56a1c523e87757f53b3f0524da4ba5468388f61d765dc46096e218e2b5d9a98eead1eed8a4747d103b0d318aa804a3be816e1ab378a9f6571e3bec74d8a54a226ff3390ffcb0d88c5b6dcafd3398071bc36aad144e7fafdaf1564263f8ad88ef8c822e3a6fb0fcb212dd1c0d0b9a41e6c02b27a066434364c6bdb5208436e85e970b48d86bf94c3a07d7bf2a7e6fe6980e0c14f86ea9737cf4feaf4b09f5eaf835fb137a700e697c90ea2ee62aad67b813a9ef8cb5f6929c0285bb44085ef334dfee18812a44b7024480e5c09ec737cf777121cddadf333a85df439bfdc6a3acfb30b29ce950c763a9486e2a2941e9368ffe563c5ba7d7e0d587e2c358e17eb92e7f9c1e3b970d09258d32b37891fe85e3adf778a704f327a80c034aa823e6f1d0371f95afac1a7b5fdbdddcfb5bea46090c7fd34b5b076743d84fa27a027edf86d3c793a3f452229ec0ca173ff43eff76967a0cc73ea7285f79026b3d01a8eac8f22e88b6f466a788c881e2a4ff5f0a92d85065991434f3416ad5f57fa5e7ac0d0eaee56740aa62944f9fdfc8d1dd00144ead7e3f704350902a34d1a063cd8bc975e34a235daffc57e26e5f1a103b684165ebc738d744b8d243a9904dcfcd0294e4462779afd9dd3a1d87f1274efcbbc0ba95c0f3bddba47e23aeb1d65e68c8e5c6520dd8bbda7db15d77366ec2937308c9261c2e985a9c0a56aea6e87413173298914ddf060466641eb68f5f2f82168ffe270917fb5417ed6933ffe2b57ea601d77e97eb12fa1fb8fdc06c86fa6b1edce613486e5b5aa0bdb7d92d53a6edddea0f945c9b772e1226671f6e6497911465fd752a803cd0bef1ef08afc9acf32741ad5d1c4e8712d632e73e0576aba66fb1c0c75ffc1458cb005b4cf7a35c212abf3d434792d73ae4750ab6b24b8b0db956cc84394086457d8fa900a57f18ea50a93be16f06fc28b5532de40541da5959bb6d2646ebe7491ef644ee39cb87d1219625b213094a4ed163dd707ef80dfbf9564f38195cdbb657babb4015071d58260c973fb418562fc10d95d67fec8a77f0bddf342121b82f906368b0d7b04df1c682ecd4c2b2b43dfcd6f370888df45fd86899a4eec921075176f9aae2558e309b8fa32bdf66d91bfd5652e9395ac01638ed0af4e2b19af0237bdab8d57572970d8966af5ab3292c3ae250ab02e1723d6a91afce9d897a5c8ec88845119e8f87a51683d9d52649014e21593065908f28061cf47c8faf63beec139eea371f39a4eaada735df1ead1d9f99f903e2067b7893d575992991db99c3b36b12b696155166b53d3dc92ac9e3b792acbff8b1cbb19c51afaf0bdf467fce4e89590081872f71d3b26c33c923e62ec1d0af2a11043568281f18a6f638c3343b7627b5601381b47f934b9f884fb75d9e216bf6a299a6bfbf20807b652726ce00cdf935c04f1aa71f7c567cd6a1b9dc9e0b70dee50077eb8d605109ba95fcd444dd581210ae3cb239ca175c32ce701437fb484366ed1b84296b14c25509c7ef6e40decadf958a7e6508f8ae2b2a7cacf27d7cd496941402098d4645c2f71a87e374c7d09bb9666417b594e33e4a31ff540e6902f2b9f3fda4636ff482f257365b05ddc3c36e52fbd85c56bbdab22293e32aa74f19a33dcf9079ec6f236020632b507b04e548f2ae0d79c8688ed6e0f3166eb2296a044400442d660612d4e8a6db011a148fbdb8135d7a54a9d94cdfa5742714226241b928361a4779dfd52269f0844593115105941eeaa5c03868812362f037baa0d01fbffcbd1b0af8c56034f25687d118977dd8e847167c2ade67e58966b7528453ca3ffe825b59ec4a248056f45b8f13f5832a302c411e3ef316745dd6fd9abb314b10b20672e728c7d1e494ea2afd81ffb8308ce69026d36aff4836ed84f383fd34dabdb61c234cb31ada42a480dce11a7f6465228e36869aa4e9caf6d7ed9d1bfa16881d91aeb6b041c9d6b0078dbfda5b3e4f5cb5cdd70689c180af80f955122d2c97a98de9f533f94bd79909808cb3ee36a1e1814d33332077de63fa975a7420b572e66b5586b293c8abcc0175c63b7ae6037d9b452994fb755aa0cf57fbc687298060a471f9b0c3d8e9d5a9ae0ad5b3b4fa7d4e3628c09d327c0259bbd76db2f16684e3dfbcb2ebe518224cc9a9271b3bfd6d24a0cf4a6847c8f524237bee56b59bdf83ff5e3d9e85ad4e85294f8403d362c9a9157b76ff1db7f5d92f47dcc4ee76ed1f414cb53e331fc6cd7d6c911023e11f65f4cbeac43ccf80c35fc99d9ff4ae1a105606ce4d65e60790166eb2c2a5eedac5cf1f1a5a1d76229d057fc54a70a803019e1acd6e9696ad6784e48d9dc1f2885315038a13485257a0e0e8c856dadb245d9a0746f46db814de596c66040072a4986717cea235da9c8942733b37abddeaaeda4adf9123c0ca4f0444f087fa05bc0025aa3c697e857da0dadd728f5c26e25fcf53dba781275a44062ca1bc17224b14e15977eb8ac957a1fa5622a0742c97fae9c0efb9ee723157ef71edf2d03ebe612aa3e59ad33cc6e7219bb02d8c75780ada00603ac427ebf510c359decde1925f51f82a19f05657faf10caf88fd880ef9e090f1ccbacee6962a8f69c258817379f7e4a9cb5a8c6757e93775355feac952ce0108c23acdbdd59d34926018a4ce4b9cf7d9418a6591886a9aa5d51bf433bfd2cf09cdbcaade1dd951681a86d1ff3eb1805cfef878530705a4b5caca6ada7b9f599941b8ecc3e96f745f641b9fa2edc63c99663d1b184e3ae42998d3852a20943f2bc0d81a1bc2d00bfcdf5f4445b35b7b1309c0e47dd88ae775c1dff9bf3951fe35bd62a92224ab96a4eeba864439d1da5e7c1c5ae030761d3ed8382ee64049054bba111083a94282fc14c5cc4aebd9b8d01fb7f4ebe07d03c93e849b4bbfe9f2d2294bf6ccab457f76d3f99cb643d3c51c771c38fd630019b9774dd56c12d5356d9d7bb249b514ea89bede6e12cc405da814c19d9122cfed9414ec53a3e36b4b828938d9a7514142b937dcb6ecffa000e77b309943ba0cfdcd99f89cafac4ca3956f0be341fa5b0699d18d0da168834d6f0cf1c2819377a8ea78eb26dbc7d9ec2ad15d55c63ab2d4901e67e8ec616a91b36c7d9fd749709d6f344c78a4d09373c732b5a7907cf90b2060e5cf0aa4b68c38fc4c97b1468839b04e9508b76119d8df159d6f2d4b8e38ef5b9f36989d078b744ee720bc153f1c723a4d5d7fd3dd99f6fc8d031920e2ec4160ec9622a4ce1e09c6c5e1342ff5a41989ddfd6aa34f258359fd09d097b773cb13668415668ac25e16715fd6016c6f1abfdf5f0479ff0a28a075e9e00a5c8de0e58586fd5cce06d59061d2fe33d3ebfa4eca08d9a25dc64b828039c41342892759d1f556f1f85a24e720013931ec893ca9167156d6fbd86052946ff92d1a0402d2d475aec0aa4ab06d2460f37616f556615d2f086249befba33b030bc2436d07f2f58e513344370ca4f758d99ae38edc09f6986aded7e891e6dc89587d4f42ab3cbd860ad466dd9e11117f47fab2d432058b540ac726f3b7b001697ba8ae236112b513282e727ce953fb3acb2035540ce683d844a5a75ed1713229e1fed07dde0744ac35ac07b372c02d21dfa5cb8ca11f689bb4e4e99873ccf75137ca66b056ad14c7bfd7870fcef81fbaf1e5f5fca332a224e81f5e2f2305c965c9a5c1697f568dec233b80e0526e5b6cae8b351297a2d8fa3abf858143be10de341b8117cca618800c3285e3a19558bd61e0096cd2f27582494fe03d6a786630f3861639a31e5d29d766f67840ffa033b89f037a0993f063803b0ec20ba751f47490014db711c4501143632c952fba561f1293b89029e2046c1b61adbbed3c9f53a3d2d26d42d68946524c5f32881fab01e53aa6fb06c2eb897b795edf9cbe980d4bfb462a040c3bf30e22ae8dab48991d7178d3cecd0b9f54a5b6640b4820850df2fb4791e7fdfe83f176992afbbda6ae51debd7fef24865a54b94bb3623adcd2334325296104379586c88d7f1bf75a4110ccc282efb63706f2f2745c9d4615f687738d5501b77d8448991a1e6e7e3a8218c3817c413927e6fae28c8b3bdab6e75a0cdea93c9046fcb158bd7d85cabdddd47388c07615ef76e719e2b3d0813621356fa79a94171a4b4b97f610d4555aa0fe2d36f400e4e4334209156afda21a30a41c66ad8ac46e1c91c7427cecb69797d0812a8b841ebca89620930515e5e99220a39a569320c8dd0e77210621670b1f05ffb1fb423bbf535df0fa36ab951ac22595b13a4fa4a0f92c18206134df2b9308f99bd7fdc482aff40aa9744168345d4d5359ad02d88d1d753aaf1279975fb0541f16860931ad2b12de3f2259b7acafe27ce2336f24f3a6644f4b7e72183de371d0d099e71b756114dc19d5670c0a569f72e971f7225b2093d6841 +Output = 13f455a060781adbf9369aeea6fe85f6 + +Len = 132488 +Msg = 85c388eb210f8882d7c1366d78f789d45c383b9da7ab2a3bcb86ffc64eca0d51ce2e7c784258a6388253c1040a3ebf14fa41720162c6f48fbde546c9bb1f3754445087fdb9df4d947d3896fdb47c4f844a76657137d22adc0289fbc384a0205aef12f3a20f0b443dcf56fd81fe1902cb53c05b16af3795cca35c65db32b48f0cd85c0691cb4355dc80973db8717da0921e059e17515dfd05a745ce3a4cc24d1206170aef75f1461999e2a0c99410f180b12f749da6ac2a2f162b7c085a342313812945e7957ce09b201e6cdcef3bbc3e162426d0358de3f3f9f8b86ce571d6b7527c009eb44ceb0b2035ea1b0b64cb7355cefbd78666f1f95793ca8e74e131a780f7823f59c92f109e0e62ac6ff5e4c874133ddb21a01de838e4fa978fecfb8b138115f00d5b7453a4911cb7a354d0e57ddd32038fa42d68a4d390afbefafb0a1404ffd9576a817c39a65f6530eb57717713247857d9e923a448d3fd8a73facd8a678924bf5e1f32663575dd9d2040156b9d596101a61bbe3f2b0caa7abfc07c7d92fbf6cd9f161d3226a448725d557860631ae7157589e47e6484dd174615bef56c9d7a0a952ee6a56135ce38095c435e4cae321cadfc3b67db80bfe771c13bfbdfb6d5fda82e35c7cf7096768b1e1d6e425f699eb53c6b05794b7874a68b9c96d390322f41e0b1a1569cc9b44d63af962d73b521f7111d5d242c2f464e3d89cf2e71b726c60a033adf028e7bb6f2a0e0f3333d2fda43f979c56a0de3d29da9add9a28c6ca175d39a53eb0e512e9599547de72a4fc699a660454e39d59874a538bc6bda8938e9c8ca989d71c11d1242f9b3d7a30a23ddcd1a8a20dba40a892478bf13c903f52e8ad19861de50eb3242d77d4ad1e65ad515b07e281dd68fa6cf76cbe480643f0bc2b7397e7d8801bd42f6c48adb6dd14a272908ad25f58e914e39c62428337d491885653e77f0c57be95f6eddea27f103aa8d0ff91b89711348c99a1ce8f919b0334203e7f410a034e019658c269b22ca47e47d5228189ff4662f2d14e93d7a08bcf6fbc21b71fbafce2c8fdeb651cd65a6373901742c80fc4f726954528708195aa93517159a3cb55ca1d61dc3d1589d6e8d2b4d264c7cf3ab9a34234c602babb664982e0a13cd0e327f218f74a42d3a47ef3b806601fba024b078cbff4e4b85772e0e4e21651482f7ce577ef251b204db6451e15ed165cc60ba1c9292dbd07046107fc082177bd953966230646051c3cff455b73347223f07c308c12e8f2234cb11d1cd56b168daf0e029eef359713ecea72f4b10e89ac1c2d0249ffaf1a999ad39edbbc5bc454e73b394ffc7c5793e7e86c7e51b3e361a39eb58761f89ce679590bbd2f6bf79fd87188bad072cd38b879805cc7cd05c11131b8c8cc4dff7652a1f235c12426cafd216f63edc14e6ed92e6d24a5c267570f869a82b127c8e5c15ed0e9f40cd862cfcb5bdfb6d071a2c477614a5e3c9eafd92db949931e7f914fd0262e4a9e92f3baefdc92ce38cd70f4d52b52638402181867c381e48a8a2558b670973741dcfa690f70019652c855f4d829b15841384c37f517c047f48efe76723e994caf2ce3349aa4b091c6d8ce4ee0cb0baeecb7a8d23644991ff4e4a91383eec8fd3ef94ab821f93462fda5566d9fada5c9fef6aa51abc850ff0421a1ca6c1f9abb69c89d5e25cbe16c7f846adb5540345be07bed40d611ac47aadc6515bb3f7329c81167b126bb5c20c51c8802b2012bb749bdde2a45ceef9c315b8f5fc1cd06aac27a163b9546191256c44a9e368ef07e9342f9786b4ebf5f60557d334056b9c0f159456801da9cd3bd120ee8433827144591cbb5c71f80239020bb2a875b00fecd3551c0fd074bc7509c618b78ab340ae930c15cd9cfc66b4963c590374870d6cea4e7d0d74aca8fc9b9cef23746abe4e69676e823be16a91485291eb0ad8dcb7e1e541221238d7f70f0c3a71f98f314d63958e22598e56f5a0b52208408bc5f440842ff7b100928fee7cc348210ae2d209fe3d56fbeb720a27ced4041d88104c9092113459ec20ecbe565051f5c31906e40b43c62be005f864036f84a9b705e65777ad8112e4cb350a01aa337ca21e107b226719f05559e7e0bdba33ed01eceb209acb84e5d0d99357e59997be90381956ad72f85332b4fe21657eb6f04c0c82706535e8d998932d2f6ae425c473b049fe122d0a5a5f5f65b16183b8bb82aed4d13fb253f724412c19f855849535cec7fabb5df80fc4a245181b91df54891a08ca90096e465c2bb79ef7b25d39bcdabcd20ecd697a4ac4c6dcf970d3c54b9847e4c103e0ce2998f744cfc457b9f21c4f0f754406a2d70f0f8765e73d16ae70b9a53868519771d21396e8531b1cbddca9385789778f54c949a1c6c0c54d9ce985975e006baa1e1f3419ab27506a0761f1d51b656349aa3b9bb084c11274fc4cd4429b92d30e16c882577e079facb7f4506f2ba072d9bfad2e3e07b3cd92b5e1cd2d58e834cb431424d7cabcb0e9b5ddee8dee024d467d6729d2b65d9db0b1f099e0fbc834ea8b4d4321f80f2a29e964f2b7cc539c98cbb0b5f5fb892bd5d7c15fe3eefb7b72d8b906be6ec5b6743bd185752d5a06d790d2fa2d3dfd1f090f9c48bf9749b26b11a2963596a9fbd3936bce5079e0340cb6131f05e582205441c87cfb607981dd1e4e1a0ed782a24dd97bf6cf18adce3f24bc4d0259e0d6bf558e221fb0558fd1e706bbd2981752ebf549247b73897b76c214abae02dfea51343662b3eea3854e5311a1084331b4b4cf1d81daf03ce3bb7865629048470413c4086540842c0a5d4cb9f3383f986fb04f3f3576f88daf152ef5993094dfcb0bee4b534ed9b8c705ba44daeaf4142ce75ef667d7f445878dcc0e79174c70e8439b495463550f644e83fb7da7ca6d9362e28c3f834a2c12293af62accdac202c3b1488e0960f88840902605f6296a4b28c447e604640af9f360f5d3d7a49dc2911a912cc7623cdbe4c90d996079d5fd41ed7084e2a8a7e3f327559cc114c9d0b7bc6c5425c3a3074116f7626c227450b6444e40a380cb7930755cae11900dd33d81202facebf5b15f602e87a28c10ed8eb02b43d1533d63b23454314f823374294ff7e4e343fa83478df8318a1f707bd11b4db5f388c648814a834c0451015a8510379b53317a2500879e88ad445ea3876cfdbd92892ed1a6a13228b765402d59ab297e821e3c3f923467b39261a00db98b838335bd3da5281fa8edf026b797ab0815b2fa730978067e9ddbc1e0ff606f5f2730648cba6d0fae2fc237fc303e850f43624396a978634c8627c3274345afd231eca85e6fd063350dcf154f71caeea8fab4e3f1e4e8b1856cc01fa0346383cbe8de879b22772d9b8b3d118744e4efbb84d064ea8270f91395cd5db19963f233962f8bab9c0975caf134b40c6f348e3027df4eeb4ab742dd4a7706c43cec04f081063cf7a52f41a987db8446ba61d5ef2c09275b056694cbd2e6a140e3a7c2ebf18c21e505919b20945b0b9eef14cce0db7579a27b24f7c57741b68d573b330c30e9c2de83d68a1762dcd17ad4f47aec7b4ccb28749a74b37fb1cd136051603c8544a74be8a6177637855d4333aae7f956b5a654b870127d335d6f39c5914f6137c55992fcab48255c7e3762d2dd1bf0b2d991900e4dda0cdb6e236950a20a648f965f1d878a270d19f0e73d79361fbad8e0144440d9d246bf0b720bc72d992ed5dc415251eebc14b503f53ef25cfa3d10f1b7d614bd0414265de385f3d902a651c2889b217d0e237adeeacc04f9b463a13403af53a1785f5a8bfe409c4f4fb34a6dbb5fc1df2523aeaa4e4e76b25613d5d27f37c52c350da1be4ba48a37883f0a086205f7bd09fa9a8ea72e1131e635f2f3b4d631074307441e531a8438b331d7b905f78cbfc39286b37fd39d1e6fb041be28f560daaa368ad29d0854fada71faa82d9c488c59d1ba405da5e220f66e0a5c65fa1b4c7281bd03b1d7c02604e6bbff615cf2cdd6a17d5eca0ca7e0855695f5f34f2805a4cf23d818f091643a7a61e32a9f54293fe919354d70b606235029b0585a4fae480a067a59b98e5b8314367e0fcd34499e91d4ec6e39d539d9440fb51e855aef6419ac10fc9c81b4e79c80f8984e5bd4fa80f7acb5cfcd21ae1a902dcc370f6f02e45ec38a0030166efb88794d8b91735ca0c99cab9b6567aabaf240ebd738d7295363bb8a4d652a21179628b7ea9dcecbd894e5d70367b3d50d7d1502cf9bcee24e051f84eae69807d9f12d5dd4498c4f109eaec17099ac38f97bd5998601fd34bd8a1700417b072829e3b1c7b25b56f0303120f24bc5fbda6732a73964310b27883bcd87b9ee1f8df0b2dc7eea9cd3b7219363f1fab148c340ebb468d1f5a1c3976066a0ba06893d14a7d509e6d4acabc90c9e46e7263afc6aee23b135136711d2410dd4ac8aed407f0ac5f00ccb88d511e6f97a78eb798ccf831d99f85404182225e8aaf843f29f1723d3bcc648103be1679d1417caae7b56f2caaa828021e06d561faa04f94161c63928f47b15ece722d9b29c2b8981d2e682516b3c5f65729d1adb5c3973828e7396eb2092f8c3e1ba825f9b1cf19998697ddb648cb879d598ba4449ff7b5c2f068045c975ba3d2f93abcd9851ca9fd5c6298f1edb550411487d81f8bfd7774b66405e768b2303db949b241b34dc3a91e5cf962092fcaf2f93adbbf1df507cea7d1e5daf3cfabdeda49c8bac2cee13d5aeb617f217762236639019bdc9ae131432616afcf009136badf42ad4a1cad1a809283b1dd48b042e9f70c4e3e3b9e3d26d53afe60f16ab5f96ec2a1afb361d13de6b2a282f02fe202f93e3eb9739952b163a51f401ea30d047ccb307a3fb9f1d15c80b9b92a5b713fb429f5e4cf5d028165f7baf2f4d48c7a7dcec22ffe1fece968706ff643ad80feac420c369b63dd0530a539dff069b4ba064fef378afe32e49f045db0d8a081ce6638da25844842bb6830148dadfd26419ab1102772ff546164bedb7f55df043d7650e8480674c412711ae38299e951afbfa4bd86227dd1de6df291b847b378ba313cdef49e73d1b8ffd82f3520c8b762c99d7fca26042bb9ff51f9022ab86fd33b5ef6e1b8b00c0d490a403bff15d7f95d0dbf6a0a2cd292bd5f79d37b6859f6f939f865e1c3d38e00f3df0d615b33e1ee7804fc3b4266e70c7dacb2b65db7b3ff403c17a639b8c99c57440013f33b9b025ed8e7260f4925813f0a1667e31998c2243a6d825c3c3e9f9727da73988fa31d34b3b176cdf9eca0060a750c92eff3c6388bdde2d5de5b7f25e2e2fc958098b39c1de19a19199add7536551107bb73900fa8ff54210fbeaf961dc03b84ceca49f7800e0c7af8bebe1f064d219bfc96941c0a3852b840b6c56a30e8acd0bad664d9728d4a6e47d6b63602b39ada33bb66d0381f7b1622024514b4c2cd23e54b78a47df5d05d57515a8ca42f094cf1707ceeab2b19c523ffa32821f518d8ce781a0b0ace3ae2d7ed1f757325d96ea6543aa9ebd1db4fb72d6406f0d61c89e70abd5f917ce67929d87972e82ea7b9c2b544a462aa2c006c0a0c43ba0c4491bf61d724ba886f9addc1fd179bafe0a8f7321f60b82a78a1a3240060d60e3d9ac82bfbecde8732c254281ed5d63000c684492f5154c96d8e0ce9f4e0ed4243ff91b7903a85efdc7a2d7963304045a4ad2a78f918b10d673009ea3e46584f045a9c9338703938d94cea444ea9625738973a200109557cf2321aa350f3cf8b0b16494d594070d89594eb0745c3a4eb394f340cdbb5da7e9afebf83e19b8b9ca4cd4854770db565bdfcd040fcf19088232fb86dfda088b8ce10893a448034ea8de9fa37163a9f669eef1a6fb8c5bda482a337e1cb5c188207f1d8051e5453fb02f6df73bb796731d4e62a022db274d6d45422f6d93ae280d52d5c82b37a5154c06e7878eb2cc57dec6c9fa6a03a5e8594bd1a1babef7f2bb22d5741c884c57e32cb45d509e7329131fcebabd4eff33750487ddec7cc56e93b7c88c0b1e628ddc6a7d816bc1b272262118ea02025ab627370deae9164025fbd85416df430e3fa186eaf9c564b2b97e9450912168e1fad8ae0ad09bd48f9e5c4f211c823c78f69948a2cf48ce9b8683401db801c8b986f12f2798e9fddb611fe2d8a5db54c9392c7a4e0bdb4994629ded28668c6a0de2d8830c49badb4bf7aa5a21bad2d22991c2e295b3651bc5d3346219a3a9950397f77260ebf8b408e7677ea3624ffdbf85c34a20d1d08d5763b06897774093c32cb5c3cb878ad139b9bc1807a53a1fb49d9778976c03e7729a79c74aeb3aaa76297940f723587a07f613eef48b7b7e2f61a734a08de6713dfff747db067d234417adaf89ca4af69a25d3ca131dfb62595a5948e63b6173e11a93aff2d1f246547cb8d92c81488f19ce64720c62a0155a0f167a0f7e5c348673b3c93652815acfe3028686523a8bac7a2eae866253de59084794c45ebffd5293c15b509313a9dcd1f37d3f4408337daf99482a26fd047ece525cace472167001232ee79c8e79a4d0f388005f9acfb1f80d069fb584d0f3e8a19b70175dc70645430aa473dc134f676a6d71acd8a773daf2b28d18d28addde9a18b70069583de887b72f22e3bf041fc0f53932ab02e9dfb0129e55cd7a6739a79d2aa57c103c7159fc2fb18dc4eb7e5de800faf92a3b8eafef78765fe7b6802ff071107f382c6820a24d26c06c2d0ea90e700aac65926f5710c3826f1bf53b9ada33495b1834554372308b66fdf2570d2f2f6caafc160b113f2882e45c4af34f231856f6f87dc12c3180e766c061e0ef12e528dd37eee943424e7da8f3dd2eb893ca413a202e3442aae743a8fda331b8803b442b5d439257e2df7ba228d7773cf2ee120ed77034eda40ba614fcdfd2d141d8ca7eb83c8cb3e78085ba42605343072fcf59676b4b95e6941892043e4ca01d66c1bd8e0261c119dba1d88b9f4c359b328205164600a2392ba20a5ee8258fdc8a32d028bc98e74098dae449bde97b76a232f92d2adb7c65784a645304e80545ee249ece93ba8f235f35c6c5e2b27b6025e81df33e658c32221a8829bb1a6a213a9f11c7af4e208bd6bc674734309e2163ab59b2ab253868d21a5e283445253816ac105d37dc0240a876ad16deea4c80068395b098a4e9ce2f51cf9a98f0a052285184d653ed9c0a7b6b817c0669ee47b378b9372e68082de2c7c1c50ea442371b98537b2d0858b1f8a4ccbfd533ea3c1493ad8d94fbfb4d92841df3bfe873ae95896694eab59dfcc628742872d2aa28d1db59faf3e52cf6e891cc6ad2449b813e2ba569b57cd4b48dff63ff05ce94d29259a6c873ac01f08bf5b57270402276c086f841b4e663a1f7327f8cb8ad1204fe137a3d3bdae40225b8bf55c1657156c0a248660f7ab38baac8b216b1f98b84bd13bfa374f63cf65be3d459ec3aeee8e9887b1eefc02c3a4ec9e2e71839671b78615b4045897192d77cdbc81a4802f6e03f7bb27c4136768c3ef94516f60d91d703385dd71aeb9f418ebbe87215154650cf2e6add843a060c2ede79d3b7e7ae81033c41523111e4401e5e021d2b90a2df417e8d3b129eb375a179cb76045c3a1f685136dd574d2b7d36ab5d4212d9d0359c5265bd71cc456f9fb2822765d4fc583b5e82a012063aa0dd8a430a505a98fbe891388c2b2a84a43171e81063b7bdd5834a6ec4eda5da501ce3fa9d6f7ac4d92d254fcfc82237b95e9e4356856e453d48ff42716d90d335fa9ecb22f7a01a7674f5f2afce1b28592f21dc24545f5c39936446ce1c30edf87fa4fec16e36647bc4e96854c77d1d2aaae2fba057f3ca716b61c20481edf041b3dbdba45ea3688f26e9fbe53aafdfd4d9cae8f21692568cd8defd3a2430a3b79f2caaf04e4fef5ba1ddf18ab01b3600c4bfea4319a5ca33e2c340998e5fcf034a7fb2d0c7a2c0873dad936db028e95672aa4abbe992ec0d92f8d34946e43ccdbcbd3c6a5004a5ba024229b3c23ec27deb7451810dc385c3ef66fe71d425b2bcfecc90e671dd649cf982fb876ec5871e370344be0d9e5cfc01f3093ac18cf9781796f66db295c6d62956500f3d2501e05f416e99728d3b61d1883bcb947fd8aa0f02b6279c9493109ba67273b6c7f86c6a15163bc2f7e899660edd4dd56819faeff7173bb64293f1555ba7dc62113469606683cb88442c4dc96b37e70dae820fbe5f62d188088d22615b3872c76c7c80491efe7249dbcf25008991c2c3b9dc928421e0139b4c4b4bc7906d5c6f4199592e24cf588f2699c8154e33057ff1ee2a4925d627767793138de18dc3e2f6549b16603ea4e18c52df0fa464d9c9be828016538f35a2f22e22bd35e2cea6f573ee0aba937fc875c111f7726e662a885e3bf2935266a524e4215e76b2a645a4befc111a1510cb49af07d4a097d329b74b04e6cd66e109747cb8798b4672476dff6a33680d807271e469ae1528494fb31183f9e914cf554cc08e155ce65b32b7fce3788cc3f6455328de8ebb68ef22e4785f33cfa4581213764c3ad1d98990e97e0de96e7f9bcd58430e7b79a1ee2cb348419c675ea3c7306799f0d26923e86d4d908df7899691e8fca27d37196df58648d03d9a89d9fc0d5b1e4047dc51c3aa31156d0d2810196c1c429cdd1a9503c641b51d4e6f213a111a8331187b3da808f2448f99a631ee4a6c95e154ea8de0dcfc97446c56a407a46b6fcc2d8e0c1fef57c4fd84492097ecb1445382d17e142e3e1fbbdd878aee2e178a186e5de9b0c72a3ebfb45a069cb8b6f6fa5019902526d2f589874afa7417e77d1dc42ffae4f83159db13200a86184254dfa608ea9d2b7fc0b654e71c23c8a0f0e3154e6742ea35be5b88e555dc731c06096de8b504a40c284b2ba51982a70d8a734b00595306fd1446faef0e26310db3808bff18e0fb42d74ff3cd19191df5f4d44c8ef89db25304a553885eedb9dd034dea963cbb97e972ca96a74371931fd60e02406baa57fd367f7af66db77554a07770f4491ce0c9a4c5fb7bc0116f54d62a535ddb025ec451dc5781620fcc392f060763668c3ea912460a91b8811a5c9f2f292f6f2b2d70fec5d273667a26565b039629bb9219526758ab30524afdffd7256bfc50af2ec9e440d312a082eb71c975058f71b6d98d4900c6a2b6f37f052714010da516c896ac5842a839ae845324643cddb080e6206148432d0d0407353605d2aa97e662a1fd12077b588657c412d9225b9f79a9d356370a1a7f06ff58adffc81a4ea966b080780ad32693cd8c3bdaa15167288870d0d504b13380ce36330bcaa7f1e63b8cdc9134facb5c4f724972a0062f15ecbd792b173952fadc977130c197a82649fdba656b376e6a433fe1a608c320c93e84f6402cfc03fc91430e7693339df0f8cbc2fd98d1374312bbad80bfd062cbe48bf21d2c406f0f5501b3e529c3f5ccb0bd9b60a4114f7125ae5507ae751ca3489b13c8fd4ebdba909b08866b8fdb42d99cee96753fde7ce3e08143bdfa77dad07b014b896e1686aad7b46041de75dbdb3062a8f5a30beab319d83dd5a69af7e6f565aeb6e7a2fa0b7e607b94faeb1e1e41a09d0a84ff45ff2002fcdcc2ad82f1cfe7f76e03889e1b58b3e04a2966940b974f7d9e2ce2142ebea888bc96da0459d22e309808f1fa432c56964db40ec308f9185198e1dbe0a8bb72ea5b6a470485c6e3601c3f0497e9c4f0a583e30a357e31a320e0ec1230d4df0729a3861c0adf73ad90e2f0eafc77e62a16d6fd8372d60597f25e95b08c1cf1104d7a31829ecea035c7d163cab1535bacf02d4ca000763e9dcffa23dd7ce7bb345fcab5a149ba17230dd3dfcd3fe7ea1d3b6f168a69c8a45cc09ce0c0899e031c667a58a0920b9e1e6acfae1b2d995d260086a4683532fe7dcc2c12823aa7926f6a7263a7022afecee7ae16db03d37b6e46593e63ea1e16a7fc92024a186b30d6749a1ee01f7dffdc8b5660364afc0b9e15d02ba312f3b28357b6f841aa52a4f98adad071746d68f05fb0d353897bd65d75d3b54f34199bb8e5803b8f78c5b87fb71ac282866303b169a4b95b48baa4546f4a228fd9f899efaed9155b0a2a321100423d3cdfc596c8b31b58750f203c2a0a1dbb8d88f873d0bba7cccde9eadb566f3a87c606fceadc45fbfaca671568884f35c86ec981f30213d4a90f9c6e7bf70beae8498371c796252ee581d701ee164478915d24fbdf2ebe46f446ab1dda9bdc3aaaeddf8bf49e5d9a61c3e84d977bf3cf5d8022ce00fbc5e7f59d9f5ebfebeb1314d9a1b13b9bf529b8b8205f2b60642276ff4a621e122f9df43afe9bf48e3f5b6d36514d6236f3c230870aa0726c9e5a2203251f011a04523845533b3f2de0fcfe2b77c63216614c13592b783448a95daab4396e70bc4ced0ae723a66970d7dc0fe19c8473e346b1a7550d50389b8d15563911b534a01056b247f8433afe2be5e78047efed47abd835a4378e470e52696dbb325d156d5875788f597c7980e4fdd02f016f67e897a9046d319c29490140396126cfdbcc2a32a3e4cfb8f09d0b0e1016516cab6e120c5ed984e0a6f3a284005474724e6490757d70e16065fea7fff05ebf4e7f8225e98910b7c485b43b1c0bbba4ad36de91264c5b17daa14bc0b8b82fd37dacccd628ce3952ae9036d6f0a2bf3eea5ae1352d59cdf98f6c2b5f21b0b01661faf32fb1757cdd088d1e7ae80c88cb9083168572eced10e78d468a22200a0f6230a0386cc602e139451730ec933dd307792488dd4de3e34bce454ca34f6447e9187af84209f3e6a980c7ffe47d06dcb604b54757c3d8fa21f5d0aa8c86e7445c782a7719857772c006d6efb8130c7007ec6ec8c697f4ded2cb8eaec50dbb90251957bddb83b40fe69eed08509d771661f8f91514125e16c718285f362c07b3aac3aad36e4bd5448312b45394636f572cf2fe3627793f2a67a445c5c82bf333553dcac0bc250099ff28d2d76dac1bb9d1a02431e917bea319368ee96151a99a8d51618cab595e97c2a9f09cc1c2a3c6b6ca1410403304084798abd2eae74e6fb9c51440252e16c5345cb5ab7aeb3006443a76db161438e1589043884c350d3b43628de211ed50acbe0bca0b7e70ea00e3b7f198520383b7b4e7fe146d830c8592f0747d56df36d2c67cd6c4b799f83cfc082d51dc480d10c365867d371973d50e377016de49edc1b67882df0bad8242f5f6d30d9c2bfd77ecd180cb913e6bb31ffe2ab79076a001f4c7766364f6b29b38498bd57af47b719af49707623c1ca82d0f4a6754ad7518ea315958a9baaece2bc9fcb05eeab188329771389459ad3ba030772f12359490fe7ed3c7c2429e63383dcfa63056c5431d80b6660ede46f5e02a5915b25726f19a758eb796d6abe2c66fabbfd880df2ac3780f99b813115d55c599241d5b53c125e02f300fbdfdd43c2539043eb028c68c4624da7a3f33fb68c8df613989428a0785613a1441bbc10428217c4a2ec79ee1b49c303cabd7577ffdd2d6ef281cd3a72ccade8ea80d2f85400a2fe541e53b28881fa4e6a023fa042a1b8a288208256f9f1223633b1ca827349c26f533aa23cb8b573d60643f6b5d186285cadd2f07c6a5e2127c4210b352ce8068634a3de03085e903923f5432f48f4ed0be82b9011405e2b1c10511d96ed45efd18cfc7fac13e80fe657b8ad82f578772edb9cd9bc288b90a1acb45a0e30fddeefb096ff7e47dc237bf5f08e47837b6733eca935e36f60f2570ded7931a47a642f3425e61030c57b58a32f7de36f883dc98fc34d1d9178e08a984ed3779446101eac0bbbf85b1e880ac3d7e4ed06295b4e598d87d13b2dcbdaf06b01669cdb534c7cdaf9ad2351da10fc8c6bdb03d95030ce6a6e84d91a14c68ac47b753ac4ae272af6279525f9d1f991af7b33d512ad1f52ec79ced7a86bbbebddaa29da7c913d2aefbe46df91102347d38b6df66fd2788b863215d36321498839360b187dacfd114a3638bc92053c737b150fe43b50cadcba1fd038d4f5fdd449878f513241f5627817f1499731939918b0802b1fb894cb1a9ba494682a277491172d315500a4a31bebf702fb15c74d3ee66547877a54db0a4df962b75e74dda27d7b2530599937881ac075383245f4501f35a60d0689811baf55102d035473e012df997ecd31a45f3cc41cf917ae22fed367d31afda151c1283e4943a954dbfc9ff12a7adc0c7df3baa876a8265e5d8d9b825b2bb04ad18d511b6a95c0d47a3a4d2644bef68839083cb3febffee5089eeffbbac9ded464f2a282f09dea81d33bc30574d5ad4349ef0b9d31baf1c0b8a5495a5e7fc9dc9073a4fb77b676bb8b739a05374970bc352acfba9c23bf7ff2332024d2b811d1f892c0eb6c89f60fe7743abc0874e1519f4df192ba84a87129cb0cc1940d4742e1d29ed94b8308ed8ba00d7064f26fb1cccb09bbf9485d52d3cf87d73ed9caae00a5975b913bffd2eca9baf8d94c8c4b621480acf4f93e8394c2f9cc2fb81c81c9ae32d8ea1f7b6e9ed3ab8be1ddc78ce3dcfeec2a21ec81c1480b26e332dd5c913f09d792a7dc0ef6c067cffb409204c666ccd0052cb7ec0dc1146df5a45d9d1bea74ee375fc232a8f2682b91ff7c217e54731f12a44110bec0ae07c3b74dd1be331c7354b1ae8819dc25255274f69190289a1fdf13189e78b9409af9d60e78fcab590d5747f16dbe004753994b91a39045aa68c6e39ef3b03d747e047b10215ba5c322db8d4b5229e1272cf2edcdf5f35e1c7066a054aef9afa257502103395fd4e34a3dfc1ce3d2014d17ebd61bf73db478cd3ad3da2ea992528d7962584f7d9b21ea1b0ed6714ae331bad08efc35e3fb37d5bff88ff164882da6ecb97fc2397b0798ef4018b8f8f96d7c6d82ff106a94e2306288e6a5aee36c2a2690ea3027e72ccd273a43f960d678d30f5c953546040053deff8ea9ed46c68dc3734827ad81d9fd5f57f8d116ecbc5532764f130aeb0ab661e6e88ca434a5582feaea074ebdc7bfe423a7ce8fbec089736a8d183d9c69eeb7b974bc781f810fe862706d901d5e6b7217c1403fcf2dd64e93ffd332aac6532cf1c3b7bd69f21b69745ba8f60306a685ced5e4ab905cd2209ce7d2ae98788a5e1a460cf8c671114f9b0c68050168f77b93661a6794b5f395e00574e5e8290aa7bd8c3abea77677e731131921bafdc4d01ff26fd86ef1b11b07a9589d1c204ab63606bf837f8ab5ecf1004af0822d952fbefb33926178912c7e73fc289726c0f62e3609cbc11661bd35446be5e980eee71af1240a2ec32a56bed5be1cfb8513e400aab81c1eb1f1d4886ffa76638048a29e74bfc42959d306334f3cdebbc39a0c57c538d8dad5eccf54d3852682b428ced3e64534d3a521d78650e7025a7af9db9e160aa6a80ab90a452f8a7ab98505e835c672f0d05dad27228b5b1c4a1389de3e3dbbf9e8c8fd11b3d478e79a8b766b3ea5b77c81cbcb91924ef7812d15e080c28cbb472f891f723b52def1882fe0e47904913c7a780383402c4ad5560a846fc5838712eed3a6a8462b3b2d150adbd05f538ea52cfafb98d693c39d6769ebf7b1c2add1a92109206ede0bfec374ddab7c230e6b0bbd0a3ea026002dd39c9db511caae27e109dd871febdfeb16165cf239e3aee2b956b5e147537f1b2d4b00345ffbf67a18e69a28c3c505768f67d0312325ceb09820852d369c9ee9c6ddc9d216d7255cc35fa592050a3b3581d1dde4b26a0c393ac30e7ee871fe2e42dd313ab10ca92472dda66f5e1bef8caffcec898210e5f113b6a852f7640b3d33b1fcbac8dcf075a9d912fd398a71006c41729bfcbada7cb573f945cde344bafc0472feb8f899c4dada51e821d68e15493816989cd85830826367c3e690490c0e3d4a532bc013a6787a09ac9170955fc9493f0becf9edc12d3d7a59dbdb76c50cd4d9747bc3ec7f1500a0a722f905345f1d527267801982f84aa77418255c6a5a53a6cf338482c333369d8430c07c279cfcf748871b5a1a862385bf161e7850894248cfed828527556476b0557758cde590a40ae61c2ddc59408b777017493c1c2925f3043e520ffe12b2b7fb7e398bcb40df45ef13136cd42a2f4990c04d718560c4d5122877d18fd9e807bd558ce5d0b60f661c909930a968f7b2027a03955781abe281c17530ad227d2bf58dc1608848cb07f9052dbc2b656b3d3fc4ea1bf52451a7eda9b891b874e8915e97758044718887fef14f83eca7f037c3318f79f0914c91b031e0794449b0d4330327c9a7d8ce82b8d58d1c6fb93d5e17406233dc81033c740a5b5bd3397c711d4146a124e71374913254ea1701990cc661f0ee1b5bfc04a393a7bdd79c91d497e260bb4e14ddda22884571953999b03b16b9ed3f8abd96b95e4413d41b978b1d56f45c75fab42fe757cd474c99b604efef2bc5aba5ce4f3fdacef26b1f0411382f70195ef10ce25a115adfbfca84677f5bd51c023594bab18986ddef1f5de352cc62864ba06e9de5557cbf61447b5443dd3434b5a2a74588fb3a3ad2a50b9df7ce5a07de814fbf2394b14ad3801157f7f3c7c448857c9c5090279dd848a38db195b5328a0c36c2af4f87167915dcfee6201e2f3d468b0b92f8fd8b5262ac5f0ad3027ad0a99a44c2f67ca6e47e3495a8f295f9f67e693fba961a67c39b8c7e5dd6c06534f200b20919e0808811bec8aadbcda916859d9541e80cd7be4bda6835318d76397e00970c3a7117e678e204865c33a120047ea8c36f533fa50c0c992b73c8225096007026c8acf1823c34e5a5f446968573a2e6b9ac7c240a4499adab0deeee1ce286b9f354d291dda42dc89424a4edb94b90db9f2fe609709e08022e70805df0dc09f0fc6fa06d7b794349db6dad1b5e04def3de5a3f745a70ee33404c1ae66efb1091ac698508cdf40bc5e65feda3c627c3cc01cbc6e93a55a2bd6ae12d1c09c811388de30ee857dcede94f4bd51ba43d15c0a3f54adc92c4dc1d18d0157333bbb2420b5c9c80ab7c701060e201e75aad1b7e3f5709c2f636d0bec4a992608f5e4a3abf46bc662b5b28c7d592d2ab6c006b513e61a230d734572f18ddf2787f186faf2421ed0d7a017e9c17dee5bc4acf7bf61bb592aaa835a5fa6fddd42f7582890ba48ebceafa07e7f9a236b9ae9972c3b961c36994fbc3638d5439a60a25153cdceadd9a833dc70b6d0f3abd06ba92e937ab0b7584446606644071e67ce058e19f51af146ab7d74f62a94b6e39309842dd520e74fd1486052bcf07241c49b61dcf6373a905faa13a771af94bda9e0b6736f13cb673eeabf6304a69dd4cc3c547e9aabbc6f968cd4316deb4e44f5554dcb10326d86d2560400e6d2a70a2d10f067a91f7fc99a4b3ffde6f1ea62be91d09f7f25d495d6b1b793281c99c9313ebc00eb3a8c88b10edc71a46873fe4ebcc7568593087d92266083932b7afb1eef41af27a5ea9224fd34f66ef9eeffebfdba58ea2512244eda8838efa852873d4a05dd2707a1d13b42cef50e4c654fde7c320d7682f97452f8b61a043a2955d67892f3b109ba2b3d0232d44a08dfd56f62b7ddf052c554e5a67391998a084d31a070578e533c8a7468e9fdebd56579e5d7cf30223f7eab510c4605783ff65795eb2573868c2fd526997ad6b95dfe238a02046ed2ef2d63dc54b7de6702fc5b4c813bae605c9bf49cc06dc97b45b2bba40cddffc90ada63cfa34e842f7b21419c893a6fe66d89ce1e034b3cfb3889297c1ce24bcf398b937224945f98516df1ce2ba820de64004df38a9b99ffdc8c555a5b9cbbac244adb0cfc10d7692de85329910f2811ec0958657ee54750d9c22885f192b527721e23e7564b556cb69b50f7e0f6ef47ababd7ba07b2aeb6d8348847054ca209cb10534958cb3f67958dce7e43e6dd4749eeb33b4c8836f881e85ee6bf53eb1ad926537b2a1aff2371c6b608e0665adb6fdad23076f247e07be893ab482ef622416a0bc5f5c0fb68f34ff1dbdffecec9c5781de1ac7549346f3c0ddec8652de9aee4646ee1439dfdc32f663f6936a1daf2cf7c95179ba4bd04eab6c76681f736c69b44c0152d4cac886efc7ea6973bd69fe7d896dfebc043e3fc75ae4b09bbd331979501ba056f3bea159ddfbda8048573c9172a2bed068eb37931da9f85e38698e03d7af7547073932b30a9d6f165af177c239a232adc651d6ad494897ed618a37f2673f5a1b61c28b89c251bfbc41b3208e22ef129ab91c9d64524317bfc51f97b3633db74a9fe54c5cb9bb24d8a926d763e2dba72dcdb5ec56cd2c004bdf843dc5704d255b1e0bd58a452c37020dc70cd1ee1a98ed508854031e65ea181d728aa702c02cd368c0b7c0f9477eaecc1e2156990e30400e3e54d7ca732dbb0b451ee68f49263a0c8e736f4a7f54558096b570983935cc43327f7355e6539b25865b029a4aba0575df9903bd46608cb7bb49ae502df1f88bff24344531e44ef8b0df69a84740bc313e891cd63f2bcade065e6e554efd4b650ef3b91ce8682d014f1caa3dc162c4db15c41909cc0e865002643f1c3ec03b5aec5e60517c57dbbbdb8332cf3b88b5b01ffa96dc7f9145da39dbaf195fe35eda11d4c867502bd194c0b3a1d1283b157c976d04c2bc4c9fc917552cd134cf0c6f19f76fd3266c8538a91e55e819f25a7d26cbf16114a8daa9154146d85ffbfa865f26b53941828cf3ff33ed888336fb5e4877cb1c1b3ebcf6de306ba333e27fbc7bf336ee44065f733d84d716f6718e7c76f1107832668d3ebc9329a6432b227ddadd738690805322de919127d64a7a742cd85ff9fcb8e1fd4aea0f66203e79470655e986d9692e7f7ceaaa4fb52a45c1e49e1805ccbe419ef3c57b773d84eaa478ed07536129480572e080d3159976d238a2c74044ef22a06195fc3e0d970d22cd136b90da5916416b13c37679f094419396ec2dd7b41badfedc004f130d472e5d6974b3a7713fbfc004d08e54f8248c8fdb052307b583244618261ed0203f43b44fb1305afa1add0c3436af28f88e1f87ff90c4476bff8fb1caec11e7a83bef6c46af9b675c4e25ca12644d887a577706751d86393ff76ccc74c0ecabdde3adefdede594f302026643ff7ddd616072f95cc09ed3fa9f13810a622f3af69bceba988bbfe84ee675b751d5ff4a42413b5b064f46ddd42736e08cfa0cb64b43e4543c4d6ffab1f5a31772b1b16754d1385e0e05b8c9492049b3f61b8d85e45de3729239dd1242b9f54d4e9a7b7bbf97d2c91cebdcdf8011b3c0efce9af1ea7133dd415af27829b9d1238e9845d0ab1c7166d7079a67a282dcd0201a1b4085083c5df2b594738f7da05fdab3f7ac3fe67efbe863dba8d6fb2caa3107f8bbdca965ba4d54ac4d9c8ecbcad9f47a58a37f5f51f60785eb45050b18c99d19aa18dc18bbf93e234c7773b82c3462b41c006f7e30aaf982781627e1e090e566556029bd299f7bdfb949b4d14d93068e3f7e3c4260ac43b89772ea16cb30e6c803dd19bacce614cadc39da7df49ce6f00b447012a8a3ed119081d512a14ea825feb733786c7710cbfc706c23ebfa0cc3c67b9258d138fd74aa6a703d2a9534678c15ff5fd1f977c96215f22df85380edb94a2b7ba4127dc82e5643002daa9174f61f06d8c21551ae5751f402e45048582cdac2e3e6da74f7646cd7c17438c73684ffcf490973a761214cfb0a76986eea6652dff86237ebe894d5b3e9c5e5df937ddae31b6cba80ca082d8ead78d4fa8db1db0b21dfd2e98306b85fe1e959e0752bdbc8b7b493e5d1561d3653b0abf228539dccc9245276b0023e6410a83dd2c3d4270883a9a5dd5e51437a64e8c660a395bfad55fa609a57cf8f49ddc939be65c1e92be91299705943c8e248e6cc4be6bf6a332e29a45e60b6d296b216f4ab423a47b750b816a6aa72d3f6677366bcd819c5e8bc79c5c9b3ff30d4f65517a1448669362064c58839278d3f2a563cba63ebf95367b26ce439f2d08a104f49a852ef782fc0dc4d1deea91d44f759f54d6e7c2dfc989b40b6d8d6db406acc33c954bb9c2b9ae8586eb242ac8d3742397de2158a6cb5fdea4779f5787e6b947d0b3333fcb115528b816b3862a353dab253a5fe382a28a0119f0595d0cd7b6ece77d59fc14999e1906003d4660db1e906d6a07f5ebe574c5ec762ff0ab40223ce132347127b8e5c0f13605ee153bb37dd0fbbe024b1acc978c67a7b4fbc687c26e9057218d05d8cafa06c1efafed88be004df68b38a8dde09a43350c76b163e7e01646afbcf6c3919110d5bda956faeb6bff26033d16455b66977c8994c72347d612675e201242af56e2d5fa8a0ea690848dd10cc0f98f4291e2d29eee4e525cc1335dcf5eced29eabdb3708da8b0827ea589c0a4ca91840acb3dbcedbdd8d8131f77e75e1a30fca00887d7b13429c1bfe0ddb8e68db7cc00768ec9bf5eb116f98bd6dd4213536cc05691dc3bccbdf07401c03fb8dd7296b4290a988b4fdaa726613908cc5dc041f2b0b9c654f8d4d5440e1c9f42442aa8ceeb98707a19b95343a987ae2182dd43dd1de7df2341d63ad811d81ead4947cbf5c5209bb443b8e2f869aa186c0a143a2aa5036dd12e2be5d711dc05217531c7d1bd8b5f60553d1becab898ed37bcced8050f5b985483b9eea17109cc54e50640bdebf05a6d7b2c7c8760c577e5f6c258827a50b68156f2fb92a5c2ac25e0d6a4b2da5d4af527eae33d31bbd963d5eaaea31fbaba21f2d5feb52a8f9402dcea038b42516a34e0998d6c89e06439e09444d76e0e05aeedef52997dc4f6641fccf7b7a2811aa51bb4d58607d7bac09d5bb59ff3af3b808ebba1a02e0755c2400bfbc87940feae5fc9463a0a064fa062ad6b7d3f32ce5f7ba76679a9cb34b5e4038a2e453568e9134379c92f009541d705e0ffaf1d30943b5f0b768f8505b752602d5984b2ebcdecbfcad3d53b1e3d70f1c087d1e304b7243f2b372dd96b3f319e4feab66e19c5229ac3ea9b2a6cfbb6fd54b63608bd40ecb4203c231cb7c6080a8c5268ab65877b60ff6dff62e3f52f95480b4a12bcc9fb7a94e60de38dd42c514d110a1f415d5dbec7ee605925b2213604e79c8595aab6eef3c52ca25ff234ff1cb7192e4fef2fe0c7dc6c91a4db526c05db9bd5da6bc58dc76a2dfd9098a86065a5145ce385889389c88290d3a939b3d567c687fd959dd38a458039e2400d21d27b9a2faee8fe23683330cb54d42d89fe1cab1071b0b65ca6e7a20ba780c9bfcd9b091af461d73ced9cf5c58ab4c47aea5ac803c9358585b7a121d762c36496c193ffa36688ca2ca4765003f7f394f314b29bd676acb1eb37327e21a690644358f6dc5d77d64d9f174fbe0b2ef8f57f27a4a50d0c7e91f9affc257ee5605f51fe242dadaad2b7f0a099ce4f823d8c9b7db1621bfd33cc4d8c6ea643a1cbac2f2bbc621871f6bfbdead4df45b449b0c491695187cb64b733471a7f145e2ad1475c1028326fcabb7350918f8217a618870d2cf1e4e979e9578a801e658d16754719dfde6fe6b741ad6c404d893ecb1a5f3b7cd197f9ebe936a12012bbb116fe8aff6bf3458954d8c8b87197cf9c313cb9c6e96f355f532d3d358aea8b6c94d3af47551537ca2be751afa60cc9b260f62319f329219c182bf7a22114691218ab00bc2ba2db2b94f3e4cc4e0b1c03e2ed27bf2aae0122d37be291730eb9342adb4bb8402a84202894de98ea211b233f783420d05c38a5ed837a6df158005543eadcb6332ae73a6f30bb9ffacd6b72cf3de4e9b4b25c77fed94ba23c8ee2f7ec603040951268fcd16e083c008e61851a849664284ed12b6fe3c2d8b4f1b59e9cc1d2e1b67f7dc9e78351178be2b1dcba02d54aab903b32b9497c7beb4f1cbbdd86511447d0ba342a37029d0d48b0dc263f3de7cf24ff208360d5065ff57cc217242742a99492be11ffb947054f0325d7701cd6035b817726d068f273634a63d231c2075c699bea1723c1aff4541d2c566c1e8fd8c296993c0ea4dad63729f3a725cdece09e3a2ad269d8226b0663622b899f9fcfe873193b721529e8df80040e86874dd6c0f202bc384968c9c46a69bf3f3c60493bbb89ada1366a3bdae11760ba9aa49f6068044cf5b1cda11cb6958a13619be54ad43cfb2295164fa7c190566874abaafae0a1fd489ddb718dcc98249cab8d248451d5ac6c9da884c4a62157e6b1adaa0f006e55976a1ccb7610c4174176be7786c8d649e5ccbb8bb0032cdddbbe44ed0b5bbbde78a30c0f8437bbca985fca5ea08da15c34bea9b5086d2550ae16ec147e372d0052d513ce3685e1c707c31b6a8024d94bcfd00da12c48ad68d4381d90e6373453bc7cee87fb9fd885164d4bfba432e0a11d9d41c0aa3a178ef4be43e2c1e064511c06d6bd41e9f29d5a5ab6b26b2c59e4b49300a3e096162b75f6199a9fb73f81080f76eea808e2783a77f5ff6365979f1b3da4bb8df10bd6de9be928ee10185bf6f3398cac510a9e4d2174632b933c28b819b88800ef7b09950c4d0e2baf915a6f6eb927bd76ed77e8f3dc6e0229ca2a21a3b699c7d5e64c4fc3bfcad6da3cf4e7be503059cf0dadc44b7870a59da41bde6829516138c007555ebbdf8e247dc3e68ea9471feddda835b4e32b74535c6644d38b5f6bacbad35c39bbcca012d63fe23c2edc6e47ffefd3aca6ff0d0f7591fb72470425961938bae15a12bb29d8d171635b50c351c6fd04bf3e5bce16624778c0f6f04d797d9ff7e1f1323ddde8210a70b944bdbfd5587f4913d2361cc4cf334c15a431eb5a8199b82babb6a396971400b348cbd6ad7a79f6b1f2d366ffc1c1802d808150327626d063ffa41f66ac348ff3ad6c3aa1dbab34a31e349985a789e9a915aa4c97f615d724ae94a5daf8d27ad5132d507504898f61e4c828e8e912f502e41b34ed79ed190828e6eb55d5744dd1fa7dbc798d7b5378c70c99bc1ef34ed57c52adb58a2322690f393489faa09594c3dbd331cf174d5245807051b18133ab3eff1b829f4e9fd1b20a25c9b0cdde881fc6393051d3c978d0b2215c39636fcebc6f12d741d5cddcc1b843a7908285166edb62f7ae476466f910413e2f103fea65210825ea3f58d4bee1f2a6223535da2179c4ea4cc88aa74f393479fafe4078d9c37fe11101bd73fa15d737ee7c4d4de83fe3aab5fdb8b4238b9f8235a40de48ab4feab5eb3581513a255ff4dbe47ec137c539b625d7b181685d7095797e4c7e883e8e71bdad5428c35e34ed871b22f43dd794eda5e4e4da8c67f51e950819d739ee326e0dea186d43f23b9074d28a1e9d1e9379676bebf4abbed0e635450dfdc8451ed4635495c7c3c8bc06296f7ce85d817d82f3d28f79cd4c4914e19def953c2d99ca475392df4ac8ff762e5cc1f987e79c2fd283980efaf8a7d12278894a9e8ded78424fd95ce0da4b090cff21fb223a36a98be4ce5d3baa34447e3ea1c1f54c6007dbb030e78de6eae64ac2639337619418a65ff80e974a36967f5700a549543b9f9bde60285ad42237700c516bcd44fea3ab5be0c917c1f6eead2c6e9ca38cc667094231c64e8c3c210744b12beccbbb7223404c35c2f5bc758f23b34e0adc4888ad426a6a72f77fce96d44c7b9cde15ae967505faa0cfd052ada59665862c0b2a0f47d5bbccfb3566a523ea01e665527f8a64d3c1b93779ae8f1be0861f645573b8ba38626781a410bc995368d148bb0c89747d32161600b1beeb595bde6d6f8e2f015c06487216f5649e4e56666f987e1a0dcdf4be52ad82c17fc98cca2da1a1fc86095079b4d13d249aa474acc231fcc69789b0b9d5c84a203df8c1eb8d32d5a8af06e701311e0f85f51d69ab2acdaf137a7a0d10859930648faea14a756c51bae61d75e8cf44930e1781dd6b8db6bf8b1f68b4ca4c685d14dcb2d4eece953eba92149f36788df34769987af5d53253b6ec1b4cef117cf9b88bcd03e07ef6c3301ab40ff4133f54b8512ae550e88a931b4a5a7e88bc1e2bd806c7d6266fd709a5e8c56d2a88a3e1ea38fec984b006a842a2eef29b34961bfdb468f4ca878037a1630f60debf01bf6487ddcc9a13edbab35aa04f33632cf2aefd7706d3b03876aaf359911a9fa119aea48f9699fb89f0f7dc363d553028d87449beb34ad148ee4a006da8e512ca1551f9dcd0894f2073958e78660b83d1f4d60003a436d2f8c608f2114c4800c5dbd4ec8c2272f7fb6b15da306f5c44706f5c8a0f809f9a90276c320e25494fdb94bfe766335dda62ff00272403515b4d708e50aaf08e135838ff262cdcf3e851689b5133ac51e29c57dcdc1dc8f0b1b020f5b89b9c09249822483732194bb3727eee92bb3457f6f39c3463e366432ce1a7182bac2b1bb5970cd0cdea835b9885ff4312c67476feadf68d233e8652b5272c7f12a346c9af9e1f1d511ac32a80d1121f381c14b6e3138c7184f6d02335ccd7b3d349941df8f582b9298b81c0519fe00c6e84bb1f8b6d8767eed2ebc19216d13bd866be1e79e45e2cbf056426f53791911cc811badf030ef8c99c8031b64e429f87c26bd41ab3dbfc7a50146352e14c37a8aec08ec71c4aaa7d1a367c87bb52684a244448c4a920b3c1333a7f52e539847bff6da32c0263087215b6abefa7271d8856f0815d0f56d8fe777e83dc8a8102fd82c202f4fb80971154a7c6d558ec46a81e1887ce2da4f498e48776d71a4c39960167b20950c9e1c0a1b2d32017c76c14456463004b338ef742fe602ddbc1b0af4204bb5149676de8c27fdcba2ce01633937b1cdab12b2e83598a49c51609efae0f4026b62d82c3f280b5e88adf60cc6dcf06ba43a7b35da4f1d43a87124b7efd2ec3fa1f46416c44a3fc0078786f162ac3ac462574f3a1c2d1833a5b19b0e60267363f73dacdef48f3fe2b6c3e347dd23516c76761148545c24052297160ae278441fe9c324ed4653860714e7ad888cdeeec45f1b63e8e958cb389d963825ed34b8b3e8196eba40239cdda067582c084b6d5c9abbb98461af783e753373f7e6d86bd070a4dcce689bfeb6f7d745bab5d5479597db74b343ccb59747f35be975ffb7e611fa11a226192623799c28bd3c19281004ff47ee064cfdc3946a5283010737755a8d8fde0f27adb3a43a639c0193695c309b85ad3f8ccb53d8ecea4d2e8b550ea8d3b9ca9a43ffe8164678ef8cb095cac934c0794628a8b8841f95b044f8bb029b6122004dfa87213e24eb10541d37fc2d5f8acab08d10723456e744eadbb3f180ca5b07a0b7ee0f9a7a3ca6fe15ca50db70372a15469d115847518386a0ea6c2753b75929089ef3999ae03bc156b779622b780fdac199066e4566f4bee4c8d2cda1e97d4d69148dda2b6827644ca9d64fc5aff477aaaec1f4f58a00ea23d9b60 +Output = a8d7755f246452ea0012c1891aa995ef + +Len = 133840 +Msg = 3ad3da43b8ba42f04a7cd009f1e9a289d55a3f27daf1cdc273218502bb70653dc27b2497243b6b6ee18842f568dbc91ef55828be1d0cc8eca873c4a99e3d9ac7a45127038913d2751de2072a42e5e70f45083d106e41b482d51848be7866fb0f8b5dc9cf0fc8ddcca69405f1a69064226c716767f319fa4da519fb897074eedf1da6f342dde4f63d25a62691bc63a820139b8c09d41b0015bd7dc352afeeddfd02348ea51cef848e421e5054ade61bd0e18f953f3ad02fa1c84c8a605d5c2f32e30f8040f36fef88a4066d80a1a125fc7f546b514dbeefbb6c8e37fca1464c466840b35b8bee9ef3f465645ebf1d2f6a94f2f487346fa929514cb26ea3359c0138ce0d3e0cf3fb97d9441d3630e19fe3c9721a29186bc3b4208ee3fe8cb1872bfcc178319d076d3bfcaa80501c75df2fc6dbc47e2038a724815ab2f48440758b5b21db7b66b15ca9049f75f3aa6255163235dacf7560bb411bba0797b26cceeafef71d65907930a79a2ce468022f6b60b58943643e6b69d397b5ca303fbcfa108c4a283743e752fe6657b5f84d6488d4f8dee985a4df18a19c53e30752b861c5ae23e339a68428760f2ad0e8b38a133ca33cb37acf462f74d39d3a6414e96bd10c8936b2e2d71bd63ead1d835b28765e5eab898ae6271814e49ab78fadd681fb4d8409ec1e6894e89ae785106ec61802cf3453ff110b3a49765343cf4408090c1a1c442d83c0f972cce0eed613ec61f2a1def91f7a79fddb31cec46e01056dcd1a5ad0be3966b33d7ba0421e7323b9f57ab2643346f9c991bf1524b20d571303f64593e767e22b1150306730b5f288d203b67a82a0130634c53049e49085657955e676ef36bdc8b5f397475403e23652e3f42456ae501c8cee251d4bb118c9f6e0436120cd7ef1f30bddc8d2827a2b3dc2744bf598377461dffe86319997a9413f663dc055ad1091400bd4f15c42d05b4a3dd5a88751747b43c36edc708a6c231957f018f5d38c583c2752fbb9c28b732156acb7a32485a2c07abc955d7a7a64161c6470d677cd10a43c2936c083c54fefcab66a133a109dfe2d58a488ee3bccdfbf7f101f213b81234f43eb9a0ce7b55d9edd09001b7b35a6e329511a6e17221c482b3ff9593e725f6a87616ee5576e12dc07db914d2f3260a519e43b82763074bd4f468ca83ead0094dde265977f42b78c1e29ef5a955cd37a0fa412b3c0bc9028d36dff95a3f8afd62db4a7a9c6f8f4b4093b41ca147aa86af4dbc8885d8f18909efc7aa9d51c14375f205ba3935a705eb059b0231356877daecf848ab571b3fe9a3b276a3ce1d6bf5c6eaa0e502ed491fbcb64effcb616bc26c86f3f302a0979ae722c62400e9d760ae6bb70643dc756d2d884b53663002e4410b1313781c309c2e8b1194a6d136552d0b754374ff2b41dca38fe2925ebdbf1ee71e8303f89b6bfe6df16c0c4de931c73c53f312cfdb3c4e7aa513dc380cc13a9d7eb852c02898bb4dde10cdca60851180ebbba9b8f5baf78ff36da076608938a0dc29c10d7890f9ad402947d14cdd707b94f3a6550b5c7c4623568b745975ad938f5dfb3b0bf33e0ec01c26ecfe99888ef841952eac8f215f9d74f9cc7824fde830cb4dd3331e0cd4c67fd7980647be3d8e0bf2a029c19b1eca3f77e92d059e0149085550be9fcaa1dbcac64cf47675f9bed94b5433a25e16422c9254e8962291309b9e4deef70bf868639f863994645613301bb52a9fced89da2b58a4b651ffa9fdb85255492554b04f0bfde562ffdd51396c03daf1881d825586e13b5e0eabfef6ea67170102b1c39e8a3bfcaa7a6f94873e56811bafb9781b4386bd898074397bb7eacd1fee1ee6fc1e7a517a9f4351a5e07cef2e5b0892b2c810cf3f91a4821587a51ea9d3e241f02f818cd956a1b11cb83dcd327353f9a47f461b892882034ac25eb3a99846fd02251954d087d0dc723061c330dfe2d479cef2496e2d55e1a5d0de3326259242ba680a51661a19f932afaf782e87fd4cb71fda01f7896647ab19ed4729620e37a1601c2ca3f7c430e19cf0953753ec89e8d9c7ea2b22fd5be6065297b93701053e76168d8f0619ab0961ecc1502bf6b2936482ac12e16145ddfdd7cade8cb5d31910c21b33305f8f31656ba583f765ef4128d0f0b4aedc2e18674288a04970cabb98e67f965be007e21035e9d79f7f6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e238a3ca1134550b8d48c3fb4c9d4b13329c7c35ed491d9b1ed2710eb967ba58ae4dfcfbc92e0323d6b4a7da0a564f7b9e71b469bd9ae800a03396ccf83c8bf98c6c750b2380ebd0a4d4ae927c302f9040e451b093176f6e4b5ca118cf863b3dc3be9763e8d215f83dd05f8b6bd4f23c5f1eda713967bccb65751a5907eed30b9d6ae969e0cb8784ead1432d9ee9a0664546d7167533d70137a88af6681b5a4a6098f486d2144b5df3ffe0e1df1842f63885d0061023c6f6091b7859bab6d8e455723e2287556969a081c10df409ded381034ea9d2de939423f66ce9c56656c0c41d51a6c835e79239806b1ba6637fe768e7d867820d46c1cc62ee0e51d4dac6f5c4b5785b5ccfbf05236871bdce2a19345af7a8ea57e5674d87873025a76fde2f8df002087329d84d933e7901f4e9512f8332d4d0657a6dee8cbeb70a881af0bca08cab9922fbc459f778993a7ac3779f8b1153fdde0cbbf7991c0cc81fe5e4e22611dad4104f6d71789b3b2f0bc174cd991c8d396ba439b0d828952713d7a2ea4705f983e62cbadd3e31c6a94de92e01d6dceb4bb449cf616f6abbef0df8131c2af26f6c4b9b93e470c2a270e8458e8369d8d3fd60036551866ae6e7b4511dbff85fa458e8a2e0d036d4364c85dd7c9a7b98ae1518dae3c946b17fd8b1e9a91dd8d5000e654c89e7b9f1ec05ccb7e18f34a5e55c83d73111d6c6ec8aabc9a07cf3dbeb58699e777221a02b6264dda3aabb86de9a4a0137715f3197c54bf7e82571f9cdfc9ca290b8966a5c2cf657ac3339c303971461de31097be651397d6b6079b70ec3a75fbd033fd5e52b292be272d5e5bb1a8afd0c98fb2b43f51c630f74339e167532dde799446b2f27a6632fafb8736ded54dfaaef5ec9157a9cafbeabc8354ddae425f4c3ceb4a2e814077a3109f583d6190fa17e59ddc4a9626b5f4b60041cb9663ecec90537a6351c1dab41f1f4649e8193d78d15f0b848169eda9d2294e9dc5f305bf3107ca4d866afa92798f7780d36753664ba89581f605117e9376c1d0978048589170b029799c45e2b258627eaddbda54b6f310ef8e68bfd77c715210959c132d2446d2a3b5d65b195c129d9ff21710b895c6f42995354768ef9155ca4a96f4c17bd29828c5c998aac9369f612a79b5267aacb5acb4db46a77f5f635a11117baa0aac774513b68d1b9c4cde6ec1a42612d81cdbf567cb4bf7be43f16ca38bf64b534cf6754a5da6e047bde1155206f202308fed9028a5b5ee0ee7966e5c772329e83cac35b40f84ad5e122e0146129779068e510971cb22fee3a2b8cbb65350ca2be40ef2fb4c94b741e23b9f387784ebec80bcddcddbf1aeff1ddf214bb12da0b0db75598aa555a28596905b837648df351f6769a728c08293a18ffb87010841f99b95c5dcaa5603bba7a2d2c1bf61c782b3075998621dfe53e621b6e2d37f2278acd6c48bbc043f36ae09717db35e3957d4130a1bf84896b2446aeff9a900d6a087ced1f26aeed999123ad411f2acb916faf117ac5bfec03154920345e22bb323a4c47abb278447456c9d6718edbbab62b047eeb41daf2f539f5dad322f6e5c548c7e3b4082532cee25c7971d052994ad6c7e1bedbdb8288b7d142a48d12746c5b752702cfbd9eed5d6400078e9751969b81a1b93acc8306b865c17148804e6f9bdd7c5cb0496f1aee67d2fc70b0c8e2a0b926a507b4dfb5633ac000fa485d162f874b8b53d08f9dbdef57171da7e8760df7d849e99c7ddee1d7a51a4c7087a93ffbfa585f5ae5bef383f7223e8498990bc41f6f898b45c859c4d987e602b66ff5c2f3887df059c5b8ac1ae37a4dbf94c2a663dd8e891fbdf48ac50f6f05d1b177639ce65498d3f933f028247a0c47af59270c5ca19ff303dab0d07a9082c0b7ed665f398d5c3ba48dda89abe5c81732f8cf82b46ad3a9e332be618ff0806bc98054a348cf44790cedefa540648a1765c9252dad902f29a5243de2173807ba2f57b3cfdcc35776797cb9e5ad9f592f90f1b1760fbcbb5b91dab4badb0f2095309c0e4dbd109d183562bfafb93d3d47fa9bfbc3a1957e28ef79ab51a01ed1e41674ea84b35f1e4887c6896c2be73e47eced8c7d2cc48076062caa0f310c248f2709d1dc8658e3efb6d0a085cc446517ae0feb0d78f0c92f1f193a5c5582217eac834abdfda2f3f30baa8b6064fdb9a0882aa0d94dc262398268e2a0d328cf99ec0ade8fe2e6563ece79d267bbb942c8c266344b73e2527e77422b4374a536c931c413bafbcb15b64768fe0198210978a3ea2ecab1f7a1e446cf9cad00a25ef4c1dc74a611fa3745bd9c9695c4dc159974df16bdd1a957553636bd463fc65003e57886bceb1ac4d27a40228d08936f117e6c758e99a27db890a01677f8ba13dfe5c1d36253d4c544c47a2a502aee1dca06bad1a4d2871bf49d3430a6f525af6e09dee2010fd04185e4723746f29429aa57f1b567440337f3a21b923dfcb02d9a99f73b02e8b5407c2252d0d72a2e9a9bb838a63fb6bcdb9cea7cc4a2d603944adc3667cba62cca11c53f7e6b9863798470b72e94f15a0ed7bc804f3f4bc5ec661bc1edc611dce82c1763c86a06dccd4cc897d4cebe86d98c5f4eba7a229e3dd59ec0555af06ea1b55ee6363c3a419edd08002055e3e842a31c108dbd25389081ad5c28ee0d89fe94e3f05049fc39f51e78199b92282754053beb516f1a38ec5190bcecec2ed605b2eea79ffa166cd9f75f0bcceb57eb149804098df7ca495a2d8e0a2cbb1cfcc0f5c636aab54e83525007fd3cc936de8c45be92c9bffd11e1fdf16b6dc39fa43746b5c3f9e36e266811b61871958fa6c3f5b3ae8d2e7a3889a9ff09396c7e76718e017715ed3cfc2423b584f5b528ebc18e298362ac0b675a1a010c171e831976b3f379853981ae8d6c4c685093c9568ff9693ccfa176465d363e9c904174364e9fd3f2d13104e3abd5c2ec08953c8e341fbbff5d75847c99e600df2b3d1a740238e909823c8f448746613aa725483cb8e766f49291fdb216138d00707a3d7c98687ce71fc1e87928a86f77b5aab4082438b445f95ba98fdda32f25e761a5f51b15d6b3302ad82997e135ceb88c49997ffceb17173c50bcf5802b771958198890293d963ede27fcdadbfb653a32cf98d11a5495769db9e06690cc1d8dc863dd018bfab8d0459d9cfb7c0964c2060eac227a37e49de4ada439bd593fcb1a499b752355406ec702ae01aea6f4d96fcd7e7b04dc2f147bf4b075ed19075cb4946bf5d99556a0cc1dddf5581b3d05d5d6b6e3a08a9c64c856ab220a559bc7000cf488950424efbcb7cede62b166d1a0effb63368b5314359b3d49fb5623946478df363fe8cfe2ff982cc4b3ad97c239e1f502ae257dac288a0ff1a861c84c4aa1d307bf8a8202fd889db0355afa6206734dc8f0a142b40becc922f9c1b17619507904fd3263d51f4fc9a8cfffb438706fabbde447c9b5458913e4d6bc089a394b7934e2289ae5cbb45ab769e3f0cce09bb6ea735e3b373e299340279cf240125a7aa054b350ba6a81f5e2ec4fd4a7bcc117568330bfc05e94f43dd4a799f10c47244e3c1cadda657c44333e8b88506da77609fd037eda0d91dce4c52625348fd9204883acd8cf226eefb148df354f5c16790cca20a00cb3eaf43ce360be9203d716960fa8fa210b1e9e64f293032df0d5cb66d0cf4cdeb865e34d149f8a92d00aad3eca5b3a568756f85525ee197190ae121ff957aad984cb511f4129b4bc5e3a8e4a9b0cc1f8fddca58bc739a0a3a667f7402c02e3847fe3e8bb53486298152e61c16902b68fd7794e0ec1bdbf4c99c921d051161f6812774d283041bdaf5eb0cdac1e8642a17cf59be7fcbf9ff3d19c39d74fdc850ba34d2b6ec25fec889f867a12a1e08db85418331d5f8a6720b6a8e65e109c3ef79c2f2896efe917ab417911fbda58be5bc7aabfb8d165405bb0b4d16b7b9e71b463e3eca6a12668a1ad513a70b136fe133d72e6c13c97522d278aa109782947c8623120a9bf5f05f14ad69c770ec174661e39513f8769c41d83f0ff3def86e8bdffe36ca431dd16237fd0e01bd94249ded2c7a73a9a23bfb42caf9311c8fe7b1ba4bf77a1dfe5c4c0b606ad61fa01a403c1e491bb5d0d6a788a8f048cebd72968b88feaa7b1c2364f5641ac535946ae5c5458b7c8b86eeef30557fbb64159192ea3196cbf8fba9658c74985f8df598e71f1eac06c939072ad06d11f98b0ce74f4cc26a6f06117096370e6df5872816dca026455acd6b91f2df3c31939217c61439d7d40420f1fb9f9bbe0627cfb0873f0ed8c1d9269321dfb36f690a27dac09a27de8e1bd811bcea10ffeb76b6334c76a1c2bc1253443939f35322dd9aaa79399d42d316a9f5270e4d409862d904e92c0f508e86d1f33a9a15a3e98e892b228b00b15da50520ec54973ca76cb6c9dfb7be2ed3b73134c898a0ce478d61b18f070886881778095f8585206304cde6b2b2249a0613ef6d458e2b2ea75ac2f1f1260b4eed1e812312f99da885cb8cdfe4a3d94ea03d6b214412fb6193871b511b709f76e6faaf12792957317a11823a07f542a93c9442d546afb7f39692d953406f1bab206c503c24bd3867aa773c796f2f073635a8f51dcfbcd7512b0e9b7d128a263803c4232497fdb797a17d1a12bcc98d7225fbf04f31d2e006bb3ac032f44a45ca1b92865035936b6df993a99a635d5be977fdd30e2f7a5880e1d7e6198837d0bdd267f8439fe6ba371d4b7974e542e908b63f0bcf2b3ba75c19467b9520db7dafb2b5076349902aaf7714f836d522bb5c6b300906876f52f4dc070f3a609d930c56fa225395084323b170b4549565496101616948f6bdf1e7a4ba0f7dc9f6c74019b7d78934b78a2036ff1c52a893299313438b0aeb7ffab0fda00ad3cf9f7107856e95788b3666418210cec5a134c27f0b671cc0c85dd3cd61896fd0e3c026bf249efaa62b0d6df42d461a0201b2aa91644c6d0f2fb023b95aa6cd0999316ed371c96596769517b4830facac3c955856b8541a4a841f50e153b8a0c2624bafe0e76e74de0075ea0f4dfde538c465425b722e93076803e1f1e71f69bfd17760640ffe86c14b186b60c861521c3baafefc2c2c65da4e066d478f4ba636695d26d9660a39f4d90502559d0a81eb04def4d540ee1117988f497ea6dde4ea9c6579bd54120cfd1cc4456a3629e309a259ba634ae41353ea170cf3d8468430dd18cf9c84966e2ea8ceaafb2e7ff41cb6d3b612b49eeb23c5263e339e06229dbdef9ed36217dc2ddf8cb994d05d338894b58e80187f16eb8c4543da62ad3ea5c1727e0e6716d55f53a6e7d3e6423fd1de779a27e125153fd1ecb444c09c46dd5a29d3ba1e03e8579775bc14badf678cf6a26f7698f164852895060f3263c9a91a7e3642f16f938b0da1bcf3d885591e6fce74f8ca94934fe2d6cf962284359d74f82c558bca658e388350ddb9c4730acc44512ad06f1014a31a67762b8e192eec101c4e47a4bcc5bac31e5ef92d43d67ebc7a8954e16967ebe8743bb7e1f2d1f26e8cb9af7f27c5d6c98be3f1104a06098f67a0c2ac0dbe2fb96c335210412b2a6c04143dca25034f0f1ff95c2e041dff458eeda42f8b8bd115b60974a992aef68108ea7d064302761c412b74d6f082b27776dc63dc51559275e82aba0e55b1d9560198e7c3f047de79a5e6d59bade8e58db6099c330dafc66289237ccf08e8654394cc0873bb47fa9f94b818ec7a94eb00a2d1b7e40efeff640f60475c2ac70ce218e049a602875d06c41b996a053b4568e3e1413fd3c7afe2e18da44649b242ba248245db749a78378a8df164dc20872eff94c2d6faae4a67b5f81e1dd45ea9244e0e67747fd5ceba7e8b9b9d4e0922eb3c88b729f1f7718ae32c0f33590092b8ebf1391182ddd30806910243f9399b06412988a948479794ffb60227466cb1f084d735233c273798b94ab0296c56720893e3c1e56c233f4e6212a18a3ae76963af2cd639fa264ee51cf54f9df5d42a7abb63fd6eebfedaefc0ce37aca5053b7ad17ea6b64b7f8b95983d1b12443736d51e169596365efd2182356f3ef33aaabe82293138be779ff2b19ebd46c5f429903278150bd9b8086c3d04a291c41c39a737d8e031b1c2deb50f76a07c099f6534af051620548e9f2847b86c45861e5abd78ea3e21c3d5ea24f8716f427d9d9c5aca49f3842567340e38ad36dac7b5a069bbf9c599732524fb030b743a9073114b3ab34797cac63956866f9cc1e7868d44777400f92e35118fc59149c4e0b476be76ed8cebb32041c9c77c088b93e583d641d56ad1838a525ba6cf6a51fcd63f0cf5352df08d09dfa0625f04982b67268791ba7da2e19959f72d025092335cdcbf3c36c536a6e755a2fd950b983c8fd7e0ed8fb3fde6e68aeaded696e622ccc25db27ecd3eaf4d5629df9a97ec35d43a6abbc19832f1f6779f12b8a7de598a92610e59b068f4a053adaefc3404a5b8a09d92fcb4f2a14da29c9f24fddb363adf51967419561594d0b6e2166a821ac1bce1f99d74bd53509e5baaa8136d4731dbb7e13a6276807f5fddff95a5d4f363e1e0662061e3a6b3bd64ebbe83251b2449fc8539165ad3d4437b7dd6608dce33a2115f22071619cb9240c8d4c77310669ca7e8eccf637e483e27d375451d19959fed4b2edeb50b1ccf67c8875ad7c59d363282b1d840ee2fb25ba6eeadf3542e1decb0835351193ba7427152b7d3b92cb934e944db43b21f129f5eaf15b10c51be8835dbff6ac28cbc8949a358f7599998279302430c587b015b613306c6a0a4f45831a54d7275a49174b815c8a32568557306769a0b4fe7f12865171bb4cf9c51c53a5bc808c107a8cd53068167ab1d73bfca1e6ab116da548eb0c7af0bd7ac4967c68bf98e332a84cb91121dc5692d655644661fae3bb6bde6fac14b2c67595db85c924c832a719827f8a4e84cde1cbcef0bea33532d219fd9a9907a96ed28112f632b5b783591554b005b9b6e886fecd287274030699f7ccf33b1b7ebd79ce64580a380ddd2fe6ead3e92819ae69b77b95c89b0c68f84c7402fb18d9bb52c4f831b976744911d36d709e645527723effbe29e2f95fd7621c4f3fc5617146adf70ca73792cde72305108c35135b8ada822bfe0f72f41e7fed6370ebbfe63bcf886e3c430f74991fd93a1b62fb5397d52c65adeb1e2eb5ec0fc5f7529b221a74d4e1e0619443100f1276b3b5b416827524f3a03ea61585f1a9fd3ac29b2ecce202ecfb5bc944323bd74cbcf4e7ac3403935d3dd0b1b174d5e394a3036a1138613b18f5f7557ee8ea51459ee83b1e94c6a02cee68e80b6be2e61199dcaed3453ba7eb36fee1f91b65a8e8c1595973890874e71ad0f32a535edafc8317107dddb66def263714beb1f503bd8d0fe8b3fd0f361628ce79161292e7decb7a3716e71cb6ac2d6c97d494e08a4d6bd191e6d7250f42822b22d892c6333dd8cecca64ab3a9a9b4631143aa6e671fc168fc15ff9027f28fae9877b942e9a412da7636f0c46f6e21e52b14dde9bfbcf89dd0485c98a5aeb72180fb714d2f98e168deccc0962f83deba8d4e1397bdaa7936b585d887b2fe624a856da1302da3ad3eab73a273127151aadef936c28673abfb55d65aa3756bf8f34dd431340d4cde2586307ea140bfe47dc61e2db0459ef5b65542cb36177ce1e28038089ef41bdce5170d3c69e0f5fefaefc3e0a920b4c12d60d11186bfba86e0c7a110b90c9910460511c5131a9b06ebfef337f73f3c76291c8c15dc96ab4db4ca1830cc7d4de010f944ffe7183a66169eb31ae1cbbe7b72317abf7fc4d99f2830a4501e6fc0b50a9aafd32dff598543750d71aeecc33ad048a4f8b970cce502a14e58f80978f8fe9159292cfa81cb3c2b0824a7c9d21a0b0910a6d0c20a850bc71d31a273ff0fb2854bea2d2e39a0c869ac1b148b7383ea1bc8b20de31de90b4719c164d6dd64ee1f8bfc78c6096caed7023f3d592edd3727d405b8fb8d77cacc4af1865a985d7c07234955e87997b71c1176695c8c91b8d43a861931e0990ffcb9aa4f26ba6423e41ab80cbd1289abe0e2a9e1bc140536cb041c77aea0b6a37f6dd20963cbe0aa5e7930e46c5bab52cd7bc1eea04fa278b33ab11c9a54354ffe6e52fa385139da1e479b261ddd637389e6a4d630c3d04835e22c4e1c8580d921c5136aced6d67bcc8ce01bfa1e1ad8bc2b3ce196faf86cf90674565cbafe098f79fca34ce121551051e70828a839470f506f59f77c80ada6ad737c837b17a9f192f4ecdbfb812f909d9838d2032689295f27847ecfd2d3e4e01007b951337fee19e58ca3aa5ed2f778dbf21eb54b66b45f4bac507d54a65da6334125c2ba552f15b6cccb792107ebea987d34480fa55559c317980e70eeb607c470f05814f15b8e4ff47ced309414fcb7223d44d910b654770d7c088d729a0bacdd419baa1b1b8c984cdd90f4411cb52029612f136d7f584fd824f512fbafbbd1d04112e29d1718791b17e9d5d8a81ebbdac7932485586e33bfb95c69519d1e1c901845253ef639daab51803c1f633d717c98f77420e79c0b0963c6f93c0d3c7567edbcdcc561f8a342b4de8fe0f21c2859fbe46b06d7ecbfff49ba2a84a71ec59be8006dfbff5bbc29688a37e100c3c9b719e171fece6637e994c064f012cbf275339842a8796d0da8940c9deb33383ddf1a76eed174115b0f6b600f49f74be63df30cc19476337e0660ed28c533856a19252b4a4773f514b8f7239357fda7873b53e554869fb7f88df5b43f39a9b23aad6289ed28701a482d609059e2cde6bfb779aa62479c0061837be94c0d3dc594e2fa173f3c1689e0b7cd30c7b20e1075f88de353a01416a3311915b60a96c85f01155da94b0a49c59c6689468e692e9147b8188e56af02a4dff8bfe5f85dc28552dae4911cf762dd2455253f408647faec21d27d3416cb4ed5406f419f39bced1d7233607883dd1299bf8c188e0c639a2ff2988701f179875a18ad32c6d3bd7faa05d37f2756c14b41cf443b41a48a585750f31484e71539b7a8022037d2cd2340ba4a54f119167066aad70e21f5c51cae656a8c86a1a54b3519f573b8dff4c129b922499e74e4684e7bcdfbf5a81bce7a598558cfc734a51a930f9312a23b41ab2be2c5f50e341d4168ac68876495570454ccde2700c72fae3dd6e80dc2a98b0f381330bf900d768999febf9dd23a9d947dc88756f468d13b40d4db70e847889d073cf1c4a1785b6d374a670099128972fc00bb234c1e7307c491d205bb1c1e9cc1e572ccea7cb4346a19c878622503e5fafce358b0f2fd5bf0943692e43036568d971a9f1321692759f24accd57cf4369f4565bbc7ea577fec6570e00a8bb91194d85104c36f638e2d5d55c6991e42ae1262ab153a1169bbe18ce6b7d6368d16fd337fc5a26f88b10de2512c5713d7937cdb1b2db06c1c57f79102def0389cadf12d0ca85928c1d7220aa6c7b664992d04391fcdd205569a55fd2b1fff99cc1d9850617690a2f749945cbc5f5f1872c6d3031ebb48e300ce2458c840ab6107b01923e4f6eee610508a61fcbcf93749a410c180c0b90e03398b28430a9e9934ac9d2efef21cfbf6322c9fcca52dca0510e4fcaca4ce8f4523b3f703457d493b5a4bfa1730c2e98f37a3a095e3a3d79052773a0c2f2e6db0d6c34c70b9f37704024c0e987a87b9c5a917ecc03f0269d1b2f006072981b02b99e4b0f22da62d76ecc7f2e79613727eceaf09b37ef385b07877e5055971619db33eaaf16b3e727b5fe52f6e4c0f1ca4f09481d86b1d3515eb36616e88a486f06df8c2d539644ffaa5ce4c946623c01e55eedc96cd2980e8545201ab7ec22a0b0f3b800660c0cadc04a9d1c0aaf665d445e4a0546bbe6f11fbf64d22037452d6e12e6deda8f9ee07c59e475ce23113ae0a9e577c0e8508792848ce3cdf6208392afa10f0d8b7c0642fd735cfd47bd294eb4588757e25550623700b61d933531c34c6f178baa44adb8c792381497dab6e2f01bca783475ea133978dfabb8f3c6745bb99ee1466935522af99da08dfa5241ff97a7ae5932a33a2e5da6d4b20c902a6018fb8afa5a3b83b9f2042db48c99e03564a566bb0c1a2b6817c24528b04d59fbf5b40530a83ee1d713f2188601ec5233fb4a3df472bd8b894fb85977bf5c9771d86ecc73c3add104e7fdfd8d0ac7fc6dd41c907ff70bbef45ddfae496a3c478449726d5e4d06f5e5e67e493407bb535587830ab819935a5bdaceaff8416afe85c165543aa4e8a4dc87f9881579450b9d7e2409575ae2d2023efbdb1ee5673108c8ce0da35bb1827b54f6469befe36988205628c81b58aaaa02fdac27c6cf638fd8031622e1f00324c60ae151dc1511a826bfc5750b836895cf3abfad55f22a8d77aafa33c822ab7b639df4b1be68789ff9c78bf88be18057ec39721a237dea74102c26508ed7efd1a6260d46073c22b201f3c8cd2d018682f2706fe8afc117e63a1d26f3a67e44ea16498789573e94a0e7bb286d5f51ef896a8605a36b7a57666de478a79f944f072c6eefe62ebe42cf13b40743a3512ffdccd0efd4d7081d572428a7e6daa862cb710cc306ee59b19f0e45020a898dcc3281f76af782d8de3ae540113bf82924a95cb99d46268f65b33004950c827658da32501385ff8b1ea439c151017895092367ebcb3e57ddd39e31693cd42e993a47467175fa9d8d53059a22e3f1cc8a94cc2b19f95a02b38fa28af965fbde74f52c56d21edffd6e1fe16efb566774683bf60eca9423a7aefe72952b9cde12782ddbbc085ab08f8bd9ca50a104ed00bc83439b842815c72ea480f8767e157b3128e80e7ad5e6d4852522c7ba9bfcd205ef3759cd21bae1c116501d70561c793e9ad3c6affd1d5ce8668d4cbe781198c2f443b21c1d9d77f4d8528c8fc16d8cded8216d2e5cbe9914225c481315b5a57216fb3cd788180a384f1ace4b4c8336b085437a5c61351996fd32525f116398a1ebb072b5ddb50919ff2b4b3953f8074216dc76e0a72b4eef3b81e3f8e7a5d2c0d725cc0d9b1f05087ce68bc084266f11f13edb218b0ba99b81cd858704f6f45d5dadd1655c907e822cdf187739b8de9ec8fd1fb5a950ca1a4497af7ff5d16de603bafb437ec3e625a39779c3f109e646f299cd037e8520ea1862da5a36cfbfd95dffd22e8e23dc516582184d56a416b902876ba177333e8961a19e9c443c5ad5c0dede9d173ab193e7418c69b701d0437d6864062fc58386a4e654bcaab1df39d0ca79059673167b9d384eafbecdb3a4c79f5ea814c6906076a3a531d6cabd94025549fe78576b671bd8c785ca42212b75aea40da2b0d5854b6bf8a254e16662ea01c9ee596230e4d7c58f926629b9660c18ecbd661ec3839791d774a1907a24dc52616ba62df77355711f5c0eceecd30f50912ddb5afad9efd7ba3f594259686db9b8fceb153fa1195dff2940ac2bf0d40829d58f0febf6b8802948c881949c22ca28f894b269ec97fe97a0986bf75e0e821f5adda80778863d9d479bd8ac3e7fe64a053f8016c465d581487278ef6923610a1463bdedcded62aeb22fb210dde9a0949947f8c6a6e77534976b4d74a0972742989dbc0f753281a5ff10a862e9048b813b4a96ea22a14039f3ff6417a2fe47816e082ccced0a3d3ba4cb1602ee45099841b3e501c637d90a048b5758debd441efb2f7ad6c3e8d7d839db95716c1f9d5263106d9dffffb21d4fab81b8b2489fa3c670309d6832f3f434beb14ed118c94815fc8b2f3e8d4dec2bdc9da7dc44cc986676e891689d14281be0d3fbbbb51fd1b0b4e82600450f0f2faae5a6ab265d6531900d43236bbaec55ee78089a790397e9f5ef22e3db97fec1730445ad61c4a2ee78093357434aa9893437d5ebd916f3281c1aa667955b2397e17405518b84d9c38b86d242a855e80c5e7e142e59bc8bd1b3f5110a26eb260952bf56460830627756e0b0940f7f3075c9c523d07f86ca9d39f8f329f4aa7e9c6340c8e96c39e56046b14eb9dd091b5c02a78580bee827e13ab0ed65831b85d78f92cdca2c13db14e7731d32b585f115959fd9ad9c633c242297303b56d0d421243fe546cc509c1bb590ac8d1d986a390f1860c59c8a6ffc7e269c29e45cf23feda2a01dd172d0db4db46d277992ef3cbb9beb4743b04bc0c9e961afb002685a38657e8dbfecf1e9fc38df905e17d8a737a4a9c106974827824a213b4e739f2690f2d134fc4187ae5da894664f99eeff1fcd5cc16981fd8733e36b5b14231f1b83c568922af2fabefe8e0c07a29b7aaab07054a6f112c4665b2fa09db59350bf8d677523a083c3924b53a7030b9f1440b638220011cc454b649951618736ec691a53b77811669aaeb08405c6ff0734478d7f556b6000f8bcfcbb0e451d904adec7147ffde23dc88aeab998e1d1866325a2d06f2750734721600f27c6fd41e456f0246f23875bd5ad464ee0e2377f197182b5cfe25775c92f4b004e558aae4188320de58795535a9c5fce7e26a553df91c9aa081b099ae71d2a28d27f6a37fad9192b73a880b6cfce83b2b14d9fc71e3cd417984fdb55399169f364b2f09178cff217a9f4ddf89dba7e863ac57b3b6da93ea900ef41372922a6fa758ed22d33e3695cf90b019b4ce69cd36b0cec13468d65b8c277dfa34e274da87561738dc4a9fb65d149900175e97b04d2a256f1214fe5d17d780b4c1135ea87e4e95915a38a14bcd33f0ddd712975a4f214405796673b8d627e58740ad4ea036474f757491a31ec6f59df81f73d293e59e13cb90e79e34731e94bcd936ae8b54492c2e52db0ff5f16388991508b022b7a87908801ee59996c5769ab638e531835c17031da14c99f6849a08e1599ad16c4761067094b1aee622716bfc3a5b5a6989f53bfd68c2d27c61b98caceef666ad83b00b89cf6b3c0c406e75d6c578ceaed7af1f19bad9672b00ce6f9e502daa21654f60f259790baf2456026a60a454fb4f2df79a1ef922ad6bc2f7de06a86571f4264dd4ba45e378d80f58e09347b6f8f7570ba71d8ac9a7aa7b6d9598ce5f44391d195778358c0f6383bf61e6c9ba4cd915a2693ef425c4c3e319ea8f065f433a1d0ea21db3cd1bcd988115e292299ffd500508099ffea9c0e1420671ba2f16010c72de312670451e38e5230e0aca9b69ee7dab06f41c01a85c3110c951956496d48e323af63b345f4a32b3f29a67e627d9507abe594672843e2f311c335ad5ff5baac7c28af79098b6b1ef17a8c6283ff7c69eb83746a45b6e8291f4c74612468b0ec5504c6c03cf64aafd049eb00ab732293f7cf7e24135d47257d87720c3734a01536da361330e3c640541e2ed339971bf8493ffe3ee1b5849ac51abb2908c82cc999ff79fc85c25293057de454ded9cd29684b9105513e24db7e6c9c21f9b1ab8c071b1ef6bc20a3fa5cdf880fdb99aa89dd78b331e285ac8a11f3a191ba7fa0bf0683717c446d0ef8d2b9a65ed075589c015df12f15fa8009184667f2ab90a0d500ef2df7af3608110fa2bbec5deb4bf27c51c7774c2b43eb09eb5bbf4d8320809ea4a1136cea23d55c113512c479f91fb6faa28525866c925f49097220c5a424284a8739fe17e6b8508b9e7cb48fe46649bf1ed3129a7eb190e5dd95c5d6a04246572cf5e33dd52c75887474aecb92789d25990ba3e5deab475854a49d44a96d71412eb1acca53b4437e43b5038b97c939b4ad7949e720f1db071b29278e2408219ee8f7cb5c06e243038898536e48da97f2c8c6751cca27d4788d9df521a4a4efd70852bf514338ec8ecfa93ed23a1f4056775dd6055ebfbc33186d768dbfb6247fe94d0948bd2aa8966561f655f019cb5635b9cd2f331c0abd68322c40b9de77f0283139b0c92a1fa0f65d4a77ef6c81788054caf90bef487de96696e9476042ee31b9b117ebd9ba34fee57ba6ac6a0b43f3d960013d8bde0b188546c5ccfe2db092411fecb99bf0d8fbb53a609b94d13eec922cc64c8463cb7208ac84defa80edc661c6ada6f36bf35926e744519f7bcff72971b6bd6b5265828b48a4e207f4fc4a8655e93862841ab3c502b042cc538d8009df510493323fc6679b846a88f2729b494e1de28bc1c5781a2d3303ce00ee33bde633b6be7bd0ba4825c1fd0ff1d735050fca39b1ad7a3280c75b08f70c686ebff6cd482fa7beda8767dc0e0f8ba0a4541b6ca286bfaf6fb35176c6d9ce92bd7ab19c3d793e50a3afe241120a184565a10173b17d70eb7c0c6c44c208cfe39c88871f0b2db84ca24c258fad72305c0596527dfb0859a5040668138ef698d18863e7c435afadf962d6921634fa5c5ae08e7ef9c3b9e262843be5818215b1e2fd97642a519177fd41c9c8734ce504b89313f765bff493aa7917650d4ff893ae889d8ccfc355aeaeeba0293559d4b1fba9a15c40545af5f35f1357154d11c68aa5d0b2132f7ecaa4acf444cae04bfc9a70c10e28055f71c3a2ca3c481df3b31de1eb8492da7f547522309bb284ad4d1ba4ed8d7b6774afa1e0a695041700f1cea94864dd78d9c476c7dfae6a9b9b1c05a2a16ab8df3d08049532f1e7dcdc0b137871e3416f10a3402a6bed71a977f1eee667267ef10b03624cf9c341e3f75782dbf2706d41a67957b67fe96642d6571e0cb9312c31713a41546599c0a0c56fa34034acbf851daf33f8662296dc38c43972122b4f1502053857f0e5e2b7c8cbeb51d2f8c6ade8bd5b6cb919a1fa11c1b7b30c656600300cadd43628067d93f4c16d37d511209a3c3480034f1610e3c82f4bf28fefa78da91835afd0ca869962dc1eedc20d81a4a455debf2341a5414ff6a98efb7a6f7d731e18c8809d576bae81c36f603a458a7e45d56746d34b9cd1a4581c4864cc71f315da1ab80d646d305917270015e0ce327b00762a396868f5bed434f75d531d91961600d789321080d876cf522ee7e2597bec663df2802814bcba6378b277d2e72549257f9f351818766ea2b6f3cf696baef5d1f28d277cc71457125d02bf345c29eff300ce11d67fb95b5baef30bc5e1bac923f867c2b9755c46ec04dc9da4794a76f41b742cce2f17e954babb317a43f5b2f6b010e670b80b163b109ea7c5b6dd6aa3204ffa719f2885186a9ab5190b066fa4aa27073507972199f0c741faad79577aafb00f635851bb312f302b04cf533bc85708b978dc87158335f510c5b594ca051a32d015d339f8198919e7dfd962c3cc373451bebf614e71509678b977c61ebd0046e0fba837c84bf8969ffce1bb744adb48746918ac590ec12a0e386c63d21cf26ac6974fd1b8430e54980e50d3e9aeb3a3a62a70ceb196083e25e4fc1480af512cd58b229e24992ad28466af42807240e44b55705ed4b1b6317421bf5ea6debcfbb229c903a9a8ee7ed9a8656dd5300368f88c7fc35eec2ba26d811e98c1359655c0f5bb98c40cc9d80c460bdc54629bc01221f792aca0091f7685a2594c5e5dd9a69172c3e04f3d6c90c22b048a844a784cd880434a67aef723a1d316c493a3e5c76f772baacab9bafbaf1b8ce40fc00ffcf2a26bb4cdbdc7f9583967a67fe908980241266009ef31d15f85cbfd7f6ce59712c662782c96006c3b4db28e9dadb0bcdc694acca72e6f8665c248335dd197cfbb64de111ec84ef0ad788dd957528c9a50481f3d0cf7c29f54898822257ea4fb5f2624fc1ee4f22b314250035787eab520660a2db5ebe980ae24124660c48bae6062dda5974ca8705943bfb8f8ae6991bf5b923b3c6b32ded52a6d2c8a63ba5d81a36eaa329fb074a7f51356c54677b47f915dd20b063d1e5c14ff212cacbf8d15706e865b2ec88c8fdf016937d09391f39fa38eac4d76a3c57c5ee0a22019b1ae4243a68baa5f3c9349f06ceaed4bcebdef39cd8a916e1383b8f2c7956e477fbea184a74e72c31934fe66de38fd1eaf30f8571b408281f22963516260e7c72bb916b7f51e18b296e744db39bc707ac7ef53a1f4488160b428f4012dbf1d275a400a440c651cac2a4cc5d40beff7febd5b7990e51d2e78cdf4f378a5ea7ed69fc604bf79cdfefe67c7e9d7d14de3f8d417f2aa7a28da38c42fda2e578d9d6340cd8e80b9b32047c3db296d0640d517b08727650016253f2b4c20a8bf12f93c01c9104e48bf3106b3092cea27833bc9e72ba047234f9fea67bc6f5e491502ef374b326ea34c91c9d9d43cf5c16f989ddc97f5c7604f9ac8fdf30ee5820e5aeb75b65d7855e5d2ff9ccf021640707bf1f53e807c2390b65972a287a4f65951cf31bcf9e1dd057516704bf4a241304664e5a1e8cc09bd632a5a2d8233129097f8ffa1a031a535e8acf8ed8d40201998751244973d7f1031aa29166706634e8df72416e8ee4af1ae319b26447689b6d2910f98f456e053926743dfae9564edb458637f2c8e3ac34632eb88b29bda7295473231b89ef9d215d04efbd17693f8ab7b226cf387f115413f4e8740469ee741062e913c7c18262c73aeed68108ce9c40de542c6721a821f9548a485fd438f766c592a0884c7ca56cfe846eb099c5bae5f20a32db2f37441f36e52ec3664d595d8467e952f853925539f7ad2a86ea8bb0d790091e1387648d83424fb787f443fe87b017b02dced089d190ba793506b8a8732ed8b833602a4a21e9d3c39ff75d50b6b5512753b60810b097be2410e0e8d5af2cc72ff98a3e5efa22e16f161c4e5bfabdc041d2d3e1f3bc54e0b47d42c44074d1000dcccc47d1f535a144542cbf2739118b8512ed0439df0e49b0e6f2f3f0a867a8d913efeeabf9693cc9c1ee57bd5dfadc7b7ccc18ea000f20a0b2b91eed3434ea1c38bcdaf5f008da87c52cbf244cbed8ac7637c60f079d8e0d495fed400181ec5da2f8b3b7c158a204c9ac9e64f0a5a99f69f8b6aedb01bb7e13ac07f0f695d624b96e23f754a2bdca33379d862ff977dcbed58fd26683ce7b78681505fabad1fae5e5d0bf912d53616d956490f30069ecdb97fa808f6af08ce05abe88f73605658e24621660438b4fdd8e9a8d2304a8562a069ec23e00483ab34bab80d45299ef1cf48205a92a8d1eedeae782a74b5ba211e9249f5b8bff0c590384f57956b520f71dd892542b82550470f579671dab59fa093320cf543c8b3a4af0f0ce8a837f87670bc8498e927d89e969794ac4c0024c2f744b80a3283dbee89777ba352894359ac4ac709be41de61eee8b3a87c1256f218e2a57c0ebac4ea4229528a1cfe7677daa48b19aa1bd82d42ab61fadd74bcba82ac53cf2ac605047394ffd149e0186d966a3f5d2f0e6c5d6c502df7f29fbc88bf022188293e02e9983af22d7bd69fb769fc5228cfa1e17eb68776345e0bdce94874bd1b8c9b44e62a9bc7f3255a72d1cfeb72210e6f0e0dabb1e934723194589984851dc76641a6a527efc6c8e4483932a80dba6dde1886c65fe57cc1b989533ca1f7e36c178f87927fe82cf8fc767a2cc283796077b77690f1f981eefc1265ac6da420ed3795256d043f7a181b840138cb81d278b451699608a3c83c81c60c6348184abd4ef8fcaf455452b8ba075ac113774a292c7cbc301462d44ce32ac3eba1a2c56eb60179d3b3d52b5d605703604ad264f438affb1995b51a8288a708b03af2157405652974f0208878a7298780c221a76c7151b29d1d292f9ffad1575b5474df6fc58a87fd5ac4de8ce6c553cd29f385f45f085f451b2d77d7a2104c479eb977b47ef811f78440b22ca7d0f48fe2b6852e6a4a7dac003077ec270a440f6a2e72d48a1453dded1297ba72c2e6537cf9296d2b8e8a2c6ce0c42fe215cb1d574255528f95ca2af5b8f3c8d011a5b25929e7430b4af160c1acd1257bd96debd69393b0e7c2e1694eb25aca3853cf2717c7434282166fc3aef3235f5cbb990578a0c2723b423613487d315123ffaf2c395fd1ee486741df85523f5ffd32d8f4bde84618f28a44a393a81bd01b8bd22c2e61f79896b4141ec5588989e5e59a3406d8a307960179a480917ed9976ee4b1776c38f4258352fc1f64967f9f3a794de4007de09e5e6190cfe7ded0203f3356a4dd2a635d6b8b11d414faa391a7e29ce5ee1b1693e778f2a209b0563e736a8627432078a6c328da93c80a9855b462bb8cf02f2bef334c44d77597de4a81d6ca7f2cdfa6aa30b8c0cf1c5ab063f6863439c50e8338d84801b0ca09cafd01248e2cf89c6fd02ab76ee6807fae34d4a9618ccb5dded93ce8a3ce656ace9e77c06bb1450b56a117a13f9a82cdc450e558fdf671817178d7cab590d65f3bd73c36cd9c8090dda58e12bd3b91d9a5408f1153f7660dfd703f5ab1a8ab3ba51fe4e43e5f39c177460468524a3c37b37c587efe000777d557ea15226642a48cd0f8752869df01b61b012ea956e05c917cd7de66b0d4439bb86e86726a3b1e75a2fd56365cfef61c8d0ae22cd23caca1ba63dc288a6af5b2ea132b4c1502fdd20e4a03c29918030d24980f575cafcc86cda2d4bded1a02ad859e7ffa0728e7346b951a67be98bd2a6a2f22b3569820931f1b7481698ffefe1356f116a11b5f1f4334e6903e1f98d6e636b8bb40a44d693714283d703b4f371bd32b2c8358c9f54dc004d6880b0aa4f1553de9bb42a76bae435c2ca19a87bae7a99a962e7fbc48b3bcf1a53ce9970733f11ec91701c33cdd1face97e2c1d2c3f30ac0df2eeaaac4d824976bd49c2902690f7d3f450253f5c1f86fe566e83fd6b0eebde8134197253c658d5999a21b231bb4594d3bc41f593b976c5cae0609103aae69249de8d4d6eefcc5c4259190ffde6847625a4adf22c73f8fa5c101799818b08c3cd4c7a900764f04558153cebe39931126ab7cdb77ed589e68a7c3d797d25eeed7c0c75dcb5dc815b4b4ce1d87b59d7d4335435a81364a624c69326b34f11f569e6ace3a5e2acdbf88c6ecc782d8ef545e0085a667297ea3fa0e387c98fc5a8e38d9c586e265c8c979c09313d92def5d22152c05524f5a291a9ebc53ea7b795c4f15958a7e9720fc31a9ad48b1390662347b1ec06a2e47bb5322a53953f7e3898827248e5b473d20558921af35869c293f3a451ed650ae234da0dd74fbf700dd8d165cdaa0fd87fd9069d7908a9b1a7ce95b8769bf3df527b1234b4c0903381f06ea24b57641665a8750b733db00e621dae5cee74c7b869027b0d70ba5a3f3199aac6369059c4200e546a9df4e3e6ae0bbe001e2a694c725565169f7f9609991f263033c749583b8505395dd0bdc0d83345508a0f41022b0e70de95a2ac19250b617eb77ecb59148708063763b6236d0ec4bcb6a5f75fef781ed3f7a634f461e8dd003619482d478efd4fbef06584f918cca31870f4dc2c4cdf754a0ca901ec21f9733449586b512725845939347bf8cbbda24412b1fd8dd73350e13870e80061573636616499adca4122aa90bb7ee8a22848cdedc74a70a1aaf561dc351d5b0176d7b114052eca02a0c9078952e445269cf4fa749d397156a6c1504a6df8689cc8c638b3b291424af4e61495a3629ae37c456e49bc410c40d7431115742f959ddd8041c2e567831d9de836482560564346989ddf9cf7ae1a8cf948cff0298e8f159440e4161828e50c6e0113417403d09c8d0d98c7d3d32e68624bdc5a5cafdb1180ca79ed39905bd0e5e9898ff42015ee914227b55c1806c9fcbebd2b5f662c51c45316a34245cc8bce740d7987378dad23bfeefe06f92e5256f604dba86ddd46dd5f2d00a8d5c18da6253196a3c69268d2fb610a4ad32f71dfa625f3ae1378614a633f6df3bcd566fb61785fb039eea22d691052be4264a91533a30bf6f3885189e3b043a96772984cdd544d631ddcd971ad9f7fd7d3787886230e7d098a77681a75423a406213a208ed47d802fef77f6e2d40da0de2d560b0f8badf6c44d0458a8c47ba4f395314be15e5982649c914715cc709e71d05e214295a9b75bf3d5a488d433c2c599b50daeb9006537abc3909d07477f9de848d2e394049ec55f916d31cc7386e4f66e6fdd2e99b112e6b4db61cebbc9c93cbb26dad1e5306a5ae1bb8af46579b974057857054dec5c130d2f4968f4065f9560260f9475f7b3ab6d977b932e22aada2231028643a07cfb75953d1f19bdc6bbdfd96b25db7a061cdc08ecf3f90920f26ca0c7f9a454dc669513253953776676df48d4cb4041cc73d617c55aecb784828ccf8fa59791e31c15b4e9ffc9bba78e087933cfccd56e7905cbee112fb33c5329c640d345def9e49c7d72b9a411f1ca04767179a6bd52f60e2c5060eb85b22dec8cc3cbd5c38687d278a6af0b01acf378477411f781e2b29c42d18e48b64cd77d2801d570c8f2ce60ac6e28271440d10ff226dfe6aa857455165ae56dcd741b83a5e1393e76a67eee21b36e1fd1152c6f816e2b9cbfa205e1afd4ab835291bfa7084a3e6654086223e05bc71cc193cc40fb333c4148a32ee9152529b1ce0a8c905b262d11eb8141a8f04f7c466a23792b695f5bfccdefb5155137a720c8494ae6a65c4e66c17ae2245978d4c4562bfad7d2d9d0f5d7ee620c6af06df7c8b5c153efd4e98e60590e4024bd19bf0d1518ee3e89e355ed08ff77683ac25f56b6b87d407646b050878da45805915e15479b15b657dc4498a552fd54fcf080fbb4f90ca02aadf5176d27f7fd3a86caf82b4bf6402b02e95f2d2547351e3d813e174aa918d865853f72a4e21c433e2a3e27ef39e7ed9e6dca083efc1387f28ba84874fcae68b78750fdcb0cbb0802a76da55186b085f8f7619e65c5f62156c5c0ad3fac6cc2eb23d078651ee57119690f0c3783a5db58b0ad58644ae7d3b3580eaf72625ace4983494a3abf9f66cd97abc46adbcdd806c0359c0232ed854f6b1ab6d7c57f7518cc42db1298f3cf645aca35b2343062494e81d30626111f74276d2b347ee39da2294493b550e89427d9f3c7d637d7626b821a6639cd5a8a68b48e7452348e2f2dc0d6daeb90869d5e3daee2a08bc9c1b28587bb63d0d0ac733905fbf990891402b980187b00d6d251ad83eed6d80e65677f503c4cd67b6edfde5b27f039db32693dcab52e47df1c4752fb5341c8af38d197fe50bb8864b8f2cd175f01d88c73a9743d19cc0eaa618a539d79a901b3213af6185e798e9273f62bc10df215a5be0c8560ac1dfc3d8b60d9f2c8d62b2207e8c426d04f8f0d853123e1988c972cfad898bbd7e8baa280120c81a98fef05d42428b10d0233ded8ecda006897072c1156d7d700f7efe12ae713d2829df5636f364a407d5d230c536e7ba5e5db0caaeace683b911044006f29176dbcc9e444c066535b8827079fdd012c5977204fb06d88736ff0fc6109391e3fdbc0d964b0affc6b8a962786a060eb15a3862d784582cb21fc8783ed036f10b4a3f5951fb0 +Output = 8b60d5c7239b01a43009153504e4c103 + +Len = 135192 +Msg = 6e9d5067c240c52b4c5b89e25ccd8a136a002008a9273f30dec3f2c1736c04a1c7ce0087c9f25d5ec5bff2ea7ec0b0ad7c278f0ca712c9ae150e472521d958d0bd6da9ff0939725924b2ed7b410a0ce2fe3f6b0bf25884d885ec223605e318fdf6803218a9a06ce5103c62ded035087a98519b4eb180d778d7656b3d4811aaf11a128317d1acb3ca3166395c51c90a3cf164071d0d132c54b3810a8211ec7774d2288447abe7afd030375a3bed4c7cf1b28097c02e98ea36bf49e74d89fbe74ec6cc1def5cd8c8beb5b8adc3cb48c56182ad337e3b9778e4a6c4eae6d7c663469d0536560f07675e67ef1b3e14444d540af4c3a05d9940260efafc9425d55125ffdcb7c5eafdf276efe68af2efc97c92f25c2f6ebb25a9c6a0f403a198b11ab3965788841541d3cff4a5e328855ebae2e1ee5f307ec31b8a03b9e8535ae127b8078191dbb95b70311f320f28fd8b6f0e7fb13b2ecdfbfe3cdf5194f393eddffcfd5fbb12fed433641897f53a80d803dc75adacb0d156bba2dec5eec86a5ea9461efbec700b33832f86dc7ca636cede156bea98fdb15bb885a61cdd1c08baef60125c0d3e0900c75b12078eb346f468810871e95e96935eacdf5e4b35958c1810828a07c51fc469b0632212abd9d20ae7f549851ba88415e132941f5c38598c1f168ec04a7605d0f62234efd416f12a10da7a567c0eb846ea46c541d919abb255756f2218354e64f5f6460f7726d832c55d0d42c8f1b75790c5f998f46109f4794835147685248d75885f59db300f88cc290933497807b29b54380ef538fcb95536e87dab8e11b33d7f87b54a5d1f96ede4761045cc32bdd39d8b8a23c50b6aafe8914700779c3e1684c60b0ad58fc2f2375cc10514c0e20048f9f5c831be6d50053859bd694e96c83f254364bfe776a1c9c42dd1793788e9fd8b352aa39d2b0036e39b2a8bad231b57ab46a043b019c443b53ef1232116576348339144310c86239cf58e06434ed77561fa068b7113214c38dbac3905f6122238d7473c0179ac736a4f3301987dc3404d48debcb2cb818d54ec4be46c8fe2e3630a93b295d838cf56915fa53219a86179186f01fcababad115a164bdd498f4ed2b2bcce7692f3de66a35b1a9b8b4e7fed530280d51a6955770b5597e08ce00a8cb80bba2b10a549a46d6f875b3a7d43b0dfdf61c880812d8fe850effdc09ec09905c89b3cb916b718d8e214f88dfd54c9a64ecd5a46bcdc60d94f7cbd4d911702803b9c32f40dd1c9cafeebfcee955c438f97ec15d2e20bf2c79965a79c81b8ce10abe2942b543fbf2c0931efc40f00238101e5808dbb614e9877d34413364a059f6298eac5b1a802e74c11577631ea7366d5e123df0e877b3631ee1a1b7776b014a6e4bd2aedb49be10fb1be6ec4c23b255c078731a52481870fddb31d0ee4d556c0ee93c1d00c91049a39ab138f2f81a6db8033e946e1697558c9977fc13b7f4ff8dff7f42158ec3734d2a7cd5cda4fd19d73af71ba663ae756d94cab5923b3e695df6e2aaa3fb46126a43904f16bac8ee909842fc95afcc44f365c079e467b03e11582cc316af26cb9d6e9201789a1c50669398d3a66b8f68c074ffd5749de8e22aaba407f81ae3f32903f8996dc345e3dbd56f1d73175645575abf34ed7e570a1c69eef5c2beec2dcfcc4a8360d6f41d62a64c566643bf6f2a8fa534996968fa68fb7418f10bcddfe3fffe3bfc45a5619daea70b0a61294aac7c384112efbd478308c9fe2d91f78df8478a3f8a8fc864df5705a7da00326c6fb8fee6e481c2761cfa66f1b2e207bc8f1b851aa625db7bca27eeb95f915948e6be5f9278cff71a7958b1a03b6c5ce01ae46539d9a85d2ac0a9d8bbf5a51c64a404d0d06a1ae9893a9c509621a185ad2e4aa1399f77dc0665554a2c56bbda542a14f92d13031866d33dca30002210583bb6df766214c6732aa2c986dd36417beb774f051e08e217d5d564fa414e7b85b5a1669cbc1fab15731acd5803b4b0505a9438f4e5acf530a4dbd7718fb725ca3ea2dd0927f90851f145cc1c54a7c5860a045d89045fc035e2b9882225dcad7a4923b94810215cad078c4c506a9fef617c40031de4a1b19bf2070d88be3f813a37bc71c61f3916ab3876d4709ffd9c9723cfe030111367c7654cce11a3403f6ebcc59d2f9f90c4c1069deb197f515b8b831c7b7c2415416cbee340499f9f36ac3ae791d13bd8f582f469f697833bbaa33cae1b3e7827ece051630acced9d0567249b06575e62176574539d97460d3892930d661387ebb8c6ef6493e837da3a141c48513e81dcb8ed28e33675324633ce38a2e287fda13384cb306237e8c74357848818d340a9488e64a157ddc2975aba9016f6f82418ebbe878f0c388af49f95ffc2a3c2154844cdca16882d81410bec3bd23a00a5935fb8a6b8d86688e2cd53d090b8877a4a3c3fcbab2de10903d5d78e5d122dfca0fe17ab468d5e8d024b15c96a9dafda1fad38dbe7ef84943037011a2025dc93d2455ff7c0616ce1d397502cc8e987cf49065d9d4513a4ed56adfd61b3db9905a7d4062ebf1b3e31f740a78d3412cbd446d622625b50be6ef7a920f790a9efbc82188ec28b012ef7bdc5606d24afc853a9ab0bdd931d3d8393c7104e3f174d4301817e25ccb9dbadc7a42f3f132729f7e1e39e6174efbed5ab765fd827ba3e1396bd38faecaba0be854b6895a7ff4d2b701e3e80792e9edfbf354417d2f93eb8c21a63a4736d3ab47759b0e32bcece58d4c980dd28706a0c3f92819fd96acb9d042772a4e974f63a2e2d7cba46ec1a1aa063f9ba0b5bacd5bd0c7cd2a365715aed72da8ec7396f9a1a45408d51fdbceb337c0db98a36e3e6a801ba52b9afac5cee7b2fc49541035ebc4f80df056a23453e70315e3d988b999120ae82947ff92d77aed6e8cc125e1294aad211b9c7e9a301fef91a8df7207908d7ee04bc7cc447298c646de433dc3023c5a8d7e78d7c9f2e66e96103e92f0f6f95ed3baa0cba3464a25cb6661c0a51fa4e79a4372158a4245686d437d523b735f920a9d5d6276fc97f2464da3164d27893b8d8f12a0a3c843c35f682419b2b1c601cd1d83fb873b8815ffba91a783c3f440b18de1e0dc2be868b2a8bb4e1b55369564629cfd9cac24773ed6b4db119becdd4d62663eff133c3fae2acb5b3f0ab735169330d07ef673fe4bc8931bbe5679faa8392920d22a48309d17dba7e67652c92cd9c5dcf5c27d936db9b6cd519da3800b38b3ef1f151324c596749ad7410e3aee5be588c9b84b1feed1a65b93177355be878b14ac7fa50170d01d9cdc14f46ea442173ec17fe4881437ea2b4c6df062094f39f5410e07b1e4ec5e15bb970a4e96b5e466a6c050b828140aa74346238f34b846fca86a401a6913bf6d3d715ac20cddd26640229895718f8f35424b12c586e93990a83c5826496dc90c2a4aecb34de16ba7574ec30939d1003f0f24c7ea480b9a18082c58bcca21035b4accc607a2ea3791b3ebd9fbc602e52c73784ae7c345f2fe91e147c33658f6c0659df2a85320bd8d1ba2e3526248c76436efa1a53cc0c8a90b042d25d33928a44265787ca8aa8501591be7f853ce2c4f2032d60bfea3a4813e3c13c9eaed2370aacd5e6de8b1175633fdf0d4e1ba9f55f9e9f10050170eeef1320097c29b6f8a657cae625d5cfcf572f103ce5635a5de88bcf86e79448f58ee8efc77a56c925c3b1c70424dd4bb44de9e2acef866c8529651f53cc251ae27fbf70f51d988164cf452aaf70140dcad3ead6cbc11768f19eb53ef527367f4c3e115420da71683c457c86668c1c9e7975bc5d280e78c829b4f68ef98d4ade89567919c93573e5f2b2d26ab7dd597656afe8f6203c2d12a408a38fcf62c4c1203571325cb312a34e93e13821e84d1de8dedb2262bec6d0e71636c1e54c56bfa767842e69e7dff89665238f13317a0d86af1d726e1ac87b794a4ac5d9ae533295791c7e6f282e8e709313d03a4d62bdd68d1a6690e4947ab13139fc2b0d5cc260c6b492eb1890bd53ca2c9bd59099b74ef57c6f7980cd6745479ee547edd5d79ffce71c4c1da90db676f84293bf817266749e0d8693d5c9ac19d411cec440eab9681e7b20cbda081f05e184e30ebc87938709b15672400a3c0493e20e35409433b4e5200787a635040382a342129d5f7cb94a0b47c08eb19bb43906a495373c955fb5bb4ef5800cfbfc465e4f7fb6728867d96c08f3345831954dd02088a77c54c51a9d858a09f87d5cc6e6598a9a693d2f2263e87eb356a4244ceee06413ac08718e5739a9b6afeeb16f0bfee7bb9c018bcf8384e79e3559edb0a382dc0e7427018b68e9f8e87be676c91fbe0b8c937bea3b3b5cb2578cc95e13ae8634ea4d16e18c5304ec41e4fb394f92055aafd812e6f00bee6361c578f1d0504923499f7e9e2b9618f8458373556d13637977e25cee8865a87f6f67ff4581496a1bbf03b493c3b294a155c00577cc1466dc873ab08d6ee9196ab2fcb2c5a0ea57828ce25f7eff39167c0533180cc7056df85059c4300df6bfb9eeec49feb9c3affc65d3e59c388a0cfcd65531710877175165c7ee62f02f19e175cf0b5d3665c1edcc50dd87fa35f6884b9ed860ead9c17c29fdc5b2bff2a685da1d9d7d91313bdb12e1bddedebd41b2c7887348f8be1add2f73b09bc7d1f3fbae4076bc74b67c48ebfeeced30909d10fc9aa895ac9471f8e8b2558aa24d60d744d01db63b8611bbba01014faa4067073d5dced390ed6553e8421b0bc9d59b8d4064f8d760008aa80fa09182a65d1e1a1c4a8c8f20297372a09b879bb90b029223479ebc7cb655a25f55f412af3740de1bd93824e4e91ae9a43701b70a4e149a602075b20c27e11f1b89cf6c4f8f7db7be82783159acda0d559d4fea082f6ffa8968247478c5db82d6c47a1be196032b66eeb340f8d51f72474698b16d2f6326f18721605d20a382238e9a9e100b9fcdb7767fb03d02799cfbcb928993beacc44b15d30223c8b7715450976f5550a20322a2441bb0b57701e584b3ef065d9b46f88cdfd6671ea5f51ba2f70c2bf598603b0a96ffde5e7625871a736e4f9cbd238c749e5991a2fd71dc0e4ff0fe7b01696317eeb9206e159c72e56763d9fc90ee6935a5082de60c6c07fae8ba67516b832d42c1f42174c3cb1b8df68c3fed950c31786a6ea668716831e187c4d10945421c13a71d4c031f35f36ca733dbf06801578584f995aabaeaec6a73acd6030d2a921304b12a8976519d1a0fe7589558625e155b35761d576899ee52dee0ef41a131c9714c278867c27b1e7733105d04a3b78073aec230c565bcf59bd77c2e814a7d9f634add7071fd0fd2a393adb7eb59f65f54d1f4958366e808b53322313a9ac81d5139b6e20365ddeeeb858b267ad98d1a752b97bc1fe08da0455e5da7dbf6c3bbc1954e5dbaa167bbd585232941b6fe4a6b38360509672054b2d598f2e3f2d3034ae9fe3406143fd1e81f2040ce86dc579d642a10ce6f428e84156e92f123887c43a451056442c8b9a9bfed0d7fad79da825c1e5fed7d56b64fba490871ed569f5250f15253b194eb80e3f3dfe3bf893bc06c7d52c4f5ff746c20a2d3e4d4bfe4ed7c29ab52f516d00427df4889217d03ce31b19a037d8f416fd51685d86e46d57b829460f061d11faa0809d7de67b7bb02386586278898a5d1641e8eab0e6df98310bc23aaac5622f8e0fdfe6216dbda02ed03a78f8badfa174a256f0b59a7b9aa82fb53e0191872675f462ca2a35be956cc169eca1b31e6d7f3c59747c486ae4865ec824f5c8a967bef5cf31e91ba51745208ac65abb6d469fd79a80ed38d3fe3460a3f36db4ef7bcfdbce2346679bac21b7480c0a1bf4b63c3ac01bf0b1df7118fdedb3509b82e9126d06a92960c7de684c48c89b1cdd44be2e744e6dfdb6c49cfd4f6c88c68939ed7520ca7a4f523482a83501f4044d798d7b5e204c627f7f27277027fc7d2df4cab9c38f217c6336d793b5c0fd1b6edb11e925997529632b2044f9ec940896a1100398fe062f236dcfd5700c9eab68f4b33f72c1d199894ff11c91c138aeebc82719472212b0b960d33510edbffa634cd947eca146fc19730177e1b0d0b855f177c377002b464e98497c3a6b48518669edc73c40bd983d1fb81d90c0446efba568cbd0a23a3b0a9b9b72988f21f8f9d5558809a61fb71bdc7ed647f97c18066b62f8fc0f28d514f32fdfd2603337e5187b52fcdc529fdb31bb69ae6461fe9dcccd11a04fdb5d95276f8b90e6645672b8c5edbde94098a6a7d79f6c08d968e94f11df676b3d1ab4c0c23e792a9d9cc73f9d20f3d5cfeca4c53a402aeecd9d117c962af66a35569a458fbf3533c7530d356ab446a9e9e1fc134d148f1c26e63edbc4b9f854aa576e3e40d76d0ac8c16b209372606c75c1d71976e2449cca8b98f504561331866759343c4ec9b58a2e0a8a821fe6265bd25c601e74f076a3d44651bcc7ef0ab0cc83aeebecf03ef3e411fa9e8683df835db46fae903cb09808717756d535e610ce1334b5788baced2aa9f94f6edda0d5a906ce8cffd054907140f038488dce8eb7324e02bc41085f47fa0efd9e9c7039007b06228853697555dc43cce89ec912cd07853a7ebb5930842bc110df695897a83b9ed7f56ef82efd6cf8787d11df845abb60c587a0a74a29659af0f9ec5fd7ea6d1e120dc808a3b11998a6ce8d18cca475680b9f99fb947ecf2206b4cc8de10e390e3d970aa1bcb90baabda4bb7dd2f45e23758d4e5cf6ca92e0b8d8b1ea9d5cc8f7bf5cdbcb615c69b625c743157f919e1b691b66d25857d55c6f2c457ff31c42610024e48f7ae35b4445ffcce9b9c55cd8500f8a65a26bc11f94792d53cc95cfd268b6ccf4ef960bdd8714feff69d6c0e09332611ebc4f7eb08d87146e0e1095d45fdc3c03a8bd9e0852cd8361780df3bd984c94048f4b3397c41ea0d9a3d5bfee4d5cdcc38da03f4e0ff30017ccb21df7c925ca1f01a6085d9f06799b712c73a99aff533c87871436244e20274f0d65148d84ac78fbaa2689880648bc625dd98bae8d4a767cb94548faa6889be765f49e4b33e116669db5a3e6e8b5455daf1b1ef1ce687a567ffb0cf9c3e37a7e04f21d6df8120228c8dc342172673d496c5eeacc8a564ffb215e0b896dd7cdfb3086175a9ce7422b73c4c3a16d07ac10dacd76a588bbfd55e795cc136b0c9b4632d8167ae707e055e695d8cda03c9b99418d4ae591408d4a18c9d7fd862cec475211a135a01be3906876fb0fd5af10ccebc9eef56d8d06c4fe21b5b186dcc9e6d75941f391ca54c3428fb5ced20816911fa7eb3be44970aadfc6ed9533c6380b0bd77c1c80bd3ad6bd098d7360eeb2d0244fc721bd1cd3e404df07135492449e34b4dd18369c9db01f0c0c644709ee7143ea0d0ec2b03859b5958c92b3e8f2879b17e94f7b0e863bb0bfb80a4f02d15cc4a0426ab9aaa6f33a10037a166e4cae88292a2a16bbfb5eba4b1ccd4081637aef98f09c6bb52699da77f43246cf59fb4212270fd14c070183d8bd16e12dadb10bfb9e0ea077bf33def2e7240bb1215713f968677269af0c548d254bfbafb6ea62f0d527209879aa8eab65b72cbdada84106769bc2b9fd687592dbd656ae870e3aa01c4fb2c15ce432c7f553739a04d81563d81189e5f8fb2e10671dbad32603dc33fbee209a71ca12712060a6f02ecdd73516338f94a8aec72f528aefc69db390d0fa6c30cabf4476cf6d468e693471cfa7b9689b6f166a87162283bc2ef4049e9fa232abfa4e3ba509646ef3ab1daa45de4817771e4915b8ee6272ebb431e04dc97aa658d12795e8488d3e9d5ef16280054baae9484998a0de97be42ff5e2ee6760b3101f8513c87b4711f532bb980c9424a88ba951fdc870f4bcf8ab882d6b1cddb3c6c16d416ca74977adfba7cec68bdce19b2afd2c8b7a8050d8a86a6bff6f7742d62d4b90df8b187b507b2428ea5a05ec5983b6a4377d24ee00c12d1d3fd1c5e6dabda07085b92ca3a94bb134ec71083f436e4f0370eb5adb0d6030bf90d621f650fcfc6ee3940e76f4d7ff8141837c40e524f6b8bc578aae5b2025c1970f4417c565bffa9dbe266befca3f8c8de3da97bb527e327e444cde766b7cd1c6cf84c194727b92089a1d08e67d21c52624abaa3271261f3b3409f1ebac965e84a97c6a6acdbfc3b8ba5ac4657b26b9aec8480ef6fb8ebd77995a7f378e12d6652f8398a4b1fd0e22815825094ebed88c41682c557c38cbb806a6dcc66a62b7ecb442c2dec993efda919db13e626aa053126488ea5d849870ee87a124ec16919ffa228f759f44d7456db3df7150babf77cdd5bb322a12c236c36552ef6d9ef1d343bb45059d6062f77803364e841f748ee62429a96c63c77e27e86862697c374b33658a0b3e86f17543342c2297196decdde85adc9ef816bb7e59684a8a3ef04c4bc9c4f30d19312351af4799e4291a36178ad5382c304e835950c8f43a47bb7aef509c598397709615dd0f1105def7df45941f38beaccd4a2b6700ebe426d73bb08266ab3ca25e521255e934669b856cca8c9f7aa0de119476f4b6be226cf22311e7ba7482aa48cbd9a27c50a0ff415328ecec6a8d44c9d6ce9240d77f8a8ab595e91e22101fce87de3b2f022f7aca26e33d7c84ce6144a594c835c455f01f67bf1ef8404f836e0a829877d57c8e8e5c8be6c6560ec410655bff0c01304e1ebdffe1ef6bab6585b88932fd2712aaec688571505aa8ddcbba96af4a1aa8f5072ccaea49f0be46d43634a315938c7082df5285b10f472ec509e761667d3a757738c290be6be2a7a7f827515797444fd025856c5ee044279ad7a0bdf7a54f4fcd66596da359d2f89f72d3d6499ec4c952df90cdc07a2a68cba8550d643f5204983a01d9af36e9ca193accaa5236985d996207026c498462b5f096e832880d0466284e8d287fa18cb3b4643607eb397d02515aa2d8badc961844c8d6e92bbaefa5c5b1c0a5b094c0ed744d01e12922b83c31fe379c5a8d8331197d320ea70626d576be4cbd663e0724fee9b6547cee9f856884390db521aabee326b20966594a73cfe669b60cf7bff8b8cc9c0852e7839c796f1fc337338d003657bf60063ebb1f45aca056116c5be736685b4347b814eff92164537d3d9aa38782c2b8e310f9266c7398e410068b6f0c4f5cbbc7dab3de5c4d9f14e39a64276b2a546aa99a952798fdbc0695509efe8ed418c85fc9f106073638adf6e469fa35d0fcfbb6161fa17f9d7223fdd5372452a927ff7c004cf5ae8db98543b62c9a9bf914e2952de90274c553c2c60eb46edc3102d7b908380ba6c6aa11466a2c96e20544c5b34c91f90d17f9799a57c73ca00e21d7736c42d6845382f87b7ada6dcca7f51bbcfc9ac3cd07bbaec75ac02c22831d755786edd4bbb6cc915f82c68da043be3b0ea87411290712d8f9823fabf8524e47b1f29994d182ff826efc6184f15b08ca24faae5fa5b8a79e8d68a63a85de4cb53f39f6855a2a842226524bd254605d3f9c4dba1dc77ed2561f7894665f9981443bb75524ca300327123ee5f43df63401e12c27ca02dc4b960c2c7aadda16948b541565f18615e4d7beecb069128f15c7701067e2fc534be4f00ed97fa9d7fee104be898a225eb1da99163bbf768d8ae6d5850af6f8767bb9579a215a334018ebca2d304d236ce2961d25f855de93fbf69e1471849bb85389af58f2dc0af17b1210ec0ab91de30f90c7b676dabf14f15d16294c0a5a8b5bdc63c5ce63a56ebdea7565796c56339161352227ac9c92f3a0ea4deaf6c9720d38115b049f771a29db6443fcc570e1007dc2039b49fb909b6896fceee84d0ee01334a335ce0486776b69e21553027de54d1ac53231608020fa98a0c84d79b46d044a18e29dd2360f20f2da43a36f6ca8659c019d0140044cfd5bf3f794c4050c71ce369b8d749b59829b9718253c2fd24db2233c282e7f77d77d40fd6ca06366e23d86b0fb4038ff06c0a2f356ed59fb6c19b4801490642a2f69226a23b371d4dc2473d385e99168341e7875c6f75d7c472f300964fa54ec5bac129e586192fed5ff9873bbb5371d80e1921fe3debcdd756f205887e0c436e2b29c3a793f594d564b7f01eb578c9783c69a423c27faa76d560fcdfbd824826b1919af14a12748d374720eb335245e9349cb9d3e578962a570490a4f3508573b4c356ca93baf69e4271c0aa1c270eb55d7d07178e20b87a44a767de0abf23e09c85a03b5633428febff78615a404b631ed337f6a5bd39ee04112995e9154af2d1a0204b7bc681e89cb7ef1ad4e5257ce165f0791398400eff0a7fd1789a2133bbdc7d02eabbdb32bc63cedc725ec4870dfcdba7bef9f6639e5a119b9f98d12ac2005f688b5a77f3b3c9bcb01cf24f0c0a609f888f27837447c886fa4655815f4fd6708646ea7eb6e8b2629cbaeaee943f59e5246e6c0ec9631e86f7551a5a5bc824556304b51700c5e567ab348ecba616af5584440ebfeb5b22bb99b42f84a597b3b907ab016b5bb12c75e272260bcaf62996aff756bf61959dcae84cdc26c5224b427b2517a24e144d314b5dfad988479151ad718c36b37b565eec03696944d3b398c6583fe362571145eddb525b6972ad2d8798f84c6a74171daec21d74a911b564f02ec1561de04059d0d575b9f4dd46d34456e2270de7a6af357242707c43174e028ee4240a18a214fd34ac1cb2f123eaec9291f2243eccbd89f91e8446d3a2fd035ff175ae67fe1f7bde3fac29160e1b88344ed338e051efb341f9d98d281e1afb8b307093361e2152bd7690e3b5cd0e1e2361f2d035fdecba301d96dcaa534cf3f9e93e40ebc8c38bb898f16834296ab949127874a5985da6b0d1e4b8c1093cf19164063df0c5ad2db6eff63efdead85e8da98dac98e9e980a85cebabd50792003be8f113abdd8640a1c1c8ef76d8ff17d76d580176b9394fff07d23c4e16f525dfbf274986d7f7cd60578e0309ba88eb0fa702faa7d0f41b9f1ac2f494fe0d6a652fcf67e77da7dadbf971001d5a1ae31e9fb22093f6c3ec6fdde2590f8783d6b58112f538953f72faef9970197e5e05ea9d91f9a3f34ecb57975bf52878ff71b8fd177ce0e8669aa5802dda67effb5b5ce9c70f3d8e3cbf3f925450459b284454ea0784473ec55cc4f555c76e759aed5cca7beacb9036d10f14f6f0d0b6a75672920993d55f03bf3f963bbe96d7e3c1d38ad610b3c2e308af66685f2f9223b0fb3b4633f212c9cbfeab044747df7de1a76fff0b5fe9ec6c08d0d325ccf74558d52ee5eb0620bf89e97cdbeae9531155c2c21e6335d0f80500995fc80dadb558eab30f4379528c00e951e630e4fc46230aca5d9e9f3eb0dc800b33d25c7b1ab82011ecc4b36ed939e4714da0a1a2c55569d1e24603fabbf8716c78cb202a1d7e6192a3f51d3c4d3ac32539c3860d36f3c61dd5e2cbcdc361b9055539c08265b4947c5d5f1d86910d6fb5d21ffc043f0308f75ffb5e7f6d20421ef3a6a64b9b61a11841881c124cbacf693f3e6c518b8f19a7a81824d8633cf2ff7a99394d668e6fae78fa83a92747ca88a9a83cbac09ee075d7c185a04dbdb3ef119be1506f42e886293db813cabe4a5c37e3d608873945a9147fe99ed2ac6c38e033061b5d85f3e77dd72518dc26362b1279a0038767308a89d8b89b9b10052010e91077d95f781b9c5230800688753e61f20472693089615b565a5f50f165f0c945682c8bd96068ad364312efebf1dd4dd4681ed49c3876b58138b2985776ef32d074021afa9117d809c5973f579150fea936d071b42611bde0b85c1b4b1f6774119dc12fcbf46f47551ed8a0d53dde9bf8d54ee87f397a9bfb432482d4489eb6904b30715271ba1fa1b59ab86bddd04c4aad60e0055af8785a42d375fbd9dd21d6e7188999f13e8b76f4a82f245a6e3b2626d0014f72d57c861b319bc7bb6cdd6ad7411ea85a45b15b42c9ae059a008d14a865f4646757ce0638069d40d49311d48573d9859615b9d807c4dd1886ce6d9c9be6614d23c79762ff1a226e0d9ae69d5776623a8bf6cc75ac62636406200147671cef108c6dfe23da35d35a4fc8834cb71160cf233212bb976be9f1033d719c74cf47b78c902cd0301e580b806710690c0e7b4a4410b23131a716c8636ee6242bc611490a7948f1689e588989bdb77dbe335cb5d8d7d460e2dd93f010fb8865f2cbf4cfed717b0eec7d7cdd53139e0f3549ab17c6d0a2ce13d70771f02c7ee932a498501fbeedb023836b0ec5b0eda7d8170f79f64341052a5b1b54ed48f138541aa6d487a8c55e7577cd24c6decdcd116731e25077dc8d913277a0ee9908d8bef5c6640d792ca14a234c2840e3660a48ffb95abcb699ecae24c25dda65ec53dafd9f06997749000a4d8e211a08dfe5e3a84eea2246a0acebf8a4939bf5c4310ffadac413ec45031dbe3b173c9560e74b2a98986a701a54af78c74b1891b9f8c4b31ea6631e4732ec3efc128ed21396e84d416e7c7c2f6d616ad08d3981f33263f114b372567816dd95791bf7061e7d22d9ee7440b2067e6b976a5fe60c9966537c64f326dbff36598a5939627ba921629549b19f5ac80f34c73bcb077bd31dfc1cb56e68f7051ac9e64475b477dd0c0e4afa2d7fbb9ca924c1ebd88416cbdec699af2d21f0b24b9371e4d6d643e1c590c0a9f0ca1eabd3a34f238e4525a63119bafb37370f2d5021f3de64b027ded44ebffd0366cb1d1519378bf633f08f9e5d484194949c9fb1d934dd272a6afcc2b20f9e6d3d0a19f7ee42ca1734bfacaefa0c284d1edf2ff725fb87282d566215227735363523c7028a3889fa31d925e858cb5969bf1f06a96c12846e9f31395808c16a67385d50bd56e16fa5138723d5df507cf05ea64b4f153f7d016a44a810cbb3e4062d02dcb0b8052522c011cefbf86238ebe2ba27728a4b1aea74d7d8c7d3164c1efb589264196b527922bf4de409c8356135a4c29932fe0230a732f10488b149b48ca89b60e2dc9fb020d8c9187c4b1c5a3eac434c751fdedbe99c1a50524e84d2c7391f2c7920b3d1a1a6691db7b395dee519d313bb7855f4245f7b3299b3a47f9455455148ff38e38f6f567d24c847f6123599776ccf10813fc13d32c5a952c4db423556b541d3efd17cb7c02951dba9ad46befff0edb68d220b88d83ef836a8844918c32aad2efc4f15b56c3018f8009e956934b09af01db58483ad6c68f73378b216210e0cf112f182780ba0e34701cd6ac39c129d663be0765738b8c13e6d9dc556f7c926c4399f0a2724e17b70b6230df4c17fc0bfee8b272b0188cab25fdcca01cdc3c34d7a41f6ea405ba81a2786c5232b60c9a43f9ee02891454cfc101e083e2c63ab37dcbf8eebe67631ed5bdfdb78601b81bc3401e9766f5810c38849c8369a13a52868011a4f9e9ae0935a17971cea1ab0b0d89c8a3c2327dbb0d0465210a13b7bc825efe241f12f7bb12c14413751c31e2730570ba3361c786beffeeef5c941f3c11b722ee7659dcbf2dac021f01b8092ca461bb3d22f9ead9bed58e40d998ed6b852704569844c98fb6a027f70d2b8d64121ceccf1961444e8d33b7b7f998aeb58d3d270f0d6a4aa77e7c1a2dffdd2b033c95a9c2af4e803fca891fc74519dfc46a581f7a4e20ec80c56e7d3642538e94847a56ca3d081b37c7441af134a30cf2dd06422ac30f0bc62c15b5a27d1514929a2998384b2471c133f33dc850ba92eb35d62383048b34c222f057f518985977ee21d2bf622a20567124fcbf11c72df805365835ab3c041f4a9cd8a0ad63c9dee1018aa21a9fa3720f47dc48006f1aa3dba544950f87e627f369bc2793ede21223274492cceb77be7eea50e5a509059929a16d33a9f54796cde5770c74bd3ecc25318503f1a41976407aff2a682b6b226fc95694130ac4c62a9e9dc1b8584c67578ec07841401533e4783b88d25ca7fa2e7b8538d34eda50aa0394e9e735776e3abd8b520445d791db609a836c03686ad6467d845337e4a0cca300e789db5c6b5f3c4a43e32becfab5d2a09c9db6190f07a8a4191b3c9030f30b463d08b077c9359981a04678d1f8d43cc2570feb36413310ad69a3e359abbd8ae97cec6b36124e33c609a6a302f6e70d84251b294ccbd91cddf885b2ad5bacc07f09cd5233d119b98be29c311c7f4ed37a9947e6c8e96a3bca48393107eb114a5b75f40bdd80189957bd9fb96b1c7c1cfa262eba373476ebf6db26c505b4bb672334290ebf99db419e1d19929b490f48a74e380a14378fabf813d7050352ebc55ae6a4c146a8d240d363a253197f78f4f693ec5cfc6d050a2294d2779d3022d356e02fc9ff178e15ac33b271623a39905c79c4293c3f87752ad0a1833ff7012fcbc3028f65707f4e6d0fd283f203d1a96d7248056049877b5559bcbe77f1f7291e01c598063e1649ba5a8b016566c1be9e1ff06814f5759b56828c8fb1cb955dc22f016a5dfae3960896345028cd9a2e62d545c7a6ddd243930db98d99ee3c4c5cad1e8cd91187b1cc656716b8c2cba75024c0bab26d3e028f3dac2e7cd47c5341fe9566043c533b9a2aabbb91c0c687eaa0f9a7a41e1966cfa4dce8f718d63116a60e8c6bb5d691e6687ab550521b6e96bc4915188ae4dec8d5d4438515da344f35e2668c28923335914caa50e14ab9e8e937997c1e30d90f431ad49365d8fb5020a99ac1ff16be0c57a9f12018d4f865aa5d8b4b527de4076f3912ce8382e4ddf8cc8fb9c3c480df0e0b305a533ab87192239102c23c9e45cc876482f9488f2d20d3bbeff12c3a2236f8ce4c1afc68a11322113ee7fd564efdae605d31aa68d22b57b5b111de287a64fb4181ea8a9788cfb1a25c2e20ba8745168cb9b718f0718ab0f3c9a02afa5c1a7b30a84c75a37d0a8abae71f471993655850250414b46fc187fc7626c32e2bc9f0f21bab4e3b1255f5d16c45e121d7c0cc312ba34e3341623546630017227de6152c48a164bccd548b6c580c8f31d8da1ad64a1f05eb8adf51580cd69775d7112035dba969b72278d402370d91e82b23ac85ecd1dc4b90ab54a7c024d496abbddab5313dbda8a625383995b3a9a3233009e6906641e21768c7cc49555f13805e8d10e5d8e10fccfc5068d08936f17581ab6ee136d73d737a232bf4e2876ad965bfdf6605646b0b6085168408ba61869b09853bddfcbc3951ef4d5f76fe0b3b85fb873e3dc838d5f47ec93cbca451cadeccd02cc622ecdda284a6e56d13731b11c88edb0c7cf7d11a8607471f9570d6df4dc6108a0a5dd4ceabdf235f7840ecab9f8cc8dc0326815533375fac0e1d2f1f04dda383e37db3589d4c95a88cf344b5e8d78436fb534b471f0fd2dc6ed538109a9d326e7edafdb30185c8d2d1e8a7c35d1599a7b5fca332a1c73d3b48278656676b69841cd4187050f11988e7bf8a4634bd7598d3912dda54141b431a929e4313fea57f4e279803043514252ed660d13835b4a4c49f4f90be6ce98e6694e478f89d72ba9314010da3c8552227dbcfd6b024b33619959ce839482477acacfd7aadee5db08c47c7d2b801391a531e2bd934f11dd733127a536d2c58896d494d9aac57c31b8a217104a9965c78413c195b4f213102b1748c64c28ff25e2908598b7c704f362d3f711600fe1bb662b3fccf674bb933155a279ec1e98e405058b5bf76be5eaad6006c89468f137f47f45ac805c70302cf31f063e3df88ea83b8c69953987de42502a7c0f2efc01d61abc7b7b3299adc4f7a6b46b0c88eb723b710bb7b95397c8ab4d77f8e86ae2b3018a820e7fa0d3a26b1ecd9b14aec20c0c23898674afdce87956ff781fa2a2333e990962c9ec6a6e567197f5dbd3dc1db6892b29f104764ac32d5db75a0e09ffd7cf589e9be53acfc1865ba2eb60024e428a39c8b8bb2e9591bad9dc2115dfbfd716b6eb7af30a6eb34560caccbbfa47b710fa8d523aca71e9e5ba10fc1feb1a43556d71f07ea4f33496f093044e8caf1d02b79e46eb1288d5964a7a7494f6b92574c35784eece054c6151281d80822f7d47b8231c35d07f5cb5cf4310ddc844845a01c6bfab514c048eccaf9fb8a36edec945455d7fca01862a92925960296269f16ee5271df5726305a9511060b615486fa62b9033c9b45cdddb90d686e1bbdb2054dd46ad811c72af3035fadf84cbc32122ff3db89540e5b6f2640fb7b7f8e2cff9d5a4c1bff43872a984e49dd53958c702e6ec76f64e2a9e1e388c5c75c186e6a6f6c7c375a2bd375b65570270060e4a8f0a26d5b486317ba831d6dbe1bdd04ea36839196cce09e78f01da761fdbee900e93723d968f0437d879749ec495c7ed3852822d6c1f25688d7ff561a860fe82caa959166612abb8f638ee0be5f174acaddc28653d3d18a49d08302bd43c48080a7262c8eab62ce84a95cd8c0e77dd734930b52ba6d1ea8107c4143c6b18d40b151915bbeb2491ad1cb9978805d20c2b5673b1e67083a3e912da28fc359ba87134c4fa573003e2f1b3ccd76793a809ba1ad0a2fd63fa4cc30773f4d4fa6ece24af9c9a0583fc259b58f5129080a2da0ade6d12da47dfedf72eb6012a81384e0acec87c2baab76493535cd26d94678902e97288e4e4d98c6ccfccd66793a22e0dd97028336edba6c1ec2a9e6597a01e8985088d830291330c32dcfcf4f854781417be27839710f40d6b87ffe050f49f89f857a81f68aee9be9f0ff93778f53406d1d80085ed00555f179a7c46880c16e98b866120dfd9b76a5d8d579ada2d68cd4fe63b9f3851d19f398c9d00078f8a9186bd40ef2fbaa3f8b57d9d84e8a61e50d911613b3fab70b51984ea74952604683126cef220f8b851ef07545d68055d77b780f9c0cbb73b89ffabec0bfa798b58d3e69292793cfb5b5355038c23f52e2a305d8b96a41c390333292a2dfd2f2749b6281437042d76ff288c327be11c97518dcd9f259283720cfc252c4368f0e0212012dd4a87743026b8d76a916a22a3d417fabed45d94ef8aa4c77bb30166bfc95acc7431cbb831b6495c313685b0579b130c6f0dccf6b76771399ee79137cb29ac7f615698a28299244312d2fc6ebd8fcc2b3b38a852d289aca01d45df0b0d295d532d1fb6da2ab591b592cd9503dc96897da9bbb94f49da9c278137b58b8bb2b76f5ff6ec0731f4d7da3b901918bc99912d41ffc79623408bf35124d95e4faa00fc7f4203d1a03c40d994814f5466812d618b6c9ace68a5bf2f1574142d61fb8121166bc4e27e7712da25090160e134a542106bf9a021f08101568e2ea0c78b8207abd9f4dfd38c96077791f5e3359c41f75762aeb4550919919adcef5e8b444bd5c6f35e73a7631486117ff4866ba049a8e8ba7fb10cd8cf086cc51f10b50c23b4ef23c94403e4d47f7b3cc6f18a27047f4cdc35404e44eb8e51b1855d4bcd54ccafd1fcfaeef71d1b3e3133cb9a1bbba10a2e98082437b44ad308eaee576e24448d63c03e71843981e1c503bca463b639aa1a6fb2959973657933166ae0d7dc451242ddb893736edbec5ffd6eaee73d6db50784e5aa507107cb98d17aeff0c3f6c4d61b0f5cac054ee869eb86c38f9865b25d9d4a6a45f35652a0e3c68ba123802e8742ebd41745045c4a93afe8430e4a29838388dd60447d95b313f5bcd2420ad5be19f6049d7825d06abd8f27ebe844a2e3fe480b8aaba21d3a2ab08a6b6abd43e169d5f324e4d8cc3133ce876f6f7aa6e4d532fda96fee709bf19efe54e1c1ff5afa33a995d346d907bc1511b7e815bceed2edbaa6d98818402d681f75ef3d918f94b62fd98b977e541f0ccbab9e3c6d69bb224a6a31989d8fa9b5f6b6de5982eaff068cd655f24480255abf34d81840bd5978b6dcbf4885f22c2e8900f43f58d102ccc876787fb2f396a7f538ddd1bd53749805e3cabe5ad07d7be2397b149eae67b0eca03e6850153a9d73a0f68e6c91d4293f699c22a3916543094bb903d9e8f459ff3cedd2a64fd8e243556b77d6e040d46d557b9de99cac2e041cf73193e772700931cee73d073a1e6d3e84b682a98141958fb057b35b1ae6dd967cc95313a89c136929cf9ca626faf7428970f8525f17c2fe8277893576109ca092f1a2d4608623cb46b24b95651deb4bc1d0c145a2fff98c3b25f3928a5747217fd1079260d6443f6cb7d33bbf31504075fb64e812a04420228b7ada1c60e8038c930ab571337bade406bbfffbdb2f08ed1c69a577a3aaa27ecea576f5d6862d015c33a55b45d2fdf7c88b4be3c58f8d715959e398af34fb9819fdccdd5f2a8726570bcae6b55017ea25cc863d9778b649dabb093e6de811b89209459ca3dbf942a9198dda2bfde408440517d2f8f36bbcc817813184d0cd25615149f94ca16b9f7de554fe4ee24a984ebe686a910694134bf6b2399df41729af5d41bdff84c583f9f8881bc70632e16a7fe0cd0abc1a978ade041e605ad80aa4b693b0668def3745d992f93d72852cc1d1e7c20a1ae38dae5adfa7740cf61167e3a99a29c3d1038a10d860592c29c17b3be512392ad840deefab9e82125b86216cea43f02f542ef026c418c33e08e8bf46428541f3e1f74327d0c93172edb1f9dabd7362d75e029ea2bde822af09e9b57867e3c77de7f90589b6f02a3696d918b38cf127c5d8c5bd0c2a9a1f88130b865cbaf476d1d08f4b9dc6dd15663d48a582be86e801abc074ed75f461d010985a77a480f3f686013dec66579908ca44c9ccbbfa4d91bd3beccc05bf918fe7d658538e4ee9f4ef9705fdff255e262416ac1bea15fd7ff87e4c3142c256ce800ea977de27fed4f599c858fa100dc7350675f6b59ea1d343d0bda494c75994c387746bfed3da9d7f4eb186bde04ef4e45b4de6835fe093857b67ae639441e9988be2b8541a265774ffe50eb25dc8b4195f5b72bd1e63c9a8c571d617f3b7d5e7601be54ac48a0abef48f78404e240fbc58c822c9a4d17c93f704a518a96361984f467a4698adbf4475d54dce7d090db68fbb7e10b9d3b52e5847a2cf81ec9493a08cffb25f387eeecadf14c6b020b7ed4c5d0ffa24117b61326355a242fb77c09b14fdf5e1d24da43ad6558fb011144ad7d55cf0af32d614cb7f46fab33710078807fc77e624364e0ee2999145832cb5774ced5820dfce2f6dc4fe409e496951ae8c82a036d640d48f2a6634361e081775ea4b9b40bf6c9a5e5a04dac9d88a8456cc19d8988f731e02d747e04d8baf5619d6fd22d77bb73ee668e032fc8d798ac8ee4887d6f7d815b210c1fd5072295cab398b54adbab8014f161bae011040494c1b9815b6b7769fe6fe5ef3087a7f0f733a7e98892575ccdf8e3cb89f08e7ab2a7b8fea017756a5e5c9a52a3d4cb859b9025d583563f888e0f5cbb79d1d7497a935b76e7ede7e10f8981e0bb790dc21c4b8b0fb771d491b98765013c4f8f1f41272980af795f8c6679352fc3dedf44fdd8500e918fb6e6f50365433dc4165acad59b8243244ccb17ae4c866990b07ca4c91d389e0a4716a4f605f81ad9fd9a6c213a126f99200b879b008b291931d7c5903b44596c159f6df1af764febb54ca99c7db7612279ec2ab229b46ee2d3e4c4c04288404f92ffa468ca644983dde007a9eec7e45acadb9595f088c778073226cbbb9aff0f5fa5dcde0f38a44cc7f30acc05ea45cc93684cb92d7eaf635c3e60251ee2c235dc209bc3b669cc81040427854b9521d25400b49e191ca31f3378056ed4f6465d890e55bc788e3ecb3281e268283ef5269d3361b74bd93f263d6d9b0b865bf7d0e6bd9f1ace0c77a5a40adfe7446e3c13cf7ed8874e3adff2da8d758dab7a635a85bcdc812f7b138af8fd5474f89953347b518d9098c8020f8b563957ace7f534e68a926205307f05a1d7f4b3ed56f6f32149f575a3f741f6c0666b1c030b3a0a79b5554fe7e326803f2945067b1d83fa41d6a479084f1c332a2c6f2d567abe45cfbba9ad5009b695117fa9ff2a5386945d761f4d2e35fd3f2916da1e1fbcee71490be3fcd5fa9baec939b800839f8b6be4a6da549e5261853dc41050b72837078634a8d0d25c3257d6e5d3ad1f67eeeb77e74a11d11ae5afe8a2c687c563449307b47cabed95370acb02a17746333d9d77c5f3175ef5f609ba315105c2e4838e3e19b3f0704c0642062e95d19097f3ec74b179d7908a2f4d130e346d2832706399b3034112d72c9828c8255ea6ecbe72ff3832d53e3dddc4837805206dc397bdcb3ecf103dcd1677934dc470c1c7d9ab57d8a2928097ae1a9c3d37c21c1e55e7130b9bd069a4505ae64e17baa9bff2004f016d82300dfcb9cd9c40c4bba9679a31b7ee242ed366dc8237838ea71b741c2540e8369527662c8833b49ab50b192177b23a6de600c65707a89c8f4280fc498b159722586a56ed6c8207d6a0a9f7278588f5203782fb64e6ffd71f1486d732d10e1ed7d25d6b66db15beeaf71c8e16cbbac2dd8bf0728090dba7c09573b142a788d3c99b670033644d5e4a30b94a69bab618186bcfd824a59a93163dfe07036f245a6a2c1db1dd98b74a96e636c8baf30969434f7778eb85db2d72867c44ffa85f174c0cf7eccfd8e218437feb6564d5233b00bf9de12fc20beb77f784f791d397aef1a67c3d84a54c5bc2666dbd01f1a211b33499bd7bdaab31a9199e9b54816c65cd91111086ae5469a652244c1cd8f461dd36f14a5a4047b468652facc2325be062455d12502498e6619ba58f1ffb98b0013f4b3435935fc84852bea87556d4a3424bc69f7bd8883686db67e275ca1d80a1c5fdf7b8345201bb6ad21ac87f6532d01cd424640ab0fe7879f202d8c4e16851638ff13ca3dcd55425f080360c9bf3ae211c4da36ba192d8ffda5c938c82bb729087dd4d824ed7851c9055689ed78a3ef0e577b45bb8880ae5675c4081801e97b55c086520267cd0a74816ba96a64b0524e64f015b846290b34f8e5a3457f6237aa30f1e3df239c96e7e50b69496da9305951024fb83a6fd01e96f6b2578c6c838c35dc31c4092d1daa97fe71917ad5b4b588799bc44c9c229db7bddc57124d87853711e4b801c7c646010c684a727d03ec6f1da0e364f72b38c304ca4cf84e6d1c9e56a5c4f3b3b94289fdf77d3fe9488670b5071d6ac713772291233e26b75adad2741cefc73a1f269998c531c861a909f20b777a465502e23c2c903683d078453b33f04165a2207b98a67b6ef52d4eff5de59903e1e91f02799fb93af9e0efe7425ac9c2b533e3c8eeefc03cae9460ef180c15bf21ca925e42b145556f31e7484db3517ba0379195023b3da4dbdf07628d4892b7ef42847efd29dd8cce0987eec6042d730cf4516b3e5299ad64576adf2360b8f134971deb14d028e9fcb1f763131608b2e3b34cd009fc7d603141b2ee421e3177d612842ced6ecf73e271602f9eb188410bbca94fcb0091c32be806175248a251bffbe2c9f2cb79326890ead8cd9c55276e57916ded277ce138938fe3bba7b685d59a5e4b89aecf2f7758bce80aa1186cf2cc2cb4d539e7bf418975d9e603131d023621391ce07871f50fffe7bc8679198162a1abecfe79672f13df82392461202c19521b122a1d00ccfeda5b4a141f35026319da9a3ddbe0e879f5641dd149973d891a7ad35266e5e26d76ce1e13b3c85c15bbca48c0b4325603e109fbd472891ccfa1dcc720fa2721a4fac79f4bdcdb79c1b0025c4dad6660f9c8f939f386feb1330ecc565e82ce6fea8fcf3584437440ae1f0a40ad6e82eda2d5ba41f72affe4fc89cfe8d2a5e3b6895d6d4885909e9926316b5aa89e91e7472dd679a708929d743c6fe5450c6dddc78b2940176a5e6c6f0eac1405e5983530fbd54bcdc8c2c4e14d33b5805f74cced428b860279bea1d2dd55d58eeda1bfa5653d1e2f1294418ce4a3c04845016b42a91c800e66c52197c7ef04095bb36dee939859978c12fcbd2a486e68661aa210e9639702d97bd206f3010b3fdad72752ae6d66cbe143debc46a928a66bca599d29e833a879e99d67891351f81014d51ade45ac93b72fcdd0614f54ccfc1678339234bdc6ef166a01b3ad3efba5725f8f4aa793b9b7dfb242a3c05ca0c008e7184cce9b25e20b221d97583a1242f9adf61b1b8303885a765a3386a6eb60a78e947e3e378dfbceab035d9bad038fb2a79a7829e43bd2a8ff603a299c7483fb55f1500df8c6e269effb2effff9733a436c28a5a1e273fd2379cdf2fa405d20d2575ebc245973ee3d54d320b9896d7d740b57935999075df05564b222864f5e4e46a77e588c9b84544409047e1c82254aebc6c43be3d1cd750d5a5898f5a93887c161bff2824f796261d713b40f5bd22691f8b0af3f8ddc3026216ed41af5402d3c200978d70a4de622cfc701ee44f495826ff14a18760aa0245c6d5a62be259d3b54e351f756626e0b55a6de45e81d26219f0e931b34c9438c6dcc92696e29563392c6146fbe6758800b2baf82bfbc4713f850f094449898c2d815129b7ffbf6a94c2a46ac9cbd342552de0c41364276ce1e71093020192e6c1dcf61757dfded20f3985f3a8be48f6fbf366aede64043a473e7436b519b62ecb163f583e2afa82f2b98d496067dd8c3b2bd42053a562c5b9b1c159243cfe4c9356b55434891c62856942d4b96d99ec5dfdb3813bcc49f47f6881661810702861c5de7301a34a5a10722efc7b7985fea99289395e84c1afe08c3bc4593d17ab7d8b451e6c228e52dafcd92a6d32a7ab6612e1b08473d3de254578dbaf6cf8bb2ecf6fbb3fabf0322c2ecac4584109d9dea5404d7541866a97babf13e2451d41beb9e6b440e977e24e308934044db3715771307af897e3397b1498d4b96f8d267372316f38812b4a882b9ee039ffab5c1aa1389fd71df0341c7a8b86fd9350509622d856ee1e145322479232bffffb806f5be122d87ab743c115219176586fa96ef063cf2c663be363abeb905df4abc79dc7b16cc456404fb10de15dec67f11845055b44b801a7e394803464dd86c118ee0f32e5625b913e358954522767de846189481c5b98603cfdedf215055e475aa858ecf57c2fb4fa95b100d9ee013ed70ba3b0bfddd36fd4e61baf0b9e24447714cd6605d87ab16919ae6f580bdd1af88b7b1d950659db959731f2ae6f80c1567a93287b40e58e7509a8293944a279cf293a16069ed3ac66575844664218c5df22d5bac179175505acc6b4e262f864442d08247a6ce8eb2e70b82c9bdd9758fa53b9a53d4eb90e004b319abd2d89e23fde0ccd5939419fd7287832b509a3828f576770598673bf502e1163306cfafba8866f9c0bcd85d048c8c1de1c8ee44c867408a37ce8ec72dc9d8d95a5e9f6b7676b5816f8f05d866997bab9383404bdc7f3c4c60d3ecd2e8ce0cdba836a231f64d5f0c5886a71ca22df8c4a72c3a8de3b1cc262764ebdfc483efa5932b8293a880e5f30240268a35be65e1930027ab5c8362bfe1ee165e3f8013cfb1a9bb111b95dccdf3282eb1afcf659afdbba224d578b26236dbe6deb846fba27a3da63aae0095f5b1cb0a136ed55a493dcb348abd161dc58cbaf7c1cd4d19d65353fe60fe65b422b485433ff164b694d99b593d91c017525a07a3a7fd16e0c3d3890e348b19b9ad72038487d6022cd667c88abde22b3181254e8511b619030381496015b2b1192e80a2389b9b120fa65ecf339c2c9beeda84fc166f86d7d31dd3119e9523b044fe570dc9dbaf38f18d251c0e58dfb6c1d6efacd241fde7e36b5f7e14234c8befc56b92c2e880cb54e3612b556489f03d0edbbd330979adb6747cfb5b50abc85bfc34ddbe12ce6dbc518999b35fb9dcc2dabfb9d35688bdced1b1f5eeadbfea2c0b594b160ad67 +Output = 39dfa49f5a655416848dc323c0a3fe31 + +Len = 136544 +Msg = c747ee72b00680920ef1f2e16d32567e7d8900b76749832a61a3dc2a8126ec65ce872cc39d9e9c911bb2fcde26f63f2561533d2d8768a82effd04135b1a34bc9193f40cf9948c4ab14edd7a8b86d4e9a1bda84c28a1e4df19e3b2bf00fd7c520cdf7945e4d0be029212beb07cca06c24d4a63e3d19705abc646d032543ca40b015388f3861efd8536cf2a0c30a957f0db43dd467db68b7d77ced2f9af584a5c3178899247cfc94711acd5ea31956709be229ac08790d4c8a0c431918cc0edd9ffb721aeb463bfccb56418d70a2eb281787f230e89a67011d3df82766706fcf8cea7b7a5569b3f9a946d895f24c5a8ec9ca1ec7cee77fbfd73693c34e8aaf62d40c2d222a8a6c71521219def1c0ad89f8d437d883075c6c02209c5496c2d780be880f7832546f4e0fe38cd035a5ec03edccc5cdd0a306f2e4229b4207bfed109186a9e5356cc37628e1bad485a41de3f1db4e0d7b638637c56519f4692afcf9963084d2fa7d70d3e5332a50ab654a114a295c004ceee325ef109ed484aa092515ac27a54a2d7f4b8d0264ae6d8f7a7440dd760e0ded25a3a94cb0491fe81e7b55221ac8ed24f7c86a75f15494cab6f61d20259f840755983a41d9bb048b42e3a0bbe6a1ab0be031c2b558ace8c0057e2719ef1b7ae57aeeeb16a092f93c7e453c9e129a4c8a436edee9211c30166ff5a8f15feab82f9c8c04f48d37c7a3d98972f5261997482766063ad50e3677fc41e6cffa74038cc35acd02291036675b988ae5ab8855ee940382d0fbe9c089b54b2adc4a2226a4f8408d69fb860d310c58cc98284e4e23922c99d21b1597f4a1fbbb3fd65ae72042268e508c0216a8f5b2803625d34a902ac99468befa8361c83ae321268510a8aaf416e062ea17751d8eede62a7f11dd63c3bbbc6b004b7833eee8aac30c67e337926e4007a7d93f8cd55cd1c0ba6ab1460056f3aa8fb9e0e90013013455b57af1e8de9a03a224af4b6d151f6eec1fb4d969ad38030f9342f259ac4f01cac114e0dfad13dc42bf6d614060f7bd7df68f26e608b1ffe8a24557dffbbbb3d2555a0d5d25d51cee7420d635858134d5b8ea3560ae862582ae921f7c476ed1d437f47f4b8c084a100970b333cbe75b5c2d6c0cbde8e0fd457fd05217da90e33a30893e922bd3ef0f4707ff247c4eba7b1cbeb5e7fee7109adca8f998fa48716b08c153184a5f9253f68ac2efdee0da984e8838c438c2e5e78ec21be6f0be04cf8746c5c731d4bb44dea4047c3ac5421d8c719b3edd9a05955ec5c0eb041b23ce75bd9c862759f34ac6fbceb3d7257a709c21e83c3796f60d115af08e7d8757d099d1e13c7516c0cd7837277cff270bfb464127a58cdf42b67228b4b7a529273dbc289bd36434ad35ba0118bff8f37c2454795e63259c70f748d8134ec22a1b7da66ad2323adb3fea5501a8640bb255558c70975d4af6093a5a11163c1db1bbf81f408e413f32005411dedf53808c1ff5b8cfd97b431594e6717cc467fee79017ef52d8e8bd6277dbb540c5749fa8606c9e3d2da55720996355c025b8acf42140dd47b70ffa922ce80bd163afaf2fa321076399c3cf3fa118ce86411771fff6dcb3c7349e3feba8e1d936c0edfa486d7ebae828bdf39c336fa476216d93309854377c567dd4957230e81ae414c61c48ea8176df7b0b5cd7cf9e37cca05bb08e0e320b259501b7123b0023d80e5cd3bbcd22b2c8e65faa15a086724a9a11a760746b1fa9cc0e7a116ce8f9a3c104944f906646eae437ac764b22cea441fd3d97edac5eeb0b4205f62a6a454d1706878a9915da4d5eda8a81363bf4e17f6798bae0bb70f23be78149dc4cafdff7a9d5f751f715fa3d916dbfca988b093b96e351b761fec642431593ec57de604836a61b20d3a0f867a47db66f033c255dd344e5d966b0700a9eea5ac1537bd8f4f521806f73224fc65be1f08e42af3bcc66e3fdae922df779422729c3082d50e22e6fada49d440841fdc2f58d1e8b567297e9219ead1e637976f5855a3e9dcefa29b72a291aae2abfd4474bd65f797b36ae7ed9117e2abdf1817cf8eebc735d242d228064b207bd2a26997ccfcd20b400f2c9ae6fcefa0cc8ace309e74b56024884d836bf2cf8ca693cdf10e22f2908b8acf32720653558e83f5341adb3eec74e7400d4a0522857645e428d764f3b80472423cd8c0b84a93882f326a8bce4b31e46c3e271ea406f03d4ea7df2f3ff2293a282261c888f08a0bcec42412de0cea14248e999bde7172ee5fe67c0e41cf8856e38bc36a3fd7c0837651dded08921bdafb8718093c659cddaa6d447ea3b0a05cf6c174425770e5839873de96b88b35bd73a008e34843cc8fb0c4befcc045efc0f47bdacd7a4c5780b792cc8c7848d6400f7202b67cac80790555420541efe5074f038d87e2da951f56472e5ac26b5be731658bff5400672e1ac77424832f2eb478f102ee5b9c2c93e7095a6e216355378c030b2a78dfdf236373dbd71e740b3cf4ecb18d3f119c930c41f7530fb1509561d316c435ab66dd61e2dfa97e6f2925653f3fc0f7cb53a118998b95f7e5bca5754e256914e37cc0a8ad05f82d7106f22c60f4462049e022ae686d93746117dc18eccd65b128af81aa3ac55f960a0317cd0a857942edd0bc304733f80fc3e0addf27555674db7d84e904b45c62cacc2ac99459d6da4793b240be6520247eb58f3a9673c7ea8c453ed7a3595afe13b09fa486e7eb50e7a7c9422687a85d01f514bda2af168cbbb534188f0af7d2856eeae05ac623313e9b55d71801fd03ee2dc2cae44deed5da3bf90e306f9f8a804590ffa85b1b05ccdcec521b6a9ac3a3ce1e04d3f69d507857e23b2ffdde70a4d32664c83d3f4912eae155a9281e16c3649addea3fce770687a421e61c113f53961fb262e31c759143f94439d0d377bd7fadc89f6feec40549a354fb60f4512d1cf16ae0d31f15c88688c055eb6761028ddb478c2d7ad2152c6436c852e43091c62ff0ca83c3943911143c75de465d22fda7fd08eeeefb968e6b59d5786d5812203fd6987bb68b6382202b22300cd6af6da83bce3ad7db0a1e3d30cb37fc522ec9b5aed3314465c848411ee3770767f85c30a62487b1eaf02a3e5de2181da9581105cbf33b19bde7d1db8a2219e28bae27f5aea45c0995e950f333e29f4db82ea4c4c080ff82fe32bd63ff76af0abc317f4bb7d62e5b764610f0552544091902d3572ef5053ca149798ed1499d0c6412c0c77432850406a6e8ca24229cdc46854b5159d7d293319c8490c2136a543dc27add5631e6afc17c56c533731043bb266b37e391ee13399c6d2e248cad7e83d12c11c05cd9bb2146d996059f24bc0156c16f6ecbbe5923d9a1cb8afdcce7e0cf42f9553bb4c2c086ef911cff60b19396dc8c3dedd9c18ac4b0ed57ef4f1ccf0d6df887272e3309cd176adc2c5ad0fc771b02d360b6e8c8ee18f83de9aaa9c92bfb93c8d7aca87789df77e59e5976a6781b67e1dcec3b88d658908f75761b49ab7a5fbca5967f943da63cabde033f2c0a3c2fcbaad03624fdee3adf0b27cddafc78b0b5199244da590a4da153ee86f7be1bcf1363096537c5485baf13464df79f553b54bc1684d48c8a1f68a851da83f438ca3b8dfe553bdcf577724638182a24be541e05a9abfd18a4266443f3c66b5d01b5b6943562aba58402bafca3b8ecfd129f737eb246cebdc6f716af3ac7185904f6070e3529f1af62b20baeefbcaaa8e081f79fc6d1c3cc81060242ad591568b11fcf647427b85b2fd9c6e5927ffdb8a6800cd16dd966c550d7b9c6b1f8ed0ca4a7523f88c86a5939fe8f29229f50acd33e35cc0dca4248b4e0af73ef22f9c54e0141e7d9a881fa1f94c6f216774de604f104e82d20c0c73bc55602bb63d6231bd21105ed2499ee4f30f0d8f4b44ff4aa6cfcae42797cb143da4fdbbd381c96ac7e420249e90c865767bf3623b2c16931e68f86f430d0a77ba3ef675b1c07a06e8a477566527452b68d64a25a1f6cb44a12201aa8f3670a21c6c74e2b8c51d0d07ab3c7c8ed4be3eb369395de468c56316470d1d71daa69f49769f88515759880b3f981f8360dba73d7ce9946c4badfb641d435152c053762ba49ef1e23dd67edea9b3c6ab93436df0578251a1662a1175edcccd9bb1202da93d9aa5d5403df76731b4f96e349f98b2412b1deb83e5af30fed019b275b4ceaa8bba2a902836fb8e1ec440340d96316d840c7fb26885dc7d9a76be01d4b96018d4270a7dbd68933bba0a2465e4d13e08664eff5edeb3a14407e643ee96d4ecda6108cd02c67cc6564baf2c6982f7ca6b30192557ad17056d8e4930e382af79d87a86f9890d199dc71adae1a9afb1da7e29947a059d5810e177c70e4761f20ffa67c9187958e81e766fb4c98b32a778299be885d1761fca860a876482fb45b6286ff8b13a7091534c92656e78d580ab54cc3cce21ff133c458fb2bafc184e774adb3b4d341dbb442fca1458d95ee57ce705b9de5e01dd6d074d6f991c80b85948f3bc73cf260ef80860e90d14967df1ca8e873cf1452465b28de7874cfa29650affa0ab73553477c09c0d179345f115e5afcd704090912d2f97410ef45049a27847127e8870d2c93dc6a8febc33e8ed20b0b403b5adcccc67b3a6b67a48c2187b133872764093f76926e148f9270b8364d8637cb7627c4a41293e0647ab39cff9aa3a11a58d1c072b04e17fb1eb02de97710263ad7949b0a4403086c34059d0db5541e37d1f18046aa7d02a4b457406a3c1bb4101b8dd057a41a5be56d1c7220a5c756f67bd2df31058d5d231fe09046e11b49d1ae8dd51aa74c43769242ecd6d07fd3dc93103de045f18fecade6adfe2a815ff60d1f49c1c21b678620334daeb9d01d50c4143cc2e04c2367eac3f9fe6d007ef3b3ac8efb890a209ab3481506e68abc099b695c6768ffb03b5322f4d61cfb2f613ec01516609b173aa7fbe37ddae2185d757a0d3c447eaebd736e3ef3dee3d9b50b048cb0ed30b3dc9ae93971fb88bac2dee0dfb0075b8784c8103906175d0675a4c45649837d7ef6f87a7791ece12bd0541834612618c327ddb3635b5ac95e19a889f24ec7d3e1203d4a3e4c138de41c61aabbde2538fa0d00b24e821dab191762efe13f2ed672def5b2ee1f03d16c0d73f2d675993e94aaedb76b08d494fff57040c3a93ce7ac89ae5f1779326e2c0a278b04d5d68c1b88011d496e13f95b4a6d46ea0b56aa16b6c3994ae933b6bcb8e8fdc75d71c3f73ac76e5a00505ab37c964cf4d4107029fcd21be8ed6c4d968034a5be9b0f58d029cd252d8e1e3ba102a7cd54a20eec5eb25631720450954206973d2b1ce3cd0edb6edc2465e20eac82fe6289e386713d8dcc8486bc852037929d0ecd31b3833bd648edef1620662e64269715173b914ed5a18f97748e60efda92a4f597e33dbf90d7f4ee1d6db4bf2cacc586cb82eefb2081bd14dab0e9e345248a34ade73f3291886b91ea3e8cc742fd884f6ee0ccdaf4c9879f4db12dba58cf491af2541a1d5ef6cc8b1af750ef5d8559ef7ff9cd56d8f599974be3aecd8c0f4c08f3ae50d86f9f822a1e4ca39fd2f0b4d78d22630733a24d8d63ecdf9555411daf205a761c39ef46ff6292e74129bc13a7f4ff20549b3c2de2142152ca5b21384e16ecfc215462659b865ebe7be84410d175e477d7864fb545db158ab4f40c268625da45a03595886f08247bb8852516d45e76fc087b396e29375df9edb68e62e80ba6f51153f509ea6678b18f86eba0213d2b0f5fe0a5d2fca75f22ed191467e406d78cfd361d74ae0fcfe25973e43758807534466d016e40a99d982ba22abfeac5e07fbc625b432a829ea0bec2bb66eac6f9fd6456d8aa85bc9dbc41e85dd59cb7664fd75f4b1fd05d695f1809eda9488f0ded326498124c6ed41198321a435a59bd7fe6837945300eb4800d9fd7690237356638eccc30052ed54ab735ec83b43b6a726285426de9f504b6081b1530986e151ac075e17e308b159a275a41012acb01d9c3cb52f43eceee638002339a8b72015d918674675ee229b26125b4562e86f81892cc0772defab61b0dcbaef15c01aea104a4f195f0f26615dd0eb2fd500dd1b1481dfc542af7003f29fdd3ff7a8b51a79237e554970a6f2723abd9611fbe13266c279e22a34261623d0f6eff778dbec3e2d5cc5da1b8b978bd53742bee1620fa677f5978e86b3e06ef86cc8bc3773a784f05230bb17bb98d12bc2fb85bb4afbfd29bdaa16ae01aaf99ea792efed659476f3c65d946c203d6bc3c7880e90803c935f38e369b3f6bbec4a0f1537a399fb39be21150c23a1ce8125acb20068ec1a8fa1ce0c309d7c5d70850c183d60f624f8d9cc20cb4225923ddadb41034b76df1977e7eb12747ad6add50665a82c6656d9cd2d467ad496d2c569bafdc14206d15b6aeb4ab841d76fcac565c2210fd1da0420ae4fc1dedbd6415ab3addf54843a7a0142efc90c7d70efda91f850121df9a25db602476adce6da362c1b088ad860a1c555a2eedb5321469ef2cfdc3c33f8db09ac28b57f814ab7838f0de2eaea8cf63c8a2dcfb841c9f498f00e6e96fb22d6aefa89b226b24902cc434c157fa205a1f04a5713aa2fb22450f47fad265dbebcd307ede766572ce096b0a04a4ee915cb69fee763ba0522fc4f64e842f64213b4013b1cfb47583c7b6b3ed02961a5029c2d0ca666eeab62a41caa12d40e906ae7bffedd97d19dbefbd255a659bfc0153bc6de5cc5500aba453f2cc50c74310b7d95b8fa630d0efd88545de883702096d1bcdad027e80871074154c892320b3e9d0bd139060294404878be5f4e7dafcd85956acc35bc8ed111a989e50d50084b6faab16329b815ce66c6e0d363ed530180dbf51697d785208cff32e225d40f791cf9c14073387af008c62c0c69c8f67ce915e377f43ed3a79fccb98883c80712cc8167978d89acee570108d109167f84e9cc9bb7f4fb62ae7396859fcf33da5ca6c80c311eb392107afeddebebe0d662a887879e4014187d2fe8feefb01e6fa0d35819d7cfbf139e99451423b62ee35e4dce0ef48094df5bfc478c3fcf90ae257bb9f44f48b419dfde5f133f12068ebf012998805b809e92023d9759d4917f35c4710761309a8b1c6fd34407a972bfcfeb218d0b7ae23d68685187036629ca16d90ab9d7307a509d74290e4520795ed4343d565d85c1a326570cc4062d617711e00c7178ef5b52aa16ead8bf222353170306593e2326ba13f6f4b62ad3406e6e02fd990b1645788b7c9d0c3e557986e08103ff76fc1869796e93c636fdcf9875666798594c40aa87d0ca118a6182df77d5bcb0ccb99f989ee6715af45515db6e35d1d62a3a55d0e737f94f6bef47472329b9d50a02c32fcb8714dc2a831a20a096c4bb45878bd3f4dbb32ea9a7cea42da283d4f67e8d17487906b2a12fe65054b2c7af74dceb99f3e47f160b3021e0dd6aa11759d604365de3cf4621008251d2b0621a7de17b0b2f7ae66f5b3348e17ba99b04fab2317552edf5fe729ef50d62b91d64293d4511efc36fa15f5749914f86fa05a3b81abc6ec102445bb2476a4cf581f5409951947aeaa214e0452ed6a12a44811a93c9f4fb847e7fa5e48052d78b15358a9ca57a19150730a5a4ff9ab8bd04e028e946033f61ef1618dba9ac4ca4618dcfef4bad146d275e781dc2c4dd66bf89956397d3837edf737c40ca60f367ee63d6394b13b31989041f58813c584dffe629a8c64b0e03d5fd99bae95514fd43206823ab963e41b58c63fc43ea719b4b5eac61db522a195a1c37f21075f78de92d4d55751dfc0f345c0cb111b670782c59e535dcd21de8f5381d8f46a7e44066f04d76b18f36a98ddee221f2889c0b293f9dcdd3b230972eb9143a94d3223e44d32f2e65d634374878adf2ee483e7dca799cd0c7daab4e8d08e49b00e1faae0a3dbd279bd93ee2ee9434cc0dde9ef5976daae7c131d6379b8b555995bab4b84196bd065a809cd1069940585832049c19848fbac8a1f877dfab2e1d584498867045f876abb3952e18ef993dd62cb89ad72612f0e4125b39e1d0398e5368ed3d1fb4361d945a721eacfe07248fb5011659bcfd311d6a45a32a633c558d0ffd08d74a3fa3205d7ccb4b2d52b58cb3293828ac16277c92ffdd41ca00190e1f0e0d1e6fdab154a4f85d7ce64197d410762acb6026780872d110ae6f4d83df8269747f8bd1ef3a1831fcc8919d736fb23111ca3ef4cccaf20264fab8eb3b071e56667f06ea04d99f6eceb6942ef06683a118aeb04accc8fbdc00ac0fa1e88edd1c0ba849ee993922f6fece58bcb7c0691064fe1dee1f0c73a50d4cdb38327da5058a81baa455638a12b298450f6f854ec42042eda96e9e44a6b2638479c3db60570b92c2d6e15ebd0a139dc4eec1be190672038743618454271878722940b0f55bb864ca4ae432a52648643b235572b21e82c755849fc88d7066130c1354044c59b77e38c907e829ae79751374d2a901547919be34d172d5c8c5bcbcfea5e04d993068751bf28730e9d059b5aae16bedf07f7e2a1a9e8816795dfceab1db4be0624cabea084c17a4207297878d29c16039bb8001ffaf1437c9555afcf59f4eedfe32cefe58bda16c9b8ab7f3e453b2427856a6acabab1d2001d65f5b9299f05cb30c5918d2ef2b70a23e426079064779f6787891e63bacb96807916f50703915caffd5a24087c0987db6bf3612eb87eef8477f197807c8ea48117ba0f7cc31008a35c903683065cc731bb6dc78a97a89c9ee42ac28b6799be71ba2574e57e1063dd6bda3129024f4cd95afbc73e92833b0934ab3bff1c7b48f4e90fa1eb6500d290939ea084f04f8d44b333dca539ad2f45f1d94065fbb1d86d2ccf32f9486fe98f7c64011160ec0cd66c9c7478ed74fde7945b9c2a95cbe14cedea849978cc2d0c8eb0df48d4834030dfac2b043e793b6094a88be76b37f836a4f833467693f1aa331b97a5bbc3dbd694d96ce19d385c439b26bc16fc64919d0a5eab7ad255fbdb01fac6b2872c142a24aac69b9a20c4f2f07c9923c9f0220256b479c11c90903193d4e8f9e70a9dbdf796a49ca5c12a113d00afa844694de942601a93a5c2532031308ad63c0ded048633935f50a7e000e9695c1efc1e59c426080a7d1e69a93982a408f1f6a4769078f82f6e2b238b548e0d4af271adfa15aa02c5d7d70526e00095ffb7b74cbee4185ab54385f2707e8362e8bd1596937026f6d95e700340b6338ceba1ee854a621ce1e17a016354016200b1f98846aa46254ab15b7a128b1e840f494b2cdc9daccf14107c1e149a7fc27d33121a5cc31a4d74ea6945816a9b7a83850dc2c11d26d767eec44c74b83bfd2ef8a17c37626ed80be10262fe63cf9f804b8460c16d62ae63c8dd0d1241d8aaac5f220e750cb68d8631b162d80afd6b9bf929875bf2e2bc8e2b30e05babd8336be31e41842673a66a68f0c5acd4d7572d0a77970f42199a4da26a56df6aad2fe420e0d5e34448eb2ed33afbfb35dffaba1bf92039df89c038bae3e11c02ea08aba5240c10ea88a45a1d0a8631b269bec99a28b39a3fc5b6b5d1381f7018f15638cc5274ab8dc56a62b2e9e4feef172be20170b17ec72ff67b81c15299f165810222f6a001a281b5df1153a891206aca89ee7baa761a5af7c0493a3af840b9219e358b1ec1dd301f35d4d241b71ad70337bda42f0eadc9434a93ed28f96b6ea073608a314a7272fefd69d030cf22ee6e520b848fa705ed6160fe54bd3bf5e89608506e882a16aced9c3cf80657cd03749f34977ced9749caa9f52b683e64d96af371b293ef4e5053a8ea9422df9dd8be45d5574730f660e79bf4cbaa5f3c93a79b40f0e4e86e0fd999ef4f26c509b0940c7a3eaf1f87c560ad89aff43cd1b9d4863aa3ebc41a3dd7e5b77372b6953dae497fc7f517efe99e553052e645e8be6a3aeb362900c75ce712dfcba712c4c25583728db9a883302939655ef118d603e13fcf421d0cea0f8fb7c49224681d013250defa7d4fd64b69b0b52e95142e4cc1fb6332486716a82a3b02818b25025ccd283198b07c7d9e08519c3c52c655db94f423912b9dc1c95f2315e44be819477e7ff6d2e3ccddaa6da27722aaadf142c2b09ce9472f7fd586f68b64d71fc653decebb4397bf7af30219f25c1d496514e3c73b952b8aa57f4a2bbf7dcd4a9e0456aaeb653ca2d9fa7e2e8a532b1735c4609e9c4f393dd70901393e898ed704db8e9b03b253357f333a66aba24495e7c3d1ad1b5200b7892554b59532ac63af3bdef590b57bd5df4fbf38d2b3fa540fa5bf89455802963036bd173fe3967ed1b7d0611ed907027e72854b9c22cccff1ec72a9b6cbcf4870bf92d4bb16ed6730d1fb540ab78559e17e14e564593c68530aa384dc27b75caf427e84736711db211cc854e0bb873a8cb4f6bcc7d1b9cb8782bab111e66b215041f89d154e944946facfca3d6f8d32e4a9a3283326d55823e730a514a24b55185069850d27e51006ee6a4a7d3df7b19dde92be42c31f9cac9a9dd740c5e8664bd079d2c79d94edd57a305c3cc16754fcc64df55320e917862f6ade22dbc2b38f54721cc11a24215720aa55d8745c9ba5f35d53f0eac24735182000275e5aeb374f1ac9a6280368f07440edfce137d41de81950b86b4baa5de74613eab8216bf842bc4fd331c31335e78c8af67289bcb9073a81f63ce5bf551f555fd993a6c436b1df35d4d1e3be9bfcf59371a2d2a42be3095e56ca1104bf12c66a805b6b72672f1c023792d5c9971714bddb1ca338db0e3e4c36bd6e08f07421ba5b89eff52e1ccb3b57df19d2bbd85260bf2a6bd94aeb21e232614d4a9db5efc5d7a994dae00d8557c21140587eb337028a76ad03f00c5ca6c6704f382b5a99238124fa822163d2de02f3b9d9643a5b39c96bd7476ed457006f44e4500dd4b649f4a6918966d23c44a6d106c3e0c0076ce8848b221be5a99599599d20c9a6bfbf8e88fa5f24bb1a020a53b7a68906f422844b39128bc2bcccd148da38f3631ddacb568581ef90f4bcb9d64cffd15189e1194a51a732ce191ca38d3bf6ff7c69424799d3803bf664db41e3274e3e42312f13ec654ea59a370b8c8132e962652a8c7fcd54d87e4de2c42ef4d700445b926310bbf47768a9af2ff8df4f9ea0afc9ffc05b9a093b29e72dcda5ecb467f026337c338fbfd06ee9e074f1f2755eded032d5ef138106fcfa6eca50d8d93dc25506c2ed8796816c6fc38d53cc0be154d5bc1cd241ee4649851d91901bfd2a24a76381348c8a0024a95fbe9f2cd0ccb4330201bfa58f9d922fa0bfee369eb1a9b5b043c30f08c12a4f0b651e9542957f709b2101df035169429ea1c5a91c58c3d89366f36fa138ef996d3d6ca60fc01926ede7332ed82621767de3a0f414a405b88387505ed1fbd740db8403df66d113ce70f0ee458c707d33a4f22a980617d1bde701643d197e83adfcf57e92064ce1cfdaaa7d838ec4bef2da59ad157f28da515481999ae625776937ee377e5c9825b371807b995d87794c5486b2fcce6b622b52648ae8d6a524eb22fab8e4e8473201ec1f62d7875d2e98ca05d6aea2341ba4474692b759621eac34978d7617ee994380d3bdce8aaa6170916372bb69276944c9945b76fce0b734e3412fa289d2edf1065a070ed5f3945c410c3193a1b9cd954fda4fb82fa5911dc57419eabca89282b2feb8e8f7cd59c46f7c7dd7da7fcb0e5084e9eb60354ebf41ccd6bf1ee419713d4e5e0d7eac04416340c1e871cdf4286220a4913cf412a1eea7d0b02ef9f564fbd560ecc8f4264bc2d5a8561648bb7bfb3a1a4a2476bf5e22a1a23e6b7eb8a675106c07654a524c14c78ba126549361823dc566a531975c9426c5ea52c6d5ee3f7bc9dde212fadacf83064a20960e71ada810873dc92d25a9b3b6148386cf84c19424d0bdf2a270598482b1a361af34c415861c6c81f331e9d4fd7d7c232802a1e5e790574dcba559689b981d6bd8236be2b0a6a0108c09bb0706658b1051f036ed9c9d5ca8e8c2259bbb3dfd092bb61bac0aa676d95a35b3d65b6d5ef2efc61717ae482c887c8f749a6c43c0ce1c7549ee0eac6f60e01e6aaf7705563f441cb8f0b731455119459ce1192a172f2ce97d053728e83ba05c261ee3ce1f5a113ca30521d945b7218d250c6c515ea0cf7b3bae1e9c7fbe2d479c812c1808d7c9ce5bc198b09c1f37ee9378b06a15c786a2fc252f87a48ce9993492aa83a13cc04a49b26647b6fdceb27eb29fd4cb07f5093526d46ae51c67a964b0098176fda738f354151f34c758912d468511ece67d168d1fb7c6bfe129f0c365a3a208aee102ff234fa77420580345b0faa1f9e781435a7c441b937f9317c7101365c4a4f030b3bc6061238d6f815e6e8b25809fc42823b903ea1e4c4586f66bd33d4984775ab76be1ec9172e183bdfb90ed0f53982d8f7271a2aedbc3b6c7c55d98e5d1c8e980de5e9a6c5560830ac4b698f4c78fdbd42517e5d3a2603fb1b93d2947f177559660310b02b96f17cb766699ef401dabc84d51240b44dd7a4ab3dc3eee8805376ebe03aef3135fba566d1b604d71c425a267c7dde4178e0f0941c57a27e9f4f780243106cc07d4d352356f9c9db115d218e0e683ccaee46663ff834ba2bbb92e615f5392ebeb410b455bbdaf6ea27529825537a6438f8308f1299023dd51e43488bbf5e3d15236ba863c90092eba84a4753125c5d71dec6f176c66a34660e8b27cc6727a2ab12879bb74814a5c5da6cb78115b52f5fe83216d44913a6c5d4920940b53b646ac98b14b800bd386206e16f15222ee3e95e998692e8a79bdab87f794f73438b388fa09cceb9a451a973d0f779026f7ff68726c71a6ccb1c8d017afc6167e620ffaeeeba613a71fb826b62d8137d1f0e70acfe63d29c292fc6f9ad1cde5acd2aa66c9cf6d94ccb3bd534bf994d5ae6953e154ce2244269df6de63e602e15a0b11512d3d89fb75a1b8a170ec28e636e1e480a36ca772433316a115550b95d06be34e7bae91943c7a28a5c78dc3d5e5cb076d3e4a5320c2d2fa5c21b75e7fda757eb357ab0b0b7bad8bb4b246ec4145b54b0b77ffabfc002e00741b75621bb2c8722423ab5ccdddac6062c3a008a4d1111deff2f528508584c76d5527ccd613d53c1582381d67bd0735346e41af7d026efe8f41b34ecaed87cdbc7146d55b581c5b0bd5d9b345a43e88be24845736743f6b6db6c285c7829771f5f24b31f80a1e4d7b90f8b5042dc2b94488e0866d8102f30ff49b63d30f34528e5abd6958944b81e9661da91fb434658c0dfec38ec34a13fa7db67f79ce0efe0a1d05c1d9a134a6e9a7c0f5e4c1f40be926378516b5854c91a4ac2f285967c2edbbccf2179b6a1ad0f88b221fe1922ad0541341a1d2351b7a1bd5097b2bdf4f9da96b608efd4c5c53bac4c41d9d8f30f62a2a8f9ca3e9ff2845c974cedfe602be7879a3ac415bf9c67116426a505bbcbf1ad5d57395046610b50217afc01c7ab4ab7021fc023961cdadf82382a4783c9fa8bda9d33024feb7ec1768aa86d31614b4d761faba3522cde3d2edf304752f1c563a73180fcc17a24d61ce2b9eaa63532727ea24c40fcb3b953f1837eac302b9a5e4d7de8e5a4f546b89decf7222f0f464da3106ca09b9bb44a528cdd1f255fc0a453e7336501432c8f810f2abad3d7d0076cd1d36b37cb174ada6215483a75805c41d92826df4e1e824eb2195d9b7518c7624d494ad92b2a7a0f6deece765522aea0ba90cd46fd64b98e3f8db18dd166b60bec96e487a335037b15305ae2e7eec3f6f233053e38455dc81d4e5eb4d402fcf21781e34b1b7f0da6c3a29384142bc3cee9d974d0e70a9685b4240d156433c09c34d4ec2d7b51bf17dd0d2266c223d6ad064ac203f3fc8b4c6cd766ba6a432a93ad55aa34abf34156cd39ae90da1c221db34d98e0426065a5ad2e10aacf78635ee8cdc26893adbcebf9eee008455fd2a558ac9e6dbd814b18dff2b4ed791b93854f03dfd11cc7585fcbf460d8e9340cce5b2d7bb44ca6662e6aebf98c5273e19048c1a7782c883c38a912d508b0e2f81e2599d7bdd816de6eb6e1888e41ca76083dcdc264ac399101fd12e79e81b3c01f1eb75c8e471ada612b9c08fb2d667a7595f0d99d85227e3f2eba3fa443ed8959ae51b03183fa828d32e322db0090145db8f2942c9d8b2c7ca4d38521e0d97e533e2d7bae72feff7c31807e37a1906c4a0e9b9a18debcc23fc724611e3fbfc4953415660bfe6e79b69239c316f8aeabc3ffb394692ffc6911ff7779a248e786a7face18520e9117c1bbd79981ed32f951f301292877954979b49278b5e398ea12f6233a8b89b002271622aa7f68637d7a524e025ca0cd89ff4e3e045ff81c185d92db74bc5913627009e19b18518b60c98462c60d91ed522b3543c5a96fb9391035bd6def65025e22fede175490f0c9c3f1051e43323ccb86d169659a30b875b34693ce2b95c51ec75cdfc43c0ddae1f201ffb2076b041d978b78893b2461f3cf2f233e79d1a3cbe68bad4ad7b193d0dd1d172960248b6fe6c937db9231fbdceb573666e001e68d08f310522e6262bd0cab172c57451beafcf46f03aa40d057902693ee680dd48bb4fccf8447098ed00815c562f3b6fab56075e8a9883a268d4504047d19ddb6ee720eb4872c8f603358c1e9743c5f70fa9ab26a74360546a692594fbbfc5ad3ddca918504e5da200b84194d093a29c7de3315bd0cbb8b78c9ff8d3d52186a758145ed0ba278d416831583b8caf6fa458bb205a81a1fb2031e150896e775f6e2026a8a0e0aef6489c09269f15e77bc34299feaf5466a6431ce5b3322251ce76387c2d056e35171c3ed8332c16fc555dadf832b6a37a58848015a74a8b114234038d428aad6a7e50a307046f0a2e9af80d6e532d096d80691de9834f2366594c13e28f8d38bf8a7a7b1e20d46a1eab06d364d66ee0a09c6548e9fdcc65a18212ec146a99aa94c9fe29961ef8b14d042eb26432f8e3c42afd939f7d2edc534b1cee8b7a4c5d9acb50210735486a2a44c40ce50f576d38aab670526802f20c12eeadc02501cc21ed1513da2a400f46db5b557fb206f78eaa2471db64c5313c87fcac5af14690daddb15497547c1b2336792e9cd1841d3687ac2a72fa023454f8cb6ca465a72615ebb975c74a59183fe491fab4d46b48b0f1c1ecc17e3655f613df613508900673b591f9c2826380fd743a4c603109049e470a3b3f87de208037ad1c95508dbc64b9df43418337dffc53d686277df9cb4f15e9b8559d662e93f2b9114db41cb279670604acd3229fbd11fb4a5321ca1753dcf4c69c356adaa1c387c1b6c9b983225b8a907cd8d04aa02d1d0babb2d6733d0a9ff88bd658af2a389db078f7e098eff5f1892a2aad6b5603c04c79a7cb697b3d6fd09cf6bc269da06f5ffcd52e8e42c4bf514d3f367c3f34698f5586f5649ed3c8b1581d01db8cb98142cac80fbdbb56688b4e9ce7f7dc4d8d36b7c700ef086c5f4d45cfc63877e257eb6b66e0b1ca196189b6ba5e58bdadbfe528ee6a83487587e6de7575c7df9967cc47385df4ef8c5eff0e1df62943d3561d11639eabff7dc7309aa4ad04346d4567e6a2d411ac3da53dcd4e4be40f6d044119dd09d36de3b19cf2e3b86816dc6540d23cff72809bd8d87cb1cc1390c92ef39aa158944445cb9e8fa9347de7453be9926d1ca1fd256e5184eef32248765a972c66f758f32279a7b97bbdb026565db49fc9d82a8268da2b7e5c5dbac7030bce478462abfaf8406b18b190a9647e3f4462c99e76a0e4a0e8e19068277cedb6eb64803717dc45b43b260179c4223b451b83e2fc00e91756fc2711af02da94d0811be0c107178949aa59d1c58ad00c23ac6bac6d73bb8f60e7e7669ed770970d11c63cacf42d31753b2cb8f0780e6f4f79829c5f29a8ab533e8ae5c41fdf72b1300bea57898ddccb60371da7162de32cf571396dad20f9a2628a359b3667a6614e45806d11d9f9c0bbd17645efcee640c2bfea0578c4f8e2e67ddc90c5a9b091ef1b753a477206d990b469596f62172f43b744b3170537794cde315148361fd774e65f6b74e6829a91384d5e0f77c45d0b0fcff2f25223fa1813ca39386d4286725ea55d24b80b683fd5c8c06a709c3e7b11f241a54c4cc9aac73dd510efc73389bccdabf156ffe6ff25322ceafcfd583676322baa44208ca750d2a15c1e2c630da95eb45553de7b51af3ff01b7d664eafa5362d7bea3d9780594f1a9478d0a990accf22bb3f35b9c9cc38c676627566591744a3949ef29eb83909cd3490525b952fa563ad698416da04b2fc765c9953c545043a7ee2edf6c1887925c6f5301d9dba67f3a67348071501451ea5bc407b76c6eb6eb5569e343ec033b0c607e8540cd58d5f30dd002edd2a55b99f121961e015609cb25a81db8268bffaac58e98384f99c02c7172ae2c4e86b39acfe729b83a91a61007f17513efa84600458c240789efa8af3b256c75ed40c3b59c1ea7ce40a6f382a24ed39b6ee078d4897f10f6a4e5f54212ee240fd65af2b401cefaa83b1d5ae89fc61f99ccbefdef386f444dc8000fae9ed7be43335ca75da500098e527f410ba561415530c73d19fb64a7541cca5eba88e7235929cf4c7a31bcbcc8ad5212b45d282117c385a1197a672353c9ca4b3078263999e23a48d14c08fb9d752134a96e22a727ac7f8fb95c7f9f91f6883cd6159de94a8625032b9feeae57d2710fb38258bccc143d70bf4ab50457cc8d9a7608531cb63c18e54fd175bd3cebcc0b993ed046502348adf4eb1038ed7360ced6f850b8232d9c56078ba51095e9b990254c942ef90027ac20e898249b12893ebf8e9da6da8138be19758790a9f3c1061d54ac5d10d462d70be855b0a9d29154f87241cf235f75854e362223c2326ad54afd1ebadcc682957c9450c55edaff774b4b441a45efda136e777fb226ce3f6574f0f42ca7ff0e4d3d94904903535b0e7ec2af6e8a5befd041dfa4261eeec51f62d5369db7a78e69148f1d26e0642e835a7e89b538c83c258e179b65f2ba8669de53eaf456e58a50ca2d00423d36fe3da728dad698604a781fc66c59ea5b09acae121a19cae18b6a2717408762f056a42d67abb9f24ba032ba951de84ef9d6519bbbcdf35bc4181ff2f5e5db96bbbb20b3e403468eb1c6bc282cb8fc65bb76be6df60c6c53b6bad7f56ef82823bfb7190346ea65b3b9457c3132447c78ca705dec6ade6bf8def8faf62b7f554f23d1f7e33668feab8ba4dc9c50ca50cf4e4c95e0c04bd994655af0bed4854a631092221c5c86f9bc506b43332d5160b26e93cd109f5b9c6d72682115100fefa6ad8003765f4b3e2f302319bc72e1946952cc6f45b0179dcb2eabf6c287272c62232500b8e8c0b54c5253c500c682d43b237fe2479b86c4f8c1aad58fe2d4e9dd990982ac9eeb475adf83b1c7d23d087209348ede07b0fa3b52ed2742c91f0e6138b2f2182ad6daa3fe3b44d93d1918542b74dbd29c9e25db09fd55a4e30e833427aab6c53389576dd804e6fdb01fec2ab2c631ea03572e210f61c57dd9ac309e8f79387b620aa7019565fffdd3566c3bc5b3f8efe4e3fe558ca1e19552fefde998a5de015f63b0a75ce7f79f4dc681d18dc298aae64b7cbfa74610b3f70ed35b69b81221d19c5ca6551037acc7771132327b79e0b2968fa689d7b9a170e3983e2b3a3ba160bb9248a96b25ebe87205a7db66035cf0cc21545adc4625648536d805b1c04ab5ca3ad3807d2a2659be4678b00c9fe547f6190f41de1e087cfd937220a70be478d03b9001d0af23c163bbeddaf4b3425f1b5e206664a9115f529953a4a3833751d67fc755eb1aabc96a4b4e81a6a93ce143dacff2f64f0ab58c2ec5b82e900ae6e3edc0a356d48619dae0e2ccabe79b757674630d1c78b928b43c0e84cf9a27e2ff6dc2149a467c58bb61f2e48ad727c2bd1426de5f8ce85ed0aa77310e0954eb32e716d03ed7552e15b5c6f1cbdfa7711fa25e8e46f35dffeb6048e773465aa9854305fecaeed845f1c6a61af769e529a50754445a15e1b40a46c9cd87b701c6ff69d5c7c6f5cf42567bda8795dca79356295029215b3b253744420cd1c510e7a942ce52bb5300d04dbca9612da0b6573af19965252b35f97942facbd9d851b689b43ac831703395dd715dd0471dda1c5947791feeee95d8d9283a3328598adbaaa85f50aeb432390e823cfb6cbbda8abc143680020d246c5dde4a6c45ae84fe11078713bc87c465e8d88f0b23e2804a6a3e19afebeeaa5a0f4c729db84107c6c8b7f838e251b0c174599d27f5fa92046baf6ad431fbef4df75bfaef0a79dbdbd6a2fae8a97abff4b9eeb078696bd95fc84d71195a9bbaeb1cf12989c2bdc7e643aed74b976ab9a7bf800e26079d1d04880276a4f035d4dc86f748936877948f17c5d588368966818ff5005857f8269bb3b5c09d7b3306c93d569f37850e0a7d5bce3ec80e408d2b3037ce36e2e5bbcb524e982d81fc165a4af4769ba0eaf15917b15832a5f5f84caa2cc0e92fcaa63c6bb4467c8cf8cc36b4bb15e7417311ca51566cef85116d8d06be1e99c610ad9709d112b1238ff2068392c344f011327913a5c12636fdb5964bd42f6d30209984318c43f4cf294e71bf60cada362c1b0d6486a1003e20980e81553c8ef46031aaedcd236f162eaa20710f70d09a2c952f4de152a527e1dd9db12b8d249a3a3fb2447cf8478306ccbaa186fe4ea5796887d49e1d3c79aa4eece23d6a56ab1589433f820ba79b197ce855adbb7edd7b5cbc04a54aedbae2b1a31c731b4cae59d906e4c5a4b5e8d08452976cf186cc9a3877e2de21e274f0cf6a67b5e72f2b6df5a33d2e0b99f191ab9f6eabe68efa3fc65f7831ea402e3e70e7cceb1827aabba5c152a5877c3ec5b878e352e4bfeed0cc1dcd87ec3271335bc552fdf45bb4aab3082913618658d57484fc49314030b71358e9c670dec4375aaa02d3c4f4d0a2e522cc5ee2dec627a76cc378153a485a63b9d5d8be6cafb2333fe256cf19870b05b443704fad102518d740c8dad5bf2384e898a31e05ba0caf2bfd6c5ff3604ed969942ff31abf36916e7a1fc6381b793d8c3a11d8d16eae961658febaaae3d12ae6c985154e5ac1d8d97967238ce7c3574dc40933f752feb0aafdf5296598fdbfd6ea59fc706930b7bf458637f8a86b9bd53d72789fef65c58cf337f44c083a62dffd92f1a974eaf3c8e7664ba5e8d8cec9ad36f0f3cb4c9c6742ae6388baf1d9a90c1a3c210457579d66eda6bb2e72bbd41c3ce0187019fee1f340be413688eddd1ed825ffa0dfaae6ca05926103a1299c936c93396636b3a20cd74c9e056966233cb4f46cd1eab34a1b9555bfeecddfc919ae507c33098353985a56c8aefa0c226d96f08f1ee03b72628438fe775ea604b7ea5e0961fc369c9cb124e7b9a5a783b96662910f290a06a7bc834626bc46f5740806097875932422c4fe22afd1feed280c92992c2de8adf0247ebe844f874358f090a4fede6394317b2ca117e5da09c371c8d0fe559d0f47a4718f188031966b8b44017d9e6e93d2bef58d794b037f917b4c5d0c07f0d5b324a3e06ab50b98b6bf69497c1d7cca0c75a30e5d6a41f69a136569deacaba73d8c5dda0357deef407549a384c355e1e7887c4b4caa5c17e7225d1cfdad942cebc4e7a56acf724311962a381cf8c07f6bdfc96dce731b897f8e7a9df070740dc7b5896827848f3d32085530cc24874ca162d19b692d47f46b4105153f5f12f2d9458b4cc3ddfd84aab512b21caf70f290fadefea740a802b12145ab73e13881285d3478c54483c18183a9e695014416408d36be0f1506595b188488135dac65bce6cd14b520eb9cc05c61f5be82ca63ba042202291229a1700d08d3a73d37449dc69e4a1cd8fbbc6e2783071f9bcc7e0548eaf27ea0d983f9e71bb5b8e8a1c7d4e7ef4081d67cca93cc574341b210122940d6b79528dda6fd900356cdc6b295672f081e6c81356d383225d2ab3160c52fd32e79f610feb484ef08dd6e3f32576188300d6541f04e634335dce57e823f1eeb395f2ac1045297ec747323bbe8b4c7d9b135f57e73151fe6ce8878033e29fe6f4092b8a4b72a3c6f8d3f75a29d55a30ad1bda3a0876971033afeeb265e2bd8468b3a2820dee47d609d6aeb5c19e1fc02d9cdf80ff4f26383bf67c651a8ecb35a627d039c432862a7ea1b0e512401dbab118f7b348259fc4ca6eb92ebe61597920d86d082ac9cf22dbd7b64ea865d47ecc029b475f946444737b1d65cde4d8cd6d37b1739e2eb35d85db2778d069c48ad2fc32b3b2060445cb9e21a0b593d9b0efe856129adbb339114e7cfa36e66e6d6a78669efc050037476a5e7621e8dcb22d4cb34bad4b5f5412842f29584652a506e99f5f7a1bd8975b423c3c8f7e425fb9e761b54218082cee2ec6ac9113e1b01cc2557bd8b50df49bc8339a5aaeaaf7fa3ad9b5f5ac4e2228a0dbfa9dc9cc2d20b5218a746b10cd6d6eece62004873972d993e43482b1e2368cc779caf2525ab7247bf1f99871806498c0c65c1a6792c82618b68b35b3dbbc3521c0950814e75482dd48c4e7b0cbf5f847a17b5abc724eb2f0a3763fc47d1e5c7355a88594516d62bdf562b34efeb5effa0e0a3006769b02844161fb7454c14524bf61f551078646a69e4f95bc9718f240729554d61e11976c06eb0343e16991be545dd1cb9813912f9a07f97a3393a1c36589139bb766e4106a8df1a3a16bc4b8baf8a57481b9f4a18f18791842ba70eb5d7206c7f0ff6b09f2a72114134c40ac69cedadc32ddc3a4d3fd7f0742f1d230d0cca8fb593faec125e31c35c58fb7f1c74cfc7349f390b20f3395d7b2de683c561564a63ecc21de7abe6d5926aa7d3179ff84ca259fee519737280a20d4855653c8e4493019669a77857f2ec52112d3f8530e5164273efc1284d00f0b78cc2760738264cbabefbd92f4dc070f881b61b8f3f3a9744e0529f7a91866e13f9f17f291d9797ff81f9053790e728453e963323ecf22d468c353cd205b9220ad90a080a05407bb8298cb4f8e8101c1f92f40fab00b6e031c0c11e967342168272379912b8c800cdfcdb6cda1de35370c3f8388d442db9ebc41ecf30a1c852640e9ebba9fdd92e26430fb845f607d51e1acc35337d00bf5de073d70657f4dc99f367f5379d180eac454f1da13d25aa12df958e0376d6fb6f5ce8bc825f6ebe0869bbd024612fa7454cc42556b8e4db355a7ecc67f658730a7fa7080a80dd0098bac2d3d80ec601da9e9557cc30ed6e6ed3ac76c6c42e311492d5420881e9a8332ca386bc6f84255484eb3b6b6ce76ea4914a1487a9ff3d77dd9df3e32b3bc0c0098771364b121a9946ee5a9c367be0c1dd7e2e146d739d19a825a203467b4f2697951daf6917e8932cc53bc55451ceacff704dd4d8335be43b95d7d09a515e4f1ff61190923c98287e9967508f103f4d3f4af82fb1e77fbedd161bb2ee63f422e8d1d53f8e293142839164a3af603c8ce431b88dc2370f91d8d0f4110b5c19873c4ff2262585bbc884d6bc287cebcc51384f1456d1c9154472eaed55bae2d5666198efab1ff93fa2c98ff645be56f78481cc94f2a74898bff48c8be6c19d31a7a0d35438432cc3b89ae59b643c4cc50d08d0c0ca0c5aa1eaa6e0582ce83734334128aa345ac752f23f0032ecbf733fd415822144c8a737adcf0bdb90f955e7f08cc077072c71f138ff0743450f736cc2f00a3ec9a2d862f0b8389c78baa250c7c9c3461881d3aa72242357d6f4f555bde0919fc263952a9baa8d244df5c379a03f599cd121948488f47bf50936a100ae2e3fcd95d3859896eb32fa7870636a6437a80399d45d8862b838a5459c1e777e233b4facba51b3c9c350a65ff4282af9f9db02d861d6bce8b781eff3ef15c21305aead6de0a1841c7c0fb16c48bac049cd1822f791a62a033b7f5c79f72de7571cbf70420d1b11785d96a20636c2373bfb87e95c2c76da998a5973407c0ff031b2971f92086a64c3ad0e019484e894b6ca52e170faedd293ed38bcb04662e4880d5d42c49a3485e7b59e5780fbd3e1a4849e929bc2b41cdaac44c0311ccfcc46763a62428b227acabd6f2a31632c26ec6f9683464e72c0550fa4062cc8feaf5235560673a3db4d560ca9050f849a6976d35f3cd764d0c4eb5e8117071096959492d8b6bfa9080671ec736d8225c6b42afa2445b8cd763286e002792cbd4087f4d5e8fa8e6750ab05a3f5ecf210570ef02b0b274f510b110dde50b60197a38b5a45b05b48a35c46f97a5809c70bf680b0ad3c6906b7386a67a09256f06568acae2b55605526d3de35b9c44d69df4b1052c9e09344c9a4447e6ef1df60f136efd8cf02921eb85e7ca1a8603e4154fdc8bec71f2d704df7a7399095dbb901b65ec079dd770920a527258f5566b531b5b0dcef20c0f40cdb9c804da5d1625e8f004f710e997f284fe7a9b5ca4d2e401acf95880cd337cef6293bef4a4ac5d06add6bfebe80e99605c41563e8791547d52dcfdc0aefa15af05952bcabcd491eeffefd6a15b2ad336ec751e1d774d00f8dd27331439b9a7a7231aefdf1e25612c56aeefb3ab935c733f74577bec6c960ebc76ad0df5f8af424bb35f943115472952924fa561de71afb5dda6dc5f5660197139a0105c3d991adfed0facae3ab07064489af90642df36ffff60a168b11bc38beed0cdd50ef19b6026846addfc499c1c2046111186e1c36e78297d610315776d14a38908d3554e6d0e326158e05f06dab7c5900c0115bf91d675c300a2d9bfb5398ce4603110ae66f2be22a76d7d3b308dbe086e5807960a78ba14a036f506c4cc1162638ec025de726c21321a30b3be0083ccb0e223e128fd8ae4c825e3e74c4ac5859b62f05f441be0ef917cf61ac3bebb5f6c35f71b8dd35ca5f10622cb9c441dc070540db5384da0d03dec59aaf216c95308d9fdcf997893fab34e3e4e35368e956ab894c21b861085a00eb81eb9b7322a0f24a457ec7be535776492c9b7a09c97132702006e53d472505abdd09b0e8a66f7cc875ef74bb4f8b5efdcd89400cc27e225f1eac1455128d736c75b069b367c4b38234f3a7687b7175658f54ad591da601bd0fb84d91b1bad4951289ccbcaec81ede493267ad1e2e42ea39a4c9d9221059f2bbd596d96bd3af907c3be4ecc2a245457e55bc7281ed4df495239d7218e5b166eaa9f9158a018dc47b6fb629ed7bb0209904ae9fedd41fec6977300d494c928164dc7d2d546bf599d7cd4c5c757be8d563e6461ca80b3f387e488a93fb6e83abf0172a09123a6f7757fcad6ea3c974cea4a48bd1fabb35429c3fb4ea77720c4c580209920b9583c6c5a5e145bf8edc7124e586a72d0c8a718a03b5fc0581b5cc624421ae89a5baeee76ff1cb11f1a928aa523d848825c52c123d95afecc30793d7857b46d2919b578503e4e6e01b625a0093ba52522f6eddfa955ded765f89097e6f1d432f82af6a6908c28076348f6eec4f05f7d4510eeb0bb2149de97ec49621a8118be8a07c8d5a2793801963b8ce372e245d56b42cbe0d3dc2a78e473ea386d85f0845128c291f0860ce12d066e1a9da216a1f7f50bec8dd6ff2ade3819676a80da08e0167a781523052a9a4200f09f8030879db0253043b24688e7915d9b9bf253d0a94936d48ae0cf425076fc02133d31eaaf0cbe588ffe9f0783280d217c7aec602f49ae53cc3fb9cd020da5cb7309893fbe532dc1dd0c472b5364ceb5865b123be480476243a0532f018e94b949a5a51b4e3c0a08b56bfd78bac008b4343353c86b95787caba329ece1624f68017223f1d11fb999a3ae10543bc2519a20942f9a26f1d82f4ec8bc8b24314c3424ff7457e986d2f112432e5249042ff3b5fe0425991ddce6b771798e3c7401ba4ece14b1e9f9ecbbabbbb5f784ddfa4d6eb18fff54820d3f705dff7abc930676c93e839464f15d35ba8835c851e85703d58f118bcbb6df95f3be9cb50716d0d63ee15f73ed05ab1bd9392c29529bacb374c7475f7134ca86d +Output = 0f994e4aa804282cff22ad7d6229ef2c + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp new file mode 100755 index 000000000000..521175ac7c1a --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp @@ -0,0 +1,411 @@ +# CAVS 19.0 +# "SHAKE128 Monte" information for "SHAKE3AllBytesGT" +# Length values represented in bits +# Generated on Thu Jan 28 14:46:46 2016 + +[Minimum Output Length (bits) = 128] + +[Maximum Output Length (bits) = 1120] + +Msg = c8b310cb97efa3855434998fa81c7674 + +COUNT = 0 +Outputlen = 264 +Output = fe8c476993b47b10c98303a04c6212dfb341426d748d3926140aee0a151fc80fa1 + +COUNT = 1 +Outputlen = 840 +Output = 0ed1e47c5a33592d182ccb6a28cac9b11d23d8038ddebbdd4ae6c584d7ec14269810b082a27655d073ac9bfda81650e18d972e5e96cf1b4279af91cf0bf61156ebf6f042fb70ba6f25be976880c257405e759e71790c5218d05985f5ffff05f9eb2da24053cb7df667 + +COUNT = 2 +Outputlen = 368 +Output = 14cea805075b2e0cb19e803b799dbbbcf4381d9517fb3d11c54ad32fd67d10c7f8f59e0cf2eaec82bb237e14c835 + +COUNT = 3 +Outputlen = 376 +Output = ca327eff3846112cedb5a31f7be9ef1f477179f91ccaa7e41ddb9807d96fa5bfc76760fe9b46ee0e95b3a4d8d68675 + +COUNT = 4 +Outputlen = 560 +Output = bf9120be98540f8a62d21a248ee75a67579c04ac707de67ad7b3ef3df62dd654101c535b7eb5e2977e1ece693b0e04c1935d3b649cd5220d0c84388ef300083021fd2455321b + +COUNT = 5 +Outputlen = 1024 +Output = 6530bd1a4e3c3623fc0c074fe5b6e32c9feacdc3f3f6c55c0b4b66c04e09572a7ec5af994a38c6d4bcd490ae66848c02a8727b1d7a7e266d451bff67ebf5623542cc09b79227c76c3a8532d2d7dc076259967f38fadf46224c1ddd1886bc137b654f1bb25bea20e4c194db5833226ecb9a5dd330b6033fef880cf18ec93eb8ed + +COUNT = 6 +Outputlen = 544 +Output = 500cc61cddd8f34619d290cee7e48ca7bd6cd8165a2b18b1b1dca8edb31698c8f83197abbbb5c83607c915a794e7ae5cfe08629e79631615ca3f1b1d283cafd0d4b0fb4c + +COUNT = 7 +Outputlen = 344 +Output = 178d8c27013bf606fbda5b339b7a5e2f767a9ecefb8ebc9507368ef6f8094397e52a57b8a8c6ce884a9204 + +COUNT = 8 +Outputlen = 168 +Output = 7263f2f232dd9ab91f75365a427babca26e0713dee + +COUNT = 9 +Outputlen = 608 +Output = 72372d4af041df78d083d93d55e164981b75e0b9922b14304345e4d1e454fc34c96eb03a70d3c04fb6e8c829f9fd5641043a24be92dc6b22541c0433c2e4de5c878c5f9edf30c25242bd7415 + +COUNT = 10 +Outputlen = 312 +Output = 2c6aca6bbf28e8cb11899d69d7cbff2b0c6a76a19f73e0ef57682dca182258856eb30d0cec1bf1 + +COUNT = 11 +Outputlen = 1008 +Output = 5139d71302f69513332ba58fd7228ffcddb21374f0b652c4df657293708ee2cd8fc2f5312b6be37fcd3b3a897109f0359163f80d20ff4c88e1d6673e64e47a072f855fbf4e97f91e9866b5ddabb7c25a50fbeb559e7e782b1a420af481c21fb86f04d02aeff0865eb4d6f605f59615c999dd7b3f74e7f71cf800053a2421 + +COUNT = 12 +Outputlen = 976 +Output = f01ea6e5f9f98812a059bbd2b6b07ac943e2a23106cb6e23ff32cf772ea8b86f85b6dd8e912110198b8a92e7f667d63a129c5ede6f5c8cfea72934bd5254075321eb7033a813ee310bccf53c449c435914cb6efa73fdabf0b88a96766a7dce2fdbfea245aedf1636264c2d3bb0f05b176eb1d4471cdb35ec7056 + +COUNT = 13 +Outputlen = 520 +Output = 81c7001b80e89dc86ec09c347e412ec2ef84b40702d518d4fef2db78f77e71f831e56750489c085dcee42284af28a391283cdbad1ea69ca4841e7b427ed96e97da + +COUNT = 14 +Outputlen = 448 +Output = 4033ffcf7fb089ecd675dfc2356b6be9b1e856d924625a6744b0c1f3ffa7c64b8c42db22069205fc363112ab5038a9a836c88cf9875668be + +COUNT = 15 +Outputlen = 504 +Output = b0926faa962ef736af020053af7ee9a322107b429bf33c66ea2887051736e41789d0b59e95637c804ff85ca9e99f44d550aab42bf5a2fafa354ab0e905d6ca + +COUNT = 16 +Outputlen = 880 +Output = 761dd52e2702c7944401b64a064140f605bf91fe56d38d5dd87898526e0bc6a8ae8d2690a0aa79a9740f44a71c27d79c4636925d02cd4e20903b67a3a745de6e4c30c70a4d92a72bdc6d2e3896426fbecb624753c7f20ca2a8da05ae656467e81eb27a58d15708668985b3647ca8 + +COUNT = 17 +Outputlen = 536 +Output = a80b5e288c725c4077f28446e0303200fc2ca0ba30e99cb6ca65c5e0a21129dc783bd0b644fa03b49174d3efea4a50a1dad2cd61779eddad95ae95a43aee3d0bd0a123 + +COUNT = 18 +Outputlen = 800 +Output = 91dfe309794ea96b337e27302a6134227244ef1e3ec663803b03e3d9ff7f008a864fe3987f25ec9a8a13b1d81aed2353de69cdc919f373676149fe4dfcce9035cd609e0207bac6bfd167e936360e267f92ae2cba41941abba3e149987c923ca30d19a1c0 + +COUNT = 19 +Outputlen = 840 +Output = 368be5e3c9e92d50d5901678239fdd31ae374afd0dc653fccbde94d6c40ec047cdbb6f61a0ec762be56f75ae436a6621d80252d26a2405e759832e80f3ce4f6984b125be3a792a9a98aa5ab9e4262be6acbf276536ba886eea767f76ae8fca22b47b9990a4d91c6449 + +COUNT = 20 +Outputlen = 328 +Output = 252c93c1864f4f5daaa80f304093c09c83f53dadb45e25bae92541eb2e5e15bddc71c76caab1a5b7f0 + +COUNT = 21 +Outputlen = 1032 +Output = d67678c6c054e2a5498cd940955ef07b7ad01d9e79192ea8f37e400e15d69fa77c8e23113c73eccef42243a1e76d39a05af137a1b298a16d061d2716d2ed1ef5a0fce1516ee90d4eee85e60fefcaca564f9742b7a85e9f91018416b78a8d55628576a1f1d1edbd30464b2eab5a0d392cc2bbcc664aaa58184d53173b2b264783c0 + +COUNT = 22 +Outputlen = 648 +Output = 6126fc6dc4cd75d80b7861b9e3753762cc6d3ec10412f0701696aff857634926ac4750427ff63519a537bb38c29b36bc3d45a1136247e3b27605ca0fcff027d436957757af1200e1cf730a2ba696a54a49 + +COUNT = 23 +Outputlen = 696 +Output = cc55d15f90f6c541c4bf773a1d42c863b6f1e5abb9ca69892fee417053ebb4675cebd2c228c38dd52d2cf5f2fbcc1e768ee9271042bfe80ad86d93ece0b3c7e35af3ab578c58971b8fdee5d82293e146aca782d277746b + +COUNT = 24 +Outputlen = 888 +Output = e49b1ed94730903de3c1b85a7a8470dfb1ba363a983d09821a7077184ff97278a6ee74a26b46fd853f2fab0bbf01acd51cf9616518241e21d5c7900f99bf8416f46e8b301823d3441c136e2e29d028fc9331b585cde6848313c5d68859b950e7ff9bc0163d34581ccffa53fb877375 + +COUNT = 25 +Outputlen = 208 +Output = d8548f12754a45331f2194eee685a7952cfa323cd94443125ec8 + +COUNT = 26 +Outputlen = 264 +Output = 2ce4cee237dfc8740d767ff033d419b8dfcc4698591a35c6ab0b04b4e77794480d + +COUNT = 27 +Outputlen = 1032 +Output = 1119358a0df4adb72ffb21e3ba249d6ad1b67e981d8c3983f36a62029b1ae8cfdc2130a1d415237f13729411e4c2b4917f9185dc3c36e422fe2045b7a72bde676170ade97c1ee7236f55867fa81a4c064ac1554fa94ae7528f3d78ea187dccf31ed7e245cbbd614dd26461676434c56d42f6da60c4bbc1410faf29971abf81190e + +COUNT = 28 +Outputlen = 808 +Output = be0b40aa0e5db2b8340266702af785a387dec6dfd59804fc01ac6a87e0ab6a76e16aff00a40c2fe3f84e8f6377d8d5e8dacbb808cb1a75a07787c54dde96ca4f530f738bcfbd8929acd6fd0f3800cc9943bd64eadc6bb436be927668a7e95ed776c549c8f1 + +COUNT = 29 +Outputlen = 760 +Output = 980cbbd06bd5b9084ec54e9d60a4fe045ce6c4328d8c7df2f11e0bab696e5ade1578cc3c5577ad8e5c333716e289a14aabf90768a2eba9e8d82ccec9d24eedf2af1db5e70c2085ab4354b0bfc009181c9c516dc6e7724d1b7b8cab00de4181 + +COUNT = 30 +Outputlen = 728 +Output = 840518823416e9d6acc4a3d5455f1058686b19746bece85cee1c354255374f04820853e5fd91664afbfc728108ee524c740facd49c6baf2d98e9346b1c61a7eed18705ceb341b173ea048cd92665f520ce08b3c9f4a41e80f6b3e9 + +COUNT = 31 +Outputlen = 488 +Output = 8cf145a87b3871e72e5df96ab4828ff10dcf6b4f4d2c3c95343d459ac54342ce26953b481aae7d96ef453117e6e9557988983ac06237e04f0a9c6587ce + +COUNT = 32 +Outputlen = 320 +Output = 4e0ef3ab4b3c38e04c21d48bdf5fd462f3b6205f966e063ccbae972a8e776cd8cacc6289b9000f5b + +COUNT = 33 +Outputlen = 896 +Output = 045794b6cdd903793f98ea2806cfd4e9f0f5df022541e43d512e73f18cd7b063cc1152448d2b9f45578a1d509249e0f9a60cac1861fd057c951e013b5fabad48ee0914f8672352a8760e618da180331c431b27a3ad825748a748df7244cbcc71678e836faf17b2f978bc10846a325ff7 + +COUNT = 34 +Outputlen = 672 +Output = c849b8637453a85fc7f37ea48903b9939c2272ab2bc41267b75495f3245d4a20199b197e48dcdd19ebac817705491e506f233c72bbae78cc616831d0e8bfd4c922adfd5c1b3cc97c5b486b2bb208ffbb7267e9c4 + +COUNT = 35 +Outputlen = 712 +Output = e0748a3ad408dc2604dae40b53a9ec7deac48ee08ba35b34d68bfe756a3d6ac55a4177dfebf99053d040d173ab4ca792aa5ad31381f774d9498c1f69cd57f094880d81ecbbb1ad412363c2cdab18b0e1d9fc844ea6f48af5b5 + +COUNT = 36 +Outputlen = 1008 +Output = 8dfd8654bc967507cc74b0d9c80d34ffa10d6d03159da90d07cf57e8668398b6a960812b348a7d530f6d619ee7affc9c267a21f27dc585f6e82748d4adc9585064fa7f8de6315b7bef50bfe11817fc39dc16f588c382c3fb95ad09b7b322c589696ef7713995092fe3e4e7b72521fa1bef0eb18c7291a2641db15d804dc8 + +COUNT = 37 +Outputlen = 264 +Output = 16429d36a04e4cb4705e573b7a08b7a4ad9ff2b1698b7374a82de165f120f7c0aa + +COUNT = 38 +Outputlen = 168 +Output = 8fc70b7167ab93f382d47723b024cbb3f99c35e6a0 + +COUNT = 39 +Outputlen = 560 +Output = 21ceadbb53bfea15d0930d5e0dd6beb0621e9acac49f594538cb479f24c8d846e6d342a952ce97839554effac334592e0e00dd26b79cdd065e6dc96b4e020f2a352996e1406d + +COUNT = 40 +Outputlen = 480 +Output = 65532acecf26a3bdbb54bccc7da46c3995d56e6396803f1541a28e900238167d422158b9a6556b3891ba15b9095a3f698afd84a6b5d635d0e18e8dae + +COUNT = 41 +Outputlen = 456 +Output = d946383946c74be1912e95349dd9770592feb46d88885ed9a289c6ef51e9b4979e076b1c2264d6df79c138790494dc1b32b5ea898ad63ee9f5 + +COUNT = 42 +Outputlen = 392 +Output = 9b9ba7846ab557b3ce39aeccf0a2d9aef62620376ac274a59d8ccc695a1eada511e6e3d1d45323e7851a3fcfbf29b41803 + +COUNT = 43 +Outputlen = 160 +Output = f965fafe5e7374479a85633a10161b604b108cbf + +COUNT = 44 +Outputlen = 968 +Output = d8a2eaf8397851cbc2eaa868651372db9aacbdd339052aaadab4d607c93e435e24219936d1fbaed84a7665cbbf2634a563429407f8dc4f652ff99f582118924fe5edbe4fc6093535ef06e07155ea88fd9d5a7ffce458b8e0a5e8fe214996a8070cd2628c29b15049afded1eef7d4ba095746da1c9555df429e + +COUNT = 45 +Outputlen = 864 +Output = c9dad51fbf4b4e27d5f2bad589e866ed12dfee1b33fa7ea39742c008cd26fcc6a8281db514c197f28fb2c603b9d829ab3a64262dc959c7a5f4b14bcc37d60ede0dec898a06052f53d52b0c8d3e0da4a81f9c231697d23ffc18b464c80ab74745beec34ba36fb799b95ff049d + +COUNT = 46 +Outputlen = 824 +Output = 3e0961b3fd6deaba332b913ac7421515320296dec8d549699ebbfc047f58cefc13353d20c733501d58123a0379feb8bc8311462bb15ada95291e5c83720eb7b3cf37ac333924e5e922e1101a47ba3bc34c8f8c029e2d0be6385a6ea601106c359dc44c363f0ccf + +COUNT = 47 +Outputlen = 624 +Output = 7ce881cff6edf8b5a3e68c4cc1b1815d83200d3a96bd3d3cdd2c70711e95f7a706800deb7ebf1016b196da3d7681272d738997d113ba7a0507b8f365719713309fdb864526794485ffd1a8551769 + +COUNT = 48 +Outputlen = 1000 +Output = 0f51ef367ee5cff809e09599708ed7e8399fa44a16d4865f788b9a28f7f381b6c5ebe5c3a4ae60d861d73363e6decb9cc7fdbfe17a6fa3b692b9a1466ce87098734f6d4c1844f0904ba16e0efa04038c4a9fb76d8699ff28e4338b4fcbe2906c47f47e9e494d2a26f1422b3cb03b8bc3fd2aa6f002fd6701146938fed3 + +COUNT = 49 +Outputlen = 712 +Output = 81f824d03d7f86c115978061d17a9244504a09579ab8675ae66fe286fde5a4d96ddf90000a53145df10c8daa16a69af5580e196fab8fcdc13078496894f1c40e1448929edea1282317ff6777f3d1097b2627052b521347d28a + +COUNT = 50 +Outputlen = 1024 +Output = bc93eeb88b154a89b89dd8f9e7c793da820a713fa89442078b9e9788809637fb43226dda5dc9eb12921ada49ab03876c41124d02d616d3fb5f22dc830418d9c82d3b5a7017225ebb2c0fddb082b97ca1e06c767f5efec55effcd2c98830013e1343c8376ee21cf380a553f6fbefaa3ef00b82fe68250e1dec714decdbf6f35b0 + +COUNT = 51 +Outputlen = 224 +Output = cdd27be61aa461351a56c57db6efacad8f4383b6270622a015efb914 + +COUNT = 52 +Outputlen = 624 +Output = 3adcf56a7951205647146979b7498e7e064d50b8242a69867976f20fdacef1dc6bd28e18f2a1444b2d7c8020f8f8af8724a7189ac2ceecef743c49a7f50db7bab8d2f4295e494477aae851206b72 + +COUNT = 53 +Outputlen = 704 +Output = f698a3e48f9a66db783ff1d4e9c65010512076eba543bcdc8edf0d8afe8bcc7dee1943ea5140a93102937c86d3092a52c1e17d06f70e812084bd1fa9b670bfb2b31769cf2ca92090c1aeffe15a4f8bc58e20cad213bb8a27 + +COUNT = 54 +Outputlen = 960 +Output = 3b07587365d41efbd5834b723684edb9bbc6175c169e51f841636c3d1324e636d018e96b48e2be926558507a54eb74533ad73190a982e4bbbfe09bb7baf8dff971e09fb767208eefdea1cfb3be1c04c67f28e49a961434d691f92847b348171118c3884579050c6cfaf7cdeac6b3ad5827e597677a18d0ce + +COUNT = 55 +Outputlen = 1080 +Output = cb309f64dc16bb6f563f3dd420c0d02bebce32b2f6cf4c7fbb0addf810aa6c345333b22f1bda7c01efb3db63826915054997980dc5326a994fd2c967738ce4e8f28af1c8ec6853691980184bb57465ac2670b3f16a21ad66ae842f9ab4e83420de2aa75eba227769d923f4ce2ab5eb65137a0ed59d27334456a7c74dd416e095b77e927204d65f + +COUNT = 56 +Outputlen = 864 +Output = 364ec626d1560854e54434ea22548bd4efa79838f903c0009bc3ea098d93cdb28f8aca840946b103c27e5ba1593ea2a8459a76955006cd3f84cf80fddba64e1d208bdfa2a53c6243b0f8e32ad117058ec53794e39574f4c260d1b1ee47b2a4d516ffecf694a925bffab8b119 + +COUNT = 57 +Outputlen = 880 +Output = adf732795a7f5b85c5ebb791eb10a4f79ed7655d03bf0663618471a4a0f3377ed115b210c9bb7c3190e72bca59aa10dfb9cdc808a34207f69c2db269f4346e9a22b20eaba59899d816fbd813708f1d6f85cb4994abad67e8a4263f75330400feca6a1b56b355f7cc12e2aaf87b7c + +COUNT = 58 +Outputlen = 232 +Output = 918188cded827eca594944dd8286330ae82be9ceebdcb5fdcc50a4d45e + +COUNT = 59 +Outputlen = 904 +Output = 17397982d8cc32cac0e81f83a150365fd2f18ddf89d2a6e0cd9fbf4bd00e880a781dcb547187c70c2fe189cc432aad8f21535742820b37246bdf1c7b21c7fb1fbabb4a8c95eaf8c092de59848da7252762cfadae1508d2ecbab7545e11214101068ac0c7a4915ef3b46331f7d531fe6358 + +COUNT = 60 +Outputlen = 1104 +Output = fe1df64d14f06ed93de5c0093951b0d02e21c9cd9889bad46a5e7d9bf206530c9662ccfee2122e06c4bc850395d02327eecb8d91481885f4098c3567693b3e7312f15d7058a4746e5075bed4b83138f2cbd9fbe0cb482858e58cbfcf09ec44a7b6411fb87f036a11c2773e453cea900460a4d20feeb20ebbb7e39617ef6898ea96e86893d857f68b07da + +COUNT = 61 +Outputlen = 416 +Output = 167ced28656a17446b9838ff76ae12bfa3b201e67620b521c2adf7ce90f0354f5de8b09c7c7940e926863b166455fc2dcda14b51 + +COUNT = 62 +Outputlen = 880 +Output = 7ec87344b0b7c75dc27ab5f71bba09b6952c74cdca5bdfd26133e6bfa93ca91284e6cf172070e85bf726fdb5f1b86d0c94cd14a851daddd3b4f1b003de2459210db459c60d88c5c64798b0205373f95ca705d60eb2449d1204953b21197f21e952915a2a5cc26f0c44f853d40096 + +COUNT = 63 +Outputlen = 1032 +Output = e80d762eb93af03b44d3fe16dc71e8f20a6adeb6602385c6ee1d5f18e741f0e22462536d9a18e607d12c763fd6d9d03d38454fc087a12426d228bba90b585b86583c1b07004df652e7617f0a2bf040470f47bcf66e076433a2d987f4d18a5ca2839f0b2a699a017fea3d6f97f68197c6c33a06bac49d16da062c396b6d3d51bc8b + +COUNT = 64 +Outputlen = 720 +Output = 59e4debd17261441951d4073dd0d7e6786d9814b72c82de3243f6a502b63e4db187f91a19c405795931248ed088feaeb5541615e8ddcc8c0f71c864367e4ff8b03f6e42462e8b87020fd8f5773063d152db5a60982c8c619495e + +COUNT = 65 +Outputlen = 904 +Output = a10edaca106aacd9f70b54695a9854a30cd917f3f2fc00f61c12bb37cd64140cc6531d3d9b59e27c3a0b5bc2fbace8312b1eca0c54699ffe2a7f8907fc70571f82b7a75da70101bb14196288b3d8c45a608010180de7e45acad8d157d15d1c9b745b974ac6068b68b413cef33afcfb50cb + +COUNT = 66 +Outputlen = 664 +Output = 72e2bf2fecb8c6ba735ded52ba98197869685d900ff5063db8bb37a26b4caa36fe9595745b8d2693acfffb9dabaf53190706f9648a47916c305fcdb5c364a82809e5d2695dfb1071747d599394d74a40ede51f + +COUNT = 67 +Outputlen = 232 +Output = c2f7dc0bc872b48995c1a88902ebbba0a1443c1da023d8f4de0e63a70a + +COUNT = 68 +Outputlen = 552 +Output = 7058a40b38a9c6884ead602dc8fac1fe852ea087123981ab3f6ce1975ef07010a439739bcd0f5cf7b9e3d294eabde3bb6a335818a7e1c6f750f22da31255b5eea644cb3aa2 + +COUNT = 69 +Outputlen = 208 +Output = 31f65963affbbbd8b812ca49e6cb238e35b236b52fd843559dd4 + +COUNT = 70 +Outputlen = 696 +Output = e08c6d81ebd871d4302119c598cc341168552ed6e75e18b8db717af8c131b73e2382b4792101b58ed462a4dd6d492e60b1025ca52fc2875b5388ad5bf02d52e32f6f68154729b6f6c17910b00fd9496bdee0f6bb4e8549 + +COUNT = 71 +Outputlen = 416 +Output = 7276cfc416aa60ac21146f211f4d267e5d58b36a361220e2fa1228adf2b404d341a38ae43e624b7eecbcadf8ec96478d925aed91 + +COUNT = 72 +Outputlen = 288 +Output = cecb1c369a1818b7ace4aec9a15eb5b5763309849f9e55c4627c501d754ecaef09f33590 + +COUNT = 73 +Outputlen = 768 +Output = ba2202637b3980c33a364d7d80344ee58db3e76fd287218a56e35662c613fa97b319ca68ce36c05a9390b0177d6ff647f85a7825a1bfe01be58b730fc1ec8972d901198bbb3bc94590aeba101ff2477030844a7b5d2ab9389d6c847f164fce3e + +COUNT = 74 +Outputlen = 432 +Output = d9d396c9752c48ae83e918f3264c1f9694db7068a050a9af717929ce8cc53d16da2ff0bb7d7b138d7d88b15a2a568446f3cb63e8afba + +COUNT = 75 +Outputlen = 1024 +Output = 12eeb3c1da7d63d528a76b979b5e1c918906012ea770bf2622ad45b37dfb5cc3c05ca60b6740fb839e4feea593c94772f81ee5049e75025d12562980767884467a222934f89ffbbdd6e94c76063fac898a4479652372001f284f3cf3b98c21a8e8205a02b8f09f8c37ebecf31851570b01d37e5e76ba27c02aacb145bcac0e29 + +COUNT = 76 +Outputlen = 992 +Output = 171f7568a7299722bfb6e8a0eacb51d447c524c81488d8aedbcdefa051263782bad57b7faaa67936a24dd6726217d67a88dd091324411bd7902f6254c1970b4cdcc4467f22baf077a5d0945611168118be4c3b31abe33f95eb83aedbe54708502390af6bf3dda78d4eefc07ad786a1c15541105bc29a3f1ee1262592 + +COUNT = 77 +Outputlen = 392 +Output = 96b6a9f2913dfa8360439cac9ae1bab1bcc2c583091fad05a560f6d0ec474715ba84262421852595cb9ebd9f1bf3e44389 + +COUNT = 78 +Outputlen = 616 +Output = 339a38233c65a4c884dac2e8a710cf5bf817559d1e90e65108e04f026576a871ab1f13279aceb8fe0bc80b7ffb90164696d52d8cb62f4044ea3394b2d26b9cf9ab60cb17c0947f02a6baf791f3 + +COUNT = 79 +Outputlen = 784 +Output = cc3774830d882e830db810804f3d7ea6a52af98156639ae7de220b2fc01e383953d08d147a3ea935a6e5d23396f96233c58f6172804b3bae13bad3af51aa54c13e0b08269af886d6b5a5a36e3212127f7fb2bcfcf6d96e6c1efe220480fe142a8894 + +COUNT = 80 +Outputlen = 1000 +Output = a95ff9230b5009196d0270adc52ba3d97bc9c12aeb32957d188165948dfdccdde13dbc9e82ebf8e110af98634c28fffe29b75ea299bd0a4a3273fdcf4bf254a72fc149649c429ea30048b320826cc1300bc487f97dcb99e9010549f59c282096eccfd61114d564e30e72fd4322ff48d4b8c35af8d9d75b0f8ec6dff4ea + +COUNT = 81 +Outputlen = 648 +Output = 212a7649eff0124185a3ce872910f72de526a040d964ff6902fc97ba6b47e3a64f3d1b36eac8e3fb524a8ab27350c36d6d7a4921487e36dd03b8ba62ce379a5e80cedda298233a129d3516d3462da98935 + +COUNT = 82 +Outputlen = 384 +Output = e860ab79867aa4343d782b1231d19ab2d0dda13887247546385cf6671b02f6e4138c0268c87205b63cec4677ed362965 + +COUNT = 83 +Outputlen = 232 +Output = a2e7d460ff56bcc039b90676637c769ff1eb497c4c0926f3622b911d11 + +COUNT = 84 +Outputlen = 448 +Output = 73814b8ff44c594af3557c715e00d9af6abfd2d1c78ac25888b990d386b6be9f42f0b9280b97761900cc8c93cee9ade27ba910cc0b0dadc5 + +COUNT = 85 +Outputlen = 592 +Output = d48da0f5a3849076439eeee954c4b524983ae2d37fd2f0feb02654180f16f3f3ffede947839d7f346c01ebe5fd88354f97fe701b8ccd91e0c9e4ae9fec5e15eb864f75f95113931cd75e + +COUNT = 86 +Outputlen = 936 +Output = 7e46a140f1edd56ca8549527827862784b697ebf49139dc9da7bd7ddd506d633ac63b01cbdd48bdaa72cdd9bcf6dbe2e3677721a470b828ee78c271b75165bb684787e46e89444244ab2b546fd01fc6cf2952df56dcd9d2b7177a2934ccc747ba0f1c9ab3a30af46a4512750c9e79a21b1f0b28b2a + +COUNT = 87 +Outputlen = 768 +Output = b5f5ba5b5d5f2db0ad65839e7f4ba9d781accbc15a4f33cf51a6ee30a7cabe93a24bc54b1a8d85198373baf01cceea8f4168f86edaab3f699ad2341cc03038d87942bdc2fc2e56e9bb11f4d646ea6e992540a01df081a8791a21bbfa66691111 + +COUNT = 88 +Outputlen = 896 +Output = 66ddbec9e0e38f2fa85f762e06f4bcbf9ddff9e8ba6bbcfd3da14291409c56dcc617f5cd6bd651856e380f1f35c32e1f9c65d765d320324492daf68dada4b9dfd24ac209f4c939615dbb3bf8924d4bd46d74f1242f5e4b9663a46928c15f242bc09674336c91a5669030fb92601b5bc5 + +COUNT = 89 +Outputlen = 360 +Output = 91825f0624dee4a5812547dce58306785091cb42d6e1eee150eb8587fd2addc7db99ee7ff0cb3e9353f7c648b6 + +COUNT = 90 +Outputlen = 512 +Output = 7109aa3f7afe025129ea29dff5835cc10d9a5339f7acfb3d1b98170194171f1709f9c3926dfcaf2bf90ea83686c7cac3ddd69307469e7fadf875eb0eaa953b88 + +COUNT = 91 +Outputlen = 280 +Output = 0201a61f8314a69576bf1d5a583278924bceb59ec66d4815976a070ce7002176b88710 + +COUNT = 92 +Outputlen = 256 +Output = 86f2159f9e6558d70eff6ff44cdcf40726d495ded115a6fb712f8d6bc496b796 + +COUNT = 93 +Outputlen = 608 +Output = 8cdb9d29a31bbf13a76acbb4c551b5981bfdba7181a6559c0a93e6d3ad31c52fce495fb3752a19d35a40121d67efd1a11972f1ae56efc8e2f7da050879f72ebe6cacdb9896e3aaeeda511689 + +COUNT = 94 +Outputlen = 984 +Output = 8e99bf7375a1c4f9fdd9595c961373a60d4c11e41da3040d2363f22ee66b896b92bd51689f8dd472eb16c4c6e49d4d61e89f9bb4bc22c724c4d362a1668f2279656aa73d6cf99322722b2d1d2ac49b231e2a1ac858ee67a57f0c18676b41560ce23b906db61c3724e971b4f0e895f0297673cfb4199f5585b94545 + +COUNT = 95 +Outputlen = 976 +Output = eb5f8b138fab3e16e257611f7269e885073fe093f5331fb4c15c21730eb71443c087effe49ba6cfd2e79b84c908c8db41c5acaf6feb28056381c2931cd0e1ce2c6fa400ff40550bf36bc0ecec61f5abf6e5a6c2ac1735cf4d380f05badca2284a43a5632b8c063e68fb0e50346a6b661f84b2224f91dc12617d6 + +COUNT = 96 +Outputlen = 152 +Output = 853959704ad7595e55dbd177b9abf211817f63 + +COUNT = 97 +Outputlen = 176 +Output = 247e924680494f4b9bd87c9a47ba5f19cc473351b8b8 + +COUNT = 98 +Outputlen = 592 +Output = d7f31c9ddbfd3428e6a1b76d18cf7bd4c80594b426bfcdd7d518d3ac972ea5ec2ae63b8abb74b765c971d186589f3788e22f1baa5399a48a59d75210ea69b9ac63aef68f61aa9814719a + +COUNT = 99 +Outputlen = 336 +Output = 4aa371f0099b04a909f9b1680e8b52a21c6510ea2640137d501ffa114bf84717b1f725d64bae4ae5d87a + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp new file mode 100755 index 000000000000..dd4130e6d89e --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp @@ -0,0 +1,1356 @@ +# CAVS 19.0 +# "SHAKE128 ShortMsg" information for "SHAKE3AllBytesGT" +# SHAKE128 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 14:46:45 2016 + +[Outputlen = 128] + +Len = 0 +Msg = 00 +Output = 7f9c2ba4e88f827d616045507605853e + +Len = 8 +Msg = 0e +Output = fa996dafaa208d72287c23bc4ed4bfd5 + +Len = 16 +Msg = d9e8 +Output = c7211512340734235bb8d3c4651495aa + +Len = 24 +Msg = 1b3b6e +Output = d7335497e4cd3666885edbb0824d7a75 + +Len = 32 +Msg = 983f235a +Output = a5597fff9277088ab56d4d5485023fec + +Len = 40 +Msg = 76fc16763f +Output = a539f540f3e69e2d25a46ef0b1cf16dd + +Len = 48 +Msg = cb1b0103501c +Output = a07d5bd636c2ecca4b239124ef9fcac0 + +Len = 56 +Msg = 7216a825029da1 +Output = 9de6ffacf3e59693a3de81b02f7db77a + +Len = 64 +Msg = 7bf2fef375bcaff3 +Output = 5ef5578b89c50532131b7843de7329a3 + +Len = 72 +Msg = fc948f094aa4b4e035 +Output = 9dfe4efaa2c43081702cbfe8636859ce + +Len = 80 +Msg = f83091fff290c4b333fb +Output = 637e1cb6bdbebb4793447e81e2a2bb60 + +Len = 88 +Msg = ae7cafada3e3e9f4314fa2 +Output = ae03aecba2995b344aa8e874808b5b7e + +Len = 96 +Msg = 84f6cb3dc77b9bf856caf54e +Output = 56538d52b26f967bb9405e0f54fdf6e2 + +Len = 104 +Msg = 2af26c79175fcca8e13fb783b1 +Output = 9cca3ec830b2d9ef819b377a96a6c94e + +Len = 112 +Msg = 52977e532bccdb89dfeff7e9e4ad +Output = fbfba5c1e179df1469fcc8588ae5d2cc + +Len = 120 +Msg = e49706130f266af2946e496e0e722a +Output = 4d84336572ccaabb827e81a0d887ec9a + +Len = 128 +Msg = d4d67b00ca51397791b81205d5582c0a +Output = d0acfb2a14928caf8c168ae514925e4e + +Len = 136 +Msg = 6159096096f4cba469db393377c57d9be0 +Output = 281b6b007cb17235b8aab33781c4cf59 + +Len = 144 +Msg = 43bdb11eac71031f02a11c15a1885fa42898 +Output = de68027da130663a73980e3525b88c75 + +Len = 152 +Msg = 1e5dff69ea217bdd182fc8d6d25b74792db36d +Output = e1905b84d9c060db55cc119f328695d9 + +Len = 160 +Msg = b0438cd9e8853e976cfc13abbbb62fb8b5a50d59 +Output = c3ffe9ea9fa6c9cf59ad26f44ea0b82a + +Len = 168 +Msg = e63b13334669de132c6a0175e2eebdaa48ec7e7dd1 +Output = 50377225df64d18fe6c645a6091e82a1 + +Len = 176 +Msg = ce9b33631d7e628bbd93805b157c391c5574668d4ed8 +Output = 43611af9675b642fe8fa7e95de3e4389 + +Len = 184 +Msg = efa36e0c2049129d37eabc310521714a54a6d38f8267eb +Output = 5f735cc0076c2f01454ad90a713e3583 + +Len = 192 +Msg = 741950a661e7613f6e77c9ff8e432cc5abd4fb10e22a487a +Output = 0b9f45cd316d62b2f882c641bee51ea2 + +Len = 200 +Msg = 878677c98d8582cf4e0fc3b0f9610e470fcc06f87571d594c8 +Output = 78a194799c3334a880ad9f31144a1c28 + +Len = 208 +Msg = f8fe47cdc43511636f316ab2b40f0968198fc0de2175529dc32f +Output = a92b196b0ac4077b58e134852fad841a + +Len = 216 +Msg = 3fc3dc539de2171e05909d1f89a6b01b302036f69c29756bea781b +Output = 585739f75aaf8f980e7505e841981450 + +Len = 224 +Msg = 805e90c72b97798d936c10c9252bba561ab42736402d35e1fef712dd +Output = 53790f771045d51abcd6c79ab7938e3b + +Len = 232 +Msg = c4e3ab950463b426942d279c03a89dbc56d1f57ff48c5108bf3762d884 +Output = 52725b1f753eb91ee906f803148097dd + +Len = 240 +Msg = 8203912752fdacfca1e89f45a86c857a8e64ddf4dd8598ad334070483ae9 +Output = eef9b5940a9f1785cd33d8fd73d690ea + +Len = 248 +Msg = 9fe97ba305fcb1f8630d3c5a71833981dbea557b44e9eb448b746d964d4205 +Output = 8e912e50c56fe5df4bc24e573eabd3e3 + +Len = 256 +Msg = 6fe69ddaec89a72124f7575bd40cee57e1261f883e7b16fd10b0b99310a72e6a +Output = d1042a7f5580f4fc08afdc2e4a5c7dec + +Len = 264 +Msg = bde187d2ec9cc9f6ff26197b53c3be5992bee6d96e50f49d96c41be0e2d92cffd1 +Output = 3ac47340e1bc4a64c2cf0ecf600f8b1e + +Len = 272 +Msg = 4a206a5b8aa3586c0667a40020d65ff511d52b732ef7a0c569f1ee681a4fc3620065 +Output = 7bb433752b98f915be5182bc1f096648 + +Len = 280 +Msg = 8978b2e5ddb1b12b7dbb0fd86280a3b155759c7f02652afd4e707bf4ea53e9a528ea72 +Output = 63b47adf8ba0e1bae29e2afe71fb95e6 + +Len = 288 +Msg = d33dfbbdb48c7d2bd04086e36d5d98b135afdf62d10e6528bae185404ce1a2d11d201918 +Output = 02e7e41029d136a2ed8443462f24c926 + +Len = 296 +Msg = 8776095da3b9b0553dabdd04ca7a5532c24bf64fa52ee3084051e1182d740161999c803b49 +Output = d1eed93306ce2cce1fe666e70b66067b + +Len = 304 +Msg = f2f64383bdce4def1a1697e8e6c68b40834a32edd77b55a497cfe2a9c5cc90e577c3c639dbba +Output = 90b213c6c7dc5e37020e3c0f17e0704d + +Len = 312 +Msg = abff6aa08a5bb1ff1118bb5bd29837349d762228e85f45667423ff662e0b44d8546ee6dad87f13 +Output = 7af40a1e58a75f965bfc07cecacae609 + +Len = 320 +Msg = 22c1fd7342356b0a1a0ef75e7346c2df8a76148407f7f1132e47ed9d59ae4147a6211d51ed664050 +Output = f99123f410a594dda2238d0007ec8d01 + +Len = 328 +Msg = 9b6e2fb189d797cb844c4bbccf51cad30c51e570af40d0c3b27f7ad68b001ace5baa0a6e68ffd9dccd +Output = 1da2e22ba2e322767d13d2870d1d05f9 + +Len = 336 +Msg = 3080da1ec624fad699f4e92d6c3d0d0071f4da0753a7f46579b2937d8ab62c082c474e6412e5ca2f352e +Output = 4f45c853a4a76e583ca36ef95df2e718 + +Len = 344 +Msg = 2e2b06b3ddfa4143aa5ef8b3d79d299bee2c414560c7de626cc0d9fb429884aa69cc30095ef1f36b7e03a8 +Output = dd43105b5c2f188676e7e9f79e3d7ab8 + +Len = 352 +Msg = 6f6233796a7efb074693035c40f910b8e815c2c97f2e1920a47d37e6308368cb5ea05f402fe0c3e60c18ea46 +Output = ceb6686a7aa897179ae12fdcbb4d909e + +Len = 360 +Msg = f0f1a1e7c1206eb1135b641843e1d7f160ce83d9273e207632b537006cbf3300c8d3bb58337d3f84c7bdd11f41 +Output = dc881c49d71353ca2489d4fb44dfc6af + +Len = 368 +Msg = ff093f4c06651167463729b2e41a88c17955273473b07f2fb8864e0a8c1c9949b431edcedbd6eb4d36800401645c +Output = 3423d5def632c8c20a7bbf1a6a3da6c6 + +Len = 376 +Msg = fd6dd3b63dc7b9664895c51fc17c57d59c349621dd3c5694a3cc404c660c2cc47d83d2f0e3d2a28a3aa2f0a710db54 +Output = c8db32bf81bf75621db30264750954f8 + +Len = 384 +Msg = f5d61cfee8666d41b6750f2ebd3c6663b0f1e1668ceb89e9cd07da4de14ad166ddc8467e6fc47c9c1318f7068ad88d04 +Output = 2af858f1905ee1f11e28460c62f58dd3 + +Len = 392 +Msg = 29d97029326800f97f8db0d37078f91c6e3cb21e2033e099e29ecf7a738d62eaedffa78afb49aefd46bc9ca83082fbb5c5 +Output = e087f5cc78aef2d5e3ec450d2270458b + +Len = 400 +Msg = f322a6524f46c88053d6864062f67e8b29efeb80d48c77f182c45121f69880cc8f3f77687a81e9ab2661de4df8fe070f41bb +Output = b24fa4c9668707961e846e2d34542140 + +Len = 408 +Msg = c521710a951c7f1fda05ddf7b78366976ce6f8ee7abbbf0c089db690854e6a5f8f06029c130a7cd4b68139787483bc918774af +Output = 65fa398b3a99fa2c9a122f46a4ac4896 + +Len = 416 +Msg = 0e5bb6d22a8ae26081c0cd367f8a64d9a141261988d4dbf54cc782b9127c8b69e1b24662b14b9c3fc552fdfa3b3c9953e26ed376 +Output = 64686a23de4ec8dd62928abd95490943 + +Len = 424 +Msg = 3e7a8fe54d477687a7bec4c5b86a682010689945b86fc931c60dd4982f337e88ddf41c4a018a9189ab9a7cb598b9b0aa4a2ee58d5e +Output = 688f96bc9d1eb72407eb5fe1fce772e9 + +Len = 432 +Msg = 7edd5f6d39e3e642afd745bdbd784746b51906619b02bc329413d5409baa497976c72876e86e7701294d3ad4939fd2a49e50895e0e62 +Output = e6dff62dec74b1761f86000cb95af92a + +Len = 440 +Msg = 569ed436714efd4eaf3a841970d266b0371fdd74aeb184a4ead9bc2fef184fc677d65436ef5753f5c3eca9fadb662dd266d013f1d65e11 +Output = c07f2b75da65d3e56da5864724c9a014 + +Len = 448 +Msg = fe4804b6e3c35aa19879f6ce4cf01a0ae28d640797aa980ce6e9a0eaa9c7d132807470a576e275ece21b8e8a8cd9670e1150298d894f414f +Output = 0229e7c29c032d198c4865b62ff0d524 + +Len = 456 +Msg = b212f7ef04ffcdcf72c39a6309486c0eeb390ff8f218d6bd978b976612f7f898c350e90bd130723e1126af69295019b4f52c06a629ab74e038 +Output = e6684c673e7f126631a44a6ce2b1d717 + +Len = 464 +Msg = 88fe1b3aaa60db86678a7899a98f4abfa1a933a25f7dd3b3a0a0facbe7596312cfa99f219f884f631f7296c1aa22ce7e859e7a5f6f737c107942 +Output = 7283737747bdc8c80d31a25fa227d2f3 + +Len = 472 +Msg = 02c73cfc12c10f84b565bfdea9c6274bb8d67cf9eacf2584f9d2ccbc05ceb5a989a44ecc8e8908a81eab6681fc17536492dab9672b664f326238b3 +Output = b7e570204d38b7a0e53ab8ff9bdcc1bf + +Len = 480 +Msg = 7117a23fa001bf90eaa783654d1f79a854d924613a2e43e5533c5249a8f2541de167d05769701a8ecc71d3696473b3563477867f140a75fa0f1a873f +Output = 485fd3fa3352fcef48a6b158429049fe + +Len = 488 +Msg = 03be6940e859f9b072660dff28a187551c2425481dd0555d2dee4acc36164f84f8505b6f467ae6f772eafcc9065490d9b4ed12a690d044bf7da14986e5 +Output = 3ee166d18e8f1e2e99e73cae7338a58a + +Len = 496 +Msg = 65ee51a2f70fb080a94e31815a62c1ae7a4b70a7bf35c89e199e5da6e9bba62e6e180bc87f803f30801cd0898fdefde9fe21c71806894b95b9314eda3905 +Output = 6466505b7538dcd2976bd6dc41b733bc + +Len = 504 +Msg = 0db2c8242af9549bb0e55b67e7a8176a7c4f2d44df9a31c5ea0b6da8c33dde7e037780e81881cc09e8b67e3bb65b9b014a2fb33e4c4363a4f20c1f6edbb72e +Output = 2b00fb3c1f10398ea50b09d936ea0af3 + +Len = 512 +Msg = 2c77910745db9b8247bf6fc67c5741c4672a4b60a968cc69217d51cf57e633101b4361f469ae5f7a904c8f129321b00cd029a451dfa47651bdb19b3c2a1e7875 +Output = eabada7d7e1006e90b3e4515a453657c + +Len = 520 +Msg = 25cf2df2390e437d72184b3229ae917e294354f6c1b9773e186c7929c171a7218f2090caabcfbae2e3e1936c4500aa0deda61fb61be259838959f6e3fb8b08fa17 +Output = bf61e7630a35170b0d1716009423f38c + +Len = 528 +Msg = 2841ea01ba076375008a1bcdb95de6db7c8c34a44cdd41c16c558b0574fe8960a5e89a037a6e3cc57fba7ec6668cb8525836790889ecc13b0f3a7098f4d6ff098a98 +Output = b12b908b047ded5120cb93c1022ccadd + +Len = 536 +Msg = c4265d53949a9916249acc2a2522cc98c6bad938d502dcdc278feccb3bf516711a255e5481fa014a420efdeae8d2d3409ade8cc54285fa8deead40c376dd95535f9844 +Output = 60df88966b16c136453e6f906ed3fc33 + +Len = 544 +Msg = 488fc4b5263553cecdaedf82e11ed0309ae8ca766dc476e9e9138609df70f374c58889595c2ba63091a33fa8a14423e1814484dc7dcdb3301f512bfe521ed126c7327abb +Output = 9b0ffd44730f9e79a34d727a457aee2e + +Len = 552 +Msg = 8d926382e52900c121c96506322faa1b9181a78280885b5092198f3f6dd4b6fecf1218cbcf182f446691517a2d3b904868e0dfe3448876b15ded775f832fd12ebec9648d8f +Output = c64c31e504f8ca9aec161a74e74173f9 + +Len = 560 +Msg = e3d12ae6c985154e5ac1d8d97967238ce7c3574dc40933f752feb0aafdf5296598fdbfd6ea59fc706930b7bf458637f8a86b9bd53d72789fef65c58cf337f44c083a62dffd92 +Output = 98109ed8f3bd25e5bdb08120101d17c9 + +Len = 568 +Msg = dc27ccbdfb02dfe1bd70b3481ae00e76198a57008954f193f2f2c737cb5228d5ed37d6f7482459d0d57b997ccbe6ac8916f6edb5050a4ef94373efc708d5ef9190d0828acde043 +Output = f4e5b69a73e7a5902139f0faa0cf6769 + +Len = 576 +Msg = 5a4583f87eec910dc7bb63108e35c8a8ad5c0613416ac172aec21f67e3262ae2df2a763873e903764af664f42896212d6f2c5bcde7f4ae0cbef45c3bce30a79c1f1e7e77ad595c6a +Output = e3b8c83579bbdfc5a3ee384ccaececdf + +Len = 584 +Msg = 724206140c277b819d3267dc6f52873c50eb40c3e9d98fc64bb3432dcb4c6a1d108009d56a2d10d6657f8c479f711f97d690ad644502599c31c8b0e2bf40233308eebbc96f7b083f33 +Output = 1ff78d4835871b5ac61695cd0dd74011 + +Len = 592 +Msg = 17380b9ac2fbaf2be077012560e621ba031c66747818a46bc5d9aabbe8730f35be612f55251d70745deeca3fb501866863bc459cb34f45b4648ce02f4ef855e04922cbe44b3393d7d0c7 +Output = a0784b18be3739e413ad67db00da26f7 + +Len = 600 +Msg = 1a26596839fb83304bc469fbb56434d99884b8e3f82ab2711e8d4e8d3a28eda74d0d248a467c088e6bb4a90ffb09dc1f12373e78ccf675b4adceb9c1412d948fffb7e50b73dd2b519db100 +Output = b92054016375be5e524cd5f5f4d35859 + +Len = 608 +Msg = e729a6d311f98e570f9d0507ff0b3a26a64734706285665b608e839d0f6493eed529470f003d890bffa758bdd2b6d392bfe79391470a3e9858a159e8c4895ee3f2dc0f15d415097218759cde +Output = bbadb8e84fa9b6180fc150a227934d93 + +Len = 616 +Msg = 68fc87075184692cbfe38e3a5eea0f3533574466755636fd9f4757fbc3c2714f21d8dd3ff89cf50a9ce3cbccc9471ca137727f0d6e99e29cdc4637c5255b6b14ba549889adcc7b3bc4422840cc +Output = 7c684261b9f70af503a1862f621bd0ad + +Len = 624 +Msg = 701f7bdb5258763e71664a0976617d3db45cad9153f3d1abad23c196f85ff97126df9964093cb1d9bb3abce83de46a125edfa333def8c8b2d4ff3cfb4dd8232f36cf69197c2c06657107810c725e +Output = 45f89e231913d34d10d5acd69e3b559f + +Len = 632 +Msg = 01689bbb62cb2256415b266ae22022d8b49c1fd4264f288ebb81fd12613b0c6dff979c124d394c7ce81ebc14a6958a54268a802dac0a0ba62c04efc7a54d3ab5b1e7761e598323d72d4465c495c6f9 +Output = c32c9a3bd124c5d6345b74c0468de6d4 + +Len = 640 +Msg = ea54c5d628906e084a434dc2599fde5dda66eb4e00505ea71fad54e1644b72d8c49a7c17320e235615c51f41f96a7e7b84593ce3ac0313162894943524d477e8394b30a29ca9c3279665d84c34a312fe +Output = b86ddeca073f876404af9ef30fda3efb + +Len = 648 +Msg = d89f058df62bef6ad66ad4160585ca9c71834ce27b0fe98a4d7c39176e061551935b07eab95a0061701a49277a2ebc01942734ad945b42c8b4e522ef2eeded25092a0f7432a4fcd7cebf1f58cf751376c5 +Output = ad9292bf5f0f5072d510d5def5c488d1 + +Len = 656 +Msg = 82652b77ebfb363361d14496d3eed375cb83e02f43705747ba0acf52871c74146c2c44e66eff7f5ae45f5822cf1bf12e6950861501e7e9b6055f2e1f61cca7ae07201375cfaa12e382dcdca1315133bbcc0f +Output = 29e3122580ca889e0cabacd839a87462 + +Len = 664 +Msg = 2469f101c9b499a930a97ef1b34673ec74393fd9faf658e31f06ee0b29a22b623780ba7bdfed8620151cc4444ebe3339e6d2a223bfbfb4ad2ca0e0fa0ddfbbdf3b057a4f26d0b216bc8763ca8d8a35ff2d2d01 +Output = 00ff5ef0cd7f8f90ad94b797e9d4dd30 + +Len = 672 +Msg = 6785ddb0d10d2f3de7dcd06c5f9c53d6863a826e8fea50aa2b6c0fe45a8de3ff80f0774dbb0eeeb0747c1d00346df7adb97748a64a9aa779477ea5bb04fc4baad7e0c41170ed566c6922974d1e3cddfebf7cf668 +Output = d4b8a003adc9d2f013a17f983d61b924 + +Len = 680 +Msg = 69ab543865088fd6d608d0916d2edf1fd30b59b832b35628f66f4821d5b127d50c4dcbc4ece599d396a5619f0331871047dc6131161be13f87397400184c2955f26716136f11f80fdaf6197876dd776ac1da22bff9 +Output = 7e91dab959964ca2bd44bec7fdf797d7 + +Len = 688 +Msg = a72771a19908e83341381e80cc81c44594232d5d97785c8827d4626ce3afe7d9e50606513dfe5ec89ecb65a858d000188607517e89a4d042b5f59ed6498d16f3a5a1a425b7b2da89b76cc0d514cf6c9aae8cd3c645b2 +Output = 05e226a5323f74ebb65f81e3b135e55b + +Len = 696 +Msg = f3fbeaf967bc8ba6ecc6e95f8cc688e5132ab0b221e31dde7d69f843ac0006e0c33b207b79bee38a8047a85416f0b654d7aeb7ded51e6905ea8196bb4d04463a644633a3d9147de5f0779fe118f0a2ccc00291d46bf12c +Output = 186ed64b27580f3f96fc3e0537be9343 + +Len = 704 +Msg = 2e2c00cd7b5e5f0bebd4efcf897daab4d3edadf86468f62ed03c6c32d0541f629f0bd20ba33eb72250a579354a637fa0c9db700442c6f2f54482b8f3a0adbb9cccf3c71f89243af4c48a09cbba7903c260275ada02be5fac +Output = 872d32913d632d57119412dea946f5d3 + +Len = 712 +Msg = 24263f4a142bf5171a07ce8337ce60585abfbdefca19f8a2c331e58364c0214fc981529d74fcb05bf19cc57bb90870ea58b030c2cba69fc02cb03df8919b6fc731d2c80ac82f868d3d1060c782ae7fc4bdaaca62a5e966c02e +Output = 9845df02929f6d8eb8bc39d59a1807e2 + +Len = 720 +Msg = 48d08239a1f7bad06165a2bafad5e292e9e173fb965fa7927bf16a2189d8c716c709ae333d83f48610df9b9cee2954f2acee42ac2e96018988f4e717621c8923a1758174440f6fb98b363ebf5f47a9e7eec2fdd896a1207104e8 +Output = 470d85598d4cf1331c359dc61a010bbb + +Len = 728 +Msg = ae6d4141b918177a21ebbc69f6c36ee6044eef3db26586272a9c46f9ba17921c7a9fe1bd30f4bfc57065150c089fa9c99bc3e84e8bbbe4f21ccd994ed77074ac2d5f16bc5ded5589989883ac62e0f3bf3b5aba157f00b3a88bcbc6 +Output = 42d1e5e0f41fe163302f345d193e95b1 + +Len = 736 +Msg = c4d4374992a941d33f092c2b2ba38009457fb457d984a1dba93d371740dd6f6d8380808789b356f6ac374019e002e94144878912f7375c2d2d48540c82b50b2c8e86fb72b951f1c85001bf07d9d63119a4ad435fa38291507b330f63 +Output = 57cdcacbfd756c5f59375d341020b55a + +Len = 744 +Msg = a9fbc9058dadd2c10a5e888b2eb383e57af9731439211039100954bed5fee7f3a47edbf9304299e0587c1b0cfb5d5cdd0cda0d8fe9b08a5ee8a50cee331120ebd79e58ec174c409e06b8931e559dafa6699b476cb03758c736245e9473 +Output = 367f7c45ac26167c1446d311a7af37b8 + +Len = 752 +Msg = a0917412156a806fbe69d6b35aa04e2d897eb14f83ac10b40a365b629deb2f4cef06ee1b970e152d09facadec599b507ce3111c55e67037cd85e2a1bfe2377a164493fe024d08e80d44cbf48b54249992dd6dc3b78a3ad5d9aeb0ed698f0 +Output = da04c0b3223f5623ee5d71ea097afd4d + +Len = 760 +Msg = aa538ac429b0270a381e51757df704dd0371b3bbe97e973357f04652b6e18794215265a91612827872e2ae659cd6b8cf00fe84ddbf465e7ba49b8e9f5b4f2dd1ddbf37ea2f33e11c4c052c326006ba19361de0a0f431fe7c06490b8f58f274 +Output = 458468889dd5d1ffd4f4a4d2c7943f5f + +Len = 768 +Msg = 01f88c14a3b7a40d37b99c6993958098b94e16d5432763a104b97170ec4250a22c405bb49b3fbcb858ef3302b179132544138d1e64d330cebfc0b1ae3d2fe8be2b4d1cbe98f880a1ffd3fd3f2799324a48b1ba836f03ad2d230b69c2492b92e6 +Output = c1aee409c197ed7d16e121fb2d24742e + +Len = 776 +Msg = 49598e351faf44274685298931cc7480046e7fcf04e9d99c4c3d9777c309ea984af1f7683a42e2440dd92c7d5b4140a3091b4803bdc3456e94305f3c181c79916c6509dfcab427ac305ce4965585dc94e2890f7edf9eecd06bb6afabb1a3ed1c17 +Output = afedb5a285c35a1db65a9c14f51b82e7 + +Len = 784 +Msg = e64e6ff3e30e4c427af8c092cc7913529b1d340b5d5266438f6f36a14cf4b0521e13d2aa1470410f15263b13730acde0c33346d9edbaeb7e7fbeec9047ab977620bccce00cbfb1aa8319a6030b097cce0931e148d7521fec16570794469527e09451 +Output = a1be0b57d4ce80754fae7b241111ad0b + +Len = 792 +Msg = 97914f444848138135ccdf545db73938188edc0c9c3c5f22c6bf1293182229d5feab1c8f55554dab2d80ecadcee81744fad4461f7290e702bc1c45192226ae8cfe36d5533529754c02e0378bf539d6f13b3e81001f9d81edd1591bf766beb8f8219a43 +Output = 10d8103ce220b34df39854e2a42c6b10 + +Len = 800 +Msg = dcd5ac9481ff27771d9f280fc87f25855c21639ed89a743302a3ffe151eebf0109b6cedaa89a241681ab5a73a7c4b4bb0c1a5ff6ea13f7de625c4d9364366690ce10c7ded85bef87af9a264e60b8759df89ff6bfe9064e4fb08a77f1b501c340730b1d07 +Output = 87666c2d795dfe4e99986f9775b0ddc5 + +Len = 808 +Msg = deaeea60ec338c23eb9a6c88f033e789d8f9591f8ac787137cc83a1079302dfea129298bb1106f0a84e25681daf135fd59dc8329d1bd3d1fc4a4887e264598bd61edd0bf9cbb2ba73d0cdaedac372fb25a7bb9500335b136305694f3ff15129026e1272336 +Output = 2fe407f43bef4c3ec15a859d3937cb95 + +Len = 816 +Msg = a32e9cd68a79fc3144269f8bb49f15bc9dabdede0740e5b9e5994a7ff48764bae60c0782c02602f381e9ecde04d021bf275507ef2dbf961b613c17f5fc2f2b2949cb109307e120af0ff69a513799a59675f4921a48a0626b53be88be4b43f0e114933f712752 +Output = 576e47e7113cd173c1dbd132fac167ac + +Len = 824 +Msg = 07641fed3240b006c33eebf93b26847d030f45035d83a5f39ade9b398ef7b400410264bde7b5997012aa96272705ffc30e5630fe2ec1d3ad995cb24383d8c997f964a0e7d0ced81cdbeb034f613ab98dcdc4e8d7a8466b6dc592de4dbb33b1f698507c71d4d392 +Output = 729e1e3ff876a9771e416dfece5a3707 + +Len = 832 +Msg = 26a0d6f4467bccbc303864c2f0bfb94a0e8c26cc6c0150ec710166ac67baa7e122c225e4e366c9897c3f9855b40634ebeca8a6c8039d5a3078766b68ceb6222635e3b94666dd64becf6e92d4f0216f8f0558ae6be59987502a29fbc592dc5f62a52b18839887a444 +Output = cf3cfc0aed5b91ddafd06f4b0663c155 + +Len = 840 +Msg = 87533477e7196f58cf0505cf06cf9880ed6531e8633d3c4be7e9d4eefcec4187d2ccbff2226881255a8cf666fac34bbc3e6c31a3fd10e003d1f35c6378e9f75a7a6b17470cea3942356336532f34c5e1102e426daaebae80af62f6e119b8780cc85ac3e06d489e98a8 +Output = 5f43b8efec5f8a7e349c04e592714148 + +Len = 848 +Msg = 45828e50ccc09922b71982c9dd9682a9e1dcf6b7b7a3088a636a8cb40469285212c8b8e2e40ef05575dc436567db042948f3cce715be1b29fc3c421366c880f3354a6b1a4aaf91eb4b966031a34c43b6cafb0e11c61e9cbff238b675fec637b537726ea00889c40bc1af +Output = 921dbb1a3813f98c6fecdd66429c33b6 + +Len = 856 +Msg = 0f55d0708ea8aaa1f6b7e9e7600a7dbe62add91d28eca659c75ab946cf18439f1f5348a8fe0f53116723671ea38538051ec89b9873e33c23c9348f9862c509e971cd8fb62c7a2f2823ed0e1dd087a1856f63200b102338f9eaf00155f2bc2f50acca8ce24171a6aed31dc4 +Output = fe7707c6ffcb18b321cad4268f0e47e1 + +Len = 864 +Msg = f532cfe60ad57d5b728ada11233db2fa570e34d6e254ea54c3e2ef7af98a5c4698e003961b406045fc13cc97824df4d7db3a8a3e6a7b3a17624ce0219408f83585ee5528c42517f37afed711437a24293c0c33ed5e9fd2420adb9ea1e4a476bde5e42f66ac8b89ad15d46249 +Output = af13516966e1509a79559ed22702b563 + +Len = 872 +Msg = 3361a7d406329818320943c84c77059dbf8ac4b4c1f382d6856431fcb23cc912156699fc927edad761368a8177f9785b41ce9b4d987ea70bf2f9e297d5f6340892da7e892fdb2da4a5650fc14cbc65e993e439d0f4bef213277325be9615ae1112840084c48fb908665c7a90b3 +Output = 0d31647ea4c5f0f4bc981c93bd4f5f55 + +Len = 880 +Msg = 0cb4c13ec85d7363f15a518399889783621099f6e33b49914e87ffdf50fa7a3639b622ea5dce8fc0ba584fa6dbc3e4a1fc6b0d066e6b47ed3db292e3115a78df52354c788fa8b05421bc59e40b72174e25570fab7a594b73eed976352401e08c9e58c94e2693db066daff8a5f33c +Output = dea0ec107ccacab24530c8676be1f47b + +Len = 888 +Msg = bdd11f478abf985534834794ccf969e2090e07afead2c0b19dcfc9d9a09a328526a76bf7bc6106062c7abe13a180b93f0db20adbc8117a217aba88213a72aefdf783e65917c76d0e5f02c71e137403ed5eaf40aef3a7701bf5085c6915cce97bfa0c9956e51654d595c1699d68fdd0 +Output = a590401b84868b9643f46a261f88af2a + +Len = 896 +Msg = d80e1b1a18db4feb9f9767fba330ecc38710e92f5a9795aca1c83282564235643072a7452508cb6e2ea701ce4ae1ea91c562cdf4ba6b3a57d783ed936069f48f764c150e9a3e6acb6de74ec8b9767de3b5dd76aa853e247001a0bea1b7e7ec5233032b1c7e67722be4bd1692fad8ebe1 +Output = 29ec417e5b84748bfca63564a4ee396e + +Len = 904 +Msg = 46b9791df7c72bb0829d88411c2a0f5eea91ab5ac3d993a038e66f48d1a8bce89a9271adde4ee3aa33afe66fb6e735de98fa143ada7233815455d6fcfc54331465451b6786d3dd1bbd746872149caf9fc23152d9f53e7aadceeb0498adade3d5b0babf7476c0e2ac29d65572bbb3464a6f +Output = fdc00e8a84cafd60f6adb4105dcf1f91 + +Len = 912 +Msg = f2e2e8c9fbd7201e4653cdeaa33d50e08588df2cfb571cb4e264ec9e5aa286127621ca413832d5a6bccdd28bb32f12d013c760e80d538e24404754342c6e5bebe9d3944218e2cea01bcb885881270373c4de9cb1374859ca3a92c2f9b064f2bbb3c0edd5862e3494ca169758f56d4b540193 +Output = 0260be4857782edb5993dca908972de9 + +Len = 920 +Msg = b17977aced3a1184b14b0e41a04dd8b513c925ca19211e1abdc6c1b987ac845545fb3b820a083b4f7883c01d3bf28cb1d65dd187a24b516913eec4413e9b7a2c987d41cf018989ee01b4c63a5164166b9d25248f889e4ca2f1c3005e744c6a543465523cd8a7438ad447e942ea8dbe0cf088e6 +Output = 0c80f62f0bce5ce7691f7ef5ac030570 + +Len = 928 +Msg = 14790ff0914cf26deb136019423c9d791a09747eb19329aa910eae74614e19ee008a56a5d56119c8601a178d153076d16b0e82ff3017a1321fe9899eb4e3b02c3fe504643856dd90d26c301ed2a70547a29f2beea1002acbbed379c845fff1abf80f82f66235250b688f119421aa3222e845d714 +Output = 180b94e0c7dbf8f92cecdcd153144959 + +Len = 936 +Msg = 422332e171598833bcf48512df8fe793a795fe170404602a6070ddab2f4ab52ec762099e72ab9027c23e8b5225a2fb72b94b11406260e6c219c26c718749a59ad2511205b7756fd5d99a9daf5830e01ea6b44a3696797778b6a97bf6df8619b80af6365d653f8c05a70fa36fa0bffd5f14d89143c9 +Output = 18bc40d359a6d6e9a0f83a079dd35c4d + +Len = 944 +Msg = 2265498645181a92e52f375b67445bfe8dec5f46fff465152bea57054fdf904ed46cd8ebdef396f82127415ff6cf18b3aec7135c264719f59b6773f2c0e381860e1cabc45c609b04af6ba988532e975f2bcf7f8a45f0095eb134e12994ff6918787eab58e6e8917c3703581fa7e942caab0c8b188578 +Output = fb3e3a867883478b0ce57988b449d15d + +Len = 952 +Msg = 7ad0280104c1ec381f77f3e512eede76a59fd0d33446233f01e85a7fce15573fac6bcfb10e5bfa7721308fc3604cefbd63b5a025f7d1fe39746e2dd94b0552e9df4003f796b9fc1d2f05132956f16efc750bf330ce6500fec7955c5e84006e6fbb59ad1ac46458f2f000675f1c64c1fc86a9af3ddf8991 +Output = eeb8c3255db1bbc8ff19dd1d2166aee0 + +Len = 960 +Msg = 408bb29980e78b8981b204d1d09338f179b6b11b7a727ef378298594b1701bd33270d2c74a8c92893e45ec383e5aaa409833abdc2c7feeda201dec9fd5382b6a19b710dd9ed4f5b9aa0a7be9113521c261f516895c534c35aba7ce77d0b953f85d2613e26305d9a12ecb5aeb2f6cc5fd3ac39b28f234c18d +Output = c26ed296dd0c193ca7c6e7c458de9d64 + +Len = 968 +Msg = c8a49c7f25343031ff109f1ed01759c0b642857723875088d6fd85650a405f2fed179b795354d04facfc037633a876f6692bc2d6c27525279eb81d447ac9365768c8201fbc0304f1091818fd4c5a72d366761a26d05762cf8a467a1454563f2b21ff54fac9097421feab063a81f5f25f956bb4edb5f3af8882 +Output = 5a70dc0967a8888868426d55b3a38c7e + +Len = 976 +Msg = 507007d1727fbc4e6a8eebe47c1d2aa40273b1b61a85b1569c19e71d4f2b70825c90dfa002d98d3a8c7a30fc802caf031a8f35a0f8148559171a8d31fe573d2a397a9907090e0d565aa201aef527ae36f799306682e2dc12b2fbd3a4d354d7a9d1765e8fefe7e5acbc4d878344d7ce4383d9c9911fb65f875603 +Output = 3cbe0f7d4945d5fe01c56b2d3fd02d47 + +Len = 984 +Msg = f6bece16c4554441da934e18bdf5451a3d1c180f59204bf65d26403f4d35b63a86458fd0a399d6719e4f004d373672c79adf44263cf7458e06d33f30b54d7cbd81cf8820fcad396c3eb8ed133f10135a8439ed09fe7193672f413c658e53b91a2d83426f9938751c01f59cd39b2b2fba44529a1f67373f681f98bf +Output = 5cf7162112ce8fa0a69996153a8a37e4 + +Len = 992 +Msg = 985285fae3fa2a6d9fc9fe724dc24350ea856ebb2d7d88a40a5ad4557ac2b2bc7e43c307618d4e723edee25dc3bd3da234eb6d25b39735adbed1b2f2f9413ef72e199599924837684af10db72d1b4eefccaaa429af8e8bfbe23afa91b1574600afba43d8fd94acf8c8e9c5a714443ee0b8a85becaac952377d7cf55c +Output = 3701f0d8da5ca00fecc32fc52ed08311 + +Len = 1000 +Msg = 117666695855f097ab032f45a9364efa87dfce4e555ce1b483ef1498a36f31aa703d6479107a9c439677340bcb6dd3ed2e6f91af399c5b98e6999885723f0c396190fdf5c2f09548b49288292930f743eaff9390dce2052981dd8e5dc1cdea00eb577b05f71fa3500e3a72c54ce581a5c4771d1ac494a8105ba43d4719 +Output = 4712859d533486608b32d665f02982d0 + +Len = 1008 +Msg = 566d841ee05768c62ce5a78e86030c6336a7439755594587dff2177b09a4b4cdd43a484ee2a19ee588a8dc7926046e11b397403a9cf230aacf18c322128416999a6e1896d94bf7de9793d84f44c6cb0c8db1feda2dee31ca06aa691970aae954d1905ebf6e5b5af8802e03d88b520d9aeb7de53faf552f30ab307326c91e +Output = a7689c5485a0e7503990b6cb8d7d2778 + +Len = 1016 +Msg = 44d9a1a7a7dd4cbc6009051aebb65084125860afbf0489ee0f2ff80fa7b9a27f4b2a7ab5ad3be7ce82987575dbe4cb06b3fdddf3c4826266a0938928fcd8e7c14fc5b4e19c1c38fe8bb3803fbf77559964b16f380788e520abc7e81419e1b1b67733b8f11c882794a3e28e3f3e78d8834dfb7e45301dfa6359547f9ba5dbe7 +Output = 1cb05aab531e549214aca9a522dbd880 + +Len = 1024 +Msg = d001753414c6ac3943c162613201ba4dcf4fac2960606385104fe360a74aef86998b2a1d42897c7a7070b73922cf7b8c8f9157d36a2f306d6524e7cef4a036d25380db51ca7ef9f430a5bb47ae093a0fc5b4a1dd92e38fe35173bc072196e03606cad0fb340cea508b48b4b45e15c07d789fd37061e4458fdd24ab32b692b459 +Output = 1ef6463fee4fa79aba911967a32e692f + +Len = 1032 +Msg = 3c8943238ca224403006462eaff08b9226dd0d7299910f52875c339dc19bed477c8137b1a41886cd7382fd824385e152a0474e3aa25528d979ea53d54a6f277b3a3e1ea5c8abd0e15f4522cf2b59bacb2db8b6cc8aba9d8c298395ea7c85d78c9e4661c89f64eac51cd61bdd1274fc46f3baadf2fac956b3bcae60a301e7e6c3d1 +Output = f0a9566889259e0357d0f9111854d9d4 + +Len = 1040 +Msg = 93fdfb3cfda1ac94f20dc95c83dc129f9f14072ee5a85a43b741a565903d598b97f8f684744b829662533466857470177f9df8b63ecd60d617d6c2771961b42d9b32777e18ad718b3d99ddf33f25c2f4722821d318ad737e76af53712e2177d6c832e4f092ce62b9aa682eca59f7f07ca23eec4d1b517c85fc55be1976878acf4680 +Output = 32f96dbd1b30644a05413ae0ad892555 + +Len = 1048 +Msg = ad26e1281d5612990144bb80df2ac37de947f9728b274be4402638a4a93088aee0ca3a510a56be902b9264c93f63159486d141ee1f521897d84bfdb845d437c90fbceab28fcc46309b50ff7ba0d4fd26f12c54465fb776d60ae4a85a77f4b2c3e202db93d5411441f98674df2d06e4fad5601cc274dece6a7ef720d26719606400a6f3 +Output = 3c75bbe0221272a5ec4c606812616c32 + +Len = 1056 +Msg = 25c1b2c065b7eef15d6947dc038af5e3fcb17f81aa52dfdd66ede19f0a85cc02b354442ac5bd6fb92f82579df0378f2bdaf71a72955588c9e89562ab341dc8c54126594c3db7539402d4fbdf98f34073fbaf9bef1ec039de2f2b5c8d1db6ff1a589fb9ced88de3ac60c7fd4a04a44ee0e943cb9f4c7b3a44c51597eccd39b72a7f272b57 +Output = 19d5f80b7fa46d61f6d4f7fa8035e115 + +Len = 1064 +Msg = e49706130f266af2946e496e0e722a494a9966c09eb124b37c33880646c92847640dc091959426b0822b80859960b4ac1845205d68708c90ad465c659b7a0ac28bd0d43ece27b23e41b68b5d2196a8122180698dbad937e1c3ebb96841764b638067ace263e7f6e4f897d4be4f1aefc18dd5a9173cf20eeee5ab07d9e1c5d1726c5aae45fb +Output = 88aaefdc72313bafbfa868feff53cdc9 + +Len = 1072 +Msg = a9aa9635a131f96c2282cbe23df753d01aae8866f57f3063673145e4e7ed9c7990f2c97e258b3da9523eb1df3447c84c1c45efb290328801939849292702de2c0fb1d677d991bc721c6c8456ff5c2a3ffa869582e105c1401e251d3b3dd232e9af5086c7c72cc0f009720ceea420c1d03ddb427ceee122478f3f8bc33444e0d8f635a117f742 +Output = f21f8bad47c06af5b968e83c7c7a6ca5 + +Len = 1080 +Msg = 5f7737d0a8a5cde906d1bff195703da824e7a837464e4816a774412d9d23c33affa582723a86666ba19c833905454bd886f002caa8df7300aa2be2fe1308413b8d4aa7c6f628fd2fb540fba54adc535c29742b32c974d191f83eaa9771736c74b06f8d140512fcffe8c60e7d8cbdbbfdb77b0ab7d095ca913ab8833fe0ecacaf111a1ea48fccc9 +Output = 67fb9e1b7469ecba15d43309e96a9a26 + +Len = 1088 +Msg = 5b2f29497050e5fbe78e845097b1c3da5c7678efc77addaa135a2c335b196c400bc28adc954eab6865c7c1df16ae5c5ee69bc4e36723445478fec8c47469abf3a9caca130c93ddd22a6807946284ab00525982bf8f76ea8099ae81400e77f3c81d9010773ee7224120b97df8e3fb57ca88f9da0ca63d78365eb27f2e9009edc94f5c858f931122be +Output = b829a25a9e73fdc82cbd43aee2247f7a + +Len = 1096 +Msg = ec3b7ed4671b26402cec9591a7773cfc82d0b644c8e309e84b50289b4379bcf437d823672197b974cd5a571e82601a9fe4ca665a193a2a112ba06558ad51e949a25a5f7a9a138b2c1ef7d1c54eb2f881c97c2f64cda64d73a0725d232e285a12f36637f51bb822d1e8680a6f55985f0af98d194a2d4efb76716e19e50c2698b5f3a7b5c0ecad08ccf3 +Output = d72fdcf12946460a0f5731de3ec06ec4 + +Len = 1104 +Msg = c73393b8ee0f52c23a2e29e329aa1a1f7fc6adf78b244a3bad38e62015fce292cde52fcbfa16b7255fd5f82c223bf2f8d32f44baaa95929410c229ae6133e686f17f54874d8b14dec3fd828924f395b0c8f40739d327b697b7c24be2fac6192d3aea48146ed432946e8f0d20b63acbf066fd3e9d8e4280eba92192e5671b4330b00c5399e55bd9f06974 +Output = 2a41a378c52712e73094a19ad0ce03f4 + +Len = 1112 +Msg = ae6e347bcf8d95681da09ebfff868b60253e2a716b41df520015ecd3c71fefa5fdb9ac0f1d840de200ff67af4959ff370084cd237d8b80f68825c23fbe8abc133785ddba65cbd7a93f8bebb09f466775e9e16d21eef9f55910761570a66381dba2fd4ee57109fba4226bb12bcbf5ca01287d91d286324865df3070ce475144e5864687f607e77fbaf1c842 +Output = f5406549788a55d25950fc88f89a6d1c + +Len = 1120 +Msg = 1c991670df4762c9606c43779f106eee955e36c3d2b3526165f5dffefc26a9cd4c39a675b324c3c31c36e39b24ab25357b7e66868c7e08fb60a4f16dbfa4d65299c2b930a5e7b05848f4e9d0b856eb9161db1ef288c38e652e1bec613746d69fcbdd5789fdb9b2f0aa4d5bfda439476a101d65f10dab6d059701d8c1aa352f1eaa31896802c150f30cea430a +Output = c8a695da4acd0cab62c743a13cca569e + +Len = 1128 +Msg = 0435139767d033a04a6dcbcc27ef43b4c940e63f033b3bb1a1ca92e49f4bddd49939c1628308ed519a50ab959a2eb4cd32e8490eb5cf7fe2126adb9006d01e9e90566295a66a660426bf27c70fabb089f1cd3288a2f257983339d46b22763e0fd1d51eb837c047c0d60267eced2cddf1ee37ca37326c6bdcec81a6fc5c05e23045fe1c54a0d0378e9260948b9c +Output = fca70413d3798cd2563da6c8e348c570 + +Len = 1136 +Msg = 0dafd5f0ef32170c2dfb6e3185e71539b2ce55dfd759022e21134839a8c3a80d97fa3de48de8449b4373db666e8b09c3e7b7ffac09f49d115ac038856e729b3809cc4b2584d3108c72deb0a383eefe89a83d137b771adc4ad2f3d50cc3b41312ab50881b9c9c83c70364764f8ab9fc723c881ab3ea71c5c1ced5a5376f311985c4ab7b2e9ceba5353e2cb4d14c93 +Output = 90ddcfe28cf08ccc8c129be1d1b45bef + +Len = 1144 +Msg = 8d50b1c455f21bd0925cc07910b57a3f2299c2c99e11d17c2ac2044cb66485d24a76289f023093d157baa2e49f9b0acad7743c3da1ee8c5489f192548c17d0c9db6096d6dc2723ca72540df37ed4e3b7a64610e055f7023802118c56b60f89b7c874c311ebbd13e36c94c951b4464d2f1477075cc2157d511e8abbf93a36f8c49a1c76f738dbaa46cbe19da449db92 +Output = c8c416c086849ce94db149e8c11fe7ec + +Len = 1152 +Msg = d6fbfe4d47d71b22842e30d4d9269bda380266a593f3c81e8a30ef4f4648fc60a5b750c697b806b7c85bc0e17fd7a75bc621addccbbe162b86d536d69c887c278384af54e7d778f64d0321bcf7509c610766c7dbe71aeed6e7899160286368e6ba8aa55f01dc79c75d4cd9cf093882d344f73b0cafb15a07f7738955b382ca8590f0b94fab6e11123e6172817f386298 +Output = 2fcdc92660425ec5d5385280ea201194 + +Len = 1160 +Msg = 6a9019fc8e1eca20bcfb370ab24421445a86e97b426ba73d4c997701a7d71368fd71a7c2eedee0d4bea146d94a6dcdc6418ca6d290825b361eed1b31baaf5350524f7eec659d3df4ba95aaed5386e9369d740191e9baeadf1ff3e82bb11b17eacff24681daa108081aa0094eb3d79f1dd504a1bf345c7cc0b87583f6756387bfdd22a88a34346a99458a0c0554a8150253 +Output = 67406422554ca2cdae7d92157ff8c888 + +Len = 1168 +Msg = 83fabe6b289596285eeaec662848e584f2b285441086c887675cee586a31162c49c50e6864416a24061dd32f5041a253736aaeda23d061504806128bf6218ee99f1cf8d9877bd49d792f5e4eb9ba20203993c3e70fcc26da27f2ad973535dc68eec824c5788bfc1a1fe834ca49fa8673acf56f74bec23dac6de9688511b425319f9239341fb90b23600ffeabea4bfdd43457 +Output = e2b709e60f5e1d8ccb21a79e7c117bf0 + +Len = 1176 +Msg = 4f03eb5814853935680c59fae9516e4e7c381d4e8e04f16da0c7fe7e021dc50fde1a58f97981bf35b63799f1dcf706e39846c5de46aa9aa36c17f3f987aaca000b9acdc2a56bbd0bc364147b5644ead9d63119aa87f1a002fc5c459bd9117f24dd6992db1fa9fc5e977c10bee1a0e1d63edf61dbdc41ca3457803d8b7fbca9245c70ef6d6fa544d73b65d6e50473b282d739e5 +Output = 6c41bc961c02b8deec7cd98bc65494b4 + +Len = 1184 +Msg = 3d74ee502b47d8a81ace8614ba87cf1a435a4dffb9ccbe976e75aa5bc8b447bc44a199b7bb43ddaae50428661b614c8561e6fbfea35a2ff63f37c8d9c45d77aaf906dc9722fdebd17e0b949a14b2a3a0b01ee58928598ccfe3bed4ce9cb0e71b648cfe18e6dbcac5efcd12d92ee39d1238eb52c9ce319ec963f41661d9175eb88c1949619147412f4030ea4bef5a028301338ce5 +Output = 13e5b6a3816628dbdf519187f851c3ee + +Len = 1192 +Msg = c3cba960bdd0073e74f01608731e4a6f72c1c12b1d65264a17b0d5c83f983f5f32d490a0119090438465c7bcfe88e50f434261e428a05fde9a6bd729e25af4522787ba5c3520ec107d5f2d945cbc653fa06166ac48ded00d8b1e31c21c99712badcc6ebab2e6e34c67c58eb9142092a98f061aaa03873f80f1b12cbc74be7f91c98bf3e20e4c3c9f4a7f3352ae1e33f51b19c307e4 +Output = 2acd2d70aae90cb75126b3ae89564ea1 + +Len = 1200 +Msg = c4d91eb7e3e5fc50bda9fbb897279eb430f0c7f099a12a9e47ae0260675e026871178fdd00dc2c81e11436926a8dd1ee0dc0227a2d57bfc32fec63e6d514e7aec79c6dfd7312df6d178798361c946053a69b9ee0694fc9c7be77209bf6ef9bc4eeef21dde38ffb5a888b896e5644332c2408a3ecf79331f01bd69f4773f707f20d981146f95c69915ca77100c0a633c0ae9099647f2b +Output = 8067a8cc08465b4297e1eda12fbb37db + +Len = 1208 +Msg = cba06a5ef87af99bc3cc1f0ff3d76d193c0dddda06c5b58f7032ae1e939656ee0bb3b3fcb482292cb1289dddb326dbbf77d035e991006d26690bd69083f4b56103e0ed0570cadc74b87880be74aedee76ea1a4f660ae0d49ff4c052b38408ea9ba1062a1b4b9d91be0a40edcc0d73d392869702afc385b9f3bde84173ce0a76e382958f609b7eaca3195905f1e09c25cad0ee2acec0420 +Output = 942a63e059f5896cf029eb58b9fc2643 + +Len = 1216 +Msg = e00e40e9e5febbda27345f5ba01902b8f800be714107473ee43e7b51db0c3bdb21ce7ad167c093f00921e0ff4092885499c09899a64256d0f3c5d2953b66bda3dc5f7e9a89e683003f52d5857a80f08ba875d1e5de4450dfca32b07fe919750bf90a75cbb2363210b10f6776b5aae1650d6890de51d5de7451d03f984bed0a1a611787ed497a492b47a0be5858d904ebb0e1fe0a67bda896 +Output = 554a139b58c24dd2ccd00d943638d7c5 + +Len = 1224 +Msg = a4846a5b1006d38c7531851ffa207a390534e352fec1128857069639c963a8d0e0c6c6dfb9679d6f0bb52c94648f2744b5b899681185ce34b2d970b43d53f0a846c6279217ea3e0dad51cb60049c3c5395ee79421ca1c56f9e38e59cab9585dae16dd79cb1f87d0f66eda9ae62ad8311abbecb05a77cbfe2240b3f199b902f0db6a11d240ffa231d3b710fa4072cc2230111d6dc3b7e84354b +Output = a44d7cf5ce2619161b742a7d2c198be9 + +Len = 1232 +Msg = 290cb37bd8d4136fff966fb5630a6fe38fa4872f326779e1c3fe1b0866095a6c13b57fc5f58fb12a109abbcc279e10e4ddc40cea1a607d08b00e62ce3f00f3275696e18cda2fde77ac40601b86a3a2522631ecd7af9215b54c5446ff163b00c238d86138505da33e19b0e50848be2e14b312af5cb8a648d0ddf94e03b4618c2502a387311fc10767a013d2fd3499bb12cc90dbe3ff431f41ac24 +Output = 2fbada4ccfcfd91d3cc28e58562b2c96 + +Len = 1240 +Msg = 0b2daa7b5f1a66fa08f0ad096b53220f6772c8562e8c71b253b4796424d1b33d39e8a4074d9eef204df81168af664e5d0500eb85d20f9e0d9ccf43af4273d0d9906a8b0b11e17b8024891c12529a5758df18b0119f55c2c50bb7e8a994bb3ec4383ac85052ebf063b62a36cefdf723451e427ec13f66c323caf3d11ac2b0e34658e0c19eb9c5380f2b63c76558869b6fe906be5e574a8b6ffe0b65 +Output = 0e8258e842021f27a4f509151b2d2adf + +Len = 1248 +Msg = 4c386d97ace346b2a06faab35663ce8a4c54c295b5b9f6161efafce451ca8f617ab7d5ab88ffe117d6a67cdb0bc5250a3f2556c65f0c09b1d2577ba45cc930a443a33711b175af215a338a8d5e8b918a7176a8fb390e54e5f79f7a236a006a5bf1241b30efecb8b9733f5c32195d1bf22b70419d0c65de9bd7f982c94317456eca610a700a0d05c86bf27b3302e2c92ab53ba815a0b9afbcb88e1afe +Output = ac71d8e087ae133f3da590e1a2b54d48 + +Len = 1256 +Msg = 51d83cd6a58e428b72a7ba21fd64ad0747cfcfb7344ebde9ec798307822961e2d4d1cfa3b212be04428921c0a2ecac47d055dbb7c7dd3708eb6dd586a7d11f85550ed6505ef65862a2f91fd91a3e8b27bbf3e10b9ee193c05f43c274c3d801fb9d375cc5f263990d5b9fbd54ab83d20ed250e89b01815a780fa252b71c658fac74f366eab580076e352202199ee30a64db15f84f38e5139ac4338e38fa +Output = e6521aaeed7a34a1d90bf96b57436122 + +Len = 1264 +Msg = de1a0cb3f86e6db7b7121d17851aec36cd96bc38b072da09fa9b8ea15463f087bb27fe94302fecfab1d5bb8569ea0d202455389a05fd99aa7bea2b3171a757c0c5ea0e5afc76167b3441a15859d224699cee66252173d80df88424eb4fe6085ce6aa658cc30d9341269cf81bbf9cd91a1fa86f606d9c3e385ab2a25856ebab6305b12ab2ecba0c54712fe753020ed33994cd7bd34f40743587bccdfeef7d +Output = 28377f8e69d70ef26124d852686c93f4 + +Len = 1272 +Msg = 812a535be7c8484fd3ee5acc80b9c377138ce6732b5885cdb91b341812a70e5442a5a615a3d941e1afa842d913d7e59b04953068d6bc2782cb5440d8295916e58fbd61d688b126eb61212b1f387dae0b56bf5608bfaa6a94064f41f766d6fa260f7b6de7bed760369061ffe71834868eaf13419c0baab6ca141621bbf2a820dc6be6b0906cd3588ae571a479da83d5ebb897d76be54473ed9ab1c66df556f2 +Output = 6788c3fb69eaae58cc8fb2706f8487d7 + +Len = 1280 +Msg = d67c7b5a16092b862469ac62b297dce62b621c7f95c35404bc6e38eb8da7cabdc05720c7ba5f6813b12c2996118bccab1ebf5ac0dbd2874f2b28f011375aa16e0f41da379450139795273d4738664b029cbff139bc50ab07972f02678e460ba50d6130126d8532fc19846fddf0ce61d3eb8a685000e5c91346aaf6575914104a00e0aac00da5d029856847c0016b17065447476f6e3ae85b81c25547626bb845 +Output = 8e397d263b820763fa2eefc4ebe7da9c + +Len = 1288 +Msg = 11ec5b788ef8e8feba7a92b3bf42f39d182e8817480704d1cca6ea184e5b5a581b8f2bdfd7a73be3702c03c750296f9ad7d5ece10872c2968275a470b2e78565480bae6ee7410e8a212ad105a20d34faab7a9717c32dd3a0a934cfb68c554eda7eaa0bad278e08f9b6bd23f51db6eac57e64b041e0fee1f7272c9273436b5cbea7b26b24fd56d23a182b21202aec3a0437dc60e7c9ae91a4e6a2162e3ff25819aa +Output = 5b8d71a40d39a84644888577b8e36702 + +Len = 1296 +Msg = d69c572c0ff38e1acc65839b6b6333c870f6d80284ae0e88bedc3448220015f66785c75cfeacd4f14fc798ac46a7ea1a0e57ffaf1c0b8a5a7053285b1794fc59f5b996afc1261a0851ed9e2b1845d318ed38e8530d9bab806443f230087639fb07a08ccf6247a88759415dbfe92536e794ff5c976048b8222215586efc8e140325a27161e8f9c597f02a9c11c22f5bb28b1623231cf8f86a332f23befcc4d499d727 +Output = ba052f0712f398e3689421d1e3fd9632 + +Len = 1304 +Msg = 356068e7143f9e1079afb0f1d2f71a2710d6f47dab721675e7917f24570bf8439f80f4847d46bb220ba5c7bc3e476e63b3eac2f2ab58b69d549982cd4a67482c5de2f7fb958570ac7359e7ad7a688c82ee756b16dcea91535a1271f01088868af7f039f761e404d73a31d86b8d44bcab49dfb8924611f1bd83641534b258f988f610811eeb4cc1cae797619f7fc246064d906e0ef1b31c0356f7364237beeb4be1ac98 +Output = 19dad5c027dd8b7b92aaa19b26d004c6 + +Len = 1312 +Msg = 5fa787ee1349a3d102f0919c2542b13d7bcea5e25041b1c7bfdc684c7625854bb9dd17a8aa33e12ac7370089b491cec83b7307c491cc2a0edabf22f6f05326e8606cdefcb6fac7c8fb70d8797b786622cce445530be830ee69876a36e64ca6295d3a2510c1051e54a6836293035d40f3360aa6b648fe8a0f731e8834e178cdb5b731330c52bead75d057e600d3a925e481cc7416d074011a006bc41a693f623576385219 +Output = ddb5585952baa3f4571fe1eaab700ca2 + +Len = 1320 +Msg = cdb093f88db6efd65c4b69ff5a20bcd1c19a88ffc5275386bed3cde2881658812af0c778b738667572323bf4355f8cb61499a26f3d5fccc0226da664db8f9aaec5b8a833704e63c4b8c93c9f317c03e5c9b2ab4fa8fd4e1d5bcb7050323a8819e62ebd917fa0edaa7539f366161f2a47270f2d06ceace188b016b60d56bf29abd57a8efbaed50c12f3a9e9b2abef07c278d5affc77128ee66876fd030fc5864ad9c5a3d7c3 +Output = 2820a119caa0001cb0eb3a457d74f960 + +Len = 1328 +Msg = e4e932fc9907620ebebffd32b10fda7890a5bc20e5f41d5589882a18c2960e7aafd8730ee697469e5b0abb1d84de92ddba169802e31570374ef9939fde2b960e6b34ac7a65d36bacba4cd33bfa028cbbba486f32367548cb3a36dacf422924d0e0a7e3285ee158a2a42e4b765da3507b56e54998263b2c7b14e7078e35b74127d5d7220018e995e6e1572db5f3e8678357922f1cfd90a5afa6b420c600fd737b136c70e9dd14 +Output = 459ce4fa824ee1910a678abc77c1f769 + +Len = 1336 +Msg = 18636f702f216b1b9302e59d82192f4e002f82d526c3f04cbd4f9b9f0bcd2535ed7a67d326da66bdf7fc821ef0fff1a905d56c81e4472856863908d104301133ad111e39552cd542ef78d9b35f20419b893f4a93aee848e9f86ae3fd53d27fea7fb1fc69631fa0f3a5ff51267785086ab4f682d42baf394b3b6992e9a0bb58a38ce0692df9bbaf183e18523ee1352c5fad817e0c04a3e1c476be7f5e92f482a6fb29cd4bbf09ea +Output = b7b9db481898f888e5ee4ed629859844 + +Len = 1344 +Msg = 5d9ff9fe63c328ddbe0c865ac6ba605c52a14ee8e4870ba320ce849283532f2551959e74cf1a54c8b30ed75dd92e076637e4ad5213b3574e73d6640bd6245bc121378174dccdaa769e6e4f2dc650e1166c775d0a982021c0b160fe9438098e86b6cdc786f2a6d1ef68751551f7e99773daa28598d9961002c0b47ab511c8707df69f9b32796b723bf7685251d2c0d08567ad4e8540ddcc1b8a1a01f6c92aaaadcaf42301d9e53463 +Output = f50af2684408915871948779a14c147c + +Len = 1352 +Msg = 38c0be76e7b60f262f1499e328e0519f864bbb9d134d00345d8942d0ab762c3936c0cd1896eca6b77b3c01089dd285e9f61708a62e5ea4bf57c50decda5c215fb18ac149d7ace09ffdfed91e7fbf068d96908e42cf1e7ee7bc001c7ee9e378a311e44311923de4681f24c92eb5f0fb13d07ef679ded3b733f402168dc050568dbf97fb79afe8db994874783e27ad8d040ba8e75343c6762c6793a42247eee5a6216b908817f5edbbdf +Output = e4786ad8f2ea9c8e420a6f50b5feec9a + +Len = 1360 +Msg = ec586d52ad2ced1f96bd9458a5a1f64bc1b4cce1fa52517513c9ebe63d0d0eeb26ae5da73208137e08baa22651599a01bc65cbaa467baeceb8cd013d71d0b2406534fe2e6619da3aa380928f6effb09f42ba1fb7048e90d7898f1dc259b52c51b2d2970cd0c70afb6cf8acba83fd01cc589b0f31bcf2bf3b8df7879d7d2546c514706f6cf97b6a6b6d0a37d018ba553108f0e240f70f03a0ccee86f76589c64594f6cf74679bc330ad9f +Output = 191a3710c72d11da7a2410bc73ba9d9f + +Len = 1368 +Msg = c201dfe59e03574476e3c220c971c1685ea96ea137daed2ac10845c54d8e6e53c307acdf956f1bdef3868ab53e758c7cbeb4cd02972ba311f998e5f3983000345c8947aa59b78bb301b6ecbe9808ee0de99ed0b938fc19f677997398bd84bcd6f34d5b4ed123d04a093a8f42c1700fa2472f1ecc00957761a2d296bda3d2cbc0f21d8ed4e4fb122b71db1d49a0f516c3402f6046d93de6dae20df7683462557abfbf88437c8678dfa2613b +Output = 464121895e5c9d85190bcee0437453dd + +Len = 1376 +Msg = bd34acd613e0e0da6bebc45ba73fefa0bd8aa8ebba34040a07944f29eb63adea527101b8cd960e58d9ecddc0643b5e2d8db55170ace4678892e0a57612c50a4dc0647189f839b9a1229e22e0353dfa707acb7ab893f4ebe8bb910cd14f21b8fb8e77c4f19db027e0cd685d60212e0d920b34e96b774bd54f0a0f4ce2ac5f001b4411c19ac2e3a03b63b454eb30f4ddbac959673260d370e708c32d5030682ad56a99322972ba6eda6be9d027 +Output = 8e167ceae101ea0b3b98175f66e46b0e + +Len = 1384 +Msg = 166b4fec6967c2a25f80c0075379978124833b84894c3cb3a538f649dcee08b8e41707901f6273a128cce964ac1e9b977bb7fe28de8bc2542c6c07109889cea84d34ada6bde8c8f5358afc46b5ef5db3009fe3a2efd860ed0ad6b540595246c27849abf7eafea9e5af42607519f3c51ddbc353bc633afec56aff69a0c953584d8ede684b4faefeb8be7d7db97e32bc1c35abb73ce3ba8425726d89f98e93ed93b67b4c6993ffafb789c1bbda8d +Output = eb2fa0e8e04e698ca511d6abf7de84fb + +Len = 1392 +Msg = 62c625d31a400c5ff092d6fd638f1ea911ad912f2aabffea2377b1d2af4efeb6eb2519c5d8482d530f41acdab0fbe43f9c27d357e4df3caa8189fa7745ff95f811ed13e6497a1040852a1149890216d078ee6eb34461cfa6693ba631dbefacf83ce5ba3f531ddeadba16ae50d6eedce20cca0b4b3278e16644535e0859676c3fd5d6b7d7df7bbe2316cc2bfa7f055fffc2835225976d9a737b9ac905a7affc544288b1b7d6dad92901162f4c6d90 +Output = bb0acc4423c1d8cfc788e748ade8d5fd + +Len = 1400 +Msg = 8af63bbe701b84ff9b0c9d2fd830e28b7d557af3fcf4874bb7b69f2116388090d70bff64a600427eeea22f7bee0324900fbce9b8752fe312d40f8a8485231da5d94694daadb3d6bf3e7f2cc83f67f52829cc9cf1d3fcc87d42b3d20ec2e27cb135aee068acbca68734ac7a5ff3e3bd1a738e7be63de39e56aaaa6104f6fd077c964ccc55cba41ca1783003883100e52f94096fdfdc6dcd63b3fd1db148fc24cda22640eb34f19ed4b113ad8a2144d3 +Output = 4a824cae0f236eab147bd6ebf66eafc2 + +Len = 1408 +Msg = a8c0f0e4afcda47e02afaaa2357c589e6b94168a6f6f142b019938186efa5b1b645bb4da032694b7376d54f4462e8c1ba5d6869d1003f3b9d98edc9f81c9dbd685058adb7a583c0b5c9debc224bb72c5982bfcdd67b4bdc57579e0467436c0a1b4c75a2d3cea034119455654f6ab7163ed9b61949d09da187d612b556fca724599a80c1970645023156f7df2e584f0bf4c2e9b08d98bb27a984fa7149c0b598adbb089e73f4f8d77f92248e419d0599f +Output = 4800f8f5e598a26ee05a0ea141f849d0 + +Len = 1416 +Msg = a035c12af3fb705602540bd0f4a00395e1625edf2d44af4a145b463585aba46b34ee3203eb9132842000f54dcd234e347c28486ea18414af2d3445916049403adfa3ed3906fdb3b27f2aa4bb149df405c12fb0bf0e1dacb79c50bec3fde2295fc8dd5c97ed46dd28475a80e27017dc50d9feff9b1a1861ac86371791037e49221923e6e44874962d9f18f1898a98ee5dec1e9eca6d7c1ad4166fbac41b2587caf7fef3e7be90c80aafed5f7a0928127321 +Output = 2d124d81a4a45ad9c0b91cca23cc2991 + +Len = 1424 +Msg = d41739834414a0792470d53dee0f3f6c5a197314d3a14d75278440048294eab69df6eb7a33c9f807b5082bd93eb29d76c92837f6a2d6c5c21a154c9c7f509ee04b662b099c501a76e404996fe2997163d1abdd73df019c35e06d45b144f4dbb0462fa13767f12f4e1b2bc605c20ce1b9d96c0c94726af953e154d14cb9c8c8aff719f40c7cf45f15c1445ba6c65215024b316d60435905a686929874c6148e64c4eccd90c3a1d1553d18ff57d6b536c58ec3 +Output = 551fc7eceeee151523be716538258e2e + +Len = 1432 +Msg = 5bbb333460ffac345e4d2bc2dba303ef75b85c57233590fabd22d547bf9e1d7a4ad43a286b2a4618a0bb42559808fd813bea376ceacc07e608167ad1b9ec7d7ae919fd2991464cf63570c7dfb299b61836bd73a29007cf1faa45b1e5539a00514272c35d58bb877526530187afbcf55a6f1757209c50af4eab96c2ab160e6ea75dc8d6ef4bf2bf3e7a4b3a7619db84efede22a0f960e701b14f0f44c89b18f2640017c05ef51bcf93942b8d3775d2980b80435 +Output = 2c98dce5b1ec5f1f23554a755fac7700 + +Len = 1440 +Msg = 8040a7296d7553886e5b25c7cf1f64a6a0a143185a83abf5c5813bef18008ec762e9bcc12ab7235552cf67274210b73942ac525f26364af431fc88cc34961169f6bf8872d864f360b9fbc27b18160d0578381db509e72e678402731157555bf9026b1325c1a34c136b863eab9a58ec720cedaa0049bfddb4863d03a6ca65f3dd4f9465c32b9db4d52f19e39f10ffdfe8c475032a2fe5e145ff524073d5ed617fa5e387325f7ab50fcf5cba40c2326bcf6a753019 +Output = c0bb8427ef0ca4e457d2887878d91310 + +Len = 1448 +Msg = cbaceb762e6c2f5f96052d4a681b899b84de459d198b3624bd35b471bdc59655b1405e9a5448b09e93e60941e486ad01d943e164f5655b97be28f75413c0ab08c099bd3650e33316234e8c83c012ad146b331e88fb037667e6e814e69e5f100b20417113c946a1116cc71ed7a3c87119623564d0d26c70dd5cfc75ef03acaea6f8c0e3f96877e0d599d8270635aee25be6d21b0522a82f4149ec8037edaf6b21709c7aafd580daaad00a0fd91fcfe6211d90abef95 +Output = 626bd9eb0982b6db884d38e8c234854e + +Len = 1456 +Msg = 1bbee570394bc18d0f8713c7149cabb84e0567dd184510e922d97f5fb96b045f494808c02014f06074bd45b8a8ad12b4cb448ec16285fb27670fce99914f100ad6f504c32fa40ab39beec306667f76f9ab98b3ec18c036b8f1b60d4457a9fe53cbab23a0ee64d72d8a03d6d8d67a9f2ff6eb1d85c25d8746c8b4858794e094e12f54ab80e5ba1f774be5c456810755ffb52415b5e8c6b776f5f37b8bcf5c9b5d0ad7e58a9d0fa938e67ad5aaee8c5f11ef2be3a41362 +Output = a489ab3eb43f65ffbd4d4c34169ee762 + +Len = 1464 +Msg = aeacffca0e87bfdb2e6e74bfb67c9c90a8b6fb918b9be164cafcab7d570d8cd693bd8ee47243d3cbdaf921ce4d6e9e09c8b6d762eb0507bd597d976f6243e1f5e0d839e75ea72e2780da0d5e9f72a7a9b397548f762c3837c6a7c5d74b2081705ba70ab91adb5758e6b94058f2b141d830ff7b007538fb3ad8233f9e5bcbf6adcdd20843ee08d6c7d53cc3a58f53f3fe0997539e2f51d92e56990daad76dc816fd013b6d225634db140e9d2bbe7f45830406e44fee9d59 +Output = 4eaa27b085d08fc6a7473e672ea2ca1b + +Len = 1472 +Msg = a22314d2173ca4d53897924c4b395f0ae52c7fff4880525cee9055f866879af35f22759903b779898676a216feefd4ed75d484f83c00b58383b9279e2732cbc2cb5479b72abee5b4ab0bd0c937537b7a47f461ad419225c6045cca10c191225f0e4389f3355cd3a0d2de822c9d6f3cf984147de3fd3d8a6c9a02a617ddac87114f770b16cc96289321782108d94a00b153bd40651809cabe6c32237a2389e321b67769e89676cdd6c060162592ecadebdd7512fa3bfece04 +Output = eea88229becc3608df892998b80cf57b + +Len = 1480 +Msg = f99bba3e3b14c8de38c8edecd9c983aa641320a251130f45596a00d2cfeefe7933f1a2c105c78627d782fd07a60001c06a286d14ec706dcdd8a232a613e1ea684ee7ef54dc903ec1c09c2c060bb0549a659fd47ae9e8b9cb3680b7c1c2d11ebf720209c06879d8f51d9ee1afafe263807c01bb9def83db879a89f7eb85c681c6c6cc58cc52893d0b131186cc3b9e16bad7d48c46a74abb492d475beb04c9fdc573cc454242c8534bcc7c822356ea558f9fa3ae3bb844415916 +Output = 5109746cb7a61482e6e28de02db1a4a5 + +Len = 1488 +Msg = 564da8460dc0c3d20b1fda3628349a399ba52446b5d3626fd0039ab282bc437b166f186b3c5e6c58ffb6bd95f8fe8b73c1b56a07ad37572eb6e148cfb7750760dcc03fac567ad7d3536d80922dda8ac4e118fc29c47ee3677183ea4e06242b6090864591c3ddaf4bef8c4cb52f8e3f35e4140034616faf21e831a9b8d68f5a841a0a52a2eb4f9ac9bb5b488766e251cdb0f29faeeed463640333ad948e7f3ad362948c68379740539f219d8f3ba069952efa0021d273a738aad0 +Output = f43552da8b2623a130196e70a770230d + +Len = 1496 +Msg = 8a54e8bf30eeb2e098955f2eef10af3c0a32391656fdff82120e4785bb35a629c8635e7e98c9eadfa93ed6760ae1d40313000dd85339b528cadfe28258a09e9976643a462477e6d022eb7f6a6338a8fdbf261c28e8ed43869f9a032f28b4d881fb202720bc42cf3b6d650211e35d53b4766a0f0dfd60d121fa05519211bb7d69bf5fcb124870cda8f17406747097fcb0a1968e907adb888341ea75b6fcfbb4d92ae8ce27b04a07a016df3399f330cb77a67040b847a68f33de0f16 +Output = c51c6e34cef091a05dfcf30d45b21536 + +Len = 1504 +Msg = 2a64753a74d768b82c5638a0b24ef0da181bc7d6e2c4ffdb0ae50d9c48ecfa0d90880974db5f9ac32a004e25c8186cd7d0e88439f0f652256c03e47f663eff0d5cb7c089f2167ff5f28df82f910badc5f4b3860af28cbb6a1c7af3fafa6dae5398d8e0a14165def78be77ee6948f7a4d8a64167271ed0352203082368de1cd874bd3b2e351b28170fdf42871590d9d179ce27c99f481f287820fd95ba60124517e907e78a9662e09519e3ef868ebdcca311700a603b04fae4afe4090 +Output = 2d2ee67938422ae12f8cfa8b2e744577 + +Len = 1512 +Msg = a7d645b70f27f01617e76abc2ae514164f18d6fd4f3464e71a7fc05a67e101a79b3b52d4ecfa3ddac6ec2a116d5222e8e536d9d90fffec9c1442679b06db8aa7c53dcde92006211b3dd779f83b6289f015c4cd21ca16ce83bb3ea162540bb012ee82bddef4722341454f5f59da3cd098a96abbbdc9a19202d61c7697979afa50deb22a9bb067ccb4a6fce51c930a7f4767cfaa9454c9c1832f83ee2318b0f0c95d761c079c0ca2dc28871229aef11f64199ca290b2b5e26d8c1c12ec1f +Output = ec989e0290fc737952de37dd1ebc01c6 + +Len = 1520 +Msg = 3436fe321f2a41478164b8b408a7a8f54ff2a79cb2020bf36118a2e3b3fca414bd42e55624cc4f402f909016209b10f0c55626194a098bb6519d0fa844a68ab3eaa116df39797b1e6c51eb30557df0c4f3d1a2e0471f1d8264fb3288c6c15dcde4daf795083aad2b5f2d31c84c542fb702ea83b7524ca9a1c1b9754ade5604abd375f23f3916cdad31aecaa7b028b7121a2a316713991759925f3fb8366c6795defa6ea77416c4ed095c1f9527026f1d621815b8310d4ff3fc76f798760b +Output = bb5e48212442ad7ae83697092024c22b + +Len = 1528 +Msg = 01bdb4f89f84b728a9d6b3a03f60709900571c1a2a0f912702cad73677ceeae202babde3d0197e3e23381cb9f6350792e05937703aa76f9a84b5c36705bb58f6b2ea6b1e51ff94a8de174cbc2ec5ae9ad2627a8b3ea45f162b727a7639f71a4cd9f6c6926a5d81d0a21c4c923037ed199f1aef517e2eea03bea9044c5baab84e3f85d625635bcb1c37ef232144b44c770f2b9dab416b96c906016acfb3fbba62ab40a4c08323fcf66437d953b164541cea3a8c81d186eed0cb23b3e98813a9 +Output = 8bb7ffa4572616f3bc7c33bd70bbcd59 + +Len = 1536 +Msg = 9ae51ed483306c9a5a6db027f03cd4472cf3a71df5f1e11852306123d01ab81c259eeb88128275858efb8cff207ba5278dca3a21b358cbfdb5d223e958f3dca5ad9d2537f128c3dfb1fa564d3157de120f7b7d5524e67fc7abf897d9a5bd6b2c7c0a5348e6c95e920c919778ec7a86effb2ff91f0f44045c7dca46597e216e98d80efe25ba0d4f84e7e9d5e81689a5a6990d34e83e1a62a67371b7d2adc7ecd30ad1ad35359e9d9f8a299b057a2f441e313eb819770fa18cd41572adf856edc4 +Output = e7f66f49f70d506a9b5508cc50f65cf2 + +Len = 1544 +Msg = 899c81ea1162514ea7a2d3487d0efcc4648a3067f891131918d59cc19a266b4f3c955c00ddd95cddedf27b86220c432d6ca548e52cf2011da17fd667a2177a7f93e37b8892d51898f1485277e9e046a48cb8b999fcbcf550db53d40602421a3f76cd070a971e2d869beb80a53b54ac30ac0aab0cd1b696bbaf99bb25216ff199cd9a280f567c44b0d4252c98812e1ddab4e445c414aa8d650598b64d6768a7948093051e36b7051c823c7ed6213743a98d8eaf4b2b5e8157c699ea053cf4e53877 +Output = 52173b139c76a744b7a4d2221d4178c4 + +Len = 1552 +Msg = e50422869373abac1c26e738fb3ccb577b65975a7998ba096b04ef3aa148ada2cbe6beeabcf52d056d1766c245ab999d97445fdb6d59a0d6843eb4959752c89fe07b8411ddcfebef509482b8896bb43de7c875b29da52606b278b8704c62154b2da9bb237e68aa10cb85814250e4e4de73da200991e51241fd9a45f446de5a4bb959ad4727283510e9d2ac8a207ef0284163aa05d27f2d316e8ca1480f30604a8d74a0a661775398af644bb584a1a2c55c4959d0e7dd3f7c0c3614962fbeefeeafe0 +Output = f4c517a82c850c3c4c96d23a8f3106b8 + +Len = 1560 +Msg = 066febbe205ea342cde69fd4c72889442e14a5977d886252bdbc2ff5f8dd8fc5f1f870ce121ab929a6b6227b484648be9b3501443cfdecf8f58d4de834ed1800bb244c18985a8232583ac6fc789aa59d1c5e87ad03994085bbf6e1ba1157d4e4ccbb28a49b6529e54b3b34613d6cc9671855e2dcbba6838176c093737962eaf88c85ab780184d4cae78013b28103dca7f7e3b8d94a6ae0728db30a1c535783c4644a7e9eb4ffac6a95d30cf52ba805e220d0b2aa9a2e7de26a97efbd877ec6d1bad148 +Output = bac7162dc8328911fa639f26ba952ab0 + +Len = 1568 +Msg = ccf92b17b9cf0d8577c1f3db9c19d3c86f16bab4058611f6aa97204783ebd07671eab55e375c4b16e03780675bb5738369aa7cf3b9156cd250f516392f5e0efa30cbb09132b66457756621f947093029e10233938c846513086023252d1bac9dd3442598f004e0b200f7dd79aa3a9122a0c6e77bc7fc8521988050f3c64b32c620fc1b5bba6f458e4791bdcfca731fd66e9da093b1a45264c8ffa48b3f1628dfe19c9ac1d71f1d5214ddc7e4f0da60ae122f67c394a55645628228d5e3a3174fdccbaab4 +Output = 19a9eadf9c7c000fe340603f27bd830b + +Len = 1576 +Msg = a37dcfab50a317e6a7cc51524b5d611a53652b59fc7df0229af3dac4d527d54c1134a14b2ed325d9727d07d9c3d0797f1a34561034be6de98b551dc384132235eaedae7a9b97bb7581a2a0f2c4e8e32f3e294f9b30f646dd33ce58187188146e14f01dc3ffb581c3bc834726b66c4732a98c3f8256ed22077ba8b34c024d53fe798517abc2f61eca0c6722fc02254c9141a54d4e106aaa6d4b2957e6a12c88ed00f4c4bc4c223b92579859fc0edb9b53f0bba286c53786198c9b6c6eb5eb5b4490844b7d06 +Output = b9e1455d06233d14b8d3020441351a76 + +Len = 1584 +Msg = 0248b909e1f31ee855a03b6c81366757aa3732d2eca0b06a2b1015584c2d8205a4431fcdb02f6a03077ccf368ecb78b3eb78664b3c7ac157088b6cf9758adda4bc1d2cdedb9a69448a2833cf6f21865795bbd5551be859ed297aa82c288b898e331c07c3c8fcc4b2c4ec90bf8e003a499248a677f1b020357625f079cdf92fcbef89d904e11d23569e0f0e8c52303c93c867023a269bc036d8d36d69ca9c7664daacc92a8dc42c3600dbd4c02278333d216011252271def835ce4783883c0760dbcc00bc33bb +Output = ea4606777e21f27d4ae860b3c25283b7 + +Len = 1592 +Msg = ce283768aa91488c75c71ee80a4df9495377b6a9ae3351a5962aa8317f08818a0117cf6c391331866d3abc2beea2fa4a43cf32a08385ea2c03dbabe3319104a6c0a3d171061ebed5a23306a8618a81fb63d9dd4c79b42bfdd2a79e05d78290e653f4c6dfd75bf5625ddb85c82bad9444faba3e1558691c004bb50afe37822e320131361d7572e015e559c0f313b53e0d529dde64e74bc41eb52e77361a3ae5721483a795a80a87d684d63f92e347843eb1a8439fef032b3d5a396b154751bd8ed211a3ae37cbf0 +Output = dca4d5f9f9b7f8011f4c2f547ce42847 + +Len = 1600 +Msg = 19265f48c1ea240990847dc15d8198785d55ea6243ef7012ac903beabbdc2bd60032fb3a9f397d28aebb27d7deb7cf505eb1b36bfc4dbcfa8e1c044490b695b50e0974d3c5f0de748508d12ed9bfce10eaadde8fa128d3c30c12d0d403f60baf0b53d2fd7a38cc55dc1182b096c11d1ec9f171b879a73bd6ef1aa7825bc5162cbeba1d9f0739d1337c8142445ce645e4c32477cdcdf37e99fedb9236e24a3d94f0e45ea0b41a74762efe19d27555cdc89feef5b6e533237603fe98d8deae084f69799deac9043e86 +Output = 688e532e15bde53b0b652291edfb7681 + +Len = 1608 +Msg = 1080391fa810c50c7437ec058459d3a8cd23c33071c187474151151c809871b6eaf4cf88f592f84557e1eef5c847d3490912072b25b1919af724c0b5ecb111150bd95460328a0b1ba29613c0bd6486110fe6dfab8cca5fde18f5b0bc4d2dc970781511d2e45fc7385c3da18eeb18b3a9e68593d82c75bbbcadab2e5a29745f6f3a924e039579f4418dbee186d9cc24b896d96bd990186bdcbd3082b70aee9bb95a36531ecc405ae13d011bd10fe69fe728c8aed73d1d38e5506bf4fa770347f7e0eb6749121cc0be75 +Output = cbf8ee5d477630dac9457a9a0659497d + +Len = 1616 +Msg = 44f69025edee139bc9da04e2e9df0ad2513c754cf172d17bd7a8bb5aa24df4773affb4f6beac41d8bef7bf7eabdd4a688b984243f1c3e6232dc0250dc057b0b8139f54946822870c103c4108dec40db7ddee5f8b3e70288594e4a8b2446e83f6369e1808d1980ebe27722f8b6cdd7a46ad08732cbec1be2975deec5315db95b70dc4a759e355fd766b61340c3c70ba9d64ac272f5bfed19736749af71de60d86ffd9aa8f84a37dbd44d0f69536c5f4446ba3239bfc6e8858416f5aa743d614e874a4c8b39ec8b6191a88 +Output = 50f90a2b7723aaf816a5e0e1b10acdfd + +Len = 1624 +Msg = 5f594e32eb83a7e4e1bfd5ef3f64e7f8aad5c31960a5be2a6efe6a3f2343af71c4f41ee281d281fba844b7f819fabfa7fad0126cabf53689fc4c909c9e127a69d8c295da7b356044180e0aec705585ca2c62dc8dcffdc6dfe8c37be98cccc61a038a5c24c2f46c4899e477d42ebe62eaaa53ca82b20597b2992bd42ed4b7be0bae161ac83d57cc8e9490a6b73a7d7e8edb6b83553e54d18d774c42715e1b87c43f2c78ccd3a6a99f6fd83e9d7cda003e2771b00e59349bf5eaed6ebc12424ccd20951e3a6e282a019485e8 +Output = e50d415c6cfe7f756f1ed53867852777 + +Len = 1632 +Msg = 2e9922208799419eb74ba05e1e65af61c88a0f118a1349244e0fbfc3ab88e3ecb909a615235c34127d98de38d85c57c39455247576064e80fac85aa6eb0f7a9f30f005bbe9e025c8bbbfd0366715f979a29b07af21fd8683f3de1c51131cbf8b3e56265b02ac7d8918c65da0f318fb4c9964a007b28059f4de59ef0b4c3819778944f13c9549a51d3cb76fbda3eec70422b8d7c451172f9d6642ba1ebeeaf02cb9c14ea8cb3d034cd099edd6a01ec369e4a09430284b704431a065d090baad7377d625e5cc1201de7c75be33 +Output = 088cef5ecd31af1c37e37f23944d6b73 + +Len = 1640 +Msg = 7f874c155ec634a807e7c26cae58796b839d9d6892a13bcde84e69e5f85bcf4b3d6566a3204280871b9209c41f960cc7334678525f9d2574c83812b71c1ff19b30e3e543e8e98a6f580536aa284a7ec53d21fc839599509673fe65cabdadf681a226505f7f6359460469d185931cd84ce857b064ff3cc51c32c9ea87a3ace6e4d9592f5eae59f5f668e562bd26b321467e101d5b642f8bef4dc12a5495c5c9ae1ea20ba83b736765cca272baaab8619a4573c9d18b1aaaf50c0dac9a5ca0a8c6b9296aa5ee58b67d77c788e3e6 +Output = 5f0cbea9083dd22a806a3dd87de3780a + +Len = 1648 +Msg = 7aa5c532724871a7e6b7048d97bdeb2bfffa1740363501f216f4eb079e49685794ee1e816e94cbde737986b31e3948abc3e6aa84745af00826cc473f10a24be35486cc14e1bcd24d98b3de97aeda73fc51b4d53f8e2f11ca72323de86f7501340295575293688edc9d8e959f0e487608f18d21d94a5b6b20414c566a83699334e64245a24c3f0874c9313235082c59b5ea9915ba718706f3dd42192d142708c947b6206ed3e947fb65c43dc0622e22ed86ff394acb5aeb298c3d0f9aea5668dd6f196f1df10f535bb9713fa8e5f5 +Output = 2c32e3578f1e5521c96c0c7f43bd52ce + +Len = 1656 +Msg = 687c03141fb6788f601d09c8375a4f4226b7fa3f7726c2e3d185a1970a203fac3c78ae401b43576685b334815bfb40f190102cf27fac54c08299f100c02c905b4610c36c5a4416dc0b6744cb0d34ab72c449fe079f2c3ae1a78fdbdd58d34f00afccab5e84c49d3a1ac2a16ef50c780eebead7487ead5c8e69f0c5f8791e64e39e34cedf42c8d4c8d94bb432ba8b900a2d7b1e7bc537a20ff0431917cc13b74c3cd194b63c5aa3cd718ae3df04b9d9b1b1853d691bd2f4ab63103e03f8bd3183b12a66ad1981f2930a07973c7d9f3c +Output = aa6190f53e78e3e9778c2090796731a4 + +Len = 1664 +Msg = 8eab65b72cbdada84106769bc2b9fd687592dbd656ae870e3aa01c4fb2c15ce432c7f553739a04d81563d81189e5f8fb2e10671dbad32603dc33fbee209a71ca12712060a6f02ecdd73516338f94a8aec72f528aefc69db390d0fa6c30cabf4476cf6d468e693471cfa7b9689b6f166a87162283bc2ef4049e9fa232abfa4e3ba509646ef3ab1daa45de4817771e4915b8ee6272ebb431e04dc97aa658d12795e8488d3e9d5ef16280054baae9484998a0de97be42ff5e2ee6760b3101f8513c87b4711f532bb980c9424a88ba951fdc +Output = be645825ef7cfc378c455093c9410270 + +Len = 1672 +Msg = d81f898027f9e006353058882c158a907e239609793f5da41b3ef07b27a847f578bb37e996b39e068749e172e87a98b13c8987c98347d1a30f9268b5931cc8de7d6ee591852c6136869a03cd8d5f65d53089ec6c22d2fdb704216e847d543b2e8c3d7bc11dea925fdb2aa7e3464c59c3052aad3b7d674ba8a2f4eb320dd90aad5032e1c1867797492e01b6fa39cadc456175b37ebd8e223d9212c5056d329b236e54ffd9e75bdabc2628165b8e605621ed70e47d09cfea3f7c83e646c2e7585891abbd51681cc1806ba6b14e6e972f2050 +Output = 3c1ca0bdfadb06fecd9390f5f2fac3b1 + +Len = 1680 +Msg = eb8caabdf1fb1e5d563c49554914ed2ac8dc0da41026018958a4c9acbe46a22682a3d7e4729ada62a53993b56cddf8cf869bdeff93df0eb7cb539c92f003749581be36b631bf449a988d19a3271fdc2a6144340948425f5d16bd7e8a2edb337f52a66e3b16b2848f95ff82266220c0c4c29db9cb18971903a0aa189a6018076a5c23287b0abac3c905587647052acd230f70134ce9256732d1e212cd6e0017e007fd0c7ff32029cf51609f0df9832ad1b283ea94a5356f70112c132841dc8c68bbfbc14ebb2ddd28dfdfa28024730156119e +Output = 8cde51f40ae38ff7fb2ebf391fda90c8 + +Len = 1688 +Msg = 90ccfcb1f76af39ef753bcf80ce5cfa49bc4d006831fc169f63577a187184aee83b1112485054e0945b6a5ffb1cd93e33fb65c34818c4578fa9804db3014751a02348e9f3c6795ee69da903fe83dfe6c42cbc40ebb846ae327bd8774ffdb7af4b45c5b6a431732130ac46601dabe78094d08f0dc5a8e987426aee9b21df7c345423161cdc39d8b40d17e0d8daed769800877c9e6853337f19f7310deb2f0b6d453bb8610e4820a3f650f6f2b8d11399a1a1f357365faaf233912e63fe54cbd6b9003b37acd4d15d7707f73239ff3501f2c081d +Output = f6a54d24c8b2ed84a42a3f40401eadd4 + +Len = 1696 +Msg = 1de269c4917ee5987cc926b6bf6d36d0d05567c1b2cde6cf25e4932d1a1510c469271834c6521315f2a3e7822ea210d8f531f3bbeab76f5a107eb6f4395a5b9cc18cac397be541d0ec2fd506b7c855e0599037ce16050de833ad5a7766b5a4b78bd7cadb98819852d333994943282c71643ada021f00e700f83927bd8a6d139f30d11c23066c40221078da53b80bbe127ef6855febed262ac6e9c7ce8bcbd2db19424a18abee60c809c6412d00b7334b0f8de0ee6317f1ee0686dfb2531706f3adf2fcc2705120cd28e476de0175b2a47fc892b6 +Output = 4f840f31049cc6bec7be848894d83d91 + +Len = 1704 +Msg = d4b4abf4bbf258f4ed07597713c8b8afa69dd2d8023f091cbdbfbab436cb6f51712d55ba2294f0b607970d2c7bf7f8894924f062be03d85b02ef2f47a8fe42908385a0d9bbdecfe321683dadc0d079e0b48fa36940b422681ae49449099f0b30b2c4769baf585d43e283d24309dba47b92e6d537b0d94e0caea6d203843631faa8f3be46268a029df3efb2347ea1df24892f6d1237fbc60f663ecfbd3e4c1cb30a1a602347fd27bafbb4c7c849a993a141745343fda1f139e9b375bf62683326833f437a3b383263a3dbf7498f7b29bb64bc6f1229 +Output = 3706574a015de598e9d66ba159aaf8cc + +Len = 1712 +Msg = 49ba288a935b0fbe8038c3fa0350dec497fbe5d71b6fc3cae18976ed02cb0974f4a1c2d75ee89c782ab0f787dc418f22235dabc1aec597d241ff53a008558d792b21cd10a248f0204b05d7523ae86061501e957c0ff224ecac9410f66619a50317c4b1fe0984f1fe0abdca25c34b39c845c50dcfe5fe545f4ad213b7c41f3a58df11d66939a38959906237c61f74039e2bda7a84d9f20d754240c5abc96d32c1ad90a519daad9f7b057b88fef76ba42c29e5446192d53974bd668e991e0d7786a6ca84d595ab1aaa90912495f33606ba686fd22fb9af +Output = 23baccbb98ec63d6aec9102593ed5fc9 + +Len = 1720 +Msg = 32828986870a9c851ec52fc7ad61c01dc8efb1b6fba2f9fb16d41ab7c84a537b6fb916412f89bc4f41d8785e8ec289fc7de0b42f090ef25b1672666505ba911986a4c9c9adc4e737498241b67162d88b5f88d299827b2a3ece29a678572b094c1e4b8a682a438607dbc872157cc7139317eff13e8d6f096be501c236e52722dbdfb44264ce8fff85a2b4f3c4d77ba4dc4c1dfa645374f7ac0402a2e8d835449073e9d706c02fbc7a434dac0bab06f12ea71bd654fb115cc7d3352ed557ded7317ff2339629ab23ad699b853120ee6451d0f06b56aecfa0 +Output = 50eae9b45000fdc48b22614d7f61259e + +Len = 1728 +Msg = b6cb0d3699cc52cfdb1c56210772083594b9b4f259b51de347e8cb3a56b7a615c0c9c4016eb080bcafcbcc40306ac8fc29349365d4c660ad239dcdd2b23671dbfb73b45fc941e446ef7885d33903e8e3a340ff6fc9a96f589fb5e76462f9b083ce93865892c8a7f401ec29e50a82906f6aa5a01920a7706c21f7c0f74e488c96a3efe2f4b18df04f4eef617b8b32ea2ae62b1f6ac1068c6f132c01935e6b2d9be1516e3c0ed8e8de3e49d59fa45a1b9b7f99246b940eeaebdc1c51407aa9ba1aef7fd53791f1b6293ac12c583d414e4a9eb956228209b367 +Output = 1c2e8b8c5a35e51e6997aad5d4672966 + +Len = 1736 +Msg = 0dcfb7a74ab85cd993824f4e8cd3ec0211a1a5afc2a3a4e6bf05b15fb060578e09e942768ce9ecc20f6d79127f3edf93251349d22806bed25345fd5c190aac96d6cdb2d758b8e2ba9e5bd971dfa1295ccf02b7da1dfb616040bbe4c87320fdebfee1cf71b80d85e8cab43814b5e3138697d6b570aa6ad6b80dd12e4bc78992b4098f61edb3d01e751ae05ea208eee53905f80c3cd53b660342eea28e1c2fb31a7d3e2ff251e9f588164713c4e1a9e79ca2ce84e5a856566968790a397af9a845e45502299b40524a47511f2247fc60d8f5c1e4142ba3f11106 +Output = 84bd70c8c8fabaa4cd1555378af115cc + +Len = 1744 +Msg = dc750c59abb77ca7236184baa8db3c5aaf546948c4b5a2d1d2d3b1a29fe93cde9645a56ec9412e99367561d4492bafdba31357001a3989c30133cba4a99f9d3527cd587358b85c56233b6aa7fe814f12b4bec37c651c9097cef9f7b3ca4f4fd71973ef1061034e09721969dccec5652869bb7664ad48ff72c18bfb770be19bebf4a130eceb0a4cd8ac79241ac2df39444a73385ffba41e7e63529f9a733dc9993ebee5b0feb59eeb58c2650ae1b8138fe04ed015561834e33bb6adc10b4c210b8132d403a2ec8b6bfe5cf25433363b31b2b5082fc68c8bc9d220 +Output = 96df76fce4c5e940d2cbec321c99c561 + +Len = 1752 +Msg = b5b5fe358d01e2773ec933c3dba8b6197a2958038acf20bd675963982c4337a0c990297d55c73397a53ce87e1d90f288c67bbebca1c976ee3ba3302c82106559d7bca41864f787ecb000e79d70844cdda162a72bd3b144f8c804fa083deca51c08bfd6ce6398c8bc889f96e87e8bac5f32657b19c98e7221350329f506e0df3083232666fab3dd5054a15f29ecadfa57a20ca34e2b68e7b2ab2925bb85f3fbde716ffeaad04faef03d8ca92665f21e0d18df8592a0488df251fc5622612de16efa2cc5608e7423e36beadba88f6300c9bd678aadd0354b2b500625 +Output = a256d84da2c3e5e9e01be7ef1ce7d78c + +Len = 1760 +Msg = 865e0148d4386294d8aeb8aa92d29d461969917c8342f9aa09c767aa67d21c4c82c2cc034dcda1deed9882ba1c0494b7cb4b01e80b4df94f2d24f70828fe46c43c2cc379d576e458b2b2f9004695b2f15fc8e243053e8298a5c6f94f6fdc9bfafcc56f1234db35ea6f25a7e2da2a00dd1d07bbf53ac09d6db8d4f5e6021423d60ab4573731a39b7c6b1814c99e6e84634c311466727951b6b0767437a94de641ad22034e96761ff6efb4c61e5c06486c356d75fe7511a65bd3d6fda92e2fed212e37fcc129fec74043204747da9d54de21e467250a31a4446a1918a4 +Output = e2283ed0d90d0eb5cf68059d99b0444b + +Len = 1768 +Msg = 5fa49a9a6070071bc5c6b92a6a9f14ab751efefc93c440d085e72f3bdc608d090085aa547757ce5664fcdb7b4e6f2fba2376c8267dd4abc023c08690d39794f43fcec137552a0f65c333385ebbe6952af3aa3e8cf18573da85903a0b97a84a122267286b815290f3ea5416fc386c0da1eda2a857773f5fc5b23d94d6affd770cb438271783381aa6df48be7d4d6960c718464eae976a382ab2b1dc16a3fce389fa290563e4437426acf57808824556467c7f77bada6ec6b08ed25af6fc0f5532fe230c782bda681c59458cc56068b7c321336ca3c7b4d1004d8a569c41 +Output = dab4fa459d4147adfadf59db23c07611 + +Len = 1776 +Msg = 3555e0ea7bb08614e7eb99d10f947fbeaec5f76c9d4cadacfe0a0c09ba9953952f32ebe922cdf867fb892ec2314fe5c103b2703f691aab774a22d47eef3e9c11b8a17d910d5e4d4c98cd14feb1301b981a96453fed00a298d2c34243752d47a5386b3eeb25aab04b267df38d787f46cb5d391e751146ba9700b4fd5f36ae7dda1758d8fe50fb47ed0d6275786d8491e23263a1e7be331afd3bbfaeda19096636bd30f0d277973ab9b54440c67786226603db799fda10eb52eaaafdbd0585294392bb317083c7b23887ebfc7f80cf21df376a4ca54e25541c773e910fe46b +Output = 97c4362901c95a5a46f67cdc6a48b824 + +Len = 1784 +Msg = fbceb2dd05025f3cfa2dfc4b5b9f2a75f8b55fae06a29557716f3f62744181b666dba0d5d763b8bcdb69ad0ba62563655900321a1c5794036d7b21aeb7fcbebb27271186bbcd38079c46baf6adb6bd32648f7a63d957efde1cacd3cacc85cf81e5baeb39dac747e4e4cd0b5599d9a0a3c06921d2642c0cb0270a3efed9641ed0499d18375bd94d1c5b04886f9117748216960dafe65d5541359d489207221170fbd77ec5678bb277aaf51a8ebef6a2950d1f284286733059ef6edacd7d461228a270072e2666debd79a8a7f8480090a54e0b58d26df507bffd84ddf8645888 +Output = 3f6bc96df5e1f99eef2383aa2215f030 + +Len = 1792 +Msg = 8e2edbd8bea59974a9ebf225a608a244f7459a93ac85002cc3d876b7944e9fe06d09df097996633be67e62634617a2bb36a03d863e8da500f920e69576392b51dd6f8498565fe617264474fa1bc9fc5f2b1bc50b5841885cd7b0bc7f701a16e3288851ee1ea82beeb368b052edc3ba1a1edbb98cc049b029a4b180df4c996980957bce73981838aad3109ed384b0e4d3560ba1703f4c254da94abb1cd05d2b0f6b71838f8e581731cf65c7e6a83680721cd1061f9df3f0b22ea4f49ec50f6478f391f9abc610d06def8eb2f120fd98deb8556e01a2e5183e7ae6b3cdf2561da3 +Output = f700b9487ef6d5f60f50e3084ffb4a7b + +Len = 1800 +Msg = c574960ebc61950345cb88d60b0097de97b3ba01c59fcf79796dead88ed8ec4a0f0f571baa5a60796101467a836ae361db81811d275cee12cc20d31cc71e41d1e7428d0739ae5e97c4a20460779f0b8e60cc101c1f98d49799a18f25f1d587c7b4d6e0db53a3b6e5d776698ed0e838ed8e5b12069499a8904ab9c7fcf243e5b2dd94fa9edf8391eb00441e0e748d9207cef82de370a99386463023a7b4b0841ccc418058c5941632a8d6cae84dd64063866909bc9a0ebd00f5ce4a301d668b8ce8a81d11ed1f6e4138f21622420a6b8920774f98fa104d86bf5ae59e17ac238b99 +Output = 3409ae3cdba0d8dd601649bb20bcc6c9 + +Len = 1808 +Msg = eec9304690c1ef4fe3bb6dd7846fcb8f2e3c40dc81d5032d02376b8b64de54720638c6dfbc5ad1aad2f2bb164e7c5ea776b9cb33925d333cf308087d34785fc3c0fd99fe942d429847d83905473f119c6580b8a5945556b3edfe7834f77c6e462600f1cca1a30ac148572fcdf61eae16037a4f590e243439f90005d734514aa23f2a18716a25f0cfe056e495e382fbbf598dd778883295771ef7f58e745fbb80136155147819bd6714bea18697d4c23c6ea29a298ae7411464c991833e0e8988ab8eefdd51e83933ee75aec8997ac9384ba2de959dabffb9d35f21db1ac67b610e9a +Output = a01d645c215d840aed33b9ce0f306456 + +Len = 1816 +Msg = 385f231b9a5d03307b950953b05acc139d50f2c64b2cec73bbbbe1ef7a26e7457674795b105026d3720d863023e7723ad88c74a38edb7dead5ebd6806f4f592a1998e1a6a91cff9159f6ef88634eca8ecedbfcad87a5f9e0b3102c314416301fcad443428c48f832d8592ca497173ad62445732e5f15c81efd32ca4a2203d5ed312f8778e35c777d963d24cce8cb2cdc85d2bf6c3db052695a599813309fae5cf5b19690d3e1e63b3caac1487ef10766978bc9b04a00008c728e7ed397712433bf6256d2865eac3471a8ea5f8011333d02777941ad8c384deed864d47e02a03c364bb0 +Output = f733e7abccd3de66654b008ac0b97cc9 + +Len = 1824 +Msg = ecb907adfb85f9154a3c23e81d277bd7aaaf94b8c2726536b4964cc76f5d53dfe6fab164b9a4946111e81dfecb43acb0daf05fade6ffd5a339a738a9dcdd7a76fd25ded094a9bb4847887d258a70ec9e0a6fb14c4c0615de91800d0ffe8174d5f9e297dbd6bcf632b3c34944a0d6c20904d4927d3cb0ae5184c8d3e01b72c766a2d8e36cc507ce871e428b42569cb6598ec60a28fd252762da2792067cd8fe8fc0b0ca6cabafcaaf50ad4a09f4eb50f671ed2235d88c087b5a47536869da9eba1a1254c1cedf731311ab8f80c2ea194875f2e18c150dda03cecd1dee29a0314e79a48a54 +Output = 7dd1c3c1ee54dc322b037d45ef99661c + +Len = 1832 +Msg = e8c31f30c421686a118a874519e64e9963798a503f1d35cb9fceec81286ca3e989bd979b0cb284b26aeb1874e47ca8358ff22378f0914458c8e00b2631686d54eab84b91f0aca1364eef00e135bf3e5f4ff06cd051340805d099742d5553a7b1b3bc235c989926bf639f25d4353676e14b7c4d9f8b8de99c5c020fdebbb7b8c98cd207432d007d15510270940c69b9822a9dae2fc52450e31721c5808c1b08641b00df8dd76a0d00c120c96be1e07009955c77c62882a3a4a6007c5def08ff4a0b509383bd5e3e485b02199fdc24013f33bf90addc2e4ba5b4a71dbb0d05054202ca0b6d08 +Output = d77158e34b0e1f3ec3b54ed8b65efe4f + +Len = 1840 +Msg = 4b5a427d688387af0f1583e91a0e8b3c203a87fdf7aa9cd37762090e81524f3a408895f4afa34afd5c8b0c8d6b5fc9eaddaf243813ec1a938d1ce55bf8d220cf685e2ddee241d4391de42cad8989bfb09181e93a1d9f81d65ceebbf8c09f4d914a45d1e107456b8cdb87abf17d72b5b7c3189fa820ad1ac36b3e558ce19f1ea76ea64ba52896581e1cde51004e04f226fbdc0e2d21fd2d83427579c064bcdb3a5ce761d34c1ee3166b50e6830425c026c235fd6f2a77023d69fcf03c50ddcb719d72dc137cc4539d4d453121a8bf65df9e8b35164203e01a693982a7adea3775b8ad830cbf70 +Output = d405a095f9978cc0226806ad56960e92 + +Len = 1848 +Msg = 325625b6f59121f4e505406e3131cdd2214bf823fd92d7ad2be0aa3e977e6393583d661190c28db693226f4e4cafe2eadd11be8e8698e42ac8d07fcbca568a13fbeb93e7f9c7be67b22f0c23c94add8b3b31b4a842453b0a79c5870241a09c116487349ff947bcf08856a0556eabc89f82d363d9f842e33786e74849c603a274dc3ad1a358eb903a5ebdb24c047aaa0dfb21518a7236e497375d4c091f27a326a92cf35ade5a412c7b8cca6f525e8cbdee40082176ca4714d3501bab15b5a70e1384212c523cd7ad29ec702822007597a25b1008cda61395a4e73b957055b714646be4817e3b5b +Output = cb8eb64a32b26d6352e7b38965518d47 + +Len = 1856 +Msg = 0800916484cda9e006a0645206e11908a50107953dbb8b2e3d9a975434bc5fb42bd5554b387658cd509028485d341e04909c1aaff96fbcb65541d7f6275922940ab831294557a423a0af9f68767e7a3c0cc9b964211d3e8bc61bbde6703471144cb00d48d2f5f6a99d06aff97a4a9475bf8fccfdde4e79753930316b38d2b2fa99c5d1ee08dab428f09c4145901dd67a51f63bc25789d53c56891ccea7bd4f0f9b0066640f8d486940793e92e181a7126b06eefbb556baa7c42d6458e47cae1bf768b2f20e96183136a68c2995fd6f04b5c8cdf01f3d90802c24f34e189739e658069edf2d7e8e4b +Output = 3685177bdcf84f25ae36e472310671d1 + +Len = 1864 +Msg = 01f793fa05548645f644a64ee1b5ff7fd38eaa233f874cd59f3ddf385e86b5e9f601b9b256f2f901864d61988d11c98593d7335543ab4d85731a3e39078c9e3012d5c6f83f064b5e7089c529a46dd5081efe66c8c49932cac5be88b57e674d689f98423389388446fb1f5969ee7029eebd29cbe489f8038edc5148148cbdca77e375b3cafc2fada07038a5c133c3cf21b881eb125c71c6b801fa03bdf9371b472792a3276094ce5417fb32973a0dcf87572d4db803ac85307ce1431a8d7c4abfb21799b17d0eed4938918754ccf72f0ae2557940475047de952f8f9210355fc6ce2d1ed01b4614691b +Output = 83aae54350df690fefc6e4c620f25d65 + +Len = 1872 +Msg = 7c67b510dfbe6bf45d0592d01828709eb28ee29b04fcab4b13b60cbd3fe79510be423a3649eaa9f8158fdb3a05dae9811e0c22b23be25a1d02bb84b916fc84b18eb43e20a77cf319b5a2cdeb6086b8a30c4374d29992e8904decbac00eef1c96d503e9575f3df0602684906a8ff2850c657c018186d6feacdc91d3598f8706c679786262dbf549d44e7d4b3ffce7f7c50ffff04a6a74447a97f2fa0d018bea49645bd2c9816ca57e16d726f30d2cb6d5f4146ab2ad35610167565563cdc46f287cf46015bb69ad6466d84a0d2c8b6b44fb039743b7e1fe4932070ce359fa3e6aab8a35cdf0b6099027ca +Output = aef5710039ac2776cf123d81863b2f1b + +Len = 1880 +Msg = 50d0a80d48c7681d63cd8f389dc113cfb03fab0c2d6a83b8cce9345b0030f3a5cf01080ce13283b7d7b02a9bdec4b5e483953e96c9eff37478420e21b9ee0785e0bd077289b1a187e601bd55575ed4c13b7a63a907cb99cb958d53e2be064b112a0d8c8567cd2a5739c72faf3116d82f81f7028f0f88df84c8d0ede73700291356f8808fa40d86ed770a6af194742af6fd13038e0aad2c69bb15c3784d6508510b87c9d667fa1d1149d25563a70130de56d64eef20c3e7401663bddc27bb4f95f2c150a3d91a578d5728d84d934453af3548cbfa78517ad280c3c35def8d68a5b3aefd3d21f89d284813db +Output = 158f6fbbc4ab64da8b71449e7fceca69 + +Len = 1888 +Msg = ad345c5af1ac662515f2c0d6064e601816d9cee7a28ee345f1a4d02e601c63cdbc9686f0f06809bae0f1a197942b307599804632a4dfe850790e91f00b4277fee5ed0fa9c8d7d316967043556e652a9419712292a5765a574fcc9723a7d879a4eee1006bc3204ea1ff16aff6dd23d6db5e536af1eb7bc1c13c85ebad7a08f226a01c6020276c02c3e28cec64278dbdb32fcf2436bf17a3f608e19378cdf869eec34337af3de276e5087a028594cc6685558d5a4969718a5e7b8a996ae7d066631f018e004dab326d3a86fa436e0859b79934131231b3fd615d25046d12b971ed7bfb6cfb9feebec53e5bdb85 +Output = b3eaf790dc2e40bb358f50bda006bf7a + +Len = 1896 +Msg = a51455d9a3b1f6c9a09adc78a87a8fa39b830ca2816eba8e1dbd9fa4c544d4ee71e7362011a55fc024d6d58986b08012891062ab4878828738532921008151d88b0f5bdc5b46004e20e88aa389b6444a5a352f8ebfb2f6bddf84248ab59195b01b142ad8289dc1bdbc59658e5993c194357bdb148d26ff773bd7f8a88b7d87be4b7c0ddb21b08b5322afcc119f4fe1374269ce055adc83fc74d40e432b4c0e4941d16bacee89445a777529f603f38b7dab877029d0da6b95b103cc233c06149b259aac143630d618e630e3032c86a7ac955d2a47952aa08a1aed9b0f67b480fa206037dba1ab27d6946a6201c3 +Output = 3f448646d2938f62de2607665267bb85 + +Len = 1904 +Msg = 11fccae478c4ba78cbdd795fee2aadb266b097c0184af65d539d287d114f93017a7443d0aa49d42ab4259339e7ace0e95046d7fa7fd02f548e91619a606f0d0127629a63292a1e8fc33d7de4ae04d41e8146186f77e5fad273c80e9c41182d531faf18c47ccd5d50ff0d7f87cb9851f80299a34687f1207f092b77aa3db2b99f6a41021c2b9c5c14717ee04ac7d21f1fda25c0a8385c6a0458a2e4eddba57a8c1102a392bffde2841f76ea562919053c11d4b6bd118e9d0968169c8ca35938c31bd9424fbf5ab64813dee3d379d4ccf7b08dcfac9aef8435426de8b01d37bbec90ad267ab31aa107559f14e9406d +Output = 0a4e756d97c3751a26df9ddb178e7f78 + +Len = 1912 +Msg = 12379c1ff308078314004e63994259135ad55ffce59d0a36c68ad65a060fbb91f1d60bf11cb29d0aa7d52bbbc043f94b6886b7b47aa3a942e94e055d495a9da39173bd3b1f0f5765fca25d5562116f417b6ab6b96cd2103792bf6df70b67790879787ba402097cbd9cd0add88796031e1ae924b0c311863c4a45d5ce551e96e8314b0bd4cf8756390dc8e0ed37b9fc0ace6bc844884754799748078a2e673e6a425635748e702b02d9f1c13b7b62a42c1e586b1bc25ec3170430c9d49f2ab7b633ffc32c45ae443f87b2176b5a7941ad9218d5dd793d193e1665e454af4f4af58cb07ba3fe28e919a075a924dde71c +Output = 4a39fc8528a74934ee03713a01359dd7 + +Len = 1920 +Msg = 61d986733fd31b6783e0a9e0f637d9f029af783c012f200e736615a58dbc6dd0b68874bb36834e08f97dde218f4ee7cd781071029f8b6ffb24f19e895eccb0ae2134aa683c458bcb46d02e529b517177a121978150edeb9ef167a631253b136d2a45f1235a0119d8f443611b1f28bf162c4cb2621c3ddd206230f545eaf3de3559231194979f41588b3c3e2325bb19d1a2f8894c0b638da8ffb4536cb3db592d3736d262fb074b7391258e13b4f2c7d08a8ce5e82648435f515c884e8adbcc7e4be7fc358e227f5090651992d5b5103c6c728ede74d2476cdf8e5b9476db7e4f1d9c56b759d624180f64a7498fec3e3d +Output = f6c27c162e4fa79a8012582bb77cff5b + +Len = 1928 +Msg = 30420fcf872acf638927132cb547fcd0ed7c09e7324df253b0ccd4d4fac88fd796436c8fbc2604475b345df75d3d55152c9444ad75c3ddb42c7c559ad0d3c81ef0abd866ee6e974f0302a70283f89fc86206b11ff8b78a0d01617ab4e858d5274561997ca469502288773875afe0a29098ba98624392c20538628b4acabd7f999d4df7f8667ff969f27d5a796a5d2516d59741a1debd4d44d766cf86ff6c8e1c00573c02bc1858cb49fb53363ad7f2012187f302529ef373e9578f8e0ecbca5a7767aec42f9c37f196d86cd3aab6cffa8472f7ad259f7c3a731c138a7f44faf80965976346735c82e1feed783f6285a907 +Output = 34be6c4c53d5524eb333022b8324ecc4 + +Len = 1936 +Msg = 3f4459606c132681a6ca18ad6217f1282380eccf9ef901511cb6649b213e4f944bc1010b7cab07ed3c79babc58cb093ccfbb7870ef6e69c4bce89a8c9125f0ad0a65739a20c799839619c7c995ef15b493f25268797b48150461406f6b0fc95e43d9b6f6a09066a97e5348bb5fa99df735cd80a1814924abbdc65e2bf823630dc0c4d205442df5c8bacf447cff212a6d7df30c01520088eeafc2faaa7d8a452447cfd0b154c6ce491334c3f3bd81437e350dfd7233c7f946a1fb1ed3456bf709a1a2b7e117857a92512bcd08e0ee719223c25cdb6bc6011b5c19d18e97ef022696e48f7dd690800d3c5b6ba3b2923b1111bb +Output = 1695055861287eb983b63b4f623f3ac5 + +Len = 1944 +Msg = 6fc2d4b440c6a7d73fd1a7b1619cf9e295e2bc1f9214eb82d44d8524e188ebeed11189ac0d39b863574ee3e50bcae9a2a4cbc3c181c36770ea71ec784e10ee14cece3403007f90dcec9307a25b4532985216e456d97a0e1d00d1df6824982fc36fe11de09e00f7e807885b0fda769c6ba7ab670620a0a7322155a51ced8a74a4bb328c6c7125b52faf1527550fc3efc4ab7294f8e09cfb5652e588bd304d865fbaa9c9cf0054915aec22b29b8295f24a6754b355a0d8d2329d69ce7376492d9b742f1b30d3f65511c697450abc556ea6e2370b44e9bbf36d09c9c06546e63000f2aaccb77374c7fb465c28ca44692c7f2405e5 +Output = bc10e7a845e6020222d4bfb03fca8805 + +Len = 1952 +Msg = be4abcd81fab5033083fe7b8d30941bbd61a04da891a0030e624b7cb16d71d5f49a99c3be67f5b7de47bc082771534a1f06e2619dee052477ada431d42eb16cfe31c82cf5c8315fc6115c017fdbc96767caad1fc88ec16489242fa2d742ec462544b747bcbe0051846b5f05dad25f1a243750d6bce64d49af703e4e3f3c7ae8163dd7d2779bdb43a5d02563dcf79cc8d0d78e34ef77115a571c6092709df5d92da7ba2bbaf43a8c86ca5fc9faadfb09fa25a5a8d4c3a5fd1c83372e2fc9e57ff7fcced20b59a6b2c3c45ea6c87802440c9c47b1015e83d86c3f126fa152b262e1b79653cd3e985cc958b278aae84b0d84c5e4dbf +Output = cbe01352a44727761c838fd6967358be + +Len = 1960 +Msg = e893ce125a7d9282146ab59a8915da030c928da5352acb1a8766c5624f6ae1d8cf8402649c0509f345509c2435302644db6f1e7d08a48d4a984cca2e541c88a61796135c30dbd79d08c0220d05232b9aad8052ae0fbfa9a95e50b48ee07a6dfc06f08b61dda6046aa5e2d1bebe96f1ebccedb0a01324291e239b0ae9ba2c97c3e6bbf2da6a0e994163df309d2b3081217edfc1bcdb7a14902d5454a7abd90ee1fd1ece31a0bd9d098bdfc713139ae2220c7e0b68316a73e9c6a41b2f7b29db409442a9cd475818ac65091f893d7c1cd8bef1180ddb9c4d1034b3e5ebf2c605c6f24f0a16278a13113986bf65727c3829db617014a2 +Output = 667e0a2b1801d901f30cc19e526f0d0b + +Len = 1968 +Msg = dc07f0e6276a3aed9ca9e6f0bb119b4c7e8838aee9ce0d7be3034a6f446ab7842f6ca615a2e027434b897a989ee0caea241418821650757e2a3c7474adc6df58d222a9a04a0f24a5145d744d97ac44e7ee76b7568350a172df6cf8abc06385f06c31dfcf46819add9f2cbc58cefc700b83b5ff725856fb1fa99cbe5ca6c81312a6a232e9bfbef2b193fe3a016c58b81d8cd9d61dbeeaea4c31d3adcf867def87287c8938dc4c92ea99dbd68f994883e7b0eb26a1dd95d6c31f19af4b890b831699c7cb02c6b5e45058cc784c7c553a2f98f2d644dcde274a1a76ab1ad7f93589a28ce290a4814eaa79d8087e3e0643beebf6ce4fe34e +Output = 5e3769ef413a67f8e504ab656ff9bed2 + +Len = 1976 +Msg = bae0d8655008e6e8018bdec26c9df0f3e454ac5c16bac473ec21143bb2b6df7478595c0eb7ac71e4376abea72ffbdd18af45e87b3bc43c48b8dd7d238d6fdb0e02ac93deeb27b8eb8b2d330cb35909c32a63dcb45139b55c075100ffcb3dd8e2208085bb36a04366c67c45d93ee0fa5a1e578ff0a240b517a124a4b7b54760579c7d3b8ede3f9bbbb0fefdf619b73a4753c809157402c6e14eff723493b6fad53d4cbc402c2e4754115c624c8c0851f0915f530c10a76f22d58a705cadb12fc4ca9510b76892cf97b13e7dc1def8c5bfa0c474bebe563942ff6ca8184a61858d0cff40ddda96bcee584a543e59b1201a479e7412c637aa +Output = 4db2c6d61e8525f49c971133e111eba9 + +Len = 1984 +Msg = 685e1b766294528a3b0c1fc6e14ef991aca41621907c38f7980fcaa88f402be300c74ab0628e73f68c5b68406fb0b4c003f03c9582c21749d5ba9f9e4b37c88a9187b180df5279f16f35541333addee1c737af63a5b52f2f9814ab30732ca9a602e7796e41a60d84cce00bc6970c1ffadfc29613601d29b0c96316e66de8763f3b2fca02f053d7b58ba5b4e10197211533d91a2d1dc1acd450f00848a233d65e24a7cbc554217e8e94cc77ecdb148939abc3633a436a61a41503a8df7ad47109a597a53ed5d7ab17cf9d7d708c4c026f2fca98c23ae0ef2700e41e325e95f04ba6467ff6dc3f05572560eef57c0732bea734e14b69eb0066 +Output = d877593e47ea6a1eaa78e649e344f9bd + +Len = 1992 +Msg = 34cadcd939411f543b211105ccbd880004e6e2b5dbbc8e69d6c3cee7e63aba728da889ff42b70ca117457b4599b9749ff793416467485abac64c2aed7e701663ad6ebcd284c278b0edbc2deb70d442db573dea7510bda9c1d4bb148e869ad864de45fdbac60b6c6904aeaf611ab6f99a6a0b664e9ec3836647391132c45f065c6655d51fd23aefb4a6428a0d5f08a1c67a263c59d904f19169edab410268aa358ec5cb696ef60a7919a0455906724346cdb6f4fc8925fa2a80006923065ccbd69ebe680063e7c4a0a6f168acd99be502abe217a175d1a719d599d34098e47227de67324c78b62511955d7c6d9e2c92e25ed22caf66aeff46b0 +Output = 15ea33fe5ffd73e282fec6366cefa954 + +Len = 2000 +Msg = 5842d59698b330bdbdb61295f41431d4accf92324a09e6701e221a9996212a88b25536aab83cd70529a3b379f30f4f46e85c25cf6fa4f79e7a6262a7b8d7b6d10bad05b23cdb7a9aeec8ecd4d0b3b3281752bba42cb9d79da17e57f06a1bdc8d4a936b378b59c185f26de62df2c8058120fa7b3ae7122e757dbe20fb15b344c5574f90c00d7d53cd1fdac90cc116ec5aeb9c8e180975a52ff569e650226895811a299bd52a11d97a5b56bcf9a56411ba60801bc7fbabe3d1f0c9d078f70277c77b69b4fe4adbfa95902ae77d067b1ca967ed4bcd247c9166582407fafe4994a1625605c4d5a55f25a59f731f4c24b430e82d46b4ebaf57f314c3 +Output = 35a63bf517edc294fbb3e7ba1e4b1741 + +Len = 2008 +Msg = b544f67430894566f3b2b2a7da3d93c1991be352a30644044b1544be298ee01cc0fb471d5d80e01c426b8d02040d32b932c971e4376ab8cd82b97e9ee450c9d539a9f4f24a7aaf72f2454701802a28ec5d01a0d5efa5e5aabc925ad8d3b30ebb68758559be20bc514a67670e153e7d4062ebf68d9160d48343c860d2bf60b6b8948883bc801a0e9f91fa75908aee399f88b0fd74e5428b415d8218f56ffec9b306097682590fad461025faefa8e465f018783df2b5f414ca53e80ba9ad3650930721e41311a7a22c0f117d9237c8091b5a6a3d70c71d77086d24c0573fb05142ddf857d7708bf43bd5e586e3ff412b0796af8554e466bae2f25bbf +Output = 35682c319112619df356aed163ca2318 + +Len = 2016 +Msg = 60cffe69f2e982acfe86a782e6cf07f61bc2b69091d5621e70dc9fb30d2c7cf118015a84171dfeef12b2e48b9082d6ccc345bec7004bb9f172626c2a0efa9bfac987f71a092738365a856cf163fd8f2a18015b7d31bb610ddaf35981ac34b74ddc2a7f33b24f59093dc7e8bc4687589582bd36bb0b6c85fa11570ec2cd21f773b7b297d7f9dd89f0233ffff5206a59976943f78878a84b3e805632f55b0a84f3c4e7e90fc618ef7474b65aa3dbecbcb7355945ed60b5db638eb86d203d3785556a911de20149b41c99f4a1ce5e56a67e4ec8c8f1a9dc5ef1a244694d5bf023221077db5993b8ff71f8c17b7e91f041721d57299c3c65fc6e26c3cb83 +Output = 98bd8c962b661bf99e1d1455143a143d + +Len = 2024 +Msg = 5595406c138622e1a0605931102fcc78a090b8c9a7cd4b73c9496e826e1fe28972068e9f1f7817a85813b2d6163f366f191176d0d76fcdb2b975faac86182ef91f09647c6edcf101996a5cc67b746f3a54898e04bf294847e52a2c24f15bde81c4686a09e9fdd774cb2e000925179f61bbbfab6d4843e4bbb730acf4953018aac7e947507822f28a562745a8fe6fed6cb47d73145804c894954e21245cde04fa9155a35904926acaa21dd4aaedc682e4a9898e00d8b51d5de94e33ba2dafccfb8a73282a739666bd17d85417d962865101aca539b19e0a9b1af68bc0efe995351a0d7ccdaf760ee91e1f6ef7ac8c203924ae60c8c907b8d8900fd13d8c +Output = 0d3c0d6ca988a062ff81123ece2a19be + +Len = 2032 +Msg = bf95025f0caa0f91a785b72e56260bcfdd910d3e7174c4366f0a90694e3fbcc7d31552fe8346333d5e2b663ecadcb183ce9966e080698039c100ee8d27e62f333bd61f64e56511fa24e41d770286bc49c8c6924d6e038a91556d285e39251b7661a0129a184dd14f617784e2e76c53aa33df368d218b0bc59519e6e46a44a816ab3bd3a706469cc57dad42865fd69f2d77adfda983482a5ee8cccf28a38afd9d836e0993959a9ae3e04e006c530bc75afcf88ca87b8410e3b54d8b31cd41439350025c67af8ff231f322659aac54f4b92a878e92f085e4dc6665c308ceafa17e79c0762a3b6fcd371cf01a1a50f94ed36a24a96fcc95cfd262dc1fb3901c +Output = 35bc5753ede5b5908e8093375523d1c4 + +Len = 2040 +Msg = 5e2ee47df66e4b1ae974ddb3751475c6e9f177396635b3a8e7858dfe7f345b42e2b60fb427581619cc2f8053fb4e60340b3c76944aa60ba1fa501d779951bcf16680b4be202a6cb711060e6f4b6ae80c32be13563a32520ef2ac3c8142049e5df0741bc2694a159cbfe0d131eeced5f6635e95a7bf414f96d880344400b5c82e8b7a8be98b22d971dea70fbf6be4ef99a80446ae603bcbe2b3b44be75eca030d3c7a4e5b0d1880de774211414a13fe9e08986c94a5888e9a8b2fca92e1ac17a20d5caa3f7796d18a90991fe014c2c9ac8c0350801690606568dbf96f13c3cc940508e8bd5203951e349480c3505b196c3a2b3a9b3cbb09eb539f1fa37b77ea +Output = 261bf7bc8b932ff7d51c5f58bd321cfc + +Len = 2048 +Msg = 88c1490509c9cfda973298b4a479baa703f2ce3442c4e96d3a35ce59e428619a6fe35f4d8f164d321719ae0dca76794c6ea7cae92321d892f3912708aa65ffc5e88e1ce17484a736d38b65c31a362f4e0029a24d37221707fd3bd5f7ee6986711c49e888611cc52ef40f259d3bc1c2f6e0ffbc2827d28e147fbb41ef573de0e7329c2b09fee58f62a12e5664d61f1c8c37b182429a362601a19ad2b78de8f36f530f4d2df2e7ee19036f60e0925923582cc85a633958c5158d5fef193972a950a72bb6bce62ac89d425aacd91875c1a1e8cbae52ac3f5499689202db03e4e8d45577cf7e81b707348577a0170f7eddb19342e5d89af3bcd55dbb72c692459a41 +Output = db4fd92c88ced8e83ca32e09bd615c17 + +Len = 2056 +Msg = b7f384b2776c30aad7b26d08c9ff5ded34adc69f9a49cd39f8e802a1edbe9dbb1fec07dcdb9a9d82fb46b0420d5bd001b1064a674345ef91ba411706d0dde6ed648fce7d1c6f55b44e8d194c218811ebef5c159aee7ca1781021d6af27e1c1a84d83e07b8312e2aa9830af0e4dada811b658301ee3156b56c03045853af1b754a37146c058abcccaa1d67a70d8f31eddcea2a2dd6a39d59393176f6e50364f592e000632e364997e3028835b0c81fab5fee173bdcb106897517e5953b3d8111fb6d92abb6b63d32d0fced1b52f80c4030fbdaca84dc1abcbc20c0d1da9fe850f03a3b9423ad0013e046f6c688a17052ecae0548539752795ad6a92b27bd0348fdc +Output = d0e7455fb1b2a797ee842f56c0c9aa4a + +Len = 2064 +Msg = bebbcb7904128d1d98167c9a7d92c8b37cf9aa0bbba79a8a916ac2029941b2120563554b35832492895399c57347e7a2d09be8e4789757ae13123f2d2f35b37a9081c0bdc713a098072730c333dca5f33b377a01a969ac4877552a4f244d87a8071cf317e24a69f7ba9b2adae6d9697067d348aa77a6031e643b6bae9f119764103dd6a1adafe7774bb66d53b4c79ddff97a3a260ad5c3fa83cdeb92c90a497856eb51a351ca83df6281e276c42ca8099c3138bf897e54a27c129045cabf06aa7f2e4c64f623a3f9a602718a3f93f2b6f6022abb1c2a1edef612430ec9b837c4340eaf2dc243b18bc04303d94c81e3adaff4f863ed5f89789ad6ed34ee7e428c1c94 +Output = 9af06cb4c60068ff4f3d307cca1c1e8a + +Len = 2072 +Msg = 334c5200a5d74c801cd183ae570e4925dc070441e12d311b6c7da9baba552387de86fb02aaaa32b4d2b8b5644fd5e28e026d48119a83ae28b745579b4fe4853752a23c7b892d4894c42b828c34164ebe164a688d915ce155e2ae64a2b640bea0d7c99dd30b0798083a53708cce78969b5fc5ed1b9061d08b34df5736b612d6acb723a772f8e02af97b5709cde5a4c10f27075e255d3a85b0f601b8be1602d64238d7e1c11862044dd060d5b74141d701b4384312c18e08ad713b10a49fb7c549a40ed426333330ee81965bb3a9f8e158507e254a84055f6beab6e64f19daabab41ef060a10fbb6c2d6202327e771e5fe41048a356e4894d1ac99c2274c12914f58a301 +Output = 5586fe42e22acb273fe014970232949e + +Len = 2080 +Msg = bdd1196702d0f77cefc333cf23db0544443dd6309f0d02110eccdd7c1fe5f4567282954763a4916ce973404cbed3c60ec13795e998ba33db996c3e9eebe9add8e8315892c6b3bbeb77abf60dcdae1961e2839fffb73538691b66cc78cfe6bc96e7856b2e7325fd615f135efb989786a570c9fc5c44a799215c658ff21204aafa3726d505b221df366a527ffc67b4964234b0b5e68737df6d230f90f5fe6afd6a9fbd9efdcbcfead2601162f9812dd0a0f3e1d187c70e91b43a0cd667d9414050e9f2cf000558a59e09f70ddb2f2bbd27780458264e53375d67056932ecb0f813db6c6ef5aae498002dad8a88b9d6e3408ac053aa622f5ad273a2523c7fe0af1b3ed486c3 +Output = c9070d5901ab9cbb3d97820a6466bcb2 + +Len = 2088 +Msg = d84ed9a46c4bf74dac1a1f5263e91a6e2b77f68333ccf0e940289805f2392f1e4990546d6756e073983b0e908fb0dfd0f356bc081ab65d221432ebb5eb3b61d929c538399bf843695529d87af60830cc2d1b10247c6ba9fe3c7dbe25e283048080d4ce2f8f9ae9d7ebcac5391f5ad60ae3ae3afee3539c27c2ef587d5f78e0be57a55e78cba29b6363081ff5920c9a311cf782c0d6d6fe42ad7203e6ea82bc38b520303bd77a1fb8c4ca2cd5d88842e9e1dd308fde5c96fa06ed05880c096299a22d8ba13c883d7c16f73602783496dc394b8b96824d2df4d447a78a4c75988726b4b9d28136bf58617983a4fa7a60b02c26dcfa4a118bdb1f6a3114332f27aa4a9d00f52e +Output = ded11e2a7378b0b7de8be04b0554f0e1 + +Len = 2096 +Msg = 2800325dc8349c4cb2926c5b48c43818f264bb9e6e07ceb9687a944a4b4bf4ed568b4cdaf2d363094385a09afd547a737907302b0879ba2787e5ff0233604832bfa7f5e9a41b6f3ab90a5d7d03301bf4ce7e67affc1a5eac9ea6a843c1c5efc18adb95548615a6273baa0bcd036001e31a51caf1f5efa292d546f5d59d81cfe2e0b094e13fc8f117f2eb1252a4ea16888409c0bb99026f1f554c507f6e9cd2dde9ad5a59783d39540558dbd48fd8402a352db0d3905aab9d4640200adc1fdff9cc5a4f83d87a64249d76cc1b6b3269135445040283ff4052d0abcc3f9111dd80b23fdc2908895bd0e2cf4eeee1fe78890ad923101afa14871913bee3327ab6b8c2e56711af72 +Output = 943cf2caef154d7d8a567dd1d8907c01 + +Len = 2104 +Msg = 3203058d7b8f6a8a4534b535dfcfe5e165e104c14cd85a4d3b91e2e71c1afabf74bc5ef4ef3957fc40523045278cea1cd33431cf6ba18e0ee8b9dd9725b70213392bd83a04416a3e084766677a6acefa99c0f1603f8c9a84b6bd877dccb71c6d2a5659a9e1300a1a461b3de300f0f9435f8e2dbdf021e7774ea4c6e13aa4b296ee47ca87af8e9e56a2d79f00e0a6d4bfcca4ce2fa5e8ddaf5776840a97052b572e06141d95e190bbc38273074314c536890cbafc866ae4f37a3ba8410a63ef7692991db3bcb347115224a14050c3356f3ecedb6cbc2e650d5ffc1acebb4566bbc10acf914c8b2b20f6c610f3303a8d3392f017c96fbcc6c3adc1c2f9d333f8f0646111fe6cf2a4 +Output = 97456a25aa838ba093fa9148c22e474f + +Len = 2112 +Msg = aab32afffff8d3d9315cf5ca9e9bed07b13dad11fc63699587c0939068e60ab694c38f15f56b78f6bd18a804f96ebeb069048dd38f21cd9506c30f8f15e6f72c8402a555aed6744dd864e7d9c13de0a57afe13e3781bbb35e8db8bcd42a4e8d22179550652c12fa72b4a9a931e8dbbaf8e342888e0d99c3bd611f09318a94672142f887208b411cb5dd1a97837e8b7954aacb20cefe4d970776c2429bf7c7ad2042c24dff93882831701fcd135d53c2158709ab5ccc3d89c74f410d75ea5eabb9a7912964dd4ea9501e37ce53fddb2196088c9cca0fe038774b19ce51ead00f47e1d3bdf2b11b1cac27e0ffe7e86814609fa2698921ec1f820acb19a261b234757208601bb763fea +Output = d86ed096e3d88348c92445b394728149 + +Len = 2120 +Msg = 8b2c2d71fdbff7c5251bac8b65e4f027a049c3e40489fa9627b6f07e56ba796d2a97172c5bf3711cd9d3001a19a70ca5ad87d74318bc1820e082aaf9e50c8638f0c9ef618fe6ecac2114fbf42d8b04cff84e8cff56b12b09c0194023a704e35308491bd641a051bf236405e04898c0eda6294adf65721c97ee0518c445a97806989f0554182a899b074e86a712d72847e29d79acee07d41393ce9ca466032d99c95413a2bc8b7b88f657e611354f2525d234812e98763ac5d6fa338ab31beb53c2efaf8ad6cb0ed018098ee656089dce9e75ca2d0cc935f4e013443fd3f8987eacf840d20ef32cba94ebe4ee200b7a8b6fe8bc71f108afe9d8a1398c6fa21e60aef72e430b09bc8d92 +Output = 1c66e0c0dc9f99eeb6468bbde5900fb3 + +Len = 2128 +Msg = 560ce9c393fe5cd0786717ff0e7d87d74dac7ac08d3931c63d25b69ad75470d913eef4915c061e02807961a1ab195b63960bac37fc6e09d44e3d8cb6a7774e63027d38f3abbb16cff38aedb928558f0dc4fb6c46e575abc3fdb97acccbdea2d08a805ef068666dc23962664e6d794c5d3f4462f43096401bb46027e22bd192a612c10d917b4f4a60bac9726962cdb9dc70ae3549c519f062daf93c03af97466f0406eeddccbed633df87b911ef99ff11bd018e4d8c46e222d64d60343f7ae7b2c718a9dc43fb39c20e63e44efc2445848f0414096e653fe212243c7fc3c09df8c3bfe596c94d9a95b0279b2871b7b4be4f80708451bd2e2bf54577eb23b28fc860c24a1444fe21352e99 +Output = a0052d3ee98e78a9a8712a46d4654495 + +Len = 2136 +Msg = 1e5dff69ea217bdd182fc8d6d25b74792db36dd0a41a1486c63393eb2b81703eaccc632cd3c6659491ee0a8d2fb510aa87df387d742d54598739a25cfca158adec678003c4980667f52c103aed2e8d79471d11403e91e08d68214947a185357f44f8fff5a2e086deacb181e4f30f136fd333a023ea8fdeaacfb52fb301752e3a1e45870a56e70d811e45069429a0c91294e98c2d616f773626bbfda806b86b68e118c14bc8f2c2d9b4b047517728d8edf2097d668979d2bbd4fc5a2f97981590f53755bfe04ccd6dd4b9eb23c5f1688556591dd74bf518c04140ef4e9c5b543bc26aea6f873c57c5e72a9b12fb41a06426a31187902a70ced54f630ffe4a4ff0b07b2861a309886a56c9fe +Output = f4e8b06d36d0cc0a5d55ed200440d94a + +Len = 2144 +Msg = 9a93f8cb813f155775dc1028f6bd87b7abb9823cf973a617d4dfac6fd50111198df80ebb1a3cca31f724cf2f19abba283773376f690a2d9df46d363264ca527fdc8adcc3ab8fbd941fbadf809eb1e5f5f2df195ee5bca58f0e4e0763eaf0bfa32f524a2a5cc1544795a82a63ae576ee486040e51960f76b6c98b054a8ef9be4f2c56413a5759f91400f696207126bebe98eaff8fa38d09dace2a1a2e796fb9497ea0a739c1df13c109aa0dfe0ea53d4ad39ad56135bec4c3c4362d59d3d9175acb386670c5db0a1757ce7646ad5d5352dc1b760f7429103854b42511c3c0404abc24642788d645de9369b84178d4699c5e75cce18756560226aeec9f71ab9ce1f86e8ba635582ede6484bd34 +Output = c8d22b2f68445c301a9b64a07a9dd2ab + +Len = 2152 +Msg = 9975150d4b0b8f2a958b3aeb48ce95a5f577cf9d5d8edacb296bc1dedcd63b80056c80dab9455b5b40d381b50f0d2129f6cdbc059b77376b27dc2f533f5e8cd33654599f81b0d3cc6bdfbfd90af001ef71f96b6827b6d38fd87468a64b2d462e94f547628b941c057c759d5d20bf5e80ccc183cee993d5bfa4fa15dfe68d90168716f32dbf3b618edd5ec34b3bc15f6271eead40c9566583f338dd04fac492157781040705ecc8f0f462d8aa423f2d1fc64890c4af46ad642df4691f6e1b75b2ccfc23f945ee79b22b4885831c81ef3f3596d56583acd2e9baf760372ada6176ee50f809678a9d5ce9da71ddb3cfce4825a223282dd0ff9b03096b5516497de746452a4153085c7695de44c0ee +Output = 4ccc87f84ea527f910520a601d2e730e + +Len = 2160 +Msg = 360e42de124d46cd941e11f2d879ce978f9bce9caff3dc74693fca705cf3504008da17b785ff10ce74ce0aec377784645d93bf3f600a183d93349516563ebe058cd0ae874fec6961e21a70e0e6c29364d1d907209dbfb81bbd68e07a55bbd902aa3730d9d8dcfa8cc3496b564f22a4a0d4b4cdc4ccdc6416cf24d425c2304a3e4b59c43287976b5900a422d7d95e5f1e4c6e39b55727c337b1b0999e0366b8c1557c931cc6e463d08173beeaec406be8234d757aa4697e854c54566d8225cc94b2e9c41efd8d8af82efe6618f08e71063f9aa69b1d693c088658341ba5342ebe48e880c1925889d9ef8c43e84d11187e8a9cf7a028f1a6c948035a2fd65d854701c0ef8bee0e087bad667de26c91 +Output = ced15f4bdd8ad75b0acd43e66e65e0ca + +Len = 2168 +Msg = 2eb70ab86a0e274462929641cd6feac9ec2f9061c022a97d7a04154733dad09cdd1d82577a1a51d38c99faabccbd20c41e2be48ec56eb586d39b6900e4308d230c42fa350ed8a919cf92c9150a8e0ed9448b4bbd034f434b3b47bdfd096ed647a36f9bd8900ed71e14c42a08efa95b0f4798ef77e28dfbd2985136c7085a52118bec8dca668583ea4478460be3d8b06f0d97f843caef8425d401fee54bbdaa88aa01f793fa05548645f644a64ee1b5ff7fd38eaa233f874cd59f3ddf385e86b5e9f601b9b256f2f901864d61988d11c98593d7335543ab4d85731a3e39078c9e3012d5c6f83f064b5e7089c529a46dd5081efe66c8c49932cac5be88b57e674d689f98423389388446fb1f5969ee70 +Output = a52bf1c3e599d1dde7ee5062131e7875 + +Len = 2176 +Msg = 43402165911890719f9179f883bbbc2a3be77682e60dd24b356a22621c6d2e3dcdd4cb2ce613b0dfe9f58629ee853e03942fa7d43d2340f07bfa4b5ec59c22de6f61ce2ad976d67de6835552af8a4f6e79134520e58607c867d8ca96f9697a94112d52e7d00ba9527c820ffb30929872d2da78ef46fed0dbe14bc892219ede689b817eea3498d266943cdbadd865c11787cd67c8c8524332d29c6ddba301f560f5a57abb6ee6f8c117f7e2ee0fca716581343b33d34c07d42014e0f8e95b688707e16fe2e4bdc46cebfc4b493d8b5065a6571bb8cfb2c5c9b5f94a715973dee2ba7d85e700e4de6efa933f43ca6e071edf7d30e0244d241a7793d2cf5d13007bf4c0e3532925edcf2a03e6661f3c3e98 +Output = 64d6236c5f49e4d9bd3f3a7821c96196 + +Len = 2184 +Msg = 793e8947dd9c09311f142c6bc757e9e19f5f65f1200d0c2a2a10e154f80812b052ebd08104a85dca900b675a20e19406be5c5e36c7b921a39d1f725e9dcbb315516ae492e6c6bc84e0a5f9820ceef44db60e78551d9ad47f24362f264ab51c60dc826f826a3e4ee677aa8beb74c8313ef03d5c5809fa4e48261bc0b3e80f76195dfa165977573a78bde2c49e41b57261d2b1b246721fb7850b97cc0d5d21e8c83b9b8320f75ba9c21b154da259fedf3fc5312128425236bf3a72fb3d93339bf6de2d5edfd190c24df70acdffa6eba15f3287510560dbf37d1d74f74a708db72aae784e9ced3faea0ba8aedbe0fc3e0497f79ebe5b40217471b65653cde7763ed1343fc6133af9443cd5d55e67bd0c38616 +Output = 207e5f07d9836d768419498bc776213a + +Len = 2192 +Msg = 7891a96a7cf27f3c4519c28573b6b68a065af785202c5ef70cdd283f80de556c1fd04f50423cccd5f884f5954c19c8a4c6efbbb0342ea24da92bd28ac79687c83af583cc8550f812012ea86422c14bacfd5e31070730281a202ca0a9d0470d65d0e78d06cc98cb9a6701231d80160749b38fa1af2398b90777cadac5235ab0ede990b5279f7b0d1632e4ade6eb80c324f16952d310cf1dbcb8ebc705493538058dd743578661852d6bbe90e7ed6749e5bed68e99543e1ce0eb79b092c9426d57c5a47ebd0ab2fc881979124a0d335f3323be9b29794c7e1b165bdd932be8178b98dfaf82b2d73acf44fc7c34d44cceb62707c2ac07600a1743799631f88efd490f711ecd073607a9f42f16cfc81b5d17d29a +Output = 669717ae7b5a2c87b725ec6a98708d97 + +Len = 2200 +Msg = 9f38b45953156c860b7303e8b15fe97e5675d47684ebb44ecfd1ea39ae96b4c489cfecb91334f343daebe8541d0a1d44dd57cbbb365204d0f075ea7252ba1f07365e7c5463e4069d165e1d0de2e8f758ba754d9e4dce549392d7efdda31423bdce6dcbf2e92e8ddae7520cdba9015f011657c3e86e678cdddb8062404aafa92c7884415b5019704374511c851a5e3e8819869361432695f7f6f7a964ee909a9e5d2c46563eae9720e6e2b5d5dc067a35ea8927d17412552909c42e1138c1dc59a5ec42ac5cf4eab9648e3f919801fd50b2e8e500a933b5ba3d70570ecf4959a6774d9d2551f3525517db2282f558ad21982c37b689929df4b9828e255d30f7ccfbd6bf89c5b3b53e2753c7709c1274f0c5dc84 +Output = facef17a0c45d6d9a400bc7341c84d92 + +Len = 2208 +Msg = b7b6b382b083665e812582426aece81eec64c3ff2e2a0e879fff579bdd1bc25bd6c350572d1e61ffdf45785c26993ffe9d59cb36a5742085089bf853dd9bc0e4aceae489d27f4c1326e7278ddc96e72baa7b8c7d2ad726e8804e95573c3f942e8251f680684e2e819f35153e568ae88b5bf1903d83fb279a4d40b70ec2ae45209f200ea3b63210319254ccd55a1e4b08f7e45fdf79892b82b798e5e03690dba14d80b45c86d4f90b466fd4bcb1fa1789c87b7fc9d4293b88087fa835628f5f9bd29971139edcf1f705acb35923c554f514df7a655c825d94861c87750c51d8f57792cc2ec7f101dd1533f31677270a362437d81ad93d9b8e7b980a08fd7e4e9784934e16c9bb2fa5bf2d1b5a77ca423340ac1f4f +Output = c7a31f700a0f23df7cd53dac9379aebd + +Len = 2216 +Msg = f7b6f47438514d35d80a9254eeb1263d872a2d1190c1939bf6be50870b39ebce2c303d75a1d77877c42f680065daf8db6e2ef72ec3881c656ce3486cf6a90c2116c86b099009e141579ea4b8f6f9299c2ee5ea12e1cf672a2f646a12de62908affa70597ce8f8f7cdb7ccee667b6c26711768d25b23d7ad4856a3fe18b0c7ff02df5938924108a0e96f46ef181b8c9235d0968d0fd7b5f49b71d4e42c450e23de9d99e465734dbe1d12b0d410ca849ba5bc804798c301e730ca41f9b52d6c0587b7bad3632a489dcd34c323ed02d471353d9e88a2505bd38ce283a55fe4521292b0448c17c089ce6e67d665095f0cd168d649c6991a2468243d028d98e450d98419cf74ffc071de950e630df2299e2ab5092a98098 +Output = ff6f6453ea5e0c3580216fd7633e501a + +Len = 2224 +Msg = ca06eb21bc627eaf7d1f880d31def508bb0a567cde68287fa2ef59ddfad908c5a3fa8dc14f51b9eb03dd5e5fbeb112ec5b4b310fb8222121187edacfc68ca5cbfcb223c10220928d9aa84cab9ccf90eede24857556d07cdc836f76af081ee6249bd5b8091df891fb0a2859d9145ff7780b3c5b98009bc217aa69356509b75338480c5181e8003f9e1b068dd16e8acdf1ab3cba5ffeab7a3c561520d90e7d756fcdfff811ab6123de95eaf07bf2779cc186cbabb297272cb24f1a3ef4629bd332f155b4a1ad42c6243f7b8bbfe84feb4f64923579153761e15d22989c4c37f6e77bb78e1937ccaed6e2626586973943050d38609cbe059f3148d234ba137a64f834cc8c619126655e464786b6485e2b4a48663404dbb6 +Output = 5e28cb535a5ac01b470c7453c59d7583 + +Len = 2232 +Msg = cd7e49c084aefb271eb6a139196dc72384f31fa1b794d20941ef148b2257fbb73b79913f023f28ff7af5ed3a63abc027adda43ac334a3169a632f2f8c7a26c73da1e1b37578b64e8e25026b67db593defd8e3e73ba1e745e8b36d0a4f29d0ae793b41030eb5a58eb3e0e7433d153e7505a59377eb5d943f0d841d71509117e1a4f8597b02674ab0f7678fe3bc64f6486ad8156568a434528759c2ed576c66f14f4d7d94170a1065d73d6ed55c470b387df4fc582a324230d4b8fff6c9f8486de6bf3fe6a31a811db1b70680a337d7c5bd60ba98a664485a840616f60ee136b7f9d212db4d1527393578d98e07c3f660b7cfd2df73d6b11ff3d5ca83bc93ac5ff71a98ea5b867d58d1076a561057e1a9eb86d76508f6072 +Output = fc9b1800ca7d502d13d303ccacdbdb90 + +Len = 2240 +Msg = df58d128892838b0fdead47139f5b410e2abbfa736a1480e4201e259552c75a1b4a391088f2703f7341fa6aa833b7cefa257fd2af2a2af9d41fff7e641ab2fc93820f830fa3ad2701599eace4b4632424599b77b855a30229d26d2639e146caad499afaab0a9cda4061f47e6795fff92333a95a0d912f026bd3e1bd756af53caeed45e7e9bbc1e1a707b65f9f4ce0b65d3023ea3d4111a310b0f794b50c40db3f09bacb2a2bbea5abc73ed0fa6db7d468fb85b8b60a1d4c9ee6095c6749bc1ed40b44150aced5ced50d0873076ce7ebace26936164084678cefa1750aa7c98fe48e7c65fa39b995a9659da654cee354bf9128f2cc78f9ac514a6a6f1daaeba706efee3e86e0dcc29f4d88fb51084cb807645f7f4737ef538 +Output = 07a9a037b6ec7a2dcdc63a688dac0f6a + +Len = 2248 +Msg = a56194755366938f078badea3675bd88314e1eeabdcf6bccfd9e890f99dbe8f719f5059692c3348885d09ce104f68364162eccf65da6bd52f61406fda14bff7d220b32c6e71e19f5eaa02940d99f0f2d75e43903380f987e3aeaa4c755f7a1a3874b21eb999fcb3cfea55aeffe98e94c14176dfa943383ba90c76c56fd0855d3125cdceef170d1c7898439d7bb0a9927bb7071c4ba3a066ec2536490e1a5a47589e76bb837b6b3fc53e8cede571da72834964c47f24ba9009637965e48f715efb593d430b39cfa45237720ed1cf89cb64633066d838ef5d9d51b0aa97c2530aa5e09213dac472d09c3d937ed50c40038b8eca81db72c716147a6c757c3587d0e4cf15ac96ce2d4aff9b71bc43ca85918536b383fd44da600b3 +Output = 06b288e0ed4630c680ad7fd48007e61f + +Len = 2256 +Msg = 66e77120e21c179b630561f8e3003d33ff88542aab1152a324338191260b9d9360dfe4be25006c9c64f5b974dad58fcc86f5052d5dc3db2640f20d932bd8a820af14dd08a27354231515c31f86cbbe0d57c4d1207f69ccb280855e8899a9e5573ccf8587c23d77365eaca4804faa73fe5a3ddf8c78c9cc50cc339bf8d747fc42ef5703c2ed257fe0270487209e3955a678a758f9b0ac84070c46ed694f7a94e9b0f680418cf5112658639285d9410d0d974c63ed8fd99bdf28047b656809555268f2248d0573d812d912ed396a8a423ba07229f27d1abae008b66e738abee987fd94162dc26879ab9259c1c4b7dc9d397c62d18fe235891394a3ed1c1d5ff59059247fa9299b9ff96b7f36ac2affc60e1164844d26f3af7fb515 +Output = 1fc0e4d683d6b87f32be2e62a48a5ce3 + +Len = 2264 +Msg = b4169e6a889b4de7bd3de1f9554a84fbd187ef8bed1ac88b8aa72f6becba94ab2565cb9bd12a6266041a324e813f34392d38966dc3230e98c8c06f13c2d27a67a5c9f6118e9f0382b300ab6a9aadba368a22cfd74077b4c6e284eb45394889e71a8c485225c3d744b33574d4095cbdfbd28ec352ccdd611dc13ccc89b9e36a326ef4e8e8005e87b3ea01b6143514e68eebc49a65cf1ebda64b2f3967aa6ac550874afe5b8538bad741ae99b3859dddf9bf0c7b99b102716869a75b6874a6414a4fd5b4311e1819b9a083443863be494434ae8e75da51256b04ea59137f5f8727acdf30f432c74b60f0c7e02b3641d27534f1fd81b2d380b802415cf1335c3fef88ae9a2b280ef9d417c3941565ec2196a61fed45a2502b564df48c +Output = 0d2234bff2608deea43f5cdcf43f82c7 + +Len = 2272 +Msg = 7427cbd8353eb6cb8326cd55b467c960d866d085f991e0dba1dd710d9d7256b001a4e5d36c2657d78d7a7281e6ac654dd040f305c069d393c87c571461a34d2d67d623a265074e24139deb6b1d24a7852643dd6e0deeffe06fdc376c6d3c4ecaafa4cc6ea84a615b1c76833ce03759b1e256d8e769882c6b9de7594049a3222fe0f52a5ebe555924b1ed811cb84d41780a602a985a9f21dc5a8404b67e42910302b3839b2e92fd26d9ea2c322cce2983a84b1caa6a9ba7daae9b82f6938062ee1ec5204c8067170a9c55cea7c422d77ac3fef64521e4860da215192910c45f9a3a13499a3d3e6d770216ada208b213036461009006e2861e3dd812777e784eac618545adec7ec9161416114c81e4a7c9925c82b4a1fe6eb588cdb507 +Output = aaa397e5c64778ee4cea8953a8f07cef + +Len = 2280 +Msg = 084050e8fe8f10e39957278920982b6af3fab01a6656bcd7cf787b6cde2433552d56792418cea624cfcc853ba9194e15bc46d87eaa380a10bde5930f3758da91e3fb38e2f0156626ff9231407b0375f329e548470026762f3ae52e68ab7afaa452b6f4e82e6b3833522f95603c5e884d635e6a3d0f27e87b6d02b441e3907ad7a10f16ff79d90491f02d176395326e6b9139a5288043483d7fc38d6086a54272f98e04ef7966b289001421102d881195dcff60cffa827ebe98b0218d3dbe3abd81bc2780d71a2a63ab6a1a30ad6758136c3705fb26ed7243de52d892b0e54a006220e77a3bfd546718b96a8bbcd82b2c6869fb74ab8b0d177c301b3686215a82c343ada44c1818dd708878e903e2722af81eaa023365358198d3504068 +Output = 5f5e46786a975c4519b7659515105e30 + +Len = 2288 +Msg = d201298238483020871db1dfc245ec51418a172604bb514f48f5d76358217a41a6be51f71ae1abe2aa7947172bd8c802666f634d6fd9db03321caff64f2b925e28af1bc23706be1ca68cfb38191ad55dcfcd862fe90971d409bd58561fe8cf48805cf0ad39c25115a2de33093614fca9a12be8941b52fb08f5603a4b71601a49d74d397ec51a4c16c7f5585327cd26300712f144acbc61e81d8ebd9ced9c5ca7550b5cfe861897673c5bd3de974d393827090906454f8bbcaace49133aa37bab211dc3f521c31a502a980a722c9d1f0a299898a38e1461ccc3a94676017d619d640bd42b4123be19b93267d78ec4beee364706e42e12cc5f91a61c8ee933f4c5455ef9678c41690910b351d466ca002b769fbb8ece51b2bf3c4d33239bcc +Output = a3c3d3ddcd5b7898b990867790d3c918 + +Len = 2296 +Msg = a4e7f7ea99271b11ac9a02e6d56700f7b9b0848ecf2256e1c1cb1c89152c23350c905ca0ca9ca5c0b8264a41274bcc3136bbe1fdf558bb9cca008d0a14a64cf80fa8b3c2f85c89a171ec2622266534d6b10ab34bbbee3f3c64c29605e5eb555974d8023769924f1a9e949d711bdec04ef3450262690d6a2957b93e62d122c6c205c753e96564809509c6b8164eddf802c413d62947dcc3cb6b8e8d091e74289a881dadbf36faa37978297ef9078b6558eb1c38889c84d28b68e98be214080149c68419a1237d402eb465f7028e0f8eb932092f67b22c1fcf157141d6fd07dc3787a29d777315e01c85232b1a2a92fb8e5f82c4aecffd33003bcfb6cb1f983ecc931f44296fe90aabb20b2327253c353d3b2efe453c1f9587a2abf2aac4e4b1 +Output = 91aa30cd1c36cd9e6842396f97151d41 + +Len = 2304 +Msg = 15e33d1062c0977135a125717463a1f44425fe31d0fd4c0946e9dd962109a606ae0be7aac9e60f4ae8cbdabc5c58bcb4d31082de2008372a3fe2446893ffdc1473f19773e52f5ddfa90d865e7aeb3f7a90ac304d696a5cdcc96748a600475f7c6b7d95923d044bd77f4f72825682f4ed85e24fa7328a83c5ed612f78ee48f7e59e9828305acb9fda7379e74e7987a1b6b99b291304d2768db2b64207e76a6bf715289a75c2ee22928c732bea6a600f7d34bd04ba66a9fcdd214fc97b7215855bd7163188ffd39ca4d225867fb17706e9ff3129c4e077dc5d40140cfc18b10bb9ec4b369299e4d5bb4d784235d7324ea221e0e058faa5dfb419ed52b05fa6c6b85daef0ba1687947d0652a63363fbae51a2b1719e3d99cd8ab4c3e5c2d25d7e01 +Output = 265220cebd5d8072f6622b3db9a43785 + +Len = 2312 +Msg = f87dd1a17df2a2d913b703ea83bd2dfaea003b846a6984581ff329e3550eeab1f8413e304b12a2b7dd2a31c6bab57590de087db6ef862f562bc4e0449feb2297995edd68619da2d6246a3b4d312a8709688d85d5ee71ae1926048813dd297865c51ed7d0255b493fcebd4a0751e30a6d6fd97b69d1f3a8a9fafc48d97990932263c754f0001440f9c56c867b82aaa7c4dd3288f8ffd4c60f8df4491ddae81cd65ba27b515b8f2e0cefbe16312d45061799e1d40ce0dcaf52c934b26768f9ba8995f7757a9c95bc8136fd23b1b87dce6d8b2d862cdcd30b7a9403ac408b8b1644f80e6af32dee925f816fd4848d1aa7cf9b60c6e15b808490d8ab5f2eab65d70e6e2e8145746257aeb75e523112e43b44b1c1beb1c5acc09a7c72f2bb3050a6f0df +Output = f880e57eefd6004eb3c64138103b79e3 + +Len = 2320 +Msg = 96ddd4b72739cde68e6d41a15a53ecc2cdbbb5a89a188f89ed799d09acbb990cfcfd76c908554421fec1552e59619e1e66e35f42013e0762a0a3525494b0b4cc8be8fa7658602f42f7babc00cb57d42c2bc90f0b1d8755f761e5fef6b24337924884a8e5a1c254f4813fc03e389f579423550d2a755c43ef3727ea1a8edaec053dbac73f6ae27bdda539a71026a0effd5670a0c8922397f22b515fe6b1df99ce7173a1ab3c2a6ea56a8eba9f1fc2630fcd00120dfa461aaa444ba382a2b80795ec957c529e01f4f5d9274113aa6d7d738feea920372b94bc8afdfe17e9cffe01b709a15c18cfd475f8ec8494500903d1a423ae2ad13ccdd30550bacd0f8a46bad9b858f032fdd7ccd1c5ca4897febed0158668524edf8c95be2a1ecb9b53a6695a89 +Output = 5d222428185ee17aabc083647a5b8f05 + +Len = 2328 +Msg = 164c665485f2dcfbb439ca24a46f5c1a00dfba34533ddc5a7944a0c6549d1a08c0032b4dc8a555e01acbcdf1b8bdd296f1e13e0f90235b4e5399f7b79e67bb2471e1b82c98f043a521b70367137648535dae9e940d86a325c26d159364012f05122f36795c9c4f50b344930d1d62655a2e8f034c332d5ce7b00622e50d311fb38c36ccbd7e7120ebb7bca66b3f48d2b24acc95bd6ae22f9d04ad453201c03337c53ba37e65375f7d1465630adff137639bad7b711b6bc34ea6aaa604a7761298a789e24779b6b30fb488f37167263a760779def0ac91c2027d456ee2691a65de1967b29d22b6c5a87e6c7d283dad86f2787ae5c0871cd1c173c6c555ae76d311021c3b0ac8fe3c505a5b2ab8cb4ec1dfd5f6b96b12d49a946f74d2e4df50053a4cf1a4 +Output = 79269efeffbb703211b631837596e805 + +Len = 2336 +Msg = b0ef6cb5492fc88c46f67d901057620f4eaa7cc55c3117a3f8fc15cf3f0987ebd9b07a9a703e134066e1df0ac7c4642f7c7afc75c2a0e3f6dbbe8e24036f3e0ba6c2d6d6d0dfe995e5ee183d92349bf0037f1d7f57c5cd2e5108b2b7507c3e9181ec2771535a72122be6d1325af12edd4c8188ed01e7fed2c1a0298f0c7aaf05d1f71574e0f6d53fa090b1ef0541467bbd48e4c7aa509d6a954f9cb421afb9f0fdac4ae65efd3ba4adb6617e7c6d0b54bf9bda133946d37e34ddb32f756482d86fd06bcfb7b5cbcab81e88e7a8bca4efbb4412db9612c89706121507f2e035488e2e2338d267ae382b91cf3070783ad417093326a9fca33c73b66b447f6df8c5c28d1728975a0b766cd7de63bbe7f48c3db3e6fd5a4b8df6e3905cef0351f3d973b4f2a7 +Output = bcb3c42a03a88d28fa5bccf3016ce899 + +Len = 2344 +Msg = b3917ae235cdbe6cd1881fd530d72b02f8d9591ef0484ad7654d4ecacc992a3ba8b1190aae8910e2275546b4979cf4649c8e59c2189702bb923448d1da061ac8ec25fda217b650ce5fc0d59d1f3b6df5f36a2349d46b6cc8850dadd52fe1feb848942e93b87b07973f70d37711dd1f1dc416be9d6cec1167057f86c011535f7381a6b5c3d901bca5900e482cb5a99045d93932a4284178fed932da79c984c4616204991cc270f76019413da353c84ad3f87c884850932af7cacfb1e89e9bb5eab256e285bbef4130a4b2b8c43361d531ea87c76f2b09adb8a0fe14f5dac0ba76384398e50ba6207df708c4779d9db7c57601f70302cc8bab23660988c31d5c6dbd74c426fbbe1eafdcec66a4d8a47af9669321eb1d034b361ab09b89a3d7223709916e2fd3 +Output = 5732857e0ccc6160b83aba140f60f818 + +Len = 2352 +Msg = ee1c50692f17655b09c003f12fce98389537d17081f455f9e504b277ecb3972ed31c45aefaed40b53b6a4a517ab591457d4c28aefed3b4e6ff1468a95e443376a987373833b77e266861e8e85d1168fbacd070567eeaaa4ee9f5e9b77d0e5f4c1966105103fe867638aec7ff016c8422c7cb93b028c2a0f84baf1fe9709b8476cbc0b73f9248c26d5558cddd8e4d4d827946780425e2fcadcb4bf08660730bbd669d144a072099d26467e4cc2b3d2be26747079a9dd2273514d046d8741c5ae993060fbc8b0b736f10e4f31200c3860b3cd928b9b71b8a58cc460825d520dbc2f90190db4593b80afed6e2f83667c6c69e01c3ab9b448cde9cb51eb6aa07f50f41997ff15e3fd16cd94599c6f5b153d936c9c0b672d5948e2b266fd31c570f9a12d3c444fd97 +Output = b9386f9ef77887284b4116863834c551 + +Len = 2360 +Msg = b6da8862927565fb76006558879589876adc2698bf818ab0ebe5e2591b145c1c86f88852f2cc043779d258408d491faf3a9a6864abd25bf6f0542002fed0fcc3f76fbde3ac5059916138d2d4d0855c1f7064c225f64406ee1c8b482ba287e8c793a7efbecaebab32b4999abc58328a0094a4fd84a9c1d2c2faf0227b1022694fe208e68b53844442fd5d799f2d36ef792ec1e128cb3009970fec789b4f8ac5836bfb69f150026ae8c1eb3725587bd3b3c72336ba6478f198e5e8103267a5448cb6e64298c84f664c8aad9cf7e0e780d5e632c4e17d83d2ea034ab3e9615d30924b323729c3528097df0a6fbdcd643d08145653461c38f6b8f17b29684499cfbcb348114c4af3fff1496a7a1e27d95174d8f7aa904c7fa42838e43a5618416b33758e97a8631a2d +Output = 9adcd71157b48b73bd7f289bbd0e655a + +Len = 2368 +Msg = 17c703d96583121a956080095f7bfe61220ef1c2914fc8b2a8958ce1e6bdb8b1b6cc4cf52ed51df9fb1e6fc49c7ec599cf09f8c449f08793aaa22ea2b037ba5bab0f1bbe31b6bb5e120b0eac8ea26b78c6661ab57183ae7dd0839455e4b6edb1ded899bbd7ee9450c171864b9eae9507f06d7e1f70d1e478027fe882e902f9ba376fed74884451d7f096fe29326ced4d33664d89aea2d28d28df4fb127e3877f9f1b4171ad829afb87c39fccb4a21b527898ae7c93bd1fc32becf36b06213f06fc25ba3bac6e16c56f4091be8a19c71ea84cca7f87ec7423f1ebfc37ee83c85938d58259efd16e3c8e55fb871e9998baa9cac81af2f579b36327929e47d3cb803973c153dc724a69cd4a05add6ea362d655ad1d53ca1d57d69e7db2779d7ef81e9479eb2dd1b5052 +Output = e94b1ab6c8c3fe03e7a06c756a75d4a9 + +Len = 2376 +Msg = f0828c5a9f700e2f4b2ed132a537b6ca4a41e68c48b77354de693d95848313ed2bbb1bfdc6cf7477092f197871f60919841fa5415af659bd5ccc7e924cef7f9186da3b2d85a8ab8aa8cfc5d6360aa0dca197d8d607a33483fe03867a9124d3be8645b492e3e3fc8fb0759bf3fd5ac33c271049f658a64dd14d741df65c09579bb5654ed5e869afaea78b6578cdceb961a0f2be4753e7eccdd0880baeb48653519aa2d19e9c200c111778e90caf4ecc7293a40071024f599f0fa71749a1830e07bd65049408f15bdd87a4f058aac242978990d71d6dc4db70923a0b702be8d1e6a714b06033c4e33d80774104c61264fa091d0af39b2fbb68e2a7adca5b9de416df199daa2582ed578959a6b70b277ac09bb3639a947942ae8658c600388b8fbeedda9319e711c1532a +Output = 0217eec515e999be8e06e2ae5b252ffa + +Len = 2384 +Msg = 056563baad224be6c15792965dc2d392769546b9bdc8cef5c6b33a6e6adcc4fe6a0edee654ab2fbfab42d8b34264fbece9b47e4d4b3e0c60170a5d905ef0b8993dadb63cbb374837f44efb7478547b81ee5e5640fd8b03e06c95230b87a50661c56c7126a96f9f37e6a28543c6395b37ccbb57fa9958bc5b0c7c1348ada4b8404c71990ae5fa3ba8c767fe87f5bca1f8cdf208e4e74c3dba40e8b6ad9895d61d18e4b55238822470e0c4eca7cd8457ab372cf264b11090e6500192a30f1e66df72ee4e656aac637979e2d90d163a843853909be3bd4bbdc684ee3193dcea7270a2b7ebab4322ffa9dae94c209885318669478dcad4a6ca4123d81be3c59f01b7f066148c8b8c00ea4a00ce481b0e657fc178507fbec9c14177e6d6fd93e61c9ca423527009916f23134f +Output = af0e9349fdd03458bb73328b44f300c1 + +Len = 2392 +Msg = 4f619860ae05a875df601018a73455475f843f3f99a8943707a0274d99a911c1e60e3f61cd412d445c2af0bbf0bf7a859ed51a42d235422a36f38dffd6fb004081ed91a0722be5b730305ef6b22355e0c7aba477b50668f5205505bd2e3a6a91e9a59605e5eb5a34221961b133876fc1a0b0e6c78a408eff8d6f956feb8ed51be6df56796daa1424fb8d02d4bd144e8ef38ae718980e3db045e948fd531ecb464043dae253909af08336484896f17cb186e1af542896fb700f6a2350af13d37abe78292ae0c473fe82b93bf306488190215e4761820053a7b59a304e4694761f29274b37596f2ab8c0c1e3be573ee3958ea8b629ee75cabdfd2276e062ca3a9d49f749f309b8448504f44991cffd2c2694680492b41dea1ab0aafdef49ddaa5de6912a4437c84bcc18fa74 +Output = 6c5bef54c859936a7f1ec14a6b1cac22 + +Len = 2400 +Msg = 99780261ffe42be0d3b5135d03723338fb2776841a0b4bc26360f9ef769b34c2bec5ed2feb216e2fa30fa5c37430c0360ecbfba3af6fb6b8dedacbb95c1a1ec858f27663e27f8b2ea21b60f3ca82d2e74934712f421a90a2bc6b98d19bd1a244cfc84407cb47aa6638a3e9f4ebb091d21529812dba52000965db093d1908e5bf8a0f00228dc2f55dce6debcec102247fdb73d3a701602e7441f2c507c00712c1f38f51bd1235929dca430c8a33bfb47601da0ea4fe8c436bb878753776154fd0710fe0df41eba9ae96ebf42f28316840f126db2d991d67763234c0d3257bc4766c595490022b6316982d4cc58a9e6964111fe149ba5dc11e17ef4fe5b4829b3a4c3356d83d3ce75f3ad3bc55404fde6acb8dc90049927aeacf71c9740b6ff9a47a668ec0da675e10e3a3ebe5 +Output = 6180121169a6aa05697e2e029f01f182 + +Len = 2408 +Msg = 6a0222bdeb9566310713b726b3af449d3b945f2c293483f768dc95dba98c6aec06078a22e526334f2071a15463f08d95d53ff4aafae11958d8d6cdbf5870eed4f0622e127f1a156d78514a8843e00e27e0d509e7cec6492d2b65885c1c55ad4b6f3c96f67f1a157358d938281c25ce3ca67d264b6c8a1a5eaab04c1abde4b037ccbd4b34aecd3a490831f59eb667d5ba6d60d43e9ed695d39de0a46102c4fe82500cd436d4dc8cd8d0820950d94f2c8b7ea59a282a52c0744c1c1599b49d9f124052b962b9ee1306f8f4faa84d84da9521750171d9a5a52afe8d292a9b199cd1e7b6832224acd8bcc7ae520cd9afe7c29df8908173784cdbfc5b677c7fdefca58c61b9dddfbde2e386d998e647785cf83c55cfc1c072bb708fad57f72894c778767ae3fab0cb39617e9c559d5d +Output = 2179e2c974a22cbe43657c58a0c04b47 + +Len = 2416 +Msg = fc59b7ee4770c7fca7f783179e752234a3947566c832b49a9ab67d8448a01ad9086503bfb779a382bfad5f883ebbd587651f61f51e29e6c0f151cb4028ca436a315ad24645680da34757a109ef1296ef27e8d52eb59be8b61bb3027fbb183fc33fe02c6b38668ac7059c4f81f7a2eed4b397d8f9d7af43e2e0852a2b4bb3954efaa11a16da9aa456c32573da9f92649ecfd3733eca8d7eae076f4c2b1ec3cd712a42a32f712de2b8479914fb2f0b81b54444ade5d75e21815a186e677c6f7096966ed09e4646cc5559a13bccef34cb81d9938ed6464ab5c29f299bc7afdf052407cba84ba10eeb95c3e5ef352636cc6b58681efa5f78c1db9f49d833fe3c14834501331ec9adc6e14c0c381e1e380cd9876a66376a11cd3322212f93b0ae251a18b97900084ae69fbbbf1e6f1d63 +Output = ba0374eba088e7cc54c42997ef0d7c3d + +Len = 2424 +Msg = 3735b965a548a767834a1117e50a5ae1dc6ca6e651bce1f1344204add717931694376a2eb6d6baf197f84f8a053c14c7eaf8d8cb2c8b5203d3ef635b6a8e9cb1a75700894e100b0352eef30b3d632dd0d3373377f2da8510bdf9edc9fa4f0861b7be02e0349ea186fd5585015727aee3dd503e526b5080013b872a604e01df100e93f89a31278460e0548dd419329ee7526c81c55f964dbf95c1a188304d2aa5f2ff6b1f0d53bd7b431494eb4c2905c678b285369554f43113d0daaa66dbf008ac2ae2d790cc53bd6ebc21b0b8b7eb67984bd10ed6317b3efddc5d2cb9523921843be52a81374e10a875bd8a248259b2f95eeeb6ead5ecd09a0cb378f15b0dd8c15afc80aa3fb75b3b67efe15932568fe514629499e94ece338963f4d69d7515adb1b041d18a95866db93f1e2070eb +Output = 6ce49af5e46ca0d7c0b823285bb3f374 + +Len = 2432 +Msg = 64e6bcd89948d5139a740699fabf2777e3bb4cfcb8508e6df90f0ffa67c238f169484532afa004e31543d964cab70685b16129f7079b0601470687744a2101e1b31bb9098ae6a795278d7a0852c7dcf1a8ccf665416737ac8f4d513b89ad85e2090821477343479398fbef6bda182f2290a5bb2dacdfa8d79b8b75366c8d4b5d35b784d3b2df6b4430344277a9d28a8031937e379028e1e83169f94c3beadcb8fdcfea958fe19b10b6e17b12091c7273523f496b376d6a491a8fe7673debbe5d2af95c7552715f5ff4a9a026401e7163bd5023b1e8d4cc601ea4466ebbb97bb284dce05b42b94099b035bb9a97010eb8386f15f1ea858e9704511f48fd7b9b21d221812fa8dec526b32cd35656edd2da8c44251386a93855963d79df4b5aa411de6f44d9cc0b776fc537f142c5094332 +Output = 02415323d48032336b7057576649b067 + +Len = 2440 +Msg = 42c0a452e83840ae858c094c044961d5f2195ddb34a21cd1f5ab575be3803ac99b9872dd617688d515cd6da562e756853947c9ab7e8ef85a019b4f1baff6494b0a6f87d5d602234115fe42ee3667e89b8a98112cf72cfdabf01fcb8ea4314938768b0bc2aea5bafa6e67aface78fc021cc525ae60746d1ceac7ff33a2bf8e398c935252a5127f5090650dd69dd28861ee9becf6017a21ccb1b03f0a9aa15bf74eab5fd9727507b75c701f3ac80f9e29bc82495228d0a87a827f3ea638b4e84d3c153bc9098e8f54698c11afe38cc7a9f51ccd7b4d343b96fb79608ee346cdabe36578a9e0cb60a8560da7ae66d67f9326cfdbb9f4f185b28b23573d40f376b3c31088e47eb83633909923aec8793055c0101696a6b5015d90218539d8276dc559ab0f1169d17a76a7a328398ee184626f8 +Output = 16f0b0dabf917ef8652fa238e689df37 + +Len = 2448 +Msg = 78f14f86da29cbe583187b9f3c77035478f8215a7fd6eff9cbb062dbb29717be46664f6c7a5138ed86c16efb8c60c1b67b6f3999346057adeba19efcd0b65249ef8a80fe55073e6675e4341ccabe5bc4bd6b05f8c88b1e85dc5fb1d800dfadb33c06ea25b57167b81928d6ec3dbc5ae405928f60857ecbeb6593a3568a3ab164f28295c7e0b73a4b3a365b522f7f45801c8cdeb7b162e64650e57d5db5f0e5c5dca58acd1f023f88a0b5cb35e632a4ffcb02fae7955ef7fe63fc46d7cb29d23cc118d020ba7affd5124e2e7fabfb00c9d89cecd6799b877b678106ab120cfe3268836fa6f946019b59a98d17c602df460b01bb6ea4401d24231bc5c1d3c2f3109a8c7049248fcd433d6defe57f70ccde2eda6f956076426361738c015572393c1fdedaf0827cec3386435dd11e6d4cf907ce +Output = a9ba2a252614fd6e3b7d61cafcf02292 + +Len = 2456 +Msg = 16cedd7bf2880a2796e93ccd2ebf1d3fd800dcc059ae800c10fd7c9928b8831d11e19d5030987bf3d53d07116ed94085fbba45bcc25eafbc449324656fdb2af7151538d59d5a1389f9265807d8b854361cbb1cac8e25dab9d06066a894a816410cb4d693a1987bf0e8ea5438d223025b23498a1925cba90c9dad68e9fee4ef03dd049e10a5185a308cd1252bc5e4f2faf7adb78aef18c3bc92c152b0155a5f43704eb9d60fa35952cb25f3681ac1cb1e822fca8754d4d1d196e64d8641d10c0badd94f6d4901205c8f2ce578378336ccab16ec98bcc67a54936281f1ea109e627cef875bb9fa5659bf3024e286f2da0e5aac44468fb7674c707e157b78e0be51c5d6892ac956a34e4377d72e6dd560eb7737fb18356f40c1158231ac530914de70d77e61e0dcb145034927e556f56f6ceb0038 +Output = b4c6579fb69c685fbe8f143762c6d06b + +Len = 2464 +Msg = 718b9d3439409930b8a8f1b8b14b9e32ff6872782a394e3638779693c521e213567af6bbeb51f577d384d1bac4c706642ba288e8c1b9f9ae5f5020b6130e977f7301c32731e309d3f09c3f51560761fc63f986e00180121fdc682c94730473b5702becbe34803f0cb7f624c68f9418c34e7654a81115ff5156c8a3730e8ade7ff4fd5ac91caffee9cf9c666196f591819520da881a002a0c76766b9c0c2840a3a781f38f11f9af33e196ef6a94b236fedf0001c844caf918e47c6e57946601ea32bea05a3ae4b8b294eaa529b0546e01d51cafafb6fad63c47e292ebcecd891c3dbc4a70bffa822e91a272e61362a0541f7ecd869918284147aec1a2e3e440016f84d71ac9c3756f7fc63de8e46436bd642e449514ac57f08deae2c2fb338f60711d31a080c6f93c075cee784ce397054c32fa24 +Output = a5a963aab3410a133751d7ca554076d8 + +Len = 2472 +Msg = c5bfdc95aa5f5561e412574c8d1d60f29d2bc365aefa937f0254c277c6418ab3987b0cdd48223839dbb1ec36d6316043b9acc1e3c9e51c0412467e8dad1a5a363ffc2a9cc28f5995887061c07c693161ace8d16c04af48e05cccbe56b6ccdedac02c7ef9a110821bf137fd14092f9af57ec53b28e8c0dfbce8cfc9fd69bfdf4825f1501d6b0c797620ef0a5705ea64a7372d463efc80a93fbc35e8a84e5b24277635e730abeb074c1d7eceb4f601571ee0073bd7c8586e12e2e86380ee097720b9df8c59e614f446eece925166de3b03813b621ad5aef5dc62ce82acd02f9edbf8d787c0a6f1080b9dc69d56dce8d8fd20b00330aaeb074642d18d547c3762ff3a05208e72e90b44324d39ece187f6b5c7506640d0786cf88cd8cba27b878b3488519febd364c498b34dac3bfc235cd27d02d373cd +Output = 650607f34b54460ff93b469894b33c77 + +Len = 2480 +Msg = b4b9eb83662c3dcd02291616ef4938642a6b9d1b96b1672094cc1a3fd47a09ca6b4c0e8325ad7ebc1c205cbd89c9cd66db2fcc1606401fcb1e968a8a24f842012024a46b6fcb27b45fde90ddf90865a31e7ca35bd6f0b321e4e99b319e3a7295fbc71601ee8f21fbf2ea183ee60ee6611cd889b4adca0c6b0f50b5fee9477fcf25bfca0e470052d9fecc5ea8f9e43ae9fccee6e733d410f0c65040b7ad2753f7c6942a592527a398ab0dc8e3da914783e7e323bd1118a8fa3273a42594e3d45505cc9dac2e0afc7f2034c0b6301df77605a1a6feef9ebdcf7a4049104482ec300bf18acd0ab346d586c9adeba491300c7d8fd872746c35b8c83f9840650c82d2008a5b85622a67e30454f748ddf4dc8b783521e0498cfafd41f9f77ca08a7d810b20779cde7549f1c35e0596844ee23c1d1cea121606 +Output = 631c7c25dd0faa9ccd77dbb99e45566c + +Len = 2488 +Msg = 596759e315391269b02c3164f8e2a0a3d7b12e4834f692c214acadfc053d10d4bc97becffd83330bbb32a5758119893b100059854a5595604ec508fae50e4c151d0e90b63320991db6a907faeaeedade6b2934f012db60e11c63142289d0f354c3f4560080b94c88e9b9e05dfc089a732f5448f25631fd2fc6ae5bdabb2c0e79f7709914acf655329c88b6057f10d1e2a5ab1bf4dcfe743094cd648b41c9a46b01aae05c7f7ebb051741145a3bad87131553375c6debcbcecee9b79ee451bd1429cbb33fc1fa86e8a10a7fc4f788c5edc6772493d1a00cefbb29dd796c69615bb7fb9a253911bfc2840b81ab7d49925a023d6802d0c43f7da4b65d86a1bb9928f2611e76b06c6d7d066ea1779397f7420fcd8d1032ff6a5fd1b7bf2c4bef6c632326c69beeb3980070586890021afb8b36501b24befb97 +Output = 6b74ac10d8afe6cb079b7f3840f3a082 + +Len = 2496 +Msg = 02819eeacfb18edee7ce42dfcca95adc423ef05a4cdc29b8568609b8b49a8c3b4bb0f24c8ec55a60ad9992dc08552ed8ea71d72374d5e687d73e324ec7e425042c5a167f1ab5d21d03f07c4d2b8f98515d836242dd4e64549d67475bb3e0ea8e0b46b18b59c9209c529ca8391c9fc0ce033c38be6d8ecaa710c9f3e862d60160513d6c79354869650366bda8c3cdcfd74463029f0edf4108982bdcfbbb0d92036707ef50957cd8017c1364a30861edf488c267eda787f1009d57aa9fa6cfc6fdb36ce11860ab92f7276e4430d3a241ae371f10b11fcf0116871306d90b62c4d89f34eada801ec2cf6b3e065a0cd9f48cb943a4f360ff9ad3be2898b3d20fb51b9226b39ddc1d8e12af4a51269b4e2d1776f6ccb9515fe3beaa5e0734e41ec14ff40be4695cef1e475d5bce9e684915d5d7ff300dda37055f +Output = aa4e17a0a1faee8e843b8e55807785cc + +Len = 2504 +Msg = 5cf4123ca07cbdb02586138f23faae1d9e5d4c2ee847753b67175eb598e50e9954b8bf4553f9878aee28370229ce84a4f0b36495a150bb41cb8737ab36927801233a7574d4491b474f413725604e95b7dd7a69762d20efbe0ba34f24885fc30a4fe0fb712d52c10ed139d99fd0632b7fec1a2478959e59d9b0d26dc9983535db62141be366fec007fa79e61981f38c24a5fb5a44e0b140bb417b5b426dfa189de43d9b728534625b5567253a7ce701cd9085d6821643ee8c4608df360f98b2775bc244c794dced32676c60abc828d2a236215fd9403ba97348e0c24e87f54c92510dde8a9addaab3baf15d136d9d47cc1e35bcf16580ba98ce6bcb31dcfb2d164d853163a021e107d55ce51b742da873d02bb6738dfc69246011c48716909f2ad89204f8ad8fda554016c06be4c23cbed5691507c096fd3f86 +Output = 4d3d592e08bd15fa8d1ff4e8ff24f649 + +Len = 2512 +Msg = 4464a5b20f9e731d920798c7878a2cf967c91299d0fa7e9d2af4b5c58a89148ad61754522b5a0ce57b8477247b9078f9bcd3db8a17d4deb24f5df0b1f2d2b82280c2592ecfbcf500ae647078c9c57624cde9bf6ccca7910ce2bd87c8191f925a8a8e3db0c56b355473ce082c3ad32d63e13445a7b51da0952b3b0371c617a81b3ba2873ed410d4cb12eac9a6965fa59f41dcf5a39bdc12337100eb16c362044bdd27bf42c353db4cd2e13a4fa514e7be360857c8458cefd0fe34c71ed6a9aed4b6446e235bdb51befddbe38f2e97faaa06e0f47f7dd6405318fd20f1c894ac9c0f221b4964513e0bd9ff4dcffb93e649f98d532e09620ca408867cf760ca088d2fe84e1ca65caa1aaf76ff75d2aeb4855937fc3fb2d75bab16f5669868f4ca8e60bf8f04e8a59ed3c66881eb7c906b446c05781840dd35508973 +Output = eef88d2c1a39b91671bfb2891bf75d01 + +Len = 2520 +Msg = 9cc7f06a4b2cabb537411e8878932f823f5bc249ae022d2aede4ebff7a559456c0e10ccfecd8fbc6fc0b7e3218d01dcd264cfc7699f155d38945253a09e526d2b5cafef58accb6d9fb646d7040b64e8cf2cfbf47d52bdba2f57a236cf4a37066a20a2da4ce0fc2365cd75308984eab07ca6c73850bb8a8df560b4c5de2975b59af2700a45fa8092548e999c3c79f1c86d7ac80f8e2a1a3d2d78107d47cc8cdf506abe1bce7a272eee724a56976b18a5040164f6803edb3c29d63be9b6a3eaf80cc1e37b60b02e4d8600fe0c24c8ddbae2e33469d15a4c2f9d339d8785301ea432c06695875d2492cdc32b295f23af9e8c989ce5ec1cfb7bd9f8cbd34df1a64864cede16bcd1a8833821684ac0fc0ca4638a25075af74795729e2d497b7900791545a06b6bae089327b42bccd4c28380fa40632a8869ef20f9ac687 +Output = cbf1f61d1f78bbc2a3088a3f230a2800 + +Len = 2528 +Msg = 4f05de9229fab72365c13b51f3148ac89c28588247e04b987541a4580f2622996134234b66110d5246d1ec951db15d51fe08aab4387a36a7d76f1ceb6ec3136714c095c0ad49402b6b577c7f94aa5e8f85b8ccb6f7eae2b3810795b75ef096bd718f791a860a1755db3c3138df655627392006b10c96176579f258e7661575437e8a1a8079bc5b799e6654e8864c0cc42229a0cd00e89d65c916ada10f9876a04599bf1b0fc7d43ebdbf2cb611c54a0c49b9e13159463b5a795ddb0ddfe2627ccea5af13cf934a4d3f2e03cb093ad6a7b5b91206a21abbec8fae2c55605b00811f94338f4288854d2c9a1f4ff612793e6e127b7360cbe3c415f0e69e1a6b1a55425093b7ee0f4ce78cedc9695eb5fb797daa64a11dc17c8a120d5213947b76a03fbf17b45d8e69c3680e4941cb8b24ffe96b15b760644de68fecb8d9 +Output = d7110a3b1ce71626501b6c7ac59d7be8 + +Len = 2536 +Msg = db1d44ba87c58685b1e1a70ab07a57c4610bf821c9945d36fcead2b13d515d0f664c440f8bb4cf66da084fb4c5045fb764756abe144b6e6165f0ff7033d88e29125aebaef0be09b6f5970282ae535a136b10889ae5b1b2302431b9c7a0387560a7ec427ffe0abbdccb35c55cb28ed03f3f84599b84eeb3090357089ece989b1decad4f6affc16d42248ba22a1bdd47a5a87ae5aa3829f955c807f4dd032186c6aa421c58390aa84fc840a0d42f6949ac6d9a35b04b8a0a7d3ceb866c88fbc0c5a956b12ff50ef26b7efdc742375a5dbc588b5093033a70e727abc533a54dd180b18f14d97bf4d6fe0f6a205d7ad80c3d2ff63e3da961b3fd51efba1ba13f3f618a954f3c13e5d970442eb20b420adc97bb82089484265926815e6b0ac6fb94cefb116a420509852ae3f28635d5185733c4d8b582deb2ecc981a0e2e95a +Output = 1255b02377c09bf83dd15de18a8866ba + +Len = 2544 +Msg = 8cfbdd596dc8633da2c6d0007c1497da9fd12907ab31bb791cd04aca6f46dd7487fb0b444e3dbc0c9f8f349964444de4fb4d038cdf50368484faac09829556d8f6ddd49d250f3aae634415f934fda93cb0ff7d742c611a9716e30f852181383ca248404c3a69658cb68c7b0a33663448868e9ea5db8ced199b337b2594320d0a54e5583ad571c40c600f6fb3aba8757145a36f0833fb3972dc94f9d122cf5ca9d25c234d3e4fdf972876f8dce2eaf41fb4e5f6857ed385099eac8f711480ae81e454a96ebc2c3e96d7691f6d21553abb9cfd3d05023f5a48ac2348eeb26f8afa5475f38699306a6f358feb4fb011ceabc5924c6e09653f96cda2292e44c1787ce968087b1b82ea8c0a916468d7453859f74d29aad96dbc5bc8d13c1a12a1006f6ad5f1378b4b46531e1692a1de1a012bfad6de9fba8059006657889a6435 +Output = 5d66d31843ad3c14b20eb8041fc9f8a0 + +Len = 2552 +Msg = 4c2bec7f76f110eecd369d79e21fb208058359d3a2f37581d1f7f691289b4ffad32a2a0ee73a5aa4f4e81176da6553c8ddb2aa4bfba71c407c3a5ae0ccfe3afc86ea67e1d15c577eef5d7ec91327c25e73e52e699fb9eac711036b6805e1e7f88bf20cbeda60f1c4e71d4d38366ce712f0a44df73730c95db6db91f17c4b3e350aca7f6eaa4d0fbd03aee48ceb3daa2b7c776fbb6a15a04c93493442d84427fd2cfb2ab9ea2b99b26c9aad8cd9a1f3f33ee7fc7fe16f56dad2d5bc24c2d48a96180c7466420276eb49690e02a9a0aab05f7b5c094346d5509807915fe2044f49f785c43f59db90b0c3a171b40242b7ab06bcf82139a304f610681bbbdfdb5e5ef1ef840ad8bdce4902cc3d6c8d90022c5c3036916b8dcb135f7fc30062619f1d2dd11b9066b118fd2d71daf0f291737b89617f20800c12f0b0d4eff5129ffb +Output = 2d8cc0c334f870083ddc7c86d4ea8a4e + +Len = 2560 +Msg = 37777103bd6e2c305777ca69b0a2ed5b0f26bb1e7ef82a662b9c7afd0e3c0371ccf7300adc7bccfee8d67ce876898d77c7def063ff7c83a6873993e8b02f9e3b99125d0852c10149411abef9c51386c91a0617157d4d3716900f3e59ff59d6706471ffe76867567a2bec9684e7675fbbd046361b3e92ce200dc7853844e23278f6bb1e8e669550f76ef40e7222afa0b4b045575d8b74ce2bc808706dc8f23abb1799c2e594757929d2d92da9bf10d21c83ac81c3ab1bc19e877b06e1d0af77a28eb3f4d4392c58781f44fb1205b47c5a1122bd35e8ae2ee313c84f7aa744709325b0bb439fe5754d1cdc81953ec326d82250129b88569e613496532194d7adf7a239201a0cc6590e924ac61bb06458fd7ede88ddd43a9880b18d1bbfde91b737cef52a41c9f78b254a35d28aa5c09b31ec7327e31483a4a85456ae3ace9915b9 +Output = 23843f7814d4b9c27230fcc979c99970 + +Len = 2568 +Msg = d263bef723055ade7c10378aebabf2f60f454cafd07c7ddc4d3ecb7b162e5aed9c4946b5e6c9ef7d85499459c92b2450353750193184e522ff9c59d7f0dba320d818502bbf88d46dd9de1ee3b9b76f9ec1366b7eddeb713e71fa28b08f795a4a6e1906e21709b0b66217fcaf21197be79b8bc5683c79c8378aa05f915bd0277445948e6157152c61063c57466a17f133ab7e855eb6f6921534d527ffbca7b0a547d11030e574f074af94562efd7a798ad956d4e9b32979e056e2a8841ac7a0e55b17b5d82beea3fa446822f14009baf50d5dd9909bdb23a1d70f09a7ddf99d3c69b0a4e08f4aedf8ad00e2169d8e5d7b2fd9bddbd6d43860a1a473f16d034fb35ae206d07b527878d2a4bf267bcf09252713a752ccdc61239be90de833ad605114f6033156cce9819b9ce1a8429667fadd53c07ee5bb46f4ad26001695c1751f80 +Output = 3ff1163ff81b1b993b93b8ed7b8d3a60 + +Len = 2576 +Msg = 13ad4c5cd51c23abab921516e6af94592131b541c768d9bed6ea8c3ae287ad295c7fd0e114f3e0acfd9a091c30b5d49f344594537d7b021c327024f3341673815b6f3cec03fc47f1c779b7338cc731d2c22a4040e6b4f8504b01da901b25f8d998e35a24a8209f9f9196e70101cdf11a514781ae0afb0583a90677b99f9c855a9c44f0320d4532e1e45b632e97af5d9e6b061f46f2396fddd2e5c415c963622beefbc7bd3a5446dd462ff2635655bd8797cee1afa5547f855008864da063d776176ea76e353624bb427a5b4847a859fc5e0890912b367da4abd588082c822c609d0757ed08d114a45da56784718e7826461af4968dc5b16169b691ef76a9a8130a2da1e1bb0f5dc02116dec0ddf0642dd96dd564d2eb62e5141268aa85c194b7e5474bf354d74936153688a391b763389f69fba3028fda573350d6e062b03873b7bf +Output = 8034b42abb63d00ba761625c081870e9 + +Len = 2584 +Msg = fcd740c7dadb99d0c547126e1324610fcb7353dac2c110e803fca2b17485b1c4b78690bc4f867e6f043b2568889f67985a465a48ebee915200589e915756d4968d26529c3ffe3dbe70e84c682ad08a0c68db571634fbb0210dc1b16b8b725886465c8c51f36a5e27d0f78e5643e051d3bddd512ce511f6bdf3dfe4275900c5fea9d248c2b3f36911ed0ff41a19f6445521f251724657ea8f795b3ead0928a1657f308dd7c7c1e7e490d9849df43becfa5cc25ed09ef614fd69ddc7e5e3147623901d647876fb60077ffc48c51ed7d02b35f6802e3715fc708a0c88b82fe9cba0a442d38d09ca5ae48321487bdef1794e7636bf7457dd2b51a391880c34d229438347e5fec8555fe263f08ba87bb16dcde529248a477628067d13d0cb3bf51776f4d39fb3fbc5f669e91019323e40360e4b78b6584f077bf9e03b66db8c7a1da1c18e0b +Output = 4a12d989522556044adac5ca2400d9d4 + +Len = 2592 +Msg = 77495617cabbfc6d28bde046535aeea8ca63c6864012ca894cee741062eeee7502e1dc922f0d7c832317f2ae4123dd014b3b2e7bd5f53aeefa500e034de0027e122b91c3af5267995df4bc2f234fe15d05a8182b79eda9971a9a3293a0d93f4e10ed1ab430d0e5383e1be5d1e127214260722c9f12443f0d16928ac94322cc6c62f0226d9bd11ce72e56169c64f3c63bc46011de894023d75401beac1f03d26072fc4ff4d99b372e956bf79992fbf7cd993c70f0c72a7e7d3eae76441ac379b3a7d94953d1765c95db232fcf5486dd8247ccf0deb34a77883a63599a1dace8ec684eb9926aacb4a56846674793dd9fe136d93aaf34e7377fb2e60fb5110448931f2447b78e8466e5a59c460735496772cf2af56b344ae5ea0d00419edc14c03033239acc24459adef8ec751923105abe7889ca1b9abcaa52b379975b6824794c0c135bd8 +Output = 64652e2ea7eea059de283da38935240a + +Len = 2600 +Msg = 5c4a25937b996f4ace7696e0321a7cf7d0d9b527f1a7f6a013dcca103b3487c78e1a81191b267d03fce469129dd74a815bbd75a15115027e6edf7ec0cba3e0cf3cb4be3b26b6c15a905e57337c79a79a7730ca9d6f8a381fc53280c3a37b3d0c90a145c241522397b26cc80a76097d8c4cb91ce1f20e80ca3e5e3ae16ac485c4b0687d7516008b018c972460348db39d01e0d33783a9c2c601ea12e1c986a240c491cd1e4dcae1e14366d3fd5d103116be2d5765ca64e65c375e728d67ca7bc8f5a59f838eb80d7f02623da99a97df3fad2911336e46d4d40843c1abed97f8a36a2b5a6e80d1f823ef11ca2c932ca55ff35b676b185875769b1f670402f6011b4dab65a5cb1d881532fde34defd66bbfbb4bc2d36fa1af89197dcc604fee7e76c3ad2af018a4a69cf4aeeed5579e19a82b828b351c296b57a9e258877b8757fdf6ba10190f +Output = 9d194883f9fb1fcecc1f9c4a587248bb + +Len = 2608 +Msg = 1919de308bf7ee45bd4b6f86e83d7cf6158481a03029f07d5f8d359792adeb6f5aa5509cfe73f6b6ccfebc72ad57fd0efc3e07f098e8cf8a38ffe380ffeb9f0d5150a4a3e4d786d11a32c56a8e5affe4ec1b63fe07d369a52577c0199dd6884ca522c28b65ac055f50ef72b6b3d0ea3e8e247e12a4732698cefbb6a994f80ff3fe23929ca879db28153dab9d454025e58a603e73974f6f2ada96ac7a0cd99acc065cfd20d6c66ff4122558686c331aa187d88c6b09efaa22f24d8bd22cff939d62d4e95d161c2b8beeae61604f3030392d92514022dc4149bd2a39fa1cf4602fbd93409c910176b552e1aeca17bfcf772698733b099d9a67e4349f3a05406b4abda2e8256e00b839e6c428f1eb685f2117f2dca4e7ba1f440e73a5d90f691ab50a08cb40d69e5ae05162b51cf4b44800aba672c3e3bc36a7e4f0342161f9d73a4dcdcf35f165 +Output = 77d3ccf3749aa3502da09072cabf2dc0 + +Len = 2616 +Msg = 91174238e468b3fc969a8b6e8f0298b8a13cd96a6b7a856f7e1c4f40bf81e9570d1dc7e723cc25cabf664bba049410c51ce29dfb2315736a40beb04c150f8d7e5aee2c34c44891ec2ca8eea0ed0823408ee7855fa19bde2deae9b6a5c4d3d107c1b1f9899183fe492586fa871305d9113d7219feaeb5cf9fc4c4ebb39474bcda8a8fb74d502674cbf128f9d73f343b2072ace241110b4daa1678d6de4d9b57e0fdafede7cad8fb59dab772f7373c505574bc678e94446035272cff8fb6efa9ff613a23c1c7429cdb265bee51c3c721998dcb304efd0810294009ef2c9819ba200057e1420f0c5e3a1e3bf44cad7ab4d20301c6ea1501666ca9372d1fbbc0922c202fb0d269dd4a5c0a800c50bcff13ea1f85b0c8a4d569e7aadd41cee78d3a090ae917d99e5d662a3251bec5b7fe46c729807652722c22828b23b4a3e427b9a106ae9fbf7735bc +Output = 80c86d5cb23b24fa8b91f1f9ec04c3fb + +Len = 2624 +Msg = cbde35ae3774230fd49af510aacd7e49c084aefb271eb6a139196dc72384f31fa1b794d20941ef148b2257fbb73b79913f023f28ff7af5ed3a63abc027adda43ac334a3169a632f2f8c7a26c73da1e1b37578b64e8e25026b67db593defd8e3e73ba1e745e8b36d0a4f29d0ae793b41030eb5a58eb3e0e7433d153e7505a59377eb5d943f0d841d71509117e1a4f8597b02674ab0f7678fe3bc64f6486ad8156568a434528759c2ed576c66f14f4d7d94170a1065d73d6ed55c470b387df4fc582a324230d4b8fff6c9f8486de6bf3fe6a31a811db1b70680a337d7c5bd60ba98a664485a840616f60ee136b7f9d212db4d1527393578d98e07c3f660b7cfd2df73d6b11ff3d5ca83bc93ac5ff71a98ea5b867d58d1076a561057e1a9eb86d76508f60721d2bc6d2849ac23c67ced24ac74eafded02c74b6153701401c71a2af1dc4ec4e07f0e814 +Output = aec9dcd281cc99ee1b0fc138403a935f + +Len = 2632 +Msg = e3d12ae6c985154e5ac1d8d97967238ce7c3574dc40933f752feb0aafdf5296598fdbfd6ea59fc706930b7bf458637f8a86b9bd53d72789fef65c58cf337f44c083a62dffd92f1a974eaf3c8e7664ba5e8d8cec9ad36f0f3cb4c9c6742ae6388baf1d9a90c1a3c210457579d66eda6bb2e72bbd41c3ce0187019fee1f340be413688eddd1ed825ffa0dfaae6ca05926103a1299c936c93396636b3a20cd74c9e056966233cb4f46cd1eab34a1b9555bfeecddfc919ae507c33098353985a56c8aefa0c226d96f08f1ee03b72628438fe775ea604b7ea5e0961fc369c9cb124e7b9a5a783b96662910f290a06a7bc834626bc46f5740806097875932422c4fe22afd1feed280c92992c2de8adf0247ebe844f874358f090a4fede6394317b2ca117e5da09c371c8d0fe559d0f47a4718f188031966b8b44017d9e6e93d2bef58d794b037f917b4c5d0c +Output = 18a099d4aae678027445c8af9cea85de + +Len = 2640 +Msg = c68aa60fc82c055ce31eac3437cae9f9b04216f09484cb9f58fd527ab84b5bbf0747f19fc343ad9e6c902a3c9644b8d53e3955c65a59d9d1b31970c3f7444d530afa9d4e9ef8baf1031aa296401da79462aa68601490fff870527c8115e1932e7aaa916582d3941d50c2fc8b5ce01dfdc69c3606ebb2a7db37ad5efd3aaa9318fd60b52b965da4eafa922061131282d91217a9ff07463843ae34ff7f8c28b6d93b23f1ea031d5020aa92f6608c3d3df0ee24a8958fd41af880ee454e36e26438defb2de8f09c018607c967d2f0e8b80a00c91c0eabe5b4c253e319b45e6106ff8bf0516f866020e5ba3f59fd669c5aeff310ebb385007069d01c64f72d2b02f4ec0b45c5ecf313056afcb52b17e08b666d01fecc42adb5b49ea00c60cacac2e0a953f1324bdd44aec00964a22a3cb33916a33da10d74ec6c6577fb375dc6ac8a6ad13e00cba419a8636d +Output = 0df4db4c5edae311e31ff684030feedc + +Len = 2648 +Msg = ab8e62df2ce315eec6013a3fd12d14dcbc68ac76019669ad58dfe08c2c56ed534bd8037ae137c0f2a798c5ae581ac46265b9da8be97120afdfa67de693c3be995622e88a762ccc146dc1ddb559da3fc9ac6c209825904b93ffe2fadb6826ec033432b817d30861dd80422a5abcb3ac98fb4b25a79d3b13e21f5a027393c7a21a4dd01c2ae013a6d449e356a769ee3358b91c92bf39baa023a9d73bb7fcee06640ac6bcc98597c4812e6e06a448d2fe904da80ee9e15419de04214dae8be3406bd1db3fffaadae36c98a9e45842a932c821b7422c7d52a69c9800e16129ed79b70bd64ed13725291ef05e98cb3db9fa899c11d690f5fc71e3cd3c9fd6bc56d9ce2180904914c0c11e9c53ca05224c7c59267d711d319a9f3e0b9c2e172d64873a79a1ae6e29f3d1f40651210fdaa8e0c327c4bbdc19745b32bae9372c6560ac837d014f485e068229941f45 +Output = 0408e8b65c4e195006a376a50e5f586b + +Len = 2656 +Msg = d755b926813e8f33f263f0dbda4a9deaa63a12ff47f067e43692741bb5e938b957ca7c78c2d5b307b46325a444b94ced6b827ef3c27ccd918d712cfcf969d39aa21ee41858b04eb7239af1e684e50416fe9bb4cad57f0eed16fb1f69d75a5af5c0373a2ecb3528ea47f19ec923358d0d696ffcab0961f2a1d819978bd8249671baffc5e4a1ce084929507374a813ae79b4e49ebee58a4155dbb4da89832f4fb7975ccf6064e2b77bd0a0b7109be63102e5e4e12df162c3b028b2318c61e34c6f5f389eca9bd8fe2944c7b3c48515dc5106560f1db552405bc6fde4bcf8a957401b7a7b4bcf1aa3fb8eafafb9ed0a780e1e216eb8bac07ffebd7b3b40d3e736d2d20aae0b870f6e98b53ef2165b2ccce1362f47268715494016167e417706b2ce8cd07f314b1f29a9c15ec60457e3a2705567e18fa4ba66c9d8b4f4e66e6f93dc51b336e5a3b29ad5bbf671ab +Output = c2d7ee406da752e4ffa0de0b241047d1 + +Len = 2664 +Msg = 6e6df969cfad4e6a0b7ba37224deb2df4e49f2de546f18de3858de451ab504615a7195a101886c055d1cf6d3ecc63a8c7c2a161e8fcecb5b042cbcaaf40572fcdbf9e402f855f59ef62c3f97cba90f90e1a3b03b7372edca3b01d1a64a25b164372d6df57bbbf21c1cd20325892f3ad5c5dd499dc80486122302a7a2e2bcc97fb636b8e054626a691836cce7ee01c24172ff68ac562b9f1d0454c5048573c337a23c4d2c49f3656c32812144c1c7afbe2f3296d0e5903ed22822b335fbf2a6734166b5422316ec0db1db8ba4cc280933439e5a713cda6e19d692fa9e0ce07a1bdddd7788a9720534df6b916fd5cdd987f76a3cf724b234da55cc21a680e64816bcc91b68a5b0bbc9025abb0ea55e27a493bfc4ca65c09afdeef9b0b41eab174e26512949dd7713b463cf91e70482f9715fc47b52c7aba76be9412f32afd8efaa659d2a931b7017dd4af39c63ba +Output = 643220fc104583a627538af53acc682d + +Len = 2672 +Msg = 7c6aa264929707aa9b2f6a41d2cb0d31b83e8981c1781c424dab44cfd9ac8d52779ba78a7bc6bbcc78cbff486bfd898e350961514fdad96ab9b9211f33b916a6b0525be5084cab7cedde6d052018899ae47e7b98b4f6a6a331e4eaeb5e9378ad0fd7e5fc9ff07ec1e2b2dc015ae3b85eaee500e1579429f69d72c8b8c2025c6f7d716e57aa7bdda43f8d73c28227bbe1798517b1a27e0d6ae5ace210c7cd6af5e0691e7f8fb66f2becb85ad2feac3d2c2fa7e992fc7bf808f1da617ad5be494622071cfbb866dd60d17bbab9383ae445b6939d0bcd5293d7a9446c7f549ba26a299391538b56ce4bd71dbbfd96995836f8915ca57ecc85dff6312ca5ac2d1c6adf55a410724debf3e4e8842882904207dbe94ee675b17628beebc877453c604d2a957eb9d412dc60e1223ec263e94abe49e29a581bc910bbebb8697a8890151bf49a46d6186e489ab7141051a16a +Output = c637ab23c74b7f20fbc61a4e01396c89 + +Len = 2680 +Msg = 37e780aa7d82aa7a6119556a002c8f9b0a73c51d6120ee54e36406a08334be3c9f4d72678e765bc2780506fa6aa404a6a955e47347b45e7ef57cd101184df0321fadb768134ca5806f8c257f33404d7834b4cab1b6ef1b013c34fe7c9fcf28535e0e39f5358def7af1b69a428289d0d95299611ed5578da5629375594140d0660578df561bc0a379a48c4d8b8006f691ab0b9004cd761d310ca21fe0252a4f34bbf391d2ef6d2845301526a2543f2767e8123fa9c5d4316fe468e25974140d85298837b2d61ce6a63e5a0ece28bccc25b1b65656e6f7332592eda70b55877220f63eba3ffa5645647661eb5821064b91ad00be535869891cbe39573ff10ae6cfcb1e00be83a2ad467f34a78869a40e7485f75de842b29d1c0f55d83d6f25d158502ef27a9989861602db28a6281e7b95e1a41c5dcc58d5ed2d48144df8609b842c7878ba6292389aa65c58fa85fdfc +Output = 177241c74dc8a061dd66cf2abaab284a + +Len = 2688 +Msg = 5d8f84b2f208b58a68e88ce8efb543a8404f0ec0c9805c760ad359d13faab84d3f8bb1d2a4bb45e72c0ec9245ffda2e572f94e466cffa44b876d5c5ed914d1ff338e06b74ad1e74d1405d23d759356661b7f3b03a7f7c2dc0d2c2dbe3d60822803408d472b752424ea76af1d79a0e7920388dde0c1903e9364b8d6d7b3b75430754b4d6b91cd83d5740866aab34bdbd0f1bd3dc504f1a1d753ba5f938241ce7f52544e0cc2018cc67b6401ce6abdbc8aafc5629bb643730fa3daced8f425787d61069910073ac760c631876fe81d1127034a544820ad3aa51cbf2d904f8cda936c063561a8a0bd0b1f1801777394630fb6f11cb68a588000861283a2dc9d7d2739ff2ae5ed5af5304cc176cd544a39a99064c1cb3b6bcc88a97ad9f6e381e8a3929781861e91f73516d3ee59d3661b5f584b4b717d0fa7a54da03674ac5fa36d3d76412a826c4c8445f7720337119198 +Output = b4813895ae01b43c9d9ed85a8b03aaf4 + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp new file mode 100755 index 000000000000..6251eb565c1b --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp @@ -0,0 +1,5639 @@ +# CAVS 19.0 +# "SHAKE128 VariableOut" information for "SHAKE3AllBytesGT" +# Length values represented in bits +# Generated on Thu Jan 28 14:46:47 2016 + +[Tested for Output of byte-oriented messages] +[Input Length = 128] +[Minimum Output Length (bits) = 125] +[Maximum Output Length (bits) = 1120] +COUNT = 0 +Outputlen = 128 +Msg = 84e950051876050dc851fbd99e6247b8 +Output = 8599bd89f63a848c49ca593ec37a12c6 + +COUNT = 1 +Outputlen = 128 +Msg = 9a335790abf769877c9e6cd3d5199e8c +Output = 2ece1768a6ef6568a2dff699613f49d0 + +COUNT = 2 +Outputlen = 128 +Msg = a4db76d26235e64dd960f4ab6023e475 +Output = c7284f7eb5b7c89ff2890addf1c6140a + +COUNT = 3 +Outputlen = 128 +Msg = 8d13e66f3c4ab0fe07c4f55ab4bc4ec6 +Output = af8ece5999705d0d604cf05481a79897 + +COUNT = 4 +Outputlen = 128 +Msg = 261b6d999f1e6202cc9e06e203aef6f3 +Output = 2806515d35b2fa14dca982edf003427b + +COUNT = 5 +Outputlen = 128 +Msg = cc0a939d40fefdc6c99acfa37de10df6 +Output = b70b724a91ba865ef434f85048504891 + +COUNT = 6 +Outputlen = 128 +Msg = aa65f144d632d7ec0f2b391eb8bd23c2 +Output = 2c160a9b7473dc0dfd5ba8089e7c7a95 + +COUNT = 7 +Outputlen = 128 +Msg = d58068a8ef3486dce8c88fb4c7385e30 +Output = 5f63f137c7124c6617777f777756c801 + +COUNT = 8 +Outputlen = 128 +Msg = 32a36452a646beba4bf611e0bf2cfcb6 +Output = 3df0ccef456072f3daa5642d4b02bd5f + +COUNT = 9 +Outputlen = 136 +Msg = f167511ec8864979302237abea4cf7ef +Output = 20f8938daa54b260860a104f8556278bac + +COUNT = 10 +Outputlen = 136 +Msg = 34297d1ae9370c83ae2baa7993638c73 +Output = 40a091f062889c81727272f3e4fc96fad6 + +COUNT = 11 +Outputlen = 136 +Msg = f4453766b7572c3d4a97c2b95d02d1e0 +Output = b5fb489da49f500db79d1f1ab0cb98a867 + +COUNT = 12 +Outputlen = 136 +Msg = 4e6e586ab1991a9fe5bea54a3cf97787 +Output = f8569c829df9e3bd4e290de87f0ab4bbe5 + +COUNT = 13 +Outputlen = 136 +Msg = 2dc3d1a8d03d79a7277b3557b0548bf0 +Output = 05b54b3bfbf8958e97a1c85db7856c1db9 + +COUNT = 14 +Outputlen = 136 +Msg = 16cbf0273eaf6e7158bf635b731c80ac +Output = 8660a4c21d6cfd5a47dc2cc7b867bde73e + +COUNT = 15 +Outputlen = 136 +Msg = a0a3dc989c9970b11041b37b3a68885b +Output = d4020f952d6588a151187fe70ed6a31fc3 + +COUNT = 16 +Outputlen = 136 +Msg = e9474a9e7a8bd81dbcca534d8c78267a +Output = 5ca33a1ba329ebadca76735d27c5b09477 + +COUNT = 17 +Outputlen = 136 +Msg = ec83d707a1414ae98d088c956ff1687d +Output = e6c1945ec92c6df1d571ef9bba8d60e128 + +COUNT = 18 +Outputlen = 144 +Msg = 96dbe183ec7290570b82546af792eb90 +Output = 762b421dc6374055a061caeddcf50f5dfbb6 + +COUNT = 19 +Outputlen = 144 +Msg = 70bee186dfacaca737b2b099a4de13f9 +Output = 0c5e6530a41b3fba4b8bbc4cef2c7568c290 + +COUNT = 20 +Outputlen = 144 +Msg = 3ef719bee1b1485cc50e521c2d19a7fb +Output = 3d9aaea9bb2522be4172702d04af3f03efe9 + +COUNT = 21 +Outputlen = 144 +Msg = 07e4a2db89616043a8387b4cbcb32828 +Output = 7d9ec770c2a0123ea3d9cbec3eca1c04752a + +COUNT = 22 +Outputlen = 144 +Msg = c05fcbd92b77c08ba6920b1600d393d7 +Output = e9a1db5ef2cab2b32d6c8e4daff4d24eaab4 + +COUNT = 23 +Outputlen = 144 +Msg = e137b0843baff9dcde0a617cb889f3d1 +Output = a08532d0cb489b187b67613b6ccc2b3e8e3b + +COUNT = 24 +Outputlen = 144 +Msg = 75827fcb0c0848a332d08376666c4b89 +Output = 80fe3c82824c1541a6edb6c68e22b885fda9 + +COUNT = 25 +Outputlen = 144 +Msg = ca12721a7a44544d9518aa0d4e407529 +Output = 25904657e9903ce960b56bcc42a4e9ff7b33 + +COUNT = 26 +Outputlen = 144 +Msg = ef741128cb1abaa43680ccdc7e12192f +Output = 0bd267b9be1cabd995247d9deace127c9d46 + +COUNT = 27 +Outputlen = 152 +Msg = 365c75b9b325a2e1708fb9d91539343e +Output = 6004bf78fb5f0e181aaa8f9890aaa06a7f03b5 + +COUNT = 28 +Outputlen = 152 +Msg = 9551d68d4867475fa02ec3ba669c75eb +Output = c7bf34cb74b9481cd031677d2d0ad2cabb078e + +COUNT = 29 +Outputlen = 152 +Msg = 981f4788c57eb8d064805357024d3128 +Output = 4c206447e85a2cbd4fab891ef3140806a32a89 + +COUNT = 30 +Outputlen = 152 +Msg = aab231df86e774b3761c099046b851a6 +Output = e8d795b389dca8b7b52e768fec79a1b7a60e5e + +COUNT = 31 +Outputlen = 152 +Msg = 75668a67645b9f8c0a737bca19231253 +Output = 9f2ccbe1ffbefe78979dd23e6ccf9ed3dc306c + +COUNT = 32 +Outputlen = 152 +Msg = f8922574de4dee7129eec3037926e972 +Output = 93e7fe138a2e2a8e7ddaf8e8e5595c55f98d87 + +COUNT = 33 +Outputlen = 152 +Msg = 9b0d9b36c46c2cae148dd0f2ffe9a8e6 +Output = aab2216446d3347bb51a6240c33dc58cbc054f + +COUNT = 34 +Outputlen = 152 +Msg = ded94e2f7dac06b4245a5ae06c63d9d4 +Output = 7fcf3586f10aa31cfba4717461958245eab3ac + +COUNT = 35 +Outputlen = 152 +Msg = 27a771a406df8862fe9d988f9f82d269 +Output = 2d8fed871a7fc7521ade70df9564d525537761 + +COUNT = 36 +Outputlen = 160 +Msg = 3458d31eb677c3a369d58608715480ef +Output = eca90329dd0e76f5051eb5cd75f5e015f0348993 + +COUNT = 37 +Outputlen = 160 +Msg = 7243050e327a3a22236772bdc9506cf3 +Output = 62770578d0504dff65e54dbe3ceb509e8cb89160 + +COUNT = 38 +Outputlen = 160 +Msg = d5e102fd62e05073237c292598bbc774 +Output = 7cca5b42a17dcec21511f13930283585ffe774fe + +COUNT = 39 +Outputlen = 160 +Msg = 9eed6dd16616ac286c2d33722e421f6a +Output = 4c5878233a58f9069f9df74977e217e238b03a78 + +COUNT = 40 +Outputlen = 160 +Msg = 4cb7f08addb2374f00342f267ef38e7e +Output = 0d140c1ee0a89f69e3d5acacb282bc71230d546f + +COUNT = 41 +Outputlen = 160 +Msg = a035c12af3fb705602540bd0f4a00395 +Output = 64689beaddf7060d7043f97d102cd14ee2c83542 + +COUNT = 42 +Outputlen = 160 +Msg = b62bae726e14fe9ed55bfa762815f15f +Output = d98b628dc2aac97ea43a7a843f55e3d7eed5c1df + +COUNT = 43 +Outputlen = 160 +Msg = 70cd55d250661efa8cd5aa0b7ce231ad +Output = 481f166894ee480648b093b91827e1847b7a8518 + +COUNT = 44 +Outputlen = 160 +Msg = e8dd215f3107d4f2b7fca3ba036f869d +Output = b727d3db9edf072ff87a1e6920abce8c66c356f2 + +COUNT = 45 +Outputlen = 168 +Msg = efd99fb27a8dc1c9f31e5483b35784a4 +Output = c0cf862a4230b413d88a0205a17352b1683ad1b8e2 + +COUNT = 46 +Outputlen = 168 +Msg = 05a32829642ed4808d6554d16b9b8023 +Output = 2848371f7341d499fc848ea8f249a69260f98b10ec + +COUNT = 47 +Outputlen = 168 +Msg = d244e11f506eb5ea5b4a6b328cdc80cc +Output = c1dcfb1a8c6af1f3faee61e7e4c6f99d774405a238 + +COUNT = 48 +Outputlen = 168 +Msg = 9e8bd95c7b59826a7639adc704dc1ac5 +Output = 2dcd280f1530bfaeb7361a0caf1e3c1b7617e11665 + +COUNT = 49 +Outputlen = 168 +Msg = c2e6e39c94baccf48efcb08f2e08084b +Output = 1062add607a6a79ed9a27413b6a6758eca6a71f357 + +COUNT = 50 +Outputlen = 168 +Msg = 81c8bfe6fc0b1e92ddfad4215752bdd2 +Output = 3b37b980afb04ada89695c70c27eb887a913a502ed + +COUNT = 51 +Outputlen = 168 +Msg = 27583ecf40b46eae9cf7e6c708c4870b +Output = 9c6c40fb1e8b281541e979f7f2700cf0419233fbe3 + +COUNT = 52 +Outputlen = 168 +Msg = 56ee0025d5dc36cb53552dfdb9713127 +Output = fc20a0bc0e9e0f5670758bc3b5f50bdfb278d781b3 + +COUNT = 53 +Outputlen = 168 +Msg = 91edd2a26865b659598f7f6c1c94c2e7 +Output = 52cacd1c121c20973ad01e53d1e418ca15638084aa + +COUNT = 54 +Outputlen = 176 +Msg = 7ceb1e7161c9170d3c6ae5cfab3b4e3d +Output = 420890852bd43a6399f9fe1760a76a26540cf03f28b8 + +COUNT = 55 +Outputlen = 176 +Msg = 59bc722152f2a73b17a7bd9a5522ee64 +Output = a4880b7b6049284de401592ced25d1c05a55e90bad5b + +COUNT = 56 +Outputlen = 176 +Msg = 004da551df7139df9f34299ff0d5ce59 +Output = 41deaa74c79677f8b5e80e26cd2f48d8b30fc939ac57 + +COUNT = 57 +Outputlen = 176 +Msg = cf5881a68d477d9b2d26dbcdf2020940 +Output = 081bd131f9b131e28beb9f76a549bceac680ea9103ed + +COUNT = 58 +Outputlen = 176 +Msg = 497a69013eeb665c73b60ba34397b019 +Output = c80ed4ac9604b1bbd23ca48bcb8b01dab730af9d1c73 + +COUNT = 59 +Outputlen = 176 +Msg = 08206d367db60c75ad9b3c8bbfae70ea +Output = 904062b64201aa792ad9dd2917757f96c707312694c9 + +COUNT = 60 +Outputlen = 176 +Msg = f03ced4f360ecee8f76248536e1c04a3 +Output = 09b5166e6eaec706ee55931e3b5947803dafd8c9362c + +COUNT = 61 +Outputlen = 176 +Msg = c7280bba55803bc5a86a11c366467fb6 +Output = 32d1367afe291d16a06c48c59ccb01b64086c55d1336 + +COUNT = 62 +Outputlen = 176 +Msg = 0d6295543e7d7a46c70a9dbff7ece755 +Output = 414cfca0e209e5a979d74cefb9bb1aab57526a7a8609 + +COUNT = 63 +Outputlen = 184 +Msg = fbd93adb9e9176398cf1136a1f02c6df +Output = bed2e63ebcb926a5a18d523741d1cbc9f5ecc98a97d9c0 + +COUNT = 64 +Outputlen = 184 +Msg = 4c1a84f9eec120ad7c5dc0b1015778da +Output = 854ec602ff61e496ad68143a94a290ef1af167735d318e + +COUNT = 65 +Outputlen = 184 +Msg = 4c9a0106bdf32f111c983b3fd9c7b8e6 +Output = d4d4d9225d523ba24844c5f77d82da81b4861302a0db5b + +COUNT = 66 +Outputlen = 184 +Msg = aa369a4009f21fcc54815d8fd9cb2f45 +Output = 5aa0fdcf526ede4bc11e36c0128dbbcb5893ebf945b9db + +COUNT = 67 +Outputlen = 184 +Msg = d3a08f2cc59c658a4c69176ff0c1830d +Output = 47cf0672e166060135762779a673491c864600ed004b3c + +COUNT = 68 +Outputlen = 184 +Msg = 932f457305a9a14330a29121c58e074d +Output = 205e8affdf54f6d475ff391fd52915e4c0afe5b8a6c18d + +COUNT = 69 +Outputlen = 184 +Msg = 03aefbdad93b6896dcce1c729fbce988 +Output = 7e84bc8d013ee9c40d29b570b2ab37ad93bc74ada2d51d + +COUNT = 70 +Outputlen = 184 +Msg = 2d31ec167adc7a023568dd02f71c11b6 +Output = 25f5715991dbc0e4f7029fc9eec8e64159d30e669cd792 + +COUNT = 71 +Outputlen = 184 +Msg = 7bca487ff0ce5452d92e225c9b8c5bfa +Output = d45f7d6c309543281f62bb91f03ae976a3982e690cf803 + +COUNT = 72 +Outputlen = 192 +Msg = aae474370700c8896ff1bd90df4de3b6 +Output = 73750ba855ce376034dd5dc9c1cf54e3e2e65bb0a1c7209f + +COUNT = 73 +Outputlen = 192 +Msg = 431d4c79faca0e15b720aba4190ee430 +Output = 6fe71e38285f0c216f08ae4ffe8af13502538a19413bfa0e + +COUNT = 74 +Outputlen = 192 +Msg = a0b250e40e54e3046564aeec126da60e +Output = 6223b013a47db143f7fd3a99b897cf8ba1b394bfc58fe0ae + +COUNT = 75 +Outputlen = 192 +Msg = 64465d136f9081e293b3aaee1a6310a1 +Output = d664a13ff90ad944fa60040904e06bb69a8ef39e84de7707 + +COUNT = 76 +Outputlen = 192 +Msg = 382ce6a97be09193404b5f3865e6baeb +Output = b824c8f435b8f86863d40522bc5875be67bab4f798794c7d + +COUNT = 77 +Outputlen = 192 +Msg = 4bbae3b83ecc337e0854273d3ab17467 +Output = f6dcb321edee6846adfadff9868f2ae5341446eed3a257f2 + +COUNT = 78 +Outputlen = 192 +Msg = 70ff9f09596e13a9ca6a73d0bd95265b +Output = 06eeda2bbdefdb2dd1567b6d198ab73b742d6c923ba0044d + +COUNT = 79 +Outputlen = 192 +Msg = 672630af113a015cea520e6e48bc8726 +Output = 25021f325085becfe19e19093574e86e32ca51605c0ee895 + +COUNT = 80 +Outputlen = 192 +Msg = 500e735c87c19291749b653953b724ff +Output = 4848f7a15cdfcf2cafe00186ff688eb626bade0e0877a894 + +COUNT = 81 +Outputlen = 200 +Msg = c1b88c92ecccd4755987dfe1a915f986 +Output = 6e555538878906721fbd2c8334f4934174ae5317cd249e92af + +COUNT = 82 +Outputlen = 200 +Msg = 593def2e2124b69fb8e139272e922e71 +Output = fe1119ec2a57d3f22561b9675d8091adbb50dc702363afd61c + +COUNT = 83 +Outputlen = 200 +Msg = 2f034a5fd01e46c9bd1951f1a76e4f3e +Output = 45e7e61bd5cc353eb81b83c6f135079893667c9b52475ee096 + +COUNT = 84 +Outputlen = 200 +Msg = dd71192a4a9c80781b418ca3eb1d5671 +Output = 14d8f04d32b86eea2777797da4e96e4763022f5383310ac9de + +COUNT = 85 +Outputlen = 200 +Msg = 86bbae4f6fb8d1d54f026fc84fb58540 +Output = 61789ea823deaf5c0eab33f10d13edc49a58dbd3f2dda3428f + +COUNT = 86 +Outputlen = 200 +Msg = fbdf1a638c314f7d4c06d8133c6664a3 +Output = 6b5741086698203f572ab5eac2ca3b4aa17b9374dc943f0fd5 + +COUNT = 87 +Outputlen = 200 +Msg = abcf1a831fb7db1715f9e9b142c6c39f +Output = ec1370181cc07bfd882b0fc33f964f987542fec1cd856c8f58 + +COUNT = 88 +Outputlen = 200 +Msg = d525aed5907b542bf35ec5cd6c167769 +Output = d025c9553362f7010e38a9aac418255ddf3f68243d55369770 + +COUNT = 89 +Outputlen = 200 +Msg = 489f322110002548de11c52e10058945 +Output = ec9804e417e0ec0f465d102f613d3902e0534dafe40df2601e + +COUNT = 90 +Outputlen = 208 +Msg = bf8594f322de3d179722d182273f51ba +Output = c2e5b8946c6c73739678a3dbca41a8a615a0967773a51d2fb387 + +COUNT = 91 +Outputlen = 208 +Msg = d87f23db7553ebfceaaee817a49b0f1c +Output = 6136ccea5eb15b2229d6fc169db69d229fd0fe7a02ed6d87ea58 + +COUNT = 92 +Outputlen = 208 +Msg = 521701465c9acc253eb47b5c0b3c5a99 +Output = 24581c251ce64fc80db5a59718174a3e50860b6ba6c3c2958bfc + +COUNT = 93 +Outputlen = 208 +Msg = 87f6866a72ebbfb9dee65892a2ea953e +Output = 81c720730917bfe26ab5fe8a827742a42cea8048afa2c42b74f1 + +COUNT = 94 +Outputlen = 208 +Msg = c3adc0c2ffaee0394fde2b061d12f4bf +Output = 3ef8f195b39e065ecf350d3dbbd79cb148c03bbeb2401576ff27 + +COUNT = 95 +Outputlen = 208 +Msg = e4a96e93bca819d46c7c31164938482e +Output = 1dacf817ccef372c343dc3db365abe2af088379a226d9b1a3b46 + +COUNT = 96 +Outputlen = 208 +Msg = 07e3a2e0640ea1a22203706b62b54471 +Output = 95ea9f55a285d83174b3cdefd95bcda974e484cfd3b50d84d17e + +COUNT = 97 +Outputlen = 208 +Msg = 6fe4a3c04e258859e3826140222c6d3e +Output = f1caa4de0a00fe7be1e882a427a1932418188ca58daeaea57e62 + +COUNT = 98 +Outputlen = 208 +Msg = 368bccbd80655a012c3a9468f42a28bb +Output = c46ec72fbcbc7fc9c9a3e160f66426a7e7b58da1072cd92aae43 + +COUNT = 99 +Outputlen = 216 +Msg = 606e64147e3db716c3d20d12144c9db2 +Output = ae8b8acaf035d9d42f53c437fb4a08b129ac6e29b7abaca6c59ca9 + +COUNT = 100 +Outputlen = 216 +Msg = 938ded9a183b6faa6236347ada548ba8 +Output = 5f5d977ced561df28906243b298c2974035e3bb83f3d3123f93dbd + +COUNT = 101 +Outputlen = 216 +Msg = 9d3218a3b9046e80c344dafc5c9ab416 +Output = f20fb033f7a4c01254e580556b36aaf607a904f0d8d87b75bf2186 + +COUNT = 102 +Outputlen = 216 +Msg = 9719a6f3a37e1af1d79016a5056b9822 +Output = 9f23c82a7a958443ab3851f0c1cc1dee339c282dfe9d76d5bef4b0 + +COUNT = 103 +Outputlen = 216 +Msg = 3629384895a8304336460ebdcac42216 +Output = 078d5e9d7b92a70da55b31d0e82ff2018759b9b91deaa3f43372e5 + +COUNT = 104 +Outputlen = 216 +Msg = 8582cf482e3bc15988c987fb075dda11 +Output = 4f03cb4d9d119301587e5b866d3cb3872ae8dcc372ab121f3f1707 + +COUNT = 105 +Outputlen = 216 +Msg = 1bbceb569ce7a3c5ce121cac63bb2ba0 +Output = 56ac3177da634f0f4a8d0bc49dc6762193218ad80aec2290c50534 + +COUNT = 106 +Outputlen = 216 +Msg = e68a402884a458ee49509f77d18fa46a +Output = 9dae63347ed29e71c73e8c589184c5c94a85051bcf841727681a6b + +COUNT = 107 +Outputlen = 216 +Msg = 4a37b8498861c3cb5d145b35c71f9c86 +Output = 69f8eccc9dca32fb1725f912899bd55ef8e5cf6194710acee4e779 + +COUNT = 108 +Outputlen = 224 +Msg = cd10343363fe9ba5558a0d547bc3a5fc +Output = 750120acfe4cb4181831b8e8793bdd3481eb9c45daa7aac24035c8ee + +COUNT = 109 +Outputlen = 224 +Msg = 1deeeadcc8711b5c4f0234f033b15252 +Output = 4cb4e14dbb2e0623d061cba81b01cdc9efc547b8659ccfbb58c56402 + +COUNT = 110 +Outputlen = 224 +Msg = 64b865cff25adc9364ff36eb75cc17b2 +Output = c4f83d6fcbb3f29dfb3d8ebcd052ce6056bcab730b794458e6ae2ba7 + +COUNT = 111 +Outputlen = 224 +Msg = 90723cfd10c22113bd28dd4c09a5843e +Output = a697b354f636a1cc9985590bb84aea11dc8ed80ebc95f90911188279 + +COUNT = 112 +Outputlen = 224 +Msg = 2c9b5a2717f05a6db21a2a5149c51af0 +Output = 76af83b5a0dfdbbca38c1befaaad3e63ee45a3325bc584c1e0c22ce4 + +COUNT = 113 +Outputlen = 224 +Msg = 9d1336eb5e7e2ab35dbdf9de54aedd4e +Output = 93788a24ede50f27c922c10bf3a9cd20c3d84bacc0cd6fd3ece586bb + +COUNT = 114 +Outputlen = 224 +Msg = 21ccca432f535e4624b7ab39ff49c8a5 +Output = bd62b3ecbd2bc05b9cfc4c1248af8413dbdbdaf19fdf60d3134bdd93 + +COUNT = 115 +Outputlen = 224 +Msg = cd65479018c98f9e784485c42fe58f1f +Output = f5e4adb0747b70b66ba3407d8b4cf0fe64b8a312eff550979b515079 + +COUNT = 116 +Outputlen = 224 +Msg = 2e0b24fc8274fc7644d81796d0b053d3 +Output = 0691797d9f24556c5dbf1fbb9c5bcb447cba326ad60940d0c55f25ac + +COUNT = 117 +Outputlen = 232 +Msg = 73eeecd1f5c1a64fbbece5876c101e32 +Output = f297d2264c57b39a2cb988e68d721f4bb1690aab0c302a9048608c640e + +COUNT = 118 +Outputlen = 232 +Msg = 5f67c964bfd9fb70f56ed94565898393 +Output = 52d45923709c9df92ece412005c6b953166716b2719478e8730941a4fc + +COUNT = 119 +Outputlen = 232 +Msg = fa43adcdc394f77c4e64747f19c833b7 +Output = 32f7d93bda1aece6fa39095c4b55e9a34c4c56a18cd82d5a22f5ef73e1 + +COUNT = 120 +Outputlen = 232 +Msg = 4be0a6f888f251902eefcd035f02e9f4 +Output = bf7390dfc6aaf8f56d23979ec1d92d2092de3fcf170747ebcc32d1ef9d + +COUNT = 121 +Outputlen = 232 +Msg = 71eb3e6f0e8845ffb1e7950dd1ee875d +Output = 888c97aff7adc72af2f2c8daaddfe661bb8571a1ee9fdd6bf9ada0563b + +COUNT = 122 +Outputlen = 232 +Msg = 9a137bbeb20d05f3d4a2959a1d4d47aa +Output = ca8c36ea428cb2718feca0451e3d98613ef27b587b43973773dd2f2e40 + +COUNT = 123 +Outputlen = 232 +Msg = 43707282fcbc66599cb04ba3138d31c0 +Output = b9a7cfa9f54c0ea302182d82324f76dc0718d266879c1b9f00e62612d3 + +COUNT = 124 +Outputlen = 232 +Msg = b232d9a085d7d13d5e7e86616a32278e +Output = ae8dcf860461325b6359078ed3af5497be642b31e2e69200fb94ef773f + +COUNT = 125 +Outputlen = 232 +Msg = 64e7bcd2bf9a94b420aa117a53bd0b2e +Output = 6316b49efa50b05be9995572b6da84a1b60820ccaf2911c6ebfe1db751 + +COUNT = 126 +Outputlen = 240 +Msg = db8e4d7be53d2396fdf82726b2e57a1d +Output = 1aa263d0ff30785a74ad2ab0aa635ced434de00e39b3e544aebbfdab0adf + +COUNT = 127 +Outputlen = 240 +Msg = d94aec50b9725a976ef047e0a8457ddb +Output = fe3e414232ec75a304cdb8efb854c14982a20659e6120ce0cfad027dbbe4 + +COUNT = 128 +Outputlen = 240 +Msg = a265cc7609106afe878f41bebcd30dcd +Output = ba648549536ff8a6e9acf75cb44f989fa9154297039f8b1c5cf14a8d59e8 + +COUNT = 129 +Outputlen = 240 +Msg = 52a10c3726f7d4be303e17edf530b5f6 +Output = 3beb8559d3331fb86d13e2910a9a6d423baeef09af488cb7231bf5aff200 + +COUNT = 130 +Outputlen = 240 +Msg = def73dadc3bdcd938d2c59a76a8d9322 +Output = 3a3fb3a84ef8006c2e5bb946013ece9551105bb883d1bbf90a21247f162a + +COUNT = 131 +Outputlen = 240 +Msg = 3e3acb7c71e82d4c557bf7a95093d6d7 +Output = 9b7729cf16cdbf5f1cd0582a1492755d48fec6c55510ac0b3770a2bd32ee + +COUNT = 132 +Outputlen = 240 +Msg = ed81dded03dd2b214c939579be11e764 +Output = 7c48fc1782857b5e2f0502e58f516cbc4548598dab186cadd0028fa50ba4 + +COUNT = 133 +Outputlen = 240 +Msg = 22e1df25c30d6e7806cae35cd4317e5f +Output = 7a16ecd689370df719ca1e4f5add393d23a2ba4cb0cb1d22e0090ecc1461 + +COUNT = 134 +Outputlen = 240 +Msg = 6cb98a9dbf7c4982ed9c2d4a71b62da6 +Output = f0b7d6013b1b37bec7424890067faa81f345751b31ddd0fd304d0bd00ca4 + +COUNT = 135 +Outputlen = 248 +Msg = 5d8e8b9854a597c3277395cd3dd5c28f +Output = f67d83cbe49b580d00c42a5fdd6446a755e227b57e13ec3072fe0fadacc950 + +COUNT = 136 +Outputlen = 248 +Msg = 44364eae415dbbfdd75dbc38a998387d +Output = 1c97c7294c140a1c57c5efeb2d7fc2769d53ce6789d70af2c8d0ae4a5ef858 + +COUNT = 137 +Outputlen = 248 +Msg = 6da13cb59b6b208210ba6c34716e0c5e +Output = 970f21db638b8f59ec8af7e2d713f56933a19c1c830fb87eef9e324f3ec890 + +COUNT = 138 +Outputlen = 248 +Msg = ef46ba25fed903837bd6f14da02125b2 +Output = f7b188cb797551ccb5c431d405fe609021efa437233a78cd7afdaced081472 + +COUNT = 139 +Outputlen = 248 +Msg = 1a26596839fb83304bc469fbb56434d9 +Output = 0a610c3dc22292e8309b335b5030078269fe6f5b39d50ceeadea39b4d9de0e + +COUNT = 140 +Outputlen = 248 +Msg = 87d5aa9f54af9d83b1b57678902059a5 +Output = b2274f89944d2a84aa57d8d8b470da9036036d74bd1cb0adaaa2935ffdfa3b + +COUNT = 141 +Outputlen = 248 +Msg = da044864c8217a77d663aa3bc90d6716 +Output = a209bac56d92f8e6b2907b934322951cab36cf48f00358ba2e45364be416bc + +COUNT = 142 +Outputlen = 248 +Msg = 381e6b77a78a3c072c9d5be23fc11d50 +Output = 20a8e73ec0e9ce0e6b8a53f41f63e8df06bc54a20b30bd5515210a3f5c36b7 + +COUNT = 143 +Outputlen = 248 +Msg = e1095a806e6e42bc225f85edda98ff55 +Output = e94ebee167b533ee2ff4348d984e472695e1361234a2619310222bca76b223 + +COUNT = 144 +Outputlen = 256 +Msg = d94be6703183babe2a30331b0028193c +Output = 0583c92e58ec7df9365dfa9ae3fab8bab0ae1a85c24cc834751a39159fe17d77 + +COUNT = 145 +Outputlen = 256 +Msg = efd1c510ed89cabdf29598c0e41265c7 +Output = 117df5485b9c7d13f31e7897da27d508da1437fbafda349b33715e73d935c615 + +COUNT = 146 +Outputlen = 256 +Msg = 35f05940542b20c76f0d26f0826d78e7 +Output = ea14fce8784800d1153d46273b377ad7e2ecd69c0203ae508dffe5cf6d5226fa + +COUNT = 147 +Outputlen = 256 +Msg = a35ee6136d2e323ffc855c709c5426b3 +Output = 1005e8b44095c70b7fe22bf2eb0be4b46ea09ca75ff8ceb0167b86e4e7bc01e8 + +COUNT = 148 +Outputlen = 256 +Msg = 9de0f29ab812173dddb33afd611b6787 +Output = c7d46e50d46ac4c1899778b36b06b2ac624e2b83c9e01deb5d47c0b82e41df71 + +COUNT = 149 +Outputlen = 256 +Msg = 049a9a408e559aecc24b3eaeb3164a8a +Output = 9eec3746f1ab442cb915aa0df5c8205108d35017e6998351ee70df7340564cc9 + +COUNT = 150 +Outputlen = 256 +Msg = e01cbb1ab95410653be263b1c63e9e53 +Output = 4abd4c46f3d06e4fd8e0e7b0a98496159350ce8af7ea331772895d71ecf8af63 + +COUNT = 151 +Outputlen = 256 +Msg = 22634f6ba7b4fccaa3ba4040b664dbe5 +Output = 1a3e90821cd0a88e5a6da728bacaa30f7a1086220e72d1bfcff922034d29e629 + +COUNT = 152 +Outputlen = 256 +Msg = 0ad6dcfcb33ad0fe51b0bb94cbd4d9da +Output = e97c9f53eb6128128b0c40efedbb61acff8a616dea7035f102addb1f5d38df68 + +COUNT = 153 +Outputlen = 264 +Msg = 31fb6be396d8ef43f09a7687d60fe70b +Output = fd982f75a66ff3798b35b41735a4337a3d76a5e5b7cfb652bcef82b418c51daf63 + +COUNT = 154 +Outputlen = 264 +Msg = b9978bf8006d4551a3b905689a60a8f8 +Output = 0dad76a9d67cffaaa23c98f2657ed832d2f95576f29e10681354e810f478708960 + +COUNT = 155 +Outputlen = 264 +Msg = a479e25d7777bc8fe36d6e0037bcdfd0 +Output = 7be13f84f3832297738997eb7986ccf3d1bf01a6cd3b80c8e7a52644312cdaeb6c + +COUNT = 156 +Outputlen = 264 +Msg = 0242d981f25245a3958b75c364d2c993 +Output = 19396a40377259d78d4fb54ff4eda0b8f787194058b06cef56265c12a4b791a7b6 + +COUNT = 157 +Outputlen = 264 +Msg = 5dc1c80a7222096061bd40e9884ad4b7 +Output = a3125bcd727c879195b4c5af18da122bc8c43f472e88da841891493d4a202bdf27 + +COUNT = 158 +Outputlen = 264 +Msg = b2d13f4b112c07a623cbecf198aebd4b +Output = 63232f5d7ba05802ead9871c0e01ab3a51ee236cf48a1f4080ccc1098584a500c8 + +COUNT = 159 +Outputlen = 264 +Msg = 287eb556d3afce478b22e6ec16561354 +Output = 55695ec7eb5390855ce2bdb3d511f6e9142f5d83043ef7d21f4a05aecd5fef5147 + +COUNT = 160 +Outputlen = 264 +Msg = 784ff7a7120d59ed3be228d9aa3a6b65 +Output = b11928c301c805147e9612ada417f1f8b8892084696715c01ed02a7ca3a0fe65ee + +COUNT = 161 +Outputlen = 264 +Msg = 4002a1c254eea1b8d19d5e5a977f5ead +Output = b8e44fd448bbb543f6218bfb4e54566f56375bc34f8909a065a1c6fe66bfdd7235 + +COUNT = 162 +Outputlen = 272 +Msg = 6c05ca3e4adf27a7cd58f3dba5b377d3 +Output = 277ccfd7ee36bb1141eec0a99650498375ad2025cd51ff3b11e57efe3398384c0b61 + +COUNT = 163 +Outputlen = 272 +Msg = be8d6e95afe3352398ab8c46f6837197 +Output = 436068899fc704424cf9320f74ea459520ad2aa71100d63a3ea35d0920b8591640d2 + +COUNT = 164 +Outputlen = 272 +Msg = 7851f0c1af7177b47d571ef45c1bec7e +Output = ef86289f9d2d3a7fa0ac43b04078d3f66b080d186fddff37abf14d75428335d52b14 + +COUNT = 165 +Outputlen = 272 +Msg = ab1f4d58e5e1f6cc779f9c79d9840efd +Output = 7f86c629c003b280a6b846fb80a64a6b934f74ca1d2da58c436221e0c8ad0e5bef91 + +COUNT = 166 +Outputlen = 272 +Msg = e65af6eba1ef23e092f1e292e9db9373 +Output = 1768420cf1715a683b1f4362ed5f1fb526abef00c6da0956f449d6ab6b43549e4418 + +COUNT = 167 +Outputlen = 272 +Msg = 39b8e4d45bb2171a2e8add1f599c31c2 +Output = 441a42b95bea14c4de59c0c84f5c6b342f69a57bcf20d49eaabda3c203fe7469c0de + +COUNT = 168 +Outputlen = 272 +Msg = 817699ddfa19c74ef86a35235dd37142 +Output = e4d8d262fc4d14f06262d7e8680e067f12f7f1c5f16fd716d222785faf317de76073 + +COUNT = 169 +Outputlen = 272 +Msg = 14d7b612c9317f74a3dd0d52b1ff068b +Output = 161133943424b01b527e068e564d41e10c76f11f8c037b54956f59799f7fbf4b86fe + +COUNT = 170 +Outputlen = 272 +Msg = b4198bbe3b74e99cfb67ba6b0fed218e +Output = 120dbe573475318958ed3706b12db19b1aa913c0244596337256c2abfb214f30b818 + +COUNT = 171 +Outputlen = 280 +Msg = 232932787545f1472327c69bf48d4541 +Output = 0a8c2486eca2cf405ecd2c470b053134dd555ef63f1e0a40162ae839c142f6a31b1194 + +COUNT = 172 +Outputlen = 280 +Msg = c8dc8746758e816050c9af7669aacb2c +Output = 6ea118e6e5f94e479ea25f8570e6ffaa970509cc1ecdc49f6b7875608520510f863c2e + +COUNT = 173 +Outputlen = 280 +Msg = 5119fa5a2050a98d065f7d58161bc069 +Output = 82ee650cfd66c0b3ccf2cf2dd38af0d53c35906730929b6e08be092669b04fd3899e68 + +COUNT = 174 +Outputlen = 280 +Msg = 1c85bbb71d5035f88ba97a785b88338e +Output = 14df1e0e753711da0ecf22f9cc680f601c3773d36332fc4a3999a190a39d377d3b7612 + +COUNT = 175 +Outputlen = 280 +Msg = 7263e1e02b649db6ca6349f6811cc3d5 +Output = 29fa11b87603f1716425ccc5fe976a4f297486de523e8fc5395541446bdc4bd712c866 + +COUNT = 176 +Outputlen = 280 +Msg = b64b8a4367fe61337c57d2afe0e24841 +Output = ddd46cc8947eabb2cac38b8efaf723f49cab562b34003b67cacb9b79eef4fbf3f93a22 + +COUNT = 177 +Outputlen = 280 +Msg = 5237dd1755842fb9e6b05395c309b27a +Output = ad6249f9b7c82f3d8629107cd46a6305de395a1c9975b150eddb3b5732fc627b1d2516 + +COUNT = 178 +Outputlen = 280 +Msg = 9c2791a5217557843180c2dc983619ad +Output = 389792af36ec599b3f20c36ae7330ad179c334dd98d8667b936860f93c612cf52f1da0 + +COUNT = 179 +Outputlen = 280 +Msg = 3f493fcdbd50e1ff2469e73ace9a0fd3 +Output = 74c85db2151f1552929594c3df4b0b57fb10945e94727811a5a04b63da7dac94ae556e + +COUNT = 180 +Outputlen = 288 +Msg = 46ebbd7578e17f867b723c41b5bfa16d +Output = 769adde27ba528586b6a2fccc42c7adb40a6aff905cd59f1c51258c72702615cd465ff46 + +COUNT = 181 +Outputlen = 288 +Msg = 0f1124928660658aab0a581fe5aeb181 +Output = 744964f4a20589f18f451823fe2125933e4ab8573c5bf0066bcd1229e05a12e7ce4b43f0 + +COUNT = 182 +Outputlen = 288 +Msg = e9967d7440b6f3d21f700615243671d8 +Output = 7e4efb0f6c8dc4b21d211fece5e9e33a69b8dc963373fd2a35c7e31519c489dcac4d6ec4 + +COUNT = 183 +Outputlen = 288 +Msg = d0cd37c9d1f77bfb8343ac648e8fc46d +Output = d32fffe1ff1f309fadb62d6672594d4b35e3e5ac853820b0b571aea514657079ec2d4fd8 + +COUNT = 184 +Outputlen = 288 +Msg = 139ed70a89b46ff8dca4258568a85b5c +Output = 67b355969d1136efbac4ac6a7c755f67b23d973814f75954649cea82a66227f8b32c8da7 + +COUNT = 185 +Outputlen = 288 +Msg = 03dc52dda67b20b69778f8017eaddd05 +Output = 4d41619f155ad8e836933a53be15541593429c45e56a88d2fb797c10efd0a13e1cbd927b + +COUNT = 186 +Outputlen = 288 +Msg = 49670867f30599b35a332ddf57f1101b +Output = c9d4c164f8198988fe6eac2acca49ee7a5ca238e744aeaf2fd0844c85d05f6f6ca40ee54 + +COUNT = 187 +Outputlen = 288 +Msg = bc0b3c3bbc2fa2d8b416c2398ed0fe87 +Output = 87c1e6ad94bdafd851376d5d9c8e79942141f55314d02fa0aabf308be78b948af428c3ef + +COUNT = 188 +Outputlen = 288 +Msg = 9bd2bd3a384b9ef141ead26304963549 +Output = 3cdecb09f1673d8c823da2e02a2eeb28f32095e7c0ce8ab391811c626c472511a433845b + +COUNT = 189 +Outputlen = 296 +Msg = e776e6749c5b6c7def59cb9834098453 +Output = 15a4dd7c93286572de39b7cd692b57744fb65017a3277724b2de12ded2e1bdf6951884c268 + +COUNT = 190 +Outputlen = 296 +Msg = db3f1aa51e1308e19a52745e1a272fbe +Output = 5c810492e3009f718d4c565712a996d6288f3f6c9ec60f591bc9662ba958cf46bdb4c9e488 + +COUNT = 191 +Outputlen = 296 +Msg = f9f861654ea697456a5d9044ee8e0605 +Output = 6da43906375dc782711e179582cd435cf422601a346369a69776cf4eab0f2acf954aced2e1 + +COUNT = 192 +Outputlen = 296 +Msg = 5b2f2f2af83e86d42c4e98153fce2779 +Output = b6e0361dbce6d4a809a2e982f1dcffa4a49781c989402bf9c603cdacbc15484261a47b050d + +COUNT = 193 +Outputlen = 296 +Msg = 3b2013ffe1813edd6cad8cb6d7c76cce +Output = 97b10c446d9dee64dd29d3f8fc1da19f2418039c36119eacaa72ec11b0d799f2038f7315ce + +COUNT = 194 +Outputlen = 296 +Msg = cd54df0a90999f5d266ca8fd4f1d55f1 +Output = b78e03db2786126861b9f0566485a39acd47a5b18625624be85e10cb64809e4ee37fccfdc6 + +COUNT = 195 +Outputlen = 296 +Msg = c8a0af2b725b947cc1e6c6ad1674bc2d +Output = 57f729bb247168426f2a9bfff1420c2543798b8c55e4fb43a396f81bb28fc4737bb6b1b803 + +COUNT = 196 +Outputlen = 296 +Msg = 094cd1050f2f8706e65b2ae33ade6335 +Output = 944267af083995ba05ec13e798e0de6bc8a127959c6f6744458d242f470d0c0341b74a7499 + +COUNT = 197 +Outputlen = 296 +Msg = 613927ae151bc7377d1f4d3516dbc21b +Output = d68a076754a81b75646f274eab062560c4140fa1e21dec1ee5cae1410a58409df9a8820e46 + +COUNT = 198 +Outputlen = 304 +Msg = dcebfa827fbd92d6744cde446fc86216 +Output = 2be1ffc9f8c66f059c2361b177f80e4a7fe1deae96f563a4c4e8afc8c22d149628a14ac6cb50 + +COUNT = 199 +Outputlen = 304 +Msg = 216649806a6bd9326b64413cc14240b6 +Output = 37599550bfa7748a4fb19188985ddc0fb4258b8a232c00e55824f061771d20c1ae1d635644fa + +COUNT = 200 +Outputlen = 304 +Msg = 9c68494913481ead7f77714e09d0c770 +Output = 0f57cb41dfc6aeb4d2b9ca9ac3cc76e80e46b874fb5e977201ca3bea45ff6248014b3387c92f + +COUNT = 201 +Outputlen = 304 +Msg = b4e9418158bfb48e4308fc8627391098 +Output = e83aa3d9c905a2812d6aa91c56d338c7706897cbb6bd6b7da77b2a0a50cd28d57c07528f8f5f + +COUNT = 202 +Outputlen = 304 +Msg = 98a1b7cfaa254522016fb13ae4808eaf +Output = d95fd1da91b299ca31cd2f1fcedd5f7ba1cf65e1df676c21ba98131048e3c66859dc5a7c1efb + +COUNT = 203 +Outputlen = 304 +Msg = f99bba3e3b14c8de38c8edecd9c983aa +Output = e2aeb7c11beae1ddb8a5b03c23fc32628341477a41532e4ee5f50c3fa69a26d77aa66d272025 + +COUNT = 204 +Outputlen = 304 +Msg = 2273c4b7196f6e1df9dd3bb18e69f899 +Output = d98eb65131498b629d703fcd132598f7027eac343e10420d919fc52b5ad7715eab9268af3790 + +COUNT = 205 +Outputlen = 304 +Msg = 6882e49c0e5652d42032cf7054beee06 +Output = 1be93cf630d9eca59502adc525eb6058b5126daa1451dff68529adcf6216f947eddd93937035 + +COUNT = 206 +Outputlen = 304 +Msg = f649d801b4040b7b5152f58a01e7852f +Output = afbd57eb8c199bfe3a40fefa120110fa72f9ef53b6cef009d158554ede0134d45e0f06c4baf8 + +COUNT = 207 +Outputlen = 312 +Msg = 717c29e8c78626dd6285f646d946807f +Output = d74a204efe7ff68a5c39941f3d5e91ed17a280d62c038fba1bf1bee8d4e0f0e55d5cda129707e6 + +COUNT = 208 +Outputlen = 312 +Msg = f3fdde337d310995e87bcbb59588a55f +Output = 15b3f2125644d415561dabb515ac2b64fcf4becf47bfa1fb9cb9e54b0a5427f1ee73ddfdbb0206 + +COUNT = 209 +Outputlen = 312 +Msg = 0eed9a6580ebe20573d3258b39c2de13 +Output = 7c3dc45a3e2d153ea10bdefd5d89c074497639bb71ff85d45c85bd6b542d6095e155755947e023 + +COUNT = 210 +Outputlen = 312 +Msg = bf96fc79aa0e2e58e8faad4908078be8 +Output = d512a16d076c3b1be7847af6c60f7cf8798b9dede9d1314755344c7c2468b9f0651f663ee534dc + +COUNT = 211 +Outputlen = 312 +Msg = c3cca27f35e166652f300143cb00e6d1 +Output = edfde08d535ec7bb578bccbf44afd4ae47db900e7d7eadea0d5a0516562f9cb3d098b4a2d3c2b2 + +COUNT = 212 +Outputlen = 312 +Msg = 31857bb4e82497b526e426de6920a606 +Output = 5d454be20c59110f6d7a6c9261da3ece5e741201a9e3e2887b5a61b4c20c6c7558ea378156daf8 + +COUNT = 213 +Outputlen = 312 +Msg = 412d0597c0145da8842842d2b9b26c41 +Output = c6ca1dd4d744829d7f585653ac956caf5cfcdb9136319afc58fd6a0ffa3ba85ff120d8601d8b1d + +COUNT = 214 +Outputlen = 312 +Msg = e65bef053f5341a7d366d8ae9bbb148c +Output = 7905121ae03fc855dae4140607e2df82acd266f9bc692570c3a2f78d9286debdce6d979bc380e9 + +COUNT = 215 +Outputlen = 312 +Msg = 7eccf10729c55528193e54303392a979 +Output = 3f05a205da6b470710ca534f62a9288cb1e16925c9abb4b0f5cd600a22b3e31cf65e089e5b9256 + +COUNT = 216 +Outputlen = 320 +Msg = 66490595ceda415859f9e7a30c6743d7 +Output = 482d22f8ca8f7f9236f50c8c4f85027e151beac3a07a5b031bcca545f4ae067179e80d850fa69a90 + +COUNT = 217 +Outputlen = 320 +Msg = 1822b7cc3c4ea4f2440a362b117f808a +Output = 19e740d7d87bc322edeee86a05eb59b64bb86f90dc7b98f781720b7cac37fdaf293ce6bd047a14fe + +COUNT = 218 +Outputlen = 320 +Msg = b0ffda2133fb9a06565a633c3f3e1b24 +Output = a55aa631a9c0e640e571d8dbb9ccd8ca4480590329288e6b2e638a402d49805b3f7fac2ef5d8c38d + +COUNT = 219 +Outputlen = 320 +Msg = b29373fcd231dd3312fd15f1e1b8ac1a +Output = da32fa632f43f88a157d4c01383eb60eb3a13692d94b5faded53e13dd8f0bcb2ee0ece84e792e088 + +COUNT = 220 +Outputlen = 320 +Msg = d0d12417aa22d65247a290b7a23046b7 +Output = c5013d9825fccdca033da4abb77b7dad5c486afaf62ea212746afa4d802bc1df666bc0caa92771bc + +COUNT = 221 +Outputlen = 320 +Msg = 157eb086b34c904b78039eca3f1f367f +Output = 2ea1749b73ac59df0d6ae8e8f9cad9409941a5ef4ca98ad99e607d41c13a722f8492805200d633df + +COUNT = 222 +Outputlen = 320 +Msg = 9b6f29cb273bb692c5c141d780314aec +Output = 458f57726da5222255fc1af5e3887d219f814e095902b6acdaad1c0252bdc653a5ba3b080968486a + +COUNT = 223 +Outputlen = 320 +Msg = 3a1498c158cf689364699d22649e99a2 +Output = 042d0b198d9bdd866bc34d7ada5973914a86187494c82cbf622b33907b66720b24d48a322e9a3b0d + +COUNT = 224 +Outputlen = 320 +Msg = aca8584f89eb40c4e2f32d296a7a84a3 +Output = 4a73ace2f6730c1ca18332c8a101b6e3724c78e571f317e06e1640a75729cce9ee1ea738f68562aa + +COUNT = 225 +Outputlen = 328 +Msg = bef98fe8bb1d17b764233ed58b6b7644 +Output = cbf24dc051befbb824b85e2ecaecf32b68c2fb04f90614af87ff8eb0d278564d9088c2f4c8249f367e + +COUNT = 226 +Outputlen = 328 +Msg = 9f17d7875a2b08f163782baff892919c +Output = da32baec209aa1fcdd2b946faf939fab65e2a6060171797d2709086b20b065d5618fe02603c0756358 + +COUNT = 227 +Outputlen = 328 +Msg = 78a01db6eeacf2909a3dbdf74bbbd33e +Output = 5d9075e85e4cce16ce8a7bbe3e826f6eaf92ca09dbf26de71ab9496370f51551b149183d9db0da6345 + +COUNT = 228 +Outputlen = 328 +Msg = 2df02e92ff1a1300a1b01acbde65fe54 +Output = 74f9dad555d5bba2258ed58d0dcc8482844cc5cf7f3296c319ba9682763f4c62324fa3012863506e2c + +COUNT = 229 +Outputlen = 328 +Msg = f1e9c745351c76a412d2a854749db814 +Output = 011b0582fc26d6cb8eca7d05548a002e0399a5c1554eaec7446dabca2be06d80bf43e26ef483827a0c + +COUNT = 230 +Outputlen = 328 +Msg = b4a883fddefc4d8cb050394e0e82fe36 +Output = def45035e05ccb4950ce92bbce670d5b038c47856c555c13b3159feab491b1150b7ac51cab41d75f79 + +COUNT = 231 +Outputlen = 328 +Msg = 6a9213162b82e8e8fd702d256324a15d +Output = db9965694538842f20ce998757f16788e64e3a3482bea210b60d52b97673a6b63447c2cdd50ef59fb8 + +COUNT = 232 +Outputlen = 328 +Msg = 3831cc17cc1d4b10bfeb2ec4d169d896 +Output = b84c284ec100702ea1729b4a70b3a0c63e58fc7aec9b9676d267b6ab29a80703a4c90c65b5e494b276 + +COUNT = 233 +Outputlen = 328 +Msg = 3b6e4dba09473bca8dde4862bda53614 +Output = 640b9ed4c41e2d5c4767d316f2c12c456363c84b08ea4a0bb814023971774f3a5f777bffce5a1a59ba + +COUNT = 234 +Outputlen = 336 +Msg = 3da43e6d96ebae9017ed58be4a5944af +Output = 9684644a09af32e2c90eb00909c7b9e50fbd75be8bed377911ee37d0b3aa86c169c95a650af20e2e81f5 + +COUNT = 235 +Outputlen = 336 +Msg = f42455b4367f29cf5edbd6bbfd18155f +Output = 98be3eb1e60b3b87b9c2841ba3d7aae48d864ebc1f3453877853179af483d20f5017c1cb406f867d6631 + +COUNT = 236 +Outputlen = 336 +Msg = 86aa46c9e789e193fe2a92016eed4b12 +Output = c8a44db589e08ca0b093e08fd0ec0bad142cc956d6a08fc6cd491d48e0c9a6215cc048ecdfd6444a4473 + +COUNT = 237 +Outputlen = 336 +Msg = 9474a5927c18e783ca148729822acdfe +Output = 272535092b445a993731c5dd14cda9a7d2d05b2a10955d99eef77ad402ae8f322319da973f1d3e691adb + +COUNT = 238 +Outputlen = 336 +Msg = b09c4d92aada52811ff1e77664f89467 +Output = 65cdee0d6ddfc852b2776c3a86819c94ce45260a7dc2cd50720d15d20cba8ce1c58a1deaba608aad181c + +COUNT = 239 +Outputlen = 336 +Msg = 977460c602374ca2ccfae08c5f8d7fea +Output = 84809dbc4975dce69507d8958ee4bd3cce3c2e83708d647c51e583a27040d64937da653d1c1969075afb + +COUNT = 240 +Outputlen = 336 +Msg = a129f45a05dc7d1af8ab58f5689dfdcf +Output = 359d263bb75f61acdb4f266281a865dbf7536f1df266b55ba9533bbe00a8c0dd8c3eb3b3d266d8d8e565 + +COUNT = 241 +Outputlen = 336 +Msg = 0dd1abe1602ddac7903731a49596097c +Output = 5bc09675a4be5e99f3f1a4447095489754fbac28da6105d1356d7e445e442fae2092bf8c0118470e88f4 + +COUNT = 242 +Outputlen = 336 +Msg = b04099a5adbd0108ea12267458f52d86 +Output = 5e6cf1c75152ff20eb716f5530f2e190fb51fa38d27fa98c765db6379ed90c0be7e0fa0e1be6b5ff60d1 + +COUNT = 243 +Outputlen = 344 +Msg = 3d73f4368ee3bae1d95990f809a74f01 +Output = a60dbf22e06b6f040bbefa71965ec8e2e3b18ba6af2c8ae9ba05eada4b7208a4e2ef59d0ecc459b15e15df + +COUNT = 244 +Outputlen = 344 +Msg = 430fd1472674ba8aa372a74ef3e94895 +Output = cbead645891ecf19f34bd3bb24d5f325e7073ac74e83f3f900c001b8c5c64e89fc49133e8d8118cb46021d + +COUNT = 245 +Outputlen = 344 +Msg = 64e6bcd89948d5139a740699fabf2777 +Output = d7904473f81f73c5cd967ccc72e3d9a9f490a03c51e1a07d8dcdd4ec393258ecdbab3ddd22c8b971d26afd + +COUNT = 246 +Outputlen = 344 +Msg = e7e401e145fa6cd8fd4673437ad10a19 +Output = de854e5e66616210dfbce4c3077c7970ff52a97b40cf477b2ddf5a1773d6d8fcec54db3f9d10fa8337d37f + +COUNT = 247 +Outputlen = 344 +Msg = 403e73fdd032eec21bc1335f4297090d +Output = 8c07273cefb1ec0bffc770c3a33c25ec281c6f8fe2d2a13451cf767f99282106ab0c7db5ea29ebb455289b + +COUNT = 248 +Outputlen = 344 +Msg = 003e31056eb6c68c4a112e2d18d0b0a5 +Output = 50ddc0b63baaf024cf2530e986af2ef642126744ffc08c08af2b4f12d3cdb089b0ed7c3164e5c080d20301 + +COUNT = 249 +Outputlen = 344 +Msg = 54596e319842d5d6563d842d65172018 +Output = 35db42ca0b75af854df5d29f6abfc955f724cfd996722d79e8b08b0dd5006c26e001199e113211ec842db0 + +COUNT = 250 +Outputlen = 344 +Msg = 3198dd540db7a6beb932f9c1fbc8614d +Output = e3c3a12377dca6411d0b79c3a60c4a355add1001999c909bd72696dbed31621ae455bead6faa4066cc321f + +COUNT = 251 +Outputlen = 344 +Msg = 3bcb00a12cb64ae349f3144622a582ac +Output = c674911cf1af9224af93461ccdd753bb843e575a2cab785e461edf02c1a7bc10eb6936ae9b4e815467878b + +COUNT = 252 +Outputlen = 352 +Msg = 0b5173a10bdd6644ed165db4dec31784 +Output = f96f5e18c12945f7d1bd8b38b4465e694ba06a36ca4d9e6c271863e95534867dbfa07517c095324b9cf3dc95 + +COUNT = 253 +Outputlen = 352 +Msg = df17198597547287aff226ffc85c064d +Output = a586333edddc548529020f766878e7e57fec0441cb84e48e41ee97614c40820c417ffd3d0e836e21b96d27df + +COUNT = 254 +Outputlen = 352 +Msg = 81f51cd02be7b7ea572fba9584633136 +Output = ea6f52132ff37a80413c5fc7aee1677f1b4d137b8335e095024477dfcb6850466b88261b65870472d5b371b0 + +COUNT = 255 +Outputlen = 352 +Msg = 363d99e2df8dfeed4fc9ec81b66ac214 +Output = 9c2b212a986a45fa40f7394ad6be4b31a6376769ca2a6f096f5884024f408322b6a3a5389067ad18c088896b + +COUNT = 256 +Outputlen = 352 +Msg = d7788f0c3ddecf2f610ac8109ef65a9c +Output = 8c7056e3093467561244b8cae00d756d8dbec6fde01d48a0d3a4f47bc46cbff16a862e4f1f81429f1ffccdb2 + +COUNT = 257 +Outputlen = 352 +Msg = 9e274cd3cce57b44b99b2620d097af50 +Output = 2a8bb273d2ae5617703619782f6ab576c2ec6d386da3c4a720c9908b0f78650238d62436c13bb38d1e6249b8 + +COUNT = 258 +Outputlen = 352 +Msg = 516b1a83995360f8a62f0891687ca85a +Output = 27898fe63c5008bf9d57dba9737770e3e4181eda3af8e694c55df93d32067fb3338a561258ac9eea961ec9a5 + +COUNT = 259 +Outputlen = 352 +Msg = fd71bf0416f214bc0bf4a871d61dd91f +Output = c369130d3676643bd56dc244fc6994b0ed0b37bd81c0fc0badd60095d1f1955afc0e248a09a5eb933a4de44b + +COUNT = 260 +Outputlen = 352 +Msg = 898a19658a32610d55c9f6819d46c296 +Output = 9b7acc5242b166615034fa41141f4fa71f16cf2dd5ecf248bfca14d92d7011d8ebad408368814893ccfaaa8d + +COUNT = 261 +Outputlen = 360 +Msg = ad56324588fae881fd638d2b70fb3813 +Output = 911d952480977b6b8416a8f8763f85dcfde929d189cf5c5531f5d5dbd18fd0cc9543393e9ffdbe6a56606fa026 + +COUNT = 262 +Outputlen = 360 +Msg = 2b7a8435a6f597b14fde67de391527ad +Output = 5ae20e968816cdb678177f8901e6e8eb8db211584f738f3c9ebde4e27132e7d662557daa5d2ccfc0aab749781c + +COUNT = 263 +Outputlen = 360 +Msg = eb3f7002c8352270340b8da8643622e5 +Output = 816212c9e6fa0febca5942fdf653235153d0838344fc17888cd23acf26ac1bbd31dd238328c65ebf20c80676dc + +COUNT = 264 +Outputlen = 360 +Msg = 57060361f61c2411ed5d33b0effea0bc +Output = baea6ce2510624c1dba0722cd75e13766c39361b38e038790e896cd18c65f9a6ff1389a4e7692f3e2b2595a1f3 + +COUNT = 265 +Outputlen = 360 +Msg = 0969c08355404ee5502d29aa38081d84 +Output = 2bf4b5d1027f64b9715d563ad08bb325c135192e4702189b3a42683bead14e69121038852796fba5eae3426d33 + +COUNT = 266 +Outputlen = 360 +Msg = 410936918c62bd845a427e629e24132d +Output = f1db1ef26179c77fd8ef5e0430a0f99e7a08f1fea74d6dc0aa8368d14bd447c59b8c230a53593e990c0ae13419 + +COUNT = 267 +Outputlen = 360 +Msg = 6f1200a3a454e053e3ec5194a93bc559 +Output = 1566e0235dfc5957a97534f291b2a915cf7031f83e6bb02c3a65c938cd977885e52f90944ea23636f05362e78b + +COUNT = 268 +Outputlen = 360 +Msg = e606d6c7029aadd46bec4c783e7cc6cb +Output = b954406ab367e03cb0994344976ea51afebddfe524c002333794d4f00f6bd51813fd6b6a0ec699f54f40193dce + +COUNT = 269 +Outputlen = 360 +Msg = bc17bd58cdcf19fc011ac593a9163551 +Output = 4f5998d9efedf5462f3797230e3d46f151967c939957fb67d3a951e97df09a4da39084877f91a39cff8aa57736 + +COUNT = 270 +Outputlen = 368 +Msg = 3e2b5630ff2ebbf90058fc38788eb923 +Output = 217f5deb97257e75f1e354e3846fff6ab6f5258c37bb0bd57bb42c95d60c8917f04bec5c176236a0b7519ef9e956 + +COUNT = 271 +Outputlen = 368 +Msg = 15b2edf8d2c902e9b24d48e68a9448a7 +Output = 6677e86c31a50896097c10c0c0ce9c4e15a540355ced98852b444cb89782ea011dec3fce9e5e5352eb86cbfca408 + +COUNT = 272 +Outputlen = 368 +Msg = ab3e2f1040673b99dd267d96e071e5c6 +Output = 8fd111692efbf272cdbccd6b5f514364b3687ac2146789da75790b95727bb99473a88c2401a8ec0bd2305d70283f + +COUNT = 273 +Outputlen = 368 +Msg = 59ab0a9bcbc3b6fac5cee1d2745ab436 +Output = 30273a2659b05839ab05edfafb8863f4436b15e4c89bea682c6503444568ed28a24f6192904f6637c2a72a9e90c1 + +COUNT = 274 +Outputlen = 368 +Msg = c6cc5dade0528b25b74b658602617c74 +Output = a9f2b0164956d26d53e90bbaa282be462b6650455f9787fa76387d13156ebd37b4dc20f58f374bfebcf737c2fcdc + +COUNT = 275 +Outputlen = 368 +Msg = 44a8566ac42717aea8a9473503023f8d +Output = 72f1a1099984b079ba18fa98d7f4a593c26099b0e54793b2ddfe4b954826ebf491afab27223137cc6537c7a5973d + +COUNT = 276 +Outputlen = 368 +Msg = c8cc12fa04d40e0dfaa6b50591a5ae78 +Output = 8478875d6de5f4ddcbcf3df58dd983f2da8b23ed2607f5373ca52caf14a3143d7619262c036ecb4465cc59cb5089 + +COUNT = 277 +Outputlen = 368 +Msg = 44877a98cb3eb31a01ae70fd4b35e8ab +Output = 1351c34616778ffdcc6a0af255cf2b7db0c3b410a3a6bce7b3d2bb331db3dd2fa969af132fc85472bcf8e25cf786 + +COUNT = 278 +Outputlen = 368 +Msg = e37d0ac32a309f4333bc42becd0756e3 +Output = b507b668dff1f8ea666a5887085288bad9a2909386fde7c65c687b267ae6f126fa0ba8a4c85036a51fc316966657 + +COUNT = 279 +Outputlen = 376 +Msg = 70ddc91ec221914de2f9a57c53e74e61 +Output = 78ff3e93e8b6042bb1a8a3c505ac5f36ef63732d980771f7b43d2125791737663e46b21301a4cfb4824593694d8724 + +COUNT = 280 +Outputlen = 376 +Msg = e3ddb1de8866ebeb71bbfad996c8a3ad +Output = 6ba888afc17e2905a49c4a8c5df4a170b94b29b9db2bfe2f6fe1281bf0bffcbcdd2ec28f4737044c077c798b636edc + +COUNT = 281 +Outputlen = 376 +Msg = 4f875b9a1e7e85288b30c1bf2582af8b +Output = 69cab95d98edb49dca939314134c6b132609a8507e72a23ca8c5a2bf83a0b2a8f9935bd01a3b7f6a6dbe68eb64ce8e + +COUNT = 282 +Outputlen = 376 +Msg = a2270126ca15408b76c16bbe05ddfc9d +Output = 54acabd72a855d8612558c6eac1f0ec6af4b75197ff87705352f9776ebd3c7ababf7a4c1a0609b042eb3b80fe20962 + +COUNT = 283 +Outputlen = 376 +Msg = 5da0f218012746a5ff817d75789be175 +Output = c76c49ff59ea9b7e14e3dc7d509b920abde59256af8c3321a4412df68a0db9a87ff0a85a2e77849dc886e256cafd1d + +COUNT = 284 +Outputlen = 376 +Msg = 80fdf66cdd3e6e97dfee803aada535ca +Output = f1c58f217802b9774c9a5ff5f8ecc240c964cf31b76548e632531a011939143c763e189eda0b419473c99053608099 + +COUNT = 285 +Outputlen = 376 +Msg = 2a8164b8bae82f9795283767b077aa29 +Output = 0a9b08ae0f53764516021686eb7b0cd64a2e46594ad6ec79b94e406e7eaf2e9b58b4a28632a8fe2c9467c34276a08b + +COUNT = 286 +Outputlen = 376 +Msg = 3e9f5225986d9499cd596a8bdcbaddad +Output = ce0abfc4f00a1635f12154a8fe81e29a778d30a8036c18286c2d03cfc45ad60da52d393e10ab6a2a16bcc2733f2a4f + +COUNT = 287 +Outputlen = 376 +Msg = b0617576a6a7659d910dfead11c28568 +Output = d7f3d990423b369bf564666b2aa75559aa477028fec451f490ae1b60ce53a16d1bf6c6c4226d08ef865d1f48162641 + +COUNT = 288 +Outputlen = 384 +Msg = 1edd7c7b9301cba03334388251cecfce +Output = 10cada8a13a5816c6def15a346038e2c2adefef81756d8762b7d528264aa5e23eecaf9d1bf68fdfdba45ef5382c425f7 + +COUNT = 289 +Outputlen = 384 +Msg = 532a1d0d52f1be8fe052bd632f43903a +Output = 2ed907318d0ce95cc8b4030a32d2249413ed44776092f9067d20395886d5dbb5f696bd16ffa061a1cf8be4e5d8cae462 + +COUNT = 290 +Outputlen = 384 +Msg = 95130b3d096c1cec8f60edb9b0a664ba +Output = 947a308351dcae4aa058a87ef1680ff691490fbe2d60c269fed3625b19aa30d183a0aaa1423427eba58e30806b21ea6e + +COUNT = 291 +Outputlen = 384 +Msg = a31e2e6aa0ad2ab734c2b8de85b85ca7 +Output = d4ea521b6a4092b9adbcaf1153eae6bdd2f8c2934c199a15cfd9a1df46df34dd30bfa1171384ef0d6c2f42d5aa454751 + +COUNT = 292 +Outputlen = 384 +Msg = 4cb9e99ea06814b7c7df302289d1f34e +Output = 74bb23d894c88d233f92becdc424e96561546563fb965d49df15ccfeb116f8a903eb21cc467a35e7465a514e1952eec3 + +COUNT = 293 +Outputlen = 384 +Msg = 61ad23a3ad5aa1d64a20bb887a07e6a5 +Output = 1bc79047bf4a5b9a7a2070e7a48189efc81f90423a0d0e72854c7905a3fd5a7223e6620b5ea41edb95a929df86b1b71f + +COUNT = 294 +Outputlen = 384 +Msg = 739eba010944ccfad31128df7b54ee1c +Output = 20c018a05016143f11cc79d0f999ea904b07d643e896a52db6b7914ac08df0d9e8b75604449cfe32776e467e19d24ee4 + +COUNT = 295 +Outputlen = 384 +Msg = 2aa24089b3d1922b3d240ea06944020a +Output = f0bf914a56e504d15f148f759a54c8d6354cb5ca9f635138613ca1335bba645bc0bd4c305e97e4934fb6dfb0dd3a3745 + +COUNT = 296 +Outputlen = 384 +Msg = 52d44f88cc63e734af47d6cee8c32bbd +Output = 518ff0a89282299de7a5118fe154b80952e2656f975b867de884188169ac9fe4ad4a979e70b9bc4bd725fc27bbc95558 + +COUNT = 297 +Outputlen = 392 +Msg = 9e5c8259ad19cb4aba8fd23826ea2649 +Output = 9224fc7a90f06341f72edb905ed316c15baebae8d5f60e68aef9248cb6cb0d1bd7c9f80fb846d27c70ca8c00dde7708774 + +COUNT = 298 +Outputlen = 392 +Msg = f3cd8d15128d33adec5bf90b05b730c9 +Output = 912e8ec4da3dbd1423196ca36dd4b499cc3cfcda0e96978f2bae6eb19ae35cd6766d7e5657533749ba6224decc7cdfdbdf + +COUNT = 299 +Outputlen = 392 +Msg = a0f01553c5606d9e31727027204653a0 +Output = e946c176e5a9591425644f7e34975816f565500513a071084056909bdc5ae2d2f1b3c79f23c5927ab6cccf79537d04aeab + +COUNT = 300 +Outputlen = 392 +Msg = 2ab1b4d5258c057f9247091140491fbe +Output = 3e41cefc13ad082d038f9a91e8ee24398bc430aba20172d68728b5d3ef81604c98d06b4175329c5f08df097a0a709e02b6 + +COUNT = 301 +Outputlen = 392 +Msg = 2b9f4c55780a569cba3a2169068300d9 +Output = f8c350220cc4bc20d9a4ddcc31f4aad8951c678c3d6c670cdca7c80a26e54f3f828ff3c4878f99044315e1fbedbf8f21bd + +COUNT = 302 +Outputlen = 392 +Msg = a39fa497e7f099428f3d1fa7b50b3915 +Output = b21b4a503e4b240f108440009f11a3791e2124108d63c50e87b2d94a4c02a4b8fab32b3d83322013a73cbd621ddfa8ec4a + +COUNT = 303 +Outputlen = 392 +Msg = f5deb6a8cd1ce8880a0f4edbc6fd6439 +Output = 4afa0b109bba6176ce23706ba242764834c632feece6cca0f41cc2f4e688e8f4f72ec3cda602e7d92f7be26c111ea940f4 + +COUNT = 304 +Outputlen = 392 +Msg = cff7ed31a18954dd38325523c99b049b +Output = 43cf90b24bd1b6452589831b0492638b31687ad169fe92100a378978fb5b1e9cd8b9dc8521718722cc66be5a1210a18746 + +COUNT = 305 +Outputlen = 392 +Msg = 0cc623deedf0826b84a825662b3052ca +Output = 00b1e69d231ca81fba94e3b80d584218f9d370b89d5e4025e4765dd5a8d95bcc252535519940f307cce68e64b17a8bc020 + +COUNT = 306 +Outputlen = 400 +Msg = cc1bfa23c82eee081a72ac6a5ea84724 +Output = a423ee77d0f54528d1d35a5e4a2a07f1de9ee4e115f4a1a8b60e121be49e56072e37404074695ba93cd6fb869b948fcde192 + +COUNT = 307 +Outputlen = 400 +Msg = 3205f9c79104e87841e9978be892025b +Output = 20b3018fde04e690f88736946754e3b811b151520cec5366a0069e81cb42fccddea3da80f993e544fddf75e5155549363d0a + +COUNT = 308 +Outputlen = 400 +Msg = 4d5269e0b62dd0028856bc44f1cc87a7 +Output = d9de0dda5670d868f43d21a1fec33aa18ebbb4be92339a9a717b175809d62998d6ca37894819920bdb80031e8f346c4ab6a6 + +COUNT = 309 +Outputlen = 400 +Msg = e236b76a9e4bdb149d956a6007a972b9 +Output = a42abd5cdaa71e1d96c2a2ea5b5f7a7927c649d152a29ee1f30e39fbbc4b2b2fa24290440c8a2edac40a2c5711a4d50a7b2c + +COUNT = 310 +Outputlen = 400 +Msg = 306e72983ef50995481c0c658b76d3d2 +Output = 98a670b3c7bb04307f7be0ef3f77d0e1e24ae1cc306944f161e36fe4828aa73c376d63658a3ef5daaa1a895819f064db7b23 + +COUNT = 311 +Outputlen = 400 +Msg = 6158096670a10c04e3a52e521dc798e4 +Output = eb72a101a5c7fdceff3652890e0ccb87381b18fbb61505c17dc3afe74716f52aa153efa19cc2ec018ffd41a491c33dc61548 + +COUNT = 312 +Outputlen = 400 +Msg = ac08f88a5f33eb93dc32d17e8a1e6dcd +Output = 90b7b325a87f4caea7c1c7a5660473863f375263f5c0faab3100249bafd3dba1d35a7f38c5033174ffd272af45fcd9ecd7d8 + +COUNT = 313 +Outputlen = 400 +Msg = b64997095289e34480a2f059d71f2cc7 +Output = cc301cb02e9c64a79868ca6e904e7ae67f27c2d49e8ef7d2271b222d37ad3d92c2b56a32d5fa9bbc18d6e9bf91215d42bd25 + +COUNT = 314 +Outputlen = 400 +Msg = f37d5a404c6318f889b546436ef9e56b +Output = c471a099c7cb35f49c76f0897037ab33eac234e6ebf775de3f623374d850170c7ae150cdc047a55e1fd69f62045e7a415f46 + +COUNT = 315 +Outputlen = 408 +Msg = eb8caabdf1fb1e5d563c49554914ed2a +Output = 98c52854eed26cf2a5e926a6a88ac359a11aabde98a84e4684829e414dc130e09c1add7a89e714c576be2024dc9a355a329f1d + +COUNT = 316 +Outputlen = 408 +Msg = cd36f08d4a88d87ebd9aaa3551f49ba2 +Output = 84362fccb82fac4055af8a66ea6834c99e4007d11f5331db86c5c503220ba9eb12ae07da0356978589c40dec177ecd683d0695 + +COUNT = 317 +Outputlen = 408 +Msg = b4091d5252a81722ea04d4bee0056879 +Output = 3832eca50ba51812e0a0e1948b0b1cc34554e80b839df0b385989f43c825afaa08be103768389da5665da90d585010081318df + +COUNT = 318 +Outputlen = 408 +Msg = acd6b532de1a98bee35e1d7ef189dcbe +Output = 99328104fd7c4d7d7aedcd906d2a48329f370153f100b6404d8a276e46a4f70bfc00b17a8b94f0bd66c4367cf55832aa0a20e0 + +COUNT = 319 +Outputlen = 408 +Msg = eb8e9df706709c4c52f12bab53d709a4 +Output = 779f08913c6528884b58bd8051659d3196cbc0c400190db6ed4eab7398c277a12ba0d3ebe51db30791048a0c44ab60e881b6fb + +COUNT = 320 +Outputlen = 408 +Msg = 88c14fe591b86fb3dcf2ad7a4c971e46 +Output = 76a74cc2a3abfcfbf0630884a3784e31195733bfe0732b81714268168bd6991d8e0501a8103b92dfb522a4bdd5e56b8a116652 + +COUNT = 321 +Outputlen = 408 +Msg = 7449a0c4cc8b37276b979ba91e15a15b +Output = ceb4b3d9af9549b8f6072348a3e861d044310d18435d90a975e2fdefdcda739ac6e4d0d4e2397bfbc6d89e8efcbad87b4e8592 + +COUNT = 322 +Outputlen = 408 +Msg = 69ed0cdb57db56ff25ff7f03dec78ee3 +Output = 383c1dd1f0099f6272f7463435ba3bca811daed49251849608b8b4b2e38c59b5f346098e5e0f14526889f75f3130a4ee0eafcc + +COUNT = 323 +Outputlen = 408 +Msg = 2ab5a123feb760d556a7ec6455eaa108 +Output = 7ab70e196453188c752c34b51e7fc8a2058d621f0ab1770d64b24f77ae44675f80f8bcd9417dbd8e7fe8b8a05fcc874f8c2002 + +COUNT = 324 +Outputlen = 416 +Msg = 9ee981838deb51d1a8cd502019a19d20 +Output = 3d2fcf1a09880d8a41e58fdf57c0b66e85fe3e342e809441dab77bf7ce3a86f0ae35736f6c9b29b09203daef2f1756135b64aff0 + +COUNT = 325 +Outputlen = 416 +Msg = 586e3866292caa4ef67601ed6f44231f +Output = e6b4e65db5d0ba40fb846e2fcdc0255417fe7a01586edc9634a717325bb8505917ea88597c757cae694af1c222c9563752561893 + +COUNT = 326 +Outputlen = 416 +Msg = e118cecce029b40f7883805eb19d1c09 +Output = 6e8f5de5c92a474a1f96bf89798a11c96637c05e6f1d21940c07783b2d5da11c8f592446c12189eabfc9be2561855fa7c7c1b7fe + +COUNT = 327 +Outputlen = 416 +Msg = 8330ee1181d946541b1d84b8d57df8de +Output = bb2ec198e2a8c44447e260cd5528cbae06b0bf0962deb2fa02a4639706ef5ff53cc9d0fa215b2c194d7b642f6c72782c08c0fba6 + +COUNT = 328 +Outputlen = 416 +Msg = 771612c5244feaf7a9b3216560c878e1 +Output = 284e0db05d4f243630a69b4f29b7da6c89eaf896cdf5b49698cbf54c09adc05bad10d9df05201f3e4da6565ff1e686346f35da77 + +COUNT = 329 +Outputlen = 416 +Msg = 33bc61a765ebcac926730dafa699eb65 +Output = eb298d3d942fefb63acd8a8da14b42a006c03ff12e416dfdac085fe0b1c6489b5a965d7cf0a3452b5e20fc839c17a366187a01c0 + +COUNT = 330 +Outputlen = 416 +Msg = aef74c3283751f13127558fae1b7c943 +Output = 6a0d2c2ef7e4b1c88ab1e9958e33532c7adee50c5a16cbd7fcacfe3b6e28a788e4115ba3bddc8e0d8fb86fd53dbfca9cc61413fb + +COUNT = 331 +Outputlen = 416 +Msg = 11e6751017696ee0b5a5b945f9c1f13a +Output = b5e5da039d6d942efe9409a5ad20f959c9def70d35f8c2f20922ff3dc57d38a868ac956e8f77b4feba27a9896f73d96f238bf687 + +COUNT = 332 +Outputlen = 416 +Msg = fe587802557dccf5ee9df14024f537be +Output = 90fcb9f3f13ac6f4d6c6d95da42c849a2130cf6fc3acb227bf322a1b651aa70aff91610a9d5125608d6b2354e9f52b5d6e9a8ad5 + +COUNT = 333 +Outputlen = 424 +Msg = d92b04beb0abb6503e74471c9f3e5dbc +Output = fe025ed8f040f9bcb8a45d60c7ddc004b018b003682cec0b999a17f2c49e3a4b889cdc72f6e61f4496951bb3987f4a2f1bbf00b0ee + +COUNT = 334 +Outputlen = 424 +Msg = c9591125e3a69494e8e533ec855b264f +Output = f492f218e0a4bb4ec8b37e6421e27b72ad6bd5b999c0b4a07ac5573825934b0f37885e15b94d17535eb286ce6d196fbaf2b7ce039d + +COUNT = 335 +Outputlen = 424 +Msg = 2928a9df8181bc8727f37761b053a818 +Output = b590f3ff4792cd42d8d4e50ddeba7d8cce7040f0f3ddfcd00a2c3f52e1995ac46e34e81402c2cd3829c7af68985c64381815a30b7d + +COUNT = 336 +Outputlen = 424 +Msg = 58e04121acf60600c7c28ceacaad2b2f +Output = d257ba8a8170fadda06c716034813b613b13030e020d9a2ced096526089e4e47ef36b45fc3e7ec5bb07468743bc566495448a74adb + +COUNT = 337 +Outputlen = 424 +Msg = 37631649fa77ff6083b4016b6c19b2fc +Output = 898c7afaddb0bd45cca424ce0571f12a12bfa23e4976ce92be4ce3618b476a734bcc5f446c6c00e57797e7474c98dea07d19e3b0c1 + +COUNT = 338 +Outputlen = 424 +Msg = 603192dedda6ac6af37a2d2d0f360c9a +Output = e97ae19eaba3101ba4c23c1b7086be23dbfec661d3234af1abeed7d4958b21f97b343406509d62a569c64c0a4a5e6c998b1b6369e6 + +COUNT = 339 +Outputlen = 424 +Msg = 88acf531a86f834282fad89aaf11fe2f +Output = 661ef3fc2658ce7c1f9467bb65140dbc045d6dc3f56c592911601eee58a2f0f5ab255a059547be20b6f6d820380050776ed792a5cf + +COUNT = 340 +Outputlen = 424 +Msg = 6619b57763366b715cd915f87c95cf42 +Output = ba2ccf45fcbff5c6715c064f7eea2822ee047b6e16b7e17d428fac09aa9bfbf2913e6ece04e011f92e6f9785b19712783c32e45964 + +COUNT = 341 +Outputlen = 424 +Msg = 04f55513ed0ecc9db7b508950e383052 +Output = 0278ca61b9725fe83f76383a566f3464686568889445170c7e5ac706cadb28f9cab07faa94e1ce19afca0565cc74ba0ad43406b43d + +COUNT = 342 +Outputlen = 432 +Msg = 4820af2edf3234ab7e4b41bce975c952 +Output = 04f6151477dd2b26d4a03b22a91cbf0d73d44e84110b06419b1887ff6985a0f12b1d16c4ec6b98ed58218d644c20c612ee3efc90c02a + +COUNT = 343 +Outputlen = 432 +Msg = 6e3abcf7b130dccdd032f856d969a0b7 +Output = b8c3705cea0b4991e766c411e7efaba3e5235b557b608e16e40db3f7784bc6d4aeff9fadd8657735fc055ab0073ac96d4dd0faf11667 + +COUNT = 344 +Outputlen = 432 +Msg = 4e9cb54e06c87299e528959ec308cfa2 +Output = e4168a0382fbf9b6f2ffbfae8c22e09d0e5f519777d66e1a1b5ec1bc0ef060f5544610a4cfe575f22c9cfa588c78b7538a486de53336 + +COUNT = 345 +Outputlen = 432 +Msg = 5d3d5ea9f0175e478358ece9f536f618 +Output = 3cf3436a03e559a6c24fc82532842c54c3a237ceaed91e9a31d0ccb4be98d3aaa52622ebadfbb80bb38f3306c2a37ed691aa95fb69e5 + +COUNT = 346 +Outputlen = 432 +Msg = 20d0b691087fb99de8168e8c13ea4aef +Output = 87b2b3ca23cfc3be97ff63bf061fc0bc8c1806db589893a2c0b4931f534bb124f63c200c329b3a21c3aaa5f1f863e9235c0a3daa1968 + +COUNT = 347 +Outputlen = 432 +Msg = 6c98a8eb3ea4451401e0424c10cb7226 +Output = fb79a441b789aef108281333f3a1c042fd76c331242ecd21ab5c1411b653c806407e9337b64fdb71eb08fa3ab532464da1fbf95a35f4 + +COUNT = 348 +Outputlen = 432 +Msg = 97c686cf0428a4e6b18b808b590ccb79 +Output = 75cad1bd60e847d97ebd289ead3a86e8f83bfcc0127935b0ea4937191dff0a1ae33bc5a2f1c47ff605279a047a2dbe57818058aa1807 + +COUNT = 349 +Outputlen = 432 +Msg = 34a8000d1a05fc1f0df02fecbaf34c66 +Output = 7ea02bdddbc76f12fe9e391b1dbaacf0b31895e5a387ad80f1f0805deba21092a42f305829ae8496f06071d35dc00a6cd85d889a7607 + +COUNT = 350 +Outputlen = 432 +Msg = 63de280e3c80faa58a9bdcb0991c8d3f +Output = c60fe8362c78798d2bd2236395eb2b1c8f74536d43e39cb01bf3af55dfc9a72ee990e5181bdb64eb896e38544ec30fb1707c6853c372 + +COUNT = 351 +Outputlen = 440 +Msg = 6179e5376a8b70988aa1058bd594f0c5 +Output = b0a9ebeb21e4fa02261a53ee5cb5da652f8dc0b65483242d411bbd1eb8353ee3e95f923b41e0ebbc7331af039e55ce489c11f0a393095c + +COUNT = 352 +Outputlen = 440 +Msg = 403e72f7f584ad63a1f63e3f9c95eec5 +Output = 00da8f7e131e840230c20d1b34e97222558865871cb6c2a9b88a771c004f8376139b4bab6286b59ae4f596996f1a9ac117dea7aee7be20 + +COUNT = 353 +Outputlen = 440 +Msg = f3ed6fc79366371bd817e50966a1eb4a +Output = d8670e7ebc750f08caf9a3638e6ebbba8033f54491c5b9200853e92a24859cb62c0f2587243dfe9d464dc474e81af75903dcdbea086467 + +COUNT = 354 +Outputlen = 440 +Msg = 12a4c353873289f0263814b8d747c25e +Output = da55682d3d15dc1f0f7b59d0db17137f9fe12ec8c1c028c36fedbee65209d09eb917367014c2c12e2c38c5e5e02909efd1222754cab11f + +COUNT = 355 +Outputlen = 440 +Msg = 19ba3defda0101174a42d61222987882 +Output = c7e729c35b89e8a5579b4d4d5975f3d788312408c3aba302aa465720561fdc474bfc52de195ef634fadcebe86e1c3431998a48e3c53d51 + +COUNT = 356 +Outputlen = 440 +Msg = 18e2f943e8defc9137877ed452c652e0 +Output = d30799769687b7a66f366d94bb8bae313cb1d085de5a5d18af08b924335ebd77801c77cc23409a82296285a583dbfcbaebec967bf70771 + +COUNT = 357 +Outputlen = 440 +Msg = fe7854d34e6730899599c879dcc28ea0 +Output = ea9215b6feda2c2512acec2ab1071eb0966b6f5c4743f0092f9eca3eace984f07aa0703426657f6ff2967eb3c319585a5d42c602d61e56 + +COUNT = 358 +Outputlen = 440 +Msg = 6d617e2b46fc78200337b4deb1b5deb3 +Output = 25dc42f28c006785960cdc8522bb53b1dae2cd82b6f188fce381d2c9b097ce3e6b49754eda3c6d509064fa2ca5d8d41532f5b1b10653ba + +COUNT = 359 +Outputlen = 440 +Msg = 67c59b3a267cd79ef45f88c31f558181 +Output = af0e7c88212f18f3c2ca258c5e3e96d63e6b092c1f7c9df2039379a6dd70a3f44ef15392d62b3db4840d0ba5a17a441749893bc41a4fe2 + +COUNT = 360 +Outputlen = 448 +Msg = c2419e6ff373ffa583667a77882aef12 +Output = e3697583c3390fb28e725071940e7f0f932aff7b1fa8956ca1899a020d68b5147750ef96fe91fd9d8d31bf7ab360ff54677391f3ba7f9113 + +COUNT = 361 +Outputlen = 448 +Msg = bde286cd11ee8897855b245cadc1a310 +Output = e69d0b9bf96d8044fe7e785dc66417d670e917733eaa30ed1a7480462214d525dd09ec176f4648b6b60b090c9105c02bee348638487ad89f + +COUNT = 362 +Outputlen = 448 +Msg = 433e284bf3b472aa5e1c83ddd1db3c11 +Output = a4841fac811daf72bc0bb9f70423de88bfb9e960734605c67aa900caec63380da1f3f180b8ae3667e6e58e051b11ce042e7c2d8e610d225c + +COUNT = 363 +Outputlen = 448 +Msg = 001d553375cc63f8a21557f45f0359c4 +Output = 0cb2bc8eec97a408b76455ab66d14ca9bdc449fdad43b7637d3dbbad6a7ab46ed6b03c21bf944dab3132ea42db1341f1c43d08189cbfc1a9 + +COUNT = 364 +Outputlen = 448 +Msg = be28e6ec885eced720ce1a64695c69c1 +Output = e26a6ce6bd2268c1baedf74980a3621b970ba2631d2b2e059470c78fbb1a3faf744b60e1dfb0e471b6943b12bfa6c7362accbfa6427c9b7a + +COUNT = 365 +Outputlen = 448 +Msg = ed30b1037afd33042243e1b51b743736 +Output = 066e64a28b952e883881ad789e99c55f25289e42bd7b7be78ddca92fcf7b5a07bd299ac18fff677f5e6187a192bd4ebe1c358a88f67e2a9e + +COUNT = 366 +Outputlen = 448 +Msg = ad001feeaddd35e654740ad961db6939 +Output = 91b7e9114efae35d5e2f6cb3d15de05b177984ead307d3aa4f9b2352c15b16c5e5ab174206e30a6888de4f4e8cc9fcb9340ba025a59012c3 + +COUNT = 367 +Outputlen = 448 +Msg = c205cc33772eb29a3943a572dd1243b2 +Output = af148884c6004ba63ab6aff42ac9fd0de552a1620bd9279aed5f03d02054837954b1262744d3f8cab0b23fdc3a478cdffa72b6e8c774f2e8 + +COUNT = 368 +Outputlen = 448 +Msg = 25ad5706a2c0c12189a77ddebf01b984 +Output = 70133db4c8ff3655393b0537cb8d414ce9c59f114e338cdeb708d264b2572f900492f5e96e3ee79a0b2bea422ef47e2e6afa7ca093e2754a + +COUNT = 369 +Outputlen = 456 +Msg = e919edba255c8124bc5f63f90569ce5e +Output = 37e03ff6bfab04ef64ba89a84d286de96d100a1820068f0ed7d7347513387370f5ac53afe559fac72d619965d6c8300d718c5d648c1c2d8237 + +COUNT = 370 +Outputlen = 456 +Msg = 1fb5c1278524d02645ef90c0219ff571 +Output = febca33e3157ec869e0f138a2e4baa78f122ecb2e1a929145c9ac9a35e5b8378cc877f87ea05426efebad962313bdc6018b5f6a9ccfa1d4960 + +COUNT = 371 +Outputlen = 456 +Msg = ee904c5fc8563ffad7c1714593fabcc2 +Output = 2907281a91dc11e2d10193576f9104932dfd39ed7373ed31b3118c0fa38211a6dfe14a3c92a15933df16f234f77dace6f1d64c9220281b6e76 + +COUNT = 372 +Outputlen = 456 +Msg = fc9a7572c1332efe3aaf464fb72c3496 +Output = 6a5503ff8a62aed2b42a0fa239f49a1521213743f09f3517219387e34afb17127e55abcb55b8c43503b7ab2ee241fc212fd905ae501d184d67 + +COUNT = 373 +Outputlen = 456 +Msg = 13006b80747199b6d297ab30920e6101 +Output = 1aac8461d3ecf331c1d07c711d01186231766432cab581ad80d4c3638bb3804997dc7ebcf76f0e1c07313fb818fcaf1306dc2b36c6041c259f + +COUNT = 374 +Outputlen = 456 +Msg = dec8e6aaf67d1673d2817e188b9b9fa6 +Output = 47afacdaf10eeeedc4661eb515b224341cae2c7c1fbb2ca5f57e8623fb2914873080ed527245552b03ca6037a17b1f2d52b074c88d4fc0bbd3 + +COUNT = 375 +Outputlen = 456 +Msg = c03cfcd3f6c520687cab47a6e5463bc4 +Output = 6010e064b83f6185e2f281fda36cf39c8c18235e6b5d26eb607f378d78c24a513ab3e1c4ce92f10fbd91c77deb2ec4454a580e5f834c56136e + +COUNT = 376 +Outputlen = 456 +Msg = 9dd17e4e4658a4ea88903f8b8a164ad3 +Output = 8e46b75fdf1e26b78a3510cffd8f106f93f850780edf54f3e547286a3590cdb6012e52f3283debde7ef51cd9a8fad39d4d61ae478d91e3ab29 + +COUNT = 377 +Outputlen = 456 +Msg = 899b87cb9951f227eb62e70d262b6062 +Output = 3aa0761b660b12bf3ecd256dfdf0a10c7a509b8963eaf26390e149409560aeac3ebb403b0fe3bf27b9cd9203f1d192b22abcfa4aadd0d6ca97 + +COUNT = 378 +Outputlen = 464 +Msg = 493bab78e97bbefb6633534d84de826f +Output = a56eaaa5f36d027acd90417a7fddd434b184eb3e9c2c9d5db66b7ff4905c1055586771905839dd5c9b03dabd93174c47580c12405d64160a2643 + +COUNT = 379 +Outputlen = 464 +Msg = a2d2e8e98d5cabb80e47de88a89daedc +Output = 964d3613fc7238eef4e92630aef3608401d02a4986bc25f0a02e267b31c7c11a52e5ed13ccc08a72b7ae18653edb17c560bbfab45819ac13ae82 + +COUNT = 380 +Outputlen = 464 +Msg = b840c45302ce0ed0b76e3399fdfda719 +Output = 3a14c7bc921e0a5dcf909644bd634411427b4bcd98a2112cf55240158d84371502d37eda89d54b7b7113be9be27244517e0d42537583837f7b1e + +COUNT = 381 +Outputlen = 464 +Msg = eeec062c4c61304c5161460c471a8741 +Output = 9cdb232776fa641981e1960d0a68989ec5aaa3d13182c76eff525ea9a8daf5a61efb2ad48a81359ecf220fa1fcf38ff9b833b97f9cb82f57b533 + +COUNT = 382 +Outputlen = 464 +Msg = 882f6572b368cf35a51f405feb41406d +Output = a1da06c472f6e22ad708be75b3a747fc5d77f2614f6e1114c370c4a7b5ee1ead2549407d4722f3314b2396e244ca51d965aef8586a905c4bcc9c + +COUNT = 383 +Outputlen = 464 +Msg = 450404773955c74e99c9f47367e642cf +Output = 1391de0d9ef9bdcdfeb5d1c536b2185dc87b081bda505f62950cd6b5393a12fbf9432f327f57d328bed43e64f989d74d2260fde6c10740328aba + +COUNT = 384 +Outputlen = 464 +Msg = f0523b3d34cc38484e0fff8814654134 +Output = be81a881ea47237ff4db80d27fb27c1bc68ae0d9eea08fad7e46f9b18b95b2ad340da78ee552aaf026d47aa78e7609914ae19035fdb5e007d2e2 + +COUNT = 385 +Outputlen = 464 +Msg = 13dba9402a4b7ba4acfc056a6dbeec74 +Output = 9db345b3063daeed36a2c9569aa23d6677bdc74621d4a14677fdc972a687faf0e908ae5ef6e65b7416caa8ee6e96376aa29245591b8bb35ded22 + +COUNT = 386 +Outputlen = 464 +Msg = 59fa3d7091edd1ae2874949a0b18ff95 +Output = 7b27fd12ce28aadd5fe136cd26fadb9e26b0ec0858c5599bd599a17ba36f032d5fb55b50effa08fd423b9e28e780c16066bc9b806a7f646db20e + +COUNT = 387 +Outputlen = 472 +Msg = 754f3c79669c352cb3c6c49573d9d5c2 +Output = 4d1dfb1deca3d3e99f071144a08edcfdec5cacf2f565a88c76d6f299e4ac94dd180c4c4610449b58d8d4b15dd68a35a230b5826f3257f833ee5b9b + +COUNT = 388 +Outputlen = 472 +Msg = aae47a178fef6862b4b1d255886a4754 +Output = bd9a3ecfe93587968f31894b620685ed7f045e5748d2521c4ad73cf0b3535f15a8f999bd86387c43e45524fc059d36a9e690d4c711fc78a4b41724 + +COUNT = 389 +Outputlen = 472 +Msg = 267b0dd474660ed1c5ddaa372351df1e +Output = 8d9a7c6d19c1410de4d5f6b3f0925a9ebb24c404493b9c5d5350115cb67005f98535bad74910dcd340bf9f43c88535b12fb7cd6c58e1e79f02d999 + +COUNT = 390 +Outputlen = 472 +Msg = 9a55335bca338bbda9cf4eede8e4da25 +Output = 157ab6ebd5fcb1b438da1d1f15d8344697201e6c13a6d167ab18232cf3f8d0a3429b53a91ef43846e49979ac36188ea802ff65b328385757627b52 + +COUNT = 391 +Outputlen = 472 +Msg = dba0b4fb92bed278d4050fcfecab9802 +Output = b5ac829af4318dae451f033870b650499b2d36693ea52ecdf47278ae18eca09e392bbd457a4a65b0f7ba14de54dc69f2cd25ba4dc6655c98beabe8 + +COUNT = 392 +Outputlen = 472 +Msg = 3360adba68ce7a50f1944cad9a968484 +Output = f17b110f4a9d9dd0f6b3e506550210e9e2e8e9de1a20cfdd728282f974f23b67787b4e951a8c223068d9db62a65f8dc92cd6c837fd2bd0783c1ca7 + +COUNT = 393 +Outputlen = 472 +Msg = 09bbe68c5632a52835bec9a932876913 +Output = 1683c8f279bc03e1830a21d4c44ff8a005ff663a5a7d4fd4a636b37722ff5f772dcb8b4ec7ba3e3405d6f558c5b5983976b4b7dc273b0f174ab75b + +COUNT = 394 +Outputlen = 472 +Msg = 084fc4394af7c4956946171a9d9f6466 +Output = 2ef0e907affc45a8fafdbaeb0d6b7c5b79c3e9a2fda337fbcd1a25a77553cd18159d94e19bf34a88a2b6869d58fbe38884b709dbadb31e62cd0d1d + +COUNT = 395 +Outputlen = 472 +Msg = 106ed29ffb8e162a9c29045c4993b4c3 +Output = 6e9fdb64260c1571388d3fb69d16bad057e6596784b4af27aa095d1c9fe810de61f39b259d5412ce02f22e64d6ded95f17805766681fcfa1c552d1 + +COUNT = 396 +Outputlen = 480 +Msg = 16fd337fbfc8c2475193185c0db111bb +Output = 395e0c2e3a799317ab02fc19980dea3a30e4cdb67fbe46be7fe6321ea2278c6aaf182f8d932811d5332da0b8db22bb76df5443020aaad83acbb0aa41 + +COUNT = 397 +Outputlen = 480 +Msg = 6b5ed6aae8b2b7aa3df27829bfb1ab7d +Output = a112f5038d23bbb3e52135cdd8b910624c9fc53bcef2ef38df981412fd34d136cfe164904a741084b6af9073790a9b5371e75501cbb70bedf06c083c + +COUNT = 398 +Outputlen = 480 +Msg = 89cad8eedea2096e624caed75cfff040 +Output = 73a780a5742e564715d03a06f9a0e072c83bbec01413108f071c8376000bf47bc6065938c051ab2e1cff1d62f5d05e8563e965632292983f25e4e2ee + +COUNT = 399 +Outputlen = 480 +Msg = 8213056de909def07c41a497d96f87e6 +Output = 966714b5576a4f01ca1e1ce314b0712cd3ca0d36bb68ef0b21fbb96fd164a27173900985a476bcb3026e2bc62705e29e74d671113feea7d701611579 + +COUNT = 400 +Outputlen = 480 +Msg = 68727636ff38c0ba8999dde3cbd95039 +Output = 9b8eb393ffdb201881f2eb7b427dfcd6ba104fc64adcd44c3417c79299d37c0b9431c48e35a6c42ce3ecc8bf5780546e412c5dbf8b8a697e6dc6a8f8 + +COUNT = 401 +Outputlen = 480 +Msg = df476aa202f8486eab12f8aa592d7ae2 +Output = 1c2552a29df6a4a6b4925de9d8fc11a0ddb7fb87c6541443966cda1452f1166b6d57925159a6d9c6ad82a8aba2ab6d3540851f188398f322c8110f42 + +COUNT = 402 +Outputlen = 480 +Msg = 3c2aa1e2dcac3712bcfcadbae94b871f +Output = aa8997123ca64c7acc426804b9fe39d31cfa66c1f6c1fa75676edef8e652a4aeada79d6d5423c4696f82f5cdc309ce591b2ec831998d42e0129c31ab + +COUNT = 403 +Outputlen = 480 +Msg = 14d7bcf2511f204ee89d2218591d6a2a +Output = 195aeddf9a049e8ff2f400ddbecc7e58b81d90411444a0d19539114f48f16130f2521302fd00da26acc42be9521db6a23b824db00bd3bec5b3e4b73e + +COUNT = 404 +Outputlen = 480 +Msg = 65b1854cdd6744ae1eb66561fd6a9436 +Output = 1c0666fc78895eb5cca43b4e807e6eb8fcf8c090645a409e4d157a587a9355c9955e909e8bd223902a87935f6dc0e3fbb8f3eff77640f6d50757e303 + +COUNT = 405 +Outputlen = 488 +Msg = 6cf84f069bdb92bc3fdffa66d98cbfef +Output = bb89a5377934c323efc5a0c9216cf49ade493a8519d0d92bba9d92bb20b2c85ad1856fbf959c38a339bf6e14db18fd2888cbe63decedee2377621a979c + +COUNT = 406 +Outputlen = 488 +Msg = 7570184b5f8698c15bc29cce2ba62da4 +Output = e307fdcb26a5688586eced3c4b96e2729a2efcf21cccb4f7536aff595a181d15b9ee589ca4e11d2dcad2415b7517f6313c82e57978a12c9598b8bfa109 + +COUNT = 407 +Outputlen = 488 +Msg = 8b4e035d940c79210d8c7adfcf91c821 +Output = 2920751e9e3861ff556ddbd24a9cb428caa9cec21cc26fab46d245863cef79da79f707cf1ac451e95f71bb4e3319201aed2ba1c45cd821367095c9c1e8 + +COUNT = 408 +Outputlen = 488 +Msg = d9ca7043ea404b33ceb5cc52cfd53ccf +Output = 6c598c2a3a8fa42303a237c4f4d44fe11eee354f4fca451235e3a7c435014cf9afea02c8116001cefb830226c6a7ebb6d63fab4c600a001942034ca77d + +COUNT = 409 +Outputlen = 488 +Msg = 44c9323bbd117a434fa51f6ebcce976f +Output = 6da86339a8f519f19beb2edb2f49f1b86f93bd543a055b2df5960cfbcac0373735faadfdd7ca825624c1fe61809b08de6a2dd034882d56dc22d80afbf5 + +COUNT = 410 +Outputlen = 488 +Msg = 2937174a6a4d8e0038565e0ddf3b622e +Output = 05a55ecef716281d434282ea5029a548c62681affeca3db2ca085bfb44884dc9c3f12589387838d9b25bf5b168cf89ed00d9cb2c4b244cb7ebc03376a9 + +COUNT = 411 +Outputlen = 488 +Msg = 1e68876682b092daaaf3dff595bf0fe3 +Output = e83f0db1bae5dc6fdac59ceeb06d08195f82a77ff2f81167e482a43604f0dc24442819a0f41735cf822ff50898a2554532dd7638c26f8b17a7cc331a9b + +COUNT = 412 +Outputlen = 488 +Msg = 70ef2bbde7b4a0567546785fe59009a7 +Output = c7a5835e30c14573fa2530deda44d9a23de7c7b0cf6ff4ca464d2406f04cd7b26e250a53e0073d74a469394b5898d8e565e28e217a8f375a880136f29f + +COUNT = 413 +Outputlen = 488 +Msg = 8e5b32e2669392f4df60c3d32bfbb209 +Output = 35ed88ab99bdc19ca6afd1f6571f54b9c0f0988012ad3a2897bf9645d646578210de256fd02006f50d78f9c8a30a0bab412fd13d38492c07297f01d813 + +COUNT = 414 +Outputlen = 496 +Msg = 4bcb511e4deac4999fec18cac3971233 +Output = e332a0b2deec78ef0d2e911efa0df41ed4d9bf44df64735ed090a0e0cad5d907493c434a8a7742a4f01e3156c460ebbe49e9ce1a4518dc53dcf4703154c5 + +COUNT = 415 +Outputlen = 496 +Msg = 8edda909d228c01fc010357cb54c732f +Output = b52b0d291c060d1becd69ff1165e00056d4eb4dd165d56180b65fb1135b2e8af7e77126ecd0e99885c3ef5c8b619fc8f924feb645055b4411c1f79afdcb1 + +COUNT = 416 +Outputlen = 496 +Msg = 6e7a7a8106a0842edeb5b0ad9822ce61 +Output = 49a428bbc56e828ebe8a1f18b05b804a84053ac9ea70ed650e882e57555dd48b5b377f4484b4de9155830dfacd9ef51e131bcc6266aed7852169e231373e + +COUNT = 417 +Outputlen = 496 +Msg = 2454964de16bad37d6b1a91216c053d5 +Output = 0548e2e900e88c700bd19eb2d21c24117cc85ff404a96a3683d2b01e293933e683fb8a3cac18302bf5c2fde7177965fe81f56ca790fdcda807bb2883e4a4 + +COUNT = 418 +Outputlen = 496 +Msg = 432dbae5e496e18fc783925048f59e45 +Output = 513c1928a79340de90759c3b3e185c19ff7287e019c76c23bbb1e4fe532bf716c68a823ff9d54f83762132980d8e603be68c25ee738ee9c82e5df1baed0c + +COUNT = 419 +Outputlen = 496 +Msg = e63b13334669de132c6a0175e2eebdaa +Output = 8b9eea8a21efdf5df278a108119e2c08b5d46cbff8d9da5bd736c298b29817a2f9476d61207831d7dae22536085929548b9fc1c9c934dd2aa953d8d468d9 + +COUNT = 420 +Outputlen = 496 +Msg = 1a6424b778f6ada35c923ffc6b5a460a +Output = 734850581ad0a8dec1e02acff288b53e2f406c6164c2642774d2b019a6763c81506f1d7f9a8d211f3aa3fac10642918553f56d2170462019782a4eb1d4f2 + +COUNT = 421 +Outputlen = 496 +Msg = 7dd6c4bd79802a9ce17211f00eb52e26 +Output = 1c87dac73688d4ca43164c921b210f4fdfb3cb317abdd602e430b799b99af9f1d71468cd69ffac3c287132cf87dcb5e09248c7d6d511b5f6bc837743ca94 + +COUNT = 422 +Outputlen = 496 +Msg = 6cc4129b570b607e7e6045693419c80f +Output = 13be30abed76d1df524f7f21b5e6c891b1c1ba0a528430d45094c72f5a984684df67476b0ab99d99cdff823ee165e7f86d4a33df5d7a81ad5033e202b83d + +COUNT = 423 +Outputlen = 504 +Msg = 132adb15f07596590ea2b832047c37d2 +Output = 7976b6775e078ba641011bc19ab6e4bb9e5bb517eebd8a60cf86146ed5da631c386660f7e44f0d9f5367b873c593dfb63157af640cc2de2b81669b179b1cf0 + +COUNT = 424 +Outputlen = 504 +Msg = 3948d633764cda309eb3483daf13aaca +Output = a07ef491c0695671cdb1f9cc3213a890fc5be5451ceea42481488b691de3e4d114a3a701a19e57f3c570100a4988ae266083183f859100e3d38e30b78e124f + +COUNT = 425 +Outputlen = 504 +Msg = 1a4348eb59ba8b6e2f615de259900a71 +Output = 723882ebffcc92da4163f8757d35b5e2f06c5f3649b8fb9a1391a1475a807913a568a07d4e502aee3e010469d680233b94341159e24fd9949acf6f16e1c138 + +COUNT = 426 +Outputlen = 504 +Msg = 74f67bc0a547214200d1f1c9ca986f14 +Output = 2161c68a91c2392b35473bc0a56b016c27e57c4a9c8f536254aac0ccf798abaa6451d878bb5269ff0a310eb2739e0b84986d9b060480779da04be73ae311b9 + +COUNT = 427 +Outputlen = 504 +Msg = 7f173d6e9eb3b55ffd45386b5fcdd62c +Output = 589ca3e4b85aa95ee4d143aa1d33289d6f58e99f94ccd87e4e977a7405b682df0d575b8da49247a4e00d413e98cfef6c627aed24de1acbce8f43b3f05f9314 + +COUNT = 428 +Outputlen = 504 +Msg = dae1795e946fda53ad7de6cbae7f0f03 +Output = a2f54354cf50d90f8cb207056041d2574d5bdd85c6535e727ba2832f14c5f1cccc80d4f17878ca613c4725c2238c8281c3f45cbf5688a80fdc743850ca7a64 + +COUNT = 429 +Outputlen = 504 +Msg = a29eaa776fdf391bd4fd346c5e289cb3 +Output = f663d052b01108125781e0229bd90fa22e70504553f32ffbdd49f5348f77ed51564b47bc5934fcaa8cfd894e6f798923f4be380f3f18134eb465d6c2e657bb + +COUNT = 430 +Outputlen = 504 +Msg = ad514bd737bd2d037ec4be9e03781a67 +Output = 7a1b28be3910b9b0e8f280a31fcfdffc95aa8dc0a103ee862247448da8adc178303930f516fea613c493789cf4ab4ed8555348b71d89d9a161005c6990acca + +COUNT = 431 +Outputlen = 504 +Msg = 38e19a4206f3315b5d457bfd3aab8d38 +Output = 3bbb52d8657fb84f386f5d152ce4f5e91972c431f7505c9c791fb294c752a32903c038f3d596f60010a189b23381e3afccc318033662f654257d7a07086f1d + +COUNT = 432 +Outputlen = 512 +Msg = 5724ecf8da9109b898a428939e08db24 +Output = 74ec9ae4e1cb431039d4d1bba001cb22b88c1319653fcb17a2fac28b6a27b5dfbbfa8869e8d349cf3d9cc03c05a73998a10f0bb83e5a54b55254ccbc5e21566d + +COUNT = 433 +Outputlen = 512 +Msg = c0e048e6f9a9cfef46cc86a3d943d4e3 +Output = d4d3bdc941ef3e67407cb9e9cfe3fc9095e21630eec01e5261898c69cd2e6bd51624f77cffc223a13abcfc92f3968d67c327e8f23a0dc3428cb71ce51e9ca5ff + +COUNT = 434 +Outputlen = 512 +Msg = c0d2cdb425527b63321e824db31f3748 +Output = 495fddb0da4152ecb8aaa136698caf237b90e0fcc6c7de18a6fccfa888b0d9d69ba2723d8c9b6957b703847e83c0bd1dd70e5433561bf36605a4deadc29cd385 + +COUNT = 435 +Outputlen = 512 +Msg = 5620447d55f58aa14c29e1fd5206c336 +Output = fc22b1f5de6b264701d85b576ff69db3dcc938cb97c19d142db48d2b2d9c8cb1b7ac613e2e72e316d55c467b77a371c36071e92acd277125501796e1e15264ee + +COUNT = 436 +Outputlen = 512 +Msg = 5ca8ccb4b37dfd52863f431aa1dde409 +Output = 3cf86d9495d75beeac1b8a7a5749437f6c1c955b9b4c82b1bdbfeedadb9c37e8869b2a3f71fa26cbe6f7b6d38be51e739534a74c0254e91824a59d53249cceb4 + +COUNT = 437 +Outputlen = 512 +Msg = 97755ae0a09a6a6a0d6fd6a8116dff02 +Output = 8fda51bfe61c738597fbcc96a6e61c84a16e36cfae52d0c15c805e0599c111a966842ba825aff51414f13bb458de58ea8a1ffea40ef2ac9aceb18f2e0dc7c83f + +COUNT = 438 +Outputlen = 512 +Msg = 0b4b92191d3c8cff2d02980bc15f78bf +Output = 3fccf2d4c530db8f92d4d8094a9539a705b86b7d04bf06d765e31883058b51cccbaa1e9ca5c7adffc2c83df67cb5ec779012757a3511613fcabe716305f18949 + +COUNT = 439 +Outputlen = 512 +Msg = af477827c1b099ee305bf7fdcf57b102 +Output = a7c6067b5931e71e9b1275e02432480e1ade37e37fd3be7d87fca9468f9b84af0e51e3af36105c821c57a8bf30fcd179842adbc06b7cba43902e2a5b2d0b60ef + +COUNT = 440 +Outputlen = 512 +Msg = 0fd64c77822d78a61d266f569279a182 +Output = c117a0b561948050582d0e4cf4b01bb85f5249b1b42c529cdc4fd83643a3dffe7cc2af27bc0461fac043f5854c7fa08ac27babc745c32fdca0fc7ec7e8cbaa8f + +COUNT = 441 +Outputlen = 520 +Msg = a5c61c1e7aebf9db7f6920ccc39cc55e +Output = d4aab320e2231efab9f9f9e464f5a6ceecbf37a1c8dfa4d8e96429f5b5b1dfabdc3ee4e4bfbf32e469bea725414fb2e17014973763e7884e91ba3b7608d7f00a0c + +COUNT = 442 +Outputlen = 520 +Msg = 221710ca1c521ea4c3fe7aaf826691b9 +Output = 3a72201d1c6173eb13d15c7b1840c8e3ce8765a96d52a14e2587022b2bd436c7bd7bf8f9c8f77d726d09d832e0177b2f384dc75659e7054cf31035952fe0048ca4 + +COUNT = 443 +Outputlen = 520 +Msg = 8988262b74bde31e5814142b9483a51c +Output = 4c1ff9637e0b6f699285338fc412232b54049f33f0cf559fcb3c4218e504f0f985e7c6631a307bb267fbf4821b42d16c13b0b764aba4fae255695350c4735a6a49 + +COUNT = 444 +Outputlen = 520 +Msg = f0d0c516c8360b1c6c5f8ddf8a14800f +Output = 4c1c47a0287d5cf2221a159abfd2bf7d7765b65b0b9e1cdfba262470f764c0a32141a50cc2035827bb7786ce9e7a85cae97535f895f548a09e993bfaf82dc4b8b2 + +COUNT = 445 +Outputlen = 520 +Msg = 145b2653d32acb67c6027617ec3047c9 +Output = 4e4154b103f5da35ad73cb9596b6a322470060011a18d92cbb05db67fb8bd45e7f918dba4483538386b141bbeaab7d59bdccd339a4b33a28215bf26649ca12ce92 + +COUNT = 446 +Outputlen = 520 +Msg = f9ad1bde60a8d7e7cb16c1cf6b713df1 +Output = 6929bbecb69eb1f22dace08e4643f607e65d6282390c99cfb2c40de12e9c8440f3adc72f6a06f44cc88e68097e2eec4e66a3a68212ce87b4e18fd06d6e8bca5c90 + +COUNT = 447 +Outputlen = 520 +Msg = 4af6fac60e9f5cc9ca5c98feae688924 +Output = cc58d57ce02eacab869a3991c347a105949a72373f21da93600ec5a5b9006408565d40acd5d1c14d0d261b4c61891a572a296dd9b5578d3c9a55a3f09162f043f7 + +COUNT = 448 +Outputlen = 520 +Msg = 7216a825029da1c9a9328d499b3ff98f +Output = c34bd040adc38f1cde974f616eab153eca92c8409ed892881a0197d97c8c99830ec8934acab5f81b73f8c130f37b96af7cd3c8857daff83b903d272880c1296418 + +COUNT = 449 +Outputlen = 520 +Msg = c6fca8eac307c0346faa236bea158d6b +Output = 65fed8fbc7748a007c58a1836ad023ec768196d61ddbf464a2669ae2a5096407a6cbf79206c1f48f7dc0253e5573dfbf5cac1ad2a3a30b04c95cbc7dcf835f5a23 + +COUNT = 450 +Outputlen = 528 +Msg = 9c655cf55f6f81f7424d98dd4f2c2add +Output = 649e69f3ee5f62728aa95fe9ba66d47a1e5caf09e98f2c012d8a710fce4ea83c783bad3437b50663011d017bceb20c7c626574e2b7bc57e4825f307e5b7bcb108b5f + +COUNT = 451 +Outputlen = 528 +Msg = e81158ebede8655732bb44f1ffc419de +Output = 6ec974566a8d02e8eeb87b8b7d334589730e51a4e645b463bb95df06131f696507a4c7a2ccc339823597d9fa3ac920f7a1eda0018121cbbfb8b06b5aa66da090f184 + +COUNT = 452 +Outputlen = 528 +Msg = 69c943b5aa1856b540d9cf596b57996e +Output = c12ba83a07fbe16502b3eb980fb48bb30cfd18fe8abb937c332504f4922088275e3958e1eda90b12d5cd26a916f7893ea1b52d11a2d827de942b898c6ecd765511ae + +COUNT = 453 +Outputlen = 528 +Msg = cca9f848cd5233308ee63532ac5da3b2 +Output = b669067016fc393493fbc0b79748568f903655c0387b6130db8a6ede11f76f2a9c89bfa1365fa8bf6b69ea0da695f3615dd358436fe81c89720fec5ffa89377a2467 + +COUNT = 454 +Outputlen = 528 +Msg = 0a5465cf6cf76174f63555cb9b81fd6d +Output = 3617ff610caf33b40672e3e10b0ad2e67036eef170559d1aa74bae35949760dbddacfe60ed1c6eaffd79b7f55d3ca6aaf2551b8e47551134393fc89536284cbeabf2 + +COUNT = 455 +Outputlen = 528 +Msg = b3ddc063481e3d6bf604f92c0df2d9cd +Output = c82868563cac7fcf0bde8c1fc84ac857e81f227ad409d549b3a551db4f3e167a25c0c5f979950da172d3996c7773573f87f419b5ba047fd37b72b2e6f932ed14a79f + +COUNT = 456 +Outputlen = 528 +Msg = 2233052ec4ffc6bceb5a835bceb0caef +Output = 0d74d2cb6cb0a7d56f1ca4cfd417e0abaec6ac3bf9d181a65e8714dd9ccf5ffff8f2c1fc8a9f898e7bb458f6fc092222f9c25d8af738a23fd7a49706840b12cf306b + +COUNT = 457 +Outputlen = 528 +Msg = ff389650d4a5c98701e10541c30b7c3e +Output = 6821e1cf2ec37856875f012617e9a38ced50aadc9833bd101f313d277ee17357710ba4f0d0689e3c073fc8a14c70e77ebd43e9c09b923224f9dd7d4815e752810b61 + +COUNT = 458 +Outputlen = 528 +Msg = 1167f21de69b7d4456e034d3d2313147 +Output = 62d45017c59738f6ee0974fd5fd14545731c2a7ba11db2c75fd7d6a45e5857bb0b2963e05793cf382ab9797b372925a379ed0d004f3cce006621e754475a5de42a03 + +COUNT = 459 +Outputlen = 536 +Msg = 8fd6cf674624c812bf8679b8e6075351 +Output = 028bf696fc8fe6aed65af30105f9abc050a4122f5221639565462becc6d2175db8746b6cb0685d6e2fabfd241c5c4d281df189d7e57c18e6f58b18b630d69a66ae8f55 + +COUNT = 460 +Outputlen = 536 +Msg = 2e5d50e50b55f4936e28cc5a734d0301 +Output = 8844598631fc713e0a28c7f13ff2b3487536224b04f3852d24403907ddb93e137ec86aa231a2b8ac47545a36fbd134b2ef2cae9043de49de4ef0e3f5db4aff266de32c + +COUNT = 461 +Outputlen = 536 +Msg = e9cabadf84852510dfeebb11c8a968b8 +Output = d7d3e3d37ce458f9946250f230ab9aaf7320878621b69d669a545845ec74a5336c69698757e6b71121aa99d7170d9e3e53e521a6617f6864dd4b1dfd5d2917f2429f9d + +COUNT = 462 +Outputlen = 536 +Msg = 2f16abfff5b155d2506724d43a160985 +Output = 64949a44df3fffaaec9ea80bc64bcec82671bc648ca354f4e6dbb71de6a6c9a09d39acfbf8c8b76d918cd26f6c0cb541a5b7773156c90b324da460b7687cf47df303b1 + +COUNT = 463 +Outputlen = 536 +Msg = d80f1434b53f6db3e00c5e1755106ddc +Output = c1a2343dc6d702e12c9aa094df7e8cdad7391a8bd2da2f941b92e592d9ce5fb3f858b9a86535f6ccbf3cfc7dfa558982669d2e3af3b2cd65d98a39744b48ad7e33db35 + +COUNT = 464 +Outputlen = 536 +Msg = dc97e13f6857bca492075cef6c86f80c +Output = 025db653363a926ee3da59cc8aba70332fa7e0ccb3d5d5d0f52b7e5b6acadd3d5df1b8751cc0eeec2587a7aa3a5e5c4da5ca85bdce8d1176ff0c7066cc3bb37db9019f + +COUNT = 465 +Outputlen = 536 +Msg = 5260549334240e95e146697b85970732 +Output = 87b4c60f8eea9021ef28c83338282c9c7ca1d36a920894751cc0c6fc53ca5de5d604c18ac44ebd42415a40cb376d70b1415d69af272a8432e7a429b4b0538f388df893 + +COUNT = 466 +Outputlen = 536 +Msg = 69573bfa284efb046f8d445c10ee915e +Output = 80de5c22ae25ccb9afebe78c23e53c185201dbcbf8171ddba9c9a4de9b841be850f753fb69c08731099dbd4ee88e46893cc236cad4800ac598b5a602a742e5353b7a90 + +COUNT = 467 +Outputlen = 536 +Msg = bd9edbf5e45385dfb47988b3d966f31b +Output = 9f63fc28f0875a7d9ea07d0abf88422ff572a386ee8abd073adf55b05ed5e8af0d78d17f7c63c0457eea90fb666afce7e959b513800599655d9295c48543df08c258c0 + +COUNT = 468 +Outputlen = 544 +Msg = e6ab22da057d5c5c360c8b7632795fea +Output = f365e1c309fa4dba6a356540cc8bc2092da76b61c0466c5c131c93efbaef84b3d2fee287c975929d227992e751984d67365553d83c8cc87619eea0e39ae86fb8ee54409f + +COUNT = 469 +Outputlen = 544 +Msg = 5d1e7cf19591197a1dd10bccee4a204f +Output = ab06fbc60179e919d2c978227c25914f3d751d5d27a4f5d60afd0afef9151ab3531cb39bd4b4a0f720e38b1565ac6a6de51524a0f04b0c4377f00c5fcb9bac73297c4e36 + +COUNT = 470 +Outputlen = 544 +Msg = 50b3b88928085fdf7f309b52f8953e38 +Output = 94c3e2bb8b6d3fa378feb46e28c7dfe9a18a94371d60b313970070b45780513792fc2748af8d5ab8ec0f1a88f2998a502b167ca795f611d7e49c297e0202d46114b93e60 + +COUNT = 471 +Outputlen = 544 +Msg = 2ccab02be430118d6dc505e028b60e6c +Output = 00f4f14abc14fcae4c9d630f2eba6f174ace360912f0dd97e9254d790f5784ff6b5f5872ad95cdf5e75f9915d871f26298a4b8c41cb0dc4889a2926043934a302d9563a8 + +COUNT = 472 +Outputlen = 544 +Msg = e82f476933f82c369c8c43b9fdeed32d +Output = 7c702074e1b19e31985bfcf966c1f7c65b4fb920ae0b1c50b577c4afb26c5777f710bbb947f326c0337744f20f9e0079c697204f4cf8b6e5a87029d853f0dfdbe33d6574 + +COUNT = 473 +Outputlen = 544 +Msg = 7e5be265445f183e8967bf4e8a0a2282 +Output = 18090e3478500089d46b25e082a3ef1ab952b8f179f43b635bc1a5527547a98d840292f953933c878f5d52ba7888962eb493edd1469d6b4bb49748d2d34a7a60f21e2c62 + +COUNT = 474 +Outputlen = 544 +Msg = 511af474bdb4c85547d47373c8fb4082 +Output = 50397c1f6d1244b8a3741c1d82dfbe6f9b4357cbd8f3c2046c2ee95a0ade85cc4650873b08271ac33c539ad4333e2a328da5ef2348e6716b34451450579eb06a514e7092 + +COUNT = 475 +Outputlen = 544 +Msg = bc68ea4257af11182b6a79574bb2e680 +Output = afb45ae47afd8fd788403ffc9ba5c0e181c4e26d576e0619b73108be3ff3586ceda06ca0644993d7e6bcc377ffc606c6c9c9957a8d490bad879f1154be414605130c66f4 + +COUNT = 476 +Outputlen = 544 +Msg = 8426213bba0d11b997aadbbea378d7cf +Output = a5d05d79ccc47dda6f4513b318853ff5083a7f38c020c99a74243378b3f58d7f63959740fe233147a181bd01b301c0deaa62bbd2c3a67752c6fcf571ee5c6be642fbe06a + +COUNT = 477 +Outputlen = 552 +Msg = 2418c51840d4a18c0659ca2d11aac3bd +Output = ead10062875ca8ccae84fca71c1115c9a22db6c6104c98c7acacc514c70205f9a724f8b0e70dd41da0e62648bd82143f9b44bfcf35b9016e30a65b2d3623739520f772d58f + +COUNT = 478 +Outputlen = 552 +Msg = b9494c5d50b8a88b3dc834f60c657914 +Output = abbdf0354bd4ff1c6f7382bf7304845156a99a8cceeeb43f68bf053de5778e25b3ef9d5aa1bec8f7630ddab3a0a60cc6e804d4d9c2c8b19bdfead2afb34c4f36b5c991f197 + +COUNT = 479 +Outputlen = 552 +Msg = fdb178ade3731c45d4b74c02edb8a32b +Output = 7aa8d40a76d995344b5f45300026e7aff6ee8eec7c9268b47c607243e1323fcf80d4506a9e3d03c5e1fb58d77a272b49389f0fff3db415016e3571070ba1e47d4f18eaf361 + +COUNT = 480 +Outputlen = 552 +Msg = 0b7bdd5600f2c20de56155f0a81389b6 +Output = 5ef7e7f88b1b2bda0a3a85500e42351d1aee766d5b88e0422a4ea02dbc32df1a993606635db263a72fedc0823e9d42781809464365c972a1981211eb69bfb1ca76279a2018 + +COUNT = 481 +Outputlen = 552 +Msg = 0b0046b1a74f2cc849fbb4d096244b0d +Output = 299e4c120dee32166f28068609435408bdae7745d69820e1a29505f258dab478095227789028f163e08c0b1e3ef87b9c9d253a87a827dd899827e109da10988ca7eda811cb + +COUNT = 482 +Outputlen = 552 +Msg = 5de59710a7d3a9848ba30458a3d72ccb +Output = c8fb73f7b7cb40156a0f7197134e2c06e8921f12fb04fe62bc8b7a8764666423ef82a312506428661dc2b6975a49cc7ae0d1a0a6ea0eb4fa0eb94b609ae0a8bf36c50427b4 + +COUNT = 483 +Outputlen = 552 +Msg = c8517c56ab3179c75f4013e57fb670cf +Output = 0324b9fc6e229cb07f1c4d2dff72a1b861a170a228254923eaf7e9b738a790b7f850845605af55d25fe27e12b635a519bcce7e19b2948cfc465901972e6ee6ed203b056b92 + +COUNT = 484 +Outputlen = 552 +Msg = 28fe38432ad07e84701d764097e3b7ff +Output = ea382f070e2e7b261530912785f6653ab6063d0fc4ea1b886493b81e9d3464e53f0178584672435906b8e6f788ae4d1c7ac349df26849c4cec24e006737a2b091666448fda + +COUNT = 485 +Outputlen = 552 +Msg = 3d449e32c1a302c11eafb4692ab65b85 +Output = a3aeb811ac22c245b03d759068783932140c27009158a97358e5df31328016d95b96714a97c16d3bdf473071e6fee67f3c776d47aa1b5f04c1760fb87a2745426b8fe9bf2f + +COUNT = 486 +Outputlen = 560 +Msg = 26dab5f6ac4a9bd97da7577192144830 +Output = e6280ae64b8a5495019bd49f4288f48020f065c3f6bb6abefd45b0881f9a145cd86d07fe495629ff325814a2f2aec63633c44f3f1dba89c84a564b2b1d5ba1e7dfa914b844c1 + +COUNT = 487 +Outputlen = 560 +Msg = 576a91eaa5902b37aafbba5723420b31 +Output = 719296b4c6996e0db1e97966adb53f258d62357748cd5d031de7d8d84bcf4f8366fdb69722b46fb9e494d8c2de01d61286e406de11d97566319bfefea91a313376f252276dd4 + +COUNT = 488 +Outputlen = 560 +Msg = d8b073f3054980846d03c5a38e6a6869 +Output = 4a82d1e857779cbc5e7df655ca33823c1c4408549af6eccd13c1851c56e6689dd347b9a6f7d8ad7242a2b91dcd4ca3f3499399b437a6353a735ffa0d576e935310da18a4607c + +COUNT = 489 +Outputlen = 560 +Msg = 36be0f0e26d16c77ab435349e7bd9e82 +Output = a3435e150829a1515c1a49859cd5c168b3a0b3de3e33c1898cd7f9569939981ef99a706d1684fa04774c9650d4936c96a15ed218e765ff9ad8057e97e4384214ec8a61b8f24e + +COUNT = 490 +Outputlen = 560 +Msg = 7da093171f3b7b70243e7a9d607f1bcd +Output = 1a91c390e9ef43144fc9dbd5e817e3bdd056a092ae508b311ea0825220419bedee792a1d9d2b8b2acb7a7b2d635d1cbc152bbbf78ed61431f5a8c15f0b0eda24092f31894410 + +COUNT = 491 +Outputlen = 560 +Msg = 7eda6b38fd1caab32dec58865ab74614 +Output = ab256f29e42f06b271a7479b86daea54684fc101aba4f30ff3f70096142ca27137fffbe6c26a6c24facd35fe72d43c586c718ac36fdaab06d344d3f1dbbca595a59829d7852b + +COUNT = 492 +Outputlen = 560 +Msg = d1fb8ecc9e37321b3eed88f36c80b8e9 +Output = 347914cf2c75837a6f8a562e9f27aa6fed8f247ea2d1748c2152ebf959bbfbe4c219d72e7163b166ae05a2b60f7574e74a2c81b506fa3ca943225bcad1247fee9c871f0008de + +COUNT = 493 +Outputlen = 560 +Msg = 4168ddb3c4474a8c130b2b9b0ce87b3f +Output = 12fdc1356313c9074b2cff4221ba153281e4b4d53073cd583e8162f5804bec9e39265976a4d5a2633c8188e034dc91c2dda3a38b4eab030c0c8bc349449ced1a5ec8ce8635e4 + +COUNT = 494 +Outputlen = 560 +Msg = 2c275e327eb181cde419bcfee599f665 +Output = 4738bac9204d5c1b351b53263a7f824278ae461224282b76d21967290fb00b29579a51780db15d481962e3131de58bec321f3f599454efb515c9a0021431c2ac7aad93464f9f + +COUNT = 495 +Outputlen = 568 +Msg = 6510268e8d5d31dc91bfffd5c40f99a9 +Output = b108625b6dae80cecab34d05217b288522736dc83ad2ef73851602da8ca5b41d77d62f274961037da4b87a53e3452bfb4bf923e4dca6aceb4d69b3391653edb47d3fdb4c8dc4cf + +COUNT = 496 +Outputlen = 568 +Msg = 13cd2e0e56f42719974e011447994fd9 +Output = 2942f5adcfb2aa6170bdf0c4ca78634cd25f1a1c2e6628fced08ced85c48ba842a165f479e83896bd6f4690b00aab716de3f4af4563050120f007063523a888ccdc85c44c35bb9 + +COUNT = 497 +Outputlen = 568 +Msg = 4ff8635b7bf62238d64741db26edd2e4 +Output = 23d93704bf60c811d0bdf1a82357bced16e064e045cd2fd65ab5ab9e53cd3b2eb99ac04da55db524be817d2a3d61e95ad80c6464a10a8b290fddcb35bd742845b8a235ee582a4b + +COUNT = 498 +Outputlen = 568 +Msg = 27f79d936a6cc2dea2b84273e8209ee0 +Output = b8deca8894b03d9ec8f67db054ee1191eab63f0cf082d49ba430d5d0ba809ef054f53a510ed589e8e9731e50bdeb5dd883eae82fb811b7bb17799c6b516baf3fce52558008e5fe + +COUNT = 499 +Outputlen = 568 +Msg = 58bd6b3bf056c503581cb4b507026e7d +Output = 119e6e5f274b406259e116b39b600a79a146370437d18e1dd52f55b95fb3d3a1a24afe4d9d20758b72ffbe13ba30147cb02da34a2e2cc1794539b265719325813c5f0d946c3f40 + +COUNT = 500 +Outputlen = 568 +Msg = 4264ea84632d4f5c0aec348450299556 +Output = 309d6fdf6fad0c9a440faf8f3beebdd975b2319f719e6aa9229757961291a8efa01cda044f1177bc62488ace95a478de3dc94325a088bbed9faaa6083bc722f2cae1b1c0813bea + +COUNT = 501 +Outputlen = 568 +Msg = 5a62727b9faa994bab5857f632619d40 +Output = cf1f6723c853231d8855c994328c095bd5c96b31eec6a910032114d974a77912a04f9008ec6709c8f028c121b7f71244bff425c0b9d0fe4b727fe49b4a07bf7c0256fe5f7df089 + +COUNT = 502 +Outputlen = 568 +Msg = 798acfc8f0ee8730449007c1a47297ad +Output = 693abd8af5650df916c73a7bdc27699818628f12cf6b4289be4479632b969b161f2df953f9236b44f1618d0b3494c58c933be0a3d7e911632d649f84d5c6dad00008876580d9bd + +COUNT = 503 +Outputlen = 568 +Msg = ae78c93f52a72e76b3afd388b9270a4f +Output = 41b757f14b92427abfc994ebfcd5ce62c11c1c0c2e98a91642d8a79fa373ef16282185faa3e87295d4788780d21f1fe02db8047de8f51eef6312a4aff23ea2d5d583c762372703 + +COUNT = 504 +Outputlen = 576 +Msg = 6f820f4a63685f9ced8edb95f9c56799 +Output = 547909e3f4cc11cf61586346cd701cb10050fd87cef101f0b02b13e5e8c1d5242456e0e65a35a9b84c13dc2c64cdbbea1cd8945e4e9bd5378c6224bde589d65bd6d6d0976cac8294 + +COUNT = 505 +Outputlen = 576 +Msg = acbabfcf366defa6ba0115d2a440a388 +Output = 01984a78679c5d41f1a78d8ea424883118c6323302b1b9ed8c9cc6761c137ca1766b68f10b47950b22ed0d617d9438e2893883fb42a850531424a7315eac7e9510775583f2c595aa + +COUNT = 506 +Outputlen = 576 +Msg = 1713437bf0e6f040751c469a9378488e +Output = 804668bf702266a6c82cf09d60dd5b521eae47d2d8ad2c1d62879860b47a9ffc80ac240d319c0b2e083eaff8c1eb623e2a16631d88f71a9a8a19a2780de90909fd357cd1a8a06020 + +COUNT = 507 +Outputlen = 576 +Msg = f9c91042085580fef373c97bb8ba7627 +Output = 8f67edf4fa970d13a73acfa21a920a50a61524c5be7cd310802ed42a51d870877bf78b2028c048c6967749016f24b2ea91401a74751e28d238dded82b8589df543c4813f9c4dc2d8 + +COUNT = 508 +Outputlen = 576 +Msg = 3fa9e00993988dce1ea88b8fee3ef8fe +Output = f5fb6cfbf21ca0bc627565d8d194a427aba4acafa66091e2025feb607521ecaa3379d6a27e530cf49ae045746c948b18ae71c08f9dd717219cb9ed0119edaca0d0b6fd1374c429b1 + +COUNT = 509 +Outputlen = 576 +Msg = 7202478bb8b8d31f90afaf86af995991 +Output = f2371b9c33fa87c709abd6b475c6d85b51cedd8fde3e59837d2bfe667a40332d38aaf58037574aedc23f273d0653c4c7507f73f98c655130cc0abd04939bb11f6223f565b210bdae + +COUNT = 510 +Outputlen = 576 +Msg = 79e776ef028056977624a91ab9371a07 +Output = 38fa2231b93e4dcb6ea0c9d8a890fe4b3851c4603d94511f40ce0650f6bb75b3310829882778a65c78b789f30e85f2682be51eef8abb96d02ead6866c737aa5aa707da6dd347ad87 + +COUNT = 511 +Outputlen = 576 +Msg = 46fb2be061ac51008bd522ede4a65a82 +Output = b29362ce87fc3bcae03667aa057a6012e6ade44cb883299aaebed7f617b4063cab6783f12737d0d132cfa3e138bcdcd0928ea2235c120b86d14d11567964486d11b4b4b76d227eff + +COUNT = 512 +Outputlen = 576 +Msg = 54992cbaecb27d3763bf3c8324d04ec2 +Output = 624f95a81c9453cb9217e2f7e6e2465e37188a7d197a2796fbf59add94234652f708bf2c184653de04956bc7d80e1821f1125dec8d874dd9d62f7e0c0f1ebe1af126b4e89a2ece02 + +COUNT = 513 +Outputlen = 584 +Msg = 3c17404891c66968a37acff6fda5e721 +Output = 78cf93907e627e675bc7c7926d35213df6810a7bb4056b8e8debda36b67e39f1dc2dfbf30137ef71b53d26065d15fefefde9ba106257d3f9e1c80609d5824b8aaa2ed2e5f5ebfa4d9b + +COUNT = 514 +Outputlen = 584 +Msg = 4cbbddd8b6dd92a5c3941278929410c8 +Output = a67737dc705f76448adfa8781dbc784e421c241944d35c4ad25877d1b899cef4b99ca8d7799810e4c9c405c128576b42aff30b060e1e680a34e1a36aaceedb2ea8a27a3c88a5cdd1bc + +COUNT = 515 +Outputlen = 584 +Msg = c16860a3883e9af9b56b36fe60762d0f +Output = 4e908f80be27cbe0c59003cec58b3db35eb3681749f621171a0e1da4508d0683da04c441e8c0bec39ccf3d73f2755a86fa25b427451544a29c1974bb5abf79da3b6845e01286ad42cd + +COUNT = 516 +Outputlen = 584 +Msg = d60b6db931a3ee9c94921780090e55ef +Output = 3d8c0bfa0fc2e1614add5b6c05241d85b83621959ac3b0e59c5274b11666ebe5961638dd5841fbaeb1a13667034aa8f87ca290f2896c1c9b86710d4a877b2774d4bac64f83c18768ce + +COUNT = 517 +Outputlen = 584 +Msg = 795b72e59bbf2f374326176d1d633f92 +Output = 1a07a26f6e5aff318d7fdda0d83e54564bf3b8e335c2e03b7d1c7055e0e30bbf90f6e98536f498f122b48b9af315e31b7a90cf80110d8e317f77e5875ee5539bb14a342983ea863f34 + +COUNT = 518 +Outputlen = 584 +Msg = 32c3412979de62ae6cbcdd381dfb6fe0 +Output = 91a5f5d2222b330690a8cda1b99767f6fc93c1fb5fe7d176f229a1f48aa1f409215499eab80168d90b0db6f9f49ea6dba609dda927605304e7020cc556baebe257bb8eb4db85b4f82b + +COUNT = 519 +Outputlen = 584 +Msg = b61d33409abeaa13c1adf62001f154c4 +Output = c89ee6943fdc5ccfe410852bee4776bb76439159e1cf30ebd17e0ac41458a38ee4e3747ec536fd191a06c9b104bdedc9a6cd714831bfc490a0475f1da3fbcc31cef7161cf609228d2f + +COUNT = 520 +Outputlen = 584 +Msg = 031f049b36b205a627e59d8ea0270ce1 +Output = 467122a12b7a3641488f383e2c116aedd79d182bd45240afb9c7aa9129f056dab4a702d606cef6bf1f591786774f206675322131ce5a779f6e49c3adb18cb6f7fe2d5143969f702bd3 + +COUNT = 521 +Outputlen = 584 +Msg = 33010c79b8d88d217d8ab339d4f18011 +Output = 064dfde663f4545e22423496965a997fd794e7365310d3cd4c0c36e995e90eaf0210fba4f083a8b3b98bbb991f6a0beb53b2fab1523b80dde0a34a754339c21d71b929bf8ff2af19be + +COUNT = 522 +Outputlen = 592 +Msg = 2d208490f2ad89c1e38f003b1654d788 +Output = eed72f1d4be66210f36398496875c94fea57de272c7bbbbe4f71d1fe0f8be42ae2869873f9d6fcad31833d648d077a824c123596bd6677f904e527ba046ce31cfc2e3905b45d1f250ba3 + +COUNT = 523 +Outputlen = 592 +Msg = c63f59a8533fa524ff17c8f90c8fbc47 +Output = cc006b080685a93a3b785455148ff6a8897a2e71112d41169d3804722d86f35cf896950f32c97c2ec95013c91f0bb3606500cb667364c322622bc69127c0daa4cb03368dabb29e706ce3 + +COUNT = 524 +Outputlen = 592 +Msg = 85ff5f072442756665a41f36cb2c99d3 +Output = 42c94f45b8a83623d4d310c340474fa910213bf0fb6ebebc2eff281f529f3423d43d6718ed27c9431c5337fe66dd8fcda56fa874f1e93feddb1eb14f878d3fb17ec42e28d17a03baadaf + +COUNT = 525 +Outputlen = 592 +Msg = d6285c3777b4b57bfe63154807370f3d +Output = a5fd605b3ca298e11cd098208b185ff0e4434e912208f59e09cece20b0bb52979b24503f867855932bab44ebcf9c3e29c8f58a858ebb10744efa6eef984787349f8f19ce0cddf7f6e1bd + +COUNT = 526 +Outputlen = 592 +Msg = 8df203bdbb72ac901b08095b53d29346 +Output = 754778c7d3ef8ab8f1a3d4c2c0a21181fd4d5f7b6fc6ecbef37ed3e056e0047e4ce6e3245f037ac1f79b139fbcdf235e1d6d7650f88e33577dab7fe4933510099ad6c75e783f5f4c6d3f + +COUNT = 527 +Outputlen = 592 +Msg = 5977cd2f87f385bc05502bd5d0e7bd57 +Output = 5e3db1831ee90fd25ab68d43c41069a76554164e2b0fcd3d6757d855c6c8f4e44dda0a2ea3e08ca4b97f75f7300047750cc03b699127d09214289419b2207c422c49f86070c5af0c5c78 + +COUNT = 528 +Outputlen = 592 +Msg = 687ef74e352bf67e5cd2eb1e401d6cbc +Output = f4f35697eb5398435a1883481f74e58f7faece291526a74d218b5630733fcc62f73b0fa15f09bde1cf342aa2b1f7cdd368eb019ccc12017b4f9adc9fa158c6290734da14fd7f7c542170 + +COUNT = 529 +Outputlen = 592 +Msg = 2433ba7be8814aa32fb6d2d95df3fcf3 +Output = 8ab97fcfec4396765365c4df1a8aa6a4861ce2707aa8815ca9f2e1f2ee7213733256cb215f5e218ae46dc05e68c5f6bf08a359849d210bbb6ebe711fb84270a2669ce2a1ae32341226dd + +COUNT = 530 +Outputlen = 592 +Msg = 2efdafaa360d48c474e9280552a91ad6 +Output = 2857aede6efea1f56fe3f046db734ad98258391d67de7575a05bf596cccca25bebc573036a16ea28462e38dc280339d533c588921beb72d874778b44a827f5c18c10d99974e8eb451384 + +COUNT = 531 +Outputlen = 600 +Msg = 1b801a21fa50971afeba3cc75ea69a88 +Output = 3a297aa69f0317aaa3c1ee3e4f351e0802d8e15d6f66c8917b804260571f8218c63bc93fbe6cba518fba8ae378438e6704f01ac60def5818086bad26df228eea7b5830acd42708fa5e73a0 + +COUNT = 532 +Outputlen = 600 +Msg = fedae848392459478b8c4e2305289445 +Output = db3cf71dbf9947690eb969880ab95ad151e2f232fdb31377e40c24de62aa3c050f25a92cdc8d672ee957bb4b268a92c4103ccafdcedadce753747850b2e2a94e470d6aa9cdcb2865733222 + +COUNT = 533 +Outputlen = 600 +Msg = c84c96ed35a2ffa95a6c3977b9356e6c +Output = 5a6efb09ebfc84f34807db71412eac64a3b314061534d509047d4f0e0406853071aa311f9a2d066630145b5ba2c9735fafe9051ce3f640e69d4a6522eee3218d05298051afdf16f91950cf + +COUNT = 534 +Outputlen = 600 +Msg = 13d01b6209cdc3ced578d985023dec6c +Output = ca65a7fb8e47d6abe9365174bfd2a5d0b85a0b6f7c1850ef23e3c7bbcc12674083c97eb3c5fd7db7a051b181916d4fb282379352bda72d4060675f8c9152cbc2dc9c821ccfdf6813ac48fe + +COUNT = 535 +Outputlen = 600 +Msg = d09359c76b27acde36d4bab6ec393587 +Output = 5f1583a530d7a00d2ff5a735188b967ff53143192414ec0e5a0143b0903ea29d7add66bb61f80e47d96eced0ac60f54b9477b8a95496d9da28e07ab545dc8686e8d05f1a95186692675097 + +COUNT = 536 +Outputlen = 600 +Msg = 6cb6976983b50cf36ab241130ef52c75 +Output = 84ba8e7435ed4cfadb127e9b5e03f6ae05ef0545242c3ca2ebd149208a18017b0eac72b7ee136e306535d08309ebbc4e6ccd2853e21f227c94e2a42580a2aa9c2ac51762c7312d8f61b6db + +COUNT = 537 +Outputlen = 600 +Msg = ae59e0a76e3249d00869dea50a1dcfe7 +Output = a4ab4debddde2772a2881d7ecbac8120991838bff9677105a0c7a93b0f07531888b5535fbe6111a74c95927c1cc44a6623baadec672c974e4f4c03f4490e1df0fcb914c416b0d2e816a4eb + +COUNT = 538 +Outputlen = 600 +Msg = edd209dc676b649df0ae3f5d06afb3db +Output = 5b35491ed27af7ac39ae30099e4ce608c350a7654069083ff015a4bb2cd312c3c8b75a547f3bb3d52ae267210587a9ec3a8042612662db3dea73599a4c29c02cb4615cd380f5a21841b58e + +COUNT = 539 +Outputlen = 600 +Msg = a90a37717779a53b1bc16e375e9b3dfa +Output = e4f0053bf0aee15008f249634e408f38906679517e6d4b855bd9f66329c6f1868a1a7c59a74b2c1fbfe863ebc9829ac168fbd0c40e91b927d32841f2c9b84306eca7ad82d8f1ee731e5020 + +COUNT = 540 +Outputlen = 608 +Msg = 3b9ab76a23ae56340b5f4b80e1f38dfd +Output = f6912df095db1da8c184a92a082c1881693fc8dd6969a3f12b6e83ec841dbaf0d9ed9eebd7c8903987816dc4e6b0895adda9d3cc9ba369ce6986b790806f14e48094d8c037052ced2f6df202 + +COUNT = 541 +Outputlen = 608 +Msg = bee9217cd152443d54c058295b83bc2f +Output = fdca49d58b33826fa156c80892e9ffc410675f1d50d260c975bba8859c8979a1faa1011e01cd34998d3822a249c6a2cda3839c5834c181b02b8144a8a09aaf277a29fa263b9d2fe2130acc9b + +COUNT = 542 +Outputlen = 608 +Msg = a7c6d74c265c1d9c07848410fafd5b01 +Output = 0551654cbf6ac99a7b5afac0494903a86861bb879d3b4fc6098c5ba152dc67e3bb9f8696c92eeb16fd9cd1e2b51ed1c0c38d138faea7b429b685f2c0f0ac8deade3e8ffadc450eb8c422edb5 + +COUNT = 543 +Outputlen = 608 +Msg = b4396e7697fa2e6961ee9b8816d9f857 +Output = 73279b248d4c9209f5605714a8b831427db9b438ac06ba56668eb3a708da20961aae24a0eb326ac659831108fa69770b8647076be3e8c13645c48e4617d15a9f5bde51396f46c43b701f30ca + +COUNT = 544 +Outputlen = 608 +Msg = c37c768af6a6ec8a11496340dc60ff11 +Output = 4ec819caae4e235e1544e4bc8a85f9a034717dab307344fcf813558664afdddb82def5d0ee1ad2a416ee7d7c9d60790f6e4ab763c76facc28e5506bff7f95a5ed99f3f85e282d12e6078ad2d + +COUNT = 545 +Outputlen = 608 +Msg = 3294ea26ac9dab8eb11202a93f097b64 +Output = 53a98dc970ed4c0ac24ddaad97d4176af0cd395cca2f2362f4eee38b5aeb4c96c96b001756a43f302595a1750de079668c1d7191a8e18792603cb150221cb766aa290f6a5fd7d2b7d3360893 + +COUNT = 546 +Outputlen = 608 +Msg = 9ae717ee20948b629be2a642a11c555f +Output = f1714031f50b10c0c74d5ab172e95c81cab07c16c950e655146db4cd9ae359d1b6cfb94de245cd166e619a6f8e2a013b746355954222d7d261b8070bf7af62ca84d55d6bf997831314fac509 + +COUNT = 547 +Outputlen = 608 +Msg = 77a316cab162cff862e7bef3569a380e +Output = b6519f1f8b4a2fdb2e7f094ac21bc9429b4da9677032edd4c2eb4b539eb087c7677714bd7740e381a1589e9d956672a7e1838ac06f97fdca31d37573ad7617e0db98a7f699773799450a2d50 + +COUNT = 548 +Outputlen = 608 +Msg = be9fd5155c64e40570b974ee30498f7d +Output = efa65b675e2fb4129757a58148f09b2097682a5dcdfde8307225cbedd15dfe810af112ede83880797f4f6757f6804d905cd16bb62681b6222c7c60407053e4af6d4b19c4ac6fce2f7abe35b4 + +COUNT = 549 +Outputlen = 616 +Msg = 380ff14baee029db92ba4cabbf9e9cfd +Output = 360b6a6ae5bd9ae31ceec95df42d95c1aa507ef96a2fa8363b21d7265b3006de29cbe04f395acda1eae8589680878391acf57af95dbcd3f322a29249fa9d8ff611b329b2d61156bb011cd4e46f + +COUNT = 550 +Outputlen = 616 +Msg = 80b0bcb1b47871aabdbdc48dc7c86a85 +Output = 23055f7487d807dc67ffb121d0a986aa798ac2dae4d9c4798475401ddb6ba08567ed9773bd37eb2fdbbaf00ccb43ce8b18921a2019918ba2f276767554b6f3ae6ca139e0f64b800f5b506a29bd + +COUNT = 551 +Outputlen = 616 +Msg = 57848d34afd9b58791e3cce8beabc44e +Output = 610bc2244384541c7e3a182e10009bf632bb0ae68c9534e78d2eb020891086e0a102c57bdd9c06dda05a924e2a1a04858f3e5621b6f57f035b882897dce95fb323e98cec3ce36ddbf1edcf9136 + +COUNT = 552 +Outputlen = 616 +Msg = 5d612eaf24c8fe6aad3eb05910c44f2b +Output = 5df1e2a10ec4e43a9e314eab280a9254ee5928eb28664e9d8702a9397fa7cc362b75f287d424640cedfacef5f3e2e753a8990377e1c11b81135b5634e697f77ee2f1b247e636f81ef00225d1f8 + +COUNT = 553 +Outputlen = 616 +Msg = 3551f49ba2842bbd238bb67ffaf2fd73 +Output = 19cc63b55a6b96b04fa8a22ab7c00db7f5252b8c1675a089e36928c5dee68adf2051866a54a516358fbf154bf9c223a588f9c879fb9e33d8cf333a320d78eff3a90a58a4eb7ac000df0f430f0b + +COUNT = 554 +Outputlen = 616 +Msg = ec17aece3369861d0206d1218ceae4e9 +Output = c5150d6750193ed089c5f8a45662e418ed2e5ece896a8ee0675252d986037cc6eccb3d08dd51446a373c8af436669d6810ff6f63f322029cff3e1256b6e207fb5708ee861c99422a482498f453 + +COUNT = 555 +Outputlen = 616 +Msg = 41d9e57421bee79d5e23acb80d539e98 +Output = b70dfc8f38a96b0743fd397813e448cb871823308b97cf73d84413c6705550ab8056152386355ae37bf624eeb4ec03ebbc364fad3d3b5d463694644b7974d259cf4a1aaae9c012cb642ba0c086 + +COUNT = 556 +Outputlen = 616 +Msg = b1f8fb9f1f080221101093b3c8dd98a8 +Output = b8f0e5ad1e743bab0f43d4cf3d1934138f33c5c778f9d249efc11d194fe88c65b58fbf18c47ff972e31120e02a5ff3a3f181b43e5f0975e38115ce0a6748cbdd0aefc864af0bf4e4805650ba6a + +COUNT = 557 +Outputlen = 616 +Msg = 901494dcd7dd930c055f30129ae21c2c +Output = 9db3f8cd0ca5be1f6a689b00acbca931a5de58d629e11602f55d3db1148791104bb234e9e8f2b7d7396065373cf47f8d12f49208413a1f849fab25c843ea01c6a86d8272ead1e3301f89a72a53 + +COUNT = 558 +Outputlen = 624 +Msg = 9e6cf1c497e49dc4cbf2b8e455d2df5e +Output = 441cbd495af810621e9507826f2dc54252cf9381e5e5702a6be1f78aaef61f9ad9a274c02b841c184d3976b4c65ddcd42bdf47e974332ab850cee836483737c3895373e6cd5f313ed2e808748fa3 + +COUNT = 559 +Outputlen = 624 +Msg = ba54d45ae847c088cf8c4c15d0c9147d +Output = dc549f54bf58a3e37d3d98f9e45adb1af28009838f2301a6d024803f49d570bf367516240c74246fb6de7bd5781939bb620e59da45ec8b9fe1136f289f84a3145708d92ac815f6c2eed131f21382 + +COUNT = 560 +Outputlen = 624 +Msg = d7811df03809c864b159e914b07974ec +Output = d293cf5c6205e563477e555c6a864098748ae53b7e4773dbabc4d50b2b369ca2424b1a1f1fb104cf1fbe25876ff2bf69da04d1eff8ea4edbbeb8726ce8aff0ed983416b76218cc2c82e8bb045418 + +COUNT = 561 +Outputlen = 624 +Msg = b3dfb39d5d93bb59f2b9db8216b5f647 +Output = 8d474da9e56603dad49af7e5f3ae7db668cb963b635c63ed92777a14c5a950f163c536054e11b6a6020433d5e9df95f841ed64a39887e76daf8b5e16096bc2d02b7bfa742a56ded86ee7e033e978 + +COUNT = 562 +Outputlen = 624 +Msg = 80ed8806ce20dd7d48558fad24c097fe +Output = 41e325603caf25ae17957daf58608698ae98b878b5951f9a8b6ac451cea7046df9640cc0ee11b5156f619563e08d82cb51ac0a937e267c610d255288b94c6a063356900bca8aed7962ecc90cbfb8 + +COUNT = 563 +Outputlen = 624 +Msg = 8da1ddaedfd313edbcad743db2512b6d +Output = efea6ea03a1035a6d49fd2b07d0112a5ca46efb3d921bec8d49c79d46761b658f813f9e6a4e7696e978e3041f46c67a8915e343bf594f895d4b2df6e38cd60264da3ad58c2757a7c8f9b79825425 + +COUNT = 564 +Outputlen = 624 +Msg = ed85ca41b7b6c8d78abd6eeb78b485f7 +Output = 55991343384d28facc800cc6ab1de2f2a8abcd79971ea545b366ae7efdebf1acbf25b81e20ceeec684038369945df716c3b4e93c8acdf60ddce26236860408104d72d2be3e9ba4c5ea511aebdb82 + +COUNT = 565 +Outputlen = 624 +Msg = d261cabd0e90dcf0805b5534e2e8d67c +Output = 113737dc3e7f9cdcd1308d27e6c9c9ea150f4f99ca2b51137f50e7387859cfa0194c112e0820c6c8653f018fff9be529e6fdb014ab9650a442a4516ad9ac399e68e22d0aa1965b2326ae1e210e13 + +COUNT = 566 +Outputlen = 624 +Msg = cdc4eeb150ad1da6300e33fe9ea8f831 +Output = dfe774ee1cfb5272e95c241c28d6d790699a028ee7c1fab355c457a5f6cfe9f3ad5804b3102ea1c6b5e0a997ac6a76e8c834c9b4fe5bbf9f109322e7bf21452a0ba01f77400a9a20de00bbe41375 + +COUNT = 567 +Outputlen = 632 +Msg = bb3f7f8788ed74f0b9548bfcdb605905 +Output = 1b78d63a8b985abfe65f1c5f338f033bc57cbe74299e0f719bb6cabb2ba94680ef8406aa90fc807880eea4baab02d54d0d43824d3ba7e0a3703375e39e20e53505e7b2cc7ecb3c47a18a0509f1a0b8 + +COUNT = 568 +Outputlen = 632 +Msg = 2eae76f4e7f48d36cd83607813ce6bd9 +Output = a64a34e5dd79c1997fab6b1fb0ca1e7c42b1462fbe8427385cca3d71f04edd7eca815782b52414d27522103f90de786a102b8b585491465d1a99df8aeddb350ea9aed9c26fe740696733fb8239bdb0 + +COUNT = 569 +Outputlen = 632 +Msg = 899a87d074fe3387652cdc2dcc2d7bab +Output = 9c5bae32c016cef44529912576fcd7a2e503835b3d886604c3b8897c9ee78eb7a36d7165737814b47b04448fde8d8e0bd0394b78b08047492b48f3c408246d14714b52d13026ac8ab1847d7ec2bcca + +COUNT = 570 +Outputlen = 632 +Msg = f3dff595bf0fe38fc469e1b3407c4faf +Output = aba28ec1e2852e7b28f0ae4275e622778771eb9549ec704827d57cd54350b79070f9abf0c494a0877302f58f092ed046b3f4af9bc5fcc1e5b737693ff03a5ec40e1a849aeb1878f4408d73c7fe2e8c + +COUNT = 571 +Outputlen = 632 +Msg = dcb8bd1061401f3939033428245350ee +Output = 5ee28159e0c177a2a56b6cb653b476ac8a6c2071af476b95950e314f31288dae1946681eec9679a2acfcf9c9b1014f8c03f77f41c1e6acf477535c0a3c608750bea01d13cb41946733e7dc0df2c0b6 + +COUNT = 572 +Outputlen = 632 +Msg = e891dbd84408149418b5d3448052bd89 +Output = f10a75b535a3542b8e3b1b04b77122835ec4f7baf1f445daa8bf266c50fcc325006331d40e06f3dd4cc612c69c91b9da45eab649947d6494001d7a25cf09769c0f2ac168a1e31643d2ff4bb276198a + +COUNT = 573 +Outputlen = 632 +Msg = adbf674abb096ebd067c5c68f042bb75 +Output = 1f8263f3c52725517c566df4e89fb45019225ed7c7504c7a4a87908c6ad423d219e3790cd696d5ed5035814ea3d9e2c1f69577f5ad73d8224aac8150d657062d4c1ec44d14202739ade6658c002769 + +COUNT = 574 +Outputlen = 632 +Msg = 4d65ca80dcc0df0b1ba48f27847441ee +Output = 573c1d118854106753503fbf283fad35e1ed29b0f264bfef4a01f8837dc7cfc8fb02a6f30b82ccf6c41c962c938616795bda8c50835e33dec86ae7035fbfb9c098754f45620fa1fa049ca5724a7495 + +COUNT = 575 +Outputlen = 632 +Msg = 0db6b578ded2f151ed0f34d9a24bb4fd +Output = 33030f8c04caa8e41dc04371d2fd1baad69ab299178417c77f4fd32a19dd7090e2e024edd5ecf7c0f391fc9852e3b44d3fd400c57fa01aec8f648046606f8d4e2d9f7a52302a7b535bde56de93cc6b + +COUNT = 576 +Outputlen = 640 +Msg = ff557fed91c7ef8c26f3ef431817d2ee +Output = 7a696c7c9c722222a908fbd204f046e2f55ce6a3c7c6cacab7e584c95d8e5ce9219cc555b9c23078579fb438943271a31679f952efb8f918eb6fae893034b0510c088956b5c262f6f9524281e6d68f20 + +COUNT = 577 +Outputlen = 640 +Msg = 449ccf720646401190b02536e6a0bf6c +Output = 8660d7a5d3a44f9890d6c90751f2fadda22b7adda5e0efa3cfe2031cc6b91a516186f3344f298e9a873151b4d1060ff203b1c767e47ba5e004de2a9f726aa0ba9fe6aa530d07c5c53132670989202235 + +COUNT = 578 +Outputlen = 640 +Msg = 9aa172fd559569e2898b147e1ce12452 +Output = 59456e6058258042a84793f14f9474ab07a79372c4ec687eb30b59f478441854cf455c683ffe9763afa2db6c5dce10d06383f26ff63911baa611c662833840b702d42c7921d50c874ae837a0ee3aa3f6 + +COUNT = 579 +Outputlen = 640 +Msg = ab0de5d25eb1068b25c7bfb1f8bdd4cf +Output = a3c58c5fb27b8eef8df1aa3545d9ae78543c2525295017cd9898db2792a15dd40dbd9e093a639c56600cc81f8922c4873c716f2db60cb4bc0d668d88e4ccf38ebf2f16bb7bd30ff7dce5568a67645139 + +COUNT = 580 +Outputlen = 640 +Msg = 00ee04102f7b4bb12c2a902b292fc9e6 +Output = 7fc145f7f0bf7e4c27e7e158cbb1376cce01804fa5283af12fb51f25ef918c0a1dbbe714c78a702b9a9d8e80d727c73fc4b41978bed3f1a4f83a8f759beb8b03e874f6bb029bd22170ba1c71680cddc6 + +COUNT = 581 +Outputlen = 640 +Msg = a882259470d27a0bf1e2d4a17e85476e +Output = 33c70f7de49238d80b55f02e0e737919de2542b2c8891b3261ae320694bd1ea7568dfd3806fc7ac60d6929637ee00c831b3a210104cc4b161d4e85f14aafa1e1ad067274c57249eebc29533495ad7641 + +COUNT = 582 +Outputlen = 640 +Msg = d7f41fcb33e4833d3ee5604b62c5185e +Output = e3812ec3a89ac43bc56f270e7578f34b1998c62f7213ab77b7affcc5ce47612f5bb950290cae9bfc14730c5cc28ea0fb1af314aef8e28c23794e0b74dd900e04abf655123cd3efb0c4c45bc3713532b5 + +COUNT = 583 +Outputlen = 640 +Msg = da9439bd090dfc2eccc1203a7a82c5d6 +Output = aa68baac0c6649f011d77e0d4b149d3912783726ebaa97683532638e6287cf8d811d700f848929bb32217cdd9a9a389f0bf13d1a19c0d97f7b2055534fc271997bee3345a49b530284e89383a9f6776a + +COUNT = 584 +Outputlen = 640 +Msg = 409f0d5343deb8595574cecf141b7351 +Output = 054dbf64f9bf4d0eb7d1d123cc49b0173080daa22a929524dd29b05fd8c5dedc5fce7b3757a779b553448cd1cf86212c4cac79077324ad273ed2c037ad8a3ccd90ebe8f399771213d0b84d2882be67bb + +COUNT = 585 +Outputlen = 648 +Msg = 3da24559d335d128504357c23f7bdedf +Output = c665fc5cb2f2e7ab50e762f99aecf157be29428a8ec3ea47b1076c710edb18419ac6f90a3c37f817e314492341ea41ff130304bb3c35e54c81eabb095c16c007ee703381af7b1e79676c222c4411723448 + +COUNT = 586 +Outputlen = 648 +Msg = 5f9620688c1ab390b018b5d4447a7710 +Output = 67f1c4b7b53bda79d486fd8531ccacf374cd247575b49d45ac22880a1274f514cad225631cf1e6d6b9db435c702d585d32d5dfbd19c0fb896752e017a2332f335bacf4efe31f09efd1d72a5d0d246f42ec + +COUNT = 587 +Outputlen = 648 +Msg = f926be49a3d5ef3e6ac78099759d5e20 +Output = 1b89b49ad3336ffdd944bbf897127bea6f206c49f639dde3f2d063134523b4b7cc7b652f6d129bff6a66ec57d80d4e494c49cbdd40dd7f30134fae193108fe47b34ede684a4beac23b087ecf70bbc50595 + +COUNT = 588 +Outputlen = 648 +Msg = bc8bbf2eedfd937413db47acb55fbe7a +Output = 64bdf6c26d95bb69111ae6b22c20a6019ca1787e1b690eac140114d111573d3a06aa0a4feed03711be27602f26290fe72b34139a511a96524723a3c145af06a256f1bfa952787cebfce330dda0ade1c109 + +COUNT = 589 +Outputlen = 648 +Msg = 086fa00b43e0272a1042ee53566cbb48 +Output = 5b32e5d6bb6d621cd8e6ed1c3f12bb9ab6690bfc2e10c116d90365c2d7ddac5e0ed0004df199dea9e9fda9e93b7cc43976d2c87dc00c63cc2b2fa0f3dd60c4baa0e16731c3f9a98f59371ba1c30dff2859 + +COUNT = 590 +Outputlen = 648 +Msg = d4864e1066c400faed9d69228cb96093 +Output = bb406e05a5226929321dc9d373f54daa6dff6429280633032b9261c62cc763a7e0a6928d759d70c5d7ac0ea9e2e95c583482c01a5fe3f9188d55251be4c294229b4e85342eb11e3a6507a40588f01fb239 + +COUNT = 591 +Outputlen = 648 +Msg = 78b384369b2ea172724aa49f8581f223 +Output = 224c6d9edbe16e2578f6439bf21c925b33bf9cfb4f12faa369aad25d400591da7a5feb56cfa2b57a501a32d49e2d2465763f66ef6a624e274af24d86810dc3e62eedc5742bac7c2802748e2b85e83ab2fa + +COUNT = 592 +Outputlen = 648 +Msg = b5f0d6509034cf5bccad1c8d2edec618 +Output = c86a22a6e2d59f7cee21286eab5d70a04b596000c29dfafc08492876677b9ef3dba2992843bf92e09b9a33f6f593fc082aad6d2f1c6782ebab7d3a9fbef707732207fdfc29eae3bc1e725080eff08fc74d + +COUNT = 593 +Outputlen = 648 +Msg = fc77a08c0593ed01cb086e19f38177e4 +Output = b1c3231dffdaf14651df7cc473d1ca0770dbeba594735eeaa5a2d2f1e55175cb8b724ba54bb88b542c84c32bf3472cf50a35bee66bc33329e754d1f352d0beac9b50d40468c66f698425218f0d4f02933b + +COUNT = 594 +Outputlen = 656 +Msg = b95abac35fd739a6d3612583964a17e0 +Output = efc9eb8de4410091e9bd5340fb1ff99487c4efd096416cd98fcfd89f2f58aa9f3215f3a690f910cb1d22c7614bcf6343a4ce3ff0eba5b206de6fa1a8aca12950aac3f315d557be786d9dadc4901901c1dde2 + +COUNT = 595 +Outputlen = 656 +Msg = 1a9574d5e39a838b59b111a6fb2cba9f +Output = 2bd78b044985d5b053315ccfac08f18670560aa0bb97e323a78b5954eb0822d84e67ea639df388c97d5e8e105cbf56e184bb15ff39efb299a4efd3cc54731adc0f16925b46421c50764e095b83efa772b4ad + +COUNT = 596 +Outputlen = 656 +Msg = ecd303f605ce836531243578b89034f4 +Output = 980e30ef3ec20d065c5bc0217afe380a218d5a8f9cd0d93fadcde1e44f4852c11d1a22d0a00aaf4e80df8e0101f78e1b9d916ed608f0ca09708eb71bead8b43e3880ed9dbffc585891f66f18a3606d369412 + +COUNT = 597 +Outputlen = 656 +Msg = b560ebd7d836ee7d1b0fba532686ccf7 +Output = df1143c0e7cfa2e8d4f0be58e1816d4940a21b4a276d41b318ed7b00640b324bb01136c9b2d1a693e67dca68a7a87505f88251895b6dd2547d2465d9b0fff5b6466b7de6f9cd18740e91da35b7c34cbfa918 + +COUNT = 598 +Outputlen = 656 +Msg = a38d3d173a6ee95fb72f38fe7b451a2f +Output = 690a99982f2d399288db819a84f2b1b37b5269d43910b405220bc8883d52fbe60e124236d0aec89c22dc02a99d9877a72bf36b5485120dd8084e14517531b377164c467a65cb362747590e462f63449840b0 + +COUNT = 599 +Outputlen = 656 +Msg = 1dc2860c36f8a0cb16424598b8805f07 +Output = 04b79a3bb249b910ab21ae6c97fd6a3c364083dc6d9de292e7a1346e61467dd71a95c1b83d197586a9e586dd5ba2351625d1b022d3fb4afeb3b538a7c153216581a9061ef86903cbc8808cfdf74d46a17412 + +COUNT = 600 +Outputlen = 656 +Msg = 297dbc3c364cb0804aadf0d16475923b +Output = b859011963207243659d6a83c49e4c5919bbe5e79a0c9a31981d94262b3e837f8343e0c429c20b568dfa0cc7972e8c26f17ed764b065603e16e33b755cdb37a710d2883ad76ba75f665c66ebe4c671273e2f + +COUNT = 601 +Outputlen = 656 +Msg = 6cfa4240b15010ab3b94dcbce24fdc69 +Output = b790f82c77cbb296417ad88f051471b9f38e4cf43a90ff6076953ab21dd03d0934035cc2ae14842ad89eb02bc071e3d14126c23d45671c2dd20aec1da024bf36f3dab07d1099093c0e455e4def481908f921 + +COUNT = 602 +Outputlen = 656 +Msg = d42a9a2369a7af82b7bda82081b7f9b3 +Output = bfe54fc2d61f41eda65a4271b60c1e393712129b3f5931bf6f1fed34ba3c47c19f221952f13638d48105abe3b44dbd55e77f5bcba08899b0d4bc6a5258e5e2943c8b8e11257ed55bc2e696b4e5e05b912f75 + +COUNT = 603 +Outputlen = 664 +Msg = 9ab4d49d7a2878eb1cd8e761ae8adf98 +Output = c502fd12129e9e4db867893310c68b04fda85501108ee8188bf80c415a92793b9005c32e7aff68c829a5fd665dd66165478d4e16794bf022db5ceec0d8128968a53d404424854d1de06d2b692ecb4d91affe81 + +COUNT = 604 +Outputlen = 664 +Msg = b54108207cb0a9b0b588da361f9af62e +Output = d82c438046334a1d7d47cdad4bf3c346fecf572a7c8e72c9e0fb2376bbd2a6c4fcc8e5422e27dd93cbc5f3dbcec01ee66e7a1f179753b65c573f0cbacede17a727d0cefda1e29894725154cd3f39f2e0a7bccc + +COUNT = 605 +Outputlen = 664 +Msg = cf74770f0fa16711d04ed999e54d5ebe +Output = bfe44679264a09cfb26712dd5f3dbc263d9b0f582b7565124b923564567667151168ac3b6cef20dd53f1db6b55c8f30ce556399fc85d71c62a57cd1ffedf5d6463882d08ee936b394818a1029ea158044c3e49 + +COUNT = 606 +Outputlen = 664 +Msg = 989dd16159e88aa582d0e2ad78fd7003 +Output = 2ec59884921ecbe135dd2396c59508291dee1ad86d83dc4ed71a3ac5650e8bae2b20bcf5fb23d7299d1083c29fb2e503e13158bc0705643a9dfb37ff449b650a4419c49bdd4f737cbec809d71bd7f66f389bea + +COUNT = 607 +Outputlen = 664 +Msg = 08fe984ae6698a19c52a6e36550198ef +Output = 22cb4952fdd0fa8492460517c5351ceb05bafd8720424a6c5aaade3232ef003f1817427031e2e66dbcb3564b2c911cbec7a4d7738204ceb556a4fc270ddd578e2d5ad1d9b3e12adcf7f6e7b43c81ddf5a96474 + +COUNT = 608 +Outputlen = 664 +Msg = ec083a82c1af14caade2d6afb4e5c635 +Output = 54450f356d706906fb6be0d6d88a2b933cd2e2130d76b9edf49045a2037128ac36005330b28676ef1b61fa724a63f41ffd923a6e1c89bf997f823b958113384ec6bf0e3664e40d973f98ccbbe92101c36f47e3 + +COUNT = 609 +Outputlen = 664 +Msg = 97f4ddd3d1695b066c355b1a38fdbff6 +Output = 70621d6ca96be36691cf34d738d271034644ad1e7a0a4ce959b3f69dbbc69de2112c827748ecad24aabc9781b2cded98d34cc8bae901d6bfce7d621c874fe99648fa23026029a4c5ac2169a8bae086ed5a9450 + +COUNT = 610 +Outputlen = 664 +Msg = 7ec904b376ecb972db147bbf79ef0ce6 +Output = 0f233af03ebe37ac958197b5fd2141f93689392aa7d2cada5be572c529c8aee57f0a1036934cadc91afc70d6dccb5c938205880f83a3b7417990708e553f70652375f65bbd21807b1bad65ac810ba9d448824b + +COUNT = 611 +Outputlen = 664 +Msg = 65b08c32400326e6dd416f464c89141d +Output = c6a1dc96f107562d6f06526fe74ab6fde876443d1c9584dd1e10cfb7b7660e8e8cda305fc10f09938c676236de34bd4196aaf5e2c5a14a4bcf798a9cff40450bb4b3b9af8d2f6dfcd81e537372d0d24db562a6 + +COUNT = 612 +Outputlen = 672 +Msg = f9fa5b7feb0ab50dabd286609f6e871d +Output = 25064cc2c0e4093b8d7007230841ab969ef9be256ef06087d36959cb1026500f53ba46818c01ce47a2f9ebdd0433db9af7074c87e846f052e342bad14e9fa7a0e120621fd9c458fb13c66e4126f20bd7f5f76e35 + +COUNT = 613 +Outputlen = 672 +Msg = fe0e26b47df48b854b0b0320aa9b8a24 +Output = aa6a03ee157c0827ad8ee47ad6278ac785936f5192be7faf2c85eead342326f2a791f56c26c276301ef16eac7774b7f7a0fd41785bc1d98178b274698171874f4aa5311105464666b5add8295787cf5f2daf6b16 + +COUNT = 614 +Outputlen = 672 +Msg = f6cb4f2efb487a05adcc5c523239619c +Output = 728e20881d6ff0c864d620fb679b4e3d1dd2be402489e9cfeb82f81bb47b1c04d234ae5f62f6a893a563ce4ae93f28c832c5b988f30cebb66cade5b5c1eea2efb9bf0d8551c5d790ffbba9bd893563551f6e05af + +COUNT = 615 +Outputlen = 672 +Msg = 1d84bbbcf7fe765705746f98018a4ed7 +Output = 66672d2bc224d99dc7b106a86432cd9f9456c6518f12863577d8d2891cb95d187252ec727682906ef17453f411032618828691e7210b01d7f5f184c2e758699500047fb6670449e776427d98cc48f524095f3338 + +COUNT = 616 +Outputlen = 672 +Msg = 7fb4a31e06b42c273c5c931a334b8830 +Output = a44ed3d3656b3f89535304239759ad7cdb5027b93f7b26a0ed143f8fc35363a17ef654fc5ed07f4f6815d1bdfb427b0d324af6a34a367aab1aa9ca9da922e52d04876cb3f488a4558bb37df1cebfce741e263080 + +COUNT = 617 +Outputlen = 672 +Msg = c820321ea329841821ac4b1f3d047b21 +Output = 70a9a93ecfbee007eaa964ae6f305c78947a603192625b97346fd58f7d061462dab9fe6e7201b477d2761eeec7ad95b2ac4df0658c9350d4183eb10b9353d9fea26a0254fd97c45030b947e35b0d4a0305e9212f + +COUNT = 618 +Outputlen = 672 +Msg = 76eab5d61ac50f3fb5b347d38db5ea34 +Output = d7146d6cfedd7fc7267b7488e2111c5b6e768e4e67c3c78c10d6f4074daea55cf0c7917c5b738c2bd78ffc0ca9097984b3b64d4c11ba047aadbe4fb30771f37bcec703c4f533b3e02a8d6636efd161feb723f153 + +COUNT = 619 +Outputlen = 672 +Msg = 9b81904bd4bd65759dcf2980bbf769d2 +Output = c689d4103105e054a96858702a78f8057d5eb3f3c999c5839fa8c9f4500203b89a3e56f3687ffb0c30315689c39cdd033a6e736edf9158e433e44d944a86926e5eaff3f049e922e4fc07d2c15092bdf1ed978c50 + +COUNT = 620 +Outputlen = 672 +Msg = 654464ffacdaa47acc09a9f10f84abd1 +Output = 10afd4e9f29a19f3d7f16a11082825e49a5f7ea2502d0a5b28d4a5e924313ad05d9a8ab95105b60f72d1f9a4449f6868924af86cd652ad845465c244db14ab5b480800bb8ca09c8fa12ac22cd7849631f4c1656f + +COUNT = 621 +Outputlen = 680 +Msg = 239c34537020ac1fafb33dd3a6d9e9b3 +Output = b7061ccd958ff0fa53e7693c4f1b3c649bfd1bea417ff0023f6ef24c362612322f1f992ced85b401d587b27cbbdb36e898b31ffccb7e14ad694cea5d26970a67dbfa59023b7f11e84ce8106948e7dfac71e570152f + +COUNT = 622 +Outputlen = 680 +Msg = 718b9d3439409930b8a8f1b8b14b9e32 +Output = 35bd83d4f10f12d337d7bff45a4618d2dbca77918cd9a0b05ca38baa0e030f656ecc719a1b1fadfaa55b06c5cd7a14777a0078179203fb98ebff1169476d86d13890cf92c7ffec33a04fbb7f0f57e99ea178471cc1 + +COUNT = 623 +Outputlen = 680 +Msg = 9de2e6d4cd87952bda691c536bde8401 +Output = b2b2739f6464964b7b32718dacdd1e917e9db46de6918519359b39faf4628f82d0f0dfa518f6a58ce0ddece317eaaa9157e619005c8b68c34c7241e823f2fb2a0d25944de48cc29611ca534e0110329133f8f45c31 + +COUNT = 624 +Outputlen = 680 +Msg = c020076f4e187750544f3ffa98fc028e +Output = cd88d10a837672f0a39b616880ff3846faf9b20d6e3495750a148af06403b6435b345afb3fd1fc56202df9788086690b67c8f2029e6c32d7b94c7a0154aa466a296e6f3b348d75fef1d4820753fa3b4315b43f784b + +COUNT = 625 +Outputlen = 680 +Msg = 978aaeb400f5b60222a796c106d6bb7b +Output = 0a674da0f0c48301d9703014f2e7337176f26fbe016380f3814ff7946057bd9ec16a3e589022f5b2e80ed32157db94bc24c0961c4ed0fb9accbb6d810f66b2bfd160854627dba674c858d59980f993b53a1e1050b9 + +COUNT = 626 +Outputlen = 680 +Msg = 9ac542038a470906b371d9ee376f7d65 +Output = 325e85390bfa7d16127902e72107151ea5ea1b090c3de9e1ce4732a3a1cf5bb3ffc8a8401a48d75c313d0b5373968dc2189d3365a412731e70114fc7ca7ba86fd2d0568c2d5e4a8c5d503a873591b2334c8cb97ffa + +COUNT = 627 +Outputlen = 680 +Msg = 9f59902a4dffcf1ab26fda21692c4060 +Output = 591d339c9cfd8062f423cd561acf930e2d1486a9838107d7046b8ee80fa2216b4adcbf77164f022d5508498846f1ec76cfc355c65057fc9372fdb5cde94c24935535fc1ef5bbe4fb39a215b04c8367c24ee69e7a8f + +COUNT = 628 +Outputlen = 680 +Msg = ed411f69891bc41fb9dbd242a45ad502 +Output = ee6be928db5957ea5b93825ce93f0b7c8e67dd6b7caf04aa98b3ed93a6a40abafcd8a3cc424fcfaea10e8022fdc99dc164a514af7365fabe5d7c8c7ade6fcc17a2aeaae5a3af282cb9a275e22d235d13c0f2ea6a8e + +COUNT = 629 +Outputlen = 680 +Msg = cae31b16ad039d2dd96ecf7e704f81ac +Output = b45004370644c1b97a8e1a9991f0f764ae555fa95c929a596038df34870159134ccb8a5d79e467722218b7aea2fc00af586c335907769b2fc9ca958785c6c4605ea3efb0660dce80e08254f44d85295949f6f038d8 + +COUNT = 630 +Outputlen = 688 +Msg = 245783a1944449ed14dc8284d163f168 +Output = ecbd795610d89f353f6aa6e45444e130e6cf099362f5bc079fbea4562c7f5272d582440078b9a39e57716bbb26a65983fcea18458a89db03cc5373d597109007605d37ad0484db73dd463d6b3c07749b37d4fd027486 + +COUNT = 631 +Outputlen = 688 +Msg = c3cda27a5a342506b5650c2324fecb88 +Output = 86f010e1609d6b5953bf116b197807715235c61a113612e4d72a557f16cb562ec658554d0b81489df342e4130bf91dae405e522cac94ec9bab0a085143ab7e69e9b8a7405eaf1f3d187065931c651c9d167838f56051 + +COUNT = 632 +Outputlen = 688 +Msg = 2530c74d87674e732696dac2a134160a +Output = 75dfa7d28fd014e33a767eff1c2823e9de0487bb14c3c0c5b2c8a1e26df0f6d22e06ab6fe623a9ca643ed3431a1a0d6ac16c9d8875f3a8c7dfb98649ef420186c423e339ea6b3a786d2db1a5e4f114f8339220f4250d + +COUNT = 633 +Outputlen = 688 +Msg = dc3647e9f4abf20d5753c27f9a028fc8 +Output = bd223fccea6248d3870e93057f3a52b394f516978650f101bc33b3d01adcccc203642d48e13eb32c69d73ec887538be226acedab48cd398d97dc8a29f1487f3367c0af3c309eb371a4e8e7222c2dd2bbca5d624f9273 + +COUNT = 634 +Outputlen = 688 +Msg = 46dd4243a48a2bfa67c338eb8f9a04d2 +Output = 91beb82e4d27eb3ca460462a5ef4ffbbc1507312f26f6c98a91d3ffad79ff9c984ed18b790fb5f4280026e55ae87f35ee156254d8203e0d2d8cc9bc1bb4ac48737e546f46090c009621ccbde9a67e8b9164add3e2c2a + +COUNT = 635 +Outputlen = 688 +Msg = a263d35c6bac4c37461a4aa30af38db5 +Output = 610d9fc67f912dab42f48609a38d887b14b728d4e934c83b0d74d99a6834b310b0ded64e8bbbb7e1bd39fda574c5e921233d6a05de89963527bc1434ca59ee2da4de5bba6659343fe4d2d4572b1dbef55df93baa89d4 + +COUNT = 636 +Outputlen = 688 +Msg = e583a579c4419c487bec6baa22cc8a4b +Output = 109ba5fa32cab9537b84e2f5ae62d393ca9234f0374ce7f780e7da9a992a2c96c577fb5b37e604bf77e493ebc2ed3ba6059ffed3d83fd823d4a7e9788199950a287d7df302b57de98548ae64d1263d6d6629e52c5d4a + +COUNT = 637 +Outputlen = 688 +Msg = 33cec827126d7aabfe80f558e15f0a4a +Output = 78ac2791ac35889601472d056bb03bdab2f2432d3219716d05a4ba8df1070ac4b3202c83b87a222448c4717a401987cbf903703c7e0dda210f24d92a7dd2db0960c53719133e41f82ddd9ec4f4d551a102755df8b867 + +COUNT = 638 +Outputlen = 688 +Msg = 6cb984bd378ea8a8a8dc1985c998c907 +Output = 6c32227237860b2f9d9bb2984bb581c4b0244c393d26b5d7dece8e89c95cf8ce4f023ca7989de9c0842b380da41dfa9fdf7e6a23104496c5c15893e1f5953cb7505fdb0bd435912f3b98dac47f8331a0bf44dfbbe024 + +COUNT = 639 +Outputlen = 696 +Msg = 2cf70e14140dabe5e7faea5455c781d0 +Output = b7d3d184b0f3733fd4445f0222f3ef8ad87c9ad182a8a4c7f1a90dc03f0ad58da50e06a92ea8437abc3899d30e3a1f37de573bb4f5f6a87393f8fb616a74cd7611b2f12e7796825201dac33b6bc7b4d32913a40ebcf661 + +COUNT = 640 +Outputlen = 696 +Msg = 78102c5dadc070d9a4df47f89a46767e +Output = 366ce36ae5f09eb284c3acd7c506b67b46f66fafeb8838186b28fd5f6b0b6b4bb1513b5b640b5c848c796958da04b1dc004d14833dbc1962662eeecb3ecb66a2b538530896f8921b89e8e61a8584204baba11a1f44d208 + +COUNT = 641 +Outputlen = 696 +Msg = f1a909c2ba5a0fa27f1ae51d5be6a5b2 +Output = c275c0898ebb6615a3063c898f4355cb2c834b9c84c605fa2c6a5d18033a13b6f9fd73ba7eddb6730ac9c2739938b7dd9d9b0f6e33bf81cb9af1138f35d4b31829fc16e061f4b7cd81ca90a7fd818121d9685f25a45df9 + +COUNT = 642 +Outputlen = 696 +Msg = acc647cdcffc06a34cc52cf167a43ef1 +Output = fdba258ea41cba13367cfed0b2dc4ad60ab8cfcbb63e2d9f48fc6ccef9bf0395f670aff3773f23f5df3a4a686bdf3886c4bc5c8b686ce17e8ea22738d4584f8e1404743110c17bf148bc39ad37709bdd3a9959d87a55c5 + +COUNT = 643 +Outputlen = 696 +Msg = d29021c1dbd093103b0531c3c0dac9f8 +Output = 88b412508bac420d17320fc6b4d0df4da7b8bba875e564f2407b0e48da816d8e66031efc2665f61adc277cc98c8c40c650e4a5781aca412980e5b703f8ebcc6ee49cd6f84894a67c32e6451a63c681ceec3dabbcd6e8c7 + +COUNT = 644 +Outputlen = 696 +Msg = 50a24a2318eacec5e998aac56fb0a06b +Output = 1e1bba5ad0c96a53433e93739c9a4201e0c34a328f89c79c1a07b79d0c2159bedd42cdc07625636fd5117e1de5b3fc192a78e7a6d2532db2c8487f167f36dbf7597edbbab4c18ced29fbae63ddbed49cca6145d2055aef + +COUNT = 645 +Outputlen = 696 +Msg = 3dd19c57c6c747e991233d32786ab713 +Output = 67b34180e0703ef38a8e81b6cb49c28fecadf90c063d7ff9a35fb5a7213507e0593703d9dd0c3169d5d5cc7fa04951d9c7c2335cee9429c306267c31b8d4da40f23139cf6e9a8597348dfcee75be3265552bcb5221f964 + +COUNT = 646 +Outputlen = 696 +Msg = fe2921fe883d15d432f315b145044341 +Output = cef0394e00cb6ab771bcd0534d91a935a49868843e4640e4dee17adb5b0c2ae3d9e9d071c4ad9371d72d960991f321aa855ab984c8a2d2cc7ed60d05a7ed17446c12075f39ceded7214245fee9768b92afe686b8fb9c07 + +COUNT = 647 +Outputlen = 696 +Msg = 5b2d36153588a96c64a4971934f0c2a8 +Output = 666918623581f7edf7a039ffc806f640cd4a162c7f5c2af950749ca9c6105a87c8c9bacf500cf2dfc97cd9413308e690ce7a90a9c1555e06c88e83a011b94c1ed5d4abb467b782c4a15eb27f73336389b77b2272f68060 + +COUNT = 648 +Outputlen = 704 +Msg = 76ace986dbcae5cca4e670d2d6bed804 +Output = eba326d308c177e0fb5fe56b3700d1eb3c85e380bb3aeaba85185cb9ecac57191c8d7963a4104ce231c7b2b3a6d1f22d9de3e95f9b2523adde74f83d56dffa8d4efbcf91e204ca5b4171b2318e50a3c758d623a8e7b68a7f + +COUNT = 649 +Outputlen = 704 +Msg = a284af2d6496afcbed1622dcc3bfe496 +Output = 85d0c53525cc56f90442c2c60b1db66f6c3cc8057bde34727c4f42eb5b3437828a448a90a92384a677a1928d048d81edd3d9b71bfb0f44475cbecaa2372ba7d5eef67e678e6742b39f855dd811a9296acc6737f37c53515f + +COUNT = 650 +Outputlen = 704 +Msg = 48ef65f0fc7dff9dc7ec83d701c1b95b +Output = a714d83fbb05115c16fcbe215f4b4dd296b82ca6ec018e4a4d0d5f5ffbec4ca98f96265ba89822d6116383ca73191a195e7d377fa41d6118d23dfdc86e3ac2730ca1f2dd05146ebcf288f7c59cb2a3b603efa4a26db653de + +COUNT = 651 +Outputlen = 704 +Msg = 167db66c16e97184378ea7af8e3eb566 +Output = ce68a8df65d0880ec5e997a9ef681e9744723dcb99aecaadd4beb324cb547b800e4fd9ff238c5dc3da0cf28d02892c91e2490da7cdec0de3eae65cb045361c3f5d3785bfb8d471178e437fe41c464cb0146965220c3e765c + +COUNT = 652 +Outputlen = 704 +Msg = 30527d359648617e1fbf04b93f2c9a9c +Output = 272bda945953886aa162ac1f594634dc7bc60c088f98523355dab15741f58b3dc6bef5ceaa77f389da0ae742158c4255840fe7dd8d1b2efd11a7cee3fcef1fea69ed64352077622b2e04a5b5b6478ba9b26580274d7d476b + +COUNT = 653 +Outputlen = 704 +Msg = c0bf6c1400bf6c5a9fd0af6a20777c02 +Output = 527f7ab6f283129208f3541c924d53b600cdedc3378c2f63d78c105c03c1993babe0c2da74631d17814f068f25c511385add940264454020100bbafcbb0299e2ccac4c15c41440981ea954f537e21125a7f3eff3e3af5da6 + +COUNT = 654 +Outputlen = 704 +Msg = 7bbcce4d1c78ffc7c5801e067568be5f +Output = 381f591194112c920bd965d63d70cd516793e0668f5056d0ac735b625e210466f85d174910dec7d6facf7a6cc42d04fa786afcab8773297e4d9610bed6dbd79aef79b3ce0416707e9790b75386a67d8371f6caccc54a661c + +COUNT = 655 +Outputlen = 704 +Msg = 3d362300ec4cae350901b0130491beea +Output = c30a95d7a2b3998226b68839b3df6df3b28d6db9222edf748ed1bd1bb8936a3c5afc8429c56a86990a69a4f6d0f72ec7aed57cb72776b66ae776dd87afe10b2dea44158a7203f45238d47142ec8d955d56e3b93e2eb157f8 + +COUNT = 656 +Outputlen = 704 +Msg = be0cf188e0b126bff77111b81d13308b +Output = c65a6a2cd998915072a0d9486213c7f35bdd7cbbe72b38cccacdf4335a637698355e55e8081d4a476c60ae58f2c2dc102d5e7f912670582ec076e73ec9aa127da267b3f49d4fe9ee517c2a2e1bbf43c379367609189e1299 + +COUNT = 657 +Outputlen = 712 +Msg = 9bb1e1693f613b5c9aeefb2a4bc9dd67 +Output = 913aa32803a6c6b6f6cfc10e01335b4abb8dc1fdbfadaaa0d5dbda064024c99846e5ad476c8c689914c4b6a171f4bf12dc95bfecf533a120c5f655c641e92916f871e8ca35b28aaeb2d2f1e3ef3f3b2217b39ec56de3a243cc + +COUNT = 658 +Outputlen = 712 +Msg = d245db39edd2d4b29cbf614d3ebd00e5 +Output = eabce272fd8daa160475e886f48f8f3db5ce5d2bc36fa2ce4b263c346d3d702523d7fc9e2b9857788fe31856c7aa4989b554b29164c7b3f1c68a350c936f6e22891638919208b5d452c325e181a1e65e1992cac93d2b16d0ee + +COUNT = 659 +Outputlen = 712 +Msg = dfa21e90fe1598e7e1f1b8ac6430e1c2 +Output = 607371bd8fbb3de03d347a2edd847e0c882ecda97a6cd9926869a513c68f89b59aea1816e1b6cddbccbfcb2ad3c6fffe635070e59bdd48be32dab5a4ee824657fe6373a1539f6b3b526758f52c981c825fdff97e7d593013d9 + +COUNT = 660 +Outputlen = 712 +Msg = 162c8a7db25b38089373fecc45a0eaef +Output = cdaec2f7344c84e34cd30c8b72b8ceebb406ce3cb92f6ab9fac44bbd82e0ed5899ee460e32c23ec6b0417882dd24eca3ad3ede0885513b0d6e20ff1f30101cb8fa5ec48221e3dd3bcc8d455ef78409161ceec44a3653f15d87 + +COUNT = 661 +Outputlen = 712 +Msg = 0bede5175d695f1e3078d60ca97eac0f +Output = 95b6e7cb9d5f589cc19ba31590bee236a5419e61587f1f2c0106a6e3ef90279d76d2145235784eec5cdc54061531e4ae6b9a75eee2e8085b9d384de98d4a6d5f517b777bad02747244221301d66df481438992e86bbe899e9b + +COUNT = 662 +Outputlen = 712 +Msg = 90d1e31f48a6ae1b75f28b857868ed50 +Output = b1fa3ecb2d1149f28a1ab795c7fac6344cce27940540a430cb702360949854b74b6b5217960a4cbcedc77df6cfd0164d8f6dab6af3a8a16bf25ef278e548ea81baf29afe6758f9a359db1efcf93d4541eb637f239abf23e048 + +COUNT = 663 +Outputlen = 712 +Msg = 86edf88777c0c6848d97378e91677aee +Output = a864e8abc946123d15ca584e947f55c2f4879b9bc478f5c0a96da1fffde7c72822939f706537283337e3061682dbf2e7e9cedb7a1029bd4562844fa1dc5a5d89713b951d52144ab2019221670bc330432dd60a7030aba15fd2 + +COUNT = 664 +Outputlen = 712 +Msg = adf49ed09c3cbec3076f07804695326e +Output = f1b1fddd8e83eec8928ff7e3ff162a5fb6fd7db0239a838e4f8edd6a9596de6fa1ad5a2d6d970afc9f3d80a19fdf7b808494ca43c1671de8cc382872b05218303482306f7de9b0856592ff5236b8bcb1630789f810395034e4 + +COUNT = 665 +Outputlen = 712 +Msg = 4d92276a0b9d796495d9749ab185b552 +Output = 469155b6309d36efaa322a57b06f38c8dfc28dad724ef236de5e1dbfd9916b24b92e21984d79e3aae659c25f8a013250b7dbc7717b86a3a9e253b9b48bc6c9a1a4d3e5eb1ce0bc1f51a45e9772fde8e92e9a6fd3f6d712906b + +COUNT = 666 +Outputlen = 720 +Msg = 16ba82c12f91dd56c22672cfea37e2df +Output = 885ca547b3be364a574fbf80c809e8039270e4210855fc7d9a1fc1cf5cb9738bade939946b9d749e651a86fcfc5f1bfee814e75e99bb87cce1ae334c467c016d2220e79afda37f2cea38814c1cff5dcf338e7dff25880644646b + +COUNT = 667 +Outputlen = 720 +Msg = 82c4d29823dfc33b199bf1cf42b13b87 +Output = 7073b2b20087a495eab679db96c5a4654fa319d59228b8ff3bd7a5e83b3238144501d1f5e08668d4101821fe4a68a69ba3953737e199051ae8a2a7683203ca6f6723e3786a74a98d75a9e7854b46632914a60a945ab70258c1aa + +COUNT = 668 +Outputlen = 720 +Msg = 84281575cf828fa7945fbd14ac3bf449 +Output = 071024c3ba5f6cf1d94e4eef20b2b845c61d7eda5267a2239c01b48a779f8462ece7126330f54dcac7c207f9fed476c89292086db087625473eb45c3c107c29d0069be208f66979674c102ca64fe3acad9c6463c04219da62ed8 + +COUNT = 669 +Outputlen = 720 +Msg = 609eae5161f2ed247b32cbf7fc00ada9 +Output = b852884f25c7985c3ce1bde9fc2f8d04f7baf839ea9b9e0f872d162642d6a7db1007552377cecc084d1c104db7817070f1a2a95fb40c9b593f5e80baa27acf09f7876cd4559d46b490fb482749bdab98fd159a04ec41473bfcdc + +COUNT = 670 +Outputlen = 720 +Msg = 6e49304323eb4e202655f3c8b16ebd6b +Output = 5b5ed1a1618006c887286dde87906a3bcf304c7dd59976be7b936dc69c4368b24ec3d610ed5c3efeb062c359a423c387c5e398bc2498a25f34a57525b3d562b0fb4af98ccb4ab44751b830187df466473591e8179a5f805fc46d + +COUNT = 671 +Outputlen = 720 +Msg = c99bc8c3fbcc1a5ebd12ec3f50f3b9ca +Output = bcd1233f4f6aaea40a9e6a498f3fd6a36c0ad569f108a4a83e714003ff6bac7231d17621046291cefafd4bf81567820d36bdde2c9fa32d6bc455b496357e9c26f9d01779fcf9ce1b8a9c0e0420d0e880e4628cf942b650f14dc1 + +COUNT = 672 +Outputlen = 720 +Msg = c6397920649ecce03f030350ef2b1d82 +Output = a0853df02cfa66e8ee184f4f0e034f86f6d3c13b94e7519f6de592215b233c32eb76badffaed85878d3d03ffa42fb630a94cb6681e1808eb93ff23a99abfd4478bda460fda0e8ce15217ea36e1874b0f1edcbba89f51addcb63e + +COUNT = 673 +Outputlen = 720 +Msg = 2649ca7df44dbafbcc09f6378abd4e0e +Output = 7bd949ee2ac44c91585467876835322986d8633f835c9e519b245cfa0c7674e960085079574f70b4329619a2986e2b49720a4c58510a0f00873ec0d37b4e25b6909d4515ce50a63de498ee3e7ddba3eded3fab5b765734705d90 + +COUNT = 674 +Outputlen = 720 +Msg = fe802e75da6b27959622843cab06ae7d +Output = e835ae29c0c5b3ebd73f0cc016132e89e81c28feb17dedef264b062a2961bcdf49848b099a88af1117838c47a00c367ec9c123169da86906c1ea5c5619f5dcdaeac12a0388c0b59f703ea20d81570ddd6f934aece8a243ba7e8e + +COUNT = 675 +Outputlen = 728 +Msg = 0e2e58e8faad4908078be8c25279f075 +Output = 6195ec783810cb1ef7dc60759a340d2b5864a108416e9a13a0184035218b03ea78f5b42f3870b39d8a17c9b2d04571b10709e0033286cca7d3bbc81800b7c9b2419a87a8b960a6f0c42014de50c95dd2b331b478022b98222f09ce + +COUNT = 676 +Outputlen = 728 +Msg = 9b8f0b7da813b900b17d2dd6e11c066d +Output = b3395cfa98f182210fd3dcd47203a2efea68721ace7bf1f9c33ca88497359f69f4538a3eee304fa89ecd7be78b4646121c8103196d12d558b481cfdb08e5e7bc462f761cc66bcff4af44c3c7ce7518ccd4b77c465be01b271dcc63 + +COUNT = 677 +Outputlen = 728 +Msg = fedce262d788780ecc02443fb709155d +Output = cb39c307d8ae775b5e49340105487797593642e176680c419f662cd966bf14f872b8743a6a59262384a3d7c7fcdacb819ca2116ae42f3dd3d19a90e19062194f0a4bfa2c6f6c06b1b0195fea3ef9fe4c4f807f7e470f88c128ca5d + +COUNT = 678 +Outputlen = 728 +Msg = b766868d7247eb82633ee43f7b4b015e +Output = a34123cfbff9984537c704141e08a4d7cc557522cd3cd615116d17fb9412d9549e19effe65d8ed4cef3551916ae6b5abff9ac34c6bdc9d590881da86d658cdd8c633c051e588c231900feeae4ea336c16eae768a9129fe6e4eb70c + +COUNT = 679 +Outputlen = 728 +Msg = e67fb92aeb1541f1b88c88580e2b0801 +Output = ea3b49e6304543cd1d0f9776819f80893c0850d281fe36520e1d9d04d8fe2bf07b463a99b90bb545f8a3443194c8ab17c5f42db7475f130f12a2658933e9cf76d93272142e5e553d77569ed896a80c5444a4e93c6da86a0e150521 + +COUNT = 680 +Outputlen = 728 +Msg = 109f1cd703960ad9dabecc228b45aa71 +Output = cd6e67bdbff282562ae13d0b5c41c7fe2a53fa1572b31bda57982c3da2ab3a29ee0126072087d7dfaf7efa2601b98e476387ca65abba6772d73414dc8d8ae58fc4b0bc1bcf8dfcba04006774c0490defe5501de032c916b375fdbd + +COUNT = 681 +Outputlen = 728 +Msg = 144ab8edc40c3a4d3069848a634ba9fc +Output = ce638d2d15871f995baa531f62e11bb39e7cb48bf3bcfb66a37376969a4e902ae6fbcfc014a7cb274ca145b50e05a983549b56e38aaadc5f65a84af7309175aee269e0153a47399bbc5f81e43142508630c553131441d6009b6cbb + +COUNT = 682 +Outputlen = 728 +Msg = dbce11dee7ed2a71d570fe2373baf01d +Output = d98f62818391960624b1124aa4a5c49e5520a831164de025ee947e8431c9c3765ecfa59f51e5e6eec6d06cfaea0258627c28b8ddb6945843764b7c3772b589cda8939b667c6ddac8a0b27b7fbac0a25457ffed43c2f3e366c14f60 + +COUNT = 683 +Outputlen = 728 +Msg = 63da3bba88a85eef4d70033fdf79efac +Output = 9146e34d280795a08a77bb9eba4637830543ec92ea21deeb2ae891f2cc79fd1d26da344747347fbb2bea3b2190075ee54a55fa4d4bfe3753535c61aa5e0bbf4a6d23ecf7b7ec345f0c84048106ece621a85862007c13e29725f22b + +COUNT = 684 +Outputlen = 736 +Msg = 63dc34d4260b7cb78ee6fa5a905970c5 +Output = 7963578dbbf00723359a535e6bbbe1821b99940e388f1a4e37cbbd2b8a8f46b690de9cf8983ccbbe38c8b8d45e450a7756345f12693eb1c86dd446180613cf154c7e44c6e1a9c893a0e7a7b0dfe5cb478b182078ac913019e56a529d + +COUNT = 685 +Outputlen = 736 +Msg = 03bf6360606a59d72da6f939808323b6 +Output = 89846cd880222474a17b8d37cf94b4c25dafa7dc2c86e470e1a5bb82e8eeae6973693a07fd58c9134b36e400c9f73979345b547fcf6ae990654903b139c86295783779c4ad399062bbdd9b86197dac9563507d6fe4365e3ec7302553 + +COUNT = 686 +Outputlen = 736 +Msg = 35d0778ed3521c5a83513af12182bd67 +Output = 8e1bc23250b1eff58d8b9af008226533b30656329f799df1d0dfd170a16f170aa91197ce11711b8bb6c3aa68703ac889431c88df3c3865da7ab9fe07b928e0ffb68fb5e6ef901c5c2c05312a1e3d9744dbfc00582776d70acdc6182c + +COUNT = 687 +Outputlen = 736 +Msg = df979c72ed7521c494edb55249e9aaf8 +Output = 1f6f2f5bcf1de8a552d404c2c1c308488060318aa74713b63d559ec7d459e66af4b765e99cc1f101e85963c77375bb37dedb42138cbb597ee7ef8ed0a6a298919b2a9d8ec4263ae75ca204ca89470744da42b219c4b5716a0e928aae + +COUNT = 688 +Outputlen = 736 +Msg = 43edfb5b8f26382eba01d9fa893c709a +Output = e0df6374ae301a38b2375fe82cb0943fe0d804f055d35f36465cccc47d28f3fd39fe3f7f1875bd0c8279b8c053014254433aa487bb2fbc9538a838562b16b271fa45f46102df3ddf26e24ab1ef301a5903dd646192a060437e56f92b + +COUNT = 689 +Outputlen = 736 +Msg = 117e400be459e8a3ad8dea08787a6ed8 +Output = 1bc6a0615443bbfcdf94c0924cc3de74904b57ac53005c86ff95e4631b4e96f0c33f94702cd74776176241d0760934d55b5f1215756f8ea46a3ec5efcc5641bea3661af3f329f385be13f9797a6a60cef86a38e33da6c0337f054540 + +COUNT = 690 +Outputlen = 736 +Msg = d988b2c54a2b2590b4c8fe3a5c2045b5 +Output = 0ce8062f248c13b25473b59424ab87ff2346bc5c9da084e6122e5086fcf65855d90e6b1c67555c2810029eca45ec443bbca912a3002fe9a02b77042d5beac7863b90e4205f4e9ebb328d9a2bf88fd71a18e6e639e76534ae9b49ae3e + +COUNT = 691 +Outputlen = 736 +Msg = c7397340dcb02b06fa43ee8b470eb9e3 +Output = 9718f1361178719edee51043c8c25a759d6332e1ea4cf2058eef225fb6f552fa3ab1fb52a1447fd5b5682b16adca948d98fd7c9b174c197e83bac4c93d7185d7cb589ffe2b49bb9879c8c25b88e936febc0540be8dafdb67ee9ce9d0 + +COUNT = 692 +Outputlen = 736 +Msg = 79ae98ee9cb0877a29b6b66c17e28b21 +Output = da4d1c377cabf0e348e8407055d1b734ab842c2fba1ced7bfee9da12266fcf550400891cdc2e6088503696b84ebe6be2307e7166ad9c9307dae97681718a3fdd4735fcf09b9772199ab8c500991df8884b820f2c63b0535fabdd0e88 + +COUNT = 693 +Outputlen = 744 +Msg = 4543c9e6f06151e865d6b5ae75bff060 +Output = aa653c86a214d56ff993fab200d453556eff2e531cb351031208c1cb8b9a594612c66e06284cf5008a5a45371ecbf92e10ff1706af7886bcac8eddf5042ae6f28827866716a5b1913a508efbc80f5e273c7c17cc17f1e02c5a356b1889 + +COUNT = 694 +Outputlen = 744 +Msg = b6be92ffeac8bde44da35dac3b4b5051 +Output = e6cde5e95e4cc7784ce631189d0814c50045c00372d0b07c0541c7b2010e8db2756e0ccff9b3f10bfe312d4360af39de434c2e4797e39b0ff9ab30a38faaac791e6ca7bbf58ba9ed0a401df73172434c9d47065f314303f82df9b30d68 + +COUNT = 695 +Outputlen = 744 +Msg = dc49a889193e0116eaa195622cab490f +Output = 86918a0e22d4defa3b0d79e2f7bb1cb126cff482cc89592497278497fb2f10e2b857fa602dde5d184cec3ad7d2ef28ff7106ae48f2d2d00e51c7176fe325110949ba12c05faccb31e24bd701403189a21af0d22d57aaf2625383b984df + +COUNT = 696 +Outputlen = 744 +Msg = c17ac143add1aa0248b909e1f31ee855 +Output = 9b2d10c078d01d291c7e4b931df8f0ea21a22879bdbb871dcc823455d43f508b6c94840e4fbd0f261054e19f08ccdc60f7ec62b6b0fa1e5023be1d096434795644ed660d60e638ba110758709a5dfd8673efb8b5812dfbd0d4d3f1f79a + +COUNT = 697 +Outputlen = 744 +Msg = e03e900650a291c12453310530eb764d +Output = dfdde877faf81002c0c4b1517b6201882aeeec7428529a1acda175ccb90ba34e4f200d61db41b455f152ab5a3fe5da4d950c5fe7228bd486abb1da756abd96988723b611ddbba6b00a47eabbfbd7d270f6fffc09600a6ffc72abe80441 + +COUNT = 698 +Outputlen = 744 +Msg = 47e6d70c01520668769d62d3ef3d9e0a +Output = 30fd44c645ae813c877da92633e692efc24d01be938a839b52fc62e2905b6c5f510ebecad428d62025a1686e64f87d3c9bc00e1ec89947f76c04abbcce77cde07b590e03f023445b94530a97ad157b7eea40af6f61a5e390946483ec97 + +COUNT = 699 +Outputlen = 744 +Msg = 4bff8e8f6c673636d936c2e60e0b235c +Output = 7e0ccdcb0b2768509e16f8228748de52cac312089068ca8f8ba47d4ddf73f077000b7a7763880b3efb1af5b16c743a7406157bf7400e43a11b4cfcb3b3a094561fe6fc25e1c6423803f532c700e63a31683909a6eaaae18bbf47f3a202 + +COUNT = 700 +Outputlen = 744 +Msg = f97cd1a658a0e3388d82f8092abf4843 +Output = 872eb59d9d70b83f5d39e7de815b3bce0179b04048e6de9664344d3c64693e6b028f639ad8cc7247fc80abad96091967087f2e9c70dd202717de8e6bd8bd9f17a93928c5c172b98270e9ab41224d8577e60db4978846e54496ca2bad6f + +COUNT = 701 +Outputlen = 744 +Msg = 9fc3be491d72741ffcfd9f799b5344db +Output = f9c53cfb3165759acedbdcb7388d7e63144d65f0c7eae56ec29cbea8e1deb5fb9c70f1d2796c900fe822195ef5ebdb92a65e4f312b588b4cf8b28073a891efc34c9c81c3fc647ba90e598e3f8151a15471bd716b029c8661b39c3b1b12 + +COUNT = 702 +Outputlen = 752 +Msg = 0226e31d4aa59d8c6d2f6d1718898f5d +Output = 4ad124d90504a8e0c4d3c28db36e6d51bbc842eb0da64b4d13d89319649a00d6c44999fcab35dd3d1b661616b4a925bfe81b9392ed8eec1f0017b81d9425877eed43f0753e42e7a15a9c33eb4b96b217d9c9006c26df12d3ec4fc11d5c56 + +COUNT = 703 +Outputlen = 752 +Msg = b82c63b9b7e940269eeb55d51157081b +Output = 7b9d06b952e929ebb1751f58adc0ea1863fd3eee907953cb2a6b47791a33f5b5231552e4b5cb38da4423668f3b9b042f903c9871bc6b2a5a6c10ad38efb7b23e59e3f443042662f47e1239cd2c44905f21ddd07505935cf2a016a1540745 + +COUNT = 704 +Outputlen = 752 +Msg = 4127250fd2738463c4147d299b4ecd7c +Output = f99c7f56657824a577d0e341425a95d9c35793075a359433064ca004ed078d4d363f0d50c5047ad9a7579d5a9e469c8eb200fcf1ddb7690e87d11ed4e5383c334590921c11206f157a618bbde8037622f13aceed9b281b2bd7265c782b81 + +COUNT = 705 +Outputlen = 752 +Msg = 87a65a7b0e5d863d3acbafae5a4cc9c7 +Output = b25eab758604a7c4e1f3d3a435277d12a8a86b61573a2375fb90f2acbb80b84006d8a24acb734cd868f5d04a9e537522c492587276cdc1d574283eae58dd51bbf4636ea328311264e3404488e9aba5c860eae958f80a665f46a9a3b06be5 + +COUNT = 706 +Outputlen = 752 +Msg = f2457c380ce6087cc27c5e7626a13a3d +Output = ad37d7b12741105b2d783d20e29a2fc620aa4f5d39198360a9606842404d82a690f1934ffdc63efa17e57816e0412b93b6ca2a127f0110a37b79255d70d9b6559d655582d11bfd82939dfdeea95c557134b8a93e87af91ce0b4119190f31 + +COUNT = 707 +Outputlen = 752 +Msg = 3c4b7eb4d5969aa664f884f3a117de00 +Output = 7075aaaafb02f5af3591b1da41b41437b64a49a00bea28270c4d8e620c458a765deeea46f318fa3551979239c1413b47daff72537789fc533b95d272c16f8e8580e44b0dd978ae7438cb6878f0a1235f418d07214e5c8c9b2051d30e42c5 + +COUNT = 708 +Outputlen = 752 +Msg = f83d0c37a194599ec17436ce1ce69bb1 +Output = 2cf7d0ba7857c31f8caf57b27fcb25ff1c2b9cd230e79187ed0c714c769aecd8dc190bc18df91d5a94621ed17dbd4b2846eb1169697b1d251ca27ef07c07d62ad7a97bb4ee86a0cbf0f4b895d97a8a45138e711feb612ef066c8887bea16 + +COUNT = 709 +Outputlen = 752 +Msg = d95867886776f082fd694055756c35be +Output = fc229e14f3ca6162113f4e2a6ea9a2af9f7126acc32d798a966da33dc4f6fa231b6cb338076028dd2a1d4cfc9845c9d8d0891dbeca5be6143eaa08ad85c3afe33fe4a0f9ea522eccf6d29b407d8f1fa989d1724329e8051cf151009a93eb + +COUNT = 710 +Outputlen = 752 +Msg = ea8122bf586c0761c478323686b051c1 +Output = d662b85df275e45e42eb7c33015e4d1b30299e798cef08d5ee7d9de3e9e82e702d01f33fb3d7430f99b99fe36970307dd85d42abf025cffa7a70dbf3a0344791d7b1cb452f1a978d08455eb61114203e2b8d2d5d6ae1ef8df9caab3c6772 + +COUNT = 711 +Outputlen = 760 +Msg = 40a00772bbef188010b4b9096bfe0fb2 +Output = e355665cc5d35bd12523cb97cee7718b1c7ca4e9e4c764022b23f1b39fce986a5394a05cd05bcfef0b82b850de612e8268a2fd3dc186cb6d29cd0810af1cbb5617d8822903d42f4995b3579a11dd890a14384085ccad0c34c7dbeb4bd4aca9 + +COUNT = 712 +Outputlen = 760 +Msg = 8e0b06f2020559773b451af0e25de692 +Output = 43e46d8bc4afc51c50a096da3614f7aa0d1a3b6f3ff3d1da9efdfe8076d3db5c06b156e31e4d9cdf5c6cff8b74549af48232c128fdfd645c06a648555c2b094610a06efc24275531b0893d7bb17734a70c12414345227a7b4c47b28f06e5dc + +COUNT = 713 +Outputlen = 760 +Msg = 2c4647ca622566738f60b1e194a330cd +Output = a9f641d7e5e4d0bf8891b7469cd51d7bc1133057c0a114906cee5ea0ac77a7155c53e486d6ec54113abc4f33b12c64aedd79928107ab30f2e46e83c18f651d51e2f6a0efac7e88f5a7d15b2d09091669253ff23777b08910ae4de11b7eb840 + +COUNT = 714 +Outputlen = 760 +Msg = 8af542a4d3b765385a97a614264f6273 +Output = c145081d5d14b30a37e8275730c32febffbd23bae390a339908d8099bba5412d8c0bad0a579c79de2b44d6dbbeff22f42338a16c2e1251e5f9a0f5bba18320632ad9c02f35812237a7525e0c55ae9f74da353d28dba015b665e6728db77302 + +COUNT = 715 +Outputlen = 760 +Msg = aefd329afa04993117493268a638cca6 +Output = dae4efd55b15b0525afba52fe0c6a1ad1a8ad163bad7df596f74a55d525ce3fbbd643a87feaee45fb436cf3bb7378c9f07bcb660b50a54bfd3f9c03272bc2193df3ce166e64e16213a034c6812f3ae15b4bcc8013deae67a46e90b204200e3 + +COUNT = 716 +Outputlen = 760 +Msg = f62de39e0c57636428f5ecdeb59e4bf9 +Output = cf85fab95071106c6416b0fc20ed36e6d0f19ce619134c011083c274fadfa3ea7d394717fbe61a633eb521447b2dfe7b30643c7622e3bf538673d713109e108242df57e89af7bb873138fe71f608593642ac86ff54d4095b68b1767c99f002 + +COUNT = 717 +Outputlen = 760 +Msg = fbcdb8c3679e4075b9b80530aabeaa5d +Output = eac9439eacbbe385198c6639c524c6e90b09050ac1c8e608ed376cf0ac660894e4c24867a19b15c2575ee64ff85f112caa895a579a2030f1a6b052b9c648bd38a7650f690786b8858f0a388bcab6d2fc77ca8ebc06bb17d6ab5a4390c9466f + +COUNT = 718 +Outputlen = 760 +Msg = 516a274984dee209aa7a263b5fb98be0 +Output = b916db19c31e52d2a639b84676b23bb1b570f786c305382fbfeb78915f1baa8b7190dee198810ac0a5856ed800eb1e5acdeda8e0c5b8c5c965f23558fd6d5c6851fc37a75f08c10d5ba603fcee29a21385d6323182016c8a5e6380cb6e5870 + +COUNT = 719 +Outputlen = 760 +Msg = a0b24a038665422b20a499276a504270 +Output = 9f56cab65ffe5283ab19d8dc47b7e66ce267dbdd775f166d7b27878aabba4f92b14ed234788b8811394dc7048ef6e4eff461c596fccc2c72be0fc8ad863c9630cd79ccf53616b7b62e15a55454e54616606f8c53ffff9c4d147e70a6fac500 + +COUNT = 720 +Outputlen = 768 +Msg = 35b09ab700bb7766618a6e99c3b34a3d +Output = 420d9d05a91160186b48802c99e62623eca07e3c153db735ca2e0ebde9c1b97cd0b3b43df95bdc5e5490450926f736c494015e74fd8ecc879b80a3292ada05ebb2a332567140004d00dc585cdf186b42dd34b1a11b7ee5905a1797ff3a92e866 + +COUNT = 721 +Outputlen = 768 +Msg = d0a2cd13dce21f318bf8b428c33e523b +Output = 9f8782cda197a20515a206354215fb5ce3d310307848e6c472ffab1a2663cccaf4ac540874f513f22384d9c821671915eb3a510c1b857db3cd490d0e7f356d9fb973dee568b416402074060c86151a5612c2ca9fc759e1828c68a08838c92730 + +COUNT = 722 +Outputlen = 768 +Msg = e7b5aade78b9b5b8419b98b49bdf169c +Output = f237bc9d1531e56be09dd569fe24dbcb0425d319d01c0a3a8d68887281a948faa25f7e775c434add746e1fd9c2cca746e49fce81dc72ab1a7c8b6ace23dba3f28f3e7f09185e784057dc5be3d9fe09a5defcf7f90af2b0dc09c0256e291b6d4f + +COUNT = 723 +Outputlen = 768 +Msg = f2259981b060c3af5cf57d581fb56474 +Output = 015e1a273921d13aa14a0fdf44300b3c7053a913f1c01893c690f94e9655ae9bf98f08299ca8f3ca8fc2c7a5338edc166c1c414ecc03452337b35709837e53baf05916d13d816fe0ed024e150925451d7e22797f4f7563cdc176f72122a76e40 + +COUNT = 724 +Outputlen = 768 +Msg = 6832b7adaac918587c17258d0c20228f +Output = 8b6c5e626316100d9bd091a23447bd4fea16e695f88c96ee8aabe1f26d037eb344601bc228927febb990ba2d7ece2311ec40fee70907187d872e34d7b20e77bce771f8ffbb809034c8a6ca0e77ce1ec489b469cef85e516cccb3e6bfa770118c + +COUNT = 725 +Outputlen = 768 +Msg = a8ded9816defca8327c194a48a88ae4e +Output = ed7397b2215c6c412bf444b1b96fc55c531aef025c6dd13fb4ab53fcc20c91917d82c8d6710a8d7b4c24d18b54150490e98ee01b4a4b9790d1878810a8392d3fa203b066327c0c67cace3a08c57d0d30b62ba43121d8d715637884f055c55ad6 + +COUNT = 726 +Outputlen = 768 +Msg = 7d3084706027fd271b9cf09c10f5788d +Output = 3814484d1316a06f6ad466f9ca74dafe04cdf7ddb39931f9a20aa036c101f2ea9f8c1dd447ba3eba4d23e5f9f27cc2bfb38e3d123b73d7b8c2f495214ffbab5419e33ff3ac5e6cdc98a6b33cf87afe238dbbc30f08d99246c5a7196afff98489 + +COUNT = 727 +Outputlen = 768 +Msg = e90885359d2d90e26a87873125a19431 +Output = 5c56b158ae664a4c91e3dac83a9133f79c526cc9f4d18effffed446d459990eb05057aecdbab0d73e06576de6ce4cd7414449538cb5308f44b32824efe8039580b3b7b7b6ac32b148b502989cc214401b98cc6454552afaea10f3b9d93a248e7 + +COUNT = 728 +Outputlen = 768 +Msg = b46abe8e27f1c3f2e443781300a951a4 +Output = e821b757a34f90be1e210b4e0ad60a3585018216d54872e614e7f8647102d4e50968749d109caaea13dd5d5486fcaa6b1953c71ad6492446d38cacac908f8f67420d6aa27cb191a9e2ea7a62c59b5aa359cf7d61e550d31876910d87f07a1707 + +COUNT = 729 +Outputlen = 776 +Msg = d8ed3f491ff1eb57f89b90c2eb6395e2 +Output = 521122e9c54a691ff0b1d0821ab8bb4c7c24cf0ea3dba6cddd36654198fa32c7294bf00a17e8cb6c1c747a720aff2460fca9a6d5899a298f184082ce43ec727ff7044c64dbd9a7d20e36652424b3e8f806e818c4da8181d6b35e6de5c5e287291d + +COUNT = 730 +Outputlen = 776 +Msg = 594970465717ec638b1b4662a3d64af3 +Output = 4fdef9fd37b160be0dac8c801c34bf91977acf7ecfc12c3a3899599b480802bc2fb9cf69acd86271541b95716600bce499d5ac64bb557772fdda3b0a093571cc77ba9fd4796b3831fc86e385c2a6c126c084af60a2fdf5194f2dc08e0e522b7fdf + +COUNT = 731 +Outputlen = 776 +Msg = 2ab3a70f3b01836d8efceb67490c3c38 +Output = ca7ca55bf123aba45287268c4050ab030b1415f4497d5fe8dbc5386ae37d24384a2fd6a715fcad48ff9e810c1d378fa70f1503767e9e338e33697206f863dc8015b4d1e9b8f81ddee22aac59d52055a1b0784a364369cc50f403045a1bdb25b639 + +COUNT = 732 +Outputlen = 776 +Msg = 095a4c37e386db92fa0a2e396103ffd0 +Output = a972c62ff5b162006c11504dc86390bebdcc7390a36fd48303472ec827e1391ebf7ac988fd222907d6e8363f7a1e9a8c3a07a4b88d8c688793c7211a0e2d84739c8a0ed10744a06af282f160efc57c94cc48703262f6c021bf7c7ca717107cce05 + +COUNT = 733 +Outputlen = 776 +Msg = c60a221c975e14bf835827c1103a2906 +Output = 0db7f7196eee8dd6994a16ded19cb09f05f89ccd2464333df2c017c6ca041fa0d54a4832a74ce86ce9b41d8e523e66ce6ef9df7c20aa70e0ac00f54eb072a472ef46cf2a933df0d5f9fafab6388a206f6bd1df50b0836500c758c557c8ac965733 + +COUNT = 734 +Outputlen = 776 +Msg = 0a13ad2c7a239b4ba73ea6592ae84ea9 +Output = 5feaf99c15f48851943ff9baa6e5055d8377f0dd347aa4dbece51ad3a6d9ce0c01aee9fe2260b80a4673a909b532adcdd1e421c32d6460535b5fe392a58d2634979a5a104d6c470aa3306c400b061db91c463b2848297bca2bc26d1864ba49d7ff + +COUNT = 735 +Outputlen = 776 +Msg = 0f57c984515f870abd61eae36be9e28e +Output = 0c17a085937ff76d8ef350679d7cc9d7ab31cb64a5f5f7cd71cec3a019b55a9cd5d33dfbe3617b879d6a923dcfd2169b47673dbb275a61ca945c976587007439ff15120ccf636814817b17865cf97ab8b9496dec7cf39fa87cea643cdb7ecba01f + +COUNT = 736 +Outputlen = 776 +Msg = b62cae6c9467bd3f5b9005578113d617 +Output = 279f229ca3d66b28062d9dec470d659ba0551cf3b3859216caf8efe673d33fddcce0c3be71c68297f25b6af63d3035e31d1125562f93060ad4a27529d59da206f29f7e410060b28602b90cf7cc8e0003305b1884e12587be1a44c5a30e58dbb99e + +COUNT = 737 +Outputlen = 776 +Msg = 414701e1cb5de7f86b105462541b245e +Output = 6a5c094c0098672e81ecda00188714db072f9d22bfb0a8d3800f58f015916143664ca0293c650ee0f5d9daebc65705d3787bbe126bb3304c9cc4af4a9080add283e63d19a2ec37ece52cc46fb2f81237ddc077084ecb80fcb2564215307cdddfc1 + +COUNT = 738 +Outputlen = 784 +Msg = 4bbdd6ec7993700d8b3e14749d727598 +Output = b220d2a87c410cfaf64de61394fe36cb881c30c9a5338ab91737dbb8b71d516aa2678e55dc390c418ddd2c3d4d581065f0531f290bf82af3ca586a75f5c8259f4a1f15d253262737c41497f95843925d459b6ef4ae86e2aa9fd182dc954b2ed76564 + +COUNT = 739 +Outputlen = 784 +Msg = 53facdf0e84ce8a7e333ebb99e721ba4 +Output = 18d04d4fde049c159a350541f478e86de0da52921e20be0e0a684dd2fbc4234dc10245d8d86d3909b029d4f6663cf54f9d1ec6a6dd7b8ec115c6a21f87f271d38fabcb28a1fc7e7a04961ce92b11be1a11a3b161eca133e602c5afb64baa9a3b6f8e + +COUNT = 740 +Outputlen = 784 +Msg = 8ac3fe4c529e116261c2f2138dbbd163 +Output = c6072a836055313f7be49e0f13da9a74dcb4d8b1c9875a9b9bacd12c62740496402381020c575b48432d532d03774156e46302b4238c5569b75738e7875042dc3604d4f5e4fc0359cf35c28abb95ed6181f4dd9da758edc5620f7cbf4755a3371611 + +COUNT = 741 +Outputlen = 784 +Msg = e2423888aeeb5238ea996dba22efaa83 +Output = d41783451ae576443c24e66cbc38e152d77a5e7ab837516f79642418e748b0268f8516e8b48b0974e3995e45cd16ddd61546c11d9ad8de41275493f42b2f56e7755ef80a178ebd93585f4a63ba71b11cc118c412b8fc66be0dcf5794ea7ab46084d5 + +COUNT = 742 +Outputlen = 784 +Msg = 59a71d4df2975ba3026ffd8060b932ec +Output = deece278f71ab122d376fc050c6d3eeacc31d87b4e7788e57e0dd7fc1df1431931175313947d2e7e16d954244c8d67a956129ccfe5111dae58d82e2d6da9206a55ae1dbe5fad38b3a1a54364e88fe410c282e9d18d721ce8cb78667fb9525de60e57 + +COUNT = 743 +Outputlen = 784 +Msg = f7b207265f25f1de15aaaf02d910a4f2 +Output = a2201f30d66fc165e39bc382e3bfed1e775323045c06f87fd97644fc06066509837cb7aeda41eb46e60ac9bdc3405c47e32e86b1df0b65a18571e46bd7874f6c7d6badba1277c0a466ba31c8027c8e05f750aa1c3e96a34cb7d32f4e1cb1cfe46249 + +COUNT = 744 +Outputlen = 784 +Msg = 5fd4e5d743263d2a7c25760f525325a1 +Output = 352a82695a98221b5ee3c0a1c9b367f3faf25f9bb478e3f4ac93343019c58344fb1f8fdcc8f749003ab4025b8fff6f9517cbd1c992c09af5e8c5c4ceeb3c32410dbae2a3afb6393fe72484cd2df228e25abce1f7f863e86902116a022ae63dab47ed + +COUNT = 745 +Outputlen = 784 +Msg = 8cc7a0ed29f931ffe2481a03d7a1a0fa +Output = 0c54ddaf92ff0f7fbf52b2928b33d04cbfe828310bba46f6b55167485a6a259ec05878a01b91a325993bb0da167284febd049667a66d0262e6496b0004b997f49b406cfe0f6442aca2d353e090ca63b1e359b1f18c90904c43db24544e6e1367f8f0 + +COUNT = 746 +Outputlen = 784 +Msg = c46c02445f99bb9636f15eeeaa5dfda6 +Output = bc83d96b4dfe5cde802119930397fd19395c310d1ccc6e0907d6842f334c2bb79918628bc988f3bffafdceec39bddc950b26e2e5d73cac96b8f111e89949940bb7ae3671b66bdb80604c1d62a3a0f7358600c79b4ef27e2d8e0bcb586a8901c4ad47 + +COUNT = 747 +Outputlen = 792 +Msg = 3638ac940662a2968b69092ea2c940ca +Output = d21bdb995875d735169d50122f485865d5398dd9c00f8ca44f89f01dee0b338a1b98218c3300c6ef63b5e265a9d2689f8b6b9184b755d1c097a3761113ebe6e771474a92c26fb6ea72c5b09312fe1cad62ed0aa8aeee4ea4533b2244cfac19b286a4f4 + +COUNT = 748 +Outputlen = 792 +Msg = 344865b2cdacf1295972a05c426dc7da +Output = e2d1a4d9def540728e331ab40bce309a82e213889519cb1e36f6d4b97b72eae371122689cf58f74ed0e02205684b02c4baf23993ea020f60376956bfc8cdeedb710bb5f7e6a0e7d5f760c18e1109a209a78d73d0b62bb2d52b4d87e638875e72e77c0f + +COUNT = 749 +Outputlen = 792 +Msg = 7af104d3fdab4fccc673ca1ecbbb3558 +Output = 1032c794b4a0cb50cde2edd6503c05f70902415ed39554ae2449018d6ea3f9f37deabf59841caedbfe2a588b785ff4c6795e7959f0243c09e7b8142d9c2685fb8e14eba8791f3b76ea59951476ba3798048dbbcc8aa9fc4623b5e9dfff9dc7216ec1f3 + +COUNT = 750 +Outputlen = 792 +Msg = 117a53bd0b2e8d4de92d07b664d9ec8d +Output = 9a1b061851945923d9e3708cf478d916f0071e77f02e67e9878a86d2f4431b6741dbbf458939df528ff1d87407287bace42615da3cd1289ab8331db43dead27b2e37e8dbf38be77f9d852b11963f679d37c467d86e481a23d49d8070d7566e2227da32 + +COUNT = 751 +Outputlen = 792 +Msg = 87731049e003d2ed7601dc08be9cef62 +Output = 7ecfd7f4959a4766cb410f7f0d8bc492ca2dc67c0479077ffb4409e9a09d3afe6981a01dfc0e91af4be6c4f91a77db4e850703eb5a6a478f7eb12558d504d7b2daef43b0e4911d0815ad6417d6e1f77500eb5f37dcd9f52bdcc927a9480e7420435d5e + +COUNT = 752 +Outputlen = 792 +Msg = d17eff1382dec06ddbdde5d74eb31570 +Output = 3efd24a72ed0c563c7cb18f7e4c3241c6ada3ca9720bb09e38a7a34e8b73a874613572035b023b8db359993fa3a75f3203b7e43680fc7cc43a33bb46e63cf30fc525f52ce9f0ddde00f2d1456455c1dfe9655d5af40f1f0fecb88df69ee1fe6c955a94 + +COUNT = 753 +Outputlen = 792 +Msg = febef9c519665109a7f05a3d61fdbfad +Output = 546c749e5f2656c4dc946fcc0c5259efdc66940088521891335467b7ec075ffaf9a0d63d76705f601cb5121aa1c34ab33b5789f3d0566ab790efd4f819ba824a5d9d1411a98ff2553fc38a1b0c57eb40109286c836d035713a57f860aee043d5c690ed + +COUNT = 754 +Outputlen = 792 +Msg = 062b3a066ad5ffb1b744ef664ab176b0 +Output = 76d80c00380916abf175400e3df75da83f6347f442b7f5c5641e6f50ae1a4d59e1ed610605e943f7077c42b362226beae1b17878356330cf793c4a9e914192045ac56491347812f411e3316198df06c3fcb801450561db6f030a1a955631c7b80aa48c + +COUNT = 755 +Outputlen = 792 +Msg = 36e979be403888e229c356670b0bf56b +Output = b5ab42cc7df6e2d683ffb420c7495b9e7029540968746e0273680cfa72fd9f53ac4e1c238c121b3e1e906cc118a2d05645378eb549eb7b7e58424c37bb50809603f6c0a2d60ba6df7bf3d3c516089da07d3d2f2355549c9a13371b18ffad95ee19b13b + +COUNT = 756 +Outputlen = 800 +Msg = 50fe04f09df6c01763377f8d24cf6bea +Output = 3e08344e9d7a4db49cccbf8d04f99be0b9729b55afc65dcc8ac3433ac2c9c85a9db96e4d8155e30c29a73bfb46b58ee9c21ed15ba3828cca2d87eddc13d7252cbac494bbc4508df8a16c23956edb40f13acfddd74cb78aa4a16335953fb17fafff80b7fb + +COUNT = 757 +Outputlen = 800 +Msg = c9678b57b7fde91ffc933742ab80c2ea +Output = 972a709f9a65cc30584bef5c512f91afaaba9284d9d9f22403de91ead2b93075faf529abcea7050268b54cdf452931f2c5e701ee84e983eb3f8c8f4d4bf6476b5f97b84548150c3b9d1fcc62bf0836fea05c8f9b3918f3d34a9c40e0fc5b054cbdda7ce1 + +COUNT = 758 +Outputlen = 800 +Msg = 66ef4bc26f210fa7648e1cbcb2455d10 +Output = 627a66bc92bcd2af1f6b2b2bb40860ad0037ae48f20555a4528e2919fb05139c3084df345c698e100481fc6f72ec513d4ea574f78437d6e630a810434ccb0650d68cebbead88b5740ec03d156e691fd295fa76fc15f45c30fa4faf7a8d53aa16a126ea1e + +COUNT = 759 +Outputlen = 800 +Msg = dc07f0e6276a3aed9ca9e6f0bb119b4c +Output = 73244620b09d42cb37034d128ff8ad7bf1fc48769da3bdf7769b559c9a5ee0b4d5d4ad602f8e2dbc73c552664bcd4b49610c0803a3b302740ba194e4e68ecb7ffee7a245b80c267abb51e348b08947ed97a0c30234f15b10beb6cee7664d6aea6c98493a + +COUNT = 760 +Outputlen = 800 +Msg = c6fbaed025a4a26c2e352c5039350c52 +Output = ff902dd8c0ddf462f895c457a8d5906fd374f5eca50b869dd512c997e06ab4f8aa8e0c17985b4ea8f8b09890fbe906e430098815f1d605159f8c97e22c1ee11e8efff3bdb0bbfb00815705628295ca393279e538f05e3b838713c37d4531af4cef75b33c + +COUNT = 761 +Outputlen = 800 +Msg = 3244be36481072120df758c6f66bafed +Output = 43889707c877b78708ea1d7d16f0fd716b8dc0b2693e2e1a3aec5154ec6bfac8cd980e2555cef060c40669cdf2434da2b2f93a4742d36aaedb6595317de46eab7e395f2b3b56b747a852d677d01b8316d182889c6d5b3749cacd48b646fc98da0b3860fe + +COUNT = 762 +Outputlen = 800 +Msg = 13bdc0a26c29559f87eb1b6818b296c4 +Output = c1f181931d3b6b037d98f9eb0e417d10ca972551cb722e5153adbf32cc59d3ea72688735b1351fe7bc054acfc08ee7343f364c1a7a7c1aece71d4162efb348abc0b5e3e43ce24154c2a5c60da639750cfecb6469085487ccfcf76255b41b87b68db8171e + +COUNT = 763 +Outputlen = 800 +Msg = 28c06df4ebd554115f4fa03fe0eda6cf +Output = 5172925f6e53ecfd84c76278e0a1ff50da67c25e049374b1c00e7184a9ad935b7efda368556d898ce41a3dedaf4ec316e4f02c4e256ed8122438fab43f9940c820cf16231b308934b64a4eff7daf532ee1c2c861ec033d15401db4f4da13f41aba80c9f6 + +COUNT = 764 +Outputlen = 800 +Msg = 474384149bd275a8edf219f1ad208603 +Output = 98091e5c643459020f725633f68a2934976325ddf145d1793122703bdbe65277723a1031e789356fac4f57ca2d0e9ae19984096ec9c79dba5ac6817a697c0a7626378dc46be459379c93b67071e6f59e206cdf0d659366af464a5ee7d2b1fc56100840f5 + +COUNT = 765 +Outputlen = 808 +Msg = 941aebbf1d5fb5d2d5aabd422708e736 +Output = 55267229e80edec4d9601189db639fe72873d36e4111c79049b817aa5de6aab0a8b74f146c0fae0ee40d44a973d7dac56ed75343d6500a5ecacde651c9198cc0cda2494cfa13f8230b77b865f2fb1e3585a0a961c3b3df2ba16bd62be17476f12ceb093244 + +COUNT = 766 +Outputlen = 808 +Msg = 767d93830e8a2dace93b9543f8cde588 +Output = 3bac9d64522da9ec59dfe83fd31b55a4d1bb13b47953ba88a28b1f8758daece0d65f45cc53b15518a20a9d7e0a8c722e7065ecad9d8e16f38a62bb8897d956b250c15bb06f9bea0d68cd2f22b6921eaae308366030a8ce13b889f883cbd134f946b8bd42d3 + +COUNT = 767 +Outputlen = 808 +Msg = d76721a62ec03e15ca71d7831510bccf +Output = 9e77b3600e96741830c33114e5be2f34f9082f56ccba8be31b88e41364f91cf2877f77825edf6f98707efe6cf9bf0cf056b6913b796418fe5e1b186ae748cd228eb54fafd2ddf6e1cc0af304522f3c8ec647ca6e9e4497dfa184f3693fbfffe0e7d326f527 + +COUNT = 768 +Outputlen = 808 +Msg = 535e5a7f716d302c1a9c687f79b8a262 +Output = a0ab6c226d17a1185f90f40bb0d8649c8c7c0d6e2c5a87dba8bb059617d0ebdf3330a5c4b8a6471c446fffd97a83131c8dcca89d4583d360afd1f9cec3e0d5f84c064a72f31393b5ee7079d18eae9be71e8da3ad3b16fe87c9bcdcabe96b77630db717ef70 + +COUNT = 769 +Outputlen = 808 +Msg = a5e211822298a2f3a7c528780fe5fe94 +Output = 3dc2107a7477f995baeb27a0c3043d0dc09499e1608361d6037b7ea18502fc913aad807231d5dea7a221625ebde0216abf9f9af7130e02b9fd6077985e33248e9d3a0c1cadf6522cc452f1bae924ff7ceef450d7f72b63320a31032f121ad37278f9961570 + +COUNT = 770 +Outputlen = 808 +Msg = 719918660d97edbccc57f50ed7703acd +Output = 054d82d71e993b23f230836729902a2df897fc8a5c0d5cf1c458b83b0e9365938e3c7458dd75545c127cd4df33768158359aa629c1c70ff84d0532660dcf87979ea8a7c373fbf61fb44b1bf287734a8630119df2566875236473892cef2946b5926402476f + +COUNT = 771 +Outputlen = 808 +Msg = 07946f0b9de486eec05dbda3cbf7f913 +Output = c75d04873e3b604a1f4f646bc95c10970059ac0d36b464a4b2a9534609a0f10e38965d8e1e82c21a250a43c69489253d43e8420e2a8a4f0281defb9e69619dc92c72ee1ea0ddd64a220c719d35a9a7db703441d44bcb3054e930d0ea56971d7f888f3d5aae + +COUNT = 772 +Outputlen = 808 +Msg = 8c9a42fe1f6f5747ed484070048e114e +Output = 3ace1cb2216721f45ed1bd103c2ea9becce2ba7e4f8cec50543156a0c102a144cbf443801c0b89c8045a114c974367b67853987bbd80655e22e51bf6a673720ffd7938b62e9873fa170aee3162944a195dd679c39c2627a7f7ab92296c09248cf7a088db93 + +COUNT = 773 +Outputlen = 808 +Msg = 850153403ab7f3546259018cd4efb64d +Output = 1f215477e35969dfd5e37a9deeedbd6d1e62a60d48f711ce588ff9adc5ebec3b10cce7cfba7a0249b82191e6f722dcd2e1e18b9b9a27f8f132781f62a3d8a90773b5c68c2af970b5eeb2a0cbfca52bb05f1d5867e375e5ee9cfb441992f16a5ed341194cfe + +COUNT = 774 +Outputlen = 816 +Msg = 13af457098d20013733c1712f28df929 +Output = e5f79a7167dbbd69bc5b7c767860841954b5cb696fd00656b390e4cee28f3451ffa09e5f1973d4674538d40c254058804cb572c31d606ac42604901bcd8cd4896faa01fc6a61a52cfa61012731c0e934cc7f31567b4db332f84e0849a632811e3f8236554beb + +COUNT = 775 +Outputlen = 816 +Msg = 1ebf94ded5dea49b0e224e80fbc27a1e +Output = b10d26a03b57ffe8267d92e53d3d7a799a46f758fe507e4af6b09f0ae4326dc8e12a6a05eee2bef1336e13050a720c136067d76d1500eaae3ec835d4f06c79ef1dcc5c1f6ebbf5536714ed1983623a135492995d851351b8840fc27f486c28bcb9457fbb33af + +COUNT = 776 +Outputlen = 816 +Msg = 22f14d90acd941f2172dc90803183774 +Output = 2f92f3d218a54689b85b5f0b2dfccbc760be1764179703db424070978b3d8f94485de2934a7781ea79b550759c099746430ce5fff10aec1112c06e35c98ce1038d6d42ed1b7bfc3f496e45506ba758ddcd4b74765bac13496488c0621ed79efa45af659b8205 + +COUNT = 777 +Outputlen = 816 +Msg = 96ed480399f44039e3903b1232580a76 +Output = 0bace09d8144b94e236f4cabe2c468bc3130cd836526c4ba6ea389800dbbcb73c12738ea94b38f28a7b5551b141db4ef619e54176447d89f7b908b4dcdf8a2d03b7c893ec8dfb6ac6343713da13e67ee14ec7cff6bb733a72e68f802e7b71dd3aacb12e2b0a2 + +COUNT = 778 +Outputlen = 816 +Msg = 49d9102276d0f4642b7fb8ddb25a182b +Output = 1bef499c2d04933883235817a2ba23ce8dd918803b647d1796d9e47c724f5a0ddcdb248884a16dcc4eb4e4d584d8ddbb9230fd39c5436657230d8541d4152306dea4826cb55a8c6792b8c0fbe006ddb818b8535294b2f875fe7ec6e5d34c6941de500d9b61f4 + +COUNT = 779 +Outputlen = 816 +Msg = 9454c9c1832f83ee2318b0f0c95d761c +Output = 4eeca4842f8303e3518939fbf80b8dc123704407087d6f3e7589cd49eaa5deb34e95f778ebae62b043b51084ba8c954730ac68b09525886034ecc7f2860fae169d893c5ee025e753dfdb105f28ffe3a01c8b0e5f86f6d807316e52e870d4700f1347551e6ef8 + +COUNT = 780 +Outputlen = 816 +Msg = 1b6ac54d9af64b82e9827cad693dde10 +Output = 2e89dcf7bdd1303583aea92dda6d74ac4b3b62b534b17bed75df2ee5a24d2cf284f6fc54f83f121df396edb8d0925d8308ff9378016774165a90ec338450e9ffe979f071b499da31847f23c31e6ebcbc81b81ea508ba7450e88b3a2d1e48fcd57edcf115a906 + +COUNT = 781 +Outputlen = 816 +Msg = 530b34756f7cd9e9350cc8807f3a55d2 +Output = 490c0292d0d84c6a53dea266e37391179cdfc9d23b2e81dd71496015c1b0fba489d2ea1cfd7c10d5c245dd9c60431de3ee6526491f0ef8af0afd4afe096d03324832f5881c9db92c3c07f20b66315a4b8305ff563f81095addd64410a6281cb1c0d6f11626df + +COUNT = 782 +Outputlen = 816 +Msg = 126305cf0d7022ed92805181bd90affc +Output = 70de3c25e0bb4a3f4fe2ed1cc5b963e290d7e18c16158ff9f06d1d521b6e3deb8c87e0a9be5e8d5c9b97f80ba1c4b3da4e40d20660b7a339fa7c11d145e07e392e795b83fb0d4d16e5759173d031cb19e82ffdde8f9f1ee345e8e0dbb8f9450c7a304f58b904 + +COUNT = 783 +Outputlen = 824 +Msg = 3dc12debdcfc756f81bf57864883fefe +Output = a42dd27202d07e71657ed9c1590ca2fb61f79713e35c4b4f106b6cef8949d804448f0da7336d9264919ad5e8c21f9ef7a9ed57ef77ab8138b98f895932474dc731b7c75a64eeee2e2fe267f790c3cf5a063a51aeeef339983b5133b254f5eeed6cad9a2576a649 + +COUNT = 784 +Outputlen = 824 +Msg = 09bbe68c5632a52835bec9a932876913 +Output = 1683c8f279bc03e1830a21d4c44ff8a005ff663a5a7d4fd4a636b37722ff5f772dcb8b4ec7ba3e3405d6f558c5b5983976b4b7dc273b0f174ab75b5cc95df813e125a58c8f4e5a7d55fd8be2ddd02de52c99074a81c965b32a813be32b949a8dc02573fbdee5c1 + +COUNT = 785 +Outputlen = 824 +Msg = 084fc4394af7c4956946171a9d9f6466 +Output = 2ef0e907affc45a8fafdbaeb0d6b7c5b79c3e9a2fda337fbcd1a25a77553cd18159d94e19bf34a88a2b6869d58fbe38884b709dbadb31e62cd0d1d5f0fafd6b8f47e62c3b2480a9095eeae5581d2a1c3f9eda8251b9ce337e12a242597fa842d4119ab03093eec + +COUNT = 786 +Outputlen = 824 +Msg = 106ed29ffb8e162a9c29045c4993b4c3 +Output = 6e9fdb64260c1571388d3fb69d16bad057e6596784b4af27aa095d1c9fe810de61f39b259d5412ce02f22e64d6ded95f17805766681fcfa1c552d14ef78fd2cdc265c9643270d05150e4d20405f8ad9ec815f777f29fe19820fe78a2ff00f2c4b566bd947abd8c + +COUNT = 787 +Outputlen = 824 +Msg = 16fd337fbfc8c2475193185c0db111bb +Output = 395e0c2e3a799317ab02fc19980dea3a30e4cdb67fbe46be7fe6321ea2278c6aaf182f8d932811d5332da0b8db22bb76df5443020aaad83acbb0aa41492c496ae8532a54f056dcaa7a6510a3e4d3412d5ed56b93749f59eb11fa5d14993f14f5b14c5e7218b6f1 + +COUNT = 788 +Outputlen = 824 +Msg = 6b5ed6aae8b2b7aa3df27829bfb1ab7d +Output = a112f5038d23bbb3e52135cdd8b910624c9fc53bcef2ef38df981412fd34d136cfe164904a741084b6af9073790a9b5371e75501cbb70bedf06c083cfe940dbc531a5c3f7d68ee5e9f12f9e35858db3bc7ce42557efa74762ce6a6a67a13dd7b05e71baffdb552 + +COUNT = 789 +Outputlen = 824 +Msg = 89cad8eedea2096e624caed75cfff040 +Output = 73a780a5742e564715d03a06f9a0e072c83bbec01413108f071c8376000bf47bc6065938c051ab2e1cff1d62f5d05e8563e965632292983f25e4e2ee62dc13f845363131b06f118da1d615bc76c5caa3c3f9776d9ed75b88ee30c897f042eeefa7be23ab99efd8 + +COUNT = 790 +Outputlen = 824 +Msg = 8213056de909def07c41a497d96f87e6 +Output = 966714b5576a4f01ca1e1ce314b0712cd3ca0d36bb68ef0b21fbb96fd164a27173900985a476bcb3026e2bc62705e29e74d671113feea7d701611579bb092dbf79659e9403a6088494dfd76aa7726fb94f9a1d174dd19e0e924ab6d7f718e6e84031f61a480a69 + +COUNT = 791 +Outputlen = 824 +Msg = 68727636ff38c0ba8999dde3cbd95039 +Output = 9b8eb393ffdb201881f2eb7b427dfcd6ba104fc64adcd44c3417c79299d37c0b9431c48e35a6c42ce3ecc8bf5780546e412c5dbf8b8a697e6dc6a8f814d2d7f0e4513388d202a3e86d6308262a8750ff116bf49e4896c8f46792cdce8eaab3a7b6345dc5ce4dad + +COUNT = 792 +Outputlen = 832 +Msg = df476aa202f8486eab12f8aa592d7ae2 +Output = 1c2552a29df6a4a6b4925de9d8fc11a0ddb7fb87c6541443966cda1452f1166b6d57925159a6d9c6ad82a8aba2ab6d3540851f188398f322c8110f42fbf2ee42a1d1870e3fb0dbaccea5e915c291f117eb0a5a75af5beda20dae3a80eb3902cc8e8015eba366df23 + +COUNT = 793 +Outputlen = 832 +Msg = 3c2aa1e2dcac3712bcfcadbae94b871f +Output = aa8997123ca64c7acc426804b9fe39d31cfa66c1f6c1fa75676edef8e652a4aeada79d6d5423c4696f82f5cdc309ce591b2ec831998d42e0129c31abe9cd23df294296688df046d561c626fe0688c48cb3392785ffeaba23ae646879aca823e0dacce6ac4e8e516d + +COUNT = 794 +Outputlen = 832 +Msg = 14d7bcf2511f204ee89d2218591d6a2a +Output = 195aeddf9a049e8ff2f400ddbecc7e58b81d90411444a0d19539114f48f16130f2521302fd00da26acc42be9521db6a23b824db00bd3bec5b3e4b73e0adb861ab05ddc4a3c515d5aa06172c1f95c21778bf605010b26f7b70bdd09c82353f0f5d5c779b98f32d5bf + +COUNT = 795 +Outputlen = 832 +Msg = 65b1854cdd6744ae1eb66561fd6a9436 +Output = 1c0666fc78895eb5cca43b4e807e6eb8fcf8c090645a409e4d157a587a9355c9955e909e8bd223902a87935f6dc0e3fbb8f3eff77640f6d50757e3036d7f82350f5bf8bf82c13debe70e0a4b903fda26a1cfb260e326e99b14671041fbbeb5f826734505a376722f + +COUNT = 796 +Outputlen = 832 +Msg = 6cf84f069bdb92bc3fdffa66d98cbfef +Output = bb89a5377934c323efc5a0c9216cf49ade493a8519d0d92bba9d92bb20b2c85ad1856fbf959c38a339bf6e14db18fd2888cbe63decedee2377621a979c1f01a9cdb6116055402b2d85b932c3e6a8d68a73e69f27758a05d4ae1e5bb9b292767fc5d642fefcc0c86a + +COUNT = 797 +Outputlen = 832 +Msg = 7570184b5f8698c15bc29cce2ba62da4 +Output = e307fdcb26a5688586eced3c4b96e2729a2efcf21cccb4f7536aff595a181d15b9ee589ca4e11d2dcad2415b7517f6313c82e57978a12c9598b8bfa10918a3cccc6d89ebe36e0478a54851c5d809b20c1814117575a19b7a09452600b2115822a0a95ebfbe451529 + +COUNT = 798 +Outputlen = 832 +Msg = 8b4e035d940c79210d8c7adfcf91c821 +Output = 2920751e9e3861ff556ddbd24a9cb428caa9cec21cc26fab46d245863cef79da79f707cf1ac451e95f71bb4e3319201aed2ba1c45cd821367095c9c1e83ee17af65647dc30086ee5173215498f6f881b549bc1a45b6498276ead9bbe0a1bc2b239dfb479afa9965b + +COUNT = 799 +Outputlen = 832 +Msg = d9ca7043ea404b33ceb5cc52cfd53ccf +Output = 6c598c2a3a8fa42303a237c4f4d44fe11eee354f4fca451235e3a7c435014cf9afea02c8116001cefb830226c6a7ebb6d63fab4c600a001942034ca77d432d26076a9f4a67153281f27cfad0c642bed981fcc7d8155ebae9e61b67b3ada996fe94092d4d81325d4d + +COUNT = 800 +Outputlen = 832 +Msg = 44c9323bbd117a434fa51f6ebcce976f +Output = 6da86339a8f519f19beb2edb2f49f1b86f93bd543a055b2df5960cfbcac0373735faadfdd7ca825624c1fe61809b08de6a2dd034882d56dc22d80afbf5cc4e04ad6015fcc2256c9afd851e7ebb9a22c8906cb9709fc9ea27d07866c606f8b9a2a8475f272a5998d1 + +COUNT = 801 +Outputlen = 840 +Msg = 2937174a6a4d8e0038565e0ddf3b622e +Output = 05a55ecef716281d434282ea5029a548c62681affeca3db2ca085bfb44884dc9c3f12589387838d9b25bf5b168cf89ed00d9cb2c4b244cb7ebc03376a9c5994a49021adad8b8b1769db2fc62ae9f7efcfe1f9554b02706081fadaf83908da468b6a627fd9fc784dd49 + +COUNT = 802 +Outputlen = 840 +Msg = 1e68876682b092daaaf3dff595bf0fe3 +Output = e83f0db1bae5dc6fdac59ceeb06d08195f82a77ff2f81167e482a43604f0dc24442819a0f41735cf822ff50898a2554532dd7638c26f8b17a7cc331a9b5b50842e5f499872440411d558241dd561b960d300693fc9a330a873ef38f2865e591ebd8362f677e12e78bf + +COUNT = 803 +Outputlen = 840 +Msg = 70ef2bbde7b4a0567546785fe59009a7 +Output = c7a5835e30c14573fa2530deda44d9a23de7c7b0cf6ff4ca464d2406f04cd7b26e250a53e0073d74a469394b5898d8e565e28e217a8f375a880136f29f3ecd222f19899e83ff2ebe72084647fff90cb1c43c7ac7c9ea9f6421e970e309be4c4725608b4f752696e214 + +COUNT = 804 +Outputlen = 840 +Msg = 8e5b32e2669392f4df60c3d32bfbb209 +Output = 35ed88ab99bdc19ca6afd1f6571f54b9c0f0988012ad3a2897bf9645d646578210de256fd02006f50d78f9c8a30a0bab412fd13d38492c07297f01d813defd3f5fd58bfbf08f74437f68afdc09b02ab3ad21993b57463ad7e61e127567538403d9e2515dbf16d2cf02 + +COUNT = 805 +Outputlen = 840 +Msg = 4bcb511e4deac4999fec18cac3971233 +Output = e332a0b2deec78ef0d2e911efa0df41ed4d9bf44df64735ed090a0e0cad5d907493c434a8a7742a4f01e3156c460ebbe49e9ce1a4518dc53dcf4703154c5787769a4cf2b381df5349972981622464da1e59558a74f7213978400a99b2a1563d443b7d333efb4c8aee3 + +COUNT = 806 +Outputlen = 840 +Msg = 8edda909d228c01fc010357cb54c732f +Output = b52b0d291c060d1becd69ff1165e00056d4eb4dd165d56180b65fb1135b2e8af7e77126ecd0e99885c3ef5c8b619fc8f924feb645055b4411c1f79afdcb13ccc848dc118b8205757c55097aca1ad90f75239cbc87aa6b0641115ceda47b22d3929b183cd6ff40f9b15 + +COUNT = 807 +Outputlen = 840 +Msg = 6e7a7a8106a0842edeb5b0ad9822ce61 +Output = 49a428bbc56e828ebe8a1f18b05b804a84053ac9ea70ed650e882e57555dd48b5b377f4484b4de9155830dfacd9ef51e131bcc6266aed7852169e231373e07116deb86948fecd4626818eb0e04ea4ea15283caf600545a2c45732bfe4abc8ae952892fbbbe2aa59ca1 + +COUNT = 808 +Outputlen = 840 +Msg = 2454964de16bad37d6b1a91216c053d5 +Output = 0548e2e900e88c700bd19eb2d21c24117cc85ff404a96a3683d2b01e293933e683fb8a3cac18302bf5c2fde7177965fe81f56ca790fdcda807bb2883e4a42d13815990b3a23c8977e308bf6e26272f773eab53b04e41a3adf10bd7c5e47e2fa28e21bc7721a545d96b + +COUNT = 809 +Outputlen = 840 +Msg = 432dbae5e496e18fc783925048f59e45 +Output = 513c1928a79340de90759c3b3e185c19ff7287e019c76c23bbb1e4fe532bf716c68a823ff9d54f83762132980d8e603be68c25ee738ee9c82e5df1baed0c7cc60ca2e660777e6062622874ed3a29d4ac2cc6bf801ae84742e17b36828f8ac997d03ee6ca5f4ec3905c + +COUNT = 810 +Outputlen = 848 +Msg = e63b13334669de132c6a0175e2eebdaa +Output = 8b9eea8a21efdf5df278a108119e2c08b5d46cbff8d9da5bd736c298b29817a2f9476d61207831d7dae22536085929548b9fc1c9c934dd2aa953d8d468d99d1ed4706d24ad06af4bede7c8ca476b6b8717c9ae20c850c01df7c9708ea4801e8971dc9c089909dff39553 + +COUNT = 811 +Outputlen = 848 +Msg = 1a6424b778f6ada35c923ffc6b5a460a +Output = 734850581ad0a8dec1e02acff288b53e2f406c6164c2642774d2b019a6763c81506f1d7f9a8d211f3aa3fac10642918553f56d2170462019782a4eb1d4f21ced6ce8fd443e2649182de8ba828cdd3848d40b73733821d09ff920bf3e30ab2f7c1bfebdf3437d6cd74213 + +COUNT = 812 +Outputlen = 848 +Msg = 7dd6c4bd79802a9ce17211f00eb52e26 +Output = 1c87dac73688d4ca43164c921b210f4fdfb3cb317abdd602e430b799b99af9f1d71468cd69ffac3c287132cf87dcb5e09248c7d6d511b5f6bc837743ca941428f2afd353e11aea71c5067967d0383e3f2d703bec1629597f864018797f9676c9a3411a3b61d838f967ca + +COUNT = 813 +Outputlen = 848 +Msg = 6cc4129b570b607e7e6045693419c80f +Output = 13be30abed76d1df524f7f21b5e6c891b1c1ba0a528430d45094c72f5a984684df67476b0ab99d99cdff823ee165e7f86d4a33df5d7a81ad5033e202b83d857af0bc8a100a2b5a5eb2636ba354837f50dcbd0580ae6b2c86d75609a183b3398ac6003fe603e921a7dadf + +COUNT = 814 +Outputlen = 848 +Msg = 132adb15f07596590ea2b832047c37d2 +Output = 7976b6775e078ba641011bc19ab6e4bb9e5bb517eebd8a60cf86146ed5da631c386660f7e44f0d9f5367b873c593dfb63157af640cc2de2b81669b179b1cf0ae6feb0e2cc56f040d277977fbbcc85ebb6a60198c318f29eb81d225d378599c7022e7fb8ee3cd60286199 + +COUNT = 815 +Outputlen = 848 +Msg = 3948d633764cda309eb3483daf13aaca +Output = a07ef491c0695671cdb1f9cc3213a890fc5be5451ceea42481488b691de3e4d114a3a701a19e57f3c570100a4988ae266083183f859100e3d38e30b78e124f06d201397649353a42ee9bd95e29c67c9ff7c9324e5846bb6601caa10218864bf599ac858792a928c75dca + +COUNT = 816 +Outputlen = 848 +Msg = 1a4348eb59ba8b6e2f615de259900a71 +Output = 723882ebffcc92da4163f8757d35b5e2f06c5f3649b8fb9a1391a1475a807913a568a07d4e502aee3e010469d680233b94341159e24fd9949acf6f16e1c138a64a675a6ff2eb8ed4092118e2ba90439b361578ff846ad2679e3b8b14baa3084909e0019ede19e07cb37b + +COUNT = 817 +Outputlen = 848 +Msg = 74f67bc0a547214200d1f1c9ca986f14 +Output = 2161c68a91c2392b35473bc0a56b016c27e57c4a9c8f536254aac0ccf798abaa6451d878bb5269ff0a310eb2739e0b84986d9b060480779da04be73ae311b9a5011cb3f75fe0c0843dfd7f566639512f3327a03a3ec534478ead7ce2d6073329f7677d9b18712eb9e6e9 + +COUNT = 818 +Outputlen = 848 +Msg = 7f173d6e9eb3b55ffd45386b5fcdd62c +Output = 589ca3e4b85aa95ee4d143aa1d33289d6f58e99f94ccd87e4e977a7405b682df0d575b8da49247a4e00d413e98cfef6c627aed24de1acbce8f43b3f05f9314832841828ea41030ef4b3e56730d0b03ca8fb303f54a4ef929e9c807e8af6967e1d6921918ca37418092a7 + +COUNT = 819 +Outputlen = 856 +Msg = dae1795e946fda53ad7de6cbae7f0f03 +Output = a2f54354cf50d90f8cb207056041d2574d5bdd85c6535e727ba2832f14c5f1cccc80d4f17878ca613c4725c2238c8281c3f45cbf5688a80fdc743850ca7a6463960e2c29900c3430448256f858fbd38ed5a494a74c6071054f1a1c9e0e4e3e1e2161a36010446b2acb918b + +COUNT = 820 +Outputlen = 856 +Msg = a29eaa776fdf391bd4fd346c5e289cb3 +Output = f663d052b01108125781e0229bd90fa22e70504553f32ffbdd49f5348f77ed51564b47bc5934fcaa8cfd894e6f798923f4be380f3f18134eb465d6c2e657bbb2fff2d41543f83f494574ebcf36212de3e1d5ad7b2ad138fe80c79e99ac2eeef1a6cead2ad63dbafb134f69 + +COUNT = 821 +Outputlen = 856 +Msg = ad514bd737bd2d037ec4be9e03781a67 +Output = 7a1b28be3910b9b0e8f280a31fcfdffc95aa8dc0a103ee862247448da8adc178303930f516fea613c493789cf4ab4ed8555348b71d89d9a161005c6990accafd490412cea1ee06bf3857ad6ce87674172ff8dff340a66ccf8a63438f5f5c181aad9f70726b1a953d3d29c9 + +COUNT = 822 +Outputlen = 856 +Msg = 38e19a4206f3315b5d457bfd3aab8d38 +Output = 3bbb52d8657fb84f386f5d152ce4f5e91972c431f7505c9c791fb294c752a32903c038f3d596f60010a189b23381e3afccc318033662f654257d7a07086f1d66122aa4203aef798212c2a0fcaa3e3571b7439c911c5c3ebc89b23960cb2582b6014595ed31a1711742c02a + +COUNT = 823 +Outputlen = 856 +Msg = 5724ecf8da9109b898a428939e08db24 +Output = 74ec9ae4e1cb431039d4d1bba001cb22b88c1319653fcb17a2fac28b6a27b5dfbbfa8869e8d349cf3d9cc03c05a73998a10f0bb83e5a54b55254ccbc5e21566d142e8718d1bce6c2a910ae72adf2dbc8a59455b21740be4d9bb0f2fb95ae5c4fcd35200526ce22853d6aba + +COUNT = 824 +Outputlen = 856 +Msg = c0e048e6f9a9cfef46cc86a3d943d4e3 +Output = d4d3bdc941ef3e67407cb9e9cfe3fc9095e21630eec01e5261898c69cd2e6bd51624f77cffc223a13abcfc92f3968d67c327e8f23a0dc3428cb71ce51e9ca5ff0ead6e68f85af45a1a1be1359ff79cf04a388dd57eeb2b2eb65237e7f9e24a0c27e871444712f3a8c6c634 + +COUNT = 825 +Outputlen = 856 +Msg = c0d2cdb425527b63321e824db31f3748 +Output = 495fddb0da4152ecb8aaa136698caf237b90e0fcc6c7de18a6fccfa888b0d9d69ba2723d8c9b6957b703847e83c0bd1dd70e5433561bf36605a4deadc29cd38563495ff2853753c6600a75893accd585703da0ccff18e91675f372c789de0a71893bb8c5e3d845bc1e1262 + +COUNT = 826 +Outputlen = 856 +Msg = 5620447d55f58aa14c29e1fd5206c336 +Output = fc22b1f5de6b264701d85b576ff69db3dcc938cb97c19d142db48d2b2d9c8cb1b7ac613e2e72e316d55c467b77a371c36071e92acd277125501796e1e15264ee2a07ed4b022e3512a202fab366d40c7a0d447d37c943c412cab616b3ec9dbadb2bbe26195ac818f743c55b + +COUNT = 827 +Outputlen = 856 +Msg = 5ca8ccb4b37dfd52863f431aa1dde409 +Output = 3cf86d9495d75beeac1b8a7a5749437f6c1c955b9b4c82b1bdbfeedadb9c37e8869b2a3f71fa26cbe6f7b6d38be51e739534a74c0254e91824a59d53249cceb4009d9aa55a549c62a22009ea10bd8f1f31ce4b01236fbf7b13218e4234ef6c8a17828b0cc5a1502b4b510f + +COUNT = 828 +Outputlen = 864 +Msg = 97755ae0a09a6a6a0d6fd6a8116dff02 +Output = 8fda51bfe61c738597fbcc96a6e61c84a16e36cfae52d0c15c805e0599c111a966842ba825aff51414f13bb458de58ea8a1ffea40ef2ac9aceb18f2e0dc7c83fd1237b03aa800674595bea302894791c27ac9acc17c0fb0f3382861f7542191fe05ccab2bdf4a9555d16c268 + +COUNT = 829 +Outputlen = 864 +Msg = 0b4b92191d3c8cff2d02980bc15f78bf +Output = 3fccf2d4c530db8f92d4d8094a9539a705b86b7d04bf06d765e31883058b51cccbaa1e9ca5c7adffc2c83df67cb5ec779012757a3511613fcabe716305f18949e4835995413a144fea763990aeb1c91f5b35ba7e29d378e7f8a2fec7bd801e7b981a9b7439fafeb4f7f21a68 + +COUNT = 830 +Outputlen = 864 +Msg = af477827c1b099ee305bf7fdcf57b102 +Output = a7c6067b5931e71e9b1275e02432480e1ade37e37fd3be7d87fca9468f9b84af0e51e3af36105c821c57a8bf30fcd179842adbc06b7cba43902e2a5b2d0b60ef47f88e051e66ac768ebaa4bce0a6530b79e7968dc567c97eca47d4523d8d00368736b0a017c6923793d66fce + +COUNT = 831 +Outputlen = 864 +Msg = 0fd64c77822d78a61d266f569279a182 +Output = c117a0b561948050582d0e4cf4b01bb85f5249b1b42c529cdc4fd83643a3dffe7cc2af27bc0461fac043f5854c7fa08ac27babc745c32fdca0fc7ec7e8cbaa8f52244384f6c724a0f5d623e17e0972f69217d936048f4ea6699af8c488fd994150b9c75c956658bf015b4e47 + +COUNT = 832 +Outputlen = 864 +Msg = a5c61c1e7aebf9db7f6920ccc39cc55e +Output = d4aab320e2231efab9f9f9e464f5a6ceecbf37a1c8dfa4d8e96429f5b5b1dfabdc3ee4e4bfbf32e469bea725414fb2e17014973763e7884e91ba3b7608d7f00a0c03efe4d5241e4c1453b3f2ce35c63a59816fddbb83c834b4618d7cc9b86459462f499fa6c0d377e810b916 + +COUNT = 833 +Outputlen = 864 +Msg = 221710ca1c521ea4c3fe7aaf826691b9 +Output = 3a72201d1c6173eb13d15c7b1840c8e3ce8765a96d52a14e2587022b2bd436c7bd7bf8f9c8f77d726d09d832e0177b2f384dc75659e7054cf31035952fe0048ca4dbdf2b336d70adbe754d11beb9f713724161095c7561534e0e142804f7fff6b1d2eee835ab8ca77d638d92 + +COUNT = 834 +Outputlen = 864 +Msg = 8988262b74bde31e5814142b9483a51c +Output = 4c1ff9637e0b6f699285338fc412232b54049f33f0cf559fcb3c4218e504f0f985e7c6631a307bb267fbf4821b42d16c13b0b764aba4fae255695350c4735a6a49d815f1d1fb6471045c4b893f4bd0166d6788ab980c995ea50b90b9a4bfe60c0b683d8bc622a51a8cd3b478 + +COUNT = 835 +Outputlen = 864 +Msg = f0d0c516c8360b1c6c5f8ddf8a14800f +Output = 4c1c47a0287d5cf2221a159abfd2bf7d7765b65b0b9e1cdfba262470f764c0a32141a50cc2035827bb7786ce9e7a85cae97535f895f548a09e993bfaf82dc4b8b29f7f65da04e30b193cc32e2235a45c70c851c2a3d50bc74a6c9a09f5bad173ab34c55932c41cca48089763 + +COUNT = 836 +Outputlen = 864 +Msg = 145b2653d32acb67c6027617ec3047c9 +Output = 4e4154b103f5da35ad73cb9596b6a322470060011a18d92cbb05db67fb8bd45e7f918dba4483538386b141bbeaab7d59bdccd339a4b33a28215bf26649ca12ce921191d020423245b5bdf3323df4bb42c6b8cc21c75ed87884dda5e20b8be7e3f523da48ddf043e153f97f4f + +COUNT = 837 +Outputlen = 872 +Msg = f9ad1bde60a8d7e7cb16c1cf6b713df1 +Output = 6929bbecb69eb1f22dace08e4643f607e65d6282390c99cfb2c40de12e9c8440f3adc72f6a06f44cc88e68097e2eec4e66a3a68212ce87b4e18fd06d6e8bca5c9082cbb44e1362e077505544d5f68485fe83d565ce6158ec7b82f6f37222103825f5e84ab0eb692ace74ebf92c + +COUNT = 838 +Outputlen = 872 +Msg = 4af6fac60e9f5cc9ca5c98feae688924 +Output = cc58d57ce02eacab869a3991c347a105949a72373f21da93600ec5a5b9006408565d40acd5d1c14d0d261b4c61891a572a296dd9b5578d3c9a55a3f09162f043f79e4dab7484621bf7ba8e6f36d5c877c898e972757b958b675b7dfddbbd3225cc1433fd8d1cdff2e8d99bc554 + +COUNT = 839 +Outputlen = 872 +Msg = 7216a825029da1c9a9328d499b3ff98f +Output = c34bd040adc38f1cde974f616eab153eca92c8409ed892881a0197d97c8c99830ec8934acab5f81b73f8c130f37b96af7cd3c8857daff83b903d272880c1296418088f5b4f54e53e37e01e2600a2e6c09114f9d0b17615971cd7a3aef356a598946576c2dc672eddbbed0be731 + +COUNT = 840 +Outputlen = 872 +Msg = c6fca8eac307c0346faa236bea158d6b +Output = 65fed8fbc7748a007c58a1836ad023ec768196d61ddbf464a2669ae2a5096407a6cbf79206c1f48f7dc0253e5573dfbf5cac1ad2a3a30b04c95cbc7dcf835f5a238d7efd7ba167928bd75cc70a772c20b6f1971924ab820b464947449d7a9f8af5b9f3ede5024aa988a8d904af + +COUNT = 841 +Outputlen = 872 +Msg = 9c655cf55f6f81f7424d98dd4f2c2add +Output = 649e69f3ee5f62728aa95fe9ba66d47a1e5caf09e98f2c012d8a710fce4ea83c783bad3437b50663011d017bceb20c7c626574e2b7bc57e4825f307e5b7bcb108b5f19165839ee98187f39414668bf7639cd4cdd2f1ebce7a012a210b6b959a1955ae34e69ccae90fbf27de8b4 + +COUNT = 842 +Outputlen = 872 +Msg = e81158ebede8655732bb44f1ffc419de +Output = 6ec974566a8d02e8eeb87b8b7d334589730e51a4e645b463bb95df06131f696507a4c7a2ccc339823597d9fa3ac920f7a1eda0018121cbbfb8b06b5aa66da090f184c11d262f1fc32942d2732c3cfe63bccbee4caa0091dde7e5676a21c3bf216fbcb7048bc7532a5482e94f5a + +COUNT = 843 +Outputlen = 872 +Msg = 69c943b5aa1856b540d9cf596b57996e +Output = c12ba83a07fbe16502b3eb980fb48bb30cfd18fe8abb937c332504f4922088275e3958e1eda90b12d5cd26a916f7893ea1b52d11a2d827de942b898c6ecd765511aea697e156d4d1b57b9018d161f9c7fd77af7dc1fa981e3a894902c8816a2763b619b18442ca846aecdbcfe8 + +COUNT = 844 +Outputlen = 872 +Msg = cca9f848cd5233308ee63532ac5da3b2 +Output = b669067016fc393493fbc0b79748568f903655c0387b6130db8a6ede11f76f2a9c89bfa1365fa8bf6b69ea0da695f3615dd358436fe81c89720fec5ffa89377a24673fd74ce1eb44c929dc66f2f6e7bd8dac58943b6c443d44c63f5cb677a645627df04812269f6451e6fcc5a4 + +COUNT = 845 +Outputlen = 872 +Msg = 0a5465cf6cf76174f63555cb9b81fd6d +Output = 3617ff610caf33b40672e3e10b0ad2e67036eef170559d1aa74bae35949760dbddacfe60ed1c6eaffd79b7f55d3ca6aaf2551b8e47551134393fc89536284cbeabf2f103a807b03538964b718cb067356a4152c5fe41814fe1d3eea86ece3a3111b51e255482b6548eb77399b2 + +COUNT = 846 +Outputlen = 880 +Msg = b3ddc063481e3d6bf604f92c0df2d9cd +Output = c82868563cac7fcf0bde8c1fc84ac857e81f227ad409d549b3a551db4f3e167a25c0c5f979950da172d3996c7773573f87f419b5ba047fd37b72b2e6f932ed14a79fa63764a3ccebed3be023f7d322ec0e05ec4ab25009937255e44e7c8dba99418ab56a4ff1e67f92cffad1fdb5 + +COUNT = 847 +Outputlen = 880 +Msg = 2233052ec4ffc6bceb5a835bceb0caef +Output = 0d74d2cb6cb0a7d56f1ca4cfd417e0abaec6ac3bf9d181a65e8714dd9ccf5ffff8f2c1fc8a9f898e7bb458f6fc092222f9c25d8af738a23fd7a49706840b12cf306b2bf0f32416d2a344d5ead6cc4f747c8d4801e536a6c1bda4e5a744ac2f4d8c8a2bead5a7e6590effbda6458e + +COUNT = 848 +Outputlen = 880 +Msg = ff389650d4a5c98701e10541c30b7c3e +Output = 6821e1cf2ec37856875f012617e9a38ced50aadc9833bd101f313d277ee17357710ba4f0d0689e3c073fc8a14c70e77ebd43e9c09b923224f9dd7d4815e752810b61f09f069517f0401029e7f737bdeb9e9b2225cf139132a264ae9286b61252fc5c321f7871f995465fbe80a5db + +COUNT = 849 +Outputlen = 880 +Msg = 1167f21de69b7d4456e034d3d2313147 +Output = 62d45017c59738f6ee0974fd5fd14545731c2a7ba11db2c75fd7d6a45e5857bb0b2963e05793cf382ab9797b372925a379ed0d004f3cce006621e754475a5de42a030bcb0c5788b35c9642c6b367d0ddda2ec4abb71f3679f679e3bdc3be4c587bff58c5cb37f3b9b1de72d491c0 + +COUNT = 850 +Outputlen = 880 +Msg = 8fd6cf674624c812bf8679b8e6075351 +Output = 028bf696fc8fe6aed65af30105f9abc050a4122f5221639565462becc6d2175db8746b6cb0685d6e2fabfd241c5c4d281df189d7e57c18e6f58b18b630d69a66ae8f55b596ea4d2a69f5ed608631b9e248d862482bb37e4a8fb819d5839161a96a7cb8c2e151136f9048384bc4be + +COUNT = 851 +Outputlen = 880 +Msg = 2e5d50e50b55f4936e28cc5a734d0301 +Output = 8844598631fc713e0a28c7f13ff2b3487536224b04f3852d24403907ddb93e137ec86aa231a2b8ac47545a36fbd134b2ef2cae9043de49de4ef0e3f5db4aff266de32cbb69a43eba3d6eb4367cc5b81e21436ffb584310810b04e628c59fe61fd85a4a0535d0544f4eaa52e5c33e + +COUNT = 852 +Outputlen = 880 +Msg = e9cabadf84852510dfeebb11c8a968b8 +Output = d7d3e3d37ce458f9946250f230ab9aaf7320878621b69d669a545845ec74a5336c69698757e6b71121aa99d7170d9e3e53e521a6617f6864dd4b1dfd5d2917f2429f9daa6365c0aeafa72b96a1f025f8bfe21c730733c3434a84deb0b296462e0f194a600065613bdb5d26e90aaa + +COUNT = 853 +Outputlen = 880 +Msg = 2f16abfff5b155d2506724d43a160985 +Output = 64949a44df3fffaaec9ea80bc64bcec82671bc648ca354f4e6dbb71de6a6c9a09d39acfbf8c8b76d918cd26f6c0cb541a5b7773156c90b324da460b7687cf47df303b124d85258a5d8dfeb659a36386c6b69a6e635c173a0528a095bb7edcbd399b1d27a75ee81eabf13970738e0 + +COUNT = 854 +Outputlen = 880 +Msg = d80f1434b53f6db3e00c5e1755106ddc +Output = c1a2343dc6d702e12c9aa094df7e8cdad7391a8bd2da2f941b92e592d9ce5fb3f858b9a86535f6ccbf3cfc7dfa558982669d2e3af3b2cd65d98a39744b48ad7e33db35e7cdb9c59ec4ad07503d95890134d81d34f017673de63b5bc24315ebeeae28b9d91f6293766da05065f057 + +COUNT = 855 +Outputlen = 888 +Msg = dc97e13f6857bca492075cef6c86f80c +Output = 025db653363a926ee3da59cc8aba70332fa7e0ccb3d5d5d0f52b7e5b6acadd3d5df1b8751cc0eeec2587a7aa3a5e5c4da5ca85bdce8d1176ff0c7066cc3bb37db9019f8bde34f4d6d937a67d91818959612abc5a269a48121b32c0012bc15853f2b93f88b38fda69d1c243a7299743 + +COUNT = 856 +Outputlen = 888 +Msg = 5260549334240e95e146697b85970732 +Output = 87b4c60f8eea9021ef28c83338282c9c7ca1d36a920894751cc0c6fc53ca5de5d604c18ac44ebd42415a40cb376d70b1415d69af272a8432e7a429b4b0538f388df893f5bc7fbb888c377b7e49599dd66e93429628e10cce95efe8a7593f40f1750fd6fd357e5d08c31f4c83dbec52 + +COUNT = 857 +Outputlen = 888 +Msg = 69573bfa284efb046f8d445c10ee915e +Output = 80de5c22ae25ccb9afebe78c23e53c185201dbcbf8171ddba9c9a4de9b841be850f753fb69c08731099dbd4ee88e46893cc236cad4800ac598b5a602a742e5353b7a90027569386ec6162c3d552537ee62421e532fe17d818a7758b5ddd84b7fbdcdcfc120395f301f11d232f91205 + +COUNT = 858 +Outputlen = 888 +Msg = bd9edbf5e45385dfb47988b3d966f31b +Output = 9f63fc28f0875a7d9ea07d0abf88422ff572a386ee8abd073adf55b05ed5e8af0d78d17f7c63c0457eea90fb666afce7e959b513800599655d9295c48543df08c258c00409781755209f85dd6edbbf8ccc288083641b23918704258006f3c6f0da2e2be9cd5efa7541baa2e56f16d7 + +COUNT = 859 +Outputlen = 888 +Msg = e6ab22da057d5c5c360c8b7632795fea +Output = f365e1c309fa4dba6a356540cc8bc2092da76b61c0466c5c131c93efbaef84b3d2fee287c975929d227992e751984d67365553d83c8cc87619eea0e39ae86fb8ee54409fbb635dff28bc5c9538361d65fb5d645a859c985e6ff076d77610e97369b560b4e2d6cd7c9ac8b1701d3d6a + +COUNT = 860 +Outputlen = 888 +Msg = 5d1e7cf19591197a1dd10bccee4a204f +Output = ab06fbc60179e919d2c978227c25914f3d751d5d27a4f5d60afd0afef9151ab3531cb39bd4b4a0f720e38b1565ac6a6de51524a0f04b0c4377f00c5fcb9bac73297c4e36f014bad206228bfad7c19fe2741b426c46461c43ffe82ef80849e589f83c316748c032d546799e80b0bce3 + +COUNT = 861 +Outputlen = 888 +Msg = 50b3b88928085fdf7f309b52f8953e38 +Output = 94c3e2bb8b6d3fa378feb46e28c7dfe9a18a94371d60b313970070b45780513792fc2748af8d5ab8ec0f1a88f2998a502b167ca795f611d7e49c297e0202d46114b93e6045dee0f85fc2a483d4cfeab2fe1f40e999ee37bdf2ce5cc0c247f3238a66d8f9d2fe07570f35394390f834 + +COUNT = 862 +Outputlen = 888 +Msg = 2ccab02be430118d6dc505e028b60e6c +Output = 00f4f14abc14fcae4c9d630f2eba6f174ace360912f0dd97e9254d790f5784ff6b5f5872ad95cdf5e75f9915d871f26298a4b8c41cb0dc4889a2926043934a302d9563a8726bd318edfbbf690de672cd4ba32d2ec36088bc80774749d61fe667c849fb44e1eb0e81c15de0b7e2a04e + +COUNT = 863 +Outputlen = 888 +Msg = e82f476933f82c369c8c43b9fdeed32d +Output = 7c702074e1b19e31985bfcf966c1f7c65b4fb920ae0b1c50b577c4afb26c5777f710bbb947f326c0337744f20f9e0079c697204f4cf8b6e5a87029d853f0dfdbe33d65748938760a9bc4323c5c321fdb9701be66d4e2db48008e8d5e6f7d07e28eb2f9e44d3c22009ca375b2b59c38 + +COUNT = 864 +Outputlen = 896 +Msg = 7e5be265445f183e8967bf4e8a0a2282 +Output = 18090e3478500089d46b25e082a3ef1ab952b8f179f43b635bc1a5527547a98d840292f953933c878f5d52ba7888962eb493edd1469d6b4bb49748d2d34a7a60f21e2c628df227289d639f2248c17a41e3b1a94a67a92cceb8fc4b7b8f3cfc5c01db4180cea4a521b72b3e2359c25636 + +COUNT = 865 +Outputlen = 896 +Msg = 511af474bdb4c85547d47373c8fb4082 +Output = 50397c1f6d1244b8a3741c1d82dfbe6f9b4357cbd8f3c2046c2ee95a0ade85cc4650873b08271ac33c539ad4333e2a328da5ef2348e6716b34451450579eb06a514e70923c3c7d16b97681d1f88bbc342543d0574f2bf97340e0537b03a06c3f06ec0a8928a2bf1221f50104e1f46057 + +COUNT = 866 +Outputlen = 896 +Msg = bc68ea4257af11182b6a79574bb2e680 +Output = afb45ae47afd8fd788403ffc9ba5c0e181c4e26d576e0619b73108be3ff3586ceda06ca0644993d7e6bcc377ffc606c6c9c9957a8d490bad879f1154be414605130c66f439aaea712d3ac72e6ce67147c73f51b39859578c841f5ac6a46504c7d971dc7580541d0506762fb43411b8e3 + +COUNT = 867 +Outputlen = 896 +Msg = 8426213bba0d11b997aadbbea378d7cf +Output = a5d05d79ccc47dda6f4513b318853ff5083a7f38c020c99a74243378b3f58d7f63959740fe233147a181bd01b301c0deaa62bbd2c3a67752c6fcf571ee5c6be642fbe06ab723158f46b7079babfb3284b6e4f53c8661662f9f9a6565fc5b7f8670e0967af195038ad007e2ea028e4741 + +COUNT = 868 +Outputlen = 896 +Msg = 2418c51840d4a18c0659ca2d11aac3bd +Output = ead10062875ca8ccae84fca71c1115c9a22db6c6104c98c7acacc514c70205f9a724f8b0e70dd41da0e62648bd82143f9b44bfcf35b9016e30a65b2d3623739520f772d58f5285449b553ae093e941708687dbb83c1ef8887f99d6cedd97474a97f6352b5297cae4f99ef46e65894bd4 + +COUNT = 869 +Outputlen = 896 +Msg = b9494c5d50b8a88b3dc834f60c657914 +Output = abbdf0354bd4ff1c6f7382bf7304845156a99a8cceeeb43f68bf053de5778e25b3ef9d5aa1bec8f7630ddab3a0a60cc6e804d4d9c2c8b19bdfead2afb34c4f36b5c991f1974fa3a3ba825534d6c0515fba2591e491b4faf77983acb212de82996811b442e896725e67b151732f2612bb + +COUNT = 870 +Outputlen = 896 +Msg = fdb178ade3731c45d4b74c02edb8a32b +Output = 7aa8d40a76d995344b5f45300026e7aff6ee8eec7c9268b47c607243e1323fcf80d4506a9e3d03c5e1fb58d77a272b49389f0fff3db415016e3571070ba1e47d4f18eaf36103fa2cc9a7d271ec5fb2e1735d329a5fea1be34fe020764ae9e659230a59dba77ec1e29d3c65221fd1478f + +COUNT = 871 +Outputlen = 896 +Msg = 0b7bdd5600f2c20de56155f0a81389b6 +Output = 5ef7e7f88b1b2bda0a3a85500e42351d1aee766d5b88e0422a4ea02dbc32df1a993606635db263a72fedc0823e9d42781809464365c972a1981211eb69bfb1ca76279a201896d8c692b3134b09dd209341a441b0257a96793afe2143d735dd14ee761809fad6dce36ab25089e8179209 + +COUNT = 872 +Outputlen = 896 +Msg = 0b0046b1a74f2cc849fbb4d096244b0d +Output = 299e4c120dee32166f28068609435408bdae7745d69820e1a29505f258dab478095227789028f163e08c0b1e3ef87b9c9d253a87a827dd899827e109da10988ca7eda811cba37497c1cd3b8bcaf6dc12fc9c4e1eeb92a8990890a60a036786ff7047a9b4cb96100b13b478db4283c3a8 + +COUNT = 873 +Outputlen = 904 +Msg = 5de59710a7d3a9848ba30458a3d72ccb +Output = c8fb73f7b7cb40156a0f7197134e2c06e8921f12fb04fe62bc8b7a8764666423ef82a312506428661dc2b6975a49cc7ae0d1a0a6ea0eb4fa0eb94b609ae0a8bf36c50427b4d17fcee199f68def8e3f3755269f752bf689edb73df0dbfcaa013103a950da1589cd6a8fac74493bdca39d08 + +COUNT = 874 +Outputlen = 904 +Msg = c8517c56ab3179c75f4013e57fb670cf +Output = 0324b9fc6e229cb07f1c4d2dff72a1b861a170a228254923eaf7e9b738a790b7f850845605af55d25fe27e12b635a519bcce7e19b2948cfc465901972e6ee6ed203b056b9256d66c301b859d45b676d82da2032e6a7b84b5d00c29fa324c67c05ff093107e567fbdfb1efcd834f10ff685 + +COUNT = 875 +Outputlen = 904 +Msg = 28fe38432ad07e84701d764097e3b7ff +Output = ea382f070e2e7b261530912785f6653ab6063d0fc4ea1b886493b81e9d3464e53f0178584672435906b8e6f788ae4d1c7ac349df26849c4cec24e006737a2b091666448fda33c4f42408a7539db879b30d163ace69f60ac42f2545f1eac02ff93d4f065d05ce236d164419da8373977c6e + +COUNT = 876 +Outputlen = 904 +Msg = 3d449e32c1a302c11eafb4692ab65b85 +Output = a3aeb811ac22c245b03d759068783932140c27009158a97358e5df31328016d95b96714a97c16d3bdf473071e6fee67f3c776d47aa1b5f04c1760fb87a2745426b8fe9bf2fbd88428e063d0e29e25c9fef5a603b6ed7e48fbde62bb847efb8283c30a11a45864c0ddfbeccf7d3f712cbd1 + +COUNT = 877 +Outputlen = 904 +Msg = 26dab5f6ac4a9bd97da7577192144830 +Output = e6280ae64b8a5495019bd49f4288f48020f065c3f6bb6abefd45b0881f9a145cd86d07fe495629ff325814a2f2aec63633c44f3f1dba89c84a564b2b1d5ba1e7dfa914b844c1b5699b724b43ca231fc08da3c9039b5a6898a496f7268def649a97c5576408aeae01fd2220c3662a797655 + +COUNT = 878 +Outputlen = 904 +Msg = 576a91eaa5902b37aafbba5723420b31 +Output = 719296b4c6996e0db1e97966adb53f258d62357748cd5d031de7d8d84bcf4f8366fdb69722b46fb9e494d8c2de01d61286e406de11d97566319bfefea91a313376f252276dd47779123d371dc278674c80ce94def7d250bb9566aecfbf88ecb7fc35567fd1950ddf63cd681beb8ed2ce21 + +COUNT = 879 +Outputlen = 904 +Msg = d8b073f3054980846d03c5a38e6a6869 +Output = 4a82d1e857779cbc5e7df655ca33823c1c4408549af6eccd13c1851c56e6689dd347b9a6f7d8ad7242a2b91dcd4ca3f3499399b437a6353a735ffa0d576e935310da18a4607ca60227496b210caabb6df800711a955483edd49a00a683bb910db1331017b31e17b149946d7ae6d8035d23 + +COUNT = 880 +Outputlen = 904 +Msg = 36be0f0e26d16c77ab435349e7bd9e82 +Output = a3435e150829a1515c1a49859cd5c168b3a0b3de3e33c1898cd7f9569939981ef99a706d1684fa04774c9650d4936c96a15ed218e765ff9ad8057e97e4384214ec8a61b8f24e01a1ccc25b7328b4fe5e47b2ff782089a92218e08a54463fe7d3fe8fb69e36f02dcaa0abc0021900af41c9 + +COUNT = 881 +Outputlen = 904 +Msg = 7da093171f3b7b70243e7a9d607f1bcd +Output = 1a91c390e9ef43144fc9dbd5e817e3bdd056a092ae508b311ea0825220419bedee792a1d9d2b8b2acb7a7b2d635d1cbc152bbbf78ed61431f5a8c15f0b0eda24092f31894410274ee9170bf7ef0d5796f487f03f73273a4378ca52be0177ee5ea2c1b6c2923da2106b2e935d2ec3b4c8c4 + +COUNT = 882 +Outputlen = 912 +Msg = 7eda6b38fd1caab32dec58865ab74614 +Output = ab256f29e42f06b271a7479b86daea54684fc101aba4f30ff3f70096142ca27137fffbe6c26a6c24facd35fe72d43c586c718ac36fdaab06d344d3f1dbbca595a59829d7852b1c3522135713fcc0c04b51be34fc96cb9550581ab2a802d89c299985989132b46b10cbe4a369f1a20b43e244 + +COUNT = 883 +Outputlen = 912 +Msg = d1fb8ecc9e37321b3eed88f36c80b8e9 +Output = 347914cf2c75837a6f8a562e9f27aa6fed8f247ea2d1748c2152ebf959bbfbe4c219d72e7163b166ae05a2b60f7574e74a2c81b506fa3ca943225bcad1247fee9c871f0008dec6f8b3325b3be49d85e4ef05bb664aa208115164e74484146aeec2f9d21859a3a37f2aadd8282ae384f84917 + +COUNT = 884 +Outputlen = 912 +Msg = 4168ddb3c4474a8c130b2b9b0ce87b3f +Output = 12fdc1356313c9074b2cff4221ba153281e4b4d53073cd583e8162f5804bec9e39265976a4d5a2633c8188e034dc91c2dda3a38b4eab030c0c8bc349449ced1a5ec8ce8635e489f07d62fcc8ee12ac4e5a0be6af03a856880c63594829ad5a28d706824120fca6c4d04203f6edb0ca91fe1c + +COUNT = 885 +Outputlen = 912 +Msg = 2c275e327eb181cde419bcfee599f665 +Output = 4738bac9204d5c1b351b53263a7f824278ae461224282b76d21967290fb00b29579a51780db15d481962e3131de58bec321f3f599454efb515c9a0021431c2ac7aad93464f9f58c98dd8fdc108616e602de7ac3e62a82d8e287021e2a3a59bab7532b11fadbb6afd3451401f1cab2880b517 + +COUNT = 886 +Outputlen = 912 +Msg = 6510268e8d5d31dc91bfffd5c40f99a9 +Output = b108625b6dae80cecab34d05217b288522736dc83ad2ef73851602da8ca5b41d77d62f274961037da4b87a53e3452bfb4bf923e4dca6aceb4d69b3391653edb47d3fdb4c8dc4cf8d30074e56af610db792067223e095ca77a8eda6a947dc9752d2d6cdc09f583671e36d068a0360b253902f + +COUNT = 887 +Outputlen = 912 +Msg = 13cd2e0e56f42719974e011447994fd9 +Output = 2942f5adcfb2aa6170bdf0c4ca78634cd25f1a1c2e6628fced08ced85c48ba842a165f479e83896bd6f4690b00aab716de3f4af4563050120f007063523a888ccdc85c44c35bb9b144d486d622bf83a137775b92012db11db17519a0ad715915e61fa646877efda575db02b4767320f845ef + +COUNT = 888 +Outputlen = 912 +Msg = 4ff8635b7bf62238d64741db26edd2e4 +Output = 23d93704bf60c811d0bdf1a82357bced16e064e045cd2fd65ab5ab9e53cd3b2eb99ac04da55db524be817d2a3d61e95ad80c6464a10a8b290fddcb35bd742845b8a235ee582a4bd4088f5a92fa54c3fa5578a3a86f0332052001c9b29d30e798806efe8db410fa989f389e9d96ff0374dc48 + +COUNT = 889 +Outputlen = 912 +Msg = 27f79d936a6cc2dea2b84273e8209ee0 +Output = b8deca8894b03d9ec8f67db054ee1191eab63f0cf082d49ba430d5d0ba809ef054f53a510ed589e8e9731e50bdeb5dd883eae82fb811b7bb17799c6b516baf3fce52558008e5fee8afed2417ed1c10e6332c091199fcb9aee54a1dc834ac47e3062e50be4d1f9f5cf9f85cd3d88a8a058d6e + +COUNT = 890 +Outputlen = 912 +Msg = 58bd6b3bf056c503581cb4b507026e7d +Output = 119e6e5f274b406259e116b39b600a79a146370437d18e1dd52f55b95fb3d3a1a24afe4d9d20758b72ffbe13ba30147cb02da34a2e2cc1794539b265719325813c5f0d946c3f40a18722b33a90be8d390c3acc15ae00733ad6ad7e2c1c5c04637545001b1cf470be801b9a6e4f237dd86acb + +COUNT = 891 +Outputlen = 920 +Msg = 4264ea84632d4f5c0aec348450299556 +Output = 309d6fdf6fad0c9a440faf8f3beebdd975b2319f719e6aa9229757961291a8efa01cda044f1177bc62488ace95a478de3dc94325a088bbed9faaa6083bc722f2cae1b1c0813beab8daf016484f0ca454494f3c502c41a983e35fce6d927d07fd6bd208aff231983a0afda70ebda2f09e1577f3 + +COUNT = 892 +Outputlen = 920 +Msg = 5a62727b9faa994bab5857f632619d40 +Output = cf1f6723c853231d8855c994328c095bd5c96b31eec6a910032114d974a77912a04f9008ec6709c8f028c121b7f71244bff425c0b9d0fe4b727fe49b4a07bf7c0256fe5f7df089b33a5414db8bab0c6954b215b56e56d278a5b8c101817a1f870273b439b7ecea216115c332e190049c7412f0 + +COUNT = 893 +Outputlen = 920 +Msg = 798acfc8f0ee8730449007c1a47297ad +Output = 693abd8af5650df916c73a7bdc27699818628f12cf6b4289be4479632b969b161f2df953f9236b44f1618d0b3494c58c933be0a3d7e911632d649f84d5c6dad00008876580d9bd6994d16b85f616e92929ce81c0e4de719f8734d650413417d1518a44fdf58eda50c0b05b95bd138dad846876 + +COUNT = 894 +Outputlen = 920 +Msg = ae78c93f52a72e76b3afd388b9270a4f +Output = 41b757f14b92427abfc994ebfcd5ce62c11c1c0c2e98a91642d8a79fa373ef16282185faa3e87295d4788780d21f1fe02db8047de8f51eef6312a4aff23ea2d5d583c7623727037b6efc3481d72ac3c51b1a12819e52a51cea2a27f44a49361e767a83a81d16f209b26c4585a178532dc8ec7c + +COUNT = 895 +Outputlen = 920 +Msg = 6f820f4a63685f9ced8edb95f9c56799 +Output = 547909e3f4cc11cf61586346cd701cb10050fd87cef101f0b02b13e5e8c1d5242456e0e65a35a9b84c13dc2c64cdbbea1cd8945e4e9bd5378c6224bde589d65bd6d6d0976cac8294902bac78da98ee1d773b77709bcb7ec7611a4b70f067cfeed858e74a62cc9fe4a9af91651844f98cf258fc + +COUNT = 896 +Outputlen = 920 +Msg = acbabfcf366defa6ba0115d2a440a388 +Output = 01984a78679c5d41f1a78d8ea424883118c6323302b1b9ed8c9cc6761c137ca1766b68f10b47950b22ed0d617d9438e2893883fb42a850531424a7315eac7e9510775583f2c595aae8411664e1c066487b9537c2d870c24c9f0e831ac6359a3584b9b61a002f861103348679f93aa7319749ec + +COUNT = 897 +Outputlen = 920 +Msg = 1713437bf0e6f040751c469a9378488e +Output = 804668bf702266a6c82cf09d60dd5b521eae47d2d8ad2c1d62879860b47a9ffc80ac240d319c0b2e083eaff8c1eb623e2a16631d88f71a9a8a19a2780de90909fd357cd1a8a06020be6006f92f2871b68c89b23997741e1ae1271340ed7f3f600d9e4779454aa0f88a540070947d436befe8bd + +COUNT = 898 +Outputlen = 920 +Msg = f9c91042085580fef373c97bb8ba7627 +Output = 8f67edf4fa970d13a73acfa21a920a50a61524c5be7cd310802ed42a51d870877bf78b2028c048c6967749016f24b2ea91401a74751e28d238dded82b8589df543c4813f9c4dc2d8dfbc56380baa7e358a28ba88fa5adb6bb36e171edc84c9b16d35f44167575c9346cf8a9d10c6677483dc7e + +COUNT = 899 +Outputlen = 920 +Msg = 3fa9e00993988dce1ea88b8fee3ef8fe +Output = f5fb6cfbf21ca0bc627565d8d194a427aba4acafa66091e2025feb607521ecaa3379d6a27e530cf49ae045746c948b18ae71c08f9dd717219cb9ed0119edaca0d0b6fd1374c429b15ac8c44d5ab15f0fd01d48a9324fd7cef740b771ad14130c5146393ee87370f889b2b4acc0523d2c7cb097 + +COUNT = 900 +Outputlen = 928 +Msg = 7202478bb8b8d31f90afaf86af995991 +Output = f2371b9c33fa87c709abd6b475c6d85b51cedd8fde3e59837d2bfe667a40332d38aaf58037574aedc23f273d0653c4c7507f73f98c655130cc0abd04939bb11f6223f565b210bdaeeb64f1926b79de60aa036e03a6634bf2605687a11e55a5caa9b7cfd7bfb3fc3cc02e5ee9ceb1ea8d4338f307 + +COUNT = 901 +Outputlen = 928 +Msg = 79e776ef028056977624a91ab9371a07 +Output = 38fa2231b93e4dcb6ea0c9d8a890fe4b3851c4603d94511f40ce0650f6bb75b3310829882778a65c78b789f30e85f2682be51eef8abb96d02ead6866c737aa5aa707da6dd347ad877d34886cf1c8620464d5fe783d5fda8737b3c342b4a028dbd07d8e1a865e2d0793b1a328bfb85381d588b3c9 + +COUNT = 902 +Outputlen = 928 +Msg = 46fb2be061ac51008bd522ede4a65a82 +Output = b29362ce87fc3bcae03667aa057a6012e6ade44cb883299aaebed7f617b4063cab6783f12737d0d132cfa3e138bcdcd0928ea2235c120b86d14d11567964486d11b4b4b76d227eff0302aa8cd38d2205c86f080db3b20e500bef23014648264dbf8f5821922ce28da4750bdcc8aeacc9c7180e57 + +COUNT = 903 +Outputlen = 928 +Msg = 54992cbaecb27d3763bf3c8324d04ec2 +Output = 624f95a81c9453cb9217e2f7e6e2465e37188a7d197a2796fbf59add94234652f708bf2c184653de04956bc7d80e1821f1125dec8d874dd9d62f7e0c0f1ebe1af126b4e89a2ece028e4087dfcb0d511218d4bbd40f6b52cc8df3c157d2e8a623f7c220c9e605c8b17a7e516adc8e8c8f5db22fe7 + +COUNT = 904 +Outputlen = 928 +Msg = 3c17404891c66968a37acff6fda5e721 +Output = 78cf93907e627e675bc7c7926d35213df6810a7bb4056b8e8debda36b67e39f1dc2dfbf30137ef71b53d26065d15fefefde9ba106257d3f9e1c80609d5824b8aaa2ed2e5f5ebfa4d9b508a84bbb21385272cfa687c5487c07a06daac39bf817734b5eeb844ac758b1bdc356f1ca5b3e7e2e84803 + +COUNT = 905 +Outputlen = 928 +Msg = 4cbbddd8b6dd92a5c3941278929410c8 +Output = a67737dc705f76448adfa8781dbc784e421c241944d35c4ad25877d1b899cef4b99ca8d7799810e4c9c405c128576b42aff30b060e1e680a34e1a36aaceedb2ea8a27a3c88a5cdd1bc50a07ce58e5a9e16d5b343d0827d9e0e7d5dc63bae2faf75d37bc36af41915268bd9b3e5bef0dc6821d3c9 + +COUNT = 906 +Outputlen = 928 +Msg = c16860a3883e9af9b56b36fe60762d0f +Output = 4e908f80be27cbe0c59003cec58b3db35eb3681749f621171a0e1da4508d0683da04c441e8c0bec39ccf3d73f2755a86fa25b427451544a29c1974bb5abf79da3b6845e01286ad42cdf1de33226b6da5738ca1ddf9c98ae42175edcd4a94eec72729c26fd530b3bbe433de065bba5b37c7375b86 + +COUNT = 907 +Outputlen = 928 +Msg = d60b6db931a3ee9c94921780090e55ef +Output = 3d8c0bfa0fc2e1614add5b6c05241d85b83621959ac3b0e59c5274b11666ebe5961638dd5841fbaeb1a13667034aa8f87ca290f2896c1c9b86710d4a877b2774d4bac64f83c18768ce854617fa8c8a101ec48e2231a624fa1583dd5f380db31a7873f80e4923bad109f088d2ef6154d1f7990504 + +COUNT = 908 +Outputlen = 928 +Msg = 795b72e59bbf2f374326176d1d633f92 +Output = 1a07a26f6e5aff318d7fdda0d83e54564bf3b8e335c2e03b7d1c7055e0e30bbf90f6e98536f498f122b48b9af315e31b7a90cf80110d8e317f77e5875ee5539bb14a342983ea863f34ff922819b0207a44b36b6775239c9de2fdd9b8c574ee2f12463043e6907db1a37b4adba35e2c659fe2308b + +COUNT = 909 +Outputlen = 936 +Msg = 32c3412979de62ae6cbcdd381dfb6fe0 +Output = 91a5f5d2222b330690a8cda1b99767f6fc93c1fb5fe7d176f229a1f48aa1f409215499eab80168d90b0db6f9f49ea6dba609dda927605304e7020cc556baebe257bb8eb4db85b4f82b97b9312f63b4734d24c9b87842238394079857c37b04f5879c15c0a75112d5a95588b0e465d0d3d8a397f1ef + +COUNT = 910 +Outputlen = 936 +Msg = b61d33409abeaa13c1adf62001f154c4 +Output = c89ee6943fdc5ccfe410852bee4776bb76439159e1cf30ebd17e0ac41458a38ee4e3747ec536fd191a06c9b104bdedc9a6cd714831bfc490a0475f1da3fbcc31cef7161cf609228d2f38973e2ab9247e9d37eb7c9fe948aabb96b213921121e0ffef2d940473f0a8faef069992c2889a3b6e4d7d15 + +COUNT = 911 +Outputlen = 936 +Msg = 031f049b36b205a627e59d8ea0270ce1 +Output = 467122a12b7a3641488f383e2c116aedd79d182bd45240afb9c7aa9129f056dab4a702d606cef6bf1f591786774f206675322131ce5a779f6e49c3adb18cb6f7fe2d5143969f702bd3f59eb25a597ddf2007be9a47144000dfc69dd3a4089032118d7f63666621ea3f800ccadae8908f32058240c9 + +COUNT = 912 +Outputlen = 936 +Msg = 33010c79b8d88d217d8ab339d4f18011 +Output = 064dfde663f4545e22423496965a997fd794e7365310d3cd4c0c36e995e90eaf0210fba4f083a8b3b98bbb991f6a0beb53b2fab1523b80dde0a34a754339c21d71b929bf8ff2af19be8862af239c26b18126130194ecdb8482dcf236e3f6f029d6cc7ddcc09368d3933f31e17467c531e27dea949b + +COUNT = 913 +Outputlen = 936 +Msg = 2d208490f2ad89c1e38f003b1654d788 +Output = eed72f1d4be66210f36398496875c94fea57de272c7bbbbe4f71d1fe0f8be42ae2869873f9d6fcad31833d648d077a824c123596bd6677f904e527ba046ce31cfc2e3905b45d1f250ba352d318e55e915686d14a3db0fa2698593877342f038c429e1976a01a9afe36edd9b67c4a39b7de2c065321 + +COUNT = 914 +Outputlen = 936 +Msg = c63f59a8533fa524ff17c8f90c8fbc47 +Output = cc006b080685a93a3b785455148ff6a8897a2e71112d41169d3804722d86f35cf896950f32c97c2ec95013c91f0bb3606500cb667364c322622bc69127c0daa4cb03368dabb29e706ce3809918dd866b1d435cffd7ecb89c09af74aa0015ed914e90e46ec64ac0ff5e5ff12fa513056643606020fe + +COUNT = 915 +Outputlen = 936 +Msg = 85ff5f072442756665a41f36cb2c99d3 +Output = 42c94f45b8a83623d4d310c340474fa910213bf0fb6ebebc2eff281f529f3423d43d6718ed27c9431c5337fe66dd8fcda56fa874f1e93feddb1eb14f878d3fb17ec42e28d17a03baadaf27fe0dc14e4536462a1944cf469803b2a7af0faa0e0c1b30318ddc2336df5f66ac1877a26c4b805a934b48 + +COUNT = 916 +Outputlen = 936 +Msg = d6285c3777b4b57bfe63154807370f3d +Output = a5fd605b3ca298e11cd098208b185ff0e4434e912208f59e09cece20b0bb52979b24503f867855932bab44ebcf9c3e29c8f58a858ebb10744efa6eef984787349f8f19ce0cddf7f6e1bdf5058f7231d06c1460b1a4bc4bb19b298d9ab6d0e332bd8f16697950b212cb3c30223a414f4fce1cb41ef9 + +COUNT = 917 +Outputlen = 936 +Msg = 8df203bdbb72ac901b08095b53d29346 +Output = 754778c7d3ef8ab8f1a3d4c2c0a21181fd4d5f7b6fc6ecbef37ed3e056e0047e4ce6e3245f037ac1f79b139fbcdf235e1d6d7650f88e33577dab7fe4933510099ad6c75e783f5f4c6d3fbf91a5068541bba1797344e8c6bb6a7f09b43568a3fee8f273bd1ba6f00908812caf2052b6a5525114efba + +COUNT = 918 +Outputlen = 944 +Msg = 5977cd2f87f385bc05502bd5d0e7bd57 +Output = 5e3db1831ee90fd25ab68d43c41069a76554164e2b0fcd3d6757d855c6c8f4e44dda0a2ea3e08ca4b97f75f7300047750cc03b699127d09214289419b2207c422c49f86070c5af0c5c78bafe3024e3907ba5ead52bf31e1d4341312381e069b63204c42491de39a6e1427458a19d56252b1bd999db90 + +COUNT = 919 +Outputlen = 944 +Msg = 687ef74e352bf67e5cd2eb1e401d6cbc +Output = f4f35697eb5398435a1883481f74e58f7faece291526a74d218b5630733fcc62f73b0fa15f09bde1cf342aa2b1f7cdd368eb019ccc12017b4f9adc9fa158c6290734da14fd7f7c5421702a36f7cb18de0dda08eda449b24a27b0fe8db9467bdfe908613a2dcdea13e3d075ccf6955c9bfe9c16c9ad95 + +COUNT = 920 +Outputlen = 944 +Msg = 2433ba7be8814aa32fb6d2d95df3fcf3 +Output = 8ab97fcfec4396765365c4df1a8aa6a4861ce2707aa8815ca9f2e1f2ee7213733256cb215f5e218ae46dc05e68c5f6bf08a359849d210bbb6ebe711fb84270a2669ce2a1ae32341226dd8db1f233be8638209bc2b2ea18562b687f452fa7a952b7f5653f8b0f4945f2704c3fa2b5db3609df24b86855 + +COUNT = 921 +Outputlen = 944 +Msg = 2efdafaa360d48c474e9280552a91ad6 +Output = 2857aede6efea1f56fe3f046db734ad98258391d67de7575a05bf596cccca25bebc573036a16ea28462e38dc280339d533c588921beb72d874778b44a827f5c18c10d99974e8eb451384c70c0e7ca81fcccb2a96a3cf9f7ae4ffd5f9ab1ecaa19e6af1bd9ffaff343e453fd29d17d8c787f1b11d8e9e + +COUNT = 922 +Outputlen = 944 +Msg = 1b801a21fa50971afeba3cc75ea69a88 +Output = 3a297aa69f0317aaa3c1ee3e4f351e0802d8e15d6f66c8917b804260571f8218c63bc93fbe6cba518fba8ae378438e6704f01ac60def5818086bad26df228eea7b5830acd42708fa5e73a0694482057d386a9d8c15266561a478983b44e412727388405b678ff8fa6c33a64eec52b7fe422e16e7e92b + +COUNT = 923 +Outputlen = 944 +Msg = fedae848392459478b8c4e2305289445 +Output = db3cf71dbf9947690eb969880ab95ad151e2f232fdb31377e40c24de62aa3c050f25a92cdc8d672ee957bb4b268a92c4103ccafdcedadce753747850b2e2a94e470d6aa9cdcb28657332229285c1450576573e7aa571a2f95537c2d1e1c30094f2840e65b4863fa38d79b8383383d58d12b084a56120 + +COUNT = 924 +Outputlen = 944 +Msg = c84c96ed35a2ffa95a6c3977b9356e6c +Output = 5a6efb09ebfc84f34807db71412eac64a3b314061534d509047d4f0e0406853071aa311f9a2d066630145b5ba2c9735fafe9051ce3f640e69d4a6522eee3218d05298051afdf16f91950cfc7d2d8fdd6e113cafebd6f4311cd0738b42edc600e9df4825ad4e35ebd318120b91318afb50bbe0989bcc3 + +COUNT = 925 +Outputlen = 944 +Msg = 13d01b6209cdc3ced578d985023dec6c +Output = ca65a7fb8e47d6abe9365174bfd2a5d0b85a0b6f7c1850ef23e3c7bbcc12674083c97eb3c5fd7db7a051b181916d4fb282379352bda72d4060675f8c9152cbc2dc9c821ccfdf6813ac48fe15d0f1ca09b7a3987d4a4e4749f8dd85e3e1839a2a1957383b4b05b962938942a333e024c5261a51d5e2db + +COUNT = 926 +Outputlen = 944 +Msg = d09359c76b27acde36d4bab6ec393587 +Output = 5f1583a530d7a00d2ff5a735188b967ff53143192414ec0e5a0143b0903ea29d7add66bb61f80e47d96eced0ac60f54b9477b8a95496d9da28e07ab545dc8686e8d05f1a951866926750974082610309d64a076e2c857e8c1c74c19358c60cf4c6b57c4a4341bd7646bc123eb6f2f1a1062fb02b8ff9 + +COUNT = 927 +Outputlen = 952 +Msg = 6cb6976983b50cf36ab241130ef52c75 +Output = 84ba8e7435ed4cfadb127e9b5e03f6ae05ef0545242c3ca2ebd149208a18017b0eac72b7ee136e306535d08309ebbc4e6ccd2853e21f227c94e2a42580a2aa9c2ac51762c7312d8f61b6db0d865415a90b741fffe4cedbd0fcb01dd78cfa5c31c5d0a42cec86c5a82691491730569cc9aa404cb17bfc6d + +COUNT = 928 +Outputlen = 952 +Msg = ae59e0a76e3249d00869dea50a1dcfe7 +Output = a4ab4debddde2772a2881d7ecbac8120991838bff9677105a0c7a93b0f07531888b5535fbe6111a74c95927c1cc44a6623baadec672c974e4f4c03f4490e1df0fcb914c416b0d2e816a4ebd66021e3be3c5dd7fd7c123f257be354a5b11d005b19d8f201ad5a41f7bdbcd613b2b00ea31f81f3fe317017 + +COUNT = 929 +Outputlen = 952 +Msg = edd209dc676b649df0ae3f5d06afb3db +Output = 5b35491ed27af7ac39ae30099e4ce608c350a7654069083ff015a4bb2cd312c3c8b75a547f3bb3d52ae267210587a9ec3a8042612662db3dea73599a4c29c02cb4615cd380f5a21841b58ea13f690e986a061cc5bc44738b483f360be1299c2cfe25c3de60f4b6aae8858113cd3952b94d82888b0d555e + +COUNT = 930 +Outputlen = 952 +Msg = a90a37717779a53b1bc16e375e9b3dfa +Output = e4f0053bf0aee15008f249634e408f38906679517e6d4b855bd9f66329c6f1868a1a7c59a74b2c1fbfe863ebc9829ac168fbd0c40e91b927d32841f2c9b84306eca7ad82d8f1ee731e5020d44eb1512a0a6b5c5963b1c34b551f205710b91cc57a94dc309c93155026149d685a0b932cf6abb112d2f107 + +COUNT = 931 +Outputlen = 952 +Msg = 3b9ab76a23ae56340b5f4b80e1f38dfd +Output = f6912df095db1da8c184a92a082c1881693fc8dd6969a3f12b6e83ec841dbaf0d9ed9eebd7c8903987816dc4e6b0895adda9d3cc9ba369ce6986b790806f14e48094d8c037052ced2f6df202d2f3fd3852d6464538972bea5b25ed1849f10a54fa175191cb44dc77558cec7dfe5994a3de31089ba438b4 + +COUNT = 932 +Outputlen = 952 +Msg = bee9217cd152443d54c058295b83bc2f +Output = fdca49d58b33826fa156c80892e9ffc410675f1d50d260c975bba8859c8979a1faa1011e01cd34998d3822a249c6a2cda3839c5834c181b02b8144a8a09aaf277a29fa263b9d2fe2130acc9b110a8220ea8b6e8eced883431b7c0b9120b4017066e465f301f26b235b3d7e4530ca4f4405fa3b28c46e26 + +COUNT = 933 +Outputlen = 952 +Msg = a7c6d74c265c1d9c07848410fafd5b01 +Output = 0551654cbf6ac99a7b5afac0494903a86861bb879d3b4fc6098c5ba152dc67e3bb9f8696c92eeb16fd9cd1e2b51ed1c0c38d138faea7b429b685f2c0f0ac8deade3e8ffadc450eb8c422edb546e029aa7a43b5c9723b450a981abd9040b0f546f2ee2d8f32d5b86c412afb8e89522af4e7434d11109ccd + +COUNT = 934 +Outputlen = 952 +Msg = b4396e7697fa2e6961ee9b8816d9f857 +Output = 73279b248d4c9209f5605714a8b831427db9b438ac06ba56668eb3a708da20961aae24a0eb326ac659831108fa69770b8647076be3e8c13645c48e4617d15a9f5bde51396f46c43b701f30caf9c677659135603793dd3a1253f41d18fa66abc5584d231df2c7c1c274588133ac4ae6660d6604fd3e1fee + +COUNT = 935 +Outputlen = 952 +Msg = c37c768af6a6ec8a11496340dc60ff11 +Output = 4ec819caae4e235e1544e4bc8a85f9a034717dab307344fcf813558664afdddb82def5d0ee1ad2a416ee7d7c9d60790f6e4ab763c76facc28e5506bff7f95a5ed99f3f85e282d12e6078ad2d5efee9757a534845a387a8ed02e7d4574379272d4f85319f3787ef951708ae3d2936c377bc38a14fe7813c + +COUNT = 936 +Outputlen = 960 +Msg = 3294ea26ac9dab8eb11202a93f097b64 +Output = 53a98dc970ed4c0ac24ddaad97d4176af0cd395cca2f2362f4eee38b5aeb4c96c96b001756a43f302595a1750de079668c1d7191a8e18792603cb150221cb766aa290f6a5fd7d2b7d3360893a3c71795f47885a37d2b19948710769b88e093d5fd9c5d23f31a6a3246fac0edad71eb860ea54856cd9acd31 + +COUNT = 937 +Outputlen = 960 +Msg = 9ae717ee20948b629be2a642a11c555f +Output = f1714031f50b10c0c74d5ab172e95c81cab07c16c950e655146db4cd9ae359d1b6cfb94de245cd166e619a6f8e2a013b746355954222d7d261b8070bf7af62ca84d55d6bf997831314fac509a853e5fba376e6b72ffad222316c5575a0abdb9636c4210e64e0988860ba103e904eeea8fa78e97d99b32b27 + +COUNT = 938 +Outputlen = 960 +Msg = 77a316cab162cff862e7bef3569a380e +Output = b6519f1f8b4a2fdb2e7f094ac21bc9429b4da9677032edd4c2eb4b539eb087c7677714bd7740e381a1589e9d956672a7e1838ac06f97fdca31d37573ad7617e0db98a7f699773799450a2d501a56035d0336712adeb6c693157c3bd7785f6fa6f947619cbffb84d1b261f43f91a200e6a763676b8c089e70 + +COUNT = 939 +Outputlen = 960 +Msg = be9fd5155c64e40570b974ee30498f7d +Output = efa65b675e2fb4129757a58148f09b2097682a5dcdfde8307225cbedd15dfe810af112ede83880797f4f6757f6804d905cd16bb62681b6222c7c60407053e4af6d4b19c4ac6fce2f7abe35b4ee994d9004c8bbc15aae025202603f0323c199e4d241fc2ccbd37e1fd8ffbbdd099c4616b0e9684335bf5d51 + +COUNT = 940 +Outputlen = 960 +Msg = 380ff14baee029db92ba4cabbf9e9cfd +Output = 360b6a6ae5bd9ae31ceec95df42d95c1aa507ef96a2fa8363b21d7265b3006de29cbe04f395acda1eae8589680878391acf57af95dbcd3f322a29249fa9d8ff611b329b2d61156bb011cd4e46f076e4816c6c59d66f82004bb2237e51d637378f68f6807e6e7f8dd5becc6c2bd675c8bcd8b16348cbce4cc + +COUNT = 941 +Outputlen = 960 +Msg = 80b0bcb1b47871aabdbdc48dc7c86a85 +Output = 23055f7487d807dc67ffb121d0a986aa798ac2dae4d9c4798475401ddb6ba08567ed9773bd37eb2fdbbaf00ccb43ce8b18921a2019918ba2f276767554b6f3ae6ca139e0f64b800f5b506a29bd374d85c283cb19f65a2055a804688d7f40348f8bc7c625e861976498eb42436bdafaf45d54e969b41a6e4c + +COUNT = 942 +Outputlen = 960 +Msg = 57848d34afd9b58791e3cce8beabc44e +Output = 610bc2244384541c7e3a182e10009bf632bb0ae68c9534e78d2eb020891086e0a102c57bdd9c06dda05a924e2a1a04858f3e5621b6f57f035b882897dce95fb323e98cec3ce36ddbf1edcf9136c731fdce497a7d46bffc20558663292210df6d43ae75a6473f89f06e6ec66c05a2aca159098603fd05b6fc + +COUNT = 943 +Outputlen = 960 +Msg = 5d612eaf24c8fe6aad3eb05910c44f2b +Output = 5df1e2a10ec4e43a9e314eab280a9254ee5928eb28664e9d8702a9397fa7cc362b75f287d424640cedfacef5f3e2e753a8990377e1c11b81135b5634e697f77ee2f1b247e636f81ef00225d1f8afae759b2e907cd3665685d840dec6dcc8cbfb280c6c3d3f555ba46a3a4d8a1ac427185491fb6fd76b3227 + +COUNT = 944 +Outputlen = 960 +Msg = 3551f49ba2842bbd238bb67ffaf2fd73 +Output = 19cc63b55a6b96b04fa8a22ab7c00db7f5252b8c1675a089e36928c5dee68adf2051866a54a516358fbf154bf9c223a588f9c879fb9e33d8cf333a320d78eff3a90a58a4eb7ac000df0f430f0bb9d02fbdfd69d204f809a5abd06dae5c4dc8c3515c54aa6cc8740c94978a7ee94d572e8fb3ebc52ec7f525 + +COUNT = 945 +Outputlen = 968 +Msg = ec17aece3369861d0206d1218ceae4e9 +Output = c5150d6750193ed089c5f8a45662e418ed2e5ece896a8ee0675252d986037cc6eccb3d08dd51446a373c8af436669d6810ff6f63f322029cff3e1256b6e207fb5708ee861c99422a482498f4533d855982400af491827d6e6908a4a9e33179c7420c37746f399e62bacd6e097557197276073d440a5dab7059 + +COUNT = 946 +Outputlen = 968 +Msg = 41d9e57421bee79d5e23acb80d539e98 +Output = b70dfc8f38a96b0743fd397813e448cb871823308b97cf73d84413c6705550ab8056152386355ae37bf624eeb4ec03ebbc364fad3d3b5d463694644b7974d259cf4a1aaae9c012cb642ba0c08606112bbc7a7d22204924f5b5ef34df617fc478187995bce1d2b048f55ae79265c09a98d2642d201e7682f41c + +COUNT = 947 +Outputlen = 968 +Msg = b1f8fb9f1f080221101093b3c8dd98a8 +Output = b8f0e5ad1e743bab0f43d4cf3d1934138f33c5c778f9d249efc11d194fe88c65b58fbf18c47ff972e31120e02a5ff3a3f181b43e5f0975e38115ce0a6748cbdd0aefc864af0bf4e4805650ba6af87a194ba91c9cfc6db0ac2f577965dbfc7aa43252efb63238612572049917ef253c19ef9f19d64c3be13ba6 + +COUNT = 948 +Outputlen = 968 +Msg = 901494dcd7dd930c055f30129ae21c2c +Output = 9db3f8cd0ca5be1f6a689b00acbca931a5de58d629e11602f55d3db1148791104bb234e9e8f2b7d7396065373cf47f8d12f49208413a1f849fab25c843ea01c6a86d8272ead1e3301f89a72a53f68b012bea23d1ccb996e8417a6ff86f639d25b57572b16f2f113384a3d083220ebfbce8349728e3991e6287 + +COUNT = 949 +Outputlen = 968 +Msg = 9e6cf1c497e49dc4cbf2b8e455d2df5e +Output = 441cbd495af810621e9507826f2dc54252cf9381e5e5702a6be1f78aaef61f9ad9a274c02b841c184d3976b4c65ddcd42bdf47e974332ab850cee836483737c3895373e6cd5f313ed2e808748fa3bf21730a73ee877d2afc37716eb236c36f56a163b0165628f9e294e2e15d730a73bc89e5943cc035d1fe5f + +COUNT = 950 +Outputlen = 968 +Msg = ba54d45ae847c088cf8c4c15d0c9147d +Output = dc549f54bf58a3e37d3d98f9e45adb1af28009838f2301a6d024803f49d570bf367516240c74246fb6de7bd5781939bb620e59da45ec8b9fe1136f289f84a3145708d92ac815f6c2eed131f2138231c1fe248cc0277c3e7c949204f125a3e74a1f3834a7dbc8248b37a66afdde864cb30d094897907e3f4b17 + +COUNT = 951 +Outputlen = 968 +Msg = d7811df03809c864b159e914b07974ec +Output = d293cf5c6205e563477e555c6a864098748ae53b7e4773dbabc4d50b2b369ca2424b1a1f1fb104cf1fbe25876ff2bf69da04d1eff8ea4edbbeb8726ce8aff0ed983416b76218cc2c82e8bb04541885aae8a317dad52e964172abc158eb7c6edeb47738e7b0e5bf7e112816b706e30f3404beb371f1931c8196 + +COUNT = 952 +Outputlen = 968 +Msg = b3dfb39d5d93bb59f2b9db8216b5f647 +Output = 8d474da9e56603dad49af7e5f3ae7db668cb963b635c63ed92777a14c5a950f163c536054e11b6a6020433d5e9df95f841ed64a39887e76daf8b5e16096bc2d02b7bfa742a56ded86ee7e033e978343caee89883411e275b087703f7c76b49584d52a3868347d79d015de883e177c255851df2f3e3adbc01cb + +COUNT = 953 +Outputlen = 968 +Msg = 80ed8806ce20dd7d48558fad24c097fe +Output = 41e325603caf25ae17957daf58608698ae98b878b5951f9a8b6ac451cea7046df9640cc0ee11b5156f619563e08d82cb51ac0a937e267c610d255288b94c6a063356900bca8aed7962ecc90cbfb8dd238821fb32066f6c19eac1fcb17de0be5d391cba0736e490b7c5d6f9048af933c338b1c8352becb5b32e + +COUNT = 954 +Outputlen = 976 +Msg = 8da1ddaedfd313edbcad743db2512b6d +Output = efea6ea03a1035a6d49fd2b07d0112a5ca46efb3d921bec8d49c79d46761b658f813f9e6a4e7696e978e3041f46c67a8915e343bf594f895d4b2df6e38cd60264da3ad58c2757a7c8f9b798254254a9354de8dc4b2c8b334f2304a33bb50259cf0d9904eadd507aefba87f420ceabb8954ea47165066636a69ea + +COUNT = 955 +Outputlen = 976 +Msg = ed85ca41b7b6c8d78abd6eeb78b485f7 +Output = 55991343384d28facc800cc6ab1de2f2a8abcd79971ea545b366ae7efdebf1acbf25b81e20ceeec684038369945df716c3b4e93c8acdf60ddce26236860408104d72d2be3e9ba4c5ea511aebdb82fdc8132a37c9beda4093a8f861e13764c4edae1ae9c42053e4542ffb15022e059206ccadc35965e4399614c0 + +COUNT = 956 +Outputlen = 976 +Msg = d261cabd0e90dcf0805b5534e2e8d67c +Output = 113737dc3e7f9cdcd1308d27e6c9c9ea150f4f99ca2b51137f50e7387859cfa0194c112e0820c6c8653f018fff9be529e6fdb014ab9650a442a4516ad9ac399e68e22d0aa1965b2326ae1e210e131bde24ee8e08f863991945decd85b0108d87fd147dff6c8de15ec5808bea0c4be73151201c819da519280016 + +COUNT = 957 +Outputlen = 976 +Msg = cdc4eeb150ad1da6300e33fe9ea8f831 +Output = dfe774ee1cfb5272e95c241c28d6d790699a028ee7c1fab355c457a5f6cfe9f3ad5804b3102ea1c6b5e0a997ac6a76e8c834c9b4fe5bbf9f109322e7bf21452a0ba01f77400a9a20de00bbe413752059ebf7eac5f4e3c6c6000575c1ccf2e3f654ea87e08d3734050b5df2d82cbaac1ff7a11ab50f9c39efd3bb + +COUNT = 958 +Outputlen = 976 +Msg = bb3f7f8788ed74f0b9548bfcdb605905 +Output = 1b78d63a8b985abfe65f1c5f338f033bc57cbe74299e0f719bb6cabb2ba94680ef8406aa90fc807880eea4baab02d54d0d43824d3ba7e0a3703375e39e20e53505e7b2cc7ecb3c47a18a0509f1a0b80f2df81bd5c6ade84f69316606a2dbf6993c13daab34e680ec4f7969993905dcf93d574e22c4ec229d2227 + +COUNT = 959 +Outputlen = 976 +Msg = 2eae76f4e7f48d36cd83607813ce6bd9 +Output = a64a34e5dd79c1997fab6b1fb0ca1e7c42b1462fbe8427385cca3d71f04edd7eca815782b52414d27522103f90de786a102b8b585491465d1a99df8aeddb350ea9aed9c26fe740696733fb8239bdb089aa5fa8efa34af1027433ae1f3f5292ea09ca5dd5005279aacf4869bec2061f92222285937ff1bf5a3c14 + +COUNT = 960 +Outputlen = 976 +Msg = 899a87d074fe3387652cdc2dcc2d7bab +Output = 9c5bae32c016cef44529912576fcd7a2e503835b3d886604c3b8897c9ee78eb7a36d7165737814b47b04448fde8d8e0bd0394b78b08047492b48f3c408246d14714b52d13026ac8ab1847d7ec2bcca774c75e3eff18e5ccdbe0a354addd36ac9f9cd1e659ad6e730662fd7d3b6de62fa00751587a439bd8cdff0 + +COUNT = 961 +Outputlen = 976 +Msg = f3dff595bf0fe38fc469e1b3407c4faf +Output = aba28ec1e2852e7b28f0ae4275e622778771eb9549ec704827d57cd54350b79070f9abf0c494a0877302f58f092ed046b3f4af9bc5fcc1e5b737693ff03a5ec40e1a849aeb1878f4408d73c7fe2e8c83366adb477b790520678515d491292fdfbf44bb5ef8cdb442e8becb87215f06a2bd3946d0571c4b8ca953 + +COUNT = 962 +Outputlen = 976 +Msg = dcb8bd1061401f3939033428245350ee +Output = 5ee28159e0c177a2a56b6cb653b476ac8a6c2071af476b95950e314f31288dae1946681eec9679a2acfcf9c9b1014f8c03f77f41c1e6acf477535c0a3c608750bea01d13cb41946733e7dc0df2c0b6a57c46f3182f88b0e90d7d49e03608d3410c680c4bb0dd24be667217c30401e8bf1b12cc958e81a1f9690b + +COUNT = 963 +Outputlen = 984 +Msg = e891dbd84408149418b5d3448052bd89 +Output = f10a75b535a3542b8e3b1b04b77122835ec4f7baf1f445daa8bf266c50fcc325006331d40e06f3dd4cc612c69c91b9da45eab649947d6494001d7a25cf09769c0f2ac168a1e31643d2ff4bb276198a830b240c138e3084cfaacdb13b5d936bb5db63e055ae9d21e717bd08635520136512657d4ea3c17c334d5f7f + +COUNT = 964 +Outputlen = 984 +Msg = adbf674abb096ebd067c5c68f042bb75 +Output = 1f8263f3c52725517c566df4e89fb45019225ed7c7504c7a4a87908c6ad423d219e3790cd696d5ed5035814ea3d9e2c1f69577f5ad73d8224aac8150d657062d4c1ec44d14202739ade6658c002769ee38b52cd4d75bfd53ca5f42c903bd5b3122f79aaeefcde93f4ccd3585917fa902ea402dc7ca3a438ae97499 + +COUNT = 965 +Outputlen = 984 +Msg = 4d65ca80dcc0df0b1ba48f27847441ee +Output = 573c1d118854106753503fbf283fad35e1ed29b0f264bfef4a01f8837dc7cfc8fb02a6f30b82ccf6c41c962c938616795bda8c50835e33dec86ae7035fbfb9c098754f45620fa1fa049ca5724a7495ce8019db939f9167ac3438a6c383aab7f25a187cb05aaaebdedb071f756c7f3ffcc065eeb67b1458a0d8d295 + +COUNT = 966 +Outputlen = 984 +Msg = 0db6b578ded2f151ed0f34d9a24bb4fd +Output = 33030f8c04caa8e41dc04371d2fd1baad69ab299178417c77f4fd32a19dd7090e2e024edd5ecf7c0f391fc9852e3b44d3fd400c57fa01aec8f648046606f8d4e2d9f7a52302a7b535bde56de93cc6bd7a8a69e450d6076a946914186ccd0d5c60b7db15b77c90d7a6d3d55f1480202a98f955f7e7a199e70d49075 + +COUNT = 967 +Outputlen = 984 +Msg = ff557fed91c7ef8c26f3ef431817d2ee +Output = 7a696c7c9c722222a908fbd204f046e2f55ce6a3c7c6cacab7e584c95d8e5ce9219cc555b9c23078579fb438943271a31679f952efb8f918eb6fae893034b0510c088956b5c262f6f9524281e6d68f2089b12728cd7177c43091165532fd7914b15498e2de96da0603ae308d4236f5c9b723e87b98ffce84b04dbf + +COUNT = 968 +Outputlen = 984 +Msg = 449ccf720646401190b02536e6a0bf6c +Output = 8660d7a5d3a44f9890d6c90751f2fadda22b7adda5e0efa3cfe2031cc6b91a516186f3344f298e9a873151b4d1060ff203b1c767e47ba5e004de2a9f726aa0ba9fe6aa530d07c5c53132670989202235784bf782da655060e0af973cbf82f95088fa7a4ddb7a1e8b31689ce093fa7034133ee76cfbdb76f79b972d + +COUNT = 969 +Outputlen = 984 +Msg = 9aa172fd559569e2898b147e1ce12452 +Output = 59456e6058258042a84793f14f9474ab07a79372c4ec687eb30b59f478441854cf455c683ffe9763afa2db6c5dce10d06383f26ff63911baa611c662833840b702d42c7921d50c874ae837a0ee3aa3f6b5c3f8d3c3d7404e77f431bfc240f9ee4a946135617d5ffe1125751fe1e71b25289db2cb28805c5ab516b7 + +COUNT = 970 +Outputlen = 984 +Msg = ab0de5d25eb1068b25c7bfb1f8bdd4cf +Output = a3c58c5fb27b8eef8df1aa3545d9ae78543c2525295017cd9898db2792a15dd40dbd9e093a639c56600cc81f8922c4873c716f2db60cb4bc0d668d88e4ccf38ebf2f16bb7bd30ff7dce5568a67645139d531b06331bd49730685e5528912b30a86e627dfa291d0dec088a038fd0d5525214f508f37bc6316dd130f + +COUNT = 971 +Outputlen = 984 +Msg = 00ee04102f7b4bb12c2a902b292fc9e6 +Output = 7fc145f7f0bf7e4c27e7e158cbb1376cce01804fa5283af12fb51f25ef918c0a1dbbe714c78a702b9a9d8e80d727c73fc4b41978bed3f1a4f83a8f759beb8b03e874f6bb029bd22170ba1c71680cddc6eb0b70d57267aa7b1916976ff7e88278fd968656f003d9cb95627a04a53e729092229c4ff8b8e96771dfa3 + +COUNT = 972 +Outputlen = 992 +Msg = a882259470d27a0bf1e2d4a17e85476e +Output = 33c70f7de49238d80b55f02e0e737919de2542b2c8891b3261ae320694bd1ea7568dfd3806fc7ac60d6929637ee00c831b3a210104cc4b161d4e85f14aafa1e1ad067274c57249eebc29533495ad7641e7c49911f8ae9c7f33b60c69551f34cb256e17efe528b64181818430ba548bb99422f43b7acb619fb4c964e5 + +COUNT = 973 +Outputlen = 992 +Msg = d7f41fcb33e4833d3ee5604b62c5185e +Output = e3812ec3a89ac43bc56f270e7578f34b1998c62f7213ab77b7affcc5ce47612f5bb950290cae9bfc14730c5cc28ea0fb1af314aef8e28c23794e0b74dd900e04abf655123cd3efb0c4c45bc3713532b5c5d1878d1875f3c1c11e8840b34d2400c282f0e60003a6086ec193e3f0da1dc11f8af352088bac778e6ea7b7 + +COUNT = 974 +Outputlen = 992 +Msg = da9439bd090dfc2eccc1203a7a82c5d6 +Output = aa68baac0c6649f011d77e0d4b149d3912783726ebaa97683532638e6287cf8d811d700f848929bb32217cdd9a9a389f0bf13d1a19c0d97f7b2055534fc271997bee3345a49b530284e89383a9f6776a212d7b58284703bdeaf9667b39cc42cafe78725a30a2d617a95e051979e97437336ae3b22981a9015f7490ca + +COUNT = 975 +Outputlen = 992 +Msg = 409f0d5343deb8595574cecf141b7351 +Output = 054dbf64f9bf4d0eb7d1d123cc49b0173080daa22a929524dd29b05fd8c5dedc5fce7b3757a779b553448cd1cf86212c4cac79077324ad273ed2c037ad8a3ccd90ebe8f399771213d0b84d2882be67bb54181c6f88f806ba667950afdda69ed94fcd7fc8ee4e1e4060d65809f49406558284fb66bfc8cf8f25cb185d + +COUNT = 976 +Outputlen = 992 +Msg = 3da24559d335d128504357c23f7bdedf +Output = c665fc5cb2f2e7ab50e762f99aecf157be29428a8ec3ea47b1076c710edb18419ac6f90a3c37f817e314492341ea41ff130304bb3c35e54c81eabb095c16c007ee703381af7b1e79676c222c44117234482052a201d6d5c9a77a75f6a11906016c7caf31db658a34dcaa3631eebca8bcd04cab0518dc8110dd5f43ad + +COUNT = 977 +Outputlen = 992 +Msg = 5f9620688c1ab390b018b5d4447a7710 +Output = 67f1c4b7b53bda79d486fd8531ccacf374cd247575b49d45ac22880a1274f514cad225631cf1e6d6b9db435c702d585d32d5dfbd19c0fb896752e017a2332f335bacf4efe31f09efd1d72a5d0d246f42ecba09fd410ce92087730a2c481d6729b58e51c8e33a93b76dd834a24894e26a240ee15df7b4f50e8b69ac56 + +COUNT = 978 +Outputlen = 992 +Msg = f926be49a3d5ef3e6ac78099759d5e20 +Output = 1b89b49ad3336ffdd944bbf897127bea6f206c49f639dde3f2d063134523b4b7cc7b652f6d129bff6a66ec57d80d4e494c49cbdd40dd7f30134fae193108fe47b34ede684a4beac23b087ecf70bbc5059589d05ec9e3a283d37198ded7a51a7de83e3e3d15ba2151768a34aa2fc3c3747237a660851b03cd8323a00c + +COUNT = 979 +Outputlen = 992 +Msg = bc8bbf2eedfd937413db47acb55fbe7a +Output = 64bdf6c26d95bb69111ae6b22c20a6019ca1787e1b690eac140114d111573d3a06aa0a4feed03711be27602f26290fe72b34139a511a96524723a3c145af06a256f1bfa952787cebfce330dda0ade1c109fd20e9453d4f56a781bc6365cb0322484e0b3dd5440dde762663d6fc17feaf1d3a9d5fb2d205e8486f1fc6 + +COUNT = 980 +Outputlen = 992 +Msg = 086fa00b43e0272a1042ee53566cbb48 +Output = 5b32e5d6bb6d621cd8e6ed1c3f12bb9ab6690bfc2e10c116d90365c2d7ddac5e0ed0004df199dea9e9fda9e93b7cc43976d2c87dc00c63cc2b2fa0f3dd60c4baa0e16731c3f9a98f59371ba1c30dff28593d44c2e7c4a69d335e501d750b1e3bf1db6c2c3385c11b99a88b0a25edcd1f1b17e0da27bb0b9676475e7c + +COUNT = 981 +Outputlen = 1000 +Msg = d4864e1066c400faed9d69228cb96093 +Output = bb406e05a5226929321dc9d373f54daa6dff6429280633032b9261c62cc763a7e0a6928d759d70c5d7ac0ea9e2e95c583482c01a5fe3f9188d55251be4c294229b4e85342eb11e3a6507a40588f01fb2397360021f62dca3392673992efa9d87d78a9d32cc79dea8f07ab718351abe9117e097ada9db8350856ddefb3e + +COUNT = 982 +Outputlen = 1000 +Msg = 78b384369b2ea172724aa49f8581f223 +Output = 224c6d9edbe16e2578f6439bf21c925b33bf9cfb4f12faa369aad25d400591da7a5feb56cfa2b57a501a32d49e2d2465763f66ef6a624e274af24d86810dc3e62eedc5742bac7c2802748e2b85e83ab2fa0690424932434d8ee35e54b17064973aa095504ae3c36b6af5ad9c95ccc9792d45d7871f42ccb37c1a9376d5 + +COUNT = 983 +Outputlen = 1000 +Msg = b5f0d6509034cf5bccad1c8d2edec618 +Output = c86a22a6e2d59f7cee21286eab5d70a04b596000c29dfafc08492876677b9ef3dba2992843bf92e09b9a33f6f593fc082aad6d2f1c6782ebab7d3a9fbef707732207fdfc29eae3bc1e725080eff08fc74d1e3ae6486fd7f612633886d020e985608041334bdb659c3e7daa07f8adf8c6235ade2647384fbbd92d8ef3af + +COUNT = 984 +Outputlen = 1000 +Msg = fc77a08c0593ed01cb086e19f38177e4 +Output = b1c3231dffdaf14651df7cc473d1ca0770dbeba594735eeaa5a2d2f1e55175cb8b724ba54bb88b542c84c32bf3472cf50a35bee66bc33329e754d1f352d0beac9b50d40468c66f698425218f0d4f02933b2d34c960774074e9d96c918697bc0100d3a1ea1863bd81047f85c1dd4af6921a929daad113d88908921dbd59 + +COUNT = 985 +Outputlen = 1000 +Msg = b95abac35fd739a6d3612583964a17e0 +Output = efc9eb8de4410091e9bd5340fb1ff99487c4efd096416cd98fcfd89f2f58aa9f3215f3a690f910cb1d22c7614bcf6343a4ce3ff0eba5b206de6fa1a8aca12950aac3f315d557be786d9dadc4901901c1dde24c06bd1005348c75db67484b95903e9b42ec4bd7761f4fc74f28f129b5e55fd38a2a2e360c281f29544bf7 + +COUNT = 986 +Outputlen = 1000 +Msg = 1a9574d5e39a838b59b111a6fb2cba9f +Output = 2bd78b044985d5b053315ccfac08f18670560aa0bb97e323a78b5954eb0822d84e67ea639df388c97d5e8e105cbf56e184bb15ff39efb299a4efd3cc54731adc0f16925b46421c50764e095b83efa772b4ad876cab4f2c1ece9ff1e922b9155c44c2abc434009107edf6f43a10d6ea563d3cd1fb84c8c237287e1601a7 + +COUNT = 987 +Outputlen = 1000 +Msg = ecd303f605ce836531243578b89034f4 +Output = 980e30ef3ec20d065c5bc0217afe380a218d5a8f9cd0d93fadcde1e44f4852c11d1a22d0a00aaf4e80df8e0101f78e1b9d916ed608f0ca09708eb71bead8b43e3880ed9dbffc585891f66f18a3606d369412eb3d976661267d4058b942460b8d19c377b60eb60590778bd2087936ebaaedf91cc3f28ae55f3c4ae851b2 + +COUNT = 988 +Outputlen = 1000 +Msg = b560ebd7d836ee7d1b0fba532686ccf7 +Output = df1143c0e7cfa2e8d4f0be58e1816d4940a21b4a276d41b318ed7b00640b324bb01136c9b2d1a693e67dca68a7a87505f88251895b6dd2547d2465d9b0fff5b6466b7de6f9cd18740e91da35b7c34cbfa9182a917a8b681040fd802239cf364db757fd618d9a98ec4137adbc8ef26f5524a97cecf0181ecf2a4dd4d5a9 + +COUNT = 989 +Outputlen = 1000 +Msg = a38d3d173a6ee95fb72f38fe7b451a2f +Output = 690a99982f2d399288db819a84f2b1b37b5269d43910b405220bc8883d52fbe60e124236d0aec89c22dc02a99d9877a72bf36b5485120dd8084e14517531b377164c467a65cb362747590e462f63449840b04a067cf90e154b22e0e33fb9eeea23a06e2ff6aa69a09bc1ca73e2e7cdf86cde77aa3d662a5792a4938e2e + +COUNT = 990 +Outputlen = 1008 +Msg = 1dc2860c36f8a0cb16424598b8805f07 +Output = 04b79a3bb249b910ab21ae6c97fd6a3c364083dc6d9de292e7a1346e61467dd71a95c1b83d197586a9e586dd5ba2351625d1b022d3fb4afeb3b538a7c153216581a9061ef86903cbc8808cfdf74d46a17412cd18d39adb09e4ab8185d86c4b3cd1cb96b870b50ec956d38f9a46ae45be2ffa982f4a668d7032821c6b06ea + +COUNT = 991 +Outputlen = 1008 +Msg = 297dbc3c364cb0804aadf0d16475923b +Output = b859011963207243659d6a83c49e4c5919bbe5e79a0c9a31981d94262b3e837f8343e0c429c20b568dfa0cc7972e8c26f17ed764b065603e16e33b755cdb37a710d2883ad76ba75f665c66ebe4c671273e2f927a6bf6286c6d5219e9b8062a5bedc5c113361b1205caf18b2cde5c94073f04450c1bc4f42b0e90d0adaf33 + +COUNT = 992 +Outputlen = 1008 +Msg = 6cfa4240b15010ab3b94dcbce24fdc69 +Output = b790f82c77cbb296417ad88f051471b9f38e4cf43a90ff6076953ab21dd03d0934035cc2ae14842ad89eb02bc071e3d14126c23d45671c2dd20aec1da024bf36f3dab07d1099093c0e455e4def481908f921e200e62d01931897ca7b64cf444d90c88a24d27ef9ad08954bb6111e433b4479a0a4110ab25943ce8ea2dd26 + +COUNT = 993 +Outputlen = 1008 +Msg = d42a9a2369a7af82b7bda82081b7f9b3 +Output = bfe54fc2d61f41eda65a4271b60c1e393712129b3f5931bf6f1fed34ba3c47c19f221952f13638d48105abe3b44dbd55e77f5bcba08899b0d4bc6a5258e5e2943c8b8e11257ed55bc2e696b4e5e05b912f75207bada0791046751a0596470377929f8694d2bf562b1cb384ca9c5a70aa8527c6ab3a244a79eed4f0aa9fe8 + +COUNT = 994 +Outputlen = 1008 +Msg = 9ab4d49d7a2878eb1cd8e761ae8adf98 +Output = c502fd12129e9e4db867893310c68b04fda85501108ee8188bf80c415a92793b9005c32e7aff68c829a5fd665dd66165478d4e16794bf022db5ceec0d8128968a53d404424854d1de06d2b692ecb4d91affe814264d8a62e369bc74f06800d8a3751a52a403b1e849b683bcf76cfede685fa77d908c2f278eed9699b9c88 + +COUNT = 995 +Outputlen = 1008 +Msg = b54108207cb0a9b0b588da361f9af62e +Output = d82c438046334a1d7d47cdad4bf3c346fecf572a7c8e72c9e0fb2376bbd2a6c4fcc8e5422e27dd93cbc5f3dbcec01ee66e7a1f179753b65c573f0cbacede17a727d0cefda1e29894725154cd3f39f2e0a7bcccf3e4ecb20db348f9786efad37180386c9b26407498af6a9efdea9dcb0b5fa3afc6f525959f42aef291e769 + +COUNT = 996 +Outputlen = 1008 +Msg = cf74770f0fa16711d04ed999e54d5ebe +Output = bfe44679264a09cfb26712dd5f3dbc263d9b0f582b7565124b923564567667151168ac3b6cef20dd53f1db6b55c8f30ce556399fc85d71c62a57cd1ffedf5d6463882d08ee936b394818a1029ea158044c3e49d07b96e17934c62a7f658eb1c06cafa7c2fcd8967cffd518a774f5c58672ab90800e64b992d4e2ed375f8e + +COUNT = 997 +Outputlen = 1008 +Msg = 989dd16159e88aa582d0e2ad78fd7003 +Output = 2ec59884921ecbe135dd2396c59508291dee1ad86d83dc4ed71a3ac5650e8bae2b20bcf5fb23d7299d1083c29fb2e503e13158bc0705643a9dfb37ff449b650a4419c49bdd4f737cbec809d71bd7f66f389bea8a048e3a5a5d8777428014e651f8498a918ced87c67d68592df27d87830328d14c612eb224ceef01707aa2 + +COUNT = 998 +Outputlen = 1008 +Msg = 08fe984ae6698a19c52a6e36550198ef +Output = 22cb4952fdd0fa8492460517c5351ceb05bafd8720424a6c5aaade3232ef003f1817427031e2e66dbcb3564b2c911cbec7a4d7738204ceb556a4fc270ddd578e2d5ad1d9b3e12adcf7f6e7b43c81ddf5a9647486b172a4ac308ca9e56e944d9221f1b384c97267032b500ba9268d108df7c0a1d33e79c9db1cb27c418cc2 + +COUNT = 999 +Outputlen = 1016 +Msg = ec083a82c1af14caade2d6afb4e5c635 +Output = 54450f356d706906fb6be0d6d88a2b933cd2e2130d76b9edf49045a2037128ac36005330b28676ef1b61fa724a63f41ffd923a6e1c89bf997f823b958113384ec6bf0e3664e40d973f98ccbbe92101c36f47e348a367644ae8498a7983ba54228ebaa8c3bbb92366998f0016781ef0484e4c511ed5e1833592e7e599947042 + +COUNT = 1000 +Outputlen = 1016 +Msg = 97f4ddd3d1695b066c355b1a38fdbff6 +Output = 70621d6ca96be36691cf34d738d271034644ad1e7a0a4ce959b3f69dbbc69de2112c827748ecad24aabc9781b2cded98d34cc8bae901d6bfce7d621c874fe99648fa23026029a4c5ac2169a8bae086ed5a94500b4297f69bf9cca5d060eb4b6f1c63a79370adba10be129e8dce755cbd3b168b8ea7c776b6c2fcf00207b38a + +COUNT = 1001 +Outputlen = 1016 +Msg = 7ec904b376ecb972db147bbf79ef0ce6 +Output = 0f233af03ebe37ac958197b5fd2141f93689392aa7d2cada5be572c529c8aee57f0a1036934cadc91afc70d6dccb5c938205880f83a3b7417990708e553f70652375f65bbd21807b1bad65ac810ba9d448824b96b16d2b716b3bc8679f73b67f98d4b1b2fe96c2c86b9de8d425ce2ac00a1ff6526751d97f3593fcc3d02375 + +COUNT = 1002 +Outputlen = 1016 +Msg = 65b08c32400326e6dd416f464c89141d +Output = c6a1dc96f107562d6f06526fe74ab6fde876443d1c9584dd1e10cfb7b7660e8e8cda305fc10f09938c676236de34bd4196aaf5e2c5a14a4bcf798a9cff40450bb4b3b9af8d2f6dfcd81e537372d0d24db562a63ad44665d5e8eb0afa46e3c58e3284f33afb420cae37ae41c12bb7b667c61448403d70dc8ec0627278a03669 + +COUNT = 1003 +Outputlen = 1016 +Msg = f9fa5b7feb0ab50dabd286609f6e871d +Output = 25064cc2c0e4093b8d7007230841ab969ef9be256ef06087d36959cb1026500f53ba46818c01ce47a2f9ebdd0433db9af7074c87e846f052e342bad14e9fa7a0e120621fd9c458fb13c66e4126f20bd7f5f76e35738c85c21490d072674ccc19acbc14b8f9d5443757f42574f671f164a9346427b11fbc4fd8f740a866e36a + +COUNT = 1004 +Outputlen = 1016 +Msg = fe0e26b47df48b854b0b0320aa9b8a24 +Output = aa6a03ee157c0827ad8ee47ad6278ac785936f5192be7faf2c85eead342326f2a791f56c26c276301ef16eac7774b7f7a0fd41785bc1d98178b274698171874f4aa5311105464666b5add8295787cf5f2daf6b163db20195e529c382252ded6060731a2e30cf0e5c708d61ed24c89e857be6b188fae3b1973fbcdb42a22fb0 + +COUNT = 1005 +Outputlen = 1016 +Msg = f6cb4f2efb487a05adcc5c523239619c +Output = 728e20881d6ff0c864d620fb679b4e3d1dd2be402489e9cfeb82f81bb47b1c04d234ae5f62f6a893a563ce4ae93f28c832c5b988f30cebb66cade5b5c1eea2efb9bf0d8551c5d790ffbba9bd893563551f6e05af0648c94c057a3748d1f5afd4a0f40d57b74d0c29125314996368f52d24206f8cff0a68a3437f86dbc3a0d3 + +COUNT = 1006 +Outputlen = 1016 +Msg = 1d84bbbcf7fe765705746f98018a4ed7 +Output = 66672d2bc224d99dc7b106a86432cd9f9456c6518f12863577d8d2891cb95d187252ec727682906ef17453f411032618828691e7210b01d7f5f184c2e758699500047fb6670449e776427d98cc48f524095f3338e3c6bfe35e7ec43475a5ded6ed279a9de11e36d9b044a2aa8f79249cd959811dcceee1c7f5a66beed8110a + +COUNT = 1007 +Outputlen = 1016 +Msg = 7fb4a31e06b42c273c5c931a334b8830 +Output = a44ed3d3656b3f89535304239759ad7cdb5027b93f7b26a0ed143f8fc35363a17ef654fc5ed07f4f6815d1bdfb427b0d324af6a34a367aab1aa9ca9da922e52d04876cb3f488a4558bb37df1cebfce741e263080d1a33bb0083406ea5d2c137293bb72a2993987058947201fd5f441a83e4603ac0603ad65f54e06b35e3b76 + +COUNT = 1008 +Outputlen = 1024 +Msg = c820321ea329841821ac4b1f3d047b21 +Output = 70a9a93ecfbee007eaa964ae6f305c78947a603192625b97346fd58f7d061462dab9fe6e7201b477d2761eeec7ad95b2ac4df0658c9350d4183eb10b9353d9fea26a0254fd97c45030b947e35b0d4a0305e9212fa1193a7a60b7bb68a61a9c80f658c46584c8cf022264225f733a6646d03c9bdde8900fa32719becb12bcbc08 + +COUNT = 1009 +Outputlen = 1024 +Msg = 76eab5d61ac50f3fb5b347d38db5ea34 +Output = d7146d6cfedd7fc7267b7488e2111c5b6e768e4e67c3c78c10d6f4074daea55cf0c7917c5b738c2bd78ffc0ca9097984b3b64d4c11ba047aadbe4fb30771f37bcec703c4f533b3e02a8d6636efd161feb723f153f16a63f2ffe9f1507f4b77e963a52907e5b29fd502464d040417646b1410757c6691e13fdff1aef3853665db + +COUNT = 1010 +Outputlen = 1024 +Msg = 9b81904bd4bd65759dcf2980bbf769d2 +Output = c689d4103105e054a96858702a78f8057d5eb3f3c999c5839fa8c9f4500203b89a3e56f3687ffb0c30315689c39cdd033a6e736edf9158e433e44d944a86926e5eaff3f049e922e4fc07d2c15092bdf1ed978c506786b134b10c8fb9cde9a231bfc821c07dc041a947fa49396c3221c5cebbc1abc92cd4c4a213180b883b3196 + +COUNT = 1011 +Outputlen = 1024 +Msg = 654464ffacdaa47acc09a9f10f84abd1 +Output = 10afd4e9f29a19f3d7f16a11082825e49a5f7ea2502d0a5b28d4a5e924313ad05d9a8ab95105b60f72d1f9a4449f6868924af86cd652ad845465c244db14ab5b480800bb8ca09c8fa12ac22cd7849631f4c1656fee658ab65537abfec183b66ce97e3c86f54272b2d4c2914be3a3fd5925363d929530ac31c49d2eb2927ad69c + +COUNT = 1012 +Outputlen = 1024 +Msg = 239c34537020ac1fafb33dd3a6d9e9b3 +Output = b7061ccd958ff0fa53e7693c4f1b3c649bfd1bea417ff0023f6ef24c362612322f1f992ced85b401d587b27cbbdb36e898b31ffccb7e14ad694cea5d26970a67dbfa59023b7f11e84ce8106948e7dfac71e570152fedf2320d405f9adb17542b4be48b419d0d6e3bf2c24de4bda0a6513d81f677824e037ebfc24909cc507b08 + +COUNT = 1013 +Outputlen = 1024 +Msg = 718b9d3439409930b8a8f1b8b14b9e32 +Output = 35bd83d4f10f12d337d7bff45a4618d2dbca77918cd9a0b05ca38baa0e030f656ecc719a1b1fadfaa55b06c5cd7a14777a0078179203fb98ebff1169476d86d13890cf92c7ffec33a04fbb7f0f57e99ea178471cc1f7cda10dd84c1c4d847b29289dc9ac7d29835d3a568f75adfa41e438cff21202caadc6fcd9fa780f923826 + +COUNT = 1014 +Outputlen = 1024 +Msg = 9de2e6d4cd87952bda691c536bde8401 +Output = b2b2739f6464964b7b32718dacdd1e917e9db46de6918519359b39faf4628f82d0f0dfa518f6a58ce0ddece317eaaa9157e619005c8b68c34c7241e823f2fb2a0d25944de48cc29611ca534e0110329133f8f45c31d99a3abfd7f39892307fbce482641a7bdc0938898508100150e2d868a97cf402d41b1d0e67fa463f6d4d4c + +COUNT = 1015 +Outputlen = 1024 +Msg = c020076f4e187750544f3ffa98fc028e +Output = cd88d10a837672f0a39b616880ff3846faf9b20d6e3495750a148af06403b6435b345afb3fd1fc56202df9788086690b67c8f2029e6c32d7b94c7a0154aa466a296e6f3b348d75fef1d4820753fa3b4315b43f784b7b927e80266c93490b99ccfd7fe64a03ddeb373e41895b81707f3e95604c43fd7d730234fd8eff7226f4ba + +COUNT = 1016 +Outputlen = 1024 +Msg = 978aaeb400f5b60222a796c106d6bb7b +Output = 0a674da0f0c48301d9703014f2e7337176f26fbe016380f3814ff7946057bd9ec16a3e589022f5b2e80ed32157db94bc24c0961c4ed0fb9accbb6d810f66b2bfd160854627dba674c858d59980f993b53a1e1050b961c16884c0290b98fa7a41a57a38831b9d1dbc9f9922c8543d69518dd4c98ef8a9dfe60b54d7eb7e0b545b + +COUNT = 1017 +Outputlen = 1032 +Msg = 9ac542038a470906b371d9ee376f7d65 +Output = 325e85390bfa7d16127902e72107151ea5ea1b090c3de9e1ce4732a3a1cf5bb3ffc8a8401a48d75c313d0b5373968dc2189d3365a412731e70114fc7ca7ba86fd2d0568c2d5e4a8c5d503a873591b2334c8cb97ffab3c3e0cec7a9132b3f5e2f1426f168b54907bfe59d025625ee589b73e5496d18e20f83f8649e9ae0db6444d9 + +COUNT = 1018 +Outputlen = 1032 +Msg = 9f59902a4dffcf1ab26fda21692c4060 +Output = 591d339c9cfd8062f423cd561acf930e2d1486a9838107d7046b8ee80fa2216b4adcbf77164f022d5508498846f1ec76cfc355c65057fc9372fdb5cde94c24935535fc1ef5bbe4fb39a215b04c8367c24ee69e7a8fb10b744e82486b8901e9c56d081a06ce8a0b69e8bd10a99d1129c2850caf8675b76a55f4561b38ecc7ca9296 + +COUNT = 1019 +Outputlen = 1032 +Msg = ed411f69891bc41fb9dbd242a45ad502 +Output = ee6be928db5957ea5b93825ce93f0b7c8e67dd6b7caf04aa98b3ed93a6a40abafcd8a3cc424fcfaea10e8022fdc99dc164a514af7365fabe5d7c8c7ade6fcc17a2aeaae5a3af282cb9a275e22d235d13c0f2ea6a8ed2acc88b9fb827ddbbe855c5468a55650a613ad55e0bcdcfc47453519c0dd0f6c17bb72e687ca8793f5137a5 + +COUNT = 1020 +Outputlen = 1032 +Msg = cae31b16ad039d2dd96ecf7e704f81ac +Output = b45004370644c1b97a8e1a9991f0f764ae555fa95c929a596038df34870159134ccb8a5d79e467722218b7aea2fc00af586c335907769b2fc9ca958785c6c4605ea3efb0660dce80e08254f44d85295949f6f038d8f9946515fcab666289bf16382598da81723ba81c9ecbc51c587695972d50ab2b3c2ee6d7299436c799c3206b + +COUNT = 1021 +Outputlen = 1032 +Msg = 245783a1944449ed14dc8284d163f168 +Output = ecbd795610d89f353f6aa6e45444e130e6cf099362f5bc079fbea4562c7f5272d582440078b9a39e57716bbb26a65983fcea18458a89db03cc5373d597109007605d37ad0484db73dd463d6b3c07749b37d4fd027486e3f4574a01142d2ab7e7d2d87ff669ee0275cd1734ea00bcd78d8cee96fd6d8f24b50b3ea2ba23450a69d9 + +COUNT = 1022 +Outputlen = 1032 +Msg = c3cda27a5a342506b5650c2324fecb88 +Output = 86f010e1609d6b5953bf116b197807715235c61a113612e4d72a557f16cb562ec658554d0b81489df342e4130bf91dae405e522cac94ec9bab0a085143ab7e69e9b8a7405eaf1f3d187065931c651c9d167838f5605157102ff8a7bc625869ef9e744c246ef6b2af6554a35c3ffe4ff7a2d7733d3b601b47b1102a6fd6bcc8b355 + +COUNT = 1023 +Outputlen = 1032 +Msg = 2530c74d87674e732696dac2a134160a +Output = 75dfa7d28fd014e33a767eff1c2823e9de0487bb14c3c0c5b2c8a1e26df0f6d22e06ab6fe623a9ca643ed3431a1a0d6ac16c9d8875f3a8c7dfb98649ef420186c423e339ea6b3a786d2db1a5e4f114f8339220f4250d51da7f2e840e9a52166d0d012804aeed73996a53150e9c74c9aae08c2b5c0dcd38c72e7e2bb0f64fc56fd1 + +COUNT = 1024 +Outputlen = 1032 +Msg = dc3647e9f4abf20d5753c27f9a028fc8 +Output = bd223fccea6248d3870e93057f3a52b394f516978650f101bc33b3d01adcccc203642d48e13eb32c69d73ec887538be226acedab48cd398d97dc8a29f1487f3367c0af3c309eb371a4e8e7222c2dd2bbca5d624f9273845b296b37a78f159d350d23e2ed281eaf4827d0c1c135c3d2050c00423c6dcea288605b927ac764e9c73a + +COUNT = 1025 +Outputlen = 1032 +Msg = 46dd4243a48a2bfa67c338eb8f9a04d2 +Output = 91beb82e4d27eb3ca460462a5ef4ffbbc1507312f26f6c98a91d3ffad79ff9c984ed18b790fb5f4280026e55ae87f35ee156254d8203e0d2d8cc9bc1bb4ac48737e546f46090c009621ccbde9a67e8b9164add3e2c2a393008fd54e632c8bd030bb5069a1351f8de938b483b9e13cb0d3a3d9422b4a76b747b51ce0246288b9747 + +COUNT = 1026 +Outputlen = 1040 +Msg = a263d35c6bac4c37461a4aa30af38db5 +Output = 610d9fc67f912dab42f48609a38d887b14b728d4e934c83b0d74d99a6834b310b0ded64e8bbbb7e1bd39fda574c5e921233d6a05de89963527bc1434ca59ee2da4de5bba6659343fe4d2d4572b1dbef55df93baa89d4efb2d0140a9fdac778f11703d46aec408f7e666dab59346fc0c75e621a848c964a64e89056eb8c4f242606db + +COUNT = 1027 +Outputlen = 1040 +Msg = e583a579c4419c487bec6baa22cc8a4b +Output = 109ba5fa32cab9537b84e2f5ae62d393ca9234f0374ce7f780e7da9a992a2c96c577fb5b37e604bf77e493ebc2ed3ba6059ffed3d83fd823d4a7e9788199950a287d7df302b57de98548ae64d1263d6d6629e52c5d4a5c7f814678385ecc68236c865627a603d7bbee7b631edb4a7a9ef75bee493cb379fb929d6e8e9211aaeaeb78 + +COUNT = 1028 +Outputlen = 1040 +Msg = 33cec827126d7aabfe80f558e15f0a4a +Output = 78ac2791ac35889601472d056bb03bdab2f2432d3219716d05a4ba8df1070ac4b3202c83b87a222448c4717a401987cbf903703c7e0dda210f24d92a7dd2db0960c53719133e41f82ddd9ec4f4d551a102755df8b8679589fe7740f61038a20e2f2573f7a81fcdad4426fa4f7227e26513ff5a8f1f557c58a237f1b43ca9d4933421 + +COUNT = 1029 +Outputlen = 1040 +Msg = 6cb984bd378ea8a8a8dc1985c998c907 +Output = 6c32227237860b2f9d9bb2984bb581c4b0244c393d26b5d7dece8e89c95cf8ce4f023ca7989de9c0842b380da41dfa9fdf7e6a23104496c5c15893e1f5953cb7505fdb0bd435912f3b98dac47f8331a0bf44dfbbe0242f55f34c4453f029e708b3058e2ca33ad499ae767680d3376c554daf7ba327179381f7afa9729f7870880f84 + +COUNT = 1030 +Outputlen = 1040 +Msg = 2cf70e14140dabe5e7faea5455c781d0 +Output = b7d3d184b0f3733fd4445f0222f3ef8ad87c9ad182a8a4c7f1a90dc03f0ad58da50e06a92ea8437abc3899d30e3a1f37de573bb4f5f6a87393f8fb616a74cd7611b2f12e7796825201dac33b6bc7b4d32913a40ebcf6614a5f73caf57df46bb7d5688578e7cf0aa298461d36239be9524787e49c8be6b111ad4e937dd978100fe024 + +COUNT = 1031 +Outputlen = 1040 +Msg = 78102c5dadc070d9a4df47f89a46767e +Output = 366ce36ae5f09eb284c3acd7c506b67b46f66fafeb8838186b28fd5f6b0b6b4bb1513b5b640b5c848c796958da04b1dc004d14833dbc1962662eeecb3ecb66a2b538530896f8921b89e8e61a8584204baba11a1f44d208e9442e7e1a56fd6bdb7c8d86c0b2dcfb78527283da03206ef4ea0b56990eab1f0bdaf8518302c2a0912257 + +COUNT = 1032 +Outputlen = 1040 +Msg = f1a909c2ba5a0fa27f1ae51d5be6a5b2 +Output = c275c0898ebb6615a3063c898f4355cb2c834b9c84c605fa2c6a5d18033a13b6f9fd73ba7eddb6730ac9c2739938b7dd9d9b0f6e33bf81cb9af1138f35d4b31829fc16e061f4b7cd81ca90a7fd818121d9685f25a45df9703f93b210b1bc21c9b8ebf0b46e19b8a96bb4fff133ccc380d73848d58d52904788762508abe228b6f5be + +COUNT = 1033 +Outputlen = 1040 +Msg = acc647cdcffc06a34cc52cf167a43ef1 +Output = fdba258ea41cba13367cfed0b2dc4ad60ab8cfcbb63e2d9f48fc6ccef9bf0395f670aff3773f23f5df3a4a686bdf3886c4bc5c8b686ce17e8ea22738d4584f8e1404743110c17bf148bc39ad37709bdd3a9959d87a55c50bf4b8f18befcecea5146b3357008ee6aeb5519c71d63df3ecb0e021ef62f46dfd5e5ea05e8ad826dbd25e + +COUNT = 1034 +Outputlen = 1040 +Msg = d29021c1dbd093103b0531c3c0dac9f8 +Output = 88b412508bac420d17320fc6b4d0df4da7b8bba875e564f2407b0e48da816d8e66031efc2665f61adc277cc98c8c40c650e4a5781aca412980e5b703f8ebcc6ee49cd6f84894a67c32e6451a63c681ceec3dabbcd6e8c750cbf2179ccbe5113660f0bed3d8101043f3b2b219fc7b63fb4d8d96952051887ddc28055bed5013ba3097 + +COUNT = 1035 +Outputlen = 1048 +Msg = 50a24a2318eacec5e998aac56fb0a06b +Output = 1e1bba5ad0c96a53433e93739c9a4201e0c34a328f89c79c1a07b79d0c2159bedd42cdc07625636fd5117e1de5b3fc192a78e7a6d2532db2c8487f167f36dbf7597edbbab4c18ced29fbae63ddbed49cca6145d2055aef5a9e187e9c59039c8c04d28d0e9556c0320b1197ef89310ccc972f4ea86d2334c86aa365301ace1844b58de8 + +COUNT = 1036 +Outputlen = 1048 +Msg = 3dd19c57c6c747e991233d32786ab713 +Output = 67b34180e0703ef38a8e81b6cb49c28fecadf90c063d7ff9a35fb5a7213507e0593703d9dd0c3169d5d5cc7fa04951d9c7c2335cee9429c306267c31b8d4da40f23139cf6e9a8597348dfcee75be3265552bcb5221f964186240145b69a00efc5d22ef7fd99cab58b7b7e6704f7726ca2dea0348d4a9cb92cd8355e38a3c3ac7d9d474 + +COUNT = 1037 +Outputlen = 1048 +Msg = fe2921fe883d15d432f315b145044341 +Output = cef0394e00cb6ab771bcd0534d91a935a49868843e4640e4dee17adb5b0c2ae3d9e9d071c4ad9371d72d960991f321aa855ab984c8a2d2cc7ed60d05a7ed17446c12075f39ceded7214245fee9768b92afe686b8fb9c07b92f2edf377054fbcbdc36bc6b9c15d22a2af9e4f98b418e1390d0af6a5d8550aaa62dc4ef4c420c0f1cdb9e + +COUNT = 1038 +Outputlen = 1048 +Msg = 5b2d36153588a96c64a4971934f0c2a8 +Output = 666918623581f7edf7a039ffc806f640cd4a162c7f5c2af950749ca9c6105a87c8c9bacf500cf2dfc97cd9413308e690ce7a90a9c1555e06c88e83a011b94c1ed5d4abb467b782c4a15eb27f73336389b77b2272f6806031a49b179445535725b460040193ff01835d8d9835bf5fcf64bc1efae196898d3076d22db9e9f78d05108111 + +COUNT = 1039 +Outputlen = 1048 +Msg = 76ace986dbcae5cca4e670d2d6bed804 +Output = eba326d308c177e0fb5fe56b3700d1eb3c85e380bb3aeaba85185cb9ecac57191c8d7963a4104ce231c7b2b3a6d1f22d9de3e95f9b2523adde74f83d56dffa8d4efbcf91e204ca5b4171b2318e50a3c758d623a8e7b68a7fe585bf8bff11449d9e38a853e3931349e2dc9e81d03b8e7d49a59047ff8eb65bfa3b0c359b5951dc6e9a2b + +COUNT = 1040 +Outputlen = 1048 +Msg = a284af2d6496afcbed1622dcc3bfe496 +Output = 85d0c53525cc56f90442c2c60b1db66f6c3cc8057bde34727c4f42eb5b3437828a448a90a92384a677a1928d048d81edd3d9b71bfb0f44475cbecaa2372ba7d5eef67e678e6742b39f855dd811a9296acc6737f37c53515f6487e5c2de814f3c9488e3d3fd332dbae0ce8b6e709edb2ef713a41c5a6166f35f4f7cf2ed57738daf7c1e + +COUNT = 1041 +Outputlen = 1048 +Msg = 48ef65f0fc7dff9dc7ec83d701c1b95b +Output = a714d83fbb05115c16fcbe215f4b4dd296b82ca6ec018e4a4d0d5f5ffbec4ca98f96265ba89822d6116383ca73191a195e7d377fa41d6118d23dfdc86e3ac2730ca1f2dd05146ebcf288f7c59cb2a3b603efa4a26db653de85ef438667b087577320f11d8faf7cd6993c0a4b3a6adc1af8c07ef16fb4caf0849fbc47d84de649b3cc84 + +COUNT = 1042 +Outputlen = 1048 +Msg = 167db66c16e97184378ea7af8e3eb566 +Output = ce68a8df65d0880ec5e997a9ef681e9744723dcb99aecaadd4beb324cb547b800e4fd9ff238c5dc3da0cf28d02892c91e2490da7cdec0de3eae65cb045361c3f5d3785bfb8d471178e437fe41c464cb0146965220c3e765c7bc55099685b8b3b1ecfcdaf5708366f43613cf07f3a00d56adffaa2564ca0e5874931659ab8cb9c2dcab7 + +COUNT = 1043 +Outputlen = 1048 +Msg = 30527d359648617e1fbf04b93f2c9a9c +Output = 272bda945953886aa162ac1f594634dc7bc60c088f98523355dab15741f58b3dc6bef5ceaa77f389da0ae742158c4255840fe7dd8d1b2efd11a7cee3fcef1fea69ed64352077622b2e04a5b5b6478ba9b26580274d7d476b310ce8c55243b2b76eb9750e3c526a41168413be863958501af53608bc6d21cc08b58b770424b7720aa876 + +COUNT = 1044 +Outputlen = 1056 +Msg = c0bf6c1400bf6c5a9fd0af6a20777c02 +Output = 527f7ab6f283129208f3541c924d53b600cdedc3378c2f63d78c105c03c1993babe0c2da74631d17814f068f25c511385add940264454020100bbafcbb0299e2ccac4c15c41440981ea954f537e21125a7f3eff3e3af5da61bc2d86132fd295422fbd200be479a84dc6f8c9a189f96006db074607af6284829b17edd7d6a9daf640aa4ad + +COUNT = 1045 +Outputlen = 1056 +Msg = 7bbcce4d1c78ffc7c5801e067568be5f +Output = 381f591194112c920bd965d63d70cd516793e0668f5056d0ac735b625e210466f85d174910dec7d6facf7a6cc42d04fa786afcab8773297e4d9610bed6dbd79aef79b3ce0416707e9790b75386a67d8371f6caccc54a661c96b383d3d71be1357183f0d55d2c84a4a9591869b28d4264f9835bd6f8c1d413d0cbd8e46a8fd1bb8062fa3e + +COUNT = 1046 +Outputlen = 1056 +Msg = 3d362300ec4cae350901b0130491beea +Output = c30a95d7a2b3998226b68839b3df6df3b28d6db9222edf748ed1bd1bb8936a3c5afc8429c56a86990a69a4f6d0f72ec7aed57cb72776b66ae776dd87afe10b2dea44158a7203f45238d47142ec8d955d56e3b93e2eb157f8b3f1f07f9ece8987009aa5f1e32af7e3d2449cda83bddbaa98e2389c33dbe220f703b4ced87206604ecfda4e + +COUNT = 1047 +Outputlen = 1056 +Msg = be0cf188e0b126bff77111b81d13308b +Output = c65a6a2cd998915072a0d9486213c7f35bdd7cbbe72b38cccacdf4335a637698355e55e8081d4a476c60ae58f2c2dc102d5e7f912670582ec076e73ec9aa127da267b3f49d4fe9ee517c2a2e1bbf43c379367609189e1299c47e65beefaefda0fac5b01bc2b512a4095dfe33e53ed0d5c636f2d0382470785107cdfbbc9ea4e36cb041bd + +COUNT = 1048 +Outputlen = 1056 +Msg = 9bb1e1693f613b5c9aeefb2a4bc9dd67 +Output = 913aa32803a6c6b6f6cfc10e01335b4abb8dc1fdbfadaaa0d5dbda064024c99846e5ad476c8c689914c4b6a171f4bf12dc95bfecf533a120c5f655c641e92916f871e8ca35b28aaeb2d2f1e3ef3f3b2217b39ec56de3a243ccddd777800bfa3fdab32e52a74c74c9b2e2b378070c1c0dd0ba6fc90b66cde14af542145e47cdfebe5315c4 + +COUNT = 1049 +Outputlen = 1056 +Msg = d245db39edd2d4b29cbf614d3ebd00e5 +Output = eabce272fd8daa160475e886f48f8f3db5ce5d2bc36fa2ce4b263c346d3d702523d7fc9e2b9857788fe31856c7aa4989b554b29164c7b3f1c68a350c936f6e22891638919208b5d452c325e181a1e65e1992cac93d2b16d0ee10f929a785ecd563f63ebc214b43b177f31b61145451157100fea81479957a75319d445293947881ce3c07 + +COUNT = 1050 +Outputlen = 1056 +Msg = dfa21e90fe1598e7e1f1b8ac6430e1c2 +Output = 607371bd8fbb3de03d347a2edd847e0c882ecda97a6cd9926869a513c68f89b59aea1816e1b6cddbccbfcb2ad3c6fffe635070e59bdd48be32dab5a4ee824657fe6373a1539f6b3b526758f52c981c825fdff97e7d593013d979ff891f45067d08a71bf9d746b629a3edecf09a3e16714c546ed14c5c981c938b1ec5e0d63681067ecdc1 + +COUNT = 1051 +Outputlen = 1056 +Msg = 162c8a7db25b38089373fecc45a0eaef +Output = cdaec2f7344c84e34cd30c8b72b8ceebb406ce3cb92f6ab9fac44bbd82e0ed5899ee460e32c23ec6b0417882dd24eca3ad3ede0885513b0d6e20ff1f30101cb8fa5ec48221e3dd3bcc8d455ef78409161ceec44a3653f15d8750afe7bf4b2a2090aed7c8d8afd831c753d4a218f3b7dbafd139f8f8cb0704878c053f569284973ed2cf45 + +COUNT = 1052 +Outputlen = 1056 +Msg = 0bede5175d695f1e3078d60ca97eac0f +Output = 95b6e7cb9d5f589cc19ba31590bee236a5419e61587f1f2c0106a6e3ef90279d76d2145235784eec5cdc54061531e4ae6b9a75eee2e8085b9d384de98d4a6d5f517b777bad02747244221301d66df481438992e86bbe899e9beb92842ae670010e9ffde75d6d9868260a8b88f8e439934b6389c906f0b040083e4cce8497c8e0cb908130 + +COUNT = 1053 +Outputlen = 1064 +Msg = 90d1e31f48a6ae1b75f28b857868ed50 +Output = b1fa3ecb2d1149f28a1ab795c7fac6344cce27940540a430cb702360949854b74b6b5217960a4cbcedc77df6cfd0164d8f6dab6af3a8a16bf25ef278e548ea81baf29afe6758f9a359db1efcf93d4541eb637f239abf23e0487d63402d1e710b015cc72b402b4a1b306e47cff56667f9a941aaa5a00686c35c9e3b218c1164e2ad7328abb5 + +COUNT = 1054 +Outputlen = 1064 +Msg = 86edf88777c0c6848d97378e91677aee +Output = a864e8abc946123d15ca584e947f55c2f4879b9bc478f5c0a96da1fffde7c72822939f706537283337e3061682dbf2e7e9cedb7a1029bd4562844fa1dc5a5d89713b951d52144ab2019221670bc330432dd60a7030aba15fd28ceab195288407fd9a8fc20e9eca26c0c6c61305c6e3b5955f8829f1b7d7f11747838126b2c231f450cdd68c + +COUNT = 1055 +Outputlen = 1064 +Msg = adf49ed09c3cbec3076f07804695326e +Output = f1b1fddd8e83eec8928ff7e3ff162a5fb6fd7db0239a838e4f8edd6a9596de6fa1ad5a2d6d970afc9f3d80a19fdf7b808494ca43c1671de8cc382872b05218303482306f7de9b0856592ff5236b8bcb1630789f810395034e4b19b496777ab35a482fa68860b363d9973a35b34c34b2da8da0e21c16a9df5f12872431b16f9dc9f7d623e99 + +COUNT = 1056 +Outputlen = 1064 +Msg = 4d92276a0b9d796495d9749ab185b552 +Output = 469155b6309d36efaa322a57b06f38c8dfc28dad724ef236de5e1dbfd9916b24b92e21984d79e3aae659c25f8a013250b7dbc7717b86a3a9e253b9b48bc6c9a1a4d3e5eb1ce0bc1f51a45e9772fde8e92e9a6fd3f6d712906b492bf148085f11f478147e2f95314c8dfb0f5bb243c5b692ac037e8f7fa8f5160696a1ec5756fde21115d981 + +COUNT = 1057 +Outputlen = 1064 +Msg = 16ba82c12f91dd56c22672cfea37e2df +Output = 885ca547b3be364a574fbf80c809e8039270e4210855fc7d9a1fc1cf5cb9738bade939946b9d749e651a86fcfc5f1bfee814e75e99bb87cce1ae334c467c016d2220e79afda37f2cea38814c1cff5dcf338e7dff25880644646b56b79d1118ff36969ee957b5eb6842168d54b1a8aeb6c973c6c1ad80f1ba32448d0b2265634c9a078bcf1d + +COUNT = 1058 +Outputlen = 1064 +Msg = 82c4d29823dfc33b199bf1cf42b13b87 +Output = 7073b2b20087a495eab679db96c5a4654fa319d59228b8ff3bd7a5e83b3238144501d1f5e08668d4101821fe4a68a69ba3953737e199051ae8a2a7683203ca6f6723e3786a74a98d75a9e7854b46632914a60a945ab70258c1aa4e9ae193fb6465b2f35b0d3b2b3a88e15574b7c13fa77e03f69bfd931839af6ff0aed8e63eeaed1c0e4a75 + +COUNT = 1059 +Outputlen = 1064 +Msg = 84281575cf828fa7945fbd14ac3bf449 +Output = 071024c3ba5f6cf1d94e4eef20b2b845c61d7eda5267a2239c01b48a779f8462ece7126330f54dcac7c207f9fed476c89292086db087625473eb45c3c107c29d0069be208f66979674c102ca64fe3acad9c6463c04219da62ed882fba65f7a84bab4fcb3212b9c74236fd3f0bfb8b7f95377d2da8cfe459e93726c2db422e3c7ff894e9ae7 + +COUNT = 1060 +Outputlen = 1064 +Msg = 609eae5161f2ed247b32cbf7fc00ada9 +Output = b852884f25c7985c3ce1bde9fc2f8d04f7baf839ea9b9e0f872d162642d6a7db1007552377cecc084d1c104db7817070f1a2a95fb40c9b593f5e80baa27acf09f7876cd4559d46b490fb482749bdab98fd159a04ec41473bfcdc73fd92de478da5b0720745fdf1d5c232ac7a9ccb473e0a62141e4692e77a939e5a4652072a4f1b66e94aa7 + +COUNT = 1061 +Outputlen = 1064 +Msg = 6e49304323eb4e202655f3c8b16ebd6b +Output = 5b5ed1a1618006c887286dde87906a3bcf304c7dd59976be7b936dc69c4368b24ec3d610ed5c3efeb062c359a423c387c5e398bc2498a25f34a57525b3d562b0fb4af98ccb4ab44751b830187df466473591e8179a5f805fc46d8acb52dbaec54aa53f17407324a1fc809cdcba44a276c669b80f17d49417e28213cb3e9fd685f87acc28d8 + +COUNT = 1062 +Outputlen = 1072 +Msg = c99bc8c3fbcc1a5ebd12ec3f50f3b9ca +Output = bcd1233f4f6aaea40a9e6a498f3fd6a36c0ad569f108a4a83e714003ff6bac7231d17621046291cefafd4bf81567820d36bdde2c9fa32d6bc455b496357e9c26f9d01779fcf9ce1b8a9c0e0420d0e880e4628cf942b650f14dc1934fc91b1a9ca3767f76a89ccbf9d0ba516a73ca78cacb4f44eca4afbf58009087a2914cbb85ef2300b31287 + +COUNT = 1063 +Outputlen = 1072 +Msg = c6397920649ecce03f030350ef2b1d82 +Output = a0853df02cfa66e8ee184f4f0e034f86f6d3c13b94e7519f6de592215b233c32eb76badffaed85878d3d03ffa42fb630a94cb6681e1808eb93ff23a99abfd4478bda460fda0e8ce15217ea36e1874b0f1edcbba89f51addcb63e0c3ccd67a248d2b86d82dabe0056526b2adb194aeea1a37863d81ff420dce67c07b561046855c5a874280203 + +COUNT = 1064 +Outputlen = 1072 +Msg = 2649ca7df44dbafbcc09f6378abd4e0e +Output = 7bd949ee2ac44c91585467876835322986d8633f835c9e519b245cfa0c7674e960085079574f70b4329619a2986e2b49720a4c58510a0f00873ec0d37b4e25b6909d4515ce50a63de498ee3e7ddba3eded3fab5b765734705d90bb35f116828b2675b0478f61c84e9e4b3f2a1473c62f904879130d75862c4f290d3697e5345a7393b12ae411 + +COUNT = 1065 +Outputlen = 1072 +Msg = fe802e75da6b27959622843cab06ae7d +Output = e835ae29c0c5b3ebd73f0cc016132e89e81c28feb17dedef264b062a2961bcdf49848b099a88af1117838c47a00c367ec9c123169da86906c1ea5c5619f5dcdaeac12a0388c0b59f703ea20d81570ddd6f934aece8a243ba7e8e0b71cba8676a3e075939c8f7715ff1d0569c8fcc642ef15985fc9202d015517b3191ad1739a4314f36a62597 + +COUNT = 1066 +Outputlen = 1072 +Msg = 0e2e58e8faad4908078be8c25279f075 +Output = 6195ec783810cb1ef7dc60759a340d2b5864a108416e9a13a0184035218b03ea78f5b42f3870b39d8a17c9b2d04571b10709e0033286cca7d3bbc81800b7c9b2419a87a8b960a6f0c42014de50c95dd2b331b478022b98222f09cee3b787040d92bec2f19acbd17c36ce63d1f8f9c8018220c746a35824b63a43d273d7b434a7fbb62f225f7c + +COUNT = 1067 +Outputlen = 1072 +Msg = 9b8f0b7da813b900b17d2dd6e11c066d +Output = b3395cfa98f182210fd3dcd47203a2efea68721ace7bf1f9c33ca88497359f69f4538a3eee304fa89ecd7be78b4646121c8103196d12d558b481cfdb08e5e7bc462f761cc66bcff4af44c3c7ce7518ccd4b77c465be01b271dcc6371af6148d3aafe02b7ddeb3b870020eb18a641188496cf196bf25aec689871c4f1734509787202f2e588db + +COUNT = 1068 +Outputlen = 1072 +Msg = fedce262d788780ecc02443fb709155d +Output = cb39c307d8ae775b5e49340105487797593642e176680c419f662cd966bf14f872b8743a6a59262384a3d7c7fcdacb819ca2116ae42f3dd3d19a90e19062194f0a4bfa2c6f6c06b1b0195fea3ef9fe4c4f807f7e470f88c128ca5dde379a6d42ee3651c9605d50b14c6854ca9f796c081a3555b14f5ad48b3fc9dc7abc5bbdff76e695deadc3 + +COUNT = 1069 +Outputlen = 1072 +Msg = b766868d7247eb82633ee43f7b4b015e +Output = a34123cfbff9984537c704141e08a4d7cc557522cd3cd615116d17fb9412d9549e19effe65d8ed4cef3551916ae6b5abff9ac34c6bdc9d590881da86d658cdd8c633c051e588c231900feeae4ea336c16eae768a9129fe6e4eb70c85be9ca06f80acb09e8704a1be398be728a02f93f05669d0e69fd5e7a4a62a5afa4ed00ece7703f874deba + +COUNT = 1070 +Outputlen = 1072 +Msg = e67fb92aeb1541f1b88c88580e2b0801 +Output = ea3b49e6304543cd1d0f9776819f80893c0850d281fe36520e1d9d04d8fe2bf07b463a99b90bb545f8a3443194c8ab17c5f42db7475f130f12a2658933e9cf76d93272142e5e553d77569ed896a80c5444a4e93c6da86a0e150521f4602577fb914648bbddb4a167577bc5d118a0a9a7d8f494d9a9feeaeb5acd04f6e2e54a112a134da093d1 + +COUNT = 1071 +Outputlen = 1080 +Msg = 109f1cd703960ad9dabecc228b45aa71 +Output = cd6e67bdbff282562ae13d0b5c41c7fe2a53fa1572b31bda57982c3da2ab3a29ee0126072087d7dfaf7efa2601b98e476387ca65abba6772d73414dc8d8ae58fc4b0bc1bcf8dfcba04006774c0490defe5501de032c916b375fdbde9878d1d76bff1e017247b564cf63e4d7b618d16548b4a1a1ea107338aab1cf34112882d21bb1ec25b5bfda3 + +COUNT = 1072 +Outputlen = 1080 +Msg = 144ab8edc40c3a4d3069848a634ba9fc +Output = ce638d2d15871f995baa531f62e11bb39e7cb48bf3bcfb66a37376969a4e902ae6fbcfc014a7cb274ca145b50e05a983549b56e38aaadc5f65a84af7309175aee269e0153a47399bbc5f81e43142508630c553131441d6009b6cbb10c2677f77d985736355c0438ce1073b8827e259d77b4be86bf0bc0c591b9024bf118b26f25c3f1327b0a362 + +COUNT = 1073 +Outputlen = 1080 +Msg = dbce11dee7ed2a71d570fe2373baf01d +Output = d98f62818391960624b1124aa4a5c49e5520a831164de025ee947e8431c9c3765ecfa59f51e5e6eec6d06cfaea0258627c28b8ddb6945843764b7c3772b589cda8939b667c6ddac8a0b27b7fbac0a25457ffed43c2f3e366c14f6041e7418c75430f93026015f270c76ac439067b9172b83a8be37a2523373fcde47334e58a575a95530a672052 + +COUNT = 1074 +Outputlen = 1080 +Msg = 63da3bba88a85eef4d70033fdf79efac +Output = 9146e34d280795a08a77bb9eba4637830543ec92ea21deeb2ae891f2cc79fd1d26da344747347fbb2bea3b2190075ee54a55fa4d4bfe3753535c61aa5e0bbf4a6d23ecf7b7ec345f0c84048106ece621a85862007c13e29725f22bccb00a295826b87dee1077bd87ed2fcbb7cd80d8e155816b3d4ba3a3ec50f5dcd3170ba894fa9ffb59109e40 + +COUNT = 1075 +Outputlen = 1080 +Msg = 63dc34d4260b7cb78ee6fa5a905970c5 +Output = 7963578dbbf00723359a535e6bbbe1821b99940e388f1a4e37cbbd2b8a8f46b690de9cf8983ccbbe38c8b8d45e450a7756345f12693eb1c86dd446180613cf154c7e44c6e1a9c893a0e7a7b0dfe5cb478b182078ac913019e56a529d30d924db1dbac13639bd9468eb65dce9461c393ec1cb9e07ba95b0dc70452fbc1f7746d51fc24e5cfafed4 + +COUNT = 1076 +Outputlen = 1080 +Msg = 03bf6360606a59d72da6f939808323b6 +Output = 89846cd880222474a17b8d37cf94b4c25dafa7dc2c86e470e1a5bb82e8eeae6973693a07fd58c9134b36e400c9f73979345b547fcf6ae990654903b139c86295783779c4ad399062bbdd9b86197dac9563507d6fe4365e3ec73025537af49e28f01643014ca574f9b396df2304aaa54a5370f9a8edda558873674c404246c8e403b71efd5892ab + +COUNT = 1077 +Outputlen = 1080 +Msg = 35d0778ed3521c5a83513af12182bd67 +Output = 8e1bc23250b1eff58d8b9af008226533b30656329f799df1d0dfd170a16f170aa91197ce11711b8bb6c3aa68703ac889431c88df3c3865da7ab9fe07b928e0ffb68fb5e6ef901c5c2c05312a1e3d9744dbfc00582776d70acdc6182c215bb8e0ccb8f6dfb2372caffe2dce0f36f99692a30ef5f8ed5b41aee6cde5b4b19f9b85de355c1a404d49 + +COUNT = 1078 +Outputlen = 1080 +Msg = df979c72ed7521c494edb55249e9aaf8 +Output = 1f6f2f5bcf1de8a552d404c2c1c308488060318aa74713b63d559ec7d459e66af4b765e99cc1f101e85963c77375bb37dedb42138cbb597ee7ef8ed0a6a298919b2a9d8ec4263ae75ca204ca89470744da42b219c4b5716a0e928aaefce734ec8803f98e1ba40e2221599a80467592769e1426a144191134eaf80def9e20957bf1ebc79d1fcdb5 + +COUNT = 1079 +Outputlen = 1080 +Msg = 43edfb5b8f26382eba01d9fa893c709a +Output = e0df6374ae301a38b2375fe82cb0943fe0d804f055d35f36465cccc47d28f3fd39fe3f7f1875bd0c8279b8c053014254433aa487bb2fbc9538a838562b16b271fa45f46102df3ddf26e24ab1ef301a5903dd646192a060437e56f92bde50fc8d39b18b1165aba1a53248b338cf990e2f12177503a074ae7f1adb929731059efbe5433ebfffd228 + +COUNT = 1080 +Outputlen = 1088 +Msg = 117e400be459e8a3ad8dea08787a6ed8 +Output = 1bc6a0615443bbfcdf94c0924cc3de74904b57ac53005c86ff95e4631b4e96f0c33f94702cd74776176241d0760934d55b5f1215756f8ea46a3ec5efcc5641bea3661af3f329f385be13f9797a6a60cef86a38e33da6c0337f054540b805ca573de4641b03453b1343ee8822b4ebdaaedaec89bee25371469e2027d00d83970ec26ec89d1e4bd38f + +COUNT = 1081 +Outputlen = 1088 +Msg = d988b2c54a2b2590b4c8fe3a5c2045b5 +Output = 0ce8062f248c13b25473b59424ab87ff2346bc5c9da084e6122e5086fcf65855d90e6b1c67555c2810029eca45ec443bbca912a3002fe9a02b77042d5beac7863b90e4205f4e9ebb328d9a2bf88fd71a18e6e639e76534ae9b49ae3eabcf20ac1dc277395a2ff6a794f2bb398496b60aeb88163dee219371ad603a5e61f2d704ace1f653a98cffd9 + +COUNT = 1082 +Outputlen = 1088 +Msg = c7397340dcb02b06fa43ee8b470eb9e3 +Output = 9718f1361178719edee51043c8c25a759d6332e1ea4cf2058eef225fb6f552fa3ab1fb52a1447fd5b5682b16adca948d98fd7c9b174c197e83bac4c93d7185d7cb589ffe2b49bb9879c8c25b88e936febc0540be8dafdb67ee9ce9d087c553b4f38251b22263c6ce1bf7899244c27f0e746ddb8c46e157f8c35bff0475558ad3bc5befbe523700e3 + +COUNT = 1083 +Outputlen = 1088 +Msg = 79ae98ee9cb0877a29b6b66c17e28b21 +Output = da4d1c377cabf0e348e8407055d1b734ab842c2fba1ced7bfee9da12266fcf550400891cdc2e6088503696b84ebe6be2307e7166ad9c9307dae97681718a3fdd4735fcf09b9772199ab8c500991df8884b820f2c63b0535fabdd0e88d7553a1b82add27acdeee377c59d2db27aa58583dbc221b570faa7932f27b3102eaac0800898abec3cc066a1 + +COUNT = 1084 +Outputlen = 1088 +Msg = 4543c9e6f06151e865d6b5ae75bff060 +Output = aa653c86a214d56ff993fab200d453556eff2e531cb351031208c1cb8b9a594612c66e06284cf5008a5a45371ecbf92e10ff1706af7886bcac8eddf5042ae6f28827866716a5b1913a508efbc80f5e273c7c17cc17f1e02c5a356b1889600702d587f3dc945fdf0a6df43b4756532aca67e9da6fa745bcace55f2169d262334f39d27de7cdee4507 + +COUNT = 1085 +Outputlen = 1088 +Msg = b6be92ffeac8bde44da35dac3b4b5051 +Output = e6cde5e95e4cc7784ce631189d0814c50045c00372d0b07c0541c7b2010e8db2756e0ccff9b3f10bfe312d4360af39de434c2e4797e39b0ff9ab30a38faaac791e6ca7bbf58ba9ed0a401df73172434c9d47065f314303f82df9b30d6828cd5ca7ad9cb4b4bb2e01f66dddc0f65465ebbdf598bae38f643d232038492873171bf08cd948be2d1abb + +COUNT = 1086 +Outputlen = 1088 +Msg = dc49a889193e0116eaa195622cab490f +Output = 86918a0e22d4defa3b0d79e2f7bb1cb126cff482cc89592497278497fb2f10e2b857fa602dde5d184cec3ad7d2ef28ff7106ae48f2d2d00e51c7176fe325110949ba12c05faccb31e24bd701403189a21af0d22d57aaf2625383b984df96ab6152626c3e53f536cb3cfd6dc3df33ff2b8844101a38872ef2132e9fb54e2e8bc67ef1a43466aba377 + +COUNT = 1087 +Outputlen = 1088 +Msg = c17ac143add1aa0248b909e1f31ee855 +Output = 9b2d10c078d01d291c7e4b931df8f0ea21a22879bdbb871dcc823455d43f508b6c94840e4fbd0f261054e19f08ccdc60f7ec62b6b0fa1e5023be1d096434795644ed660d60e638ba110758709a5dfd8673efb8b5812dfbd0d4d3f1f79ae4fe2568af9ea23909c045f247e0653e9f03caabe8e2bfdc9bab7f1842e9a2f0c83f3b2bc03e5e577477bc + +COUNT = 1088 +Outputlen = 1088 +Msg = e03e900650a291c12453310530eb764d +Output = dfdde877faf81002c0c4b1517b6201882aeeec7428529a1acda175ccb90ba34e4f200d61db41b455f152ab5a3fe5da4d950c5fe7228bd486abb1da756abd96988723b611ddbba6b00a47eabbfbd7d270f6fffc09600a6ffc72abe80441dfb93839dc679412351edc584072bc25c2f54a39c4deeb1edc8768f7a8597a941d8dbab5d0c7e9a0c569c7 + +COUNT = 1089 +Outputlen = 1096 +Msg = 47e6d70c01520668769d62d3ef3d9e0a +Output = 30fd44c645ae813c877da92633e692efc24d01be938a839b52fc62e2905b6c5f510ebecad428d62025a1686e64f87d3c9bc00e1ec89947f76c04abbcce77cde07b590e03f023445b94530a97ad157b7eea40af6f61a5e390946483ec972281e98797073ab345dddfbee8feb633028fee2c3a86612058974246fcce650f4c2c496d0db43a15bcc30a59 + +COUNT = 1090 +Outputlen = 1096 +Msg = 4bff8e8f6c673636d936c2e60e0b235c +Output = 7e0ccdcb0b2768509e16f8228748de52cac312089068ca8f8ba47d4ddf73f077000b7a7763880b3efb1af5b16c743a7406157bf7400e43a11b4cfcb3b3a094561fe6fc25e1c6423803f532c700e63a31683909a6eaaae18bbf47f3a2023011e68bc42ca70197595dd50501c1d4393055ac46fbcbf53f1bb20beb1e4c08546b58d38dca2876ed16a9a0 + +COUNT = 1091 +Outputlen = 1096 +Msg = f97cd1a658a0e3388d82f8092abf4843 +Output = 872eb59d9d70b83f5d39e7de815b3bce0179b04048e6de9664344d3c64693e6b028f639ad8cc7247fc80abad96091967087f2e9c70dd202717de8e6bd8bd9f17a93928c5c172b98270e9ab41224d8577e60db4978846e54496ca2bad6fb54ae35553f69ccd9c82a7478b82796ca8e4577838d5939a2159380c906b5058a99a7db4a0cfc1f47e370fda + +COUNT = 1092 +Outputlen = 1096 +Msg = 9fc3be491d72741ffcfd9f799b5344db +Output = f9c53cfb3165759acedbdcb7388d7e63144d65f0c7eae56ec29cbea8e1deb5fb9c70f1d2796c900fe822195ef5ebdb92a65e4f312b588b4cf8b28073a891efc34c9c81c3fc647ba90e598e3f8151a15471bd716b029c8661b39c3b1b123934f491fa7527734522c6e6ba1065f47b80e1c6f7f65f51fe8adb7f05b92f2e70d3cbdebc6ed50d9c444e84 + +COUNT = 1093 +Outputlen = 1096 +Msg = 0226e31d4aa59d8c6d2f6d1718898f5d +Output = 4ad124d90504a8e0c4d3c28db36e6d51bbc842eb0da64b4d13d89319649a00d6c44999fcab35dd3d1b661616b4a925bfe81b9392ed8eec1f0017b81d9425877eed43f0753e42e7a15a9c33eb4b96b217d9c9006c26df12d3ec4fc11d5c569eae6b640b56df0a1bfeacb74623b1dfadf922ae0b987e6a110094fad040cfe685ef638300d3b334e87e58 + +COUNT = 1094 +Outputlen = 1096 +Msg = b82c63b9b7e940269eeb55d51157081b +Output = 7b9d06b952e929ebb1751f58adc0ea1863fd3eee907953cb2a6b47791a33f5b5231552e4b5cb38da4423668f3b9b042f903c9871bc6b2a5a6c10ad38efb7b23e59e3f443042662f47e1239cd2c44905f21ddd07505935cf2a016a15407457ec0a706befed5cd2ed5463d41ac11b6c69594f1c19a1178fffb3a30d1f0822d3b207d57d4e51516ea0cf0 + +COUNT = 1095 +Outputlen = 1096 +Msg = 4127250fd2738463c4147d299b4ecd7c +Output = f99c7f56657824a577d0e341425a95d9c35793075a359433064ca004ed078d4d363f0d50c5047ad9a7579d5a9e469c8eb200fcf1ddb7690e87d11ed4e5383c334590921c11206f157a618bbde8037622f13aceed9b281b2bd7265c782b811cfb7e73ac177f6c90c5dea78e98335a047d2fc2e04cc7f6603a347036db34d205b25f1fd16cdfcbe24cb3 + +COUNT = 1096 +Outputlen = 1096 +Msg = 87a65a7b0e5d863d3acbafae5a4cc9c7 +Output = b25eab758604a7c4e1f3d3a435277d12a8a86b61573a2375fb90f2acbb80b84006d8a24acb734cd868f5d04a9e537522c492587276cdc1d574283eae58dd51bbf4636ea328311264e3404488e9aba5c860eae958f80a665f46a9a3b06be57a9737e70ca103badf718ff390c2eb082ce70a723249d0fd9c1efabc6f27f38826c84ac1270e4736c0940d + +COUNT = 1097 +Outputlen = 1096 +Msg = f2457c380ce6087cc27c5e7626a13a3d +Output = ad37d7b12741105b2d783d20e29a2fc620aa4f5d39198360a9606842404d82a690f1934ffdc63efa17e57816e0412b93b6ca2a127f0110a37b79255d70d9b6559d655582d11bfd82939dfdeea95c557134b8a93e87af91ce0b4119190f31c6f43ae3dbf1ca2abe8e6f3aa8f61fb508fc7126a3dadbf49306d7dbc8789018723810a00e6d61b0e363fb + +COUNT = 1098 +Outputlen = 1104 +Msg = 3c4b7eb4d5969aa664f884f3a117de00 +Output = 7075aaaafb02f5af3591b1da41b41437b64a49a00bea28270c4d8e620c458a765deeea46f318fa3551979239c1413b47daff72537789fc533b95d272c16f8e8580e44b0dd978ae7438cb6878f0a1235f418d07214e5c8c9b2051d30e42c554edf11c253a643b33d4a83184690255bec41c93d6c133d7f0a1369d379fe076664de833781f8a6009d5eee1 + +COUNT = 1099 +Outputlen = 1104 +Msg = f83d0c37a194599ec17436ce1ce69bb1 +Output = 2cf7d0ba7857c31f8caf57b27fcb25ff1c2b9cd230e79187ed0c714c769aecd8dc190bc18df91d5a94621ed17dbd4b2846eb1169697b1d251ca27ef07c07d62ad7a97bb4ee86a0cbf0f4b895d97a8a45138e711feb612ef066c8887bea16314c2298e15a0dae54aee0578b6c9629965816d85b2f2deedbe16f0d573751f0bb004490598e30c99f8f2a27 + +COUNT = 1100 +Outputlen = 1104 +Msg = d95867886776f082fd694055756c35be +Output = fc229e14f3ca6162113f4e2a6ea9a2af9f7126acc32d798a966da33dc4f6fa231b6cb338076028dd2a1d4cfc9845c9d8d0891dbeca5be6143eaa08ad85c3afe33fe4a0f9ea522eccf6d29b407d8f1fa989d1724329e8051cf151009a93eb42dfa5af32c065a864a395b4629d2c38fd885b2e5dec0994731efc5c807039753e506728b6bfc5edeb787a78 + +COUNT = 1101 +Outputlen = 1104 +Msg = ea8122bf586c0761c478323686b051c1 +Output = d662b85df275e45e42eb7c33015e4d1b30299e798cef08d5ee7d9de3e9e82e702d01f33fb3d7430f99b99fe36970307dd85d42abf025cffa7a70dbf3a0344791d7b1cb452f1a978d08455eb61114203e2b8d2d5d6ae1ef8df9caab3c677219dd93b1f2974d4533c1c9dbaa1396113be3435c3d0a7120e65d56eb9a91b8e0602fa10e2e1833b1adde6b52 + +COUNT = 1102 +Outputlen = 1104 +Msg = 40a00772bbef188010b4b9096bfe0fb2 +Output = e355665cc5d35bd12523cb97cee7718b1c7ca4e9e4c764022b23f1b39fce986a5394a05cd05bcfef0b82b850de612e8268a2fd3dc186cb6d29cd0810af1cbb5617d8822903d42f4995b3579a11dd890a14384085ccad0c34c7dbeb4bd4aca90d7f48933df3c873726bf9534b8ecf357729f41f583dbddb29de13e7db0862ca692f45546ea5185abc2f4d + +COUNT = 1103 +Outputlen = 1104 +Msg = 8e0b06f2020559773b451af0e25de692 +Output = 43e46d8bc4afc51c50a096da3614f7aa0d1a3b6f3ff3d1da9efdfe8076d3db5c06b156e31e4d9cdf5c6cff8b74549af48232c128fdfd645c06a648555c2b094610a06efc24275531b0893d7bb17734a70c12414345227a7b4c47b28f06e5dc4ef4f8cd2cb5f614d1fa09c342265fae7e433aa1af31391951feb6bc9a77abc2555ad33fc88c8edd835665 + +COUNT = 1104 +Outputlen = 1104 +Msg = 2c4647ca622566738f60b1e194a330cd +Output = a9f641d7e5e4d0bf8891b7469cd51d7bc1133057c0a114906cee5ea0ac77a7155c53e486d6ec54113abc4f33b12c64aedd79928107ab30f2e46e83c18f651d51e2f6a0efac7e88f5a7d15b2d09091669253ff23777b08910ae4de11b7eb84087edfba079bca6ce1e738d1dd2dc985b60751528ddeb853d911c5f45ede04c002ba5a88184d1733b1be512 + +COUNT = 1105 +Outputlen = 1104 +Msg = 8af542a4d3b765385a97a614264f6273 +Output = c145081d5d14b30a37e8275730c32febffbd23bae390a339908d8099bba5412d8c0bad0a579c79de2b44d6dbbeff22f42338a16c2e1251e5f9a0f5bba18320632ad9c02f35812237a7525e0c55ae9f74da353d28dba015b665e6728db7730264ae5b7dc34d0eca9b9c80db05e4288a3371b8d4bf3ba5fdfc06343bc1d65d13f991bb1f08743300d7b632 + +COUNT = 1106 +Outputlen = 1104 +Msg = aefd329afa04993117493268a638cca6 +Output = dae4efd55b15b0525afba52fe0c6a1ad1a8ad163bad7df596f74a55d525ce3fbbd643a87feaee45fb436cf3bb7378c9f07bcb660b50a54bfd3f9c03272bc2193df3ce166e64e16213a034c6812f3ae15b4bcc8013deae67a46e90b204200e3bcba92e992a51d109e237d9eab845d387f130b8bc56f7c4e4b9730e6a580d63452777851ce1d046aa27675 + +COUNT = 1107 +Outputlen = 1112 +Msg = f62de39e0c57636428f5ecdeb59e4bf9 +Output = cf85fab95071106c6416b0fc20ed36e6d0f19ce619134c011083c274fadfa3ea7d394717fbe61a633eb521447b2dfe7b30643c7622e3bf538673d713109e108242df57e89af7bb873138fe71f608593642ac86ff54d4095b68b1767c99f0022ca251dd62ab9619fa36bf21fd8d88063035bcf50d14935dbd5bd29bed993f741d3ec018b135bb4c9f96f411 + +COUNT = 1108 +Outputlen = 1112 +Msg = fbcdb8c3679e4075b9b80530aabeaa5d +Output = eac9439eacbbe385198c6639c524c6e90b09050ac1c8e608ed376cf0ac660894e4c24867a19b15c2575ee64ff85f112caa895a579a2030f1a6b052b9c648bd38a7650f690786b8858f0a388bcab6d2fc77ca8ebc06bb17d6ab5a4390c9466f32f308e7431d3e23dbb7f54101ddc2b21c0f00514119aa06043082392aabca8e14919bc923ab13289b9728c4 + +COUNT = 1109 +Outputlen = 1112 +Msg = 516a274984dee209aa7a263b5fb98be0 +Output = b916db19c31e52d2a639b84676b23bb1b570f786c305382fbfeb78915f1baa8b7190dee198810ac0a5856ed800eb1e5acdeda8e0c5b8c5c965f23558fd6d5c6851fc37a75f08c10d5ba603fcee29a21385d6323182016c8a5e6380cb6e587081707abfc9ae66158131dc0d150253d9c610d4ab4abc01274e9003e484887899fade1a1b8aa0819b05b494a0 + +COUNT = 1110 +Outputlen = 1112 +Msg = a0b24a038665422b20a499276a504270 +Output = 9f56cab65ffe5283ab19d8dc47b7e66ce267dbdd775f166d7b27878aabba4f92b14ed234788b8811394dc7048ef6e4eff461c596fccc2c72be0fc8ad863c9630cd79ccf53616b7b62e15a55454e54616606f8c53ffff9c4d147e70a6fac500cb987fcab7f968ffa02684197c2d889cd470fb873e1f2b909b9ccff676e8539cd56665d4523c97a2856981b7 + +COUNT = 1111 +Outputlen = 1112 +Msg = 35b09ab700bb7766618a6e99c3b34a3d +Output = 420d9d05a91160186b48802c99e62623eca07e3c153db735ca2e0ebde9c1b97cd0b3b43df95bdc5e5490450926f736c494015e74fd8ecc879b80a3292ada05ebb2a332567140004d00dc585cdf186b42dd34b1a11b7ee5905a1797ff3a92e86693342cdfa8f0bc9d0d821ecff8660cf25e1fdcf0d29308a4cf01fc1375b157c12d69d96f9649bc200077bb + +COUNT = 1112 +Outputlen = 1112 +Msg = d0a2cd13dce21f318bf8b428c33e523b +Output = 9f8782cda197a20515a206354215fb5ce3d310307848e6c472ffab1a2663cccaf4ac540874f513f22384d9c821671915eb3a510c1b857db3cd490d0e7f356d9fb973dee568b416402074060c86151a5612c2ca9fc759e1828c68a08838c92730f89996039257702113719050f691d4e663ffb1c20fcf0fb89dac9a9943decd6db226347828ad0aecf22a49 + +COUNT = 1113 +Outputlen = 1112 +Msg = e7b5aade78b9b5b8419b98b49bdf169c +Output = f237bc9d1531e56be09dd569fe24dbcb0425d319d01c0a3a8d68887281a948faa25f7e775c434add746e1fd9c2cca746e49fce81dc72ab1a7c8b6ace23dba3f28f3e7f09185e784057dc5be3d9fe09a5defcf7f90af2b0dc09c0256e291b6d4fc3fd340c60e8fd1ab3eaa9766201bef2b2d4ab717786953cb8dbdd5c256ce8bdc40921da3d99bb0a82f3bf + +COUNT = 1114 +Outputlen = 1112 +Msg = f2259981b060c3af5cf57d581fb56474 +Output = 015e1a273921d13aa14a0fdf44300b3c7053a913f1c01893c690f94e9655ae9bf98f08299ca8f3ca8fc2c7a5338edc166c1c414ecc03452337b35709837e53baf05916d13d816fe0ed024e150925451d7e22797f4f7563cdc176f72122a76e406da3969eacf9be5b2208dafd16584722030b8a9431cb0843cf8aefe7dc649d37ae0e68e9db715070926cdd + +COUNT = 1115 +Outputlen = 1112 +Msg = 6832b7adaac918587c17258d0c20228f +Output = 8b6c5e626316100d9bd091a23447bd4fea16e695f88c96ee8aabe1f26d037eb344601bc228927febb990ba2d7ece2311ec40fee70907187d872e34d7b20e77bce771f8ffbb809034c8a6ca0e77ce1ec489b469cef85e516cccb3e6bfa770118cc0cb7d5f102e02ac685578bf8076264d5a262124dc864d83965886e54c2c52a60a0ffe92dd295244ca0776 + +COUNT = 1116 +Outputlen = 1120 +Msg = a8ded9816defca8327c194a48a88ae4e +Output = ed7397b2215c6c412bf444b1b96fc55c531aef025c6dd13fb4ab53fcc20c91917d82c8d6710a8d7b4c24d18b54150490e98ee01b4a4b9790d1878810a8392d3fa203b066327c0c67cace3a08c57d0d30b62ba43121d8d715637884f055c55ad6689692249885dce01c96979f1a2b309943e14abb0ba8e227bceb381667579e10694bd442b99064aa88501431 + +COUNT = 1117 +Outputlen = 1120 +Msg = 7d3084706027fd271b9cf09c10f5788d +Output = 3814484d1316a06f6ad466f9ca74dafe04cdf7ddb39931f9a20aa036c101f2ea9f8c1dd447ba3eba4d23e5f9f27cc2bfb38e3d123b73d7b8c2f495214ffbab5419e33ff3ac5e6cdc98a6b33cf87afe238dbbc30f08d99246c5a7196afff9848936a9152ea67c1fbde6177a2e9177291adce2f695a52baaf33e56e7b1390a5c92a58df0b062256212b4735f1a + +COUNT = 1118 +Outputlen = 1120 +Msg = e90885359d2d90e26a87873125a19431 +Output = 5c56b158ae664a4c91e3dac83a9133f79c526cc9f4d18effffed446d459990eb05057aecdbab0d73e06576de6ce4cd7414449538cb5308f44b32824efe8039580b3b7b7b6ac32b148b502989cc214401b98cc6454552afaea10f3b9d93a248e782e711e94bca1fb4721d2ed5cc75f3d9d4e598dc43eeefa4a995a81d6334edfc31869a0a1aee45d4369cecd1 + +COUNT = 1119 +Outputlen = 1120 +Msg = b46abe8e27f1c3f2e443781300a951a4 +Output = e821b757a34f90be1e210b4e0ad60a3585018216d54872e614e7f8647102d4e50968749d109caaea13dd5d5486fcaa6b1953c71ad6492446d38cacac908f8f67420d6aa27cb191a9e2ea7a62c59b5aa359cf7d61e550d31876910d87f07a1707ca0f3a8ecb0a431cf8966846ab9404d7cf37ae90f69d524565c5733e2875a960ab07d08eafbecdb7e468204c + +COUNT = 1120 +Outputlen = 1120 +Msg = d8ed3f491ff1eb57f89b90c2eb6395e2 +Output = 521122e9c54a691ff0b1d0821ab8bb4c7c24cf0ea3dba6cddd36654198fa32c7294bf00a17e8cb6c1c747a720aff2460fca9a6d5899a298f184082ce43ec727ff7044c64dbd9a7d20e36652424b3e8f806e818c4da8181d6b35e6de5c5e287291d96a4b10386216816a3586cc788f6151906599ed22fee74ac853736c54c3f461549525b179f92c72892c374 + +COUNT = 1121 +Outputlen = 1120 +Msg = 594970465717ec638b1b4662a3d64af3 +Output = 4fdef9fd37b160be0dac8c801c34bf91977acf7ecfc12c3a3899599b480802bc2fb9cf69acd86271541b95716600bce499d5ac64bb557772fdda3b0a093571cc77ba9fd4796b3831fc86e385c2a6c126c084af60a2fdf5194f2dc08e0e522b7fdf852b994d0614296a5f40b318dd35e55dc6c3627e186d0edbe2bb50cf83d345e3f82b802ee4d607c89a713d + +COUNT = 1122 +Outputlen = 1120 +Msg = 2ab3a70f3b01836d8efceb67490c3c38 +Output = ca7ca55bf123aba45287268c4050ab030b1415f4497d5fe8dbc5386ae37d24384a2fd6a715fcad48ff9e810c1d378fa70f1503767e9e338e33697206f863dc8015b4d1e9b8f81ddee22aac59d52055a1b0784a364369cc50f403045a1bdb25b639cb864f960281b26160ec89e8ec6403e054c29b4adc3b1ae9ef69498f24e0e3ac328e2f89c71348c9dfb8f1 + +COUNT = 1123 +Outputlen = 1120 +Msg = 095a4c37e386db92fa0a2e396103ffd0 +Output = a972c62ff5b162006c11504dc86390bebdcc7390a36fd48303472ec827e1391ebf7ac988fd222907d6e8363f7a1e9a8c3a07a4b88d8c688793c7211a0e2d84739c8a0ed10744a06af282f160efc57c94cc48703262f6c021bf7c7ca717107cce05bdac3c4d3ea0e930ce741647b731ed5a6b90150b942a9d8f68e5ec9cbfb1dd37c1937a56f4f052fdd99351 + +COUNT = 1124 +Outputlen = 1120 +Msg = c60a221c975e14bf835827c1103a2906 +Output = 0db7f7196eee8dd6994a16ded19cb09f05f89ccd2464333df2c017c6ca041fa0d54a4832a74ce86ce9b41d8e523e66ce6ef9df7c20aa70e0ac00f54eb072a472ef46cf2a933df0d5f9fafab6388a206f6bd1df50b0836500c758c557c8ac965733fdaaa59f5ed661a1bda61e2952886a60f9568157e3d72e49b6e061fc08f3f1caf159e8eff77ea5221565d2 + +COUNT = 1125 +Outputlen = 1120 +Msg = 0a13ad2c7a239b4ba73ea6592ae84ea9 +Output = 5feaf99c15f48851943ff9baa6e5055d8377f0dd347aa4dbece51ad3a6d9ce0c01aee9fe2260b80a4673a909b532adcdd1e421c32d6460535b5fe392a58d2634979a5a104d6c470aa3306c400b061db91c463b2848297bca2bc26d1864ba49d7ff949ebca50fbf79a5e63716dc82b600bd52ca7437ed774d169f6bf02e46487956fba2230f34cd2a0485484d + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp new file mode 100755 index 000000000000..1faa2f8a7a73 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp @@ -0,0 +1,408 @@ +# CAVS 19.0 +# "SHAKE256 LongMsg" information for "SHAKE3AllBytesGT" +# SHAKE256 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 14:46:47 2016 + +[Outputlen = 256] + +Len = 2184 +Msg = dc5a100fa16df1583c79722a0d72833d3bf22c109b8889dbd35213c6bfce205813edae3242695cfd9f59b9a1c203c1b72ef1a5423147cb990b5316a85266675894e2644c3f9578cebe451a09e58c53788fe77a9e850943f8a275f830354b0593a762bac55e984db3e0661eca3cb83f67a6fb348e6177f7dee2df40c4322602f094953905681be3954fe44c4c902c8f6bba565a788b38f13411ba76ce0f9f6756a2a2687424c5435a51e62df7a8934b6e141f74c6ccf539e3782d22b5955d3baf1ab2cf7b5c3f74ec2f9447344e937957fd7f0bdfec56d5d25f61cde18c0986e244ecf780d6307e313117256948d4230ebb9ea62bb302cfe80d7dfebabc4a51d7687967ed5b416a139e974c005fff507a96 +Output = 2bac5716803a9cda8f9e84365ab0a681327b5ba34fdedfb1c12e6e807f45284b + +Len = 3280 +Msg = 16caf60da14b4fa9174a6d40c23cff93ed8fc9279990f749718db1500036ef2222498ffab86fa568a0611299e54e58d83281ac558d3f4d2541ee158b1c7d4d76dbffc64ae39925e3329f7fd894fa26fc1acdc22bc858a3438e1c55707a3f75ad2b33c48789937a24b34ddd85390611088cba3231b2a3a0a93e5d9a8780470fcff92cb03811234a330db353283b3bc3036f9125efb3eaed613bfa0c59975cc2e52c33b3e6e5123e1626190a4a0261e1f5ad9bc2ee34f331736b3bd26d274536f5ae90f5186c27fdd7e8c72972f64016e72d1d32b59b8715e5b867154b99cb140a668b9d560e2c307e3904d9297f9f07dfd7629ccc526e41c109c8fc7c53b604293c6cd42933e77e11031a42f605485fe893b129bcbf705c0f45a4b087bfcead5c187ac1174322909a2d4f8b61f001c4074951000c4c550ed5564458f444dab8aae2fe8daaa6a30d209fecddf2a893df46e18b4b4460e4011d23f01d4c49a4cc1c82405f6ac5339eac41385f3295c657ac43a72fed62e6daee94ef271638f292b8e18860de0699eb45fb7d3aa81f61d44158edd68ebc244451918b +Output = 21a48efd949c3f785179a0e340756a23f77d29a7625229a71a05731c7fbd5aa9 + +Len = 4376 +Msg = fbcfacf7a3667d043ca2f2670d7fab8ede75cc610a43ac23d6ebd29901fe1d6f9c1942d71cb07c73ae0a7e75ca8dad050b3c8ce33e7e774db9219523ee9e08493f9f664d14be6d492b90f20b30e21b748e42ce1e84c269417bf8b4d8974914ff8c6801a0b319b94e5d3b367167055ea40e907b5b0595eac9c57917012586a95b2a7cf9192048c94ae91333ef967edf5d342c79e2e88262ab3faaa6e5bfde2f23c2e3380084d304057a20cfcde5d60566a820b2fb560e39b090954ace8ed80e20fba5a49d0643d146b66bf3527d94378911740cee77c3d8a06042e902b9fcae1a7ecb2737cf1f9ad745fb88c78640df8c172e71027228a54359b76cca69d277d9f25da81706efc67ed0d87474276364386358c88070c5096121febc6ec6e3d22400610e86d43cbd04ff0ba1a189842e559df9f9b098236dc1601fbf36f7b625c450e143ca618ce631799bf596d42ba5ab6d1aebda13c9372cbf205f6a25d3d98289e42e2bd46aabcce7905a9a2fe0310179c28846083fd16ae50b835177c357245373b7f3555b739ff0f3b7f7c22c3a216cf9b73ca00ea1437ce71334160d06725895c6680ee9a7703dcbf3f3b69628d1ecc7600303bd117f29bdf65b29394d363d5243d4249bad087520f8d733a763daa1356be458d487e59694160ed9d09636adb2167dc2f9ee2f41faadeb60e55304354ac127c7dc6d3e6b745a954e59483b4ebe28ac0e8cd2ac4962fa7666da60164d0f48147a5c2a524f66aa37af5cca0dc87d5f +Output = f7c566438926889d92f8d59c070bb2cdd7ea5c79cda501c7cf1fba605ce984fd + +Len = 5472 +Msg = b2d23865af8f256e6440e20d498e3e6446d203a419e37b80f72b32e27601feddaa333de48ee15e39a692a3a7e3812474c7381892c9605015fbd804eaea04d2c5c668045bc37512d2bea2677524bf68ad1086b32cb374a46cf9d71e58692788494e99153314f24921f499b9ded4f112f568e55cdc9ec5806d39500895bb12275089f0f9d54a010b0d909f1e4ababe2836197d9c0a51fbeb00026c4b0aa86cb7c4c09237a72d496180d9db20219fcfb4576975fa1c95bfee0d9e526e1ef8dd418c3baa571384735262187646cc4bcbbd40a1f6ff7b32b9907c532cf938720fcb90425ee2801926e799969818b1865b4cd90827318ff090d9356a1f75c2e0a760b81dd65f56b20b270e98671f391827680ae8311bc097ecd1202a556923085005ec133b56fc18c91aa9690ee2ccc8d619bb873b4277ee778126ddf65dc3b2b0c4146db54fdc1309c85350b3ead35f1167d42f6e301abed6f02dc929d90aa86fa418746bd35d6a733af2947fbdb4a67f5b3d26f26c13cfb4261e38176660b136aee06d8669e7e7ae776f7e99e5d962c9fcdeb4ee7ec8e9b72ce270e88b2d94ade854a32d9ae2506387b35629eaa85e96539f238aefa3d487095fbac3d1d91a7b5c5d5d89edb66e3973a56459528b618f6669b9f0450a57cdc57f5dd0bfcc0b4812e1e2c2eacc09d9422cef4fa7e9325c3f22c0450b673c316929a339dd6e2fbe10c97bff198ae9eafc324133702a9aa4e6b47eb4c621495afc45d223b3284d8360fe70680359d515aa9ea02e36b5610f61053c6200a047f186ba33b8ca602f3f0a6709272fa296025258556880f44f47baff417a404cfd9d10720e20a97f9b9b14eb8e6125cbf458ff47a708d64e2bf1f989d7220f8d3507a054ab83d8ee5a3e887446416e3eb7c0b655e036c02bbfb8248a4482f4cbb5d741485108e01434d26de97aec9161a7e18169471cc7f3 +Output = 64ea246aab80379e08e2199e0969e2ee1a5dd16868ec8d42d0f8b8447454873e + +Len = 6568 +Msg = 537e36516a5794c1c1983fb83285f944a140f028d4473781853e73a9b6efd75c458f5219c04206cb7ae2fda9dffc175b041c475e834bffa985d5e9912050d8eae4d9fe6fb0a15f64caa985792fc976f228f7e3051ec6a283af2d5fbb028a8e9c57e6a319e27b86d2d97341f0ccf3fc5035582ce550c107572ccd3bf002a6dfb9c73eaae0fdd8635dcecb98d55b8293bf52c88ac5be42166d243de6f8cbabb58b5b67798caac1de4fd236f2f2877f2285a7ce656e1354b70cbe06c99b03a1f7583ceb7ae5903cdfee0c3eb70df5f191eb5df225a9f5fcd27e22af4ba153908d69915214b258544e84a56a50ef50e0c8399cbc323c0d444f0979c0d3d162815e068322aebda90e1357c44223603e55aeb78bb5f5ef023316f6ebc2cbf4d97b54763ae5b2cc2c7416af924f992867562dad5364d48c7cd1108d9f3c9ad25f875603dd2287a8888d40d637181b0e75ee2c621b5138d925272315beb6a8339dac4df39462951966617713da260fdb0d22941f0c058aa0a23c38d86fb85ddf3af21f8f892c44e76ef9a4ada3ffde57d9fc4b2c4e0730a79e19381cdbcb219ddf61b51fe108fcd9475cb0edbb2df14a81833ad108df94b7bfc4092a29765c373402f7ebc77e25b89a92811b4a38af7cadbf495663161c97ad47954a82427673e0dccd3a6117274c0ea4017f77a67fb504b961028633321111aac2c30eb6d71a8cf72056d75a6a5d4c9916606b01cbbc2e78681e99be3deb93f37adff45ae7f4df5cd68552d057b3fb79aa084ed0fa5ad40448f2c640a5eeda2ca4e45db60fc88212d910faff5415c44da4bd479c74579e66e7c63340d1e28f5c281b7053b5601c210f3ff671ca4d4f1cecc87eeca07b33a52fe208462b8f598ceecc56b84382569262596fae222143ee6a711c48e88d3cc9068d6eda1abce1c3dd3f366d1ff7d86cb9a88c3cc25a49cb06ff4938b35760db56118d850633cf09dfbb39fbb38649b7fb7276a514c008bca8bc2c456a9f48e206b48cce57baca66db8a87e965f9527c120054717e1a29c838eeeef6732e9be6febf933e761a7ae3baf247bf9f179ac2e59a4f266a3253f89edeb6d437cc02f0267acc5bc91b8887623ca206c8a7ca915c878f4e3fce2f53c2d4ad661e402506662c5db0b9849c +Output = b2061c2224244f9bef261270a92649f8ccdc59bb303f016dcc13391ef51e49b8 + +Len = 7664 +Msg = fce6b5134c950c231a6a0ce0eb297ec2ddc59302ddc9c01519f6cc73b82e289cc9917e5d7ae58c4f8b3b33a202cfcb181f31ba5492a24555ecc1a63e54675e587bcfcc59d2faffe7fa51c9587b8d14bcbad4791d25240f05b1f58141861a64e5f8e9c790ba9b0bf14ef6f58ac02901b494f7f9e4fd17c72c50db8805b711e14b2a2796899b925877716fdfc1386b390a97e16231824314d3b0bbe01150127e93f8d062ccdea58f804a07b0844b1d65c6aadcdb8d1c709f01bbddb4edb7e6e3c4492e52e2e99d5815c105905c61052ceeb42e8c7e336510be58882a225655b7e607878f5226415a3dbeb0a6d0e2ed378c9f209e8e2feb0e126f066a379426a202192440a4fb5b3e0029521b68369b2ea752fa394578ca4106e99d9db4d8234e1e674d8e61d2b1ab66ea3116acc6d7b748b504842a76ca52a1ac96eb228c126045d949a110120d4a78ea95c025f86b7d76b086a8c592b2e9eca1397b0717bc837c5762a0392335c33d0fc8415a351d26392bc7cd9e324cadedb0cd76eee1e95dcdc9deb3656df1bdbd4211c0d3e6b75b990e10193ec05e47aec29c035c5260963f1706041a580be1016cb7651971ffc39f41a9b72ca2b15e37bdec4bdbd2ebd7da2922b8e34c49d61073035ab340be0752acdacdf0420d9b8e8b0676f2c950c8a7e77afa45b17544f3413dc429b9bbcebb38eb8413063aa6bd1232ab2a9f5810ad3a55f0caef55d5b0bcadce0446c0c1e0cb23031c58ff26cc3cb71209bccb57f508fdc2f96eb22f51ce9a9dcb4e9388cb4ecb73939f25c4c1efdfd419887147853bb8995a9653fadd5e4e5c0639fdca84aa2bfb00427527a615f019e26c128667b9cf9d76d002df5d530f313e6ec62f11c58bc4ecabb4f782953308ebce75bca36c8af5d4828585d8972644f957b6617c8933f5df41adde5e57f0cabc1763923f3a30cafd16a5965611dbbec25b9505cddd6ab75f6c278241436f86ddb0a4af450d0b4377f22ab7e0a975c71ee22ac60aa87a32f694e98b3341f765d7ff00bdbccc6189cc80dc927c473e8697543e493dd4a98d2b21bca23d39d18f306e3f61ad5f7bc3832683cf35d37c24b41a99396d4840f1867b686f6513462b736428451fada11a254ee616103578c9fd9a033ca3ec8685900bb599b5b79c62254984111aa01ab6395fce0d17567a9bfb3d44fae6a8c572d0376bc9350d1b5bd0841b6da71f30be47c1035f511cc9c5356b231d3e6443dfcf6851a6ecfe0d3ffb7fb5ffcc13295ad8db4db2c670af6d348d6a4ab3084af5130730d9e270b8352fa11a7293624eb4731774af7f3b72bc7e09df2b4e7c20db267ad0091f4c6666f35211 +Output = 4b4b35d915d6aa6e64a7716045532a96a7211c5cbcab150d291fdc26a1adf20f + +Len = 8760 +Msg = e17d557607ae1b5bf061f3403ec424df0e8d5bbe208ef460388a75bcc3485beebee51a2dd46e5ffdc6af98a51045b6e4cafb31e0cc534d5f15629d396ee1c50e4a828334f180f1f3dd7a04f5648159f8987031c66c7bba67180b9095beca83704df99b73a60a59a7fd6b401682a09483419462584731c0e0072e56b6fc281d7e8ff567d23a35207fee2953f2b2c9efed8e10cc7fa79be932ab72f8866f261c9ed71cf13af728cde5775d45703c24f39e448c7721d2e1bcc5cc807dec61e9073aee164091230ce84062af1f7767da27ff2eaf6c27112cc10232ffedcf189c66b99d8c5cc10708f9f875c6e8f17d1314761322b27aaca4814fa4985019dd65c283aa264eb0eb458975794ba8c5c4f6406cba8d5100eb708315ebf3afb1f86ca100dd8b1d4816ea1f1e35e567db85ac354aec9652a316b94fbdcfb7117fb1da8e980064d16fd220445d733d2e1b075c7b7671e8bc4a74a66ead188d7f6b50d70eb3d958730f650f7f99f9fb046d942f985a112997dd4e60674f8e1c005d1c8aabb93210090f18de583b90c6f2b9724d165c9402eb43ec0ec20af90d9c3d5e1cec12d1339e5733b657a90046ffe7eadd7de6c11ac16696d9084520075bf35fb559267e6a37cffebe054c112433df4408535f611a202d94e9c06accb34667647b7b5d035dde5fc11fe98c8b089689c8f5222f3ca911802d6572e0c5b86482b899d92027b39aefc3008cd2359931cdbecd71bd1a709b47ab75a70fd3c0be2aa235fcd5b11574674d8a7484d8800b946db7c973c316c66a5443e55fbe705a4869786ae66a2a72afa7e42b0c3c652cc41edcb1b8fe449ad271f4b7384d7242c55689adb91a9b9faf193839d029ee9d471963b1f495a2206549b3a2024a6e7e87b1904db8890f0050ebab243a67c66503a67551904ed75f0c26a630257b0b1478c2b7d0497e2f9f78646776b0bd938ce20d3a1af2f28c5fb04ef5e809a8f20e7fd024c0d6c2a38310cd94b69cf5fe1bcb95d99383496829370ac952169bcb738325ffa4c61e12b4016e596d65d5ae19a5877b45ab1a14c48ba24af7b51b3d4c6e0771058157243b318fdf2273264c8e5a2b47b6d32f3738925e9f5e4ceff0a027bfa26a6f38821f8a784e5d2eaf7f83d1c96670614e7a8e3686f11045e08d779694b95bf888d468f371cda7fe3af0fef2a9fffbbf4085cd5d61679306b6bcdaa3d0de60840ec11e53c184864b8d460aa5133bdd53ccfffdf1382a71f93924cf36b93b027b93f24a94b19c847d722aacd24e42a087bc9127d953613184306e613799f5c845df0ff49d893d29fcae44ee61a33bcbc2d7e252fdfa355c116541958eb6373b4ababf2256918efc300c3bd73a5a4ee76be49b864575ce79079e4675235927e1f2ecaadea710b8858253b86f46bba57becac63cb990b5310cea42508dec9ed45a63c792f7850e24c584a62bf6b0d650facf7e32ae106ecaace3f8556a850b2eccc74d41eb19735da1bbbe2ce929ab92c138cc2aa05acc3ce6e360e6867349e60ce5a62b13a2ed9b6 +Output = 3c4a422bb47db5ef8e4e4029dd172d757258b1419444059799761138ce404944 + +Len = 9856 +Msg = e2f6f200c1ed92da4b529e459fd2e16f862bf51a0e3b094b745de24247f620afcb4bc3239c96edc59358e946edf06d17aa6d1cd934a14f154176152dfa8679925de50338e0418147572e061417bb344f5c49b77ee89d12a9ed339e572dd5cfba606dba27d618d4c95d7bfd95655abd806266cdf07257d971403b84aa280ead8f9c8af0d8c64070b16ee8d4b31ff69013856e66191af82cd40237cf0d32579879d8e5ae32f7e4dd68521d95548cb6366e8d068ae028a8933aface886795d81ae0de26fb1fb32aa157d1c14862f5c336fb42d8422de38e970bf1a9b6a297bbba2c74f4e087403a46e5b37cf3c4a24418216c8c95e894d3bfb0af7061a5812501c563f76450e73d5479bff8a062db626547d2ca8cfa839e948ffcca91589b40751472d88f63f05b517dbeda5624e845a4d73d392e49f8189d11a05f4fa32c34a07f6b3f69a8a3bbc75879cd1ef210145d38758183be3b69629e62d8a26e7e290a6f14d3fb0748863d72b577ffb49df818d2424b934193b86b9f0bdd93a1d746394d373d4c6926e33c333d800152d5185e0d6c3f67bb4a2d417a6315292480b3b77f9a2564b486fb4b03d8912cb4019db651ba040612a6f26b9932296cdfc1990c6f06314cd2b0f6f24a4d5289c368aea906f5437830f02c716240c064bbe120be83420c0ba9ecfbb970656a1f655474be94e5a3c6fb6f06dc3f55831a9e2a6f5725185ca923823229dde882f6830b167d6352cdf75d6da63297381a9572e2af5fbc4eca2f27b9c4c9f99e411706d6bd6edb0468133d3034fed2b22cdd1d52075cb0adfda49cdbd9212d4e5089d4fd911a65c21d238201d9c5578b61fb89c2a0d868fd9e106c2e98badfc25654d7c8b9086756942d1628bc11908b63f69c79a15a4e06547c7efb2a1b79c0fc81f57f5ec04b86743ce0ed0769e479d7d640c1336bc98fc8efba89b7cc6111ea171869a7cb771b6555c898df56bb1f68a45ce07e924162a17108226656017dc71e27cfbdb055dd1182b6706e5f7e43bc67d71fa9571e45880a500c5f40bfcb3b9f0af9c7f74b931dca92bedc0c93ae7b279bc6dd42c90125c37a90cb1205c5f0a0a92fee29c307343644ca51e563284eec8f1d41dca85e1fa36ef6d2553a318b2cecb95acd24fffcccb5dcf4735679ddbf9b6cfeac24231fb215869b90c5d8b748bbde326bd6441d96cb3ced3dd568cfa7a7fa3b3aa61accf955884f4b10821afefee89f8b419e409c6f3265cb46beccad9b10210f9409cf7f1743150f82f65c559d1dc8b6cdd40de58a0584a612437ed85ff6d8b257b9cf4d4400166283fe265680c6d673e2b02b7902fe7155a2bf8a30dcf487ab58f27569c20779cf7b6020078f2af04be8f84360c16555605dfa9bbdf8525683fe7b69dd7ba067dbd2e5f172b3933fc54775fca2ad825750aabb57889c576ec1b01e52b155130810f155419fd247ea6967efff48b09ca0acf3cc6698b14cf7edd8a1d8eb3aa783f53e78ba94d58f1abfb02ef35ab1fc57fc9ff371f51d791890ddcda49511a501122216025ba5b3f7508bf981de97eba5c916f920a8ca26fa31276a5eb6c255a9f006f6c1fc28fba8a35e1951de4cafb299bfa61ab89e9bc5581e40ae5734ffa41650e1a07d48af564092570a61b790a5f704c1082d831fa08d2a163a7f51eb190c6a9f46e8ec1628b090795470c0d8a6684c14911060fcb359b3b6ad360061315bbaf85d44fc79477abf +Output = d1467acf22c5550911a52f1f09cda70bda914e9ed3d303d4676ff8b1bb77cf0a + +Len = 10952 +Msg = 0109f4992ae7954e89927931735dbac6eb909131160b6df9f02c420c3cf32403c16414a8b32d1ab5708994df6d64cd136fc0d100fe5780d51682e24c2159bae7221c5e7933d2c5e9312fe233b6bb30af47318f96cf254ec24cea89b5c9b3b5dd8cf87917901cbf71364c0c3437aa0c22ddab72fc73bdff47fa2edf501d493c6e67c20e87b45430d5e5a8b9ead87989f298f62239d067baed86148e24056278201b40c4d285c1409ea80a925e826fcea9dfd94855d06ba73a59653b396a48917e103b4401edad1553e63c3e971bd504ce1c1d8c595a10efb8dbe890983241ae0daf7a351cd35eda7c0604669d8cf352eab68a954c55a0baef746735484796f7575ec740291e1db5a2722bb279be11e18415e80c36ab612f668da8d2518f8f95e386e80d32b832ce4c9179c9329877d924a1ff981f439c77a58c750ebcf473b03990a6433e88e54e02cbb554d0016d6153c297e2100598b934db9491905d8c6fe2e2c98a56767e5d4c88a9fa5ce33aa197e0779110d99f1e9ce0cd04d5b120fb65e6198c816a4422b3301b64dd2527c27b63684e28a7f7ce6405ea0f94da787c4a035eeec74c80c6be2bd43a5baf7cec84b332c15f57e9f014b1b159d4bfdc191aa05f5b30047b70f6e29c23df6981463c389d91bdd1bdad344bec8b9d4893fa5c27e579c57b7a49e1bb3ac76f3b7df92a5a71674afdbb2c4d3d614cf75de74898ffb8f08d97c879091f78cf160dba2cd68275ea0fc42b96e6eed945ebe61e2b5690a0699041ac27f6771ce3d9c77e08c91672c3130c541288c61b1e80cb81ca1f42658cd7626d7c2e29efaac25112b58a8030995ebf7fc9ba2df17ebff4584e7a7dce0069e0549f3b9fb9cdd893be5aa1267715f9c3f4e2048b210dae4aebdef0a9a46e4fa5a9b8a53f42f32375c92097720fdfeb02fb86ee48747458b381a3082eaf7d8f97b4f1f27351c5ace07d2ef3cabf9e3c62dcdd01ccb25bc21864c54a74b7d633a0bc70aca2b0eb7aba20ad3d9850faf5cdde0ec480a369f662da6b3ee4842042a70b5d5a33250c95edfbc4fe438b9d1d2a4a42c0ca0e47fb772cbd6de4dd04c593e7e1859079d0065f569cbc33352cbc6168a07b13bd9dd941a2e45edd8c2ac34e9924b42074e1d4fa795c02d01952db5980517fc4761298a783089938573944bf684d6f4bdde407a4ab2d5582feb580fcda7c5443024e41901950a75b07da51ce9e843f797e84a84735373fb1abfdb631be4a80fa29fadce6aae50fb064b4f06382f3aa121d67beca5fa147c5e9d382e073e38d4fb2be6f907fef599d35702c665bbf3a7e833551157194f62680dfeef1426e03ac67410476e0950e8c44b50abf7213772678976a10b337d23c38c8014d731368780e2ca28014ffb5e4572c94570f15e870c3340fa36db36570d936c3da4efc461b702652966556d60d377cd11479ed15c52eb64bb6e62f37282ad33d811a4e24fd55d81ba019c2f96fac4ec9dffac4868e7fc2233167d4cecdf444762b21348b8685e90586796aa7727d4a85a1d8c2c4317f03a1fc38c9b4c8ff3476bea9d4021ec7021830cd77677e74170c405c0e5618f61eccffa137717f13494624fb56112de4cb5d865d10c2fb575e66a6ced1c4a9acbeac23ea468b5cf82bed435fe3401ba5ebdb71705e3f51efc69cb97632974e68894a4e5a1d8cc6758373051ca31850cf0b9ad7508966e804f8b5639b5a566ef427ad693ae5fc2554f9e1507cbd20342dd2a3a243b8bf285e9bb98a877089701641dd5dd2c561e05b343e0ec559e02f86e9fdb89213d37ac458b118809db8be977fe3106ae6456153dd922640a1e1aaa1f7b00385c32944ffd7a4f4cf096cbf3e88c66c4a702f0f039be68035bbaa0b47a5c56963f049efd8bf9a06bcdb2cdbd5058e58ba8aa85235174104eccfc4bc +Output = 6a22c83f1d43c4c4635be4ec54e9d422951a1765d0e7a8c6a421a98942004293 + +Len = 12048 +Msg = e71258e5133a24f8b8f04fd259c2fd95de03084b7f1efdd5e32b682389c052ab680a0713d21c1d319e86b136862af426ce4be78c27e7626bd2475b7708d465859a2c7741d575ef1fa8f2d69409d366859452c90075fb242a894bd478c07df822c6a12fd5e2eea3a91e594652a8675b9a783f390f33034bf84f605c8e796411693390b739c22f3fb647e687da2c8bdc4dc13abc2127a6e0bf6eae7a21fa31bb422b2298d33ddfce306cbe23925ce9ef86b96ddc9e1a8dea662c5cb6990c8bfb95f47f590d1aa655fed50ca2e402299f2da6fe20eed56071d5d293985f771adb4ad7ce824e232ede08caf68a37e4f3f12ad11510791dc67ef4a77aa9d90387624a1c389cfd1e1c703693a465f2ccedef6582db35a7bd6717abf53a7070777a987b0be42e84d41b1470773fba7f80c2a0c7017716e17bec47e202fa758c9d9a86c6ecfac04a0dd1d19ebfef1245c8180c3695123c8d21fd138118e341963b90331306a4dab790e6afa8b4dbf4ac6e983c9b87d42d15754185707d1d5bf41a03a84ba20805332703b6769b2ce81c38e937df1fe473df4061a49779cf4b10029ceb54084ec82698d0eff0bf0976fdf0b305e8a56b9655490478de56219a51bb030618809facf8acf461ff679b27b75ca0afa061901cdd5ad30a2e5a3ccf1e0cdf007e522338112b181489da0a82b245563cee9b7c8fe13976616dcf4872e1bed9e26dc501f4dadde31177617d1057727db4b99a5676c8af948585fb6c0c019998b3cf226268b98afe5fb2441c570cadbe20eba7475afa84d57f5c27d124e665c57b8bb16d1d17f9100621cb10e13abcc1876b0a77c2df80e356dc9a9f42f8ea074389ba4b9a5df3c20fab3e81364a682df1210b0d36df6b6312ec9efdee9ff00712b1852367f140bc813ae496dca279aa66f5f2323e620c00bc737913b1433e6cf0eb5a1e0d3da8a564b506785dacb7e2efcf060d63d02c605b5b740a124c9ddfe51f806413a7f325c103ec4f41cfea7a939790c72c91932bf78bd70a9a22d508fa35401c0199e8e69f0ede420e72d91d5b35d887220d090a99ebea3acf2dae8e3615e26e607a508d06bd24794eff4d714d912676cbac56a44763f5c33bd5f01aa2a7ae83b6b2f3c5fef8051d88dd0e1e7494c2bcb2d741a30bdb3fcd6683625344d4eb838ea9993490a7ca564574e4cdd524f3805cf494aced3b117fd79dcde22682e3966dc60a82c3b3bc4b0c2c97267a2a03ea536d156af46bb301168df96e509adce2dd730d58a0022025656deed06a8f38231ea88d8228536d7cabb9aea0c8051f9265186c5e2d7d410bd89fb274ad39db53450fc39f91dc87181f8bb42098a9f4cc8e1bed3b740c6626ee2aabb94c1233a15008816738ec48fcf869d295c870a2b8dee559977d98d69e2e76a1484e018a36c8fd8d82246cf951c1bdd2a75e417380dfde771c4e07da9a21eb5cc8bbed263a3555b0995d45e23effee7aff6403ad49196e1170f143ba424df2a3e29bc050d41d78b254ec5d4bec3c649345e1a0993e13feed3b6e32bebf3cf1403ef761502c0ace5b5ad89e7c82ff87e421deff7f8455f4d526cbbe2e397652f983d6b86e6b83bf735429efbc29d1bf37396208a74667ba8ed812ce51d7817b975941adf2b911b3c1e9e83755093974523875a358aad2b6e3fa4b4970c2e7d6e26a3f28233d3a120ec21c608d49bf0efec41fb8dcd81d529b347c19d32230c9a15bd8114b2089442286cd51ad12ebf50385692f79f9d0f57d2daf25c21ee2be9ed71450b08983b1c5de03f2fc8b469129255af078357306538eeb5585de871c9f84fccd9aa1b2c1bf72c72bc4dd574b3849fbe421b38fefe3fe3991638ba64b6d0a977153909dddd7e920e44b2fa689f79b52f1bb9cab17f626a0c1a64dc8b3d012ee22227dcc6bd7ec1705dbaabcb42fc36a00901750e653ae28cd944b74bc8f4407c94e90c8d58522b376ba752035a86948fae64d05c4c43dd99d76ae32ce7447ec4f20f31881a934fc1f30ba5a722a34f6c5066652190f7bbc1a939d8a5145c4a59ae0cb44d90dc9fae9879ef3d57dcc7b4b3889bf4dfd12d82a354105adcb623894d643d543788ab6ba054b72c568dadf72c3de +Output = a39af0168a84e5871d3155abdaa1fc49cb3467f2ac551e7133008817e4045086 + +Len = 13144 +Msg = 16ac07905b3a88cbad786e78c4124544aeabb48a6722afbca914ed0405a29d2b337455b9a7fd4b5e6401c7901555d8765ae7470560fec969b4c278a659fe847f182526971793d6d6ad16be0e75ad6edea18fd1d7916f60dea5ff95d14fb3a36e6cc76470d48393fa2fbe3b390ba16f462cad3c4923ffdce423d32ccf0f4861bfd763f68d0555e8949301265b00b94374a3486fa33e36a543d64726e6c245253c03ffc436d3923f6a80e767ba7b7d5330ac69522d099b23c36762695f903359ab95a6b6b266c1ff469f79e79ea5760544f217cd2fadb6bf2b7e2dde82a09864d5385db44be56a90ee98be8c51a62bc2761b5ac8f0520fdf45c2ae6d961bffae82922ea64778165a2a12be3f1aa524f390d03a2bb91e2fedd7dcefffe528ed9f794b2074ef494bc5c4b682e940caeafe58b8c0ded23c9d4faa73f87ab5f0ec9f840c3b068b7d9439822b11700c3f044d977cf3c983d2e16f8630cfc84f9b8316697d8844633f761e2e1974bec629fa4614c3dcd5140984b333bb7ecffb503b6cf1450e17beb57bdc8e2ab1b9b6b35553993681e8cc080d8578bb0d7900379a09e40cd665e6072adb6b04d24b23029cdbec7decebf4f8044c1ed982aca8792a550a7ce618215e0b838c4fde5b57415746d63f25c7d400f16feebce752393e73b92b3b4816b8e2a73dbbb4ded098960ffb1f243262b4495d58ad0c4352fcadfc9b0ef10449f3ba856fbedad9942f294a648fd61da6dcfad06e26739f9439ef4d647c472097190f2e835e6bd78e642393e8eefaee7a933cd01920970200382bee7d3de4a6ea740828df630ce1a67eac6fef033babc52337e7c16220747e408a684c19729d294acefded9567fdc4c7eb68e1973e5e71d2129cceb5b7fef69a34413bd8960e3ce4883413bc2436d08509052772ae0e65e9f677a8e104a6508f5004b141fa000a8a5f56bb9feb91b2012ece275c31c489af0a01b8aeae7674650736161d467b7d837bea4c0762185383804c4a1d6f87c56e77c164e45e764a648061d13422887c1903782ebc34d299522a06f87c125f016c6440154abbadbbd6e40c4c4e342df0921f89c88607c76db852859a43bf5425f3fa0434a96e23ad015ac0ee332774bf37f9a4842d8400b8fb214f9638206f1949609727c91ee0092f0b041faaa165d250b651c97852846064beee5624ddb7c5b6bf81587274edb8a61e60477d4a07112581180030195b4f3b51ea40ce9e3512843f482d6c1751a1aebc5cce72cc6264fd80828f1d838e6bc804c9be000aefe6f90776107eb114ab910d811d52cc7eb422db16df0736249e52fd153780c9ef2b5f40926872e73fc09538569ae4f564e7dabb5c58b6da25ce2364551317843dc7fc11259d0e63d8c7046664aef2ec1be76e48dd62f2189ae5816212b98de3dfa419a3b6171bcdeaa724be31c1425cab9a26a9206682988acab51fd393aa8ddfa8fd1ecd3d60cc7a4a3e69473c9eeb1dea4907aeca2f01fd6507c22008362b44bdf2a9f379a7099297998e2e85cc4178be21890df8c1fbfb9ebe738180f86417ca3e6cae32b62c39767f566c069407c4fdf458c75600308d5d245c7f63b9e15fb62a9089d156dc78cf36e98b26c0e509910b9b644eb345ba8a7fa2a11a4149246bfe3d09bc4fc1568a076e134c16825061ae7b6a47a4e58b0d1870700b58456fd0029ab85c6984db903a0d8ae26087a055242063a999b606ce37ec739fc67d47cd7ed01d196ccd0fc717f07a4f649b0255b7b1d6db5b6035b6243e323e5298b44ab906c05c1f43fb18e63c6afbeb677d49ad564c47b28c20ab268f3551c63fbe2ffc652a8b4b8fa66bee1ce34ebc9319194f394c5465e2ce968607053ee8196e648f15e210b85918a978b66cb0a1c6deaee57f5e6a3e0947608dcd296f81cfcbd2ba3d70512e485ab8cc328d8960a8d5eeb7530af103aa93ef800a294a5808dd5fc5065db87504738232b9ce41c2e205c20cdbd9517d6cbb2daae58e39376dadf4f79730ab54366beef273b8408f1c77122e3f52f374f8c6015287dea3e4a5427a9919719495864be35387d2ee8ffd31c763a8fe3db0f5bc52bf17a4f02859a5d7f3b3a9dafe9b1a4b9e1da4b4892e3dc7f43e6398f80ca50a3abe6587cb31dcf54d8e5fe5581ee00d1c5fb7f84757a3fc29280b6d15e58a100ba4abd295d4f1baefd11b1d6ab6a511127392238f1f694d498f7e22d027724c7af0fd384eebeb1020a565eafe0c723fcb81be9e2a2e99a19e9a4221ef7a66a6cfcbe421bd1dd3de2a32c6b4dac74e7f8eb2c1d0e02d3ae26e72e1d03a886d06 +Output = e7862d9e578c16c6640f3e047e8171e020d69fdc95dfececb626245ddf59c072 + +Len = 14240 +Msg = 8c254defe9cc5fe0dfd1dc02ee826cab2586a767f066849b324c1468930a70d21c5df02201739d88bdace905649e9e88355b15586ff6a8b1674369b2d6df157777704382d22ee15f52a3e1879eae308626cee859fc9dc61ae69bdedfb12d8ddfc8e6b0d6050413abc63e2d5044bd0aeb206888333f64c61cd8dbdab6cbfdc25235459de841fe1cb541053328fdd014ff4aaf5daedf529000658cc500cd569b1ae617747e2f23e2c5ea815cd771f1360ccd2dd09185700d0eb43506855e41007e04e39c61767b4e23e939102449275858d16a47a6d8c5238dee5e070d27c5d9c5b7327d59bf0e481667b5b8d92d7b622c7ded2bb38159bbc73a902f60d0ea0e38268b7f2db2e5b9e78c7ebabcc4f33cd0f93ee5812734be02c151e64500b8881f7a760aa7f60787df7f1b8096b79ace8c6ee5dbd8735f1287aa2c94865f382dc2da7b868d347c9c446914702ead7501a8046a777f0de1a19e1ea6a1e99671e6686f235ba8134dde5e71f2f44e4f8ebb6be25620409cc2518e454976374d6b9c5a61f5f1c03c813777c03c73bc45ece51f31313de1c80a0ca1469c79372b2f35e1d77ab19d56208ed57d7a55413697680a1881382b3bc2b91d4a2713b3d9c49b43f93801060a33cac1d13501a5cb982a74c0d078e69af2404b7873ac71ff32b4c8f0b94ac400c0d583e4f3e1b0abf615a750a565da90a08973f907ad3b44826abae485f5a0dfd29663dd3f5c2a7eb910eaf18967cec3d67bddf46b7cd750bba35ffc22685f506ef5a9e49edadaeeea0284cb03e68cdb9b00d09228830dcce54901611a0dccfa9eda9c239ac389a18fd5be059b4ada81f8ff96fbc529a7600943e63bf54bae86692d85bfba80ff3fb370e0c8d9fb815df3617556cad56bb32e7956b13989cc9bd8d6ace3867704715bbb323b46624916970cb6cbc0f1236e5cd39beb7031efe2f1be59b5871160df919efb8769e5f954e9e9a0842ee495389b39fc1221aadf02becbd45d44b6da305c0185d3caed5bc1f3e07da69c168abaf493c04ed55c64a447e6640446cf3c0cc5cc1648f2e33503bcda935c92efc99c6ec930c613af467093f853d213c24c1dd2e7f70e682d50c24cbd2ccc99d71c8512c394a3630b4c0daae7e7ee35f9d3088d3a704cb43574a7ac738e1e3836491de76a340c4dd84024949d698134da9878feaec82a5f616859e3e2017bf874190df5a4572a5a7ee85c590020b296cf65132c2949d1f01bf681f9f4cf0b60f954fd445a462511650c5e02fa56aae53f00811f943969efcae4c7f78f3ef5f82dc294dd754a24fbf576d297725190a892326bdfd8e119e5d5fbd2e49d986248792a7bc7dba94f9e97ed5e1e4f5b8d682fc37975db890a59a6034bc8052379d943565a0a76abcf84b138ada17bbac9ac807b52e8877964d3a4c4d9abaf286332f40cd8af2c9acc35ad206527ddb66bfcec229f40c3f84edb3706259683ee47dbf5159dbce7bc6d38f16d2fb95d999ce0db7f0785764ff0fac790d79069bf4e5dad39523c8e5bdb14e7e7b25ee3a983e1b55b33c08ac773b7bc2b96a249e19f3f833f9f3409bd3e54f555971e57304986e37ecaf9e6a6ff9b7f9f0ad30b9d6409e1f12bae402abd7d85818501a1741558cbb075367234bb2d76b4dc2b973bc2442e159fb11bec8019fe312510aabe10ded6b9dc8116bbd0f50a31b4b2d503e377d174a246824ab0afc82e1f52585561a06c60a6e1ba81667ba3e03971ae3def2a34d6dd745d8b75c84b401ad094833226f66e7c5f46cfa348aa87146f08300de5be03f74394f8f6ebee2ebe90478ea8f9daac0501a2edb2e385efedb4cd256631d7c299bb0fd95ca01cc2b49c57bfeda082dfead1b723b9d49ee06a49e3642295e7dc6be5b676ce703ac2a4fcae5e29a354d2d2d76bb9e1a45c2236353435689a561a14c8721675e1b1f735b632b3838bba4c661aa7f651da267cf780a6e060c68d423d6c2902797de92910d4cd0524de1b144ea2542432fe66b7563323ac34a4f21c8ddac48301cc4a20dd5d669e3427dff331775889ab98839bfa5592e309b9ee72ad192cdf35553da3435ae4c4daeb6db1b7a29d6de531e5f08ceedacb0a8fea0a4431475e3ea0287cead231c03eb42f16892a091a0750f47eb307e5ac5cad4cadfb2bff4a443574717bcd34da89098ce94f1786d73a7e180d18a69ad02a9b7d237a0e3be96e9d8a4b9e54d559e373ecf4b071fbeba642b96462d6e17e9ae2e63468e2e385e55fd0d1fa6dfc877379b7fd55414f9f72243f4c3a9ca2fdd409eea86eb0de64d103b0cd382391aa62a356cde68f6c3bc7ac128d4802c5960198fc46337f16ce59119105ff7b7c0bd7792f2c0a613907cc639aef330f339149177ad76057720da512db43f87fa5f2fb84abe269c19e4aaad03f3aa4cbd236d30fcf239c40da68de8ef54dcb36f5a6f64b32b6acb6834e887c6a35423f8bccc80863f2904336262c0b49eb1fa85271ef562d717b48d0598fed81a9 +Output = edef6e8ed7e1fd79067d72d502da25490ae02a1a6cf077027f956cf0a69f1d7d + +Len = 15336 +Msg = 5cf4123ca07cbdb02586138f23faae1d9e5d4c2ee847753b67175eb598e50e9954b8bf4553f9878aee28370229ce84a4f0b36495a150bb41cb8737ab36927801233a7574d4491b474f413725604e95b7dd7a69762d20efbe0ba34f24885fc30a4fe0fb712d52c10ed139d99fd0632b7fec1a2478959e59d9b0d26dc9983535db62141be366fec007fa79e61981f38c24a5fb5a44e0b140bb417b5b426dfa189de43d9b728534625b5567253a7ce701cd9085d6821643ee8c4608df360f98b2775bc244c794dced32676c60abc828d2a236215fd9403ba97348e0c24e87f54c92510dde8a9addaab3baf15d136d9d47cc1e35bcf16580ba98ce6bcb31dcfb2d164d853163a021e107d55ce51b742da873d02bb6738dfc69246011c48716909f2ad89204f8ad8fda554016c06be4c23cbed5691507c096fd3f863a73fa3e9ee8f6799c21f4c90fdcc68488b6aac5434cd6b459a1540736c010c94ea2305a0c51a3b80b4efdfc89308228198f801f9720e3f561210369c4f8c0b0b517d175c222591d4854bb4fe51fb0b4301297fba8000c21eb5fbbef29ee76c4d79b8694a8a33f31b9fbd8c90bef79b0370994605d3479bf5e2125a04bea5b8b1df5f7c1a61c7e7bc70af973e4e804a5953a22579e0353572230e9841333978fedefcb03a4d43d83da4bc85356547a1bb26de7e753b7c2719f54aea369135158b04faa638a14a5d25b84ed744a790298f66c8b186496ed963d541c0636d0b26ccfde3ee74024deefb07e10dba9a1c5a6c9feb7f2bae9fd4d64fadcb460b3e155b0642c99ae4c0f624301d8925912eacc93ea137e3bf7191f7c0c96b5d104069bbda91f81bdd461b47bd5eda044149a93bcf946c3d00a6a93ed53f1126f0b4bc45d74bda65303fb6cbfc1f80d50f1fd81acf3f9c9626818311f9796d22410d65af78eae1059220512798ea1e167ef3a20cba0d399d75a4a817aa02dfdd75acfe5f5c09bc7b879a92f10048f2570587af882c77d3a1928280c67355d9c70325febbed02cd456500d4aeceb6be15372e48f37329eb40e1adb594c20ceb5d6e0aef6ba86083e1def59eb750bdc1bf886a16f53a7df10a0788bf092272953f3ace38d51acd80df49db69a132c8bdd47dbd8203fefe855b6895f5aa213167baedd2639eb084349c2a44ce02e151f2e28bbb22862d2608b3796801ee2ab3c37efbda180f064f2fb714a42442e8f4117836c57112317efbb0de716c4bcb9448e9e9279edc8868c2be8d8c04f7b62999e4037ee63ec883eec1fc448d59703d589a4a5d905db36badf0f95f0877d56cece47649fa424ebf52655753ed8db53982ee73ee752923e2421cecbf8769c3289ac803b945e3209bc7197412155ef6f358750a5cb5b536571f80dc000a441c07142d304f21880aa39d6cd7219d43d1f539cc721aea887724a6db4be3198d2c62f972906e45b7595175cdf4e4dde2c2d9a7335fbb8c2972e5686ab0bb2dab90d6ab3688a90ae7994fc0cb51ee6fa245fb416807c1030e9613e4ddaefacf25c5dcb9f7ad81e99f46d91ec38290bb18d7f468d92e9df7ae7d2a9ca2ab44769257efa624538b7a44ee97d074eb9e58ad053fbde518d4c29f84b400481a0aac57b379e04b3f28358f0d06862e0149c0d53a47813a7af80c48392ab03c9fdfe91c5515f8eab4da93c40eafc07d78357c27f3968347b96a2d3f27191cfe8116a526d95e707149251d9a7ffdefd194e3e32bcdc7147b48bdbdeacad9a71c8251792dac8db77d80aa5b58ed6b94c90bd7ae473533b563cd6536e19116ff04f802dd874b5e6e6defaca5a5b3833fd221833600a676f68fabf310aa164b854676cd3ada323ae5d0eadeb5078edf416b9a6902febe0b586d68e9e3bac6d1ca5f72f3198cfd9dbe3506a2e1d4bbda5a23cb0bad87c86b4b7b88ac188a2f544ece612702160a016818c78bb4b3e70eea6937ed9e32721150388fcc379ebc4d8311e5db8d0be40073eaa20bb62b7cd762ca65814d953787f722e2ccb96efa27f7a8658302e5181552292aa56e8209de63b5d86934167549b0d936202681757e1d1064b01c2822ba8352d5eb367e0a8e5dca04f7fa3cd7d11db9de68f76c9aaa73d867d5214b705aa806183fb665fb61c1657fd0087ecbb88e435ff9b486e6579c7ee374cad59d8010a1763556e058f33f16ad63d762cd6a93144f74e676f4efe7526c11714d16c55db3844ea063afad175c1235ff8f5951bc9b014cf5a322edf511763dad186894ffcaa6fe2b666c19eab442b8d93afc186b5639f47a921ccc463a765be6ddff79674572c6406f1aa449adc38f0d1c22294fb43dfdddda3f253b2bf0eea6f467dd34b25c3987f437e684a6f90b0399780eba53a1eba7d1f66374648a7865f22e5ae8afe7ba7a8c404b5c4e67cf45394a333ba2fa20511fff116272878bcc6daf5ce38c99db909dd06d00f2a44e4a82253154309b5e722aa5b995e49c9b22bd876dc5d6e71f52bf44a64332230a9bfaa573847b29d8837886c67f191e29016832f7f02d43f8495739a1739b5886b20927846ce11a20fd801ec29ebea0a7f0f43ea602de54f8ecfc0bc9128cd935154437ee4e10e0ea58d7da286513b8ba79f806d27e988e83a6245787b08519a84e22631bc86912771df6457272d6cab2f4da2817b3ba554b0d568987de228e52c52a25876c782379c551ed3b386 +Output = 01687fe6caaf222afc3351ea3027e68aa1c5ea015689726610125bf9ff6ab4dc + +Len = 16432 +Msg = c2b4a04413a1781e9527fc8f9574773b7371f98a4adf1259d3a5daef87683432045d541ab25b7f67a635128fc746c6fb2f4d3272d47c92d667cbc60e7c929e43ec57544f77e45a72ae9d564711116cf774cfbbada77b2a4a552164592dc82145404ba8c9aa6491a9750ad0a0bafdef99099f9b220b05621d664ebbb8e13347a0c9e056729302ad73c22287800c31d948b864dab84a42c3b762fbd314e2fb97bc4fbf68317ae735375f8d83d14dd6b16b47c68159ab59d48011cfb553764799029a8fe5eda63bb15f12f4cc79c613006c7f6f97ec75721de13b73685fe63fd6d871f9d6906025aa52a4ff6b62bf114db228042458f1b72740a78ef41e7a0dd5a79da54201f0cda778dd5567727ff720a50a303187674e79061ec9627a79d61ed8e73a31289e5c3039849fc89350ee01adec99c4601e5f9c9c68ccb95a2dc53ad11461acedb2facdfd638496ac781e793298e7e8cb601316684d3e01a5dcffb0fcefc1b93873ce072c40addaa440ae0f9cd4c3a2b0739171d495c74345cfaf08c03f0363f12a01652ee4c19c65f0c74c5369d5fcf7a0023447071086214efbcb84cbceaf001fba706b1769e2d6d090b7bf1fc4fd892f8ee8296cc1d221a00b80b25ccba74d9a22ae4ca04db6df2832d849bd38ad4c685c14e18c822f2d0f08afb1baa152c1e361a93749141f683fd437570ddb1529939540d92ff9a62de11ae1e9adf9b842419ee995d86726595e9f5d53d5523c08f760f5781dd13e095f689cc2fd7be2b9fe02f4cf16edd19acdbbd1a3de482bd2dde6b9261db000a9d11b6ba471ced70f60b4544bcb4f2a14d44f1bb1f063e86d8d4f174bf93ff2f67f5ad3f7d39b9f2ab0dc9173bf3439adbb83c4e3d34b7dc34fc2944f77251ed6b04e5e23e98943f435a431aeb945054ec98053a34ea9f1bb6b67ba9b600a8c32ae1f93907c41ca543932be63832a96e0476e50582a254d3c286710957b9843f3bff4faa6536a3c3102aec0fce38af4497d7543692f669830d0ea1ea692754bff2cf51cce38ada275d941bde0a20d2873b3bbb5402515da7ea9176d366b49ac403d4c806ef1b2030706133f77885c3944316b2e44d4d91c0efc1784aed0bd6e9d391eaff0472067cfd14bcd295c1f2fa63eab34dd045b65c81012eb7487789afd6a962fba02a0d6b58211f05ee8fd128024a351737c43bd942f2f2bf25823384a16d98a36ead959a1608f2e7ef29febb9297d0c6e05382c5a9f96cb8f0d664e6b861247cac674f77bb4ea12f143adc13b965eed3767e2bb02a97053b26ce8e6480267efe06018b92bc64d211fa3ce9dedb3707d346aea717495e54cc53f5207c9d10009df7e6ea599dedee571d9aa86b7c7db43ced5f85798ab1c3d2f4c4bbad63d061d2fe91dc6ae44c5e54dafea84811cc7c86d72b37356333eae585c7c06578ca1b43869ce21503f2ba91ceb369f33f85b927a07c4cf97747227a8368df33407f85561c629c0681938ba475635e0b6a4bf2b5b5dd27341b7e13187a4258955f6348814c7d5aadf18139f34b8904ef0681c1b7a3c86653e44b2535d6cecd1a2a17cd5b9357be79b85e5e04dd9eff2ca8b9ae83e6c88af74630e1692578cd2044ff9c5b6d8c28086a8d506f980f8d22c57601c0eb47f59cd5c1d018e2daa94614ad3df7478537c87c80c989f7756f8ff12973e54dd14693076069cb9b6f120a3d831ab5bddd5e3852eb11ea984af6c290566d777b0eee984faf26f7cb9067db0423bb2d4cef1bd6a23ed207e70ac349478f66edff2b6e0b33008033d0094b372d01b7b45154f131dede8278602f45a26b26e8bf46e1357a46071df655141cbcfc9f68f177896ec86d4c9ba290430e6c9fdf7b71debae553fd2548b5d75b5ccb177f774b3c06f518d22b962cf3c07de649fb978c5302ee26cceda908c3499beff2043b47fb581491a1ddfa6e074224cdfe1db5951063c06139b2b75595595aaa10d05d7e51e75dc150f640ec4722837220b86df2a3580ca1c826ec22ea250977e8663634cc4f212663e6f22e3ffc2a81465e194b885a1356fcbcc0072e1738d80d285e21c70a1f4f5f3296ba6e298a69f3715ff63be4850f5be6cb68cdba5948e3b94dbbce82989aa75b97073e55139aac849a894a71c2294a2776ce6588fb59007b8d796f434da6e0e48b9b3ce95691e61a618b109c6b335c114aae720d9f76f7f185d115e67ed2704fecfcf660e3fe14a54d624aced0bc1616cf9f7fa2a6311ebddf595ed6cccbfa002392d7562c2dccb7a6a53583a331ecba6e07eaf2aff5f932e278a68eb7f1c2a7d7f37c339fbf72c405da8d554323647ebe8e40882d541be347c59988b0c28ea962a54173cf01bb4cf3689eae510ef1c639792cadaeda0b6177b6845f57dc92776c1eb3a12ab2eac4f7d606192d533943578eec0d94d62c1fead2036d1dae92b44cc66f56434195ce8bb9400058ae9f58a1061b128ff71281198e935c6296f3c29d42c0eda91c50cc0768d90e637f98889e954646f0bb3337ac62c087c7443a34d60a54d1bcc19040239b3d8dce24a955b8a2da2557712295ebf4f789cc24da8d7f8397cd0edfc8bd4896ea29095c664277b5633824d7554e809bc4dce1c7592f0245061a0fa58eb5ef026b4aa57543c164535df9f95c3fa3d2ed94fb989a3abbf6d52c634fd146ac9f543d7d131dc67506f346e5455e66488b610460611bf396d5aa77133fd18513d212dd3ad29472bfc81b9a74897c5daef27c8f95cbcb1852174b72a46034ce8e1fa4c70e74a7bd142032e53246248a39a0b6831649361d70441ebbb15169876de0a0976279961a04b7efa3a8fbf5709b2e95ab6c69db7773e4ba9eb473ee4455cd9caac1420e1e23f7a852432b4da525f4a055029e29cacf6 +Output = 04a76a25aac4a6a4765c626ed67639ef96fab65998ec3a9a898629d943dd01c7 + +Len = 17528 +Msg = 5bbf1aa2b13c67b2ddecfa4f4726219a60296ff0e45219bc5c93a090e620b075386b497fe3531ca4d59838cd2293e52e0424d0d320eb697c0abb8aab0c4b59fb232f6fb34b073a9bfcf79f0ff557e45138abce2456d50696ec89c11d6e02a0e523f3d56971c188415bef793a48dae6ac06a6af080e78b8b10ae58f0d94ab4fdb419fc4c7dee7cf3bf9690c79a483b3e775fdbca9d13c47756ab83aa307b02c84841c82f519e3d734df4ea2f28fbc12a98d983d2f26897a8c16e80b094e770089f450571caa1b68d2138481cd93edcd9a575f7ac296c71a9b165f4a64f16a929199248d641af94abd9ff5f133387caa63da3bba88a85eef4d70033fdf79efac457c806bf4f0e3449e8a873c4c05d272ac1f1247ace4b6c1472ebe329f6d70144da44d38f5b443201ddd24a93f8257ec1c2cce6754d237583458776acf5554935019713d8eef80a4e19fb37f353773e25c0b5563a9fb4a7cbaf4163095ba03f1f7e4d6c2e828029993d81c0755ad8f1a14c49183d2e655f4810c82cc1922e5f6e90c620e2ae731c6da914789c86b115eeb5d680ef71bc28932a7a5868418626ace99ff6b7db475f55fd11c4cb5f9637489e0c44e4223f70375ce66a5fe21e2145094941f091836eccaa0839a45e0eb2497548c89d9855e2af188ad73aec7cdbd15040973f59adc74c20664b99fa71338bdc2a808e4c95dc54fdd6236bd918b2dc5f146af6ac3cf55ef0ca7f2edd64276a231ff138c785e9e36d56e375307842c0963321b8f197757fab9348d54f6dfa8efa97bf1f819c87b4f79b7be96b220828963b7ff8d263d428b16f3d2fe8e54944b3303ec5234032542d02613b119c8f6ecf8bca28b7287dd4929cc09132608035fd5804abf517764b6e2a37dcac5e252da2b2a4db283bef1ddfca879ba4663bcd399d85469f98cff54b817450a3cd85cfd03e7482ae34b46ee976d6b1c77cd894e87f45278b3aac0c35968b4980810ddfa88dcdb1a1a94a4250005276140ae3078a6bc8c1408396dabcd80109db0f49c7cc2f14eaaae03d32a4156f5b02a6e7afafe1849637fa1cfb61d45a140bdea6329ba0fe80429ff9aa4624a1d31bc752f7c97f1d390a04aae8a50a1b1aab65cf8a9771cf24d13efc33c69c8e60e7e2c17a57a2d70c1f39cd2cf6e7b860223b124a50101b4b0f23d149960b79a6cf8f9f91eaeb6691f0100022e80ba69718d51afc561a77653505056644e017f76b3459f8e3b7206d151dc084e8d48a21f7ba461b09ef5805eb49050443c8ddd513679cf9e2a4b8eff6b99aad99d0c79337512020fc0d219faa765cce23143fe2809fb52f682284bd3d8a0b174b9ee36d503035989d0288b4fb03790e5350b2921b535f03d4bf083731f58e4c9e7d6202faedf2fc7d4de1c84576e66f650cda564c18d701c8d8d7f07c8280d8031ac8066fd0e4c70d7dc15c1247214bd8b71bb1ab56d9c3a51e687b85c7af2419f589ea579f8782dde0abe30a0ac62e1eddfb36b1a3c3a409ee3e2ad62b55db338c3c212a8057ba6f3505ef652821a0b7f00d57e766213d57d6cda106240147e04d334d5149e1c821d963e3ec25d02e248ba687c5447efa2f569b506e485df4b0b713b174529246a65c4a72e79a6e40f50f6b68c3953964e0ec2bcb971eb88c256862100c2105c05d1c2dfeefec386399f9d05d7afeecf82d060375190dad58aecf82cb713b989fc6c782ea7d91eb0093e959e853d8063e644296ef5caba904cd5b1a565c08e76f63bcede81931d2c2634c8c9bd6c711b217106a8cea6f47faf1a97d43151f5ea9c48ad36a3b32ac13a891ccea7c229bddc60df2f04acee6b5cc29400444f58ac969afb7d36c1ac36ea457bf46cc91011be179d49be64111bfad58f72c5421e858b39a2fc61460b54e071cc8434098ee170a0263f2457c559325c6f73ddb0af3d232e88fb4dc9aee3c415f7c626090cf399036459600c73ebac5d1e49b423739c078097c121d2ffab3d37e3026b51f010e2463ede970b819a0fe3833c7122d26adf37b59806e96573f4e17a802a69a400f3739b18f4dd592e03f386963d36346e525cccc624974805911aa3878cda8e8b7391654d9c09616f32970f9d3fe5017109f5c394a2631027bbeb4661b92a18790ba983c6ba17032541d6069ba0baa13bac0d824aa9d626a21a5a4c54d8e4a99162c2ddcb7490a617dbb953d6873a7c94e2a9f1306076f03d57729ba9128da89c21e45ba3f2fbb10ea646df971deffa4453d3f88ef0ced7c21a381ca88eaf7f63ef17e5985de08ed24a87902589608412a8927fab806344f70ab6b79875d195ab756463f0ddc7a42b70844fcaf41580c789ef6ed039bf9da6d0f355c3ee7c523f5ad2bdf499395be1c04405cc8697582b9df0ad4543694b9514f7dc6f22371ee6476adbecbabd1bbbe1cf9874666d72068da02452c5e9b78d7dcb36e5388a6167e433a52067dc4c827c2df20abd1f38200004bc3fe7c84855b376496d59fd838bd83504d7c91d56fe3867f9d6b23610419f265b53d38d65b75f00ff4ead19ec1acc78de5b0808a2f7be83971f6e396430120dead7aec0787929723ed25b6505dc67051df24b259635b58cb32f19b09bb600c15213a3e9e864b8d3f03f8c6a349852e3a7e5bafd9b7fc687344cda231d9b124b794fd7911d40b52bfcde67aee218341a667c7f171a9f997e04bfd91b52a7efb249d3753f7fd5c7824af715bb7822b6b340febffb795bd5780ad03f20a2a13ffea9e6a37c76ea97e1c2d2bd195c7f80b51fb5a532227c227e2ec634b87553ac3780d289cf6a49cc4f4cb6884ef8f73928eae756437bca2a9758ebdf6d3383dc66b8dd51c0c3b80fd5d0ed9ee4b351891489ddfdb6ee0c92cb708569c644fa7793385020d7e900087a36bd2663f4571a82e3dfc014e10c05225eddf94b108026c4e873219d44e95e46666f485125cf9179e234c7e4be9029a50a3bb88500dd9103b08d79993c3aba41484a2e38ad8299026d263baeec61a65b5de6cefb7ad85f5778e853543abdc374c598fd9ff438d8246cfb44fbd347254d3d286235e73a38c928cad554a43822e6c39fe00f62b8 +Output = e79e31d569ab9720eea4bd48e44868e783d6c4d1c80cc91681a58de1f98ad382 + +Len = 18624 +Msg = 0ecbc479e99e61a98b625736cf1506199d8f2f186bfc9fe2038f0e5b87754635b30888c063462b035581860b2f571083c4e5c6859338cdb09004597b2899cdc87f1224bdfcd08fcf07275f1f1156260ad5bd19fbde4ab9844a35b3aecded048df9526017bc24d5362abbac1b7cf990d6597ef223551aab87b888e39c805932a9a92e0676ab2a455f45a733a67928950ed88f17a5ff91ebe16266b3ee48c5a147170fdc84d2cb2672e052bd690fcb7edad85a5028e595c0b9d038e94c2e19978dcc5eace638edc2998324110c46cb9363e34667540d0f74378b644e5d383d5da34f813c47e5795ffab785f936260e1cd180bb22d381e84d851a54aaca70193bb228e2544de25846bd03dd3b8fb87d614c38214b4a490694c8056ec53ade9678e2e0e7bea03670bf0bf094a0c00300aafb91e1a8646b53902bd51c6656899a5e5afefa41e9e9ab110c0512f0710f803e06156102c7f1b68bd311c557c6790e33430a82a4d004f086e7cac0f349e5e366964c0a201be216cbeb41d05e31b6db40c48ce7b0fc8e2664c5c70470f18c136ad3bd44cc09475d9999eda7444049e7cd060d902d168f37f4cd854731110cf692e4f078cc3827723d059eb1d09a391c223115e7e3c5100a7e288bf2fc506e7625f16d0ce9528a3dff59db56cce78e61866c2a5399b217874afd616b9a56b97a6d24bd6aebfc79a627ba2dfefed1509d43dfd63c1985af969f75901cd3ccf5e9b0a367f89ae0fa95fc521b1130fe88ba9fb3a00a29e5dd1fc7b89f6b6e5a2bad3796f320bea618f2c7492df728163e9fe3101026927aab0a08ed16c235a762ad4a26e9491ef6d8a5d0c7eb19afc27834561daff61bed203fab3c7e88ee5ca2d1317ad2da837644965ff3dedd8caa4061420304e38ee644a7f7ce5d256220f30133bc363db5d163aebcf58dac89759d0eede99856b20c202836cb3e01599c5e2599119bd97cad3dd32ff680ef6ccb9823a0f8f1b54e08bbabae5ba6849b78ea25aca38b16a0b3dbeeff1e400cfe563788a35899692b811e19a9a41f16ef5ba0e9b19a8d5ce88a44e87594546d07bb84263e3018db11204f586dd1301f1eed865af31e2a131dda80a7d98144784fa587e3b9a8f472c78d585242086207f1d7a75eb955e8a3074d9815730c99979dba47a85beab795176f40ed72713b362dc108de4a6a52756e8993198a5eda31baa2cc5e6e1be8aec76f1013443645149d52b3c3ef83edef1a36799a679e8fad6f061eeb38661024a034cfabff7c080a0833aff3f0c9437ad3fd538253f54175828e463902f1b65f6a67859dec6e0b7e350c04589563db7f608628b8948b77f0bbe14b2e13e462c7edaf3bd15331d6d9ed84bbd926793d648a7800247287b986e4a835b4b5689dc4f0b5f82e7cf0f184f843da5dea35f293197be3ae37118f9fc38a0cb22ea5edbe3d20c49eaed1e5e51ef26cce2abd8172d539da3e295382a32230d90fc7c2dd1d9a99a70932fc3866273976132e39726b8557ecbc927219fac741a4b5c8e7f249d0c8aa55519a756edabf02143ed24ee4f3802210b899dd0d7a66738b793eb6aaa754d46b50d32164002d17b9a2af9b47e55a8222e4ee54420547507921ecb0a8e6e62e337acec6b2612abeeaa1fae4fb248d17da5d9908022f8b42670a1c68ac5725be9516b4ebbfc55ffe8f84d8ae6878c2e6216dc381b6bfdb523d7af4671cc0ba8e7a6bac19f3f473df90947383f6a8a1f9dd5a9445c47ede86e3ba9c3462ea4ca6c8c2dfd7b6b50f69d516f3ea0d7ed157f86d33de96343de842123d57e49d840c696375ad70d2dba54655806c15c0fb0858eec9d492a89f8040c9ff590ca00aca4396952389117e9acc9840907637c615e7257dad22a4ad54c62909c141bd85e840a367c2693ba1504d265ede98abdb858b5978f3adee0f6fbd788417eaba9d6c47d114117918ebd0b24800dee4e4e1602ed4e12d9b4f6cd60bff97e47160fb603f6ac4991f6f0521e4464f19c0a981aeb7dce1e4538f6c939a066bae3d7747cb12b49ee0c409964bca68721695c363780ebaa09f3f76b8ac50d52700b6c728b6a7f8cb70d1af47574bf6915dccfb2ec61bb645e6c6ccf82c17b3f45f44174728e67d73d1ac27c04c5137d677cb178a9ec617f9415058d318d6eafa554f314c29b78dbc89bf39a832c37467ebfcdf210af727e33945e3f27a75c060693fdbdec1026ed12271afa81288f56c41c61d9811962c2c550e35fd59db7e4f247cdea5f9af69d824295067f38a020e0290979abb8b6ffb1e11169bbef26bee0c6e024bd8a6c6fa1551e38eddb0e374b5c416cd11be38791bb74e74b0a1d166ab7e0e7567d0cd5e7f5031c4d8e2dfc8e2c962d91a17cfcdd468a43137d0f6de8912cccdad13c62de98e02b2ed083f2f11074367df7f7b21d18de27a5b67237f2c9402fbb258f88edc731dff230b4cd3cbe6811f66dc859a9b8ccef6254fa0711e6a79a77e88acaadf674c5483d14bdc97cee3a8b9183562b9cf314e9c6eb5dbe7fef9781a892aa87ad2555913438772fe2733abe019d3a1b3bcd22ac9adaae50db64a168d45bab1351c01b5dd4947bb875937cfe1c9a77e12bd7b30b2f4c6b91afc332adfa2a4ed99ad1811e9ccd2e2baccb8bdc60ef9225c39f20b612c537c96377d5c188a2f832ded62143db2710d1fe87d1c97d210b51c980061de3b975907cef05341e4a49c7945a767e3e56c653f1650955afc355ed7416ddb2f0bdb76f72b54b862984b5f061baeb1e34b0b11a1bcf7d01974b045179e01205e8366fbedb57132818d6cf55bd8409b43ce9639cd443b74db22c993631684d9738a821172d40f6aa8ad4f8501e525cd0d5554074c14e429a9eec8704411bdad740a75e00df0f507dedf3c387ea825ee49c78ea1a596ba998ac0f40341f775456bea888f4671ecb22c0b7a365c8b07a6fd0e8c2f6030856a86809675e23174485f120346a5c0bc13981952a622f5959f331196da064c0c44a516f6edaf25825f59692e2fb3432dd12df20cb0594e957ef2b8f4c91e5118d0f06a5c94313c673260d9506ff7630695f07cf07e88fdd0ee43ebed2630a771b56e641092efdeea687c4ab331f9881106eba04535376c0e952c92ca16c4b6df9c27ed590e7174d5a9b5a29d9b421b14cd25475500ef02171bb895d4c363e52a2d24eb81304064ee9f14ca57d55982d891a65766053627b229ecdc5055949e190f6c48ce22e318fef0a0aa2908c62725fb77bac16c9743a967d25089f4e04975eb07ea8909 +Output = 90b0b77c4e273a73f86fa4854b144f003b2d554e397e4afd1ab5f276e7d45252 + +Len = 19720 +Msg = 8e0913b9ec90db893e90389ad99ac918026f99f8b1b8ff4495f7c3b357be827d231f546d6563ab38d0fe7f0da5c3a86d32558b3d99def81ad20353ecf317f2beaf8ec7cd1db53fdebba169d5b3655b845d89d2c104b718bbedb62b8e959d1b143b40b4fe9eef5d240860401a8be9ab048bf2b6ab7dab27d0edfa92c0c6b8c528ce1c632b7077ceb2be224a03b6b56096c47a81238922ec00dbb6d2aa0dd0b7a2700a1b7a19b75a2fe5d1d1b9bb3342e111087953b28430f4bed23175f24dba2929f225132315c84486541b6422ca188e7985e8617f39bb539e35f849fd97966502bcc91f16fbe298a893702a74e1ac4405d7147578a955c684c96e4db71613ff02514fc678d06ed453761a3638e2c4acbce746b8263cc6f57675ddaaa732f89f3297ff2fd3fc359f8fe560aef634296da69dc551105bd5877f218b8756540fec98772183aee7ffa265c889bb373fa330cbe1db69bf6c4c25a4b5c10d4ae21e8f3ed9fce992f99484dc07de84816bfa9d349cce28b9d9f176ef1ac7640d46ee2f2ca6d98a069abbeefd8aa7325f20f55be8b4e7b588088d236736e5b327e6477569c4008e92323e88cf392cec56c65d13ef136e39b363e7d314f263221e2cf109fd1db91cbe29e3f95afdb4dbf0c5fa6c529fabdbc350c92fff3788db7c7fb392f0984c5c13e773eaa6bc8826b485940f1842e5c43f39f9de2feb9e03c84656b94a1c007718d4b502bc60f1f72a6ff3a349e3661baf854089acf7ebc58beba32514931f95565873eaa3cf3573dbe9ded1ee6a74099c9c66d87f44b8474cd55f7e56e4efdd53dc734963f39cc44e5c1f410dbe58b68de63372afb94cb1936c556e16f7b97899c67ec805b270120b317c9ab1c95a490acb6f00443df12ce9184c9b5eb4c48eb0805c0f8ff6f7849bcebe85df72c1eb9bb3e12947baede0d4410bad35035a461e70d5c50ca67b43859dada9a1a1d7c3c9065296bf1789f4de4f5b4da4ccc1c86d00b19281aa4276510410affe3ee2fa1b2c8aefb43c0d908faa0423b1f7423d2497b720f8ea9446886db03eff322bb71a8d51db2f11c1de6ebaced6676c25cdcc9cb014784dbbdbb13f56ffaa63fa234c916f02367dec0303e8810fcb13b29fec7965190abdfe5c54e2c89909ba97663ba1ab0dd46bd82ad69ae475e7d431dc0c959bd5b522a4f2fabecfb5241f49a76f23cea40ec0cb797039c0b1c298e9abb5581df08162f6c42a3b32fb017b590e6f81a06eee650e18582edd6a644523356d2ab21376663cfb6cc1bb12aab40fc4c321e9147b42e93016e00349d6c527a1bf7321e69d16bebe48b830a327b4b3f1f36d713dbd3fa3e933b6faf51ffe3d18309b3310fd5ac33647885a557e618dbc87cb0092bd45866a361a891747daadc24a0ab03a9e1b958af09901d1b9a5e54e08a55dbb823ad8dca7737a575740bec69429600b893f7ae3cb53edbfe06702cffe62515f1408e2660f28935c5617b94d965e0a2cc5b0bb69611fe5c5f98f2d66ef6aa4267c95ec31f4a39dcf4c49e67ed91278445a549f433963b28e0e04ae3b65251ebac1cb3e65e14b5f5741bd8d82e4ae70fc5115709adc881cc026b0cd77e7fb86c0eb901f295b88a39d3e5bf6803f98bbfcb1da7495d0f7eb044a7ad242fe54a6e303ced9a5ecc22f494a0b69a1733a21eb828af55d9f17e701814a04c3309844c9106cb2021b61cc026eb52d0d07fb6971cd0f3919d04fd860d308ac23082f291a1a52f36870cd4270b1418beb83425d37995089f2ec0985c8489c12890b811d7f2a68e3fe746f593c1b97cb637079c3e5ee352c107aacb7e2e9ef7e1ec3f6e89f4696ccedaeadd90eb4a0359f55076423d4a66c9a02a03656bde7380ab7f7512479c4f45ca7f0898d854210c4ba540897548b8fb90d4ccacbcc6d87746fea21b3c8daa474e5a132629566a6fd27c876ec75ccde94221a3be91f6ab584743920f73dc0245df2269c35ecf53d7025cb78c84052a154c9715059bdc408644d4a1695df5ebc3e56e98fad93d51e453bc5d4d4bb0320208ab9d2c3ae65c9398287cb38b69cb43f9750d37291f091a5f21e53b7f0c8a221ee5b8acefb333f2e9c570786cb63538a3fc52f2dee2cddb8d13ebd19e78a717e7cbd3d23ab18b468222191272599e344d6af6d86b3734ca5608ddaa4a72fd360bd48b66ac6fb6e129c4f32c4cc28aa98e2765324e7ac2495277472fe38a011ef3764bc4a55c3b6529248b205c9f6f1aced81aab092bfaeafaf594ccfa2c67252747a166b5f5ad4508d74d99123edffa87e3a39d1bc93321c7fa531c0ed8840b2fcf08d76eca71036153b6e11e2f41eb51e08ca306e12f8031fc1e97822cdc1365530e9130592b229b0053b2c0ff294fb53532374b023478d18133ca0497f3f0709a0f2e9b0030153e83a068bb1d1aaa1a8840d4688ae69e1f105f2e06885004ca0aa6fa1f7e246dc444298d5d078a8cfa201504e009ca42932fed2df89c74d2ea0b52ae2e217caec4c85b9b374cfd6afcb33b4331fd3418a6466a546b32d6dd59328e955788bd2a9896c30cda6be7b66aa82019eed3c872e0ea433bcef9faa68006d75a2c124a93e825dc7ca6d2de11fc757fe3673bfc03db82244ea44054a1070eb9670c5cb96d1bfc14453d2044e00ab1874a4b84532deea47a078ba4796f46a0a13678d69e08bc901700fdc2b0b31dd2f2c8fc4b4273a2d7b0e0d594dd63d7632b63020e4d093278313a7938a60dbe502eba0a0f6e579082658512aff52121ccb45738626ae1261b1f5c2ff0a94264cfb7c7f53f1b4c204b044ee3446519ce53d89d7c815c22f00f2dd092991f1399980a6d3e58fde3da7829b897f081d0258f14a05ed9b53138bad95231808bd3d54fb30445fb6aa147c0224cd142ffc6dfe4d50a5fd9faae58a4ce3bad458415906d3e37cc8505f6c0899a95ffaa137055dba625e010810ce863690736667c5b63670872028444670d5aff0ea394815f1ffa14ad8ffc0cbf606d364f8d51f917b6c3ae4db887aa7456aadc314da0ae05a6c68cebc02ae2384928b26f12967ecd13099c152efdaca164ff9e885e4d1de672a79b7b20fba62a0b2c6a0056b2620e00bf5e730654cf6090dfd27e65f845941c33acc6130ccce74efec98dda24673cf84b61f1bf2b874462b204adf540b970fbf15d7726cccb125d065d721d6ae2ec724442fbb9f068df631c91717ca4ee1faa4719e8ccca251dede9925780f4698ef7107dfba731e8641a7625837c9347e2afcb5eb585637f7c59ff1498a56f6fb70f568f9bd77e8aa4e1652d3e659a7b8c64e4b847e1471ea029dd30d00b2a69d7138cd436fb14d4046060151cd838fd5f7239a31a50e3974be60a837822c3ec81bc19f87752b338f50fdd799944ed21ee4020abc754b78db216ed990b7cba6c29618478b7aed84e095853c75e2c359dbb67303eb98d314685251cce04897c7d309c52b1824fd +Output = da1f76a3256e7f1cf92522b5a266f977c0c4bdd0d15c93f8875e5caaac3de888 + +Len = 20816 +Msg = a639d821468a9715194505280747e32a71f745eabac13c4c06c6b19c41d19422648d37f7f3f6f417ca0e16b61ad1f7d8af6a651c74a74ad838ab8c6bb2e333cfc33bca6efc9107376069aef06be3b2ce53eb9d438db03317935752bae5f01dd94da95a2f6841179e62c0947e01665d35e5e1b7070ec33d309e32cb30e0e19b678a40aee13ff06e73587a9107e4404034edb47912fec7b24ce1a5bf76ad9ff5a10168902d8a8552dfcbff6d331d5ba3f4f4cbac0965a6d892e516f534541173b03a8ac6bb50e80c0a42b7f0acb39dce9c819018974b47f82b31ee3611db1e5dbcbd0c19329901e41b450ae117aef008551d6a8462b992593e4e964ab54cb0faec1358513b6db8213a5c600a1f173b9b474fc1b912b66f45f4c274f9c9aeae9369c3d4367dd5f50d911021316af566cd999ffe80504bc6027517f20bf50aff705b55ea8fa1d8a0ee45e8b51fa05058e77495879fc47f7fd9e8d47747e0678dd9e95101264e7fa10d816d849c6a30fb30ffbac5de155a821275826a7633cd3f163b4080c12dd1e0b26b25f770709e36f263952007ebe4b7f546a835609545fd6e7aaad129e5d645252b9a746259a1f173c7af01e0f02607ca80ce3fcdafd5af2bce155b261f96b9adea54643bcd4214fd548ece33ca2758d84e7df08529883d935e0b8680831a2293d0da30c3768888d631bcf1c621ef9468d63bb04faa6390ef5313bafeb8696a2004b33ec2f97b334688c1d0619e87a1c24093e7f5da708e86d4b65f69678b7799af6af8000123fe977e23d5cee8f6692eb50afd3d62b620a20a7add8937893349f884c5443489d10f3d6c66d4a844d2f45d2a5af0ea3d2f891dea9d26d16a8477088b0c583ab495f8ed23ed3a867ac65b5f7a67d6190ea184348b0508dc36546a06073702bcac3098b5d1d1c9299f2cace3828ab6983060db77e77ef601f58a6b1b7ead0b627a8c38befd7a493abbeb3013cb2c590eab52d60f8571bae8b00ec26f7ad63bd325901f302f508260d7ed2c15dcb688248861bd24ed441a386fc8b729821a59b8b5239732f0bb3b44f919eb113d8e0982ce74d7dda861df9a38a092721fe12fb8332fe6ecc6233e8e2c57b430771ea4cf85726d633d2ed1b5157e9a71d793837ca69b55873cf051e5758fce9911cd23b4b545c7de3415b7320d4a184f35981eab164f2c2bd78a3df1dea9827693024cd867d42d75167c5ab828ec5433be58c8ee8b32b3ff2159c95b6e8e18ec8627e9e4a307e75069cd83f06f4c9646fc3c48ed0e2e322ca1c6bfcb2d24d82571a3c07f6fc63c98b86ff881e95226af76aa684fa62af0d9df37e5e824540949dcde9a52d5f9767588ca82159fe74b97b40beebd5c0f362f6415055b5a07f57f4f403e04dc88db0e6346e85197f14f263fc8a3de37c34c56b7c9e5cbd723e2f05331763e8c5bb48cd04bf4dfdb5978839e474f5b3f2f7a7560b94ee1a49119c46f1908a8ee5b481658416c6773080fd759f2badb7c3b08b5e84f0745c83ae2222c60bde9096ee1d58190199065e55b49f930ab07f7d03d3dd6f2da9e4b058432116e5daae67dc5f1d6a0c303bbd7a6020568ec87b7d46236b2098d9536d9491ea6abb0928b713d91dcda31687dc8362a05044302c431bfc705fee9d190a0770b73807d4a023091dd1da42d66b19f55e8816b792027cd9c195538b6fb6141572301538e7953a409fe20677da5614449640205568ae79241532d1fbcbab2a4318ed78da9c884b3ed1c6d8ceace949e5ac70f3aa1e80c66f59e121bc2b78ab14d747d9797df9f47845e8d793c895397d239317224e19f3302228e949299f150f2fc7cd72065ab4717ed07983b7da516f7e1ef15a51ea6e0ae0628f2f209ef696a4e5bb70b03b19beef16350af53920413e8d18bed472c554273699dabaf8de4fb93a29e2260b82b51912a085fb222476c755f3cc403367a0590d7fe8532d2a9eef3daf42b25c8df88f5e32a14435ec84ab12291f1face374186fc7b473bc7a08b958a20eff9e99fda46161d96ae4d6ff7c4a1f03ed5fb743c7c607dbb7172b219a23a8c3685245391ac4b49ad9af725bad564c2713cc619409b896da77dddc5e241729fc87080e3f34e0b1621af65d0da0cf47053d6350e930a01b1d40610c22c9bbbc16c6306374955ddecb9969e59a092d860ac4c533b7df250b30ab5119240d89c5aec06bd37dae84a333ef7aaa9548f98fc44452588487bfcd91032ea1b661f9ed20e00adccf030d953797992a73e2abdabe26ab5de3acc8f8db024a347e59847929bfadedcd15512b42fc55d3aa58cced450630a239d0e9136b03342fd076c22005a9b5950c67e7dbe2b83134cd3dd53e154d72c41b768883bd908d12512c3b485158c251117d3a3da345abdc40e44d539b76f241ed103fe06f34b57a64fc4878a92744a060c7d0b6e11f262899fe9db4440d2f9a432077afec6a4dd6a069822759afcd116eda43de48bf40a85cef5ed6ab9a8b3b9249b858b19b96a587f660daff5ccc12b016fc2a26a08bd9fe2909313e89b5b47ede7a615b63506580157d1a16b8b222c9107211276d584bf25e156a79751f735d614650463beb952d593f5b2c4e1fc00e594e29a760466cddd11bd8e8c72926b274a4ac1e9fc8c2e44410149c7785891453d8ea4343c6cb25347513090a731d128b0deb2109986d4948a7dd03ef53dc6f92aac9776269d54cfac98f66a98de4f216fa8409f3ab02d0d95f2aeef03b4874884c4db056a019c98681c46e4eca0cd59ae30d36089101ff98be84ba248c4bc7c735ed8a9afa072f8a26589c44b80331996ffd4192eb1939e93e50f216c754ddb1e03f6299d83bf3583f928d35f8469a94f9ca993d1987246d673623318cf23aeae3a9d4fddb16998326289d9cdb65751008fbc9619cfa2377b19ac9ff4db243c4a8c35e117325a69d728169e401ee659d26174eaae5d0db9ab60552ea7a039cf1b8026a8f20f78f09cd136e95ec3fc08ec993856394a99168ecec5a8da264bad499ed86c174fad75a7e75083cfad82a776bf72a3629e30944bed64d53476401ffb6eb3f52efae03f20f2ce353ce4617e9a5c8999d062b97d0b459b7c5e97026d5979200ade19f997307817c54d717fd57ef7e5002c9e1c17f55cd067ff9177df8c468575cfb2dfc5ff0393fba95bc6f44a18eea01d5841ab32bc6c5cc06d89bdbc5d4bfcaad07c11b41aaaa1f9aa1d2227470c414c9a1080e9edd82449321f4e1047db681778b7c27746c47de4666ba93d0da7aa606b71e043757b8741e820dbb18b9b80bdb47822720d495913989acfb3f127a402d44c1168debc4c509876acc7b1f50e458ba777cafaa1fb2d4891ddb17cf4f7dadb895c7fb0053d1f490809794250d856062d0aaa92342bdb7c381a6134766b8f8b1009b071bd205603be3aefc514a8992bf023385f6bb3c53e77d0e9a315c7cae9c96025ab4bbe9dce808652c2a844b604d90a9ce8ac5a9295364571513ad532ff9ca903e519df9ab33637cac176745499d006ffb560e7eb8a5dc322c54b5b70d4722b75a88e4af8b9c8937e4be5021bf0be60894ff0237723d4902387b2222b70312fa17b12c95de91ee397e75db4b5138961613dc2d6df6a83f49d1fd5f20cdcc3fdafe60d227249216e3c1e4654c70a1b4eb00740 +Output = fd00e1fda91d07ddfd86bbbeb04d01c07ffc63b9543018c6a191036bfb1ae66d + +Len = 21912 +Msg = ff15c16a1705888a933b2c0cff60bf8c1794f2c537102a57120ad6c8a7d9ffc8715a20b9de92396e03951f338ea6160efc9fa1450c94992073b37df0d16e0950e4dd0aabfb5d70ffae7ea5e0cd1c1dbf96cb2f6c2b7923da434e8c231fd7d8cbc064254957ae56c3fdbd661aa409fd264de041437c07ef0ce9a4aa66795b93c16cb8199ad8cd1344561c0ce9fbb7ddcc8aa582d0e788263ecf7d80c3c74462b852a18fa66701ce0a22613c55ba6ce637b3e3971d5542eff95ca1b541f1d86e3ad9e62f76ed94af9bca55a067c97140f132622b32ac7e73c3f8d7f2e8df60dfce6951a01150ccdf81b4c0e026100e12826deae415d684d9270be8dfc17a23ddfd6aa88b7f7af286444a6aa49b788a8470ce436ad0b99c4aaafd9d23d3a86b8f4d44b497c9514dcb6af31a93cce72fc045bb34666b3f0eeed637bc6727527e1d48603d6df6bf27d77d169a55c34643eb889e8780ec4f21ec321f0d52c361a5b076240bb40eabc6d2051db093887e0f30c2de025f5dd01f6d461e5a8db1bb28705ef9e5151afc73e3886f25f52175dbb57ae36eacc5ac4e989b9d69bff94a4f8488489438219c76329074c0229815efa23815920e2dcaf796b8020391a1f462147c77e1c42b7217e8a4944bc3f545922085dc382e9c12618e25b6f0abb3a3a84ac3f0916241669e2d4d378c7f3eec0d57e7a026b31a6cd6a96b22f8b4363e6a4ce4196fb96960522811c54dff7df4a86ee8c92546b0c09c0f11ade35533adf042675c4272ad487d027ba654eab944ab8d10bffd8f64f6fce79fbe7835b1d88255d520d134150665e2104269e9fbc45edee6ea763540f63e599ebf80fdb8a768acb4cce5a8a88352f15a0256a44a5c0986f2b358e14ca8aa8f9517c4545102e9718fca46756ea58e57e04ce2c2aef4f3b0bc806a3a8ff588ae0c2e09e382d14fc9eb81bc446f55603b2a89d4ec2f746582cdba75e911c31fe18b6c1a5155fce0de52590fbdb47c0fc5c122f5c9d6c4a724acca4195dafcb84e9b39be47d26be5d84bba06874400e41f2c7d0d02aacd01bfe11696e7f3869b1dc3fdbc6d0006a5df5f0c6b4b27cb276ef304e43eb375bb7bf5083c87634b10778c20dd6ae7b66a1914b704b066c320dd9f1e4126faa51c7f6f07fa1c32315f847d0ae9e78f617ab1f5239a5f08d21691b732ed6186466df4d77a9a4e6822cf6b1e23a88b01f01ecd87b9f4ff15df53b5c3aab198603ef701b6cbe2c70e05a955f7d4e1ff444c9e9654dfdc3996d11d6f4bed53738e77ffcf92619b2c2cc1366991835eea605b4233e3fe18b59292bde7d8639b991ad7d086f6a48d28c840bbd0739ae5f55e0752ccbc7f711a11097b47f17453b30b48b14d67fc7f61ec6983b1257f3fc84537158b68c8af111b1e9eb41f8841686ab1e94c6fd13a7f9f24d535309c340a1dd3d4966e439a41b9b97058e9072f613ef9c1ac958b872bea59f8831b578b63eec2d7155657f953f2c2375bd759e3468f0a819561922c0dd3f035c56e1a0e7dc1ee6631a96b96eecf213ce571e625be66cb712e5c4ff1cc65d2d420b24c83fd9d3ec911ede937bb56bfc71c4017bf71ca24d8a00d28a010a5e51dbe6e54b38e8b9a47dfad38a56191821f2bcb527708c3fd0012fd86ff839d1257c72a9c66d692ea2ac06ec0a88988538e389a00172b593e2fadb2d2d8cb5442cc636e8b637dba16b8debae907db421b5a6c368a658195d0ae99b672f190d25bc2b8c389742c0b073a61181b8cfec7c0ccee26562ab37e99c5fd91d0127b204682f1b0fe5f8b8ea3f77111befd9b1f2c2ce7f2ce2d681c82bb01c952053345ec5434be52ed414ad339342c3a23595345c27e235938497873dacfe862916149347fa973eee6f7478046d5f1f7c6e169f5d5dc405e11fe9955688c76677dad35054d7a5a3812548e90687ae85eaeda6c22af28d147812e880eae63f9c992be104904ccf899390126ede44c9ad5a2ed61b6968b5f7b50814b88f47afbef983de2e7edcad77a22a5177d05728ec56cc25298d32d716246a1eca982f9034357d1b3c750997e4196e96a2a12144c97d20046b0ae358f642b33725b9f099a2c96238cd1756475585d7526da525c5db19d5046e66ecb41e9c6e2e68594d246121fdb74eda35145253ff053770e70487d955959225d191059e0534f0faa7b925db8a07403248875120402fae88f78956181c4874cc144831c4131b5e0262c03762a1a93fb3e328d85735422151a9dcdc72a38d84ce377239ab12221e2530f23c33cf2d9bd3a7715e8558ed3e6fa067716595e550a0bd8763cf8ce99fc784979adb8d04e31607e96a27258154375dd1bb6d4de056f818f0668dddf2816dc058d9d645bfb40f770981b9258f114d547410f635ff1618cc55b872afad319c869e8f90a3ce7d04974a1bb7d396e41606e7289d0891fc975a2fb02a5c9a4eb849d112a701b1aca9cb33beafaa195b25f7a358ce2059990854d703f17f4a27558ca90995f9e9d173955ed10d3396d5019931380607b679c01ef42a84723d59f8c18eead9e70779d68813f95cea8fe01d8df93cd13928fd734aff7a4fffd465267aeb2cdf737b046705fbae1b49650aee2893ddbc3f31b2865b6199a052afc7432b56463309c51f99b18e55c4cad6c4081b7991237461276db2b30f42253ffee36548dd61246619e2fd4496f6092599dfa9230db39327dabdf37c2191e2058a9b8b4b48e65dee81c75ba6c80b6f01faf9841899c8f5f63aeb9025971c1380e8c03fc61f3f10bef5db5f3d8f9186dc75ca2ec2cbe0276cc67b1b37c64d344297e5e551c6d7d767c4837a615404cb1578e5fbda2aa5a1fc1be0f73b45a1bebb26910e76e64d3c69ac542fca9bf1a65da2c18da72c75f01489b1a6987bb62d6b03462d9de40b9a44ebc1f1d1edc4c31551e166b247cd9c56ce61bbe7fef70ac2bc79c54f569f8b8a2151730fc01a8bcd24c9e9941338f1232875a99245e0d162c0a067f394758a99db8705ec995f8af589efb8b50534a91a4661f23fd7101bcb9e5e7833442a020478e72ce0f0002b1f0fc736bd944d2eac96cb283928e1345dd4089876ec39ac4a97d67a955a98f6ba14e505e646defc4a97f5ae26b1f0d5a9d0332b46e300c3eca6e951624fa6685737cd88e7a3869c74d886168118ab5a203162b32bcf3bf35b34a453e035a51a66e6e5423a20c079cbc700d3c0b39d4c61661bc28e0727b526af7c0487a3116769b0c0b45655192ebfe1da787e192316ddecc2cbe6217073df95f4b5d11e87e9f013f471a4a70d35b1c7976701cff96406440c51ecb492d9d676831a551e551c6a8ed4ecdd9cf8f951d6bc42043e6c9e6afa3cd6da36fb31abdfcb847c191579699ff6a849ad7914109dad7bfdeb19308c7df8dd670f3625d02022a6cea5457b4db5ee06716f0a006e9b0f97475c7bc4eb5da4d7fbc3c020e3e62cd3b52971bcb76f0fba0d483838cc4d46f6791900c5f807e55900eb25bd57a04eadd83c06981739f02545cf6037ca22e84c1b9744be430b1ec32efbd3458bdd0c87905390a7ed9523cae37b3e87e8ba67faa76db4084ce5d5b8ce6c557420faeb1385e68c66bb0f1f2d3ec20fa398824a7494f2db4e86169ebc87b328a397886eb4218b764f001636dee03a70056a09046c7ccd26fb8f1bde10b366c96e50140bfbeba8daeb4d392f22505afc47cdcd2a24b7533399b87418880a0db43f0b1c475d4cd516a602e65cca0799f0c5442d203fed3b6da3929dd274c40e858ff91fa55aed86d619b1ac44188e7e1a186dd79b3086dc4193be279059a9ef99fbda7caa77163485b0ea0979b05d7dc4bb9b2adf990cbc6bf49b7fd6b904378decf +Output = 45b861f7b11453cd4760df4be8cdee5d72bc8cd609c0f2bc5aa2aee01ebae0b8 + +Len = 23008 +Msg = 4fd5945546458215ad617d6c0b607ad10a138c5688b2a088ecdb6a96b6d89fb65b2165c54f21082d633dee0c5113cd9395ff1bac7fe4c6df87292676e00130df50f0ec533e8b29b50d7f6fbda8d435555e735443f1e6bc09e96065092efd89edd64a11463c084d73522de7c5382c1ae10d761f650541e8cebb881199c95314a89738bce87022dc31db51406d28a2e4fd49116458e37cb4f5a5aa116cd98b37d838c1d57f03603eb54ff261fda1bffb72ba4b0b65b41f87484ecc4dca852e5c4464ee44541c4adbc7571932bdca09c707092cfcd4a0b3c88d5ff9adfdf5c3eab5c1c6f1afe4691b319bcd9bf4cc0ab186debc20edcebfe18d7f36194c52d249f3f751c4d7834467bac21684ecce4a1fb5e0045df867cb3910578d79fec4e3e0c6af97a6162064252975fcd5ebf9507a5eb80b9c3c925f38de8f05b55c727f19f691a17db2e34fbf475b88763a74a42b470ed9c602780446becea6b5ae852d5b4a447633f4f58f9bdc1dc14f2168ce98398977c1924041cb79bc79623c24760f8b711eae247eac23b062b049e7fd562bfbd1ec7734139f2fd70285a24d78e19b81bfa2d88aa52cbd8ad35b4ad65ac54b578f40ce3019a5daa048d35e2aa9f668f4d709976e9399d33317cc3b34a8a35f136b7cb0cd79db359c35697f1cde3ddeac605bd517707acc74d70b054a0e76d1f80ca704545cc9a6937251eb693f3f657003a079ce63581013bb1e8e60b5c808ce1bc9b20de9f8964ca7938c59f583660a68e16bdb94ba07d86a0fc0bec5206c5d3feba14049ef6e907b35483628914740362693862c28198d8de682ab6507656c2113bb35a336942796410946fff272db1575d917532aaef8cba9bb71bd045bc5684ce734205672d9a1beb6d3a32d4da3afd825d530492ee3cd625556f69fb62ebd9b0d84e8d66e6e44b537233cca425fa9565f09ec0c01143b1837a33860de70c80a166e223ef2ad262d747ef152b8d9aef76ffbaefc8f53bcd4499faad03c5330a0e83af717655ff02e542eea4c17d764c43df39f9f406af89d73947576369e9e656c308ee72f4c49c1c27a5040c62273c4b139e7807d1f987b9dc8c0da351bb9628a971039b83cdaeca3a94bb62f828400b414ad24ac3c4476af84b485a2902a9e2bb9a49267f74bb9e0040237b9be3f7e2cce19153787a397911079fee3c6982135dc737ca644433061d39e4acca04b4803ad55da84c95ee52cb436cd6285acf49249a47edded6a580e5e4678d0ee51661ffa86fbfdc91c6866b8147b85940e1e2848602172b86939cfec23482d71f8de6afcd7000851862928633a8fb6bd65a7e120cfebce6ee8db8dc65d424cf1e9bacafd6e720f27442f5bffd0915cc65998a31b186659d78e472e351bee9336cb02294373d97914fd83e5d2000ade7894f8587f641a7bba04849c7f85d56b0747bc6e170fbbaee0592bb025f081a69bbbcfe795da8e9de0f29abdecc47e3d2d05f281c169a216530231a23fc87e1bf7792638a5a34a2512fe927bc600716f71acab4a89ab1519359d9ca56ab189a553730433f7e6d67d16d373bd5360376b99e4f0b0b7fa9d1f4dd575a0ecd32bac795471c0d2ccbb0bb417456add0d57976d57c89e9281c190644fc37a0e55eb982fc275c7807d8039b673106caa2f595db7ab3bf9636509d442b68e1d185f52d23e6519304720ad6ee28eddaa02edc6243d8851aa72d1fd53afb0df70521be7c06ee764e370ddca110211b30c2f6f2553c897139907eb267573e5bd5b03af32cb86ed5fc842dd608cdca39b7a78defe54207f88ae6adb0ba355ff30c67543bb5b502210c80748f64639ed9cdc2462da8e0de9b8d2e2ca34431fa34099ee000bd9922b81c9054615a7e096be1a7c223f69577dacebb9e02abf977bf6bcb70da9ab15b3bab486fd44179b47091dc847b84dc5e26be23544747d862f591818931d3ba160c172d0980bfe30a886cb50f8caa221c1fda09f1f9ae7b367719358baf0f0fedaa0ea2b3df2c468603c0d5b5effd031c16b0c3f982563e8ca4716c1a9a931f3ca5f03e11582d10b1834cc32a0de3fbe8bbc0d5cd89c5beb00e28a9989d06849d804a73947428ee17774ee1ee8ef588fc6f88d3f06873685b24bd52981edfcc8ab99bd7afbbb61b126065c655bbb816e1b2873314b6f5c7e8888e1b9ba895538ec252ced5b73b345ccf1ff4f23c923213253a778cfda359e29a394915c2bdb6142b1deda8cf4ed63123ebe2668a1a771b281105cb95329ad3ea3d8f88e5cf60b5644ba89b9c675d4a0f4803051cc732644ba9827315fa0726e91943878a30efdd0e6a841086fb5601d1b2fb707d1f1088f07261f618802b66274b09743888b00579f904ba17913ce32bcb201b23888de3c6fa38e6f55b741c154135e1793d5dc93785aefad6cf9e886def156788a9f72f2fbf5ba834e27db343aa7d41b4d54592d78ef7554cece74c289d400844ea08a5ab205ecc6fcba4c632c5343783d703ecda83525bd29fa3b8dc54346fc0cf2ef1b9cbb6b5fe6d95bf535fff155ec92551a0e15471104e505909b266f094dfd69dec1ff817795ead2935a9327dbe02064bdb4772277e8f79a721265c4d29729c04b2aba74368f5777e4a5f82d32a384345da244ff185c98c1dc33e88d8075debb09ded28dc35e8613911d144b81bd248da3df62261ce83044760597123a6c8423c1e531144789e16d41cad0c9f0b46a373773bbdfaa1427e9e7905b9a290683c01a48bd51e999ce4f9db515eea912bdf9c0663672ea69e579d8dc1a6e74ca435abd0e608bd215b77f4ce5c904d15e849ce7c0ba26056ed2bbf0f2bed745402db9513f010c298503c6f762d551932129e9538a314523ac5679d8d92d1bc1f1a7a47fe4881a17721aec4635221e15e213a5accc82156ba9da793799518212641ae5ef03dcfec46364b9e06597b27f29aa9b9c8c95df06efc484b63b10566021ef4248a7e70057e049f56efa1b57fa7f5692c9d452ea1c067e62fdc554ddd2b18c8433d59067f971316797fd9853ae6a7f51dbaba180d4746edbb3420461919b5b735797bf7dd19f84d80475f5efc2748da17b1a6ae756c3feb780b70828c467c2d65df45c8808f1aa105d6a1a735e25e84a51279568cb7a95bd0e2e487a949e2b76ecf550d1c5f00bd749e5ef27ac04f81404dd0a4b5b229ab602aeaba129c7fd1cada081a031220ff570ec5b52d19926c73d41b1d82d42776b07401be4aa6aa08e47ffd83d74111f317b8a493ef86cd82aa35d72576a6293a1c3eb808a40107c95631a3defb545a15412c49e3147067706df38360f390b5623deb7c0dc1240f9f8a9f799ff1c45ff26dca44374e6ee6c2398dae349c3c328b801acc42249827f81c0a0d2b5d2999f6f8231204ffeac1e49774c634d2f157127d4d374a40c5e76f6511dd259ffc9ebf7ab731d09b7c9f44023959c63a6869939fe33b8a9845d462003747f33ca5d4986007323ec38cc58cf45bd78d350a008b628d4797bd80657c77fafc38b5cde23e32938183eaa3db1c085cddee454ea2766f9bf9d6031e111b36dd685a8ddd4e0d7cdcae64834a566d98accb5dfdbec5c101afb0ea1b777ddab73efadd374c5e82a94327352ff8ae1e3fdc2e70c0c2f107e3290b285914f21783c042254493ba3a42877a9a4337789a585b75bb3103aac76ea877356e8f246e26e1cce7385bd790c2ea16e85f7f1c6e9cbb4f91c0e9596c1eae7385ae3e6b5b1b240987850d4d22c51b9ac3f7382007577c0a98f2fc93827d9b8e8dbabb5d5adaf7768aad10616ca37c64a18d0b19f1230e453539b5df96f5f036d1f67e60d9e0ec9265231deadaf88d0305936060b889e27dfb179d9406325cfae6f4002c74b763ebab897e1ffa3ede04649cc0aad9f6a9135f1f1c677c9d32493125e906a7d90df0d242c99746e0dfc7432bb44eb1f3c2a3e5b2dab056a110a0452e8185efc04b305de188d75d7922fa25a2a3d2ecfbbfbe0365210520e858ae97507230a9079c28b2d824568a7217eb80a427bdf78900b04cc8b7dc67cdaab2ac4 +Output = 5d0b15b198b731b3462d29e0677914a64f85b290851268500f313ec0b7130ff2 + +Len = 24104 +Msg = 2f46fc1d60552bba4c86f67fcae87e1a9dbe4dfe3e2f39b7dd3f8b7aa2fe610138ff51968c0c4f6dd218d136ca7531f341485207da3986900e6faff772bba5c63813d8b9f9433717b2df50420c7cb88de01fad4ffaf6fa361d461bdd48a5a2a03869d9af2e60a961f2c2bacb1863dc92822da6fd26ce5c4e11ae1653ac241f383fe99c9fb3cd6ef29ca859f8779465a72f59843ae7297683f38eea8127a0e635557b68b211f04e74b77b73f2b0751b76f08b912dc36f0e7acacddd904081bd408207870fcf33108c4c2251e14b70c5a7ccab13ff4408edde9e5538a8802f6d01cf753fe075fd7ee462853becd0ec2de2cca253d7f25ddb55780d43f06e13be1f43add94a8cb55e24018c783bc85119cef75699de54d4a0875fdd459192937743e7989c779bc579f4311f52f7bb06521355b02d3bf2d6031e5bad88b374186214c11cd28f2a9497fafb260f482f75a05aee98561754cccdbf7465527c9d0b453bdc22c1b9c18a80e16689f855ae05ca4bcbf75d9a031cc614b3eeec1794d2e95f3d93b31ee90ffb4f7b305547bf1e9a8df3b38aeb8630b6c51f2e9eaae1d71629ee55eee6298bd1ed41036e45eb28d6c96eb62533656e657ac00eaf5e0d809340f652bb380a66ca62c0eb8a78b88b47a645e6769929409bda9f76695a9f372a4e5d70613c1308ae5600cef308b0b0b5cd7f2dc546590d1f8dc34f12c71f63a1f82b992a1cccda45730a96ef1c5bfde8e5247259627d3cba3c357ff3cc156bc1e869b45cfdbd42575ee529c7dc40dba7973d9d7b141d37348ffbf054920ab952c61fa9400a6fa9abc29971c371e7b3bb8bd0957384c265552d1f887d4086b41c3953601e6869780a452f542a03d8ebed68e84489dbf32ee4bfa831b5ff0fc4e6ea0fc03e4233153c8faebc46b99ced03d68a91054139faabec9fd245f72f517a815ab3e7be56ea09491e905dbcba1fc57fc0642edd1b31705d0b53754f6dc39ea53d216204595d391b87b8b834baebfd0891a54dd8213bfcb9f49b8d3051831bfebef0f83dc4d893acf21b9f4825b8711c063caa59d38117a96394d5c164f7b935e809ee9120c2e0a566a3592081edea6125128d89ba6988d55e25952b2d883ff2c0548f27f383e8adec3730e559f4307ff80d3e905d5c19e4f0361495359e77dc50b92228c883736d8bbf6abf32340b1f8716049544c3907f1eb09b2802a2279c9f21eebb2429498d4b2450d5961543e9d81629c0f804b64df279720b1efa18dab5723c0991df31b4344c2a500cff9f84f6f3f33a008953f7737ae1671110123d9b96543a960df58a4f2040571d5ae999e697ab2be4b82f24a99b3064614bdd6d58737e75bc195bb9a388d9134f8ee7cfb1e898bb2dfb117d9dc5a62998124013f4f302e2896c2ce6386d3fac2d0362cf60d0041062b9c3a956de8cdf3dcf04d778fd27aa876e2fbb17b5b8493c222140fb3635550b590b51dccf2aadd9e9f160eb7837f53e872ee0474a8d120651eecb880174b0b145b21d3881c8bcf3c8cf57554e78ea3520effdd012063012f98f18111b0949dbe480b471dbae3413d46663be6633b2f49f3cb9bbf76acbe883cdce9d6b3c49119e3cbf8fc4243cc2757e2d2fa8af74036edbbc0fe0030a1155709535d955d8dbdbb0e59b2671fc8613de5caffc3659ebf394afd4b4171614d94017e04d9b1dc203a2cf9ce8de9dea164f99474a0e893398313a135def17797605f9a6af57414d7edb259af2b34773e6998cfe7a802b63c47804d3c2d334c99386e68fe7d26b05b5238e9e2c3821abeb84dcdc74d46803de33b61ccb0a958b9a8c84a4de51c4700e41b2ae7eb454198dd832e92052679c5028f7f660de6347f2df7bec7a1f7418f2ff3ad5d0710745355c352e674251b58120706a6995c6850347746fa483a285ca23ce180ab563b849d98eb22feb4dd7d9e2c97fce78e5ce358c173645c4773dfc76158114c990f93317e47d62968489c038a93e77cfe9a9f0750b48432b1acaf2c0b817d6f5b59059dee098e68b1d539ee8b8ad4de2f99f9ccbf9ae8800b3b412c95ee23880fb0625f62a0aa51241bddbbb9fd736f83e37a156886efa8b6c81c658b0eb23b489e2fd2669db85731850df7906c11b5be0f967de619283136bbb753756397dd788ac4b37451470f5c99313ea9475e551066d572b2b210ae2d8e9862cf7d430321fed76f268bc4de17d0fddd5f2fa7a23d81cd7048f24763edc9463003bc5220d772be61c77db047f5b4aa604c858c4197f8d503335a2b1709f43737bcc133db0b7f103801d7a7c178cced73dbd97aa7a23482b7ec4a3a2bf487e1e644fc6676208c435e5009f9ff13723d64979c01390ebd6ceaee5303175ffcecc856fe78a6c922ee412c855545585cf0df0a5dbe9a100bea38b3f4f46d9eeb9e5a4d27d8d167cb678d01ea1838a9e5ce2f9e9ee13f68a8810dc7b0bc9323ac9d18a209058a8efe559e7aa8d14d9a952bf2eec0379d7b0bd7f6b4069a2c90e86f9ff0229d36a1241ef1f1320f08ace370b555721038b9ae457fe3773bae69077c3ca1f4ee6a40e54a3400162fde537952e37d151995c7185005e0730f7d0e82498b5210a799d0aa6db111e5c243109f3909c039a23905d28e25359a842d13f15e186ad62749e2fbd005b0f154eb86fda994c94048970855665a4d5e4842fbdd304066e60bfefa4237be67f9561c08fd1b10e2d97b3441296f11b22eba33389e56bfd090b42d89260b27a14e54792916040ab765c89542b71ee7ee9c58925ccd37c33296be6a121fa0fdf760ce6769e0faeec165af4e7f96ec496d17b1c4dad26a16f74899191787bf9dc4e1228b3de676396b699da47a415db2b831446f25565417b926c2cf1c06bd83b4400f39378efc774fd2225ba53ee9b05a698ed5eeb18c31d2c1ca009205013c2ffdd315c942f424d94fcbb892e826debe310fbd798c7911eeaa2d321c1b4143a28b1c9575cb03de8222f86fc5e58b7a6e28357a684fb12457305af81cb1e426a6685a3ccf6f91e0e50c46c5a0bf8e2ff4af9e913d63bae5c704d1b716517051c6260a7038a934f87c6c257ed5ceb57bbc47a9965b710cd298883fe38b726c516c44abd434104361b2b312efb7ab87da5f70f4fe64e01d77664ae421fead3ea21334bcdd642d63d92281ad9cd8de7bb848cbff3dcc4963409abd6ce6e26a6dc05576cbf02b690cbb364843fabbc017b1f2a936d9040574daa06038a6d9228048ad9b47b10c5bb474788774adc2f8d243f7a91a54aebcd88231d3e5e6357e0c878612ce94896de1b163bfbe1aa0f131eac23c38452ec7f4e3b978e329a9c56919696daf2f15281aee82619ec5b841bd02ece31f0ef6cf508b91dfcee588a13c8ad21c87c54202d6885f0d85438b52ea48d23e2d26a93b81c66568f7ae6499ed385a9fe70ba2968b1b54241ff89cbd30190c9de130b884ff40aeb4fbe8c007f1ce6d782b76995bdf13fc45ad696ed934f01692d991a7442f66d8344a391d83f0998535e37aa8bb190ec1d2dc1a644f5f7a6aad84edf7e1a8c56c7770f3ff8650462c49adac433cef684f6c2a903f8815f4735e519a2cf5e1d8e5eefebdc8879740ed33c8701b69b8ccff61f74f330bff0aeb15fe1aa8e9610def2b420b1b204c162274e26a73ca0b894c64e0cbf143812a2c74b9040e44bcf0c28cf95069c8d522769d79effec66e39d0d5757afcd732eea1fb30dacf903c1e0aa4731236e9c912440e0d951ef7476b074403f0a83f8aa4f609e4036f4494e242024de4f51b9e5235570bee56d52d796a313ab1a5d50f09933151126fea2de9e316f83d36d6db6ea4f8f35028d89701741d88225840266903f1f68c33e98d917862f07f7e93f6d43d74526f177a0a8faf695ae74209676fb2dc42d56ddb2a858c76c5403edb870f4959b79fb541fe6096c54164f589587a4a40c48270279b1269b2e513fa35e28c5309816664c8f940a481ca2fd548600514d00a17ed6735d4caa7ee6f331bcfd805145e67a867719c635f63ac83df14bcbd0a721a3812a14909d63fb66bf5758eb9fa8cf812b5fdd05d9e8c6f63b5ecfdad40aaedd2a263fbc1ce678e176b99fd0c3ccbac162cf488edcfd2ed07556f445012f3176f9ed4496ce0e45ac7d693cf564b690835450c22be73a5a9e146022d6002093b417098de75ce34b0ffdef95222b70370f2869b3a2a2a933a83f05c15379e5bae0ac0280766d6d70521ed41421bf0199ad07a3 +Output = ffd3b57299ecd07e1c95653b48109478bc5e749313e2295d51b9d57a409ac1b4 + +Len = 25200 +Msg = 535e5a7f716d302c1a9c687f79b8a2625cac34a5e65c7dfd83d0774c21958c229e60ab847cf59aeddc478e93aae1f9eb1584a36f4212fc9f41aab14640157dfefe6142f683cb58f30fe3249550eaeddcd77feceacd7ba20be2196ff2875a5f465da7475dedb8114799b6540ed29c283c8ce3389eef5e18485063d9d95f2bdb00a27be33f22846def640944859abf4f131bf9ae121184065e71d0188231519936b5253d268af716f556231c820f1b0d6a6c0977ce99b612562faa5475639540ef7eed7f998dd9b160594e058d99770748675bba5af1bae7377137b43b5fbd7834e41bce2193f1e93954d0272fa09de8b5f436a03f7f582b091ec1615b8b91eb0cd2f65545040863872ef2a9ef8c5356b9fbe45104ad5a87d4208e835d51db3f7f2dc7398d48e6ca52d1fcb356c662f95d64abf431e286a2a15ee641ca18611c95ded6a581c753c4a324366febb4927ba817d4b14e85a62577c013c32947ec2b57cd6bbfaae917f9810fe70336bfaa81a3fca6b1e40080b75f2e5c3202484413cce2ceaf8f17f913f47a5997bf4f74b654fc6b1c7abadd01609008b6de82317dfc06469eb8b7c3b7044dd2540fcdb6bfc5fd691a991b84aa82ce6076435d7b11f01f1db4ae333b8fba709b61ad9f3947fee8ead1c88b3f5bcdd1ac9bbc41e976af169918f8f12a431dccfce7212fc5f405a6346c8f72d4bc4a7f344cce96455541d403f31e5b577b35473c0ef4e4226ee41e8f1176380c7400c13fb203c45555af40a36ca9d78cde0bcaa5fdad25175ea33745e90645af2cf88016f4e233e21f0041c0ac20cf8f14a63e7dddd45c6d6c48db9d1bc602858b38a2023cf34cb35a3cc1a3da0baa29c60f890dd5f1f0ec3fddf1decf3fd5553aca1049afbf7592af6ca7951ff3d0229c4c959d0e8d495c806960512ff727e9e0b5b33377cd1745c697dbdca35ea9423d674875b02fcf85d6f5123e607861072602720abca59b9546c544c08dd79d5152678cdce260ea2fea88eeed8d4ae978b4b83414a5d0674ad8fecc8b05e314168255481ccca70221642adca5dcf3290431dfe39b5bd5e52c234b5a83350c765a7638647b978c7f24ebe3c4af75fd8772468066e5063c7c02d0b3d7f243d92be5d518c7426b97c90027bc8e5381f06d8c9aa2a53acc8e9396863f291e57d29b7f48fe5bb86f51487dc1bc23d928524218d64d88e4d85294aeeef639509a802ef077f00727cc41646261ec698991ad6edfa189f72a5010e613afe0efcf336a4dff09f9b3d5a9f08679ae5249abe58859a9a45fda535d51f18d720533e54b195e76a71e470b2fe4148851f8ab864b6c6b3e86d619a8269b1de4df6eeed80a13cb1bf869ac1186a77858f1e67863ece00c65f0f79c71d479d2df9d2206f197e2fab7a5e1c82fd5c118b13723968af06ca4e88ac94bf68e707847552965781b0d5511558e84ad44b85e5bcbb7ef437e989b8dfb540f7e7d0a77e4ae8cf1b5bd1d42f3b179c9d2fd16b11d54aa6ad6beed591deca0ce52c8ce377e515294efa6992b2360a97de8256278c07b04ee8ad9f2465f04b672bb994421dde5833570fd09776a0b268935e7251d0de7ce65a9f730ca1dec9de1ff15f59bc81328bc7eebf68e905af9d60269e607c94010b6793f2d4e1d4b5d056666680e098347106298e7d85df4294b96d32d9ebf30d0c943da733828caffc43ab425e366dceb1b642b64bd9982becf3b4e834ab65d18864ef08af206118908c126b580a8c719c4cbcdf5a50babc14c37026e73756fefd5e4a8f8e27fc706b845e59f4f97ebdbf3e1a523f87c1839a9d3167881c50f5e9e4b2a47725b947bbc0c186bb6faf13890ecdc751eb4712ece57b229dc6ee56bc9cc9ffe096122f2fc5ee8a21f9a8039843599747f7b5da9a30b0008ec3898213eaf2fa60e5a16725f857dcbf14041e4b50405a6839984b00f36259d1aebd185e53c01c6eb0f1b04cfc8fe6e94b2db430ca1489593d58f4efd224c70cc4e37a1a6bb3ee60745d7af346e941470b9f75e715389c915f8268852159b0a6b2a737c6a730d8fcac7f27b74c06644ed1c3d3bcd63f0c973caf068f7583af260472c1e17ad97479c5c157078069d8673a554e40619a61d131396f5d43352b0126d0b9097b10399e5cbe897288860626a1ae56106bdd34d5f9bbf37d1ed0bcde864b7d9d0c77a0a0ddd12f76c8dd8613a4497b8b3979ee1bd2a1437d7d08cd04cf3d901ac3724247c5a3c982d5f2c0a4beb13f3f7ef306297873dfccc22fe41a5e419111248286e9b0a0d83514485e505d7011ab90cb158547be18e9a2c88a95afd1e10e943af70d0b42ebfc2850b7bd1cf0733e13748495ccea8f62736538ed50791061b70e0b3842246546669e553159cd04856b81dbf17483c3b5d88877b7dc919fb8f17e4be201afe4b273a3cf63a06026002d75941edb0426522694bf5ba0d5ff82d80e2190a65feabec3e37eaa9d54684ccdc245846d0657d6023c786f4990b04ddf3034daccbed7c9cbfffb9c9d143bb9c0ea58a8a6e4b8afefc24b59336c42887b76fe16d1373c72103bbea01c2a20d5ab6056221539c94e43d8a0affac326b13154d5db407399362539406bb6f0a82ee1c6b65734701a4fa2d200ea1c3fed56955c54aeb6de7e847f6b2945ea124234188001de81221c028160f48df43d06e72bf012f790e25ceb8363c1c522098f73942ec11e97ba6f3563e7e4122f34f3f149a2694c6b2994e9d595b27feb40d06bf9156c9dc4b35426cee967fd39c244f38305f013a20ee6fdea8363ccc252b59bcbf66ce2b4a79b7526e7f8c5806f7a6c7c7d2ff3d22ca3a646bf6e3233a9bf7161246a73c401759f00660f01bf96f4da7a8a715377ed6b515eac2a46bbc05e8b7d31bdc79f5ba302efe6131823d344bc21b07cc90fdb9eada6cc3080d741035854910f649310845f59dacd9f799efa8fe671aabb0671be19c3b20966f2765e56abe4a7c13bba99f2b2d6670e1d7486d45d6073aff84a6a1419d02d7faa0ac004d78f4f6415c4646baf4ba7ca8bde6a17eaef701e61c0032b2db915116a68c8f15c034ec3adc8743883bce87b314724c91381189cbf6d19cd83cf48e2c00ad99acde32e76603139d7f49ca186ca3937665bc7e5917dbc2e79a0a5416a277b826f91a186f2d98935c8668d7b83a34f228e48265f933937a1cdf8bd86fe2d3553fe4bc0b0af765ae8984de1ded858d366af5d1eff285e6a2439109a92352dc2bea550b35422c300d2b63f4c342b677084280f343cb779ce26297caeeba5c59e3313450be9e34c2574a0af2f13c33ba10ba6e2e8b0c707ce183d917d0ba6714241c69d4cea677e335ee6120d165651ef5d9a5cbec3ed84f48ad3f3777addad397b2dddc8be35e5a4f2050c58844b46b60a70e1190e816ddbee9b1740a1a1f5fe4fb76b320dc4ff14ce7bf2b41618968f82d914a9f9294eeec3e1714b28a9d80b2ff1da0b319b36ed54c969822454ade667217bc40c4b94a7ab459609684bcfda9c7bbea6d23f39a9156bd5553776196517e86b19c07edb80f535fa0df90e4a0725a36da7581753d290d1caafd7f3455625ac86fdbe298025324111cb4367d2fb5c078b8f4bba31f44799cde48e62de6410dc33e24de22eef02e581b3effef73190267cc115ae4078ba3233b5b33b210959f61689f81f4458b791ae7a472a3344727ed5df5e59fbfa5929a075fee2d9a06198834765674cecf0e41c60f18ff3ae737f1b4c7e43e0d3c4eea8b7ba0054d3e8222e9cee20b5361f4b301a7776c4ca03b5a1ab0e028baf5e0f90fd8d0a2f1e2e216d0d2af219aec335adf931953341a3912d5d860c58e7a4fb1db9d066c4e9d424c31a7441f6d16d41caafc861ab8fe3c002d66ec7d5073a3f936f3cacb2b14a9ac5478296b9287dee3a809442ba1f4490c6c820cb8ca87e5b86a02a52751f21f1e806be76fd1e8599623e3ddecb6a36a1ed85649dec25f1cd8bdf11ee889ddac8afea80592f4e14e1d61b1d9c7c1b4a61ebb072a5701a3504078e9be76997d59d817580b3bc119c460ab9cbe2388ce06f45bc0388b4ffa89d8e2110b39497c2df010a381d40239c34648cc1667d59a908901a7f9e3730cd08845928f9a637f31ba34b0f0c47de853b9826868fd6ec04ec3f4e4f7c537822c38e793d2ffad316b1fcaa8e073fbcf7da19f993d4c1be7488b7ea0ba9a6104a6d0123d5bd1f137e50519b2d749439648e4e8861cbca6b785cae503c8cbba3945380cb8b279f53ca7566af75fae1fe4bd6ba5588db5d5da0d667234abbe0aca11591d2b5f5d82e6b7f8059fff0a5561e21e1e36189f72f5e8496d5cebdd195e12198fbeeae75fdd1fd532d140c5aeb6c1e59a4946e243b31f591ea20e8fae9e5161a89bdc7e56cae7d339b5a847f28b62a963b89ee611b9b880cc2f9e3b9332d51ab2e7bd892d +Output = 991c6134366f0484dca7a5b3bd93791ab198bccc7647dec5ded78fd740356b90 + +Len = 26296 +Msg = b4f9afec428a8608546be3325720caad93a3daeebbac80fec22e6c20f12541b4378f915bc0b8085cc8bbe746b246b4d7549d301d96e28adb3b93d22efe54b070e1ef565dc299b3742f77eaa07b60021811e5df84098e7161f9672ba60ebbb7a85b20e83b70b3f01a2fa5d389dbf71b387281ce6b3d399d58a5b25ed048e3bc224c2a2d3df3912514704f8a47fa9267ff1e7be419596a7688e67d53f4d55329a75d160faa73b8bc2b9b7cf622ffb94e35bedb0bd886aa64b865cff25adc9364ff36eb75cc17b21b275835016412f438a1f9a72aeeec80cfb2cab0234a862cd7f27eb146e90805acd04e8192535dcc8d0c78e928a4b2741f3cbc28ce0bfba5e848dd706c4a6e3cd5ee2668923905c8b53ee3a8ef42010ebc1fe340dbe6628601c8fd31ce3770dc004888f2e75c357119ffe1ed661000d70e23e8ff3223e358893c83fb54f7366f94a71a287a05134d1f171abf7556d8567e0f736ebb0aa8a2e86a1ad7e6d4e97df9d38711337bc7e6304d3726045bb01372ad2b935fe2d6ec851a68cc6c14b18c969475b5fa087ac4b56ae02afb68b19753c3b97804f598bfca1615e2ce00b526d5b28d1db8f2546d1437bcd442c502698a1ac425938914a11e25ca21f4e01ed21df4765053827c6bb779742bc2bacd127d7af5a0f5e7721de90e2f92c7fc1319d723d856b5001b4604fbaf37618f371896aaf4f31057dbb8949aeb3c2d9bbd8169075d38c4b4588465841601088b6a053c746826ce2077fc8591a7280f0744943c68abfd6ae55caf41db5190a0f78e60d69efa3f168c6d7025bb0a5c5686cfdab80e6aad8edd4e4effc907ed0f1bcab2cef15148cfe1e69cdcdfbde2e86186da45c1435118e257ea0916e01e3f3f47828b351648e368090913c767c2afe0921c4c48ddf0ef3d9f0ac68a862d16ab2d587532f0483969ff3e3039b102924a1b28336ce292fd364d369eec9e217ea6a3bcf4af884fb92cefc39dfe42ac78e9488764f5f73f29148af7f906d3035e7ad137707685654bf80221c0dec4c74b0342c045abc6005b217dd33f9ecada9d6de050514d9092d7175fdf03a0dc5cf2e1315b4055f7dc7ba34f54d87d2eae25c8f890fffd51df45cf3085cd0e347255cb3ce0bcbd32dc72e327022d6ba588ddd3407ee34e6f537d699a9c85ee74115c088bd821a91e0726292e64a430d76fadd5e1a2630793f7682cc7ab95094441efe247cbd6e2636580bd8b02a6936e6b7d180384e8f264d1ec62df3a64274a0bf69f983f4530aafe68e667649c5d0f8435e2ccaddbd58becf25109d15a1031765988a5bed55a9bdbc7edea13ec5664c3be7c67a4a279af4d63436ef9df8b9f8b00e597cfee2add03831a3b960046152ffe2efaf1a7a679fe257e36395b613d51d3fe95fbf866197e86b583753ef5cad0de3fae1d50239006224b881a365ab2d0bb1ac8c85bd7f655b606e939102b2aaf46f9aaaf07ba9e6d40f18c23d83ea6109e8358c080451d8ffd559669ddafddd31fa2172f3331483b69ba6cdcaad5c31a667f6c6bcd78353442e9b28d0c4a8c454f831c253b51387984ec4dcd12e7aef5f9572c50ab37e74d6d0b642d07c4df0bc0e4e21a89e2162f79d05a7f793b12a94153c1f7834bdbe06503d4d235e57d2f580d909684ac896330aeb879489a953f24ba53e8bb7db8f814192b03fe740fb801454f1f94763a1f90ce9243e5ccdfbe8cd609acbd93269a61959149ca3b3cafa2d5473f210ad16a83770e66ba99992e60ed0ccaef55cfd034be2d2b0100ad1b23059f7d932ef54df1f254692dc96b97884884cabb8d58a175dd28310b8c09046b1d806153ab4ecec0888dd4a823fc02eb2f983588016c160c3aa9e351a7f97364651174c74985f8d97ee1309270f57673e97091bd7ab135e21dd9ca3918256ef5257b3d58cf42d0241f77035378fdfc07c03569c4c0cf08ddcee06d2ca9340006a4e5456e072c6089b278d85303bd9b8ffa0f42049b6f97e694e5549320cf2e802b781272b7ecaff17e0b34f9d9dd5bf4e025a6e5d339e8e6b91008d4469d0249025b2ecaa82ac542cc59a1afc104441cbaa01ccf2fd406c3838a1059e347834a71b721e0a28dab66e48aa6dd85da5ff0d0a72d2a79e9f6673b7bf488bf74b96bc0b4711b6dbd68430ec5cce9eb09b35869635f5e771fc1b8280b3dcba1cdad953679a8e2d06304c39232993cbc36483dcffc3dd3f21f70a09460728953f966ae1c2f4d9f942788cdb7fa973ebf0b278548994cf2b1900b06c5a51b299ba1ec9fbafde9b981b0fb48c7454e57be30571a1d6216217e1b98d10400c115426d4851580c03985fa7651e083a45f07f4de0e2968022c91f6821eb9999ebb4100481ab3e8423a4f6b3ce36c302046fcc09cbc7fa1bf8535d1ead3bcc99216ecc0f9f94b48cd2450e7d3f783fc4133e6b0c1fb0935a212500e545a9e528ebab4035abf6014c96e36eacbfccc6a9fbc324ffe484a76624a9d067f01d2b6dd2d3321facb86eedfae6dfe9571a9ed94368c18a232d7f6789469549b67fe7915d4e6b75aac2439783b629dc0e4a107b73940854e3926384d96316369fb762bb1585b3deaefcc871bbbb142cec4464b813aec3062c9b9ae59b6a1cd4b4aee11480ded102be4e44a4295d6882f9f0e2b7ac20b84706306eb357c26fcbfc4aafc428c28f8ae5a001575505ec853e37d2a1c551b0c07a39251695d3d7c47f7413f2959ab31e28da45b3c81969dec2ff7b9de7a972198f9e0835de051c67461554c74dcc066591e459e00903a7348d3226d49990c8f94e475f39b9c0055b5813bb6adac2500827a68505a0296e30a8b61b6d636e7808bd1d7249af6c5b49be589003c4e259aef208104b16f5867a1a75a291cdab4befe706888e4771e6d87eca1bbc9196e800fbf344d9f2cdb6b9eb55036860af0956d1ebeb3009376eb1a253a3bbcb45c7a6494d67d8bc1bc79524408519a3e37ae485b5e1567d27bb7b31da7228f956bc47e400c26ffd4682b8cc1d71cd1fad65420a4ab3282ca794df3446ce2ca433908bd5f29dc73bb6acc7ebd40fab5a7694186894a9cf9d20c385b28100ef53430b1c230d400701d3106d8a4ca7dcdea7cd0da77a0a7358fb0e14b3724f988eeef49fd637f258d4057550af6f818733a6d9c9d0e3203be69e3e354001054fde9c15bff75afce23eb4a2186524e5d5dfdd80f5ebb93150ce731b8f5f16693ec9b534228d5da6ccc648606eb1531aee6cb28939fee386da98e06ccb1b99c28ad9a11a70a028383ff52977fa9de469f9628fbe3c13496700cd4ffb907972595e96c98f5239a3fa6251bfaf6330c01a1e47dbe5a731d31beaf4278e87838a76e087935a6f5eb6345e6473d05172cd7587a5fec7216169ecc195d0ee5740c76038346845711a492d5ab6aba16e6cf4c15903602c53aaf320ad38b2e3a9b812618f25b116fd72442e7fcdd0eb5f251e48bfea69dce4145900d566353425f454bf0de3d496be708f7ff4334b76cfa53150dfe1819e7da783d462a6c1ab72fb73c3d9f53b8d591b1268e270820a64f51722e170103bc66c59e47b81be0e39d559b51ce34cc3797bb631710adf6fc61cb606ee1f7e7c666ac477497e9426218becddfd3671ffc4996121c88bc96c9e22f8432e77332606a9aad7f425abbbd3241682a575110be27cfc81107ba8cb9410c323c8ff97044d32f54aa3fe6b95f6a8bdee3b2893ad7c2c70997060e3524fed01ece43f12dde40c8b197e923d7b3320cb67e8d761ae3ab2a3b111c4e4ca78c199e7acc00d78723f568cae68873632932736d40be2d5c3157f111b2e12fab695735c4609ee9ea0d43cea5b08b28f9a09b9a3264b7eecc05deb01b527d5acb2707793daa31f1716d2277dacfb274b148a69f507209db9d893cec8073695a6145a8dd3911406ab7b41fe8bcac84d35471f1f769e11a706b4be12af3ae3bab1835b9d6692e60d22782aa95dddf78b14dccfc36c14a60499fbe69efe76b6ac95a77c8f9206a09b43b4940f3b0c114baf7aa33d2090671d3a56135afde238d41a29c44ba015cb17d7d8871a6c7f9df4cfcaa175da3bdd58b36d4e2ef3a7f09808b13cb9d8e6eeeba68b0bb13a5f23ee3c73d354e23c8f1ecbe79e022aec666126e6eac281a2917e787629bcebd42ba0be1e41c07fbc05d8496d0cbee8da23983d71d84ce4703d381540e824c8053e741d73f2a2fae3c8ecf6a69f4a7699aea315f90e404a797881459251cf191be3d12019eee39bd85fc49a3b5f8e1c508fec76279287f9e5cdc1cf146aa6263da31f91b93d69aac452c6fdd3547321284fd928a36e073adbc1607c6d3d91369405c736fae81e6fce2a5ce61787dfcf4875d4f214aaaa5483dec61446d2799348912fd785f5e9321f6eed1eaeffbb6cd889449e234c579106ab5c5f462f448380cfc03e016fb13adea6e06e42c4f041021491f2775ef6378cb08824165edc4f6448e232175b60d0345b9f9c78df6596ec9d22b7b9e76e8f3c76b32d5d67273f1d83fe7a6fc3dd3c49139170fa5701b3beac61b490f0a9e13f844640c4500f9ad3087adfb0ae10c644591eb47034aedfa1c9b5b3a5808e75bd62a726f3237baaad60c0298325e1b64eb2ae2e817f5363bd7d86 +Output = 67162ff0c07e2cf06e6b0c94a5abbfdc68f8100611113b3f1fa6d61229b6929c + +Len = 27392 +Msg = c34c1f8c031376c9d06a7dd0a37126dda0504685d470f490bbec31060542cf8c994f8bf1db7a7d052a2fb2aaad8f172d506598d6095c8abd607046e02ea31773a5f157779085d48edc2d790e580c2a54b98fef5be1a2558d612311d83c96e705ee1bca45ac9e450dee4e19242b5028fbe3b4913ce3a81da5c5ebda17b68505ea7cb62d84b72c962a6678dc15aec3d8c9d7bdc7a298d7a9b094b2e8c524d73acb57a8c85b3797908c4e95080969cd04679c93d9b58697c354d65f84090ef44e5088dbe3f3b646fbdcad8ce627e5d7727c3a1c0f9c3751313994daf60bfd4409201635c674bba39fc18c45be98a947ebb1ba42b180336bbc08d60b86f4792f33e409a0b905cf1543e4f2a8d8843d8737ae23ec0688004f2c69a2da7cec081d9343690303ce7904b1ece79d7b122afd1e1a7d0257dd28634903022f1f1a3476f2e63f45edf841d8af82740cf06af713689dd16beca63311db7ffdf2b8a784a218749250bfabaffa064e9fdd80b52c30dce026110d0ca7c0a9849b0b8fba8009cd966b0bc10e4cd07ef772f8701b52bb448b84db02370ed77cbbe562ec7cb113d9f4d15e3a4a9fc3de26f5450bc3f01e6646f3b1124eefc01ccce2df17159e290335cc317486303cf0822fad98d68ec00ab77c7b8779d3e2515e9b6b57acd0b11402646cb5eb88a17ab428165e7bb409fa892621a7e241a5e31916ecf669cd15d502a2f846a12e5b4563e86aa6dbeb61fd62fa8cbbaec17199a75d4c3a751fbb0bde8dbb6fcfaad31938788fb81dba30daebfea20a08dbae3cad78716cf84d0d813d2e9e779e8570bddbdf6fdc6baade5acb3c4cde1618c494d66d45d319e071fec88b89a8354699fbf325f05aea42d345aabc737d00ff1c69c746aeb9015f514927ae6548bd75b8992853fc79c40a78633285fd30ef191c832b0b9664d852142b019f18a05d9b3460246f7a83218a337b099ed43f0bec2daaa8c2e41dc542226cfe648cf83e3f75188c8451be284b6d57d712def27b02b8a5e675802cf0b6e3d4c707a79887e9e3890b976b7302d48fbd45e6059168e3233d8e2b51d98236bf2a049053c76121e67a47b2afe9d6adff76fa242f63f915d73a48ed416ca34a1e385c0577cef470e6b5e8dc056acd5f274a9fd446b157223d64bbc2372c7a7b68c47870fbf5675d4b00971e553c0f716e00dcfc31c3a992bc8290b21c633050059700d8c684e2717d24fc7f87a8c36b3b6258a6d8e118ebbb5e6fc5d657ec525d799b46c2c38f32e4e9be0784f612d6f836bcd92353ccb7a4befe044e50d707d832f1c1d6fa942ae81685be326e23380c45af9efa60ec7dde6be8766c9819f9df89ab51ea7019e1f275fbad7a581f1cdf57dafc4552a0c6d12dd3231976d9b0d84771fee76e47de68ccc6db44fb2d07d934e5fbec6f1219e5cb68143b313fb32d34ead1b33c45a9b4e48e5079a0768362a377a3d70067fe820f4e50bb12758a4418bfd137223cca3c85fc15ff8f2117e26d38fdef4ccafd10bf2ddf8261a0bd87bb98075b6854c96a76b731c010574cc15ad2101a9d619ff7a4afca7766ebd45ce51b790855b42fa58168aca36b40a86732eae44139546b9f867a1881687c582d5df33124328584546cb78f8fe703b53cbd2b824d69ccea712d36d18ab17bd161ecc6379847ee4ee1004be16ecdc9fba9c33af12475f1a2d3608cfe798711c5605a3d914ddc1817b305cdaa2765b901140bc239b0a5ea1d2ee923a6363366be926fff492a392b663243e4f2a2f7fc4fe65e6963d741e0e3eb8ea5d1a8fca1435ff2b56716a64ec4c68239c2c7cbb96d8884d7768390fa7a7018b787b92ceadd2fad06f1fb6aa9b8d78974217e2919e46045b57a9bdb616c274e03d1500a6b126a669bf1c0ce65cacd213c18af58443ad869ab78076a3c4176fa31b655dd496d78e61b6e4d1aaa82101239ae42a161fa57b76076af85b47fc7e2e93fb1eeaf73c1f52f718a969f69082414eb1f4c98a944f87d7f7b74f1b081cfd2734a85c3aeae5a7f015f896d061e1e75d72ea113d109f4a998537e1a5b0c8a945a09e9ada5a5dfb226b43d3be1b8ca037b58e7f7f90d738dcb1fed5709d0d8d8fcd66496e00f4a70e871f8328340ee67de83686faab83dd11fc707d241358446629a3ca6e8556463507e037a731c534908986aa06b72191c9d3315b08ba35485933bba0444ddf53165c3a63a39b6c14f028036b5c4a3d1164b4b5e1c6f82123e97a326d97c11c5823028289b5e740024d32114d43db32b6833f82c3c763a841877b8c84c19589bffb796d3c469c0d76e83654b265f0bf0ba5d20c538273373bc3a64e786a219414f04f3eddde2010fd61b3325d2b111e8b3cfac72390bd5a6d1e88ecdae9fbe7d1b1f29bf10529e7003a272e800bc2edafc93857b67a889e7008a1ec0ed98ae180b0e1e91834001c29e200cddda06ca8f3db19128e989b5fcf126fb096b1651dac6dbbcab5e3491cd4e9ee84c85194ed01d2fbac1e833c3ae4bc70ff04fa00f8af58ee954cab6b659bc22ee7d2c7d20634417e78d8b3019c5b67241bcc2bf50f23f2d8fd5ef4fd82d8fb706b7f5b8aa105b7100d5fb062109dc3179b7ebfa7cd84dc29576f4865f1270621844085453a10a43ece15f404142620b9f27f3d9fb05c654e37f01e4b4d0072d0c6a8ed982dcf89795f9e063e337f3099c5501e4354153ec613840f03d2ffb1fca72afcda18bce74e265a6f96eb1353156893ea493539c91f7e9d73263f7f5403ba492ba177433e3bb6cd88a4a78d08db60bd1a07b05484b8dd9ee328eef9c99454760274c60d0ea08589e9cde546d25a422e360561d00220b51ae7927e09931d1a5409da8164d94b16f21b9940db4ff09179c6d8d646b1f59993e8e94929311c8045ba3936051e69ffa8968d36a4c25cb32234e86a232495ff9c7f93fcd333f10add9c1750484eab840fe320434de9fd4bba18bab9ffca906b971438e5921c593e8e17fb6cb8fa7e58ba79d8d3311730afa3dad63227245342063f3ebfd04ab37fc9b66be7d1a250f21ac33d72f8eab5737203b15f53c27d277c691bd8284f7e63330fdf5e2cc6d1c4b367c4af0fc4fa2b971bd2bde0157c906c1a56cb14ab387d3c8ccc4c14e86f6516dff4e3d0465d3c959bc0ca669dbff157db86050fee602258a5c91e44778837b78444ce04ef7d1af00bf20151ebd5eec2251002748993f719f34c511604cad117fd3aa9f810c86b38d4ecff2c505cdd3d7f9b600ced325ff2fddc91141095a5aac35d24345add91d29f1810709b93311c437eaa13b9c9e1661dd04ac91b7749f25f12a9444e1b234fb319e1a8fe37aef129302d335fc92ff5dbedda9f95fe228128f1c5923b0f9412c958ef4028a89b5e995675e64fce7034c07bed220078c3d9c970f5c8d22968ce3a6b95d08b748ab70c6810a72a3866856410eedafba5a26eb926b632840725d49ea881c49719f18d0adb89f04fa5776a2f334c34d7d342a260897379c1173fc86eb61fb6fc0764630d375e4c507427759a59a1ca35a0293757ffda0929d82b0c131adc01facb57bb9be1ea25ad430b1a2e0a7c05858aca701810465b2ed88c32242d534033e440093f81da16e69076da62ac376157f1aaff2951450a3086b7bd2a83f1fc37d0b1de509d8a9a7ccb1f38c0e560782d835f2704495270ef61521f9eb55490772f319d777b982ad07148b7d11c83c466ae3baa214efb39ac06cfcbe917e797623e23e93cc26f329221a7da1bd82db0a3e0d4db08f8bbcf06d5a564a242179b89ac1d23e8f89c6c323aa101f99eaac755a9cf4c33dcf0ab705c675c52ca80f76df791e034949c12214ab8e202d697930c876f703a52464989197a2562f7a0458f8f06a0881ceadeffc073dcb026808e290859e974ff3933b18b72525b7ff1f05ef10fe75bf8051d1e4a566499f4d2234b8af31a7c3a26047a20d465b4b9f2a26ccc021738cc77771d36d50c18c818fce4adef75d8a9b906538814d2074c2eb6295e71c2a6e0be576d147455c526d17574df939df2b44ee3ce0fb819bb8d02c62546f37c1efb46489e71b8b4278788278cae83f552e074175a4632cf5a231b3cd103fba60972abc521bd16b9a860997d8c89351e81c4b50b78ca19455b74d484cd23fed31edd5b57877512d8c058a1f204fe2b7bf7b77e4ab9f9e01e4818db587a1571859791e17a4038319427c62e3f768bdb804d6f5c5f8e540bdca8757c125856f8203c36ba97dc65077e173f9a806190c9edcb22cbb4766700f2e511433cf866f7455542534acc89e8e9472b739f46cb7af7199848e402b173e38682dd42cad3f3677b3b580d81157a78102045d6a69a634eb1265058a3b1b931253086ce501c81092688155aaaa610ad0aa48db1017c17472a637eace9e6656e19a0fc3a18af04acefcf37bca9aa6ffaaf3eb7c8d7ef1b92cdb6203b35ddecfd0c6a9a00951a02b52f672b9dfe90cce376455088aa61c49443c4e19e27f6d45045e3dccc45dc1fc47de65d9919f7dbe9e85ee47ae982b6de04e64f3020cfa02a8ea35107bb73906d43d36a18ac5e01808de1f00a25b076d299b0a5bbc0d6c4ce2f2f832d665f28e22994cda6f631c259cf84efd0df7969146aaa917b889ad6cdaffeefa7c71d2df597d0f4ceb7f1b2a835ae5049875c2215f03aaf09d88a4aaba987f3216e2c340a06ee7bea423c472e48c4adeebdc72649e2f73ae1412394da74613a04bc1acf81ff63cf94256ff44e817e753ad348ea329b56e19c430549fcb90120ec4157450ff9c76c66e21b4e7b682222a8685fd26281d02f856e9dde64efee44229 +Output = 03da7174a4d58e9fc735b5f567a1ae965400edfcd144e774bc67f9e83a0f1415 + +Len = 28488 +Msg = 1987f99d3496eea0cb3817312f0502bbf0e24f6b5b755a3f41dc1b60fa9e4ab1aae1c6a8c3de375dcb93f2e060b71ed079f31529ee4f0d5e3bebf8a881efa99dcdc437049d85a6e8a0b0c4ebbe2252dd5842648dd17c0bdf4df1301fb86cc3950b98165aca71836ad1f955f9512ce60b1635043f0be299ebff568b6ea9fee2c2eac62951538c160ae7d46db322be21813a36bce6a46b02aada82d13d5c8b4c4cf4b439923fbca6f169abd3c138c14c684cac562aa5fe8c4365ddca33d7fc4a5ab1cb0dc496eb7d46dfe550ca9b1bafe7d4ff98b5158281df28d03ef9243a2414a8736f906100e132d2eaac7654b692275b964b2cfce127a5acc1f4374b2c22a36115259ea7e31bddc922af6f6a783d4f68db373a6202c7be7819b59452b98c2f6417f895707c736e4cf5205ae54bf7888435238550cda851154149b843cba9df3ae3b01ec4b3300de3cbc9e2ce160afa360cd8b5cd2a1487099f784c2549c2dc6adf15e0ac709ce4170c70ad2cc1bccc06c91f73e2015188de9d0af8011a1f4e7c75ee842f9bfd186f20de63073356277cd2be67963aa87b1ba2c663de28085cf80c05b1561c9cd4746fdbad67561f3221907d38f1bd618849157536c45ac52e670b201028dbc13eac622f33551161167c6b268efb72c4d9ef60df18bc989ded51dc0848adc0b47ea15fa19cd84c62fa16cc7f13bd42199395eaccb2cccadac13ce68502edb4bcbddbcffa90f9ef6c077519526d3e13a7e1c41b04acffd8c2d1b2915fe6f19d2223e11b02b9bfe3c56423bc654486cfb7e9025b4ead5aab9e463a455d9bc0652fd73aa981bc320eb53ba81b80419e5c91d3da12745de729b5475d6a48ca62f2280271e33f445a5986b18aa06d0b8da47dc8d1a83c65ad3b51fda168e81ae02e58cb0b3003f740ac7ef053b1f34b5b8dc3f071856f6db4cab89091a8053441ff065b92f7977debf0e7208ab8d9a91101aa724112d51c05bc3327b29067bf8d4f79d98ea2c17f630b0768b81ce8ccb6e77b76c9b5351ba7fb0aea8e89d564cc05fa6e85984aa5b1e727f16445e85d52267f2692d75811a26d8502acfc19cb0709d1420141fa96dc6b8ee3169ba103eea8fba823e107a7fffcec97944ff99b4643467c890598fbec7e86655786da6790543a2404390885c58f86d0cfec3e7d8f9ba145a64cee7bea0a559fad6e5d31431283c3be492352fc0d9cd6e439b018ecf929c4de7ec2bfddf644baa3bbf0080cca1dacd87822b7ac6076d15ba0161564452722bc03dd6ecd2a9bdebed55c94f5645109da2dcb5bde6f5ce8bd87391bff67e386c5430731c28da2328824687e05c967ff4dd2e8e79a2296439058e2d3c647a51983a707b0c509a1df8811de6e44dfa7b8b8ce3f02e6616b0b5f7ad7e4c0cdb5027d95a792dd85df0c4602840bbb8f585ca3899955cc142568af55e1f8f6e25a6a3b76ad8013eaa5e24b6024fe71c2c412966bbd8753230a810a51c7b46e6cde7946b3e2216e1e3b891e9484ee6e5e31031adc75418376637ff7d653c23254875625b20e1ef60ae92847046d84bb4ce857b644872b65f67789ff4c4bca4a839e2a60ddf91eb396f7e84f1aa6685f753135f30bbcec008990c8a81b7873bce06a1c809b6acaaeabacf0bd3df94162c053c55899dc2d5d18f4647daba266925235550c532bcaee2f516919d42cb8cd1498316d56af95828cec840365904bd4c345fd8c6f02c57b0c2e7aec490874a75b469ebaabfccd79cbc050c4af0cc9881ae43b8856b8635e288b4cbc03551ef87ca636c8fe8d7c4abfb8f147f2dc88b83f58378970154d9e6db006146adb5dc95f00211eb8284bfb4e1c8f1497c9316b19e91a1625e02b43c1e4d179e661da21ec9c87444296e296623351b4049b6caa92e10cb8dde3a4560e71d575dfb13c080bc18fc3029fe822e24660aea31ae07c918634f600e461dd3b9d398fbd912c86a4b96122620a06a8b69de48adb0e36e9ff22bb58f6ac0ae330b12650e8ca52a49fca26e9c9a1e32fc68004d1133e15f9c2fbc8662703466dd5f4c33ec9245569e43d06a19f2a28bffa37e80ab57326b5c35984a9fcb0bd8512b039e3c666dede5b5a28d14b6e7c603a09b9bd28751124ea8617a8db7d1832cf2bafc7485a9409ed68b5013735881b6e409f72d40c7d4e20c9a8eb2d30ff7df4af4e70b8c620f480b1d4b9ca47f3f77e22c1b22100123c4b695ffb5b92196c69823d687c7329a7fd7bae826c6b66fd52f84804771879f554af655fcb6b0f0a16eca537fe2958284d0f6be3856b8934d2095bf13e1d5a8124e3e29fe783885ce337ae63a4af558156b532657d0d03a4e79f2300ded85ce9a24dfd4416a12d6cb9a97f76d8cfc7ba02b42b8ebd1a7d557700c8b9bf0e2834b534dfd5bf8fa6417e8c41f8014f56d938567fe9ab599e506b7571a4498a666a47e2b0da4c139ae31c261b6f86f8abe8e0e156fbb0940f9cac46464ae513bd943f9d97dc24f6b25b79c03665d1926eeee19ed74e3591774121bb7032f970d5b984aebc62afff95b07fa1ba6149e547f425d52b69a0197f48b11c17e4ef6a57e1005d48f455f8ebea1413ceec56b8dc0193ce79d45af4cfb846b062e92dc9eb149af1631a7ea75e12225c9a8d60d5d81d13d0ea18ccea0e99c7c07ac81d55385b3ab4345d92d6942e90c547cccf02e1508d24a6bc5dc3e4f31b94870925d5e7bdc8ece444f94b35494696fd310c089fa3e913d4487446fbcf2c74b035af139f432de29a581bcfea682c17e3457dafbc1d0fe39d447b3df834e1a81dd322d509f44fde7f1f61295b952a90228f8bbeddc7e8dc2839d96e862b2277f76be6e4cdd81727bb2331232fd72848e1979effaca75a489eaff6a14bbbd72b6685630892f76d0775ecf4830e370e8849e61f38d1c84e6d262c3aa0efece80a91aa0108005a3ac4d6001312a2bbc49882037432f42fad95e93a0d321bc63e5da16128aec00864a705e9f498906d32c0b37607b5bce65d060e60d71e7752bf6bbd3340c07a09d5f82a2f01dd8355414805c83f89d1f44808be27002daa97547e0ea7b107d56673ff6f58a1a8217ad7779f808375dc6154e52115f0275d9de6dcbc45e34b7a262804faee3bc212e4dd96a9263d4285356be35eb40fd4376d5bceee953e541151db4ef37939f4ff9b3ced4d43d4b87379744c9e8cc6fbe10e9d9ccc202be941f07426837f020490a8dac4b15eb09f4f35576608237b660288928e7f6d10d4b209dad4d28afeba6c12a163fdff39bfc06ffc7ac50397db43e424ec2f0456db0da7f7a0072195e03ce178115aaed7e06f314bcffcb483234c293afd036e66c7facfb2d14acd2f3ca71d4618f0f4f2c903822cafd6bca606c45fbb0a2432a65f208bf3b1c514349856cff5bee658f243256b87607ba5674b538f915bbad8806d28e2a2869d810cbaf0ff6c4c64633f167df2442b12f730bca2c0a338ece95bb7b9dda899fd991f6a1eb39309949b410ab2224b58c338681f59fad9e9e2ec9f077c82eb320be6d67288f5523f9c8a60e66d00842fb8f2763d20451bb5c569b32319db5499efef9799d5cc9134a4b805745596d7f816acc4de9daa51e6bde801d337f0cb15d23ccba6ae413832d5ac967a13eb2dfa08efb9c97b3063c2f1f2f0e17ec739efdc56db62ba5a2f7f56ee7dc14e076c7eb442bdc860e039928a0ee813986a847034c42d95a2215e6350062011aff37ecc422d38a1f5c0bc9dafc551332ae196dd030e2b060d9eae28eb7de932deb6492cdb38921de1dbd22d899e9407df32558170bd3c7fa4d805144ed93feb8258b7e6a7ec3404cc366488402117585c67aba3a458c7c60fd74d71a2a5890543e2af41cdd0841e60db5bf7fbd643ed4c887f8ac66736a5f5a36c850e663149cb5b1886756deb3342d19dc2e2468090559bb87fff72f0e1fe454c99bba69e7cbfcbdcfec949d20a1d2014311ef837071faa40ca77025d45d3c4d3f4d1ec3869ca3ae2eeeeee9f6c97d1a68cd774ce1b53bcfeb3559ee5981c28ebe077c167d792b112a10fe4bc2158ea3d1a3443af9499dada82c2cff0a180797ba3d5ac938dbf37545e52b18ff10976c0245eec403a980bbc7ee51ce629a8c06a8614352454fad5906cdfdf82a4527a17f27df7ebd5f9578cf0e70d2ff83c05a2d15ce482f4eb92ae14dff6fb01da002accb8ed172c63c63220ef2a33d6e34e0accd44215353976969e7a7c64d14a0fe1fa37552b087f61975626fc5b8b45a58abfa5d646df8c893152d7fb24dc49b024c323b79131f52fa1dab30a0dde0b110af1f6287bb98ed465771ffaa3ea80eadb71a49bb06f6c3839f3bfdcb299dd9b72abf0c11d8ce55e1b57790249c397c5ee4ae18af08a8d8548eb72fbb3826249aa35bb289520392f3c380e9a7e2e35494597030cb949ff1db408f3ee766243259bd77ee54a3d3350ae63064aaaf5027fc89f31a773756a0967936b3d650028372bd96281a3ab7ac85b20889a35dea86e60ac94e586d6784f47d30171e726b78643828e830a31b79f29b7bc1387b2cc1ef304544d5b34cff93e12de11639a9b1acc1b2a73e69992de026fcb3c083819986af098675857170e339629a543257afbacec60da9ea9b28ccd91dd9d213a34e3aeb888bce607f9970da90bb6ee8ffd32cd3d563f9c2ac0b1726519bf387ec807a6a44dd36e0b1c9bb691accbcca0cbc51556342a47e36356d833a829b7ce7b0d39fc0f34562c2a221596336c45208dbf6e7e2323079e4481e943b26304f0f5fc5107f5680732c8351202c921c1d6ea25bfff4bb344210b3d8cdc5ef689acdfdcd50e28f6eae5a0da951b9573a88b8b01f01fd36166355f8fa948d469accce1b6ac59d066660c5a1b862bc0e96207175ae827e3b6d5a2e88129cd3d44d716a291c0301341e2719e00cd78710c57123739915fa539fa304f1af2b4c1107154cb75f8db1c0ec8da1290534bd162f07493a5d20e3f723ba73c62ed458754e24c036a3ca111557f1061d3feeb0875 +Output = 09a1e351a38ce0647065a47a4ca6fba8b396e9c69e0e583fed092f5d702d63ee + +Len = 29584 +Msg = 6ccbec3de410588b80ea012d035ee8eda41a1485c059e5aacc07a6498d2561118b70f731c33d6f639ca88f291ceda9565c16b8d139d7ac964db601fd1e6e963f9496bd36b17e8e647c5a82373ea23d8bf1b8aa71f6cc4d2f06fdd5886bc0f13d708665d316995d97084701e0d14349944d4813ed5dff737ddf234a70dee31a12058818915a57830329b935aa3d997877560e1aced83ac489c172873fdd9eb8c63de3fef6e580a9b0c5f6451feb6c6f3ef651e89bce43e85a9230b57cd2bb7362ffe13e8c1fdc76a7c5475ac74184d9f1145ba4dca7e388f83ca6fbb02400f5ec32c801db713293ef12f49c29a8a85c969872771acae24c6ca51c82623b36e36fc0e16e6a414ca790924532cd89a2a03769df89dba108dbbdb7d9711a7f25e8f09074aec1f8f05b932f82453b4a384edb71ea01aa931ddef35827f1615894aa798ac9e868ffe757ffd0f2fcfc55330e8b97da080c08e8fc17724c2abd2e4cd111962745e8bcf942dc5dde8097105a874ec3f9c58b6832de30ec9143b9691606c19cd8edc799edc533bd8ef894e577622cdd8d61ae1cc32b46ae3e65da71b8f19084220790fd8d870bda4a8d7c3b50462dcedf03fd8a638c62a09bb7aaaefa3986364ebbc8509f316c9b5a67d579afdc5a7c37d4011bdaa98aaaf062b089a686ab9ba333f9f9ec6a5ee805ad2a095accbad0ddfc4137ef29c9b4848d7468828208996b94aa623cdbeaa99588005219bd55b218a246476cb524a6a0617fb458d3a419ec0964f2572b17c6501fe1bcb658340b31ee96b117f4a5688c0658d6ee21870470b7ae110403ee287f9b54aff7445ec17009bbdfb88f53e290a387340c15ba403dc910270d0b75b56923e293a629dbbe1d1b3d37192d36fdf46095387c5644b79b65129c38eab65658e011d089b1b4e8804ba2230177579fff660949058d2d4fd4b43dd94e49b9f492f96cce6982f029e1c2740a3714bdb1fadd6bce6e627ef22fdd184416cf8475609778f60d44976887a83a5484ad701c2ded4431807c3e87f3082c465a2521c30ae2bfae3fa0b28dbb247d68b0ea79c6e0bc1ad9038475f6695fff48e0f298c4d801c85fc53d487fc55ec4b08372df995b75782ebf212b27d9071bb071dfef62121d1b7268c56128ed7f9793c5eeaa7ce53ee3987bfc69018a2b08e7d5943083ff5d414df0dd056f7baf7e793d05e356c83fe57f01bd366ec6f14c56d4b86311e8eac15a252f3d3cb61502cab46091114aa2054b170b9b56d381716436f38ef315eb2300cf631077e7daaaeff2a7bc94b48ccc64868e9f9ffa04ff78c2efbb11ce89f0a6b52187095625ff4ebf816cc74e27c03315ef4a3283a27cfc4151f1535becafb6a010a9d84b1f8850e396aa925f9b6b1e8ed6a4f7b68272577cc439a1033be89758d87ecd0ef0cd5d258f7ddd3110558eb7eab6d6dbcd68f138ee9ae3109f23b1a5220ed0e6bf56de4e14ee900aad04ec5ad487b839aae73240771c01c83fe96c4f9662ca1db4ac3926cc0493339a029e3d3c1f83194276825b08c7e37444c1301ddb81a1f9f956d87560c7cef400d70e29c88721c3bd9d495049a4725bd53465d89a733fc3b3dc2103773f2a940709a2e523c6787f42e4efe8e1ba94c71bc973487a418ac20dc77e98ba758d5dd622c43bf3e47295f9d4dceb791132fe3d08c23524f26c402d9d56fbd170e19596aadbf1e1eaf64c0bf47821b8b235496479ba673f8ecc833be911f563380c856e274fd094dfebeea0cc2c5147a483f0b8a5c4a5741e91d46030164e18d6f875872387a0b5cb3bc1dfe55e45cdef063b601346b96ba8a57bc3fccfce9a518bac0825ed29ebb7cd0ef1c678c3f39ca472854baa69cb37efc08ed4a33c8eb1af741ab6e832dfaa891cfef7e09461b247dc4ed6567e3cd057ebe641fa629fff4b13e55de08538ac57352d010080be39d6c2e43bb4c0687dc543f5ca3d06734246d290a23de89fc51f9fa66b3e4eb23a396c6e022af6f4452111e3f7d2f1b2828af9440d6824bcfec9a392bd04c8e7bb582215b422ea8b31539dd85022eb05c7fed02827c701365e3d891980b9b402c71b2c01d80362d347442ffb5e95bc141a8a9f6577c346b6ed6499623bc4dbae636ad159f635277491da0f74a8942b868216ad2285c5bde3b4241b96768f0591992d5b469620011717fe856cb6850103088a4388da332c66ba6656dcba81f953704c10ef412cb764e099d80b11d10635b3cea9bffd765ce60813935d8d02819df1af397d7ec11302f491517840e102c18bcb27ee76f7150ca4111a407a7a6317223e1d17d647db9a5bd038dccb1cbd529867053dce1d1e80984a33ae065168680de206e6d026d8d31d3cd55e3be9fe8ee38b8ad58c4f41e9eca426cfbbf05838ba813a11f4c6d25643bf6f2717b28f1d7320ffde38f744efa6093aca20bdfb312f0402c1ca8f91cad5404f5ee7de36a8500cac7f5b7cf03bd060b8c8bd2119f97654a61edbeadcd8d9a6be2c34d5bcd78339d9e17c460d757191e8f01b85793897576e4fae3d7c2859db02b984fee951138dce2c23bd63459283126bc14fe49798f7a27dcbf13a615cc6632c62c384bf08f2d287d849b9513a207e6037e922bd831b89cfbb6fdc2beb4f2bad538b57c86b4f2f1a2452d944714f74f806b9fb545fab6c6e051e2a300d5ea066e1bf2815438b2b0e8e4089c43ff83b5bb5293701358e93813165ee15cadb0c7c93c5c04d98900f8b9f7b9279ad031cb0cc9f9d6e0cae4631c8aeee852aaeb51af106e719724523b8dd6bbc0dc2595f1fd485f643ecf2cda65160f32636c0e46684ea6421da92aebed278ce2587e04cd254420a27de426f0754e2c5a0f5f7e088d3da010cd75ffac5060b926c02812aeed43ea1c3e886767c599e2c9c703cf3a9673c848372944df4008ace873d25439edce183bf15a6282fe9fbf0c2ad7863f1c679b62db21af073485f4b2140b2dd08f59377c26a8bce458b61d8b9b69179877afa5fb39fd72b6b66f0d1e011124154a6bc4774f11bafe9c838ae2a93717d940b2647bc41b44504e2a7286cba2bb7ab78c4b97fb13f154127e938bc4afeb73fff6435f1a199886545eb176e43e78635f2139688b2e0467530da3f18e5226eb1e01ef3f9c66f3ab71723678eb22cf8199c11a53afde48bae6b748ae56bc3ec1135bb477eb81ca421deb9e07311e45380fe27b03a99352c14611fe3cce5cb778887a3fa25808a0ecc24144ac667f6e091a1bb7d338eb971ce994410755a21583e5d3dd498259fbfdf709c6d2ebd4ae7750c37d6cbe55aa2059b49da87d2add75a3ff39c7faf4501834bb911541ac8b053c70181aaa5fe06e0f09809ab56573b05b52c1c8127631ae03cd3fddf865882545b834679d68fe6881f976588ec07ce6648511a4794e1531dcb52fa780ae2a7a04f23efe080f48a24b0b0b5c79fa5d6a67fc85f79fea6f463809ed0c7ac4e655e2b4b4286ac153add2c4ac30f74199cece3fab3be6d9c45d9e41f4773768405b67862091462da3edb1acc5509754b6861fb4fddbeeaaa8ea87e3e2625706cced1bcd00a31a82bdd4502a0345ca924822c4f30a7227cb816f7d6613784a1ef0ad782fc0e8688f061436c2d28b1188a31776703d7922caf26ef75f2403911f3fff04f50dcbb091110ffe1dbf9b0cb66be67cc3136b5017506b8e2570aebc861f742ad333e773376339ee8126e00c9a1712605238c3403f3fe79a5fa5d43cf2238f8230dfa620f08114b0a3a504a1a2192dc9a40a1b63a11565a474101e92d1c0a383a47d925a4adf42ccebb6735c7d069b013ef3ce4afb855844f96bd84ea39b72a7847a368fb4e2269bcfe7b6ad7953ecbf99a276669ce441f45605abc0f6086f8687620d21ad4e42b5c69549052575855d4a828e3703c6b52b206a13ba279bec78f3c170c0b25829a3765b950410000752a810804cdeb12461df257a6ae6ba8c2770252bed62b44ddd45b7452ab777e53858d8e7087c281230e8b47a838208c0ea72e978f81cc721dbbb14b3d98a41a186c3384cfa6a8ff100d3938e74a7fb2d6a72aaf2716f2538175d107ba106f1cec68deb0cb3387d635a364f10beb706140005c622f9c843032892170701cc0cbf600f3dc0a34464cbb57743bbd24dbe274392e774f1c6a51577f0b4d08c37f705fbcdbce34b4cdaacab2d1dea5fca87e9bda07b82e9d8cfe19e0f568290e94534e24fe4ff2b80438893be4a26a7bc07add6b4eeb7527d27fa03349877c03e7bcecc1c426ec4ad33d217a134fb4a9092161756dd9cbc2241b13006e73a8ad61f3611a961dc9712203baf7c7ac2d8f6cba5080cb4ad9776a1c9ad0ccf45611e83fd4b7dafa3136d9d07a3b69827b34d18cd112d006474d8cc85f29cbd12e3965ea6d21fa86ce9fe0ed8ccd5f9946a021e00db5e4d4bc4d72688796d3d4d72cc13a56df5c8945b71fa2163513b937dc42fe2cf06f7de07e04433d9c4cc3faf2e278b4796acb41837e3641fcebaaf5ef1e2e554bd9ca5ce82ba3a7c59e673e94b2ebb2788a13680de6f334a9513329e19cb8b04f8a80d893cdceed9831884c1918dd7563262a625c3d1f18c4ac1e7bbba3e36683eb6afb88d30d389d6eeecb89fb9428c2a5d9d8786d0314d5643192841df99f70624f6ece26a8b05dbb6064ec4559f11e6fe6726a5ce75165e1351744f140829c58f6d96dace77c5f81a7bf4bdd74f8fdec19d739f412f6fb8af1b103070138913628e26e4f12c52b298b83adab2d66ea843cb0ed1bce2c20c92f09ca4783e8d762ad34d8f670b24a19d4591b97cc636a9f15a48fbb611b5b05b5c7a09910bbf4464d75b3894a6c43bb4ae89c89981607a56e5c25bb14ea34a74c928ee5eed97248d04e07efe81a9e76b5d93869daa848fe0d7fba032fc23315bc129b136669d9d2fd66dd1292e5e4b1dcd3f71fdb41b512bab6537bfacae1b8cdf0cf0bc094af4b9d663cd990f59cd6887fe293e007d7493fa9fa0bbd2bc5f847d432b544817e1b78f52d2c29714e4c818400ae3425350c63ffb69bbf0c683ef165cdf93a59cda956bcb7f3a781837b8f8c5a561ec158c1ed619013499650f0944ca7c0e943255fff62e216504fc1cb7a3cf674e504c6d2a6768e5ba3f00778f831c8f09a680da43a90b67e6d0093a4093edef1d21509a556e7bb5b1544153ce5ba397395ef0de0d1ee3c1145bf7e6e063a1ab32d +Output = 2707e51a500018ea983ef3f4788c30dc020257b06049026181bf61fa01570efa + +Len = 30680 +Msg = d8af74f9e0f7c1e4e7cebac2356c84b1be045c8b4b52da16d574777b31fa4efaf3401fdb8cfc99a8b513d99911b12e500d981fc60cb8af86c100df19db7575c1e881fc6a738d0cdd70d2cb37db6bb4999baf9722acbfe11a7d5b1e7097fabc678019128cdfd3a1ebe0b29982dac59ff630f2cd85758efa3cd32b3c6aadb1ac5483b1692a16f5e03acd5c4a6458e575ce9309c8d9ad4e8253891942ee64c3ccf0b9f00a2d611c5132ff77e6c49bf3c1898d9b90049d26ffc768cc37e30658a4a4e97ffc7b08707d3c3dac7689ec18088ee6502ef08d3ffbff38ed2333d997bdd6dd0547fe5318ebbe51a3009d937bd44766d2a983c4c0fd65c1230fc526a99ef05b2bf49c8a3d232201038fe7d846ac1bd4c609a78cd28e60ca17028134b6cf582c990a3ff406aece1674284f039e1972fad757432b9d35581d70044f4de5d97818f691ceda9c132c58a0d5bd5bada2b59eab9a3eea487ab580d71d17b75e43b6e6ea92318426daa28e2c9d19299bcf4a89eada8211fce5e0bcf456c1bb4a957c601f13503acd8c9a82c3894bb590289a833d1ff6e8e0ff3f996eb635a1d158314c3a1f1344b9b07bfa0b9f3c47b3360d544c7282b71d4f3bdeee455cb11a133c73e6bb62e911ceadbface9d2272c800cc3beda0ec5da5d3d551b0c1c334e4e079dc9f12573fe6e98994f6ff69d248efd993b60825b40b2abc49e125e6e9492f9918bc84428a719a44f9c3891f0c3e9499e6d0bc6c177d5eef41e600bab15657a19d549a751355639ab3a4c89693018599af9e3c33fa64e6fad44fc0932f852f2fb4f7a3635cfaebf73d2b3c85094a394558af05f1df5a695b6b8f0424b66dec900a065da1e9ea89e700b7534ed16136196c63b83a28d64c7d921449c3e879368f070127952c9cc3e6a8e9bb787dfef2a2755cb181796106fdc27fe015282f835936987fc1a79a20729022d386716bf56cee0a804c43733f488732858d0809599b131ce4cbed6b3627410319ed6e40c4d540fdb31f19954bea5adc98900a8f3fd1170ef4f860786b51460b1d31a715c7681896b85e6e4fb35fb7dea7b2a2399c77ccff0efba35a369d299b4be7be43a3b1cf760eaea3fb0c15189921896180f61baf5db13a18793e77463434743652b03ef00c34747d2fcca717cc9478cb0de31938cb7a38426dd96c2686556b81eb937c04d9b8343c666b821fc97f053138da1cf398d86ab3909dd864d22d324346b3d5885f088274377f32ab105fb3468a41735a664a65ee9a02686bd82a6cdd2c97e7f51ca3d3b70b5e354451a5177d7acfd8e7b44eae55e29d88b5e8eb8fc1e5c62fc59328ac676aaf0665ddfd8648a2cbaa25f363a87bf2c5a5dd84deff840ab5299442f57127dde832aa45a7942a6acb639fb407e8e343116c4d4c8340b613fb41cbbca8c65acd80266bf951d5b56b4591bf76d9e40e7c17388fa05707ba99ef14e650a12082b20d7e35998aaf5c0cd0b0ffac283e6fd63d970f10e89913f5272f7ebf7cf43233e686918690a590c7e34dfac4913c7a1a0b04662eb69954ce39edff499ac5dbcba1fc0a41223cf63503c51b709372df9ff61d0f4a2f6cff7d7dccd29f991a01d1d63afa69bdf9eedca8b2ec00ad85e2d0852d7503d1a8669b8968b311e67526fef9bffc60a2410d174893d7255dca36643ec221dc3bb04c90d33dfb61014bcd9b63178ab69dc6b38d69f4872f12d44cc39977b043dc38f405f1b925dd8822684fc8ce2febfeef8497933156be6b1898671bca8adb21970f635b56cd07d97d797481405661542ff2de4af6e033d52babd73c172bf2aa5ef12176b34b7073d193b2331a98c72c0c80b9f7919e2fdf61e98c810a1e3ae4f53bd8da4b4b97f5b3298144b9517de509a0c33fbdeb12e87fe40f70ffdc044ffe61e20c9b27fecd96bd5a3ca92b062dabf58279b8718d8eca2dc88284dfff79dee5e5740f7b1569e0c1b581668ff04467d1603c3dabe040d529504c25b47cc11b4a4bb724bf6c5945d91bc97dfabce7c1d6e50daa14cbad25693f244ed41cd438019d3c775f642a2a66056b6be5dc864e6899448a2690023f5fdda18cc94011c9ae427a83f5ad4b02eafaed9cfbcf9e7228f5a74a6bee0e879fb44a5c0e97082492f3f7b6fca84a73ea74d6ad87169eb17a827c874f3610928b7b95391e8235ed61fa4a9ceed596d1e70bacfa22320590ffa85abd6af8b6e4b56c08a0638219989dedd9b246c5beb16317d72f57b271a50b0fb85929a67002903e2b2e8827219aa9472b839ee92096e121fb99921851422f012bf715dfca50ce4a633ff6d1fc88168eb67d41c07b06d3c270e55bc4231cfe250bf3ba053463a21947613a22f8d5683d112bf9ec1c65cd71dd8f2f467589eb040eeb80a72ccfce334e1ecc8aa4f700dac20c01bc834830a8a7e3973fa71d67f67b4af44631d9a520fdd518899f8182d02f9a03c25e32afef56aefde0663c07a4f7aeaf62e235c95acd30c8a036f960b5d0526a8dfba99dbe603dfe09018a4c67fa62fc7d9c48ad59329e375f09c32d044ab1c07fea017c8e5b1d01fa277ca8e7fa2475f6eea6b394d499ff2686734a4405648038b7feeed7bdc8943436879f8d8d4fa67f47c48ea619908a874b8e3aed86b74428c3e64732fecd3f57cd3fa2c11a60f877462690f5783e5401b7788179453666c0cc5c2828a4976dd54a09653b27f5066f58416d1b86d0061668c6b06fc76e72a10fc5041135c3aa2d3b8929543c683ad7fca97580bc11fb45bdfd4a4993cbe24a2cb55d9528be7ec010139194de571031a1c33cbd8e60be005590b19f20eb501c91a1b72cf3f4465e764d2085843e211cf623452a8448c8e69e0578c8f5292698ed1e83213e11ab38cc9a489ea489e7fa584e01701436966915d0225f9721e06f7d80544a5d7317ef819f8c58d5c6cf4a56a803f6e4b6c0f84b9520eb7d4217d0f17bace0d8b516f343a16e4c8e71518d6fc5bf574c45b324ada906c51e26379db764ef9d463422d4716460d235162944023bb5f9d16ff76ecaa036a5002aba065de0bec81c9cb613994d06827021810ebc5e6a570a920847110f52d3b9ec29ab43537d09c24b6b3139bfb1e5b630233e0cb25f075e68603e1f3ace09a1d7110d0651bccaddcc9cadc15115748dae7a6261ec0683533f89c443d71a9f6e77eaac254ff093d59cd4f9ce9583a74d08e11c5a4ff3437f93ff7a3d58cb0d564b10f91ec2aaed30289e95bff19f069aec01ac6472a7d03a123bb05a3451ec2fcd4e84513e6e4f841c741223f9ba0afda456c30ee886a22916c91738fe41b4217addce7b379d3337d4dfff8912873ccbee5ad0b8162241b33e220f481b0cedf1d06947db32ca20c1fe4cae6dd06914ac068865fe700d276ee4d119061f2602076a5b712fb477a0b8d544af30b7e21b14a959e350aaa9dbc29740b4f17f3f98d8a52eeab731282b93065282703d84c87c3359e94d1a8ad744e20b73a8bf8bfafc1d7e15203d5e39d70df0c8aad5c395693102d8524412926c419bc58a64cdd0d84fb370e93d7c440b6899d25f15211a521eef40febbf395bf327c4b24e367930398599e80b614e28682c84ffb801fbfdd7979a3a0e6807994312744e6cfdbc9e4a3eaee653bba8dff0906920e8b220e51cd2c80e7685b86b1ca17636e9eacde11dee1f13532dfcedb47df2916bada7e558692694095d7756e69e7272ab45d4811c5d9374f4ff6fd81ebbca59273ab985f4225bd3b03a6ae409cf0f089c56fb04ad52b3131c782b2a9411978006a17e4e56c610d35462b99cedfcf602a36468f43a9627f7b4e1586a8049020fef291dc7e71dec9ddb1e8d06faefcf67a7b943d82af29628a5821d214929b20dc91bbf790fee98382fb60eab996f4140929bb539e52ba8afd5a3a3d6577a50827ebf8bea3703bbac367263123043f4944b53e69ed30c06932e8c121112038377f55daaa4c522fe02da9ab5c42934916bba28fd8f5c5c58dc9785915be28ef4f2163d432f2314094101752b47ea0ac0cec7642294e8e24592f7d5483a2fe14afec9a77f11b7a08371954cee25dd8d28c35a4d7f36df6776be38c5603861c62ea0f6e286d4eb90159b7d6725e5688472555b2d39fca9b39368419d01dde00248e285377fff26ab66c6a10ef910f5b94589b24a7b6fae8e4396faa552b014603fcb5eee921bcfb81ffae989922debf24a6947ed6b1556c02e524b247c3966a7bc636a4fe9af5080e73f3d1f17c4b2f829fc025d31790a10fda31c64a6003c9e66b38fa1a94310cb679e851ab05eb293894acce4f6203048589255abf98eff0fe6c2b62efd607760461ea9c08782528a125c8bc8e294322ee625de429d6a18c0e399c83c0b8ded092dc8915ac1b8fda76d3929521c5c768b50669f71b91ced79063eab14fb52da8cc4a2262f898818b042e98ccacd0066263d5d817f762de804f7bb49fef637a6b2b2b74e89057b0c6e38759e781c0868c956116ab6fb2470285d18884124c5b943a00cf2ae5d1841a9f8e445a332fde63a438a435c7189ecace05b5227ac837c0735abfbe7bae71f292a3e6b9536674742abd0f5baffe5c659298e8ef6b6f955c61a9b4f7c44710fb5758cf79451ccf3a937ec6718cebe65f7e0b824f76cb0ad47f6e4d8b5223d771781d5d1e9abb652378ee580be059f314eade2fb72f42fed53728f7cda7dd4c015f721e1dc6bacccb458c32af3cd0d92253613fdaf76fe7bb236a225327cbc53787f780fb4ba37c9e73f8e4c004e92f045265311f51ba6c12ce928ba06487f9607c0e343bbbfdeb199e94fcd2dafb5b37723aa1f8e0aae25883326239e08a4f38c63696537a329ec92fe0e97c219ff4381d52110c06c9e1190bea64842e5b4d1cd0f135d718da0e29a27d19107b3f6092be6bfcad469ffec0a2faf113a073698946de813b1a6ccfb790ca2a344a6246b3ffb8d361228581ebf314a66cd95b2afa725f06f3f1534a0f65488b5c01911d283bf913cc1d2310f776a7e2f45b7b180cede335a62036037dba78cafc43543a7c1d7d5c52a8e1227fa825354e897ba72d340baba6398d92aeeafb47998214450bfee61b7968584ce0f22d1bdff5a55ed7df58c798afb26dff8110afc84069c3746aa3bfc4bdf0e6c80f20152d12b0a5993a2b17d1f55cfc0c078961ed00cd1c21db36d7a92c339691399eafca830621fdef232b06acd5d33108a5fc8c35a6d5b0eb2ff1bb2598c2d91c094a1ca91e4a5268a16f8b38c57a2aeef6de3a619f869df4ff7c5f5ca8f20c10e082a807719543215653f41ba45746350c855c170f85459315f62a13ecaaa6d2c4d80120a8794cc39276c5d7eaf11f75579085c88f78344013ed9ffdcc6345bc16b89c871b8ceba9e65674f001ee132a587e2bf897c6068669d +Output = 6a36ca59c101c70852cfed4e1e501bb345d8bce00346e440926ada0a30a8f8cb + +Len = 31776 +Msg = 98ce1b9961f07e54c064aa73baaf65b1f17411fb6e308bc79d2852a7999fec1eaa4b85b20d0ada42f3d2559acbe67945c45081a28e8b443b61805c5141b487bc80bf4df28400e465cb8f50122b73ce565f157304bff511b64f9c5a60fbd2482b2110bc80503865625084e30262bc2c8dc8ad2f4988d6b8e06e6494fc5061f51395281885f81c24e48a995692f62b5b9209fefd9872960262c6c0514bc7c9571ee5eda9280512eb9182b7f0ec7127220c2af22519049db7e45f99db78e87236f21849b992fe8480113fc4fa355b174ba43170eef6c6549f0d42d578a93bc45a3736238eea6bd9ac0dc9a9bc983a659c01285fa25440218186765e710749288a9648627159d579372d294f7e3b9878decc16a9875efb6d27f6031a0eb9990490b655f0aa07c3cce918669d8846fcb8d8ac0435e5397ea15706f2f396e7b3c1324165b4811bbd3a8a77887a21e2ef8d544af9eb06105123da5e4ad053bb20c839dc81963ebd4b2be1f198d09337f85f184dfdb33109fd5d78a513988b5b67806c31af7e2817f607b72f9c86246c9f96ee5e1875ad4c09b5f884553587ef105095e8f954884e4536d4d89f841da96c9a9c255319c302fd9524a2198e8fa0a4a27aa96700a68dc1200095a6b2c618e8d4ea49b587bb536264c2a8668bea95aadde51b006bcafaf02d030ebbf866de9aaaa27347a8dd66be8a9b3d4514e2f8aa689ce6cc7b3cbd5cc6a4eae53e46260a858a4a106270649c6f770abd11bdee2cad67b3d31943ff8d51acd22d6caf16c1ce6c77189ebe74817b1eb6d66ac4a1b913102a1e2e29e80a38e46d996ae7d646eb0ea167450dbff71657ea98083f39d8025df2b4a0349f5be111643420368f21463871063da66d85a8eb4e0cd176dd12e218b49d59ad4d08b6fe5e0376e669db45b48efc70d1a5b499a38939aeb0b6ee1c0717e23fdc19991d720410553e8bfb5249a251c4d68f0a514544288737ecf416f3c48a3c082c978034fe62a3851e09d4be520d23fc5411389926df4551a6ac39a3629d377aad8a460df3014a04498e33dc4839748c1c51b669d868ce470c9fede19a24177bc5f8d7c58bf630033511d66b2cdd9fce0e51347b01cb0c6148549b731425c6519c6b9b246f483fc9091a2733a5ff8b0a539918984a0ee6e67f53a92277ab2b44596afaf247ff5da0ee318dfb5ca9228812b1cc885b3b4320dc2581b66bbb2e9e257e5cf6ba2474ce0cdf708df9e24b8f7422b613db590d55845189f79a5fb7a5272d29f971bd6b9c8aab38af23b3ee69a172400173712bcea25f2bada99eaea38802c9c314d52a52911e4e2a8222f45cc02cd119ca8a85d35cd8ce9f4381fbde6f82a41c4a71993848be18c5bf3a43b1fad5d02489ac03abda43d9960e0e879f053722ccbb9ba096d816ff4a8200c4b076f7a7eb57df8da04528b65ab24f382d71a8ac9a105a27b368ab6c7f727e5fa05d19bd33dd2c0bf8c50fccb3d84cf7d2dc5da84ff1b716d82107c52e38bbfdcbd6c47ac7c29a65fc81818369280cadd46edf80b305b8554d2bb1731d7cbf84770a7f466eaf3283f4a20543434997407c4eb59a8ef568cc5aad31df15e593deed20d289ef4cfb4d284f24740ae4f59a12a56760a868cc6447cf1070dd1b3ef1754145ab1340fdacdfb1657e86a02fa1de9a7e38c907ee035bbbd58d3fc7c8a756956114a234408663f050ca7f264b3f2756818cb87ad592df9608a001913ae6da43ad2d64cfcdc5fa336dbebd1d545b3701f8c33e6889fa1b8b3110ec209b984774b25c20baab4feda245c3072e4fdc54c26b45237a132157bfd945c81df3a4e64ff60aa09ce20e84675f42270146acc7c1637a2f577af1db5d87a75d2f4af2fffd03a0aa1e7be806a743a1e33d40b2d82768ca29a7c651ee8bc49e72ffa96adaa5618407e87dc7bd8d7a4a048a46d6ce1c009ddb14ff28da711792d13417f4be7096207fa1f092ef3e8ba352925f00f3c7b55b0b442e60e53908eb40779d78f5862cdbd9f1dc31e5e5fe1694fa93188d510e6c82df5be058081f11887042dec50eab1cdf824a8be7a85c09946dea06e5e19338088e8c907b09e56c71c60e0e7730994d57f9418a3caf2ce618916db243a0cd2865f9cb589561e164c22209f0521680d50a01ca152e23f614e90e2305eeb643a260c71f20f03b9c62452b3c6da0e5e71cc040ec14032c43fbcf8d15e5304a7d0fc2a091d0d2bd9cccc08aae6ba7c8578a405eaf7004f1990391b6493b4f8404d8532e2750840f6b0cfce667d3b1e5578754041b0f799b8394f930c9f0948d5f63db16eb884e5a9188c1e8708e04646f7bc2da39daaa518616cda49dea478d161a2203e56177c694aad638d083e86e27ce538710b9de3c2cf1d6b9cb13b0abb264ef9b1cc1497afed9057d8f99a72b08e8cfb4a8955f84fc8ddc185d521710baa80c8698920a9f567c145fb6ba88c29931fe080a5473507e53a7685a8ec3e4b6503f6d61ba035c25fdcc884ccdd25b6212a82c3de063c83ba9fe52cbb1fd4e2fc351f880237cdaf2c3f59d59b9ce20ecf194c7491f7716baf8aa7eb7a20d76ac690acefcb3bc4045365749e668c437be378b8237fbf65f83a9749326493b85b5aa3198dd540db7a6beb932f9c1fbc8614d55050e5b2ace1f22213a218ecfa3d2ee90fd2bedb5679ec3e5009dacbdfc5b99baf7d626598815cd7c1aae5910f78c9deda6ef65fd77b4ada15cd71150fa368582009846ccb8ed114cdcd89247aa6a1f113a31a62d1071e4b6eeb1d8fdeb797874c95ba2cb8430555827a421bce3f5dcc462f7978d595cd0ec5d32ea0cf7adda59fa27229d14650369a41ceeb7cbb33dcdc64b20657bfdda0a51622dc5455912f93b04ae8c91148247fa47e2808a2ea8f60d3429fc9ddc68da744a8a70fe058a1c32fb2ede23c63abad22de35e47ee8605e0bb9a9be882e4226bf1e954493aa98a8a138adcf101938ad4d7da9b2b7940c3e6e65b8a8476b4abe16033ba4f7ed70ae955aace2450f57ea74cb07d5d593cf8c8bf55119840423d7c9d4eea385c7c66f8c777fce338c860f4944b4d0516e46c2d4e6e784c69f4a0e4b2242c2b5900645e73d7ad574374f662b895524d369fe6be9a8f06c978349bc2a69cc850ffcccdc361b32ba8f861099abf75d65b43d43023aba10437f569f7be829d05d0d54668d198f4bcfddff76043b1d21f57c5ed1003898ababe68fa7c7f4d112dd363d7ff2e2080a97e819fc5069796766a42514f063d3470845a51f2ae0fdf868032e7588201413a5565bffe8b78a823bc4468b5d5ce856eb453d521f2d1ef5900c9df3d76431eb6a714c1d4795cf06e74529a09184467fb74d9eed1f49a29ed7bb02574b1effe679f140b0f794b569fbaf54f1576a7c161ec7604c95c72758c187023c5dc0dcb9362ef0777324ec2fdb8b3ef9f98007ae646b17fd2d161bb7cff9040fa9fa36c831b2c1bd34d6c1cd19317e27026567cd3a712c8b4fb70e3065998e3d9a1bbc97ff054b1ed71ae4c6376a69050c7b2ae703922453783a6d5724e11762c8b5ccace09ee308b471a3afb87ea6206231bf80424685f22110c7908058260b9048f57ba8f82007676bbcfe1ee6abe5ce39942d9906d7e3f4ca8b710a7730949b55b5889aa998976a796f15cd4ae0d18af347435a4b70b54dd8478d15b6cd9a346c8b58481ba325382b589b6613fb8032ef5776188d06c2a6ba8a2944af638915ede56f33d6d65d4ae1f8035bca425e509e331a565400b899f1a1fa19b988ed9a5a6231e053a8ac2d4dcbc220e65be86e8078b48638d4f3921e4d54077db4344c527054c02aa07e59bf527c57e0beaad71676d94a9419f01980eaeb90646bf9a6369e2c75c444505ac71a865351d10244f0dc0cf60e365aaad9e91536f616aa32a75a4d53a90aceaae58264b5a239ab128016a42affc08fd079e6557dbb4ad26bf5231bfc417a55b4ab28bc016a5ef1da5495535bf13f0bf4f15140d71c8eeedcd0873cd246096222888be0a912c772f6def67efb7b085bb2c0c85bd5a2496befaa050467ff4e805efe1a771f23f9ab129fb8abac05c2eb8478aa0afbd500e62ee21b274005904cd48c62e3f6267c0698073a5dc029d567d47974d2bc3d5bda15293809dcc195042da3e3bba082b51211b61a09ea4fe62d3d53b7478943a0a42ceffa20a0ebc362b4e51b62c0d13b59fa1cc6348cf04bb82997ffddf57075f0f096cff03ecc81d514b0787db98a754acbbbdd522aa39c9523a6ad0a835c523ceace281cf8ec76d7d7a699610d270970f113be0745e24f40b6105d61b55fbbd485e690fb81d408d75827ecb12e2f5e4924a4e6b85124da574b557f57fe0319745c80a9104c1bce7010d4f0f2bf1bea4fb0efe5f9eef3d4256df68161efdef188d92ccf0fca1c2e2ebc0e248a1275440130754a2071d7b35798640223ed5bea8e763b812e8e6dae6fa454160bdab3e1ea2db571d08c38fe4a553e8ff288f25af1ce3d4e010b78c5bf544743dc7a604a8703210b8e90902b9a2ed67972454ad95f5bb2a42bb3d61aaa56481c9073f2f4544b5855cf1185b1a37fec5d0794cdcc33793c22133a0e039d24e72eac49f465ce70bc0ef691822712e2b0a94719e3d9fad12a263be07927143aa4f8a48edd15722ddc95a9931e0254d1e3fca527355921ee1d4f2a59afdbac21f1e90d952599dbbd3a686c9891b9e5d7f6c5a65f2ae0551a860b43083ab7d1555e9e4c0f665967a94615a414b5e4425f5972bf244cf5e0f0e4c93a6e7242005f5b76e45007daa29c902bd489d2e7f6f29ca274190400720bba27651f1ee0d5aa79116af9929418e198f9928a715b701c30c3599ff8a664c586a4477c693aadc127ec448e8f2c3732d12d527929a54a46a663d44b934e55b8daae761919b6153df866056165f989eac92598e8646be20c6de2888e5c6ea14016c4657788c9986b5b1d2224af928d73f180da5aa9f5d3d807fdcaeabc8df405db749a0a3f0b93e3d0802f4ad46dce88eabd9b3272f9ac3404e42fd34c32ba74894d8863b4e2b431f92d81467d01a984053a502257edb79ad5542bfa83f36116b09db4f682f565d02573dc99f1f4baefe1859d8cb128928709bc53a2fc268466d213a44511aa2548e60175c7db9d8f36f03dd7e41750d983128b1b8efd6290df8e1ddad1f9777ef6cb450152a28272f3c1b193cb02fcd919705f07f1302e130b153add2f92e3df7445bce3ccef4a2290c69f55940c633db4a3968d7c1cff875427e90fa08685c35bd5e7b1990a3b0ab88f35a1f18c4a63df3cc030a21c3d6a5536a6f6f74cc3c6e80c43df499bfb87b58c32ed461b18d813ac7a75f5d68e3888b20337764e3466d3595fe1411d0246223e15bc14213526dc6313e1d9a4688e593a7c25b0033e0f983daa5c21f5c5b289153c72ee4745cca4012af8d03e32b8512070663724673d9129a1a46ebedc5954b235c626e5b135f4f72e2f7bdc93631b149e6d6dfa468d68bdd45e89e0aca71f95900a70951dff69c5abfa3f3800faf187449fe72d325b896ab0ef0603cd28343fb9d43dddd2855ced12ed8cb8e20c7ee901921505d1447da0d5da558 +Output = 0f77db48d3993d887b364026181fd9ba6a2f1301318377df7eb9167270c9cc00 + +Len = 32872 +Msg = 9a562c766897a984ea44450899c45b3ed1d24e4e277f7a72fd766b5a54844dd0e158a49862873e9a32d365431bac59286cf7fdec4c0fd0644e091ffa463d794f5a0164255cb84e7b570cc6f96777ec8fce08265a456415c7900bc8fa55dc2f712edcd2e4fd33c2708077d0f5252dfebd1f8d335eb98633e1ea02cd232a6b577c856e579feeff83c1d59decfefcd776f8860f8bc1517e10fb8578983d6df1d8b986415c1cd62478b67f0580db947c3b892b15964ab453965c89f49010c6779c705adc47245eab8897a637f655962437b83727bcc38a0dab4e1dff1d63db048ae928c7817f2e9b9dab71bcb434aad751ccd2cd65f27db539176920a70057a08a6b198b73f5edfc9e3b091b2440779e710f2390f9a13351270096df96ade053843f55af844e43d6728f96dcac40a6807fc753f7e09654ec5d51ccc453331e2660ae03bb1b51da3203ef3f88b6fede86643d898b829a898bc3523258445abb2006fe4c37a2c8571738a32ca6a940c8b706b9eed248747a38414bf122d2e95c4a5f7757ac8079658ef9f286beedcf0c1b4e82aa5698eecefabf8330aa65aaabaa51634da21d2caa9e2e267558ea7351ba24e2e49fdbce2dda254318796663504bc508559fe1abce4fbf8520fd08f33f9d711fc5337add41de5bd3d1163bddf332a4b0982d34bd7aa99558b034af197fcb1b82749cdbe3af10497b82094ee03b69d4a13dd37e2956b596e64c8647abb94c0c53196268a82278d88354db0634d0f73f236d1a27b8097aab791d7a387294292adade0b88f3401dee326e13caa05be4cb80508897323c00bd574b98ea36b9695f5fe921a28db10774d1f83904ed843862fe0da7365f9650b2c9fd68c5bfd0149229622c203f1e3e53a81cd61be3f2fcebe7cdff6d06c07174175b7332d48033ab8172b269cf2fcb71ff0071774a4e384e81b716a2f1616be9898e40973f71cc91af413de5058bb5b81ecc9280ea3ff27315f4763ee62247fb67be575dc64cea2efbf654fcabdb040f4ca9c19e8b6e3442eaaba7aaaeab0c91f81241ed32b99269acb9801687c6c05dd3bf8739f48205a34a052f4d11a3c29285b385ad4a5fce2a0cb4479b63f5f28cf9356bb9ee246e7e7b2a988ed6b272e856c9ab07d8e7a559610c34f3050fa2830733f68641fc75bbc6416ad7c781237ab37b3c62a2f820dff4eccc8635bdd62a44e3ae08b5b1254273722b8faab8dd30e4f1bf26723b45a20d7a99bdbda79869fa6b1da711ec83fbcae7651d48ffa8f23054bcba0e581e8bf4de22fe6474ef286ff3cbcc1f5499ce13c59feb69fc8da8e1ccbb883ef6b382f041efb2f1cde44feda43fdda5926ea495376260d45a933a3d8045f7ccbd0a704acb89422d597dc6baa501446c4d0a63996335e453bfc3908d99e16f7e572d3b4ba37714e0c1c4751e1f99673c2e76f56771a0dfacd42393183e18581e6924cd38f24192d1acc145633a90b0ddddb940478a2bb9a840be292898711b729ef50c5cdf7023cac37b1ccf1d6c861601db2e81d65fdb0fab993b03cf741e439baae2fe938b2e91aefae4acf1b850b042e5a65c7cc3aba9bfbeb2f20aa9ca580b4b3665351a1df014468340ddf978744ade8f21a4e0923e2134743d7199877b94deefdaeea557ac9d68e3d40ab96527beced319783cf9957c036b2c2dcbbe72de6df7a5e6b54490f267eaafa07f7f9449bd59891d61467776347d0766c7d50692ff350e44d14c63bb4b821bc6d42e8291b409bcbed7e3acb7cd9415431636ff589d915d3182d7ec9f1c925ea43fdab83ebacbf9812436fce8d9979fed3f4725d74ef3d9d44f4df447e301c16348ebfff9d887878ed2a92fb15d6eed8cca7240b81a43cb56c016435ba8b98c2b77c91f6a1525af0e69a20cb963014747401e17a209697bde5d9aa18271a1072355dce038798db9296f8b5ca9f238f54628b2733e244e3195af42d66448a17a74698d0a0b0ca8ed066ecbe72813fb3eb20a981c3472d835a23d74a9aa34a12c453b42648dd75c92ceedca75dfcd326cb36e37da2bfbf0ce2e8f99e4fc3e8966bf5464b764e192f2a875f0ce7628c5c570ddf775ccc87f46612e1a4d016c41700a3b5ccb38323353bd8da5b9942c9c9212df40b4bee06be362a15dad62c8b2924d789168b2d325fe35bd5100e1e29f1ac0fa7a60a94c9eee5a70cccbc75ac214b1946a5679cb523b378d5c690751b7a7a3b80d413712feae7024ce71d6295a3d5d16515c3622a052eb862ebdab81ca7fe3a0621f0e3c756dcd44ca653a3d63567986ad4491e1f98a7a2f2fc3787bc1eba73adfc2d6d1ea7198582a70999ec3a72f6de5d4310f442c0c10c84513468533170fedf238da4404fae9555a9c556478a55263d5bfb46980c8b25f0927eafd9f5ca6f576db5e6d6c1b7eb3ebea682c1103bd8e0ee2d94fced79c5ed95a7010779e875d1769654cf1229faceb2ce205b97236ce494384e05e61562b7b54dfa802043b8e9d87f8c9dd38d4a82109c8d6ba1a468b4c8ac003778d6930b7be3fac89b749f1d0df1dcc7684a60f562a24875a22742de05e92a063835cd35740990354df39ed7719de3d062f9c495236fdffe2b2491ccd6704a0686cb77e2181f497aba294e95cdd4304d3603fbeddd65c289af44cc1db4e1de9cf700398df2a584fd62be14f45d1530a264015d7bfb248e9c90e0582d2bbe564e0b6c78957e2cd131ca0a886fba0163546f7a8fabf71c92ab828fcc8795565f9e2678bb852525ccbc72a72f646f0946e7dac8090a7bbe7d3b06bbafc99c5a4911faad88f97220c5f1df0c507ed6ad69e118723023d3aabcdf7fec684fab2aa12dda83475f0f9e6b8671b2c21bab5e3ab4bb11bb64a931cfed50aa8ca64c5806665882ad2237ff0bcecd22cac7379c37f7352f0169571434f94b7e9349fa62d73ff733f0ff95d3454f63e4f10e1607f00d1912889e87a26a87b2c102c72fcb923f291fd923a3bba69cb861cb5cc101e18ac974d760956cff2d192a519a7702d5c8809ebc4aec088e1b4d41b04fc31a8ae4e8ce647c1ae4613df10306304a990080704910d1c95a8a6f94dd563386c26a9fd977c63d82a91f5edcf3a715250ea0eb8a978d64e62229ee21bd13b49699ff302e096321671ba7e42f74aad580c4456e32127850acefcb3b76697f5f8cf1b73a590bc1c432cc99828afe97ee086a5c8d0932684198140ccbf55b0f70b46a2112dcf77892602c42ae51f9e4cb065154cc628fe394324f6d04311a3ab4a783db5e4c44de1889cb51cc270f18092529cca0f08360e4f5f24a98bc2f8787f0af3471098c88c31a1a35607ca6a804bf5432af15a566907d9d43edf8e38c570a7cdaffa7270f2e9ba97bffc5492b5a6f51154b547e7b4313b0d7787a0eafce6f5d1d5ea7bcc7c788f9841e937f0876afb0f30a2f67056962cd83cca1e9684a99c09a227db6490a5c7aec3159a0d5f5eae43a7028f79b7fe553c75f231c5c581457dfcfbb9c098390be12ec9a66fa34cb7b79f1b3c8a3f315d410a4500fd27369834cdac3d69fafd023a684d83a0bdfabd730137232c56f6eeefe30cb4c9128f3c36fb8391e620b655c05ae958281330697db69c6ce66416ad4fe98e74aeee56da8b6fc8dabf702fab7cece54d8d0fb863dfa5924041d15a4468021569362351193c12c3437d542fad7407888c59175952a1b563c7c405875b4217e7bae81949a24fcbbcf1a7337d03b2911b3a1395dadec9d05528f7696899e6114d904c38051ccf81fa0fc574e2543e74e68244f004b061ddb28c6263c4a75bd68f13ebe94f30c11ec6c35f8126481e96318a73909f7070c3c01a8e5c622ca950f56a4c92ed862f896835fec111885ce1447a28dd73c6ff6cc8fb02bd0bd1d965c7bef89da8c520aa288f299c6abc003b667bec3f475815bf115646ec873ef2ff4c36757048959d694df6697afb8c108ee1b5451ee4d1baa4e554e3539e1afc05cdfb4d7595a0adae219445c38a9e96c1fb4fbee213d7f6038a1d6058180e005f92340712578b5861ea9145dfe09d99bcfd71dcf39a12d2c449d84565bcc104f5e30a2cb15501a66af115f137c52f22672f4529b9412c55d06aad1be153dc13af08a543b958a8a0b17e47d23101fc38aad8f02c9dd2ca880d35c56834a5063275482cd49228284d1fd94f6f365bade36d419d6d0513977164f248b7c57ae86b2fedc868a38d2ab69a495650af9cea2b98b372755ace381abde85e8dfe9a29c5c53da086564f56e10b1784fe028c5a19137497cb05c9588b01602d7446cd72491f81ddb6123553d85b8c000099f3a6b4c6cc35f76ccd9dcb16a2e0f305da6bfd2500a6804008caa370eef3deda99760599057482f9a1afe1e6f69d93a48abbebc004246d46906248348584212f46701275667bf3130f37d858a48cda89a50b1bd6d37e048d95c4d18e9bdc50ffc13fe5403673d221ddddb553f3d7521df3029350b6ddcd7ddf9745657622f3b1d38986e4be83a88dd44882c12da383c83b495d17f569517e3584ada35f7f93af44f7fb4746d4fbbebc214789981bf4f347878112d84917f96133102f9e1bb760dc304e53158e561c5d0f0a937c642d04dd650528a7a6a854294b76f17b1de72c62dd87ee75d83e0f7ebbd5c723a9b665c68bf343a9a78af95675e8d13eadab7ba0a5ac02acda3dffe9ccaf0dd410187ccaa0524a2775474eb0586cb72ef58cb55c31c77603bdda5464eba14dd6c1dab3b04d2b24693767bdfe9d0d8b941a11425f28df32c2a99e76b8c0b16f72e58471423985bbb71670ad0aebd035b847c38b7133fd1e31c50fceadf2e95bf0a49e1d460c68f6593aec869aebbf9de2a228f659fa2822983ab7c20a2a51f99825b1218570ddbd96ca62af7744e1ac5a53caece12468263e2f1ebb990ff032b19144e4c70beaf8b8ef5b92699f3e48678331d6cf5ac5126ccdca22204aceec850fe0ced3859a8f05d05e9637a4df5a535ae31aec4348ce6a3c455d6882f3105ac80c477387f26bc696f323abfacbcb64ff6a220088f84280a317d63960688779e450b76db9fc724268a2a18b4a0a81e39b4e54d3d0de57f62ac6f35a8c34372a8a34868ac2bf8dc36ff478a03ba5661855151a2cc400f313fbdc1e95ad5f0ab5e2411c924b43a58fd27011b276a3614a5649dbd50b68ff203be1beb06bf2e76115fee24dfb91a0efba9fd289a20c59c2c571fe944e1e6465155b3a7470f4b5774bf43e837bb0682b4f0724ec68e938c9cb16ed323528082aafd4fca9616d5e3faba999fb72a8e38bb83270a47041e5a590bf0f776790d5b731d36b17e965c9015ea75c7e8982fb571ea81c7a611c489e3bf4cc2a8d5eb253c4e1ef85aee5de058c76edd4684597d6a8ef9233e48249fef53e8c154e9886489085f0bd58f485925b9cb6c5b6f99e517f91389aa07cd00be523b7fe53483bdcbc47d685909ba6f2f6a31d191ba6fa10ca1678763e11c50f342db5ae4475b85870af0aa6fee1296b83138c974155925bb204b98e654a105009e4efedc828e504d646f2e849cef6462b726a08cd0e4e7a5fe562abbe2d99178dcfcb828768aa271393f712196af6cb154a1f346ad716b4f840dd95f0c549abe776b2372a3def0a521e81ee18be0f416a2213e3bebad253a69e9114a417065640610dd259af9cf6b970f942ecd12af25183aedd71be6a9d9086e6f0822db95ec019421cbbc799317010c5d73dab3024f3f458e92cebc6dbdf8044f0310e4b0c8e25bbddf98cce03a0864f75b455072077fd79d1974acf54ba1413de5a +Output = 8f38bbeee3a2bb1a3e648987fdda589efc4b543c018414cd1c16f530f479c7b8 + +Len = 33968 +Msg = f3aeaa57dc5aad810c0a23ce58c83eb828f13b9b35e7410c90078d6de7dbccbe0490c8b696aa471334f6302e9fc0f0d247471c4e116e58c958b477d63266e449f4144048f8414ca59d5e0a6b90fa1fb64a337cc8da703d5ae552d130ebe75cf0cb2159348a8784de502bf7acb3dc930c389ca1311755b9663fc7e3a29ac5fd5d92a15da3d4e5b7675443401991cf137b1a6cd4b0518494956ffdf555c8688f38517b92bc5fc1ace7b1902ddbb13c69abf78a5d6d0f6796917cda4f71fc38da280e9741a8b2842c0770f9051a9b895b45d7de8491d96587ff6e48391dbf9da5d6d3ddb18e5597ff6f986512fdd820b2f1c350914437e62e8a4e2efa8198ffbaeaa7352c97d160edc631be9aadef673556c1c8cbadb25254d82373dbc60fc6df0b9387f8ebad49beb444ebe65268c8ae1ddc2e7cf5d112c191f5012414ac5adde19dbb5eb171b939e3d7d43e13cca9e3ed196aea431d8c3d5eccbf1d92f8237b15d0b9a612a61827f8f561e918a2749e6f82645dc01d2990e7b1950d697a8a834f31691835d3cd509ea37a318a7290a54b1e051f94595181d3ab6b3ec0baf5bb36cab3fc4380427c7beb075c91c565c028f53377e6596ddacac329f6c041cded73a280996335de7337d4f0b354215bb9ae10d7acdea6e3617600b87e91967bdfaec1b638be7b09fc7b661d7efc11da578676da07a6c71ddf7c6afe1e5a42655a8e303f217bd92be1efaa7605b01a4a61582f22d06344811b8709e41d44cbf525bbf6019cc3d8ace83aa7e48f99c613a0cb44994f40a679df3de652c576bb920ade1be6f1befef5da04664d66de9c9ddc88bc26cb63736cf14608315c1899a3cf9fa8d56793d66c7ef7ed9bd0a92451dc379fb08ef436c21a4b77672b54ee923da5a4b5476be57a9eb946b4161fe7956a7ff621de1c74e222f43cde7a5041c61c991770d96db58700f27982806a6cd24c08c8600402b736d1e85e7c91341aa7342209ed65c2cdfc6d4b8ceb55b23b714b7b1d5548d08625efd0e52bb729019d4ce983143391b53fad6b89d9df1eddd82f80fde8f1ab6a174353dad235577f102e958ccd8b03f6ba88fc773364d7d971c0be710149bdea74961a445953e51b68a0cf2d00b44017d4c6a35fe12d05b7a3c6de8088962e8ea5b0cc2ba759fb5e0d6b3f6d95f76fa0f42e0a48ca82ce00d5088733652126de10591297a68fc3cf68578c54749cb819848ad93ad8aa5d3b714f62918032cc631e5994913d3d62f6df2b5fea86eb440beba0b83ef2efd8f0de6317a2c11048a43777f92054aa035bdbb15f38b12b3bfe91384d5a009768a8840c4d6e1105c329c47cea4dd41fcc87c5af3545dea6c578de1c4398ebeb34e9cb12acfe5657657b2b310e1fa3e4e50103ee8819f6a208033a1340009933653e1b3cde597a4f5521d65b0e9eaa417751ff3601bddf682f260de4ec99f3b7222cdc5388876335bca32bc591d2d17eaa001f4e48388340606abf58f16be1be943d76205591fb51c18a943640c401e2a595cd000492c871c355b837f47e4c92e2f85168ea7e28ea8d5d7875c37b20b691987012ddd4984582716049a0db1a7935e5d5f6f256d44a47a43f4bc1ff174295916f4d7d05da02c24620559a8935bcb58d6b911321e6b718e85080e259cfceda093479892d76f1ae5a5e258d9083a389777900f5e8467a28af15dccf902fa28888265eac54535a6b38837f1ff9ee75da2b690c41b3dcdb9e84f52730ac1e06c694adc38c835b852465f82cf8cb5d7ccf32a17d9f889021a2ec5828acb68641bcb73172d1c275b9ff6a24f4c10eb7fe91138b1bb6714a965e71a6a8ecb54e9c93781a312417894024d06e9e22cae64447568dad2f75f280f79a486f98b15e5f735fd1c92d8c8060bc1f40f4c208d1961a8411fdb19c702898efa44557b29ed283f5bc0293284062efdd01bc4ad0603b32247ed1e5efacd667f923f2d1c1f63cecc144a3fef3b28ee49418bf61287b7db6be3cf273758ed28c3f2d3dafe54ee7d54cd17618f6be2bc4cbefc5b01a0aa2cfdbb3280237ff63304a2bef99278e19671ccc4186384d83b60bed96dfadf5f3a4024b3a3a3be5d27ba083d0368d9e1bcabb9bcdf3c145dce3db7af995e924b85ebb6cf2c58b2a6894cb9fa82f22663525b1a8e2059a907f73c3feb77ad78039248e7e16482fb46aa453e53f2bebceaea0845a4764ca14b48d4be198377eefbd1f04e96f6e2d6d23d2bebf5dd3f2bfd065be18c6b959bbc259fc8c6474e75a8e76a415c5dc8f3bda479694c9cf3e1fe199e64c25ac506bf3005d65e3d818aaf252f66ae03d5d08d62a62cc4cc6d7d82a67855d2de4b60e8daaf7d5dd0c1bc532db835187379dbb60a4abcfae61c6d0f3f522b3a60a938bd97e504519b8f8959638d2308472593cc0ddf804b74712f1846b45b658c5f0ca1fa5f21b6083b50165926c709d9798733efcd1d52e20c32124f277ce0bbed4b3a74765c17a155cf0e910d77a9b4e6348222abea9dd96e24a1cb23e63869d472eb88a2f9d2f17f44c68db9db5453ec1a3b38e48e98a4f7553b5d225dd920951239b99da19473186fc2b1a45886510ba6c3a51f6fbfef38724347ab1a4f7aafb7a999aee9b890a19e87af6585dc16c568bff9a5148012b1da5e4d46c207d294c1bf8b6f18dbe4bb5f89d975d9b23f89ee84a92e0385b9f41be0c05ddb9eb2e4dee00146d56ae9b6214db24dca9515f996b63602b34d3f6fa57f3388cd80b6004dcfbdde95e21a329247dc65ef113474ffd912ebaa232d85158e29302e3a3687bcb2f38ee0ddf0b1110cba46ada3359c9841e2116eb40ef4ca9213ec6447cedbaa4e54e03cbaf7a23c00de788cc773c0ee95063c678c5e0f632f86260615e98c7506546b0005b98661c8bb6402fa9982615701c52b0895654dcaf2759a41111acb6f7497d14a90ee20d8d3a1b6c8f171aefc57343fa53f7708d8db438745cff71bde37ff36f62849f795a9aa0e9f25ff15e99911fc0ed6b512edb328538080b1c4f700f99794ea1a64a3bff580f9918b34c329e71691d5bffa8e2c8c95adddcb753e822f79b340efe667891c9464eeb69a0d9c1be5dac6f83e1e79f8a41a31b49b091df963bdd73afb759777df7d77f1a42d6229003624ee4c335de5355226fdb50b46ffdc31276c22325dafc88fd7ece1971ea6ec506a12a3513aea9fe2281741a98f9b49999c23e9426e1cc63888d8d0ff241e10a620f5d1ec83716a46af81cf687a644273afd2bf1a2b577ee4056600ba04e703b3c4186689da021afc37ddbccc79e34d3bfd09122e27d8593ed814ef6c53aa3be5ddeadfada125387f5b8ba84a1080c07eee2790e2e627cb956b660b6a72c02fc8d8fd8bcc7b43294c850c0075d0c552a91dcea9fce8ce6c7449c9d348e4d165d93fc1196abaf483f04eef63b43d496a46e65edbc09224a277fdb0d58c4c5664a39cc5f70d02a1dee703962099b8557dc4e26894d284d3140cf1cb80b90bb7a2945a8cb327c4e370ad5da0e59ac4a213cf8c6c63b7334227afc07a7333957db6380375bc4f84320fcfb780214bf497a2b36eeac6c3200a53dcd43e1b908c31061b222190e8c30602baabc45201caaed11ce4644c9add842f10b796e864524a18aa3100df97f3d7dfeaa4dde670b96ff578975953a2ce582fe7e50578138a517451aaa3e6b1b9401dfc2d5d8d0d4353a632f24a7a8f64eeccdee71a391286bf9fce198b44da65a7435bcf93842beae259e88fa83f9543c09c423835aa05fa1cf16be81778869ba5c675e6308a7122a48705ba030178ed75f4ce42f8595236d22fb7a0d9002acda43df71bb50e619d02c4272bdb6e8ec4678cefb1d2a57bdf77812dde506a5b7e2b004bca816e718c9587a93fa1e56b5b2dcb02ef454d075685cc5aeb1e158d1fb2c3e09d364925a3c548287ff6f483342115c465c08e792e8537bb7182902434d3ef51ee441cf2652a9c01673b1a5ac1fa1380bff50845e9ee79dbec3e78d56ff6e91c482b686c332de9e07ffed57697014ae4482338f1fb39f918c5a23e04f39447ac355c99f7a067b82244a2a45b25ef024bb90baf11e4f03c0e984e3e379254919e306840293f309d633fd7057cf11bf0436cfeb90a3989c929ce9317e1be804d4ec3def9756230f01fdbfc77507b008b57ee7d055f5b9f1706f3214997cadfd14a5a111470abe156b4a393887a364549f5b8171285ed88bc02807951ce59abd42d7dbf2f8f9eba37ce212ca75eb542a2a9445d4f2241ef0eb900fbaef9ed7cbc44a939a9369d3429c8cf3862727a912bef3da039990b2aa5a6ff38dfbef8daf04c6701201a39e7933128472869f8a94c33ee90607eabc41748d5b162620e4f268131a6128ef73d1a93a6c99789b2039a13e19e3227a663ba0b1ed5c5978031b5af83a8ff2947ad166cd5400e6629288c0bb13a4d487d62248a554677d4013b2413f78a546dcdd01d292e3b1b93d090a897d7e51045b347dd32f363f78c13b4085ae7baa0b0dc1e95653c2b3d774ad45624b03f09a3ca9d5a9183ced3440a44c8d0eeca62b70501258d6980e2a4fa5c3b4ee4a8b7d735db132270d789708755ec32672a18d4db20342e40eca99151a0ce82ffa2997487799d52652e88b60d7fe8ec0b6a419ec0f447a45ccf00b1033a664d4bbd3cf021f15fddbb245f78ff2b556a25fb6b7948e5e6ac179886a86191b92a537900deb7fae0f10d698c2deed0a849516e04f8f57d87820bd989dc0f3f3d96c13683949bceb748b65e9d695f1867e618329c923933a0e29422a8c06eab4a0effa633c6501559415083e1afc25afadce4d990d996a0d93a5ad451fa026e851f7928afc877472d77567a1765ab21079a41d38043903d76f5da9f23ed5ce16534c83e462f73dcda6752919d2f9bf2e4baa9a0f944a87230916dc38d1ee0bc70eb6767956fc85eb67dbf6ae161f759389a96d25a6161d76cb9bee1fc0330482eafd1352c1df7456847078692b15fcc69d6a3d8223e3ee5a1cb388aff3ece2cf4fe8017689e9319563fc5451f7237b4fedb2b32ff1fa2256642552f15261cc36a541e9ed985fe5306e47356f63901ab7e34c7733faa3e0f30cbaf3ecc6daeb4054ce72c0d48cb7af0b18c1c957a60384e5ff3096242550b77a3a14a8359e6674c45845f627b7d09ba438a06abcab5b415d92866159ca9b2c176d5c2e89f6665b5da609977827577ca0707b5778e84d73b2ce239b80d8e9da4b1a7485a82a137b888267acae2575d86786fa9975a5fea44c7bac4c819861487f0b03b57c82945fabb2073cb3f952396142c439992a995b9361cc7c44522cfe1906b2c7eb45128c30ff904f6eeb1526f66e823fcebe4421ef472934b04e718483d429c2dfbdb48c7d31abedc743e7288ed0dbb1fbaa277dc8f66b7bafd35963233d0fae3f30a3e5fc10ff1fa648efc69132789908376cf786373b5a292a0c2263080c94f3e70622136335ecf3435688675a00fedcaa381791d041d8049cb149aaffca7be22a06c82cf4f45d967c43f678101ce9614eb666518924fd296f71605fe8ee6bf641cb61ae89e579783bdf992c1e74617e6a0b6b2f2c8cd180eb73f0ec8c236c16737c7501ebaf487fc851f8ec4baf6e1b4562ae917f235df15ae080b8b30f872a09428a8de2fbd2946ac29b1e5e76182128e1b8e04c8ea86502df992b245ac31b4b442ab9367120a06b5a0b2c207068765bb010855978bac22d99c2ada9ad29cf81abdcefaeb839891140cf7c5946650326f83ee66e879cf2213583a608b0bf2ff39e299713792539a59d6f78d09f18b0d1e1cb6d556355db26dc647e0a0a8f23e94697172d5bed966e9874864f248766a3923e81d5b5ed6786b6ee9d7763a194aacab0d8c407988ab65a65109c7dbc0be5341f89b5256d7d87eaa86c1765fb687f53fc42a0242efcc30bca7d8051bf88e0eef7efbe5adc0473a11b51b2b6a789b00902be885bb8d3dfd12c35 +Output = cc6b3ee87952496c7212e1e015591740f54532ee556bba649ff60cc9b0eb62e4 + +Len = 35064 +Msg = d8415e6cbe4761621ea126dc96c2628aa977be3f6ccb2ef481287e1049be2ee756287f801f4dce9bf88521f241fe00c0dd5d8680e6a8b7f79e631474a9f96d577a5ef7d00cf39ee9d2aa9cc7f06a4b2cabb537411e8878932f823f5bc249ae022d2aede4ebff7a559456c0e10ccfecd8fbc6fc0b7e3218d01dcd264cfc7699f155d38945253a09e526d2b5cafef58accb6d9fb646d7040b64e8cf2cfbf47d52bdba2f57a236cf4a37066a20a2da4ce0fc2365cd75308984eab07ca6c73850bb8a8df560b4c5de2975b59af2700a45fa8092548e999c3c79f1c86d7ac80f8e2a1a3d2d78107d47cc8cdf506abe1bce7a272eee724a56976b18a5040164f6803edb3c29d63be9b6a3eaf80cc1e37b60b02e4d8600fe0c24c8ddbae2e33469d15a4c2f9d339d8785301ea432c06695875d2492cdc32b295f23af9e8c989ce5ec1cfb7bd9f8cbd34df1a64864cede16bcd1a8833821684ac0fc0ca4638a25075af74795729e2d497b7900791545a06b6bae089327b42bccd4c28380fa40632a8869ef20f9ac68768836bbaab6dd64003e52e3474ee3ec4c151792a8d343bdec0ee52092c1abd3d71eab3641dbfe8f718f60b714004930250c5bb870611cbba85919aa6f8d0515f789571ef30711893be948028dde4c8e04151f739c3623e30be147db1b9e50953462cad4229abee7cbd67934194b865c45e9c34270c501aa635220413b8816d82a3566d455397f31bdd184ea4ada5f3186d4f7a392903e986b06135b23dca065456bbbbe0f55aaed6e64fb93970d5f9433711d15761a23237f8791a778feb5b3229049efb561fa7169fb3dbe92470ffad848b4269fd567e21d513bb4af80af582e2d91f7ebf0c6744d1edbc9a139d8dbe1c64d457454654ac0ed71e14be505aad4ae14451784975c644a5643583852cdec6459009819b3c406d6c4dbb2ae4141c29c5175dc9ff5906c082dca3bd5063754cd67c68f97cbe45b87b502984eeab36472da088fa569c6a0d2c2bca0925bbeb74bea35af5126323b8ab2d441498a5626bbfe6bb5275c55cf24c5994ae2cbba807a60ac8bc84b24235a5eef621088c0a5f26f1df1a855c43398a6fe8f68feb14cc35bb9b97fb340bf7109b26f566e795e908c9da9badea87a88d74ad2773d3988d14bdb9ce9f6fe4c5953abcd6db3f6bd20e77961a16f68f08fe70cd8a02fc9a10ea180ca997ed3668dcd59f0d8f1bf4e1df02f9e2e708c520846b2f6764ed841e60d47b6f0c366aa98c73b9e2a90397e02472ed3a49a890bac86ebb06c12ebc7f1efaed6a25d0e64e4d1df19c517fbf9584cf5969645f589c718059ae4048acfbcb924ce00b45141fc9da2f85b118d1caa82224b85fb4868f28aaf1a909c2ba5a0fa27f1ae51d5be6a5b25be3ee5536453773386f6330805b95f36b3d4524506394346e60dcde22698cad5eff33bf56cfdac87cd69759afc85f63afb31cf7d5dfff4f01fa1812d37124d41e21a6dc992f392bd83424ba7b9e2f02a653b5c1b197fbfc202fc040d5c6152e84916f37682ffba334d331d84da4acd93664390d4b502e42b348fdf1903008c37896b7552995c83878f9e73d8ba37fef4830cf600dd54029a28df6ac6c77a59ce379a6c0462a4af38def6e709f644f4cc5fda0445eeddab9d546d4f9d16293c0ab8363ff25b626db59fdedf9efacc5f99314d440a65fa4fb34bbbe6027bb7b37baf9179a300107f9c56a8c61e54689fd9cbd92dd4ef445f6a834dd6ad648040af626e919cdd29353b980752ee7f94260c63f02a1bc7466b217f8589e46d2d7404951020566f272f41e85cdeb5f8c982bfbe44d1659a7ae386b505885df209be19ac189e6622a4de1dac2bf1db4c8356522f29bc48d54c68f8a8405a50afcf9f6d0bfa7422940cc23d77f704e4e75be1623b21332c14555bf5edc86892d2c9986d59384a323fc96c3fb040b05955bde46e66cdee85b4004d1cd9f04b6b279229990854790b82854c93098b6cbf1413bfe5268236ec50e7bccc117a6b6ffab3d37e9dd1992508aad3b5d849927caf07d4551ed0b4d657761b8218a950f7e8a9169c8e2213053ec4a236a11dea188314d24cb44be0ca5425e9ed541f84c95ddc73615dd88f22914d2883e84aac193ca53a2a6b66333ec391c85c484f8f2ae6e86a7b81675603acaee73c3282810538336c7cb89234aa1224075d89bbd8b300377c39ad51103eed846ebe0447d1531269e9b220525da2ec67576f8cd6e9f83654192a1628362ae0581f87d1fd458937935279374926afaed61910c6334b40f5c8d1cb604f405e01848a283025362e246a072071c91836d5eaccdfda536543bb0036ac2058c75eeda42f2d83522ba87538a8464474bacefe3ff33b1db9d0671284a83abab72393e1318ef65006ae8e8689966943be76de84202c9114d9053198d0b6f5b3fcfd93a8a71a212ab53756f4f751f7d408e4ec0445c99054338c199a7ed37b808cade4809f611c87d04e883cfc7b709a068d8dfb1b5ab7604bcda5a3e99e2ac508ccfd2564f466dbfa6c98baf37371fa19c92ae51b7054ad94526c41ab6781e5d3d343f3a2349eaba60a1f1b86ca6a68d530593ec08b16b0afb2c4002ed02f5790396f77d1a2028b35bf71cb20f0c88aab4b7f74950b7bfdf057434c0e6861bea097b62e7ddd50ef5be537465c772ac41e8324331381d309f8c86091a480f77f8756ee840147083c7b23d61983ddffa9916fedd6c67eda594b7eb28d9bca2f1ed70f4f14f67f771705f3e4b15195b5afc67a12fc2872f0504af2af7c5e949710f2197e5dd7c74bf39ecdd9aa202eeb4b003a59ffb3de93a389bcbe0a5780bdfa8b1de2cb2feee556a82a3b608a0a1f0fe119297de33252b78a4564a4210f123fe47512e96936e1b4b4817080e9c7bf62eb9ee7e3411eac00cf2549d655a0126590c795351e3fbf92367c1f67e9e84ae882543bcc57e41e13bac4d40d4fd45ce0328dd04aa979dd73c0629e91f4dc501547a18b9592330764efbc79d58a2c50443c206a76b575c9ddc4ed84ab85245d5d9e3f6dcb8a8c2678d064c1bb8f188b160027aa65aca41334c67557f12540d146086648fa9b4fc9c40f66322be9196bba311c36740995381d47828f2f5fc23a4318bea3af6efe8feaff2951a302bf70c54176954e46c9b6fbba9da0928f2916f941b104365038d732223686bd766b48abb3bf2d310e91fe64b24f22e75dd5f5bd15e5f13bf95f3e4e0b0667e7bebd31f1fa6e84e8abbe9ccca0ef8c8a26693522f7b5e12cb50233a32c217b9e4615fb2ca80d22c1b88010b8192743f7834373bf79a96a853d9245b60810285d9715d2a02f039d58bf96d89b8d5effabff052fd72e58d3e1ddbfe31b214af4b23c3d771101ea4b1a2b53730b702f1633f41ed82e582cd3af3fcbaa36fa4a6718afed46e3c339b28286567e6c53f00e1bfd00fb19b99de069be45f98e1587061d6cb5d09cd57a6a2e4b003952bb4a6dc0944c072db534608dd3cf5fa4e599481cfd1792a0db14e879f3f1524328b6abce34608adecd78faa83ac85b0ffce9a3b3db930b9426a1a3f21b9a47b1fe9d4ea167ef04a174e405353db15a23ce00bf6e72a8a9eb5a9933232c7b9823df86dcc6a937f32a4e0e26a1772b0b84db76d1996cd90c1ae973fc89a115b21d3e0bccba62ebe4bdbb4fc5995185bda797a4b0e124a490b745ca86a203e924028c94a5094f6b37e03f31687967620f009522a3c2348be62511f567e8ef666c785da9dc1fa9468b466c4b95ce13406e24566940b916ff5b08b08d06eaae3e09e323b3f87a1afe5d34a506b4040f9159875df10e32368f8db6b419ea03dab07ad7715b80b51f030c4f8bfb79b796d56fae1e4272ca2dbcfcc39ef487e0ef6e4dd9c908eb4d1fe5370b83822d55539d0f1d19e5f4ed76f806c3d3d566ee76d7d14e8d34be9eb8356bed2e336569c058c638c3443b187cd15a2bf5151da8eb7dc3ba407761465243f958de97a871678903a5bcf58be7d9d95550653c129cc7d093b1953989c088b18df327276ce8a3be65c869728db8086096f5b6c2cc369670afa8ce038e99c60e98309a5b394c2f696b355b33a71573078d706c31c102d1ce96248d5de63e94ab8695aabb8428450a6250f4c16e9cb44ea754f821878e045ae5a945b1372b6f28f796dac0d3e99f1209cfe8945a9a46a68317dcea96349895fc9b79a5d7ecd00759b89cf3bf2c9820bff68934e1baa49f8f3dad2553931910699fab947eff41b73b7f83cc9c4dbab70369691b9a6a48aa5a3acb3a7626005aab1a5e1562df4eb8fb5001c3f1e99135628d0ac0fb15cd474293c9c24469e8c54f9003914a09519d37dea972667c963c5bf5e0cd6a698d06f6dd2b3564db3ce0b5952ea08b09e4d47f7fed405073442c6e287d899ec21269d58b620c4e06674d7b9e51bbac6d92ef20c83fc6466a2595f799439ddebbf7d06d02f0cf6658026c001fff5b3480c65dca2c336cbecdb509a6dcd562c0b397db3be869f7546ca8bcf19e9a07aa0009a0da204abc301a6ce7fa47a580db459cfab0b0400c8e9094c0be9eb4397347d748ef58f82d30dcc7b1507e366094ee51bf69dee5877b808107d5a4c06936e4b9b6681ace484781600647e50a9a741a6089d5e8fce0b198e802b525612f5b531b89d30a2f95daa490574f208486ff5643fa7352e8b0b7662441fba4f8f4570f8733ce9bbe8e60b30314e49546ce9d3e7681c0912b6ff364d03617b80a50c09687349933ddaa704922df96d7c3d9e41f62a05c484786fc11765f77b317ad0e74961cf1871f629fb36a07d44c8e215a85b2d694dccf9e47f8814eba4aa391c7263e4d35f9f65f359e533e3b87f84d671dc1a508c3260e6d867b545dd320875127ea55f500f4e8d87678e32b0eb4a6a024299c269fed6fb347ef30b0d120f652f614b7ad308da80eb84587213525d58c55451c8cc7782adfb9373471e93787331d57f2dd0d43153ef043aabcbfde42820dceb699de68d83956fe000f7fb682880a2e97f2fb97a8efaaedbe6bf3408637da00eaec4931e056adae03f8092090a84903078d800deba734be42bd73ff190436a639d29c65ebce29c1b0ba1a283a3a666fd20b4f0845ec4a3fc80fb65c637da009241b5c7742f667c3b6c4271fe7b4ceef780a9d39402547eccef13efb0e0aa2a429f4edd89e75c43e56a4b48a118e0eec79fa0ef382e8ba4fb7f0725d6141bb21bc1dd52c56a2eb9c30ea46f9404c82f1485828e966bd1dd3238bf4f615a955fc7ae4b6c4f4242a67d5f362e00c76e79873b35f6d6408ef0192324b5783b80f8eb6e7e7450f602d2bb65e7cd0de73894c8c8a36f21362aa657471c9f443e4446320a60b1ef0fd5052429a093e2ee90477e34b2439fd40dc795ad9054eceb49114189d86d5514220660b24acaa864dd5b51884cb877a2a01b7a5b691d99caf720c3f3cdeea98d539e1809cbb886cf8699ebcb5818d2284969af5b8d427364b73d5e50297e1403cf95f4340da5a5b9f5c6f105bea9d7ef717bdbb5e60ba140ef2ebaa9d363befdfeb39b3df6db2ca991ad0e3e66b4af7e8117a76f5bbf4ce609bc8005b3e5ce0348bfb62b70a14428c215e87f3880815ddf06bb93d3a89bdf6baf586db14e6d9d1583ec07623e15bdf0c527cf1c577615f50fbe28380cb7b27fcfe9e8b5e4c254cdc5e6d8b3fbc6f083867437fa7fb62d2afc59377134c7e7abe4dc7ea7f1f6afd84e4ba64d208049e32077beba41682de59433c76668f40759b5d8376fbb30379ee6c47a17f56a51795bd76c44e5b49d909ef5e0fff06699f00b861cf58b99728854f95bf9c1ad8fabff3c4980b3c30692e3468a24134425d8ae8e3422a859eafc629151dbce708be2d3505e56f3bdf0532bcfcebd1ab63378669788dc5c972763d63564a562dcce87a0b8b2afeccae13b3d37b3b24de64c3afb491e0ced7baf26798c9d3fc619df002e1f4d71e71063b2e32742ebf4f9f785344e009ba42e0cab133f0392424e46b7452b38862cbafd20e3478250571abdc2da4b366fc9d8c65c6cf59e841da38c12ad847ad403ee38ed063e7bcabe6f2557b5ebc672a4a063a04b5777fea141387b2dd31b45b4d49a8114b5353f7020b7ad8dd3ba8a7caf6dde7a0c95e91450d2598fc024c08696ad44d553b999b656fb2c2aae +Output = b338b80efb270cf6d936304bcdf18f2b949ce2ff6f1ade6f9ffa322e6a190c49 + +Len = 36160 +Msg = 520599c0d56bdbe4eddc9f942a75206bd334f4fd3600f7033ce985b840b2ec82218c20d59625b154c2e1fb3a09679df921602c216c7b288285b52e9519d77018f84063f96be4b775c9958c814582e3690afd52b78a81fd5612f3c1f7a228b2b4fda8c8f3fcb1d58e277fba3186cbdb03b592d08837175ec60c2ba5a686ac9a9e584cb88df093f3e60728ee11764c6d0e4ba70d5c1c4733199be6426a6b6b111d32b49c8df093f9c68f168eeabb0c82d4f3c471fae0186498e6aa000bfa6efd7ab369dabca3b8cf76e7d30484fd13009bd672642c2c93d98b16024750dabc48fe02f2dce2b20a5e3e38e7b6a7e56ad1ac1b384eb8a8be7a3a52737f02b35dd8ee48d708c7c4918c66aad80e1b1a18db4feb9f9767fba330ecc38710e92f5a9795aca1c83282564235643072a7452508cb6e2ea701ce4ae1ea91c562cdf4ba6b3a57d783ed936069f48f764c150e9a3e6acb6de74ec8b9767de3b5dd76aa853e247001a0bea1b7e7ec5233032b1c7e67722be4bd1692fad8ebe1e0eaacfac4f79c20a7896e5164a662d6eeffb218d96a2cb51c9220d315ed7cb5cdef368c7e7eea8f52a5c54d6e8ca1422fa871a9b32fe0929ccf3534109f7a840456dd07bbbb56e4895c8a3ddd83f0bf7f663278159ed6e9ecda1d5df5d52b790e85691383962848d51687c8ba72967564a1bb2d069f55e3951da0f5cc77d9b972e6a259dff7a7e2bd3b82970c40dc8b68c1d56f8f1aa6a81efe85a59b6cca6fb8df4f81d6c61cdbc9334452dbd70a2a132e48e6b7f7125f0fe796146c9e46c169da3a3371ebcf5a816795a02f1e6879ec50dc3b861edf31f13f99ea46f497d70c3e2916b74e08886e3d3c2911fd3da17b905916047755454a6e57d1325604da2973e5d2b0d70f8c171e0396885cd3c94854861e3aebbec4a5dc986f36acd4f249e13610646f2b8f0473b08f9d23701adc052cfc2f6060d587f1246c5dde5046f3f0e378dcfca6b9bea20cbb573a5dbcbe0c1358ebbf85a17a15c271acd5c0ffaf08b6b11f67c631cc15dfc3be8ae2d676cf03d877f1734f05b03c262d776c44059175643599d420b632f14edaf946908db8c427dadd7208b12a5832e7ad9b3e7ef3e938277917ad05630905b470d3138a2e1deb1c6accf404ebdf3ee2609615a196dad6fceed901400ff19053d8cf87f598d8cd4682c73a885b98f12776a6f0f6e210e5bce26043ef9d6f96bf1783145760bb745f0cad03c5e24df4bdd911f70640520e6f3cf69c9b774cbf011737e036ed8f896fefc47642e9c4eeac6f1f54581669f91ee4e134cb044fb520be33161da71bb37f1555bc87d6c688fd221a2c75cd1e4dd1c1693207ac421d24f6bedc91f6299b9565a7fc1c131b6ab7d848aae3ce37b28ebdd8bfd7d7eba216a6215a1c427fe8bcc7045f8a068b3be27bf3f32c807cd25fbf7402c4ed14eafdb6a5ba45f3e643f923b20d5819dea387f26132d74ab7524bb087245556839de10d8f21947126545661fa2d0eb3db4cac25da8d6d96aedd5a76574c137b0164ca952ab9922507c2da6a24e7343b4cdb5cfca82c75cb2a1995fa2da384c255e7c135bdaac67551368d247865531bf7fb9c5f12387750f3ae03245051329449cdcdd58f1cb9cacb5778783eccf2baa45276365fd9fc8fd145addd0a7da55aa3bef75de936f18d3fcea24ebd479a801d88f169d8368bef8c86990ba14f637a2c6446b61320f8247342148f3efbd2d5294615e0c578acd8eb18d1975ef0f65eac64c2c6550356f92f5cd421091322218f34eb846ec6e7b2b8a45d6a8988e66ceb697376f70791723dc4ecee66b512cc18f97a3b1a49c5e6b9d1436b6a3eb90eb01962af405333f9642163dd9d0a2b3e8c3dcbee1229cddab7488d81483bf9abc41c96577a10c4f56b1b42d5f539f4e0b3aae4869f8d88f779b043966da72daaf01b1757eb65cace1b5b90c0b76af61854e6cfe9079d7ca5c9b26b911fa9de75fabeee98db7bcfeb3c8955852cc7b74f399994019283334d6df60f59a7699373aaac220194795ab6964d9a0c9975c1ee286c39b48a6435552e2336d84d10d40cca8ebb795d88f496f04d663d499f9c5bea06c8ec356b0827d4e1e9f558c62aa8200bc2ea7dd023f31334c100836bce0047114890ddbd362927da2f9812b21baf76cc3e3b3d787236c8a8b33d8e01e1440632c288c88547c5efb310a9c1fd318992783754e5a966c5d55145dcb38a5d8ef1133dbc3ee9c162f3179411aecef49f3cb8b51dbd8a890902d97ec53a2ec848ce5cc11489112e67fcacc4b6214eeb573e34c17e0c44626a19e567e06b14acd966b55778f026153ed21aa78161a59e1a5f93625f1cfe7951e02006168d6590a981c405d0ba50ff4e3d0a455ab8fa9551667ea1a833e15724212f654dea48fd20e734d50430b673ff0524a72a6c7559621c9c84419a15834ca2bd8c6ec8e67aa65fabcffc9a81f9b9f10fd4d7c64071b74996161299c185322c70816270678fa3b2d1faa040d819e4ca74d44b0e8065b6b5135c03770de63d86f04e0f2af2c47fa8505ed969e45ce858fab06c8c60bec927bc60fd7e222dd47ae6fb5f3eafa2a209cd038d5ecd492e634a6f2488060357683929e6f428e261cefa8e39f3c7b0749df3f2a568ba691cb30b195a499abcc84131bfa822468e4b4bd311849262765e2c67320acdd3421b0fe6b7f618457183774c2b2950a5b8fab91a8b2a63a77dc67dd4cba2d5425e94418350df3d2eabf2d5337453c66de8d6e0760512aebf4c1559e0c657ca2c45ed0f89ecff007ff17c228ea20ccbc5a64787908624bbd26cb488332a10f2bc7d9042a1933da85dcc892504be3ea8d57bb5780f1648d1076309d276ffb5971790e3a2724e817ff2c381a73eced0a6c6ee88799cbd663a86bb7eff514d2dff680650f6a524b3cb665ecd70e4ddaa0bc0882853df84663c78fb7ad66b1d6272d5653d08e11ebcd5e125d3489df0b41feacffdce7f72302005ac65206d763b3a8637149ecf4382e58aa1fcf71111d62c6d4d70b12590ad2e5455a6a5fe61a09ea4033c81169bee438959b044e947f878718ae7c678e5c3ad8e7ea72dc7e579e557521d795f2ee83607d558f9cd9b024c1d0dcbd321795be7dab0cf80700aae58c6ab1f4d520559072c9e5adc6413dcf0995e85a1c7545e2261718665a0d8283f1a96aac7962727ff1f3b20b657ba6eac0e057bf8137fb2a74a4c34a6ff58cde27a9b26add49c3c640934104e4d95a1c8a48a179fad0141bebec64109369186880f43fbc8b36d7e7e1112946eefae5b8b8276c0603ce2f1aee5691657ed8b3c7a011591e0dca1d797605c13dce50c853fd151dd01682aacc1e6bc1957cb4fd501779a51bdf6402ef51d9af561d6b7082ab8a1d84bdbe2593dea47b3d379e43b639958a126aa536ae17155a1c56bb8ca9460f018063a12e06b18934c919f5254e890d9eae4a0e075a3841381d04b16b5c7f0c505fa30c0299399274d5be4a20ada84a595c07ff236837d5ffc4a1ed9b00a91a907ee63f61bfd948b1cf7f0db437f9c42087ff08e95c984be7afa8e0aa2a46b2386ac7bbba0f03248232d6c05e921013aadec9abe7abcc3ba63a941af75dea5bbeafa21189fb69be5c9c70029e306db15ebce2689cda55fda201fdfd3100068f99ba1fd130195f6ea758b534e1976515929ec3bf876cc83a61724117b5b52db660269b6b7acd66be091430e7c73bb8b90d10f82115e7955a7b1807fb13e1b27898519f40989c0244e84b5d8bbd91cb2414affa2de6bf4fd6456fad07ca1a573ea8d7b6113809d46bcb6aa5a1433e0eef5fc8444678684a4666f5cace56c36e8128355a3dc7ab3fcb28fe93c8e695066334f6610b398737233626cbdf28717ae88cd70626c5d4c6cb9773c253263b44383ab6cadca87078e5599f3a8adda90ecd4d59447cc13aebe58d669bd070a54ac6d7860c4b43d8921547ab8181e4ee8ca7f0188f90382211b181439ad154477ca7a1e08fc79a04052b66f85b34cc9697110bb16211994efab8099749d64fa66c531052cfe229a764a05df20213f3459090f6a0467172f5e9518cde234fd156ac41b959672b7127130c832520bff7801b905751b72043db80268194a1be77bc9efbe370dfe3eef7b2d88cfe319957ba9aa794623ebe8a54319f9e376fa2a16cb6fa451584dc11bda69cc209bf208279904f344e479cb4f480352942c78cfccba6c554d4005477dd60b1c8c423f606318eefbd726c5b6230ee7fb95353ddc87dc0d58918dcfd9fdb93c007b9fa7a5166f901a67b077b009dfee7d4d59f25c2e7b7b348707527e83c92301557bd3e02ae713d75c4b36c2e9013f5f235f3f54a9ddde749575373ef750e9a6839e6a1986c69fbb1fbfaaf3abbd04298111cbcee04a5d9d25a125214194b5786bd0155612545b4d16d47c4b375b6264ce353fd1bb0c20399e51c5304adeb0fe76d97ca1b6db7015aa5154d27523839771944266226a50cf684ebf72f87501c00c8046015aa1069b4300d9914e5d8f4ad4f67d94fdab15e8eb60baf034a3d246968e1c7fe6ef43684aa7b48fa850ad055e2397633418960b8e4e5eb0e7ae48197acca521420d5203250f8dd46d45065177e239dbaff9fcc0bce254bcf7df8dc022ff8af1574359f43e000a698384c2b587fc0b0556966e90dae2441c4e7ec9c3f4f272f70bd981c4fc42d655d45508baf63ab4e8123615015117d5d6d2d323ab5a6c063a4716f1fac69c97a0460000e62d62dd8cc922199d8949b0f46d25c4febb34eec2f444d21e06d7f653c3ccd4c4923c2dfa64a3a1ecea407d7d06bed4477f13d197f8a94bb823bb9a753203a9d98e924d39ccffd575ddc3e37a84e47a0b0dd157c23d8d855185102c0e7aebaaaf8a2ae451e77edec0c89c8af2d1e0ded4cf36294aa93aa770949e532785ccfccdeccd9b4b9f6ae45514911bedd4fa29292c09ef3726f7da9eb82db8c63af0cabb1d431a2edb090ebd2a6b3e74757983938c1450919b0b4662598402f6819e3a028654080283a5857f70f19a8d9ca71399571df561efbf1244df6cdabc421d74298ec80ed07e84712350edd84331ca02c3f6ed86af0c5b67ccb2ade82265b6a1b89c66d39fb6eef93131259f9b1c2b7799cf4caa81d9276c833a0fd32fd3b1e9371af70077122d45327b63989f45129ba44b0209e13e6a4af0df5a44eb7256732f6f433c607a887eae956d6b5695c6966bd2d64cd6236e289c0a55e25f2bec682803123063d646cc2be90bbfc8f2918f76cd911b6870792f0d21c95692e7bdefa83e2c83870eb05633de073cfe45b9ae4ea2fb1da00dd486cd8e7e478c8c0f31398859ded50b0e454ddc288bff77871d7abbdcfb85e3c75764b73c5e56032b56624960e953b3a8c0024b3554d36e4301827efc5d20d899c75806cb43f7355985ace90a4b0befc5f0d894f73e83143585ef5523e977d5940033e1f29d7709e1e69dd01fad05a8aefd591d36f21650a5ce48a7184a95c3fe2a7cb27a14df660aa2bf6667b648c4ac0e0d4fb9189409da0715dca4267f88206cbce02c5136361de19a14a90fdc2d054b7b924a5706291d56df5c8f263f0e42ef7ad3cefc846062cab440af5fc9c901dd2b4faf577397b6e32c8ea1f1db3bacdb3ef328bdd2cc218697543f4f1782eaeca5ecb1c1e33bedd787dca1305ef9a55791a8043a2762a23ccbb62287cf3e069f72d3183d5efd095a75ad598acd2f768bf95a281e8b0a2c15d6d020aef9e79f1f196aac72edc55493806a8fa832c568a000715d0f06ac09394208006c9b64fb94221b3509977b14ab2f790c3194a2c1be2e556bb5a1307fcf97c88c6bbf9d6225164d7aa9650792ca0a4398cefcb0c90c0a6e1aba637ed7005b778a506c7a1efa7b6744fb5d5116169a30fa2771d6cab31c2532c3557e59f3187cc3c6abe3763cdcd35ba78a42e8ba66a9fce3fbfc0adbece07a7b7d194cd15541ff7383c0b113bef88754f1c04fdcf71464aaa20ad2aa0308bb87e535fac19b2d05fffcf918a6ab3e90aa9cb495a5d3dafb266fe96a4be806bd9295bba9ec71a89f131e76f31e2a0d3d539207003c846489fd697f1ae4234048429394a2795f1a9357f2208aa2c4cd57f4db9fd9c99219d6d799b52a9e3d20243fe9a62d91edebaa727fdd245bffe6a638806667768360a95d0574e1a0bd0d18329fdb915ca484ac0dcd960a7166c1f2c48843f469e1a3cc36b7a289132b6feec3bb1a18010b4b61cfe534850b7ec40343fb1dc6ca3349050bb728681e10ad6c99474a08a9aba99161ce9ddb51d158a15be1de26c202ba1d840befc6eaf2315b5d4a55aa7b0a07036a90bb546ce6e693b4436d5c79d55ddc48bddeed +Output = 8ef8ee7f513ae828c28b5934d5338e78f51b8e2b71046e4545225964e06cc34a + +Len = 37256 +Msg = 48f1582a12f27d8bc3a1652d0a84d5d569a4feff3986a376ef5c79219d7dd320bc137e182813eaca6c738beb40977f2f500c71a83f78bd4eecd1d5dff4cee3e9789bb02420d1c4065fa5cf92f9604771c30f5343aa7be837f75b31d9d2c9352c04f3b4f90113516625a1f7ca3ec675c04b156b7b83766a59996257ba3f561012e981523dd3c0db1345cdcb3d16b450476f8682f5d1508cdb594e0d28435dbec3aeaf54999ec2a83547931591890f212bb7ca605c9cf396e5c0881ccbe7c68566dbe480b46b0000f3b45a9b6e9fc03097ab49cd56ed46d0a155764c4d3279ae23f887a03741622d751389267d61afc5b1d46b918bcb318135a08164532d5e80238e027ac929d076e4ec8a7e65d6c428a1b99973a53e9cf3c929112e88de5e458e24bcd7132a322268c8c46bcf06e8a090e2393d494e6f6c86798f70914f5f438c431d7ebc4c707a282d9fb563fa0177a6d8b5b521049235931761f319884ac443728d396d9773c64da68323c8b9f8f30a2273a4d567ee96198bf17fc68f080ede3974cece14214efeb8d87fa74bb65de548ddd10d7f69d6405ea6dc406e806983203a0686ca635964ed068fa7b922fd5ed359067055ec3f2f17e7d1302d991f5bb047a93ec22230a6cc751c710a231a9e4a5109a6f060170f3e1e273ed23d778d70047f9d02441ceedd8eedac46a3fdcc352ca35859aba7075bb2a6116753b841e9d74f4c94b26361a9b7cc017689ef111d529c2e96b73740f70b1652f3c22ba1a129e3f27f554d29b7597f18a1bd3695882bbccfb16a0fe299913fa87f7418d222630138cc14246e8fddcf98cf261a7f011fcbe4b1ae7614caace9bc1250c7fff4eb72c682d62e57baa9842a08aee5f70d9690149f6ab6fe11c4db36b43e7f4e9d2bfe43a985b50dbf276675553cdd2736f8d408828615c9f641debd6d2689e7a7896c584a08ffb826be3c22bdb94c3503ad5f6762e9dc9d018bbaf946f02df39a6f86ac6c47547e78d5d0d8490b7849fc1df9da487d52a1bb0a37934685b39afc4412e8172afe8a3cd6e840001baa8caab06a093a29c1feab261c3376cb63035770d9b353994402fa284d01ead1292594cf799b43d56fdb5a483380dcab8557325ba3b6297c6d0f3b33c7c40f153f3d43e0f0396869a5614ed64223820d60bd166d3898a0bbc2d8855f1e3178d032fc3d4d958ab3ceabb8113a12c370da3d5e8a0e5f02c13e8b86631419ef2ce84b890c7c31372beac9072bda6b09adf8646216a6e29c93ed10405aba81a73347d20d37d78be7d8a647762220159d41511df0429d870d1eb1982ff4b91e0096d30faf47c46d43c3eb6c2f8073d72634ccb030975b17fe6a706c7ab879b8a35c764998c3ad9df2f39f8257cc3a7a4d8e50644b9c4859168014d54b2e6317378d17caef33f9e49d70abcf198fdfc7b958c78369dacc17fe678319c7dfdd0265329ed8dd20100aec43f89c9b50c983129a1853b1d750175d27a78018525043d551f2bc8a115ad786736d3005976079025a2b1d4c1d3a22dcc96654660f25a02ef5fdbe1d8e3f131408f1d580ed0c702fa2e8286234f4002353aadbd89fc2e21923a625bf1f27853d0b6ed134d8352f417937be1aa2e479d9d05a5f978991d13de5d53b974d7af6aa83cb6d48e2437fe1e800259cf17455a6455e26ca55f83443427246ce9fa02e0378f0f1e4939e28b7f52ba611a80b5b34bc9e789a8c61d4d243668f8b9e01f5eff3c5a53272aef26aaba089a1501054283c019f2fb5337a93ee975ef7d0051316fa31d05707dca5a30f47167370ed092dce71e2b058d6ec2d4deefb3abf154f21981fbc7eda8e08092b0895b090093fe979d68846feb2f3496853ad7bf39772b8d274afcd742de44506cc4d7f39ccc1044516da182e2f568f45afbde2f3f54482b219f26c5c2201fea8798709f19e56273a1a204f70b5dfa6eee8739847958d283ff6cd841ad427dd1af98b7543e7c5fa61caa2124cac54376be817c577e1155181f3873d37aa1e896332a1ecb40fd724c10ea78a4b7c7ee9c295f1900b3fa4a681f96abe3a0eadab8b0e1196ce7e544e62cf79def48d2565fdd949228c1901cf46eebc30ab679eeb9b74229a189d041f4df35e37cf471153249b66a382d6f573d8bcc6ba131cb7f09a4b1d211ad2ae4089649fbd651309593dc3913a73de483a4049d085f897c163907d4a525d861c581e0883973d57d6225238120fe999c2ce857f22b9e53f83eb85f1f1566822141015c954eee07c40546ae4314b6b6f2ad4af44037d5f7cc731828f5a54c30c5f10758e58e9d4eb0f988eae361682c84af7c782bdf9f0b653dd8e3fcd75f7aec5ff463ed9b1a30b0b95c57e6897b40ce8ddd42096561f55f096b2e991e18b6f0d8591c31d6dd443fcf4173c10f78ca3cd2ede06d7bc74c16604f575efbf07b6014b5d046d46f0fda95c8cd0765d8ff5c193ee1cc75278637dd05fcb2f37f4ed67f9b2e910647ea0db762d23e2f2476a8cb30a4ab041b2a1fda2f8d49973d97b0837985a50ee06945aea011b9cde3b6bf5383d78d8b0abe4ad21c97674983ec8acab183f730d1140ee5f10a1eb48f35ec5c78c8e88c8e99556f6d99a0ad1ab3c1a003980c2e8260e5f7d639e1958f8adc40b017408b1f61ac0c93029a144a93f1cdc040685a8cd6574ed01f86c38d1bebaa9a312a0925addb341d7098219bf3978e87fb704748eadf657f2992d0d06fb6f4c7a5098939b44f706d524f5797692f7cbb47c8675f24fae623f67a30220cbab9a8f1737de43b953c13260418c55b2612dab3e55d280b161b7ef4c183ca695353be94dc798daa3911af7a7b079e4017eb86be3b7b4c13cdafe0a2fd2e620c3d6d890dc8eece66a77b82be08869abe81612fc54f5433b58e0de99f71a2616bc56198daad500f175ce44d6f3128333cdf0e3667a56a6786e3affa38e382411e87da5e7a1e3fc822e5d6500c796f00319d5d4b13c240600e4b10a30db740a99af1225a6a8020922fceec4b2465cd7a3358d8ce681a58a59240da749c616fd3479df40d3a6784f57474708f457ab619c87e0b40d33235b0d94167df43765276caeaa9f75858ef5ac7831dacce2cdb5757996f42c39e4a0a49e93353b16aab0c8b63ce9942c8c23a6f574e244d008fdb67276f34d7b3182a4a94e76264b2ec0d0f95dc73883ba03cf27d8c76307a55ee8da495a77e15129971c0de9bcbf367d0de0d4e16a725fbaae7625323170eb029218d7d0b3538ebc0461993605580d1206d16bde31e1c573cb4b22cab7f324113c96e8fe08b92e6474dfba0409fffaa54335e86796b83254af0c9838fc7996b26ebb448c7efb7a486efe37fbd19d445f4d751423a0dfef85e123502308e88b0eb1efb2211d01ba917a26dac464183467abf7b7bb573e442fe9f60f34e42a494d8c9afc65eeb3366620bf6907ca5a12e6e52599d6c3be787a50efa013972518968824e802f8fa35f0e931ad6b0c4926038466811ded45d58d9d74ca6729c342112bf63f9d43bc01565ce56e9931cfb7e70f213937dcbca19158ef54d8a3ea0ee80076c8e1d8e3e0c10241743941d30eb90ec087ce980c25ad0ac707100c84c3408c0d4d73be551b5961ae86f2453c74a20aaa34872a1ba90a3a64abb46c78aa44592394fefdfcf94503956e6c43f42fca8a47080c99d375cf702e086fccae0b19ee2167289ebec4ae705cf25046e2875816ffca05ed1bd025348de5e6330e2eead36d8c99a885c2bb2e6ddb4653eec674363a44192fda04340fe90bc4a9805add9171cbfa23383d95c72ef0f57400324873603cf166fa572388aa43af36ecd81aaf94eef318bf7b63c309fb06b00015f954d97b359a62121b2838534fe33af1cab53dbb2b8e02c54ea865c22010d6b5b2620dc98cd3fa7c4375fb034eb752ea152bd6fc4b8de8627e00a90fec9a6b5b992365ed9e1aaadfc4f95c1d51bb1c0e229ac677fa1d5b9c1a523fa81258a54ed62147b114765a81c53cc16703f581a41a8a75f5e14743b94b278e5539526dd892e41cdb96f0f2ac6fc593ab096f67f324814b3da81286023806fee0098fac3ff5f24d34cb8f5aa6ea1c3baf0e31b8446909b019f6870dbf0a77f70f2c1748cc26d540845c5b7bb75dc91f3cb8415adf11a90c4f73acc038e802e1ac47f22bc74e155f93f05c3b29f054a919afa9370c43eac7a8c88b87b4fb30247d05293b7894381128309b8342cd4640109c713513275249ec9d2c4b7d6a88284b0bc2622621c8bd0dc41f3c4c19274be7279f3e3be66bfae39995f2d95e9356dd04c8861b1c4dcd0853f04c8dff7d3467f73d39cea8bd435465d06611ffd714fd9640919dae4da8e285179d4ea5d26258b5520d1294ce8a09a9e58d6c74decb7169346af5ff52b663049b15d633ad3d8208e7a450d32938c80cda5134e630e40226abf96b36e35f5275849e6fd2972dac9903e5cf8c53b65a36b999af7c53c57875ae26467c890b7883db1f5faa179aa010aeb8d9e8d56b87d08a4c275fd1d89bfd44d9d0f8ca229ed4a77fefe2b5ec2414f005b40f38be16825354e2b63284336775fa4fd3310c8a10f0a867a2f98b014dd2b4a9280419d1f31e9829aafc30075a49710c34433105e0be810f146ce0ff645bae005cbfe37eccf2004363b946e07fc9264f448afad6ec1af22e5d9551e50194d901d2f383e6b4d8747a08f02d867efc02602a8dcdc7db0be30ea8fc477dcb831ef4b32763d154d6dc14c22a4dc1feebeb860fd4139e559a3cf51b2a2b8d6b32662026e4ea0754f7205ab8ee0e59a79cca0a1be8352404cee52cdea663de88a997ce54b1804f5b40299413c4d81523198834755099218dafc7fb1af85938cbef9a4664168d7211bbdd0afa3413be176a0b4c4694a95d9b45c8a9f7a97362dc0b58d07f9b79391f6f250396c7271c2e953d9ab53dcc9fd499d1809c401b266208b8b4cdc9ad692d64eac90e047cf70ea40566ebd269b0e0b2cbc63245b84a06eba13975278fcde2a312a28b747a175f9e4af710dbea5968989cc4e041b1976fbefda8a03e882ce73386d7359d8a44ca8cf6964be0b66014542ec2cfbb70d54589b3497594014de31c2faf33091245f675f08bc46a358d8bed6708263b5ccc3252ab641db360f97f67f474ae407ce38d61201ea400cfaa766b31dd0e49dd43dc23cd41bf230ef8631bbc6ccdc82ee634596e97132bec7d7cd7738baf6e5b04eb030128846a7412364071e1b92b92169563c23d3872f4d04638155830313ed508fb2f609412f90fa1dffa1999f10e3a588a04593c5d4f697b96fe8dba1bef7fdb113f3216a304b64bfe3f5d96a00c1c25d31c3346746510c4f9187174b3d4ca0b4f19e632a3ffd0dda828f4d8c2f382a248f2137f409f8fc96a4a4e8781567d41bda5c4129c5125fee29d2886de2b357af06f410f4863ad31f07c6a1a0ddd622462cc13db15627d57b6863fc97d1cfd53d379041d141a31a594960f56e0d23f5d46741db8979aa08f2bcb82c8262ea1d6faf9a6d12d2de4cc5d818363819bdd93718628cfa961564f495439ac61c9ebaa6cd86d541a028e4f53230e6878a2046feceb7d48d31f663f1909ac9cb655a17731fca2ce6303f7d57e65fa8d4e4e7b98be89644c9d3c9906a2d322c1ae3a8ce7524f8c669197e607e72f8dfc8a060cb7ef4a24039020b74ded98e542d0e074a0d6b875452b25248d956a11dab4347d7488150794333388bb00423b48a5af214ac51ea393b9177a0e90fccc52543f97768fd153270eded3f9e5b76dfbb4105a8e286b5f77c4d4ad32e1cf0789f38f22660f6851e6aa8762aea4e1c2828569e8140686f119d3c488a28fca09aa188ce6eb0dc149f78e98fb8343a68406a02394836757a1a26e4fd206a2d41cdb4c9eabae93c4838242776720ccf0f9ae8ea7248353c6b73a1ddd520523d78644162d3857a85946b04f8e6e2c46a66ba3d65c60bed3bb7a0869d6d14819ba900ffea1568d5568dca83c43d750bab0200c00a912d9ee1e3335d9a217778c6582618c62cdf8a1d98b9391006c332ff6611294f8007fadd72be8f6a9ec3984bfa46549d8654194949c99d72cf37ead5f75dd1bb0f35616cea74a465418360ab23d40bc6be510368257e1952e35d83dd5a6941d38b30634ecf283530962172526971d6e84170c908903945370faeae5403a6020fa08380c1753baa5319484de01f822e589c1dea992e9d99a59095baf867a68ae5dba94a8381118c23574243c2ca977abe4ac2e898652d9f0512cd4a390aed54ec990c10f3875c4347bcba0478ff24548fba0a3394b84bce0c029fdc8461ece89a6546849fdc7e6836d609f07121ab4423865e5c0cbc8a9ef0ec97d2690117ce55dcc305f714fa83572fdca859e6beb2302c29d26ec65c8a7a4d4fdc557d106ec54c1c2587b5430d4f168c9c8192b1372c080737498a5428fe81224ae81a49526f4fac53c0220a6e8546a43d86da353b8dc670eb1b6ce3f2f434b9be8f8d3511aa541e213f0f933f702cbe1be801bd47cbd3f17e52e29e6101e46097ba2a56150d05cc1e62c28ff8b +Output = 13e65bd35157230914fad21957875fd51f8039855dcf756e4c55fd46cac92cbc + +Len = 38352 +Msg = 2e3e674d28e00fedc3e1d677c343c99ab0c0c68587b1d5f2af2ebb632e77cdab1d9203b159364d717ce82a430c647660f23e83a22dc96c8bc738a6890803d878eb8ded69ce0367a26d87f6e6118e49f6058624574abdb3568b7e1e4a537d5d197e744efdee0f04887f0662e63c88e963d3e0cf2c4653515ae4474a2c78ab0394c0924df62021cd2c98ac98cdf41c00af4294adaa8954ef9fb8dd52b9dd5573f3972e13dbce036a95a1c2bd22a01033e33ce9e5587b87342ef1865f79eb45553eed8fc7345f7b82cb8390fc6eaa2d2c05a8289fbf85b6c90e758b99f30a42507ba9fe928a3b52bdd7245e7b38793b93206d9a05650da755472e3427afa3130cb4b3c39c63ca50c5c06e74620875020f3975843cd47d2381e202c831351c8132f0f3260c4a733c3f8e4819da660649495aa7316f943bf2f5e6db91e10edf546a38516f0ac4a1dfd64a99970bdb94dae98aebe8c42bb1dc585ba0d55dc152545b93b5e5c05bb90230fb4b341cee877b96d229f0632345a9524a39ddcdd6df48ae0907d15496246bf5a94539352847f5f8384992750461208dba8df15ad5edfa0aa22f7beefd4ae3ce5c6fee80103c10b8c7341622546c0baeb386582c47e3301867152bb7199331631db19a222ecf937e84d0c4919dce30603d0b5c6ab42bb3805fa129d671681f5bf3f386460a6648f17906e3eb66ee57496105433ca22c4be992bcbc748e2f735ee71dfb122d6bf5baadbfbd5738364a11265a56cb9b4ebffb094c2eb9f652f61600173fae1e44638128e198fe9a0dd06195f3dd3f26f9d95fcb3ac5cc3337702846c99a43655b5aedf355bd0814dbb0e1b4b820c0cc955fbde06fcad6cd48a93fc11c56f98b16a2a61504749c2e09b3388d916674138a1abc51d284fe4aeb68017af6baf717df025596d505e271fda10e2867f9868641d205254a3d6d348a771678410d66911d43a27fafb7036420420d8b201f1caa204f4064c13b4a128c9c27c3e3986d81372d34d77cd32790da5ddbc0a6215f09905814171ec8be6d59a0dc64c6a335709788b4a623a1757b94bc20cfdf47762afab72945492af1cc594adc62d075e6e6a41cc9f48c6916afb42585beb5d88995c43228f629a90ab7f464d0c5eb58a769c6b11cca9f7332b4a461b1970f1ec2d35892b932a88f32b692b45f96fe92a083650e542f4406f010ca384e62d45f476b1c9e8302ad2290529b0432dcf06cfabbe9fc1a2c636c784d90710125eee440e57a202f6d21ac4d12771af09fab2edd99bb4316c8e4ebf3f25dd674ea44f5d6cad9de647cea73907f8ebe42e7162070a641abef0bafcc8988982d4fb8bed930a0a0a2cb36f1c0821f48bad0bd198adc69e4fc4efdac576196ab3f399844da78f239320ca31eda4a7d0ed541289cb3486b0cfddaa7c4d3a4a4fdd4db90be3ed3450b56cecb5a0b121e46d63e3187e4dd3222773c10dd8a793bf6b4ddab144e6b237ed8b9b78b99ff8c5a866edfc265c3488c321b40e0c209e2fea6e6ee2f526813fa7f766e9acd3b4eb0ad7a3a367e2135b4f62040b6c47b217d739e63f592f29ee712adf870efeeecb213094ac9771f7f008bf31745d8f880dbe3af114f552f4aad5a055ef3473feec67fc4186497e7b0dab83bcd7745a88880bebe0025e54aa2b41f27a70d1c57dd56ba52abf0279e4fa946a06b3355b2c0d5cc76396088692b6528bbdba5b85e41c98d5d0b536f6fe5d5feccf8604e3fb040d57cc3e687b56f263f6803a3617ba087bd8a4177b780f9c6a5647ce87976e12aa07ba6a12a55f5602ad625ee60d684f81583544247f913e3061300b21e80dafcf619eb78b871457cb2ae4c70fd9874845cf04c9e6603bc96e87f8aa68584231c9ffe99527b33e8e09f987d107fe9f993597832725ec67a47125025acf5ab45f463d3b819b9c165f6b93bc2b630f09a8dd5c40da67569d85c4d2fd6acb81dc7ea0a4051b4bb434425c840224a56d6dfda987ce521f4145b3e61c4a78e140131685bec6a0bc9e20ed4934ea6b53ac250e26a47c2cd23f18d5516b69f3a527f0cd51f800e062ac54a6de30e54dd24dd760d13cdad914925f50934adc699b9c1df991ea3428d28168057802836ab5b4fd8c45ab7ad55afdb1bc38253259193ec321c20fe108809fa38fa32435407293ffe6d09adcb019e3988e9c94dc30b262b8ec5ed397fdf169bfbbec107b4dad4d57172e6560e7e5c67c3e5d146a9f0bca479fe4cfb977a9721500bf41e600aa53bb839ba5b7eb2318e541d62e4dd269b7f7d2f07ec6141d4b4c049942d6081e4965b2c4c63238667d6c4fb44cf69970be522bee4b5e41d147ad2e069dfba25d911e3b1661706e245669ae53eb0542956feef14acfe29f4a19e0e383bd978e0ccd1d732ce1f2eaf12675e451a2fa7c6c3f16c99266e36b0c146fcb9d2c6a2990401bf164d22a3d3170099829ef3695599e721b51cae1537bd9b25ccf64c3e38cac724c5abc96e389c5ad20493a5a2be210797d15466ce73ddc410d76e1356a4664b8ca7b0bb96c4e89c9133c0ec5be9a37a5553983d674a68e9454403c4f1c720b6822424a0236145ef5e77ef719bbe6667e3a5aedbeaa6a8344d797d0718883f308ba4ce221ef6f97bc238e6dc6a25b4f7ca2d5ee95e6ee3cbafe0a483d2cf0de0318f77e78e6b4d6744de6ed4d006d3519155720fcc8a62d6f3df3fe12784d0effb4de7977ba889dc6dd14f01d6490c9fc084b0f43be16d7ea2e018c81f90d1857146e6dbed94f501c379510c83d6a706e021e241b35d4bea434af5e1c3d958c81ce23c5bed19d9ffd03f3c9de095ecb07896ce9d3de546445e859fd41a48ade3838ab0be821e7cfd1c89d75bf36e23c5104a3db1df62a4b17bf9de482cc517fc2fa40cacb58c27242dc0ebefc64a936c30a5f625a3baae5b230e79e60239df3ca69a16cf8d49229c8d4d4000610f85ce610fc3a091d6ac6add2c3a55a38a4eca72d297cc123eb58cc4969e37caa741132af06acab09ee60632bbe73d17a2aacf1ab6564e4c53281c5805cd3c0bf80f6214b0b44c08faa355a923494867673b7227ac1dfb4471c276d30194b62cec37e3a6b769cea1d32d82cacc281c9ac34bdc201eb27b017eccbfbdf1bd4e336a00c0686e51f7840fcab31d1e4c61b89d20348d73de778b638e229c3f0eab2a59b41ee23b3370b898c3112b827cc0cadc03a3f7136997eb0950c5fa52507618a399289d87d9e0455460c37b5e82e0d76a3c51e5661b8228575ad05e924a56062ff70320bb09f0342de8f1951b246be72e1365dfd4bce14a34f36c5167c6f4fbe518daf33d8c488c0aa5c502222b060310d0076dc5135b5a8a65c15a398af7ffad43d39f772a8f55d2dd6549da5e5b31f8ba6118a1e9995e40f6f6017060081a6fbf16abcfaa6e976fd9f9f2aa87127bce1a9867d00642613eef33ce740ecf5513d5cc9fafd68c5bc8e1aa86fc6cd3e97a38d7e3ba32ff686c98a24aae5cf3b781cd1d047e7492a8c53c9f8c37d74582e55c4412c735787db23868fc84141d49a2ef3060a44d27874e34028cc28e104ef5ce077e60d654a7f818b06c5ffcf4125c822e3e8929f4ff4b0ff80e0759dd5593d549afebde3cef2681a023a8de211a98d03e2395d0a018a416ab9b6d0254a0a8bb322cd216d75b24b960a8c5804b693f1f89993009d4da429143ba5c4f1c361ac6e97d7b43cef6da08198320aa1b0837b83727c29d384e0bc8e7f43c0ade1fd33f972a5030c8c530b8f33d1f2638fe6ae36f56b355737be802c0d076f94164b96e63bbb7a46ed20f10155d2cbb4c53bee859ac6bf72e6ac189f6d670e5ee0cb69a76b91a6668245d57a86bae30fc0f1d0e1eb3524b10217fa3b08e93958c1fb10cf7ace03f5dc304d6d3f00d4ef23b6e9ee6f3d01bc2aa0899168147d3c4a6910d0f1a71f7f5b8ead5bf73b0ddd6df99e0d8f34e2deb0d46b35236f5653ea740e3e68d3556d90af99b937c01a54f01851c1d3b324a3450203889350314a12da5d6a38c9424b1c117727893676d06ab1c9adc53e63a457d7d72e607dba8953da8306fa0f62824e62ea096414affa3e445a13ec4d0c5c59b47a78e33e3e9c4e13137714fc32bdb7f256e140d1221cdb5e87b6b145ab35db36520ac41859fd3202835d22463f57e97e4241b80289c2c24ee6e8aceebcbb4ccbf2566ba28916d037570b9a43e4eb433530ad220f237693c3dc3c477ead673ee3dfde4253388389001314f59bcfe255d5a686278d9bc2c02bec24099c19d4121c7f24f0a104cdcd1b2bfbbca46cc7a1ce185f20d46f11c8059b227bbd7e5c76e454acff126a502ce7164267f42815b79d0aaab699fa0e2bdf7dda0669479acdc9f4e8b63dd5b528e2766b8011ae56f7a0f1fb5134d8f26c17e89d42160209974bd46ace79d357319ba0e98d734c05f2a862c3793b9878f95d8ffea74a3a1363d877a5906cefc0e7714a4ef89fadad28e1e1959724a4fc540eb870be7c5c52a3fe631bb47d878cab11b70e4a0d2fb71b0bd2d453767b171caa1685f032e541e82c0b5fa32247150cdb9b9a0a326eae4974cb1206a7a733b3ce0ec0d4f4716b90fff4c3d4f18af47d6d5c94b1a5d70d24bb4ed1593ea5eca9d92593e5476d2a4ed893fac271df958d156e60c8ddf55e4d5db29493b1f3ac7f59ef819982452862448d671419c192bc826590b851461c13cabade7e981cfd94cec11c7a5ba5c08bd2258b125fbd567c22c6a718a645b11880bc0152678e4a9ab64ec6f039eb9d2bf010f975ca4f6b4c850606622370d7ec1e2acfb796c43de19eed03a383a318b32cc41486dfd44bce17a8511d7f53daef01ab7c36ac5b2219f720750cef58bdb1e6b37efe070862415921f9b3006b4491d9a2a9281ebfa1a44d8d7d84d36916c8cc539b23e6386976c80772bb5d23af84e4a4d934746e370100889fa3b6709e383c48eb90e400abbef2cd5eaefc297638d1267eb433e34cc0bea64e022efbceb0c4f802dd86edb38a57f8000653c9231e1dac2c5fe3cb7d53e67b2af8936722a2e4e55362555c1b7975fc2949fa9f40a538aa447fea63234b065b992f9a4f248f1aa56fb7b5d83e0cbb5e1ce26728598e90a5699cde66e9069cdc3aff9a106ee5d49cba565eeeb5a4b6a26d781fd0d80ad4220e4f36233927288162e119574c47b14fc5b6870bfce1f64d9d738b4546da71b4950f68448e2d27dfa38c9e8057152f330460e4bc8e34d8d42f5d4fe2105de7b1b0460b377279193b9f5aa02819eeacfb18edee7ce42dfcca95adc423ef05a4cdc29b8568609b8b49a8c3b4bb0f24c8ec55a60ad9992dc08552ed8ea71d72374d5e687d73e324ec7e425042c5a167f1ab5d21d03f07c4d2b8f98515d836242dd4e64549d67475bb3e0ea8e0b46b18b59c9209c529ca8391c9fc0ce033c38be6d8ecaa710c9f3e862d60160513d6c79354869650366bda8c3cdcfd74463029f0edf4108982bdcfbbb0d92036707ef50957cd8017c1364a30861edf488c267eda787f1009d57aa9fa6cfc6fdb36ce11860ab92f7276e4430d3a241ae371f10b11fcf0116871306d90b62c4d89f34eada801ec2cf6b3e065a0cd9f48cb943a4f360ff9ad3be2898b3d20fb51b9226b39ddc1d8e12af4a51269b4e2d1776f6ccb9515fe3beaa5e0734e41ec14ff40be4695cef1e475d5bce9e684915d5d7ff300dda37055fb47cfb6427d70ffb2cab2546e8de9bf6dc3924c95c12d450422877f6e3ce273e424c1e4c8482c8a7a4ce1c3d68302da894acfcaf5df0911020374a7d546d72e4be9415f3e36613dcc33c7455c42efbe3ed7cfe59542d759bdaf550a8155c0ed88e1d8b622dcc1920f1bcd397e4202e324f70d1ce2a0fa77bd62a32810fe322a21caf269f48fc02fe9618e209b14eed1a22521e16c5df4f387e9e9710284ad6cbce128eb41e3ef5fb1a1648b511ff6125cee88c3a0fe497583918285c49d853da0e0d6ca896da1aa1e67fada3ed7db2dabbfbc441ef68a5656e628d6d5bd6c1574369688497179a77601abbda2e0e07c151526d334cb1a1e787426d4b448c48cad4ee294f0b3f9d05f1b11862bafb8863f9b730191008b464eb8170ffee420ebc2b645811d9984ad4010a6c437b8c5f4719f0b5fa22b5066602e73f903f403eb5af939cd3e96bca6bf9ef60855808b1f61bc6a3de6a00be74343b820621cdfe3bc8439e9c23ff45523f269b3138b9a9f66501a3cdd0310417e947e0697b3376d8de3b06746f9ee2123d77c64f05e56cd161695cd03c8f02d589d102c234b8d01359447b63b58ec9325aac89e5a6d5250e75c577ee9663dd397ca2901836a53174a226a572dd18233afd8b8bfd03d1fa360bdf9b30c6f5c0c82a8231746842c3841fa92da8cf8418b390de759e042013d08a7d719cb48dd10cfc388dddb2d6aeca3994bb0e731acf247a6beed1910c99645a68a03d4973388c588e4d5bfcab1acf58b1f6aab122711523fb9f9d92dbb47be368d1186bee1ed0a74a19f62e072e19e5c6878672e3250ef355300aefd68b9c8c45ac370348ab61523598b731331232469c15aa9ca61498524348209045474fbfc6d8a1fac706c6bf1773a5eb77efa2e5fb491c19b3653aa88b8fe85d700f1ce4b4fe5e36b4588758b852c9451aedef29abcbe6cf52417d5df6af693f9e0c8c61d7c577a157c82d84dfdb29276633a379734210a8cbd0e8d94c4dab1c1966269ff7d6f322f77f3faa56b9cf7aa1ea453f1c57a08b653903845514b7de27 +Output = 7683b6e2a5cda08e3284620a6c316872035e4fa21340b96cf47f0194c6d84eda + +Len = 39448 +Msg = 534ee633ffb3bed9c4786d0ea2b384ae4a59f47dcb54cdd06dd64c8addec154a8b56bde351968b0d5547805a30b0946b509943639a5d489c5441a9994304f33c10b8c739f1d095cb8579a8a6ff2e632c8686cae3dc5144273ee49e1c8cb154e7aa1b0c1e2688647c1bb7edda5554775ab5c990e6d75847d9f36636fb011abfb32127957839e67e89e0a858de7b4a5a5ea50a9d52d598db1a3a71761eea68bc083c85693172136d589cf5f09ab939949e1ef0fa111c3c8752ddaa686e8fc2d34ec4dd902f1937b9531645bef65649ab84e823ae09f46ad4e9a2bb13d137518ded82d6135c7679e8e11841c8db9ca12977ca4cc124a74a4847524c7f302c3d714d3b19f99ed10284696891182fd16a96de8e133c487c066dd4b504b574b4ad08d7ba4e4adf71fa1555cfdcb6dc3ecb7823fa1f265fbac3cbf9928cbc8318c9d8f1c61c0f069f88210c15caa8c82bed59add7198750aaace81cb28b9c47a0bb6b04262b4ffba3d432f60204f8dddff7c0e4eca8670394e64ea7deaa5ea793a84979a32412a6c507cf7b5e32ae01a41236300375cf60c09c8500dc91098a3bbbf8b605af60ef4d498103f0fcd01ec06642f9e227c64f75f4139174e7a5dade190225147342be82c1cef68108681b7c1a6ca7526755b8fc1682c070553b7ec5edef2d9719bffbad9841bcd9017de020573ca21bdd83839d2b5af79782d15e385d45355848e08e16f55fbdc08d1855f4443b5305305898a05b219db01772627e918ea71da9ac5f0501b262fe544062400af020d809dcdf4dcd611984bb2372e1b251eaafe42b56c2e4c1115afffdef4bd0e3725b0f1841ecaaa1d5db17ee76a7e81766d6a0655c94c514339e3657e45ebf9db257eb13a4c4196a387cd2da56195a678359856357c5cc343190a05729c1ffa5469544d5f21e4343aa3195effa7f31c9a9023c2c319b23a871f9e604a6bcb78398dac367114250b493c008364a2194c540976dc8d05feff85da0b06744970fc00ef110d0eb7867455cf2d2b62f46ace4b0e1c0401e585bad5c4fa586e99930e312a1d2186608b07f6b8f9c788f38a1ad61a8db9b01d08c4ed5cc6d6b7e0b42740bb1b1486c3954e9295f0d82543d9aa9bcb469e1630dad6332e0b11eec356cfc61ea5767e4557b0cfe29cede649ebf5e27cc101a2b58e474da5319a5195fd7027b14697db5a24c6e53b78694a9a339560bba784f41f9590a35ed4c0aefd1ab0ec3f79293c969f0998ecfdeaa09933019d1444a888d3836acab76f35555d20fa8a05a78af07f18f15193a7e2a6eb8cb2ddf332ecbf65da0e3a4b5b58c32ac2b597a06c3dc57844f685ac00d1bbf58331c9f4ecb2267afc13688733bb970a528a8bac41c1fa1685b1cbb283486e4bc906e775fca94c577c12dbf782ce3f6062e1ec65a2b82cde6d9b9a23c9a72c42c09a9d12cd229f9fec850b18c3113ac1764410790970cc446f2c579c2e8e749efc657147f8ceaeb89fd28c777f2507a1ff39ce53008c56cd0cdcaa783c5ee5a4ff0ffa81ea0de8363883c670016a2486803b4c90028b6aecc934f9447da8ddf92af2af5d1b50eaad39214faf14611fe38bb1319ca9ce673816bdda8d6cecec1012a5f6362738046204339e91029a684d843403f540f5da1387efb4bf74ab9e6e48a265a97843e4093c2329b266868c290c4c3a16727242139f331e574f6553783f607423a8d508174388777faaa60a1a76625a9ca8c42dcccf307de1379aa9c25978b831139bcf00bccc1e7569894076750edbd47e7bfb939a6069e9d7cc0fe14953985e52d8c749fa7675100d90edd16aba347a4e0a49fc733b58dd9a6a04396179ab07d14c8f779f0011fc116d60cfd9ecfaeaa1ef878bfc39c1491a05155f445346da3947660e2d018b861f7f27b6452fa5a214ac32b697d44998b11db1a764892221d55a097206f3384a8236c1192eeabb3d10b0ea00d8a348690a2477c63483939b4004d837bf4daeb5e434cb8d19b6b21810ae0bff311f44168fb9c62056cb318303d860e3d8795554afe98576781c10cfbef4170633b0d34dbc3e2b3a2dd862959b3521fac52ed2a35fd5ad59dc735dc0561399ba43006c5b1a2215983c33dd2f70bb99f127a69d2e7e8991cbb964ff96808d128ff17675eb142623bf0455d7dd1edc374b52a92b628665e13091598cbec8d10ffbc18b966a548ac41308b7091b0ff7987de88ee3cc01fb0a2cf6d97bb5898ff08235d8345535f08538dbefe765cece2c0d4bc07cd76bc97b154c5d42f76d0a42c7b0b4d62832d7d594d068d939d5a0607e1ef65d213e51b28e146d8900cde09510e4da027ff5a133bb98aa7523bf2ee454b498eb1604145efbe172a47e3693660224902fb8e8fd2e11973d31afd5ba1605bf10cd422791cef336253bac31a31420027fe46f774c334b5e89a54ac3d2742591067a12434a80e884cd953739904ddf010197103b0ed1ad4128266104289d18dcd25822d1bf23504ff4679bd8db71b392cdde27aec597cc01915b9f110cef73e51d0de04d6014df0a32193679f50e325a2d10224cf0d43bf24dbb5174ffe9bb6c3ef1c720cde3c945ff30b3a76d91cfa9b7d39c80213551a5b5bc24aa822a53b4c0ba63f658fec385c4348febb59b0013e6af0302c739c19e71d4951c241fc1614abe3338b1e4324c299b27b15d98682b41f8d22f633ff03f0a9b0f547638a8f42573b1523922b9fb87db1782d6086c524247a67075d65229d8861fedc9036edff9816afd8f48bf36678adbfaaf69811b7021dc709f8b8bc1741c2342bd1e87a72f4dcc74f4b4a66f5110e1635a3a4b09440e009a10ddf1a865c3d5edc2d887cc4f5f526339f52418dd13c46767092e8e5662af779a3c2841161394697adff3c1c23ca942af98acc553fa01714644a02cffd625739c24941e0d91eb203583302a305c1d9dc60da4e76e3a050b888b5457c8cf2f289725c9b1c4c536bc8360d16802343bcf3dc2a111845a5bb09e2b9fb149b41900fbce3d8ed4042398f4f75bfdc05b9061475625b61ee181eb07d3f6abeb2b7f976a7c6417a3f52e300ac5446df34897fe9346b757c655f42545e30dca35abcf4643ced1eecd0eb33c25490f3b0371def1a202ba78f32e4ef9e8f7297eb1ab84a828240b76a7c75ef7e4f130e7896db1e4f418b38c3de0dec3517efe4bd7b13c37781a8531dc958e0dba6c3df5eda2dd42fa073723ff04403c3fe8d0a41043527eb410b3c2d41fdce82608aae8b8a7ad86244cc9b2cf0f0faed4c3653a13d873e88cb53b8c16cca811a854fc2272e29f391367cfcb166789a5d0ad10502ae6fd0f326661001d128c04c1efa64594ea4ed647c6dddf7db46abbb4046698fe056a4d75a2e8c16f88054c03172dc4973528e8220858625d7c1f5aef47dc76d5aa583da709173286938061dc9a17220249b9d9429ae3e64e0513fdf305d67c7a4c235a46f790f5eadba9c0beb6e6e06eae7e441a0cf4edc805e53f6fbd090c3471782de5fcda6e14b6cde34a1c117224c9e29328cd0feb43e50f79a5ebe8b89ca0a3230487581d9cbb8963df282b69dd228350ef5989615a290f4735f0da142b5050c413358e86db6058ad1e799939e04eed07ee4115e263584122a09a61716916fd9ba276022c592ba839686eff64e6b56c12a5f229e107e9518676171382ce4b061422d74790aea414934d96a27d58ec9d2b971b39dfa062bd0d171564bad39306c824c7c33644301a454e8f36d5af5b0c9d41fada40d53af0011403e97c01556c2228c6199fa27625c9eb973120529716f2273f6fb70ef8771cfd60f658e028c2ac9f509f3f51dcc38b957d05cffb1768c4c7477ea4c621debb23cb3fd3f873a6e1f905d897caea7024ec7f494701525e8f92a18b9c932d836627910a7fa2dc654ce6445a2b8605b800412c50180dee84ad29ec2af0ee91f19889510abe77a99a57b79aa88d1be507b84412ded5593267c7ed75b15440e5c5dcc999a502ff81b28d0d87281ee4defba755c139e1abc4644a6ddcc33922af6cad58c95e0fa2fb4a7758887d637979e0780695e5df5e2b26bf2b9fe5121c455284c76eba16fa6cde81291cfcfd523c6284d72f8720e8cd1b90972d8b71964e13fd85f83dcb7e5ccb54efc34b3f079d0e6837ec8258e420bf5941041ada19302d7225045d8f9741bd4d1d09dccaf222209ca96b6be9d8cc8e93a9c237ae1d720b7d15019df5edc200d4415f1603ba52659ccc1aa8462f3705ba41d656702bba3a88e68e7370ea4452a4fd41ab8bc8a439e2e078cc006fe6b147a9befbc2cc4f372019f97293054f1f19914ff1c595ae09f9b7044bbb03622dc631fa9c1867c78ddd1fd11fded748b2ccbdd88d33a9c6725b905bbba8921fb7a07af7bbd396a9ab1a78a3dfb6c8d7da18c379d2788d83ff830cdd708b9495fb80f564dfa6c16c2b52a4f046bd6262e19852b265e6b96d0e0a9d081ec6736b75c231907be480956b203534c9452c8065b5ec00bc10a5f82a5cc17a2adbc6e692fea029152f5cac070d99effbf09fa6d31beff34988ebabd0e40a92094df7bdff90d18d3fe9ae166b7553903342244cb614dee8a2b1e30e9e4ae8fe5e9f8e57f823363b50960d7b24f1f2b423bc62e88b4b498f3c1e3486eefbdcfd7f43132b39105ec20bd6e330affde7ca21c1d410cf29b0258a4058ab4f71673e0fcb0ece2f02bbafa60ed7dd8903a350d1e4e04c0e3a936a21aab7e24c46082e74b9d9a73654cd52d3b043e83cbdd5d6a8a82000a4e873bb76cfdad241d4405d32721c5d0b910469f96dcfc73756cfca1a8e0bb53fddd1981e2249e1dcc6a038ed964f460b421143ab99c421059921b99c091bf04b652d8e7c348d978977984ffa88daf8b1d2447e4eb6d95c23ef5c03c1abc9483428e81d05990e79b471a910edec47fb9bec4e88775777ff1eb3df671fe8ac03a693a1c26ea254ff0a4f430a3c233ea525da7fe0a9fe187052913c220b323cd8ff2feafd0bf2f99dd75b06ca69bff7abec3759155b1d43666c01f2e3182ae43eca78144b620d54ecc84f54affb253b766b8d7aa50f377127c7808418db353a8b84e6ce2c0543ff524976cd4974f5528b003744fe3adf3a5b01976031a8e3c865bb06692d6a596164d77bc1154b92d55056ef68bf6266f77686a137dc15a8e643d95185be0590239afec8e091f3a04c6cebf026371a7140e0d3484b66b6174cbc6c52945c6b9aae7b2bd8ac5e118020471bf43e13c7809f4083f74b6fee914425e074258700db7a7beb4574c809c4e9658365e0c3fe177b1bf538986643b96516d240b9dc69d50023b979ea6e60e1104e9ecfeec632a86cb9c386b2d839f23805be52b1bb1b09e7f912f06dcf9b672d78ea8c98a8e9a5dcc06b5c3b3455ce358900f4bda1790c9a6284438f5a3db9a96ae3467eda97a253c6594392190bcfd60746d12e3e283f8ff689edbf9cac7b0c9b056811d9d1205a1209b747e4e0599206fc6293df8d25313ba0498f158c0ddf8fed7bf2350aa2685a1931dd26680e121eae137f043c50369843f17e4340f49acff7ec806ac8ab06f4f43db26c075fbea4b87e505a9a330892f18ffda46fc1b6c1b1545ce98facae892755781442c0f04fc80db8314b601fc2454f9db76ce7cc1ba62dd84fb419c77d2ef39ebdaec46f56394c0726b449f49cabeacf0accf9332442f392fbfa84fa4777a286c6affc747ea8b3ddb969632f8881dc120d0458947214200d7cb770bf7e9decc0ddcabbb81f82cf9c57cf4e192c838df74ca798588ba63db8407f6f7f991e3ced518394a2cf4409d3807a5d49ef1d8aff282b3b07e755c723f5b6c3c31d551d6cd06f19bcf488fd03c1ef334a46bc5d8a4e13b31b0bbf46c0faf2301271eef8bfb8f1ad7f25be13bdaa924292c9dc70392cd5831a6f5f272fdeb616f64d586966999fd251e95fe85199181dabff1a6d8c32f53d8e9891f2b10f76fae6f60de9e1f0de3aed95eae5702bc5270e4ce29fe3ff0744d00e1434050bb95e5d029bf4c23d4129aae1eb8599b13df12249c1a1e0ef603b973632658c5201a3d1096f1487fd4d310223de532ee7e6fe906c43fdf392b4843cb798f1c780c48ddb6113b393bf76d38bf23fd8b03e64c1d12ac60eac6768b148f8a4733706865ed4a0167c85d242a3b0c39c80be031bcd5d0bd47e6c0be135347fd1747b51dba9755ce3b9cef43504191e50d5b8f490839c95fbb7c2ced29297c3cc5fd50128f015edf805ef83b2871d79096221814787284fb835414ea15beb4ae19ff482e2c53ed9efdb581f6faf465a32909817c53a889f768157f9d1f397abbddf5a55bd8b68a727c4a915b0ef2c3848fb8d468e30261bd326876ee8fc353cbd7867080dc52bec3c3c43052ab927a9d90d619bf6ea993b3a9f400c5ac83c946d05bb084804e10fa9ccc66c31afc1155f30b566b3dc5a7439462250abfa26395911c6d510cd2097dcd0a3c96a459101382019553987d26d4bd59eda51047aa1edf70afcec8082fb51e25b9b38fd10041035ddd5fc6f997cdea82617ee79b244a85ff7fe3fc160d0a59c6e603238b68463fca377711628298e485887e8cc65b814972e478ef2428e54494c96caab0d08afeeea983bfe06f9c73096b8b46efd72cf571e775ea5b0aaca9386dd76a67c07507713e6b199ae7415eb6108e5f3e1eb14fa38fc235e23ac94e59d72dacd9c16f24fcfb1767b971ef6f3581701ddcba7a20b1e44818e240a2fba01154b82d5ae01b37ea70f164960e6c2ec617c9f133ed2f42eeeddb83a5a17ab42236d68c1430b5c9125cfec4dd061e48e56daaa40f7446ffb69ac5ecf02c923f12ba4e1e76c7ba5b7bc4d801ce404d2ce8590a1ed8762b9043381f46a9ad0ae6e9c7670a080df2942e91c542f122c182d6c22f87155ba79c9dad31b8588bab53b0476b79526b251d32a90eafcf1541f1b8 +Output = 86385c0373a23da9fd7a0b4ef38257377c8341767d8b781ef45f264fea3a05d6 + +Len = 40544 +Msg = fb7f7928b7e9a3ae53c734be1cc37b797d2ae1b4c6a0cc4d2d13c3bf13edd2f5888e305c10f91f3ca7cd1448047818741ba76e06e50076f06314d15de18fc68a78b2e4d7d604e91e4244e343daa1950c1f2e1c33b490d3ba63f9737f615b7f10d3d5dfc09072cafb2912ead627a8bbea93a63563bcb6aa5434abf14e1cb7c430a1de6740c7aa8a7b6621712a71f452b67ef9ffbd83dbc465de1193f1990c5e92ebb5c57f0216f147ff57c06643ed2217e90ec36a9368ea966a12a19060c316ddb94241a4c91dc707ff9e1eb322fbf2b6dbcdc89274c3e28fdf986255fa42b2b9116d22d8a427d3626bddd53998868c3b5c1e585bac5674f7458a1f66eef3fad0fd1eb2421c9cde014dfc2b1f2cf6b64d74e9b9f0c5886a77a5cf20ebc43db8c7843d370bb8e5b08cace2698e67b339942c16347747c08bb60651ad0d0587b249aeb2fa5a016811aa9179d6adcf25ddba8b8d1119b8689e5d70f70ef3383bb1fc846543587e8ec90303a8bca5eeb569649a3798fda2e76c13eba98ac7e5c07d880d3e5a2cb7bf9f400a57619d4cc9a73c60fa114c8ca5bd81804f6aae947ede965226860034645d09ae6e0ebe6fcb5deae5bfc32dff0a584e36d2f7d2cedd9cce590310f97ee3c905f8d60b30e1215416316ff7c9827e07231618765b1a457ed72cbf40411ca6acddef75a01a2a3554674df0f5479d6990a8260a3271011e4e5ad3405e009613cd399c3415a4d06d2585402c05d0d833bc847090723a0ad0d2fe5470b25d7594f6bf05fbb1f85d338e1912096f8cbc445360fc937de1bdc3d36cb93584813f90ed1a34b3be3b59ee58cbcb717aa2d0041de3d0f99c8ca25f184b0a791b947f6f7bf0314282984a054b42744b6f3b9cdce2b6f6ac1764420d6b444d23c0bdba9868ea02924635bae22f27157f967ea932698076923690243392ff8c1bbb247a757cafb18a513a30eccc21b4f437947e6f7bea56954138d03b5623ce4954f2466d7fe84611edd0358bead95b949aa4a4fce09ca09c7f86cf8b7f581c95d34fa7e8383cc711601f502750f6114607d7a13f603d5c8e39a0a88dd5487de77f62244e70543e71f34e0928c721dff2c555ffa2c2759055b7aee3a72099f927a1544508efd7b219ee85e8f71702cb801d45458cd0ee46d841d9094327f3983d814c927c7d6e2cf099ee76fa0840e0d957cffc65504d85ff1f48a1c8b3ff631167739413e2c1b3e03bae3a9a618423e3bb1dab940b3d56b29825339e8c64618b9bf1d235e5774fd11ef0bc3fec759e879054da83c964bfd9f595472d7acb9a9464edd44b503808a988da85526fbc58ae209f1299526acb5c7fc266dc45dc17120c8f23bbe9aee751c2941c39b300593eb124d93e6df87f237bd41715b43edfefd90146ef797ff3b11447095e80eaaa218c0bbadae4b6e51734f3e340909afa111468c54dc75335b1c51bd5279e22523df97d3ad57d4b041ef14551c3a197716204ef293f9dd3b33a1f3707fed44f597c3fa2e3980160e421f9f5e907afde4bc8f3bbf92cc1a6773268c4274aeb19c8c4a8a13c89379c8e09952933748216902d27f7bd7cfc758983e9e9be73ac2aa6ff7aa2cd11e9a809bc0d0ab873e1e84978e9c9fe9616e8ef13eacf53e1dc27fb14fecf1f99dd2b5d24a9bfff6a96fc7d91815942e4d7a6b3ccb39d6efb46bbcfeb7c4eb987dcce9328b17090c267f9346037d014cd0758dd948b7c972bb18c2b6c3c472344ae39b2af6c47f4e41d8876cc5356f9b96da57355bc9457d9e442167f85e3e6391b13c2a32369b23680504cbf1c127b10d2367ff68c0c356ba886990ca14989cdeb04cceb1e01522257fabd21db2d213bfeb2085f440dba4ac500bbfbd6a39467e5b6d66fa5355d0f6c2dd2d8d9cf73a0b9c217782bbe6cde035784346d169071d3ceeb17002d5a65859292cd5b1efaa8cb0eb3298b48d68f2a33fc9fadcc04527bf710cb7612d18b6bd005e8ac453dbbfb3de45aaad27dc6013e2c25e0ed7872a5d74f73500c4aebe6903312136ac54212f8b2f3d285ebe9511d1bac4ca074391b16aff7d7424eecbd7a2531d7b618a3d9e626dc4989a762e27bd11d3b0e810fa45d393f50dd64f6ba35e22e4150c04815b047fd570539977cfe5761f35f265c0754f33306041571a36a72f29960459791fd1e3e46212af2e74eb45ebdbaec880da2e7bc40e0e8c541c0de6427102dfa1476b1885c0700d9ea14f0fee0475afb7eef1dc04599655b5ce02d6b328602d865c30ac1e3dc46b64ff81428a630f81d22e59b285e561499bc7167f104ea4b994d8b31d321cb81f0dca127c4559a4e57c02a6bddd33f7ee8281c95dde36591a494762ca45ff93bef5ab831b936afe50f226695c6ec7e2ab16989bd17181f5b63022e051ee491fb1b90e43bf1919744ae0e421fcaf138a05a475fea86ea3f313d5e58c428fab94adc48ce4b53ae7af39d4d6513d32998694d8a472114a3ed9b9a729f6fa9e799af9a481e6cc7d47f7b43a77978c8ddc30cf0fae86ca88a5322e204a8108bf45bb2bd597ba3354cce6307e323579055e411ad5febd22ae6964d7edd1eaeb56924dbad438dfa855f903353cb0db715d92101eb80f75c8300e1a5d4c5a7520f8e1fb3d2cefd789f52ed748e25dfa03eb1a2631126b51099205ab14d84eb0381aa71c195c273256c700cad1fba401bf32490bf8919ccf8558d29f951e194c9f307458d5ce6960ad20016667052d92e1c7b139eba21e51c9f91770549a547ac4debc1a090030f2eba493227e8b552e4a2ff52860c06a88260726c5e9b98aeb5779f0d819ae1859a0d948979efaa52426bf57602e78fbc347e792f8bb18271eb596b52b8e048a154b12943e3edfa815260a8a697b386ca3ae3eee914f22b3857dc96b8cecc000b66905087ee4a6d891b695f0bcfd8b1799a7519c182c55baaffe66a664ac5d06ad791517d206fcb0fa56f61cd31bed8725e1e41e05b94d96fed602d85b4328267b09b734e04c2dcbef958f71345cec55d8ec5b06d2ac66e302933283c957ddca9f89800221fac683b1e0e6905946e3fe13052ac9174c3e295b945a3b4740da7d9b76f3e20fb9636311c77ffcda5070da64eac7e74c3f2fd45a780e614d94aaa9ef60876711fe60f46fc7d01900002f855efbd6e3d9ebd86e9fbcb38854c9cafa1bc4bef3c1306bb22c507b6792ec5c8961c6cc3158e8b4728bb0de32f566b7c891120f3aa605c026e7ffc67adb6ba4510dca1c7231ac506abf1302d397e1fdbfffd6fc8e38d52acd232465c572048366c3744c090cad18c19a41b5fcc4d2091ab8920b70e224e80f5e7ccdd9df5d66551353ef7832618a11bddb6c00f4ad76934bc1b0854a7ba4780a67632a7bcce9868df75b425b7020c59a3e99a2bfdaa2a439f4803dca5fdc91a752ca29efd9798593cd23f9d04f8977afe9c3347ee029b7f388ff0cfa47fce6c5ed676aa41992dcb543ddf1495600827f6b7d58ca648869191d916542aa81e1e685cf7f20e3c1e66309fddb2f3a328079422c622ace2b120b20cbe94c1e080d79ba66a9fefe835d3d7de819ea52abfc3dfc64e30883ae4d5a11230b6f08fbe3f009d1ad8690538ba51e41301335c9502e089b7dec3b6e95868d1b4e3401d9eff9e274ec606fbf0c2a797db0226a0716d9d544756e4c087500f33924337f2e9bf7e2d4d914d322594e0e121ca05601dab201048bd73bf85659c1f11fd5f766626a6986060c6139fd804a92c8058035f6571a3003ef81bac40197c7a3a4012dfdd204ecf5bfa0425351cd7454da8f1004396f7b8fefc3bc4898d341521602c1a8cf439e2ac706e81532f52b4597b91c8ec99f2b728078995e7012e2adb492ee1da2840e178b0ba79db4504c1cb5c4d7e09817e47e29f6ce6037c52018f837efa6fc64a13ea434ed67566d4b4ccd08cec415782ae544e4c80850688e26694862df4d541c127b0945fc89baad48361b7d83d22e535a89b922c14a7b8148806ac44115e0c335a7ff2de7deb6e6a1996340ba5ea9124030ea4b05868cae01c615a056d6893b1a939d2193b5f08beb5f76c4d20b86dc38f30ebd4fb50a68e4a2bf73ab1fbbe833c659bdaabfe6118800dc765569361597488cf62a26835663ceeeba9841f75f03c8bb5e775d05fc0a25fae1df0835530da9fb920f7b75daf17319d1b8fdda041d134880840ddebfd4276873b9690318ee8fb0fd8a24507b3067d77577a3c27bf22e77c07b42eee1988d8bb88efc3ddbcc6263a504b1a1cb82f59e027ec45f2af582cf9ab7aca4e5a9d0fb3cca42342029da8a351993f8207ba4d40518dffe95c9a8b67bb3ab9f509a9a3d6cf5cb846a79507b1a234bb23e8d0e1009e0672f50d118d2e009b04c96dd31a8b58c08bd2f5d5cdcb0dc596e5a2999e86d6ffa6fc09e5b9b64246b2b4d044fe3c3178a3cf3286815b58f4d8b27f3c0b3bc11fa4e7993d976748e3cb9d7824d650202b0923a7cfacc84c688a71c5e1b187260f739f0541b0aadc19586bae9a2b2fee81c3b89cd9d57ab1cab40abdb216d3cf771b0b951b8be5c4905f08bace84416324db7459cb84d94fc15c64afd4c48582fda51291f0b182c9f1eb5be4e969ed46b9584125ce424dedf68c69e3724307084c189e40eba8e7b3e4014c7413629e61eb43064a0a953e55104b00a0b219bf290a7c96eb31fa7e4a10abc3b173f8b97a5fa3ab0ea608144db8a21130bcd017ace0d9e1daed2ead561ef0a8e532b2a75ac08017bacb20379e969785d9b9f0755b7538695545cdde9eb5d9e3567719d0c9b4e33495a0670f10513542e4d1ff43fc72a015a4615e78eb7e6c5d4c6bb39c8ee3d3e9e94e64056a928131992b87e8587e1acd0e6a69e30521b3fc11360b7473f7581efcfc9f7f7600853a3ff00fcc3742ad79dc887786b445b6a9ecffa6be3e957abb18d3a1e6fa4448461f4720576165610257e20fcbc0927c4d24ee0ee3b86742a983fbf1a3bf05d23b825941f19d903e4ec4a1b919f0b20dce022dca4ca915b7ce859b171c8dec2c03ae4efa02b46b4d466eecfdd90d4a7116cee16260d947e11368db9cbb2ba15d84ec4dd3f26f9d95d29cec6471df05b00bd0355e860fa4c96072e407e763cb6da8837e552994cf1edb95c9754a2e88d3974f4f472815d4769eeddee007fb126555bd0a0710eba8f147a2aab9ccc27ee2a19557a5adb180f0b31ff1b085bc204c75e019710d3ed115000bb7b65f638de310e876fe7dac5040895143fdc86e9a2aef35d21c8953f192ec181af66cd85de0ce91d3dc00cdeb6d07caff5238d92b07ab045e8fedf3b171f511f80159ea97e0c2d798c69edefa7f14d44b343dc479ec9195e5529fe6b9b9023d7c5d9061e3ecd404ea45bfa5247f9ab54f2d3ff92ce0892f8eee09f4b072fae5cb947705e80bec5ff3e0cbec127480b635c4a63eedec7b1b81ea91e53fa5c751102e789d4f45f22fdb1f2a796b66ae1f2282da5c64174fa2e7cea1800d5950c971b1faf3bfa2cebdca8a4414d85e0b3840ed431b3869ed0ae823a08ec3967d9516a765cde12b6951e7aa818701628148b78f4a4211ea3d9bab70f6d7086436fc289720f45de7a9325a064a998d7df799aff0559b99a3289f593d0a2385cc6347cf0a9530dadf77aa4c26051125b456714f96ceec759b945c1913463ae1d5ecbf32872b480019bcffe5931cb870118419bf0b1bfe50da6b1b147811e4c588b9a97a964a06799f5e7a4cd4f556179b6ad928d7a699d069932471f7d3e8d9ebb350cebf5a30ea794763aa71fab3c15af0f8b280d5849d4ff6bf5915f50fc409c0fb578bc38ffead5d0226f391961757ffc08490128960947a34f45cdd212fe7c9f13d81eeeb5b458a9ee9e124c8c0997d77c78fc46ec14109ca6953f4e6c18fb77ba72a410ca948b4811ac31a1265285466a20352fc675d8acbe182a225230870e1bd0c25b991bfc5f1e222db3aae0d6ad53e7626fbfbf0e47d837250a8fc5ade6ba9b103bcbab1a4376984cf08424fa90cc26fa7332403012978aa6435f58ee86190a141dbce26399bd6745e46caf6f75257773d6c8b9cc816e7b24895b6aa750a9d6249df72276c645177f0baed0b3ef12515506dd8c6218ef9136290e6b96faff57e818f50ba25dc0417ed2d5495652f53d148ffb286f4d7d6541ced2dc0bd98c37d53b510ea4c4915dbbd68a79c54550a338eeac1e6293aa5fddd7635c9470d2de526175abcc9f4ac4bc8308d29f3aa71c488f6aeeda9ff8f970cf1a3dbf5565b40617fd43a8425f2f07650ae422a78b10b9fea21a35a6ebba9132722ffafba76156eb3296b66240e51308eb3f2e105f1903b90c11125cf51bb59e0583c5d82a6edb47bff57553829f75cb4443e009b5adcc5ae373ef2697b5546e3ed9ae7f7124f9ba1ff073aaa6b68648808306f801476a30d2a33aa855f0042fa8a21355ee3c38bebd082fec2fb2eaed3a8cf16fc46e63f7543f6336b2543b5ebd7da2f0240d1ec231ad087c802d1a45ccb23dd5918b500ae2a917763f6a7077f7bccbe2a5202260f87fabf04a7d7aced1a35adddb36a4d7f860b5db5fab3a07e1fffc81d41dda178bd078dbe13ca304c3d0c6cd23f8d90b1006dcca858efe9b06a7c362434ebc62564ffd83d6d319742dbb0047ee3a7300c3fbeae8539e348dd054af18753b2fbe025eb8acade9549979c2a5b2ac83f9558ec06ea94c41826cc9771e08ec7bca96fa8d28aad8e7dae132a815b1d16dd275dae4e681d2215ec46c9faea81b891399b94bcc02ea4712e7e2abdeba1f4094ee32e9d10687a62001343ecf9a74db7112c91b1149549f9319f47e7f2fc8a4c72b113fbcabdf588ccfbac4ff449afb89bea49ba6e29a49e1f3f27065a77012dfb9006707e63bb0eb6c6ac2cc2af061c3e9d61deb633dee7602672220a5a81355148af0514a3f37c283bed8a4d217969610c8426d4fb1e5d5c1cd144eaed31eadca1b5c174c5c55b892314717ce730296e005898b0c98d867be9eb72e2783ad60463c1ad86115a314146cce9374854e3cc41853f33e553ed26546ab6da42c48132557acf33ceda89b86cbbfb668d0d20e397b42043969717c327f318ba94f672cc40893161466de8555d89aef2ff82671bca8d45c926818ebc28319f6ab6f8 +Output = 8bbcab616ddd66b2efb440d6fc1d44f75c4d876b470c4d436bb728e55064659e + +Len = 41640 +Msg = ff76619f13a0f3fa12afdb4279018d6e6ef2894d995bd2253559a29b67505cd2ce2fc2d75bf5683d63746804f25458c0635c79f62ded31ca00cfbcd711311e5fb2ea5ca42505eb95b27d69adf7458b19808b5719973e93a85dce7d5f1a33bc97d23097ce19d9654c275344052fdb0ec2ed09897c7f56de0875dd4dfa2b5e1ec35788db1cde78bca8ec7d63d4431ec903d35e79e88b3efc327084946fecbb2d2a687b90571deadaf226832ce2da16a5235a108d2466fdd36e754bba870451cf162e901e477d38a57100ee09f79dcc886ca9a92ffab69b4d04acbb270a1c28edcdd04fedb4a769076fa04461da34475c24e9b1c6302421513b3e5b43c0db497098774065664285e7322e109c54468f079441aeba8f5796c65d53b37770eabb3ebf4becef24f7952c03d3d7212d7bad7304da2a72dff80296b0124c29e4f086418a73daf1b86e9fc02ab6235a2d7da886bbdbac58e8ae6ea87da4adc3e296b35f411892d5e84eae8aef017bae1bf1882a036dbdd37122e1e40b315eab338449822b619d017d3fc7729ad96885c182564622b8e44b44fb6332a4e0e84b9f615091917782df3febf46072687148e5d619c161e3a92827e2fc7a8ed9d209edd5d174bb81c9d5f5f73c3cc0d61e5d5095d985081794d3e37fb5a41245a44fe78ad213f1a8fb4d690ea8eecc4bf72dca689e795f7b2eb240799598784ce78453255e567b149fae61d63e5fdeee85201bf77185ae38fe2e0579a43f0815220ffa517a25a0ec3d60a6f708753ee74f9f0ae959913c758cb0fc26eb7f0ac9dd5aa4b43068aa595dcb001a0e19345fdd1060e65f85525b619eeb297141c58fa1cc18f68707df82885736e75734077eb8dce5988a49381204619b293f6e8290f4cd20c088ea8890456c1205ebac006b676c61a4e2c636c1fd62d4cf5bec89f361c582ba39f9ecaa1d725a1dd26b674f72279cb56fe29490d5085dc3cfa522e16d1c078ba41d55f997d1d7d61457845162745d713a8699a813ba00aca37f9582a23b77dbd13c09a43bf151d9ba5a9e9abebd6e804a9b8e313fe28332dd6429fd87889a54c63f51d4913a90cdcc5bfe510e69958ba707bb52e2e7affe873b277ba46c389c8d0f75b122155b5b5041ed9fdbe09b3a5ab4683483314cb8a8ecd7238250185b2e92bd6275e87b2b50f6b1acab8948346a88ddffaa282208495e811ea89a033aafb27110121cb9e4d361929f09ce6322df6d61dadf34f894717b6d939eb4c1e01a56d8e2821adb2ee26adaa07a16b6abc24a3eedabbd9807282ae3abed041af776663b014c49a9b384f9cfd988ca07781a06ba61952bc80776532a8e1cf4d624ccc9e294f810ed18c1f6bb6fba501f30ef8b1e5e26e6513c64de8b63b3eabc11236915c40fd96d08a149e48d9811c67c49c0b20be456fb50f9b44e523b509566832d1cb9180bf2292ddb9359ab75c304318dbd9159e38de83ebbbb853b8d29caf5fd3e9a9b0d44236c920ffb7ae5e06faeda89180df6d1af39dc19213b0940e67fc1c58f20492b9f6757a29c8ec7e366c98f5cc787f58d4af400b251c32ca2622c61f7c230266f45241392646d84959089957fc64f4a8a64770dcc3b5c5e16e501c61d58520cd7bcadac287aa185be96f6d23a3eed5b90a3c8edb0078d07661708d67e7c0f632dad0a0cac07b231261f182fd457e99267aff186a6dedf8f58a2487a6454ee9437bf4119663226ef94d4f8949738cc56d631fac2f5e8d95eb52bc99b15087705be9b5cbd9d248729d25c9deac90a1e0ea6d1e987e74c03dc445d941fdac1321f89e862de9b045c46a6610f17b3f465249f36c8bfc233e572cfddb0f0fba7a84a624f5c66a6fb2eaed98857059d1f2bff89099e51cfc408861c5625f4c0e160ef0f78513c073184c8337b7c9aceb2f7072cf174255628f382f56efc157198e274590a494806cde6fe7be286c090d652a4509751239f862ecc20cd3c3955f3b74308ae4d72eaf8dcb77b647e5e29b3c33ebca23d33f10742ce651ced4ab51b66c2e40b63a2fdd9ef5cf9aa6b5ce270d23d39bb413d96d3b6ee8e03172fd937775bb4ca96c08599a653be5c55a1033607098f8a6329d41112966129c3d0097073754292ebb4cb5f8a0592214417d42ceb0a86b6addff4e9df2da837f9158deee177540c6c66175422da3ca141a59d7b05a9e5e827473d84a31b29d4bfe6acd849cbb3df20bfb19ff63b86855333a54add4c76c7d84af90ae9c7ada91f2bb05633d827b40fa5e06a8e8e367583aa35c2fc5dfffcc8ce6ea3369bfb5e20ccdf92280678334201edda733c1518d8f0950be942492effbce67514fedd9acab182b1afbd6d03c0bc20192caeeb175aee0d4c2c651c0686fda7ab0a58190526c3e0de5165cfcd91bcc14f414b8019118ce5ad4e2c402c6477f96ba11278483be8433f95666638beeb18a33a7a9bc706b36457d6017c47a11426dd5f92c20b1209f1fc0329faed4e306d3ea0a506c94049d3724c4b99ff46bb752bcf41bff5b10f333e2314539349720748fb3387c6c7377a25397160fe59542d7a768736af22e0512d7e9038d3b89b2fe8d18ce767a466a19924dd96e9e5c697f5decdf1e16d6693f09b067355a2922d46ac18ed53debd90f695f6066beffbfbc18e79b632988741b002dccac00f3f498b133e63327d238e631424772a81daa1090ef54e4aad2da2943c7c06bd078acbdf8f690fae8a82e5082acfb0cea24bd0f3e7a781d2b33fffc5d04ceff3935bfa69a7febb6d0bc1db0e5e5f7a005b36d1a7a0f91672b3a5a06a46b64c0bba9a1f52e3662d170bc8b99d393c9d68b383ed4ec152d7d1b447cdac2720e7ac852f82c1cb092e558f7fc7dc42cfe1adb21b6910d2198a98be0dceb3faf4867ffa026bdfe84f85cfa1ce4cf4017e0e7760e490145cb8f86ed9dfeaa64799f22b24fc22d4c1a1fc2c489d920dfeb2eb70c6c7a983e796e9fc0ea56bad9777f3590803eec7de6559148dd4df4dc2d4413eebacfb84f91b25ea644797f270f650b1b00019e0c8056531765b7cdfd44ad889d77ccf401caf73dfe4adb79a5d7ed3da23dce94906e7e8280e1ab1e9bc7e78fa931d6ddfd7ba9c8395bf12d0e377427d697da7272075aaa45af9c59403d6e93826791d88b2a4697f7f66f2ba8c4966418bcd9aa59f15724b64e1020730bcf2ec9877276336d59f7baa889d80df5c07cf90b30ce80a3109c533b8ae6bcb975dbef2fed299eab6091e1f0e5c4b6419edce8016431be93038bbcf6812e75ccff0553bf8685257ad6e11e5e17743a4e6dfe763e08864c57ac5d541d776a46ccc745a7b4c2fb5032395fc04e7368f262ca6c242f823eb247778ba90ef21c982f5b074bae270eb78814785850ae15872540a0624465cd9918f1b13c4965d7f27b46e4c01a2721b3e2d4c576f31bfc511c4d35c12b27b56912a7487e6b670eee270748a57747f6edb916c18ca4419ff8ae6c96b1324c789aeb04dbffc36a33d3b928bd5c540dd0cd9136f719e2a372d6521b4dc2f84899b6f896c6211fe3e95ba807bd552eed51cc01d1c09f4cd61782bdc5b566eba0ab45c1d99192af6891de8a30c330666afc716163c89d314df0863818782d9ae8ffafed49e8c5106ccfe4c630697e990b3346566979844e7f8049577000777496398dc1742628d164e5f6f2930a80454298c3474f5df4e2ef6944a268e8f5171cdb47f4c4c44e70e5869d75b530f5e9b58f60caa1e05f9d11fe208f6f9bf6d0f14776ddd85d965d632430e633774ff4b899b746fd9b34db9bc135a4f0841d50c81083030b5ca125624179ca7a47df04e04a2f42bf09153cc1452c59985bd914e5c8f50afa4bef377760a079162d5388a11341447294612f371c5d33c36daa7bfed3653c0195e121f6f46d9873822dfe9f8795d294d7b921719940ba0e34121467b23c3cddd52763758f399f3f00dee520098563a24d7dc1e55e8f52d569a06ca507e273db94127a87938d03c503d6cac72ba88e27503f7f26de91a4c568c5f35b270087872d32e581a3e05ca215b61e19606798a0aa6eb79a9be0163aabf336eea21ede6d3b19231832dc0052a0ed6d8b4a5b398a969c19d519033dc1bdc8a5d3fb85eefa3835b1afc2c8a5535ffd17914bebe761bf48044ac86361d718b6deafb5de3fba9f091facc63e92208d55dacfe7a208a27ee305803c994907473e2fd643a0572aea13dbb3cfb67d46d397f59b901633e9700dac09e80d49beb3df47ec4744bbc7a3e6744941c8cd329d341688e7a0ef932d18564c5d47fa8a090a85561363e41d56e157d1ceddf87074aaac1c50daa22bf0a392cc0ed1c1e5915086a84a6646987d9514e1b97e859ce47c24da6e4be230752fe00d6f23365df741ba574ec489d5728229fdb412faf457192f27824d263d252ddc8510b4de5fa54e9ef7b316f430f039158a2143df23671219985f86f4ae7b1dd6c7762f105715d7b2edf9d63c57511a461b938998b67ee782b13861c40101807d4911ca7300e38d84ce957ab8952fb65a268d4cbe0a0919d8e6bf661ad132f61e9e664f7cb978d082fe188cff96d68dc04f6115c5bab029aacd571c6f9b99df691c0606a3fd50314c10f57577b9001106dad16d3634fe8776b981fd48cca0bcbb5653887f4904303e8baedcc79816e09c6d30cb85f53eb3ab5fe2712cf0e20ea3e1e15d65290f5dd8e2c71b65a0956cff8b11a94b980b4ed714db108284d855a12331fe0c29cc0ab9aab0c9b86f0626bea8f69edd89eeb9787cee73f004ee1231bec7d2caa7e4c74f480e60565fe39e483b5204e24753841dec9ef3ec0dadd4e3f91584373fc424084f3267b5ffb8342ad6a683c05cc41f26086f18dceb921e16869d7ab86df4a17324bf586dcaeea8d4ff76941e36cb1b2f44c16b594b354e77dbd23ee49ee0b02e6d27aad44e014ce50a44ae4261e2e898265853d788f1e6566d5639326f32e0888cede78ff59a90d9ab934ae36a86080f31767ade41729650bf9c02384b45a320088486f75e15250147e4e257cd2f19e2dabe48e3f111aee54716225cbfb38873648e11b0e40b7a1a63bc1d35e6686ec19692367f1469c0929847021628e700f1256d003333d7f073837b440452aca709f984dc0627e55bd727c12a0b335a9d27df93eaf4aa2528bb2bb50f29ae86234a8818921fa81ed12179f722925ba8bd95d7a53a8bd35da33fc0fbc73c366f9401a6d001321160d100036b54420e4c02b9c213675f2bfbc09ff7b214b2a6d359adfa2da1d3f075dc0158806790c7aedd02036109e5307a315a147a70035c4be4cdd693ec8bc1a84293fdf8b515245bdd1d30108ac46d7355ecbba751c4e353d5efe09549b00182b5364816c53580dd5359bca472635f51aec661db427dc865ad628cc451e73c8f9476db7d2088799e00462d8f594872afbc758b88ba74780bcbe45f839d97df4970c43c9e5f647b384460f74397ea43e80f88bd32326f6eb0c1d3cd657558762acaaccffcca7012169048ae63b6df4f95086e5b6a42b538ff1fcf5aec819f7dbe12af2a1b0a31bac3846bb7624e9df23147950a9353fc533146258c8b4ad3727de939cf6b870ff1c99128a6c1c78cd8373d9b3f3fee9b4a11c574d6b429aad0e4aedb2470d9813393372df0f4aa426e216aff5dd28b1889fb2e4bce09a67c358cd411bdcd6a3c1cbaf6da2a8d7f45208a40200afdb1faaf67e0f8d70e59ce0cc1096c1fd3c177099b40bbb7feaf0b9bdc6dbbbb13ebc806e27e2a8604bc26b34bbf48bf2677e876ceb5512dcac21c3c924410e2a7a0f73ce5665f5fbf360ce56766361027e5f700cfc528f07450ed9f3653ce164b6a0ece0b29f5d8806fe70fae7ec2b77a94392418e0b1b47dc40610432d41ca51bf8516ae498c64eab24b9eab996d19712b155d349869ce6993dc5c53212a836d19e0b3593581a960b5b11ed926a3cabde312189d7cdfc2aa58f6bfb0efd6b5fff1a830968e83fa84d2ae0ca1b6e52fa384b5e2cdde8215c28bdbd716d9e4e67cef520ad0b4f1fcc9b1a8e4afbacfcce4688748406ddf5c3495021eef8fb399865b649eb2395a04a1ab28335da2c236d306fcc59f7b65ea931cf0139571e1538ede5688958c3ac69f47a285362f5ad201f89cc735b7b465408c2c41b310fc8908d0be45054df2a7351fae36b390e842f3b5cdd9ad832940df5b2d25c2ed43ce86eaf2508bcf401ae58bb1d4707828ee2ab72689516e5301c202693c4f7775788b75993793b071b6332443fad7556b5819853d32dbe9b01c9b2a66f1a340003b79191966a77225fd9061daf662a94df532985872a785df15cd3bace288c7527be24e096a5184cb55afdcfd73acf44f6a18792ed54eb32e71caaeb18b4a8e0abe597cdfbf0c78e052c3fe11ef00c6ce1b3d9026c72c022cc5360c0b5873048767412e12d142cef3798f3dbeb52881688d1485b6b4e9f3586471cc20d69cbb672b3bfa294d9ee7734e64246a826ec49d343fc2754ae2e74fe4007778822213186eac49a9806b52ee25e53a8bc35df0eaa501ced8e5b18e61c8849698f79dbc19a604951a2652b1d2a484f8c8f470a6cf542d036811d0393c96609208837a16e975e774e18bcf64bf4eb5d778924156b9c5f428995bb9884eb216f23dd241a41632c751964d4bec02990a6f31293a71387f0976e32ff7ec06b02a5faf408ef41e7126c3aec752c85af7f5187925d686d9f3cfa6dc0af5d4f3251d02d37abc8770b5884391a66e7a1700087bc714a0280ca8d910fa794df3a27561b440cd54be9b845e49f5571981c535b701817221a54f12984db4f76aa883158acc8dd4d23a1d422b5f4045ce7ff3fd73325ecad5bf2fd59fc5a211d66413aa1ab4111dcf6a748371ebe91f07b511ebdf96b59b36a61d46521128350bc6e29774135104a6d01fdcc488763f5fd1ad755e971c4fbf2a960951a8dded95316e623962e425f2fb9da295bd6e233146252e72cbf964e99d3873110539b7ed54158ecd1b30fe2e5d7c6967e347672693277bbe9dd387407e633802aea2008e7f7691c1a4ddf9d3661ab5ad9288779a4912e1949541035e5ea4bcb91dcd73e334100fa9b821a56cb6170be953a7d116c885f4874aa8859dbe8b75a6cb126ea612605cd79dd28d64bdefd0adaf2c002691ef291916a07a790e65f75e4ef77d219af61dedfe371e55fe13a86cfd9b814445bcf3cc819f4e8adef2b64212031bf02e3fa75f31e5e4aaf710f799d76ce0ea547de914341b9e4d908036e4acbbc7ac4cab9d9dd1555cfe296642d6b5168ba33eb08d72769bd63bd3bcfdd877980c8086c8654c650bf3aa05821e862f3f0de97 +Output = 02abc87550d9cfa8aff504fc39b31c66878683efc446ff9de3ba69d3a1483464 + +Len = 42736 +Msg = 33711b2078ec0b6b872c3e3a237c2251d1dd04dbdcfa32029b5e5cbef6e540ea2770879dbedde9b7e83798baf029dcdc06b9fa5a40335b0ede62ea44d206beca8083f946c2d7f0cc2fce8cb09d79f099e4dc5bd7e5e750f7cba8f59491beba70c5113ac38bc066d2e45be0c43053a5b1f2aeeffdd4ff5ae4eb9645553bf47b047e8213bb218294f090455d9db39e444cb8987e711464bffdc495a130d9904aaf333d49d68d03c24fbaf4cbe42d441591bf00cfdeadfcc76ce00ed3cd72796f986daca7bdd62d3817ead0f240a72c60a98e4fabeaa8b1bc56c767a1d30e9932e9b336f41804e63d6fa841995a283e6dbcaeeeda3d0c6ae4e6ff0ad4ebb5d7dac78e43f78e20181a7f7daf8ad9b86283f1a5432480e10f8941125d34bc701bb15c853b79c830aa1870f0828b665f80ec70fdb8515b2f87f19288ca88ef464dfdd02087426e3f847d6a8a2265a92680ee623db42875ffbc64ffe7b79a2b4056074be78d1a27528e9194d1f7e049144ad2efee9f727758952cb0b98e3019651c17f463b6c99b73b09e174f6ac3ef32c7e03e97e0f70843fa90ce85b61360bd8875f31b6a1673a9d2ea1b8ce1d84287dd5f78c0e17fd1c7d3d781d4970ba9508268719712cb57fddcbec70fc5e5eb1b7599c4f209d27aec084af02d99df9c27f339966014aeee75b66243607fb391f678d44bb3c0b7aaba823144182459e049c13189fdda88e11c481eb807750add21cc59348e6ef8093a27d4a41da03f1ebed69673f6ca20d7f77b3a4e8c11b177a35b70a8087b5b4073e07a39c5755afd8f18b07bd44e40791035fd2c78ba7206840b60cfab50a9f76d966c2b970b7226c371c9ca1ecdae6f6e5fb17b53d71332ccc673d0fe53a9d5312ff3a11ccb4f4062c827875caf336019e29c62a3d25da58473efd489ed2583c69555c3da1bb8f4750413db175b97f51aa4060af2121804b4fa1d02d586e3a934aedaba5b6476ea020fd5eed53ba2d5788f399ac7ff0cfa624345836987adee8464ccae270f52c914d0b5e721b61ca83b8a7c3bab01002d9835af7ecd5649fabd9d71c6c482113ab02ffbee8034cc186c7c16152580be455dbaa21c8a5d7f76e743132bbc277ee4e014ee2d7c1d7bcb114f504fbde40cebbab968852703190a0b3df80597656070ab67d7c99cdaf16935ea7212fb95b3c7b51b47e02cafdd5d3073687bdba37e851a10feed68d1f69bdd35c48568fc7b8059c6885522cb95185ecdadb5124ba1cc33f8abbf696b520913188dd18b7f2bbeaba3720e90be07e29d330edcc3c491ec000526672610cc5ade7b171dec878d2bb59a4f30fef0fc64f68dd2187776168e8920b60e28292e364746a892147d676d7e9465e6f4c93b4670c34290b5c9f85ad532a5dcf51c3e47546189588ac7822c0e77fe56fbb18e2f14bda66d0525fef7ec2139f81753c5320fb40296d6cfa6116e2d60a89a10bbc7e96446d6eff2f20ed6d7bb8b16348aa280285a7481fb9ac3a59cd3055a4e8bb7f79e69f4fc989a469b3a72bc7829573daea3db1b12b528ebbbaea195c2d3c6a7465458efb37fbe484434a8b4c799f2aba10ecbb311641631b949107f5a07343edf6f5cee9d0f28bcd9aca39a8aec249561527363076f2d3ca6576aecaa539c25c9d5bb1940b19f486089ad974a89b5a3f7551b547b4035b58abff5033b1dc8040c70bd9926cbea97e3b50cd38eda6d7c6a010baef53ef6436d69faed94ce7e82b126ac96d7c7d24f69170875de4614c9c23d8a98fdd1388f583dc0d13dcf8747bee1ce37da0b1f19fb97eba6c235713107f0e13a1c61c241522391d8bf87abfc3e886da5b601999ca01dfb8dc30f4d5d420459bdd9565d006403b329a15db1493603cf08f60f078160918253683d70f47b603849bd19d17495c56fee6bbb63d5b03a3c871f9f336f43dbc61f3a25a29fb8ecc6054f10e646ed510d4ca6088749b315fe4abb18e30f52e4101ac030ab0603904d1a17a4631e748fd56dd9abe64c487c5c7a51e2e0099492a76b82c652d0633413b09d3d12a333680f798c0e488776579d3f6a65f20412ced53c085060a6e1c061ed6a44b97e31c20297479875a1458e0ac08d08e0a8d281e0b2db349e2f831c7ffc051f21577687f7f093b13443bd09eb264236749ede9111f782dcd1145331b503f63812d40b9d36acf7c14e15e7b088981254748e3ee8b03385aec4fc59e54b2bc6f654a0f7ee07f2fc308cbeca6c283f83cba91ff86c058d6d143e909c21889bfcc0ae614260b2ea2867b4e76e2314431f03dbfa1607572ec075067824ceb67c2000e9c0f5dd7ebe06cc8e37dcbe95cb6e64d2c79fa0f03e0939e55bf9d21bf5ba1dcd64174cb5931bc8e4571b26f1fff757552d9c1e16e4cdc7a3e12417ff2f537f22f6b0949d94f1c47cee3341700842422ed4146b1248968908b3ac83ac51728eb01dc99f7ee60f261fa52df95c0ed78e23650f6e2c93ebe6db7999006984a0b23f826854a2b4fd5795241035fb383fa4fd88960fabed5546e6daf3757df0645396cc989b502444c0a612e4dd97af01ea83e4af36d97d5b11ef7fc3c931bc46d97ea45e5ccf5e6bc81a18b2d8769ba5ca7f2265cbfc6c85b0bf1011e6cd11ceacbfb2c47f688bfad6b8dd8110e023b3abb7e9bdb65de15b891e34e3b399168534219dd1ed63d37954490a596c1f6fb4f5f5e2c1df44056605d4934318dcf4f2d96c0e8d8c085d71a9954642d47aa8300fffb5782ff8002d8ca8d638fde0d29e0467ac01459e526a3d643a453038f6ad639d09ea8cc3f9388763a5ca4aebd90f1bdb2034016fd9ea787e8d6968a280b558998620dfeb18105ccda702e74630cf8890112ea6c11b7bc2abe8b765006fcf56bad52111b9873c75ae85e7bd390166b14e28f81ddd40a483b2f3350d9aea84c5c79ef508756b4438cee782b20b715a00dd0d994f0b6fee235c55ed49b71a5a0e8988a5ae67efb10ff573d9af06aa35db0467192393d0df0a71b7e702a027db97c83c38ead7380a61ead4f79d70d47eac8cde8180bc8c01a0b9c02a1e9e388fc94b62b6a30c71d79676b0e1629216beda3e1bd850cfcbdc4efb19be87f775fd0cdca128c34fc0a11661b0a1e8b4997ccde0c6267a14b4f67a0169ab23f307adc941a19531e84dee48737b3d151e8540ed3a8774e6d370d98e9159f9dcdc162766430b05d51f41499673bac0d3170193a21604c97c54260df07491b198f8c9f44daa8780973bc437672b142f09e835fb543ae82d24deff180a72b8db4191499be43ebc0f5f86fd42246132949fda4a026b6fd9a8c6bb23844252767dbeedbea495c753b9154615f133debbf67c3368304f7d7f434a31b9d902de75a1f7544f98c70cf387a1c434ccfd6a585e8a3bb60c682c84059889ea9db1dc5a4ed41024fde1d6457feb48805ceaccb1d3b03c5d1e1f448df7980bdd5ab615d08d3d68665e4dedf1acdc1a242863ce6d5dd67c85eeda8c451f33febb977b517d651aa33d4072199e135a8146b9ce363404e444540502cd51874facabdd675709de530ad02db822f4be4ec70f9594cdb0d1c3dcf5ea00cf5c37d55bd6b3e2f11d00d0e548ac87cf9db4a132a6461e5b87cb598c8e253a5a0c35ae5463a154e561d47a7ccc4647e93efd390b3354d3a861fb8f9c483f1a36098bc0df7b2f25fc7c6137168581603882a20099e0451a7be7674e534abf072afc41f54346e6befe17aff0fc9be83b840eaadd26d3a35d9ec0197cfbbd2d69008d5d34caeb4d85b3d9c78e7735003e958d1db7f834f503d7951902dac812a77e63e964ba93ede3e36bb0f7cd7b53d233a50378582cc474ef0e6dc93894f42b6d27ec6f5c654c41557472154696686025fe65078ee39717aed21fb85f485e5c94806f3cf88af405d29d16ce2caec74e34414a4ce280f656db8a37b6960dd5a2bd1779b3d6296d99228ea30cc5eaf9052816bb2f9c2b699840ddbbad240be365ae9312bc3d6b3d630dee21b65b7385eec924bf98030e7946a374b58452690f0d309e423f7778eecd5b6599b43471f370de145e6f604eadc6cdf62c236850e1020bdd1224ca77083dd39d12ee980bccf2318da09cfb168e81860c2972aee7e2ad07fa89537f90111d3e3b944bd16996de88388e071c8ca3df955eb3586b579974ec9db0b5dded93d464ea27b626b4dc9bacbd2f990bd87449c493d2c0e9c78fc0816d8d302eb315ca0d50d414de14239165c38c380f238925d9548e8f6e604afa8f132badb80d20670115a24e42b0f5287af2abcd72956bdc9d48f0ae43495488de368f15c5213b1307e29a4c9ab1d9c8b5f496417a55a1d7d818ff05b0ab35d4367fc34e9b17ee36e95fc2f62e3e58d9dc6e557a708cb37d526bc47cfcae73445f96ce428218c1386d3324344580f9c3b80bee629c612a35d2ea45fc717998422022b8d7c44c3d815c06c8ef289f44ee11706be045fd8c69223d8c6b55352c3543cc89f7a8dae9797d82b40d20c2c1c3af48d3dbb4876480080ba1b3f109b5858e3b4a8975ea4d899a4df2787311f9a859392f3d322837e24dfc8aba8d1ebd99ca17037574a6f217790f8a1669b57306d9eb86ed05088ff6b9b9516a719ccbdbbf0abaa3ed345f8de37182d14cd6b746f508e0d3754ef32613eafea9e4aa68b234ba79fb27bc1c51a01ae490629b4ece763546d7cc23ecda253797612f701a86f2cf47646c67b2cd78b4b83bf52dbf08231cbee150ae0178b54626799b176cc0c2f22dc9025ca86733e404b94bb4925ac66553d94b18ba698cc2b2d96ec7e3c66acb310f32c486899854d2f4ac57502e25b80aa703889f1572514469f0a70901b2015e1f44c7d59a71ac29d3623e80eb0abbed33c12739e42e9be3116be065d9643db9e1808c1c028493123eb492aaf93b190365cc1c0f3f8a4997b925997fb746264c3d2e3ce3289ab2931de97b56c0807854266e90a98c4c03684967fbe00122651e1c95feb3767ab1b7584a200da8a381e95cedab90343d705fa9792e0f21bea13764fefb1253ee3783d81faa56196adbc9f192944ba0253983c1a359947de283a0ffb15b8b27bcec0183b040ba7b9f2efccba5746237cc06dd792da5f87f58b260d3f645a35bad7a3842440bc03608248bd46e725e60f97e73ba5e39c28de7d77fca15e1e455898630fe2433f0b26e637df234b7c68576494f6a803e7a11569a06cb5558d57e18bbf29d99dfd2579893da0f416b220d09107973d9dba9726ea2fcbd00d2fe3e21be8509e937ef8e505dab12dbb4fb607b7bf7bbb239d618f798698a5c76e8fe6e3af1285c64cebd5c69f7e34bbdd7e69331d32c527f896bb9235519b26d1a24c5d53fe43c8ef74e855ec66ad9ac41071bdb15ad03d64ad37becc95249df1c1aef377623cfdcf3a793e4208fccaabe2bd920c3250b66a2b8079bcc1d6bf37746b4099ecf5f7749324ea50e3a6eded8ba97a9e77eb356188223d767625ed1b212dbf3c0cf328781557e4697530571161c1b1d889f43cf35999848a1096ba255e52e9ce20b9033247aea72c4c2da8a00b92d25af7003f87f652d9782fada8ee92673ad0f6bc3a3b9085bcf9c6f35521ff9976963d93afa804fac6c121ef3bcf53f73cd4cd71200c867990527425df1fa452090acc232fcc0bddb6e5a5bfe550197f6a5a337c472d9fe6cbd6d249c8e1a038f4392133127c6188446619a42809596c4dd1b73222075379c9f77fb3851059dad291eb480a21ac96d9c2fc408663aa4a41cbc7374332379f0524cb17a63457942eb578d679644365f17cdbf982e77295f0a8f2002d26c2d317ff42caaec6201163046872d2bccc9215f42753a01d58dbd509b601326d7b927cd78561013e29bf0a1f1881c883be97d1d96cc3607db388696e91cf057ec869ae5df15f4014fb199e562797ad619fd39f9d2aed367119382837f3de28c33fc526e31539dde30aadaa5a143903cec6f1e9afd025a4aff0479c067a92fed3583161176f754d10eee7989b4cca6e33ea6f4a91fb013d72ef432f5a94a1fa37984b076b7e9610270e53e38a5fe04f3960a83cd419f463725cc76c94b06fcd68765e644fc110c9adef7f35b7cc0f1937d0392af69b93b916cf20de457c70cade89081234b579dc1e08c5e993ff9b7eb7af9ebf6a2e53a0e8cd0bfefd4749951236b49bdaea35b9eff0c499bf8939c241554544bf10b8ad60ccc5492cbf5e9eac06005b72cdd8f5ac2df7a09ae75e966d67c965660147410745093744332449f48d67fbccded811cb26db98a6a87e5d846da79bef6e640e54dc3453e4412f49842357d729abb790d551ed0c633b1daa3ecd4c42cbb6a367c1d8d3297d78040fe36e4c8819a2fbf55365b856611db0eee50d34147b8889dfe6f16222802616ff9ac4d2892d6329a1bda8aa2120cedcae2fb40b6b8f429bf92c8c5dd99cf9ecab02dd7644d54aa5487cb15ed712dcf56a77481ec267733e261b2042a91461f994c40ea46591e8133c390622f2c7b6afa644300ab3a4a904f92b43bd3b86ecc24f46eee945f3c9d80f4b1db2feafea4fe42f123ba9c74264e4e57d09eb74f8db2d13e4b1706b4e88245b6e6b754bf66a9680554e3f3fddf26bd212c5436f14b8c0b386a97f7904883dc28ed8d12c59945fe07faece7eea121069cb7bddc5decfbc9e4b1dcd9d8a7c9e18f577acb1923182e807c9e224e56855250d9a0529a5a4533cb89ad5592ec9d7d718c4627c1ee6b1ef744c14925e59bc8c4fbc640b07bb272745bd313c8ff47d758f4b9d0c7e085f6f4b91d077c36ab918083f84ca8398cae678d17ba81c80f19cbf79b6b32e3b0dfff4379015a31fdd40cdbfc21897b190e2d893ff2c62e3d6853fdb3a30bde3201a14a9fe2c7bed8baf1699a655b28a3bb4db513659e1c18ef776eca1d59b8548361365550cbc5866bb6979cc1262a70dd4f7b5db91177e9d3bfb2a884245b5e8dc87064f36f2e4d0ee3ccc8dcf368c89bbc42e3962728f83fb331157e75ae98495d5e9475bae176cb006fe85fc9caf51d1b716ea5e9178d59dc53d9b3539949dda869ac7bb5c648cb96eac2f1b1383e8cf472c68d5e2cf049c181bbcdc604bb7131f976b066c60d362ca41f3bb29aea10d0acb3f78e506838ea218571d6d7342e8177b8b9d7c70b344b05c6e4d4d842d03587fd8b82693f4ee09dfd498cfafd3b1f493b4110b28ceb7a7581951fdb8ef5ae6b6bf04160bbb22a5becfdef565ec193d9c7ee1770d686415c16f69c8916a6c0c0c7cfd31e258d50c5193507d19ee8668e2468f6e8312b28224eae52cb210cf5eed7cf418ac506db414e98dd5407d71fcf1958b501e703b82ff1664a8af84ed45d6499928be246523951ce78c8dfb746066f665aa53f3578ecc7c58aace496e57635d4ce0bc5743d14eb80e1136faf639aee39efbb80e9f1bf97741c1a2b09b19f1429fef1b7b9253ae4561e1fffe8fff35e7a7b2af349a9112b1a07bd15d1bf41c7402925fe3d901304f739d2d78aa17987d007dce07a2a4b4960547cec1697c517c0578e +Output = 4f58d0c9d678d9144ef71dabb6185e185b883284d29a3aaea7d7778bcc5e441d + +Len = 43832 +Msg = 9fa7c9e675c5cc07d3a096cd4f090aa56c0271c26372616f231de3a496d2d4d726e68c1480e2be5097799ffbecbd4bd40e9264015c62fc5f1212b51784352672a48081eeca7e7391b5854c7dcde960c5aa6fad7fda05be1adfb0cff278c53122225cf099dd02b47133aee57c77f7121f4b83946364c36e4992dd785efaeabd90a662214041d447981bdbb11f744d298af6b560d68304d6933183f983930c91633b7a5b097c5ef4af75f4f98f4a556db0b5ed5bffbe30bca1c6899a88ca937644e68ce81c1807855e47e005f38475a6368f13cb079dafe91a58d7a39528e834dbb1800ea29d36c04c9b891d74a7179bc78d10f915a8e925a7f0555cd4347193cfa33e16c391556f2278d6893a3da21509b5ca2d52684737f095eb0d6b76975bc9c4af48a67ecb5887e7af906cce7edca4112aafe5642fe99c4f81fd8276c253701db9eb74eb004424eefc7c32e012b841a918c6f7240a015426ff7542bd5b446db5454954615cfaa198a593b5fdc87188837dbbb0314148bf234dbdd2d2c8f667953ca86f674744a5ea931e1dac07ce20a93fd637123a86864d531d5b3d733107c38451ed8529e8d8eeac6492763898b223485fb54f5f8350adfadd0587c2bdf549078cf5436aafe3abd9af3be1c197e5f77e9e51711706c6492844f7371f61d82faba0af2a72616e29034540770b93622fcbdb34ffc9d9902bc69b5ad5f1e6587b5ad744c1a9c62071106fcac07e54d0d3165d8581dfc2555bbd2a55e9a0151e37fb77dc9078a5a28aea75014382a1d8e9476d6d80c08abddff33911fc94b4d26a76c99e2045c89b7c779f0c888044227b45531483d4f972c15210b695348b1c1db315b3f879f5b450a1351317de035590fa57a11283d61909c1f76b3dea64a25799a343a17df5950d4e7e407906a719314dc13db535eb5dbd2735587b1e050f2012ba75a1b890e5bb68c3b9355ef8186526d80ff552fee3e76e13a6d73637098006a37182918d4d63d64ca6d350bdf7346de5405942d8568e7dd97dd99bc238805ba760cb72b6740b806130db43c061a60a30f76a6d415cbb3ccf040ab56e4627fa0c6a05c2d103be4e4a7fd69fc7fcc4e6015dae3c009d75933c64f1ec03d87ecb1ab6b7e8a7a181284eba4ccb9b7095e7a09aaf15dfc3c46a6ac417a948998bb61b6d694e00f75ef6b709c331046621f654d5f561a473b0a99f4d0252062e58a455b6a45ba4ac5ca0cb95c538c98671fc673606891857423824273c510542ed7b11baee775a69830ed386d948b4778cdf1fe66cf3031781ff41794d0c0d7b502597a0d20aebd6dc29160488c98be27a89c50daf092d5b76e73d6bbbede6818b882f91d57c209a6ed7de365823176e44e0a0d255325dca27d66227105a57fda68e21b58136bf5e42017144d3bf20c4f1cefa5ee8d55d0c9eb5f6d2d3bd2a97a71eb4335d9e90c95e90185781036e8b893a19d9f05cf3cae36d42978d7d25f6981f3234f11d5d84cc6a1b97e958c86c150b466af32ee8acfce48e9cc50211c3807be1dfc61cec369479c22b9327f70f9c2bc9397bb30359f304220903b4b5a568190a5d63010688bca3553b07d6c41b2681ea6f0f530e7ad0b44507d0fbdb4557e1f4d5503573224ed21bf1cecff439bcf5f1343876cfb699db40beb23f494a55bbe9701621fbab51ed5d736f785210646f25af7c8410b658635b5533e8c85d6b8f2f563c2c66cccedc63e9723ba54928d7d00966e597211433def4db5e20269f450fae4abd7b2ccc87757c607fb48b101538697b012ca0d63311c53109194cfbc5d1a0c93e037453d6db53bfab487f2312a5f8454199dba54b3cedbd527b7887f7bd564016c74b6cb1dc981a2929cc69b461de4b0ba5798963a697079f0d514ac41bf537ad8c5a1d00c270f6601f1beae4b34215c817238a6398e9985998804c1232a8366b1d4870abd305ddb8f214af8be24c2ce1b880b1335a0bf7e9e4ac95cb4b95c6b841be6d9a587f5699695ebf8f372617bc503905bc3426acb5b97e2ed5aee46efcbf641bb59806ea6b4ea222dafaf55ec3a7f58ee46e624027df9e1e1aa3beb79f60e182e5ddc01f966787e15273e48a5d845d55944fe63aa61db36d80724b2809ecdeaa106dd880827db603e1e91822f1b01861b520db22993d6523f162b249a22b029c1f9174929857d6906ea6bcaee9f4cfbb2d2a68816a055e4954bc1ca2d3e4f65ffb91bddf3ebf9091e0f0f6b6ac162a69e6b2b6dd803e43e790c9b0bc02e161fb8ab5daeedd7b8c0d2110eec3a2ded075c603edc143b0bf038fce971e99e8ec79b645f347de54710c184ece5c33166ae6b76434b21b2278a73816f850fec23fe066883273a712e896adf1bb0ac7849fc5a01cb33a705d16da73e8fcdb9b37013882c7bdf9a27d98b4c843df54c6f21819687493e0aa2a42a5288bca46d60eda89f14abc61365c2a6d518a62c298267deaf9b4fc2c314fa40e3f488c19191174dc9d595834ca7945ca300f6cdca5e875413a2415a76e94e320a16767ddcb0674386d3cb8f8c89a92d14e1a232b5602a825130b07d8c7c3a7e03430851953b685a6493a06389788b88c91f2b236113abf9e6cb3f948a5a29a58e1ea0e551be94d2d199d67799f0b6003e2e13f853f5a62b42d62147d71fb628f91df2a198a6674d5c5ab054548ea323d2a2df3a1492838703f6180019194a78d2a55ffee08f7a3a636ad0823faefd5424f1ff511956dead988f8645c6f35125b9595b85bfd6282a952ea989c1de0f21a3bff6e5d8df01ff7f16ee81471a84a00bbe77be9d170b8e502acdb37198630ced415850e987b80d3620d36b301b4f8848392701eede9ee622f39fc7c56a9386404a863ab1dd4b574c41b73c18620c4f0d4e0c185b795cb29bfdb21f33d11b1e7b1022fbc86c465e3fde1cac468b5554b981793a3983cf8419cd773253485445cc56912ca3a133826f7a761460e3b549db6801102f9a51cb2ac781999a4cf99cd2726345ca189d84798b560cee27a68ee166360294099e085d9053bd7f6b55741bf81bcfa23eeea4dca52f0e54b393a47a008aba0d7e0ecc109c50368900027c175c1d22c2809194174c73911b14272af3cb618f02442e76e260197d3dc78b0543130a07b18a30a2a7e5d62dd7c5bb72fd2b7cfa09187799517021fa040e49b02db144b6e5b846810cf5993ce154db1ce4a51f93884764b3dc40dc458260d8fd35bb6fe8e5974d9fc5106f66ee2df09948ccdbe4067d8056e156dad82f5bc35d0995edf617b3b05f4ebabb0444cdb678980734541a1754f30f26804a615b735007e54167127a09603858fecd8bc0772b60f8ab7c39a15cf8c4348ee4ceec6366cf0dfcc46c66d312e08fbd0b3982dd3221f5c3b4cba803089f05395fde8b3e01ad8482966c168807f5a37845c491332d5992ffa66697d1830e1d221406b45dc141fd8545b7e5a2bfd648b315b388235d8664c1c980fd63088ff0cba9edf43d262abd476ad670adab00e3fff39cc4187326cfbc86a14511f99304b869eac76690a6687b6e2e34234a1419a157d6c1aceeb95832665e0b78d6b5dd5b0c83aa64a1637383d8459c8e1d7e3e59caf82d3b30cc82e5f10dbcf24076ff45ea4f19a1d8d052e321b33658a5add69bb587535dd9ced429bf46e6389744cedb9bb3a1c8978bab2be2dd8e1d733186b9bffad08f5a3eb080197ff3967bade0be8947bf236de3d0c0944b0046f697b36632c9214a22aacc8ba83f81b64e20b9513b71de5cdc776843ae72396fb04ed113c678c208d3717caed40bfcf28f2bdd264ad89bdf63c4d627a9f995e220d58434e3903f65dd51455c354be1d5cf5db0b01fd26425843aaedf0f27a258d8ba315c0295f5cbb098bb264495bcfa8f04d89122f5b3c9ce7756ec56a2eb3e386b6cfbbc0081b4fdd642af7a700abb3edfb91c0cc9272692d962d208f1dd0cd0779b9668466fbc0588703a5f4147b26f3cd6e325b32ad681ff5722ae8b044f314d41aeaffe1c3b782dd8595baff05a80bab669264a3b541c47b850afd4dd6fcb8af3c6eb9e23ddb644cfaf0802812e23c7dc3056f4c529b240eade9565e5091f8f2651b39cf2fd505bda8ddcff9697c8e2bcbb505974c1e489734ef7c497859de85de190712624c6e19d8852ed9d41d099dc7caadeb6a7337ff6043f67817fd7150ef8fab119ee9a546d30f2530196db6bbfe6cf0b07542f92c7a0e4c51f424b93bdfa5ad36aa54b42edea43c6701169c6ebac1554f36329708c977073ed977bf2ff88596e85034a2b7446cfce454bdc39c41f4642e72ec187a97a7aea58c9d8a128054ee8e563178cb4b8eec10da0d342edd2ba5b6f41884692ac6c9f0d63f22cec03d3b9285f43d513d3395535aabf60dd38ea14f835de4bfccfbe0867f0590490066075ba525f93160827d169e42111f6e47df62e6633f63c26e7ccf4f96db6d88f7d9517e6cb553fda42ebf6c788e4ef57be755e6d39d3d574824330e9b0b209f193adcd76f789f5bc030b88df57481af5542924b550635d2b1611a83bb294c8ef3b1647ad94afdc4ff0967c962cba0e5fa777fdd9083337ad0baec779f3cd89eafc6512d5033557e894336e7679c92e0950e86632d1b1f99ceb711b2ef4cac1472010bb97c3c8fd285658cb1abee41e54c900ea7d3d7e175d2e0f2fc5262b03b67ebfae6076c93081bf8d0edd7c9943f47847e6f2bbd615605bef51d7084cc5ab30b877b96cc496875836c6492357334af724084ddd888868fd883dcf2bde8b881e91842d462993ab88ec7de853bc60eace2bbae902d3c4c97b605028012ec9ef70e170166386cc50fa2492358e27513655d57b4ecc666ef45e1e157c18dc0543d01ea81f756a852a0465afab233698c036a7c609baaefb8c2e081a35e354c227c4afb8a2dc237299302622c3b3488c0ad92927842e1bdef363b4baefe127950dc72b0e4b086ff92115ec9829cefbbf98c5c01c58c74badcc97ba9404a2d2d258400735629aaead542e3f7c17d6ceb7dc850320f1e6accc6a1270220ea8d51ea9d7caba94034df394d1855b485b2fe9688f68b1ea3cbddf7e9c7bd17853acee84e6fbfa59c2ec5075a8549225dc9de89f4d775b9c19fd4b5c7e444edc33d8a64c0601912e69f868893b33cd2adb971a1367a59aa20ef99496305fe6a4e9d6fa91ad720b8c59009011e29978d1c8aa12573679db769c214fbe6b25355cb6264fe855c3c5fe20836bd236fc01b5245545cd627aba944212d127873ab78e59550aa2978d5cee40ff503cb0e2144f8f2748f8441e9475813ccd840d16e99423d1df62db253ce74ad2e1a3d8d20d0b697e807a83dc15b4ea0d993675304818a62b22aba931f273aebc94ba2742786333e980968a49aabcdd03c8c1482d6f8660cf78ef7a29fa1ddd0aede224c9d2f18ee6ce0ecfddb017eacdd0b70e44ac67e44d4690d673c030665c61be49cea930cb04cd35dd0ee23093ba457a303c9b279113105236a5e175cb1f74911ec757ab88b2029e3a63ad915867abad467bc85ff7cf6a862346ea388bc2ab2d0c5a8acc387d02ba50527ed4a93457a2c968907ba8c0b9bf24cd270318e489c4aadeaf0d6ac4421cc781d25526cefe0d21a9a004f495826fa3af44600303750a72ea410990365537f84844bd2195e34ee7b553869bbc690a2873bed9da9e1160ed03cd2b3931908e7b3c42575a07cbeaa3f2477aeeb3b2314ba0e2caf012c35a71a1bffcd6449892c8c457ce00b2fc52cf06e84c6e0a025755bd7ccde4002f79b94a95f8e7fde1f75977017be6261939c159a285aa2dedff0f2fd96d46f4aa212c64eb99febbe10ea5dabc0b5abf96e2337122b123adb99aa08e84f3696ec7f333973d6a7b0d3a4b5655f3d6df0df9fe9dd3d5595af819bce24ffc2afbbcfd627747e7f4fd70325fb37f5579038fb6e158f836d8c09b72c82cfacb6e5e8ddef16ffd97a3f6738d9e75cd3d6c38c3522cfd64c3d9e516495ee9057f28024fd112763ea8f1e68590a9e5b6382b0f375054138008b748e721f3cef663f2978178682271b8895e34efe4bbc0c23ff75a35d903f0720b5c8c80f9174426588ea149450d3d32c4bdefffd14083580581aa773e773cac40a074eb018a8532c4485da84b9f07942e964545121c6486261eb698f6c5baf3e1b54ec49f612015c054e529ee4057793167a35419b7eac91c5efd1f9477f1f588fb68a21563bb5bc754f6429fa9a34e77b2a8a14aab9c9d52a2ec8f8a16783d80f3610815ea9d5153a8ff96f22371805bf7b3b1375fd07f639b134d5a29c418742db66b136e6cb2ffc16f7b685658bb78b76308625d5cebb997fffd971a5c32dd1ad75f9077afdd264ed48474aabf5c3872151b5e1c686edf2a00f49370a6f9263b423a1f9ebd5c6191bd26a9a92bef25a8687e7d25a9754ee1d4e701b54af7da1f959f033c3b9d2c4a87f669da14e0cadadb865201869b833fda295460aeab83283002fde8913c00d9d35857a600ed9279ccd78f28864e16948f5ffdfb48709c05afea721c64a569b01de0d5a576421715daf667033f19739072ef70fdaf039f0873d9d2501c65d17dc6147640fb9ab32f84477c4a076a14b4135c5fe058c106c11a35c11c2ef9c2836a67bc10f7640137376f513575dc846fef2b1d3bcc355dc001a2b0e922ddd771895f198df01a8bcd82c2688e10cd4d2464d03b788fdd2e75d895144f7e8e6ac8916f01208c4abd42f4e5448c5ed8d98222e02d1f0a24d362fd717da7b88806e9211c157112510047ec3c57e8b66ba40997df74a7c1a8f717eeec5f9a67573653a6ead8e828ea1f3cf75c150bce12572b4222a49b4ce603f52b5a3c8ff17873a8915fae0e4662449294b92e6dfc594d57a05e3f721248748b414f8700ed7849587eef074bd1562b0952d7f697c7ad011f30e6a7b4a85ce35abf30e185b1b311d3de2d973980323ce1903cf011c68a1cf272606feb75afbae403a2be96f4c577bb2d7fb04fa982f4bc0b5cbd546f7ceb71f3301a8f109d75a7ad1980bd1d3be57eeb6a0506d3c4dd08f2cbb0e828f2170e21ea1a07ffc2ae261a19da509162e57fa680e7e78574705904ee7d3589860a378d02f0fe999bcedfd9081dfa07f6f26ddd48db7a451e391ca04964d517a54f7ea30f21cb84a542457878ee21d75486a9fe167237792ea1d453711a4f49dc5153f2534f07376bc2f766f0ad6085f83cc4979e2e97b8223500acda1ffc9697ba47f993bb2a284bab5622e3ee3eaa7e6f3e2834832388958d320b08c8659473d4db273518bcede175e24ae722f49b43a8872e6df2535104f4d8fc61a632b9dd4b8e19bbca37eeb9ad4c3d5eee5b0ee4632028cf0ebfa7dd16760f995bbc8d4098c14f8c4213a130dbc478df92ba4bdd49a985cc2ab0f3aa6c99a2f43b9b655a2715174b32e8abe36c1b9bddc29af89aa673f3e9f8efdad961a45526e827f876711a2f6cff1f754df89204de00958ba9142fc1acdbc4b4069026a495c41aad122110e676293083dcebc84244af027b851d3d9d8955c815ae62b0ffc551cc09d991c9dadb23b46e2cc03ed2c6508a5ecb2c1dd613f962762d73a3f53a33b485295d858b1081237a9a006644c787959bc7cb5109b1394c6c202daff368dc7ca57deed465bab4065fb146cf06cca6bcc9176567b6f597be5e12fb1598d5ae8cf163c047094e5ec5841eedd9a74a40584d46a4d25c558760d2728 +Output = ef3ba3f06f0ae0479cae518b27b6d2176a9abda2b0d371f2635eaf694fbd3345 + +Len = 44928 +Msg = 0cc722d81343400c0add2f47852e378124a41e360a24402191f4e2483cd9c338ee7cf4925912eac6b83cd21fc12c2400d50a7b6d7b96a4cc0c0ef4edb052df498846c7872d7812455a037f14e5b3bac4f4692ee36dc11a80aef3e7347ff7b96444ed44c078bbe10f56f8e02fd9092057e789dea0c9efcbc4df6a6125921076118938124420247eae16e49d7785767f41183234ad7866de20073d0ac7d1e541d8c0f0d91b0ffb11aa008e5ef5d244ff08ed2cd711616e7c1c8e328c2224bd40424fdd434e2b88c4897ec0caafa6b9c736d03e71d46b51cd41dd128c3e74e29bd69fc7f6e45e12bdd5f74089afeb1f00522832a7ff8055f8165aa4b524a79a7b1c18769ae58ee32415d3d744fd87bcd1e55dce239887c426246eb2acdba72e089d22b2d85aa54122d2794da39f64d96376d7db8daa67e47ef181021c6b5ae669e02642584a8a75df93536a4d9f68bdde8dfd208c3a0afe2907fc5eabddaa09c76e8aefc1bd25c782e0c8f6eb047db269b33967c95257594eee458c01387ee149cdb881bbbb5e7e334140b824d78afe2c6ef276ecf9363f162cc654c784bdb4188716c0f04d1de41c3f2379a11f76ea504991169c388ff6a94be680a5c951cb5b240e73057a4a3f6261da0109e42bbefdc97c0f81164ac72ed30cd64210216e3b2a0764a54bcdd83030cb18052f90c25a781c29449b50facd4aa220476015e4e023695976c68ef7ac335f863d078d3e90ddd92c8dcf87d7b03a0f245bc2157771969b1b20f576e4fef2fe1258740a79c6801cdf03bbd8a6fc2abbab273d096d160c07724ce06be64ff51186ff7eefbc25ea4b0b4f662baedca30e7c53d9d90ff90c1425a28e5646c7c5fea8d92e244fd5a2d07819d86938762c7061869e6ea53f1e2afec907204d8de92f418f8b927afd3011ee081a788cf24d49206895ae7713cab1c36a53af40cae90a18c89d1f85c61d7835c43342f2798e0182a2c582cc9b99113d2c7bed6aa54ef9f72d6db4b757f06b14f62baeb23378004fdc37d2eeff12b334b886c112479e63a465023a59d9315455460ba3134792ae4fbdf1872368befd70b57c127fd764b0e8196597b373699abe5bda0b5edd647449eefd87b4fe2358b8cc65cafa7e25478bf19cb50d4e1fa518dea0cddc1f77b8071763bce9e8cb2dd5a54ad0cb646b925594b17aaf91dbdd2a7665d1d23352e34fdf290d094f3ee290e7320c3ab0bdf80eababd0e06525aabecc32ff8b417e5eeaee59615e5a02e1af3a26668f8ba4e17ddd939eeaf286749a870e3f4e728190a0edfaa22e32a190fa482dc6111ca7b56bd370cc135f85a38750027962ede5e0388415b7c2fea3593bb64f14098c4edda0354a41a4d5ab9f4dcf159510db31b87c5ab18862e78ea3382f9438bf0221bfe4aa2ae7e47b7ed0b4ab4f7ba064ee7f3218d6fd5515ecd5ba59051a7ba7a9c4ffda17a51d7a889f848db8135aafa39c23658cfee5af445989dca9a385a26d54b86e196395f95172841c594685e5d87917eadc7358dd1f966d6189b9241cf5d8d80e380996215fb27d0139fa6b2d167dd64fcd44f7c904f42e90ab45a23dcab628617d8066193cc838e3601852b0e310273b68590a987bdb93101930452c73586d10efae4d0a701a7a6bd7898396ca9ad356b49ad9750cb3668adb605612782472c2967c951c81120e41a53346065083a349b9f0ab8640e46da5f7bf1c166284fe207bd28476f917bb0cd200e328ff345cbc7f41caf39ed6710a7734e161b8dfd8d2a59964416090487467d7a1255e13c9560f777ce5aff2396062a6eb1a029dc97f1cb77ba43ce77e236b9fc925f589b1c070780a84f99e8f50c1ff846ac92599cfe91612c8178325bee642a34f4dffdba2aa2ebcf7064339829b26f27993e1106c139c70d578cc05f0e1a777cceddb10a2c67fd9675e4a009df8037d6eeb38f5fba233dff2e82ae55e62b68dc45d86186bcb55abfb8719ac4ae17e6f72569212279fc2a547ee058eb374572c5e2669bba3c19778dc0b1a05305c7f0eac5e572d9511310bfd12c5c9951c729ec2cfebc1f3b02d893172b4d2f874eea4458af00ff00068593cdcd25cad64ef2919e073f102a1fe2623424edd492eb3776462c380de754ed72bd5950fa253b6168be26b14799bf496da0552eccc94b6cf326f39480776cdcdf38474ac1cf1b0ad3f5c3af2ffa7f6237d4227c828ade0f6d738bb2e150ecc82bb71d8f9c547c3355ed648533dcced1334823539068117337a46affbad42343fac252ac0425cd8f80fd8fdffda12bfaf294ce4070e1944cd431f7e77791ceb4cee27d0c73e39d83c7bebc1bd7f81553f81289cf9e77c500d5b4d916a21a3daf1a8ff34d75fe4a94ac996fc57d422970b679ec5d83ab2213bea584f9c4ddfe9760336bcb74d67356a2262169380fc6d5a0137c76caec4a19f17c61fd5a4d901222653d231b1ca62e3aed6773a2c17c076777a0a7decb9b6800b216bdcce98083e39dedd0b33131aff947a87147f7c76a5f2f0f7d39b994a28eef09a7a7424e8126660450e7a4c4404fdd6afe8223279309a1ff435646d44dde7bc14773e8687e6d36071022f7cc83b10735580bc41af5f96916a6def3c8ce81e0c409bd3c5cf02a866cbaff9ac8eecf6d8e3a2f6b202790fcec241e30e0a91bc6888addce9a6ad0efabadc81e37d5fd68dbf17788c59c82c5c627ae9eba61fe958537700fbf6312da5a6536f297fdbd91b53a6e9d79b9216c5b4e0a8dc48dccc650abfe802a6d42ceef7da6a867baa27090519f29cb220f4911e3ac9e8d80e8e16134e3b069edf335e163a1a035a12e7df3f373ae285baef460a52f3183efe56f4d7eca210c69a6c7b693b28a7025c422668c76ab1fca72f6edfeecf7362f44d86be60c526064cfdd059a43c7b5ccf5f65e7922911ff31db9005d704012c379b5431744b53463e0ee24f3ffd8550b567242660200b769e1b35e4d53bca851167e696eedd9c6eb9c83bb1d214cfc75481eb8cf8f6a6493719e4e4af1cd753c8d9c55697220b66035262e8262861a7f6d643812454eb6144fa256d2f4e2f80a51b78da37c3a71664d5df5d03e241dae18db36daae2e0a40de980e71b7adaf2f05287899667786626793b7730ea79465dcfc4b953478ffbd90c7eba3c47e193f1a97bca7bb7873f9065fd9d77e711d5b4c4fccbe72c004ef28ba64e5a5e4b49f046da07b05adb87e9c2ad399e820f6e2c93e60c2e383a869e8f810b3d6620fe34512fa7fbf97c287ab7d3b26e627df80f6507e4f01445892640955aac08689906f3ff12253c73088b6df870af2f625da361e9bcf4672941d2c56da170ec2c02ae53d4aff6cac711630ca3db2993c78431b013fa03daee95e9478e4951b97421749b35e8354c80294cbb5d5ba334b35500790d08e5159d6cb5ed82bb171846de9ff0ab24ac69a73a8ca2ad58e7ba2eb85ae5604c62bf3eb07ce0d05e8ab0ac21797cbdcc21ca432b6cea1b3abbce4195851c93304180d74887470099722aadd24867f3465d175ce434bb2f69e818f2d4ca452e1a4c02721c1e4b9ad6962d51d955d9d5fb28f7fb4d2c3c724d363f4b5d7188b97449ea16148814277cbf62a11ee8f9ec534912264e9c966b4e6cec5418c20ebda501e3cc180fc92ff3b570a48949efbfb78a11e8cfcbf0a3d554c614ee05ffc2153c939b10f99238a240016303bfe4d68db19c46b80273a048b47693c581834e2cc2a28be48f98ccf328bae4729300ba3e875a4af18947ec1155a3d9877fc0eb525ab9a47c1903724d344531c00e6af233d4f4fb62a8930f96fff6ef1a47e120efce80efc0dffbb3182e4a52d3754b06d3601161f4a77f8f417916dc68210c756be49e739928a715bddc704d9513ca7f85f25a858dcd35f6798dada857556a732e65bc38ed3e2f22a206602cec2f10e4b354776e1663dacba501605cd12a22a1a0188147a667bc623076c2f7c21044bdc44c0f2478b199972f9ed9febde95c882ac796a7aaec765ccff33db4feff8f9320a3cab099ff98e17e2cc09902db42ae3238a260e3158498e844796d884419ec2f2152196395ff31fa73bc328a45f99d22344e7b37290e9ee1321f2948270953588d4c67bdbaf70f0b3a76d33c72acdd608342ff90723ef72485d7f126f0874d06b063a38eb8a804194b968300a981f456ed25f4d5363a2a170548cc0ae6bd649e533dd4c0d539978c6cc34bbe31a06c6a3a9f63eebe2abf24791bc2dc52d11f893c82023a5ad251cc66a5315e5332cd06315a53c252373eb2abf7db847ceb062f34db35e48f9db94101e540c9575f9d919cfbcc3b39893028618520eaac34a2f802f076a6bbbf5754042b7de5854e6673412dd640bd471df0646d98f62ad37a4d7068cc682763b36b391ef29b2428af13e8967aba24998b717c564b913df1179444eb40121caf56f06667a6d47e1401db5bdebf8fb7a8041370e842a12fb6ff374723d98ce0cbc74954aea176d93be33261aeaea8be9c0f3e0acc840f4649bc9c41b59fbebbe08ee0cb9aec6a7ec5dd80c1ae4ded819d355a10aa19c4cbd3d62dfa4c9a91f716341b93d38e99b5d9772e4485a64647d1fccf4b290aa7057bd350398ed3ebdb94406473028feac69f3aa2b2dbc19c5a63ef0683f25e9f3e6a3d6fc82351b6ae833a2234cff844f840ad45d35aa4d50079936580ad1d96bcc79bf16db41cd8b90aaabc9ee1d09194e4597f6ea859db823c725509015073c9bb763ef1e93d3b4452199c79e11fb8e2b2c4b94d6de89428d3133fe896fe1eab6e55be1b69bbc596830f298d76eda12ad37859365257ea3966fe89e3152f7eaa07c0d9b5dd9e60f9c412cba2494334b46ffdc9f2feb0c4ff1fbc9dc326eb7d10af3ff785eceff3b33dacea7f012859c7add96f491bfb09c024d4e14f703b02238d5b80553fb5650d1764eeed47a5f8adb596b5024e3ea3c59dcebf519c26f62dca9bdceb7df8a04f7ac240b4c3c1f9acb0bb02e741837956b3339e8f51b53f748d88730f4fc08bc18d4f469c1c84440dc6d1bdbe9cd173ba8d89e5d338efc641ffa8ad8b5d160eab7992696dfbf6c1181e5f50500631793b555bfee3f9dc73db4786f3264e011154651411ee07205914e1ed226528a9731f302e50873b842f8c8fa7aba7cb8a7c057a5ba7e8e909f24b36049bc5aa4449af488c4389a6f0e09afc953fd77bb83706e0f1912348b97503462b23373307e433c5fc3fb0e3276f4eb8d7157e07932b9fbe5e3967cd39cb8538ea22846bfc2af3cf07acc39a31c5f0ebf5976416233e183c28057c2090da1935c90074fc2a04368c33f28b7217c8c8bc772b50517159b884d95f29e8c68c06655125cf8b995a46270b79d014e0621d54e63b0b5f8465c8bbf8ae37cde4c896ef09fa5dc3521569c614aa5928947a39dbca2e5eea6448900c0e5a6f79f1750ffc79e5e6495c1be892d8ebf0553cf86278a96c0e971aec589da2cb9691f57dbab32a4f31c8bf560bb2dea55b43dec3e1530d5de610ad3768963c6877c0f9c7df3da3a107e684ad194eae41639b85c5fe957d69adfd25130720659bd9ac033bc6c16c41304bb2075c90d125d00536e5006682f82a058b677f63a3cc83fd1ec1b6680e9974a0514e1a9ecebb6a28fb0b31eda37226d1e61b168681613e5c4f41f95a100f9b8d6a699ca02d6af9addb1fd753683f69093e1615b184c3d271a0a3d5befa0d6cb903402abf7799443bdf0a3bbf59c7bb549b42c40e365a07e318cf93bc55fab0cd27bb0b2233b2147b0db2a55aff72e45a06866ac21e8ea55abfae7a7ea83e2f70dbc289f3e91c31156f005c4ce1a9abc486ca50f8c4c873809e26d4297b41b14b293dea57213f63b00ddcaabc87d2da3a24f6bfd6b16e3afabc20e7e8576afe0618147778648372f4ed2fd5d27a573763e7f3fd846ceac2732285fde1c223dd48b02f787e3950258b19df26b8419e8be8d7a7522b7da2d391d63b5c3c46d418b9fa763591290e451a99d6e59364119d70fcfb08f36d0035fce22c4c226be37502fdd2f5d7bb259a4c73fa5a8e6c1637a45fd76603c36aaf5d4d3e17bbb8b9bdcbc229027b77fdecc6b135cdcee0171f2c0724b384074a0b5c205b042eb5beb7bb4f65a2a3e5fe03335b6e857e487b1eaffcc8389dc2070fa0626a5aa4ea5a2d7bae6c1e788e91a739778dcbc42daafcd647ad3d777b0984d21b536244e0f6e5b3e728be21f91c9f800f79e7c8150c8148efb90939bab8319954fe64371ef8a90a007fc9c6ae09b4b12a1c21b38b0975adfcd6e60c077ce09e1453a7a42cca3f28035b899136beae74d15dc0ad14099faf77eb1a18ebbd5789633a75b493d26fb6f7a344a818a555700b240edd3a74c8f467e0ee84ede35f01499b148eda7a035ce53f4333dc24704ee059516c84b2b824d49daa799656c0aecf5ecd5c8929c1c1d416ce5b0ba5c9b558e5d2827a2b37e8c609961e6c7e4239fc6be8432946738ecc122c472c8f264e7caed945a5470de8460efa9cf9c4ad4ad9aaad6d413bdf6ad61aa721c74a50c1539daee08c6f01cb5b931d1ac58ec8886c036402596fcefef817850e643e0fb5e59a9879b809dd390e8148c156455c9cbf5f5429f94a07f23cef0f388cd32ad33b8ee039af7f67dc66bec3b93652312ddaa4c60baa3454edaa8b8dc7c6716bc25c5fcf47fb3768596b33d629ed1b0fe4c3bc02d0f3957b9749d347e39b80982a50f7abcc239ba75b25c8c939010abe69848d509f5dd5459921af84b292687ab5203cbcefb011ee889d66e313fc8605632501f8a06f5c7a9b3a088e5f3391d909d3184cd929030388daf36ddc66f6ae7bacff41fdb193e2449dc4ab1006637dce7172a1b116d8af04e458afbfc5c47f58236e75dbabe0443d51cd24ee94472dad033104a000f8baa4c47ef1e2a35741a39138da65e6ac6a2d5e09412064a3b34d903fbdce6ecbec0f814c7b6d8717bb03ff44b8c0e9601abdcd6249cefee0d55820831462e8b90dee23a99489fa6cb721747a59173c621d95a5bf8622eb675c73bce55184f62ae4e8b37f865e83befba4f8c20490681c3b5cee073e42b29f0f486a4dbb5e21863aa637b59713aa75513593040053f4f43bbbb024ba56dbefb87f34a39b15f035d7cfba3310d0f7f97f7c4e2896896854e759f4fd4287efc11dc022cf39d4ec9f830c41e139bff3b34d2030160e5a4da305dfc17a1dfc757c08b23bbaddc19b2c0605d6a75905250985ca42b7b0ed29495ef4208395dff5873ffd874acf0487452761806db9cd1564ed218bf1c36b87aeba411800f055f74c8a4a0e6856c63850afc9481ba23d4c2d4fce13ad91fbec3ae16db1d977880432b341d9fdbc2f35b767e434995a7d51ca7178e2d460c6e2559a21f3f772a0a3a18089efef476606e0145b4fcf29b6aca51bc8014c79f4f067ae05e74029c45d01bbcb58284094333581d59ea55910e624176577ff24ac9fd8e6c0949de31db9bb2aae1d8eefe0441c75fb2b0431b286b12cf94cd3a916751008fb03f6ead33f3596db450b9b73c2ffb775fdd2f8c514b3212988b24f5bfc77dc5d3a34840d77d8c6f9d8868d74354510ea1cf9f7701992bf9f34835fa3bc752c8f433dfaf3ea0c84b1dfe60e0c23564802915f76dc1cb5ce03582e21153c73be3826fb94af1f3a96ab60156463169a276663eebc30a58616fcfa9addda04d75b01e95599669ec8c58e66fad7a0957975be9a8c13953c6c5e3324b1db199c0bcb9296325343f020d902f67db1ec295bf9b13f23c1336acf7050dd5a62fb8d75d692347c086b9ca89ab11a86386e58a87ce8589a0f31b61712fa2e7dbca85d7f44aacc1a01092acad040d9fdb64fadc8c60bf0d945b8a9ad0dd91d032f479790dc8165f4864323ed425a3cca71b6ad239fc10cc8abefc9 +Output = 0780af9c26d5c1ac654fa3f22f069b829c1d91d5b207f51e67b28a7a1fc993ad + +Len = 46024 +Msg = 6a9213162b82e8e8fd702d256324a15d4046552d460cbe09b01509383494ae2033b048c4342ba48b904218436ed51665f2c8009bb2a93e7f6a938fa6f0529cdd6ac7d3b2be8e72374adfe202d6b24778c627554c942465427e40c8397ce05b68759f5be8b2f47b72930f346b81035d1d232afb48d5c55ad956e45df9c0861249be00896cf9a3e7c7d399b68458107fdd719b9b975bd446cc5847f5eea58bea09abb2054879e4ddbb72460f574320d63f1940dc42109950a4ee30392111390a2fa67c76841cfe85d8d8dee8ec2b7d8acb81e1674fdb5ca1e87f68d099edd69a4316288526c93b08a56e29e849f66dc2091248e3c9a364602072b8645e22abc4ce637cd93868e18eaa9aeeb8788e39a682343cf9b552fab6d531e69a799700ae57f4411bc1e0393e70c5f7ff81d9295fbd5084511dcf66cb8d23ba1cf1331d8066333ef2ca1b8b417e580a666ac1841542cce9920802f0c6d3b0fe92cee0496383873d075a001fbf5cb9f0953d2d94ef9a1233657fd3e0d02c4078a31985cd7f3758040179773cdf9352713302049f164c882a71892a7d10223bf1f8d909f1fb090f5d892f682bc9aa8a54e8bf30eeb2e098955f2eef10af3c0a32391656fdff82120e4785bb35a629c8635e7e98c9eadfa93ed6760ae1d40313000dd85339b528cadfe28258a09e9976643a462477e6d022eb7f6a6338a8fdbf261c28e8ed43869f9a032f28b4d881fb202720bc42cf3b6d650211e35d53b4766a0f0dfd60d121fa05519211bb7d69bf5fcb124870cda8f17406747097fcb0a1968e907adb888341ea75b6fcfbb4d92ae8ce27b04a07a016df3399f330cb77a67040b847a68f33de0f16a0d2bda65aa485d964dc18a6aa4470328a556ee993efc1ce8d4d090fb9373cdd5a79497a7395fc94d3b522d14fe3edab4f7c9a7e8ce250df17724c309eb63b71ebdbe759ad6516a67b21afb1165b1f45ee52fbb1e8e9e71c5f9fb61969c1d37c5bdfdf6b8f7c9bb86409096e8715cea971bedbab316b4c2d6cbd90f3a2c2cba3b26c78d7a14253719756762f2a77c27fdfa78094eed048b946b222e5d120ec90f96cfcc66b20067a1bee3f1c88eac26e41f73393a87fa368f668b4187f43feeb38c6b15f767c7b7af8bbac5e28d7981e9e953cd0e6e225e483c58eb43393c95b7562e0cb49bf7b1a37a4041d92a40a38fe69e374306096d2f5b3f8e076781489ba28d0316c52ce02df9091804fbbe1646a5b70a70e61bddd551939c4cf5aa91d0e00cbba689b3cd9f86999b0e682e449e8532a90094d63abaade9a89c6a14ebe7ad2178ec4048d478b1665d5df63dd9083395b58a88d50e4fcec6357e3b5cc140486fdd408f488f69e7f3d16c3c492e040f5492674874c31532adc55affeeac8b704c5b5bdd3f68b3c8c689b190fcde2296f3c23f4a41f3ab8804cacb1e572829834b7586a089fb16a25308d69ab543e45907e77b04c90a632d6fd8371d02ae9b1fe1be697fd4b0e3232db143c00ef9b9c3e564930e8691dca1435037828dca6094b3886cc19c24a9b9bb257187668a137620bc1fdde704987233d544d564e61a801576192c4cb0ead48fd7f887586f91de5e6099e986ecf71e95d9d79c049c1970ac09e70663002712104b31165104b56ad2f469b7c2a5a904fdc0782d0946edd4cbb66ef67b7cdee0f0e1c3daecf3eeba42ea37df46e90ed3d04b9f2edf91182b190e1953029172df865e193b88b7be3b12a46ca6700198f9c1bdb507e3e528f208636ed274d8a34c64f2c9bec0baa46bb6d570d3da99e7e526a9725ed2cd80b80e68e7cb5edcc0d5f1522deb019721dac3dffcbdd31c7c3493913f8a18b4cfebbf810cc42cf85c0adffede36d7b7b6f6be3658eb1603b6567d0775102235570b804e56437bc5e539654b5328cfa6e44e0a7b3dd20fea36c9676ecb878bb9c6a5f5234ccfa7cfed0045ea154735ef3a4f3d00e4192d2a6e1bd749ab66b1dc8f3982a268df5d70f3ede63dad08c6fb1988ca8a0416fa5edcbc412a8d2430f82144bd3e32e8f9536a60cac882e3ef5512793759165203f1f3292983e95685a72d4609692372f7d1d0f7581d1f7f0b77a5af08009350b68e51e114e868643c63f3bbfbb5b303f596c810329e0b20c7ed5388b112f3a99e8e798287ca52d3a1a9251518a67a226efcb059deedbe7f9120ac94c6f2bfb3286cca7bf69c612b620121ffc4ade154c07e0a12b16eb1f1f3bc0151ce426003f0b3d54bf5e0fbe209e68aca945e80f196b565f96ea37e0e6c19f25e1b648d22640e1a60ea3a8b8de5d3b0041c1ab1af5e2d347c4b2e8b5b66b5100852eb8f851ea61a59580ba885a253424aa0752bd4833ff609eb62523f7027baeee949ffa26d464593c3d6db7fabdfb1fce5f03817a2784b20c3d17b4114fc838063024610fc593cbec21e8cc28ef37f99310e6ecf3860745f791e5ef6c17dda5b34970b4738496028b75544f4b8190bbe36425881b18332245f8b85c702565fddf29aa7bbada14060281d8c8ca3cb06ca5a1e5dd5ba4ad50e0bbb884864006487116fb3f4b8fb5e03a8d9dc00fe83c14c110517119f420d7ae220cee142f688f51598b86906b22971ae1cbbf814ddfbb1ef98ecfbece32c09974dd2284bb34da673a81dbf036033389c5894b88323f6aa6a4c77cb3fb8b1288fb52a93cac122f9b0005c3d3b7ffbd7180ffee8c610429405822015f43d4d562fd940aa6caa998d5f541c8a1b7bf3cb95b562ff5a0d7fed45fc7e7296db51111c3cacd28dca21cfd5f5a71c3feebb8499eb6962cb860f34bffdfb67b43d5cf7c951d7b2caca4c3fb877b469f542a39099146ac9771460f8b8192f4bc8bdd178bbab59b19005896b7b5cad09e8124c8e17b2ff89f92315a7d2d072b530e74ef267cb9b557a1669c19316f96284c826cb9a69803ace5cbdd094a67e2aa944361352152524e5775de0a429321a67eec2e7958aa532730b99f1822d9a228e5f274a0f2a7f966e92d6270315ef77edf091409da8d72763ca6a890fb86f235c828304f37e132072138323547f7a21a378229517468e803d138015b1e965a39068d9e2b38278599c53b563fc987aae04efe72396d633b35b617b15fd330629c67cac51a3ca27b849ee1d4780235953aec26f9aa0fa8f573b5ecc086617c93c7b387ae058d799b3074cfb6c6392aed8fd8a2c58aa05c9d27945f37b612a37420b26b5fd571d56d050fb00413b58d3947db19dec369aabcb81c171dd92ccd8e102c1fe27031de7a6c362ac446bf8702cabd344d3bb2b8d98e15bd7ad6f8216700e84b3fc015bb49cbb3e500479f40cf7f469a19dcc3ae7c1147f85795bec88956af967cac6495638b4c8abffe9ddf28d03df34a8ce3b52ea97a71bbfec6ea7c7c49a8a31b68934e15cac10a53018d95246ce9e9355bf575be75d0aef957adc6d87e2abbf767de94d0f431e82e12719fe49922fcbe7495dcb801bc386eba3cf1d416c4cd27aa9dbc239483617719b4cd768d468e0f73bde8ffe6dd624538bd85d6d81de09379f94f78705f7d165e7da84310fea410a39723fbecdc3366175908488ddefc231c1ad436526b45f329f5b7b3eaf248a94b481414da61b4b99f370491fdae29bfda27d3c40052c0f6c243822fe2c981c2b2fb43b37a13eb271a800019f036704ffc49d58c42baf6087091911dc12b584321d6393e929be296ce5b85482e1ed8bbcaa761f5e24cf00f7d046de64fc2d314e0017d1feba0a1ef04f11a867e0d6aeb8c6aff67a6afb5f42fc69df35433fd1d37a597bc4dcb2e1b0469473baaab2dc78ab9374a588b4da0cfffa9ab9829db476eea107f80c4930116ec94cf78a129380cbd9207be8ac1faa4d61a75e24a7778ccf76fcf4b32d88882a28aaab1976624599d9704a15218e9f87476bbfc3ed8999af53c1377be039a8fb2b0341d34ed75ba82cfaac88b5a57110148e4acae0693210b00b5cc0f1e1e87458ed68321c5117794c061fdde902b38a41558bb420a4ca662411c12ce30fbb082adf6ac06f6e2d8faf49206f2c14db585677ef1a1ebae74218ab011a2421b539294fe618989ce24ddf3a3ac71f5a4d0cdc5c01574b1a0d27160d991345b65b79ccb54685585bfa56443feb700341ad1a4b885f1626409077a4dff592b83c126c9db628910f29ca1b86e09ef498796ff31c7364b140dd35c63d88a3230c217e6414b8e8e63d84d6100fc2e1cf4f501a49d7a39ec31b4e519558ae2e4eb214f402ba3423df540b92d6573d405a98741060f59f79c625f278677e96f3703a7527caf6ce5606f31ca4d0f5d62730f443f6db0edd8224f1881eaf27f9af3215d06e2f72ddfbd78b467082541422ece34e323a8bd45489fe6db8fedd4c9dfec4954ba286e971db9d078a7d0a8dbfe8f5f166f1e51a4d4fbd21dbb916e65c40d75244b6db87747d98de672371995abfacebe983a325e8f0ae22fb706d7d76a2be95fdeec91e60581f397b1831cd8fcb688c4e726e7dc417520f9cb73978699efacebbbcd844c1d590b74acdb390cba6c9511a407f885b2e394643e0034d91900c5b22a3916125808dc65ab68f999adc3fe8c1708eec0a9fd45565ad7383ab1083f9b7358d19e7e376e53f551e3e89d64ca1c874e50f7f06b3bb8651d2b102bac1f8ddd513c59578dca24d3bf805f52f601ab3e04a6914dd47e73a8fd93c24d966f72b14ddfabaab3f7c28dda56679322ac20825079f689e0176d6b9dfabae06e3731387343fd4150fd136bc9ef692a90d1629c5a4f8d6c380d90f625e75fabdb7db2b7ecefb5e20de501b4b5d3cbdde77b5bd44bb3c0bd8468c390bee31978864bdd79df6b3d5692b673b2c588f775cfaff2714b2af6466b30ed829075500d17a89ac57540fb65867850ab229853baf2770fbd813e98cd966ef815c2256c33359dd1e2d5f559d6923482e8f38b4973f5da9afe16760c1bad2acb8e7c7bd5b288306a192912bd735df1f0b161e73f6a83e17c7d325abbf8576a4e38e800f452b96b4db29620910290b7824e94369f6542929b82fb730d2b3c38695a2b3b2fdb705662f546a63c4cd28e2006b3ffd02ddaf7e0549c486b7e059b043b70b4ef1454f89229612c2619cc7fb222e7cb3a8af418333d3b623bb75a9c0724ddf49dc60e59c3980e3ab731259120ea5721454338fb7d830147e69fe2415a5d9a829fb94681de887659575b86cd52a62c8959224daaa46f1581d5fe4694e62ed0e65fb5a379cc42c1106e619739319e8d8bdeeddc2d92499f986f9c2e9d91dfa7a94382cd48730e16e86409ffe0a31aa3b03c6d8c8a2d59c9121b40406344b74652b5e76df6bd339d68a11c67c79161957fdb6a06cb5fe6b97943b427eee8ffd6691cae2b8c91fb80188d6176f8e4bc8c8124acf1f80f3a97544ebe894663007e77e09dae11d6ace48091a2d57a8273b03c7dfaf617259b8c2ca4270f749fff6703687d9f8d768ff32913a52b5555ce283a4f1dbd328852c088adb6607f8247b8951e15a50858ecd59a7d33219144141d0303deed5022a75af0d035256ff61f9ab5692f698b640bb25b35145f37368fb61dff032e7adae182ec786a054ce2ce35ecb191921d8233b1f5a5108c4f15851c12ad542ab7984a62050a1fa91f2d9db0c15f04c9c79aaefaef33ef50dfc83f766a749b860f44281fc2ef1ab8f0c1d434bdd950b69094c2b6d1497855f13705edabbb9eed8ac7c4e4ac8f24dbc585bbe866883d008058b80d244e74408c4a1fa95fec2605310766d7495204baa86199f547d493509fcfd8266eaaacbcb9e9d4d10d6efb760bed562024a184fca03db882e526194df6df692a3ac4e56f7ffc6d8e3ea9e5e92061dbe8c2e26a49b5015eb8cae498a08c71b5400d06ea01e66b32077905ac06794c3e57ad7f7f4bf096d4bf7d78d9f0696e029171d7821bf61e6b6546ea17741d94c8946cde8ba758e262be8648a1e696bc9945ed9f7465b8fd60cf2dc0f0dc1423bec887695608f6ce4fdd6ebebb2a1a45c2830ac7898633f1596eb7effde567df6b1a8686a714d042e546bb40ee63fdefc4734eb589276fe09d696bdf07381db216b3f29f4773f1276a1ef838013948a4e93e43d23cef75b475e9d2f8d57c3e8306ba531bffce5e632790aa0dbd56024b770c718669874c53291672a3315ad33984582f6295cd20e064c15b27ea5f33ccb7045f3ada96fca70117d646e17ae3bed8b510dcd117408469dc92ee50ffe30ff14f955455c58e964415834bae8376f94af87df17d55c6397d07d8cab6dc1bfb6d149b3ea3bc090a3c370318601e94d2224aff095f2eb8e6e96ab423e59ee27a727cfa5e8c2275ea2fa6dc17bff24631a7d21d8c414b2073f62fae61a6ee417449af391ed79fdb1e668999ae92a893fe22b95fe2e95305c7e97b4eecbf743fcf3bd4e0e54edd428d2909bf47a3e78421db264d731fef70cc0d791d2cf8d7e4748e14771ab781b221c04ed849b85820831a4270a7adc76869a94ea28a1bbf384b8a968727db3633c1727f6c1c9aa26f0a27344fe75a82f5860425656ceed6443c7983977382a2ce5588c50128116e799f49257299edc91f0c6724ef3b3bc10f30a1023066736d8ac64a4721d4e564472bca3d62272f43efe11a73c760c82ba10d4c3cd968784070fa002e538add2be094f0a3a6f7e8996cee653b75415dba03bdc0581ae157c386daf2a120b2c26c4cc40480c673df729f1b90a48248c4163c26457f7b39d99dd64e68c90eb25cce94a14dfb4b01de778e51e2d575dcc4e8543225d985d8c676683fa9cda7f373fabf15153dbc0bab504376a4f7d66424d854c8a68dbf27e6f84293fed673ddcf97d507a26ea1f80fa4c6731f312e4aad8d43cf12c4b28c01c96e34af0cf9d9374edf5e3eb48330d21b1d3198ac04f527b02931afa5e470de91f4080496c14d75c7e3042f3ae81bbc5e52975a8fe0cd5ae80fd5c659df3c46f9daf9449d53a24fa9ece0bd265b2195156d8cac034a3a0ddefca39e072b5601a82aeeb94838418e9dffda32a161aa24e874fad530cba40a3af88381d84e28d748eccea9c0f790fa4a26dad4d2841e327d71c81e3dea7317a30b5db5f4d218907e26835d2c18f95a5968c8ede24be5877f6bdecf53300ffdc13e1983823f90f3f4e2f41db523e37771ce8cc3f83e67eb946b24309924e1833d989f33aa1bf7c95227093183a1b61a3b5e0f9e3de60c2664788288384e4f73bf21d70d96f0b5da3ffeaae0bd1ad9095e2237c8d9ca3dff989ae0215736c294eee2aa596b4532ee646dbf738c14b60d8322ed88f3736040d8d926411f65a3ad73e2fe5e54a3d5cd697f30321719b4ed52651a25b367dfafcb3e3c31b8625887f52abd657791083ef539e56587b03b7372f3a4e8423020151ad00a3949b54bea1dc0cdb6fc97330bb0a5c7540362b3658cd47519c8568d396d9878a0fae7e29d93ae18990c3dbcfa44cabc47b4b5848c471173006c5f8ce56a9c6fb0f57f876afefc8456cf0c0cd456b0ad85c13317b04cb088e457d587dfbce6d5af5f05a11707b0fb346c8b8b60916083575364d29942bc9b0fb13fe5f0097e94e66301986d55d4647c0b43a1689ae1240592cf1e0ed23a93c7a1260ee0fa6a929d26fcd334916fa677d6bab7b21c3b7ad7a5fc64d8a4345a554f116a7736b4b91cd37ebc34628aab6af37a3308bd776c14b5730abf5fb1d701e488617d6664efaa900dba34712c5aa08a0b7f30259ce106e9bd7a8bacbaf21288135bb931801e90853335fe655d9b60c4f301f2fdb2c3f36a611a04325693d2623bc0f440122d17dc779558e72556f1c8bc2318edc2f9245fe754f29a8da2879b87f8f63a210484ba61430b9f8d739cbfed4c689cd26be1f1d88f1c8b67077a5a806b87c8b68b22497aa5df349cdba9d10fe3acb3ed017248ba324baeedaaf3c8ac816f92d8aa38b149249b4f5b746025a952aad918a31e8b18a747ab2674390d95a3753f8f490d1a57290997d02708e443002bb75d392ee37755d8291b4b9650c3376377e350eaab2a1aefb505ddeb356655f6f5c3abea7761a4c6d0d21950b9bda7ffe4dda7178c4c601650027c4f4198b9d53a52e19a705dfcd84955c4b0720b59 +Output = f7bf54a23d4adbd17fbd8b9e86338bebc8351f9bcbe87f8982b0e661570101ca + +Len = 47120 +Msg = 10fec3f83b7a97e092877a5bf9081283f502a0a46b50e395ab983a49ac7d08a199165c848d9fd2329c6fb4d5122a655aff38007ef3763c2c062b93061b3da34266a5d4b72c203b37ca27be20f922792e50d961930b2b274a0a0260a81d86e2347e9171b89f639b982698e063365716a8f1cb0c0b3bd76e97c005e85638c08e1feac47cb06ed2b9fdb8a862c75230046fe9f8490d0be2d7bd2f1d7539f6536fadb0243cc622d45f0c87408b73d4170a2c404660c104b42b615f304d79dea84d84da9bfb2342d053709b49a48f4473f287ff9f9850adb5312e5927b93d7825f04c6f10ffee56305ecffca9f5452bab82272dea3ae28e4eb3c924eb01ad4d3320ae786a9250e75b48d2b34ac6bb102983b5d20f8e9e30e577ddc8636df2e43ba451fc93fa717cb9d920c6125f197b54bcd8f7f5dcad1ae447104e764534c5a345df03727f789db2d96240eb0788f494f739a2866c37d4b1e90abd0ed09a79d4cbfd96ef6b8ed2ae0f3f26bc08300451fa80dea98563e7b625741d12574d8737fe55bbf204daa4154460826da83832f38e54b0467159da59c5f6776922757733a58f7c6394859a4f406c5be530c807e27b5d2246764235048f37d2fd7938d22f8a53e12a61b63dc4cb0cba0ee80a0a8789443b8fdd46811e4de036b5a4c11f957347f130b49613ddade8a6cf1724c34880b1030aee8c450fc598ab79ea36e6cc2916b45bd44da600ada72710063eba8e274b839ff03d093ec0083a3195c0b03c746632940b027e9695f145b9fe8178c247bbc2372d80561505d8eac5eb86034d1be074c49fdd21082b7009b34514844aa8a8c8b8eb7eb2fb5eafc41e35b16a67e82b81d1d90719bc38c97ae42320669012bb9e0c735ea8589135ce22ba686af2a1ef61a501a8ee1c83a7a135e2cda7fa4d9c4b190d49bd95671312bac4d48d560fd61d265fe7268fd6b0848ec942cef220f2d7c900677b18a8f198cf991c5afbfa86bc3e3aed4b7cf78c2dd81fa863df55664b0296df694a1c766647826a594a2aa746d4dce2e44dafe4a4f92d26ee29b29faeae15da0f938a4b860cc7e313a966e2c4cf8bed7a69c660efdb3be5f837004608b4c67ff65cbc180004b0b10f8177df3d199036943804a71864900d0873060262fcf1f7a50b7884da1985fcd53b2645b99933e6ba223162277e76c5a7448e7cc36ede69a40a87371e328debee3d39bc4037bb25758f1438221033355c125e5b33f2d4fe7cbfb1dad43611a7e1f178eedbdb721a4be776d213021086af464048ba701ddeb494bd15020f595836bead80916d9eeec6921fd7013c55e02846f9eb61d0ff30d4ef758fb2a4ad24760b9e1d6bd588c86ef8d7f0f5a54a6a507b54eb2ffac31d653a9ff1ebdd55362842146b6ffb78d1ca8266c5f627374dae4d18f12dd6b0cceedc04e2b6a298b4d4cad712a7c8b531629693fd0ca963b0cb250ca4614d1065f73d6c0b1adbc0c7030bafbb1b22890fbe9e27413f1417bc2d69faadd545291208c59f131f7013963b6d640ed2f33a936700eb38984e9b995e83a8b391a745f9aadc64a4cd49da4a0758bdb2d42111e7e426a48b1e40376ee6d9de5f9b5caa4264ea84632d4f5c0aec34845029955630bd761de1dad233634bd56659fd4ba016bf57c8fa4668e3ff74697f8fda3851997b5a1de3d2edd6a217dd0748bf5b719d428bf511207db550265f7718edf14a47a5396b3910776950d15b88d4e77663fe75efd64fc4771b268a7e33926da78865c37ad08a9c5a349802b6b2a67f83c062e0e9325d393c5da9292f7da65f4454195d87147e7c7c7fa031564d668e69cef00ce2d0e287b6c3008ad81bfccdaff68bfcc7ffbebac79290e6a321bc1d12d6d180437987b7cb955436e3d63bbed0b6e527a258f25e21b491aa05f54e33651f2cc472f5f4d0651accb3b6760b3b8fdb4c6780e9c26e742fcb03e492c7d84af32a61d90cd0da6b9b918bbbc3164bd4afea43c978d4f4a749657ca8c1cd14a998f3dede86c4dec560ca45588501f68778e743e5ced3f7a24b879ab94808f06a57aec3eb2a77e25bb1a06af7837744907f6bef3db365804d7d5be77fef22737678839967c192f115d63b81ff861e3ed70c9dd037ef3296902606ea6380c0a6b3439be6ba13bc10db16c212d8569eeb4567a56d3c49e341538fb32bcbc18d8f0a001e354be89e4995bb5ea6e9bba054c0d7ac4eb58a20897e018833207c2e3863f6340b8408dfa32b0b36c49c7dcc7f31a5dafc087a9077f9c2ad89cb774ea9a76e03f2cc3b2827854f73f45863c976811a56fe9fe1dc12ac1a4bb5327b93e9bcb0b6718b4821db8bce3cbe86364041967c49dce087ac637f538a40bf4fa5ff8c0473112af871c926d2baab8cbed8e65a13da1f3534a6705bb491b1d9bd2df6feb262580f13c1f93ca11442d3c33a6fb429324e05af754326848990e78bd3d3f901add0a361b871b684730bc30d0de38b0478f1b7c1bfe4ca0c996653823ea0673b79014ea9ff3b7dc3ff8fc463fa4bc9edd591b5322d592d94eab9846a17652fa6f17279b53d5f78a6df553f8fa9ae552c71b566ca66ac3963a414e20b0528398a3aab8a4b1be38e753ce69a57c114170973e5325013e5d4c3eefcd52cb1f36d317f34eb3441d1a9773dc83f84eb86f7cc03a9818edb0ae8faf0fbc597c2cdb3e2e69602385630b0f50b8594dece0addbc4b8abb4a67255c51d3981a12e1bff3e49758391e03098a37cda5032c13abb122700f484d5e3d1810bf5c3c66b6cf1580bb02f7b0ef632185acaef338616e5b469dc1915f695b047fdbcd945be80701fe7a1ca3b4c2465c27d02accc8615dc370f826fc47308608e6507588b8206f9fa6fb2fa7f326bb236460a0f5a5ba7fd2e8a9c8f2cf5ac60c8c45dc8147050ed8bf67c26a35c1c85e868599d89715dc6ef5d92fdcbd9023f8bae388e8ce40ec9293e55e54413b78f5d3669cdc651a7d80e1b0e120da79a6b4b8520323167811b6689e8acde13dd0d1942c3169d97069f1f2556828eebe5628ceb9d59ce756862d87bace3ddb6fdad810fee0e7b9c0a8a771f14c5ac1063c3d444084b9088252dd3860b20cf8789df3910532beceb1438ca6ab13201afa5ed961119ae443a37db0c3b8bfa20001210b5d68ae57e0ec4187d8ac47e1c341c6e56e519f845e61108d6feb7c68bbb16f06bd50dd18b718aa7f501b6f0482847c4ab32b19002266125b852172c4f1318ecef9e5456a1ade875e572114f3206b86ee78c592c257578b044d81271f69288649594e70b6d2e6df0b33e6bd15659deebb05479131c5df836f0f3425e2ec3f606125b4e662a8d7ba6e2c91f2d218c3bc98a1da9fb533a403841362f473421e23fda43e2dd8615a206f8c4b3c920384f66c96a643b66b4e122ba0311a3c336cd7041f15cf7ec8161af6993b21bdec89a6212ad2059c3386b94c00cc21a387d18460de6054bea4b4afeb9d8a2bbb9c7ad39ea6866dd054f4ffcf7959911205f733f8294842ffbcdbe836de5fe2f5dbfe86cb52ec04b8963fec9c5401f0f07683ecb448f523a8d934cbbfa5e3cdd170bdc690752951bdc00f889cd9ebc8a5a220b57c828e7e23c366636f393d74b825609bd55868dc479c0edcb54f40a09951749838213cdcd7421ab52ce4965f13c08f0d8244cf2ebff0e2efd0002701344b279cd06b26c42c1ef8cbdfec1617480af1257f7f86ce8b8533c9d632c972de57e2c92ca975be8a1ea7ac719ae423c1cb2feab451b6441523aa73ad2e4d7bff3f4d2835225052590cd060c836290be4cbf0650a048719c491eef43f3cdca4ffc90fc0d120e00901ae1af0ce080c581bd1dd9c67df20d4ff99a85472a39e7646bed09ae9e94c6aeacc2e636957b691cda79e99b529aafd3001809c30adba783ce53abc66c6bdfe7d30b3c1836d4f3e6113da64da2b4c1dbe921dd360a059334908f3302eff5b4b20a152120390fee741de3903c02d2fbb11142801eac5a22dd6eda3fe2bdc4ddb3ce6b35fd109eb15d4d065804d767a5f914f482eb564bef0495df32c43a5bc363ac87dafd5203f4f82b003e26b505691a60b2663abc5d4040c208ac460a1cfe2800f590bf71c221eb348be320101ebdab80f6aa8b32f0def85fe12cd6919af697883ee7a1f47bb09cf5e3b77f6d260c12f24bb03b5ec913b1ebf30504655835389ebe50435e733983ebb25b9340bdecf7312c17e9a42876f3e2a8e54df9d74261a11e5b12145b15369272201a2f48c8aeca12520487a17144c09d4e11c39aa6c95bb978acba95ec3b669da5628d5937c02988ff1a8db6bb1b222aaffe5704cac61b2a2961b5a626f8e4bf7c0aef51a2d1ec1a6faa2afa8ced73db6b7228c836fe6beb0defaa2e4df5a931e471c9d4a24a6e213421f3cf9f42324a310bbd3763c8ca666684ec70c9c800af9f45a154be904c47ed105cc84a9fe9e1713988e4e9bbb346e3e0112032d6a7830ce51a544049e2f8db03ea57178d072bac7a1043214db2e7068f9cbf11a7ea56bdde7955dfedeebebe6b00fe9e601693634bf7f4b30545d13ec203afeec2658512a052cc05d2bbf3e7b4554147df94b3062d845c0768e8900d45ca7502ac95b8abc94b392acec742f78e3bb19c421e0535ad59fba6ff27adf289759125cce74bf9c7a72fe708bd265e4748b2043dfef44239fd561a1e6f757eeb8996a0b9f6c98d0a1b129336fa189c7df0d53839c42aec51c2fdc96d3ca1030a7af80bea30abc62efb83e7c00a9422a0c89d80bc19f374936f554d622b9b3f54ce37dfd4218d4594ece63d4a6b23914e346d763b4cf87b6d46ef0e7398de8468f7c8950e45c87bea53dc0c2c983158d4c8e7914df9a4714dee3d953820d562a58c4cb40f1a07e98db4b7fced1e57f9d2fa7e5a5a9c71f6b3b9c36a26303a6a98f016c54d1aa60efda41c58026a01f4d74da449e7920b6c4d5e1305a46357fcb1c7c9315ed42d6cc8967bd61307c9ca4036fbe88b96bb52693faef05926d8a99e77d6909ab328836d0048cf858419faac4ae7aead071c39a5d2e9a2aaf716f1ad84c16ba74411d3597615dcd04b6cf68a0dfa14c26fa89271bc75a520509d556d830c1b0b1363ed1c6c756699da4d5e57d495a3623ceafd5b50b5604fcff6456cd739371c8da9213467c9f538cd3582a4535ce312fb4dcac1443b7c8fc1ac521a15bb38723f5c202fdc86113380b013ddeeb25c4b275b8b51eb6a4266d21a0bf3a31497a284f75a6d4f5c4320814782832b3867814d9ecf7bcae46a7b7dd9c39823c7fd041af5408b34aef3766b564f327d519d4bda8207ad771c4d2421662965fc67b13d5de062f830e0baab9b86da4a798086015aafb475548473076939adebb1565ca4ba534232a8a3f1468e33c45994678a485a72665207bf747bc1eeb1a7d72667e0dca86ed9206b4fcddff79dde4259329736649dc1e52fba27a7dfd518d25a6b68215a394a1c991ea7fd3cc75727e817648b00bb539157cc61979798bd3764cfa12503420411dff66b629db142a986a136d4d14f7570ba13d02da07d036ad80d22541e09a594826f9eac751c2f4bd758948050daa627d938e9c684e29a1116cc723b25009d1932d2a8376d487b833ca5f43a09ed741b379414eebf79df9eb356075692c7591463d82e9fe0c6c5e43921dc5e56e85dcf57cde822aa93527830626812e1be780a97d888527a378cf35f54c359d26bc1b8bc4ee9fee0df8132105a0b0cbc565880416c4bdb93eb4f1511a73fd906d84e6bc78f90dffcbeea50d5a566a06d3fa909e2fbefa7b8826addf2a1a8486ece625d2c18533258a1fc68e2ed018a9edab81c0f1ffa53626d8ec264cc932474be9c013c61c7b28f2945ceea997207aba8241b2840e24b2c3d2946fa9096f9a31969fc8b0454ccfac545073f232ec42e386b9bc0f73e1b7051a8e026861a34946f3ab38a6890ee360678b663229e2c80fbfd126bab7420d94bac327b35a361a330bcaadd16e2a2db5d6f40f90056cd6e7367237af61b17b19ba1a26af7a91d6a0e3e56d587e067254a872b5354cf13213f2823813f995cb3c207a46864c1a453485e5c164410b7de5e5efa14889d9a53afbea71110756c3a4f6cdd060553a2e98f8b0f11d3ea1150f95521cf2418bf7045a932ace145c2cfa44fa0c641f595a74443045aafd31017ac1836c5bfe71f01b1664ab75a70ecde510e942bb31e0926f724b053406210acf7169d9aa47f2582437443b2c49d6700e6482ba8c13359c3188eb78e2e2dbf8b6abeead08a576f6cac61d241b811bdb1c47adbb004ec2406391f7e7dd18c593d679f92e9c9f6593b2cad6ac6cd746d7b8c2528f3f69ee48ad92579a4c3049a2d8e273a68fbd28f7874b571c44d3bd2c8adb597c70ec207ab695f3d958b2ceef63ef425b088725eaef5288bccefee9a2399caacbbc5fc2a027a1b3ec2927bc4020a64f963086c53492e551d32fdf32016e0d2dc44a4b3b80a7bf7f1ae6177a5eb711829e2e41709c1a0f9aab92ff0110d035cbae4338f3e3dff63fadb8087211cf38c3bd2b408fec2cd54b8a1de4bc98081c6ad3ceac5290764edbebc6840b201021fb394f0c88ea73414cb9f818cd61bdcaf3791431c05115cf3b1d3912ad5524d6105bc12cc55f945a85804c239a3398484fe93c4ea5ec6482478a383bc076b05fec6baa28ac123a28de26418b8dd6419d646b6f8c692a0a6ee87cec85ac4c5fc275b13189a7cd0bb440f5feda0c115fd11c46d57174d3b09b04397c7ada9fd60995747fd61d56af059133ac9781ae9aed5ec495872eaffd12840a11a2b037c03c33febb977676cf23bb29724b53739cf7112bd85600859ada5137d38497dbc36137950e5519f51317a41f797dea290afa1fc4c565501f2efb5108e9a8f85587828882a096709b22e8365ce8b5ae988ffb6fd7853c8743627e6ec57c96396bb5a6100d98e5e230a59e572ae87c0787d104e9ac3f630ebade6a8fb5b3d7c4e6f5d6b67d1fc7d77b4342f1cfa1585dbf781c758a1c634b4c49c79c21b7f2ff8dee19621c5cc6b745a5dbeb943ad418092d4cfbbb44c2a8c04c9e7c51af6f542a4977fc307869eb5672712dc1dc75a02b989b6385de0b8ce08ef6198dc4d72a83adf86d029a38d976530d9f9eaec55ded6011953112c35f72b8d75a1d1eb0e862c3a59bdaebbcea6df0b52973d94bb8192db67a060a74883f71492748e485f88d33856f00937c8602f074b387848f1775a993f84eeba5710f625568583fdbc1cca4a0d1bbb90116fffc4f2523d81ae3cb7aaff84fe0df81aa32020593563cabe9bfffaa5485d1002abb50678ffd7385e1481263530ea920d78a59e742522f1eaa2ba9e0132076ae4bd67e61131a22637fbcc51fa0a08bb6601260f4ac5a3d82d990a65d40b278862cf4e1fcf757b0e76f7dcf167ebc0dab0b7121151b97ec3f3c98ff0723625df294be821e82dda4787834382e378bb868a150a433d530c7bd9ce9bbc80459af594adb68b0fdd4867d6189095112341353e956ef34234e5365c02be2872abff52317f49b9bb064df60f323496656dfa7d5ad2c0c024d191a9d72077d2cdebbb8b7c3b124c5e3b33588f6ab00554cb6fa57b37903839bb8a3ce7824939e68757f7f16b90a18deec135d32c836063cde963fc4e6daa1555476619b2c2cc71016d2e2d8b5557be835fe476e23f4606d8203f6a81b9b42c2141cbca3c4508e1ec63948d04c0ed54bb680ae7464414d29c8c7e527bf4e502b211c49589608dbd9ac3d19c7273c104d9920fa0a3226b5b6d86c73097af9b2d8a2fe6f824a5b968af165be85eee71337036793f935aa7e5ddb7a0715f6a65011c04b95e88852a879bc3a9dd24817c6511edbe20816d59166f9770b14d85c121ea38a2553f7f4f7ee36431f76ddd511e212064d017dafd61959ede6cfcb24e0467243868b3f496c318708ac385628dc3407703daa114135be2463000b7505a2d356fe20580959ef89d611ade15b190f8d249f1bcd7b92979c8162c1937e07400b76445b82fd2d69404be7883993af9236911d4d3063aae2fc9971912e8f32a237fb9c9fd0c2ccc09c1011a708a7f24d7777723d9c6f9200269418d8a3508fb19e0c8f540b013edee64a1770163eea2997fe2451d84a51d76299dffebb6825538ad2a4e2fb618ca96524824d2b01a00ce04dbdf3ae9aef51f8d04f6b3e80fc71417463b1688bbd0b63c4d8a50e981be0988dc58ae40875552f62ef87f43f1df40c1b54291a26d9eb2652a4e088aa638b08e5c27e433beaca517747bba44e8fc233ef00b3d8dbe930 +Output = 459a21a751062cd65e2e9dca4765241c20ae265a9b6c031f80fcdabffb2bd890 + +Len = 48216 +Msg = daf1e7ca7d3baccdbde1cc77dd67c8187f38700d1748f9899ff84f968d3aac5602f56a8f44ab16666e59c56b669eabd61020e910c12ca776f79c635947fe884996f243938cd49208469b9e004b014a9fc2e50c57e2edfcaea96f2a42d192350a00b019de3fff493aad71fe3f74d8cefafd4e80e960d41fbb1f394d58133eda21a6f79579437462840ba18d2eca6b5e702924eecf25293825bfc273a3f549a017f28f5f6b827b066ec8f4f4d833012388ae2ffd0f17347172f3d1452c60fdae734a3f1ebce25c5d814c32db4298e445caf43756b3203cf02c22306bfa3aa02dbd18d07a754d5e8e440023e976e25aebbe6404a0c2278bdddab3a58c156d7b447ec30b1d9daacac2404a8ec77bf7ac3ded645d84451367610510f95086dfd61c3cb3b5ac3ce1e820fb933d1d59c12264de5d0caa43ce19a434a0f461547af9dc825099d25bd900d1ff44f6921827038819b8d7b9c43fe8cdefcb5d6487242badd5027e35007c5afcd4c382cec11099d027db875ad14e1e04bff9fe0428c7b5b7bf312b7d36b13eca007aa97a5c662a658f30e43470e302732a929de73e4adf21c74569530260f3630dcf323eef10ff6fd91db5f0ace6db3fbafe03b5d195f11476a6005f6e71c2ee832ce7c184f660158e0cc4358a3ff293f7a6f817ea9033b752bcb84881cdf393e8f88eac2200947f3564d7ac14d78f9568f043b48f23ed33e5f059b6435ace7cc69bf0a6d216e5d6568db7fc5194f96d9545ae36cb3666afb7a8aa53bd019acea47dd5589b20994279ef2cce495f7a44060eff42a3b1e7544e4d74c4f6aba1b40b0605698506f9ea27f2fdca0521584244b1ff83217cb84934487fb4f63e2954829e478298b04df7e7fef4978cc0dc8ed698769e4c7f21b7f1ff93c9c6a47bd691ad644bdd06dd90427bd7dee6264e5144292c3e2ca36ac60bdc78ab6dc3df63c09b256b5bf1f0debfd16f461c39f6b217cee809caceda9d0c46f503f3859c2398d04f8b1a57d009e668847835e31bdad6ee74a72de9ba657ca5d47961d0fc3da0b4ad522322c3383fa8de1b390a07f009f096c15ddd5245e160dbb4be8e45d960af06697d38129353fa44d83198001d383e17ff6390ea66c5e1d35d12a6c021612a217730830543a9c47f5724744f89ec3fbe0846eccaf0af8f831b6600b53b2a8bc72545e9e370c96f583f1a863c5bac5b55850ed83a0a28d2b597c1846c4f443cc01bc354f6413c6494391bb60ebc01faa21dc43b81dcb7122f792b1a2c8635a3d400b2ab84df890afeec30ec0fd372846f796fffe88fe4b7ba68acaa3f07872acb7d1bd6d67238c85d01601085c987618240170bb74b37291e0c4d1cebfbc1386c3905bc3421d208781fb40ab9c5c8faa31bc447363739d1230e1558798a6c3480dd7847e514de3118ef32c2f3f0beb59cb27f9bac7c711591160d4631db0f88cf107c5e3374e4ab0518e4217b71f0fb34ac4fef6341675e2fcb3bcf5a17329b217b1ae964696cdd0743d20d9871e63532b23d2ba1afa415c6d6a9d93d655ed53ec559d1c11aff31e618036f931829c95f6b5037afeeafa01ede5f4d23ee199eee9742fc92b0240e693e7f30b48d4021838090fbd5251069ff8c631452daee5ef899db531f5264dc5a5e4e3643f9b3a3669805605a7d50d63188bf141350627d25722ebeaf2946047f1f796b88830bb9cf5cb84c881df6517b797b37ad78ff633dcb43268c5d52eca02a06b6cb54cfca8773b0a8a52d8a41a7089d646a7b4c79084b2071fc1510fd872600fe5393873d5787f55dfad7950e7bdc2f839081d1254d9bcf894879099ffbbc6c2d6969bc7c053d9052cf419e1fc09e387b68b117d0d6625854b8b2c43bc394542a55fef4ee593f886e6c932dde3df5c1363a34a5e36949c1bc93e8c937a855bfdd5f79bafb1d35e59b18f6cab2bc8ad19b4e3203c4cff814a82342a1fd72a8b62ecf03930b17c6b0c01c92fe0303047092ebd2baddd01659ffaee9d3f3e9344005ecc30986109bf0c4c08e503adc0ca6035a3c5195334b96ab7d05e783d4a2654affe2a3d5d15cad914c1249bd0d4a7cd6e4995053c241d593d8bd6614fd992de55087ea5e1fb0ef0e08486ff55e65f9f3cf114081439d1d9f0639d70d2ac2a1be27db648ac53fbf233c564d4a9906264363cba8867f0a77b751a2c2d824c5c8becc069bc189b224b82f64682584d409aceaf010ca3e2ee9c3ff20afdcb349abcb862f176c35b127b52a9b4aece978ad17aaa700b547b17eab59da27819ef650ce9f7e5ef18fe3cf0275227a098e99176dec1901af643c3b57a7f9b12faf75c1b05d1cfaba60f12488582280e23be05194f86d9a205b772ab031a4d64eac6e06570931732d6f822e2d1bc3e5e1baf4627616cc5470f509529c3e041d465e8825adeae44fb4863ff6da052c306cd27f52fa8e5eb607fa9bbb0418410e808d6c28994a5e18b66bd083785f86e9ed4a262907a74a484d32d46ed10582316201c216026fc7559be7dcdded71f898cbeb93f087abb992ab655d72e94eef0f558131f8d2a2468fcac20b0d2383abc66e7d6eaf61e0d21d875addcf363bb12fc2d761d5f02b034dadc4071a00ddc7fa3ec85e6c7d8fbe704adafd8e9f13f0190fc9fbb544522717abb5750c6ec773bda3930c31c3ffa4135dad65b60b20d356a620a7a1b65fda752c5c00ec5488d79605a820051b7aad8f269bbc4f64a8836deda30c9f2e9943f098824ec199691c0dcccd41f16d46016b0f6caa6291f428e64e1cd3ba944a8b0f58ef079327b26aaa60cb17fba1acc72f7fe7d9f57a4ce94a2f51a3f7d0b8d95bd26bd46ae5abe8f629694b2e9ff42864ded5ee1307f7ee20fa0c2560ca2b565b6fbe5d4fbb9bbf789071858f4f664b9193fe94c1203f60f0161301fc6bed2a9797af494991cc16b8fba96c28994a593e082a7109ad6a6743eb2eded399457c97b30840614f84163fd3dba90066e779f3a4212df296c12a9fe12764ee3d7a74e4298fec9ede0ce79481cde41f9c86d439cfaa7184c38cd28f60c53c5440d53c05630df20824acb0406b48c48e256f9197f18fe5c81c138698d0cf0e0d889ef982c749fda70aab9ac9fb13f154e7ead996729630c58a9d6f44990e8122ff1dd6e4bf0db3847853ccb998f81479cc3fd4bcbb88fa84f374b41a234a3e9a8c99f9b1b21fbca657ea6e97a9bdd506bbb5a994322ced0b41de7fa2d74aed7d165c8a740848c1158db9aaec982bdb029b9581a3404caf645a24f5651bd835d487acb2b228506ada0408a63fcc0acf75562783734daee897288e40ea58babea6c6d298f57cff5efca21f8a18ad225867d3b3d88bc21b41aa916388b9f7b931fbbb1666c46b1d468351457fffa33a1fe1fa81a773055b61a77fedf45b5e9d36db4ebf41a85d71c978f8c3ad7d161ccbeab3d919b48036f295d972ad57f72e744f67175328bac490e27fe13b196e8e058be60256d59a74997d873bdb352934945eee64c4ccebde42c9cde7515c135975cb7b45855ebadc00667090a47e5b763d11cbefbc1c56878835cc1d19cd6e45c2b25aeaced74a38cf587eb833b9f7bd186fe60062a164870a2f63cbb8f4e51995486c395ac9b14eae5c98fdae6e64d1cd8027dedee27da56fbe7a385959e19f9596977951bc57e64378a6a53e260a7a034c77d359670aaa60ebfaad2285cb9d6ba3c4f4db36a4ca39b691f90a67518062dcbc25fbb9715f84bdc9723bff09dcbe77dcf01ec100c1361e3f413bbca1aa9437e01deb5f1c89843cd0cfcd4f0524371bc5b645e4d392e2b799c5f8aa62c13e65c90352e171f30770f70c00fe253c7e96698e76288506e78987cc6abbfc8e0b6f611f57c8da64b6622770fb93d3ee3af0aebfd9137ee5ea9cf2a0b876d7d6a05c8eb8239bbea339194644e796760013327e93982f26f796f9c0870b635b64a8343a18dde28579379d3dd0eb8f753bb363c050d804e60390a7dbca8b0bf1ffc9ff4c85ae2696ae58f7f55c30073a67bf8b5c3fc41824d383ae29b15ff5ff6eabc6ac48beed5b0a452e5530de862c4ce2b239a881f6492d15179483b0a9ef7af79142a934c23b55a64a44941c92b3b1c2e141d33a23bedaeee9038aa5b027eb5566f6ef382a9e562254accf12b5376007205b071528eaa2b72c5d0c679111896c4fb064f4afecd66253742ae976201f5a756f8e3a8e344c18e88c521dd4131be553584e8dd88e9d0e4f84edc95dd7b763ea66aed2dd06a2b82677a4f002976b677ad6f62e2dea73cd50c460d9f3c2f0c98626b0059bc76a40ee064908a2043f9bcd12a4fd376920475f1cca42bf4a91345198dcfa52de6d5746218b8c3cc2602953f4a0227d736b258374752b4ad7644e54a479da89b573a638b0b0a5593996b8156531c688711d0fc5b4a7bd1ad22fbc9633d1ccc9b344d5cb9b017a80d1a8f0194ba011dec9feac2bc4a920b9a1bb291f2b2af99940a78b07cac63439f2607b6990362a09e5d6a5c08cc37bafaed03bf876cd8981c46570f52647fa0c0484fe0d1a383a912b6da189f43cf68260359a28fa02a309a7462d9c95cbf5826fdd240bd3f168fc058b4990e55ebbbc1eb4efb7a1106fba52126a05009c4c229b33926da1a8ddd4daf745dc456fefe45213e2ae5141161b2b91ce3650002874f04ef33b6ea4c0a0127a3c75feb8bd83631b1a14f4dbc0b59b8b02396b40b101d7f5ed7b212e3ae915dcd764f6814b20b99440f17127940e0bc7ae163ba40e50b6f22837a28e73364ae5bdb01712c143bc46fb4eb06dbbb0e10e79d3a77368eaf60b4d76d90c920f1b5c966147b24875d4f9f43299f55d2387280b7a96f7e65500090441aef0c0fcef0b0c8070aa083c6974d3a51406a0ed63dd0d12f276b11b3bb3f49f098124862fb8c51379432823e3803faf09e9af98dff527a4a239f0c30ed3c698d208e734412c69254ac2d0afaae5e05960e7b0ac613700378e88ccd6e32f2234f1cd308f8e2fa1bbcb722a6a266b5faa0146ccaf536c41d39eab6ddb2191ae7c4e18281e7e8915dfe49a5bdbbfd964abd44e2a2b1c5c9180bae9fa5a2fbf1577d131f6697a016c987d818e8adef99662c249f3a724cf9947ca8b9cdc7781fd2d635fc4f8e8604eef7e70e900e9919ed9b17d4eacd38d012fb6d97ae860a10fa7eaecb754316e65eacfaf94c44a6a23188a3364c1915d7041661bbd0652e5f2ec4f1ef904bef356945886b85e674cce2536b35c6ec6098e84c2998cbeb5174e047b3eb290f6b7ccf2023d7d57aaff470a9c455f3bda570400b39b1099f2fdcdf85593098140816d0eb31b0a367a4a35cfa33195b135107abd1f68701e6f6015cfc467275d061be1ef546988833ef6417a35be25573ffc97c4f049d5d69507ce91b20034afaf4bd19dce701ec760cb1215393638b561e2041c0c866747ccbca14706a757fca3dae5210775f588479151a796dff554018b69cd5d674dfb7d4535f8a8a4b8ce4990c482e9c334515b10a539360285bb89c06ce0c933b07a0e6b34ac7f3f80ac0b3417c85ba104a70410b7d200e60f725f47b85c3a34b74ae9f6436b75c0d71f509085fb44568d14aa582e7adcd5bc02ede8f34997b08bf574ae0c3e716ee4ae816ab7248e2bf61fb5b1b339b215b4f2996dc6afc8f05303195b372c5c93d0e1048b544b206868518de3ee186aef1ecacd9cd897b43c38fa3fc46c3e1c75c24042bb0576e2550a309ab6861eedab2213f03fd20845dc62644db2527b9a5ce354a3c172afbc39054645f224542191ea546a1c5b0b6217f8c8aded91ebbe925ba4906742fd965e801bf45e6fc0efe99b15a2fc1ca7f33623afc63dd296715e51b86f731e69580aa43510c3106c3ffa60df02a6bce4e1810aa0006abd859907ed19a9aeadf9ea86991e02e9ae60fa0d5f38f1e4e4ca1240d623c33bf9bf1fd6594ea7e098b7341a865e3198f2a3066ac0abd77c3c626fbbaec077792f4cec13badfd0d186ab1f0d937b0498833c4d59acbd1d376bb3e03abb0084ec0635e7063b558b4820dc91a9eaffe5b00b36b6224bf829dd1ac54e04246a535c2781f7f60137420f0e527334b0723baa2f96280cc4e36436f0a19f6212874a913938062d370d5cecf715aef7105a6d4c99668d6040063609964ebd9cadddd252e563fbf1036041a8832e283a3041e55ff1aecc67e6ea0820b3d48efa1cf65469d308bd8b8db6580b5ba4cb4538ae0aaade74cd66df164041f03cfcc3885a369caa323643fe9a0bdc277f7e5f512a44f709c278a852124835f58dee41188fe2b412e64d607e91c1e58ec728d1a33cfb0c1a9fb574686786c469cf4bbaf51fbe79b52eea2c3425e3ec3985b3e4556c97b2b8146c11489c64b5f50bfd77469234b23811f5ed49ddd7bad0c106dd8f4280b18b2785c81c3948d24048ebc0346eaa29469857ece5410617fa8109077b471fd13ce2e8e109c79ce1f38efddde73d8aa485c9f6712edad8ca5fcfa4a93e02dada734d7da439cdc7abb5e51b1586863bec9daebbc34f2fb69da8b2bf0a03fb1a93d76f2d58d4d331f82f562db13ad225c9374f8e2c6ec906567d334273f0bb48c51150de470161429008e81bf92aa8b002fbb258f2b42e31be8558152c2dc9ca38c9f879b7e900623ae9a4cd357f90446190e1ff5e48e8a09d692b217de3ad0ab4a670e7f1b437f9c07a902cad601249ac9fe46db8527fbabbd1b44cae3af06e0150bf0e3d898f6fe862b71ea9f6b727accfc18848fc79e6df63fa7f06591960e670edd8e2908f2c7b4a1e8c7068064629c9823a556c608ed3ca05a3ce69b0472dae032c2af3bf9840d9cf5f4bdf880feb342f6a29cabb195dacdd9e4f913e8b9cb108f15bd7a71c01b8d17d8283c3e8b9b9ce000a3f13ef46b28b5acefa4a93fc220411be66d01e848e2cd05d7b413a5c0069e341f3ef78558316bd96cb5cc914a8ff739bc8c1089204e83f23f08a6e9db007fd160dd71b54c886b1ee2dfc94aeec02ff3a250240f3c20eb11e0924ea4271b135d0b553430928e31d1d48b35c9095149de2a41c306f6fa61094ef991813ed6e73b915ec553e4c36e86c43088a834c3e35dd6d963eceb3b643cec9715fdac9469f175229bab9db87fc234784844fb987af71a9f8d4d738483214c032265db041a2339793da437edc408a7badb3bc83f7f3e780cb5953a363c5aefc66d765486862550ab01da3dd3f9ce8080e7f925396ea871995350b9f10e4e3a494d9ba39c2c8c5d30beca39fb7f887152c5198d06d7a989de1cfc4d25677fce14594242c57bcca1b29ad096c4c3cadcb918f97a3838c6433349149e43d6641da00706bc93027ad0a94ca9eee0751a352c4a35873e009310418e2617ecd99fab84dd556b754efb7c7d3a92acaef1db1d14df3a0e98dd74838142ad3480ff86fa2b42baf9fcbfe2d7b6eb475ab0d891e70b5e93aad91e0f1f6b1d268e90a6ce8c1beda3c289e3a5a4ded514637677d345982ebed66f40a73667540e80ac6dbac3cf24ac6fbd48d8566d9ea661608e239b13f6380bcbf3f18b1eadd1b524c2f043cd9e314bf75def5edbae69ef1f59e76a371b8bc59f96626ff9811c86aa34e38e9f90ef01d8a14f30b16adb470379b3354a25269e2aa67e6770645b9f9d322906add3120bd1a19c7e877a7703ad7bfb8ef59994f02da2aa042bcdfb4a8e59153e80ab66d462dd4b9ab643c9cf8ddf44c9a1ff5355f92969c874249821fe085cb8a0a039f61cb2d117d66d4fe514f21387d7bcee4a1d995216f21e9eb05cce53e7963827eb5fd0c168504d760ee372ec5c2f58c2571b80f7822e029b602b299f5dca099d1ebca5911ecc6ad88769c02388e1597be7736eaeac70770adc0998838dc46b262aa3bfc4ad934be3e928787dc0c6457775a5b0fbd871e2596e4899c4fa1df34f79b57de0975d7724ceaffa4f86169351ac22f663989aeb23a198abc8152f387596526e596e7363279250c41d3b8ac976d59bbd7a8f63e7e6105a5d01718081350b1b0fa3858d9648cecb647b637b6e63ac4064b50f557f1d250e1c1591aa83fa427fe0639f049724ee6069ce9060e8b47ae18a87baf807357a347758f815a751c6e17efdfd60dc287bc0329b44e3cec5cbdfad86f4b416cb6a6ddd50174a71d812f039f7333adbefe15b6d65f37c9734399b3c174f22244b800adc9f71c159d9b11cbfc3c2eb2cc7d9a258c31e83c87c3eb4b4dd4ccac632559bf3ab8a02e5e32bd76f084f0a356caf35a31738a1d8fa35bcb63d5006632c55b190e8d297ac80eda0c6291a108c3aec75dae6e44f5f5ac903aeac1b7d91760acc52fbedf8044f6119639ad676a7bf1be34ec673f4b20a633a0ccde188b7bbdf4cb8393e9c838b40a1a5f1e6d4fe65b81e9d2a9a2a77859eb06f0754c06c7a5dc31f45370da0d0e6ca3bb2cd9426cb4b884477b9691658c61733ecd7ad261e00b0169489b3f2ccde0363521d4c875c30b0b352443924f093def9e30cb75b3362b +Output = 2f2c24b7f8d33586eb0986eec98600242d03932fbc11e201139af8511d60fdb2 + +Len = 49312 +Msg = 3dde1d6ffcba7dad645c4b6cecaed3956e76d7b2d736e2f62350d97d896ed3d4f2212abcb0c9d32b6db4ea94618a9168c9e8fbdd944bc4ee5f3084a3a379a3922d136fa6cfd66b1f56aceadabbf6ddd39e2beae8efc2bee0ef53a3ab57f955ebd6fa11b4c1aaf090078c73c763bb5fddd588cb5b526577d3bb025f1e0cb590e8d61f3b6fef0d0887679cace2bfa1be8e5647c6bf24fa98cfaa84e0832976fd9013ca135dbfc65b0b6024beb3386fa3ee09b0059bcd4ac8dca6234d62180444eb7643c1089a9f9224d96bd1c237efb506d60bad77b51db0039725ce4440270c01e7d16ef8e95e55dabbba0b9822e79ddda69fe9db443bf74b63d38daf09a7fddb4fbd42b312cc4b36ec5997bc6220027b5fb5df50e26b46bdf375af2edb4bc080945064c37fb11d3f55909bb660628de9eb95b75df776455f2f535f461edcfdf8a0cffdb096d573fedea7400f8374e62e30879a8beb259b3bffb4c3813a235b4c59853400c1fff37970e5ad4e3220b45218d3b061263ef1594ce2036698e58383a9b9323d67f948baf1930bfbd72c9f5e8ac020671089eebffc23487d9eed1da577b21eeeef8918c94bf9819ed96151596d97132511d03b77f9c0ba4fb502d0bbaab9219cc3780cac645f38c0a0876f4baba1b02492d97f892901806345eb44cb2c1663ce4a8dcb6d260d57e89466a43d2b2320ebf96d63fb762dc341b77122e0e4110b0cec92fe14774a079f1dc59535d5688a02b0548fd7c78eaa72715c12ffbaf242df114d4ca74160706ca36eed3e91b717f21d56aa25036a5e7ddd74bb3296002fcd21885e306b95b9d78e27525d4757ee42aa3b5ceb140a06ea6280c6806084fb608409dbb6dd320b6846b96d9cdf91397abeca4f33e1b6cb42674adaf200c6cd20a3996c427f7e8da833ece50241ad1d23c0cc280452b5d50c5698a08e5f0ece94e4ffb9db39c3681ebd87629756f3c4c41a0a92674f514bd09633c05e63a42544b0056989f347c3534d548e6404aa56e533493362c0d055178fe3e16af5cffcb8707124549554c7cd49190e70341cfa0e7354b3008d7b1d67a96fabb8fed978798a0c944507309b161b9f8dc4cf8fd9c842f2bb469f9ac84b4ca1c8536408c30e689e5f63312369b629aeb166bb4c1b9a08eaf33edc758148e03fdd4011a505ff70ef2db7fb775633dd0e2260e29be70d2d0502ef2d536ee8cd129588ebf765d50cc6a7474e728c179e8689ba2ac365a8190b91617a7eb7b27be29534dc480c17a3ec741d105e33e9d3df8e7a7d0ebff335c4479dac3c852e5377884ccbde224d9c2a3d412b817232e6e1d8aac2c21a76e7f7cdaaa9d600e5bb9814d69f03ceff6146aab9852472793e541051e128a1ba986eca905b944f5e1c0fe1dc42fc38b65908628f088e5b464300dd78c1887946b1efe758a9bd9b21dfa298659b1489f9ec3a0ecb9b0954225dade8264c2acda29843cc097a9b0bb76a1ae17a9292e95182a2557325db8593f422d9636955c357b73220abb874c8a7273e63220fbd7f45830ae091904d172370285737005383ec75838b474a91f9797cd8c765fadf745d5738572cc3a7325a39870aabfa6a36e93900b7e3183ac7b6d3aeb44b3b3eef2167f4604da631fdbfb7079bc63de304d76d6f498a0ab65ae5938ad3ddbb22191a1908a6fb2133a1da536fb291b206143c7899ec41084fd98e2432cc2260d51acfd63acf3e1cf446337389f612411a8fa3c2464612fa4b6c3aee6e4622139e19c80754841e7fbd1253811b1053d3699c91b33dff04c8f33d6f5908eae6bdc43e8e121c6ca432d630c1e3eea75c4e396490b348c01f5a8f71b8cdc65f754490b3a8615b30d71d87c60503ca64339cd30f272a2d316c9867339ab2724dd8924a9d9e5ad877c02918fda84777efe2a37fc4df80b5f9f26bc2a99f70d25e158d3a27f9675dea653cd0fc3119bcef714d84ab3e1da8c0bab9eafb4e6faf38361fa77640efb031d03ff8ec28e0620de6802cedce69ce30ca6c25522f17d083422fdbb5fb5a9af3091bd8f4150332f04b26bdb217cdefef2c6abcd6cbd1ffe842a41c0ab30fe3d816b6b83d81ecf140a7268021a0afd2a5e89df7aea903020e3d68b39dee78538a01fae0eef4026aa70368bd63f17840fb04eb1d035217a29f3b62e89737fcb2aed2ce9730f4ad64cb66d4bc9f929101988a3e78fc4c73a740457a02201303c7ef8f19272b0b55a654d852c4fe0c60dd26817d4ec22181d99b61984b5f0cf55bf242c5d606c062f9eb62ca1ea8e54f9c4af290e87c58a700589aa4097da93b3662f2b9edea9b3c25380a2413c4a8c505aee45e8e537a4fe31ff58685a2723b20e5a8ddb3fe254cf2e2da48e97bda2ae1fa5fd1876f0ee04b967c2707f4f05ee1236b19726be5f82892da1ee8f405e5f8d66cd01df79cc20068366dd69eaa0c40c64355705864a98eef118f5a58b06012e811449613ad5cca3b2b413cc629ae07733879f7ee28c8eda2878185ce6402f7db58133bedc81871b8648c7f95f3aafcd4536d4d54bbbb0d5244ddb37fa8336e55492654aa755dbc86e834e832926ae8919b19bab3a5ecb6a8518c2a92045b41feeb6529753c94744dbf23bfc58e549252196688336cc1b04bb575323000e2368046b80174a62361b7f23f4c786dd2c4bed33afdfb9aa4c2e5787f158125311680620826cf3a734b6a8872d671b94b447dd37f6334b6fcb61ba39419acfaaea8a9483bdeaf80ecfa0e89a2a7d8f927db38211b0005493152973c9b88da08c2b6a0ff3b723c01f6364cfeb905d6b6cd5197c3f81d97daab5f014e7ba832d5d506108fee2a9d44fac6ccee9e399377a76e41c3fc0112f1d1a400de1ec2ddeb50629f013e4dfbd25e733561398b36c41cfadf2811f69d170deb3df66b1d02d29990f55c12257d318c052f5f7242e72594bc18fb1e4260d2c6fa609d4a03ca101a58bba851f84cebea4464f131a8d023777d95430a2e84ad659a10dca3ba5d2f3a8499ede50f8f88e2f7791e5e0316452e05fd08bf02312d5093f5ba5e8be2b760da3634b5b26f8edbe819efe19ce4141f1cf95324068edcf0adb83f64be812ef6243b84a92814873dddea6aa2bb6017b38a312b2182c441adb001739b9b641e63284fe6a9bba5fa6f9f94998aa8b2d652164c989ebdfae4f063775fec6ab00e0faf1b619db14a70dbf6c0847faa03d9658af3a28300594e1f8fc30a3f729087628047fd6d532d70e8a916326a0a7ba952accd52b8930906a4fc8d7c7dfc2a10c4657ac202e97382fe823dab341141cd834583af26be3194e5727cbe8c50a6319d245cb942bb472e8547def7c3047ecd5e1cbcc1b3c9fa814cb938d756b62d72558696e91610cffde5c1a01f012e59324dfb219148fb8b543f986acfc276e75c5453d05b6632337687b82c2ad5d6fb82b7a85926ce9d0d9528d9baafb7d7fb760253b1151b679c22d1f4292026438b4804ec0d892bf7a7cd6e42cf7e1f229148c84de2211bf832872c3c4009debe32099b8fe5c049518283799c5244e1a0d35b0c0b0b87502d1c2f015919eee48f184fe65988d50ef3c53fb1aeea09e596e7363753d34da14d83a2b6145bd620fe64a14c129fcf642499897e4240d6134ff562b2eee27df5a28e66b533aeca7a533f883581d1b7322e26ea481efbb253122665e4a4e11e36726605647ebcd1dad5d08b096fc794605793e9770bc4a68d26a1c9343c78394b0632072dbf2af328cd403231a4296ed5e8090f73d143b9a9d48f150c804ed51ca61bf277bca3384c83b60513e89e4e7b28afe2a4381ff38f6418d2d3360cfa91994950a93ecda92e3f5b8d1803ce3b3961aeec7308015c271e6387f02759b09229e3a82d0d504db7495651a8bc623df7d92db5460890fd5a4999bccd1bde00079c11836af1d52dcde8d0d92cdc025c9dda55c3860175dd0e2fe1fad1da43f1d83bfd68c8b2044f5966f1ae0a2c55a114aa4da09cbc57042c1664c7642b2f8ced4eccdfaf1784bd4409e057ac71041342913ed4eefedf7b9d474aaeeed74ad82e1da97087eafe7f741ac65c7876b6ba10d950e5e692b549470aba34d7a73ddd84efbaa4b8f1199bd3e0ca46d802149f66c8aa5deb3f807614a7dce38860b0a3d50e2702aaf57e1b48a5159c33dcc6c92da875c464cce80beb65d94267cd4a330bc01913c6bdd406baafcee6f1cd73404bbfd8a0bb02970fb38dd9d9ddb5b4940c4eb85d7213c46513481ead799dc30daa56fc7b57a9328a5667033153df96cec2002b6a17bdf63f3ab62d773514603730b409dca0896485bb3b80d12f1496ea131d9bc21e84119c174122cf8cf9efc6c723264cfe69d206ca517841da1c5fefe9ef2febed30be859233263ae6161bc356e97b52d91227186bf0120abdbf97e52bbc106fee89a40093d26042ab318935c54f3176994d09c0866276b33fc5e7d4c1cd65d688566c180268f96e4413e424fc9d7040a6e0210803edcdc4c7f5f6c5926a57a62261bdd2c73b18461784d299e21b5f39699316f7cada3fc6bf186dbf88da0e6926704038ca93e6538d4cfb9a611127e848309095c471f3408ef6f3cb8a67b1a6fb4c9c51f4ba8b1c0f32093260c6efd5ac7d39ebd7f912ba9c5731f0815768e609bd7a252bf72e2a03ffa166c883e089fe44b600ecbcc3bc5103ce3653f35db0b88b82bd5891f703d27b6d407f90228ba44bb2ddec002fcf15c173a5e983b58c707d5b2064d10f31e56e15c76e35dc63085bd388bd0e7d7a505bc8462b4f9b02995cae5635ff9e3ca3a041037dba379a903bc10b492ed6466a977420019e359b9bf02268b563cbaa73d998fd95665ab7a6b5256e76a762bacb3e203b54baabdede01605dca44bf05bfe0c2bc9c826d42b18fa7b72ec3485edb1873a00ae92654cb570f3d5eeca2d4ee7e68487c569ac41992eef058c8b1ba03ec16560d74ce83c8b9d81158a19ba0687b32aa1b2a07c44586a320dcffc457a984b06543a3caf53ef163e0a0acd2f0949fc7e96346dcca9f336d50a2b0aabc37a6ead696bd433296c557b21e55704cdcb1d00d3af1425e8e60f58791238a71131b6cb0ed0c60c036fe5d8fbae39d3ca77bf41f8a7561097ad7e3cd939f8dffa7aaddfb2fd64a2988641c805ca080495ec3dc263a186052cb5ede2a8f6edbed591de6c0466428f5f2be3d8cecd242fa67522f2a322367c2eabe8ea76ed69bc3933b2e0619fe23aaded667bc52c20ad82bf096345adea0df3dbf9c4b1620f60abccb5ed590eb63d2b372431776b8016a1264b94a9a9031342d28b01f709313493b961d3593750ff4d95b78a540fb4f3885783f77da82424623c3712964791b087a64142f0ae24f99b859af6e99d51bcaeaf2d1c002fdfc9f85568873db1835cfe0fceacadd7b4d48b833907b678c8da9aa9b162ffa4786c6bcaa9c05bbba8a27d528480ff5882e8941b3c2d39469cf5c2e3bb7cbaaa80943318756e5eea54197c1aed60438511de4bb9fee7e06b4066bdd9a5b9cfa6aad9f4bb45e1d5a2183a80d573bb38f1d40e28ec0bb85a7b55d5f1e7fababd3d4996171fb5bb5e97878e01feb2024e236bf0a22ded2ef5db4fabe5bb44eff1b2df6110d22f6b382f047ca60322c5e1ae2c3e5dfc1dac412f80513fbffeda0bcbeeb3786f2d6210cd319eb38f408691d6a74f92e307c0cadcaa7e3662930979ccfa15c4433a306716715cd10f85b4dd516f9d175f460d0167207b803fabeeba5a74007afad076b98f564f74e07ce12292d7bf21dd52d1835384f193c3940a4bd90efc12f27a85769c42df15ce909c100f921e68f9b8ceaf263a48f78b05dcbced0d6112c6b2ed2cc1e9944a066b36244c01434320e2450353d30a12025be67bfb01e7f0e3f42e5a949d077844574fbdccb7b646df69e51e60c1bd79a610b807878ef933d6c8c96e88ef9126e50f696b0627ffeaa1aa1f5ed198db94f2ceb1fe17070d621bab3ef71353c9dc84dde3aa8cc488b5043d64532acadd0a74d064ae2e0cacf22f060f82c86c2a1f905d7f0ac53fd93c739e4489d0da3a30b8e050c630f2407a9d83ab802c9b3a6694087bfa43dc69c76c47507178398bae1b5906a4c46a7041c38ea37d945373280c696af78d3cc30c7ac2e888657b49e928b4e6e85cd7b50e5d9177d9b4374cfa65eadc8105d37d621b8b9d5d4d21ed687d8e81ff6ecc7736a836a932e0b950443d2741354232f17ecb2bef6e739ffea2764058588ebb3f315fd8a807ce5c059bfe892972d6cdb799160e4f1a9d77e63d9f64ea92111695a4d11214c6b191e578269b05c81826386768ad4d000f3c4c807586b92aaa70e2f7985d400e5eed685f41c756b3aabf0c604fa369bd6d4f8a1185003480cf5cdfb03224da2d1ad106c7ecb8acb3e30aac0a377b15812c3437774a7bed42d43cc4552b0343d169ff692863c96847759b8fcbcc8ed119c08cdd08325463df7d93395cef730d69e09ad817638429fcb6d4202b5b693cd5cebbd37ac91408b51fe2b73dfbeea77503660c1b487362324b6725bf8094b953ab43b315ab457c722fcdc68edcf0a27146d35d8aaf11918697a6e8eeb89bc701eaa7148f25731f854196dfb60f037efd2f55450be3e938782025e23f8fd8f66f0168503dd407626ce9e06b5a0ea19d57217e6b15a354e7756966ba2862f6b7f98409fea8338cf5978d3d11d158559e4dd1b1381e5a0eff0cf7dbd94fce5f9c4fe70e8864c06e49a3afff3bb28889f21f949024ac74521fad4017b81c4e8e13c0aee875ea1745cf0fc6b97173fbd9296afe8dc9367ec8a9e4e68cdef4500caefa501a5fbe848df64a660e3bac4eadb4ae842c8e52f5fd2e323fbdc68e7f45ce6b5f36ae38b4b17fd2024ff2b1dd822458a9defc78665a2d23c02d073128e4028230afda0f045a9c352ff14f2b44f0e907e4279c1d4c5a27181c5d1992e941ebdd88f87ba81fe40be253b4a98ef174732ad798d5b824879cada8b0560a3cf9daebbc92fb7a43d82f77f1fc8a438f77633fe8a531ef6b6cfe5309e9753da076602b3021e21c3cc17754af2b79ef6b8439c58bcf49199d74ec86944adf7390421c1aa807b7f4571a8406cfd3e0e90225574a558983dd3729c7d6fc670d6298d75f4878d6f5a92f5dd61cf88867d70fd55c3cca666a80d51610c286c0777136c0aa2326f2239121f5ddf59dab773fd11ea91b5ee875cad3a467b7e7d9a625d6789d3926ebba42db9d1c2f43df8769f26bde7487823e11df6f2d45843532071479a8f91d463234b89e01387f77110be0375cc6d8b61bdc34d0f1f9d045838b5d3e4df16e7413fd45933d9f9514bc8c271bb490c71697a090642623709d13293d510ca0af17e7f30ef711c3493ae26143837650d70649f56eb35a70d9ae7977213c5595338416cc71343e41f05c1b31a20902858d17ab511c290f507fec1edb957ac93da05b38c018f513aa2efadf63df16f9ad5dcd243a454fa550d7f89bfd2676d80879ffb6a472a4225a5989978e5727bc46dd895d176691ccd07636492240baf284350438bffabbfae1049aebf7b6c5dad060feae8efc99e68ddf37cf0170d1a94f45eb07993db6fdccb4a145565a7bc5d89c7fa0f773b272b7877f960133457cb83126cbb6982fbb7bfe3f2c20deb41dddf49ecce76885f20be37036b80470ed5d9b49fd9eb680a47d25c708cd9009434eedde9ad5478f04e987ac097c60fe6bbdc8c705b7f544595edfcb83d33ad5c6aa0ca193579d37fbdee8a5b6f4d54888476e108ca8f0f53a8f90cef5c82bb4188dc5aa3ed4e61b776a9adfa787edd9c388efd8fae8262de88dcd440722ef3ed9589d3b05d39ea3d80af2cc63cbf74c9e00c262c8dc0128b3e809cd1069f1a0599917e670ea335bce3ea4fe64279dfb782d7a507f1b1ea04d1cbaccaa03cfb349ddba3f187f50bdaa8415d821215e70f29d9c24961bdb1f149a74b54c96f5d20a74f8a755095343fd69ba0c435f95479daf9c41a664c2ef9affbc39707a00771c2d57a1cf2ed789475e25ed2328fee9c9f1ff5a187c62ac50aaf5abae535c2d0f355bd0ef4639f818efde0d4913e7d217f339b074c936dfd62aa59e5e89756e544b79972de6170ad27d46ef3db6dc8af831eff733d1bbf48bfd608429a2e8b57bce35770394eb4c14b4f4f56978698efb1c6690ee3c6e84e2a1aaef6826229ce63c23e328c923364ff56cd274df0b58913142000c5fdafb8aa5e942c289cf7f4423a98dd5f95b53f4dd12e8b8513e724b1f06e706b26de2e488a030a1542be6e6034ab9c3bbe02fa3ca8bbacc857f668914399865eab3b570b8741b8d0be46e7c699c195a677e13cd4c3bcb29d24a9ffbdf3ea6c25f28fdcfb3b965fe17657057a4f20f02a281cad1e0a79c58de2c98e3deaa9474865a164208f4c27d1d4b970864010d64f3779f62166390b1ff91ec0170e1e42506a3b98836baa37273e33d1f152db6f9c0dc1bfe6bd46afdbd1703a55499182c46b23202bb8f7b86b1e8fd0c46fc8e29912bbaf73f9e6d749d287a7ff8249322ccf22a3205c7cd126db9314067e1e58ceae316fd20062acf2652bad1ba18f7811fe00ca6b4181abdfdd0846bf6726f8c44ae9a70bbc02555df023f4b38dab7cf960853c134d4d6d1e8cb50df81228eb024cadfe24130dfa12dd3825ce30e5676f5d79a1206a2a406b506412b8676b5810 +Output = 1ef2bcf74ed341a93222110ec107c34a84f2e727e39d3ce4d5ba5aee4f24456c + +Len = 50408 +Msg = fead8b5f0a48c0ee105769b0d81721e17cca71f66cadf430b429b872824de850e27ca868cd6341f5622e7ea173fc569b4390caea8e491101ca54f393ad2073a8ef12b0f1517b0d58dec790dc71f7889c77517331f6551e41cff40e5140fd1fdbacd86ba19f766d400d886708daef000b9f743274acba631b4970d25642cb3511a234a121be3ea9d575dacaceb7ce07114463d05bb65e28b5c2320747bb74fd71578f1918b6b9093ea02682d60f7be3d6ed85158d1e2bb537c1a175cfb3dfbf2455529c2f90d1d5a416d258c7eadedc812242c8b3ec0851cacf25e39433f4c35224e3f20e536d542e5d48114a50df3c3b6c02b37426dc469673261b3e429b50214aace35c0774cf05ffee78064a66492b512d9c79d691dac2350ce376e9bcb0bc511337c1b4d08e50842e54a4df5b4d7a5b2b4c6a030e56769d4004e42f3f2949c182b5e76368d938726f6ccb18a68e4f12658beeb63b02dc3428462f1c0c04f1206026731c24f8e553188924fb2f55d3fd4120adf6002519812d70ffb80c89dbf8155210e5ec327eae93735693dfe92da428d550cb4508580cb74cfe0c25ff30d0090164c8a8d12c0c47f20ae59c94868f83707f3df2f4bf5e2fa0d21f40b01731a4fb17cc401b16f49ccee8fb4f9c0647b8bae155ef2f76fefb3523f946e2b9a24e07d2f99c5965eeface97dce14ad453317b1f1a2401a67485d39aa31dde3dab6fef3d58a5d24082c9bcc09038e6193b547be0957ab477493441de24afecccd46f79fff041d0d039715e0a203eb8fc888b81cdccd78f10046f499884e2538ea6b66ec0ca59993c9a5a7c1e93d907a6c13d578ec925d99a2da0b170cca05daaa8ac952aecd676ad2eede0a3f1f31d3f6ed1c3ca944adb3c4d2e420d03d0504963b9b8e3609eaf4b7b905142427340ee17b18e293330dd1feb81c418315a75925d469d932e9b8c3d0bac96a38f41b9db45448055b0bd266a8f01ff385e2514ae20b90de35cb355ac66aa786ddf45d02f7ff260f312db0046c116bb16931b75c4347cd07af4d051bf12f0bf493b67cc124e23f8ae6271b1db0a28bf5ad823dffd1ff5ae02fdd9c99f99e833deaa8ff7ab393f0e2ba7668250f19fd4ab33259c816b8e6f2080b6057383f99bd534a59723c8ae6b15e9a4bbceffe3c2b1ae0af2779faeda7e844f4d64568ac1d5e191f5a183d9d7123112a47cba5c511550b82a0744bcb9c4118ce99a9c056b87ba3b594ef32619ca86988583ac72487f21188b5be122d29a2f55203cdcd16292c68b0a529ffefbe7f01ea50a5d8e71962a125f98fe47eda6e7923c739f566ea00e6a52d40fca430e778c4d3a54169203728fece92493d493402b83666cfc565698be77fcccf0bae924cac53b1974746e01757c74d96e4e0743083e3ecb2be45e6e71c2f35dda2820fec15534340edf7de0ae5561a84022aaf711b422444bde6098697be14aee555b0d57454d2e4e9bdb1620bfd916711926642f2f3b60c40d031c90eaee1c9608415a75dcb08d9b6f2eabb50404ad69fb209248f5b0a6fe39f004cc57405a390b7aec046382dc5c241fa8536b09f49190438a454faa9f622acf580709028c3e24afccea22eea0fb825514e43b10734f9f34530f8551d156a7471e28495a3b0f1c880011611963df5179f74fbd43b30cf29ef58cdfccc6437a0060175f70ee13baac925f682eac7059325a7c39c83b314f2779a6a544069269a325bc936d2db2c8c489be7e53041662294453f6c793247f77e6441ee017a93dd876ff2c7980540c77ee15edb0f2393305bdbc3e69444f4a37444e93c983f2bd465ac874bb7061506ec84bfb6ffe41956fcd9f57d5d519770f9bab4c26d2d3b396d9ffb15c84415a501f4af1b5b096500f7de48a34cee9d0a6f44591208ab6e56ffb8c2c83455df2c6fcf917ad91a02c8cd4731faeb8291ba55603aadf35021d7ac9572d59391be2786640b47c28c8f18fda345e6a1a4021b3cacdde8a5a1f215f4a48fc06eae4f10d6507114dfd7466bf98108f917c96aa79578b774a8275b9c58648e0b1e021e62e01367746990d54c515edf94a66937e9f0525bb46346caf54863d2383a1388a8243b62c8f83fc83485ab5e5be619f64ccdc84f3a7f86ccab551110ba3b793a5b2326d785143a8bbf16d4e9b15f42225a8e58e669456ddd190efaae139aa98ff65d644a5b46278c46858a26376a88489dc272c5e36d7278d8c69f2ec6f00b15f443823fadf67d6655423978509042d5810aa4721b402b2c652c6cf766b43458ef65ff3befbda29685dd41748f890855aeb77c5f83760e6438a0e2bc555fabb5524539a3a2f44d8932c7509f668d4f5571695902be7772ccedb4aed2256ae7d7a761d02b6a42c4daf690d54d58359e316390c8e02ebd2ea2ded81fdd596e6f2c593c41179811aef83bca5e22e71a6b860fbe5a9c56cf6892969bb43263c2a82002450b1cdef9626d9cb449a485a43ddfd0427c7bb916d728af700a65d700295f1d0cac9f816295a7741f2646d65b9b8b5fddad22d83be0c183e5911c15cf79362403941431d5af326c4b728e3ba8fb3508e07b1636971be9be7cd699b2590e5191ca501f62db259aefc9ccef3824d35955eb54ca56c0ef2da99659733f656f1de0b17f0596db8f5d793a83fe5e57ca54d16ec8b3bb41e0f9efd2883d1f5d0207bb595f8b406f42d692ee461010aa36d405db4566c68297dafbb1e15bd4a86dab6c32a004e1fee6a2b78561d8f1a4af436dc169582b1b5a3d57a4f363e1e008859dddbf170e12f15e616085cd63cf9a2f73b1930c3b64cebd8e2c4cc9e99c7902aaab2b162743e9462b302041f9939df4a21c60f78a075bc7f9c84c023e2625cf2d3b6296cffa35167f54afeb2589113f936231be896b97e935097fb1622595278ffef41d6aae7b2bd84ea33d7a38aa6ca233b3a5dc19e9adda50664bf8035dc86d766e2e79f91212b09ea8ad69faa01869013551d48ae762244d8e265257c61e20322f2e80329057b2c50eaf6767c8af524b5557154717b2dd5155f5138b949552a2b5a210137c67394263d805085aade882820a10d6e11c5ffc5c2cce271fba7f48a03dabe44ccdcea746abc544fc90a6474a0f59a2da1b16af1f31c4b2ee1a00b46d45b65d77e7dd54059f2ab6150425fa2bbb5243691babfa1d9899a7762081467b4eb1c794620fe94f26a7c43a54c21b85b28d2124ba8a6db5e5df8d5e6a6baf68dd40bb18b8b0c771d6bf07e32f053c16797cd483543c6a969de8ccfd543a2fa465c5c07b687a8f2c23f2f995ef89dc2c74a3c60b952c812e3567fed98a7777bc7cc34032ddc7a0bc92c601c902aa6c5638948e23e9f531fb20bf8b7959adf82f86cbe2e595229cc1a7bac8f325017d1239c19572cf010d6bf4620b635e48215c1831f0fa2b15e3d9d743a7bab3097efefcad647ea0ea741f24e1e71e04c0a3f0a5b822f71c0c0653b5e33686393cf26af5da838e2c1bf68336d1b70ff9c1c05bb3a0d142c48f84cda83bedcc240667e4b9bb6b47bd000516be93f3cf89a6371bc69e8483d11adfa63290461300105ffabcd29421d051406800bb15c350f848af5303c530ae38878bf992c7e159c54b2b73a286b3026a08f5c1b9a581cc22a584ed631bbfd8631cdd41b5fbcd9dafa9e582cdcb51cfc4ff2e56121b9177dfbe4b0a5ee0a7cc14f018cf6c5a1e483a0cb74e96caa4a4fc63905246f068d069f3501e39cc7f15e8a1dce7485b79e5fed42f4ba01d220e7b06ca3aeabc7e626bf532bd9627bc3238c2781dbc88670358a0ac1e7c3b4078bb391a745fe8589a5034714cf69ad5ad9fa2a8f74b595c0cf1e2bc1b8d9d8680577b2f83290c6e04b1218a60cd8e51e487f2bdf87756cf7f352aede756cc6a91ba5d680bd881552e095cec7dad8ac7737c134595c2f937e6ace9aff65a3073496e506262d0ff7472b3372617f9188cd6f684ce53a0c93bbfc39f70cd1a7226f3dde49d2cc4cf627f5950b5b442a0488b91d7c6b6b34f218703cceec019f9fc4da39a76ce068995b0662a19d71cca510db88cbd335ce3bfc907e26893db4079a339d28ddb28a684926433d0f4e9ef5cd9d504105e102f3cf22a807cacd0ee05812b3d50b8adbec5a1de0e59923c97b28c91de6eab6faa4f8ef617997f8d4b5683d23b5dfb083acf6b2e0a4233774bf872599c368fedbd5e1bf5285d8082f0b317c94d0416ba93186afec7f95d3c84a537b6adf68ffd00ff15a22327543466c1b99af2f1a04750170daab80d73feda3f5913842d303fed990877a8957f2425f8e5a1bd950c310a61efbc6aed1c30a52d32facf58f5090bb26100290645c4a6df28980d6cdf0a2a8f6dce4116ca747e0571f6dff862eac3d1bbb615185cb871cafec882f77d3528d6244aeb28e32cdd4e82824689ee77be8d85140d4a38520f72d4cd9eb38b449dfc9facb9820adc4b6ed117939c1c22443c399461fa4d33e83d5701b12f7daaf2593c7e4cb0b60540fd0a31379d606cfd7455d1c3c72fd094a0d22f7ad9c8eabe82773a1543593a365f8a69b30c5fca62ac7636933f34ba8d33e2814c30e1865afefc6a93a888edc43cde2b86676eccec6af74d60a110544a6d14b1c5c37c006025288a585eb98252eb71e1324d01d723366580bcbb272044c2c53b480feceb669b8803c3e45fba6b01e245471bdd9b8f755d7af7ec0db114cb90886384b899c6d8977176c80fd89506aba22562566c89ce3b96a292288922edf323a8b063ae1952e35de1783e7f39703a925daee0dcbaa77c5e6d6c0c1b07b059878821829ac6a0d82384736010e0b52b806050116e9a77bc4c88c82ce93ba9503e724679e26738f26cd0581920236bdb16ddf46c9491d567fbb5450f66273f63b2f79dce177381ce846584ce4f7a0ad5a0171a56e149370bb65351283462e9008f9895f39c6411d914b497f3d14cf8b7d6bc2074c719231436e37b0bb6674cb32ed5dd9f03b17f8e983df02e6814dbde053da52ac89a101de7f6212e7ebcc0f80b2fc304c004117b89722bd2767a2ad4c5fc270d68448485340bf214efcbfc4bbf16e4e963a47e0c62e1a9947ee54c1883a814712890f6e6b5855c33ac2d452ab51bc191514b2bddbf1d07c903ded635e8a1fc1a8c07fdbee702ce1f1649321187bed7b13b40815be884b50487df5fa94f8a5c5df521ff7a42f4d64bc0b8499ca16095bd642d450389a93fbb8d5f2eef32b1a3a0167772b543ebf32e3df302388cb19a0a7e79bd511cfb167286e6ea643cc860a542610ddc8448a35ae071e251c422334cecae70e11d1ac7adf6ff08c4c82f21c21b87177c6eab75365acd6094c2232fe93153f62ff458c1e27010107d5f66558af45225f17d84d764ff5e135e1134be63eed2c39a5d65a3a464c287fa8cfe7a648f4acff83b55485b50bc613a3bf78d4167c35fcc92a1db58577ed5c8bb680ee32ed96bdd129d568df150d0959cbc0b064eae21134e9dd792cabd80747533918b6596803cbded607153c3f81cde22c62705fbbe1aebca26d830f72e6a44d190c1c60ab383779624a9fa8e3e2c5aac2d3820249d4ff4b7579d2cc4262694d28b3ac29e6c3dea57e19c48081940acb8ce9e2fb1353ee3d5d856009d0e460fa6ff3aedda10e8808345cceeda1ff64ee928dd873a1c4443a637976efa5d24ffdf5b569a36580fc4a8bfb0316cc8b9abbdba8ab927c90c9ec8e3d5ca64895fffdc3e226a4b88104148cdeac2489a076d96f20a47f2b2045f8e6ba5a55419638a3df602d072579660e3ded103e61a6bef156df0b6336db800973d6b824193cc1975319c6f531d0ebdfa811798ddb053baa98cb2865262841c53e7abd3c57ee648027f3399666ef5b2fd5302d387f25b5ad3ece42ae827152d44e8fb2c58316e70661d8cd114b3c7ea8ca337568d56ef4a150cfa265d21d79dfabfbdfe6261b13d20bafcb8f68201cf0910399456649bf2fd4b591b39f947f8e5ea88cc8c765b08c2c607b374604fcaf3286e1f6b91cdfffd46a55c06f3d2c886e7c0193ee5c86dccdd225326c4ee78eb3a695a456501db857d536b3cd824776e361856e23685c68f5ef11a76268a5341e4afc76c64e3f0266de7eb43eca9affc63e6281eff1fcdbac9e87bfb1b8fe4b7a5a5f95907d0d87086d73ed4c7eebcc1efadef5d95f2cdbfac7cea2e0a8ba78d0bd06283c4451ec456a5f837e040384f37f42f26a1ab510e8522f77779ea065275d3958530dd1dc25bd88a15cc5aad04db4d69f288a5f247d28f266ff0479ba8721404d5c3f56fdb14f376d6f29a7583581e1259d17f1bcc22f5f99ff410d1ef9f1622edf41a8f7f006b30f3e99c4c3b2ceadac512a3583bd50bd35ffbd243a83b5e923647d8f73ebcb46b0527bc7bacd83805bcb29f11e7874566587e086b630551b56745ad319a8873678313879e48d89a35a937eee38fb81704f2012fa3905ba41ec96403b903120cc8e6539a2eafac65ed2318ff4774c61541b51bb4a6b0ccaa210539791818e80501b76e50a731c23f8eb2dc6cb8375fa4af2a3433cf64c6e88e832c89b93c58d0a46eaa37828fc88bbcc108a3a057e3699fc9d12997fcd8f399cbb39226fe03141384bddb6b0a1deed9e62420aa56dfb8b60c79028b19813fe557653edbce6523f1820fa8ab5130bd788a958030a4c336647a926b331b4e41f3bec7ec623e0da4a0ff262bddc5bf9c1b36f33eddd22c573d8cc3a00aa29e8e475a423734cd5b0ab45487c17cf808ef2463b3b90c5f899fa3cb736d9c20009952c26a8bddecdbcaae1aab25f368ab4b46a96d8b46bd597439af2800421402d7987fb776c82d1e68e0ca06b5fb882524d4707722076c1a7951b06824970f13ed9afaaf648dfe716a1edb310ddfe6f50060416719d8fc5b13ae77aa272571b23fdcbbb8f189e1a3429ad6a07a2b0599527ca4b3df35ee79d7825d64a457dc7c42d04b7a9a6666f286f734eb97675480bf8c02f3eea8a315398fda3e18c8bfd09b18225abb8e0f0dabb68e68e20f54599c10f49dd49bcabbbe19867cf0d28c3dad06c8dff17b3a43355b3baef6ad95727c9de2180da9b5cbe9d1ead7b91fd231fd4ea770c8b889319847e52421ac9879e5956409163d04c4212b7fa4fdfb224c003266c3adc07c67591ee37f0f96cdce4b99f2d76ad0283308a89d8b2c1eecea5a645f3f1d1d74430c42df062cf6b5ee231e0709980da0a714bbfce0cfd592ab70472959933a11530656305ff646d158009419260a400e8eb9d7f65c65c9c3fdc67d3d99aca0c425fbcb7fe2e7f1b0aa788eb1a35e01b2588caf12346a65f16fd1590475d5ec1d2a411526459ea1d443df706907ffdd3ca2f193f93f5a349b50357d26748b767cde6ab5cbfe76b1acb2b9eb97da5c4d2ddc8d18e3a3b1a0326d475c1c2c49ca73c0fd3fc9540cbbba85ac52d6811fabd693a3b09a281d535715ab784df3ad7292606d15a70ccd1a7e2b1b48ad92a6a3f736f9fd5522d9a869c7b654446102e9493b3ed9fd7f247868117b2f75858dbfe054e451dd2a9329eb121c62880b06a918bfe6ff3531df3028e76099c6e0314a226bf7407ab5b6526b7332359148053c717cf9e7d6bb29fc10fb5ffa2a293ded4dfaa75bb64adfac6b799c4fe8aeab0df3e0ec366a71a116b0fbcdd317d70013c37f791628506bb25b83bf1406b544b8009a326d58fbd12a99373eb7086034581368f0d2496cd6eecc201f2473e28ea537e760ff3ac036923a5c2708845b2724be4583428206cdcc2ddd30e3a8bcd56ffa870c6e88555e0804c91b6a142e64f444a3b4d97ab4acd5012998f41dbab572d8c7792dba2193d6891c803e10608a5126f209f98bdcf093e683bbb86b42ab4853474bdf48cb949857a4fa073187e3c5d5bf07354e0635733e8a1db2ea1b237aea7508d5dca9bcc7c120ed57d00b2dcce179111f39b6e80d799b3366427aba651edf14b3be4298ef85eede928470a4d0caaedc19c76584dd3835a164ed07dca150f413eb963c9569f68d5269b74f056c01cebcb77fa8983cfae7cc11423906ba31427b0fccee5ed1937acd2ff0fcbc192767276adae6aed72230280dfa84d51a2048ae72fade41c0fd35c367ba0035429bf6c0c661b615265e9d59bd7e81a43bbe7542c78892ea92945cb9a38b000d82effc0d3c9c7d7795008db5a236a600a96c66cc7ffe82b5c0e94e3455dc62914483e5614ff3c352bd989fe05ecb6886edaa8ba00ed5543ff67c88a81136be8d2208516162f02e130ab7325e35955f8373096261f6a55de58dbeaaa948226a4d85edbe823829f45506cce383d93ce1a2d3f97986b9d72643113002ac7d17fc6efa949b481209dc753c5a21e5bc1a95518b0b3f82daf333d50b615f26229feb4dfa9d662793084d1005df8c1850c6f10bf2af22eaec820d17d6d2eeaadb12cd770078ada53dbdaca20ddd708039ca7b5eb565d22330ec28882e055faf09290976a6b6d045748291a7bec48db1c98d9ab64dbfbbd07aca0cb26b6910a72f3b35d947c88c8cda0f828d93352221a288e5af263d5e571c843003098eb027cfd1b8fb7e3e20ffc0ad05e0259fdc543764c2a5d93f183b88b3191692d69ca56d752979b4883bf2daf3823bd0751ade0a79e836c155980251cf4e4991e164a48abe0db085174c2a8b6b8dfd4e557c038e609cde99115c200a314638812f76b9a9e4bc5c6a9bcfeb548d8fb0d9a16e7955917709aae2b33914a1774fdb2161393da1dbb9cf6635d9c8d21dd31cf960b3d284fd44715a5ba1f378781c1a67a2b7c87dd2754e172c6a4ac1aee082be012797c3961ba6e8a3ef492ebf19d952b9c9dcc1470b411f02016ce4c965957fbe6917d5e80ba60e3a95684cc2c5627324c3ed249fe852fe5 +Output = 9016e95160f1f178c850e6815291dfca22bd25aa490411a85dc7cf7610974c05 + +Len = 51504 +Msg = 543892657906b3a1290ca213534de47fbd4497d89c29a7a9627145b3d79495d76b12a737cab8a999b21f5b0c0177c3cd1382216b4ae3252aee9960a538c7f9b8a9b6a19da01cc8552c9f114a1f950432640e043692148054c0316d029c32f314b72b66df23bb799f4091ae16d32f117658ee26819a4320ef804053102a5eecb23c79e0457a1c223d96ff19b845ce5161982c71948af86dc3d6cffc180bd24d5be1a9f517cec82df8d5f03a789ff92cbaccd0cbb68bbccf9768e54f6166167cd74ec28f9c46450098a56df99d06390a4b9ce01e31c515ae34e18a343564b3e3ee2acc951d0b1d05e5b07d3e71a41553daae66514b5f8e7263e7c693da2d30e8681ed0efe244d7a2a79b28f13aa1156f30ad694c4d81ac83ea22a25499e815f50cd1d485331afc41a51176fa4125c1c7153ff2f77f55f949913c2560babdeb71a3ece33f58b51349a8b87041ce57a2c1510c083a2800fc2d22da589d85d538c4f5160205983ca42278381daf295f3fc6abbdb3fd91ad3d9563a741f442588755caf83bbf3dd83833dd3a862a9966203fecfafb28038245ea1e48ea4d386e5d8eea3995558db056e69f66b19b6794ce92dc6ae9a3c4a79b9519685b91b03d44d61d8219afd1ed86a28563a8ebdc10d02943b684561c45c7fc1dad9ba6f2f0c3952a7bcdb550b650d058da73003e03ae6ae986d52955845289f1bfb17646ad6334dacbbb5054343dd6e07218c4d594f1bf9680e205b68bc3a35f47a8e8f49caa19f51beb66238ed41de5d4a11eebec208f114fb5d08683a2b12ded85e343e722ad431263e006ed9d0d2fa715f5c632c341239956740e93781d245852517db353588b592da74579210e85947d33af8f633f9407cbd796e4cb4e0c311719e82bc483979751a22859e789b143e0bfee2b87f02c401ee3659e26acad1fda23cc74fd942d75d5b8f7b678e4795b4681cb2db7bcb2ed577ec5e80e9fcecba55773b986f5169bc3d3f9b75a89a685b8618ebd7b0bf0b57c92fcea0d8f39dc7f9d2420e80c1ab022da778517de00683c477e055c45ac41970653cdaae4b4fb71dd26d1aa43005dfbb4b947374d4eaddd1be42ae1d2af38afc212b96e0608d081ffc2f554019249554b0726403d5afba0c50857931bc143cdae81d5df5efd02b9eb40b46ead961c3886a94abc16eafb8f2d32b2f886a90af8b2e84a87525a3a2189e83581b1d580ad4de6da323fc754b13caa639a7c313438b68e3fee4be91fc0c201a11474171bba8808ff2b22b9af0ed8b79301661f6a95a2bcdd9ab2705a9e7cd51fb05e23956a1f55e02e2687b4afeaa36ab3aa3c53185eba4c15edb892c3a0aad8dcd7c397c2fb16a6c3b3fb0a9b5bb40f3ab25098c8d2d0b3e76689703817c9f42047bdc9cc0292787231db5ada1133ab1ee423e0aee7463a9683aa9c04c77a9a0416dad28f1d137fc408f04b75f66865e5aa7cd4d083630bacaee5bd2f9a05f211ace25b1335dfe240a1028673f19a66196b251b388f704bb14e007bc277b125ce729d0b61303fca6f62d9b2dce912d5418ee45eeef4b5252bcac480c445c75bc4ced38b80f87b5fd7b43c78b9c819dbe67d8245f8987abfa48cf9713dee8fbb79294b827873dbc80200f4801175f5a08f9fc77760650741a3fb67f93559516e77ecce99528ba72e78acca71ecd8ee4bc45c7a9d2e42a3d4b17fd5beb56e559c467d2478152726b8bf2283f452d94e050e1c655e681698a055800d68c415e26b6c4615c6c92ea18f61c8eab04c605bf5f3474e6318cb2ccc1766d5a06b36420673ad692b768a60dae608c64ee1555f44fd45fe544548a8807f9af60eb1b9bb93e31ce7512522abc2d449de751aa0a019b47f3dd8f87554e6168238599e86963b42fa58dddedeca6fb5f2fbcefd29679d9f5bd297383a7723638762293a861b251aaf847aa7a60408106de50095d9fbf74642873a0d7f5a62ee113e288e9f917af2a333ce8a62a3b66e2164b4e796a650319d22697f2c46c9408992fca1ba4261533e2d818efaeda056764092fd49aed0e9d26ccb97298180e055274d7bc07403c4e8393cbb562bef50d44041dedb5c9ef54b2d095c5e53b056dfc5c425977087cd0921a71a5fa4cae4a32e6a9232f8e3dd6e2dcad7b406812b8e3308a6297e16f609ab69b2fba25a9b4bd0b42238cac62aa533b70e11e11ae6c93bc2065ce5d8c850a02a8c136bc6fc34eec895d31970635709780b5f2ba40ffaa39a4e1aeff4ca46c794ae90483790c7524df3ed2f0910eb75b4d6842d462f883437854ae2938553ea4d225881d5dd6ac3ec446d52b8b9cb4013756a2f29cddbb642b3d407dc7fe0cffdf0555ec76d86084d913bcba5e75e323ff2f77874715bf162e09fa6f842533f4d1e6d2736c884ea17e13fe2f9210c12dd54155250a370ad401595070e561602e4b68a234974ca31f33d61dedcf03daa98a4ab03e5ec82b1845a9d7147418fe06cbf939b29fbc2a588ac890975db59c015e9a0d45ad3f9c6d5b59f2ecb8d28a18a4270d7fde5d30d7f369fa9ed6ac81dff2bde0dd8e13db4db308484c1c1480ce846091feeb864337fe38b076b25f389fc734cf6869cb6433fd232bc516656eb2ed346bb24fedfdd31bc356b189540cbb4c8d2d78d8ecc3aa9a3921da503bc0404f10ff2c63eabd43cc8851c1c4118add13258f7143fe863c0ac8cf1e220e11f10a94c0efd0130e04a1064649eb1e4f5f8b9c69f443670842df4097e33462d06fd02e555f0ced6c8009ab889c66e0a6cd366041745fbce669883ef0ebefb08807105c210c82d055608706bd4bdfff4da0a40fba73e1668d1a76228e7abcada5414b9cb86aca625500a9a638dabec0807454f91975710a88d05989a5123380b4b9026e901c5c29e7fad1e8afcb8beb0ba2b9caf2eba6ff561582d2f964ecf032d8a5402c73a08d8ab9a06c6690afc53bd642e3eb58cbeb616492acdfd53162bc2ad4cff2134013c9c795a011bcc2e58d6990e2474f88255747f965ecd5a95e9d19e15c957db333019f120225b24dd29ce72424bb323453943a379c94f8dd5a62408b746b156281decaa6211713a902d6c96d499ba388eca4b5cdcf6cb125dcb81913b6077ce686cdb4d27b6a537cfcc7aaecbf8d05de6705453c6cd8811b5beb1e1a8fef06a7983af8278f93e43226ebe61304f3fbad493252f3f36d0b366e97ca106086553e5cc2ff05cc28685127b02580a854d79e09b87994f19e91ff7b3a9795d651eb034ad2540dbf9c326265b0c3a618443bf92f04239ff5e1c7ef0830210b6ff63aaec905719fd863e4de777a4b03e3369b773fa1eb656edb1f8dac34d0f18bd7c6997dc8f24cb513f23db359462a87a06860a22e3b95caef0b43cda531d8c87b014bcf993094c420ed08cfea3f7a7416357dfce58e91a8a21db9e30dce3194549d4e44f2b6f8842f27b823b98184370c9507b6746ef97678b94882db009c7df8dd0964621fe8837354d43523c6c85f07e9965567572dc2f7708833996369e3ec5315a463c5f530b1d6d59ad579c74a7ca5b2502ad1befc82d5f16bc5712a748381eb8b7433af1a4f3034cb2b14f187ef7be44d2b692da1cf5c0ca1ebb46e9e630c03901ff366becfe39a2cb112e7a5d4ce94930577ea511175326c78a7a6c01f33e648c38fcc8c98835e55f40e0a12d1005bc835a875691da42b21f8c55397fcac1c2c0b5341025d71f9cd5070e95d48c3926328556f78388b2f68f8980574afd71d90640854ce7342050972c605f3c08ae0ea7a1938fce67cd7b7d48a3ce48d47534c49f9783f7e760880c777d064bcb8bfc4975e6275cc0bbc8529265a76397f658639b13bd3d3806cc9cb20e92eb1ff97880cbf5c614daa465772f6ee9818d1bcf4cfca102a06f3aa4afa3ba0c034a200bb4696b74deffafdb52e7679c8cff0d20e68ae85b0bd32699ad142a7b7b95273c4d18ee39a27504b14d82f8c96b35f3d3980d91cf63adef32ffcb06e73b483794b3a0261e4885cc6fcfc7c8770677f670cc4c43679145c0f80b90f5592aab779a4fc9bd2ab9772f9e3f7f80ae450d3e80e910a72a7de3bf723a2d9fd7320610d6875b5866db9354c50772c776103ef28b572165200fcf1428f468ad6c3aa029d0c41da2d89721646c8e6846d84f543b177d4724513050e8a2a20bc71d2bc2eb116fd8408ad668861b3c29a5dbea9540aec54a8cc6c6b06369aadc94f4ebb47e20ee54dd847eb1e35b797c8b88c94a2ad796f14686ba35ac0476a4bdf863be0985ab591fcc7844a2b3ad2ba0e5d5ba201b5805fa99f528ecfb6c2ae9317b28b4c90cafae6cad69edac40fc8dfdf42f4b00744f4f085ed14ad7f638c1a81c39a9737b1d336c0468e9cc9bb8fad50fefd2105094eedadc77ef1e7b94ed642c3a0d0b5f6d56d26488c09e24278e770f43ded3559f7f175963025b6307146d94730b192065bea8b7129aa74410f2eada7397d0eb37a9c7bcdeac131559decc3d2cc82626ce14f6e44e9e71633cce365ac7248f7b2314f3ed2e15d0fb52f5880ead6fb9d86fffc2d384f583ea74c9647587ae986b2c69a3d39b64197cbafea9ee3d265ba01228166cfcc6653f7e8b7a15fa5c74251a50dd586fc2770058a438c7261593e57d36f997fd3aa0cc22bd83216957aa0fb570ab63f05671eff58c3c80ae66e91079d2743cd179bbf82a0784811cc6c293c47214dd68498fb25961bd011e3ee587cea48d43beaa3e2a5c10871d5bd2441811fd21ac1dc259af4cc9c432bec810b344534e940df6b1cc828193dd6ea3b90662bad8b958ea584f966c57fbd529f1fca388bf1706849d456201b1a99c60a9c4805143ec60e813fafef48144ad8c11cbb2eae7b5f07d8afdc539e8692f329abc33696a2d7fe512194e0647f58c17f6863a22ce541508fe5c72d040056d40165542aa5365fb09de124c4db3f6bbf22a9703d77cddbb4e83ca336fc1659fb3a4f777be087a1d7bfe4fc16ecc2f82463564d5b2fa392b76a0afcebe74710cb2cd0a984a91562d64fa3674149a88283b9d57785b4f4eada9de730c646012fe6617f66ef9f4df73eb5b312fe526eaf7f8ecd6b3798306880fc37eb50a8d2ebbf60c24c1703bff3639a8a7b889773b35a6a94b50b49f4806cfd938915704ae8c8b34fa595a6e9dc0756900d8a995652b6c5d1d15b6a9fb6d12a80a67f4cc7bb94d16e1fd5d93a157c827a357ed894e21738fb4cb24ac0906ffb75a0188ed7b8a633a427721b4f2445a68fafdfc5ae05ee2c7783aa9ad5919bf8e9125bc709847f628838d4fd87acf52b76c927f10012ce28ed129ebb6d3ee79b5189c385cb9372d690e088f08203fd99961dd1db49bd19b6a276192ce5fcc56b5552ea3b9c6a3318449af884bccde169841a77f4d959634e6e2ab47fee5fd7e14b2a2a690a6d329019e4ce3a966f2323b75b84ce3d7c3d6876acdb24d4dc7185d96c2e8e8430f3e6974a5472ad7c4540a63d82d7f49a0a8d7278f7ac37f734c15695412c9849f984232845dd7059ca58e74cfca27d375d35d82bb4768644844c69221cb3b51ca5e1742afcdb7d9c24d4e1064cae65d897ea1e117c345e29025f77bf1bc4792dab96d0bee3ed23b7d73d3a061d6c1cf25d22cad6d9461e2911a318b8c8cf42f15d0cef50b593114163fa38a8c95c21191f7854f8362c44d9548fb2ab9e44b11c4ccc168ccc5db4ad5da4838adb0f00b1514342d21d67709e2daddc0426c521e2ed4cfccfb2ad8c7026c4a108ece53a6f951c2b111978100c0f65fb5edcb133f9d117e895e323171e51c2f7cf698f4c884d7b6421a4eea1879c50a7283aa965d57aa5907be83ed32c61381e3acb5da5affce984703a3bb3b546e655dcbb0e15ea5c8e5afe2c514f1ec79c7ad79ce0d45b25ef12a953dfb509819f9df8f86fe2ccf93ace794a1af96a0758a41258b966fe5ad475298c5b23f8ef04c6195d3f5ad1d3235189abec5082a2f510978937cc2e0e62527d4e2e8f07e18e849a640cccbd7ce08abbdc65e31d2d0a46c3a8fc725ea2f1011103da64aafbc55008a758d6c448eae06c55e82f8e0800bd23226807f4db09278167ef3376b0219ef0919407aad9bae937a303a459b660fa32901aeba4f9332c4ac4cd89ff812be7debd4ebdc5a1c90b9a4e48d004cab3748e7c859bd39fd795d9b4f5c689f15cc11f750987a933adddf0a2284123b760c27342289705318edacaa30877ba833c915f6324e3ca01d1c6f75912661b0f015a9d8b747bbe40c1817a39761c05b933ff0b125160ac8ecd5d0add97bd6f341da369a309a86360182074c2bf31f005eb50aedcff7cc55d0906a7aa38b594b90e33743358bb98f1eb1e56f954481debbb4cb75d8f96a8df0d6a5a4975fd30205b9129b6d213c388b2f17d27d5ccc3ed3c39b10e924ccb9752ee9f25cfe2a5ecae3316a8164f7797184073e8944ea68ce6ae285aa81db2086219e2d9b7048a804e9fa78185cd399f8361b7a6403c1a4d331089dc2177d0c4c362c1dfbbe1327de54d78ddb12b6e247cfbd50b4a13b3a0aa17520daee9bc3eef5fb8a25ef75257eaa2f70728d8a9a87d7548622273f719c4191d6990f1e8e95e6733cc00b55e80c766aea84d5350adfd448e5559cb493b199c586a881ecb56992fdfa751b9ab9b13defc3b9f3a17a78500035f60884e6703277faae4cef809180ff8eec252ee0948928c3bbeeb43179d2e63eac7496b3029311f854790d373638e3becc34f8a5dfe17cb12fce58790be361c720e7d2418f44f949420f30217f430f53bd4de050b7ce5357c09c7498560ad99af96920da3ece99b51f163f879528ed15697ace2846d7167b145fefd781cfb67de00268c437b85703939722b19f6fe3cb75c2aa76b4842be6d31fb37eb5ba61397dbb9248a38a9dfd4898c1e7c6a15b3f8c2e5c82295dfb60a6e4a7d519544096779b86aeaacdd269e32404713245bc3754c4cd94ccebeeb135b7b324d624bc5b77aa2d3e73085d100f40d3960ae36e7c758ee3f4c5b56da0279fbfb213b23e5224f16d4027c3a8ba72f616a07703d9d6989487ea3d43def624a5b3c8f9872c4127772ffbed871a2eb44db5d5a02e650c65dda2bd5c1eaa7bd6d077aeb02aeff127455cb8eeda1b367e4e987eaeeb7ae883711ab649cd3af7e228f4ac5f23f02acd61dabf5147139878ffa7e2c8c380309b58d91d2dd8f532f3b5100a2efb96b3c1d593583f536a1d496acb4b173ddfad549ac53a2fc842f3af80b40f46394856aaa96dcbe088898d9997eaffc2e1ff275740c85478248b04be90c904cf6570d930e3525f5b6dd6b0128ced47f23748664b52c9b42f74372bc9ed3531f0087505fc8d295dd98aba4e5a53bd6bcfc82331d9d6afa37d41ae3178a0e2ded2a9bfa2b6aeda0d81689e2e19f440b3801bf651a9d664678a1157de72b0b6539dd0b678064f4cb77c8ee819f87560672eb82a8f6259cf487d6f9cf960259bd77805c24e927769a3f18402d79ee004ce002828b1ac68d8907ee0e44ce90878b48bd14bee052e181909d35230b53c14311ff2577f310a6785b7ee989db6603430ffbbb91e057c4160ec0242ece29277d8b29e1ec3964764714d201eb56e35b994fc4c74a73a6accc1c19938d2cfe9170be2b5e7438627b79a6bfedf5cba8fee28a90ae4514effa284b0219eab2449db12d7be19c8a7b34949371143594277bb332f7f71e3e644a9f1e321db3f88bbab34b8411b1aa1f200c5d9e0b376adf408ffb6338427ad3fca4f7f215756a4456fbbadc657011dedc5587af49579a40fbdd265ad83e348faeee8afa97ab820f20fede0d63445c3aa814842d3522bcecfc3f56475d8e0627dfb029942ac2ca3c7741376f81aad3a331ade58075354d43c00b0dc13e9e6a1cedbe66573557cd5ce84749ab571032b907a62e518ffbc5d5e5d4af50f20bdadf774dc3cc5dd6e600e285a7294a20d3dc7871c108cbd2a123ec20dd6f2e42c2f00b02b46bfaccbe98f490b261d139419e22b5302edf7689ae3183fa8449cfccfef751daae92a5a1b5acdd0dfd82d5f66e84c51e2c2143c9f554529928bb2f534ceadf891cbc0e59b769ef1c54e5838cde2d45cd9947c6fc69d3313bd518ddf07a43f0522eed43214eba2b6ff06fde5f6d7aabd0fea96c9b9c2c844501d9582ef7a138c86d9d00b2cc2c367b688822f88cfb6bcab4ccc1120ccee06747832a6955711d5e4141a368b02e74b115d51de2cd3e0a0d6428511a2c48c9f51e9cc12a043212765281c7bdab3f8ab390cd0ba89e910b3b7552a8fe8b18a580ef8cb8fb9472bcc319c3ca4c1ddddcf551d698a481c2e3b770c21549a9bcf79d42d97e58869170a6ff8e477e7897eff8e198318107122813df0d3285f8a454aca1198dcb4b3cd2a47c57bbef5bfc3830c87852a8af2d4cd3288a8d2df87d313192b373be62d3573e289693f928594a2f6efd9895da62d677d5c091cc399611be803daccc5de382f68cf15c367e5d9a674d9e6fd3295139648f45cccb3c9d8ab6022eb55facebca4011ce9111ce67ad5b0ce144eb1c86fa3b8d90aab561e1e0ba90fd09f2c05aa1cd3fa4cf358905f78cf55cb4381462ad6f7927c8155a01c83ea52f372048cebdd09f0a62fc3ec71d6fcf773a54b172a772da719165757ba5b4b74ba962a6a652fc987608e060196395d3b743cb64459ce81a04831054ce1daf5fc8fd245a7025c3b45e0d8c9d8b7e71aa937d06bd49e231c06739c078677491072d9effd4ca9ab89b58fd5b377bd295cc9222911cfe0bd2661011d040d65f0c35fffb6fc5f4263d85cd54c6de88e474b249e0e513e09e5c6375a7da5ea9417374a6bece7ebb4cd53c41b079f3314890e411449d32800e32412e6839124eb0694bb845c69f5e9311f74c7ccf05e3537cea8eaa03e95adff69790cf970c35104013ab2cd2887c8d767f443640873db98b2e28adc3b8df881bdf537a5ecd0b05ba6505d06cca8390651cdf5979079edf5e3765ac57119c9b0470dcc51ab51ef51ac84edd0fe6124070586472c3079539688ecc422894008d5304934c35551f62f3b5fcaf366b97123aca7a0ed8f7af5c3cacd +Output = ca1d7e00056682e2de120f20c99b82dc2990b33ae79bd94fa2fd0cfb83c235c0 + +Len = 52600 +Msg = 1df4d0443e00947a54d60e5ef93255b5ad287f4ed516c59303d6e35e7838be0ee8af49d97d4aa9641ee69890f0a307971d940759d5bbe9f09334a48aa2b07878df25d182c0c46e7e952cc2210edd9b14feef014a5e046192957beb68f7e638118bbe30e711562bf1430e56b65cc95953d7a136cc79d974a091127ea07fc2460073e32daf77e827e4b0f51afae04f887d30126e852d226c42106325d9422de96e1ffa9282fb62ab80624ad892a45871b991aa711d82c78fa299d5aabb490d6a83186d250aa3acffece3735629b0ca5d3083d1063d80b026e5b4d0d4f09b4c1166e5a2afec79af6b51bbda5d650a8f920a8deff78d30c57836e9bc6a1d40d026400e03f7d3855137d770e5b4eebc8d596e386c0ab499efcfbbc10235ed4183f1381cf6c765ce7baaa58cfe256dceaef9840bb0085bc314719cc308fd05a54bba7796e5e54a5c160de4978c768a46d8bc758e23b829b71da702783789107412c82504371a2b3708a8bb17f770ec2ef5e869492de4c77cf3b91566f7a3b4b6bf6469ee542eb0683bc35396a6db3c8decc687c53752dc1a7ceffc17b11199743ad66bdda4e980f695a6d49b037f216ca59ef889a7cb119aa291e013cb9c68b66b6654598f1344e9009965af752344d208b8e41de7170e034ce6e8e0af0cc9823a5c4ce87d73a34963e32e5964914cc7fd5b720a5dfe7a5d62373d08c32963e28fff7a14d6d2461fa5cd5821388fe2546cd0cad77348fdb1cbcc061371bbdfdd5298076402f8d472b09f0b8f5ae6ae7f3d60150c90bc400671ed6c872089e47b6b6f1a6069adf64b6ba16e2c305e575258507b321b24eb643be297ee375c1bc5c2ccdc9173b954b1be1aaa7f23be86d5a5eb23d07e46a6d311f2aecf20fc2cc23ff7757e89e395ac9154e6109cd0e20f0d78366e20ea175cdb67d9b34231be7bcb370cb011f46244cc954b68015a1408763edb9469dae9068187422105c379f64cd6c9ad75b562825826010ebb25c3c8ca863bcbc1ddc2daec9b0ea1d179073dac1ad5ff1beb3e6d1b4f2f8a33f99858ef987d9a90ba4bde02ea68bb0e1c0d58d14c582d6d619d0efe57fe65d09d3bbfcfbccb8a3e3a2b1cacbe76f82474364da5b379c0d1de286be9889526f9db5305503a4a2233250a9cd35d60df7c4927260e99613fb129878ec5281d55187988335c5924ead84392655d104ff97c638bebf6443832740b617f7880bd7b9440844fda63816a935b697e341f6bcc8d8a08a244fd2522824c5e44ecd89e1fd5f8ec64b19e882bcd3737f23ed2dbe218854655e00c509643b427e70778e7c943696b77cb5362b4ef9da5c66571c8c3831dee0bb1b9e2161f0a6470b3a7c101465aa7920fc9368d5f565a048f4359f5371aa8cda14c032a7e18bce5d7ae5450469548bc654a2d3f872affb4a691b7029d441ba2970cda5bc8a4d8505bd5c73dabe0f7feb51c6f51cee03cdc91a309721c62f0927c439030657760b826644251dd045c5fe788234b9b42b88638c178cb1b3ecfa536374c32bd59fb2622a3ef1244c91ee7e4d672b658161cb983332c97049e5ee4ae3037e7381251a136daf40a48f6e59e924e83186c250f7e5a404c5d3e4b4856cc7879d93f690b314a5079c152555b8dda387ffc3f373adca53200a6310d3303795639903827d1de474ea7bec8ac26bba4db8de7391445db4c4f72f945abc8f49b119f938d144ab1131ca58914c4ee30d980d663c283d78337e0c7dee2efae301bf2d56aa4f81fb197029caa9c655cf55f6f81f7424d98dd4f2c2add709f8dbfe241009de79bf8e7bb48b4a9ca56171120f0b72c213a32f07a7dc17f57840faad7464bb4bcc57b596835140f0561c88c034ba088c7124ac4a119b44bff66daf8e148dc388d3d53118412e564b44c176fefc763959c9d8b62ad492ccad10d96b1ea91dbb1c1cc2617f8274e2e41e0abc1cead29db09a39ad1845551823340ecded96771a5c03a9d71adbc78f713e52d8a874519e174eb221910854afd8ec983869613c69ef24f5f298a198b46922344d202d75c2f463ec943372140c34b6e05b108dc0123bfd215477686aea4266299a227ab194de8643756e3705a5ad0f81767190c4abd8f8d66d15b4a09983769d401de0979c4c025155afbbbc14c872e63b1b0eacbf2ca46fbd120aec5aa2d019cf80f38a41a38490b58674a9c21d6da9196b5bda94dd8c67b4eadfa0a6270f2998ea281c1dab797c0560f65145f27c2491f11ce0f5321d58f51ea76ff49680474cb7f2cf889a4d8dd5fdb545190e1af3253aa65238e0e3adfe1bf69cde67efed5b78e8173b169d40978b35e7a3b6c6af43a69c90d8505bf1206141d9bc118aa635bb8c757d96d53edab7fcdb7e930b838dc3644f6c06f2ad0c8d1d89263a0cec7bee348cf8a181d31ff27e732219564a642fa1c06c8b544c330dee3da537c33a9e8f84a004bd2f97c7d93f5106b0334e5739b9a64243dd5914523869a1916a1afe2e01615a403b1762bab3e7c4fe2f29e770306395c71a5e2108808fb3ed4e084b381f4341d130bc813580c9c569a64785718a8acf9b87b5f97f6b3244920b7ce63c52b863f6bd01a3d80a5980793531c1ac4c7e6827921afe453cd3dc261ef36fb9305329171c813af0c5299eb358631c8eead0e7f1e5d7bff899f7032fe506382d2c8609c8eba5c73e55bc788e9c7606a7ea04d780ef86bee7e71e32061a2fe006cbd3ae62a6f9d91f108496915dc51065be9cbf6b1ba26bb1c8bbe14f1adae7e482ce5f9aeb07d0f1aa14813238eaba76fd0af806f6a556e49342a9616391c024e5d8c5d8043a4f7476deb1079a51652a19c229fb0d29f0defb54f2f380def97669755980af0bb5160b55be681e93c11d9974bdadcb8ada2f5565466bff2d04278246834b3816a234cc1bf20a122c2ebff0753b95be52634435f61c414b0670d6c4aeeb9e2bc5877f5d94043431753e9fc3561c49521b3ccc118a0d09d0f5bff2a520fad016b2e54424506d9ce919511b6699e84f333fc7157c93712c3d755209b84f29a775493c31b4c386aaa58306d16eb3180dbe5a82bedb94e12eecffc79a527c007ac4030ca6838fe7c3e34cd0504024340b6fd60026b310e5987c0f9113185a07d08f6ad74114f8199f4ed14df69f7fc4ded44cbffb9799e6ef472f3f128e4bb83f340b1c6ffdae948334aac052b12832ee6829229bfd927d99fad931f708d39a1d5e4e4ca18205e1264143e7f349b016b0b7f5c896699d123ee3981a5f3c8415f16abef87456b077ded1371536ada9d8dc302d2259400c3d34bdd648b97dcfb461e5d7a056f010c13370fee8bb717801b75d59c07325726711d62e4d7461390dd55c22c4d7c2b965caad05c2f0299d19d8bbe613729e62185cc91aa93e7b328ac24a1ae665631cddfae1d644533a9b99c6c86c9bb5ff5dd98c0305ec66205ea3cf1c4a758e35bd824acc0aed7318f609f80f57e9dbecc82316007a8799f51ff1425f1c02c0df1dfb30a7fe1ece693ed2e2fd225e52db337d916e02eb385df8fbd29f1a1e9ba3a0c153223a58d39fd89d1e1e7699993f124174a819b7cfef6c1bd648cf197d47f85d18a74a4c112145b11fefaefc3dacf727362b395dcf2dfbd9e3d89593f4208726f7c39839059218c75eed4626ae9954975c73ec4dc47e3ace71eb280e7ec1dfc776f3ced02f66c4386193d6897a88bd0a6e1ead283e648b6216ecd0f9aba064b72cb438820d23da9cae8fca951fff8308d187f64dab75602d394a3ad5d940a86e8f717fcf1d3dce6cbc1dbcfa0d62690b3d5c425e7a257b985fafc033a6273d55f5d80f27de29021110da07f8c155b199e7e82bab4909102c007a0b8380c876161644512cde8a382223514631ea4e0f3d87d81ce49674d060a2356755f7a8f5275743003e8cb5b32889fff235d6bfd45e9388907ac11d3eceeb6e7e2b895d2d024f5076ed6750159cbb529675253f9375719620de7746bddf1281ca64a439a02f44f93faa0ccdc1e71de59d603421ef3ac86d389027a5d019de2bb6a1e6d2d106feb9c504dba36aa048159187a21b29e6fe9a623030af07f794a8cd53afcd4231d2fea17e52655250c08efd6bfd9fe6329a9a182f40b6e800dc95990a8d6d763858444f871f782b60fdae4b8d8504a68612e8d4fdc671d2be2c8e84270e57ef72f53739bf8170585975fff65cf70ded59fe03131c40546a97fad0294980f1107a30240a7826d26bb2bff0a86ac2001d36c2757d1b3cd30216ce16f2e2a3ed7bd6afb70c518e12d805422cbc27547fc8a4e6bc5d6b1a725bc32cdf7b72d59193f0ba4ce9cc05b61fb98300cc234cf1721cf1444e9c77b6ba258d862d8aa481fb50e6721d584c30c558291932df09f9ac0778a9cb2fb314bfa66697738a8f33148fcab30176c0174b597ad28acb29fcd91cd3595d857b10dece5eaff802f42971f5bd7c40b7ffee14461ed95e781b7f8b9597ef704e3e3f9a25cc2c357481d9864b655a558c5a09d2a67b7a18565cf6263a3cb89dda6b0574153598866f96c7e3c928c9ba746d0ef8e3174132f66cf54b53485140ca8fe6ef4521719544c178fd179e46ea00b771e98488db48c8d9f16d793156038f1b787e1e2643dca4906144bf2c5e5ea1b7b737233684c45e128f0f248e1350a8ac1ea308aa8bb70f72154d28697ca2e7ec636417a6fa3016a502a2edc535b2a7a06df0ad34b5ced5e51998cbbc2e3133d3eaf30a609806931000bb2d6d2993fc96cae9744b5e8ea867c29a41caef9425fcd25643e9dac243d21dca7bec5b9f17fdd9efe654e270e788b4d402ec4d362ec5ae208ca95f0db9799e6341d9681eaa540f868be7fe0023b674d897b6a3b1cedcc2c42d258123645526e8279acbacf437c05fcd8aedd6dd7f671a68a09f718690d4c3adf4edadc5132bfb95d6f2c4b5f7b0ae33a45e4f8552201bfe30ad0fd68048a1a78df1276c22320004e479e04032452446caabe4bbcd244fe0fd38e74f2992d07267380aba10cd87fd69cd9a2365f2448f747330d14ee838995cef92410b47f2b7072ee24f5d4305f7cd6a6ce0114c71662820ae6655d0688fd62d8b6c93dc6aede442289c66570c8c85dcb306a2b84d835c50d80b8091524d0f6f5d1261c4bb8f851e4811da6e0e1439a106f7c8da3b3f977028014d9f88494f4161e2d3a566f4702feb4017fc7d374f33f333c206cd135ffb29182b5f6d2d4c30444e87d2efe52bd36cb7ad86fc5e4d11e26b4cd265a71c7e5590985593315cb87ec5fce1d8ba1eb566e90991ee0199d77eeeb7d1b7635366280b13167d1e17466be9916693fbdf524444cab1d4c9dbd1033e916914b0ab4f3af82a269d4bf266b619e3b5b412d4169f6b5f4b430f89bb19eb781d10477a95e8e85bea66438495c7e76273bba7939ec2bd35d2ab4b09d24d65ca723c7057d6cc4c16e68a7d34502bc2ac051d12a44778cafcec9024f2d3084e06fcebc3a99e5fa3e9bf5c8188225c4c0f0e4afc7c9d0c15030d73f5db29c504cc01c0da16391d7052b97ed8f698d3d439d3e7bd832c071bf699d96609431e1a78453dfbf4438041d08933fc16001d0b8b1a55ee6e60f440263632de23ab7e0f9a2bc5d1ea5a1288e1834e535d04b2529136280784d85e42304712c6a0ef6f44a029fac45ec95ec6145c107732231e39dabbd0816cfeaf629360ebc8177b5c6a38c44f7bc83dcf89d7581cf04bc7cb31d61fd1e48d405251de08305adddbefe0b28f2640cd03ef34a92bd636f08f43cb01d6cec97c49f1606ea192e79a8d7438bbef31bbc3d83857183beeb3c6c60275ec750978a078074ec3b155f6a41c93d2a368d45543072571930c990f452891b2f47f24aaa0570e5d8bdc2c20a0e5b95f078090a5c13d4114a8129791e2138c12c859a2b7d273711d057677ce07857f3e56caf915d4d715b0c5e24d0424133c15c6a90628dd39ca2dff14bb874e883fe12fbc603df4611db68af04bae81a42c2c8dc1b186272693d0a74b79c4fc4a95f7e0b988768667c3c655c0f6199142f6c76c48475826d648c5bc6f350f8758fbe31856b46821579240c4d8eeddc97c168700b14a0772a5637d9d047fdf764fec134528868b4bbd23c646bc8863a0bbf5ebe9710c2c91306e68c7afbcbd5f8bd138e58371486c04d2b759c07523ad8f2f56652c302fe8f3e407dad56e11998965a4781bf72818cb39947c9917c646622d672237489a005c4edb34fa1684bae4f3f68b46aab2c87cb30e3dbb02a401d16a9e9f16a7e37df619636492587f4a1b169f8d97ee7101a5f9550b8a98557669815d4a6ee0a4984dde30f8427679bd98481ffd7444db3ab3573964ac7b430a76ec23a294855605c007b45e7f22fc8be902e869804069fa41770be7751df534961592362c08603cf9207e059cd0803b89c19930306395c6bcb34ce298e3049b5398298399ec6bb455a2ee9c4ff1ad52f72e93100910f706a1968d147c7cd9952bee49f96293c0e262199670fd18cc58bd8476577eeb06507cbb4ccb945decb87b8284361aa1186daafef62228b875c3497db39506643c3aca7bfc9674d8c68beeef58982696cabc9ccd9e3e575322092774cb4733ff110c07732cf392afef75e29f47be1ae76045c40fff040d6b69b0d3f43dec9c1e1d6ab01b4e717225e00cf31cd2067c15619f9d208941bf83a550eb967c038363c9cd40eee18e97fd10b78ce2780fae935720a4c9dd45e21e7d5fbab6161a9e429eba565886a978781a1c3c8aaa483703b98f57465baf19ae5a33eded8ca0514d14a85d029e50983964917e6ff93eb9c8f122413094dbcab5b473d1a7501320f5b41dc15799227ba388cdcf1ce5518b65a68fdf03095a79b71496226e0101a1af05813fd2278da768df17bb2bef3f405c323ead5839b9bb4513214ccc0fea380b8189050c99f08fdc0005aee787466d3f3ca5188a9667e3c208abad2bdd4b787da08bcd619109a99f741e270a4e0556612e59cd24bfe3a7c09d7be0180993d797fb1ff56b7d2798f5a3d7bffe940ab0847fc327b116cb5bc32a38721b1551d9cce99c29a4eed8b2a137b8e62ef9b4ffeba987b4ba2b7d944c3757dfaf8113f39f04a6b68846abab1478381625ff929939440df0aa7e78c5be5d60853fbd48b970c4c64890150ed6b21debec7e162210efd7dc67fc705b84abf4d90f665a6e9004b2513c56ea70ca1c613ab591cdf1fb61cd69873ab18445a7b627da9dc8f41bad55fe2e37378fe9c61aab2dfb9770bd51ad3bdaefb2818d03e9d373508987b0ed18138adb7caada1182c3a235f33cdb11efc9ef85e3e1cf73387266293c87f4467147ce9e3a500fb1320aaebb7194d9251daa1197c6038167fa7b3f7222835a4c19f18609e11dff07b0e6c00693474c2dbf42fd8fe9954744d8544be60be857604aa73da911732ca787ee72a1c892888e3d2b1fe8cee585ac3aa437df29458015bbef51f64bee1cf31f983307822522b91fd8d53cd692c10099d16fd83b2948eec6206f6be0fd548cf06a8dc2706dbf40efc2d9f6a11b8de48e62706b91e2365df1e0e284710f47c792ebef4ce3da92b8257f7aa0aeee50ca80edc603ce2ebce5d7a757ea8cb27b558f82d4118d0a6181597553c560999e1509c9fd2b506d6118effa3bd8948573994ec5e8baac6b802ed43ae1cf669bda66918d725cc90cb75993401b0918e6a525492b79a2f27c93335e3691391163aa41a0beb21288ab143a6a1f51e69a54a45c073a1354dfbc0f11300f0e9cf19f6208cfc458e72fb72c4dfcfe8ceb995dd5d02168526ac4b8585af21aa665a79db65e6734c3451ecf53d6a45438928660de13f03c933f51e003732ceff51d73ed0ba51f868db6e6422f96f8b6c175e21c018a2c3d725d07d194ec48f5774f171bc66f514014a706be13f172acd4004cee04b50dd15c3e46fb8148ced1a954e1989b2f94e7f4a00091a5689a9ccccc27354c374d9edd7dafcc5cfb36fb07d963e1ee6862f4ba3c647b587ee90d3823f1a04c53440c627592c28c8609e82f472e8634ac33ecb1d692c9a1a6e68492b24cad89cb899077d0a08c947bc00f6c28a204025d903687f92c1b25730b8968f188cb88f296c1a9f95979093ef1f75ae85ed9dc1ef068a93e80de3855d082176c4678ce5af426655a1e266f6208368810b5862642ed09a1f141816ee1ce154a8cf633ce771a15369d6ef31b678b23503c6687757bee8feecbdea34d896c996ece288b0dd981449a1dec8db1c1e3646fc5b25c4e2c6d620c28c8c238cf34a500ca5dfd10f4b20b0c75e754a703a9701347597324c6e2367692905cd525aece8cebf6f85c4b34ff0a101fc68faf65bd073bac7a7dfe0563aa83b5d1871f336c7fbd940b545f82871f86c671b01780c1a80d2bc0ce141f703486a9cee33e7b0555b9a5b4adb41339c934abe4dcfe8314624667e4a9bbc8e291260cb36de5ee2fab5abc72accb6f9d73c4107e5aa6f53be271e16475576a414cbc2f2d8bb7f551fd2b38c3f6081018bb9f94ccbdb35f9e951a18bed579ac02b3e3b17bb1273902a7b5bb36fe1c7d321d31c94e7aa61ab2f6998e523e84e6bd8327144c92b621b85764b43a495b3f8ff524fe8215e1bf2f839aa2dd051ba2c836e0c80e94d737f968b2a44c5c66af78ffe3c4f61418d54ac87806adedb088b92bbb5d403c2ce43c784a1bfbaba1758389f8bd18f99dc5bb31cc1a434cb5d106ee1144600d09cef7f2857ba6bb9e0a461fce47693af338f76c016e3ba6ce4447fa8d0e1c6c0050c253ef540c00ded6274deed4755cbb8775b3a27305805c2ae2dd891aa3eda3021238f2256a1fd671ad80d514bbd35939bcb549b92f6dd22d7e13801ab506546b6e0e38706f6d07655f551b68ab434ed832fd41b127c3d2a450191c6ebe5ab6e53c401cb57a7cf41993372c50d2011eeb8ed834eb7d26d0282f7ab8872e3f2d18137b397529c42f171fa3725dbeb15bdc16f29dd89e1b5d316294ef049348396c7a1bf93fdbd71ad62b2697efcfb8583261b8e6f908f5dc5870142a577bea6e6ae6aee6662f3a39ef6c3d07a793aac67705b79add5c5acff5fe54e50046ba2e9bdfa08b9892421ecb49534bf598ed1922696b43e5f6cebaa253f3c99f921c1c67cbad533783934be24905df5a4e13b2bd03305cc366a63ed6276d2275dca49a673101d7d391b223ccf1d13c5631a335bf69c35fc63a959f19df2d9a3384d83b02b65a73ed4b033903ca21dd79d21014a21380c78ed0f18dd5e1b18b49292b7 +Output = e24e666c1be1a00c4c64de857fb72104ee9c405ee663a7c5ed8acafdb1a24633 + +Len = 53696 +Msg = 28bf7abad560d623639abee9d72a8955683c439791315bb0649e9c8f21985e7a072ffeb06a388b4d0650c26d931d3d949ad7e74e8607b312fe8f8e6c72eb925cf4b67cf94a706059417e9bb544720ac92c8d797a5a825ebb037dc8b1cc649215975ddcdb9c90bb11bb2e300910b257bac967e164342ac4731c7131a6568cc770972b069f8921063b1d6769b122648e30176b07543d864e02f172b39339ea99349d29e28c38aaa8a00e322ef4a01016f3bea3d4919d1e622f298835bf9c077128505d59ecd1b309083796671cb33f57cb67172e657b7a6ac36dbba073a869b51659d151057ec4913b3f9bfc6f8277b980baceff16ff23cc876414daf7859acfc45f8db3216566a800d049d5363643a4d95ed02ded53a0f240b79acc935a2225fa0b976886ae20b6208fa9dbb8f62880a0fc25a1329c7942b90d565e8f4f87218205f9577c827b236426c2f43febb0b59b3bd6442d053726b90f4e79328e532923f4bb674d09fe57913d9c09113c62ab93c4e9fd26b3610507658c03c53c0da7a480e3823f6a31bb727b40037712c6ca4f3e69b364d17f466cb618e690843e02ce527b8f9cce9cb5ce89b5c8b995657b99525b5030851953b0aaf808db8c6da269128a75aa5cc8ae6c0e03421fecc62437a8c9bbd2f7b8939bea3653ee7c22ef3d68191eb23d3c0f15b33357f140722ff2e7badc9251e36ef41edaad107de65111fa2f71fb98803e91204cf176b8ef0292b7379bb7b8234c85eeea008bb73f30ae73d456cf961da5a8fc56f7f77dc707dfc247e08b56ff9514007033a551b8f4dd7910b5745f9aaa22f05a51bcb681a4a1adf2935453ffb16aff732ea773d60564b4ec76331a7fb7c6a35ee70d8ca6439f23409c5bd7ab094f91fcd9d94723cb0bce6f8254ef55335dbe6da13227bd4ba2ca3ae3e8098c038b5e121c82f226af9c6ca2bf1f07a286afe88c6772ae4e24724ae75143112908e50fbddfeb9f6717dd398b16dc8af11784cac521174ae235d74c50ccb3180a81264c050a5d746f6c98da346fd2a0c750a40b1fb7672200e899787b3d8146b8d416bcf3851e99c51793faa5b34a6fae98d754a311ab5f30a47f75728df6c2ba6b7d088e387637f17e973fe5c88c222d57e44d57172a28fad252ec3da258b598ac23d8df0baf767c0b6b51fb98e0dfcdf6949d45b22ea6e7d8da84e266ef46db01d0d2ece7107ded25d9d9f20a8ece14dbafed75c8fd007e1fdfe66bc0059e0ad14ba1bfb2e075cc33a77fcf05dd198c6ffde4ed42e05f470f29b9df97e0e4ad835deb60566885a29f9eea9c7317e5bd1a452bb7091febcb107fa647d5c9414d81ce59d5b9f0d6f5d086c3613b825d2e455169db0402cb918bab55aa6108dd7132669228c5bf90502e27b1244566a66756e7475f1ad12822e6736d1023e5dfa1feec3f61601fda3821485def790debf0b7d06d4d35d329048ba0978203a86f654d2a07867456dc3711b36ec9bfbe5252ced482ac3c51f7c1e0fa7a06e998b74687e693a1e8adbfd4662e8dbbffc0031405ba2f851693b9e14f48bfa7bdfedccb14e98ab9a46cab98888262cb215c27bec34c1bdfade198ea3f540d6a6722097d5dfb95d790dbc709e07794030ddae6d86f50eec2e883bc6618e40d59cf4c64e2c8e35c0294423cb1d4d4cc6bab8267eb738f5237afc04cdc41c1667bdec41584be6b864298e83118cd63b10ae49bd37e36d1ed44eae271d524b3c1d87ad145eba859bc9f8416cfc434eaece89e6f511a20dd67f4812f52d82881c6798cbd1c9dec76a52240143e3f6f32240dc2440a46997d694c5df0186db5f51c65fdcec124f48aead2b42aa511e80302823963268a09779b56646cea1c33d56ca4b34d5d08265d32b8c9a02cc005242e4ee914cc6ed894a4197fedf16e0aea5d3f988217cfecb626da65bdfdd6305f4f79bc9f247b6e9c2d9d97b954eaa3fc983d93b41803ad5f6d4271ca3ddbd07a0d0c994b57383457ddeb92193c1964d3c4a68b2c872bd01eb0f8d60f17554c3e120e67618d2e908d5d0a5a55d181b6368a836a338dd0bfbc97027ad4b1ce0e7303871029ede3eb055402d5b53aac02ee92db170f5279e101c96a476133cd7de18b7f7beba0e1ae886bdced81a022aec483b67a08fdae9eb4ef3824fdc6db014f50ff90efceb03fde4a9f89002a69247d061c7b68b7f85e9fb072f8f2927f0287fa0e377c9dd608cf9853907b010bcae4c2160275a7dd8988b522ad86be41e84f32b558dc38dd6f23fd00ec3a4c900ac060abf779f6e78738a64f2a0272a91c70a0fbdb55c54ddea123af8485347e4bd887e442bacb9ec1772a0257aed84004b2ebe8a8306dacbc12af6840a4e15ff4f5e0c7cb814f899d0ce9421cd1158d09dcbb84a8b55784713e4c3108de7aba6fdf125f7b15a93084c18c1761b4541893b8bad8c12bac5c65eda014c47d2818235ec6b138c0021bdf5cbb890ea0bb6a0b0c8eebdcdc93bd00e753185cc71200783aa4c7ebc882d314a61da10bdb720ad7a1dfc5e20e352eaaf30e45b80561fad63a53a87d7650df8d675b6640ada280613f566fb90ab937cbdb79a4c17e3c8ea5287c5cd41295c7b0671ce19660735510ad9af04b184860cb653b3c5d7ccc454dcac6ecdae47814e76d0918f33b0c104bb554507e7f0a32125afc16754538a636e8da5f7533224d9943ca15418596397c1d2c983c89263408816638f222a93ac94c5fbd8f49bbfa2daf06e0668738590aaec9cf6c7cc5ef15a41facba5b47876cbdfe0e0f6c6aa30d7a657f4c891bf75d30d4fdf6a10ee9a289cf7ab738391788025f5bdde557d1a06c91fcd9d2669bdd6bf42ac1402aac15f91fa8cf01a87286e429abe1fcab0b4e4c2f5ef7ac42cdf227d25fb7a140c0d8bcb640ecfdbb1ecc2b050703f88eda7fe4eaae8d5dd716042b16a4bf0b79ab519a3e49f5759ba5c49f9a762b2327c59bfa67f3822e4cfd7b4067ffc1c8fdf7ea5b5cccd2b16f8fd507910041c39f540a575135c067ca0bbf2e6d7aa61ef32b0ac6bad06bf96062662d91ad2d211d0f35c34e7d2e5078c638bdd11c545683d018a5005da89596a8e1d74386d785ca7f820506d2b4317fb84eb43bedb4b7d76d7ebed67b71cc38e8adce4e922736ce2b5ae7233c3a5106696add52f6ae8b148aa3d9e233aee86fab32da5cda067e509b262f4ac3a8f93660f2febf3e2b1865b0efc0cf8c472f6278d8c212645aa378584ca62570e671372550e02acd11a8f065ca3a438f24ea3ad707501a3a0dee6fe936145c4add013040ea4b39ac4a81dd349c0ee6432d601e50274a1c6405a75dd64a41975973f1493a2a0797e2bceb55a2cd0562b04bdb376ca079bfe82c166aa8f2f47da69188ac9977dbea7751308039c5e75cde64a1acb2daa5acd06883bce695f7b638200f7ee83890db74ef978580ed7c7fd661fba6ab3e968b24a3357e189a10eb1806ceeaacd7ee11e080678cffab8b709f2b314ddd321303eac475d6c76b08c44c2d0d156fbbbd35c3ebe9bf3f68deda41a88bc8d21fe6bc2cb38bec7a6fa6e8de7b142ab84cc5ee26186544c78d3b63c5c25140126ed55ff158bfe9b90eb400d5da2a4f10f2cee510ef22431f806bb33260cadc2385a994429b58f50cb0f8b33a3199acfe159fc189586ae5d0ab3673906a3fc58fce29022664a037fcbd3caa1467a76b0a1d012b993b83516175634be7c7f822deaf1f52a59bddd8109d468c6b669db1bc72bccb4980b6b05a45bce240613d1c9692512bc72858ffd1b9de024815c3a99d7c9848a00f4b2a448507e1a21f56db41de893695f359d5c577ceb4b25c607834a45d4ba6d08ae6a69c0def16e98a8666fb8d1b16e428827640dd49b123bd490950d27b64acbb0d08f296b5a3a723468e51258152e40c2d6c7dd26a4d522342a5e9c081e18925c6f2ef6adb5141674240481b1052d94fff2d9476be8fd2d88b8fd8ef042651113aedfb500828a09fa3044836711dad371f43ef91ee7e89244d4f8427ad39eac791807e11e431aa129062b93d4cbb460db536f4eba1226051b06e543024243e8ff234e0751873480a32e303f948358e18eb8c0d4b80843fa6db73b2d110ef33b1859089444cf663cdb00e8e320e926ba2e7cfa17a32ab0f6af7e605d419a0b374741ce14627c3e1a4336cc2af46dac7f1d1861741609fb6e62b50b4ffe841a522e460514352e1acd7e383083a9716894ed23ad966b2691e62a038291b25d9f001ffe53f027558aaaee7dec699a94d990112724eb1cf102d257d26cbef78717e5aed32144c3731c571680265952587df52b8b6deec609ccd79eba2024587103674d6cf39e94073e3678d794ef6b3cc4289ec8ef1dd0c16e5a4123536e3fdbe0099e14514a13926eed97fcae884fa25adedd883ef4e7c855def1966cf928083c40f361b0f3cca53cd0f657d9a07a39905c7a11c410558f11da229be351ab8686a1ffed991819a016851681ace465531335f72e24dca47630c0569c4d1434f74db11610801395238a7e7b02aeb0ab9f41ffd715c7c67f1e11460020009d5eab0fd2d862fc92c990072186435591b77eab1e9c61236a2ff761cfa1bfa46973422b9bb96d650221862b12eadc17f41361bd26a9a8ce44519270d1cdd3bf152d2d4f802b885fee377654c6fb258c7449e9068ca1553ec16e6fecd0e704a70ce6fcea04b15c53b365d122b249c8198eb58505c4f5eeeb8de0f024518fbaf2dd3b1169aded41d6fe5726f379492c55aff0c6397429ee5ae643b3b5d82a6f38e2940b6cf031f1602b65f875609bdaa764961d200ebfcc1387213b2fe939b9dfd97c5b626021b365d72cc5f71c944ba528e00a47e91a108bdce3f6e0e94ff35e1e7e81c8622f208e6e16001711d507d579991e1fb7db445a541667776cdfd43a2df50f2d9accc1106cac4743c4d097aed31bb915ef85efd579330d61f86ba50a848a64006e8d0db25f6a0c0bca196397d1d26bd8f48c7ba3d8c4792f00761e35ae9910cf51e27edac2e9beed76120426d267b6d75b51603bef450b3d0971885228cba608e96f8cf01385d0477d4ce1e271462a7fa8974614292f642a98007bd67f7c843b9976c0a8edc8f0d8343c95411af8275050a085b312fde466208581392f364be5e6bab25bae4d90ee3f6386c95be84de7f82fb79f493b3c7e378300f094836d76558dca8ec16e2117f3544ee1a0b0feb4e377443f1861bce1418ba3a35bee598b6a7281b8e3c531d3f481563085ccca25b729c4291d0be61dd2f1b1b7e1d1a0939a0b607071cd33b0b76d253c67a630d8e7a9afd3c38468b26077e3b4d2c7c31d78aaff4bf7f0b72cb09a444be2d7b34cf9997fc5b885851d7e6092008b4b41876af3a681e2ca2ca6747b2c0573cbc1d0715bbc854869fbdd815e454197d69c6ff5580ed8ced414bc779254ef971d0d21c372de891fbc0d611dc385fe64f44445bc5a80a718890fed3e624770c925c5bf84716e478ae66a46a822dc7d9f2ed997047db4835c636ea74d8d8c1f8680bbe818d9d4573693730cc51ea16582d0bcd2822412d406fdc17909568b626bb8205a150eb92e9f2db811d8f98d3cdca46e96aa00143fa4b298e1066fddefc536c383fda27534212fb9f47855e879f8f48f31d074412cc21c656dd93bfc0e3f76f5d43717a11e5913f93307b65b93645b6f62ba031211cbb5a77dd64d5e44471337e945e0c523c374e64c2b8d4f1fab43bf77bb3f1f853df8efafa2168d2858761a21ce904a1aeccd11ae386d4b853a37d00f588ab1fda560ae61b119f131002a1d2c2598b83a3176fbe7d2b8d94a9db24188166881f17e87543287da32e4ba99a156ef8c88283e1d15777f026106425d9480797b07e745c781a08ad9baba046f573080ce425b7f29eedb91dc8b1ec4744976f614ac7587cba72a5e9b013769f59f479de06f4a5127f892bfa9a01a9090c0da10d7e7f2b0ee453e6790aec347e6fa1a7b65778b6091c31b5cfc5870435d9b286e2763054db9dc5b3a4d0c144a9df817bdcff38529e1cf03fe370cb6391558f042a57613dab8ed1f4b42b170de8509cdd9725bde29b28cbb17fc4562fe726ab042b4c9b4d465e7e91ef4278f7056bfbb630f18dccc6e7ccf3ebe9afd1fdf40e6f2f7a65ec73b6d5739e3e6b6ac6d7a5ecef8c327ae702faed6f065eaf9b68c12b7c0c4782fc3edc80084679cef53ca2691c1e3452c8205d885343ec338b29cb225a28c977a79d9da17783288b5844fb13ffce19be30eafeaadec9e0c494e0343a13f774343d7c20bf311c0309b895b7d4e0c56b25e607e43c59c0c2c97d35055deea0cf1f85826bc07f3a8fb1dcd7de93062bb1efb32017270c501bac0fcf4572324b63a14958888ea90556e98eb37938ba2774835fdda0513f9f71d41257fc612822b6234fa57f0ff7a4df1a94d08faa44e13b4bb2e586a43ad84fa94e743212184a520b6012562db140b2adb7d828d3ec828eae74e1d10744213a938acff06c49eebfc2444717ce1e005808bf704c9afa32f5146c788a61a7a2bcfa90103d59053483b1c3ebcadc870d5895744204e7b518f9e56353b89ca9855c4626de22c19244283fa5a6753e348e3abb9ef657a2665d218a211a639f93efa3df15e1a68a394736d3b12222dc6dac87e104344eb45528f6696e749352ad0a172e24c2d19d426533d7b004d89e7a8fc6716fa3f003caa2ffeb1209519d3efe42991d29abe2f5c5a9b26bf7a06ca25e7fd2a7eb45780df3c478d482a46890f3ac89c6bd3d419a901fcca7a1812e2f423a6c74b555fb6542cd797d87959be910db67e9278ea378ed1e8d2faa83cc676280a79ea929751cb7a354d5bf2b1e927d59994c0fa6eed8052d5dcabbae2e93e7d8ebec6ec8cc787ccd73a4d36ed9d363ae89b81b8e0c0200d4a43f7c0b3dfaf8cba027ad3aeac2b6d33cb26a66b5f3ea609df4f64de33e059bca5794a1dfe6bee02e170d88b541903e19c72d1c983c39f93fca46eb5dd43c0b37daac78fd9d609ffd8437b9173f309471aac4976cf47901d600b471610bceab53906b99806807907536d2d5f702be60ac24d6df1764d1feca5fe7e6d62de30387407a0b4e8fdb3cfff487e53cd3632731fd0bfd83d46a7a82af8852a680a29c39b480d6515a032a0188feefd0fa46736afd0df8968b6bfc68b83ebeb84d34fdd3b226036f11a8e2e5b8defe9abf91cbbeeb81d83ad3fd0de341b231f4dbc1aebb03149992fbf1ed114dcf17826a69b8959112a656f248345b148bb3427470385b6ff1a0a16107d2ef0f7b447042f8c158b56669d13173f938f7724c8a5e692219bd6521848b1119e5c5878c4c90666e6d20252995d8a7e4e3b30f05b4e2d5f45fb71a2223c1384b5d399ef8fe9cdb473d9af8ee892f0b7ec21009e5a848dc379423b5ae664ba4efbe31668e6fae7ed530eb87c1957ec84e3ed509f44fd8a5721fcae1ca35707c8d70768758850e779fafda79a9a10c05dcc0ccb63b8fda592d6a744480787ae9addbd0aa5e2904ef2d203076af9522ebb1aebbb9c151951ff1dce886d717af12d8670677a744d70e08ecb528da5908a254716bb98f7e522044ddf050d8fa5820957ce2953bbcd0fbb77c313432d606514d72a45fabfc5983b1d5524a8909bc3a6d822aad227b37dfc2376c45bff2642025182d531fb5f271bd2cd71bf42d2589e7e1a766646754e1b2842d018a96693863cad03cf38f6512f24b476b214cd9348b0121690a6a6e2a0ecd3e109aab5ec18ff253c22d74f98dd7986ae4164f2164e14a605d1c6bcee15e79651bf7178be232f77f8ed74bf70bf47c082cdd1f454172252beba051bd2f2bf06bcaaac438c4d3411c48f8fca7b3d260e8eb7ea28df2c5f84bbba006813cfb9918c4ba98ad8ffa38f298996e51aef8aad3caffc241a0622c89742371622f59de33b22f7d316a2f44c824c18b3d23eec491706a66a872d22aabbe327aaa30ca26863b125a0e7dfbcd6897783ab33b3d14ea87c6760b919c597943d4099f69d8dad7086a168af1e53b9897c663fa1e6c04a6b41cd9b2244820bda811068bff0a60efc03f9beeee76f621ccb4ee5bf303fa8ca17379e5545fe93d98f159b41de821960c99d0829b3466cbe049c41ee28b6065f6d33dec49681bc2b97deb63e9fb859394819d8d21a9f35d788ecb8b158b9df95a450d0e2aeb1d14b3bca2df8bcaf5b0fffeea59a85d06a13f89ece9b18b191076cfd1951f7059fb2fb767722cded7b3f6199f2c57d7055dda441082e1133c72f27c71c75280363fd5742362f4bd946520d9a54f569f5a5af4c71d9ccbac6ee67551d6ede8a21ca74cfdbcf80af1958e2646e20ace3d6b603318fd8097dd1736a758e64e0c5f73fd3d5a1c7c970241f6af683fa4e739a2373f4196766e2f9f2832988a34e43ea4074f912936c276ff646448a467c81c66a6c14ad2c578296e85bb19abe598c7158e2baccd6db4d739a2ecedfa999a6e1e76613997b7dc53ec14ede42faa51822f5978b2ee6b94ac5676f15f278384b5346fc618cf92c335829f6d0000cb37f85a32dfac76768b7ebea918a7156daf7b0f5999ee619f545896ece675049071b0ffdf08a14cd7c1d4d8030bccaa9e424717fc81c43526b84392c5fe4c2541283284299a9958d65d360e4b72d6d06066a2b42027a1336f167edcf05d8c4925830753d83e9d82ba882cc74bf4ce6ef943134e8c328d43c19792de35ac3d5a85abb6d2b49bb3b2cd693f6cc93abb6cb200224d094b914d666306fe5e93673fa9c7c76b845ae6d05529f6638eeca5b1d3c657195f1ab339a4a162a631b913e0d900c38512223bc49befda1562b19427a4bc3b1a5646fdefc4792f3d78c749255d7e3187249cbc76e7e472ea0c3191b56d0b55b9b57877570d14f32bf9640ff67c6899db836f70cf812f464b5615a34375da2d5c4657285ac99a39d77d396f3b80e683e8f7445fb5b0fade9e0605d3ba05524c6dcf8c18de3e3386abcbee70dcaf22781648c39211bd6ac34ce5a82800659b395219be4fccb605640ead2a1ac15241ffcd3d9310ccf0a97cbebba7aafedddc7c75ec96d60d773b5a68e99576d3b06ea1759f5de1cc91df915b50a9619cb53d9e3c10bcb487c9fbf12248d88bf813cfe57636c80efbe8338a8a6b5756c334e726114cd7f124f66dafa2929b6219c18c5339ca7d9e403dcef0b5d6599059a3029c5b698f96cb45bb1f518f85011f03ce732423239982d7d84b43575617474ab58981308ea964fd0ac697063f72f021bdcea0086308abff78219cb7f7f476712974ed667935d667852eddc171bd766380eb1643e5f2a2fdd6fc28bde32ecd6086e506d6fb3f0bcb51de8986c2e897114052ec9a505f4f191b634e33c2cd335ef3643447bad1ea71995e051edafd3d72248c8cd64d579a9b6fdf79df3eda92b5987adf805ef25ba08337b75162034fcf55205cbf83e36bcaf9f70e8b +Output = 5f495a9e6d20dbcd0aa7bd223cf5c4890a57444125d08c6264d166356c0c3a0e + +Len = 54792 +Msg = abae4491adbc185cb2bd263d3217cf5cc5cd9a793b46e0d2e950c947416477bca62c80bf7e42a26a883bb28b6fe4d603a0cbf46c59016aff031f00b4c2871aaa4aec33caf41586a811dd0ea97e7fb16b7910b961b24d83bea5977b95283c483e40f843fb39bc2edbf6ad23df8570ca5cf6a5cfa06eb193d877c122329a0c663e30589a9a75bf00cedeb3d775ad40889ec2912071b4b6021620a4ded2417ddd73c1121eefcfa7664872f613b21d7652f883dc921cace2393e494895be451915a59c30b94170fac7105a7ec0e0fe9a9233e28f0fe880c09e1899b6303fcd68769c69b952da80438bef3d53c4457734af1786b17e1f55d59a6eb9f5989b01f1691fcfb6d000260719adc37e0929b1cd116c184ac60756ab9606500db31a0a3c54f8762e1dfc8ad0db12950675d6d3ec20fa3f63d1e8a8c9f8a907076b0610d1a0ed07292016d52538e55bf3f293061a4489a402860c76b7291f86eaa7a53a39b6c72ab0c1952f8f98f0bc4d67a772dee5e0ee32cdbae6fe923074be4f41b1fbfc4d86c9e8c3bf9563f9611dbb5b3ec06bc8c6f88e3920259aa47a8c4a209d9fdc49c47f7de6aebf02c9f26bd8f793483e09d45eb1d24db4a8423f5b828a25adbd818bd768472395db28163da5c398ffc66bbf6b1fcd953326d36c33dec971ae07bf84db912e47a057de759d0a06766c6bb63027be721f2b7b1fa81c4624aa2a21c95792e1e24267deb2b892ef0a541896b1ce9b770814240fee9c1fa2e2f8a77567ab043ead3b72d96d87243c155b89ad2542ce33d99ba44a08ef43da4c82af6a63283a91d55a4aaed7895cd970b2491ada33c8d82bdd3594354a91d7aa71c96884773bc3a3c976c7b86741af6383e043984a924f47025e553c550f7f44ec7ed791400fba5fad7e8ad8c9dca435f3d492272f33817531a8f5e6b7c7bb611c5420532abf605131eb61ff5533a1302caf6d4e89b355fd9299dcfb19c1744a29d5a992de529cc17a44b3f4b6518f9a56f83ed6001bb2264ebb7243220490483a89db1504d055f6b311e880923b54bc98386c883d7282398d9620857b98f9a177f71ea64342753902db686b92fbdade1bf65f2ae8c0ac7e76b04c8bcb85959d09a7db0b43afe3d28f289a7d5d97074807ba7f84a90e183d3293601bbbd34e861821780dad1f87098383e87d9c1ac541830d34602663aebee8c7c2fef38b0aa2cbee5f74299a49250671b935f689fb12b775e6840ac75648c1d2dcfc1ab5b33b4b95f6085e2911703f7c766b14ee9104cc7cfdb9fb42f825e53e14dcd8573097c09ea791f5d3c730572b85e89d506e5deaaae1c7a1dd7c9b7b93d468d77b69fe5192d9d695a153ae76064f743ab87c653886fa76a69fcaf3ac578366bc2846ba26f7f3a0e7999d32c2963cd6932da266df98b18eaf91ca759f14889f3267af1268585fb793c68e046662b5d84fb7c8a607686cd667b965687d514ddbdf3f8c4d3f3a84e3402d0c6b88f32040165ed66ed67f9417732181166d9739e16bb8c5b4d227caec96d800b151cfe6d7922bb506776492197ed107c5986db47b7fda428f4aa699993fce531ce880706569254bb6109fcca42ecfe0be255b266fc3aeec26ce4059b3e017ebf5758e25b2435581c6cab9ac802b25f2493de9f786de3ba9c0877b720224bcb283227f6c85c9c1407dcc3999741edb27ad08a09088798962a69de24d4eb0c48f1015ddafa8a2736e253fa7fb4aaff76634ad07573d3ba1002137fa505f2f3769e2762f55e17773f4044a8c39c88583962455a7b56dcd8a69777d4de4fd471d2a426efec6f9f0c7bb62166ebdb74986a1c6270613dfd64c87f0986272efa07fb97825d169b8b479aa89cad8eedea2096e624caed75cfff040d6b0c160fee364feccc230a8e56c91a8c08f4f34073913e540eb276bacf07d7e6fecf317f2b8d5e1866da3ea4abf159f4e8d5df7f8b5aceea72df7359750fb2805757f0093c6d94aed50b398ad560f767ceb899f7ac0dc71e13aa89fe5c77326de73ed82a8b678214a90e718d7d8861592d25b9455ffac563439c20f5dffec60420dc604fb2fba4ee558c8d390ee8364d8695c3f511c2385e952cbefc89d6ebd7b6b90f052daa8b906cedd319f400d4a95d9130636bf4ae747af4da6ee4c0128d0b6d6ad765f494bf51aae9bce752cb213490952cb8f27629875cf9c97b2ae8688161da32f65a6eaf965c377e336e88198e2c48cd935c5df22cfda398b777cc0ecb2ef3a4494c57f5cd7a52ea72a4aa06dcbce1a285829472fe3f5e5914474be44b3d3da7f96b0f36497db29e2fa59f7da2daf6680a15d8005d9a80873c19c68d84052eba6106f2c5aceedcf5c4d1e6e2630edd6a9b86874ecda7b0af795fea6ef82f3d582ad081486a36487dccc9fee9bfb12d46a4452092e0ef753e668a261d2a13e00db1285922f3fc6bb2c1fe65d7fb7a6c78dee2329129ca34b07e48e7fcac4bbd579eaed8d9ec99ed212edfba51b8b2f17d85de4bbdfac075b24afccea1d13f3ba23db49ef1c6a713457dee4acb7a0372b14399da7de68ace90371648813b76d18a38da09fef4ac948c39bab5c9b1e456d092c54d557f6195f6dd35c43f6d8b158bfaafa855f902d781dcc589b0e2ce2447edc132d917ed6232a7cbe020c9d48e040d76089b665262c2f19f15359f294183cf1e196d6296c9f021692ad9f2fb91aedbed8933af03bcabf28806bc599e6520c14c7fb6c1e6239bd46de2bf5b68c6c90076d8b355af4bb96a40ccb98495d58b4edcb419c86405b22b6ac6656594a40ef5a2459edcad9677c339e5b1a298393fc23f851ae898f6cfb0e03450c407afdd45d07e5ab697336387d3d039562df6bae5f5313ea4ed6d40ef5ecb05e94a40b05bb1d17b65e4991942bf1ab4f1bf9499048e66f98fe9dfa24146d8f937d50d24a1a6ed858d2e3de56e5c23b917d5a936c87b84effc06d48041391caf42207ba6d23030ed7edca864752b99ba3b089b308c3d19668bdcc2578995d4ac9ac502b347de3a37cd685f22f1bddb3cddb0e0f2ca53a311b1d45f9464edbf55a42b48d69d0167d8fb69c89d6e8376b57277211a2d4fa0560075d2d37dc12b4ee0dba48d2c6a58658b498b20360cdac88bb3c1f31f919fc7fa39e2713e80a70ce35eac4380597a41ef900d7802ba95caac0f4a3a0bca0fdbf1a8f50a21dcc0f43e1cc696235f4c12bad5c5f13f2d365035d2304b8c496ef6a94b810ab205f7b9339e9a01affc5c4c5f635b2855d51addcbb50aa41ba03bcc638a2d0f89ccb9a0666c8cf260b119535ff11389d132d1e7c0103fd0345ef4b1c2fd4f64f371956e690f1604f00e01cc3ee7b5925bd6f9f2d58c465c50e6384b3a1d6ec7999509579deedb95d863a41b6ecf87de3021d1735e81c4a51bd664fd5b531183e6b784109794344184728ec5820120ca18b4170ddd892146df90194c8936ce465559a41dc897b6748e8b105efb3506e25ffe2916d51af2be26a3b3bd5640fb7b8febc7d3a351e8cb414de74c4cc3a0b370709622d7af9f777b91c2c4450a3f8fd0fe9dd6da5b31a2571b6211f94594ba14bbdcb647cfae1f68eac505d7eaf11fd2f2649bc02c27963a741f4473334972a7206b45c7e3a4f2590f48d6817bb6980077da96e74d310365f87d686d054559925ec055ba940aace68fbccac424f684e3ff5e5cc226f49664191ad22933fefb70b78a6aa24945bb7bec9f67228f4762e7e96e51e351d8bbaf4666364a57fcb4ccdb17f9118bec8a93967f102f031fbe96c6992acd4663ffb210ede942e9c532012a07957ad465b6b81dca7a4c38f5f47b275d2bd28d1cbf16f9208fa551cedfa834b7a460ab57bc73f30fea0c9950a10f8c38e9a59e6986487f9c7de438903a3c7bc6ba458938f831b6ce03d29cb650ce559af8c8e2d0e1c104b0587206afce487fb35babe660168bc9734c40cb9d60322411bd9ef2f95e0b390a93e134840836b0ebed065b8383ecbb9e27d99e8c6bc5783bcc9a573967a18d19b4b44aa37481afff02e75109ccdefdbd1b0f9df9e002b2578a6d88177b0e616c3f6dc1849fd3dd6b21b15f795dcd103eba55326c497463139b6afe2a24bc5650987031ade687b99ebe16df48b35183c17a4d046a24951aee643531d7d135fc85545e0395e537d5285c6a68fe69e6d8b3df498c69edef4a56793ecba72cf59468f799cfc3184eb086713e8500ee078fa46ded22e221dd61da4eea142e8495ee79f6b5eecbfc36cc4790f5ac06cc3e09018aaa70795cfa01e849e9a3c474714b46d634f8f70daa88da3042566660e4e559ca03ed75fbcf9b1f2ea0030f69223b4e1a99770ad8f486bcd3870ca658b6952ba07c029e8ac8adcd319fba65ff234f0e4845d14dcacf466dff46475d200da8e5b2954829767fba91074b227e92eef6e5c3ec90567f75387c18029ee13364811654c236cd6b4f32091434e3afc10fb38331d05cab4390ed55c24e6bd92f55ce4c2b9546e0d5d1a483ecef668005e01564f6a36eb2d39cc589628c46bb504be0e58b81011a2281929ff5cd3385de1a8ce9a6c87f038c1361958d3ea7fe62d159711907fdbfede98cbbd360d327c6199aafa6d1e623f97f41f8b6f80818c360988d38bc85689473e375ea5cbdec3a67bf259b323c9a984ad731542b0fa0ee844e888ef140aab2ab474ccef35c59b77f7ac9e87bfabde50091be095a071d60b6bbf17058a7ecd50a28aed5c746e6d9db5e2b131199246c3b221d2af786e4b6729166815533a5582ae82ab36b0619fe15c9b7af95b0549a54d8cd5da6179d5c323f4636796c6ad868363edc310279b0994e0e027aa8d4fbd8565d05c831bdce90461f0427cab3b24c7359a4dbd47c7dd07b8ce0231b1c0d4ffb3aa7e05dbc89f7265f7f02d70692623009c1adf498d275b2b29d315f904b2667e4d880f4202ae150960b7d09d9e523ecdda729db654ad3841dae281ed831f60cfa0c2cbd7f0de975413e08dba4172c1a33c9f1f1583384703c9779b16a5e395ad8b735f22fbf69d4ff8b28d50bc4c538baae88eee84902f78deda8bfbd3c5af20f6e5f3ab8bc0d200f877f8e676a99d8c0c9412cabe7d99a802527a24738f5330c95eb0fb0902db71f975f605d75046ae4aecd22f99c72d9c1b29901aef072be6ec27bd99db8563aae4f6ad34470bf7f94d38f7a87d35925b12a5f464adf6df494888430d6b1110b1a24048fb2ea05876fbc0a8bad29171edd00fcf8a17231761c3c86ae0206e8a901a9bede2f4d8102c3dcb0eef00a1715b3caf481593587a374631599961637a4f3351c572017bc824fca250ce6f2e3bac3dcc888c8b5bb0d2ba0939c098b988f4d7a9f732be5127641e8e98df88ff76e8bdafb67766f5623b059931dd2c385b89edeaabab9121d6f68cd50babb1decb18a3a1fb5f8cee387811296a7985a89c155c5d0b63e3b57ce12fbfd3b95391e243d7e87fca650ed993c4010c1b0bd1f2a10e4a3ce41dd3c22eee961891d7e1627140cc6943591dee9308683e4c267b0634eaf969b6a54450e4b0a001bca396f4aac897e14fd0e21e81c4a828933e6d80d6d8b1b85fe5d0cd0b5f27b7c121783ff7568f117832261264e007f378bb70078fc0bb5169433ee2ace2716228b84eec5fd3fe1f45e7b1714443cec783054c43688a5f5d5c295836ce21c6287acfe2a2eb252a333e574be42ad744cb3d84c9dd681fe504befee472790470343ed0fa0aa2355c76eceabc131c83b3282da0ae7d9865956d192aab3db573b6acfc225fcb8cebdb0fd609cba5252f6105dcc2c5cafe45b7c1f41575408b56dfb93d2dd98eb12ff127851a42434ac3978bd050d46da4a79227d8270a2202953482875930fb1aeae4e67f87e79495289de293b4a40d92746fc84cc8318c2318fd30650e2bb9ce02fd734eb683410d44bb31ad54fd53cf9296ccd860b426f5c782ea5cb49371d56184f77911ddf1ba0039a0a49aa7e763eb4f5a04575997808b0ad9f6b330ca38edc19989febf4da5455e5902ed69705666e29a5915e988cc4ade24ba73ca6dfe90fb8205e7effcd5f974814eb40c97b0ea96b55e022ba0e2ee47f5305d29012f317cd9753336a75205c143115959037a61b5d39c86e988c95d8b71e1d7142fd4b88ac7624a5cf625528ec5d243155cbcb2851b990ae9e78981f2c2544a559ff30c6e745394299055c7222f19da0b4c7cc54fb6dff4f4662b40c610111fb2f897177007d079651eea4bc7aa6f860279c4825accf6aed2adb5844d82a1bcf4e3c5c0d7a96161d747edc8c35e5aafc18b9bd1f084649e4b633234d1418b8be30787efed818fb448b465255f7264bd112b0a9a5706b32e2730a738987457f2460de48cf8b8e1da800d5a4ae30e1518ba0117c5d87b6ac52dbe1e78ea448e5be69ce5804175e03b47f9d51f975cf42884b4cd3abb0b12ca26b29edb11d9b72d8c5d90b110e1123f6520dc8bc281895637ed31e148dd32a7dbb7304b545a5ad0fef7ef08ad24014fa12b7a79aea85c089a534da2c71a52c31173dbb0faf000ac05130a6d5f6535d1c4c2b4cea1f7f6a7768f28667fe9fb86938ea7f04cc230296859e7c96fcc352f968c9473e496de9c9348ca13b973b35828b19cf492f972aff1709002258289cfdf322150bfae9c4eb9273c93bddf05a19784c3a414bc4ea666010d02c9afb91b675b634d7967b924b0d385ccd35676c9a9ae23e819344d7690b364afa37a4d79f6b063535ce8bc883ff5ada84300903826d8c4a9eb88f687372f9ff3fb0cce5353d92848ae5a2de13035bd0e5404da57d6a9afcdd0e1d141231dc6b5188dc410477dba16b8e49596493abce54f8bdc8c80caeb3e1167670d1b23dfdd4324b5189a4422a3c2af7a1153adb2177cbc1f40eee280e2f5413f51e8ecf452c4f92bd314d867d914e367b91535a78b23c02adce69a77a3c698e276521e0cfee335ada97cde919ef5a7e1f6597ba4298cbe85c6319ad768ca93d6e5216230c8e800c4029c01a9dcaf237230e527b0d9ffdfb9689789a8184b5ba5051d5f67981a81f6463ae7b67a8880a1cf82e0d483c34b4d29df0ff39d8f17d63d0ebeb956c2e1cedd1f38c060c9e6f63bf84e170f2129c970d3d5bfdedff0f2f7bb262eea2847d12f139dd076b97cfadd0f1a816561a1b6a7398314c3820e809aed40cf3d94dc89a4debdeca4a26b341b8fec1a6ecbdd9b35dac1fa34c298088e6cb4a3354ec87da547421fd2cada2d5e3f6beb10a60200827e357a19e5b7133a0029b2bb9d32359817d16ee87af26b0fe840fb343c3b6df6ec8a9b5a34922808714705b8cb423ae71615e3cefadb7894521352c3d3ae6bf9ee6666e0f752cf5f86b7a3121e2213f80cb3856c92bcdc57458bf9a3b48381f34a72e191761e90a7082194b3dff74835c1565caa8abd1dbe8950f7be27e3384cc9551656f81ff449c02ce18155ec6205fda471712908c533e50b54fa73f6176c33b70d18c77c82ab73819166ca26e8cf8745cba7b9c25c1d23641941e2e3a6bb5042cdbd295ec336ecc8ac4984d062fd28e27236801668e409024d7abad36da2e89c5e2e67ed3d52f2a83b11cc1058f6a8236f04c72a73ef608ef88d44edf587c26dc854c8507a684cc945a8ea0e5322cfafc9fbd52604a8efaf2261c85ac5d3a75e131696b002dec3d4d2f526f4dbe9642f8802f433a476800ed4e08e4165ef5f16485b17345b1e1f71ebe0c8e776b3314ab5006a79d9c1d95216f1ddcb5e41b23e6f0d95050f8e284796511711aee8fca957df801f2ef2c324ee7cff1f3733687e8e13564aa698a5ffdd305c9a0af08ef376867e4d286f062c666a3a67782c487daf55a32ca6a36040c865e0aa1233afd11addac2d51a16a1185a1d7c8aa941be4d9bbc3d399161fb35ed9e8674f1a26eb4ccc51e430f0b77c530a1d6c54d2a95a152d0066065bab00a772bffc480bbde8133bb79d4dc5b414d98d567bfe50ba886a93a00e76d9ccceab19ac8f856f3a717812247e31862a821e13c81c30751616e0d5ecf270f849c573b7f6498faf662d8239e1af639de26d2a82bd7873a984ab7fdb2c3b7c20ec8e0632e651ed3109c5399836596b70a17e06c47bb74e54ceef508da81022b97bd16c74c4d0275febe0a5186aa4d269325db9bf4a004adeba8c5ad4a79aeb2bbf35ae63d8edc6a0d327cf9fc7b71fee5cb14b5d747bedb01127a59673005edf8063d3e969d1515b8b41be1693bbda69e622c5844052c2309a6b3abd526b043b8603e3edc0a350fad9d87a6617d78c41995a2e1ef5aa4ec71ffd202f8d0363a898bce756268c4ce486910c759b34bcde3dfe8e12dcae1bdd66885fd66bef058f8036e50ee1b4cc815a167b2d67f9f2a89ab9ee483d83b0db39b2009836587256041ae8fc394258391c0fcf75c24fb607773055a8605495275e230a5f34653067ed10f508785e787496231134f65e91639d0ecb1a8c47532b9d848512af3fc92802bf161ae432b59a8efb4854494d0a24d5f958860a84714ec07d7a99ed0dc5030dd0521ac7e39613cd3f7cbc0445aab2e59905d4233477f78db5f0dc37f8aa5fd4eab2f0679ca4471b96b5546e6df7759598d9ec1c7fed90ced5efc2d42802a321b63c850d83659f3fa8fc04d1ee7bd6af9bddb6408c5c8049847f350ec45439badcfabf00c06381031e58b473efbe3bf94d171bd6844c2fc76ba91d2bf529886703f4878a7c26562da0d24c9e99470d3d539101258e43050f32746074e208f8f2d331c6f1df348786d571b498149eb54158535276d3cb6aeb80e9e731b479f121f6b9627e10177ad6663dd5a9874b99ce0263f4117b6bc621fd0e9aaa9204dbbe11944579385799e5fa3e951b1ad623abf9cbd13eadac817a52ed6126a5321e8fcfcb552a7e7a4b7a3a7ddd34f7c8baa2e693cf45911403be278e25ef148a225dd5647cd80b0af75fce01963e43a9c57971c1d86d502db4b523f7cc4b089550efce6aa0cd068f075a5dd2a67f29ffaef9415fd300127ffd26ef324083a9d90e0f60e2ab4f988fe2348ff9f740cf54dceaff74a744fe9044db334767de1ee0c58333d684a7e994f0b50e7d6fc85d2fb71452093e823debf29a963c2ba69032de14f04d131d202599a47f66f861fc19a73ee3257f01f615702cc01b73212655bf8a3f5040f866cb45ca8dbd7951d49914325ad0520b529725595aec269909d3d2adc7e6f382e20c5cf0de89d9e10c3766b65e129fe679fa78e80cb52e5460347e4531171401bd7346dc1ad20259cc7b059397f44edb92c6d3a37d80729b54fe2a1924eb8bbe1e856b57eaa0db013eee5a91ae7d4832c6819d505654dab50dbb40f2496b40012ecc3428f6fc4c208717cb774bb673333cb53db83e3a4eecb2f22798489e1c1214cf0719e5ed3d00d27ec10f15a5b8261de91da3de38b6866c2c47d3c88d0538f9164df05f7c96e745aca51fb554005290a6a4d9de59facc62f0086b713ee4bc052a6f760eb03f1e0828dd70d2cb3100be733a21e5a20306bdc6d227edbba2e65f92d373979121ed447ad3ca15113478ced847449b1db77ca4360dd0e10c25fe30d6e3afa527229b212bedf4262df202e95d330ba9d1ff7540c9212ef837574c9f7f06f1de7b2b72c6c295b8ac2a52e6378b673bb7c6c43bb8067609d8 +Output = c8ad8b317def92bf92b494b203179c273bbe89bc5b8ab6de3e0cadc16fab599d + +Len = 55888 +Msg = 8cd614399bb3a452376b1575afa6bdaeaafc286cb064bb91edef97c632b6c1113d107fa93a0905098a105043c2f05397f702514439a08a9e5ddc196100721d45c8fc17d2ed659376f8a00bd5cb9a0860e26d8a29d8d6aaf52de97e9346033d6db501a35dbbaf97c20b830cd2d18c2532f3a59cc497ee64c0e57d8d060e5069b28d86edf1adcf59144b221ce3ddaef134b3124fbc7dd000240eff0f5f5f41e83cd7f5bb37c9ae21953fe302b0f6e8b68fa91c6ab99265c64b2fd9cd4942be04321bb5d6d71932376c6f2f88e02422ba6a5e2cb765df93fd5dd0728c6abdaf03bce22e0678a544e2c3636f741b6f4447ee58a8fc656b43ef817932176adbfc2e04b2c812c273cd6cbfa4098f0be036a34221fa02643f5ee2e0b38135f2a18ecd2f16ebc45f8eb31b8ab967a1567ee016904188910861ca1fa205c7adaa194b286893ffe2f4fbe0384c2aef72a4522aeafd3ebc71f9db71eeeef86c48394a1c86d5b36c352cc33a0a2c800bc99e62fd65b3a2fd69e0b53996ec13d8ce483ce9319efd9a85acefabdb5342226febb83fd1daf4b24265f50c61c6de74077ef89b6fecf9f29a1f871af1e9f89b2d345cda7499bd45c42fa5d195a1e1a6ba84851889e730da3b2b916e96152ae0c92154b49719841db7e7cc707ba8a5d7b101eb4ac7b629bb327817910fff61580b59aab78182d1a2e33473d05b00b170b29e331870826cfe45af206aa7d0246bbd8566ca7cfb2d3c10bfa1db7dd48dd786036469ce7282093d78b5e1a5b0fc81a54c8ed4ceac1e5305305e78284ac276f5d7862727aff246e17addde50c670028d572cbfc0be2e4f8b2eb28fa68ad7b4c6c2a239c460441bfb5ea049f23b08563b4e47729a59e5986a61a6093dbd54f8c36ebe87edae01f251cb060ad1364ce677d7e8d5a4a4ca966a7241cc360bc2acb280e5f9e9c1b032ad6a180a35e0c5180b9d16d026c865b252098cc1d99ba7375ca31c7702c0d943d5e3dd2f6861fa55bd46d94b67ed3e52eccd8dd06d968e01897d6de97ed3058d91dd5d62b1e07306577b392eb039dee0fe674ee23c23fc7200b6df37a624ba78ab01a18c5785b9919fe33f6149d7ccc2517ed7dd8c6b7bf28bf77a49c2d8836ce9f6b093a37a53605e27f2cc7aed9062adbb2eaba69692e9f0e847071a1ae5d115649361dde4c9d95bee5b588ba4b326dac65d32d2cbcabff8304d5af5106a0ff5f550dc4deea46660e180ebc323bc789f466c5c5732a9dc6b7795289de2998e524ff1ee3abd6b6e33a86b6e6b9333bfc5e4610f7ff4b9a81167255b58b9fab6f31a7d7eee7ca6599dea24cacb1ba062154746359039828cb2a607d96fbd16f0a2fffd73af51de8e664fb1e52be48ccb541722b5d3288bee15dc438c2a1574a225a578b7c664997756811ca9d3157f614dfefe7790ea5c3703b2df5ad0ea9d3645b6f6317bde627b35256dfd0ad7ff8cc7a2e1630fa67dd044cfe52dab631712cad780c915e7be02cae6aac81a5296b489abd3619785771fa0dd5cec01a96ca07cb21c67dea63774de69ddf449adcb415cc2dd5971afd08edf814d7f1be3234623efd5f31c44543a39590d68e011269b088f0533e64b1384c865bfcd413ac56e8636b05518e99dbaa35c430c26a5302b55b955d73c82c5692431bac0bad6d97f6e2db7761abb9b5de41a86c8659270570be9d52dbb7b70a4bb8d473fd0dee7e1a37ff13c69e5d58bc33dde84e3ff6f88f1c68c1ead5f9b9f551f6c33c97a78fbedd266904f8dd4ad0a6a5328ea15b327d0f982905855cfc1ba923382eed4133714cf1f5b12dc1e297f4bee9cc0fbc69a7029bf6c06869372b18ca415871140fcdf1d2383fbf93d69eb88b6c8adda304b99ff4c9bfd196f1a04b5c6d4dc5c87b317647af2520cb9d315c9b495fbda77a0132230048537eb2179b7a1a734db71c2844e2d8e5f3f18d1c7b5eee9f0222503a53c738ee80890f0d9373d77d9b68592ee81434169b8e4cac7f46eaed6dbc1db19f21e236cb3e5edebe0a32a11164b8b1da5c4f1ba9fa426de2f3ccaf32cd49035ee37aa5b6173817957daaa25234c15d963b988981de14cd40e5e27903ee58ac2d8c90afb39c0144947eadd5d040f99e96329ed4c5a22a67138deabf4397c308757d92d9564560f2556dcad00e21d7d164c1c081e7def9b7d56c340694422ec4e1471fa7009bdd8d32cb70158e4fc2b28c69ac155aed093bf0f16cd35875d25ddb79859d6517bd91b7283c0ab333609e77bac003b174ef6000cde39a12bb844fde757320d641a79c7d048d442f653811a1059ad16ddf02d08f4236ef558b8af764cb56d5e69221f9ded0f246556d9fa8b30aab02f2b3f9e9f70ee537935e7cf108fbaf3118819356772df985b7b52dc0081a5f1ce27c2b28d2846d075ebcc0c93586eaa6eeb8922eb06c1186e8c458e42ab54593bf901d199c333cd30a1efcfc64eda7bbdb7f94ef252bc8ce4b13b7a1957bfcebdca84648deabd32f380d97e721a054e4517f22143fed8dc0614bb074c2ded399dc2d4d12f44ede706b011835f64f70c4f31fb03a8b11df11cda4d9da5d4e68324087882487acad5b1581f4455d3b99b232d9c5ce71394b16e2e79a4eaf5b29297c5f8dd9f335ce23ca18c2b1c0f52e509345d94c9cd44054336c884e4375a504120dd4cfe18acf7eeb2df9e7bc1cad1496ec713168736d5e51ac1a65b43e5a46942ad362bd0c1fd10b4a0073c912a462a02614196e8700a9a03ed7017c05b755652f303ef04a4daeace58cd2526792ef518b3871099fc8aab19d24bdf57c4ad5179341a125c5b78c4298e58ff29bf70f3da464b4e42e23f6083faa07cb02933a2dffae55c7ff0bde6ecca10914104f4696ea1f6168a2810006aedd5b77291ef91abcccb95166a939740945da51751a2a2fc4df13119d8e4d5f53154564505c96606333484c8d2e1214d75a70152ad62e5add0a36798f9a5254d508321d38ca96817b688f23e2f8fca3af4566e9b211c79a8b4737faf943a3999d2cce2c12e77e007dd30a7208984db309ad2b49ab4b8a71680cb4305b08b59023d965fbaf31b16fd30926b15e9aa9b56ed839bf66e1eb71fbd1279435580ccb01b486164e47d5222381706c556e854d577d2eb585736f1eaf2afea108b01dccaf34cb0670886dc9d7c273fd9d8264cd4c0256b6778e99ca0a70c5e155bf6cf784e09146c681cfb97842bdff9774ccd7c4ee5e4ccd81d026865909dfacc47eee4b3e7551b0a28f938d989afcc3c431df4ab7b1f2e7fbb696bb2a36e66e7dc8133aa4e3a1bf8931ca702ab74fb2ef184655f4de13676ac1ad119ad9a01b39dd090bba68d153a43ad0d87f7f92d553f4cf7f0c5f58cc4d65dc11f16ea74387322216f5714b0d622f391f1d7050bba15bbd1e84a22d771237a634e4723677e44c10e4dc99895d617385cc7b25f3d645c1b1ccf432fbf867ab8e02da610818efaf380de65e06b4109c29591f0d06a5bfab2ff2b1ae5ee0ac26060449c786b6f7b019fa891b6db20e2db65d8f8203aa8d9c9a386360c0905e5ba0a1c9222cd29b1339235b6e08d7a89c9f42234175752dfa73067ff6cbb80ca0e073ceed74dc582d0820d3d272857e6d469fa0b7c6661f696cd57ddcca98159a47f2c195f964ad82296b68c5355c0e146ede5e51912de05dca2dd38f57e137ac399757c824ec09a6ff7ba0d2cbbbb6265a76d2ab400d0f4c2d88178b0e03b15b57d9e7e081e2fb000cca127790353517bc0194316db3fab9097cb05c3780312c0542f86b8ada0011d3ef14104d48d96ce5f7196074934118e064448f6ed72592d46b1fe5ba41a770d7534c593d77319a6adfe8c4ff2b510044e73a713e790d3447aab4db9aaa6f91a98f11aefb30cc34dd2478eb580cd8f3996e08be01066664c19a5db9a684b708acfb1a8e011607a0af5d502029881777607145d270dfbfb8f4a2710c68511c2a644fbd72e997827243e2e51fee4dbae03c99683ae89587b5336ba5404aa00d8b61c570fa0f25bb3e4d6dce4710ce21d2803ee673e2a83cce104e50f1e7f219a02824db8ffc5110492e5672223b89eac2ddea56f9e9886d881dd31a9daab7bf0d19c663a13b9a30476925572dc8f184459814205987c69857ae9258a01d716c36d9229fda4771899d706303e633957cbf5144d90f27e32bd164f491a5baafbf91c8d1f6a7aa678adff697fed815f632b49c14f787545eb679b3825c2afcd317c27b5cee75cefcc2734e2cbe7fea9454a9daecf24e97a9b6b52cb42e8c7e7c032d631c0dd14fa1befbf999b93a2be0412390355fe16c44bb1833127f669a1b105702a7db5686e6dede8b7775b3447a86964e9696dc3cc022076915c525ea30bdc3fc78bd521f4ca09f664e7a67eeb3a39688894d9ba3ac8a272146a666d94d69e893174a707333b2b33c774dd4653c1698b075daac1b5a51ec1e2d898601d1b35978fc091e1d4c73be509a566552645e1168e4d49a1e5a27da9222e52fee5e188b10af5fd797e7721555103aa730dcf895147ea1c2273c6a573fdf5fb0e95307f1eca9d5295da52c5cbc8151167b065498358bf8c0b071a7f669ab4fa59d4100228f63ff8fe8f600f8e966304fbb61209f5e951022648a4f3cc22f3b9a74b8af915b664577c46a9e8e8e275e9f5c8dbb1f0232ae439df6eeaebbc3a9fbfa1a54c2e3493d7d6a736361fd4d4291e8dca29ba2dd19b0d73804a0d9112146b7f6ae4bb9554e0d6590ee37c96072d3eaee6599b30ce906aade0fd78c80280718ddfa704042fda420539d5474d965c1dd23729dd54aa2a173598e9748a934c9a720e7e50a7ad2de352c0f6c8240a1d82a2c682c7c0ecd0deb2b0f84bff4bdeaed7ff51e9a6554181e9aa2c4741e9da37c59a4aa09d1cec85cd2e11434eb59f7563b909152ab07ee471ff610bccbefa02e4bb6bb112c2e5d52d1c1ba6a056f7b7bf448c1d5b444dd393c77c5dee0ee5aca732cb42486723967a8100ba1cb84f3b92a8c449609c1417f70b6585ce6302fdb506549a67920e905e66a7c8eb620dca85ed98e0623d3c7844d304cb9644bbbcb73fec0396cc0e8a7fd2f81734dc9b2c401cef2c88b12ebe232541766b3a77b354e67dc3fd9c8b4e85cddbf120af5f296a3db373fb7f51b13b0b04d077cc9fa83502ee23c58aeda21960389cd762c388ab56cbfee22f0c19358c351fe2829964029b276b161e9c4fe391f761807d2d13ad711f156649c9bdb8b0bcacd4e4ceaf62ba10e317e1001d8a6a008843880790159597ffaf56ef666d8081bf747ba650fd6591d3f15a81d3b7f33b59490cb8c88ecb1b06e4dee6dcfb036ca0eace8a117ca79282cb12883b1133911cba91a883be1a93702d6715e70c4266965f65e0b88785fb39ce8f7b1b4132e818be9d3f894d8ae786b37be64f454355eafbc9110ec509b440225bc43ceef82a967bbae5a1e423ff909ea1c0db501023e5e58186dbdf3aa5dfeefec966c18e3dde1c6f02952beec3d616620b55d5b1b6cc4615a6e77c20b75e5afef46061fb0b38c744fe2bc9f21c9f424430837b2cf8ea450ed8f945c4d00490e5acf478477aeca5c2412c6737f0354ad1952deb8bcf860bf386dbe22dd91ab53a58e8ab7b7441dd70335facc629de5791a31dcdd625e7bf4c1753fa63bbe8f4866205a49de08097d73d8e41a6ade3910bc21ac813e1568aa2f32a356f5cb6735031130bb8a5f2fd7dc57fcddf668c1fc75beb844ceb1b947b82283d58a6cc5a202dda87d1addc34ec35fbf97a3a20294dd459aa882b7e04622b14b7268071d27ebe21c1f2df8967acf3ca6d7e13e9d926972ce2d089c702dc59b74ee2d1ef03f34cb261222340bc4369b4d0f3d82d55d90a2cd32bed3db87371daa893838c14063f530e6a61485b3bfd81cae27135c5ee972026a13f294caedc436d417d912d40ffcd70d081ea6d1c19f80552c54952eda5d2823a67d3e61502bb46f4a7467828f4e8305f6c6e1a6c24e3264bbeb0245f9b0890ff4d83af314b09dbb5e9f21a46876bf61c081c89b58608d8d543b462cce38bf8f7d981ce8920f7d38b2bde3e221e2069113e3be37ea62fc1f93d9b34bae423612af4146ca6e74bd67f55530a4523cd3245f7154f50ee2289be92aec3b3069773a18486b10e0ace8e984f97a636fc3bf9c019f0f6b2c5a8d92d2b35373eb1b1d763721dc44bef48a0de01f23b7d1332658b8d15002c9388594cf078b8e44d373578a722cee50081b75954aef1a3ce7a1ead3ccc9446c18bb025c9be6c2b42f234e90adcf662a34079122e12ef2f97dacd2e0d5dda89b57986c09f517e9ef9aa7dbd8295654c424f8e1079655ea9d51b1a17e70ffb7cd81a8523587714c2d827b8fcf993422a44749f5b1bf06599ef05ac6fb42b1fa892355358de79572148308caf5620b685117854fcfefb2d884f602c3e5bf96d934c949867179f6e42b28fa1dd8182e9e4112254fa08cddefe5cf4418cc4c10ec76cfdfd56ed3081ad7c0aa08e610102cfac3c485d23b09f817e899462d7cb2acc5c39292f4776baeb106a31cae0e72ace4a8cd72e36ea989b1de6ccc77c5ee8288210c6fa0cb73f83d476fb9ae57a886a53dcaa7428c4f2d3a1d492c49bc47065484979bd263c38fd32f8a7055904452a2ff26837e386d5b1731b8e601c43eb0a15aeec827c4dcee291b6dc1422cb88974696ba7f4e7868bef98367a3e72481a05005c750f63128b8587a43ce29187a370092485551e2d4819cd4c695e4af59ae6317b1307c32700af10a843b56324295c6adb9c0d40b4083c4d5523ffc2b9cbcb5ac5328f696cb5dc32e466392630a36feaeb6c9bf3cd54ada4fb4a815e27153ae8c55434ca6633b36b0314fc3f1f7a4125ee677fabdbb60440a93d8181a01fab67e5e8667aa602bb257ee06d22533666885f2d26ed6194d6cce98d8ee1c7339354b16fb2deaeab69fea2590a847e6046aeb81e201cf1797b8636baf7d30f09893bb27a987ad276265327df62b9f37067e573cb09cefdfc89290b365af9da0a0389636985d3d42ba6cf79f3f45744ff50e92ca43287f9667611e18036badaad88da4eed198e061431d003373dd1056598165d5a38bc767fd8dd6449098a637c8f8adf45b1edfad87de17e09bdbb973b83f9502d9af0f78117e7ddc1420d16ef9e278f33ed9824d0d18024ebd26b8ce9cb0edfbec7a9ff12b9bde8b98ea7678f2b4ce9183b010695d348a26e4a855908c3c3468e4d6befbd44ec0f722dedd7c3bd47776318ad32b009877101548d7e1114b31f0caaab6be92ffeac8bde44da35dac3b4b505111b97dae91b35aee88e8b245ad3ca5decd61f01425a76ee41015dfa2e2b8e9ec133b5cdda0b8ba82aecef79270f47d594c0c73f6393c3fc66cf949203364024321da268c6bc63eed92ba689a42bf5a057be9a50dee2e3772aa77248df7f8a63e82bd6225bb86ec157cd58ec5eb4545c9a11d0dc10c255ed111b9f751f61bdac5800e980f58a0cee3b347f07c322f458d07d3337b5acbbdc9ebe44ad4f876a8c061f250b20abbec3f81371625e1256339f631a0a1a1c55b437e23a67dc5b117176e931376997f4c122ccd892abecea6b6b45fdb9da9be4128149c91b624732fb2ef1968c3cc96f842fd33d0f192d316ea89866cd53a5c755ef37795e7df64f9792cacd8016ca5f8b93c8e73e424dbbbbebfcedcb31c4701cf63dd3a76bc2d7c556c72ea984157525d3109fb693e8f9e1a9d5eb29d1628ec61aef607cc8476c12cf99626f01351101824c9efeaa697c6e76a5f76fdf2a73ffe1be98451fee6cee8193e1471aa3e3ad15cf9d7ce259a3b0b6ff8b13a766b018df1df396df426ad6f15933d84cec4d67022bf3c7d83410670f452eabc6b1d3af679ffaf892cde66ab35bc288f468beedcbe43a45f88332efc4094a9eb9864f321fb726d0b70b5ff82c0e15dfcdb3c89ff78ae9adcfc18bb999de7762fc7e933f6be5ffb5d865382de002c6531557fb0c09728a35ca69ab62e5173daf0be54025d0cefe2e53661f6a63bc3c7987cfb6a0765d849474f5f26a3a55f5c96464c683e2b49a90d4a8764c2bace0b971759bfbc28e71305bf0f13e0e1d4858927796e816497d83c886cd319c576ba98f040b7c8297d89febe5385cc4df9db3129841b0efffef8d9bab94b95a3e25b02cd595b11b0c0349a14d3855131f7e8f7141578cd44a8904ea615d51d9e3c763d774cb28005db9b4288361a56d4f53441afd38ba67bbd28021529779afca993b1b6c0c4fd6ff4475ce4244dc47f1c4578c3675e82eb64485dce9d3bf206533bc6515e9a713734be52ee4725817a94a5051878f947ddc679c79b18290e0462f5e412cd3bc2a6c28a8a6f44aa760d84dc4e76af62df990b42a8424248d63efe4a73bfb5afda02c7326e2ec6e48b801470bda5b4a330675a2c688cc4a032fb4dc1db21c0ff9f936a3f64f573dca91a6eebb96c2ec4248fdbbe6f4146390b857ae284009432fba3d438d68af399b624b7d5a995c6cba258b88026296f1c4722ab35d624d950d5782ca52bb6ef239be61ab4f7e623c2910c16faf30be850d01b09433a543862145b9b0fcb410f8341a8bd120a28eeb0dbf120b53fb158dd8cb8bb93165a586fa29449fd1ef3fac08fb2c8764a22ce9e674ffb3873e168cc6540e9add3fce37f666b5df78c9459e26c4b64691f9e6c931d70d20bf564c02442fdbd1ada037e9b4828ff857debd3f2c2bdb972f1626f97e59bcbb72f0207ed0a355d619236d3c93012593059c111f6784eee19283880b2a7170ec38782e62fa731f10a625f8a130672907f88debaf976472be62ce647ed4b2dc4b767ae04f30039a29eb4444b81b290cffb720a7700a4f09a6266346b4fb925151c364c0a40fd9497a4efafbd1a1db43c2a7f0df015ea9060143cec95e1da4728785c259f1f868cfaa47a6688e62d26ff9618aecc3f3070a88417d46caa94da265641016c978367f026bf3155edcb2d41c7a3b6b4875ed9983b60b699b2d028363b4da818b0dc6ea3b325dacc38e0132a448aee4ff35c1158c07d58c301777781b1e8e14c727ae93bd2142794ce521ee195331b468e1260119bd88293a06f102f3f7a75b0e64320df0cf4e256b70b978f420808405d6810eb55d7feb096a23b676e6b2deb13205ab8e82ed1b9fcf1c65bd36f7ce66a47680d75e493c4ebf64051c423cfa602f9e1eeee28bd66a4eef26ed1d23ee0bc95afa083660874a7556616cb0a2388b9b7fba8a64b6d04b7e964efc49817d55b3c2ecb08c5266ad3a6f6de0b88f33a4240f10e99ffab3c3ec965073229cf6d50222db78b68b54e77d138d00b060563a57e0b4a4ead3db63f783bdea5ed2e51a231f38b94b97dc799bd741553ea22ace85890814dbbec19c5dd2e9ba44cfc29594fca70ab1f457e4354f2d46b9e12bd15b5cade1f93800dd5e08867b8ae009c7e66f88e5902d71b7c7df936dc889d3d337fff864b9bc13c79698f69677b0353175dc60c25caf9454d20d3632c128bd54b9d78a4593d774bb8608dca3c1bcdf62f1c7c1398e074a4bc26c682e6a3a32c64f77d5ed2e069e59badc8b1bcf6262ccb8b62ca38aa0fe1d4751bbc8fa2aeeb867555dc3deb60b0283989477174d69df592c05a909194a49af61a38b17975b9b9ff4a4722c8245469ea17b3e2fea4f2b419ddea25fec99418910a1fd38fbd3f067da2c709de7d7a66a9bc1e97fa59d3110802a38157785a552f35987e4c512474d7a6837b9533ca265fbeb019d2bde7124777ad2b05679e59b6e1cc3918f8110cf59ea4ff550debb1f26690efec98d7c2be842fab715f072d1057e28c5b79aed5bfd2511e86d4860f4cfce7a1b2 +Output = 796c4eb8aa343c8115127aab7479500935c0136680eb68759ead6786f157f83c + +Len = 56984 +Msg = 1ac2cbde8a887c0a8e26e154801fc9643a767b75d96299acc1494aa8e1ec975a38e01617973dc6eba99a3b313238fb60947d272897a45ebe69b4de74e4aeec8c100b774ee965f85862759c36a93da532ad860d6dde8d6d2f33fa1e7c72119ee8ac2c35ac0669d8f8c0a04d8b6f9890828d7a766d348590a8270452e9127d7415132c995878af2f74cb0396590caf84f73d3fa85024f48dd14cbac2e24d5a38bc4df1eb7ac7a1c4738b86bec806ec4939c4bfec3d33422d51aa04b590a911b0846365733c79a6619e09120fffe7b6a6f12ae0895cebd838d149cb751ab008a5165c6f78c41825cc9d4c8dcf27367464c7788cc9d6d31c76f832f548a9eaa8de1940f6443a2c88ce175ce147677c904b62b5aaf2d37377af6f6c6c7765de59253617e41dc73b362fb542f4bfe84071236be9224d7a5452aaddff16497514844015ea204c93cf97b71e05b07fd10a7fb4891cdc22f4fd1330ebf4dd0802148ff85dc09218c56f132efaadfbce4b6322c66557bfb969f624094152a8fa3367e415b6a222cb85a4125bf343bff67ed1c220a6a1b55900c8ebfd86215e693194e95fca97b8acfdf4fc07afcde33d91dec78bf503a64be1fad2d46269e99b2323089e3ea73c0252ea39fad6564fecad1299cffa8478d835143f557f3330d9329ca899bdda9616af0b31fc11e3eb4af9f4a0b45c2c1446249f9c4982861b6a86883019ed39ae303ae14dd5087e9fa19e0c4502c40362ddd5225078166b9298466f0ae676cb6c971bf3f34c622e5337c3e2ee80d9124ae77125c3aae1e97da99bd79dc80199b9957bc98c2bc7fcef5691ff05f74460b5aa1f305da78b08c4e6ac4a518736a97b7082ec8138e1ee5b4430eaf02facf5896f08cc8636bdd05097a24f8eeabc059c7157e3383c550f7f49c72b19f0badab07e5380a6211f4a0704a46fbcba3cb502e023361bfece6443af7e4be6021616101f29d5252e587dd274db3043bf5dbf97050d6e9148f2f790bc7ed1c12c67b1939ab2526b2611729a316e1d8cc1c82d41273e1201e069cf4cbaef45113755b42036157fe0d0f12f458186bbfd882407ea90ddaad58fdcf461eff9303dec8a269e3d7be4edf6a1bebcad4b94ffdb1a53798613be741df36fb5a4c218af10ab0ff7f50b0af85ec827e8fce42ffb84521bd65208d74652554732207588ce6e637812a7ee786bd10f70b0b87a1457497366e93ce37cb3f6ab84bfad380502cd5768d79a4bb6ac171ea3fb2734cc7df3263d9a8bcd3623d09c2f43913319b3f432e72e184b4d25f89cc7b3933bded34a12a7d189ed8cfea9d14ea815904b49ac9afdff6716c43c3c31e5bf42b6d2c315e0ac767c6c06ac49f1ecd58174232cbd37b332d0d3a35baa8604077dce31b31e375471ad712c9578a50eb21d092ac5efb310af9bab73e90c432c738bab810d2bc0a8aa64258722fe95be273077e77a0ab31c5e10c5ba4e281065ebb6744d380522af09e9af9eb9a268031c04e6e3b4d5e2e028774a03f1c693b85744521a9c740671778338f9c42dc7e679df7da4dc19e563f31761d33cb0772c9f7e6c72a13f14f7da7be821a968596d260a64b4589e67aea93933b496ad62caabacebdcaf30f3481c19e69dd218c7a20bcdc49b922c0ec73025e72d6784fd996316f6e12e0d4c6c23a55bf5a508b88d116fc5dff08b82b87223a6c718feefa1b003b607869fc66cd9676eb28cffd5351e3a8e0adc826c89557b98080fe3e0ea78bd52d91fae0a4f24a7485beec4c6a21b7448a4bddb7440c374e47ab5fb7a7da58af3dc6202bf1deeac1078322032dcf1661a33fb5c41e7a357b3a5720d62611db3c19ab5628edf1ebfef92c2dbc1ec86582d41fece7c85dc6c2c10afe3439eca7fe39a81971f9c9c280d3005bd1cd9c492a8552df8cc2358fb7843d243c33d923882642f6a195c502f91da638eebab925bb4f8f2a4dac8fe4cbec645f68a455f24c58125a02527221ca4184415d56ad7fd79b0b4984e7cb6a727226ec441be188dd578cd04ea06fa366d73101b831f7dbe1e08dc9dcf476853dbdeb77490b0a5b9d9d18e5d1100c0c615722f689dd26be7cc85d07b0532fc99018287d01e24eef1fa15cf72411e5c14c39e0ac4ca8989bfaab1f9fa99445bc1c196459e9421da7c60cbfa0c2367b668a07d07f7b24ebf90e113bfe233866b1344a35ba799b053a4327b76f35ee3b60ad4998fc8fe28f5a098338bfa7afe15d6b23130b3d6d841af99adabef9b9a4541867a0b0056201339f89ac30b17b6425433c62c8af3a18ae6bcea01c882954957dea6e167613c01a129cfd1ddb1b6d8d3edecb7f397131791c4b9e045badbab9205a77bc5c886a720525a1b38f104c19c0b2a39b76a37d0f8d8a3b030ec74543b23053fe23206ee009bc40be47faae3f7b3081a9e16149d62212fd94fbf692b995f46978648c3bc872d9407a802b0282b0e0fc27040b26719c6e5c36bdcc117f6e2f4ea78b2c5fbff3052794e231c768243c69af5921a1463f04dd64bea840298d4969f81171491aecb87c89c89f8b7427ab608f5b4538e89c7f07bb992bad3c85cb5206920b968dd27ba5c5bdc4cd2b4dd6575374e65bbd27255187b7c6c72cea2d8d4f874bb66d36c739d52c61eaf20915d4a84075985881a04175a4fa2c6f2cf8723f5bc2275dac13af34bed7836cec126eda48736d3f1e686de1eb462b97c0b4b752a9ff67c384e98c60cf9614f059346c85f77048c57ff62d78f52b632b37daa325dc64062363c147e5f93e2e20f2f47417d7fcc9a008c206874d2a51ae14e2ec257d808111cb337830a6301d732beb1c2c54695e435b649fb97db37574ca55f8ee07e547032da873dd510c816b7680ab2007567523da564f7be1675d23cabc4fcc0602e67bfda8e158a433f87e654dc79f6b34acc6280f9c4b22a6673fb88e575be259dde0ddbd471efa36d1306abae7f6fa9473aea7090ca3bc01323d0634a62a375aabd6204e0baced95aa06194092b33ff65841e9cb270208082c802647c2937fa5bec077d3a59ed8c0e173d3874e7095cad93462de6202b11bd4bdab502344259ba54446f6ab414659261e3bf771bbb68254daa4ab542221ccc95a07b64e98c3dcfdb6002f8350d0bed649b509a2d0fccd79b911ca63cce48b58d9ce12bb2dc4ca16aa55d6d439f28270aac136686ce30cb6645ca4177f73e821a150cdef6fc2e38ea59a951459161493a6031628ec03b08940c7d0e5b65a63b265527051cb28c9c41c50d2aa5ac6059dcfdd217adac96960e2f5d9651df27e698a258288ec70ed65931b282cab8cd62d7cc1d0b4c5be97dbdf59160bf2f698d5845c7d0b3035bec18e5bfe01c7d4f6915153bc8d196dbc588a842f40e1b15374d869e84f32d1ce968285dcd03c28f787d2054d6a6231477568e97dba76cd3ed61ac02cdb60ff8d23044b4d0e7513596f7348fbb31ca3d9b11f1b99cf0e94ab67b011d32646f98b1587feb7130f0e8cc6b9a1401dc55fe37a017cfbf535c239a83cb173b6516a38dc7222b3846685021c19b0c2f0e8afe55eb4902cd378b05a16253187022ccc26f67749bae9280169de17d9fce2e33e6fcdace7a4d044099d4fee1475a01589d5e1fbf645a7a02e248b488f465a6165d3555f05ec72141873a40bccc806b84db62d749adc467b45b2b2006347cddfc0c0744f5d6c3f85676db102ed06ac9162583775c9f75c2602a4d0e3d869c3bac9a7a8f260ccaf0490ec0577d7ba181d722cae83e62f4f1ccf7b66776134b28f0b0961ecb256371e1f8f0fbf2f4acfd8f7b3e10371dc95ec1696f11f902140c8ef664d92c4c17e3e5dc73e6d56413a306d7e8d891f87d6f06287ff60e7c7c4f4f13eba990a76daf1e6152fe6ef25fdd03dfce28921c978e65ddeefdfda90d59fbb03374415eed3b5430942d04c71712503bfae984b19f22a430c50d0db04e935a744524859a1ff04ef1415ae10ac3a9b3927401adde1e938cc80b1088bac7633308289fa5838c36d64b626d4be4ec0cf58c425a56cc9b48e54ec8edb4ee01325013e4cfe840bb76b2e6fe4d8b7d19a2ded26edbc6a39eab7769048cda758369773e829a98fa3416ab6b1de4e9fcd2d3350c006b478aaf2309c2c8d54176d56e713109eafbd880808982c719ac899f07c4e2fef41fa9571865001bb0331a80ab069381a65b03261a14d205d41e4e09a651fa725d97291df251cc0605f6890b86fd0df3b6fea2ae4e1404defd85709718a5ff638ef7328a1a96ce90bcd3eafe69204666022ddea18350bf5b7d2a1ad2c68897da6e87eb25f6fcadc1bd1265e2bb35e7e2712fdf862091ac833a55724016c16adee78f7d76ef4a12a1f0fb243ee405976fed4ecce58f9f735e1d4ea06b711a2177e05610056e4aa4393dd64c9a4c58ff165ed0cd473742bbf40e5ccddb405964ad4225ca5bd9c20c908dea087e5bf6c6deaafe0c3280422c4ef6c82116e947da89f344d6ff997bf1aec6807e7379a695d0ba20ae31d2666f73bbdbc3a6d6ac2c12dcfb5a79173dfc9cd2e0d6000e3114f2767edec995772c6b47dadc136d500251e5927f52bacfd561975239ae8260ea4ec65fc284313e0a3f801093e318fa024cf7506c11e9fb2305ff1ecf043df9c0ec930d82e90f80b2f650c411a03e74d70df87e4a3e0e878e91f18bbf8aa7c43dd2c3ce47809508cc989e3d7dd14684279cd2644061903cc00c54e232c8288b0a0a40eb39d22c9dff2e51c400ff9af39bff6b4a7703d7e25e7e126c4f472914ce9cf0ac7f663c06f3be53a1c2b1a188da40ad7816ab4b4113f0126e3f8e1028328ebd5842c42e0c51538b1cea6fc30d8d677e3546e2542084683c332925478fdeea8e39a9756877c1f2e17da1c268485b7ac8cb2f2f5a495cf178023695341179b84a95dd00540feaa53d0b0e30f803ed837280f81ac5824190ae228d654176abfedbb505ed599b7573870f5a43db04ea89649dca2bfd94dc4fc6dc581dd5851ec628e14ac5dee50965a7d1ac837a14fb958669cceb6a47d435a878bc46570777171960d40f4db34f8186992d773bfac8aec02e27e17462d14a3d3ee36731c561fa967cca530dceefd10aaf04a78780f8dcfa32029684af7d976b75f508ca848275877b541a86fe905d1c5a5b9bc76c33271cbf869000f47d231b6719b18a0f8293d4a69cea200ada2ba5e457dc618723980e1bda5952fa7cf7365a78ebd92d0a596645c74e43bc77468b9322f1bf996e36b88e2879e0892019a2973a3d1fa5c2d123a000cb57da0cb3b8b0e462476abc0a026295761469119349668630c4405102f4fe6debc42d447b1282c4b863c1b61ad5dd4bda5561f86d110e844b30c660f4c1a93635f27dc4a78353eb7a7a6703701749722c0a3a7dade4d95e16ccff96b073e784314a92373ff2698130f3254c14b2ec31f59dbc475da90d3919feb29c3df0017f6832334349460ead6238c1390c8c0fb1bc75afff8448f340dd2fa919a3223f4e61132a90cf69879799b00371628ff91a09fadb4c2ba8d398e9c8aab6ebf0e81aa4563dc7d8421f685cc3b59d1ea2f493659408d759b3f56cc52f7e1b1c41460aba6135906db91d4834d99d6446ac464456abfd481650a0e2faceedef3eff9f472a9ed99295b6c85ea85a856fe497385666a783466a671e220f0cbeda5a113cf87c73f37658216ad340ae3366ff4a12f11df062795ee1b5558c50bb86765f6546394a49e3bee249ce843e6fefa0ad1c3c02ee628af9a4aea3fa04aa989dd16159e88aa582d0e2ad78fd7003b5cea89e609d0a4a2144995133df8f54bbd44f7a58119bcdfb9507e0f932adb55e9123df8576aae4e545a8e52ec659819525c1f66b3de589f5153a2978ab5e4f93f10628d11638f67f06bab4bb34caf8ce970f1ebcf2d0a3195964cf1df1e997fbf739c16f041a49968fb50403b34a830f32213a70bbc4e10e686b1b128bb8563faaa4f285c8baa5d3e6831e2eca41e800ffdf92b21d290d7c4b39557c013153061330033ceb7ed2de150a4a630217f04805326da8a267ed0d08b4c586dcbe58f938c33bbbf4d0975e2434cfcae134638f4d00157ad1e64a67a9c6b255a3c62bc02346e32b6b17bdfc19e7f78cf100097fdd33d051320eeb3235566614deb19502dca243b3d8ba0d5ffe0d08d1bae4aabebfb1e7554e489a17b54b27e916e65e6769bda37cc4234c2fda8d4bc0c3460df4fb64a2adacfa1dbd308f3efcd1cf4e99d4814badb7b94516b64f0882948ffbca97324882d58e3dceae09f3769ad32d3d25d5826f37e4bfba993b873eb5283ce79d0523fb4f6ac2ef38a18d7ff65ac2fe62a092eace0c81c38b390f1daf7798f514c47941a4f874cad43f563e6fccd68195ccc145039954da9531e94708e6d7990557937b5b9e1b078dcb94dc8c923171c54058a95ef300a7bd0b5ee34bdcc07d77a5b9d2fdc67e4e682d9081d5129b74fbe49e3d68834dd10dafb41afdc11c497298326e11d766456f4e9253d3b5dc323ea0dd2aa8af03018d053313a8fcb3a5ff1748761f399b97a914e17d0de3bb55965c5b97a7e0e9de44f625f7d3f74d37240b4112b053e5ea1e68c7250c0502820b0062adeb7fc8113a68d0ed0719b2aaeb5a666c4b8f0ce7d7338a7456817763a6743893fef2684177447e1ecbcaa9a45cedffa97854d735db5b739175c1e3a06ea0257268a39117047375b1a772fccd7eac54f4bf0b0f7c32cacaa4f12b0de16c6d7372aff80b3ae8dcfdcf237971cf597fac73a91a7c66e566d7d75029bfcda6c168ba5d5b9d542b6660a0c848d14ff54f514ebdeae699fb19e1501c22bf0c26864e73f933110ad6fbe44b1d45e3f85b0289ae83e315bd7cc93237dc7ed647f4a26bc40ce82d06ef82d3f9abd9716f92829dbb846dd17b716010b519a4cc2616ff08d61de2baf081e273d1f86c415fa2b5d59c47f1e17be1c5c4f25afe695096836cd1b4887f6f91050dfc8e671d6e9485787a55d50e64d4e0961527f3756e7b18e1dc5a44462c29d2e8a1f530cb446fd9d07c348320de5299cd4608ebb727cea5ad1f957dd5cf50314ee9b331138a3b9823cb6e61df9364d8b3af864ef824961119c3f09cf5ff0f0a85fc52d1bfe800acba8e8bd9122811858e752885000cdb466df0f0076e646d45d6015a779505c7fcddee115283486288a7c377f69788a62bf1cd1f2708a772cb8920518d5f8a9770d3138a34f8995dc946bffa0a8540fea8ed8304648b702682e683c17ae31e79f0e6247de63ac30c31b391392991dbeba5a8392727be669253354f31a6ea6a74645c4973d2116f77a63562bcbc8502750a6b1811d66a32bd26bdaf2a793b1690b47eacf35f4445a511155a0c29275ca5bf7e4849db577cafe4c7c9335ba0c9d5c9947285f59dec9e5b9ca0b0da409282ad29f0579c4deb71739bc5d4b4df2b4c89e6c6b1fce20d6a6a0f5d3035974b14bab439c48314270abd81cc95ecc1e5fcddbbce00dcdc4f1228b9b815a4f63064cf664a17f673d982a9c106ff6b0e9feead5db2f9fe535b9d7ce1dae58e23e879d5884cd85f34a9e21ea29a99998e0028e2129b25c80fd8134dceea2b5be71c5cb2626690251d3e31066db0ebdf08b1b46223b10aa3d76f7c85c9116c720a7413503cc1c6b0f74177486b727ea3465a9a17d81b32f874c8e10b1a77323d5497a8955e8402688959bccce106d94e0ea2e0e87802252daf8a49c7094304238d2e226b0fd8ccb59d2f097a1a948549293190bc4d8d69ac4e5dbda1de9e6b8c7ce08ab999e5adfff96a653a5d4508fb5fb0b17d9de588db19eb4481e0afeee0ea56e76742d22cae66b3d9f4f140eccb77c74c12b1310a24dad9e64f589f15889f38415c53c8d22aacb26c901faeb8233b1d6863d19a75ee57d2abf38e9568ea632da18213ee25db930e26f62fb7f56a715b0d58444853a0597c9c55caba706ffedd0ec0cc6daf2ae3700f0e69822a07e22843d954622ba4a87fc05e5435b47f37f190fec46cf87d637f30c11438df64562d13ce471086610c8420f4732fbc83d7112f244514863ddce490f57a009de89512841f667ceb3f4d33c20071d011e1a7e4f41b958ce3d317463793e103eafb667e9fb4f9cbe2a63233b06b943f3a036c13e6c9fcfd97a5d94e2e849269510592196b754828f3fe852df21b25a5bf4ff1450d17c48f281deda47caed559576ee28cf04b9ab9a7af0cc88efa6b29292ffd2372ed336920a21aef29fbf2fb869f1b7f361c39a6852190ad8eefb0f4ff0a57551c3493b4079b27d73e52307865fe089946d26b1816bdd883f9e13a2dc948c88213d22a976372dd06c29ad8f87cf4708327537937e0e9aef3d8ba53fd1050185260b1413bbe8e0421bdbd32a254ea1ae5e189ab2a6d0ed8a53261418c5a8c0f6f0ab71fc89f5764d338a2869f7446cf657d5a481a45951f400fbe4c013263747e19ce0e658f35c4c139311c17647157ae02b09a2eeee44b6d78b9be851d3d112a96dd543a1590ed96cb523b31add47a667872e78ff26524d3733add3fa582ac1888cc3a70b9d0a8f8f3ed2d15d6d60036e7887864d97f711b0b29f358519b0ef3f783082f035dbb90bbea38ec67deb0c558d995d62999fcec456e46f7a9eeff61ece9069e7ca0ee052a31a5dee95653bcd24f850d6c1d8bef2bf11e4536e4470a6de87ce6abff0bff48abbc12e3a5b1c25ed192302972e7cbc49bc56a7fe6ad988567b12e18e3d8281e3ec4b1dd33928003480267e900d8291852828d0d5afab0394fee9f4cb51f25b3d307e25f68be9dc99a1edc332f26b130ff9cd666a9f6fc93867b61cedba6a11053cbcef2acfcc2b8b02eb48f67980a138b5c6e143c69249af5a09b26bf36423ba4599c1d671697d9727a1a8510f7ddc9dc0a7d9f7a1bd05684a576ddc796b03eb0f9756901d2c333c849349e920bd15bdcee2a8dcad4a7d01cd1197a5d9094215df2815de2f9efce9be52a61559c8fd0714f9e68965b510fa36dac85e8ea96ea958ee7817253c2b3d1942557c272be30857701b74579771b03c15987d06d5da33f13d05d1aa7e5e9549f4d063f540784ffac7a033ff6c1fd221546077ce1925343ca637a40bfff780a4ec9f8350c12d3c73731d3eb9ad6bceab19b8d560edc0389fbc95f4e61b969dde8c2b50d608625c5604fafb32c5f6041dc81a1c5bbe4baf8ee2994aa56bbc3b4b75fc32d190c82e16efc1ffe7603f211e020cc31b252807aeaaca2be65ac8e7601c9acffff4bf303ab5fac353e6b7941039f9502b9cd5df6397a10f05835d30d0f27f8e9d9ec7f135da1ddbe4d3efdb98e2685a199fd5a5521ba66aaf6fd996029a22d5571962ff9cde93b026b258761c9df22741a8b7e7deb952d5306ade8579662d5aa8df20a9d43604d695fc81d21fbf0f7e4031fd257de32ec5251ecc8daa08e7750f6a718e7062e9b5cf3cecae16d81895a1e605ccb44ba2b119f6342d18d4e9caf745e61c0607aad41ede0938968bb623c31f726c2635472f7b7b95d24a6cccb2fcebfee0e976c0c8116a5820132c509f3058b382285294a6c639722bc332d8c38ce71c6bbf42e3f8536c69e3113c806e862c598d5f0603ad869a5977f7c9c67323a1df1adbfe5ceb415eaef0155ece2820f4d50c1ec22cba4928ac656c83fe585db6a78ce40bc42757aba7e5a3f582428d6ca68d0c3978336a6efb729613e8d9979016204bfd921322fdd5222183554447de5e6e9bbe6edf76d7b71e18dc2e8d6dc89b7398364f652fafc734329aafa3dcd45d4f31e388e4fafd7fc6495f37ca5cbab7f54d586463da4bfeaa3bae09f7b8e9239d832b4f0a733aa609cc1f8d46c0f0fc33dfd669b5af5cdbe2c12ffca6688761e7f40839a65c29da57058fa7594705c8bdc432e7c13b4cff7c47b2e046682978ad08fcc14f32458d4c7a420e986b63bdd19ee0372cfab6c9e553b95d4e3469d85b369b8e7b72182f58beb93b7a9a953c3dc480f04f7a04dbac69b5dc2459a311810146f9a1b80c30ea3767a6764114d440d977abaf15c1a53ffe3ae56f447fb49cfd9 +Output = be92f07b4b7cc6d61bca233f565f7f6f9a36ff20a48433f30e1ce22e28be6974 + +Len = 58080 +Msg = aeefb1889ebfa4ccbedb194dd8f6cc6c179ee04a6d116b383253356f0e7dbd0218587d103f2a6f3eead0d064db0d248759227a088e9ff11a2e787b79595be15ac341089d1244724a87b0073be15c16167e3b977fc42eb38bbf1c86770b45239af5d3d898ddb2b4d9dfa24739b28ba901cf10be17d666b7712e67dccfece289aaf7367767691f3dd138cf17c61541e53094ca77388ef107b6c48007ebc4db1e7211916d747e31161cdb5fff4ad326d38c15904a4ab274ab40c6908f315bd7e7da8a0c4026e39046a01079872db4e37afb998bc0b50b9aa9f97fbefa0b797feecbacd17ae462e5d5471e4538d88020e3666ae260e161080bc73633d2e0e57b3a2bbd05a218c1d8ccf74fec99b1ff8414b6cebeb2367c69d99432169e186872d3e406d34129c910329ae9963321f9b817d10e473f1d23631947bc90e71bca0dc2dccf61de7f42360f17356a8c913564f4a172a48efc209ed5c81cc93450d3f30efd60d70182f4f16c567b912e677c2fb10d41fe283c39c314ff9ae80d214accbf2d005e339aa7ea503f0333a10d96c158fcc57c9346377adfd47e16faf5f942de56f81efa2f22c9c3ba14766be94bc3f05844475981e16a3d2f0f7a8435a6fb715f913ee1a92e35cdaff785166563dd820807860154013c36f8963d32471a9f833010e66d7093d67706f5862ae7a5b615f4566214295d98d2175b868d941dd719b1c04028ec1955c8a754a22dd9daf7b10479031967bf241a74a67e1c84774b3dcae8719985875ac97a5c00a9a2ca475e20b7909875ed8b15f7bf4c6780efa2f663cfa448a4a78c806857c925aa3d4f253059321abdaf73cb89ed1af6ee4e844d64beffbeaf3f94f7578b242a59fbb70d1ca71026a6cf8545107a0d52375c9b48b5fdaa821018193630413a3f17cb261fcce953449813688a75ac4f02c4e18cf23ed4ce1c2dfac443dcc132ec4c774462286722fcfb45c4a2a1cc088efca50250e88b931570ad3d28425335b960c5bade1969a6d7382b43967b215f7f466fa36c996920f440f82bed493f6b2fbb7e309b8536065cb58e8b6deaf57d5b0c09174d3ab79e4104a43798dbccfbd5c56a4da256176b14db35442fd88e8aadb53907fbb4be348526790833df440e33e750bafa7254fd8512ea17e52c35adfaa9c81b7fedc30b460d3f47c53cedcbd287f91fabc335e339c373ab96ce320ecc4f7efae0cf114a0f21be9b57dc105b390f2e22be2f0146b85499aa4aa5cdd6aa11224d2641ef1a65cabeadf0a6f4e5f0e5b56e3aa0024d882f24b9099b4e2d1d567ebb592aa4a3d27006249882e392807356a927fd7e2133badc82dc97fc3aac8758ed8274790cdd7b5fa95758238a701fdb7c8d2ebee9415f89adca822126df0a798aa906b67e0f5391e43610fdf448530a8e751a0ace3885f2e2dc4203183e48a93bd4c8a320ee60647c3c93b9f89176ad88e6abaaf8a293e0c819c0ea3952a9afa80da2871b040ba01a72c79fc0d2f08a11e9c8e58e06f31b0789e420b1a29655785b7cac96d9ba0c65de95f77193286ad2855904b9ed0c6b483497eca7b6756154c73e58baf3d671068ae508365d881472c2474fa0de46983323bf954317af9ce357d0d4afdcc897a47ea01b35b677529aa8780e6c6109696f5d4564af4cadcece151a689c1cf746e8c1ac7896295deaf240d58944febda7a5ea12a110ddd6bfbc09055ba939ca46795af367823ba3a521914608513eca1a7cd30d9491539136563a77f700bdab5e01545c302176af4bd0a3b4d2baa8998a9d1f1d84573548fd44b05982c630015825b4ce1a9a61eaa4a67f0530a8c590bfafd62cbb8d0b62da2d739445261833fa8f84336e1684bc774c2c236a431b18805b01217f595e4796b98c0e8846ffab0de7cc7275bc688e8e69b2f4c8b2349a9749a6e319e3b45ef99102b1934e6cd058d4927374b594c6afa61a62911e987cca20d05cd1549811ca5ddd64ad67e80aa5ffe01eb62890cea3ab6b540faecd28e2888473eed48fc7d3c4250e1fb9fac1ba10bd5b823ee50c321fadb1888b5d04a72bcc10ba8a23e9da6fe399326b2a5d60ae32121f1e1aea23abe96345dcd07ae0aeaf1b7b9fdbdda8061fec2ba500465f81452bd6f2b7ce40f626518ecaacf057bc367d7a3b3f0c0530dfef559105e57f32008eefdf45224fa96c63ab7d7bd0d2fb671cff84d8deb8952d8af754c0a088696b23b20f4b4d196bc381e31cc4811a134ce151a52dbc8bde10a55819b9e041cd8dd366aa51b766e534937fd0106bf7adedb4bac4c70c44b39128c106790e73076e8455d7dfc8febec681c7c0e6f63071507e800a2c37acbbb6fb7a438790e6bf161fc5bf7ee8a89f82330315ce8a8f067f25ec9ee6a68b9f8907cbf96bd0629c8e8dff8ab57f2e306e927bf6508fda15829346a87dc0a9071232fc50ae34af46ddb44b5f0df556189584778cf56dda455faed65277eccd995865546fd72694660b7ef0660db2e900fcf23efe448c573f2060e3c25e94c10063891c7f6e0ddba421d238c93d1eae8fadc51975c65519aacd90b720b91f4be23b849da7fc514aa7269769ad25a26f6eafe35019012ee72f6c26989511f534e8e9401c100859aa1822b7cc3c4ea4f2440a362b117f808a760709cf49ed7e43b974a3e4e11a8fc29e1d19a99e3f8e00bac6a5f186c8b4cb26a523a463d52142fee4973c43ba5a5ce220a548fb80c66178ec17ec9f623070e74f5b5e0b5149f75e41036b5e71223e8b3243f07a9ab6dd2584766285d75e41630c99476bea5b2c8294ceba59c65031425cdbeb4314c43c6994a99c5fafa5083fe4c5a5a827c0a711e5e2715d424afdafa5557f7f765a45ee2698e256706c8b26dfc8c1ed91e031b43a26d8916b796a791599f55649dfc159412b7c92a41d93be0688e360ae2391139d82361ecc454049b49095ef13bb7955ee4ab13ad21fe8af60ee532909f291d515ded52bea1746c68b20a6735f55328834ddca7783da52a2f5e2587127b3f7a2aa22fbe14f554599a1327209b217b79a1bcc0f703eb6993fce4d3b6092d08c246537f16882690669feaf3fda9668cf34abffc84e8b1b842df215451dd1af18004d03ffe70bb94edfab7d560e92b041feed5e3d38f271dd156924bbd16cba63e16b6f6c8673afe8a3af86ffcc2f58d69fe8d2b657fc206a9e3c60e8a3eb57346dc563826f40b19b5c12b0813cf3c656c0a4417ad23090f47172b313bcd7f0544c66c887c7fd292eb2dde52687686389082a95d2d21729423513048343b8ec8c275384c4b92f7e6a4f170c34d51697362081b4067f37541e93283a816114b3a2a69581816a601817d8c80df44d84cb27afb1885e001b774e33b83f553e75ad5e7035a50605175ffdf8f8d0ae183a65225ec3f7217e48fc9bbccbfa470162428a2e3bda9ab0ddbbe355b03caa5dc0cff0d5beeb99204849cdd769539fd364daec87ad07869339949297f73b2f459f6f59bbaa4b0c0fa1c8ac2b9b32a4db02dd4e24951413d8b352d367d6b586f85eaf24b890ffc372dedfff61687f9f42c4b376acfae886a4d35d6c6d5490f89d85f61b7677ee067284f89020d922d82f32c42cc8e56d2a22221d255079b5cb5d9cab049a67021d371d7a2511f50497cbd5783a205d8a467727fbc8b84d0c475f2c38a8cf68224fe831cd87dbc40b243d3438675b6a2721ce6a5d1b4fd97db6ccbc04cfbb8336e5ae46597e274e20c6aed76a7a22142d044d74ace8ba24f15ecbd5774006bf2727b0e685d29d9c2cc74647783c1c6482371ccc51f5a4364e8985fef9c55925db5d1798bb4ae4b5156d2c0bc875f2610f0264fab20ab3187e7d21bff2245cbb3bcf0ae563afa5a1c50189abc4ec4b14bcad4d8739f18fd16782c8a0ca26b68b2fc5b253e3c9876922ca84b0d26bd083727ffefa4d71e169f3e2a22ae9930f9da086366ca4603314161246a15cb829b817c1a0db555151e909e3d6e4b83311f7745bbfb80e3c50aa881ff706c99cfdbb94bc5ab3bb5a865890cf8d579dce62a3958c75be8a2487345f3bbd6881dff492d2b55509e65429be72ecee09012baaa9e9617f067ee280b885acc34dec49b747b8f7b8653e07e124968322844d13920f5a210618533ce241e1ba2f4072a2eee22dc9ac4f2b3a5791e4db5050e74ec1dfcf16317d72fb56d45baf2ac67bb141691b72595015b7330d443ea1f339a4e1212f8629bc41e7837bdbd1db696f3f56e6693be6ef64441ca09ef23df7a9dd97db64ba155d2ac7123d496a6bb0b614d860ff6c7cb580aaba53da404be4a1c08d1755fa1ee89464aa238dc00123b8f86de0c54d4229d2b0b62de070f34088166bdcea8e6ce6e787f433901bc64bddb3bd6da32561d3c020b83698ca5f95c6a7d8330bbd26df8af6977738c5e2af8e0c710f813e003bb3c16777eb96b46ac33b7d22a0d07559e77a3cf76e057cd831cd31ce47de48ea145a6cf7bf1b1d48e69a02b4910f80de65da8bba1b22bc4c30bca4b3dd4e616749b46ebffea2c0b6998b0eeec6c270f56ce02bc82565cb95f1a273c52bd6723abc9716d58e73c53c44d849da28316c276452c5297616d13bde46460d19bda3ecd3ca0c4359d655624d475d7f9da49dfab5f900e6f47df5c45d72c391904d1e04f817f711451398b11da1efe50e622af8c89d850589e160bad8ec955b76cc080a924480453c71b5b01cadaa1564b43ca90306fb911c8c3aa4b67d6273b5838c86091a4ee92539d4e8b235331685e2fb94cffb0b8f94c4aa0b5fedd3df33bacf01c4610a04e7b41fdf48ff35f05b348e4195455d09dbd2d8763b048fa9dab9fc032de15b9f6c27bc1f44d556accdf11e38bbac9806d8feed6db28a3fd990c73912ab61eac19bddd330107d3e51c263d202abf8658f738f11782c468a753f2daeb8a6ab5e725c1d8d9812bf96e724d0d326cbf16bab94cf6b2011011987ce34857c868560ba972e11e1b4650677da81482c855f5362230424ecc98393162521e3e6b4b898a2345988925d353507ccbe5a9d4009c4bc08776365bc94a12b2c3ff27f960cad311ce61a3474f9cca2e2cf31ff63b867c22b70511152fcebcdcbd5dace95484870351dee4e6377724d04fbf4dd5834e47b7536167af4821804ea2ac35c1a36106568452d689178d0121a8bccbc8645e2f0cc13d92808f0d0d87187d4af8b9cae1a9ea8fe0b66c38ef80cc7e02655b309271a4dc2a2f80cbd52483435515143c997bd8c8abd4a225307c2f759a22d45022a452dfb702a9f857957790fcad5f30ae2ae3af909a55bc74824635eb976c4750136fba91a0870d056879e8aa07e7318055afa7274df3793c21b5318f198f909b2d6fff728f84947efbeeacd5db38d9d08a8141d88607e5f7e8d0eaed5fba967470c810b2364f0914ee5a60188de073ef17fcf23cc91f8d28264dd49ea089f37c7bfc80d93b32e577be51b4daa66aaa5cac974acc8d86c95d8860811ba25a2203bd91d26fe4dcb417ca48eda4ab33e7a9b6d4bdf059ea45088ddd72dccbb79caaa41c87dee9a8ff65b0c4acff02d8b646a539ce50a4c66aa984f91c6a833edde1cdf113cea02421f20049655253c580c4163afe65f487b4b12c68003d7f3c6049a9b3f887bedab63d173b9946f486f1a2785cb098dfcabdcfd29ea0de065cce32a5d9c8c27c3936b7843fcb359b9963525a13a761bcebd056260180b4bf0c624d70d6e6d79ecc2df1c5ba7db68f79605419f425691287b6d48525226a1fb7e6ea693fe56f6d00066c6a30233266a373385672cd17871abbdb7e9e08668f0ba6aa1d7946d28d715a87d0354e41a7a4067f9e1400e5711169cb80c09522b3643c0cfc278da966ac84e4963e715cc907b48a4f6c536b67084b351a316b36f35e117383af1c6c8efe20032ab01efc512ae7f8e8c05701df6bdaa8c974fd0be555b17e528485947d02c6541c3eb9a8c6aa2b4bf8c46e5150b882871cefcd29ffe7b69dd75c6ba9a736b267d93ed3da9fe1f8e40dfd1bc2517aed5073165e09b9807b52807b01249426aeaef044e00a538edb5186bee1ed682f85a56a8d223398bc8a2cfc85188dda3f05a9dfc580c077fd3d24f1ae433afb42b5f661c8ac2013f86d9d99ff045dd00c41e91645189573a9a8deed3fd223815128b4073d6e67b1d09024e73d470d1c0afddd325829f1ed30a8dfb7d7f14f90e7487eb97feb7308b18c4372e4632414b793f69253374e2b1eb7b8102b3307b0518fa6f6e4a5ca7f27dc79bb78eb3b609eaee5d4eac332e3c05fe8549e19f4563c78dd5e201fe68bbfeb482f6f41ab862c98fb787340287dc20bf113a5188df9149e824da6dc4fc4c6433f4d3c090cdbee0cd7db7140977f903652cbd4a14d2f566b2643dd4d7ea0f76ebfa36393c7f85f54db9c8957285fb7799dfba166ba5f9e6949df57f5eba6afe859b07a847551fd1ba72a1fd623a4a44033119fbb4e0049035d8e9b682f5c7c2a8e02e55d8d7f43cbab12a94031c4e324a2ac242180c7d2d3e1d01c16b228d8cfdcf9388188e6cfef57d4ba47db5700817d29e32beb0ce85567225e740c924222c731f892e01f0de15deec73f88d169011329315ce545e6026e13d712a72f44cdcd1b89f43b9e6a5bfdcf54a9b2aaa90e1518a3172809586557131a750a665d4b5f347147f3cb81b9d804e718e1692d12e376cd0d0bddbbf8c2ae9d1dbecdf8161e0b52e0914cc0857d1e030fad9381ba1ed1f38109298d273154e37f2cdca1a85a0e8360ac88c3495d791cf07f90236e27a8db15b883488b1394621bed08e68cc3cca73a9e15f67fe9b4a95dc005ae998e69c85d92617a9ef9fbad6667d9333dbbb422f0fe6ac683a24f4cca276a7fd6b3a36fab1f4aafdd44d939f135c41425d2537b0635fdd00f27b75ba80e1503b057d425a0c7a534b094db7c4edf6015ff8829340ced559f7cea6b7a79fcbbf680bb7a8eb11417b5d35a7108d1bd2395054db3d2578cf881575afa0dd26bb5b4f28f050f6e9d08bf901618541c67853de1a371da788d5d221909d1aa33e3a8cb7023122c2bbafe9e81585fd2a1571b5d1f29f1b10276f9fe5c6790c400fcfba6741810699b067fff1181a628e3144c9f1831a1fa67c265727c04a5dfdc0024d288ee9e4c1f07f34deb3299bb64179f50676b011b3b08162b02518f7227a5badc29170a483a27fef768db990ea6e99a3d77269d97dea0928489eecc1f7646343fdf11e2e27eeef9a804fd22972e02b3a2d204e5f4d534412b6d3cda3c3a7a175a156fb6af5fd589cc5a07c4e95beb722d028668c6a13bc86c46bc385d06a9dac756a104035f7425d0d29c0e79c30c5c28831ba461e51f9ed380fd64f64d6e05142d264992e0433451f91a5dccf60de841de35076af3581b0db660fe9c813f1cad039ff5b294ab5bcc5813415767389cf56e8320566e8de357519753c44485881e745ea706ef44f2ac5a1747ad9944f0cfce568d98b9298e6cecf102e1f9d9edc4f9e2cbe45288af7e8986df440e9b7a1d785f8dc665a352aad31e9a8a33b4a45cfedcd2ff60eec8bf60f2769f29a49f7af6decf43e693f68dce60793164ae42331dad6aac8d0ff4eb7adabc338d08d764c484b0b5de73e0a219773d5c1f1f5de3b0c4e1605934ba9f31b00e85ab30c8676bc1e0809fbb87745ec3358ec5904deb62c3d5df382570271002ec2a06a4d90f4716cd38bcd3717108c5102dfaa998a69e1ac66dac2abc2fa053e37511ed8fa8f113d542b8642524920d4bde10b3c4c1ed4a119047ecf5256d23731b7f6362e0f419a73304e6290ba4fc5703ba4768b9bad275eb8dc4c184d0e2197181bee923cab8918e44c1d3929c22b03369eceb0a913431d3d04a87ea6610451bdb48890ddf7152b8da9feb55f210e5d1821cd2110aeff3edc1f6eeb2b75e946eeea8d8fbccd4394748c8a6c241377682954f947982762a9dd5523c7a2efd760f3e584f79fd31d3be11e4bc73f406c0bb360dd8a0926744788cd5179d47ad78613ccf52f4fb4aa081b87c82c7a51f82efc6dfe532a523efe24b07f6b89bcf0a097c768a19416f2e46cee89049bee20b94da2e608c454c7b7fb253604895d2a97c70066b435a2feb51a7b17b86bbeee95ee271c139fd3185b5355fdac9b068d51eb9c76d0fcffd5656e58f9aeb26a69a8272528da837837d075685ccb895f22b74bc6215dafd57fdab0aab750389999db40c493c738eb2e00a985dbc9190ff0b12fa4eec317ce05fe289cda05c4f48717802be34085d305d137d4030f14bfff28de5e656bfc906eb71e53e93420233a423183a3af34d9c22d667e5b0341165802a11d0ebb26c3c2efd9fa6c4712cdba4599f3587b0ba46ffb7fab6c0e6abd0229c009721c5c100a8da2b7eba5639a100900a48c0cd3dd1323ca82bc99555b0583834918f7681f4d79c1b2efb6db344375b0bdc6ca532bb78c8f2cd50acb996afa310688b21097939b7e15ffe241405b70f0678f1d5537622016d13fca941f387514674bb71d20e4db2005a4915f6961e407ca6e6d9fa81cc6a6978042789477db7295e86c56644921f1ac652bfb545cb83e0deb22fb27ed6689a922d93fa0301694b7e73b8508c9553732ca18deac54d4dd598ea42f5cdee9052dadf6b0ec6a0dc2f6d18b70b76d5f3bbf5bc0d01752202cd5e05b03eef635634ca70395202da8447a2dc3e0173c274579a18c983d5c8472aa68b041863e33eb2d9a67b4e481cf616a834d9dd03e959d8b23e200c87de8f9ffae09afcbbccbe4f90d8ad5de6f6a62ee5c906f8b7b928a1b692bce5dba3407fd3bcf17667ae698d789d4c2b9fe618f303ef41ef0fc045552fcd0cba61d50e5cb966b3ffe806a4df095ad421b379c3055b4e171a6c8d547576337bf4bad24db934743ef3cd4414c6bb97d1cad20048d8843bf3256e7eba65326ca72f47298307ad7c1f1c88051dd717dac1916c47feeef75f627a76230ba6dcef0ab4875952eaacd4c0c498c84472a6aa201fe28f69ab2d1ee1942408acdcee21034efbd011b4bb14b0767fec0d4bd07c79c0f5652dafadf10cfce89e3259dea94d39252c640840c28abcbe0efca53dc84b1ef5579f6ef28c213f445220b036fe351d93dcae57e654ac01d39f87213723f0a462d5536b8336dab5c7d2fc728f865756b85f7526144190e0412c3142650616dbde7cde17e887a60ad39f2a1330d8209f13233ce5431fd5c297238f8b3ff53a3fb89c84168b04ffa8f7f53e14c36a2d3124d68a27fb55e7334613f65e3057c74a91e309c9f325641ac593ace9dfc2d9d77dd7d170b57a41ccce8c0a5deec43a76fabec3b4a96f6fda9ce8fb14be68b2dc7ea5a7320a0371d990da3fecb3b1206f43ae466926596f531e63ad2817d244bab7de7fee517803e45dad0b9d27b5057e1d200659f26a0f2eaaa2379654761c1cb9c0c028344e54975572f1d1d336463dd7c287f98617bbc7c2132ee1fcea856ce52b1c522afcf04d38ba974d1ebb8f2913f44fda59f8f1b90545078d89a62d15da4be90e8e1a739077e2404192cb3cca5233c27f06644d7ce496361b831f8fb1f9c1bab0061d3aeb93889171b7cbdb8c030f8459e4102b7dd0a54efe61dd09cbd41b05e90b7bd2c90c2c1f3ff663e7f8a6f609fdab53184669f0c6b8be6547cde9b65f1c16ccb7a3423b3e0ee6f9ee9ade75d7dca4c3906100e721dce12eb622bb323abba0767624e634628102146becea0d526968d820584616d4cd82bfc174b90d0d6a410f8aa868b64128c039cc698a3b2e36700744969a0e741d0b9f164e73a56b8a60fe61b83a1f4e58a9d09c9b0f7dafc652e789968d1c745df42310fa7ba9b99e98d987deeb0ddea3478f68ec1a437b9b79ef4bf29fef59e2d5024e0321789c3941278986ebd0969b01bc9de71b3af6186d85281532e5894e16a32a13159077dd024ed33acd25fa9260eec81682b2c3ef965f8a88e6ada712419c3184b89fc0ec54d5f184ff6c7f4bfdac53f4f14959639cc50fc84b9627b1de33f0e29ae52bf9a14360d00322990a206bee0ce77d2b26d95c044da23d9fcf5530e4c73d0f0d87801dbdb678d6dc6f91a3d2b8c5bcadabe49b24a3bb0253ad3ee9897d0f7bea1869db44a2b0f7cdee99face932c86756546f8dd44d692f7ee03e46bae82ca461ed6f2a21f5c03c209c1c72e267c6906d568fb9abb855df0f43ca7e7b64768a62d400a62a6ca996d43a19f7ded45e2d68ec329e97257c1e37251aa9 +Output = f1069e30c930a6b16d80fd500daf519c7fe6f16e8a65ccc6240cb635ce407c4b + +Len = 59176 +Msg = e3ed1f4a7232bd65821ee185c5b05cc240e70138f1d664b8b6fbe1be6acde0a351945814b67d92c3d2ee305cf0176dbbcfcaa65c488c1a1330eceefd801374b6b39daccc70a70b7469297c7c8387a58137626b6238b4b8f4561c7bf8a276f14ad3af245be8d7b1e00f78cdccc6278a7c405857320a77c6c5ee349397181ee1c67773c6a766360a708c832c340020a615b15472b506fccdedc1db3bc22932cb9468909c9932eca08aa7f1a09c7b9981b254fdc5d1736c55d497ba7d611eda381b6eafae199320fb98296b32ec7dbba1bdeffc576f9beee4e23878605c3f40afc350780210d3fba100db98e90c4fad909c4bf83178c4ab047f6bbeec9bd489b8f4d892a26438a41c2c8221cde53998d6b9309a59d237ca3c13f9342a0625e0db16cca696ff0b43f482e9ade65d82a4f97a668ad9673c741406ab8121867a6ba191f55be4c79302af6cd7e53d5d74f88349b46fb91d1ad115c0474eda011a5291ce1b5a96a61a07d7501370d9ce55bdfc8de3f2ffde1b08c6aa95425b604ebe3433064bb483e67af39866f8c2966e1aeaadbbbab5918542b02a5f06ae8c5ed710297dd4444540848cab9822019f0738d7130470e21ea1a659a96b41db6c92c4af194aa050d6704d29f171989dcf683f4a2686bb8f6cb75d4b90829ce8e731ae99693355df1dbefc52d2b9029e10d856cc4e0944c3650f8e0e456cbfdfe785bc5483019cfa0272b990b637070d49a1a5e4f354b286f0f0622832f151c753d4176acd7c1ca86dd3ae6905b450f16209551a7d30aee0f5a40123bdd9fba91267e663b16b7ef1462a006727f8855242598ef65565e0da5d71928750eb648c0e8652c5959769dd75bfda1285cb4d38d3d87701e1bbef7b0ea03dda52f034782e79831ae3c98675e3da62f185f550acfcd039c28afa84ccf1782ca62bb115765a87a0e902c77dc076c3c08c903d37b5a587fbc1b8e946d3ee43847242f3ad8c7af9d1bb5a59f5c617c11d6b0f6caa5cb646e687d451de9aee4770c70181a4c57717401753499690af1ea117684a50a81855229b44faf329d7ce162ccf22a32637291285555e092524207317059fd2a1b1fcd68572ac2e86931e9e29149d52b9a377728dc85ff68e6010bcf34c33d74f6a832bcec42f37bb087f314639bb5885a34986b8141504d14936a334a7ce08bb2c3148fda44ab5d0203bf70ca4445e9220e6768da148dcf8c9d951617d370decdd50559a79c750cbc1991702be000be900976b95d8bf260ac742ed0235378dea66267c2eab6cb1b6d5e0b9b1efb608912da48d561f4489102abaa09f399631beb0fce340a20280984359079fa030fc928d55035adf9dad11dc8792c1f01ca06fa219b258c550647af34c2656373490f50af1f62981933b15c4f1eaefc290820523c712fe7e200663cd00415e1e8b6cc18bc28d496beedb25ca42d1b217bc81891d4c2bbb35380e5bb9bf7e3dbbfd37fef70ef14407763447d6c06e915766430277f124165061236b9fcf057d785199b4381e49a2bcf3ef85d0b5ea14ea57707819fe25983863ed996779ffa5bc513cec353abee9f12cb3e7a0676cc33957b1f3ebbb58c7550616eff905943eeec3c5aed6aa78a310ea29742f1f1d27aa2eae7cd46fe32e0f1243753dbbebcf7870df0003b59e5780f5f934632424c7a6a30e1abf64ee52cf4e1e321ce32de0c12030eca4a4588ea915ca2f25c0aa2b967f79d691e0a2bdfb834f2e7cc481fa319a6079a1bfd0cff312446e5e39d7dce08a99b7332c26f6fd797e7147a710a430a818afe24e2ba2c6b310f8f4d8d261ee8c13c58d90a3853bf8520463d40266261000975099948f8ac1d6d5d1e5c442264d9208875341f31fc873eeba937ec87b9bbf38d1e8311fa7053d0edba8d408f294bc890abf27c60fb08a37322cac539711fe9b4e822ad98544eeaafc682b3ab92b394ffc1a7e89757a3fe8b5e6b58ee33a64c6b0b0a8468c4991b11b6ff060e2d8b26247ad6dc1b8ec39072a0bc101c5de9ac3ddbad3ec25dbcd2c1f034c03d764cfcbd1c01df840cf219f78e1f735a6c4479abfe8d255b6c14a22f26d67aaff973791849bb6b575ea9eb589b180b1efb514513d81ce09a9c4b19b7bf568ddc23893bc46855f81bf07595344c284fd0679a8f23ecfee8e64acaa9fa2e2782488118a5501c840e386ecf980915e2aa255d8ad84ac185b6e5141dc374f7ebe08b9e8c5629caa82633262274558cb9a27429ac8106ea53c31d64af06a6a0f6310bd86ebeeff744d892b318ba98152fd143786a39d6cbeba5d5d918d41dbde8ec5fdb3a5fe126dc8ded921ccb4f53b7bf29b65e6338eabfd7c4ddc5cc28a3368addf369b9cbddf1ce9a5fa936e9ace3b48d6ff39dabcb32c150ef405f760561952ccd974cfe8107032f58387e05953669e501c429bde1f6fb108a12fe8438ec83c2d62d9a07b49ed42328551111b11237d7084ac7ddc37f0d7a3aa829c1c249df1689a71155ed2bba0c5c99809c6519b6ba0fe1d899e43d40f47d9a81bd460c1fbe749e53979f301d4141405d1435bf5f248543dc60c8b46e25cf4466d518a5ce21037dc11b4f4e867893140707b775a9ace4cb63c0f576cd64ac4079b7dea952c4d2bffa7f81c97e08be6f0ee55edf2ea9baf2df38dee6e75791190ab3fc8956305eff6022bb536c781fdbd54b804e46a17444df46f99754751a38ca87e6b840e9f49682a3705efa5d53c51a98e0559a2aad5bb469ea0a9d33b41a197241c89b68502fd280255e801ee6c51f5be38781bbd2822f1014b31a19db577821823cce21ee25e0376ec49633455684030e56a5cb60728fe7fe13539e0c5b77042c8761ad2b033c37a143b530fbe3c93cc5456edff38757402acdf246d3a096a8a53afe709362371f513e65ae77075f57acd6557fe83b25b71f255e9abdb1477d80b9ecf2b3ad713d13271ff2434bc6f2297bf211db287bbb3fcbf100172819f14396c5ca085f7b4f5b904cb2ed0b908acfb8bd3c38b9b9db2124621d9c5f7ea26254016d1df2a5949f0c9456e0c13c80041f2f657d89708557c12a59a9e1f61f6174384240f180cb51ee5f54ab272b706b11b11435f220584814a24abc3a10b6d579d2e02df6ad4218d83632b8880dea7922eaceee9e59b276a162476fc24f1712c759cd415c8ba7583c9187a58e244c92e554fc03d88d2277f9f2f62135019ebe0f357007ad9c49949df9b9de843f155cbb6832125b2b26a080dccd7cecf8dc4b941e6f0d646fc7527ee74fe0049ee34b279cf79670b44d94d88843df74655e20084d10af1b66af2641e2c036a9c424c2bc7bc30cc3c8f5c9637ddfd5460772ffce7a1b892d215f64a964a16ede5f5877dc8d1ae1ced9bdc2a42617daec3fd92f78fdd618342056a1f7f569e50cc10ccf2a3965c1fc5713f52d29826cc17eef237a70d6c8aad42372c00d8035cf89a02d08193a09c6d186f560f0960780553390555b94370bcd543b94259acd9129b13608951e35d8d98527e203c947834334ea9c16a4dfc16c5780e6d61038fc11ce6eae4578e28ccfad2112db928954e96196b15a7f2f8631abd72a8766f45ae2363b6b92d07c6d245d65960098697f885829376f99a2a4ddcf92f1b2258c581bb720b315cb8ff4881459cdfb31446dc0671680ee7ad5c7a14168befec26d5e1e9fb33746b079ad6b70923d23f3c6aa224ce3305f9935492cafbcf4c5c423e76b7e674a9e25e6123ee0936623565caf2e4813c83b7b5db3e04904259fb12c7e92c1b17f84a241ad82e2d1db61ef62f725072cbafaa79b826ccbd2e3f50ff3ae25083638a29c18e9c7f5d1ff8825961cd6f8a28b15948b5f1296ad925e4725e082c04a2870a9d8518ea81854de7f528a949af9bb24c8b9847247f8c343dd1fa04c7871a177220c7f4768198dfd7324cafe7ca6bda0ca82ad2c3e48f94e585d77d2af51560ebb21bd72c459dd6d978948650c4e1502009333710822a6c64f7bd1c5b34d98dfcbb4a6912b6df5a762fc9d68c83453d10147b21133fa5e4408e7389642eaec42ea31d5333baa59134bfb349a4f1dfc86533c936d304472603b1c36b4cc9de2d07d2593d943a36a69e911a859ff5f61aa6cde61e58ba5a5734ca736b1cefb0f211b0c9ce3f1fdbbf390bc6328576d35a5b499b82aa4724a25c404c30db876b38d4a634af3b4fdc058f967ff95f5ebfb10d11ae0ad295ee2d027b16639179582ad71a618890b4819f279b0c8234940047438ce75dd78aff20aee399ab47adbfeda2751900473512b5898036740c00de4385221024c110a1a4e9e09cb1040ae8acbd2024bf66b9d6713eafc577ef8aa3cd5b3bef06980e1ae139dae91cd07a1a8db1814a6ef82a16f9cd8e8135e61a950f4e3f4eac656bb3fe29394695b3e59eb8040253b5026f1a75be873153f898fe2ee596f3bd3011b4233e657cc4b631bd56410a063b8e702a0e9a009f7c2eec2455a9a9a6e2ffe7657a02c65350e047bc8fed002ca9a3158eebe76391568efe50aa20de31c3dcd50d28fcc492e23a0fe68a924e8da64a468d363017d08923b6c955d49e5b07cec3f658b4c80321ca718270b75bf1db8aeb7014fa8424bef2fdd97f4d52eb57de996630b3386cb69a56d768e58f20ef6bec80afcf12549d05b9c6501160aa5a123fa6d8807e9648b2a42e9ba352e18bf531022f36292acd63d4d9efaa3260b9749efe79a30049801845cf31790cfe5731a241bcb8316cf714345a85a02ed41b0c9cb53ba5284c06d61f0251ef253dfa2628847cdc92e3c221c3913979bed029e02215450d5d6981f41c0f238e05671ddca9129a2ab457d79167c534bf491a8bfb1964c06306669978233dd0dd1544675c0e343c2a0090dd6c0a409df9377be86267ebd3308d0cf76c1bd68065bb9b81ad40328b65dc557dba93489db0efbbe81ff6f2a7fa592343d7ee205aac603512d72654ae62b16f5f84ea265c6bdba23438acc1634cd27324c28364873c6ddbc3e3a7e2cda9e8a72ad2f72201b262f874b8739f30ab60c34334c2e92f9d48533cd8ad2312c3e7c386aaa283b50dec844fa432d636a16bdd483593f978555b6524be1f60a337188b1d16d3939f05e10f6e06d1ac9cb55b87dacddeda8dee0ddb249ee4e1a88de2c9941d7298e821aa6179e5376a8b70988aa1058bd594f0c57ce37fe6ee4a4eac4396c767dbb7eaad42174a4e572a588aae47e48232b6e1ed0f0a690ccfb001e0c2c91d9aa435e7537af03cfdbda2f79aba7173ac391a4bec5d40643ecb042ee50ed526f33b89a004d0adc32ce21ad52e78c9b9ef32e9b52a2e2e79642b6b5d23ef63eb5be7dd9d290ef6e7c30fbb78b0aef7be34644aa80f497baf67380f17022d1b72b8f1566728fa72b1ab8cad6a8625a38a641866ab0378d00f2d3718e3ea8fa4c5f4a11e856b5dca28caa117331aa57426659664466e81d59f9f73ae4a43dfa7ecf53f5d7f58fea65509962159d2f6129921266d01b82d3169a533f7d375e3cbeda5133ade59a7ac3e50b2f56618df26eb7e10a96549448d7528be1e06e864b9d2ea65de28d51e87ed883fb8e253295824669b3ff9898e90c90e5d496b042918a3ae7c71e8342cdd6a97839553ea9c4f4dc0105845e1d3e36f4158a18b32fc9166d8a11aa3dd9957bb67c7b2434700b46e74b71bd2b7da2d6fa7f74dedd8a3cc25501c01e33a2d9ceadf523739d11d2e8d69d8b127746c17cf2a82751960e770e7fe354f2fb2b055ffe66e4dbef0bb66b489bb41cd81514999b1404398309025b5ca342c10ade9290066611c590ca103eabba8f44a44516ad5237addf1b26695969c60bf0d93a1c1f74674cb928d98ae38e7e6f228273322896a786bac4c3166925c0231aecda0c4eb6eef82f1dc680fa4f5be62ee91c11bbf6d82165268b840b1f262a97bc1aedbe5c51a6bff5fd9cd39ce786c25eac1fa7e14e0056a6dc4ccfc46c850fdd893aeec353cab437fb291fc585c3a5499fc6acf47d9627cc31db17a407c4ebb7a16e408a69f6d45a4bd02f77cb1f103083a11b8eeb65210d28b9833c9c5ca3d10012541fe89d78e37c0c93123c1bcbb9e439744f1c0ffaf01d62930c7edec0c001a1ba0264311a59e848db233d2c102c3dea578383c91e0bac50b78243adeafb42a6c2c0615441243d1f783962d2863dfd5e35eac75302c6521e713c6f5c5ae92f8c0ee8646985e8c6fafab321a1a635aeef8fd33b2021a68b2640a9765cc92044ec0ec8f203410e3255c32f1e0bf8c9df28d5db63a32322c402b647dd418e271f2133007e941b0afbca621b9c93e650ea849871e56e6fc1993e3296288d42641ad62c2d8eae6c758fd377f741bbf7616dad582514e4701987235622dca26e7db4755a8e86b4cdc46adb454091f6c481e4ed856396a7cc80fa7c916c6e236aba98893ec21b49a77e097c8a8601d6b628ccdfb0cbdf2add9e7f8464d15182dfd1238c596690cf92090821984615de44cc91fe6abc42d04bd892e550f01b433627e1e92acaabd9160be354feff426008f3e0c403b3864a6fb5b119d6574fd6f645503a338cb0d89bed07913f201c2e6b2525cb1c500dfbe1bc768c756563c0a8a00af9f41b4450ac32f160d947077c03d6cd6e34f04e672a634fd7aeb8dba2c5ce5ea2fd04dac3bf543d4e4dd298eb3b9f6447be42cc1ea230a965f2b02bcfb636d7cfbec7e8c45df747b40d5144ee9ad576c248960b74f1ab0fc1d1e9d8da226002caa9d2f2b4f062bd2cb851a018aa1f71684488811c91390f75dcc4774472e07c3e5eb48d382f4cea22af421edbd1d3e0c43288c187f97114ec73ee6b81301e80a53dfb1ca0630c7b3082a125cabaa94150a3254119a2d9bcb027b63a22d290dc69d80525802427ccd0b30d6947ccf61f8816cc847415e9634b78ba77abd2edcc26ad713c79eb357b8db0d53de57150d7e4fe0d1019db16a528d779988ed96bfc563eadd5d0409be3b21c973816403006f1c965586d6ae80ed2d462013e3eb1d9630c3966459cf1b20856d1dc7cd21a29392943d1f13dd3ecd3e002665c7b45efe786a2822c88ad52dae0039f6b7f75cb157e472147cc70db969ae92c4c27ae9c5e3e579e076c4542b458aae574c0e9493138edbad3bf3567a56564c79fcc428b31b3e73e58e0400e1f1146632b4edb3ff6f985f3275e97fd8ac033bcb9c1a828fc57dfd7b36d341195ba448cf171c22be120ce8ea5532f29b14ba4904ca045f238ca8fee896b87f992b453c759c244898a6f15d1e0055158b35855d6bb00b273515c96075d83b222a08fc2a6d6b8c8c54d050a516a1da5270b86b5f4773b6438e0be70a6a21e492949ad3fa00addc58bc3a30aa1a5e4a1011447538e13e8e19f6140be40f9c3c379f8ad194738a9d13968c9953725f2cb63782a9ce81371a1235d83cd6ab6eca7a1380fee111295624ab6d948865cd08aeaa19110a6e86e296120182c888c216c1b72363c721b38ff5c38627313cd0675f32b2b5d4f2546e0e5634e5a2ecbea975541c072fea4fd0eda67f5d37408fcf3197f59b1553c947e0c91b6e4c208a0affb212f302b526a2741bff3b80b633cb8ca089cdb3da0cf476335e24ae6c4fc1c599ae2d26ca608cf2ebaecbf5e9e3e0d817175398cf46fd375ca510b117355731d198bf85712417cfde36147e20c8987dc24633aa7a9eeb8a0c97383b6b6353aa2177b006f29ac974bc3c1e04a20a7ae369bf77d3223d44d90adca635ae023d9753f4099094eb2d474d6bf26db8d00e73d62a27fa114a938b1f1d628829399e622db6d10da13fc8b1596897a3aa42dd93d02e49078dee5d081302721a2431fd72786610645fbd241ba7de158cc08a6eac1e73e7e1df512cb7ae32e0d5e711e22ffbabcf7d178ec8eb0073751242cd492789a208724f9a8702b756b4a0b902d501802e154010d93c8b2ccfbe1c7736f76ad963b5a124f2f750f815f462e42c5f50cd96ea9594c70961f39bf891a8eaffdfd65df556a880030a3718aa05aeb60784ac8c5664e980b6d71d7f2b5b1d14e9ed4739d079216d33963d06dd7060c95605e2b86295582bcb53712260611eda3efbf69e4ef3d8e00f5dd288968b418cd33c3ac1151029f1d03fb82d9f8bf3648573a93578aa150220c7bd46dc3e9b28068f7b5078bda4f94e02ba47eec1e3db46bc29a6558720faed3dc8e7b771b4c477676c0c9184116ccd043f1957eb37670a3e3e98ed7240f1fe25b9142f0cd689af2dd79e6a4eb771d3ad0f4be1f1382f5761afb34954be0fdce859744df7479f354782ad0b01df31ea65f18494bb2b5cb88d46a07013e27b0eef70b0181b4f2d911f35e27a87d1d39994af6c79325b15b22ac9076a99f45e1ca1c66f995e385b4c1bbae5c1c6d58069a20fac973c0f83cfa0018f40cc3cdf8f65225ad6a94853eda5d85de8a83360e0f7daecf7c28ece9657b6e1f9960227eea54e18d9e5c93afc2456f2f514329a88fbd7d39fad211d8fb8b0a59dde8d5dc1c81052aaf8013b0100fd4df2f11b57e917d00a99e310984329b682358c26aa913631b04fcc397b85a09516e62936be89b18b39ed4ea36939139220c8871536e45679d9d247b825106ee6f4daa3cbf8f233d207a1d522b5f9df0a285eb9a2284592af763a53c85f28d1b790d547222cac036b1cbf5fd4a70cf3e742ff0915a939519d2e90d7af515731d192dffd83833d8b1e214ed60264f9b9f015b45fb5e04afc09aadbbab62524f7fda100ad35252f31b5be5721f4174897ef4a84a3cbf6fff9bc9223e6250017890165413f81390a5ff69ae128f2e682f7aa8878bd9f12e0b17e8d7142440cb950a588a99bafe7547cab5ef4d344f92e40eb789796795d768c1643ccb65a7191b4b3af41aa075997f09ab1980a3179d4da78c2e914a1ff48f34e5d3c2ab157281ef1841052d0b45a228c3cd6b5028efd2d190d76205e1fdf4cec83c9868fe504f429af1e7c5423267c48a7b5bc005f30a1980147a3fae5c100b95c7cb23d43af9f21d87311d9cc826598993e077015f59ebc476383bb7a78787d915c97039ab188a2a618f7a8d7f64542ba787e9dd7d48c4c87d2aaea068c1b00c9711b2812901673c11418096d0a850fb36b0acece56d311689dfeceb0835009adc427f6d2d6b05ed26f5a43b6478bc72c1f914a2202dbd393cb69b1a1e78162e55ca4b3030ac0298131a7a0d934c032cc9dfc5afa600c59b064d2d9013f15d1184278a8ccb5ad9d7563e666fe5a8c173cec34467ef9cf6d6671208ff714741fee7c8d1d565edf82570dffde4f3f584024142056d8548ad55df83d1babed06141114c95ac88dbea0ce35d950f16d8a732a1ea7d22dfaa75a3e0410c546523277261116a64bcbb2be83e55e040f6c8c79f911b301a8718cc4b19a81d5f0cb6312d87c5b4b079e23a61d247541cfc2c41a37f52b2c6e43a3db5dc47892d0e1feabcc5c808f2391791e45fb065159f99c1d8dd2f69baaf75267eb89dd460f1b6c0badb96cbbc8291cefa370fa7ad6997a4ca2b1fe968216032f02f29837d40215fa219c09161df074e1de8e37056e28c86d1f992a651e271dfc4b0592ad481c613fd00c3eea4b6deabb9f5aa63a4830ed49ab93624fa7b208966eccb1f293f4b9a46411f37d7928e4478dde2f608d3851a8efa68e9d45402bc5124fde4ddc0f83ef82b31019d0aacb4b5121bbc064c95c5292da97981f58f051df9502054bf728e9d4fb7e04787a0890922b30a3f66a760e3d3763855e82be017fa603630a33115a02f02386982001def905784f6ba307a598c6dbaf2946fe9e978acbaf3e4ba50ab49ae8e9582520fc2eb6790deafc77e04a8ee75da92d16f0d249403112c74bc09102b573e110ccb4d8461d249bfe2e85fc9770d606be6fbfd5ec4c30ac306d46412f736e5b696ccc9fbe4adea730955c55ea5c63678271d34b7bd6f6340e72626d290820eeb96a0d2d25ea81361a122ffe8e954cf4ff84f4dafcc5c9d3e7c2ddbdf95ed2c0862d3f2783e4566f450ec49e8b01d9d7bf11e92a7903f2b045c57ed8a65ccbfc5b1d2a38e020a57b38f2e4deea8a52354a7e7be4f977b8f5afe30f6738e955c8bda295064586b6827b245766b217fe39263572b0850965c7ae845611b8efb64c36244a39b9fed0ab970ee5ddeb8f2608dd9c963524a14050c9101d7f2d5537b24d0b0f7a45703c1e131656ec9edc12cdf71dae1cde2790b888ef2a589f03201f8bbfad71f0c4430477a6713ad2e50aaefa1f840cbb839e277389454517e0b9bd76a8ecc5c2e22b854c25ff708f9256d3700adeaec49eb2c4134638ee9bd649b4982f931ec3b23cc819fbc835ddcb3d65e04585aa005e13b7ef8fcafa36cc1a2c79ba6c26fc1dc0f6668f9432c578088cd33a41a778ac0b298fcac212edab724c9fb33d827409fd36bc4b2b0e4e81006fd050d94d3271e0 +Output = b54b7e4d7888a484e8ee74ebe06e05369f204200181d15a7b7219aa0f1f2e57d + +Len = 60272 +Msg = e217ced2bad6f56ef24e757e589f3851cbbeb19dfc26c3cf76cbdea0dc506be972796ab8dfe359a332f3585c220c8c869a05c1c775da531f86a14e78dbc0d47e425ebfb00d1788b713f468f7f79abc65adc1ae9839e81222ba478e20a806fe105aac16e3cbda49539d39ea775eb192950bdcc137d2bac8811ca6e6c1cb88b148c04db779a194661fd9aa2904e0b9d4bfbc3c42cdc8b63ce3b4a49d83cdb0b4ce7e27ea9917ada5c2ce306cc4041a4b8ac9cb7981a14638f1882afd8d35e5d1499c24f76bb68dcfe584b1fae2523cbf9f396fad7ce7d18253a3214c088b8ece61202b2518059dac2f04161c845288f8a5141228e521bfe3b00a6fd31b581574bf1423bec88d43034955481ad38d64bd45629b30e5d87723b0c7fedaef22e18b0b7ff608a2d4e89dda7f2e3cf68a39d7272cf20ea493630afce0b4a9ab745adbec6a8b4ccf64f5438b8bafca15d1700ff27aff0a49daea603c607b8778d3e82b0bdccad177c5d0bb0480b50b5aeb6f2b4e52aa6bfd3574ec174c3abe7ec9f34510dd9be1c07de3cdec662748eb5fa0f3e5bedb7be72d697736aed994e4dde3efa275e6c2d5169543ec46ecc9f0b56a315cc57a80304932c9418d3f52d39820f269ad93bddc184de4ab27eed6927634ab5e6f6fc3ff1235aadff2563f728012160f8c8a1afe097577d21114b7f829682a91c5a28c7d0fdbe2b8e405a5ea1f2222391bb421627374c5080c46b34c566d769dcefb23d1c88c38756b34ca62fdb6e09161f71a31ddb296f6216c13b385ab572b9363cf25c5b176be8fcbf703a03816bf663c4c92d097b143576f20573f8a95e31ac0d99e8fb0623a59b374f5920e8d6b326c00aed38be098b7351f600b72f76c6dfc8966adf3c592d0d2895f5ba20d3cce6d7eac6ef6e99d47a75bf672cb476f94fd27a5a7e0666efd117e69815a5eda41290eb5294095f911ad1b3ffbfd4b9395adfb8206e10f74e6589a3d8ea047ee9386f8f18dd1ac551d30a6662e70cc817af24d26505d864f959027000adb9120cc6e83872111f65871164591938c91e04bb664b910bc94a5129f6bdd7b720417f5c8f8a06d693bab174940e9b3ba64590ee08962cb65011f636faffa6bcf687c167c9f63fa3f42f517afdf9515600b94cd5804490bc2956492e73a7f615985f63571c0f94ffcd4df77326abd41e84f388f061d97573a181da7ee5695e678232e5c91a389f509b91141b9288bc0b8f8ed5dd21c74383551f1a86e4964819409cb92c3903c72ccb9327d2b6225193ace5d3ea44807351b09899f4e5c13ba150076e0efce3a50af9bea317260b3d4d4992e3a64ea79d655088c9376d7ca1964d0d74cfda6aa161929e367756a5e7af0200859fa4af1a34916a38dcd02b327e74195e1d660b44d7229c2261cc84d92f52c94a44eb0982560fb76943d24f36b071a59a46044827c216432774fc1aaa44b857922486496e3027eacb0ae87b56d2c25ca9f8499392b90a2d960f69e9a385af360dbd1ad12659869ede906711fb6bf2891d92ba904e326ab5fecf9a847d7893ef1d8cfd534348882e3482e2b59cd26ec555a3bba092a4b466d204024d908422dd3202c2226d73c9234d40efd8c3acb39bf2b9e15708b673dab06b45d7854ed89afbbcedd0dd61a6088968e2ee08614d777533a02628be256c0a53b9a4a42f01a2cb29f4d14ba8cb6889497087c386b8d24daf9c807b4255a5505be227a5ab4a8f30c85bc600af95adbd80fd189d837246ec9c1b1868d9610112f263e2e24a1fbabd16a701c4ec9152a6ae0d22eefe065ff277c03079e9e429d2a59368f2920dafd0a35b26e0f63af1d50f0539404ce157cfc1107b470a6b6a0fe4152c4f0970f91bececa7ed331f05b94299ce29f68ff90506805b38a1435c3b4c5daf5016f600ef51d0075259aa08d3e71f4414818eae12c69452c745187ae53cc154ce511961db7099c7b8a06865a54b2a5d988469d1797fc0e48b7c67408e3404cee23e379650d7ce5b78cdd6b6be0d3f5d1e658e1db9a09aa2edadac4796d08c706434fd08ffe5e2452b2881767e9bc2d52ebb77ed53c785f0865f43eabf70ccebacebc65429395a274846d52f7785594831dcb3cac853176fbe17eac438c34a9324b92fe27d30aa4438bf5e4c39486748d07fce3087d1c3631d5dfd4ec31689f97423864e5c6a575ea4e889472453713972eb33a932d22e9d2c97f7e4cf090f9113b185f25744f5c8f568f2bad9350bbca1c560af29c29d50545c6740bd09400c7bf99b68fe6eea05b2970721b87b9b24e584f1bd0d21a44f3d21c7dd2da5cf9e2552333ca236b8a7551952e65285a404a6a0435d3d8de7cc4f7e9604914d02f89861e9c7f33af620556642a327f1bafe6dbdf20a3b55bc69f3d95e61788d9e9e5d9f2ba551fa17035be472d2b92e5454c3146a3e9717b69ac2b88d7e43e5d6e1ed60855f5ee28fb2b13a5fef86b9e4ca1f7a3884d1525af15492afb5a3c45075b05c63506a82e4d0fdce6664012300a10b25d9576a841deff1fe4191f8c7afcc4ef952131569aac0aa2712dab8d81c8beecdc930d32b63f94361cfbdb36e395831bdee21efe546144ecb01be3e67bcdd62c8849b9bc6e1afc153b673740671abd11074074ab43b3e4420af78d2505637efbc981234c50b75f44aa26dab4f0d29d5a7a03dc6251ec122ce78b545006d0dee00701f3ed445de44cd0006e996506487d9df3fd2d6553f833af9ddd71685d2063aa92d0a43255b3b414bc98f8adfee902dad88013672fbbdecbf6d38f1252690c1afc627b02e8f504e02402d8b202a67298790c1d40c986b6a15edcb3ecf7e464bf0752799c5bd2c59bfe54415b5aa7543e9f4a51d6697f429a9da0e4de93b6f2027b48a6e9f9717eac13353c904d15303612e1b91256ce0a1e7ac92ad0700a3e491feb0bcf09fbb77d2b4ecf3924188fe79a7a5ddcda9c9696befc8daad406d1fdbce4af37d297f8750e47053f28d7f7b9ffbd431d3b116f6831e3165408d232871ada9b0a9d6ecafc83c7e3889e7bf314085175bbc2541cfe9b26ccb65497e94d0176d52eb2a8b47a537673fdd12b08607fdffba0b78e25bfc46db8b9ff7d7fb93960678d596c3f5746febc860810c0052a0edbb262e61312745fe04353ab7b32893f580edae2f1fc2404c60c8a52a26bd1871fdb0a856c6172a44e3d964a651fbbbcb1987c3355cfb5339a75a01836fb3ef2cf02f992bb1387e50a901181c6ea957e79158987f039c1303fab928a051b38f6f10f753685907bca1a220c7925fae02eb86c47054ca30fa6bd94a8d29634863b8fe9c799543f16fa88ddcf590ab763737785ffd6f073683b1d1a2a1571aff16ab07a37e2af8a1f1e5ca8a14afd89e8f6bd48f8216413949766245f7e1ff2412b5da90c3a1fd860dd9c6acc7487d8355e929d7c0f31e95b63a099903227673e259d5e90c82b929fe0520d96fe2f0c1454fe6cd1c8de5f8547d363055c1175af01788109b55b1ea5ce857848117e8d4a800a9d4073f3dbd9ea0869062266835e66f6fbc02837e53a503e9329d4fbc4a289bd181139f8c720f54793dbacadfb11fd20b2fd4a484f250e844683702e17e31820c58c41768a220f96c9cb236e44916efd8f084215c530af5f799c0c9fefd4d4398cf9b4f58ca7e1fff31faf32c6a660957a283926ad21dcd714bed1d7b53f6612569fb9fb35771389f920777fe9177bf15ca6570470c13cf5ff2fe75dcfea75b309c77912ed594c3cc313a4e015ae68181bcac33677d878c0233775b9a79daa228fb91bc11c1734213a435ddab231cf12a1dca644292e37416620a374a322ad69cebdc8912a77743f44f7cbf7286957e8d42427b7ed8a227eb1309b152d402590b01ba8087f42b49fca7616bedf1ea9a19eea6f162db6e081edb18224acbeba9d1c1ae2b0833f9b47b50965b740186d45e675a5e950781a5200e983298865159af9039f119f38d241ebf8e06bb11e4add940ef2b9be9978f7d421c3ad28fdde8e311e06b139f30195568bb1619bfae8708ffd7e0cdee1a17a4fa06d38f64ebc82abb3401abb3acf49dd0afd216772f006c18a706d1a173ee25bb0a750591f587d4f0a74d48bd3e46767bcef347b4f0aa711fdf161d905f638df97997fb9395a87056bcb651386e9f6deeaac214158dd5c679d287284717283c29e6d4c7f6569a8b51d6d57b91d86ff29dc5f701f57122cabb33e2781245acbee0d483f11692de947698132e75e628930da2eaa7f125020c5875a0839e655194a2c54e1d80d5051a3972f7c0413269cdb2c4156c853403f9e61a59e147e0b74be42b9b93c1b77e9b2efa1bf780279401219c1fc62e08a911c8947707bb625e432999f50a6594cb85ab8fc82aaf4047ebdead625b581d51e28466707d4544b718e772d2c7c9177c6843c6b4e04b06f5dc4e8a7582900c9efabe22de988212424ba258bd72789a01b19c114aaed0061e60f585d1d26240f0b8ba3c2a000e559049febe2d9100a6ec0ff901f1ecdaa822086851ffc14b44f7ab2d24eb4a368911923105ab89edb89bc20f1b5320d777b1312b6167e5b79304506b6f8abd871756c2fde1afe38c69a17622bfe6f132ff4c799326a2a633b5b737199e90f09caad04ac9b4b32489149d9af88215c489a94450442428894c1780cdac149679d39e0ea809014dd35053d0bee4e4682147f04943c2ec62157d52e1928773f3cfc87b62495059e8667ea1fb507c69767e0a8ecbc283e207c123d25a04503f3158e7cd9bcd14210b5460896dde138399512dbf2c6afba75222fc206ac18ad8e7abadfeeb91e8e93f33a264b8d66ec579414e1c1b9bbe9f099142c794289bd38f3eb7aa02463334fc6ab0ee5cc7d2917ea4c82ff9d3314b66b2b43256c807a18098613940488776bb901860da30e39a1212485557afe83f21fdacfb331e52e5743f473756174a31051a4576b1802621ec102b46a59067eca3e8b97ca9aa01f1c2a9d62e94411fe6518fc49a6363fedb65050d5e741324d664fa56413ad9a959044e9a798b446d2939572236702ae22905875b1733b6a37efda90fe3674b9dadb1c410c2cb9fb65c1506caf55863748d560d910b74e96858d68b32ddaf7e63524370b574a5b180118d253b319c9c3a8acf1e4ba5a829f80678078b9a73d0aed931fb0519ca386ecc0a290f85ad3388b3e92fe7605df6b6da6aa4669474e0b4b525b99c2ca982b6ee0488946c1ad8037b3cb8f0d606ee397716e86065f32d39786732d727c42f0d1a04da864f65e81f53224ff481236ef45f1559e589af148195aefd32859aabd5b2938541ca0ee250ce326b6edc43f78be4ee6f7279d945418f458f5ae09d77b56a391f434676652c6ef581dc41d92644bafaaf93b1323dede7c36faca35d1100836e1f275f5cdf2697e429a97c6369d343c270c5ca2a4cdb11b0f4a4585a166ba08aeb5a7ef2bec3eb76d962c663309c11fe79951f2210bdaf86d4de6a04e64b34483a5920088288dc3607a4ca692923a7d7206e3aca17fa03dd76b772fe0f13d10e52afdceed8e9ecaa3acbf2e5a1fe6814ebdda782d114d0fd60cbed960f79e945eacb2016106b8f3bf964da593970e500524fefdcca92898f1988547d55d1ffa75937742ed7824663b9ebeb446e4fa151fa516e4862f7800b0779220470b0867b347153998cc2b4c9f2ed9027aedf2f622a7ecd4638b866f9b11ad0dbfe8a1059e30548d6aea13cd74ad6738379a3e1b989246766ca69a0c3bcea0b643de31fcc0b7fbe66bba2410418330fd85d325ad08cded72a866fbff171732c2ded40274a142d4eea425a83e8e17fcfa6d80f0d4fbc2a96f20b4f371b7522ada95b35a94c73ba54a1c11e57ee4d393d6f689e8b7f8d84115da79c88aa4e951a572618284bc0837a5db6824f9c91ebd3a29d6527f87777f0ee09bc37165426fcc7cc7c26d081352a5ea10add6c86041ce0c507953300729ff3a042c4f82c74cf6bbcd617731c2bdf250f3c83e6602e839aadda45c7cf00893ee9a4b4b84deafcc385ca9c9c17f423515f7bd592d6a7a2408661ac2f29be4700647678ef2f161f5fa5ae08c40b1a7164206d34ea401bf3630d424ac1b6e853e89f1ca3f54672b1a09b14fe734bfb53cde075446532f7e18290d0a427dd2b2a68082ba8733a8d3e36e473e0327133450f1e18668c35d8171fbfb14aea230354ff2e1808e151c21f73006f507a014ecf9847eb2dd7bf18eeaaf858a1512eed4e3e7f6647b852bdfff57d4bb1c282aa5e09dc51fcc03556e2b4b92b3a25376580768a9ad76083dd3a2ec9bda6a46bd26ad479e175ee4efe9dbda0cd87aef2e88657be2a5a928bac689f64298188235380787f1e0bba529c6a261da41c86e802ea52b89923a6c0a815c7db13e4f64fba39667a6c30ace6acf2aeae436b256d3106f7d86bd515c95c9c28ad0133675752f03eea60874e819ca187c12ff60318ef8697bc16e1781c36963238761f63c0ca3f624d7f7207aa08017204ce3fb861bac3e2c23edb362fd27e853be6eb64128c9161222d8360c66b9cddd7a2babdee1f4949892814e88a9cdf91f5d849f0d32670cbf6ff2e026d33ce2bb842097c0489a14c8f773107931213d914ce9d92790467f34a78e44514fd3ffc25207e8b4b86465c33b0b20bffbec5db073e58b17ac2e1877b0f48a144244ccfbcc2bc542991c2f914491a7e271f50084bac2dd66ede77f92746cdbf81458f06ddbd357f353881c3bfc4dcc68f906cf160ac6f89bba385b8cda3e5f842dd714206546c64e4e71d2c84a87b8dbfde5726d493b043e7dea556ec9b13d40f689df1d53cd39dcf39ef940158692c2e45b9091616728d89dc5143f2b0e9eb4d536fa6b8eb0d823a8d93aac479383a61630d18b38938df082914107e79da96933a50c12fd37ccadd6e83d13c7f6b30efb2cdf62b8065b0e941683cfe5a687e6799fbe1b87aa3d02e694a97d7df74982fb175f1ec80ab9ba3b1c839e0d715fb30decb88d165052a83ea526f251de6e8a7eb8fcc84fe5cf7ddf6ae87c47465a595954a1709172342948e35e7b2bf249afecd85c6737e0c6dee8c95b717b6ca05fc39f21cddf580b0d6b16f61ff37c0378ad3f27036743c666be018486912c584db594e2abea4afeda0e0599e791c4c36e29b506a5c756f69bc9da0ac271ceaaac96fc89129990351a9b79edd9ed12b217c802a0533f617f07711c962e039abf02ce9fc10ad471d954793a9a00f0aef8fef3ed9f17b7ab89321f8ecfd030d7bfdac545309c833612111010496180dfbca81040a8f9177d3ba339f95eb2decfd2b9e2b67ecf8f2807d8c8c3a20686ef269f89c16600471fbde22925eadcf6c81e298fb954acde8ce131091a4cf6eb245f6ac4397e342fd9387755da1c54610bceb134185a3959adc7a43bdef03995c78f912b6f9b9db8f3d4eb27e09c2405e008da37993780e8d2e2bac6d735d86e1fdd9c242d6344c8b4b8c405fe1154cc8ef42a0105938974425afa12cdc4da5d76721419397e3048650d8d59fe23ea9d5fbc2bfa23185ae34656ed8788444749127681715c9569214efacb8aa67bf05f9985658abd6cfd1f26fe198ecf5e271c3c1069945e50f839b7a80800bfc16dfc857a5f1a99377a0e2a7b088d6cba83bd3c6856ea0756e47ae83ecb23109d6a5b6bc0a1108122d79a9af542ee25ff62145aa7cfdb1f5035cb28e59d5b63b5ee649382b3d63ad41eaabd934d17c3d5cd09def55dcf6de5f413c1c505107eb401ff44e61ed28ff65725dc7eb3720ee6cb840f79862ebabe283cf9058baa2a40ab14c814696e473088f53fdefc65cdd7646d375cd560ce82d92d19ceb7912f01f58b65351c112929bb012edaae5aca53a0ac9cc5cfcd71da0fce6847122d55a1e64c6471bf22ff8af731f19a53b8cb00882986ddfedd6b6ed307309923e764c587400defdb0b8ffa456dcf4772e7998623cd3fcce9f983e52cc0b7eb72252317de4da7d8f733a222ac9d1209944ffc8e7a7e0eb9188783e823e1476688505b3ff65c7c539c02ffaa34a900074058bbc093253acc14f1311ebf522631ecd1d4e5d456d28951e07039e579e26afe6aa0c378ab0c2f649d553008fb9c76260e56b08221f2a29e35bb77c8f6ff5956ed714031f6cc0790f5b9c506c5f35abf71a94807a724c50b69a90ee406a1fdd149f7dec4f0c27f215f2486c29671073e6194566bceaf1a21e402a341920e7ef6e6fa463b8035bc9e455d1a435860a52b46e182b680ddca670f8ee1e8838f034e2c421f9d8d6fe98f0e2d2b91f1065b0f875673f1a4f4fd6650146de0bf6cb460849612f301b62c7c225c5eb54bac52718ebcd224223ddaa4105ef23130edbab454bfc744c353adeee9b25db64c99b2d9c2da4655e2008aabb83216e4bd5a3dd20586e598bb8e956dcbf7d09cde17a2cf8b7a788ecb853503ae5981004dfa644300b115f8d1ae0c7f30f25e70e86c4adc51620fd6c71301325c9bdc8dca16588eac08fe6aedfd39ae806cb03951e1d3877c5bb436bef319c228bfcf941bf6413b705549f9f7c14581232d6eff03be6559742d0fb4966ea33b7c8f011b28e246d2b65e9daad743588081fd3fcae54b27d9a2a0c75b38cac823bfd11b2dd9228fdce5eca38775cb983402a4cba3dfd0428f6c7c85308c4faf04594ec4cf16fd45e164c70297b9a030240fe9bb91d994de033b88f03d7a478165b2cea50bc7bd90679db763e28c0c46d90e95b79dbbe021be788db189ebf865cf321966e8d4a897f8f7846e71d45503d9697066ce6dfc364789536f1cc5ab84c941f6ae6f2507831bdaf5ca4b7bc48eae8642712cd8304326d8a2d3fff2a905db472e25a6a2217b59aed4207867a110dfcfd37fbfe2c471e4cb4285395837118dac8974973440a838dce717018234b0f5aaeb399074ffe708ccfa2cd2e1a0d068d8cf434ac1aa3242caf758edb2c49777815147a6772ace1a429470d3742a69f333c839c532a840ffe1cb8a44e19becedbbce5009d18d4da295d6fb43f81f05b6263cff127082faf6892d560ff6ffd8e0c02afcc26c708d292c89722a57c5cb3a17f23d39628089af2be36455d93983d7f82df5d82e1bb536717580907865e4066fb39a40efea15b22db65b1e7291145acb9ee05301d5ee52cb61cb7e434677a39747be310107c588f96ee472a94eb3f1a147683ccce86004a216fbfba0b2ad97f57652137f20c2b8f5d3a65a66ba8a25e2ee339a779a32d45f5db91077efae6cf308feef507d34ca8bac4add911bbe7df65ce975e9348d4a68fcadc4b046a1a9f8c469cc5e66424622c3770412ba7a82455933d50cfd98ef26bb7e1f33ffaed76b733cb2902314b521ded6d6d1dfe4ba38adb9c3c73f7c4a0164d429e862ff7db6dd1eaacefbd39ff2c60e5bb6d224af351f2246024060e462bd59ebb8b7b92340cab8ba0038a78afc43c89baada63e9a5781667a54a6d43af90b36c894507527102b2ed0e20b700a71dac9f9340c9eff1803f2d99a3caf152a38ab445550f90b14cb348e1fc2c885b1b616e5b4d7d487fff42a0c493a176b1be87ccd22ff968687263d55f132dab80069010e846a87fb9bdcac80f64175836ab51bb1a1bee5ffe3a6b9b71afe3ef7ea6e08e2476711906817dae625c562147319189036116ffdb6d73a2001676dfbec3faeff52401a0cd150359a6c586584e17ef3f774898cf68d322f3f2910d00a625853b45977f9c783f05d1c1e5ce86b22612e45d199c570b3321953168d0dc9f932a7afb1814936ec82b1f9d055732db26a3809c1d4c202d561790a3e3e8fa12d791b5ffefe80f17781c4a216c49e431df491c1e99ceb13705aded324a7de265b761f439642297db16815a3464cb251c18adbecad84a928f068bb3c5e4b61d02fc433d91bfebb4226c0158c033057b049b77718821e94c9f2158ea43fabc324f6ede9aef476aec5440454bac222071512e4e3a40bbd266ce20bd9a96d4b7a9b6d4db123b45c8cad95bf43be079448c6b9ada23daef2f6883c961cca5bace0b9df7e1ad5d012cd31985b73043809856baa6c4333f0525db28e6ed8858f429de6ea099743dc3bf917d853633bf7f4556a71cb4725545de46243d08d497c9f1ad9095aa6ec3d3a88b6b25184b3bbd721498c251e905f68231df975bba4a834efd6b9fbea4d87810494c2b0681a0834819f662449f38623824c1bb8d415968675867857a1c62fc1f548960a7dcd419efec2ac2349cd4cf29a832734771acc16545ec1188e04aa5fc33888ca464c0c78e159aabcae9c2867d449a8531532cd56f4d620990f879bcd06eb377a4214cd54e1db0e4ae8debcf5b8161baf2eebfeeaef63136396ad688c28e71e8501c618a568bd337879036f1ebe6efda334b4e524acbc1602c404853fb1a29a9505ce52fcfe76a6afefb8a3657fbacad9b70c24a6a517b4e1182b963a39a45804be9c20ce0badf46bad5d1e4c44801fad367011e3612c5ca8f361002e1962c36e9ccde69b28a99936426f2445c56548b8238f516d795089a4e663576dd974693d30c238e6ce20019a3f7d59e47ac0e2651e9847a7562ad87f7190f07c024fb5eb1b177c237477c9f204f623aadd29894e884989137021a +Output = cf9a18eb7a3cf651007a76e8254c77cf3e6abdf41cadecc7bd9cc829c649d03e + +Len = 61368 +Msg = a31e288a18be8adeef02a419dd9af8088b599db6ec39358dcf9e1fbdb0dfeee2d40219e195c7f312fae9dea58aa0bc3e626aa7e3860be21875d20f48001fa2675b2295d675e55e87858d1e61e5dd1be624fb701357770387af89b8e8519ae483610605326021b083b978ca169659fb47f895600d07848022a74a82654b599d7c0e37cfbd0082d24fbd314c8c451c46aa07bfdf9b3f3a4131829dd5869763b39b893c5d3ffa10ac33ba400a8b992fe25779015583a7a22ffc6b0a1914ddc01028fb9d1580f9d32676d82e6edb3a99b99675e32a8ee6c330cb881ab6d8c4799a6b8be36147a3d429623e81de43d162b1af23eec684a5a62de501541497f5953bab6295a85ea01a9b3d15c4c48d0693b4e9aca9922d8b510f93ff419b1c181cda32a73b518b99ad6650847c877f8032a98e389cf45141cebc1daa67b42ed4175e46835ec697369670e3b4338fe2e84a77e4ee5055b76e251ecb2950c594d18db1301e856e4a1edca33ecd70447de5e00834f74c1e28bb5c1ce4a5843817b886ba389f38b16bfa87e5a8f6bc0e1a20fe43c57b18b56ccf7d9db24589737f310a61a52ffff7c471a0206b579e557f40ab10e1a13d844b548f8b7b32e9e094e3228ec1f563a81b2c2d3bcd199e8175eef057ce9142f18def9bcd88932ce51d77d529d21aeb2c39d2391e176444fac4d2d400d574af66f94aa84b2191d8ece4942c1a21c520ece60cc9b1905f192834935ff43e720d4a580dbeed8e54775cafe32d49f61f884ee982e7dc8233a4748dda991951b2e30572e0e59b1603909d470ce29f9950adbb0cdb9a8733076d44964e8b58565db9ff0f69263d02c6ac1774b65302517f179c15c0eb9aec04fd0118983c9a949a189ff75388bb9ac75232fd89875b67d44c57cdd8e0fdf552db14dc5fb4c55492864ff14414fd262b0a56ac2f86932378d656fccc849896188fe3a74cfcc2de6c8d77c7e4d1ebee1d5deb474d5890cd933dff6a43dc53177fa2d844071b7a7a51b57d3fddc76e3ac3d159978e063cad4c07bcdee6f217bfae9b5a793719d4706985ca22d4fe6c5145f0086497967e0bccbef4225dcdcad8cd02d01084ffb707db85c637747fce7ccc42607613133d2e3be90efc4f7556a80660a4cf98d40d88d03dd94862517d03804eca94a882635fc011743564f3a1787f3c3d7f18a0bd3b6f366c1b497c602e889cac88feedd7e683bd8d95454e958f601e03e8af6baf68e1f7e57acf095e440cb46f18be5b810bad75c1e39a8e1937d28e5ed1033ecb574d08ae2b9cff618f361f7c0d90d5491666c278e90abc14b6fd15b603bc20f950dcf22df6596650552c643a2e1b62174ed52a1a6d3ede7055083a7347831a219ab63ccca5ae4612df160b1045080ad3fc23370f38deff145c1b86fd6300332b7e026ef2fe42a891751d9c6818fed565687771c0129124e8136080bd1fda73ff44e91106cbbe93b45f69a0a971a6ccb5dafa5f93c2ff57d4c1fcb01945b9e2853492ac72d2c91063e4219f3a16a8f6ac9ad489f112d19fc0b01a9e7a9b4789a69525c79ddc0c26864d6d1f85cfab5c30ef2c7743c8af059426e0d349eb296f48b1cceaefb02fdd06e276aaf16657042a232ab2efad408f386c76d6ecfb0a9c54cead9ed018d93dc9eb64c7e6a156f8837cf8c15f892d4794ca052fcd939019b335f06aa8dab24fb8b05fffcc4a4d402143bb2cf9241d359187b567527d63ed4b2ebed7dfbf631abb798ed80c27e7e2eebf9e7c2745b96015edad05e5802c2006003f6cdd8f94a6bb8d19dc0c01cae8d13ac63850b6a9d009421691ed6393bbcbf59ab10b12ecfc9e352993359f9e59b1fa5ee8db3d948d56cf1793d2ef3fc58153f82ecf0f14234eb9e684efcb0c3e78488c1432a323a0e2dcd994fbecd9461263806c9250b423b1617737a34bbb9e0d6c7845bcaffd1097b1841cd2220847656d5bf2bd9b7305b1740434b7e8558158ae4c02e12bcae55c953fb1be5875ce62b9b048b6b9f9d0353cb704956a7ff041562dd409dd342718d232dd2758c8e6f18ea8f7e772ef8c24ffb62ea399e3f1b0ab45429c8fe1dfb5ae862775e8a894fa366b86b68dfd426806293a4b3d298f8df6bcd4020779151a72631711d1bde265f7207d8dd4caf9e89939b0f41df9cfc07fba12a40ea5cf2f65f03661dab0d71a1aef65d30dffb98c000d190502f9bb318e6685e86b0d17dcd1560bcecd297b02e601c4f001438a3c82cffde8b4d45ac96be8b437e858f409fcbc1fc171cfd703a57e254c783f75e068a4e204fb30b46e5e6927fa4b2e6f9e2f4bf8a08d4bf2069d8e0d4f3a9b8160fbb652c19fb6d209ae1167975d398e83b22b20d4ea44d5f4185706610efeb7a4802dd487670dbb83a407fb78e61e5ba1cd831fc6506386b35c0497eabd101d954231f1be1cdd77c288746b03ae88dedec87b7bdd86500f2db1bb4952107abe1988e82fce86d00fb0a27f40a27c1d1e23ea3dbe8056b2774861a4a201cce49f19997d19206d8c8a34395101bc198523597dee6f198632c7eeb3e92c5fbcf5ca7ebe16341a99b9f035961136b84e69f566c7b9170fdf770606eeaf6fd5a756462e3fdc0a25d2004a9d02e86800e1719d3411c43dca292a3c785b21f2c954af1b1364f622aadf099f53c3fe1efb9a4422a9a23769b22cf2722c42643da48ca75214758c040f897bf73f217ae011438b8cafc43b242faf78af09eba3d8cf17e6f118b9c839be98fe5a49668436aaa2ede32dbdf8f4a97c63fbf99d044cb0bd15030979d0481dd43cd159d846a92e8113300ad6956488595c5ee4a1af1fb146dc8dcefdccb99604da6357c1e5c005a6a47b30573af9340f0be1b040cddc3979e2994f8de5158ff283192b678c0498d949ca8688113d1566178b46bf8608af1fd02e747142e27264ddf9bd1361fb4de4aa27f4b03fb7932529658e69012d7d004d5525f00daba623900ef50c8c2f8d8e6e996219efef1716e875708567d20ae402154a536bf593f7455dbc9c3628c19e3e29b809476e07fffdc5d55adf80be939676cbe3864aa1a7a4f0f809876c4fddc1dddec96fbbcda90f5da33192be01d4b28090e5863138fd54ce939ca685a113a0bfbda1905ecfdcc743c452a8143b71fe3c81a49333c0bffeff739dbcfb1d0782d73bd8d2e0775fcd811e05480ad43021b18767d3d7a1b6498c8254f0542d83102b41b85cc82cfcc81f9b929a2934dac4e7887571a543aade7ca6086b1a384df2c6b887579e557960232240c7f8c4378ee76d1793250f6364d7c90354d4a62ecfad868eeaeb5c9f3e979a59f700ea0e28b81f9562e06ba884a5d28bd40bdeee4fea95153e35a8360a82ed2351c70f2839628537055dc042e6efa9e913464a551b83cb647a07a1066bed02e7fed79c4e6aee8645a42477fa31bd3665380d512bdb8312c2c7e6afd60adfc1ec26b8f74663630c0669bef6960d1561466ce85b3736ef51794d5c3a708f60127ceff08ad8cbc9fec37ab2a7de240112d6d660d042d5d170cf33f0aa9aa178dddd8409bcce4b2943c4ff88f19c1b88315b9ffc19146030560da22b671de8300a580b8bf4ef8a8ac55121c93b969db2a61eee459c757e15ed7ac193d9c10e8f8135adfc9c0231f46bb207fcef9550885967ecc2c22dd7871c60b9b2694db89e2bbc91e61bd0e76f1d2edba97461dc11327ec0fbf303148ecb05b1107d8b9064ee35e0d0d9215504c30ec25832c2ea561aaa947898c1dd32e2b2d2337f413ee9b3e7c1433ebc22ba469be6929180225df7348dc2172dd97c4aaf44a5d5386a35631b5dc6b26bf79a8c1a6fdef9622b30b364d560da10b173e9442eeee938bb51e419dbe19df47caa7ed685c5d232aed7348294da47310d20a8b9b8942109d9442029641c672058f404164ece84b6525864d6f1b9c85a93896f550c21e7726d16fd93200078b734800721f58177b7c0bd29a81583c451eeb827624f1da23c1fcf659e36143881b7546d40a06613fc9f0e6d3f28c3a3dfc4b5b626ac0eb92f96783f93cfe010468a7a20bb7806c14f985117e451feccccbe8606ea497e96137b1973ba12ed66cd54fa06daa4e8e77653900fdfb8bea9e08335fef54ef4a0b075b8e85b28c2a3dfbeda09e54c94ef3a77d23d78868aa1e3bcca8591e4f93fce2d5f88be38e83044702410239a933f63ac2089f7e3eb1c9c104b85043314db344a153a2b6be573c411e002ddb46c41b99c81dba3f66882d428c2e59762cddcab75e3e6e9e943d6264914c95bc2a75b04edfd1bc5e8893c53ab368d9299acabfb56cf7441d989c034c2ca4ce5edcdf70b479c31a5e0d6b0e142b0643d023aaeec94e4cd7b634099b4210973c35c657c975367058b07d84746953754dfc2fe4e45d827d7dfb1efc86f11da263c39f75270b8657fbf851669494bd345c20480f3d0c9a27bb4e81eb72d38434d99a90be15e1f9e888881187fb40c8c1d2cee490653105ca2443356cdb63e4fd023d62a9029301b06302367ef4d826bc566a8e0ed97545d32d5b81d72d1cc03971fe8dbc99892e3e3fd958a23dd537725b85bcd12643eae15b09ffe0e488a698bd807a7f474eefe0538fc09812b27b925692f99db827656311d117e09e11f88929559157785eb755628836d7301a737aec34bcbb2b8a35d70633627cc653468959d09adbb93324fbc174f3d60257afba60cd8ebfecf6dccb8cc3580bd9b70127d393df728666a94214b8b01b060490df78dfd8227907eaaf39e3611454d7c8d30b11e7c27c53c4d6c0d5d42ca7abc73878ee31795c07bff08226363cd41ffe1984dd3c31e7a508185a5ed86183b7a374057b132af2a0fd3dfa0e2fdbb40a2179c558454764b4d38545b6458016b2c61082f905bdf95e02f6060db6778120d3623105bb89801dc7ac077ea3dedd179f7c960a81b8dc8961a73a9772a6d7fe74617c77d76ea64a450b340a6bf44360a036a3020f91f8cda9d00c5ddcd014fd8505fc21516d63b4ec115ffc1656f62868cd3e8217efea954bfeffa37d89b498a5ae3494921c35081d6ccfd63b7d41d969beccfd23092e7ab882891aad4a537a26f8ba4411e1969e696c17fb23edc2fe2379d2f5c9a430e870093d1604886dfcb943f1a26953f4f2409dcd0d981ef5f1168ce4ee6417ae59230190481bca609abd3e7f4200e9fcae4370637fe097676cc36677699af9d35711fa07034b86d7fea336b7b5612a0a1ce2925fb4a5cd73dbaaa50ed9d6b16c6cfd5115fa2c5430831bdb3f4f128aa9e89e62265e4047c7984cb71fb19fd4b60525b5517f36a906b2877a7aa18d92587be76e6bdf489cbf5d1a2b2ea35eea6cba2b852e14e30bc71766b30e4f4ac792514e2584ba4712e784a35fc001bc48dce68f4f204db9e2fe2c3a134e9ad290f4034315f561a460cc9978e3587f00a6a334c181ccac43c5186b91f9c026ad84da0c56be5287e8fcdb15fb547c5df45a4c0f52bb8792e928b24feef517753429c0c7099d107f9d5d8f84ab018030dffa33e0c35ad5a432943863a193a9092ee654dddc10b3cb39f976602899288a5bfcf74383fe5b52b88e27216a33e954c640e2bb3ee7a0ed37571c22c489c9ecd0e902c224f47d20e37d1b1399747cdac2d016e9b2508c781dfced673f31d8bad734e2c7270bbf813bf770b4dfc3c81d7d0a4de3c709caee76616687c94ff986f76713dcfa7297062a73b47f7db04f9f8d561433fd61e0a2a91b241f232290d389f6127e1fe79832477872fe13b897d35c59f644b60772475e908297bd68332337786b2517c937681b8c289b324b255b627c50a09148d44eef581e8bf87f54e858549a6c7296094a0f1531e149f67c8a4833dfd20fc49b1bd3d8545684d67ab595110caea0ec624aaaaa4b6adb2901f27626e05392093b50b497d091b30c18fd56444e76332ae6dc66b1c19266816a3664ac0eafc86549600a2cffc8239eb4321454ec5d99e01b81dbd230e26c6df998ac69b731038729dc3cfe5e6456fcd0f667c942cf558a54dd727215e55d6d44cba5b676a1e3ed7127d58268f0cdb503acc9280e45f6a84741b327ed15d9fdd031f938c95cd9e693d55c6f9bf7e835a0e7a0e79b4bedb85751164a32fe329e305e1f572bcc6621265749fc83d4371d4d19978e666bbb48f97e248f640927dcc9b270982a9b192b9d4016efad204ada7cc505931c0fdfc8c24b663e0cc0fa2820d19582223353446d025b8f746693db947c838c18b2dbb6362b43fca9a05a0eba3e169bbf1fa52a0a208072661192bf48a289dfe8ef2fafc9a05631a731a80f1a5a4c4b6dca9f3b192d1e2f1eabd7f3fdc99105093f5c03f13d0573a1ff6497b5a8df279acea2060e7a9d2bfabfc3f8187431a1f60dd1514173ea490664203700bc17a6e2964e095ebb75ef96a7f75a4d14d42d3bf530163ec77d18610a6b6ba006be4fc1ac03b38e4240e05f0ed288f03e011d475ff8d14dba26682e4c96b4081b1b98a49a539321b176a4c05ef612a64230e8b4d88c00f2ce8ebeeab542aead6bb80827cbce369d8b9fb36702d275d3e3fc15e0e97a33c2770e9312deef9a046b2c14b7cad40c66331482cfb4e8210d75bb2b67fd33c831463e8b33240e24a1abe054d111f583103a8d9946cfb7a2b79a06afc6ae595cd3ae86edc82f2ecd09b06d2f002ba3493014637d78cdb18966a3670969574b600e2280514e4ab1f1a0eb3b39c1927dbd2a532e95e2397633af2444ceec829a506544a34c322138411beec2db91c0e55d837957790f9d664fd5bf2876acdac6cc5d877845102d3229bf2dacaafd416ab8bff966ad4d54121c8eb6aa8746ba41327b6d77b264d9302a1f1a511e609e8e4d5455e4994817fa484ecd1377369b9a0133591a3aacafa2a0c04748ac7832c089d50149c37c339f517a452bccf90941d709ece844643b1a4c2736fbeb8098920cb69e1ec2564171a6b5c12c0efa8dd912839b5a4607e6078ad86c0342265a73346d8edbfc52cc01d665b3ccb3d793b05224e6f8d6245aeacb4858c746e5d2f49f8e55fa081e2dd05f2ebf66320ca5780462523c7b25e434abeb7fe0702bac96ac8d86014c05015dbf65268120064d90a7c06fad8ba91c859b5653b7448431c9f9ef817a5eb3c11a659d9bc5f461068abac381c4ae0a8e5e280d76e43a6c2d1ef628eadda686f796e05c817d25894ac6cbe04b0a58e6941ec0755bdfd86fd8f63fce2493ba0b1f43ce167a3f49fb84f549ab2de6f2b9e857f322750294fbeff02553c1451fbc92a17d5fd884c8346f66c298ad0321f0d58a3e994504f69cbc9d453e436a3e281c407c9d4ee636d044bbb51d3ab75d17f636114e5e5f83cec94e1df21d6babb9f6a14a532fcbfc3bcf649fbd79ac1abbb4ec09b6336ab30eb0832e23d1c1cefecc3475160daeaee349f1e10dcc39d148bc0c966536cf0ad8fcece427e3153e73078a7b6a6b16c5735ed43762b4e9174b561835d00ae4f1b9f8ebde92d3de70a33303cba4ba9cb658688bf170c64253402daf669b12551e2e4ef08bd91675ebfbc940f4699e9917ff1199ad9c62de2ba3ad32a70adf97d6a269ab6a8f4d84270954c2743d69a450f3c48dca6a3d04f6f25f3285b3d515b1b2c37cf919cb81a8484ff8d974be3707c30bc8e65e975f5bb8ae3f713a955745ec06d5c5fd22e6f635255472c40ed992e951eb8fee1465a07334b9f7f392f4f99a8e463fcde62c875c7f85fe8fddf488d33156058d36808b9e6d1298635047536ad45ef4f087dad21aa8ddcb5c9e20601d14a905d0706873b6c209c12e4ff6c9b9738054098a7a6d2c5bfc77aee1e59f239644ff4c4465df38dde000a8f45be322e64afb7d5073cedde33271fb2baccc8310ca6055450144b10b45d557e01f2613a72f49c09c6f6dbbe94048b5edfe4eb82ea9b79fd4d34a9bf49bcddf95991928209ddd77a0b5d042d8867a839b42bc3f4a5393608654377604624894875222ccfd2705170fff7d0f2b7575d8d6228b94ee68525bdbfcb1cbc529e41b27e2d97e975b7f035ca4fa8d7cbdc92a01063335a54892e638453009b1631ed809c3b3a9899ba9d1093eaf2a269fe2fbce7659ade984c3a43db648bc539e576fbf6d37fa4e68041488252171c3bc61d270fb557a359d62fa6ed85250164c2c268b57dcdd40611c226c10e800de93b4229afdbd0714030f7d2e23e36183fd1ba1200c18df19e750af275a6943d1b65870cef606f0ff5617810e11726d371194640002825c359b4fff4c9a2ba73784dd416f8cb9b471f719ca712995df8a3a24f39dd39fe12dcd78b73e38b5c79a8fa1291f2a4bbdf666949e19e4b444f7c75bb46be7d80a6d2e695b9ebe9e115547427c3057439a074506904adb541a2a59974afcb7a1347e1e7040c0a42b11024c4fdf557c17c52ee2ee3596660bdb7c51660bc2eba20bcb1e4c2b567203431bff17b6e1316ecbd7f0b9f28f2d3215785f569b50cc50dceebe4b6fb2c0ad242ce0388785ff8f1a8cdf085b97996d34a8d3d76e19021444537f0c8287e89f309f8030e5963f1f3dd80e47d5322323d5884f66e89df582be93c0fe0838724ff50e6f8f45a49885a2241f06f3f152ec54913293bf524f22c81a349e6536f635edd3fea22c336468e40b81b43c67b12d5e4e1ddc46d8575aed713a6c2e15ece7878ace27fdc54b1f7ff8c6de12e7c67d4f2971af1392a6b19b1352f5d757beeb5ebd5e6f5eccb53fe2665ee31bf3fb42a3bdce8aaa03c5bd4d8b1eb9d56ee4a7efd61016b3dc3b4097feda71cc3ed813e875950d7ebe3ce49142ee36bcee06a3975f938ca15635a82d0c99f8880ad577a9eb5596063464bdf2c541db02379d7501c4495f8bdd3cfcfe2a4de5f3fa8bc4548990c2d4d8e5afeeacda3529ee01829baeb1fde7d3c9b5a7d246d8748053b074cad6f27f4e2830e143e7d3b873eb52e1795de649cc6448968f153eae3ed592973988d349f6b4f777352b15126ba37c5faebdb73649854c66db4986e5888a01185036b3d955145a2cfaf497ec27d25582c941df11bdb5378521545fdeefd97284a95132b1fbbeef5f0fd4ca8a5ae074e7639acc80ab6c706e0bb617eef75c6d689f78ce485d1d0d99de5c3b91576660f9e8291de79523adadf4ff4d8a117b6840cd0de520fbd75b7a00eb5985bfdc8036c16d31db0d6335b177807f54d0cee9899c9125c05a465f5bf222a2dbf6ab892aa9e7a6bf66b3bf150dfa0bc3a7bf67cf98a2ee9aeb126fdc3c62b6088e5bb241ec18fb29539d904512cca15b28d5796f4ba3de35309423573a4be1900985b21912819d9d36795fce3068ae8fb6a9850510144313cd741079964ee406da91ff1cc7b20c8f91ef742ce15ea1d5e394111da094dbbb141a9dafbaec0bd18408ffc9461ad674e85883cda02f19d2323db4055775f69fa6f041563283e78498634aab482c69e1cc5cf53ce75a74e924fed478bf683235e8ad922977d6f5a48a29564f2877655a90554ef74151519f3e5ff8d442cc0d126bab1685f535b495cbd3b901818c2743f6ea079928b42e68d0f997a47c11e5b9b26134f85530b2eceffac98ecdcb4e324283a57f17e379ea9f344765e5ea5a902f7873fcf2486f2e68f72e2377c538aa05aaaf35997fa278fb987e94fab5ea3a65495a0076ed47bec9615d8c09fa751fd2c79b4927e956b878aeb3be34f5032ce66c6daf3dbfeb3283b1be051eeb92181c72e0163da0f51d98ef7d4e2f3833cc155a1555c110b81e2a70e64b01190e076535144955471c0ccec331d143e00aac848af7a09b803cc610175cba6af347822f76be4f093c2a2a9cd277c41d9ce652b6776afc479ef7eee72d97dfb70aecfcedc03493c400adeb8585c5a306bf55432db805d53fcd67ed122c1e277fe05cfc12aa1db4102525c41b65920aa9d7e5e25cc55ed7fe8c0b45238b562e2fe415f4508cd02c782a1048c0ea6347717706d4b617bc510e5b508b9dd3d65031b6b66a09e10269567ffbee189cc005f80d368edc37c4fce9dbe624d38e253a3fb8ace1b15f1af745a7472874f52ea2a80b036531ae0f281b5e2aa57722b948a46a67efe95f9052c030908c787c05c9fc10ec1c58d2d15f0d82ac81fb2a19080a5c85e9145ae908509c568e9599fbd87e8f5f08b44ed22e4ac9ca4ed21caaf4dbff6561c4e9ab84715b17a35ee7575aaa06dabec68a78025d9432709e7315ab83e3a4ee6d845e639ced327f26ecdecd08f7fda3121e4977b082437ba2b5bf78bc79c2e380a368024dd35556a012c89c15d3266a3962bcfaee149bd4a15d2f08c0523de5a0cf5f0d0e9dfede3cd1cb644b38f3587f00490850bb9a2ffce1dab849dd74694070a9c059bd7d8a6fd24db23399c302856f742c92f7ccc227ec4923a3ac04f2e23feee8b9b27fcfbb7cd5e2496633fcdf18d4d42f49b25fa4c4f0b7882e7df6f87574c2990d74329239da81072ec4bbde94d19b8031d94d1614780041d53dfa05ca020a922ed947a6b1e21ae773d3a4165c00ef3030a00ede53458a7b40c3809c95ed1d1fa73d634b4d831c84b60f6a18d6c95ba9d6a5397ff9cfb29ef1bd0f2f71bc76ac070f3a029524124965d65258adb14d779467417d709d152758791a30d5e6a3b1cedd206ef14b78c013a71158495f5103ea54bb5960242eaef58626334b0220eb4f15bae31a6fdc5330101b8a2209e2e9490c0b96410b6b804972a7c949857a9338476df1591799ad5bafc570d0679f9250ebb6a68b995855d4bd334549e71d53fae0be3c35c95d28f6b4c3aedcfec3896272412cb884719a17c44d49d4ad85a80780200648fb834081ed8 +Output = 6ac118580dd7473d5a55c72342852a023e8d181074e2dfb214b9725c59abc14c + +Len = 62464 +Msg = dbcc18ca23374d090dc5fd2768dc8b4dc5913ff3d1b63b01e214b034cff551c405e60844d7bae8c916d2644ee29cbe57bf5ac2d5ec25b34af031862d75524e9059bff800031738adf3a1c3cb9dd8bf377827775e52f1545be6d4095fb02f0d5600e14ec74e5424fccdbb8364429776351780c855ab22047bed86a1922993765e22d47461607b9300cba60de279e2cb99c5ed1c84a1c1adf32dcdb68d888671efe51ed096e2936fff16ecc80ce9c0a6aaa9f7dcb1dad4360ccd34b0197410e6527449cc2e7ca59f42d5141bac3b39efb1ec256ea5fe66870bf540f7fe953abdd0f5ddcef0d5b80b1131a7708817558ef6b5003b28b67c883bcf7bf304940bdeaf916040a596d49bb4522c2e6a231d6bc12d0fab02aa2021e3806c0cf2198c31376f5c8915660137725f2bbc180a986e5a7bda27fa81593a4a339bab92cbc39fb2b8581108ee48c794812d845a72ce8008c9e915d9e330bbb90e9136aa53ba0e6693dd4046d6b03362dfb9edfa04c887153cc5de677aab8c7839d517035879679c29727e96c5426324a2575fbe678d6cc7fef5eb6cebd595cfddefb4658306939ca19f33c263053f22f18f4270432518673701a3b0e1b3bf06226877987c6b79ae24ecc7905901b0a4f5eaffd64299723c0e726dfa024ff0642fc7c763eab0001adae2a2c94f3e9cf1d5effcb90af06190acceb314f6b011322d940b8f76db1227ea082c35ecc5ed52ba27a2e04332cfa939a0dcc466de0bb94358ade4c7f6961f7de6ce9bd99d890fcc1859159668a3d0dc6d50d3fae2c43e9a99142a86087348ba05eec4bece5a70324c8a1eaa99c54dbdbf760959c3260c59e2a8295a1a93ebcaecf679416146bc154b9bc429cd1c68051db82d2c89186aa9b8d1a9ec33dd4fd4234c800d5d373d9c9bf6cfb80c9269dc107d091a3c819fb2a5f771e35b39be01335aa1c8ca1439f0c60107015f0e97691f2e63cce54bf49b30824ae89a8f7e79a386a61bb0c5f938542634accd793cd5d23104e98c5db18de2dafca3f9c7d863fb3a55ad1831c59dcbcc1d615fb99e47b1efb41a379f1eaf41674fbb7fca14e7c4dd78270942e547b55a8bc71cb705e845d03a07f0f9822ad7920bd9357e7a2f85d7d5308cdfa05d993a46860c5bbbe0153d6057be5327252cc1f7a421cc5260c68f3571a8f03f0800d31647378e0756a99cecb3aa9553c9c65ddcc54d9ce3a5106f5f91655e0a6f718dc3b2a63630728a56a7c2baa74f3e2fcf82e3c1d77624e9de1d39cb0f49bb74d0146e603c7f5e3fd4592df87163abef7eb1a784635305dc443511e3ec44139104d2246d893c3f507dca9b6cdcd6388cd131b89d2ac2716e0a70c0b4dd43a05191c57bd604af4046b8c1b51dcef20f9032c9c017130b90299696ef46cb8d893be0b51ca2941f86a8ef08231330fd5583084364f705758994516f45a29c6bf7d8576aaed923d63cfe89658c56eb4035ebba654e47ea498537a3c26bcf3a2512ae5fabda84981a88d1eea198efe503d552b2f8260fa9d0ab9bf55908d58b030147614248a9da3492a78584f0e5088e5d3f57c393552a4f2447adfac5bd794ced2bc3f59f53d36c830bb8d53c403b28f63b11903e23551117c3356e4a8eeb4afde0ef8d87876a098382ee5e2308651ac8cd4825cf80125dad98f37d3e50c8435af04bd2aa4f8755b99690e54e4670adfa7d644bed75497a0d4d51ee4a0cfa802be3418badb212964ece043365024326b4d3cdca4008e2b1616ab58b15c96849993f37823bb9f4156ab2b3100f42c6d02058ec6a7143c54ace78891a488ffae6cc8e977dfa6a131a33cb0543f410e1f2639327f3282eda8d7efe34648a66989eeb57c84592cf58ecd4a06396bd737cd3a80ce72c0cd00ac199841e3184572aba1f2332a2acf0abd573ba33cf12747fbc154c95dec6313b304692af49dd6998828f793d5bf0d3f51b399fdeb79a19d2f5d2da97d1fe595620aeb14f733ea5ca3e64e1513a05821c074dd9cd16fe6c5ec6083e57cd5b5144daf96866794f11a936c5e3d60594050ae1d7f067b4e6750977df013b9a8520eba64e405c21b7b81bb2db0834854462a5f1016a1358f83bbc4f7eaaadff25ce35cbd5c099341f9f09f9cdd7d382bea3d77ef1d13bccdfc660970ec114c6e3640993b87085792ed05c54c4d91cc4a9d087d2cfac46d6411edb98b6cfd8b566e94e441cd889ba8d52fa0be8947512aeef9d33c4849c3fc74c17979f5b60955765ee272b810bbde32dcd6660924735750a00eaf8e0a5ce1857fadff0ed162d5de0d0840df2754bd969bcac555bfbf6a5289a3f9248c84ddd476eb7d20d61472163dca3eab32d2c170fae27ee75f71be6525279ba447082bd245a666d44a9a94af5facbe94d9d2844278d1d546aa56ce28f10e29a5d023761f7a535e819571c819f124632472b0708b740d7aec26cb33ee7bcc0571ae73270c8396c6c15d1686e680c5aee2941900dc9af9d2503b3b6a5623f5c1c04873c939dfd5320be8055b858d050457c468cf864c2b7e1b7e43ebd097ffe0fa14a1c7280d9312d9fccab087747705ec6a2c47491616c096566132ee365ee587c999cb478b550ba3d1e3105ce57016292bcfd27577405c696a1fda1f8d973201ada82018d79f6f022dcb05864e94d7865fe02b9bee3ca3fd1fdc4be51c4d68f05779703c80e6cf7d570f1a841e69ac9c9cf9ad3ce96039d9ee22f2cf50c60ccc4d6a35f305afaf6de40b99e6e34317d45978c1d9075f80785b80894ec9b5600df616ec0ce46e715c6b6d3e2f2bd5abb62bfa13e0b69f1a60fe7159d3f570352de7ebfcca8ba7d7e1338061bd5675caba6ada1df475835a1c3d71ff0f52aaeeb4a975f2bc99f0256503019f1201c81769bca54a74d2c0d212af0ed3416fb9ef2ab13178636dbbfc80205d50edac30f44c97e813f24cbc14eca9b4912abb11c90875aad85f858fcf9b31f02170b444f3cb732f24ed41f994f2e3ef932bb3670ed68d4e9cf18fc0114eae668b7bb878987ed4c6d7d660edc4ddb43c63b4e71e230d5e9950d9eb1153f30c2ce94f373054cf336bb74e182d46f5b1078d66c4aba82570177e6905e81a20c1bfd56baf20ab45256a4da4d62c7de340fd7aa1ea93f0a75845903f8eb8e670659bea619ece1e79116ef57b396fec1f1a6aa606b76baf1b7da010bdd3f81b3a6e4d72c1747d30c38dd66951a05c141173fbb9f5c99735ea56b37a74844a5b17524108fbcec264ccf12cf398a9958863041d010f8fbb27ac89fc57f40e14186fa82337710c322cedf1ff3ee0b390ab7c414b25a4782bf6ca7df723acdfe9c5dbd64068e1cb411bbef6b9a5aa6cd20fd592029265117e15dca910581f784ff5c47335379e7a8393a885e8b25623ee27f79ccfd1c1fa36275ba1f47fbc759b2ab1f58e0e37985e474316090f848729866ab82f5e3b80c88dbfeef00514466fd73cd397572db35589072d96f7b5e528ad978aada24243c9cb81e6bf72a779328dcda40dcce149eddb7d331f155aec6000166aa74866c19e533a3f9f62f66c97a0dcdd4dca02caabd11ddd0de2e40b74105ffeb8bb2978dad751403c3081bee3c2f2e5c3c902c403ec5171ffeb01a0b960ecbd5e74fad7f3aa6f9f0275c9eebb7698642c5451b47aafc0a84198146ac474451d14f06b7d6d6ecdb28ead3f5a930e45ced3f6801a947dd3c68f649cc809cce19458d7fbb7cc7724013d4162a0ff2c738c572a0e74d5e9137345eb1b271dcd5ab9a6761c458555eb319adcd4504443ba2322596d41b363f834e1960026651809039a655d752cad9b9a23ca04c726d68239c22f2d0fb1910a620ef00c44641f84f881202fe526c0adc164a354940b675426b2f5be3d54d2c2a10a836fefbf56470f172114040851aa3dd9f374356678b8807157916911bba97880bacba6cb5ed7bdb8f29a6045b30965f034c439cc8d17cd99bf57017cbe273efe10aff81c9bbf9ae32f3368736753e043e1c50fa2070a6478b77f94fa5ce48adf2f7d62278f572d12116faaf6011223517507258b98f8ebaaca6ba22f1a39d2a061c45370bc46cae253bfa65202bcb585890b19ed957bd9bc52bba76f68cfbcde52157a8ca4f71ac050a3d92bdebbfd7c78316b4c9f0ba509fad0235fdafe90056ad115dfdbf08338b2acb1c807a88182dd2a882d1810d4302d598454e34ef2b23687d3fec3bbaab7d44acedb100ae85512570f038323fdab54b8690314495b412fca234dfec0d7ca4ffe9eb98a4b784fd2274e7482dd77f82b6d4fcee076404ec0e88251df98b0fc80488007c8f2d7ff774be4d47975d992fbf8873cca4e383784938fbef8bbccab1fa9413a7e997dd08c1560c7e9b5990850dacdc14439b998052b99c9dca2716268a120b5fd97e06f8b2420a355e54cb4c49471e0f0e12afcad413f26fdd545cf05c0cd2ed8769628fee8c31b40bd6b44c1a6223022bd22b20754fe4acedcb02d717894f991ce059951e3c6742c865b24c2904d238c2637748dd74599e211572a364926aaac06b53d1e9589628bd8b2d161d3513f8fc4bf90ab58a3b8ba2b9121cea2e0b6a9a93b80cf8eaa5af14cf8d709ffdce8900141b30a59a71bc973f4c0a52651a1fd3dff00ef2f97c1cf2b93b235765eb34f745448054aae37929308734433f7f1292d8639f808e03ba81d29df7ec7453410967dbc46bc5790a80122a6366c5228b000479874ab022d0e9a11cb30733ecf85d014ac291f01bb6c3709f5f63feecd145ed9b8df767c1a552af21214fa89fa01c9bf8436f35b1c61bcf4df0e1f3c32e881b2f7b2fbbc882e38212076ddd55836dbe4d0ead9b2382afb99cde88aa91e8f1159f179cb51fafc4a4582e08daf4e779f0b1edf22a5932a8b5f4f0012d3c48aa63512ae45cae741e9d5c5ec9a5651568bc8ca6e6eb3b1e2d4cbdeff484ad96d88daf7bafb95e1919f3855e5748915561a7460232e5b28e67045fa408b5cd1aa61b1fd4a6d215e5dc303af85ccb5fef8c3b47c97e21a4c97d6842d4e6ca831c3a960bfb70b1bc2190dbe5f27d34b62a12fff8c371a5fb1898fdcf4a36cab6e3bc86dab9b65e3c165c7ded15648d804f1b7bbfb7b47b9dc3e04d6ccd9fbe50b85571f4d620df7b09699dba29b9dea4a6ce38056fefab74127cdf8224c9ad38e32ce1c11a553e6345dec3b4f6232d0a7754bd33b1c93b664c953b7a185d9f56ac6b5da94dfe83db11e47843434b849a0ad592af46ea355dbb52eaba71039d925a376e1436c2b4cab4a342cfdad9ea3ca67840e3f6fba040a5dc73acf762add437bb9a6a9e4adb1a7742acc0817468d895654e3588a485f7535a5eb77123da04891c6c134d3effb2a2ea3b7e01c404561dc5440fc68ceb690df53442a9ed290a998569770b45297a7dc279712272c89e87c0abd8765cda801bd57bb76569a4ceaf1c1bfea007605a4ff3ed01ab26bc981b7d0af861bb5b23c421be7d6e3f523913090911d32dac3a62a41f976687e72d2025e9d74f52743a510282fc8c163b310c75bb166d5f1502fcfe9899193e5143e0dfd0dd08c92fae0a9f519c8696689fe388ba773744a49a6629df718df302c3a1d4487253c794653721b2c52668e06ce1698d9af68560eae84c7c858a4d0396ac2bd8fef9f4aa4820af2edf3234ab7e4b41bce975c952dbc98ff83fd8f45ba2490d09e9c3f9793f0d724c5273a1d2bf6c37d0ca7bb98053531bda063e9112d1bfa2629b767e093345919486b1585c168b7450a7cffdf43bcc18aa4185cc310a58116b7cdd2a630a11358ee4b401516aef1fc4e73a3cb67c7daef15a754cbe345a83acf5bfa68eaeb986c3d24343baa5e161b4f2841eccfcae0335b8d6bac4390e1fae6ce399920585abbab928c69eaea962a930754d40a5a74201c370bd4800bc0ef84a12ac78f9bccdfb022933056d8f492b09d46e1a5eaf91dae30bfe5471ac7712f814874771a8130f130f32f7cadb3fc0e56b2c600e0f184a806e24ef74258385dcb1d107548fa67d56a16a7dadd46bf22c002c1c9f1001d80262d822f1715ad860b133c08cbaadcd31a9849efec3f648465c1955f8f8710dd1afc2f4d0d62393ebdb547b007151880eed2763a5f0074a9b479914010f926f551d896df99d073fe4f8dd4098fcba355437fcd28aa3c78193895460a29f8c88f773d695550d2d63b5d075153ca20f5c6b4dabf696245d7497e9f441c3ee87e01d7b5075ca70bd87c52bc504d4ac7985bbf7dbd4afbaf2ac0d301ebf4c45aafd31fba014410ce1337cd1741448621f39acff3476beafaeaf5f267ce325ec1d6999bc6d7aa32bbff0428a2b4d800c2affa62c60e3ac49b807f393b6b4372b09acbf8660b0d6137f457f1d92b865f2c160114504235fd1393b333f743a684a964c092121bdc40c4abb9b53505cdd5c0de35513cb3fc18e58d486f25d7ea190ebd3e15457a9536048d9fef40e42d1913510da5e5a3eb9ca3e5953731987cb4731c9aee8aa7d6d55a02711c873702ada626f08ed5c282ecb1252048b515eccb58fb4d7a6c440f9357b2d3a9628f0ce7fbc89488a77050adbfd480002ad098e222e1ec6534afadf460074e228d4caa7c86ae500fb53de344027c2afa0d492f7d8358ee2bae7b307d15883724420049cfc950b9a0999ba9442b748792c6f00f11ecd8d93a24174591daae250b3b4a8946564847c7cf1a2122bd662c670255c633b1ea241d20044bd741f1ae63c37bd794900d7101c029d9641ab99fe329fad34784f555413cd2c1b1cdfb29ba9524c32f1908cbcb175b308ce5f74893b84fb4e1d892e342d50335b5e1132d6c1ac5ca7a53d2cea02f1ec5018197ccf537d4f9872f3b64ae830616582dd22014beef5c0ad2f3e01d81f5156680237394132b0fabeb674fc0c15be21d06c0b8310bf1f65508d4a69fba7e90305422f2dcf4a265c4bf9f0b360a9537790e675c4d8c8e37ed77fd8893330bd3d3900ec14c36eb9a65fe5b3d8ad9127500973e62c6ab048f38a2f71cb4862d3ed4a64f457e64572c043a244d1bb7842928439e823902057acb1c29c9601e735fc8197d15c007858933f572b085204ad274963021110c017919463e2532764eb5026c10b8dd9ae73059a2cf1e33add6ff5a017bd5eb337908b7b38ca688284fbd3810928513890ccff9e4a1dcc3aac90e6d17d9f72412eca80ad69dc3edaec6f6bd998b20fe7c56a6a91d9372a1c1919e123bf32b5824cce5a731fa03df7474e0278963131acf6562cbc00c865a6cb11cde002fe903e3aa3ff15829fcda13ba17fa42a2b1e50cb962f67e857e5a16b80944e718a693c9f5159dbb960579f706fcaa67c2a3e9beb3459dab96c11d4a06f1db5315ea94524e14e0ced6b41ba90c0cbc6b5b5f954ff37945c9a8f530913e4505f6d02b921715ac8f24549f5ba409d6a4bfd55b745aea8c736b34912066cea15934bffff982dc4aed3ea81d9672a0c8f7f7b90e034a18edab12d21b79452865498f3dbe5710027e8f8039b5788f61822a858f1dcea80f1b41330a0a87b6dc2f5b78e21d276948c5da9b920d6e74cc60b0fbbfd132ff2da3fa4e34c4e8366a5e03844562e6d8efaf72e3497be4ad22032fccd3eeeca9f4f62ae6fb01174e537fe633c04601f997a9dce9b88767a332d7fb6b63bd385305b0577fc515a159181357f9fb2d2545b1337d2167b683f15f5db879d7c2b264d031048b1b98f2f138a6ed694e9ebd47ccdae82cff9fb6021812cb5aa8a5f769d516c69b66f1a8a125b92ae44301366a5b0e826eb8997a7fed85c8907ecd53dc94cff2234fb61ee37fa8750d70fb2d47ec5ce0695b4a4da5402514bd92af74378fcb2bb53e6ce232a713704740e30e4ae13486af3018ac2cd08f5434bcd2c4f536a6e7b3ab6c7f092c8881243b6f65fdea23f992df8b2270ff12eb9825cdb2b029d19ac12f6b61f180564c16d8e6a0cb57b99dc6c2182d1c2c5e6f4a95f6e9d2c9d9c94022b02766332b25a1a1ff5b5dca5407bd80563878f8d043de65e4c6e7973e07b33df13be1c565a2571ef0020fa281abe982bbe131e5070dc61e2dd669326ccabcc9951beea7a436a9b88f116b80d11ecd51bf93b161612194472894c1fbe476bf6e2244076a55771c072315fbe5b0c4fb65e7ec81fe7d23bb497b8eac8443b02d941f40a67df7d81063329c3b31af22d647bb381e3cc988cdbd8d20633bf8fb99c3e29e666309de49855400a3f53adcf06fa023007cc4c52e1bd3f690b372bd868612b9a1ba1a0e09c60ddfb0b0d247dc564d29b36f0d6d6eece67dbf6b5f7a7643362ee2d396cbe3bda6a60bf503f7fc9408a8b163f1e602894b3239c3fdb6db93b37ac4501eac69c4d4eff0324e61c391694c84fc10c38ba96890ba7e0bf748e01109a0aff023fe840f1a07d92019d3d6f571a8a7e89a5ca5c5259bc9d8b020c0e5682253d9d73463cbb0dd8a1784affd13b496f7f7bf0816f77d6858027605ae9722a3dc3a1a8dfc8140dba5a336ba4c7a81ca5cbcc6206565e4aaa907bd6a21aca5afb97f827da6c6467ccc31b4857d6065dd56a62418299717dd3d56fab092ac8dc07c3883860b013e4b5e716293e88bdd2a66527d51cc11736a758ec29b9a0d377084f3b22991d894c1dcb0d5581643544c1c30168fd55b73fce20d896da0452f2a641f72fac3a2e67ae79e91549f2d77acd8cda404cddbb5ef1351d3b93dfaf168aa3a6a5c28f6bfc0ef890b1bebb093e73c899a632e28a5cb8a0a1600db851ab5c7c2fcd02a5a6d5e550ec71074634565b8026e2d7eb8c00ca684e4d7017a079c3d57aef950348b8dc8ae49c4d1bc18b2cbc693c62802914d0950a49e384044768b56f53a232ba6e9aac5f7cb7c316a58e824afcfb29c95e7130bf9d8e88e5def324f64052b863bfc8c147576ec59d6c2bdcb169cc6fd4a8564054929aaaab070b2bf700cd1faa720ece837699a9bda8a8d186ccfad9b2b826cdb16e2f73be8858d05ad93aeef95113ddfb2161f8dd20b069b16db0f0cb568ae0be79746a8729841d0714c1aeb72280f597a0ee39679de9ad1a94143a884c2a7f63fd92176cb4341ae6f88ce64baefc1f3f3a67f4c2e7fba4a9894e414f61adb58840b102d6ef12cee0cfc01e1fbd3062db38f4b256c68f574793878d895cbc87158bf7b42ea4c641dbdf88df9a17c4c653e2bff98b024dccdafce7a49f06fefff2268fb4da99f87bc0720aaf24835f538f80ed54c962dc0d4b0a9510f7271c2407599f8a44974f8578ce6e1925caa912775aa94878afe5228306ba59fb87bdfe3c6c50bfd2657366ea3bdda205b44c0af4b8195f00b10f1169387d0512ed8a967aa6c9daeecd0d26fd037fd42d09ed43ece16520c93003e4e4e7079ea3222af3a7513363ff95c5ce9b6d7b36039137c6491eb6133bf468a3de5c7fac18ef461dadb3b5e26d864264abc0f950f014cf9af1b734c1bfc4e7543ee00eb5d81a861d721478e09f682df3144523ab5d5960c7cef406b1bb6a2801ecb9dc434b6b91fae0bea3e5ff032d80c0441fceb0299056c61c556b99acd2b1cf2f10ddd9ac10bcdef85f77f41eeb1596041541534c074ec3794878bf538d6dd18cd30ceaa3aa6c5309d420e6830eb97ecf2e8dac8a6eb7ac51085f9727033cd9164c56e6190811293a29673df83f7560eb913925ab6d9a69edbca887efd926d017a44635d7d2b347d387d46246265024a168cd2476abfee1958ddcf975ba339cd502613fa2af5a951c15f0bb356a52b339d8d213b4d1ebfe91a382547f4c6c26998f316d45470ffb5cfc42b18cb483f3fb0bcf592d8669a728252200d637d856aa723d258643d961dd6353ad15abeccd2f294c5ea97381c4a33b456542247f1552d40dd02f4bc1afe573a91596f894291c59d18af0403a3e4a0f72eb8abb6a49d7dd2ad70606cecdbd53ce52d84283f00bc4e745c9949dfb65c631fa78a3a0db82b41ba0d41d08a3ad2d4acda332c208449215f7fe17b0e43c8b0afad28529b49b8268956037771afc26a3edbe70585b0feae40855727de11784865361080eba6a6e9a1d74fd2418f4686319f3a34dd0b4f4dbe0974d0cdb3dd92c6dedd556d736a1389fd6171686db1b11bb0873aa4e7ada82e78c4f63b8f7b384b03e9309f24943ca854f2c554dfa66363ac68a76bfabc16186fb218c628d3a17851beb30f3e97bd836a7e4ea53997259fef58db90a8dd30123ad6b8fbf47956c524d85d2c15f71eb1aa6e9dc820067026f5d277b176938e9286bd472b96ced0c809d08f746f34e8a9914e033c1766cbaf5c5fec5ce8618a1fbfb043f3746697d78d01da769ec3a3e1bb874f8f744a907f8f7ba9e172e9ab20625a4fe201b3249a1b16beb12945c8e085b4b320eb34774e0b9040fdaa7e6a3afb35cb55e346ff762079bca2931dd02c8c50de9ed096e8615d4841fff3a25fc606bd36ed8d949102599544d970ce422c3be63257c8e45c7ff10e1d66e2f7f468017b2307652e81b51303f7b426d9a77620ef5efa38cf5be0634c33c0fce1b07777da00420e673a04e94035c139b27880b7c6a4e4a49a5f3930ad45aca5e22caac6646f0bede1228838d49f8f2e0b2dd27d26a4b590e7eef0c58b9378829bb1489994bff3882ef3a5ae3b958c88263ff1fd69fedb823a839dbe71ddb2f750f6f75e05936761a2f5e3a5dfa837bca63755951ae3c50d04a59667fa64fa98b4662d801159f61eefd1c8bc5b581f500dac73f0a4240075d8dd817e7fc9adcb387761bc52941df467ffdb6e1915b1c6cf07e38cb0102c611983d55e9c8c4b235fa31a4f43d24d969dd88217a3718da56cb21ab5a938976369410874bb2d61258c81edc56f85138a0404635574ec0160596380280a1ddfd12a8da17d661d7e36519c22bb203cfe233d0bd5a427f5cb8c2774ca405d30745edfd216c527ecf0fa414a7fad205a6c16ab477f90172f2a7d596e4f9b1d00e3411ba70ee87b0c77d5de254af7ca7dfbc8c15fc785dce8dcd861c88694c41fab4c5084c053da0c515d8 +Output = 2a470de95dba44b48f612e8f24c6e8b505f79e755b463aa1f60be8bcfdaf4a5b + +Len = 63560 +Msg = 00e183f8f98816ed59f182f0b4ebad64b9fe4e3470a14fafc0ad779734124574ffc91f2e3d0aacdb7bbe7ed67a37f411301f5eac10ae63c68b20a093d76792aeef1db6b1dbbcee04311127f2dcee39021c200e84cea0076aee0e9b595a5a4200d8c591a95b08a60d82d2c66d627845de85e8a6e532e00443ef5db11245551c11c3a8f83d46559aa177e9a36e943ee04e74616ef6c5d422fa99f627e621bfe98ab7b03295220a9366163f061efba6d1faef72aee00ee52837f1c148fc74007112bdc489da7a91590469ba37a51e19e2890103adca967be0a101a65b7dc9807c52dccc4334d351b42478437d2a8500d9a4affdb4dde3ff10e1d08ea790a5a6d2f21cb1a9cab7b26c6e49c322d5b9c17ff203460b407fd7819f665f755e92dc3a99855903c5ad1c4889e7206ccf41c69c1c04c7fa1cf26dfb82cc030d0f178a7eef20ad994c3ef7121e5744a440a575f8c9ba68c999c22846320960b7cabd16649ef495b288f0ab90d4a21511506e385aa22e12bfde796f29582560bbb70ae9b54b09fa98a14ea08b54d17dfd2523768c4e67ab25149eac6d9c29ea60ff886b38a068c291bedd3fca45ec63aeea4c9654766d1c4362ba46daa51ce5f0cabf04b74518d7e60727ee1750f9ae6dc572027bc2494e61f154a5381c063bb13f361df8e2211fdfa5b316381d024882de1c21c9d90228c7e9f4314fa8efd3ec87751cc51e8c84c3c00920f6530e18355ed25b0564a091bd712352e7f2e095e8c9046be4a160eddc7fb272199a2606ce6d1c18f90a2c738ab16770c7a1e069ef2e6c701d14a541700b3576699c51fa943283c06b74adb577d24bf3b85ef83747de34953a1f646ac88c1a93aefe97dcd0d68ebb244a2b3fccfc544382d12fe73900e4410169a44f2c29ea30af6b0094cb80c672ec33aff9d1560cc8eda18d610dbd04db3c9b6dd8e30a2cb73589950bca59b14b8ad73fcbcd09faeac1771a8d0b3c1dcdb15cc7ed3758688f08005d271889d9afc8dfe69d0a3ca612c5fadf547ba6b67e2955bb766e3b2620f07960d1fc37c6076cf3a957ce1899a6c2d3e39ca42258566b2e505bd1daefd2b59ca7f2bd8cfeb93fba92e162c55a1080a92e4fcfd98abd418e8f84a85e4a0d1e103970a4af0b2f09dda8230e6a71b6c725c95344f2d41b711d7eda3beec039f47e1f35f9c875cf9203f305193067025fefbb924b96bed8c4842843d1b3d8beff8d5f270401c203a1d57c70cd3ec35a0fae0cf22cedd15c026b92a8b4d51a0407e603300c807c3200fb4a4a70bd0d28a00ac55d2e1e9410f379c6f22a7b0e74d43012375b6d2ac3751c657d4bd4ced3dbadedba9a52905a5e57cb077ccd3d742d14952337f15520c9e0d6efa6ac8cc3853c8cf1b8b04ba30dada9d1f2f42e6ddc3a93dee93484b0c4f1a48ac96cd2606962abe9d0614f54c6226837d31869c8a749144fb85d3fdb2df4d734fb3d25124ec5508c2a8c24d3525e1120696077eb57ea215eee940f09ce9478d785470f41fb0d86c10e5a508a790aac76faf5df40b4c4c0f3d2037aa26d778e5aafb1175539e35270c3f35ddf02ce3f20cfff292d8580fcf6abcf0a0ed34521a5c1a4c6b6d0efbe81927ed33cb751d40630a5de1c94c5da4fc22347b6c8a73aa00347a2cc88d8d1ddc32338085e3c7210640f8574a73c64e75f25b8001344df33bdc335002946936a9e0c16abc0362226b566a69d878ca1a4c9fde5557ec61b46363f07b87ae30d116a5ef48da5e8eb3069d2c9fffc5e996f4ad4561ecfd2f3c1b7e49e5d445446bb71445b16d5f9d516c97a7702cd5a553128d294c1cf13718c88d984584f44464ef9e4d2ae1712e8c01d87370ec427dcd0ac1e26a8462e9c8ff147410f635916b44b66e1bd34db2d16ad20928ba76e36361ee19439fcce7cb33a565bec483bbdd3aff310abf5fbab01c06e0fe13fd66c49c64267deb8991adeaa2d5c56c59343956cb3e8e01f1b6a67a0993678540885f3eb6a26fe44377df98af5ccb5a409b1e0cccdf0c47de2733293c88fb8aeab891ad78059006651aded22d53170ab440e9e1569b0bfd6f9cd48e223a30a146881a8d0ad884ee78fb3a0baf615f1a3ed62b690b1b13af1078093d5d3f9d44fe774841f193c4f8e9896fc9a80ff9f53abb61085cb7a9b97b595f9b300197f28cf6a960cebfc6b25155ee80a9a78e2852711943cdf944c90ab1364c6d18c7464c96bc6de4c510a72ad144b516c0722ff097b2afc1685b3a49002bb546fd91ace7c80fcdf63c2943f09bf0fb81f34c78af8fcba0f97d73a9b0d6be6a60288d82d91b0205559d77152d0671b87db8739ee9c9d2cbb8b11483cc955cc04b1221848af041a8955180a73ab145706c789e1f39e6568491abc44506dc857b5a42e41e87f82d2c3800ec56c42cfab7c0cc12561a65d56016b5f989fa0cc6e030434bbd5a834314b01400b043c9fff33d1b76eff5b8bdf2aa782abf10b6af934f9bcedd7d3221d6801364502428d3b713ff4259666f9e90df5aee50e55a9e191aa4f41b6a8537f63a879d92ffba0477f7effb0ee6eaf5df37e69aebe27920c6240741e39cecf40841d90315310e00ba5b56079cf1cb324226a3e6ec8292b63efe2b4ec2aee9e46138903b3362855702a0da0e601180f24e3e0b28df5027ece7fb996144fafc97b58135bc99fec085c58ad46614b09cb477d084f730d5b93365ceda2fc70ba56c69be41fda570300b875bdda517798ed743a0b9c89d8db7081cca5600d57b6500e2323d74d2717456dca67e51e4b6c7f93601121351d2b1f99180959afcb4cbc3d39f90c8cd5cde0629fd1ee2f902e888b384167e0a6f2a8648842144b9324a43a258e44fe29cfd87e3c237dee0d8511460ac4f5f339d911cc6378194778e50fed2f090a0bedc535abe8861ac28c1a21ab1ec253d49f8864b8f3d2f10d4238063e9f93e31be75600d0ec224e13d394c0a2bb620aeda0a6a90f7e792303b9c49015bc535996e02b40d4901ea04aac9cf6132acca1a503dbe6bb4d953793a432b55acf72f3e5a1ecfda11ca299cddddacce6b429a06392d125a3a84db624cd297df520173a6eef403f1ed8d8bf052ef549039fa19091132d6dafd6c9271dfa52f1cef76bb49a95cf0f330ce69d5a69967653335bf8964f9ac7c7213212e8f45518ce9c96ebd1594274c8fff4b835546459bcba8060da0ebe39d3cfb0ffec83d9fbdb56bf677c054177c5fa2b9afcb908fd277a3750c51741cebb296a77916e86a0de6f0eae015f731f1245b2ca195e29677dbca951bf34cc8b677789013f7f0511c02dac4aca3081749828b2d0f20b70a1a4c8fdea302b077ac00134265e7cfe5667d9c1c33d3f127e3deb5335f18a84b286e65ca480c599a2ac0e946d562e1875bdba749fc456cf46ead5bc807ca20fa20a5eee0617ca2b0b14e8d15e905dfc78a91aee68c63b60d3882f1639fd1ab6791777da985d0264bee1d5128172d15266123f57a5abb76c2dfd4188e8dbbb2340977b49e2bb35edc2f91e7f5f6551c148e272d6dfda929b5d33533b167e4dfeff71b0626d972a6d1f460b417fd2a7f12500fb939dbd94976a10ad574a4e98eebc8d5f4ec05aaa8ddeafe380691f998b055422b767bb85055c7e97030db3639c81d3cf34636d7df5061bf063a6b6f037f1c62f6ac53c2c903c645867e61578b0552b4a3ddf366b4c9f747813bdfd739cef3e69d340a852de11a939ac5ddc9dd1417d1691bb1f3c3ab2a1c4b8365eec630aa41a1b5f68bf97e33782fafa709ba74bb17c577f8fb769458a1c799a3f213347e08869abe23b64baf57b78463939db7eafc4b8b4eea57e6317c77e700adcb5b0dafbe6ab7f8eed9fcb6b4fc8a04115df5f36dbe1a3ce2411300ff04026e3914c7bbdbae7a77fd999a19ca6080b79fc78a91ae98e18fa0159bd3af793fbfe6e23a9150ce7c3d8d0b15f54a68fe3ab395076b70943b4f1bd42a691baeff1f7f43e4d4a0434395f7ceeeedc77e4919d746fac566489df7a01d4d35c62df7095cca450a5cc5573dd8258347c40907b1854de353f21e7015f75182ce316e8e09f9e5d986e89d2d7198df71a7b2a190be381a4f7ba69e68266c0159a6dff94a9de11720fed6634cfdd43d488235c09a8c8a4c9dc0f640ccb588ad40344446a331aceea9c698901c2ef4cf667bafee7b98d6556cb8539e442fc7d5b51ae0ff2e71a7dcd262c1ac4181851659d893a3ca8fb6b52ab6511f3501c3fb46af485b52ba8c524977c42023820fa2a14d8368fdcda5fc566f713c35d7e78e7385ed03a688a4ef6d6a228458ccfee4cb2ef1a68bdf2e8b7e38368dbd2ebd1faa13318090789c14bcbe6f6147bedd6d361150f4fb30aaf310a5137c3152bf1f78fbd84ab6e6dc62b5e8fd1f86d4159c808933dcd26ec5b3ac3a9a904900682e5e9423da707fe049f77e7e378ca9420328fb1cb697e5e95dbf6d2e625aa4429cd970b6b85390424aefe34541cfbaed219ddb7e1ac2329051b8b1515aecaac90b6806034ce6b46cd61dbbf4c6c66571885dceda91d7e1552026aba5e275a085fa88e88c309078da8bff6d0f2f174579a7f739b4844f5e925987c09ea19c11e3eaca8cd3ebe74a15dd037ae6e328d75ff0e8a08e9a9f16f25e6a749e10c67b6d3c8b675ce761a4a939c87a3e9b71a7af03b0a7db2d5db6dfbf3d4c46b86b49ac906a1c99ab76150f22cccf58b09812f140dd942cb4f19ac4ec7ecc0ae111091c66e4f11cb0cb17a2487f0ed7baf2c59148ce09f5d9f15f4c76bd586d534e3627207a99588fa7291ceb5d9d3e23181c397c007dc904e350c0ee6795e067895d677d9979cfa0b0c5e9bbf71efe718ea3446b237408be3e3beca40be8f69638eb57aec027048c6e7a630ac9e88b3ebce73c969561477e686d0a3828e63287f36c72649d0579bb36b3438844ae86d329549c7ed4da07bdf850b43b3d0206854f6d320f7eb9a1b5b01cf594f5c553e76a67ee847052cc0574a374fdb6c0f546834a313fe3981ef450f3e3b16bc184e3d6bdad57e65006ed63c1c72024978114659fda567a45340f9ff4a87e15279c4124b25369a5464ace2c381523151a3ca73ceaa7e39135a350037bbe5b606bfc87aae26b2a4bc9fa205473097706bd7a578fa72477c6ddcf7e12159fc9fc03484fffca6f2a384fa79c630efeac57f5ecade441ca8389c22ad2423eb75a3681e1d289e6d9e9f94bd59ade787f33a767e622d1672487687748052a73bf7cae6c6be7dfa435da0d4306943d2c059d6368095ebd73ad03e161998f2140f2b1d22748d8779f0d7af2c9ad20f5a61c4a1a8ac8aa2ee3de796315b1c8cd230b9a30470b2cd833bb5d38445bb9ae734dea4b4496ad9c5433688c08035a949664865750156d881ed9f15c4774d6ae2ff4ce643a15c19c314651babd10ad0e17880695b70a12ed9ce3c7bd479b009b18bb96f3bfa89e950771b57da96c48902300bb9a006ba59f5a635109c930bffbea0cb48869d19d1d435004536178a5c14548e5d2a08cae13b3d31d9040c86d270052a780ad23359b716bdeca59b85d27fadb45be3c1f84c155bd9e0f52e4b0c2e847f07b1e0ff0a62e2fa55106cdc72ab0322bdb1786d24eac7d52c553f7f3462e372fe6111a66b3b615e8660d0b8c4001e838b7e7450f0224accc50e884dd373ebaa6404ab5005ab5b92897b104151e7c57dcb31feca3925ac67b40651db70c964d04181f7245e1b973e664b749ea0c6c2b887b25e03865ab54d0027e25193cc168b9ec03d4b00f1de0923b743f83a06dbddc6e9dc225f2b2c26b15782d8c5e4c98482a9c5ed7397f89bcaa6c776a510d99491bec0504cffdb9cd0807a988c794463f524d6303d73ad9d620246416b4b8384ef1951b4d63f8855638913b873f350cfff19b93fe8efc5b7f4b20980131ea356e8e2d8778451fcf9755a9260ffbab570a970b740fc710790879e585c26f3ffb284019dc0df9eff310bdb42baba363beffa11165cff633cd123ae7bfd2b31613ecc5ee8b86e8e59a52ff46aeb2bcfa9f4fbe41eba7b2c2c21d0cab98aaa3f8fa5c7e10186b98ad1fce88d511edaeec926b2d21983f7349f2997da5b2c2c87518d7d732f5448f830de3f8e407950f9612e29c14ddefce35d917fc6a90a3870719ff7fabc47a4413ef53adf7f24145a3ab3689a03f411a12d009176eb4d5662b5823c5fee8954cec3e6e4685648ae771c5e754683ecbed6d91ed4d2691c0ec5e7de548b0e42e006875c42120d0da7bacfd75aac15ef8bea279450c36ba0e902cd5d48656399d15051fd5ec3eb9a868a1ac51fb301250145e00a0d2f38006e7f30a51fd437b7ad16eb713f643918d34ec6d1ca458eb5a74fcc271400196526a5d75ee1c2d0c4ffbf1b61edde40ae17709ba2654906c80571b2946c1c56f797dc8c31971677e74cb3aa7571174585d85761e1f7a6af85a4115bf91d6d37dd4b8d15c548b874481e596054d2f993c4a16be0358946d2150b9990fc30d90340ca1e3bc4fc8f0f10fc1b04a7186b7194f714e0472210b69fc26f1748ac4a04479af9c6d3bb8590676f6060154b54261d64ba28becaeca54c52fdb88399a7801b45847e9c8e813e74fe913a47749efb866fc5814389c2e54442a93d56ffd8c0e353292bc77c6c636031145be49b3038f8a19db37e687abfae1add6c68e7c40cc84a4f94fc8e2c455290528b95c6f2259a80aa86166efd7bb263000f625855acf2b45d82e2cbaa2c73a4b39102ffcc09959655c2b4a431617aa47aeceb5b72e78818bdbd213bce62ebf4a037d24da62e106b042eff10ffb92b65b2ccacf70306b3ffd60d62e6812ee1087f43aeb968da34852093a0bc4fcaf02f12764c34f1519af0103a4dd5a9d77d69b97e3d49fa56296e12b93eb00addef8801b4741a22106673d30b890f2fa6e99eb7b0280744ea16ae416882f3163a50fbe74cccb27f8b3e108749bf9cfce34a2fe0a116fb2fdd23cb1468138c5d293c0d2d07fb03f00a4b5094bc9685f7d6cba59b18b02ca1797a4ff5809b86c6f2db4839adaa155ed4b4ba632cb7d107c6918752df9ea2830440c24b7abfe638dc5433740680f1af32a2d75a61c98816fdc75d6cbc8765bec7a0aa7d1c29b69d30d05646d9269ecd6c3d2de22275b30bc193b05178137e380ac091f52f81fedc37763a18f043249ecaac4664396358cd5b1d0668dbebf4db15c8fe1a7a6ec4dd366f665011808c0c9318aa466c3a8246138eea1bacb7cf8e2fe17a54c799128878e262580585ddfe11a8dff284a2365d300ee1d1b51e1738a1338c0bdcaaefc544f8b79694f91f5b8a856fce49457efafcc475f3bcc9d5c3b4e5bca78248647ce1d8ec7485855b0d47d6e24482c86105bdd92de78a601116ad1f9290811b779598ac8958a2d098fb90c4bebaf9d6e867bc759116e78ad119d70b972fa1cc32f8b19917acb183de0dad778d9a7415190641be2ae89aef1fb479ce52eaaa039d8d74c91dd77b45352be516d64bbc2dfecb93df7fc66d3802cfda934b2a6367bf3d28642341c8bfa63d81ca223599c79f9efcfe1916260d835243800b5895a1a0ee1791b1526098382bc9baf8c0d28b0268c2447e418e15a825fcbd19da08594889877950720a79f4dd050fe0543120310f2ed838b06df97b314d73fd1a8436c0f7c1448709900ae03c7df062597c2f347d88e2cfca8b61045c7eca407ed1e00f1e0d19df7fb8f2072e798607377c5f1198188cc9f6aff34a8fd6e96970b6003de8b220df3c4bda6e9c40f85656f959d24a25fcb09ea35a55b39ef90057fd3e533cfa830fa810691f6f1b6fd81fbbc47f7af95a0b292d3c2dae1f218e9b6c4158012b67f72cd148218d521313f889491e10dacf63ff1642db6a9e8a9aa3ccb254218ef6202e541e7ce02d0b914a2c90b9f311833f88251366cd665bacd9e4384f836b5811186294384ff380da7e6d40570de69d272b2458d6c1bebd4ca47e7c520f0ab55250c3525ec1ee9974fa12010145a045a353d9b8332dedd8036c602564adb2346c403ffff620647fe928e37dbe8389a53c650edc86f83cd3589a53dc8e45adfde64e9e4306539e59c16faa5996afe7e279ca896bd70cf3d7d4941f49d7bf413948e4a7c89842e45082362d4091b20327e3ea130e2c505a0bfdc38c134703b7101b692333b3d57e8cb6e735d8b872259a002d736d8facb8985e8f62e3e6fa57a9e545db2f60f4b334e4e98ac912d895635bfc732f070857a57c616860bd8a682d31df9462a687cc7195a4f4bca7cc9aab79bdd9fc9c4c7d5be19f6733d39c34c384a119748d76116a50803b5980377d9ae4da6e7e576173e214b328033019019468f2310e1da9ca489de52647a4ff875723b9fa5a3f2d81619d037079dde718c8643aa3d85f083f32043b7f2f1b0efd0bbec4453b5d99ee0005f90a3de1f0c18601e238795a7cb8510eea0cb8ee4a2add3d6116c7b78d04e9d2fbbdf6441a43f6c550b89a16eb7ccc425a968b249d55f629fa36a658f209418f73504c0f4fe8413aedebe29c3fd4cc29f3e44fc5eec57d0af66e8145ae4633c1c88ce94976f68fe82198faf35e0879491ec0adda24c39b66bd840087ab03e4f2623972fa77b60756558989233260fa2d41f04d6a299778c7b740ca27cf887fa9a91f922a3a70d20cef843835a123785ac63dd67de4893bb44c6c882d041c2a6f0505efe2a66c17925952af30959b1a5a136ff11b3de10db6e4cee19f31080dcbdeb43129a5f1ff71f9bb951cf50e09b3924e454d1ce61554e7307e873e9552459cf501081f48b23039869202a9c56cf0a9a17b1a69e17c16bd5806ec12081e65a78e0786faba5757807d50e998086c96c2323a8b0c1a6984ce0e22d797ac9cb46747eaab1f8d176e356674d9ac1f312f44c72ba7eed90527821c7a4fb4c8f1b945ea527f760919fec20aa9dacc51e2439729f576f56677864249b55c51a348fca73de90be778868e8e3195f5e0e7a858232041000a08e829745c7c065786c706f60a54565b2085a701a2e031d129aaf84f74b74e16098099821e7656acb9965e9b173e68b84b3fd083273397855f11aa85ecfe67ffaf665dd2574c533984de8cfc2c4d4ae83fdb917c86362de5d104f72d51bf53af43c3fdcecea506e62fc71983132903d1448272548890fdd9c7ac65ad6ba11b0c0cbe02dc4d2a759c01788c97937b9b5da45cfc73f5e90f4a88307e6e024dc6005480f3669a83aa41431a6d9f73eb1b73a590b64295eb691e5db9cad8de6a5c72613158d37e57adbe3ed445057c208afa91472927303c153f8e6fd054c6a1e6497df7ba8bc14e84fc37cf9b3076c3f0dcaea8db8b8d841b9363791848849a6a6feefd9ff62b1139e27932f788297b560045dc56d7756c810423002a1ddefcf3cbfc69927c8448d4574b26e1755cf1c34e9d0a2271b09b5179182b8f3c9d708645f1641885939b5b45f4d3e25fd9cd3fae005bc5c306bb93d98823ce0b899d2dc51315bb7921b0d893bd6081ae66b6d208b4f7c9333f714d0ebc0f6ff4692cef33aca502c0f6325229eef647cacc5485440205b62b226789fffc18fa5e06c4d577023b75c2dac7d2efcfbcbb1cd2505f4a32ad121278454e949066f8b1290ee57a5d009de795175fcda7db650a425268028c19675009b2a5b5bf20f15498b12922071c0198eecb01abc07acdfde301a955586e3c4d9d57944ad26f6bb11c56a95847b62a3baf8bc07160c27c5e7c062929ddd71a70fcdc263b117af02f7ca56c0564f69e3a9efea507d0dbf993d608f168647a8823ede86070c46a073682457a0fa705e7fb84cdb75558eccc06b9b007f8357f0ece3a234cd23366392ef4dfdb60580b8de828a0ff433f1d7e1deca675c3980f34d7a937f147a6970c7f9b1a98debf2f1667541d83bacf989642399143afd55283a703c957b864240a923f9fb773239a0ce2ceef4da04e829cdc661a77a6336f82a60f84870eb636bbcda8154306ce74f6c05fbc65df050618533ce81b8ffb8eba3c970d882fe4f5a6999d25417e06e45d69cf2dd15d3c49930e83a4365176d9b1d2610f62053688535fe777bbc51412c845e6e99b043b76957703f5d1d6e976f1ce37301e77f3184a854eb2b8c24027bfbc6c99cbba49b3a4f58384f3059f8d029adf18c36c65cc14759a7f415dd14bca3628e46769af284af0cdf8a4c6df476a9c217059ced2cd389593855d7e11a5721be37379f8b6ff0ed0a7faec01f0cbb33ec7e0e98483423e4f016d140d465e3ed365ed084fa35d78feda32d49e1b4264e7970f7976c054af0aabde6ef2b99db7c676fb1d56c16c11e02e476386a8d406fe5ba6148cd12b112d5a817415b28b635cde45bff5575460df6ae2a29fdfa820edd94cbfaefdeeef22d6fe2d5f7850ccfe6472f614ac3dee6458aa97d207e73a1bdaaa84c48dc6ce50e7fca2b655137a12d22aca9b094e41d5be484c086ab8ddf025686ab6c9da381f5523d9048ffcf402ee174472b6afe39b6563c9274e448fd4842d796cf953b4f7e71cdc2f6f35c23481df6b81fb895c1f15a41418fcb3db2fbda1bace6558cb40668fb3203de36c12522a48b1200432c895b237c4bc2c4669996d34c5551203629b2364c041317a022ba1e1e86c47effdaf373a12d6d75aeae039f03710a8e7c54b81f9f6c345756ed2eb400f287b1a2829d823e991dd9e1b5aacf40edf43fcd2415179a90a47e5bd10b16d0f9dc73cb0cc3ffc3336669a62ce6f4a300a0bccef443aedc35f605057ad9b6ece1054dcfd6014cdd70d99d728062afa87d927de851be45c2b0ab740a471504d36cc498277adfe9cbd5e9fdcd6c8840af993c0bafd8ff8cec953763c0c2479122e18cfb7867aa673cd71a031d2dd25847082fde9bd681e4c8581c2cdf78dbdc39d3b0e019291b459ef8dc35f860db66fd3ec07f22f6efddc47dec679cd75c56a6d7e2deb03b8cf570bfc30ed581fdfd40a1a055dba683e89f7b0a7cbf6a4390e852955fa41b89f7309041063b2dd47bafc5420b3c52088587d409048dae2c0b8cd84adb8b459cdb7d1ee8b4afb0d972993e2807aba5c8453c1d6a77ae1f7026f2dd65eacc462012b4b02c8299b78762ab60b4c3d00e5da81acba14e874aaa83b8d698f5eda9de2d66087f088fae68dc34d18ad81ff8331ea2433001af9c45a24d58369575cd019c0f6c72aef801f84fe4151cad01ffd3197 +Output = 7787c5312475791d84a9885be393c27decf06cac2985e4509e2c43dbdd9f6193 + +Len = 64656 +Msg = e11bbb20930251c5b5ad58d06c40ba9b7b00f5b508080933a33f954684863d1314364ebeb0c9a5c8a9d7cd9c8f456764afb9cf21da50fcfb6894a8d57da8b1258bc6c00318ec2880c2d11138801ed52b2adbaac83c27824bd72d2f490853cb894db4571655d1a29208836ccdc735cc97f54fcfd2b6f562cbf6f272caaeef51e762e95c20efe2dba983d62883edf0145017fe8666d0236522cfcbb87ef5e40ce6d34c16486c859a6b3cb08c8179b974ff98cf17ac131753f86aa14b90689bc42fa7c4cfb75624a9803afbdff0f3f7b54c81a9c9cd063af4f7cd5a71268c7a416ae63bcd943426ce91859d6af7e3119fded976e5f132f40fc502e07369ebea4a3e99985a088ff3d246268075bfd271fa5ea81db33f1dae6e0a111999800c54a953c7c3bc3beef37c46248a4770487e8e73f6867be051ced76f00ef2a93771e245278a33b54d98e963a87a52a31cba023c6cc9985fc56be139bd94970ccb5b284e3b422217cd82ce6c958b8642ae53f80fe313e18bab2e4ea38a40eb1514d7690ad8427b4da7435369c9eaa3e841dc36ec42e5d7e42efaa23eb6728364ac7d41259ef9b3e9734114c5a61650067fb95b5c0cadefdbd9477885e2c7e47e0ac33d08efe6405daa128f0aca9d0f2fa081b1d990da9de532ab2df39faf82b3a82fa94f5b86b52cc41e2ec3a7fd35c66cbbe6ef8ffa6692b38c5f123da7e2c82d493243625986c949fa807abea5685d2cde66f84a9bee56e461786c5d2f890dd276548f84dd49d5c40e008a8f341b66794fce9e612d79c43dd1066c7ed4ea07505d8cae339052b49aef4b8d8a17c374daa66a4c542dad4d3841858d03069a472f55471a0f0145f85704adfe4fcf050ab978e68ca42b0d645c3972588a52fe4fc804104d77aea81380e4c45730c8349a9e1dafd9d193feac222f595995389a7392c074c2fe06dd9891060b12eda1e697112b42ae5cf7157722a9a70a8425f3754840e11512987aea1fff0ecbc6daaf928b183b84a6d2d677c62ef7e607b9ada730dbf1ae55d1f4aa86363bfc7cd0d41f947af7076fa5a6009525a87660520d9bf51803192851df3c5c221eff40331890a5ba0170e7ee28b4083445265e8db7c5fd7ba1c00a768f220a69247ed16fc198375bd78bd02ac304a7c16a8032db20a7b27d6a4d8ceea8fe2961e8e5a0e58388d1e705a298ca0974ec53651e8db8ccd3dca3a91c2ff8a11331b2d8be2f42c3050dc2184fa27a60775e70e15bdfa530bcb4750ab654430c23abc27072ecf6047f33a36bfd9d8a6cae76904bc2a93ee0d4d267fba6aa4c4e8200174cae6a7dbc69ebd18d36ea98826cbd3820dd6ac451becf02e8578282fcc0c727c9cb18487f57bef2f8860a1346449aeefd16a50407ccf2cc7d538d657b62798a745376f4b1baf57e3a657c893cb8b81b3d08d84c77a2062b17252b825ed99fa5e8c216f0f81657d9df4fd278ba5b6d436d2e852c25b041a54246dd681bb8920073b178dbb70c3eac33bf7c50538f530df9f23c11968a5dd18b3313654661f930c18c0d0382ef125bf43f0abeace6e1b18fee5d9b4e92b3265e648e2843785dad3ecc5406c0318b6f7d48edf20ad491f49b9d6a37b26bea2a38657e2fb76e07dc67ecde540396026d5b6796b911dafc4d8969f26576684b43a5b093c9f6b5b054b9881c89c17f0fcbfb05a562368c8912e5ee86b2ef3a8f0922d03fa5a5e1bf9cc0089f069e4f1c01f8cd9a9c0d5bb0eb3d85878ea1350de13c4f02413964be1b07f8c658de98afb5c109d6b4fabb1c3cfce9857710fa50726e876c0b25c11465fdd3330f26ee434de054fa4b833d139eb065010ad2fcef231603dd81ef895ae41e225587eba26f30d32965de3b544f76d4a27a984baf3279ef5ee7341b200a4be560ae51b1779c051611b9db8783185bf60c52ce0fa3e2fd36f319a02d17aad3e008ce0b0cb05241258866c1fc6c16c4710d3a0a835d5913a96ad54499f2a5329a95150251ff1a6b8e07ed200e51b336f24f90ec4b4e0d539310ba9fe62391de719013d625b66cfabc1abd8431e69629e62de7d1bbf88843a0af2a10a63cf93e01845af4ec78b2553c3b685d0b9d0823b942bf5979df425a4e70b4553ea123e7c6ec5afd3ab893219ae47e28ffe7a1ab080877f1f984e40df91fe9cc23f2da524e22844d84e877e634905f568358fb264ef9b219cf6bb5d53d072ae3fa946513e3e167746f9ae8f9a5d99c844a536d2bfa80fe5f4006505686b1084b37186c83448394f03f426ef27b2aa630997980329758ad310fe74bf862c7f2504e014946cc936d4f88716267010e1cca153ddcc0a1cb4f2d838101415d967991c3c193c5088b80e0dfaa6badf3fe60df2212cb6ca66364a34f55f8b7d3b72e9e1cdbc49464f65062b940035db06602ee649ad48d11bb8e30d7f8cac261a461c3ddd2642b8e4e5c3389e491fcb2ff83564128a0a8803e1c6491cbdff783e8b3a17b27eaf0d10e14d1d60acfe1980552c53c6e88455e55afad2151b0ddc6eea4c5695ed19ad9b01adc3224f5c2cc2201a9dabf23fa18bca878eb2cd5db8740a59e4ce9b07004decea112c5ac06cbc00082909cdc2d5bbda76673afb7775169569a8a5af016eee4b0ceec5f6b341389efddf2aa495573e32ce44f7cfe47c1d30858a62518f5f45c51c44374bbc13fca101a7559d4191dc79970c2f6f2b345085b3724cab3a3b1b0320fac880634ad2b21c69d1e04de95c58d9a92b03d404793cfd48ace2896a38ac23f8c1bd304e8079570de79641c988769d0233b468565efd6bf4ca21055464692a266a2cac88ce9db97bdfe7a698267ceaff8ea96e91c96f045fee8e346167e23f6c0af25e5e86c74b9c01fa02beff11c988860c6e1c803ad06f6051a0fa08be69b2ea3ace396e9e145694f8e0a3dbde41856102f0614b07d70d6793d18510a6b1e0532a858250cb1c92e208c5af828a5ade68b57dc7f47e22224d7c4e6c48411dde8bea0a9ff2f56b3931533b4abbbe1c7ce34d9cb64146b89458339f157538b894daa3e5fa1cc50a31ca01c9dc4f2290451af1d696fc08a14dd1e14cea623287ea8a7d9ff998e20064f539f8cd075dbd2254cab2d0eb6be63300addd51d6d894c9e29fbf062df655b8fa234e85a918acfbdb00b8cad7188e302cc0dbb498d2e6172932cd88a2a6111720e8556cfdfa63b9f5ba70ed87b6a12b9e41ce7a71c785bea85d52e7c09c3d68b0b095eacdacec42eb2063a1c5ee280b9f593c0b295f7aa4a749d58a4f80e193f2a29568dfd54f80055c184f576829ba7530afcf8843ccb36d1ddedb17f9037f2ee7dd4cfc1e925a8a93175d06cbaf1f68edae2e561b83d14402f541dfb0ad16aca6f500ec2fbfb7c4f0e9359abfbf22c2b9c2905a8ea8e87220a324714de63fb30866ea77afdd81f998153ddbee63abc9bb715d5d4541df409e6fec9377b7e28d35b6746547f59f72b623df91fda2a2c71c46fd27e8599ef6a5e2020ed626e8805470057d9e0ef977709c82839785ef0203c6d8801ef50ddc5c82cca9133e37d58e1904885d30774fee078d7a62127bc3997b56308f1f143aecdab32ed604b8d40a3bdb4f2b63014459ec6a3e06532c5105ece0fee4de9b577c6f2063c68253c4f15df197b1b07f9cd9d380972c50ebf670a1dcb3c53b8a7c35cb79128cbff1ef6a08ae2b961ed9a09545374d7c10a1f80223b417d93cc9f13f752701d0c3789b9ec37ad283b6f798b6c9f7279d9b34a0e2f9cef2c9ec40fec1f593f93997d211b416bd53207fc1cc63e828ee38f98e3639ab940c3c50d8ebe3d424c16f42e599d589df7714812083c529326af43395022ec26c2ddb7277ffcf9941231bcc9b7a29a5480608c4fa0704147e637a4f334beac5c01c4e590683aacc54e5e53edafed7f161c8a351399e473172a171584f5b953cf7a23c0d6ebf9ff5c4d0749f8c6b08f690848e2fc391b60977eb8253d07856af79874e9795fbd39df9ac71f7980ae33a3e04706682287b23f60b554aa0eb55a7ae932bfe657f714b5b41834ee6239147d40ef2ff5caabb0755c79144a6fcbbacfe8d7b4ac5929f88525653ad5efe39a5b86bbc013b61a13efee8de4acaf2b044d13fe8839c7e85db46b5881be8e204da54e375740693524f5736e663f4175bf98f6f18b2d4894dcc9f24cba16c191a700f3dc560a589f9c2ca784e970cb1e552a0e6b3df54fc1ce3c56cc446d2e9a2ef504356ceff8bbc20bd78c1eefa0975d76c6c6210041f1da920551a12029bc4dd81bbcdc5fee0c3f09afce571a66734115cc9cd4fcc3975a518a6760de476aac4096ed54e89d237bac8cd6227f9124a87d6c49ba394944f6016297f4061c4792b5024147088a74007afb3e119d954dec1432674154476d16080a4deb25fcb5c9bbea43233e4a8055db7750a4d2f7318480cb702abc428232fc0e03a6bc7d5799bbbb8d89f831daf4748dd84cde4b821a3973fea6ffcf26e553ca53c748228f8b3af26aebd4e4e654acab1f8a1de6b215a4e86d769d51bda585eba8cd4770c026b02b75b942d8250f0a5ba0dcf07d43ff698536fa035ed8ec28de9d1938dcbbf4c1c33882c090398c041c06c61463ba4fedc705a1c06aeb31a30f8b3baaeac56dd6562dc8ec8176442078bbc5e82e778fa84a341e52ea770e9b1b0dc50c1f6efa6460c00c15407dcff5de2a6cfa521e273f7b5cc049720eeb677d9f15dadf2b43025f89bcd931b2a7eac8ed2bb96310af09d6ea28027605409ea3b9dea5ce8cb026bef56bb6f9a73475d58e72a3d5f19f9de956c61c8b1cb6a729d86fdb51f5ca581b9d992cfcee2e3d6058e2582f3371622f4d1af61597b6277c954a1a0e1909fcd1ecb5a9afd9cd981606eb24d348bd0d1517a73d9a18b786185b0db05748e7ab9e6d41cba70ccb1c53030dc866b3eae53750eb51ad12435989a42b5cc217fbdacd89ddf166f98f4093c7ba815e077391028367b0b316d2084d0b136de308bf10ebdceab96412829b74df820e2db5ff771319acf94098fc18eeea56621e9d99d465d0f882230a5d8362b4e4bd6a41e72dc5ae1b89da0b1a01cbec84e7e949249be80067fa282378aee9e2631d782db32ba69b43f0e3ffc469806bff5dd78dd7eddee5e97fe8005c5476e28dbcebfbfbd7427ba6acf2e983a688f356427dee3c20b6ebdd91e723814a962fb50a4a1f19d705c9c43c9b5ac04f621d0a1420ecca0b0cacc4beba0f7fc7c4448983f71995a18d001d2e21c602da88438b61850bf9d34c832f74b516b0728dab6bc8976e17ad34a921e03aadd3ce87f16aa90ece443003197e527cfbcbc15edeec369faef870894f72f15a84bb91ddb1286912964197acca51c686011a3ab4497b5c643eb092174d70dfe5ed22cae60d351055167a70b6302a4f44d924553a95a9b8a9afe8685b3dac1a814981e05d60213d3aa14761bbc5685b5de692973e2df7c9c4750889c19a952f912c817890546d5e37d940d13a14ac7925abbd875b8cd60e4920896ce6decc8db9f889da2b5489e1d110ff459d88573720bb3d8bff3cd4f4ac34e3983794a2b3505003ab8adb07669b0acb45729b0913f3776b3bb5b8652b6214cf723036c84ee8a5a7533b62565afa093d4745e7327e0272ff0cfb7a17010f5275b16d4fadaf077bbd67c984f74d72aeddc173d753f3d23041865d1c5b240870aeac4b49b3622144de6f91bd7aac996e255aa905fe03e721db2e46f9b1e2e1f1b2e966af79f6ca8382c130665106d2c99c6941dd813cb5ea346b45acabfc30582aef2c0b71db67da4313223a0acab343bb73dad89dfcc2dbe5d3d5afb9ae58068f2417c83b8e8d9b87bbf3831886cf5efb00d071a4c2928957ee637d6b97ddaf583ec670279eb059c94200ebfac96b8de3a6cf53262ca97513119b80223745950e85949dd67a5497904bf6df31e13c52fdcc23d792a97c219fe3ea628e0b046a2a9f2eabc8bffec7751031d75e8c9640b1f77a899ab79f0166ebbc9eff91be9124f1e1145ebe138bd0553e5ec12a2dd9a8af3fe37ed566b7008f9e900759c89c96144882391347374a7198e01a2857703a59e07fef918794e5460ce025c1a6fee67ce15fc85dee6c3c0bce15ba2597b6ff8e18a93d6a563d8db593f9eb67fe4aae9238179cdc9d9d3d7a4a3a3190831050c2251a18ce77138244a067c8cb22e2570ab934173db93cb74399f801079e1ee68ca22ce24c4ea93b89ce943e59b958683ce15fd7ffe5ed420e29c9b8e94d3519442c6c2a52618141db8b19cca2263f6abf4cd54f7198016610a619b9b414f5719f1052617f441e0dd04262e422fde9c6f8585efe51442b8c216b7293f689c287e3ea6a28316ae2280ea0fa255aa50a157e9037550d7ece3c86f66ed83f103eb4b9373ddf073a7008cd1359f0b7bff2ceb88108f4149c6befd7d368e6ec4ccc90957328066f573a28b2161ce6d8a3466b4cb73e5bf541872e8a8efb509ca3fe93ff1ac32ed835c31044159d682bf36763918f61ed2df2926115958095be9a37475cba99c8e05a8d5809be56153034f8502d85fe282d3420301f63a336c0a4291334cf1665064a0b58696cf14e63cc5bb987477dbd816ab313fe95dda4416626902dc4b373c868cfa9e9ade994554e13f825206afdb91acd7539889a7ecf34c2369e380b75854b4cb500fd9987831eb3a48dcd406942c8d1dc66d86416b8b48e8f1c9598faeb65f51255e89b885bd2bd37379a88909d0952c1fce1b52c9c49de020f79b674695d7b4a4edb6a276dee8338a904bdf44630d2ce625127f0e88953281d311e626d7621b562527fe537e6c81158b86b14dce3d45a4d9317243be760799c682b5586649aec16ea6732284fde69dd11fa72afa6d9ddf5241d3704e8986f239b57ce428d4976f31f9a9edd8e48aa9cade68e5cee55f22f809499b1f16d8139273e2d0074afbe8d4e949bb626994c1de8d9d8631ecb1f233537dce1b6524843b848f26eaf505b2c13efb950ad32d6d75f2ed130dccbbd96be5171029bd93ce9ab02ceeb81bda575ec06682b86c7c36f7d7019649cba65e0888be6a31684d7819bf612e5b05a55f1537338a547aaaa3cc028016cd329a0a72041ae21cac790a1e78d5f0bafb8c504d6a09b5c646de3d5c3b139c8149be631121d483d0d23f0c13a4313bbd44b7b46d22910cf618418a104c622f4d573bf34ea794523621c8075f0b1c184c2a4f12df277396cc38fb144efc14d719a639428f5d015936e33c836a753f8d4ff37cf30a41565b31ed33637f12d29ccd7cdfd63d0cc49fb95ec3069caa41a5aee865de5638e2640b8011fd0c57438751225539c17c852ca5dc831a5d71cc655151335b2bd3c0b84439be6c5b93109f8de0c4f38175eb09e4a3a746159485d721760df2f1db985fc2606238d68de0ed69fd548ae7bf9e3d5cfb55132cd91602049e1c2c101911626f3d24e7e40f5c77cec32c885a2147d0f72eb5070a0927eee3138890f052d4c831182d03ecdf2c47a278757541658ecb9b83f1ac17ec5fa4a71b78a7fa518999f238a51458c6f765cf6556d706511a3532412e8abc49672b36ff14f794ddd7de99e6b3a08f8c65d73bd2f83810ae9416a3b197275fe9e68b7a07860a27bd669e0e6a7f31f9f91fa7d006821fc743a376d61b510d6a9585cd5a7af3681cbadfe1390c324efed5cddd744b1d1593daf05eb3c787c44313ecf8bda28697d99ceaaf0214f48006e7177f11e7f1a1dc3922d522fc5fd2542bc2148dc56421c82b2e1151c9ec4d79f8a3978e23254b0a29e2e40b0301c103a7b02ab12cb88e502e540e0e744340bfd01c2cd347e29b8572d89256249619ba4e5d40111fa864d86f03af215d20de40372847c89b4f1ab6dcabe7eba74660e0e7726195e55c2dcab4e4fb72ccacb165f56fef5567954f032f04ebb2d43820dc3b969225c8fd708dc69ffae9090f4094d19a2c62f2dbc2d5328aa794f395e0181272dda90eb3b6896ddbb46f5b701336955106d7854afc95aee622774b8429fb33ad490900a58626704032ea0cf7b3b4073b869c680a84a96cbf6445252e82ed68f0de2de6fc68cc99777b4462cea774f001b399e342e27b31be76e4c9bb735677e3a5fd08dfe4e3ae289763a61a77e0174b96b73e1a9f71c88b5f3e7f52849f292da562ad7783d378fb8f311f06ac5f46c035dcc0bb42f5f8cd27398f1b3e2e4677e7421feccc04bf966a9417b7cd5843089af1b24d536e882cd7bf403f286c96687187a46548df4ba43076d4586235d7cccddf5cf75b44415276b7dce6cbc1e0a94d17850a7dcae3cbe9be9f0ff35dcab4d48c06e2e1deebe40c08a937ad96eee183dc0a04f52e51b39e54c0040938e467b9e2f8366da64e8da29cf05b585186b919bc7a7b38745b0557207f612b2eed8e84c8791a870331f33e5af87a545c71d919a11f96cc02ca691a09244be2a7acd03b25d3b6b85d5dbeeb2a0bba271d77e88a723f7e3b426586f1faf6ecb50bead6e8e34c33871d9b97aef46f465bfe5f8f7517235b0d9af605e3d83e6c2cc26f4792e92db97da9b12691a06d447865f375e1771354c874438df88c45f3cf3403cc421fbe6f206a67129b174ddd04bcf943d67c5691f63716c739fe50a827ca6e0dff6d467efbc88703d43f5738896a3aa05d0d363b1e4b355bad16aab3bbea77b1d1bb0f0e932cd7a34501d37e8ed77e357c12f97ac91868f05dbd9a3d13fde861c0f15f4672fc2197f54608d69c6b8da93d74e8757e06792e4fd9676eb86c87c4d5f77f4e1fa22b8aecf43f693a8e2ea5a8194b55c57d2ebf8d535a6d319e1d8317b5b74f2284be2233f4c05ef0a82bd1c4ea6a4126e551481f14bb6306fa71458f144e71040ca107d12fd3de46214ad499cf8c622aa6a8740b03d277c0ea4db343fa8edb4ca09ee2ce8cc011c56154572fb1fbe05828fce85b07e6d2e6d477743d50bdb682aa7b5b33f2ce1ef4d010018f76fde239d3144f170a409b0022b83185ff24292e910119074b462e5bd7487bc008db905310ba4f45f329fb973bd89221ee0b5dd9bdf8c5527e706883dcc26cca4ddd133145b490efaae71a32879f3e1b04b9790a9628061d7394f5f349477db62f4a9358dccbbb1c16c21f596ed5de7b2b78a64a8458856f12fafc33849f568b956c37523bc778d521043294584119474a8e0c20ef52ea5043eaa6ccf7929e51668928a5cc706e21b2f37d6cadac98894844d2143fdcdcc8eeab1b4508e8fd108cea8edcf58e4608b2d92568d5de03480fe221aedcbf03e0fb86822621681dd1eed7907c20e8a89207fc5511399f018d86b020772ec3089f52c303f8a9dca39b7497560fb4473ac89aa533ed3fb73a5f95f6f8f69eaf930edbaac842080a3a770674091d1973a7b1531be78650ed57c624fbd0b3924d4b337f82f68ca5ba886c8cb4d12cb63495551aa89a64d50a00ca1b08d1377363d9182495b85feab63582eea0d5c6f552adbdd892740d34d7dc7462652209aabae4c5b32934413ec5eac114803e723d9496f073229c0bd71994cbe25aedb29d1a1540158792bd09ae4f32e79c33b9f7c3f8f6d5a03be6249bcfd7812f57b8b64a149330f7fb58b43a0bdc4d3bdd2189a77dd8e4547824852436a1282b8aa55c1488c6eec0979ca531c7c82fa764345c08cb9d8a857c4f617b7130c097ae00f63e1adf362c8d10455b2afc7626ef7ad8ae8a4dae7d6eee1f69278d2fbbea52ee9171e8ef81063cfc7fdd820801a67a656163f13882778a29b600be5fdf6722abd536e8030829a933678762cf80b2bc6ce8fd900fddbfaae62aa6cd364b4df895d210e859091fde50d9d1a2b2ea3bc8530c02321dd66dd6be8cbec19e46c35c144fa8efd9cc0f63bd9e624c98896827849517df49b4aa9719a6f3a37e1af1d79016a5056b9822c1e07ee4676ba36260654be6a07bc19d735f3eea7abd0d00f071edb032f7b77f7f2340fcfc128151fb60f5177c9b436ff4f81d4e4e456818301f9d717f656f5025edae5412756b5c80dc5d527c928347a24d0bc528fd73601e03ee8ff39d09ba3ca58e94b17ca8ab7841493ea746c94e04c4d0f70fcd75014283a7b39788cce74bb5a964e10f82676bf6828305a05daba2c6338e0b9db82324089284710c02ffda84c76aab163fb8df65d0ca9e88868704bcfd2f245582ec4dfb75ab8c12f129717ab051167928c55ef5fabb7be78d0ab30cf68463de1c8744c219cfed83e38e99ff2bbf2b2085b76f0ecafda3a3ba5b3620e635cf1ece1a91c746999e451e56d97b015df1f39eb59b1806391ea655a3155e95ea70fedfcebd70c3b0a642eba8ba56fad270dbbae8687b7716f5d6a609d930cb4a4f6699ca4f275abe0d6091acc3f8dec6b0be237860a0e53d2f1df5b609fd4ffd733f4237cf53d168db895a8c7cca75e3ba861f8c0bed1855d46289d22d2ceaace56f233cc55bf15819a48c6d6d3287ce9519f74cf0cbd707ed8dab84cd2764ffabe08402baa98236cf99707a1f99db324961f3e197a3ebfb8085a3f47255859dcf78adb036a44ca903504ed819683ab5df445a7388db1dd89834b94ba31e142f5821e56fbfb4165abfb06eb2e3056cff5eac76294cdd33463a8135b1e9eadb5c4fc27567df41aaf10aa3172e06da39b9ce808d2c6a0ff5ef70545e4dcb21a0cdbb43a5bf1db3ce15ed119274094d698b37a8e8a46adb2d7841957d48d12b2c29a48bbda001734b6e6ee028ad74c8c31ca20bcfb8d5a8a18cb62cdac9837147191384053114e7e9a598f91e01d0b210151693899031dd1ad1d502bdf96a59b8450e15c59bdd786f627044bf97a373181d9c27605509e460efa8fd6e000d4c4954a0264405e58ea74c00a952987873a3dd3baf9a2fe2243b8f37063405f4b3c0efcea0cb98b292570c4f111e2bd41979fdfb1480454605735988065930a8f4e6bda269a27bceea484a65626c7941cf6124e43c5ac0bcefcff4a6e323aab0798367236a11d7c10042ad4b8684aa46fd25faff1070c7cd4a19099687db9b94a85f94598b60d4113b0ddd0863aee56c098b2953780983ff7e173f61d8c82bddeb41ed4db5d69948027083a4e33252395c5c56e85d6f1cddf3923f10c0348012a9f31906cebc4fedbf344728ed571a375e5f2bc7a5e8b9ec1251b0ab2665c5bb493bc18cbf5a1d89d921d09b686765ee775e50f73abd82b6411e3b38f1a4206135e28de871f82ca3b8ffc7053ea85ae5101f6d800236a0c2e9bf88c10b39b98bd4b02421cbdea4c3c496d36e566322a48f6c296be79a3b9873fd3e4d5b6cb9c18e6c2f3fb454ac7265ae9ddf98dfe4b35e0b2cbfd0337ac145a005e5c985488bcbe0554b16a16c36030ecc5fec66c99be3c41f84a44786c4c97087903dcb8d72f3d23f4cd80e0d9a067f09f73a +Output = b81de30113fe503a01d4f5d229a4ff0b7af288d70de6c9af2ab4c37da7a2fdc7 + +Len = 65752 +Msg = c5038e4d5fe9f9f3fab407ba0a957485b6a54550ded6f3c05d29cbfe8b2295c6067a74bbb3130dfeff31ebfe6be6229247ce3345bdfd30f01236218f295da54d492fdde11f31851d07e664c48745e79d1c6a09c53a8c75498e2feff4869bf066138c9066ae2ba97a993d3ab4679b09cebee28d7a5c6b0af3587efed8aac2bc3aeef857f465e9c13a3d9d347512ced14eb49c88092b833715f88916e19ebc52f161dbf8304e5415887b6e1cb090c887458602c11dafba44d8f7bafeb7696ffab2f59e3cc47052ed8adc19b80cea6f73dbbd7b025cf1f97863dc78800313c5fca530a7eb58d3cc9068e704d13227addd36e06e116ef8291ddf2f2a626da5a59ff39d5fcd9380ab474b25982ec94f690c817745b7fccc307973793a6d9c26f62cc4c12ea91e7ed55a5b1c3d997a6b8b49e20b67bcae76f8d448400f69399ea2eb3f267d49a0d53411bf565cd8ed81fadc81233ce82bfd6778850f111eeb1690248d53b273c28eafb3a05b5bb4c99ca00d87472c031c6967ac536ba8545b94a81fd5d037f02cb02d8a25b1a4f5b7c164241cff9fd428c3dfb7dade3cd23123d22340267288854398dc77e29d635efa2e6867d4fd24f812b6e241ef356114c8f67af6dccd027650d7f2bd76b0c5674ee622914daebb335ed675b127fbc9ac8dfc6a1e7aae28a6ddd21420f344e579c6759ac1f31a6182af26b8510cf6d2a279cc3ce1887fc0bef5718ac8e3c0893d68c118204caade8d0e8ef24a288f439e944f38668fa793659d9c9bdccd8e7a5a3eb3e4d6e2c4f9fb82f66dc3032ce647e76ba5d6178e6944df3b90843a1580795033450a3dd27b7514466fe5233781467909cd58a69c0a02c236b1eab1bd6242a42a85e5e33a2da2cb6641d71216dd425312f615c6393d484e754633baeeea5c447eea8e5e66d42baf3f2bc25833c2e47b6c6934fecdcbbe8ce0978add10de703819bd2d36bc3bb7c8b774ce7bf4f8d4fb016eded6c07d0b8360ec15a38b072586e145ecf1a629ef1fb7662205c346b9dbb74c3bd77a19d83cdb8cfc93c82d2438c0ccf1198a657abb2847e77e07753c21784d72886467ccbd3ac068362d1815569d986435d2b802a4f060446c274d04d72bb7ac72e431901066d08112238f9ee65ff26ecee5ea2ce3f9f962598d96ba04b8d3101b633dcb3d46046eb1135c6af2f022376b2bc3a27f295a69cca01805b106e9c70d4a54264ac1a3589b63451f813770e6940c0b0c806aca804ec89b8ee5ff41f8d0ff3e4941c1f766567d13669c1c24a3d2f08911efa393cf666de6fca88a22cceaecc3db292d46c16cc78ee64a878598ab3f065ad3bcfb7f9cf7c2f8028fd66be577ab850becd99065ab7d489360dceaa9614a8f349c4bb878cff72afcf7a3fc490abdeeeee8f8fcc78fa9337f8f71c454bf1d571a2dcaa1835b4d399da8d2a79c0cc2beda08eb2d1cdddb5017fd8c4c33bf475a8e56c26344048cceee8baa9668e5839fd834f94aebfcd947629075aaceca8f4197ff792543327b90f58875ee34fcc537ee546b7bbd546bbf68317307ad49beb43e103810094ee328bc8879da89bb532e275189ea194d5b6032c9d08b59a29c5a8a72474c1dbe8c3d4b710080ee89f42d88119bbc874f70d3c73ed25d593ff1dc830bee0007ec3e78a82d5008ebce6fdc1b7de91c8fc271c0307ac2a6358685e131c47555503ec181dda2b19b08f38de2e77dbb30ba0e27ce7363e88d76e120129d8623727f1edcfff2ba6d61ce5e16e8f4fa58208f9b5aa69ae38b3ba3b78917ce37427f1cf3599aed5bcb81c478d2954bda091597d2d1f0ace1f4d7446f8997ccc018a6b025fefbd86f122373a98892f307163758195653b2446c8ae173e83ba00aee0dc21c94cabadd8b71615a0286f467c7ad5cd9af77b3f6397c032a6eaa51fc0bdcda3fe2ae9c8d7e9018f1061a57e463a02b7ba505b7dea3d431fce28ce77db93c80f8b250856732ab20d85df6236534374b6500a5c7e4f4bbf4510e8b6b773e553dafca587d53f1e8ff75cfc160d1809b460188fee9f07258d391b84de4d1e34e98caf36d8d39016f3f322323161290f3a4b605b927ea67d45624a97a5a73f04f1ab2f537bb01ab69677623c64e0fac68ebeb3e7d89ba19560573a9bbd545ad8249cf9860119337fe00a8954f10b01c22a50afcf31649d10769e480b85e2e610db089a48d97d7ed559132426962dd2748597a07c3d67dd60e09e0f518fc195618d449e06854b61597a27bf2ba4e7e160290a32794d13f72946dd0d183b8ebd2cc3f7515995016f6ebbceb6ceadb7b317ad1ed240e1078ebc11e1adca3998d1e5078770bc893e1d97a66ea7aa211bcc0d5a4c0c5da9a0e8abca328de1da7e782cd07b58a9c26fd066c28e0e28af92a0b3e9184d3a077eb97ae84609f9ceae1456b75995abd1054c5e88a356d499aab5adb21a11707b0f55abe4a2ce6c66b64b151488942d459cc5e161551e388fd28f4d4db7f56b84c161a157cf37d4331560ca80bef0c890a4f181f509d0cee288a225248865b5b533521daa21c2abc44a19f9743327e8329c43d2bc37fb02425b72c7dee1fed97ce39b5364511b6d9ad2bb2477aba616bc1121361f76096d1fc995a7c57b0d314c40c1f51ec39e94173de8de037ef7ce8d723e3ea73a9879eb317f3780ba3d67b3d95a7521ffc8a9d9ea07789033999a375def4eebfc04b3254184198905ebe7441bc946266c26394375bba6a65007e43a22b9094640faa37e6868a05704b53a6d96930a84af33acf44f69cace5acf47167f2fd04e9fc6c52724817e633d05cba0c84c14d52f7d8f5d05966770ba5c3d5cb1b8467d6f1582dff4630645f57a357e3f59078073705afe06c5ff26053b316d68f6de5b455377095681da77e47ee2664a4e552ef1988a57e17d1466b1f8cdd903400a50a90d1c33c9625d6170806cf997a080394062b7eb142029ab46f15d102f385d0600aeeccfdb89119b302b3f98a5d40b27e67b4e382d53b17c4ac179b33b5438d3f2a5636dfb6a99ad99dbc4c3e36d68733a2ec7bf7b8c4e5223f5be22b6083052d5ad0a7eb78b57e1141eb72bdee12ab3d219bef1bd3e52b568ea64ff3dd8d5fb40226c728e6fdf0e45606100f6b3c46244a89e6f30ee612e903c38a9215a9c45c881e409ee9c916d844d6d13d979c7f6e877d0989520ec16205783a10ef1f5cac5581b7556760187773235a4d597a7fa53f4100e485a76049fb8f077652364e2cd116d756490b1f494bb5564a981d6e50d99b720c91f719274fce9bcb2837c36464a745a8781253d535536b393ece73f8bf54070a5c47128368fe9b17586ae2dd77faac53dbbddba397c7412432d5b624583468e5d0de73e5aee7b262ca17d41e70d9b2605953df3bdad781125c7a605c0c023da5d40665d5895086b56686c0afb90affd6dc1e8926674cd30ca405992943882d534f0510dc6102bf1714ffcf19b8553cbd4b64ffeba5edde19f2bd8811658ce1f52b249b819ec60691bcc929e3d784111d8d6e6912fb844b412eeb569edad701964fab2e4da862032a462df5957d5d25ff8c84f023d3d7c18c40d72a580b31343ba3e2f3c7e89e5dea9a735cb811aa216a2feebca794b0e90310c92dc65e6122ee0f100f77c444bcd9a0e385d3fd31ac675ef3f426a5d56bad870987703c3174b67b7fade5a51aca0041c4986ea8bb6ffd01dcc026700eee938bde5fde0e67d29ccf75f39af4ea2c666360bf117a0f123401f149315c251abb0592dd993acce3a6f33b091d177a8d13effd2045dbf73c14447ab7ced1e0992fde6b2b282a2850decf1918f678929310cee4e391333995a6b3bf3286370910f7fcb26e134443c04c4c5648ae7dfce664e65d317eea9ec6f13608e1dff7662a1949aed1e3f2e4dcf7503cc0cc907f2f1721af329368ee77fdb69cec6377c08d9faca9791f9bd54ce7c411a9d818e2163266240d5816f14fd319c47c9a20dee1900ce9914fa6dcb724911e2a5a7dee42bc9c02eb555a6ef77a49c8b90b5a8acff553b73ffb7dc2c6b79dab6cdb266b5cbdad92f3139d2f17fa2cf0ca3e8e8afed5685babac874e20a7d20097e37d210b3e801c4e1948fa565cac83d7bb22a71838331dffe92c4a6dfc1764d2f8e9d7f845fde823efc1985ca7b0cb0a0b80a9c2279c45603bd47c57be532145a4d257cbdd0c3d9b1e72d1d2e31f0e89b50e58a6a88b1af829e7ae84f6707d196ea0672b0b9565de2dc16c6019e3957c41367c6cc6e8e5ef3bcda69cac55c176debcd0c0d980a613a41833ad50e3a80c375fdcbc869bee6df9ef2d48e6ea34837d8c59334eb549620cdeec6290078f6020f0413cf28c7d99ecb30a30ae172069d279cc2c721d95f4eb7b6026e13791a28453739711a4da9b9b8207fb0bc4cb4f66ecf0524e9ed4f1cc5757a24c5bf7f7e9ef3a73ebc94d9c8ec5ea5106d97e5ebf4b8c4ee9214c8134da997ed85b0a89d92c5e7989e41dc44ee27cdca53e81be67ff69c74c8f47caad6ced618e1f0f80db72a650f2de933a62438541f2dc1c96e6714f667dce0bf7be751cf3749051047829dba02e9df727524ecd2bf599970ec20805d386c8e02ef05defdd9594173b36b9c513460b91b2a76d1b40b55e3950852b55b56e631097c98c2bc7f614a850a08b2c4f410fa804e80738283a144c81b64405b53e89e25cd36a9b58a1f94d693b05d8fc279085449d83ed8c8ca116ccdebade7afd219da2966006399d294eaf919091c30178719b4f4b0014b4efe05784f5a8adb3138a9499d43312f28ef34929951e4cd6aeb23185c63967b9e4f14a305d2bf56947f157642feb8aa90f845f8b7a483eae1a902dc75c622ea36a93ce6b5a2efb26a41a167fdaf649c893481b40a9d74191a455b79d7541107a680c0bbb547b66f2144cf7733b1cf85a0488a3cf8893ff883447f99079a0b647c5a528abb3d8dfd57fd022c6bc253f64498c1fc081431d9ab2b01827d045c7126ba64dc0df0e0ed8cbefc003c4d8c5f04a9cb89cfab146d006d63febe3f8ece14157a48440e59a02e1eef9afbafe3305ef0095e95da32030180294621883cdbe2fff527e3e242c5ca918f454085f30ac20ffe03211e253c5d07b3f16d8ad11b01de8823642956bec0bb4da7915c365ecc5e2befc7e368894178b698f8c3d61c0f3585a35b2fe00bcf009d2a749f279cdc6f259d10c6667a7d3783a539afc64f499980202f82892d43e6005650cb315570b74d938233c9705ee8bd9ec6cb2c356f8f0a3257adbca3adf019b3bc6d0e1937cb366ba2b7ec1b64e0c6fe2682625eef6a76527a2de50f8b934bbb1df0f848802f626de8cf58cc3dd4323bbf82233c27c076f8fd7fbcb16b6418d50bf39a73e8384442cae69a13381771e01836c95dd7356eae580f8e39abd6f3a9fcf16f1bee8a6e62cfaa2a70e24f2873b71cdf244c1ddfdb2079e418eb508ea27756d0b0f1aa43567d667475cadfa87f2290df20150e4d17cd3b58df98852c46e1a079c3900c65864ab81292604d846ad15f43e1a06b38dce4c056ee41d96f1fe27ad4d45815477abe2b9f47411d4ebf49c4a7e9acd915a2dda558d565c1b995f0225c63a8795bcc5e1d5504cbc359f4f26d659868cc86023e56f92572d2be2171537ae20f9d24d39129de7b8ed4589471b6178e82b9ec637d51924ef780cf7b0c7adae00be53528fdcdb5ebf8c4ad263e4b383c7915cb5f2121ceb272507feb27f4e6de1c060f450a6556069818da12ce794212ca84954da044091061c6420a3a7e194cbe6415a03dad493bfb4561f298dccfa1e57afcc79144cbb95466b840da62fcac6183dae30df209fc80ded73e23e22b7a586d44457a80a13db89645377e400b8db3e9d155f1d012d8d7599c7df636000c91d01e5fa2a4041e0ce96b46ac91b051141aab919fc3fe514d2a340a9624c7c93057ed7ec00b7edacfe4ad06dbd4a5a7107a9c2e5e4a16e670e5308c7a5afd40a249341b59437be48ffc8ce0828535f0179e5584c3df1718e0ff147c19250b03763884bdb4c885cbbbb58d7c372ffbbcb7fa5a1d56ff5958fbfc5242093f9b620aaa41fe89271700d18421327031617d70230c808e27683740417c86a0f7091cfe231e264cdbba24600cda9bb43601a2be8cff36dfe3be245c82e5b2a6e7ee74cf175bfd5642e996f5a42c2079ba56dd11bca4b8d2c0e5b08f25304e517eb619dc1b9dcc5c192fe900ee9859471acb7d18169f7efd2b596c76aceeb25747fa6cc394461bb4baf78af030a1be92e3ea13104f41f1b5af93a8918e73971ec025fe1406077406a4db0d623edab8f3b23d3fb8bb2ed9a2aa2ef57e4e61652e73b33e2c05346db86334d0c55da5e0cfe23f437fdec87f3ac785f38b612a94fcdf3cbd9a066f514072af85a81185ceae105aceb44ea15ae4643303476b41bf007f2cecdc8e1ac7356fa59c68ff0ccb04b93a52147f4c05462ca0a530c1493bdfb00e5c71f0c9581d96b175b68aad6e7a49384e0ee52af6c67d6969e607a3a3f12e5b8ce8f2ed5c5f944db1ef28ea41653cef431214b0c7ebd2f7b1c5a2e38fdb468eeea009197c71e4f4c1916e35bc5c20c9b1ac828fc12cc9d62d5e377b47f4a532f23587b0110b1521353bdf3267d581521a6cb32a9b1fbe8f3d2e19fd64e3a6c258280353b271816d7d4cd042bc47db02fda12ae3be2b4d7d51a3eecc8f1ee7c760e60076e94bd6341a5305f922599a76dc086e7da2e5f33b1b5e0a7aff0cc4acad0e038c2e00601f9cdcc4c842514c0825f0d24ac1c62c42eacb117b6d43ea0cacee9125e925db7a6548b12294e57c417bf90acdc342652f50697860224ab441d1261db6b32294ef04353fba827c87ad3e9f8c890fe13a5adcb7c3abe687bff6ca432dc1049d28f81a10e4d2938d0ac5fe42bc0f1039284ff04477c102915995f8a425d765ec03ffe76a351d60ad82062b813dc26ca09b993b8e09420ede3da9dce7ba6c4f95a2912cafa4fd524469f856e976457dbe10a10ef2fca173f4c8acf78c3fe23a20a1463a6fb8f4e0e83f1700d9e9faebf83401fb11b661da4b8709c8e04afbbe238c799118e586a51f8deca9d12d650fd552367078eaf59a68f55ad1a25ffb3404a0b5d149bf450740c2e3b27da51681dc17a91f870eef4cc3a01a9230e373445a9a857b60aa92aff26a86db1de581ca82e0f448da76c169e1f3c39b2a79e6577bd662effc3c01d7bb01605460633942504a829cd1c6ee5a5a7ce05ced87e6f61ee0d8af7ae80536f113eaeeb3a29f91caa0ee7c0b73f8c683a7eb47f891d7988a56415a7b433f463b1e80eaa628373158a09276e612631704115efcda2c5ac7648347416bb1f27dff8decd8a668a29990b6091e0006afd43225c5dc10bbc30b24145524cac8e156c4ee794942e83442f95ddcc1d7d54176b4718a762ac4a2cc4f65f555270c6e6911bca0bcea2b9eb609046812dc12ca770161474b96db9c835d14a252fed10c1d7c750d942ab7347b364645719b33ad7d8f9176dcc374f2e8b38cd6beb0db3cec5ba41a6f82ff880b07afff7e83ac5cd2d57e83aa5f056835195b2cf8fb7f937e35c651cf61791bddf38df08a24017b1f69850824c8214f20c4fbff822d32821b91683e1464c8626c907cb3350ac76acbc2317edc7d3d2a046cebd8fac4889b6d04e659df0b51fe5f5508c20f8662be60662052520cdd7b8867a733b3600641eaf6dd1f9fa39a41feb79ea76a5557d865cbce1cf5f576d6055bbaba5c6e20181dedc909c6ec25cff34ecadde5c63b6b4469975968a58dac03af92b7567d6a706e6026a30533790aa570f9dff27771d9a4d61871fabba6702bd9cbc521ec49fd54e46265ab27f884bdc4c82820d79f95df87de015c9645c4b660c26e4f59432179e128ec492848c084c0a230e17529328d053481eed3e01c6beb131d4f32ea5f45fcd6816fb2de4092eb0494c4be833215c4c87e21e309d984cf4a5ca207b439318de7df7f662d7770aa8bce3b324207024d0640b64227aec983b496d8561531d51af9510890bae7a6959447c57eea43eb048a83ec7fcdee82befe66629c91cb992a77809bf11b239d12ba9bf3d2f05b3891a1b2550a612b48c79445c159ce790642eed899d5a28ddcd86b2536fcd8cf636b0856806085e79433f2bf84fc0fcca4eacbd382dcf5b8de2d229e1f5b281303f71aeaff20b095fd9ab63e2e11fa38ed989b0c0765892729a77d410d5c42c882dc45ea11a955d8dd524b3c1d2a024048b2e8ec680de14b47cdd7b8919edd42786135ce6888fa02cbf11e53e2b2ac655ef011ff554472a7a106de8f4c914c334d5c5712744e21b6320dcbf00f3a7d3a98a6b2bf2f97d1cecdf8de2f8eb213fd89f42650c5474165b7fec0ab032fe9127e6d579687766323470a6303d89fb913b6ef1003cc22fd93b64a98df5f11749f88aa5d2fdd7ecb4774b219b6caa8c0184c93c096096faab2c577b127837da4243fe45fe5920f6e9e0f964eb2d57bbd6dc398a4a1fd6bcd656e1ca5fe00c2fc631cb1bc5255a6b1a9401d9e82797705a6a454489228c5fa0e089fe3ed678fe1bea7891ef098d358fbeebe759037293d35775d08f10bfca52f3d87f7402842f8a958d0d43acc23b908440f50868f00d8aca5197249278e533b655b6cc0b37aa5b5b92f98ab70165650e876dbbff1ac4c7ec62010f50be988d5288090d9a9a57d66310bc8cd1509b558548b63b70f7a1d2e42f771af199cba6eef9e1fe56b31e43d68fbe11a3b9c5a9110c3850628f8cf2db405f0b1e1166c8b331a769e88ce8e9db9567e1d543cbaad9595bc17deb6e70f91e22ab7e2f5139c9b7c114f72d9b119bac1fc30ef6959d06ba87586a122d94655029c2bafa7541571399c72c9c21033d5b4e81f6db0ccdbfb424dbd10cb3a6485edb18797bb82a85ce954c2fe36007ea2b5ce136f916812dd19a1359e2e6eec9d19f7464b8033a7d6f1f6aa70a4265caa2b1ac76599c00789851c8ab9bb0b41130dfa022bb3fbb647e9ee83c17ae64044ab5a95d018793c791b2c26f3ff83f470302625c8c52f365837a8f97148b4dc1abd1a294fbbd82424523c84cd7a6d894d37083ba31262ba5071a276008c368284b6b5dc34f2815133b0da4ea6aa1c7202690cbe3b4a1aa4f92e8783efc3dfd62b4eda49103af945ffbd91cf200d3541287cc01801cadba89aa4b49daf7e154966ebd3da6213946510eedf90ca123c7937b8bef387231a17bd9ab63dc0197b5edff45f0abb0b0740efbb302df567967ca8c365bb4bd14a84fa6718feb2247678ff1eb8748b9fb66c14a91011426bd7de041330e9c0540172a990393af63d9b3a3cc19c8244302649084f1bc521ad751fc22ebd097539c36363bca37d2cb35e15116367de856adb6a3303afd4239b02b47b8c6684dae104c9b132e45f9634439c359aa6c3bfae4a323d6d48a8c8b2e53e98a2da0671e84a381aa9883ce32ec021e1cdc5ec6388f7438ff272bd7183a100921863e8dabe0810f866ebbf94016868de8361a3117967209329baacbe9bdaccf033a0b665e0c2f6d3119b32295ab0b36441f6a23a0e1e2bff798ce11059d6d64bab2cf9b3ef1f5c4330234f03a91da41b8ff1444da580f81d6865e5174c49cf0ce5552d353751a3c1290050b36b23bd7cc3fe13dcde4407858cd23323f18809ac58a5bb7a681e8fc582af01c91f47520094599b6816bbccc04d5e55d6d83638b29bbb4ef3efea52d8c3abbcb5341d243f67a0456ffd6cca462066b7a06ec8beb814f232224d29af637272fbf858098681c46e9c64e0eb828fbc97f30133a41e156ae71f85ee70f80e05914a12f9910b9011212ae76fac8825684e7279a57cd952f40661bf6234cf20f3832185773825b2f4445b4808144d7fca16c08a62a7730946cc930f37098754d2c50cd07f836792e464b83738d73527386d67b3c9b87da0d9d64e25eb53d31209d3867460f7339847eecc157059e18459ded27669244ba2338fdd63eda814d13f3b08f1da083c3bb56ef1734d00d54f94c79b52bf7f8f95da65db79bc6adf2ab9681ed9294ac405b341e2c13d8082c18fd41cc94b2e9be444f4c2b7e63084772ee7328b0d137d8ea823fa9fb04d7c829170e15a7ac5f325e9b91daee98dc75ef644de97c406cb2f2a71b35f53cc151b402a8386ecba47d36f3f66ef34d6fa3aa5ed9d700c992f7fa0b7a7908680fef4225d7dcf1f8ffc651bd418c956a0bfa2c45dd9b4355f2ce8b16241c3c710ac95aea63a9371cb73539623bdeddd8f6a2fc8222dc4dcad5602c30e0c7993df70884b81349481d15f4754bac0cd27d78c2a27b7043271281d565c1772228b521d348f8b0612ce561288ddf5cbe7c42db82a79a8e78d8133f54be31b2d4f0c1cf532f10029ceb5ae3fc0985129be40f650b9246462268b75605c0e85786f94a48b0c069d19f8e66e29672a7984b11cd6085ebe65ee9e0e41011f24f2edf4c36d511846be5151df0a81e50acb4770b6212183be49f774784b3a0dccc0188f06fbe9e017e06a49edf7bbd29fc2fc7dbb8c4ea08a7d171a57e88d907c89628eddb4b81c10bfbf41b1da49a87ffd0e288b6bd26dd97bc8202bad7e5faacb6684c64c4df4c788dae9b916adff11d61711a4347f23f1c27506720e8ec3dde29f014f170e3282f847a272317b1f0bea81b9a49a876b89edc83db98021559c8b7674d6998b2df96a8ffc6bbf23a0b4a6f890faf29dccf85a1c4670a6e88d5d0287600b68477f917c0e6804142a2ca297c62815d12490d393fbb125e756e396043c434bf7c58fc1996d65d9d5011b5c3974ff93aabe7f8227e0fe47c5def0edfd1faf16cc87d7204f07866b864ae55808af87d303bde1aa92568e54c6e32dbb59abf3fa5af0fe23f9774a278c5a131c91c0418260c56fb34fe701eb7f260284966bc27527a36d53453711ac6bd13d104141ccf056476212dcfcc96a32fa07e05fd98b05b7219d24aeb17d48b922cbe9b3be7acb38c6616fa612755fa6e1b635027fce3a8dce161e92910daad8d137ff4590eb619cc4f62057c2764a2f7f86292ab90c62203b50a79d3013416f6f19c793638f51f6b598bb4e774ca851260003452fb64af2ebe5662b295e8ac15ed9e90990e72aeb3ab1b716cb78f89077bc79ce4e6c238a424cc0d8e72005931300ca34b3734acea6e9aa3d198bc981d703e3329f8eaa6ae0ef5e02f40830394e16e19155c430359c98eb1dfbe58999e68ed61e8dae3df94a457445ca87a9484294d5abd25a89948e581055ed26b73d08a5d8feb33b5cd9e107ca2df51ecf34a302fce0b396a58ffe9fa06167bfe10fcff1523f8ac69571477ec607ee5e1082e1d9fddc9419126c5fe821ccf62175769ee9d87d8ed05643d042de8020962bb771822efbde426ede44ca0af502fc13061807e21539d94de62dcc9a0326775f46f4b426cb0cb3094a2fadc27628901832add3f5b30641baccb2a48f2d8a7259b5cdc86bc6b9eb7034831beedcd18e1380d2c689c39eca4b6c0143045ba71779887f37647b304c4221d18cf67598568385296824b34da36e489c20b00a26b75d338b99b7553a55dd96bd896fecd +Output = 5d0c5819820dbc44d06fc6b00e02972f852a260c2dbda5d7e52e1ed79e198060 + +Len = 66848 +Msg = 7e0ea9a441ebdbf1ed6b0d83fe2a3cf4f1c06fbea9953dae10f78e960169a643663e5fae9d67b576218a888e66549e33040fe82218770607e7c90c38c51e87a336f7bb0652192f5e6e9b6ca1f83d01afa3fbca86c4e272b6fc2337161866edb43560461228a8508f1dc63f237d8d6d4f16ac9f54767f8aa4972b9696c2e9e15dada2873be7bd21f275358b7cbeeeebfba449eef3f4f655b70009b1218a506a86e4e406e956ffa86fc00dd7138006819b96fa40cb06eedbd87ee6102039439117234f4c853e17efef4479ac528e7d3a1834e91c44760f25f05bea3cf997695df9b20be07567acfe584b9f91a0affc1b58c63b0ac60b023ae5dd3cbc166c6bd612d93f4a239967db941ba70e65aa2b2e44941b92b98c6f23a14d0518dd80f0044be01413f59cf09089fcbaab0a48b17ac4e6af3d85c2fde60af36cd9b89ba1f08d0eb1c25537ee25213800f1f5513707c1031f929275558d0a169a860e8426a1bead3edfaa3409a04216a0678f8d64de2134941a496c1f1f88ffb6a74604261fc703e5f35c59ea0bd6ddc29640c3e106cec1365b107102a56bf7e9c4cae34a739159cc85d36f396dc4d6900471bd5587aef22cdf504aa6269d445b6601e939a403f61b1d763d9dcff4492f3b8841696aab0e9f2e72c0b4aa052e331453dd9bba0424fb43af8dbf384e7dcac3ef18c5b6ac5fb6cedc9bd43a8bff9a5728891abe7e299480e62547b0babc87220c0a1073982b9a49f8a3addc17fdb7b6e8b35cb7584e0d5b81cedc40204c8ee249def2a959bb72272da0e89a9172b3b9fb2409ad7adb8e5de95026ee6876088a0d5e1561d65767eee2592c7ce1a4b5e8caa4caa8cc18410c8673cfc47a821da3bf501ea3f747a12881972289f0dce6ccbbfb47b1354c4cf3c0ff7cca3eb8f4b4c97db875a4d2475c712272c9a4616dec37f027cfa0c1d79700bbd7079d60b64592ad89e1c54181131ac2c344e67d73d0a74c120bf2bd0b82ac7088837dc18adf82a739ee42dc79d4e43fbd039f76200171d7b26c14890f3b2ee63746c8249909013571a403eb54273760090db5959b06ff59acfaee6d0c4aece58b5964d10b4b771dd90cf1b63d947bee4f6a12220d67b79aabbd68b02a3850352cc33b10072d4c28182df2855aa418b236239c659dad036155be6b9c908bc09dc38c3329b538e81ed710ef9fd3de7671673f3da5745f4a785204dd7767cea6e7f8bd36633ef3b4c7bdbbd14dd1cbfdf68ac6dc2cb905f3a54b97a88ad68669d9725c2b08cae616eb73387ed77cf1160846c16040952868b1e880b21d063d713cda74f95e809a7751a08fe085fbda276e4337b32a304f1064d0c6e5781f7a26d7d70a8aae899640c2edc6de9e770e9af12a30bc32b1025385ac7127e248c6f0741228c53f0d62d70601e75f6c1713d559a3b4639f41c999de238a62a5a9a837d932d5925b3387a6e586f94d350473426e55cc90bb072d4a35de177d076ba863cfe01ad948238c132721058f4265b647f7e97f2bcc2cb5ce5384236051b64edc1ec4fe824f06f988937c120ddb63624ebe06d61c1bd7ea8e00beb3f3cab1230a8e858976b804576cf23f28af482601be8955d74bf03152f00334d11ebc85ae56e7ccc39bcb442d270c124f5dd0d51aff217e8ca19362775d268d84c96d597726f040b5dad0ef0321a99b90ffbc9836794e28fd044b91e13e2f72d5dc265607e3728a661c0e2c62c19185f27d5499dc94d7fb315d61e616f9e78aca3f2fa4e5f63651de47ce24d0718b767ebfe0fd94b886a130951d8aa0f8167e6edad06a99c5013e264458fed79961163bada8efe74d21bf0292c7a507a184f5c69551d1acba9ef945fcf4e3ff9fd90f3130f4955bbb7100b03ea75ed15ef898dc59f900a53cd3294356eafbcfecbc06682e0b177a6a3e09408005de88963c0fb70c121f0cb26a762939816dcfe8d1a6e990369eccc25085bd3f284db3b016015f98e2586a86298afe8f026287fbe294bb3fbd52d82c6e1a2c6559d2db164f16dde3b2d1461fd90aca3fb501808eb57be622e85a260e627097d9e095872faff738d7c9b228e542a19531e273410714017320fede3ed1f230058305bf3f63fd4c785b712498402bf5684dd1df52d0c5ce69234908a9dee7027f4b10788c1a03bca656f04f1f985dae4a7bca6e3c4f908bd0120ffeee9c088d0c1948e7f4bc87f0c8b28f5a4455a17544a3144886ee3fe0b0d499e895721f7ab4d5f63501b15290e956966d90dfbdf25dadf894b814987412532fef26caf2707f6762893b622c430e2a4db28a9f79cc9d81be7b5b2865f0fd76193b2a0b4b1876b7d40c2935dcb14116fb4ebafb9fab0c07ae24f6946cfb7a259ef3299cf01aa0ae94e653932c838902ea6ca85cf539b3280fb711bf763e9048073fa9e7a91d0632e93e41e5e261efd66032dd2b451b99ca2b5e34114a6147c89c48345340c9ae2c1d3c7c91c7f2797aa6c8e0ce55fcc6d6483fe8f2b20ba78ba53651487bc8a285760a8b01a3df31d6045739afed824335af82b4ca74e4b97a6a31892e24bfea233dcdf69b3ecf1fd3c1077134d75517cda85021015995847d3360626e01598cf0b9b046c95f6b4a5727ff0fc7da1e4a887ad1b6ff29c6107d47eb666edb3c92d334d802f2d05bba4b7c689bcfbd85e54d6f2cfb2dac1e6660effb1d97791003b3f470b27d5746779809699db44931ef03cd8a78f1a9468d1073b80e51a57ee87a429eded4bdd58a24162b9edd46cb7094dd12b6b4eae68d731b49c105252d480f668a0f5ec9affad9ebd626b47cfa71e7e7ed3cdf35a56f732ed6be19c2c72b5aa85ecc83457ccf9ecf91bba0b267f8e4334292d8532b3af7f6898ef744f19a43503f9eabf7e6115a0c84e709b2ba1073083a41090c21f6e6b988b80573559bb2a5570c3ea993c9f7e8d83157429abe7cb0fdd0d8272fac2ac0fbc4ad179b398ff0ce9ea4212bff5cacb521f32baf0ce771b2c7af6efc63aa530b3a56f76b79c279ccdc462857b9719f42404334a2019c9481aff5a731234ebadfa367dc6b653388784f8a85bf011e0ba815b0271ba58460930e129b75f4fe3ca1874a8e4604cb65fa7ed9020ade4b360e29a3cbc101851f106f6e1271dfa222766c66d5a25e70587bf19c65e059e0699d0282e73d1c8817205771d4cdeb22b588dc2379287c0ba823313977eb78c5ec7d2ab64436ff7692e95083a83021663aff5ee9417f65859e19c51a00d045e307d529a8aa55b035d696e10c57428757fc037b20f64f21c4828635a5c83ac82002cd85bfe04239af2b4d9374aaac28db42bab9306042b9b29c910a4496cf0865248fc862b0a4a1cadb36ec23661609db534fa38247fe34363363cb5e33370d9bb74079fbe024f1702d7b76815627344078e8be7c732b9a379023005a681bdfa8010b21f1396930886841b9f74188b0f0f9ae9487ac72f49ffcfa32a2fb2387764b1647ac831c66fad5b33cebeee185d51ec8ac0cb97b4955bd10e89db4f60cebdc89739486e49caebcf687c626d9bcd62f5e8e7163eda1411b8caab35d3d76f1fe8d2e11096ad98b653522f1b1185bda739ac3207270044b6096004cbc9fcd6ff74afe8bd655257b179696d257476dcb33a2d27faeae7b5bd25873d09bc51a4c10e76e6ab34e88661b4169d3e00ef790b79e43f8de4c0d59bbf78aa7c0566572918c031669fd0b32ba5f265b1314031147b79ff1ccf5c32d619ece3af3fbb4c8c26347f7c009b5c8391852d1b90298362b146cd43e4fa3bf0d73c5effe5c1136ea91c1757f1b8f10e393779f9a7fbfe7aadf3508fd02b8f7069ef92fa82083a45341f9f970da9ff2fff91c2c7e347f0c0d3d7ff5d1b707be9648f263b8f013fa439978e959efef57d471cae02dc8e08d9d58d40381169afa039936f1f773c72003c1c5af03018725ab2408236ee4ea529f58bb9ad7c6789596b84f432d52a9ffdbe268b136b96d46cc3a5e5d0b30a6435e65bd229970a97597cec5bf2134c17d1224ea59b9bfaba07fda54f6ca531b4921a5610390bb36844e021ecf9dc21583f2aed20e56ba491d0c2c735674f6514a2f432fa5845026a8027de4da67a4b0fac1a9a837d3524da4ba5942e6d1c0512fd165af713dd681cbfd669e48488197c8c83cf53ef930c11cd3894a0ca85a22e14f346acd82f64fd485e6d5800801d4d74f903f8a90fcac6f9de31131c26bcc47f1d7e7221c5899abe32510ec6fcd6d0d9ecc1183605d1784619021bee89c5848ff76aed9d4a367385f4ad7f3458d6d54fc19f09130fc094366b80219e095cdcec03b4858707fbf63407eb2fd51e8d993b39f661cca818a94f6813aac72fd33c07d4c3c09b896ab14d0e82a725c87bbb20985fa8cf493a25f571653de687d93057ed11253768d323355b1c6bb2e121a9847f4354977da5a8cd29dd51689bcf4870bf3539d700f5ca818000f3e8f30ff2fb4139dbb1b00b903af3f46be9c635e2d6cd986516fc2325b61fe8c644789715e9a0bbc4ba7aac8ad3623303d6a19d9dfe8ad33d63b4ebb3478d2c5951dc6780d3f031a5fe5828e70af721afbbb876e85c894e2949c5c001ca4a6423adb8f1c24ec243d619b30133561538d605654240855b81cf35a9407f92e9f8cb9478b668ce996afb7925c5fe595ef10d40529044ed441685b3c9ddab55ee72a7c2a635d2b7e80f8cb92ad7b66936d2bbf8eae144090574f340c2081367ca6a4e94bbf0aeaf30a9e0363cb6ea2a3f66689ba8a5ec6d02058e690c40266d003836a744573b18f5e2bc9cc5f407f0db24a9a5166eac9dbc70bd99132672ba2274d666ba0a2699ca127849611f9e718c85e5a1be9be2ffa72f075d611b86f393a8d45f9769ff860fe189b8988a2c10d612a32e0bce4e2754a9023290afb19de63c86ee6707048249b88786d6d43f534a43788678664c89476724950c53a11d9ca884bfa351f402fa0fe820a67e26ad5ba0cc579f044cb9f1e1e5114e97c3f72985443fd6eb4c7cb360321281f890a38ca3252dea28ed2dd6c1da13d1eca8bf1f5b5beb6c235c73e851ebd8e3c3fbca5fd2f955e434ac49786f6a3930e2bdd9d083224eedaac27d1b4d7be05670d68637b8df8c07b7e8b159431bdde5fa71dbffa53de6d5d20cfccebb68d5548f9f6bb6bd3e2cef4340e9fbf5759e5b946339ff2a052fbf49aa67754449046860e4ff5f58abb4e5373357d2eefde71c511078519a2e960472196191408309fca5159594339ea094344e8f60b81b44a2a0f81b997e00b63fdbd87fc568ad52abbccfd2e7a68d9c76aad0f537b95433891488a8293e221cebe765f664053e8ad028624bec5a0ef5070b992dda8b4f203a2c5082a35319167345507a0faeacff14687b44f4a67946bfe6d59d9ba652b72048de5f7a754c5f7056167f2add7f4be30d8972a314830e2bcd34d92d931564e60a807320ed32345d9a367a381a3bddc6880b397a3c82b7b51f2544f2b9fd95f5d1f58229537151b5921f0fd9dd594129587f2ddc871eeff66d25757db371d6da4f9be116107023f2ce5e8462af5e0295ff63a46c7cadf35a27c3ff30f818a40dc3e23459dcb527afbf739c74f8c09ea70d47518c85b67e7aef7f26bf006899faef76e076f0c6c946e5dc9c83521771a6d298a9cf5adefdb314b5a07a54d8054c22b879fff50ba552c218291033c918401fd611a7447dddad4815e0f56ded825bfe256557622a385de4b4a69e265c1efd259e2da6db19aac3fa0e5ca2d42fadb4e24c271fc078feb2be10b9afa256f228844f52309748f1919b0d9814f004c3e16fab53ab889e650bcedac6a720301e6ccc7823f6f1723e90aba217ce7a03815c06b17f9d32f117c387615227388e00346e97174c922bde3bcc4a5031bab252af380cef77581763748852e09243a74419db2aa0b3c1ec7d1d4d94d5e13a87b435840c379c4087e499421df69aea42568792a154bf292a879fdfe01d4f81fa12996b3decaeb4b9179c3521088384b5c3f845a9b7e1306c8a3dd3da9aef29801a456e1083110d318907e20a9b0ebb97f8f634922eac6028f191c9d2d35289c027b40d327f55c2679576c949227ef75f820c1ff93d9340f65a2632775aec3b20c78fb90245ff6ce1e9336b5b3356b072dba4485d79185b4b2055ae16964ea6387613020e8b706536d0f838cf42487f8882594e2d45be07ade0ba8d5f29ec636dbff868c5a45b63bd092fc1f3e3a6dce6f285a1e747e6de8517cf50bf6a37fb3711aa6db61502c10aee3497877c142144c8d3e429e4456867320eb895ebc3c62af7a3715e72290596fcb119f89ff314f861ae7553af3c0dcadbe3059133125ccfee6e243d3010b9f7a12fc9a5a3d5f098598fe5f2fd4d57365206c83fc4a6478c7274f6b0d36c5693980b473d4c2f7c9b1ce2a69672fbdd2040c480d004f1eee700525987c08e53f13dcde32ded81f1872861479c94ca081f34b6b0109877eb763480dcf0ac193a970f025dd5fc5ff7d3086649a3d72a50999a57f66fe3ba95a06b8ae1a9ea8f930b8822e7e41d2c1805397c1d1abeaf4f15de12945c6b3ca5fc31db18020043c5b545ba41c6b478aa94381d328fbfdb6c1a9c913a54b37074f013ebd0a791e87b3aa432dc0c56c8581680c43a615f01302e423e58e740f88b127e47bbe8f3e00bf230271713788d78f2b00b953e20e323b75b846092982760d9fd792a64babcf07275f1a37a9e5ab5bf224dc38489e3cf4c650df1c52d9f9ecd0dfabca95af1d131f23cd1a03c9276e2641555c30e758b53eb358d2d85d38d422c46e305690126c711634232d7d734f301fcbc88332af0745a85830a1535c50fd4d82e27497d5998700f7590f49b8867686e78227c7697143f8874096068ce5c94490e8d90c8f22c8a9bec592741e9c623e519406eead7ca06b8f099fbdf11dee6f3f486b3767909bd9306d9c48cc185b0eb00507efa3aec5c91593a5bfb37fd496380c145f86696a57f55b160beb82c8c0adde1111749218dac4e78e55f993e483233cbbce13389cecb697e906a263131aef260e9e48ad0266410c44c7ebe284fda7de48ca378299601b27fb811a42a3e51fe5e5dc4689ec34370aad5db3f31dcb6cfca29c1ad1c87bcb1536c47aa7e0e8e4247e1497ad3c0d4ceab35f764e18b61b9db38ce3ac93046f698116eb1a32ede7eac18d62a15cb928b33d145f7cdb865cca62e1bb9c61c5ae29c3c1952401bacf3f9691d0eeb200746d32c59304d003d68a97e5c9289b84315fe60b9f4cb519452be566091ba8aad8207cba3d6e5ef432e53ade36d8a70a9f12d13d321bb6cff1b7965534b0a47efbd5023b8343ec2317e334152934ee1fa14b6c9e75186da77aea91a67a3510458694ac908d0ae4562e8d6bd2cbc5d88adf119f7891cb406889cdbea1023353c720636200844bad561feac85d4312ce15006c5211adbc98d9c566058ef532d5cc724c0cd4908fafeb910233fdbaa33686ad646db3f274dec4d7bf4fb47ab8fe1c24569255d85c52dc2cde95fb580179a68d02d8a4887a78ef66e0825cba4f367edd89dcc8853dfef39985d49f44b3003d494d7c2c9656d0221bcf88cedc7ee5bc45eed378beb71bf680ffda31a7413213884e3f9544914c279e96475209ce739c058c5dacac5411ae88558df9a83476eff30b0a25bcb256c5963da93069c548e7c56c63ab779b48e35a8ed73f7013369b318ec626234155c3abca95af23edcc642c94cebe4614295d9eb29f4a2666d9ddebdf59dea4c6b1ea8647f21860ce68dde30e842d41481ae3fbcacd63f3b6c77ec904ad9664cad102cfbbaab347ee821892e26f4092be843f19dd48d2ff8967467207a8958ed51fd32d2fa4c801d784dfe016763f5efed037a1f3fadf716a23fc8fef3425486d022449aac89fb511d4f875b48071d09164943b14cad272de626ac7c5388cba1ce2becb34fe808c22dc2bfac3771f0dfeaa1d8e49a0f2296f8d56c3909b130e69286a5ad52eb2ae940242174c429140cd089c43996488bfa40a892b58470269dc3aee9e96407e42efb0037356c90f8f87e8d7010dfedc5b0542cba62623a1f5fe8112417e1c2c70b94d38b7e9f4e122b3b19871ac5736261b9de3dc011737da5665a0e896ab04627c41a78a0dab4e22d9cba53b7e55de486d849b76f10b0e406d4f5e3de5d34d3dbff31995cbd69fb7829ec6068be11be8845db91cfee76c4ec9a516e8737d512c0bcd55802a5d1d083592c57adce4372ee691067531939a2cf4d08e9148925655e73625f233280d3e7a0f6940784478431d894a2a91f8e00376398fdf6df8a5e0db964f93ed1fba80d97d790067eb274fb1ac4de226fc85fbd547e07ae99986f66f569c0c602b6bf7db44be61b2bf8b792861d646f988d33b9b614b0bc45b40bf2cdcd405943267cb07cc000c60aaeeea0c12affe118510ec4ff1963a06281d629991bf25921df723e57d06a9799396cae4269eb177d985357a5e8aaeb8e763073fdd241561d56327fec09adf0661cc4039056c07316e7a3fa310ef10e2805bd8a429cd7d0941f301d9fb82560dfed8749217e1aa492a3731526f8d078ada4dfa52db80039348efd6ff9887b79951028f77c3c43fc6f7033410e32b3cbadf8198d15d065206d49ed1f6fd71aaaf4292b97074df71b1bc287063d4935679763ed8a71527106acc4917489408d659b9cf19068ff8e51161ec0cd6aa8bfed087cee25e6daae6c71738d37cc314e49e9e03d8c07dd846eecd9831eecddcdcc5fb77df7ecb597b269fb32b1bf45c7b87d9741d27a6473a51ea730635a54e9763b882f78d99fa788e4b0247ac8ea9441a536a11c1720c69419fc7b4329ba8d8afa73751153e568408036c50b7f9c3e761f22fdc194af17dc6d4da626d15b446b3b0dd169d2235489baf3a6ec59c720b649f0aa5b494bc1be871f6396f7c388a76bcbd6daead5f6b4f38b5c85de17e582a4342941cb936edb05f6161bf39fd4b00b1207fcf479b962c842287072fae78bbc420d3d822279b25846301e5b2cb325a794c748858b2713b7cccd24befcb101f0cec87703657cd4fc946416a5169e78bfa8a7361486da38308fad2b2879dcb5e01eedb6c5c8d2a3716504ad57da1119b1e21a4e37f92d50c11f3afc360ec4e818d6df555fe935ae454cb44ae9d395893cb5b309566e9aedf7d009007e280449097b3fdb3832f065e69fd577e1bfa667aeb7e3fff633cd70336699d047521539106061c0c532ad6ae3f2fa9cb5eace05865d3f8aadf51f780227600448296238ec4af79ead64b71dbbda86520ce17713521a2841d43f1b75f2b6fde4f6fa85d8eb8f53ed4745c80edcab2b102d302bf1a07330be0f5e4bfa7389b62aba61fa99aca2290539523aaed5093b5fbd537720effcdb47c5ff2b6603043b1e28dc3aeb9e27d99eea16a98e236949b923c7c331af1b9a778e7e34593fdaff67c8e5b15f3e84d812d00f7f1d464fd8850709aaa45c5400d5cf77e1347862757ff10b18550c4db70981a925eccc116a6bbd9597e9763a80eb1f68cc984b3f3fcf57b8ba7d95f6f8db8570587d037261d5de0805718b339d1fe4cd50e526c5a0ee536b223959f500014201713ebad7715beebd9dfd19e3d7fcb60218bba99a5b558abeea08d6dc8f234db8fab220c4fb564642abbc90afa3fa19c38e7c3221d18d54106c6c7b21d8ba1f236f67f3af725d9b13c9608e1b93a0667e2cb76ef0760e460c43f4d5498f2e2cbd49d0920b78ea53cd7169709c2978529e6dfd9e9aeb40d70eeb0273d81507fd03147c8a6d6184e6bc2e37d6c5d7fa34b0dcaf7f6593dd9d94dc45b5320cc0167149dc5b59eea5ea8c7a6c2f0d21aea331f35d5ff4f23cf04a921f380bc8feffa46460733552d5d5aac076f7f688fe14ae4c77dedd98d7857ca6ff6aa9fc0d1f090eb960a4408d1e83aad8b00690710f82329f6a63fa35a3b77576dbb0f8830b1b8347b20b3a444bc39411e5a1ba900a6a6024814c98fff197a805f9a550f92a586c8bd5fea283d3d716a3177c79e38ba33fb7c1ebf76ef579994d42fb97c8234c45064ad30bd45d3aad1ca3eb40d409e93bc98ab6883b05f9d38d56282f785c6387379f4cf8be3e6ab1ef4972c1fa1b88eeca7a50ddbcc974d16681bfaaa25c3abda031b0db99fde3df8b46a75fce272eb33aef3f6a9cb6973d6984267bbe993e62d0a0a337001242807149fd8cb8b33743bb77d6b13333cd5206abf1252599eae1397a988d7921e34f41b1f9db52562efa9c92bb4418e773d9ae87a4398fe4cce34b0e05617d9352867d1d00ce137692528ede5185c638471ef195c42b45f060c396097e3575ed1ce073f9b6d7749afde5e2a93e08c3bca39c5054b56cf053232caacb679c0aa5bec7d6c6807a1e39ce1f3881d55f89db15fc5b530c811763a068e9e255e7a44394b70612023858e98f8900f6bbcc911a1a99630f4e0a13c84512e3dccdaacb4d5b38924a9094bd10be9ddc86560261f02e1e07e7de6a8df7ada519193377e8396ec70bfed011c355d7d81baf48838503ccd4da8b5224de5826ba0a363bb1938e3bdcc39d3532041f67c25edfe7b272bb73683b583dcb9d806cac37a22b0a55b26ef469b42467e7d3fae706a6c821a39dce32aadce5b133f6dc0611eba5c4975c64a85ec24235f719edb0b3827e53900119eeb9980e884a31f15229811082e0d2b9632346032eaa67cca9d5f16ecad0abf2d6e8080cb348b8491b0ef11fb7cabbd9bf47cdebb48a34244cfe820df9edf4f595a6ab64c4a7f04fcb02ba17f5ad7e42174cb8606a0f0561149da2f05330527ea575f0ab3ef07071dcd55a8daf01a08ef5929405b1b1622f9b23d2aa79506b1a80f6864474aacf5bdad74105567fb91ce4c9ef401e19c0cc4b21af80dec6a545b278cac5184f536a4f890c038e703e786f5338a41190a7e39f378837f5fb777ca4ad4ca19c46b329a57b2a0cb97b872dffbefea63ebe9df211a5fb245167784be1e46a6e73394516771e09856a0a49aa107dbfcaf80bf9744d2d76da63a31e2ff4bed2903f9fbfcd2f02490202a4fc893c0fda96c00170e6ac1e99cebf36ef9557ace39b43d2599a5798670725c40627ecf5fd7e49376ab5b8f9c285d68b5318853f3bf44279c92a6b70d20945effd22adb096f5d5f66d8dee5f9f741c28ef25f7d63a4f9e0e74d9e4fc188ce59147e5f8d015a208f6efdbd6b06f2e22881a4a3a126ce1c908e3454ecaa91687508d0e58d517e75491780bec8cd0187c317af1c664527f45e19ad9234d121a9d9612e838201c5a3b5e7caaaa4560d77bbd77b9275c796cb7311221ecf3d21daaeaa0203141716f4fd684348a9a7fcfb374a70cd75b402e7f7fefac166f67a431b68b32bec9d58ae462253627dcab85b5ff6f7940f14559111669d43a105122c4925a9c4b29a751abb9c63bec8c727df5c6576b1ebf07611e9d3736c2771d3dd5f684c950e175480815ed92633a433cf561f57eab04f4dafa8cce404a142a49d86ba0468a61bdd28c3f01f5f656bc37274aa0008063ac2b376da58d2b6816cb6e6a2390325aef859a7db9b340724be11df90dbd397b8bd647a83379f0f35156ea6a8532f31d88d5d55a6b76cc1d50ef4bf594e1208d1260cdd52e9335366860eef54bab472a2847af6d9dace3a889a633b8bc38f048de5f1c6ccd6562b1ca7dde82fd65a9213c5f9b2fc6b241b444aa67bb0a11031f5e25b5e7b66d03f606025bac010e936343922b098d4340b120604a84f505e37100694cde602683639992c8c8fce +Output = 85ad0d51dc9a58edc353adb7648f46f485bd8c727ea366e49e208e62abb8f4b4 + +Len = 67944 +Msg = bc96472b868caa71a59f5ecb78c359e450170ef4d1baee379ce02f9f2b25ccc6fb21cd26f13cc88cf7c3a8cae63cadaca8f7b42e9ee6b9ec3fae9ada02fe1d357e2035bad0ce81153e46169c1aa17e3de86000b5c3482203fc706d1d059870e18dbc084eede9def4c35030a9dc99d57e58797bf2088734651b4b31cffa98ccb1701ccc4c0e36e512ce077f5af6ccb9573f6bac4b374bf4f8e4696d57aaa93a8d6e6a0c1bfc5ca055a6968a152ee332b0e75d1c29163e6ca59ef2a91fdd71c15dd1cb4d237f0417a69523d9434e864871967851f56f06a355930e6d8e5a986909df6919cc5ed651eee1d7f54d1c5c048395e4d515084ba1ee09e3420cebc73a7ae16cf77e63795613d3d96599610e6dcc2cc830f3a9b66f59499caf0156a63d961efc70a154962effb352b191e4438b35a24ce8f51cee147f9b5f3dd564dc7946e03f0b9dfad4e298c969629c6fa467a6419a8785289c9847465472f1dd12f6736d6050da1ddc78c85c47ff21c8d908084fd7950a9468049894a5d9bb89efbd030f85c7c18555fb75b613108ab8897741152e98ec29f95f5ccb77f79c301cd5e00bd7f9b8f9e870891df61e3e075cba3bdbc51a92aff8b17a34f556fd994046f0ac7d6d28433de1ebda18b0a57dfcdbdce9c4a266ee0c02da17447d448d04191d399fab7a29fb558335a04e27e20ee10e8654b9cfadde5b64bc8ff4dbd410554df9673c1474cbd53975b6802cfd3dd5b8fb9de535b616c3006afc4428360b026a35fba760ec5468f5e484cf1c972ebec291c6b100cf5b43966bb3f4957b9d295b368374c4583f169fc82fc25f788ca4138df7a299c155e20e05dd8c886a6fd10841282caa8133e71f6ae2e25d68fd90953a5a426653ada85081a2946bcc290259a111567930d9e45d12c3b57f2f29882fdf1418d04f0b9d44272995a56973c4369c687a992bd9144208fac52b94ba97c9c350ac407b16cad33e9b179e09f320877c5220723ada80b493b09aca6155c24c2f34871ca17736e3101fa0be74541d3487f9d16c27842e9cfc0dbac55ca4139e6be830cd87d6e95de3deba6d713cc425068514efb98028e38c38af824e4f91a8bf952fbcf6d9ec2a0000ec13ca541c43401e7263b776766f885a016bfefe445273630d50b52b4630afacbe1845432d747fea7230ea0d1e2a3b9a36e736583585ce7951f08e72ff59370ab9e4abb1ffa109149cbe1aee2afbec21d85dbc056b27190083064757208ce24364dfc3489bb328c278750ec1a1c9e2166f3759aeee219d1f2cf9a981b0b1f67f487257ad0890211d8fbe902d8c7e66a281dcd5fbc75c9fffd3317c99b7afbce5eb032d8b4e223f4c68ff66daf201c0ed98b4f893fdbf6ac7001688463e707c9ed7fc0f88764fc9778ba15971db3a381e3b278a1f983145a03b1094314bdb7ed194c3c34c860106c8810d319a5011165ef39d5246a19c77b20d876a01e9d809a7a8c21180891f3f65d1aab6fc576ea1d4467e19b11fe74924fde3d05f1d4f66489d5fc3cc8491bd7603dfb040fb3922a9be32a7071afa031f948c8ff3f128dedbfb049fd7813fc524a016e60d415ae104e321c4f19bbdedca58ea6f646c4bb78948186f4a8711a2962fb6210c33b9260e3cb43817a8184e4ed365375b96a139790e03f9cc9fef9af6382729e5d83f39ee5151ca204cf370d28d66b17f7810aed4d42c0606d0c1f76943d0c63f38d261cdaa6244b58c36997f0d53a37919815cc123fd5da0226fff19d91bc0c25c5be8d3d04d6c7d72c9127ddb96d6f082dd8c6982ddc8419de1fb2e816fde174bc314274a7c0b21059423f37f95128db90a87f379340d914aff32d0c434e9e60df02ef2a055e8484d7f130981ba1ef8c8f29288906bf53a30b2ee2529d3aad6abcc7d5b5b42cd9b53732ce96a6cc4d8b67bf85050e848e157e0755838b2e6902c3e4b8b02a980c11e56b4b8c212cad58c8fff724014ce31c872118f793a68bc982ddeaa1df4ca63b612f4a10f16f9985115f117e9574ecf8a5107f275d3f701f88380df348a7329248d34cadbdf19c90df51466d11a9266a563a2abb3e65a0753277652d0d343ba6fb1bc5badd5f210c917b18882c3609c229229dfbbd95a77b1010b2c783702bf9f64d37d0e604b138c630fa484bc811908c5e3b91616bff91af98695b51e77dfbd90c25785e8ee7d5ec178e35d6bbd865fe4195e4b03513497f72eb40ef06bc3d01cd2139ad5a1f44719326d973adb8b30d614f9e20ad7d12fe34db20b15a613e0f048d6d58f2d2050538669b990a5cf828519b064921b77eba529b634f6f076f6f46fcbbf7e5aab8057bcff4cd4e1fb5dd873ab5802e3cfd1250ae912f9119418108e17df0bef3ae00d1c59d77058b6c9b7681346c4f881ec4c3a732c87d016512cece5bd9cb678765dee9ce2cbd2a9cf0a4210b63f22344100007b0a09f6a4a630d25be29b750a4c3079f3f64d177c76b947c931db2890da2aa32935e54be5210488a1d56ef59b6a6c06849a5eeed6c7adc0673e00d43fbeb36ca634859782c99056e01e7ffed1d6fbdd775666205fc8ccf4116616ece6f581a31a8f4fa222a6bd8440463458549ac346f5b2cd76c083ff2df030853930887e90adcfad346ec17159e8d4f7cacdbeae892637fbb5a1002fb12c24b683c27e907a857b06140e21951e01502f1de448a3ed316c59a8a94642caecca0f9247dfa1abcd1bc10ba9ce121cb2434319404289bb3ed94d16815d22bd58abf92d65b39869ab3848e1e7d1ce9824349d868ab34a3c770740c6d14db5d59a4edd1ec4035dfd4759025e7231b3dd7eaba42c69a4cdb5027d9b81401ee559d73b212b0dd6d8afca065749eff6a832e930c0d3861cfa7107c3c40f76d998903afb2f1de835f1c65cc7af6c092994de8d4c59428823b9b7af6225381c86b8c3e8156dbbfc27908c2425728d66d1612a9186d74218c1f2ce21e124c4da2b2c3b0c1145cff2b49d474ba70875aef6f65e1e67a39bdeff8dff86c82b7a57d2dc3dcc781e1f71e40040f8d6daec8aa03bc25b76231581e4729206a0a1233c82b01450d15f7522c0a1bf54384ebaa2d8189d713bc077aa798acfc8f0ee8730449007c1a47297ad4f680b8757cda69da57539873ee28b00c5bbfdf540796edc1f645d477abe4db99a3e6eb8bbc07923103adcc608f2172cd0ee66b419aca0e71b145f09d9ab61eea7092e10ea8dfbde204fcf562056e4d5a20c502e01eee4fa408855304ca199f680b394b66e9ef473dd9c5a5e0e78baa444fb048b82a804bd97a987e35808bf762d22e8d2cf592c8d4f0ac4065bbf6141bda5caf22440c6d7275d3c4b87489919b440728e93286bd27f7f57788e92a05315f0e98b6e1ff3f1f88dbd9060c9f0841ff37910447278ea74e459d92f5b408254c6ab7fe8ad53b2132253d96bf48b6276254780699e1c7e36221354c6810a78830e56f61a52adc37f02444e312f3459bfbd22078b161f36ce1fcd0edc6cc3daaab033178d77cacb4417d81939e3b11104a353cd314149b943c5cf32f8833653cf938a0bc88273736b47595f0b79cb344cbf22f9e38761b09dfb60e6a3302a89fca1a3fa53dd6e63fb7c0d4b30574a67a0f9d6b32a5031c2e5a8c95264db662438c1c50bb7ee8342fc9d3e022fe7f6540739b9258c047f9822b653a0c3eab3cd8cdb3a667b1f7cb9779232af909097a389671174930b14d95c0c43f548c6d92cfed8483427d7206f72433178dcb9f4fc2e6b27cbc7ceb82e9b92e47c7cd7a0e8999e389d447d360df89885859accd605ff2d4350afb3323fe8307d5ae685d0a9621652c8597b873a0e7975ff523005690395ad2bd3234cb34ace55ba0f3930196328dddeee38db9fbece480e8d4d49ce428cac85bb87cc33ca54b5c27d5989dea3bd23068b1cf9e30f7f47d9d18b6addc5f88986f0457b666faae59aba4fa3a02abb6a69b98fabaf0a74ba89a9522f3d93c38d55f9c721f541b92d6b4e814608010cfb2efff9b7abb595e9459a0a6196b4d3fd1b5e7386874867d55dbf593abd2f961e7ee6c2e67e1acb1b362e1bc892311224ffa8b371c58d9d2497973d4668bc431a81f55200d141fc9984eced2cd71166492a5eeeac56174463425d9734b1b1f9395eb412cd4b3011ac565ce8550d5cb9b3c3088bfde4ee42db859aceca3f15a2c13eab681595f1f39ad407750bdd1bf2abf32ef42d141b81d189d54ad1bbf025fb4863bd9f568c88ab2874fa15ef55f979e259900490a5e79075967310cc4a6a2fa5637a343707ba29772be13cea12b665b710c74900945e5f7266b1511b2c59a57c33059ce06c705aecb59048765a11b79bdc01c60bf1cd85a8cb6c5a509ddaa4f65cc89ff8c39288ac9971013c36f2b6b544a6415ac31b4b3e4f0cf412a6d5753b652904281207f9e25fea2ee4ad41ab2ed01e83951232f95d7af9e7094e326172d692951763b9f5b490659916c8e6de2d08d25463e6f9d72cd39bfbde9dd9aec4386a186dbd8fc64ab34908798ec997db75287b6c48582cd4e25bf8399bb2a458111956d42971b3cd50fe44b507d21e5f9e89c2593f37427c2f9fa5c151a68d57ec0717f2ad470365f0ec15733beabae20b5eefd2d47e5f4d43d0cb1fc69bafe84e9c236f54f9ff391a7b425b33f7b58c450dcb7e0e15cc6fa55732fb027a5434c14041f42370ef7256139514f6e25584d3001e06f5e5d109dd9aa2fb0e2cc262cc5b3b2924921b372c1cd4478c94e3f33d9db01191d4b5437403e3caf198419bf855d7b55e48cab125fec89bfef4a6000c4e4848ebcbc246f1f9bc0eb3a51b07cb96de41d97b4508c82139b953e9e8d4c77ab0530ab33e3adce3f7705d3d96cdcf8617749e11d5639dedef48935def96f688aed9f6727247be2b5a97f647fc168c8d4cf7b4f4c0ea2dcbb1f1c637056f22e20b82b8f2a6931d38ae2c86aa930989144371230a4ec7ff21485cf55f7087d2ef8ef8571922498472bad61650a4cf4e81c58bf43dc91f9c587d3028bc78058e1701e0dbd12d8f7841483eac20768f633e9aed2e73771d8ad9161565386712dec22ae54d01108d830d1e0b5302537251b18a3ed996a2e6530bdbb5b6ba83d54b58d3adb491146d2c3e05e610de81a09f445d26fe8d90a57e5596b5222b16775c41c2e018687e54fb3cc577ed9c4940d55eda4fa340898094210dc0b171661f9ae6c0278170996c79702665f125f37a7b66cb5ed397d79f1cd6097c6c75bcf68bad942af890acdd2d40f059245fc7781ac6f6fe937ac12b9edb52915a1f5f24b9ff089084b0fecfa015eafa8f330d5f39e523d5edd18e4ca39ab0a8845899d0ac45e2012eb8d8695858def139890c5a612b1c8be8848729b27aeb69f006b022eae5eb27fd9182d3df6f92e52b4a0d8e1900a8c98c7bf4eb53e3ca7ba812ed43fd49eba7f9214436bdc4ce7f6b5c5826e9cc8e37e29f1db90e3d1787b465985b6dd7aa2c2a5166ba78bd5c6703a9354859f7977cf1d649bc6cf198341ae6f991c0f9ef5c990a2f869ac40344fa18ec1df2e98b40c209c11cf465162be47c570e801683df4d32e9c3ab408abe5990c4cc3b0b322d5b21ce002f0258131a11fcfa34952f5e4eb2da983199ba7e27fb067dbdc353e9c604b690a3302895c28c2e7c65e0b981a5734a2eb6365b2c6c40fb5afe7ab81c0b9cc1f6da584c59e6d436bc9a5ee9ef595c83acc18135703147e8888899276f30cf39575ce08d068dd35ce35b7789517254cc3bdbe10ff07df81832e38669893f8764deaf32b344c070e71931935f4ef9456c038abeb257583bd27e95ab46143fab8cb05db486bd86932185a21a358ff516ac2b5981e74bcaf85d94286f85b53923f7f8eed0ce16e72450503874d1bb6eafd4dccd907474dc17029d2439f01634d7eddce8ed52faeb0cbda17b0afb7b6cf82c3d7054217c958009c10f734ddf38afb884d572db0f9b31b0a1f2427d77f8d9fb77c935b808fe1bba27738465b84e939f193cc931fdfe7c707825851e56193a8bb1609cffc31dd15cf8d7d400477c6be9c3a6591c6d1cd5474d9c3ca5c1d8032214beefc052fc88395bc4cbe637cc1fdfa99a8a6407fe257b48e0cddb5f3b1c09c86a97c160a3299779c1d1de2e4697c9f4a0c4d072ab52559378a288d94d6d88f4ecfdcb93189dbf7a564eb1d4f1bbefcb406f29572b461d53ec2174d613dee6c0cd88a59365caf9850baa27d3d574985703f3375d87e71bb3c5b466ff97586d55949f1909929a8dc2694d08d0faa80dc070b9c22dc61f97d98ac227fce0c163dbc9aced9da5f4c25af79f1c766940972d1027926ef0d5d8edc3b38074f6031179f516eaf6a8bfe1753d092b6a29257cc669a66ec90ef12718f8ee360fe204bf589f45d8bda2e5323ac4f1fc57423d04b5059f20e6275acc81b2dd1476abaeb5a04fa17f999c4dfdd213c058e3bd72791f6c786e6c43fa0f5278e7e15159e73a788d92a6339ddf8a65b3df07b6a1ab212f249b21046ab837b0d3746447f5999708e2801732ad83201a2ab4d179f6d0460ab76e0155a57c8ec54aec660185ab1579d5d3983fd421091902a97ed4c4c82edbad5bd508fb2e5ab965b8af271405faf3eff3f2021ba18b8bc225d56e147d21c88cc867c475b7e4b4ac3e0760a78f8e9db648ed2289ebef98f3909ff0edd669f9de1f7d321afd74dda8e7365448311ba0b43b504827e87d671c51a40158bb4d972ac7e0f9f2e9525ce01b03acfed3e7247132e51bfc7e7c21c5d2ac4a5c1414caf92858c20563c55adc433810d25d3b5074967244109636ed777a7f7301c907b9d2aaac355c5416ff25c59b27cab75f4c45d0c06a6b19f1f4b8b1e4234fc36e8d3db5a6f9fea28e72420bf59af1c99b416c46973616edf65d13dfa5024fe8916dc2b10cb7f33773dcbb7b0d104c7c37577162be5018fc8d510d6c88b90821b782ea06a71644f90d64197fad32e5b67ab5dd8bff5f792cfdf830c156f0825729f43c1c3fbff8d2a633e37e9ba8c360ae843828200b416790790344d64ec67030ea415c9c5917a98470a1e0a019ee6319eb08a3eafe79948cfd0e5ed27cdb56128c7f2c858daa65f044dc0c842e6fa50313d76325dd299b3aabda771022c9ef170380f5c303b7f032d71a6c0f8e4d10b6232cd099535764e2aceef85ae799258977cc201f6249319250e66709e1908b794490520d060dd6cc27d247767352deae0fe9135e53651058d7c56539d141fd939e8a514b9e52db3f450fce2c6ffc04d0f461384b7d1575cb9641ce680466504d58a23519c42f5a852e2cf44683a07e354ebcf6ad89604834b2e10b5e220a6bef9b60664020aa3ce409b1208a564534254480b44b1e4f71db562d82e3d43236c18e4d4d8859ce67a5fe27bcc291f30eeafe37dceee5e8d908a8ae9cbfc2e8990a5af050b817a0c40f37152fb4dbb2f4cba568d55e85356603d0ebc1b993337c1426d1d89a042a3b6cd903e129dd8bce0f619c0763a73e0113f76d5a9bef1cc7251b794ef4c673b5020f793ae83f8584ff595adac5f30a938245bacd2b80a96286616f188f0583181bff00a2bba8a9fee3b62ab64b10a10296e15c8432ebe4357f1f3ba0336a634efdd11f8168c0fe25039f9403bfa70b3898f4dbe577dbd529577d664ca79c1a3df0ae5f3fb8308cdfa63d2129e75f501bcfa5bd5ac4f6832458a47786b544b0cf3ebe474473a05b1515b858908be17995851d8c4adfe4f60fc8bcf6b5230a2eea2d285ff861b774b09937c2a075d58e8d0083cf1d914e36d3f0ec6c40ba959b7807152fc4491ede9678e2e5c26ce195ea8a000f3aa2dc4c56185d6091428eff6012ac400ef57da1b1fae24b5c37b0989669bcd30bda353f8288375a0f839c628a9716193f2b7bc6e7695f7cd89fe89e78e5dea3f70102173e87a1e2224568cddedd7a42c0b4c053220b80ff9c6c32b078488f0766deeadc715ec381324f9a47442e0144f858f553492a6e5b126635d57ed8f688c03a96970556c6bea76ad9d9a4d0d2a64edec2cb440c511ba0549a1572df3cad6eddad50e1b5d222ea5ecd8ae60c17f02c10cec5fbf950c4b00008783ca388ffd68fd80dedc30e3461f31f62f22af5abf9b4c248563b93e0a9302807c56d03056118bfd811caa37c75f07769b072965e1c93455d3d1943f6f3ada2c9f384d447773f09b83510b9828e1f7ca8092c2291ff75000b98da888ff63f1dc7af32254d81cd5fb641de76cf1546d726e39fc0cc09229a5a4fc7893219ad4107e2bd1ba0e58b68d81d7c05ea702e30eb28149998a261bc524a286f67c7c1b793726ee0c70d3ecd28b2328c5b099f2d00bed3d57c32fb0efc714561b765412773498d9c4a5fb135aee64834ab4761796c8f249b0121b9375fad6588a85cf638ad4d6276b245ab4971a2052461913bba37814f13add861e083e4d10cc414a8934b6834978526f3b179cfb3850551f6996a7e9b670bbdbbb071ffd21493f51fe054814d274e6a5214ce53987e1fee5abd0c6d52bca039915030e7aec89c6822c6d17ff34d9278901a7918fc3838d02fcf2535ba3df6b5a967c882ad5167d37bedc94c6f31dbba756c810429dad75f3d76bec01b0f9497cc9e42ba19d77c9ff0fe44cf09fcb097c8b2ee01668d85034c5bddf5bf5d0248c29da576388164354aa14bf008d69a775393c8f6fa79c92423258dbced4dc931530bf99e5478a6fb507de497b6e620c2dcb818ca2ec52b2a8b7dd3fdec0770b947914719b3e4ca5bcc3b1aac5955cae12cc9e6674a9a337d4c0bb9a005b47f4765d696d19dec58bc8482f2173a4a203a0b6d38b4961f6a852e76468e807c7e457683eead5cb8d98642fb76c0a1eeab36414c1899597d57aaf96782ada586f61a423f57953771d520cc4ead90d569f23d950f8dfedddb8355748576e6bbfb6f2e91b3da71753fd2f4ea229f6d20e27db8d05e9fcb686274ec687929220c026fe92b867e295f495a69661f5540c881d50dbae057e84339b4d99deaa347dec480b3d8614ca63db8f4e707eed6f2167081a61b3ebc3eb68acb82db81ed3e7a6929f45fec4ace57b329d694372a6952d409e9bb20d7b3087a3f51eae60ef02818f31489ce828af4637f9fd6a15a8fc4d8f640622cae3083339aac91c00e4430f9647b1eb0fcc35df080a895d56d4bb4a1cf12d70d4c9e6ddd63fd99b7f621d9350691e639bf5fdb81b45a987b6b84695a1cc7e369b6e30f9f23abcb74cd716cf461bfa812d348b43ea21da93a5d242c2966c74ee9f6e9b1a2611eed9f9b1b315dfb6b2ee240643050d25a8eba4a1245363379e03412969b0ea5bec7e0690770995eff3e520e9d99dfcc7710a43a36fcaa0e4760f315d4140a78f323dd3e1d71cf12e1a10a46d9351219def7a0357898ad7c9898cd048a65be6025c74122457b289d7b1fb1f0024e1240f50b5544c0636607d54e6be9a0d753e7bc7cb21d67d8cc89337fef12ff2a07c926146c6ef6a3fe36644b74cbfdb0f195200ad8386bcee25e738b6eb6b811183dd8d98cbc02a19d91ae5791b38b38bff1b9395d7a39a693a2a209d3e3154d6d2272235e34cca569a11b396aa831b9e683f0d1e6ecb9a806df27c2c9a2fe252f035eba8ae13df78ded14bba6b2d7798ed32b991e94d41b649c6c7ef6fa5be086650366b7c83bde2ffeffa3edd965c1dd6ad35aaa7c7049d462d80402f314c799d2c9ef8df3afa4785a45bae926c4d9fecf51dc35ac76787fb8d31e9695112291d1181cb669828f8f8b4fc840a0da09178a0be7652acff18c26c5925ae93b3995eb58b6d7329ae89c1984959a50909951246b43e20061fc24341629f5f67853cea6f1859b57e1f6c98a4be8a03ccfd0d324d8b7553616e06f6b2fab10c4b1b9648d4c51a7df3e033c680e8bf96e7df8c612ba0d66d2d5e7945276e0525ccfb47e25cfe2a6d298551d3a34444eee83575177780bbcde8557bc72549064c5b88a44f8e3003e38d935958925dc47c2ca359dd97c7a006110790e513282ed075683df8df172171ae8ebccdc481b8bf439dcd1c32d21d9645d95b379767f962b8fe9776c5f01da7fadbfe9bb07c8c38cb79316baf3caf0ee54f3d2728a4f07384d02331e96752f7010f914aec9ad96902ea19448363bec07ddda94c2d4bae73677183c2aff96bdf4f9e0773ef790ad0a854f72f45e3d77b7e09421f3be88de2ef571ba18012b2d1350bd37f2f73aaf01a4e5d946d39836074567a08dae809627af55d47103fe26d5fdd87f533273457e73abf0c7fe14d3fef49c39160e6bb4298c0eb2bb6fd55143e87975e810021788d9e8e0fe4579f6a5d67a16184511e33c77e37d81ac795664fae84139fab1cc27c1e6d074118e4602d14b5c1abb3ac969551b5d4822b2dc41196c0cce56460d6310ebe9afcb1c6c20ce5536a5d8ae0eb70fff799a39478be02e4ffe308d8a8145af405239d9eb0f04b6e2ca4004345b2f8dd7fafe59020d4b22d73ee60845d1d4862d349aa5c3d8b86f384073a79658d7b7eb07fdeaa9078adb4df5782e3fa4197df9b758956c6f43e39fc1c6299aacb97582c91e540524a343f94a6f663fa31a7dee02fd13ad7badf86175c2f209ffddb0e568e9ffde09a0412266511a0f76e16c523e118650a5fe98c583ee6aaafb494e5d0be654fc6188bc1170a9b175c476346e921a561b943faa1213d2fa4746073930da9eb926d2649e0f91fc933a35dfbb8a27a2ead7f07816914ff708a6881f57a6fe989726043bce62f1d427267226ebee2530ac4c63afc48a5de4fe906a9792099f5c57c2a1153452b7b8d7002353aae1b34d034193ee9c44652142cd9379d19fe4735fc34efbb8290c310b92f06ce2acf97f577f283c850990373e25adcdfcb2f66419f0b5f3422d17c629a27f7b7a98205111cfcba26a1f05ad58605d99fa88fdb7eb137e08baa801ff9af97b875aeb504897f7242630cfed0bfa454de7b56920f53ff2513f08e0f164c65f8a996aedb0ee52bfdad3c06170da8b9e25be149f87a57c57d4a2141e107e159b54b892e869caaaf196ae021db5a173318c27ff715b4f0a08b238c6a985d4f07782ecba22a2640853ffc1de4be5e819c72b285e26c47b51cd910907cb79eebdb9bc3dcae48445d2afbe133d322738e727aacc1907e9b2b9701a1ebdca1455e52aa9b4aa7637f472cb7aac051ba417441bb018195cf37baab7f47ed2ef7d90d192f2584220e2f94e6fdc95204e84109869e516446d095f8c6cc7312c82dd27e8b93f327a2aaeddd0658bd57413eea84cdaf3cd838154e5c7553d40b5cb5ba3916637483bdbc2275e743074ebb20a69c6367f45bfe1fc95c33bfcb25311208b366382a46b7d475f6263737b6c7201da6f453487ded628f7e8e5ac8ff09e54673e76c94ef456640e43fbfbf1de9dfb83afceb79acaa600949f1df6e073b81dc01168b44cbcaf42bb690471de2b791fedef9bb3866999adf34ea982acc4a8a61c1700eaa8adcf08ee3c467c4a3a4f969f9572ce54a5f9579c5f52f7fbcbb61506b808146aae00df2f2488c53ef36688210b1cb00b640c251838e0fdd5702993035c46d998a688ef078994f4c13e081cfcb76102b3901c40ee431b3e439b4b479d6b84e23c7fb05ffdd330b0dc037b7ab703086c55106fd0a6e6cb5f4c34625a5b4d88d65d20c0589a6a25a1962a08cbda56db95f7cc4dfcc98bb70bf923b7f3c56a1a5e0471000164b63a70f79bf737ee17a026a4ac00ecde99a8e85150923b642a0422385ab783e52039c5073f90e57ab020c66198cfc96d78669e5ca33a5abff60dc901c32f05a50ee847cffc1bfe0688231e387801bbfe8fb9d62205f9775f34fcfc6794aeb02be9119f56bbdfa91a0771d63034dfe91a486938ac5c15baca4e9a6273b57dabff1a7a75a465250f3f95d19551b4b17c480a3d6b0192d74c8aaaafa42c0ee41fa907ec70c2e03557fc9a0c03a4e1bf9b113efe18298d875527b203 +Output = b0fdf72b82c8ff335d2011c9051d71a4e9359f3546d346ed37077cbfdf7b4270 + +Len = 69040 +Msg = 0f9a7a41e1966cfa4dce8f718d63116a60e8c6bb5d691e6687ab550521b6e96bc4915188ae4dec8d5d4438515da344f35e2668c28923335914caa50e14ab9e8e937997c1e30d90f431ad49365d8fb5020a99ac1ff16be0c57a9f12018d4f865aa5d8b4b527de4076f3912ce8382e4ddf8cc8fb9c3c480df0e0b305a533ab87192239102c23c9e45cc876482f9488f2d20d3bbeff12c3a2236f8ce4c1afc68a11322113ee7fd564efdae605d31aa68d22b57b5b111de287a64fb4181ea8a9788cfb1a25c2e20ba8745168cb9b718f0718ab0f3c9a02afa5c1a7b30a84c75a37d0a8abae71f471993655850250414b46fc187fc7626c32e2bc9f0f21bab4e3b1255f5d16c45e121d7c0cc312ba34e3341623546630017227de6152c48a164bccd548b6c580c8f31d8da1ad64a1f05eb8adf51580cd69775d7112035dba969b72278d402370d91e82b23ac85ecd1dc4b90ab54a7c024d496abbddab5313dbda8a625383995b3a9a3233009e6906641e21768c7cc49555f13805e8d10e5d8e10fccfc5068d08936f17581ab6ee136d73d737a232bf4e2876ad965bfdf6605646b0b6085168408ba61869b09853bddfcbc3951ef4d5f76fe0b3b85fb873e3dc838d5f47ec93cbca451cadeccd02cc622ecdda284a6e56d13731b11c88edb0c7cf7d11a8607471f9570d6df4dc6108a0a5dd4ceabdf235f7840ecab9f8cc8dc0326815533375fac0e1d2f1f04dda383e37db3589d4c95a88cf344b5e8d78436fb534b471f0fd2dc6ed538109a9d326e7edafdb30185c8d2d1e8a7c35d1599a7b5fca332a1c73d3b48278656676b69841cd4187050f11988e7bf8a4634bd7598d3912dda54141b431a929e4313fea57f4e279803043514252ed660d13835b4a4c49f4f90be6ce98e6694e478f89d72ba9314010da3c8552227dbcfd6b024b33619959ce839482477acacfd7aadee5db08c47c7d2b801391a531e2bd934f11dd733127a536d2c58896d494d9aac57c31b8a217104a9965c78413c195b4f213102b1748c64c28ff25e2908598b7c704f362d3f711600fe1bb662b3fccf674bb933155a279ec1e98e405058b5bf76be5eaad6006c89468f137f47f45ac805c70302cf31f063e3df88ea83b8c69953987de42502a7c0f2efc01d61abc7b7b3299adc4f7a6b46b0c88eb723b710bb7b95397c8ab4d77f8e86ae2b3018a820e7fa0d3a26b1ecd9b14aec20c0c23898674afdce87956ff781fa2a2333e990962c9ec6a6e567197f5dbd3dc1db6892b29f104764ac32d5db75a0e09ffd7cf589e9be53acfc1865ba2eb60024e428a39c8b8bb2e9591bad9dc2115dfbfd716b6eb7af30a6eb34560caccbbfa47b710fa8d523aca71e9e5ba10fc1feb1a43556d71f07ea4f33496f093044e8caf1d02b79e46eb1288d5964a7a7494f6b92574c35784eece054c6151281d80822f7d47b8231c35d07f5cb5cf4310ddc844845a01c6bfab514c048eccaf9fb8a36edec945455d7fca01862a92925960296269f16ee5271df5726305a9511060b615486fa62b9033c9b45cdddb90d686e1bbdb2054dd46ad811c72af3035fadf84cbc32122ff3db89540e5b6f2640fb7b7f8e2cff9d5a4c1bff43872a984e49dd53958c702e6ec76f64e2a9e1e388c5c75c186e6a6f6c7c375a2bd375b65570270060e4a8f0a26d5b486317ba831d6dbe1bdd04ea36839196cce09e78f01da761fdbee900e93723d968f0437d879749ec495c7ed3852822d6c1f25688d7ff561a860fe82caa959166612abb8f638ee0be5f174acaddc28653d3d18a49d08302bd43c48080a7262c8eab62ce84a95cd8c0e77dd734930b52ba6d1ea8107c4143c6b18d40b151915bbeb2491ad1cb9978805d20c2b5673b1e67083a3e912da28fc359ba87134c4fa573003e2f1b3ccd76793a809ba1ad0a2fd63fa4cc30773f4d4fa6ece24af9c9a0583fc259b58f5129080a2da0ade6d12da47dfedf72eb6012a81384e0acec87c2baab76493535cd26d94678902e97288e4e4d98c6ccfccd66793a22e0dd97028336edba6c1ec2a9e6597a01e8985088d830291330c32dcfcf4f854781417be27839710f40d6b87ffe050f49f89f857a81f68aee9be9f0ff93778f53406d1d80085ed00555f179a7c46880c16e98b866120dfd9b76a5d8d579ada2d68cd4fe63b9f3851d19f398c9d00078f8a9186bd40ef2fbaa3f8b57d9d84e8a61e50d911613b3fab70b51984ea74952604683126cef220f8b851ef07545d68055d77b780f9c0cbb73b89ffabec0bfa798b58d3e69292793cfb5b5355038c23f52e2a305d8b96a41c390333292a2dfd2f2749b6281437042d76ff288c327be11c97518dcd9f259283720cfc252c4368f0e0212012dd4a87743026b8d76a916a22a3d417fabed45d94ef8aa4c77bb30166bfc95acc7431cbb831b6495c313685b0579b130c6f0dccf6b76771399ee79137cb29ac7f615698a28299244312d2fc6ebd8fcc2b3b38a852d289aca01d45df0b0d295d532d1fb6da2ab591b592cd9503dc96897da9bbb94f49da9c278137b58b8bb2b76f5ff6ec0731f4d7da3b901918bc99912d41ffc79623408bf35124d95e4faa00fc7f4203d1a03c40d994814f5466812d618b6c9ace68a5bf2f1574142d61fb8121166bc4e27e7712da25090160e134a542106bf9a021f08101568e2ea0c78b8207abd9f4dfd38c96077791f5e3359c41f75762aeb4550919919adcef5e8b444bd5c6f35e73a7631486117ff4866ba049a8e8ba7fb10cd8cf086cc51f10b50c23b4ef23c94403e4d47f7b3cc6f18a27047f4cdc35404e44eb8e51b1855d4bcd54ccafd1fcfaeef71d1b3e3133cb9a1bbba10a2e98082437b44ad308eaee576e24448d63c03e71843981e1c503bca463b639aa1a6fb2959973657933166ae0d7dc451242ddb893736edbec5ffd6eaee73d6db50784e5aa507107cb98d17aeff0c3f6c4d61b0f5cac054ee869eb86c38f9865b25d9d4a6a45f35652a0e3c68ba123802e8742ebd41745045c4a93afe8430e4a29838388dd60447d95b313f5bcd2420ad5be19f6049d7825d06abd8f27ebe844a2e3fe480b8aaba21d3a2ab08a6b6abd43e169d5f324e4d8cc3133ce876f6f7aa6e4d532fda96fee709bf19efe54e1c1ff5afa33a995d346d907bc1511b7e815bceed2edbaa6d98818402d681f75ef3d918f94b62fd98b977e541f0ccbab9e3c6d69bb224a6a31989d8fa9b5f6b6de5982eaff068cd655f24480255abf34d81840bd5978b6dcbf4885f22c2e8900f43f58d102ccc876787fb2f396a7f538ddd1bd53749805e3cabe5ad07d7be2397b149eae67b0eca03e6850153a9d73a0f68e6c91d4293f699c22a3916543094bb903d9e8f459ff3cedd2a64fd8e243556b77d6e040d46d557b9de99cac2e041cf73193e772700931cee73d073a1e6d3e84b682a98141958fb057b35b1ae6dd967cc95313a89c136929cf9ca626faf7428970f8525f17c2fe8277893576109ca092f1a2d4608623cb46b24b95651deb4bc1d0c145a2fff98c3b25f3928a5747217fd1079260d6443f6cb7d33bbf31504075fb64e812a04420228b7ada1c60e8038c930ab571337bade406bbfffbdb2f08ed1c69a577a3aaa27ecea576f5d6862d015c33a55b45d2fdf7c88b4be3c58f8d715959e398af34fb9819fdccdd5f2a8726570bcae6b55017ea25cc863d9778b649dabb093e6de811b89209459ca3dbf942a9198dda2bfde408440517d2f8f36bbcc817813184d0cd25615149f94ca16b9f7de554fe4ee24a984ebe686a910694134bf6b2399df41729af5d41bdff84c583f9f8881bc70632e16a7fe0cd0abc1a978ade041e605ad80aa4b693b0668def3745d992f93d72852cc1d1e7c20a1ae38dae5adfa7740cf61167e3a99a29c3d1038a10d860592c29c17b3be512392ad840deefab9e82125b86216cea43f02f542ef026c418c33e08e8bf46428541f3e1f74327d0c93172edb1f9dabd7362d75e029ea2bde822af09e9b57867e3c77de7f90589b6f02a3696d918b38cf127c5d8c5bd0c2a9a1f88130b865cbaf476d1d08f4b9dc6dd15663d48a582be86e801abc074ed75f461d010985a77a480f3f686013dec66579908ca44c9ccbbfa4d91bd3beccc05bf918fe7d658538e4ee9f4ef9705fdff255e262416ac1bea15fd7ff87e4c3142c256ce800ea977de27fed4f599c858fa100dc7350675f6b59ea1d343d0bda494c75994c387746bfed3da9d7f4eb186bde04ef4e45b4de6835fe093857b67ae639441e9988be2b8541a265774ffe50eb25dc8b4195f5b72bd1e63c9a8c571d617f3b7d5e7601be54ac48a0abef48f78404e240fbc58c822c9a4d17c93f704a518a96361984f467a4698adbf4475d54dce7d090db68fbb7e10b9d3b52e5847a2cf81ec9493a08cffb25f387eeecadf14c6b020b7ed4c5d0ffa24117b61326355a242fb77c09b14fdf5e1d24da43ad6558fb011144ad7d55cf0af32d614cb7f46fab33710078807fc77e624364e0ee2999145832cb5774ced5820dfce2f6dc4fe409e496951ae8c82a036d640d48f2a6634361e081775ea4b9b40bf6c9a5e5a04dac9d88a8456cc19d8988f731e02d747e04d8baf5619d6fd22d77bb73ee668e032fc8d798ac8ee4887d6f7d815b210c1fd5072295cab398b54adbab8014f161bae011040494c1b9815b6b7769fe6fe5ef3087a7f0f733a7e98892575ccdf8e3cb89f08e7ab2a7b8fea017756a5e5c9a52a3d4cb859b9025d583563f888e0f5cbb79d1d7497a935b76e7ede7e10f8981e0bb790dc21c4b8b0fb771d491b98765013c4f8f1f41272980af795f8c6679352fc3dedf44fdd8500e918fb6e6f50365433dc4165acad59b8243244ccb17ae4c866990b07ca4c91d389e0a4716a4f605f81ad9fd9a6c213a126f99200b879b008b291931d7c5903b44596c159f6df1af764febb54ca99c7db7612279ec2ab229b46ee2d3e4c4c04288404f92ffa468ca644983dde007a9eec7e45acadb9595f088c778073226cbbb9aff0f5fa5dcde0f38a44cc7f30acc05ea45cc93684cb92d7eaf635c3e60251ee2c235dc209bc3b669cc81040427854b9521d25400b49e191ca31f3378056ed4f6465d890e55bc788e3ecb3281e268283ef5269d3361b74bd93f263d6d9b0b865bf7d0e6bd9f1ace0c77a5a40adfe7446e3c13cf7ed8874e3adff2da8d758dab7a635a85bcdc812f7b138af8fd5474f89953347b518d9098c8020f8b563957ace7f534e68a926205307f05a1d7f4b3ed56f6f32149f575a3f741f6c0666b1c030b3a0a79b5554fe7e326803f2945067b1d83fa41d6a479084f1c332a2c6f2d567abe45cfbba9ad5009b695117fa9ff2a5386945d761f4d2e35fd3f2916da1e1fbcee71490be3fcd5fa9baec939b800839f8b6be4a6da549e5261853dc41050b72837078634a8d0d25c3257d6e5d3ad1f67eeeb77e74a11d11ae5afe8a2c687c563449307b47cabed95370acb02a17746333d9d77c5f3175ef5f609ba315105c2e4838e3e19b3f0704c0642062e95d19097f3ec74b179d7908a2f4d130e346d2832706399b3034112d72c9828c8255ea6ecbe72ff3832d53e3dddc4837805206dc397bdcb3ecf103dcd1677934dc470c1c7d9ab57d8a2928097ae1a9c3d37c21c1e55e7130b9bd069a4505ae64e17baa9bff2004f016d82300dfcb9cd9c40c4bba9679a31b7ee242ed366dc8237838ea71b741c2540e8369527662c8833b49ab50b192177b23a6de600c65707a89c8f4280fc498b159722586a56ed6c8207d6a0a9f7278588f5203782fb64e6ffd71f1486d732d10e1ed7d25d6b66db15beeaf71c8e16cbbac2dd8bf0728090dba7c09573b142a788d3c99b670033644d5e4a30b94a69bab618186bcfd824a59a93163dfe07036f245a6a2c1db1dd98b74a96e636c8baf30969434f7778eb85db2d72867c44ffa85f174c0cf7eccfd8e218437feb6564d5233b00bf9de12fc20beb77f784f791d397aef1a67c3d84a54c5bc2666dbd01f1a211b33499bd7bdaab31a9199e9b54816c65cd91111086ae5469a652244c1cd8f461dd36f14a5a4047b468652facc2325be062455d12502498e6619ba58f1ffb98b0013f4b3435935fc84852bea87556d4a3424bc69f7bd8883686db67e275ca1d80a1c5fdf7b8345201bb6ad21ac87f6532d01cd424640ab0fe7879f202d8c4e16851638ff13ca3dcd55425f080360c9bf3ae211c4da36ba192d8ffda5c938c82bb729087dd4d824ed7851c9055689ed78a3ef0e577b45bb8880ae5675c4081801e97b55c086520267cd0a74816ba96a64b0524e64f015b846290b34f8e5a3457f6237aa30f1e3df239c96e7e50b69496da9305951024fb83a6fd01e96f6b2578c6c838c35dc31c4092d1daa97fe71917ad5b4b588799bc44c9c229db7bddc57124d87853711e4b801c7c646010c684a727d03ec6f1da0e364f72b38c304ca4cf84e6d1c9e56a5c4f3b3b94289fdf77d3fe9488670b5071d6ac713772291233e26b75adad2741cefc73a1f269998c531c861a909f20b777a465502e23c2c903683d078453b33f04165a2207b98a67b6ef52d4eff5de59903e1e91f02799fb93af9e0efe7425ac9c2b533e3c8eeefc03cae9460ef180c15bf21ca925e42b145556f31e7484db3517ba0379195023b3da4dbdf07628d4892b7ef42847efd29dd8cce0987eec6042d730cf4516b3e5299ad64576adf2360b8f134971deb14d028e9fcb1f763131608b2e3b34cd009fc7d603141b2ee421e3177d612842ced6ecf73e271602f9eb188410bbca94fcb0091c32be806175248a251bffbe2c9f2cb79326890ead8cd9c55276e57916ded277ce138938fe3bba7b685d59a5e4b89aecf2f7758bce80aa1186cf2cc2cb4d539e7bf418975d9e603131d023621391ce07871f50fffe7bc8679198162a1abecfe79672f13df82392461202c19521b122a1d00ccfeda5b4a141f35026319da9a3ddbe0e879f5641dd149973d891a7ad35266e5e26d76ce1e13b3c85c15bbca48c0b4325603e109fbd472891ccfa1dcc720fa2721a4fac79f4bdcdb79c1b0025c4dad6660f9c8f939f386feb1330ecc565e82ce6fea8fcf3584437440ae1f0a40ad6e82eda2d5ba41f72affe4fc89cfe8d2a5e3b6895d6d4885909e9926316b5aa89e91e7472dd679a708929d743c6fe5450c6dddc78b2940176a5e6c6f0eac1405e5983530fbd54bcdc8c2c4e14d33b5805f74cced428b860279bea1d2dd55d58eeda1bfa5653d1e2f1294418ce4a3c04845016b42a91c800e66c52197c7ef04095bb36dee939859978c12fcbd2a486e68661aa210e9639702d97bd206f3010b3fdad72752ae6d66cbe143debc46a928a66bca599d29e833a879e99d67891351f81014d51ade45ac93b72fcdd0614f54ccfc1678339234bdc6ef166a01b3ad3efba5725f8f4aa793b9b7dfb242a3c05ca0c008e7184cce9b25e20b221d97583a1242f9adf61b1b8303885a765a3386a6eb60a78e947e3e378dfbceab035d9bad038fb2a79a7829e43bd2a8ff603a299c7483fb55f1500df8c6e269effb2effff9733a436c28a5a1e273fd2379cdf2fa405d20d2575ebc245973ee3d54d320b9896d7d740b57935999075df05564b222864f5e4e46a77e588c9b84544409047e1c82254aebc6c43be3d1cd750d5a5898f5a93887c161bff2824f796261d713b40f5bd22691f8b0af3f8ddc3026216ed41af5402d3c200978d70a4de622cfc701ee44f495826ff14a18760aa0245c6d5a62be259d3b54e351f756626e0b55a6de45e81d26219f0e931b34c9438c6dcc92696e29563392c6146fbe6758800b2baf82bfbc4713f850f094449898c2d815129b7ffbf6a94c2a46ac9cbd342552de0c41364276ce1e71093020192e6c1dcf61757dfded20f3985f3a8be48f6fbf366aede64043a473e7436b519b62ecb163f583e2afa82f2b98d496067dd8c3b2bd42053a562c5b9b1c159243cfe4c9356b55434891c62856942d4b96d99ec5dfdb3813bcc49f47f6881661810702861c5de7301a34a5a10722efc7b7985fea99289395e84c1afe08c3bc4593d17ab7d8b451e6c228e52dafcd92a6d32a7ab6612e1b08473d3de254578dbaf6cf8bb2ecf6fbb3fabf0322c2ecac4584109d9dea5404d7541866a97babf13e2451d41beb9e6b440e977e24e308934044db3715771307af897e3397b1498d4b96f8d267372316f38812b4a882b9ee039ffab5c1aa1389fd71df0341c7a8b86fd9350509622d856ee1e145322479232bffffb806f5be122d87ab743c115219176586fa96ef063cf2c663be363abeb905df4abc79dc7b16cc456404fb10de15dec67f11845055b44b801a7e394803464dd86c118ee0f32e5625b913e358954522767de846189481c5b98603cfdedf215055e475aa858ecf57c2fb4fa95b100d9ee013ed70ba3b0bfddd36fd4e61baf0b9e24447714cd6605d87ab16919ae6f580bdd1af88b7b1d950659db959731f2ae6f80c1567a93287b40e58e7509a8293944a279cf293a16069ed3ac66575844664218c5df22d5bac179175505acc6b4e262f864442d08247a6ce8eb2e70b82c9bdd9758fa53b9a53d4eb90e004b319abd2d89e23fde0ccd5939419fd7287832b509a3828f576770598673bf502e1163306cfafba8866f9c0bcd85d048c8c1de1c8ee44c867408a37ce8ec72dc9d8d95a5e9f6b7676b5816f8f05d866997bab9383404bdc7f3c4c60d3ecd2e8ce0cdba836a231f64d5f0c5886a71ca22df8c4a72c3a8de3b1cc262764ebdfc483efa5932b8293a880e5f30240268a35be65e1930027ab5c8362bfe1ee165e3f8013cfb1a9bb111b95dccdf3282eb1afcf659afdbba224d578b26236dbe6deb846fba27a3da63aae0095f5b1cb0a136ed55a493dcb348abd161dc58cbaf7c1cd4d19d65353fe60fe65b422b485433ff164b694d99b593d91c017525a07a3a7fd16e0c3d3890e348b19b9ad72038487d6022cd667c88abde22b3181254e8511b619030381496015b2b1192e80a2389b9b120fa65ecf339c2c9beeda84fc166f86d7d31dd3119e9523b044fe570dc9dbaf38f18d251c0e58dfb6c1d6efacd241fde7e36b5f7e14234c8befc56b92c2e880cb54e3612b556489f03d0edbbd330979adb6747cfb5b50abc85bfc34ddbe12ce6dbc518999b35fb9dcc2dabfb9d35688bdced1b1f5eeadbfea2c0b594b160ad6748a5004d3929acdd0f5d3223f1d99b98c9f0b950a588af765d28b4f6765313794615769659db654614880a9998c437a8e997aacb50388f0cfd1f46dbf16167031b3d03dcc1f22dc222d4b9c75a9f44a5850b75f727a181a8ccccf5abeb33b0ec10462e873a170d39826cc913fe12cb76e574a23bf46c9032105848ce2c71f61e6d5880ff8cf20b917d76c2e74ec4d20351f9b9017d40c19212ebc7ac7cc241807a9a80ad7f2a32b3591b2aaa105e643411c243b08bc61eb01aabfbada3ce9afa7f35b6f7db6887875e828bc40d8786f16cf8c8afe6a5ae746fc36b3a683e0874c351aa46675314f5d6d46c9d0de84222acc3ce68568679c75b59a0b994ba94d68f14e503ec94e0e60738569dd8299faf174adf42a311888f24962094efe945082ba9ee9432d2f3403ad7d02c35f1a680f6b682a594ede2b613a17531417423f3df364d6301b656edb8d862b2ede85d7d902e40f9f3c38f2270a326fa5202367df3e48bd621e810d3c6649497c8b7ce8f2fdb9fa7863a98bd83c3bc55ea3c878faeda2f57590f29dcafa3ef438e06019c19e5291516fb046d932abeacd0ca1d125941c14d73d3aaefb9bcfa1e077cfc8d977366ac6aaddb1ceaffb466cd5300ec3c40c92035de9af32ed83d91fbc2c94bf1adddd44cf926b1ce6b27eba97f39079f00d03768d501d2541e4102318070bd6fbc16f68287ec1488969ea32cf8cf49caa85dfcd463e77374b78dda725df7ca59c89978d5fe352d60a7a1f61d63ca9c0461f9d6402e55bed5caaa828601685cf6f8efc40d0709e49dc6b84c466b33e797532b2d75de529bc1801e603515ca5a8f759f40f2497121891d6c0d6db61112c9a57b6a3c1ce7f27e0173de474126ab6c6731564b6d74cc6ad144a15bec6c04e38071f35b901bab55743063832c8339d5f52d6de21a1bcd890dc970d8b64ca72c0b96319ae1f6ae8e01de56b27fe9eb12471cec7df96d0c2ef781e3acbcbae2ee6f718cc3b780e371d204219ce161a96a86863de5b17271a1b7f6609ea5bd9d6fd38b6d9cbcc233460c2a2b09fbf15b27daf1c7e2eb32e52976b05077195ec0f9606a3aef96c38454dad9dcc175a4e98f6ae7f23c4fb64e0f5c361cffc2a434d23d985d82ed8bc0e462979c8bf67f3ceb5fef26ba8405969c900f2afe4597df42949d3c1d6a23cd3eccefd331268c3a82e092cb253327a3153bc6e43c4d3faa938aff418ab49295aa4166e979aed2cc9e1656494503255fc584e0b18080a57d0b4948d29074e0fe70e986462c3659db8529c609e29d06b0f394e7f89486d041f4f9ff59f65216f2d7ebd65312652a4d80406771c4a8d280e69263233e08c8dc94c1ad3d85f53b58286fde76f2e44c0cd783c3eab2cd91b6e7a7da9947ae963834cad9e605065717ac9f2718955ac7fed21b61dd76b44c3a3efbd6c2771f413c1b3c0bbc3e2c7319a8a138a2c470a40db930c9b0d6040bf433b5de069504d1cf933ecc27f7109545679d997a45ceea20d3e984cd9b66d4cc0efe7bcd6b044fdbe2f8a28ffa5ac88330bcd30ae01ba11e696f199a8d81b1aa16fd337fbfc8c2475193185c0db111bb4a256db95f00d1f1c3ea108173fea97694db91845af732fb2837b3f6f9bd7ad5fe02efee882483802981f2e81684c418d0bf1a44043aa7deaf0bfdc585270aba9478e2132530bfb3e35c45393fbc0b7812d2582884392ada2e387d327b97c95054b1cd8ffccb8b7238a494dbb44d857ea23bd296a49bc2d6ece5bba3a1b4c08085d538cad69ef1a5728164363ee13b13c72310f72a0978bb323b4081c127f633710bab2c7a50f834d71a3fb2a41d331dcbb29bb4df2a536f48629335a197734f5e7caf1db28aa807b098acb7b0ab7785f40ffa338ba75bdb76813c250aad40bd9550cb0544f40a07442234ad28330f348b63b5def62798e704c1c4bbc31164665eae884cf935251adde15dfcd55c0111d7d5551ce753137c3949b25e966ae73100be6d5a99f60229c1fdb20c7fcf5703228e615428d3d3805e428e754961d205c5aa0297ecdea71d399db846ed3419f4b2b661f07f4ee0ddbbd3e16aa59d2cccf397cf6cb9961edc8de9f910e9324dcbd174dd57b56c4379982531a472c7fd6dd3af5d3fcac56f50050afcd33971fd70c5f05ef192d6033e3d5f098b78864ed0ad1a3379e514a05fe92849f8a69a30cad6536b26dd342812f1aaee877e8326ddc900d983d32bbbf3806a69e5f855efc34ec58d5e602dbbdffe2e6a004e658d7c6e88d8c35cb1c7f313f9e304f7494142736d4b01e16ac28caa12045eaed58b95e6dab7a3474fcd47eafd3fbc6b1f2e308f742d77299348013e7f4509677b2910771ffe8a5eacd4d74d9d06741b7ebe73e801bb28004f5226019cb36a41fe6ed56a7f36e06771e48b8401bf96d00ffaf4c63d7e7d2d46eae33d92d8e7030763cc0721e60c2b45054bd652f289527ae99b7350fddc7a21172038883ce9773d0ede952e967872d140ff8db827b5696693513661c0aead88e2c53ca765d9634979f15ecdce8b04bc9c8fef5ae782dd7b01fc5698505c8f2251ba8f16dd1d90d2aceea82717ada8af22e34561b95875623a851c1e344ce8986fe779fe2c1fc681adbebc64f8462852d9e3d6f4269ffac346d5d01bf4e8809141344487d845ccfe8647e2abfabe4a4cc978ec3cb5bf35452ed3bab619971eb6d18a36d86bf96cf03f736124a37ed746fa88cd61ee20eb91f96621182ac08caf26cf991a6da26cffde2983f87eec96e775fcc28a592ae74faf784f69afcd902348edb37464a795d46d518e4f107151d841bd13df7f46f02659f08ad03125f3bb40cacd0fda72af17f3d2cb50e376cec066b20889e7dacdbefeb51b7537307c1e15502e13566a8270799682247e61d648edc2e9b0195047c0a6b14a814956f5f4cf +Output = 6e58b74ae43f2f4b4c010b5a7fa22e79b11e7441dc0a5cb5c6ae53fd67804ae5 + +Len = 70136 +Msg = 7b4eb2e072d9ff6cb793765b2ea0389a23ec1116de6faa2178b00018ed8814427129e5fc085e9b1351150572a21a45fd5a25cabc73177f3c57814232f566986213429fbfe64a44d4e0f6b562c9bd1a4b111f80ae65e9155480b59b4b44b017d009a0c973352561750c3e7075ca101d4befe31935db6ed5319a54f2a901eef955fa4b4c5e1c755cbf7ff61df1ce9bb7c79d787f97fd2c259a4e672e9555a9a5b98f4c0ec8c4c49c7ade26a41ffce75085c3e6981cf4ad6e5844f43957686785c46faaf9fb5499896ed4d4ed477d7b514f08364e0ee87919342306fa3761b3003e426df43ef57d8b62070adfb178df20eb146f87b300168cf394a2597d68127eeeb29ee6d8cff70a201fcf64a4169c272190992d55650e31603ed23e70a70e679d6543b912098f6e6ec52c636a7f39cdbb24bd273a3fe96f42ca9d9159432e241303675434cccd1f15a127c549da3e797f77e25daab52dad60df0c3a8067fa1b18350f9f863f3a86dd5acb708a4f3495373210b7efef6455832625222d39fbb574a345824f8b5d098d981d4d7408a288a9fc4f1d501615ce7346f22fa8e1b85aeef410e5d9d7be11ef052744512a10ba9e7ea8771452c980f8e87b4a3888ba7350d079b06a4ce607c947f03e67e00693dd6022ad84ca07d3dab4c75c2756876660e186cb4b125c51e406802100500d7b3049c6a7e8a7572fe051de4bbb72a99de7cc411ec450a85908ebe0d762a2acda5de19b4e881041fcd468c8013d05a87eac3cb2921c2e5385fc9d1746d5ff6c182dd1a988ab2e4ea27ca08d64f4360a7379d7e00d9dd5e43f8ac52d58a38fd49d68c1f83e9a290589a0a2365e2a2e59e31445d3788d6de3ee780b2bf312796cd1d65891599e28ef190a16cbd625141c36462f93bc351dd9f98f1618016ce6bc1d3e3f7bbffd5392bb81a252b32f11dcd3d73d29bfdd0e4dca978ffc69f7fd4de76a1ebe5affd378d5ccf1d5df8e4d20248f169c6bcd68c7c8581ddf13fce7a698209c6310eed029d1b4a95b418aef70903663f4a74c52cf5b9a69cae7c2cb4f99296170cb10712c150173edc16d20547f93cb395aa3f4eeeb241bc4cd93d2d1514d16f072afdf080b7bf692477d0755596ff7746e1b77abe0bfdad6adb523b3275363e8ed11424819e9db52bb04cdfa87928eadcafa038fa3334e076f71e87d8505ef62247ec171a915c935054899cc6fc439ea5688bf219a48205ffb0f46b8d2296365ff40840d22c569440e9294527acda035fa0fd4e92ec5f8e639d767eb758866fa669eb4a3ecc26386bc29e51410746a959ed56a6fc7747da51211739ed8eaa12841df79bc6fd45e04f857b69a9a8240132a23a73cce1b58a36c0491596217bbf7784cfadf12c202c4ab622c6d7ec0c9b58641b6d7a98331e831f9eaa57bd65d6ff32d60944056f8d0bb93711426f3ae859b77bdc8c274ae7d4738a6098bf02f999acad2645e56e8301232ad17f8e6968b4f0de59880b67a699809ec0efa2ed87c566a79d5d58b79ea968707ff5e602ace8b4a55ce4a103bb40ab4e43a315601200d567d710dbd540831d9a852bf281256387836f28a4b9a678780b8189630518ea8d705c06eb42191ca72b89b8307f52b3cddaf8ca72f3e89f6b78d2d928671cd103339496137878e48985e5f11c57b5681c1e9250984d0223e9f8e038e1e08e52bb242944c102e069594c228d32a4ddeed6e0b441812f73b4980e021f0c1bfdfe39e48299805bf0198ae0d7d30fd13cb6a2b3e723ca15cdafea4ae0f21373ec21f3d7291aedfe288392d67e790087425df3faa36ddf8a60a45521e568a482c96c7d9e953f4653ea1605bf7ed5b1119f533f3761863e07ed006d1587d92bc3264c2b8d5f7d4617c57f57ee617fae1aa43508fcba036218c36296a850ca05af733fa225d05b59943afe0df5bedd340ce151d5bd057be8377439765cd8b1eeb240b5661a906ffd73cb309c67ff84ff62d75829eaec463cee8ff360a5783733760f4bebce28219e10f6a597a7abfd6ca706a67a28c708ec98673efa04c7c070654f71a7a30ff6d7f63dcb64573cad1853ffcb4ad93e1a53dfaa6ab71d3fc4220a71b52e4ba07627be012096d92a2a6ef41345108eaa112f2eba050c3158d8c4d02694f42a921609c2f133b3b01cebfd01f1927fbbb383bb0026ac7df3ab64d540de7f7dc24d6cfa9f8e732f7e5d682f081b41ccd2b2c8a3fe70bf90d6900edfe6f9f33f954ac186be297d8e9694359170d0b19c864076566418bcd95caf1d413d199ece2612da1aa962a1459b29cab0c6e2907328e5036eeb8f32abe86136a5bdadc08e072e1d32dbca8cd8eeb69e0984a13cc54d09064a0f54afad1c5ee189d33707139af4f16befb1aedd13a3360834ad35276534e5742a0982416ae0844a3835d0d3541ffd323fb875b6ac7809295156f7fe03f12779c61e690d56aeb583373abc61e5079702565f7ffa1bbdbe09554f23dd9bb652c78de3b2656201fba16ab63823a0346578ce172c1bd3ec9b14dae6173aaefcdde9cc29fcee0f92ad414d28d2bd383edee201601890877d46e83ccc6099c04d4f5d1b31a70bd1d960cf4902fa82ff8f69fa9adab3fc88f837d005528e6f52202d9df59b5f433b3ebcc808f53e19689ead1ee4d79cb46ae5e478cf290f4fd70def28e5e77428be4af7b7e7400be525e4febb89f7115cafaee34ee4b051afe17f0a9a66769420dd76c80b7ea3f27aaa0b057cf4b9e069c9ebaadf0078f403e3fc064ee1f91dd00b5a945f3971704e577927cfbf8058403c04b1858ce364e060ed78c2f2bf9f9aea5ef31f923903d4c0a7fc2044eb078498927deef4a032d9eafbc8a3136a97f5dd0c5ac9337b2ba2782fe91b1f7a6cbb420d8687d21fdc34e48f7c4bce6a758565db31e877b8664be069851cb98ef638dade61dcafb2df95e0211a498e3fd6ae17541ef9e96132158bfd36a1adc942a1b5ad7649d8199b8150491918cd6b39f4540f888a03161da3ed53a4566689c07a84d35a7c05a4be6bd77fff36267cfdecce55f4f55f37978b96f524877e70fe17aae874df92f4b6c9c82e431e03d5b0ebc8dffad858562e10fb5a5dc15fff5a2daa656be11a89f33fa4ec6b5cf015e195e5f5e0bf78e24ff88d0ba6a07585731105d2961d06c5122210230e6f65ae1e6fa8406cf74b7c8b86ee81958169b3c7664fa88a0fd24692058c7a72c1ff1eb5dd8237f63c4a855f607244b0f0a70ad591ea5fbe26277ed17e6c5b5ef106d84663f654f2daf08d3a09dadd7f8ab7eb1c285880b90c50ee7ee1423e1979278b4e979720097fd7f4b9e76ab457ac06e5099e2c83f10ef905e8d2a0ab38c6db784cecc711a0775b7c4d8da451efc13e792c67d9020cba8a65bdc70a1b43769d4fbfd818a23e7e055463513a3e8e86a9280319e063529b7f8e5c22d116bfe4e77225fdfe7a59e0604d9a068ee2ea58e1721c38d520693e62d042aab81614ae347ffda30ad2794af6a86fe204e759b471d7e62919d1b6ffbeec0f9301a1c84f1ed9d57ba073231a32f543884ea47325c4c9df7f40ffd26bfe2221805032612401001bfc71b4ddda9fc4c36dceb2bd2974e886bfccf3321fab2316f7265075e985935f89d1100008b7974e07078aae3bec847a4f20645c77405f6e6be6845cec17040ec8412d3020f4dd61e87ba4bcd9a65e08c1edbbc7ff484776633336acc82fc2a81c6464f4bfe207ad96ad996f8f3ca5d0ac7771eb344d7bed517effebfa5a6fba1aad4fb431f9c66f762fc13cd91a2c5053601f6ca2aa5d31db3c3870ff015bc3377e45f533c67a462b54b4bb23b932167b4a2c92c6f96bc244fd88f232cf1751f76a004e11b293c00abefc510bb45781787822140db5383d433569d6521e42c4def2e7157858b34bb8e100950d762d2fdf7c8857035843013a6643a3c9694eba529b62e1b4234967aa4d5a0d8588f38014e9d7e2447d1c9cbf12aec1054a9b90e6e61c4971ace6a25376711120576b00bd22893c2d7e058e35dd13e4a24cc9f730456ba31d5feb6a38deee464a8bf4503cd924cb3ae5ce4433081b550cca5a3b934be98533a6e84deee91a2380712fcd18502315f94eb76d3b261db8b14dbd0c946c1e76413c6dbbda478d2f5ec15df5d43a1cb2e5035157b2d9a3763c6172b8b82862ecc26adc428f6ccfc031d73f58f4e96a189ace3c923e7535141a800bee73036f5f23ccc45072bb5a8ca62d24650f00a3bd66e9d9ab329b5b28b843f90c697f8c5401ccb69428c5a5fb285dbdb866f25227e5f0a91133be8e1ab207ba90e00f5241d905135c261e4a8234c35bb1b140eddea47d3b52b65136607445d12a9b3559df15e06b36df27a0c858188eef527eef481eea00fe3ef5fca09ba8cd27df83fb5254f94ea2c86451240ea7e7dfef0ecf0aa1b18a52420f3941749b1f17417dbf61f2ba0e2e8666d42bc50bd6f1cb63158cf98e381d442f84c9bb87478755752e748bad5a487db1924617aedcc39c3e5b4572baaabdd9b957bfcd07c6e6702cc1008c3d837f32b71419832b79d3c5d2e8daa9d15292574f3a8a25972db345e70fac81054a3129e9e20c73ec3e90dcd376930b5cb059614395bf51bfdc7c3b4672cee67eff1ce7ec8495867b8b8945b26d3513d754717c5901c5dddc63bfc4bd92ee49151280d111645b1753e12b94e245075fbbaf58fcd20744269753ec76ded8910562350b9a1b19b3c30ff0064f0586a04b94319e87510ea0c85b1d90c60cbc4dc7d0d72b974c1d35f60a0897d87eba8663db7ba0905890723fa2213b36d9c67afd0b694f5d26d7684ccccb6ec5c0492034fbfe1dac5b251ef8f71f4a4dc88fbf015c7c15505dd0b123d298e99b7ccb143b9039543fcb452d90e4684c8f5b6070915e7fec1543a1a717b5f196cdf6b8c8f422ade2cf4b692473d48cc05004f136198bf552106ac2b084e175f4e1e08ac4db1ddc47df3e198a2e620d344447aa76066f7cd5d645ac7417ef96925bacb97e7cfc3501e425cec53cf76a16e0a604c6e46366e5db66d7583d2ac3edbfcddd7c3648589f7295016c0c1f13f699a2889f30124410a440cbe3713d9e6562c66f44b38ca78f1efe59e538339b41f3cfbe7575f6a4d4a556029c309276a80928d74e5123b23f2de420d73dff708763801ed0228b09b0632913e907c3fd13f767be1fbbb7f94e33c90eb879bd34458d561235d249d312724c6850634c8237d1f58c2f4fc3fd3ad52f6bef980746fac5c4411ce1bda19937127878df86b6821d64ba0389b23e636689d10305683915a15d140bed40f5b3461ddcb8e92d0a913e37c022f60d2d768c6ad6894e5a7b3494831379618e3fdf03e10d96fc89eee3b8e14704115f5ae2ab34d4f8df489db633d8b7ebcaffe09b14ee73a9a637d3d811f3b72d68033716379a54c834dd0148f3c089e9a6109865edb8b75752b17a0cddd1891566b352afd5edee7deb62563b58cd01e96f6ac7ddf2b24126ae7111e0711d454299ca3e0dfab20a806f830d2be760a861a358ef51c86d99ae06116bf17039644b7db249cf1a7921864db98689042df5f8de758f6fc36d2943f5fcc8ce5fb87e768f260651b9c5dbe5e26062d1438762f57d4b1896a823888eeaadb8c5941cfc8a5a7004345d0a8225da3212a329ff881e0c442b44bb133fe570aecc85c1c956cd4c4ac3e578c9ccdca189266d3c18cda8f7fb381880cea7fe146a746d4d6015d5f0f0b5f391861460b4e00e9dde45bc4ceccabf809db8692f428b310abb53d22ac51c6add4bc1e158a0d14bc3a518cc60575d220b6662ec0f876b92ec7026e43255184300ec0fcc3ad1c76e6d05048699a40d10177f40b9055f960a61204bf4830d9eef1d06b22d7de45cd6f8928b733f6f650a335ce458a74795182720556ba37afacf70307b8d9844ec1604b2300ae815ff60fd63d0336bbbe33cad14b5b21a19c654b8ddae8520600fcc000874c62a3426c4c44876d1d938faf84161ff703d668c1f3582dd8c9ce2323978f9dc2d6c5685a6265f4acc665b56dba29c951ea3edb6af94a47b0c6437fe1eee0ad8b924d9a665a23cee8b997f91473f291935d41bd05644d7299d1cddbdbccdbffce1ea59e3b3b655b487f93214cb858bfe2e547d53d3d48f4bb73d401bc3968dab403333c7f0d12e5f59fbff5bf90469a6909b8ecb78b22163d33c0b72a3d6f8865c8613edbd814b217a1853f1303a16b4d51fcca1e56c520479afac6cde1d84f08f5966af6a5520ad50e4cc5f019527ab9457b3718a7185a032fe8f64f2c8b78c512398a797bb437576d7b50ffdb410fd36e9dfb4d85030b977af30e5527704ac5a8b4640b632280c6467ca8e7505672c353cbdd67f86e7d2b0383d88ad8700f303e6ec15564842c4a22b69551807aeab27c6ba70b0841f6e853011a9349710d2e5dcf68fe86c2840a8791dfe57493c1c872e71fe3be64bff5f1d39d1b825c8ee58c3f23afd1c5d02f00754d4a338a3d2cbca50e9721c0207b656329c8891ad8805326b8104e7358e012caa929c548a707e20f3bcf393b60a238188642689233253aecf0c804b5634647f8b92933b447806d8b70320fbec991f1597b3227abe9fdcaf99380fc743a88266746f384b564c0e4837368aa32a1711890d140cc4f412f8ab669df3c9626d03780172ec03547eecf5e0d1a137d316935245013616582e30389398ece046d4303a9f683f01b3933b78406f05089c1a2d17dc054edd4f543bbdbcd34b9a7570b114ba99a1b4f80b7225d26916b3c99447303e9aa7986e2743c15eb7a06662e50e9cff91a49b864a19b5135a66b800076a41e93be0c6291a10e9d5c08bc283839149baeac82402f19a7c8fad6593c4060eb368538ae5049f0b7dde885e3d7bfef191990f7cfce2749d02a3eca3c589f2bd0b388bf67385389c13b569a845a099a80b066a4374b96579ddfc9291cbb66ffdbfd64fb4002f795b42170eea6995e60d2c7fa5ac39dc26b964f639c024fdc03957ce19540977d3c16f6fc2a517c086c96c812c27aadf4ae44e2d4cbf4fb4b608598c63570dd2da57122c3f58deb4ee4541a7783646373472e01e35dfda7f93d34badd82d6bd4ff94c0d8df863ce77f19525f14689a7895fdd125afb223b2fc32848ec257c1f2a5f301f22dada0dccbadf5148b3f2627c1ed77fff4c6da0351aebacbcc56aec0700a4c04944fb909568bd064371a67a95aba6ae9bf9e5bc5369054c150ba70a2e043058ccdecd3f1a22b4acab29add91c2fd109f5a99278d1d8fc92bf9f3b63e7925c4f714f5803a2114eab4882106559d1e1f6d7057dbdf6915ae581282ede7ad2b10d0140a4c2765c126be225d60893ba5ddf07b4ad710cb9a6ac244f88622eedb6fa4358ba66df2d885541b907a91411cd2b4e5f2a7d597b695171bb52d94d0bf47e0140a1d523a939cf2ce7ac3022ffba4274aefdca26fd2a3b2d14942a1d53f102019f61f98afaac426d57cb8406acab8c41482d3fba6771d22304543de7ee37ec0c1e03b85e486917cab06f8f083f28717dd6c2c35fe2c77e1a319cfaf2044ea6ea658dfce5baf9b40c9b9d386fe1b959efffc5405b96b2a7d943734988bcbc96631b0aac6979e383fbbf5f6785b9e7ac606c3d9df7aabcb529e3e212ef3e0b263fe87fb030acafea5ec5bc0490f039d298c532c27b466d10d2b9ef3d70b3c2bd4576f6f0827ce653fe54bdf8d9ad38335fb1ad972f944c209c6ca5b253436ac23e6a7653a9110f25a4156829a8196a377dd8b4035ab9e14e4fa50959e0158a9ff36f08c3ec92b2c816afc780455c5947b9e352f146e0b400b20b251a5f52aabb292bb328922858a41dcbe2e5f79d8dc9dc7a8c46392f4e9f8e4700de1721537eab467f68e4fa88218011bf4107048d27ae446ceb7cce3694ab00a28b51ab0b504069746c2a31caa70928687abdbae1c7f7eaf9c857e6f446d1df140b55175d99af3c9b1cacf4a69e7eb9e57a61e711137f133bc5119f111cc88b5d446b8ecec1c166fb60b16ca56ea86b3c273bb2a5710e683bcbf420148057ad8520db38e8303e909c2183c04e7f4fe7776b9344264b6b9100c0469285d948ed9586ec3c324fee618745681929393bd59e2db0c51c085f35928e501ced8e61f2945de7c334849882c3b6a99fbf0533dbb755db5c0d10b2fcfa1b5ae7d2096b658a8f14f47738069a585a8d79974900a4ccca5c3183cb2c903f51ac1bbfb12ded7f03bbf882d4fe524f1b5ed03a6e6ad6e4767b6d05a1949669168ddf39ee71337ca124f6ddbe4952afe062cb2edd391a084080381cfab4b98154475bca28fddf885197171160af418090e393fdfd35173f10b2b94e3e529f8ef220b8f9c79a98acfb5b83a521f7c7cb15274f2e35267691ce5a1926d537f098d8611e4e331006ef87b9612168eb8d975677284aefd3de0662c07f29272b55a8ee51b452d527d259ddf9d90e9f513bec3b1a46d89205f8a7b52c14e19cf675c41c3aa38c13a7a4f2e66315f32df279d2ac5ad06086846c7bade600d59d5ffaf74a621285565723c3883e3a587a96ed52917def6b3218e18a33356a8d902f894660122ac30700f8d3acd473c5ee044273d2ccca800089ffdd30637a92df2ecdbb469213d08c6acb2a3b6be6c3f1061e3e588f8a27579e6f7b8ab65a6bf0246b5de42af4344f5d43d11b4cbbd9eb622ab9090e56e89f20d96c2b772fa02dd90e342222f575b6a108cf36bf1b9044e10deece90574c41d8e4b9f9ed24bafd155c49e9c1401d2bfdc32c720b2e6f644b6fe5905fb4daa38b3969de625e40c79ffda31f51fab4153b1cf1b97a1bfeb368faa535c1961b2e048084c11c08baf5409a4aae184ec0dc21ba25f2520bc59a005436a6ff25954a0a6013896448b0eec0db477c5f62cbe77846d005dc254d7fda25a0cc6088d26064811d208246ab1ae767a1736d5e5ca00767fad960921dcbbf16eb8e2ee85ad6db8caa6dbe2c33e17ce7607a8c6bfc6e98c6ac582679bde777ce20d3af6cb3163729c358601fceab49028d7802b131b9f10aee697503b639caf647852d3d678640ff6ec9af4906e014612f57185786eadbdcc6f497578f2b8036668bee82fe90bdb7b5a8f4d262e8a6ab4efe168580671ee43ee2d29fd024603587cd3b64fe9b78f8a0dd78e26a2bc789f2554465a99982c95d196f00028c339cb1335b0bf10e376b3651809fa7123ea32444e91c88e8cf342b82b5a4accac112eda5989e5e53c3b87fea5734a003d5a0ebb34fd5a5bdccccb105eeb35648d240420b3846ced1e486839144c7dd675229508abcb6897e423af68b6054886d2eceb84d842ac8f0617d4b2f8e81e7a77ee55ab179e7bb95fa2502fa55b0cba19c635753c473d4180446deaa7e894529217d1110ce91c368b936de3c13efa64ce6a7280540487ab1938944ec5c087f5703987d9002dc2a614a159137e238a2d6d244324c3fd24323d7ed86db70251e98ebdfa7175fef77e6746923d50cb345a829df7d0e0b38b6d7981bab610109a953a3f9968e2bf33261feda9dfcd88a1a28b2231235eaa35c339ebbbb6558dba8f2f19052deaf0fe439b11206968de2a6bf37b5f8a7253bbba0b074bfcebec4a4dc9e49e4ed336c14d655b6668a74e673d57e40374e03275d8798eebd8679ec247972ce53a5ff314aa0b271c6c0d5bb08d3516ad810ce90ca4e1cd2c074d17ab03134c7a7ed5a870eff8fe82d20f88ced1f76dbe2d7cc9d885f05c8cd801096d06caedbe9ac8e96e95bb5c6a392247fab23b53c5d8a477721201a77ee927c6a0d92a6b320cce185621cedb130fea2bcc946d835521185451dfb25882a925f1bee0be5f754349c7d02aafd51dd4cbb6ccfefa56dc854cf300257eca28a68ffd4fc3f334e8dcc06a54f6dad50b164b4b74588e68dc73a6c605a9b396e14fda5bbbd975760d47c6926d3cec753b52ed8c4b478613c57ada6fcac31d294d23798f8bb791bd6302c0b2716331105ef936ebca427df238195c32d81807fbbccff22b47e4e4558aac436d19f05550b6979bdc69bfd27ea4cd80c1a60f00a8b093e89178c7f9e8d492c304cf6ad59102bca0e0b23620338c15fc9ecd1e939ae91da16486f72ee1e154d41bfa391e6ba3b6ca9b3c3be39b5e61242ca5cd3d6c96cbd1170af91fdb2160db3522e1bc3b1a349d6e50479920ac5d9bedd8a16a787a3cdc2b6d24392f25555cc2f20b2ba9e6b47ddc96cfbd6df669d874ce21a758d3cf4704362ef7786d90ed67b01bd91299950058885accddbcf44e340ed4807864218653ee7ff7215aa1e176157a611f9374b984ad7f53ea70ab81be131062718ba23e7d0e7da4c47d16fd807acd402b74c1fdc36e83cf3eb1fdf765638bd9bebaefc3f21ece8cdc655e7609587af2c0ae1b61a7543eab24e14a33ec88ad62ca8258bb5587d91bc373e70f934719f569bfdf7992e6d684478f3ebb95eadb7a2f728b8909e233de24595f1e90cf10c4a12a8caa38aef1d7112c49e31412bcac57fbe6b1a1a64540896615179448f5ece16ea177eb1527000c48da6ec988c765de9ef8c99f5cb3ef4d2aa7af104d3fdab4fccc673ca1ecbbb3558ea338c562231dcc3035656dd636fa2785399764652a96655c0cafed995680e2c524d4513380a0143b89966242c40aed4c4b8bf6fc38f038eebcb740d35d0f612c684ea4a1fb0007694aa4c27ff319dc5b5980ad6b927cd7d30be554115bb96102e1ea4843feb80657dd0316e450817540e7f7d049d376d2c78eac8fe9cf1963172649a48008329165c543d82678ec688b7b64080d5888aa3a998f6cb32399d7a7b9ef51eca3fa5931a7e97eacb8b4f6999857cd2cbe2cde9ac1006303f5c53f52f14dc8e05e899e49d96682edbc75dff9a335983e50cde056a9a21b52b2361a9770d78211946b00fcfe4d7d7fe099653a30afe1a8dd06402ca7e6fe35f536f9e3cd3f05e6e21901e97b00d6c9b1aa26c9d50941f2af408e5b303174141b724dd64ac6dce6c41e118dc4132751cc32a526e4e421b234171b80f7242583a16296dd8e117f77c6e4c0688e06d7ae8cad60e004c3195e27f4783c51317aeb337255681b91563046f78ef82d5e60467f74da739928815ce76344cbd2ebfcd12e3c1a1467e909a6e0d0fdbb268c69a01143825036770234fedde1ddf0b613dc0e2a5550e76af222010b6d300e135c51ee73e9145151148cdaeedfd13f2268426fc787ac3eb9b85844017dd54875a0c263a08f2e7e2920bb07f0af5412a362cabf9e3194c237b4b0064da0496a35ef781d33d50d0171cf56129dd0b51fcb8bdb6a08d38916778fafe46a74dae7d680e977a86b3eafbd68d46740d492bb0d4bdb1ba1fe27afeba1ce5ac24c2845da1dad1f98b241cd8e95bc82743b7b78eb4b6030f401cef3268381d5ffc6a018b31e29517f3aa4ef47ce74f0c265cdedd7d2f146799f0d849abd70e27d54d0b4e3fae4c9b674e6899b8ba44e95f4086e75ab14c8ad1651d8caa8020cb58748bf0f3c75f4e8e17530dc55b0d87956b98f271c313409183a6438ebbbb152ce66ab776b434f8110df598ca5214ae71e6fd47eaedd15081535bb67e1047cbf9ab8eecf0fd356197383784ef28c0259ab89b2eeeb7ee8348dc252ca3082cb669cce1d6882bc950c9a101175e6478b6b9e95ceea5aad2a18f27eaef242ad29e22504abf67c5578e4f4f3c9b3c8ea627768227d1364de572fd3a94452affa14bcc3fb0edb55349e4d04ace56b42eb1417889e31dc92890bd3b1f0977dd0e028410a2fda9995e0617f49ba191ebcd01cc68097a1b88c4394cf0de33cc64df5b129680183b3b6df6f264499c930cf2fe90ed07d31399a84ae5c57df88ee8fa15be05e1e9ebc408813cc85ca6a63d261055b08dd64d245c29516206420390e8994e05cd58015cb70fbcc7dda910a6f09fe259a26b10526940586e80f87585304e8a404d4dc42a03083b0ad38c1a71d813008f4f7aa64a56f5c192f4022aee5a9b3c5b68b07d5773d4813946370cc366d477fa9beb5535abb2567569486bf4eeea2a012769750a90db56fb3e912ec7234a0f438ea6663bf1deddc0e7b17fbf75a21dd89060f16ce08682f8c484c7a296dd8f1230942183afe01f1a7727b076772add88ae7e3ca5ed3bccd9dff8217f48f6c10e8a9bcd366d22e42c1f9244427aec32ba86a99ddc3f63fe4698d38284bffb6be0a3a4b37bb40bf39de9d8844a084fe41622ca5b3a5c67dee6f6fe33d98556563083981c7b0a031616dde2b8b7a8bbba4389cabfe6cead356201617ca7226d4aa5335d4e5efa72133f029828b0e3987eeac38f11081d9fca61c1e4a4161caa0fe7badd924b09c0b3bf60e21b5e3f4ff6b2d90399cacfa4 +Output = edca6f266fd8dc28dadc3455e3f9c5f934434d58b94b3e7f3ed768aa6a16bde4 + +Len = 71232 +Msg = a04ec35a5fe0dcdea8c72745dd293b9970042f6452d0b073af6052dad80a24398107873d2c1c4069e57acb1630e4f2b8400f9f64694eef8fd86f871982df2b8a5a158d9bc72e62f855d5bb44ab66935dbd53a4e242c680f36988dc38c7212f2594417c7c185e6b13609f9fd735f944114f98e7e8c5808b27c874f941911657939851fce807f483426e9f1ed8b8e32d5b5ea5107ddac339b45ffb853bc708cc5bcd0db7e87c37d10ee79ee14e1b6d78c35243c6aa69d9b12194e4292f513db5059a3f52835f707efe3364904146df4ad1933ab1765a081cf6d1f98c2417fe3b1969ad78c298e8b19bbab9d2b92081ce0e89527ae99599a2bc7d00572200928620a120cfab0fe4936be5654fbf939a29019c52c90b03d46afaffc23132f643bda2a960ff49adaf4cf81a2fb05a87748633350445e58a009d38c107c35ae1570925eb35b1a1589003cac2e19d93e2550b2aba2e977e136662ff2a96b4a4a7179133ce678dbdf9cee1674641bd718d86e070959967de874fe2d5a239ad1831cb7e53babd3aa479b20d590c18b9fc704f2e8d2c0d5c0ecc01454591b656bd67bbf70e1701615ebe84af287e2d383c73f71d07e9521e15ccc5b2d45fd6569b312e25ea4ef9a9f4b28cf15a034ae33a7fc8d468332f56fb6de2510c756156ba786e2f71c56ebb6d3c11f979023562fd7a087c37716dacc999a24b74391ffd2322c13e2be5273ed1435def0de5b75c8d4e003cfd0dd4c786374bc89414d8f4dd19707a9f16eedb28b1b6fc9c13987af3e1f83d416e2c503a2f26eff56f53e2f043c20a55c1893a7b6d6548b0f4a063361d38a68bfc3deeed697be91eb05970658a0117d54cc102d15fb1fad0f097bf5ee807a0641fcf4aa8cc92de9741b24643d573c8a8215edb336fe43a856f4438742caf53523fa90b7242b2f5e988260b920b624655a6286fa885453255d970747ed076e6dfc494da54b324569bef7d675a1614b86445e76338891b07cb96e31b87bca5829316585f5505312a35dc7e04a4ddd2475d656262eb63afe46c0e65d694d8834ef59dbd417d211f9940b9f2877748e31bc96d6212cafb49efc2aabe4daf0c5a738dc28b29d4ef36ca43eda19bdc3f915b30c7af1bdc39305054d0b527df407018e3eb89be6357c0e6c6e053e6daaa223018da11262a06ae30aae9140c2d5c0f66808280a93142031451fad0107971dfc10b0e50dbba4809b74d5ea1a69f487d85ebed38914696487d6da3dfc2c17d103790cb33e196e98a0cc495259a40ec029cac96791fab3dd748a1434aa4bbb4fdb9307983e1c6cf795897f867931530e8d34ce30bfb671df89e7642d75d6effed707180088250e41ec24fee313728fd7553523eb5cc8220f3a773084f96e3472a83de498a6d3e0ec07373de492e8039f344460e403a052d0f8a20fd79f62072fa1bfc3ad1499837a9928b32782125cea8ceb1ba75eff72b9670058a1f262f69a66055bca4bf64461f481f5186b820a2dd1719ac19906004ce80ab1507cd181575797038cd77ac236bbdb8a33b9a789fd94a094bf7c8499f00e39908fa94e15db18fd514121877b6d518dd905f7035ace68d06ffd63cb9e473c057c9c0239428a0c90dba3c4bcee7a4821780b9e160b04a089a307d97b8bb71406ec2212138608c509f9013b7b89e2222eddb1296ff954ee54c46b57f4e0c408b6559e536d6ecbb4b13005e053dc39521e70932361d423a49a4a9469c84bf29c8c4f8d30b75b476e3f270e7dc653e46a68d72e16abf9f565e2bc2f89861bc74201406b5481da00440c24a74e539f77dda687fe7daef94e94c68f79318edeb69badbeb5195d698af890ef5cec7c0d682e4ff960b2db4093d3be4b1dec7313550bfa40e6f98a984bde75bd9bd2b02c49cedda21160c17e698522559a24a34807056f4d9d9fc9d4c7781335e08b908a7141d8286d11e1e1343b9b555a74cffb612a855b35667bbd825801dec7918d969329b7e2f010cd37886991c0fb57398bd7edc4e04ad820a100f0ba2ebd6f17df03e905682717d3efea81ae0ed9467097ffc1b6835a7f492dd7c4b48c3e8ebfd26802393e9e81a668bf3638b590bd15ae2d48d29ac0c655b25b6679adc77af60f1407dbccb2d8b5308ad9da5bae45991d04d591bd2a47f6ed203881d9f4be4ae3bc5c5598f09770d5e1fefb478e5a6b830b0a8c60f36e7d2caacd65b722b33f0eb5824f39f44869d73918242fbd761d6e945a1b1cc8c488ff7f878dbbee0442de941c21162a6610a314b7dd6aa8131f4e5546d646f6c48ae3f319725ec33be6d1dc8c63b40f7b05c7f9409f9efadbf190b253367629f8f368c9d5ac262e94ab86f3559f9a1fe1a9b44b64e313121b34d43001c430bedc62fc586ea398acd8f17c7cfa2d4ed8448d06af77309d9a6b498752c507fd41d95a1d2326e12cba636910ddfca538c51e203d8a0a1064d046a0389f2f6a324f9a3959bea0fd68c3be62f29adf8ffe72d8f3a76f8ffb2f6037e95689a36376247991207f5f50c375548f80381555e64e0f77f2c49b6943c6b9857f86c39c4f8d01e21009d473c33bc03f483a309fa6c31c3d9e2d9ed3488035f4f22af27d24d5cdbc96e282eeee838c02b925a3b5b68e99b5180f2cd1b40947c87cfad28e7c9b3781237dfd1abbe9127a616f01307bed026edeeda7ed0cee69607e5ac628dd49c9c04440a59fa1d8edf6cf8abba88d8ae0db714d927db98c156d54ef5004bd6e0efa87df1ed646df9918521d458661c4bf7b7db39f0c508ed64fbf0d028a937471b05cadbb6701698e4fa78b21427f46f8df42940021584316781b58403305f99c5231412dba6803481d2e48f1755c7e17776e83885537657086d835bb867b79e970b41dc858e13940f154fb18977fc6a5c45fe67a0084525eec9449b6fd7a51e39c43b82dcb1388237cba0619116fdd2e56a55167cbb5964c19ddf8d520692e05356e84b079655c4a1fdbfe757b931e1b9ecd38c41f41adb2bef3c79867ee7ad8cca32812fc5d423f4b3938b04e8005e81d36213163bf054d2c943a736c70a4d8c27006a7bc71b67d9f30695c02cd213e427e9f1231943955e32dc5e88676588fc75395014239458f7c7ff4cb20b0fc68bf14f6f91157b687833efe8a4e85e2684bdc7792161a5bdf73667fa030f1f401d397ed588b80093c8d2648bb3d25feecb06912ecb0ab860804824e5dac06b4943055d6b2f883adef5192390ddabcfa97a587fb63aa534073b061f5560a559a9a55fd478af0f9213a810143f49fd161f38bb795b95ba817bcf774094bd465227ea4ecb4630d56ef888be20df204f9c18ae38676305d10784e5a470e9182bbf8cbadb2a1bd96137573e2b2dba892ac85c84d63117b1732de92593959b99dd06a0bf0cd940d23b56f6715f2416ad1504b2619ec0bfc2275d74364e98f36ae3912b9eebc1fd44eb319dca63ee3cb498b8e4ed96faa35f76ffebc1dd6239b0c5c6f50280c89957f93216f03e7174c53b4ab8d1c8c80ab1e779176d46dab5960c0fc591d2d75e32eec0288df89705088723f7b53c133edf0234c0e393e7ae413fd365f3e9d792fe52429a469a4739a603ab6940f9c185124f98aecbcc736edce6799bd1cdae7ee2ab2235c52a6956c7384ad51b07bb2872570ea8ccf7653b8d896b30d387466a0783c7c1b2b3e4a592ac6904ee6eea6e26a1fc788e1ea55e7cb110eca01d859e94619906b43aa26e30e96ebf603635a157b5cbe4ba481a1fd3e5d096e19a5561b2ce00cb74c98af9c977c3cc196883072c1ce4b5f87eaec5b7ae13f83d039dfd895164da9a67848d84dccef3c20cbeeace5dadb2efc7489a529341d85d6245b840722df9cd1d787389a2f9fe0328cd90640090a5482bd0e4cc1cc2ffe8be34db00b9c3f1b5f24ef40150abb383c69842178ef454aab22fec4dd1ff35872054adf0af8f89fbeeee56146f4bdcebed07470f8e4189be654bfafc3b5e41e28f8c7839dbf78b471941e1e986433fe2a602e97388de0a2c4b0d5501e148eda013c48202c564bd407c2ddfa91dfaa511f8716e6b04359f9b6c5d47854b26ff6ab4e41574f63fe98f1e9b967bbdd8d51feb3c1f218bad12b3d12416b0025e40e77bd577b7f5eed5dc07744f88ec4599b5874b44baa4ae2a1d81480ba98d5a78c06f7df0f24adb4ace409e52f735a9b77bd5862561d8a0ae8184b36e9974806f9c99c5ca4d7e6c0f0dd003e7f11d6cf818dcd6093caeec6786e34b87a7403aec24ff954bf1180bee42bf8a569e2ef62435a4213a73aef81dd5a5fa9dfc78efb900abd6bd06a01fad15161ae625efb003793651fe2f602d9716d2a7fabfa4069cd7a56e66b39f10152ddc9de1afe8005c8d994c9e984df39ff0733ae4194de95e51f3478f219c45ee3319fa8d63a24ff918d5fc61d5fcb3fb0b8f9aa432faffc7179f487f781f2800ced519336aa406a0c3f347910ff5d374102eb1823133b09ed1b15880dfb02012a719e21aeb768b1a36fa17746dc1bdd2a75866c53e8064ad272f61d87ed895ee65ec3d8c0fa1482f18f2535418e7d7dd7716a1b7836a83babf234ad07e1eef5ab15712cffeaca3a612e4e37737ef8b5d296f4a9e2578758e4494fbb0070b971f3361492cdf1f0649cbd7af26f3624019646c4ac34f33a3f15c8b5bc04026f3059212caebda83d8deecd39ea874c75ddad114876e272173aaaf0f544852f76cd377727d54195f812e1ce09a47e1a64c68186feae7d5cc4e83e628cd8f65066b53898a4aafc13b690104078b496288748be0855b7582bc9d42a9deafde9fdc564b71611a43fd9ff81f4b4f57f721f33d0bd15fc3615677c6b09f3ae07d2b009684d6ffd359f314964f9ac1e79943720faf940408f478873395714349b42ffa94c6616d5f39cb21ab5a99632377f38a5240d17c147311744ab9c702d2cbd453b7d8bab2a42bae4f9f09ef3ff3d857c56e872fd0cd2948c475e3477d64094192668488d68c77c425da22455d400697aacc4957071d5d46011bdd9cbee5b79f3f0b9073e2fe64342bc46d42c3f047dcc1d251f129eb5632b2a36d6ccd3f1d15e20dc525dde13b27e9c5b48f7bede44e93e966a43f1e5d3560775c60b05883cc04d4eb43cf1f45c4e846bdd38d1d2514a7794f184fa0ba7792fe711f711a31eb2cc8ca78c19fc734afad51b7ff6a515785ebd5f66458b51fd0a07652186b6e9be3512969b9490c9ec66438e3dbbbb23eb6a5c0e6832e9656a3c531a0ab358404b0d7d2c1c2055b2bb6d13afe29f78ef2c111d88fb60aa44391d56cb2345fb94d1bc28b26e1bbfb02065e1fb0ef082e9a2e96e49a04d4280f2438ed2fbad1569fac7a1d412053354d3e72aea337d5da5f869baeae76746ae1e4577dc04673a221ec6750b986b55131e774b07c0846d969508afc7412d3b2e25898e30ddf2de7fc62f1eb361bca97d888ceeee66b4375df14ca9794e2d748390864e9bd8de76b579781b862e8784e6aa9e72d8766b4f4e95bc347b5ee6973107c2455785889785b117d7de2f4a8c00ed227380704819fb1abddd37f3c727d8c3d3ef0e849fb542f5a4f0361484333ed8cf6d60f4a93be5c8f80059cd7d8acd7d21c82b3672547fdfa5d1285ea2ff02f5ebcce4742d099158c14a3b1c4854919c324d381bbef9bea771172f6e4563ffbd1e1e956f32177022c0176690c5f9b7999c0aafb4b4296205bd2ea5d3e9e67796ccdefe5656ea24bf6af4669b850ec20db57d0c8210482c72d074362fef1b2d3b7e9a89ba1a060197287db5cd03f823611500e91451fa506761a45ac2e36662e3a9bdb21ae9dfa9429effce85a13a7e2c3152afebd794806bd72b8e4d555ccb57e4c521e944fb8e3a25073b560b6a04c7a0decb693fcb2ef8a7764b1fc352c8d0a65d33b5c9de12f6513066ce90fb89dbda01e62cf8f2de8669111bcaac0cee1664c27200d6ebf9ffb9e7eb5fe0636fd153686a97719ff19d72886ade7ddf9d71b6b1674afac985ceb5ba237a68361930937ee34958471ab67a48c2bbb74f797b02967df4b3eb58dbdb03c9be96e8388210b1cab30b7cbc69e6debde2f6e0e4aadede40be70c5e5bfa071288cfafe203e51bd8b4519a559103eb6b6f4ab187189b21539d8efedaee29c7eea7612fc62ddecdecfaff1557351e87d3861526aa28002c7d4045fc736dd25896a0a6d4792e938a1e23421018da77a7edca96b5bea367762a9a16ee6f007e22d21aa687422d8cbb38d82273e1a697b57fe4d7470db05567215308bc17d1b38d6cbe6a31685252c600c0a826fac40517527be0c2dd7854672c14234eb305fc012a33f9b834c76c153f84db11ab5a49372e38b7107723ebde1185708c8bc7dee6d6215c06eeb1620ebccbc41d3c91ec7bdbc3661723d8a334994df65fe63de3a436329901de3bbd1b413e6930f490754d20c3f5c128bf02d18c14bead0e8f92a3130cba934b8a04a39485d4331c806c14c6e16af4d001921db284ce6049e6734b3457c6a37fc9bf0e7e470d0ffc88593796c4cf9a61c6db81d343305ee06a0f0563bcc618c01e77c3c72c1aaadcd1c52055142b9a24356463b6f9ec911b42ed3766e2c1dc57b1b22c37de05ee04823836ce7b87dc6177b52c244f08df4197964b0673bfd68cabfbb09602d6c2bbc438e1c89fea4860b35645e5ec8e329c9090a70b14c9eea634d7b7ab43930d4bbf4f890a285cc66812d014c17a8571725665b53d6fe50cef73d0a93f4646b9fa9a04965dbfe63ec2bca903809ef6840c109cdb642c1e18ad916def1ab6f6ad117edf70890c8e98b7d86c79e902e852b2e7be8347f379fa29b636ef0439acd1d792698056b65ebc8d8f9edec54e63c5ab035214af6a009bab08b412c5776f0d96ff292c8c665e928c08c999dc2a70c4418be0f6643cbae17ab26ec0241a474994eca8ddf2c39503fe6c7414f63c1538baa7f1902e0fafb5e0daed62ebc73c6d1b826cfc51760bf529e228b6db2f5c075f810c4cd58ce80023a9b75ee028576171e8ffef7126c85157936ce752a94d1a783eb991205a6ca88c46561ecce59f0dde47e9201a7cd500cea6c80f2552ef594d0980c8d821439763d9520876a61d5aacc7b0f5141f39e9d644c4961ad44aac2508ea57c58b76b3f08c3186a812d72e218fded826b9fcf3b995e9e5fad466fc4a637ea7af3e0ce67a857dff28d1d77387c8fa301aef2708bdc0be628cfd4c2f0243c4205ee20d164becbddbbf8c250f24998d65b66bc00f2ceecc769af4032f96d0452a9a20822da9ea7a8135ebc7ec412b1edfc3d5d2ef4c469989ea6493e24e31882e2aa07212dda73b5b5295c7f025a6350508d4629266f1af0446f30532718f1692d709e5ad2f4a88d0de332c051a315b414f117adfc116964d74496006491175c06903e3e6e6fbe948a06cff1266f416fa5e3421bea7ded4ce3c0fac451ce02f1ea83875a54ce4e72b61e947fe5218f199fee460175e71f3ee68edf1d93323cc165b4da2d2a72a09e2e9510cb326c57184f7c93ed22ff67b14be8a38a9d603d20f4ced735540f8d8d3004d57182a222024118cc3d86295f2aa088f889d4ca8cb7141beee165f74db676e852f15a65885e114d5f70f3f78e2170ca3ea9ddf393ea303681dfe4cc69a06faa09c92e18e2824c74be3600ec4d2c3936f6591d5deb40f5a9408f34e179d196e47a67724ed9253f3978eb316a44b16649b016177c1b41c0deab6deae8f6d06902156acb79d4ad8606100f1a03ed47849cec6f60d07c632e6112fa8b555913729d7b31ae2c5d819d6504200f4baf55108b0bd36dfdb72b9abb27b37a89291120010c5a7ed8ec5801d0c5bca5a4136096aeaed0a346341192574a375d26df601df75953c1f1f9873fc3e53361afb200837245f5a56c7babb1c00ae497a0f466b8cad2ac2c1a1d95c3d8e332b7b0f3ab63705190f8b30660558fda49ae79f0cb8d0618d1f1b3b11a2a6a30293c6a50c7c3136250f1cc6cb60a0148d526246cd4f7339c43d7516c7ad0026c85544e71fc0ef5f8b4451b07335bded7258332c139a3ddcd902175983e512be8d593afbfaeb372751957117e6ea782f5a94a2786500f6f3d358482dcdb2a6145a87f3092666d23681e9c622aae997824eeef7534ce96525bb2652ba2e7c82cf36c7b63a29988835222a96fa4998e290554e79e44fbd531b98547b272dab6f982a01cab58de820cc3d3f2ac64b6123fe779c7154f6e5887d72c90c9d53a735173d1d78a3d9c064a2d910caaf36ab2077bcc027cac9c7ccf2526f4c4326d89cf37703082c96871a60fe85bddd94dda2a12da2e36f51cce7223f2d854230a76cd5e09bc2774ba40badb4864d77ec617124d12bed6a155ca0b641ebfdc1f97a6c6481ceedad8081ff3204fbc0a5c79e55a9b1418ce49de0c0566091fee907ba65496182d3f5be85be97f5cc5f91acfc16d8d3cd0a0572be10a9a508cee1e4d0202b88a0ba788b180f8390e1726023e37b5841b8adf41b6055581736b5d2182262b3ff11eb5e72a2bb9edc22413db4bb4ed203e8beda202c5a0abe04fde4291af689cdbbaecef88b8b91e178134ee8ec55ed1f4784de0a8ce668a35aec3ea11fa354fa884bf0a73c4404a7c932bb46de59529fbc492960e7c01acd21cc09089830bc8f5f09ed061bb19e37ffe4ad57fa21a88a2e53e2aaa5b1c7443fe36ce4ef666b932731ed9d9199089800724ca1a67798e987ec32712d8117119e7a90bf8b0d060eca0b17f507c3ead2b624bfae4b21cac3ae5a413be9f8b43b24d89d20d4ed38092fdf9495e3f8eaee07412f0652e8e5208be5369340dd43cabb47ba9032cda68a3ef58c058e00b3f3dd13c32f2194920906d73afe9afa6fc74a0d0f960d76fb9cdf9426ce71a3ebe91fe0a4b322ed7884077674065f15dd39b973c5bacdb1dd44fa068a77f3a93bd8b5f1f91abcba409c760c0d32f8f73828f0c10484da44f58c7791e1887bd94ac9868eebea56c591563bdf2c0acb68269dd63ff37d9df7ea7b3e7e538a73fcc1c37cfea2ad5ad414bc3e37fa1741304f9e5535bb2c7c9464193815070442da47cf7e8b45ea2fb070d5685e9fe0c3165d3654ea8319e0e10d6f4b9d267e503b85f4757bfc2a3d214ea99f9b42eeb7e3f56abca774cd32a88a846060d78005e7223a4717f1f4ecef5641cc350bc7865fc14473b4b6cfd8af866160a44393c9a5c7a9dda749d0a4e12fa4d87523f5995269cb625970a73cbfa70c31b2913e043f1c4a1f732f46cdc082daa9a3b2005784950771decbdec49f958fbdd2ea0a1e7bc824f5c2c9dfcf54f6ec2907df6e27bdec01898aeefbda19f9f2ea4b767e7f22743f48de3f22126534e13ee8d3c973c416c090a60186e5f37b3ba2675c228ffcc7a4fe0dba98ffbbe3c1d290b698a262bc4c707a2e084df6c274cc6cc57eb7d06a5a019862c7fc1dac95cc45af641c5f86ae0f4e9b0879ea77a450a3d81b5d68046937c75e39725537641450e6b448831bed576a700ed39741d41654be80eb8a3eda8ae1d776ca292b3692f98410909524112e15d6a2c2c4c90b05c79e35c7ffc0b4e130f4046a6231132e87b1005b5f48237e99f54dae3bb7510743a1c35b8e31ff23fade6dbcc8f004d044940d12a7302a2e3cf496ffc2b2ae0312efb10d013ac43a88bc3926221110607656be1b36832e2647fb061e22622be27aaf87471f820a0d22b7ee123a3b40c6661e9cdfd4ea384e023423712370cf8ac40ace70afb2d9840ff716e7d6179bea5c152ec6480d4e8eb4c578618c84a3e437270def7a71398799a3380dbf4c29b49f63fc395c937bcea6d68a572745add81d2fcc2e486833fe06e3ddecbd83f20d792f8e9ed625c4f62190e3b9ba5cf74fbc499394e03eced19fe18cec9764ffdb30a16d5e7f6a33ee6b1a0af00e70892f5e9eeb890c9c13e9acc2cd75179657080de320e21f0bcf9ecc9d8765eb2a696249555b75922a082c75b128ef03c2027a581a2f917eafa0ee8e41e37f1832a1cec5976cc13b8fb78341d426c2248f091b597123d263ffafc7f82da5a55f2f395d1c8ca4d3cf7428d65a534e5642a673d1580e820f98a2030f518a554186ca37f6945b8e141680620e0657291325ae48869c19d7afe341a4b0e27f7bba56aaa580772dafecd85c6d118e083d62945090216ebba71a0d849b90f335a07897778ae50b2991c4dcaf51c93a8d15a95834548a161b7cb7de12ef99cbd44be311dbef0c9978bb02eb22161d510f365139019ca9dc63ddf01d94a8b1b48305638b7cdbdd6841b510cd5dc5f41db52ac3ff606e6607b8532c94b1cfc2f46a5560cf025640c2ad08544a076638e4a8786672f8d4a9e14465d409126bb3d4b2c342a316691dede43b3829c8ffd0ef0fa8a15a72d55ab02f9b4e455f846c9c83d771d0601a5c320dd622344a9aa4861342de7e757961bda17d03103f23d594041a551e8773e5d950617c31323e9cf0dccf84a7aac9a650c1945b315a4ed6045e135654347ca02ad665ade92bf4a07791d7fb9db8cc11b1b767bf7259105733b84bdd3c0e3c766dc76a1d24dbc398615ae0aa28498b8b27ac7e9599e46e406a3b48509cbebb4de94bf634aaeab36cf76074fb10020cfafbc862466fa27279f10f94193deb010fe788935a4201cc0481cb1a551c8d594876329a3bbc3c23ea105bb79ee73e17a2afa9c8f7b6c8174847c35b2016927a5bdd13aedb4859897c0f473749615e04f089d41d73cce69b21906fbdc5c4b8751d7b92278ddaa2ad1535fd9e8175f5d0dfbd321b364d046075a6f7caaaeea8547497d88cbb3cbf969ecba273ade9a8845992ea49a800c96f2ecf840a385e0a1f4a780c65cc34574c0019613f378621264551243032afdecf32543e04d7db85dc8667573b288b12d821676089861408c18a430a563a20ea886b7d4c40f02cc19510ace19437099a41ebfdc7d9025b045a12adc1452a1c96a3bf91d646e91a6751d08fd1fb6075948f4522bfb71322befbc4da7485686b8a2718da069f2c6d1f19ae584ff50e98abcb162070ac2133deab8811499c5ed56d1c5d9e02d21fed90f4924e850ca63b85fc483d013f94540b73469968147222e78b7626f2672c6163ea64ba99c79124ca2ac2c29af9d44eed59e6bbfa750e19a27b4abaffe6ba933f030ce4b3ae371c235d6cf7656149e92d6851bf2745998443f4c3a151d83049cd487214fc4a00ea389e2e2387ff5cec73a56ded160e7b2975fec8250fc5f84cb5c07e929b225558b0f4f08f2b5b7321661a238cf0571bd0dea2428c613379649e7319a5b9bf9c2c33689a8477fef84eafce5ce6dca9e34326e7171f70ac1b58306a29977ea73f2f6b011448936f513cf6c9fe41038b3a49f6d6302664b746f214ac97ae1164a429fdc74623a836e8b3e214f2e68d8588a9f67575e965dd62f8f2414c339b7e35e294c2195fdedc237b1bb6211da11f362ccdceceaf99a4d73371322f6d437b5821d6fb73435ce86c5b4ab7722e67e2aa9a23e924c22b970e6b3a8627a632e577b06b793e164be22a1c1720cc6008554dbba2cc5d68413b6d68f5451e248f43f955fc446021d252c48629f819fcac018756f08163ea041a5df14978fb31831e46d93165c3ac1ac1a4612947404a7a6cc135b5101c909bbb47d0de26a61336fdc603b1e34dfe4bb73175be1529929b20611e9a7f72a12ea691cb5d570612cf68e19d25c6e8618cbad38a916bbc1c37a5d1da46d84c67e764a5ab6e13057877e7ff6d34177b1b0554f2674950e12f7581773163239128ec7ce937b8638a8b5503883d87dded75df0cf6d58fcd80157d3ebdea96662b2d6576c739e44e7e959243e4d3c52028b7426a489c0be9811478630acf89ab01be7bdba67799ddc7dc55307bf797e8132955f74e8464accc758e79c5a6e4f9fb225531edbb80174ea9c750b573a53e9613413a7155431e4980e60758384e5901a31d0306cb4104fb430f2efb0e962999bc2dbc19d64f48e17ca9952a4d70d1fb87f8d6586f83acb7f4574fb38f13b2046d4203afd031317ab3feaca3adf26cd11710344b71ee186802c43d47bfc3e0bf6ea899990b90e1fd6b0ed32b1f7b2f6c9b8da447982b4ff7b6807f1d664fbbb3078606414f156153ed00922a6cb324b25b97afb4abe2594d58b39d9f4c5e4bc68004d00d6468b86281fd71085c44528c9e54dbfa73ba3f5030841f33389999e1204c81671130ee146e2df92db7d3c1e2aeefb381b85c08ea851c8e43f3a7aced3083a0b61f150c50feb7b102450b7a9dd18ebcb24170bc02a1a3723646328cd0f8d4b66257c119fd77c421edce9184a3505a80f3d89d6480ca405174f6df4274c0654ad37ed91d05227bd2571910e7de737a86ad438b064b491bb565ce58d5bfd05ee4705f08214f47054ba9ef2eac35811656494be3ad4d665d257195454d9b6fe80da3c1f42bc32e8914491893da8fc458792db84d5e6d682e2a00124db3efe72b4bd46b4546491e30b6a15ce879d6826676c35270239399b54b7a0e190ea37e4e296926a477c96122b81783d592f10468d572e1f503a73f1b10 +Output = 2fef8f1e378998694b471f7d3b1945d3ab21ae2358abc0634279ab17761eae29 + +Len = 72328 +Msg = b1eb7f6770046d3682979a3efbb6e0c59e6838ae504fd03fcc885e2897d3b5c137f49594a059c81beffc6acb5a8b895167c7ee1b5d2a391af8cc34c6618761635d59d583c50b49cd36106ffc09b0822b8666214f54865d053422118ef02f72178de4e63ec8631ad3c19b4edbf16df4db610d7a531eac6488e8549d862a130f662f5b71cd92a960b5f665b270f80907e96286a02ea1e4752b7a2881b8f87a61d7a9871d360a2546fc3f3541c207cee2def0983de8c775b8775367652c43ae8ff264309383171ef12f03d5a3d90702ae42720af68a77a956f3dbd9f0e9f1f5c23fc81e7bbca3de8cd6a90b81bddeee929b52a5751a99c677287a45cbf7eb9822473e187ce795ab3d799ba0837776dab773f73162a31415429c99749e5e1aded6912ce83e0ed5ce2ca1405c500db50e4451c976642ad2dee0d99e2f1026651107a5fb546a384a8f83d50006918a85d162be303b24b9ba697967f33cc958b377dc0c1425a86ede35679e4368edf3cd6d3941944a4a57b4fd34ccfe6372fcee5a7e4ddd229fb7780a028371480d527528f0625d697d0da8e33992296eb318fd0014f0c015f81b00547c0cf26f98ae644bb0a9f36165e27e64b140db2333b6c8b2c77e24c45aa25f5cfdc12fa53710841da09fbff9abde1ec6c45f7b4c9bdd37b7bf7e71f96e557b6aac2b8eb1927fbce8e9cb27fbf7097151997673af9296325923780e7adc3b3dc5b1d1785d5003f4f2b2b5942df06c5d4f590d2a15c1e8a1de1bf4650f4b5c8db7353b566f1aa4148524e66f593f0ecb062bad0845cfdb6c8fd17bdd8263c1548660f28eb0976b05e767e51e458cf7a4bf38dc750965777bb46a94de9acd71787b597d8ae8705fad60a23a0bba7e30cec2a725d9272bc5b69511c8d01e3174e3de4964b0df4c89f53afd6e9c7fbdc03357a10d9c68c8cc0679ec9e1cd736d37bf757306a5cd4efc5bba1083b5ef2afbac64e1e2694e59451aa239e288d85952a0dac681f29b09b062db6904f1dc5064a56d5dfe0732926816edf505d07c6c2d76a6f94360c87959ed6638f4085ddcccd515fd830cc3d897c0e483d230fa0636a54c93d19ce01e377ffd18c755ee3092afd13927f69c8c52cd185ece36bbb7fca14e2ea2f37c78f78ef280f58707ec549a31a94361073e37701bfe503e4c01ee1f2e123e00e81a188f08fa050825709128a9b66bb8ae6ea47e41db1ed4257489635ee70941dd71f91482ec8c55e15dc6dfcbf91789fc8e283c4c8d7074d2706d127335ab32a6f137a402e0e1fca6147423fae9cd316c2d413e7e7dfbbcdd95f7a0ed568a5fef4842b20b7fbc78fe351799c8f0f36b97bc7df96a3527089145c7a33ff23d3610c7b8b30f01623754202fa5b8a73084e9cc3ce1824b78d4a8104b7ded711a31a5fff84b802e79c432762adc4c94fb19eccd0cab791967cd8c85f1a5785bc7ef39618fdff15f69bc3397a7a1f712b9971b4f7bbb91278a4fb90758be532accdb259cedf4e4fcc86bb21514ab3ad8f288ffb3f8767d1e36d7b814ff3d10667f6204f2a10eddbf0c6f486ef03c9a304c6bf4ab11709f3623f1f44f438642877630521337924dfeac436115d8fa97b11dbca495353e7a37a82b0816c44e3c1647a2977f2023b8443e7486aa2d49b5e3fcf799f2f234807b59ef7dfc0fd99f8b4a553f76d9479f18296f438c6bce774150a92f54d7076479afcb907f74dcdf6f14b4d4cae15274f2f3b0023d22ed4e41bf4ddf2b320b78cb102c1a1191bc6e2a2d3dd1cbd6f8dc5d23d35d5cd11abd7d9f5243f6b1d54fe8319d6542f4ecde550a7cc10a088f37cf4045bf3bf4fb574d8762d837d4d95c497a9bfc83fd02a27822ee1cf614aa19b1cf83a28b1cf37e49fddc167ef9ac107751b45a6548825cfc0d0e602089bde4bd3819919a9797c4eb694a893cbeb22eea6d53096735e060693f5a1509b65f4b4a0074271b235cbdba601aaae1927fea2b141483fa63a14f38105dc62248f29fd0bf2fbd6d1eb6bb2f68e8f60df389e4a1ec6544af40498bf14685ddfaa01c64f9caa8df11083a5fd2ea21e5327054a0f76cb1e5e66a4da91d487ed7036a312d1dc97c06976e5c1e1d7a4202cf876491940ba6c240203229248c853bdcf5d57ac52215be60bfa078878fe5e965b73e58f04fa0744d207b8e9f894596d7d17db0787b12812d8a8be1a99179d3756e464994bf3b765de99e3c06c54c52848b9e80b01aded92e4d830bec257a8b7f4b10f619b0d432f2ca2ed3c2d6e6098392bc4df4a7f73113873a39d7c2646bf3ac32e0c7fb0754cc7081c87c24cf2635755b7adea8d8235da5f60df4eec3ef7320009c57c441361b4b5b9c9b3544331ab1f0b9a6741e2a6d486afabc1115906e351e7b21c31e619fc8f0b2989f01aab3b7206d04b025a0d2eced7295cfd5f95559e12fbe6dfb619a8805cd0cb8740781134f2771d37b312ee212283a719184b91d0d0c962b74b0cc06ff2e601807e41354f15b6664ab55c1e66d6de2acb4bd19ecd6a44191f6c984a431792b3459aaeada9b8b6ada22894c5853c656e7cc2ce847f28939280e36550e610fc6a3d5c66832c229f7aa7d461ec659c3dfa9543eb4ccd51df5543761cd93f284dadd08e12bfbf9d9856c1816c9af03e91567c97d0fd9e2f4febceee65ee36a6ad0566f65967496fc9c758f65dd70d69870b9b86249fdc080cdb8b12e796b3d143f9675ee485b4e15b57d4fcdbaba46747a059d78f3b6e253dade0ac4bd99ef338113b8c5b20e73b768e9d5b8e1f9e7efa9d1d54bbd73cce0bea378238bfdf52b3d54b486441cac541f31bdb1f3ae1f7c88b51c34d7e2e4a9e19f75e57515f36ddcefd5caaef45c7e50eb7433605561ad8f05cedf0352ce31dc28806509604e9de83ba8ed33240888a67d75d7a86e52e5357a69a4a061edfb06e5242ca96b7b2dd7ceba88812a3515687e5ef94c7777d6045979103f8ec8781a3bddc6e5a61d80242f6707098566a74f547c22bd0f24d2844979cc4137e23b5ec319ae3e9e8a4775c45af34cb411b0a39679ee8a740e7d3db0e813560bcfb77ce1646d14c365e61523e2c7bb44dac41dcab4b7356479388936409fde68f56edd3d4a6e289314eebad4bb1ee59606440657d9073e5f1986ff201fcc4aedd7e3f82d383bcaac3bb3af4d30435c4638c305c4436915a2440b1824d2234be90b996637ba407b6d3ef79af3eeef7fd3f6c3849670674bfcad176cbb143f3208e501aff35d36cb64830ce67f337dc0ada4c81b550c5c41bca94e5549326a9dcc18bf2dd67d692b10cc761a25ca78ef51e743228663e2b770cd127a55c94fff80fb147867b7623af06fc5bebe006b2c6f22b742811384fda78d0634675559c7e620c4080d77bc4b91e16e4c7e71bf3833dbb6f3fb97ad84cf6d8c2c044312a75a1e20655e5ad1fd53c5f23c0d9aff636e96a4af4c6cd6fd66e326c9933f04ee6b47cc08c0bd4dc0e481d415d1f8a66e6dd812ecfa0f9bc7ec827885ca959b2d8822297aeb3b7a3692a9966261f74e99c01474259b0c6664eecfd3f8e0e35fe53f51bb342441f1af0cb1bb8a44235275f3d06af195cfc164ec2fcb8b9c94cda60f4b13bd026d4ecaa11ea625ef094ca3779049c980d627385336e1c644466ec05682a57e1c09ebf9fe5508add925b772c9d8b325c2cc126fb25999218e64bdf4c37cf31fc7c453cd8309359a78e50d84791e198ef1fe1d6b881c7435c17c2593d4ae8eea9c1900a5cd8fcf6464e3c958f3d4ef7d9508a2cc5303e56b83f9502df89bdb970f848d133c7d3894238e6560d8a1c77a02584cf291946f4b4c68a843adc95b8da87353b66e3603c21b618c2c75e913fce089669ec232945d9156a84562cba136ed71feefc16ea356d2f9881c7a3f778ea608a9f17382d70ae92fcad3c5f72f3b450ce92fd46bb9cad0b2f3c153f94497d95261bb03f9c9ebca60aa4f35f0680355a0ad0725d199a6ab1a59bb71cb1db0e0f3385c21fbcf689b95a148312bee1785e9a5062424d572b8bc245b72095562535788452c2d6a19f34b6a3f562e13f06c247b9d5dd9ffa78004ee31c358ae14b71bfc16a0f31c6867de4f95036b9c165f0d9b3d31656abd978101cef42d6a4062acee411ee178ec4feacbf9c758c901f4e18e865d5bc94d75bd199372ec2c8e1c96e945047ce21e31ed89de109a3d3bc46cbfd920217daf9125901fce3967561b467792e029fa66b442e3a28d946b3c23fbc9d6385b0a8c80370fd47489ad21054813cb308d245e2da783f78cdbc58bba1b16ede46cf24cb97de351f45160875118485e73faf28d2477c53dacd4fe92ed373180d2ebc768a366a508cc2513e185437fbd3907e74c2f3031f55c1458ea43fca44f823bec78d49def796a7949d828363477ee386543b46d44bf191e771a44c7d9aa60e1e3f5d3600d146dc274d3a08d011f02110eec4a8b97eb6267db7b66256c11fd8250581679987a34a5275c84946003230646ae5817860ad664f8b62e91b626b671842814270c0b5d75d3eb5b08dbc4bfacaf12639da9add3aa4133149952493a5421de6314f25856c8fcf88a36cee43668aab1038a7d44f8ac677aaeb8cb09e79eabf369bfc5d1af23151c98cad3e235bebbf2ae6a7b5093ffbe05635c8ad94ca574ffce840117d4f8beb01d21653f2c33655fcaca1e6153f8c76bb9010c47d82d2f6bd7fe3e9b46de5c6b7dd70d6b885b4970ff05f0f7b74c16063652d9d6288a3dc03caad8cc93287097315826e7d89aaabea1ba7d741c5e1c7d61ae8df4ac41228553066a3c388b8ddbde216c44ab763b9169642e6711936d29a1907323e1e67033c19d5d5ab56c26a1eacf27f26f726ea19c8f8e5125a06aa39c85240457ee9943fedc3cb8884ebd71ddbdf481a313a657d18907c2d6f9a763b9193ae67cce104e615f82d62f97c4d43d7a5c72d4de853c9f0d452c9403a5f26db9027acf0977ab9f73ca2429fbcf316080ca3673378dc86b78a10eeb52d8d840d12511dd2531f41fc57d22f5df5f220d7dc85d0cb32273bd47b5da4b6bd27dc91e1d4c15b5d1a058c1066311b6d71e9aadc1471fe5d5d70b16fe2f42b3055b7cec559a171fc948d10300650c16e99f7ead5f951b243a5aeb52e47e5fccf419c2c8688c3fd7ab562ee805995383e91d40090db78d02a287b487f338011e2101313eb0831e81da40b90c508076625820852d263ef415b0e62d22b4ecc52b1eda4ebbe82f3182e8a105ccabaae346d94194a6639bdeb1e7ee8bbfb41d1a883fed81cc59d0f77f48efabc5618938a5cee914f1304eab8bba0976cb4b497f9a26b360ec9028fecb9d9501730cabd513cb9f8c8a06c7f8f799df64b214e272f545d472a91587a5ec3929ad52177346f531cd41fd61b8357a19d8dc109b88830e2fc91d6e748d9b75ce2615df1c701ceea40afbb7db6fefa7bc7e537339ac2e6946f9e7b917ab3decaf12b1968642b54484d10045de8f95f4f448513689ade37b1dff682589510bb55e683704df3baebb76a80623d567a6e653cf5be7063e30d83731f510442f93647eaeeca6a1fb77a7dbf863de6ab8c0f04d6bea1139bd94f5054a3525d287437e624f68f858d29e9e375aafd218d342a763a672319ebc8e561a90aec2af08ca67cbd222867e8182031b4740ab4a57ca7019178ab49fab9b6fe9bda863541466b4fdcfafbd8d68d06afa36dcd679a6b6eee037aa36c71b3ac6e529d8a44c4ac6ea7aa0771a0ff8e85a56b1cac0414096885b7f4724af7bfaefbf5da5f2020c598ce4fd0f3860d26845a33091051bd5f7b0dd66e80ab35e4a5ebac1a6d91fe99cf0bf2dee753a55aec1724bd62183a7490d087703557d22a7787a1e41c5f0631fca5bbb7b6cf7134a32466bf081f36519014f383f91577990d17f9c0d451df9408e5d3e5c9c219bb92c920976c2f57fc6122412e34afcc3a4fe3df36fd3032cad91362f087f445f7a14e7bcef40f457fed429afa4eeb7814253279cfffc4a6dc59778f5e572d9cf1b9fa9eeb0a89a9e21abb266eaf92242f784eef1242d5e4d16e5883b9a334c6b0c016b17615632b2bd2d70c12bf6c77942e7d6a882f2b93b102006688d2d26c3ca0eadef87d667264fcdc756ee7401a4a310812b72c8d5c85fcb55f544ccf369e3fbe4bf8a95a27948013880b8dd8b45967370e29a2c5e75444c096a478f3cbdd87da20fe0307f1c446c46e701bfaeecaba518766fa99db26c2693400c005d4015e858692f23479fb35374e25f76f70a411a0a4f49ad2e1035ef761f08bcff813ae09a53ddeab674137b351b38bfee1ef536a8e5dec38a0f400b444fd4217e01a5eaca4862f32629e33829fa13d71eab46af86c295692c10090e606ae4ba6331e56b7abf64e92121b12ea5f77778f32fa3d9267de42aaeb30f6d6ce8c0f449a287e72e413a19320bfba34babea01f62c9b47fa7061746c78b1accc51ef6b8bd3ebe24756891fc349314a7d7fd1fea2129b70953283d2ffc19e40f13ec69cc436bfe16867a8797f59d088ddfbc5eb818232e7693cd1c2d33e23de9df7ece46d5b4269140d3e92a0ce77f2cf983c450eebe010f917c1c0714ef0ba0515d8eef1a231edbcafa207e20795fce4edbb97c4c03191c72bda5874647387d9310128fbbbfce3c4d77955bda5992b9054ba502daf85ce561181f7372f2aac8ca1fc1ee5f901efef1d3af88e291fe35475cf1ab3fa7b3b18416f2943ff94bc9211302d3af9ff768dd95d5cfdf298d8c3c94033f241806ca033e86b2566301c8be723f0852f33fc13a4571f67a2726040b7e448630523e76071943955e38b60cc9c7df53f194e0522f6beac65a95b0e7dd9f1c480c5d41feb82d9204008051de6b974a7d348bc063e590a807277a157bd981f44c5f41f9aa3d05d9c8e444ba86cb6ce74ec2dfc93b843b13818bdf3c0928ab325bd2064dc1bf2681a9b18cd94c13cd208d4498e12433f593fb2ccb0dd8f1a5403d0db5248d651af36f105e967768435c0461bff2641a45903fb24670325df884bab7566854586896e2a8c4d951f4550479c25be34462b37213c6594d5d942b689978ef005fbf98d1ca22c58a20df8b7eb50f749c0c33c7a140100a8ca2bdc652a4fa8ad4f6c3320eee2569912d516d3380ef130504b40a858e376315490051aca1e22ecc608cbfb4175ab9d6c071848ba10a3e06740e0386c4e46cd09a8655dd59dbe4d0e741c72b0d68bc41216757efe2090087a3683b0dacbe2ca6dd775a4d948bb3c8d10ad0da98f97bbb975c6ec509945e70daeb38800c6eab7d59fbe6641a9aa39c6710642b80b2fc2a6b785276df5262a961bf8449ad9bf13f5738838ab2b1bc34f17b0a858c3d4978e6e28a6b2cec131a800ba7ce57ee07d21f59b82726780778b7734b5086426a8b4dc39e0bb80979ac7ff72779d10ef420f9840da33c968b51001fadf53468654deb4217bd4a529d45a5ad8eb1e5a5c00f2de20b66bdb450a516a7bada5e5844a407887cebac6f86ce3b5263dd59587489029a39d870795f5e3f34fa68ceba0f7ae8bc55fca4073c3089112f67f6d11675c1d420621f8ebf62c4eef4074b35ccb6d7072b58fbc2c851d71079b684b8b1bab3ba466a909a789bedfc30209c7185401c918467794a311b6d77c932cbb44a421d71355a8c4693ef018636198a174100ff81eb90e5447f75926fa743926eebf44a247598db3a17484ab68f5cddcf09dec8ffe53e085bbb4690209c51a38e9bb881f98c8e451d0c8d0eb2c24f5d40e4c2be35fcd6ab35ec78adb12fc4c4bb6376091804a292977ba696a2575cd113da942a49b7c1947a1af2324ae904be9d49162baa653e89526b7a2aafd6ea03eff33c54639e678cd34d9c6715517959dd58812fd735c9f4f3e4f31101c860b97d38a284ac3a305ae88e5e9337ef8c5c23959d5dc6feab9925eef895bfb528bc65b0ae024b1285c860e420ffdb4ba391160a53fca0474b408e9272fc1123a9d44e63491569afcc9ce358caf427ee28be5fbe8c568c9913b3d6d7478f209c4bc8e05a59072e976f9f1bf144b8435f81aca6b92eb1b37b6ab9a6c6609614a77662c49cc71ec154d499adb7769358261823920422563d75b819a665a55915cd9268a2317ca34b6e655244b249cf8ecc53ebcba6518d510f669c7dbefe1f499407a321225fddf36b889186eba3b30cd89ccbfaa7a29e17d2da0ad3d95432db873edbea765716e2d5a7201b696e86fbd25a8cc710fcd0b8457d2b52bc8dd8f12b9dd8a5354e943f3329c5ac3490918242f4f6d9e8496c5cf1b7c6a071935ab40a8d61f9682ba1330e7649e155f31ccab1d4d1d93770ba2a5cf1a565004c004bab77408e16d683e6edf67361d37d6efba761e56e0559024b10918e4a6fa211de96c13b0d4736827f58110dd5b618d13caa03fa415bec8ce795014af6c87cd79754d51b1e0335e827d72fdde407ab8bb54422d7f940119f2571a7a11313c1989c6c19a76853bafb05f3b8ad37cd1de58ffc26453fbdb0852d2eed5a46565b9d1566f7a9943eae054233144375105827f25a780cbbd9b18428533a3f399b312e2bcbd6e749cdf74c0520ab6747d8439905e77ef4149cfce53e69f51694e92b9205211d2b30077e197740e5e3552ec683f12aa1c5f30e79f096f788a8fe493113cdf3363bf1f42bb3bf1e2b7e4619c92cddac4946ff3811ec59855abd20c12bf7a8c688df339ce764073fe3ffc3a234ddf2f3df40e121aa23ae9cd31da25c0187c0247be19e089872742d772f73d0efde5889c97b40d12ddbbec35b8f2b1f9c0b3d947708db3f2726306f4dd6ffabe37736f671bfc551835db0825adc6314e2cb479fe41b92497dc8638dcfbc0e3bf6f0b4c03dd418a892f1ad6138ccf442bc0e04cb2ae36a2f80a0340f63a849891190fc719781e0de44dedde95d2783b1121e9fa3b1280cf81af5cc7e7363579c1da03390e68fc5fc806e67a132b5bb6acd413eace2b120ac3211536266b6e27c006884a692c771092de774111d3e4174d3c00a7023484d54b03af041a4668f32a430153a03ee890d35922bc28789c0d70ee32a76ddb33bf67bb9cba5953e08c5ef400ed4a0cfb8117fb7b53bd95fde9c65f1c64679bb939d7dd60d15a105f53dcbdf98fdd331a41bf39e3904798843cabf3408695d28fd4e9dd8de1a3082fda31f57db3b04dbf536798ee0a6d1cc986906f21666f3c22013c309653baa7ec9fed3eefe1999965467f9d1d2a847f38582217418c5a251a5f3d7afcb0077c10156ceed291cfb2a69b85bad369245c4b11bf802370fd19c33f7c21337f1ff134cb3fa9c86ce925fdb30876b34ed3208c53f73e39acbea6c73256a7dd297aa3c521e3e423ab6c6fd52d76652f640768768f37a616b8154890d87b834c479e103bc9e8228705c00cb78b6deaca11379094341f5c2cfb977bba8259482341f0a32323cae974e49a692f2d4d8bf60efa256fe30cc4ff0fcbbcaec05e7ad4a128f8f5bffabd5fc04221a6b3a3dd5595a5b3540c8e750f6d1887d833197fe30d9d6e3e0ef5f2aa315da2b89eef334b4de0c70b1122e0d09c1469d12b18ebd0bfc49f56814b3e06b05388df4fae4249a031bcdfa158acd4f535df2448bb23206044e8f9c778f3e7b5ba2075565f6ef3350f115c3dae1daf30f3544bec9eda546784f77241fdc8bfc9f8263543813dca64df60fb3671d7a1b7d365b2b73265df6e0b376a7148010155a3f67987a22321c82928573c624f6f026c9ff318f45a33cc5e254ce5f6515ef1341dcca330b3abc782e3dabffe096999154f7782731bf40ad44d9400771e1b152f089916cb63cafb63001021837a13e46410ca942d4f92b2341cda5148ebe849fb438962c0b7f1cc40297201b136109cef6066ce9159825ac41f7a78fa3f29083f5af817bf24d2c2b0ac7ae0f5b1c20b0ddad6823dce655d2ac20ec7f98c6fc851bb7f96153ec0672b25b54fdf71bab745cc846f81129e41cea101cec5582f12e8e18a6e716a5d4216119b9eccea6d3a3dd21ad709daafa12638fe0dec16e9604b69a311423c0bbc17ecb86e4ca04bfc4c77e469466b1bd3d7f65e05ec6d21491fc0542f16285e5d9733762eed27f995f82a8b96b55865824a759c3734bf5925dc6208084bb3c7af1a726f610cf5d86fc7667adfd5270f15041353126392039ee7db494d7172ca191825fea54a7e7b0240b82cb5346b8b147b7bfd47e769b31ce8a8925f25c9e83426cace5c243653f5ea9c3ba7417a7bf936fc05183ebaea1855367dcdb74da488bcdd38f618b1f5b33b8f02268af8344bbd3ff533d80a1b1994216619c452817f50d9d9139675c2a2aa0d2ad38f4946748494680b51ebb8b94be5d5b3db9d0180794d29352c066d7cbc93101ebd02451c13b5b80f2ab4554fe2e0673c4b7197549cb3a3cb57c83889e9bd5c6892a7929ae1007fcfc1087375dfcd7503b264d5343189c356985fc662c7f85a51be9dc189830129cdc36c95a3b8f999ba9f0b2dd7ee4c22576c11998fcdb0b45a8f7954606034407990453e51f4f13fb17fc9038819872b5e51a214696182d50383becda80f165e63b616c0192a40f198c32318fd49a758dbd775e9a839fb46bd49d29fc8e623ce0cb375ed61bf6539c107adc080054935406bf16ba4ad76740820593d6b9be929e4f6d6f8b42ada92dabbcd8cb8c2c93b3c8dc92ce732710774c5b738d886d2fc7d2ebe8488f31d77466e06e01008c3f510cb51aff87f975b83a87114c84d7db04599911378beba51848cee6d2e5db5dd7d932f5740db460aa5372b53933645efdee5f317dbd41ddc25a6f8865c181b6ec383b6d578dbf97f59f02a77c1f7d7f5998259145ad9c4519a3a99be31fe6123930b8c8cd8f84e24226202e3ed08807c160d37ab5e465a7c62b65697384723965c9914f009c6a0b39f1b594a7cdefbfdc4c5132f5e902c970fa8c383e7a8df2190baf4a183bd9d88107a71fde9e186c536787012e44dd73c01904516c889f06fdfff8013cf53913c370e0180ccb6dd9cdb65d31887e5c6f5d8fb7fc2437103eb8ac55bb9551f382a63546c758dc54cdf343bc092a1ee984f1648b818e0d4860f31baec24bd76deed35dc373eb5a370f6d158ad03daceb7921a06a27d394af345552ec5c850f101ef1f03e65eccd7d68e234b1cfe8b1ca17974c3b371b54ad84875bf5d26b8244dca9f79ee684bb8ea0faa9174e54b4ed26fb70e6f98dd4ab16303eb36c27b772eea378cd3cdbaed27f5e7ba694a83dbe6ef41252b5529c0fb3f9010d71de36001d867eb2af182db1cdb6b244eb0dd4a4b62b3c69b3913443238aaeea2bbb885831fa0e358964c19351a957db99ab0207c848f5123a7325ad2e8a4c34e0e334e0f2a9323e10e6f0e0d4e07052e7a94e4f6af246359420f5b79ca2e4d2d981c2022838f1b58ec745001e0308911d3041e565d135bb07bf2fc834797dac5ebbbb259a525482492e455bf7b924808367612f808ecd8adc795847bfb81faab6b9a6b0119d618e8a447a5927aace076177399685d1138b5b75fa9e0606d2b42ba40b0d55c122bf98306b63757f0d0efe874e833a4111a6cbdc9c34ce0c9fb203a472a32e679ffebd1ba0dfaae0ea7da3c02a5c6987cec476d5c771e2718d8c87e064da6437df343f2da2378e746b3c984a548ad84b52cba28902bd09dea52aff81681abed8ea47678df8d1e9e49b33254c54765034a6a5981fd5800afbee74b3ae07cb05f3c8217d642a1783d77f4b92eeb38798ead138a0c0c822ae6f7053ea90c855012f82a8c9d9c16f24f6216a265af8247a16db6e0194640bbde333adee4f33217a351ec69215444393e988792ab5abb7bc60cd2d05c230a4fffe406c0512d09538aca76222403bfa9957bc61e62a54a7276fae5ff273b5533b699e767801281a023d2263bf812efcfee9c608a2de7c5c83ec86eb11ce79813bcb55b58f46c219a29099b3b200a6b18a46ad58a6fcaa3e987e5db9aafc0697c5cd6e0f910626f8de4c133943e62b810416793839aa67b52dce3cb10524e4fba217f06ec86cdd217f1999ddb95b43d43603328fa5103a290c832abb696f99179a50e3b97a9d6efa4da132875e867812e6b3e1473058ab02fb4630bf2005af5274204fd8f0c461ed0f89e61f789051a3ddce8e4723a742a8c3bf55a5700dae13fa313db272073f608f7cbd8d50a056efe3fd3f77c62888832c95a155a2af1cc4f228b431478e8fbd9320c0b92edf105fc0e8febf600004fbfd711cb7fd1583cc25b0bd3cb982d96be41df68c597506593b36d2073b5a3f7900facfb4cb646a935b6f5fbb0e0ba6d24a1c68ec1b89c0461d8fc4379d5cbf63fbd9c13252c75a815b0da2978f507c5a8cc51cc2ba43c78f2e9dda37cf2e0e23b7b5fa1adc64dafeef338eb6847ae66b74bf1cf77fcca29a36051eef19f9b41ffc378355af637272dd892c0135b0696dc8b37071b24cd9d1fd729848c2e537c1910763ca13edaa45eeb68360e91b8fc851481e1a9beaf59b4a8a4f281419217040cca260522a0bdfea639bbceae3dfe4d72730d982cf7d5fe7f54b7955bef993cf2e4901b3411ca899377dfb7e2fe12a22f7ad95ae23f9879a5c9421cefb489407d75f947d5a6509c3db3007ee271e00f9619e38680df27a2c67330ac7f995dab06cec00f99f6f682ff6bcc682f51dcf250d0aa9f8b5efa065bd2f1a87df68cd9298f92f6f36c12ea6312a2281be66006fa2f9d0a64478610c07903b58d649d5 +Output = 46939e3054365e2c0384a051f9596edc975a5ed951d4917bedbc40af9d5e361a + +Len = 73424 +Msg = 5a23ad0ce89e0fb1df4a95bb2488f0ae8308dedd4edff02247d991d2c01044f001bd2da1ea4fd3e0daba2473cf12ba1ece585c168594c8b82f23af7bb8530224212d6c39279220b71f8ad40725d80d2f75d29e46196f6b2ac5a27375ffe60eac821a72bae5907c9d7861ae606f037449421dab53539963ded2fbe4a6ddf2f0f2ec2d480e6d7072faabe7b864f4ba74d4fbe18b277b3a383e1dd90bf79c9f315c270ef51b075b873781c5fcfcfe26973869c847a8d97970b170e2ee5083145854fa6481cbfa7945bac2a38211d36e64dd5478e6c0b47f959e91be979ad97aed412fd8f50490f133ec36285089bcbc632c8499705656742e6f49160ebbe7f8788b8c1158b00fecd935a4fd704e01351d8bc0d4ee51057fc48b6092599df5b78299dab8b2b6c091c0fed6caea46ea031963d1d1679b0ac8de5a9ed982264adf92d5e0740cfeeb096fad9236c45bbf4edf1d8037e31bad780444cb949140309731a668ee6d70d87b6eaca1e90874c73df81f93ae6ab935b7bfb1ae6a8cd2ed07e67438cdddf4ce104661cb8cbe784bf9ebd3d2e0055decac950910047dc4ca5839a81aba647217f07e36d7c7ec5193aa40a00772bbef188010b4b9096bfe0fb2b2a8d35d0bd2f9429e918f419ce6e77680edf80f9557025ab81a71225f67043cdadd2e5dd9fcbd2f2fdcb9a3d51f8f8832246e5d997df26314a400f760e9f11f38aff263d7d8aadeb87e1e94a0e4d206deac3104d14a2fc3acb82d2f766b1d825587e6160b4f0a77c1df86bd041dfa190ded09ad45a403a108c0c173a9d6d18eb7cbd41f7f472324d267b9c509b24de8454fbe00fc75b425b122856a0210556be8e582253ba93f0b747e7e56b78b149c113a17a4fea38b792e483ebd8802f140703bb8d1455ea4542e8c9e151791965cf616de425317d0c20798b7134494ed35d53740cba74d9a2889f9e2ac30aa1d517e4bd98104bacb2bc57cb7153caf9074a13fe1ba695d6baf0c2d0fc30abfefa23041d10a1773c4d9ef5b056b7a3923225bbd624691785d103f91f001aeb9557894608d84972902f70d9c6abc061cee6a8c188c182985ba74aa8b4c0f237e97fb3311d79889c6ceaba7a9aeb0e63e3972bbb827d8386bc802d684ea9471f8fd5294ba75eef731701d46e999f024894c627005fb2ec714d0e34ae59339a10dcfa640c5302de852307771c4f224c8e36e633467cfc0dd67193e8e140fa6baa7541ebd98d0fd651155deb1a283f4d836e99d8d466c39824ced3c2b7b2682c4add5e3959d1d087556297c8deb12065e690337060a9b3fbeab9205a880a076c8079a1c4f3adff32009f2798d07680561640559241b227a9a6c51c08d8d4429cc9debf274d9dd696e12f9fd395f4d97ea0f372d71e1c9941d7872956309db44db57108d8be1e0106859862f1a5989640052e0d874c55a3250b53dadb05c2d6efa1d50141cbab09015c7e137b75ee315ab154985b52d9bff390cfa30ffed025033d7f5b0b0cb15927e42513e98d72452f340bb5abd8256a0e265f046d52622918d6d4588ce7ed7bea9b31f6c462a14c2e1bb7c7f132d51c053a96815bc6e55da11c789c5fe3abdbba00394e848c17b0e7c6ed41d3f94550593beaac83b2d62d3c5cd088ec86890326b18f6db260221decd410d5cca212917a98efe85dbcc1223b3680c0cb56e18ca10dc8d6c6957ced8da1d6e633b3b979fa000ac7422b12d73e37edb664cb51d2c9936a3c4982749a7ade83e5b1a4965457dfbfbbf9a457b6a5bf8bec515a567ff0d0d7e0a3bd95bf14e8cc66bf0b55cb04a69358bcbf0c3b125bffd5199a6bdec754b6767dbd7cc5fc3ef4ebc43e644890f31a0033c1bcfef49bae0315f21e99bd8d7a603ff88649816fb1d769e44e577d23b844c752c65cdcdd0af8ef07cb1b33e9983052f54ea454f967dc0863706239d6f2b91fe8d4ef3bbebb18fd221deddb0794695f3a3280d74aab4c28527713477b5dcf860a452081af22f5d8f7638c0345f36ddd4dde4998f1e0ba5227cec5369f5dea922db38b5f3cc711fafe58605d5339c02596ae790a7daca91e69e402879177acdcc99caa14d63bffeb8d5925398ddc02f0bb3f99bc5c639ad57f6355ab103f88ce645ce74309e612234ae22538745ea8a701ee162f0caa022ffea929219a1a00df9490dd8a5659eb2aad7ffaca954623b1214698c30ce461766e32177b8dab9798c0c4f73b2a0c0d7a3baf10706f06f6b79fe57c28dba74b5124aa8b296948df728f65bed62370db8a6bebf0ca7025b422b4274ab107672248d85f0eabbb862b0546ffbefba13ce7e3b4b336293736ce7b24a88f0c0ea888b5ffec1c8302f81cc98dff521c41a4a50eac913b2d229eb83967c5b38a6fffe120e1be2f4fcdf32727cae122a8735cb573ca028a36d0e203d5d42b42cc89b1be324461d1527b2bdca89441ab30b4d97bab8393ade6b09523e91035d7330a7282329e638d3ba8f69fd460ad5635948f7a2e7fa110ad401caadb9261cb6e60c6dfda362fcd8bc5d7f333c660be3781033374f4c74d0b1e0d1b35e15ba9df0b032971c2431c935064793f1c183da708b93a07a982cd8098dad780737ffcf587dbf191b939f512d710946ef8406f14aa35f06f04402c9e4f0a6233cf4b2f5265a5bac29170d16ad860d74be155cd00d3fde9037babb4c4af106dd86b49db6602e5078cd1845c0bc2d9a43e4de4d1ec1465967d9602208447813cd6bdf86bb10e3e4a48ffe0df8634efadeeb45a1836ea218b25ea0fea6d96d171c75dd36ac3d606058f7322e66a9d1736b5bb41fa91d3a639a4ce116cd12b858f12c177530f08d0cbe8e1a70b1969e4e13ba929035d6f682472d8a3326f5411f7517f30aef30522ffbdb1f9a81329ed3fd9247bcd29fbebce088051d588df1b3cfbedabf920597123a66a9768086b749526a3b6b26827a5b8ee6b99c0cdfae5e28a9355ac17744fea1b821ca5499d2fa39cbd665d98612a578ce0e78eaf56166a8616aa4238f41395858ed5fa573d82cdb3c807194b36ee3c7c86c7899d6f314766de3656154760b88ce77fd1c1daf285f45a159ff12775ca25c3b66c28a4ab0bb55066522cfccbe59a3266b609e4136ee6ea1e3c1aa135a3213e3080c1a50829ea23d6b0f062999f25e61731afe749db040e8d882842b239e74cc26208debd148dbef41d00377e37c8792dbf24632a7cc42deffeca6a8000f085f8aa5eb05e7e18883ad0cce9ce51ea7206c8f7d629a6bfdeb22a51a7039ad5502fb443c850a903163786b6d82e7014573ee9aabecbfb4f7780755e86d169fe51e40a58953837d5ff66a97ea0f304ce9f329bad8b75ed0baeb77a51685df0e401c226fd9579ad199a44a354c2d0a281b08e5980dadbfe6ceae3a3caea2db21ec62694b357996b468d5e2f09cc3bbbd641ae9dc52b5291fb92718c4b7ab5301735adde0a4a1c14d53f1f86de1b88c324b91fe2dadb7e6a305c0d9e23a888fd55d6b45d72eb761c5e260555723f6c5b059d5ec33289c3c9939e044403e21d7c630fc6bd7dba3bf439d8bc1546b64ae5e144e7b97ca4a7429deee2386cb5e73fc76771589b44d23f00dd8030cc0ea8f65066472019baad57d7b543c5ce927aa9eb6430c94c09dd4f4b9b0e5292a70afecb7809b18a4a4a9ba98795768a164c6d579c818a2087c1c76297c2d50b1de571cae08bc85ec21360bbec53e55fafd0dc8466e005892d0419ee6a2a42b5e1ccf1d73669ef07b07c69673a0b8c9fddac8a0a59d8e6068838c95778c126238135f168e0009ff5a409f8342728c6cb1e33e841ebd8862927b458364a03f9d47a94f2f8840c55d90b209fbb0a383e81e01b99d3a36b70516a2b4903648f28394c7e692e78d99b025474e26479b65e24c1a7f128070e3f2fede21e274ebf5bc26566d64364e4ea122e5b52b8ec3fa054417d90c79d4d4d15219d3a4a6f00ef1063c2cd0faedacd78e7685320d8109f60de10fb3abc85149183a13fc55c106ca3a636bfbbdd17bfb71e107654d3e5c60af5e692ea0b524025a29291208c5a4eeccb17210066283b4d40e83ead563b9e933782fa6e00413a51fce5d0f4764b206c31088355e088cabbee540e92d56e939a016a842f11be7da7011f61b9a06f6b92867f7924c2b5d87374e888bde81b4f9fe201d2b5d64674854da3e5d8a133ab0029d05515833bff14731a1f76f4be1d1557dd688ac455d98d3117bfe9ef34492599cfb970a887a91f776d456681b3a68ae171b8264288f71f59ef6255f0fdc08364b218feb92560e4e0569d0525b856710d534410f74c77cc369f7fb53cdccbaa092be5e82ba1b1154c6a88cb4728b75849f68ec3491cb61445ac6a80496db4f9f591b2f5766904112a2d9b316c8143b115d01ac5ce763c7805aaa53fad3d0703b888128f3ff7e478f7f436c00c5e861bff745a80ede5956804fed25bbea74c47d083671ddeeadcad4472fe0fbd1ce8e96567d09d2de74b74b23d545d1458ff46cbf82339d9ae573e7e0e5378e548f6a9f60f0f6304f7b92e9bcabdbc44ae9a71096af96bc6aeeead234ad9842b6f39ee1fee898b199378e6304b6111a634986727504c1c1c88fd69d29cf2b9e5fc2d26419ab16dc247054c0e1400d5df778389945c8dd341b92df4ea9921a2ab7c4ad319782993a58ed8c083d8ff7146d3f668dec44119ecabdaeef9b408a6e27c1d84f62b549519e78dd44ffecf8c82f64b85754c086863fd9eb87e61fa5f31580fbc6608c4dac5cd7ef7b0f9f3800a4afd5fe63836374e1ad3e1f74789340eacabd9f7b4fced0fbd36bb555f0de4434ea668a03d7d1f018034dbe2c927cdd0f67c6e19945f347e434f9fab827121c47db12041b02f8834ca1c36cf6b78753ea1fbf94a4b7e5987ec24053238bfe11454c8273934dffb4e5504631ba2ddc29e5ba50c183edcb4b3045e9c77b65c7aa97035edf53000f0c4bd87e16603da4e767ff206f1e2fcee864849b5fa9fd9870a3c84d5142634f12e7011522d12f0716d7b7d8a65dc516f88148ff22959b97ead265f7cf4abee84e1f93b05ef34b2c3d9faa1f6e28f6ca03ef59bd182787eca08ca00564525801485c55fad0afd93ce426a09ed0670c138f157f7c494808c01a3a431f15437ac38907109882ee205e93d461fdd3024d18265d82e4bede683be14214ecec036c5698868c357c9669bbd311b4e380e102024f2e299e7ed2ed847c0edc15f07b76e1fd439177c490fc7a2b4563f8dded72f893f03d52910de0c4730462412993e08c41a4e70664c521c524d834e5f50ce723780c87a7007689224f8e7019a034f181eb13558b641c20c14433f052cd27a7aa88e8cc46d2f42fc79613cc455c44f2e583f7a5aeca7c409816bc5fe66f27fbb64bedd7d70f711bdad3fb3f6c65ac2be391b89d16a0cfca721fdc484ae2f22b6f48836f01bfd496848bad9136c455e4a09ebe066ceefc0676e9fb74262e727ffc07135b6ceb05e6ed48938a4d802665473170a757baeb3ccdfb82ac215c8d3f86100364c19beb533c9114f256a106f5fed3384a800e84b49eddd7b6e3722db234ecbd52a8d570279aef9890fc30dfdeed0b7db58ef1afb51218645a157b39212f22a7edc8a37ba82ee9872de43498663e61a8b12a6c5489513390625f7c99d49e3a2bfcca0cf52021074a91b9b519d6165d1f06fc855b7682b6c294687f3513aabcb0495519c4d59ad1478421bc4a76a0884b7cab46acc5ce2964bad98bf5267b319e9a12d0d110c2d0e7cec44f138d016994dbe0b72fbe5c15dd9a59a9c15438215cb8a93b0418c08b92364c795c65648963ea42dfcda8550295fd91e081e70a12546bc1624537bd8ab1865e3f0d44ef6e1e727ac66ccde076f4aa28381d25188eed7a024b7db3e156aa84a5ab0e73caa22f3b2f74f57326fb626bc7b97d578b1c8faf160092d55376e7f9c6c4473a1eadfc0d0af251e34e184706166c89c48a45a2d0a2896ee53c72ceac6c92a0e01315efb0b347666581560b44bc582ab63e8f8ea651ecf72bc3d3c9673d1e02afd0646eebd17b1e40e73b16ed62854673ce84bcf9c83317ee11203ff0e16f53ed7e21e3880c9760bea751d0c9affcc64463ac9291b266b5784de19810018d7de344d5b54d0ea11325ea20a29f4cc49371258e7935b58bb90fa09f3b8f458166d94b074c037ca421bed72ff239e0e593423bb2daaf79ac0afc32e092355452f816ba3f107201a571d19706295d1468b0ffcea01bc5a7d092872a2f04cad70819e4ba06696143aeeba6512db0d49054d1ef05e1a640e70038f7b111f91575acb38973e2bf99eac677842e2ded66fbb1de5b09fce1e7e043e496ee10d9dfd745ad4e0c5e7ae39ff6fdb5568c4adafe88be8b017936843ba17eaa0ab30df0a4dbef7baeff02050a45657ff0d52efa40e05bc716e10cdd9f22ef7c2c82fb1085776158804fbfc7d2bb972b248d018c6ac19c5770bacabcb5cf1d547d060c07221feb2dabd51af39f607c001c3e2a5923336982368fdae725aff17a25c6a89c22de75415619794f1b3dfa48fd6f1329143faa9291e5a32696ca53354b4b38992eb9e7ddaaa445a5ec59fa49f2a923c4e4ec47cda8468d43b1292cce171b22c4edba2949cffde7bbbabc654d2073c2f13c43297ca43900041dd3628db2c0d0e508e823cdecacc5592e6f219ab255587ac44a36e6ac47643382d0dfba44c2a8c6264bbeb1293a4949ef791878ced74d25230b5755e9f621968a29899df4a7142ef0ece03caf2eda52a6e230319d820abb028e750f82d19ff6dbe54a7eebf97be40dd272b7a610df3bfbb3530c46ddf50308d9765da05d471a1d0c09a4513f45b126055d6a3669c2cd95f36850f17177c7def644876b247fccf9a7ae584d02d95de38e879d85bfead01daa5746c8c4f9cd2bedc5d50aadb0d216bd20e207c9a1b0eb74da98be9dbf0c3ae00836f060e1de98c4e38fa68043f51e56498aa81c0472e7bf3da20788a948959e626794cd98c2cd8584fc66269efdb67a109858836a6a7e789705880a104ed6eb4f23da9187417138926573262bb288325d533e873b6159a6d2076baa5ce4a4d0b7b0ea3615232ce3f412f40851dc3c85180483afe01f2051d5f1d5f1f5d3a7548057ed44a92fa890924b125577427a7c2af34e84bf6c7a81880bf06544e2887f93600b41ad2e8a465458f59407ade91e7968c88d41100f3fd39ce490afdbef59d8136bb788e97d0e2280c44d68e53173eeab1952ced288929eeed9fa9f8483eb37b8362da22527efe40da80802b2fb837103685bcf7b8d83d147f6297da7ed3c9996932c63ad30f18245c84e3ddcef57ebbadd31aad3c51954f063a7af0ad554e4f6ab3b3348411ce4714da6812ab4f64216a25bc9a2d95c0f3149fc9f76e13c0220a6e27abd0279f3d85e993665f3686060dc6192b07054eb51d0aeb3b2bcfbd95caba9a0d51a0f95c424aec45553b62bdfb6cc6fc5330ace9a1f4755880c9953f2e2190d5832e6b37bc66d93c27de78ddd5622c7a8ca85a2525f4fecbe7a1f572974b9290ef10736466d5e0b7418036da0e4ee0222dccd4dc2b74ce01dad94cc4b89115dbe0079046d410a9532cd13b27189b587fb11ebb93250c8986d4e009c9e48aa0f320644073869f897c6441d46986c01c0fb13e6cce9514a7e76046cae6bda0ba930ac7125ef0eb07bf6242c105db75914e987c67031e35bf9ff78dfeaf967bc91819a0748d957bba78b1545f8088f46eb8f18948c502e8271d251613892164631ed770e573f6da0854dc172e6e01e4faeb36c57078f59474eb538fa807c0f30ef3beb8f3a6977e77b03cdbac22e8cfcc31e2b17cb368d32f971d5b3aa007b023535a090d99f9e19f377e426743a01d59398fedcbf8df1ccd8cecf939e6682456aa13b1c1c290abd546facbce54ca46386e98dafcbdcae9c5493cfa245f64b80f5486738eb4ee25b06b4cd86fbac9d2d05d87f97d76aeb2ad68a7ce985f8ff3b40f2caee2e584f7b710ef08c9fa215bb762e7c9dcb80d1ffc4797f6f47b3c5ffb2660c45cd8d78a6fd44bdd5ba75349642b32ec88f6688a287297f3d7470c652b36ed646b03686631220db69326e2145d22f3a200c64379b88622559f27729bfabd0d0f7bf9aa03b1868f350f1d505508d6a4bad28c206732eeb19cdab1017cb0255a162e303efb577e5ac92ddf20740da2b0778ccc71eb1e08e02a18583b80021c5f18f02b79a59975faf38e00c509c233c1688e1bca7dd081188db6a1733e56ee86a8405ffcaafe09ea34ae16c07eccf6321e54de9c8800d3d54854115b1025286b24bd523a740bb6931cec75b55b94669d098fa96aa2157da0ea6f2c559e0366671ec586b58938e8901ce7c1f6289ef16caa8ce0b75484eb05e47646f54068051506d781f0630c2c7ba51e70055e73431b81db38f507d5a86ea6f815bc9fc9a0ff6d81c86d8a0c0e90460f04856587c844100906c6349e3265d2630d1e14bea680d342ce9f76aefb789027f3d8f6630d50e584ce8d73351565d745918c47ada243a8a8f908a16b6fbee3f7c292598b6edc62dd14cd4c40cdf9262e4799911d00a27e12fc3ba2d7f7bde1fcf5243767794128706e081827c89a6f7ba3c889936e37c41f3caaf36b100ffab61010f89db919a6fd3eb07f7091b3e3cc1a9bb997377e0b3c3ec90b9b352f9ea187db1584bae05ec20b78eab1c5f0537e2075799ef8efc3d8773853eef3975e5dd10526c2db1fc07d58a3d251b1ba0f206a0872112f078ea27a5b84ecc7d1ba299001a4bea6326c7dbad3ced7018ba7513ba71ba4464fbbf8ccb4e70b2e5922b3296307feb8c2c341868b48b811ef9c6f39e3debedb42dc69c2c722d093b8388921abd9097f4b5567502cd87b8f505ef8c94143d75a6b80640124a0c3a4595bf9fd4e80455626a36dac5ae6a7c6487f8c8e31e374403418761c3fe95abcc71da430bda658fa0f2db30f780bc343427e78dd58261c2927352e588b750c597bee06409ba3aac74f74d5de16a034a2d8cc6c5b06943581df36eb6a99dc6f07025daec14b10c14a71e954bcb95c925175f9c57bdfa666c6a6ce3ba6ed77e951d4ecfc275e7622e0111bae0fc28952dba47722b445e51684384badb1f8e001a67e0c7ce7483c4644978c406be4cf0cadeed4f298dbc8cb26ee3faff03e9d5e91684cbf858aeba1d49fabca4572961644af83b39df3da0b4b332ab1063118468f2e1e1286b8fcdc2c740a9a210e67063c7113f43840914d4dc19d5f5872d9501c2a01446f34f84b98cf293e731aca52f1de0612fc247707caf3f8196b766911b5068693a3915686b60b7825d02a28930140cabe5e21f3d13f64db7db3be4ff1d62e2eaec850a00400a377febcbf1a3cf733e254d2bba010177ea7dac5ace6771c1b59e451f55d4a1541b9179d3c07b72041dd650e74047adfbbfddf15e4c517e358a8d2b4e206cf4040bc1f063389a838d52c6d45cd994814974de928d8846ac8609c0875b9051a2e3ae1636c3818768d784fdc2d4ab72e42bb0887730a7cd637bd93e428ecf0a14b9ad98343bc2ca8baa5c840395e1683e671be4898ed46f0bdda30f422f051fb14eaf4fd21323ec52ce82627de7a1fff8c65ef9aef135b30c740e3c71865918e0695d44f992cd74270a9d9f1a1413bd781021d0cf9ff221cf08c3ccb6dbf47e0bd45f7e8f01e8ea71275544c163612d270d0b6fd5e13441ba6169c7f875fed999555c057da89bd797ee54575a1bb0d46d84c5e0a6ff239c3646a936219d9eaff2b5fde2accf0fc203243fe3cc852b3cb33ff72b2c41e6b9ac812b20189bfc8a7ebbe91c03be6c331c94c1ed01e9f7ec5f0448564defa62082d8968dc5b741f1a431c8bb69bcd9b24a05807fe08f3f6cdb9c606bf3508a5a221493851039956dcfdd44c8c8137ec8f53e24a051be29458dcfe87105adbbeef2fdc911e1681f8564890349070984fc850856593cbfddfedf6488716b4e60645c5ae138208d08c1ccfbad490ee713d7622bbeb189db841f3825e7720d7ba245c6f58203b5f077a96ffcebcdc5f552e0f56f03b021574630ffd8ae7cd37ca9189a94557888d995c6b55365df147a6a9fa49ccd5eea7e4aba9e468497a5989c653f0001a282908a9f07cac286e3c0839cd879c6c4cd97b9457c3712cc6b19a3b51d012f86895c7dbccb27aacb1a0dc360facf94e9b2e9ba57017300220d45e88e9c5e872e868796a66b33c7b4a1aa55727066dfd582bd767a95c1f5a27365907b24e1b0a16257ffe44db6be4c60df5f5aa4065091235b1535a0ea995385c0c6011d5053e70315ddfedb783a983ff30aa1fc778e247f0bbe108ab7953d2ca0b0aaef74170953085b7d7b40e1a227307dcee28042967d159994bbed91684e4b76fd0215a50e397a9ee897d75b71fedce169bdeb14f004c0cf489c5734ddd40a4182bffba4fe9cb1d1c79606510dae405dfaf57eab39fe5688b593bc27a3a72539c28cedbde166f61aa3e0936b7f1da41a0af202b079521deb6109e312c2ade48544d2b498c07e91a102dd4650ce354f3f201b3ecab8e85e21d667959b43d08f4e90fa18dca2ccca8f6ff5e9a902dc8bf5c5dafca2ffa860519c139a6d2df76dbb2f6ae1329038e90c6f90421d24fc9e64809602e0557a6da43977ba2e880ac7f5a88cd74191aa353f8c161b553a7cd1b3d9b8192bc346cb4237f9bd875cf0e52383c7c2b2ad0af7514def3af84f446c0b58a6092b50f4c3521e036a1fb2930f6e4982692cec40786a3a8367af683cb79386c99a89046c9dfd74fc8a9f91da8dfe812795585734fdb0dc3a6c228f4cfa74ea8994ede796a16ac34ce5ae02ada6fab31d0eddf5cfd14eba7d10f8cb5c7cd50d4fbefe025a17c2925a43f50cf4a48a68cc9c65cff73b6a5db21ada255486df7581e1655ca1462c6a906c1bb797cdd8269c0795eb95822d4b43536fa31c60b9ac89c5cafd5177d1d25527c90b7f6a0978f516175392efbe0e968360509c528d3acd32d3ee54f2d852113ea71192c248e33f93930fd4ca452e15725431bda480a5b7f02b3690ff6a722d775cd0b91fbbf1e244b025455bec3126e7f450659dbc77adc678ddefe6afbb0f9b9150ddc78a2946f1179fcce9d9a133abe8b47d866937197e63ec58eeceb42072ed9ae403de13d364708450be3405a387d765eea7ae6e62de936ab260f0e6c8c319b5b81bdf38f26462ddbb2026e6de40696c9e48b4a3f0afb15fe7843cd77058bca93f57b41f09b895b1f458d7cb4ca147d077b1a35e2bb864d4dea2db117ef77f7f63ff86518229b208e3ad6e3c55711999602aa2287bc355cf7f02f41c5c690a3e0a5a7c54c37f61eb706913c1617786cf40fad98748962b5bb2ecb07e707504ee1eb1bfb23682496083d2f0e3d87c377b016a7105fafb8f7d5fa737c124e51698864c76f241f9137204322a292248d4a58ac2922af9b7293f6e7cb06cdf80e7432a73ca9d4eae6626dbcfec1ca7a30453c34a637dad95a0a8c7b34308080d20f7f26ee33ac467eb86f0f25c42cf556f8f94490d867f5c9dc053941a1c095568bcc684e8510bed4a992be2a2260325be60e509b7cdd5d3c790f8665a304920689b8eff016b8b082a6775e9e74da9dd99cf9ed08adb18c4c71f9f732ecd3035c79b3225580fab7f33f9b44d53412b43a7e2a7e7ae37b1f544763101bc7a265e2ec59a3f12c5d61c0e56d2570d89ef2091a3e8964a69062ee79b94592cbf9361451faf945a1571a56386b54f3ead5f3bfe1a4a2487fa81395898b2c3a724df07b3b4576e5688e5e3d992477d0d35e15e974eb3db8c7189dd3e7571865532721821897b132ea59a9e19816e28a3aadf4f04470c01825685e14138bbec5d70b55c36a804cc0bf4f89ecb5b149a2794c0d7ec0d3edf9032df0e0aeb773be7660e9b9b18d8e115fe68aa96292019c279ecbef8a930bddf8bfe2c41958dbc1d9de69cf7e1e19a734a508c22f27aee9ce3cbcccf22c9e396ec4a038e3fe4b7259ca628f30c053f4e61190a18be0a61dc59c5c91980f398deda2b5a97f0667427ebb407379f2e17cdc92ced2095b8b9ab64427c80cb9525dfdf09fa07b0fa3a4c137a016aa5436b190ceffce1806c40308baaaeaa0c96d2c0824cac84878853bb9b5edd34232c8359b1cc0104860e3c945665273f4be0e7aa4c5c36b67ef9059d0bca653f23d1a7b6412ac230b086f6fe4ddbafe88e5aacc4c3a260479c33991aec255f30ac1a1f584371090e05bcb697f9740e4ddfec69377184f4dcea1f5759c5d794b2c7ef32663f089c468d98c486e1990b15457e652ade6bb8206ea586831e48cc6b7b382a08be59437f500367f48db070e8c9f8e9c690c076b832ae6fbf7fe0cf03d0dd4d6847cbc86157e3e8098623037071423d3211e9f44f3e205b3671076423cec6e4ab62c6f296a9228fec53588d524745a997e950fb8b98e590107b2555737edb36fc97b288c34ea6a4c67cb9d53953e7751d9e5b52144ae3577426a2689ae7058d816ff853934f596fbe8aaca5cb9c11e8ebba74c3935c04f78af9e66641112a2f6271fe1babb32138fd049bc3b02aac4b2ac50214b0d42eba7b7c59160f053365c8262da7b682e846ab72edf891059ee601456d0e12bc4be66f376342adca0977db14edc15ac495e2ef5c0a0c1636d10199c41c79621b42c48db36db0c26892adc2c5a72f3f821054f14b5ac7e6c42be41ac9791d47fafb9cfe77dd29f7e8b84fa6c1c1ba0ec441e4dac745f1aab796d7abddebc16a605eb6ea0b1d75f45162a4ae8ea52a6f9010dad25633510917f9217487da2f7255535978f8935c60ab78f503b6b94709f0657d00828cb0aced3b0b9e4fae2d08e2c2ced0c5a9a6e3ffe18accc167d985eb28168dd2b8d63a4046dd51bdd084d40d935e1bfac61a265487ab323516a78a8941eda0ce1f8b5c +Output = 7bb462b6025b920bd517af25a5f2936528312352c2dd1e81d34d53376eaca7e1 + +Len = 74520 +Msg = ce1daf6b11023090e40306c947ea5edff166b998a00ee8dcada33415e395dddc91c9c6d1de9a6eca5d1e2231e1aa71a79398e1ed4147e005f964fd94d768588b1b6257067ef79b75c7a733f999520f118ffab7758bca3d424a576f583c2752009370ccd39a21a1d74926a1ea16e81f640d14a4f8239ee5dbc805f328bbd8b28422798cfeda2166380c24d3cc017788e9376f113db4cbc2189af5efcefc85605df007ff4fe5fed4e237293367010434e83392640de45aba40e9afcd10a63543d324a18d9064c0d21cf3bb2882bf990aa8290507305b52b79ddcbcf3b761f14530e7d09e87fe70472d68641ae7e23df2734251606ec2bba0759ca3cb8bd7c04dba601a9afd5c151d5ebdab715c13f9d48fa5fdd98fc19e5d1150ecbb53adaa44bbb80ae9bb26b73bf71b1896aafad498457c91d85aff02d5b921202dd98eb710791625f386035e8940a934ef993ed627ddec96c79825eff2b537c688e320f09a3da3f521299b13ef809086e5f08807679f1f930d11da6d9b4cb966343a0b5cca4e8601d96a97dd5501f797e1797f7041d33d10128dc785b8c7cf8999a6f80389f6e8d184139fc5a30907ed49facc189dc06d953ed4943e326ea3b61fee8feebd7bf1ee8bea5ad2c1e1e712863c160764afd8abf9ade8a1ef895a752edc77244f26c8df54b8710c97d1c18e010706467ce8a6d9abe26bb4d8601f4e2e3659ad283f962c49448b7b0e20bae7212244dccfb3fea8bc39c681d53b18ca87c5dc922e0e825ed15851280c18fca74d5777d14458089f947ba110cf616d70a151a9da4bdab5fc53ba6b1a7affaf55ef6c472ec21eee469b70a367ac1b47c8e4a2678d66ed578e39338059411efa7a6e2a5efa334fd5253adf759056b1ce5bb97fbfb4678d8f9cea8b38ee47bd069d3259613d7e31e7c5d791bf93b36b29b086b15956350385afce8a3de07624fb46a3c1fbff8b0d4caddc4f2876ad908150b401dc7bba97624e4df83437b59a00fe2929d249422a2c65afdf58432b6afdc1ac34f12bdd904e02cf9cc8fceb683d4b2c5b8e228bd2ae76ba09f802143fc68dd5153f6f86387052bc3f9f3602d7dbb8141dd8934e4bfa676397b0b95258033b966b6f4e9dd5f1c67ca961ede12d02ca493858a373de39c0144f2772ccfddd5459fd28d10bb0f8e677a2b72970b2d90b3374b55ae2d3930a34fb06346a767c5f859413ffb611ae3b16f249f397b089023a9897c083722fcb2b61f408140a07e482f8d7e0873f3b4cbf60be523e6d3937c76ea8de3e02368e604a9af4b202a66cb7f11d7c6684c6a1dbb6be4f4d32123340bc8dbbfccdcfd83d7d9f032ca6837e8e478ddc3c2677c3d3baf3f1ac473c7d0f4bf15fa319233329c4ad3a6a3ec3a26ec1ce07ef6e77390d35024044f4de9d9ae37ad31d2f5a268ce569a355129160bf29890569a4ee8bf3ee9644fb81211c4b4bd01e50579b3acfa97d45d36a1341ea4565df90100442ecaf5506ba352c81894d9c4826d90ef558d89128cd8d71cc55de0b9c4efadfe55f3ee78d6a5a2854bbaf865a86fcdce2903a4c552cc4d48a69bb22448aa9aafcb664f5e1f1363c1e4b3a355b57092d86df9657d3d65764018ea653e02c668b1058e9270b39119165a0b652538348286baeb659aab58e48bb2d6546761b79aaa8ad95241228354eb422eb844bf101f6186360fbe3b0b0a940acc1a211412a304c1d3095fea8e99c9039a17449897cbe15685de585ae07ae16758210b685c14584108121d8a074a3834d9fca583300a9eb2375be9899d980c7ee70376fcf8510d9ee5171a7f71f8a14c6ae2d7dd7d7df21fe6f2f25586f46db8152c04307bfbad21f682c7397327acc0c9645c25d47873f5f15df32d31129d895f2523b16b76af80b8efb4467f59a31871fbb2ead99cacdb02d77caf20751489116965de2b549d11b8b86234faf13cda01037c9b015cf5458809ef29d98e5b2df8733b354017fe7b526741737aa0c28bd33609c4c02bf5cbfd6fdb4bc0d0d9fe60dd24554e233c243286e29072caec8484edfae6aaac16b4df73b1737aef3960e6f1b19cba28ee82b5a1b60a77e2037a72a5b08f353fe0b6aaa0123f6c3bc1fbf77b5399f87b7e3d78124c400e88bfd448f7db0cd469dc37eb8f7e1e19493c261eb49adbadad63bad68305df8b117a08545edb0e2cbc71bf1eac458e1699e085c947e7b02e2157617d6e8347823ebaad41352101829a49c2b061191dc890578193afdad61e99a1e7b92f350698430a398c255d659aa5bcd95d48592bb3df19bfea56e4bbe358dba4365fbb9b11d0d11381a9d0c8c941537951ec96567cd8af7749c775b000f17d3d617a5783a36ab7e1ee3d3b99930f96094aa8412c781f716e4e9c3e711bf60f09c709b94ea173271b1e59ee667c630d2fb415f9fc2a06180b452f8f6d88d8f99fd388515ab07c97359e8a79ae09ee11530ab02164274efbb4ea0bf913dc1cc5761360a046450980b7eb395ddebff35af9db0147e2e43ca51189bbfbf28a241b03033d368fd38c8c1880f11b77033542aa8183ee06d5619ca7c0aa1888179132ed2f788495d08811de0c4c3315880650ebbaa2743e9f505ace0b60cf4308e6d59b04ad0af6e07eaa8ec9a5252892f90e13d2f77af8968b681ae68a90c1e2975b830f453a3177f2ce915596723ec87ff2d9670d82d35f653d04de620d7319253d3bbbcba2c40b66e68c3c8a9aa69d2d7792d32f0c3d5e8042225f8185d52103032ba6bad53d1f5d9ae5fb0c1f1e956434e6c40677c5286f3fe9e6839a76aed345e93c9d31fb38495424fd95600525d6933ba61e65d921845ec20fd2cbc5f6f86deb09ed598ccabc9acfd0b11dd8e2d71b07f5c15707ee62574137e99a51bdf4f3a77b25ac605b29e75cf0e9a92830e844d24fa9bbcfe38b91fdfb427688485b6fb52cd0bb247e03b242fa998271b4aca930f032149fb552974ec677f0f84a8e4a8a8b69063787fc84184a6b3a23c286a09a93f4e205b869efca35e49a1029100c9e03690e181d56f5536cb940dd0ef8c385a75cb480813403d6a632c27e58933e66415b4354b2b56e7ade1e36fbee85aa68b6f3fc9e84436c1aa3cd0a817d6a5889b1ba366bdc8a57f50af47d1ee5bf9dda2f353ace560a910ccb2de2c7fc07d36ed0f057cbef685a589ff693a488f946509caaff8e6b1c0b0368dfebc0591e479c2bb848038fb1ee2c097f1b2b4ce51c426bcfab5d27da42b5295d75e918f01d882e5c679122097bd5b4086421a5e58846390dceb930d7c098792121c0b04fddb9556736f34ad18bfc3c2d0f06288d22c2710ffa310a971d03c4b56fe5b36ff0a64d6346a86eacb6e60e579c67494e745d90208e53199ab0adb894c0b6a6e30ee552db173ef1ed6559a7126cc38cabe56e32fa2b7de24513ecb149c4b1ef3b70ed12291915a9361f9da2d8109977280e7ac5f7323ff938bf574b4edc6600fbdf2417e7ccdac8f95e486e2328577d354819c5923307c2e83b63e31e78519086a230b091c2ece5b999d0858e148c23663ab1be75be63d3d5e099152338f2f27e528998b16bca83f96acc657355b5ee3d5ed91cfc34e2b084776d5e079ec8cb4578951cc157f2282b49a2aa7d6c53522d1cf66da026f2cd7648672a460a516f7e7cf9d93bf80256e1aed9a0f6d8e2d3b7fda02d0c15229f1ddc0d06391c1b737be81e4aabcc69749f1308059a2bf30750895ce79a7fd0b9fdbad57e8b44856be03278dd7b559625c60e8434b1c5e251a9488309d5d7ab82986d370fa7043dad2df4a02e352426cef909f4bae8476f3704a3c91038ad11ad705bc81606db92dbc7a71aa963a889f4aa9dc0049810c84c053385a74d70818f081f0f4e354b236c4fb24edb71633e1b4d228cae6bc2abf51d704f1b8eb2999be21f52f4bcd36dd318beb33108d4c1c77330a114bdcd78c6dfd29c097703b87870e559c607f4e0a4d514fe46748d937d9f50a3d418a1cd35aed2e2dd90b47c9946f98a1e91301a55e76d76885eee51a2340b0b6906e007c61d09ba2456654472d6d44a8b0305896ad210c28322875ad9c3b85e4002f8b70cacef986a4296ae99a30e3187b7f59c5827b748a359e93d88e0f10305976c595dd0ecf41befc919722dffc5913a80e1b25ac99f758f746833fe3d90062eab7d4e2b9a53b5b85d2390ea218d340527f7edddb03d861dc9796f8e069bde434681620f604db436f34b7a6a3beeec925b3d7f330389319f48cf9012e47d0a8fbe041e0ee728b3d60c0f93207761278cbb20fafd4c29248e83094a2f4fb9f73e8283e6ac879b313007de7faf9c9a713e9840c59ef293bb65f884f235b0e9410a347f606ada1b98bf9736a469f3d15632a32b839a8f3f82a029e13cb8a071645d34550fcc571066ef0aa685d215cc43033c2fa9728aa306e7979c6e4a96e8cdc202b339337710283902bca88a8ae1c42af3fb9ba97d54a486b2152b4e2cc609b340089142c2915947efd790f5cba866044aedfeb1cfdb081809f9d845ba8f94bb4cc39c7cb22a86765285c3a640868549a195372dfa9c9e161fa919b3c8abfb44b972bf43de321c6ebb55a50e8202be45a87fd970961fd2fb63a1543aefa1a9d9f6a47e3a9f4ea77b8ab5d9b128b38d92c01c5a2c2aeb435266810c2d98172cf584c75dc38de694275124c6108d0f6fab78e93da311656b95a8a6c61e4a62f131f469d26122808f1caf20eebf277cc11a4364f887f234b84faab1068f7f2b92f9c5fa70a5e5a2e4a5e548d81f90824e49a01e1f4d35dfc5eadd0e41f3cec79eb769f7bd045fd4217da3fb06b450c653d42f83166564bcf0e1b03d0cdd81cd511550e01c0ee98ae1ee5bc5ff0fd0bf6e24422282630752d5eed4bbcbcf60a3667e3b5222181b3d92828d28259498b419b4788ac7b88637f14cbb19032bc3f05b7c59bc43d28d62bfc4b8902ee5216ad32f330a6af869e2bf95c3b34785242a8c7a6c8d05a098a0c64f5e9c5f74033a26df224ff0854ad9bd549f390d6e19b895f2c452fc14c56e426cefbb4bc3b6b8816e96c9dcf1718357039e18d9391d30e49ff19c7ba1ac31b0b7fc6b7856a44c8f3830e6a4bfa686391d50c11f98971a14cc84c828c9b5819dbb052b799f548c8cd66144dc622248c02c57c054ef2fda92f2fe74781f69d475e08a89a4105fff16b3a852d86bad41789b03952dbf3ff8ebbdbf1fddf541a0b5b30cf4ac5c2f0ab97a86af4d4e8006eef3f4cdee8b500b7b875728eefdc58ce9cd0cfad6d53a35f1757ca89f8d431f8fb19bc93bd60888eeea473e1f9b7def9e78fb1ad80e0a073b4f1add43aa8ee1d77e69158a11b1d7a2411fade450c34f205157c3148937051361b1cbde289c0452950d314de0e49e32464126d1a04e323be0b38200b929a5f657f1d2c37a12ed8dbfd8bb1ba629331b444c076c2c772f2d919ee641205a60709c5bb098218c03e5395c1167e3f83cd9d590ee1837c69c920e6a5e4a5151cb0e995fb3c0b16fee05ac17b2b71cca21da64c0396a64b510f591b65880ce985c1ce95e7ad1ac27124b729c3d8dd32778a99c5a77e725db02c4d5f36388eab69a480708645f744a0733474a00508988b7d3d6b037f31da1188c45b21dc74804ec0c7cce0eaeac51336974a1b9a3b27645c59e71e8229eaf98b86b72d5c0792be7d6b52fe853a6d53d3a9553a7fbe078c90b6e00170a4b3f29d5a1a63a08c09404333a9e7ff3063e7b4323a079dd95f8b821cffb22fe8608326092cc9914e0d5d7ae879a33e14d0573ffaa48adad457e79952ec3ba93d17358e5c966a1594c49b8a526c3b2c2edb2cdec839ca1ff6192a3c224ea3c4ed008e3d18004b15a55985dc3928b6b0c5adedf865a1cf5589cadbd552cef36a3f45189b0811767acaf2a0d665551cb1226d22f49a85a162d39583cbab1332827a0b5b11f372f22a4bb876e19e9c76198e44543c2d8d49301da0a986f5c668f4e77dde05a0cbc70f70d28e66aba5cbcf4f5a0a37e660cea5ae13d56ef88e9ea8cec029e0d8c3fe10816870cb551723bbadd6cc4d8fa738abd01790eb7b14db8577ffc40b63029d14c5a4a57a649a86c5f2e022e6ee098f29c9d4606548ff2775296038ec0931af0585acb4d9a0d8fdd564a2956acd2fdc06e271d04425f88a602d0b0bed92f839ca09a82552d0768fd34d41ac41f2c0272c631665f0dba70d2ccc29c875c5fe454b99c1814bbe1f45a7f3e8f0d42565768294eda9d132b3b7c24be2f4eb6becda707d1e4e2e307925399fbde78930c6d3f0bc1b234ff1c5910af55d19b94c690121fce91762ef2c3a7198e81bc9da8a455e25cb5bd3e284a1ec11c3be46301ec1465f47614fc3e18938289214fdea5ad5b41523dac3cb99f151e63b6cfadfb222c7ef62b65d73401c7495e3588b29dd89dad54b278975ab891fbdeeaa3d20ce2c8cf1629df4c9f0fa0f280271dd5fbc6bb9ad6cca8ba8636f40de040077bd1ae87db06f9f7c8b9a2bef2918e759539e8337e4ae4c332b69ad9a91a4f6107c3d5d8373af435d82e5b8fee04c4069cf2cd73dc43834e8c8644b171ef6157026e09384814d11ff767aa82294c70674990e72b493330a1145fc4f9ecc23e40083aa9369236f91cb2f0003458fb0c0e27aeb59829ac657186bdac316e553ec265a44641ba13e4c277420d14e1730f71a3a6b9691211aa16402a6ae69afadb34b74550e8143e1c97c0e821b25756f3286a1372fc77056735dd207197e735ac3d89a869a8251809033c6cde9b2f194f98d77f72f0ecea3526ba2a60b3d7882a433927f0f0812452ab262a941ddd2c8d49783529b4d8529c8f63c2b8c8e084bdcc624e775facf561e63aac02d8e62324c0c8ef17d6cdb0f5c66663da45969e0f5f81a67d53fd0dbf4ad68b7b4ade7fbe855607cdc52197e9723e9845c86e46777303ba636c15dfd35f76239de22aa4a31d8c19ac1e9869dff958daabbfdc109e8d84e4da067bee368ab61ecb4d5f348aefe79f333186c951e251954caa748edd2571c031b193ab715302d783dae0a1ce72f4f303ac7118d7c39572c906ac13cbc156d71b0bf1a9ec4ee8e86829636f064d40df9dedebeae9f3b0dda152f731d2f7a083e6642a7c2fe4d4cbe8973c0e9ae5379f52846bb201191040661dfa7b9b2eeb7134688264b4ab52ec75c2ff0314c165ccd1fe5500a5aa504577d60a537cdd94098567ae261318efe4a03b00ef0c6837d29cca4c59400ddd575709cb5c008a36c74a000222a3a4082ee84e0624da504a6af356b61e88da33e0942791f7cecb403502c032dd1ed33835ce9a534716f009d0a64236e2b895e08bbfbe12a920074cdd300694c7cd2cfc83b3ae9cb84afdf2be061b232887a75fb32a4bb1f2bcc4c92a6261cc754727d1b347d9370adea0818da3202f625ea52df1745ef466ed9a21970a602e68054a342efbc8b6b14aae52c9fe1fa012a605c7c11e464e784aedf2bda8605f12800ab0613feb904e276dd2fd876819dc065fb9ac98b044a94d46c908cd00c2f76fffb2f484c05833fd758e82cf781100f809700e641b6b7c7d1af102d8cfee990d8fd8538ad572f5254be20446ee1a33e399877110f6275452f127265c0c5679e1317d0892997514475789fc7e2899e751867c7f2fbf0cd3575fc80de7648f1c939b3d7e3c8ad313cc2ec2d5e5c6049dea66ab830104907bf2cd5003db56fcf38d13863ef93811763c48392b1e350eb9e6a0a117453536b0ddb04bb2d86224815630e3c5491fb4be102a595677f41cee0ecaf9c65cef740440af37954ef49a585779d2abbca0414dd04bb0028381938cab5c21fac881ed08f4209025afbcc2fb2964cf5cc4782bc7f532b999e17c172844ca963f089ae611409ae1de8af932bc44785642e0f5f89f1765f296f2321c43739ce30dada913cfbea4a94a61587e4e313b0408a2a81c458f5bd77436521750b05974e1282ada96d6a452d3b348ea13581335187a1d2b4df59af4dc3e3aacf27376e843f89ecef921308b1501491a9e519775fce7b38a3ab299c7196a7a218b457ba9b09f83458916cf9e78cbe79451963e43206c09dd7e7edecac65b9f399d9eee35c1ad66f2a92fd819998392cbdfae8e391d879e899b92e06c6d81f839abf83518c172b84aebf4f098d1b8d9459af2fda46ecad01314972548796e33c638d9e6bf6abff5b2c3ee9f78cbec3986160c03217e964d0e7c0443db7480d043b6cc79b617c5bdcec3753b45e29e21f1c372454cd78a63c034629291d95a3c56c848749943246ef35d316a9cb03f213d359e2a630407c2fcc02ab808226af663cfc65db5876c97c5139b93d9bf4fc5bcef1829207eaed918b1d51abaea238cff4fdeaba75f0eb6b8693c4d795a606df55258d7f1c1d024889bfa31069b247e8dbae9c4eb347b4a41d06c0e183be1b87b01d8ad53582c23d0b0e2a187bfee3993b3806ffda232c0f5dbc34c22be7403b260201fb1bc035585c356d2bab2d14ca5ac2ad36b12e5c9590dda8e255c77fe300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df6787327e5c6d6a55a187a6481389d6564cf979d7d2926b018debfeb17f544d69af00cd94666a25129ef140f0b8c5a0776d07f569072cee87d1a34f56ccb74423a3b6f445e1535aa2624950750741ed4eaef6115a62973ee4ce6daa1cf8bd92172cf0d01835f1b00ed4d7005d6ac466e1f80cf730499a04206e90378a6b2edf4d30f58995cb0cd05ddbe276324815b33a3193cc7626ffe844985620288dd2d5cb980e4644096c619761b4da7b09fd7b6143d1bbb1608c915734058a7ec7701a9b4d832fae58d80cc54d9355c11444665c140fe96b5f0aa86129e69f157fd256c5369c6e5a211979ed87c80f8bd3b21e358e94812b8b40d46b614187741ebe324f3aa128d0caf74f1af69a2f61ad0e48f498aaa97a4cf8be7bc35e6a230dfd554343d98899bd3a37518453ddcb0a228f9f199789df0af80e9c37846fabb35769a8388db33c60aad89c183a435252b49840fba44be22d096bd3a5fcbe93779313870005d4411d0fdb029a96867dee8d0ede2519140b1df37d2af50f8063c37bfde7858911315b30e78cf3b0d1d5447597827f3e0fe3427eeda80f02dda4fed5cfd0ae61929381d6a54009d04ae1bd34db33f15a61f105726355dc20fcdd8f6a304b63d480eff9c9bc28c53d1929c19184f963b735bdcc96863a42b00696e002c95e8c2b03ce2ad1d54c0f416735b95537dcbd9bb1d000b3ff5e2af922575865421412af42b67cb698b2d0225c8e0b489ee5e74ffdb10a9175ca7d4479a95f5a4272dba56632573fac64ee291fbb2132611bc91b42e850f8918421d933135daa7182d05896c72336ba6a539ed94462db28874c46a8fe3cb0fb960000771eba1d794bd90ffbff486169cae5c9b1b2350b9a2f561a567a35805a0701016d50df7bffd5df11bd612e88628e8ef1d08b04895f1dd0dd75e4a23257e00b233e34328cae29c8a703753e754dbe35605d5a361e2059a3d82cc5ed8c992808b0124f1c182b4e7e19f5c4deefd160c25c81a4339285e9b553a4a47d57c9e7dfee102b06e6214ce7afbdd577bd967e1c2e64f362ad35d7f0960409ba5a8e267826614f56bf362cedb1803072a8451f2d1e2dce2d36d92b3be8757c0c5f91ecbb9f2c43766b12f57766695e3578864cdc7305befbf718eb7d931f86db2c794190a39a90ccb25eaf6c179de62af5000c1177134a35b69b21a0dd29ae8f8bef2ddf78d3bdc25cc262b60c4750b8e65c67b47080fa413c09d48b0fbc7d90419bb99067fe52be30e5173c8d8d2546154165aea7735688510b0d2670ff7a471924ec8bb844d72af770d6e6e297ec3e48580fe56415e772bc49d3594a1b2d1ada33cfb8b3ccd56d790aa59c528e2d0748496c42ef8d3468476a2e0ce3371e724b6f68ffa0bfd4ef7e5c8e46269a7109ddbb84ad8f04c5d0b8172627857cd6b83681c149c6445a18ce0e98cca7e23eacce56600f8da22313d8f7c4927612dc526110e27c6e84f15030c7cb161a8f1f58e5c3074e318ed59a6fb30f36fe20b8aa94c5d182e0a620ff6e2f300dcac89975e8aa8154c3f163cc45f210f967cef3269948984164d3708d4eefce97feb6366ba0b2d7078bf25610215dcdc4f746143037403fa34233676299afae9dfd817da2d5841051d1ba35d0cd9b5080f8ada32f3555cc8fc1ed8fe61616d6081050f6834fc83419dc7088730f55a113b02e288b5c3049ec2a2a70828fcd50be7f4b2a74d5254c47f53dd861b033c66768ee2cab7479bda4c511909cca7c24a9929ca0de31435fc26449ab0178dcc962671837f945d7319edacb799e91ca58b09168e02a29cb757471bb8cbd2ef9b1eef7d2cfdc96f3acc2b17fb3eeaa5ff6bac3da73be8665964464bc00fc9c3187f25e447ebc307536f89256c4f6dde405b17117e0040fb8cb1a84739127882d5255e598cb02dc04d728c478361cf4018e7ce34aaf628e6d1bde1a09c6a4bb951a01d4f33e146048983a900c91cab55d980361996942c92b8f786ea527dcfd10e8dd737f605b84eb80163e3a5b67eaa12b2e332c950b8a9b2ed1c8703d371546c3d10964b83f129298a5162c1e5b59744fe5a02cbb25976500cf70928f1ecde0b3c5e0cacf29d0e7e7cd5f07610dcb7f0d10f1c164f8b8300d5bad32a6f7eb86c0a13ed82b7f8892757763f6ade7076a6c976f1217ecb7a45e5ec978082b38dff34d6cb656aa003b4a8c681f8950d7dc75625f485c695b6afabe0a8d3f237c9453b2b28dd81301896ff2b7aa7db0017d2f590c8abbd76b2ae965b999d3467f4ce8b6578537215224eb9398c011704ef6a265bd01bd9eb08b34391dc34afb08b0bb42a5c5fd3bbdb5c6555289cef686efd66cb9d5e926f236e22480342eace168d33fe276b1cb08e408222f2c3bab710fd457492dc7d7f8d3fb0d281406c0d01b399357bfdc38fc58bae175d1e1f7d6ffa30fb531e01a8c0988db5e8a5b9f9e71f3284cc905ea61bae47a6da246437f674b7b450bbb5574808f786abeb4b113140be409bbb449ffb18cd45fc4f4f532edd58241e0e1f279e11bcb94d9995df6a988b1d5be72bd9de6bcd993627377b83c480ef0dbd85763d431bc2403920e11db7376fafac5ae05007b7050a2492fd9faac069b212aeefa00db33616328292a4fd31bbe963884fda8d281e0ac00875cd009518add5e1d060e20189522e2170ab0b0876abb50a74e86c7f589a920e50b6568d90535fd4e4ea509530667494079a413a44590977fc04165b294c12fb3ac62d08554518ee89b6e9ccdfc5be30c3ed30359993e94751a82b1a1491bb758086e4a3dbe5a9953b511e36cc1263be423e7888eaceccfef26f0b5aaefe03f3ce732dde98c78a7f66435e6199cefd62eee85aa2bc8c3d156aa3478b6cf3750c71155917207d23f3b7082acbdd4de3e536857721933eb21136ff502ab324971614d806ebe7491e989a0a23d3eb21dfabc5905e73e358b478c3ddc5c735e3e2a72645b7db61edc2d49bd3aa1867ed192d08937118318cbcc2bdb918df49c3d03621f8dc5424cdc94e18ff5e07b80258ef6bf94f9d022d4375713bb9d18336e859944bf4e4b45b9a5bade780307ff3f7798c5c4a60e9dce1077ab0295c56dfa37809b9821b7529ae93c726e12114547d51d61702023cfe1e0f56c107ce59009a17deec14570bba7e6cf137d138098662eed5c4070f901332d381e8a5a5fe5c24cf903e1c25cc80a26dc884d103e41c30c707ddb9d777aef82a8891b371bb44ebf5da3a1a165c1e831c99a8710328788f60e8eeaaf84843b64ad74691c0145d5820f96a9e972ed6c8d0011d31c44b4da752f5514af0a653f5dafa91c10f9df7e1e79a4a0a26a95bbc4e7b5d83b5c0fe3103b9c02a4f06625f416eedd1cebcb711a01952fd53701005ee84d3f7562dfcb4f9a295b961ecf12b24a0c5447bf52d7fe1130fd89c07961e16aa3afd23e6dbabab4c4c88e7be8301db3cb28995dbad853103eb3c6ed4506d7d57dd15bd901d7daf137f192f1f8a7bfbaf2011aad4b9ba06687f894a6ac18c790a44d1719e24a36ba497dad67499f20c54b89d3984f496d7ad375fcd3f7bf3a05e0ca0fe75a3c5675c115e4c6213fc63e9c65cb040c0943b6ead1055c6f22b79bf8f0492cafd5c38c686041f4c9af3b8bae400adbcb04a88194b5b829596ac6bab669cfce2a3c04650607cbda8918071649c09903d461274398c91b2300beefcae0daa9b7139aa16a63b18a60a8a2b045348d7f666f494565bfb43930ab47bb333feeddcdb21623014607876f7074c0823950c4eae4e48c4dd11f1739a12db15e9b4b75fa4ed9119478b0c9ed27b7bf341eb171797a59836496b1bf272b975ab1bc997824310af38ac25558c4169233c2ac578dfa7bd1b212d51338e091ad3c956981ef35a1d2524bea9e3dda852ea696abeb20542d73a2c058ec8a4e1b99e1736caae114e759b43fb8327f19bcb29f17e3143371d968dad4e5e5be581180d1b18bbe56a94bc6a4cef6ba26670247a7ad1c7bcc38c6d7e2b845a6dae5ba8d92b98f6257dc1441a7606add3baea11545c01dc8f6913ee943d240d6e9df5fe5aef13f40ea958cf4475ddd44c5d5df4301b8afa2b66487c6848c9d1df02d48b3adc365001abcf9050b2d1897ccc405fa63fe9ab11699ea952d4d2625f9b7bd1d1596c74aec39a49c7b38e07d59635a61f4f8a69e1d19af7fc77ca1930b65064b70d12fc46af4d5e220e6009e729a28a13b0f9a11d3ca1eabd983d7122f1f6a6645de63199bd6d4fe81a03ea32251b5e1c0ab40b141957f41ebc990486ccd32961d242bef87c5e81927cc64346e704b4a0c355e276e62196b85b693ddca57a7027f0b51ef37aa5a5b98d438f860df3004a613bd1a631a354f30b2aa7a51a50ed3f3fb9bc0b26e72eb5e1e8398ff86ac3616af253326a31b1573259bc70a9fb230015cd30a00f778f201140cbb534d0908e5705e1ac1e713e6d7772f6bfc2eda423296bf772a2fb497071c9d0a651d8da39abd2f763bcd65eae3102e0f2f38cd310d1128ad37fd6e03faa0fc2d3cdc822fbd0061f09d3c58481f59605aaca6d4241b36d5542f48ed5d6107 +Output = 3566da4760e0890629fecdc7a6a99b9af5b552457d15ff1ffdaab1fe8c76f26a + +Len = 75616 +Msg = 025054b3c6a9992fa93979198af7652e069787fc3e48a83cdaa250614eda2f715b39bb14d9cc1bebb55c442236a0624984b2795f6ac04c305b047ee2b3f6f7ca40c0898401f2d3422d77666477c82749915ff565ef6f8b94cdd2a7ae73426c5cb8cd042ac5838bdd1b722806d8d47dd73586423654bc2c1039f414f0162855d0cb48762fade709638635d231de2d2c9b790fa9f92111f94ba6510dce220f7bcd811925ba4186167d77a7ac0c133bfc3c64e272d7dfd5b8ee1cd3d970215fa7fce3285af40ac979d3f5b2fec0fe66b563ffe8e5f7156f32a0a361c2ff9a7f9f04f85d5c048f16fc0c083d0f7427171eb7510749824b492f0a44e30ea316d92b8fc9a1751358d665d0b831285117b400e16228e89f09ca77d4064206831cd415425cdaeb49ee727dc90e74917f55a723883a340877d85ad1a5f264f2c834d824c7bbf207cdd8500c9d11ef922569564f55e211f2313f6106250e321a99e64d1fc6eecf11c89edadaf4ca8a736bdc2b4cef61a9eef6c747dffd6494c51fbb9ccfe6fb5b5161c977ae773f2e7b7a358ce100bfe243eef67521d5fc733d823a2bfcd0ec7c0ec1e08e51cd7ac1f37afce3d82d04a63b4057519754dcb5c8e9ec636d2cc91c920f6b898c9f832c2393ba97f72039dc1c156f4408230e44af7c57aceca198222374f3cf2595605853ebf5100781666c2f94c8b73bea9a063a65056f3fd763760a18ffc8e4561b2ccbad38b6cff7913dbce6e910f95086e5b0c97e122f7731008f2217dc938bbc8fd2ff08f1192bc4390b325ab90afddcc85bd348ff84290ba8f9bbc373f8db496bb209ef29abc5064763a1a418369aa49681a8ed9c0694f856920a8cf5ddefcca7b1f474c64e6c604f0e5b4e9745cfe4396b73f5537d6100f2a038f9ca086e4c2b18e82030cac8d83a5287e09cfe43a698615ae68bb0372b646c6c935a4101d2df2f0c79cfe78279ee784de2912a9ff19baa854aab68bf82943ecfe00e525065ab3d89090c6d424854c7d6dddd918ace2a901da81d6da10c6a5e896a4c02020d778c87584d23af4f54894a59e8fbad432d594a89488784d1cf13c1b97d18c0d22b622decfbd27295d704d1dc1a30af5b8c4e3374947e10daa9a69f530a5d31bdaf08a34f7f423322c38291f0dbf73a1b2fb701f16919ee2ee25f4cc25999fed5ebc612093f3b99ff0249b51c931af38dffdcdb882f21c6d56086f08ed493ce23c7e3a2a0a5854c337aa163e9aa5f84b8e204eac24e5f3fd80d63b23de2154aad2ca97a9e18e7f5c615d4c3dd888f95a4c17956262e98023ecf3ebb59eae51a7d005ec38bff2b3cc1b929ff829572cd5a8581463d3897b70f905e336a56cce59b2d4ba4edc417c82b50e73c603acfd5e11465e28dd2230554370c41f68d92530d99b8464ece74420cc157a5fddd6f5441586d54a065039414ac900d87f7ff0ddd2eecd0358509516cf4c15fe3e81bf38338e0c1fe5a000d57d732c0a4fcdbbb13d2316b2b51a09e54d16d959ac1995aae9b08542d17e21825a03a82d604ed05b56fcd3fb79affd0cb40a26da8d2b130ca6b2b32b706715c87efef7aa377fe91cdec097361c8ef90da29a90f97812d1ee08f9286248e748284ac9ad196bdd60a62312d30b14338868874caa4ef38d4cbf6ef8576fa16b53125bf83ae343e3d167d26819d3074a259dd094d54365e6de017734b2ac308fa127110f23a0763fb5d25b34de365c1f5b2e1d07a46f65ac10448032ecb06cb0ccd70872f9d9692d78862c0d829d893f8389db299a3b69698e0938774814cc7b3092a0d81fe69349b3f3c356b98125374941895f192ff79b91bffe766731c64b66ea888328509b20d29bcfa4e589a67326d5a63cb3c586bee5e940b4ccafe0adfa5f1e2885cfd72f6efe9f7c990f839f76c6c026fc949d4fd515bdb6ead7a21f4560d01cca8cdde1d39cc152468b52f8e39555c25605a1daf9b5b4013451911be2905cf4594025d4cae6b3aa60958b3be7b1d57352914accce59d2085ba624205c4e0323d45235649f6d04f989b692c4edacddde64dfeea1cd627650a33de1d91d2a614fae6b833ddba033d4245710207006cd582f4a13f661703f5ebd8130829f95f5cc59d495bd0a20aeaec30f79cb19202264f458314744f39ba70d28b6c97e114f2e6925f36ea55ef40de848364143b98ba96692ecf0c27cf9ae049ceb2a133cdbea5ef812cf37cba265f689dc1f7a134789e882adaf747cf7f85646240109790a74ad938a5b2be7183b904ce1b236ce148b1c8fd9bfd564050a54cd180abb467981c7a0b09f0c41e4132819ddb6145a4121554317ce5fd2bf58929a3d83c33597664fa82c07535c8471307936777d487be13524ee379e3975579225eb289bb6e2a6b81253209ba787da4bd36282dc09135f3ebda3a7fb18c5abc5f8c755cf5af9c76367dc874fb35cb2ccc11864db1ca5dfd465fe8c00e13eb9c09b4897b8923b4d04111e87d9f0719f55ca9ea9d513b1f798c645504a332f05f485f56ae1ed35bc0cb69fbee4ff64f459488bae745eb64aee472e91317f3524e431444bf5cc5778dfc0e6a8db20b55659c3560f138e212e577100cb4135ef7b1235bbb74ed03f180fb879c23714d139d9d384284d02912666cc626b13f7ac8d00fbc23977695b2e1f15cf87733c57234bf1aca67b5c74d79ec1c9fd0424fadf230c0e4eea281a1f80516e853a179587429625e6490c4aa661f9bdfdac5e58f61aeee664216d1a50c603cd27d6273aea304986841092910742cca4e966f455463b0cf115a7d8da866295620be1fbb5d0a77444fc7c7fd69ec3c3155cee976e6415ee94e007dbb914f89ed39de80574cf1abef7bbe73489c1676595a48da802b43e1c783fabe65480da88885a52c51629fc72054eeb413913a03c9c7cdeb6c0db061ee1a11e992b4e8adaf6cdbccb1895ef460421e336530a00a090225c44173d205e8790da64bbf2ac0ea5647077da8745a36ad1898466190b4a275180c0744eff63b0ab69c9750190bc2abb286bfa62a202afda28abe0c51291b866e6bc66a505c7233d4747e50ffb3bed3e4f17e6dc86fc49a85b1d6192c90fc9fee8b87cc3d5e125e2ed608a522e36737a5efc3e4966e8dec89b695706911ce2762115152fd24a5f28d683e38cbc1433dbd2895f3dc460c5c754104f950d6188690a82de4dad7b357b9d527f14175dc4ef345fc82e11ec95013f9299d2804622340f6226a1a9fc2f47ac3cbb8ce28bad310ee0079ee1f4d3129870e423bc635683ca338cc06a35c3398db3376b8026332ddcaaac04b701f688092bbd1cf4217bc4b5877f2e60c087bdac46611482a61d51f820140403bc85be0c336332da0938734bde8c502014f3509266c73c6c93c22a1bd0ddf15a5ce7410c2894e9d092e32c079922ba1abb7c7edab4e827a067a832a24d78611d8bb1ada36bc0c66a57223b7357e0d0d32ca9a4ef91328ab0aa55f815f661e7dfc16b404c8d554d29be6c3e198b2548cbd1016f4b8c34ca3fc441d6f15c38da13868ac571fde0d2714127a054b38e6677410a3a79167d6a805e027bceef4bdc5b538699be4de21ae377fb1edf518ade68052aa2e2b06ad034d00e430940394319b0e5398bede77af2db4ce5f3f589050095e915230a8bbfcfb2cbc92acf7fc2c1172d21556e5f7721d393b24d00276ef36bdc2db4555e7da38ed17ace1d9dc003fed4edc53fb893e30975e04521d490930f6a391141619e72bc95d44d8b01bf34e062fb35e28155d8d55a1c66ab2f0e71f919e3b45f23969fd4af6233c84a34e6646dd631f7583155efb6b34c2c853d12a161aa380f230a9d5f84b11b35e5b59ae34c1b43de9bbafc812231402675a0e790e7f8f6c1de4efdc5ac2d6e5452b5b4f58416d618da672f521332fd297ede8350134c8b17b3e8339f8c4397c41fb9e713ac65832672aa80db0024dd861f4a58675a316f81426ac155aba031d5ab3683a63b93b598230973747f836bfcc578e93f43340e9f185b398090afc72993c02d55a80df7de3a1899c6f7db12de1feeb85054c102b1941e0e98c1eec23057cb468a7850c479463c464aff987cba7d1048331564c6794447b316b5c9bd8a65cc51cd32e895e9c6091b690d4804026b920b6feb9bd446b74cc972f2ed13885c47f1865e5206c037e37ba99766434669c8946f6de2b6ba5bb1b445ffb55eba99d2885e5119716d1a7009a5248fb517064855aa12b5e834a00af60832af09a1bcd098adb19b7060fc2327b43b00d3c4bf75d1a86091d35632bd11223256aede13e6a50d06748e4c5b71688f51761a0ff3f59af2de13129f623c982c8538b8b05d693fe4c621257f96ef4e6efe6c0239522c0411e1963060ed2dfd9f91c1a1d8e7fcbbdd572dc08b5ce14c0b983f26d148adcf7e21b7974b01f5b3f3fe8e14a85205bb5f5ff709f00c1bd3cdc58bf27845ef3fa004d3b1de6f284db211fa6bbf1a18b0d337194c3e32f3882dfcbeff9ed864e72001973a6b733a3d627293217dae9a3ee1731111c64fecebb4a46498a58e935866be6e7ba2cca0057d96f4d0749e2eb7f2aa5af538e17c40fa6309683cc71ef5ec71b60ff4ba0e387c057be334473abe9f3363510666265a579f19e8b5205c6239f22a61d1e9b948e634a4f42d6842a53fb4c6dfaf6c7f8a64ef1294bf18d00fd786281bdada45a934ab1c6dd04feb1e6c8501dba452fc439aa97ff6bb1f2e613dc43b987fea47fbefef2ecabd8c788c9e4a80ef85b801287174de7929a1ac08e522d15221c8149380677895559c8f725d7be085b41a42ab81c7bab68b5eed69563885f370c250129eaa665828fe9462227f9d38bfe8154f34287119709566f5195bc5d6dd776eeb933e947db8313bce75ec036319a01d8600fdae2c49e3bd5ea7331d86d865e5a0e68a7f9073c2ca29d037dfaf51e0bfd280ddce5997d834e87825097de21c48b53114741afc21d406b9f97e77e91860d73c4f5e4bead1823504c7f6469ae8fcaaeb733e87b1ecfde7ab976c575fb5c4e68bb8ea5db36e09c6e582705b637a95f47e1d2b6125729c4f2d9825c81647409307a0df29721c500092eb1436cc3f99247178c721d75123afa8823744bd5b685f289dc919a75ae99485783e6335b67abd6e1c9e643817487ba4cc1d47a550a0cd771614a8d3a82ad545a07b6b506dbf11bc8f1d82d8236f45bb0c445b7ed58e407b906e718792b8555bfa47b97cc3dad3f536c11838040c90539948faaa48856a9e9322ee2399069720fc1fc84b57528690ba359ec847a4edf71997afa8282aae6894ce9948299a0d3d1c80222ca6ca7c276fc771094ccca12df3bce508f2e28e522beded55c2e74a18d205519120875721ee03598bb1e87c50be35253d47518cf3befd64ed0372b04cb31bd129532d9a08bb8592cfe58cb217ef7cfac583dc1cb5d4798a7e59c0e23146302b55cd31a7543eaac736762df4ebfe10d0223706c020f2eee87a4456527ef1eeba96ed18118d0e0f616fd240b735607d4fe3ef4619bd90c9e96131b7837e5ca4197d41656b1ba00ffbcc88696b9ccd3ec48b0b3e8bf4349717d3d048e7c7dcfcc269488e16a87b48e0ed171ca47a8ab1c8781934996d64d2fe427e9f11e3f9554ffb8116969c1636db41fcbed4672f92d63ba7ecb471981a072dbb3e744b385a1c9479838d6ef746255ba7e48ddb324e886625bb7fb954b8bd06048b91662057a2d4a0494da9a513699ab702335f1941295811255d9d014baa6be92afbdd37ea9d3c83fc69d4961b12af98bc675b7b1763b208aed0a5445f39bfd7810618e59f462c9301546840c9aadacb578c68ae3db1e45adc7b5a944ff5726e126291cfc248356bfcbfdd4babbcdcdd88250f49208e6fb622b03557ba68341b7373e04d101dd75d42fecbfd3da3063db2c3a7c26c63c4791601ce250afc754e18cc8ce3e521931578838cfbfc07e76a6beadab07ddc83322af27d82de4ca69476dee03ade1de8f301f0c8ce735600f2180d0079d1531c6fe604cbd790b3587d121d82a8574d599483c8e7db1007d3434bacc1a51361f080bbbb51b9cedafb767f2afcb2ed4a5568526e62a86eb7ff0c7b3c86c89073c0232078779fe52e100f1269b6e10c9f7ced0273d1bcfbc0b48c2b4ed83ae512dbb5c8eed600702726a5706c39c931a730a1285bbd9f23ccc460d0562e929dc9d3b6f960d571fc40bfd81da50dc1f91c011318987eb593367f190ee50266070328b55680fe6ae6154c257ea69b71cf487eb177bcad96a69875134b7dfc0bdd594b2f44c1c951ca2f4c0c27d37b4f20c6fa1aaa3ab2c8fa5d26fdfa73641a7d26cb836895cedd14c94ffa8dde25b09a1213ad448536b2fb1f0527a077e31863162a60169f675352adb88f3509134c97b44be7bb4e91eb1538a02ee1fde16c1b81d833f3212b5b0037262891f6cc89b618136892d96cd7f54488821377f7ac2304657d72dda36ab9e009554929c9ee51c80a9e5fc8201007bd1ebfd9789e4f060842bb1a2747f8cc42e2a3af0493e1075e81f7769d4419c92ce33698723ddb3128006b5d90819bd3da42825839a31853162a027bbb516bb5fe6694c4e75ec730ce2f0cb19bf8aa4d10997fc91b8feab1b9535dd3c4c07c5acc2949035a899981751f1dbacc05cab480680a763cb2de9fa2ae58132c29c223f09bc1c84e46c8afb7512cdd83416396942ea0d41fa47a995c8b9fbe63e5d3be064e9d88350eeb280f75a89e64341b5fd66dd18726dd352b518b733a0e9d376597b24ac7915a6766e7fd2f71e146489cc1961af404d594c22c1e912a8ea853c71f57480b05a1c3f8cb48000c7d0071c9e047fbaf1c261fea46c577e456afbf6ef7be23c6e48d976a33f6e8a2a9eb3d63bce3e22cef374d203c10860c091be0a9cb475c8fc0764817bc7a47e90a7ee1f6b20a7cd1f09192f066704a1618655e24049350ca2be45cadcf528c53f13435ff5a2c0a42c2bd97d77075327707248e4a3e12af1a79605b78e710445800937fea2fb938f3c823b251c48fedc357c207a8c255d5d55b62bb258e240e89ab154643ad428779936c78dbdd30ba7f8cd640bc4bcd539f2463f2204f1e295d73421fa85d48542896e051e244f856f008c9cfe14509a6ec770ca6f5845f4347dba26264aa4b4da55527e401865711e96e251bd4286b5e31c5a53001d877dacd56aec5153ebbd25450bb95c60bdd99b02f709af16082d7f392c623f1a5e86e7276dfae46652a60da0c13ed8c5fec4ce8cf24f3c5a7e0a2c650f7f93197316ccbbebd8454c817979b09b961e0fd13b9f7cfca8ccd48f55d1e92b3364e06d3543d80b0fdecd1f3e50bbc2489406dd45f6193c9ec74de415550da7051b39f5eb34c7f52616b0d4fb7c0a5edca471cbeabbacdbb8968e2552a219ab7e1eeab34187d1d2a554bf4abae4e596dbb51a4232d67d007f9f5cf9149f556124d6bb4e3e243cca1502c02682709392cc2ec7eb262fd4d4794b8208643409ef82ab766febf45004fd877c135c085e7b3779416ecdaff97f3002c6fb49497c7d1d06e1bd4edd57a9e54bbbb74e948c79a4fd5072303c33282c2df27accc6f7347f4dc6e172c897e055b644ba63fc66b39c22bb9f55bfccf7f332cc2cf493c23b2feaeb825c9e59d2d630e1c5a0283452a6504c9e46210a150f7b1dbac99925bbb54318491645e5a6ef2158800f013e7d4befc9170b4836aa086eaccb53be68dc9ac217dda7a7838529f17292b76dcb5d1267fbb1aa1e97dd647543089bebd2c565cdafe817ab7b970b08f7a4a055251a8321aa152d8a77d7adf7a819a809ac9f9ecea70f6e3814031dceaf5dd3a292db26839eeb9b731cc06a5ca4a582fe3e91cd2cc8fcb53898f2e7ac6266573a5bc884f69edafdc3cfbf240bff5432b4d0c47b4fda57f4924d8bf208d7663407c80a24e3748a5a61d8fc626e81d0bf11aa602f9fa5c7312e7cf7c54bd70673f020c98eb0e6a4ba357fa0acecf2be31ff148c7284f0f576f46c5de8de2aee1bdcad2c4bc7bdd026270cd38aed19c991655570cb668589cacc67e6e42798c534b5b55ce28ec0b5a41fc6bc85d9bf97e62ab635c2ad2a2a369eb3ba4090e933c7628181db6fb9fc3f05f7842419acd038387f03dfc1a880c05299008480e4e2dacb59c2bfd06e4cfcc1e552f013a81d8f76f801ab0ac63473d061e1395f527778d88447151ba94ee53bd84f70307b26f4cc6858adf14eee54005384e694fb9da6714c3965b730aa015c1aa32cd8ec926e22192f6ddc06556dcab7121389a7fa6e7ef7c0380ccb07580af275ac74c509066051af7434b812c517d4b248a51e36d7e7ce031482440df32ea7ed796acc35c36f590049622acd64cdf38d0e5027fae994192b84816265d9b182351a24cabbad35794975cc252d53d65ccaecf28ceead6d205f0d71ecb71279cb7217088646cc9bf8b37edc70da991857926bf313b92a5b2ac839baabaaa770cacff980ca7c29892065eef9d57d3e7d2c0d11bc85036944818d8fc467e79f7dc67246f35c05cbe837874c8a1abe4bec226269b3a97670126bd897f8e7160287098389c9058aba9e864321f90844c74c82baf84149b849ab31cedabcf5ded978d92b47698db3ff9555bff4ad67b8ba87943c48ce2b71fcf91b99df7957e72b377f910a3dbc27a1b3ec234d0effc12c84a011e0c3184a8fe270612e98d6da00ac43df59ac5a8fa8e29298b4849708262bee604886d8ea0c507a4d507f3a5f60bf6c3abd1e2e921d099046b277f934af64c652098133fb7a2a7f86cc984b1d545844ccbdfb01d907102e54ce4febeed0176f0faa1bf122e258c8342a4ad1bde35f11bde1ac9b0b6edeb4ea917436de902c32beb3bbd9094bc19d7df3fc93e616bc1c35b197c4d15a5d6a32824fa2abf78b5787accbb558bd4f458cae185a41f457ad5bb62544d3d47498512946f6fe0d1d26931eb24bb741e90a87e305ee7685180b5777bee2b8e30b85720ec2fc7edbc8e60a91d863ccdd7732971b2b172cd1e880527ccb6729900b7abbba2c7ad46875e1148ba5c7429be206e3dcf29d0be1ad52744eb29ccde25abf54b4ea39a7bc0d5dd796813ebf8310ce94b1c247bdbc51cae474dd464de1e19c66846601a0e076a37e39d48feb9cead2d11f03dee76aba30cb76b2305095885919b3069967db9afb2ffd068370ee5859c3b01d2b34f4d2cc50dd9b217f07383d94c834cba3b55fac12687fe2f38143ad91eb78f349617fe59c30ffe0823ed791004b575dfc77af005104a7741f5e911464587c01d1b9abc5d6f7463600424e9d84c4d6181c28713d1159e700998c2cd76480921c72043db227bbd7eba11c86a949bc1bc4a8d08dac7deda5500c13fa3eb8ea200bd44b1df5b7021cc70ed366fd77bb8d294b77ea95ba4b4a2a1efce590891e9097a09633d6ad577c92ef6fd5e13547940eab267240f3f83f57774ed417fea548887eeb679c313f5f13ebf9bd9cabea983d70e50cf44e7deb9fc011ae194006b2a61554a1916d442d13ab780577022b017c43baa0fbf363b5c9a14d5ddf76c934b80ed8c9fb86ed4f5ad7f495ba62923894ccaf179b0b32079fc10bc8b1c9773888107fc723a7c22bb0167555adf2a8a34db2cb571dbe7048e7c953d7d6619725dcc4528351f64c2add10042d97dbf4ab6e9d1649c933a7df6a602b729865b1637dd258e5cd9b12b4a86ea805c244ffb8c13799d5e6935e36f02f9d813dfe4e5a33e19ad6debf9d32dad86ac574564f330c255be4be051eb441deb0ec0e53f572c5991e3ccd8a730a3bf55055f6396e821812645c97b26ec124146c9b538d2e13fda4ee01e3231ea6936e659d9014e40fada4bd27bac2d6c56279da7754d381a5a1a7120b65b3266caaeaae85890f374192836d2b6f5cde28c3b60166584e77907a4d90449e6111c6481235f62b54f17f91587c52fda80f530f73ea51a925973c503b7292d556691b348e01d6bc08993370cbf382aecff0ac0e579b218d816911eb1cc0df51b9b5d337051a0f8556b8c4f883d9a5c8f90a9c880b1ebc4d8a7678129680125bb37e5619208987ce64d59af12936a2944de38c44377b0c316745d78f51bc133b6c4b0ba2865528df5a781d236413615af405e20b82b8f880415f9728f67bca390ba45c99df86d8ff612ab556dd77ca6216f808a594df67843f4a21a62dc61f9db911b0c8d5258177a171ca513c6ac5f3d94264da16f743838a90dcd09da4faae9d1b70f50e380a9041d8c4dd28f43a56686d6072b00973c649b82f70ef1d43b5e04902e932ca5b8f69e40bc2491e11d4e9016234091cdf95a54b844ccb39e2faa924cf6ceae05cbf431f07c848ef32b38584d4e9ca386f38c6d0422ed701bfc521333f46de84f567f41020b6cd70853b63801d599a650bf6d3cfd0dcbe7cc25e6ffebb3eb5bd0ecea73fbf567fa7f3b6ac7ca54c22ac9b18f5d1981e26b2d40cbd0da91d17948f3d82354a6e079e626a8701d48a0a1407e6535d01beb8acdb1930e972abae0f60fcad792bc70c5dbba01d9612daf9a637a816fb73821b71c0cbf2197fb01f3969535193c82937eae7a095c3c706976913a665335634f7096c6b2b2537f41517938a960c8b5c304fcdb218105bd48d658428698e139af67dc6400296013e36b3c4e8a36bdb279e94541ece06360d83a270754993107dbed4b594a0f247582a14e5b6a1381f532abf662bde2cc0792029c1d62ecbb6a4f71623ad2dc470089a42df3db7fcc1a87bdaea23710a62df0d015d9340bc6dd94a4cf7d4d091e4172e4698c20e3d28ee3aecc74cae298208f2322ef4a6f09ee25e7d1951b1e30a4d8d27fa90cd86bced0efee7efbe108abd75c51a4089efaf88ddb1706cf9414c7160edecee1d5ce56da0173153c847e0c441c10bc1103f0a936cf0e66dd034114d4ea0552326490b35973f8dc2f557eee5fc2ee8bd646a15cbb543629b5d43c2a700491f780fd4960e9c7ee3826dc71aea4f14997dacf83af860b1cd40c9f6c5481df031350186eec057dd1bdc571fce99e17c0549116fe0e115430da23bd583f84e9b73a223e57b136f631e18dbe871bc5b6d1669bb596e4f7b000b09dc69647e3b54cd069e7ba6cf8d19d27e23a96b1964f0b324d13d4e0a3af0afbfd439d1a48b2227ab99d0d5bb5805205654ea2379a50cc4c37ca4e7dafb1be20b4acd3030e70e69d73d6a71a07931f0e7993403a3c5c9328ee315a187668a8a3466aeeaebf61e7bd3b2d3e34697a52b7a180d72616d2fe3cd2f18e4d8224490835263689d615c45e71f9392755b68b757f900d8794547c0c887351896d851dd403374110ecfd0b05aac30e5f56c817ec665929eb4f418b1c714f5a5892fba58b3346a4c05e981a2768334468d74fb670f844d2ada23aa9f11fddff479d086e8237acc834c57770481c9271c0718db59797db8e5b3790670ef6b7c6b2e62bd77da30221da9c0babfc4a98fce29022b3e4d795b37069f330ea98652736f8e68ec1e7cf582e5cc53b98749f6c6bcdaf3fdd49fbf899d3c395f8775eb7506fc8d2e3886cb19c82449dc12d1e36b8747397e53186b413ef9214dd061cfd7b953372770772f4c1970a40fac6adf2554f207a9150be7c9b27ef2bfce718403513b6bbe0d77a682a2576c399e3c715ce983646661a1bc87c172b49cc7ce945f965e33db59adba242982aa44316e21780fa1599d7e0171e5327e70ce049f87554f6196669a42f29877996617aa2877e18ef4ec36b5558e49cf492d3ccd0de34b46ef9d48195ed6475443a69a5494fc002e2527194ec29c1d5e7cf3ce6a4032ab41ae4e671e27ef99872874b576d7373bb7dc122e917222c8a8beca6c225ffbdc0946b3acf0c8c4f7daf1d750571cb0fbf0c0b45ec58da8b275b8bbfe3e93c7466660d4ffd967dec71346d8534089f0a9a27a158f343ab6438d11cd6c06031d511fa4b7491f2dc372fbce7da679467eab95b23daa24a2d5e3b772099ec2d88565feb966700b41fd615a32d0324a7ce26b910f3598deed8cfabd83757dba3987eac948e95ee5cb14fbf81ad9ddfb53a54f5e39043faa4264f065eb1cef364fac4849f846f9f5f58ea79c2c9f90d3f24ec1c3d9b289cfc9e42d785303dd7d417be74672872b82e5f5cf10132a341b8265288a97485d97ac9419bd623430d8387d30885db4dbd6c3d0da1a7582af1c2a73ec791acda24810fc1dfec1b6ce8f5c3889d662d3f137b8a83083fbb0eb1b13ff74590b49422b1fa59f011791a1ead4365bf929ee54eeec0439124cbbce6364912af111c424880116098f0dcd9030c9ff0fba590cee43866c5c9111ab423b46b1750bd54730a7ded7c1704b7382ab62190bdf9a36a67dae6804c6f1882eeae1e8bd6dfed94ecfdd71316c788b61a1c80eb930967364e68e81967b955b79b95cbd6be03583664a266bbf4b3c1b145b22668077f2cb10c44b3e7b76a42c0df0e0b9e52c224c605ee24dd5d4412d832199a7c77a5946936010281b80c701d1d7946294196c3c245439a0dad02cc8963b555bf80271edd30203c5de60a6e4adb5a143e06fbc5b9b7452ea3608a8f535f07d097ad7e2c7b9f24ca02de0e8dc89d42ee132f5b9b2ab0556b650415bbb48893a3ab5c155dc2d77143e6ec635f14d7a64c6f0740c483d516c899246ed22b74eb3751188723518da83290bdb372ce2f06b7984b55c253a9ebded63de07326a871142f6f3e0d96064c0e86ae793942e7e6a82547d5252883571692bd051f4497c7b29cccc48d0ef5af403f5b2f4321a6b896aca9796d6115eaf8653e5726f3d751ab3fbd95123ab0746021203000c8e01f2b74ccacfb9bb609fca41e513ab2cb91567ebe3a4d97eb2df6e2ba35f2d7386caf444dda50470856abf5e98dbb1009195ce04b1e8fa4fa2e6cfa75bba9aaf433ca61999c2be171338ed12c573889f45c26eaf0dc68f052084abeef1b95c2c806d5733c6cbef985330dbc6368238f31dc3d252bde69f8a74e18c682d037cd085888efa2c6b9fdb8d7b11e0b1b1cae260c17f578aef32c5e624f97dd941028599b3d4d69248d7c7094017caffa8455658e3ff243c8a509ebe767b95bb1af4320516b02fc10a9e460ea876eae80eb1364b52d8239b5e02fd43fe99189d375cbf12dbaa6d825afd40e5dbb5aa338b176a823595ba6e144fcabee5db6e453f411305274af89be0fb9bd7005c71aac97ed945b5bb537f5340ed7752c9ff7bdbac1829251938d443a0402a40f3a6136dee6ddcfad45594c4dc4fb66eec3309b3a4b5c5fa9e96f72bf41726c203b337226f0d8e2b6828760e2bd6c360cb73b66e31d220d1 +Output = 8c7956b44b4ac7f0b87490f2571a2111c3abc5160dff4702f36edb8729c6d433 + +Len = 76712 +Msg = 3d06d3e282a8d84e0de1de6974bf495469fc7f338f8054d58c26c49360c3e87af56523acf6d89d03e56ff2f868002bc3e431edc44df2f0223d4bb3b243586e1a7d924936694fcbbaf88d9519e4eb50a644f8e4f95eb0ea95bc4465c8821aacd2fe15ab4981164bbb6dc32f969087a145b0d9cc9c67c22b763299419cc4128be9a077b3ace634064e6d99283513dc06e7515d0d73132e9a0dc6d3b1f8b246f1a98a3fc72941b1e3bb2098e8bf16f268d64f0b0f4707fe1ea1a1791ba2f3c0c758e5f551863a96c949ad47d7fb40d2ad58d16c3adfee3aa17bea13e9633088f63fd821b88c78eaa2413d2e5eb33a83bfb6ff06f7056ee80ae4ca2a820311a465a68c4c6403a4b555ebf7d6e3adab0d84380264ac7f2f12412269454e4a3d1efbd428fdbdb36500ca8f04c6d0b23c79e625020bc316dabf2d7deeecb5005dfea213d5bd2b6364d2e9758b868b8a95ceccc72685a29217f8b83f81a71fec184a41a9bb1316dd49339ae5b59f7efd5d141d649758b3bb8dc4c9ae4cfff4d7170cbfdf0187e6e7bb2bc526aa980fd33c53c3457d0f5c59e52b4914747b9c89024b06fdd0a1034a62c3528191f9a8d3dc94a5b2ff2f0733c7351eb724a480ca8010fd4b4fead5cee702293e924bb0c7e2deabf245421b12d9eb31e08200066239628c11a7e9c53af2f132a5d7158f75f93abd4f78d000bec6546ad6b6199718d6499b96ff2639582a9656fd85dfaca5c7afc30fc05f1dff3478b1e3e9779cb5ffcd1223802a9aee38fb7b90c7327121f445a57b4479dc9dcc60ef4d43a07b025bf7d900517c51c5c3288aa4c39445b029044bdb2da5a45f35130a5deb1e9ec493ced9759ca5c4a574236c82a19090190ef59e77a26cde0e1799ec5b0a796bc64e5af8ca862b5d55f3f607728aabbb254a1f8496cc54f0721cfb7b8fc7374ccf35a41f463998839fe7a945bba66f2c9c868be682d3e74353ea40a1404be2a8a6f0b33732dd739d49f9420da71c634c46693fad81dead3f79297045b8bd01e614269026d69945151cd0cb467c150f83ea9c45bfdc152d4cac82944f3d461d70e17f41d67a969552e0154bda83b8fc3a52c6a506dba1efd3b39cb3a6180ebdadd5a5d02d66fcebbc5d6fcbb0042eb1d744906569c5aa7b3a5721d534913c6905b73d4415e1f2cfbb5a8752b0479eb6c489a18fcfe4575aeb60b602e0eff9aae051f2a67535a0cab7a104e8c293319467e9a32a227ed1134c960543927c6c06a66969fd34a82f6318f88f95ce320ed22a2b3b3f49dc402ec7c0b69f327ebe07bfc84d513c83c7234628d062bc6a5ff8741913d52c46cb33c3a8711fa93e1635943644ab740e8f91aaf96e567484498fac79d3f4b3039aaba814ddcadd049d178b7bf612c490b035aa32127adfc7f61e3c1423a4c65dd61eddcda2a8b7187a350d5e0d8e14535297af9d63d4e37d8e2d8bb2a9ee4d9aa712cc9b69c11fc1d61783a82e274c9d9b4022000a6f69ec3844011b10d930033411dc45da1efe48d946532103e655b7b6b76924ae505a5e1dec0616fe6e57e0a6a275959cc63af5aa49e79134d215e9c984eed1f8819c1965ac026c1cb4aa79244eff5158c1bd1072a8a5c069f3757afd3017ce8f091966370d5de511b31215d79be242b5186de158ecf77649525db479424ee51df0b78cbb967f49857375fee71387305cd234b0859c447a7cf6b6dd6642fadc473e60d51bcfd16022fdbd7a7b3e54e3f4f7f9c42140f395abe8663eebb8827cb7fcfb877c40b9f28d58d0d2bba3b2222690a46653606e8f7e2e571f312d508d153270eb0972a0c6718c984ed0ca0ab69aa31cde43851c309cd26fc85f29cbd708e6a749e7ecefa574a2fb35e23bc268f73b4b741a36653faedb98809e325b21392287e941360c573ea1e3d1187f44fee55d187000fcb1865b52b99016d2683550edfa123dd961a4789137689b1df6400e136b191c5e68cb4c3eba40ee905ad9f450e80d035c5454ca7adf43939d42f817642cb897e4f2d728a782d84ff49ad6cd513723bc474f2edb65c2aa27888fecab5943959816b8729896fba060878ef484fbd0999023b9fb5459cae47f6444e570f899f8487d206344110ce04ad09ffac1539bbaa676fa83dc5fde3bc4bccbab0e4b1429cfa09374d3239ddf345835b22b6380cd27cb7a8e1c7ee6f51e158b062e5a9d6f54077a6beed197e647a5b9e26b3268193aa7a0e4bcbecb5bb4f9ecbe782b1d14ff3b3b113c25e03daa41915329c839e70894d64c632773b5afef569a93c97a5ef9c3402e6626612c86b427cd0c2edd7fb9198490b9c2c74b3680316428399e966a27ef8a13dc02fb0384e218bc6b3a2974bf10766896af647232e5e2de846f037af0b2ecec50acf1483b29fbe2873a2d610ce3c715ab144a8b90dadd5eb3d7ef4fa5f01e988945577e60663f268bc4d2a98a654a6a0adc43a81f791c4fcebda014ce10e6c08fb675cc7c00ac2f7ebf6274c1fec90fbaf198f16928695adb085feff47c0d0c6be8935b165f0aa6681523e938170aacc339918ff5508a27e4a274089e9b5b2324c2f953b6eb213251ad5e317716d7e82e9e75aa4b5a485df072278854d597aec22befdbe50cb97c426f5a730665f66b02078e69f4ac6ba40860c0979e928b544e0dbc1b292a992b424361d86e6a2fde475b22f577b0bba63354865c053afdbecf4fa93c0dad8ae85a11b988368f4ce906847a765ccd00087936c2001035b6944dd9fe6616fd545b91c1abaae63b13334669de132c6a0175e2eebdaa48ec7e7dd19303c0ce82bf2bef3b7f6706d54e650ff295f46ef187937765bc8333c51c216165ff73bca493017c677de61fc7c3266907e942aac95a0a3f810ab35b295a2908373ca668cc9784412eed50b8783b1f5d902025685a4283422bee614881fe3dcbf100825b60945d457616cc5a507df8f27583c4310c07a6894cafb68033d104b47b942f1cca5233902941838cb75358319e5a488c47701a1bca96d98da99b27cabd40d4337099af2b2db69cd61583e720f4edd802734688018febf2f749244d159f4b9a29bc31791d6cbd40c0d2d64eca5d839d1af851974181f62b447d331f9e0affa88514e1386ecc9e97d356143534c266bf5c3e59f0e58afeaafeac92456ce4a227cfe272942737a0c8960a0543680cdc6550ae263af4914d97ac3d076687177d3e908dad374f940cfc925470216d212eb77fae7f1e777d291bd79a5b2af889d8164e7d57c6eecb2a5a4d9d1f774beba4de70a72e447538db5e062a563bc624fbd6941a3bec0dc3420b514ed8ec0a518502ab02f953f6a9aa87c155bf3ef9ce2da7e7cc204fb2669c3626cd6428b33a1b4ab925a9f403b8e0be918360de9a71b7b1d1fbcd97e89b800452848bd44e90acdf217a06cea24dc42dfc1cffc1b0f4e11bd90f0b6db44a359d5fd91498e13a81e96b67d78ade509df98c88658f433ff30e8870a279205b0428d536c91b7620e28f2056e6cfbca9b44dc9305af15c3a35b164865a6233b735cd3a027006142a16f9c7aef9464641514f3a7aa58e01cdef2df7bafbd0f54410b618a5d200c4406750e8d7d99683febb2767cf10103de068a9c9724c6d6febdc08f687b7b28d4a1bbc0b394e687bc93cfed898611c155be94e601716dea895e3ee5d10e7c377307b64b93c1f64378b1afc163b615d9326ba43461221cea8286b8ed4a829dc8adacf7179481631be2a9e48a822d878be2923b103c935e3788ebd10e3b746a5cf305f0ad4c5f9781890100b16b38e189e4d6cc01da61ac51fad219d12a507c54d1b7258511b91e04ea3b86ce9584ae33c78dc971e10971da56fde5deada31e50c81528378b2a612674ddd94a878d6819f93bc5f8e6f769313ba3e77f2be8fac154c45b2d1f200b56b74c9aadb7af89bcf87543ff32a7dce70788713b2b9e8c36f62940de54466726302c2d70ac879d9d53aec60d7ab7577c490025bb33403d122ad87bd3b0ea1f156de1143bec920e2b896cceac159253518eaf7757c95a97f371365ea5bb97ad94cf0fe157ee5b75f80823c043a9c57b1736eae899646a275b57e78bbceaeb6d34d20d076d38404f736e583d6c9dcd193dd046ec087adb65aa4d506591b5420866256d18d440ed153e1a9ea89f6815c825e948141d934add70d0058ecca127f9b927a478359ebe41a89b5b94549f3c026ff062d3513424e93f7e6b69b64529ab9e6747b7f9a8405f536f138314b9bc528c742bbc4be3e62376a71678e707b3a89642cb5aa903ffe8cf145ae7683df3330bf3073156192b16a6e88b5ee76f527b2168b3d2bc2859686c199653b7928d1e5edb99c5184a503d50c13e6e3fe2729dd04775a2bb8bf948cafd5a3a9b6df68f05bc37f9fb0df201f4bfb4394917b08b235d955d2fb53c145c2e1b1e8c16ac0f8113765286ba8d0f13426142ab6588bd8b19a764712abe55a02a5d71f2233a1a615fe94144068daf3cd7da1ccf6267cf880a005b3852dc872770a5c7762a0d3a271fe558ab48707cc20e831a3d84ea1b9abd54a3ddd4331362af68a17081b1d932d21efb2516d1f2535500ed7e436c2c438208d0ea154e94d2252a7279c0b49224f4eacb59e83eaa5129b7e8fa247a9c03268154d59c7b9616707fcd1a7d81df6e16dd2bb232f2ff5c1b3caf39be91d569e972b238e06671702fcd13bb0e962b8ea65aaeb69dab8bc4a7e3a2c5685e52e869417b8c678bb19fa186e8d3fa8df0f73207c6ef7ed4ba3b3e615625b81caeff14721338c857f0f57451af0dc7c5ea48385906c55ceb15206d2a5bc33479442e89891bd659579a0226a1e8c10cda51e227c2d0c0ce7b2704b293063653d0bce726fae7ddb107275626ec28862047e2658ed9c76a39f15a588d5ff7f79cdf63c97b4c19c755f33361f3b4e0c5b87af642ec026d3a25da49bc7bd5a37f85e1f335f4f1241bce8818a61b80a4281bf007fabdd114b928b25f70fc988b369574c5cd328e9953614271931cd3e505f143b20d82da505fa90616469e1d31c5422465ffa288ec06d4beb8c9662315e7aef26eebb962c2a62d42088dbed819a4126d5e3dd3548e9e9f6978b995f2c955cb68b925f01ece152bf290b70d5db54b9cbc09082386138307bf1bd41ac771c8cd330b3c9572e5353b946962d8129734379d10ff31a1fd6cc44c2cb96325a1c92acddfa037e3aa7ec2a3dd11cdab31e6898ce0838c1cbeb45b7d15ca0d71dbdf7ab5c0e14605806a67ad76344c6c07eaf9080225717ac9e213ee819688407264236749904e4d0980811dcf5ad2e9abba0caaf065a030c18ea40cdaaf5226180fbb7ec40dbf1e9849a57142e60fb87fcc3ac235c486c3181272549b64f9773f2aa958dada271edf3e4b547b76413d069a19fa3cb2a3c6400615424e57fcd85a5d8381f88614b220c6f913c37c160bd2bc10cf9fb075aedbd1f3726e18caadfc10c086a781e67d1f8c254bc5780c9956aab59eb95e7ae14e1e935174f7e18c96dcf6d3526e3ad41de65678fbfa835a24de8f04241d320219447b6beda5efe8ad1a8cf4a3ab705bce7e1307d16418e2afdff37c5a6d1985bfdc222e42833436b161f966f5ba357883bbd194e0454bb76a278983e6decfe0c45e1e251e105d1b464bc2a6d31ad8bee018189c933e7a4ce63dc79733d293a7a932d5ccdaedc8fade208f30b65e0893662b6e8b74805317968b2442ebf9234ed102df92037c1659db98a5a139f4139a885e39de0eeb34ac1da8260359b2ed5afe469211123bb3bce10cac54b86da838c9390120ccbfbd7ece1d535507805030736693d6a1ad3f98610519d7dc3b25029b345ae0387e4c043a4312b49fe20a73c2eb6b3f1c610880ee1a64b6ffed186c80e8bd98ccb76ed0e4c21aae7d686aa97f6d7ed6fcc7aceaeaa5235eade400fb1cbe9fb713fba4695002a1af1a83ff260b35451abd719b4ad94dbc5b50b06d12c13e87c788ab7b41fe9d6e3301b5469df90b6496f8df62255c6cb629a2e2bb6810e0ec56a54761df62eac6d6cd8ccf65bb3833c81961801ec68a9735fefb8a5f7e3e63c0e47fd6b60f934216c87af801e444692aa9b8737bba4fe62cdf5b485d7bbf54a2e095684a66ff765facf06f16e6c84b2b2444cae0aa05196ace9274069bdc5579042895210ba7ca2dc58d8309452c70661386e4c21842a77c47219bdf512ddccfd9b9cbbe5024b41dbcb2d25d82096f57f20f5fb4779116ddc3993e4c3e1c50f3dbb99a96f6eeda8bfd00db881fb7ae7d3a3eaa2c5a78fe0bee59c9d1b53068a184c8703f427e941500e81d1d90dfa44266a5429e3352b38301f3dd0449027a456f36fb1bd55c773562e9058267e9e75401c3b77e94b6eddfb8f7d6587bfb0c4be5a589a121e10a598d74335b176eee0e962a7761f13df38e7dc64442c0829541a294aa83aad4b41dfb2a150c21c73eee9e4a10dcdb206afbbaffa567b941bbb30084ec27f2800aef367b291a098b407074930243a536bab41af4881bb8b0e61c89d6ad027b8b8549c9d7ee1951339940c3a5da4af1c97953f8555ae361588aeac93a8bb7b84f99ba2fc0e26e7b58bfbc15e2f73743511d37ed829c63258130aa3901069c3b54eebcc2e694adfa531a6eb5eae7ad1c761cfc651cdaff87f36dd743ca9c347723cace3d89733c50cb3fb55e1e2a10efa10efde984853d0b07a8fe8417bb14ee44d46b0a5a1cbe1119a64c690d4d172f5a59d9054a29801136588c7448e1c22320821f83a8ef87add6d4805138bf046e1a840a22de468d5d28130d9f0ebea0985f5a5864266a4da97b40fdb110fe7d2e5a13fddcd15aa921256f0e5ea99054c059d3b216331b64768f8201032699f5e2a190409d93d4681fe6a2eb5dda05333d987499045f8160a78bfe56c1fa0ff32d898f6eefc6423eabb48530f6f09be052a3b399c91c3ac6bee94c5b780bcee9616a47d53dc932b157475c8bc48db2d0c1f42710def9860b1f2fc28b8fcc656d10cc7010221d245494f7af484111e878ee1235bab06811a26ae8176383cc51e2ce388eac1742759d074e03e2e72dab6d497665d3d7f85c21047aa18ffe8c12eefc36fa1597d9c50f00c2f10841218a1266a94e18d01ac40b8e8ff74d5a7c26e62d3058c92e33810f23fedd14c9ae030cb82344e6135ff7c66b709f38221d1c6cc3cd114334e03821e34a4e84fb1384b0d06ce0c82c3855e62dc4ffdcdfff51e77255ca10668068ebb14dbbf55002ada321feb83b85247cff3805afb7fe9375ea9b72c9cd1d6481d13061bbd262fbdc583f4121bca8a4bb562cbb05360869d6eab1acb6b5d43d1156c33eb4a89e5f9f448aecb3c82159bfaf8e4db6f387f3236c575c1787255aa600fc3d3ce47cae750c9749e4ea6983f84faf463b5cf7bfb9e3ef0942ad7b4dae444dd5bb128878ebf4d6f14b9ffbe3d3db322ce8fed23028f60b5cee85609698b52a90c5cf4c4f72a1ec6b4e5552c9f0b6a97a664591f4eef71e9f61cb5fc603b83506d357328287a82a2063a708d6dd8667a729cdc16e7a8bab7952dbd34c6de1dfa07a56d5c2b95c22b93211787ad8bf0f4bb9f3eb1d6a083453283365aa35b69ce6015a90808652688e20014c2690c502d08d4479722c114bb5586e815009aaff502ebf0d3c5d1f5e27c402de7a843ce4ce1a5be70d3f1b442879e9b0ee483379775910a656cc07960e74a2b9e7318b27ace796de6f21aac024e3316ed57fe48da3f6dbf67041cf82bad85d58ed17343de58b91a9f8523452235ad225961f32be9eae9d78196ccbb6a5558f560ca3ccaa106cb8e4397f4c4cac17487fa0b4a29eafe6b195a29b80a46682d51bc665b8fea6118917b2d7574247cf00d795ceb8806015d4e9bc5c82de76d6bb348aeb8dae2f008ebef518e9c55ed897b7e5dbe90647d263eeb72e46b74ec79e1afa93bf3b03b0463460a2783889ca89bb014ac8b2df92eb1f339f40d166ec1a3975fcd217eca72c228612872e312b333b88b9bbf88fedd6f5b21e05bf47aaac3a9d954ae7126bbd03f5c79b18ed6140c3dca74759e139b3fca33909d37989c078c1eb9e0b3d6485530060288b27031eee8d720f596c0d0ebe876ec1b0650ff39e836e5006c628019a664ac3f776974a161bc8687998de4395ef2dd1d8a2b3c1f672abf55c353cae347805d1d044844ec4f818d73cf033ff2d4af49eaeab0b982af012e29e12f907dbb61fe6b829508985b2c1f005fa949def1b61acb4f68df2968c31cc2ee8139adab0f787218d92a6d2cc7237872076bc45e0e3608e1d916de3b79706911ce2d3cbf93b177ef9a11336b5980212fa60b6dc3bf87e9c78dc767cf2a126672a0d3f29ef493c52e6325b2bfeb2044bf0d93a2c6d2f3b52a0c588dcedee9013a7e9596f13a05a3feb9ceb2d184ea2849c46929124e64b631dc3318dd9ddf8291f1daf25f6dee58872674fa482cc617f654f7ca4d3bc1320587bed0a670db309e800bcc9196382df0317f53cdeb9c57ee44a34f20a1f272cd95637dd15ec6558ab38eed2ebdca6a6263578508ca5431581cd77e3289debeb28c89e6067086377c12cc1ddfe88c5704426458a0d0d7ed5c65fa212cfa6f5edcf697d4ecad041e9d262d234c21663bff580f943e060bd324a674feb5fd8c99725af70f2b1d285415761ac91c6f40607a2dbe008972d92bd567acde76991db89d41105f6cc8db200b8af9d5f8db020c9e47da652a1e293c9a310c8816d60b0384324a8c57b703c9a7eb3310876b94889330cc8bc812e44f998afbc63ebc3cc250b50d5d93f18998132031427229de1c8070fb3a0c55f0acfafde15e9654993d2852c19bc97e56d574b15a33601dc90f8d8dce3a9dee379be60f2719c5a50abc3592ce0ea06751c8f52715aafa4e3babe411af5225e8a064854a33bf74b778869efc9d7ec1b361b8bb09cc71e8c41d36aa84054c4948124efe356e184a93c9e48c1994b3d36a70eff1dfe64ed18758f90a6c37eeb31877a27a5840ebf040e71e276f1c747f9565b3bd32cb0a5da0d23c2a53af010b60b6a9203c12020dc6b87c96889e8b6d3a274d4788e26d3516754732c0d44cf826b7a819684a234a2e264502ec80be4464a005b86c953e01f128614b3c0e99237462ea8c6452174f7f18c392212cd6ac18b72238634b476839d2d39d4ec5ae34519fb6a2b990a6c3c1753c6fb1089b4f6054eeeef76d4e13f75de64f7e6154d2c6565382ee6e974ffd27f9c0247ed4d2435faf03af611caa33b0df89544a53a5d96f0a568b52b49a3a1542ae00f44be0cac1ae9f139079d4f3b3097559e9735694d2234319a6c34d80275f61cfd4c61ffb6033e8ac622c39414eab3814a47c8dff67e6731fd18d0fd745970018850e37e02585090140ff8224690cfd0de435f121179a0e253bda89485733b4646febd181f8ee289b90b857a5ec75eacd12672b02c8893bb34c7262da457ba43afa2495e4c2b46e00bb205fcabf2e27db94dae3aa63f923526c1c4396f7b7f9228e832a13692002ba2aff439dcb7fddbfd456c022d133ee8903a2d482562fdaa493ce3916d77a0c51441dab26f6b0340238a36a71f87fc3e179cabca9482b704971ce69f3f20ab64b70413d6c2908532b2a888a9fc224cae1365da410b6f2e298904b63b4a41726321835a4774dd063c211cfc8b5166c2d11a22233c189cd591a590dce61d4eb848da3bf864f48518b50553ecbbadb9d11f926e312c3a704fd5532db53006accf9e579a88cfd04d0f45c5d9e3cb6fb00a0222866e81efadff5d3847e9a9b4d03adc102b75d886798c56e93b6c2b15ddd021312745eda69a56a1cb8bf4a3967d8c7a9a5b6a2f85bf0270e5e5006b4e97c5f544ad51c00dba083b634640be39f926f25cd6b0255c71f42c52632afc68724de6e3a51c9983a16692b623587a0dd7bcfbedfa026a8926e3d1a542566f01f1fa7e848b00da86d504303a9fc637809d90cfb441bb5f9a62541964ef1d33999b3e34adeb9923a5c963ac4707f4a730cf5516564a5584eea8c75bf7d5e9da9dd29ba1d6335fd55ef3076f82187e29acc17c482a705b7b146ea022049346d48d4c953e73fedf9020e651e2623dcd3f432878ddd76057929a2890f3e1b3aea1f64dad733d9a62c48a17e5bd7de46c689268cd5fb376b46bee6afc5a35939bd3576a66d869b2b3e2f90c35492ba8d6362916fc4665400c879fba54cd66dfa8d92f3733e6aec43d8bfc37c32df1f785186597981a5338ca461c7b3cb5fbd42033fc18a726634b5a20122f11c4675d139fd68ef35403ed7857f33206ac7b3dcc743ca333003dc4a43fc966a3b50245ec2d0a41c07bfdba811d927365394b58f80a6f4b5a0c74aca64b8052eb68494e89506f74720ab74c8f07a8c3bab512d22d671295aeb3ce7fdac3e5986b66b2d3659a748b7a78c7000cb6748789d83825e73ab506839ea1baac49578ba638b5812b7bc7eb5c5e837164aa945354eb41c0bfc5c5128b1584f9b53c54c12e46f7b42574c8389a24931d2144969bae96b63f11c8c14e27c0ee99602d7bbd5629c008fe05f3e7b6536c6fed24f9e4e9431bfd7794480dec194536479d2af4d049c4dc1fbfd97d337385e602bc1cb3a778d9886bb8b7f63a973f3cd5fbe0fc0f3f5cca04f2f76d83fd661c2c8a9d8c7bc0756c78b6af9ba5c3233985ca4c3775632e3f385fcc3d3a69837ea500eac3a8827616091e8d42c01597a8f1a8bb2ba56d8fc84446d660c930648a06cf931de06762119740df9ffc1702f783e7bc6d11b717e19358948cb2fa9fcaec4714efa5b7bffbcdce1507bc300bc1c737ce603cc85d17bff584f58a108bcdbff7eebd5b2be610f736dc1ea309088435f97fa99929a5d724be264fa12abeeeec628f1b831c8b0dcdeb835922fa9fbb4aad3ebdb943a89c6c13070fbaa1bfcb0c07846eb002055e9c8ca92bde9d27d39fd399f11fbecbf3e084959a190df4ce99675d3b6484eb6fed7acc2b18593769800cfff83ee3967a3c9350935ed7f4860ef28806131db3de5b365abb62c744e9a5a9ff37996a7e7bdabfd66fee88456df74973633e24e516505fd371606fe6d07b3b1643a1ac0a85457a85a46aa75e02ccdccdb75842f5945757d4d173ab83ca7b50b380fa30c1230743ecc535bda4d10a1cf58703e07bf4eaaecd403f12b214206b7594059128e18abc8a36f213c055398a69669395dea484d52b62052dd859f4ebdad15635a82d6a44cc9e0272170bd5b5b7cab9cb942fb05b8dab78658d18736231ed5ea6c573006d525ee9314f61692f6f17d90a32f2e7b25280fb4246bc265f393ca15d176ef7a689fe38e9aff25e57ddf263da419ab57a1887205c7bd188535f33a0d1045dba70f1f053f3df3b3fafa2defca4368384034e226a1cb2d513bef286ef9b12ebb36d18d9ecf843a887c74c3206009849edee71e74afb82534312b19ae023c9858ceb7d1f465f73c6c11f48901267dd6a4dac124a457140c8a0ff0ae42503aeb7b18c7d44f2a1f6127618167d94527c414dccadcfec3694a1b7c47cf710a338eeabb0b7cf946831280152345f2e48fb7b58b0b2fca183e47af2136648459adeb6e608bb239e0acb541d5e20b922c3e184e908b034f811c6a0ea6c855c3643269ceaf4e5f562020b43048c7a10245bb4da8925342d6248a1dffb2028a76544970d44f5c69992f69751617d9ef8a568ec08b3a69d2a72910c84cedeeece5507b6846e9bdba4a350f62baea21dd718740d7be30d79d0ab936d1bb01936158814eb9ed247a38b15998e1e667a554010258fc0b1ba58947fc85a11593f9d2160e4ccc91a999cd15c48e5c60396f3a80ec5e9638a4d980a51984a0214e29286820fd07fa1f2560c09e783af10687793770da0d0e727d696d38bc36a9d72a4996dfe8d3ef2f23d8f80edfe36177f3f76eb355c8552e982be883b3cc73d9041fe872959939819d1f063c4abf7833bd9e6de05731d57f33b05b20f3c849fac091a5028cbfa0bc9a1c32514136fee3ed547b1d66af550e55df11370494f1e2658617b656afec8923b7c3754cb0ba2e8903e1920caa9f8206a051f16c96333afbe884b77acfe58f3fd803cff49575bd9b92e869d08a79844edb6275b538d9aa8b9e352c80895377f6673888c04df7372ae9d5c73ab8acbc36788dec66e1a9d91b90723ef144fde8504cabc7394008453ff0f3d6d39a00d1c5601a7e08f86d70b6a683155367ac8b566fa4b5e5d6708fe18f89be22993c6c0479515222e7eb1661c8afd8315c28080fb96a7a4e78f6bc18aedea7b01e2a34f9ac79913c15ec7426de3fb0108a39068410473dfc8c6474ec353bb8038f90d2aee2dc62dfea37320cd07bc47a59a72dbb5e8126767c8061660ce819a55537ed2b01c0ee91ce96f71b86ab3df6313926be89615f44ae13298d1b2df31ed9e72e76f26e5ddd29cf6b5ce817420d7ab899957a2f0dee8ce4746a4b526ef482673c999e2ed64863ab37d6df07fc459ced2d461a335bfc7cbdeb03829eb1b1b781c19cec48815ce4f2039251c29229ff9d8bdb50b56ff7e8643562a95ae5dce2fb6285c30387a0156c769628912d3e0c935b5b03fc716737a2fb8fa9cf31fe6a9ec95e0da8109c5ce039ec4abcf50e299644cf1d518ad2d13fe5906842be9eb7329e2fb17f43d92218f49ca18b1120bf6dee3e85fce1c21e039a6fd0feb344317f88fe97d049ded0da4eac1345aafc37e102b02345a0be86b6c334c84a3979404c30d5a7e34a33ccefef268a34e72bf7ba282edf73ec4f711f07e5376d78c34c633ebbc9ff6d61801f8011ed9ef13469c007bea1d0f0fb47070f8c07b097adbd8a59b9e56edaef5231a97624ccef9ff4ba486b51a2d14d703683301f5bbfbcfb8a29d5e376ba65acef115c16060af5ff72923ad732baca54740ada67b6177a6e2b5719ab60354cf51f61cbad946abcf4ae8e351bc8d1fc5b894c91c708c86e7e348b8d2574722b958a40ccd0bd367f3a37e46306ac3e6aee3cf25d279bf920946f6c383af99a8af4f8576567ca97c339d53bcc7e252a9c7356a4466fb5d31916a2a322d039d4f17a314ea05b03b412594f3b796c7cbd1b54a00955879f7ee06e96d853d07a49e98ffccc8592b0b6f3026f8d71b9fa1e6ef7dfca9157a121fd0213b2d4230520f99b22791bf519c4ef9cfbd9bc4be4761dc6de8e03c802e4f93ce1d9acaf2282aa066cfe6a6c86078d8fbcc6630c85ecb12764feb1c00cf05b83c7f6e35e189783389f037ae03ea655437afd6de324a9b18438c2a528056dab3e8eb1821731860c99862f54378acacf21fd26e2b708d4a5442381e7e9368372d7feb18fc1b378cd92e82bff5bb29b848f0ce8cb727a9615cfede37de9e75836b5df9f1546e7944f898c9e8332fe40fbf671eb2ffbc2178a8d5e92711260178240f922198d150319e73b31e9a6b5e2bcbff2d8163a287e8ce63d33cb4be8e6dbe014e3a57e85ecb315bd8c389e21a8505058578817f4f4a1425471917bc8edcbfdf789c0017e78a679da56780188bb3e136a0f +Output = 8966ae53ad35e0beea4e441fc1a6d88545267f4641acbc754aa84f75f8c3be34 + +Len = 77808 +Msg = a4ca086c5316553242c8031ed73d46a87bcc6ff19db40d53f952593d1a98d13e1dba225fb92a4bb67cc7003857524ccf5d217badc81737df3dd3f125512883014bcd130e2b563a93ec63655807187cb838cdc2f88406fdd77ba5d666bb5e821ab56ca220b48268f01b05fc25ed781e8c93380c7bda69a6643c30d0a9602218b2e4fd993e59961ef68f138b48135a7972f7ca21ddd1287bad06dca796495d8bf15eeabe0f247ba4cdd2f7db6881a7d693ebebc8c7722bc4db641122d47df524fead99da3c1c17429c6c17b42e3e457d17f703cbe1c45ac915db370a0c04d42b025874b46c4953408be3ddde42521eb625a37af0d2cf9ed184f5b627e5e7e0e824e8e11648b418e5c4c1b0204bc519c9e578b800439bdd254f39f641082d03a28de44ac677644c7b6c8df743f29f1dfd80fd25c2db31010ea02f60201cde24a364d4168da261d848aed01c10dee9149c1ebb29004398f0d29c605a8bca032b31d241ad3371b4a595b011864cb7abe5ece6382d8022d894b96d534d4cbaa2ff95ffb277808b649aa99ad89dc227eb783601fe970b21fad30d3b90a22993c68a1712afdc3c99799ece95aec939d4b3b5c19795d169e80497142da0bfebfe74b3fe34c0442e42fc9b4ac9197278660a84d7cf8341621e01c7186c0a0e5aa2b662948c6e171f2ff478665da3004886f9cdbed15251be6bf64b5f1f56f53d28937f1f4340bdd708691d6a79d4db71dc8678bfc689684479ed0b316f0dde5d3714f3e880bf9e1e7464729e47336bbb0fbc6d22d6b1edbdededeed884b63083783fa4376c7122bc1beb5e49ec4819eec8a0942f28514af272ffde9b85d95375921e7b542fe0b278a609ccb5939b4bd1ae3cd52ee5f1e6a8ae2ac3c19bffaffc2eb96086f094b41bbdc3a12862b56a2d6a971966341a29aa49768393edafacdff4163c16d714926d0723c6eb811ddfcaa3b946203e527bbfeceb0759a471b2e88b3ff54c0de8b2362d302346195b117002ab46a42a2444ae3f92375be7cd29dd9c3c7570ba987e3ed6f2a08052f867e72e74ff3a2115ec40e972fbe0df4c7987ce13a2ca05ac5c4dab7226e3537b4bf6d01c5b2a4bafdb3d93933c32b3750aaecace66a217adb62a54b79bb5456c246790ac41bbcf797a6de4fee0978cd0441a3875a83f1823f39e78c9e93f4f545900152b9836d6fb2f9785bad15892e69092be0e50ea2f947b71bfb1f6c99ab9548a08a14ae387be63851dcff5bcec3e54df07a345eb848ab66bd376ac9b4e267ccc10163e0a0b497ffd5546360dc361f9c9b93b718a408c0c535920f1fc92203990d6935cf38924e9c8d5267b913ed5e8187ddfbb0f8b23e5f3fcb8af368e31f39c021f8ce62ad80bae4477ab9286248894fa960bc18cd5a9116245cd8f6be012b93bc3b62a16ec4c764a42b056c2d54005d96849e96c2dc07633cf335051b5feaf2986c20874e813ea908e71261b717a32c15d5dcf52b092ea185fc9c067392046757098c86c55cad0be63d649b97f9de45b7e30bb67e88735b8fb7729d6f3de46c78921b228bad8f17cc9c709c38711e34fd2a8f5d35c081ebdae25d1c56ca176c6da430dcd9fa51570c92cac62123df74461aec4bd947b6ecc7dbb015d2ad29f1b6ae723868c9903456aed7bbda78be8e2342b724d194aed90722101c6b7d7896e41f63a790a1c85a1b5f3befdce627dd2520545ad72db63ae943f19279b1afc6668569bcea096612db024bd490f2a7fbcc3268602279898d1ebfd91a85c01c0abe6f18eaed76f60906569bfcaf34cb74790747c77c1e8549f8044b07384f69ce6c3ad5a41360f4a72dcab0ea7012eea1cc0d97131c7325ec05afac0ad9b605abf087449ae45dee77d1cd0f009c239e3e35b3cab5bc1e07fdd8109078127a7c0ddbc2da11e8c45ff572dc1ae18bcd569436a84731b37597f9efe57ce15b23297e9e7c0abb894aa59a817678ffb796b43e4f49b1199b20526aad8ce5c91c36ba68a9114afa5e476be19e2a9dddb81613a6f0168cdffba4c3baa1755fb1ee3b9b769c313f50c0412f651976ededf5a21168c9ad3ef72d5968845c4d3f1e49884902d85a4c4167de4c9f93ea0dc308e119fe2c5c4be1c8d4bd324e632870a6d35fa7fddaf66ead656ffb9dd261df5a59b9c1a8c23832569d3e5ee855905b8e732bd07d51d21b297cf5f387ee8ea572526d7dbf7d887b5f196864ca930b31890e4a16c74d43e9349b7b21f28ce8a7e981916ce0dcc0ff2aefd7de65b9fd84fefb36e57c2bd04b77375c015e4c0479185de229bd6e56607276e9463a28ebe888c08eb6fc8c0bd469d7351c3b9a667b975dcc3e95a0cd31ae452916c87e5abe9f049e15d8dc6af674f182dd1af68331def7bc060a22a9d546e123da8118ce89aa2e019c819b5244312cc1be6ceeef3e67b23e3a9b5250ddc4c1460c0486bbdc42a335859757762026df7e5aa1f20ef3ba13cf26c9be76bdb06c2c25b346b718f11ac69b8a8f2b1cbe90151c7a9e76e45ea2eb6505d56ff7825832a22de724e22deb1138cba105bc60c5328e27429ba2bdd62f7fe025c10dc30be62bc4d699aa619ac1d7db4b7a71d615331a689d01916033e7d1e92e0e72eafdd30d389399e424b0450359dd1dcf56d6a36b8efc2d42ee22b0f5716c9cd972b475d0c9bc8a21ffb2174597d454379ba00fdc3aee9329a049277519401083f2b64b1118a00ee64b16b51945dfb24cecf7e506dcf2b7d83f1d97bb5176fe04d379cf38a5ec8c93af54aae8b44dbc71f344af55e5972fb102f6ae42ba4fb9fe9d757ed1e20077dc9502654e93acd739272ceb43f54a5f66a48ab795a458d8b3d94fd6576d7a7503849670c5447b9714f107157b8c9acb4b8c40604eb010dee6ef5f6243a8b8f8bb069759c7474870a7f969aa470bf6f7e2329e24b85e1630ea783aaf21144a7755836b8ccf3c81f834a8cb365103ed59bd301a618d1eb78340ec48296a30bd758593a9966764c6927d77b23603f4ec855efd3bc31772932a7cb42e4da99e7077adafd7e30a8064e3d4feb525ea6f830f2a0288b5e1ea37ab1078539849be11f250406d0f42e00b40cd962a826ed43f3bb0d877b696e603998ea13ea5d5000079fffddf878b34285dd9e6a8d82bb38faf85f78f418116855a59b765d2d614ca830f20a5c85ddd2a7f8c68a6938b8dd2df1bd835e35acc3b8204336fcbc75cde822051566e254ba04a5784ba4118d3c74ed50312186ea7a485109d92ed1358cb0bb62877d59c102822cdc33a6d5e25db8363f09a5d47093ef7f16e95a364990e9452ee808b0ccb00bd41bccd74c5e46df12b39453e6e91993f491eeeab158e1790694be71b01cce86e75d9ea03daa01d3cad4589186fb111ef6a36e450b0a884a47ba931f215a63daabc92f67726e967aa5c9dfc87a4e8577ce74f3d30c098c424fc8ee7acb2d78f169880a95b1510bbeedbbb1618b8b7c86c42b04fc7bfaf54b68e758ea753e14b268c1b493c3fb6a86e8d154c2815aff331ff12a282188cc4cd83f58d7e9353f05f29db6c87015bbb9e03452552462156629edebbfc759182ce8f776a9edb901d24d44999b7f4704411b0b33813c4cc6072848d2293315e1d5e0373ac84a726301c2dde576ba384f05e27f7dad90bf1afe652964ce2e652f2e08292d9dc8096c7b999120c0e791a3ed7cb8ba43e9641a3328b92b177ff10b1fa7f2d68e2e2625261a87d4e0cff909e133dd71aa0fe3cd8fb91fae6af0607c9007bdbd04467094eb8de888403a1987c94d172b4acae33cf85f847530475a8b696eb06b68d690c3b339dbc547f099288d138d6f8be20c6d57631009d24d893f9225f36720a72dba646789125db820f116cd68c5d51e086a950deaf1b6ca92a0f474af399681f080e75f19f7ea5b56ec4ac3cfb590477c3b98a53bb5468620b675a20c6a302b811c2569b4fc56a2e420123cebc8242513e64a732adee948d98afef93181586f879905cd82aa0a5272955782e385f980737592bfe0f306d9652378bf47067513abfc6ed2aa886c36a754ffdbe075772044ef57d0857c07026d89c93d7582eee0944f4ac1551fe5152c64f3900a1e07cd2f5d83ef4001538999c5dbbbe47c2d9eea9a80e2aaf5deb6a8cd1ce8880a0f4edbc6fd64390b523690de9481bb7c991557e3f87dd294bde2c498612d83c1f96cf232ad7799216cd3fbdcded6230a9a0c81349adaf484eb6128cca9a522c92bef19aa7b7088cc092681c8a00444af984d10944e41394bd1fb7b71de9a8eac0f9ffa344f962d9391f9cba9c25145f2fb9ead0cfcf9c973d6786690e752eef20b433ddb1132b1fe6c1280872b064f5c2cc800a28c4bcb84619f902fac166b2189a58aa4a98c3b950239496ac56a89749193b060e67f6704dc39a259152d2dc3f08b8799ffecf4e1bc38ce5b77c71cc293c6664ef2ddc77dae0e43130ae15b5fa8bedfc1fc9a046900d6b66129632fce9a2bc97399ac10763fe61c6773781e7e1906382486dd92b537daaa85c388eb210f8882d7c1366d78f789d45c383b9da7ab2a3bcb86ffc64eca0d51ce2e7c784258a6388253c1040a3ebf14fa41720162c6f48fbde546c9bb1f3754445087fdb9df4d947d3896fdb47c4f844a76657137d22adc0289fbc384a0205aef12f3a20f0b443dcf56fd81fe1902cb53c05b16af3795cca35c65db32b48f0cd85c0691cb4355dc80973db8717da0921e059e17515dfd05a745ce3a4cc24d1206170aef75f1461999e2a0c99410f180b12f749da6ac2a2f162b7c085a342313812945e7957ce09b201e6cdcef3bbc3e162426d0358de3f3f9f8b86ce571d6b7527c009eb44ceb0b2035ea1b0b64cb7355cefbd78666f1f95793ca8e74e131a780f7823f59c92f109e0e62ac6ff5e4c874133ddb21a01de838e4fa978fecfb8b138115f00d5b7453a4911cb7a354d0e57ddd32038fa42d68a4d390afbefafb0a1404ffd9576a817c39a65f6530eb57717713247857d9e923a448d3fd8a73facd8a678924bf5e1f32663575dd9d2040156b9d596101a61bbe3f2b0caa7abfc07c7d92fbf6cd9f161d3226a448725d557860631ae7157589e47e6484dd174615bef56c9d7a0a952ee6a56135ce38095c435e4cae321cadfc3b67db80bfe771c13bfbdfb6d5fda82e35c7cf7096768b1e1d6e425f699eb53c6b05794b7874a68b9c96d390322f41e0b1a1569cc9b44d63af962d73b521f7111d5d242c2f464e3d89cf2e71b726c60a033adf028e7bb6f2a0e0f3333d2fda43f979c56a0de3d29da9add9a28c6ca175d39a53eb0e512e9599547de72a4fc699a660454e39d59874a538bc6bda8938e9c8ca989d71c11d1242f9b3d7a30a23ddcd1a8a20dba40a892478bf13c903f52e8ad19861de50eb3242d77d4ad1e65ad515b07e281dd68fa6cf76cbe480643f0bc2b7397e7d8801bd42f6c48adb6dd14a272908ad25f58e914e39c62428337d491885653e77f0c57be95f6eddea27f103aa8d0ff91b89711348c99a1ce8f919b0334203e7f410a034e019658c269b22ca47e47d5228189ff4662f2d14e93d7a08bcf6fbc21b71fbafce2c8fdeb651cd65a6373901742c80fc4f726954528708195aa93517159a3cb55ca1d61dc3d1589d6e8d2b4d264c7cf3ab9a34234c602babb664982e0a13cd0e327f218f74a42d3a47ef3b806601fba024b078cbff4e4b85772e0e4e21651482f7ce577ef251b204db6451e15ed165cc60ba1c9292dbd07046107fc082177bd953966230646051c3cff455b73347223f07c308c12e8f2234cb11d1cd56b168daf0e029eef359713ecea72f4b10e89ac1c2d0249ffaf1a999ad39edbbc5bc454e73b394ffc7c5793e7e86c7e51b3e361a39eb58761f89ce679590bbd2f6bf79fd87188bad072cd38b879805cc7cd05c11131b8c8cc4dff7652a1f235c12426cafd216f63edc14e6ed92e6d24a5c267570f869a82b127c8e5c15ed0e9f40cd862cfcb5bdfb6d071a2c477614a5e3c9eafd92db949931e7f914fd0262e4a9e92f3baefdc92ce38cd70f4d52b52638402181867c381e48a8a2558b670973741dcfa690f70019652c855f4d829b15841384c37f517c047f48efe76723e994caf2ce3349aa4b091c6d8ce4ee0cb0baeecb7a8d23644991ff4e4a91383eec8fd3ef94ab821f93462fda5566d9fada5c9fef6aa51abc850ff0421a1ca6c1f9abb69c89d5e25cbe16c7f846adb5540345be07bed40d611ac47aadc6515bb3f7329c81167b126bb5c20c51c8802b2012bb749bdde2a45ceef9c315b8f5fc1cd06aac27a163b9546191256c44a9e368ef07e9342f9786b4ebf5f60557d334056b9c0f159456801da9cd3bd120ee8433827144591cbb5c71f80239020bb2a875b00fecd3551c0fd074bc7509c618b78ab340ae930c15cd9cfc66b4963c590374870d6cea4e7d0d74aca8fc9b9cef23746abe4e69676e823be16a91485291eb0ad8dcb7e1e541221238d7f70f0c3a71f98f314d63958e22598e56f5a0b52208408bc5f440842ff7b100928fee7cc348210ae2d209fe3d56fbeb720a27ced4041d88104c9092113459ec20ecbe565051f5c31906e40b43c62be005f864036f84a9b705e65777ad8112e4cb350a01aa337ca21e107b226719f05559e7e0bdba33ed01eceb209acb84e5d0d99357e59997be90381956ad72f85332b4fe21657eb6f04c0c82706535e8d998932d2f6ae425c473b049fe122d0a5a5f5f65b16183b8bb82aed4d13fb253f724412c19f855849535cec7fabb5df80fc4a245181b91df54891a08ca90096e465c2bb79ef7b25d39bcdabcd20ecd697a4ac4c6dcf970d3c54b9847e4c103e0ce2998f744cfc457b9f21c4f0f754406a2d70f0f8765e73d16ae70b9a53868519771d21396e8531b1cbddca9385789778f54c949a1c6c0c54d9ce985975e006baa1e1f3419ab27506a0761f1d51b656349aa3b9bb084c11274fc4cd4429b92d30e16c882577e079facb7f4506f2ba072d9bfad2e3e07b3cd92b5e1cd2d58e834cb431424d7cabcb0e9b5ddee8dee024d467d6729d2b65d9db0b1f099e0fbc834ea8b4d4321f80f2a29e964f2b7cc539c98cbb0b5f5fb892bd5d7c15fe3eefb7b72d8b906be6ec5b6743bd185752d5a06d790d2fa2d3dfd1f090f9c48bf9749b26b11a2963596a9fbd3936bce5079e0340cb6131f05e582205441c87cfb607981dd1e4e1a0ed782a24dd97bf6cf18adce3f24bc4d0259e0d6bf558e221fb0558fd1e706bbd2981752ebf549247b73897b76c214abae02dfea51343662b3eea3854e5311a1084331b4b4cf1d81daf03ce3bb7865629048470413c4086540842c0a5d4cb9f3383f986fb04f3f3576f88daf152ef5993094dfcb0bee4b534ed9b8c705ba44daeaf4142ce75ef667d7f445878dcc0e79174c70e8439b495463550f644e83fb7da7ca6d9362e28c3f834a2c12293af62accdac202c3b1488e0960f88840902605f6296a4b28c447e604640af9f360f5d3d7a49dc2911a912cc7623cdbe4c90d996079d5fd41ed7084e2a8a7e3f327559cc114c9d0b7bc6c5425c3a3074116f7626c227450b6444e40a380cb7930755cae11900dd33d81202facebf5b15f602e87a28c10ed8eb02b43d1533d63b23454314f823374294ff7e4e343fa83478df8318a1f707bd11b4db5f388c648814a834c0451015a8510379b53317a2500879e88ad445ea3876cfdbd92892ed1a6a13228b765402d59ab297e821e3c3f923467b39261a00db98b838335bd3da5281fa8edf026b797ab0815b2fa730978067e9ddbc1e0ff606f5f2730648cba6d0fae2fc237fc303e850f43624396a978634c8627c3274345afd231eca85e6fd063350dcf154f71caeea8fab4e3f1e4e8b1856cc01fa0346383cbe8de879b22772d9b8b3d118744e4efbb84d064ea8270f91395cd5db19963f233962f8bab9c0975caf134b40c6f348e3027df4eeb4ab742dd4a7706c43cec04f081063cf7a52f41a987db8446ba61d5ef2c09275b056694cbd2e6a140e3a7c2ebf18c21e505919b20945b0b9eef14cce0db7579a27b24f7c57741b68d573b330c30e9c2de83d68a1762dcd17ad4f47aec7b4ccb28749a74b37fb1cd136051603c8544a74be8a6177637855d4333aae7f956b5a654b870127d335d6f39c5914f6137c55992fcab48255c7e3762d2dd1bf0b2d991900e4dda0cdb6e236950a20a648f965f1d878a270d19f0e73d79361fbad8e0144440d9d246bf0b720bc72d992ed5dc415251eebc14b503f53ef25cfa3d10f1b7d614bd0414265de385f3d902a651c2889b217d0e237adeeacc04f9b463a13403af53a1785f5a8bfe409c4f4fb34a6dbb5fc1df2523aeaa4e4e76b25613d5d27f37c52c350da1be4ba48a37883f0a086205f7bd09fa9a8ea72e1131e635f2f3b4d631074307441e531a8438b331d7b905f78cbfc39286b37fd39d1e6fb041be28f560daaa368ad29d0854fada71faa82d9c488c59d1ba405da5e220f66e0a5c65fa1b4c7281bd03b1d7c02604e6bbff615cf2cdd6a17d5eca0ca7e0855695f5f34f2805a4cf23d818f091643a7a61e32a9f54293fe919354d70b606235029b0585a4fae480a067a59b98e5b8314367e0fcd34499e91d4ec6e39d539d9440fb51e855aef6419ac10fc9c81b4e79c80f8984e5bd4fa80f7acb5cfcd21ae1a902dcc370f6f02e45ec38a0030166efb88794d8b91735ca0c99cab9b6567aabaf240ebd738d7295363bb8a4d652a21179628b7ea9dcecbd894e5d70367b3d50d7d1502cf9bcee24e051f84eae69807d9f12d5dd4498c4f109eaec17099ac38f97bd5998601fd34bd8a1700417b072829e3b1c7b25b56f0303120f24bc5fbda6732a73964310b27883bcd87b9ee1f8df0b2dc7eea9cd3b7219363f1fab148c340ebb468d1f5a1c3976066a0ba06893d14a7d509e6d4acabc90c9e46e7263afc6aee23b135136711d2410dd4ac8aed407f0ac5f00ccb88d511e6f97a78eb798ccf831d99f85404182225e8aaf843f29f1723d3bcc648103be1679d1417caae7b56f2caaa828021e06d561faa04f94161c63928f47b15ece722d9b29c2b8981d2e682516b3c5f65729d1adb5c3973828e7396eb2092f8c3e1ba825f9b1cf19998697ddb648cb879d598ba4449ff7b5c2f068045c975ba3d2f93abcd9851ca9fd5c6298f1edb550411487d81f8bfd7774b66405e768b2303db949b241b34dc3a91e5cf962092fcaf2f93adbbf1df507cea7d1e5daf3cfabdeda49c8bac2cee13d5aeb617f217762236639019bdc9ae131432616afcf009136badf42ad4a1cad1a809283b1dd48b042e9f70c4e3e3b9e3d26d53afe60f16ab5f96ec2a1afb361d13de6b2a282f02fe202f93e3eb9739952b163a51f401ea30d047ccb307a3fb9f1d15c80b9b92a5b713fb429f5e4cf5d028165f7baf2f4d48c7a7dcec22ffe1fece968706ff643ad80feac420c369b63dd0530a539dff069b4ba064fef378afe32e49f045db0d8a081ce6638da25844842bb6830148dadfd26419ab1102772ff546164bedb7f55df043d7650e8480674c412711ae38299e951afbfa4bd86227dd1de6df291b847b378ba313cdef49e73d1b8ffd82f3520c8b762c99d7fca26042bb9ff51f9022ab86fd33b5ef6e1b8b00c0d490a403bff15d7f95d0dbf6a0a2cd292bd5f79d37b6859f6f939f865e1c3d38e00f3df0d615b33e1ee7804fc3b4266e70c7dacb2b65db7b3ff403c17a639b8c99c57440013f33b9b025ed8e7260f4925813f0a1667e31998c2243a6d825c3c3e9f9727da73988fa31d34b3b176cdf9eca0060a750c92eff3c6388bdde2d5de5b7f25e2e2fc958098b39c1de19a19199add7536551107bb73900fa8ff54210fbeaf961dc03b84ceca49f7800e0c7af8bebe1f064d219bfc96941c0a3852b840b6c56a30e8acd0bad664d9728d4a6e47d6b63602b39ada33bb66d0381f7b1622024514b4c2cd23e54b78a47df5d05d57515a8ca42f094cf1707ceeab2b19c523ffa32821f518d8ce781a0b0ace3ae2d7ed1f757325d96ea6543aa9ebd1db4fb72d6406f0d61c89e70abd5f917ce67929d87972e82ea7b9c2b544a462aa2c006c0a0c43ba0c4491bf61d724ba886f9addc1fd179bafe0a8f7321f60b82a78a1a3240060d60e3d9ac82bfbecde8732c254281ed5d63000c684492f5154c96d8e0ce9f4e0ed4243ff91b7903a85efdc7a2d7963304045a4ad2a78f918b10d673009ea3e46584f045a9c9338703938d94cea444ea9625738973a200109557cf2321aa350f3cf8b0b16494d594070d89594eb0745c3a4eb394f340cdbb5da7e9afebf83e19b8b9ca4cd4854770db565bdfcd040fcf19088232fb86dfda088b8ce10893a448034ea8de9fa37163a9f669eef1a6fb8c5bda482a337e1cb5c188207f1d8051e5453fb02f6df73bb796731d4e62a022db274d6d45422f6d93ae280d52d5c82b37a5154c06e7878eb2cc57dec6c9fa6a03a5e8594bd1a1babef7f2bb22d5741c884c57e32cb45d509e7329131fcebabd4eff33750487ddec7cc56e93b7c88c0b1e628ddc6a7d816bc1b272262118ea02025ab627370deae9164025fbd85416df430e3fa186eaf9c564b2b97e9450912168e1fad8ae0ad09bd48f9e5c4f211c823c78f69948a2cf48ce9b8683401db801c8b986f12f2798e9fddb611fe2d8a5db54c9392c7a4e0bdb4994629ded28668c6a0de2d8830c49badb4bf7aa5a21bad2d22991c2e295b3651bc5d3346219a3a9950397f77260ebf8b408e7677ea3624ffdbf85c34a20d1d08d5763b06897774093c32cb5c3cb878ad139b9bc1807a53a1fb49d9778976c03e7729a79c74aeb3aaa76297940f723587a07f613eef48b7b7e2f61a734a08de6713dfff747db067d234417adaf89ca4af69a25d3ca131dfb62595a5948e63b6173e11a93aff2d1f246547cb8d92c81488f19ce64720c62a0155a0f167a0f7e5c348673b3c93652815acfe3028686523a8bac7a2eae866253de59084794c45ebffd5293c15b509313a9dcd1f37d3f4408337daf99482a26fd047ece525cace472167001232ee79c8e79a4d0f388005f9acfb1f80d069fb584d0f3e8a19b70175dc70645430aa473dc134f676a6d71acd8a773daf2b28d18d28addde9a18b70069583de887b72f22e3bf041fc0f53932ab02e9dfb0129e55cd7a6739a79d2aa57c103c7159fc2fb18dc4eb7e5de800faf92a3b8eafef78765fe7b6802ff071107f382c6820a24d26c06c2d0ea90e700aac65926f5710c3826f1bf53b9ada33495b1834554372308b66fdf2570d2f2f6caafc160b113f2882e45c4af34f231856f6f87dc12c3180e766c061e0ef12e528dd37eee943424e7da8f3dd2eb893ca413a202e3442aae743a8fda331b8803b442b5d439257e2df7ba228d7773cf2ee120ed77034eda40ba614fcdfd2d141d8ca7eb83c8cb3e78085ba42605343072fcf59676b4b95e6941892043e4ca01d66c1bd8e0261c119dba1d88b9f4c359b328205164600a2392ba20a5ee8258fdc8a32d028bc98e74098dae449bde97b76a232f92d2adb7c65784a645304e80545ee249ece93ba8f235f35c6c5e2b27b6025e81df33e658c32221a8829bb1a6a213a9f11c7af4e208bd6bc674734309e2163ab59b2ab253868d21a5e283445253816ac105d37dc0240a876ad16deea4c80068395b098a4e9ce2f51cf9a98f0a052285184d653ed9c0a7b6b817c0669ee47b378b9372e68082de2c7c1c50ea442371b98537b2d0858b1f8a4ccbfd533ea3c1493ad8d94fbfb4d92841df3bfe873ae95896694eab59dfcc628742872d2aa28d1db59faf3e52cf6e891cc6ad2449b813e2ba569b57cd4b48dff63ff05ce94d29259a6c873ac01f08bf5b57270402276c086f841b4e663a1f7327f8cb8ad1204fe137a3d3bdae40225b8bf55c1657156c0a248660f7ab38baac8b216b1f98b84bd13bfa374f63cf65be3d459ec3aeee8e9887b1eefc02c3a4ec9e2e71839671b78615b4045897192d77cdbc81a4802f6e03f7bb27c4136768c3ef94516f60d91d703385dd71aeb9f418ebbe87215154650cf2e6add843a060c2ede79d3b7e7ae81033c41523111e4401e5e021d2b90a2df417e8d3b129eb375a179cb76045c3a1f685136dd574d2b7d36ab5d4212d9d0359c5265bd71cc456f9fb2822765d4fc583b5e82a012063aa0dd8a430a505a98fbe891388c2b2a84a43171e81063b7bdd5834a6ec4eda5da501ce3fa9d6f7ac4d92d254fcfc82237b95e9e4356856e453d48ff42716d90d335fa9ecb22f7a01a7674f5f2afce1b28592f21dc24545f5c39936446ce1c30edf87fa4fec16e36647bc4e96854c77d1d2aaae2fba057f3ca716b61c20481edf041b3dbdba45ea3688f26e9fbe53aafdfd4d9cae8f21692568cd8defd3a2430a3b79f2caaf04e4fef5ba1ddf18ab01b3600c4bfea4319a5ca33e2c340998e5fcf034a7fb2d0c7a2c0873dad936db028e95672aa4abbe992ec0d92f8d34946e43ccdbcbd3c6a5004a5ba024229b3c23ec27deb7451810dc385c3ef66fe71d425b2bcfecc90e671dd649cf982fb876ec5871e370344be0d9e5cfc01f3093ac18cf9781796f66db295c6d62956500f3d2501e05f416e99728d3b61d1883bcb947fd8aa0f02b6279c9493109ba67273b6c7f86c6a15163bc2f7e899660edd4dd56819faeff7173bb64293f1555ba7dc62113469606683cb88442c4dc96b37e70dae820fbe5f62d188088d22615b3872c76c7c80491efe7249dbcf25008991c2c3b9dc928421e0139b4c4b4bc7906d5c6f4199592e24cf588f2699c8154e33057ff1ee2a4925d627767793138de18dc3e2f6549b16603ea4e18c52df0fa464d9c9be828016538f35a2f22e22bd35e2cea6f573ee0aba937fc875c111f7726e662a885e3bf2935266a524e4215e76b2a645a4befc111a1510cb49af07d4a097d329b74b04e6cd66e109747cb8798b4672476dff6a33680d807271e469ae1528494fb31183f9e914cf554cc08e155ce65b32b7fce3788cc3f6455328de8ebb68ef22e4785f33cfa4581213764c3ad1d98990e97e0de96e7f9bcd58430e7b79a1ee2cb348419c675ea3c7306799f0d26923e86d4d908df7899691e8fca27d37196df58648d03d9a89d9fc0d5b1e4047dc51c3aa31156d0d2810196c1c429cdd1a9503c641b51d4e6f213a111a8331187b3da808f2448f99a631ee4a6c95e154ea8de0dcfc97446c56a407a46b6fcc2d8e0c1fef57c4fd84492097ecb1445382d17e142e3e1fbbdd878aee2e178a186e5de9b0c72a3ebfb45a069cb8b6f6fa5019902526d2f589874afa7417e77d1dc42ffae4f83159db13200a86184254dfa608ea9d2b7fc0b654e71c23c8a0f0e3154e6742ea35be5b88e555dc731c06096de8b504a40c284b2ba51982a70d8a734b00595306fd1446faef0e26310db3808bff18e0fb42d74ff3cd19191df5f4d44c8ef89db25304a553885eedb9dd034dea963cbb97e972ca96a74371931fd60e02406baa57fd367f7af66db77554a07770f4491ce0c9a4c5fb7bc0116f54d62a535ddb025ec451dc5781620fcc392f060763668c3ea912460a91b8811a5c9f2f292f6f2b2d70fec5d273667a26565b039629bb9219526758ab30524afdffd7256bfc50af2ec9e440d312a082eb71c975058f71b6d98d4900c6a2b6f37f052714010da516c896ac5842 +Output = 3c144f7bf339e899cf7f5697532041a7f68db6a71dec6b42f4a44a83b01e9ef4 + +Len = 78904 +Msg = e69ab474f65fcb419f749ae9a994c11e4b26daa19512ffb50bd48dd593cf28a291e3001f50415220a47e3100cde786939f15565be0c143fff2d956f8b1d2fb8e9f414d033fa5940ebe870c8bd8c6e970fa2c9703a444464a1270a6c31b36ef5659db25888a339af136b7b4f093d8f09da59327ffa9461180b4c2079d98a10de207da0f16fb926bb35435b099c3c6a502e8738eb9b76daa8720f600eeefbc5c1af1659415586b0f3a602a88ec333710880af4529796611b499e351a1fe92ee4e75ea53aed6a658f70a2bdc553aad43815553dfd030dcb6cac76a7db964e9fad2f98c18c06f929f23b6217ee35ef4525920f771764e653a39aef73cdbce6b9c0dce5e20fc9cd5e4085e75f8bf9cb31dfe881c92622e7a0cafa52c278f9782124d48e304d9cadad82357abe250906406ffdf35cb4a5d95be8b3e7bb63b6ce82e101dad2cde862bebf33635c43cc681bdcbbad574854832b06aff6871659ae82004913f11716b538ff67ea606daab96a2e09f6e36b99afb92bd5c74d194ce1c988967fb4b48c6bc44ab957f32b0bc0d46dce1828a3db23ad5f0da236f5f52f0081cf68442bb44f09a911f13c06574602a2f4594d7b83a8aeaa3fce6a31be5fcff3dc14c804f528b02357016485f6139cd562027b78f7066415539410550e3bdde7a5cc69c8b6bd60c173cf923151ef490c005ad924a00578a7323c50e94c89d36411d74ffe61d7c28a4da3ef90cea2b151b6ab9006e66d9269c20e5376e21258730a7fa12e5d3e7d86cdc5a32cd6f37dab6c3bc7a632055961ec514184379e151b780a88e012ba3abddc7cd58dd2ab55230a54a78dea967699994f4299b3f5b26441c12b9de813a1386012ad392892e0bf783c584278e89019af4e7c3fbeded6564eecb3ec471059fe42cd54ba4270c7899e3b014d42c350e718971afdc02229fa87d34756977b0b176bf6f298860db189659bca37b2ef5e0dba72425b21895557d4bd1062401a5e8cc2d4ae595e3147c6b3a2dc872e3361937f261de249dbff751ef43598aab6fb642eb1b18731a33148729a5fc52059027f4dfdd219a1e0d15d4bbedf803d1689a799d323a9662c161788c97a7aef27e8db0e3d89898f607316456436a36204b15dea832b4867949f3cdf78562d0366bbafa92f6cb87c228da8f22d61887f461b8f0909f1eb9ba373be5dee1b66c4dd2501061ba030d1efc61c3c6389b7fea56e45ddad9e1a6a203ba5ec75f0ad9a56ccdb0d495079f48fc6790a4cd5b945e9538550b75a5e3cd59ef97353fd8bed975844a600a2194fca36c743326e15beda7159496e4c3d798845c3d9d16b87256a7245b98abe9a4868be0fd15b7b53cf3f71c8b11c9d418902d70b0837622aaa95c2e42e2dcd84493005589b1025fce2e2fada6e0774f2d50bfdd7e7cd09fae4e0ef2bed32f75db9ebb4aa899894975e89b5986977fad7c36b5f315eda89813c15a222dee163af0061720d833defacabfd49098ab65778bce9a42055a80a4718fa82d0ea813a01865ae88a71455fc331065f36ba0bb25d294e74adb47db3d3e159383df75ca3dcb29ebe283bf90b65576b9f25dfbd330f706279de63a2acad00f86b71eeb8c7c7eef49bf0caa11c1987f6b0e0e2150415fbed58bd4b5f1e5ddb9fc475b8dece4aa22627e80485b968296d3b6fac5b4af730b7bc5252fb316bdc18ea503b16dfed34fa0b1ad2ec0bd9a399e7d824d7303e79874ba461c00c606a2a870a61a722390d39ef8e1d2039f45e425d2531d0db713d27adbb61f4d8c4ec9c40ac11dbc0b595ab7a4bcb676c41c230455ebd907618e35d8b9f38e0bc1dcc37bf3c33f8e1ea34175559c50acc49382a4689af5d27bbd5f28d59d0cce1f571c3acc5ae47ac5e534628c0f450809326fa08b0ef8016e37aae5aef0f006ed34308ae4c6c104a9b58019a883f83b1a7f56634da64416d173a589b6cdfc38c40aacd6edb549be329ad0e53ba8de9860e0e377210f8e751e07dbaf7d5275f63c30edc94794e2f9e8eb835fc5ec8cc284fd734695992bcecc5ab9a1734cf1a1ae4d7fbc72f4215a354e3403d7ad772bef2ba27c2bd1a06664e2cc1a290be3dda2b6df3af0418961b0295f5bd18a22471801ed62444790ee70369f741f2de0fca21398bf500b8f82e21351e253f112969806b0b38f7951c966dc8039c6116da134da18d412b0b8303382d811cf80ccbcd7a088ca6dd57779b13b2af5ae54ee4dc370ebf3a8ef781c3cfe4e74b4a7b50c5f65f2115fea7691f7d90c124866e774e68e9eb89306538956fc217593d46017b7dd7942d636e384a34c802a14d5fd9916798d7d6193ef1a29e2fdbefd955261496d8ac9713922d43bfc43a7a410752ccbc854cc85268f411e793f9b5279007bbcaca30fb16fd9033a6ea31566b4f2c27f0161107e2cd890bcf563a522ee0eb96a016e9007595a94172a4aeded11fadcb8ab5f03cd154f8b8e0e0666ff62b1ccda0229f4f3744bf96aa597bba7d601fe012c9af0f28e4883fa19a45b3885be0895257199064f11c59d6705e9177f8c88d11ba1727ee6783c99aea9ec7eb5680f23f1d216a058406b37f53200bc5d1f1fb0eeff02d2bc42f7d54393b522706432feedd7d8521e4c6cc2c6989d171d2e15291d202c8e7e3d58456f0e2fd45517369e7fdf68ac0fba4cb651a608b83e2e2b922ca14a12bacbc0528755c704c2156c7b3e75421eab0e7d8b2ce6fe101eb3a584a3ff05ffe072e2953327152445d3672d9015ff1a8ebd91d9ced7c79f5d4325890995cab69dc71185e8de84c36ed5991e1b5dfa30194c0bfaadf50fe668512e17d41212d7313cef9d1f08b0529b9084d546a9bdefe94e5e9650db3165de5221a989d078c24948df435c2202625a88aceb9875c4ba6d190c153dd6c69e1deaa2c6916d5718447f633116b705632a4293b9876ea920134096ffeb845a0fa57f13f781555839c1451dbed53433e59952bbc7a9e0d5a17a5971cee070463b03940794e004d6b73e4e51751e26185a161d97be5678d4bf10d83f0a93072590c6adf05724086d0119dfb0dc68091d413f17b9d6439310e96521612b99d572b15d316096c3ec85b7f29dbe5d3959cd3b52d594d7c7cc24b0e5e95aba6b47b81d45c2daec561dab4c46ecdc801894b2991fdbab1b79809a962174be2f6dfa5014fee6b1b04108682e85619ded7c4647faf4ae8f19cf6cbd199677fe033859f56906f1979b1b5926df4c8064eddaeaf7c15fa2936b3fcd36bbb3578cce40d2f269fc97fef54b7c71fefabdd419baff6c9cdf7c6a88513e81ed1687fcf92e11e1a82e2e5a6767eed3de1e9e7de9a30ff0ddf27076e99a3d192e1eadc11c46833d943a493c59e72cc72d369694e619793f1517433b177155770f6a2d7b9020a380ceaf5d07555fb2b63cb13aeb8784e7a1d2dc59498a8cf42601578b8f0d52ff35a7dbfe6de2281d4bbd4cffd4568bb7c387b01704cb33b5a094854c6ddc33f2e6c06e91b278d6c8d20f3859d1cb84861ea411210f420c06614961e4aa956a2afe98c5bb8791e241f3b321dd767f05cf0dd89dfbcb978c5302808be8c7b16c13f7a18fd04fb5e1152b3987ff34b995ef2b65a50bbc342b47eeea41dd47c8a02a5c7b1b749d6d49bed302d9439f23ab83020bd4d573906f4190e74216ad33aceab775f71cd31092bba5cfa42f0845bd16fc1b8bed6434dedc92f80b395aaae8e17322a13da3583277fdc0672622884117a41568b810b9d0755f9cebc9f266fa8b2a21b85b609ccf9055b5a0dd5073ee018499c9da0b681aa87166922ce710486446d39afa9d76c07147ffcf9924910a6108194da7b6f7e3e252b56cf6bb3f58e953b8d79fdc4e9bb74f0f620e11583cb2b90452b595c1e2bf8e39ea9bd13cb2a6cb51dccf8facd7cec57506809931eb7311fb77884a5e8d9c8e34a9a0eba0dc19282f38ee4a19fb1455c10bb54ed69d3ead5f3aa427364b15dd66289a4d043bad04b17a907e0e8c447a640000848ec851d5b00a7dcee1b197e62ec5dc97cf57fecb88f03aae02f1cbadee71f6ecf30369458e6599a3d947af52ff200c2e6ac77ae70658614c9fc2166ab0effcea7bc4f1575aea7c389573d88e67b59da37ef0ae01ca1198fc2d83b13b6bc8a70fb1836695a5f78a1f9edc8002f9050589747a0486349a361f349d288a7f9a79bf1cd5558ae01b67ab6dd8524b138cd832d3ba1b0ee670ed385d94e8e25cd3e99b16213a9199d4897e7afdabe157bb8a5225375de6502412da01017edd84138b0645fd72645391640b5ec31940261f9049d17859a6e2324b76b75956d695c7b29324d0b95d7e008bc481bf17021f379e8c71037aeb4d19fb90f9031d58027f04c42b216bf7a970655c7c482181a381e9bc8c5f4e0dd149a7ab4e951efc4a87f60bd19606cd468f8515a704c549438d164c7be25fa92f4fd4380095f81dee911afca0751638d5ac6f92ba5b7ee38fc7b8aec8430c27a7ab05c9e77c15475f28c7f9206516e4e7558955fee2bacad8b0256619e7f013ead9b0d34bbe13032c9da193d9dc853bfc2966d21d010589bee50104b94787e8596a79e6b5e25ddbd78e1c5f2551edb874869c897d5ceb8ac2b4b00d5ef8503f83bba566ae7f722bd078bcad9b4bbce4e10b7f0e984cd95864cdd6d24360d563fa6bd7e5adebec8db7cbe721b4407f4be206a2b406575b6d158eda163f1784001df995e62cbe198bee16403e08d6b157d8268c2c4012fe5365862e2b8a92d89e6ec343eab37ca570e3d64c64f164df8333e9bfd9cdf61e85c5326794be496f998d778665caae0d07599a60391671666895ae923f1887588ed5120ae452d1a58bca84c1d9eaa8bca99fc1202cd082f2726e03c7eea82d18d8e5b38c8ce09216dfd6597ad99c1330c226e900a2c82fe03b4d77b54b057dfbfe97756110d0213010018435c7476405fb9f80864d65bedc2d8488eee6a8e05e6a6b062cf2b9f59dc70c8377358511a8b06a06259f21e632b3c3a5c9441b0adc96d0b444b506859c6f37e5b396cdb2a58b070862fa950c80788b5cf8d5d443e31e492e5cda2e67c87314197f8d99bd68e60705c2e227b831e64c2ce23e5d220e6b64c2b9c4ca02ae6d419d3f6c61a87f4bda7cda08626fe387667429c01e3bab08941ff02741fccad810ef77d5cdea653701dbfcbfcdaa01d69ae1141dbfe7657067a4a4543e9c8a2e229ebd3c271997320da1bf9ad1ed194e39f245a98abbba2d4fef2aee088888e9f719740215bca1c76e7ca70c07af9678c41632f6372f25a9bd5e1857384723860efe40ea1229f16194bb3785e76805c0e9cb60762dc81470508fd122663f06acca9b88369508228b30ebd5baf9bcf3c0eb8062cbd70d131b89e309c1faf69ea8ba9fde9a26cda1ce939d25fda704cce379e39e49db64ae05c9f606d86ef458146f7998673ff0fb865d2d9ce087e60dc2e5539782a37541c9a1477cb84acebf7a59976a3059089c5cfe4b9ee604b732c9ee5ec308b7a58ac1a045cff416dc5144f997a8780a7af0ace745c080b61ee882d573c53e908bc598377f751e4ba3aa0edfe8f7c0bcdeb510b8ca963304837b683b2102b6b67eaeb7d753008951bb26226d19cc8ce88a4602e338849f886b87e49fe4ffe3a21482ab207ef6e7e199523a31988b4f2634300de72e1008ba5d8aa2743e3157dbe40ddc7341cc9c43b4cab0bde3d889fe32ef9c3509cd1102dfe00c48ab3b85dc439ce67059f62920a3dc20729a28cfc92ce1386d5a204afa4944ac9daa72e02bd9bc3388060810e0dd1303f019f0832f78b16cf09d9e19294014edd3ca7c19330cd85e2af486e60cc70bc5a6e1c43689acec945f52ab0de84add5a9b79bb738a639dc0e9a3d70b1cf833001780186c704fdf591a07db8befd00a6d5536b591ba6468f644828d0299f7052db28361977bc82625b12bb425886628b081800ef61b85c688bc1f2d7efc3a1eb9185a4449f4ac3d84a54ca96d4a73b4aea0f40c13564e32d2c0d81ca2cc37cc2ca97314f68372a1f066d94fc5be8f3ac243f1416bd3343a7ee35bff407286ba12f67c681f90a1dfe386500bc15d2f2795eb1643821ace59e7a40939ca978d54e67fc4c237b4b063f8845f51d29eca0793f6b196d8a582fda7736e409393e22921b5fa97d15834ca89d145d68bfbe6673707719fe20bd8a228e1f9c84e0ffb935f396c7d7f039570220da1fe601d1aa3199dd4e330a655f3f6704a255c64504ff96ab8c7933f58f14b89f23dc15acd57961a39f5371d814faa9ecdec412976ab8ada5e2aa073f5ca80e6c519523d8501470d3f3a87c9c1319fce03819ed7e5327df8db0b494a02684c948915854db82ca6f743478543bc2640ae7989b7e812715d56adedd019f5571923ccb6ccf3fd262068f490c203d8ba57809e693ee284f4a3744536e77c55137114fe71abd8baaa6dc2b1aac0928d5a2f14e0a4964fb318eac24f9ae1d98829eed89cdaa4648715c9a508f9f378607241bbfec05098336a9dc11b7e71ca2516ecff2656491fd8e4de706902fd1de8bf39e63750f0447c6627013755f9b6b246e5e93988fc7326b416c5605a2ffb9c8d723438bae7ecf4a8210321b60c379646743734c750f706f00d147d641eb9e26985265172c9fa428d263779230bb567a22259a6a5c923d0251bde2eb54ba150dfdd2d302cf8e4dca1712e9c017ac8acc64ad11db8d78248cfdd82e2c2397a6e5d04c9532e07452961cc4908e5fbe9bc4f883df8550e8aa75cdcb3382f5a8da16d767b191a6783cf6a82275e44e1813c9a54e0c52ed0a5926863ef9d314153808dbcc31066bc3925182d49fab2ee37a4232b6a129ab07b805f3d88909c6074924a3221c78757cdc0f738116c9454656996865a5f1d3074f7bdb42ea0a54a693d0f9127bd10ecca39743d1e328dc6a31350f002094ad31a7f1052424c00619a075a34455f87cdb6d53ba6e0dae3a77927eef321bf981ae47cd3a2440112389f87c6a5fb2d507d0c5aa9ffd9c45a99402dccfa09c0897a6b77842ed45e7f51d214b160c9b50f9d43004bc2999d46fe908b778f5aea93640805be5253b29c2fea54c6ff21651980e38c9d7970b43d59f2c77b3d756c4a8a429ddeb752abfd3530ce63cba2ec02ea76462b9f2fa7a23def68446ef9e4133fb3a651b841b907045dc80470be88501c63c352ae06f60a1cdef47f9e48d08206d3c5d3efb1586e0fc9f84568e4e88599449abf20970df97959e26965e2b02b721b62c1c8121886d9fdc5932ea67b28039122dd81708de4c5d8b8ae30781153f40303a7dbf467f5d561c67a3c83be9bddc2021a5af3c46094e3fdcaa84962a02f132ef295c8c51f94be61671d0d31657a5f9f0217b16fd16904182b180732a465d45b3e701fbe789a3c2ce63a9362297bd270314239decbb4a19e6c1a11efb54abf0ee81569c29558938f742fc6cf3c54c32c1464fd9fb40a5506ea18fa1877404bc08bd0276ffa423d1f9d6707e732979a0917fa6d313ecc86d841bf304b4ed90306964ae9152c099143ce7ae73880a6dfbdd86d0921a08dbf88ff5754d6c0976d4793e01f608ef148a293d5d531cb250ca0c24761efadc087af7f8bc86960edf30a112a4ac0b7abcb9269f2627166749968621408099b0757a23ec71b61a45f2cd47aa3ebb41a9b82b9cd7b1f65e7280e6b245d5bfe1cc4a807d993be6e0f6d832d5cc782c94c33168f4aba5c8dc1b1e42fa57dee3b877b0146cc6c31dcf69b8e7b141fa06eb124ef694e4aba578a94b32c52102f508fbcfbf583db163d1e5bb7545d06b512ddc385fe64a6a961a662e3f7c69eafcb89ece08a9c4acc0cdb40963f7437416446a162b50a48ba2aa98f0f085f83d00b0a9d578c8245c3dac1cc9393161bc5c170411e03cbcb5d21088b8ce4996a40ad8640e951b256ae1546624805af1ec2b8ef151081158912d347eaf60300ac72018169fea0b8e7eb5aed941bfd9bcab8b917bfd2a3741c6bbfec1fd2ea31e4d4d5808b0fc01293fbfa2bf497e188aa28508e83dcf163ffd84579bc9c00898df9680836a5563bc5609195e63457e227820db813b7e1619de9125523b9fc841240578cdf47c9a106a9bf900b89d734ed665f38e1cbf9f9910e9522f7d524ce1c5a1282e77f90fed247b2ceb6f0d5fd4645a36570b1a19853c94c47ab461fb40697278f01b55291a2cb39867b11eab7dc9098d232e18eca6099b657b0b553c25b981515a07174f61294b27bea656bd11ae7ae03cad4080c420051b7aa8b4795a5cd599b364c7eb88c449c0367540fe58bab418e8b11b3da728dad0beb30919a5fb763a4459ed6458a4b74a194761d61a96bf1b70622f8c16ca226b9055d984cf3e6d1a550f122299719cafad4343ae1ee9a3d31ce707d3daaee6d438b5ae21a0ccc1232daebd8d13d501d63b926dec2d5c68273369287bbb7b2ef3fefd0f5adf4e7a3b165d770d8d76eda70a5b67fa0f9717feff0f1ced81da00b029528596566ba14c5644c70ad1fc680a64c7ba3e8c41b842c6026a90f47266f303de973ecbcc3d3d368c35eca5107be78ffeed226b0251dad1699acbdcec67a4d2c9cdb8071956f6fe5d491bd25a2c26d427880c7684ecae686d340800ef0babdf3baf6dd2f9f55ff6de8cff208185af7b6a1366736c90a6d236c1ae29245bf0725bc6c5f314206066388500562e8e6accf017972b6546aa59ebc9251f325e5bd35199293413e2e19592bd873e084e400fe11c07661515a243b4d2d4aac31dd54946b0ff5b9e40cacc15bafa9eb8cd178b65a81eec240576d9ba6625927c9e441d6294b0315c440353e906c33fe513d989a24544843b1e0e63250c7f9e07eb9298cccca57ef6f57472352948e938296c51c37ae1f8026952291d4d4a980c0ca5ffade0450a135b067121a9f3635816ba2beecf5d0e20ed2b72c9afef463207679d2c59f79c5c7f9f97d7102b77efe2a95f4ccd208f3eb27f8851bcd47022e6beb972be25fe7968282d7ce557eba296233404fb924203c138b1defc62e084b1949aa69736f6111e8a7b3bb1e1881b380ff33ee21cf118213c3698f6015dff6ed089f16d924dccaaabc93afb301602d354e52408246224da755fa6321aae3b275ace7bc6a1cb5413755fa14bac5dfe6cdc4fdbf7145ed0f5c9733038139ce1e31ab16b2dca374e61cf849929bd24b80d8e7c8e3752adc47922bc609156ef99abf87ae927785a659da0824a1ecb35d8bd52b3634e4817a76e67805cc4496f0a86dc701f3e10fd3fced29fdbb13e560585103b82c65c6421dd80084c5956e3dd7caedc33f9fbe684fc4c24746b7e50e76bb05d1427f85bdccd549c59d8e415b99556064de0a1dedd2ff6593fd3f3eb277a1b6141f783c67d46cd83abca5acb47dabc36967c6aacf270b885617106ee6db7378f30c0656baf50d20769b722ce2f52c8b43554bf1a6ac67af105cd1d23602ced2e0a09051218f44c6ebb25a3e6180563c753f106eeed3a24e65170a250a9e02688f65bcd8560392101ca9e45daaafc73b918d9a9f125d39eaa6de1fb3ef0dbc8e31d3d248b30283a08bea970748e3ee1d0ab960eebb799d08582a892b5dc26bc88a73772eb30c77fcbbfcf8c7a6cd3965535b09fa44e94a3c1b84ecd7d15c8ebbfbbd1206e0720d891f39601b5ebc4798fddadc2e390cdfda5365a165d44c93cd0819494dc5d3b2ea4858938edb41871c8cc17e172254bc8782554d41e11329602220737fddc1e674a9b2d97ea6fd7684629756317b616ea83acc46e88230ae39ec6b371982ad36dcc5e0c8773c30a45531d50b09beb374d0ef4334e6323590aec941eab77ef622672f5ad715258b8f035d02f30c56bb5d7602529db77b827f334b5d24b60d4d17c838898bb4dd7e95034699a4b5fdf9872c3662c7d8c8b7d86be5157bb1c802a56494156cf2de8a54f9a1119692feee9057ddfc69c694362abd18f3361739d759b0a466e13b932f5d4adef35f2ff41af77d7b97ea0d789df4ab797f0a72cd0b8350fbf68f1bb5ee0c8b72c754e957ff2b2191cdcf29e05fb4bb69215f411c3fd0ba0d5cdd0f9136f11feef62e5b951ba9d8b2f69f8865ebe9617a82bafe81e4b0504af23173dfaa998cb61821f355f1020751bac1b573d30132200b9427a88ab0b8577f5304dbb964565a96065d050fb231e072ec3d8495aab1ec347148faa23056952c882f1fd3e0116f1811d51cd848ecf1c7559d22b434455185e8def2cbedbf96a2675f368aab2245e6fb1817db249d0820b430d8af3c70d28851561b581767de796711aa5e141d81ab18728098d3d696078eb510f731d8f1a4414aeed76bc3df1a1de2d5ceb977a4dcf090e181d50e2de42b76662ca2c231723f29e7ea49680aecd24f534d19a521e519dfa536b6b8226f311132a00de1047ab17f90d13ec9049a5ab3ad69a34a7b6c0adb5617e77925d1260210f1e1aa0d163ec8745cca7b3e8aedcc3ea4e4cc33da4a008ec5e5a5aae280c59bb2bc719ded3d710cbd6ad32b4721d5a17f6caecda83deb89914fe223fbc7d80d32fcfc49584415b4a39e855d478d7c50598956bb5e7cf9012a7493238561a61023319e91ffd933168fe3f63704873cd5d3f9788f757db57ff1f25d1c27f4dc3ee3d8dd0a3c6335acd2c99a6b26b573ac7f0b78ac85c6ad40785794905bd7e6d3f5813c04a688b9e22cbe064c068edd4eab5ddbb4f7de4d0d3e02de0289b13289e8993033c6a01c50fe4fbe6c2c79c636f95f161b542b1130b3828df539e75bcb3daf5dfa054ff963b7dd274e111cbaefd99dcc5213339655695548eb0500cf12552219d9eafecda4fa14d5544cde47e3dc7842fbcd9e48e5c0098346438408f9cf9008460023059f25554d315834e9bd729d2e6aebb1b55c680dc1a9ade7a5dc2d878de0bd533dbcda3cf3479bb71cd72c7ae341e6144843c1e088978cb20243cf672f1cab15c288892a6c19afeb5dcb6a7015f3454c9e165e105c726869cacb55cd707c31c1507ca2ac1c2a0d3828f4dd3b1b01a1b1035ead1b91ccd9754bdd3108d661ea0c6423b74087fb3c340afdc53a86ff53e834772f60dd29587b21f3e1c7e5604c5d59f8477643ff95557040e2dcce4f04688e1a659e930a5dd1c999f8790219d12abe74d3cbb4c9d112f56886b075730ba89c92e01367d2621fcf59e5aad0e100fb0e13dc9f7ecc57f306df515400fe022edc8b1f6da023fdcb9f9e29cbc6486444c57fd28fe689a28c311fb315f5526071ca6d841bf071995bb6e1455a56c263ae80f3561ba0843934e0942c94b712aef7e2b4ae9cbd3dbd46a1bdb8e506e1978ead38c7a1113e8483b1e73e4eeab15657b1faff6e8b0ae212ecae04ea5b18686bc69aa7dedd3b3d0f018368b2f4a0fee7b49b171fde4ba056f41cb9d8c7f96edc4993871358ecab2d7bf32c5f6983f14e672f661f2b8260795494383ed1e70346c2dde5fd18d557656da109a2bdbce5e246226ceaf741bb008aaf009b0d73ee31beb434ea8187da5d7337712b75ce4549de1eac01b60c086302c7b36bdf22583389d1046a47669c6c19010368063a77fb9b7ea4020c43e1376978c13fcb74f9b2d09ec50acf143617cba830d6f384266e1abcd55a5e7bcdf40b2caa6556ee4b361f88072a9cf30fe7079779f6c22db927b873b0893126370f746def9b15e0b533c3174b681595a26059495f5606a9b89f111de60d08d5b50041b6f14f6d0ed04267e6f241dd7e960a3d584163159a9d5a9125b6545a0cb07cdf926fd0e0cb24d87a519c365910535b202ec0ac9352efd0d515d1fda93db1bbca8abbedf5a81b7c76f1b9b41ced42c9ae477da0e46518a83988a9778adb51638efa55f530282c94ea41db49ad881cdc343cb8dead63b0375ad8ad405377e80a898bde6514bdf0b850cc61756f532a095e7902b442b13f04a5906de6a7961df76699a5dc07fbd05d26ebfcb5f6e102e79976fbd038e02da6a64a6be90bb84bd092be5cb8ae447409e94afd89b8b42fed51d0f4a114730483d96117b5e450fa1c9a5453996c2a24352443f47f493f098123f1ada559ec4c22bb7f01dbb5e2b141ea163aecc63f9965447171f51d0448599c63576b7dbe6d09c8eeaad9150009d70e5e632140e72c20e65de689988644cd1790a241f45c0fbf8e4a831c761b5c4273b77cd560a354ee6653d2ab6047875212241ee752577caa781d1b445da7211ab69be887aa06bc24611db6e8f8ca989f38782dca1c336c6112d0e3bf303610d6537626a68183ca7952f613b0c671e0fae7274f58c6723759eb007d0b923a73fbb6f0c7c09bacf833b88769a15df018fb9a9bf411c596661b7d1637a7f836f2f16d763c543cd4de1a0e4c392923a77917ef40cc83ae02812c259cb422d6cdf66df39104dff9bdd462c0bef2b6bc1aa9e641d0393cf46910f2911e62eab241f6b7c5bba1c266aa83c47c4a36d89bcc23dd3ea4ba9c1d1c8e052be5d49e1f358c657050a3b9e83d64a59d88761d273e6f733258d12facaf60da72bd798b723b200d601a7b1512e8ef9ca10420e2f2d3f53ed9470d76079421e8e1ffd2516fb54a063163b8625b3f8cf02327d7d8834f5d967009dffdd25d59c716177f7e4c2672e650b6bc204593d566906dfb4c6ce2f110a30bb925817d60fb7baec160bc1123344a9e16ed5698516675611bdcf4415843eee7399b8986efdc8f2048b71407e3667b84592802bf79665e8baa08dded1b96c006d1ae7eec5f00cd1685d0086d2bf38003e34ece7bc5ec9858363e7e38838fa2f5020cc61026feb1fc0949edd37561e48755e03e5fbf6fdf51410c49d658a5243c4b04f3b4e03cda3b339358bd584815a9217ac6cdde7670014ae0e528d36da0473d458c2d0321a26ea52acd9d3d0c9fc3c68cfc68ab7716e2c46ac4b2bc4fc3a0293cf40b1873a700deaeb0f5ac35ff71b57553929f1820603df86d065bd1fac1cf69cfb18879549c306da7591e3a912d8ef240ee31a01914281842863a8aa236703a83c2ebc9379b4b06153a1bb10171b35258ddfbc58d890348e9d4e0d07678bc4d94a1aad9dc789ef68f0b1d0fdcc8b3340fd465eeea096018c754e749d403141186f05e219fceaccd795eaacd6fbd1f05ea83f892bb4fbef66f98a66d47601814ef117e471e07e4d968a74d6046a957465d4f3c477db680704712b6a14d0a28c6119773a0b3bee7d8d1776d6f0e27ec83fca89973adc85504e255809c517bd6a3b2f4e6c51d5e161a5841835012a34f3d2d22a8adc80f9d22d5c3aca4f13f924c27bc303a9760003c418847a9e0c60fd0833fe26c58f6d958760f9351b8cffc0e044ff867de5f36ad31cdf2d314eaaefc7372cf25ed188a24677bcd28f4a76497cd42a7d34eb619ebbd854d621b9b9d0f924dd770d0df30050eaab2a141407c47d716b703650f3a8629408fed61536a88543383b3b0d55b78f01f0c413b45a3bcd64eae8ebdc508fb298262cb82ac87f53dc66c8519757d0e903b028f2f016b553f5d06dbb56205b922bd4e92fbf185e4b378ea6b574a152483a16df1b91e33bf76b45850e880d14e9973abca39ecd4c559bd95bd16cda4593ec4770f45f6bd4a11070ba4c38bdc3a122822d7c8d905259526f710c46aab1b2626e63e7215388392a7a93dd2fd870a115d1c4225509773fa27770cdccbb9f8ce4b1415aa1465fa7028a9829350721d1b8520afdbedfc3efd419de7ec4b2160bb93891b7a5ea62d3e0c9529912f2e019522a86758fbb3e512f7f4586f73a1f162b2cdb65f6e798a60b5f48938d40b4612d84c1f39244f14efdce2c4d2df9c19580b5a8cc5ce60a06cd7302806f99a6918f8641dd8d23e3cc84311c3b2d97047101fa7e549e8fbedc6c2d09c980a7bc91c158909d49ff1cb40ece9cb8c1bdf090f624e8658689be +Output = 9081c7939dec7edcaee2c2c7e88b2a3fb171a604739880c0f5c96e4cf49243e8 + +Len = 80000 +Msg = d09066932f606f4fb3eacd7f89793355297006f92ed2c92b6508d92924df5ad3ddd1710df285b365cb99def6279ec78baf649408d1782b06cbecebbe06569928a61b9d645fee6e588a934b9b78e92c910627f8d87166f8e36c608ce570771cf154f9525f1da2867117627a37256148af55419831b7a3160a70ec24680a49cb760ef0f8c7d5a9e5f89b8dd591d50e042dc438dedb4b376fc3fe181b0d7bd48ffefd8af7642e0c71353d9dc27331f949527d96319dd42aea563e6dd99d6c204ed2484eb7fed1d2146f2619aba3e029fd68a5e2f840fb846e0a5972c6df8436f23b19c4a15d6503b5f07d89f7ea8ba609b567a59d8d674ee52977b04a9d6c1d617f95751b4893a83cfe6b760e10da795682e9668749c09036f9bfadce9dcbdd85e6e6e88e8903c790e2186758dd74a9cb1653ad1e3fb05049c35af3b8a84a7f44ba34a563e65c6b9be4abe43d19023e4fbbce03ca36dd9806ce700a728691098841a63500284799444b4d75258b2b41ccb782eef3f5ef6f5564287862ff478638c5651fcf176b5b736125a378fc98b9295396f801458fde1ecbaac7f2db14fb3c8c98eb367a71b8106c5cf59e34f1ae4ed732a95cee65eb494c1f7e89e1a2727cde68229f1a00b904b519f4fffbdd29238b80886cb818a1be2faf268eda96f2df05fd4b71c0c16435848526031904308fb6a51d9a6b510565bc81466b8f9b844f487eee14325bc38c21c81513550fce7da2ccf04cceb721263bbe6687c5572fb4ee1494f03977def1d309499578a608d2951b8aebaaf3fceaf38d0f4a4772fbf440e6c46d9cbdbb4de37049f34a70e877d8ba72e0c7ac9e972d17c71cdc95f0f8861d06f325d4648699269d9393167554b3d23092ed8b1017318319654b6817a808e0e2ea9a65e1863d53cddf1b3fb7516d8b4d68e437595047fa8a8d5d9277ec0d58e1bac4173833171e613daa94b757500c50cc7359812cb7a4a4fcdabc18addfac8acb6b9373776fb0e21707bd7c4ca27ec12564999192c8a8ee1b8a8d03d1c405658557819a398c31d8d4fb610e1aac0829da7d9e9069c32ff05034ae3f42058bfb514f87b361b7c8c9dc4e2876a7b6d30e558711869bf0603304a2c6d4e6e965d3951c50c8d6389d3f97c8bcbbdd0807fbfd49997b0f97643ea09a7ecba7babc76ba8682e08257d9c16d30c2e5a2e9cb753a8ddf78ad0062998ae57e2b6cbeb76a2955c6044c5ca4d8c650e5fde0a3470674198b845d7383cd2c4b6dfc1c3f7f394951c33b1c8e250a0aeecb0a7e7ca43513b644a80737ef61ed93f347a1833b6a8142228dda3685e2a1d31c1464bd0a8a7f2cb2eb9395cddd3487b913e2d314863bef8a026e9cebe5f3c781247aada08e21437e55e9d545ca6bed6768c7763214de21a4a3c108809d6892a140a8968fc85fc350eef23f81aff98ea54e38b6bc9cd2a01877b9c26c9169fb2673d6befec1a273cfbf941aa614463219ce1dd9dba77e348d863f11d6495ccbb5c2ec6e16ff531ca4cfb8b0df81baa06eef5e28b6bc4ca5abd93c3fe64eabcaf937d2eeff0cd88677264747527fbda24abae4eb7663a3ba1b779692c627bcc097d97086e0709b79efcd27282795b7fe5635956a4224eb3c856837539b5cf9753ab0ae7ee1b102bdb4cb429b874c107d396a5aec43888df490b505c99076c9b188c5751d2c5977196f287ee79a2b30e79b611cbba016efa7e565ea3ecafc933b291fabade6f06157c8edc55687ba7f042621c11d82577a202c80cdf87476c1dcc6c63a743afc283d6621fe2e7781669c80b2325b11d196260c0f9540b46cba5c07c308bb4e073394f2cc11b891094b76511c58bc740eac802d192c5eb267e683931dffc94a98ec2313f6e53cfed9975b42671a8ad49622f738a6799a98efad1813dc06e85738bab472a86402e579b313fa9c5f0b58ef6253d5bf643c8b8a77e52e09045e9d6d050db6ea75516f72056622c3118929a3d25cab6ad58bb5c2acb08dabe37443c236f788c20073c34bf71c62e2174a6e3adcd963b1b4d03e1eb442d7ca8a7271bcb33a903aeeae0b8cf0fc61035997503ae794a49ce9544e26f763b56ee1a051e5e59e7559254b6cbe58cfc82dbfb7f72d5a5317325d5c0b63dedacfa0d04508c434ebe0278e911068965d3e6931f48a9a9fdf647bf633a05ccf71cc673fabc1e109e878ad11ca1f12146e6cbe9794320a1d00327f9d20339933ee55cc1618a2c5ca5ee6f2973cc04439cafa34d9e016043c7d29473b6aeda3731a11d63dd5d3f7e116d1fe06311c876d388fd3df205f106420f2dab65af501f5bda98d9c2a7dffb4d5e2da48ef5b621882d3a4919c34b6fdaf3540f838743b239fc4f91c5ec866ad66c18d43bea45ea26e70aed89bbe7f6ff39982e74c91da64870b23a3bbdbb33290151fe1e81f0174c50bf99a6724f223b4c7a76ddd75651f3f25121a87df6ead1a869908b4f6d6f44e4f8ec1468f987fba67b771344764be8dbcce6a0bfb2085cdbe02a2694e628bd3e174338127f7eccc20bbda9a3060a83a7560798f5850227162629650522fa11a6cb3da5f1399d3b49ab9925558e0450efacf315b1d86ecce1dc2ccb127c49fed96549c2a7c069a387ebc80ade66cfdd0f32379b6734a4bab94292cd4f8a9eb12075e632889c4ab2174c98cec028c384a076538ea8225a7d1729f9e00eb67ef5168d916a3635d6c3623ea9e58d6c95e42df9c583d719e68095d2c0a7e2885127461ce9de13159474134269e3b87aad78123d0c0f8693ef619fdd95897d88bbb419944e02b1c3ea3084e8674db40b80bcf7a095862918bb9c9fcad709023015482b943c6c84c96e7551a100981277963f38c5008c5120f1ae3ffb13ab4307044fd68d33902e8e87dee40ce4374647745b702acb86713527f2db1eb9f4a2860f37b4ffd211f19bdcc9b67c80bfe203a1ae184265092bddb5171b76585993257c9c316c86468069c3c2637054a6583484b3ab9c5b88c3832f975bc27d6ea77df2e9f643deb25d80d35555a8de6f2b42b3e8a4a91d99dabdfdd02663778851f7f8ad5e1629e9eb6981ff27568c9eddc6b5d99de92990f3e6a67df5d9f55b251c0452e3641651ac9c662c3339fd99e228e0f2e1ed1e1281b5cfed64a6753b93528c7720be229e3381e66913938004caf1ebb13b2559a32673d09add5955ce1f4417869074bd03f2c299423323e2441aaa3cb0e4126aa734d93f22da5335774b693c1dad3864477cd6d5243c4b62fc33ca3a6e8734dfb34f3e8201e63482bb8a2a4088f179b6bd2427409b797aa081b8da8b469f2d173bc81c3fb48b6ddc2f6e1ffb64e7a902f9ab4c6224854219791c4395d5863bafc5520adeb7247f903759a2934e0a46f77154ae903bea324c46c0adf097e71117d45f82d5866bea4d67ff6abe90d3e402a8d2d6716e12bba77f6862020a4c2ddddd530cbaaeac2e6235a1d0e3c9cf009324884c8c27995eb987561870a90fe26064df00f49c7fbc8d24f36da975761d4768f78926e4d88bf0f32c2992f0bcef4dff562829ec51251cca66a9561043aa8dea9314f8426ad3fc475d2e0f8dcda505014abab0fabaf8af7a7e0c9016c228e52e0d6866bccac72a086b8e3cbcdc94141f4f612054379793c9ac1fde157c28cba7a90c08b072c6189ac9d2a11a443d09adb6940e953192884c634ba688dc2adfec086844c9fd5126830a93e332af20443122cbc21a4369fb5746287fed5c9f607fae15a165b518f265a03a697277be525e1680e17fe79e5b8ec72ec0bf87f71bb70c8ca510445e0a972d4eaa763897b268f45bf31288a0176768d71f7bf8d250369645d65625c0bdbc04393caa5c2cf2f66ea56d9ec10fed65adb9f2bef9b1ac82fdc9aba3d3c1aa38c792867b6cee829ac805b7610b4e1bfdf83fd0d535059f008590ab85d8d14e81d9e31e85f56cefaaa2e576f5d1db41b4eae1406b255e9643d0333c88af80294bcd936b466028a8ca81dd12e9bf37fd1ef836a7fd351d20d15019f508b24eb8eb152c033937923c5ee74511a92e048c90a2b89de7fed1dd2da7cd6ba29bbd7be443256cdb064a18fc35c5f9b098a19ebe7cdf98c7ed1d19ad29b5e6c2c62cf0cbda181ea836a0dd171fd8419ca99f91fce9240f298a4f64f4787c1d05cc3d96063c6c8f2d6346e733e7e47fc9bb6f14d06a2e877950f95d87f67874c808600a27fcab34d6f69cc5c730831ad4589075dd82479823cb9b41dc364364a625349ba59d4ca6316b22f7657c2c99290b945378c40797d564b5e065aa65831c8d0be90390d969d95b7a0a834d5971443efb3c36a2072cfab6c987b8e5474697ba8660d679d9e61b31f26da5068239b28d258eab9e9ebe003c56c64a597135a438149172aab6a183793caf4f5a4f690050b3c92c3c66d1826fde1a9e896bc6ce7047097cc5f832beaba93df69b19759a34167a4cedd7fdfdcbdff329f7af70731d8e27693e27000943d8981f4b68e60ca1de2092356a99decadcfe7126a4c93e7a5a79ac85cb901fdc3b4c3e0db640c4146b4a70a5a73ba1f7458b1888f4478d215c8edb2f4e795ecf51d8d734aa0c4d265e568ca11669e3dbba3764b10661ebace4c569bd381232a7bcbc8f728caf243227e33ada209b10e29b620a1163bed67783bbcc9210f1580fcc65ab2a06afd5d2485eff935e45c59679b95d3c94a4ea0bc9e0985051ad2b320172dedd7094de8140586f7f48005e81c5abf28501ba72e427c2417a729c28e90c528eff82e4aac9903dfef05641681f1f984ead43661dab1ddf5c730c44dd8f4d8320229625c715c89e2299018f5ed8e82ce5f7c24e56ab1c964ddc873db58f359356c922cebfe059e77ecbe250cf49afc84d1716c9aa6ec4959a096bfd4d7364f18765d145f1c3b4b8682b612c15dbe708e86da96e7580764bc59c32fa01d65c2c368afa22093a697f731a1677ef2a1e5d4c7e02a3646ad237551764ca7f227ba1d8ab35f962bef8ab242a7adaa79ec633ddbabb1ee39848c6ccdd89c521e244010238ed229abbe2ca0fdef6bacbb46f3b30c62b376f934aa8a1811a90768055b847d6b8442ddba86a7a9a229ee80589b1ea02eb6384e6682b57948fb2f9a72145fde70fb47878c9fb08fe770d78fc96564e036449b00c21ed637a618337a12728a8fc5c1a272dc7fa4f8e7c6cfb242596e14a3e407d6ef85d69b528a79d18e7dedd8935eb966512f692acab63eaf6b7e24849c1fe49a96bf9bed74d96b668d3d70000258f62b93b6e96eb7c58c4febdc6e774a7b9b125ed50f75368b7003b8bbfc513939c0884b1c0a0bd67d225a6b7b3537d4829207f0ce197abe2aef6eb7fe771161887e46216ab64b5065669892645f0a63bc3240f3b2a046343e5270310ecb89a1ce9a2dbca7d4744d05c1d1099ed6391fb0e38710898e1fc14d00d1cff4de0122927b05c5db4ccff4e69ccc7731800b2fe60ea2ef5cca4e8de1615938b79ac10b5c8996e30e06a46e8f5d52852647cabce6195a37323c1abf81ddd0145fe51085b52ca8bf49e93be3886e2bdb8412bced396e779014cccd7fb6dcfd0df5a938b823cc020093dfdb7a5a351f2053c82beb6673c1a40962aef706c6a9c97fcd7fcb30d16d4ff5d0cd5b8c1cf6fc9b535dddf592001819e6044cfc039cf008392ee764a3b15476a25aafa6897719659a9bec6e32fb974c4018a91dfb9e2b95d58c3346aa96b61e3ec89e31e66b1cb8852c405aba7bc7ab583234f31777223089e3d85e4fe41ef58c5f4fb49a9ab09dfc5a00419448503d16991505bdee7ce03d79fd34f86233047469ebb70dcc7b1be76b55a9272adb0b639775db56cde1aed998cb510fd99e52df2c99c2a7c9253a2ea8661cdbe9101b25727cfe4bdafba045866a3cfa1106e7b3f1825ed0585702ba595c21184c9677467351f502de6fc1698b017d23d214ccda00cd12f043b97c71c65e41461c1627ace21d48e5a0e8162df1b89df0e470083aa1a3676f50f2af3c369502cd213731410707805bea0ca97afeb823cb0ec1a3bd1c2ce4b548aba404f328ef1623a29feb293824cb82838136fc29971b19afa64ab88f112af28b61af43408d87eafe799492d7bc9f31f6a64b31338247cee418c8bff57637183bf0266f0566893df4c523880dd03ebf0d219fe6fc6ab9f205012177859c4280625952be9e0185e62c8d805402e910f46ff91c62afdad850bd6a3c29680ab5f3a9a21a7a34e6e1ab4dd8933edd8e7d98c536a9ef72570cafb15a011cc548f639b8d565e9ee9e075500af448dc748ed72b6e12dd36d6bbdd68cd9589ac5df6f1a36f91d55f5b05dacec197b8be79ec84beb009257ca9d538ef4ef29e99056865ecb17290470a44d77ba1e207e661876eb0b9ebfc3ae75369f91a55c524d35a5cc2036713f88033d8011c61baf6b3e5f1abfc09c5f437ccfd10d02d91d2505332edd5edd4d6553978d9a1a54661f99eca0af701172b13984ec0d0e88923f4c984aaa9755782e1fc267fc21b3eba9b0834482b506462035beb73cd252f9c4953be82deac1060cec26d6e0e32185320b8ecfe1986321b7f6e6fb3f551d99db6586d2115e094026442ba1ee69847de233730a731f104c9e066280c1a0d3bbad46e0cffcfc156ea5ae3992cdbac61be0af9cbae154f50ffeed9c0e68b95aa761bfb1a697cbcdd8b0b3b86f26decda755076faad23ffbb1ff31fa6ddcaa9ca52059622089d31ac570d91001a0de836968c456a1efe7087cc85ce664c67b7ffd129a59057a1ce27f0caba910e4c1cea9426db866e05405b682f6c7bdce32edf65e0cff1d14af0f4cadaeec64998f98ae0a8afcc24c8edba85485053e9bd9cdd92d37bc2ffc9387757b6c3fc46851c8c1e9a48c7ddb9e709a679308b0d67706eea6a2f905ddd034419d6c0bf9f90e462a0742cf5f368baed4e2a737da2615827df2d51c655d6ffcfa3c36b9ccf3cefa318bec2d30055d7c9dee4afc8634ba28ce38588f182477c9e67f53af02ff99cc1e9e2a0eb7ef1cc13fb302be7aa86ee029a1b4b8e6dbf0824f8f4a5766c478a4386785dabd9dd16700585ae67f293992d5557001962ae20f7b93a318bfeb726ac80f84f90ab784552906d7da5d5f24261b7b14d1f2b85658b3b4e759d41b900616bdb0d466e43b7301e40303dcf33685433b288fc02e53443e1a9d846efdd9606a9a8fd199cc00a9d21b65c9c48d789595be35a5c933e2bd66ec4d00553855600cceab596a18dadfe2d28595dcd4f03f582cc37ad5700aab71537f3551750cef43808cd5a270d2fd7b32eccded71a86cd6ad5876ac8dd3f4a876bc8b2a5c07f359d8b8ab097beeebe36321dbbf0ba80255677e0115314581537e8b6aa7944d5594ffb94567e23891628cac251a4bf6eb1e85bc83d904693aba92753a92c6e6fe3d1d1709844cb8d842d51615c6d99c0d792d9a64c0b0460724db0163b199dbd59b595861286275a6c967e6118a5ca252ad88a10c92dae4d1db80b74dcdb633c1f8dc06b41acc77e5416aa483307d0ea004bd58e4172c4c7e25aa1f60adc4f6ac9acea8692331c67bf005d9d27ee3eae1c4f44852174e85f84b81c2051b6c2c7dca56c7ea0b3a6b521f610c663d363efc3657f7bf59e89725942c27a2dd56de1cd09cea9e9a8e6d5015a6c5a7342010d9a20bef94a6a18bef4ad4d6a1bc291470f4c999ed97d6d45f1cfb8cfd2d476a60503bb837c621683db3a05868808ed4637e055d3fccb9a8667a88ead0ee535379870dd812811136f619b93461f12c28dcb577bcfcffe0f24c7876668841edd40c91a9d98b9f19fe04c246f2f2d6ac17c4e348408cf9f2bafb5eed898decbdf301b438430ce7e0c74ef7701b85f9b5a9014e9f71588298065a7414d947b76aba4039e29cfc220f99bcff5f368120f0e77c3ea5d6c6627ae0510114e01f6c9d31b168ce6ec3184d7c36243acb4e1404d81dfd82f73f603f4fc84f15267bd1fd5f3d882540c9914379a4ac2a62549d9a85cdd25d5c2c458f5ca7a43e32c4b0334ccae30e9b75559997eee05684fa825af472045e8ef3d9140dd649b78c63cfe60041bfb206312bf6dffd08e7b8aa8deb2ff5dcaf14fee4736c3e86a9bcbef6bf848b65390965dd0257b76c0487cc84f63e3fa27576b32e5781c5a23c4a3fef65df8e1dca2c773166090553d678c6302227379edb3d7c7e665354e797bf4d818219342e8df8d0f0cafdd0078413015918f4c41706f0c09e48ead49be3a34f73bb3b64e2abf4d8e2d53afece37e0e5c780add0572117e654a64e2b07477caf8eba4b067f4ca9f7ce30c878f11768db41015842a4523a586928884373ecd4d49a2754014e979d967d83af27b74b32499143ff0247c1e27da5759e0227f932265fa95b3f97b55a1bb875f7f26afcc6987defa9f7889896bdcf369b526a971f0da4e96aa7a2ce68f045aea9c05051ad31cead5f0baefcdf80b112841a86ee22f1338f8821b6094d7becd7cd7bb3736e7a4b2428250317442e11b26342c125c33ad242be951c8e93267798690ad98991ddbefd0c2dcd114d2fb8bd3fb164658a504aaa13eb1d86c158ac9887550bbc9fc1eddf130c551282ec6edc2151b6d5009c62708f0bff19607855802e4490341f8ea27346a8e3416ccbfab71009019eac84e43c3ade0a6ef7f038f767bfb21899aba361aceabec6923526f514c18be7167196b51d4a88ae0e271ea639aeb7909582b8504dba30ca7c93b83f35619ed9c7cc42843f38bf002e85ce34acf9e8c69c7aabe832017f75b34b793c7cd2809c46fbae51a891f88ddd72124ac8888ddf35fb43d262a5f4eebec73195f0fa79571b68a3c3613b7b7ca656b0909643ee06e96d47b6e590d75e256da8f19ac2d332cf79e882712090f60e9971ad1d1352613f39803bc4a870ec71a7a5f98012d456e9984737e0277f239fa31d4a65de0318bfc5b60a06d706c129dcf255acd3c6ebf12c868ab7378f2ae0dd7c0e778e4754f17ab0cbb304e304d57355ac26ebef18709d6e22fd3a0a3459ad55a25a09673d5ec03825d4174ddefed697a6f4449806ed52c7a8ba173668937c72ad1639aafa8d0014c070f78d772b6c80ec20c508ddf0b559c3f6b65cef15b399d8b4045ab406a00d458f8eebf6e49dd726b25589c4012deb1cbaffc3f067b893cb3b54bd92520aeb5c39c3ae83b1d166fcb0de61e3a922475a0ddab59412f5282db3101dbdf8a476ac777e20481b70f3142447d9636ffc3326f82f78039dd01fa72520c05c80d876de50a7876aa9e247191578396cdc24782882e6556490b342e0986cef98730db299cd272c14e4902ab18c58c9257700de07b3e794df7405578114dbf19958aaf386f5e4576c52e0638490d1d1b7c8f92c6c931a7d9ed02e2731a1571086b719014dd0c7509a7d3bbc3b29ca984a57782cfe2b6758c62c967a9948c8928719c1a49566b85ec7ed0afb7e5f2c6704ade3a46682b76c8210a518601014c0c6040aa406c0a0ca1b28b3e9f43bdd861051a35d4ba0f002f805c3c82f0224e268035cc849e565ddbdb8a04e46c4c63d94cb211f568efc6250925853ae24e040989b1fd906ddf1dcd62537f21c03cfd4b9a4c4b12f53c1d4b340cc82848030217c56bba0e4b12a128df5e29c1cfee192a663f3dd7df729a04996871b5a1efdcf3cbb99e28c68fac60bb20816f1bfe2c084901869e8831b0d391cf1e6d7042d9001521f6aa60a483f77e31026414ebca67ab39a1e1afe7e64ac5a72ada43caaadf3a4b6ffd9a0fbc6fa116495b5b1558cb155e1c4b8703ceec9d9733668ce5a6e3938c668cd30fda3bcc36b2af4f297ba50fd55236de23cf0b9205a4accc0271afc96b86e2bc5351ee4818dafa719687780345e02de5a66b5a3b791b1781cf8fb6347f2d99b648b7f9bd432ea752cb20d6981642bb6e3a284b0277e3313eab45797d2de71c417e70d0842c2a507355cc2326ccf649b82d8a407f78b9845304577bfbfe3fd4fe531115455a5a6043b4edf047d07763641f05ed2af1fa7b8f892a304976847e3d751d3a69544b6154770ab063d74292e27d2fa36d8a129114983228ee1d71529f3309b2789059ce260aa7061337e442b3c67c05df97be7fb2c003e84259730c943b4b1feb95122128ee4743ce88e91d78995f76f9a14a61ca7f13d0eec10606acfc65c55ad910e4dd90601c0e20ad6d71545e99343d4311cc53e6856bcaa6cb49d4fe651ee2b293d4af85d14ab5cdcd6e960dcf27d234fa48bd0078120cd1e51b835951c03893b88e8a2d062cbea6b7a0bcc19b4cf69c75c038d62ba9de13ce62562b2de74110cd6bceca4cfc81e4b6b8573e800c20e62eb345ec027bd4e8f1eedbc84beca2d63d0ccbf1f852c5f43525f3b90fedd7ae8fa262b6bf0077cdf9e192d55e58c44091d22018bac7e141cd79f0e5bd8a8162130e2dda93e03d4f411b19c6b7b42bdc766c69c2e6b47a79ea14fd38fb3ab48d4366f5ac3393abc951dbbf010a774026353be7651eb0e7f9159767275ba6f79cbb3d58c0108339d8c6a41138991ab7aa58b14793b545b04bda61dd255127b12cc501d5aaad476e09fa14aec21626e8d57b7d08c36cdb79eea314bdd77e65779a0b54eab08c48ceb976adf631f4246a33f7ef896887ea8b5dfa2087a225c8c180f8970696101fc283b6c0760ca58ba24278996817a90b8b165a05c91a09ca156e0748c7bfeb24efd5550cacb6ccd5278d580b134542b6ffa44d3500b37cf1e9add20a8c927000bd4abbd308c4bc89608110952975e7654f844e4ebce301d8c4ecc32cf3b2313ba14075c428caf720f3aa5cf8092e09aef142c7b36c3d3ad71d9765506b93c12e3252fd507b1e2f344775778430d21bfc8b4c63f37d267a858a3a32f572bb8250f6febcf87e42b72bd28f1ada3f06a0b6842d8d9f8e43635c6141a68c979e076c45a05f3cb0ed11703b33915a92303a956242bf081df867d4594a5a9648bfc2a8d4e43e8da151d0c9d82f8595c8e34bf1ac4872dd8ada0a85c8b0a9a3149546cefb36f56bde3577613fbf520c51a45763d88b4380734ccdd946112e2379c2f6274f14fe77a5ec780ee88fa13eaad7df546da79b8165e5144737e85297f6ad734a370ac411b70b44fb590cddad5302565bd219f560b117906834a2b190f9d920b04984d0ca700680ef07b371c8e8c85ed2ac4efb9f0378a4b4c2ecc58f11ba90f20d2fcf127f529e328b000811ba7e5b6162d2e89ccb7cd3a55902f8e2dce64677e847f97a23940f6e399f0b3866b8de709c32770a8798afc26d91d64c99c0a3ca7189fa820b3f570ac9dcf57d7bfc4a989eea1148b6509b847725e81cf6fe5b521f424c9aa4b8f7908246418148ad4242016631d7d63919741c1ba8f462e3bfb7682d6a446e958388196789b47b6037f55a33634875b6bc19a30f93337c155352d287de1ff7596d69e5cd38b772a9ae3b0fde201af35e05ddd26e217a90f7b8ccf50e028dad7927be7dc3d8eadcee077ba8d2f2bffd936948f0b3ee3a402f428e361c81fe1f8944de57f7e4cf08a1f64fab9e55b7f2fb58d3a46d53f31810a30f1c3fd711bbee3771fad5d6f48469dd1f9eacb383620a77165416fd1567503cc82dd47c49012c91f1ecfa49cbdeaa4e73d89aa6b2c9252679963d4441dc428261d196ec149dd8c6e684b197d585e7acd50fc4a9b696e00985d14cb3e8e57c1634ade390f4d05758b878b85ba208a67acbaad7371f69df72b39bc1e67b01616ae91957156a474cc9e03f5affb1e57b5ac0102ed94da067f49b5c393698be96e2d7ba4de405710d9d162f361e758abaaf4af657fae1d90e21a5a92f3e927b913088f7448736dc3e34a2eec6126d87090ad4b3df364c82566c5af8f05928d6c4b68556d7797ee733431ee487861a68cadfe5ef20f60e1ac55733d239309c4ec5f7556f73355e30a12af2b6e6e40c8e94a106fec9c4a730cf54b8ab663f9d41f9756197b4355536fc6ec6cc80b6a486dae0b069261c9832f8f7620b13f08c6ef3a34275f703e468a980f39bd17882d022316ac4e28861bfc6a1b877aeddea1439236060d82b8c443cf401ab55941808fef59e787b729425bd063457b35246d02e58540eb416dd682b5a998189a3e48fb5bfd42a6d75901340776e41be18232167c485d637402832f906f3a4fa2268d30af2a421150be5f6f587becc1b79ff9669fa8e3dce522d432a9bd89c039a2581533077131ea0164f50b9ae3d78124c9da95cd5cbe5a73cf7348b90cd4275ab0922fbd566e6dca18ac68fd53c405b8ab5aa8de4f709c9d7edbb58b4bf333f59d8fea737931a0c0847db7c9c3f00c04a6ce1e03455c7349e950375cce86271c27f4ad5263e04c8caf503f29bcc35db0c21e4066c5e9a61f17bb17541ef3c97657a9c0829be539d6a10e4943c5a5c2630733562c577fffc610059e9ac2a4e2ac34976b2aa9a62f45639d1d3f66fe01c57ef3a880838644e7dc14115742ff3965c6a4f673168df681fce703462736e37f2e477d88d2663e2984d2bbb2276e984a16b9a8846900553374d3438091b5303920171f6ccb88b5350f26e3d4f758c5022bbfca862a691603d44824142be3b09a5a4cd455f75271b285f7d0e43d2589360e9ca4a0e22fff982330ef2a7d292a4be6cce56bdc2d3949ee2fcb0b7e3cac8ec53a7efb18bad99b6972edec10ed68f4cc819ad50482d6a253b51c714407f6b15a7fa0be54726bb3aef663806b98303c12523abcf7b71164bb710b3d16ed2f48d45551121ebf7f89fba49c0e17934bcbc2260f473b36b0372f4be0987d561efa3ca3db1fff09dbc45764dfbf9a45814ae3e75f9f5a657bc5b62be2a900aa8c709951840c7eb8480dcb1e73ba7e1599617e7c73ebdcae3cb358f95a9927524152f346950224348e0c5ebaa1284a6d5db79acd93544778b9ac1d9d908f7ab40547536c552877e575681820b13187b493f53fc20602252abb560effccb48239a0f7c0aa0ea70134c5ca0138ebfcbc5104c27543161cfd2e0a593208562fc649d90b42e806a64a8745d922eb96b271ae78c7453809ca58eb6e5e929e7529ce4d792be10e874ed847be3e821ffc7a2f32b7acb6892836bdc9af0d34aa73ca23ab49fea605d7c635ddf9a029bd637d7c458818d11ebb85b430940d221596394ccd0e2d98b33e37e9afbba820ae14e3e34fb4b39ddf0ae2c588e70764c5279fd119935fbf0106c97a27cffe6ed857d3e9b8042622b55c7379396ea200a46d233bf99f3d24d775a372acfc491b25747518e93d196886fb6057abf2870099b2ee11d4f96fce1ed5ee59a50931307cb2f2f7482a33783c2dd2e8473a5d6b8b3c27db126a9cc5bc6cd1b57cbf60b4c45a720e3e921d59bd3bf1b27310cd4a6455f7221aba6c129b83751098e67bafe7b41ce6343c7f13f36de43f983a7fa40b43866c56b189bca16102f161462d2acc08190690f1ffafc40ad4171f811a81684efb442d1698cbb8509fe13fa61b2b5b9e91f6bb7948341a5ce8c06ead47ea63c07f2f07b34448c79674679acff0bd7cbdab3f1e9c00aadca949c4ef86ade5e4df39b74c4e323ab67caa0bda8a52e517af8f682022d019f23a1eab09d3f57dd3f5526365b00da96d4a6955679deaad14ba66f928d25f8a435790fb235ec6b71848f1bbb8a17b9ed348d8ceaad05f1c5b27587ba0755604b947c73ea7edc99d9b203f48aee9241fd2be20fd09ed593ad53e8c75efd35c903b54eafbfc49a53645c76491b04fb23751f3686aedba821068462b6f7db41a35b2c421bb8a3a038afc84871f249ccaeb3930d99ebf017fa5fd895cf1b2e037fb04e09605b9888ba2a99ed0787398164570bd9b20e588fb027d4d4884f61e5cea1af06e61f1fae485355e6826060b3e4cdfe2d578c9189c2dcedb16afb138310bdc3cd4579a59b73b860c77b144bdea086ee7b02fd1780a30da7beffb4bf45d65320bee701c6dabcd86f0249f9476c182061353cc6772ee138774fbef2c1b890005a7e433dffe69421b51987a60fd6bc18dafe6d7f2ccf0dcbf106113bc755ce53b56df294cd498a22f79fbc90f1b91cded0393d9da4fb79569954aef64c97f1bbe6107d8c9b6e1f6a9ae74150998dbaf0c57 +Output = 495c83b585f83f7f13442bb76a658b590360827e623853cce05610f369858db0 + +Len = 81096 +Msg = 41fac1461aa84a31051f83f1c61ff67acb721de90e346d743d7393a119f8fdb71c639c725e7ee8fbb9cb25172b5fe59f7df3cf3022399e23626c6dc0b82b31ae788787aeb45bb08a61dcd947b670a0a2d5c4d5bbad187d0b1fde1d9b5f8435789e8e0a62e6e7a8c4457928e92dfb2f6c1b0ab7f0777c1212bbf12b9cd8aa10fbd69fadf4bacbda92accb996359a798e497f0fe39470b642180cc202aea47ca2167e2f9cdf9af4edde0f9b41e021de5f1909b31fde76d7b21b49884ac5c006cd19b8075556b3a0b8b272c0182f0051e7d5036d8a31d4b5ff8a07cdd8cf77ffcf3b8a1aaf4d7151985ca8c09f8ea06496f1de77b95b24d19908ca1b531836c856e076c1e1306e880b4104053e6bac870af40d6a33a6e1aafcfc02e9303c86e0c2cd00a5b18c15a48ff437167b526f49a24012dd7fa185b2c9f834c006a8d2e9b145ba3e96dce137a4da946cecef732d0b8a711a03d7ab795e71f2383ce9c54390eef5e4e78f5bc1e888ce80f97f42919527cac856b5ad7f48fdadaa497bb87ef02d56314a300fd3a97327eb27ae7827ddac6260eec8162507efd9aeb2db36fc4d856dbc255b57dd862e43140de96e40439cea7c329b701b29ecf8ae1f94bb5c078b8eee1f5dee5ffd1e929402bcbf8b755dc562d88c35c21d69ad30d614d01ebcb43c3f8ed41dcb8cc8b8d3ac84c669d17375bd3726f1aa50ea49cf7ce7ffa4eb741838fa4a70b0a3b1085b61fe1d5be6729df3d5081e4462e370e28a9ab49f025f8552f82d719fd06c13b3d9754ed232ef80af488c2610d1f995127589796d9feb1625eef9baf9915e6d456986c57d352ed037f84fa3a01c7128c7c450c881228b4d1a753b975e750c77b8a8af0bbd6bd50f366aaf1162b0fece7b0d6d1c7a28d49cb8f16fa12eea0ab5660d6a9c03555690132646e9e91df6d8b4a75b0fc9114b878a0a0262fb6ebdc8d60e25f0ff7047f566a193b7a3d20dfa0d2896fcfe8a448ff615a0573481ba0491217d95024b1dc1996301e5137b8884dd17ad7e7ae2743895aaa5e87ab1640b2ffdde12ac544c6733f13e0cb8591b1bbceafb0edeb84ef3d14f9fb12e7c603efae9d3d45e1a4868cec2949913192a1125192c288a7a3954416b0a2bd05113329a7bdb64a80bb648b25da204b43a2a279e28ad461eb6c7cc5e8351c300ce1168773a714e1aa70a798728e2fa1c1abfa180affb01fbec7eee913f23112041df63299c11fb168ab99dd5cad3c39b594f21850591c6b299c31d81e4da80cf6ad1951a1759f63c154807f6a9f10be2645d2a13d01e1ed33d38eb991b04bc5e979c80d142a5b9ebe54a5a925cd73d61da5e2da585dc74ce4544db4f582e0e6e5684a8e79471c0b66915081139d2c29a19e6aec29d695314407b6f3d12b3016f264e9fb5836aa52c1f4c92fbe780560ba17b1ff38d515435cd4119bad1303fe1955eb7c3a5ecd1ad76557dcaec7c42370f900390ec00d2b33a4a5d711a221456121993ba5274d0bb1cd43b069f03219cc2a9fc532004690d15dbbcd86405194d3b13b5d24f9f1ce5612d6d2795d17ebd593d6c92cfe881b3fe99ba593555c9375ed190d3c3c820bce1e556b66743b41941ced6e85219a74842e8d88c1490be951bd7a717758c96922d70ba2b69f65c10fae2bdbc4d04642a816d99e9784243f6f0aa8b15cb68b9159273fa0f3455f16502fd9397175522db488c60e9d6e6f3cd5bae9f673bc932b7bf5388ca4cdefe65f893faf147787dfaf6b9d015b6fb6898db7866845d3a8de91283f8f52a1deda42a2a566363eadfda1a9a79e5af0bfcd9fe7c72e59639152a1aa9cd18428f399036453855e328c329329290e215753b11134f37137d51730b6629779c2caf8ccaab5903515bbeb238bd36e78380e3added855458688f0220d53878b095efb31a3d7fa69ee241947b948fbd05287b3cf83bc1300c73fb1ac90814869d83ffee2cc6a9dbe74d2c4de0b3455ddc780821aa01d2d0b4e08026d456de0a6916626fa94c1b7839dee4dffbf2dd9727b01cb09d499f7c793885f0e8c87e4c3bd681ff3ad8bdc4bb1ed11273583fb30b591eb2761a107b8302743eae64dd943c4ac2658771770996945badf0ed54f9b2fa78f0e07d0d17f9c6b4d9ce34e12a93fa8e6b371f318df1c9eb7a1cba02b0441b912f81787e96030dad89ef4073556a6e4ed7f2ead39af543e73f9cc63222e844d13a01164b41cb5dc715b98e7c5fe62f687262db4576c98cb9c51b1acd95c7fea0d8095c5d6076416a47d629e28e31c446042df96f69972cc7d43fbcb95209d066d041549a3b2f3efee5eb168f2b73b54e55fb4d39bd84a97b34b0b6e0a1d5438beb5005eb191cdeebb8a35e697dd38bea2c75dd8cb8ba8d3cac171028c953de77f1df77384465a89988a30a5ace7acd815242b34ea4615f71051cd07b14ad2993aa95b36a023324711d9622496490037a900bd769c7a0a884076600c0c808ac45dd1bc0679caedbd93e22ac1d893cb53fac784fc36aa0efdc7a9ea7df2e8ff0f65418a6195afd543ab5efb2c082a66c376e302546d489bce1266bcebf8e677c0fd5356e67834917fd48a63b199af7afcaa0dc61d94f8298fbd3767c4a30bbd8f6291a1f3861b9ad88c0ef5010185707600823096321b309924867b9675bb18d15186ec1763a769d45e471f88d43edfb6170ae27ce9345990e4ee58dfe597122d369d95d0857a76f9a7ed53b7865e213359e25c201ed60d0d7ad9801f870241f97e605f9d60075acf154c221b9c45dd7455a2ee3e4772b35552d291c3be9f20dcb5597a0c87c08dbb130e1b339a887d0f76e74915f79cf50f19540e7b00c0272d67f3a57c615878442d8daf8de5b8885b4a09dd45a3a74a911af84683f207dd9202c9428b8111a300c1454f89124877ee5ba52b4bd0340c91f419ea9d16f8ac711234d1a86b9eb6577aef8bc3b4aac44f0823a3a701c5e37811435b24c3f52c6112e0e3518551faeeb6c6d4bc216215e3fc1fe6d5bcdf47ba1f0f2899ad9fd5d88137f82562de190d0185bae10d00b54383e4556675e2b1ee59d7d38a185b215de9b4708298857958e786ceb0bc095af45c3b8fb7a162aa7b7e27dc74b8a99747b8e0ed077b0a9448d55460c9d2de4f6cd16ff667d3e1a9e7e889b3c7e32db04c7b47ee02aeb002535769118ad6123b13800c19f591e228ba1587ea124c3a04d2bd53d42288284c1efa5f61822a27869ed49a6acf4fe6bf78a17cefd24860fd60db8f3fe5bbd5c9f21a81c13e6390ba456b9589738261c6aa090355966c35127d626491aa9e3b1483548ad11e06e05edda187c680cdd5e6a4b8a59bcd2c28dc8efe7e6a0fc3eaa42914d4e1bf8888ec9e12dbd25576d5981f3cce22e50caec42bec374973b1470179f7fa93716d1cdc2d3c1c0d8031c3436001f79b8c824961bad8298084eae2a4ec5a66670228feb5f199c3088f7331811da4bc6602219b2de23ebfcfa1c5401706d892dcb040b10281986b33e1bf92c9bea18703046ef691088c748758f4d1d04fef1a452a58d62a63c47f10157b8995b964e20301ceee23b43de24828ee3a592e0a6760ceb5c0c60eaa694d993b686da47b47d678d6046e6bef83627025cc1a37a704901bfc234df8c6d41ceb73d1c9e661330dd7f8bbc9a60dd296ed1019bbe3617c63a0a0503a98862a2e9ab9382315933e09adbb96dde9154a35fe41a586b7b6294beb26ea048484e5f315700e11b8adc36a78a30803ab9274c0123ef2332b21a5b95a145334432f820afa4ce61e25fd6d90b73381e36401cce5c76c7229c4107c5c8bdd2e623b02a8c697843291042e873ce7d1b6f5b8ffcce78c6ec7d3091f1785ef05cdf6f29aa4b69bda9622c9adca9f9921f9a300c8ef75ef9a45d760aa01c5f202d46af054106b7594633bfcf782592998ec83e209cee15f938eaf714dc5ad4378b446cabb765593663c55049858fa479ae200b33ec5ea5acf04b3a186cdac41cbf012d85d40f593a4740676fca8e341cc8cb21ae48ed17fc13a9c87c194337b711a47afa60adbe4f3ccb8dab11cb4c6923f008f7764372d0eb2b27aaab3d35f0c855db7222e6915c888e486420eef34809b846783e09be0fbefae108ea72c7af2e3ed955e363d94874b22303c09e32a1c04b65986ae703a3d53d7e009d87f4dc8984fb0c6bcb9efd485fa3eeb983105c91d0edbec0844a73781d84f98e27c55f2252cafd82c7e9624cbc528ed3469562c46f64540a899a67eec27d5b83f8402041cecd91f0ffc15fc8f2b74bd68fc999a15254c10e9dfc678153f08d45a26f082e208c307c1a2edc03285a8e8905b5ea709e446d9569775b77f866f99cce5afd30718f43f0c138c14687c4bdb551603d787ebdc06695132b19db66064f2408e890e95f30129be8f6d9377c42221bd27b021846224bc8d8c0af21781c284b81b297af8361ab514564045f0a83980a148a569467fb0aaacf0081f524a3edeccd418aec833c828a57f10f28f7eadfc62d54bc1ba8b36ce4ffd4d67df30367aef57fb4c7e82b61ef278641b9caddbef825c07cd592b2391e7124f8e16ca55e3a00535c6938950e27bc0ce33b0bc6ff4805b5dde9ac6039ff2bd92d4a18ef9a37f6a4c9f9fee252db1f693dd5430c685dd41d287f7e26333037d9bee07d4ae24edf5c44a0bf79f5b3568797b0f917c2e09adfa6c1916af1599d0ef3ca251fff27c462158605c4bf566b4c39f3b54fd4785fe39cd56c953921635f133198d4ba69ac9e84d2572a786d65a26ac7ff1c68ce2c1155e39810d43093b3683c5cd3d9bca0f8d9ad3e13e79f4d70745460e64489085118149b428a2f34f43814fb8224caa7585b3e41e7d5952a9e9dc15f153152fc8b2c8fff9222c64f09cce0fd4b6538c9a653aee80f0af704132e378511f7d10fa7da7d4b6a669cebda6cc9e89562b10eca0924bbf14e6ce4b96edd58425ead498d6a0608311c5a104f5ff746c7e4db7facc5c943f6699cd177a7dc62112e8fb2252451bd4e0da7c650ef919e4bb35e2335cfc407862230d3351f5b2be42e1e53584f87f22b012c16c562bf798897e3034b6e3e8f0a42d0f2db208339242703330c35cf302fc091079601ab5ee6581225d7ec5f64e892233752f07b163ae2e55a2a1c52fdc2117da2ab147ad5cdbd9293c28f4e0d8ad7d2a980d76c4a8c246dd19b4d38e44cbd98eeece35766a5900c55f2a0341256dc84504e1f7e5b84b8439f4510a86a358d8bf342b5689ad6972771516638fcb668e235a40ed8d389650ecc12adca19e646feb993d4d5f8c89b8cf1c62b83521142945f6beea33a02f27661e96bc778c5b39849c986c709e463e2dc38353c9ccf3341d68905061659282565b193c70f3b9b02aaca14665390b9d23b91ce8c63570391a3e89c2af1f5cfc0e0546df167b1c5e4e480c6d96035630415b83c9b2d137a2ecd6efa37523eaff2dbb9416e078dfae400d1e349b83c2a1f7295c790856a5fbd5c056954c29c8f605cc85766773802ad05a7b5dde10bd6cc5b10b994f0c47ce959942fa9c87738b56e69f600401ba5e5fbe982be650c2fb2d61158cef8899757cb03955fec37739716846864e99dab35ea7f9313cca6fc7aee80ee67242279b2ba3ae39eb64406af5e01f3bbfa25db44db5030059c4007cba845c186fcf5eaa02f20618daf07b9a44dc8e02dfc1dfebbd546a0bc5f44164e0e481954096bb2c9309f57555ee6561eebc277e176ecdc41e1482d5f9c19f2aa277240f9d2ed98d7c89e0c1d4b4aa3c741d5ff00f0fa3d7f063f1d16dc276388fba97d9ce0e1656ffc06c90eff9c6a4456eac2b1f2afe91c4c11b90ba6d6319093d61765b9b0e13bd6bdd6500142714033ea061d0573a7c1bba74963828e2369f6e2577de7c3d4e35dac7b0ad9a68161debb146bb0ae41165ce91549f8b702bc2cb3850cf281060f99bb0065102e614f614734c47cc87dc236bf64e391b996303e33e93960513f6693d3ac882d44dbb3c474ad50f029246e51128059d4fca76e3348ca2dbb9d469052dac89bb84fb5350d2cc9369439fec1b6c8afd44ae9fd1d13dc72108acce436deba9cc83ab7b87c4656ce9ff061d2646ccb3a7c79e65fe6e7d627095646e100405970353ae3ac3176da05b28d076afe7b016978eb5c9771b61e3240a67205957fa18c0a403d59fba6a0b698f2958c38ec5483f128b46b65889cdbde02ba179ea3783770d42c8683dd8f2978a77101bac6abd20eb654a46b6538690bf285e1c2b5c8bb8f7f18fd712391a57b3505902b11ed9cf81fa60a2a56da26eeff3c29aabc785e8ec869846c808d74c923b70334d6042ad6eb10644b626a58b0b045b8fdc07069953888e41cfd6cdc89f9f1217c1cd7c4d1a0fc7c7592d048788e095664ca9824ce55dbe52aa11426e4401ab1aceb4eb111c8d11851edf43e6f20f0ca87e0d8d65faacb4e3e756e99017f997c6b4b513bbdeaf701867bbe81bdee63de0d0d18c870bcc1e9ff7f627f093ed84a6245c8a8fd8fd6ffbd44175b8980c8589f5640432a15237c16c9d91e23053ee238e09b41fb3ed6d99e51e512fb5f8801e4c5388db43c5ad02a5bb9c0785d330e9625b34edc7f5f59d0a912ef3d120ca18561e8ee37b9cfade43becab2fcd1f94241af617cbdad945fc54843a7421bb00293238b0db15e9daec73582771de6b3d89c94de3eed8ac66c95b253bcb15fce57941111ac7d70f21e90be77e66167dd16e3aa0fc6d004084e0c5db3a6874391a1c9559732487ab48840980f63500be187a74d8a871dbfd67e89a907e73c9d965bb36fa0419ad241864770ad9072196da567fdb3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c6f6d03036edea96393dca7c7939a6ea694f8756ee1608c81e3ed6e7d4dd395c196fb522daced1c28e7f329e83b7b3beeb3bebdcf1a9f0e3afbd61d37cd4d36ad67ca1b27bacf57d7bebfcfdcad419ac070e9124556162b610c160487ca91bc28ca24877afe4c01780286c22a50b43226b3c39e57fe8b8cfdfdf64cf5ac65d03ba74fbeade22bc2119a91295a8b9cac276492898d78c7d916b6be1d09db921aece694e748cc3644ac6e282df4c8c0afcb6b9ffb6f2d92b9b51fb69e4cbfe041456f3b2ad326332c506692f6816ee9e41bb0321b8685b3d4e02026f845c016ee4e2a8cb0d757eb25066a19ab89e5dff21e1b931159e9f4d3a2a155527d47fec80e00cfa1dcc726d5d562037492946a83dd95090670bf1b5e008a8cd57aba5e788dd74b2568deace4c536997a26e5523c5e04dd225470f11c04c313a9c683ffa5d3994962050444fbdece23e5cc3f5ec7ab52588c8c653eb6b53432f5e908a9f8e92c11833aa1b8c22912e9dd0d0a58cccc65bf6da005cad31bc631e169b32318d67aebae8f1dcee0adeb32896faf06f2c7275dec19b75c1c3f5f5797d0eb37afa2691f0c8de04ffe723f48117c9430e2a67e79327ee5be3928e8ed3ca517ab6256e3f4c4bb5202c381f8719ebc22a04471545a6657f6b6d1de4a3bfb71a148dbf8cfb3fea2dcb1d8e1fcf658b6c11dbf2e9049b12d520d8c6a6b89fabbf0d6c29314a5e4c8e422e49a351f66f2da6efbe71a8e3b86618b14d3351f610b6c1dbe2c9c0f9bb7d41e90b58933f0f8d35ca1a3da712bed8af70e218f4459e97de478cd4e3c4ef7126d8439e27c205116af596bb83aa9e7381a255d60420ade8bf5987d1273230e08d7672e27401c84092fca469c30dffed0bdff8e925f9b71fe16c545d0fb42861c24e19d40c80c1916a39d3c6e9cf3b9bba644bc0ce4342b3e10a72b701dd4e7b81b9c8d145c1998a4d5795516c60da0619e9defb619ff93b3abe73adb2101b743863d068d436b8a1a8b079a7cf6563c2a6cb23078452131c6ae2d77f74ff080252b6f1092c72977e28eef128874f5147fda2a863ab1c58ddde320ecadeecac9c5d2d8b40c2e7be563a6d8c5238713b1c6aeadfae4a61130621069a0e648b61b8d4520f9e1c18a5e059a6abc3379d89969b1e5935e6a2da1bbfeb09b88a3ddfde44bf0e8fac87e6930344efea1906b56ceab77599045426852759ce67c4867f732abf0873f8b7f8f4c3a2c935615f5705f640e546381780e8d3dd588ab7f7b91e02ec7e09851b356c175ab84394f9d6d82a3508dbd65f61ad61d0489fc904154549c1dfbee644549f8ad74d831888cd7a132e50b8838e51494ded1f256c2e2c7f7bd9cde270a5bed57aa2f972806e93523d776d6aa436c842e48e3caa35e86733158ea932d8c1ecc473383ca0513dd10705babf70dceb4f30e23e319caac54de6b37af22e632b56d31121878b0f590eff0852b759720e5e99b3778e7b3f475920b2094913c4348587b0d97a910f4295a0b1f9f58328326ec3d4c4b3d467e11177bdc40ea160901168feda8650f5ad1d929efaea9c53d9f865c2903226b914ff321335d355bca062ed379f2b5946daff5b2bf016f3797793e6097499f0a7757b067ec9078f5cf7f28b17b1ea08877ec350e553fb272d9dc9cb25ec5bb0b7652d5b4d183bdcb60958d90b9d32fd1beaf22a579117a5d4bef29b8461e7e56d768eb6fa8de0bc5c46fe3d7fdba69588b2142dff51fd0e035db6cdb17fdf0d3e2c079023a486bcb4537b5f00d7b5605256920259010bbe3dec7ee8398091a6bde8307d44f6ae3c529128842b1bdfec1d6b141dd118d444e8fdc351992eb030415d81e4dafec7e9bb92ae635b3286a72e41e2f71413d72099042cb03cd4ab387cde845d5217541363da75631da65a10198da7147e8c94dfd292038ab11cf33dd4fda04d46ead367cfdb1619eed1cab573a0d8fc9ced8dd10a29e027726228aece3d7e3b25e3e6456406e8de4b5f4915a12de115dba132b2b42e6b3d1d3eac09ed0076bd7b9cdd3ac5009656bfa965af46776806d75213e37521dd220e1cfdeda609123ac47058c6773a86e9c83aa0e0c83fd6460c8ac1e1a1a6ee8cc197beb87d99e9397d08b966df27432dd1ad7b68aac9a439e7859d4bee2ff7c3d4093ef8f845544011b0af9a81594389785c558552b75a78f50d26709f2f816da21c2f3d9a9dfbd53f128beff233008338d1dff5748b7179b17bfdfe591823f0d83aefd4d906386f31a8dec5966722b17fa87b0774a881c2a94c7453909c57d3e2dff18d3800a284b5ee28ba0248028ad94aa759d7b0f3da49093a0eda0e85bd3e85e4953c3fc2ac185cfa4bba682875c232f55b121750271d3cbf8e89f135e357c739ab59f6014bf56fb3d9234a1d18b6ebd599c85e1f3f9251655144e7010ccb1e512e15d5e6fac9a0f610d15048da43efd8744ef7c99a44e1cc058f424f8004f5cb9c04420c2f019b2151493d5430e5b97e992a66e7bdb1586409cda5a9e3a1d8298389ecb95f39b8d638ff4397b318d32876ef4de210444fcdec849388be0e4fcb632b18a711ce8485266815abe759c7667c11ff41489a125a1c587e6465c6c751c97c783dcd5c78aea81826093424f0d937170dadbd0f5aa9179dc8d57147d93d04d26de608602fb34c83f7383006f9c13682fb5fe430732b6cd92554772dffedc3e16c485955f443724ffb91517c4ceed8ca4b00648a16619a9f0659ddc595f4750e15dd26ba70dfc7b0c5dd1ef16482bc717f07a4989eec1f63de6e1bcb55e1a6dced0cf70a1fd89b7ac853ff02db5d500cfa0e2ad8871b69ac2ff9c79b9a25c7c2446040c17bde8be285ae883d1bbf11f15e6c7dc6698017fc7d9557b2ed415652ce6faa8cff5217ac803530ec902890b31eaaf3eeb0aa98b939b942adb9b4e102ed938aa934c3ad1d3a808fbde33a4ae6bd5253bdf6fb6a8706ee1ee8aa00e657146467c296a3dad937390b0d8f64bef0acfae3b097131bda47ac52f018b5d4c3f56ad8459f831f54e8a72977ff285b658ffd4a632b621b278e6c755090343adde30f42ced9e1f914d1536169ad05aeb9b8e1ee422e68e6f34db70c86ab0c97097fea3dbab030e68d83d6597f337d2771ca4145da1aa80db208046f0ec3bf67db2e543f85dd006643629868150d0f64023673f7977aa00e084fed336574cd3bc770f5bedc9ac106cb103213c7a43cd2ff80226a16b8d1565a77c9f00728a66152ea47321b84032698ff0be3039375f2ce29b523b47fbc853d22330b7069eb9711ecb13fcf1347641191ae6c55455b5202a5b49b1d19e20904d1b10c4db2fd4b690adc4e63e2fe4dd97a920639544d6f119699569d21b2505608bc78db9e6bdcecc720d4765d9832551c5f572c2acca89f5eebdcd111ddf9a539bdb7c686b7e9f1a4177872fdb5b018e94ec5aa4379ace06114a43584a57386d75d6f8af651f13c242890e64dd745a98418d83038b4daa96fbc3356d4a94c5f73e4068587da6110b9fcb45cc86d716b5f26055a750eb04ebd3b00a19c69e2a39219f36295a1d803f7dc5922e7f8b1f2ed0ee39572f7dc34ec29a2a24667e507b447dc9eba58b4aa407005e546f985b4b02be95ddcf0ad107f008fd56d13b1e05cf61896505f9568262031204ff07b453b058d2ffda9a155e8482eb77b0dd7b1eebd4de61236e8c23b9561407d7df119004455986f536779ba6905c4eaa6d5110c05d30a5a6f2d4ce3282ce259e285948240c9139cae4df0580bbb8a468f187217584e7fb378d16caf50ea625fdea76c43835e1e201ae35e5378a67419174059a32d16b297e483a602b8206d19b2e4f4c6949b347429c6183f686d1edcefbb3c321cd25f7222a28d8fc6755ef21fbcc27decf6e3234b54c27e3355e70c79079e367ff7b2fcc3cc97a8f43fb48365ad59fc14f79697f01dc1926217791233a3f432fefd6972385038d0da160a4835252fa37513eb4cc88faa0e8d282198b02ed2c9f269ff9d00dbf5b9d06eccbafeb2b816a5e24ddc3538f0651cfe9d1a6ee6be4df2b3c1b7adce62a68fc0784632d497c82fd93aa0b69819188a0127e1d09a1b3188617c5cafb5e43960a199847219233a6b7f3e54dd2ba8ab6cd67eb975877e372c096c1677111ee4eb98ad002ceefedff13ad543097203902de4edfbde5d6bb146023d6fb46e573b88fc2f23d3d48f4b59927c05dbf9de5955c312137b7a48227ee25cb2b82c419fd1629c69f74868eefd1caf07b5218d796cf777aacd6cb81d2f30469a12e952945d62716d17d8f04d544feae335978582ebd88b2c44b31003ef62778055240ebb75625a87a604d9e91792cc02ddaa7ae85b0cc91281dc046927ff8c0fef4aca77c1e89454323a7a348f8baef10e08c21c22fabdf80545e9df716de08351ec3a5bbb6bdb5d4d0845d254a120384700ffb0ec38d6373f9f54b9544411a52d76c2c9da727c0d46ece124df69ac43394188290f2dae6aa126c99939089bcfc288f864a77312eec066c0beb84bcfac2538f007147fa30cdaaabcf1a831fb7db1715f9e9b142c6c39f4690257ddf6cdcb65cbbd847550983c69a3551a369d298afe4cea3dac151024144e823686ae327c368fcee7c533974702113617bd0d7dbf5e54d9f7c189850f44e5d0ecdc7274b84990ada6d5d8749af28b07190bd8c4bf300bd061eae6056c14c350e345d00f101d82fc5a2d9bcaa8c9755aa6c96bb91b01e68ff49eb74bbaf26b94a269436c1410eb1d7a431a03e0d564a3496c42a55342594b384379b28c7c431eb2ad490624c21d937facbfbae3d4dd73696b0a23e88ff8a4957fa9c45100ee518c985d77d2afbef0e2c1195a1216544d8f5c1eaf4b39292ea4a9c40b992ed1cfa8a0fd3b9e4823b83c36936c0c384d8443a5ecc20bdc8f3bee6854f2d554720b9f5db4cbf80a004bf463da5b32a93dc9fedf10e6aaf87f7ecb21e91486206377c924f0a36093c94ea3df4ab215e7b981496e1797990b9e49d37cdcdb3c010aa6bead4d4c7843d312b30f610b3682254c8be96d5f6684503f8fbfbcd15774fc1b084d3741afb8d24aaa8ab9c104f7258e6ec78ea883f139c268811571790a9c370e8b2b0d67513b5902d7b16e01b52eb94a9ef7fd81e0bf74e667534611208fad69fdb51a3fbb72b0545ce48cdd4a957fa7c635e8d0c155b991b912c9a0553ac0730b41f2b9461d0307a0cf87d8361e242ed3c4d501219122f31cc066a7172222e23a7e11348f9ea3a539def983061d59184e215c937ff6237308d8c7b5f4ca471011a61061f67c24a58e9f5c7e1917812cabd7e9f83af94d99e3e8472d6cb79f8517765aa2293a0891259d2b2a0d912ea46354f7bfe11ef3f0546b7fadfd6ebec9b25b6a75866cb1f08534d007421ed4481b35204b10ebd8eec0dedb981554075688c1ca6cac68d33c2402f5966514f46019d4de3a38c44f1dcfbed57c431c1ba3e145e4f7e9c2cedc98940677c518118505d09bfdc74ce8e5c78817db050b6e4a82546497ed1f176a49448cfc009cbe3f6594e4165afa18df4ec6fd34e9b671a2b279a3dd24b24f6dbcb0f3c3a6274cf79fbe311452405172cbf8000a5fa1b85518223d280f40d94f7955c54f142c60363aa92d684ba44548d597cadbd561c4da19ea9b192b3f4797f59f9bfed9307a83bcd21382b5ba56b9e222b819f95b099a3e4f4810f6f20cdfb81ac26363b80e58ace59e141ee6f84e783552552a12091e0bacbeb0012dab7f4743e31d52479e3d7140276ce5aebc9f1e2c140de60b45fdf89f7976c836a5ff19a7787d13439c9aa07e4a2db89616043a8387b4cbcb32828ba412c5baa18ee7a5b1ed132550ac08b0fc60b6e621871663e827ea39c671744b36e53d66f2c8c171ffdb6006e32f00394725992cd5a25e00a67f0ebe71651bade49b3e3baed60514edadf4466fa8099feae354cb26da33b76af792d87090112a299f58d73a493af507ef30627aa99d6b54347a6f99a14fee921c27063884dd56625c0d982994cba8db19b4c988a624121f936a78b29a0b2cb8673bc63da5d8a94b6bdd1cf14b4f86e3a7f20a1e20462ab97aa574e626ede83a634196f495ab99314937c435df3f359e346892af9a6c1b9e74dbf2b8da70a7b49ab906f1b6cebcb07ebe2c4bb3033b77299901b1871e7b5afc4e60af172bf1a3783284b99baa6a4576d0c3b78943ef1b01f3b5c878d5b05b8bad5d4d7f883c83762eaeb0b6d7586cbc00191da469e6d658194d68e21a513cad5926f8761e1ed13f1dc38b9acddd92d8dc9ac2a6edb955966a36f75554e45adbd27c549d45ef191d70818eaa06805437b6d76af367bd053776f108352dd05281b9bbd6579843d7abc7674e8719d72d633f4d6b3c408851d5c00a20140daba0497f73e2279da37954a2d35f9460488ad5c66b37c400a1e7dbc5e0b3747cdcb09d84232cafce848ac273541664726b0929fccf753d307023c3f92356d8d3fa2ff878480a32937d885fb9682779e8a504ba42d8980a58999228ea306eb3db8a6ae4bc610f6294e50ea6f58df7370b9d2a11291514bdd174bf6519968f87dbe3fdecd0fca0a24b516a12a843fa4e8399c5c920037fca33a80822f7c42de75dbd556b567962941f59472d5228c502b941844cb8323da2178a08cd1557be34f96d0dfaad65c99a89531271838adc06451ac206621fd2e7c5c13dddf2bfd5030779941546504a3821d54869ad08a3cb9f9c2ba0ae3ad40df6b413d0007af6d420796445c1b768ff716675904f10b0b5213c1d860cf1b58702f9373dcf07981adcd30af6a019aa52e07d166fda41877582711430ff030be572f6f491cee43d69952cf4c251d582d5078fa762ef099c6f3be1ac3c04bd2b9bdf33e856809f5b22d1cdce13679996e84f14a503fdd76414a5f43201beaea93ca0469f0674a785e91b5bd37441d43b1f3fb29bed77397308692f621c7d46192a5e95652c2b8b222eea5dc16f80f403ec41dff869ebbe4dbcedf9b8f6d111dff772a6f73215c8c456c72a046fa59765d20e034713ebc46894bcf9832b4aa082267501b1a2a3cee1132a6708ef103cf562fcb30475c7ea38425e956d245a609429ee2c1118862c1cc69c8b6b78613327018665bd0a30ae51283b53d37c70d07a84368cb1ee1d6ebbf3861d98a609386f404391ed3b867f27c8dbcb628e3e7ec9d7f6aa00ade9e5632c8f841cc288ab52a1acddf1a469db40a6d85276f413d9f677a71a89c26c4e86c401556488501a65a83a9076bf3b511034899f9d28816084e5b044b9e62508bb7c9417fc520ff41cc6655ff8f67b6f3b1497e951a617b0f9c4bacf1d6394826598b02270aa08c6ec8ec5a2e4e4ba8415a95be610f73739c9771f0020e54b6a19bade3b3e0aeb015953d3ffb6f4794e34757e1c77867069789f658e60c5aa1e4c5 +Output = 54de12f1efb4e4ea9b37d9e07e2284d0ffbfdec2ce78b47fc82dcdacbb0e9576 + +Len = 82192 +Msg = d9e565ac6d9b35aa70ddc91ec221914de2f9a57c53e74e614573c8d8717c46d745cc37a441efc845a144aa393c541565ac630d51af45e494cd73008d3b5ede54000357f056c022cb53669b63c88fc2416a32872f2f7445a6fbc18c867c1c230952b34dfa74b74c22cf6a2404307aa1ca638d9b7e9d1d797d1786f429fc5d1edf8504a229627b4d345d79cd843abcb9e6e19dd2a6bfe7890369e9c1e082cad5bce01ddde4eab52de744bb1f4baffd137e2a89b30f5d7b7c1e38137a12d80b528aaa278695d20df525ce57a1c156e7b57b877ac72241805ab8ce2ca726c4c79d2f2c4926a3e32aacd54176dc4ef920a9c340989445329f2bb8715bd0860fa6bc95aeac4476e5b55adfe63f565b5e50f7409d0aa4e1f780f8066ac87e998152b9a277776876a055072a05db994e4e20a5d8e6f97f5f59cac88a019c38c7e1709b40d1d31a0bdcb3bca0e6712d919137bd75628cab252026a42c7dff8778f9ab6b5602e8e39d60778128d02a988aef3f46fe5aecb29d143b93d42818f2148fa830cb53dd4a94f5485caa0d2e64a330dd495b16401c2efcb29d6a481001036c12f2890cdbd85863ce570fe3a418431bbbcd74deb16f3fa232cad6260e3cae588fba777509135172b2793d9bb43dd17a81da31fa67353acc6423000a3b2c7b1ac78f7dd69085e7e99cca1d7c885ab713d7787ab189f58643efafd03bbf58d37c6479837697b68392335397d045f75cae63b0374d40388bcf7d772f03c1481f440b80719e472d8b33201b94dd169d2815d0895014b385b137b38103a86985c53b66ad2f96c87269950b2afaed21d2830fc40cad4f0b6460453bd73673e0962f291d07a6a6410d83809a89b3468e21d563e74036456f5d00bfbd81aeac4e03c3d6d896bc16da8743bc783fa530860f86dae32dd44008f9f96ee085559bdb55eb093e635a2dbd6610104b54baf53126fe3c5ddb6d86fdbfb31a4ded1188ad130e8cf77569340f355145bcd1d8dcb6eda6510053ea607738978bacc1ccbaefc59325acd5cf73fb79702372bde92c3dece4e0719c34169eea0b88a4076d7ac7f4e49d05897632a6bcd4721620d42ef0ac21b35bbe31f0995f78dbddc9dc105d2768bba99b44b93b85e5fa4f03812af5b4c69064c2cb36911f474a000e01c4dae687494112234fe05d0b83c66dd867748c394034afe92fadb0de9eb5dfc4dd66b9a90d74f7fa3ebdcbaed42266c12f96bde48b748d7324169ca79ea3430da5282936d1eb51b0ccfc5736b60cf624c882ce2e38cc64505df36b08147342c46249bd965b4d282f42c2890bf12c26e97b61477e11e33d6a226da36bc6cce4d15df0fe327343855ee83aea954d29fdf8905bb13edc621fa8bbacce377e57321cde467270e3756f250589013d92ac83394f9793d562f013f26fd773d402bc338d2d73a3b9728aee6ce2da5669875cc195003e75ab6b36203088171baa1aa2ef0d919e1976e72b0a1bc8537282f5e2bef2ea77df28bfdc4e4a4c934d2190b16f8254f05a0d0bffcc1bfd1cdcf1a4e5833a566b5ab42589a529047491a12b92bad6bc90f0e8a6af3b52c95e1c1d5c0e16538c426db766e52eb3f7e16f92b2edd8ef12a6636d80e25fa97641bb6de5058127d423a1994a99f0d16f03705cee69d2b79d5c3906604141084bec404b0671cc9c76367dc2994df36cb2011b67a7afaf14a7d8fc1a0f73e8588f88331e89fafd9cb9a5899a1ba8406a0904f91ba46777f07642331056215c7f8b3c1d4d34491e0ee7954d8a9853deb5bc3490e1af38333253c36752fbf3a66787318542d00636d9463052f8d7f6d53313b86b1f8ecaeac286831f47c690cdf6ca8ef36424d94ee71f9e1f4da1382ece56b90f3e0ac6a48857a9e35781a1d9169e7cef1bfa686d1fb9073cf2bec1f06ccc5e06a7ebd4696b0e5d3beaf2cdd3ae492302cf185e9b695e92324df63a23f7bed0d7c1f99b4256f2c9b068e3bdc2a614aab3e84761e0ad546788c8114bd05674360af3fcc4362e4c12c93a1a19aee6473a8bce4f1945d3e4afc6cad69bfe7136b927a7bbf64edc64630fc65f88a0552afa11eaf830d1c4569275ba0ed3b5304c81b744ffda914882e209757cb29edd0513cda20a4b8d66f2371c02819afd7bfdb542329018075aeeb73faf3740b3651fac475f4c157fa200c74309f799df3a937e4ed83657b8fbef0b39dd5adae4d6c1ee088a8733b161c769723738786255540365a0b93fad11cf068065ab273b163301978983502b89904632f40bde8fb4896d0ef1e079ed85d4cf9bb1f3d0bf0ebd0c7cc60812f303a3850aa83a736c4079e3d23374ad8040478f1227f97c78a6a73740a7de2113b8485083bb8be004df6e8e37cf3e826f29706d6e3187d46fc738ac6a96cc26938fc7cc2396c7cd5c7aae95c72b03a1c127969235366380ab57b99082fa9cc9796f6723759fb6e17efa82210ab08eb27e240225f29e5627343f720e103b14b1cf42717dfe3f1fc57145325a87c6a65cae07fd4f2ad028711368ab4b9dc1fd879def2d0148decb213d450667c6d612475ab8cd386736a1084fb9ac72b0f31ef2e95ee3d8dae5839cebe046714f469b1c8a1eba0730378991f019bca9d23b419bbd77db293cba0dde8100399fab80098344230ee50e3ba7b7ff7225188a002c2920225c1df7c731900a8c281a61ea242392ae0ff988aac41f83ab2de960aba8451b47b0dc9273b95a8b6c5b09f9eeb3a57ba8076c26eda87484ac1d41dca27d97b4ce1d8d95256be30e881a95fbf380b008f73c65706a1b5c0b5d3d4b874e73c6f59fec59884711d49ac8ade6f06151ed3f84f70def8ae57f1ea6d42ce817527be6a26567f44071d438145b23609fef042a377f8b2ab5cd87c86f2c0f8866e15d8ec0cfe06178548cef546e75d117229cd1f81e08a9549d190ea08b1aeda1e915f5df74eb555781a3c7702c03cd30b15d3ab01aacf5cd1be0fa213a75a132324a23e89ab15a45c2c2c850def6db5266f16f45bc9e958a108193da81492c7f84a521c48a59f7aadd91fbdccb7584e507fd78a14c0711f143a7e1b3a7be14f2a7cef6598c0cb5ee9bb767fd3da94e515d2c5baa120ef26c7ef8ed95f6fbe3f1626caa91e7f21a79c4dd14997ab9c3ff3023224a55dcbf62871cbe66b42920e67f274653e532b0b320aa0b99cbce6b55488dd5685f98003b27bc5c102a6f5438c4a9d086ccf5ff0576c753e67810cdbc6c107aec766b3e5e2680d079a0f6064ffa975314e5628ed590dbf466c9a6719d66541bbde37dff354c0f218b5de5be93e99cd4e478a2e58c348ff70306b9df5efc02bfc5eef5ce276112572cab65056c585e5ddecddc8c932b8b63a47670a069f7c26febdefc309c2c307b46d09e61421085f5ea2b390c503d76403162f43b241e3b3217fdb9affc761294c015b75d7ddabaa5f0dce1eb2d31f99791126c38f93b1610319155d2b0075faa82c2d97e857ca574d826fbb491d1bb6faece01204f14fa1122e3f7211ea7c0c6741f2b4ec2beed6a8a52afece4e365d06fdedb798d73903ed03bc825af1eddee7e74d6549d6a3a8fefa7271d8d309ec2bc8921ce1d1e809e24e1f065cb335d2d880801187c4636eced6f88cef6800f4e7d19fca466dd7139061c966adbb0e9887a24d523c81c87886df0fd88869b5f7b9ad49385d07a0c185f35e2ba455b28093c107afceab2d56b5874abd2a5483752fc030ff8c3bbf8421574fddf73fcc3b7b614172b48d0c99e9441bd34bb513fd989ed9786a76addbf12210f61cb5d619ad178d4394c400a280b9f5936307c1e1a2adc54b5e44d65983c843fc6b745abbb7383daad5dc94111a3d8a8616d927d1dc8166d10e22d36d47de5b6989e7b4821857e510fe23216624633d13cd85a03e849e40b1c0ad1f87bbc8b9c5ee8c8e1d4f0b161e845443022dbf7fc50da9e5985978e5663c2035496e1bf18a1fcf41edd9a6430beedc738594a6d5323dc2426fc985c756c7389f12cd3c952e844c7a6436ddfe91c4283d50f7bddfb3f44b51353369691bf862c79457cf173bb2709220e5069b287ac3fb04d558e1f2c7b19c8945783d1e561b491e9c37fa3a20d8139472a4cb38993c5711ac2cae570ea18ecc7e56c5e656ee9e32190ba09265ef894f5e5ce16a95fdbbf7faad77595f87a27f2c7995fc7149317f4cbebcece8336db2068380070784a4283f3fef8230c06231fe552fd94ba79d56b5d5a1923e203b5d09bd29b6447d9a32e868796a09085855527df6053ca64c48d2c4f13ace427ca0e66e30f0f32528a884bba7696ebc0f89d7587af8cab1c8c622112e4f1f169c3e1b1b584f9a27b9e9a2adfc18c857c22feb79413c7c569d6f224eab37a72924852648e21a8001e886b0c3d9e0bc684ab80d54cb38d80134a461e21a8d0cd6a006867b70ea6b201f003d71d369a169f3c2bb7f8b86544e18f65f5fded7a6cb9942ba278747b22ed7c6b75c7b1c1dd947d0846df49d8799c4e5793c7a700b547aba3fe187badb6a9d7aacc833608832c151e684b8f6d870c2e25dec601eb12dceed961e14ac6d8ffa7c8c699edf8702fad750682b1acd6f9d8d6c04421c1ea3f05d4b5190a4eefb595ce4a50ff180c65ec1609cdd81dce2bf37220872f0da539979ce009e2cb639448c33ff294f0c0957b0857742c49d8692802e5d85454aa924c3accf9fbc79b6469af8fc5d309f2890153dabfd4b75a7d1f8cf97fb7206312ceb55f307cc901ed9f9b2112e5ea0c07270078f6f9efbe2d7f1b43c482f83780c21583f88e5afcf6938edd20f21b74d895161b60c27a6a42f0b4abefda658ea6d3631f975901f449ec90ab39212594c4f29daa4658dfc8841c611947e9eed14aa7a61a56044651ac53a973a39a8fd292e69e0df0e2a63ebaa8297515d71b6635e6e65e7db8b17ce870e21da786e1980c1b1f2ca6895836ae3f15a7a1cc74b62f392bd2549ccbdbc5ea42918d0da44df8362befb0757c1726872b9833ef822900487e5e23d91bd70a6ad1b89d565f581fe2c73e55cd9a49eb28752e1368cc286fbae6ea319629d9819798781f8a9a2349c5fd01dfba3a34c5cbfb528960da1945376c5ec7fc7e47f01a9eba5ad0de153d87d4209463e5407b18c4eddcff35654a6917a22d33a18a209aec679751b196c5d15583bdf122d5d7b6d8e5556c647546f5ef9fab621a0bd9c088651e349e0ea74b8612a18b7a5b9f4e3f243cd0efb00186fc3b89b17231e2347c9e37a22ae5ac9c71b68a5a743a9c870190d9525f7d42c2475f0e493063059dd0f82ac3df849c6c1e55be8598da960a2713731b3b46d351d7f48352dc0b08a38a5d3ebe44513f6593d886356ea3557eb99453520b727adcb4e030f3ff90b4efb4b4bcbce1b55d2dda282a927ffea08cbdfac2205869000be70d5d55205ad12955e5ece43f19bd6cfb2bf2c3525140dc3d2f06ada8922d85776152a0c7d127f976d7165fe5e328cbfccb26f16f05fe15401a67208657c8f36cc656fb7c5d7d051e7482545b7d66f1e7ef0d435f83a0dfcfa32fa1771f9bfccf23b38ec8669df855a378ec2a4d3f88c37ff0e2a932eee4f1b2a45a05536c49a75faf8232544d78234c3f4fd9bd7b35996217f5d579b2c9ae2f1070b7590481fc6493ff438f562d915720a4f033e1a27082caa56cc2b2390e02b90e159a2b4dd619a72c817f80c1a6ad6313f8193a7750c6511af574b7da1a14e85aa87ea8553e663232768c92d96b3450c678d64e5b4216f37bf8f68954d94be47cf76e45403b337e39aa1f5620e6d52ee2f8d2e5f74c5afaf0fdb2f0505490f79d8bd0c8b7d668d168a49e923b217947920075c7f3797aaca38d0fb47691cc67e5ea0dfa6116ee74e7ec730fd52406e1fc1927bbf6ce5f52b92f759c6d9ae57d7b9e8ea3e703abafdf0a049594f5664548ca508ba855ef335d6c4c72de77c581882fba8bf0a588c97886bbec209e7fbb9f9c58fdb3151399b5cbfdfc702e52bb3323f87925056d0cd9e9ffdb22273b8a2916a7dabc16b4cae9d4ee03ccc97672a504b2372d2a43be2bbb372b429680fc0dc0a5e96e61b80f220f884e994f17f005594f8bb21cf0289582cda427f538577422bbf46efd09b0880533a780c91f7b7cab373e59e45e9240c8280e7a4b4ae485c54fc167f28df5423d58d4293e755c3281d118cc8973435314b031e2a19eeb6930cb1aff492e26793f5d9e3bb601db4e6387e0b3131985f7efcdd508fe1cb447eb95c5de09d28a5494accd5f3aab3ff9d9c060b58b379e54e0e7c1936aac86487f178aad3a636afcc3ab293cd05bd25a6ce55e7bf8b5d7916f66be2cee36ab9473b73314e4c80e9854c4797b83f9da9aa35ca3ad627a78d724b2947b90a269524fdf86ba10e9be51d05e87c3586da0e0078ef7f2d170c94d88330b275ad809aa9cf64d48c6aec24fbee019bd599f6c551fe321f24e7e121c2252ead954c0d2c5e0644e650cff61b9a6b4f8108d78862073c4eb56e08c9a6b7a75fb3885430ecba69052baecc4e5b71041ec65fcde356b8b971bc69083aa63190604edf54703e473e420ef6de5947385efbd64afbac25bf0c57ae965498a2c866bce9facb5fb36d1c782ab974ab7128c2632b4adf5751a29b7d06867c782ed490e21f7b3763cec47a13e9673dc95bfae4e14fefe7596d0bed4e5ea9ee5daceeb55c59d11700e2c5edb1d59088178a072cf2be9ab246da437838018138cd9f8f3aa8138ce8dbb1e9cdbe79c5f22a6dd60123f1ebbe942bf1d2e6b9acda2c893e9741e70f3b48aec8c0a64067ea8689f007d184436ab5c49f83c6c17d410efc6561a65ef86cdc2bbb3d05b406ff9060edb797d04255404694e154c3831bf96bac1061b5a92bfacb69b9696f23affc851786f38068fcb8247a921d2a4eb960597b29f0b5c1c749002cbc2dbc3e5a0f6915fc50ff17cf81e0c90c7c8030a7c8384b14dfc9b2ed3b6cacbbef35b7ac6d7f519e5cb6ef4c320e08c72f4ff975b5aa94778b5bfcfc4653424f0a6630058b4a62d3534240014cfea2487203e981ad02ffb88ff71082fe6685dc2bb83803ed5cb231f11bca7d37453e06f126818a12e3e56e5a259e0fc828ffe9bfc620160828d84092cddf2e85742489293261cd8bcfddff8661e5f147ed18fe22fa98ba60314d75d4b30e73bc0e0e5586a20aea7c1951e2713688d5d255599011dff26f89f87a482375c91b5f7553e2a61fdd5f6872e9bdb70e173c0be44a45f8e0ddb3ea00e74e0b80af53c43c8db6e3e659aad54eedf7d462f182590c536644a7bb1604cd3cddf95e21db9ee61458eca0203b4710071735dfa8475e401d97818f0b146ecfb3ae7988b10153e4a03f0cd791bf3268ad9277debc09602201403c114e2d8c7b1406087aed6367ca89dfe0f75e752bab5a0ff6ea9d37232496f6d0e904cff271b69b22bf27806efa69c1e579c71ba77a84d65f7ddc5f0bca4731ec40cf7a152613c454c00fd6ce16987ba6e96c011a38c68c0e22f9ff7e75aa77fae2feca791ac4182b27f6d4f981ce6391d0cdc4187887978f5466871fd9394f693a232fa2c2401cf2418d0995de542032aa6ce306bc509f5f9cb28454476c0ec3a0dd1806bf003956b732f3178ec21805d0b9dc8966a9f9eb565e75b052cb5ca6c16d2239639cf3d4f3791ff315a0e1880e451ef52a0c4ddf3bdae9b87dcfbf6f1683ccaf426ee2d980dffebd0578e3359d8f38fe58fff19797b84ed14af18da91a9175dcee0e7cf0e9c80dd9c0a2b39b290898f985ed8bb10467239f2cd96dc14826bc36c8e428a798d1cbdde9c6c9251b31ed7b336d72980c67f676a5dfd66419a41e6165988c5a087db73df35d9a6feeab74f7e3e85cc91a4b35fc488d3dfe19aa0ad146940ea4c33c6e7e4fbfbdd83dd5edf419f690c0b8816094875a2afbc299100ade5f2604538e402381959a0a7331a6f43800c52b519b14d3e4df13d9af01bc72bf5278f53403eaa22b57c553195f4e7cd0af40458008b14ed3749f3439646ead4c365df3ef0dac8e9f8ea66eaaaf22f2764ab8cbce5ac449e5c31387ec41a52f17437b8cdf2c245d6092d399a1b1f2f99b8b950a96e1dc799e331741522a0e5c9332282caeefe073110cd38098f80d06b2ba4bae746e58326f5d110ce57df8ca626b0a5fb8b94f8423750c9feaf1ff8e4e7f6303d130c628dba9a72720cdf30ce75688928728eff50a44056422303904d14361c757e9b4b15591303c9e8a9b78a49d2961b4bf303a57f24469e923481eed9ede5552e992507fbc52b9a94440b22ca77359bbdccee87f18501d7a4bbb10f5fa2f3a6cc0edaabc73653afb7b812de1fdecc6f7020a73f22eaefb8029f0af8ceddae2fff035149e6f0e1cefa0eb6067190c5600df7161439db780854e873f14d277eba707e72297f7b3fc0054ddde1e71386363c5a23505ee0048e419ed3410406cb0dc68a2593bb5dd34c7f7d71b8aaf179b9a44fb639bb82fb1372ca14311c04fdf2aa2c52cec220073c11a759d3e1b104b0eee1b7197548c55f8f741d09bda97c2ec46ee123bb4b425762d27d7ab5dc91e5c1150e36b7bbca3a3fa2d6110e7cb08cbb57badace67eb641b06c5f54ef9871ec6f5a3d9a761726c2a5e2790380502d338efc63b25fb6c2ce34b198bd3904e24a5885e496dc526bcf9aff8d062ccd8cae23feb8de58f2c7763aa61866c2a4ebf05d628d0326c4cf4549e3117b55a9b3b624e121a39ac930c422a852c434eeeb68ee8e7b41ee04edae231baae5936b4ec5f25242847d909b529d46dc67d8499d3e9c5853e58a892374c727bdd75e889a582ca0700379ef638c0ae029b4554b4dcbe75e8b6094c82d239695deb32f984307347a5ea3283c25eaec32af5c147a89ab401fa6458548475521d4622b7f00c54d9a4e42d6011d5ef9c18ce1a19e4ddd57470a18f6e4902e63f961fc82d5588d85ce7ae13e8cf98b331b7d75376b3bb55a6cac78172b363eea7dcd126bbb16285a51aeae2f245717216a72be8003dabe1f11853808d180f5533f843848a8a01235c4480e3a8fcc9f3f2f0b421de091343fd612dd5e7026ee38af15c2ac16bcd7a296e575e307b09ff6e9b584639a05c4173ad3dc8a7f8e86054cf065f89d92e51b29f599bb24a975e32ae019e3888efa4fb046ba0f683e5933b9a286c0a5e8c71a2df6de157f2ddd8e5349672044b32333c6f9fa7fb2acd45e55ba9996b814fa39f367b7a46fa41342f32ff0ac4708fb8dff5c123df75083efa1a732ed5cbdfad51ad6caca8ea2d3cbab224aea1806df98b9fb95dc9ecfe4623dd6d736fc2a557624b26c0a54b08b62bbbeda6c30234c0e9746f9de218172508ae7fb062f0076b771992fe64a43a6b2d564239517e4bd3a17ccb2b5180bca25094912cd5dd6eaf3b1d98ad0e7d2b23668a0bb1737d1cfa5abfb64e3fac5387a3988b30f10f43ed53612116ca5e43a67e5f305453860effbc46164fd425469aabc05504dd10eceb6aed1382c1d0eabb1edd996b162189a97118d5763772fba40d16d8f0c268d37226c758371b5a882cee0d2e3de7d6f5bf1e3dd90b911bdc6c74a2fa3cc89d5e492ff9d67eff8585bf95f6d814ec2ebb0a6ebe0c5609a94fbc866ba42f1639f73a2e8b779e95d8493dbca07d364db0415206a2549fc8a3be5aeb79bf12d5c4050bcb8321e106db3c6d0a1406ec33e5f05e91f19b2df691900f4cd4312d2cc4f085adebbe8d7a16c61928595c7ec65330f8b5b3c849bafb2da35185e4c844c31f707dca35eb18125007bd7765342d846ae61af1c33b3c6afddea193be2b4548fc94e2296e430956400072770b56910004f169b3744ba5666888e506a99e56dceeb8850f51dd756a00ccef60352b194d68e14affc3c11d75d668c4e68c689f065da60d84c60083d7f633db3acbfceef5fc7e64df98e4cb21af47e73c4ed2494eb1242391b5f55b248cfdde0eb41137802a90605adbfdd8f15bedf50fd9247c3c53fb6f3c060526d929f1a1e3dab21d7459dee57874546b6d4222976814a65f59a9f3988fa1750c7f34d9ccc12427c85bf0319c424b31ad1eccae754ee79f1b2c1cd347926e90349d177b07b07ab75fbc59512dbf48dcc68b625836c93a59d73d1565234c569dc7bb399ff8b9c4ac0a20fb063ff8549cdd3d6ae983e1f51abc15fa6fd5c53fe3ec61020f4ae3ea4cf30e3e187af355bb1aba4e2a039f012bf23b34ba040513abcc18da92a337d5e03f0e8a4e88ba357fa68c74e05f0a44d4a0372c0e5915b83d8e6729efacbb6baf19a847710e55da31a93a46d63e2ba75cef9249327cfc18e15cd757ef0c799503a765dd49b7ca2e184a4d2ad34908120d06d3f2f014c219df5befcc5a6b793c2211ccb59e2823177eb24c8a9e28ab6e2d0e82910ec970a57eb537f1f873c24655806635380c687fa909bfcd00821ca1052e288d55450ca30892372c90ca5b9de41cb9c6df099f4de2762f5bc1ff6195dd8f4c4e8d2da1fac31978e6ec184f27170c4fd15ac7d2697121239ca9488430fd58763c7e2c3494f8738188d206a3ce3679b0bc72ef08ba9e3323f87f058d5cacb22ebfefe8cf58eec7da780b3b6178888a62f0ef294a2ab1d4b7d70ddd820033c5fd3faa09792eef3e0c205f60910f5668efd6991c9fa0f12b68a119796d04dab86a2475383bfe41009ee7951d397ae83adfd537710f05a861bdbe6c81554fe9b3fed6191d1cb02d341834771963a18629b85493d0a23f1c9d3f96ce9c43cba8e03fbd5e5f242dfb030371cbfd166c785d04bd73df61379508749107723e5f5f65b7410ba65b5bf394e5055a705bc305fd4a77a04953d55dcae618deac4ef3556aeecbea9cca235d104958ec1b398e773113eae2b48002bb0a1d911cf27b70d3186bc1c1e7786d809eb4d249a6b8b51423e67e00c9f1a4f6f0a06689ebcebc2196b68d592f6d22a567b0db38b8e02025f84b9bc42fada457a6f7fded404ec0870d57957a1db2281492c4db82f9bab8f1dbcaa9f48ebceb2651aac0109904644da5d643eb584e691548793aef134d63c2f2ec1059902760ab1c4115ba9cf691ba85bcfe768949ccf0b1556047aba10ade653838bbdbf5ea2d2d4566b2f42e2d17d6912de158ac38ecf4e2b5526cbf968e5d378ae2172e73f6ac3e1ac147b421acbfdb3af56c7e97523aa8a2d8fbaeed1a026f6c95eddbe24cc2b299af3e8e56c169248c7a6ec7d06aaa2e8da00376f9ca7b6a479e04031f78972b4b4480c6b39efcf38b38058fcb7c6dfcdf732a20a0e6f1b084c306ae11c152309847b6641f8b9fd19ff7dadf70d0aa9a011918b3ccb58bc789cd98e4a2711b4ae882876e84cf7a45307e95bea7ae8a91595a763764807239c08364aeb9cf1cffa3bb9ceec9b3b6d7a696dd35585d356751feecb5508fcd8e8faf12133e227ada31bb9cebd67f7b0f69075a4b6b26d2a750cc2133782ac54c60174a1c1ab36060fa4a306e937bf076e199b508c85189d6bd8dbebcc49982fd9a84b3d033caf41b672f007ee8ee3e93771396745726847e02096a551c232b28a5bff53772ae5e92de34b323bd228cee913fa49801ece8268608ce086812e856e98db959bfa9c74dc81ff165fa5d031099e3887bacede057b15292dc90ace30eceb9a73f030157d58eb9644d87e8cb80f5c8ea25416f9198ebae5dda7c3a41d8bc0966f024ff35b196cab2e24c0b0bc60fb6709fa9bb26719ce6d70814032d3c1b479f740ceb8a694a1a832d310dec6b4d75c5f0ca19c56a2cc0a9704151cdc35339f9d4a10d7d86117080341f3895f619cc8f208ed0970c04057b1ae96a49f4cca81d17cdac378f52965001fcd22eefda847738dc2ac3de8a7df40cf597ca58ee5bb2457712df0c77529c9cb224e1dff765243f9b6d716927efbd504e207875221c616787859e85e76d0c0b2776d44dda373f3db5e2cb3343247eeeda4d7ad6ceb1d283e44e9c830aaf475845102fc1eac26f3b11d1f6c647e5deec8366f9005ce3aca478b5008d48dff68bf2391bc38fce5d3f97821daa99f8855430b21c7d327a97cf2a01f32c09c7c0aa183ac0dc3122b0542f3c6665a3251c2ec97a0cd3ba3e3d0ee27c9ce7b52d4ebf9e5b45933887117fc149f981cc364b803506f08d5af74368886c2446b4da47d16ce4d2710dc528ca35efff867bf1b9545e9ef1307c6c54e6051ab2d16e9654e96a1d91fd16a49c3c7377a0fa1a200fb12b8a37468766168e3fce6f114c281d0e804ea8bfbcec16dd642903671089f4a08411e957e3ad316a1fd0828db45a494896be3f3f67643db6ee4c5154c5f51127517d2fe9f7094e828d6714cd0ff2819f94b67f0680d5bacefa2ab14aa12b0e517a1432862d4215dc72dc4d5ac6b96c1c627e8f9b6d07342e71094cd00cf59223e81f1ab5ec1f2d82b47754bb3f77b3c6e85e988698c254dc39324a6e6e1945a781e50fff9d693f7c3d805278e4f4fda60f9ec25067cec2e23cedd2ac2f60d0e42eb038eaa6e8f2d0f33f6e1a1cf7f3c2bd85348044f2254860810c13b792dbe2d8c6bd007064ef88c0fcd1284e4a3d24db5c179e96f725148f38212a6e770daa6570c7c963a5ddac8bfea22ae4b382d4526b9232c5a66b50b0583979bdd60f43bff67ecce77265423c8e0aa945fb6ad808facec539c59f03ab2a7b890a7988b5cca0099165952f54baf4312cd9ea9f3ae751f3de591c693668f610e1be26210976b690a043d4e2e9ef783e3b0847c602d6b828068f756ff0ce04200a42a68246a37f3d82ebf8260ac2625a5e3adc8a36bc7695c443965c39c79bd28afdc152743d4436bec3c9a5be1bf9ac1ed76f90e083d463a0db48d6193b044eeb563e3a9c2b4da3dc350e040de2865d0247c98307121aba22c05385991088bdb4b7e7e1c455e2ad64a891eeffff519493f2b209b45190c1d35a7f13c02f6d476e8782f0f7a34b7cdf8418099d5ba27a5741f1caee287da13a1194259780fb13a02dd80e3afdcf37d5306cfdeedcc137d89a5070bd7f2b81e04e596624eb7c4ad213b1e4974bb806cc165573fa6bf5f29e6695a0293ee08a4b77977b715936138da0d51915754c124e9d9a13caf188d32f0e89043b4de5e405f6160f86b07297573c0b56bc63d483e22d05846554c00315f8f444fa9482b696319ec869da78fdbb4f1c4395fe9781112e5c6fd37ee6aad88e9e086ffcfe288492f74e24bd906e3e41d187a72cdf336108687b1d5541effe374ef7a06ba364597fe84abf4302126a7bf0cbfbd6f2c15c24f1514ac31bfb115aceb997cab78f9c623b6440531510c66341b697e519548ae8bf9862afbaf69961e4f75c0283d4d6a2b643b1d41391da628ef1853f9c1472bd99f96e0067071cb35959f5f94f598ea7229019b042bc2fe19d23cdcec3289c0c481c75a06a5624b8f4866c9963464cd946f281ceebba4c4637f57578d6b8903b95a87f760b0c38d87f27c9c906c499a0ec12f01655b2b9fa240f87271ceed7b44546956a9251e17bc0e3127081fbfb64da976e70cacdff662c180ac2def0f8dd239dbd64464ca509816351781c12fc8dd92a04c49033a5f117b9073164e67b20f656014c71260fea884e8dc81f312483b173b8faf00b3302ac99855cf6f9e9e48518690a5906a4869d4dcf48d282faae2a1994fa327d3203b4618c2bdc50c890998cfc874615ee468a081ee07d2a06770cc5a0ac9eb3295bf8b825865d15a38efa59c2a9827b7490162682786754d0441e1ee3f97cd2a0723d475655c36dff457028c359545fbecd085003f8d926e17e29cd65c713051fb04eb529805482661dc3a1088003e95566292daa481bc8c08ef5792e00ac722f7df2aba6ef597c5f7eba6b9804d843c0c141667e517563f5da4acb478a8f415741f0d1d48a198373d01f2f7bcf1b92874818a287f92f1f09ccf06bb74f049b206411cebb3adebd287bb894bac714013362758ace29902383cbae00863553a8114e1d4b63e5ee5509e74e435cd60ab54b7621c55acae198eb3e4e32bc26c38fb267dcefd57492719b7da8e369e347d957eee5fc34c26ba5ca8f96ab62099d798b18156318d0123a68a3901dead51193df3187d762fb7373a6254f1080c52a8d25c7924e34dfb6d7f7c2cc99e696b10b6ca7cffdee5b442a0a68410c1c44aff407de1959328bc670d04325fe650d6f6b85b88717dfcc25f17bc03345406d77d5b9c3732c19bb892f7c8c63f56f2292d8b3cc75cc3e355df08395ee63f328c959c4e0686ef157483a82074e250dbd647c7d4b63c5127d3550a94f3b0f3e5deca7af9bbfc7c2464bb96a1bad3746c62b7f6b9d17aa638ef5397556e0f127f429e9025e42e19572dad5bd2f4ad223253009052a59223a4fe5d27013a5b0b9d6c8444690b76171c23db501adeb9faac3bb40d45bf3d59ea84c4421ec54f4f9e911e20298e7f25f1ebb83c1fc5945e586134f5f96ab6c978174b6114ab367f1164bebbee09a3a666e9e6482845c6ddc57825c2e444b8f2dc2a351 +Output = 09413868aa7f952656e20ee5a430b55f1d885b69a702bd543329e1892238ca0f + +Len = 83288 +Msg = 67b9143c8dedc0a1639b71a45cf2e617c99192b25afa421ee144014c5a11380b29c01adaa2e43ffacef48fc86c44624a3733e60867a6c01d7ab6f68d34a60cd9e5186dd1ea800daa76d84d5093961ffd63db6a0bacedb00793e7ee06a8afc33c2329d5ca6daa71d8e3b071e4d6d06359d6efe76430b55903b53fb05fbd14a65b6c5b1a6d344bb2ad9be2c42b3fda778617d925bafbe8043a6726063f7cbdfd5f471603614649195028d80eced59ca3abaeffecb6166cf9d33104b64eeb93106f3dc2594fac8eeee912f81774a0fe2ef124cb0400882b80f79b418935157c26b4d5c7e4de6c0079a2dfaca6c6a9e9627f00a3343f590be1ce2e45479cff618956978d6cb7908901a1195b856cf743857ecaf1451b92f6637f7179b82ab32b7f7c0b7db9811f10d00e476c7a0d92f6e0150b1c003e3ad34f33ed43a38838c0514ebafd92e5227c2c12f2494e5183e8bb6d498c2a4d598aed11280cd25e960a47f52b76c18ba0b75ed5a159c9e2d1035ead0fa98ef3f8028542ac3d0b53d5f0a899e6510c1aa1a8ad7edc04b265842d10fee2dbf3d61d255fed013c170ffe59be6174f43c3b2e3763352cb2d385a5501a884c8a209ed3dac33bad73be3b192fcf765cc919954d4cc72417cbf2e83b53c472d41edef41f09f8543a48c77f2c59240026366ad109cf207027b7d8364e1e56e503fff5800b9a475f3025fc8241bf05265ba5f99667a8b744e4df4d18e79918085f952de99e76f884157123ed5f49b910827d8c8d71c0d4c6d5a918350cac520472494ed7e08353ed739405678fdf8ae72326ec5d2efdbe1e827e0337c83f4b00c4811ff4daaa9fbfd1f66a99d869bed3c608e1afa648bf7573c7d4c3203a4c25dba669e593d42625b8ff1a2a42cf9efbf48b322be28a1df331ea54841e859d9a4121f45513e72e45af17dcc3d5f972883417a978e9a921bf43514b1fc90886887e5888ea63cd00473ea6790c9acf82a10f140c3fc38f13023162813f29ac4f1718b5ed4c8a6ce454ed14baac983a156f0cea242779223be38487bd8a47573f6e999fea2490ae219445c9644cd720751ab301b9d9124ce08bc327c9a82af29fb6897e491a7e79012ecd2d4293606be8c98cc193fc96f34c2176a96b42da66b7166eb9d0d55bb7ca4a0da81b2a3a01b7a4209379390e01c5ce25776c006099cfb7d2ba48fe2f4fc5128ea3b6b86dcc2ad4f6dd3438815d94ba59f89389c3752fc13ce8783c03293aacd784dce602b2888196088da0f7ef010c9994aa860be11f5b35ab2a38de2d714071b5555c009d1bd2897d491a789f53ed6eb3779e41c4e6ad446b249ac843b1f7e29ce9c16f7429f056a3334d0d55d4845fbdc47a6c08cde0f1902f09c95344f8b4a360be581ffb0385e112e2bdf9cafaf41a57c194941c1cc482132dea45706c6e3181fac285d9329fa1ad8091737e76b533f81cc1501b8846aa98af32017e7b99ad151eb5900aa52b4acdd08fab38212b6e7133fc24114dfe6e8637aa6fb64cbc81e4d13927d885b1443a79c18a4022dd3489ad4cf848927437a46c58785f085f14b6bc573289fab9f6bc242ff6dda253ee0733bab40680316ebbf74602c2d60bce5386169a662bccca1b79e0d858c91602b46c4d40943fbc79937f7cf628df461783d87f45b74171271e1fdc19f9beadda58010d843af69dc2f4ad003dd74b9b570d5a981cc46331758fbf2b9f08aaa0dcbb9902693fce5dafa629dcbd18418ff6bab36b07d4ba931d3400d654cdb47872a4dd35d5edee83aa709a186032e9ac5c528c00ef316e1f85d58be31f9005bc03dc74adb18a7e971a1ca9ba0d6f6c79f29d8c5dba21a65d163c075de798c4f4f62c0872e65fa8226770fdccac15f27e1e625c8c52ed8ad638301d49962e1aa9b55a3e8d5bb492abf8353f55246da244496ba3959ddd4311547875b1139a2f61a72ec005f7d164ba3732165e5fbfa552dc7e0a7e8538f996d0ddb69c46242aa7347236e2a4fd47d78b312bee445323303d643951f148d3ee1627891317143400c4ec472d4981638b5cf8250dbb704367d6e5d716c853faa08c1e951d6eb174f6bf659cedcda5df5d1351adc3ac5f2d7e0ec88cd3f4a296349c8983c2334413108ea6dd2a1ab1e3d616026b19ff690afd4cd702925c7dce33ad32fa0a4e1538d79774b1ec17ed997cced306169cd4026dfad8de5ae82bca2426dfa3fea76c0cd1439ac03caca127daa38e27c36ce83c557f94cb3480f6b38f715926a52791b788fadeb321c114b575fef9752655efe13d43d36f260c24b1fcf5682a08b4cb6084250a32a43e8f6cd745de994a402f18adae5c723b74feebf41ad3572d37642f4b2ae4e4cc0b5a7387e2033a3416f10a2e28f97d78a0cc8afe4864561e99a24d67733572a111bdf30d3b3001eebd7dde47197038e779d6b5a3e7e1cfe3c0cee26066c4832b360014f2ba2f957f1f1bbd81e98a4a8fe563956a5f136982962f15bc6d5bc073636afdbdc5c7a0ef2313cf63000f5c78cdbd52db19c2cd05020f0f05efc0d1808144d7f6c6bfc746b0ac3b75c6c715ab1a2a137e7bb6a373ebb4f8c254bc5d5a76d6c92524e0b48db0302a3fa47a1e2fb2f300dceeb692d53b67f77c03170c0a2c68fcd347f20fcc0ae5c34a00ef1e0c7f60427cdb8c4232d97034ba669988978942988797bd7f09a6142f1d43efbe4b68b801e6a8fe5c92ad17d804e40a760977acc4ca7c08ad4e6c049540d642a6f3544564a3bfd588fe9fa40be2e5318169ddeda8235e9d41a244ff1e3c1fb07d0c2d4d943a86d86d7c975ef4ddd1d74fbea24e6d1aa542e20e164bf2988801eb9fda19b93367d1b4177d8fbc7c11c48810b0173b37b9c03898ca3138dc78fc9ab243f1fa17c88604d4397d8a480bc0d567ee90390302deec4b48f91991576a2f50501c7f6d13c106bdb37087c82893decc44009005e966a62c78ebbc3e8c13557ee9e471bdaf4862d9d4b2db84d0044a469ab167c5d41e0d45424f4a6b81bfb246f68ff89004e3bf30828aad046cddc1ded8e9e7cc2cd0ca9d8f6ceaa09d36eeaf5f663b6c7a5cc5cba63f25d162e4ed9be7f138a15a42853c458bc566483fb2c10cb163dc797a1db1291a6d721ce27385ad1181cdc43de52b4ef40244eaa4a685e5b8976569046feaf163aa6f009efea41390ebd6d488927190efcac3eb2b7102d3c20091b2c3627fe862075178e2340101b89d46f1ed3516f5c44569b49dbb41bc19c5e7bc7f9f77f55eaa9eeb74bda360cfbfa48232762364ba9ac1abc12e488a0310eff0ffcedaffa1bbe1c11d4292161e7b79f120fc9fc41af2503961702123c90632b40d96b1f071639f61a56bd70dedf74ca57f7092ff2c74a0c64329d471b3d137716f9f03af17c96235d4df792b845ba506177904fc384938bb3002675a08998690ee92d824db17b1a47247805a2ad00c7cafc0fea38698a07ef0a2e4c81285a8775217383704721516464af581287e0a6f11ec87dc5e8a61794bb352a217be249063d52cd0dc0415f31991df88c68c264703a6a88f0747021309dabad0606c8242e975bbd7a9f539a4b3c346564c22e96c4e9668a4caf60bb3f1c1233935b54bf4ab9eee34b46d098fdc8932d5026ada47ba63cf03efbf04c3cd1095c7ddc4061072f9cccf45930e1d5c8bacec3089813e0eb6e595becb76aa636f1961a2bf3bfd062e5d90a38fcfb6fa70bb831daa66ba1436b3407e42e9d07b84b5efcacf73232fe4a960188ad4c37fe1688312f31224928c40ed794ce39ddffa735a9e1b34eab5c3b925eaaca6aab485bad2578c0ce2515f9485f50fee7956775b8866cc09ba5f7594c9621cccd55e05b959349edc5e1958b8ee3bb691cca7a374626a0977fbf69f4232c803ceaa48086d00f1510bfeb11fb312936755fe9b28c6d0f1fb081543eccc4a648835933937dfb0d5cc202ce35b8dd7444ac077faab59bb45c943700b0139f77dd488f7f83a164f2938a34f75b44f2798895c9f8cd73609ac9cb074198991235d0e4f3e4eb81ac635bc1cce30d400e9d549b1df185164a46f9cd88a342adcb54a5f13cf0359f4fe41811413dc60a80544b5459d68c4eb72d6f04218238c23958def5a14dfc6abde95af138541034f622df2a34242d6d45d28c17688af586eab6ee5af74aaa7474d796d9f8c2663feead82b50376f2f264caf36fd40a036c3df346997572ba3d13534e342905528bd848c86d5e3b778e926b1785eaabecd2c1929a59c252b63507d0f3a83f994fb9218932bbbade15925d577ae212cd0c6b04193be4547728fcc0d529aea30ac84878f33438affb779e3404901cf30a0c8573fbbdf1a23c8ce4dcd452a009b656aa3cfb5f6c840ff812b4f6e99ef1df47c2afbe92ea422f5c8dca52f134ca38655eec1616bffd7821803ea309d095b958a305d65d36aacc026807d5a7c57b0d9ef714d7ecbb62e08e775f9d536a6524b99724e76f7f52af290423d0c8ea72b24dd335c563d76ac59968864a68b4d6add51f6b465c2cb0253ad28cd8e71c67a30ca3cd42feac6b93ccc4413ebc5860b155cc6797b5b769eab263d15284c3c07c55c959f52fa2ebd7a31b2efec0bd99db95fea83fdeb7e64c2a286fd21478f39aa3b45a307943620db6ed9def086cf88920568bc369969be60ca0d6ec38c4977a91054ca95e0674b272bc2c9415def3468f34a0a6d8ec1134c46d94e5440f12b8883cbfa460748a4260f739925b9c10903d49857e9f10dcb4fbdf2871d8e10bc103bb11d60316294a0c3f634e5c2ce702a4e588af3ebd64e31d861ff669c2d9209e10e1a2c853b845cef5384c99f9dcfa709948bd3a4a303ba3e2da07792d0153b1cebd9f22c5dda233a90701879b78f40ae5342d143fc54b1975e50979982ad6e954f42fa4e5000bd4cb7df1c77a219bee59e9735f169a8e08dfdf90fd9c9c269f4423d8b119a5cf2cecfbb1bc2e8d4e8557c7246d573680dc61082287930bcf5e0ccb2eea0c5588a68e1eb5e81102788a7f5bb4d18a1fa01eaa2d327a13c03da01f6896c21595a4cc1f4572ddda37c6483115a92e17cc784a2b8d4577b77ffe000c7aa4bbddccc018210e7d0fe283a468fd9375d598b375e965c6dff2c6818ce8548fdd39bd81571523d838e0b27c8f476543af6a756b3566d958666df97b76e377f6b4ee4d49d64da8413b02d299036de8a4ca4f565a135cf6c07d5ba8d4286bf76da02bf59cca2c2ec7f7e8bb5f9d6708453b168416ac366e7d894e5d123dfc435333855ee0af2b17eaf404e536b9ad34938632a7177c8d711e1eb89ebc041efc25f38cd1bbf1e4f418b3e9d8b4e4cafe1e403637d2f0ccdef0b22ce648374e827454a506853ec453dfcc0a1e60bb2ae553ed83aeef956ee8b3c80dbc3d33f566cccb6065e2e253b7ae80d81eb089576ac2d2cd84a3f70e2ec5d4ed990176be297dec31684b891d801396e6623aebcafee9b45651c6820521a57d5ef54b9c033b262bba9625af7c5d9d52b781465f102246f6c08e9dc2fe61e105a46952006f2c43fe4e6817a20aa0aa68cde4896fa165591e9e93b026545ff722805deb405c6d65f87f66882d52d9d92d8c147a7a09589e8043199448918c5648655b4dd8558efa9eb009fd8dcf9998359489702ab24c85e05088c09650678cdbb5ea1034d4f17055a2dafe6fdb40660559cc20de36d1bda33959bbabfb8219710472c8e2654565b1aa51f120207ec1115e4503210188945d8014ebd60d5c8a9cd39dee6d80fb593748f77c6b199547de149c7d8f9cd1b853a732d7b100673eb3a5b3d732b273b96b0134069d413458e01f3b1666733d883a114c15c96f32c459ed6d39ee745f14a165b0163311cc82bbc09954622f2c827570c91c9bc43fa9f43d128cdd310dd98ee8c421b915de43c5bb4fcdff2b3f35aa3822528489fe6e16f75c269b83109687fd18cfbbb7da1aa261b6d999f1e6202cc9e06e203aef6f36bea2bdb5e4f7da31250656a7925075b656770dcf0da1c081b8abb60b51934bd7f57eb8a8d13402fef3158d091fd1f3860bf8d10ae902955d86bcc092687a828f2e488dd0d2459f65e9dea96ccacf0295f4c4d9da1e792d04b6cc2441da1591a0ebb8c3ea52cd3dfa7bca522f2db8217a93537ec91885e60bbb2247b640f4f7c19017f141fd0b3d111b510ddcb31dee887a3d463461a95ef72687a15c17892375ce1e7c641ba03b6e5b1b32f1e570b8641beaa6b87464064b6b44d7afd842b311f814ebed492cb756cd71781b5f411d71fad436d1eb465a6d0be2311e0dc2154aa093b639fff11f6eb50c33956b1f9c5689927cfd10b0f9f08af874431287c8744a2371d6caadf21ad433fc1ca36ca3766a9dcfb69f34336a5affe7aba0f44b13674c954013b3cdef9d9147fd92a8c145f06ec57ae160b53f1e5121c413a82bcc9a67970275931151639c9dd4a3648469cd7df4d67196ede327a4a908f513e8f4260cfd9a6acc4ae4d8de641e70105b465453b435ea775c0b1962e3f6cfb7e12eccc54f846ddff91e6faf4157634cb4602788aa3596626dfb65f47919fe04c2d0e0f8f33cf94eaa629aa7ac0c076a2e4ba9753d421fe8b2488001ceff2a9afc8ef5408f308788cd65dc500aa8d709376d6cb1f3e7e18ac77719f36bf2bfeb0cbd8c148a1ba32ed07cc720e3ba5c9a5e49e3b7549375c8fc1b7651b6a1386551e117ed6a3ad6a1522bcda2ddbcf2ae1165a10dd5d16713ee8a379555972eaa8aae2b43a63a9c70d107625e4f2d53b4df55271dfe2e100c1d67d036cf310d2b155938bfd4776f1dcb7427abce87da3f467ce87044061b01e718d2de69fb4e477086b2aa6b9db918a0167013c25900bdb551579d3df5e2a5fa31a1d4dc728cb02acb3babd20a24f20d52fe4ec11d51a0ca87070d528a0158c536efb28d2322d5a27b462cbe491d2a51ae048541516798e4627949081ee1aab69cff000289bb38863b34b576c71c321bac357fd9719cf6919820c8e5311e1c6cc86245c312a049346fb9ce92209c99c9c20396e01a7c5a508c8015707d211e466dbbec454a9c983bad37e096d238d1fa83f162fb988034bfa439a7103f7520e1e15e6c0fcdea960a6821940b585b6b1c66715c929843063d9390066b1484e4bdc7ec6d98e934d33f151941563f8ed5bdee25ec3b763f4f38cf35abe788faaa3885c8396738e5c0485881811dd44da24d8f61aa5cdecf905fbb9d1ffbf92111e0bf8488013987fd9496fccba8c3124149cec71f8d2e8e4a00ed38db3f01a29c54b9a3b1dd6785ebc254dd99bd8877433130c8a422e2060cdad88b56172ef9a9f318a84f825f8a0b4016c66392a0d718a239d8e0e48591393c0217292add90db4a50f4c9666deedc9c5129c1ee88cc420b5e9a4e18a5ea5fa2fe6ebcd09a02a0d9072bb8103f3ef045a88a3d17ccd14fdb236f5455bf6bf0ae21f499aee0b98b1d8fcf84062ff4b6ca616a2da4c950a2a00cda9c123e809ccc114b381c4e400a867f22c5bedcaac0a9203c1c2c2af4eae89f6e7de4bfd2a47b50d520bf3f109fb239f7e5a0a1bb8e406992a0f44e2879133f8d72239fdcb83a4514dbfe3fb5cb1f64a17c623bb1705eb1e024c3cf55ddce81da21756b093897829cd26fcc9a0d2c73a1e279f73727227db74fe11b17a968fab70450add2b6017ddfac6a7257e677db8bc03e6097134a418a5af2bde83c710eb6833be4e3a106bb5fb2a4ad59e77020c19e46045bb54481dc0e6f24423775325b369d8c969a25af8f9d74fa2a70a3d7e5c5175f1f9dafd31eb2cceaa00af3fa1786fc217601dcef01b571c5442281656aed38dd3d2ccaa9d4e0827d9c276bea6e0cee200c689aee38a301bb316da75db36f110b5ef3437aa1302659a12d5b87d130da24b43efe21a6dedb286cc2742561d33665df7198b9d5fa2f0b398d3136f38b469c2815651dded134b970b18650f8a21f793938490c15d7130ecfb78b8c2784b9e2b25c6e574322c4dac7cb4c74ea6442b216b7c2d5d32f68e0fe3cc8fbefa5bab4fda47852663c0208ec6034e5b98236bce26094ab809b970e2fad880ade76bf7f646e2193ca9552c05920de37d89461d616d33d01b08433f2fe5a374d56604eae7119e8afe2b75d8d988db6ffea136aba3e703a5ce571b64bc4f355180a0adecece484beb412a78ed14f74d824077a7b5c3d80b2191fc94551de9701f4bcee65cb679a9ea68574b6b690e00838e49af75316b3df4488d64cb83ad06a79e34fbd4d41ea121cad62b650f228e5815f1f85521ba21596b9c9e0b80ce876593d595c3a1a7c035db1fbf7671e535949a1908f1ff4573a58db2a6818fce80cdaf193ab5a9c5657b2bac7e1c3bb694bd6d2757c8348da37d315824ea1b1d71346288610756d82f863f04ddd2b7273a2721857b446bf31f54c9058f91bd4bd75e309b8f4523508ccb87a155169eb7748639ebc9f3002665b0e7334d14e0ca319fabdb3c0ba9deebdf881a7a643cd8024f18a2fa509b9815060e79e3e010290e7d26bffda754c3eb26d2c8c4582c1931e6605352e988c88be89141fa8fe5e8cc7b53c22ac4bec00925da44b94ee6eba1e083658a2a621858cd2213e770bc79fa1e958a69c04223a4711106cfd4e7dfc0c21461f69fb237fa283378413f1e5d25db7e613146798f6b8d19977e76b9562d0f75c12eb5f387fe8e47d78e577612ce3670eef7b3df63bcde567f5ba0e5ff253d2a1ba909a088c463c1ca25367e3b51b41fac4394ee3126e94a16eddfd82b67bfc3d9ec1733caea4d53b8ac6881276ee8dcf19b662088183277068ba01a7b631bc5747e4b47cedeaf503b9a7a197764292b87759410d93f4e6fb6db8e176f95e59173b63236f5200e59cb65c7b19be0199db658cb2994da9196b043f679687e81ca604a489bee4ceed2d094fde415411ea606bb77f54b98b08e7b6b759b068b94d2c2a11ad11ac3c54de3be691b7425ccd7011406ee8de80fb980988806ba5b734d03310590eb03364d9d38b5e2290c88a33e09048fac47139a5871ba47044cc18bba90b5360fa99634359a50b2b443f68d05f0fd43574470b37b8d68d6650df4315136964ad92589a47559c617968a8b06f1725dc3ef5e8b976232202f6ced7fb05fa92549e7e56510a50d728b503eaab3a8e3b26c04f3e8b895068ccc8c89e89b3e5eeebdac87dd0b7d2c028861eef9e574eb77c618b30c899c70eb383451b35485ce5f10a78b35e7461be2895c09ed4eedf03a4c9b0a5bacd117e7fd04e3646ece7df2dd594e244698739f289f1df9428c78566a1c687a74eb51ef856ead706c60f4468e426f1cbc0cb994c0bb99a252c90a78c91d6bdd8433b58e6be21e6bbff5b7c6ade35c8389eb547ffc321b7d023c1d0dc40e62f95d52c9310affb4baebe54effb6cca4fd62dcea9d358301fdd35e367205701c5262c0e363fd281ee272c8005e336ec6eec959d288f73efb894897dd61e7d2c67d26f6cab3bcfbab86d716927e9e3a30dc1feab2dfdbb646b3c4817849f5b71fde2c7cb59cc4daf8fcab497bbd71bf7149e8f7e1ee3d999211f993ad96a99d76f9e5bb5a8baf4665d841d912b7388f16bcb70a0640a7496c083a56c3d49de66a54e54b100cc6de908e4d6dfdd86d098fa90ca99683a356131b194381802d227873ad948c9cb6040793204093bd79bf5aa35c5ef913ac3045df18d23d25e1e21feaa13006b80747199b6d297ab30920e6101882c46d4c8872b8bb8b7d3256a5df0e529644eb052864fb8661297575ced083d3cd7f1cee9f082c63e7b841f5de1473444f9db26a286827fe8026615a29a88320879f9f1d0494ceb47f74b13a0b7e9df8c4978a90b7a1c5481ed80320c1bc7251599c605259a7042fab491cbdbe7c02e28db8e003569047f585d4d76417aaf618abfc0d28fe9d6138039bf0db577b268413786f4c95b224897d935a9eabf272d90744f1fb74066a6010e3ba2d671a9d7fee6c64d6f595ef663eaa092aef016d04f3edbb645a60842a4bc6f52e7dc8cc1886fb8d3ce69a0d3e716f6fa36176693eea8cc5de024a43191cac1e490c1436f065ac34d8f96d02548e89fa92a3bfebe96378add30c022b9f1c09b227827b529a1304e8559e5d635b1e503673165c6996e757dfede846a23ec2764d24816cc378177c341d5609a4b48978afcf39ca66b9fe90d87927864b7a98684bda7976fe0cdba894aab0e05af35859d2f19e8867e501ba342f3a3f9bc516563ab3eb0866dae7e086882f7fda8a137a2c94b514e18aa94a5f5aa0d0f7c0b4c6964b56bfa264b4da86202246b7fb436039330e0e682d5db7d695fbe8f3d00c4feafb3d0b153cdaed102d49c387d95092652719c3604f8789166b9bf624857548a55e0e6943c5b2aeb0ea0674ae76d3875d1b58e27e53bf44bb460176ee53985751fe5b58b291e485e4f0d8e8b08634c56d7a5bc9f6fc7d6121afdce9d5bcede27d26a457f613d90928dc418e227a0cc332be93087e8c4a64d6138edd6f43de70839169f562de18af0906d0d368b4b40739628f2c8995aed6651b87a00f6af28811b92cafad532bfde1faf76717d8d307ee00a0848caaf31c4b2268005aa4b2af83f85ce51a157b6c504325a7a458e25bcd1397cf1c3eefdcf4c2904cc583a74d66e98b445d879f70e059fc1392b75a795305a56aacb3dd6efe76a103d48a38e84707383bdc4bf0b1feb9eb396776b3c71c7189c5a2bc4468c4a90ab40c1af01680dbd43a0ab5279627dd6397970976eb85c1858eb2cadd40e3e44debd0d8654ec0d1ffcd8d659c93d85f05aca5f22c4d2b8059144141d09dd8b2eb09c724f0f773740b74c8dfd841ac9931f718c33c627a385504d2b3e6b61f9f529c53933bb7054c97ce41866316013688e563ff3fd1fe5409ceebb3884034f425121a959df412c615188bebb58772917b262c089f02345e07d0f0a33dc2957bc31960ce9035187b14020c82581c7d347907b561e28998c0afb986156f93dd70cd00da80daf082d6050947ecb35b8dba0328a4bda2beb82681f7108c965a598d9366fc7eb6ccee61789cc28d6fbb208cc9f78e5e4837fefa2f08347b5a8cb62cc6ca2afabc10b797ef4b10e6d5c1d2170df2b6d65b7bf9b6076b466424815fd8d7990a8763727af3c982978b9df61ef37fb8d2a8450124e49baedac97cfed30c3651ffc74558a50fa7e1dade10ce63ac6fa85666ad5dfcf05c31763ddc5bac4163939f1cca39d245fac76f60e6b14c9c8e4fa673ece90e73d9a18d13bb0e38230fcc5d1a7a9c6f2142c1a9b68855466e3c1d67729c48c5e9945da3eda1ad22fb6b6abe22cf06e84c006f3e416e10cd7bf9a00dc533e3bfcc0ce43f4e18aee96536fd36d84fffea00c40e8184107a6e5057660dee3c405885b3c3d3a79899f7ead3025b9d65edc0fa0e4e081108088585d5edec702de52cc1198af57ca9e4dae6c0089104b96729823f9c565acd31cf86e5962ddd7158a8e8be98094fb5160ef39e8e7b80b2e27053e887e0d3c88c88de16fd46a8bf0159770379a39352a4009bcef27fa3dae621d9898f3c1e928f6de5da81cb445f85baf698be48e9fb256c49c1d311e099e8da7da310cc9db3a0db48b0d22042eb3c59d1eec46da627008e8817aed6c98870f6cab5bb16c394675d713a5cfa16eabb92b3662a867a5ecbf3c150f432c12f15034b41fcaf32bd4950f9c7909d52c68a01f5af5f27b91afe489fde31ca59f62b8c69c843fa6db6dd724ce8fb9e69070e34231ae0c5f4e40dd97e4fe5e206564afec0c93f8cd6e98a2dd53f1c81dc34de85c6494df5b0327142e7069f3e58f7e9d6cac53ddb00fde5f03d0a71cc2ed8719359aaf51b6d8edef16492bc13c4339ea0f23ccd797e4c6745ef0b79f1d35a4dd947c084bbaf619d816184cb26da91bfe9d1a06ccc915d84ab6582b3775c42e9b43b1a6b6ad853336f885d5adbfebae41de380aa68fcb9c49d3b30ace14c2adbd08e29278d8acc4718237cd997c2e7a1c9a26df4b312e9bd97da75d4b4056a7aaacb7d27b839453f17dd73c60ea9d06f5988b8da5f7655c637bdc2b9642a8a6caf7d770a5f665681db00c2be9515dda35a1101d9a2899674d96fc7c9762e13185b0eb73e078468b5fe57fa01cfb997e457d5d96140ef1450196ac5936e729d143a19ae413525f451ee2d8a6e12f777b8bf41900faef967de54396c85b1ba70c6c908dca26cdd91dc370be4220341f5771cdec633414af97636462d4ee44846d68466c2d002fdc9cb457d97ec153ba9d5ed280c8a9c5651ce2c3b882d7abe7799f8bde168bc08f485a5fd261acd470d2bac97a36434ae093ca263edcfe98f9ba7a268b8baeca1bac1d5051f3caff6880ec7b85b6e9ea478482569fe94b52e2b75fe11c975193a84d66f1fd3d011bcb2e5eb0474f83eec277741b81b1a723c9f8b782393f5c645db59b0b7f463a72c06577306809fa9e7bf5073c8d3df851d606ebd2898db885626b26667e175e4a70ac9fc291ec34429785a3836a94282533686199b5884b3ee0f76dcaa3b653ec038b3e306a011a2241b0b0b6c0be1de705a6839f6438fed7ffe2daff962d03a0a08abc409a4f94869ffd969e39c4c1df7749b8ab3fa6ba97e6b2d3ccfe8454ae6f3282bbcade8bb5d9f4be037badfa55aed86787eed965c8bef2c2fb84c1305d990af668a1b7e5f8181d8ead2e81b290d5dbfaf918d9e8b0ae270e52cfee7ef6469b8111c8e18c9784016f63fb49d0d912dad8ca65af2c97dfdb1f9a881226c19d6b8c7ce66466da4427caef8a0c3c788d5e69c27f6218c778955d9a56360f06c7047d72a4495d088117051782d2deb570ee15a80bfa9387a2de301ce261230deceebdbbaa97586b625a8aa48ba39ed7e0134446b480871e853d00e6d39b491d32afb51f9f563e491077bf5d4f88642807545e621ffbdbd5483a35c2d2ec6980c4d1cc662b8ff9ebb2f60e0c738818ee0d39cbc5f77377f4145d3776875d6c7cc8dc6957f74970997160de77a2aca2721a4af337e2f143c3102f6eca99f5385a6756f6bcab8c8b9b753c966782fbeafc54103f7f887b278965374388b1bdb662c8c9da5bef603238e512a0a4bb7dd8d4e6121567931c0b903afd1c7676bbcedb14bc7dfc69ce4db9e96b63f6f63a5541f6d8deb5a8d9d71eb80a625e91f9690f72b84769c4ddc466abcd4725db3b478cadeb033271bc737c06e57e06a97f6d440b44a069a6967f8750c3b4f8118798fe32d2eaa696ccc7f24e16d6366753c4c306e8f0c3b8ff676403d2123941262eddae15fdd9bf11bbc7b526d4b8737f54d48c2c9f40a1236245ea84c9ae1221f371483da39293943845659cdf53740b07bec59915a8090759712d6041202d7fcd0429d1439bba5c24b286005ece12fdc3cbd8b6bac39ab53531f5eee3563948a6dc785947badd7169573fdbbbf2f65f7241ee0bf758fa34dccd6ab7151adf8465425e5e16b8a4dced7cb9b45d87c838fb692e213231d18c388db3424032c73cf27e0367185cb6a49a691c13ac552f91468bc17fd414c8c630b8f917cd67987835d88efcb570bcd156658f801023d4713befceae46ca86e8ab9863bf2281fa3e169827a555ba5d6c0bb93a84f1ba5fe0c2dc7e34ef1bb4fd93731ac1a94897987d05f8eb6004427ca0ae46a6b7e377e7c39cf99b36cefa0acf9245a5c984148d526826553e141209fd8adb6fca64c48c2675666a85adff19473d0df4e9fc1c257d09dc6c57b2761c0a9520669305f0d9d3b0ed2a437e6c31e3bc9a3573795569e63040b614a816bbaf193e137890a0d6b294b862d70ae85b8b5613f0cec3676075257abddbbd99f1d45c5dfee2cb7e8aac6bec9aab191c9e2754a0ae62a2fb13132fb30915b8a8c361a7a3b03a8032fda77bb45b2673b0029ffe6bf597deb988a69813202b62ea3b3e423bb0e67564378c0e362bb0df4b8fdb9c9950d53e48c917a6c18c8383086053754b865073bb41446a9a95b126954ec3765544848b51de4fa2e6d587e3a93a8888fcbbde41df22b6d7091e9110384640d4c55b0c8d7bcd35d4a9819e4976d2c6c275d6faa979e2c99fab50b965d97f38fd111cd50c6fa0b083331a2f7e162ff36ddf5f0b71318a6709a7b28fed2302953a620f47d0d45faaf8ab28a44b3259f9cf61de7962ae20775c25cc7c70bbd63dd3e0bdcba053100a7c3a3164767259be3024dcab4499afe0e14f27e9b54c031a10b2adc74694bdb85508bfd7c77d362cda4fe10bdf993c8ce04b4a3c857c9212380167a5883e6d9bcb3c596508fcf82a140b7300fa57d162a041bddfa8f38a0f95f474cb2ff9299d28ff8876ff96a89f25801cf25f7a754a6b5a0938e65af3f86db45ba3036ff8a5b278d27275f44d7556d56349d4ab312c87bdb5b10759d6b50968a493cb45e29cb3d0c2c133beef93ef33d06e22920cf03d9449b0d2973a2db139d8055126ef68712eddcbfe9b96e138c1ecc711d60e7fd5044e9f10bd274aad4f7e605bb828f235bbadf9a1334b4778a83ebd68203fbf97374be58972a5f344d11e0cb2a39422469eb9b1e22f15adf90f4fb9f117a899cb55c8ea055fbd10bfe741711e903be1ee00895c8b37fdfb011fa521726450f5b8854d164c2c768a66bb6ef7662726157309a66362f20a19d9ffca5eb4ae3fbca7f063d12580d94781722d06540f5ca71ee0972c30 +Output = d061c4838f25fe52e3246ae6480b6ef06200a022b7ab35a49d7cf013f70deb3f + +Len = 84384 +Msg = 4d1f258f10c1be8b084dfd63fe3911e09e502abdcdb276c43d1c4f333e69b364d759f4ad1592b086a3e404e99bd1fdff9c4d4ff81dc24a3a005709bf6a72edb8d37b4a7759e45f8b5a668c2d418dbfdba076304280d84e61f541f8ecf5a2f1ee690e8eb385bfb2e5555afcf599733fbcd35433639efa6a80416185818402a74ec3992a2a402b91dabd48be0a4b8e66ec5d6ec122203386de0f3f1648c298f72006a485a43331e4b4bab83934fee31ab2654c4348ae888ac485641507546ecaab5db807e906d893b97333d53a5a7c445513771f9def035e7acb57e887e58c0638ee5c18c0602987321140fae60960cd1e9076bfe98cabea480aa0f9901bf8950fe11820f2e92aa666bb6810feb0979b5504d189f42c8817766ac8aeea9ebc5d785f7487484ae5d99f9a327f4bfa2a98429711e78678a3cb4b1256715c17e048bb90f9b5872b620923d626b0958c20aa2c6fbd40661803ef102bd2a9af2e6a3d1f9b2e137a33a81c3c96cc09a41181bb5db75dfb5db3b06c0edcc5bdab8a6423eda89b07e80bbffc2f02adf33f2f55b21b957a8233f1b3288a4eb61718d4d5e46ee1c9fa985baf8f474450d7308ea577af319b3cb07c130dcfa82d1ebeb3c667e76c3f5553ca80bfcb813d1b3dd778f261b448919bf9d8022413b23a65d03e94a371857ee1003b7202e4fd292fb2d70b784609e9be130beed0b7ced3d4d24553e91924df0aa6e89235921767cdc6c9aa3e0e67acdf70b3bb1cbb0851d462e38c008ba3de96648d06adb6133fe1bc56b7f935e942c7b8d8505048e91d2d28212731f08ae54ce134b6af767a18313b861af2e218143e948295b485f89da7cb060cc470625bf5c6e48a86fad35987ec62bb713e7a880cacba728f9bbd3a09f49b240132b2a859baa66a796ba66ca977f182bd719907f8a787cf2bb1c05c1d4ae7552f5f02334066813ecff17cb85f833c5820a2fdfacb2df294cef08a6ca976f288981edb6672717deed1b3dba573b84923e0fa2cc74de802a9c180a2d0761fc4a68298c3a8b684a262c7da4e9babc022cd46a0b0d8467dbff64c8890f24cee669536f54462d647f983f98d5a02d140cf3c9abc11937e973164b630dd39f38bdf3ffc5ce6fa98618937aef58942abe3565a2478d562bddc61d949a2100c329d378a1bf530d9c57b5a672f3a62c3024ec10d2bfa86accaf4563e4b03b1d5d2cc7660dde9aa67253c75fcc5836dee9d2c183ff96aabd86e88187c057e48fb9cc2a5a88860dc0c7f4de1dcb6f83329462361d7d4f1cd507140b079bf385ee65524cc4a65814f319c55a6f14ac33bddc3dba6bd05b7737b9bc3251fc15c7afdc89df12dbc758a3c45fdcd21cb090d73ddfeeed9d4e325c1b3ba7f55521025aabcd31e3bd564159740ed5d567ff532515c314213889d6c8a83ccc702bb7ce655f86e5a5bf77579a855cc5e77b0ac31e1081ea9536b0fce3ed1a2041045ca45644517ae756cd03dd94e43d96ca459928aa96d2b81c35ed54566e33e66351fca406b7620727a9ee991f2f9d41da322deb306c6d085d9b509080a387decd6a6fe513232bb386a07063708975a72f72f9cc6e8cfa147f53af1ed8449ca8a6f8468ff62f384b084321b3559c47053e7a9542a1733a5af5f15155d9ebd2c2847e491b3c26385c20f48b0f2ad2920a8bab88f475b98e4a65e6ffdc11e3dacaea7ecffd31b28c55755704dd6cb6d7159b983d3857ca767123b70327fcd705104d7c43cc935ea4c559cd37b497d396c4e2c33ab4c410735dd3f3f3b0173ff23131f95d0fbd85223a62d98c1b38935176f5bef9c04736056edaf05a0add8912ac1c78741d3cc07513050e8a87cb8087ca58de03015da5cd32cd6e9eaedc3cf6ff716c119b7d8b2dedd4cebb70cd25ba3d60b2eeee73ea1b380fb14a028fe60f99e556cdf11c6fbd3936bc876cc9fd592eb1e005ee267d7fed365ad4ac54feed09ccdaf1c485c89373cf3a86d22e71f53cd0c7e096f1da7bd0c5ddd702e7f1efddbc3b357c4630512bf2db2257771e0ee621dd276f427b9f7132bcc9bca569a8741829f18eda2166c04610f253406c169949b212ddb4eb4b4d017a152019b0a76b8519ce82be3654ef3d7e6f5bf6e6ace4acc96b78a5a40fc2b69851e3b1815d32777d24de6ec9abf74d6601e827182256cfa569b6b1306d80c689f86e09364a5753d68d186865cc86fa7a527e3d6b274e16b8c61e440ae4f5b5d181258d59ff48ceb87fc73795370cc93dc984c67a1c593675e925fabe06a0090174a0ca66dc853c95655158d28bf73e02efa24eaf71f6938f4b5431a4330e349c5b762cd762ab21efe64d58a83bd4cd6c2d3d3285e8b4b257752f8567fa9ecd049e0c31463219134a6b119370b7340bfc1aec1e97c0f21750ff2e6273ddd046ccc4d9841dcb6d85177c54a5d69e835e1521056f5f9b6d371e31c755425d511677687471d88f06fbe9927d1c4452414869e83fa137e854a611c580da7de98fc076e153a7010d73fc3335f14344530c6f4cc8e150db3866c8de12e16e6112eae95dd7fd7021b732ea76df67d751413327305ba0fa93fc0223c5b27f8da65a00e58ea4e889a52cd25b47073734e58d53f4d718d50b0cb3b55b7b2ca1b4b83f5039abe09b4025dec0d30645e5d89ba7fd7c8379140e9fe00eb470d9fe701123577a18038c200e3d8cc647140a5ece118e12e804e471e8116ce32942fc5c3bb6851b759641c5d8c9a4c98bd9fb24076a844c5734bce15fb85e4c071011b5a26977922711429e0023973147306ec4c2038ead639103b971556173bc99e528ffacad62aefd05153eabd2b1fb9fabbda88cebaa8f925f86c77904de9c78cd328df075219fc20fc7cef2f5b02b70587b055759c85dc136b5cc83b7014905505ed7f58d435bf8d9225b796eb0697aeb897303278b30a61fe2fb06067024f804fa87fc445c8619e7b14eafac2707e7db657c10f367baa9718acd9051afb2a961b1f8a538b1809dc20123163ca8b96fbeab8af13bf25e43d209de8357149491ed01b460e8f6ee0cde7e634daea9e07afba82a346f9f9e2dc80c888f55433d5a0d5645bfc39110efb395a9a660af0f9228f7c44b1cd3fc9fb9ff55f4fab00f6a594c27226724bbaee7f340b1012ca93dad2703b5b233ec423e5ee154a5ef9d3b474fd339220620c2c1f3d31dfeb74fd61e9242f4de43ff8dbba7a53ee55669555dddc454a2c9f2d3f833db1db7b36603f3e60c98df68a90ab8660c144798f6310372951567f4a45af11fc360cab58e4fa37eeb1254367b21bb1690653b0bb666eebaafebc00ab7b023341667b6421b01c3e958e1cb21e87b4a35dca24e333c6f65f28f5869609f8c250d5e92f8cdbed2dba1c087b2af636fdc504b7bdfb40aa31fc6addbc2baee476cf8168300cccc2b3134cc8499538e77f7d257328de283aa52a3a5f64a6e066a71a0b8b87cd3c5838b0ed768eda2dc4c0348aa66d7633a0dc525e2388eee8a6dc983bf93bb675d643fbc7ba53e11af24a53f9f992a9ab015eda9fd02fed0ecd9db1db5b54aebe655d5ba13a9f924a9ca5403b13a161d688b12cc50e628a990373cdb158db9f5e2d0c3844a17ad504e85765189ea185fe5a5fae988728add36fe4548799d7709e55dbfb7995ec928ffeea29573f9bfd69a2f0cae0e0893e023a7aae23c55009c6064f0a06befeb13407e6f3c2a096b15f86eae764c48d266f8bbd444d854e521e67f2ceb3c6b71a3b2bd12d1f699a892a2ed76cedd93d4b628b347ccf81da33eda14baf4a5220b5ec91353e3742b06d11c33ec343c7a096226267bf7060fb947ddbe216910d3f6b8e62998ed2d1de455b6da8532e37beeff937de76f7cbba5d143e4069529c1e226bc58685b8c12ef951539c8476d1a03f2d3222072d691d76fbf2ec1153aac5c3c9e3838bb0b8a8713b9ea2bee23c4d6c077dbadcdae32fc77a1e6e775ddd3a37f1e41808835e5395617542693b21cd60cf3d2e5bc6e0f538d8ea4f0237dd87642befcd64f95d374e0a0105ed49272901cd9d07eeb80979b25f7f1619ab53b434bf2c2b07da5a5c827f6a72b3d4f7683949c3ccfc7906c21b55054b267fe7c78ef4c4b959ee00cb1a09d71221a43892ef8ad705edd27ed85d03a377907c40ca5913dfffc3fdf48bffee706ba08093b00bd9023a288819c45eb18221bf6a07c47f64a486abcee1a417765f079932b0c9747e6bf41766808d08a7cad11b11e3bee72f3cd57a2a6d1f4cebc96e728036e514c13cba21335b3b412ca20f0c387dbf79bccf7599d940038593d9269533ce0cd2e99a15aeb651d7f3893264faa97ccf1d5284ec6ea30358aab8b4b968131f479640af8c26b80b670507a3574d2a89f6bb3b83c463505e26a2a085af55e7d29d480ca3a7f20131f65fec1d716d844c3d3bbdf584dfa7f8765793728ec2798e17d1969eee78596a89e980c738c27f6cab852102b54a717a4fb0dba3e0198ffcbc1726c7ea21885e2a8b0dca36b5e2924982afd1de0b768bba95bf412cc1f2c394030446225555b6e02dd94ef3ac77651e18ae8b878c7ed4beee8674fb226a8ca77d77441e7d8a1ab4b72d7af610048e32306857393451fd63a37963d4a4befffe6ec8e967ffed31ac115176c74a52b48db3235e7a6bb6adb19de0373fafb8c3a0bc405c844547a4d3238d6beec02980388728c7d599778cb1c20317c4ab1e81955125c6fdb55f1a2ed62981f3dc509a3a96bfbbcf265a436afb292cec00b9e0e613bf4e5bb9ff3cc7106cdf5f0591a99bc62f62f27b287ae4319b9e3e1651899aec581d25b8edb2a5baa0aebaa2b2556301c2e3c5fea8d8284aa2944356ae23b9c3365ae31af223d0bd0b158a1d7c489b2ebe67d018a4063d308436812697574c7fa22e1e46d63851fff53d59ddb7274b356c159c31e2ac2bc989ad82efd5cd590ae4c15ca661982f6aa84dae4a2b9d79fe1416b0b22c71fbfffb21ce1a312ceb4b443a28a15beb72e56b6e12cc9f502f70fe91940148fdb4b820b9eb0d701d072a0ac1079f8bdb235785c80ccbdde8747571afd188fef95ede429e63325d47b78f7d808308ba0e48aa3f8224afab0e51f4b798eeae180d0258a7f8bef0bf530262e69c2345b02cecc5e1c5e2e0d26accd6167373da5ce0a70e97ee82ae5de8f18b8d406fbc35de1490b3b8cfc71aa3f001d768e976941b55e85ca839d600af8af3ba92f0d611cccaf3fc8472ca4a61c25e41a1d7e9866514ce3d4f6acf704fd780b5ba2dfb0b9d15d6065053522c4e4cd59e43c59bfb67eda8810b9e017571e01bc5e1af94edf9fe211745fbc88610954f34793bf4bac9e75e71035cd4d7bdacad342ffc077d8a8bbc788bf192214fa5b24d69c25c8d320bd855602cb05dda431c48cb9ebe84f5c68f7149bd1ac5b485e82f3be13b3a4a60ff754996fdd171ad524ade1d1fc9e5b78349a7e8c639e63cd7221821f98abaeeb918e72323f929f235818fff941600657e4acef900478ed269702809fe452abdef87625a8a9dab1baf3707ce8431eed869bae6782fb55450845f9221b23341d68a0be1c49a879f30a7b26d1157e358182de216eeba4cdfbd12397ff17e1ba84070ea8ce7bc7eab37043cea5174f4e62eb00a87e20bd4d821fa441602c8c707038b6c8c4d56497a3ab01ba615452c3f21dc7a61dc8915e68424c980dbf9fd0528c1db097ed2b1b2409297c8e531530cf99879cb649cd7b2ef780fe4047a864ab5fc7d2a01967efc5292fa7949a030f4becb50ed03ace1e469de606b06b22a7fb5239c185d0c78ff77988ae0cafa8ca0795f48f04021fc23fb3e023c6808b04c2d1e7efb1d9a6664b78c9126efa82fb7323ba7fca464f017ac803e81b2e6e25827d56bfac6aa12d21a5655724110e1e2ef47b538b6db8569848c5c5f6db3864caa30ad3de2a342f2a9df1fed479b6ac9ba6bbccdfeef82c18b4aa40020d665cfbf178bedf8edbf6c6b0d36be89b191139a8f02e30408b1c6caa35e8c53b9478a6d724c3291f051e769c9e40f8fbb1f69989bd0a0518fd821487dd12a8ec3f424bc2939333413bf0ba9fc6f05e21fdd72ba776e2f6ceac07a0dc246035a5c3346b4249a1969c1d381358c20ca094790d70a0c24b6dd8331772258053f3eeccd985e4bb70bb95f53f115633f868c99033f90403a5e2dc1f3c38e295605c3db8bc1c187d732aa5608024f671460f47ffd5353fcf74ee30bcd04591b817d6f92336ae5be43b6c60eba5ded82e681c76045bb5b29a5af87cb88e38c18cdd1cd778d3ad3d944be95ef31aaf69bff1190a4a41eb0ad8aa8a168ec072e07842662f363da92c120729e6234907399a537d4b2e2245b72ee62ba4ac11947cfeca7b86f7bf12a5c1ffb69cd8db76b66211b1df4c776635e1b0459d9cfc0e05a4d7956519e28a4948b817e9902c8e6e9bbe6f2d11abcd05b58b7077ddea5ff8ff1c7c40294270750aa2b662f5c6bed0abac0dcb1a59daa50eca34b9eb56faf561fb78beb25955b78c622a8f5624786b168d062fc2ec2fa2420efada41dc7f5971e713273191ba9f3258ecc55de05bcc60b3f0c1b7ed3c8c13cc4b5f7de55db3a371e41013760f8ab0f965ab6964c9431ec3462745d771a0e8849ecffc0c06828b2e640ff480d5087ce62db8054c518da53d8ed709356faf34ba7d9248bb1a447d7f0b8d414c9b96fa91bd71ade184faa87533477e7196f58cf0505cf06cf9880ed6531e8633d3c4be7e9d4eefcec4187d2ccbff2226881255a8cf666fac34bbc3e6c31a3fd10e003d1f35c6378e9f75a7a6b17470cea3942356336532f34c5e1102e426daaebae80af62f6e119b8780cc85ac3e06d489e98a8b44dfc6dcb0fd8acd3ebae3176aca8c95d2bd0a601cc8304be4b230d2ab90dfaa4c1cb7c30308a5a82b5ce5b58e464660d8199e86bfca976c2387ab436908a755d1c26230a30de62632635f03a5e9dcf9a82a2a79f0f65668b114c29172ef85f07e5772b0118bb0b9fc84bb8c321394d2bb654aa450d9e1b445e013573983d01c9a5255dbeef0b9e5e23797a9c352226e8a417bb04ff3ede13a801a0f3d843a3cce3987fe9bdb563c7bd25006ca23ea2fad454a084ec2cf72075b3323ef4f08d382738592a8ba1a20320b910dc70770b89ce71226edc50ae945081b2fdf72e0634fa6db52760b7a339d49b7394a8b3a7bc1bd8096ad7924a97bed2ead7e6e457e8e29f598b44dfad925f35f13b52dcc0bc42ef1d1fe6da1550490fa075cbfac97d69360efc3f010a364bed517974d99cb1cb202636101055e8789e9d7ead57a21b179a9c225a05004c202d5df8189283c23fd2eb565e1c5387d3e8a99b95e52ae97333cba79cd3d8fd645cdb5d45efbf17246c3528d6e65753e3558b748a8bab10056a63300e53da70a1e1945304d897d90558cc548357a9772f4e0db094316bb855a52b68b66e4dce5e2650805c35523067fd78816a5590194039f5f7bbbfb307ec4decf49e0a7b3e2492d68c55ee3943d4c3015795c956629c7f0cf3081ecb2851cb6e7fce10aae97a8df020f7eb943bd3122e800b9c4179cd891a4a8234fb410c8579af4c6923f6e87f64e44b15ab3fed52c8a1d4b49a865bbee7a432ea8b7ba6e5d52c22fb2e8ef6d0fb7f5852c578a8eb9765f9fba8b3cc853aaa1e29c2fda652499f58b012d92de97d9a268b2b0e8f4663718158b526aa48dd0350d7eaf094349fb0f46f19fe1430b2dcbea9262827c9f47074b207077c6e9658d0dd497bf9f29d06001f8926340e62ee2792fceefadd1208daf3e77fcb5f2e51a42427c75bf60c4a83aaab7813ec54776930f5898feb84e1bc029db61e826d95d693cefb45a7b32386f7c71d3b3051208d695b216e5913a421c771d3fd411acd6e1185403c6d5c3a10ee253c344421919a2774dd209087f9122aabfef003ffa0728893becab0cd3629770cfe848e8c7198518ae62cf9a887961392618031e2b7ecdf419c76d8cfc1d97ac68bb5785a6890cfe3641afb3df7b56a6f2134318cb9e3fed703c84d2a8029df990a4f6852208989c77e73fd10f077178a69956cc54f60cd9d1a4978a61d208ecea3d8c83d3e8b66805cbd69e71be5022b5f2a4a54216a33da0a80bf0b40c770ac80daffe36d9e51552783a68b2006149a2b7b3403d6091bd8faf68b2090246b7dc6dc750c53cb2f8d074a1cc4a6e3331ef610909817456add133145aeb6426887a06792809819e971239c335955824801e872c7dc8b2709327cbb537d592650143402be06e5916749a4005314d7ed3c8928284297dbb6e01f5e1c1f5522da096aaa356168e239915db1ffe4bbd12cf5ffdfba6891aefbd7ebe1da0ffeb9657dd12b88e36c361b4ff473204e17ee455dab34b1a091adfcd7e02c7f8d3fc5cf9293df84acdb893f8a5712ebf9f0d3425bd45093546180c3c644689300e2ef2032f7edb0247c85ab28cfb5e84e0e2b2ad6c35aebebc7ce588e60bc9cd0adde6144447d94b419d06913a284a0b3389c06b8c17b3ecd8c3fc1157c512464693a9ab0c3b9b9c27812813118a89a9138cedde814db1661787c0845e04fb226deadd15ebcc7a6b862f4f96c7b495e51d46bb74e04a1fa11522d3504d3ddcf7dd3dd103676cfe3fc9f1ddbab118e7559d5189dd2dbf67345e4fa4e3c9e2301d111725e1f3bfaf9f8f7372fd624a06613027f955cdf010863f4895dd48a4ad38b6115c404516f6f1232e7fbd4faa7b9e52548aad45aeb41d44b8569b4dd7aca11896e48ca0157cdb417d7498fdbcaf739041be12292dba600b1947bc4dfda70cc5124f55a93da9c4570af20ee1131a776699e442ed0fac04fed5e9aecda934c2483e0d09c4f1f632d031689d9e30551041a7cdae05b6f162ac98cce1414cce682e549e3787d4faad399b58a38986e7d4bdf5bab217d6330f70bc61f24d6aec74c410835d76491faa1f9342ef37993b4b382e4c0d77cfe971f7cb39604686176ec5dc4ce9f4d0ed9feed3a7af3ce9d7da4c9be20eca167d20be4fc3a9c120c7bc80126b7ba80eed2523b6f781edfb361867e91d34634c769220b4914d41cd85f4af7d5f70e45586a06ac7d2f5df3fee7c16707e2cf7d45e5cbb8412a95cdeca9d8067a9685e4742b800809a79953a697bd4dc6546dc30acd70b58c86c56f71e1dcf5bd9d06a46b9c2917bee9b848d2f9e2f776310a503ea978c8d3304e488e90bd8d451378cf654569a041fca418aa96992fc0828d6a07024bbabe2e16a16c3de396bb00c5ab89afa96d3de8430b57f548bb4c4ede5a905e5152f48a07c13270b6d8c66cd48100614f4458b67f6b019e5964c19de568ff48f25a1e4c08f209b19e1a0f608d98f2e3c5ee3a6d3e7ecf1a32f2c7778adb7d459698e37a007a198903263ee3d83a86be71338c156a8eeaf03d2d08e5b5fd31dfa5d6ec1ed9a2897f4dc2fafe9dade479bddaf6b7eae17aa8e0dd29ee4e14449d87dae03f7ab2821ce4b7ebb8c43a359c10ad1f59a6bfa6cb85c9d59b3d69dd07a46c68e6cbf22be630ccba193529a1b0d172b006867296e093bab2f36a4425a664562c1ab4a9ad679acb0f29d9c24f3c6af250c37241736f727868febdec4401305fd3e31d212f27887a91f1964d68c842f5a89a5273650089cba0c41fab61a16e4e0649eea0daad63a3e978551113dcc14360920e51931c427b024e76c7a40c88ec6c550f6fd581940cbfc6ff5779014fa31fb38e23264a044f35a3ac8936cce401ae0e68d6492b817ebae47a67c1be54de8d06bb3145133810e2cba7393f69ec55737de21c5e3394c082d9b089149c38bc53927bc219fe4486b0cf511fe66906af64a8638b3b22349cc0ad87059a2263051960b71fca93917948b6908354569cd82899d4690980c8d81c69e9227ad83e81867658917f5a87b151884eacb1b7159968581effefd3ba3d3d14bd29dd462ff843de445e60dc8ef5744d72e32415d9b8cceb279516a57193ccb6eb62eaf59f31f8a065ce96a00f0f590ee470d5f750fdfb5cd973a67d55a270585a15ca6cf7f54cc2a12b492e70c5a7d38c9bede5e2329eb31be0c6e4ce31d200f48aa4339d0ce74ee2bba00f1be006a252ac9467f71d5cf6d4269e61440a99b9a009a1d3fb3e724b0fc8c4ca762820851eeaf106f788de2fee8b577c1ff36e8846d9e9d3775395c21098dde7eb649a83d89e2d494a39cc65505819bdc7b5f977cf43a3bb7b12f7bacd7312efe15e1fa468106fb958f8cda1e2d40bada518e18d218ff8146e44413b2da38b69c0dc55f1b688e0dc898f89ea8c4956d31fe3cfd225050f64b8b11a4e1b6f71ddefa7e471aa4ea83d46c4a94836fd21b79ee06a4fc3ec1136c1212bf97c1eecd3d887752d2da9ee61f561d5c3c83995e28bd55b0be48e250ff05c1c4639f923d4e243b02b25e3dad2002cb4642a45dadb4c8b490e6e317479af29943d3a483f6775a53c757c429617cdeeef324569172a4bcadd614b1e25fb66523be567536715f973c213180f47b8c66e2d35ffed7558ee59bf0b619d611e7b9dba46a861c465d676e90be391183d5176177641181bec9f0296149af5506857d3b968e6bb7edf75765a67c3122f2fd8cc55fcf434316ec58b0a85dc70196362bcdf5407aabc0b3c3bbc2fa2d8b416c2398ed0fe87e167c7bdc5651154e597041fd511f574a672948cb869672cd07877856af8495a515e0f606cbc20eadb8ba6c543a79661659be632f61ffa56aadf5f78937ebbf4a9db043caa93f17a24c7ae77cf1fd4bb210e98f61d58439e6cd2e2daae693e9f12660e1824f16c4ce7d386fb248096c80154149ed51d294c3bda687266c2b9a1b48895be85de79a74d389419e8d2c3d22ef4c0f2c87597a7427e590960901343b6c801f4736200d57e7d429bc41d451fd07606bc9c6872f8a6461d6747db36cd40afbb839686e91ca12af7475f6a03f70e634dc2f9fea38792ba1c54c1ac09877cc4293398511cc5dec71ae762c0e5a41042fccd8840129c2c63be98760a74b8908fb4cb1ecc81175edd15417428d36dff9b7da5f035a77f9cc86cfa10fd5faaa498c415d3fd015c49f34f1e3ea9b59903f73712dae54b770b718c44348db2a3e168c2d75cee82dac7923045674b737143dc92dcee59e4cea1e7883c8cc355ec6e8614da64a7eddbfe4120809816f63de8d5f6cad3985bca85b1c6abc0a631cd747a24e6912e2ba519888795791324451967cba632aa99b4e057b058783e2c8d1bcd59c38b8d23803eefcd4db149e6d0ff1c7936b29885d4d962ac0d5b942f768a061a38fbccbcb696ff5a70e9c12527c17b6843fc6906719959249011af23ceeaadd10e89f1e08e483f97c6c881c793890c0194b72506d447c47faa4398eede624ae50ddc06764f7c38ea16f793b55a7c58aaf38cd56c460c2c252399557aee1b66befd9d1265425c70bc2a1dfed8c4c4e6cc262380200d10177ec3baf0ad463d88c4a6731e97af0d7176c8e3cb171b893ed0f6232e09717a10f2524f70712def395fd00731f3debac37eb9f10159a5f2e91c2b35e711bc729ce997ffdeaded5900f7420153611689ec3ec5eea888ac286e1a8d00b41f342245cb5b734149cca465f4c5088cc9a0a2761cb383c98b76535531e32d9c1c23b092006652a12c13f8f0be21c4e513c42ee9824d576b4a4b9927c8f763a8eecf440bf080450740097c2abd1ede6528ca55cbd7591396ad75256b498f4bdf7e8107390371f4796cf8599a5983fe15eefa3ea683a05e529c3b1da91b748c49b48020a3a20006029826b6c9fb1acbfb4e9c1201eeeae1a8ffe4aa6aa66ecfee7816b8d233f724a7acdcbc3d09a9ee2130f7f86580ff439fbeb9f3345245bcd7b389f74c201cf57291629380edf90e8f7d541959a1a62d40c102219287c0fa0b4b22049bcf38226a2d00621a0dd2d44c1bfb9d65b9a94792f0075b09ada832922a290846aa12529769fe5191d3fce860f434ab1130ce389d340fca232cc50b7536e62ad617742e022ea38a6fa63ef1d3ef476be66edea969736395676cdf2ebb59a093d280245db26239323bed6198adf37b066bdba041ff974ce65dd6be426c7aa16ac24ceb88afee06747e122e84f7ea1aa429dfdea9668610e28ed029f091812fd82fe3915702bb5376bf7c6a5db9bb6a6ca6e35e88a62af7b381c3eae030559305a0adde71b2b067608693e0cdf94eb4876c4de987c8694b81be18c7b954e015189d129a7fc7b48c5b5cbf577ac18b3f1d0387474ed22d5273ce3589240209fc3aae7a8c284ab1088fc768960c185a5555f1f74084cf5d56b23884f8c844b892925c4d7d15428e242351f6662c07a33c57c0079cd1c4e19d65846bdb4e21d51d492ef335eeb733283f82d18f82944e3d4cf71e22dfbba16fb53b54fb5da249e686add47c5ab2885c0de161d9b5ca43a05c1fa39b53bb8416cae4a6219ecdfa35725f581a01397407b2f60f0c6eae6aadaebf00d0d8cd74d9cb07c913b8acd15235cee8d68c57e273594941ef544aabac6b5f9c8614f859ffe12d259a5447b684f682ea79a311b7e62863604b10a5efe4ba88df88af4419d133dd227d1aa49214dd02c8cbed71dca947cbd5e849c71c9ec4c0319d52b99d97ea9f2886b1cd4b4a13d6e894137e3904df09078ea8b91c22b092fa8ca560cd992dfb9f7bc2cacb6ec086b49cbc40b63e18a65d05d482d5b8a783a21e4f40911e257aef25f4a1f8c80b9a92ab91c03ca119294114762a31a8d11d911bf961d270f9a3804cf05cbca01d9bec883a05b1730b1a1a8536ba173955e7304b4acc76d5d2febab85e03fe3d1e1129fc5e17fffd15024f1ebb396eb45c69e575eb886796d8140630e49ca6e83582b1cfa5ff0c8760674aa8aeaf20610d2c1963839d8bfa326cca7d2d319be98a78ecc9b9c4c25914d472eab624148891b735dbbb14cc4b098f6f67dfc9c788467a42b13f6e07ba58ce2fae7ca132710f929fa63bf411cf84035eb6a36d110d91111b51e206c5f454dfe9baa82d6264b046c18caa4541d0cc52fe32202461bf92c3df6f4893e34d318e08d7e1d18ca89c5a0254b01046940803b6a3fff69fe7721bf6d4191d490e1763f4cdcf949886fa56c9c8f65c0764619ff0d0e7ebb3cd589ec848feaddf7e2de716641b7e6e46f2c380ae24316c87ffad1382810c86b96dd6bd939e498de79ca1d4646d97f730ae288ecfe2975d4709b587817560fef3d94a3e7ca3fc3b8f8b1a97946ce8198b530d5bf3d697c2eaa840b3956aef04c2c382b1ccb2cbd1bf23d8c8bdc178bda10cfa4fe1ab3883b903d5018608c281705307804b76c037bf8c65cda7144fccb8ff78d263078389fc43fcd81bf8e05b43b36011c194e255d7ed49101a0c762c19540e4c3f937ebafb8f3da01de2517c840815cef6b739134f6e0af7de51f4c70c3445253ef633fffd1021c2556d1eca7a7daf1eb285ce5a6e3932ecba8cd183d8c7a4c528d8aa414ced2fa488424e2f6f37b568bca6a8107e7349567865164ac734b394c5e3ea662e4ff0af8109e992a961af16ddc3cf1fc547d59dde83ca031fa4fafbddbdfb57ec5eea4b0769f8da7121258fdd844c6d8cdb6028b58ff596293e0260370ee5fdcd41a7e1e10a82f10f9fa03b849026e41a577161c4309fea2d2b522c9c7fb03f1b21afd7d8958fbecb05a8829990656bb9e491afd50fd1e9739272c8d4b765041c258897b4b22829ed78c3cce62b12e9afaa467aaed3937a429ceb9aa75f0c361a76bc873d08531abc227b81310a344845d01b2b1825eb85e470440cdd1fabbc5b3bd3113a401a79812b570943d4d36fc37e9528dbade3f39f3805853d9e4c7e289d539c7501852e85bbdfcce432f74671de3edabf1282aabc19b76d9085f664c8c4c68fb4f49b220df89c33dbcca9b596159da98cfdd093823de12b9e7bb25685d7b354c0c1643b640d15a4f249f0a47c4e3afe0915d6963bcc0b292f29873ca5ffa352610fe862d120d288ef52d5fb69af9e3fff039b9c2dedbdce0b377dfe71631df15e8630809b5a5c489b8e5fa2a66050d6376e278ba2c98082f94c9c84312ca99981cf437b0be23a4abea696817b8ad82976ff834de088dbadc310edb62d81cfb29092293d69e1f4f8204182812f55bfa2875eb6c82f5157b72f2d777dac8b18a45476ebacfd7e13b988082c880ce88ca73132c8e6d94c7a09064842bff8710bd8952490b20ee21ef4c0a29b7f586cc7a23b23c28d25a3cf090f0c5766575c31b41b442036e5349d138eb9d74f5c08f9fa6edbaba75a7bdb20141ebd58127410a1ad7da41fcb9d197dbbf2e9de60e5a91792ff8b1bc1ff28b6db297c7f70e03208157722570645199a0ff7d816ac2a5f616f3a6bd1a2543d342ed39dc1bbc91f4f19dba5c5de5325d25170acde8700a340cc3152b145a5a200d3c4270839565de0825132519defc58d4b046e1d3b8ffe1c728f48a3f118e08492a5223b34b076211780d3e389438233c35c25bd0efef75d2afa558fefd57e27351e9742f2fef27ca2118f63ec74e32c8220d9a54976176bba1a825d8805045082d68d05bc695758e9ab6fb90cad71e050f792bd331ee4aeea99d6f501d0fa6943760c6bd9192f1cb6f779ce3214b2b8f48959ed161fe88f841c5a3fa55de9d93ea51c5e93350132cf9db788a5d1301a387f351d38a0ab744e4e1424bbd559083c0cc6c630e65601fc4431d0af0d736fe2812f35e3cab4c612d40e8a8a5fd05e04531189f953b5f10794ee8f96f00120bb364e1d5dc58bee9659505b5b24d8436021069036a5a66ab637f6aba3a164938b479abeeeb8b852a383e07d764cf81f161eabc32f03b1d4d3d2510e1e4924321a5b1bfee0cbc35c00fac8da23feb95aeff30a0a2b965f972410089e4f0fc7642f +Output = 9732f8c8ba0102dc9cb6c676a43ec876e11ba02488a55f52e0f81fa028f1b257 + +Len = 85480 +Msg = 53dedd6cc78ee069ff96f7d2fa46460d13dd1bfd33f1c7834411ad45e9a898ae6c245236f85872e3081f750f1f43106dba9dc547827db509c74cb5032a6fa36b996ffba18157a5b73e5e1131d7c68609e804b7f7df2198ef6b606fea32212ee9c3050037cb5322ef8b9bf4bf899950eb865b1a95b1a6183b1a9704816986e031d02f8a803e149093d61d45419f82151b7dea15a960d5def7bb379c503865624aaa35c103426198a9072d2d40804a7d9fb3f9d1bc5474922a36895ee005885b3c375fcc484004e23b0513d44394b9328112d07655f44bdcdd73d573b839b5741061f5d3d79ec31550ba1761d24396d9c981b72bfdaa246217596303613db555cd0e3e0039c667d9f10d81fd75f5ab1d7de7f5183bdec5cfe0d27a35617850a57b288379f51eb8d825e698cfb512bea3a72ed36697f6f7c940c6633142514d0d23960c6693107db7f42da500190298164e3d993d995b82f8401b67208b327634cb4021f09b03802166caf0b72a2d011c7bfc8fc4ca752e06e7bacc2ac58291c37e0e0a3f965f87bc84a6c11d6efcc05d3553fc24b1acc3983e8bda7677a8676141e80e7a0c8b5b3055a7605a6fd59f83842a2a84d76908594b76db2d290ec0b71eb677c983f1c426e1b61495b521643370695f0dc212c6ee18641576641b646c1c608b5585f8894631bc27f6c649d81702f8e4e7fc11c502ad3bd17aae371a2943ce9346990874374c9fdfa62cb3c3d741bf01390dcccd3b10e5576092caab969ce9d6c448894ba23a4985cd6fc9ed1b36a7fd2b7bada6414b48ef51953ce05a2e979ef618e3d72e04a0609215f21d8ae79622e7d01a17bd664ee17541f67f1e02c13104937fe084b18eba1ea8951dcc5e75b692937dea5767de74f31d5e50891e50d81741c32e4b49fad999b01cb38aa32d02574d3de5b658dff2f4b1dd1d448c2adb57a918882cd5cb062ab3eea86cbca44e5c85c2d183403ba19f86dcacf6543982eb53e7b7cf5ceb89f93b73c319b3c4e2c9c374756528d9ca1d23c1c6487c6315fbc79684dbe641aa2fcf13ce3a907405c790bb9b0517a1b49510f533e20e92dbb18e8fb4f97cb5b1f4f8368f76599b007e72ff090a157ba930d6e1bb6b11ad1d332f3812d0242fe56f3c44d07618231b15f3a8881d2b4fef16fcec268c8e9c23a932fb6509e89790c926a557e1d4f39eb49b1ee0e65f05cf6e0a7d3bec8c47353c203f744bd0d5f8293bc1ec6096f3d185f1c9d90cbb85916089fec33413969b137f6b083fe3d265b80501599b650bfcad7d123b3847b77d1600d6870b2c719c58dae9e98c2974219e0bcb653949236657c75fcd110a84dbb5f76d4c1addc08230b620dfdbaaa47302d588d7e34a2358a9581958400cd2f268f62bdd08306b93c59d78b2d46f4ba20ceca1784071f31acbb7a9a46c558b0b558678017e2d5a183f1659291e7f4ff7e6d77c10f9c57cf4e66c75793eee956ea42ebc7f24db7558c6aa2b0e62e29abab51e8367b54ea42e2200e79f5ededa637e775f20a142a59d80df562747a11233a44a1d441d15540fa6fa66dd732d40320be8c9ac9e6ad02d9840423d76c3a1a9d8e2b170d82175e09be259fd25e3b122720962ebc25cdf513452581796502e667c6ea9b48f7bedea28412ac51e09147cdc6293a4b61fbb517d9ffe7f5051a0b0b6766cd6ea29a672769d40fe03a75089707cc2a121bb4a759aae9d3b4ccde1d0ae83629e903586c3ad8103707fc34f8e57de59a8ac397605b3079e1431ccd80e8e1cf3d62aa67724f472dbe23867f8d6b810be82ffa02648f23367d2a8566db17bca87445f8560dc73fa301dd69a33a8bc9b5bf7c1f842877db9623d587488039f1486b2d8d9283453a06aea0265e84b8a0696ce9a49b10a7c21f61cea2d114a228258e63daab974bcecf10f64ceff084cd9d9d1349c5d1918f48a39058af0cf2c9c65a83501fae4d5672e54a3e06127279d8bc634f82dfc78b8885a52910edae3eb16c268e5d3cbc798878367a0f4f045d91376456609fac6f85748784c51b272f6d1fa7f5e2c73b90865625a18a1aace15dba90dedd95d27395fcb20c3a2a1ff45ff1a2274ed22d43d31bb224f519fead94a263495856bc50508aaf2fdeaedb36109e8f830ff2140c15154674dea15bfaec8b76366f66dc8e3baaf95020fdfb5d1552daa9948b8241c2ff5d21b5555781bbd22426912aa585cdda0b2dafbbf2e1d4db0dfb7b12ea8d431680ac07ba73ba9913078a5c26c9bf7d946f08e94d545ce583b409322cdf673c174b844435230deada9ae22eff9bc3c1669f824c468236bdd94753484db338146e084b094a0814577558be97f9be1b3fdd171a771c2ef7c468425a3bda18a842875150b58d7536358fcb8015c9733e5f445041c8529d28afad3f8e6b7672106cefb145d7640d1c2b965dc726c38d959648f598de7e6f41c614998075875208ea23a28aed62320e90059a04599c5fb97b67517017f417cbae3aeaa0d8a12b0a50bf9fa0760c86b6097a0ac81c985c32850c0e781358192ece8c9d9013487f9d17102326ffc76d8b0e402a72ee6c157939c387014f1f0603bd863caea3e1d229d3c1b77ef92778f6051473955d7c2df6000a45bc29bd40b2e1b4428d08f19538ed50d718e0a11b9f844360bfd84cd8418e6cd4f931b76be4e193499bc11c6b62ea29fc9544c8d7e002798c52ed52d6d42b57cf590591e9f213bfbc5b4ab6b70040c9b27494033050161350ff0b228c466d577f5c03e14d631e76056c3454fac987cc73276cf4a77835ad58f4c0308ae0cae86f62cb09f8c06862df1eec8bb907358ed93e2df1cfb0c7a40f049b01355bda873a0da9808e9268128403f1af7441c09d3f29559efba26293dd8f0a192e1002b059cd4df98141b3e1aebbd244bf11bf842f598260cdc58cf96f048bfcc7a5e9f0392226b94366d27ca9a70ceffbff98c0147f22cbb882ad411df59f00b465e6c3629ca264776a2a302f461015ad53d2cda8eab5543e625a0774d2b1d957088fa660ad6f7f8fd441988a197a3a55c6f429373cc88ee1fd09b8fe4c72fb41e64b15add4dc5eef2dbf3254a1a9d297b1835f59d5cad025bb42e2349340cad797bfadc49387a727eed98a197f3d82b5bbf6dc8b563abc8c157bff9277a9ecba8543bb2f69efdccc90470c42f293bf623ec52d462ea6c887a43b8db24a2cb55d377dda58d873644faa7e356bbc4add1fc274ce04df7d78aad007f8fe8b27d92246d497db6fc0d223a5f591ee2cd18030ef9c3b61d95d41583147edd1cb59bcbc1bde60218036aadb0b23ae54d4b63d580e91f1c7bc94b7224091b8f68b00d49d2ef1bfc5ca7352e852aee73a346768f7b80c8db0f9d24eab767c06b73adbb51808c523229ed56ede04fdd908dc73979264426bb801847c365b4d43be6b38d2ef21bf26d28dfb532eaa87004b3d494daaabfa18377429d45557abfc568cb6b265224637501843b45cabd0d96bc786ffc2e79a2fd9b240cbab040e8d2a2fc3d83c52f0c125be4ce6da9161e1051b8b225dbf98fef95c57d689d8fb9293c4eeb8b75c5570cde0857f4af3c0938199e459ed9c7d2220c2ed99845ee9994ddc95d878a6dab2a33f7bf2003b638d7bd3110af4f6bd15ea9650693cfe5f0d92d767bbe2cb0703502b9ec3ace0c11b4e479fb9f656df66a1474ee9e64fc27c1d65c2e7a81150ff6f257c88937c7fe99377fefb84556a810f46277042cbca4147d835c01b424ee32acd83a57676e654c5d4ad24014ae4e16f1388b0b4eacd09acdf4ee9deb6576b4d84429ea8689b096ffe28e80fdfb5245b4fd11fdf355131a6bb6cd934e610f431da47f8cbba0463fc55009c026c71b65e5b9f120423dd65e02d1df2e079f22a623ff23822e3c8f0f569b2d48b799113e2c7513bd64ee7f2c384e0eb53ba715a6935dfd1708e4f3ce5bcbe05fd9fa9c972f385f1b80f0784db534416f1502520b15c6f5927121da437be90c4eb371243a990abd84bfc92789228b60a5ba373f9d5043f33a907aac375ffc985e6f8611ed10f3153e4903f6a7275c52a055ce4623eddbdf598e77d172af0c6cd432c1cb793cfc4f9245254c716bae01a50c50ce679397a13592a0b2bc122270fb27abbaa6c72c53c8dbb890ad978954ff07443e2feb7d2116c57eb5dd30448c1a73cb473b568c092835432c2452f533f46f3200449d9848464f98439cb27da87841a9d802942259fa784e879e45fb86ce6ca27b6e50edfc0c5776c5c240d2ac5eb7ced7c126f82c85cf6209e318a235d3251d1774ac8626af05a1a117814d8014fdc1aa41b716681260061aba72f3294cc32a3c205b6aaf7882a041631ef50ce23c0abb4aed82f7e953c222ecfbf448806d52523802a17daff6fb0b6ebed239109c3270a47046bf52d11e89425caf7bb94c1cc1854c347a9c893b69000aedede544c03316e96aaa9502a3b7813d2cab3d8810f2cfde2a8c8661e7c2e0aa4d11aa5d3c6b6900f49ff90dd815744572be5648b64bde638b9db7a9877dd745fa8ea80e2f7f655cee85c71a4509e21d899e49b4973579815f947587a404ad83fd4a248020d9d2a65f46485373fc926d793161f63a196ae0af590923c5be2a0e5d2f69da97e0788550c9c1dee9574ddc4a61e533275d772982d4bba67213158b2224be451cfc1fa2c8f67de32f80db1205141c96e76b6904e1edd238336b38a555106ae938958ea4cfb5c38bcee104b8b2344f4401a90718d38c9800912e5902fdddb6ed72138e346deedafd4de0907657a8c768fd811b0e6099532713c4414a2272ea7a53dfe7faab890b6234e746f3fe58c928645a6b8d90fc4cd44296b826ccb74eb7625f619d906e9ee20c5defd8ae2ca0acbd9bc13e6c9dcb30a40a863e049429cd27fcc3c62586dba45caa53cc700c931d90aee3c9fb641763c3897239d1f1c5e32a1ed71c71b709d1ac353a784be0e9a366fa99d5463a7a94277c45bf3cb66822f42e63487cea729085686c834790eb65c5e7ad0a53053aec5649c77a4ccb5bb20c9230f14e085c0a6daab0966c04e18c38dde5122cafa092da5ac00f0918e6bafab406c0f0f71067ee64d059c325133f44440b92d91ef4ae3b15f8297b86506247fbad5d69a1d6ce90fc927353d9c8a77384e535603c7e6affe4376eabfbe3d47aceec6fc1ecf567dadbbf8d240949ec4c053ca0cbef85ecb02e4486a060e5351b978c9e00c2b75b54691f4e3f9edf355730d77e2221535cd55ae81a629e9fb0b2bd56942f0a62d2860e795fab7ed0aa1d6b80756bb92ee3f7d2ebd2fa9b596ac8a80ff656ac3ff3f933966770936475251ffd2db09f5fa99dfd15556f415b8ee4bf826f7b8f96e7343e3f0f97c3e5bbf7b51750f8bb2ed54f432d4cc977ec428f6c76a5a89dafd6bf993aff27f899a71c9396834cf5e28f960cfd5e112455ae5017b240e4bdd1e723aa4fde2819ca5e1b234270b335c501f8c04b344e32dffcaf26ffe938d74642e7db4855a30ebe0b7ccce3bf35631d50ffc7e0758888cf5134022548aad454109393ec0b9ebfbdd4c8f54018da6733a7338a84cac70e70d86813ec04459a4479b03902a9241411e186082221ab294f2c1b6ffedb14ac09b6d2c11cc50e125ea4c53753d63af5015b3e6c5185af91b9073fdf184f764ae116fb757c350f24e9ba5af4a73bea4ad46a798995eaee88b861274398cff6d0411e6995d5fa4fb92fe2f7d8c57f3bfbd335bdc7b6f971f495625c0147029b2671f6a68befbcd6b77645254b774b36f046e5958e7b593fbf99316583ed916d35b9c73abd9224ad08070a6bb58347e11175a18646adb260cf09f7ca2f522374e361b9ab9586d9db922a5a527eb21a4647a7921a5714aedd0e30db146f3d61b919b0f383799284683f265d610ecc6d6d7825e0d82978f3bd625506caaa78f243c0ef9e49d380cd5df5453a20ce99e75c8d38b24824a12908b5bf9f7447c9801abe67e1860a165bc19ecd1a1724e1311d6f2630f3b157f9c7eeb7cf9ab0f9b047fd5de5c1861dd79c210724cf796bf2b80437846036610b01f585bec54cd02cd1631cd182af5ce8f6663b81cf3600d33336b5d3171d8806beb271937c83159cc0daebce52ed9d37d855b1589fc1687c98ece648a1cc9492060dc37748bd92a71d491104b7a8a66c49d6b0d2c8846b94ef0e140885ad4d58e2eec291b0620df6ef97d79a3b48402e52d18117d1e5d0c43e83853e4b267a00593db70a3cda4f313eae85b966353325fa2e6d4e424e61b38f3581107ca1e53274e2ea09748e20ff12756388bfd747fa49d5baa0a426e409e90b52a69f8554953ac5a3b7e1e4470874d4b830ce97445547aeb0347dd5227055ed3f293c3a90d1b3ce2a3b0a458ef56bb3ced81bdbf1ddfda2993358c3e38ed9c38fc1dc28618fe7e6c6be771abb6e00faeba92f0c173b7297bbc4ba58ef0b80758b9506b78e77dff3c168b1c9971a3a9158cb91937e17ae7660102dfc0d904fec7bce424fe130a2de61603fbceaa221615d65c9d6ee17ba28ce3e381707c5500ea793185820633890efcfa9597cadbd50419f603f2fe69d944d776411a3518ac4560d113a14b7aaf0b2dc780a14e417474ea2dd35082a5fa127e33752aadd05f7d164b45d85d5ffe5f4b033367cef362fca96c81f438c0939a2a93b42e310ca8d61bf89293b643f59fb7262447a7522eefea3aa67a6b3a24308f2f8491893e0704c461907fd0d7233114b8e9ed71ee46e32ef0974fa4832a69fe5f5d00f0d4f86da23eb5d9478a15b7c633eab5a948395aea570ae06f2c24cb0abba3d912720b9557b8894c94cd4b884e1fad3cd7c074db9eb647d945a581c826bcffa66895aef037976156231113473ee4a7ef681797d9ce96f496a27fffe5f4ebd6d56da05122e423f4727d162b68fb1b7149f49e00da0c9187a5102bcda8d7c0b0029c22a091c016a91e2d1ce272253c8fd8e7c44e40ab0e77811939998551c411aa6ebcfbc15dc805d59dc5d6d72fb06a28cc3adec25c865ac72819d21ff56e72297faff1363fb081255981871c8d2f76960c6240c3839197c3c75d05bd3548682c29abff64d878a179ead061b6b0025bbd42cb02c8a2b8c5136163b2f193ba5a1ef71194d1aa88fd6fcc43054a5ac1801ae9d5a3464c544942a0de5851836cde7e827140013859eb637859c02bcfe56a1b7c3290d0e2fcbabde01d746196a85bc7465b8f780473f1f1697540ef91f6905b743259dd092a9001a9b1758640255885ad30e1ba915fa7963a36061a437d99376c856cdf21664f9a883afa54124c5b363181d52d518582de450c6e2056d2cb5bbf8c586bbe286004f60a614f8f95ea557dcee854d78e0a16247907863eaecd24f7b79ae751f977cd6da058cd0a8a7c7fec9879d5a5c1b3ea42fc60d08d6a051fbfa7a2e66f41dd5069ad3f71259297f1f85f28042ec8f6c74b16e883a58d19c851dd1efd68aa272a748183c07366a3684b837184d52c694987592d04298061ab58b85d80f08adbd818cdd43f464f455f30b5c4bc5b3481cd92239cf68bfc73355ed9ed05897c71d5b0c29f4240e4f4235256b03f03a9b6eff606c6cf3f59d4f2bea25c1f85f76fafe730437de5a016712b06b27180c49f0d2d9328f2d610ed6012b2192388745bd336776f46970942b5151659f8354da0c1a3293205c2ca4309d579a2b6038b9ccc09088130e7990f5bcb260537938d4299e169708c97de7c6c7179874b8995c906d98417c159d7b2f197b642b44e0c1ae272b472dbc7d5efe4913245587d3b5710424aa17c603df4031547a0f2b7528057d19aa787c549141eaf245b6170d4cd84bdfc9cd68d44390cce3a8e7751f92956889c8d1532908f8715d047fae70aa2b0c6ea88445373087b2d3f89b6b0586c6b023aa2187244c89a7fb6798952456d30d7c4f25a3552d8daaca721355508c001c8e574e616fe45e547579e91450d83917afc499cb56c20a7d701d377b272cab7573d742292f58dd40723f5a721cb9c4f1af11c605617766f36f01f024b3ef2f837933e3278f3170329bc3d4f9b180db65253e96999ed509d46c2624991c5cf50e49721ba3b5f67ef3980c3def37b5e839b951f0ce36635be81295bc2389fc63de8a9cd1e4c92f6f4c10227f9dd5e152361254bbed51a9c5f70655a1082255e2bae5baed33f464aa02ab0e804bb48b8124d94ee13e1630adc8f36eb99011f1db6c02d356d85d1e99e012d72a41fc3bddcbb5484909ae7f7c247fe9ee057b58b4ba88eff61b2ee4a3aded8563c6d479cef24f49db96411f9bd352cd27ad8b10d76d2016b4438c3f3030e321152364cebc634e597f2cf696709d15224cd266a3aa4d7151789aa1b6a8329db127a1d5c10fe45b801d15f56e654a70f044ba3799972124a72a6695d1747bc34081864fdb2f3e1ec79d97672ee1a10a40f9ad247804b3e021b3f09018fad3fcd30b1af9a284393e35e7fb745f4c6b8c1952f555ca5bc94ec6f980b914a302f074ada7fca0779c64d3e48943880d709d8437d9f316032c159ee55e384cd7cf482a4f73805d6e3137a87a88fd318e78e68890a026e564a4deb15fd13648ff04acfed9c7ac60d2be60bc9242c9e3364b0f2d459315bee6f851085022db918167c3f633eba8310c0c861715fdd0246db0bf7b3ffae929f1f215aa9e9a4eaec7c1361d45279d5882e352c2e902397f9b719e7b641dc9aeed58d39f337fb82737d9ac78f8c3b35d9e0a6cc4f8992d79285455349d43ded642f332f0f51940853b79ce11320611c9c74b7b252809d49c7d228caed3b55028588bdba4ceb20f4f3a6744efdc3ae024646c27ed639c556f00a2eaf2ecbc462d98e875c3a5904c0d9c6cb51adfa547f4df361a259098d97a1a9e1807d29ee86b68d1a95661fc2048c850ca9b218f6fc39f71f9d59746874633dcbef56ba35f6c310f1f63ec3eb38628db2a798c427f180ce56f0360ee885ab42683c5a115d3b85c6b7ef52d9e2c5223d57dbc0705a07c8e5922b9d2d8033e03420f7e5a3a6bd54faa6f110c64b33121056d6d791ffa768d97bafed74b217b8af80b28805c504d749799c171d772ad8a34a092ccd9b48e7165e0db56910a98b0121fccfac1aaa832f9a50c44408e4dc72abe36e77bf74ca28c3c5638f0e51ddc56f271b0b1a06cf0973afb6de732993eaf705eb24dea3989d4757a63b1da93788e2d1f8a765a23183a0194d514841a588b5e141596b6dc8c04334cc01b1381eb8077de7057015411aaa1e1620fac577d852f5ff8a082bd14e620d63778b56f9df579b74a9bbd8843afc3eafd1fd3d916678b4843b177658a40e21fb10eebe5f6b4dbb1008bb54616110fb68f8e212689f71cd5de12bd5b54db212f1427db6c5e8744d57a6f1216f2972c4dfea2bdc840fe8710b10b7b27dc7f860f4a09ad8b3d345c2aa18ffb803f0bc3b734a4d047a1437701a5e3d95288f3b8c639fc8acbfb84ccb85b32990d65337bfc17db8129169092afa0e40063c201605ccb4a9ab3003f3c8791a11444ccd7fd259191f9f806ab80228b5418e2f16f26dae63904cbb42d53a02c2593aedcc1f13a890c5f3bd95dea624f7c48587c06b1477413f19b8015ba0a12043ed1feb8fd41e696dc7bf66e7878d2a4b94ccd8eaaab5c1e88accac119cd2d863e379883cc449275983fc7a6d16bfe1493464bcfb80e86a3f285fbf717f263f5bb6814eb044a74f1ba0fb3cd9e43ba13fdce5e918479dae956ae7c805c7f9e97dcebd8b84e5c74546b7322aa8608edea1f6d6e9bb6f3403addb0b424917fc5b6ca474eb251817ae4d2f47c0632c381e222aae3b6f585a0dcae120aaa5ef7c098ad07dca0b6c16eeb18192aa9497c5d412e0e26aae936e218f35ce8dc6af17785acb0ec4c242438af646b925b7439694f6a209d3f3b0eee36d117b5805e74d2c7efcce57c44b3c179df711de45b048d56ff68b13c9315ac7e72cad85fe189b9a59fe22ff9be75ef90b0b3330ba5e4b19c156eca6b98540538fefdbb419c371466e47b328b3973ab3e01b93d99fbe2bd6ad2bb5192f3d2dfab9c38c5ee3686cb53e51e55f95db3dec9f70ca1570404990861d6ac7a4c97242075045e2d587ec6b4cb53030dd33f6e7abc33c90a69542ebee84745eb49acbadfb1e8eec7aa28edd1bda3a18d431f459978b61b7dd1da62d4909783ad95188b30776ddd85d38b29f1e49498425459496e521e0177e59d1e91804dcd87d6e37d5bef19942d7caf605d68b050f4aff7644073f1e2bf4da54b3fe1f18d42b5167aa7437779874c9d7b5e707f316bfc007d5903ba261eb0facf24da0b2aa6d9b8695e980cf55dec5c633a2488a46ee27d7bff29fe345cb6a5948894240c7bebd131c61962717503f4fe39ad530fc70975487b0d47764108ad80b536c39b89926abc27eb0053983a6e36a53368db3c1af0cb15d81c53944e1a7df2e9713f987789f1cb396e048e39d1f2c4dd507196bdf7ec14b206331f2ff47286d5b5606f4139b8f92935ed1fa7251ae0d492379c999093c2c28c7ea8544446ba211766d7997ff9f8e3dc75132d73953f40b6971857c6a86531369df86512e3d6f61fb99827659c1190eb033172c24d294844f8d09e9e1346268cf6d7096430227b56c17a92f28a8c58ea01421f1a29e814c5c28e1722bcadca17f20de84415e5d943e645832ea9b16262d60edb8311c3cdc15c186a598ce1455ef961abb97a69376f91c0a122e2c7d7dbea5d4f06ed019bbe30363e4b692cbee9749cfacb47f4be6028b495d51e18dedba5f722aaa5eba546a5b23b013cd45d41c9867c8364cf95a015e9064f43eaa0ec6fa4fd7822c914e023530a82ee224ced62e7dae8ba42e6b7be279d993a864595b02b88764ae30f1512e053d6655eb075a587bc032f94d62b8d3602baec34f45fd0556aae0680bf6bdb22bd068bd0b462fc2ec8daac0f8f86e8dddcba403cd5d037ea4c283fe94c6ce4e1f11947c07d3bcea3a9781af9394f39e5d3a21de511724db2d5ebdb67dda096e497178075368883af05e25f9bfb0fe71790796d78d0cd7b74aeffc4409a8e59f55609203805d2831a8522653dfe4d5a39bb47173d396727fa7e6ce0bcacbe96dad6f60e51129f35acd03e12276a91fa13fc15037c75cabb0aee3a19253bb8b35cc0e63208867a032c8f4150a066642f6ff9ea197dab7e9d6da67255c16e051a43bce174a489e85464693006f11a4c61135dce4187040937eb4d1c7eda6e2c315771f0bc6f4273911a07151c63afd3f8c8cec963e4a8f5ef4b8b3e7bb663b56260881af2afdaa2201710f7793c4d815c56f4e467dabeca2f570ae2349d74291425a868fead79fd6a232ddf07c41bddf585792635b26f0e5ed56f0f91d9c90eae6f7ae0c8b1450dd70506d4ad45426f2c1d0298b5b4e24be38e65ce7ab18bef9a06a68d39036959d08742de5305eabf67e53a40d0274008284a9226d76ce2513fb2d37437ea0b6abb6f8905e14d39560fa6c6286c55b0ce94d09e1f9053f5be053ba99fabb054c60186855240655abb8d28515872845b248fea32c18daeedbd5468d2157e9b6bf70b94dccc56957376473381d6cbfd6892815ef615b7c5f1d79402f3de96f478854061367c0c25ad10a78ffeac5d0800a0d2f59122f4df2a922dd1b703dd02a5f607b43c684b5c2f10140371e212ec4bd7eb77acf02d45c079889dc38b3a0f18d4ca57959af98422fef659827ed1f370be32acee884b40da110b2ec27e9461f9a6f010ea1affe3ad63b457d88a816398de105c00f13416a0e41f4c5ae4d54171f5e1a8e3ee46c1f9c5b8c61c0d0c85eabdee4e8933d20f3b792dbe33c6e4f7a84804e72720b5682daf696df51059a18fe5324b32570b75d3589b4df62ba9cbc527c3945fb8331f72a62f160c9a50ffaede461ba364c98e8f0ad2c14b1c0c05f01a857932bcaa2df034728708b3d9e6702e90868362f3a498163be2d9a0f5ec53aab35c493601dbcee09a899363dca0fd5f7a547a5a71fd16043d7749bf4cc9135eb3064b2d207135320fe452b341737cf96a4c32532be1305d3f4a4281f9e45bbfee3fe1aaef374cb33a60efaaf0a81582ca375055089a0ea7ab216defe4855154ccceb3b455743cea81c51251d286f28401dd7f68f36fd96de8c57210f6f41da5b67d68533d722c604dda62aecd57388677066595d1a7b9345efef8ed1578e83a1212a98f8c77459b076888ccca611211947aaae38b8bd5867593a78c2a5bda9c49561d712bccae2515372bb0b2eea6acc000f75b096356ea954e29f71ee31a52c4116d0002b99086e10ff4646b441cdf6362f403337763e926f52336d759d1e4ea0b4045f9851344d1b88befdfab9d32e56648e5f10e250a9051404f3f0526db220b3f46f97a5ee94ff99759f46d512eaed59b092c71c4d53b2a254c3d2e42bdd6db120de8de9afdc29cc1aa94d15f5a26769775cae967d290487d34b81d4c156d4160a2b0faee069267b0eba61eef3eb613e233b5bc368af572ee109a1b6d684f06d10b3716838e26230c24129d2b63c472244bd3325a84d37220e7ca6ecd40e3f20e52677a811ce8987f5bc0963950ba5c06c30e95fb48930ebdc1305e932493ccbf7f266d0f393f8daf9a9850418dfe992fa54d2b405f9b0f6aa7b435e89dc75e8c985e38556b93cb44e881156ca3faf149f9783e5250553cd19f3e39f332e56e1ba7f6247c3d4d1be74e662be119142cf9c5761459a3275f9ab4b6b4dd6b56c517b3d677ac34d34340d22cdbc977b611e91331f57ce17b3e6deb04eccdd0822b26c5e6790cda8e0bf67fbc6d4c46476ac1ea902be391b8a3f04e102aecead167f0e40e74c5b6e63db25afe29910d2ffd28537bfdb73b4654cee4c2b56140ac431e1836aefe50449f1b6dda57c154d593c754dab220678d19adb503d7555a798558694670e0310efbdabf393e03a4a3f346f89593459ef5bc36cab9d6f0c1a1f645e0260293e0ae1796580127808300e74c4495e84f67e603102acefb59fc8d5e8e84beac3ee58abbf8411c5a607c54358142c0f9654bc8b8e3dd288eb993a485db5ef6b60ac90cb1a781701fca1408a68ff9ff0db0d103a159ecb1d7370f4d32d374b7671e139ac04c20e7bee6d582021b713b6d5881ff87185e4f1dfcf7f22f1ed0e709a34b9eaf8f27687edd462b11d0b35a6284e32431c83becaa30d3fa42657a70e2c0fa7f47179ddaa9d7ef6b9a53c646325c80db69128c6fc4f92ccd345078383b9ea7a5508d8a2785fb59ab674fb2e52509df8af59e58c0b48288d3cc86d4295b64da789298f6365b720b513e6a802185b3889b9e13a7c7c2f17274d4b0962a8c3b1b60d4e1eaef72648dc7e84c37e0988104742c19816c356f6f181275c422144bf3c5e0106d3a14f868732d9edf0ca89cda7f675aef9757230927507e68fb3cbbe90f7ccc88ff875623bfd408818cfb2c9222177bf8306e36c7095472899c4cb486a671bd422614a74612a7312348d958b5c70327a51fc3cf3126e6fa30ed8c5d50f2868ca39703135ad36cc2d0288c48cad5f404fd4c9e17d0e6d0be64d643dfd15c85e1b33b9cc1e66cec628d145b2559b4b2ba089f46362bb2d9652d3fbb61914a34637bf827da7244efba64f48d17eacb05f2ce010553cbf0c89893103a0c17255dbb02b7eb8586c33d725cb06b450684b55458582196360a66fe9f310907eb56c691506131ebab519d317d303dd834468987ad8ee328f6667b40588a707b9543388c6edc41336856d89fd05d4bf7fd7a4a34d5899331936ecf05c704b6909d567a5463126386463ab6655c1ddccbe886c002d93379d8938829f6f285256d8cf6569237e9df0ccc65ff2b2a59397c7dd3b39ac072dd46801e52bae3f6033bea8a92eef34bfcec82407b9840faab3144c9eba3923006a3e19713faa24099213d7cf70f9e1f034ff031f255a8e67812c6d02fc657543d163f5b325e35492f480f334d9e404d3c5c9fa12b0a6a07e8488a5149ab18c6cac721d2778da6fb0dd8e7175c42e2bcef3c16f9ef5e8c4345fb18b2fff9dd6ef5df0f64ac30fd3d7af84e90eba48a566416dd9f06f91884d552f95d1a58ac340686917997ee40f6c0d0cb06c46b4302e3137dfd388415b1e276b4b862728f0044e33079027079102589e6e1ad4012a8b35b7d794da78cb2b28fd12d9eec8dbaf81f73ccb35eaf72f24b27896fcb01311d15657d0c09846f8dc4d9239871ae4a6a61e3da725feb046e3d1767d2b31783696abe703e5305cfbd3d530216a7fb98e2d2060b091b34aee3883de19da15c87df810ebaab2c18bd8923c731e1367b8ca89a67c83e3b9258975321609a3cd925c683e0c31b3dc31e389ebd1ac1c7370f03e08b77db670dead3c74c4d8f2d95466897b9f2562e10db13d5be247d0235073dccfc82a646ae4cdf0c450e451b98d00be623b123a607dc62f151b7df8e7f5e9c88414f68817c670349940d84afebadf897a5684c4daf096d19ff3bad141dfa6939e248e8bf7f2187a7c2b0139195c377d3c87d97cc104a7b764f18b03b15c5eb0a67d3f0a9c063b24d5661bc689efccfc21259cdcb3288d530c9b7b0ac71a56c21595a46e74616ce63d88745dc0f3e4a8b0d64b6f11ea9c46ef57e750e398432a64044b3201a202113d1897797ef732e57410619e7db978e585cd6c60a734986c2a2f9fffc426bf483c8d11a3e4682c44d35a8bf5571387b1785286c4829dcb09c09e1f225c8dd8edb45c6f67c1d53549671b071e1e976d5d3f8da306f6225f85efc645440b3603944d0d0d2f67bce26597d88f5364a38e2b33e56d827270ba62d04eaecf80cdb3be6f257785768db81bfe29613fa9c65ece0de022c1a7f790134a8db83f2da35dde832c3ae45ec62aff0274495d6e7e739826048f6ee72545298709fe1d925586772197d3d68104bf613d4f9417134a511c04d8ffc4b0885e184e49ece53f62b21ae2eebed6adb7e9f50711ce1748a87bec22c3e07da4af4f61e8d401208549652c2f97685f056e3f1d087173b86f27587b185bfdf423f89d98ef2ee74a2478144d60286cfa5876336bb9d51 +Output = fa5ea3ade641e605b90d8a2641acb1b3de5898766c3539d17e25fb66b24f78f4 + +Len = 86576 +Msg = 2df327a6c3d0f068695a1bc7e94363246e19eea0ea1bcf8cb54acf2277c36d72474b239e142ceb4a4440024f9c4becaf608db8cebb9885df6060459c7291c13aa225de9c97351ec7920f6996528a0eae359605b5a11777bfa2f47f09d46a33ea84a7de06129490c599f2d904d2a8d10a365b5bbd6340ab15c12e06d265f8c96a36f9ad464ef0492da30fd901e64e3da9ab05454ecbba2bca0637615dede08da20044d3c213f252e8f68ef1f554245b74dcbb48d09f2effc4b937181434cd877b29b0d6e42842b2ddda98a948e5d1325310a6eeaba8432ded2255b45e0165bedbfb644013578771f399558a6261feca2f91eebe47aea2bf2c89babca21e503aacbc8998b6666998147aec1bab90522ceea5ba400d79f2bc68358eb84a513703d4b54667371e922e27c485e48c3a765f7a9532fd63d0dc2d8b6ff831bd63c2223d2ec434fd47a73b13c04a6e6b26116bb9a9807cb27c08197c7f20ae631c989ecd6e2a8770a953c8c2b66140b11dcc599528c94563461d8823ad2fb7a443627f6ebfa1e8f80b3cdb1bedf2e3c7e74f30f55c38e1dcf3c48368414dd4e8a2c7cd076751e0fd370a7f06af26dd134c41f8c08bf2d7874ea4103382a18e97ff70917faf61f6e7f366b96b4224b8ff144abae0fe22afcb1e663a6cb9546c192304d3c0dffab31e08f89332ef15fbf206137d3cfdeef20f2ab106fb2e8df7d6d62c99b13f439e0a3e671444fe212f54eb4449bccf7e27bd3b2e7ec82975b537df90ed3a17653f145c5b4487b76fdb8c8b852648befbd63c1984a9bcf23430a208d7d643ae871ea22c7e2ce462288704ae7c1dc8108d88f48c5c8fbdd0f1f08017aa5db44dd2c41e7475d3434673bc231cd435240e5bc34d5c5e39b40dd57b3ad5b088753c6eb8eefdeb428dac7900519c337744008e12af5031ae8aef075b360a92616fc382827c8f867fa8dc62def6f842e9112e4dfa82327ef625bfaf18de7ef7f0882a36ab2ef2ee947e1e55db7af6a89571dfc1052ec8ec1a6fc4f73899f8883ca9b8b3ba6eedcc88f6ba7a81465f0d834d5d12ba1bdb24214f480545ce42ed4dbbb62137a349c864f7f7fa57c0fa1bba8eee67a1b132cd13ac9101c7e722cd2ba46ca8aa34ce892f6b1ffde5519178421adbe843599790f970e814444b61d0df4e226e9c8b44b8f13978aab461eacc23db6cbf2779d015da8295664662c79f709f209e950f73fcb3494b2a4b59cfc065b8e811d67ba603becae01e54941be2e681ad5e1b2823fe7c83dfa5329f06fb11989909d6c5e103ad301164f749274049db13d6b83e1b6654cf7e42f29d57262f65c5ccb1c149bcb09c6f62b5e9b162a2949830f3b924db43156e2912ba8ce9c506b585eed5a5d7cef6433d19dc82f0f896859154020605523df8831a5d6bebdd63b15a166bbffb1026d520a88a629154c82223647f898d882f647893f0bed57e640073b0ea5dd17c146d31ec5c18edbd12b60eaa99741beed3fa2f04da4b4eb1f1ecf944ba48001da953986cb86ead3b5c8b7aafb891568a1102d1f583dbff7df2bb145b434831f8cbce7eb0072a79d68ee78ef945a6e766d2c385ee533590ea4fb6eb7cec250c1763280b41b215f89791137212a67c758afc867478b223a800f025a72f1fa638815aa766a61ff7d3854b574f8245dba9fc7993c51a086befc8bd506ffc44945e3e9694b867b898b2a9a5fa4dcf898b2bc62f32a15dbdd60f499f7e6c6cc1b725570137280de4bf3b0987469383d953a2f008ab30c8392cad8b7cf9c606ffd736d382d7df1f0a3619afda814a259ffcb780eb4599e3e43574973e07a45266bc38ba00bd042594c3f2a384f4993e424f1180bf49053627b80974cbf12ed95f2dd4146532c0a7e92f6feb6fe7a9552a1159f76eff9b4a687f172a0dff8e2250f4b2ea987c3b2e7141379181a1a1f2bf0d36eedfaf84a6105044c2ea78e9b6a2d7794381e39c4194c3f39da46caa9e680a516cfaa1e7d288f438434ca66a1bbe9fd22808b10c69ba7b4a15bf8eecdf90cf5179a71ded5737339cb51acf36db0a1464a0152cb22d4b33e503ba508e409c25df1dce6abebc84d418213c3c787ef0fdd8b3909eb715afb16b6e7dfab946f5d4a36157d18189d9a1538e9935568ad723d569614d42a94ebe855fefd4947b03a4444c2a9a5f479d60f6041b01f889274f04cb70827c729121dbddfa2648662e5d6be7300d7f7d37daa88ba9ea870247470ce0a5848cf7dea414f08537fc8fdfc6bf394f710ab311d7122c2b362b7ea1d397b1e99d9bc09e0dd8a07950d97f7ca8e94a70102771921fdcee8a2e0b849cbd4a442213d1563a25d1f6bcb907bd6fcb90227c30ff402279addaac1a509ca0cccfa33a2f554018b4a5f937baadd11ef75dca591ab9a729ae2df67a42214e15c7ced617395006a282fcb2d29bf344f3f4f749f1167e2f0f87054cdceda7236477eee3a379e9313f567f2776a3029d548908a72a6b765e3dc9dde4bb650aa2f3a4d8d4c436494856f9d562091b0264ab8035ecee63c8bf193f5cc4fdf071542b1534b164ba97d35134a76b744b1b225f9f282124449dd70cb02bf68cd704bf7494a9806a4bfc5b97cd9d48a07b735dd8af894eb4571c307fe3f2824e62ed6d37e7df4bbe32a067908c5e0374f335a07e77ff7985e46e51d8a1586e2dd851e6dad77f1948b7aa7fa43b93a4d7fa8770b9c133ac8133bac281b205c410835bb0c72c31f3f021432b3ba0e331b3da9157f153cdee8f8b290ce0dea28cdea9305564ae9ce09eba92f4bd85f7b4efd97cdc8ef674489736e3b65fedd7cc8193fb5d1b2569e83ac8c06192b0763473407088f872d0c0827a0f4864a64b8ee089e24e53583f13ac94f4fb22e909ba275794e1978f8a6136a0d54a59d2a7d9e3d20db27310c76adc665748d6fa584df3651171d4154a309cef5e45a53992b672b8a510e515a9f4b28611d214aa0af5bfb40fc015cbb7379cb1d2c1b0a3b52b7581d2f1102f8cb9173b492145c0c8ba738ab554c37a7a7d1f2c5944e2d8b743d476bbdc5c2618c2f1ce27bbd20539a5f7302bb747ea3b0a0baa1958a39f420377df895931c1f6162a87d42a214106bd33ee9a7107e3a1e74a713d845bc2fb75470463f0f7c9cebda8ae78f69c3bd60b0f0b2a086d2d541bc2c9eb5172078ca02a2c722a160747c0558b3aa5aabd529574d10206e08ffdae5dfc4b4550379d8c09a1de8ef6400a26176643c1b28d226548864bf3c7d344a9015187ea5d1ad542cda9cea5003fbff7d886bbd21e74ed8375732c558cbfd013980fc4c80277ddc95c8d6af59acb0d3c7f34c95e553a5bf5e1e0ceb6961c4af4097f2d65a5175c29a095dc082dab9cfcf4b895efbfa715c57614589d4db159543ce9e74bb0c3fb6b8008496622a8153f1f5a480cc483c3fb1a59f3931948a63c19951d0289416296e330dc95df8a200de8620a3ecc950d9db7f5c71f62a7d8b388caf5109a5938b2b353ba1fce19646f3717020b3fa699b53431fbc9909798c271d197ff49d526c8d7ba0e8c561c8a6cf4c259fe857e124a7955b8190be08e70bcf22c57007cd3de37adfe62de5d390d07ab369c06e51e656ea925983c4a61c55175dc9e2615e8ffbb73b22bd0a21a59581ac26f2ba3650dfb756bcd899dbac918a2ce5e22690c304b56536e93b4d558cf5725fe5a7f904a0800b1405ba04085fac12b1e5e40e87bcf9c09b48f5b111255a986d1fc4347247d93207a1b1c9c00dd191a67416123e72f8efb842c5e7690d05a0d717ab531a44276e0022fda7542abf3c4c03396667c53745266d287add92ab0e4653a9ef7d13ff11860019f74544a9751b19ca55943239635e2e99c5ef549f43035a6c541b45d4cf01df736413da44de8c2e557a343883bcd81d96631ed176d1c6a25f4b65382ce91c07b6683059f5db17c7474ed8568ad42ca0aadccc87a65cd8b1ef1feb897c023d1f4f6e2b5250ed566b2c4de0fad32bb46e539da8e5c226e20fb85c2eb856acdd9caaf08541daa7c09070e1feb3d13607bd0d10147a4ed25b12378aaf23214b85f64599aea6e77cdebdc1c572102985af3343fe9fc3a0e1ac7fe925dd788060ceb2cbc438002bef19697b42fb7e208d1367a493bb506cd77e9f49b84a26e87f005899fa91cc0c61092a29f4fb7c7adecca08b89f78ef7261a06d5ac659cbe18c36e3cb74c990d9506563a55e2898cdd4394853bc4fe0440273d198cc06895a0905a3094d8c5a3ddc99448d05133db1b10ba0e43b41be8c82ea881d3db08f3b8ffb2f1fdc6f063bdab6ab21eb7f9da1aac67a31c3567293098dfab1c260c5cc459ef0d5c8797d1b73420227b974a2e4e7f43d04fd97e49ebee5901c031d135454794ef5b9b2a525cec7b06816fb33c4911c5123910bfcf8c979b025a7ef611de411b245592367a114cc1dacab1a3887d0c71e5626bba3e853d1c39657de976d1cf0828f4dd3acd66cdab1bb1fdb9a76cb7c0c6764adbfb584763235baf39d8d249d289940ca5a0dff78d45c1b463fd9abc3831cf5eb39a883ef64cb79355bc525a00a2cd8115a8ef42eee59476210f89724eb3f7e7dfa0979c4c01f3badba5c4782920fbdaf95a1748467784a37f51ab828ac96aa69e9208d7eb0fba961a09cb1ca260c98acf28ea703a782cdcdd78936562eea1eb9ed34e8a49a256a5bf6cb8c0030e91111589cb432163e772d9c8b3837d9028575f08eb1bee86627a3a532ffac176fcfe5b114c4991d76f15e2e69e65116a885a3d97711550186883f9419335743667b30e43efec122f0e268736b692f4ba2c64d903530f04d4d3439aac74f881c96bcfbd9628b318f75f35455d8e956e2b9f17afc1035173483d499d1867cc80ac63b4d78c89271cacdcc29bbfa8d5041b5ae33075248521eef0f65f09ce29e75c0a02ea9b83c0a3dc014ef8c177ea3d25ea47f9841932a735a8ea7ee52a892c54a92a65479b1834e1673aeb278e4dafb7c7c6698273b269b8cf966b5f0f72c622db9be615418646796936f1465e67a26d6def0ed4a6bcfff4df7ab2cbef6f5b431be7db8919936ef0a19399a25ac0dba35702680f349ab0565307d3b04ce74241d49ec41785e804e38b0152c025f1b1f61dd0f3969fd44169b4de4ca09a63118bb0111e5508ccaebe8fe0ab242272abc22cbb300f6b0229bb8f6e8c116a7b5f9d18ff68a634e9d30e4ab20142e2bc4fb40e31bbee08acbfa85d2920873f88730289aa319f7ca7f84f3605f3a0e94704382cc4e5970b2c99dc78ae98868c3302388cb1e7b5528fb4fdcc5d00d2a89b7fdb12e54bbee51a4ea49c5f5273d2d363cb8ca7196c59196fa68817a73c9331f8f95b336caa28ee24bd22cbfce396023e2823ea4548e2ddaeb5f3d665535ba3262f601fb70d3920d2729674e66a5847e7cacd0bd9cfa234e8b89a09a9cb44578de9cc0ab94cb84ace5171dabd5c9c0d074ff27c6554f9c7a42ad53202e8ffc786b4f994f1ed08d48ef64f6dc05ed3da03143ecc669d6bfe77995fd00f50e08ba72d633eef52bd568acd89cebdc5923761b40c6c6bfd7b51c96074740d87891c659fa389003248394843ab4df445499da9abd5ecd3f9aa5a103ccd8eabe17be258a834d3d2f02c055df54e9c12428c75516845be3d166b8ff26ac5a059131b85e6b391cfe610fb33125ece098631bd66ef75b66105d8515bd696e729a380fa7f966e34dda819185b2becb446ceb76eeaea50b275dcb3de66333dccab09bf9b27ee24b88da78d15d6013b9bb46a381369c895c45d103d7507aebbc0a4fa2360176473774052c1764c28a7eed2d7383d7c009156975ee9a7d89fbd7da7f3510bd69fc70b96386abc1608ce1842943c6f9a28e003a4f72d09518caf5e0493ccd0edd6bbe00fc6ed49dc282ab2542fb90c2cb81e3616a78bfbfafc0dec7b49fb61b5cfbe8f1d9cddb2071d2a47a81842a5dc2488785cbe9b124d7455935c946130d6d14b83301890871f4e6942bedc4dcf00f4db44f7cabecec17c12fd38f192c0b991ef46f7c8ca3b9d32443e08ea4eda43bf6316684a8b93ef89c28480e01483e6681654c53bcf41f97f679406d0ca7a0cdadc874ebc65f42013e0c3c4ee4b1ce5ea6d3738d0343ccc7c3fdf391e5500d4dd93f1eb9ef2822ba10a35958acade209f3068b3248d7e8ebf298a20315311243e15f0ef70a5a03ab78b544333f85a2eed1c53d4b73f99a8bed12f5c98692d8382ff0ecadff3e105ddf09a8e787813795a9d931de6bf10a301b3393ed1ebb86b42aba5fe1b61c6e57ae682b7d6ae8c986e10b0ef61a076161e4c22576c7f3453d3a84109d163c48214b9a75fcd2047f4ae3217c986783c7a7b089526d68833d5dc718a7e809e5c44420672f6ca61b826815e325ce3aac6389e74ec3d9e9b3959b393ccbcb77600a47939701d5ce76fa68e11bae9f7bcb5e8ff1da1fc231cb767ff9b9244c46f643b20ef19240315d0ed3ae8fc2141228df4137f50f312a1307926d575b765fec970ef83e8bb4b917e62fe3080733e80b0f281f663b2cbbd3715bfedd184eaa8d2de1b946933a4deeab07ea4e2506e3bc16cb12f74abecc52db63141502de0f202eb6b9d153d9d52885e02a29c595ec821bb2796ee5ec46d96e3018c5c22d77ecc1125fa773993a0e9b440b618fe6eca74666ba94b3c00fb0514c70b60043c83a0f7f158f9a8262e816baf5bd2a04c971c06e3f315d41101fad3f86b06329ec5240844353709d36fe1dcb50073ff46d29b1526e0d8a77316eaa8fc17b93e6c97c7baa4fb99ff19e97d9fd840575bfbe16419bb1efe36b5be46fc688de39824900e877a28acc8683fd72dbf980756ea68296d06fa10f2474ca256b45a2fd065325b075a48da165cb760fea183fe6090cb3db790fe9b7aa6568f3075f8f8679ce35fb2cbd8cc695604bd8b4470c7196d7f2361ffb908306170602213e6d7de3a476f023564de31e28c4f6c0efadbe1ff187cf499a5e1a3f71ec7a414a04894cbc31b8e2d59a9f090d28919679eb74ab41bacf7f541a255d5a6282f0eb1c53bdfead7af1a439a25df6c1d0bf4b8e3b43afd35e49918e4b69bcaf42b4897c823d52345fd929f29522cad5dcc2cf5ebdee2319a330b980356a7e1ce3188cedbfd5a00c8f21ce8f206173addd276c239fb485d5c7bb34b98b6888f18da15c37b28cd07e3151fad6ea21d891fa7789a48c9dbd50f1736b01f46cc27667d96122026acad26ef114919c6ae1c85b3990aa2ab2b4cf4adec41f187c14f29a470376587776506d8a8686dd44769c29f5e8fd21fa509dfa86a8dda0a366af4d73abfa5bbcbd4057a3b77e56b87f538c33f9651a7d7a0128f3800134e6a0f3a9e6bf77b44085e953c50f40afcde436ab7c2baabd441b42fdabb2547b4faa07d627a9b50a0bb8948a77f6968f8c8d8daf57e693b15619a9a038a89e1ee56c33fbbecf7c06263c892341d4469efb63a0bf4d92e99fbc5e7e3922c8a7c4b0cebe41349b945098fb1047ab111985254cb604e597742e7cd009f2ef7c3616b9b9f2cf1073c48f69db711e3e15d7ec0f3119a6a75dfc07a05991f1292b15bc071315cedac1d56ba2c6f3cf8149487ac3fb0fcc1b4d49d12fe0605e573c0a5da2c670651bec908e4aa3df83fd1333d84890e19ecacd2235324cbc620219dea193b84bbd595cba9d695a7d6138dc62aea6dad7453b4651dbb087ee25b1295932e1d3eefd1f791e4308d21592bc0d9ba3e5c038e9f6219c6ab1783dceecd442b594fda04ef2ab83262df5ef3d110ca75f0e294eb184c4cc8b3e07f3853c8263d5b520aad85c5ab0eee3aa538bbd434e8b29ff5fc66c99a9e55d1c5774279b82384b2354c2e4ee6e442fd988a44a1857cf3c29b4503606fa21199fb0c0378768865eeee63513cf85d01b6ad7af40f58cd2518f95766b7589e677784794f4afdd68f769a8586f65bd39ae4688d42541b33d6f194960924d1cdd81906416e579a8851c7ce2548219de27f053e33d836495b79faf1a3733f67cad3ecd4e6e924e9387d80fdb50d451af44ea7a2f0fe1c6fae9e8394e23d6d871ffb6184fc583976413300adc75eb76f935a3a4b675c8cfaa7a529f2e4b045bc27bf25aad4341bae4d42e552dea51f184a523b7be95bfe76c13e5c902d844e739c8f979b10f5321db6fd9d816d88e28183a739d90974e76095caa9f12f11fe49c8fd35fa3524132118f397cdf6728857d9c9a3c74a4fde44afca80aa5bf1cbab47789f2cb3394574dda5727cfbea96f7a74a07eb1e45599f49ce7f0056ac3d14929221c70dbd3f759f83ac22f06994ed96a8e49917eddfdd2e3703b78199c91234ca6c3dc718679fb92ea3647667e8960256b875a9a1d78ab7a4ad147f4306309891ed1551e3547fc5070695f07e28ad84e3f1f55629e7346087d9cba2406adc488912d240a69c823d9d345bf114cb8088c13f9cafce7546c36128218d1a6d81df007bf915ca9643ad61bb1afab457bba88eefd01908185e5ac106dab22994dd96a886fe33d7e8307ee519476fd543bb4ead8134147f26c79117f44b9406673c39d1d2564d46f8d54ca7cd85d300160bf59d923d448c473f00e68ef8b5395b1a232cdc95a4a04eae711a464ac6cd452a37dfa1500bc7e01114ad2556982af713dd0a1430ec6c503886cd120abd8567a28ff42d10ecba97da56ec5609af53b1a5d209f7bc8713b3e01830cf4a19d0e3e1687ba3f469ccc51742149f768d5c114cac9d15ad072ed0419fd5cc8d8e2840734bc6848ef586fe4460c6702194ac9c64c743fc66df263be9783ca8496d0413e4b4756d252261b9ee3d6266af67bdc9aabc9f0a8e81926d244bc5d10248fcc4923cf8cc6b82f56e713288f15479181f7ae6fece9890ebdaae8511d54ca46ad9284fd100d679bab279daaa8ec54b341451f0f3b6f98fab0ac4be91239cf1e6d7f3679ec8da8919fc64a037bd7640aa3edc450e6245d048842342d45a57d3e937a00ea2830c239bc2ce2dc10bfc1be2f5565dbf3ef2055ccd36cc4bd811acea7eaacf9caddffbc89c22ddc6d8ab1f66de6cc576db7281404c6bc5882b6eff83237004ddc7ca5428eeef2ac9c227ddae608c06d5966be6ab985ea8e9d2b44e2bbc8c58f65f4fdf25419fbf3a56d6d93212408c5c1e32a7f7177be1015c761b4ca07c2666e2f4ff562ac0e5a8e55c849a6a06d06ac16b47ab7040286f2748d97e75bc17bfe14e373400df48961c1d823fee6b7d923e7a48410947c973d1911b39b2c88751d8b009377a675272698e34ab05caee52d3e41c4068ff5ecfd9d352f6de3e1fdd37cef7d8ede58dce3c432e6446c19d3d203d463205e362d3aea4133e6e692bb29cff95a0d1c6752a22c0d1e437dc24a1a1ea588e7670401fce77de98c9e6356266c64527dca682e6ab8bb1a34f66ff30e77fc5ce1132a104c7c3177ea731e77d33c788c654f241b445086039f41e976b5f7210798ca6e033191a40585ce89c536257f314d1363bf36dcb4010cc5f87a18845bb094f59a82b40e1fbce7156ee95a10bf68bd7eecc24b448e3b04ea63a73d07f47f5bfa7434dcdbeac397b2938a44e6815a3ef889cd88705cda0e18f4a62e69329d7743c5c2b1e14d431d0bc051fe8d0d2e57e90088f7496605b3b7711ff3905e32703654d33b069064028abfe58fefab0d91b91a9a9fb5f3e57a2fa3b99266bf65cc3deb108333fa4dcd9557f0fff3a31f73d09fac889d4da2ebe9521d15d29f5f15bf50219051d42706964f1756803c8b85965765bbeaba638e4b46f383bb4448d2244cad6a46661935f470049d80c07a4f740a6e3f828350ecbe46e2e50bf7478cd3a75c1afcf84ce317825fdcda75135ad07f6e1c4ff0928cab1c9242a90084ca3629d8a759d2e897674dcf1976a47f2d137f0e5b384851f6788eaca27da72814b49ac619473c14da4c98fd5e3c94e550a6d2f60324d5b4b38f65d80e6f345bf2b5c1d179ad7df8332e2d91b2148f6e4cef40cd1cfddde44a5668bd8c67ee44eda1679fce72debd2a75d2321ee6db42a858913bafaaa90943376104274d1f0c8ce154d82080a78b47895088a89ac188ec488ceac213814a27981654e4090dda58db502577be208913d26e3c5b188969a127fa7f6020accf7de35156cd8300d7d8f8232edc1490e015b9f6f63c487b0c4e5ca3a58eb974c1cd7fd8b2e9a4422b94a0949a566a41b7d5a4ae5d5512df9a7b514f0256c61f48a0d4730f40521afd143c6d11eea87937dcfc601aad5ffc3ab06dc63ebf2ff68b7c4aec15db76cf75e132743dabb78188b12ad2d54c151b157618cf02d1dc41b3ec490a6dc1f9aabd82ec72c3957da1d1dd94cd353b1e845254ba34f695b548e7753994bffac1f3fa7fd02e4eb4e3203be6a418e281607f1ad3bbbbc112a35250a18253b28fb8f2576148728411d148ed56c17d8526c5549579842d0b518ca915f78c0fef87c5eefaaebb040db3305f0fb452c2c633344aead17b517e585a9360ffc08f1eeacf310bf191ad92a2e6aecb89c1b04caf94aa426009f1c031f3595642849de6c1c001b3af3135bbe7dd7d475c750fc0a2cfbcc4b096d379e44143214741ffef137fa7197205642f89fb14abb5d6a7c914ccc899488bc052772a98e996607ee2e8f46b67c1740297902aba201c4c3f100e7316e8b04e80f2f498a2d5b847e267480794c225e6d69a0551b8ce1a3fa13c97aceeda7149db036272a70e3460f3253ca06c5425c3a9e1ef5856dc361793f6b85f979712e3992acaa0f0bc921279c5cba73945497443135626dc72f93cdee678745a461b8381113309c5055bc43beefe0444bd195f6cd942a592baea174ab3dfd37f0f14935d60a5976d1416e00249dc9fd5e31eedecdbbcbcc0d9910e9e06f5654e1b867af3bf2931320f4bcd967e6d6033dfdf868ac0cb53adfa768aa486c3100e92f9a00bd4c5bf5a1f83f3bf34b930a8dae4930f317853a24322f422dc50bd099cf36d6f4a832a2e6b44ba4513c9f57afcb67a44d5caa2e7dc1cb2e1afa455855ffe49e6c76b58f61c198aefc5a499f26cdca5ee55c929c4eeec2ea9a8c8becb06a19c37f38432fa5987cb86ef52025853de7ad8587dd081a11bce416fc3e223b765ce2b78d6a0814b18e5d33cdc1af4d84563c987ef80651c30fc73ab9da7d49ad0478afb698bd51953409b5149c70d2498c7888a261fb988b31f05045ff728d96c6f1c2746d93cecc044a9d9a1f3ed5e5f0ede082a96c50c2c9ec02410b96599c1afa8a17474ffece85ac47aec85daaf239f93a904ced1d124e36cb0b8d5d405556df814fb42664052e8b3dc33651d3f6ae46f16bbae25ff2355d1535f32bd42b312d226e42db81186583fa87e7bfe35bf443af7571d09bdaf5cb6b30eba687b6007ff7f361c3f860d103086d3afc4b9a727bbf3e105c4335260e578cd541cd6e5b347c8f9f641c86e7a4e1d3ce9b9f5acf5bbb3604d9f8a93c9244ba2e8237bcb7d71a935a507fe31fc6016c011230e551702dfdcdde2eafa003cd4975fc3939acf47c9f310d951df003018670f4b2f2af3581e5d9dd57a106bf5bab39f4546d8108fd13b1ffee9ffed84cc3acb797eb4f28518ec75bf635c7316a5fe91f1bb0fa7126813bac0ed192b25da402df5237a7c5076904deacc6780693f811d0e1bc6fe983785c96586b622dbe9821e064705fa82e0520d9cdeb7fbb42d432ce68d867ce9e6983436db5d3a6da10684f512dbd2e3fd389d1ec1d64ac01a4ca4bf3ad689cc1c54e37b1596dba5acd6490bab866e3b764de5b89c4cd755aca56fe24a3e8d0a81c2bf7c5be96d49affa538d3b8e3452f296cdb1979f093a8b557397e446f06bbee9ae80d6df582255788cc6e9798ef01a1d3e53dc59473960649a2530771bb77bd299d1adff04f8435adafdded1e3dc96e91ee49001fb18d3dbcad6575874b65f8369b509d1d99324a82779411d9bdf0d0257adde208ca08bc1edf0817264301306047512de40ba9e685a833be61ec12871cff6ec3d6299311eeabcd54b54ec3f635459efad9f3759a45b63f4b3d34a8e3d7007e2e0e5cb6cfba9827c6daab38aa040a8c9c75fd0fe631261930c2441e76e2027e9927dfee55f128a9e60d04d9cc7afacc7b2e94e35ae67c541797870dd0dc99f29d992f944520d1b61aa2c821edf8bab12f8a478a58c42d62583389d162052b8c9408c8530dc827ef0d5281ab8f1bbeed120f718f7058bdd68b1ca913ab2a3b7f14cd36a510659fc71692adc110427bd2db34cf4d3212a22318c9714f2c8a4e7cb87cf7050d77adb0dec9c91d220b7604e380ad6dfe907eda99b07eee66c3d8f7c78e85ed558cd63ebe8e501a24d531e5b379884c6640a86f76683e6bda556f62fa787fe878f3bde34e46df42a94e3407d3960c62e9a1c34457571c51f7cd7650a9d12160f86aa920f699c3212fc4f0edbc5c966c0942341b8513a53b6f7a82435e1f36f144503c8a5feda82018e7fd09e633b2a235908f37a8147582721b17bd9fb90d13fd22fc81d2b8fae9f515bceed9b1edcfff1b493b38dff9c1dffdbb21e745304383715daa078237c954dcc50f1f6db42fe650e688afec9e63e9b0c102bd3a3cfa67c9c46566efeb58b8ab89dd1fbd825c6bcfdbc285a0f0032fc2dde29a0e7fb32a7ae5366948821281109feb6337e4cfffe6bd5b52c38b0a22a27653f64895083c2324bf9722a8715e9a5bbc824358152343ffc58f9acbf362ee0ea96a5f09642d40f7436914ab0fa1a761c2e58668a66656179394bd2f5950f42b855ee849516e62f17467852657dad626811577730e599b89481a9141968d53416a5c4ad15a8ff797b50afa86c49a953e998a7d23b74d82e95589cd9f556889d4baeb1d3dd9f27d5ea7dbfb68d041630e5ecd2dd73bd2baac3e5ab8a4f083167a0973c5eb6a4662baaf52fe29257fce1a5346002a068991568515e8df025d8795d89eeb6685fc56304df879641e9644d7199d7a8891d2b55cac33d4ba05683bbcaab4d43bb774b66406350396463555e9143c136f783e8533164d12c26433c152e26e36e7795011aa6ab1133c16cd8fb4c59a516b242d8f7e75ca1994c930a6fd321389d6360ed687edc52eb21adf40ceb040caf8203032a33d235f8d8eff6b1ffc5d239488119380f219ccb4bcdb17ab66b7d692f6e72d25cee16b293fe06c3fb3a3babee9f8d73a2a0753a0975172bf5b780ac802a2cd8abdacb304569448d0fa7fb5a1d6350ff7f8168a0214d2f08f00f9de03ee0392568bbdcd9b6d7b8f8823498ad9d7469c6eeedfa665cfc00f9ef9c5d6d3137a2a0dbbcd214adf169ea9e0b9c0e357ce3af370cb5f2822b92e7398547bc21d86e304b02344bf45f5f4ca9518fe4af20c3a1a10520ad5b81eeb817f3e433d66aa5bf02b88ae551c8a207ec31f796d10a13867501c3ffaea71b56d10eba3b1796503446045d4a8dd43b01afd15e8e64e2db45fc272751454421a7affd533dae047576600e33e1702c31243a594b332f4f21c67ba0d309e6010995f8e9379f615b1f6f98ff9714c1788c57d4f247edfcfaeff13d934f915a86da07f6f9eccbf943530635ff0e4a4a5f5481c6c4d924918b4cae8929244f697a9ce4ef56fc273e661b23813522ecd18a928c59f68940b7a941e5a689d9adda8658162c27ef1df7697eaec2ca5a601fa14e5fd2b0dfa936fcd47eddddf61177511584f5954b13eef7859041e63e0ffc4b8ee27c1c64c8d62d0f61764a04e50684db1692c89a73e9b636af46af57612f305cfd9e5f9f035fe4fa76b9fa8a9050c6b2b44ae763a4b14e9bf418502cbf82f9bf987fa418c398c89ca6ed15107a1dc0a346661b2f0e0e68bc4701ef468fbb4ec09b681158714a82fdd75cc21e0b3519b5b42e8b8519c7ac9f9147b52b3aa3d665eea1cee6733dba25f24c2a3dab5f7af1e6ea60ed2da6c14eb833c96529023ab87a72044a3339171de00675f4c2658b5dc5e2c1efb27150d1a60d537cc3a022c12523db0d170641ec87d2caccb80df304375ed71410f1002e411d7df66f443487d8fb7ab6896be19ad1f7514cf5205beb25a5c9e3afee7a6f73aa6d5d97b81b127c430acdf0329f30a5bf34fce1656a1c7800c0e5f830659c23fe4b38a2c27d6af744b2dbb42122b5ea709864e5a6c99e16b7e4a0517e6abb395f4010f82b039833439b673c0113318a53a70d67a91f79e9125c9e23a131d69c16746c01ba54a3168becf9f29919ac6cb0897ed13715b5d8585167d76261f4366b0ed4243919938a63ce193db3dd2f78cf663f8918535bcad3ea81d387a21eeea536d0cc6ef97076126950851506c196f765d9f9148073a9c9507681d89e5bac0e16e95e239d43c1e1e42533883d6bae72aed387f344035c83aace481ffab358ecd3a6431eac1455186821add42a34a8866ab59d7c4915cb49210f8f22612edb889890e328cfe919ff1cca5cc174246c7cc108a27834b0de63ddc3c0aa79d51b2a8b2da608aeccf5dd29aba817c443e39cda52feb0b0dd7d180571427feaaf011ad408f588f0c4d1fcb649fa9dc19af32dde1e18e963a390b1c2a27d695dc4759f9ca6366e3dd995a2ec2eb81c14308579f4f15aeef50aff763bddd9307a1d60020b91d3833f142a18f3e14c5d640d82c645552b860f1ab2af99aabe9be8c1a88c4850328f9b7c76a6f2ea1c255a3ad05df9d1f37859dc91a40391947450b837827c6bbd5afc1a629311d2923f9ebe598637ee1b8d7a57859da21bc381590bf32fce6adaab08f4d6297a1f1472d7a103882732098d1b9374e19dcfb38bacc1c6da67d6f34b6715bbae525c0c85adecb8adf2272640e39948b91d36cc59f0e297ca6e376f03c282f76bc40ee141caa65f3bc055da6d7b70e76d4ad677b5ce774d480c13b699c14474a8f5bffb6ed3d7e07bb8438ede8a203b454b3a1a65ee87d29c69f430d50b6418ad10f6c2d4738723b50379a859b9b22a8849e71f32f71a0d0eac61458149eacdc13b3c9e3a50bf0f31c87f92a7b02d9e806b67ece49238e6e6fee35d6322dc7a2d9e18f76912868e3630deb29016997e73da40eb4366ea456b8601e0453f44073a6312352a62e5880d631d72db93ffb2aabdfd82161c3712e66d4336ed47295b2dafb2c043e8e3e3ff88c43952d166216d3d231b275b28359fda31c723e3946051ad81007c4b888852c85b6ebb75d6b504823c1d3cccc497def654fbb1bb8cfded82065e9f33dc5f4e4a6b7bdf2a5755b6b3d0f01e16131eebe8333b5e76191a4859c940724a +Output = cbc2024a0b8b7f85f622366e88a295af9dc1d210ab7c1c5fda33e4d2b55f0fd2 + +Len = 87672 +Msg = 8002dcda2e7a29155d8d4fc6192953761c2972f8392aaae3fb9a7c468911f196cce5dbebd4f95d6c78d5ad083dfc19687a794821b9bcc32d5fa4b39c90dded874d6c2b46df889ce279aca0cd19eaccd1af82354781b3eb89ced1c3aab1985a6449c0565117d1ef5ea739af7e739c759b046bc0d25ab82adf8e4933d6b6eb40150908e476447c5dc94ca5628114b91cadc15d722a0c738917e8338b8a657da881d56d5b1c2d31ef09ae17413fc4eac7ef2e7fd1b75f8b0f1a24b7542d88f79992f51745aa9b97ac0715b8d5204ad7804992fa67e21ba9c5ce8aff1527e5001c2fb02d298a56569cabcbb0a58d70274ea337f5bc110774b11c623056df454138404fd890232617c7de172639ecfc833ae5639956adec95ddecf375a0bf6f61f5ae1a3f01ddd382368640421aa6b7924af75f0ebf1f92b3512786f4792e2d095b5f598b0420243ef08c8f2ecf2469fd88c1737b7fcec17714b363d56c9445e1733c54e32154e2f4fdd94c0fe0cdda6bfc2ce6081c2141882d7ad241fe5a8090442d5370e1e1d54b6654bf10d608d185ad1e02df2082d990a7631b60b9e6a6bfd61b9d59cb30c5ec32e42f56383f18f3a3800d25135853348755855924a17f1532ec7bc768a77a7e6973e60c8ed9755ce63b50057b0a751ed73a5955c7f3d23b5f8a35e23eafbbaa14e82a58613eb1687f3513a5e20208f69ff9e07b2b4569d865db13d1d7b15218392a446237d594c075589e2dcfa7d363e57a5ff4d7fd0a954dc95cbdbb13056fe3237c539b08e50cd08b38c6cb61a00eb3a521e753857e1a1e3b5acd703f9d5717ba1953123e6ef398b52a985d98359f10626d7d28438d0ee018532a809be27adfd7658926e0f51ed6c0bdca0db45bbd05998adddda1fe1a9c4a90fb73919b7d4262a61e5e54433592933684631dda109832c131fa059be559b85969cf87920b4944253a420320dfd216e0f0e83c7a41d3155a9e08d92a181f4af69c1ee78dcafa632a035b5553c4a0310233237703f8be2a9d4e8e84745af6e8aebbe71855625fa8fca430b3a68d03cce3789c373cdc605ad169146e4154e77acaefb382b27c80fbe5434a83dfe204cfcce5dce5ee96c18b401622ff59adf9e8925f098d6bc063452b092f2ec76aa92205a26ae7e1cee9a6307e419f830e351a4e3471a14ad5126c171d691d26cefcaed6d8cea7dd2be194eac9f8b6891fa1f9469573261564955af1a780b7c4b6055987af918baa55b03bb61ed0ac3187486bc2ab98849514f2f501d1fa6368c8cb0c5f4e3afd0ff55e85dba550e944ef2f59099d6723928e33278ec1618bdcaf56b0a7de5164d6b3f459a38800d589fe60ac6494696cd47960d7e29f3c96e611ae2ba8865f28c536799e54ec68d9ca5de24a1bb824c5227e7fed439414ec4f97dc67a76febb0a527f53e37fb115bcdb3bd1d7630229745459a50fac870f5dee8e74aefc07d663d2d702094dd82c55ba9f90cbc25eb4b0675b8ea4f62d8185dadd7bec7a29db157f1f32cb3ba437d3ce79ffe37be05472bb6e2a2898ad4c0928db4aa763dd4f9b91a854adbb9dded3814b7dd2d24faf57cb21f60f26aed52473187f545b8a9a72c512f625602d77b17d84790e77e52bcc30e770cd027aa37424058897c3ca521783ef85c6abeb991a0dd59ffadf59303c675f28f6cec94d74c632d4d63f04ed06588e82060150c969cc8f412c7b147344e8d99cf0edf319a2c42102941fd2f1cbbd80797802e56f2d44421b17cd9f5b623fe73b5fe280ce9ac840805608acd6e41d55ea71132220c0df7e7c4159626f10d71882983f0aa2a92d11dc906c0b22cc028f4395d48f54e12894e33da0f614dd48ee114e65f95c7a7d3585e7cc765c00178d136aa99591faaa35ee6136d2e323ffc855c709c5426b32fc0aa0ac66e90c96efe84414dd5e79ced20c508d7150818647ceb66d06fb17e905e96f7e55606e3b2820d6a8bf20fb10e9bb901769f37256dcfa713226ececf9c380a8d4ea38816eb65b76c7b36fdb1afd7a8457153272fc0857abebbdae76ffb59ef1226e08029c1b06c91462b1a6477dd7c1df1ba40fd04a64baec23b632756c62bcf989255e5de6a131f1459ce910fb41bd11e5aeb59e23b012c6017aabd5588a80cc9436f12e79b945f0c4782021e646fa91fbe8e09024b8680bdf824f99fa84c11e47a3678874bd799577d9c7d4df65eec1d6b93d60bdec1f2006539a5dd2e01250fc012de6483c3151c8386cb4471d2e43feb6088a6fc9aca52e75187b620ae91729c6b0d264a421a84e2a6b4aaddb2d7aec45fe77aaef94fda05d469d3883b9e3796a9ce76a93cf1b72166ff2743e60e9181f6ba30fbc6cac1472a11db6d8f91833634e7fca797e3dcc82d7665aa55d111a78fcb6fece9832e35bb4777d894b5810574205f4c3c361c5f62df091ae96856c091e0e0884bc24a58efd54fd03151568ad24347a013329e6f6f03be9b891a875464c22ad7d2cf3c372f820a5d4eac2d4db4165eac04218b7fbbaa2a361d30cde97039f6e167f12d5ae1155187d40f2cd783634977f8490a18ae9bf5f28ef24f091c0decaff372454a6f57cb57a9c27bafa8f0b309d5f444c1b0a0c8d8c2a8363bd205b3485c98ab8e3f1021d4b60d435d8985426b85686002297f4beea29aa908faeaf4b48cac88aebb07fa07e338ac6a90ec9ea4eeed87638101253e1610d1f6fa8456fc69f503334906fff6198add5d24ec70bcfacde16d20eefed00751d58f3b9b8227ddbd45a453d3d8ab3e4cffbeac4c60bc904e95a76f0e80aa5ba6de5b25f71f3dcf4a768940372c2e3bc7391692d515ab97bacc9ad42951d6fc5714e1215fd64726e6bc6b78faa385f940b4ec3d4f3891f957adccb806195cd0ac9ea9959d4f4bccd742d063e4e6ba5f0297c8158270779d6e61c7846e8142c1eca53bea773154a8652e4369bd9dd554540b32823566646b460f139e293092b661502089b62567a2daa949f24c70dcc27d38b3ec32c2604b29e03670ffd0549651c8dfd822d28ea27cda6c665a05d990c645d2bb3f2b73255dfcba60b8068e4b0534004182e1d09095ea332daf07d3a6775b18572549a6e12b8a27d81b7c4abcc5bd0b2b9ff936546b0026af131cd3ecd8a10c29abc50067dbb2033ff1da8fd1d98b89fe42c3c6d74645ce544eece04a304036979b47899fb59ed8fd02c7667288c5022131e68aff70e1b285272002a8c95f1e0abc764a7201732d7a16ecd5871b94fcfe350b8ab530fb5ba8686041eee9274debd5fb4ac6065c8b1df5f1e7f8da1f01fc15dacde2cdbb4f27d753a604d9c04aa0af7d92850d7f7950667da1ad0d8f98839bfa5b6c904a18683da238d2e1519d9312a528955e047f7b33380d8ffc0b4afb8d143c3dc1d03ed561f500404802cf2ac51b16e04114250422cc3284efbc9dccb4cf793ba87447d40df2043758fd67cf9286644cfed7f454fcde18752dc91b5fd8d418508c5fbdcf07444e9d5767ede93f8f18c3dc7473d38819c84bff5b4c1ac1ca2463b7b9272d1891e65c8e6be9e095dd3c2c24132be9902249ecad9ab766365aa25b6fa90e560882d25a452ee41b5c19d76e1fdea2ffdaa4a3427fade4ac002c9c22fd57f9b29fbe1c81c4db66045ceaf27312fb627b3045df34bcbd5b52e7e7199fa9ec70a9a5eeccb75298f5025cf994224892f3c758ad04a9aef1a5c2b33422baba90fba3e1b9e8e6388d1b7d26edc56308ccdb491a851a8b9b7249622cbabe5b7a6a23081cc87af5bfe45fdd806f8d1e99d0a46b40752ac1cc67cf9c1a22f56a2fa36f401ec289cc2cc2498b3327f53b44c7d59490243a3389f9c0d74413cfcf226268b3af501e53ca5162ed07bc04a351d9f72bd43b55c91a50a27a733655729bd094c9971a4072e0b9316cc3d7c33c082d919ad261806bc69300ef6f338e3ce1157deb9dc7f711b5223f71311f38efb0ec2b48533fc501d6eb5f9d00b183133e58ab7f8bff4b1892b31262173d6da5933d4e9d1e7d2b73927f49ecee583ae1f8c1a5ef276c456fbf9434a83ed86a44f7498001fdc2baa94278454400d1bd8c587af3a13ab4ecfe84ee2dac6e9935b525384cdcb6b67b8b2efddc0dffc414fda6a81dff8b7f49ae29e983d56e27d8e165313796120275029e3794afb4d8451d2a76ab6fe4766265f5acc08a082c5bafff5ccb97d94eb1f4d94df892e4b65ad32c0a265b0b40410c31606b35024dc4063ae28f48d341354b28688d1f5a065a06f38c162ac986ee8c262c0d3d25341dd05feb0b0fc7840bedd3b0ddbcdd6f4ea0c8250144e6f06fcb19392d0a39896ef4b69ec8557fbf3bc4224c6fd234993d88f3fc71112a25ceb355ae530406f3bd5a87244d83c199cbb65c65cbca282d2fa6bc3bedf95dce132b21b40893531b14ea1aa522ff56bac5adcb227a0a81d32de26a07fe644692441ac473d21feaa97a8cb648d03306cb3090b5ac03fc07323d24478b2abaae1a6b6a87123c109144f828a535de8598741547632aee0781f36a5499ecfc635d0e8f02b2bacbce119494a62d95d45fd65c7bb91dc5c492b9bdb95aa955f9c71b15b9ca8d9209c1324258ee97903b28862c6ad02ba50b077539341ebfecab4eb0d7f0aa5fc37d51bbf64ce82b4d9a48718beb73d4f14ecd7e0fe28923d99961e3fd3c8a7274afe77657777d30f579275f22048a61d2124c9ce6cb811c454b667d2fa5520cce28e9290ee193f0af602d1899bffe1a6fe1ec9666f8eff3584ac7471434ea76f96fc19dc39213b1a4d8c2639724b547f14215363870bcf1391dea0655f03af81c0cd59a1d93e6bcfb684e09c43a98307fbe2f42043bce5b114c398599e22bd95f888fe8c4ebf259dd9939d3c9098f1d42dca28371620f7c07601a8b8910a363eb6a564e61a221cf72f2eb864e9983556124d6c128ec669b44e0f7dfcd848bdce83a91959cc15a68e1fbccedfaf35a21051e34c4d1e1baffef54374a0c46cc8d7e81aa851c4e846a533c45cf761efec956532253134af5f131444294ee5c4cbed3c508e68a54891eef3ebcf3692255957b4a0938962efeb9323980851dd0f5b7129113808dd850ccde889a227c0849cc9d8b52390395bd9f19bb59e43eaaaebf616a331bcee4c1bc47a2482457d7c1b8e39f631f02871aeb0f50357bfcf05e1fe8dad07ef47fc43553152cc1a197a49f760da6b13a0dfde43b827c10fcacef20d1685272a8b241812a68b0c10350dcca7d5d81b9542e4ed3c6d8966ce9e54808419d21bf928420e6f3233beb240b508121185efdf7f3f500d7daeb5769a4511f62ffa52d59fd49add7cf3408add0e80c8ac5a447cc62dab39711e39924f0f2af5c184783a625a51dfdf305e045a58cb2dfecbb5d7b86e6342d04e7f9c4d113fe57706d8b20051a808d17153b959424bc49150b07ab64ffcac23c5d40ee4f9c557a8d810b70a4911cb1c3cce144a49872efc9fc0f04060ebf7e3faf364c7375fcedf9e9cc3d0af33b8f80929afbddd01cfa8ff63c3073fc59889743a38644873bd93c0f96304026234fd5cf2d6248b50291f06155d4b3afe109cb834f44cab85a66dc5931f14d141c1a4beb6320ec2d6cdd73a5239bcf119e2864d6022d0ef1a0bb6331642739a37018694e04ded221a105a02a6e2ace09da0ee9a383e9171b570159fef87a0dbd6570b761d843007aea32ff58fd2cb87edbe2e2549b21ee1cc55f4427b694d049454bbd8aa6f8801e8f8c19989a47955aebcdd850127d99de32feae16631a8a2f56d0043238a45af7d83a75500b236e8450f752ffb0a42247e8051e32cab74357e12813c254f094ec0c659bea19694ae45287d8c93c3f90412e9d1de3b21104a92d7a72a0c38438e4753414cc8cc132623ba6f21680f5ecb34bee3291e2d0d40d84efaa364c074dc959d067602cd22de6517b294e426f3d84881fe5a4239dbc6b2caf42ebb922dc8201601c0cc1454358de2f04d94b548b9e2d59be843d20c3ab6ee1c226d17cecf7b50dbc3a12c17ca028e90c1f634ddfe882c3469af800f1b592adb2515bbe8510bdffce51e8efe1a678d2c7895102404ace86044c1ce54e71e03c9bd3208fafb5605ddab90b7779531512bf7ddf1ab6ac5bc980037079e3c7a0b60514e89873cee74f68d943004d8d49d07c64d33e49f66fb54328bd61b7a01943767c7a80d8439aff011b5832633d5a3484a7f61502105372d421cb48d2e294097873a0f0e7fcc1922ce611b7c54c916761ac1048e8e34f27bb5862d43d77593392612090a7e1a43372a337347ba036919bdde97e0355aafc81334aadff45b0e74daec30720db8b085ab892548b2391d9b8a148605c4fae1aad1c4a7c2036e14d2fc251fe5ad0bd396c8eeabcffbbe968425ff795fabaa1a9c77a2ce9a931338fc205921c5eaa83ef308d0717de528866c181bcc6e67cccd058b5b69ba11df0d28ee04e0a334f25522f1db10b31cfb4fabb6e609b267f77b8e735b13b10e45e411ab94c6fe1a9eb89f0a7af40ff1ab64cba8eabbbc4a9ea89fc61e470ff6dc501eef955f4719e1cbdfb91ca60501bd685454964cfc7e46c6a1fa319e374a06f3d92093141ea180215d945ca102dba5bcde507557e38174683d962163c7a65a31b8f4fa8fd54fee3ba112977fa9cdf8f4b203044711e2ac1fdb107a42216a4a8c36b3581d0b73808d32ba798c6a872b828812cfa508104230030f88b3d5245c75eb12286641cadb989b026f71c565b1f8b8d633fc26a8fb4b3dc9e933635304814e67e7d5e8a473e04270e5aa2b0820c9dce3eda6fdfb2be3f406184b5c74e730c94b02f690aedde6b18c68a03bdcfc686cb239500eb5587cce1aa256111858f6f4222642ba387e2e60bb84fe5852b976d0c7b361d9360588149df3fe31abee664793be44c5dfe929f894b70f1117cc57a1aaf866de1bc7986ff6a9ae2ebe2be14c0637675403836bb19e7b7ce68ac99d77c254d99dc4f32048bb1fe078ad760a79f02e44e551e166544f4ea2492a15ba9ba4753488c02cb23761e33fa018714449e80f47ea3987ac391dad29d9845531b5d7c5f23fabe8b0a4617006258d8221346466fae328fa9fd880237df817ec952ec2b3bd22d69bce286062fe895b4d13d1eba1c850be9ec3cb1d2e19255360479efbeadfc2deca4d2bb528633c2026aeaaf45c5ac35908ba895b3975f1d544db6ee9c7e4903308b036f63ceece6aa35417f5030cab86ace68bb0e23eee0c0ec31722d7663b61cbb9c29a1ceba0a937a6b184126889d61fca5ab494be6a662291402d95cef4e977bc67274504635a7819002816f8eeb5c5f86eeced8ef77224b842708fa98d48b12a9d1441a376fcd91d6c379d383aa423d340b0391b35ce89cab682216034fdfc96cce79f636c0edf468e5901a0fe3fddfd68a5240d75c9c62b14d8f79dbc77be838f17baaeb31f0f06cf02d0bdb9d748d95f422ab068026e6be5eb7ebc64547b734c3b2fefdc9bcce0b6aba708fe08f8f99d0da9be6cf6e70f82403336ccf2b7d89cb87bc15913ad66cdd9e0fd3b4362c09a6e4d81f515c488a26d91b77700f845e9160aada8f524fb8d041b04d2251ad0dffa72a5a0ed9b59aeca2698c2ddb12dc9ea692f5cded8316cc0b1da831c85acf618b593f0fcb0051ffc7e6551077702a79c23a0d53f1b8af58641d8aea837b7457f82c755b1c72d6e6ae5a7a20cbe672aa1a6acb274837aafcb4779c536b582766566da5fab2515229c18da365bfbbd9ba18ecd753d848304063f4857766390e180de276f577e5ec51674677e83c3989302387d8df8b3269add95ced5b5d6551f4855491535178cde5074f9eb028a6aa94a20276d1473f7cca7e777e0939251982278a9d1c2a501c6d0b6ec1c56d4b636fff265a33f6b5921fbb0cde88e0c18e4b594e4358e9b60272da6c8830f170dd48a1bb2c0c7fddd235f6e5b5e03c81d7d684662b1076f2a77bdc109af89e5d40a7f0899365caff659398c8ac1a34ac1dab119bfc4cb94c32107924a0255a59b31454573845bf6372c20a7e6a3caf8c875366b55e129a0ccbb9196e41c00fad5e1835eec3b446502248b3cf985197673e55ed7cfb6c01799cff24b826d0a4a26a3afb17dbbb47109daffa82de5ed38669390db87861d6dcca6902c8f65d017eff030e982860aae90a7e4961e36d4b3131882d3080f9017d80801b665a700e8944fad73954ad5724913e07325085e7b0bec9b7adb93d6aa4e4cad85cfa0fb30d62a7bcc404aa36085c769bbeccaf8f4a378412f7cb34f9991ed19f717d45d850819226ffe25e30df90ae6fcd00f22b48c442a6d65fe797a3571dd96c8c17659bc7447eb496d12bef586fea279456a3f28f89db121d5c2a0cb734ef16ce8f42365f442aa9c80b1082da3f74932fe3df90bde41972ac9d9b1a65a04737ecb457696f1a94a71f15c8de3ea975da79a2c76a79d8c8bfb5b2d3168ae94b978d8e8c7c204f227543f63a4bad3255c41c9a44c8e9ef50c1dfa1b9484d9562fd5a26cab6996a3eddddb64d134f647d19bdd33cf135b01940d37434f7d72ef332fa83f76103f34fa5955eeb7d4bc653a10756992e86a38b0438332e6c4f3c68ff16adfdc38572bd9612f4fbd0c9e040249f2a41c704510fd4b7e48ef0de45282a56adc2244870ef78fd836455f33bad6930571e04d6410b7af8913cc9acd39b7b618a30ce73754f13fd101054ef5e003960e6162c25fbe9bca2411f3fe06d29bce04c2e082f07442ebba5e614e5d1a35cd7de138918080f635dfd219ca39c3ab37afca319a4b03693de49cedffe1dfc9a3e47fc61d8efe737d3cc29261ce63629d8a1794af9f78d080f05b0fb61c975bb3d2ab9fd8c38d7ffa9b6202774d685e7a24397e35764b256f6e074b1385d74867b8e31a55d6c49858ac3ece5d2f18fb27feae52ce5800b453ae20349a86263c4a17b4ea17312a48f1cfc76a95fc1bd55179f4b6cccd2019c8413430bdb5fa93d56f9f738f5b250e60768a6ba42cd75961369b1ed33e3fd257b7c1d3ff9dcaeb9431114b30bd5b552f40f6562a49d203f1b51fff5433965a6c824792c2961da0010ca8e5adf023b9a8bfa99e7adba2716d65e1dcd235ea2e81213401b947795d9642d4b7596c14a8873302b9284abf0e4ed98f3bdfdda1db30252585462a5470ee740344c5b9a4ae255b904ab52f8e57007076a0cf6333dce40e8ab1fba745865420d31275416a371d89e0a7a3e2a6d84cdb4680438f3690373dd20c4c46b30a71d9c2b4da9bcbdfda5e6274671c8efe6e7a6d6ebeba10b18433a9e8aaa12379c1ff308078314004e63994259135ad55ffce59d0a36c68ad65a060fbb91f1d60bf11cb29d0aa7d52bbbc043f94b6886b7b47aa3a942e94e055d495a9da39173bd3b1f0f5765fca25d5562116f417b6ab6b96cd2103792bf6df70b67790879787ba402097cbd9cd0add88796031e1ae924b0c311863c4a45d5ce551e96e8314b0bd4cf8756390dc8e0ed37b9fc0ace6bc844884754799748078a2e673e6a425635748e702b02d9f1c13b7b62a42c1e586b1bc25ec3170430c9d49f2ab7b633ffc32c45ae443f87b2176b5a7941ad9218d5dd793d193e1665e454af4f4af58cb07ba3fe28e919a075a924dde71cb4b213ce33b5cc9e15574f20b166be3f4fd6d02782c0c662b8aba1400f0b927d6a07b21ec57ff39cc54e564493cc5fdeeb97c78d709470f643309ea4d3ec63abf7185b8c3ade9a597583e31aa4ea1a6ef25afc7616800eeee2b8d39d198842f0826d77e23adba91e4e7f5c6889c7d8398ba4d9a91b8f8892bfcaaaf389e81892338f6fe66f7d083378c92bf7ed6b7f85dfffc5f029c6c62affee8a6dca13cbda3305a9617ecca0e01ae9b68f76dff99b16f22811e52fb1fecdacdbd585114510aa578f1a12d0576d5d6867f7cc2a2cc357066bd5f9d12f564f8d06f161eb6c7cc00e88dbd192162168cda5f998540245cac1f4040db42979ad18718a07a82a669bb1fb6a6319c64664a0d75b8266626898ae2c66c8e188b010d685671e50661566c85290716d4d22786a67e631673375e9527bc2d35f3243a04daa524fec08d247dcf415a39795fdcdb1bc624e5f5fb4e4374ae2d536117a840749114282f7e5667449c1a09e84218a003e978057cd6db2e4ff8c776f0c9ce58cc86d9e1d1d96ec18b95c118a04d5d8dc554d705565e87ae1048961110af3ea62912e0cc2612d0150acad9d64fc60dfcf694bc6640f6c65b7bfa13a24f5c5bc130a1c337babf1cca58a7ded33530bc660e25a2989b3439bed9a9babb1b45b82279dfebc4fe32b769ebb94a8fff31eb618284241ce39b3430bfb415bbe2ffd6524b19e4e47f22326c4a7ba77d0c3e1d67da3cbb73a890586994c59f3564ef38d94adc29269be21059db7b702afab9b4f19bcbc33d58c818b20f4ac1a7ef98421fefb332fbf306d3bb35152f0a393964874d9df5ca8286e7b285b02794018f949eb02b9ce51304eef8edf54eab56318ea1464fadbba46167d37e923b7a3939a2fe22a1b1725a70e4ab4c78697ec036a5c83c3d65714cfbfbad706d67daf52aff86bdb23b1457bf373af73ada0505cd4c749603b79bca9b2598f1ae4736d3d80cf0e7d9745b9964692074994ace9549d53eca1f1e9bcbe3783e78d1640e43d55da5478407a87de4ed142b30264c0d40f27f6f0bf4e1cf4956068c7328d1d387541c435e6f9b93d5556ea17be6fdcc5706cefb46e51e2351617993100011e17292de71a516a579aa14986df9177450d09495d54c699186800d103314a45f1c3b9c64390487367dc7bd39f724321049622e7ca3a8fcfc5759cb52c30d6009e236d33620095bff3ed2b1cbc389c172046036ebdcd919af24332ec9e976ddb2b1e8c9dccd0fef402b4f94b65996401a107f305bf7594a3a6bc0a9de1ccd77ea29e602b076a4cbb9d192d8823fd628690c03cd4579a5f91e9c76bf17b39dc900a8a2f069d3447bbcb040efd7ccc5f4ff45924040da4bb0dc34c9f10f64444ba6cc942551698b69d945de5cffa6e2304d5b9f4bd69fc70bf3d34ec21da57d6a3cf45e141f8fc6208000cfa29254c764c3bcaf326f408464e5e659b4cadd95bf33be554f2cdca14a518fa953184cc20cf2f736b68353105632fc8f3bbf9329c54b991e28f1c69921ce30dfe0f9f57e836b89ca2aab4df74a5b6453e9345c95e6c4f31d4406e41a414692e7cecfe569729df2de115fa7b5cbdfdc5c2ff1a086ce308ae722f4aba1435b34659f02a2ff54fab0f70d18e6b85520c2ec925ff568d62e9ee0481383ca928c83bdb42aa4cca5124289705f819b70de96a992d7c1b8891fcdad261c02f2a95b1f74b0b0613ded652619edac1ebba969e5f7a4019c02617485a24f56bfb60237460f172c7eef9873ea3cc77704b559433f7b6865fab2f9dd5574165c008137b1b6014a07444e20cefd46b048da052afae189426d5456bcaacb772da48bf0a45addefdbc957c620c6dddc1aba152779019ac5b4804f6a147d464ff7c89860f2833c1f5efb2004130c1a7179233c98ddf7b9a541672279bbb554430720dc6e8ccb4f342615437471ff219b4e1cb6c5b43ddcac7b5a93e1fcf38414ce55ce85eda385b2c3902893b81081ae2c1f1a5ab654624fb5031a5f62b84429dfcfc5239fac8e1fda0455ee7000c94e75a2edc43edbe903a0d90c2e876412e69e0776e41d36a6dfbbda41e1142056e0cd30977ec824ef6ca1450ffbc5877eff9b855a33e0e28e770b9a73182effb9099540bdf6eccfc3ef48ef8c33c7b2f6c95ad1c58f7520a37a2bbd60002b0f6e2d607ba7c9175d25000a311752e84718d85e756f735481746daecbaf1592dff4b0a12a1b61d22d814367a227f5b1e433a108d8ae7c09857fa5f73da6d4e0d1db67f9d45f6d97d1573de3cb3488befaf5b7fc7419060e9d23c7b79beddaaf859087bd130a28e2e91533f104d38859fbcd81abf025adde391f57426efa73598ba2a47d5e92404dd549ea21f77b713d77299299a55adfe2f9b0b93a1f435b79248042bd2f8e20331673a4f91b92dfb3fda87f483c2f18c75f868201355edf8910b7e6ef0e64653d2d1118e8d9b02067efb88c3a0d28e505cb1f263a39b39bf3b0c815a5639b6bb699a09a73ba69efc3dde85dd190cec0f8dcd93a37a4d80d63852f3352d7c9c059ecb0ce1c4616aa52389678b17f97394b054322abff3290331e5be489c345ff7186a01865054ccc9d9061415c21f8ca66c4fb63e9b169e0fcecec8dbcceb675a8082cfdc06082d2f065d76c341089d0c69c50928363d46c2b614fb36e5281cf57d18602c0f04f6a0539474dcbd3c108f50be1230b7f089e392bf3da00e74e692b8369bbd93d08de467b5f5aa5d414bf7c942b99d47b7cf3c09d878636f562df7d8e368d9b9f55cc3ecc7e3734aa1b80c7b5ae6b90d1b8093c46593c5315659ed8628afc6a9fac90587d32580abe4bd950f0d81ca32a304b16a71760f7cfcd23c6a0c58cd8c673e71e2e0a319a990c45c2c647219ddd8c45ea401098877d100ac2b974c368ac522d0a5f645866c2f34277b65a1ee374026611a1f347a4b5c4c0572d17149ca9bddea781df30e1b4875bfa41af7916865938473d2df2b1f251c0ee6c3b04e7571d787015e95fade64efec4e8b5a4997cf748d5823f2e41cb5d9903074f28cb2d0776febc01392df0a0a7521bfb35fec042f45701855ed6a93ec54f7ec1d4caa3e2769dc4c551e43c22e24c7beeb1b908e2e7464bcf08e3047bb1fe4341ad684454f3f7c0943e63515c3bfe590e8c5abf5d7e2db14ab0f975ab0bc9f53d272696d55b775ffc632db89310f263e94a564bf94567e2a6fb7c65332f1cf512c68813da29a6c36c4495da8e0dc2fced603e476cc9af50522d0e5baa8881c370ffff33d9eaf0cb72674e4fa38eeab4b952653a1e674e7adaea01e187c47300c6580e8f5b1c0fa89d5fb9806a20c40babb57d8c94cadfc2bf97097f415f7b0d8153387ee4493e1b4b826a054840096252fde9b75650ddd86ed8778d6db6047a30760f9afbdf26741b63c246c47905693d903c52d995b32c6712fea4636499b76234f65c086a33437b9874ed75485280da10e7e7a5061a2f46cae15cd8e7b54585148f4aa056ef19ea84d441c12a6b39a6f46ede2f2e5d616c84d20f24bbf1b527992cef4a41d467e6ad72ec3e8bda0422bf43befe7b076376c54333ed5db986b83761a26ca76dae0e96d35544090960dbd608f29988a295c400b7838959772ab573c01c9de4356cb0c57815881e93e040dd212176b3a978f2cb91468f1bd511add2caa644a4a6148bbdc3957128e402e0492ec41c98a69d718a832565213dfc1fe8d3d7f7554a45ede4585d75d47439488e7442f1b40473dec1ef88b2163c1a7a0a9e4a2c728c7155eda8e62c9deef3c821b426ac725d8c790648e8ec473a2d4acc6c556a890717521e37c7fbe19ee30db7410793701c57fecc21de7a50b28510b2d082280524a8710a877b7a4c2e578793bd3e4d19cb56de97fcd1f2af5fb25a326d68fb737fb521371a690e49f7f1a46b7b634ffbd51986de5c5bdbdf8c4585ef85724b5072cde13853194e47962202932def0282e4108613a2e49c5db2bf323edb269e38a8434f62d414b0d17369109f276a0b3b52cc5aec72f4baa67d7fdd94b10e6a787ac5ba6b1fe3cc743a476d040a4cc0a1bbbd83ad4f14cd364717e6a5b98246ac84c5b09598fef7bc353d6656490fd94279548efa99cd4aa9aa07fbd6573aa95130b3d096c1cec8f60edb9b0a664bab9a3621db48d576996d00d06bab1c8008e3191088d34cfbc6de21728994e458ce155cc5f70ca4a95ffd0601e4986c0afbfea87c47cf7cee67b117b2908a35dfa740779170da69edf4d6040cc522e833e8e05957ac0fe41f223b5c1c7e5eed48cda7f114d726a7bcfe949551abdef3835654c623140915168cc9591071877d2ca7c863d07875d08ee3952480f7212071dab8597f1e4f825d1dd7a91f389867e3dc0e3a54f34c96ec3a645c1b35ade197cc879dbc2947ae7b5c02c6c922163006c0f60f02c61f4d4d799e9670f5b9d96dd24f0d7ad3860bc9adc73c8ecc65681dfd2c3c6a7f62763b07805e32a5e95a6c527b233b9b8f3ce0a99174e0a61a6291f6fd5d1c6dbaa43d8ac62dc0d4c106fbe398696effc78458c5fdfa5f3db9c1fb3505eb693f9c59bd79ec8fbbe0b541c4fc235a855ed3a49a9969475af1a808c23db26201636c09333b5fee84785a9d3012a8812f6718000e7a6fe6847089a97f87af4b5567be2557658ce4aafa059bc5ad9447cd7719195d1f8e524c28c3169b994911d5bb1750627f1fecaff46ab01e437348d02d6b62eecf21151288d8e29ee90c6012dbebfd1cfe7570f3e5ee6c727ad1fee7e8637f4c2fd4a9882f5fa0020d85909d58c09dcf5a2a1c274d05339aaa1cc47536b5c0eda8257a1d7abbb16d6d312dc5a019a4f218aa48aaa843a7cf57c043f8a6c6da4bce701132f97199298e9bb23c407bc53dc072710e761e3bb90a78f7e2970b1e0f196109692a15e9cee821a851b85b510ac81f4fb3351951c048835ad3b6171e800f54cd409b1d05e6106f9ab6862cead1c60d1f4963c99c7d789be74c526f5e4716e7c729bafb9fd78dd1e3cb3884f52b10c87a3190838e59411f17ad1a785fdcd676a1b51835fa4bc7051e102de8029f5eddeafc39eb79ec087976866cc695a9a4adc7531150b79b3255c425f4ca8576f6b9dc19de66119e55578e58d7de825637e9b28464d04a4e7650606d1ba1107a7ef8e80adc87d7f8ae25c9a4da24b83ad6b6fdd9514944ee09916d66110015f26df7795fd2d52f738960b2eae23db9e02791f3c2850019f242755591536c18773a521a795fb29aa76d94c4ab8e8dd9ee91075ec06eb94be3d798b38f71599a816a7545f7b1c4ac0cc13e99674d99cabeb98379637cb95d4b3f57f1a0f93d0ea984fd765b976fd60c2aca8b9e9df5feb8f792ee1c4da4c080c05fba86399b0748004746057f38ab2e10c525c1fe06d895d1b2276b4fe0083d210c58afe107f6f562df1f85b7a38dfb09caf261fc50fabdde7dbfc0f21fb6c8c7ea667e5de8602a33417d6cff2510fb8c286c0f0778d7a9843201cdd2a83ecc3b666e722ed0d56ed80aea2ba451b697fe7a0d19add2f1d1598ba7e2701e12bfe22cdb3bb235c92bf797e03255adf168f74c60226de3dbcdc4f72c9f58e5d50c529a373bb6abadf9e874ea21719e43e70cfbefb9b64fe8176ce0ea54db93e84a033afce27a971651412e827986a7407a86250630156bb926a7f56bc396aceee18a8ba6d09c8c74ba8821239b035d59cc19446e3619bbc1740c914b3c08953b7b4f18cf868ae05bae33f95806862502343cc6722c21d493981130e35eafe1606fd74ed164d4572d94bb139a6c7d92dc5b4747ac92cc3aa1fb4c70de8c0b15f047a9aa56fbf +Output = f9f9f801b923efb5d11392a59abd9cae4281bd1f2554a5411054875478bbff4d + +Len = 88768 +Msg = 66d9f6ee0ec6c30f4f575ca2bcdca198d2f67fb494aaba4372b5e9076f1fc2748313971f3eee2173af967da5840d74eb7246ffe9d8370a6c9f2f795b646a69ebd9e3b8116869c73d1af57e45b83b919f307f02d439aae8313a9d6ec068c51e772fef60aed45e3dd7581b69699f8d811dd249915d012bd9f90da6d11dc5586a804fe297ddcaf60ca731b245f9822ccbcc204eb36c76e4672ddef3a959c14cd46eff6265869159bb176d5f1bdca93ff713e43370e9e2fa1933762bfe5ea5c9e5a90817d39172aed28dd3ccf2fc5cef8e5ce4a3d0bc8b9877749df7d813b9f6239932abe8e7b51dda732ca1d240e364170ee944dccebae40a581aff406044fc18a644c3ad6ea2d05a304085c49085c51a90bbbe9b05b6065948b7ea3d2d90034c39080a280f80ecda2cd721ced48c3a1f4c22ba164ac927edaa3a61d862e33246b8442563b3999ce2cfb91dfbf43eedafa9e6e05386396f4ce76c0b18e886b18e8dc1bf66403306fb81ad2050d9e403510fced75c9f4f050068159105a5c1a9ac1e477e37a09752acaa7dd2d769c5a78ee6a448397f53129194fd9aa782db4228d59e0ae0b90da97eb2efdd978d2bffed972edaf00c8dbd85d2ebcf07671ea38b198d0c6975dc33f801cce6982e5c33f68835368b30442f668ca9d72c3dd0f55d51dd2cd8ba4e17a2ffdb98e332a16c3122800311d1c28fbb29fd5c1eea3a5f24e756113772a97e0415e6987f8342d227cdd9ea8bd94d060d11b003e658a40a6a42c0648d84368fa7a9b3917407878c5ff20693002f2ebce3ab8a768b6d551db6cae3cce3d83d7312250c29cba8b8c361f7d0a578bbadd8c561525d151397c191e787f240560651cdefb7088b4c1c9eb646ffc9fc6511833b9ad25f8d31b01e8201737dace6d85261717cd7bcddfc46e5455ba69215a4e4cebfd025faafe95b118070163070fd9e5511253e6642a0e2765eabe545b3ac240536155764748aa1c6cc4665d2dcbb5c313978e49263509bf2f8b92d1a27726a6968699cd36adb172a4dbd119c125bb47e503f7248285499e07a4b271b593edf81bd939c507824e6c46c9cc396fa24cfc2be408f8e79f303c84e2a7a4f3258aad59e5d00e286ac351c8fad22c77d60d588ea44e46e3e770132db1ecfbe9807f5ed718d70927dbc2dbb20b6d7378155ee553e1219ef5f26bda789efce717494e5529fec9367439cf628858089eeef4d40b32174d519c4495caec0641e6faf47a48b91421269c194b7eb28d3e1f5b08ef629fb30c0f5562709d0e84668c02f685a20ae5794a0dfec988d6f778753aa603640350f838afb0aea94695d536dde3f2e995df2c21586ebc295c4332210c70d287e35d9c6e19c382782ac71887da314497f08dd44cf9cda5d8b8ed05a35eedcf66e6456300022fae922174aaef8652ed35a16dec1d60a0190f83417d9c80714c5952a4d6af1739858fd13af6ee70ed6f3b0efbee233b9a8846320cd44d4f9fec07df0881cbc795a9b9a096a70518554d10bfb444eed90176154b9bd465eaee20cad1ccded671a88db815f415b3eb2f096f2a13aad0c76954e5367ae85700d08d4ad18e585fc40693f3b7ffdd8b67df26aee4c66a999556c73e99267a911feb73e064a988d82d246f04fcf668ec2cea174866192e89a14e2f99da2b15b4a6938723f1cadad02b8671545b94326698d46dd424984121a9b4008f8ff54432236d499e0f5ee8c83da14d7a6a35e47b4a229ccaa6c05d01ed2cec781121808a14ed0db713c21d30d20955ef9f77d9aa9f5926a4732dccab0a1d35fc041c552cf97775f7b5b0f29a87231d1c61c69c6536fc9dfa004d3a7d7f099f83df522cbb5fa104e86b980375db83258967aea74b7f615523d48b00f9ca766b88197f8195a5fe2cf18be3ca533dade1def79c74cdf73c0eba7683cac05ae83ca138d0fe4c6af360bbbd20a1a33c07e455c81caf5d2cf10d465ca3f231ded38547b412fd502d0542af65db33e645259fb62fab91898f04e32ffd8811fe94ccc7f4219209315ac845351c700bace79b9658b4c5d5c3ac0c130fef8c94673b48972ef7fa9c7072a0eae5578b636791be4ab5edf7e6abf26b3f3e994e040c20bb5560ada9419e131396489d9a0596e2123f6631ce4e92f096aa648138fb6de3b99521b92a730aaab4f9d765085ccb474be6e2369568292532f6fa4dd9c50d02a7d8fab0fabb56a7f9680a2462c3753fafd3a252f9dddf1eb4a76835acfb59fc2a83441b8674f2995573697245e40549d2883f1d781a153b903e470f2f28e53e9646a66f7a5a7f0d5d9e6dd50e392be44867010c7ca77c1a5a2e1f00dcb82f589f759a1332b65c62766b9fa3483d399d7602a0969400642976e948d13243a8b89aa287ad5c230b47344d7783606aced3dfed86424abf7de77b026ce6cc35d20d1c500794332b0c1a1bc67dfc033c4c360a8a3aa5fd2f19d2db1bf3b807094b949900827e6438ef5991692b539d3c42227a6b362847e9d88a1b6855db7f58760d953690b26bd7258439a7f8409ae53137a3f2f14fa77a2a6bc0aa3bb7a19dd1c69554aae6c6703f3879057d3978c1a9d41bd3f492985aa0064f43fde2fa33ff6e1dfd4961e0aeacd4e3f412b4d35c0c864660d8779705a9c82bb824c405c54f429392e4da66ecfee7ef066139270ee9ccc83be5952ff5c84ffa8938f130cc52129ab825b6a5b585f01ebed13ce074c225f5b7d441cfc58c0c1039a2f127b3982ca7df546d4993027bd78ffb36ac08161063870d23f2df556b214c1b2a3705921f2f6b1984aeffd4e9cdfc47ccc643661aa60bf8a235adc50b9222ea230b4cd058a5fded8362768dd856763f55dbb122b311c93f4304db5b5bd77098620103c367b00a38fff0718db5f5905a7858cbec685b41499cfcd278ea8597be7db494ebdab2129440d58b65014fdd118ada1e13a8c70690066a1dae26111ac4cc92aaca1040a987fc8e1e9458b9bf0d23bc024903098bbb25f9277b9d0e6c33d527afeea6d0317c9986c5ac0ac7b895d99b22fcf577331352068a61cdd22e842de00eba0cd53cea8e5bfb0cc5fe5c53f2d3ea9ffeb4af41313eb0e11700b45e4d5851ccc0e43e6a617a4946e8c20cc02612e3b29d3652bd39ee258a371ebffaa9fd13976171b874b96e0aeb01b75c52d9c498c54f70cfffe2b172bd7c808411da4ace9a4d023d81eca3ea599f42cd849455645883f87981b215030b75dab31c34cded46021a202a71c852231008d2fddc61e0dcd931d1db2e8560f4a181bf727002ea3b1f2e22c6ef27ccc8125dfef7186698d2cdb18b64ce8f16f98e2a2bcce2666fea02b297ffcb5ed4c904c6c438eedfe6cacffbe8d7088e8f8aaa186a842284c8c33b4c023d8ce9e49675e7a51bb63a75356e758c7a6330553873f10e20a6ca9f67475ef3f8aa3576c0c41524180502aea307c2d8f764e0e2837a28893ae5c44e36b57fdfc9b9ee25d89df3c3c651c50d845a4870b6942cc1ec3b436e2b65ee7fc1f403481922606c3e61e7f6af32fe1c69a48ac63067707de325b61f8abdc58e99819daf7f7a28a4629e865f2b1f2a55b3951e5c0d55587108c8153fc153d6051decb3885537c378f5c2434fc27cb644029a57a4a5f45135bda0d52177ae9c7ddfa3d96542c1bd54686ba35b2de23e51c722eb3282bad756723e7a77164485534f3563c8b0de72c13b091b03a5d63f1981dd2d883c2f673dd6ff79a315ac2d2fed10071537b48039ce193edbc2cf1505c307b3082aa89d665c6257280e5bf05e59c227ed400a6238c21a73361d437ca0fb610044e6dcc65a6315979858ca7b78f5da3ab352369558978b5cc50dc9b2659b4799c0e9229ea49b77bf569d7e2b0a41c6d409f6df95f3befa6feb2cc872ee4349e40eba2072bf561732f534ed8b8cddf67853964bf094c8d6012af2d62a8553d67380d24cef25336296f6c7af197b2b079c22c92211d615bcc506e86945d57d8bccb9ba0e5050b3e85fddbe29614fa968b3e9f7f8861255fd2ff185f8515900c8543bd9fb62cc4817020c90e2df94d9a8542bbb15d9f3da35b68d4409d98a8e1aae69da8a8312608d0215e87200c55c24f16a7b2069d542f4dd4cbb244ad485f13fd604323dbdbda8f48c1d4d516b718d2028c0aed2410099289253ce21e188fa8cf31f88ff188ff93dd1b7db6de1ea4f44e923f78fb193b10d00967dfb1bf7852a63650553cd880c628930b292e306d9e41e0db11ec18cdb1f09fbaa32fe622f7c897d2db8470640e71520598cc957bb9249f661fbdb5c55b3310bd965f3496807e7d078a90fbb355ff80f36a81f6d62b3ff6660a37972df8df84f8200b52dbd6101075ca2a1f75821b445d0715fb87deda0e653922670c6f3d22f4aaf9e7f9dfc677a6041884b37d0dc6ccd7504b95b83d0fea1646cc6ba89513389af29cf985e8db229e23d3752e1d2fc842fa8f08a3b0207e086a6f518b2f7f4c5abe19e2afbd636f0213b4c17d93a7d7b0da6ee8867a69a87758f7c600528db9502505bc458e381796b0cea152b6558389b9913e48e413f0cbd60dd3ef476506e6ef08902ea381a2c4c2ca1c95cf6253355f9f11d33646de6dad597e405730bb83e3cb6554446796f3104f3a2e26f5cf1c94416a0eb829fbc3a582d1dbc716618ecbf6439eb9127d8a63060405033780a6201f50e1b1e5ce368531d4a8e23e7f716d3132f449a9def383978102ae50ed3ccae0cb346ba1df2f170d8e90efd19d9391223b3e3e54429538a9ba0e6e679f445b2de3ef2c86b71421bf077935f6435c01746564de3d30d84ae4b50f8da41c289cada1fb3dbcdd4e6cee474dfdd6fa3484cdb94f7289302480f27cef5130ee4e52090c3ee66ad946c04357f28f984983e1d63de54163cae1a378179403339c2048e82da16eb93463e4663e523366b9b1e136fb0f95f187777b218ce8ead4af0445f30a0c1fd0750ca2fe04533165d1264c95fbb6b45bee4fd092e5d1503cae6410d2ad683fd824abc0b3b2dfd0bf194bea9d44c0e7ca88cf6a762a397b9321a7722c1e9b17f8caa7072f4edd5a9c198682f4dd177666db6011736107b400913533a9638fef59ee683f17e33415235a40de42d1a1a956716b8c31942343ab85761bf2862a0f221856301676ce4a7d63e2c4302548c8c3d256a459ca7470bd85d2f1af8f56be7cd0d9a1d2119240d1bcd2fd65e3f21ad4848a21930ce4835e19b17f8784fa458f9f595cf3bb684148ee7a518a1389e8b21170cb86615ac3b5ca7b8b236ffeec820c3e27227d38930a80418747bbf47a84016f69dbd1bf7aeb1f98de2b5749fb7da0f0cb075eea7f3efa8e6943e51b1873daeec53a64f9ee27a170404645c5baaae1d7104966674d0de5cbbd2798e60aa72657a54923f16792d66b791c4059712f595bbd909d95459ec75f4c9add3d97476c11d2b3158f2f5448f2505650ed673490e59c860c5daf1a2bb2de45bb08097b3584141e42bc8d947f6b8e9c7d6ae5e20ddb73d1baa7d2a8962c3bd03a2fa66d08183233b35ec87a0240fb95d0b6336058a70b19af5cf77192352ae2629ab7426d35f6996f5e293059d75fea50ba99d7f9af2c07f462669ca63574233c328325ec4326f87ea5f8db0c9a8243065e5f6f785d9d4290a367525b94e13dcfdd543c0eaa8bfae91a7da6a3ef2c46f88bcc4f5e1828738b0642bb37ba39d5238470af5ad2ed45b7a4ffb7a740249e302729a033479342ee723efec40f4496411020a759241481f02dc836a0f433f1b61bbe897d54a756c0d1a4448afcca253067ac4c9106c7579d9c1e4c147321e89050d333c6a62c58090abcb410e7922df8735cc58ce1d06ec5d94a218d25b62ac8adb0c695a5eaefd105ce77de396554a21a783bd21ef57070cb93dc9272b96066199d6973b9a9c421aa22b47c5b0b42354647d5e923ff02a65c43a5acc2f431707ee144e74a307f00e1009473b34ca0b9de12bc5b5ab5ce7073a1a6617d2d46f0c3c58079c048c77792af3f49abf01637ca2117b029e17cd5f8f4043c0b2d46edd09145b183b9448da578dc89aabe4bb5f2bc0f6efa49b4ded485eac2d4bcda708d8dba18fb4b9f4a02a393b8177fe83e3e2bcc1f34b61d92ed9c7e7d41a1aa80e200083591c580b691788e605cfb94d796b5754a3ff15ff92c80e8f4b8a65d25b7345690abf18eda3b3ef208e0faf88ae2a4327883bf231b797b51afa2919b67f46fcdb2b39572bde63fea390b44bc5e0a3e2d3068eb1101bdd3e137682b0e4f81fa95220f7ad4677bc19b7a45a0875cf6cc8bfa563bd0b2ded1bf13703c5ce4461dd56829685ae1e30d3053f6d8018a8e95775eb5790936c6bd14cb248c2d2f2b1fb60d6727af32046bcf4c86b2d3f2bbe317e5ed6b63965bdf07e8ebe22a36194a5f98337e7962c822a1ee5ef7a59c63fc931666da87d9877ec1f12c08fa03f6e4f891f436617a167ccdc0e46f1e8e6f29147a888d1c0731e4696e51c4469eac36ab8111170e81d5bf7b4b81e1e7d2c8b2c297bc4ecb29415728e7c1dfb60d21889eeff4e9297fef34d5159d16a87054dfc4f868e33c459e2026e5e421f15a3f22f9630474597d4b2300a8a1d7086efdf84322f615166632878aef2251a08dec4be565a9804781d1d4278cf3eaafd6aa44669fccac0191e4d37d8ee3396aac124c8a7e4bd49a96698e7047fd1746b0430c56f55470a7d09c4e26498f9ff8c1986d0f355239fbc1fb9b036326287502af983aaff429ad2a423eaea88e4cf1d366f69c132777120c6f410968d5e3e3d6d8303b52169ebea8bfec3c334808feeb642f5b9f3056867eadc9aadc74123933a51c816821988050f9a0f973269ac7107a607261d69e001f9e7b0d496a7b1e22fea333797ddf9b2cd9a20cef8eccf34a90d009e1811627f8289e5b361fe73ba9cb0f790b913bb84447399e2fe9642ba18ec849a89a87a410347cbb2cfb1d38d3f4a67ca8c7747f9e2caed7bca02b161e5c90593d87b91e70ab5b56b266e7bca562b164d7865197446e49de1d19e95dc8e2706228b2743e1e73845450c80b6f29fb775921379ba93ef752dcdabe66a7a809b08cf28180ac24763fdc8e8952fa66a842820c401a5c92ad11f87cf6699dc4b797fe225ea40f8a9ad316f511840564525807220a96594a7ace5b8a28bce726d56ee140b0a90f56c98a2b0cc869372cdf0211ebfdd7476e45d02c8cbe252cd64c7d5cd4df585592eaaa435b17c839c53988c8ee81a4cf04f660940b1f6d14da020c986753778945e57c856b646bb237463253b3ffc7991674c6bb8eb35c493ce163bd8073ce5378a2481ac318184b8bf048dac2dd064caba94ac89de2b97004d0caf2a8a927593208562aec9c98acc81d1187a4852a90cc7c34e4c0144e3438b6885f665d48467b01eddc6c57b37cf6b7d680e05dfb0f80d5cb3680b1e13ae27de62d42f5fac05b755658cdb030641ea5dfedfecf406ecf9c58e764213b2d090c2c84c4da056fdb4adac79611d90b46cf74f78642c358c1b9231ef5cc24b3b64ba28b757431fd0269bf5150e1741a791dddc6011e4a735f157404b91b6374f0228f6bdc2b460fd9ba4d1d8287ca38bc776181f7ca9e67b09693c13a74c21abf793d4b82680b506625ce54b46da30e19c54a50eeb087ddbc25c77c0040074a2b38f254ed914965b393881d6ffac74397efde5c7037cc7d8cab5a5d91e8fbae3d47f7aea710c8f9c8eac4a13996fd803edd66cd04c737ee270e928d77d266eefc8e9480384b50b2ab14ca079da90e6d177829cb33c88ed99538b8343a6810b271f610f226aca93866f7e278209bc3b129a6717d83a29ae5df0f13796011c0a1a265b52efb999a34017d541c4cd5e2f57d50840b7ebe23bb0c7ded857334406399c4c9593e7ced4e828d671aa8bd33e0195fab9eac82f10224698c80fb3b56a15efc959e78bc682df30e659bbcbc801b07b92e5e9457cb6330ba39917e8dcb03f7f3612330c1d47a5bea94c6113b8f4d4f485572bea67a86375a3ce0869266306e937510eef3f8dcc3083dc42ea0291ff7f26802b2d5c7124130dd969ab2f1d1cbc3188e3bba9efc3250a7bc9b54163909a1ae38f94e77b0572464db4355328d146a93c59d7e8c81b0aa1cd7e1c01e428c3c703a1a7755077f1e18d607e3f30d53722edc9ea78b1446fee23d874b09e389abf6309dba28c0c30643b071c4faf88fc231fbc69d635dfa344215155c9ec307d688430b7eb7822bc42b9006600ff7d142e44c9cc8dc03d6348487145da68b0ea56e9aea2acbf6be41189f5020fcb220da8ff4a891beafe2e6f0bd0bb5eae2a700ef5fc5282cc384635405d66a88d08472791e725ed0082533cedc82cc2f71d8cf55b721dfa292851326e920a77afa05f2ebf08398dbb7a701650f010a40dfabfae6cc88b7f50bca3ad573b7409bd7ac422d9262a8a763703afe7c11d7e4d52869ebc68118ecd55abeaacd229bb310804b872d97f4fcb589c4e14b399be2fb5604abcd956a51993d89ed1ce9228a4c89f341e9abe6a255f98956a502be03f83db470074a15eafe7c81e68b953ce734d023a2ed25e560eac86fa5b2f3a80f75e55f809f2b8180ad1e90dc3fad50936f5cc4f3628d58001cfe60159994c1ce1957ee24bbbd17da4d2b9d1963b9c857a636bc7d6f6ca94895a443ef836d72078d9a4aa4848a3dc287ac8fe31d410bf98164f5853d483f01fac2ff7c9707218478b6594821195cfe03a8508395ce8141a7f05556f4ac82f3f65e7e01fee9380b83b40558baf2dd576827c741f5e792f9c1e1c637bb1ddae52f82a7c9df9b1d65569b351b799e26955f31dc646215a6e776402f6fba25afa04d35621b63a63a5a9873d1da84a4a1808fcf773606df25d56f1477471a4b69edf980973eb191f5b1f144c0dd038cb5dfa10880fd09cd77895465880703177092db692e7bf3e4b8340b17ec6c1fdfc97c3ce5df02936704cbcc3c49f79c122d579afb101a4e28eaa98bf33ccfff23471d096c7d8dca3635657fa0a25e0ec30606de3b2363ece4f2d91ce1984dcde3968bafa740e5d9c1701d16997b8680b364655133509df5a03a8c64e8e830aea41e8ed79e1154e6901ebd392fbcb51b68b03e99ea801291e429890b1014beccf047ed2958d9201a2ca80b8f6b4e34076c50575e689908e639279aba6105404f4e79724cdd7e929c1c74d0c154174b6b47ae7849b684c81f269c8519e4a1fd5f471ce3e935eaf295e8ecd376f200416f7f306b01db2a9a6234f013cfa0d13f22629809a76903882c1977de574ef1603d9e40f72fdf72c5d7e98c0c859d7e4cc32755ac2f7fb39b8a367cb70c6fd3eefa2c45e37bcb4393a8d0d638e2e48e6e681ebc942882e075d6c765273c5e8c34d1afa7f88ca6874afa6e375f8f7cebea3ad033883b77745c395599f68f21067ae8b1cdfe0b782533f84d1848336d7b0b60c4235210685699db6780ecafc2270867b921bd9f490596c7f4dfbc77c028180282f5b84e5c6e74e38582d14148d92577500afcf1220fbb92ebf683037cd8584a930f839e5ca4347937076cf0bc031a40fcf085a90a2be97fbbc3657ea975145e7edb7ba76fe023c706778661258d30e9483b1e6e0a416ab6ebb02a9050e69566cbbf67129d0a87f2793ae73f8b5eac9ab95490e829398460032399e27813208b03251086ee0aa92519b85730f760d97dd9a1a2c06ffb80a58b867b1c29e400f4ad743fac6bc8d1866c5a9edc6f7afeb72f8b1e9ee46fa6ac0c4098e66b417bcb5114ba2c1b2d473dfc8683edfe946273437bca29917e3d9e0eb9b8e64712db35776d49ad071f527351a5d008a9974ed79ed7700a7d0e8fa21759a3c7c43f665ca8e7b6d735873b50f1204bd77a690a0bc708d6e9b008e2e1b188202febb065686beac853af4e4bfb665dbd0278f3de384677c56c33557f8363aef9c7c34e1f8149de46c97d5ac79d38c6ed31ab1d1286a48b043e0ddbaeafb533f43654ffdecdc92bf9e0a595fa5dedc2a50b1cd0ed1c68ab5d054684b68d307fda24a6ace8777339a94131e62b640fb8ab38d2f2b8231a41966ae737e1465bfa723bc23e87a5cf701d942834a1d92612c861d56cbcc243b47814f7dc7502bf0d8620af9b008066391f809369a5e5b837c42e2e273e226a6ccbac7e5abbe8e21edc7e75ad9e2fbffa75ad796c7fb04f8f6746e40a896a17d157d9859bfb214e973efb1d5aa8da621ce8c4e225776172827952fffce4c3d24be34412867dd48bde723fad8c65abd808406dd77cd521aa78c1f988e79655244239943003882a1f5d40f3302a1ec8a825454f5e59e0177dd908e486b2e847941e1f72e4fa654b947a72bfab1c1c595adabf1382a4e16c750d16ba014522c2ab475e8638535d5e729fce4a284aa48777917560484520471a7cb32402888cedef25be7733f6b68c3f331e3dae9c017986b130dfba24e5d1f38fa7ca8f636df1ea2006eeddccb8fc859e283f46fa79590fa2b838df2a783188acb953b3be0ff524a100923fbbadd7cb47b5f9f74c564c9acbd512bf3d2090613db3687381b822240e720c60acdb449a988c13c97ade7cb0964f156346271607a85bb0d994b1a072d1250349888b6c79f87734c46c5a11d86aedead22ed3ea01577ad4ecdf42969650e12000350676f0cf3c04f10a11339baf783914db6d35d7b0d77bb44ab22c18f56d0b8f9d918b8786a42d573d4d0880ceb9a932373c1e121d3c4e3abe4b8c8127936bfda677d3c7837754feeb54bb0f2d75e333298ace39046ff4852153db594d19e8533afe75372f7d24effd7072d035778f1f989d6dd4cf39169d5d134426d1c82b9840709a60f27d42315ce6554c4e8654ff6ebf226be5625c8b58d3ed721a68dcd4a01369c8354159ccee018e0ae169dada92351587aeb26d56fcdbfec490c1a31042300bf95e8f0fc99d08429254e9cab8ec4a6faf92f1f2062f72a0a59b9a26530e0ea77bd7300c2f50429c6d11cecca16445586cf9e692a4dbe1fa9ca3bd10a5ecf766d406ecf906eff8c1227ee0879ee26df7454b5af637e771363110f0070ec431708e558a7e576173dc3905e6a4b64e0c75c2f015c6c73b6779ec4afcb3977e05ec302bd4422990f8133b0daacaf29068f96b51dfa95dbf0eee56b9a9be4702bb0243ef90ee8463d28eaffdf2a25890c9acc9d48047ff5badbaf6c6becd27389bdc4e0b872970c247761d3f87d4f33779b663e2bf49b8f78b0854d7058b3d08ed9fd9e6819cf695a1f30d3a3107c86bbf3ec1e465578d7bf1fef956449d935bf8766de846ef1dc4262c0856b7e3e115e26c6c403a1888cf27c46ca944ae3117058791799dc9ee381f4a95fbe312451e2b69eb600635b0db7583353acd641d265cfacd014fd26fd7d3743d917b39fc6ce25dc6aa91550d882363dd6fa767616e45f8a9e825b3aa8a8cd3878048030fe94f708688a321a8bc788bebb2996005d908a9ae96e414a73a908ffb311215857bb9c8b26103418860bd24e76a6cf70f4eec346374579c6dcd29cf210aa11a660c6a90d29c7a5cb55d3b555afee8d389b43ac150e845f4042d9cbb8274bcb8ba83a8ee6fa3d01a38993747cbd8d59d7af53b7afe5b75c47440347da5d82d978ac8bc0a10ddcd2518fefc21c25ffbfcebf83485f436b0b3c5f0383a129cba60ddc3ee0d3db238225d73d10cc7fb2299e3a5700abadfbe690023ef1d522a2cbbbc5c851f7e8adbbc10dffd306314111b6ae43632d9c0678f2dc3a24bece84a4f2e7bcb675ccd7c99382cc9b41d12912b889dcd24d83f73cd52b79aef6840dec53b08060e5ee3e461dd417dc17e5e6a7146b87e093fc6a9ca79e71c2f4f99aec4ebeb7f3b0d35dbbd0706617e0d5e6494ab1d910997bcd22fa93b7333285a84f5470c7e17ef292955bf63bc14527b463dc0b54e4b6789b6a3eb9be6247bed260056534aca8e2895d00c40d8aad51dda138c66fcf837941dcf46efbc2ad1b95c8c21a92d7b729be8d6f785fb691fade6bf1719e5379047cf5ac21f3e6cb026f041aef46d5321e8ea11871a6e79b79133e869b74f31f80993ed6713b413a39ca8c9071e537925796326c4e77901253389378b26830ef94333303eb466462f834ec9340d271506b41bc0b6d56329f2fab0548450c9f51b5b75ca4ee89b2ede43a8ec3bab31514a03da8566ca761ba54d6fe65c1b680ee5ba22649f989cf337447fd726deb8537bcd671ddbaff8fcc6968f951b71aa82dfc802a53aadb2bcc2ef9a35fd90064320798b311d6d32f7dd3cd90bca39d57991eddc36260d23b108aac3acc6a8614ac2710e6935ea6c3173a712ed715b321a849279be6ba237fc90dec0e48b0e1290e81cb86c2a10eed50f3e05e616be098e3f1da2e6125238c2e2f45a8753aa613c1ae250e304c6ff093a6b799cc34ca2fd4af81d5622076c2e8752593a27649576e12ba075ccf3e8f57b9635b77fec448e2e89b2b5a3a81d65066285a70e24f868c35f6ecb8981f2c35a2502e053863969723a2bac9e1d9192e78ba67610d2d0374ae6838c435762985f81a8bf4503c7b79e724fe2194e10dbb334834f3556660efe29a761025d839f1312effb604937a03b98e5001f23e468f1c7e5d886980213668ea1f2cf7b9cfdfd409f3ca941d14bd016b6adb584546229ab94bc0a80ec6e0a7e3be6b199f4dda6747f2c2ad3dce1e5538a92e559a7f1e44858a1c9f76b4872623be6b19fd46594145871eae8a28902b72856b68a263ca806f930cce3c8c927a06a99d67584bd518af2b3f166696cb0aa5aa231ff196c004d3e101a2e4c18b0a290a828044c0e653c159b48377ab17694e61e5ca0c8a87185f0e9bbbe3c5e95ce75baaf327480569489d0f6411d81dddd957141567a198516d765b87de3c25f8ee07874e8433aaef815fb036e99046ced2f44e80778e7c368bb2a1851886d95499b897e0f0265f4d283c478a43861ab2d7c3e579c0b39b3e364e0e3247286bf666c97d58dfa28b18999d25ccd40c12203440898fe7937def09a3022ddea36654f1c47824c70ac6c8520ceb7d0fa4b5ad84e49b3130a0bcbf524c2dc6438a5106b73438c32af18ad2edf5f9195ae28da1563aaaec508da025ccb3d19a1a4fa47223833fb29fe95fdeca02ef304a47f2a204bd393fbb9cf0c8b5749e17c765e93dc35bed818a44be22729e3e4052379d363ce6b6a9d670f70ec908f3dddf5f87b01308d2ae6ea61e64743256d80743e5c44b31b399258c5b6e53db734ac6af187f9f248f97d180091b4b69c955de0f54d2dc48a0ac4d41767e02869cfd11d703f2d43964dc4764f6ad64af16484adc72f85c760e41a252d0a44174c1534569e2c03ea1f2fa34b77f916c7cce2dd23db88b48547d07c92302779d3080ebd5da2d5e4b18ca602e19fc6daf4d418518c5ae322c6e5d4d2624847e72446c25579a5c2395e85bbc97ef05a8b9ab20dc62e6bc53752e2fb04de9cf1f6d1ae3ae2f4cf7c68bab175e06b923c92810ec9255337b85bf0e74afb4e55ad0ea4e77d4d14478adb8db9dc30f0acf455718e555741e543f66a9ccb9dfa9a0397639a937f223674f89f44f89f54660b3e32ddb843409eef7086a885d329947cf9d76e855f65c3c329b7fbd216e1e908b48ba1fad09a8a42310db48086246b9f9cc80c5ad42717fed59f86717edd5d731e468324e895d0c6a1c667c59c3446f4e8fe1b1ac8ae59ad631d8cddbd91ead5e6292a3d727b9903287b6a5bff9f4d04464044cd2244b2593dfab51fbd45b6b473fd3f4d55920c802ff2644a95adaa561c572f7cca2f4a89cafdab3e6441ec9b2d89695d7b2352c51cf4fe9b48a88273d30c832fa7b748c572f013429cccb20f7c975173cb75925a5949e055fed600e1d425e8eca326d5959d9998344c2f309ac8ed9e9a2dd2f5c84cb9b180a181492a866a08bda5c21882b3c2e01b5cb390c37954f9d78980a3965f0c192518ef88d550a588a996d53a131c3193ffb39df712f7940a34c7c8c34cf909c24a4b68e36b9c9c13b85ca562d141af5ae83b388f10ab7578b8d0f27d72817a51fa22368273d1184ff3e07bb9428803dddfdbcb8044fbbfec6b8a46fb916125713a85a08e7556e1e4610a9e67f05af7c3eb7b9df23750390d56de0c623000d2c8145ced2ffa95bf7b0bc35893632051b41503f70c6f13ad8480b48bddd8c64bfe8f8f668c89f57abcf7f1ef652140da5a645c21f676aae1f8f2f50c91101b57bcb30653ceaaded94e2f7dac06b4245a5ae06c63d9d47f9d12b287d7a96067bdaa89aafc1ce5b8a6dabb50d79ea432995f911c05dd0ff8ab7aca54344b5012466f1861a89fc3eca707a151b85477d45e0f80554e29b17fd2d741436ba06984bab36914a07fcbe0a57eeb679651b7717212b4fd88e6427bd9d1203bc3cf3226e12082ac2de386fd67e6a17cbbbdeb709e1135fdf93b485489116e268500345e825c6d0f95f37aabb7e8c9776dbf9c3ba8b40c3ee9514d71aa3f33ebfa5df595670f322720d931535b2c6d3ff57f513958a240a7a24fd83c04037872670bff3456e2d7da18ba335b1c5994be9b2692d27884d91f6b5e721c5e0344a31735daa1187c6612c3c1062dc21747dba6dce86ece01e0908ba6a17981ea9f6651010c467587e6b66b13342f15108d7e60c8d97524c25ce14b4ef0bc365e91a35c971f8a34a860ae56db45cbdde96e8f0f13ef4f406e55faf37fe44b4307234281209bd41f89dbe2cc3fbf68e14df2f7fce4b265eaaed3c3cb60078f708f5c2b08c4068efcd25f3a17672c6deae2229c6f64a91dec2adf241a1ae0f0879b454639aaea1f942bf59e7e7c1344c0500567afbb5ce00d8980052ad4f7d74ed6e47c5bfbceefaf3aa3f648a6fd542b40a340061053171474bf4e41b7d5aa8fe543b3b8de3b6615aa732abe0c7105f35a0510ba8b1728ca92a2e7a8eb01d210736ad4967cb8ec8d216d2228d7f7bfdf4532bd14562f7df78c34b8a79703b89a265fc83efdcde9e04798c6ce2e17eab8aa32315c96237c63097aa985e364c3f4a62c75f88802c5d6c6fcfff73a5aee46300e52da767c8fd5b27ea38cf8ab5ae89cd9c50c45e0e83743a1b3ec2347345180cd0ad61cc11d162f478c02fe60e73cb06c9fc15deebacb6990cbf6106722a141774097b07a8eef27dd4e301c0cd1b989efea60f8b4a45addd0305b294021fd1c15dc665b2f49254249cf5e7b368027d06990313dbb0cab4a69c863985c9a2fb9aec58b4469b8832992f9d443665c4e2ce3787c558a5b8756647d588243f3fdbf4ae54e95af42d084c0b2d99b24cdf546648a8968aafab6a9c83680127b9630d7f123f6738a4fd3fadce4b6abf93be6c5f4ae9f9da14f00ec9ddb256d8ee990a8ac67cd0881475534ec76b49c6c0ee7529bcc081cf9c42dc7eb538dbe0456e4db8299197c1c931edafb50199606aec19562cc0a0e39c004e1bb88002b6343f6177ca223f7e399f6930e5a2dc04d833c355096ee9beaab4ee31461c8dc351a8c05a16833a05fc2a5072f7c3a43cbf61fdb6e13fcea93ecd374ffc62cfa01426f4cf9d4919f1776f2df659e8647086d342ec3297b24bced5b3d839f73ad502367958cce841d931ea7c3b9a85af38b5141d757c1b570ee15aee6a8d4e61ca9253b88633f55425c20 +Output = c30261f1b6beffc2eae8fe765b15a4443095c626368be81af6241de410eed7b1 + +Len = 89864 +Msg = 7df4ad5a37a251a20684fbf263c184d77d5d32867f6824b91175f0b9214e8abce3e66872168fe3db8a6de15bdf2bb1108fec36632f8548ddf1e9573d6ee451c7a20dc6de38f64bd508a51c03df4805157e2482a8e5cf2518d19f38928362a471c34f11c7253d4f398b13f411eb80478e52ec5d7e29ae820fb87fdbe3e82e49624d968f5463ceb8af189fb3ad8b3b4122142b110d848a286dae71875626b2084348c98aae7c0f4ddeb9319f0148e1b97acbcbe47c7dcbe0d8bb5d8513c455abbcbdd048fcf86ad86f75b10232a9da783e7fb31ff49dd970f8e82b1e434a7ef874b39312675d461f095507226b378e461538cb099c6a1ca0773cc3970e4097b91432f92f17350aec555f1c48d27866eaa7fffbec9d6efd3afac00d3b9b2f07b44342ece933072005fb9dd6bb8ff6c82e9ddb2b0e1e31e2042c7af251139f36b2aaec5486e45cef32a2171ec5cb391dd89fd543b9483a34c8b27458209d168c7af137174f51bbdf3df2d4ddacaec7ceb154f42b3343115c4c37b629f1621e71d6bf2c1e8ca3ac58ec95dcf9b95f2a41816540ccc4363ec05961464b0c8a3e4d8cbcd1518501b7c20930375c3407eae01079c10cb64949cab6d82ea8b93cff8865913098819465855a6eeeec65cd8d12253980d44fa6bbe12d45762640a0e78a29e651dcca833d09a8f4079393da9d3e8a4d840dd9721c6c845024afe8df80bba0623a03a6f7c8b7ba6d8d370855a2ce055cd59d9ad8f2d584a0422afb21528491aef5f75e188cf55a7f85c20a6722295f0e7c6edbfec783f5ded77ebf8de34bc6728a9e390d132c4ed2f91be238a7b7600d8066e30c22de9fb1ec957d4cbe790555ffe281ffe5c55f0ff02ad8efb8e0cffee96ffc2b8c4e49c288567c85687717ff5eaa7c15882655de73d733b5de0c758cc0706c838c3bbdb9b3a906616aacc419afdd747886b9f8e6890a3db19fa31b5d0c507c3baa0dc13d757661084d7fd34bf865af4f67e510d03aab3c0c860d8719d5f9747b6e2c1ef6d7a5d6a1995a0e3c432976c3b11164438ea279ed18b2826923529c6d61019c8de01fad55d4a43b95971110fceea7bde88ed73c7ddffbd3f5ff433b360af202aa99ca2e4b88c423fdfd05c721a50ee3674133cde3624e446470b49b01f1681af4088fa1ac3c248e1d7bede15b5fae9e67b09c734829149b5e7f8d02f49fccaa1437574d9f792b449d1cb1a7d1a3efb690e1fb77d4bdb6a18d33b6b9379b847bb12e087b4dc6410c24e53a61acf939f28cde3921aea59a1e96941808f36dfa5574f48b73ddabceaf5ae06e5713e9f41b00af3cb9ff692ada24aa9936509e94ff0590c97d78b03af6e81436d02ffc88f9975aee87ee92cd9cdd7e228d75b5bc430b0da9e1465eeea676897b1627b95d54f7e936d3a4a7ea2d69179c538b3ad9e72f7012e66e3c508aab48236f24a9dbf4c863fbe44930eb56717dedd1b9b652b418c3eed519d3c969305817244e526ba1b3d1270304b537dd9db9ff4f28b091726e0e24f66ea9c20aacc1407ccc3e73225f3aa178fdbf368a94d2b815ffb0fde9db579c919648a136c88c85c1c7f55d4076a6518b5dd55027ffd0026a673efee005a83eeeb838cfb52cc0cd3966fd8fc39d1e1f844c80ed7a85bcc49888e3fc219408f255fdffb54f7f65022ed2e073737ea8f3aaf147754dcf9de6e589265f723180a00d8d27bacc6a840be632266f17c14fb54675b25066847b4f9a9390909c8416305f8f3845f39423d0aaaf55ed790e184da0ff49e68d4d5ee9fecda8f56734d48a932bb8c08da64d39c171f7545f0b0da300b895a08cd24f9b5b60f6f79aeac296f18b31926247072e759f930c926335a0aec81de42aba554df77302feff4de73dc0d42a233a205b970c62b27ddabc982af156691b2eae79e71c2f55735c064b654a312cdbddd8505ccfe1db0ffebf3f2a138a02ae6155c25210bc76bc7abcf6f7d5c8be221318ee650645962ac81331895a8d6f038b5838741b41ed432118f1dcaac16860a3883e9af9b56b36fe60762d0f873884745ee33687e6436f18c143fa1145b2fd56cf47e4ef5ae39b69501700799fe698e310cc809ad5ffa72960f43b517c2561f4961229325b85c1d1891be9e2fe00a6a116fa3b9e33a9551a9d0d86b48d48f44584a55308e1da10feb38acf90cc0e187717754dd92bc9e0b41f94c280a0a31f10420a48ba1469f1b7776d9ccc3099552abb46a094e2e8b0bf8f94d9fedfbf481f7749f28f1bbacac57dcb37de5228c585ab741b16838d2d039412b2767023d938cc6837d11f5504f16cac880e5b43d04f8f07a5a93441bf48d71835307b573824e97101c647c30801ec1877a47372de4f0e0828931d8bce5500ad4a7329e4cfab756b37b8bc8b3dbda718ece7c13e574ed17e8b1d68f3c2f3b6dad989a1510494195fc1eda5350aef42b3cf206e2ea3148071b68f3a0103eaa1a6cab80c2641a97c5487ae2b49d95d68f20898a1cb2a69c2e99031be3ef9026a19054992ecedb047527042765011d0bfdb7f94839b55153fef034a19310c02b93b73845a2a6f72216266f3add21910ef791d5f3c288adfa08af7247663a5b43515fab08d6831b7b38a5107f9555be5a1d1c840f3fa32918dc35205fb5a2ade87ae8316522f9a46a4d417c781633e177ded697ed197b6f1ada1fd36d0a00549570ef7ffd20512e99d48a17b6e832a6d2ad4e962fd897cc8a92ce0ff1ebd9cbd4c3e3cb13575016646edd76be73e87b1518e2e349f58eedd286ce3a70d3759020e453c75a204cf8646cba1de151abea99924223ce18a73fad36aef78c498a3df462bdd92413ce51146eae81e1fa1351eab9dacc1e9a972e5522deab86c67e11d9cf909523ba4a9cfed5392712e5b55d72e01b30ddf3d55674cbdbeb02c2d7d84b7b6a7fbb8c48488e40d89206acf869ecb582166eccc83486a2351a82d71dedc406a9fd6df25df03d220b372fa8531392aabdd1538e0645053668de896bb6cedde1dd92bd94e20096095fab10705bc71f201cf61ea006047af8e58b790948f7f3ad83c42cec7b16236734523b8d8910ecb63df942ab5dff428a49c5f4382af59fba2b262e519f8d6fbc27b12368516d85fd8f5f52285492064ae4026d60f3444ca8423d446cb5f2d578a86c4a894b5975368f9cbf7fb06930bb72c5572c386084f8575e11a654c2ef4d44d82378dd512521bd35fd49c7e15c6c448333e250d6d31ad91cf897029a277a7b8930bf9dd1202fa6bf9dff21a6e3ddf7c0a63bd323b19045fe6ba735d518b0caf414b60375f0b0ca9e040844065170fb02008135b39ae93c770d6f65003d60a1ad220484ac1165a765e20da59c4fc5dccbf56b0f2309961b2b304816a8000a9e18fb13b7e00cbeab8b9a77dce5196cfb82d751b5de8817606f86d9d138fb2f1edc027c03be3d1c6593afcf405d58a705cb28cdc06290fdbad8738d1b3fa94eb24ada960e933d1f63f2948c768178345a098c37c53bbeb978da88ea6b2874d9e6f9d60a1f0b8728054ceb27f5ee127586d254382ae65bcb290a397a378ff8613b7da730eb93a5d6e7e7063a34ef91eb0a9a334767ef02a359dbf7a506d29e650e2aa0b2caa8139c8a75982bba22811553e58bee12a25df279b466035facf165fd95650852c54af94b6cf384fc136a850128d07491cc98090747e70db85b7bd48852569a0a87d67dc931bade813eb8aa80f893a39bba7b8790fb0d3c978aa8411cd617f0584c208a72685080d000f60651c967d366f862ce95423b087397013c49850b93d2aec3bfe57547247f069d19020faf8caa02d87e82b21309e32d11168d03c40cf00c3a7e80ed2121d4bc2862f05fed57cb6656f7e7cf07b95c99526065c6b3b43700ef56d3345111779e2264db2ea39d419f68cb42fd9b8f46883fba52426d322e097cc95aef696bde2915aef0f064e5b32a888912c2410447665384d10b430f2ba24d569672dca98ef97ca1f04993c986743081d5b19aa0b5b018506085f793e657eb7f04632d42f06bb1de479ed2b14218eb761a500afd47e1f88d9f46dd78b496d1b32344cdd0a91c6fc4756484255c9523a64f02046244989eccdbc277163ceb8a93817c40db2f6810e4e83f3a9e5c5573c2f26c29885230657eb48d5704d5c290809d9e28bae9fb1fc03e836894c7f6563c82d2ecc7e745d723a80bffbd25b86e1ad60ee8086f2216d6e6e580a105d445739efac0b98a557e4c24d2c3b783398db2d963013c359980a96fba353bbc9bbc18a52847d591cbc558b956657ca4c279f9061f06dec3bdd7b83785d8dd52a9449c140fd494b42546f9e42b3784d0ffbd4deab75b589ffb9673dcecfdfe4e89596e8a06098f67fe6d7023a5cc68be2db23205b0814230ff476cde34172726b87510659f591e13c3c38bf67a8680b2e90345d59f1b241d256513aa1fb6d061a31212455045d94df1c38deafe187555ce3ae9d8d78b66bb0a7a08cef44f9295f5daf497bd52397d24f7f66fc4d4af2d2993ae8dfe5492911ae0acbb4663e61a1d1a37db3b00c737b9db65f3536da69fa7d7f47377f92045d343800daa763394956a4c8e5dc40af44cd85d142e25e423b5626c17d8fba83fc01d23348509136bdb45a33f9a2e6d394a993c50b9aff06fcebd65f995de82f57dd7f6ae6a8efe266b36ec5d84a2667d2f7894277a5e53ca70538287331458ed490e7af9cf9a6c4ac1b8887681c29f468800e51704d376ca36cf324f353f92adce1b3095289dd64f8b34f7f925f1702bd0ccbf9ded81e1e58e8b05b020a2b8bd8998b81f0a2bd4bb0446cb73f5d181739636842a78fc1db2e4117d686a003372e80161d5e8a6e003e968637555c52bd444c8c34b4ba492a8d3ecf9c685baab8485efde78489170b08714605bea5f07b4690dfd8eda1dd94dda981b5918448968cfbe7e74be9e0f5789d542b608018d9a7f70b353a8ba6a08648d42ae8620457641f7d2499f0f245f4e157b12534f360cf49b55384c2cbd6f0e47102543f0785379167a658e87583e607f89df30ba897274e873bb18c75be8344ff45bf6179a76c1a4c756e179038b5d5def9b44b5f0715ce29f4ab32cce1a83227fb101181466d82d59ac5c66cebc914b1cd4f3d42360290438658fbf7c6c574912d2f9747e9a191a91c433c31248a8b1b1fac2976ae575d7cfaa2311ff544d3e4e3033bf418700e7103d2c3066b6004c2f9b35726f77afd7c57701a6bf78b17c9237645b05c42c3d45759a11349b3454e624c0e7897d538eca5a90004530408e7f76ffca23b7f767b21bf1f8145eb1868635f989418ced674ed37291191156de766d7aaf33f8ff00d69ee8578e87043b802d43ba302cf9ebb3601debb3a281070789495caf0dbf93335cd1b1fb8aa8ee5499340cddb3f596a88ef662ad5a4b72b368f0550d5c959958f44289f3f02c3984084ef392d86cf28ebe90b85eaf12bbfa7b044ad76c2d7da7e3bf62005dea878ee908f107f0cc89e68d713f5017734d5d4e099085b2f3caa0b9acbc991a7072e5b9d6a795a380c7406a1c7a1a39d9915c3054b890d7650af3c49f0c26bc6a6618f94c69d45746251ce306fb257cd24267e08a35a1301db8e1b31ad341ba14dba935eeca4c82894ddc66a534fa66f9bb10dd2e9a0f536a5f2b038494729a2c6e06ee124b56bba68c1f838baa117e9c75d764a65863c7f758102470e221e30d87d2807b5f8b793a7a56c83eecf32a470d3c3575e316f4315e3194742ee82b24a36cab7e996331b1930293135027f085ebbfce31ecc16e94bc1fd1e2ed2db92e5b55ad906b768ba850b372bd862877e58bc27d5eb7db9dbe0c3b7b61af7b33771a2e3545582dcd9b4de9e5a1e16d16c287e4e150e6ce1809c904df54e849109b6a46a121e2019de6f5066a55147e53b94aa788acfc3154046d1cac511a2fe707b64f9faa9b9a7337c0998f3b71c4c5465e8ae1e75a7de83a82d330dad7981d48a8a97f43d740c3ea3b23c2e9abe8d1d62dff7b84a42c3b1884d92b56830a29da9bd4de82379d269aef3583d4054300055385b4094bc4c32afd8eea48bf0e933a1a522bea4f1801b6373f608f207be64049ae29f9c3d016fe57750c45de0dfff39eb1e5e06049fbb8cdb1d77f7ffbeb139ae95bbaaec6bcef1d2bffc28290b673b3749b191d9b6b3efd2d6729963b84eba1c7b7d05f111b89d90433432f2f5d46d30ac9d8f994d6a550128e11e5b34a54f8b9ccdf7757b96af5ae454c56426af997f4e0b466bed48850f1baccf11bb1dc2a30194c6a032cef0d7ab4527a7255e85cc37e4ff781cb549a5b7bbf4aad41eda0db1b8bb99bdca28b09feda0e27a4bfabe700e02e76519676b05f6d55108105e71b4231e89a4f01f8cc9357a3daedcbffd007397e14ddca8080c46b92cde5c177613bb379770aa9c142f05fbe1487b9e32effa068e5e66d425d491ea63de68cdc5d56a4deca85f69f0db466df6d08f5d05468a96151f20b36966c1ae1f909d47060217aaafd4764cc7d5de16a3cf80c51d0c0d919f18700c7dc9bc4e887d634fe0a3aa94097d590e4123b73f11ccb59e23496a3d53d2bfa908056c11c52c23abfbbf0a54222a6f7707cfb82f684f98b0be0589e35ad47650b323b741ff254324005e21322163204ec1e1c830cfe090c2974952cadba6fbca262a87245df12d829788d6752eb0d45d175fd1886e08059e551cad3cffd1b8df0822c3040817478d67461167739af36aaf53ba806e4e5f0aa187827feedc135602145327271ffb0d199fba4e15a8e53e34c46b60f73b07cf2391b9dccf4f76f9bb071fd6e392b0c9549cba733f6313a14cbbcb70305663b582423a9bcab3488edc030e5864f7cd8ac144f71e1751e35a9f3fc4f84227dc8367a2ed04098ff1de0c100af7d1d6bc18089f5a97c5fcbe33d6583d3f5536db0379baba5fb16bd9b1f437fbf952b8e43bd0b5cb2572ec0df2990e1f8e8f0cc6fb61918af3edcf68cf3b7fc7a71123adbbc18f331146a736608f6a502d1b300634c62f4309e34406ff8af1574933a27f5f843478a468b7a3456173b9641f2a0476519dcfe9bb511b0a89939327e3bac2f0c1ac842301a4ba69b732427bc4832788aae214db9e7f0fb9df6f638847f5de371f003dd938f4e59337add4b931c2d6347806fc27b4554ad2358db0b687da3cf947378d0d36318b8d8cee55678f6f7b4063126e14245b341d32f360f7ccf14201e1595b0622e2131d5cfdafcd05127d75150d51eb171935647fab5d943ec35916946f8e0d2590e70c50e0c833bc34449b33ff8ff5b418b66dc3bd8dd504d7e9ff087f106a67c26e210fa18ae1db5c387a68f10f7724df1d01a72fda0147b55b85e694c8650f0010264248db1e8b13c1d959e9b9bc8ef6d4e8d30b2b622ee61570d6b39e4646d335e190dba534f4e04782b1f2750b1be641eaee59673ee2f181887fe67a5433c1451ca264cf693d4b323b16112babf236cecfa01f78de8a5e06948a3444d8ff54a89d1fea41068fdceacd3150c3e53d6ee25e9367458a4fb60b5e9ea6e41ad114c72db076e352111cd700a9b625012117e4606c38b6895980faac64424362d2880893fd0f9d97ec92619b264b3a47c8b83e9ed69bb325cf443a47841247f82938d499adbd571b47c7f1685218e8fe5ad957dd779624a4d98b33f7a51ed92300ac94056888f9284b41ed2dd2241870fe0297e8f734f14fa1db4d836f6ce22d7c6daea0d8796b041f8abfb35178b3e3ddbc6686ff7a036e4cbff0b58c07485cc7028c32a39795f7ed2acdc2751a9fa01f8e2c7e3772404905bc8453a1f4f5f909f3948371eb5f4bdaa78122e614c6efeb01519946239127f25c7126593ccf4b69c9305aeb7bb246108b429a4d6e0e17699c3d9fd595de523b261ff659e8c09c100bc780b8517432b75d77f3522e6162c3e759588bd1101009a2f78b4c00af322641c0be81758f55f6a68af59c5ea6161e6a0b8b11de0daa84595facd88a8357d2f385daeeede9f8f6ede268d405c57ca5aebc020ec4bf68d3d2c023a59026503caa7d9ca6c36c62dfbae714a12ca5dc7d3ad5832b8c0d911f9583b65c197f688ded10ce52ffffddd89601c1acda307ed196bcd7103dde6f8f2b0e2ea52e76e6ed45a63699a789af090798369d174da9c74bdbc664df1c484c1bcb5227d6f3118339a79e24c5f4219b97143c1bebe4a787e09917cf7bae657ded20ec8b19de3378517bcc9b60277bb6cedd9bce5fdebe3add5d94fb177c0e4b2a77c278ff1f92f3158b88a4810a0581335b1b5f7a213708cb91038dbe6e8ade59379e97919f761d0e3d9cea2f8507254ef7837645965a18309c2d30756c235d02c84690d644291ec3face137280c8caa7179dbac6256e9397e6da8a465e1ff0ae92820ad6f7f21dbc2be8c852e39196c7252fd407b7bda085d7d143382cc7c1e3fd1cae9aa118428236b0b0d896aab43587026b10328d6884d7dc0453be63f52c71da232928e4b79c85ef740b815b4a79a7de28e78027131b4ec175a0fc3bb70e5686118c769ea1927e6cbbf48dec811ceb8bb39687d3c8d3a4493d26cf962d1314e622c9718e2bed8bf12e99a0a480a5bdd0b32531d8af32413c04ee1dbe7fc213c3fcea03fb7a3413447504a3cc709c8476d19a6480f1c28d6274fed0f9d6a3bbe447f6132fb9ef7e2e373d7fac7889a746b4ff0a11b60bf1833360ce905a3f7513acf688700ea733771c4a1a8cc1f59005045b0ad42594d366e91c01cb321da716d2f14c07a1e29ce7ce355eb47268a67e6bb74c1167e59cd43f384ff187c6bbb663ef463c9b2b2046f206326bb46851788f1ab810a386b595dcbea24c80c017bb04f95e562407275b33c37dfbaf7ff9ba188c3618020084716ab5e122469525ed5f157c9f630019ef367629aa8a34060daf16ae72acd973308e26f4bc00cc4b141c4e885d819d5fcaa6261dc16e0fe039fcbe0867c89ce999f218c262d7eef3f7e3a96ad9a6665fb429dc41878299f006a68e2c3d7fce4e753e93355bf382845f5a300b5bf8e48275679f7d46ef599c3c568e023cf8f9098c1aa034f17b1066142cea512aa29e30d40a77b944dcd84da2b3c573ae5ca484a62c45a86a972100deffdf2590ca1dd29bb76cddcb729c6c01663b65d9d258268b1f8c770f713cbc857c1870d399e7ce901887d121d82f5f2116f8c107839c5702997d8a282ee901d04a9c183c36868e7cd5cf7d8e371990ca6c05707e96f87fd5421fc9fdf9b0388811730713c9827826964dca5cb7e065c40f69598634f406cac47a1cd5f81ac7757ba623a07c61f65802079ed17f0e48d6a92c6369851955aac4966cfa53ae175f2e3c562a75ad6fd8c107e337b82aa0cadf57786db0eed23ced7c9fb233f4900ed23d86fbdced4b6f7c557fd489bdd5665bf07fdcdefce64ae4339f46c0759a4a10b29d59daaaf1e5dbf75cf11b4e4f73c5025ffc36c9f99a54c352fe21b89eda90a2828d976bcb0285f760d5966575b8c4920216e1df74f6e335a2217f460287f9151ddf3ab8408e235c75ca218bb1ff01aa4f7106c6bd24399076f901a53019f3135696eb19b8505c2f8216e4466a0e24512e57ce043eecffdcb5ccd05f8e5828a515fcd4179b11d9776e02082109aed490870e61235e18dd2149e313fc860b3dd242571a395299413c23d6b5a1f4a7b96e42dfe6ab846e7a681986f3027ffcdda3c5f0e80843b03d8788da125094c17cf3481285221ab87fb80dfc98fbe1f1ae1e860f640bd71e755f855648b551c4c5277fef681287bc931a0d8f296e13b3584d6efcb6ca76aa90cc02917e5894773b13d0beb40233435f950185cee47f0a843863fe07cd891e37d6e7d4ddc2c3a387be23c6947b86148b31d127b1e48cbddae64e5e7f9d764011861c678d7a4810513061502e04e8f9bef666bdf7f6a296015f186545c1a7d9c7e38a92b5088986407270a4aa25c1b8a0eda68fcba2295ba2aba75882c182b000f5179d7ef5f0cdfc8b3a0a3166791ada1d7ae4537189d564d3e5825d26718f65c5accf0fc8e3ac2e83a6caeb5078e7148fca06b7ea2bccf0deb92aff76db3c9d5a32719109cced7e639b2bff6a26e7f5497f3b20967508edd40a978f3c288051bd8fcb2b41125693320376953cece126557fccb6fbd05004bdc21236fdbf2329f4ad2506f71db016f8c5f4d74f309f4fbbb401a0a3a56ddda2c8e31c430aedcc0972c749b355c2aebdc9eaeb2a5be71781052107165a281f8a0452689570a6e303c8f81dfd2256048af7a3f956d68226b1597612da5947727e5ea7437c591515eb9602aa5eec32bf6637662a59083825529a46ea7908928085be29d47f2d030bc8c42b175d1b1f885a717aa5bd58d0bc6dafdab67bd1d3eea70c21442655386da239bc8d8317e5076d8d28930930149209807a9f661bd067ec30d7baf9377ce282dffc3356484ce3a773b81cc6f7ca502ef56dcdc44d52915d12935f813c97126f9d353260171cc5100b72677b14bb9de4f6fd671cd12114019b9d5a45cc50a6715badb129ea1c54b13e9d9db0f1af22346b7095f70e0599e1b13cd4cd5070469001aed9372a153991f283e5eef56e87253c0f81dc6cc6c8033dbaf5a22ec099d5787ed11440d01bb8106a68bb88bf73c051225053532b4871285de44bd0054847a665c2489212a32f819b4ea2126b8e0c92f12de42bfec233586eca509c0afaee74add4598aa679fd2b5ebe28fb3b8111e8c33e185c05dd4fb734ce3afc9658d3ca9c2ed18f53442af8fbe0d7acf4f4d739e2ab764e0942cf2cf9199057700afd917cf93808e0acbfcfb9dd368b618e676f949d876ad198ba9e03d2da1561b774af935c145f165bc397e1ddcd0149f8c870223cd116278819f79c22a19d3107410e2a80effbbdf63e3abb07257773da0226d4afdebbd1baf31e0a316b59a8a46b94888d50449d28399f8f84c553a8da1e77f11f36c298d550fb9526c3b08d33fa2bf7aac0a27d96baaea57c35feb0a3234dc3b35f9144823976872a2e0aaa5ff7babdffc67d26ebcc4f4416fee153db198f9094e3929d68b477266436cfc5cd692923b5ea3d61cd746ab67aa763592b0825a1e94a2c6a30cce6bcfd6268a728586071f4b44af4e5bce741d1b8eb893af9f63edb1ac6758186ab8f1c3a3b1816cd46efe3ad0da7daabae2e43bae3acb1f3ecae92ddca8404ecaee7ea47b1e03fcec5e5ab5cec445449a8c5f734b28a37ffee3b351a9f606005d80e8f1033c64d66c49a73495091fd9fbb4d16aec0eb7524e52bec5aadd13ed90f4b321e2793e59a2c5764fda2587ab4d010c7b07597126ab7c7e1245c9f46713ce5fbf7f60fb174e364a6ff485f7691d05433c33955b7d94d57390014911fd448251325090259fbd20960d7ac6f973ca162816e74ef0c7a8f231f763d70720a1953a230c7348537e18ebb0e344f85bf2d82da3a8e2bb8546572b90f3f04e61c99b7cf9e976ddc31f93ade2b4ac9e9225afb66aeefd2646fb88e2f5282152411ae98c3f9e37406f00056f1b655a36b6b12174c52ffacb7d46ebdaac86f6bd3f14240a6c81212ac7ce02a1e38bda6b2a43c1cb5ae27805a8a714852f76ccd9cc53cf59f948c0f76de7ffe8b38e99a67d4c053c84bcd18f499a7774e69e20527948400d6e4b8330b1dc71a603e434731048604aeb05b3a2e0afa91c7a63ad91b6602a97440004514419ec5c6d23274b93b75778e6537afb0e451e0e434da1221439e37a130cb0f3853ee49e57d1eeba78177f391f3cb3e212f93aace9d2c78e03440f4843d8257205a9eece4c66f72a2de73c2dfe17db12af4aa38ac6996d20140d02646ee8be6735e96f7eb368ed2525b522a9fb7b7cf723a7dd2a71e82ea2b7036160ecc4f84da68beb22453e1d360fffa74fafee05fa209f4bfe746578607cb5a0c055e36f8fd7efe64b5a8d13c74d354e7173d5f2a6169f74993687d6f3c59244f532ca90c83ab3e56c6bac7d735dd48cd1ffc9ef858636eb6d30d5c6d73227d291fbe0e8615f466d18013296a4c27bf6c39c304902efe414fd1bc5c47542f4be0919dce2f5a635e1b0a3a60be60b99f0e8e1bf9bc8c43595cb2fde5c7868778bdd35052cffbff0e7c8db7d59b1a99d2f9458be5421a389c25a1585fb3b232ea080a5f012e9fd05e3e3113efc822d13e75879c31eb7fe7f3f1c45632d47f398b0961534213efdf37a81dd5150f1f69cdcc7cd4437f6458460a437ec6f296a34108feb27f4892337f017a85b136ba6766444bbe84c670927eb6475983d59e78f64c09071f9331d420926fab2a069ad5f0271ddf5c884c9d813ef86dd24440c0911eabd78abd74cb00a325d0e84767ba55bb19c1348c9f8139ea7d4519082484fac60bac278e021f097bc47b53c1cb1f7c4968eb729b12468d01ff66c1e9f1cc198c530d60cd84d821647335d33b6c0b4d1831e5807d4df564cda55a33af509ed6b7a8839c44a1ff32a45a85d07ff286b0729d38c4faf796a89498a8d622e8041991349544b9029b2384a2f3b25306998d9dd46ba8d9b82f409fffd8110a6205ca601fcbbef54fb4dc4c7307e180504acce2fd0692e43aca143603724e2e65a9d16d91ad73c02f534544f44ac5ce77a355894091ece1226e0ca0ccfff4579af91600b1c4cbe14a7e46b44e43c60424ac10dac6951d991b24102781076b4da8fc8161a7972f224940c7e3a87b4decfe6ce61db79a8dd4cbf308114a101ad839bbfbd79cae0549d49eb01a2b78c04caeebbd993b26a45adae3dca750a46bc0f23c6aabb892b61f92a2e9a1ffc489eddb317f9778c3caf2f1fc7431bb4ac5cc7d89b82622caab6c2c535ac04be70e972e47125f99f86766b847b8f7b38b90c682aacb8d03de4bf849b9ecbf3767b9114e346039c44de37cd6cb91405fed3574a8a58d2b8257fd8a92dd85e5edcef125e5004f6d224ba6fdf490e556e7fa1a9e9884e447c8bc2becafc60e7b92a31d9998b4c942da7918b0b99f9e7f743aa80efa4fba28fc953ce4477c70c9516fa7361156b5011460a25fceffa2042e34478b750cf617476b983b0208911750b9f6c4f8f1faf3fa86aad0dab8db2d3c7060dcb1c5805cd1c4a7b98a715badb709720bf48a825db1759acc86d32f41c67659ca5781403fc12bd02584bfb5d2afe783d2ae2b348a64b5d81b7a57888af6cf9c1d0f491e083f257e489bfb86d060dc91e3cedbf8c139ccce855d4ccd4ef2028f9d802402fe753c16eb752cb8edf16f0404fba3b6495844e2d2d7bbe6d6e2979c11531ad46a89f701d4ba5a32728a2944fedd89566beaa57ec992abba6aef162a432f337c94a3dea7cc138ddca75591b9991d98c16f17750934332433514108a0f9bd78e2c4ec7a709a28ce9ed3772fcc9c63d5dd9d063eebd9652e38d5fff568fca5f0ee428b52c508a024603f1b8be3d1564a933ce0878b80ced2b23c5163e9148ea38955a9ef0cdc23980a34672e68fe9ffecc96ccd953f3161787cf60dc8b08209a99476ed7afdf5b3184f8839fc1ece6f96ef1f3bbaaf9e606a0d654e7b6a204dc075e019414d9edf7b6d398665863d24462967db5f859e6a5e599550dd2a8e271bce38baea59284f2890fce0c932b0be691cd914fa6dcbdfe3e5f89d447e361629f1d33abc8d1c62be3f34c18dc0b3ae7e2de57121a4a131994721bc77e1b2ab697562215e7605ba9aec63b129acc07503c10f885bd6b92fccd18316bdd18e5758ed47f736905ec74d0d1c2823436192889ac9c31f706e0b1d39af44acda139a86be1734eb6892195335c0af114111977b0fa6a9c31e5a5408c408bebb780ce5616c3262d36b3a113bdae3be7a125ae4599428b50d1ce8aafe2511ed6017b4d8776c2bf98514d15f658117cea433a819b2ccc27d5418a3608bc17d794155b5e43752867176f1d2447ebcbf5846217398051df65b1e7e1535301d8dcac59e7a893fa3b4533f8ed770d5d25cf3c66857ffdf0c56d6e2d9a86969bdd55a637e9d47eee4582735483b5509867329ab84cfb19f1c468937a7f79db716e6b0b1627890d378c4560eba7871883d94527be3454dc3c257ea93556d4296bd245615d6b7047be59b7802523956e06c3316ae105334eb930d637c8e83e8971530d33767b31346bf3ff5e6bbe8659096c1dec89863f78512c99c59afd60016b37e806c81f73dc27a4477f233f03e2741d32331f802161ea63eedc135de29c41c70064bb21de48d8b2b46db76fb3102f1e98c909bb80116d1bfe039bcf6b5fdc4b7dd4b7481b7f676670af8d163feb23b77636b1ff0591c39df0c29a1ca354220b87df245bd289bd08a3cd0ffc4e7b3630f4007d1458e8d231eda1780c3482fc4e440b6a23aa6fc0e0744fa3e889c951d03cb1d7c1201e841e1d299d67c3f1525edfe3f1684c385a350cbeb3a397dc5de073d026cf053cc0aea7e172f5fbaa0d817eec22f160ec725193a2a6f622bc40a8c4e6d207b1496d27b4515d7e81b413004ab063888d94f07a3081e4a6cf72e470557a432ec94d75d26b02c7c900174e236ab61df37b36bbf90be5d57e48052f804e14e00ff851bff7f57b199f1edca5310686b9fbd3ddbd164d55e145357d0b1fd83d1371e45b33de7944b9c8830aff7448a99d683d8edd181e5a70c23de35f971b7b441b3576b9ce20e6110cd8a9463256a6330260530349a57beabe093e132e3e59d9d694a7391112e88733c5c261b45805e291e53317ef0b40b70141960e2d695c3b6aa9f89bed76d28504f15b3842774f11dc7337025377313f538cf33adcc60ed29f1b70c7ab742d7248057fb323da0b2aacb365aabd12d7ea7c925e7e827af6063d9217a6923680b6c7a833baa1abc194c94dc7f87404b92143fcdec268b09c400bb8f61eece153b949838135020ff9b7fbe865d4c2745f4a72727ceed78e89e6d2321418ffa02fe2963e700c8f303cfb0a2c4527ed8a52cfcf9b3feb153c44625aab7a7d15999a9b75800827903611c8bdc371d73e70191623202f9f6ae3551a6bc92e3374f41e4cb0f1526e4d490186dd52f1cefd4b3c8935a854f320ab4578cd343a2464da435b0d3a55ca0d8f939d3284cbf27246448ecfdcb7cf7ebb9be24795a5362f73903155031a211a334f7584fe092de586b88fb7645f1ccb3cdfc2a39478531ce68d364ff3a75dba5bbd769b6bb3669d3620f3b6e754c050559a7fa7d8ba62725cc2d2c5b30664363066093f71cf85e37c0522940e9fa5552f53811c0a734b7afcb86e7deb3f20d6d9d19437b86771ff80ed84198047b121f19230c9d1acf67ceff67041425877e17e86814ce98214396b63810de554cefec4dff478d66c4bbf5c0442d7605b53a1490e3646ac2955d865ec8137e7cfe332d0c335efc1bb328d6c6b4a07ee4f9b5c60f01deda8631c269512ec602cbfd8063cc55bf739a1932c46b2f29b943d375bebb49c0886385169245c2a505c2c95c2316ece58e62756e51461a159f92c0ee613e31d61edb0ddea3a52a3cf201e01aed644f6da71546300fb01be0bc6240a44ff0407be86d4a6f1fd7dbfa5209e061254d13c458231a2c52519b377a22e12bfd99fc2e8f9ab95c69864e79903b38b35d29d0660c0c4fb7cba31e76636500f9dc63cb6a7ed3d92b03190817571667960792ebdf4d417576ce1d1c29f2a94e727f0644bc20b9386f8f187f7ff14beb6db710ecac965329cdec382acec250283a57f9ee903fab457e7ffd3af0091c32beee1c593a71c1bb41a88cb0d13cfa1cb5f9b73f83062a8efc384fb133f937dc0e1f1d98256a1dc856857354dddd179a79c6a6ae012ed7834d4a7888986c0f55efbcbd4fe9d9b7df9105847d412d392 +Output = bcc7bde11589f10e7ccb8b28e88e94445bc6b19ea055e46f4c918573e7d998bc + +Len = 90960 +Msg = 6fe896eeaf3f8489eba25858dfea53277078286c9181033667aaca60abd5a30a513ab64967b9341e3f6e98a5d0872d8f5a52d0d2499af79f5c34f29506d5713415274794911b6d57e7804adc46d531b54a5b2c5cd86ff82149175067cadb6f1002d6d036f60c381c2afef664097c698287bbc47005a70ea3757a6d3fbe8ea387626fd9975e359c55521125a5e125dddc5b99207899eb410e2986cf83ac97177f7b1cea1f913da1eaa5e05d07967894ad0c1dc9da5de29a48ad63009d5a9dd3e197038c3656ce4fc36c9429f2ef1c96dbe37146001635203a493888f39049dd96fc4c4644768dafc9ee540eceb6baeb4f28ba1f508f8bdccc452dedef18433f85f220a1b1ba24c8e275499603b1f99cf22323dd348f8dd4e7e86cb9f7b9320195c3a724e5e73ba2f7479a48f9a982afab1cd10713dde312717b1a73753abe29b0b5085749c87946f1ad70ac1865fc2f615aef255442349e544662a4d06490c1bd126cc2432487bbb6eff34bc9af1021fe26a3bf6186287e76916ad370ff50d0a320faee3cc20c0930554aac724d668f69c8155ea17168bcc1a45a88bdd3a65f4c28db629d6bb13945279e587d08a5808a886f897cca9c601bc65b4c1fa738759f7136a6cce71e52dfac16d550a875fd49add6c95a5b6c706e4195a5fe44b11a8445344333fefa5ce52ddbad55f5800d8e8174a5a3ea7ef6a15b2f1ec273b756e3eafdc03878ee603ff21467f2b76bb8414a71a5bf407df99c5d513cd3faf232a4a9b8a5451ca164d543ea8c91b5e1064a51f55117250f82478f258999a10cb5b0ca8d7bc1b3bc738f6885a399b8880091de27321161dc988a38d08c7d32aae8ed95a5c81405e69255a80c34728808adff392fcf16bb8d434da17dcde57377d144522817a5dac8cb0f4da8c883ed0a167aa936b08ffcca8b781352d53a2e187a9d483eeddefa0925a59d80e636af3641eb77645ee2ec3a79f3d4772be52938ebe1c00dd4262d52a9ffe1bd16f29533383bece06079538614a62c15574c2d7d2bf602c053e53a4b5d056086e02068aa03504ed33ebaf95665796554e2d9018f41c6567df384ea9b4ba06404cd26f042a814e564810fa6507255c65b53f36f173838046c3a6905eb7bb6335e646df5a4316efbbcb0df211f4520965332013dbd153353b7b2fd53e2f33016bd2d5d3f77a545d60253913369e6c41e63086d3428e2a18d83e3a89b29bdf75549b15e95640d83bf5ff38fa4d75b27a6b45b9e1c01a769f8fb54d3a767e1f2382977d9c113700ffefb17403c10ae33756eb6fcbdef6a73dc448de43d45650807860834892bd6d1dbfd470cc2bde7ced5b89eefde9b35a783891645266b53230987ead9b65548b19e8d0b5b00850ce20cba9ddf49ac0fed34f0785c2a80b22a8755a72e1038cc978ed5ec95bc112756639d3a34c4cb012d36a13a93102d8b04c917c79d5e7d6d6bf4fa7122bf083f122289fe5618a0114fd2c5e451a219e59b17f6d08d6acb30151827236bd1135dfe91a56fae0dd2493b5084fefda6ecc8d6b91a4c66facb1f7d428288d6b9da8802f81a17a26a0ab1d9f8051101e5503d9df6aac28fd724418cba332acc4104c8069e0f7e9bf9ef50121171a4c427eb4ad818cfbb72c97f9e28c76391b62f3a25f2ccad2a02802a2ecce5ef40ae3365fa6f65b0be7697843f3ab33a43fa4c23a8aeca1ca53dc86253f0baa86c27d367524b267653030bda2babc4dfca0260685822e08377b69940c867d9c4b097cd995c52a2480281eb2a6a61437bae3433b03e37560a26d3ba6c94178a6a9466eaa21f6d234f5458001b0546783575fa8ca460d373db3cfef58dbfea15c2a1fcf22ba385efb2d0f112560341aa36a9bb35ebc8df801b419e104b52c7c1f55ec2addbf1804f9affb2e9826c3922a5d1def42e7e44c5f5bb1ad4505495d72b541ee35b10488b2f67044c48491829ab76cd921588e88a8f34dc0941cd3e9f8b09795b5208c3eb9892500450a1c505701fefd747f0b51711334b77c9c5a9613e073cde69e2dbb7fe08fcda417c28fe1b54ac8a6dbe92b3a441cfe58e45be656cd6cd3448a57736884f7293c4e2295ed59e6c752ef866a870e5d01d385465f23bfc962596597eb15ff118fa80dcb06bc583975e33a81b3c9ca7b6e570fb8652d603fd79fb06da70aa7658d61e71a56f148d950e24d598b8500fea06de4109cb63736cf721b572bb926499ee45aaf0b0e944cf4da888c564b6a6d248292ed6a60bd24a68ad6e2eda3f45420b9e8d79776d2fabe267c88a87f3f3d772f9cad62bf5aaff944a37f614d8a0bdf5d025290bc7d692970a9dcf6a327e614ef81eefa14a82f3439e1ab2b386fe71748477e6b620c1ed32390f7c5699d0d9a2cc310a5231e38e3d511e4afd70e6c650628d99bea079227c9b2779915070a5371d0b1084d35438490c4ba63bbfe02450116e2b6c6e859b3dd9ecae6380e62fd594b5e780575d593177aaafb49a74f33e3a228208b36dbe3d9a67041651bbde43d836798ee68659bb39424bb22a2b9be084b288da96baf543879e61f1ea76194b9296acf5a858a0b0fa1c637b968c84fe9825232940f3a719489baf3b749f4ab36ade6affc45a96d7643ee058072017621d833d3fd9a03b858466d43d16bfd84407159af26315a3fa1db2a891a56dbad3bcd4bd6288491b50e305ba3ff95d2bc612432417ac0f30dfcd80a56e97fdd6181d218bdb7577ae420f8247884401ab013270efb6c8d2a34f1daebd370658d4fae7718ff2c9b15c22ade465622033c0bd10a5e517dee66612b446da3319041a41c3cdb1eeac808dba6834fb13b57cd2c154eaed8117d1dff03c4fe3abf98b12b5583cd919456ba9d0e579f0e42a6349d6a545ef3e9b1d78b15ad2c0e7cd75231d4fc6efb9bdfa182dcfbb2e1da8718dc4abc0d4949151981cb8d6592fbe48b4434f73db173bb54399cc039c06562c06530f6282cc21f6a6fbfe6396cbf48e2fed014c857be82590db845822e75d1e1c4a7933e22d75930c14d4815f0296cefbe40c58d52cecd168bda1c2a807e4cf3873903cdc01b2b0312fe0399c1ecd9180f01aa0b4746e413405c84916af14c6c094fd84598e03d67d16cd923565c05e26d8d02a089996fe5a7ca3f65427158b1e7668133f1e8e8b58904195122098bd5566d800bbe48d8f44eadad04bb70ea6b8e177f278f77b5a2a64e4491b967c367560da2ab39d7b7c581715dfe1a727a0f89dd528ea61f3c85b5b60b639119552ee8f7daeda0c884e00cafb2cff3e8aff457128bd7fa61e5f533d5ae452d70a9828bb6a961679da8ca3cd34be8ec55c4e062619ba1d0d23a67bd27ddc4f3104918cac49ea512b9cbea8e6699e7484c812a5844f26aedd2a2539e16ea51967abc38029c1b0726bf46d79de42d29bc3f3d589537309195f5d65f634d84796c126b86dfc7af261810a207d7c6664e9ca081e1a5b2c6c46dbe2ed1b9161cbb0879ef8bceb1db706b5075f1c8a7e5b48e02d76c06423561d98e1450ec1b1384e003a09d3bf5208494e13b2bece31c09f4f8a64e335ffcf86e083f6398c7196587523751c3fc0ec129655a2cb12289ad55d4970eb9769df69f9ef8703b949edb52e80c4fd35106b49d3f6b6ab1c0af1d4538f224052098fae2c4e80d312e0464f737a7ce067e98dd64e1d77c7b480ce837987034a2e86e63dc1c86a135ddfa80d8c39272c9ff45ba14ff36b85a43238ca16569a72f389ecfe0084cc2a63ed1cd7c0e44c49a3d9dc921ea01c4eb3c7379173276f1e68b9aada31ab2e80ecb3a99559a4749f3b3f1892024b128ba8e8d3c0d9200bb756bf27b79b64187dc0d9572f9da0269631ce1887451dd3a24c3c15408e69f5a685426c7f87d81389a6062e8ed501ea964c2fe35b2d3de9fd676c04f7da2bb552bdeb7f183d2fa60c67e2379848ee4807530a81f403d3dc02c11fa8ce078ed422c6626a6c05905a6ecb1679364090c9510f06fb3c0e09321b21fe0aad5cb9d980674e35612723b6179a4afc51030ef4dc48cc5819980575af50b0317d20d54cd36a57e6e1ea12426f9c25c9cfda915210c504a075e7ef2c2517de25249c09b682952687d3988286df9950e79a0d4169565055dc3744f0e0e73c30ef8c187e9ef7b1631f1e779d0bcd58735e98e445c414af671347f730185c874d969bdb5b8c9985b6b7acd08b58a2a23537b3a7c6e8b3abe34d8d48d65cecc2de223b2fc908d0dbc55664ea74f5c73f3e79d19deb5f9c0c7192f07f0a34ffb38a9c535af09b04793b042e0f7f6ba2f7372cdc0fddb0369ab8eb5be3f629fd24fa0bcba5f7cc9d28bec9f285d4419d92c859bb45c363e81d615fb3bdbfc24fdbd6778b58072403b0f6ae98959cff1fd798075687c6001c5c13f7e15590885ba0c5e97abb472a9fd98dba0987ff2e8f8f503e951d0e10392077bacdf38f028a3d6f678216e066d76b28f62ba3245557829706604ec21ba73135b05fdfe4b844787dfc8ab0f960142d7268e73134fcde7816689f640ba7cd57f4e18060b832f21b97ad7bd2bba1bfe8101a267856ab8c39756b3aa5103e155a5c5616c033f9faec64843bc44eb03e64ad14cec1b3ebc98c5b18195afa67e60116160a457c94c6b48d88b3ced915fb69ef5cc8547243fd3b707525caf0aba815ca294538bc8bbc3ab9c1cb3884595cbf7efcfd79bd3c900c5d8d443f1b90c45f1f98aee11a67464891386c497903cb2d03fc5478b95cebc8ca655fffa2a0a0a4be6a2c87bfaecba4bdf47c4add9baf7d2662b498902e74375e075f53ae63a5af4fa7a973d2ebb317e4fde483dba970758e3807226a379420c27a2a8367603b4779570cee7ca36569ae5c8d3c98b676dee486345e6e01b34c9ec6aad7f41fcb33e4833d3ee5604b62c5185ebd3f49287fcf522394c5133a8499f4c5977e28bb3c393323ab34a9cccace393e4df6ebf022f8a6bc0c96f58f8e5b0a650a2c04752a206da87f9207506874c81736e523358d0689e70d0a301c328d137179273a5fc5403bb30026013f055cccd0be36796089a2048ce1494b483ad714d12c9652e3d442a42d78191f0269314d512e0e75d7de741d93ce7ace7a6ce0176d6ba2d46821cdb1fc2d92e9ff5c995482ce98a0035423dee41dc6411c9251232d7e734956728a680968bae89fa63ce74be5f9814cb3584f6716542d9572d141f9ac3039149021d33c70b8a34a0ec41194bd5ca11bc2ba7705004d1a4dd50978b93f022a0c4339fa7d8fb5a2695ed6d7459ce786d64af25ea425d88eac82a0d0557d10a6a5527ae3b50bd96e625c1d4346cbc2bae713a70c2dcb1e131a433f51b5af833447878e98ca2d4b8e9fd13e5c7f9216c5b4e5828a893b4630ffde8e04c11c825d5aa81a21a63d348a8684e42ad8380b2da7882bdf9ebd796ec31c34f0620e36a7467ec9842f83bbeb813fb5b63a07c87c26c349135698df53cec5da1d7ecbc69c74d140cb4f460938f7c859078b4576399b60842f98169f6988a12794fe9c5bc44a692afeedd045f950e87925b53b3ced6d2586394b7de2385a77c45ccbc91da6310d2d23f16798b7f367bd199e31431f04dbf43c5916cf47aa11587dcb9a33ca9287f14442542af84a0dccea306eb257c84a793da9298f1ee1358c00e857c6b8d39d1f68cadf2247bca24fa0513cb21e2139bb4623fe494568ac08ec0947fdf95e185f98704fa929b1eded44ebe16bfa7771625eafdc2645a53e734916b3011499bf58db1ceee62891b74fdde5a6047632bb178e350d4ea402b27620f6e3f991ee5cb339b60202cbc5c81c7327d3a617badd82dd9dd7e8ede6d2b878931f0ef9c4b517ba27d4249ab3e8fd0f99b07867779f4a53cf831ca5b964e259d4af68d282942d6755ac751ec4df9ab72385a3edd2cb17f8b4581456e2319bcba1da2ea792bf9d4729d21dde60749a76ad994e31312793d532a0f587cb018cd7e2ea89fd5bfe0e628b8d4363f071a6511f35a2bcfd7d64f132a1eac1db9c5c847f25a05e451b29c164260f33da9c655261a1c7159f9332549da5188b7ac9b4db61d49c51b8dc956b9ae5aad888bd80805b25e4c47d31a60759f2aa6d10523ce26e3ea45f1c0bfa6817123cda609e9ee3f60921520121671150d0c6ef05fd9ba38fade10ed96e02c1c1f5ecbfcc0668841894a746922a1e7a6889959ac2937a26ad677ae957ce537d82d6e31133bc856aaa0f9e289713734b8b643ef5addb8071aeb59875fff295a441fc4957fd899e9d95c22e817aa50d8ba0a8e9892f9f568e7cdf633c37a4713fe6b0451a91355b26bff57dd7a2a895428f9ec0dcb1a5a385fd2d02c568aa8e55583affe15988630c12f0b6b577e4b278408ee87899b6105c1be79e98fbcd96ee81e2a034bc4a5f5775faffa061200d369abf8ce5509a451dbc545e3e56d52e1248f0509b2242f610cf5d8022c8264e83877bd2a93f19e9d0cabd6b3ee38a00ca95ab369ff339d13e0a5f63c214bc1c68ef08e24ecdfba47b2c6aec2009b4b41d505c7bc798f798e90d49cd09adab1fecb8afe55c61072028caa30a6d2f1af214624b469c7744f219c063e87dfcba0017cbb80359650602de8cb0edacbf8561b6b1c0c0a5f9e887d70bf4dca867b367f1106b63cf40c1f5a65ad8bc6520bda90b2603116a86aa002ad646d112575cfb836f102e455afd9f871c65a020ba8a731ba95b60738753051b099fee41357f65d4d1ee8b441b85a889ba9dc066f5b467ef2312d54962ab3db18c485bbf67e24dec1c4ea353eb20b9b41cc945be39022c8e7a6e9a73817a51f447894114574e59d43a789efa32957a112b3056b1ee3d6b0098b8d4794a88e8ec23a9c8c66b8a349311b4a3c158ad92a7cd1c1cc67c2dcb4e6337aee4279daba206f2175f0d6084318b4ada31c530aa7eebd3be854b9af57fc5354e3a7f80421ddaaa5767a496f2b78f816cd1e1e6699f6e9e6576c34c909ba5f8dc06bafa5465851aaf6498f5252c04a38129159678113cc539224d0a45abeac981cd3fd38983f18a48e05045c698d4f640c2c70a7edc3f9061104f9ebcb57ef0641978d38b7e04414962364e7c04e6c3d223610824095d4706c833ce9cc448b5af71ccc1ff5ea889db73b1d7f07722515fd44959129f80314fd35f638ddd3060875ea367902cc4a8269a29aac9f970ea0e5ee9c5efa68f9765b83d25390a1e381667668be4ef3fe7515f068db092b8d40748a713632772c16fff33db4552fa8684147bf6a3af038e854ab1494d4be258731aed0d182811f79631ab4f5cbeac92f9ed4b707674f7e5e9e490a6472bd6be7a5d2279b3b4548102d50c4724541da49c7b3ec105470334a6b40c6b473a7d4e4398ad20dfd023a6da73be8c451e33049545bdb0f72f0fc2e3428e62f481bd50f753f8ca428666b0479329e66824d7fa0dd32e06f43503d8c9177c51f7077f0bbd176a3e84dd05e570beb51c356df2cd2caefa8ba660c7be80ba3f01f7d5acc8be6a6b464edee88e7e7bcaf853016ac6195d8a07b2b844bc2fb3403a9df12acf21d763a8488ff7f29853d0406be8292dfd684542c345601afe8be6c39165e3680fe3ba2d19fa1b5be7cd2fbd242a154aff5892037f10041f16c998667a39bddbb018d99d69273a0f92714f3727d0186448b4db148e2019149ff5c0e90073a26f2bfd26c0e21c3d57c2c798761be219c4ff04873b997d8541c098c515cc1d796da91a0a5e2ae30d7b9f587341a966ffb34dd1fe41483032eea2390fb2863e2a1d51f8ee3ee98490c350ab46617966b4775aa1a7ee424006636d600688d6df9cc74c1e3829c805b077fe487a9f32e91f584dffec0930b5ebe74895125e6207b9b3c11452e76e7054ded0b878c17cf828a04e70345cb998c8c45b619bfed5be6829d963a24085cc6441ef82a78f019ab795877ee8ad86f08440cf4b092ed50c9170bc9292fcb222c7e8822e6ed366d7b4811db06ec53ec509a4ccdcc4b70afa1cd1912988e29f79671bb245375356b707aa3b8e2f6c8a1f3e38799a34611e8ff29480b1eebbf4d92b22a74e69d87743995907a1936912070b43ff0fc1f3b6d4f901b3b12b4f584bfb4488d16b2a718250d5a97003867d84580f86c3d4377dcf1a5f4fb1a76674d5bfcb7d56a711ed7d15684a84e589749f0de2353dd3f3188a3ef87f39cac8f0825ffdb0668455933ad1581263a23b9e5f1305340528f0320d4b1269d2fc3c7357c42346886abd0ac36aee2897a364a4cc50c0aca339f6715e2bf63503a58ca55ed4846a45c113fb20ca72b5a84fcc2deead5ac59f70cd7d87c4ec0c552d7e309e786a4224f21d0d57d72ce01c0d3ae2ce121da682343cff90003b164ffcdbb91f991bf6ad63a4e9727b63d27d47786a73684f78d4ec0c9f7fc52d7a797a6aebea1de0af687d6f36789c61b252644c6fe59539621b0205045efd08615b10f56b06ee0195dea8489d72246ca924cc7f962d83238de1ddefd7348f15f27e2442e47bf2c6cf964df5c667facddf7ae6d98952185420ade592bf0a639c5669201bfc5213778618d23f585f06cc7bdc1c21f05c3e16440882b665e761e5b4a46a465b92375be1eda1eefc6330b0a6d2d5217254dcaf21791c2270d3713735b86c8baa4348bb099c20ca597960c387e57a9fb841da68de881b9f89d77bdc012c8cb4916d2ddf25adb99a18ac7e4b479c71646a2b1f89a4bde7f558f9671a3f883487b719ce0f5ea9d328e00172910d8023382f1a955a9aa1e8ec84431d3a1755cbcec54f1393dc17d53a5a8224dd0218f8e2af172323e9bb874bb6bd8583b219b94f6215e4b2c67f29992d367d774dec592c9329b12bb8932adc956e883f385f65d3377529b64469360d022563a61884acdc835928bb30b23b65ca5e0cb4d1ac3921ec76cae5805e645e8158bfb388695abb26ae6e1b799f20affc95fa2ca38a9c032820af889fe51b5351d67ae6c722cc9125306c93bae24382d41c3bedd980f63f937cc1e6cc87c3b51ba77a87fd37692627e70a6b1b040aa6fafab53f9917b09ed691e6492dcbc44c86d4a9de51309841d5dc31eac58cdfe21537526c0bd530e8996807f7ea3987e03b64ee33ec96c3acd716c759e00229ffcddcf9bb5945dfe583070d392c597239e15f30cdf6f1512dd49db50093ef4fc6ccef9273a8ec255c3d78de571bb4ee1e21ce59f596c7aa8d757ae42707dabbfcb77b04dd23546b176fc36499ded16459a3b850f3f4a2369361b43b16644bd46c39853941ef0417dcc0ee85479e383ab00e25fd0f39095c094053a114d1ca02ddf81718e737849374d8032ba88272daec0b1d48918d8587b5bc60006b76e0ad169c388916215d45a760093d05b306aad541a919c0179d1c617be13f617c143de0cef17417d516973c0009a3a6587c143259d058e500d984d325e1463f0bef1a033649c1337c37f0fd5f0a45d39a5d7ecdfa9bed486fc127d46365fd4d4af8ad477b4859af3e48b7b026140bd4a130526ccd10c0318dde6d2bdd774cd262b75c7445f622d642d2561efc2fddf0947df7d8793abae882b7bfa23a1e1b187bb490513e5c05efb15d340f8a64a3719bcdd5d9a71ec1b475d483ff22635265bb78b2a70c81ea41b26fb94b78ba459de0a65436ffc6bedf8ebe230b3f4cd9024d8a283e576dba156e924d996d3aabbd8893dcb928399aaff7fc058e36e4983757725cdec8295bb30d4d58c211ebbd18be19d528cb7f3b6dd5169350b230774b02b9b44f06bcb763b628428f0dd564f8a8c2a74c8fa18b6053953318593a5f8875e69a58ba2eb56d91ac73c5090086a36e15baed1da671d296004fafd3093634d98175c38c883c18c760542fac750c62399a77d31c96d409c9df4edec9a5e6985512ad5623d136ae80cd4b949f3bdf7d31da44c535799e4e12bb986be31755fc1222aada28118a75e379c1bb8a5ae53c7d5c8a8c1058b6e9991a951ec8666da73738d316425020b619ee1f6d13db08e746a8b2f0543a04228787adc1219a14e3eddd92d41a97e0b849b4cb72e5c52fc5b34722b9aa2870410487481a95bc34f65c984eda58edb2c59c512f92a620421fedc044afb929e28d37a4cef3cdd2b429abf170f1a35b7e233a4fb195fff4283d1b9b7f9a2a45424f4965a71270e77cc403705ee1a3e82c1b4a36bb42974acb6766613a41a48478d062523b3f2700740f8b9e8172019ca4f5f58cb462172912e5f699df6dd0ef6c55a8f4f2449a2784526c02416c657fcef962db04bd269ae5fef2cbd5e6558d072946d235e8706394d4cd250796769a926fbaaa121b6da42cfc82808474dd672f9362756af252bd8cded78d39b9ddf4d99e24824844934fcf25d03e54df0d83cdda2563fb2be73b54b8b1c4419d429589cfc9ea0dff41a3b7c20190adee8febca47b6264e5bd8e8d4aa8552850a4b868c4ad06ac9161fa9ca1a40fbf76b0ba70c223d46cd4accc9f5fc78bd6fc8a3cec857628ae54fd468f177b3099a1c28bd7db3e449debf6ce89df5b48f659ef075273ea7d3c77309e8151f8241fec98f370441d1b9eb83604cb5de614fd156db849046c6ccd84a65321c5bd62b8b3ce81c88162c1d5b5f4ffd26ffa6861ab60b02eab8e8fe809b914df073d750aa3cda75f3781efe9618e104d6a0acbba88729f71fdc34ef2830344177afac37c1900d492cb0cfe30479bf68af099b76e390dc6c16fad32936cff7179b577e693a012aa01b0566540d49913198829a40339bcd67b75aec34144182d642b2746c7b57d983a8c10bd9194ffe677852d19f006ea3f3ea44a896284d7c865609b7caee5ac1f8bb2ae8fb9054af1339c2691db2d3071597ff2fd9dcbd8e30bea46e0af9d18b0a3c8a2241da204c3dc21a8a42b18fa1d7a6d4a88497585fdb62cbc2b50686debe1327e4345f7b7cebfba25b95656d1840ff0b3b20c0e5988f2ac6db527c3f631e284a545a872de727cca1059e373415588bec1234c12de054fedce069c3c5c231633a9a3ebbfd36f81d61afe58dab3f2830be524801f8e033c657f98343e0a2ffad41df6561b51167d62882f3d09c3fb7d7cb26e5e80d3f336a7d50276357ab91eca54b59e31b1f7adf3fa64f69cdbc0e6959b492de36a65dd2970add8ef486ee0aaf05a1a7f8093b20ee4281be065f33ccb124d74b39bdb7e7ec522d297ddb1eeda736c5171376b2827c7f123911d030ea1b9f3c97df2b4c8fc64ea09dbb512a7fd5054d99360fe6eb33848941b5b60da9de4d4a2af09921b36b26bd52769119a6809bc297277cdf44597a6e3db9b9d0f34455886d34ae403c24030cb07643f34cf21fac78af64a57637884a97e68283af93df7ec67313b010390d1620820ec15871ba91a49670416815d7a3b604b92dc51415b59e746f7919f26b6208649a8ab24694fb83a447ba013b8e0402db06d71c0f1db45e006ba43d974679d1e2905642b9d4717da191182bf0d6f2e3320f889ecc1f036cdfaf37666fc5e1e4c5982df011a37cfa54f863cd7dd7f7c1d27f483292442b32d9e23d7bc31124a7d45918a49828a3628622a4ce2ab89a0484fc1fc0abb3b316b5acbb64db51c984d97c1e46948c6e1dffb7e3183fa264140e2e16315d9523823db7bb09ffae59e29aa848be4ef665938760269204bcdb5a38bf346bf11204dd37a8445277505b29e1869df40e8f112ce6c57724c12f893ccc548257af51dd8f6c2a5f278a5e57c074be25d01c7ef951e38dddb6bd22f623909806ddde7b3600a4e313708200d6111bf7e83bbfeca5684860613041bea8784e30cae6c7b79798a77b6815a5605f83a0d9ef1b40019edbdbe8097a952a29a1ccc7d658b32e89bf3c9b66fe3ca37a7eca0e415ae7e46b1065cadf7d018f0108d303301de80893dd2deb16138ef4af6a603be6defcbe9471adb1eb1fcd15b6132a8ce21baf6c3e5a40127f3de57987b02b0be791c7b6a2647d43344940e3d22c9b0bf43c4f82119e3eb9a962875a89b6f3234b5990f51c539b28c2e4a322ddbaec286c6612739411ee879d6bbdc03ee57f2e1a209ea38aa5d0099dd63ef95d25e68a54833e674f1b1a256241cfd32ca599d25ccd3ae774c2e48ece095991dcd451dab37a1c85cb25883a00ca05badd5f07b71a48ace963129f5e5c633c12e131f5bf9233f4f68f95016f80f0a79ed97992865c793cd2dffdc9224fce2fa3f5a399e2f8960ee223d54d6ce99afca6a65d02e7284832ca6eeb2981af31796c9f9207eaed8bb170104b34d843b04dfbce711f81889dd5f89a44882485736396676605807afa26c8dd617e5b9719e2c4d91fb1fd83606e85ea70aeb2d87e3549d5885c4ca5cbb613127ef29eecbf032a4dce7f0221794598e6d763d4b13937ac725ed4f578e6a67938095a494a89f855b4e552396bd0a25a17e16f32178cb0e8c5513424fb334121d66c7c04b95f086c95cef24a684dcdf304f79973125fea2456ca4680359bce34740e207542297d9779f027dc21d90d8a367faa40aa9a2b89ae2fd0b22e0494d99a571047eccf9d00e7b3b9979c5aac4733e36b40e826bc3f54e99b61ee58dc39d1af1320c03ab1cc677f6f25e3baf0538589a11cd3e9e56dd0616f367e7dee7ba07ef0a9c450002681bc122bfedf22d6b3db177b74cced3cabfe13d9e55d12c9902c708902fad434bed26a54f3b389f7463f9406d1b71ed36c2751f12bde904828215b688221731ea52a3f45cc1c6fdfc51fdf65f493be5b9b46ef2659eaaf22f0c679f04bab260dbf2a59a991041ab6b8e2c13fe54616fbc1c2b6227568b97f708191c764823529923b80264852d3a3a8f0023caaba6edc65036e8a8a3ff48631bb6d95d88ce899a8c67b64fbeee2ce1cb16a054dd50e250f71df099d59a960baddd303acb387868931130cb1bf8f609c8dc042d6813dff4774d045b89d1f34934d8cb8eadd5917bbe510c673af2281b0ecce9a4ba5449296740be6e2f3a02b4575605d9af4a775c84b3a3948a5e258e1365ab6b6296b0583d956952443726d57bc169ac2dfb9c738ca580e388a190eb6d32d3e1ef4fa80970b7afa8575de21518978166c86d73691c934ed4b440dcab82b0fd98cf0392d58723fbc0d722c70bc464c7a9fd149ea5db2947c8abc06b56da6c82f0704703250766c83c420a4811e5a5b6d64a8560a23ec4166fcda4ef75fad1fe99718e6b70780cbf9b3688e7d022d6d98c2f348be6cdf0351a9872cb716a6ddaf4415e4e504f622c4e132318bed274aa3c19a6530bff3a1e69aa9e71d19fbca2817e1b2e3cf423a8c5667d6d469b0b9356985f685a490e5ccd629c853f012aefd176598daf0cadbfa1bedc57ffd3083f6c39d42e8a31e95ab65f0177e235551d64d89def2eff8ccb537ae46b5320f7090d6c8937f45057a2d50e51cc93a2a7b59bf36cb525533d766b291a19e8eb548a8aaef2f7211ad5cf89eef1e5abefbf3317752a823aae2c2b5957d1d619b8ad3e948fb5fea907f03b457f86759372f82047dc6bd8c746f5649e75c0327e1f7d9f8b7d26b0f48e1360a84e73def2b2ef07bd77b52b63d415bcbb0159b17e7622180ff5e9b08c33cbfa12ca4e9442460053d8f58afc98cc099e2f8902d5a35347427298537fe89f964235716b27fa92d88f3ad441cecea54d837c8b5011753d69a953c318618207eee350d27e2c843fd43443729e047de65df72276c5f77caae5b734049d17f1235248157bec0497838fcd937ee4403f05b773a1e9d8ea220267f693eb5605ae784d0af3cc39327d3467c59b47b9048a89e6837b430d7bfe0a5cd1e3c5d7bd225d5b867c51fa48dd98f8b6db7b80c3d8f967a12f10d82f68f920e3b45296a0f568fa550f9b83ba1147cf0bd478dff0b2cac7473dd1cd771b7570a675e017438011a6012e0779f8b0b7375f06ce2b3d90746200181461d55df5b894b91cde375afdeae5682441a7446dde0ae2e9f6ed0a9ce4465e4719ecd9006538fe575fdf0e7435ac4e808f2844e23faa196ac791899aaa9470e86a0fe51c02fda63e10bce31b12a0319a970e2aaab8b6fabf11cd85f44174d086e6c13aaf1e7d411f9543a1590e8bc1d11dcb7e2df5bc076569e3984025622d90f4a3223014126f9a6225a1c485a96fd267e2a7f26313dfdc449628f4e2d6c895381844559067823cebb56cd41493ac0d29d6408e7d78d4a21637b088f65d421215b30975ffe71955a6857b1e37c4f6efc838c058c1359655735ae782cc601a8601e5ea27cf0ba593371854e97bd7e108c76cbfe7cae49544c0721668f189c26fa1338ec18a5fb773f1e072fc3d26fac69bf497c1f700421ea21fc5a1f234ca4d682e3ff9ce6dbf568b706d9d184c94d7da62d06dd2033d417ca68dc44afba28dcb38a636e7902dd9583a9d6279b34f8af72a0251e887d73bd4b8d7566838dbdf4ed539ef8261937aecb19ac2fdf5ab7e76dc9604a6e8b08c3ec92aced686e68067a663aa1b7c8099ad77de64f18e0910dddd13fc99b049a11f59f0a42260533faa0ecbfd0f2b65d43effe09f10d718f0a0bdf4a03d791328faede16cb85f925b8a80db3efa18c3a905bc49f7c87b3b7c43f1c0a61e9dad7255f7558f14df34629daf0a0658af1a96962f630584e4e1324c1af06499b8691bb4f8c581c459a9f337dbe0d9a768eb0b64ebc42ec2aebab12d8c1c624b33e6839c74c9fb5369737bfdb9e83f62c0b5a5f653f5fa2e3328577cd7ad35bfaa965870fdcb422e89117b63ab989e1760fac4df0a70ee140caab39e801b45438708f8d6f651fcd233145fee337a7c31a42b066361cd8120a5c2542717ff179353aef342f0f691caf1fcb811e3f6504e14d6d9381c5439b098ff978b01b1331b8b08b62960119795302b12532f94c0c93d8ebbd17cad9e5050c31c5edfea1e38b7a6d00ed64b74bd882fdd4698ee343f88a33ca41542258c67ad5106f4f23f9743f9df77c5fcbfa0748b9750926b212d70c4ca4478ba55c1382eb417f3722da3ca7212d8b1bdeeea6fcecf05be842dffa053e317196ea5ab6cc7d3f65de25eeab5c038c62c0778e7d469f2da7fd1a13271e125b079d79b875ff92f4696bb49d88034bfb49751f4456ccd913358dc31727ffcf0850cadbe019c33347d307574f9d47ff6187625d78f739a28c4cbfc352c24f7d22954397386ac26720ead9976cb0cd29a865b0b9902933028035bba42bbfb725901e30352a2fa13667f70afb5c8a40d0b72b87bbf5b46202d539aaed0ce8decd3a33ba3d1d320ba80442c10c87f346fd76210eec0f6070a9749eb4275c036d80081c09387939a6c6e013275056b287b7cd8e6ed346f5020045ac00d982d90b43e22044aea50d1a97e1b264512f91ad06a4bccef9033ac30d30adb78be8326120b08993250b761023f0669f977b565df2e3f157e4acf858da1ee700c6f5d6161e5a9d1f27123b3073f67900a8a3ca41847276311eabf76c6ff5a30410118cd345c8a5103b2226218ed931b00e0db501c33993832f66ffa5d29f29eaf4a41d409ee3e88eeaa3fd8c7c83d7d75123df45b8218f759d47d8ab0d02c1dbf71652043091b0c0bafd891846dab29cf74c0fb46910b431f2b449272808b3ffa3d0f1c804bb43ce3599926ef3c80c288aef0ff6e0ef48dcb5171cc12998467d7f38c233204aeae1e3dde0358b342ba39276a5b425a794a16fd717201a99c47e13b78fee8e24ed214b323a161705583495489a963e1ee0a6a75c03ed02f57329e8b61ea0563394b5f50169b99e25db031dcdb543353e7413e50ea7cfea939ca7859b38f27e5d27c569b036c5287bfc39b16dc06412ee9711b255cd6fd95b861f72cfa58c108ced7b30a966e3beef03feda9081a0db1592c894993b74d7357bba38bb2d1513a72ffdd152c4ba666937791e9ec2a09a9dad5f1542ba87ed09c1a05ec6983690963573d41517f32ad1e2d308ff490b566d30febdb8125021bfa1f86c57ad968e414706c2592635120f4a331d1bde8a186d63cf13630b767d3f63eaebd835de1590addd2185ba29250cb7c2e75b4bc5e7858ef79fac6da209714fa062b0f9b52e6bae22 +Output = 723cb1b8671304e99ea4507897a083bc27059f726732ad2d36fd199601085567 + +Len = 92056 +Msg = d1dbac1a1d5e2fad52319cf50c96fd6930e70f5d162d8d31eeefb1c85c48f93b663c27cf904c8b25454884b17965456d8d90d5cf730159f81212962eec52b28cfed53af8e7cf6a564d61a8fb7db351655143b829577d6c2c2f8bba16356e7304614ef07e6b0e52a832240ebc5ea8aab744aac1530bc94d360d01266980c5c50b564e4e476132ce83bb38c0da656bd7cd2e6df735d70e847c741de00d157f2f09a67d5e3c1462634fb246c63fda25600ed73463b802749a682c87f2ec3cc33a6619852745cbc79b74ddf526d105fdcee107a60bc2d6221661fce663ed3db96c8b770bb14bcd89fd5a04eeea7a2d1ca7b0856bf93c994180ceaee33cf75f8a50de88ba053463cf116af1d91a219ca976e21a2c350f94f86119082584f4ec5e6bc814372aead5c1600a6b5dbcae98cdc0df8e91c5210f7040a9d35543cb2a5c47b2e22d28536b8971a33922da086ab00f0ea941b35c52d0a5e6d61a826462ad6b02bb4208596d4ccc9e24d17b195a79ead932e507a7a4411838db1d48a7db785f22671ed1e32235fa61f412a8c8af51daa7f324c7e94feb2207a8059d7cdfe6ac78ae6a8bd8d3698256718c68fdb35f66e1b2a7fd0c99f54abb077b89cbb41fd96e58ce3e22c813ece462e8c3a0accc16ed3815b0f7cb8819bcbd27157ca34a6e6a2cf1f3a84959c17291cdc19ae3bf72344d17e9922ccb167395b04877f490f3d6f37cb2529e63886ac4e46bd1a061031eb855afc506e7c94656bf2ba4ef18f119751681080e5ac933c4d5c82e2bd9501443760a789f03ba9ec7fbc4ebdc0bf09b7a686ab2e2660d355947e099cb50e17cb4230293414872e4b20d1d35029076c4ca1a743863aedad84ae2bcfbc9ee3fbfd403a0fe32de787edd9c3e68aad00dfc2cd3a782d65bbb84614f633a6ddaf1466bbfeba2baec54d610512d6e1cf23cab6a3b0c79869435a16436dd40ff3d7f7841feec65239a8f5215d4f42da01f8c394afbaa03ba82d2971c3e33f3c73e72bc1d69a930b312b05cb3cc9b8f7e7f830e95bb8a09b94d19ce51106c3d0d06517cc9a72cecb4793f5bb1e1287bfd39ab921222b274cc1c92afcb54900518bca41f0b617d7f6cfac4b7d8bca5d866768c2e8bd92c2a3b17c6a051b1a8333189f40dac3fa2d324bac8d7f0051990015dac48c68800154e683c0aadcfbbaea095c7ad74e8a5ce23e4d325c1638d8a1617954a8dd6341c4d347c56a557d160ad07a8692a058d5ab39e6b08127f08aeedcbcf9aa66bd2267fa60fea02f1f230a0081ca8983d635e1a101ae8ac0192e4cea2e0a2d9f0e11d2de37c308b442706c0bfadd384392ec1a164672e5890331400c452c8f00d6ae89f164b8e0af977ca5655e250b7a1f66d90bfda40dcd4f426cc58ad76b169746f1d65056e45b7eb64aaf14388f91cc4492f4bfc870077dc027a867713e6ad079aeff8313706278abd04bc59e311529f3dc530546b8e1ef49152783a0755802b515cf8575113f15cbbacdeabcac9ec8f319c966b554c7343b99b537db9c78be97cad8d002434bc6947e97ec2a3e7929c0dfaa4c7ab041ed1639f42c993037648032bdeb3183330ba4a05c424d734ebcfb92882f2d67cc7a678a46ba5fcd3e851ce1b14f895d7f656aa46d95bcf78a02f1e6e59743f7d15cbdef3f6995cfd890bc5c8565703e7b64551f5e5eff27b58c4221351d34dceb0477fd40c2d1c4a027ed179cd59ca2c179025590f66a704bc97ae61919967394122418ed5eaa282fbb2d875a185526ec23e10bc804a58dd74afab9e424df78470640e6b7857576d1bb0c305f96303745f57f96460226ccc2715ff138b786478e416cdb11dfda3d20b7f7b71fd7c460895e4c79ad6774b9a7dcf940895a116dd464066a9ee62ef7b7327e701d75781f00ceb64a60ad05d0f20e750c58750757b3de8c09b1010a12ef9b1eefdac7d1ef56d77b7d025b509f2b5641d918a0ee9197218c5cfae8f23b448247aaca77483df608da8604faeba0de74fe2b6c661da818cd75c8cee65dbd506887257edc61a768c371f9daf44d5265baf877a62d4b079342e6d1cf81c3358dce5bd46a9fa49829a7c04d16efec306bc8cf32687ecd3ca1223e1c5f53c9107714445c101997aca31653f42b365ec75b0ef10015c33ab3ccdc19ed00d4b5fa86eacf1101d2a1417faf8b938a7ffb83adfdfc5550a30a1960e0d8d8567d304047a26a97a26357f319d3f58fd7257901ff364fa68b86b1ba27c11962b2c5be8e33eb95548444322e0c14205d83bf2daea918697848f6d8226c0d4a20b836c730d616ddec39edb67ec0e08a9102a5aff64634e85efb7bd3feb815e976e958d0d498c4a2a305d85b51c2e992aee6916685511c3aaf157e3b8b968b85f9a8a461e60675922daa8c97539c6fd72ba1dae7c8543edefd4976857571de9e0d8891f0e1b99a1ae08a8300d0b813c67bc71aaa2bba0d53cdea0d3838f47f9046fbaa14540cb2ab7018541e65a045ff33b8b9344c1d0827a599aaca3278ef1b1a946532c97a4fd230e668568eefa6efd8193f1c95d7cfc8f8bad7c21e89cd8d1cc55bd29eacd21dc777382fb8f096f6cd4b24a99584c4c65bdffc9649a16b64b210e68a5ffed9ec884d6c20804d96c2a7d0f281c79e779e336bb1ed405a79307f09adb099fad7dd17db4cdf516136c1ec3d412ba8af68bf0400700d9f0f578ed81219ebb92b5c5dea938292c8d5f7830f02691db51208b76210bf9db25a86ce51bca3a25a0ac7ed651876013316497484b2f2ce7980e805c22f190426a6978d707bd36ad913bb1a3bdccfa14c9cbd14e1b176b462567728a8bde4e7688e0a3ab8e231abd2c09652c352d7d961f3b2e2aa906d660c0d46ae7a4fcb9df47b4f549f6246fbc3abfa25901d27301f95db7c53d23f69d33fd6e5db4735be66e8d769987e7bc128304701268e463bc20d973051e965266458989d3056bbcf1c7152f848b958926cf81d83fb38bd6315c566bd396887221bd21c032dd0b626a18f127f048555f62e6dde1c82bee53c7747ca518eb21df38646c1d60857bd7b72acc66c70750c42d90c19495153662e632f52bba668820110213a74645e4a342c54cf5ef10ad43ef94d5f78fbc8a8bf65c6605a34fe6bd165fbd66cc646e4c71b019db52ab956111bbc0159c6713575fbb7a39b9ee623fad421363db2c405caeb5dc20d62030a8f9cd2bf3a55df94d8a17d7d1e68a252d4074bca559e3835b609a3dcd65b6a59f1092bd9b93e763f6dd3825d4106d560f36be613430d25ecfee28e3e9e6b71dcebed11f144c4d79d8c1e50d4b21dd1e6ef7e6aa194641fa42c227777c4069bfbe6c54f866bad7657d9fe8363d0023a5d0ebb43e5b85787e3b435fa08f5d15b4f680e1f19ac4cd4c6ddd074ab2958712c07af2c602d3be1343d9980728240223fe6441b2b65176592ee50beeb3c8508dc30c66e9171a5de1e1ec9954527d7a355f7e3ce2c54b1bb14a1dbbcc4681c8406309d950a1419b0f9de42b2e1250c312a0389929cc99047f49efe18c76a8355127d914a3a830c1c6ff2a163d728526e149f92231d52379e9b1c243d64825e0e897e4dc8935cf162d9024222a7905ebcbe3289d9fe7d1c2170cfdab50c6e0112e3c92fcaa4e06e46dd73b169d2fb65af7f52fd31e0b8b2632e10adfa5f7c2104a9d4c3aaffebd71ad5cd7bc3d9d81bb8d07758c544839ee62b950a77be3b12465437860404adc0716a861dab3ca4e55b7a1628fe9a6c363ce1b37cd7b939696a7b48034043c4becd0423f39a6bf06719b4c5ea6862d11ca9f8f27174c0e5aae377aca7fa4dbf26802b2dba1bf828f57618fd197d3e60b6efc9d884f965ce3b43e1dc008c72fb9c5d4819cdaa61dd34f32f3232b77d89a960ecec23b03861bf0e323c899164189496f36e9ab0297b9a136ffbc2a1b0ba489fda93da43993e9aa4f164cf83918483efb592cdd7cf92894943b055c66881290f0b76251e08b3429a97db3eed7bce0ea9f73cc38bb4a0a71752f64890156cdf30f7e970ca177e6b61ae1654398363796840b31846892468000644278937dbcfa8388459b245ee699cac9cabf268d3789d2a9c3892adac4095e6108f2c506c6ed745dd5c710481c1ae0bd4a2a26c9c70db0d5ea0faa296c54b6ae1cbf3ff8d5130983ad580d3d708185454d4b43f3ce6846180edd8f8726a931d4e8a7a85bd0b56b843716c546ca15e0ea3beb231236e3bdf997bc82fcda4ff75ad272a8389e1bc2e8dac9dd6a121f1a337cd26e2ee6c63d01ed742b91708f2fc844e7e996298d3535fd3800b230e75aa978c8cd50c659edb678cd314dd0b101a7a5cf107d5853ecf50a2cd4240cb5c9d29795e77ebee4f6a2a08f3d39e2fd967d5df2c8f513b410af686d01cb8fd18f39420066c2b6ae804dce81f65b8fba16d5d418b70742f9c9ec7fc330ac9f82d363dfd3ef249600b23e686c05bdbd32a934710985bace6b3e33b7f609d12512bddad8d42dab4622b4fdd818116755ab75249e8cdb179d4f980c78cd33410ac7762593ccc55fae5caf12844dc35f406ea52cc36b612498f0feff2a11570434ea26cc7a826248b7f6cb06d6d3c3af64c35fd5466cbeeba7959995358a1c238dc2f457f3c0aa6f47372f5f3471b85fabf1cba590589a74b385915501002ba5fc99094f684c45db476804a808f14a75fc42132609f69fc5a2090dc8f63b2b9268b58d3c40efdc94a0d17166b91922fb3efc5ce0191073e85e6935747d02c5f2bb5fa7a4e37117a338ba9f23afb2e8f85b68d15a296cbee5cded32e3fc1fa1cedcdf7f11b99a9d0ff96bb566528344753ace971c9fd429c2d9dd2c9ddd58662db37d3e0a2a3217e0ca2bdcb80a56dc79c376d9aee50d5b8969804a288676bc1828810c189e002c1f92443ca03ff15b0cdea7bd9961e2fd42641fb50e61414d96233210c17dcd85d33bfcfca6591d673673ab6b647d1ab7f3b40295d7d480beaf8cda73902f61c904ac9c4552c0a2a8006ac80c97a07c30a64071110949fdba6b4bbf5c0a1c84a1bacd6b3e2ddc48c871ab47c8ba31d21162f0b4512e277ee7d34829f4b9acfeb5fe86b310be16d76c921f70c6569ae20130ac127ecdd6ccedee6c6263244896acd7bfbae28dd4163e69ac8a2ff24275a9175cd5c06fbeaf75c59db1d0d356162f4e60cadd237fcee6013bdf2a179152b11fe8433e9b47ee275ec45d634f4044e56a5129280780c70c5fb5b5e04cef43c05038a521d9d953aac3caaf461f6ce877337a1fedc13dc9578d00557919c40e7eb3354290b1dca4a7fc95ef9ecb44cc8cb1c4f651da209c6f9206071c06787c954fc564b4acb8aac50f0f6596dc2eb7cded15f47ed99007fd76ad12f19c7355aa2cd151b551d52dad061f5853d99470e1ee57639c46f5d4a941dfc021621e6168534252ba299bf506e8ac12004addc072bc7089d2aab6c91afc8357d4e1df6774cbfeafebbb73c979bea0d9c3b7716f25604aaf498c3daff9af8120319f1f31799cefb0718fc372ae8fe2f6c4a9b845a4e1cb1c2974f14ded60c163612647851dcffc9d742df4b94c635ab12ca81a0a9747dd1a99ea3a6d9f192a688cfebd2c086b0cbd1b1e6f64fc43f051233aff85a59b67efc17780d5b6e1a676d8adebeee37809598fe99b3b65358c20d0e9cf7f77e450e4caa22b4edbc11dd670bd379256ffdab9f816df08304416645c3cf2c0b52a8241dcf4a3a0b6bf75d17ab60be2080667257d2da59104757666efbbd0100675e44e1ef45193eee697ad1f1ecea4a29898e546b7549f8ad2946eafefd13712ce5e53b92a9bef2c3b6bb2867fe8a1cbba55407c3c53fa696258c3c75f5efc823cd897d51eea7b17c8d92ad860c1a12c76868047420c6a4a2dabaf5d94dd28fec83a639859a7005894ca5b3c4ac16c6dd313ebce53e6b7d53c73789a14b8832d796cff2d62384696a7248edbc450c935dae4ca3af649a8b1969a67a56955d5b85757b3bac107157a0ad10cdc56d6812c91e164b2b49d07874306c4a71a1ee6466ae1c768ff7a35acc4b71a6888bb5cfb02f3035f134b9afe4ca1d7c7b0797e80bbf3825ea3fb6dd3ddc003a7e367224a3500ed699db92abfb851e72eb2d0640e51762dc535f187975ed30dc0ee429bc030f16bf7da507e718f003e03a88a6197345010c43dc449a24ed782dc31b58f06fdafc531517860bdda95226f1b0f3dc36d6b738444db7c99b5b6a8223526c5c4a42143408a9a964ba0f8dc9a92c7c03c03ad9e2cd1a0e8279b57c8bb81fe06a12b2e2d4c0d1ce9c2e911b4ab951ab1a7fe00d8e56d7a54f209a229ce9ea61a459cc0ca7c636821cbbdc8f1caac70daaf674b6bd79fd189a2067f15841284c959febe63f913e4060d2505dd21603101fa45769d29ef0e50e09bd6d2056702db855a0f40eba5fa5f3128b0bed538c5ef30a068b704e5976f54cf8fa97824871770b79da979a111f6decfb1dd11bd946cfa800b008f0ad5aea5aa92e205d27a46c31d4fe6cb909091bd21f082fb75074000ee46c2f3e530d77b34c7c5d6f8453025950d3e0afae1f9752655f5bbea8432e9f1014357ff11b08076179a101e4f9d3f25bffb5e656bf6afe6c97d7aa4740b5d9224cde4dede035a7768a8decd0055b9d84d63ee5b9650136a3263602a409306d898a6c10c0196b13fa438668bc01f3ab3a0bfe363cace48b97af094034e9289cb43161811e0312ed7b192d0e3f7c56ac09e5664066f39f7db87693fba08d091730e670e73e59e784679fe455a0d0df20630729acaed59c7d9431988d4d514c4d9e1dfcdbc76a43894e2c4ed7a6ac07a8d3f59ad3aadf661ba944798db1c28ca04a5c87d73fd0a16cad62befca77a6a95eb154c4db15d86c86643a965747d24cfc40684521e199b9ef3c7c73d29a86288070ab07378ec691459a3babcebddbf2ca9c084e4d8a19ca0bfb00a31b3c299efb62a69fd5818a78001e92ffcae60b6375a0efc07f6052f027fdfca52cc658b4d8718db43d54eac8bfd887b9d22a2948053367c240cb0bd44929bba18d9ed9121e84a76df871af2a88b062026ff1ff48833fb67c16330e1e7c6784c0c72e745fd5823df38d3ea145658e6a0127a3530cf6ab25178c002175c59f9e2961ddf3440555976e842587c25d5ae8df85a8ee3b665ffcbb279a0d812eb95206e3121c68b7e4fd05668c2a4878fc24c30e68987edb42838f716999ebbe9ee87cd637b974f317b7e0b9dd5380bf5c66d64c4c187d5e3e02bcf1d68f5b7d34a8b5c1b3900fbfd60c28087fc8113962f63fc6ba38dff63ac0692f47b5787464d9d92cee6ae225094605d8da52a5eff71b27041bbe4dac1f06bfb425d5ebaa17c50f9f500e942c98ab9eb356b8e1e7011fb68fd8736e87d31ce607d9b55b2733b280a34146cedc6b841c205bc46f2b694813ee571feb8f3f4a05b0c91e71f4a1e954bf29d8383e6b18a6a8513cf7c318df67a9028a6bcc4bd845385fd7d5184ab2b27c708d79597eb165d1a0e920b5f52bd949407b9747e00dcd2602aa2e9b1554c2617e2d3a368d958126b093930be776925578bc1707e432c602195d2586e919aef6bb8022db810d212cea01f8cdd806ba5514139214418f57550eb961e0b0479bc3904dda5240616d6db4fdf601af2578d17b49b077dd6ca9a548868bb15127b351635e09a3b4d98e70774d35b15419f45215261a37a211e37d2f8c4a02b4011e279d7958d4c3bdacbd9cba5ee4ae2a575f4a71785c76c52e622b9247dac11d04cda7676fef5754eedd890c19a3a7a2c98182f471ef43d2b2dea462294160c28ccce7f0f5fb57e77d57a80b0df526c7713f2575aef6f07e967802c2993f793adeabc7db9301abbe81b3607fe3e214e378219bbdd77c651203b9ad7b3fddf4cb23f2aef2f0083b21217a182f4272573c05af4c9493868ad520270e55c222b9be832a04fbb518ef5885333ae4d3aed81a4172a1c18a1e4711164c8b17cb17b05b25da30bf8939afaad6662d663e9d7fc754f1000e654b840c0cb08d8b01c2c2e9328a9c06157463613c9b597d2a47358a65b4d241cc1629102bd97d770d2dd5b2d1c2af9800d0f3c3de5b26f13fb5e0aa9c44802366851e639a51c1a49660d2fc2b0bd13cf3564719e52dfc8926ee69702228707cdca34b4d82a0c3da4561a21068ec6abc960d47aa789a430e87fab9241fe80c14d57598180b4ce9e0c23a2b36afeee2de90fddcc0c029634909e2b70eba0dbbb2fa05ee0a5cdf9d80b4f357b52897a26b8a2eeca1e562c4ff55ad4a751c1ee420f35a336d9ee14680c3920dd7fc72102a2ba960960ecdcefb13635ca36da3f124677c5187f8d84ba9982135e2530495e51c7521e763f3ea04ea0dd4ded4254987ff742ea1934e16c3dba7b61f54d79a62049a16dc0d5b7ee182b2996f792b54106249b40297ca0e96342d7ad62872856a8c2126bd348df45b845a959e853d7a893803c9f42bd59be949ba684ff65dbfc55c113bd1ff12b23a980dafb220e323b82bab57bd77f62586c55668d1e721b13b1b723c619771224665d4cff571a6b767e14745a6a4b514334e0962a52345c294714c10b52432aa4694b6ddada10d9e5c02e27bf7da9ad1b98cdc3e14d151599708a8a115cddeb404ccbcc223d7a140603781e1f8402ec2e029d6e4641acde00e858dd6c9bafca746b6ed649f3ce8063a282e5ff1fff8506fca003ddd2542bebf930497181414ebd5fa51ac68f86c56b47cf0dd293e80e33019602fc91b385b72d814cc4c03aee8793ff082c832b59994dbd043e9264fe4e9be01a36e23351ff1fcc55dabae5306f92dd3cf05134938a3efd47979dfecb96361e8821666c37203a81f337e3e8aad1f6d017968c2b299a95d06672190dfcc66a91fb2070b69bc6f842b340cdadc45b1a7826a396778266ed06ef62962b184ba3ead1d893bb065fe37f0499fabd03678825f88c02c2146b9ee130cd87ce94826c99aa9e61e1ed5786a765b7dd9eee83ca79fbd45373760535ffd9277060f8273f2ee4064db3d74a5c4c650ef8bbec3c5be4af00fb042de05cc34714e2aac996960b2c94d9b95ab4ceee7123de9c930da6e690967c0c82795ddc18fa50e47f5d0bcee2ce785ace0378fe187af1c9695455f02ef958f53a3cb39abd6c4da68fe70ada8517bc20c7c2c50bd998d4cad5bcc3a208ce1446aba7189fa2df2b7971c11dcea2050793de8f4d9822f1ea097eb38a7c8c7920796d44d74b67b79cd5db77af0bb81b0d3c58b57d13830ab41dbab504d0488f2025d5929a3e8aa9f4341377492245ce1f82ecc1ce0e8867c570105ded5dbb7475a4ab1cbbd98a1ad41cc04c76a2b992c0f00150daf9918d9099260a8e6563dda3ae244fb6bcc48eaf184863b1fdb20d940c1cdf0e653ce0a7f152478297b00f3c8af7b83558e87a079f325975a39d930b5fb5b8e2d1e9056e212b8144654e9da2c38bc2a22e5461501a14aa5c24fac79933529af2a0346075a118644e4e9e0d68f0570b77bda6d93b2155b2b002482fb05f89e1a8809d8630e9bf5d2ab40ce30199f00f30773e460b3d7c2f2bbc041ff31cb2299ed392eb327376d8445639931f18dd2a66fba93c42d6fe5c29c2cd3cd3f361df20299313ecc6e5624575a2b1e405750975ab7630948662e634b6f1ead58c1f7ee6e34c74e26c719788c2b6a422d86e19071713a752b42049c6f910ce7a4f51955d90fd9295dca1c4989e040e4e1a1ec575cf00252ff8ece36b09b84c24a59e9efed34501898ffc85ef981944b8330dbb6c23ca1e6ebcff6fab8946d877276d0844faa1263ffef858182144dc03cbb15724b5e017a188fe3ad2c84b17f46d237dbaa790952bb21bc78cca3558b34cb0256a05d0855ae55fd1ab77337efebf784bda4aa1b2df41dd30c803593f492e70a296941a0c1d4aaac08ff6ae7228c6d21f2e543323bd16c340546d3ef437f9895b24d12b004b215583eac70a95f4fba7442164f35c57b95452bc58451bf22650bbaf5d91f67711e6985678e65ed5c68e775dfd30c131a207046a650a1b1a4d6d409099ed732394d47a5d8cb0315dcffe052e7d99f6dd5961c1d903fc7612c7358673067bfad312b5a66a62f6b1ff705c9a2d768d61bd47eb0792c5aac17e3c5009c123ebf20823f0b9079c28653d404092d568999644060962222a8361bf053326f582abfd25311c0eafb8d3af89c8308bb0d43d09241c435e019314eb47ca557aaaa34a70ccd2ae23dd2977058760b2e14a49e63ebfe33f57bbafedd2caf44d813af625f161811da51a6e811b98b23e3ffc2a23ab8a0353ebaac16c9c9b0b71b7310bed0385b4e0fee2089036403538f460f583d404e5078669782fcd4a8868a917550e0babf6ae8dce78130a105239aaf35c755cd310e0b4725485c94be3a8c37841f78e36beccfe2a4d87eb8b91c6c03d9f768a571f66025fc72d3531b5a882be83381fc875c2bcaff97d7f048c56d09a6f15f113590ddc8c4074857e66ee8364794e14d3d43635a9fc52292daa6068b41bc2359a565ebf82610a2ea48ff13204a4b821eb328e15b2d6a47e696489d4f55609bc5eafcf37cc994cb52699471b1985e4ab711930c94508f2d34a5329c1f88e6ae9d2cdd5b1d579baad770b56ab1dad8235f800c4ccfb13abec42fec69c18255462892918ca3752e27c386ea66e7b7bef460281c09d2f876e1dd5bff6efdecb54aaf459fefd6cd532a5cd2bccd1cd81aa500304aab66cc487ec951f2119d6e0fa17a6d8feb7d07149bec7db20718e4f31d88c01f9a53d5ba7ece3a4dbc67af6a35d130eae762cb7962b9ae557ca38452464002223f61bcd3c7353e99d62558ceedfcb9374d4bbf89680c8e2b9585603e076f1cdb0058299b4246845dc79d1043b1422efe84018e4c932c45beb8851fbf485e36d246ffc31bd7483521f69880d269edb8c8f44cdecacc63fa964e6d69ddf15679907a1f335a6f85786ecddd5082fd437e1b05f3580cfcf7d539c003e8a1eb9d0c9c02802060f04376cab336275c568da9821fc0a3190931ff31741041121c7b187e48ea333644cb56c01069ad665a126082aa7967f9dd59a006d45b1f396d3ac5bfb22514e3516541d54d3f8baaf21ccca50ee74eb55eb7df3e47ae281cc6213ae6aaf86a6f01585f93d080693007f11472b3d2fe547692e56334cf04c51077a07b972ddee33aeed78102f4eefe7fda627102021fde0c34dafc05875c3c31851e06e18a1746e66dd2274b62c31e441fdb2b613e5a5c07e3e592219ed8871393dd10efd8bea0ec1e770e149490983c08a927394f57d551e82eacf0dc1fb09ce805202bde7afa3449efbdc350fc7251ddf4edf3febd51d18bded2da09dabfb6cebdbffc66f45ba63661bcc25fafb66ae5e306f51134d86f131d8d47ecb0ba488b2d74ca36d3cb2a2cf6947789526c6e699ff9a950667313ca12639f4e4aab3a687ec7fe18c052a875d6cc4c958d9a47b1504e7685f829a5f6e6de4af74f9974add840fed163f9085728eca74d074adc051c8ec37695030de0c086b0af688ddda26268332c63c7321b157df277698315ad2e40faece30733d0c9e23a3e3d8e5f8f45c605f069c50e08c40694dc5a4edaf0acec82af8a3f000d297a4e6b75a4e1bba8e3dde41cf985685d0ff54483b21318bf1bc38733b35ae107d656ffb9d74c6fb44521d2256d7d810a207d778bb7a86b8e53253c866a2b928b7fb8c3b03086f391763b802b29df9df1c2943c1c658132421f10952a6c5969dffcde7c03b6788f66fe91b6d73394023a7ca25cdbc587b40204ec5cc8c1cdae28d52ef559720a8b5b638d3ed19583f80ed70fa072dea03bf78c2157077270a9919312f55b6a252e9a2f95dfc05793c9955a43cd89b8b50d483e174f908529a23fbdf143b1a8afc148e913604c7faebbf68da7aec75caf731ea2360b0a05dfe05ddb32a80234928c901a6e8a1e17bb185af8a10ad5d174b5a141e7551ef77cac11753fecf614b4d798490e25de26a126e8249aa85a1fee1bf8a290f37465e74e83147fd73652ffea88fe5bf934b54a2ec998fb51ff4f03ed4c4e9baeb356080edd3f5a306af6590c89c2bdcdc6cb9d7724dc2acd6c689d72c4cb6e4e83d3c733447f38c13a06ac87c31b9c6a3f70824b227991e44872a3f389a3739b8ee30c07e25b81504c8cdfa15d94609945ace1f0ebf6965e3c76fdb8c25d105d798ebfd0df5b9da64b8fdaa37fb271208088a2afa6dba302ef7a93099882af5befdcc8d76307f58bdd1885d553ff37c79a0baed07bb11f990a894d2e3399b75e96d60f6495e8efc7aa2ec87efe021b58383eeb9b93fe72eb34a8136eba2a902e16837dbf9d85f4215bd98be7ab43839905274258164d03c016e1cd1356bea19318ecf82fa4666d629821b659804bd854a6d09b4e2c233ce0573b63632edc5455441769fdd214c052080f311aa5a1834fc641dfc6fb0a8413a0bfbda76b0c103b410eb9724e1657b954aae47243cdea530b81f408ae8943209973c32634d63e0eb8d9ced441f4985f24fbb7ab825877271d97c45c6b29e2d0e9615e2ab2c34496507e926bd237ed0c1e08930c89c99195a58e360a5a70c7eb399174f90c5a8b9bb207ec812a66bd87eddb5edc81a89f634b6b3159a5e85b393009eedc6b237be5857bc35c70096f99377c0264917e0b5ab6389f937119068177d3b51bf7a77c3b72e30145cda96d0aa5f165ece2d13c428ffd67fee98a318db5f7b0fed76df76721468d8469cd1ea2de4471bb9c2c9ae37dc071e232c34223937bc6cd34fe522f39ac4f616bfdea288b7d0c1be6148d04298ba589774ca30cb969e1cf35e0f75c631e2f24fbc1396653a22052e8137d6f3a65eb3adeaeba10cec8e84d039d4cb646a2151443a27322dfbd94a9cbb0d2ea59572b3c8f70f1f67ba1c28fc5bdbb048b43e97a68270025d6d55068b774f43e2e674dd8b31aaf8867fb59dda4c6ab10d906939e95d94937e1f33cd7d3e54c33609f395672345b8c3ade947fc84284a0d9f5fbc8f03eb41fa81e403e488d40909807d7fef3475fcb9e535bbc58b8ad7d32170a40a1e0aaa7d25e44e43df4391f7da610175fda220d396096de7db1906f8d74a64dd147949508bb3012dba0a0a6b884caebdd760c19b3102d2b5eb4943d9215b839a8f9d8b2f13eec104a1bdbeef0a9eec096a285b9b56809ec244921b1e801294a4d80e0c636ee6026b1ed54bfce1e65dfb2e6f5b3e7721068f6f89f913840dfc9e96412997ed4759c389c71e0faea159058cac4d0f0352be9fd4a76a629dbc4fea32bd8f272f611b909b29c1b1b15e81bb0d75ad879b943b560c60fb864d9bf30a45f999bb95e1dc649b73c36d9a8c5c7e394209329073e1548f5d08f9042b7a81387bc5afc14820b2331b8fadeaa93dd198a7cc9a9260651dd5d22f2561f96af192cabf8e31e26d0bdaa7a2fcf233ca5793fd741a01e81b146886eaa5e77438bded5cd3d1586f35d3fa9e99d571ba7672c3d9ac4b7f8997dacfe1a804f52a684890a8af03b54d0f9d2b76d0b1c9bbc6b5a0c2b1a96bb35fc36459039d2b8a7e443544adbfc8ea4ee9e5b6e43c6aa63f82932f40be46f3c770de736a08eb22ef1333975c4013e5982ca1d540bfe518458c4395b5f491c9836586c767c2c4723f582437374f26bd6fe7e85882c6c9707d151a9cadd6fcb3081405ab79453806e3657faadb3761e03aae41c706eb784d4acf908a84efb84eca0ed3b60b1ac63f7fddbe58948355ec8cd216975988720d431e3e05d7a984db4da8696db9bdefba791358c70fdd8330db060f4ff748674eda738b85129ec30707934f48f1a924d643c8e77cb9807a5ba9cc74677c85a8708581f19ec239f3408c31edce4f6706317440e2f00e269bdb7d77ee6435dab610e8ac18a962f5a6164016dd642f61f44a9f2dc3b79a3a782eca9ae5ccdfb220be5864593b717c5c06d7a486a11e448f8008e21239ca368fd425c7f317c69668c7794d4bcb7a187580978d821b986928806600470d3a955349f3718ecb77120ecaafb968efe96483221414482a2a4a6fba1afaea9857f1631ed81a215e8d9f8346805b290f4bdb2549e1eb51635082b59bbc5475619eb52fc12834435766a956b98f8514b01e06bc866575363d879caaa3be8f6fff9b6b19bf88527d3c9eca099221d9a458ec51b96633445f3f4be2bf70961e32d8ca8dd1885ce72774927c0c6edbcb60801356bc47bfdb44ef2a0f5470d7837673a887b7aa3a84ea95ee39efbe31dcc1cc4f8025c98f9c7fa38e7d1a32f741a366b2036ca3959e3f270e7e240eb8705073dd68a65a171a781305b6612579fb3218736b30f2e2a58d9e7fc339bed448953d697a8e87ead7b6b41c35d9c6d3f2bb0f6939d516c63d6e72bea3916d29a7f87f60206ec17f56c3ed2e95d49599da96b21ff9a99da4c84a2a4799db880d20f2c04e14c795491a2844d930f22030156db6e4152ee602d8b94ba700789e03363c96afa22971dc844c4198a1a2e53b25a8746236f58e64d1245d6991e92da07a0e68f152e4f5ae47b879e96287632fadcf7126b96df54f5423c5eba8bda5794f10cdbfc1ba8f32b6e54447ede00861f04b438e2718c926d4301bc9cf6693d247cc1b6768fabd0e646b3730ce6d6396afb452250a86689fd3c1c5607054876fd6990884a325fd95c2a2c9306e8003123e932367de3751fed551696c3637ee867e1feb941aeccf7d743480c358b845892f604de30c9c23d84b875e397b6137dac0c95b123a8fa109db88e4661786c94ff484281330254cc0b8ac4a44ca7101b1311dcd9b8cbf20df7b287aa5257c0cfb10a74864c3734b2caf68843aadd7cace3185b97c7bcbbd72d59b99ecfcf86f0f1622357441068d909214b2779015f17654b9b541a265d5487d4ae8ba288c8df0778d65be234fa27103694b881bac244e1d0237977afe16e4d4ceeda912b8d843b7515faf04cf186265bec5e8ab1ac1b9ecf7b6ca7ff4e0cc6e8fff16560dec7d481689c34ff56dd95b8da815b8d2584e6712c9772bfac163bd16b3ae5cec2901cc358a978f63013a377e689bdf73567ffddbd619f970373f42eba1bdb1e41c759646c8982d8871299bd98de7897e5ac323cb631f82e5c0d392872fe0df76354d48b2da51a4e64c1bfb579e854143c3bc7b6a071432dbecb52e71d4a4502311fd56121630a00ce085c841010191742fc06720288493b32958692426749e7b210a40ed22c1995cdcfb955e5bc8e4700d8379964ded201bf531f526abde14dee1088b9c8690eb669fe1f4e81557c4d7db5a1524edba6276ded634e1cb4d7dcee05cb8b8980b20aab7ed4976b44abd0c27d8dc649e78c54444c9bafe0b4f23db9d9b3ab9fdbcd3a9a3520592bf0e379d516431ddc6a4d304d560e9c3e25f9185772894192e027ed3e0c4dbc4ac0ecf0c06a0b7e90ccb1648ff4063ebf6fb514d1ba9477e8f987cca0eba2e74f1e8ddc8b5f2d11ec758098120fc9bceafaeeda2e971e732b8db67ec7bb6603c27190e53cdff00078cd8273df8da03f482e6b1276f36d5de2037dacbb62e2372c20bbb4ddd19e70bc3d7f9efd58d3ef5f74f663b2b5ca5e96c5a2fe85ca5eac1495d7f1751c7d8b412b3ec17456aaf3ba325575e9c57d9ece3aed1b2cd921890237ab440daad6798e0088834d716d74ded151f1230bce4412ca28acb87975f77e6e0153ac62f0622b25258c8f8f639955bab27f686e0578eadd19583291a01e11a29fc95a2c156da100dd85429ad58ba65440c6c1d96964dfdb8ac8a109eb25423b4e4c1ff08bc277fb78166f790b715906c36f3531432d782d41a40dc99e359aa1d68404969b8a357dbde61d144d74f63a0221cd5fdbfe3e3906937fb80175a03dff1b10078ded64ed759e5453e3bc0657c685904b79fdb868a33dfdc05c0edc7591b64c29a9128bb568e51c1e147011c5d74386dd65526e22de4b92c8f627d6b25300bee53722323c5e647e5d2ab99debfd02b7fee626e8d0816543b918e9175d0e9e70247e44e1ea1fc381f86bbe3433006a2c9446a1afd852321a790a7c26dc8a3b6accc7a1212772a92ed720a85d04a724ec88cbea4aa41a5b1ef114078b998f7db2c65a60795b21be8be3909ea1c6bbd8ffc3be2a419aa08757097eb2cffae50c52fb7fab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8fa77969539152527ea79249ae187b1dc55096be4acc40aa0d2d64a90a8b8a +Output = 8f689ea980a681c69ada6f16c130f3e0d01b9598c831e6d0b15f976b28296a6c + +Len = 93152 +Msg = e871ff064b1eb10070b9fc0bc88566a7a60f96ee8e63b86aaf7f232aae083915a53c8f7e6c284ff8171bda6bbf5ab167861595b9d59aed3ce8c969f28dc8e55328f890e5fb274d0da4075925e7de2eceae80a8884e7b67800c9174a8e06b270d798b4866808374e82164c262c87aa78528361783826ceddd24bf8d753059c8eb9edf002684a38c31951c5d49e894e234fc212ad4f8d649fb373afc8103f99094a1daff508ff15d8f09167203d196a982302829a0382241834dec09f3e4b546b189668f0a27d4aeab843a49b70be6c217ce325b12cbb69e1d6ebcfcf458f4b4e95f6af67cd6b4482d0e702a8e1ceef59cdd29094f38fc2770a3921cabe91fa0e52acd7dd023faf4bcafa05cb08e140cb966f47b82075aa625f356b2411e9cd34df2796c2b960c780070b22844e9c2cd15707bf9d1c13ae1e367f006dd7fd415c8c0550bb7b8539ca3588ed672b35f025903a6cb64ed03a253064960a8952f2dfe9b49a19c10372a4a701dae647653712c275d3864131daf1dd84708cae716e5988b3d78022721e89fbf45f73fb905e337e58889f9bcf0d0e8e5d3456afeef033e9819d6108377a04a4deffb2e05df1f22440f074a6fe4cf5c36d661b060235097cbc504eeaea218f322040057e148ef944ddaf780b4617322d236a2c5971b944c2b2a4ac5300b1941476a4fe2d5a8193507d1a4c213cf83e2c1dd51d12b3e9704c02eefbd8f196adcc30b30f8696866ae7add55391596c8430cb1b5fba2f3206893ba3dfd5533d56d9ecdeac126ee9ea7aee4510d411e0aeeba9c186c86a4f920abb77aae09c3209ce09ac76493a389c7accfe1651fcf108bd385c04c5eb8e8d3110beff73430141092590d0939efeeb77b874d693812a4c16053f6c2b397b629cba0e4015de27972bcf205da9e3b971f23f3dd43134d8c3867f002f60ca92bcce35ca1f30c411769644cf7fc4ced4aa5adfad91839ea9199f3432c11f1550e6160296df6cab5b59e94512b9acb6fd0f420868813304f7b8c0934bc3bea0629934bee92321da61db853e8e8daa127f1b2847e335982e612b8b3abf99b80214207ab9356ce907c1560aaf978e4587f7488e1c92215b6151ec6f8902d5a3a0f226888ff02f3a89f663e9f6d21e178dd231d40519d6d5546665de1cb9e9fa138915ceb1cddc8ef77d8f93d2a2cf987abc41aa8fdec89e6e0b326744594933b04568bdbd13176ec6d323a8919e1530f50202622b55692f14bcdc9bbe4595e93dc3b9f6006442427e73ea88d2287189734ffeab56124b0ffee7cedbe9134272e26063d82a360fb294ec2ec502e676fa8bf290d69ea9f0a9733883a84356c16964b800f4a91cb23790b87adda23ca81c959653846360cc94181b85a15b64a5552b471bdbfb6cdc39f84559434ebf676826a7c13552eb6148541d5f279fe1609eac8a1efe9fbb0032423f349656c34755b5a37459dbae414ecd9a7adb8f3185de6eed74cd148ba0c8f4f2b737590cba6dd915c7726c3ddf1fdb2f630db7f9777cf90dd7c7e863506686fc3ba6d3d05328f78b350f92fead241348a26ea89dd7f2d157928f89b671938ed84c8545d2841f97506791de853df3ec72b35ebf8309e86e574f84871996b8530364232d77dfaa4f11b999ad460427ed4a005e8b6d9fb6468959375ef1227daa0a1d30f934c861755bb5979dd592089c1b23fe8aa1fc04e06a6a287fc1c73bca58c21f479dd0dda07ae61c1ea85a4e5f8298bf4bc4c12cd276dcc8782fd77b5a7c1d4e87177b67671bc587ae22df31cdfcd9013d4a71b6833b4ba7c68fe5d4c0e0695f46363a972f9ade7adaf9938b6e065f74dda7703a79241136e96674a0a42240c1f37ea0f560948b5613811993962bb67aab605f212acdc8066f3806875abe3e071d55210ab08566b9e65dd3e2fcd95893351990f32e94fa96a6990df17b20ab9f225e3d3f85e9fb06c1e44501f88bc05ef917a828eb2613585dfe1d778bd6341ab10e781c572eb2dd44b8ff792fdf882e75ff274ae6dd9cdbc3eb9771e36b41da37ca4419bae0289ddd4075a0f9310a821a4470d1b848018196c61e79383c6f8e253633c0079ac6d90a1f1a21eb2ce21a746c2745c5d1ebfa35221505f0e6178717b6c997f3bb081f39b98f647c2f892812fabd2f9627b6962d840da083d4c4557de07819d5dd76c11a8437f132b57a6b5454a4e7bf95ebf5fe708ac187a51089c627c1ce445e9d7efb139650956b3034d72e611698c9068a165bfef172c366949f11291db5cae69979fc3cfb2a9d451509cc9424b82da0d303caeca8bbac40f657213090a0aedcb105829e5948d8139c7ad390aaa43025615521d66fe8ec3a3f8ccc5abfab870a462c6b3d1396b8462b98c7f910c37d0ea579154eaf70ffbcc0be971a032ccfd9d96d0a9b829a9a3762e21e3fefcc60e72fedf9a7fffa53433a4b05e0f3ab05d5eb25d52c5eab1a71a2f54ac79ff5882951326394d9db83580ce09d6219bca588ec157f71d06e957f8c20d242c9f55f5fc9d4d777b59b0c75a8edc1ffedc84b5d5c8a5e0eb05bb7db8f234913d6325304fa43c9d32bbf6b269ee1182cd85453eddd12f55556d8edf02c4b13cd4d330f83531dbf2994cf0be56f59147b71f74b94be3dd9e83c8c9477c426c6d1a78de18564a12c0d99307b2c9ab42b6e3317befca0797029e9dd67bd1734e6c36d998565bfac94d1918a35869190d177943c1a8004445cace751c43a75f3d80517fc47cec46e8e382642d76df46dab1a3ddaeab95a2cf3f3ad70369a70f22f293f0cc50b03857c83cfe0bd5d23b92cd8788aac232291da60b4bf3b3788ae60a23b6169b50d7fe446e6ea73debfe1bb34dcb1db37fe2174a685954ebc2d86f102a590c24732bc5a1403d6876d2995fab1e2f6f4723d4a6727a8a8ed72f02a74ccf5f14b5c23d9525dbf2b5472e1345fd223b0846c707b06569650940650f75063b529814e514541a6715f879a875b4f08077517812841e6c5c732eed0c07c08595b9ff0a83b8ecc60b2f98d4e7c696cd616bb0a5ad52d9cf7b3a63a8cdf37212061db15f44324372f0c7fd20940ed2dceca08e943f79c8d6ef44113750da72f5b60516dbd28943653e658f25565650654a9d540e7102d2c9e019a1633cc4a876ccf99646d2c5d3e91c91b6abd6a5f8b0a2ea68dbebf4e1ef753f79f439b9fcdd71819967efefda44b2d4da79bb03b2051d1034c35457dc91d74003b2f1c25671cc268707cf0e42bf29b56358ae7866abe3961e8e5434aaf72ea4a66509e69e7b066fc8ee1a2af2a2a9bdb910570dfceb1b04900395923569a1f1c9d42c2ebc4346e5c4e4794cd235597244695dc95c0dede3f1ebbc79642f58b1d6c800a09811b50ee3b1937acac0625e6c2b69b56e5982b9a90e74f11f907c6b34092d471b2d7b758e1c12bec28aec099a1d22d71b160211203463034ed535a84b5f5c282bdebf9f2bef9b20a2dc1efa34083139498e9570bd2531b6da47aaef8392354db16ea91624f0d9a752fe20b9a4b43de3e1076160eaa88713a92b04c844695fbd96236261dfe8715bba381bce50e9efdbccca91680f870d20a4cc6abbf6ad8380c0461208c69e0e44c3d237c2a26fef2bf01f4b1192886ae7b37105510126489f191ee0933fdc566b53139b1b000de4db374db7e1dc744670bf61fd11cd9c572188f5f58bb468f1d753447064d48d76f1889eff6255124bc1aee57984c2d7570ef41179788c0b8890acaddd2285b54e77ca58481c652c1fe46a45a130499ef16e47bb93e02f8dc39f44960bdf7b4e1474e7c4bd9675886ae1d9c99e9fc8bbcd4a683b6b4d05b6490b054721221e1f70f1c62a8358ebf0d5bee5b99859a9f492a93fd92a46764ec3dcd6074874d6f208f54fd2c5ea31290785755cb6e45212e894b4ddf854ea1cd81b9e20a85c0b8d87886a03a9d5adfea93e70fb21ca2ddd7912af8efcfdc9e931cf47d8686225b993b2ff0757a0c93663efc0de0193a01cea2b18365fcc7b7d7500b878b10e8c3ed47cf624f8d3ec98dca24c4d7dc51599e6e7d71b484668a04db6d947aae9a8e4f4ed37a3b4f67deebd5efc90bdeaf31a134fd485e0f5f81a61fa928f7c7ae273980eabccb292e6fead2cb8eeea89a268196af8be4f6094b258d3cb964e49a0b26ae538e61b2e8e91551368b12c2b8a4ba141290dbc0fa232db4a6ca649df4b6a127dc73b1653dd6e5d1bf41faa57138a53da50b94f8b8c6091665d0594c34c6338db4111cc883b5f6c4c44818d95a5efd63f560b325bb804232f86fb597d096583098cb16555102a2aaf411efc6da840d378214b8a0790e838add0d2bd96ec389b0e92630842c498414bd14020688446f18b9bc182187ad379e921d0ea955ca329f2396eddd8bf715628dd2d210da1c9d982abb43f15e08c8dea633f0802c170d5bd6b1c0d9e6a7d144f4e2e26e567913264386eec8629dc1eb87c653e66826546780fb3c01d2b8320c70a8b57773f65a53a2c35aff3bd8bd15c568bb548094b252b0d7c1ddb6b4d2598fb8cdd4b8f0eda0b6e52b0e5046150ddd7f89530bde919dc4dbf4d6293a1c9cb0879e0e9c05578dfe60d18e466264343e9f605a60609cb95b6c4783a0948b467189987da3b0028bf7cad0f764ba1519773cb2d334c71e25d32d2c4e9370a8f741535fba567d791b1187cbc251b9b23e05cc0365ef7ea073da9325cf983ae02fbe69564d2aba45cc0a2c048783edc61268e1d48b06f3ce23b012d66f257feb4027301e9e9712d30f102c2dbf71c2cb271f02a8ab01d2f1a6223090b5a1ac04e94a4c1b273203bb64e20ca9b2b1d53beca6a2f25e6678b58b7f70e72bb34bd77b6611ce8f81f9695dee41fb39baa182e38e47341dab61743446586c49c0dbdd872925cb3fed80676a9370b49d02944aac4463f0415739c841056b728860d8819cf1fc73a0fb25301b8ffd48650049fd97578db991e04e2c223b0eac7009ce5e1d6f0a6a6b21544dd1226c391a5a1f16453638f267dd3b1a6865d68c892229dd88ded401e7069a3b3bf922093566a02f266eda3d4bb46d1d840437654c40778a7feffdfcbcf17362ac82d33b3ecc59a2cb7ff5eca5fc709ff594c5f931fb33ef6310cc9d55985c6eb34dd431aee1c80ba4d820931f1bd23c3da5f69ac2a8eb76c2cfd4763961c1a9d0b8c9aefe4d67d43305cec30f990e5ceca63dec86d01abb2f9bba19d0d44fce956217e5b575b596f69774ff000a718c53142040e7172e170a02d1fac466632771c843886ce13dce8ffb97a988d6c845317e324a7bd4a224d273a09b8c9e885ee659d1097d166cd53fa0cb4512946f01e852e85badaf236f198cca6e81f34bdf739544db6e8bcf65b635747435b9d25ce820b71704ed0e505faca3f65cfb0a239a191390d9c7d1da641827995abdaec0c17622ef1a34ef731561b1c5761c6fb5da43c1ac174110bdc9c749370a1630b804b1b056460d3331cb3a985e55ddd920a4b3d39fdf9e088a67c17dcfbc6a14ad1261e3ef10ec6626f195bc2374c5c2de99d7cdee7b1535cacea529e5fa1fc73a7b05321c234914cd191191a76b6ad95a1a2e151a726d04e95ed0d1fc3bbdd4cacf2a3f6fc5a9bb9eb21cbd7ca213792db6255d966e0c027098e30a9509aaa9f86f3f404ca094c7165d4593f5a1762ec3fe6bebf4c668cafb2d4a4822dc8cd32ddbb309452c70c3be6afac9b4f1f966a7435064c803f9aae35c74ff284cdaccd5a533deebc1f43e116bcaa32d0c23bd5235713c52bf654ec3d6f1a437a2fb13aa4c2055a319659299e023c4e0686b9f5f355cf757410213070d5edbb3978424064106e20d9b6b6dc26894b3519f679928d3620a3841768447600b1a4e92fc9a642466287db06c3c2555abd303097e1749802f096829393eef8f84c44b1ddad35e56bc8d85f0ee6a2d47c7c8773f35a62bdc12697970a09f79ec6a8e4ba0956b5f687875c8f5788454af76e820b914d26a47caaeeeb0632270f71accb2c3b2cee1ca389589168127460d47d6920f92086f43b64e3a50e7645f4013f432efc97a700c5b5178dc9eaf5be1a9083d9b43d4b56043cbeeeab3d1bf47f4b92e8d2ffaa4af8f3e0ac037a900bd18e195f490a3d71e11ac6ed63ef6fb8f2b7018348ccbda1412bfa159d290ff0016173da40f123eed9e644cbc1f40ae7626bd827e366a9adaa45aef21f5e3814b3f0d9712258c674f48880af4ab4b42ad74e5ffb2d3535173a2a44681283d520ef23934c75a9efac3be8c2c2889834295a4ade28ada22b87f9c004a1fdffacbbbbe2e894c44b643db5ee522b0206548bf2469cd5eb1351a4f0f035c5683a868e2115227194a6eed16b8377134067daf9a82be22b70f1711726a321fbdb9c2a4028a4870a6f22540d638d7ba2cb248f1a83dff852c3a55187a3bf0e6cdf8d627ad8776088dc27609ba7f5a4ff2aa33b978b4b26716c95ba9d702d4540fb75f4e43a77f412641dd8233fa43b53e54ea617c857b4b1f42b730194d60e9eb8bca925558a8dd18d6c854c318187c5858c974343ece939e2ce465a17a1b0ae9dca49e6329971ede27c2fbf8773d27e91c4d8c303f00e32bee5f9510275759a32079cced78de98de8b69d24496462a691602f3e104d6bc311da558d5c3ca387ffdc69864e4c3dd9298099227d3b81640dc7655c73e94815611422b72ddd839f8daf7ab59fc0b5fa2c43e9612de075e08e6142c633aeed4f39fb28767e405d0a63e99504d0cf99187968568a603a86439b968d245882a19a1ef72e73564d79f009f3831beb63305a9955a8451f33feb5bdce101deb4fae1e9a70fe55bdec1e7808330ca1f763c3e91374a73971b2235d7b71915af2fc5a0234ce5ec5bb0596cae713f73ffdb79aed6f2c1b0f5ea03f645de7d9837871ee6f7579176b5980270f2efa0e9c0447fd8d36e4cb6eeee398f1eb98b03f8296b18ce3daf1ee9e451a6f6650176114fb34f1ef0680ff2a64762daeeddd361a53ed820857b3f7933cb711167cdb3535bb864222f9026a190b23402d4c2a114790e8786c59272d3e4e451ec6e822c1706f3da857251956c3c1e651f01e5d781235ec9795491339a9610ebdfefbb4acccff9f4a17f28d6b316c068880cc3f12812a3f060d8d40c2dc5e5817471d589f5253f551e9c825526af5cc0e64bc98889f5729ee5c8f7671dd2e6c5428b6d842095386e4560faab37645800b2458308171a4f47708b57ceeb6b7929b2a2efa3cf9e89c2ce52fe5355e436aa64907cea601fae6c89b691ce06fe31114d3ee87362af87d511e909b8129d6d1085a303c9f563f490a9d121cef0e9933e8ae5c46d7a56c727a899a973fdfe8ff59df3d4013785d6364941745c49dc13e3f40e101c8712dc3cfafb6a01689603ac06195a3ab703a7dff0ae25f0723427b4013e67eb09622b879174a7dae2e25cb6567a02c0e45c0de0386da3260a9063214aed186381d3299a049c0f7b0d621fa7179c6a5e4ffd5d0979167857536f4abe2990be1080d47ad6bce7ed6c4893b0e0c1f6fd4d7a76399e3b2f122f1d2f42dd35dfd57c76e483d032deee291505b515de203838d4351821071e0cf7a85ee010f810eb01d481c9190ee76e2c03269098d49ea78aede87d346569d55b858ca70bd8da5b3b4a4adf1399a80a0f8384e7fc3dd8c7ce37dedd4acea8e7c555270c006092c2a3189e2a526b873e2e269f0fb28245256d42a6bcd6bb41c0bf67cc939117e0adb3f00a3f480d0b77126cd38c4e4a8a2d028ece905aa3cafcc45dcbb250774a78e8410d8286f6ab4156b6c0e241ef1e5b087cc4fc5920bb085ea7d2fca0f716b0da8c169871a0fd295594f5b61ff8584bf9bd085554ba885ff8d640e7252ffbe1f541b3f5aaa4679bb997d05c4aeeee5c5090273fdfc9b9802d59b3e63f7a5088b302740e84698114dd3fef69553b4728a7c6a0205ce6d50566a29a9e527ecb11ae3ec557b178c0214aedb141c185d92d59a0f18b4e8a514c2f51635420a5a21941672675945aab4d8d31b49a12373ac6f0bf99e5372cb4e0f1e6accc0c779c0c170c25ccbf77a8f61eac67c6b9c7e2a2178307d2a966865058c2e55a987d1f7689ae31e195585fc769ae595c3ac0473b189bd9b817a03c16ce86ab84371e82c533bdd938b885261e18b7e7bf17b8fefe7e5a7e2a04624ca0cd924ddd7ae48c848fcb9a569b8692768669c183d30a6068d35f639ce2353e8ad0866acac65793410857e3bfa0c53b7d4d34453eef3d2206920b28755391983161c370d0cbf01d7737d343c87ad9777ec7980144eee99a5454fe4b67baffd0310bea0e83de46a18388ce49258c3bdd17a015743a34686fde76994ad89ad88d06396a72588fb3c61295b9524b5754e2c4412d2c936261e901717c854c65d4052d74b57ac352cfd190c924fdae6ebd1f01455f78c4fb4ebc79f018a937ce5aff13386b5658ca137a7aad91a9c324ece84b072d0753618740846cee152f16d5d1641eecb38d57f7175cbd6ff52e3c6cd52e010656c327b41bcd327d6796f1ed127c72ca00e57f134ea363405e43f7a57c16ed7bc5a8c05db4c0fb36ff03c1f938e8ee73ccd5b1d076eb599353a8f93f3392071df258dddc91ec21bb69fa0992bb15ec8a85f292b72690eae953d1a382a22c083d6b77a2c939cb306b36fe5b422faff77ebaa0944fd430a1a30d32a9283e514b8a7f69e19c22dac1d6d465197fed0389b0d984390316571850be505c986e8e5b55ccc40cddd387308ec0e2e6b4a9ad2dc17101e3695350b99305cf404bb94fa25fd20a76f6c27d26e38adc2578bc296e410f9e35eb21ca0fba61e3f6bab511dae90d91c28f7618ef75a0d56844baf4958003ddb320e83f75675152e27dd8814f81fe1e720074e724c5914311a11c9b6e3efc34bd733d0d950a6270960d99fa8acb11f507e235645153dac9d406678a42be6737e78a96d0e913f3e173d2800a1724f7b9f6bd4e1cef90ebce01ed124dad8ec35bb3bf6c05ec24b41a1e75111c7f100dd1b0ea157d6a1d52b43ddda3521930af14948a433918bcf18ef86dc3ce2d2cc2d0d90122025b59ae30ea509134104478f71c83b2c6e93d5ab494152e8b9bcbb53bd18afa483dc63cb899de72602d2abf77be34115be8364e2f7403a7c1558d63873cf014cb8be3acbfceefbd72ca53e12afc04055490285a540ac1c62be4e24c277dc8f7e8b0426cbaebfcd8c862709c65488bf54d7b93fdc6ead80017c45adda1068e1a3c65630b3e839e6aed9fe13fcb462477a30509a6fc76aefc117e67a69889b80242f5b5e6bf284cda6edd2649d15775f2f1b6e9e46940cf10a56d89255259cf3678fbcbadc14c70adb8a4c058fc0ef8fdb62bb54491cba0c4402c3fe883094c2d6ad214cec962b26b47813fdbcfdf15fe6cbe1c361a99dcad7e351c4e8f0aa76d853301b84bfd7a89b7ed0540a14a558b81f85f37481ddb22cc128ee5faf0796d447942f8dd8f318f7662b13634c3401b92552ed6beda14ca964f083d4b3d2aa3452f390ed29a9ff2ff6cb41aeeec6e252a7edb82f351121b794528c2e46343b5f3cf6478efa1fe4adf759e6d3428284e96b015ca7a156b8bf18f51057ae55d0bdcd445a56937d4fd8307c0bb990916ee83b34e2ba79989927b9831736335cf1b6cd86d42f3becc8186bddb64a201b28b5dd2e515204fe4d583fa1aab31f7226b20363ba003c94d8d56e24f26d39473bba1998b1568bb15bbb72f9cfb6b8bef819388416b1dc9c067702f8c40a253d2e5db91a0bad56d94bb7193390274869ee533490ef29642cdb66ef01360a2a268908835b6641ad9ca6b3fef7f5ee159a91c8bf304e521c6ede0bfde84f53912ad5224104caf9d825f319e7eb05f4687a67e1a10c3a134b8897ccf45517cea2709913b9bc3fbd1e9aba509dbac81f8831fa04a1cbbb543aa28e129bef9763a4215d42b42cce75c92484c0e80a4658bfe6d29a8915d9fd32e54c46bb5fd6fbe164aa19f9fc7e091fead7d18f84888853c1750c1f949df7797858ce1c4cdc7c9f6206ff52d3586269153eeb5ccf95958deb6dc02ced0e2857843a14865fb2d02742fc5c85596266eecc3e7615937569b58c422077cb357916317b7ec1405fddc12d11995b37a6fef83861da837a31ea13cb7a93cad418d2fda6a2769496eb8db44bcf1c9c152c13cd802e7f6e2ad002eed19f80ebb0c11c530c3763c90a5fc64ac3bd4e109afa8bb6ce2dce9e4b5a9890c63851a308383d618ac2ad2643c272c9be63977e6f1a50fb47e72dda86d8933fd1ce6dba84831f6f49ccbb74ea1c787a634a60b03c9448e415e305eb8351dd441ae83cf8cbaca8c471dcf77aa676c0a5dbf90f6ca86e5db960a9bf9ae9cd5de7ca0e262586bbc2aa297bc80220d732924df80e7b5bb276c14fc2c1ad6054fb6f09c993085cb65467993096d2ff47b688e2d0c3a5fe687a450bb575ec92ef9f26fe9feb6af6a74644ea83cab4ecce34d1c20898b13996538dbc0a422124a53152d21a9613fb95808944fcca6d8f7594b31428f369b346e8e1884a8f12c17f993cacc2fccb1489e97ece24ffc88f43be7701b93e93157f21899afcc6880f83bf2cb51e865ae98a6b6bb182d18c95419a64b042e0f8064ae6cc18a84e4bb6bb8c6915b69a8721a0ed97149fa980487511c4494b41602fae1ff42bd78f235f2fe63df312a21b65d3584b2001ed6e51e909ddf65cc99337b3b447fa0ff1d8b2e6b7ee77bb04df5c2c92cffd32071c57a56bf9ddfee058c8618d0eaedbdc3156e8e5c5cb382a98afb2846bd2ba5d5203af205e26b8ee7887c193906ec0b8f8f43d590a14117a11056e1667c71f59dafd110f54fa135bbc1edaac176348edf333eefc057dcf5e110766310a06eb617becd31f2581968fe935b4c1e9b4fae3ebbc01b5fe2bf93d5f5da4bb9db4a5dffc78fb3a17e2c9f3ca7358bb4f8a5e02a736816b3c49177ec4ae309e68fcd63a264a9347744634ed2681cd80910dfdb3f14a730808fdb18b08a210c0b30405dac10aa22d82d460e6c4061bfaf7645e5c8fa0e173aa6f50cbf3e24e0bc6f4ba27956031d68ab5d4476dab4b0fc9b80a674adfd2946ac97ba64c16f265e8f57e8969f24729d3101876e91864a94e30873aeaaf4f538f30bb84dde602b8632fd768066bec0ea70eb5dd00f46eafcff55f3f37ba5f9863ce97cd6cf888eb7dc9502c3571286d4cd732e27ae87209942e19dcf9a50a4b2ccb97e9c2f78be67feb6e3dbcac042e0b9217ef1e9b769fe5043e7bf71b5854334f4341a7891491b1bfbb0363c6873a2c67ed6bb5b685590a9f5583fac2529bc081243be3562ad45a6abee7f464ba77f77f3abe07e0a41f4a26e65cca42ff091b89c1403d07d597c317ff4f3531a3ceb402894fdcc2ddd9efc27a6d2f4468848b90a2b97e441dc235ec07a4f0d24c27aa185f88fc03376f3f9a9820f17093f559be500c6eb40b3df6115d4febf2bd6b22e746d02f4cbbc983d7c8dcd76d8a45ce3a52a3d500a6f04eaf89b6ef37fd80649ac58f3c456fcf02a0920aaae4555a302d30e47bd0f7c387ee1443c3491350b857652eec955d6a061e7f10327cfa1ec7be733928ca049fe8f5855d31d10ac26646ac1307e58d80d578165737de8378dd16a209a399d76ab8ed646bff77e7bdb59124a755dc05fab8d7df4781b1f74fb85c45bbb5e3780e40fd3ad7f6e2b42bef5d55529d23cfc1f7636348d79e5f8da1b9e5b92651ed71c84e8d08debb79f35ad5c67da961f3bcda4329c3034dc219e055096abe8a407d9708e8667fa93cfd3e1eff8e3f3f77d2a9a0ba1ecb6528dbbd57393644377918f752d059a0550731e56388ef286565edaba19cc3f88f9abb80e7fd8582ff9e2c2e54cf490b66e17796caea062c7ac4f4296f591852721ea1702fdebf3e8bb9a085376c9e8685d3b7987bac3d12279dce6b317987a0b7bf75d654634c4182d15c442330c0da5ae3d9349f56fba413f765b9108277ac05821ffa811595538def48b33fa118cf8c1bc5b25e70a7a8e6daa05b34fe503c05718724dc7a003b541a4c1ab4490c2cc483635adf83abe74a4f6798c47479195e93969c8d1cf6c37e5a50c0a9b005bba9229c734b166e29e55ca2bae96d5c0bb9f032a9bd83e0b1b4b73cee475c6c42e4005647c9b258355f0c3907ca7060d9be914495943524ce9d3af8ecb6d7a78a1c257a1c82ded1d5616415c89005ed4d147db5a639bc2ce2e2ea6c021da9205bfa9af13b9e2241cf936e1c4462b46b2d64bc6b25d5a05eb52ad08178a4583d7c2666a1ec440610ec9c3137c5690642425557505a8f67240e1ef21d95756e68b7479174779c13a6f425b54f91cc82db5490554b8c909be5b7655a29a2b57308d205245123cfd06cafd5034af1b4b19c2bbcbe4304ffc30876a8108ee78fed84960a261f3905c6c8e55522122d4919ee8e829b220b0568f7148f1a32ac296646cbfb9fc801657b235d4c1a8d8db2443a468af3cfe7ca111959c182ff39ab65b539839733c31879e6e063f4a55918bae61c7bce32e07546d60ce750dcd53e7339a7481748c74648773642b741d8a2015cd5fe3433402f9096f7a88ab0ca0a173adff226ef54156e4027906b485379a3023cba2eba4d1f75c1e0ad3a655e36d920a72acd10b4b075a77bf518a412c428421858c3af516e7fbf909e67e2daea4154c89813932d3de516f91bc73c5dac1683307ffcfa924336f9cf221a0f8650d83c0ae3006008e544f46aa780f87c59f72c4dd8df8359c721d564e15ad4a98d254134b39c608dcf1ca9964449c0b6f252a7370a7733ed21c8bc19842f198cccb0cb10b2f0790324f49d45982c7c55a0b05bb6bec9f0987ab317b4b3a1c67833024364860394b40b55383f4b30149f8a98b0929cdfa3a0fa6b4cfe15b9c3b3eaa20ff9d7dd9ae6adc6e24b065d70ddd9920e924bc0354ec877c5bf537ef8851a1899974e8771e231cf033371bc7956b426dd8074748cea0d5fe8bf14f94e38ebed4805920803f0c0f803bd3354155444dd8522be0492bcf0ac1fc50130ab1384a8830d4c68365782ca4ab2f42e2d1db03e6e40d2772d0b9ae5d19bc22df95d0ed1b47524b0f4619ecc40d95e50aafa21d201a457d5472133926507fef81e5fb0f14206c1e724543d874dfc17c47233bf1fa415f626c744e23b45d25d970461938f9588cc15ae798681dae1c7926f10b1afc05a577395bdcf69d8c4891491aade3315c3ec427918a2444d5117c087d9200abe3c21c399d423a386a42776af84ba652a7fca776f79b8581014ae58a4d533b60483fd1fbbd00672b73ce2c645354fae3c830ebc77e3f14389f23661ad4d133dfcf7928ee3fb9f5dd3525f0b3a06c495b3985f1779a0758f22b354e48a89e7270d5f8918f99b17ec42af494d783f42a3f78665925ef66bc3421eb2e823d1d8fa9e8589c5e5f995a76d1b4695e628f05e7015c9340c2efb6850fdf875606d0e40192f3b9e8f5d4217ba5dfeea6c09f750860c33056c8f4f05b616ce9329a4b080e52646aadf0e46c3923f1b54f2297e01a2354a0e66638c22db31da4b66c0e7436a3254f2be56c8335e8742db60d1aef82a56b756e3f0dd482718c7a4ff07da10101a0a7c127bf0f084fe1d889e49afbd883822e5c98068fd02923ba7dcc2b26f3fa81252c5c6e7816e6c546295d9a8d822a331c4025955ccd466de5be53896e85fa2147cbd7fd56e82998f712bc9c1d2625f8ffa74c3cd3a055d5ac803b3af04d8d1b700e4eee2402a4c75be49602431af33e28f0908f8d1fd3f54f61c79244a12fda4e8205b347ecd4fae50d8e7f68070e8d38ca76ffd1825d477ee19d31e4376ee833c5b0df6b0d268e330bea662440f4609f8383f0497e3e368b7e309c5756a6bfb027c4d4e5fa360bc64e5e58d07f3152ddba3c137d7a036d2596063406a573eb4446b636412a7fee0f633eca250841de63ed03dbc5fc5935bdd7a29b8aaa62d570910976151460cf8ed9202c7a82a26dd28a7fabbb7b8c3ab4a18a254bbbd018c5a53306da4e850ab52e97124964df7b9a110425d68e38e6ba822173d270681fa3e1c78af94f594a22c1f7fe3a2555923b1f35bc9f9adbb43ff7fd09a76e7774abd53b550a8d59e84831e752954aa14c361388e28f27d14da581915942ecaa923dfe0307769f136fa60cd9b2135b4f040b8c723a2dcbd5fd9bad72e53d916e12eadab314d5daf26acca1438f0ccdcb543be88625e3ed465e72ea162fefe33e5132e9c00fa0e783541c9db95c1a1882a737c649385a02aeeadbb5ffbbe26897d796a9ce4a504b52a62650afbba3d211879f941fd3e8a27c2d369f93fbad88073086a912777c5ccceb6a78ab003271047fc3e09e9b28533a8004058771b9c808e6935650f97db27e9e69641fcc5e7bc7fa551a29f0918b669dc4962ea08faf19544d3fee52dce2c43993a182928068c881c3cf6676acc18cd108b00e2aa7b3b51404d46f0632445a3789cf77e530bea290807eb89fd28c19c440e1ba528a6c68a06aa237a5f67d9d22ac3c7426f7e3d2c11b86b4cecb4199e1fdb997cab04fa073ef27fc9491e4f9958b76ebea3e8ec57e0595dfa5cf8899b4af964af5b1b40928f2e41264ad211beaa81d63a18d061731df1a8d9777d775a6d7062865f76fef1a16551d98a0a8609c728e5fdf5be03477089363265ca4ca42f497d49e09a9ded1d9f972a304e164458b48551633a3a9d7f28ee4c4e677141388b9b3f0511864eabe4fa6164262935042e9d7c8acd6e3bf5d6b87159dd4cf9313ea6b1f76220dcf23d65c5501b27a6749d15c791fe07ea789b7ce7aeb34794c26b85e7dd15d25f9bb1bd9f19b4795d5009d57aa1566d72b08022f77671c9d992192029e0b2069e4d49eb37ea7a85223f7bc4dde15c099b478c93e9d9a039914a505fbf28c22362b10cd7d5e9f4b4bfe9f9cc387a98412de2c8b505fec7018491182af0dccd91736f0269c13eaa6efaf78ed4d293927eef2c3a71930e6e887a107a69062559b7992e338a4212241c9d113fc5f455d329aacaecb0da301d363b6f7d04472af0ff9c96a820a28deb246ede1685e6e8e2a82667e658238d5d738e552ae3fc1419d04350681427d686f036071afdf07347652ba92e52b64cb5a73d6a87ef6c0a5d9257047b4f1a167de6bc3353155a1e8bc68138ce87db97ae3a0e579f0ee13542aea159eab8c3745970ca0bcab66b133535efbdcededa93ce95cac47729a1bc528ae6f8bc366919a0f5263786c66c77cd193fe0343efa6aa01e39581929f5c8158ff189f9b3552cdddd995e8f2ea575dbda37480a918444a93e22bc8cf42581122589b3a916d0d6958feb28eed75e32e8e0a09e58bec048735d4e98d874790ed1b5751ed547203f5275e43faaa8dfd97b92418924adf69f85e48693068f3998daa57e73852d8d8e9bf64c48cb886f901d5ae4b278466e70673990551c2fac46b65f6c5abfb261ecf97aeaee5a61587f559f4fc05b716fe4a2c63487253b1b41ec49077a8dbde280f36987d65e1ae0d0abca4b5cd6164323bdf23cd1269bceb004cd167cf6375a73112cebabdf9b50a8a741a02eef1d305440246eda29370dbc8652630703060fecdb29de13e6ccf032d26d16ddb06e7fa0b3c6944b35f7208dfb40b4c4ba134a14dac928b679950793b3b6751221f1782e9f3f74cb53c34e4aebfed25b254652129574903ea3dedff6d3858474498f62278cf7d7038a83e11cdcf685734c87710f9493e050698fbe81b8400cac302e87b20056849ae21f1f2a588f94b435bfed33608cde97d590ed5cec51d561deb72df885c44539637f519de631c9c8ead40fa580c953b8eec9b4b0f71ea73c5c139d20a2a9e088168bbe9c0f44ea5473b01f8e7cb0065ebc225aa55f114ae5b1281f53e06d1e2e022cb0505930c003d6396515ddabc12f48842962ae908503e5e0fab9c578c7d42f486de04e5e137a1d5928632a214ad399d567106b05223e01227879db32a321a6c83e757634ab6450f7b29feb7a6af3b7ff5dd61fd7e7400bd5dfbcaa0479be6e956b37581b4f6775fb49f2a91de937abe853dd516e9dae0ee378a9b95413528f953c4d7c7cc92b964c3684ea748f467c7a904c89320c330f338b69908b378612b2f9e06abddf59bad4c17c39e624c9329b5e4c508bfb7518ad6023b712ae02fed3e917ab485a99ea7a31031bdb6f67d63503052ce1331c30393e00b74f406d5be0551bc68301922d26d0401abb39c96f2fc89ea89c7dd160bf6f2816acb47032c0851343d89eed8bc0e45cbdef4a960571f54049249f3caf2739c25f90d4b28a5dc128abaef7510c31b67e8cdd6a77a1e3d21299e161042559e5f6176366dc6b9e5182846cd667b95f8ecf10ee6114496da73d1f3c8dd1ca3ebaeec88c3395dd6b7c48597c01d79933b477 +Output = ce651febf783832e9ffd932903e852e35ef9ffd40c50d6896d34ea8c471cfc6d + +Len = 94248 +Msg = e71a32879f3e1b04b9790a9628061d7394f5f349477db62f4a9358dccbbb1c16c21f596ed5de7b2b78a64a8458856f12fafc33849f568b956c37523bc778d521043294584119474a8e0c20ef52ea5043eaa6ccf7929e51668928a5cc706e21b2f37d6cadac98894844d2143fdcdcc8eeab1b4508e8fd108cea8edcf58e4608b2d92568d5de03480fe221aedcbf03e0fb86822621681dd1eed7907c20e8a89207fc5511399f018d86b020772ec3089f52c303f8a9dca39b7497560fb4473ac89aa533ed3fb73a5f95f6f8f69eaf930edbaac842080a3a770674091d1973a7b1531be78650ed57c624fbd0b3924d4b337f82f68ca5ba886c8cb4d12cb63495551aa89a64d50a00ca1b08d1377363d9182495b85feab63582eea0d5c6f552adbdd892740d34d7dc7462652209aabae4c5b32934413ec5eac114803e723d9496f073229c0bd71994cbe25aedb29d1a1540158792bd09ae4f32e79c33b9f7c3f8f6d5a03be6249bcfd7812f57b8b64a149330f7fb58b43a0bdc4d3bdd2189a77dd8e4547824852436a1282b8aa55c1488c6eec0979ca531c7c82fa764345c08cb9d8a857c4f617b7130c097ae00f63e1adf362c8d10455b2afc7626ef7ad8ae8a4dae7d6eee1f69278d2fbbea52ee9171e8ef81063cfc7fdd820801a67a656163f13882778a29b600be5fdf6722abd536e8030829a933678762cf80b2bc6ce8fd900fddbfaae62aa6cd364b4df895d210e859091fde50d9d1a2b2ea3bc8530c02321dd66dd6be8cbec19e46c35c144fa8efd9cc0f63bd9e624c98896827849517df49b4aa9719a6f3a37e1af1d79016a5056b9822c1e07ee4676ba36260654be6a07bc19d735f3eea7abd0d00f071edb032f7b77f7f2340fcfc128151fb60f5177c9b436ff4f81d4e4e456818301f9d717f656f5025edae5412756b5c80dc5d527c928347a24d0bc528fd73601e03ee8ff39d09ba3ca58e94b17ca8ab7841493ea746c94e04c4d0f70fcd75014283a7b39788cce74bb5a964e10f82676bf6828305a05daba2c6338e0b9db82324089284710c02ffda84c76aab163fb8df65d0ca9e88868704bcfd2f245582ec4dfb75ab8c12f129717ab051167928c55ef5fabb7be78d0ab30cf68463de1c8744c219cfed83e38e99ff2bbf2b2085b76f0ecafda3a3ba5b3620e635cf1ece1a91c746999e451e56d97b015df1f39eb59b1806391ea655a3155e95ea70fedfcebd70c3b0a642eba8ba56fad270dbbae8687b7716f5d6a609d930cb4a4f6699ca4f275abe0d6091acc3f8dec6b0be237860a0e53d2f1df5b609fd4ffd733f4237cf53d168db895a8c7cca75e3ba861f8c0bed1855d46289d22d2ceaace56f233cc55bf15819a48c6d6d3287ce9519f74cf0cbd707ed8dab84cd2764ffabe08402baa98236cf99707a1f99db324961f3e197a3ebfb8085a3f47255859dcf78adb036a44ca903504ed819683ab5df445a7388db1dd89834b94ba31e142f5821e56fbfb4165abfb06eb2e3056cff5eac76294cdd33463a8135b1e9eadb5c4fc27567df41aaf10aa3172e06da39b9ce808d2c6a0ff5ef70545e4dcb21a0cdbb43a5bf1db3ce15ed119274094d698b37a8e8a46adb2d7841957d48d12b2c29a48bbda001734b6e6ee028ad74c8c31ca20bcfb8d5a8a18cb62cdac9837147191384053114e7e9a598f91e01d0b210151693899031dd1ad1d502bdf96a59b8450e15c59bdd786f627044bf97a373181d9c27605509e460efa8fd6e000d4c4954a0264405e58ea74c00a952987873a3dd3baf9a2fe2243b8f37063405f4b3c0efcea0cb98b292570c4f111e2bd41979fdfb1480454605735988065930a8f4e6bda269a27bceea484a65626c7941cf6124e43c5ac0bcefcff4a6e323aab0798367236a11d7c10042ad4b8684aa46fd25faff1070c7cd4a19099687db9b94a85f94598b60d4113b0ddd0863aee56c098b2953780983ff7e173f61d8c82bddeb41ed4db5d69948027083a4e33252395c5c56e85d6f1cddf3923f10c0348012a9f31906cebc4fedbf344728ed571a375e5f2bc7a5e8b9ec1251b0ab2665c5bb493bc18cbf5a1d89d921d09b686765ee775e50f73abd82b6411e3b38f1a4206135e28de871f82ca3b8ffc7053ea85ae5101f6d800236a0c2e9bf88c10b39b98bd4b02421cbdea4c3c496d36e566322a48f6c296be79a3b9873fd3e4d5b6cb9c18e6c2f3fb454ac7265ae9ddf98dfe4b35e0b2cbfd0337ac145a005e5c985488bcbe0554b16a16c36030ecc5fec66c99be3c41f84a44786c4c97087903dcb8d72f3d23f4cd80e0d9a067f09f73a3ef9e38861aac34d1f8729663569569f87b1fd6e0b954ae2e3b723d6c9fcae6ab09b13b4a87483b203a47983b6563fd702dbb5a553fe4e1c68915bdbb44c8c6404d8b3ce6326ccbb3a053b8abcf454ce813420fe71225e6ee4c4c97d08a2991082d74c405867a6500ed3f7e20feb9c6a4fe4c8e22faa85c0a177f5258ca5de5772c1657150e01a59c53635f377e41f94b31235ba533ec8fae5d3683909fe621f1bbd87c912392fbea8557e25bc87e635f4e7edeca6853104f900a92347542d52c6f439b06819ee67ff5959e0a57bf8335b8a7ae2f028c7c6252540490e5048d6bb8d038e18285d3d12694f8cfb695e7830236402f9ce9228b06bb615269aba9542b16dcbeb0f872628aee79186f81eeabbdc31b688209b13e4f992ed56d98b75a38800cfa976710b8b50a9570ed1427343db6b6567c6e96d07f85c3b67b5c460253943031a0425d581761d475b9bd1fa124899765c678420628f9d6622d86c3d11edbfcd0562aa6a5348ccc734ffd4666e4c445330ab75123de7dbd64ce78bf4afcbfa96343808b449ef3d4063a552a1a00ff363ab3cc32de027a1f3b08d2a6c47fc7ec76d2d479aaa93f81bae345392efb82e0e94bf76579278742515704f8f21a7d3c679e97003c05b86bede55e021a56f7ebcb5df977a9c02ded44238054485f57ffd20158bd9d1706e93bbafff36095e69d5d4422d7d46ec6668008e5173ba0e0cd229599e0326fa38000cebbbb962aa79c1ba904048d85f9549171a3d04091902af5e5cb36907206d6f9bb01992f97e36e92f72d9c39a82f1df4f83d0e0ba3ee7fb85c7d1f3bb0a94472ea723aa160027b3fa8ffed6d47e0493707112ed15a7451e674101898ce135f08e77e0e70058d488e591ba69cd7a56cb418e0c146179a380cc734a13c0cdd8d283c9583201afc5d1b61d1264ce9f6df08b7fc53ee8df8a897c04b479a0f50655d44594745f2d83f436de10af1f14d36b16ef4551f0ff81a13e9d47a3748246e14b929b9363f9955b2d79bb32080210a2aa849537c2011030dbe60c79849b21deae597579553c836c63991bd6d191aaff0fe6bcd6a60ebf9e1c860ae417691eb4c6412b0c7d1dd6919fe43981c1e82be90cbec218e34e1753c62649ca7714c5cb5bf3c43622c51531ab021c1c21301bc86bb4b0e3c3e89fb7a46dd215eac39e8b351648dd8e5bc8b34d9ccc9039900003f26f8d218c04df327d04acabb99e325d1b53c0eb070877814e5a52c3513164046a9861b987cc602d1892df762cce08a7d6523347d6f4ab0275e3b59fb13bce329ad63593fc66a90e3ec0745c8a7ba8d22fbaa9d94346eb9e8ce0fd0ba1d5c7f54cd2109733fa433fb73672471dcc9b47eb342a899527c0bd59f833ee6827d6b54634faad73b1b4264b9be11e2bea686dd567bf3f16beb1c7a6d45e324f5a83da51a3fbbd06b2862dc298cac9fdfd97abb4fc6fe30c344624391b86be9e9656cc35c71caf322640bbe3d4342fdb2cb16b4f9a435dc0b0073dda76b37a9d02d8f4ba49646b40356b3777f8273a0c9f3d146fea41957a5b7d78538dee4e93c790b8a8d1dcd978068e0b46ababd1da7fc30edc937374825c2f3e6b073e22ca0c0681c6068ae221c2319e1896c9dc8bf4cbc05e3ee1e01fdca5f8e98dacde88fac3b8dd91786c8490dd58b56088446825de94bd9392c29a03680c96c63f6a16b94ec3b519ae60ea9918a1e5b2f1efb93b83f1c0398e033bf8ffe43a5bffaebc702f0c164732a799056de16f340ac6c65d433f31d9dd894ae4f2e69df3f493c148eff9c8c30e27dafb61801c8dddb1d6b4a5e7d61a883e0feeca7c863727ff6f6815f492344acaf4a37ee6b46672993368314f77a59509d23f0e0dbece9fdb0cf829643e43ec7731264b7cff66cf6423a06fe0de210fd1dafe46000e626410e122b4b19297fe16d7ac50a8c436fefcef84e802d237fb807054fbbf3c987f85360c3d4257d9878e2f5c16d3cd7d0747df3d231e1a8f63fddc69b3b1101af72153de4c8154b090c9815f2466e0e4f02f3af3a89a7fd04e306664f93e5490d4ce7fc169d553c520ae15dd02c7c613c39b4acd00e0c9a3c501566e52cecea11f7303dd1da61abf3f2532fd396047b1887255f4b256c0afcf58f3ae48c947f6dff72759ef5d7347f51621e750982a66459ea49046662b9d741d864d629888371c44335d686024054b692bc4cfd639dc04067fc84577d414bc38577229a1560bde416f130e18f5a0480696bc3f843ab8cc922dc436f081bdb091ae46234d7c1a2ed623a16cedb0c1f5d6aaf62709f6a5a62af8ada13bfb405711d3f1da04c00d13eb962f07481b0f58bfb19b0fcd354998b626ab0ebf0a44ba9e0d9ad62fec8c966811e6698f00337caaf1d27f38be4cad1e00e506e47571df21a6699d34c63ebe35dced192c25d46680b3c400b25b57ea4ace8410120670d083e487b97d17cc933b3f6d9f85529b20273f9819a3d2125923d8afb5b183e995aa101cb270a6dd1d60828e8404512fb189dd775373ec24018f658f7c29b5833480714f0e773d1a658dec774f0fe93a218dd589358a7136ea77bf4cede364e7b7ec514957f9a22b72abc6518810e161781a6ef5475029ef1dc42c0d904558bd25d5f632145e9eb74ca05843b76e024ebf1af2e4112edcf8a15cf5faeeb858ac8725a931ce0df966fc56ea76659114a9fe74a77d1c8a51f87e29623c8ea52e5ce4c3b26e0c707be289b3c41219e1df193b10d6e9efcd5198bd12bafbf872a0764497591256eeecd0fba12e3e5cc62a4780d6c64f1260a48065fe475eb58977a2b089e64534ef13db5b076f22b5a8bfdbd4aec1d80ea912577ed74f8e4c507a872e81a02e2fdbb9a9b0ccd0e7acef647c40800dac6a1263c511841bb3453173cec967d1f6ce1ba6e202da99b5c903e2d2ca34f3f2ae025e7424edf3f42992281e8623bfc49a15a22f591812b3954c00867db2bbd363e1cc09c2fa1e797fdd63206f9db2c11a327538be6e820a973388405ee2ad761016752ff093e66bcf79ea7c8bbef415d6dae6a438c433e1571e40a777ac11043d0b218cb8a091f2a2ce85d9e26ccce75676bf1bd0026b615e76f264cff92ea4722798c8210968357e44fedf7d90815f236cc6478d1173b233a4641f6eaf4d7f38d2a18c33b6b35dee431c3763135ca7c426c4cd77d793fb5f0e5f7f5db8b6bc16740680f78fba917733a6899cdba5e4c10a8058963d1265681eaa2ca3fab18495758d4b747dc4faa37c657c31d2a441a382c48ef32b3a17d83b0fcf485f86ff3b3eff95b3661bbff98621b929dfa0e4f0f55617958a513936cc541055ce7c5493352308ba34050a01baa1e88ce9e3f533cbff9c8440a0f50b3b4296d12edcac22c3c34a93cdcb00447eafb063dab39df16b87c5c9376f71deefa10ac469ee2e7250a503461bb5cb493b11b9b5995903b43fb6396b5506d5375039133666fa030a4592dcd9040a93985a90ac8a0e1d5103ae54a17284ac4a9ec6d15a300d48527208527c5672147fba41f431ea2146ac672028a4e7abaaf89cb93386b94620443303ad8dc44c19b8365a05efdeba1e3e67fdfbebd1b24806b8912540daf9c901d49d6bb42c7a6266940c8b8f6dc1eb2f8bae951d3880ce9c7bb670309a0e8cb0dd3d539b95e337af5dbe4db8a01ef6a75b99bee324ff84e46c91dcfd016db179d64d2fea0771dfbe18da14137eb987cd60273ee59e16b2031388305017ff80854834c5498b0ba4b94dc7a8480f7ae5c921c0dccaadad9f24f80436d0e5aa40fcbb5add5e2799ccc985edd1fe5b4a5ac426cd613b5aad946da46eb42672573b06b52741d4e504a01546b457dd6b0f2ce6f8b496dfacfcd9069e2c73f9c6efb7c9c003b851cd3268c61b84018f46b3a4561edf405fab83b6186ea83bf2ea58fd706356097de60c6c0389c598b9f41c0a3d20b42a625f2a73cb9d48d3b9e57c55212788fd02387af3f51adfe5067e34a6c2879d1b91d1da5746b27605f5bf41060492015c85cb6547c3553aad1bebe1bf0eda01da940879abb23599974e81915a432e29eeb1a8b3ae96c23ebba3430d9f48a14830120cf0b736ae18526e3253970383697a2bd64e7196ea54d6448e9f8c9965d9e5b3e628c3fba65dfefada6f066f1727ca9e5d1cd8ea54e2c5a6d57fcf29ac1ec1209d081729a5cf639d81ccefac75cca4b046072abb885251722095b01f017e8c013977fbe731d648fd30549ae522c1d10998f6b1300f0a425075c976a3e9610dfdc35fb65dd4da77c2efee4e40a76d19525bd0b372707460e7de036bdfee2f0dbd42a791b41543b695c48255e58d374333977f79a833f672e0622bd5f8975154e9be37d4147c7ace1eb9f9f5fd5c89195355ea4bfbe1fa42e20929fd196c2daa283ff7c7a492e58704d53977b09aca615b9df9709301e79696dce52b68f62cd722cecfb18ddeeda8ef202b2325d161e4f2759432971b2537a4e247a70dbcb6a28072a7dcf6e9fafb89a3b7408588b86ac1e7a3d730b81cedb32438b8314734d4ea34678e083975467765c618f74836bb70fa0ea8855f347f6ba89ea7fc1d0c35071af710eb58c452646e3ef1a498439ea6b6bdedbf98d5b7767863bd95c8a88d802f3faac6ce51e7f6c70914b40047dc0b2499ee05eb675b799c6d3f25d06ea4fc7827a3c12183ccd5770dc94e08aa3d484b88f280e152341f1aa678d3bbc84224ff984506dbc1cbaa8634579a39d589053473435701fe0a0dfcf4afc8131d2ea0cb78d6ba8375aa1dfd6408c11a2e88e9e54327b3d3d3a5ee4a412b2b5fd53117e4b19f08a20632d5e38722eb341e029d68dee7bce03acc680a743525285813325329e816bfdc2b7b4084ee3f0d0ebec9c52ecb99af994923467515def50d9c981fcaf90c625f5db61d43b4e62f648514021a1a73c959e2c8052c137d4e5e93f1507a191314f7902f81acbc08228a1f2629891e71b4e360ff5081772bbbb2c2e7ef2391535b0c8b8e74a74dcb6ce654a841651dbcfa9e8a6f2e5c880fc572ef2002acaaf3c206177afe1cb05a97e2ec425395607b22f12ac1a7a58f52f304e34494fda91bce4dfc9b28f32edb2be4ae9b66012fd7b546069dc344d41bced166fcaafed9f50949029af9140d77ae56635c8291d2f83a04e8a98b219f93dd4140f04e9781a6fa62f01f7a679555aa9fd32caf2d900539929690062438e1a8bd38c787b0e859290190d1b1d5109ea627c6b4f6bdb2273b5ad8f83c36e62fb7ab17295e3157341f8ca859a844c4792b56049c5e298085c7c3788a363df3a29374a5c0d902165f636d015e679dfa0fc094548bf059424865353cedfb22a564c381aa31030b6d037d0a6389f4c9fa87ed498029b33540979d18eec993ce459dcf39ee27e135a448f6cd968259af0c0a3add4e1fafa6c29bf8d554c807281a74400338487d660255551d61f09e3678c030b88715ec920f7bfdd237905e176e129c49523cde87d05322618d7cc94885d05642f3b273e3706035785ec9a085879f6e7202ac0c815769e603e2cde4cc7d6334e4599f4b7f2d72262f931cd659ae423be61140103adcc0276a288cf6a9a6a0530482847c508ed85a609c30077b2b238d0c479ff19caa7f70fe276008c949b03a0c37070f3cdabb597142af3bd2466beb4e6b72b78e08cf4627a7f22113adba71623ed30b2d5b42a9cc4d3e7a484742de1347606af73dd8334d6fe9496f1ce781705f8e780a5796d4d78587cdc475cfedc4a11213c192c1bed848ee88c5dc5ff19c64e15ebb17de62fcb2323b2f1a3ba0c7422fbad34fb37030faa9e7fd364949501373c627e343d9a29be7cd6f7cad7f85f2606515bcd5cfbd4dc16d0072cd12f336edb73803edc330094d8a6de34e1366784d1e6f205065e809df23b4d815d3ed93f63ad5be03a710c40c7a119946e3d39e9decc9c54bba17f5aa0f02b04614a5f33756e65dae0ea994cda544e5bc77322af9d80bf1ef54b3dacb3bd2418b5e851d57135428157f63413814ec0ed858ece508e81ded64bd2580e9af0dd40a37f4dbff7905676182a692f4cef25dc40d6a977326e701d17dd4afad7299b1eb2a5af3d791e262b99fda50aadb3f1aa51e1308e19a52745e1a272fbe8b602057bc202e8662d361465f67430144ba8da6144efffb4b4490351e88c7c60549697677ac54b5f4c1ab2f49b633a2104afdec7685466941a69b7b115e416ae53bd36fe2672d0b5092899de62de83447d9b4a2cc1fa3d28461de5b791063543520a76b85b980317d3043b8bc352960f24ef8ee9f84dfde1d5ba1fbe008f62cfddf2e91e90b17ce838121a75537c0ce179012f8751bc236137e2c83cdadc1994360ad0a95c3b88b6b6f6a9339997325c1894ae9d94e13826eb1c61cc9678e44118b6ffd114b2c103ce168a3eec50b0df520e7e950849c6936dbb8ee5b9e23d56e48bb93e6093b04febe6100fe215030bd3d331f6426239474e64b200bba49f3637fd8f39b67ac10baf09ed1f117093320c874b49c9a71ab30b9c4da6123c846f6180f47b8cb49db775e673f4d0d00c127aaf3d080494e55703c6e46e642687731fba8b4c69fd80e3df004729c6dfb80d8c9f899999b813a3e579089217df12e1c10eb644c4a2250148ebc91659ec3183d0eca3a6ef9d403a1f271ce9a3d2a12be401f7fd234ef4a0520d8c5310820325e61b3d988c90d58a2f55a3bdaebdccc1f718e2ce0c507a3178ea0358713d97641abf99f6d74f5e0474893f868edcf04478c7e94ff65310453c05c0aef27b88bf0d2e5b3a76354449ad4642eccadcb613f7a38dfb67c3715bf9f546bf1ac831a73c0bf3dbefdf22ca37f15058f91988b0e2104348e72df7d6611d081160a03cad05bcf6738a9963e6932eda43803fd2bbc6b29bb0eaff2e54dff1773e5a90044118d5c579fd10a25f4d635344f6ac4e9523ff19ebe9b37f47e52726ae7f2422f3e3db0357adc14874c5136dc5d2eb36cd784a202269f785300f0298ea24b90345d53112a52327d0d7a8d35c5e9b6935d53248511cf217ba9dbc38406a01db3fb78b6c85eae3b0c5e85707d167b6c2b63ce06e2f3408b099f17b2cafb69d1742b96501df8165e8b2375e455f89bb74527511201d00143eaddbda4459483cd996cc00857201206c00352d00493d2ffa750e33029cf9bb3e60ad5833bfa787bea68fdc6c0002b9875a7251bd30ea7ad1a878d48a4189541c5ce6536f554d04231c455729ebde87d70b6f6af0a92a32766745642b8d477574ed377a5bbcb1189342bd0f53a82d21d7ad9cb73f1464cd653be4606ae2bca5c4abe12b8d587c5babc437735dc756fe05ab8ae4fcf532d22a90e657dce4414b8823a3f578aaf733c91b4511bccbe4a2fdafaa62beee0cb742f0bbc8d5f48e0d2bbed056a236ca4777b27668f5186e870c047bbef9416b032ae5e521fab5eb314c07f6cd9e8e5dfd34244bf7ab4f5d30dd549f6840a1d63c6efae2f1cf8af17e558997c8c2143acb8adb263c23e32926ce1a55ed0981c6c96b7a45c6a8f6393ad4ae33e6b16ad938e861a5a513466adf7ac06fcbc853b540cd1e8e0f3b8a1b0d55f04b95f0f4c1dbd9323ad0de1b8ac14fd12d6301ba4a18e0421c39dba91f4c35fa5f54e5347d1ad9d7663e08c51182d9d71f715a07cde8617f70e52df5ce9e0126dfb222bc738c66bba84b17c5879a955cc64515dee905bd314c8f96d2a17943f05d2c1dff4d871c7981967faf655f0ebcb26ce9a1f4175001df97aad220548b0148215b7f53c1477b829ec4e53366a271546729f3a783c66bda9bde76d3b622b431404faf3e91944c1bc27c096a37fd353cc27b365be18cc9ae1a96332414c793a8f78f21569e6f65cda0098e82597b52cbed41fc89a71fb5ca828689aa06c62a0fb58e58442e555308c5f1d70431a974926612c8d94afbcac07223fcddf2cad1d618c1c67ff7c28e6d92c985785703f510bb51fd9343ad532057d31f286f3245bc8fbdfe725153925ca4f51c4730175ed76ba43d7037a0e95aa2284321d288dff388f762c3e174e9666b190e0963503c56e57dfac88d8317dfef980b42d35b1b4b92f285dd2ea30e0b5389dd27575b080fb743a834bba04940aea6fa13d81582054c33ea367f6a7acbfcdbfc3982743c725fa9d82d589517fd5de9720d67449eb1034002587a27ba28d5940db88b58541f5cf50d1adaedee967bb425a7f764ebef668b60cb958736926c26641cc853e9772dc9b995b8f7378c96bb676c0ef2d410c48a87f868058aa92f27a1eec013570a509c6026896dad402d43b9d2147af1b5cbc1ea77480f20cdacfc399718f3475943f18335b2adaa61ae01bf72be69cf4eead5fab0dc1093805438bdbe299014e4964da55bcb23a961a769cab6535bc76c801b4b4d9ab65d51b35180cc78665a2cc61558f1498c34b097d08e2589ad747f4a265ea5fa7cd8c258cb452a9be2819231fce0aea433d6eefdfa5c38a7eb40f7a76ba74271b0b052932a5d80ea9125c588590edc61b70a6d583bc77854a1c776067fa7bb970e5e7320e33c481afeb13737ae2613088239cc2519425d164d726b05c6f269e0f24db4508a83f87387ae67ae80b8eb1f220f8be3177f6f436adc6723c5f9e5d5e90886c084a70aaac887b77b6549bd0c12d61d10bab12782666fcacf1130a7ec7f097aef663807173dd7d71cc05b1165d137f04c779a0e59ec9726862d39389b10daf14ba399664f54192711266f70a2f99fb5e4d29c8c1059fd0ad77e7610784b079a43d14db0c9a7c627e70be96349d897de78503b496c3b0bd8418969b80a79f9c68653e77f0cb5596a0ce57b51c10aaaca8584f89eb40c4e2f32d296a7a84a3c1681bfe9199ee96d6df14777d4bf1c331a8ac547249e3a3e7059ee8f57f828390ab489b518d6d05c9442a671648a69db3f06b5b9537161473bf531b65160909b039d25ee056ae6b18d6f86fa79b9900db867bac1a3d41e12e2b350ae1c881fbca1aa38f667c1b8f6b9e66d658cd30b35174c68f2ae3cad0c2502afd921b52228557a1760a851a3b68a25de65365d580bcc2324cedb21aaad4361b3b9f99e5468af6b65af5fb1535baecc3e5bdebef2dc576a92a8a3199360fe6f10d31caa02f8002c9854f6573460784821cc1e7e683139a127229e9af3e186792bb7035eca41080c13d3f4c9c36f87080d384e2214a4f35546df460c5889ac1e88d8362326ee27a88cbed37f8cd34baa75231640a4a20505960112041de3bfddaca93d9d8559df7057782aeefd3646adde0eef3084a2ff20896a8b18d06a3224fbcc7234821ea0020882639e90f2f860cc6e319831423234956e2990fc87b3831a948c7e89a709cc14800614e4a3e181b4d3a5de36ea5eb04e7e66231ee6b4867da3d4d2288d8d3d0fd39ad864c3827f2ba184791215d532192dd935a3e1a58d997cf3e5db2c9ad35f0f8a6f9ddc6bc7958a760f3f5f262899fefb5f18231736f28262000e1ec33d86966d20fc590de986e0f2f72b10d212256434f6080579e11d4697e75dde96ca2afabbb31cb3d953743783d771f5596d5fe02e90e0135e3a7e4c1dd236e6761790ceee9c5b975e93e200910680573cb8be1530c63cc734919a055c7725c0e1847c657e33555e2e3954dea32ae2c0ec82a455f3ec7abb8d84f504ec3ca6e879bf2261031e7682a8a2412442bb25ccf939b734e0aa264ac99313cd35a936d7af263743e5b45b9f5e7d4b73f81db5c5d36c7b347f55cc0f893a8ac0d1235228e2383f80ce9b512ec008b8302be90f662b9954d72895d8744cf9ae7237618526c3839faa064a139b6df32bfb6693bf08322ec88f84d0e813753f1363e0ba5c8bc386cc1225470f7fc8cb2b4820b43136a7bb6ad01c9d5757a2993e1865b424b252c0696bb3f8a14660df1a78f2b1027bfccda04b4861b2db5596a3022ed58a24f1beec192af57589b6cd9e304510af4291b40d53a0b496f8fe95c6a3b495096e30d0c8ad12b3f8b44b151af0a0699415172d068bbe0c504b0e353d9f8f890ef890b48389d3caa7408e24052c9d025d8dfd872045e8ef9b4c14e36c382818275e81b8a15216800dc90099015683a167f7a560ef34b9c4b466a33ed71006c8defa948ba67823aa98b842d284010c9d4ffcaf28c7bab92258452995f2b9b4218277397c077eb370d498b57f01be807c72078b6d4e5a6f9ee34228876397b898de3ef12848d82e994de4d8ed0ed197b57a92caace7963580e1f810919e2c7cc53ecc5c0eff16fd7a71173dab000caaded648dd5637e0b37ed0d1822306fa890d20a9ca9e7eadb89acaba543789a2426ef17443f793ec51ef3c68fdda428455f72041cd655c1ee880d758ad210044f6dc78bf9f0f9ffba9688118d425b55c7c09ba4ee4e22bfcf5b3034cb8e6086720adb8853f1cc0a112614b7ba583e3e553cb5b0ba193429a78a7fb30f805167b58695d6fa49d8a7f357ff81bf27352b185a28f12740754a9d9e60b9ffaec9f141685c3c9700071d88b0b13444b7296337a25c2fdecacc69da1e3d0d4322b16a3e389783d21f40b6f7b9929bf011002fdb9cba3287bf20cd85927d7882e4f21bd47fb07352ac6ab869fa0b7d6c3ca4d72cd1a8c1c9285bbfc78288c264fa724c29c30ed4c0b26f6c05fc82a15f40fba351c88fa64c0c6487c877c6b3936e1b45688f196ec336361af44660d07226efda7309d8a7b973236daff99f12b448d44db76839090442a70a5d600ed24df567c6b91de98db86580b9a58e7ba9728e84ad3ed8d66c2addaa8369d3f26f97b54aad4c8b2c1ff0eb63b2d1c0c23e724a15ae27665860de1027cf4026766ff96e82d853db07270a0cb4a15c16dc9a5f836e96979b27adc8e2063409e101991a29f68ff796e46badd15bce6d183185df4277adb8fdab1b8f5b2ffbed8dfab6a3ee8e1a60432ab5824040812d4f29c79a8e183db2164d71dc838b6b13b1cb8e3bc332c0b56a41cb31644c02c3422d273a6f398cad6e7379566300cea3d5dbe98bb2caca1f93917561426598587aa36e64edc2e3d08b87f9a602776ac781928f3ac23e80c547827dbae4748d147df564c2119b8a43f7efba7368d989a53e5848f1fb762ad00d7caae65162271ed589d1fce2adc92f3a1584669e0c71659395db58665b10676ee7c38a9115af9f09c97dba68dee8bcda5f1f27abfa6a3009b111160ad37ab3f12b9151ad776cbea21c30a3ac172e116137525d9789be2e2714b2d4f0c7afdb1eb0dce0ac6fa8a427e9b15fb541e5575704e6b06ba3b386752786391e20f8087dde6be296e4a978209ac9978c4253b5422da4ca2e2f93617b5054ee9ec49d62971e08fd73c0b963169640f33704c054ac1c5150e815a4e6c2f8e69a789de610f3d679d94cea1e8d9045de1ac06d765b1c38b8eda13d2f3ed18802e6b2921a3b1970871f284a201d160f6ab52e67bcf31be9a047628f7b903066717a568a830a9252fa7710c8093c305cae6b8ad9d9443097d00632f3d20568fcfafd6b6f67a6e5e69a880b4c1f11679470e5dbaa1675e3aa11d31a517ac500b16718fa280f369a922ffb21beacc5421f79ca29c4bbafbc8a2b562191bcf780ec7f720a9dc3e33ac080775a06f67f4a6591c37d0e101944a0e6364f9be0c3701709b4a3b6cbd54cd756a5bf0c466805cf7f78de705cdc02520a1bac572e525999ce85cd5b6e33583f792d57b9e3a8fdc30d9054d2e91f7e095eaf41adeeccc3da968e9174f525e65fb1b62bf31766baaa01b4e71cfd0b412eab971586675934422876f6e9a8d57fa1c6e841a328cac2ed248ba036e1c8d227b97e30c8e21f36394ee605a2cf68aa6c7f6da3b25ffd9ff23ebe8609dd7db95e500a9b5da7495027ce86c587b209f029a5ea59060427d92317f4a17b38527f3938e35d2bfefd0b7471fd3e8199ded83e000a69895f6ff6e776d6fa753c70ab2238b27e1c2f63ed88fff47876cb0fea145872dd21b7fe80a5250b98e02fffc5801a1f071781a580cb40127c5091c5ae1375cdbcb856fcffc7ea3c84a25a2656bba4d1ff033ee84ca6fc0051f53328ada31fc10f358290f9b48e11c4a5050ee53b9f716ecaac57d87ffa65ff4ff95f6e2d1df6dd8084e2f8d4d93162cf78dffa67d2a65d531317acbf03ea8f442a93791738162e81a41b838f9245650afac01da90719d286bd5350cfdf3708be10eb57cb38c60b202963234d83f4d63dd4d9d7680472d84bf1314d1556f372a4f1908fafe5b07a455de15e7672e7bc504f53af0d9258748af6d929fb2fc6d5de16a9a92d067c86d886bebf7228c61f2ab1562efe7973b02b15746fe8345a3a53c75f2eac65d234c1ed21cba96d3808b54209daa4816c9316962aa4442b54a8ed4cdaa594c8588ee8da330c8408e57dd84c953e6772eb2534c1225276dd5f2893ec41964cf8b99b35941c0969c376897b1522dfb013976f6bdd8500e81221c12df0bc893ebd9b639165034ac164933186e6d747e52d1978a4347a370192427ba4a07507d1dea7efe2931058f5b4e37fe207dcfd70881849c80c2a7e29246b5ede4491976d25844612676dba6b7b0f7a75c05a89b7ec3de8bdaebd5dc8924473c4243bc27a58da7007293ff88d81be2a285979742421305f6d625a5c46a274c13e88990f60405376ab21b19bc28d9998e41960441dee98b6be7029040c1da45035b7d30688a5955fe497e82a716948cb8f4a38840c1d1ef39a1f53dc80ca7b298ffa122f584f48339cd20f2d04db72cb123228b958746920e8b8006d0b73a25336997e13390515fbba1b4c2ce2acbfa15619596d69bc22449083573d16dec0d610dc3e399491a4be26bac7b073a4d9544249f227a7bcf06879c881d607d47ebb070a7b29cfb99c84c8f7aa401f8a65ecbd091c707a3e7c938dcfa6c0471d8409026d5c6c5446a55588191a654e280e72b1a0ffcf4a086dcdb3dfec813f8179c8e84b0a8989ff693a4e6a41a6684479ed0557c2cc7fe46c1ed3427ea356c80501a3edac08d8ae8d3a0230478bd5a75165a1768eef8198218fd63e82aef3b9d1bb1a9b6b72a819bc5e8cb4549cfd193ce36d458ac1b8ec3327a21c2128801e85fe359d6f4e60099cadd43e8e624961e26d510bdfc98daa4bef2024829b64bdc9d2dc3adf246a46d52fc21620641f49ed0e3512b48f669810ed389dce8e075e4340f7bbe37d2d9810ec3f83302ae89702cb01a0329cac802b2bd3d12c8ad1cb9e4f6e68a5df11c7f5ed31cee73d0d14cbae9dfe8077c82843b1d706c5162acb800829894ad57e9a2b3982406c24f488f0bef174c8a8205801852e85c0ba7a2592711166fde4dcdb5bd8181fe86707bb1903e5492fb81eda0db1be9646fe29a27b950c47e49693502cd3ddb3828fad74ed8662c7df2e29750e3d71807f6b9f0ae379037327720bc24731b74663234d7d144e4e340092a8f0ac2f2d8d928844257427df33ef00adf853fa901eb2ab519c376393d9b96d05149091dc03a8dd81bad4a686cf64c9dfbcf9364f8498b0209afece17fe3346a7a9626a652be8f3bc93abfee28fad540ad4e1eedcc03db9223e1096c4eb96a5f677c9c3b04d7b515e76a238dabaf3299709b22a1f1ac84ebf5216c380e709125a456ea3a5b18880d02c605a559a5dd1ec2314f000da61f75f9cb75e353bb4163bdcf9122c9e3806797d8e6f3d7514d373eab14a6747323d6ae69c6eca30c038010511192d5eb36dc030d47c79943fb793262e3f3caa60a748f66cfb270c550114865ebe9037203c0f0fd98bf13f0706b39e36d7674b16be6194d00e34179af8dd278a0b3d72a7fccde046a38dbe94473d1b6f1bd0727a081e8a70add99bb8a5c2b23a081c567234616cc2cd35580d02986581125f67b40fe59ff3e3feded7902ced18bc162da66c357bf610d1569ac02c4415c5fd71ed5b1f9a02b58b291d4284a2cc2f113d6e2db0d58a74490065076180d33a90da4d723544442d68c4b5423097fe69f6d0f0fd3a412501859e93629fe0627b01e8fbde8d6562527df7c5189a955573ae2c54673b886fc06d784f564e2d6b9039e4202791c5032cb20a764d286379542099c3f01b7212b8ead6bf6dd62f957f1f16e3d3a82bd0c4f044ef6844cb13143361652243c7b3f1e2ff0b2e9fae89529ac56d6c396070211def59f15593cbbcd1cb6184194ffd743f3c5c211172ee11943ae57aae2d8c4b2351db70c3844852e11edf9e06d29548e7d5dacf95426dc2f4be74836e58cc4be8b29e6ef56633e14aa309f973172675c412acbf91e8ae6fa2974211e1a9 +Output = f21f7e55ae63a8a25aa2f7013bea098bb715a04bba1cdb65e00e97a859a39ac2 + +Len = 95344 +Msg = 9b6d359111c638a4c90c5f81776f2e72d02216effa058e64418266340bb458fd0ecfe11ec0bc4f760f031a6f53ee773b81ec2b5ea1339d6d82a93015ac05cf5e9631ca3119f3e01925cd9d46b322e6d7fa99d259e6c7bb8ac608956345ad7f569b5d98d504b5141371328f0e7e51a0cda5f4b2e6b1080f4475653e27bdf58f6c8519f40f694812ee5dfa98d09ec4d0a5e9c47410ea3fc222f789d269fe252829bc2e86e930f5033150ec6193fac39ce82dd0bfdc79b4fbadb43cfa2fef857114a864f56a42040f65b2d1925f7a952c1ddbe13c5446afe36b15455e83785d93b5b282e99a85bd5d11ea71d33c0684a9cc5abf927f3a78a2e6806ea56c81f4b59440520c82e26816bd6294ca3386d63b7e12326a653b565fa65e7d78f3f293003abc9a0329414c61f28102224be2d409b96b026c0f32934331183b7e1eb3829c2e8c2379988bb26736af82818d02c63c08cdf63f8408757511147060f7ad09b0f81ab514d5a6e2501454de90ffcff4fbf0a0d88ccca3451dcebce4c586c6706421cc187cea7c244311d8dcf6ab2fa56ffb4c6efaf0ed4a65ee775e56d2e7fee1300c135adef4c068b7a4455b990b23c0b0398132f7cdce73fbaca8bbe3f9fc4fad416f56baf5fde88d1ee069d04cb41597cfd8dbe92a176f7dc5889bc1e2b2d620d2f417856925eb1baf77c658d8a19639773d9ecfee6e82fa29c79e758c689c12296a4647377e98eabfd01a3999326d1d977623b0001bd4fc402d6d06dd66cc0bad998a0947511881b7b50e7b76aebfcc994c119448668c0a7281b07cbff38c91c6498cd281e59368fdec4927565fb7cce3871183ae97d2ad278d0edf1959042edc41f4aacd843028fb3d7445238b7aa7dfefca861af5d06bc7173038d2de5e69574a699913741748187237dbc47b33e4f34be5a474c9abcfbae8be8ed4cbbfcaa02c93a83bfe7150bb5139f32177080c896509e6a45b8e5e68c85fea066851da1daf1bde2d6a66c94ea4239422c621a60803df5292f39fa23a7ebb5350fc3c20379aa944d1001d3a38319cc7afb2a73ad8ee0ef327d9062296d47bd19ad1a82556b7e4e00f08bf2be1c14d93b081c25161ee3fce4954ec66e590476ccc2dbc6fe3cc75bcd0c97324b11bde000d7c99720acb1aede1ae79f7907bc62dcf59a08844a203e0fa8c62ae1009f616aeeb55253d4c4657d82dd45cfd5da11b899d7df8e30137527799b35066513dde7b161df2623a6c14141a261d96fe803fe3407b4527b1b91c2d388f931bbc5d5f5d441a62df5d332d7fbd96c3c225099fc58cc1f97779304606b11efe9712fba13abf74fc1d7d44a9005d4dd5e89ce74518c7789b3d2245d6e94b8719421bc2adfccd5248846246907e4372db7229c039c23ac7b4e0759fd6bd4ff36c859e578a89b7dccf7dd3e2eae3b82e5dc7953d81ad2dd7cbc837e74d6c058980c6656540cbc53c186e9ac0c01602a9e44fa70527bfe7cf685d33c444ddb572dc6e3692d8a83e97acc07d8719ff690af77229c133e2b2d8140630dfc2f8a7d508e6da86590a6c1811dc45e0fe86377a1f98e118abfdd41a552ef5dfcfa523db8d9519eacbd895e4d128ba727693b220e32999b399f896bcb63a4b6d73cc70acf2e2ba6637fa0226740ea3e6890e2425cb8d173904bb40e7bc93fa31b755d76fbf3787a1a457fb0480f5c9e33fdfd3b05f2c2453f52d1ac2f1a1cad2a228a04d7dfb46441ad9c7a67f45f512a1ee08ea286f87a973386c76dccc83f93d2e136db395c0f6a167b035f865ed1ab6230afaadbc0ae286c37d2a057dec4d8f4d77f8e96fbd6042e9fcd974bf79a587672309767c73a636b79607f51ace77a06e1615a7f0052a0448f4b97aba63581aa0993f0c188b9f8cfaff35330df11e787a36ed76805ffbf06ae0fe92be72dd79b8b5c3f6f61a738f7500db47bc1deb205720a7dd87947b0c3808cf44336ddcac95bfbebc80e8ca4810e121ba911a859fef1c6c656d6d53629ab35519821dfcb921ff57e71dbc4dbdb4e93013f2af96fd287164949baf2bfa792bb898114ae6aa42bcb7fe345fa3f8476130da49a6c342ec69b6f57725aadabbb61f4a49bb4287e24005892f9a7501b2914998fdc5b677224a8b0d6a96790c4a9db2b5923ab756e8d16a1175336bdedec1a1d376d517a4b25d0a66ddc940980c289b63558ded213cb80e1d6ef22c99b23963161c9d8dcf83ea5c873687a684eb9effdcf87d8defc63d183582a1613a1540b5e657e7c1027f39a8f8df9853dace4909a6e5d23fc96ea7b1e11906b1c7f120bfcd8f795b448d9117423ec4f0a29c6fde4b8254aab61c4000aa9bebc54a2d1faa522c1c029e953cd1ecbdd325e23f59a95339cb77beb84e2e17701644cab1869efe96985e168080fd7ec28c99a49e4f904471fe4de92a1a62b1004fd750659dc25735b518b734a6c380b7b8f5efa198bba891b6d5405aecc5feb46026e331ab3fe7723bd8869af54c7b031fe0cc307e530603bbb7ca300c7f88f210d88bfdfa3d36b3f1458d9ab7c0f70e890341334780e72ed59a8f95c1b7d723269650b1d0e3ca61a008d31d32477a40be0559923c69d27acc26986f549571b06b073b3576592de510c96009b0078e0185901935a5374f4f6704eca80d42e0ffa7d4537134c8e7a5092f3d48772bbab9a8498b05ca11e6156fdc932634e6ac7aa1a4a14d51587e0b53e271c0cfd987d0eddab6e8f2202034ad5596d311a85b8823202bb217307c7eb58b045b02397bae1deba2c7678c8414e618fc95ecb17790f3f0fb86cc796965f9d2ffff577520bb0023588b6f7c9b1ee5cdcd560c2988fcdabb19b3b95acb2ae55e699615b2fe605d2bdf1a5318ebb8711b12fdba371433a0298b1f26fc2c3442d84a07851b9b03fdaa3f5e5b8afe4b51aad2723e03a59d0de35bb45a8613ebd7e7aa3aefd5810ea949813ecef75c404e23159de0b6c2a2e99191589f2109b76e3492179b0b38e727b0aca1f68a8bfd302ee366e878f4aafbdb33f53bf59500cd660986d0e346f83f86c871196815ecbf7245b59d70c11d0c674b7277293f2ebd26186fd78535a7bb74de9580bc8274c298427248c7b463e4e0e0b79be68fa9061cc6baf81a8d5e6221f4f573ac58fc0347e38531a452e44becfbacef530eda70ef1b4f7bcad484fb361579396021ee48282fd6a03025090933a339bb994327c3481f16a8bc94804f5a46091c0164b15ae32e4ddd93b438e55ee04646dfb6f9c6cedbf8c71954bc2636918d62b7aaad011fe8d32ff487daa915babbd94ef0b9422a56db1f089d9f4771fded54a97a4a0484664ee07b27581bff3a80bc0e78cd000398a9f9b2f6917cb492113a005cf02dbbafa836521b1804c5677d3746d69fc502aa489d3fe7fa8ba759e15ce3d807426ccbc77a9eeb842b0f4a9b921e93955ccf93a253d6f8433df15946017b77f70c3fc395f38a20035a84e9c014bf36198c115b9d639fb2d25a3b9b2673f0c02853da9ef8eb3b41fc57cc4ed5065147921c700b2314c39c10aa2c256bf8693c03dfe864daa8dcd6d9eb9081c3b0fb4f68d596aa1bb06a3f65f46d01fbd90e71ee770f1d2273936701de7888705ae6d5027f28406c7dbb213a02a537c05e08e952e5f7d2b894887ddcf82b6dc64c3a61cae2d1d600c4dfccf59a7dcda0ce7f2c98ef498b8453e59fd2015238accd1e7b27c53772beccfec800859dcd85739ac0265ead4e6df8cf564bc094ef0927baac81f1021f8edf3e9bc18bac3e5693822f66f9ca255eca7029affe9a9cc7a0377b412fdbe25843cacfa2735329fb775f01be8a49173c12f0a066830b46cd81bd71cd456ac50441c8ec090739955b6758bc98d7d12cf0197743d81790f6031273148efb56cf7b216178600d078a60aa95ea5baa0b6d62242c9b6e82d1b3519a82efec1b4708a32bbcfd0e4e6411f18a3f126fc99fe17a7e372f8e8b75859f631287506be77965a702027b92f930f64d7ebd3cfc3491216ec187a1fc2574d5b34a6620b5db29aadc5a100fa16df1583c79722a0d72833d3bf22c109b8889dbd35213c6bfce205813edae3242695cfd9f59b9a1c203c1b72ef1a5423147cb990b5316a85266675894e2644c3f9578cebe451a09e58c53788fe77a9e850943f8a275f830354b0593a762bac55e984db3e0661eca3cb83f67a6fb348e6177f7dee2df40c4322602f094953905681be3954fe44c4c902c8f6bba565a788b38f13411ba76ce0f9f6756a2a2687424c5435a51e62df7a8934b6e141f74c6ccf539e3782d22b5955d3baf1ab2cf7b5c3f74ec2f9447344e937957fd7f0bdfec56d5d25f61cde18c0986e244ecf780d6307e313117256948d4230ebb9ea62bb302cfe80d7dfebabc4a51d7687967ed5b416a139e974c005fff507a96a3cd12e9a22f0fccaa3ea8ecc9a376ce80a728b31a3f79c03b465f5bbc0985d8b608fc55ddfb2ee2101413e62e84a7be2a409ba662054add2c99f004b25516c701e051c05c3d2c98d608637020fc527f9fb9acfcc1c4703e92d019228a3c16ada9dc79f2c7fcf33625a2005347145f5a069ac57ce185d22b9470447cecc66bd0d985ddb3c5416a04246b52574cd3b697876c4df0674f58eb5a03d8db7efcfe79b761e3cbfe13794afceac243d7423f7e4cb6ac1efe2beac80d113d07ebe5b7ef6bfaf4011b7a084fd4a7b6e18f67e3567a0049ce4c207008d520dac8d9897e7c1ed8791ec47eff5cd52b97f71d4c88693cd38ecaf936d2f4d9ba19e6f1f13c66f881d8eba02846b926fdce4e28f917fdb8b5e2d9ae75f8d442666128da24d7f6207f7b2d587fc6aef1a6c1ae5974795b1631adc213e6cbf037ad1b573c2a3974bf5ac8af938b65835bacdade58c794cb7fcc584ecf90318fe115ad3bc10c4828fc982938fa550c7f8e9980a8ccfa52941b1049458b7c13fb6828809c0fd1ee5900c3058f35e4a4ebb2f41ad25e139a001184e96feeb05a7af36efc42ce811251f262c37deb41130fee461225b51c53558ab0a093a136ec55aa6e89f5a7259c56fbfecdcac47243336b16cf697a1c67dcad1dd77b4b16b3d4b6b0907c41c473b1431e8a3e6a811a9f51ecb966541cbddda352f4ed9556963e3fbc77a0466681aaf14a62a08275829ac75038e3ec233da093d761b226007cdd6c1ba8295b13ad882e0bbdbab757626ef5cbb4aae939cf6ca6358492a81b4ff7665489df2ad4df9521e70352ae2ea16104e49581f4665b8b03f3c754c0b0f6d555ef84895bb0ff17f3689c31120229bc1c244331b5b3c943d49991c218c659bf607400f196b0f657cb16f11f89dce1c764122782d32701dd3eb049a2586560fcaf6c65dd82dbaa9dd27868e4bbc3b1c90536a73bf7cbeca06bbf59bd2895f3d66b5f1a16c73904312f166a4752bf810c27182c26c8a570d6834e28db2e5ffa93bcd389640ed2ec5a0b786011f3d839d6f0411f09efc076c5ade51ec415ca5d7cc952198effaf4b618e27b00a4817c2708b38e6ad1321e7b7120da33f83df04d9bb63325e41d7078edfaac4faf98302221e85ebdaddd2a9f2da4d1f1521a5d7f2b98f3c9a7d520a29278902a9ae24e233d2b19457f4daa6bf2c2efa0e9624bf0eec5c9f0b5a293a7a8d4dd4df0e034aedce434bee0241c46530379cf28a64a2777c54c479816381c93a7da163c12723963bc37765ac0fed2e10f06e89a76e6a7390ff11ac9908c65d56a1d0fe7099537740b97f859c4d0860f1e1d69b9249fd4b50e4ef6b4b21f17f0841cb78c35fc4d806aecd167a03fd44fe933deff6fd4547e58bc77f3fb4e97778e6f99961835c01b42ac8e0ed37b4225c8d0c4e799328ae777cffb11ccc988dcf17c228f30c053973b3d8aa9ef314423657a980c31290ca2d4001c78a6ee509355d8eef2003a6c96bd3653e353e07ebb27a7e4d7d8264e1305e338933a4b832d13fc5b4916f27f9c311d76259217566f87df17d4feb8c3ca85effc1bc75f951cc45cf40ed586f11a4f597dfb2a244fc31e86cd7e056ef23bcc9cc35d0ea90ae4df7155bddc7685935080b7de9cc5df285445624d9ca77dd942501ae150966917ddefdcc09c2f9199fd19c03a6a4a8931b17172ce1500bb459fd08f433dc61428481f05d18540a9809d9b23b90340d261cec17b7a1ef93ee33d648cfd36b6a08896857d4b382841f9ca6b6eb508375f2af48bd8dc1aff8d4493a29079dbc6a2db41c98fa81564df67fc20edc8e99c640fdb57375e89820aec4b0136338da47f72e241d972bd74e65dbb524d6f17fea582ebaa139beb3f4c4cbc16ead4dcaebaf1f084c73580d6fb4d8055fa1213cc78269e0ad9fed075c5d87f3a2ab83953c9caf518f55b101992a9d3c2604c7d84706d6ad00701a9c41c320d117268344240804864d07ddbab21053e1e3c88b5c512b9eab0273ef7b893cbde036e5f4df8a39492fed4f8540a3ae217dfdb514cfcc3be9621b7214ab1e1186aa65b27f6c5578a4d5d9f6519c554c3097dc930b39a27cde59b4333134e68aa4b60d53ccf56f0d3dff78c4e8d5af32a8b7e82a17a2ba37a6183380ed1fcbee3f8c97918281bf403d353280f3f398a8b0668942e113fcb36827021ff073b4877eb5693449192d59ccff6ff419fffaf5702a27a21093503a4d0f87d8e338889b8ab8ed04cbc4a19f11e697e60300bc62118e2a134d2b9e127d572c756e7731738b1d8ac9ad8a035b3571121f59fec637bb17fa5d40e2ce841f8758bc38379657a86da74a9a733bd65f294967c20200bc954fff4890c0c8d85c277277ea809f8e092fae5038883255b894a285e6125238c8bda19ce6cd74565bc0e46c2b5a3462d7eb06a32fd0ce23683c86436e39a4f57be94920e912bb4645d91564a4ce3d193a29170b2853f88796a95e67027cde39d75c5d9d429683ef41fb6d26fde3a2fc59724950cb1a99c86b6190ba49e5e84d049d47db9861b69a78ad547cdda24b535d4d0439bf2c972f0eee8604ec7baa7929346da2947c3a8f1177322cec1121666d43b08fad92dc04a7d8a60d92460c046faa39badeeef91635e16fffd33b0a7cb2dbb51a3c524e8f60a55a9ce44ff738fd8611ea1dbfd9770c7473bd3a25efdf549d7ba21576d7175fdf097b8a9d515bfc505ffbf9f8c4f9bdb7a72ec8d9b9d57a116befdf055ee6cc0d1a702b3804b693918ab61ca0a1e571337119265e4ea74cc0ebc84308ca42d0b8f7446f29f691ebcffae02bbf58834f6e3a48fcbc989df33164f7e9860574936707bf007711342b951744d15ed01b80f26b81f1fb7efe97ec3f427887f6c33ca2b2a8832a3be67c6849a9b483f3f52b476a8dad24e7145f7ae27299148579f3f260c9a34b5ef006d2f8d67c39a85979f3a134d93fbd257462b74ff3339adde2dd79e806e1619af05a8c94d285d78e9280763d1d52e77afe2c24a02fef1d362eed65ce54f42c2c63896dab5e7168dd9d76537220674d5b2461932ff44df6cd02aa8d43368da7ee86e503e3c704448ec25b9f998b85d70f0e886bc2eb570eea849b570e53b2ba2882f8b704b54651e92bb9c27b05b56de0e5291422bb144bd4dc482cf9556e4d217e4aefd5d2407835fd1724e037fef714d1ccf6170d8c96d5333975cae1c64822a361141fc3f9a2bc63fe2d90c8685df4f9fa796889c8d833b1f7984aa2c4937318c78faa3379b5c483f5455261fb87c8863a05dfd6cff7377d09ff413d6f165c0604c63ec8c99b968584d4efaac05dd89f1502429da9dd29c0f710775dcfba25959e23a32af03a7a923342304abec86b6d12d85a855f7051a14a35b3a8ed6515ec1f0da002f67cb7d28bf7daeafdaecb18b9efef37f89af64989d5bfc6d00075340fecfff8e447976c135bb83186f93ec792afc95a7c4162df3c57616080748d94f42786b3c185608853d691c8608f0da22681af97f44fdb8ceb25621e06a7a5355828fedc951d5b50d4d12c56935a80d2fccb6a9667abaa781fa689a76983053fc2562e1a69f7d0ea1db252842840de7f9cf6c3fedd3d17ca5f42a0a4b1eff5d9bb19e01644fb077eb7e3cbfa262b71d08f6b7f785eed69ab34616dbce7d2bc2bcad9da782e11473528ca5f5f95027fee5c9169abf3a3ea42256bba981216a35e77fee5e72f21da36fad1d65c7ead51018bcf4840a347e0b8bac84ddf3aa2f29a4af0c90b501306aab45ff798e8132f30a58fe3de77c194347be1ee3a675ef106cc184e8d98cf14b9dfdb8bbcdb1e60a33138032e75f94edff11c6751a232e7cb84dc3c15103d4c8a02af5a6f5fb52e83b73270d7a7d856e0a3e27fcbf2061e10faa55a4abe46f546a5422c5a7dc0dff8bfe4f2821544f360199cfd5160c2dcfeb7dc71d5acd0581451fcc9243c28bc29d2b851d7c6266e87dcb0aa8af34e6abd42e7495de2c4be1d8c45f976a5d30d3f7715547dc2670f7c73884e1fb39210742330aa8b660b6d89e18583f8beaa1a613763c51d11ed1e68668ab1b7a877154ce31d5c07428bae7fd524305191952ab8990b6a5ebca2e3723e209afbdbe3c36c091826787e2ec827f28ac82a267d876c25730be9c96da6c382b1d29253bf60fc1d88d28720db05aabf20132a834877a4630472654335ae82baa4222618f43526a8d526db327aab30c44cd8fab2e04388dc26667b2fe444d86f63505c33698a103166eb1dbbf203e08a77e141bb2b33411742aed39761b0ed275524deab05a7e240a5e8f4c42d55e3980af4a8a4138ef79cbe131482943ae86de2685488b2d3c55df9e7095412e961766bdad7777f9ed1f4045de7f9652af2c672e265d35757e111caae0373890681ad045b753c56a9f8a67a54f303bcc732bc6d5bba93db7b5de381078b297af56bc43c3e2af982f8943a8abfe1a8815ad1d63c9cfbd02887615c84b8497fcdff48437a4da0b8ead3cc399b6858f09c2bf69d456acf9225c317023c89e47c6a6a40b3284e7c807681c82a141501e4f582ca97f190dee2ba77a560114405293a7e7a9bad0a695a0e4cb1955f8f848b75a7754ea8d4d1c7cfea33fb6caf538c23851f8371490d4c9a7aaf02e39e88ee02e11e4ad300504a4c65ea5db39477b00ec556f3dcd210610254e9fa0809b513857aed11d8da02721930f10d50b9189ae4874874566f1b9e2e228804369ab404e7b80b2d212b90471f937193a9e6df548b131c8d47e6d60d072cb3a9d5172dc90ee4a02614baa1d144d6927828e573e5edb1fbc71700e8b573b993704d49c768e445d3821b51de1971407b43337d7e55f1a90da92e85fa9e5b1350e107f82beb5025cdcb9db6ef268f1a557c3475a5ac7e4279bbf43db3d1a880118469ec015939cab68802b27b0084ac47ab929692f37ec66885d2f0bc554049fee2dcecf0bb897db542b10d2ab03a3e7a59b5a8ed32d87b01902e65bc320db64082c9c2a0182786f280148fa63d9718160d05735d6f74aa6d6371655c71f60effec9634ba78fb2d96ca920094af85824250eabe8bb43a9ad38604b84419e29b62a9ad0be6e4edbac9a893279f0febc326a9cc531f0812955c824d261b32bba39240740ecb62e574b2a37fcd6d64b024eba013f8c074e4e130deb67789c5686fb739550712fdcba57a42bfbaa6b6beedb9bd277616fe98c77622a67238d8d147f81db6bc62ba8793480eb9b6f30dfc66b7897094cab1168f57d785e0cd76de727d7301f764a30186458ed689fc7252d60e8b571c84924681fa84ba89f3a4773a6fc39d7ec0bf22c8994a7efa68eca887e54b42d4ebab10e588b1af35506c84e5f696f2191d16d0a06bca1ad3df84e6bf65529a86a8035d0228e6cbac8cd5edbc3972689223b1f455e39710da0b41f5c7b627c8f863a2132103ac76b550e79a0761e267b07b9777302b38cad8912bbbe7ff5332f3c3911c8a408a181a44ab730e956b573acdd03f796835ae941c4a2166695c423e70d75e85080919a10f286118fe97a0f9c0653678c51726d852a70f8e1bcc5fa3137cc35a83afe21359674a6fc3edaab5fd5d43746864996adb496ea53d2af0e854893250d807d937cc6e18590ef5de352cc04db779a76f13603824f4f9ff5fd6da0592b0309667d70e47b11f0438a243f4973e8721650f9b897d1bc375d213354ef8cdc2b2e6f4b9c7faff09cf3d5fa5fde9fd2d8728e3cafd1f395ad92b74cd576acace877ee9a6a08de85e978c7e24f0be72f1d5775268652668004e92ea659e64711cd6e6ac66400a566883ae6588751e851a30dbc43c689b8ffefc90ddc7caedaaf4c8a7a7c15178306dbc2a7e9933121ef2c2dba10faf85969c0aacb5b9840e5d9d8548417f78e05eb66a88301fd3a125bfb3ff52a9e1ec6422a06fda0474ce72603451e1675f49c78bb351e2e1fcd482ca2bcf3dd2a7d8e3d8e860b5704135d185fd4af143aebb5533c20cfea857b21d5b51d4cb52a952fa060707acc4944b635409bcd8d90d3feff8bd41eb3c8c43deb94d9564f08e6191f328ec28ca14190e14802ffef122db7d20cd791165428fae2e489a7175ff0e91e8719892486aa6bb0f8a29cb559899e8f4193ad8eb219f73006a6c58aaa360e02d0a9250073dfa538b4d34a7cc158116bcca0fa895d37a1778da928354235f670a1c62cccf361ebcd1f4d7fa1d419af0c0077de92cfd2880dec194583e26130ec7cf916c67fd19e029a59b2c11c6ec5e47f90e03794ab2987a46fb412f5585beab4aa69a9939f3a5da8806a570497f499bc7495e415f1f4593924ea5ee58bc5dffb629bd2b92b5f52ec7a2cd02755c97029ab6624fe7777173cc15ec44d6c0d40b3aa23ce6b266b76b87f70d8eef8a32c59ade786a88c203601dd97df9779a0c17ff9a81923e0ed3daf38bcbde6211002cee480659ea09e3a3ad20c2d5e451ec6b2d99f3f7e1b530c330e970b874faeb7ebf7c76e5b654f984a37522a0c5ed5b4feb25fadc4164b86e699665e5cd4cda0534032ed694a92d4a275d0521c177430a61c8fe0b06235222c41b112d160fb407766498f42b12673f6362d32181f68be5b809674ad9f8e6296901db57f74b63cdac271a0624968fa97c0bf568ad721b2818709e6262ed5dc981d02d2d1709ce9fffd51ed6263d8dd19de0d1beecf3db1ba886091b48099d4b340e6e751f51ddc497f50b2ada1049ffec6ad0ebe682b30591d2113c33548ff7a94505f8b62978869b0f49cbe816ab7b91305ab644268b30fadd1e8fcdd71b1409fc5c7e859b872b34ac4081f7589c8cb5bbd8e8aee84be20c2d99dabb992aec7bbcdacf34aef2fc89535813afdc027b8091b049cbcedb64ef4ce8e6a8a2a2c5280ce7b26a6aa141c38cf94bbaacc791193c4ca144e323fecac2757b3afb6de83874ebf0cfd87d4209df8befbdd0d113a94412b8c02c0bf7c515a76019ab719dd27c4e510cff6c4684d576c8634e0a4c572f6c56e8b37c990acfe55feeba982b1ead799dc9e857975bf5229e513058834c87c142647f5c2abe77993e6131c8dc458ed29cad99277bb7c7f739327ea5ffafd37945db9895f30c962ac61917ebf66fa8c216611cc23bc0d45e60ac3ed809a99cfc27f6070d3c1ab300bfbf74e8c2c381b2d28d79121f9da3bddd677ad9e96269b1b05cd3ae4d105683f1fa51a7886aa30899d8b6fe6e77bd7d760c3990e701c202a7b5045e6d17081b2473b510908c962e33eadd6d7275a807f44384e54baf2f56d6aba307e5574f301fd2a80b214fe08a686cf54971c0eec21eb362c05c93391603e4b690fef7b62aabbe328084de0b8600060779b47f1615be05db0963d667a8f70848e1fd1fc27190df5c57025f9f88c25f1ae583dba96a9ae1f7a8a89f42757ac05ee22df9fd6d96de2d78e1fb22fa7720367526fc2e287cedbf85731751e554b4027bd5aaee868463aecb69d91e43e7f06311e4092db62ad43a880c651c614c8b3b943c5d1d252415e539e4221acbda78aaa1062b2f7e6c3c709abab32b4f2bed1215ab3813b03c9ddca898fd9ffa1860120dd489bbe70cce6aa1c7260718b9848de66a63579195a29b01ce933438684fa43d964c5959d0312f8679e83725bef5b7efc107712ef7cd282dce0b61ed94ed6719949b913c820dc732192143dd02eb9519f84ceaf12ac68d13e08eae8162e3638a169fecf9e80c3b8ceef8b4a74c0c314a56594941f534d29a4c44a45c9bd9a076637ff1f6cbd4927b429610ed6600926b2457168521c0fdac5954cae6077627c7c464299cf20dd4e95b23e2161670c065ab6dda277611183051e7a8886d63ff6381761a5327600abd82c6af8a2504c41e30c41b8ebcd02a0d7a24c7a896483034e2dc4e8430743bdfffa701b05b63a580fe836422bba43c2d1d34aeb04bcbc3202ebf4d95d6f36f361aef5ff27f366b725cd33a4b3b365577813ee5065297bf11af469df0e182aeac1bc652b75b241edb91dc2771032d7dd3f06bf51473522ceeab9ac8fb19cb012849536168b5d6c7a5e6c5b2fcdc32bc29b0e3654078a5129f6be2562046766f93eebf146b56f36eb7a3b764548eed1b610acdbdf427377a0b3747cdc62f2b01d35031f329062419f910d9c3e1e105a164465186974ab16b1c57f1b7549d91bed1b7d2870a8c11d2537454590c9d235718ac994791a7baeeb912079b345850ae756dca5777b261a0ad194fae3b89ee436684ca884907fb0acab1b202cd2811d9a8b940ebd63ebd8cef45f348d76e0f6f36150fd229311bc7387c197387d57c4850e25ccc90f9cc9c014168b149142de371a88eab98efc32de9bb6576ca263802563148810eab37dacb55d571f843f1a6fd856f9efe079b45c6b6bd93fee4ee0fa3ee2992b71ca54e36c8620e4bc302bfc4f4db30c4424a16b7b54a538bd745781e612a88f213bfff28e43912ac5b0a39ad3dfaeb506879a8a5ff333ddac7e644aed170ea295a2df58aef7f0582d5ae199fa7f3560b41cf0476dda1da517c787b3d882640c3b7963845325f6d34f79869847beff95d94f5311497bcb059bda426b2cc721328f3a2d13ff5ffd42c8a70314302155daf2b92376575ab495b54124bf4e67ce9bfd6fac7628087c1d155dd77c4818e0967cc4f1f53be972dbd0769f5ed1e6d4df2274622951a20bd8b228845ef438185ef40d4f0c5bca7e2e99f512984bb6dc428b02deabf0cf24fc2b719a2ac8f175aad4fc8b2a2b504f245e474f1a107a3d8ca375828ca9f24ffdedd3797e3ac770f0bc0d46ed4f2d5e53b9d77542c4838103e856fe49d18de55475c8a2a7ce3cb2c6f5d9f2b42bb43413194055b0ec754f4ed62192420c24ada66fcbb655f7c383a43ecd2f1d4587690918fc40c2dcc1d0d3f95fef23be48d15a185725074bfe8c0ee3614c872109559c2575c71729ebee29de8c755d6c5d28e61be56f2a4f30346d8030eb9042cc9252cb47692c5875dfc6d211c56d9ae3fce0f701053d562b054691b67cb72f4397b376dba750fcd23e11809a4fb2ce7fc5c1163487bf05218730945c807a4b00ee34b4ccf2436b9371b0768084eb8b832c0d15fa573de0c632a204bd97383a86fe5d0175ea72493c132a106f05763690983b52ccf4285d8b80216f3411af524850a2e970e04bfa3ebac4daa021d1641a82c27916ff0cffd3f825306a901e36b77d9cd948845f130db13751ee9a8ba8938438e582d86a3c522323f4bb83236c66edb16d67372a184b9ee80284b00358ae0515247b00be876869a438c17b4d47d92966f247891b7e5aec6d691d12e7189c9ddda27a18788599543c58f6d8fa7d80a9441473fac1a9ce222df20223954d11a6f90bfa7026ab677b42f1d63cb961eff5df5086fcab4f17c8a029fe729c8a9fc8fdbd96b8576d55475e7fea17188999877f12db0f46c2ba486aad4c706b45897c6233b941794fd530f57face89678ffe6c9f7eac312a94849f3c896bd9ff27129bd1aecbc1ac789c09e5d992191a4958c466c50889d672415c21847aaa935e96974bfab88aa68c58ebfb62972b890fcf05adc86f04590e0646c18e9d7f57454a40fae7027a6a82af3e005e82c69c298bb9de5087ab99b0f9e3846e7c6233235721463d5299e1a2c8885c96fef33bdeb3676025f8857fa042bed3eebe5a0f42e4bf98c34ff0f133cc5476cfb1b94e7770989b0f6b9af3250a5c14d40b6fd3e81aa45642a286837fe227b8d44320bd3ce9d3f7d688f3de887947b1e90daa685e2157ea83f26380cc338b896c5d30707547a0dc41f6972612b60610f56912b4ec2060ba4be890ce63e707515ea7f24f6ab187b21a5e8eb508ea219bc0cab0a0d93f4830652c14578c25247973c86d43635011e12767e171b53c20b811d68a146fa895b29865f7018e1568677369a932a74bc5d131ba974460d58cd1b135abf9f480d2aaab3b42b6b3e05d842631af067fcb2ceafffeb81550dced4d69901835b1f2847f6758fc5d41ae8b3853c986a533f8cc955bdc4dcbce7ac994ff8fdab2ee23359994612dde81a679ecc4d836f90bf930380bfc5d5022d7aa0e3bd9fa56f33e6c60fa01dd21bbf1af063f07c8e84ef7dd3dd805f08b941a1723e717800b0769b23c60de150d37b6b5f08dfe435c46195d0a8aa00e646c6c993bc9f072b873cc8e958fa0dc8c3c1e14107664af3c39883609e974c0c3f1f4b7beab0dda45809188d350f03b86135153d0c1e11570706bf3a0bc2a0d906cdbf9145315bf9973dd285e697639e10576fa97381f7cdf33eb1939cd69feb32548e7a589b12a9e97dbf79ea2d9de8658b691cca1c3ec73ca30323be2da9a1564640ad91789223b33b07cfcc5c1325d5438a1d9c5786d137c61c60ec424e99c7156e919c444af588e873fde98d83e4e4325b1256ce408a792a75b1a3bf0f33193470ccb578bd9def186c9ade5c309426ba44a185dafc41854297bc60fe6c1bd145ffc599905a9b3a4d5a1d2722d9b1f16def31a6282aa4c0a10ad7c07ad5a263ac54029525b26c0ef9d4fb307bcfdcf8afa34934105c02cfc837aa4eceec6564ea260a5493459ed1a065cba6e1836380f2195ebc3df10a072ab68a486500e33971de533483948236c374f4e6eea4e44ef7b9f8ab0b8a291b3af01e59d7c39a75f5f563d1512fd482e59b0d6ceda4eda702fd9d9d03a7ce508b8cdcff9194f99ec903b2a79668045a99308bc578f3de1dc66cc3eeb0ba886b9ee53cb61d059f088d61d623cddd703220ede67d1b223437947fe22c8d32e5a0e781b3f9f495d96795c824d26200c69e4f1ba3f04ea09e790fbf9ee303b144b4e7fad94792b66720748f553ffd7275e366524acb7e0f6b568a94508ebea6440c32a9233b81f796c7cc3fbdc8eaa2ecc5f92a516b43cf2954b7a68dac18a2620b3a2518224cca06c1ef41e509c3f2b9aa89fc4e5c1a5056f7f96ecca7ac060d5670e72eb84dbe25a3704e517f14125b059b50a81a7c3382b4d245942dd361c4627977dd5a1f3481e0d1ad899555625f6bafbfe532d3f92b1fd4c35a9b394615b3b65fba844bdd8a1e85f803e90263254129a28c11dc11be9d7380a67c48138fcea9f74cb33e09cc912fb646f695a54b2abb910343ef0dcbc230d5fe4d8a6a7117d6e6ea837059c7fd2150d92aa9a93f8cb813f155775dc1028f6bd87b7abb9823cf973a617d4dfac6fd50111198df80ebb1a3cca31f724cf2f19abba283773376f690a2d9df46d363264ca527fdc8adcc3ab8fbd941fbadf809eb1e5f5f2df195ee5bca58f0e4e0763eaf0bfa32f524a2a5cc1544795a82a63ae576ee486040e51960f76b6c98b054a8ef9be4f2c56413a5759f91400f696207126bebe98eaff8fa38d09dace2a1a2e796fb9497ea0a739c1df13c109aa0dfe0ea53d4ad39ad56135bec4c3c4362d59d3d9175acb386670c5db0a1757ce7646ad5d5352dc1b760f7429103854b42511c3c0404abc24642788d645de9369b84178d4699c5e75cce18756560226aeec9f71ab9ce1f86e8ba635582ede6484bd349594e5f2ffb1be1e97cdfce9e12b694b062293e7281ec134f2e72cde73266c6a2c25311a67d63310cb176cb52e34845caaad8d23f33af01ae70da7a86757ad2a660db3dc3fec15fd4cbb0c2eb4d0251c84d5f25e02ccffa13e510702e91f68bb6ad6d5022ffc4b2e4141461c1c0734d1bd212a60fcdbd60e1c3bb5b5a18785666107fe52de0cbdebd33281460de199c47c1a9df18a705dacab5417893696ed7373299596f527537c2a14247530673c3dea46b3d954927cc2132396455155862ac7c304941b52f5286d7299712da006832f2fd5df01491b977c319bb399ca39d2865db215f9978b38c5d14702ab95dde0725d69cd399d22740d048c99b7ffefb5d78007e037fdfdf459bb96f0524cab9adb57d969a69779a1ee26d2c052fc8e19e3b26bbf7c8c33a452b7ee02cbcf56fa94a58b7cee3e0866481fd6f013c7ff47d27e4678704d1590d74eb701be26c748c2cfe9cdb99bb80b4375fff0a16a2b87cb6900d4bc478c00110659b6d257e7cc905d5926b0b46fd706b2b48aa6edf921f6fd019b08837e3b276a3ce6b06c9dce24d8454d7a931613ba5d5f84c756505c7cc1b295fb07d58a42ffc95c006cd095a6c8140bc040960886ff67a7aeaf1a81853d79893edd77358a4f66df69606a6a3fb32e282ac1d5fb931f34bb03003ed838fabf41790d4e8426e17c36934f52951623fb6c5f20bd3708452e886d4fa4a9be7fed83539d40be3f3d742a2741705e559fe39f086535030efabdd595a6343c3f5469187497372dfcecb483cd3fac0c21b04e88cc9624a6cdc4496c230cd6d8e2029dc885021a178675a6092c4feee9a5dca4f054bd74696c2e3a13be8a72c7cf10ef5a2ee7d1c5 +Output = b8edeff96bbec958eaec96b440cde139842c53b029b9f9514b6dbeb7821964a1 + +Len = 96440 +Msg = 7967f9dd59a006d45b1f396d3ac5bfb22514e3516541d54d3f8baaf21ccca50ee74eb55eb7df3e47ae281cc6213ae6aaf86a6f01585f93d080693007f11472b3d2fe547692e56334cf04c51077a07b972ddee33aeed78102f4eefe7fda627102021fde0c34dafc05875c3c31851e06e18a1746e66dd2274b62c31e441fdb2b613e5a5c07e3e592219ed8871393dd10efd8bea0ec1e770e149490983c08a927394f57d551e82eacf0dc1fb09ce805202bde7afa3449efbdc350fc7251ddf4edf3febd51d18bded2da09dabfb6cebdbffc66f45ba63661bcc25fafb66ae5e306f51134d86f131d8d47ecb0ba488b2d74ca36d3cb2a2cf6947789526c6e699ff9a950667313ca12639f4e4aab3a687ec7fe18c052a875d6cc4c958d9a47b1504e7685f829a5f6e6de4af74f9974add840fed163f9085728eca74d074adc051c8ec37695030de0c086b0af688ddda26268332c63c7321b157df277698315ad2e40faece30733d0c9e23a3e3d8e5f8f45c605f069c50e08c40694dc5a4edaf0acec82af8a3f000d297a4e6b75a4e1bba8e3dde41cf985685d0ff54483b21318bf1bc38733b35ae107d656ffb9d74c6fb44521d2256d7d810a207d778bb7a86b8e53253c866a2b928b7fb8c3b03086f391763b802b29df9df1c2943c1c658132421f10952a6c5969dffcde7c03b6788f66fe91b6d73394023a7ca25cdbc587b40204ec5cc8c1cdae28d52ef559720a8b5b638d3ed19583f80ed70fa072dea03bf78c2157077270a9919312f55b6a252e9a2f95dfc05793c9955a43cd89b8b50d483e174f908529a23fbdf143b1a8afc148e913604c7faebbf68da7aec75caf731ea2360b0a05dfe05ddb32a80234928c901a6e8a1e17bb185af8a10ad5d174b5a141e7551ef77cac11753fecf614b4d798490e25de26a126e8249aa85a1fee1bf8a290f37465e74e83147fd73652ffea88fe5bf934b54a2ec998fb51ff4f03ed4c4e9baeb356080edd3f5a306af6590c89c2bdcdc6cb9d7724dc2acd6c689d72c4cb6e4e83d3c733447f38c13a06ac87c31b9c6a3f70824b227991e44872a3f389a3739b8ee30c07e25b81504c8cdfa15d94609945ace1f0ebf6965e3c76fdb8c25d105d798ebfd0df5b9da64b8fdaa37fb271208088a2afa6dba302ef7a93099882af5befdcc8d76307f58bdd1885d553ff37c79a0baed07bb11f990a894d2e3399b75e96d60f6495e8efc7aa2ec87efe021b58383eeb9b93fe72eb34a8136eba2a902e16837dbf9d85f4215bd98be7ab43839905274258164d03c016e1cd1356bea19318ecf82fa4666d629821b659804bd854a6d09b4e2c233ce0573b63632edc5455441769fdd214c052080f311aa5a1834fc641dfc6fb0a8413a0bfbda76b0c103b410eb9724e1657b954aae47243cdea530b81f408ae8943209973c32634d63e0eb8d9ced441f4985f24fbb7ab825877271d97c45c6b29e2d0e9615e2ab2c34496507e926bd237ed0c1e08930c89c99195a58e360a5a70c7eb399174f90c5a8b9bb207ec812a66bd87eddb5edc81a89f634b6b3159a5e85b393009eedc6b237be5857bc35c70096f99377c0264917e0b5ab6389f937119068177d3b51bf7a77c3b72e30145cda96d0aa5f165ece2d13c428ffd67fee98a318db5f7b0fed76df76721468d8469cd1ea2de4471bb9c2c9ae37dc071e232c34223937bc6cd34fe522f39ac4f616bfdea288b7d0c1be6148d04298ba589774ca30cb969e1cf35e0f75c631e2f24fbc1396653a22052e8137d6f3a65eb3adeaeba10cec8e84d039d4cb646a2151443a27322dfbd94a9cbb0d2ea59572b3c8f70f1f67ba1c28fc5bdbb048b43e97a68270025d6d55068b774f43e2e674dd8b31aaf8867fb59dda4c6ab10d906939e95d94937e1f33cd7d3e54c33609f395672345b8c3ade947fc84284a0d9f5fbc8f03eb41fa81e403e488d40909807d7fef3475fcb9e535bbc58b8ad7d32170a40a1e0aaa7d25e44e43df4391f7da610175fda220d396096de7db1906f8d74a64dd147949508bb3012dba0a0a6b884caebdd760c19b3102d2b5eb4943d9215b839a8f9d8b2f13eec104a1bdbeef0a9eec096a285b9b56809ec244921b1e801294a4d80e0c636ee6026b1ed54bfce1e65dfb2e6f5b3e7721068f6f89f913840dfc9e96412997ed4759c389c71e0faea159058cac4d0f0352be9fd4a76a629dbc4fea32bd8f272f611b909b29c1b1b15e81bb0d75ad879b943b560c60fb864d9bf30a45f999bb95e1dc649b73c36d9a8c5c7e394209329073e1548f5d08f9042b7a81387bc5afc14820b2331b8fadeaa93dd198a7cc9a9260651dd5d22f2561f96af192cabf8e31e26d0bdaa7a2fcf233ca5793fd741a01e81b146886eaa5e77438bded5cd3d1586f35d3fa9e99d571ba7672c3d9ac4b7f8997dacfe1a804f52a684890a8af03b54d0f9d2b76d0b1c9bbc6b5a0c2b1a96bb35fc36459039d2b8a7e443544adbfc8ea4ee9e5b6e43c6aa63f82932f40be46f3c770de736a08eb22ef1333975c4013e5982ca1d540bfe518458c4395b5f491c9836586c767c2c4723f582437374f26bd6fe7e85882c6c9707d151a9cadd6fcb3081405ab79453806e3657faadb3761e03aae41c706eb784d4acf908a84efb84eca0ed3b60b1ac63f7fddbe58948355ec8cd216975988720d431e3e05d7a984db4da8696db9bdefba791358c70fdd8330db060f4ff748674eda738b85129ec30707934f48f1a924d643c8e77cb9807a5ba9cc74677c85a8708581f19ec239f3408c31edce4f6706317440e2f00e269bdb7d77ee6435dab610e8ac18a962f5a6164016dd642f61f44a9f2dc3b79a3a782eca9ae5ccdfb220be5864593b717c5c06d7a486a11e448f8008e21239ca368fd425c7f317c69668c7794d4bcb7a187580978d821b986928806600470d3a955349f3718ecb77120ecaafb968efe96483221414482a2a4a6fba1afaea9857f1631ed81a215e8d9f8346805b290f4bdb2549e1eb51635082b59bbc5475619eb52fc12834435766a956b98f8514b01e06bc866575363d879caaa3be8f6fff9b6b19bf88527d3c9eca099221d9a458ec51b96633445f3f4be2bf70961e32d8ca8dd1885ce72774927c0c6edbcb60801356bc47bfdb44ef2a0f5470d7837673a887b7aa3a84ea95ee39efbe31dcc1cc4f8025c98f9c7fa38e7d1a32f741a366b2036ca3959e3f270e7e240eb8705073dd68a65a171a781305b6612579fb3218736b30f2e2a58d9e7fc339bed448953d697a8e87ead7b6b41c35d9c6d3f2bb0f6939d516c63d6e72bea3916d29a7f87f60206ec17f56c3ed2e95d49599da96b21ff9a99da4c84a2a4799db880d20f2c04e14c795491a2844d930f22030156db6e4152ee602d8b94ba700789e03363c96afa22971dc844c4198a1a2e53b25a8746236f58e64d1245d6991e92da07a0e68f152e4f5ae47b879e96287632fadcf7126b96df54f5423c5eba8bda5794f10cdbfc1ba8f32b6e54447ede00861f04b438e2718c926d4301bc9cf6693d247cc1b6768fabd0e646b3730ce6d6396afb452250a86689fd3c1c5607054876fd6990884a325fd95c2a2c9306e8003123e932367de3751fed551696c3637ee867e1feb941aeccf7d743480c358b845892f604de30c9c23d84b875e397b6137dac0c95b123a8fa109db88e4661786c94ff484281330254cc0b8ac4a44ca7101b1311dcd9b8cbf20df7b287aa5257c0cfb10a74864c3734b2caf68843aadd7cace3185b97c7bcbbd72d59b99ecfcf86f0f1622357441068d909214b2779015f17654b9b541a265d5487d4ae8ba288c8df0778d65be234fa27103694b881bac244e1d0237977afe16e4d4ceeda912b8d843b7515faf04cf186265bec5e8ab1ac1b9ecf7b6ca7ff4e0cc6e8fff16560dec7d481689c34ff56dd95b8da815b8d2584e6712c9772bfac163bd16b3ae5cec2901cc358a978f63013a377e689bdf73567ffddbd619f970373f42eba1bdb1e41c759646c8982d8871299bd98de7897e5ac323cb631f82e5c0d392872fe0df76354d48b2da51a4e64c1bfb579e854143c3bc7b6a071432dbecb52e71d4a4502311fd56121630a00ce085c841010191742fc06720288493b32958692426749e7b210a40ed22c1995cdcfb955e5bc8e4700d8379964ded201bf531f526abde14dee1088b9c8690eb669fe1f4e81557c4d7db5a1524edba6276ded634e1cb4d7dcee05cb8b8980b20aab7ed4976b44abd0c27d8dc649e78c54444c9bafe0b4f23db9d9b3ab9fdbcd3a9a3520592bf0e379d516431ddc6a4d304d560e9c3e25f9185772894192e027ed3e0c4dbc4ac0ecf0c06a0b7e90ccb1648ff4063ebf6fb514d1ba9477e8f987cca0eba2e74f1e8ddc8b5f2d11ec758098120fc9bceafaeeda2e971e732b8db67ec7bb6603c27190e53cdff00078cd8273df8da03f482e6b1276f36d5de2037dacbb62e2372c20bbb4ddd19e70bc3d7f9efd58d3ef5f74f663b2b5ca5e96c5a2fe85ca5eac1495d7f1751c7d8b412b3ec17456aaf3ba325575e9c57d9ece3aed1b2cd921890237ab440daad6798e0088834d716d74ded151f1230bce4412ca28acb87975f77e6e0153ac62f0622b25258c8f8f639955bab27f686e0578eadd19583291a01e11a29fc95a2c156da100dd85429ad58ba65440c6c1d96964dfdb8ac8a109eb25423b4e4c1ff08bc277fb78166f790b715906c36f3531432d782d41a40dc99e359aa1d68404969b8a357dbde61d144d74f63a0221cd5fdbfe3e3906937fb80175a03dff1b10078ded64ed759e5453e3bc0657c685904b79fdb868a33dfdc05c0edc7591b64c29a9128bb568e51c1e147011c5d74386dd65526e22de4b92c8f627d6b25300bee53722323c5e647e5d2ab99debfd02b7fee626e8d0816543b918e9175d0e9e70247e44e1ea1fc381f86bbe3433006a2c9446a1afd852321a790a7c26dc8a3b6accc7a1212772a92ed720a85d04a724ec88cbea4aa41a5b1ef114078b998f7db2c65a60795b21be8be3909ea1c6bbd8ffc3be2a419aa08757097eb2cffae50c52fb7fab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8fa77969539152527ea79249ae187b1dc55096be4acc40aa0d2d64a90a8b8aba900b114da3b4b8b29e7e64d21dac1d1d195c59c3555d7d27f940a1917db29322c9091f0e9b1c8e0528586df2061090e849155659ed872d8a74ea5943cf7cf2cb82c62c140472dc32645c371132ecdc689da215e9d9f259bbc4531629c893ae9c036dbfc6a55da8219ab349986ae70a835d2c1ed9e24709a131a25faa309ccf7c9324618e4886fcba12842bed74a92023d0dafa93d02e43260500bd2ece425e557c1399d3b394dfe513f8667a18db292f3fd5307d6b4e11318694b71d6b2a620e0464effeaf305a8ae73781a620252a8ff24448017a507aabfe87d5e0cfffe38f743ceb7504027391d46804d8522e2d2b3150ca86c7db877ab3009fddc267eac014c616a17ab134e223b4777a789f39eb44213f7418983e87ee289e7d0c0a7d892b27f7ead9e6a5651c4263f3581f57b772de2f32362fa9baf62659287492a7d2038a17b9e848cd03063b50abbb578e7705b0202ae947d0fb15235847c4a46d83e215fc747080b4a22bc6c40a68eee61343be9cc3f888b93391472440c2ebd98411f030853935622bd10c4978298d677375312a652d9c6e48b3b9447d370cf2bdd8443b520b10e0874134665dc4dc1a7fe23053784e28f724c3a24064eab2c0167e39a345aeb9359cc367a42102820620d4e49d6424d75aad0929a15fa5834c784df6f2c4e9d769549ecd892cab28333c91749292774ea1cdcc77eed52e279dc98ba4af39861285961c8d9fe68775aabc6209ba680f38d46b56b3af2e4e47bbf3816a630b4b148f4983d06eb85d1272898fcb9c4fb33bf96fed066dd1cd8bafdc777195a2018292571cbd7d08f7a6938960e1c0b02dff1ac0da98ae28739a806eb4e0cd66700793a72f7d543f1bda16a61d74aef1432d3e486590fd9a081d368f82e094bf5f499c2104377bc6925602c70dabef7cbe6d6eeed517df8f53bbda292799701597f0b4ade2147b0324c15fd479af0ab76566b19a7454de6f1d1d7323ec32ecd0e1a5e433133cda6098c436b4a9a7870c02c10f34887081a32eea096519d48d580310339bddd62344b8068e51e5bcefe25b2590a55a9250914ecba5d7f6a6dd15c5d8a9cd890adb174a306f927516c8a03a3b3dd332e3d4a245684d61cbd16370f1a54eb25e028c4017e9e15fa0dc9db065ab1da7588b943eda680cebdf7ca7cf4d212b30a6e3bd29e7daeda0b037f379a41c380913b119ced774e75d7bd0329ba3f24730a7d8f73982aa9a3deb4e5463c13797e2ac7de9b80233e89fe7f58b3db9c0aa9bab06c1d8af02f11f9a4a47d682a341186b188e66234e16996b123a1b57345d57f898a36e388af82c0452553ab1083e9598aa903e046c79344f4fc89f47f5674ed6b42563e3e9b94d738f04f71410973f7b5a75aa6c361a56dad5bc3050acd0668f83d02079c83c6b2d28df75746153005c51c711225300e855cc9e353901a1896a2c2b0bc1ce876c7b466b1d98a37abf82b70ddbef6c33d3085cf718cb9be19eaed7bf8d85a4a43aa51132554a7f156436b3d06f9b29bcfd3bab4d40ce23988da4ae120f8bf19bbbf3b0bb86509c2bd6c06d9737ee31a25036e42b150a40ce3e94d6aef79c5e72d9ad4c8e1973a4c4ff680eea9ab02dedb3402d16ff469b8c98c57a1bae8093337a1a0c34747b3ce8c676be5100a8c4a60da3ae98664cdcd98581c0df9dff37e68883193401300ea01331a455d19f9fd448a59138b2e2aabeed0ed0842be1f291ea309a16275ac2f3cee2e97d765d667f4b8ffb7f4bd1ad42b6b5d392bfed6e3e8869b8634dc000eae0d1b45255aac0affea916f39ae08e6dc9bef18fc3ec50f44a769ba2dd2b6f8c2f462e5bd74e556d493a0a1e05d9f5470e7151059ea743bc189e6a5b3e63b7e1a4897f206410cec0148cff88f58289d96d161c7bb8e3ed9dda2b4e16d83081f127e1ce2965b9d3b147e51cb7d3a5f32acff4797a796bf69f78636e5c135a75c5a19843ff40110b47ca8e89350508db421a549189490607cada8ff3b457a83a64f8f408295fe01f8a85cf6f8af574e72a387e8c30907bc827e9f604a70ce379d6163e422f28eeb68261eff63c09b0c2e90fba91f7b693e0bd8be2cabc9ad3d924e1bd1c9a05037938443845d5ab8612878950c8672316f894a9996c7b6940035543bbbcf05de610b318f085dd42bc800d8d875a073fccb7b52c64136ce1f29e71237e4abc986022fbc360ddda361bb38202a96f5f737cc627fa8be7186bb05381684fef831d3957192fd07656ee6b54eed2fc2ef825f0ccf2fd560f066d44ca8bfc76d2cf56395914428777d8d4740a5ae4c9c059bfee721f1b0db4be5174aa9ac63b1d27aa27cdf4e6cf09e94ffd7ecd20574d0aa73f60b53ef7fdc97d099bb3aee6f51481cd5ec202ee5410c7d0574f6ef0fc9447ab3dbc4d5d13ae5bcb47e09cbe841d44f1b2857d2d7fd5a4b33ee8b6daf57e05f9b13d30871df551815328780cf2ca595c714541d4b3c04f6fdba1e05e61504bf3663ecfbd4427c9f56a942a1867a329d6440a352b175a2eccd581d4c46893805f01ca1247b0cb2aed322a9b2a0a311c27d3dd417ad42aaa91d5907b5431ce0b062de6e16c8869dc3253f4b18a03fb9b16c5c54d0811b82c8882d7bb56e58956b0909c2476f589478c76fa55807b890c6cc2cb411ef78d1a77855d7d11ab4dc824d2f3c3ab1eb4d3c2434370539a64d8f174f60504ae30dd27852baaceaca0c92c9cf4a6542c71e89e61d7e84c8713686d804e82025d29de602b4728d50f0dc18e96a5b5b84649eee679bea7b36b1e23a891db9e602c0184e91fbbe16efd1918136710d92195c34d63320093d06d0e70694da64265443f368c088fbbe19e4e3783b73df8d540676ddd35a696eab66ab97a5cb6575acd6b5e0f8ec9a075193384a63032fb1d70bdb61c29b8974a6dba65a16713c387ee0e633b5a7377739750684478f9cb414d4e91e7b73c7d39bb87dca716c67034d0afadd8149428233f2e4c24379a4e89fea16407873c32fdc857855410d644a99bd6a4ae64359acd3a54960f161b6e3dac3e984540bf9ddebbb5ca6ffe4b292d760bb084f05db7b9af4ab0cdbc8612a47eae96678acea626bc2612c2872e060a89d739246314662fc7990026d3e222079d78c5350f70351bf534c6135486c286fdc1a75463628f76aac8f0e2003885ae30248c7974ad32078b664c2b0c5b47eafa5262dd98501ad77f5fe6c8ed8f25e1603b55f9648d8530a9440dd258b57c7ea710d287ace5f09a6ee74ca142efe9e85544877e851917df755771cfe09d49892d855f19442af707a1e78935a661b90a36c789d07f58ce5b1726e1ec4b1a9655b439725d0b2518653de7054cc2eb7d912b4cc5b7fb5393eeb83ac3ef42354b2863b37119a6e03cfe6d6f28ae3e981dc35e5ca2fba1104fde801980a16cf5514b627bc616c063491857085a22c16d82e9f47e88631899e874964d81ca72628e06da19d71cffb429fc23390372f374924a183bdfb909f648f8235e2d32fb84eba0f3150ef30bddc2f2fa8b8b647eb43630f01a10c31b2d55b24ed2eba0b0645063d4f8d2628de6fe4104855ac1073557e1a4a3814af748f9e9403325de3809a695a64a8a322dd5c33368afd8503900dba65d5e9b15444e1ae7200842b23d7bd37f9091a02b92b4fb0e4f916edbb91cacc743d4c6eeab48a2f217daaae564c3c169bb577b15658a8d1be0b482283291b08c7d8c6b9bd43d78534d30c43f57e8569a4e2383b84d6061a2449f7e014a68d13d340ef0e566358452e992fa87bef27c5c727e20dcf33d5feba2dac82ca9a8f5218fe3bf940a39ae361488b38740ea1af54fefba48fe296f3d23eeca71f8590681b7923e70674fde49f59b580586d718ae0cfeb9c5172d79e2ef62ea9adf83eba5d3a3d7402682fcd1b5524fca38c15dcfd233851be64f65202dbe926d052f8cd50c9ff1ceeed7f0177b36019efdb0d3a0c817861212991b40058b29b41365d1598a0df3e06858a26370ced6487dad61691731257144138389a04f1735b02ba2787475473f3b0cfbfdbba2379261bfef71e609c80223c486452695c3b9858be77cf25f54b310fbe12c863a8a4251ef66015e28d98b58b40ababfe297073a8c88ab2e5482048f2e3d39f61f3821f444ac61a715bed58aebf83291c0fae976366d4e4ddb39f95facf86c35d8aaf7f3c6aad9e858e1a8627239f3c7b65425e1927fac7a7de15b297df80d6bed478cf57d48b1497aa8cc8850b345874d0e8424a7a40fdbc1e2f294aa2764bfe676a7a3726f30f3027d08a38d5072f90b8ecee77ec5bd982fa586493a6cb95a4ca112a5ac059f0e78c7255b32f7c1477b3dcbd11dcbffda4f90dfef35ae5364a72f93a233f346c165edec5a459079962283428b8e9c1dc9aa0cc42fa4d77b047d88f34310226d3550592245d102e3118ac9fdbdd9225f8cc782ffb18ece79625814f92f4a795c92c17292c7db3747dd3a75c20e04430d4c2e58561cfb7b95a7bf3a6f0ee9df5aff40a003866d16ed25baf15a2619e96e3068f89219f3c617fb3b651b8af63eb1a4564b3c2a8e871c0f93a38dae1ffbcb61fcc87b4f7f97468553fac749777da7aa8adb065c47721dc34cf5224e1f616c067232d867a6d66b6e8f6239f37784853965b829c49fbf396a6d4ee3ad20039948539c7308716bcedd77053a31fb3b93786e4b6d099e57b52c7e1596742ac99a4f267012dbe63eb7fb944b91ab0d8a18902dfa9ad34c20dc3008b4044a459bb64273157e8710386ef06d9d0808b4595ea92a2e77ccb203f59f9392f5d87a613749c3f37fb5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731c6d003638e9c72dc0d9c3c65fc7401710de217487b00c664e5c3b81b5cc8ab7fbb5069833689fa5f360f183565b2e3f4047ad67d85e8fa04567f59b9fb83b6a85f017bde6c0ff3ced955b9f343cc71b680c6b591302f52759412b569a45ea0755beb22be56b8c5f29d7709e6c14b117e27d09dcea35c387e4884b3737fe2d1ab571644691c0bd8932b7cef5804b62d15a19f747a07f713e91ade3a1eb596b215fa8bca28e79095792a6c528f37952c44973b24de83884b7cb12734b46e03a97aed519d43dfd0626b434f1cd4807176d1b1ad934240984800b667887bd1af1fa1d870a3022b52a8321e2e346f07d0738496fcabed65ae713cd0a61ebc07247d5361f1c6adf49ed096621082a8f53d8b27ef3052291b5330faa8eddebe37ea295833dbed8b613d405fb8feeec7723d26806352723c8a0eec00e643b0cb8a878d78f43600e59bb66255c7ff6013a55aac599b68f26fd9670e1731b17c2928850f7b4d0ae603c9919d40381bc0d5b71b85783e7dba0a31e6fc07313e2a21386c1928e560892d145758e7b25af656d00819a5f596b255b9141f988ff2a2fbe3c21248653fd0aba48ffd13dec5eadb16aad0aa68bdc2989a78df92f3d5ccff501162a374b0a3c4a0c1f38c636385afb488134e3ef9d21afb9ba5bc04f09075a8e07001bbbaeac23076a21aeb3dad19d02b48582053ca240503d7df6b4ad7a412b8a62ae1658deb7e3472851b594b609319d991b5d192fedf3adfc3d0eb87d5b7206be58fb97588af86cb949dc148cd24dc2cc1a67e12f0b3c82330d9dc8a50bea027fc6dbf88e0eef11511197d8aa8abfcabb09a5f3342a6330dee3124c65d50c04335227eaf3d61ffb8c23693fb3952ffbc253a7edb3be20503c47ecb25449509255957fed3e530371c6f9d0d82c73f6fc9e92ee2f3248fc56f7c69da8e4cb4023630b348da218421a9e2f6f2069c9ad339c51d936445d4fcb8dc9958e8bed634de81df63ae398546c8e2e84b71fe8cb4747eaf9a14e6da3146adb74d1de222258616825735755a2ddf361b1faa363d99e2df8dfeed4fc9ec81b66ac21400c15f94b5452d591d2c5f58a73876998bd40aebaf5fc7d6c8c8b6d1c15bbdb560da6a7227d0ec0078226299fde7592647798ff7b5ccfdb698ff159e943149e84a96cc8633ca9c14cf65c00c00cfce39b056b16eba7da97708979350f9956b95051d0f3aa3dc467c6a1c00177799e0ba1090f7b8861ad30060b8b84fb52f2da4da96baf53eadf1209170ab242cec9491ad52ea3de14a8139e8890b0393a696fd1129561ecbe6a5e88c89489ae571f4a6d0c2106593b5bd0ae73314d55aa3ae89f2006a1f132e6abca28e5fe16bd007e1c008f49963048e5ba7dd5b2bd1cd7e2ec4407e5fde2e49841da7796186b0d52bc74d1b3f1bdffd146eb0696ec2cd0dd5d1141b46f38d492843fe1d81fdb9676a2bb90fc181ed101d85d4c507f34a64675fa2c83c1cf473905db8d3ac9a94c488357357855ed7d15e3470f75c2ced89cab7120da91f0bcda5b200234723e9f46b2da47bf5794448c0c2ad88d7375e86e8218d72f5c579624d8cfc96bb615f00fd5b7303779cdd7c2979b2ffdfdb4463a7e43b8088d6e7377131d4b3701c9fef24060978758d4a75829fa8e4dbdf4726f14a43becb1afc56faeab102ce1c51c9ca788d625615323bb47db6c0350c10d9ad99cdb4245961c6ceffbb0c3e281c97d6f7284782fc3ed7a65b0519542a4783c31a03ebfc5abd8fd7b81958260aa86030cc02b1610a15503f81bc7aa001942d1a150beabce6b9bafb5df46fef889e2cc03f42275b075fae6936046881589dde9cd20d39cac5fd4d243573d7026ba6036e971132d8bac6f90bc3056d5ff80d9e3098326190bf30533989bf1ac57a67ee221e965940ecf03a0c70e610a2aa8a75beb1a1e9749bfad122a1ffbfa27f8af4c41afa24fb6585795685d0dab234bc6c2f638359e02305d1c7c55c4f0040b61e3cd4641b71ed2ebcd04aea51f85e4d8a69f7003a3b1df65a103dfe51478794737294fdc70a4c930d62075dffdaf2e2d855b53f13ed527875e5500c4dde1accfb4ea2ecaf2f495b73f403506cc1b6265cdbe4696c5e8a31292e48aecc2fc105beb9455a5b46ae2ef76e87ec1e1674be20e4cda5cdf68dc97ed36b0e55a146e7c599c66f54b941b69fb8db589f3ff2552c56b91cbf1d22e97cbc0251709c701c17d86d5221eecb9875bb47bd77a6f991861beef6c93b13392cd154a2a5880649bc5c822c4a4f137f815d13432cb1501a3819b55a74b8266095fbab277dced119bd0f4d245842e311ca87861148cac1994a3a557047fc2407bf204d087fd4993121d71663d23101f65822e950535812b6c2641861ca6fd4d5b329836e3403253cf09e2411408336d733148427d3c30c18aa8144558579007378ff958122c33fe0324bc0552aa04a5c64479fbf527277680978227301836e881688cb68d37dadc5f0c6325719f0052cf2a1824057cf1b4de831fae4c5f3e7bd96ae6d4ccf97389432f7c24095db2ff0e50c75d16b41bf704e9414d0593333baff58c2549c7ba8f5fec6b83824c98f4f456fbf9a15302d784389b75e46a91a26596e13a9c48fc58f5e1b5b665022eef21bb1a9c4dd042b0ed0f82cb613bf64a9add7a872cf3d570b59def4f3a04e14806ebc7b774b2682dafbc9bc0148dcd8ec027dc9d843ec2510f7f7cb069cb5c9a247777ddae8fcfa83cee4ac676e6740976047be03aa03f847414e28c8cdbfd500adcaf6163bef5ab25131470f0cca6252cf1dce1a8bec98583ecb5361bad5ff41a89d3052cc686c0e8b99d422aa6c06c358e743456f0ecdeaf75793f8ec5d100e40d871b724cdf64084029ac7d0b5f695028d63aeddd15fa572d832b5e9c1d10e7e64026dca87c1ef4456e227070df96ed6f8777a5d9d1533b93876c13b6707ea69272b9b46ff95c4d47bf469d6dcd6f7da0ec6d477dab839d45da84469b97d490a0a336a219c39673b5b18b7c68a56d718b89ae2b4f01062c9310f65fc1dfad467f56401e2c5777f81dc96365e7f41b698df39cc9b48e553a29af54d7bfd45338ad1048911e415b4afe8b51026245f3e6169ecbbb548ffb76782a0246ec0270d7b845c293760dcb0cb66bf6da6df77157a40fbd7885926341ed059115ece680a40f8b40adba19418e03dfa74671953e3ee4aae479ee42172d16c683cd28fd0d3e3135453850f0597f357af4ef03bb951c2714d347f4fb91a873d15ce526b26106cbf832dbd12f6d30e9b2522c9ab7206009b1fc5b103b6d4492da8ef66ca3468e1e38ac00c12317438f1a6197bd346abb0b26d23be69e0471e2368c69714c0844c67b133f9777c237a41785b8d1afce8d89d7f752ee8fe1c0e089f7c6cb1930cb43240ae0da9a088db73e40f87e75e6482449de487e7dafb21c293386e0975a7222e7f5bce10654a6370325ef2a432c8b58f0f9853d03a8a603a8c2323842efd9d42b660c61492111a1eaa6f54b841bb7a661cb8190ae774d258d465158b85b72d562ce57d1ef1870966946b388b53e6d8b10e6c62fda95f7f05b225cc84437dda532a137a94485237303779238530f1d7582bdeb51147f470276d8bcfd930f6ad1ff81145e0601aac65dcc29f0e9f837f43bc339aae8bdaaca74ec1a6f014cbada3de086668018871ebcb6d338e6944d95b0896993c3bb93b6e9decd933b7a4e3c724206596f2438dac4ca3686d56deec86592d3b23203b2663a237f008e12755741180cbd1fdf4088fa78cc4132ef6c0adf52007cb0206746da4c874d959ff0d90ee512080e843eb7b234fd1e8b9375eb92598869da9c22d76edc7ed0de8d2130403baea0d7cd73d5a09151755bf46cd9031bd3effdc185a65c35de10c56496db998e4b3df81590613a1051dc007ce151c61b6b95a65af02226fb2da3e6b0b2596f5f7025ebf704e8e33486b925a753f43fdac7f170a312d9438ed5f0beec14382621a60f2fec51eb30705893480e352ef4cc6169c9443e3a56836f9dba912cd672675540305007d6a6565000c41c15607972d0853ca8f2d3c46b72e1662a7cd2c8a3166f99dc8749b9490568465b754732608dda276bd124119958924e2274ab9d6761e3c8ec50a2eddad1603b36c521b41801bf35e759b9d2afb8f6df13b4df6526b0534a0a0470b88e4c5f0f4895be730bd4cad4b5ecf36c10fca5a568bddcb4539a24a9a01331add5fedb5f0b574bf3ae6f7380620b6f525f9c151dbbe0220f9077de4468fd744234315b96f99a78ba923a5fc546458c2a0e2fcbb467cc4ddb4fe1f6c6af33a6fa4bbc66439ddfb33c39edd6100d2be8678f20401606f2ceabf460f48cfd56484a6ec871e1528799fd17c27cfd011ef27f6506089f13d412f6206d5e23ddb5e6c7201e04fcd2227b71ae80bae8ecaf38f622598bdc18e0c94e467faa07cb02f0d5020595f27740f64e808126600a4d3a404983504970b93028f9005ec53fadf5187727bb7ecc6398c8104c35fef48965023d2bec53d5be05fa9a97e2d8b62771f611ecdbde4bfab182e05a701225d447a09fabb6a7927fb957bdceecaec8ffe5e244cd8dad6086ff1373344b5638ce60afc39b45a1417ea8a4d4fdc2d3e2a7cf8192622768b498dfde4b525e1787d82e745b732fdd6d2b728672ad0bd49dafad488d135facc290b267db4cfef2ad723fb2c9bbcbb86016a55109652e2d5487edab97899cc5f50f3534957cc454142ce2df80edbfcee4b09fb91bbeb04a91b13f2f341d4560c674d6c91c7a24d85688d65f3371628d4599e0132c0228b8efcbe04805470ff9d161f589d2bdc6dbeee678b633ff5a701d2304f3bcd80e04c9389f8a6daf52ed8047301b5acff0fb37f6588914d00e13d5fc8cdf40c8c69ab877bb6aefbe94d87da504e2172959a2dc18d42c58ac03f4fa86d63a5a3ce8f73819c27e0ded6c3703fbf2728a42676f45ce9a2471dbc27015427f995baceba6b28f53183ac43f85cdcc674146a380ad0f981905e2f7c02190cfe770d7a15535c258dbde18cb9541259701d2bed55c089405bf553e889396077fbc5550a2ac00e1f6db440a7bf3f5c5dc20bb65504ffe6d881b76e6f6a329e3e25cbb593956b49bf9bfce925dd210090c624fccace30b06afbc0f7eda7579b088572753ddfbad5ad217f242d9b62c79b8351477339b9af9dcff63689c90f1e7e21a0dc2f8f177990072338e7826a7926017bdd78cf03ab1a0743736c57c1f148033e33922de9fe1053d26f7c19a1ded84988070218766c88ab8ef5bdd9d7da0d3335c28d41982dd60f730f14e870bd5a62620d399b7ab990c1bf05a5d8b8a275b76bd149548ccc8a42ee61d6783de05354ef3744e0785cda53bdeb4cdbcc112a99caa8eeed2ca3d4f52badeb50710d6c2819cd4b6fd61b0d6872efd96a7beed1e1398fa395e27c5a2f113b7bf9750d4de5c61678d1febfd109c559750d2d0315959fcd90d3161dc7f88a52adf9b0a89d93e05bf18d5610d03d9e70474d4a169bbfe6abde2f2e4fc1587e3ba9da89a5053b4ee4de2b48d5af0ce57d78b13af00e66f571b53193daf058d33f98236ace2ce3f8f968333bd8197e82c82fc265591493b4673c62ad86feff72a4a25dbae9bb96c6e2b72e97dfb49c5e9995063418554d0bd49c49e41b905643b2ee0fe0bf5959a0e6f2a4c3b3286d5f38d2070df77b9ce202fc6fa16051632eb3a5c14618af366e4f411b291c1ef96eec0d4d59bc2b882137855a4a1ee6301cedeefc53bc64341863cd1d30e13e4974ff6e5e81300f1ab0bc5f94491dfac5f3a9f2466f72215b866bbe3140cc2f6457b71ec4eb1bcf5977d9b1a5042533289d2fd82a02038eb4a1ae3ce0c1a39a52015d45070145134e5fd5a313e5fe396300c7c92d743852464f766eb01b2f261c58380aad2a7582ff4efa5f68526fb57e06b9edd92ed7161a79097c2bb7387cc946929640cd75c4762d8e0a2bb5424f7f964c6bb596a8813608b08fd9fb864361b2b11148540b82bbe5dacfe5753dae7097ca6c4915753ca4e2b3cf4150e024ed83dea24b260064d45c26d41dfa297b58f379171e1404ee6cf15a63eb1f0fc774a36171d3ab1b11cb7cba415baccd5d4091a295bbf91e40941bed735fcedcd3fef982a7674b2632a82cdd3f28f3f3fd2f598c0da82d8bda264ab32926c70cf1946d896c906ee76e7153d8f60a3761022d3381a86e1913632965f5abc7706ac83ce7bde7d47c286e30dbf38d8be0e0154307c78e94247e84a654fb21ca33bd01004f6841beddafd9ecab762c335638de77bda7e6a2b593e4a4ff0db4b877cc43e88dd0a1d3f94458aeaba9fd89013104d33d69d821361b2c2b4e738b17a36037fb8a3d309d39b1937dc3d425154a93305f6f558e980edf03442974d072214184412cf916a303bd3161db3ecf5f972509223cb32d8fa5a412f5785aa84e5837d3c25c4b7a6dc02fdb62db3021f051b038248acae08e63350048236b3d35b00acc87037a8484d9d03889abf2434fe1fc646d43e3cd1eb059764512f0b7ae9181169707cf5e6fb468f1dd34cc5e04add136064d461cc6f4d71cf32d303e4263665afa52922db6bbbfad665c069a981ff756f6923bf60f9778995a5d75f8778e7f3fb9ca0b1ce2559c152d0ce71e929e356b45f80a838001049682880510d87a956edb5981507ae9c8d0392db8137a91551dfb69faeaa19a43ba749729acea906f8e68e63ef406e10c8793a5c2a0d9621d1621cc5454facbfcae377329f53736d7486958882e0ea42ee2415e4aee357856fbbf0861e814faf919d3024d1246d59344e599a8261b9af6884d3e9b25193bc877db0766cf769100a4512edd2b9fd66c29e490e606b42b2e22be2ffc6c0a133a307fb0ae30a8f6daf7b8de206acb9f2aa06e2589f362bf9c579d18b4eb926875ceb2eb803433934fb910fa5ff5519a95508c40db17acbe0ad0f1e00ccb38a242fa7da023029e +Output = 1cba6d8a936bdecb88eaa84d7fb7b30540c52dde1f2a5c26a6ddac2350c52f48 + +Len = 97536 +Msg = 4406fe91d7b9e515da3eea8e18c7c3e79fbd84f5c1b5c3075ea0fabf66412c2099e5cce7914eda1f03f04ff04260bbb804092d5d692153e139dbe2366dde3854f2f7418aa90a9711b24fede7eabaaddab2bbe0e3f3284fb65f78e797f931626fd7a3241f26d7631470c38b1c1abfe178313d663266b4feb156ddd18a0f22f299d0543f51119c8850c3b4f336d9569eb807f587f0caaca9f7a87468b6b9992ff9666f58c571414cec368aebde30672ec2be4d0ac627f798b3dca374c4fe7e63b8205d38264eadf8114ead3cbc25dbd7bfdeabb95b867f130b7bd4bc5be7b9d4fd8786a71ab1cad3e69585ae77c398e2d7ed795a58ee2b62270c6e09247a33caf121526c49a17f2794927b08b80f879731751eb66468e3cc3017d923c7c1d28fbc792a515d26b43a42cdf5142613903df6fd029528fb8f9a4e257cd2ebc47f6a8514741cfb48515619cf5c986ad69c1d4d0e8dbf4baf1815a8bdc1de388a23a2747c9996cd103fc1411f195d2b6091805f2f27fb768c648267670f0e581ba480b33802877b8564c3e145922b12ba59ac54e83812519b5c2cb2abcf2bf07fec4c67d016b7adafa9a621ca31c9c7ebdaea53c128cd83e3e85ab21267fdabbee14ebbcc3ced0a97f6b02a355d01f1fbfe8184435ff2b56cf1538f23404c2ee16dcdd5b5def33a44342b240e7d9938f3abbb10f546498e3f5d607067c2e024f07713dd13638fe6be495d37defb5a46dacbde1f5f439cb76316c97d64558133f1e666fc6c338ab60e1f8f892b3e0cc0b84533d80abfb1d7e002d6e0a462f603eea40f594ab6ab513b9d084580ae7751950102647d235197bf0bcfbeaf4f083dee98551e3454bc604daa129162b3629f7ae793eb40d5449f0718fb420b867f89faaa8270b375838a4d30f3955bb597526edf2d94dc3f5296c010a391426d238e19c2dd794e81ca784216f47bf21cdc137ad11987d8c74325f3dd0fd6dc6ebbf553c8ad618de057d134445d68b050fa8aa5a5a0edbcd7def3a76687375ff01165b0a43b50f8faf23e2ca176861bb9b95ef74308ee11d6eca9e49353dc555beb87393fcf6d18376567301786fdbdc0e037789399b15e2c35eeb24cbaee45161203f57fb0e0740077f34b8dd7f51ecb39bf317e9d5f2b40816b1a790595b88b4e80ed4d28d294bbef8b82ecaf95c4448a9b29ea5a1f017c98c723027df8352166a627927d6b01d296d6df1a570539919c7668c1191a664742abd6cf67404440241fad34f8d242ab347d6900176e051c37f6f7e92277e50946bf39c90e946d504e90871de130dfb09127288636f8ae4b22c3dd4cbd5f032b6daa57d6b91d39b9ada4bb3380ac6147747d2595fecabe88278622d032fa4a137f1535dfaf032fe4090153601c6f4fdaa6266713b50dbd3a0ce7cf5fc86f412a44a7ddcd396dd8372a4f568affa031d0f0cbf6eaa4e831c89a8debe0c9e770d8830956869f83ba1bd737cd9b6f6890911814db001384a49c99217e3a7b89608606e2a8f4296f5ff9da60bf7ab5eff285e6a81d3f4a089d1dd14a9157277e989a93dbdcfe1f564f37f974340f195ce2142430c48d909da5b30ab12a1e14eda07ef39cf88bc863103ffd183542e2d7e5a69853d9d42f6b43c60bfe54778cff0198eecc07856dbb2c77adf6c8fb5a8a85a30bba63fb6d99ffbe9dd8144ad5dc42524b130ed356892b49d3b6f822c79b4973460d6aea9350610488e7747f38abeb13d41b175dcbf3931c3500ca9f7232b97e0ef3f789e8b7f2fe94d47bfffd9585424f89290b1421ee579d7a485aa3785e2c2e1410c0b6f73915884731b06cc1974985084dc5783cc364d1cf793ca294bfe66c19c0774337beb12ee79f7bcd57a98f3e3e8a73406c9baa99a5652bb6af651292aa0c96d9a00a3b4c5dcc486781437c41d3e8fdb5d8fd91bfa5151028f1d61a666efe05be5aa419ab50c1008365ee7858706f4b1ca97181097690d440819c64b10e9dac3a8c14b513698489692b31eb49bd2845c0067fe241c0de5d46883f5a3a31f173975ee3764c501fcd61fc953ddd611ad4e818b01c2d2d0895822d4562cb8003431bf998c31dac99b3b300a1d6dc054ddedb078b97966315633c9938e62aa3da021085bb064f26fb22a65edd1f0e50ca4ce2fa99bc430a0daebbf39f4d20417e9abc29d5a6aa654c04833fd17e3beb9807451960f1fecbf960486403ff7502f8f1680e6d0bf612944092ca065c2a7dbff64c8d6a9f8d4ee0602b14eb64f1904ff15b5c0b9dfbd4dcbe1b280322a4af48003f7e3f2fb93aca96ac2adfe45c908b81df3a37c481542b666680503671293a0f651365074a37bfea13cf67e77dadb5883ad07ae84f398920bbfb760259929d0a0775669108efc844a72a0cd51d8dd4f0b5475b712e2cfed461c1fcec24927ad86dccca34bb07ec8cb164551604d8f0a098c763c7e6d5936aa1f96a5e99d3d863df3f17572a2a34aa79a4cb12fa3712802b7718523fdb4fcac3cb49bf81fabf92a5f6d7641efea6864713f431c7514078b680047a01e73bdc0f601f77a4b2374d061a91c25f2b4d0963d95bdc32d08470800aafa8f3a05d89cce077eecaa1497c4bd3ced9b55a2e19141d85790559e650d23ca042deafbfb74473d68bbb6ffc08bd481511e833539fa407fc7206976d00f43e5fb28abb694fbd3fc6b83ec559d7a1a2eed2bf5dc38459c0472dfe2f21682e39745ebf6d613a806fcedd1d4b66d24208e184038186ae7c70ee14b4cc0a71c85568b0456db15ed52977601ea82de1e7a3778f7c46a507543e798df214310109b9c10ee36261a5039547aa0a84b6edd79b375bf25527762b5371027eaf9d013a8e0ae263f477f654ddc823a88907dc5b17aa502d5514e247d75eda2146565aa3fbc8938bccfd380e268233c25d2a98bb3f56d7f4ef7435f1f1c67da38165f28c2985892492fa557a9bfc431ea827073f3cc55611cb505671c93353cc07d1b33d3fc82cf5ee7734e061beb9861304132f367f374a90af2d0f882cc46481a284fd661ae4c8867bbd88a350ffbf45cba3d2540ae068e69aa213563a383296e14c16c6021963050ed8b9873b7b94e7849e71bff0bb3377189dc45ae317ffef95f5ce8608338f11386dbd350697cca135ee549fb92e72e831066cbdb2c99333c6666ecfb49a14520264dad639ba2e1ae87ac31beba3efe4edc551a62cb6b60b7c873dc88fb6ba7273a559925c4b84fba42a065b1081701155c2bb3edb46301fc040859a20f0491694198290f8b494eb72e66488af30be1770e6f4ad46e2c81699798c6cefae88e86ba69cf9945c2793599627ca5118a19f4717431af5f04899101a9c67855940900335f1f4b9ab049b612295487da1e051e03eefad71da764f2c0bfbb2695a39b661afc7aaee09f5aa9272f72bbb3345d44544419041061ae1f534f17723173b018ffa6743bbdec068f56f949a933696d17e0f81e8eddefef6737ec8db3cfa0e19940019e6a8922e7f91ffb6be8e129cef9189f7e0fec8e937afcfc6083b6a79a778a724bb3e8d07946e0ba3bf332f1fd78899ea9dfb2ea24bb0113526a8cf465343d9d2eb04381352957ca4c40bf5e7306a26a44a6c77f2dc7e2a5b5c0c903bc4fe7d699e83f9195e0d3801f59dcdbba3401a6b0dd90ba18f220481d3ee1721a3b17b32fb4139e363de29027b711d64d8115c880ecb52770ea385eeb3d6cbbf9762bb752bc86137071136ef7e0f4eab76e5d44376cab43c010997ec234c14df491b247a56a0d7def2ad460f2500c95626c56ae36d5c99b70f5d21c14bd95a4760e3a088a24f05a0cdba43ab99cbf52d8fb706b21a0b69b1e1a60ab6540405c085c317e83a5f51444041140b02f839fa5ac690f6a65e8cf21fec3c1366567d1260c16fe344582594f248a177870fff832ef7f0f839dd6a4270379e20a8562b0598e891bfe9c0e8568cdad2375099ae91b4540e00f9116b697c901825438c7561d63d65c450210253b5fc8f92861eadec93e4d2551181f82eecfe92695f80c4edc1cad33ca202db5316b8c0d25124665c74af2541a7b6775a688af43522bb81720296c46d06ecdb1e57154d3dd83540a9ffbeed0ae43652b5973b26d1b7c412b840a91ea0a5666a7b1f1c1e1c44d8a39adb1814f9ef8bef07221911854423e187240ccb1ea6f8f03316d31bb6bc96f7f9b1c58056f13cb818b02c9b99f26154a756c6b12c322ad50ee5442d5569f5a58c28ce1b6911d213b0ea7dad54e805d5df7ddfba15718581d434773a3f737f131ce93acb7978d46a96781330ff4f97cbf94160cd1f8a905c4daa722bbd01bcaa709b117ad04dca249301f60ae24e9f9ebb4c50d194a6d3cf41f03fe9173b33d252e75c0fb4b93da96f2d2f25450ea6b5ee43b7b0baecd74077aee65b954a6cf4887522726ee4b461f2a6c56770b6337a5ad19d51da852318b88b6d687f56ef76dbec6b8b46f5b7b4e311c0baaa6fcf54c69c0b9c3b9840c0cc2fdefa1c8645c213f53f428314ce0a0c1929053d6101abfb4c0879274eb49e7b4340f8b503f53ef837a77f6f6b82cb336407306fb351e8c28a9dd0e4cf091c8d6f9c4992f58754515baa2a501f5a5f219a6222898e4771e1fed189bb42c6a1c95af9d7fb83836be808512b6f5bdf2e9e6442c5d2196caf204fac8cf4cf7494f8ad5f8938d572ea83e7a36a144597a1726ab000947d470a492536c1d7a09a5fe20fd7479014dc3beb9fa8cf87050c1e6453b3bb15e161eb222a7811acdac0694f2967f94d6847c5e8d968430fc4c60e3dc754de9f6e40b875047962baa86f1a07a31a87b5f83df0423decacf5aa4cdac5709a52784b6edb085b419e4a302ddad124f5da11ed4524c0723bf482de25e8c4f38dfde8a273baa3d8d9aba49a8511775402d8a86ee8c92b215d01fb89dca202fb35c83998d5bf10224873100ffc27bfdc486ac4a4ac474bf15bbdabd2f66f462e9b9bb1571e5016e296dcd6b71c847264cf79abb71c07e88b3c0ed9e2fdb65a34c65f9a07d5d77cc0ccd03db96c915893a0eba6cebd6fca9608decce079e104b6befa3acf83bb0b63f1368e3d74b43812c2aafd1119e8b8bbc714cdf5f0570d5c8c56dad8af648b740df5126dbd56db883d9cf8a9b7db7ca282982449ec803dcd375ac14ae13ac49a29f70e6fcee00a9e1aabdfbe1faedcf241521903f4c45bb2c7ed394ca2a57d7e4b23cd6b2fb88bfc60bef977dacba1540a2af44c918b31b245f98806780d80c87e61968a6948264917bc8ffd6f98936fe708fc4b493d8576b865f7a1eeda931fc799b0f303f7a52e478fe978667f79ecdfd47a29a74220a52819ce4589747f2b30b364d0852cce52f91e4f0f48e61c72fa76b60d3002cae89dfc5519d3430b95c098fa4678516b5e355109ea9b3745aa41d6f8206ee64ae720f8d44653b001057f2eba7f63cd42f901105e32ead9ba3bbbdc8889e8546a49b8f492f391212722765eeba3ce081ccc6743980fba3444cf7171ad7126b5f0b76ed9d84916ff4795ac11d7d9416ac07e6ed2fda895b0aa0b697bb100b172a5d8498dee7069b32705292dc44a455bf8b81ea5d62602b5b699ade3da5d10f1515551f91c8f12a3901bf69bfb1e61438a2280a56ab08aab2e21459271b1cb9cbcd58e05aacf9a39497f1a44c47c1e8a3f639bb8036fb3fadb4a376fbd236bdaad01099adf5788dc1cd89d0f668c0398df2478c7e78b080a85bd8d6108dc7712ee81c99e045064f3cfcf88e32b7898d5320c1dbb5f2b0e44f3224f52980477ae45fcd6fb61e1b7e82b0be2aa596565aaffc4947ab3774f0eef208329b7c2f3157b1a39973e330722f835b34b397df37d10f3e5ee2b9852d13f5f33ceab3e74af5884f95ce36ddf09fef404ae13e8c9b72b4216fd0fb69ff6ac886628bca181e4a3e21e3097b8c40504f1dcbb2fce6fc119593191a6f8bfe3fe4325213413a31c26dbb1fda43c407ed4d3435ad4566e01a2df3d9139873902fd3777a059bb61bfa718b8aa5020dadc344341734ca84de18d7d43e5108b95ba710d648e75c24335ef413e1fe48d1b87ede9dfeedded94c8a4da4a75732b5c72216cf4d1ce4fd1e6c6fd4844a7aa89e8c76c24b3d04dcc1ead9f5a29aa8f1594d6fd3052ac8b943bf3f4e001e3a0ae65897519aa6def7c4a71737be9fce0488758681ff9599e139a40cf0d3ede961267fdabc4bcfbfc2cb6b8ffb69db3467db36f54c9af1cafd66c7336d8e3e2b53b57e9b72fcfc49b64c94aea122d15e83d80e369375a3ce6661a55d047d83524b39b164062cc0ef5adebeedd98816bef0f567b5070e3026c4a0aae4665051f0c029d4cef639c22328e846e804f81fc827c9d00b17c33b6690aa6463f3752ea95aec3526c3c25487990fc907a3f1612ca0bbd3b336431a0042f55e464c7a8dce64177f25ef551c7f239bc1d747026f3ef441ef17f2fc40766407e525d1ced3f284320f26d9407e9c6142adc15eb9ae818af28ed3de5d635b7c58b56d13e0b59823a251b42232ff41da6af9706b75b396dd544f6148f4e701e47e3b96936e8731db0f03585a9b0311e79b414eedc502e173dd8d3ac341301c34dee42cc0b6ed4212ce808de2f74e8f2149f1c7663600f3e6f4e4daedc0f30cf5f14bba2c583c6b537755bf3bc6261c0ffd9774653752309f40c2cc28f29446a05bdea956d118f0158fff86f5862e3b1c3cbed05b476b3a1537c388f564987bbc851994b09ff782e17eea5f80b5cb7ede7dc465b8e4a072e140438be38573feb2f388e6ca435c964fcab2b36de38269bf37349f2eadb67d7c00ef6f63e3cb521c3da92a1439bcaca909c52d3d8de76e46ffac06fcf101bc4de0138e06fde31860aa06c92f019c3895a2ae1740237efefe4d8717d46d16a1ef645c724d326fa428ef0e6e6b297fbc8e2bda2c36229dbe5da7524c256069e0d90426b6972fc5a7cd733c64592fdbbb0b1be5b68039d80edd739a3e60797fdb83560eb575549975d6bd2d55996334b694e93d50bea7c2830658cb592616dd0486c07119783f3fa0cd433dbc7c821f31a41a6d85321ac19d50bd6216e6d6e5ee4be9fa3d104e4cbb19ac0a03a30b0fbec135e2ce8af179b05527fb0213283f1b5b2906aace102527643e0eb58d5c6aa064b2298739ca3f8e8c0ef2a54b895cfe3d0422ed12137d78159fa85c9bf4c4990715ce59cf03a76a5df8e57ae088a4195a01db7e8cc6aa1fa64783736f62b20b40e73db0ab4c35f6537c5fed8294c8ff3ab8acc98eb83f90aeac1c74783497798a9cf4266f026f94f4efae97923c1012678ef3789846927d9753dfda36d909664cad8e257aa4b8d8cae96de3affd3df568fb5be64a206738e8c54a3f3bce7c441f9f68386ec1a6243df02a6c3c46970aa79452ad14a412451b86e7fde78354b57bf91ec9abd7bc29d67a509bb7a6afd4bbd0542778602844c7ff35b0daa6471cda311e63c2656f3c2d0e6ceca2ac0ce61e35fd0ff5d31d9a46c4bfd275a5b7fcb2ede39142d933ed9a22fbf99db522b1374ba9a10d8b76c8404de2dd58e02bc7be660adc9dd1aeb0a63e7a2d095085c89f77e6a53fd7a8512d115b5bf5041720355ff09043bd3427f9d75401760caa8ecf4120670d6636c765a565c8ca700e78b0324176c51a68b5dd743611445805964f3e0360e6b5a68d9270ae9e59c27653c77359daa267c0dcf9ab8cc724b12b5187d4fc4d5c248c263c19a2571359e323d399c6465c23b11fb6d3c4bd77b68053119c7766fe513c33baf6cd8d97c4d96b7d1bf34462ecddf09d837a4ecdb6b90d650b01681dca5b08a79eac9c4791ddbd2c808d5f57118bf226311a0587601a030a9736ab6ade4d477a87bc2db33f447b5a4de0e199306f96e973307c351137b67ac763bb362ba762bc38689c6b2bc2489f0a8a85a9d7ed414fb03a1d7768a6aa2e1225023030eddcd5275e82cfe5bb87531d06c629667993c18ea3639ec4cb509d1df73ac96c75286ddafa4b520bb4ca2f1bd1fd686ab911074518d94bb43a4c503166af625cf1d7eed9c880a1fc22738b7d78c61753101b5999e6f8eec557ffeff2dfeaab70d86dc09a45bd3035a935e0c867aa96ce134560f3ba4cf856c8ddb4e8ef7705569d5c9ba2fe4b7d46ad63c7732b05672a371195c8ef400916f1785779f1def06cb516c87a5ec5f9bd939fb8043f711905fff260a0127c91546652402ca38d0d21b43eef86e3b73609104c3af211782cdfd27a6a1fa04d11bd9bfdf78760fbac141f37695f2999a29797fbb8d34d850316531c1a7e354c1aa106dde600a6b56dc26a92de79ace7c0079f20ca1e50223c480659ea623df40cbd3b64a42f0144c2ab0ad3a75cca1c2ec79a4dd739a5ca58f340a6625226df7850ae44ba68fd243b3c846c6c7f1dc14f661de578cbcaf7c996a6a40ad48c68ee09d3d08154f6de48057bef9667245192419e8a273b4c350ea0bcb55c5fdb1ace4740aaa1798acd698435bfad9b5a57a808a0ae5b0e960ca8bfd76cdf5a9f8f99a77925832d258c1047666f2a824c3df129a8c49ccc24e91832ab3cfc5b4611f098f1f3bf065394fcad626085c2669eee132b5f54ea9544eda78ca83be86b5c339a2f77bd8ba1726f44de5657c225d52f53bce11be053ca999d102126787bb903399633f7237baee89c2e930908268b1569b1fc7a53dcc49c71ca4a448203d2bfe5dabaf4745ea50921c7c9221ad52b40d3cf03d8abbcdd76c41f860eab7013fa2d517f4de4d6ef31645e4b3b60be3022004899bf5e606fa9127466fd4b6d17228e8ef36bfb50f811d2469bad704e3449add310a6e26415b3cb8d6f98e83736c97807a9c73e6959fb0a155d00c00192180ae32b27ee344a278dbef25a188afd6f784014f8149c8f7d5a4ee1cde674e42dc5fd2baac85d8764a78db1b942b4f5851dbcc7771456f3196157ec7d4a14a4eb5d75a4a8174c57fbc78e004efd61999ac6f233acc4154f5fbdc4bf87716d5ee1400128c8419d366d5c147083bf0d74210274ec319a73de90be29ed84d2fb7ca00c141a63ddacad39d3c584effe14ffa85eb9438e0def3b8ce0dbe8fe052b789810230c03420716d1dd15affc3104a6a14a33fc2aa4e3e084c46f544b8e89fd39fab2803f25491dd5c69974210e78f3ac4379588fd5fe5828e76891f5b5a355263a56f96fedcf2ca62ea55406ccde8119e90dfb36479b2cd9b83c349530e42abd4d64da2e0225cdd383edd20622a1b97a894646a64046b917b57ebea286e8d89fb270c4f218c97bee54b770b7767f175ec2c6ed68768d97837d8492960e1e092de80f3c448846a1471fb6a2935ea32537241431e540dc428d6f0242f85ce016e87ca492add719f88e53400a1231ca6d840b92c6c535cf4496086c6241e9fb9c6feeb57a868bbfcc148e07f9cc96514ad607e71e50dbb3084de81752fb4bbd04249cd656772c94a68a2e63041b02e467ada765ab30993418157cb7a78ce8a0e897256ba8f82055024fc2e5bb95fdd02e6b48b2ffecf4df0e7d34b1d28f4743b448170a04721d6d89e5da0482b5edc1199f8a437ede84f035e5ae9a567afe11e1a7c025db7d6a4a87dcd243ec036913b3caea8bba9db034290f58d5c5c853980b46df43a0829d88a6a54a287a06e664777dc81035a30d07722ab1f883000e429b95b2e7f62a2d8430dfb0269f28ec1fff18c165726701d68bf8587720aa84ae1d24f9774ecca0d9e0dc92c2ddf1f0c2953c54fff382254de0d89ad621304d470a7501961cf28df6213c7081a8ea8ae8e44901442b6cedca1b4c17a9f739ce89ddf669b8d3245b756c6fb7f7a27b10ff66df44d6ac9fd1d795d35d47351f8f031239906413ea7fb44cf6f7793d4c2972975f9e2bd98357f2eb0eca524d5a152f51af240c51bd815f2d52bd9afbb64aeee06a7bb844c016a8754eed3fb291e78ae6d783261f0606b2881358e14041ebc0ec507c1060ce6464ef243474072f7c827c334c45de5c567b07b977d0ad87929525c20da8d016e7b4931f4ea3bdbb5ac27c52cdf0024916f516a598ddb5ffc5d7f73faef5f52207141ba07a33489df8b751b6a6993d24bedd2f681a8cdc02fc160b19ee9c5288490fd34875972a7fdccda6cf64c5e1a7c48fcc819b52a249abbbcbf13ae07ab2341474879f63e5b97d91e60d66ea922abe89788289b38b2c6b45a4461286d0284eae59ee761e0cd361909a014b9bc1260356bdeb74440933a1503e9913d3f5630f5a0ddd882a02761f462d4b813de1324973f70cd9789ee7e447f56aad7c4ceadc840ad5541c58ea1d2f3a4c866594d7d76dce9727c5dec1bab9632b4dd459385cd8db86586992c7d1b82b64e9973e7f63a0befaedb02b598b01026b8370acc3f6a4fa3103962297d37d8b551947509144b922a8a9cc1707dbdb4d9bccd5ba264094d195e4269ad298fbd47da3fa7dd611139440da8e24553394bf4cb87803d7b1150c05889f6df0a89f914f082508864f5cae240e5ad5da08c9d1eea4dc0c40cea204005f751e7a78e53c59b45b935a55d0baf293c6ae0ef1d720023076560a0fb85426e72c1ee88079402e3702b0aadb2c650d29560f6c55692417d9db538beae476e99e38f1c365a8472d1ebec2f035dc17043d9d8c5ac9ec58a01f7f975ee6a2d6b9033049838f1ebbe6c9e44cd2fc4c5b583ee1a782b5dd283b5fd783eb89800e25b48668b1632918ebd717d0cba5199c799be6e35cbfc82d3a3987cbca59e887a000cfd1c59873e88ca4dde132b6b074f90301c2412e19d23d3ae4b163ce58ddc896613748857b9579d18ae0b0a79d5f56d2b6b6f8a75eb1a4b282e7505d5d7affd3deeba2b09cba13ebc361be0e5cc603a99a53bbb20336115ef6d0189d62d9c657bd717cb073c0fb31fbe6c3316b439ff6110b32c4b3f9f39ea50e14f51594bc80716b3efb8d448062b8d268e745527c26bf4fc655cd57dbd001f3ee0ac21632ec9f3b51f845af53fc6ed70766776d38d9f9b41eebdbea3ab1b213fc2514e8da0a9b645e3d398bd64da24727557e1e467e54ca850d4c2b80a229f0d7fa6a870248fa68dc40d54497f4e7b5512ac5c0359254e59120ba865e3fce1cf9f15f6b5c5630cb2499a5740970a3a41d6ceb0d86947ea7dbcc93a513d932faea8050203880d30dffbe3694bb5f6a95d4726a50aa133683cd6753e2420ced1d224de920377755a3a604e5112e0fa10d2ef1a024209d110bde9797d8895950e629a076f5c9984d2eb0244d93c20feb6c756139127a80a29297c3cbf23a2d0308793ea61b7f620df1b692ec7727deae465027a186286c4fda71826cb9d52677d6896ee2fbc9732cbf21b72e45b00a6e2d47db5609aabe8d260449f6b9faa433e2e2b7ba31283a3dc97a27af8a0b01af83b4f2e3178205ff17c880f65d1b44aba00daf98362c2595b3386accbe8962f6ec2fe4b52a4ec0fa2226cde82da77653b072cd098535d3e90ed4d7224dcb8cb8b9314768dc517e22d7a79748a63fb7d076aa869aa8e5b39c2ee8133cd2320d798d31916a883aabfd9ad363a451349786752d72a81bac4313a5da9568c66d63cddad93926c88ac8defe32c967b936840a3e73f7ce480a11041634e452a4de0e0a2470c54a1792536b743e1f1f38a60bb03506ac89c88f9bd1d28f7676f7f48ad2fc90bc30f011da179f6dfb476a13ad3cfb6e0747279d42016d32c2422a5168acb5c19477dc69db67d24ae45cc80fd6f4e4027ea2bfc3a21768d76e40d66505ec028bd48b570ac5d0af3d40ebdceb176c917c99092b834a8837d5b0ff66b001354547f2e7da8537e6a8edb7511335ed288624ed06e56c99d87cc650da65c2d90d008e7629e169901e31b4be48f590d6ad34a3c11867d02e8c8a11c47e5e0e0bd7c6e7e4ae06186cebec3aac200e5c626f2f71dbaa3d6e5718f2507237a9f20829fabcb4f0a3122ce43ad82772c828fee2c9078358d087d21237fae0a2f42f5c782ea56d9e63076e7b9025a6bdbd672aacb3ed6e90cbccfdeced89965ca7167746e51a8513a0489026ae9bb06d58976421528be3ee89ae591d658519a14d37f71a908481dcf5563089c8b2cb0e144a39e5377b89ce849c62384265d13d51144a67b38bea76dcc0ddf980f35d1c9af02a7cc524c6bd6727a7a206b4536d5d2bffc2e099356db108e71a69e5ed153719a43cae2031378bc0a80f24e926ddbbff65909a24e91e3caeea40d6030184832745b934e64fc96d07d1b41f8cb1fb180f3a7532c77c24ba23662177c320e6f9c96d870bff88ffa55db35579178b31dbcbecc55ce9750dc3f6d920a1bed1b92550aa0a95d45326bf42cb57a402193e81b5db257b135a35e4a9b1c2f64e7a87705d89d864fd54eb0557983f32d4f26da47da3fa0fcd923996ac8e7ce80aa1be75506b54fbe304c921fc9870a8189d4bae53c5d7ad80b385548fddd2f96bedeaaec9ed24bd1dc92d9fb25a90664580552a08cf32b6d544a598c42e599cfa9578874a7dbc3b1638a4d9094d131fd4321681dd1e8fce23bc16edd9de75653f5f049922ab8ff854d9bb5871ee7d175d290c5071326356049055ce318ccac492910b4f02e514776202cdb87cbd32ff38dbb31045b941e0e047eeb47ba7ae4d9ce1e9336bb8ee3ac66a78539a47d93a0fd0873bcb01aff15f694e2b18bda452d6b84ac0cd9571a4ea6737c44b0cd44a4a9e055d91aa01f9ca7b00bc894d4196a88a9c7189194368569f88852f8ac8c2619ac9d00a10ec7cc9e382c35dc51a6bbaef5ae05ea2d7d78369e70088200b14ed6d214db4e4c3fcd63960ea06b37364663d02879ed0a385095cdfe1058b3fc4567bc82122843cfc67e3079af4a700f3332a2fc1ca113ae340eedf81282abb53354d0af4d37d9bfdf7870350d80e279aba0d3f3980e31294d2a6627b506d224402678623384f75642d7bd09601577bed637cbd5923c4aefc270a053a2ee0e9192641b656c1686dd14267ebe51121525db7ef36ab5344749bc690444814249435496207ea1f66c9c80ea1d1c877ea6f5e2fdb179a6fd117f639bf8c1f9086a83ac45f1767a2a93dbabad01ebab611177153d6ecc109f8ed9de90e594b24a5999c2f8f5149ebce1e2c0f692f364c43ef39ac593299923a89f56d03483550ffecdbf379422b6b340f8e54e38fc5bae15b0991d8659e9904618f2e14b578a604166cb8a366669189767423c5bcd37277ef83bceb124a9ee508ddb4d94d7f8440aae0d7a43aa60f2cd750148632fa1376111a75f7b518145ad46389c75cd48c341ebae8e23b44249cc6b47fab8ea41e7a64406584baa189e478b325458ff21e5ce66d54f3f4cb8267b913fdbc2c6be3e35d980428bf5170005a4f1ffa4372cb39967ab43fd3c6a90c22e0e72ea8bc144f6183ca4a2fb2574cfd89c24c13b11348a3658f4c64bff8f898bdf479600f102d2496306f884eb018d715c4c17d377708a1a03ea0340202bb8f1d8e32feef77fafb31cf0f55811af27b558fe0ec906707f5dd5ab1ae4746d38a621cd1e1d7ac4779f90eb013e3e8686edb9c20ee4673b5345f5c175ffa45ceff2e38dca5523d71055e77e84ff1a8f9060a6207feb42d9ec1b8bb47a595700c61f46ac9a5e9ac2641d4832e6634ed12e5848a1c9a73e533426c10a93b93662a57471b1f8ff868d593fdb8e8f328254491bc6cc54e004b011b0bd4d27e8e88975388d244b028f3ed902ca1ae7345d21c7f2492a885d3cf86dffa7049daf167d1cb4c18efa2d5edfcbb03a5e5731883f9225f941cee88d342f5ca8b85fd46847843036766f499b77168f55e345f0abb690fcfd9c8c479f6b3f0fe8f0d41f85ee93f31364111dee0fa4e843301a3a6d8fabbf7ec02b431ba585608e34645a167a334781e04873fdae5c022ccd3fd776d1c9b5a33714a4a9eae897c20c774bc2f44b72a8737c11735c262737431a8f6f84d4279588ae32f04353fbae0175bc3263c3bdafa415c0f621ea9d8c19152a00b1b35d7b3b60b599b7abd5779ac7730ecf8370bffc7b482e0690ad54d7976fd05f4e9f7ed894f44b4fd96d4860d338fd4172d3ff021771c512019fb706072788968d35c6e8b1b8af12c50b47da02d5a7bf7a2e983e4f03604e23bbdc2dcf1acf5e58667af31fc96d0857f79c90bc10b55482c8b1388cc5aac0df49ecd456104ec0977cc37f45ef2c397878700a6ab3cf0573ea7379378048721e900e8304d1adc332bdc8168df294ae0ed8ebd172849cdc33dc0688b6fce56cc6d96bc3412493701172b23f5e994e6e025d346c3e4cc5e0abe691ed730127b4c06c2a1b75d3a8cd1de2a88320ad02813d50746334d2f119c3503c31d457b654f591751408a495e53c57d3683cf757f0a6f9d23fbee0c990646131db43c53b544c907134636002bd57175a78183cf6c2249f7786433cf54c7462957327155ebaacb04806eccf965f576b663b1d4787ffa18b8ac32baf1c55dc9b9381e80dc690ff3a220f0cb8fad2229b1f38b3dfb1af0406347bdd01e6b48554508eee761cde2c7626d92be4d61ea2efacf743cb1cdb35569d38c3fafd7056d5f721a01707aa1bac7debb21cd14cbdaf360033d4718b1bc3ec81446206913665aec368ba30feb4244ecd072693625d22e4dcedc258c5a0974adfc800ac200f4e9dfbad253ee1df25c20894cac56b6991df12d75d7893ab18ded9b79d9424c8d6ee51d821da5c84f90123c0d20f6cc9444e2a5b6c7afc2590d1f77a0169a54946c64d4f76ac758be632a6f204186f65835aace0b90509f4454ac177f4d1ac7ae650787bec5b36dc357e19942a897b25962b21ce0ac2c0018072c0173e743f43fdb159c44b90a75f2e0c050d0a0999f1c4e8118c28592b3488707bc2a6fc698cd51479935af2cffd1805f2c56d41d0b157ba0284db715275a76d7ae1f60e2f3db49f5e4ee22ab69c3d9066241ad8284d95c87e1deab23bad239146daf4559b3ee37a925fabdf6425e3d6eb92db77a9adc73b0cbf1fc6f0c2450366176976b477aace9d2c7dbae28153fe087776c65cb9343a35d24052799e55ec62fe1c1c82d050c3051f20633796d531463bb46c485a26ee7fbe1601dc279b73c3f9d7ed0e321f80549e5b816b4eb0972b465d127576e37e74ec697823475ec1106f60915f835d2e1113f8bc87902e574100395fecf6b4139cc2016256e5e8fdd1c880b17dad53f4c5e5bdbe9143959a10d20ffcb4c3e1d57ea9a5657be97f508f6bfff5719649fbf77c732c94512e871f22a990d5c3b2eba20a1f299c3a6ce2d0c2a5044228866a2f40e2b195a14147f659cdc458e06f7e904b3557c0c2f7da1f343a87f849546af699d1f39e1b16011de0444044015fb5d1d6b097f0686761012985259ce3f923d2ef099ab6a7f4de1d1dd6aba10ecbb9ec1157903314069e00094f8735ddbebc4eaa534fe62d25067c7a4aae78eefbb16966f4eb91ae1abaa33d6054cb1feb5eef3275ba3595efa0c55e6af0d08b37c6d13c4d4f121fecdc722b80356791c8303fef3782abc79bd47d31fc1ab1ccc720aafa2c65bf4dc42df63c77d20f1b9d5bc54a634f50ac70cc2e5ac9d32399f2e67f0a57d59f21ead5b6d80cd2cea5b10609a9bfcb2d2ab8ad5f4399c42fda0241d5d39646ba83a5fb3b6809dea9174d5a9475159c492ab9a299533494dc773d5836bdb361195c3ec70b52349daa59b97fed172b6aac95bdd063f261ec3359ec54293074cdc392fd62b00055b8d8533d9c9cf5c9de5f510a624588ea743a66565c3794a332c00f2af4b2d836d63bee21d92a79b99f6948e87ec77d95d3fb87c599e651063a19b90da497449ea0dc10ac5f1e0ac256d260a14d723a2bb27ea57f32c1cf668bd57aee9be9ab54bdc2a22756000fababa3837cf6cd2573b8c9a6cd504d778acdfc3914012f7521d6f58ddae659f23d45e398c0a161a7378ee674f71b14af3ca997dec8fdf209cd937eb70d35af1a40cd9a87b678b4293ddbddf545ba9de042c6ad5052b7b9d1209b640a086e8def7cead038a6a050114e48b413ff56707365ce4679fa580c34e297af6d12b778d9b8458e92d744bdc8327d75b46c1616ce6d666a400808739ada2e68c77538fa40be86db7f938a81b7b12128c2d523165b2238228dc3ee776bd1099602771b9a8c5454c0e7209a264593dcd32482a4f8814cec754874339f108fd041056185e125435744b0c79d34d99f5880c2bbc245a7b22a6c5a63fe74efdc2a71b87ba0557452386fc3d0bb31dd9e3a3684c8a584371d990ea9d8787d7180bf2f030c9480df4b9f4908831ba7b8592dfe52f0743d9855e1631e1bc942fe423882ce5e89eacff433db6728e61dd295d7df147d58f83222ab73a173184bffeb3d7301b7a619ad179d2cc906431c931de0e1b2b5783e6d4c9f471b2a8d21da43750984601397df7a854414665b2b63b8f10c14e1fd96b19a64e67286524bf912894c3fa1f9eccfe6912c329056d2aa2db26923480e8966d5a35890d08c51c22020441bc1809ee3226ceb09cc5b99d045caffc534d49ef4c503a65b4f66bc9f35e3fafe0acf3785f8bc89836292093dc8e2d6e3eb765dc3322dd7bd4d0612f7187a75d2c20f3f1c2e2a0f879924a9597ea1f766b61d4e3be4c8f39d1094de32928cbd7d32673c108d5d84fcbb39018d2eb06934ddf1fac5a27d03e2e139a5b76bc1dbe9a200b8c8ddfef0cc0ef89a3fa2b63437a819e8c736f40d76081cf1f06bc3d6fc59013aaee6b45cdedb8afbd9a05c61555fbea0ab66d41c40cd6749445937b6a0a1934b296f28cf1a6917acc1f14af7784907abd7fbc53528783f361bffc884bcc0de72a14201516802c636615d27fe87af1d90b5bd71621650ce3fde231c4737ff09377e25e8eab0ecbf201fab9b7f6ad927d7ab737daaf29e3cecf38edb07fba63d2229e185a3da702bf265a55080090f4e0923e79416a4aab1c5c308aecceffda1bc083e7f83ced632359a11eb0c4c99baad84df5cac15bc5453b6593d9ffb4c5e8c84037f927566fb7025b817281bbe924b36247d762b1c4d1d35482f8707da9b1a06fa2cd9b568af2b70627ade5ec8ff6ba17ea07ccf12c5aba69e2c8dfbf081eff4e92f5f772375efe2d6bc35fdfd28962db46dc5eae5e4867223deb8bfd63892b7992f2da4e07642e3de8636e0a6365342908b5962ded135029fea103cd4e78bb8d2d54922e7d9afdb4080e7ef0a502b48d8a3402145b5 +Output = 60b53cdbb73863912b5dd16ad13aa12d9cca41d739ef5caf504223dce2ed554d + +Len = 98632 +Msg = d0a1d4f93f7e006a4a83be0c125ed1222182b2d34d7b9123df7e9622f5456c63251a00b0633186fc253abe99c53775ac268b4edd9a54c25303fb66df390a6c77ac3d6de74bdb66c3a44600a04cd1148381d36e9a0efad12a6fe13cc936e46ccdad33a204bd25a6a60ecf0c8770d6b6917a819a727012c5926a57a048b37c734d7023277182b6508cadfc6bb8f9eb63bd58be5bcd8a47a7723e851bc47a7989df3c36859462386b5fc7f6a499afba24ef65b13713223e7eb1319434a55184b66b5b9343d724500006a5e53f9459eb000fe783b8ac01a252398cac7453014503d91364e9a192a816698ff0c410c1260006275b6601ef192cf197f4623752637711adce005972e8b570cc3fbc75ad122bba6d62c878b44b13c1999586b70b871bfc70fb0f698db8e503a6fbaf2ae657891401bf667a17e20f91dcb7683cf658f580a6139e38abbeaf0a634c2399349e22fc2a9bc870e1832849a680912fd97f1086953d352e94a51a6d4c59a2295e8fff5b311e77c0dad867d2401b88f67da371f787a25db30f132f14a94bb3422ed127175e6ffad4ca89d312f2aed5fbaa6d22b9c26a9d2fe5b1f5e7c249df4c6a0da21af9b7d912793e74f2036201a427842ab68fbc7e0ade2674cfde7cacafdbea794a4a1d9de4af9e535abd5e935bbe9291d435c087acc21ab4b2470ca4d44911b39199cacdb13351773366cb1387353c5ffdfea0407e5937be7a43204f217c2958d62de6f1e0ce00e96347d0098f552c9d18308131e66b22990d1be034ff3bdb71014f9891db4853afd4a896fedde60a530d148ee34dbf864d551775dbd74fcf04f94708360969f1d36cd1447ad8b07d87c4f2ecdd1c1e09e3387e07cc0f81ac1ca85d5f67d2f8835c15090303e87a2e432412c6a7b9505362a09abd9011971abef5d9c5ad9ebfb053b699fb23750ec58e17bb42ca8e1d0dd274b1c0ae4359c3f4c802618fd58421bf37c95361e732e971853688cd014ddf3b9c0c38ae0f914cc509215c95df107da87fe13445a7af42f254ccc1387ca770a6fff34c19dc05603aa07edd47252b6d177829c5581b4d791c6dc2159466f4691a87ad2475117ea55976610d2e0d9c991209e92f21acd336f4b863ab6727fc71a01b84e94d18c4c32c711214d1002da8a41a689929c20b20841df6ac3c2787313fa3bec326589f63bb7ad819b867a443d294ef2cf6c6bbe0d385c23f98cd5d51ff08a4d98a39d72d0c7afd446ca8ca11a65dc60f121eac1ee9d6108d05834578e8307e54002333c82a57c7be742d67bb275e356b0534a681cffa28be0ab1094e0304945b117e7ddd1afb7faf585c43e85d7f8468556f71b18cd752f930bd6f7d576c2d1743b27b13e54c6c3fa19f254151a9fa2d8c36d4572857d666fd1040aaec5193b02127f6139434d894d65dd76d0ac2e0e331f3981bac61fb2efb12437fcb990c4d3046b5842f9a09d97ffd1f1590b37eb1cd0d85a41fdc0b79b22b42a4fb2ee116fa75820fbc65483425e9c6e1ec651cc0e7ec639b89b24c6ea9c403c184f65a34061d235c457fddcd4f88947825bf023807f8faa7f2ca07366843507d6fdbbecfdca76112d1cf10cd8542508343a87840b6991271630c83f87712ef80c3c4570e057904d9693d295c4f7fc4a94f0ac5007a3772a0e3600add5f97a87388986b1a08fdd45b14b16fa136a7b69350cc32a1de3ae3dd7baee20da73c45fec741431b6d9a993dda132bc5c122efe94ed6074b670a2dd032de54afd7688cc887a62738bdb71a2ac34ba6ef7959375252108c259f0f182010d8a8ec7782477ad0af5e997fbe20c8d8422548e4b25576626208580db16c761d8426eb10f43cbbaa4432673b1673bf20def3f88c9613fe89b4c50b3959f07962cb16d5292534341e4de9ca7927dbb8a3085726f96e3792ccee0967ac6d6dd2e693bfd14b7df68d33b2cce9c259205b6aa998fbb1a08ad935f81d94ed57ab28b1c66a08fd644c6df25b23ed9d14094f7ca7ff9e3e96d47ccbba49b9847d7224cc4a5fa1c742fc7c613136fd93c05f3de2ecd43728b6dd22961cd4fffa498a6e3e09e6c5317fcf638b1a4c422bc5eacca25e5ff0f56a6c749f07088dd621baad0fe9479cc4838dca75ffafe4ed8b72a5c6e7e7ef2f194b1aed612b8ca06fcb8948d4c94d07b7fe5829c9a50a617bbf6f556eb65c5d2a40bb88148623e19a86acf0b1b5018381e9b6ae5e77dc10fb98d358da1260080714ff7906617b1f0ab0bb0f6853dfbe4a188c0ca86d838174c779d6154423b7178f90c72104bbe5271461aee0eb10427b51814b8ece273c4f1208d70693ccf2c278137a4bb60cb8597944d303c5bb977a5d3d74f7e4efcaf2422964954983427099339b6ec0962208a60c89b8290943b104698fcdf504b2c71f8383aaad722d89b89631716a80aa9c6462d5e75e22d0860dada2f74a8e7c3470bf3f2d06be3d759ee4443cfcf3d97d7beec178ad2dc66342b0b75d2bb4b1a3ff849d069d92fa9d13c6ddb7be163513b35754545e52abaf691bd5e7df9ed87b927ba71eba14eb67dee302caf81248c7d4459661b9bb09d24b95057db0757924f24b645ba46c983cc9e5be5df10e9affa5629088058d6734b0c74e07e4611c06e79ddca6a5c389859a711658f233b124ef5349b28cf34e3d6058b86dc4894a89381918e8034147a81a3214a343a8179f7ac3c9c59413455522f14b9798168a15af661f07070d590f11cdbf262c9654d60e5819ab6615d4e4bf3a106da82f6512122df9edf950472047ed1fcaf525ee3373ba404a4a22835200da0ed83bfd62e82a15af8021319a4583383d75e57c6f1d7092468c8762db07aa7a4dbe9ba809ffbfc748aac6d9d9e58f56201045c45ffccf88345767fc636b88c1d6090e57e2bf99eacc51326f8c6731f0d0845d244437564311953018a3e66158b09fdd3276917f27445fab1c3b3532ae56b775c5a838ce6ce52d2be024e1fce6e36a50624cdb3a26b7bb7a086fb65937b993d5cf1266feaab907a07a6dc222147850ae0fec06938e2d4de75aaf52703401ffc5690b29b0a6940bd70e07f39b8a763b4160df7b4f08aefd393b84713d4c37e28cbb1ae9aa087e2117c578da2fefe5124f7eaca1393b43b3bad2757b8a28622673eec70eb5777f31aac64ae1a6eccebd2191dbdf18d0f357b0480ad81d6f8ab2c22a9a00999ba023d63a046fc7283823ffc0f59fb36ec7d164c4cbf1becab76ec1961c281e1de8dfe4492feb5b4c2b2e30338148d3bec5091e6f412c37e1f242b75bd4ec0ca5604d1c1a52bf2affafc5fe1307424067f7e82670f3f24f5b4216eea04ab52ada0e56c5d6f552fceacdd0af880ff4c2126554c3f069accde1b0d2ac8e07ec4165fce028a4a10c99b48c388cb922c8216716363e172cc07a1a435e3a4d92f719ed32d48eaddc55c906f5e3ddcfc725240d1277df0cc3981eaf03a2e00473407a1bb61b3d19319553880ebaeaf1877395ad61fdeef8b69a8147f887e5dc332d2c97929b7e0f253400e1e1a5fa48e91b3aee0cb2b3028e306a8b2bf393fc5928f608ce3e98b7429a98ba768d57fc7583db79197d7653d2c1a222a3cf308c6d98a21770ebd53a0f30e3bad3584734b31442f593457e120ab4f2b6680405b6f8e5f66b828a7bc0145ca88a02f013182c36360b7ff41468bf7320ec83795aa08176bbad0b02d370da87b1d10b3b03d167527e63e771807d7765f46efb15777290b5b884143d2573e81ac438f4235e87eccee3a4d2a40a78bdf238e4d8c2a355ad09b799a422b9f1c67baa67c78f6e6144142d774975fa821682b2f52367277161da7e93c399d611fd142b058c667988f68a248353cc97c20c7d2b4ae3eb4bed3391d71b798ac5fb144c0eba4992c8248a9a8f71f8912a61264c6c8b203857f1ac9488d9cfddcfd8938a1d3008faa35c89ab38e840acfb86ed553a5fe23593a7524c5974cc7a3ad003381e0cd08651587a24e5913405525ae701606e32ca4735b0211495794a4e0aebbddaf9aa1e1c41e56f5f14db8577059eb8a46117dfbac34b7c7fe3dc3355afd381199d9caa4a3f52f36e183e12b1ae9ae3d0e09a5c357aadc36407001e95e643eca2a0b11224794a18d94563954a7d61e8aa92c22900815d6089a8eaf457d8c4663fabee3ef21854466a4454f7889b7d31fb20972f6301e3b9b66fa49be3acdd57b6665d17fc43f9e5e7bd191eb43076248a312154a622c838b50335fd818b1727d07805838923c05d1957b8f41563d22b216e6981100b93434d0ea501799df93e558aee6be3e03117c8bb3b60f55d1bad867f769feae5cc444535fc8e12090b040d4321b850a1d479bc91a9499a46d812820b50947cd7fba26622438e96f8d5e2c04ca550198e32ecbc800b994d4592c1ddba004a0e0aa9c5787d82e84b91e03e354c821d86d0d2d9923068375682d0245f368da7e8a65d1543edbf847afdb38135ecc106de8f3ca6044ac80bfd261aa2d024ff9552d2a0fa8e1b044a6a63d61488d469f26bf2f9bddb7634fd8a59f8a3f72f5ffb93b6f9dc23af582265ecd25df6ab82cb73229084de5bb2f54442f38f9dfdb4c0f47bf023c850c4f4b1c02ec6471915783f478965d7a24ddb750a92cf8a3606cebd490d3746a64ea8970672b642c828e117886dc68cf20a9763d85ec986835d0c3647d980645a01265fe72795b05dc6ee420dc311c7f4f31156d5dee6598cc262a69edb67ec14e256518ad4ca5983f4870aff13ad4e500f3298299a8ecaf83cb857759b52a47bfb20b51801bf05e0bc94b586e602e9ad66e070fb1a2aa36fd4f68ff5a2aa5638536dd2b836db7c1c25fd8cc9c27862b301042573e720aa9b9105974677d8c8f3f223f193fc8685e037aad7f13277800be78700bb88daa8217bcbb78fa342c353e12c5ad0da28ead4fb83de25bb670a5d204f49f885be64ac9a3136f9ac520e00276e55985929719f7871e88ee7b0c950b54648556736a8e2f71f5eab1c6f73a3ccd32a13fff2e3e9b75a3f533dba858dad5344f8b4a93a6b997e75cd7a00b8e4d942206857e9075cbe28299e45ee05bc105d8709f77fe3f08834c4894f6fa66a55a280c0e677a79e97c1ef9488b21384e74e57b1b51f6b19cd2b9305222305de48dd9242360489574a0fd95f8d6f758d390dfd1778f39a8d6f492a697b849de7bada9e17cef97630ddf82e27dc8ef4800e82c165c76238f57678d0dee2fa352eb481ec6636bc36d05a663813fe7558056e95eac02bd40cf8eb9fce8ce0ed975a3dbac458f7b791e1c8403d4c7a8e69c3622ec2522bb1df3fd5a66c9afcc589145e6d6d1598514f08306e86fad840ef63f1358f434f6279713c74f230bfead4041e8230c4a1f137ef99d75b43a1f2b18c24929abb1f4da23728f3a878b0c540d185e1558d9a01133e0b6503525c0e78e7022d2be124db2239a20ad69757bc94249b7324990ce8a99d8fffc84d91fb0c1c93ee89dde574c01eb1a1c3b83c389aa4691ee4107f0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79db2528e9f8c4a98ae8bbb1ef83d0fabc687a33b0f0fd9ae260d7cd4a635bdd84b79ca5d1268c5a5fb86563ca27486ae29324b3af77daacb2dc9fc66ecca184270aedd1ea009097cdf9fc8d7890ae51e4680eb6631e975fe17c378d69f0f935eb3ce1563c6e17895e1349da02a84ad64b51ffe5d5ce7bdaf6aa69c943b5aa1856b540d9cf596b57996e11ef6f5563229eb5bee80c6dcf4679cdfb220505fe57f2ddd205aca7d22a06721f77c781435c65fc146610e4dbcaf24cb642b6c73b17471d5e7fda42952a2e883a18121330ad298dc907ea1ce78fea9162ce5ee3aa83dbdbaef26110fc7e9816297a59f3733d70d2a574a1fc3bbde903c771054093c0398088044afb4e4fcc86b546a4095433c53270553d6b1f7b750aacd1b4c83ef9e675b55d9cead5c4533ea624f93d1ab7ad15f151c753daf1180edb967362f2546b21fda65fc4d706b4a8c4bb62770ff3b2e3f111469bb54859771a6948f6f9f951eb27879b739d3c772ad6b4e69f790c5b05383dc22bf8a8c0ae32f23d6d9911203dfda759de6f8f252ea6b68d9da12d30e18e7c43ebeb38d619ebd859ad1bc45e7e45afa1ed9427451bfa6a6059cf7cbae0bb76d2c3d52122210cc3a49fc7399515c8467988562b5f599b7866bb4b21806a86d4769b008a2d2e5f5d272be4994c6c4e15eb97fbc4fc505187a8ac5c450be8b83e385bb29c7da9aa4be93abc0b0cea9fc4fe02cc19a368e33f2c124b10e1c0195b1eeb347f9cf8b638f2b295b85cf782fabab11153dc091b4afcd761a98c5c71d43333ce5a12854bca4b7db8c8c4fbc05f288d12992f9bbf4d20e1e339942288507c1bc75565b730a9fb816d62cc5e219c4f7c1614258698f39e1a1ce77f7c2678038c699a1ff52f7e0aa8fbaefd896d59386767eb45326ee1806853dcd7d112f4cf6cfa4ec7a90ef181d8acd5dee26c3de9374b47170709c2ceb5cf3f2389156be8a5c39ce63a96a967fbc6fff8d2e6f16cd20b50246e303c8ee8d939ec0cf786571d0caa03108f4fc4f89253d1c2a21dc922ef2df3cdadf7cae9b9f2b9c180ec23be1da0a693c18aa1b758faf3186968060e3e070d8d469c89a0b79112127745546e3da7582bf4030520601ce63e037a2d7d4205f817c4d3d4f51b3f7f66a63bf317b5e79f40ef62f81bf1df309a38fc455941503ed2ee43b2d02c238926d37406a0ce87063a7b4e8290546e5b96d0965789840f66258e952b193366b7b8c79898f1cdaf1281606fac67d2efef9892ef6af5536bf97a6a7147b8782f92854a50aef2fd894d7d666e7d88b18b720a47b08685f68c7e384c7d0f9543a7a1f52444528ba53a3e9654f3fedb39696e53b780b321b4997dc6fa648a98dcf56c711c1b8ba40ced6d35f4a53549b4b26adbaa08fab1d6bb7f8e3cccc0aa8a437b5ffb7d62257bc863c00c2d2cb8688def0ae8f0621da4190bf7dc5ebab197b657288914ddf63af3a7a16532eb119e23844838dff44d66dca969a0c17f96497887358e8507ff9197c13ec75d783d9e9bb1fd647db729642be14c529d1742e9b193edd27be529c8dc3a01fa56dd23b01efe913273b39ae62f3c09b89c8b9cbe8804b71c9c815a26e99951c5c422aa1cd4f46c6b69f086330f41069b64e28b122660fd3690e27bf4e76695f1504dbc29e41af6d70677d794f479acc29d24f92bb33226e60010757bfd2a3746a168402177f8983df34f7351066a63f7f05acd5256ff9af594142e00546b9e8c607a1d4ab417b866d88044b26c9e9400048befcf3751c02bf3f590ce13b4328b348c3dedc4fec01b5b1330fe4f9da5a683bf46ea7faf024fc6bb822c638a5b0bc6a58751ce351622270f217fd6ed00b112febceb56a2c72bb46eeb616c7781d3bdcde3c0fb452443e27cfe7b2a180be95b513819e3b178856617b5b655020cacc20c398073b550483562af3b72a6301606bfa3be4f647b2683bec77347b4645e7d6b71da5d0d04f7c7ca1b07d71dd6ffbb51e320c14339d6b46909e06913f1b195f17416e1d6a71a41bb2c278107646d210ee18762d71a5ca1226344e4a91c6db3a7287c2997a1774a3ec9e297eb4428e0fe853d5aa78782f1f0bde9dffe4b597e9376545ad859d78b5ada814252ddf8a129b889d03be60e4ddcff158398e73e9fbf46e59f223901ab17484ca9c397a50c9860b2ec1ca0c95cec1111f80159e4bd3381781efba8bf537df98bf5c6daf6c8526601d8d11e7bc72adb2565c1081381f60d55ffee0ed72b95d6864de30eb47e5fb3beb9e2c7ec359e4698f25e5b93920fd4c46b80d412da66c785daa39ba7d5c82e31bad802e34f4f38b4c962bc2b9a89bd0d8a3b603809f8b5cfc38dea977694bea1003a392abd459abf0f5592a53e69af7783a61b115f5486ad312a614c08cb4d58b690d38726885502efbd44c728b9944b7f496d64858124674c00698d3476c29c026338c332214fc58f243c5a008153d2a5adbffb228775453b996b24a29b04b60c39cfa68a1772501711e1256dc7d4511e59779cdf6f638e277dcdd7f945fdeefd9d02f7d672a5eab00d9bf21895ff1311d5ff106440d58c3732f96fe179948bfd143880bd3acfdc829fd287a9f2bc5fa7aabd1f5802b285944255b40441b1d73328da07e878da6fb44feeadc7e7f37c075f1b9064bee4c265354b6d07a43c18c8604e55ff34ade86ea5572c1a7a8cb35b7c7f2d2f7b528bd391416495ab1e97e444fd32a9743092da2a76cc4bb56f4cc88a53bc6241e42806e0a15f545c3d9cad5d4f658e424bb41d65b15502a0848f7810fe06a41882e025a9d227ecc1826e4e32adb857a5e69562de718ee642b4c39396e8d39e0914fc59753c8406e2d557ed4c7df1aca6e97ecf1e1f40a0a3e53240a479ebf71b82c4c9cb473d4ac51f9db33128d9344b3cb78cac2133d8cb0022a8c319155857b4809e335b1c5f744689c76b1738989ec888c210e12f35c3eedcf37a301b69c39378ff35e0e7eef734635182b1d680a7733999d3c5fc5f9295a8485226c3d16a05f4155a3e679e54cf737bfc5d7a926d2611387c3761ff40dfcdcfd263d63951f33b0729dd64189501006b6385ee79f8ca59c8939e28bdd6b395b2824f1b48824696fe2b26a603c2b154493e90f8db50455a70a16217405bf84616ea535ca704e44d22e67ff408e1c7b53e16e661617e8159592deaf731d798292593d55ffddfb7a89ae45117cffc2a6c7272eff0b28964a1aabfa08f37527a8607043fedf31ba6ee8fad05d8ff1ac4c10cda126f7779d8798cdfeba9fbd586a5e4c5f7ce31c1986928c701fd40447cfb34d6baa45756c4282716330b2467a4cde35f67ca5ed9775f8ebcaf4e3c813a6414ef4c59fb290ff7a2ebe17e5b11bc482c59f5a922692a19e814769598d9e642d1ac31540afaa32e26e75bca48dab65ce83b0b32277b99df5f55bd98ff5469de9696d15e2dcf6715da900ab792ca7a523f8e102e1216acf91b09ee2017fba9808933943e0cb243f3e771560de2e9f17258d86c668e434bae43b770f588d58f70d20ee3be4eaa1f12740fa893df4001035ca4869f41095e4700e8abdffbea03f59aac24a49bbfe3b8aaf4661232d6934f7277c8a4d370cd0c792307a61843ee580997c1b99dfa782eb1a7fa5382b3909cc3db993ced808045d7f0ec1186e736e2465620c5f962c4bcb0b0ca1b78e0de337757612e37425f3a41d7c2eaeedec5d87a71ab905a00b0a9cf984035bc64675cb574894358bd5333e061f1f7f7318185cc70c8e166da243f38e5c268f547115ea5b87743f9f94277db15e1014ae7543065dce181c5fb09c41022ba7bcb92c68370ad94f6c1ff164f5b7cfacf8e0825206c3d5d392068458182d48f37e84c6d113edb482359d6b503881ca52b6c9ddb9e0a19a4cf1f2ac2beb385a964f17dee5136c9fc94688609db898048db8cad60f267fa1e0b694a66c3cebc70ca912d318b81ff160f9718f81e872d4da895409b64aa6733b7a7d01bd7f9024c306e651d074605005d8e936c16a9ad1a5a305e743cfce94b9980c2c8435cdea55f302c9c0cae642046f4ff4c09188619b90410d3c18407ce7b9d2a555021d8e320808b96e3e1a3e09171658040fb43b08cba5da03c6b492423a50fa9436d786e390689f1d5064aa708afccef037b69499df94ec3f5d837b559417aae676b47ae72692e962846e1dc71533c839ac0824bb26aea2534f45ae9e719724b0340cc0c9551826d24c8f1e99508bd234cf1161e94b439ac41e6392994d4ff685e178fee68688e5e13b501353c7458b76237ab2a0b80434163d75cdb271b29eec11619bdb55359523b349a282d3f142824b9cbd6df7611cde4ef4c696995f9c37465f1e242bdeb2fe66e432a3212fa5cdaa0fd8cd73daa360a55903922eb76d0bf2d9fc3d74c4ddf5a8a84a31195103ccc13cab4bc7e16661e32b0b519c4a9fdea96acca3ea88648dfb1e5fb936f60b0423bb8b456e05e4367ad354318c998333cc79f5e3e7a9e54bf0bef9a8048f2a1833f51f56d0c89b72fefa64de5a24d58fee900e69e6a9eea40bf29e9a0caccf5d8481ddfc9a99fa9bc208b3a49f6d055792358cc271f8df1acf61c4ebb9bf896897ea3db3160a90058666d720c6d2713f29e2e77a142735349d74e3298637e6ade086b4f6fd9ada649ecd25df6b05c79b4810a4fd47a59f7608b49fe00cb645b1e0ffda449bbb682d7d84563cf67776e06f574bc877046c538399518bb7ab45093bae24388afc97c4c534bec5e3a7edc2f22f52684cc42a51b0ab8ea911a76308332a192f45cf07cee846e606ccf7baa782f14f59135557f4f263cda4a50b0e5379ec2fb546b326a07943527c1d175c029455a917753883b1db4a952adc66c56f727cde57183982eddaa28a925e675068a8b4e63fdcfe2c1cddc85b98324b16b0bf54bb8144d28b1b8efd04e60b68264e22a78d1ed516bf9a7c85a779411880cba2fc4db0370ecd9e28bb47f39eaa4c27b4960440e802cccf39daff4a836f7214dfebeb80795ec8fa2a55da27a2ae3089b118f2527052c20f8860d97873b09920c89c3b6e7642fbc3f655121e91d481e8baa8cda018774dfffa9fbcaf8c7c3473ff95a3d6d84bd4602f41a624f6cdaec933bdfcd64af0aef502e01f5c5822f292e750cb55f9e9e17337a40cf73bfa25afaec11641725f83a333ea77eb416541e21265f868659db151a1e49ce1fbca6510ae7a909e49046a6f00176ce8e283a0f5f33dd19aa5e7a2afe09bfc9190ef0b709512f239199fa1dce9ef54d1a63eae531c50ed49354863d296329272a5b887640552b1ae7e71e86163dad63226c6b86df04792008e40435e15310501a4c7474f7182655ae23b9c8110824796ceec5dcb117a666d2b6fefc6f01fbacb188be9b76c5a83eaef4d4cd0425e4f5c28f01ceee271d0cb9717b791b9672a3b7b86ed10482373cae03767c3abc7541eaf72643e05b677c85be84942c3afd9df3838a00ea775db778f7a7bdfaf65dc3accf3c25cddc0b1cfe442035ec1425022e921c0f71cea117d2796f788bfa26e5d2bf4c5bfed19156ecac5744a14d713a308c2be6deac8bc58531d79536f1570e226e5ccdbb638291169d31a9940c6aadc11ac06d7c3ba42759c6e6fd430379a5668577634cba643445c0b74c0d7a96c3a9e4e28c92a373a615e1a596fa57131464aba205f8fdc2a941bdf01653bf7fe5af91992b670c81ab83291a49a216adc2e589e79b08552157d23be5edb002ad799dc9ed32449d549c69474fff8567d017b0c74d0dc4e90ba6c0e29cbb6a6ba7e93936e789717e76e290e24c9ee973027b8f0cdc4374e207fed25b1f66ca24f59b4c7e8e1836d86fe6c0a3170f1762ce5648009d2560679ec7d14e76d718521ff99d49ebc8dbd3c50fc031ba3b575bb910a44c979cd0a156698662a7f79c20ad69f640047fa79602c45a363d09f1864d116b98d38e0bb7ba4cb640bcad9eb428551d0ae326e34aad6f5457a6602c0c11c2658b57e55ad24fd92c90bce065361824db5090a6d8164f77773eff2a51158d8959ce2d87051a9f76aff9b07a3acf033ef8ba11e5cb236f448b93504ea8c84acf11095d5e54b6318c06239f6265a6730b3cef70cd0798953e58fd9fb4794ecffd53e3ed508ecf8d84fab791802ee5eff36f98b545d39e4acda525f6440ccfa479e804e747fd8c3cc4535d8fbcdcb1005e585ce634765d14593cb35ce6a87252ad9815522ae716c5b6d9bc9ffeb9352cb4c0e40d8439fc7e4ae34eda82975f60ff2abe37e19594b0c1537dcc2e0b96fe5d6fd8311c64a40d08639e76001fbf56d968a69d534f2f864c8b471b341bfffbc12ddf5be43f7c4bfb844c3a4889babda218768c6a5d0fcdc147c396f83196ad48c2a192c411adbf8b0d002e421d771cc203d50d0d065b10875099446395839b5bf5c7dea4245ef121c86159d7221ffba1f16c2624933cd4066e702d5b8eef4d608ff9476cbeb86a237b18c3ede2d9e2a7aae3e1984cd9a3a668f05ac965024cc159ded60428e3b1fbefcd746da3ce5a3cf5e1464f795b04cf08c2d29663e31fe4181f9254aa064e0fec277540ae25eac89b0e5c3262e980e9148e9da8cdbb4e33976384458b49cac93acecd4c4b071bb365132b294fac9e5c55fbc4e9eeb162149d53b2bd15d5ac90a06b847bc19c74651898bb1d87cbe69093b24e400deee2f1f19726a58ed27ccbe7a6a3b45a0b7d467f4415f4536fe0ee965b4394719956315cd6e8e63f68c3e4d72630de5c7dbebf61c04098fbc015dc259daccf63db463ca6b8fe6670bd0742389436e31019c03685b344efc7e50cc30a2090d82bdc3b7a97e7720f69fcd34dd297baaabe080a14b4c62ae3fe074d0c0b8df79711c3bd53f6084cc8714bac6d6dd8c61bae7124c2b6a1f95bea4d611df18ce9f45db9522f8dc69278d1d21c0ad0fe611e277d97a653ebb93ed1e0cf6083c46fd756e5847622c64e09d2bbaa8cc4b2949b7354ea2a534d7276fce71f3b8bde90284570da907eb38762ba2bdf5b119c667ad81da5b57d6e2deab38bda18cf8155cf7281dce56933466bd14c41df7f63dfa39f0151ae9af7f2823ef4875e1956c4b4254113ddabee920c61465a81d5b007ff0f27757f728fc726e449ae752f05e8c0a6d706e10b8e732db041b2a7dd2ae77472b7998fcddfb6beeeb3d7c5d935c6d93c6c3e5752b8f1b60764cfbb5d7a86eb0edb4546738ec632a4598bb6e18e68e8312841a94816158faed73b231e47ec4d2db9020c2c45ff6a4e6451b00ebad5d6cb32993db550e6a1edc37e49e83a228015795749bfac6a4f34fbb21b275e158953b3cd7d610e6cd20c501e9383fb2f6e0e44cd65f56a0ec79e47355ff52531eb10d266d014f7b00b52a5a56bb6311bfd6242ebc89628f4bbd36f62e440b430e34cb8eb9d95b3b93509eb9b384a84ef17579a39db6a8d22141c9cc112cfb61a584d8ce44eadeb903677498661089eb2a337753f043842a2b8c1f6db526cd1f7345d77da4a24473bf8e4e8f050b5246c8948fa86accaee7c910aa4370addadd05ec2a154f9c26ec4619aef606c1cc125b1d352953ce63ab6863ecf5da4ebf3acbec431dac34e09325be0875f1d041be6031fa4f41a55ce5a7ea79ed6865e4b943cad50f41092bf8ecdfdd874cb34dab66776192cb0de516f638b3a291afe5c8fc0c3252b485439df9e3a0927de75a79ec51ed9c4654b6cfe1c33cadec693cfa53250d906d35d1e2db8df4300be8f2aa505600b44a063c60e91e7777ef4e44bde7a9a930e197517810234ad88d44a0ad30f84d734cbed08a7aaef69900bba794380ea7cc98363cce264807046866eef30cbd2661d4db2d9d14f92c79c73dd01db2d87bcc177f1e458c60db3c23dc283c52192e0878e7ae2956819b92a93158aaf67bb7a7e5ee508eb10219f85620f6b99fa0b6df8f60ccafaddcc69c3d52abcc517ccde86a108dfa42a055c165b1d52b43c8633faed323a0996f3fceea0e3412726031163a622128afd0111fd92b4de1fd14b5d14dbb2dac97bd69d345d09bedd7aa83b9dd7fb48a56f5ce6c36d9cb7e19fa211cf2855514275bd721c7264deedfd0383ba9b5a2afe696004ef569c860290d377b13ce3487c6aefa32e48bc4661955b124459095f9cd4539309b47ef38b8b25b9447f24668044b559f247d9a1402cfa10c37bce9088967eba9aef08a58377e2fc105ae05455e957bcf1d7839593a926a4bd687265c89929a2296f0345f23e506b9c33deb903431df3b26181ca61f428f6bc88bd8566c39c733e9b367ae1c7b72b7073e73e93384e27bd4b9ceab2f5482f4743769969fe1e5461dd6bed56fa61671483c38b0cb2347f9bff9c9a8f94cd77e7016748da31f86d1b9c68465cbf954511c93a4776981524d3e34984feb901f5222a563bc04473e7f341f62cf8fe9aededaf131ad9d23a3ded616a500a4c2ad283260c1a231ed5ea7232dd47349fb988339c18ae3e47ebf372e0c9a6b83591358f5d518c0ca9669d1ed8e540178a3a3e68f80fa8ace1706ee9c82c2c125c7e47d038ec3981cc7029829bd6bfa9a86536162ac1b32c8710d5da805c8d1fa93830cd1da7ca8d6f39b623e4776bf3df8199c49cf675c5211450cd72216fe70509170e7548e7357a0a6b8b1991edfc18d88efbb576967f98c4094b05427b735637241ca9983783d62b7041a4ececcd3cb03e42dd08bf62d26825dba18958ca860b817e1f5f637e69e4eecdeb50116c3152d1217c769877b848cf06aebcaef47bcd53bc4165122e1c7d0db8588504e3e1066e20fa86c8c532ac2d5394a427fa1fc5c55f7671ed9cd83df48851526c3a32143dc8c001f85429db674abc0969e3583bfcee254d9ccf836eccc84081f2770ec367a034aecf2d831ea6738cb31cb7107623f1b8bfc6cf0656bcfd8cd83da45c5c1431bf57f6572abd12576d69e97f2ebf60f0969013a54a3dedb19d20f6c804276b01cac214da0400d27dc8f578429a5edb7427882d58366d866bdb20c4eced6c959abbb8d2bffb2e0f6d031d70083c9bbe04d36eb9f0b12db0b4aea250170173ba84fb01d80df691f0b088aa79d9fcbd2e29020c6276a5c493137e6c415127830045f365cdccdc6f9ecdbd633dbec20e556a1c28cdf1f97b5610b34840a247e692670aac59059711404c0c1261be76d45b4f898ba569959a2233b5fcf5134ae29672a79d25bf0ebfffb6dc7d90e200586860b1fd90e761691e05ec5007ab16c035ec3402d90229c10392946d703148e2a226fd453671452f730dc10e1f7394c8965f18a11dd6d05e73689eaaa9b336ba3428d32d4112293648d39afce471ac41e252bb429744ebdf77c161fce470b32744ee9c7b56cff5c4c6e0e0e4ffaf4775404e85aff253628c3923452bc971a572fb01c1f81fb2912214bbfc8c17354baad9dadeafd40c1dadde19b2feffbdf6e480e8a86c44c2e5985cec54bcd509a229d47e2e09e675058a9128103f2f5c8cc3fc2bbb9f6d07d96dc3fc523ee135323a5ac2dd86cf99006b78dac7b40057515796536158418a56eb73725dd9e2c1e524932f53ee377df797bbb63f261bb52bea77e701616852425894d6dc5480b3a131a64cf809c82bd3578344e15c277e04c2c66f05808b6787fd4db13978641550a7bca1359e28aa7af3f80d1320cdbac328ac74d47e52d20b22c78adb0d36eed9cffcb77077ff02d6b341983e38b5725064517dd622649ab80f2ae92adb9d4724f18f15125af63ccede876dcb6d86ae93bedc1273366ac7740b9d568ea9422719559c448410b45e49bef1152087e874747e75bb13800b62295f485a6f40cd96a0424cca2d61e2733199a817a74e85cedbeb46011ecaf072be54547c3569e59da102c731741428806db8d3fbc78a02c3b04e746bfcdac0ff1b30e94548ea324204db3400c3f32d8fe5639b4ae7020a5bdbef2a8215782412283b2e3c118b5e8fb116bbc081c49aa781e2288b717f439f44168eccd26ec4b1cdbf4ce9f6160e8c90fa86f8155016d1297ca146ccc95596d30bc8d3998347e7f2026bd46051ec408ad1ba30e95f4a14c57a2e0460a8e9497115011fd37e56b97f4db186b806a0b385e182f164b9de783d24f94b95e4a7be047e6136e92898315ce8498664fbd2ed6a7404c1ee25790579c227a6d34436ff758c0fa24149b656711b595ccef929f722d0682bef6cc3c4619ce39a82913f14ad8834eb45a95730a62e0a915cc74dd8943dd7b4cf5666bcdefa53b10a93690393baf7975c0f24c8e46883ac782fe798a70579e6f7ab07f5d6239f72d3125dd60e698130ed44c4251113ed3589f79f40456f7548cd3351783360f06545d6c29508def93e6211e04f17756fb4f7e81cd655c2f362bab6e94cdbf96e13c9a6414668628847223c204fdcd632b229ca0765be471dbd27fb7a79b8364003c54c82f3163b56d5958d2b2c4a805db7896507f26a4619e07acbaa08b05e8fbda38e2ca3f9b18a6f23ceaaee48ba19497e80c58740060f531dee2100adbb82cac935e75ffb0e4d9e34c5449ebdcb8ef270e5e82b28d1289f762c8869969342b1a1095d2e0398c6e8303ba24393fce339c75a19e70aed8b4bef4d874c532ff6fa91d13318fa991ed87ff96ce5b19541a6eca800c2cea362dfee18c5b0cbd7c72e03571425c6577cf389c4498cffdecfc2459744c45d3bd2e4dd56eb9de8d3ddd45e61a65e501b09c3b767e141651eb6143bee8ef59dfd05e123cfa01b916a5f740ab891ca802ceccf6fa8dd0bcb9f1d253777855e7731235e284b8d33aee575976f247e713fd44e9f1a51e5f319a72d7b9ff8d206d31e53e354925aec288c49c4f56c155c735957bc2128a000377f0da0dc3a1cf59a0dbef90f6bae4fe5a70083045afd9205042eadeaf6b73a0d6fe71c57050c34b2468c27c1a03162ce7ec55c04b4df1bde1dfcfadf82d1a984bee07577204aca0511e4f6d2f78c2fcb59bed85d436200e4ece82c6796975682b62235a3557dbf7ab6eeedaa3967bec57f137e77cf2f4801b81bcae9f8b148f09dd5e3456a4d1cf87cd494b12e6915a239edd6ba20edfb1ccbbd5ccf71c687b7bc2008c42864e869adbb73509d3b3e4ccf74698ffd45221d6bf56a80c97e1cbd5b2c2b8857672bb48fcd13ed4f8541a989cfbe5c2fdfc4ebe1eb7d64c8830eecc221d4f9bf01edc16b32fbf20dee24a3ae275e8a7f62e97075c81ce3367a652b38268c7f27d837788812b3c59d1ef12188a3cf82b27799936eb4d065da0e2a610663d982599410c13094c4d0c7beb00a5d6c9bab93c5dd3c16d620527de564787501466a1bde8184a9e0b5795576674876a9496ce9f5bc53b3579412e7a71b57cb28589f365e91a93c1f0e2a0ded20c21b83622f7bae3fc18e5eb40de0fd57e650ff998972bb48183179584ab9cce26094226d5b12996d6cef1409ac308f210d4eaf9090969daeb9d01519411fbab60a28adf258765d4e3d1da11a559e0480b40b5fc51d6caecc74601cdc760860a2a8204c7a8d6fa3ea1c622c6f71f4047dc3d038c196ba93a9322bb526533b65b122c4298c64c5134af204dd9169f8391f22e5620b6549f74dd97709813f8273e8605c69b0443f5475a54cdd07a373486eba92042bf0e180c1538d4074a2a32f514b30376e95a70f731f825459892cdc72711f47aaa149d60c86b58188e56743f3c988b94fc0c3eb4d46ee6a1082ed9b3430d3520fdf4ba2365c37f4436e9657d6c3ab17da2b5c910a04d845b3f57c2dbbe0f84ee211ad8c48bc5ac230a6f8120322e27a983f39a8b2408710ca4ca23b0f67d462aca1383b498d6713d4f5541d81cc75 +Output = 8508ccd87aa70b72172a9894ccb32a2af70e92353d6d808fa6efd215a2f7a94a + +Len = 99728 +Msg = 667c4fc7fc34f5a81dc2ba49a7171d3db47c8f43d4cbd41999dfad955949b4f12f44876743ec28fd4baaa4a352f3f37bb83220787b02aa2ab4a129d865a134d071e183fbecbc51b4958004daa1221024bb3019b5480658f1ef453f8e598160ee353a8bac800e3675032c22191d0c3ce1c25ec224c440a61551b337dfbe50fef48237e6a18649a1e79c9746864c193f5ad7a462ea76165e3fe3d459f21a76d78961c0de0486d458b268a7b849b8b2e03601ea4232e6f14616ac8eecf0f85bb356d9bdb9fa0819237f6f45bf8be93de81e4918ab229d3a2843b4ca3a00dd675a02f216c0ad957fccf6ba5aa574662420b9b516e3e22257ca6d0371894b53029336b4b43b45b46e19be50ccb02bb7cd4db050cc329bfdb2f43da26922f9e194279a287d72e9ee4ed480398529d964a23aaa1f22e275b7b1705a989c4d311085dfd5555aacc2ca88c3e37e6b58a5f509ae502c013a97d7be056eedf0521b663d8190443333f8d082af90266884b8f36c704a7e4f812ae5407a1ea94f78e06d24d572fbf14db288a55f2e3963f639e632493f1df600556a9f9814d5a008a8ada2a524847a43187b599d66c043f75154c301d712dcff41ed4227f879cb4a9aad20b74de7b85d5430072fe0c1f2cd28c78760bb64ebc515f693ef719bb786dff504d4962a92e28b2f15de434757c0e5c6e62e931b099cfa0df9b728454e049e0db8c4a757ef1ce801ed7237575a1ab1da4832064020ca18bbdc49c57e770b007ea24f2775b951902df5b366fbe321b3891535bdd917989687a46bef4f1ae52dce2c3dbf8dd7caae3b9769753ada1f145eb5ff60f1d64e9dfabae64ebe20d84c88bd5516a631cf68b43a5b0f1d275afbde9058968d4534549a84818bd66f2d8631bc60d5c8afa7e61f4552daaab31b91930e0807b74c92e4f26b064e9cf02c02539327a3fb399c510422167eeb64a9fd0498d65c76d3af7487d83b3e1a8b1ce975a96f2948b7f4d1eb386fa4e8234e68b9948b3dd3c2d42de331ea04572947622066030eb611f88d5def25f4a8d950fa3b6cef51d40149378ddfd9485bb0f396db32aafb4e2ff0aee1afff15336cf8da1186ca41847856b90d4bd1b12f0a69ac2e752b9817f9245b00e0c6b091c68e31c34ce4b4e81043dbecdc99e7da1df1cda1974f8c1958dbbd41ea426ccbcd5a26da2405530aaf57c7b1f9fb9364d3d221bd00de805c325ffc2c363bf2e76ba3e2dd78f4c6f13edba2e40cbd5dd61256cf0919a01be971f63f492a79e9f087b38d54af7ab4a5a617970d7ca8ec37c4c3000e485c06c7fbe9ae212fc3faeb08d04ec7315fc62fcd53cbb5b184e98fd062db52f6dce8feba80733baee3cde2d8434dbf666ba3969dd769631319fbe61e7b895f8ce66a979402b31f0d9f09dcde54b3c4b665f3e2fdea97a00a2ecb45965631bd7043349973b99956b6c056e2024aa85c8917601bd4d67df3fe8d00b3203afcf20cbbed0c3eeb4a670f0e5efb2c6f53114747904a0ce145e457fc4339a4711288c7153df8dde1f1da8250c62f4409dd6a58be2b778c5414fb7d443cde0a419a07081bce6637e3b4387550398632616def2444daa83c7715c1d82d92aa3af3bcf53993455d3638bb0852d45d09debf2c2914a145e704916dbdd07eeea51ccea2dcc1464de6c12a2fd280a5dabf316a429f8e9c133bccec4778ce01f7d8991c714308fc8c08c0ff381f678b59b111acd6d9fbfeecad7ccec978387c564a972354b3767caacb1c00fd756f4d82e567cb1060c48f7a43fc801b4778b8b203ff2d71b373905037bb75a75f00b5fc651c1019bb4f176207344a666df47db40cba80f0cb67fe265586a65d628289703916c31972065e4f010d73d2701692046caf64fa83ba8fd32c65da48085d9285673f2c370e502be7386d4586da45c1492bc523b764d40b00c4415b90d8f998e4f97e939c169448d2b43e06ab32e8d02b52e6044ef51d3a5426006f5c5abf6334f6ba3f70123c7bb97d66ff6801698854e8f94ee7befee478598c5fd41715ba1e67dd79da8baf8d449ccf78e6ce2fb169f5e54aac48ddd01365cb73229664664a53ce89020855461a185fb84c21a21315829440c31a23c7ce53a7f26b5f15305fc275b71111966de4f90009c3822a75fe95ed7754bd3991512a0726dafb8edd06bdba4b2f2edacc494799b1737a2fa1cc39d83988b785f643f2d25594f13938e64a858c83e88929f20b11f98390195d28733dcc869271be4cb4f2c8c4c97d08a874bec336c60b4d864d52291c4d5072ba4d047977d564b015774ec7900cc114f3404d386f51c800ae13438965383ca829ce16888309c6954643ce9920416f2570b81a33570f29091267cc6187d946c61dfe5941d1b5fe3587205a889df0ee03c6e30efc168a94325950d5f8a9b8d49640e6b6ec8a6176587e17dada2fa2a6769ec90fdad34a72412cd74697f45e50de378d15d0d59695c6d62f36d8fdddff46a0730617b7d52cff3202078690522067adfc5f36dbdac346357156ca302c613a73e8dcf9e9b5283414db010da41caef948397a66c4b868a244e323f8ef14341cc03077c99172d0a8796a1a745845605cb04e50a8b7b5eca0aa8f83a9631fe0b22e54c1ced9928b220ab63b02d554a0578e42c844dc5bb8090f7d5f27b4d4cdc5665ba152e79fc06c6fc74d0043d1d5b38a1ec9815c3132a41db4a0b809bb631c0f4dfe9be321d94c4fa536b6ca4466384be93da95fbfc33b7a3c2ca58a5d0b81d233c2f2f69e3d8b5259e06c9036bdae7aab0b020c8ed394ce1ded3661412bba5714d49f48a054f121ea316ac02f41ddbe6d1bd58c25cb79c25fcab2b3f02d9045f81cea00ae8645646013f780b55a8dc0365569070c11b0fd0baa63abf077cb45e7821b46513b51c2c36d5df8527085280ea108a4cc0f012829778f6ecb7333feeaee79440fdbdbe41c26e2528deb8e9dfde7f88bec2c36ebbf187f2708878f1908484d1f73ceac727228cfb3ee3470c70c0f82e5f4cf15edd7757bfc301da93d4a78df02027c8c13ce5a6c45feb1f34f4201eeda6d6268d77876ca15ca9c4713b6667713464e426f37a4003044cbdedda8a58491de4cf550ab03b69b5e6c324257fb5d7ac6aa982fb5eed59c49eafb1844e38c33cff58501770485b675f53273321dd8600af954fb502031b0937710a920a44de7c8c5df92e461808d969e0f4e51b532ed9ba43f7a11235d94acd8e63744ce10d65224cdaafa02ef4949d1907abbacb14800112155ffdda1711c77456bb64b1d27f47a15f1c2cf1a1116f67ea078e89e9ac1aac2342337446f69bbf5ed8001bc03372f801143b1480e8673a1679153410a67d6e9bd831990b51d0bbd64aada3592a2abd6af858ec36820b1c1780dd4e1c179fc609b296ccb6cbfd166793abdcffbbd56df769150d1466c18a67af452c7e67f86ed741d163ebbd874b9d33a91d3671099620b6eddbbd0f31117164eb73ca201db59f1650131cbef5c7b1bb14089fd24da2919241fc9303c02def424ea861d88636bb90b13ebc38cf177f8a8b139e68082fa46bcfc428bd054c1bb7dd3ed7e9b86ed751736b6cc389a741326cc2b49acfa9e3a3d5e700c35708914625abbeec3aca5cc8f51d80e79c239133379a74f31a9dd9eaf2c99d8f5bcfea6da673694873d5d677d4c9ab0dace8fa1d7a0f42096f67e1a1b4e061a98a2e71aede2a8996fa1dbede80f44dbe0273e651b295be3634b4b5588abfff8a4890d17a3b357240340e807d9811eb615350e0606fc24c1210f0af8fe2dcb9aa3d9394605c28c5ecc834b5d578c706a0060c72da10297e157a984aa85bbb4291cf9314e1af78e6e51d0ce966a17811e29113081f321fb6c8d838114263d00cd9853bdd9eb3ba77d1a90375a1a0b9afb19ae12ab04429a894b04c9dee89cf8ad9e4ea78c7e741db3b02c4f53704e032957a13552dc4eba611a9423afd4bee4f2b652b611dd8c39379a0ade2773c904cf6b50611f842ba41b819b582ff08c0cc368c7b110106943326094ac7e2c64e515de255eb903c3a0e00981310746eeb7493d1661301df583cb8b318001a108ed243786f3ca61fcf5d838af73dfdecd2facbca58e1a0e16402ba2482357dc9b6524feddeaf7a6c0ed2a998be95ebe0fba136eddff76ebb6c4792d435e29e506953dbc9109eadbf6ceffb17e5a2df09ea1a6d9267eebbabc55deb589f71fc232c595f70a194b0886e17e0af18df47c602c8f87e9d12185103c82c182b6e07d063d573ab0e1c133576ed02b4a4b5a683fa2f3008cc1c1539ac18cd99665151e6944a90aeb2bf56653bd1c9cf35c07be224dfdca7916732d422b25852dca65ab4524b3f123bd8fa861158be65288a486f073d26f1698de1af0c4744eafaf792e81239e76c060360269c04590d197d9c6935d9d77cd0fab228cd2a2bb84daf8ae058a92222adc927a54047122d6504d88f25384680542814dfe9ed65514138b34b9a1b67bc9f94c1b082a3724cb7ca9d3f59cafcc25fa09a42e7039a2c824dac785af330b067f0cea6e79c01f17e394b08482472a97ffeb2e0490f32c06d48c6f51fe315a473579f16e3b349b224db725874b740bc219cef369452b7b37ea4a3405d4d7eef5e43c37f1b6bb1e5482b93de6405df60e105afc43d80915c42fbb1f897a4d517954fdc4dd347b32154944fd89a92b73e3ab38507c91b684136b8837c538bc0b394d63a11cfb9f5ecd6cfd6f59ce050aa9b310f7fab85a508e655885a1554ca29f9716d594534d2be4b18e9a3cf61444c8f189faa7951cff9ce7d40f061b24a012f9bf682f86ad1fc2e19f861b6b80a8a82a4c606970251ba4b7a4dfdad06d8df93d0663d3dbe9c4cfc4d73cdf7370bfb22901312a909d2c109e6ffd07bd4eefbe2992cd6a9926a27421dfc36e570c0f4cb54f76d13eabb84764dd6f732af050c8860caedb098f3f17c15e23b25f7e22df95de3646c27749b1d1973f085e7a377f1b1b0e0e734925226dfd6592d2eb80d492577971642a66b6ad4575aca3152d4bb268f6eb1f7fdcfbeb6490f5fa7eaf917462473a6cec98bebf8f17493fe9b994119a6d5a5457ea0c033aacc51d5c398003a6a98921e46531d01b2fc67b1d63c2015a7c435bf9d9bb7f28c2e984b0a60806cca646cc3b5877a894c40b9fdab33d4a502a8e7c8e317226d5d84977a07c90477b4759b518f6f80fa0df00f347326eb4237f23ff3e7898bfeaf9cd3d5445828c5c93aa24a4c91dcde7878dbf8d67bb077c83ea2c303894130e2a5d20f588459e1792216107584ca912c49a4ad3da8d0a023fcc4b8df8d0eaea75e166abce4145534ca7b3682bee6dc99e0fdd42144d865ebaafa37c41b30b25e141589d9ede48b8ca2264efcb6cdfb31ed4c0029c614437fc7d7d269aa5406876653ef4808471ef137cbac6bf2cc8794bd13b3afa3309360e1c21b38b0e4f5b3d3560d7fc9b86a02f9bfe128f98efc32eef9612b729a003f776d74a9c5701a53d9a056f9b8b5073276977fec4171e38cd1418b35aadd045bf71e71356e61eef7f7a77e4e4bc970e02cc6fafe5101b8032290a456b2660a46ff7983740246ee009bffc5d6097231cc8ae2c507aedaf446517b4ef73fc19ca0eef34dee379b821e54fdd029582bb4381f6f7070b15a22c6cc45edaf996c35ca440012fc54ec6591b1462fc0de6292b368c18fc21f0bcdf511a502e855e26053ad4485370095e31b1f4d273502c337def58d75943e6c5061c00d1129fbb096bd69250726c144951b1d9778ee4baa2e1b2417c43fa5f8448d35d2baed0153536836263b23fd54f6022aa977653fa3dfe89324ee4cdc3c24e801ba42b9fd5730f462cc73e73b637070d4f7b532552ce7d7b109664447a47bf2a2185b19561899e29d8c53c901dcbed79af6b4ce02c1b0590c49debe7ecdb44da57166738223f8a334fa5d51c74d1bb6eb4ae890eefee3fd136a8a03f82468597a59e7613805f7b6c77af30a1221218f5458e3336030dd3454e02abd3a24f2969f36706abe4af1bdd392b76a68f56ad144a5172e1d04068f5f5f2352bb5c0d95829b73e8ab4f90f8d7e60ceb4236521d5ac406d96be51a6e711bf66d0245f3c6d2fd746375a0302842c97615246061d4051a34ddd350637258bb2654956f5fbafed0f473a3c969acb2c1856086003495c22c2393e9d29c0b74c135b1eb249bd274ca6691cc4797f69672bd65ed9224c3107e45a425e80eca33b2a6fd8a2252bdb32e6d36458765a66c41809dd192ccfc7e953d870e0d460f33f3ecafe8c4fecd58815ae9a6253d3cb2a26160c88e87927ae55da518becc7af42989318da90a91d377c214649d9919f839e26738f20f3584033886bc892c7dd2b81f3aff3b00ab9266355f175d03deab6c8609b949ae46285350b49fd8c0887e23f124a3f77b6b33c1171224e007eb5abeced0b011ff54e67a28b7094a333b44e1a177126ad561363d09e623c30fd074a52f44b3c77ce23cdc42f6af39ff06d595c2aac101991df82e60438a72a62e87b429ee4af6a16e99ee120bd8448e6b9ea4b758465841021809cca2cf7b454602603135dc0c075a8c44286f4ad66bea0ea311d808db67be0473a19c694977b7833de7a3ed9409569262f8894d8c0202a3f544d29f1777925be08188fe69b80378a1bfb1061b41b33acef4e276c1fb260d2fd2b05f78fb2f7cd4ef00e56870ba61302c05ac0e2b20f3ecc0135d14b1f498b73df9e08c5cf5e5c53c8cb4a25c3cbb7daeea45d920004c40cc9446e0c0ded5200927c8de278625360c94f2b3b51b05cedb077a28ead1a26f8cddead2a255510ea6c25ecaf540c9abd1a2162925c5deb812c59f69d62594cd8368af56c0e88ab7a94238ff10c631ab2e5ca55f28dd84ddf8ad5c186c7ca1ff42bd1af9b708e0df833fedc73476fb9874fd06e228c2b684ff3706c1283748593d539417ff5701cac703c3dfcae39608382bd14ec005e26188fb45d093f6067ff5c4c14e04335c2dd74671953e9c8f8efa618ae1692776e848528fd33a294ae7ee792908602e5e6d56606d7419f256713e26aa669e98027d9fe54b457551a40599e921d39db8970da6fa2e18e785697375f3a63adae803b6021c1eb3ffffa07d8aad424c075284735b7c29e021e656ea345104daa8880916117f608b1493aea4233e00be47aca552e65ee76643659d69ebb74cc2720871124077b7576dae4d0e1603f3c6d8f77810ca2afd17e6b3bb672e9ef48ee1d9da3f01ad998565cffa3fb5a781d235e38b319958b17166212f565f80829c528ca2f0f7797db1874944ad9491318cd8f14d39b670cb0f5c6e67dc01048d775e9179dc7483da586ccaaadc354989435ca14cadb3fba05e33dc035cb5836bbc6078bd561b2545d660c49b400a390f921b63f7e21461c7ca86fa705cdf95a3b7f2b2fc024df636d81dc7947da5f83ae5afb9dd8b5a3ba7e0b06a3d5101b3cc06afc09445af7f23c9fe2434e97b0f71da84236c0de7f1c74d5a7bc8ddae465b34d23244a4921893288c9aeb180bd76add233131fe502cbc4cefcfb16747f5c7af14785bb3b86b1b70337c358ddaf87c6a2753bdb12534ed8bead67562612a97f1e11367d764ef133d9d5892bf6adb3d0deb1b6dead9b2d166d62083637c6d5289b283e7a43a0d20ed24a081312e080334f8e8d0efe01f1e8a3c2e79ef1c267df3236a598e9a4dbb0b63e48f67b707858bdb5c7554dae21b527750b779a2fe70ba9e073c1b28494824d5b52be778423a5f0cd6c9ae1ca45e4c2247da77b34dd13c9d0b1dce46585ea5f462d514f440883af7f85c5037ce5df3c774318dcfad2615aae67d1c8723751b3aae1994bd9af5bc37318bdfbec8a0d5d1567b005a84e5c24219b88a6d03120122d777cb26ba093f550306c1143bbd6eca7f0593d67d76ceed257e8c6aafbbd4477f6e4ce2164950bbed2b98da901a2b3d4e7facd5ff7f98269a2db6f261e92113166b8e52482c7cd67088cb645e3d97845537bfdb7356ba68d8549ea6c21054103cfe0409c829305f0d9cdd540e9e304a13cc31598192b23e6061880a58c809b943a4327b0ed6079044e6432c19b291f91abbc5d292c9fc11d303176f9e86ae88daecbe1884995f2496d3a15f1821190bda64d1d93f53047da087c178fbb2bf095345fb84d219c38674035c6f8250421cc385e9cfdfd467fc498e1aa90902b7b55d3e7f227fadc1307cf3e8cfd0c6b986766d82390ca4a2f84e7497623ecd15175934cd83d5ebd4bd1203eb128c0acbe353aa1fa73e6a220c2fd9ac4715987399c7c74b2b8d4a7a76c3e1b7ba2c8315bdfbba269cfd9b81a25e3bedca25eb5fd729748c8bfe502f1812ebf3393ac60370cf1c3b8cc29f3e555a09b06dd84c163a1ebb0617b1736efb7f9102023f5a31965e5ed2e9160ba48fb3c1b8a4a511434ce8095c714f5ab6ab7a8f88c782a61cb919e06144705770cbfc025af124f1637a35fdd40b104ca2928435ebdbdd301133924f7b215a191f94833a0bf5d062f36c88f72157acef9f6b3d029fc1879edba0580a95024bb70d73f9d760052fdc8f7e5183a8e98daa19700594391b1a38c889cb903369cdb7c6e4b068ebb1abc4744a1031ff233b02bd5b6e593c4b1d94644a7d7ecaca48a1d861577d037dccb16e3a457088b72d9fd787d7d01dd40a383b8cde34ef9644ebbe644f724bec1b39b9c971cdc9f7edc8148ff287523858aabaab7e4106605b2be57818f7296f1fb4039225b85777f411e0de1eed7dfa91526e30de21a3baf3b8ea17446a208932b6c80ec1bea5b9c913b8eced70f5ad3cd5d2b76e654c08973938cc4249c5cd0cb863b9e64f392fd5342946cec06d92c38b6499af6a63cbce135e01a3148dacf64f830df3e8866cb0f9ae76334a2a7dce09a07221df8f96f0ddd641d768fcab97d292858b2911d2e4dab4f5cb7cc0b0a4d722bb660323dcb80f1e176fa5773b59f81eab1c7f6004d96dd94ff7e6d4cdf05a47efdc93c51f8c1db1fccc58a1eec51684091869f575171987df3906bb382929ac8a05ffe7d1d5801e6c8e00e13851b46f0a0f5756a616744d3e1f6b0881b7cbad1462a600863cecdfe1252cd9aa98583c3871f5e80a6ff495e70b62213d4496e6098334b3cf1aaa52e5123adfb80188781ee0943e348c10fe649daab9bd3831d3f3e81a55ff074f33f2d5c987d315bbbf27cbd0dd96e35ff331369326a40b12e34df1c58ba87b51efa50047569e5d785ddda42a2ab40e47f0c776c9ec6445c0b08230d4a95dff38e245f232c07c3124e0cb0a0eca1e755f83b1dead9f8070b1b83b45b65381fb9ab8805c2a49ff4967f45a5dfd2028b10d386acebca47b046c66c370e8fea708cddede8e7c7799feb7e5161083b18539e76b6cd7859fd6796748d572fb2f4faf68c1ab09d7cdded97b5f88d23112968864b9327976e6156818dacbac5b59ee47e20d806e9ab1206248a01d1363b7ef250b8e46353f1baa291799208d8803057ad01ef92d53c61111a6736d44ba15f1885277328b1ca51764ea107ea71fbf27a099727fb68181236ffb35d3f692b1302acff061fbbe26ef83f6bd207960e2c761c4b48e9aa256d9f5dd63fb999c1e4d94da866ef781f5850ec40bd0952a125726e831906a44cb971bb38a4ebe24b18c5f08a5b41f06a59a7dd898e95aa9c269785a863f75d7640d7a241547c4cb1f8ed1e0dacbd2cacb7259bac0e56a8e7770ceb23ee67dd8948f799591615dfdbcc7a5e99230a33cbbbf1ad1305f1536a60fa285a82fc2d6f1af928e8b35ea4b1dc93399686d10db1ad349b243b11b30e2989c2b7e75e540efe06d756f4fea21c6f61366c9eb9c344d515ee49775cd1b919e043a1e4365a503b462f0b9e9ee102cf0cdd83336b5c6e7abd2de9837ab45479283380432c481b1be0b76f7ce56a4d42bbb6430d8ee015e653e06b251464c8918818bbcae72559e4fcf7ea557c44e311964a15f3cb58235f008f3926d2eafba9297cbc4210f9f1dfc478e5f00a77ae84c6205faecacb7f2eecc3ba4d5b4dd70933e6ea724ecdcb545ec1c616380c94e273c08a073241119b3e035664589543f9cddfad244aa8cf8bf25bf78fae0a7f75c4b3ffc3acc2c1ed1fd8753170cb26c01fee6d1eac92e5cba9ccde2313795683e28025addf57776eb6c97f7e4cf66aa7529b92291b93f55eaa9ee59a10620155f5af638c74071b642c5edc11931ef6f68e6e840d3fb4e78a1e5873bb4ccc673324c9232712db9518a81ff5b2ee4bb2f5faf0ac92c1fca3982d83ef4f70bf72649755cc4762d9cdd25395302b058686ebbfa87080497411d0fea6c31e2343093277dbc6b40b0bacda5447f6437fd65a22041e399e7e221a79ba4956f00e6114e3ece37836b6791877d4bdb0c1054416e0f2db70b50910a4dc88f5108dd8207cc01df64c950b2afaf2fb80c46e3ed7a26eb1667b8d91469842913059bd2a892711339ba998b1263b93f0179c12d397e6146847c4eebfcadff1fd859947aca2fe1e555bf7095175c1a2dc0a9e756b8ccb194007b1a03ba65f32f37938f40575e92eacbd9fae92207667e6e2345eafbf37c7602dac6aace2024c9b969e8cde0ad18b6049074f1d2d412a3726c59646371364f0411c16bb84af891e6334d7de679c7b988798b699a70932f65eb8e6dafc48391acc696a0f964e2fa468609cae9634477c00baaaaf93b8c84c1377141017bd8e0455fa2f511fc687542e8ba5f59f7f37353bd6f207fb353461cb69e8928f59abd664392c282801d9573c1eb85c886792ebc0525748e668be5c11f62c086c06d7b9818d2b3db8e66dd51a7f9e8b5bd3a2c51898a11b5d39ae666a86a619b7ab5bd5355ef237d75d8af551181f2920aaadecca0e982767904ba660811f6e772f7f5107154bbf8d4e79df685002deddd6fc885e1e03150c55de457a5060afb47c8b558018fc7de3a183bce78e11549c3ed7c05d2fac8c5470af6a41592e837679c70b26d0cd18e03eeeb4573c123064ca85bc4ea8593548c9063e3b055492c60e7b9984a588398d0e02ee3fc1ce1d3e6250a5b9f3d3b8ef492be9f2bc9885ab23ee271f00f387f0f7099327850dc130ee7ea32677e2bc52d66592eee7c4042ea069de8147d8ab14e249ca97f096c4455658dd1e9c4de97759fe61b5ec9eb6566d34e531e4fd4cfeb80bbc186a33cf8282267c28cadee868bb3c7fd135ef442b739765b73d2a13b85f9790315baa8af15b30a7cd695b612de26814ca287e55b598da869cbc29a749c1356f6b2bc49c99c7bd8794e18dfbccb8c947262f1592fdc5446f67c7c1b2b9c52d814d4249ae82af1744059b3c5f4f24a9416fb17aa30ae31e49a0c8b9d91052c6ed5f080167b5fc8405a8fd3035bd0d4e2a2c16762fe4d8b03bcf26dac657524adc29e6b47039944df2067030241f5d0129e6c5d1de948e426e7d49ec2196acff75344229701661ba34a65d06d47cfb0a662428535a21eb1c0a3199b791d3482ee107852910554a12f3102a78eedccfb10a6ea6c44893d98636747e02bf180e1e472a187cf8fd369f56cd414f1a48c13e3d4ca7eb53f33fc71acd6097536ce619d02661eacf160fa786640852ffc6b9f82647939121480428dfc4a73cf4d8b865a482ca3b3da9bc73ab5de94b46619f29eee6d37e5a9a12f1ade1bbba4a626c4beac6ba36ecbc254bec414a00961e5b17bcb2cd7aa7f1506aabad04d8fe15ea13cb7b99a4815a32767197953b9807d50ab932ea4db056a6da02afeb60b8f61a056e28ce4da788cb3e63e731c2f423f64c0dee92be1cd0fc8bd96fd6181f0fe469fc55c3f90450d8e9eaba865d517aa424df6e2e9793683ac359762ecadc6731869c8adf7040b941c02d96fcd65715c8d9573b249ebf2549cbaa4b5c3c9706e7a577508a7904cbee0b5506fbf4affb4bb49fdcde9c450f0febf377c637f7f5f00eb42e2cdef88fc712898feb7e013413fddcd9c258d02e756a5d80d682a43b32097cad2d65c30cb51cf2bb343df4c90afc39bb3a9c068b63920ff0f3e747e097def753f6d70d4b9e73b7113ef931c117f8dc08ad2e8f2dc2a9314e842c88ed06d44cabedfb80526c5d021972796024213bed4b83d7141c78f8ed23f31a0e696634a43a7b9bc22b0523f85c368728fb120b9509235f3d616fc769f6a779825ca146268a087d7bde530dc361f3e9314dd1b1fbccf78eb1038d5ecd4f08118bce9e52fb22fd6a54713c628bb0126824224675491b662c190abc0442b67ea9d2c845a04a8ac02af4eeaa6c77d2f9cca982599ea47fd8001c7fe302f0b4710bfe517e783c4bbb85055c8471b04e12dd6776f276367fb5d36369eaa0fed049fdb8723121f9ec55432cc4b2ba5eacc4630705f94327a3666d95d0b82694936e48a83246e4a8f5f52b132d1b8fa77576253038564e9f7351965bbc37dcdc8449b47599a50971ee0507629fa937b63092ec8b16f1dfc578df165d364e0afb2b4008c8af37d87d60ec9dc12343fcb1657f80c0a7b23dc13978b44245e5f71c10bc0e487de298f4d312b5d6bfd124c19da5a976f382b2bc3e8539b3f2e5ec65bc268c9e0a8f93fecddf194c7d3cf80d5e6c2f55034784de106c6e57443431feb6e44b715e270fc1d8bb90c9656ac0be333cd907deebfc4e369718d743bb0e108660136a829055687b0ee1f57e44c4fba17d70318c546235386c02daf762cbc3b500ab317db4ad193f40d57ad0b24bed3297bd7e166cfeba9f55f3096912af3eca2edd6d57795efcaab934fd639d9fbb6df2859383191706f2b9b20ca0b103aa4d516fc619c9b23b46e1c62940eb068edaf6931bdb45f740b900088aa4280f2ec6d02ae6ca8beffb9b2152a36e86c98e020caebc26d7e4917d91bd2b7e601bf3be15d67272a75e672fdfa216f55430e26c9a9d1e6db72721c4d6999835406f21bd873b15190447a48d847c28de3f82b3a00a29eab8cd081719366479d1af53df498e2075c88cf2dd3a79a981302e092827c21ac80d01ce9b0119e5755b970e55ec924f3a8726a638bf25f1caf3080b6a882c385f763bc3d706e7e535dadfe9ac2dfb8e0d5cbaaddda5ef1bab2fb7d1a04bae4a58fa632df0af092c61566f2c0c9432a69651314df57441f1cbed22a3f3f9b21a5aa161551184e582a0d72f1f9caa9d5f7c6d71cfa8b28239d33531c88b199f6e0e741d83600ee4af9a66070985f6a58067b8637b1de919bc6a0dcc8a8f33dd0f1c7a7fff05d46e7af80adf34ee01b2d3013bef987da07042397fdb2f28d0d4c52bbc7010295fecac62cc9fe600512d1eeffdfe70ef60ee93e89246007d77ec57e340d6fff435c40d7fb22f68e3707c2adc0676499cb0fb761e4ef545b7b08d8fee109b158de06065f8c77702bee609bf6e5f416cac18ffb483bcd146fd031f33f134a5971de8267c74105ffbb9393ba44d0f452146206215c0e3c04a78f90a0c97b2ded0cbd3801a9c97d09dfef379a3221e6caf92518d617dccab9b4f19b6e285942c07c02bd5061863b02eb29b2d8295959c60b932e660617d7b7fabeb8b7d66e2798323778d098f7ce9f700babe0a4d7bbf7ae34cd6da1500163fb4f8f2a4e0a2ac8d1d4010ebaaeb61400ed79403f3d8bc463725c696415d662391c751219bdead6dd60dc57410b70251047a17352eb57b0cde471c5d8c9a52726be111ba409d646b7566166b69e8b2710b2caf68a719e414003a42f79ec1c17669cc9b3877e8b9cf23d36a9a5f875be94b73c463060cdfa5c3849e2c20d99d75b4125662e7c694e007dd2ac7989ae402ebdabeeff296540852af9ac4baebcdb8733aa902393fdde74a0bbcbbbc2c350113e605d413c02b86d3439c8613fe3987cfcdfede155b7c2c13e6893e74423631ed2101da12914c656fc60e3bd41ac92af052bcc0212359f78bf5f91868e6cfd99e121ac897129fed4dc257aba44765e8fd514a6e089e5c90d9c075103f1fe8405141b96849490d6896bedf9e2c8ef50a1f5312b070d46e3e27cf63efa1f669af2c374480d1407c1c71430edc14f661d87ddf7b5002ce754b9aab2c7d38713a6e577b25d9d6ffd55207d84c2c0388919a407ded1465935afd5cdb3982a99b43c5fb95c23b018c01527f050158a14b6d988fb5d0c6412b069d95e7f1c69f796dfc400e856efaf1e764025295269747de1a93108d2c409f60726c58bb10c0159e5a4d6dd53968366ed0b848705f8d84ca6773158a0f08f64fc60ab4012ab476bf284b3a1965f46180ddc86efacb2a0b1bc8584d30364138bddf97862ada24a4b9af61febbba457c04d55b4c9c3117e3b7856a3ee76b946e91063a539ee9b8a87234b83f2200048ee1fe986bbc5afc1488e6d0721874a89fb3831ba5c41f1789d4027788b6ffd8a001a1a852c40f7fa77432b371291a27d30a9e63030643ea4fc660c75edf7f6ab94b05b2891a164ba365b33ac18425b612809f3af6cb1fd8022f95d04b054761e1a774df992837061042af8eec8f5dff65fccdc7057c798aabf9eab9d690206620fd345709543c59f6f36fd67ab48aaad3677233b87f1aa7520ba7ab88e8d2217f358e416108ebeb5e5f3b3bf15a735f65a7d4a5973dcad8fd4d14cde77525390538cac52aab0e654f705be5dbe8e1c522a53b462b1e50c5b6a778487da0e157bbec300deba56b6ed20d16fbbfc89c841249f13efb8b761584011d43d2cfcd22a73a083e2c5dcbafee1eb5a626616c453d7c3db48fea0271704349e76c6bb243d30a9983763df5cfab8c800d971b19b0ac2466d070a4bd808055455cd5dd586147452c024facb377113dbf599a5e6a6c662ab5bc25226febbe1f59c9958c87250ad109e34212cb4f291abab1b79228227377729d36cbe059328acc5632df07362398784fd4d806fefa0bb93e771f1b79dcf2e59e2c06d773e37ce82d36409f3e9d81c16e8f642c2d8cf90327616e0b1aa88255e48e3d1ee1d9def373291619e27d732b67fa1f0583e8cae195fee5c0acdf110c9ae4d77b4a1c99365391c83bcccd58ff639d7158a915689bb0d4ed01d88a8650e6b73cb756b593f9f3f8c0cea49517868901c3ef461bb9799f6def9846afc86af08dd39aaeabb6847be5659911db980502ad7b900303a7c28b51514b9d59c1a2e1f106ebfa06e91e14e11f66bca9c3c7f529030488d419c09b067de3858d583fe1683c74e1ce1310e67356fb4d0680138bfec1137c96f6b9f816d928a855758b177cdefb0c0c1ea3182372216bfbb730ebb31f84885228f6c909cfe1abb800ccacb4524923c8f11cd279dba0be8e50673fd08321530f96bf3765c5d839bfe24bc8980126cd0874c63efefa40efc93300acde57b086d5285c6ab425d3f870015091b15359b2d68fe8813935c9a6b448435c6402fac8acc614897d569b90d546223286b1ac7b392ac9c6b2f5028a56787777eaecc7c29d5830bd49c0f8aaf6990bd1a081e5d03a2db233f2a3b444b7a9e624f87ddf1bafc6f82d9fcbb1eed9e35197852ccd58df80ebf080a5a77cdfc4d68c171d097cebf8b40207df9003880a3dabbf1b2cbc320cbc26e465a3d9d7b290d7ce340f8d57d7ac6309645b920bf81735d6b5caa43bb76dfda7497003a6595c2ca62ab7f5fe4928792ec2db426893275f50616eb6016a459c50bbd5a354a381b32667ca5de5376f6bfd61d8bca9c5b44fb789e29d8c0e8d2c67229c61ea774996d6530f6c168aca62ffaa1aa7d675082d9294ecffe4898ed475e68be46fbcfafa3e5750cb98288186ba0368acf58b69226aea558512c58dbd016e6bd5eb5cdd09e7d9532173fbdcfeb8d58b7310ee2056c6f3e4d61da8d50e932403db663e3aeb5843e117afea22f381894ca32e8875f02e16639b0d1cadf0b36f1d9fe94a59c819fbc25555dc9d8c9b8571e45840af182abe987bea085c8beab77fc87b6881c7b36bbe826dbb93f29033c2e095fe18f843504d1fbd532b06bf65f2ff2580fc10adf99d46fd6e4d4ce8fa093cedaaf6b50035482e8ee7628abbdf3eecee7a10cc8f0f264b0fdd13c329410ca3682d927aead5525163ab493e648e2b36de3e0623e2142236aaf02d7fdd7294bb0f6d346d879832304687274b45da8186fdb5263c2c705ab2d78fe2a78bf4692ce95324b662e7b2723e6346d8e32c078354c5b740f88a93659da27b64bc2f539ffec7a97e002898bf5327ec0ec8ea86d6ea570356cbcc98f7041140ddf78b1abc57b20cedebc5adc18ebc62157b7ec726c75450a72f9d301114c4793bc470852afbfa962aaa24b91df608f014844e8f1cf4a2e75bab65225bd6a36ea5ab465e92f2898c5ec5af847e94f4dd336cc4a960782b1099c88d377c5197674435756b9b454539b0c4ccd58a6e68739cb946dc995bd512890c7b371d8d86ab3fe96575eefb18e44930e575e98f4df874f63eef6fa68a37540198eae5935a83bf507e43321ce9d45091612d44fc89b5e6a813ab8c6031c5222f4c177d6af937ecf0299f10b19f52ee6da8c343be06f217592dd89591b2051a1d00888c1a4d0fed54cc4f30c124a64b4e22ff8ddeaaf73290f43e3541f53f65531a03bbac3c52eb01d11c39545f188ebb37abcb645f0b5dd6d0a41279e1bb2a590451b227b04a0d819eced47238f0e03d4f8da4560c77c0b229d3d44060c092b8243a1893903d7c5a9d2da8249775685bd26fc1be998485ac6794249f5a97c5f7e48595f9c4745f1734005e7164f04f9d2817c9a3ed77d14cf2adaa9db589ea9eabfcd3603337df3dcd119d6287a9bc8bb94d650ef29bcf1b32e60d425adc2a35e06577d0c7ce2456cf260efee9e8d8aeeddb3d068f37a4a09009f59631d8ac45ed892c51678055eaa208584d70f5ca8d2d88f893ac927b6372dc0ca222c79955393098ecfb969b7fae7f24570517bbb0df1b3fbd32f57aed4129f76d16ef18ee2c2163a86c581d9f5a531a259198d3a06d5db98d07a8c9c566b661fff39a52972e26368ea00e04d1104be1befabe39e43d160f0a14f39173474bf061a30e6ed8a705b9a48000779e3830222a2ad21604b90de83d411efa804eb24c9a0c939539ff8793f4f4769f8c38ca8472071b9189470ced2c77702b73e2b21eb21873ef439e746c86e5b7a32579e1b09d7be3d3fa51d9c6e19c324dd46a120eb2aef4a37ded94ee60390cacf1633d4db36d7004df3e3d1a6499ad872c509bc3a1b560da7052afbf8cdabde2775fa504bdc40c4ac1760091bb57260202fb15e68717fdbba2368c8712ae126c3fd3e37dc16afdd02661ead4f0bde8e5ded3481e6dbb146f9d02f4eff89f5273d128bd5fca468bbc9967c38b0bb23a594840fb145a89ec1de91caf9e4894c71eb6c7fc53dd4000379ff0525e12206386c9aaf8705669cfee0cee853e0a74b796751668000440a268c26460f30feeac93e87905d96943030a90de3e7444296b02967fc80f462ebb78892bb5f509045da92e15ebf79cffd198fd56a1ea009a2b8ba169e527acf2918e7cad190a094abeef22e77173f68581c0d9bd774845af3f591f3c88f13c756cd3245254da16a8168e4c5561f57fbd5bacae7b88351c50ee93985f7714009d966f08832d0e3806 +Output = d00120c82bd807d007ef23b56498c8c107ab2cde665d6bb0519052d75fd23525 + +Len = 100824 +Msg = 20d1b0aba5e2d864298b84a7c5cbca084b7d25e3377f0da1e214ca36f98789ee2e12b06a2dfd6fe5d20a97bd9911b02e56e84660268583a4a56703fa6132e3d88f991b26fd800e8d486260f14ff1083ce7fda65ed1971692e97645e29f9a43edab2e9ae8fdb3dfe3f35b864dcfb3fabb6885eee520fdedf1150a39f59c07d2b7eb9bd5b715de076f3cbdb2d9019fb0324049c5fefbfe324c93eb863b3ec3b8bdb5a7739b2d48b1b9894f8b9ccefd4f29d70ed4af4ae40a28cae1d5bc6e151c8772191d9c2d3a034a43daba9e1c140228959fc202f5f59f0f22b4ce811544269e8bba7ac3fdfc25a9d326e6e7d52defb8e2c338ffe47a1988032b1891199900896652331786d6405e9ffbb880df903e602641deadffbaa01cd5105cf4645ccfd06da9efa0ae107cf21121d870248518a9c9e25b142fff5a51002941b3dcd5befc078657675ef100ec905fedbf8a54a51a336e583c5a8f72b2ec3f70d56b4bf2949bb212737fc2f5d4837f9f75fb440c3bccad7c2e69b30ec402199062f808962093f6c9cdf7cc82335447989b5e9e7694fd6670f145b35711a8814a636a52d0285618247bb054d08f6a807d399aab0aae2c63db8dd4d77420473d46dfab72c8354ce0ca8790a507732df2f95599b0f110c36a660b00678d7948162bdea2b0a8cedd1864f881064e640564b2f942f852422844b972b0aacca511d4a2683753957c718699d76abecdec5a9f502c7dca56cdc5b97bcacce9572b0c3f528652a5b9c670f4122b3216ad92946c7cf7326d24380090541b3b6c5693a01ee43fdbec3c34422877fcc35616de1b91de60492ae60b4393ee6ee77bf266343bff9cba71464e4fea6f5304c62f5958d61d72ab49c1cff588eecab75e522a325c4ca3d87cfd9d0004a237ddad218ab105e1323e12df0b7d38ff38935ca06a014a725e1b548ca8bb3cb9b0365513fa8fe4d4aaebcc6847456bc7bf63bf01ab09cd1ad56c4319f7e95c5cc6f7042e2f5b3d9ce19bc1840bb4e8ee670fcd9f77b2acec0fb48fcd13f32a328209039ab37bd6e1df343759e032791d3880cfa25564b18f14d981cf833f6fe4eb529a7e0e59774cad9f77124d27e4fc3b9c0c32ce87a2acecc56148cf37f21909bb1002c65bea8452c5c9d5dbfbf232774cce75698348eaa05e775f80427d7ae52caf5065ebf632d68d74ca10176b68f4795b96aec06bf2368e0a3d1dc7d6af868ebd8d737062fe42dec21b77e11745bb09fdbb25a7d36bb93b64092e30c65ff5c783e47652f78f9da2f9ed95c2be72d3e6f90d579e47fe2e4fcbec3ce4153238c1497bf8f87d8eefc0626bf423279644f69ab3cb0e91539fb1880ece4b8bd25962577a80ccbca2402045ba1b6a1b5a172327d5096077111349e3966ccdf0e45f94f40a97357b7499aaea05920162665353e79d9afac2e193ff23ac9ed20b13533e6953c39b84ac01469872e24ec4610070233105463a6a26bb927aedc2a5043c48ff7c8f669df181dc992992bb09f3276124b9d2aaa655d4657625e00586622299fbad80ff8feb205433532aaef8c5cf0e2f5e8a90cf49a5e518d8000376d30e1ba81020cc2143e696af1832915a7f005f8f47b45f7eefa223c0b9d3253dff06b54dcaf6361da1db8a559f33cbf7c9c23c8a9ed87f79efd208b6f0e3d1a290154f31068aa649ac08196c11b5c497491e8d6a887e5888f03e7a41a6b8706f2b40d29dea65826f0d74293e953ee402aa1b3a752f2f52759aec62aa03d86b6a7a9124d99e0e33556c27a311545893ff92c22bf4bb72d50796e6a93a2ecd285c250f2e2d4b0d22c46f2a702e768a3958aa1a492e54d049058c343536501f110cd4c2d8e119ebb683c18476dd225c3ed3992b7a6d20d0163823dcf0e990548d442eb30b3c2f2f565c083d9f6580570a3907fda7f74afaa46804e8c19a17f603cadbe9ad87b6616c15ed5ed210b90205519e99b916f8d65b5cd75f8f900c8ddd67846ca70bd50a5f7717eef724f5e698e50306960f53eda4de434a4414989f82e3d145e20db5b1974a2ff5f5ea5b8929bbe14c282d82c6e5b4f0b0c76ee3b65a06697b45d87dde7c56dc7cb6aa1475229dde7455b7ade987a7879900e61459cd98f516b7b356197662c78921ac4732e951a28407f4fedff37fb00ed7c4541143601c1f22e568ebed3897271e371d46e89fd687252d9b2f90041215344fca642427879d6db7dadb499ef55b9594be3b8551228297abac61c5fe56b9ffd09fdcd8b5dd988071d572f25d892f6e0c51992a2d2d7f45b35afefc3423ff208ffa01c7d2c719435b8036503dfaaa91e5ffe63efda0851790cc8d9c6f22f17fd4045a5a46ed269ebc04b1cb05f1d4e767efac2987229df5882c960d77fb9605e7e46ff7d8f6ca79de886bcc7f15b656dc4a7252945ccec7e59fa1b61455f6980fc3c808528b0abc0735ebb9710f57c78a37c123ebf62075ed4f37010ed81a2196c9eef37a53f04f8033b9fca486c023badf200356979be7e964df552c2d0989c21d682219f7831a91a95dfbe023f750b569175a9be748052006221a37fccbb6dce8befbf61ecb0581bf5f20ec8e0638c0fe2e9183902eb8dc5b87b9f8ec69922b5179e8db71d1f99a9f48d2926ef4c126c6ee0ed63755e6638e969834a6ea04f981204f8e979cdc226ea078986bcad52de8de3a5c87c678ffc5d720b6d256f38ca03b9ad83934986257ed7cc72e8f5b1f8d877ddc258857f528d3b94517b6492ed5523081ffa213a280b945e75f4b3b42dc6f4020bca36990e111cca81d11ed2448ee795190ed372a118b3bc0a6075ddffe20e9eef22098171519bfa88d6fc7b92296dd10951dea4133ecc619a9caa93d1a22e20f6f06cbd1ef74fc0d0fd8bf348bd3c485b53b16300d634ebc139c07a659fb914bdc5dea0794a9e99f4a55bddcaa2c9679994ea240c9783b6f8a855f60e3356069e12edc022f40f025e7eda9fba829bbb4e95e76b68cb3f5fbb68e99b4df57b63325808b07e6c278698da96bd7ac529cfe4c747add819de42841be9dea75eafa6f515bde61e1b6e831e58febb8df309f1f6a9696fccdbd71bdd01e534acf7596e60cc7bd5649a4aa4697aa12e8694a2ddeeccfb25a9b9b02840eb4a31c1280f160ffcd1030461425704affc6ae7128af047a24b64011c00143a08a76a7699473a5d274bf35ff8fc176a698f0511f538b59bb9f8af657b3d4c331a8b234fa38847c2cc5b3ae9d9ce622557c791a9c522ba5584716c496fce5cc6714410bedf48caeb5c6d2e247c4fc3afcb3475110adf5b0f82443f2f6249a26ead809746b50f3041681051b268e6b874646443ea3ed5342443ff7c79eb25d9863fcf4b79cd52143f7fe359f62829cd1d83c56287b99ac22e49f1b8cb72e95eb7a86e91ba70a7f36ff4448b82228f5e05d9d6759c33967197f4c988a6821a9e7d680cfe9b47773a4d75b28ab8e09df7b7b715e17a156eeefbd4f5406da12035420f1906aeda56654274bbbc3d0acc36cdac123ab3d77a86c48af394b34890afaffe213e3781bc10f961ceb470d99077923949e5dc024fd57c5742ea09f0e26a11c5a409f7d61ea9dccd79e7e7059156bfef3b77452e5557adfa71a4c432abf101e61ffe525004bc67284beb11e73530912e5563a1a43189b3c4fe79847643d10aeff38fc977f4a5230293229426f2b1d087263f541c5ae8384747cccd4450969743dd32dfc665108add0e22b02d6046d87a2c6eeeef480fa601ec130115489e31722b8c07c3ec7b19280b602862f45c3387e676d4a56f4c878569e0b2719264540b7d0fd3e8e1415864296f5f70258e5c30d2eb97d7573b47323fba73d1c48599603012b6bde9ffc321d6a4b7dd8a49bcf58041caed96687f98ec04a7ce658e5c20e34942ab7d22e3d191a4d3f3791af0465cfdc06083309b49ed53d0cfebcb26be0527ea49f1472503e8e4366aa87e70c3e7942ac8c4402495b22c814ecde883a8241320120ce921395af7519b6ee0d8cebe896c8edff3a63cd9032bc39252fd7fbebf868c266542d25632a81e52ee72f72062084b1ce79a8fd05c52e6cf86ee9533617010c458147f693abc6beaf3e9addb92706621886c0f26ac78f0dc10e18920cd9f586d3e1081128410fc9dad97834ebf57687442a54b4a8810aa4e7d80ec154846cb8783b197d0832848f15826f7d83d0fda9bc2d0c4ca53bc4bad29170e8f6618d2b9d5821421dc64f97c9ff27c26901c34fe7578fc14b3de8d6e904e90dd9b88166a801c9694d4795695f194a0a85d0ef012d6f861b81ce9c8196f81f3ae7d170f103fcb9f982fb818e3d987d5ebf84a948f63f98632e3708424134ba7607f38155141198faa32c388dcd446ac5ff671baaaa8d6ea03cc156a1508163ca2168dc19450a0f759820e5ee76e5b9472dbf6ab1b122afda92b1ab262ca7c23c1e76aac5fdaec570491fae3a9f4212ec31d5c1e574c604191852325a3d6e7ed7e46613e2a3c463f69e73bbf8b2241bbdf3f146cd59401566b6eb10c4eb9e3fa05c803ef7a115900c7f6335b016537fc15b5b21f1c95a89c854c370ed9ffeafa16e0b548c5e69f5bcd43644eb3397e400525a7bd92dda0948da23785bbf5774e103517c294287390d85350f2f71b8f383be377c0eeb893ced30535098b57136680198df57b53905087aa8bf07387d5351893b4b176d2fcbbf3f9b212ce7149e3f5229a49d1f4501b39bd77bf8f0afac7299ab117c19945dc6ed43139dbf08536ddc4cf484e874d418d1096c8c0116a8efd8d2f5c6597f9b0b23924d75a314fefa8948f793788e273f0287ba4ad37aedcf2cf7207c94ba2c95cad1f83bfd0247ef3f67d452385ba12e179a8cbacea3231a7f61b926310bba6cc8493b783498d553e8efb4498ea3ebeff9880a655b59f3d9b859e94c9a3bea99073f3fb3b09f512e6b29be01e32dac8a8e995ed2e0630513bf27d877361266236dfe2b74d9de6288b05d1b01a0c28d05c017ad89c78a00d07c13ad2e6d57d612e4cd2844171fb16a9fd3f2d12b2a366a7648221376968c18d76591faa7d4e16f53f35ea9d228e6db20d26cfaee2d4ec19876e2f7574f52f4b864ab624c4f3041a1b9f42d72c2a8e41ba3b1034f927e100de718bdd07cfa6b075924eec4916b90b86713585fb59f8c788fe874b8236d61bfe3eaee4be72c86ac8c2326786239647f45e2b101c974db1fdc3ad690a6c3bb95b480112f568f4c8f45d193ce8942c6de9a8ac0c1c6cfd9f8d2ceaf3fe42a2777a103aee492cbc598cc55bc2fd02fbdbdb0320d0573578fecbbcd8a2da548ab4df19b4ed26389f9b068d82904fda85204cd03213699b504e1dd5eecc2b1c552ffed6f78619071f1bd638263b3d9548c9b3a2583bd009140c082aa5f66cf4a2176dda8b4f9e32ab4a8037af1a62cdc736b3fbfbb0070914c72f0d86a81c97f2298096d8a02225d4a5a91e95b43bee70f5a23f95269b1602fde6f11967b650b5c4eb8e783e416b1bcba54f62af4561e695130fccf5f8aa4f1eb497d69bc6c97d781333e260787cf11af96cae520be298839acf0ba49c5069b83c4436daca5ca9c17c399fbd33d5e51239d8c142ebcaf74f8e0fd9c91282d348d2a8c2ab3da4db2faae208bb1ff0784fdb3654088195836781449fb9e7cc2c4f0c17f273ad1c721103cfd5d079672b3251e7df0959cced59f90ff62d8886c5496d245eca753e1f243b755fa3ecb46e68226fbacbd0fb659579b4556a716d4ea66a405016428432c796553e8bf642b23fe1508fc6838bbcb877e436173eca1914881e8efd71894d79c901cb1f129cb748031cb69fee183321782230aa4d37c4e24af163d6aeb7cfc937edbdc3be4cbe0f1c46d7ae7d0b696eeec0ad9a2930d2be277b6738468a5a14677b6f2075bd66f371415b88ccefdfff6072257d6f4fb2f6b21f0198c59b4d19dc5d57abc57922a3b6aeca953a20076161a930ba6beef62a5f5eeb8ec84549180af61fcc1a0a718e50d1ad7a5166602366c857e7bb890cd793bd5d70bb12bebd77c820180febe421e47c6caebf0d7ac3e461f36beac8777cf3ad0ff51aae1e68a755f1060397faecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c9189166d89b391beff97d77a7b2ec9b2a9c15a9a2869c87f21c8de0a50bef6c23659d722b46518b7db802a8d7d47056232afd41ef63bef71d25d2efdc37f2cad7e64ad8aca787de9ffd3217909d3c782ad1da385e1a93900f1996c00faf52524b6441a24205049ebc91b5cbb8577989a6585497d6f242d931c0835927bc368de8a629d8d7aaf0523b3d34cc38484e0fff8814654134f35be9e13fc40aa4c6011676ab8052dc728386c75723f9b8e4949c29c2aa8629d09ca0467209a2af2c383e9a6fa49ae4b2b804f7c5d7e2f1629fe703066f8d16fe26bfb5c52ed5278dbac6db1c4b990ad9791d9727f0da3af1b947dd86bb3e46a881acf7df3d8d52140d18015a7e36950f4f396d2477cbdab9682480ed968100f433d1d46a3db17ae6bb9ad4d34459cf7bc0c04365739c1ae137e7b5e1083e8b0ac695130b3729e52e4cb61c2ca5eafe46561adf91ec354292abf6420a1a5d3013c25f7e6c32dddb1246d3a010a9d26b9799b00951ea7e9af34ebaef12d3c63737ad99db3536b5a6ba3358292559f75e9710e88b4d765f692da79b869e3c61e89d11aaf30e4c998d4f9aaf7f13bc421e6e432b2c2c97c0f9673e02cd595b178a6e75fa8e9d7a71d7f9043f6a83da9bf543bae2b397568990ca9c558ee83ace67d162f1748dca25cddff870b21dbceb293efe73e935b9a2777e48fd8ff6e16fc5ef5ff76c84449db72afeaa1e8869180389964896afcbf3f6aaca63992956e3edf0f4743f2aefc1dd019e55776de90ccb490ac782ac91645476abee7329a31027fba9d0b529d37a868d61d9857345adc9a9e35a74d515dedb0b7205e79fd0e0bb3807739626f8aefbf6ce9f104384e545cfa86835d25e47d191a712bb33e33af0d095c5aacc674685636e0de084ae9b86e3e1598e4a74897f2fd37cb88ce6050febdb2fb9c0272b6afcc78cbcdfccb7d50e169444e5608a2d0e7daba653e02b60b062178aad4043f2eb63856efce5207a77d083224c293423562d074d2fda932b48b1e6e639bb786755ca5ebc8201c0bd48968def27d76da82e6bf874c9db25b8db5105950c9fb10f6582816f1a287ee5a6f11a721d731f05bec0e6e5c8ebc94e90c8da5fcff4d6344015544f6b63423cbb689274d70331832fb33966d51267378fa0cf0c2ac2ce1c110b41231eb9f408af835ebdfd928b68a9cd59c09859e7b901604b63c412830ffeeaaeb5da337d92aacae415362515fc5394aebbb8c7311d0e91b62d46ebdc572f3c05cb48d8c322d3c68d442ac6b7895692a11ede652eabddba77325756c13bcd88ad2e0fb0af0052fec111827c5955da4f98b3b13ac4aa9763f83aa05a1a0200570ea6d8c3297350fae946e650e3a90652fc40da4edc646315a00dc9ffcff5ef3090fa4b1a1ac4f5436ba9fd483dcd0223368e00a95f1f6a56d772794dc95cc39b9bf40fbc683c6860b103706f4f09f74aac65cc543324d3b10533584dee7fa320975acdb1fd21d2d9211be6ca02a50d4fc88ce65642bbc7ab92160f0627a5b848ecf52c02bfbb5a3725bb08633ce86bbbf1cdf5b7722b6ecee7e446805d172a9a028dd5b69854290124a97e41e61c3a168eeea17fadbeefa16a64a4c4761e209f42ea6fd56f3266bf86aeef6ce987a1e609b894b7daba73ac8460d2d95c00c2dd12d3a3682b9e3afab29204ed2b71c9b5c9f37367e16821789d9e78c7f50539dedb111975b6e0cd38121d64cb9624d90a3667e995aa10228c1ee83d972b77ad2a066d7807f74046040d17b70e11e7fa6eb8db9c4b1cfa9d706d04c950e49c4547f9ac6923d606cde30b47a7bf83015468b7193490216dbbadf4bac5fa0abe2abf1e9993d33b798c5f7476dae4d6bb0e809be75a6da0b3a4ca1ad4d99e8423841adcfb9f1e0ee2a8ffb16cf888f15d513ecc0eb6e882127f4f4618ac433a137ade9a99340d37894c4b28f1aab0bc2f442bb356ef0cadd374c5e250e7f114d83495c23cfba69fb69ecc42cd98661f7810ceb686adde0a3dadb3554231b0fab9dbc6bbac9bf32cb1c60967c769b10282dcaf3e689a68819a4fa107b73389d4fd97faedb1bdfcc7c1ed8b00a9c59a4d93d157b4c25cb1fb308517607695838aed8fb8c01309c859303bd873395627e8f4174d7e5d9bc15e49759ec849fea704d1ec889c99265fc844d77a2a40c162bbedd519060100a1942b47bda7f616fc2bf1d5f2e90dbdc9fe46eaf98b85b153afc53344b2753258831e24fd6546868ae594737f0f35750ee17d9bdb00d2cc01aac65a55ec83daee156c34e56a01f6591b03eeb676d9f7375b3313aaf0edba74953672d41bf1a06c305b9efd1eef0d72b6876d2086c3eb4c53ae79edc39f24b4595ea24aa6882bd9be358bcdead774dc9c661843a8baf753b038f62de0b0b2cadc86133ef710243da64022de3483d39fb7e818a94285c6565c17b2f1b1e80bbd08f6ed38755132a0d0c58cb765b9d1c4ed5795dabeedfe5c3e93d4c19d0fd895c4f557c08813fe0b240bf0e0e642165128f9b65d82ba486e3ef685250cecc05af7cc795f981d30858a5c77e21ee64b514f18a4b9f8b44b934486eca666486c158bc47c9c0d386f17eafe4844746c18c94afa877986a2b0d3388d32cb14eb83ce67238800502c63c82c3a8d8e529e24c301e78622964e1e3602517e1d7c9dae8b7331c412c7c1b5a038586b491f4218465c29c93e8f7e3ec58b1bf923072695569738595adbbe0da7f6a00cfc42219b5b43077954d9fbb887b932ca651d4ddf36bb7e6f60f4ed12e64f5a982f250356099ec8beeddc8d338575e01b6b27db3534c74c2cad7b146d6429cd366a2fb0f05855b5bf90fffb57c5a86b11be8b993e56a3eabbc8d6fcc6296e420f36c8ef12505016a5c5ad0fcd51381cd6e5b34ca3a638a042396f6dc33e04014b1a588964fa773397154b8f3d310f3b926805bf0b2c6cb6ea89ad2f0faad552119f47478d5db353be0642444e6b13106cd0ebb91fef2873da3ff7095075c77d894bfeef3681eabf4222faf6a9092ee28da3cc0187f755213be3b7c42fa8c4c9dda9e349066f05c04af1db6df61247fb1d6c1060ea4cd90634fd5428534ab380323e5f1fa62eed9cfefa4e70dc8f45a143b01e9ef0f79e6aee1636fd65637be8b394db37bdc6889b87c5b9c90387121d27f9608342ff8a9790b5c50b0cfc06498532bd5af440c0070dda853e140295b7f2ce3dd6886c87d44363691af11b3bedd3a06e50f3a37c26b7c21b98b709b6b6ccb81d6169467c682fa78af1bbcb021bc36757e161f7a442ae04e19e93a25d64dc3e68ea8e96509c7b0990591311431a7d0edfd5e7451fa11a28411a51d872074be8873a9f64edb85011e31aa1f7e6332a1d6df32c94d78b22b6a2d298b0dde8403ee01943b63a04d548ebfc0c84d4aef21c6b04d9ecb34aee376c901134864fe4c9dc4f22961fc7333510c7fdc0f3d3fc9440d095559b25a733061a646b56835f10e3a3e50b844b9161bb421bb42ce9710d541f09d877637530da38385d33ced89b5ede341d51d6185252360f67683a780d0fb9dc7c2f4d7fb84fb43513067677f3b3c8b6d56eb1ef923f6b80e18d0c3a1ed966b74aac2bee52cd550494b8c4669f4c29143ac42440a9e8a9172b84a8dfc71aed4248d445e987bce24de82f00ca278fc9f6553976301db7b87c4c36568e913a17248090e299dd8524b7185572ce14e670022cb6f1e978125f564c8a5e6f02a1ac06fac94b26de8ee3eb2b116297edb8e5e3ca24db934163674d346707aba4b7748fbd65c9b71240e691294a17503a6df13f34697d550111990a0bb79a6affe53668d14ea2740003f7501beada1f846d5cbf746f1f583f84bb35d9615fd39991bc383e6a1e863040dcd008d8f32c511fee0a901c09c483249576a74d9e0ffc25cca80ca387152a5d5ebaf8fcaaa02ced6ec9935a82c05659f1737c639f45b0072f6044df234877c445b6f33e46a39a3ea6a38210d3743e8b95d7608ba99e3ba1ad07ee083c489edb596b0286115c257b5c4167264509c5224a485bad064227590d451005183d270c62822cbc51f4540a594a49831ea77386d86e76b1fc58fc9919c4b4beff4e9bbe27a27ac84f93af5465673111a675cf1f07f3b87fd40940c89729e11b3ba380587174f292535fbfc1474026b7279c61569f7c2affd67c7d4d501fa0041365614408a09f03a5830bbac97c305de744b19167b4d21a49da3a920c4cf861cebcc3e9b4cd86018c251ca5b1c357eb2f9348392840bab6774a00fe9258f11ab5cf30af3da3b175526e78ebc8bfa44a47b4adb7aacbeabca6f556f9acec931710c72ffe6acc27483d85a9f5d6161e6077cd6871b5fb68151f02c4eb20b0e74127cb493e04edf0609692372aa370ce16070702d111783ea72a9ad23cb74bf47e410404d7d3b115a7a4bfa8f1f676ba553e89023e85eb745c0ee509553966c2b7a79aeb329fbd9d04b13286b499cfec03667cf020dbfc101b150af09c6ea85ad5a2b483b530bc905e031358da52246c09c50755ded9521ccb8532107a1ebac3be787a56c94e54f69fe38ba7cbea1d4050a353b7e248969f56a784ef581043055c7115ebd7c02dd8ae99c2faee296172bf4a87a193ef6fa2a3c329179c0dec2995d7adca454ff03d736ddfd9add6990a3d01cc985998862c9a214810b0dd5d3653f0697c7cc3452ed6a70acc6fbb6c0eb40f4a269c09824523080a60fa483d347d067288e5e4d3b2bf8e6d5c9d9e83880bbd28d2c40b0df526c29791e416342cfb5ff076e77943d1166b2d109d48857f2a538f243966cc458b95162bd40eec25b5430acfe94c3c93c3867571d8811bfcf919a6a564e2693c3acaafb434f90a2792fce81955236701ae276b06b610ed065f5696dcab478ce31ca88cb66b9f393a7dd1b3df92c76c22c0963757a0bfa2a547548652775cdc401779d2b8e1c81f675b0993a60800f2ffdf1a02ecfc54e3e196599f8d31ea025e1483ac43fe3c64b515edaff81f95a19ef4fdf44e339857c335ae08173fb9a542fc1040de2ac2b12d93c5305c3f502309e8853404ae53a7520c9bea780b916ef6b566b611cd24aed5bdd93d5bd0f71d48a1fbeb96d44d7a9703676d36fb3a058129cd37644f2802b77b70ff7c3a533a6109a7408d0c4d7998035cb8db797b11eb3e8feb60189755dbb6d39e47e52c1f5e07d05c6fc01d4c5ff2c0f4efec1e3b3cdef3f98c90385147544b41443a4a774682bf66c757839af4badc48f8bce92a7df040897020d59c053f1e10fc9f74e82264bd871a39480b5d41f8dd8050a586b65cbfc5952e34de1d5d9434f67d741af99410e7f2cd3448a4715cdb0e121af9ed0ab8d382241ec09598f7d5ba3d10b7d3fa00add67d0ef9d1304f692b690f292ce272dbbf685be977d78d1ad1451164b97ed7024fb1a0c6ea681aaf5dbd4dbe7acb3706d564b303cb02a02cc2ff3ecbb108db0de4cfb055f90006d62f779d61e0b04d7b4b7eeeb39700763315d16194c68056f71d40075105e0590626fdc5ba6476fd63a920d3a3e5bb575653254067fdce8ee7826c6d6017f05b66ccb88d7011068fe678b12c7bbc1a8dbd0362a5ea60dacc069cbba92a3618561fa810bf2cec484b2b3f99bfe225055f91adf056c8f68c577bf29685586a409058426e2195ff24795b863f5581266414fad9371ba7c7cd796f0c63c792bb50523a23387d545183609dd60db500ca1ff51f109fbe30dc83780a738b387f3230e4edd2d89910ea4b491ab56aa906161f4a29d990050a3c989d73ae77a0c8d6c88e98d7b43d72d3667cfaaebef73b144a5b3fbd72baddeff230d3458ec715b0009864bb36332113ba416446726849cb896f8a43ada353fe7b7951c137740dc6c1497805c442c6b231e08007ecc4d543c5cf32f3a989127019bf16a9dc715822f1ebfd3dc83109b9b2a0777895d38a85e4c45e55ce33c24db64c4a85e4849fcc7ac41aeca9c9912f24cb7121d55c0d98d09436f2856b0c9e396613deb7768aca421df899cfd2071c71a7958b152909846f87e35134f7986a8a569c3abd0ec026333dbecca2141288807d0c3dbb002452abe78dfa45a00db991640b245e16eae8346e950d8a565b7c3994febf31aa06096afa5b761e2e139336d789210254af162cf6a5e5ef628aff8436929addef58b1960a764c2969540161f93dbb1192b8ba051e15db39fe461a49a9f0552996c253165d0604cc19750afa105079f396acdba62e0e78d0f337d4703641787c69ebf5d23b3227710521b7e965e9e310283482f76eb7421c080635e125ad8c3d2e7ca2b2ee223c7ff6fe0f16403182d012f8b6e02539c386075b4585be5b18d6ae1c5f9ebdffcb5eb4b41a69e850dd9c1b9f7f499dbb8374b6dd0d424974a4aeb174367eeff15c7507ece0cba76d7dda0ad2e51a1c66094fdf3594010d1fb82dff2c2e3acd1f782eb74e6a22c3b0e8f4a838f13beb61dd80480be2ab5385ddbb5feb4fba9fb2a6f08b81bf588542a850bd7aaa9452d5876dba06002663cd9ac09a59a2e7add16f244c2ee753354b4558113f190e98ea8f80fccef55c852078a4781f2ea73ea55a30c2fcebfd1bf245726b30448f07c77e20d80cc93301a6fecfc1e5fce39b56ef7db594d23c7f60320894f43500e595dcb4146885951e86b4aa3d5212840d0bb673ed9da4faa8bd93815534f44a7b7b2fa67989306925e9229bb40f7a70daec387a31c0691edf30f1457498875311a2015dcf18d2975ef6d10bedc43c914a22fcfb4ba52a906ce1d3bcb9c7f805ef32d941debc740611d64863b1185ecda7d58a5c01f3ef3897f9c14eee6a4f475c5240ba6d1e1ca086b00f09c8b3ea0e372c6b071c52befea8a04363d9289200a22abd3046e5d54c05adaf67fa3ee73b44502662646ca1cae6fde26344aacb1a07e3d80b2fbaa4f2d5f5afe30f615e3c146943d7a0e69f849a3925b6f598017cd4a519b3f145937b3faf97e7cec356f9ef9e4bcd9a6bc0140c7b95c4b4993d0e50970991542da9cd8b04f0da000dd7591f17c5ac18a10d6284ecb8f54b5586b8c5e22f0b1f1beed1011b40246de6ea47ebfd39dbe3308d564ab419b28075e46279ad138a1cb66b6fe81d122dddf795a89a782fc4c3c149d9a5fa3d611da15ff4b5213e7711a727908a31eb5c18e8e26575af30ce7ffc47d1dfe6ae6ce8800056c1663738c7952a1a2d80551be560d966c4cbc361e18891283ea2f339aabbce71e5a3863706297df71a31d7d20e078193cff371e5af0e2fc40b5394322af9d12b6901b4da950b270d996dfae75986e2d4dd50c1c2b235278f8d2419bd32e3126d94a7488b3ee23046f15c44c38f850412370a3b61b2a6836f0e3b0b4488219820b0bdcab1c756a1886c253fce78abf0332648672877084b4ed4c0f22ef55a6c2a036dc3b3f91181bd50f17370dba1ad21f032ce80c804851328dc54e341369475d6ddbafb9cb8d8cce6e76712810f43c2ddf1f7d26e423ba652b6bbcb345f1ae7703537f078f6af9d7630a31a339bbb0037ad6a84326974ef9a78ae4e967a056a1b9ec2fa54700d1848f3aff2b7f01cc2448db000da2139d54847b6d42e325ee51d40e481fad1fa25a3591400d5b46eef4eba50ac2e149143a34e5ac5c52c2c3fbf4224ed30bf7eacd18a59ae5790b9719b5cd2f2f8e8841ef4b222892313776249cc0ba7bfe2a29518ad0663032b062f739abf39fe451a4f839e9688108d4835030820156fe46dc8c1eaa386a32e5c11209c9ee809d45cbe98383f2a5442a6a0341ceba0076ae82d136ab981fd40c4ffe98bf769e13c51537ba8a4d8b6dc998b2630f4b0511f19ad5855cfbbda0a45e1158f53234e2601f773174df8000029de1f6dc4ae13a80a2ed6d36e9c0133e79fedcf387e183a7590caadc3f4f8585f8168fae20016b0c399d70a1d8c3c64b222b97431e2061fb407c6918d32678c425d4900d61022dd4ad7a12564f35145af50c1a5c3b7e27ec645b0ec331c1444da5809a72945ffd7a9cf7c4acb39097de5124c8b786572feb431d0e53e18c927305bf21662067447e868b2a2dbc62cb55d51a34dd7547f4885b26da535904cdd4b4f4a7609bd4ad50d8c8a541b0382941df30f1568edd00341b2d053a0eb660f341a5aeea6d1492822224b881456d2c32fe1d608b4962fd8f11842180891df65f1a66aa7c2aa39e92e113e684c28e6e99a04405042b8626f9ccc091cf3ea7f868cd9c2c9e4b0e2bf3a43ab194de284af674397159abc326f4ab56d86ec5e0e1b0c9da97b954b0c534d9fdac69fea75bd9d85217e4508678103bdb87e785553cb7ad969e55ce37e4d6f0d1295c8aa81ba44b428b4ca06c94cd0cb302e2137173fdd754830c1e00154a8759cae52886f4f65b7f2dfb11d1f79b8c81fbc6e6c221e3d588f844caa5d1001bfc03ac5ee09230776c72583b433afc49acb50e75c3c11a36c850886a95a2a81d4c661a74315df32d9f1b1c735cb97fb2a7d13156f2dc0159874e5f645bf4a319af64a82ef5c2aeec8b7a90507b0d865607c2c7f0ebcd29ec4a24225e7561717fa981edd5aa6ad442b6036c692aa1b0a2412c4ae9fb3f043d8584899f5e53a3ddcf30441ecbb0f3bea357f903e8108f35f8503288cd8c10ebdde1fdcd9355aab295025350d62f9dced7eadee73fc4627f71e10773bf4ee06597cee76f90e2068c7f7a9412565132e1c83e76599e47eaed625142216ce1e33957addedbf38347ca030b7ed9c8a0439608b567f18015791e2e236b28330fa9e5a1f16cb927a3def9b4377c2da9a75059fdf21c3581b7ad7059c9faeece0294e8eb5be97d99de4c99f771247475c0d9bc3c872b9c2fa8e88269d769eb8a7544b1a8200dafe6ad0139616b0054b9a7502b28c6eeabc653cad2d2be40b4f4d239ee7cf021b68a6a9d5676678824f1a544256733fddaf262c4c018f117c199a3d4edce3ece27f1c1915fab09348b9a5536495c70d1a040305708c1124797e564b63e008e7b8ab93c6dd373b29dff3031a6e59ceff2a21c5701eb5f8468ae648f4e6dd841b2354d25834065161cd63fc506b89d23e9470341460648e9e38b939e1debaa0afade2a278234f38639c73589d600d19f1e057179a3d8119550a5ff1ba535fa4cbdebdcbceb0fa3958d38adeab57cdeb41974037a9bef5e292894038264eb4d8993d4d1501e6ef9c68fb0f571f57b0925640925deae9a6317e3bc4d6cdd5a0833e52fb48baca16a9ba9b6c8ca469a0555763b54f04c87d4e41aa549258f30eefe5a52d2ba06657a8773b0842e094857b6d8911d6a0636280025e56356fade362b4bf4c875cc19be0c6644b447be0454dbf390eb966c03e10e9de3487b90d0825d327c12495e3c89ad09c9d591e55c91376fb14c2fde9f7461fb25450df1a65806b65f3caf4d5c81ebc6e664871fcf915b9578bb70ee6776acc62205888dce2baa4024941209e81b4b35f0eda1bdcbd9ab1d6db6140bda4c41776fe675d5c681da5852d50c246dda4ddf9fdd7c5fdfeec85ff6c883c78689c2977584406a1ddef977606c182d6c33561c39c071668a2515e5aa6f4aa1faa392aed95b82ab32b79a15e3b5a07551ab068455131b72493126470f26c30b852e4415e1d8b719b3803ecc336e4facbcc5d1908851f4f39b776bec8b6b9794d47e5965458858560eed5a0305e260240c0849d93a19787b0f8c795eb5ba32be573845256ae6d0b0a3336e42a1beac8bdde6d1b6e0b6207903d4b105f4af2ef89bd099ded870daea2f170e03bd5f6f4490e60bc222d4876e16d4c58aeea6e6c400dbb9e9f4b2b142f0fc9bdeaf4132ded38a4a8366e107cac7210945fa2df4b124be37ef76290e5b9758aa3bfe0091bb0448206323584c2f833e0edfbdc0c33075fc9647a3404ca490bfab94302a0679a1a42fe9fec6af0cd98038b09ffbecd2832b579b2294f6ae5b96328fdc0a0b9b3a32cba04fa8bae3389c3951173bdc17caaefe526aa386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f24237d8e795ebf52368218bff3e9d5b040ecd2caef4ab1e7127e53bfa2b3b4fb74829f9993ac703192aedef79dd9ad24c2c976638b4575afbce22ecacc273ba43379ed55ceeb51838b0adb80585bd1b5f2707ee16b67a7232adf7163415b24b9ff9dc94b7197fdc89e2a90d2b9eccde45e965edd064dc0d1eadabe11b8ec3aad2742b5d3323ebf913a92817749090c20758f98aef2544d4c8b48874e8936d7ee492d5585675c214deeb74fd67c4d170ac5e0aeefa607c6e37abd4f8238e776fde3921afab75cbd8f392d3e88da057903ce2e140797f4a85737bd89455e6aa27c7535687b78cd0ea59848e006c8de9c9c0cbc7a9f5e977be850adc710503ce4ba7c7bd0b042297f518abec6c8ef451c33e030251f506cbc3744228b6bb4dab86877d9e6019a0ea9f39ed37557b3b5527c171da5f013e0d3c480a038cff2c087d6e5d41b17e6c8f90c334b5e2b9ccbe9d4efd99fba1f907d00a49b71b5a08aedb644fed24bcf04e71be67b03cd20d53ccef8f854f5e9f7f28c1e98a8a53496646713bebe15a93f1ea336e6e8a4e68de5dab0fe880bf983eec75d1c5027357f6669e098411e0bc3ea2293138f5b34425f78b6508b94d4c0cc32ee9afaa409a26e5f2a1fddcd6d5ff42a89755a58b08f243957a2e208e24b055f51992ab447bc06876eba169c545fa71b88a0fc15d1e0be9d334a1dd0c86f44bd149b42c07608a9a30d0b7e13574f8d862f2ac72b2ed38904d7cab194fdb9e4dcb615f5610b24e202a36866baccac01fadb575df11dd43e00a3b92fcdd8c7702ea49d951e7dad2a56c075730b4af1ceda2bcb2310256f28312579fad40ff471336ea6a44143edfcffc297258d48bd2ea47efab8f0dc00f1e6dba1a55009ed627b72a5c571f483c46e4861f0a95c6abbfa636a722bb83605c +Output = 17b1584205115edf0b97dfdfbb56ddfbdf1c77e875ecb7b4b9c1b2220b18e3ef + +Len = 101920 +Msg = 767e8c9dacee4c732ab08b5fa9ad65a0b74c73fb5a889169f645e50d70e41d689415f7d0b4ec071e9238b5a88110856fc6ae9b9944817e21597d1ccd03b60e60472d1e11d3e9063de24a7b59609b6a2a4ee68238690cf2800614746941c48af9566e07494f0dd236e091e75a8f769e3b179b30c10f5277eec7b3f5c97337189b8b82bc5e717ff27355b2009356caa908e976ae1d7f7a94d36202a8d5e03641aeac0e453a8168ee5a0858ceecfcbf11fb8c1f033201add297a0a89476d2ea8b9a82bda8c3c7ef4f55c3295a4ecb7c607ac73d37eadc13b7a2494ec1928f7a80c8d534efe38a3d9ccb4ccdab9f092a1def6478532c5ad3cd5c259b3812600fa89e6d1e228114795d246cedc9c9fff0d1c1297a5ddfc1169c2efb3800df8dd18a8511214785abcc1bc7eb31bdb2f5f70358dfe860ed5a03ab7e95cc21df5ee7aee68be568d6985e5c1e91408e4432663b1c4e6d613d6dc382b5b900a4fc1b7a9c27a1138c5e2356ab9026c34465006602753daf6ab7427da93c307c901d0bb1ddb21c53bc0493dd8d857161e8ffa51fdecb75568243205aa979c2e7ed2a77b5f8edc34cffb0321a8c653bc381f96ab85a86bf0bb2c9518208d636eac40aa7ad754260a75d4a46362f994c90173b975afb0ee17601311b1c51ba562c1ca7e3c2dd18b90bdebb1858fe876c71b3ad742c4bcba33e7763c750098de856fde8731cb6d698218be9f0a98298630e5b374957d126cf0b1c489c48bab6b50f6fb59ee28be6c3916bbd16514234f80e1ac15d0215852b87f9c6e429eb9f85007bf6ae3de1af0202861fd177c7c4f51af533f956a051815815c6e51e25af20d02893e95442991f1de5f86a4397ae20d9f675657bf9f397267831e94cef4e4d287f759850350ce0898f2e29de3c5c41f4246fe998a8d1359a2bed36ded1e4d6b08682025843700fee8cab56703e342212870acdd53655255b35e414fa53d9810f47a37195f22d72f6e555392023a08adc282c585b2ae62e129efccdc9fe9617eecac12b2ecdabd247a1161a17750740f90ebed3520ceb17676f1fa87259815ff415c2794c5953f689c8d5407dbbd10d1241a986e265cea901af34ec1ded0323ca3290a317208ba865637af4797e65b9cfcad3b931bbf6ac896623e2f4408529172911f1b6a9bcae8279ec7e33452d0cd7b026b46a99cbe8a69cd4d21cdc6d3a84002fab527c4fd18a121526d49890ced3fb89beb384b524015a2e03c049241eb9c1d0181222aad92236dc3484fff6c66ab4e32134061c2a42a71bbf060d139d5d74de811f22378ef4ee29ef6a03c7bd45e21e2317a668c0108c834c16b2a17f181f402ea0045db8a841e4a0af2b6c7b0c8d210d81ed01af13104cf319c0358b94ccde67be51831ee638f68f7a004bc866bdd4279c6150bef43b5ffc37bd398a7682a074a190138955da4504f409cd6cfb7b1fb8908cbbb75b15a4af97331445694a6e9c704974c19d2fba4745ce5a2e74ceea0a85f6ab60efa7035462a92e81132b302954040e8e673f3d9f94d75bd779bf1d63a225898359f86532bfa8ef091c2dce61744a49b85b13b75609ad362fb155a00c0fa3bbe64110b092d7b7bfa42d58308df9a28d0620b20eb2ced755fec5985b4df5f8ab524df8cebcd25e0619eeb53ff40a9542415f242cfc08dd1e0c5c90376d7caabf8e28b7a5f8d7252c31064be1e0d0aad031bf72f77be248fb211f461ab6cb43616478551f8e0e9599b41e22ff9772699f9ee9a35979829e5304b6c1ee6e0b4bf89ae6db23c5a035b56add438262195a175084bf393c106a8e7ec80999de6348ecf9195098e7b58de91aecb55089ed06a10e39cf7e0db5311357fd27054efcc4a449babc683a74269b8ef280535415f4a3a2b0d91234987d4c57ff221805fd468a5270287a070687358c98ad710bbaac87d290e8dcf9e3d5a0457302bc4d8f5705dbe49bb69593381ddd864394f503b7b3678101c4a4bbc277eb04d0d86cda7e7daebd1d042e42c2bd49634aa35b199c91292d2eb27c4acb3a0f589353ab05435a91a4b64c183bac7b97d7cb868523e387df39768ecab8784f7a17531752392e054d416f769ca77ec1918ccc25bb4a15ff5350e240d62d511ff4ea180ba99dc8e4aa3b4f6a02aec1f6fd27586845b6b9604b1878b1e8d0df124579eb17f85a98606f3b5e119277fc81a45374376a8e5712903942c748c9a991346bd323869726e266e8a551942bb7cc4eb62a7a74fb777dea5c486b3e4137028a68d9179c7dfbd055eb2b134ff17b3ec2f88119a924a20920299186116012ce0f1a04db82349e9305ebf9400cf2ce3fcac282fc52325f1efc4725fe0a4dc15e8b265c5880e397943e9115be13553b372cbc330bb64c3724445f0cbd7131cc19c637e974deb26f3ac7858977ac43478eb18d9e2f1f9bb183c1184ea98e33bc6687f3b418e3caadec6a6e5d511fe47cad21ddcb4ed34655a33b1bf4aca87c18af9802c42dd853d914edf49736b35f61fa4456c0511b76abec7a0f06ad0833685bbf0d219905747c1919c0410db1dd7edee29e87213f533cc7459d8a93f78135d2c5bcd446b2561d63b67a62be61855cc2c25d28a487048f9a656d8a48bb8e057b72b6e41a2721445a8cca03300b80820cad3ca9c43bb22ccea3260db39c8163c08da459ffabfc796662562b4df7f578266be21468a2849cccc5701cbce482d408e02d3cdc880f45ef02c9e2fc6d0dc776c4f9707805a366fb93f5be4bd9bbe2bc31fa949804832f5d32c93025b4f0f6668026c6dbac3612c2d75afb48c551144249b2691d6880c018bbfe1eb015c58d5c66131d7bdf66298b574adb9bee6ff203f0fec352fc2d7e886512b386d8b415c23f687d3fe65b32bddc6b672d9d3b0567ed86ab1f07b3f315f7aaf88d45e715ffd3ccef0f083cb5bf2e65a6e419ddd4d70af1286cd33aa7283b71f3aea383157beae879d38f313afb15e1a1a9ac7ee8b90de84321a6e92127f70caed23cb39d9e4c642673c1644ad859875e659c46c776bf120327c9e8e97cf42631df569d36d0c0e7fbd8e7fa6cbec1fee7fe325cfb77e81870648460878dfa6582bf3a696779101902e8481e291517ef445eb6e90c2350a192c11e7983c4d171ab583040b90102a4428c2ef6084621017b6b701480e1be567226e15a668840f3b4947f4ab3d05f2dc3addfaa91b7a8dd960fa706e11bfcde177c132cb8401093a35971aedd4eee5f8e31a4634cd1732a9c30a5e6b638d0e389a9fd16ff5609f882914c95bfe479dfaa02c549c2fc4c9196b8b0dd88a0030ad197e741c531f3cb58235926e2f8c6581f068a837aa1f9ba8b8e1113deba5dfdf62c18d4913996b32ef7e08acdf49f70f6273b3afc26434c839a10af40f0a5640052daf8ecd6ba590bf529e8083ecacf364b1f95d1f5f2f087c4f4da36a9a5e6f8f073d55d702664f7057b691c400f1ee75c7fbd8074ce4d9df407bb494e232ce5ee2c926c6fa37dfb0f2035906038051141a3d9910d9e0cd0128f7b0045e8decf334d58a13bf94c1dfb5e73ec080b2bbde2d3128d272cd42506d541e4f7bca3bea91e4e853cf07867b17e4bb99f5239f3275790fb293e4ea6b821367ccc6623bb37e79d9fdb4faae119c7e67d8dd3d6b9f8767a637d9d215a11bb81502db007cdc5ef6c777ee089921c836cc33957ab193d7af84d8a11f649f7ea4ce88060f7fd3c7fe4968f69be82a0f805100da5601adea93442b862757c53f7bccd2e3f9a5282df2d8374b3f0b98e70d7ee70879cc4c34c53c96f5745fa0e2afb86a01599d480576ec69786c840cf310de4cac30720d5aa806b17b90fcb0ecb319b3daa9b8b1e2fcfe85eaaee1e4983cd7b84224a35fa0de1af18507af83d2285946cc5498045ae797033e6095be6b03f39046c0d0c1bbb9e1ddbe42f88827720fa97304bbadb1d94e67d03c1008dff8da9b369f7ab21fde03dc63dd583c4112a5525b14841c9c447d3a3cac01326b7dc50f9e0b11cf21bcf98422215f2ed39ca2b7e11e91ef8ebbbbe0f00ab9f982157b83f9be367785d92b5b85d97dce43728060a17d5584fda182f28702da9cd852368eb603492990b521c8eb4024991536d6d308db4f7b5d885ae56e1ec3bac2b6be867f84ca73f6c36562ef0ff41dcd5c1e95b393004142f2ac4011a905c1d5a55c1192bd4ad51c967eafed935cdad044b01f0e5ef85532530f891e4c215085b097a6bc074adb76a0c6068364df4ec29343d585799855a03bfd36e072a6d5577b09bc481d3ae59974e41d2d1eebf818ca325fb58d7091111fedc014b6f6cedf372ac8b349ab81f985514a670c1345475c14241af511b6096169bb078391ab61a76362aa270d3f1b448614bdc6d5e4e2cb61b9326aec22fdc2f98e45532809933e5c10893fe08b7354fb129dd9b4255f8a9385783960766296f5c06ab00a57e85e6d38dcfec5e5961948aa83af3ea5223c222f78fb3f0edc6016e7c424b914e59a2f6211de1debf813c7730bd1c5d2ef32b60d912aa88acfb0b56b0e2bc4deff741b12c46858fd1dc72fd292cbfa3cfb1097a67d426d48b0fb69d0853fae04ba7ea8c1613817978bc5ca6fb5083c51fa487f9079ccdde734c29caee5cae5249b1c51047497da49a6722f90ef111ca0516ca64233347ad4af88d65c9c780acd05cfbc428b320192026ed7ecbd710ba684dfd4322623d49fa5c09f6015a17f5caf2b4311f1813dff341e5be98c9299d3292461f6cef57bb69c0c606fede1c351eb917dd953ffefef9003140de90047c4a2dcd7e69a23c0a816beb1c271a3674b4fa4d52f3f1877f1cabfa8c06f4485e9866bbeb8145953e28a7a1c1e6d80ebb74fc7d189ff659694389672b76bd9e4c048538eb1c9e096048ba107ca2de4c114609d0b503161ac456e3a1a498b3ad4d76d16b08a2774176c8ed5fd5c4f5977f12676eb3851973983c01cf7fd39e1e69d6937dc97b96e48b9088b754b2e5970cc05f7e9a8fc60beedf2b1a458e4598a80c1496b60fc39ba488d33f82d576f5c0383929f088e68bcd26a9aa7d3371c4130099dc58c6c80ecb981620e6957059a3623d963fd8419a3ef9c2a6af29ea49b19b6d7a36096ce407a89881095b9a6abe26b3ee0ee69fe14840c03664d878d18bc3d796d93e76c661a0a28b718dbdd1186de258e61cc807f3e3e98422a8e301a7611e59c7cfaf5bdf687c65a895a136b91d13fd4ee183b547cb86b57401f2830f5e8bea8a22df4c8ce86e3936d90e3faa208e04ce9d9a934ddedef4df4b6fffcba06671aaa1ce406d09c02ca1c3cc97f25c9b96eeb9d3480c053b67edee201ce111f718adb243e08cb1b96873b9a2e499bb82db379bf77d8c29e3362552cd835b9885051dbf07d4f0c9a21533255acfa8248afa30acced9d6301f8a0fdf40dc401c5a60812fe3c3a13ac35a6a6ebaff267efc1c62541f05f104378b34fe40ce9987bc52626a9c55a8ea64609ffc8b1d1bb3206853fcb4a8e58b73601b1594016dc0f40347d8fd330cc3cd4f5a3794d090aa3e078d0a536bbbaf1b324d8e051ec4af499ab8e1cd05d5ac464e24879fc18b4b9e2098e8c5f67a56762850cf5bcda73c053f3dedd3720b8c168583547297177e88dcfafcd1f02a6acd6bae425eb51c4f6e1c5f64d823b74d861d0106d7fb392b43633db04102d4d26822ee4dd57f2ed0ce56a5aea4c0e1d6de3e26059395fb3a18dce86bdcd37f768f76995a8ad2e2a76b189833fff08f0f660f79b9710c64934f6f8494690c333e8a8f36d0435742bc8e88be5bb15bcbe065b9828b38097c1f30469895b154f812a0944d17c9b655f77ecea28f81aa9c312563c9e1af334cc40286acd57c54d7da1bad6797e49623418513c93539850beaec36d724a033db6b0f5a49bc91b3d77e41040bb75b9fb580e97fbdb79f931ef3035a33bdd1b032fd9de8f6b2ba1a01e65bbec1e2f87a129ef339057b7c7ddf34b2f665120a535760f5583b1fbd315bfbb006117d81cf4281eb6a29eb97ea56964033f68d15c4547e5fd3a06b639ff0a38a0284f1bf454e131939b16dba838afff7386d95b9aa313d2281aefe740dc5c72fdaa1a67a853d3ac4cf266babf083581d2e5291bdadf4878889ec41b822e450e8b7f0047a3717e03653104c33d8498afb3c2eebea76a743d713e29af7875424fdc1fa748602e5ecb5eef5781ae4e57cd98b870a08ad515958491972f8e31d2db61f465c688eae468ac85f5728bb5e15ff42e856dffafbb05351183284df48515bfa5d25e6847ad6fd08d5512505bc3fb48ad6373603ac32105367406323db7a3379c538c98c518455d7e0ced86c07e1418bdb15d6736cc6d6788f065d56e18f87c508fbd84d3c38dc5c07360a9648e2ee6c7e5888f04354efe717ea39205f789f05add8dd7042dad8c0d2f1832b872c0356486812223ac5a1c98756c12b5f1dc3623d369e9c6c52922ac9670bd4caa6c870bfae3cb358ff354668b1bb1ce8663b043f7de57ac18852c375006a391b3885e36d90d048a6ebf3854163f09e033b4e123b1478b2496460b25d25670181ca81d6da77948c2a7122af9ad42857b78446b4ba651feb0ccf0320093cccd4054405728ccc5224ee7a0bebfb6c2bef0c29691443d7a4cd13af843502af5f5cad8e59de0df5d0bbfaecf762ed93c00f0a1200575ed2ce0265ee2b18cfe4e93e8391c543e55cd7f754b12c3cf7b1b15fba2752a893be642f0a7240f2f84531258f3391c99a672e8006aff3a0a22ec4862351a92d6b042fff0b250bea063801b7d85d0497b6809fff18d093b67572c22d4d764b0e6d0af7176fedd42980271f9c66f867d6c10ef01c90fa56a7f8e572fb417f8174223983223eb4e2d7ee79547d41ea02ad4179ea7e7817829bb3ef9e990655938710f99dc680617e1bd8966802721d1d45c02855ced70e60b92ff90caea4dec96ec1b30bab3edcf01dc7e623d2007700c6c585f9b3b6c7382af36985e324046b52bdcd967a800d800643d14d96f3e2f357d9f79dd61c2a521687a9d1e08daec05a8ab106db4cdc76fed2bfadf553453d2083e60bde111ff5a4741fb84ce7c411afb2c52375ac31192cfe180c982987274a4bba09749e8e6afc413502cf3b2da678bd73b5f1a7f4b2b94e4432267c92f9fdb9dc6040c95ffa477652761290d3c7de312283f6450d89cc4aabe748554dfb6056b2d8e99c7aeaad9cdddebdee9dbc099839562d8f64e68e7bb5f3a6bba0749ca9a538181fc785553a4000785d73cc207922f63e8ce1112768cb1de7b673aed83a1e4a74592f1268d8e2a4e9e63d414b5d442bd0456d51be9a532eb44eaeef3d9283d4a65298d80dfe2b94bb90e361b4cb07bd8bc0eef07b97b7efb48c3a80f3383d9f5512ec206d35839794644e75804bd37319074e3487e95d259077fda921b4b5732aa21132af0452741d6864c4da6510161f2273660a17af9bef18e0b1f08f5217cd09f156fdf400f4fda60e98e8a2266e481747cd2baa13187a75cbe287507b55e54f72d47c8cf5dfdc263537d2897e4339f0b0b31329f363d998a7820f7f9af31a7d7ef356549afd64efbfeac1a37e5d9db5985eea1cb645b3895adaafa516ba1699fcfdb3d455153b0896f9dd768f841a6ce617d70cc486b04ece32904957727eaed338ba958ff1097ca0ac4d8c1a7f581f8226028085ee79f1e9d2d9f3c5e3fdc1eded941eb1577750c74b3a6d851700d553d394006144b67a9501b32bc8d439dc316368f721102c8ef11dcb9f3914ba974366b514c0520eefb908467ac80fda0687e45fa949e4d13e086b29ac9f3e2d6c39268c450ade2a5a3d2fb9672d5a8948d7b6a1bb909a0e66f37d7b1c1e5c025c1e5d421aa7b1b2c208be347b5f7eeea9092255b55dfc8a109a9bea751d38e16fd851fe1cff934d3004fde13cc643b0310670a4201ad0ee43e50d9e41069870ae504ae9d17a4ca3ab1834e634ca7077e8b4e8b5822edfe108bc1abe0740455a206e922bc381a35d3b2caa6bebd4cfedd7fcd2b16601f10c66070c7250330745cd1b70eb7a7a6123e829a899e84a26b805c675bf51fbce1765ae29e4a347a5dabe3d2b517dcf4e9cbbf57697b3963e807afb1a08cd843da90d99ba3988e4e9c0fabd0c8754e63271bb795c8ed41edfee3f8109b36104076a67b1069c8772999f89845bb28729d54af19da2a6d34cd0a95b428ae996e3f4047adc573329597e21747960fd9efeffcd634a8f063987db5ad625e5d2f289cc1c4e03f326f50160ecc283628e22cf77a51b666cd78e36c6a9b9116195ff5e575dec0f239e74d307a87b8cab8d9b03067821da814058c35a3d0bf0475b45cb5d6c5be62fc32c353afea87b81238f0274ef7b8f166a21955fbfd4a9df4b4b36a5f4a3725fbca790c39550382d78883489b1336c737d70149dd61c24718e9908f89bcd99fbb26d4d68177baaf6b30d010c675158e0a0cea8dc2bec49454bb7aa1e09e0454acc04d2f22931bb26fca7d1c7b8db3da4fbc2b9e3664b00a3ab2e82dfe7e45d9533f68928757b52047ddc0c804ddb0208b7d4af7b2e4231d2d684fa03dde2c9240ecbd8d4a36057d75b371a00cd588f54fc8cf26c2bd8c41bf344795192e0713f860929bc5be9b3e8c13d630fe15bccd0f173ea7e0615a1c62af36692afe93d2ec33ae3a9441d4c7fd578507431eba1c3bf1000786701b01ba51b2b8edb021538ece56e6406040be3bf6f47f96410f6778deb9a24f5a5da6189432f0dbf35e1a7299332b24aa6d85ea8aab16422d2b332848d2248590805e201f4dad7038989c1a4cb975eb80c9c36b8b2f77e153ac03dcc7dfead3b321ae432b594b34e07f5cf8215052ef73d3db4160e7f0fe34f05e08c43981b412c02b0470ec56b48b50d18eef9e4ecb041a520eb46b3df341a6a62ed68565a16fda38e6687d5c59a9dbae60e009c5e8a21bac25ee3fab5b1a1d80d1673a23160ade7c5b8a92d8aecc7e27f0ab1954d2ee466e1986cbb5b01ee35272fece369c845b59f64fb3382e5396e2c0b953780439290c7c0696097cd096bf9625c80caf5ccf462920650742efd47353932ebc1723420baff625032bdf860cbd54ae31c904a8e576c50ec296f1b53e2bb1317d663d0fd037de0f3f478c5fee5b03e732740c86ac61763706a4f997c7bbabd2588bd7111ea616ab1a4a7782b8e1cc098b3ae4c70f7bec742fd7681a9475dba7b9f281c43b6d489f20cf117d10f4159ba8781e188318702ccaa8ddbc28fcd9083e34edb7bb1fdc41ef2ffacd7b04690416c628c9abe9a9e753b3cadae9b31caa31cd4b5a12105a39d1f783e25b953ee962af9578ee42023a4762a0157b3b2ed451165b39e4f13aed75b05d6a37292fa1f89ed494cec4117c32500dea41f7883d08ba7db5883506e356d4e7b3923293c4551e76abd1e2404390e654d7d26aa14ac524237b805e36a1d1ffa35cf13403c70498ec3c7c1f2716efa0254ca127026402edfcfa61cf52af837b20c4d8b0083093a8b5b531fd2e7cab07ffe7329f343f6e726a90b11ae372f7e1d099bd3909876ec853b4a7eededb5fa835061b45bf23544becfcd2c351828bce433a13319032127256992276b0b979eb6547afad0bc660e5049d6b5b3554db9ae9348f3c34d70b313ef156273c9d865c111a7457927ef0d831d0cf44f77053c242f765ab5fdcd57f6d5b9762db0e0174c8fd1db7ebd3909005559313205b70fee1114b1189b9fdc762168adc247177cfed7de050806acca6ef9a4b38387cdf8b3410b4013af4e0b3cdd094d5a16e65b80f0b80b3f89b017760fd5c36b86aec01bc5414fcfc242aaf010849f1ca6b37e79e245354aceaebac0a1d3a91289c22fd0a7a026745be2813ac3c1eb317ee7ab92b66fcb515d0c79f3b688ad9f18710c77ef0f0d2903985ac0fda779c127ebab73731c147ebf341db757db173bbb2321bba3754b1641ccfb2dc62090f3272646c3213659f77b8c6eb68bb42e0dfb403441cdbc29649de42d27261479ef08ff432bc9a4e2e4197e33955afb3b3e5f300eb474cbef3b9f49b85626697dde51e06c52714ef76e217136ffcc9886f5705b77baa18ae5c2d0636464cd08e2e88b3087e1241ce0bd1ccd3d9aea74575bb42a36fb5be15222b79af9f624d9f0343d565d7fe7f6e4f892f9110ebb75f698b5031521aab88082dd573eb731c4f1ebefbcb6d5c4c44d47095f7a044784aad3fb4fdad196f7b50bc800fc4cfeb22b342ac95a8ac26e61d30b663f24978abd340c774eb528863ae502fffb609389e73874e51047e9dc69c41f762a15b26d75e472e13975674d573713ba0399f6336d1e5878a1b442f7ac42cef70180a0171b0bb5f763b95c355329819bdc9f3196050f5bead678d4a574749e518d0c6a6ef6d05b2093280d2478e5d6084d1b4c9cf73307a4753ca8cf078219ed9662175c505ceec3936a84030c90996b20b54d2c8ab1e30c46a7c45eae95c731e429afc86fd7f64a2928c9bb5855532b1b143e2d08b2778b13623238b1d52f863e0a3b999c68f91c1e0ae232a45a8bb007e12689b75d4c8aa214fa475869d9556dadc2b91f3781a139b7d95238c7c962abc30e27e0dbe96fbc662271eb794d043ab94c0f406d154144d8b6025bc596a9d163fdefca53d6a32900b4a0b12f14fd6ad7e28347323e6405147f29567c78ed3f68fbc9bfee9c8fb189b7bbf3b1b5a6c8ae8afd7bad827246143eb17113f996be7b119d05d4c29a1caa34aaf927b8691be74e6526076cd3cd7ffa81f4b2a10c16444553e52cd02b310a32550bbaa6ad2a2936a38e6781ef62febc812783f7b70f6aa1d3a71e4facb952b9a4719105d9be1d49a0fbf64b2fcf398b9952ab830071962d0593d4c6847d29d27f72d660579f6a8f42b7dc51f9dbd76fb1bc55cd4d036ff0d2f173bd1b423883ce58ae3c8e95b9107209401bb64d8170b1aea75e078e9ef2200826bcd9d326d679694323e668b2d519384a32cfeede978170c9bd97daca3bd921134c26f79cd368eebd9cc7dffce51d8d241daa8697eb0a4ae47263af9cd4e38462f46a754281832e443099c440486850f364b1dd537432842006d5d5bcc428793c3d0d16bfe8b373fe65c4dd2507e0c9e2904bbabb3be265a4005413d1138e48c9ae77a2bc10de0316c6b0f354296f3f1628dfe67647033699e8473383c9ff3830cf10e1e002ed27b2d8c6cd74b6fcfcbab4d72a2da17b40264718fb7cef62929a28419ad4c5c927fb256c352eb76e46f4bc9a4c884f34c874a32e34618d9e9f2e4270973f61584b18340bf12a33af66ecc990142e5b1419ab87f1a6dda99da415a4079ecadf84db318d0cca0f32a6a4cc62214cc8cc057af278c918964d46ec76d66c781d46341e70b9d58886bc3b47b910b5bafdabee3271001e53348081be7a6109eddf9e505dfb3fd0f336da5699dd5ab42876ffb68a51a65820604b366148cc44c4b8efbfe0faa764d2c893dfe060c8865cdbd047cabaf2df45c2b44d1e0a9f87c752426bef967af8efe3f0be656ae2931ed327883ad36d1c8a01c6af3de56339bc529e3bd2f63ef61030f7dc7021314438060b6121c59e75b9c5864206039fc16c630c17d0447ec5fe56b21f48b03cff701d84bac9b70e5398b8feefc08cdb899f2b93e733a5bfcd81fe2970373d8b2d90c09a7b78d2431ff180359fb5a89ff81c523b9341438b7660d063b883f1a7375e96568d773ec73f8ac533382b7d7476ad810c0443466928657368dd75f31783a348bfd60e22221d2b3001a36b36e16b18600f2080d6e24b569040c9556c637b267ddd3f84a6da1f9e68a6c9bdf96f3f26964bd042197d47fccef4626b831486b1deb9b023f479afaa162a9168eea45b9fccc8fdcf3ac2841fd68a92fe61b10b0a135a123131873416e296e2b63f0b254ba98f8d715f396b874f0d3f582dc274fac3c94bf7888a16ab73f1a6ed112906f2d6a76a6db16b62fbe28253bf10d02849960c45bd1f0cbc317243c4568f88675bfa187a0e57dfd24537f3b57c32628fbf362de6cb1e94907086942439deafae4fbeeba79b791d242bf5674dd7ba00112448331868aeabf92f58edaede29264596ca27d75b41aebe76c5e70317d032163f7727c2ddf7d75f3890554a8c967692f8c5d4f497d5190aee4e7abf869e8106d96810cc7320a32a51d5d5e08d4d26ff3d57fbe5985de66e5a3928696a497449bac6f61d6f5194c343cf74582777bef22c29a392a3029e54832df9e90cfc9447aa37e29f1cb43490d5273a9aa33cc6d58ee3d4e303ebc82332d3f627b4dd67697163da39c16e0afad1852f8e49c3c70f2b2d96c0fe42ec432dd3260caa147715d6f4e9d3a5aa9e6afd905c1d60354908cbadf211de2c921c3cd4927e35ca4cb4a38f1456118e794623f1c82d32b9d228360eefbee9d34316297e40669e276caf9ede65a84d4222f709507ba70578ecd733f696af685f8699bb7a3aad2e52616c9089e3b2a1ef21e678537e74229a1e7d8c0eeecda2f8e40db97088392a74b3554038965c55bdff7a37a5d87ad146f08207fdfffee1c4e4daec0730f4ddb4e8d17892878fb0d3431a10ec91a359a4eb4e6d6bd12b6bee0e681ce83cc58e3b8a47fe3fbd31fb5a7530c9d1b2d604dd964985026d3d8a9cea1f10bbb393843021219be8402b7f791e232bfb42fb18197adc1967da1a83f7016892279e4808bc33c6173519668159c55bfe1349f9de7f1d6def4520aca126daa968d404cb62074a9e3acd4fc94c21f2400ac0d0ba9e380966d14248d92b51fd4b5b6bed04da38ed11cc59ea3b27fa2d3a16abdd25a06bc62d8506588b68a2f3b7339462dbb878a5879480f3a6590cffb1ec7b7b222b41da2cd33a5ba9a13f4354b8f6693843eef8685beb71f12b7eef0d52d9af9988e2cfc98586561b1f507589b23a0d03c4c3701ce9416c04e57986b6116d837200752d6e619153c927fe12c0e8075324831e950b062bedc7cf244a14f1defe95d9237a823104599b0470a16023064583c828ee9e7a51fa2230a8c58fb9d528eb5b13406dbb867179fcd0aad12bdfea09db08033b0c5a9efd522c7f9033f90a5ad06e0696c8c0a24b5943b57ac8394a9c03e75c4c86efde407bd9ff7d25f3abcb7e5b55671f5af4f961f34bc5c2bc6e258aed8237aeb7c4d3f4d7cdc0586a1427ae03b4478afb6f6b5d08f319e0115d8db641fc664d5b579e054d71bf94074b54a98dab9ecf4b1c8994aa36deebe01fbad00c523f2a829f89f56373e4a0725a3cb422c2d5b7f4023c50ff9b7dacd0bd961f750d2c0fd5a57d0e435c96465248c51aea82520a9b296ad732aa5ce88a3e08eda5b493c2fb70609612b43c4c4f1ed9210c727e90eb9afc7369ebe46ab6aaf780c4cfde0c9d081cd6fb01407b12e35f13b11bc110895cdb69cce77df9fb0a4d22f9e674b56376971624cd099b439f3f36000384542077ed048525905c0165f1186c82bd85f4c1bb9eb59fff748a5b61d322b42d2256f41c8bb92d835c71c3cbad462a2144f9f16eb5d7008acd8d1ead313eb62643d3da4f459388c0c1f32cc328af6708b9190f9aa4b1771270f7f00b9a7d8fd57f40316e7b38bdad532ea9c1d0cec0daadfd2226b46d8cff236ed9635407c9a49d45026076d354b4d9cb41adefccbdffe84d32fa2a30c7b9af9ae29da803ebfa6789540f7b8ad63c1d71fd6fcbd0e6e032b048fe5125b1a8dc2512a1de997e3ea3b52f62d585caace5c9e3efac03c4e353ce6a1a7071d13571b472573ef309da1a709b41caedb86efa7bfe16dc8dde711250a336ce3fafc638f208a7103614359463a194a4ea28e9242e53caa295bcf338def83ab4b5d4c5f784de7a9b8d28b7d9364843a9a3a3852a8aecf44543e7cf8d1f730e6afbc7987715fcb6281eccc8b09099372241b0aad639d07d0ec0e66fd9bc1b9a383a10a9804b6845ff1188d0e2199a5656ebd8c0eee0074b45344139e45cf8c7669a385edace2c0d688fe437387a55898fcaa22f3b2a9a4832c7819776a8137b3b42c6214c4750f8abc06965775bd2b91306966085bc905a1c9f2df05648739f005b42599f5edaed0fcb9ec36a6318cc2cc63cb99441f16b4de7cdab4de3201cfe0c356d9bbad4d3ddd80bb7d83b2fac1f321da32f5fc5620bc5ea32232123d87a7e26c7080445945e1139aa888b1f3f3774c08720be15279f610beca0ac83bdbfd89dceaee33617d79caf0543faf06fbbb1adcb2d07e8a251e4b8418b2948b2144322ea5500ae4493a1f52ed130ab22f2146dd91fe247bb68767999ae437b9ec0e73e83c402b503d949948ffad6584225c28717bdf6395a2e3ed75ccfa0236b0ceb7801c492533cf0bb138e8694fdb69de683efd1ecc667e96559f2b7e84800407859cd1d5891d72120fa953c11a4669fa6eac8216bf6cae21288c42ec4f245a4b5684d97fb76bcb4a0d20be5f6543a762a4309771cd26b616eea38fcdc2a227fcb2deaf9240bd4f162225849ea161a699b161c99a76132ada109b7e8d7f77f1be1300c0d7a57051f8f72e33096f1eebf21ec684fb3ac0810d26daabb5d6244be20fa1c99a66238884e4b1662a1ed9ec1e34b5563e8b9d3d02a9c773d187259b1b01280664f345672c83358a6b41212b70abe4b9bf0927d36d0208836ad2fa63cb800a23c1ed6452625b412c6776933e9bdcab2c1703fec8aec81436ec7a114a6604de9e3bb4fefec8c56aa8891f9e79e25f9f29b13c60a14a84512ad0cd18939d280bc22cda73a0b25a089b5abca171f6ad273f27e31bd1b2af65cba24c6ee3b332185c2fce610cd191a17156ce5acb5b3dd9e8d5c88efe99a1b885eb8882cf5aeb8ab8cf2155878904cbc6f7d518ca628a3d93653d187c4213d0061702029af68ce9645543cfa55b1bfe18c8516a13af3ab8db30b166df5e7e32b8bf395cfb18ceaadb8cd61ddaca5faec352d3dd1bb397d23cd2e5e89c4139571a3eaef054240955aac038eebc5948547301dcd066f25a2014c61b2c378cddc3a73fc37b2abac5605e89eca0be7a5e95845fcce27a0dca191f84e19035b3f3eeec1d274c035fab51435471e255c00ad893e73491c9489023a999d9b31b38e45f55613ae16254f3af05ba690226ace5941e22944cd93524e63f6f64035c9e579b8fa68ed9cc6d66e0122622be85a3776e7f8c7ca22e75f0c76d8ff11f7e56a619d74793a3a5fb4d8af5223f46074628be549f4e003d7d9c4da0763155f4f45850d8eed9cd837140163b293f572ff7820a29d599058aae8fff74bc854564e9f6d710e6d1c5e971c6f830b58350745a0bd86bb9de109a9b343356cd7d7c22ba0a22fbda0c1b4c7f4ac79251abc058c03ebf96d69dcfe1c631bfc3137a58d2f6fabb1632f93c30fc540abc88293561dc831637965871f4b1f0cb46390c69d9f35105dc8c19a71b7b7b183bc37c1e04018182ca838ec557d10a0c5ca8c43dcc6195a9db3ffdfa706f18967c8e24e8d3c1b27bcc28b1386fb5e5e972ed12330eb4410d8ee90694e459c4fc1b62b43435bf8e67c8f05029b0e30ce9257076e8355ddba753f1e404cbddf8cf84cb9a7ece3d8ddd2d74fc37dfcae791f0dd72dbc4d0de0de6f4e6d8bb3e3c7745335826f1de2952761105e120d02e6a417e967c31bfc0b7a46caf7f172cf889d9246dcb4513f95e4f6f1d9448b519d8b3ee4248007d1c2b18b3ae66841cc58dbd395bea3c716656f5e9a3efabcc6273a4a706cdb59b58eeb084543d76702bd96dcca2f24c6908e3261b2951cea860b1b033648bc58cff690839415252d984136768c381f97d59793c6e2e4915bbcd19430debf0b4d488208c5cf643cdbb76c236983e07c830c08fc57d13543578e020f9b10dab08047babc969d3803b986c5c57d582f23d05e6ad4da278f19282425f30a73a09339f52712bda69a620e2ed4857ab32dfcc6f24383188efbfb15a7c2a846af199cc07950730493914124d621c9273be3f0aff11e71d9ac7fd1653f6296176d4db45cfcbd48310c268841a735fa4d9958e5d1828006e529268361138c25445545c157a6f7f70db8601faec99781b47594c476cef3aa03aef5fa514cc8bd970e08acf79e85ea604047efb363cfc42475a076e4fcfec5fde3f61c7d119ec6d6419e5e850def87f24be3de979d662d654483e263352abf996f30d22c8b97a8ca9510be481abe388a823dd5a4a0e3233e8845ef3da1fd00a0fbab05a7e23acb3bb365b38aee7964f28d5cbd2094ce0d79eaef87b86701f0d92e709b373d0f97f142a52791b0a872f013487c54a1b055dc1188911eb0bef70eb1867e22c49f75b3ebd801a789d4cc4dbc0afc88ed0f6230a618f4b5a3bb7e052bf594b0a171cb4a56072912a184d9d032a92304a3769c3c50a89ac66980eb8745c6c72bf90e027f2a3a861a1f4001431a2ddb0fe96a6bcab83e6a982995a85ca700fdd9f7fc83180f7702092c90ac6c1f9f0bf2e77537a085e54c750c831b4cf8ab2004c0c5b5ddafc88425effd4215e7069bf6c71e688760a228a33ad1ae1fe0d017f27ff0ff98af34f5b8910e2b041a6a7260aeed6647f17fe66bda07c89c0975caeb5a06cb0fbac33b08394cd00261d37a7bc66b9aa8df836f1514add08d18a52139798e800b767e3f5e103d97d6644a9a8e371f6a72d3b6a9e9124c30b8b8650423051085548b6ce9013e6be94acad6bae029923f6c74217d2ff96b4fe58fbf5bf0261544b2a296223bea5e2f243b80c2bac34a82606bcbd32ef49395de45ba0ee9032424ed6302d0523c9ccf2d614f9b642dd199145fbd942f284b6a6a835e0556c5c58dcc75badc8f5daf332de14b2b2690afee50f9fda67ac01b3650f1b4297f9380e71981c62f3a751fc1ec667c5b48146ae7dee195f357e28b615936c360ab96de9b9a2e2cb09bab72e33196eb1411e08cee85be8c620eb724534dfa949323f6660f1825f646f9283200c5199f3ccb1d9d6a0c38ebdae6666d75f4e72dab30daa1ac5a0d2cdb9e14e67f7198a0bcbcf223c33cf8b9452817ef2d15a3988e186a15da2a8fd456d09617cafbbbf77d2c88a860dda6fe8a1df430e47ad6dd2623d04c024e53f89ed8d64c482b29ab666506b3abb7eac3910a22ba03e92902599b31ce8a8f009f9dfefd0d61cb8bc45eae95cd0b916a0f423acc15f02b431111c6b821dcb53ed23a8933e37da1884b4f4e5d7ce834d1ea85f418c71508ce1135ee8acf5e88b7985dc39f540477c947208e854bab69c55c427f2e5ad9476f0bad59d2607ad010f9eef26aea5e13f5c0b9b636bfbaf6ee6e61243756a3b2d006614fb65a9754f4fdd65fbb2df43db5be020e97627ea3f627ca2b5b41dd0f990a391a5e471cdd09adfb52bba42cbfb14ae3ddd1bb5f3a829065dcc1a5ee2772201d01f3ae7333f710461292d76f60906b446d0b52c6813daf1b7e92093ec2014ef54b9d18031e672e9fe9674e26e7fb2a0d046eb01942cc8ed25bf5f635a8f19ea941830c34660110ef1d6292b71d998d26eb225cc143da3573b913f33ba0e818212bce126ed26cbd1cf7ad2a8cca139f776a4ede274d0daae7e11488b8738ec34551a5b2192b513d10bf6d9e0bb61065e8c81abfb2270df7141b1f3d14e98da7fefa31759d395799b1bdcd779ea839e9624faf86c99b8324e4af5c9bb7ca8acc326f9ae263c427d8e939f33cac693632cb4535bbd66f17373ee4f42909de303bcaf90782d19468029f7a07759dc2ae480df3d3e7406c703a09030f6f73ed24fbafdea0db5070c320bbc932aad87849340ea1b2916f5a37342f54d4f65bbe1114c7668f774922e039246e9b64c756b0fdb897fa41cb01132e971f6c452a1a9d8ffcdbf9de22706655c4b16c2ad1238babf11cd27fbc28ad2f29acffe549c97073358309964523fe7c82d9ca855ea68147a37962d4aa99ac3fcd42b45c1e9333c85aa8e42918034fb74630dffcd6a83bd7b5f7d3c7fd1ab9666b2bb33413408e965290b51f05d7020df8 +Output = c97ef9580021602a512a5ad166a58f09db04b26a899bf7b971d8f3137e4bf63d + +Len = 103016 +Msg = 77f7300ec8c9a52a432c404859dba2184929a1a544948f88ce9cbf5b67d646716b3cffc437c7d22f8d4035de3a53f202f5e52bc98ba79c8d39eb214c59b778584218474f69b9614eccb4456290a8e83fe80cb4353ac3d05f7df0a21ee60b92c5c3351196a7c8daeec73378bca4050937ea4741d1980fb26662524aba54fa1d22b7386481381cc6764763d7d4be90df53c33edc85efb4ca0bb0ba2108ebaba0d6e6cc49f866dcad5014ec69922571f1f93a988c3985d9a0b42ecf30f0f547a3491897c7e3773115e3f67737df23d1c79219fd5ad5a4a7bdcba53a7e5bb8f5aee31541e62ab4428897b5ac47a1fed8ea8726174c419246a8b6dda2132f7dde4a0ca473aeb665388dd41832a3c2ffade13e2a8b6d6597dde9df9eb0f8568c29fe2c8fd5286dd23aad02e8b253286e793421ec04c229fd9409acb00c34b62dff53ab9c0e5b3842716e89edd35dbd93636c97362855760a948f87da5dcf39a888d0f194c75000ff045bd2ef3ecb67b5941007ce9f2d32080503d7e54bd2c644ebfd663ea70dab4f1cf943b69aa5101e33a8db7d1252473d0fee039a8044444b51627364579c227be1d2450990f19f1469bc7a0b29cd9bf2d8d675bea12d9d03e1887ecc7e054eca7a6d41b2c8b9fce05ed54c408ba5186e8b46941c5996b8b5c4f6f13fc54e168610529d77e9040fca397ab9e4e1e2a5fb4ec3c87b4d867da821343285d48161f5ca0ac3219cdbc019233429bed28d29df49d779a22805d42621cbab6652a51961d11c19788845f717438a049707ac8e63a6090f5a901ba575ec42c2aae7c325104c100943564a9c0ac204b237274abbcf8ae1f26b2dd1d8dea921e1183ce26d4b646ff94cadf2973bc72a9b66db6c986b1fe88b9da92e55a981f16f7af90ad95941bf53593646d0f27b8528eccb1c0d7e8da540b8a93a041e9b38d496c64351840a8b7e33984d2f77059cbf909e610252fca17a83d8fece85208177344996bd12e858e2a27c0f9d118ef7ca1bfd445f2d9362a2c7db8199253751c21e2d0a054c02b0e76d8a9500093e1faf568fcb0c587a721e4c5dcc4f4709321c1b18a8117a811af55e69e642a73c9bd806fd00f11bda5958da04e5d633bdabedf2b377c9e48c1f743bc20a4933b1f3abf6eeebf7bddb9db63978d618317c459e6ca57f16d14c45cccd3c0afff5c4b092ed0b930488a4c8a23062a7fb896e86955196c8de8be81765dc80ed4a359e59f4b2fc0001c25e6283896a5e6982baf83b69305b0b58891aa83035bb143a6676380e683ad7b430f1c10a370549658923f87b183f838157d8fb90047d444d4590c8c9f74a6ca643ffc47c72a3827a028e3551f97c304d79d8c7c5953ac2b6632e0bab5237aae0be13f3a6c241fe094ec158b1791bf80618a275988ffa76bde7d8697c210978a9cab6b852d0e6a45a9444cb644023c5f25bbf6bce9bc548aafa164a030bc8bd4b8f6e7a46449a5cb5fda0f432f79c7e5b6bb6133260a420c4c3711609b97d630c34c6a24bc5650e61b15c3de2468e0b876f0fd48b879ee6546b703556d3305135e2439629fb50a2a7d7000d3ed40254bf905315a0b7bc82a2199c10b200e76f0dc06fbfa88f6201cf9714cb0c4aff404af609403a9905dcf6f67b0de5e8aca5def7d1859029a411211a21e1154f8eb972c8b9bc21d481dc982a9795b63486dbeeaef151a8701cbbe488afb6218cb6a77d2febf11d11386bcfdc7811ee8c7ef9870e5889b90dd4e8620944b2f8a97ff0b4522847f6f8336fe534a4e755979ae7ef3f8d978ba7d47ee1c36a3d614df17d5f5af726733079d1205ba581b3fee48d6e6818e1e6e72267aae1a8bf25201536c66ee1f65e62127ac9790345d06864d44eb182d19275c889058986a00cccf20330b76d1f7d35075127b5449d747e21a2d54352cd56f8cece39e48d48def690cde75c230999525f3d8438f2f066e823e14d46103ffc193a1c901944206348f87a31868b1c79602228262a94a56f4d7277fce1458e4a7f165d5050348e636a31f4575d2ec1e70858f956b2b3265756174e2b3d782209d26a78c2b3e3fba5044321a008935ea9f20a985cf8d6dae6aa194c2182316300bc3c552e67dbd0f2bd37eb56b0425d88c540ec80258529e3f2805b28d7f8b9f9e396dcdc97a473123d1439bf7cc4244c2a00df0a61497b18d554628664568cbaef7ff51369c44ecd2de2f22595a01dbdc8545841d3a8384bfc9e488452d2440d8900881d05c5c7eb35aa00ce225eaea24843406fa42cc8450e66f76ac9f549b8591f7d40942f4833fc734a034c8741c551d57ddafb5d94ceb4b25680f045038306e6bcc53e88386e2b45b80b3ba23dec8c13f8ca01c202ae968c4d0df04cdb38395d2df42a5aff646928323016370ae0a0049989dee37bac5bfbc45bf192379d998bb914812c05dd5f25a0b806ce106936b1495eb9486891ab08a3b01a9e807ccf78466f6a87b1a1b543eaec32f0b64ef620ee90ba7a2f2530b9d25593f81f9b822cbd4b0ef26d77128bf914c3246659875b71680b003a308f183a9285287ac25bb007f195f5a1291e03b378e0f38850926abb2ed162ef7a732dc1ae18b6fbbb010b0aa92618b37d82b5015fb2e482fcbe53b32a3729b8ca82ff50f3732b094d1e45b0bae9e40c3ce6a9cc13607fbd25b42040a362dcfcea6496d0a7bf0f0b3f5767e06e07e0142ef1e6fada134ca1931cd94ce37d0322a0c2fa271323e86b5a5677820ba895331a4c7474fdf3d4970d9d84be30ae2694b544343f7fc8409066c3807ddaf389d2c99f5b23c3279e055ddf2b7ed31dceb9f1914afe33d59ee22b4587bb231146570491a3ee76d83254498bd57314f482f91b52474e76738bc9708596232e2a542c91ca55bc5c2d19ed9a498b873a58cbbcfd2e301692ca8eadff2bb49d426539b738f37977bf4fda3617c054a18f73306a5dce0f3ecd012ff69edeea11a8ea7f62c3b41506e565fd998a9938a9596d396b04d9ebad7041f60c16463f67a9e2ad94f8b4335117980b7db97b3f88e16e6e28baf8cd4dc2b16c582e0cbb878b754cb4a19cda409c108b4a6e0f72246f9d580746d3bc050d7a1840b0d8665a96cae32c841313bbbef405676ffdd8664a227e717211c0bd97c3822d625149c6140afa636ac2e5aac36c013e84ec7936bc2668cf045be15daab533880e206bb44b5c1ac11a5058f5f4a2083677845e7d0bd19f87c55828ce8c78b2b77aedd40d84e9c9ae5e66748499bba1b70f6e8e21804aaa037db19cf6853387246f5f8db707d89292fcac423ffae255291352110c63ba11a9f40d46bedf0e3b35b41e9d9c1c52fad5bdc9c90f5e3dabf54cd7f024fc485de3f1152c0ee032555413d30ca30b7f8bdf696611da0ff42b8182a63253921d15183e7158cfd2c75de85226e3b31b86cc19c82a238a53305d367c67df806f60c1afa1c8d2e7fbf4dc593abe29b6969045e9a1be06057319ca7c04c10093d93aea12e3c2a040a4e2590e9344e693c2c47fb8bec9c235b6d6f9bce05c9c7319d317a8cc08ccc114b95c71255f2232e84b01efe5f460006690725cd9e1bb0a7752d0d923425e5195a06de9b7b8e67b4f4c53f4dfe7e750c96ebec6b7f8653f3adf9d0db2185cda6dbf15de13f6395641f0fe3174495f0c299964604248a3faaca407ac3f30d043e53fdbb8ffc224ab045f890c6bc3d11ccc38ec94427a7c2313c6951e9335c174454848e044c4ae62e1c07cef8efc4468fb74dfc97e35f9a3b870d0cc76cd3854d501e3bcaaa3df63203b6041a39dc0d7fd75c466bf222160e3c83e1cafa03ccddd9334b5f808bf9609fabc6a734d4d531c6223d5cde9fc43dcf669770857d5c6a426c334f89a57e3e42218d2c6b5f4c49e63857d70319234ea23d946479a0b2873e0199f7002ae33f8defce1647cbc10cca270c670a2ec1c567714ef3510e7d992ecbd5f29e7cc6c8e54f1ff144bae20ee446f1894e511e16919a4dc9a6270c2497037ddebf2ba78eeac7e949fcad0dc4c7407dba5a2096d683211733e38afcbe09510807dcb7f3d600f2c08cea02c2c2d58c2776c80dda69ee9e11ee838aadd9e82cfafa91923a52ca582c36776caf9db182755ae28947652679e44620d6bdecc60fcd43584af979995082d32f3b0299cddbedb364236c4cbd3cf4c725dfab8b2561f56eab62afaf00846aef9c0e8a6b9cf1072cb75cc775256fda0e1d15d51988dc19d90549cb87a25c5af82847a567a15a48234695c792f18afa776109e93c62c6911ef090eb87c150c9696e86c2326d802743ac7f1b1aa406dc9fbc3c564835ca01ace7a86e241ffa3cdfd94c8f4073fb3aea53790070bf7c06e3691d8ae1945ed20f7520f1e100c13ba7f2f96b063733e9a3d60436399642efef123e158ce0ed88b3037ae543063e3c7e461dc41839b2b9fc9eb11ad9db041e1f220e74aebe0e9c342d26d6cea2e9b5bf3d4a48eafe00324137f03cd5f0281800231f36cb7e2a930f5ca534e8692c4dd752df57f2e6a4d93e1c51fac27837541e8fe0ca67c3d9f3a10c768e34cb9e5b73317d8fc4a609153fc656f303d5aa58d6e2e3ae08018544a5d73b51183cb8650f23853ed49ea58cc2c06fb42e8b199cd5a6985020d9c4ec6a27341c175ef2f107d38713a743228663850c9cb72adda677559f6f469f01718a87215dc684e695f9bc037cc135d8c89eaede4b12178efc587a4949edc3e37a637163748a510bba51378af896e96099d088251de3e3a604d58f268e8b0ab34da1707b1ef745cae4aae07e05acc03290a5bba1938101ab669afec78bb2b61981b0fee8bb71c5ac9b63416d22777cc7338ab3a45a9e14178805539cefd9788ead0e873cb8ae73494526d4c8ed9b51a6f90c0addd18f7d72ef9138272983a47b3636a3d7b4f1b0f978420521b56cf15a67861b9e76c9c03603eaf6f6a725dc77a3b5df5a2ee01165bb517cf81880de49f5958066d8f15ed97b6f1a7c0754730c7c08942494ee16e674e186cc956b6b0e29c6b3d7668adbe5ac9a3d37c8842a9235ab6cd7759034243b5ecd1faa714a0f8a763060bdfab9e32df8b9aa492945a1471ab3e34f6aeb878545ba51c656ddd68e4070833dc56b4a66073a5427d866c246d313c880d2cf88d922c9038770a8ebab921ecf647f8293eb4219c5d306007dbb6106f7c87c32b0ad6293c54c533dc779077595c08d72482445d25fe936a52c0b41080174abc79788a184e7b372fef26d0d3f86e083bcefb76f1eb2c8eec765bd0f817623f5f095d15c271b2b548ee4fe1fb71332d6e4f30b3a394ef092d9b347092db634ef30444dfef4b0327c4017b2bb76bb360b7cea9643dc94fec76e7d4fea4752460c291b25066847575ec523016d18ff78a5d73efef8531551f0f85c2e0f78cad5b12d931d0f1c510870806f90a0f840691a96889be4475088a409b868053c904292c0448c756b6dd4560485b6f3bf2e95fe3d2ff37413c71165152a94480d433b05839809d5efee3983b3ee0ad1b83a6da53dcdac4462f96a989d1b296455442dadda05fbad1452b66e3100f2c78dd47ec40aba1cc19f6812c314129dd6bf2378d05626f867735bb999ee7705419a8d37cf46adcb783383a8891c99680bb551cb316a7386a18749d17b5eb8c8ec88d5371b53f14ec4c9dc7a3f19282e9fa25f833599641cc7baad9ca7043ea404b33ceb5cc52cfd53ccf326799c3757ff30cd4f51658121569807598161813d46b444c2f81cc98d91b7383bbd085f5aa6db0b7e1951433aeaa9d7b6bf1918db0f065d6c71bd5f460b034c086e0008cd22fb9a9df1df32dfd06abf22a47d7e23ea2407265e4946dd2c4b7f3b20f5bc15f02d0b3d7f71d866c454fe3bd611199e4497d2bf122328a981fa72326a6bf1cb9ae9ddbb16cb9c9622e33550b87683b0cacc406531ed7d31889aa59caec532649fbc72b55c2f07b478aff50fe00044f1d94bb0d7420a9d1bbca689c862b406675b1f7abab41e92682215bdd7d160c5d7fc90d473a6fd30be9a98bf442a9ad65a697d4629c33cd517dbbed02710fa8ee991360bc8e557b0a0bf0b869e6b0c3a9457607580edec3859f2060c9c0340289d53a5d755918ca54876599045a86a9bcb8163795ea8cf44950175a3a53cd3fb69a05ab798101e773c7d1d6cc86738826693f0d2219838725f86a835c12228afd513df2d0f058faef31fb17ca53c1886dbeb93006820ba5a1ffdf8537e57a09e760aadc838c652d4e2fad0304a7b6d01b214b4a490c6e7646ce3f05d3b51fe4fb30140f993f6fa61a28ad42846c9c89b7f9bf00f4a1f2219bcb51ae39685744c12943331aefc08dda84c47d5288b9dacaaedbfc0d28e1cf295fdf2570e86b51c2b3fff10f869e0b17aaba5c74e556ecdba868e69f8881a776f2af15801ba33285370ff17feb524858045786f469bae7724e2d65afab1bd20ced8b2472eb4610931b3cda7206246b25f963a4d9fe2ff2180af4224778f67773b639fa4d3f9e1272c94e54f0bf5b9c06f1a55d2c8bfb35534383c56ed75cbf31b7814019fef161aca70d0902fe41058454e65af4f767d9ae62a3f52db093d2d0572d9ede128824c91f409eafab1ccb268bee42392cbb06aecd1c5a8bebe4d7d8fd03bba562ab844f98b1be00ae351975fc85be04113fe3ddedb69d907197f6cf13cd4075d6a1a9c87a260ffbefd415f81073765c8e3b99c22a39664428f4593f0051d45756b4babb2c6839aa5741e7372f7f11498bf64fe5ed6c5cb0f94325af2c582052ca2adfb1183fe515ccc3b8bac27338d3f0b92ecf9c1828dbcccb85a8ffa9cc6e1a4c4231a572bb4337a3b00a2f159203a5cc5e07a10572cd8ad59fb1e10e7fb32f6208c33bcb623c812af6aee02ec8e09377061562fbe18f19a99b523a4de12aefb45cef42108308909db32e3b858172a0024f8249c21d28638fa213722f9bda4389643e220ac5b04e470e13aae466c2b5b460d5bc21cfa04fcfdc7df17c55cc132b48374481d13ba26f30e394111ed7bbd6629625e29f00c4b070171ffcb60648e031630e3d4eb1735c402961d552ba98b07c4eebcb344fac7b866965766792c8f14748e905e51aab57676a78f8aa71368ad78476a53795ee7948fc29b410787da6b1703ea23e7f31a8cd304342cd067bac9ac02e374fda72efdc57d47c58be4e46986373dd00e7ed979902297b6480515dee8a7b4b252720286a03cf97e76e221b23a7f27cd35bc76cf469926a16e89fe7fb6bc5a76083e06b1b8681cd668fe36b7bc6214761e2a76e05ece6d88c454d90e8ea7414a9f79aff166a51e57d2a787fc7486a084f8475e6f5138e8d6e9f42a1de90f05aa88a362d8436a9a9d346c99f30b334854849191ceb66f05163ff686104e3a14104449c3d8d73f0df11ebbe12de91e687f23a7b58106e75ec136ca61a836df091662db47758a88d50de213f22f869ead6f55e84e28bb2852527eee41282b64311754e67220e5deac4e3f13415a6c4a73afabe1a0185ba89c5478d0a932a44038adaae9b88d61b6e03c86285341229857ba96026ff260fe7951a5201e3a2a199c53c5539efd96881d4347d1ac76120ec60a94e91229538095a4944af4a13556b87444c2aa03fcf8b00cf49db16be3144b3a39041b3fbbd55df7b6bfd12a5e6e39b9a9a54e32fd5f45042ceb1684fe5f53a3e2c20f97f2735eb59d0d3817fde68c8e547a100d1042589351482073cc367be232c153e4afd10458b7a1ae1cac561d5cd5cf83e4ee384764f243839ae540306f99707c883c74eb6b871b878ad21388bfce040e6cefa7ade3905b947cd1e2fdc6976e0e1530e560688be978f517c54b217db634078d270889bbfef79c0ab54061bd087cfe25892fda5689d6dde5d1d12c956489475f2cc3d1b5bc016b083db4db6ade4da57306962b477b45c7b4dfb72b757d72aede2f7c564e01668c42c2a79e316df4cdb1b43ff60f4c3a250d3569b8ce9f849072b5ae81c56d8b52530ab524911606b95a3889a4ee6b28886779656ee11933beb545c6eecc5ee46fa17c59f91a94f81ae4fa1fc2955695645c1236986d99046c2e5641e7b363f636c67df2a62e394d44da7f4ed974acf54b43a669cfb48d7b3b467dcc172b0b553a3aa63b965c917ac9b34ea3540cbcecafc69c5b9f56651cae8612b1f783c3760c667b8154162c153c07dec9bcee34dff44d6a9861e3ce4d2875bb90036e1aed0fd2746069fb67810e30b60e8e697353cb50a7bcd1bd17915b8ddee2c53a700ec7271755427ce252a2c64afe432f16cc9778ca154972ef9d9a470326a789616fc4acdadc680b1b1eac41242575af8dbeeb1e485e438594a67729bed844db7d848b0c3562553670298d39d800906b46af38c9b8d44a65c56074be7874079112e17cadcd83947f9027c808bd0c2dd2e021f2f38233e8a3f030057db6867a5ac01b3c09f9bca056e97ddf4669c49876d89bbc243ae988c083b9cbdfff8c178913762bb9508a034ceab0557b54b67ad79e90f6f45961b53c1e521a6dba0159bc7ba6de34485827d22253ad00145e4f75b08635cc5428f8871e9d839f8c62db556701c5f367b3a8871edc587d1f1880c1ad0ffb14b1cbcd2212f099fddd4cf6f4743b658f3538efcc3ebeea5adb91a95be272a975f8b69dad89efcff1230c471a11a85f5017347822007fc521d04643950f72e368af760489e20f8822044d3626cdccf5fea452dc1912939b5aa3b2ca1d72751b553c867c37b9c47508e76c6ebb173ddbd362f07621d39ebf7dbc43b745b9fdc3c436747f378fb2f90e43064b377c6f7386b9b9f0ccd1f5b3f3908595be54717f5e03ac8819c23f96babd97463c6bd64f813f0bb68a8c3d1b64b6f4dfe7b074906b5aab115f0fdec086ad8bfa2a6406e24b596241db60d94849962e10428c7bb974720cc567a715290a9970d1920375be4daf5a2d4ffe6eed0ab47db16f16fb6d12002dfed4468712af07d256f3b8a74620975fc358c3425c20a8704dbe0e780dbc7b9b38156c893ffc8f2d14d002201c3ca7efce764e182843d8b24fcfc1761dec4ae10bbb67bfe36b85ed75b75e54a32a57868938fd34d3bccba03204de7a302a048bd436e67faf8492a0040a4bc96d523cb09e016f4ce12407b68f0dc408d6ee2ee84c08676d16d01bc14a5958f2fd4cbdfa777002a4d2f1f381d13b008664b120a2bdb048fc9bc6b7ddb314f475b58261c0aff555f11baf458e832d12977c0b8037b3bf2992c0e0cd51d8ddaca6389baebf9211d7a63dc444392f5488908f65d413c88577e408a6e2da1603e028f8e12b23d8561638bbc9960e3031c126015882c366c3c254e5918eb305383d62690b3da9ed22902d1847a19a20555aac944c22c308da8769da29279920eb22d72b627cce4b17b3f7c5970d599a2fc3b89ab92a9f493a359778e653d8f38d3f1b929f5efd7c96102d66502fd8e8318ace973800b482736b6224518a1ee79ec094410a5aa3fc3e23325d0b8f74a50b1e531c414baf5f16775e7ee330b797b075d5b94bf67e34606bab2c21a2c95b0d0cea9c5d71ec398407e0eb13ee5f6e32bd545ddcc8d8cfbd67fc562b104364b7b4f999f509f79c5c9b9dfb7c2962e5c61594c1254840289596aa6d804e8f7cabd50487908a6e11f090fa2284786e98cb0d1b65bddb30d9a98649c4d9b3e9ed59bb9ff7c8599c14f08669e2c531def1b2025cce1f18475d39953f0e9ff6ff4131f7206d051e2e2fccea81ce970c307b2b93dd6cc175e01de6621ebd3b7e4c12d5063a59cf4e70ccf64bb648a25e0fbf984011c44d8a97b6307b4d2344b04cdca36752408f412066fd189be35fadc9197885ae570bacea90982f6f0334436df93da8eca3edbca9a861df87213781f9235cd2e7b7847335379e1cd8cf929e4c1304397e06330768eb951f2c74b2611c57a5c6724850741435b2c23edad827539487979aea27c80abb2735e06058d1bf40f3ceb29bf8160405669df5c78d8511083851a7c21464fb9198e23786b33a3e59b75a4d24d3df91112a2e92182b1e00e8b6e649208164b8095a72b62a2a21361c710786657c3727f38de2984f29889fa053c3e378074dcc7cfc85d0fd562d1303b14512f079c3552702687cdf012b79d9cf88fb5b1e96a586ff8a1c62af9471a9e891673834fa8526181eb43a6a9cfc0f6a94152c2fc5df91c40dfcec9f1dbe79878af7bf3643546b4f73d2f3ae43a29bb573b57db361d737ea6ff70dbd2f75ed3e8038f806343f8109065d9d44b60a1940a650c261e128e3e35eaf488220249f4e1fcf652d5392e1e554b899d67a9ef29cba7b8c83ca51104f286a2f76b646ea66b81fa904281b1864dd787bcbf7edd21a1e9a4ec183cc677e7bcc1513484958f8f7be162308249ef80f21a5adc453124951319b83b4173401b759bbd06cc885754d0f4f129a4bd01f7828c9f4468b4dcae0d5d542c1ae1079697766468a30ea7c3697b65b44fd765b97023b2814d2eeef4bfb8e97331d873610b9b6ee271ee27e22ebee65aeb5dc3cea528bc1b5e67056f12749f99ec202c83ba5202fc9ff17ebb07049aa1e018c23f08e2e4980126c728ecd89d25b580db048be3483f93df5456dd97ac1497d00b13809b5382a035dc26372b0c9ff3c128ed65956932b68053b996bd4238764d4652f7993060a25aed71d9b6138f0dabba4532b18d5e709b21ee1cbf8597e6561a055426a4bb6f5ea212bcc1db7e6d063a14d97fdb492afa66fd55e59cb850b52f337f88d71a6f08a210c6938cf47a9a4f6242477c7d4a63cbec2b76af231a302ee45f07f0050a229673e1764d779c2fa238555198823a9ff7c585bce861ae90bf20deed1804a8722544f4b046913b8cda9dfae456de607694904afd6df9729c89f0e38076a0b1c2f88ae68aa0c9bf7aa09a194ade1b26af475364826673d01e355b570a33608dd8b64da14c83a791c19c369ac959c0f314ba18ba93fc582fdc6a6a20d176cda47c08950c3e16b41729757965aaef562e6b95e63477562ef6a0d124271e686d5e78966b0fa88277ba7ad46b6235c764417d7fc6ba789e808f301291543830cb249307d692d1ee79e27b60157ab10a72931221be34dcf9d36154d4b99069f86c5c9404df7d028340f8f5c27e9368df098cf223d98aec91b1d4d6bfa5c1f7e5da7044348db883695662b0a1ae96a06fb094e42c1ca5f08ea1507d7c5cd02b219cc66b40e82c9cc7438a74a6ae6ca2e1ef13b1e4916b30182c3d10b3e6a64dd43ac8d1cff8bf95c58dd6097985fbb65e4e7121f53fc5f355d803580b4c29a5253cdc3d8ac65ab58dbeb036c13b2d230e5616fc042e9b8370300a1d2d95437a3d2b6c781859e645445d7fc426d9e933188e6b0abc67d6268fb9bb26c1c9db16448fdf4b23b9498d15f3ab7c5266162ca57ed613c2f15c25dbfd7c3d6ef1d9bf61ee9d7b50ef6dd526079c23eaea9e57dcafc0dec1d417c87b83b628dc1324bebcd20ed3490238659f21b984996e68fce6a892345f19ee5697d3d2b0b43aa65b7ec29a1ab6fa9484a9ca6c6605f85c63eaf1b2dd44c7c8195976369d9e6b46ddcf47a9173ee0687c6c881d90d69362d311138aa119e68f57e7f34cb741b0ec8ed6e8a3938abb9c930fe632cbb544629683958048867f2a5969d27bc6461080b4bc2df05642931712ba6914df4a1544f267fffe9932988167089c2a915494eb98a89ef8280d70c341979b2b943c0df030e5da6b5dc63c7cc8ebd8c3e114421382c3c423d1935b8767cb03dfb233344f9727ad2f5ce97003c63c0ead7e2e24e1b93526da187d5b4bcd81299900d99347715200b25e443efea720c6503049423d87254c83c77379f7bcdf96bf47d331c104915c5b2b7fad55b4c18914bf0da21032bbbf88a41cbc747a0dd1bb4fcc17a69a0a47948a41c5f03547de61f2244e400321064f78212ca84f3462f3e06a4bdc79e54bc545328fb772da4e9f92334eb7427ca9420a29d17c857cd2d1c255d74de94bf05422fb1293b2a0603667e5a85b37f731c724ddb4d8630ca8bbbc36c2df3464bdaaea44576a3fc49c8e39df66162ab725488ce5dca5300d6c1b98b5157ca1573a2f64b464265f6c8a0fd0cc90cf62e70d2c0be851c935a6a7581c79d70b774def4b5af443ad5bc1b322f4522c6e28ad72db698f1c2eba00e0da112b1074ff6d656792acfce97bea9e2d6c1944dac431dabd6e8144ba06429f093e72c99f81e023e9d68395c0060fd39a01cadffd7e9cd03ae266d15763956c4d6df7097444cdb13bec21181c465adbcf7b0d06be9d16d9ba8ce8ccec1721d00e6462d8db925d98c39c2f8ce481f13d36a289c0056bc67fa535ad3c616b0d52b4ec5a3ebcb1b75febb055fa0000fc81353de715ba2ed54963a55d299ea7827ba7cd8744ffea058e1aee3a69570ba4303616ce0dc62f6bbf5ca4a19b8a13a7d14fcf92f18c856caeb72087e1d3e910d1a0f3e7b10fb6ae6af8fa219b0ff7a5de15ba234e4bca16462c0ce36b5be46aecdb9dda087e0bc9d1a06e8430149aa32a5f55e16124012bdee07bf70dd842d7094fdc4e1afb75e27dbaca72638245ca3b966975340071d2fe3b346bd1304c81b16477ecf06f3d22f4b0d4953b3f40429b23be86cfc563342fa501e6bf4c4a906b82385b91c0acb0c0e85592c034d332d26c1cbd385d1f79f886a810de14842cc011e54305d808b568cc1414fa4946c266db4bc279aeedc8e246f2923670417b3779474e559d995875c2dbc1f267e01ce1d7123c9aa21549744da714cf49cba85822262288f9a9c26e347041af74ea65cbc73bd4a120de2636048f3db28568d9ab744a67a6d37e1adb899c3d3959acc8aa158c31980f9284b0d171b6e60e6137b9d87ac6b81261894529275d99ff6e6b0828cefc8659778e6b1d172673cafee909b480e6c5a09a37337cd948d64d78766c68c8dc74e5d569ee51473662a3861723712271d564714b2dea7aa7f82a11125f3d447a699bf640c1d3ca8eba8043eb9078290cf1462eedbbdbd12108808367680f087d6d6321396d0d68d583487b8bd7305c611f2e184766b7a75f0c36149c0f46de8e88259d7c7965e8b4c5e5771f800085186904787eb5e6c4080f340dd9dc4a8c55c3c9b3326d4514d2893e7fd014526ad9d7b096bd31d0f0c51662b6485884da792537ab83d214b2d8d63bdac51a8dd54b701bba2a60ddf33e2ba8560e0a5a92a3b758cd962e3a8b6db5c4d2281a188c163c2b2cedcc76941a55ee36567a357a7a801260940c1f673a2dc1ad1e9c5d57e343c9332ffd019c029d1c9f46317e5ca7884eaea4f12b0ee6461ab4d129c3005a8ede19187ae8d49d091ad706b69bfed1d7f5fdef67c6471a08b82f6948b24d22245024cfcb910194a4d026bf91f628a176ed969df558db7e7c81660d829208e40d099d7d7866ee8e7326d6994bf5a4be6c20c1d5244993b9a95ea0e65eccf74752efcc4909cd623480052ebb6b0239d2c174c6bf7a0135749837271c64c6e3f4faecf85c0730242ed253754e7984ae827dd3ec8481e889564ff541d61ce993920de76addfaf6fd2371faf479fee3cc78a9247c4cc1665908d87e373c0f9dd1ca94c76bf56887b5bb66e0f36581865b5c4d4fbe3ec1e46b313bbc5178c44b6344957641ccdb4b149fb8efb9398ad723d56f3bfa8309c8887a7e96d6afc35912a71bdb3489daaae2776f0d901ea13deb8c19d27842217c788babf3100c9531a69b2bde8e55ee0ce6ea9424be3c4f207d2952fb7fa49266030bc9bd45b4c139e7cacf6795579dd9e9a12d1b8cba1be89f53239e59d1e2f0f1a3e1dbbed2cfdb9dd90e5e93b87279b34445da42c18efe1ab292a44cf09c8109fafa35c38c487e8f73f1abce9ff2540c7ae14928782ec8b5efaaf3a12a458014b91cb39b0ab389863e7e378f35a7d2bceb0b50860886af3ab27074a0a66757db874f3d907598664ae2bfe81da1185c8a40cad7a3981b1c6fa2ee0f908d896d230d9cbbe8f57f7ca308bca7c20ccd583f2127c6c85177751e682badbb06342ab7f20a15ecb1f13359587c5dc49e4f30a33528053d5b21230dac2f34673aeff65edfa233e4d275f3337907f06c7e254a7e25d87c4adda18f0515038edd504239df7c6bfd187f9424fa14654a02d5d71098983c1437ff8020cd4baea16571b55b03706d5ccfe1d52e76d09f51cecaeee8b9375eb34beb453d2ff7385746c5d1c49264b0365320c07a6f56bbef1786f13ca8aa4542cfc67850f1c1aa96ca731ddd54ff3d75ea63dd6ead4dc40b273168732e98f9aa0bbba1c0dc500b4837a4220c10ea1bffddd2b573f75ebf8c44f2dbf513aa83d147ef49f5b84d6354d67f66ba90cc52be7497cff21731b65cb7f1d32a1f87eaa1cb8df7574d5fbaa2ef2d73509a4eeb98f6d7b351d36db062c857d87a19d73601debb344e622f191acad5d134f718ed77adbdeafaf4bab686be4c704dcb446fd8caa18742c16487a4aea006d06fd16042df6efb5342c2cfb0e3f7250bfb749e10d569789b30a70d28e5b69c8bc9214ce1d5156ec6842a03c87d817e1c720fcb9048388fc178a0b28eb53e1bcccfb2ba3bd7d8ccb9849d5ab6d51103e8f8befc406b39551c61f67ebe676009fd4729b13a2cdf9c9608c1dd6233d03dd855293b0885915114b25279a04246f085fa313ac51e5366c4d93e93b5dee6b35250f78fd0e06b0c12355bac1d901557ccb0705cc4f35cb3abbfbd8595207aedbfb2d00180c2ed0c7cb0ba1e1b97f8c73a308e1f20f42109b381e6b9eb3fb47488435e9700743fdbbcec16d783a115c73744348bbf69cbf344e96039a084bdcf13cb465b383e8a0138b118e03ef494df2bb20aa98a9a81f6c6bdd40d9a37bd86ca1233551167f6045ac6684033d89e977e43b78069ce6c9ca1c6e93bc3a0db2214dfcb8c7139aa6e89f5adff49975b7898bfe418454fb46c3dcc48cd0207402a58fcb60842facfc62c048f266a78f209e1ee387a046380ee039798ca3eb31426002f9dd16af38c95adbcb8bc7dc28bd2c2985cad9053f8ab59ee823b61ed7e9f734128f0d36c0a6273e5cdc969be505ca184f7b9cf67462aa89aae2752fda61c19fafe6c63ac70b5e647795618b4672ee77bb2a7abe68ff35964c396f92bb5255a21c84d04fde7166ea9626971ebf8d1fd45357e0b1afe8fd2116a913ebfd3429e802d9b9da5970e73d5300d5cad2ccb49aa2746d649b8857d6c4a1e090027fc4dddd65f15eda7245d918c47c1402aa635723008f6bce85dc13c0c484237dadacf016aa1561d40e194a61e2188ed1be92864f9cb52bbb4a005485714d1ac13658cb49267477d89cc80dc8da29afc271d8a492a97d28d44d5b359d48c9ea7fb23edbdf6bbd055ab6d8afa81d2ddb575c9c2e96b745e7cc18432372ab79270ba9e58e63da4d9eccd4c18caa4ba3a602e753a0c626bdece5336eaaa029d934e775e36f5102b4a8b18f294129b61994479aa597aba833acc2171437a04478a8b5be9f0b316560b7ab4e6649b11d0e3aa7fee87fa19c55abe54c0a56ed7bc606d8dc9ece8f82f0501c8b0f22dac0dfeda68cc2c56283727ec13a878502404fb3d3586945c5dbe1e687cd9a4901422d41c5bc9b0548ee3879d87b324e6922845427da64fd6ee0a3ff6f9e8e48bf2164cb8806f7cbdf3d1631bd86811f9ca2f25c68bb38420531b51f4676519e7eef24df50045f6580108a4ac2d4fa7507321820f87359d0033f93aaaeed8aa6cafbdc11d03d387ef5e903099aef14fb5360746669ab2013f36ade460b4ca01e2de7f8f76b0a29748b271f12a85d56feebbe85813ecb418a5053e355ee4c3851122419f4930398f2da6b3cea6d78471c4a9cca05ea4c24af948b417eba4499ec1240ad9ddab20d564e15fae57cf84bbffa9bb068fea65ff05a61771511ce6b4b98ce2257c48e0d3b50c7d7b83925fb76762be72ede8239f8fc8702ad676212fc201d16b6c2f00f0eacf131c734b9ccbc37ddcccc1c387926056c62cc3d78278a42be093f6890893c9d12b796f20c461dda11efc53a6164040f7225e606992f527b31685627e81261cbbcc7abe395ee07b778aeaebb75a12f6538ba8f454d80f12417c29f835f210a934ff07aabff2b066a62b7fd11eda6e4c1309f2c9c0dd2e2f7c186700d7e3b939e5cb0879da093966d706a14c041ebd08dfa42425d427bb440df428c18bdc899376386574b12ae243b22539a691af68f35e652751b8401c1a9b1852847a66e8818e4e06e36ddd15c4de8f3025ec14d5d53953e19595b0bb79cf8acf91cb083ec9d516d30e35aa3ab2044c6c123ed56e7618773b3893fdff2951548530a74bf334f597b53c321ab7d5cb65d7b5ae7b9a9da1d71d84d9b14ff1c87e5ea936b66f8a93d992b78cb4f5f5dce15855658dc0147f7d70bf9053159add0e41439fd11a935ae554c56a005cdadec8d63b8a934aa158711a32df6cb8ed370e15470b245d16efc2e1aff487554b7a223bb046159f0dd5b90525ef83a0af7f85c4fda1389eddfd7823bd54d0461258f86efac19c271f9d5f17dfe72035ab5c7c35ad8a9446ae2a100036af6498f51f51576122af4aa1596b3aaaf0ccdea877fa509fedc0be521e91626430c9b4bd7836de2f92d77059b0e355cc320d066d7707fd1bf3456d918203308dfc8900320aaeebaa389b01114bd1508ed46e12c305ab2468c4aaba32fe6f52fa3e2ce61b7ec1661c3d83658fd13c1338ff746b72c9efadcf87770fff39dcaff31c38cd417b7737cbc817049ceb2d8512daa979426ada80986535d3bedc5231bfbe371d6daad9460002e047ff41ab90648e94a4fb9175860b856b6d388ed9bfa84db03d65b2ee7b02126594827abe1b7542bd5564e5c7a56f10a14735f87a41f4f12c97f13dbfbf1b212e54eb3e6e0f8e1fadf2460fd8c60e2d5fc87dc23ca0ecd13292dbf052f89157c4f00337c452f74debe569b6b0d22e052e58d79328c2d8164a96ea75b110addbaece920bc7cdf8f3ff94958358af18bf955f0c13449000e7fc0be574e4edb7d6745860628068d9397269921dd74714841d45e5eb9af2ab6dd15a9594f179f76f9ff534e5f50ce148cbca272e3580697c4c7327c332d123d050e9c27ee29ab4cfb60cd73b309f594892211e5b7a4461cead4f9d421213ae37022133dabf3a381d4107120d390a896150d53d4eaf7a42a3c5420e1144a295ca6d6ab24f8e40c982c94dab031636b9b98b4e4dafdc0a55221eb541d8d06420b31b2d05855994b026d5466ac4d10a317bcef4152507dbe2743f0eff3ebc43961794d0f525271e3530ed5a19f9726d38cd9e2f5f593ad731c0b0b710eb122641215ebd4ad701c69fc999f17e49ff4918d78567f1f37ce5892ffa163c88daf467f6035acc42ee7438186273635d828517c20a04949ad6ed34e9a4954bbd1a9751c10b11430ff6104646cf488edc02097eb6b66e10f64ed87815369a0431dcf647a8fc4976e52182127a69d8c76f88bd95da0f0d2db0ef8c9edb388f308d27f990d360692e6d78b2e4ddb68cd8be1b89a3579f4ab370bef2ed6433db97780488766bbedb334f0288049740ca8870c355f255ee8b69ddc5f2afd8afe6019b798b3f989f064d32c7edb9cf8ffb9e2e8809c8fb823918a00b752a5f3218369d91ea34818a5244bed0c74cad2988e39f738d6e71e5bd88619861a81f46d9fd28518d9d4f0727df9c2400055a98d71f6c8bc92ce09f7d81c775a06f43729120e1c35dc2299eede774cb7e2cfe6452193cd9a5497036e3cb7aa918c7f13fa86572ee40ea38d80c25edce2b09c013609bb8630a0f4834562d233cb3fa5133869583da1f5fa43cec5eb034ede4c92f686b8833dec491213d716a37574f8dd89378bb90e3679453f65d6505ae044140d45253510bb17283025df6a1ee0dcab638d5c317724b30a390e9b34a55b24fcc0b18c1c3771e14e40cba70825f7d3353db754277b653a2b623c9420aca361b5d75857b930c529ecbc34f7fe292e7ed39e621e1b996c60f1418c6bb4df5d8ce7a7a6129c9b09739c18fe6ccca6f9323f0bf9f48e4f9eea243d5a8c61bbee090ac8273736b4d330d4dd845fe41dec8fbfed0b71e00c91180cdc4370a7d0d958879f584ff83ca6f41f70635be50c7cf9ded7f330c16ed78d43a4c3a307aca40 +Output = 7331b0f37a432d2c628e8f888908fc68bea158d96530f79dc7bc6f9ae28e5727 + +Len = 104112 +Msg = b93adeeb8b3f95b2b29a592b377ba4b68ae38beb76c14bdb535c24997ef06afa069cd998a87b291dfe12e2bef3ea72057a7d7cd4805774a71e75691914f121aa73e16bbf997cb1ea627ecd6c9dce1df8bd5edabad153a598b76763b88c8b4b4266d03d67468756a248a7c13d1d70d018bb4e4ba65300083884f9bb7ece07104a4932f79897e73fcc1756673a5b18b1ebdd15779eeda5c20eeef51973c2ad974b83cf415a74e296f03751676a400ee8fb897a08ad8789fea25e2124a051c409cd7c6fc1b6c5c28096106068d6b2999ed02847a3d80af5e27d3a47850c61968d569cda22b372cd27470a4d12849a02fbf02342f2295c319626eb2de4bfdb694c704bd70a5a634cb38a8ddf0e7ee19226e5e0349da766854325da9ce7c2a8866ea2f13022b281864ce801dd04cc6d8e4837c9e44c5a103911036e5b391cae351a74f6ab11c3b2c518e8ce109b742841886c451ca64b439427470e3480d5d7bd786fc2117f95df4f42125c407c80f9f20f0ebba25381e5dfae7924ed65f60a68b11abd291631f16ef0ee13344ff7c7e804a5953ffc04df63cd22174f8f862f7cedfe50bd7b9ece674b055cb6bbe27c6c90b73abb49dd1a65adc94f22a78d2d4253a1e19359e460857ade9d8c6848ffc6dbce12dee1137d3075f6342e5414ee020c8dda75560c8d0fa5013f7fff31383e0c7185706daeef0b4e312e3a3f2159043f4aa1291a1c3f4cf6f7ab5728a60f1c4c29fb3894b75a3d6003a5100fbf568f155ea0774e1f5d85934748dc8aad6ca7c27cdcffff35a50fd2f301766df3cdecb6533d299a1acf03a4797dd6ce51372897f4908d5530b8c9cd8aaa3501c7a66449b1e205a5177d0b5216b40c9b9758e7f2197faa3fb17bb3784e08157242c93df7fef6d5181d4fe8c4a554479a89b72cfc72121e65bed614fcc983dd696c1fbfe7c4e15f9a352de024aec54f732e3d3fdc87afb06e62b136808384578d4e8e34428a0a6cd466ff3d97b96eeccd8ed067bbe0c02a03a2f45f2d03714987efffe22fd9dbc36eb8ad45474fb9e650b259eec106ab52cb8887d82bd1b47cfe585b12d738bb2e0f331f415cf70d04a5a1c11a1580daf16f1b52e9a175b3b89b8f880d612f12735fe03d78fe3ad20f7463ee34e0d6b3ce96633dd9b777d8c4069e7018f646495b08c6f034539f71d06401ca834991a0b3e96931f297608a6ae68cf97ebe06c6aeafed1ebb86ae500c1e823c51793807660f34147a66b83070e3620d85e0f6f234ff5eb057bdefd88e4aee2be4985352b0b1ccd0ba4f05349fa6279377859f35b49d208f4d20eb711d8f4e8186cd6ae859773a4bfa78d1fdbfd7e3739ad487f8f8343ba1e8d929848095a9257c4006312908856f8209a3f3981e9f9537f638a1c66ab8d06f0d3177800507ff111aae95e80db522992b047ef12162e195123a9ae7e79e0329e78cb4e58770f78c83eb7c5d2dd34e88057b06948b343ffe5113492354f5225f8cc1a177c2edf534a2444e5111e6da98c190f347021d97b8db4d184159c6145a2758a8fd5f85e153a041738c61f6ae0e84cbadd32e26d10cd76f6e0b9d18c35fdeda30410541a32fa46a54d6c40cb23579b59c00b956d5426d02b247c9f316b9d9cea0095d272310d74857f7e22ece54c5d5299548b68ba2c78d4ebe845ff5ae41bc621e0f424a406162e5b66467eab293b3ba5c864cdb740a98a938776548883e2cdd48c297fe06694067dcf2bcee9809d8b91b1822aeff61ac2b7d4a0cf78df7a7794e1e3028a9176b43313337c24e4fcb8c9ba940ea8cf2503c54a45deb0695b49efacd14b172946ae37dd0df4e1c8e149da4dfac7963e50c44862d5e0a3a3fdcb412744b7fa908c5ad8870bc7b4aee3c52fe627041cc6368abdc8e193d731ea6235fbede7c969b050b1abcd72f1f96ca1570db942c0f94edd91b6f966df75a9a54a950d48e8073b164fa5c3753e4af464dc3f21e21739f22370e77dc80101a40adb8d5359fb1bb511ff1f7e4d0e2603961bf4e180741ac8f2b7c4ff3600386219753f309966f996ea6c735e78c5ed22abb2c9889c8c2e5bd1e2c9fe3f31bc8c47b4452595b03358f6044c04771a32ca1c2d2777a4b3b703379e70eb4239f05b1bf519b2cd6b5b83cb52f3d0c66f89726de7994f278f77579a275446fd6d66871cd43768befcc4afd0d52573f52a43b4277e896f9373d1d18039eea1cf609168b0be18a7d8e92125bd073b4e71ff03f7cf5e8269770548f97022aa8c16a813a87e3f5800a9b4d39dd665bfc0cb424cc5dc141ecd50b85f47e09e025681a83faeebc45ff3afe46e60c38d2d8b6f988096c41bb8fbaf01874567f890a18ee5a7e47fd9bb0169fc5426eaca0f0eed6631f31de1db84f085536a6ccedfedace4def1a10bd3ba56611758d2b8cebbb33ff353400310e9b398363f657d4aab5a2a375f05c7347f03c74a6f11e5f7126f8a274fe10bd3aa66cec22cf8a06b5b152a5374f49877cfd0734fe20ebe12c360d950416748ae3788ad69cb7cc4ac8d6c69b5ec23fbf84d6b19aa4a4fcdac1f35a200c049660b21a798af938866a8b2de7cd11cea6e5048320eec005b712db65c88ab451dd074f93235060da1e2ca5bd9b8279fde6bfa70a3e787cc9865120953d1d2684b04661eb6e6ff924fd59bf8ecb03bed667161275f17ffe7ad05e388aa21f872579e6902a4431ed9e8bb980a9609907e192b1f0cc234d6e9ffc02cc4ce0d902bc9fb086598cdc64d030139115408a7ca7cd5ae715bb28f5c1740584e4dd93bcd28a69e8802eb98543553099da551e47af81d79f5aa159bb679f2f07598395e0eea1dc61a51110797e60d94101859f8d8117f1c2a2bd28e719e547feb3b92694994ed097d21f296809bbd43191ba5379a6f570f5f6f7dca160ae1710fb668f005af90c320e3f4b796dcce91092db8430a5851ce25d37bf13c26265e63874194eb90859db6259c0d431fde2870dd078dd062ebd31df651762c969fa2772ca09a33ee47f3ad456cea2ddb5863d088177a652571a8a84692db9fd2c9e7cb150aa2a72f546f66f1cbe0bfa5b9cdb8ed6cbb3106afc93552b493ee511188dfeee4308dca376b73894d8360f59ed08a4b7bb2dc8ce2bf75993b31909813201608c1b680557d62739a6634ca416416d540c8e3c03eb6f5c988ab273f1e5b281e0127b7073772fec793ba97441fa5fb1a5bd8d074729906b1bf68f7426a361b48568ab48b06d49ae0039f0d76f6d117da0b200b71ff055cbe9c193432f2507435777f319449fec16d78a819cb5d71d794bd32f7310a887240ad1030994d16cd55e259b0bb577e0cb0514a4ec9ca04c4cb0096164a4b9ee2087102aedde115713a35bea458d5bec7692c1a0efab30669fd73adfb2628b526567644f18944c92a42d0229f053b5dabf8777bfcc6af03319c64ff284d2867b9bb2b7b9b13ee9e3320400a13390ec704deb2047ac61467b638731e0027d13316b71f0b1e164521362313f9737cb6877c9c6a381b6199b052422c6f156ea983b7dabf77fd08feeeadebba556238c91b6da20e8b51319589a059df86fa5a17f627868b46ba546252f4eaa1c25205ccff72902d72beae9e302ae02aea01a2b2e6e04b00fbd89125fac59078b4b56c18a005e73582a6412a605c659d0ceda0f0f27ca8cf0bca37a0427a8d9d911ec452a9a207c53fba91b076af6a8453f10d5885472033fb11c067c69e328f0bf0b70178d1724b0e7e08c70fbe5f9f73be20603bfa41ee4e41b3e303ab1fcb79ddac9b9a1ec73573432ee487e3b53cd0c7829e72e07e4c79dc9ab8661ba5e16f282d8799e4771302ac6c7f7bca2bfaff9fbc69c6a435dd0244dd4e7a8a755f5082a25bd4bcf272413c5a2e57dc043854993668a3b0191e8c0d041bcd520ea3c25fb39ee712d9c193556047a893dea374567901968e989f5bb7a7b6bb1cc24d3921d9b75d809d8f8daa2771ea7c2b9ae35a0ccb1bba24ce05b72095e04540ba397b7d3b84809e4aa48d08239a1f7bad06165a2bafad5e292e9e173fb965fa7927bf16a2189d8c716c709ae333d83f48610df9b9cee2954f2acee42ac2e96018988f4e717621c8923a1758174440f6fb98b363ebf5f47a9e7eec2fdd896a1207104e8d2019d7e33bb1c3b85647d42344f1b91138b15d6e95bf5842ce694270c3038f5b44900a5ccc58284426bb2c54a320618a369d77f1c350b5d5840f1d0ceb06c411356543a5c2819773ff2a93fb94894f575bf6eea4b5d7675084d74466dd7e8f77a9060e4ecce2a3d045f2b598a7b0f4d12f6a3be7eba7ef3c475e72ef18ff33d6e5fee4c829efcfd191c00bbc4b1bd4b00773ca3bb366d001420103363bfd63b792bc4192980d9e0078ff00c6fd4e814c9a901430cb889c381b6b9fbca4fda1b225cabf4e65c070e5522c3f494cbd6d3f4f3bc4378291c65929fa82e2e264402f15a6b85c31acfae8b3c401d397ecfae0abf334e076f6c0dd044a675972e5f1a6f8ecc73c7a379e83144312c69d51dcd92742f0ac273c2e4c10b7a780e4e728b235e9667fadd4de6d0a45ccc29b807591479781fb01d6512ef5deede9a6ec47d9633900865b193cdefc389a3830fd47a1938d636da569fbee2a3c84f44769e174e7684ff0f0792c8170982597ec2cd57281811f74604b6102043d175134f4881d58d38f301c893fccfde0e9722b93a19c981f009fe10f33133a7d1f50fdf0ae4b3e2748d41dade949faaf40578dd63e784db3d150a639e49a335907a400f2c686edb0275d927bbb60fd5fd4a87148feae28fbec270e4ff7ff657d5aaafc8f53490e2a952d096728ba8c7f10e5847074a6a033cb93a7a5dfcb674692d63f0af71a15e30cc2f0e4a3af1e998fbf15f142ea5a07ea1700f02e86af315ac6470a04627b7608cfd798ceb73a1b9b75c42fcbe19ce4e23188a346a9b3e9fcfbb3110dcac54013a42be81c8b4581eeaa1da072450f672e73cd23caad0bccf3d6f1a495ab79fdb7e07c56ef63e778d3dc60d7f85d27eb394e3d162d191d56f9f881292e9d1ffb5fe53769ea09964cf57d5c5aa0c25d0d9d2166eed0767f1459c0f0332b180dc58652eb958ec4b89ace2d5e9d2ded352ac4bdc912773d8781bdd0bd472d94f9f8d59a076e302de4deb83cf613d26646ef4a43d22563e6ed2b709846d9a8ac3ae1a82b295880bda1756e4ca15330a5e8b7888410ac38fb168e1c982b6f2eb6672c78a6bfe8f2fc551b3adceedfeb24b10019df12fb68f28a063c50e97c125bf535e16d49940952962cb86e4d1e547b267578b547a76665be304a42ff8515f56baa5d1f34fe2668db2661512a92ff11cf742fb72d34d3bd29a8b0feec1e8c2b40d6660d206bfc97aa94c05625d25d710288a9554238136162bc1ad51dacf7660b5676e79a71de777af44fcdcd50f221662f60001505b81ae006e27632b4ea2e21b71a1ee1b45e80c2c17a287f935f9b60d4fe581442341227f5a24299cac6ec3a64ba13b487ff3c1888da16bb2de8579915debdde521a1fb124c4dad1633038abdbf17681813301f2b6e9e90e653eee657e8bb1c1d9dc7c0200d4af67f2989bfca93ab7b7248c8ad7d8244ff7edd5b86c5b8fc46d3dedbf91166c20cc1d727eb3490047e3d67e3f3e79138bf63c2f4df44945764ef2d062e4c1c5df8c2850695637ecb7863b8a87acf6225d87b4ae37b3d46747d58d26fe83bfac4c16c7b4e45bf25a772cb8340c99ebeb153b0bf4de21694fa99f81540ae45c79f6fa5002683b04c41735d10d369bd6d8437e9675d9a394792c0b63d9e09d24a950b575db6d89ebd408301a688e09237478c0e8c382d0c27e3fb7a94b3804a4c4f9b69db27cbf13e4daa9f8f87b887e4a25a06740923f9fb96512c60a79b1695752ac3c0a1e5119810f11f11f978033b3caabb67f602668d52cbb5eaa2e29cedaebd4d544bac6693305f697506a96e05be8314af2754bda3c070fb7acbde451ca25eefe14eaa59f656fd6603d5d22f0acfeef993c5a065068748e7584a1679e9fa1491add267508b29d2fc028f7bb01218f2525af86fc67e505b61cb4812a11e5ee81b01fe6ab41852e614bc5b2d58e54197074de74848d2c3b2521ced5b238175e07525fa3bee6678419777626e8f4af1e501b4bbb353cc8754a094607869dbe8078761ef62643d44ec6b7ccbc9bd0bd0e526d79b384f3245493579caf1d9f35e623afd056780645eee7a13bfc34aee879e5ffdb060a4cda49af713524fdd9380fb744063d3a9a56d4faa8366e69fbcbe18956f22b2ba654d4ed0ac2119dc81f6d91e74322e46c61917e516e7b9223c1c5cae7618b7fac2e76da78a5ed73e86670421df99fec1900c4f12126bc43c384a719458baf5caab1b0063f632126a6a7c8563c9c1cd81cbebff19c019905576f05f2d5d31f693e9910dee38c550caf5dc63ce7cd122ee3f612de2681aa4d6c0b52f63cfa542be45f09f2f983e1cc5ef2fa6493ff28670b314e35452958825dc41e81cf43d5fb184e1bb0e5ec5fbc31f1f57bb594c806ff1ac2859c5b3c5ac923d92421622d7d6710b6b73d184772c4e527c0e13069853bfd205d80b9ce2d2ac5136bc7b7c3294d317b6463aa0176944702029b5495684e62e80ba6a7767fef024db726b72f65271aca56fe14463e0c92248f4873c436b2e67a4e52b6cdd9a285f894c302cad7a14733ed70e96e4faa510fe57d008e66e5e25764295a5cb0d1aa9483211d3de7384138b6409be211f9fe1493adad4c7f6401200b9f247b9bf8fab210c558f12a5893594ff19e5a3b8813d3285ebc96f6c9ad44933887d2f184e0d1bc24587d078eb8160918833f02b11cebf204c0f653635135996a16db68021763f3c29e4a054719ef7009ccf92e21839faf345cd31bed97839cc833fd55fce8e946349cd0aa1e53561369ee211435d29ebe71d2b5c6a4daaf0bb761c151d1efe221dec6b97c70deda619d593f3b8aa4499e21e526da45b52864dc42cfd22d96ef1535be6ce2eb16fcf938b0bc2a8c5320ccd8e6aecd3c9180468b39615d6c7850aeedf65383e9b63e48b0671057b779c4c91b69a625e60a371f68d83e5a2afec74d4be105b60926febe890ee4598882a6214de0b56afe89cd5de981af6ec5b4b37ef4010c1fa5d3eee946faa0969c08355404ee5502d29aa38081d84cf1d91495c25af8df276c576f476ebccd955e7502dfc4d4fd840eb76a35c63e8f89e1a8ee96051ae753a92c006764e7d3dc4c438f22f24717750f5a81dc2b46ffad6bec3e987709cd1b08cc32b7cdee4be1e20e4adc31c74b4c510e7af2256405c2c44906182527f913e7a286b70e52ae3ccc3fb669f7b80180804db60649285a60a769c5b393f7e3a4e2696ce3aa9763534752623ab89bc2a7f992d3870b06361d71a90de9481c1564756b65dc373f13bbffe0deecf9051729396853f2ef80414faf913f37b5f716c91d3301ff18ac27dd52557cef3d66778acc58a7e87b29047dddbcea1d620b6059465ab1dad381383dfb3adccffa424c533ece5fc61252e82e78868f08d0db7a8b7d3cf5de0c309d64371b6eedb42b3e08ed43ec1a69a074e80c78ae8886e9ddd65e745e97074cefd6b241b3e70f83a5127453bd63c5943321061dc92af8b8f2d0367b5c947938a80bd9783c4a40ee2a1650787420daa09b7ff1f05f5ebabb61efa1cc6034b6864e8a391978760cbd257afe1c80dffd58163b6c7ae1922173a3ab2ce21a1663a85bb84d9ff8f8d7933fb6f9ca740fc21d5c19b217e073d18420993456eaa7f531584c83862e4115e2c150c00cbe2ebd82a5617f71ec625f4f612064854277df93bc8d676688fd6c2e62eeed5ddfbb340abac930f355ec0f37fdd71a17b1f4a751f11185bba97c2ef88cd7de384943ea17d4a75326cd8f85f05f23d168c9acd0feae6f5ae0004bf2c3b7b21f269b37345cbb826286b3bb47eafdad3702fa1ee0ec4d0d539e1deb4c027bf42c933633a73bb7f0fb9d98fdc9aa61c99760b3a95bcd45620c2062e88f4732148318ba97b72752697ad5fdd57f91240f9f2c970aa5f43003f1217fc251048299bf2198f1e8b223525cba42c0fe31ace5aaa10481540385698f1bb4e725ccd60a3d4841c0c06ea3423dc5184eba2e64f246889ccbea7dce194279a2e571f2b4dc89f75582b2bf4acf8a80dedd37d9f4bbef2dc038edb57289b7b5da3bca38979731a934c644169250cf78170afbb6d489210b0f56b26d0b316b6acb5892e106a0a0e87ffa0927025c791541467a577d0078cadab3ece6f0b6ba02e6da609e7aaf743f879c5643236913e2fe2e483e66a852d7c2cf01c5eb704018cd2fc7c38c1a0818fc3bc00d7dfd2c5bae00c9de19f74bac5806758c23f47a16eed71ce28356f90f4e46eae86a9f2ef9c18c83a91f53dfc2fb08dcac62c9e487ac4ee49e190ca37cee4c2b6671a59847e9201a31ef646bb63c349ba8f0570bd5b625c338b591b3fc5cc9f5fa3bc6f4c07559d21af2af8be09c1826f485225c9b7cca1d54d19c97182a3eff262179d0ee06986fa6c18bbcfc8b32232179c2534370ca77750573c93ad7199b7cbb14994b0d6a2767e48f8b448a0104b2469d7c682285461bc9bdc6dee3f85f60714dda420a4dbdf0d421536329034029844a546412b92dab86e11c9eb149bf73dc8bf07d8dc177b408f7c1d2e8b769e9bb2f67e1b1a482b6c56436d4ff8c301965359857f86409440b69331e39abe69543d3334b9ff5e9d01ddda22c0f3e55e3a3f11e5bda83d70353fc43afac4f4a9ec6cc231c2e1bb769f8b3eb0e60ee954501451f13c4cf65746b376ff1a1200a78bc70c3ddfc949fe6de7d7df6b50b72c0158806fa17953939b981049ec8acaab57d7791fb8beef7f94790e77f4c2372e7495052897383c6b5d79fce018373bfd7b2372a1f4c8953f3cc9493f2c6a52a1d2524ae4c4909926b4dba18c451e39e41d345d893bef23878b60f100b852eecf4218b66ad089520dc74867151b49adaa6690a3a0373c829facc56f824382f4feed6eb184642b4f68bf47b64244bf80957dc1adae8eb698cfc580298d73004d77fadca3f8287f797fc361f6dc658898ee8a4fe27be8664e5fff1a89e9f0d6df8292eaf48fc38cb699fc1c8fab29addffcb7c0a9ceee528d96811af65d630c9466dd210d11de5aefff9203ea7735353c092a9e6c7147843bbe7408d8b374a8536d0208544620f20dfaac9b6d083428965b0b70922a9c04411dff6d96b1cab403dd2a2832f6325bf6d0726e8126cc8ed73b83bf83c295d888fb4bcf9a200e378eff7c0710e8bb9d94c90d038f98a570e6f1ba12a601d90af7a27fb94bc7e73adb1b212f54e564c1cd2fa5e2fd2768d5abc5d7f165ae11a27559c4b01170fec4d279402868b5d5ce8b486194349bbdc60eff02e42793e4a6ec67423e54e1fadd5b600278b220b5ccb55e6aa09dbc4b4af7e665745576fb20431520ea7ce3858d5e1a8fa99ceeacc433b7e88e9f51bb694ec325285520fd1762ab873cf13e44ddc3ed0e438ce664bded9b02e7a124b42bfbde6d899059939431719ebd1cbae1d47222a7ccecd182bfca54e0310dfbdf99e67f631e6ee8659e97ae8ef4631f047b540084ce2377b1d2b529abf74a9fe4baf8ee2f6f58971a3d7fac7e6a2f3454d84fd1cad099a097ff93618bbec0d86a971772fa04b42c5b79ceb197a5e9c27af64cdba45bb614dc4d4d45a710d76d19362c55ec66eb70cf5b6d06002ff7911dda346838f6e29a29c5cb1d2874f7289ba120dd2c1c662b1fea44f3e290c369e68eedbeae2985fc266df531357388cf95e0d953e3ae8c25f22f3bbf654eb3127d1961252f7c07007a4fb3c8f794f22bb2f941ff38a5c425f1303bb4b0f33153898376e7e378d06fcd73ee2b965f9d0497f63f28548778f5c4f72a18ec07a4f6b3d4164bf1a44810c9df8ca3395cf222efdeba175edf0f5b128cf234401074c1a21528988188d8ad149d77760814574c60ba9c157f32f12083f57950d598087dfe4e9417bdade60c56b595ec2c0e354c9291cc68df0a850cc03ca9b4d326caf271854210cb9adcf6382dd04fcdd2f5e82f6b3258a5ee35e6716968a7614321e7a1c41acad3d72033610f0fe512e9fde9dc51b62ffa6769783e82a072a77575253612038ffeed1c8b7b633af824dab7164349403305fc8788cd91385ece472f75d978e8a5736336c62b2f38ce2b2d89390c5eb8aeef35f8dfc99d18b1fe3eb59d32fcae555bc1d8ab1b7df3af4e6bdd18df9506e6df9a2445d8af28b35ee47065e8a93ee7de906904f35452e5b51b1a7d62f81224feb47381a2ce50ae17c0c897a48480a3235751975abd3db789c5a82e408ec4af730a4e5dd00278e8505a26f90d975cd1539ef72df9be9c6cf2f1eff31f5f05d167241b9f0a5388aa323bf055cce9bbb895eec58d7862574d17285796a874bbd0028b4310f7ca683ce5ea9071888283a112cd22817eae57a221f148dd82d4d0f56bc62f78406e00e690ef6c15ea6b9ed4f2c676cfb3ac82b337d52a9255872a88cb5d469f8d4838f05cd3ee0b99abf2995c5e2a40c163c1c7825b657bcb96b3d149d9ef4c855ef9a1701d7c1a3e4a6938781fa49c4ddbfd272a0b61618a0851170ec19449d0ba2943f55580098151eaf86f904dab021d1c1c566d860b3ae5eea4429d9c5c1764b21c120461a109c75c2369398d34853008ec2e0a3d43843671be0bf66f4e02627a75f0b187aa7fb4a9ff8da3cd01811ca7dfdb69eccf1002c2ae945275e638be6b95b6e45aec8a20b8d5045573d89ceae33f8512fd788551c9bc033c16ee62806cc68d25422ed31471ecf6d7e9827ea1a252538ed6068b2b6e2f8139ba2c27ae644e9dfda73a0297bc8e8ab295c7d049ce626e64e141cc99995135d3c96a30523d760df3f1d6beb28101e86de16e3aeb4eb5fe1c84f1eda232684891ab6e2473de86069088cbaf6ca88e39903441638d0a932a3f29dd994f21bde1fbc800ac1a2fc6af5ad4e07ecd197da5a4f506f43aea461a5437ce76a74e98299a88ea704e187d31db3edfd3ddbd1653308e8694f7d615f7e3168c2cb2a14048f554f3171781f5b39b2c8e55a57aa16cbc6689ecceb647e9742ddf647803ff659592e24a7d52745e2107b7ad2c396517d0e5d7a4c672251790e68fc6025a1ba800ac80b089734359f53820837ae3ab7df5733763e7f2f7aabea863f95790dd3ac00895f242ccaacd9f25927e985ebbc5b27872d13a1f05c987dc24a67f8b8d435d10e9b7b146f0e2a738d4468d94dd18905c5097c6df969d72e89a74833573ea5d2a43a8dcc75fbf96d8b084616b599e1687995d941bf34e07358d0c6a74d7584ac06c6ccd383d8df46cece01dcd767ecc6215caaabc6503ce2bc5153c3200b5ab392dac8c82d373475e5101c8a17de13a538c8712a832e4503209380156372809fd4c101f8b699a1915a7906acfb6eee9c3c53cd4c9a21a14b3231dc2c8c4d9eb74913f903d472af1f9b6340c3e69ce601b8990f605ffcda214d96b8770eff1d906c6e2e77fb44a58724596b4d8dea827c1a02b82468f2483bff4ca563600985b1bb1a02a38fa22d5e81e5d6d845da5c71fd2b67f739c483e1a3ce439023ef5fa1b1c2263525fdbf0c307323c2a2dedc79be7d9f6746c615b8f785e37bcf2313d6ecd1099b42c9d316bc9bd2bb397a7af9fa63bee314796638572e3584c6473ad7c8c11d546a88f21492ca54105e3fc0892d8856f91770fdd64f019a59adce4d0ad23cd1ef01dda47c3f7938609591358dc455e827f43f55193bba8258ea2ac316a58ed7c9ad1a52b42f42e03a740152ae5b56f2de0f270477c9b39e111fdf25519f519f72c0d19562fe91fbfc8e2290314f0607a9dcda748865774df0937dec624c0f8988e195e4ff09f0dc25285786dd3bdd8719e1cc3db19b9002960969a0bf1823366a93d9b9eefdea1152f7229ef8ae67f19cb27eb899d8786c7fc634bacea02716963c1f9cc926d83bf45f165129f31fe7a0c3548d97a8aadbfc7e51c31750a5baaa5ec9f6043165ac87e49545c7b67fd9c4a8f0253198a1e1ba7663323fc6099305808b5e2699fce39c0c41d57865023886b7e407fe04f80e3862cb80ae6cdd204625b65db6bd18919f5a8e98b28b3194559482ae638a07c1d4b80d46c9b19ae2cad2ed5d2b3743070043edf7fca5987dbfa35e90f8a46bad3deaaaed3830cd7b21fc82d4fa8506e47d5ce28bbd20b1353388fa5823c0ae10c27f270c6066ef29da27396dab22ce8a550a0ebc7aa8f68b4fa9c85c8b8b299d10da03fce8c06aaf61d7538fc39d249925dfb512cb8ad2c0627a6b26864068c297bfb46727d9da4c477173a3ca5083716e4298271662f0851a9f354eaaad0601c564caa3a41fb8b0f9aa1c4235f975a3acd70a51e1bdba39e67cb92d7f1d6bdb287db96ae40e805e06d5b0038cd475c050019e2bb3e7ba6f4497894b6a0e14cf4f6f03057e22cba3ed88c140358dfe280656b62d139d5b85c3741830f21b9b4e98bd3a0bc908e5431c37e280c682997b1e5b04de773b282dd196d876bdb269e992fcb0f65b0d878c1167765dc66eb20a2662ecb8654d9ab7fd745c75036f0b20dc822a5dbacd0d0f7b9c0f2fab8ee285bd12f02354414dc4a5a116c499ade974c3f1e89a5ea3f04da95a1f8eec8fa55e20ff91d7cab29bd4788199ddb6fbaf65e7d08e44bd4ecbc7290619f41fdd74f4107d442e3f1e1f57d4aa483901d4a764c6928dd56d0a19fc8934a0e7abe4cbf80a00a9af37e042df589fb45ef0c57c01deac59d4d482455e387a26e2175224da5c4e24c33bb5a0cb52b670d80a5a87bd9ea284bb8a33e87cc52b2e6be8921a0ba5aa3802c0eaa3bc7192e00cc4e075089509a102049b7dd89dec29fda621161c649966064e0be61323c98485a703ae7340461140ba257fe24111ac1fc68ba37d27b0311659a5c27ff7bef0db2740ae7e2edc57e0416e693a4d50173ad03e4cbe5d732beb7a24d3535bd79765dc03ff99bf51076900d2b431211c1dd749b56c507456a8de0625932dcec80ace2bea1c46803882639efefb775ada028d998d9cc40adf4a66a4047c7fdef4ad7c9d5f7f1500077b48624fa96d590e77c6462358899f71832dda6e19b9fae1f1d9b6c0b275cd22348ff1414893ba4dd009e6132a2190c1e59bffbed57ca1149a9dfeda30f9362d50b2d270538add0ccdd0efd97c2c9d24e429aa734a286000fa11dbf8850fd98d42497c6944a36fcfa3a3d9f2e8faf32f016f5127e25dc63b82ede4a8293a25c6abcc6578b68db10b040b1adbdb2d5144bfc59a49387d3228d77a8f659808b97ddfb4044b039a6f53617f4910dd24361a81d4dc53a717425d6a5062bd4bebf2f76088ff3cc669e91d4e68eb1e69800ff4fa159dd3d8bc654dbdf7d51bcf6460e7d0c3acea696cbcdd2d5057710ac14d888af0554627cd198e34e97d0d9cf291a3a2eca3b08723692770ee34a52b587d39b6fda9272ed9dd73719db10f3f26f3df497c6a4b8a1e6c60db6af91755c61d7cf0a5fff348533fb206ad17ad206205ef56eb6707fcce352daf8f2b64248abce6ea81d0372ed9aeae46602743db4456583dc2307259b361f27fa33207e216d9fbe709a07f2ccda8ecb37f567fea4e439e70994d172b5e6143be4fa37f491ad32088b60717dcbfccd1f0532bcdb7d08c4691c91362ec3fb1860dfd0636b3e756f9321f7abdb92069126f742d99de8b6ed503ea29e206c7e15dc133b0caad0cc3ea959e51bd4c803c12a36ac280c8cf89ce6965071115976f2f8a7c59a7af0bb87905bb42b3015f84571e9f80fef12d5b9714d2217c932eb97fcc3f675a34648329150eb42b623ef054339aff80f21562d3a8aa1f8109ee6ec30915505ed797e27f46013c72f97efe8ea4e584a356281de8976537cae456dd8db366ab32032624e01b2b324641c01d8ad4f7b6d277c60b5a639c20c6ad08b4647ddbde50318fe8f006f53c01a582cbdd365a1c9ae18fb9ad8fa760e0de7451bbaacd7045fd459d338be7c031cf3787da5b751c691de587668e1f6ec5f31a5407dcb3f79fc0d7b00f2c8b4553196ed016b6e13cc9a75812f9e17ca0c2857b29dd8637daba26c6d0076b4861e20e994316db16f438f867eafc2c47ad83000741a129c1a01199836b90cab77c6b29374f5f2a9ee9339b855dc1c0f8eb63fd5f4a0759d9de5283ade15fcd511b5af3d9536447d172460b410a0f4218f101c7e3915478f8ebe99fa6efb8d59db54df8e00daa956725ecc22b7e29122054d90a24b63d19976f3327fed5208605d09092fbccb6a5c88aa44a8508a3c3976d563e933705be4dbeebc726304b511203df7c7d1efceb6e06e91f1e57f3d8e6c105dfdf8262d984816fe7ad8f8dc95ab596fff48301f8d03137ba37dabdc4a6e664583a26b8edc42d3c2405516c51386c33a7f2875a3087702ca6721f56195053fe5263a29c8d8538dce6ce146b8b43ae520ee79a5a450c6a246e4d8451396b703038cc74721b502aceba58570fca04e26e8f444aa688c775ab7c3aa833b760f1a685d51ade29bd798e193487cdafe4aed5c3a906b38e51394e4ab9f97215c92ecdc42e14352b15bba78df32529af6b7a4426865d05b8321b79645c06a0d71cae127e27df1bb20157878314bdb84b21cb26326cbc11b8d292b953914e247dd3e6210e7309f630f8e3ba8309cfddf57017f871acb26be2cb457a92ea3e816c776d560f6ff3593a74c6cd1852ca1f510ee7375ef6ce78d8749a59acc7665c457fba4dfbaf49b9310d971bbd803b00c036cf6f74bb7edd0c7707c2fbc943f97b7543555d816b9ab71bdb42ed02a106d580270d3d7b21ecf13b14431a60560d80c09f28afb6d7723f27e9bf215a8ab60383949d23a6763d19495666931d2aece81a34246c902be42bda690ce5085672ccb98e9bc1cdea52071a3489c060213c33ba98c50eadc7452f7bdfa8c29ca2e1b38a7b859271eca02d3645395cd9d76fd65a33a7107038399cb4941f2477ee773a8ee1f71012fbbc0e25eef1b2dacbec52519b371c880d1605fd4ccc953a97a7d42f684cb521961a1c51b85f5ce36d563a3945f18d45a48eedbe505d8f453ce812f465030c3e4a3efa5237bec5943a21f099ca62dd499cf8d680553e9d385cdc79666ec68fb9968f0a9fc3bc876dc0d417cb7f07a6f464d832eba1ec297475e96a0dfbe3ba3409aeefa302b51cc07fe10266fa5c54e68ac19548fcf2ce99f69387438307163df202fbf47b54e04ce5dd52f4b2dd71807d3970209ccef7197d7f33cf9a9d1e280e2fc21c74089c53912d9bfd3f078762baa4562b27ed3d6368e101dab9124c92ac89c483a33c8b84f0661fc90576f10dd196a99114da0c18477d641d54f32bfe6ba595b27f8d485181fb81109c8868d240850d2aea21dd98a7a8fd0ff4dc36dbba0798317f675d39c462524c6ac8396095f3d3312e313c74f8081f1b1f29f7bb16245e79195724ae464ef5e506c2fd293067ae4c47a4b32db6ff6cd74a68d90d0e805b01d3d9593f75f5fe62e6e52eacae54f0e4ccd8ac33731348ccfd15754211a01054356a456dd21bde5e81cb485b6e503d933469b226aac83554bdbc371abe1800f8c48683a9f90518207dd1c4c60ece06c004b45f67cca2d506e2d9a8c7623ccf57f7ca9e8449662e6121854e6cfe32cf03b464fe7767179a7c32da3508bca2be0a5582f08d41a3938913722fd0bb3308c6d9e829f5f8bae7fcf44a862f1bce6f88445c14158031fa10da14f361d4234691dbba6c33fff15031cda6f6db0e34464a6ac293bd63b5a490dbea33b0c7a80aed30583fe1fb5f6583158c217d1258f4d93f32d9f59a9325719f6e5b4e0425b8417e4e0f5069599a9962467085b6c0ddad1849615e635f1f3b9b1df48a2810f1372c08653fc87451cd4a826e9569f0834eac52b4487c7dd47765757a05921e2826b013ebe097343d9724bc962cba6c6826620b6d543474078d75016640d091dfa8b0fcede3641dc09f874161ac16990edcbfcfd6f239d60b16504e43bc62107a25852fe5d8ad955d4ee8dd7ba40cfad9da3c0cabb2db28618a6dc88cd8d51eaa35c3398e00e23f961ddfdd2e950c267b975d6e3616b6cf9d5243eccc369810c241f186212c8080fd94d2cd050fa2a046acaa51008e5b40311679376c56399b74e286a2698c26ede63c482989745edcdd729951b58a273eaf4f5444f7a82813149ff92aa1d043faf28cc67f4653af40a291a0ecafbaa8ff7a558b71f8bce22c23c2cf6b7479461ca50ec43aa62df2703872578e79605f2724d1856ae9f4f62b44f370014be7cbe7702ad7e83373e6eff1ad33b38d4bc82a313bb88c35f0e2a4daca9178b2bc43cfe669580478c5fb24809abbf865ad529d120cbb428731263d7780aa2e23672c5a6a52eb1be0848d9247d366d98d35bcd469bd044a38263f398dee00be2869040b9e7007aaf5403cddc9efaab38e5535848ad509ffd340ac4d904b5b953c425947d539141e4189874b79381e22c38c7b1207ed52dfe330ebce1121014fd973aab3b126c6f23fb0db8ff85537b3d75bec01635e6566d2477c5fa317a84a7a8d66c3a4b166d35a56c80fa9bf6dc3344416d71fb0c8213b24ec66a897a711b9f01bfc42718a2e2bfbdb3f2fef46fd64c57a07bf7cd19b9839aa67a4198431f23c38c1fcefb75f1f1063b2dd5d59bee3608417a52b483253f634f72815c627cdc25bb946747502ce251fff4491fc742a95c38b7334628208fb1a89a734f37fa732e356b1b829a593ba5e78e825c5d9b4e5c6d7ac30d71711b8d99393cf8286090e7e0ec1136ba41a30bdb45a713c4c1cd0fc90b2990c4e28afe0a9907df9e78da56a55f72ea1aacc389c35fe1cd647ccd7e32b18e578a39840de300fa8d0208fa856d0b65272162432a87255711a594f6af91b51aeb2c3fb3c10cb73d89bad9977c1e391374372acaf310df3267efd0f2accf5ff4d310bcbc226e06f95b30b35a42a131a359c4cd00ee44d59957aaf9667dd2f74597a0784a38ef34568cca5debdedf3b3e5e30148e220c4eb56a3ed7fd2884c534c0433a030c788b7ba3f2a1f15bbf9f0c0ce4c41c975194ad2713325db7cc11ead560cb8fa5f25191280f4515be28a434ea46a85156f9edaa1791d22e3191228f5e61f4970b43cfbfa48812fe110493df81bf87d666eda2d4c0217f199fbd414ae3ad7bc347554d2e9ec7d0545c3ab43457b82852cf16fa52ac2900c50837b643edac28ba600e13059e3347c1a5b24f5cf697546e9a5b3f4d63131edc74e7c9a303c6c5255e58686d2c343eebf654ac7ee6c5d3d2cea3b7ec6b45a103ecb5c292ae6318ab4a1a968ed1327f7a560813c3adab6d2573d8ac584e2951e47689e83775ebebf52b3ce38f1495d017ceb6cb53d5b0ea1092e164b89425f5271d4b84bbe0c604aa09a598997ec6fa6a64461d55e63b113a31a62835c3a35774e6e3de45775c2b73ec3ffcd3962bc51a22a051f166b6ab4c5b0f3ff7650a3d71db393efec3162af8ddf15966e42df8d010acaf51df8880ed1504f32501c270c90336ec0e4b5ac8e0e3a3f579f0345d3335537e9ad81958c6696d8ae82033b82266c02f9c9791ccd4073d1a3543a9baec997b08f7dad1fb7e5e324d6749c5dc250dc051d03024ff7b50a80ec264f2d8a2440d938e6c1831befc3b84cb04e0a679ff1f98d39d79297ec6ca1947db797ffe3ff268871656c12e4c70773bd9ecdcc644c34dcd66fa1284718c85ec31a576a79110cf0b60f3747555ba6de0515147b6e596b7e5140e81365ad698dbeddd874642510f42d357123c20ffb0e1f377afefe97f20442e1c3f3c88919c39978b78835b9c7253f6ea632ab329866748c6dc195865ce123c8e153d03a3d731b7161205e2d83e6651152ee8181e389ad7a795dd3b320a76c7cbc8e1d4f692e8d6e61d75e2efbca56d3e3d1d57c80da12880a3e399cd1c98563b23d1027114897b63617a60c83436d1cf5672760d4fa5c3bacfd27a1e4ca17146edb595fba73a2ff5a6bd664bee41052e428f7fd744cd31bedf52e60de2b9a054ed34967e91237904b3e6fb6031ef92c5c91b790d3642f9f39b0de68225076ccdecf70ce11b6ee1f8519c28ef4767fffab2bf6d976b2ba3c0cda881655eb45c19b2a6ff0c8d40ef394887f4e076d2d437c722625d2cb1b78f3bcec09ed6e7f9a007e877e62fc42c2f6050671b07589ae3ceed6046c0fcbec7ae25a915d2c9c9cbb3657d59481f1f42609f89894220d86590c7703c713340cfee5547b39d8256007dc6184d227c51db121b63106e531627d5599827857fc311c3079f5e7e3928a82fb351a803 +Output = c864a571d917a9452155c8a3a2bc63e4649435149f306901d8c8f5ae48b69241 + +Len = 105208 +Msg = e0320fee19af5bfd511a23cabba75acb0815525a3734305aafa49c1d8bdfbd853579646a36a7873c4cfff2eabd7e3902eccff1192aca1f6dce3cf1c988e6aca9f2c8e69f689ff5f51aaca7945fb734244d5470758665451e54e06164f9d22c5d40a4fd55589d8d70e2a9ac914959327b522a3936f40a89b5691854b585ac24e847971153aeac37f4cd7f67a9226c1d4d24dbb2241bc3d379346d3285d57b7b932e288a6211d1dbcb03b542a393f9dce3eaef4506a4970bb3de66639c90471ba61ee0d04a2916613babd3a34943065785cdec59a6368f1aab8e8c4fc25f18eb693e454bd39f82b18dee61f461db9e767bf55c55ca7ab1e6a96d655fbfeaf7d323b7e164c41b1db409f3e89cb402c6210c89c6a33b170758f5a37bf95ad8ebbb1eb03c81e744f050f6e3f0030a61884081b1b3aac1b69958d65756875cd2fd8ba052dc0c02c3026e9ee5ff912b9febbb2297aad223ff6dcf96b27c6f8e7f342bf2c44b6bde3f5cf747229faede65f77a376033832b998da37bdb771bb58898845c2f1108436104d13ac157c2ec5bb5650837d6259f2d01becefacff19c94317c25bbb449f9d104e6bfebaf351e282c65dd421c204862cf06d6390a5b0a4c08fc978fbe98c736641c1dc8306f3a756560fda98cddeee10165ddbeb2bfc65724edf8d4b75c76392a5d9e7f61d908e9663fb195afc259529fc229b14e87995f8d3591b125fcce8160908839cbd9522d39eb412e0b38505baf04033b671a4b094cbeaa4f92e297b70d9d241df4d8dee8e64bf59b2aa89da73b15b38484e0a4ff686e8bd6857599823a6bba54663f75c373461405947806dc4adc81b32d416ce9e92f7b6d871d9c8beee49205a974df66eac6e893cf1254a3e541b5f0eba56a6ed8e8c43c1f42677931eff35943e1e47852b2b76e65dc4fa3132c9665447467373c81ac6cd54cc3f50b742778beec4ca2b4f1cabdde40be85dc856d37c2162bec1de17c2531a478a7855c7489a2ffde8b176d69a9c0a46af048348291edf47e3483f27b8ebcb04e36a68d23b4758163db830ddc5a95721c8d60221d994c7428b7779bf3d0fdd90d4b77f07b23c1daa43c01b96af7e4119a042b35867767fff01e00c42a127c877c8dfe6dc6fb0d71665497595ca836e9acfcb1560454c6fe9f112755697dc22364a545ed4a67e2b074cb50d6fa9712621c1dfb6ee158f2d7fd37f337f83956138d3a5456518dc7fe954a31168ce900e4b110106363aa72f4d2396c501f6dc0c1bff53192219544c3907944025ac988d7327df91fd373cebbe6be9a8926428993c27ee68702a8e1682eff9082ac5d33a3680bbc8879da8f96016f86cb54df38f35d7c7b1f3eee275337851d7fc9cd88b01b6363889c083ceceaf437fcf36c55485a97f6401c8e9ded73b2f4dffa421067122df50685245d246af4b505491369fa7f7861d4e3b0cc9ea92f1c8c87e4512e17107be97d577aa8491809cf9ffafb7195c7c3c2dc7e3acfa3a39d6cb8dad56ef0b4fc1bcac91cdf4f073a413c499314632b25f24f1d71e627b78069d44d249066c28083b4a1ca31436950426a29b94db34d8e4c83b8f94dfe13cc6a2564c4fa41e2100985080d06efe854bc6fc2f6844bd506b8c275586af05e8956f1483f1649bbb29583256cc6192a4d96943bd11ff46a961e527c18a7c440bf1781201d4b46f6700ff8216fd98ad743b821bcd38776b444667cf6c06b446377941d15e400ff3a525f2a239ea80a983e0a5e6f8224995d1a78880bd91d366cb9b50d4f1e9f3d305f6e6254829961154773927a695e250a203cbee2ea2763068b6298f5528fc8809f22e7dba21556f565de07050d9ee1655d9b66a47bf093d7f783072f093868d11a6403e18685b2e0a1300339f84a9616d97bc77815e08d870400a227ca02e5cbd91dfc8eb74f3d800252cf3db1cc0cc59cc62a873f5f1bbfbac1b1021d550617e3331b09bcddbf7a902cb33ac08a0b19af62d7f981d5032722af7ceb8a99945d4090a87b1d95007953a6f658aeee5bba193916f563aa0e6643b04b089a365844f91aeb0b63e1c72354a9e2be015ec351e2312fa36e46042526ad6581d494177515bb2be21528de209a1bbd9544440d861334692c2912ad0bd18f137fc11b9c989c5ab227bbd10b192de6d004fc07ff00b2290eb81c74d1c14e3c9d2ae734ae5497dec603de4617b616f06334b30f6268caf7646ed0d537eea59e4ba9d04514510d31b09e05eeca9e5c23be4df0c4fd656088b477cc9ea83bdc9c642504b89738063ab81fb831eb7a076528763c8e9aa07ec345fb9835ec4ffd1d32c509f3ffb18ae125af7f7744f120a0ebd71ed5ffc02b906121bd04cbd40f0bfbb269601463a20e4175e3289bacadbb4d991e01f56e70d74e11c2710d6f1b4d0813ac659df755a9529a6bacb952b99e97e4c47a4452548055f42fe679ca28cba111586c6414ac9aa145a06c668c493110df99a8b413df74bef28dcad88d3e6d0ed4f7dc2f63adc9769f08ce6902675c02b324f40d5a1999d1326385f260651b9683101dc78c621f19d02d3b8c5b1a07b387edc416ce0bd8d6dd397f8fe9a6bd82462c97f436d382d1ff971c95406b1a6c847d819818bc1a141a981f77d3083b1a47d2b27d0907dbe754ccd74d58607d75d25b945cdf3445d41206cf71c4947da6ab8ad62caf0613a3f856d67c4c041816980f6327cc7c425eec0df74764516b6e9ddd6bc7cdd8104d13bd7feac35cd397ff2258c4879bfafad135fdbf5d47eeba4351d9170e86bc2dcc873c5e6672973f2e1bdaf9b79954f0e9054aa2547eecd1c57088e41716fe8b4c3e74a2dd4d4a584d825090047f37875b0546b7f4ff4efc4cc2e0f69393bdaebb698e7ccff5d62886e0244f18548d0850bd59c8e2d1fd8300ce4a142802e3df4091f4b5e47321f8ffbcbdff98203dbbefb6ec9bc9fce0ae081c2c087e6d5766033d0d15c5ce150fe09e83682feb2fe8617765fa4f89dec48c34ef983edb018b2df541631a0e99b7520ede5183be4bd7cd882eab1c7fe10fb69ffc8d1055c996e642f8698a3c94367d9536833ca079d05c72ad76d9e6d0d5ace4baae9be297ce55aa9aedbe5ef0d588baf3c7039aa11a36bc4c252ec6925f968b90c5888a537ca3b78fb85e7f94dc9b067de380b3abfe82ee727ec22811f59d1ce8987e55e5e8f7f1409211a46893e0003d9f5af37fc46991864b3e1334dfe92029f1264c355a7adf13427fd754417c3099c5396205b4122cf2524990e364a11fba9628762c1a54097192511f40309a1efa1bc7092615a5471d5c8ca606cded9f054f2bdcb06facf7c3482f8514a66053c96ba9efc8314c6a6f30af5d8662f62a71e6d784aaa3aa326f2dc00fb8ecf6566c7b8a1cd44e2d1e509859bd496be4476621d67803fc7841df09adc7144a85af4d13109933b570ea285a32cf3830df7f4ccacdc0a1c33bac79a49db5110735e7d2fde36dcbae3e575f3fe39a3bf90e588ca767626e3f1efca7c539e0956d2d856500aca08680bfec5d0f14263b0d995c8c814a6851ba46b8d036295089c296116de3133b4b751a318b926c7c1eb5a913b51f1ed9317ade685bbd140dd64f9713526fbf4501d378ae4f8f94a3ce3966046f4b8cbef8c80c94b223a320625c59147b6c59c692e300ec12d034a331e1f7b723cb3b1e8decf8c53c2f7d901731049c52a288c7e5eddb723d1bf38531f484b43768d501d82ecc8261ab4a65dc15bf313ed8f54ee23930c836397950b5bc378415eaff70c1d6ad54895db4a79852b25da7d84866710e287767f26f0ca47f36ae23196371302bc5c21c0f615f352e06a7f56828147ab6eb06360d7dc2e886a9bacbbda90f0d763c548287f9959af2e39791513d62e577a0fd0d544a796819b930749d794f40ff3a92248e254fafe570b6e15a30579a9a6fe5538d7f390c808d998582793bb10ee60568eb8d975c51d68b4e4da9fb826681447081c30abc024f7d683454da49eb6834b768d874897c3c9f41f14f578325fea5ccf8bff560e82462847bb034eedee9a77acbaeef1eafcb78200dcb72861d0e8dcfba1b01e07b36d2411f3652892e91e717ddb90e0332aba0546ac4557498d786e18e7e372400ad5407e78d3b0324877bf8669edb214d039f46d0e30633dc84176a3d909d15c2b1713e9c5df74208f4eb832e085e5e48fbfb5d06d08fad313bc9d290fa3e990868af4e06508f3022ffc022fc9d9ea36abd3e00d632f7c8e12422814c641f9919fd99a0ed0c0ab4b9d1813c9905a3d9fd6eef9906b2476e3369acdf3c754afe3e96b49a193970b51691b638cee975e64739978f5ff786866e2fef5527d6c6aebf5c8aa55280ca1d8268e88061f11db49144bd4aa9aabcf8dba17249d42f9b93e476a22a5f891fd3437e9e7b1ac4a22922b7e932ac72f2acc2e4bd240c27d294f50c848f09fb77bfa1fa6091c30b0c2f44bba4af2ff82f896b23584f976671983948b93e187edac9e604b62a226d63ad3d787429fce37b791d84cc303d958389f950c89d54bc51d958c629ae0193b08a5615e408d9dcde64212f9f31c65c0d4e7d4c3916845ae3d7416540852624fbb0d7ba79b48f8b6130c04d5cb9f96219cf0d65950f720399abe70c841859c94a060891bd95e6970bc63f06882f9f50aef4f1c262f2e45d793d93e17bcd642aa77430bf3713a5a9e50ee981adfd80cdd5a5708d2b26a3108e758c0caf0d0eee19e2996f6f979668f5f005e7528a648295cad3eb751377c5dd3c1cb6a8411ebea93889c7ee877f7d4555da5f003e1316f64b6306ca21272470788907eccf5d415d5e49ef3b4d298fdd23b1123e81543200106506b1b87dd44e131c26052193203f3d2110de4f5c47c344d22894bbf17ebc012413b3403f7e7ff31d3c7b9d870257bb585260f7df4d019e85c88a54b0a13107e753572136c90c02d470d4ad0390abc138dc48ac7c489f1b121aa9b45a446708f5f125c32a5efc2688eb9ab8cd72463807d71ed5f9e0a3a2c0477844b70e67ed9713a58fe3e4574983d45426ae4f2d060e6a6bdc1fbe171ad977806a8ea8389f15e260eb280425520b548b5e6ecf6a1595beb528b68a026da3d1478fa8b9e205b785dd40c2666f296993c6cad59b034be4fa872186eb6d82677e571cceea6e06c524a4f77ab13db6e5b88dd1ab5b03924247662f568a5f416ca63877c6e3e38c86e93e76168d95e1c6ec68dbb7b66fd1f9cddcbaf00fe092fc6f700a584b497e43fa32275ea481925656e050c25551f04fb3702a1a21f85d5d04893c4ecba9c3447f08711c9b08b1db1f7c9994e0b0d68d22abe79d68b08ad88b0b746f0a0a45d1a149bb161d32269e6ec51cf5fe956dfa411359418e0f01b52d7c1c82b174eb32877c6f15d008d9e76c4242ad57079ce03932e9cd381eab3c11669b5067ef9dae5b29f4e15c91b2fe407b7383940e4b853190fd0b10e46eb5605059a1d584438e42d8b2426ad69a2a14f818415db2623252b3ffc1be69336741c3be3ca23ac61b66121100a2dd77b40d4297ad59fcca2fc42555b8eab5e39bdd4632eb771a0c9aef5e79e2abb033e455e05a9031f369c4ae6e69b83bd164995b611d74fc2afe56054552b22e57b402145ac7b18da028393814a18959c4a0a9e49ce7a0d8748496ce4e0436d2d8e456713948da1309efd58ca167f2ed967d13a080f837b40087a17501f737403da928950344d16e38a7e2cf9d22bc9f4fe51eb694b80137d4edc020e6937c1f8eedbfa843235f443536a62c8e39af16f8bf134f6090c60afaa03bf88641cf18d19764d17e4c4c3e06866ac9fe1693fb99f33a926de64dd47a865a246867f6d3108f5f383e296003b57e75ce742030f53868dba842235f3e5a8965cc146fbaf752bdf8060a21633c4a05116479bf4eaddf083eb868b0c4f0a490a31a13bfe32ca00977636b9c1c90cb0584b3945bb4ca95baabeb65f3449160825d34ecc1391c015b2376e80254a8426517e24d5c2bf563666969c356a6c99449db4227db846d7d9b456809bcd32bb60d12192c2b7bd64ff4c1590940b4424acc656d4d778bc71cb12560563061c230e4bd82ba2e6c14644dfbe3c01934a189f343dce5fc17d3e7850b8758c7c615b7d45f427ecec558a7575f316f48ef915aa6bcb977d2f038e5ff3f0596e9c9cb53c542840073504922fb34689e37adb8c3cd19298b61de9f1e08080198ff348c0c9dac6ec986d390dc22c4b3d64d36becf50a356aa10a9b09b86b0a3e76fcd02eb45e628606d17d4ddb255389df2514c83179f685b49181263637d150aa35dd3f7a538db4d92e4be2e95301f7e8ec80ae90b58872774f46e7e85b87c8901aba739a5e9af195b02f6d6b19d91fe89619f081215d995f7056bf5d6a803edf38127b72e43cb4b323823ddf0e3b6a74ce5b4e8151d892d3b13b2cf3c97cfbde0a5fa7b268c586b7e4fed4c384cb5003d1bf092fdb9bd77a8e6ea14a1cb0b8130e0c98d770d7d02a710fe2a731eb691c5cdfc0db0319efca745bccdec8dddc24afa3cf3070e63971540fb7f88a2e3e34dc17f6118cd53439efad00105256d0698bbfab7c0d731b22faa8f535f20627d3bc022971cd504d4f6cbcdb8d4dbe4d881ebace188af10db5f1560afe0e05be7f8928db6a390db3818815cfa40f76abd6d51f97749e0289b0d48169af329f7aaedff67c69747fdf66ae424d033c0263fc4b68a83eab0a0799f0c5a1d80455d4d81cf58d0df42959656bbce41957f41e5efe2060c5368a1fe7e29d43f6f7ab7581bc90ada63c9c9a143d001564c7de337549d161b6c4f52b012672b08a8112a5425b722ef0b24c19e99e9661641ff32be5caf62b71dafdc1ac38e07801351e0c8065f4b14bf9aa615bfcfa4895c5059016fdf91e84ece66c1fa6512b09984013c26892b536774a08e1f4a64b786b77e89f6f64cb6e7f6192f1db5f19f20f0b438edff6ab3ebfbd69220214ea9a57bcadc57bd3a2ad06d1deb96464f5591df2245c388b13d337471a82a1e0966a2e56484fcf9044bf17b997dcbe0d2dbd59773ea10eba8f7272a9859a5073ef6663d74094b755122326ab56e264b2238d261ceb03cf1f6ebb064742cf9a59462d8cb24f1aef8cab57c809b440d4ee87472845b1eaf624321b4692da98fc0b4b1dfd69ac68c49170eb507708aeab3cc989c4a44bcd106399f1c82ea58cd2045eb65a8fe0f4d31df35c7455fc5244075ab38f9ae120ba47e6fd1f7d3c21c8cf019518779555878ca3098838d7f23be8cb52ddac3a9c306ba99ba10126ee5cd5d418bbc331f17e682091208253f4ff4b8bf6535ab0862f29623be15cce48eab336efa8e53f5f142acc81c1e4d8e10aca2cfc7528eb75131b917c74d2cad81ee1ba58847015f4e56f3739d0b2df3ceacf2f03b78933ff78bcd7cbc015750245ebcf01c2e67e696e8fc147f18eff6f1bd4f27a9f0e227bbc7775b84797855e1c3bf569e8aaa1132c172b2a98db81fe1a7617ef903a4f707af61bb09fdb5451fe4cbe0f7a4f56988a9fb5603b2b3f70632d1fc13f60138420933a432d536a7458a89940dc46e7501683f0775ce0505c92647a9e0142071d39e941fe7482403bd7da07cc9313dbd05c5e8cde72bd9d1904a6a8e46a42a2a24362d32109fa7e2ee85b9a013358bc9fd899bb0410f55e4c467e3b22eed46eb9c99a6e89623e6ca406a7c06d41680224f7c02b96bc3a1c5ce45591e81389d3da38ea6465f190a461bf390b8f21d434f6566c5ef4d8fe6fc14ac75d825cd57a7a1ded55654cc3adbe7ea9ebe5792fdd8a60f8c5bd0ba4c120064dfea04f49bb2fe51dd1f5d839f130c154d1ee9bdd546793ffe03da8efa8ef9343e5b05f591e423af63a963856175f23c46e292e5f41f48bdc3f1545119f866e63b340f1762c876c012fd4c1ba78902293112395481ee7a52842d274cd0d9b1407d7c0ca436e3604c8f22028d99d8a2a3b5b4c650a53877c6e9bd39c748b8410bad3be3e234bf4a1a85206b2361e93b717ad220228887a6e199ab740aa81d7e0e727a7c1a85e39af39a0071252444365c297331125162716a3dffbf5c1990d0137540bf9350d7ba9f76c9fbda0d72f92c6aa0e06729523f2b7cbf0107c39a9fe05d959497be2410e6c283f08b41faeea9e460156b37de79eafff52451cdc2533fd381e36cf751069026363a80eb647c9a40bbb864a48e85706da80f83609154f57f0d945b22e6026449ebc00131390ac925b9b29b97eacc856fe1aae4a38e0bcd08408fac686b6e2bd4aa6a563b0002fc3c63e958397bb6f0ada7ddbebf41de8e1723bca7f069b1ad6e7920c63241cbfc2dc046e3b1c8ac7bce029057db3236ff53bc0394e36833b2c062ca9a3e85cd919fd8b183285914ec7bfaabf920ea7cea65154dba68ee5c02726c501b865270823ab41381c6b7570c5b9816eab6f01615f4368062a88594642b9f9a8e33331c99a75b5225b269dea317e3ba72c4cc6e48a92586d4cab443a29304913e6cad399c8ed558b715f7107956e47ddb7207ea4d2cec4558f704d18253a21b725a4a2f54962b0b7f16ea5455c1a1486bea28f4eb2493a73657fba6cd1382217125916689686455c5dec91401ff24046c51b7f3e9392093b511232a4a7aaa8c84f40a4703ac881dd0941cb743b9759724d23c4f10149df01e4e04c6c3312442f3ef3e388909a04be9616ca5e4979aebdc92406f285d11a8b93524e0fee0f82d0640b4a2e527b3c6586d3f45ac409de6dbbc4bbdf9bb85a2ceef0de2c52e2c34050cf4eeddafc97865df2001625d85726b76e3a04ad700c6a5a34732dec3ca3e377e87823a49ea4858e09440d0955b76d2e89280e4598afc867a583a1148d935e5bbf4c8c39c1f1e7897256bbc9126d9593cdfc690e82b2cb89cca602865620057eec32642516fe20e2d5ae8eff9ee85489752d8142cec3e8430250ee9c16c87d53d7d067d0fe37c62c9bb203174bc61e723741f38cfd41a325eefab1e05ffb2a7d0a9cf3e7f82d5bc94d17b49aa97557d08cc03c676eca90a50b29f8dd8236914d0cfe94b4954d364b6236201448749546ee3ed84cb3bd1532bf551ffe3e194656578bc6c14615fa1563a3b1fea9425b27c3f433c76c97b571a412b3bce401be3b62bb06b88b262bd9c9c6f6c43c7d1e05a6a6eb41f9e905c431d940b4049e6d3ec702d0f4e4ec2feb1d367b0f827362631ecd7b56dc3f6abce11f435e103dd802ecf9b1f0e3d69adbd678ab3b0bc3acb294be506083f978ce4a5b4825a76e931a5d162646f883d11e7de3f3c148fc6196911ff71991a5946ad623aba53aaf02d79fdeaa61a36287458c2f015cca7c3561ac58fbcc85c262350cfefa573a8dbbdd1db9bacb74f111c389a04047f0d17cb63f0fcb03c0ee569f5753b0a63779329d5f4de40eddcdf52aeefe3d2d5c7acc06d19ae159e387e61c6da87b3cb1fffb9afcf192864e37c5ee248f54778df687d5fc80db395e0d853e888396651a906b584f5b62dc56fcf88fd2da12a0d5c354962868151ca10dd878607bbeca01c92647fec1b17b885c018272652453f47fa6e9ed972b9e4cf7444c6dd730d5e808a0fc53eb2aee42f375587bc6d5eb3a79f323a4c48b18c2685d4d094cb9034ddd5fe8172e1baf2741c8946765b3e14840bde5f646b026a1bf97dcdb4293fc93c5d79d9111202895d57fa8bdd84ad08e728b934ab437425b9b688e5c3f7e0c6a409c8f5a2ac4f52f0d1f07f77507237d7dd0de2a839ce6605a53d3f4b9c3cd21ec132fead1769f53770b54acf28574b5c122090e3b3dad409aee304d3801b96b16d001cbbba18193a1d90136a7222e97eaf3c67e51a5e18ccbac35be40b45b965f67b7653ff246600c1c802d2979cbb469da78f35d723d956af266d05a581e44242e835fd4d54869142a6418e008d69bbc2a92f5b50f1c0b0775262beb698bf513a9280410d711ef58a72f52614bd9be5078c6fe0ef8f75e1f8906197a653f199c6c080a8a543d9347f7449223af3f8cd5496784b1bc79ff11c279219dd782322cfb95db97e925c570bf3630bdcf9287a921172243b5fe6e9c9611ecbc4cffcf53bc63efd0026526615396b696195d4f4a74385f4b920f4d0e9842d35c1222519f42f4bfa93c76167848c8ac23190a4447d75d741fcd26eae63d9e6e03d374596e03cae3aa03c31644235e7a0b4b13f71fbee93966c3dff8b1fa87253a1d70575e9358c458d4e6b64367bac8a52c24e8308f8df7871284d700539f91653ca0dbdf66110a1c4c5b77048a8fe09738978838ed9e371735d0064fdd3a2b2bdd80476ee095fd8ab69bc8f600307a47fd0667874dac908daa2c170efbf95ae45c993a9bb75a472ac0123c966d3efe3de5dbf6aa243b6c60ec0389bc346fb925564615d44ed05f52e5793264261de4ef8f82c62ff5cd431777f0ced61aefce75472179a71b9aaeb9931b5afddf5fb6e356b5566756c4bd37ea6e56eb13fbf34aabb5c682a20bcdb5458316b1dd66ecafe7de181ebbd433489ff6d279c436d01be07d9d0576b634ec994ae63eb4e60eab9f579b84a95e3da0250491f08002dd7fa1e35d9e0e3c6cb5facd49d30a3f957d09cc415783d534f4f62245edfbf283cc5c8198cadcd0eda7e6a4d23d21e6098a93a6b9f5efdbc1bdafda4ed07c885bb87cc2defa77462038e94befdbb07be35ae97155ee41c46c409e871d36a636dd9a9f3180db41febcff7f3d231d1a63ab7457a6b5bf3e418d446ed3418eed80820910583ebbd15d1c5224f2fc9fe42fda5d8ac149d719b5bd3f8d295c57d6e7d17a8ca1593ab9f3b6e75707dcc28252e87cef6b92c488a364786603be1fe6ff5465609770c64055150591d65433995f6e68f1e02115ef9d2ba5a5fcf7458219736048c505ed28f3df537208e3518db7d4883ec96539d3056b3db97f88775cd8c6e18194992dc8524e5753fa2aaad3fea38122a1efaeb76ebbb71d05f203cbafb76fc790aae692e31a67d4346abe008653ba49e410f3215b95984d1ac4a95320dd716743abd63d389c2b5f3243e998018dba111a8995953e7157c63860a687bea18d0d181c4b1bc57c18719e46ec0ed299f714cfba048799e77c24e956a9ddeb9c1915a89cd3b31c1295a7b2e403d98c00f7c14e12de7ce0508bc5a82711da3a35bc0d5f7dfe97aef8495e3a8bef8c906b42a3402461e9c454fd34ef527ce12cf6dc70b7603a3de0a59a217fdefdac82215e47207f6d52985d46ff495959973657f0dc4ac4051a63a31e8dfd3dbc9dc3dbb10989842f4bfee20f9120bc2660d8f19fac7419edb1ba693cf05d38bae4e7f2c186c5c3463a4a8bad771feb71e2973c4f6dede2529827707bf4fa40672660ff262b7fcd30a20da2a73d9177aa70f390769cf2bde2326d4152087ee54fb6c169558401f27d17dacf93412fe15eb070a6bbb63cfd0b24ee6465a735b7e33a8bb9b60d16e39a10147ae81e35a8fd1590e7754627303bc41d521d5dc918b0162278ee430911060f6d3d1c415d4f1404c6cb39d94be802a48c82ffa8938834ce181f54b262fb4f8a277eb6470134222294da7fcc1594ee5abe7f62f44f96ffe6ef259fd7bf02e4f4e5c83c9bcc08a5e38d8dcdab0eb75d4b25b00ddd37c56fe51a24162f77e854f41aa215bc182d2dcc136d9a02a1dfedea54cd56dff684034d2b835e2627ec1dfc5884d82470221840c8e26b4f797f0edcbe1fb4590653588395dbde5839bebe6201e90a615e77f3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a4e9b95712ff4daf4f207cfd26aaa0030b6d39a60720135622ad7f2ab140ac626fe7e157985ac838988470740dc1f418e41450dad957058aa489f322110002548de11c52e10058945e869d91f3d076875700bc46da2642c1c246da14a2fcd3f76d69cce1a38c79531fab56ef5f52a20ed2b6ce82700a559c3a78967b1da38bebace6658c566b94e53a772ee4d6c500fff5ab1a16417fb88a4b73aabdb770b471caeb88ab600a45db5d5ea81ac0941ddb2e62316ab4f2e61c93dca9552700c85a35eda8c757050695f6d634d9c36c4330fb507708410058b39227f4e9d2b041d57c614878a1c851b5758267da45ba3b91cb0a8d677c249affc4ca2fe4412baba40cfaea37e6e0b1ba77c7b374ddea416e3bf4d710dcdc2741ba57acccf8bf802675fef07d7cca91057c3a9a31d2890f26ccb3d69cd9938839d1451e1c700849dd35f20dc20a029a26d14faeb9ea12ef7bdbac1e5408e73838a806d65b4d827348cb88949de51517af356b43458b148cbe076210dec153a1dead3177f1c7ba96f9b5072779b47ea40f07320a9d2c1a416dde5a50a5b9457f9c6f497578951d2f50711238ddeeabb9c6d52866f94370c81baf19504157590be25cb351682c26a6fd8e2e3b430a28e3471db2eb1267d45b381813822a01eae14104039e49036388417aafc1418d729b304f65f9511f91a553a7cd78d86f979a58e3beae8391505ddcb53b4d41ef155bf2e8b6343dc15520febccba6d4f6cb816a7a4924b08c79921fcc4541dca58da00f88280e40f38b4889e5829e981e135126363773482b4bcf9b2e52316a574802069c3ffa032c90a695a086c29a6bfb63fcb60e1cc3144360df69e6be836ae0fc48a37289ece321a5928c4ca56456e0445e6841a3b9ce0ce04cfd772ba056c4e9661c442076adaad010f748d98e756e7cdbdb569a84bee4e87467882b59b17063ef95397028f298a091700fb1613df267f56dc153bc7d87c3d6269e1007f18ff6457cd6db8c4877b1848505df951718b02bbe2671e970420cf2b92d7c539d501af85180d51915c46d6ab4dfa682974dcfff4ada77643dc04e4a9dcae2952b8d4c78a1ebff47e10b4ed47dd1c8c2450e21d07271d6e54c6ef25e52dac5651283f556ec5cac9140b8d0224e9098dc96d6505fe37102b512ca839e66f1b74be8d0c0139f778f9dab699c04b5a0a92a1332d5ee0c4cad8c275f8cab48841aa224e0172f49b0fac59779fccc31667c3330b01d1b6b8919b2f09a77d5862672104d5e751a799d80917b769d194076849075baa0687faae9c21507dfcd9e3d401ec89854558d91b399edfbd75c714554ca58cf1a45b72690420b242ef3ff5d27162d2a5f71142206476556460632475f396079c543b0809fbb297bdfd937fa799ef180d0ed9be2eb02583263b70211167613373bd2da4d8a86167b7cfdc689ca21ac38633b9358e4835cfcaaef7f271d08e7740883c2e1c34b48af80d229af9b46c3bd80eb78d89522ea31a60fe7fdd55a53dc95c6d8e1ec73368485e6dfc06f66ce9cb46deaf65f79666dcfa90b09d1e2fecd7e2caac268767696f6ac6760b91a233278433836a5ef780d923b26df854b4eb32c15a707b9fd7f634da34f04fad9682b36fc0f1e2b0d859d9846e9e381fbaa4a2a225c367350c756056c0521b70d13f38b08ce21314c259a4c5cb2ba3a6cb7eef2d348b30728c50bb857184b705dad07eee9f3c46b33ce8018dd2fc82126ee1e0098eb21f7de1ed0d104f6f6b92399f4dd202e9c4b4ce6eb98489f91c8a2c353fdf3b1e7c7f92b61e9e62f97f4077126d04bccfd24000539453fa0bbb378be3d25644b98f9f2811b6d8b30b3a361b93a52bd5d8bb7f5bff5aa22d18a54115516217b0699f062a689c66498ee59dad89bfef56ebc59866dad318280923cf52e8b6c98718f6db202299ef2c68c89cb55c81fa46ef3ab4a94dc75ef5c77d09c9109815d2adda4793a7751b65832b5cbc73b4f1adce60faadbefd1c9c39fb180232cea3981094720a5ff894fbc556044938207f936f8093f9963ef92346e52485b4211ae1296c830db2e9fff61890bde5128c4a01bae1a6163e529d94d88254db005923b5e0a9a2240812075f6323af1769c1fafe97cd5c8a1c01b1f6d61bd18b7c3e651d1d95f9d8c939523d8e550167a6883893ee8adddf9a13dd5227f8c31d92978920c876adb05d278898806fdc5d2fa7acc7a761509c1f4fc8afb5615119a92e36c7c995e9352ca4527823b867826de6fda2aa9add4a127e1b15679ea30828c91519083ad3ed9f7858e65e7acb5dc80fd32cdf7dae70dd687d8d25f6e2727931cd1e6dad93621c6a41e919fb2f77a9e8d86e2f52e896e7d5971dd7b336dd032e07dee135521c0c43b58a3c85bc56763bb26f8060b645988d11d0651bc6d32e886b624a1b38a2d8cb5ed0b05e998499ce0937bcf03e03585792abb877bbdb6206a0b192a86c7be6cae1c35bcef089786986cfc94aa85b8ffdc2b8b60e3c7e07714fd39f211732a008e96b261fe6eb7dd6d03e91b61dd2a5454afe482a724285911fd15bd1604c6d4c1cd1f997a5340edc908cfa7cc5f202f8d285571185b2452eb9b2acff7053b46022fcbd8055eb95426ec2eee3c7420fde0156c90c9c53ad10c47e7cf26ecfdf0aa4f458201d9979d111e754344b4a32be80788863dfaf26fee93db2f3834655134ac2b4c026c52251220313b87b93d461f6f37a5e774d19c2d0f8364ad7427e43bb6db8a798f7f88a481f15b47da45e900cd089458cb5ec2220b7f03f914ac261a0fd4b1f9ab863432c414173790536116a169c5f457009e78280c81adae78937a07b576e548ecb4676747f3c983fc6acb7cd9af5cb05d6d99d5da622d99f3b8b64eec3ddef049859cdbdb75601d9752b9cfd6d4f46fcbdbf1a5572a0b7fd4026935e77b4939f3245d926d10ade5baa54c0affcb5ddde2462a07014dc9b8600d0d6d35a3b67e901d143b6b6a0544ecff1cceb2f6fb831758bd8b7741eaec4e450d55656ba94696ec7b3754c608d394bc867b7eec40080170069317aae173e527037ee527841a7dfedd06c7c91b1a486a23a1d21fedd50728afde70fd3ff7cb3f6a5a437be972cbd0d43a22f7de717e846ec24b063762beef039df19d78e0770abc67febd4be7f71edb31f4b6a581bd97e26d4833cf498f3fcc7238100eb66ef5743875702dd286156c9ecb9a12c37c110903683d07e20e9744fbb30973f219ac2c3c463901db0f70f2d10626a8af408c5d15196693d49382178ad0de3b1c1d8b3ef3ff8c5a59e9ae286932d0c9ad91665922ea54d599e48cbeb03ff2e6acd10f46ffffcea9e7ab1957d7e01d1866e53b87ad399c5f9a4823950c5f0be92cdac4bea0c59472fcda6f1b9d8c8ff733b2885324a581945e54c354ef9c7dd50491381086ff524811de0bee3a969df8bc9fb96619bcc9166e80f858da96cd1cccaad5e722fbac9bbf5c7c4a2faccb9f69f35b1b0ccdb75843534f2b6dcc6e22fd7e2a9d0548e7d06dac3ca9fd2d9d5dc453f9fc7e76f0cc6552144719bbf5aa1f91a2cc9e75b8a8a563c9a8139787a64447f284df36f9f55cf404365ed3e7f49b7bdad06ee08366ef09afaf13791f2b6235f13ebf9c376592bf8b73bda2c9b509933f52f747dcadb3145b397d50c83fb6a462a480053d9f9f2b0679a6a6ff4dd27e4cceb7ea28df89fa68d1a1ad1765ba29c330d1007105dabd21c2ba6f0d219ea39f9e2165fc9eec4234f230fc813fd52c8f7e131c762aedec59e9695977f2c699846bd439cc4e42825c359badaa10a02343e6d6c7b191413f1b5823f4d423d2c6a79240e41c8035115af6525ed6aa93a47d058c80b7bb6d3be2997adf86274bc185bbe7d361b72c959dcee58eab4038369744b4e5fd1bda594c17ee68128faa008b4349b63055a185b129d59bac8406402f4ee055f625012db46dff2d1dcf760a44c2d6db0d0e3c481181a3243ee87667a16e8f5f47898a1fb8161dacfc6928553ea52fd06c2345735b80ceb6f6d000f3aa3e2260459bdda5c37ada5622df4967c584b524b257659deb81b8a258fd4eaa86283a1784ee64566336b5b745b451b895cbf74693fd050e3e1f0194d9a2b7c2d1d746d399f3b6b823c4205ec96ac9de1bf576c46596bc6aefb339fced72c4f329a5c922e94e5d31619daaab12751a3ec48ba41ccba6f42a6ce8c25928e00ea1da2e4193e750c058c93dc52ad565db512c190fbe1ac034d3321a1b28007ced557fdb4095389d78a4a72f005c76af85bbbf083a36f754f6ebdbe1d4e8089bf994973736a54196fe9ba7ebdcce7ad491e4f9f393f5d5e7c2dac6ba6017a5dfbbd5accc944286dfcaa427eecaef565798536945ada93afb21269f1e4d456cca9c9f1cf60a0b9cda5564c3c24b4dadbaf19d8988f79f9b018a65a1881cefc1cf2457846dd85ee8192743f7e0ee57c5714609e72802677a9d770e8a722f85595fdba56f7ebfcafd0ec8c830d5249c420d0e4eeecd4e8f5e116f87b6871584781f3b0f3aa300ce404db2680b197e89a800a2d31cc33c85ba1fec77c2116f9bb26fbadb72954bd756386cb9e3185cbe7bdebc1d0db47cc9131b764519bb9e09ace3e3b0a3b00174b3616024557c5f991209a2a31e1b5fe7fd96857649e0117cabfe3e154a7dc234cc4b254dde9ff7a82f13ff0bea628660ee13a291cf296a535411328fd368fe861578348ceb0da57a0780499def1460b24905461e05e2192c19ef6966db0c26e7335b1668074ff97d5fd0faff88bb7f5aa2fde871aab4ae6581cb3b50cdd1cbe68a763365bfd164208c788ba763d242c8906022431a1b8aae105730d438446df2af5c141c812c661211f9840bfcd35b9a75de6bf8d0814e6449f5d24786fe7d99f67f40e2d7db7fa074d67cb3b0391a3ee7cb2e096a805a069339a841464a8b5b1452425f3049218a4991ce252a9e1f245aa8f0fb44934e2380851b5802c317a47d6780f8370ffc0df4adf0e6c85ccae9331a5d54fb248b39968ab3d238f2930486319534388a5fca0aadad5f161fbe0c2571bb9cfacea1c7499d0a6645438e09e342f799d162dd3cfff32c249031590b96519449cffc223b1e4e778ad4507913091e10af8e03e4e5592125adc33c3c460a2c9fc1e7377d33891183965283e4be6c2578dbcb0817318aba02713bbad869f58516bbdcfb231f1e88d73f3c68516a80eba8a504c9e4c019204b054627add5ecdd919e2dd1a47c4316badc1e782fb5ebf32891e7c3ce1f88e677d08efd3d2854b8a8df363581c9ab3dd703652e001f01be6138d0a0338e6e8f117982b5f6bfc188b4f5a2a13b859b70943bad14531466bffaf05bc9d5bb1e9c9056adec7b2ab7c05e77dfaf424eb8517aeb52a5a9149f6a4e6ee5caf5243d618cfe8cfb2af7bc120dec69ba367366530398f26c62cdf06fe3fb1b0e42382fa05fe79c8c969522d03ba9cd4c789249f7c6db18d3107f1e13542b481e1d8589cb919848fb4e81a0ad706666e08939c7a22d18127452c68d0707760965179ac035ba873ee1a34b99ec3478e32108c853f4aee68bca7a22a1bd7671db9da0c65781433adaaa3561932f0077be5847cc9371e4acf130271210a939954b0249b6d430c439a8ef855200d86cd95520f6b4fa7c36f1cf5fca233e5cc956b44d82dabac6a5fa261c139b879ac2244405762ffda64e5b92a3d3b4af3a9e4cc3d9ecb07fb57102deaa50ac8bc8a8df0760468c11727320c7a6e474d7d530ddd631d7c6977fadda3f24dd1371f499601bdbf867da534e07fad37cb24cbf298087efe48b9697c4e6c416196efea11c5dfdd30c31bcdb477788a3fd1b725ad0eb455e837df1904ebf09f885fd76509a3f29efe2783d7cf7d61da2f60eed3acf648b18452c4cfbb3d98d46a36d7d85ab7a3c8d1ba9e0bac7ca165ae81b11c18d82e5a7aa04ed3c8cbcaa7b022d78a2b895822538552b074fba0f3653be84a193ccd187129666c541defe2022cbfc4a5a27a752a8f88104e83c64cfc967ba3d6ab8db312f6f5e487bc704b075a77cef0897289fee02971639b7b371a9a527078add6f2040ee181882fb3ab68b6e8f033c6a72678811b1cdbcb277e675055f826c8109eef7a148c80fe22c9cd48f87297e280143f794859dd9b32e78dbf6d850986a37f7d40744c96b2246fdc17909b4364671afcd096709194043b31ef805d496ef85d546aeb0bf3d22063402b99b45fd4c302578fefa8203d0541fee977c90d0875001cff600fbee6806e9f8cf90515bbfb92f7bd3a4ab21e9ec399b43b117ddd83307e08baa22077ab58a2439ad68ba0799385625f9e6ec03587ad58b37dc2748bb4218ce30a410c09e9f056626fe90ba4cca88745ec7daa3457e0dec6550455f355af93c28f482d02e932d03b175884e4070932d67c076401f9da4d5ee06a0924dbcd263f7b5e62fe1f0fb60c180094a10a506ef9953377063544ad62671d17870e254b4214aa3465543012bdb808c2439e24409681296aa9d5c607b932450783b55f0cb3a4552a9f503ceb35409897328b2db2968612c5549f07624d8908627f9a23717a7186cd14dbdc4a5ef8da9ad79914cbdfed16116e5db0c605b491afe583178180c466a32dbdb8361f27f453989081935afe5cd55fd5683bc9fa06761c39e644abe41d3650bd77b760160e4ade371b13ef000d998ed0d8ca81a590408c8436c2e41bd20ee6a5c1d5090e510812578b52873d50e66515a87a15fb56939d2bb00414afadb1583b409903 +Output = c2e559a75f311f8494bffb962bdbb12fd79f320a31560740a77c2a1736f25b00 + +Len = 106304 +Msg = 7b4cbfa65c64817dbbde940525dd1b2002fdd6e2269450f6a2375a3de080b7b9ef0f19aa1bcf4df6c17ab2ce6160ef8ff564e5e68147e338ec2919410e4c50fb0a1cd8c1de6cc1b438034e5e8c57a6956398cda2f6f0d3a3fb0a4b2ebfd1ff37757ae234cdc4467ec97e4ffbcd4aa8faf5a2745eaa1888ff78e2d74d1a952d37d731214b125e451e1cf59fee4cc25d865289c462c8466a140ab9a5e6482243c1d94a7b4dd2c2245ad86f257f32472d002255a4f57603e1a95a989d417000a79e23ccda8438794dfba5f5c9f5a75f80320f0efb61dcd655880f86a7a5bbb5c3965cbf2536690a26c92d8e739ad294bee2bfbdb3ec24472e77d28cab5c51cbfe702c2b44ac90fd198b15420bb4dc6d4fd9da6ab3df73ded43f4bb191ac59cabff63d191e2ed3db8c0b0819798cec729bdf091be382f424afa821fd41defb3870ee34909d035a2be90fac1ca56a2b2c0bbcf4da2b1ccca02779fd78a339619f7821bc99a8754e759760a9527895c122053742ae73f726dba57c862ba007b0863f577b3b27cad742fec6a8c4d857d5dcf2199ba0a359285b8f77651d1e8e13762d57197e034b1c1886085178aef68fe33b2aa9b6a38bfaaa4f3341560618b0f6aaeb3f6a2240468297f04b78e3bb18be463211fa5bd5c5504b78c3df41ebaf8e1ed995086df17c0599443fcc5dee98f57df97e74b47eb1d3ed0d93bfb64f39c6f1eac25fcca5e72bf4cdd47a06d736114746962b94d0e5bd9cbc58fe4c8e76278be66f7728a6af7b1053b38cc5be1b990be30127e5118a95bf4bbaa5edef8d3854954359673afb7d569e830981ea6f15339668708d8ac7e4c08363bb80b9a681b5bfe70c73aaf3ba2c75edfa24a4590e2628730f7683c531062cf848ec35eb8b142b0298323ec1b9fba199669534010b4c61c90b8643ab04f90e24551bab82dddaa23d068e3d8a022ceb2e55bce290940d08136ca714a2e501f08de8f462930070ec405d6ef1791e251855d081f62e31d1e7f83ac03cd25d869cdb0c5fa4477a3cd1b2a5b9a0b39450f3b5ddccb7026b00c4217eb80462f3f0d8b7c644b7c5d5a8193be7599363ec1443f787856e35c90268354079b47b30a76dc9208be436981b8b842a3512afafd8cfc2d39463eed43f9bdd86ea94449b1323b8211d73c24cfdf035763564bf640660bfcbe1de56122024c15af3ece6bc9dc12cd1e0ac9078b510f6d341d3bc9305be95765527950d0bcd88c37c03881bab11cf39bdd7c9a4adb36d4a41a5cec53db1eddcd685d24d695cdbca6d225341a7d946609c3b94594ca145e21d231c8016016f064d423658a39a6175ae916fb5f7e23c4f66211a1dfaa124a4bd95cf4ff875c2fba3a4e8b81f4fc3ce289803ff05f4570c01d1837b1f7db3960a430eb74bd78fc3bef410f54743a8ddc17f37a837d73fa15793f6f823fb99c2ea74024277ed7d678879d895823db9a9628d3437f7529d154faf9b1e6fe47e304672d377e48035eee87d662237079e3af40b2234ac2e1971d06c9b7469ff0ce70783a8defa575e60c546e224d067fe985d412927bd335abcc4141e827a16e9ef13f0a900223ca1c6091d7521b42681cc87776f99942909fe12ed4bd10aefbd5054010064c2f5a6279b4a47a34b0cd0dd58f51f1298d8cd40a2404be882543112b1fdd293444b148b63157f31fde093d3ba025f1831084f895c54464f480bec3e112e4a130e0694fa49c64554326c71b694e85735c78037e12873638fc6dc97dc5eda8d6e8aeecd7d35a4c3925276138fcded31f0c2092c50eee3ca2f6391daf27f4ac62b1eca681b0ff81e76c5c721654f5a12d18b6bd6df96eda4b786f05c8a5cc61bd334640cddbf0a8185f327424101772461886ede9508d919b099c3c6abdd95b4ed338262c92d221249455d1e2acb8b8f2722d9ec7b2cef50a103d0bf5eea01ba0183ed11ea4288f94921335e2895e07bacc176a797ea7772122ce0f0aa6b5055988c6dc245e4835f0df06faa4347bc0f76ce0bb8f32bb8a68b7cba019748cbac39b5ca1de4fc5d6c1e1bdaa984ca68730faf61c697d5fb15955b28992d69bae86c68cbc9ce735c4703083c04f2042cd0ffce407a89d288e6b731f06075b66530b90d396f0b2fc91944215d6396de4f4ecc92707cd308a7427a66db00761813ada90adcb6a41aec096acd046c76401b140062b8737d61a0516562b11e38750e87c3c87c47a01b0c40fc73fbca9c13d64b22a8e1088dc4ba3a008d3a65c4b79ce58fafe1c9071972e5827d0823103dc91abbcbb4e20d183e26d3503d7a21c406ef9628d2e5e1fe67218452f420d8a83caa5233f6aa0447743c67118408578694cf5f99194337b1311c8b5a8668fe3a76226f4872077b38a4a54339d5b56fe38daa736b7c8a101a18fd1efd88a48addc1ab9b71efa279d31688ef31f92970c53bab5807c463752166edc6a3c07b8278636d5c1934220600120ef460b80d6213e4f798d3b9756dae61130ab4f896f0f3a58f3da50a302aa7df5fd92dd9094eb5d1b9bb39226900a953987298f69cdb36cf3ac37e3974eeb0c6a2260226c43b924a1747a0c8e636fa82a386b783364c282995780c899559030f00644665e731949639c67074951889375dcf7a660c4ab3fbc9e3b7c23c748902a01a605f1938a2ff48bf10ec1dad3eb9edd44769c5ddbe8cfd8ce8ab104628e6abd0badc0359a4cb6cbbeaf828fe02527c1d8752090d32255afc050dbad7c905480ebba44d9b8343cc4165625b11bb483233a3ea82e3f50e08ba78b0e12f55a5a05dcb7e9e0725af91d9e9f160f053e4369d01f9d666f08f2e4ea75c2e57b20fda4452339ea37357e20bde6cdfa3b06eb1e30b47ad9f0bf0f441fcd94856ca8b1f4cb88cf6795582e860ad9c7f30bc2eca8e289bb0942f78831addeed934836097fb664e4e91b47acb5fbc49e9a15d6baa25bfbe864f42700361b46586f9c7d869dcc2444df17685b291743ac5fe7d6f78303a79d8d82d209c9fe804f9ae7d39be7435359ca385ecc57c3d39ba4d03805d3800924e35d9d0745ae194da5b8dccbd4d28e8e3afc7f72eaa800c7098d7e781c479d18f702dc8b61d07dcd006ded98fee0126c91b26ed12a3a37c90e6e1ec0b5c0d004491104f886dc2a684b95aa85bdf2ab7f6f189189ced1051c24009d6248824e5149e6caf12d47ab89e7be8804aa909631339d7bef1122d53adad37eff3d1264aa8a1282e7dd997dbc55570ab84d308f2c8f9fa283c9a644afa35537da1be7bf5a7a12c15f10581d7a14ddb6f30e58d2bbc3bd99ea30b1cfd50e045c955d88baebaa760ac95dea074db6e0f15766702d798065c674eefbc3558b7f51b38a5bf3f89baac3a92ee5d7a1bbdf5e47fe2cebe03636bcd66cdaebabac14bbb72af7d6fbbe2f80910bd1eb00844752673de59a8a658ee16132e59541d0630f02a7e2e05f9272c5f36d14cdf4b0a78217ae10b5d28f0cd8b7c9925cb298f8a0388983bcaea9230852cb450cf8c17e41fba754ca43330f074ca967ae68763433cb5870a86372aecc31bee90487274a3665e2184476c22401924adc06edf8a41e3d9d3050087f848602b057612a5289b3e8c6e1b0c7dcda3c1b3675f2cd80d6e401b02930283022da6838369f4ce3bb6f16ce279bc0e3902b69f4bbfe51bf3b09ba49e1b52d35281db4cf0d0b895b6dac62807061fc66f463e0fe249645044f13b9c2f07b91ef02e48add21524a1a0f104e5652bfc4e7655a22bb263701e0918692a3bbeff0ce21a35cfb39f019b01e2f4ce824e1c4d56192a1d4576d02d490d6d764ca8ec46322fe9d91ad6162ae195de08e8d9486c18791d0a23eb4d260cb88fa9e92d4874e853aef490222df749f20abe1f324653c35cc51dd228afb15a0117eb9bb5da3e0a70ca489ceb0ca940e1bf16adc3dea95fac687bdc97be753cd04c63e8a86b4aa26d86fcc6997ce9cf4a46381cf2da17f5504f4fc99f411bb90d773a5b6ec343b7322a399694455ffd15e74df42901448b30c2bf1fa7024adaa0e097796faacf52a7fe2695452fb2d22aea7dbbcf1ad92c3408f36819c7aba671cfa3cc14e8967ab44aec4a12028b567197effb4bee7ddd446b142b5c59e625688c86dbc34441374155b23d64859192d336cc3b0745d9a848314af1d880a25f6e5e672ee58878913668a1f7a4816d8d360e3b046ae6949428a3bc41f503875d698f6e4ee37ae2917bcbe1ff38bfc64f846865dddc9b57a9cc0993a31bac3e264365c5c223e3283ef8c699dd8a0445e1a38c724ec52acaf01cabf69fb2416fc2e22991120f8af2a196a1f11a001b924a7dc289df8e5c947001d00ebe228bc23a3022fdc70e39e7c03ba3123d04cb5492f852d2199df95e3261c20387d352dd95139a2e6887b6afa5d01524cefddb33c2fe8376835bc9cf3c26c7fc832e5e6bdb75d74f7de4caf3583e3f4e565314d9e1769f9da63093909836282138997612143d22868e8c3d5bdf6b69b95c6d3eebf747ec6e088521484e7b2d9b307d647a4953c3fb24e7d78e4441db8d68b521140d5bb31233c039a064db1d92f343ee4c829f02d8c65d60358fa7dcf1029284fa29993bb1af4ba440e440422d0751dd30c5082742fd569ff7c684b60db36c304556e9ce71028c2acfd591e295f611f8cd1c797963503a5d7df3c2af0a02acee9e9933b27db6ed92f640b646f248e909cc8ed741634771626e1d48101078b884adfc5f30fb53d4a65c2c96b66b8343d6d4230bc86a6a6376734dfe21469bf9ba19865690145fab2caaa11b79283186298ee4fd539f427961348acc29d5f6d75a8a3ffe1aef64d9ed87a82cd952d91ac8a2d8952d2a5619ea58dc9a72e50ebb2aaa304016b5e9c6b19c47b11c1104677bb708bc9d342eacdb884b50429d6d0bf41e6005cb8d77da409088938b8c39d50c757a58eae5539bfa6be0d6e2259a317e91d73382a0957d610c73b86eec00cc418638525d644c4d10aaa2149aa61d9391a99eb38315cb17deb80f090d58e1b4e48f4a933edaa129e4ec9af3b1487f9bf40ebc6e1615a1107d3b646eaff965f5bb3bb602d56edb9940dace59713247af7169394b83c8a0d0073e7ad09ef713f78f2f868669498103ea1b482f208dfd39ce621e3111554fbf43685a15207974222716c20943921bd1ab58105e078029a0d4a0720a09e53646fb620b277ea70edf4d967072ac72326a4b392ccd6e34544c4bcc3dbdb39fdecbf5d395ec00aa6c94c7579aa9ea114d369265a6639cd005a5fb8d883257acceb8fa64014eedaa13ab5e0247954596f49d4885860adb7dc513ab8c5a513d338e73d2bd56348fce8d8ada3f80200729af073440d2a971631bfe2571bb02ad5da76645859c852c3f609b03b54c3176f407dc1f3f9427a7a98fce2fe3b32dee52a0f71b64db2b0d251744a10db3b1dc1c8384d12ad36ec578a9eb928a4bba493901901b041c0d7aa737ef7befbd867fccac6812a8986513f7f2bd160f8a91063a53980f0a6613baed4a035a017399a82a08eeaa61eaf4d94ff1ad821a799a6d7f1d77bd21c2251720d8e806eedcd29e5e217f60fed1035ea72e21a0521ebec52de794edef372bd7686705475c0019ab917f84fd27557aeb283282366083e3586f3a59691ccd0d43ec81c4e5f4e85715eba8634a837f41c8f984390debb0f26c6b9c2df8518cb3a3d5ad8ca75d9b72259326860cbb56413d44adaced9cabd44a49987861367d063f4a74c6563f215423b281530e76e260922e33459d1b7e6f3a32b3a36d72a7ec5e745cd8ba4483e3576f3f34175d2c870ee1a06be70f31ad834e7714e4ae134e4a7bef2b9b12c80908f3ea90ee183b9ffa857b859121ca756fc46b348e91c7154986b527c151f8ad806509ce5c4e188e9e414dfd64f853ae44bd176b32c4cd27a4bd3534f4aa1cb705ee255829a7c93e423e9d3a283dd3424b6004229aee2d6ea349f7bbfbc43b0ee0b6c5951dcd58952ea4f3a4a5975318ccd6b9bf8cb8edd18d5283229f495d9c59e471edff65cc7da99ad7a3a2afda180f46beacd1c91737acff62d3a8de8a48b7a1b2c8991a2eddfd48d29fe92c702a5bd99c4f31cbb28a46791b34de2dcbfa44140e8eb191859c70d76b0040b71d36fab6da127363c7b1a4e836af08de279a46660fa71075d9a44b6f2b2e70f8ea243207005c613b5d940e733babf099a71106be3d7c7e6c33dcd63799924196dedc4cf19794c1fb7c1bcb42b3905c055245cc451f73c31e9a2c58583d927a3a02478f9e26245c4b2c2e257e26c515ca301fe0223df5a635167c1bfa9f97e58b5c4b45363573fad176b5624f1ab4e3914987897e1f6bf056afb46543480a4832f7d1b4e04ce963386198cbdc19c48d02a66610814e3b692b6ebd7f5ebf516cd6d8c226c5f4ee5e26f6bfa84eaa5dddc44ea2bd5251cfd95c5a7db1718cd619200904e10db4eab4443c1241cc56e799804925d81ab08d08917bdd42a538ff16b791812edf15452d393b7add7fa3ca8adda0d5a900f4dfbe71dac57c214a362d45781f54639e6791adfbddc68f1b6f78845a9c782da42cc2a47e1ea50e4ae2246fc6c89dc3d7b9a84a85254223463c2b1c7f618cc948dbddd370ce0693c06ac4df84634f2448a13ab5e0389a63ab9a6a4e180c2efb6856d7a6b6bfe7d93538d53dbad8b3b17a880e9914001678d2f2fec22b84a6eb8d0478c45ad7900731b31f306e0f118ff4d7ed9c2a63fd8a43aab01fc3b33cc23e4d87d6630048463a436961aaefb1e93ef49f66294b99c0872c460de58038a80499ce83da2158beda507d787562dae5e149eca0199f304325de88369bd3e1c466501374c62208969842211cd850d5ab643c9cf202470b3ba52a403fec94803fecda1f502feaa0f7fc821ef5d99feb644f377603ed2a72cf907734d3e1ab5d401ea0bac01e6368088f763cac833861382ba1437ce132ac276c2c2d988001c0f08508ab6c9974a8f2d88742e9db03824e7ee2cb04e746036cc4b3f336d37cf177a87bbcfbab05a7dc601dfa53ebe895cfd362d644064ebdc61d734e56e20537fc0f62b31659ffaeefada12a93bad0e1e2af882ce44633235c01d406a0b385dca743235964ad48055249799b5150a1afb09cbe948bafdb7d57f73ee2bb51e226a1cb28768eaec9f42ebc0f1534b6454761216cd8e14a2f13de8819ac50c1065e122fd7d23b646ac3ab8cca60e4f3a2f11cc7f8be901e172c1a3acd2a060cd7cb22f89a3414d814b9f04311430a0fa2f50914cb0f3d337c123398c225863b3fb7f7add866c011ad1f26684e874e132c9a51924d929292440b5027616477562568bcd6f82ee8171e3d7484e8f45706272a1cc9e61137425960997110b18263702797fc645534f3505b031e4752cef07deb9140ff52d44ba15937fd38d24f6c0a3cb0a683a34bac2ac1fbbed3695ad91526d97ffe1f10b6063d525342908578daef305cbddfd64a93b783edf401a4cad7221b0e4d3e938a6f5611fc94b3cc90c8883fa67ad37cd67584c33112e153caab298076527706cfc3ea9d7f9803cebbbc4e040d2245e657b771e41595d210e27981303e7794118eec421e64b54830019e8aa8181dfebcd541c60e1ee59c8319297352ee235b5bced1a6bb3452499d6a56855250d4c6a559fbcb68d66a075377a3470f0ebd968d975a5d9c76d9cfbbffcd842b3bad6449e9cdc71bc48cdb2904cf458e27af0b4ef16fb1eab2b1a232c7e9d25b6311a251909f044e70b4dfacc996b5f8c0608347e5f8e8cd70428aabca93b609506946655359c82a6348dc85cddede746238c5207add4b6c39f44fce11b4775e881b192c3ce35cd724b29a5b1891092b949f9b80b90622f0942fb842a3325e819591e34f5225087c3b58e1d7b3957e44defdcb0fa85cb5800a5b8eb089f7b39aff316c759d07134231a479a1a5d485e8c8ba1e7652c54b4522e099bfc9e9bed34c657b472672c7508dfc2960f634663fdb3e5c5dbc2a2e676426a1186df2c6520694da6df44c6acfd7cababcaf9f68709ef24d6bf074a40d58966e627cf9153fb4254f8e0f7f45e69875f55fd7fcd4a49a3cb849f589f65f8796c746ffe5f1c3df82a35280f1a0be56659fee7633f2025585679fd3536c86788f766cfda0a3060e129e634e8cc37e9c028314952b0ab35936201492b94daab3ea417b7e11722fc93d07668136f54fefb468773ace64de2eb5ac503ba2e3f2c10df11c8b20a866996ba80622d97f59d9e315bf700348ac5a6cd3fcd6f8748729624ef62ab58cd5040447e9385ca9c3e1f753953cb2fd4567c15cc069a24991734f1fb266b865a19470adb7cba7bbb69058eaa1a8c3ccd0dd1e1143fe88aa37283e2ef744117cf5d118a219e4a2fd596c6ea28abb1ffd7542eab82e9c92dea1cf96416ecea919f74262edb68935b7d5ffa243f87dacd85e208d1a284ca82ff8f0bf21be0b6683cf6fb75838c5483051d15a9495f753a4b0fe6fffda15b2e36413219690033104a6e080a9449dc3b1f668ff5e0630fdab9665f82febff98430cc124678cbff3e2a41e23a9851b8e82eb4efa69f630903336dc9071041242971981305e59469266f0b00a20a04691eb590bb17d0b00f685b8eb9f8ecd579827b2dcad41a0a0f8d8b31e9bd64026b53468258e62eda715e9451a8d4fedd5833a005903d908d60b8014f140920bc4e0a43f26f8df452dd7a605f2c2790d94e91a2b809aee3aefb5a53cb0601ea927fb84079657bebb9b22061ffaa6d7d49db40d5ad9da48ddf3dc9152e36240c357ef1ce7fb12c5f6f8e04fbbbaa130ebf7ca5cb5ed2cae9aeb6a8a7f12b0c1015da2b408df93bd9f4cf8ca03bb1c4bf9aa154f6543f6e919de46d9ebc6b1680a40fe9492c9416d5da052bf1d847df1a7bf7b2d9263a1c201d458c6bd86cdff8708ea04ac42849fd9fbd676319e2eea9d3de64063d696fefbd588981edb6c4c1fbe4d4b7ed1c419bb656c36688f95fe822c3dce01233c68aeeabe99354cf6197b6911b231fe69a4aae6fc49e9e11cf5ff95682094d2fac7c31ae20f2b61d32c42111d81ed51db084e876ef5dd1b2a96bb7f4e7e436c3ae2e16edc4327a26c4d1dbe5900d953830d504faa836cc626aa5ff2d92f36786382b1ec947d52982746b479ad761e8bc77b5847983bbd697af992f6f07d967edd6fda9ef305d3ca6ddeae49012de38110190d752164f98c8d4bfd947bae8b060f71058cdf22d3c0a7dcb4373d6b51bec7b018e32b4747b8c76847d3630b3c996350dabd411d7a033b096d4a497990c9520820999f2dd073901819bc8edcd2be40d30039023eef1a932d828a0d9fc72a1be9ce9d665cbc4850221b55e56974fe0ec4200808cd5b8d15109aff72241f6a881bcaf9661d32bc6f4ff4a850f94be036e9e1333d12e5e52b795eb25e52bf100365bbb589b75a5955674dbdb8d67fec1e0aecc08855b6a93c3175aaba6fcfa4f3914ad7b6745da66b32cd9a034637aa2ff1e8bad0ddf561af0189ef6fc479afc0651e69d59a632b17771d491b929ba3d1657e26fff3cb96eeaf3f8a6499e3b8d1aae072cd729371c200e4d2e602d45e6d2d560efcdf60ce6003418280363547902737fb884416ffd593cb3b4edd0a6369121779afe9db946dc737dfade298e464a6cc0bed58145db6f97a8e3a6d643b2fdc6a700059656d7dc1c8aad2e63418b5ed46aae4f5b414cffa98d391f80b6d2553f6fad77625e3f8ba9dead68a306aecc64ee055641eab875dcd103dc72781b53e641f1c89447d477b5ea7a316b4636ff78cb628ee7baa45ecc34f2522df0046675be7b7dae9c4d0c9b2e920d2ea89a748a73345d9f39a736d1f9731505b713f94845b90b13d3efc6f41b93506f867fc834860956dad0278a98cf1499bc45c0a8e8782905668753333b41ecaf90682d76e1643fef4d26abc68b063554942490e1d0b659d1091f1dedfb321c7f43d649ed3bae769b4895aa77133f83da3fcc1b308b80aa029e0386339e5c9143fc494bb78db51bff6fb5ba18ebeb5e9f11b4b6119377b82e77ed42c0af31e9a22c49a9425228be6024ff41285f9a4427bc670801630c02993934d9f1984283fe565ff93a4369cc820aeae621f8bcc2e8826b778c84adf7f744629263041f0eccfce4a1ebcc18c4c984010f9241d35966263a8b2f72ee26bd4c0f22815d27d8a2928039f34686359b12ca23f5c56e8634fa4cb946b84d0d4f9292f0d91ded7ff3b9ab27dd5d52ad9b59bec9d8fdfec7b9811a987ebf3b2a42ca8693c6c0d07354d4de02067b0e9b3eab47779845f49c885d3c9f441238fc2b565271f6e091412a76914f0b2a0a6cf99a0ca3c047f08315d12b34133bd6f16dc89f11d5f7706809115d7557d4e6b1509866d4fd7e7309d6af5f0d88a695b88e93c4f9e0602e6665279b0b792623f6d848fe918c53ec9f6f2a5071f0dce590023a5ca0a2c50bbab33be277eb7832bbf50e3c501962cdc233e4a808086957466d4ede9ca99098d397c0cc412b55935f3b6a98971115b6f0c960be461bb65b1a2423b354415d664f7758a10db538d68f1fe0abed0ff708d994110ba2c76e71a9cb5b835e1685f49cd656192425bc7c9a1702deb8528163bb289828a487dc3b63d778c7109594b43a396b8d2ad93ae62eb543b98fa54f3833fb489dd1d98a08d6bcfde7125b2425b614eb85985c5eb3ab8f15b4d964baf6c280b4c39139126a80f04d6be9b39ee98f0d689ae33b72659ee90b693c1d4f3fe55d6f429922ffe0e125f9edfd5b7f4023676525a1d3206c8777973f1e3b96742ae5da8320239d0c75a285b5c39f3ffa11c753ce3adfd338e39f4bbf064c0b23f1ce791decb7843dcd1a738be31b7b57e8a1d6ed34ae256b31e49b616adb27cfe85bed6b455b400545e235b8b24c9bea069b410b15ba717400dbf8bee24566f85d328a13c09b4af37e8e6ec4e7af2c30f9f834c064a151d3ced9f63fd327631deec6e17ff4d42f78e5936148c9afa6cd416d248597ef411afa83165cd3fd86a11bad862848a248060985cfacfeea960f6b4e92c325f0c9aa125bdbae5b445c32423adaa532923f3b58da0c89eddc7487d630f21195524611b4c8b89cdf785e321113716f59007f8952049a382cf1bcb720a8d4f97c8060d2405e3fb0e7260740f6bbccff12998360939a1b5022c6e92dc91abdd33207847c5380c382f8c9e1bf71985fdcf5b9e5618c0ee26a65d8844c3dfb1f376c543b705cd4f67b8ac0682e002dac6188de0ffcb9d791ef6c8318a2fdee7bbe7202f04ecacf4b0313c6251d2100255532927da29b88ac47bd6310c2975955a0e9703d782be433c23a37830d62a47d008963b8f3af96840bcef4f71b88c02fb739389d7d0e98333164910c5f238ef60c03ce4c506495dbb417c5462e50c77c49f7d87addd16febd9096f4bb3023432c0183ea24968eaf5d93e30986b7db3cdd19bbc600b12efa001bf2ebb898d18b5d56d31456f1b2a74d398e338636e2996f69b70e795517c0273ec5bc64312b0f1a44942b001f9b8db4bbe39d096a09d6a218d726c0d0bb9858827730690319168c552ef8cd2933a9b9a24c0eb85c393a9dad85d87c2a00c9bb6d700f6c1684eada100940621660428575304d3b13580e89b028ea556cd09d7a891821187352d12dfd8dce6aee0ca23fbcf72339974f9a8da92725f59d125aba5ed82d12216d14ada523698bb91e0f100008585af10726d221ec5101c5ae49a67216fd0528bbfb818f31d86d807ed220c7cdb4472867fa80a0de3624ec8bb263503b57979126cdd24321e4b94b1433969cadffa844565ebeac659b041b93dd1c7db004706395d4c74a59551720c8799a041000244ebe99b4cfe94a495aad11f782dccc39a6ef56892b43f32e0982ee56895e80644d86f48b90d2099cafc1981ce826769a621e9c3f6e4585a70d2ad8efb20047104996b76b7789a1a524b8b8b437f8cc3aa009ee129cc9d52934a88090075c1dcf4ad62a7b0d74da0bc078bae7f5b994c26898932a3c36a95d87e42e5f11dbca49592e94e4d9fc7b768beae6dcacd097d9c0b3d5aed6f4caeb0dc62a8457e515277d863fcd64894e908ef683bce3a79d28b242fac7f36b007acf37bb2862e3c711bfc6715f348419fed085dbae23a56e57452d4b9c1a0312b2d31d2a73b83ba8ae25d673c2d353a56b597d34dbf332d10d815c1056d324ca3d2362c08ce35780a7ba9e8d1dc960ba7d32c8d76bdbb68ff26fb8911ca636eec0c7ecc29c6b9d17a3830606989c121fdc624c0c85639970af162715171ca147e6c5a57bcad677354b8af7285dd6d09e31f1f31a5114443cec7f92e66ebccd9d542773323fae4ca147d6573991fe04fd24e8a34bf8751dbb50b0e24a4a0e22b8b5f5402e227a84243e6f10825f9d15055c4e46e5a20f8db584b3fd8ad39b095faf35f3b89cc38786d95e084bed3a6b7e822bc3317668fdf13090cdee30eae85ceaf17418d510bc8fbfaa29dc635d6e303d8802779d0ad338fb4d39bd8a8428750f30ab96f4e98d06985b597cea8f86e3366cebff3f7d79528df4284108ef3273c6fb807a22d661b50e7a8274aa561b5e15df6610824755078f8c84c0d3b56d1db659db0b8660a162c70d8b0dca3d956a81e95bf391f2d11fa91e3483125d403d8852a492490eb3d66b1f5c8c72c95ccf2293b2f19206536182b120d2ee701599e4eec357926900d9a3b5dd3ccc84d855a1e45350ae094596c34d30f58f7553fb703620a28af8f03317d9f664fdf571c3a6e526580c850e8613fa4c331cf46129d731a3bb5843ecab6e928f4b30a490e3d89c1453d50116f91bc15cd5be76a9ebbfe735e926d25a0a50e9903a8b1a9b7be01303873006c5b783a948239c82920bd161bc76192ea31867e4e17936defc546552dc3d461b8387f2bbf865dfa0844fb4a621a85bde309d588e6a505a781936105f88bd3ec8b83310fe54e3ae58e78110be4dc8146a6861ceec14071f715ce98944ee4f4195cc81867a45e5323324678fb2271d6b5bb22b6f08c5e5ac502c347709f53b770b273afc37b1b292b8a1cad78996f1893778c5e3e966332a9df0e083b487c807b13126193e8293f770c771904b848a968921f5d397e03ac0e112b5544f8b401a0f530c86969ed089e1fe266301d831b9d61584e71b193f97a2f97b93e1e8e9d7aef3b5eb47efb16f95afaff7b27a2e1aa8bb3ac67cfb8dd66b0dfae773880c67157beaee5a5b7dd21440d5f66651c9e2867dde19c26d6ba6c1b6faf90c52f0f1cc51713ad6cc7ed9e41b600525474a39f9c23a87f556202f2e5c4270b42edf9e5cdf1275c329faad8fa618cef843f84688f314b91ea0f59839679bf573041f964c8b9748295a3a759d4bc5f9e62e1d32bb7635564532320a6b3fcd3052bcf90024bfc65a1146865a94712e2ef8eeff241ab4650770f41fac4a4ca0c8583fb5046de2695482d72684fe7f1c14356ce6452e156b74a9ce03a760f7dc668e739bccae5c46dd85f4611a62df5753a5901cbd7e021144f7a8282235a648b1fa41f37d6f94269e2185804549f8a7945043e8b392e11d20636ad4464fc2ad52a691044239f4d03e5e73cb2c3a32d47f3f6b914ff31b58aff3fc503b38b4d3f09a4c174192e30e6644a48af8bdf5a5bb79f160bb28198a9ab146e42878e38234dd5874a205c9a6bedc0105d05aa9e3f106be9d1cb9427b88a531d73595b682c5769f638e170f61ed2d7284dd9ab656c8efb9909d2ffdf222d6a3738c19979a4d70082c2d521b079c3fe04e460485c6e93bc9806311b4b9104c85fe528ced9471d07a16a63d5660721b31ac34217cfbfbf2d8b799e7ce96f90fc0c1b2741f36dba0df6a2260283318c84fe6cf7704bca71dcd7b653ab35285283a04d25b974933e81e71c844fa4a354e20443e9086d395c28f15ef90cab55d9edd0fdac8bc9420ae1f70c170326b72b68e0daaf468066cec08cd60747d8629799029f344f6e14bfccab2346c3a5f7707808b3a29141ed4a01feae06b338f90c13a9b4556adf65cd9077e4ac178eeeb49dd0417b9f0e377e8bcb696ff55963b7fc5aef786499cfa4ebe1b2af656df77858fc1682c661cfacbc777abb74964d2bb18a7315c329bcd61d7d2fe933afcc2c27d0a5608dc9308522976471b78c1fc7b1bd11d61d1bb7e1c3aebeb218e0b75088f2709d7bc0e4783c8fb90b44a7461c9b673e01c8cc4b587cfae1b27b9d5375fad5fa8206d565f688d4db1092847aaacd1d4a515cc7d19a97f62b62d2322b1d0bffb5c6c5733f90960b6d0a378007f2d543d92d5faaf538a3051e3bb34ba8a62ad434c42e26cbd6c2a7c1608a368875227f6cfe37c220b32cbc1cb5a54646b1e5f7fa12a76cb529bd1e8aac212476b25334785c7bc9ee8aa39fb9691ebeafc0abef782ac7b16619e3f42b4592c65d3ae5e78dc0a20eb92f960476be96112e431b0f318515916917b5ad25e53588965f491d0fb3312d0b2272aec72e91ea5cc981eba8aa078938b3c0cdfce3a007dccffb5980bcaf917f03d7e34d5198a6a5b49f19501224155f6e93cb32c958b07aed7b01933583d86f3424365b9010e2b3a4b0fcca55d1a237b88d294a1ed61f0b4856c989c6445e6643e63c8482a10ae10a662a79ddb6cc6c223b5cb55c9eaff8510cf606d767bfeea39c5a5aa1bfabc8662d16d1224a00772c1cfa06fb18dfeca80c3b8cf1646982e3c5144075c321d448843682bbe1cac336b075a172db5b32add2fe7eacd0e7ad74eefec86762299f120a2de11334a7daf28454377c6c7e84e30fa36e5223c6d8e7887e74ff030f83530d518eb0b91448b0071a1b4032c63dd810eede99e3639fbc1017b8b52c601bac2c45ee2cc58c772fb74bdf96d4ced80d652541dc765a6c53145f162254b7d25dd57f81e0009cf0a2234df6c8a8f4ddf39aeb2aa28317c95d03c91fbef2735218a762dc62e0b24fb7c9a4f35e55e4da1b10a51b746038212a7cca27f3bc1ee54d0094603dfc68eee118e547d031fb36e464e776dab4181e5bdde6e158e837366b7f88bfc9aa2d58beaf9376c6e3c48f001636df4de5542b51a5b3be672d48b00472b44dae707c0790ec14129ad1bd4cce92f7b7367a58a2bc729521a6e1cfdca898ab9c44e5d196185d0b7dd48261fad079be812cf9b24efcb32fbd80bc4926b84fe32e3580ca6ea580ce4afc7c3f039618ffefb9c9dd7a82e5c7d48cf32128c406df65e8c7c30bd8e5f0fc8b35c101802f4035359156afef991229344cf45d4c6c14e5e73157e812fb07f4f945848f3efb040458b6aa69b33b830e1f203f2ec1de0820b93405adf44e67d6df01f5e7231adfdf6bc045324e4b9f0596037e37b4db4da8c77638a7fd4eb514a51191a3cd1d18291734b3944147caa2416d1de2a5f239d0aa4e8d708e7a6430d3eae46fad706163c39a71fa1cce8a6699c3baca15a1715aca435092385ff9bdf4046a8534933021f9580cee313e72b517bdb15874677889bfdb4e877b7dea0e7de490af031408f640f3e0fb3f26182043a1be0842c2b3ffe3acb3bad842b9b4ea01f3278961402302f49a8b9703cf4a96162d742131a82fee0e4cc6cf5ced43b0e30e8948199a6ae7e09619c9561c7697817c066032e99c37966615d11b093d7b1e4f6ecf9b6c20383e7040469b8436b08a4649b044ecb748db9c327e0b7204910a4232706539d5ac649579bf529b2d898708b871f62613aa245ba736accc2bab3d636eeb05980d9d0982406409d5ad7b1e3fcd25b53a33c42710ee9b8d8c35223e4f8e800aeb3a8283d31f052fa8591da658125c107d9a3f4a78630d1c16938e73431befd3b7ef0569e46ff342a792d9b5ee02857674b96414febf1bd71fd958730a817b0e829d9e3252ddbed137ed47c36e282275b413eafcf05d385cec6908c3e279c1f9efb8a5639ad2d859fdeae06554fdb39cc02c2c8909c7f30c20e527dc874f554433d2c37418d9d05b5dfe2c024efdd93a0d74b14fa789cc6341b03e23558c957c038e60fa796d2743ccb9933098a2e3fc108011a7660d3500b37c944ed9bc02efe31e165d29075da1ee8fae56de7764515dd0b626a1eccd431a8cf29580583e3e47344c12a432d40427f2e60b9cf5eab869d92743f782e5d8db63b1cde5eba7e594538ab1776a3ad90d75c2c530a8d7bfb92bdd95e37a2f007ab36a2e76d0d0547eee5ac01f37f29f03aadcfa560adbd5b02b5182d23cf9787cde745dbfb228295b7724b508068bc4aee49d3159963779036a1b916035e59f566778c22d0a4fc2be808116ce6066f863c57c00d7c59b38176aa4480a0f63f39bc0dff24b4397cf1c9ce85beec02498c6cff1cf4d23778160af842d3c3404f3c17d227496f8909cfa1ed2fac5c045244c66b713263a4cf3739b23b7632e393e4c1ee8bfac83dabadba8c979ffdb3939792c0462ff749becc4c01b5d3b688131a0188b49d89fd6a735ad4460096b8136b1729245256ce50bd8b0c3a5116d7d6c71ec8289c78704f09caedc335f0badbaa9ecc920547da8af23efc51581c77e4d161d7715d5e3f615752fe96a8d362f13a6fd118b094157654adf883508e11452212dd174a0212a945392f48bf06585f05d2613eb903291bc9202956a1354c02a07901a0c92e8f2dbcc9aa60e453432df10fa48d895dbb813adeb654b4d9d12135dd6c9644a861f7a24894667e80cc61e86dc18c886976b19030c805ef4247adc888468022392e0fe1ff18e2f5569a05d135e0c41ef1ffb2b15e87f0bb3757ab40c0b6e7cba99f7b5f365b5db09d562093b02bbbb4bb018c87b01a9d8181a92587cee452a7c05b450635885f191da7bb1823c8fbb0912248f96daa94a7e8e42284faf9491e460b75bc43c56e979d36dd47d9df0c7c390aedeedf5e5e9734b1ab1f8b1d54980256116ba93a1492e7aa8e081999747e7b6283504c5f82b72db7c740cb77fc7dbde523fab011d872c1acd6432a1dbd2021d21306fdd488719b9f7ecf0030c8353f5fb2519d6f42a0f4e4bee055946ec9f101a3f83ae6f92c4510d8b4736f4128506dc758bb7edb8248f94dc8e22610e0b5983e0e4bbd5b4ff4b3ded76c5dedbeb8b769f751662a8184948ce119fa2acf333ee9307780394470309721322256603ee4a016a64fb806725c8114413944fd349cae4607581872812e0c780fe50474ac9c749d03600b77d8fa364aa40ae7d27f5a9438436c8241ef5543c649ce7e64c889ee74b0c1ad3d7f15b369889699b6de1fa3ee73e5fe19814e46f129074c965b511583f59b26c12f56fe5a3605e5111793e450dfea156200c11de2f7b5f6742c9cf2b31a16fc6aaf642106f67e504bf35f5e47cfa44d843555ce82fb03046405138bea6659b99fc9e92454102964cc3a2b1ab98a3a31e7e5b363b87d17ffd0ac5dea11228de4ca438a0d2bcb2fa8fdb49e1e9059d546f4db83e36bc4196f1fea23171197d90652e6f1e67570b8a444286174b2849d1611de6c57851932dab9870d18d00a66a69f7ac6b71947ebe10a601c240953b928a7b516c6edc489ca064bc2f738c65b4c19c7b086ff98f1e6b82276347b0d52041f292a388b0d48c66efeebbc3012e1812894585d0fabf23bb43717aef2fc8f33df0250b6473b945759672f6d9f3520cb34ab664331c715696867a8995566993c51082f46099898032f4f37146f783fb5a5d281414d3682f73a79d1fe8c9497a7dc0270f3b96a7955587eabb8872367c4e3d2515d4b3e626d943739e47eceb2fde7babac23ffa62d23cbc3262cf7ebf8256737fa11328dd54dd678953155c12c4dcf6b6bd8390790443d174192fd07076667cb3158d3c1a337dd268543885de87227f0ceb6e74e672d6841ae58f63a1287cb794c0a2c14292dc407fedcf923fcb211d6354e6edd2a45b9eccced77d7b21feeacbaa38017cf962797628c3cb5c1a41976301d44465233ce831ddef6726e856de00db3842f1f17744f40dfa785efbeab7b5f921c2c676df27f219bf69c905ea5bda5c8bcdc801836aa1a35de16cf784430144b3ac1e25ae26b68b30ca8c012429013417ea2ab2eeb426f2d44eaf957704eeeb744d94b90fac263928d498636b0f1e6bc6e03f8b20e72b0248064e5d2bc225f54bec51b96c80ea2d90cd15b326d6d90a7ff92e1481ce57dc9f5272d709454e6a1fd07cad2c6ba96f51fe2b7abf46d917297b20d57a305387c37a438c77541053da423e1db7350b0551af003e9d27c79daeaf3c5771d4c60b9ac6e803deb913b7638abf9275a6baf97a28bf8a28414aa1f5ddab21cf8359710e7d8ac4a73a009ea2f02694ce855b53b3b08ee3c85c0b2de64d94bbfd05b4c006e9505838a07f107fbc9ca92a9c9919e39095d3e53fb148694620ae61227e0069506346fbb23716e235485bf1b11955f411fee1e7b3e5fb6612778165a2603921fbea16563ad1b7b3a453318b8d860ecd79ee9636804f4dc5f7c0bc704c017415320e51b3fef4fcda51e4b360f8864d56108f783a6e96466e3e24e8e9e90ab92d3df77e79c849eb3f84246ad8bac119772009115c4463ee4a2eca8c3a41220e5163cc25105e788fcb853add5c9ae17a18ef84e902cc5d4e3f11da30ca1cf27d69edb6cee08828ed649b4f9552618b7821c6278696cc2d6d362d7e5c0142210d5d23dc025110010ff3108b1824d7691c7aed1a727e0d7a5318ccdc99477b58c6154d6748cbbdadfc612a15f038c4236d0cac86352457ed09cb341c6e048e3fb17ab37e29b656 +Output = c023ec5558815d17e8ba403b667eb6ad6c73e4accf9c2d3e88ddd28ca0804054 + +Len = 107400 +Msg = ab6e802dab0b1181da454f417042595bb303bf74c7e6f288c86ff8d1164764ebf0858635452ddf7ac6f6d7d14051b3c129a6c1a979e1d55fbb2df91863ff618862579d4af8431281c9a4abc03434cc27e0c888cf97d31369582c7a21a71191c9286b2d336c5394de0bd632d5f3f58ed5fff07caeccc593ebc8f3e1b58b83def56b499fb94a684cd9b314d4da269cdf12afa7050dbdbd3d30320a989cb75f2f56527a59a43a8722baeae7f995742fa92818748bb615c6f97fbffa059ed2ad6b320685c5bce3bafec8d7d509d086b8d35d61df766f7ae5af1f964a928384737cd2aef24ac8ee08c84ca3686c51033e45fab3702e0195244759e182a61277bb497e734a4f92027a688e75288be194cae74635b01b340d8aa975c52ba814508cba7d7d143ee0c816c7d6769ccc47e163a18b1026a5cf8a1fbebb6ccc0252baefb719f3d87e7be8e6cb6ccd4c984d91115b0f6b5b359cb6ec6c72feed1b915bea2898fd1f772b09f25d97a4c058b94cdcfd1c6fd5316136f89ce4a2165b9cdb88f543c56f91b7d34066a120817254bccd6ff8431e03e7b54c375781d02a3ae3ce0762705334e9f0dbccd06b1650e687eb99eb11be11f6d9ee2314c3a2f0321bc6443d2950c88705c8796dad075837553f633ffe3bc5564ae84a638f15154d2a77951b16f0b55abd1053bf0dddf40ecfcfb63a341f86ceb142928b0db00153b9e9e2465fba632abdbc4410b41f8b349ca57826dbf1bb27b602e5d667fb1d0c6f2514042d363bbfb0d433a6ca55847265c993491a3ace2900322a8ac27ecf3ff532119ea8eda3e03c5e07cb7607498ed241edec1a81269c38d949f049c280b6f218c35cf76604570964aac4e0be41508a177056034e2b4805002950214e99370fe011854329c7eac0ed03dc3101d482365303d1fc2a45f510aeb4f275aa808bf491e263b3bf52620902fa5a91596aea7dfb8da32d9bdc6a01ebd11d6b5f9f7a4833203c70af0f868baa7785274d6b520819f815bf2b58707fbf681b2bf45dcbb3cfb259a1816420efed62a71c653f807fb42b6fda6221cf32336232def12148df6b80026fbebbf6dcd3a30697294f3c88d50ef9a5c79f4fc34ea5abacdf55b77112727e02ed7bd2fb6523eac1220150ce8389fb49e23bb7da191acebc4460e114c9701781960c7af4aac89dc2d7be82f7c684bcee3b5bd11e9aa9e237abaa8e6e9a62131442d6b66eaa7b66c1d0ef9caca6e785ba5b696338db3b3144999b85278c30bbe5774150126e258ce696fa64942c9a9ed8c9cb36cfe4b6010c989b90e8a7c25719c0b50e87fdac585bb049a3585f854f6e0deb128cbb049bb72f127559f4002fdba29aba7560fa1245a642209f4891e0a5b02fbf176a0b476ce768fd217ad38a51a7581a869df502cf014fa512eda498a439010417f9b54c534605f0e84221b2a35657f760be876f1e48d7f85958a7c09430c8aa356ee8f495d651165852d4edfa37ff18abca97a35d0342e21b9183a09c1deb7a18d38e855a1fb53717b4d2847ed3b94710ca0ce4b2bbf72b009e1e80e589d439682f8e48c9a8971acd7005bf56b1eb4a36c5d07b45f6609bb28962a896fceab2cf8bd0850bf96088238c53e5ab5affeac7c3cab03f3fe4fad65a365fd8fc95acf3ee3c84479a7949c012a640a4545bef68cde2cac81beb0f171781efd3133dee7c60ba8ca61448254e09e5166a296921c3e900130714dda31aca2d9eaec84a4113ea32e650ed37e4727af8b024608f4880220cd125b1237e8a7a21b592a3246d60928cdb6cb0ad4dd66cc656fb82372b477dee4d4a7a23680d30457ba62d343a0a62b0b123e2122922e7394f1716c893be048fcf9cf846294bf3813a13ede070ba6286b09c0dcd40fef438e59fa4aa4890bed59e46b2f488eecbbd38006c91d61799f72200b8485a1099ac5ebbb5441263b3a9046e31964f9bc0e1bf9630b035ca0fe94d766cea3f03e07b0395d000b9e0ecf4473dfb9244fcdbd515fcc3a3557acc457b27b01bb67dd18e1c527d4504ae709cb0da9a5230b92381825badd4fed0d9f4f23a0c43892673cdf11d447cbc75478b876d963cda7aa1ce50db74a9f8733dddfad808ca7ea8ce20c91cae0ba9df7aa7142075ba0ce65ba2c5a3a28c0a0d00e7dd292d195ea8ea70ee77425b939210da9e19c1338ca55be72bdcbee4fe432bfce1540296f0d1d0a3a65788d44236110a6f80010f2360a983c8ad51199abfc403508210aafec887a33ae409de7e748621cd7ebeb599bf4b60e53fe293a729d6e370daddbd4e381756f2454ce20ef47606013b7f8fb6694b64c9baf9b9ec2866868a85f338aac789a615a3da46bb5de9a153decc044207b079be451ff533657ed3e5aada81d81de47aed2539744d57e7da0a8f2d7c044083860a08daae428825b2cb721802a0e330b9c0f4f3d28c8c799970782b5fc5bdcb72f62cb54de238640b82053722ccc1754dd73790ca3fa1a6c6cbbe4d164d259027cad93538db1d42c6538abf48225ebc1d7a1796c330417749648c1c076421db8cce36e4d8f5e0c7cc862936de6c630c11f0bc8f252512f20a83081f9bd259b3894a6c4995f829fb03630c264b70776e11834d0257e7bc21f2705ade3a5e74200685a2ecd8ab9fe754325816f7f743e90579f278c33ee80ce772abe14dd21b2aebc8015607d7eb92a73a388f4ac86f85d51bd578d0f13ebad2d223b13af4f5da205bb10e8c44b504e5c4d218acada24a6ab11b8ae6ca65339cd9e9d56b8dab378e86d99ccdbaa446f4184e39856c8441aa83ef366d8f067f2bcc26d54664e4491b91a2893401605fbe7ed57a3dcebe717ed87705cd09c8a769f6013a35434919b0c3335c27e092572a3e8f643c9bf8e3cefadb7e6f0054b23d9ea38a9ff081ae3665b59d1021e2371f9fa37eea9bd99d832f442ab93c51a88e0b3350ec34351193bf4fd5568af70687ea3950b0950aa983c0da8f148468914686da1183d70d48b1192a8b61e47acc49687b63f453330fb8f5c437e9a141764c57c057cea1b05d76bb6d4799f612914d5e8f3e1f9bfbd509152baa9e5c835e88c60ca9345ac757ccec4191668a685e7b179d6a9a360a055d6a366e9d7bd652e21be7901dc9f93f9af6cef23066233abbdace6dccec09a69e3a0e0d4cc6e459429d7893f1b7ef1cc81f3bf15f53ec2ef5ee49d11c84a0c1b3ceda0f1507527b9095e83a19ec51f63db0b1175b196b41119c371df4c8765d846ec3fa5f04cbc0b44b5e0dfb30c6d6e3f057ea8c80477bf72cc0dabb7e3482f961f1589186f53196070395004bf6c3a12956f45b5029e48fe60b8fd86f8138faf18bb0155578d51f11fe5990048ac55fa1d5bd2e50b885c21141c4b56306886f64b98b5239fdb535b078e114242ae405a2fdcb6e499d6576f78902b9226b794003a570b0fa2cd7c12e99b6f2747d297c72f5a884047f8c94de0ccf4c735714551674e7975fac45acd1885f94b92c9baa59e6dcd6460703050ff2b6d61f726096e551786f322607dce26e6460bede4278a1f8edcedaddd1afd2623cbfef6565ecb762aca03941233ba8724ec04a3c27ce905265d387a8fe7c6f84eb70a8d82b3dd6cf0a923da6a3b06dbda41b24ee5195701dcc4c141093532d814a4f1572bb7388c11bae05fc8e227776eed9159bc8b38780a8a34abf971b5581e1c5fddc1c741660655a5beced7b10c6b561e5eb95121ea4833ff15a12be2fab393b27be562ac8d372ff051ec7a27ed57f1d5c88bf987cb1e488d18c0d230328d9175cbe727be543ca06cc39247f09cad77441174e2febce54e6b1fa8e32192049c264877751b7d7f3d578e60dfafbce42ce5e434bbeb1235ac15a4fa0d3b8ba12a507bf6d9384b877d6d1cc88fb9a084a9379b1bd2d17d97e81953148ee2a1ebb270d0f5c29950dde709e94a06a30a1762c5b0cac646518488e2849906bb575ccaf3d1e4dfa32ffae0aa9e55a2f03c04effccfa214ae3074151db3e7f32a2e7cea7609547f0a2b6710eb868c0325b8e5b75942322c9d9cff03078b81d2c399b48763e1b53f22f59aee394c4d95c823324f77a31bac88e97dd94c561733fc1bac2849f5978e91f10eef105a2ad93bfd632eb47c9ee304b8891e68cde8854846bc4394bf6bebbbb05b8a0d3aa45c0599f0bbac395c8e758ca938c93da6554c8d7d7fd099b2d514b5d9458c583a8cc99b739cdb63d4fd6fd846bf0a3fb1025d6258238a3f0ce9317430a81a4d6de9dc746448be8698be582dfa27883e993b1f67e4e52df9ca86966dda383384af01d2b73b25b21c085fd2e02bf8efd4df6de6f0ac2b38648c3bc8253e6c64988e5320c670da728ea44044a154a99d7cf3f968bf066c3609b2872b1ce5cb39f37c5c6b44adcd6c690d0e41e42cc01da1678c09059c2eb343ede753c768bb0010099c06943a850c35a3283f2afcc2dcecba844c76c5f91ccd8edab6b72fd26398b6808747af87ce7ef71cb0e84d2877b95d80a7852c41fee125efe85eb3a7e0d7f3a861d1854c4f9f895a2b9ea6676a81d0ff9eb3279fb63943855d408c81e46851722ab45448fc31ca7f23d0911621f0b55fb6735078ff20583979ef23170ac4408c4682851460b04aea2e0085ab3a606b2f73683f541650e48ae2cd0fdda066514549aea024f9a57b29aeb0fcad206b62fd69e43cb7b83568e81c6cbb2c61e8f44ba8ab2e01338bebcc2a648e72507c4d37ee89e12a413865df8b30bda9bba6b9fde80a972faace1d20258d93c1570d8a7d85bbb5123de45bdfb3db7fcc1a3a02da8c3f7406dc067ff424aea4e0b0b99b1cc41c31062ac3cb772aaf7a1a0a1d7f6019dc3d2d23af9486ac5a4a76d9eb0fb43e0ddd7c84412524543f550a07bb803cf5435b192e33eb7620f2ecea4f2c48d2382322fbd7070975d50d69129fbea5bfc3177641683df531270b14b19cf7e6d566de99fa9f6fe8ca019c5eca3e716066e7cae73c5e28324623255a733fc86a5c2e92bb0f59f633bf7e5e8ea7608e30d0f7d056706c7d3333b9c41695943833d514020e8073348ac4afe67120a26fa77c57ca2c643fc768783f59e19f56a1e3beab8efd2487a54e682aa6bedc709024c7ac0ad1be34715282486933f6e3afea9749bc1f3203c30f185321c011678a49415924feb4e71581f049749642c7bcb8ed92fbdd5f84083d53ddea1d95d3c88587e3aafc0eb42e6730d6fe80f97f52ff300bd0cff364ff69a91f523fa051d55a09d00f7212481682c255897c9176fd0dfd18cd5f94431314968c1c9ee77e3b4725a2b4c9760f8855336987e1914b3565a34e6414c88aedbeaac88bc3c1a564cd89d05d8a9086de6ef2778c687f6876a6d1111787f6c8d9c834493236c553ec6d94ed4c3df82a93308e040979b25b4b41e5056a11a56981e1e182a27069262c97d55e135c1377413a7493818de0902db77d9fde4a5b09506c21094f093388bfecd9a7455d88f952ed24aa872d70a388880944e6aa9e14dff78141ba59baf810cd005d54babf3d62d94cbd7cc0f912062406a915bae5188af470c056ea45e0c9d8f7f4b40c2c9fdb8f2b40e4f0c048012bf410ddf3a680ebe37e09b7438aff45610ee1f5ca67ad376f6ed952358cd213f05030b1cd78ea6d5507825dfde0900e15d3c9ac6de6f2010a75eb46f7b52cb921b96d33d0c2b1a9c9bbcebd71fd4fae67e4f01a7f20fac2d0df0b35bfbfd45b208e4ad6861a730ba1f9534838179a80c79119f266bc13e763189d91162355949d4d3e1c65f6ab1d8e4e94a0b8e5ed2fc5868bb6cd0efa0931a126fb63761cdfc884db67e8ddc649df3a27398ceec425e233e9ca0a900982bd074bd7503eb6a752a3975b8746613b253a6f852c88bbfd9e07a8beb7f5cefe65c950b744d3af85cc57e679e9a6e84be0cdf216004a410159904d075d86b6d6ec55fa1db9db63f585e06d155895e806a273335ea0a9dfebb55c4b3653f94d96813b9c6d37bc70612ffb8fe08c99ccf5eab8c7e1a63e051731da27ce33942fc7f4f8ac48470d51732af7c35dde0923941a0d1421696d3d1e4f886721950da9f5980bce1150348385f773abdfc58a686bb0feaca062be045b7ee58de2d0bc5889eae3666aebd8832415ddadf8eb9427d76ffbe5e13aa6e779307000847f26b80f7e1e09b7925fdcd816c45e3bb89cde817783745659ce42d214c6638908e344e0c22a2c79bc310d0c7a96111aa52af8d49823cc92389ac3009c472b62f6689bc847864333f1f2705ba1e17b0849b4f34b226b63075f72d48f2770dc94d03d09007ec0e288bc2ac3203d2500a70ed17a7fa6b8bc38470cf3c846e1dbb12eb73933f8588eca73305204acdf26597cf6eadca5aa4ca787bfad668b08bd2a5a8d88dd14bbac7bcfa9c973618e60a21c9bc0dcaf9e98d79a116dc464540572fc2694668468d03f2a0d75f6fba154135636a90a1524253ad688b17c5362391d7bf8c85aa7fe7e770ac203f9ebb6652fb26defef76d98663f5bc24f8e8a1bcac629ab143ffdb2ba5fa6de006b24c0849c99811f7650d10c55ff214c4949124823872db9d0c8d4c5e616786a7dfc0d204045bbbac405d78e18de11d59d7cef5517627a3d05e937502e8558457d4b346e0eb0f59989949034af7ffbb4322a9a37ca41fa678567c1a25f7be55912191db62f6495826e03e645426a45afb15bfa3663ac1501f94a5c05a07e876ee56fb040cbe9053e1a5cc00bfb28598fc217f99c0b2b33d1089befbf1918a64b9d54d55309c5ab9537a705cc00409d1b0c677eafe947bca15b616119f3d0aab9e3d174391182f14e6aea9fd1793a7b1d385272b92687183799a49c5b562efc805fed75380ca73e335d2f75628f9f5a5bede1bb00e974af5b6b6c87cd69bb0268b8b0c09922bdf90ab87d6fc669f5a19fd41b42cd5b94e9d779c20ab755fe253997223da47a4b8c9c22dd754731c7baaf9508ef67a3722f726aad0d604180cdbaa34cd5a03dd95eb144556f2b0c9a0c53d7b0ab18eb93e7f3e736781156c763b485356ed792f0d711c6f045bb24f8ff55421c5c2658817b2397643312bc5d4defe4e5f18fa2175f834fb3e03fa168fb7c7f53ebda14c351ca233f27ab9acaf5336965471194d65ed087a826ffab73688f365d417c47e1d3b032cf3a241894c148bcbc56a591b53cc018d60042689fae570e4344541863679c6d1d55c460451bf584f20892c13d611ba74556520377359cb00cdea9b0d277577b3061d497646a03691044224bf536a9dffe1175a2806625c4c0f6c537b66aaa0610449ce87a163b151df19b58652132650817f46e44a7bcf16874eed495a85ab3c6e864790e87622d21f9460f168b7de46b52178e4a6127df0a3f6daff999322c59337472a824435c25436b998fdd530230a9252a1afd2f37b1418af169a5f919d10f13fcd157a5482fb7521d587d7c675e03686c3de19ca162618cc26e34762137638b3f0f884f994a3d42c4fad5c0bcfd4a267a3a7736c42787bd498fae72ed92172262ed1d0af87bbd85b6fc4be7a91665a87c9926c549079b63af547bb525ea12218df07f9e0dcc1f611ae649b8d5af3c369be35510d70b86c71b45030770473ed0eaa216d37f444b1f184136fce9d3b717fe9f6ee017392e31b6ebae3076b282769e8a4a71f6eb2a06da947a7b8c87be95cf55d8fdb19b7ce8a8cde5f7e032c65cd430843f1ccaa26085677dfd67d539f6338dfb2f4c39583618730e2656d0f2cbb21d2a0696e89c734443a64a22c4108354d03f3e9019ab612e6693837f93ef0960d8a68e0f4e01893dae5f29645c2b845aa50cf127455bb2142ddad70483a35e07e95e9f2d02b7e898321064d5a672416d95ca11b6c55271ef504de98ca8f714cfd9bc01980ea8d87e571fc11ea9ce01b327e166e89f76e6ea585283c00bd372df2f267bf979baa317a4f509e76e250e57e3b9b862ddb1592acc536b48b320bf607306d7f84cd7908aa1fa03d7fb61ae7f51bacfcf87ea11da34b76acba8c444792ec3db3c8ee6e600d69679975a682a54fa4d73d5a309572019e648f2f3a94953e7c5506e47cfeea0cc3231cf9324cafd65d86b1c3bf573240148cd649bb515152674fd35807af0930a34f526ac7bd5a21ac5804d5698ad0f7745c1c9a8d2f2e87338ac3a40cf330018068b44af57956da27a7a10fdd94c090045ebcb23e726f4577923258fb601107f0ebbd2a39f50848461210c37a09a3926b0141013dcfa60599f2b9d7517a0eac6b64f78913b4f0f48e03cea0cd5ddc870ee04408099b65502128c4afbda59b875650ddd8012da377761955184615ede666783047205a2fad83a0ed528e7749f1582bfaa780e3823984bf2eaa82a65a191835904f20a0678658079e6052639c92d772b868216b3fd33061c5d7f193a3c78ab4de7078f29f6314a9424987ff05e45ab1a1aa41391ead0fadb51111624d5a4452955ba7d549dc2012838ebdbe085e586530ee8eb1b14f88ff66f670a6c959bbbb3f812bacf95a20efdc9062052679670a009568799a3322d375e88db5ba3e773b475172fe20559d7db80ef388e2cdfd1c7b3f5cf53bf073c64c67c7337280fd7f377d1c4d5156dc68a05b009dcfb491191b5cdab908efe2446514cb8484b9c4d3aa44962efef6842d1ff517d84fc5b98c6b7e6049a3b9f4da5a5ff94d835153f4fa486ef79b8d2b27a17d87bcd599dcf2e6049c0b7ec721f496a9dee2d0d0214fb209054bb9b31804bf44fea0137971c9059fdc930ca0003f9492fad90fcec3406c0707afdbe0f130d3fbdb466c1d2e8b6490a054dfcd05f7fe9bcbb492a5a07382b2d488749f3d3879f2bc0441cd59c66d9795e55aa6a9ca1f44cffa0bed4f5590acfa5a065662883bda0f6e573289e69b151bb92fe5723280fe861dde0e26630045f7b923aef7ac740243e90ec545887789a034a1e1e5bdbe496c947ba0dc286c2e3b1a3ef16311dd1bf808cafe03087d75c20c63247ab841b601f2771dc7123eb662f1cac63b54b187aa422e554903375a0f94e635b7de95c4e4bc530d8dbcf28eddd459b5f6f19bc5c929ab639df51fb6d7629d8e138d44e6736691d8768522182a365e191c551666e333c491585aa10cc7fa1bb61430b99b3c65b607381737d2c69c5a98120b9bdb76d4fc773ea065dc4fcfc31630856e63ae4e222248cfbe5f417ae19b8e91b6a3f291d57d8762d895dd5836470ee7fdd0579488b21f3b300e0956659bd863d140e50ec22ce91e63d9ff37e7c0f5d4c251b6bd3c2f21c6077fbcb35921861e7642dc80550dca3fa21933c35a0c9bd876784a4ccf01f71cdf14aa165ec52e0e301a37bb0088b1432dc4099eff92577f64a490a7b3c3058c117d7003d8ef26df895784f3572614c5417aff2f6afabf16277718727cfae3b0391a9ce04a1806fedc5b42edbb7e8b32879e63090e9e3949295040219d021815c06c8f5034c854e8b3b60ffebffa8b178abef3906cf56c8504d0b629a680f92941e3d5b82b888719a9f84aaad7128af0a54d2f7a08b8bf662478c91f0bf02d673820feac80c1142e29826166936f013a71d9551a5420a84912a927663fc81b5c1da46881f71a8282acf502d6775884717ae422e5f1f5cdca59e22f93d48159745cdeb1fcd0fd68b3cec09d6ee5779b122aee07814470864664d4602c4ca44e4c80404961b0d22d3de965af9480449bb90c678160de596869cdc057942ab990412279cd551941569d975497fbba383cc289d11f0921f8fa90ef66846fd12995febddb8c4b7cb35b3f432e14e905dac4bb3dcb3eeea1d7a34854175523e28ce5d1bce624b95db0d1af975274f0f594ea2fa2a66f85f08df91c96536834c14bf6769a3a15232eb2207aee5256a7fc0f038c23033f637084627a20bb3c271fff4e39e047ec1d724fee0dd2be2882ab91b75d69521d0bb44385ed8dbf3f8f311f63b8298ff80ccae280e4cef668f566d56c1fd02396e33e53c9e327cfe0b1b714cd5dd082f7759b028fac4d8ba694c032984fe1f82b8e712db4f7997dce531487e1b77fb138fc652870b0c8ee5fc54a41c26a29304971ef49cd975d3966c7dbd1573181ab5ae5abecca8eebaef32b578b80fb107c7f122b307a5eed9328a46f99847870d1cbd5e197f3b3004e1f1b9a684a8f322d4b03976a419ac50bb26d6248ffe8d7b50a51a8e282b9b13c223a65709572f8d32baac65fc9e76e1362773658200f20d5a4cd64250e0f7909aafc5b2cd852fefe9f9c3aa969d1634ad7766e4fab57e6a419cda607ec20c22717d5ee05a9bb9f10253c56afa7c52f027fdf7ca7f85f83a0d7c6d0e3b39a1725075b90838ff963b84b2fcd0b1a5f3bdada16d3f97d82a27c6d3d9740ead80273e7f1d53ed1b8e7477fdae01427ec145464b126acc16dad7758b64bc7f866fea4483d4e903566844e31c24283571832dfae32c74a5a7d1f2228b570b162c3763696924f10217ee55d1f6a66b13e40320d1510484aaf3d721d3bbfa8c5c07a039b519569370c8e64c48757bf2634107c4d47de2c36463b40c92039464d87f7115307bb1f9d7d019d45180ede6adef58c10a500d595a5d2f5a664b6fbe13fd749ee3787f48be974f93f3ff426f7a56bec07cb0cf6d144a11b3587bd1c093e76f7dd5f606abae854f3136dbc3b450de006930866e271b9322c16e7b0392e2a72b590ede90482e02e35722fab8debaefe86330bb33b0f69e2a29b2334d5d88a370db97196347c676d1adc04569143df13c57843566302dd5f1962c8cf6490b4505ab778ec7d1fe49e2da17a41d7f634cc5ec32de4fce499f3eaee36c487df5f4b470b624060e5fe3de872f001e47b3684bcb449d36b3d163db19dfbd8922cd1743d25dc5672570ac8d5b113fb293b5ae969bc15962074d8b8e802865025f1c187b7b7358313eb90db7ffc44b228bf2846d05b2fc1cf1467e208bc74efb5d695e241000c4ad83c36c231a500ab659f15399b11e6dac9943a459e1c35ebb433c51063c0df3231a15329a55be66b5223a84e3460d945a28cc65002b247f8c3a1d59e8a5a0ccda2b38c8e45815466911567d106d88596ec66929df10f298b46a95de94f3c4371cdfb294c9ca5d91184bcca8ebcd95a42f9aa358bc3936907cfa2b48d0cf7e1c2f5d0d0011539f310bfb246c3b0f3f5de6cd015a604df8512c1368ff65e1d8635cced073839ce20d8a47e730c7da8b6cdb860c9793f53ec20cdcd36b1bd0d9f5eb5a8455e84d2e0ddc579c5e58d783b956ee4a781cd912cb647ef4f5b94489b82428b00d080e8b194b54cb5db6ad2e2d9f2d4563c5a07b547b20530309e7f1954f61dc05ab8502191d66fd95a90594aefd6a85c154f382459aeb79ffd15e1874b32c91a4995d9af59bb4b86ef987be25bace90fb92792d860907ed4fda54073e99b25552993c5c950d6787506ddab37b1c80f07747db8600109b375dec6fc4d9491bb37775cb4ee2bba6efa3cfa77b966ca82d9f3bc09599f7cfe08fcf57592f0b8e307bf3b17ac2ec9a7acfe5951f60f170cdda35d1613a05cc6f4f4ab5cd27273356c7dc96e81eea6baf3c784da6c0f5fe5a8fffb6f2cc83ba6c04263129a8e433acc1f7249fdffb4016524f76189dbe7a5c285f165035b9c15f152b72749c8cb6bad20e01a7eb6841387a34b97ee1950d590c1e99845fef07d1ec2121b6ea65e30962e7d5082c79989c1aedbedf73c2dfdba304e895306db74af0d0e5f87ab8e320da4c49ca89756acb9c432c433b8d176955d8ab8b927af7508900674134ccde87a00304f6e9a6e24b66feacb2213edd8c8a64896e6c60ef6d1f784f9900ebfbc71ed4af94365225a6e2e6e5350d1c5bcaaa6e2b47a565c9281a014408c65b6267bb89f2aa57c25e6376c280d3e770b6ae1dbf391d27d2aa09e363ee976e653cefdee87442343eb30b8c5c2495978219bd4b1f5af9d9efbc99e066f64de051b1e8f1bbde63b50d4c258b7a7a81059aaa819d5536e2a303275f7ad104330467e8d95bc8d716c2795239dbe529a21a009181792b76e06d5813e4196ebf4fc2ef0a4a84d8086243c8edd0e465dafdbcfbf7454867c2fb1f34a7ae2603d0ab03303ec3d4b2194f204344710dc2359cd4d5045673d2c13ca2e00b470759de4fad73adcdb320b1e5413280a4c0c3e1864bd4df3b60341caadca4683726389241aa007eef89e8782d8eddc8f1653187c30741b17c79557b4eb6c7e604ea68948be01fdab2bed3182ef08b45e162d4ce5cf264a1a225fc842e1893ac38bab08b353918e99dbaa936f04d861ffb20745f58f384d834cbf3e254eb4ee35a00d920459c32d238e5327d7c8f147dc707d9e1bff1ea7dbad5003bc81541b2f323acfac5f0b6be0ba83592d99c7e87ce80cafd99d6dfb9bcaaec389080b4428a8beec2bc1fecd49f697c200f5e0c6797f1115bef89a9b4c3b27e80b612eebaa7a06a1f33101c3d7b91cdcd27bb0542abc374a2c8f29095565580bc42b53943d3c9e7ba31ab8e202789f141289db343905fbc7b2df9de85fefbb8933a50db0594712c3abed88aa62cb8b0251aeb5c8fd02bb18d2586d9ab420cf0aea8cb1d2775fd0248e27f57f71185d121068d4951f3911a81b881cb30aaf0eeb4930e47d2fbd6318ca6883e3a5e5a1edcf36ac2af7ff8c0feeed2fa3bbe0f7b4e0400a12db06481ad11db87989c9e5dffe96c0ed1fec86cadd061aff507d25e24028b73611b0fba542c617a3852b85731f07a77e0f768e435651631850c9f61dd95960495c440a328fe005e430812d41b117c4304f342f040b6daca1455df4a21c50a9df2345d05d28fa17de046139c65535bbb6479bd5a73c993c0ca6bfbe29a9bcd86a0f2d0a8f9e72d1d38952376b6bffd27291141e978a82b5cced559f1ee1ec807c686ff54460f8a87727caa2bb65b4bcf7a433664f75b88e6491b633fc557e3688c7954d1600ea203b78410840e312dfa8098059497e894a662c68093c84c07f01b5235e6f1ec5bd82f33be4666498cf263971441015935e3425d17b69e071ae89b990c5d9eb19f5001141a3c65a94efd4ac9cc32ddb655e710689271f090059834d740fc116655b156ac8d2db45b5d645db49531d205dbf8f570588a66edb1480c92398cf2136544558580e0fb679f6fc6e2d8048850af5f19fcd1c9a72805404e555fd4e8beb6512726591ee1d3fe65aadbfb74a89eb964a39465f85c49e8c720a51a9e9c713220f31782af0ea9619034256849daf8e14ebcc07cdd2c564427aa0cd2b0b633c0f8e2e1615b2bf1af36894a854bc5650f678b097e42c05900a61511efd3dd0d48231c0b60eae0b1d2a0d4d2bc4212ed2bf539f6d3edbf59048d893dd9cfb905b3e7c81de523d4f3b1163b4374f568981d41ed10e3a6d25f38242d16f86cf326e78d0e9f5acfb0be34dfe627142d706fcd93d0dd1737a17284b22a26b5723375cd5c171a26b61b1b4345fe0506b2d27923330ae7d567d39ad081a8f576a820fc4d9e0b16b1a0be10c68eab66b14c35be0868c2b686fd11df04d7ce09a4d763c250991219635540a8a50314d17dc34147627b20d093c2024a08fdc4eca8c7a4cfbc9752ada49c4be8c8ec62ced2de9f1b1bb44dbf627e4fe2c43bb326e8408a2c7bdef659dc3f84da1891bce51866f742195b710b5df89fb020d8c33dce0abde073b624a6730495857b394b9fb724f0c546b8b33aebfa9bba051e1bbbc1ece6f38e69041ad1b426f1da2e378317dd33ab88133cd6734aeb0a5953e42828b0ad6eb23ec03f5e17de271eb6a71aa15c68fcc9b334675fb136a806c0450a6d1cb958c97c7d9d83f4662e2d1ac3eabb6836c1f0e1c27316f7249af2ad67ebf7f9b3b9ba6c66baa614650ef1a2b57dcec84501e5e50e8400e45eea076171522e0e42996d56a020314084d05195a25b43453ec49007412185408ca02b268cc87a250f01ca8256578a3e6b7b343db50a80a7c912d98f83d30dd256c24842e0d44304c1f8b937aee51bd6c11784e01314efb68df4a8c4fb200063625a45fe94fef174018722bed0544ad22fad28c7e701f7393371e5efd293c6bb5b6f0aa2d1ceec3d77b5ed5fe52c81f95c43083a5757fffa629278582fb1c7a2e70a7f76becd9d27ca8a026215f32712f1e40c808ba071bfc35e49473b046ce0ae328cc284826afaa30e490f8733a3e695951ce3ac63b451fedd40041e131b3c59ef19cd4a75bc7da94aabae64735f3df16020a9e2293078ba1746d6ff663d8090490ee0392ffc7985450e86d33cc2deac4c001b54794dfb9f15410706863b72fa495343793790b7de075ce0fd1534936f61a4812bdb73a456de1bdd5dfa7bdb40f6d03e3115e2fc5d997b040a861d22e2a8f4238ed70a39877abaa1294a67820a596e1989525813aa02553a2117e654ac28d948a6f67a83daf2089a95ff6631ff78131baa755cc36c4ad0ca6a51f5f176ea393a9bbf2b4af54deb12c6a0dfaec75da88dbc0655d34b7ad6fb0ebbb3c1e7f4fe3f94bb865683934d4fe7b53cc20b1016b7e68eab0cf1994e1735de888ba8500ea0b970f16e2acc159a1ec6e435739743e15194c53603af1f640640dd19600653a53368d55c92012b3b935c3fcfa6fc195325a00d192cc5332baa6b1831b81cb3952a2b9be6643a777a70feb5584d477f54893aea7c12e171b349e7a39c589c18bac53fa9d5487de09fda35ae970f7e5c2ea5ebc4285d0ec146093ae422e78d695a2d2e69f0e5d451f1fb88925595ab9a27a23a04e6b6510b2a15ee458a0ef88ebe8a804101e446afb9fb7fc95a86d52088a8b0107cc5b437a8938b2c9e74e46e2e03bb9bceecdbe34002a2bb6e8b05d699ded351b2313e2e08ac970324c259f3f1c069de21a69cd5cb377ad1594c42a4a16d2e2f52a2f7d692879c31e59f600451ea1172c0ba906da5c28e71e2709472ea7d461322c2e8188e4d211ea9b4ff8994a93cbf73cfc09415cc6604d3a00328ba35a563ec3618dd4325af3238a8406b0324712d048d3230627d8bf3f28398ae5abdd28976a98f0bfa38cdd559242b90e6843824399ef02ad5fc84a508c25aec123e55eb89c1568bfbad036fd6d0c7e185f0190cdca7026bb672d981dc0452cb29e0b7f3ec2674468eadd96875531c4627919d4db3536eda4d0613f138f28631e9ca7f076981f123fb60d828ff5632a8168f4b4f87473e5ee1e1b95be233000798253591c67ad60989ed87173b8012ed9811ac7a1f2e7ae1bb2a5329a370c8367f1861f8ccb82ae2817d6e9ef37ac3fff63f463745ae284a240a6ac24351e4a5e6cc8ca443e4f5952b371623edeb4dc47842a4ecbf6f528162a9858e8a7d5e3b14683dfdf3a5400acf440610f27cb92665424b03561aff6dbd2e2cf5409d3ee25315fd6ba3a41229b5cbc6cbcad50e0c0766c5e2d25738f87fc1e75f2c588a81e9fb53561d8973da25f5dfbe3d9d545da4d798f3fbcd0409ee8c3f3417574cff1f41c72627fb6b0566ead84f137c930385bd4f9c99256b8954b4bbdcc9428b463d10e1438aa20392c1d139e8131cd4e5f23f6f477307755ef764e4c00ac0503d8b8f2a150e2742697ed28bf007221eeb3285825b52192b7120c24046a279a2cc51e729057a323172e51755cfb5397afd8fb81040fe0694aa16f659d7581689dbd63f6679986ad6963dc51fece507ef034f009f5d3f74b8f12329b7dcf53f0d5263c06ada2e783bbbd00772b1613485e5bb84b91cdd0ca02f8d83e0bb429b37194091bc91050368cae403d485f069448b1b6de5e49f75534a9d2b5ede04d30e19b5dce504e5b463acc2e1d0d0594e35deb7e2ac1e4e57d92c9b4ab9ab068e9a380ac66b9d95333647b2caebfb658a5fc4d60c9430b25c3bbbcf07778c0f75e45f8679d8c3df27e985fbe6af6cdcc6cb26c2132783932a80e1808b22e8e630f377721db3dd8939824de75ca38c86a97fedc11eed7fb969b085f8fd41265466d06616d985555c100b86bc554fc32adc85ff1c556d8cecc2d48f7d865db021bf8116bad6d59220558b1ac3f83c7a9206e5461be12f13f3dcf3e6584efded15e5106da63c2bfc9daf0bf0446ef11784d0a5a905eabb7a97611574d17ca945f77d845521320ffb9ac792f087def604c9e1cf0f24979a2ba0f642202f39ea209132e6b575e00af7e1442802d371d4a729e36a62be11538cd64583d2bcac46e6a9a93d74e86fa35838cfd50e724e126a6b7b7f891c806e0700f6df72befe47ff088d917cc30763866810a2fcaa9f38b45953156c860b7303e8b15fe97e5675d47684ebb44ecfd1ea39ae96b4c489cfecb91334f343daebe8541d0a1d44dd57cbbb365204d0f075ea7252ba1f07365e7c5463e4069d165e1d0de2e8f758ba754d9e4dce549392d7efdda31423bdce6dcbf2e92e8ddae7520cdba9015f011657c3e86e678cdddb8062404aafa92c7884415b5019704374511c851a5e3e8819869361432695f7f6f7a964ee909a9e5d2c46563eae9720e6e2b5d5dc067a35ea8927d17412552909c42e1138c1dc59a5ec42ac5cf4eab9648e3f919801fd50b2e8e500a933b5ba3d70570ecf4959a6774d9d2551f3525517db2282f558ad21982c37b689929df4b9828e255d30f7ccfbd6bf89c5b3b53e2753c7709c1274f0c5dc84babc36f61da6823a1c877ea0155b0f11a0623dfdbabb7e942334373904618033d5eb28a67e2bf8c2bcf73c3bc7bc80f932cd981012fbe3f26266d0e4a693a0aecfbe6e975f716d90cd5572b02b49b2e006b1ccd88e100a4af6dae35c1e83c55c70dc12af089f690b174826e789272c2fe5b4e23b75227b02a8377b8bb45a76a57fee1bd8c0de729b617962c72981764c977ee1231158bf843e259d58b0403cf1c69b92f9d05612a875902d3a527d19a1e4b8d177a8db5d36804e53ab595c9ea80b8c7efa802ed09a193490284d439c94940aba1f83d3dd823857a46cf8d724321768e7c2188f34da160d917763fc878f6e1ba502ea67c8cf2ceb9983d5d856f8b2d8d63be0a0c7ce34c43b10d9d063f93b94990a24bfa48425b038d93888bd60a384514c208a10df3a0193dbfae6b63ac31c9f1e7b04fc0beb4e8b54690fe0d3b41363dd1f749875f26ba3c00d670bbace5cbe26355e55cb466e9addaf9447baab2e11d72687e5f922ab72a8597ae7e024fcfe0b9bf4392cfeb86b5d543f7b7b517c65207dea81d1936908792748d4168ca367b3f5ef2f96dad309ba9e3903806ea666a16cc6f4670d4c6e1dbff959c4d0f902078b76c071a46879ded6aa672fca531c423b43c42258fcab7a69b4ff50b6a8d6efa4b27225221ec4af43ba30f22c2c90ec31887b693b22c77a6da14c230755eb548acbd01a1d9ef3172f8fe5305ed8c98597bea0a67f66cb0412e9caa58aaa4a1c83e85fb95c8f0efde0540e502600cff6b50cbc40ec6fbeffa2b4013e094ffa31d831a968a99a1b489f2f34bc4d4cab28d39b569f4ae6a855632978574aec0379d1cf3590ca6724e2b448dedb9b6364023993f62b617291ed9e71b75617286edeb5ea8b9a889d30b267c89415d7ee026b2f1b254cf9bc82af9ab346a536ab4247cea934ecabe448a000d7ded2cb948e4dfc5b696ad96b8283a118aeaa6f1e879b6235b7f0fbe67394c69c457a3dfe0f8fe97c4dedca289a51f9c876cf8c2946c4bab69c0d4048b97602405075f6d48d193ea6563d949bd101ebea267b537386a91e536caa41b5222efdea882cbebd11d343000ec2ff6b2f7bbfa746158ea54f32d534ae31c7d3b7a5fcc373055c61a1a53fb3fce4d341bca7bd265f070366a9472982ea099a4a7fc14af39b699a6948777ce6a80cd7c4816e2d90f8b87b5f9dd06065a89a82c3826b2ea188c13e7d0b3140c29ba0d49d85b6560c9a90bd3832b5c304714c47e6c98ceff6c0731144f4bbd46f5c0a9273d06981c3ccf7939871de9a88cc87b05a5b0ad619cde9db670afd801473b0d9ef6b6df6dc1655c32760342d1842b386c841cf2b323789648d55df8bda69fc71b95dacfd800012168e0a9dc3dd5a3891d781c1366b84bd735fde4a3fe8c5542178ae0cded7139654757402a6ff9c7e993025ca3eea3eecd285ac24e2670f22b2d46777e008d64a4583a84c1ca590ee667a34d18dd7ec7d47a6c757bd7ed0cded778fd44c3cd294b061ad616ef7bfeebf5eb7bd695b17da9b6a38c918568ebd97062e0b6a9a8ddd5fb78b2be41eb0e76e84b5781b9e466a967b06643b16d45a7b2c4d03824b918e182c4a91c542eb42399336e9eac70195ff7e390e6de7270c608ff2a6dc76660da468f37a5b8af965e93443f820fed1c3a01edab1f7f1113b0dd728dbc04492c4cb148ed0ec1f61ba460ee28d046d3c5c3f01f034215b194f4badf48a75dd9f1954d8217ac129aba717ca1e90dd39ccc8a5cf837f334ec8b0e2b9609b44681576095bb66022cf6096260ffce9f48d09709a319c7a75f1a4c69aa273f7750d7a42b046546a563907ee39868681918f7abae5ce410d2f6d37fa3b10358450f658e512400480a790281719d6c33efb67a70f50507d20a8e909b28cadaf2b1c4836c7f7f2cd8a5bfc4b798ea8bb097c3e18d8a15c559b298ea057561ee8d5232e9d502703b770bba4f97c5fa477cb5a3c567ba19dd366fa838652610ee868abce14e8691cca1a0fb1b9885671fe6ade88e86218b8fe6963f143097523b8cefd5023f786e50f709f4a140539b858d0504b56f3ce58de8dac005de65a055fed61dd52e547058d5bb298915bd1208ee3f8ac29988a237cb81cd75e50d75de5af1e9d2a1a71254cc192c3b8f2e652a78d1dd4e8b816c1dfd3fc9fceafb6d353fa7eb732fecfec558c85f2113240f5abb409ea1bba38db0fc7947f336abd0eb0b8c753f2f92803afa2d44d2584a6b2a34202174a08b919157a2ca017ebb5b704d0429bf374431162edc7fd7b4ee131961e5183fe096022f8d60c2a +Output = ebca6bf09bc37c69302c0c2de5a6c37d8d2a27a932d7d54b802b68e0197e103f + +Len = 108496 +Msg = d09160adcdc38e17f45fc39b3a59b46e0f3072ab3273e1f7c9846b61b19cf58b130f120f38d2771c9e3ab0604b06112b61a0eed1f3a00f5017925e323cf9e3b5be94f22ab8dfa39b1add83b0fb1589d330da4c931dd07246cbac6cf33b3b616ffaa667c5f6f4f9db90d0a653f28d06b0a367f2ba580cf4230e5bfd6a556b5600efcfd9aa99186126299c7f11d9766f08e3ce4a0e4e5b7c2d072579603390acb1c496b09f4a54c3c20cc878b258d9ac241797ba56a4c5f3aedf95489e7db24acaa283556db1af07f863dcf7fd16bda44c684bac5c05523fecbd30d2e9dad91893b01f2edc75311610536166bbbc2a41c8fe7187e6170b4930ca80800cf20efe5317f1a4b33fe2d65206de2cb4f1286adf0091b3bd82f7f9c12d0cb8cd6e58e454fe8220bcb6cb3006a4dbb1b05ec007da963498a9ef1e38e90f5ce3f6f6c0b2dc8e5808bd83f30c7354e05d77abf90101eae19e710689ecee98f96a4d314d5034eefdc57f4d6253e23f7698d07fdc3e9c21202ddf6e3ffe19ef6ab39bc807a6a448f9c0cabd21eb9b8d24ca85826fa7f36679adb9d04857b23d3728a762f69d73c1d260657b37bee665735b5c5dbc244edf7586c8d3addd01a9e9303ba8231beb83120c1a2eacb30befeab31eb8cb9ef4b49b20d420757a4d5c07321d42950952b6402eaf7e89b15155113a933aa2fb2e0e73e3a55ea815e07e199816d75450f181e52ded15d5a202bc7059828c4b254415863802364f960036a7c9ee0f69d6100d88719c98986d644e9076b456ce027ef05b85b45071e4f6ac3a2d6d94db85f782b16284b2dafac033f8fbf23f317c23c87b33845316e90a09592c5b0bb244ed07e9686c09a4315d93304e02ef7e7a7dc46cab37e8468c83758d2e7f1ff7fa3bc4b6eb1e45fdfa8595c1d9ac0fbde3d20db85498b60ab5ab175d9ba276b1912ae2a353600fee3d7e613202ba47f4a16bcae6956e66694cc81851db8cb8e8f000893508fb0f7ee291200b33f23e2d9b90247fd8809f6c3a239ff156058ea4ff05e0f672b7ecb5d106fad5d31e9d6fb989430a84970a1a6504d5c675d5a0eea683106df95b4e9bf22516164a040bc3e39d4e0f017b4e7bb6b2e2579ec395cdcdc0402206b1df392d359d59ff6d312f01156d17b6f414971577ed2c3a99154a5c05999eff7f44966b80b6235c20b6befb39caa90dca04776b991eceb21dca6c3b9a43684e8e28ba924c8afec8e74475b9518a4d6dc4c5229e619ec46c18593b53c7650859a631ae8ce24171ab88805e24a5d88b3eac00a098179596d2516dbf8ad428078a8e07793f8a02056ecc1480227ddaece9485cfa3f032bcd4b92ac01c908b3ec48105323958cf540777ba8e39c20b8f7d46182377d6d86f03ea1be08f9ad2f3ffaf2bdb5752f43ad2f5de3907bd79b3568be195f399cd18715474cdc0009c3890afdec36c6bc14d1fe396e8ea5eaab2c0d29ca7b5bd9321b374cfe86c8649850dff989ae727b8f364dd9f0e504a10f662c683d91ca6cd1330c787b0d3708d51fe1ae3b2660b4dd638203129e7f43f06b2b4419ac709dd757fc936c79373ca37b78e4aba478af25e007807cc0fd1a75c1748507d134b46c0f6f6478d3af472aee0c628133a2b390364218d553686cc7f26df3ae0afef8b7e4cdb44822867291ff05f164d8c60a46ec9d92c660a7820d868055b75eb6b2e15d7e4b836ea6050137cb59fc9dccfa6e8a7eb8f6eda2a470031475c9d6452a1103eaf1d2bff648a11cc662f2899ccc31984f500e05411a18f390198d7891a8705c7a6edd1e5e829a385fd3eea41fc8b69f7723b5ad6c2b2cdd5e0aaa4e837426f294894b92c6fd1313fc7697f73b3526275ef994ef0b20d44ae510c96003d55a4da20bc52416ff353307119689d95da8b66c9a52d206413ac18df292b4fa1535f30abdf2db36d12722e66d9263e28665d609cd985e45d683cabe7aac544e7ade6e36647bbf0fbb12680352348b3cf9840e9d5b0e9cb027daede06ec048e94d7d468ccb07d887041e8bc488240bd1fe2ee6900d5b93307c65b35b977596b1d53c0176b93f2f87f6721593d609eb87dc8be74aa9284cab1c4ca398bd7448905c41295af5cacbf8d7378ed7058c3148ddc29834f71ccd0a50b846fda865666d28b445a24852b4c0f0947cf7dd54e7fb47fc82b4c1e0203660d122f31feef62f82bedeb57a7cf3c989b2695d260a148863602b33cd1b4d1694bec1e3ecba02c0b2877bfb53f28ff9eab9dc70a855c1d679171d1ae4765a9133a8ab33d56f91070036a4dc9b5c903a5ad05e982bdef5cfd148e0cfce99519187b6664da3b6acecb4f3e2c01961ff73231f763d764cb85ab21cfabc532b39fdd6117c971e365a5715e8bb0f96aae38c8bcfacc75248125f66bbf5473bd51bbc69e0757b0d98a3306c3ab931dadf446cdb08889f877a0cc7334c59da4d3efeb8884cd75f39838f5f0114648fada72afd5af1932bdd89ad7862f7acdc520eead87b7d2cad6ba027cd1c9c438fd7aa9e2652b354d41c1efe5b3ae678b513efe804899afbcc6997726005fade9a1f91a7cf097553020be00558053e44cc5587fe24fbcbcd24fb0f78010357bd194e044ee0c860191e7378cc58092a998be37e3721193a291debb0429960db69722caa9a42d79c2d8e1c8d5b4190d0fe59847d98e12b0c971f0023d70e62ad690f812c93db7e5017bccec8b8fde058fb9eff2c2b4d796c9f920110404a52f645561531419405a5600e51d1ed7241eb18c31d32f74d4b80cadeb71e833378dd86b1b062ad56b3c28fee6c4f028afdb1de2ea63804cae8709f6beaf6aab31b8bb3871967de07d2cf2cc3e9eafd2b5bd1d44862e55baa9965a7a26140bcb18427543f19e7dc90a8f6c0f58e4be83fa273837918e203d7a68768e9e6a3c214fcdaf143788bb0da7e5dd2ec241acaad1bc1712a92d6043757fd6ca93fc7c3c6c9cc13fafefa61cc9b2cea0f72feac5d0ee028c1966a67b4f3f03b4b3555c7ae332441cc72dcf74d498c90c842a09537c2fb30a8ed463335c4875b3590f5d7b4840b04219edb7b47cea54d7f5aa88d2381380f455f1170a110eb56d1184ef9c002a8e361489df4a1739ea89a83bd9d0991bf4f02b37326e22043b486950937baf72466f439ca6a43809f2a828587cbd13bb97746b3165edf3cb8fbbbcecd998aa9a61543390be5153dd2599f28b02163c74e1078259f2080ac72b5da8c432619615779b410086efef15dc05934dda7a77da5a102d2b972adb798694a9713e64d665e19b085680ce9e668e41970b86486a5e7b24b820a5e4ea652a073b7e4e10f02e47da061d3c8bb621c4f45a5e960e6863bccbbfc3aeb4bc1cae1bdb45e20487b112eea6cf3a95daea088479b18a3b169ca76ba0af2218c5025b490552aaade1a0cb3f86e6db7b7121d17851aec36cd96bc38b072da09fa9b8ea15463f087bb27fe94302fecfab1d5bb8569ea0d202455389a05fd99aa7bea2b3171a757c0c5ea0e5afc76167b3441a15859d224699cee66252173d80df88424eb4fe6085ce6aa658cc30d9341269cf81bbf9cd91a1fa86f606d9c3e385ab2a25856ebab6305b12ab2ecba0c54712fe753020ed33994cd7bd34f40743587bccdfeef7de7de09458655e14629bdfb42978a8af1bbd1e2a3b1073026210c69eacc67806364d4dcafa1fc09799183ae1d3047bf0c38e7f3733a837917eec3e783c81b7366cb4d6537a22fcc1aedae7007d9130929f385ae843ecf90db8264e8d1e8a02e4ec4518c24b27692f3e4472b4aba75d00e93b2fb20e474df3a87f6561a55801be3f6e939c0f85ac3ca1f54c62cfcf57c84c177c28d54f9ccfca28218a73643a0ec0a1c54519d62c76845e029f6c71b755325dbeb14b7e6c1e87d0f16c0b46f2733a7f3c520c8170795fff03cef4270234366e65ffd35c425c7c0a538adf78e177e76747475a2ffe918f58ee761967bef1c2da00490f51a6061134c66b52627d8961fa94a9853a4d6bbcec11292eac43fa52112c3152070da7e1c0d882169c3d243499a2dd0028e37443392a5cb67d47ca7eb4385d3dd4ffae686ef8639eae96d4c9c4e0666d743727ccb07885435320feb323b3013553d2a60f7fb4845ce21117bc2cdbea2fb4df12b3f2ba3757b665e369f03ad1dafc4d2b61738b68d40f42696601f3bcc96341a193603de7662f9d353daa2e539146c58ae90aeb95966e81466214d672ccf7e570d5999229e1172d5088a20bfafacbc2511076537f0688743b3aa5d290acfb50fd150f45537b059cb1f578622c69e3ca1a62766199b6f591b45a65a68adbe60a92bc21c618769371f5eebdbf8c71374343795b848a2a3e505e3bb490e5ec3088fe4571a2cd76293388eeb2728fa32ed478afc63ab4d2bb3675791340265063428c4b8f5a06ec3f57e7702729aa7242e4069027029e32f4baa67d1222c0ab06cdc928db5a496b5e559e0d6c5361610bf899a4fe6acaed93637dc231c7495e93913187d631f9560ec31920f27e48f1f2988e58ccd1bf44ffb757d2e29c24dd821351c3105fbb4eb916e5656a18c5979f3a714612d5dfeb922cb149b51fe7ba6aeaa6751a61f3b7e5d78f2533a16bd45a54ded750f5c144033a367119c10677a68dbc1844b737243d7b82eadfa6a03acc8e13a717aff7e0cb764403913e0597dd62ef172fedfa05f8794d40ce97073d5e3cdc1fc772e8344367565bbbd5799d7800cc1c4c64b0ffdf575aa1a101154e87e784bbf0dd16c1036409e3ea35b6eafeedef722ac9f0543aac47a7c7633f00f214a9f6244d18199412cb56acbd5222da90a5c33b6c3cb592de70add23bf8d7055ab878c24140a07dea170e93faefb7b38fab8a0ee9fa968064822e3209e7433a103c9e5b6834f829607996007cc42be2314d3105c1ce698be4d8c3674b6ed818eba2e1601069831efc7f67a29193e21f3c2742c0720cc10dc600f7f27f13f82a3387ec70d862c3c734750ddaf7c39c92f6b659cf794a1f9e8e872664236b45d68e6819fe3e954ccaaf06e31a0dc79e15f766c073461ae7a6a4d7e92cc6c923b652afe478a1958091b2a1a1f0523478f0b4d5216c76d3bbcebf6fbaccd7d2243236dbf670afc801a4e5e1a4ee538ebfbbc57de70b7a290e7f34db15b4e50ac9e29188aa66c7c1327cbf237684803ad4ff9fcdabd0ce7f42208b9674855cd7873ff9128acb7805b5a1b503912376cd5b04ba40ca7ce23b195b4a2e71beddccdeb2e426122f3ef9ed9c5dee8f6b85baa4839b73ed406400d697e70f77b1b65f52e3d91fcb029b325cc51060cbcd6b8753f4b9d36ecbc2551c6ee8c6010e9503663b4e8c3fd60b3385c472f6c0c966b7ebd09bfbd98f6bac4d38d5ce9835e85d9b21cae7cb2a0d71fb030c0d18c025c0de9fc839a80bee7b0b9e2495c7c82ed2544fb4bf076f10721f2942303e721746aebab52974b1b945b9f76bc80a25e6e6441dc27e7f25c2b8747f9bfcac3fb99ddec9e957aa116a90eaecf1b1c9ef9f1dcd144aa29cee82b9ad9e9fceec999b4ad145eb20c2cb50e110e77cff9175c5fd71abd3c7db19eef9fd0eb4236a002ae238a7213159102acace6f641dfb68d9e9b47ce45ac438460e15488f96bf03e6d8777621e5d7b0569275ed2d895239698707e002d7f2da564a78b4689556356db2102b73dab90c52ec9a095fbe5057e33a0e7d95cbb1706e438a0b05bbc9f51df3854f8d7c8784ae4dcd1c61495054e5972ace33a2ba8b1c9ddb94bd5684c37601594ad537ddc9c71a61cee8a6eca0df12df2a6309689adf9deffa1602113114801eb5f1b9064c4bf70a794c538fdc3e31ae4a9a4c362025e83993965ae9ce67e42819596c9b7c9b4819a402dbb45791781a774ff7bdab9df14af9b4ad88ebeea207dd72cf27eb33a231e7b2abe4b3674aa668faa8699d863d86b50796791a174e507ad45d1608a389c5bcb240bb602e4dc47830bac486ad418f3df58234f9804d749a049300657953578bb83682fe54f6072d68cb58f74191c6fd051d36daa82406837a0d517223b369dd0af9e5ee89b7f1013946815001a2c08acca4196e0d6668ffbb3883cf111e7f4941075ea12b17e49bf8a8e8315bf90e5f92d337040e892e472e8131dceff8fa28e0eb47c6c79a84464d8ef80bcf08f3042e172a3d5a00b8f26a83d61c0ed78d2461225bbfcdb442a89e553b5fc95720e0c4ec6d8a4e71bb99f5ccdb1d0c3e8aa45828e50ccc09922b71982c9dd9682a9e1dcf6b7b7a3088a636a8cb40469285212c8b8e2e40ef05575dc436567db042948f3cce715be1b29fc3c421366c880f3354a6b1a4aaf91eb4b966031a34c43b6cafb0e11c61e9cbff238b675fec637b537726ea00889c40bc1af9fd498d28676ee5c85dcd3add373cbc8b283d24c97bf9fa78b1b2686d1dd608fc9f74e5314943c7ef9f14351076e1153fce5ed43e63af5508833aa8dff8aaf9fa641ceb836363cca32f71ef482d74b415d4254916d4dc2d72e919e85983a3745fd5b1fea348577a6f7976c7d8ad702f99d42112074218ca345dd0958e2147eea97ec49d056a8747b117936d46896bde5848e2ad643ddde1c95bef4ed26410ef73d9d5551e4c7bbb2494484e1643b046cdaceaa9d21aa3daae5dd662cabe96fd2b5164a57250cd5b165a05c8cc5ef5ff666a9965c58b033b5ffe267fdbb3227e5c7fe30c9629d49e22d37c8bdd5d957ebf1c8f8fb2e1647a5a974ff489c47c0973dfe108ee3a29fac6baecf5cda2273b443d3d761ec0502e2ac3b37f5974ec24fdebdf190f0446076e5b079511df13cb724713c78d9a4ead4d0e116ecf470b37771e4dbb6d1aa13aa64e3cf84e66f395d5c4a2e273f1c89e4dc0ba516fbd41d76bf1ad6e8cdfe40afb0efd8dd7dc3f20eb207b556649467789a63eb59f4a387b49008eb0e2d656fed917d9d452917ef33f050d9ed91350afad091f09e26047a99ab5521113a0929cccf3524a23390b932dccca3d50e27fcd0473dbcceda207d8ddaaa81d73912f5b431be77dee358d7753f241af42391c564c70e58cf581e18f8e3af114975a85c0d81c19edf8197d162e0004733189beb1c18accb8be827d3428f0bdb4f35f1e53f85e59f8f557430638906307a346ff86201c01de8d26337d3a667e7d2c01818b206d384d4a7187adf00e1dfb2c132749d4bf256d05df9cb13f06a3bb85f437dcecb325598beab3a3e0e375cc1050fe534bee97f2ad212176b35bde1eb5a9b9dfc9eab18c2e354f5e77bb1ad91492cd591224ea0de79d5a4413c07e151f947ffa245e6d73a5e3b35440ff6dc09d4b1cb1b3fc8bfd39a6bf9fecef141d4846f2b2a898a99e8778981bc92aff110f0c7503add00e6f37dfb9f0bb3230b5b423daafa323f67b4766662b7cb83f290e396eb56c39d1c256aae1cceb34447cd7cd7037c08af4886a2f95f9d831be970f64524d7ba486a51a8acfab195fcfb147a65be16d3804446446b00d7821edd9871fc83268aa9d65f801cc01b23f53117841064325a5a63dca4e3cdcb9035d7ef9ce591a9fb676b383a26f77423d4f0bee2ff7c3766e6ae300a8a4fe27508de5fbe25d5c9d42b2ec21ef426235e4441f1db5c8e8dbfcb2c2abe880d84f83efad021e7d7eedf9c29e673abd5929ceb2a98b84c229c2db2e5b307048f1ae37f33280b512081e263638d83768d28a571b69bc2f9c1cb7843e2b12f265e0afc759250c58b37e8a627e49d947bd44d407feae23e8bf28467252a0e7c1801be0cc61e3097bea48df391b500efe2356937bdd056772a3e2fc301c5b037ff009cda1ae0b0c812f0d69149dd9cdcd435e450d26fddb4fc2c32547ebc81a706e40e301adeb9a2aea22d47f6645ba2795e275467cf603c2c44f6e24516671652347bd46d22316bbb42f9de4053238bf837980a23f9c858e00ee335fddb4cca0e784b8fbcb4026c6059a21fd1b1dedd7948a03caff4fb50411362144f14170c6039e529af9a12edc66e90cf4e8673e1261aa8b0b2c8e36c76dad949e3c8b02470fdb36aedde4b3614092ab962dacadf2534162fd57e67f4a7ebb19a60ffff5a674f1c1a1f88938e73b2daa4b3b6cb1f9e1e5381c01d6e2ffecf53d06fc1ebf66db48800ec9ed43f0bf20857e9215ee8ba61c86e1aade266a00d25b3b7175e3fa9b65fe5fd2af58f03501a9bad246b84a084dcbe8b37aae1b82d910ae108407e44dc0a91f933dec784557938a7c6da397a0ff638bdc1aee86cb8fe9f949d77fc66aeefcc89c2772eb5878df67e0f93506d8b80a65556d6c3e435d43879ddecfe35b5775e55dea80ebf71be9dda077e10a37fe1cefefb0ab9492c7a9e37d087cfdc780a0e048f59adc99875f465b784c3447381785eba3213c3255a99777e31b6818011a53fdd7255fc8618c4c4268baf77efc86e1d9a361a79a9dbf0e1f0d0fa4d53f2ecadd1db4c80c211d5a25c7c1e657c1e77e4a4fe13943f656d1c2d4de4677b17a8f7727cda7cd4c6efa562405636a1eb5a5bde72493b7060d6d13d91bcf780e6a4c4c93d491845a1da753fbda011e797e029527b0397c334f4a72983ca27e8c9a7bddc07df7e9b085dbbfbdd431ed58ad1f608ff88d0c04a8f47f80a551d3d27788ab5c0e6d36165421f9f878987f32cf56c06e7210def086f58b210a7010668e0d25c52a4421c1f4f4832a3b871c9e61331561c1676d9d75b83607c06fcccf3a73dd7a362f0569e4ddfbc181906e01ef5ed0085af3505201c700836bb3616329575309d6708964a038b46d0f46ebf3d61490a09346ffb497ac6b5250dd66c8c711f6f27fdb0658b3bf5d6b291d1eeac20ec7e92ec4f44bc3d2e6c334604566905e69a286a104ac9bbc577a63756f6d2fa80630720fa67df2d4f3747adea5d31176fbb8af752cd6c4ca22e942f255e16b6aac24f189bec1c12d21d4989ad084d7065d934ec9b76dcb6340564c267aee21e14a2541c585cdab35e27222378e023d86efd0e9116ce81c12403fe35446f9df8660bfd74593e80d99c5bb8c3716c1c17322e002de85cc4351a304bd3e328ae0d47063267c71a784c33c3f4b0c034a0f45b74f20a3ca80bd9bd9531e36d617f256099db3eca7929d4cc67be348ec018388ed7cc6e383bbf76b63999ac09a2770859cfe14289e1fb390f4dff950399eaab756076a2049c49d4ac256c77e074fe7dd9ad2ab82ddd5642a37f9d1c46468015b816d8eec9530fbb485f908c1a5e7c4d883d9febddf2a2b931058211804f413eff02db99afe97bf332f1ef33dee9594010862822c2aa476460e594bcd83d94eef12a65eddde5f44311e270b4549bfe1e1690aea4048cad0bd929bd647796e3ec36985f307ccfe1758e3bfa56a5ffd1af456417baca203d7844d9e45384e595017754b2abb330ac4f50037763f99a3bbb42094dac3cef5d7248fbf1cf28af12f55c6444a6ab8fbc9a0042ce2177f6a509b88736c2848076c08d99cb218b7ec1908cd2ff698b74791d4501e7d9489a75624de7bc44c75bf12bbcba5c91d4d90c99b0a6ca3b7c674ba2c847aad2930e158ea930c6793009347b7d678b662c495ada6fe68c66a6f19aef301cff5681dbeb55756a3baae411a97877a740eaba551419729c2f303099cece2688ceab3a88617f599d051f0efbb7e953826363a785a01f60cf9ae243e84f045294ff1ae59dddd3fcd20b20d450c598b800dd1a1a6167b4e288b5c30665865c5b477aebaba2c91a071135f55e973d4b4f2a94573c72d19fa0ce681da298d99deaaa2766b3208c1c21606be5d55886cbc0077162343f47aa41a99b363e09b18ea6c3eed3269f8ea1f3c99539611c08e0b29f5c822b502f9b6e213658034177f9389cb8792ba5377125539b3a29692b51cdfb3e00492ef23bce3f21c919c791a4473d6ba1ebbcef535e06652d56ca57e8ba22fd24b560f9520a0a45d1a72369577cacf1938d6b1e1146ebdc5d0fc4f46b211c8336986eaba8c98b88bad5de65dc7ff330973a3b2c718609e6117de16aa3a9f2b67e19e16f04b4c8d3cacd7feffaf71a12f51ab2813cc6696c90c8a82158fbab80446140af3072cb0f4bb48e6e788c277ef4545a8539ad11572317a18252bf4fc8cf9713d2f2ac9c2283b5934a1fe7245bdd11bba132e40b8d129255f3589ce77668e4e340130a41f6bbf517eab7b01893f8785b3bed135ff8a5634bdd343a7a71577036605b33c4713a9fa2b8088e0c0d8db2c4bd34e1137f24af0ba9ac4210a3e462979c91d02c7d4ad9ba1bd92a07b1e4e67e8dcdf63109d6a11ebd895cb1f357e38b5b7f88820131cbe97bf32c1167453d0f1580fbc080045e0b83922f6649f71a9c06eb04cde4389fb6411f3b3217f7df01bb1798c9cbf6115a619164368d0d3051039eec1510a77aa9d323ff73a943f3dce9587453d2f4e094c14ca22aa7e14c32bb60e7636cc6864b9ac722db0571a126060d38667d46f3400a8d924980bb97c896f89dbee0dceb23fed5497314c913697afc8b0ab43373e6a41adc9bfee3399afd30b72e5433d1ba68131e42bc926e2cacee16485f04880ff7bb27280aa0593156ceddbbb0115f963e4b4950e616ddf806aa8127660259426b3a1bf98d3c1f130a9bb66edcbfbd41e94372a57b9b8654effa73b0b1720f07685e61156dfdb4ca825feb4ec1851443d2c4404a616a91c8cfa494ea289fd1e656eea184942c40de25e2236345aa8c2260955b4682cb27dc0f718dddb4d0c8689db3824fe810ead55aeb07b651784c68fa806ca1c4057019152906913b4c1c14a575ad7d53f3db398b443f4ece357d9c0a4b1b63116293064a94a60fa65cf472d6fbca16bc1b3b911fb37234a22a4647f7bf0f955028b82c1679165ede48780b990f80230ad131667e01486eb79fd0f029a4f13f69a00911e2a2fe86ca58d266547777aa275de53f10f66b06f3dc421f08c268674312ab3f14d5049051d4270c71fc58b6fa0780a43c5980034028c55dfce01d17c8c6c93e16dbd3835d03a2835666cb4c6b172a1d6df4326e85cd81306dc8b756df0389944e7c1167d52e68556d7d777662d40a33088d264eaa119d23c340df2d701313cb267f6744a09da4091c09053bc788496d76ed07ab963d42bb66113da2643c906b04ae7c23a8987c28cdd11ca482790e541fdc7b8e33989782be0378c0a1c728fa52cff90bd4671839e79e65b77cef826e6b212afe686cc5ff34dd398c10fc020277ab85050c51a1c4d238887e9b34cd46c386be031dfff3ba2e6927109922470adb0ac918389f3f52f5672c01c88f16618dd1dca53a9b4a3c156deb5325821e9be6b46c4c419a196abaf3f947ec47854932cb2eeda886f20c52b22c5d9a65b03c007017a90d87589488a39958eda544851b3c5ce24d0812b24b009337e21125759107723885b12358c840b13cb5f1789dafec0e8c126bd2b76a1ec8e8e3cfa4ce01422400915fa33fe092ecfb2a734c1955a2ebf4dff55ba216d6727887e655d0b8e7d6091ad800d03961ef9e3672e68277289b219df0d5fbb6ee39f0b4a061021fbe2f5c066561943b75652dc0386e607c44c71b32a2684bb42fc7575443f0ec9c91d8003f4eee114e96f4aeaf0b0d39ccbf17eb88543a187761c1b54e182917982678fdabdbd1d1db8b442bed34ea97cf603298864d76ed674cd2128a67350a7c46b85c34542f5c481dfeab61fa2f01edf1c12a13d7424fecb7a077f0783c4daeb94024c1003338ff14ca37f3a701008e386baa1938c6c86e6cd3eb689265699847b75d392802ef66384fd68b828a1b1affd91f7fb92cdf55311477dafed8e5a0b8c6108614c709e750369011d2f2daf90cb2912da2991d09cf0b222e05be4930d314448f0ca80ce926266d6de061c593279f090a3b3708f20e5ff44ced3f1eaf614a013c58cd82d480c87688f4fe65501a488d00cb2e2a79b5b8f51cfe82eb852a0f4f753f5ff20f27c4b24855f14199ac5428f69ca60b048ec02e8782b03819f60c37220a86e504e3c12a964d63e1d4a46cdfd5f4c631fd5f1ca673bff08ed58de8c02b0269e21a7b67e45b227cce6bcb37bc831cb626caf17765cafe6b7320b74cf3786c3171b9b960ea7d1d638fc4e95ec6e95c9f72d50c777472874872623be0d6f293051a49635144e68641ac49c68805effba99b8477c4da55a2b01004e24b747fbe0e663242e5f87ca53dae60295e827e43fb2b41fc079f5997cbd76c7436d2083474dcdd1ec21029c1801c73db87447c7abeaa7361e8cc68adc04e03b948fa763e5e05b0bf9093d324317ee9a5ac53d3e9199e816f0e68692eb8fd31782af3af24f46714ecf88a6414795d2a4d75b869d83591d5ee227b4360da6d5f7b83c59d2e608c726fa1fcc3da803f9e9b897a288f390ad6a6cb0ee08c4f25f388fc7927a4c7fc300e35f1d8be6dafad5991a1f6554e92ec5fb22727f93ead57683d1534cd543db89259728b076832bf4d3436bd749cb07fe07fd100f1d08ef1e3eda4aef22cd970c2b785c4ff9b523c401b4064324aecf7f2d91153ba2d4f2bc0b42b7c5b7a58c268f7356bec2c968cfbeec7d3d881cebd5d68f1089d7c786cc93cb486506440154ac18768174386174354d4f2ad68df37e9d57808e2e6921bc42a46b419121bd032bb85a3c809ab45e3f56da9fb28a6ce5dc8ae39d19224a27a29eaeefdad705de690360547a58c7fa17a9de008e8abea83e89c84b2a8b668b3dfa71c455dc8232ee6a274db40b22b478b697f1ed177f421de49d1cc52d0d536f485263a49aa8ad466d2d9cd02a3b39bcfdb6e830b91520051be0968b6fb51cd118cf4219a9efa9eb7cd1d6512e97d66effa957fbd816ee8ea0112cefcbe443edec56e45772cdb56819b26eb990cf36f92cedc5c0fd0afa1511cd6464da2165202377ded09dd95c26e45dea7be927b8061602c602a057cf22d163c18d12e2fd126ea0760783890ab24d22ce1aa057f5f04b76bd536a83fa427f82b8bafeaf883f1e7f5e7ebc635d84b4af7e084ec66d522db83015a425f7fe6c98de8105ed7300c3530ca8a0dea138cb629ed75d098aa63d55a2dbf5a444b139149771b13359f1edc9f517e9718228f1da950a5387da671acdaa08d7856d055594780f9907b99d0e529c4efec28cefb875f513bac7d91f168eaa4eb24fdd655286f4bd15d0fe6ca57b86a049280df78fc333860b400328e12717f01e7a124ba06a920cc035b4eb33a338ce6138a1db0850d4c3bd96e52eeb1597af848aa832dfbdd461209c59933978172bdf7ad504829d5d6f5a22fb9b94d89ddf8d080bb5610f306caf7b78ef4758c64b0c4503febf1731eb598ab2f98efe9f028058b94dc4cd3a81c5698f69bdc3baae704ddb33fe3cf6ca4414a7c329d61fbb17133d668b8657431acd099d3d4768b8b3ebb74ec0ad208ea2875673161d945bb9ce148a15a92b13184c73f42662550c4fb524a9b6b6239aed292ba3a4339176d0dfbb3303c40a94463e4b090993142b9c20afdf410684918c90b3bf84a69b9ef4cebdfbc6658a290d391b3667680a6931b4b549e00cd7e519446b3107e51736ae11794eedec3e5405b36126c03fbc7798e7d184243772181bbade92de7da8d0655e99a6eae67ba7a843993494a8aec94a4081187e25079cfc6a6a7f58eea4eea2ec7b8e3de2e6866d403ffa553165c0ce4540716e43fd0643e9bb3107a6aff3ff71bb8f574ff392ed5fc1d2a24856008d7c9c296512b6c68abf3d627b343e82c354c604d7ac173f70f8cb77ec7c140b003d009b031fe96029316d8e2425b51da72c27993f75e5fec091c934944b0442df2cfa60c8d9f965a806c81e82e9c827035e5ca6ff4bd45324b127b34a13cb4a72c305f516cf6b499f95d99e27fedc217071d1d8778c66df45dd834e6e84cd7453759fd27d7eb38e78751e7773e355bf76fd238868b611e58c8d4890821c7f6309db44838d566696bb0b03450725e9337f56ce4123576a2861370414252975990e6a707296e4f914effe24814234fb3002153e9d37fed3fa7c613233b85a3488c989c04a5aa8ef6b7f94feb6c59f002797cef0f7370ae3ee36924f99cc1d30b4c3dfa0552920be0cf285fe5001d29cacb8da91e9711a2e761850d890c0f0fe9f95c29d3d82daf99be137bfd7776e2511ddce7dde968af814aa1359c34763f2cbb7e9136e0846068ab4209fd7a6d03e198f212151180be56c54604f9bcfe4b1ab92a9af5129d0794be3e73abb00974c06356938eb75eb8acfbfbe26a4baf1bfc1ce8acda15828d66218e1fcfc2521d36a890d010820c83cc144837b5899298190b402fab923bd826f9ba77335750e78d8c2933631a9109fe37b56ba320aea8bbafbb8b3130ced21c714be19e180cb80b39a8234e28f530898ccbe6fcb50b342830e028349845628faec8c7d7ac8d7afad795089b5440e2b73c111188f3b225a9b5386e7c71a76fc9dbb990a7bddb13a08d794910457b06ce6f10520e7faa6186664ac6d064fde3101ea6a4d6f0ff6d4684db5076a4ae84174c4e125804fbd2076c9e96f9194ea5ad9f186b2cef006e33e443849418df44dafc55ba2c28ae5f74efbc47c037a29de887974d7162e600b1d4394d344a182d5fa7adb05393caef14162d42eb6702b308fea9b26cf0ba0a067c46131ce16029ed73dc5e95ee576c300a78ee425074cf572bd802e64283737b05f13e1586c020cd8b6c2ab9e15ebd10f325b28f9b03d91b37aba5a70049255897c336e7e13ef84815e57e8913e5cafcf8bcf898efb4b99d4aaa0377d11407e55943645a99e59aa43acdc1cb2df77b3c41c62726f59157258a5e841e5ded016a74f92e3657baee2921ae5b48d699b817f7cba60154a19bfa224e91634ddbfb2e106dfd42c2c7dc21f30fb4c8b7d569d74251dff1b5ec6e663803900f49e7dd7a53283a4783134dd2d779341378b276c249e239bec07bb6aff503ebeaf8188f9668b14b0d41a62785f67343f0c039c72135051c2f1c555d1e80d808bc0376faca75909a5ca5895483778549283770443b2d43f00e728249fb0209514d1109045ea34e8dfc57c3ba118337ae838661d65a5a221e21690b648ea21f2c65cbda969919728eb4fe5c437a4212dac9551463c4e42c0c31aaf7941e89a103cbd9f099c40084044e425dd604db9d35c24b8fd4c2f2e92305dc4ec3f5de173d48e253f3277f0c5790cdcd5af97760283611dc129cace0cb67a819d859ca0a42a48e0c8e0abf93ee4344b4b99f3de419ec4f03049a3b996d1db65fbb9375017aa7872250b5e7a0332f521ada3f56b071adac0a9104c79c6ff0ad2854eb06844d18729d236f20bc8d1b9d08a520e94d9941d0fba32177723ba8367c8ba8a51b23c1fa86ee82926e64d0cd85028c1f41f77064dd213a74a2370df86448147c4f6468c5e49934643e21178b9ad9c92016f50210b9f297e6b4cde69ce77375b0a778d67bbf0bcebfb42ab67f4e12201353fabe7b960080f43064fdc90ef4146cacc7d3c51f2e97ca59e87550a995d920816d6d4e7c323dc69f631828e0b339d6e4ba274b0de9d9aeb4c31ea6b34a3c7127b8d730747015858934006065982c16d9b799b49024da924e24772b751a912bcd42c4ca84a25259743e7d1aa58c34551327f2a8b1c7e49fad714a85f6eb1f79fc73fcc4b7b03a69eae957fea9759abb1973fad177bb3dfc5b145d5c3ea72f813ab346c5128316de729d55b3783da76f720179d4eae62dd3e07378595634096b126a6c759f012ddf95c240e21acaa09aa93b375c1231fe49c2f86523457cf5600900347d6513c995d9c0e0329806d0634388fb0ff884f6888b09eb6313653b88a9dd67856ca23028c900fd4cf9d77ef3ca4f8f95a3c85fb8c210d1c1c9d9220a796acd34bd94abbfeae85fd74527f171c6fab9971be37f00f074e0e46ebff30e010d2d335fd38282c6e1cd7c84dd7206bdf042bd69bf9f899c9de0750afef7beca2f50295a45fd9ae45411e3bfe149da3999f2ae9443067b4ef3991ba68073405b39ffbfb7d4642fcca7f1b3fe1bbe14c15d9013a456fefd8fded27f482cb2bc3c91009d7d67fe6807443695477319dddea4e693a2e2cd37e5c65549fbeafb5bf6a11b6ab4e5146e1c91a830a4d1a15c16d6bad795cebc52db13e820c4a2954410d01acf6438ee6993f80e2d1c1d9fbaf45bd58685021376f62d54acad3cc9a11285c3739647d480f5df3133b73f5b1efd9bff497a651acac07c6096bda1df97852ae0ff52fa0edbc8b0daeb7e1f1db1bbffffc87de11977c069d686fcb71f50f026371a9e39e3a397d2cffc78a52d9ab5ed9faa955d57a47e5a7c237367d0f4dbe1916d84ec9d00e7add910aebad20273cea598cbc21d7a83b81c16299a3caacec3b59f0bfb821942a9bfcc264456117e0bda3926f6b32156ec7c062636a99b52346d593b4edb172f2e4bdaea2cffee5d0a0636aee261c07f5c659c732460efee9c7f431dceef2137a443e2025b16c29835f1366b6e6f8087729e80174da9cd2b63b404b8610860e073708b74b8e2b4b8f362e266832488f595f1591a98cb5d90f1d44515f06cfcb5039a7e4a2aaded44ab23e2a607c901512c24d085ec10c9a5aea7ad3a64641c3bbd88638c9bbd95c4c7fadd33e4a61224a1008c5f33be36f203f4e531a338e8fc0704e140f25cd3c0aeb07b160003e4f45b4d36b0541ece00568594029730897f4ad4a07017d0cfc1c80d655645289e4cc2d375813778b956102063b32694274cefc14923f161b24e7dd843fb995c69b13e59f2d9c4141f7c9a8efa4e3aabe9ec5c9384626a59a4f035dbbc0ee6e96dad37a954c0e33927fb5a9700dababef8e6fb12f83469fecc2e58dc79951315d1c71589443e7c31f95aba021e608e157cc233064ea1d79a53904ea4229b0829be8840c26a5c7742be212199fbe79ef89c096b362db19a73609e7ffb5e25ad6c5b76211c6d21bcb59ed9f7224077d2af80420d6b3e6d9bd11ce154a8d53dea28d11b1e5ef69633d2c009a3669418128151f5806d29dcc2feafe0337530eaa7a347ffa052acc1c5e04d398f2da0d346b837aa2c049506f841402385281735cc27e6a810be38ac58296cf1223f0baf569a59ea79f82af423e1f733b38a312441fad5a0d46b415fd5f346bac4637eb52a70e03ccf1091ad2c27fd97236327c2ee643d6f562170e02587031bdd63a1ecaa81f32996157239fc5b7ad73f7ba014bbaf469bfca76d392e2dca9dd5051b5cbf17bb3836d074a17ac5957c6e994524912117ae30c7df72da2cc3c61512950d4f7860f1170640ec8dac770d1787bef95604d93059476e9110ce17210351b60843ed09dca1827e221f5a4812a40bb29bf49eb3a7def0c3a0b859ee33088c275484bede823d0bd54c17152f147ceeca135138ce9d298a86a6b9166f868d898ff9f933086a5168ed715c26549a07f7ad6857195299a1dd5facfd4dc3a1f81197008994af1c47626f99d8d5e02cadf003a2ec8b6624aeb0f4b96b46110cb2ece7701e28fa2185c103cc7269fb52d69f76cafad432c5b8cdf0d5eb48825024e226519f381200754d5013122ccc95eaceace6683ddf0427faf908659c3ef4b5bbfcabf30c1f417dcdff75a0647c7c51434d011e0e95696400b75bc18b6c80cc3e138704ec486d070bb7fb055a329073c70220048f7b7dd5a7d4d5e75b357cd33510ecb920b50b7acd21ac27561757b921734d0208bac7e3b6f57fc054c07131669ee3faef8fa33edce590ef9f535b891b478f00c079cff6f7c45f32c036e74e996373afa3febdbb00aaaf457f0d244c7b26efe600e11e7730e98026e5be64929807a4c08229e259001812123c6e386b0aba739c101a3bcc2a0ce7850d8172652a337e16d5399980a6d8c03c1f9d214c90a8250a384bae5fadd49e357ea6982f168f0a97e3556b98b892c1ad70c26759d59b0d19c09d009781e9ac2080565f5825c24f2cf6a6df09ffed1e4b770790f9a03932afef37b8db6df4192c5db94d481f7555be54547d3b4392de007c922693ba2a9cb50e415e953a9ded435bf6ec67cc4f25334686cd964c2909b3c68bb191ec17531465e57b2cb08b314cc436c41ef3f9c67514645883e159a84c9e1bb75afca860b23c4996089767ed2fdea05bd35e1a406a0617a568cccac1b24c6ac256b284ca79db953791b7d827d4f25d3befd35b9cfc64c73caed3255fcf189f59edd854995089f2e62fd887e9234794ecdb1b64e112759ba6bebf12878a49e2058734bfd51e90882c4ac11b3a04276ef4fefedc179382bc6afe573843cb295d4c8c906e87cd367e904a3b3d235fd813ddbf436b4769d35210d865409a7afe35b964b208b744c4fc9b970e95aa1ca3aa2f88b4ba787bb08421b3afd195801195d17762366b6b812cd39902cada23d05b70c01771b2b1617a24f7ff943ac3aaa31e2e6aa0ad2ab734c2b8de85b85ca7502ace3538fdf32d5da10b1b31932c118727ef91ed8469ac3cf05d6c6d4eaf70aee41cd6b562295e552059cb4fa8a38d6a74239ec6f910aa6de4ee722ba30572a02711c193e83b3a892a48d9967f1167748e335ad21207f7ee26d5b966bf44f64c7a15c07898110a2246400bb0225ce8ccfc858dbad936dbe83e7809c7ab5644da6590990d78941547fda92b42996e559b4683fe255686a083b5412af66e21a47370ea15f993aaa521d6ecfff7ea2df908f59477bc90dd8ce61197e39a108f5e3f248cfce4ee3c00d8596f50741f831b3c901fbe278f25e93adde1fd5b9a87b96508dc167893336f930e9be5644057025e9f8e9d0d5b44fda69e8941e313f0fe0da5432b5a89753a7a7ed8886d5390f797aa48d916fd241153def674d783b47661812a0235d8eca9b6308fff376218420f3ab53deb7cab6c69249061e2f2ba668626f764af897e046fac26136b74d62bedd63d9034e0c3580ff9bfcfaa69ea19a71c141970a21592cc7b078cb192b2fa5a0748999831531b6de4eb85d7ef2cd6eae9e7e9212e989cf6249832b0c394f67d543e21c07842feac6d7c4c128d68e47717da9c6a32ef6a152f43cd110f64687f4587f054bd7a49f41cdaec034a868c772e53f9f2b8024450256f247b7e0a9887628bcefb06e2446c7a6d2d512e6e1612b4bcc962c7b972cf8d830097196fcebe34 +Output = ae303453d08f6bf6dc3ad286ef53e3a512d6d775138eb5f64fdf2ed10e0f15cc + +Len = 109592 +Msg = baf146cb5f2677029823cf4ff5828ec0db67593635628c6b6797d134831cf204c0a2ebb22858447c900c9d4bcd938b39256ca25004a0d394f0ecf944bf22ae5e08cd6361d714b056a5e1e8118742f1b5a50f5276eecd8ea30ad2b1e390aa28bf7abad560d623639abee9d72a8955683c439791315bb0649e9c8f21985e7a072ffeb06a388b4d0650c26d931d3d949ad7e74e8607b312fe8f8e6c72eb925cf4b67cf94a706059417e9bb544720ac92c8d797a5a825ebb037dc8b1cc649215975ddcdb9c90bb11bb2e300910b257bac967e164342ac4731c7131a6568cc770972b069f8921063b1d6769b122648e30176b07543d864e02f172b39339ea99349d29e28c38aaa8a00e322ef4a01016f3bea3d4919d1e622f298835bf9c077128505d59ecd1b309083796671cb33f57cb67172e657b7a6ac36dbba073a869b51659d151057ec4913b3f9bfc6f8277b980baceff16ff23cc876414daf7859acfc45f8db3216566a800d049d5363643a4d95ed02ded53a0f240b79acc935a2225fa0b976886ae20b6208fa9dbb8f62880a0fc25a1329c7942b90d565e8f4f87218205f9577c827b236426c2f43febb0b59b3bd6442d053726b90f4e79328e532923f4bb674d09fe57913d9c09113c62ab93c4e9fd26b3610507658c03c53c0da7a480e3823f6a31bb727b40037712c6ca4f3e69b364d17f466cb618e690843e02ce527b8f9cce9cb5ce89b5c8b995657b99525b5030851953b0aaf808db8c6da269128a75aa5cc8ae6c0e03421fecc62437a8c9bbd2f7b8939bea3653ee7c22ef3d68191eb23d3c0f15b33357f140722ff2e7badc9251e36ef41edaad107de65111fa2f71fb98803e91204cf176b8ef0292b7379bb7b8234c85eeea008bb73f30ae73d456cf961da5a8fc56f7f77dc707dfc247e08b56ff9514007033a551b8f4dd7910b5745f9aaa22f05a51bcb681a4a1adf2935453ffb16aff732ea773d60564b4ec76331a7fb7c6a35ee70d8ca6439f23409c5bd7ab094f91fcd9d94723cb0bce6f8254ef55335dbe6da13227bd4ba2ca3ae3e8098c038b5e121c82f226af9c6ca2bf1f07a286afe88c6772ae4e24724ae75143112908e50fbddfeb9f6717dd398b16dc8af11784cac521174ae235d74c50ccb3180a81264c050a5d746f6c98da346fd2a0c750a40b1fb7672200e899787b3d8146b8d416bcf3851e99c51793faa5b34a6fae98d754a311ab5f30a47f75728df6c2ba6b7d088e387637f17e973fe5c88c222d57e44d57172a28fad252ec3da258b598ac23d8df0baf767c0b6b51fb98e0dfcdf6949d45b22ea6e7d8da84e266ef46db01d0d2ece7107ded25d9d9f20a8ece14dbafed75c8fd007e1fdfe66bc0059e0ad14ba1bfb2e075cc33a77fcf05dd198c6ffde4ed42e05f470f29b9df97e0e4ad835deb60566885a29f9eea9c7317e5bd1a452bb7091febcb107fa647d5c9414d81ce59d5b9f0d6f5d086c3613b825d2e455169db0402cb918bab55aa6108dd7132669228c5bf90502e27b1244566a66756e7475f1ad12822e6736d1023e5dfa1feec3f61601fda3821485def790debf0b7d06d4d35d329048ba0978203a86f654d2a07867456dc3711b36ec9bfbe5252ced482ac3c51f7c1e0fa7a06e998b74687e693a1e8adbfd4662e8dbbffc0031405ba2f851693b9e14f48bfa7bdfedccb14e98ab9a46cab98888262cb215c27bec34c1bdfade198ea3f540d6a6722097d5dfb95d790dbc709e07794030ddae6d86f50eec2e883bc6618e40d59cf4c64e2c8e35c0294423cb1d4d4cc6bab8267eb738f5237afc04cdc41c1667bdec41584be6b864298e83118cd63b10ae49bd37e36d1ed44eae271d524b3c1d87ad145eba859bc9f8416cfc434eaece89e6f511a20dd67f4812f52d82881c6798cbd1c9dec76a52240143e3f6f32240dc2440a46997d694c5df0186db5f51c65fdcec124f48aead2b42aa511e80302823963268a09779b56646cea1c33d56ca4b34d5d08265d32b8c9a02cc005242e4ee914cc6ed894a4197fedf16e0aea5d3f988217cfecb626da65bdfdd6305f4f79bc9f247b6e9c2d9d97b954eaa3fc983d93b41803ad5f6d4271ca3ddbd07a0d0c994b57383457ddeb92193c1964d3c4a68b2c872bd01eb0f8d60f17554c3e120e67618d2e908d5d0a5a55d181b6368a836a338dd0bfbc97027ad4b1ce0e7303871029ede3eb055402d5b53aac02ee92db170f5279e101c96a476133cd7de18b7f7beba0e1ae886bdced81a022aec483b67a08fdae9eb4ef3824fdc6db014f50ff90efceb03fde4a9f89002a69247d061c7b68b7f85e9fb072f8f2927f0287fa0e377c9dd608cf9853907b010bcae4c2160275a7dd8988b522ad86be41e84f32b558dc38dd6f23fd00ec3a4c900ac060abf779f6e78738a64f2a0272a91c70a0fbdb55c54ddea123af8485347e4bd887e442bacb9ec1772a0257aed84004b2ebe8a8306dacbc12af6840a4e15ff4f5e0c7cb814f899d0ce9421cd1158d09dcbb84a8b55784713e4c3108de7aba6fdf125f7b15a93084c18c1761b4541893b8bad8c12bac5c65eda014c47d2818235ec6b138c0021bdf5cbb890ea0bb6a0b0c8eebdcdc93bd00e753185cc71200783aa4c7ebc882d314a61da10bdb720ad7a1dfc5e20e352eaaf30e45b80561fad63a53a87d7650df8d675b6640ada280613f566fb90ab937cbdb79a4c17e3c8ea5287c5cd41295c7b0671ce19660735510ad9af04b184860cb653b3c5d7ccc454dcac6ecdae47814e76d0918f33b0c104bb554507e7f0a32125afc16754538a636e8da5f7533224d9943ca15418596397c1d2c983c89263408816638f222a93ac94c5fbd8f49bbfa2daf06e0668738590aaec9cf6c7cc5ef15a41facba5b47876cbdfe0e0f6c6aa30d7a657f4c891bf75d30d4fdf6a10ee9a289cf7ab738391788025f5bdde557d1a06c91fcd9d2669bdd6bf42ac1402aac15f91fa8cf01a87286e429abe1fcab0b4e4c2f5ef7ac42cdf227d25fb7a140c0d8bcb640ecfdbb1ecc2b050703f88eda7fe4eaae8d5dd716042b16a4bf0b79ab519a3e49f5759ba5c49f9a762b2327c59bfa67f3822e4cfd7b4067ffc1c8fdf7ea5b5cccd2b16f8fd507910041c39f540a575135c067ca0bbf2e6d7aa61ef32b0ac6bad06bf96062662d91ad2d211d0f35c34e7d2e5078c638bdd11c545683d018a5005da89596a8e1d74386d785ca7f820506d2b4317fb84eb43bedb4b7d76d7ebed67b71cc38e8adce4e922736ce2b5ae7233c3a5106696add52f6ae8b148aa3d9e233aee86fab32da5cda067e509b262f4ac3a8f93660f2febf3e2b1865b0efc0cf8c472f6278d8c212645aa378584ca62570e671372550e02acd11a8f065ca3a438f24ea3ad707501a3a0dee6fe936145c4add013040ea4b39ac4a81dd349c0ee6432d601e50274a1c6405a75dd64a41975973f1493a2a0797e2bceb55a2cd0562b04bdb376ca079bfe82c166aa8f2f47da69188ac9977dbea7751308039c5e75cde64a1acb2daa5acd06883bce695f7b638200f7ee83890db74ef978580ed7c7fd661fba6ab3e968b24a3357e189a10eb1806ceeaacd7ee11e080678cffab8b709f2b314ddd321303eac475d6c76b08c44c2d0d156fbbbd35c3ebe9bf3f68deda41a88bc8d21fe6bc2cb38bec7a6fa6e8de7b142ab84cc5ee26186544c78d3b63c5c25140126ed55ff158bfe9b90eb400d5da2a4f10f2cee510ef22431f806bb33260cadc2385a994429b58f50cb0f8b33a3199acfe159fc189586ae5d0ab3673906a3fc58fce29022664a037fcbd3caa1467a76b0a1d012b993b83516175634be7c7f822deaf1f52a59bddd8109d468c6b669db1bc72bccb4980b6b05a45bce240613d1c9692512bc72858ffd1b9de024815c3a99d7c9848a00f4b2a448507e1a21f56db41de893695f359d5c577ceb4b25c607834a45d4ba6d08ae6a69c0def16e98a8666fb8d1b16e428827640dd49b123bd490950d27b64acbb0d08f296b5a3a723468e51258152e40c2d6c7dd26a4d522342a5e9c081e18925c6f2ef6adb5141674240481b1052d94fff2d9476be8fd2d88b8fd8ef042651113aedfb500828a09fa3044836711dad371f43ef91ee7e89244d4f8427ad39eac791807e11e431aa129062b93d4cbb460db536f4eba1226051b06e543024243e8ff234e0751873480a32e303f948358e18eb8c0d4b80843fa6db73b2d110ef33b1859089444cf663cdb00e8e320e926ba2e7cfa17a32ab0f6af7e605d419a0b374741ce14627c3e1a4336cc2af46dac7f1d1861741609fb6e62b50b4ffe841a522e460514352e1acd7e383083a9716894ed23ad966b2691e62a038291b25d9f001ffe53f027558aaaee7dec699a94d990112724eb1cf102d257d26cbef78717e5aed32144c3731c571680265952587df52b8b6deec609ccd79eba2024587103674d6cf39e94073e3678d794ef6b3cc4289ec8ef1dd0c16e5a4123536e3fdbe0099e14514a13926eed97fcae884fa25adedd883ef4e7c855def1966cf928083c40f361b0f3cca53cd0f657d9a07a39905c7a11c410558f11da229be351ab8686a1ffed991819a016851681ace465531335f72e24dca47630c0569c4d1434f74db11610801395238a7e7b02aeb0ab9f41ffd715c7c67f1e11460020009d5eab0fd2d862fc92c990072186435591b77eab1e9c61236a2ff761cfa1bfa46973422b9bb96d650221862b12eadc17f41361bd26a9a8ce44519270d1cdd3bf152d2d4f802b885fee377654c6fb258c7449e9068ca1553ec16e6fecd0e704a70ce6fcea04b15c53b365d122b249c8198eb58505c4f5eeeb8de0f024518fbaf2dd3b1169aded41d6fe5726f379492c55aff0c6397429ee5ae643b3b5d82a6f38e2940b6cf031f1602b65f875609bdaa764961d200ebfcc1387213b2fe939b9dfd97c5b626021b365d72cc5f71c944ba528e00a47e91a108bdce3f6e0e94ff35e1e7e81c8622f208e6e16001711d507d579991e1fb7db445a541667776cdfd43a2df50f2d9accc1106cac4743c4d097aed31bb915ef85efd579330d61f86ba50a848a64006e8d0db25f6a0c0bca196397d1d26bd8f48c7ba3d8c4792f00761e35ae9910cf51e27edac2e9beed76120426d267b6d75b51603bef450b3d0971885228cba608e96f8cf01385d0477d4ce1e271462a7fa8974614292f642a98007bd67f7c843b9976c0a8edc8f0d8343c95411af8275050a085b312fde466208581392f364be5e6bab25bae4d90ee3f6386c95be84de7f82fb79f493b3c7e378300f094836d76558dca8ec16e2117f3544ee1a0b0feb4e377443f1861bce1418ba3a35bee598b6a7281b8e3c531d3f481563085ccca25b729c4291d0be61dd2f1b1b7e1d1a0939a0b607071cd33b0b76d253c67a630d8e7a9afd3c38468b26077e3b4d2c7c31d78aaff4bf7f0b72cb09a444be2d7b34cf9997fc5b885851d7e6092008b4b41876af3a681e2ca2ca6747b2c0573cbc1d0715bbc854869fbdd815e454197d69c6ff5580ed8ced414bc779254ef971d0d21c372de891fbc0d611dc385fe64f44445bc5a80a718890fed3e624770c925c5bf84716e478ae66a46a822dc7d9f2ed997047db4835c636ea74d8d8c1f8680bbe818d9d4573693730cc51ea16582d0bcd2822412d406fdc17909568b626bb8205a150eb92e9f2db811d8f98d3cdca46e96aa00143fa4b298e1066fddefc536c383fda27534212fb9f47855e879f8f48f31d074412cc21c656dd93bfc0e3f76f5d43717a11e5913f93307b65b93645b6f62ba031211cbb5a77dd64d5e44471337e945e0c523c374e64c2b8d4f1fab43bf77bb3f1f853df8efafa2168d2858761a21ce904a1aeccd11ae386d4b853a37d00f588ab1fda560ae61b119f131002a1d2c2598b83a3176fbe7d2b8d94a9db24188166881f17e87543287da32e4ba99a156ef8c88283e1d15777f026106425d9480797b07e745c781a08ad9baba046f573080ce425b7f29eedb91dc8b1ec4744976f614ac7587cba72a5e9b013769f59f479de06f4a5127f892bfa9a01a9090c0da10d7e7f2b0ee453e6790aec347e6fa1a7b65778b6091c31b5cfc5870435d9b286e2763054db9dc5b3a4d0c144a9df817bdcff38529e1cf03fe370cb6391558f042a57613dab8ed1f4b42b170de8509cdd9725bde29b28cbb17fc4562fe726ab042b4c9b4d465e7e91ef4278f7056bfbb630f18dccc6e7ccf3ebe9afd1fdf40e6f2f7a65ec73b6d5739e3e6b6ac6d7a5ecef8c327ae702faed6f065eaf9b68c12b7c0c4782fc3edc80084679cef53ca2691c1e3452c8205d885343ec338b29cb225a28c977a79d9da17783288b5844fb13ffce19be30eafeaadec9e0c494e0343a13f774343d7c20bf311c0309b895b7d4e0c56b25e607e43c59c0c2c97d35055deea0cf1f85826bc07f3a8fb1dcd7de93062bb1efb32017270c501bac0fcf4572324b63a14958888ea90556e98eb37938ba2774835fdda0513f9f71d41257fc612822b6234fa57f0ff7a4df1a94d08faa44e13b4bb2e586a43ad84fa94e743212184a520b6012562db140b2adb7d828d3ec828eae74e1d10744213a938acff06c49eebfc2444717ce1e005808bf704c9afa32f5146c788a61a7a2bcfa90103d59053483b1c3ebcadc870d5895744204e7b518f9e56353b89ca9855c4626de22c19244283fa5a6753e348e3abb9ef657a2665d218a211a639f93efa3df15e1a68a394736d3b12222dc6dac87e104344eb45528f6696e749352ad0a172e24c2d19d426533d7b004d89e7a8fc6716fa3f003caa2ffeb1209519d3efe42991d29abe2f5c5a9b26bf7a06ca25e7fd2a7eb45780df3c478d482a46890f3ac89c6bd3d419a901fcca7a1812e2f423a6c74b555fb6542cd797d87959be910db67e9278ea378ed1e8d2faa83cc676280a79ea929751cb7a354d5bf2b1e927d59994c0fa6eed8052d5dcabbae2e93e7d8ebec6ec8cc787ccd73a4d36ed9d363ae89b81b8e0c0200d4a43f7c0b3dfaf8cba027ad3aeac2b6d33cb26a66b5f3ea609df4f64de33e059bca5794a1dfe6bee02e170d88b541903e19c72d1c983c39f93fca46eb5dd43c0b37daac78fd9d609ffd8437b9173f309471aac4976cf47901d600b471610bceab53906b99806807907536d2d5f702be60ac24d6df1764d1feca5fe7e6d62de30387407a0b4e8fdb3cfff487e53cd3632731fd0bfd83d46a7a82af8852a680a29c39b480d6515a032a0188feefd0fa46736afd0df8968b6bfc68b83ebeb84d34fdd3b226036f11a8e2e5b8defe9abf91cbbeeb81d83ad3fd0de341b231f4dbc1aebb03149992fbf1ed114dcf17826a69b8959112a656f248345b148bb3427470385b6ff1a0a16107d2ef0f7b447042f8c158b56669d13173f938f7724c8a5e692219bd6521848b1119e5c5878c4c90666e6d20252995d8a7e4e3b30f05b4e2d5f45fb71a2223c1384b5d399ef8fe9cdb473d9af8ee892f0b7ec21009e5a848dc379423b5ae664ba4efbe31668e6fae7ed530eb87c1957ec84e3ed509f44fd8a5721fcae1ca35707c8d70768758850e779fafda79a9a10c05dcc0ccb63b8fda592d6a744480787ae9addbd0aa5e2904ef2d203076af9522ebb1aebbb9c151951ff1dce886d717af12d8670677a744d70e08ecb528da5908a254716bb98f7e522044ddf050d8fa5820957ce2953bbcd0fbb77c313432d606514d72a45fabfc5983b1d5524a8909bc3a6d822aad227b37dfc2376c45bff2642025182d531fb5f271bd2cd71bf42d2589e7e1a766646754e1b2842d018a96693863cad03cf38f6512f24b476b214cd9348b0121690a6a6e2a0ecd3e109aab5ec18ff253c22d74f98dd7986ae4164f2164e14a605d1c6bcee15e79651bf7178be232f77f8ed74bf70bf47c082cdd1f454172252beba051bd2f2bf06bcaaac438c4d3411c48f8fca7b3d260e8eb7ea28df2c5f84bbba006813cfb9918c4ba98ad8ffa38f298996e51aef8aad3caffc241a0622c89742371622f59de33b22f7d316a2f44c824c18b3d23eec491706a66a872d22aabbe327aaa30ca26863b125a0e7dfbcd6897783ab33b3d14ea87c6760b919c597943d4099f69d8dad7086a168af1e53b9897c663fa1e6c04a6b41cd9b2244820bda811068bff0a60efc03f9beeee76f621ccb4ee5bf303fa8ca17379e5545fe93d98f159b41de821960c99d0829b3466cbe049c41ee28b6065f6d33dec49681bc2b97deb63e9fb859394819d8d21a9f35d788ecb8b158b9df95a450d0e2aeb1d14b3bca2df8bcaf5b0fffeea59a85d06a13f89ece9b18b191076cfd1951f7059fb2fb767722cded7b3f6199f2c57d7055dda441082e1133c72f27c71c75280363fd5742362f4bd946520d9a54f569f5a5af4c71d9ccbac6ee67551d6ede8a21ca74cfdbcf80af1958e2646e20ace3d6b603318fd8097dd1736a758e64e0c5f73fd3d5a1c7c970241f6af683fa4e739a2373f4196766e2f9f2832988a34e43ea4074f912936c276ff646448a467c81c66a6c14ad2c578296e85bb19abe598c7158e2baccd6db4d739a2ecedfa999a6e1e76613997b7dc53ec14ede42faa51822f5978b2ee6b94ac5676f15f278384b5346fc618cf92c335829f6d0000cb37f85a32dfac76768b7ebea918a7156daf7b0f5999ee619f545896ece675049071b0ffdf08a14cd7c1d4d8030bccaa9e424717fc81c43526b84392c5fe4c2541283284299a9958d65d360e4b72d6d06066a2b42027a1336f167edcf05d8c4925830753d83e9d82ba882cc74bf4ce6ef943134e8c328d43c19792de35ac3d5a85abb6d2b49bb3b2cd693f6cc93abb6cb200224d094b914d666306fe5e93673fa9c7c76b845ae6d05529f6638eeca5b1d3c657195f1ab339a4a162a631b913e0d900c38512223bc49befda1562b19427a4bc3b1a5646fdefc4792f3d78c749255d7e3187249cbc76e7e472ea0c3191b56d0b55b9b57877570d14f32bf9640ff67c6899db836f70cf812f464b5615a34375da2d5c4657285ac99a39d77d396f3b80e683e8f7445fb5b0fade9e0605d3ba05524c6dcf8c18de3e3386abcbee70dcaf22781648c39211bd6ac34ce5a82800659b395219be4fccb605640ead2a1ac15241ffcd3d9310ccf0a97cbebba7aafedddc7c75ec96d60d773b5a68e99576d3b06ea1759f5de1cc91df915b50a9619cb53d9e3c10bcb487c9fbf12248d88bf813cfe57636c80efbe8338a8a6b5756c334e726114cd7f124f66dafa2929b6219c18c5339ca7d9e403dcef0b5d6599059a3029c5b698f96cb45bb1f518f85011f03ce732423239982d7d84b43575617474ab58981308ea964fd0ac697063f72f021bdcea0086308abff78219cb7f7f476712974ed667935d667852eddc171bd766380eb1643e5f2a2fdd6fc28bde32ecd6086e506d6fb3f0bcb51de8986c2e897114052ec9a505f4f191b634e33c2cd335ef3643447bad1ea71995e051edafd3d72248c8cd64d579a9b6fdf79df3eda92b5987adf805ef25ba08337b75162034fcf55205cbf83e36bcaf9f70e8bfd5bd1ab9eae6f4a90ab46a137f009e60203b570fa96c61c9b0aaaefe23376fda75bd8892d894c6df80393bdde1162a76104579d3c7730b73cd53f52511b19fee5df8f976c92dfb13d022b39a022295a280e1d9e434a04560f4a123b6f385f555ff1de1c84518ede07b0f460a4acc8c8fe29efba3697a9c2bb740cf26411b1ccbc98ad629d4ec2bb0016d7791337a6b98c5eb53b3de787c3e95813be572e7529a4dde4afdd12e411ce3bbccb14492bf57ab4576782c00620410010e970181535c1c66b4c6f245aa819278c9fd06cbf436f34bd872aad8ea36a73ecb9d956f7b8b85e2a81790c8e488ae32d3d6f27ca6c13e5cfe2603387120db98d77b770857a34aa09952453e6b9c87689ed1802b4390fcf76c24adc5936d1dbdd6a35ef2542dbb4f1d29780ccc27ce887f7f386e56f0bfa986d102f6cd75fe0c3dc785a41d95583c87efb1ba72d4e420ea2293ac6d9ae6f1e2cdbb429bd5ed02613ab3940084b1f78e277acdfc0e58b0838e2a7bd3ea135f147d3f4f6af77b3f058f4158a956591e74634bcdc44eacb5cff455333658c54f7061f763c76529208f37b7487484ae0fff159d20580040af2407bc8911715d51ab1e8c264da9674562c69e19feba314a62d0f77c43edc51b242ab8e3d1ce7bf418f5561d4a3ec62c24be6e13a441736c6407e3280441aa7844ffe2ba13ca81a54e98fdaf699fb63349719fec01d4f4c4673cd8ba25b651550ad9c29233f01ee3a07bdb531846c7f94592bbf993cf2610e0e250a904b65a2fea5ac102dec9944dd31087bec2be6becada44ac2d69a97a0659ad38b3dcc356767f5766260c192324af98b391571229be5f8a4ee46e1ca1169c8e9c73d62739a083c4b576672894f7c894e587d097c75933282c2712f2dd261eefbf3900385464f91c8484c56f9e3ec6249a365e1fa1819d44cf5c1cd4371e28f9276b239faeab28865cbaee9549e1ef725806c94fbd1fe407bded5569b5e602d35e7307044f5b592bc47fa9439dc98ca3aa5fd8d1251c51988040855a6266f4a7ecb7740d405ed432443bc021a3dce4e215a9554de15e2c1fa0bf744e4387469a57a13265889ae1c46457f9d662034155234c066af7cfbdc6a3d0e9ee622f3fd6299708b22ff9c809ad391d0be227e9245bb0b3d171564bb313ddade2c6472883e903c09d3e62d028a64af4672c2e2578453d262a56da200e774d89d177b849c8204c20cdbcbc424ad8f2459347023d796a5c261caf458200588842637e68eace55daf1ebb1f16696c99ada363b89794e51737a4f837ebab13df6a341e24153bd1015fa9e26e8843503a879f911ad212083eceb6cda6d0f48aeff7313ab2accbcda65058f2189e44e0e86eb84d0547c16862d411bbdfacbed330b7980e10a9cf33932d865adbcce0a709af77e8068d359e4a04403320d34ca55827e318dcb0c8bb7e43dc9cf698991b34e67902ad06e1024abbbcd448e94049bcc4aceb75464acdce3f96391785e0a5e090261d5749564cfb87020f86531c68e51a5fe658dec7d2f97d7dafad1959dfa328f9a893c907d6c2e29a5587a5436b4795769a15eeb2738699ed7125d76740e33d7e24e10a6828375af046bb5447c98ad27b872afabd17fbf1501e20248b42273a2e22dd8219b9df5cae439ff4bc1bf53df93e16872a48d02060171a95588bf5ab7412d7c47f2411541edcb3eaf2db3d545a1f47189c8e99b377ec83be3166c50e0a857e461acf740dec8285cb9e7fb99228bb5b238641bf07021ed9e3b86b1bde3bfb1f9b6f447db671d583fb1181f093df82c14c6a1ac6b7b92eabca5011609892d46a190f0ba4fa59364d1dfe7a78b6091607d7da623731f78c77b68af249c9a9b1bc535c8d70460d353f88a7d1c8951fe59d6a39c086f237b8ac5ceb762dfdeb03a4eeea5266260852d9efc01066ad9e61f0881aae4c950443d811d4158381d15aa2203af30d26c50fbaa7b9ceb96c0f2bbfa5ff93de86e7be7979e778f101e71732bbc0d7cba4edcc40450765575cec9349385b09e3445c891ee997f8ed0aa6d9e4f61e89383ccd29094c3b6cb6fcb1392bd3af88c159cd142705681ddde89b131783967fb96afda67421b85d6ec7e7add5fc7f991f33c4102041ca605a483e4378d8db33e59be9b52f6a20afd54b0a41e6074da3436eebed99235158d885faeb576a5f3e336c3be58989e6ec80f29395daa89c4fe4678f0d003e7f7fdf4e7b9b51bc950739484ea821058d8bf85b1e2a0244ede758ca281ee3d7b74de4fe1aa3e6441f275dbcbc8d74618716b1e1047f1b60b51236e36163c2939b3b701162c5939540071725e005f22266053430d0f574807449055fa5ac0af68dd10724ee50d824ca2f0c30539228dc9ceff5a72e2dbc28be042aab8f284b85119710a517d62276f0279358a1b296d4ae3f8cd056a830cdf4cc3d33689902a3d906331e69d601006459430b4507bacf1c6c5028f4c590f4bb19b3a3dc5eaef726a6d4fd7ed10255896c91c4a7d203006a0ee63d73365b117375045944e9ced39ce18ccea14794faf1ba162154d21e3d198fc56a7c5aedb8a056c5e05cdae0ed9e4eb10e8bba37451fca368dd6585ab9ad77645c5aa3c76ed4477ec56ea26389cd56e839889977d8762589769705472a885e497fa8b1768881bf757504c0e55c8c9298dc4275c53997546578314961f44c9ceb40e10489ba3b37606bb9c6d4ca6e7a597323cfadccf5cf711f1f9549ab6cbbd04c9e0d6f586347b635f814c057e586907ab717a027140f32b7cc896cb46b439eff3a4c96079c58fd503a4b2689844fd47f76ee3acc648c00fec29629a3cacc8dd530329c3c38e39c471aca75d3bd2eabddeda3dc2179de82309c3c2efdfdaf436b2a6ff05adb801986f4234ccb02ab7d3285d912bac66f3d19b3fbdb278674462d83452107f6b6fbac60e5f9d4075ecf09ca0e6d1cdcc678069445bcb4f7a40c98d562bcb81ce0c903eb732b830db127b044b449bc2f7ce973c7ba522ac3c71d399b4911efa0a5f839ee6b505cb83b0de2606b371d20eaf80dc8ca29fd7d55ee9c3f58cf13446f0fcb042ef6d58964e80ca773c3b473993a2111e5b2b176c9071d4c2242c75ab48613a74e8d61e3b74c9ba49e6e167a20165a3d9d6acb6298dd595c262b80661ee1b0523a82a669bab21bd22ba4c7b6e813159671d0cfa35df7bcb9e4d7b2f8f6a93d9f8384f78dd7af09aabbe62cac89b6efc6d38312cb80dcd41fdee5e375e45307d9b9f2f9c2b6a9e1a8bfc0c9ed6d88454962d0593d9a031be884b4968f50659bbb3e5b01aaa0293056a7c333dc0bfdc2987066e79c11f1109e76e25087d357859e813bc3984ca3823f245bdf0afd9dc43ebcb56249812d4ebc15fd8601d5bf420e42f3a43e14af33bc95e94ffcbaced6a6882a4dd8502e22cbe244cb8feff35d84c44117ee80b2d1797d29eb23bc27865a63540ecb076a39487c7675847a9a349cb572b33c2944f7d05a6c55128a3e3fd4eeb119942f67feac450138721e1a63a07726fa9966dbf36bae4ef23b9d597fa08ad012c630adef81cc5378eb430a675a89cc52a8d1fe70a5f94067117e2fd247b82f7ec3a3b28843830bbb5271d0bc057de15fccf312ec09cbcf18369527c425072dc23f010c557c0988644a2313de4bc3f4768832bfb22186698a1d8ab7b1e2f859617ac121d395b0682834ff2a4a97ec744b6d296b8f67c99e3138c77647ebec40e1097c798f2b18196ba54eaa8d6457ef22ee3f8cc056f5eba20ac3d9e2ba8362c58d9b99f496b11aa30d9a1b235bb6d3a18dfdc9f179abc0512608691ed93e3d9369970980731bea72e079e288c869b04bbedc799f4a5bbac2fd2d9a58b28d4fbf1ff73edf4aa9173fc056974a44e10396036432263376397c027be42cf0e107bd2354a04d87f91f7e2fc8afc45bcd5bf4fe1d7a22df8bdaf0c8abdd07fed9f4221607d477b58c71b2814892a3677f180d0170c811a92d0da5d215fb7646f8a3726ab941ca5db39c81574ef6541286c632b006827f2aaa401f9142b5f463ad841283c18ed1db3f1e4f24544142c774f4fa7c375fc7deb420d298caa31edf6914a713b9121ac86f75807ae0ea1c00ba12e8d89bb6983fab1e435b16293204cbe3947d185201afd510d9cd8d773c58d6ae72579c1d4cb82f97065aaddeea9e366f6f3267e522fbf09eaf9eb26f203a4b262b7bc0fa61e29239701a0a3ab4e659168bc61031fb27527d6660e848642f982878b792d484497364350ba3a30d8774779ecaa9def6dc6b1bb2a6978974934e13ee9d9a42005753a5b9b212ce70ec39110ca2bd22a265bb1808e258a8de1fcd86f1804fa98296b38c72afc0136baf176159d092d38a6db2e0dda6a42d0d2f96e026121ba177720366f45743f87a2a9ff71ae6f3381b5ef314a565f29c8e4d4abdf0c586904b83d3f3b34b170418f92330a45836e6e1a3fc11f492dc6dede3597ee61d391c9b46958133eda1bcc4a541ac9a96d65659f72e674fdfba1788ac33b18a7b7b9cd334d8bdfad17c9909898bc962456a0cf0a30a831b8f24300ae279e43282f6a78fd91df87c79201f54406225afc66a8152423103ec33a33dc1309c8582a602b32d9dc5df3d5704b63144553fb7ac4049db5f1258366faf976810fc240f675846391d60b0b1edc2f42d2fe5763e6993cd18542f0e8e85b1e34c0e493e1d494fd73eb28f3b8ecfc36fa44d83778880cd9185bbf775693842980972e43250be61fcbb07a1de085f8e7f3337cfa24a74662d9010fc4b3ad9da2c1cf96dbf3e59271d1a8738f6c32f9cb956691a84e8d6e5f7e3ddbdfe97fd0125e30c36232a8c07cee9abc53453b276849a7c04ade80ad586ed8cbcede514300c1825ee0cc9d9ac68a4ffd7151e8a94975bcb1e6bbc92bd6119a869b7c6b1ef4518d0e5ea80c45d90e90ddef7a81a8f3836e0b87cfb00f60cf4ab54ea9148a7676197ce2ae3dec3de02304d7a74d4bf0d9857632017c827f10b2ffed4f95af0f98ed4f77c677b5786ad01b31c095bbc6e1c99cf13977abba3c980d825536b4461fd23022d804c8141361ca03aca11f00010222cb5fe7b399bbc58614a33fc1a47490c7edcc2a4e99429cb85755b9a023a3f7b3c95c15c1a4f50113ac21f800b0fdefbbdf8a326f8d614b8e34a22566b92e71f5f11649fe6453135c51b7a997f223b7b500fb64527ad734f3a37b2c984a0a38904d76cb91603bc5080b4d99aef24eaf5c59050720e70c2090aac8185e5c9e142de564e2a32016ddc0e2cb116e39e7a059f19165005d68d60d54712fe17954cd74bfc9d75c2d4d242bdf1959fe4e545253d188c41b63532011a65fba4928932a0ce58bf2e30e4662f2091fb987b9ff8df3ffd06d998135c444aa7800bef2c4f49e5f947b614b6b5fbc69c67931034e19e18553a8a13f768b4f67a54b675d4df3d133cabafd6d23e23205f4e023b3abbdc46bf7bc5b267e3ddae5cfe16cf397ef4e6b17f7e0fbd5b5fce7923786517d4244b7a6f3f0bdb5a28c2ddc0bf63c0ab0bc0f6279317deb9ec11789c681652c710a734793888c84810e46b6112dbf0efdc4259389197ccc66299bbfd53d782010bea6c2e54a1c51a40738433b38040ca00eb7916fc07fe0d5de7d1eace211c0e70859ff315ff485d1200c6dd13f936a5f41cc46734d0e8fb285c58d9397b976c08e93e5bfef9d89d101c91a1a6cf59203056d99dde9b141c7c979f3d184f7aa61fb5c5ed6219dc46c5177345fe5b1ea5404a172f4bbf15eda4fa33aafd253c293f5bc52bf1d7e9d69b91fa2e8d24fdc19e370b901ec554eb4c24a4975a955271e24bca7c30cc77e92e0c74cfd5c57cf1c4de2564ca366791dc877086b308641ca326346281601cead6f7a1ae6ab522b23e800321d09aa48dc09315fd8906d785fc4ba173662b3f4830d3df4eae6c857f75cd133bc46ab21bb2f803606f09335a485c7023719655adc631ac253353fbd60525d427081f16d80df6c753b797ede621a94f07162a0678018186c67c141c42572ad4883e20295f4c3fe04c053b8dd612e29c72d66ea8336d53fda6fb255d41063c82b3b9268ffdf833dcbdda5c99869678c71b34cce16c74298f5b2300455e7ceb6d5e1b9ab1509c732b3d9973779426dc7d44b3dd188fc062aa37a62d4af735a802cbc7e513e3936e3a2fe538ce6b3e9e2da3d617d429bcafecd0d704f4b7cb02d1a160ae4e139785a8192fe4f498683e36ad0df59aa6c351a5cb483fd8fca77c5863585ec68cf369f39dec3090981e2d46b4ee0ed2939f08836b7c365e4245851576216ef3ac418b8b02ac8418e6dafbcc7fd8bc228c8a250455e570fb353fbd877e5e577bfdfc5afd0be357f401191a46526095f0de2f4786ff1678362200762cd061b0b5feae68c80e1334c873731932d10814c414f8e0a9eb71d4a5b5025f8410de03482ab2255a7dcea2ecba5369107051c122dd7170db9f99feb04aefca0bb415b7890ec22142ff781af742449a7db4b02383842388aa8ff15eec701356423ecb562f1738dd0ff7a2057ea7c12db912b5a46c95798885311a8dc0b10774c615415770d080c92ffadf1ad9575383711ed4cc54adfe00fa2777f3b37a46b5f5ec1a4414d75476117d81939ded764c343d9023c22a3b7287d78c496b585b8a5007d8a471781e5452f42c3832b693d861037a133b968c6d9cc5e9c72ec7b072630cfee11d4f38f462f341514e5f46c885e4e543277f9b42c776f3159444e00ebd7fef828ed94ec6dfff63773754098d1176741c2c41d2a2966f4abd225c54afbdb53d213c82ca5c188d0522841156a6a21ca906a089bd0d781343266f7aa8e5e2616a15acf83614ab00a8ebcb33b8a5a66bf6ab3ab3c4d3eb179ec9b22c3731d9e8f90866960c91160eb12b632799fa9cc8ef72415c84a66dc0904fc0ed9a23f2d05c41efd8c841d81bc079e2599515f3d7e5e45ae076e58eb2da00e24b3c2ccbac268aaf5d03b77f9c694fdf6614a85a0d8c89edfc0621bc72de95bca1b7ccd2c0ca2b2b8f29625b24ee2590c9a2f23dce55cb80ebdcdb75651066a69d778496d2c9abfaeba3c31929f193dcf0cab3fdbea431aa5c4583582e11fc36ab05d48646a7a583ff2d6a28300602ea77e64e38432a44c0a9eab9c32245eef336ed4d2f90d6706d3600b816cb8dfb6fcb90216bf04a8d7a7136df44e63e9752ed984f0145f8b50d2ce84d53410bf5c36862ee174a77642e2ea4645bde6e8ddc2b816a99da60ebea402e9a6c55028a8bdab904a8b64381525ede09869f584b056d531067c2b18d8b1c4e1fd06c04123faf0cf5ced8313d9d7e2e0f439d8e47454f67e0d9a36cf2762de14e1dfa73354531f931c804c31155f92f16215d632b423e4a4c8dd0e5e321d162b5a384f25c431fe86942d06ba5127c5b9e9e53993f52b674c3f2efdeb814b36ce70f9fe40f9fd574ecbddfbd6159642e091914731c1d4461e7976499f9d5504a42c0bfdac7d1df093c97671abea14d30f620249349f864bc17e9b3ba10da1495695549490d8fb91fe97e1b16457093eee651e86c418a93cde56871b1a5999cc8bb3bd0a1490fd04363c070327e5dd4c24a1ce4807b3a5e21c0a2031310aa457ec8f2ea9622f8d10e4c0cfae1c1af9c55a1efbd528f8e20524a050c40fa729b0213090b79f3d127cb02c20fc6d81c37137e58b774d6fc96d9d23fd1edbb892a0d19fc97df640f4114187e4333f9fa41864fd68739fa1c0e130981185bec646efa4e2c3438dc29a9740d9029cbdfe0581886e78144515302b85097342e058ad65440364518c4a6ed6542a627f0c254c754c41a5a167538211437d0b9d68f62fca560996ee1c61d7952683ec24579ce3bc587dd5612fe41c5c13fdc1dd7e2834e585fd4063658d3d9e5eeb88d2c4ec301e532af29dc34f68d49c907d4c4c77247f76e64af98e5908b7a36b1ed37b9c9d63e551e39e4b1ccc40873e2730f76a6760d4cc9bf5bf4aa1a99d0a966da5349052b7f990a9f0d4b2697b0fa7d2aa8a655045b81da222ea6e3bf5d0d8e96a3c73b4712ae109d9fe8118210ce57a8b5d871771b0b747dcc0d83753c5cc8ff13dad51bbecbe043022a113213cca70c26d337c02bf512b185448635ef25ba663bfa6f13b480fe41ac87a2222a83cfb7842d2499dead497fc2f2489bf5e6b78e748c65c9c45bcefc179740fcc562464d562cd44ec3b26d3b0d8d56f1e11e54ba662755984ecad6e4dbcf7a1c8506bf400578a3697b930275dd7c4de2114b268c8941bb29c44cba8e61a6b9fbe9ef7f022a973e6466cdadb2bb5589d736eb8177466202d8b55fce7b21a38d25546b2a362deef1ea05d0d3641f9f876ba27e19fd261ec93f9272971dc44c60236528354e98065a44d93af81c82b0e2f9f48144a0b0ce7ab90c33b908a207df609c9514ade173f41f616a905e7d40191c9d8395e47f07a3ff5301889e537c67875b406ce6a29e4bd43efe407c77b3964e1df3724ad930b15d376aaa71410074e221a8928b540bce0db2547d28fa81e708e66f8e4667f04f7d09ed7313f33a941b903c2a0e6e32f7267c0b9ad68e3187c797363e6993ccbab94ae896e90291519e278997e269ba53a8ec924df7ab58f52491160716f50caf9c8b1a7a72d79b29e447ff6099cee8601f9476fb1eca5ebb8a745d7ce104567ab14ac19253eabe7988823c18a71663a8f4f42826be73c94773b19b046a3a30c871fa9c72dec481ece5569e249cc8b29ac39c345559200f257ac94d31f51f0205792af990a5ed7be09545b418ed6e4bc205fd0a0b6167b6d1fa3be29a141b60be114c77702bee02f112d00c7a1b6f959b268747bd89a356e99c7a098169c7c34ee4ef8495f31ebd8ae87605ac995526a2cfdb4be0147b55b8bc14109c489cb0545e84af767e18123a80a84e3509b785554c59a517a45839ebe38aa65f4312ae5b089c56963f62977c65f734b7ceff284f3692d1c8bbb279dfad5e192efbb213cf5d972879a986c3cd12e357896ba485dd09075077bd129c20640f07afa503873dd82583a56edd1db921ed354e523034ab5e37bfb94b11274ac20de036018f8f030297f68dd20e0baced854c6b353aab1680946de1c806a1ab21db417673ae81cb679f0fa795721425004c0b54672c5fcb2abde9a5c69b71ee1e0799d59df915f3617b2d96fba1ddbdf49200be8a7dc925b714c159c9283e70111357d7c2e79227aaecdeb0a735bee424f7bafde1a78db2b029739242355ddda58f19f19502acb48e44a1a91a763e142bfd98973f4203fea07c7ec3b45b668335bb4eb776c2cc46961304d4b81be1ea7414281ee5d5d265f27e5182a1f2df0d6c58649e0ab0573a5ce876c8126f30b397cbf7f967cb6f8530bf8a43adb42dd893c6fa19a353f42c3d3585e7cc18a12bf19576bb57ab31d8e5b0878b09e7d97156878dbee3161988d17aa0d81780c9a03bf132d917edcfed8be1e7cd793678642f3a8df24c7f4dcc9438560db73000acb17f9ad72b1ba01f9dc4098f6df8713d782089584217f7840fef13fd0dbeecce0c914d4a23bd48fb85e79b454ad65a49ec09ee556648ad3baf1f792aad85e470a7c69886843b211deecceb83a238aa35d5274b8e1bb9e55ffc49e41af91d9e310d802b20bf1dded332d498cf0697d76dde392f46e4c4266d61eef35282fe608bc87e63bd46edc8d7fcaf118bea8c687e619fe83453f +Output = 849137f4f837ef89eed5ba42a6a3d13eaad6d0cc8a46611b4317c8bf99d7b7ae + +Len = 110688 +Msg = 8488b6b0a5cb3b778d9e6169cddfdd7468127361da571661589a51e95a0ae5c057ccb457cff0dd588fa4298131a7a6b3e201914668f279a06328a206d234a8b1da3f6425c3f913be44d3b58c006eb4615053c62743e41477e3939c68ba51d4a5954990c388cf25d13293cf30421b50a53a70daac74172f0f624207b81948b2c31153fed826585bb8e34d3d150096c2a729c0957c02711290679fab9df8018a34d5c3770da67efd9cdf67c8e442c75290a5abbf40f5dc05217b114fc05e64a4206903c30a0f2852a4ac4b38450e96488834991f9f553f4fea2500bdc8535947ae5679aa76693ea3f9d45f55df6eebebb660f27e422b813914edd4bb5ee0c8bc06238ff4f9bda738c2df0de75b69ae8443b01ea4d07e8c0bc75bf6122a0b994c5158ac683c124d592853bcb56007c75b56ac8559f257470d2af8cc8ad3deb43cb77e37d0e770174e53bad38897511eb818dd8f6550bd9a86664bbfea026101d75f1c9af2a2dfed5e6a9bbc28a84e9be3b1caa58f91b86dc0a2dc38fc5e9b696472ba3c961368b7d3957fde5d3a07272348fc2da05e50a80107349d869094d22a17e08586e5125df3feeda1eff582a8c205f991615e8e3492bdda57513f5426727717dd89bee6c807ca6d6da583c90806114b37973a79f7bbeb56cf2514e44b84b9e6ac6647eade562487aa4889e42d389479890d991adac3ba316cc9b74b2ba807d65ae62728882a32c4c0a0b2d9019fb50ced8a2477c5f451f29507cf91ac26866e4fd106a8afc91cab1875a3b26a859d8bcdd5839aa194d921b4a504bfb8456036f4ef8e71397c0bc5188f07775230747e90b75d8b54ec7947306c00db364fbdb6af07658a108b279829b6842ea0e9616e9ef85a50c8445aeb712468f00d8ac477e9e333fe1a3e97aeb4b1c2e13cf88ce25f6023f3e3e4a395df95e703273f9e000b49a1d241dd848f1f496a970da51e623bb6607c8f137dcde286231e6bb572d97b0256106baf15c1d3462459fd383f769ac4b8f1b31a101ce2c1c448c136698ba3d6fbc082fd73ce3970972ef3f816a7e450d45c37418309470c738a1108ab9dea8c38e86d0fc53eb88e6c1ed82fcc7c81235cc402d0fe1d7930d8eb43745f97b7eeb492142d3497b76a4b319223887ed905f732fe0fabdee0f59a7340c2ae0274c218c55f9fe863a0cada700a1c733354be4dad1246b0d6e422612aee3abf6488d10b8a36ac0829da77c4e22864b5255b15073d26bc358dee81d7193624bb485be336e8819ebc72cd39af8fd54275dc54d3cdea23ba638a64d8a24700c7c93355c041e728bb2ec5e1d74480f7fddbdfa9c046bdef886155b0f06abc356c12afde2fd38f134c83aa7e1b2abc77de11b6c0a41bbd736e58763891d881bb5bbd435ef994e92b98e6a90ccb094b3e2d3ce90347f4f397b470756682939d7cdcf3783de62efc56e97d4bf3b08b3633328700d871776544a1d0dba18d44185f37dcd4e3be46d07d8570179b9256843d341884a9e94f1d607ea130507893fb4bb39fe1b849876e89b5e8966d39123d467d17fddd782223d4930afadd0c274d2a996527254f96dd60c10d4ecf6c686a3553adf1dce6997d892834c3af11a916e331552d90971e25ecf106c92af5ff12f2ff02ea0efb5b35668547122e4fc05e5ec3987b62eac54f138dfc8fe79a813d64c83d6fdb7e115352f26a70c28e152e8397559904103362bfdc16266c2493f375f88609ab3962dd37b6c564d395508d3af5b510dcd11166d7277d18235adf3d0cd6073ee6f2f7ddfc1a8176c92d18846b24e06654f5076443b658ed72060d2211a9e599f472775a8966c62e0c1e151afe6dfd26d343bc62ebd1d02bc3eec5ab6dba4b9f3d818b5dc6e2bb150430f057db1834d5c084d96bb7c00d5c7ddbaedf06515fda2ae6dbed9bd589b21a2a5143ea6daffd858005848fca3607089670c6c5b549d1216b0e12f089578db4d6dfe714b3932589ffe9b75b3973b5cce4b4689230320c8bd6ccd4ad444e2f3cfa434a3f340bd634c92d0b0353eeed319022ce56084214d1f0bf3cba4f961f185f257454363c97eea578896f61cc379f6061fff786a07059818d51fff256e5b2cd2b6e3c0251f01f5d723787aa381b7e1e1a035ff275a88d51de1c6474b70a700c003fdde070692fb7c41f347858223690f4e37494e845d4275ba3d21fe015bce34aef2117c28b877c16495c1154d32f7f98a620b322ce95cdabf02f39f98efd1bb287eff16edd8d740fbbe8be55b7d1b2ad544a994acb3a09770b650b2cfe9a7cdf0e2eb49ce8aa66587fc1c7835485f3dcf6da8c89c42aa467fa5add9fecfdce7a8cc8a97632461b999dcd740535b108cd92b7d50742cd6622c7f8f77ae08dd92a0aa4182145ca5c791bf60d04dfbfba2733cbbcebcc8b16517a25a0e662b265988eaa49c8a99cefa00323d9a7dc15d192defd885eebcc7e9b19cb210bfbd4396b23c28391e4269cb75d3c2117b21d15b89d35838726f864a9aed1c210325b1e4cced410a480cf2d662f282d7bec3d4e3e775bf38f05779122401fcb1d90b0dce399c8362a05fe685483d145fc0fdf43cf7558219d10b1cdafd89d845c9c393bd78b863e4bf91d172a601eb1c2a56abd119d1255dad00fdff87d3335f3de5f03d1acf7702ee693008fcff7b8f4364684acf972d76dccf791a437c9250ade8afb78050113fc53c8ec2cd644a4ba48da60499160ee7f8cd2a95c0e479dca2523ec759d8d71dcc924a2a980edbb3d659019906bc5e3389909f0c70b95e55a3a909e6f7d84d0f7cf0fecadd2db46a514cf76289187febf7a022e8e359b45e3a53bd90fabcc7975edf190e0d6f48c1ade0040ba0b90873db7272b589542058def8a65fd314fb47dab3257eb9321d7c349893feddfc6c6d9d9dfaece31706c7f9fe709e017f3c837923a0976114b6dc8dfd33b6a171303bc67918198130ec3e23db98e6063a2ffcc29716e28595897522846fcd8bb5e850de9a76a5d430552dd5168bd261f439f64f8404daa72329d89ab4a49e0d18f95f5e88832c5c73b6199645c5cda52bef126880d70a364bfc794f048ec2a638d7b9ceb9ca17aa99a383efdfc332405fb3d3b60419dbc38e95d9b7fa6ab5d78427f297a4b7e21f1091ff3a5b20caa3fe1cbcb09459d9df596a6c8e1ce4f211995e9c51dfd9365a56f5de0e3e6ad17085ae2fd098038eda3b0eb419d26a0204d6e00975d1aa6ebcfb63b2e3ffedf11684ecbf9ea5935554b1e742e3b1865ff1cb50dc8c10a805e76c5010541636a4068a3cfe8333a5e7cf3c889b8430b68698e52587fd235e964a384f78c727d164e0f4234f26d8a790ba69672073e676f04ac2e29e51604a8a55ddb64ec59b4abe06613423e1fb04fa969707642b49343787d2fc82217dd87cbacb2924c7f71f0a173fe43f5d116a8ff463edf912bf9ac6e093e7c5d5d294c7b98f1c7d56a1aae3640ec7d3e0c234cb444e8f31d2d00718e59448fbe6e51c05f2a804cafa419ad4ad5c33942563f02716b56fb0e41105c7f7427476ed4bbab1f69476901b5d4b583386dbf283ad293dec4713e8cf09133ea62d1ed9517d1d5635e2f65f323b58e8973d057193d44c8a2561f06bec0ebbf762c28c85abdfa05d20f1e8aaf7822ff058ed6493de9fe67662a4999cc3b87c8ccd91622e6509d051486fd1e5a3b85d29f8f66dcbbc56638d146d840dfe9cb16937182416158249bd2cbb56a1ff545cdfe80675abc59e5058cb4b2431f51207074fd536ef25bf690b4e42cb6242dcab9cb68c309672ee4943e7cc1eab3fbef9f178473f1c1e37bab61db4c4a916b7c5dad506132e5cbc9ae90a4eb7dc36f9e6c230ec912f7771bb682b8fc6d8f38c3834d3f291c5db8fd1b2a361a437936979c41a43d19bca03e77be812368461a07f1523d0311f87ee9a3b3393585fbd740fa184cb74d37e44cb8be40ab83dd9bb0706553d757dea4f40ed4b6248b71da034d51101ff891cead3f29fc7b067c4326c82e878d3736b2852334b4cf9d04c8475c93f85d60f1e3c9d4a8be7b394d99d1c154e30df9283106ab7c3b1e03db2773f0870b5acd80ad0941e38d936475251a23806f3fe5dea8de6f5354f9042082f1d1d451fc8966b3d34d8171abce1f6f67b559320c437d9f7534620548eaf85e28c723d22cdbca7d90bf2b72abc07100214088345a5a309e33c55058f3fb8d45809a1c97d30ad494a96088997b82935fb18cb47d13731d2e80e9c655e28007be611166a7d75fae7f84f841ed045cae147d6186161dd66cd6c4676c03fdc08e5233f6aa0a22227dc68b4ffd762c96eaa8ef87a60662cb461f6708e96a2d0548875e0f8fc99a9b6cf2252c653ddc776ea26ec5bb55c89ad390d194e692589560e84a25beeb2911a08ab9582049fd48638a61e56d0b398a3ab16ad30a8467b9fcfa60ffde78b6ce4416b19cd7a37552f0e932ad66319ce4a40a9b8cfe4743b945470667987928187e1e74be32512eda3e4548e64bcfd8f13824ca8969e3d2dd6256a52394f56938762b6a86d85d0e2b75290b58c7ebd7f61f866190f461fe6d7bafa6fc79f4607656c4fbbe72ceff8cbc1ae3ca808f803e80b8c66a47c8aeb0badb6fbaf07ef51943728f2ca7ade8443ba238051ec2bb10844363df0920caef45616a25a09c106b67bc8e9a2001b09c1b4872d24a8d70b352ae9eb6e271397244c9fe04325599b2ea2a60ce85d241dc8494f9f7acf687701481e1b97cc4e581e09c92214db27837f4446d907d29824c9d0f363ceb08e98fef4593ae7c20b564406090429ab99642ab931eaab00d5b338f408f6bafc87c580d811b5e8d8e91628ea05f30c074d91a3a9ed9e2c786b4db81b06d4aa240291296bde391551561c5efe167b368eb2a09c7ed07026a9c758a9ce539a36a77d907b281520e7cbd0dd38dad10923a2572557b0911d0405887890869593caf75727d8756d09fab8e7ed5908bc297dd2a97477d795d15f2c1d020ecc437dd1a43ddbd40c3c50a8a919a122004e588fa028327f6c5559827df3996707c395052e8030f03519918c0cd4ad4639fe12e38b61c3d0d76602388bbaa35be1bc95c006ccbbaf886b591f64a776184e41e51404c4cd0eb13e57cbd5c0c43fb294ec8ccd81c0849ed7f3dd3110703a95b05b9b9cff92ab7244e6c6dcb4509522c305d5d33e03f1b0b60e40029e4fffb8dfc2d4c440d919a3202bb400e3fcfe9aed6e35c85fea8996ac14d249af4a0a1016c77a1b56f4ebcc46931e02fe0dde836aa2270d65e8be8910841e86d212dc33fbe5d5f2907a94462eb96f235127a784d13e1422fe83033089f88f4a951ed8bd058a82fa9bde95a94f0b12129bcefc17979ea7a9784dea058eceaef566e291f3ba420b83c795828e3e04b1212c685ea454403bf171adf5708592f817d5f2aa708088ca3ea233cd3d6232c70f817811b36ddf5b9b6927981a04c1e53250c354cc0eeb597bba3de86f6211ce1e4992e7ed6aa87117cd4f546a82f800d565d9535eabd643db8e18667c943e30ddc33d338ac14836f71c89bcda9691d57183a908c0edd5f3de8c67c9ed9ef489eebcdb7744084af7a9e57b23f2b62bdd7748b7076b4b66e3e54380754ae8e1539165023581b60d5db0a6784c3b482283871387b1d65b05be8022070b1ce89108867a25f0cc411bb3abde15782ce3125201829faa9a833ede4fc6700dcc3460233e5acb3b9c3002a3dc0ae74a400d77e387047344206a7ebda4af3fcfe152fb2e298566787a194e98f1ab42350d2dcf9278178730e06741e71f2aeaf3e4aabea3c8989c29de534c2d6d3ddabaecda85f9553a5fd3830024e52fe7f60c5ec2170e9bf2b0d24174a7bbbf41056e778a3772cefb71ce60cb94225754d56ba83fb0d9242259143c03ddde584356a235c360b915c9415412302c4916002da4695a089df1b6093236775b0fd8b333089ffc7e16fa2263370fc439a3ec6853491ac78ac7751c35eeb945abcaa12f4f042ebc0c36cca53bd9b1fe58dd5afbeacc24feb3e03ec3539c4cf54c8951f5ff275a8877730da05faec155165fe24958a020761062af5a06bd6a1cb9e65bd5c7d4bbc86c564dd23338965eeea602bf215785a42cd9573eb3d48912704c3f1d3daecb12377b0d895b19a9723e4a4cfbd964dd2f65beb6efef74328d0c357c5ac527f0fc853bbd543b948345a1a7115de55a8f7e578d5efc1e1eeec2ea3c840cf2b2d5cdc232edb1596bac3fa5570073d9ab25078ecfbfc1c427267a96bbf6a25ad1d22c7adb0f3f38e1acc6b5d49acc3ad9265157e04a0f764f621aae5e34c942278e8f0baea24c5eb8dd714faa30c56d571be26f899e03a8da3a197d7dded05d06537c111847673f33d6d5ff42630df5c77e4112061c6cd06a16fda0a545661000d96a17c25f1e5ef5215b3127b1f4788cb5e40bf055998171713d946f18d8efb978df8c1759e0326f458781d4ae174a296b4199c2ca183072d15fe525c9c76062ca42fa91e84b6e249bd17de3a7f50f1ff6f06817fa777200dfeb0f83c8aff6cf464acfcc5abe4697cccf61af400c2bf2f166d34a5725aa8dc5656fe396013731654d882151c7605b30d7e9c206cb1524e31b87e470a16e8c5a35a2dfc259965bbfd1b02b3de55fb1609172b65cc07f483484e270d789128ee6f234d2de179880ae5de464af96796cf472a8e6b27abeaf6e497f79ec3b5b07f411926749d9b252c9687148076961d034f1d8edb85857fd08cfbb6a3f368c7a1a2a47f7760e78348988035fd5cc9d7ddaa5af35dee7dfa39c9e22bc31194b67b192c22e13245ec87712f716ab3e80d82df4785986b7ba25822b41fa72420c6372e19d5581b9da611abfe8f6f84da081d764e0b350367c1561fd95af734f43cfa69d3618424d7fa0dcd5459b3d6890dd4f8d64fdbbf299d5a48baa45a4af863ef53c28e0f54db30a3609895dfb1dc67cfec461733a5a97e8d26bdc5786c14823b734f239eb49190fdeb340c9a1dbb5c37da082ce5c0d0ae17404b84faa530e00951e0eadc4ae16240f68f868d230e36344a8356981584741f1ecdaa88fa34c67f76dfa96e20b4ed970a11cb60cabd3bedc51f5cf4aeae17cd49a9ffc975087cc569b229ff3ef07a28ae22a2ba1bb1b48bd24408a39237e04a48494b661d944a04b2c33235aa7f511b6a2ad4431cd0e835fa5a204ac90517bea3135606fac17864da788cb86e47ba99c6912aa4d7032114c4c96d945c020451e371e85215754d0c683bfe319232fdca4bbf69855433a550b8fab7265214ee298fcac8f275991225e47351481c2761d5801d5c8d9a46be105e53c6abb3251f712f85bf8d221610d6d7874da4160d2fe2ed11ca65b126b17c3f3d61c9871cdd4f4c0c95cb25d28c48c8e1baee87ceb01b1b047ab5a1b9c9bee2215228d7e171eb6dc6125685b7d1a23fe860cd785129a6915f352472e94dfbcf655f71aa5c236e1a1bfdd34aac260dc40407eaf07ee5abd788c35a2d9c845e8f73514c09753a00db7320ed7d98d2b1e09d76ecf73d2b5376e9ec00dabcb70ca9b1ef60fb1400c83936414a25651eb51a1b767c957642c5f5e878be7f302f30a58903568821bbefbbcc29924afa5242fbe7cf42d311732adcef2e3b26e031f00c6253d5b884b49cea9ea06ef43fb67f0a6749e5b8f606aab465d720d6b4087465a3a986942533f84c126e862c1c9195cf04ab0e4d0e436c04b23b149894fbe538b6cb1123ec7f2b6b915a81f9792dabd226bf64993f7199543d22c07368516b0e02811d6ec2e25ccf842d07643ed0ea9c364b90a472da582d7054cb6f18532d6def95527b8da2b4fe51afc27453c37ab49a18397690c4d215b298de948c4954e0e5cd5a5437085a8262a85731a04e82a2bcee08187f782f966cb8a1ebad7b07ec4cf3da01a65c76e31de071a30eb82aef0395a591293e9638047abb7b61306f1b8ccd7d88c4e632a7ec1fb6d3834b9c22d6d4b7e9745d2f82e3a7d54c91b1b4f40d24e8f377edb458362ccec8e84dfdc39f74e6284a1f23fc710796672647fdff38bfc64aa9bb247d62d0628a2607785ac53edc5792ca9a2e1661a7d3063872c57368bd934196ab9fdad31a2223c13270b0f73e7e34a7bba13b7eaf981bcc3dcd27e575d827c7714505fd9d97c9c3568cc76ab7a317feafdc462757bf4b4d839fbdff982043969df74b1594f1ff540a37745eedd025179e67a122474f80016fc49b7ecb747d4a573e14e5a639acbd76f81f9a880c4539afcbb2372650a13226c32b2ab8dbbd2dc9a0c8337c76ba47c4572ee731605fae0a8fe3309dcb9626d324d4cb075deb8518a7cfc8bdb0103719dc0a0d90d25cbcd83b9bd453c647259c70fd286002ef9b6fdb926c12ef96d8a0101bd44c6d22ac415841eaf14c9c79a92e100a69d3b1b7f4c377e6233c34717e7ac9040d369ac66c6d3f3b1e627d6923e67439cdd71921cfe7e700979ed249dea37d647d37ac518202fc8f8312d23c3221917d3216102029cf4b80171e58a9e6119dbd42774197aa9fe0adc763833bfd65cf9e41997cfd2a04092f4ac3aed9be4e93d704fe3fde0dcd535f935e78aead3d9663a1674701f90d8bd5d995bd218fe2c57a6cd5906fd213bd6b8f0999dd692e4e95fa885771bf72373a6b9c6bc981539d6e21031a9222fa869a626ecf0f5ac25ffcf6059698a3bc7725a9e1a118bb2b817acc90c78e250916b4b595008da88031603be5eabdce72b2603a6b485766f1db6815857dad02c8d6812f8415a07af02c8971303d27671c4fb1c84246cfa92e12fea3e92635e2bf2cc97945f78ef89bb93f41ef761f9742b8e1f86f85c5ad698e051fc4a96fec7781533ae08c9f4c083e4953297ded866d54b874f9eb84992ab744301eeea349773ee81b5bbe1d9bbf25704ee63ad95b248bfde4e8625396faf5857f00dd192047c950c4c0744e1049d47cda2e952b3ff0c57aef45d179cc5fb08eb4715e189a708c53dc17967cd02db535a00a762a59586af53e171f3f62e35028767a59e9df79edb80c660bed06f32e624881c51fd2e4e237796636ed810e3d1b6d22b6d516ea5649fbb7bde9d824a9cd7a9c6a52d11c9608473afdcb5067df2f42715d22684c2ecc511193ba6e478d3cdd624d0b7f89ec2f509c5c20f8769f2c9d6f3618fc25dd0ab87d75a7f1e4427819db569203b24d763d933b36a0c3e3d925252a01fb00cbcbd6014bf789843049d70f6e2e861f22a3b628825371d714ff839a1f238c6260d753a8fdf35daebf76bf077b293059d17f626219c093399b665fd6fec8d8d504f5d87774e396ea57c978ca66c928e7c4d2ea49e9c52d71ded65fe2b03606e01fef0d78960f5bc06008ab60185797516164f5e5d8a9670847172ec51cb53f0c198b99b24cbed5b942fcffd2781aa42012fc2c3fcfb66a853df07287298fabdf5a92252d7f392c5c656d1d276d5c78db3e64375eb7325e70272bd431c10a71e34acb58f215c987313123ac67e1633a0a4c62bd4a76666b526f8efbcacb70baa05100db08f8b40ec10fe5559abb791336a6bf660cf69ab7b17ce2905a2e07ad9dd8f755770e42eb93657cc0c9e3e42be6b342dcab1d166d18b6ee3aead418736245796f4841bd43309cb194fc40eca9a2dbb5c42fd521b30c857ca280a4ea3377024ed182776b411e1d4a7939bcdbb6f286dec9a10504b11751526f2786c71665753e222d9a960ae74f0f198a3ef7795f1c879108950891c082394ae462f544b308110a529184c91299ca19f6af8a1b700576c46c6c72788f80f9dbc120bde4e9228e33f7447da42865412485f5dac3aeaa740bd5748d900db45ac9c5a9671e8f2a7f42279bcbc3b01a3de040f9309a9f71480e4c94a001c18424bdf8e33b1c2e8aaae2e77eb54f321f86f52ea3d3c8cdc3bc74d8b4f2f334591e5e63b781034da9d7b941d5827037dee40c58dc0d74c00996e582bccc8dec9c12550d0d80fe75efd06f3c887b4d46be1fcdc48a24c6fea99f0b519576f773b3c649ffce81322dc45cade07fe80fe727fedf7c9661e7110d9f8b4d25385a510802e33fe0cccafd90421b36a311dda2814beb88e90cff819b5e107e555ade0c0190cbd72da9ec6dbb4b6045da3de00035cc98ee6a6d35d4bda340ed0e23aa2e0837a8ce9c60c106ad3f24160db54088a94a8fb800cbb294da37c3a136dde73f84be222d1438704fcfe611af25c224c3468c77ee95709e4859e342a2b6cebcc5ddeee2fb7f7a21d18707cd1a08aab437745cf99610a22079a46d65f9773e524a7a8f9040c46ffe123e6c005fa0b51a6e9c80bdba58aa60ae229dd3ad6077d055c569d405cb5c2c9c5ddb5384d32d7bf024c16a6157d0876f3b3d35c658c05f6f254354517c8cd6f74a1d6d938b58024376e7a894f45bbd455713324d4960271e02e6bb2cbf4622a96ffaf893af80d4f1f8ba215a179529b6dee973491aa04fedc51baf9e7cd1383c3339998d27eb1c8214027abba8c4f44c38859fc2b3c80061d4a8d8b09b764138fda4fa88dbe1007c31865ebf9031458fceaf5fc0fc2061049855e069047d65233701c38cb3aca869b60f736fb524450606315b4cddef9b5d79ec6cd29f2ecb8748199ca297933dd00d6561d200e41c3949d23a6d3e7fd5f4e03327f155d09ceb98b42bd06fdde73a9d50d1f059bbf1b00059a52c0716385233f4b6d00cadffd88f9a1b2023d3cd2ece986bd2a9efecf4918f438f20fdecfedbf5c477ad0b1dd59592129a9bbd18340804d67fd6c9378c663cbda1717c188041fff7ec21331e6a1265b845bfe3efd4b35dbbffca91f700e528ba67e2dae461ccd9f7394e6d291f6edbb729788c7b97376bc15b6b8f57d9781ae3eb5c617928e34d6d661e01667d11bcb44eac01e404fdf6919aa30b7d9e86dbe034c557ff5df02101797836fe0b63d05abd448b51a46bc6d2c4594c91d77734584a07059d895a1e5a7c43551951cddf4e7d2970eafdeaa22de2759bbc0cb2eaf33608b37c33890c217669a6ded8b5b03b9641f8d999e3544afbde4025c6a1c85affb2a9c4e3e5b3fd70d1717627840cc711766d4300bca2d0177e83f68cab9535adeb2e9c21d6da977163fe09c7a3bb9af5af1553b8df55683e3cab54e738182b499d8b2c76c44b96810794be3e78855d4ad43a2e4bb235b9790002695eb01ae5d9af099d6917cca3a8a57dbd166d32b818cc22ff419f096ccfb2ce5d797c630b6809ee1783372666ef25ff2fd6e98952688115ec200c9b28493b5858c002bb44fb9382c14a8c21865d6f633c075453d441da5d1d7263b196ee81e881bcabea389c350fc4487f84acfb6cf10b301558e5acbf41bbbe0b145dc66dc600f4dfb79052d7db480576197fd002f0c5d996602eb01808ee8d6c8c26d9e739fef007ecf426612f7408daa6a8e41aaa918b3e335755cdfbdd66eee09930d88aa339894f0b1ebb5370d914f4ce3f9d6598cc759807a3c762b1d1f9da5dd226021656cfa97e45cd8f65008acb9aea716a0127a359e6a3ec859156f5401bc7bbe780cf3fc1f4a0802b7b05a6f2b4ec8001f521303c9d5c25aba67e4adb7a187d81082d43611639ba6ed971cf33c34db0719c44850ad4d65b1d18d0607323cc561ad7f7424f8c1764a2a8cc6c546f15eb041d17088a321a74240ed5a0d0bdeb2df814b5a454fd42670d0f9ce71e624d1800a1222286602f5a06b01370b9f17ee964e8f0d03812c3a9f7376ba75941fd1fae4fee3bc4061df30b271439f7678b74a67b2e30c372a114aa47c014cdb72be8565002bc0ecbed297d9b606453c61db506f4fa2bbdc5e48f6d682496416ae15a40cbe60b2a57a6e2a2337d5792b73994cc7bd929edb5950187c21e957f02265fb3e92392e0535008c418f57c7fe1e9f93f3a55921ce8ba54417c36794d2803def9d240b8fa67f4822972503ae1ed34cca856f5cf12065e6fe3bff4aa74847ec058adc5e43e3a9938196814f87f8223f54ffa414697b8863ab5b2e191bcbda2eb19a23b8076754712de22cb202249bc5d7c4cc26073a63c9dfe7e8494ec7b744883db29f368bf06f8bfc9fc1992e909ea7774ff856d778780084a651cce68febfe07d17a5ddc1dfd20385304b970b1285879b811e4fd370cb193f0d92282a473976b38dfe9c23d988f37dee1ef957de17f6e9ce91df64fd667a85035cc369579c8fa314666f8cfd02d7dabefa7f7475860a857048e6cf38397343cfe467ce37d2717533451ca45229f7c32847f30bdfbc0c98efa92bbf292d4ba1fa90db00eec1645273036c14e0e39a61b56d1bc3249f4349d11e78dad7284cc80bcae9a88453b2625b082784af1909dcecd4bf454d19f9c1a00e93c84a13bce08af9576e026ea1cc73bc159bc8b48d5b56e4a93962117427e3e145328ad7e4100084eef96ffc7bb94388fd02329a6c067906a045696efea423fe56c0a05a0c81f4d576f2d3e4865054d2a961f5b5ee06dfa06b146c1add60e7cf8e1993867c5bee53b700360e0bba2d03df5f1aeb5d83101cd34c72fc5982b7bbb5e66b427bc5766679cca162511e568468a4a726ffa493e0a09684fcbc331b2a92ce307552e7157683fe1bc8a2a558bc0cd9a74d1e92ef569a99a9024c9a9c84ee7aeb094aea52eb9e3dad284476ba1292a61f480075afe488fee9f653e0c1329191a4e5a9f6b62e92315e6a80bb04f0c4b219ffed7458f4346c4cc0172c139a43bc61f1b732c8a5278336769e99bfbd68a69c5a2fb774ed648cdb49e1a71925cca32c15bec710b924db3d34e63a72e04729b1410d678a37e1069d77f8785b3bf3ed0c3904dd16d253e07c8da0c6a5c329e45f9cceac233a73819b33a6c9614581430a45d29a63597a3bfa671364e0cdd67eae53bbadc65de1a5db6631bfb4a93f4c2c2170297eb46294bfac883dac6615a0a64e1c93fb0bf51b67f6e284dbd1f2b17cb626b0ef4dd391d442477990f6aff2507539854ba9758b47cd01405e23651902ea3c583f8b95dd4013983f15e56d1bb3b159ac3ca02a9c81d1d61ac6095f2dc5a6f948f5d56f1e0b05c3b7c19c15c4d7e8c5305858dcf71feca83b99eaa795cdd3a7a999952afd3e020f0b1f816f94c503c638273953442805c1cb622e06f822578ca2b3328e21e0f1c660b4fd453484eba2ec30ac562aa50367f1a63c44fecd1cf05ccc146333f9b92ee10a795d4b1c86a175fb17af519dd0e3d5ef7e2950d5081dfe6ba371da92448fb3a85b808296be0dfb10e3246218537da0c45b7c9642055ab1194780bfb1793301160c7681f97a2ca5f8797e051f747c7aae3b07771cfaee9d5d685789614061f1ddf507ef4da2489c3a3f84e1b81b2a8a3486909c6cce22e9bf6ebfe1a78160ab847dfb759b1da7085e9f009fee30cdf9dea5e0ad3a6b3ebec7c1806f8d247958930b19baead59110ec00b8e6c69baeee34febf518cb88a43fec962da1a12f42092092a6742b150dc6dca765f4a441592bffaf5306c9d4da1ebee2dcb5631192a0adef623ab992b95696400b28114490d060149f3e102d1ff1799a8e94a6a2f9f83f245972e75696366381e8673f19486917c8442f3cf5c8608309cddfda680a683addf6ad22d536deead9a8329c43c25e9d16ec4abec375d481dd14e77cb526894778c45a0aa31dc882b3b52aa768a14956acf221042aaae5fc60fe5c1c2ee0d3db813d09ed24bd7bd1ac89bfeedc6781dad6f042bb7fc9ed3951e4ae2749cbc07d83db2d68ee88713e30a052e13387c0a041610023477572ef0c524e2c8a49d783fd29450c7511414ecc93941cf2845e3d68bf1a0a26101f741cd1bcaa54dd91a559a1d1363cfa5489eccdf3f08ddfe308b974d0ae703c3b7efffd8a1f5e09875835cf6274ca8623661dd9e31a8a0cd7a8b02cd4aeda5c6f56221036f9fa5010f2fe2c694682474669ec21e1e96b9da473d9418669a8f323902fb443d8be43d72c3f23662a18d0360bb44080eba704e220b14d769d8082e0c37574112a1e57326a555ee9add2936ad222b0409fc0c51905c4cb1588e59e2f469fba5f6c9efccb13fd39544064236d4393fb91844d70a1b99024f3da4cb777b00b016f1eb4c709df733d366031e2b5d6a48d0427a17a24a28ff581f01a41529643e3c0cef428672373f520abc053cd11c0df090861541a5720b75078f2ce385fd6dc14ebd1a37b666bdb737194191b6b657c20850190db5dfed4efc35ad0a1734054ac03d1caaf3eb76adf602195397a2eeeeb5c16b3101d86f8a06db6db2676fcd8268588f08b03032da4e5fd4aaf9479a1b9cbf52d312c357d12d69b501fe178e0e50f4bd78769cb8e64718bbbd660d23f1c733181c6e096ecd7ac8cd226395109980faec23cc97d27ae91516b5655c501a3d0603339f137c24f4defd3b1e4f1bc9fe5365303a89463e3d3f2db97f9cea3b061e5c402d48497ea4948d75b8af7746d4e570c848daddd94a7c47f23a35b9ff2b656a6d9e0f9c8490d3c4f7b81cebb90a9a54137ff35ff418b5ad882190850bb3c277e07cd23fddc281eceaa6fe41caa6595b38663a9436b0d3a8a2b913160aa61cc9c14ef8f83242874b750bbc3f20b209cb608618444819bc7e688c2734a20c5da9399de9902b16ce29c16dc0ae643594edb265f636d15b5a77032135a67bee6c5f70f00ccf6f483dd0f55771553d38e109578d3a337a7f93dd9b00a3353e5331338dcfcb7ca7e0bb873a4e37fe54c2d86776864e03eb8c51f657b2daa99344946db8c28d617ae43295b8dc7a6f50db614e38d6986ecb8a7b0c60be43ca21c87d541b52bb44915e89439688a271db8b6408c507823cc282f965deac455f91e7d431db06bbee9355a8d9fdda17cc9adbc9db44a172347a7bb349f80547328aa9814c2367f62729d2779f145b424837d27810dd2ad21f987d9002d64fb309b5176ced19fcd4b6fbdcdddc049289ad5a795aeeba2c09c5c7907bd7a115f0adba387e5ce54dbe65b07bc5daf40855c2aad655bf002e7feeadbd590f81dc66e640159de0b0e21afaf1b714df0d430f50d0f452c9dab99c62f20b13f39d2e7d7befb4b2c3a244513e6599b33476cd1d1f73d83a566e54c8e83f8391cb1e929d36711fa64be2faccf9b5288a21582ee9f73c8cf3ace4876b4a3c2bbbdf2b912edd6b5e5fc1998cf2f3886d81eddbecd9a0d317671365daed4e900d7976edb298398877c76dee832af3876e81e2269157e1df817cd519d6b6bde331b4d98c7d43126d74c5960a65dec35a35704662a5ca8409d21c3927022e5edf9d52512f7a9830c55c408514bd7529a8ca3862b6ae9a4ff8132e86b7e6befb2a5b3d24fe32fd5a36382283351057ee1933bf7e4b362e0b544c9a05f30bcc5a6c735b9a222cdb5a680f52d695e8ebda567aefe249c4f080c78348fe01f8c2444eeb96fdc3f09bf605e9b8c65bcc9bb407a7aed5d7e14775f7c220b80935068177cdd5930807a3f7b2cf3c9db045cf46d4c0e6a01d139bb38c10097d344b02d9912100a61af85d2419c7c6a1bbdaed5663cf7e8c44e555032f76ee93a9c11c1441edfe7c214b2f47e2dc3e1ca5135ead5fdb5edf74dcdb2b88fab443911fbef9313bb95d44898326b5138c5495788a136eed6ee1d48296f33ea744d514ee4f5209121893ab39c08b38769892b492d94f380c96dc8d5eee25fa82869159b537e5707b03657fe34e3c160c4a1d29e8b42b6640be16c6f84c87639562bf89fcdd7b0f7c621ae80f9501f5dd8b3f1d02816da091ced8a8d916e322e7c1a6cb4cabdb8e201dfb0d46fda47ef2413eb869a9de8d08ae6a5b88b6ffde80898f482b08cf946c1d50170feeeb5852566321a49546d6ac4614068d92a34069a4c228245c1dc96a48612df3d0a02b05b0f6813bac6d23867e1ed2711499efa9f88792bc108ed721877578790b89a114393fffb7551a1b9c3fcfe6bba2a894486f26ae7d8aea6399c3d52029076f6086d785c49ffa1766f86f716bf3a697d74ff0e6a5ee33f918dbe2ca4c8b2c1910637412f87b022aada2f84a88a2872f5fc562119f9773829beece9a2428e3515ab4f72cc1d4d51c98a0c0a3664fad38d5b2afedc301b34f97da6d8dd18792dde680481c4a30dbb4cefcb1c32c82807ae01ebec33ab35926b2a8a9ed7b30a3865bcf4f2ab91a7cbcf8beb2f403c368bc291277da2c35cfd0945f680049ac7c1461a9f49d371720fabdecaa7c139bcdc85895c27cc0107b15e60794106482874fa2171fbfebb12f38c69083a48391176414b087ef1ecbc7bc50a91463f43a2affc320b8d6fe6f113cbab124b47c2eae59056aae7c6fee1a8f794bd041205dcfeb6fcda72b97d92ece425875f425f8fa6ed4cb1f6bdb02db540af8b0f41072dddc4c25d406df78eeb8068c5eaba779646d29dbc304898e74d4aab59cc3ed01bc9a023027aefed3bac1ad55c7232939521caba3808fa21a4cd7028c7cf5df92d3ed3af6896d1b73f8b0e0bb98a2d4bf2d45032a3f534d2ecb25ba8438d30dae8c9d9c80e0895ede124e46c7b971cf935eaed978e999b353598579a5b8a5a0dc4e71cfd5164bf09e6e63888012d8433d4b20d49664a9fb105ec0e7f8e5b3bfa582327cfd11fbf93b76b74def8c1e58455e629c8b9acb4eee429ead84a54493908ea84a01bbe1a03b90113e1a0d8d3534fe3eda5f7147d4746de77352e1a14425db9be2e8fa450e28263a020b7e6b0392927a361bd364b42a4863e0688213f9ecd1d3ebbab86e6b899ffb42cac801e9e584df57c6a76b179839da9dd06ee0da6ed8170e7fdca5dee7631aa65dd19710b73b35e668d5a42447a91352928f5010325931f3404e328fc9da5fd5ce8375a08f1f448a0a445704be01d7a6b4cbadc3c0bae74105f65da7b76c947825c5e2c0f698d3ecb2deccde85a7ee41400c3d1aa16502a0d4bc6e4e39817f36687e2898730eacb36b8a4bdb250520cc3d394a3e5cc04abab788acabd881eab8a1988d518ee995883a301b23258135efb43a1a5779358634b54260e71bd49ba6d7fa5a13cf91571329b985dd0d85f451acf7f58c812b80b9d6d2d2298be25aa7138cd605bf6fbafb3f0bd1326678269b2d572505fb0afeef23204a9aae13f1635c364b50e5e985e9840f4749b6c293744045f1eb6f39c97ea31410620fd02683bae0ff1bc968828401ad2e4b88cb0385eba6a0666522a90f5f976ba8337fc3af35723b8ff4557775bdced05f61fa3e7638637b9d662c654a5d8fa594a48a8e8ed6d447d4ed162d63c05873aecbb90bee2f64cab9f9bfc7d6a7e60450e95750c9a4ef6b113c156cf71335605f4d703495d791d5e1a743955c4582d1018a50d007a7a9ef6f6ab8fbd9bd4bdf9b70857f1438d2e33ef72098833d4d53d20fdbd8f1e8eb1a15fe69a4b0c684378aba61b5135a103df871bf98f4992dd4e901622e2f6e9e362b808f2d2437c6b253b56c9e3946312c369d865d56610c9a6ee84c9b6842a889db79915fdf17fb961fe90e012f031ff62004deae529bd1ee8a4a01e7446af35c4b70d902866e0a2c15ddb0a79d99c0e3df2d30549051641864b1e9da6df065f6a3edcedec445dbbc5e19b8592911fe3d9ba0e218b78aad6026a46c3c88dbe8a10c78d8ba3ea3568e212590dd7e72c04a7be65ec06f4f930ef5acf2d4403463a3ae9a5f609f9063e9878a9efb42c4ed54a8860a1462a70169fc50e36b3a02bd45b0dacb968d14ea17b8cf4c7d1e0f6fa14a0850de369adcba6018a7c9214de0cf3ac18525b038d35edb7c0129b95c2d7988f597e493300d494c8ca6b69b1eb38976d6f3d5b2030607181924c9bcb20f268ad446ef22727c5ee63548fa507c1eba8aa17e6d387e6b59982f1f23ce1afdef792dc7c78a671141569af65cea6f09ac9eaa8eb7edafeb9e83455900989bdf1b7d8981347417b539c54316a60eff5ca5db7a8c7976a06c1c01e43a27c13d9df3bd6edcfe888b4e905bb9129e6635ffee6898de7c7e59d71d38932a62f20820bf626740ec6dcac58c3f83500d9a18dbcf6e8cee88abe015e753da9177d3054ec793f915c8ccdc03769a293aba52b0d68f15df2365a53f0dc27841d72f0b3b105279aec3584ccaef969334366f3506d9788418e4da157ea6f8d051645243b34fa93b0db265969b7033532baef2eb21cdd0e4bf9bb0a3a3cad08291a1a82273f115039e4bb6515770960196090c1d0a98e05c5cafaff6b86091b68af4f85185dfdcf6eaf4152607d608c6feaf8573c724f01578889fb7c44f8496c2c60c77f002463e781648bdb28acfcae9082594625748379a8e488dd081f147c380aa3dbd419d03d01a18bd60733334e27cb429e21b2fe94b297221e3dd20f415889b4bf383276c7b664dcf197b7e2c6e73f9d95057ef5312c1e41b054b58c33e48a7489ab22ea20064af9ae689f6dc1755bd4db3f3ce9e77be67223eb3e2dcc82695ddbbb5f8cde77b05c7ce86e56a648ac82c13d615f20288c3de97fd06683b8c2fb15d74cd13b91219fdda5891fedd7ae21f79ea0b763c87c0f817120c8f1de13b6d88d7f79ffd93b1e511e843c10b8dd3ceeb16fa53ac232518c7d83c78f88d82b844c6bd973b6596267b1e42da752c62e0744228b0dbc5bce5ad38de4c53f8cc3b9a296624fcf0906920e2d872a4bd59fe1956deb64fd34b08d31a3932b78ae19d91e83b6dc69c6756091d4bb11eaa7ecfe43b648d92b79b2841679653abab888732eb849b24d1e2943db5e4be6d599afcdcd7025c2cd774eefe053dd7b7c38ba1841a89d59bf7caccc494ebc21834742c0913004ba39d9e0212de76e5633ab0928f5e9144b576e7a5a7a0a8e4a8a1d60874d8a5848170e00b85d989a53878c0035b9de50ff9b601c8edc3624da40a8637240c3b2c4db703b25fddbd40bde5829bf1c1ce60ef20e0dc9ee4632494d64d622198086e90dcd09ea9d45cde7be9c00358b0925c201a4b8ac3ebf192016df33174655570d1460c776ba5aca6f8ed40e29854792d130d0c7a62bf55bf7237404b245a695a985d82e7ab38f6c1be57cbe1ba93cdfb5062e953864ad7d26f9cfc59395e8e556e89f99473758157559129a8c457d4ed607fabbe3473bef48004ee02bc5b0a89d9323826ca44978f430122dec187d82ccace1a627622544c2ed7dfefb438261d63c00846b98d7e9112117e2bb60b1fdf16b5fde8533fdf03007d97c829dd2a39949b319c46387f8649280439adcbf12fcd9e1df7d4b3a8407f5ede3424325e07f32b7bcf7c2de29671ad7dadadae984476f04338ff64f72c31e27cdbab1e09ac08d9ae886054efe8110ab232bf9e5b4599133552de3b14efa0723866c98c75535b0b916efc95eea5b1a6686eea83815bbf6fbcee792046b05474db7d8361e822752aed2a57d926f4dae96a09364353ad6f6c9fb4d6fcd697d4522dc7e386ab41dd9f8a637906e0fe123b7facabc719643172a84bffb50ccda872f6edf0e306d91bd130c26b0664eae4046eff52f71ba78de99d5cfc35307a583efe96b2604012b827a7ee34bffae1d5ac00a932bba09f0c39478e +Output = 51b560fe5c3cc4c9e457e65f15f1b1619d18dbac916ca83a67a4d022301d5229 + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp new file mode 100755 index 000000000000..dea7a1fd1b31 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp @@ -0,0 +1,411 @@ +# CAVS 19.0 +# "SHAKE256 Monte" information for "SHAKE3AllBytesGT" +# Length values represented in bits +# Generated on Thu Jan 28 14:46:47 2016 + +[Minimum Output Length (bits) = 16] + +[Maximum Output Length (bits) = 2000] + +Msg = 48a0321b3653e4e86446d00f6a036efd + +COUNT = 0 +Outputlen = 1880 +Output = 5410fae0cd08b96ac832890a2f4caa8b3d404e9f71e5ced4f3ef34f15c5aeb7b4c69ab3526dbe59118d5db5eb90f11a0e7f0aa5e10f648dace0e043732f6e948c8cf02af090107e3f9e8e07be835d0cdce6343248df67c669a36c6d3d0dcbbbb7b135e1751f0ed01f275840e0c20309d77ac802bbb0bf991373e7560ceb7d332bfad7ae827c97233fb79b66f01619759e2c7dab42a2ef3dfdda8a18fe4a4047de51279f513b318e7765b52f71575df51e6720936f68d9e4cd8342a8aafdd82d47a2f08de05956a5d97c6e72d2c77b74f5a3cc6d68c3549206c8485fc87b408e19ebbb7f9c0027a492120bc + +COUNT = 1 +Outputlen = 88 +Output = c5e5196c3ab04ecc27892a + +COUNT = 2 +Outputlen = 1944 +Output = f8060c419a1e4485cdb5609422f5458301930135113255b8abab7642a651b1eac08aee851dbac8fe3d524b790c9f253e5b77febebeddd7ebf6a9846a44b061300179d25d9857ab0d905e690effb90828dc91175587ea9cdcbefe95e1956027f3ab67d458434e9f56f82dcf66ae2c7a3fe9d9181da2863bcf4da6bf22f2e2be0c0462acd91884f5afa6d9543c56796231170792c1a1b59328159fc6641b8eb5863cd4c75889641d739faa25c2b398dadb4851dd6f1a8b75586740ac6f729dc23ab352b37a16ad1d37ecab7f7e43e2110c42582b8549b2d9c7482027b07d243dfc11a3725700e46c14aec76323ffcfd0a2dafe94 + +COUNT = 3 +Outputlen = 1392 +Output = 0e10ab21963f355088414d490def71baa424010d2712b8290628c5c4e0e0295750c9ed7d949e4f74f539217fdb0add00b07766af2f6e513165501f828bbf1aa078a207fc69ae5bfbba8c610fc87fbc47c5523e8e10bfe19c5baaf0e6567560521c8fbd54df2a1bc532a6baa43fc94150e0d486d5d9544f9b88f60d031c0b851ceaaa4eea237dee0313ab3477d299c29a711e3aa311f9be57c196d94591a8ef1a8cd6a7bab8e55c42b21d929e10cf + +COUNT = 4 +Outputlen = 1232 +Output = 38e5deee858c8113497055a078312ff0cc3799bae73c8da78b1ae7efbbdc943167ff55aa8971c1aaa62e863ddcb868853ba135046ab56c19ac6342b070ad350c11d0ddabefc37b3b78a0b9a0faddb8cfc18ba86c08c7602a094386a95f385fa97e5804f09e176c2bc3830e2683426cd2b24ea052f079f33d635d7feefdf216f8527d5864cf8f53d8b2360b897e0ad196db23e9982b1276cbdbd0 + +COUNT = 5 +Outputlen = 672 +Output = aed2d53614e6aef1fa0d8b0c868c8e74573116e69b438ff3391171b5ea282cea2f16bf8710cc49ac31c1bf08baac6ccf2c958f1d6483df2bd1a86632f6658c22818108d4f83c23d9b9a282353a89479cd4ac3963 + +COUNT = 6 +Outputlen = 1896 +Output = 909112fd7352c3c9206236b6a35a5d008c6afa20f3c6cfd60261afeb8680fa12bc21b8c218ccc7583bc0598b10fcb63b16ea4d1f72f53300950ce36cea3d90e70e66e45b7c23c82d0f86aa464d4cfb0c53d44cf54d33d3ece8beb324d0050636a4efec3f2877be13ceeedb918f8c2d44951af609aada60e91c0705329b6d07953c2b52d8122cb13e9b82c79ad24dc89963e17c27afda3256fffd8062935346af2aa00497f25c3bbfb658e1526e61290c2b4ddc541785d97f3e7343db162280c5a7bc459ba4f3168d30e5b23e7b4df749f7e88c56eaf29076a572b3ac9b58d6da3ab08f48580f1cf6b3fc395bed + +COUNT = 7 +Outputlen = 736 +Output = e6d20a4803b06267bfdac41a8329833a3f7daa2e5e1dd926f6b4a87eb289eba20971d4c36636f77d445b4549e61d049764252addc7d6a176812ecab4fe83bf2d5d917b5b10ac75e5b14012ebe808fd25ac2eb62b843fdfcde43bb41d + +COUNT = 8 +Outputlen = 568 +Output = b9fc4262a74a41a7a2b8ce6f0460168ff9c00b41035b68de0a5204d59321e156094dd6e541f852b7836c0d5f204c72881f335f0684b2d0d1fe828ce3bc25823b9dbb90da4b6a5e + +COUNT = 9 +Outputlen = 1304 +Output = dc9f4de31261721f84f71dda1a5e59d9ee2d8c9d18d8f323a128bfc482e0e3c1384fe0a53cc576e373efafd4f8a2950e6843f763b2d087c2f2b3f389fb28ae50e5c630399f88f3e3f77ef0ac698dcfaef0c67aae5dee35af1a4118dca0ea62eea3a0ad1fab6dd51169af6d2aee52e5710171fc410e827aaf8179978803f5126defb07c5dae2f7d1e07a799896f3dcbf9845fcd415edaade887fc13ed30537c512e84de + +COUNT = 10 +Outputlen = 1304 +Output = e899897842c3333a64ece6f309cacb105692d087fd0544b6e9adae07ed7e0cbe2f38080cfa364a59db46448175a06a33a08db9fba19791a56c7101c4f7625d5434668755941be20e841ee267f4d7ab5074620451f2105782b72781feef259943bc959a1884b3b69c2ff13cb450bbbc78359f58a6efa76e1b210a551524cf9ca598b03d4de87dd5bcca1f4a901989ffb55aa11f168019ef40e877bfc635d0261e5d3045 + +COUNT = 11 +Outputlen = 1560 +Output = af476f42cc65bf9c074ad733f5699e8bc830664f8e961fef43bfe5aa3f73a587a21306f19caf929e9d19bec8cdac2c9532933d9f93119f2f11b683fcf317eebdfcdcfe116cf4c91cf865dd34ef5b4a6fc76d14da41b937d55e57a8a228e96d157483577ab6b736cb2e6f15a7c7b199756e1a504a42dc55002a46d863b8af18257bcd126a8d6035cc75092af61133eb6ecba84dec6f584bd6f13b7255004fbf66eab11e09b1d31f311ec956f51b94d47b8d45e5c79fa2b0c8fc96c654ffd2c94bcb4dbc + +COUNT = 12 +Outputlen = 1240 +Output = e70ad186b79360b35722ae6486021cba3f919f1d102517bb19c10e9e10a792b186c6e74a5abdfa0cecbbecf756f23a655ec0ca6615678ace8f23b5021e4c27e0343a5288534c81cdb7d2370381ca6fda17766263d0d318c363d2be380293875473c04c4e9c6f30591ba6af2fadfdb8b0c2806502cb9f4ee20781cf9173930784818a49a770c9e46d8f360e3c2b5ae764e35c9df8110ef940ccd722 + +COUNT = 13 +Outputlen = 1032 +Output = 5eea9e63f17ba71f816338fcff5421b8ddc0f9650eea81e7b7c1e13643995e5f2593aeef4b736084e1651e23ccf4bbd02707e2459354528e5dc27b7e2c61676878fb17dc3ee74df1dc8eab2e375e5e657ebd5c765ae2269c6f10603868b030d0234fe3890dde01e09d6629a95cdcf1793941e3fbfe379e40955750e9d7fd2e18d6 + +COUNT = 14 +Outputlen = 488 +Output = 8a67bdbcfbc701bc4f2cf877a9f1449c4cae31f74b8b02d9b1e6d2cac0d53f45ada5ca9d6a64e379386f92d4b902c755c2cab1aa05da658f54b03a1ce7 + +COUNT = 15 +Outputlen = 1872 +Output = 0224fbd36d4a39e67f1439ab7cb45031338e78facfca780f1a79ee976c83842105845368111394dfa9f44435a0d93c294ac6452a83e9ca3f80d87fa15a807dc4e7e1db1607b9cc67afe6e50cdc1536f94c2989df9470768fbe1b68c485ecaa20e15ace299f437edfd783a41f94dfb100e1ec3c4ebd68ccb9c7548a36a5fbcea1550f92a9917728095f1b72e92cfc7e9696494f8eb423e9e4a26d361be8985d077ed210fddf33d0a39e507d04a5152d62894ef88ff0f943936c617bc0b223003616b95509b18edc45547fc156febf124d8137b5a994620e46ac5b04300503a0f7891c5650047570205311 + +COUNT = 16 +Outputlen = 1272 +Output = 7e265aa3a22aacbb42e61d48f87154ac6167b36137bc938fa8afca762addbb843bbbbce7ae29081cfdefbd67c7c34efe8c4c818c55350eceaabc7b2c44b56fe32ef692c65d1f0a10284eedd8ea8a451294575f8319cb41907e98c721a5befc602a692079c34d06ce0b472ddf23baab7aa17ac080f3f2be890098739a54b3dadbaa308a53d0207bdb76973f3f7e3501bdd522646929c7eaea90de10d69bd87d + +COUNT = 17 +Outputlen = 296 +Output = d27bcaeb8722264ae65d590496cd4fa4bfb8bfbe7c23ddb47f5016bef76fd68ce4971c04a5 + +COUNT = 18 +Outputlen = 368 +Output = b358148ccb40476ef0f673c28c52cb5873d366f9824b41b57d055249a28298703f7b99452a61931157fe4ae777ec + +COUNT = 19 +Outputlen = 120 +Output = ce41fb641dfdda66e7bc30b287e4b4 + +COUNT = 20 +Outputlen = 1440 +Output = 133a550599987a693cd0065563f31653e6c9f63027cf2833e5594ac696249b6a103754e299326a3d10b33ab397cc83ff2d6944b335a48a8fd7b4694779beee2a9e4c24cf5b53b1e7e69b1112a866d1d1e9941dff6956bf934a78ef263927fd4e03d79f749f37dcf5dd6ea91bd9b786709aff781b3656adceb2615720700ce1bf42f0e9204fa66371dd0f2ea073f3bd767309ca2df59d9d0349cae6d45ce43918d77d4b51f541bc700f4c59214494bd1e9e0eca69 + +COUNT = 21 +Outputlen = 216 +Output = 91c3792c6e035f93c031fd3303f4ed67df2647d9b2abb75e4c4646 + +COUNT = 22 +Outputlen = 632 +Output = d4e6cd7b44d9032c5d5296937af40bd409e4ec368c385f6d06aa3d49b2ca192beb8bf925d70e3236bf55056725976bb78e5da0fa0c57c94a842b618bb7d30973fb088dd14e999730c6e466b13c3259 + +COUNT = 23 +Outputlen = 1232 +Output = 910812965a85e0fa9c7473b575e11327133a0979397ffec1d6a9a7ee0aebf1e3085fbe6d23f18850968fab590cb52f3aa5dd8b9a8b0afe0fa8df78066585a6a8f6e5eb470e0636087902669a59360d187fce49c0845b7619ca73012f2cdb84b6b653e6f53f0d1cdbd25d9d0579f721651cf629dd0f8653d26d1dd17b816b4ef15202103767e112e0549bf533636f4c33748fc6c8f16bd1e39059 + +COUNT = 24 +Outputlen = 856 +Output = 44c115b9b5c376b3b148ec53d03647334146e0dfef8bd0fefd8818152ff8dc2b705f0f10643d91ad3759a08656b41fb142b6c4432582ff9d3d1a44aa0048f5825d92c942ab28ef415c2e5e7547c5eb127c3da91326c922d59708758a8e5bc807320ea6f62d7248f3943235 + +COUNT = 25 +Outputlen = 408 +Output = 90d91938641f5d827e00b8cce18b24ed09a0cb946a4b52a2c47d20454c640b89f5b1379b8aaa46f3097a17470ef4f244dbff60 + +COUNT = 26 +Outputlen = 1112 +Output = 9f258b52c0b685b6c4f09d4fdb527ddbe04378a8589a12b1a5f11067f598c3a193986cb60dbf0732bcd49cb10f5f38e52255ed99577f45e7ed5ae4fd2027ceb5e3566e46894d86f78dee54c17494effb44aebae912a1b057f8c1205dd97871c191448f4d9ff9100da83e5841adb07297e8a72282764c217ab0a1c43cce01e2825bae302cc6a38bbf0cb303 + +COUNT = 27 +Outputlen = 256 +Output = bc7d54432d8445f792263d0dd18a998910b064e46ec9aaccc4b1290c5cace670 + +COUNT = 28 +Outputlen = 1672 +Output = a0b278626da8dddebec11c73355080c4fb436b3102e705a80cea7089c1d02987c1970cc74b4c4b80b08bd51731474086dc2a5ad30b9e51f1ac78b3e46b0a19fc78e3106c6153bf33b0cbeeca2178384b038529aa0fa9194165edddeb682af291b81c0fdaf5f913310a221e4d607f93e88ff5bc953f8472ceb13c7eb61218c1866d92f1ab50bde3453375945aaef55e2332cc24562dc8a292fb6eae08e257ac0e23d5a002cb7e7c7a6e3347909f708f2311f2d31bebd7964e6db47cae8a6682a8a4fa6f347c92e497d0785bbb05b115994b + +COUNT = 29 +Outputlen = 1792 +Output = be2c9ffb564806ef22714cadff10ac09b53bc2eb7b86dc6e2ec7650cf3f2d6921acebe46b799219ff778dddad4601a6b7a3ad37877c8c10bbc00754a144f251d62c8f97fd22c27c9276b05a31f4aa05b8e508a593feff6b9d6602fef9c11daf6fbe1354940da6c674740ac6ea431c59457c7034c5af018cb7ec3fd5ae52d3b389d8b46823d56be8df810d802c4a982760d136c3a3a5d0cf8952cc88d16a707059d23d41469fee8892bf438fc39f95ba6e1908a96e7e9b5c06736970e7ae33a20abb80e7c79cbfb4090b5c934c26021c9013ac1a65165611990f420db2ee812a3 + +COUNT = 30 +Outputlen = 1816 +Output = c7378b09d5f0090dffa3eb7151a6c62dcb584c6ba2fc0dc21e0f9d71e5812fe148b08eb4dc229d8d52831fed4998100735829bc0dd834ed5d12004cbc585e5c608524e9a76359fd153854c2614a4dcf060dc308d867c7e6b282d6f593c2b0154a65d4567f280e5d5ac78a7b217b4467ecbd219696c8e70f775cdfd8384cb153c2dbe213770a0fc41023ced45d16a331e75ca432db7b85a207a9785aa2e2ecd40630268f82a433709c0324ccda6cda1b4afda3808f94cf367dded1a5d86cbc448e4237dc8accfeda403f0f3cb17259e996254257d96b82edcf13286a82d1f010e5f0b2d + +COUNT = 31 +Outputlen = 1216 +Output = abaf805efea3e82c7cd6428fd26bc24a88bf6f6d685b11937ce4681324fa0ebf1e77085c7639013631b332345522b3fa4a0f83683557dc497b617e0970b804948082a967e8a0c998ae9cec6fc756c5775881c2ed2984404eb7cdd486121044aa1881fb14cb47b3ef69534c28d1a5a855673454c545033b3bdfdb368571973c0a47157a6474d1d993d40b900084a6955c6256a66d58dbe7b3 + +COUNT = 32 +Outputlen = 1968 +Output = bc24b66cc5234e6a1023dea38fac6c8254305730e5975594f37adb94a64cb59b9a535f715bb13f3139ccea25c456f6654f941b40a75a7649b36c5ef13023dd3aa958bb4c890ffda21d6df2b0bd67b9bf173139e0fc23b7854baecfbd9cfb04694261cadb79d3a3960a75968a31632f336544e160507b0e4cd9a9f2e2014cd3811176b5691eec7cf34991ac773c88edd3aec0aafeb78fe2a3e195c79fe1f9a296cf5a107f51ff9f18e1e3a68142fdf60738b45e343cd4d9f1a0c602869e680773bd0edcc9c4666550178628959126e0ffee7bea8004def05ff7f4311c219da1458f76270c1044ac3b0b1077ae3bcdc2be6dba07c7dce5 + +COUNT = 33 +Outputlen = 168 +Output = 92ba6a7f42eb72b593bd10952a327321b2855230c8 + +COUNT = 34 +Outputlen = 1760 +Output = a3d3d1b5207dce5b3f1ca70f7f6c6221b558348caf1c7b6da61b3bef61a4d533378e8bfb5567fa30682bccff02d3913442ede3dfe04c7d76a345b0a797769efe440f88d806482e2f6b2b8c00c61fd0d47dd05c491f3ff24b93b8d6e20e481303d89d10d344b7ebf82030a02f845fd9b713739f4dc00dc443751eb6007ff4059b6f5d2575d1f59cac700a734fc19e7470b1a6fbfa4acf111f79abf8a4ecc6f3b438128eec8dc9d90ed9e3f5833de6422fab8a827463fa232f80b714e34ed16209b951cc611e53854b6f1488239142e6701e9b7709d42a5aff6c749850 + +COUNT = 35 +Outputlen = 416 +Output = bcbc7f49f7757d1d56c8a2971371c6d4ba8f5fb87a730921254049b127e599b77573a6d5a6cbc1be4ef1b8c7beca81741fb84237 + +COUNT = 36 +Outputlen = 1288 +Output = 71da416b98ad0f00752cf1977809f513695c518f3a5cd1e256f7a6dbc9c760da263c9d53c827f35f4387a4fdb3f144387ab6c2c5d7b80b6659863424fcbe312f65d06bb68a4129ff4ad4099266fb3620a49b6bfbfc8752947424cfe1b97013d6db9781ed3f10ab36da973d2efbb5e0e9afdce9079d401704b6d78afb0147cf70d1daf40a4ce2173acd77e985b213c65fd1e50df2a47397823181bfd9e1fda120ba + +COUNT = 37 +Outputlen = 768 +Output = 7a396a8806fe1079ed8adf38b62b2180d43913c008f0423a691af17c49e288f33af9ba6f62b8a0fa645715f6ca17dd6f4f061ce1553923ca61bfe0b87f20f5faf9a154381a28a0be5ba17c1e5a85f8a8f2c8e981c48deedd3f1a09ee0255927c + +COUNT = 38 +Outputlen = 232 +Output = 0212cce901fdd3182ec3b4f06c24c948ba7d7f495bb7c07e8ee52e97b4 + +COUNT = 39 +Outputlen = 1064 +Output = 24a8375c2343f7099fccabe337defa640ceb0bce487a465b49c1242130fc01a02d17e7212082ee0fa3e06bdd1a0263f259b4f6d2fe92e9e6ec11ab382560ed252e4f8d261c0cf00f97f27a156214582ac5f11f9c60db9c016e056b42558f9b7b437a6d74c9e2efb5cfeb4d00f310abbcb2bbfb5c04f5bee2d551490980efaf53b7d0c369c4 + +COUNT = 40 +Outputlen = 536 +Output = 169b0921ea737777407e913c0474fa545553bebb797ac93cd69a4066cd2bd721f3501d89acbe6e517e403b63681235b6c0d9429fecfe26f48b11e17c393de9bd6715e9 + +COUNT = 41 +Outputlen = 1672 +Output = 662ddd89711ddda41ca3974604614ffea8f3ffe80a18dba7bf2fd352e0d277d79cf9d8a7fa84281f80d9272d0e4835b8b7180202b9ab777a37931ea8a100a05ff5b96dd7a46799b19f32c44c8767ac152bc4bf5464e9b509ff196a7a3a0f77feca4934a42e5d3d3bfd09f98d14ab3595569c6b8094ddcf60337aee6a9e52382537e070ea69ed2c910d7bb1531d59a2ba60929d9ad6eaeb0cb23f62f62ca4a2e559749f6c581487cadbdd38655b7b097925f2f26ff8386df2a698cdd7ecdbcdcd64d0bab6ebc1b61a4bd9a68b1bc0f154c7 + +COUNT = 42 +Outputlen = 136 +Output = f5c20780719524f3dcf5252bdc3304e24e + +COUNT = 43 +Outputlen = 192 +Output = 4bf62c64543d9b256ae96c43bc7b46703825a00d08439206 + +COUNT = 44 +Outputlen = 184 +Output = 1eea65c030df6c8aad6d0e2c3480c86ede63be12e7d444 + +COUNT = 45 +Outputlen = 1200 +Output = 27512e1c4c5c45760e0c6ac9269ea8bac5ea42333422e38783f348f1786108e0e7af2a035c89212125563f75a3b479727077609f3760d1cdb7b619531ca62e999d462b7db002603e9674b9d8dffcee9ced6fbed319951beae8f68954096009e5c38f7a66319b076e9c2b8d153b7b125f9dde4f455a6c0ce57497ca0fd415bd9663c053cd00bbae9f4f4d8cf58a39a75536a80b8c3375 + +COUNT = 46 +Outputlen = 544 +Output = cab4cc0fba89afb759f69846e03524667360a52f617ce6730043a3f948040a901c8851819e14ca03c28a444a19e375f9b2e3e9527c927786d5ad4f940eaa350efe6f499f + +COUNT = 47 +Outputlen = 1488 +Output = dc0011e830f88d68a5350721bc1aac73592aac95a1f4ff09b617a45eaeb5b9dea095f286bec235961b186fa2b6b0df3f029eb4a61a037bc13d28abc890ef31a9d37848f97986852fcc5b8a4a630df6aba6a6d7fbab670206711067eb21f6818c284c7f83495f5feada7c3993403444d488f9d03aab512351e456a42a6358ab588f12d7d7767936b4a2024bba7660aac3acb54242a6a8a1606b2ab55b0dc10c3730716b7f228ee64f679e22ad7e37527e1a9f68fec331d3d4d187 + +COUNT = 48 +Outputlen = 1512 +Output = 2b8978e91f954adc860ed7d79cf416aa0b5ad87098074f75fd8cee3ab20668beb464aef2ac1b3661ddb03115e5599f23b6383f4d009999053f4acb7d70aed083111607bf23fd60838fd737a059bf6775773d7db1cfed1067a1bef3b2e7f1cfe9bd8d48eb62f0d6cedf5fc20d73ae8ae4854a9109c8665f726322ae13e6bf2ee02f95e0c1887fb516ff0c53cb373cf517f699410d5a66928d88596c1ef0bcfbce8b6d43192d9b8a5793c78583a57ddce5940d4b28fb1d0e5cd17e7c98d7 + +COUNT = 49 +Outputlen = 104 +Output = 44f29410850ad7eafbe4844320 + +COUNT = 50 +Outputlen = 416 +Output = 9975a09bd78673f390d617543dae60b8d8a59be0040b96742979e5ea50535ce5b3d65a1bb0322bfe498e2956abc4b28ee613960a + +COUNT = 51 +Outputlen = 872 +Output = 152b5968b40058ef36c2b0b85395c33333c5143625a4154ff8b2e38cae6b67080f7d5f094d727cff966808ced3e344cecc57c4faec3f5ab787b68cc79b5e2196d9acd5a5a2aecba21aa4eb8863aabe051b1f637584ba5d63495b8bd4dfb5107f8f7f2a1bb10d2db8ef061d881a + +COUNT = 52 +Outputlen = 1216 +Output = a7c2fae554de75b6bebca3c04702fdd42bceb39f609756aa0e79baad6d60068d1c97b77e14471208d204c292787981a1193d1bc8e71a39df5587068308c58bfb198dd1fadc52206db3a957c8058fe19bad838d3b73387caf31fe5c855ef3337911bf294b817f482f745499c66a4bb06800dfbc8b6f0b5c828ac4f3af559ce3bc6725e4fc04774f7478bb0f6ecf61ad9fd834d7e77957c30f + +COUNT = 53 +Outputlen = 1400 +Output = da798fed091508aa7b457fd3e59ccbd61e2d316d632f1bf38515bc743a7b64bf21753dedc40212265fbbe1047eb102aeeb09f5798c138c30bb920080262d80428af72c2988a7783f50b9fb0290b1cfce3908f7e7be0f545656e29aec07d95e0837133b69d486917192997d6e56839f01e67936e8cfcc871bd9ec8a6c8ccc5fb6b2210cbac6262c7b123a5cdc5ad54c203e8a3ca60b72bff9f2db951c03f5c79543f69f373a72df40c120536e56f139 + +COUNT = 54 +Outputlen = 1904 +Output = 5c7a777762c77d0da9c26019fa5cd7be61d4ebdb50eff7784f2bcd8e2314932db583567edba4c22c951c9b99ad77222b0a7880aa800d3264a4ed93423e8d665d6cbefcb3cd7410d2aa7b91661e0acb0b904f2532c4411a901aeb1b78eff691435a8db4c238e6e3781a1f4bd1fa41dcc1169b6bd37f66163fe03a787d09f2cfe4673692a319ea117ba9e3f88d2cb99b5e2b4294848007901fb4ae4a7acae859b2d0ab0a4ec91a2d427d0ae02cae02dc9021c269caee7c089e6d54f591a403036807f2c55371e0c143391e9d0111d68f5a4d7c7297fc0df1324b1e584727d5edf74fd295d48afe09aa015248cdabcc + +COUNT = 55 +Outputlen = 1808 +Output = f1b636cb440a888570d4b6b1283ac9a539ecc518c70a705cadc1ae585b08f67ad7a6f819b735d0a0abfe5f6de6a01dd41e447e92d0138949dc0547e486abbdbab8fbdf6e0559bcc6edb521d3aa14aee746905fc441308f4e20adcb2385073d6b291e4e5c03730141714e5f4bb4d4f9e0ba32c7f00f593042515908cd8a8ede0e869c183642bbde70dee37763e25ccd0d58000098a73b43b4c12561712f772a78c9f991fa14aa92e7b6ee17c796eba642bc02e867757a186cfa2360a930cc63c0c4513da1a255c4be9ba12448eb59f687c52614276f777e80266a2b070685ca9b1c64 + +COUNT = 56 +Outputlen = 736 +Output = 7e16313dc07a0356d0bc8a933ce08a45ab560aa21ca0da25b3492bcff61d417fa2b19361a84b40fa7d22e97687cd4859030e320dd4e7f968ec6b7078f73a34f9b8883c8d622aa623dfc673325950ced8ab040f52eef29dd8aeb19992 + +COUNT = 57 +Outputlen = 720 +Output = 5bae99cef46718d8b8223cf95a0f528e25a5b5786f1af36c142e52e050c03df0c69b240050439b29018589a75d630dc280e8b7489a0848d32d8174c6523efbae303bf1ee9b1d859e0e05e08f3db0edd8c4acd30cfd084e801365 + +COUNT = 58 +Outputlen = 968 +Output = 01e55ba4e739cd380d5e87a1d8a02dd14811806180fceed243e48af0923e0ce57bffad439a66175696615b9e89c38182e18e6be7701030769312eada0c0d1745bd4f0608ab71c8f3a021229da7c5de84c326170f6813bd0fdedee22174a89bed3688d223cbf7ede15e6393b99e9508ce2d198c8d3229d57c6a + +COUNT = 59 +Outputlen = 1688 +Output = 7aa64b4cc420a5b95d7c2323e31aeb0cb2d61a09b8451051a22d666e7a81c17cdc67c6615677de82e73d83c71ae6c05a5048e4b242eb80f881327396d0eb0209590caf25556f7c0fbcee4ac6557e9ab2888f7598161445c5fec22ad5cb318cd073a345e19fd98c6ff9b1f89c442212f93352f166a9101de4a1a80cf65ac97cfcd93c1779c1225f1875b9cd0decb7744530bc0f9753a3edcb50b9aa3b244661c3e2bc906314f6b446bb9b5840f17f67b026c12a8b4f29820a8bd731cc381845698afc4a71fe946896be9bb2fe29484a9d0b2498 + +COUNT = 60 +Outputlen = 272 +Output = 0a21e5f227925c836364647b8788d80cc6dba2342193d07bb4f61cbc0a4e72d007cc + +COUNT = 61 +Outputlen = 840 +Output = e493f1ea5f9b472b89b40eb49b12594fad014fe6529c3f9d2b46677d5a8f7d11d1a156596180d26c251e524d8be5a574fae7643f969869886c8cc5375ea473aad8972d3b7ecc2b71c901fa0ca03ab52404bd9d5f97d3636941ce62bf6cd914be367aa486c7b45caf70 + +COUNT = 62 +Outputlen = 1096 +Output = 8c9cc58de55b402c3644bd80629f11780dce8d426d1c4277ed9071be80c80efe32756c4e68bec4848539f6f3f4beebfaf2fb37238778725bea071ebc8b6ca8b6c0ba8a77065bae7238e8169dea89cd0985fa6859bf80fb65db5a3c6ca9446bd4076df81e93d0def29e047be68e10404eec72fbb8fa6b2e7178ada15027cdd53daade4221ddd2b4b9b1 + +COUNT = 63 +Outputlen = 1792 +Output = c27310e5d7feaff5fe5b18a52c302b6e7ca5cbd8e24af50644fef02f56ff39a292c8be5765cb5be21cb6b16ef6b5e879d9421c375cc45fe20eea485c6fc8dd1edf791b203ecf195abbbc7be6e09ded4aba52c14d4dfc7e753586947d67781696c52faf38144db1ca398d1a789d3aee5b4d60867eb59f8eae0a52fdbf959cbbf87a2580fa455abd7026fe4293d5a553f73eccdf1dad97bd3f6a83b8609e512b8de49034b5632f92d0d3c3095a25b8f31be4da99478d57dce3a298ffd76633f08d62f27ac327dfebfed4937a82dd82dca3a783c3d5924afd9f5deda7c28e5fff37 + +COUNT = 64 +Outputlen = 504 +Output = dc9c5084fcb7c89aa770dc68719b9fe4ed88fd3e5de9d0e6119f07a2b6c9da161d934e7026d82e22b8dc174cf722f5a4d27e420e8d6628f0e9e4c282b9bdda + +COUNT = 65 +Outputlen = 136 +Output = 39a30ce532befde1d7ddbbe4525c9a6fee + +COUNT = 66 +Outputlen = 1640 +Output = 91711fb97fb0ef1b9a551d28ce5c44a0a0e67333f3b4bb3a1c6117a1e5134f8772048740c29331f10ca99f551880675316317852b52c9e1f7210b1828e6674026895706ac9a35430133843bbac200f36fc3824cebd3e0e96e114a231ddbe8a2cc29b29e1b84b37b9070ccb435003f82f6c0b09744e4804137be904f5772c35181e3f3ec8243b40b4476a2e8fba10677fe55ea1356d5843cb3b0fbf8879b27993047ccbff4a6d48cbc78354a0c69503fb9db5967b835497f9895e75a127503ebdea5ce7998c971ab6f9b80a7a3d + +COUNT = 67 +Outputlen = 1752 +Output = 6467a6ff4e82450adc9fab288134b34b8ffcd8e6bee38e8257e1efb3d3ee8cc19fd9bc80da346b6d53c1c82498c9e299dfbc9f9b442abc42616c29dd7722f45ea0ef5cba3bd863cb8495397917ff3b08510b1cfeeb6b59aa35fa9e71b111606ac08b0361a34fe4e40997abdd7eaf1add237fa17a080051afb2ffdb5010d3753453dc4c82b8150ca0b37b17031b18d58a4284cc2ce59507f09c1a668da6d0c853a38fde60ebd10eb570310503b8d370a31229f130fb2d002040eb7772f014bc7c4bc7f96d0880dd9237e1a773ea114126c136c25b8feb2e94756d6a + +COUNT = 68 +Outputlen = 1128 +Output = d81e7621be3b1f896ca06d3917f74286c445e0b7a771a9c20d5c1aafb307d6bd8d642495845547250a6e5c09b100886e75a9d648be75436207d98c0d696fe919596fa1fa5735a11aafdd64af5108f379f119203dca4c5837aa14e226983dd21a88f0df5fb161608ba65acc05b3d4f8cb1accdf1b728fe75e08da55b4eb4210f4ca39bb28b3140c7b27dbdb2b19 + +COUNT = 69 +Outputlen = 1056 +Output = ba5d7d44a1a9787c113b343fa6d49d4650e28d93c6769aaf130ad6665a03d152629a1b11ba054681f28a430c9f070d1c1ce351371805c63ad94c961fa27cc514831aa8f8335d373a2ed119855701cb1ee1c9d54c6576c0990f22d58051091d59044a698f064557613749258474f289a9270939f6cbd304d3ee9d1fb84c2b29382150a781 + +COUNT = 70 +Outputlen = 1944 +Output = bb059bc7956e9eeb1f5ebcdfd58b820a41768e58a222fa235448a22ae48ccb46adc06cb5178a03c291b0d4d8e0549d6da2296d0b5ea3b9b8f0ac5d9f284cb0228c12e1cd454fc1fb0bd5d866297392074ae554dbb4dee6c377c4c669f532c7eb53d7b49cd991b5160a6fa6b0323e999e77fabb89dcef1c200ededaf2e0fcde892c7b5889f1c159884ce103549fdfa319b3ddd6cb3828b0222c249a7b27645c41d3d280b603ab6b616241c5d4305306e67e5635fe8755d6e1359092024a3ba327a282e6907a80d0865f7369fd2f0b4003f5d6a9aa2cd85b372021d691cb42270c79a7161964a2743873dd4ed1f08ea73c05c407 + +COUNT = 71 +Outputlen = 1512 +Output = 59af1be6ceec69aa42e1bf4f32a03e4f24e6421bf44e5a4c347d859304d2b7e95bd569f3e485b3c078bf6f40f79c0b82d8db0a2ff3652ca01c45810ccdfd3cf9969e7e46f85c202c8ee16e65d85fce460d1fe4fcb43cb54764785c1cc068eebb30be38bffa37313231e4e00b656b35e4ed2697f27ea91eefcb57d3ab8bc2104d527d5b4fbae8e4c569a36201e636544d2a4a8fbc51476cb6724dd060f0a4fb2e9ae786475128b82a491eff93b788882dc41fe7e13cc1c4165278d1480e + +COUNT = 72 +Outputlen = 1680 +Output = 5bebc88d02e23b332775afd9eb98c04139a262acbff73fa7bc342aaf4628d6484df38260ac297d11f95081033134a3c58a5b82c471c8848fe169f0f6bac8a7f9b251164870fb9301add607cdfc766aef33520f3e0cc229baf2f21440cbe8f731cd31c08662f8e2d612df48f3e0930e1924761e26a8112d22dec0999db4b643df019ede1a05ac226841c94e5a36c546eec56bca3b434c34a4660ca44079747b519ed32d4908b4953174d20b3e4773d1af45a3e3d3512581376fabcba6a41cd07c1c6969a0c7b52b983eb4788926bb77b16a52 + +COUNT = 73 +Outputlen = 1144 +Output = d0be68b4a3387b8ce6fde05405ca613b24ff5652e68e3cbf9e1e0bf40d3243fbfdcb64adc6bfb971fa4d955eb726ded12d3853550c2ee48b96bc1410f250940c5d3198b7809f75eea7651e202645f45c68301c324e24710a2b45b8dfd3cda02392a39344421be848b20f4b809bd6ac02905bc56a25a21d834b55d26a3841ce2213e4db6752f07853eb45f22fa6729d + +COUNT = 74 +Outputlen = 360 +Output = d5d1283a32d89b5645c583e01319cc3b2b535429b1a058ddc9883b0b3a7f9d0e72535839b5a2dc7a6590c7da36 + +COUNT = 75 +Outputlen = 1944 +Output = bc86a0b42036a195570e99d21d05bfc8e168cbd265b27a30ee408a5fa8aeb08c06c23d27a9af713cbe7062d9af36b833ab109b7a50b3c5a6bf45a98eba5058e7b41f694cbdc4cf279814de1dbb61cfdd4d1a5350e3c3bb1fa810a3a4615542933c7719cce04107ed894786b6e5ad2671ffdc699ceb5af356a80de98c2a3331e68ea6b4ed09cb13e6fc30f029b5c1d5a79c566e07051f626a490128a1ad87135dc1129bf555c569d09e0f6ff4ab22c8420e7c3d3a9e5a7a0260da7024e4f99bb2ff88abf4707a879f00a5ec2030a7c6761c76ba13dfec716628e416c3767f70c4771b43f5ee6b7c95957d0e5c3f40fc859d0048 + +COUNT = 76 +Outputlen = 984 +Output = 719b2fd38b022c6ac468b91b4c882a593919e3affdfe0b61245c6fa080731bbfb9dc9be6341b4093d9b106624f5e0bd45fcad956a8e52aa40a1ac0a86d114113222ac35e7a7dce23ddcafb32dc17bcf9c7f79d846d29ae5a29301da38d90348810aa82a98431e306c7ea949c783e188b9351d33f49a56b659e2828 + +COUNT = 77 +Outputlen = 1656 +Output = f31e31e0c235cfa5b3983db2cf371d9fe6b81844a729024a95ff0cf20034fa57a503d3e9f4a7ba699d607ef61e7ea4d27d16b30a35ca530c710c07796f5f8614f2f3711e0b839191122e47d29b9b39813154cfc2cd061751b46e38810ed31e6ef30abdac100cbde9d61b7ecf14701bde65d59f0e30fbc7818fabae511564bb7ae77de54920167f08c8e2ec46c0d2432dabb8f3297ee28e767374ff423a0c928b8a763a01139fb47a53f0b1af6e29ec870b1e935f4803bb73737cf5ca70314ae5cc6b32fc0645e7345da5e0d6ab94b1 + +COUNT = 78 +Outputlen = 352 +Output = e0318f83da775d94de220c9d2315689f5cbe959198abfc8abb2841044dec62bdb08f6051c0a50b2c1f93301d + +COUNT = 79 +Outputlen = 1520 +Output = ef0e39b04fd1e3b2ee6d00c50f9cd56909fa7c7d273fc52871451ccf8367252cf46390eaac0dd547989a9838e30b7bc30851f6a0b0973926a08c7487d37329f35f5ef70edcb84a324d8ccfc25ea0bf26cd81b966dcab453e3d398ad6a6a61c3fc24866705419c04928f1a06ab646ed451e1e54e1fb2c1eed2a9c7e77a255e9869026308ba2bacfe47d7305f247a50a7e2128fad4bbd965b1e514f102d79e3b98b4217e6994881b16336f83bc0cef24d96166dd8b09ff694191c52c53079b + +COUNT = 80 +Outputlen = 1352 +Output = a4bc8fbcf838fb6d22011a1975e60139db520085ee47e0a5259645d57ef748c32825c120e06642cac5a7549f289a9b4ce378daf7408ea7a5ce5d11781429ffc34ab24083fa90d92c75f66070998c3595a536fa24d3b077f94a58c943a61b5d82149dc616f70ad073a6d5f185ad302763d61105e3c7f49d32122b20f5d09dc0e6c09d7378767f95068267c57303d9d0cdfb33545e02c4155ca16523e0795b693fdc95c8c8c380ffa332 + +COUNT = 81 +Outputlen = 1776 +Output = b3183ad27a974cedc7e5132c76ef9966169601941e9c9a306fbe9879147dc7c8b0013663cc00766ea67733f0713f187491114e48e41cdd98d0a4a8bcbd908aac11655a2db7fb630344852a9b6fcd6ddd0950ae6d0c0d2ee1a9bb9aa86bdef0a9a398ccd05926bcb692e96619b077692f3c068013bf110c10c62f9b4f7ae615ea7214cfa2bb0ff45e4e72d6dc501380676b63ae59990c424232c76d720959393ded7f046be997e5302c2b16e5dfd0f59e9731c21c82f1a1c921898ffb83f159e5dcc3e159ce6bdcfd513d8dfa58f31ad4ed2c2a30204fac6894d3ddab5453 + +COUNT = 82 +Outputlen = 392 +Output = 922bd8ebebad0076fc83a8876f791160ba9cc1b659e7076befe83ba93cdec912c4bf7d44fd7a76f73883ef88697441991a + +COUNT = 83 +Outputlen = 1936 +Output = bf3c65854260d6d8562fc0ae471da21e51ff0e1f41f578124d42c296da8ac20fd93069809d6a2a1b5f605aba8b86ff0988337630d80502646c2804021cb6604ffbda677ff7a396e5c469a34e79659ed5ca0470f14503ee4c5908dad21b6bf1d63caf235f9c2d37477207773e4db84b0db6049ef26b0bbefd87027fc36920ca1e5d9404511a098bda51863f7e644261af793b493656c24da80e60c0d9001e9fef7221f84d376e3c8b1168185adab6af91a779ff07f46f5e8a6b7b410c39950e3b53015564c8c73cb0c6a825db098a805adaf5ffd0494766f33c01d31693615e7ae5db6a47d692484e0071e13075c3faf81544 + +COUNT = 84 +Outputlen = 1272 +Output = 83385cc4d361c1639639522dc3b1ca9f33838067edf21def672c85b4bb4904c0415bad1076a7edae7044961615643fa570a6393e08e8da0ca810d81e82836d50a26f83025b476f9b554f6b220d910fcb684ada03ad3ea07e8762d57944936b53ca09f5efaa613f072e9d9830d069921891eb88c2060cb95112dc0bc45672866c806f8ac124e95f709e53706f511d744340582f2338b91eb61b3d87f6d3049b + +COUNT = 85 +Outputlen = 992 +Output = 07d86a336fe92e7193bbab0c1739448bd8cf9614c4162b12ba0b2bb47395b1507c1535f75010a301fb7a43f97f9d543a686ce9543e3784a9cb5527c35496f4f91ff1b43cb5b0962633b597642787d8234b555f8c5f639c2ca4be6b39d5d8420508804e0f22140787cb113433c1810e488b6f6a43a61f478ae4004935 + +COUNT = 86 +Outputlen = 1816 +Output = 72df76979aa8556ae5ac3002574738ec5cfcce61773bf94f4ea1b8d592c6c90f67a985efd4f951bc82096a54af8e9cc9dedfe12d3bbe75283d1bce87863b3cc47272b3a8494b8a6e22dedc0990ed9f970eeecbf93d0ffd26bdcf9d748600934d54c201e19e13907ec35f3dbcac8c6a344c5bb2406d9d1172c7bdf39e717159a8f992874d1c0c6535ee467884ebfa17e1da937df12071e4f8c5b71983c8233236dc54d8aec5d7ede192a594887c47154dcd937a54f92a226b777e94e2f43b272d4848f83577fcbd8ff84a8776b56e33543a16574d36e59eeb5e26513c3d0f69a204242b + +COUNT = 87 +Outputlen = 176 +Output = ff2bc49e63f2c112eaca224d1e05289097f58d16f733 + +COUNT = 88 +Outputlen = 776 +Output = 18441843fa85bc280cd95cd3f43514336f278cd286c2478f59900ffce123105fbaaeac2dc619e5a4b962cc102aba16ee394ef88ab52d7db0e05c5d3d9ddc4260ca5d2c067a240df29698f549607488dd3e350b02809305b171d2e36f6c142aba38 + +COUNT = 89 +Outputlen = 1256 +Output = 13431cb556b144086164c7740b1e504caf829d3ad180717b0c4d0d45d1ba2a813ef390ad48e2f09a8bded0ce9a1f35a8151bf0b46f4175aee16ffcc0320b9c1377614a15e945064fa8fd5854cb990c4ab7fe995fd359f97f90c2951aeda3a8604b51ad0f0833aec68db445ed559446d299405536a30c5fefa47b535dd42137dec6fcbe93a6bbbd4553314880beab69b6baf2fc7ea63ceb3460c8f5f6fd + +COUNT = 90 +Outputlen = 576 +Output = 133f738cad7f785c8abc94fbbbbd62b18aba30137f731dfd902b890cfb16ba79fc2f4e40bf7481214d7b5e9551687506eef536a664a56fece61320abea6bf18812c9c774fa49051c + +COUNT = 91 +Outputlen = 832 +Output = 230788c864c5f06365b33199248188b5e8c6e63837a46cf310ce10e462fdd44b6e7a5664b10c922fb9a2eeba84d1cae65a1f5529c0a60ae7723d1d86e1d04d98b10ab987be36ee033902ef0b6396506ecbef9df318c6bc9990326169ef0f6fd7b448f93dd61e8171 + +COUNT = 92 +Outputlen = 1640 +Output = c4aae776d5910d08bafd34b7b25826dfa37aa0706dc1f644f13aa9e177a5f095fde16eda66922bd75f15d852d908d1eaf4ed34d4edca317d1a7a1ef000977fd4b32c9b45d6bec0d802929d95b53212cf89354ce41be8d96f1f3b5cd2ed964aa075313af3077f083139b93fcbf50bc7232623733989dfb3805c71f29f4102e259956cef829c850f691875c7c12822d0522dfda684cfd918451f89497317253d4712171bc7a26ac66fbe4bf6eb82d819c8edba3eb9c9e6f6cee6c7b432c1610e2e8586b3eaa05dfff639409cb85f + +COUNT = 93 +Outputlen = 1544 +Output = b6bab27670c2804f21873b2dc121373a434b3f60eacdbf90846839df6db36e9e4405303f26b56e3c06b26f38ea6f98ec8309f9226e98a0a4c804544c37da4db196df7c17d7bbb28dfad2cf04ec171032125747050ca2c2fd8e6651ef552454c3d6514d8a5a8a3b96c442af733708e716c3bc75ec62e0ddb284e55c9d661b2e1a643cc2259be676ab0eba26a054589d8cc93e798b494a1ecae66bc4eb047da41eec7ab15555d8bc47a9826dc707183be2e0255bb5bdeae241d51a75d3e998013a83 + +COUNT = 94 +Outputlen = 1824 +Output = 9d225f7997efda57c4168b8cf2ee4b032928a79276c8bf0f2d9575b93942fd841d75e53125d15276e1264390bad0bf156a2cdbb29dd2db7ed1ad7e111d768e0e8078e1cb4e9f894c4145967244a4286be982c3906f00ad95c24cf735dc2928b1a3a81ec0dc742b4030bafea10e8d735fd4c471a0a346e00c288c71aae631f93a8978068045aba404ae4439c9162bd61ba56754e225134af1ced182dafd9b37ac337fb61977178aa07e1bd57f1152bd868aa3fbe7ce7e3990a15a85ce0e90751a52093f6533da4effd7313c2c6407478f26b2f2bb50ccb16f5949f549066e5f775d2ba89a + +COUNT = 95 +Outputlen = 760 +Output = 9d341f3f4ee4dae334b81af3557960af0a56167a76c9668c0de3cf8d608edf8be69a2fd6398517cf3de5c5b0e9c7cd38c38de345e5dd5771b510cb1b95b73f88f063c4d4305b4597093e9dfffd53d68c63fb0f9efe16c429d6d55dc5e2e8d0 + +COUNT = 96 +Outputlen = 1552 +Output = a67ad328a09a2e724b6d3e9da9ae7876bbf2b77ad510d26b5a5d6f7de61fdaa74f2d615a2785f3adaf984a845c6dad81f09a7db3cc82da52a954ed7b4c781a58cdfa6c9ac4c95a4b37af8858493c45ea90ad311d902d9c00c6834ff80b2fae9e579afc289b3417345bee3d71e34cfac3ecd409a51d0cec24596a95aa0aff85e01f9fdfbf41acd12849dbe2bb683fa498d8acdac13d393e45efa3ad0ca7699b8f359e34638ff477d00e9be46d6aa8aca10fc33ad3bdb8ff25844d16b3766b0ecb55c2 + +COUNT = 97 +Outputlen = 736 +Output = 346324149ce7fce0316759dfac98865d6d0206202f50a0ccdd15f0e8a20fcb335a1ca7457ffe619848e752b017e50486fcac55c47eb336ae699734fad2c086f1fab18c50b0d80a0eab279b511d934542c6cc6b38576b6b75a87a4793 + +COUNT = 98 +Outputlen = 856 +Output = 5e3be720dcf2b08aefa72bcb6b26f7660de376d575b9fc73066031800a891184aa5e534f6d8d622901ee5fa6afcfc0c454748ee6c14805fef89e35639c9b35df11e0741880c103a4a98ccd0a37c6cd4a374eda616eb3e0263ff46f4ea9b4853a0777ec98b63bced13574b9 + +COUNT = 99 +Outputlen = 360 +Output = d4c8c26ded38cca426d8d1c8f8aedb5c543541333839deca8713cfd8684480fe923f57c3a5c89cb61427c220c7 + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp new file mode 100755 index 000000000000..c4926b6fde00 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp @@ -0,0 +1,1100 @@ +# CAVS 19.0 +# "SHAKE256 ShortMsg" information for "SHAKE3AllBytesGT" +# SHAKE256 tests are configured for BYTE oriented implementations +# Length values represented in bits +# Generated on Thu Jan 28 14:46:47 2016 + +[Outputlen = 256] + +Len = 0 +Msg = 00 +Output = 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762f + +Len = 8 +Msg = 0f +Output = aabb07488ff9edd05d6a603b7791b60a16d45093608f1badc0c9cc9a9154f215 + +Len = 16 +Msg = 0dc1 +Output = 8e2df9d379bb034aee064e965f960ebb418a9bb535025fb96427f678cf207877 + +Len = 24 +Msg = 21eda6 +Output = f7d02b4512be5ddcc25d148c71664dfd34e16abea26d6e7287f45e08ed6fcd87 + +Len = 32 +Msg = 4a71964b +Output = 7b7e12d2a520e232fde6c41dbbb2b8b74c2912fb3f15404f7304fe46691430c9 + +Len = 40 +Msg = e82f4188ab +Output = f4bf0c76beee2abd6156b41afef4142c3dbabfede5b9ce2ecd282fb294669731 + +Len = 48 +Msg = 8aa122803362 +Output = 46bc101b681e53d49f4c1b5e42f496bd29b2b0f767c6e42bc4ac5ac317d9d41b + +Len = 56 +Msg = c5f21a07c8dcc7 +Output = 569b1a32fb32f1a7fc9e35baad586f35645c5366cdfdfed394076bcd1801371f + +Len = 64 +Msg = 587cb398fe82ffda +Output = 54f5dddb85f62dba7dc4727d502bdee959fb665bd482bd0ce31cbdd1a042e4b5 + +Len = 72 +Msg = 127373351d8eb30829 +Output = dda6a905234e81b47780bb0834a760ecd297068b28d4e00faf2c5094ff869e72 + +Len = 80 +Msg = 762d668ed04fb3d0cb55 +Output = 2d182bd68eb904023e025b2fdb8303e72f7138705d2780dec2cf939edf023764 + +Len = 88 +Msg = 6b901a0168cb0b8036c62c +Output = 2b0509bf707446f14685d202a67d338ae9193eca3558219db54ca07aec176669 + +Len = 96 +Msg = c650c70e625d363f95b0b986 +Output = f0a6c64a7d0a95dbb02478644d0b49f385e7d9980f47ee01e89e4b7daf857f35 + +Len = 104 +Msg = 95a009620e91621403d47581fd +Output = ba3598c9b5237f6e843265d677e2575c5d76dd0b56590c887060150e68f19952 + +Len = 112 +Msg = 210c88cc83c306a8313a6390be03 +Output = f44825f2147c5fb1848f1ee21503a0884ba801baade4f86922abc19474ae75e9 + +Len = 120 +Msg = 765db6ab3af389b8c775c8eb99fe72 +Output = ccb6564a655c94d714f80b9f8de9e2610c4478778eac1b9256237dbf90e50581 + +Len = 128 +Msg = fdbff9bf3fb910a92d25651ebbfba365 +Output = 89f2373e131a899b4ba27f6da606716a5e289fd530ae066bb8b11dc023dacbd6 + +Len = 136 +Msg = f9da78c890847040454ba6429882b05409 +Output = a84983c9fe75ad0de19e2c8420a7ea85b25102195614dfa5347de60a1ce13b60 + +Len = 144 +Msg = 8f84a37dbd44d0f69536c5f4446ba3239bfc +Output = 05ca835e0cdbfaf595c6867e2d9db93fca9c8bc665022edd6fe7b3da5e07c4cf + +Len = 152 +Msg = 961c9927de4557805a7a03dc682c9a548c6156 +Output = 7cfcf4b0aa6aa608b055a466b66aaa2c99e401c141c5746ed74749c6d0dc82bf + +Len = 160 +Msg = aaf1f64f3df3fd4d422acbcb5491ff3835b57e32 +Output = 333d096475b6a6d45c87b5afc7e8cb2284456b84bd3e30a9b264492539ed3159 + +Len = 168 +Msg = b18bdf2c9bbcc1668958f6e9db12f79af09c3e583c +Output = b7ae5f250409a751199901e1aa50b2c519f6b135934a81f2f69dc2159781a64d + +Len = 176 +Msg = d6d82f4713267bff5a486c65be9943c628edd1bd9dc6 +Output = 504f0f9e2c07a2ad8ad2e50723dcfc163119a7136e230f7986f1ec3fc73bc5af + +Len = 184 +Msg = 8e2ed5f836b6f99b642bde5ffeea3fa63373691460c042 +Output = 4eeb5263eaa4cf78d614b2ee5dc52ec0ac61aeef751396c7854b3438c11d4040 + +Len = 192 +Msg = c533de6aca8dcfdaf7d3d9649a67e81b0d8b42fbe8c95c71 +Output = 4a5e7a6095a16e624802aced516f8bfaa3374c87d04af0921a56f8c682dabffb + +Len = 200 +Msg = cf578d6c77d2ffad3171f977e93fedc5c49c47a1b485a28a4a +Output = d8d54a314e0480ee366265d0f79f718f77d44a8fa8dcea3c1bc0a87437ef99bf + +Len = 208 +Msg = 3cb99341f746fa282c2518d840c200287dc40a1da38478039fc4 +Output = 8dac22ac436eee4ce4ca902faf233566a612abe301392ffc1a1a77e4ca7a44fc + +Len = 216 +Msg = 1b4ed0e9f249a36bc12574011cf3a5da8fe62d5fea588e5bdc0e07 +Output = 0f425e588a2095630e20a230ad5927c2d9f28035d27c1c70fb6dcfd6dca687ae + +Len = 224 +Msg = 941be4d9bbc3d399161fb35ed9e8674f1a26eb4ccc51e430f0b77c53 +Output = e84b57566775cc8c64363874828d11475e80da3b604605dd62235a101a098dbf + +Len = 232 +Msg = 0aa29f8a95bd5e6117661178815fc7b2f8c2811f213794cf9c6a4ee4ce +Output = 780fc2a4b32282684dc3f99e83a6443896845ca920932ae8eba997884d868953 + +Len = 240 +Msg = 7ad31b363f8929c7a262e01c75afdfa87020a8383c8752d7cae07feee98f +Output = 58273b2859043f1acc6d6a68f6d95417c5c5262ce653ee466999abe9069fa9f5 + +Len = 248 +Msg = e34dc086477a69347b5d85d9e55345edeeb3fa8e05bc361ae6cb2efc1cd163 +Output = 9076470ef15650b75ad59780b1fb4265838dc3ed50bf17f2dd714d90a02d7d8e + +Len = 256 +Msg = ef896cdcb363a6159178a1bb1c993946c50402095cdaea4fd4d419aa47321c88 +Output = 7abba4e8b8dd766bbabe98f8f169cb6208674de19a51d73c92b7dc04a4b5ee3d + +Len = 264 +Msg = e68f2d765dd0b3450db083cae53026b4ea16de9186ed97ec224d1ab9f75c84f420 +Output = ab529d0f7c3fb4b49e88731d2e4c1a226d328e44829e749dff710970a20d2520 + +Len = 272 +Msg = 0de312610daf8aa96844194ccf5c27610f64f8709ec8ddd67370a76a1b8b61600a8b +Output = 99bf17c40aab71cb82571e234839b50fa52bec5c77fc2c9300ea9d3e142a1555 + +Len = 280 +Msg = 0e3dcd346c68bc5b5cafe3342a7e0e29272e42fba12a51081251abca989c77a1a501e2 +Output = c934ab7f2148da5ca2ce948432fa72be49420f10e3dbc1906016773d9819cff4 + +Len = 288 +Msg = bfe5352ef826e9e6906175d747e23ae53dddf7ebb517a50b18e39f433d500641e7a16479 +Output = 731f8099a9fa3b8651f1be817540bba7453443ab48bc5e5c5281a2ed448ee679 + +Len = 296 +Msg = 008e5ef5d244ff08ed2cd711616e7c1c8e328c2224bd40424fdd434e2b88c4897ec0caafa6 +Output = 3202e68e543c98f5568451d5e29e67561f1c4e2b9c60ce787550a6af489d2b76 + +Len = 304 +Msg = d012dcba9cf59d7b959a3e2813c9f47a0190288534446ddcfbc2b4fcf8fac3e82eafe3105a78 +Output = e500af7b1218b8d0da27a24e9eb0a2054c97360195428fa23ac2dcbf0aedb6a6 + +Len = 312 +Msg = f532d0ece583bebaec55d030c93fcd43ad7c96a493ef15e7d06470e5eb19825fae7d8be47d3726 +Output = 225ace4d5140a3d75993ca8c7b993662030d046fa0201ee9c5c335d92b4d5801 + +Len = 320 +Msg = 39ec2245792f89b768d4873ba31143ea2df07431115d2381487db148dc421b214e3d7d4736b3d550 +Output = 453d2167b544f02ed0d5d5a946ef0f0d306e5d95dfa5d48b3eb0485e43258b62 + +Len = 328 +Msg = 85d1021df565dc0deb6f3ac39e1b266f89ca1012be11c39b7d05975005b6e870aaf9c817286bf16137 +Output = 8c72c707c3cc647418a92b536dbe0bfc2e403352ebbbdc1995ec518f94eab237 + +Len = 336 +Msg = edce1d8e8e3f09472d4f5b0af20e3191880f2126dc1c1ffd2228a1c61a850183915822972a4956205e7f +Output = 18d9d39ebe8ab5b66029428a7962ccbfaaca8c15b0c0cebf48787b18a6e87d5e + +Len = 344 +Msg = 2e78454f8eafde0a104fc9256598588083f6538e9b2890a04ca1c366162f98b211daff80df0fc734dffe6f +Output = 265460bca6e92e3f41530b86ec29ebd67d13c5823587be991f0071cd107d03ef + +Len = 352 +Msg = ebdae37919c11b4a776d05012ff1b77099d5ee6d00c3f427a982c7ba11297700778cd0aa9afb3990c42cdc46 +Output = 2f8de432059761e60a93696e86c7c2bb4ade96461291d7f866c5d0138b215cfb + +Len = 360 +Msg = 58ff23dee2298c2ca7146227789c1d4093551047192d862fc34c1112d13f1f744456cecc4d4a02410523b4b15e +Output = 9569a3bac9bc6d6dd623d7de2fe25d4afeaf4de8f5eeea3d0babb8ccda888275 + +Len = 368 +Msg = 1767629e903b664b9b21dcb43fd815377442f76c7d6af55078c53fa334b8358e425b22894f7d277cb1e875243fe5 +Output = 6cfba012c2fba955e0dd9d36fa211c071b5f3b9c77b76fdd66b414cf8d0a520b + +Len = 376 +Msg = 43fa7c73c6196ef28d3ae734fd808c1d017eb964fd5418df041b73014a84c6a1dcbb99fc8e928cfe35db34bd171525 +Output = 9620f7da5b7410fe8db4e77796f5570d5adef8a34417bc70e60ce68c571e8e1e + +Len = 384 +Msg = 214a531cc2be301b4207399075f90780dd5a538d218c0bc0ba6ba485f079b3f70539b75eb0d839f6cd1218f352541ec1 +Output = d3b4f84262bbd839648c5eb6f8a4ae44b17adb43edfaf252c3a2fcd778680a93 + +Len = 392 +Msg = 999cd1673395cb04fc9bd7cd1eff8b4c0b3c0b6c113734de2ec51abc256eb56cd171d7c8ba07617be6ecb7aef21c71e561 +Output = 204b00fa02d648c19e3ab0638c24f3c4e9ba194e769d6d7efd64ec363fef5a72 + +Len = 400 +Msg = be6d8bdd535df0563225ac28ef979acfe62f98c27f46e94cb189d897c5aa9e0a5d5586d4b4664fc92759d26ef501e54f437d +Output = 76e0c751292827d2d7580dbf73f62a11430ab12bdaf9c5104d39a7c8746338b6 + +Len = 408 +Msg = cfca8967eabe1aab783d5ceaf36d2c98c69af786542ad86e3bd300cdda0b5bf011c07152474a8a25b29e152fd2c44ad73f8b0f +Output = e560b7f45616089d76362f483f585fddc28c8a10dc785036f97ac2e39b615954 + +Len = 416 +Msg = dd523673ef173babb5bbab85e4307fa8da6ea4e183c4fb14796ba4796f617c04cf74e425a29dc5b2b190d122e9910bfb0489898d +Output = 4398c5e810f080af9e464ea9eef7b04e77f24b293dd9ebeb1afdfef47e9ffa89 + +Len = 424 +Msg = a44a8b59aa37046f28c2937158cbeb5332fe5649ea4957daba938e36e1abddc9ec7ec910348e23aca89fe7b5ccb3645002399d8409 +Output = 50dee06749f54b5a6cbfbd14586b0402414d32736a798c2a97a3df3014bf9de7 + +Len = 432 +Msg = 0a231b9764ef6dc4b8a18c0559cf08bfeb2237f9230820b5cea89780151baa48ffd93c6e3771f01c107e49d9c6d60f5a0704f49bb1f9 +Output = 6a932d04d8ae3b27151aa1bab3fe29f653f986bdc2e4e65a79388d02345764e8 + +Len = 440 +Msg = 89db4554eec09a89f9e49f64e5e48e0dcdc36e3a1d8c2cf64738eda2b7d1a33908d8ded878e5e67d998d060e4a882a9ee613adedbb946c +Output = fdd0d8e31ab4502317a90293a3888edce28ae9a5874b716738a93b25db6de66d + +Len = 448 +Msg = 3576bcbb7499eaa88ee7700ac760d69ff359b3f08b376630007807664ff39ecfd660927d661a644599249cd8666a0430f24a152ea953af81 +Output = fb92e619de40ab1be9a9237f7ca19c6c3399437782c9b5037c71787aca864118 + +Len = 456 +Msg = 7cbbce53f62541263f4a13251b6ad9a854b842afb9563f776780674b4708999dd802e3552fc0a2693c01ebae4e652aeed924093a780094812e +Output = c49aa66cb76c89bf47073fae4b490bcc1dd284d1af539522688f26ef57326a1c + +Len = 464 +Msg = a61de3bd9eddeffef1e9fd7cbafdaaf418d39c008cf30b8ba2c98088d4f9dde3abf79eb827d25ec461509d196f40c015880c5994688ea965f624 +Output = df44a9ebc2aab408ddca7fd80061984eeb5e970e6e2e3059faf1cc8c920a4f5d + +Len = 472 +Msg = 7e4c74f480e60565fe39e483b5204e24753841dec9ef3ec0dadd4e3f91584373fc424084f3267b5ffb8342ad6a683c05cc41f26086f18dceb921e1 +Output = a6450836c02f8fdfe841fbcb4b4fc7dca9bd56019b92582095ee5d11eca45fa0 + +Len = 480 +Msg = ee6e76733108bd9eee50a3f0294de4c71672f6507e728ffa6356672be7cc3f316ac2227bf333eb09d141072182857c44d3a32a6049215147c0795460 +Output = f003a55f08375672cfa5952098f9a997b3704d5b54a81dc1f0349850206c5832 + +Len = 488 +Msg = 69e8266d069e9b82a660b0767244703771c3bf264e6c406d5cd97593d7e3284e6d120a98fc579b049efe4953e3dedc425dd311a7626e85bc0dead5bb86 +Output = 1821d92b31e57eeeb7068cd7af50a42b16d2673e4a65f1df575a5155b16e5b9d + +Len = 496 +Msg = e8ed8fc54125650d4d9594478c542469e92e08b08451fdedb44ab5204d3035471e1f7c78bee8652e8907cee1e5d6fad9ca0034438137b585ab2ac8cf86b1 +Output = 845856b1b7a366d442feae9157d8cc59fd6abc0be92b68bb23934a9ff4bd8336 + +Len = 504 +Msg = 4cfaa2476de91c3f90a1d4b3a06cbd5ac9dcf075945ff40554133d3bc2dcf230e4b3f4d633411b2ffcacc3bc07b1873977f34c87f19282ea0000a674b8100b +Output = 073e19f7f56765e8e0170fb597f9533abada89b805d232d69c94354d1fcfbe15 + +Len = 512 +Msg = 47c7ee751edd20c2cb566df1403463a3a8c0b21f401698f468e39ce0fa6e7ff1dad570eace997fe8905d544522eb21bd6278d5cfde299366e9d662b9ef0d2670 +Output = 701bfdc149b2c347220b8ee2b64ff6b3fac3cb0d7c0286f3f476428973e5a40b + +Len = 520 +Msg = bad35d2ea10451fd7312e54d9f763810615475184eb9027f2e21fa46093cde3c85f187216fa45f0c97b4d10ae148fe08994cb2f307b6961d430ea7e34b2de68d53 +Output = 4f69084fd2a053ae48d6d4f3f72246d809037125adaa8b7b4a5e1a2cddb8d1d5 + +Len = 528 +Msg = 1b8c9b393143cdded1f34a02d2eab60a125eff7f0ab28f6ca6f5c60853aca79559d1d1886b1bb1ea7c80f7fed5f94624658530fd587061d0ebd51a2d7e62e2d0ea5b +Output = 51dcd682476e5e06750447943895c0e2f76f1ea3229175f627fcfffd2cf3f494 + +Len = 536 +Msg = 763dd4f9b91a854adbb9dded3814b7dd2d24faf57cb21f60f26aed52473187f545b8a9a72c512f625602d77b17d84790e77e52bcc30e770cd027aa37424058897c3ca5 +Output = 78e0f51116dbb3215fa5716b9040aa68b6dce4d72e0cabb1b375f400c1516ece + +Len = 544 +Msg = 9bcfd0e68572023b04c0f9f249f297b664af7cf8118b7891d5ce46a94a7677d8b77fac8ce46108ab2ddbe579d4efc6bb9c2e8d1d9335efd12f7824799c3ee34755ed8d62 +Output = 577496111e350e275b6c23a06e6bfe0f7ccf312388a1f3958c406f5170259117 + +Len = 552 +Msg = ab5e11c2c23f3f07c9e26895415ba0466582afcbf8a300fc4077ba6d53532c4291a06e44728b453482fd485fa9ce4172b036d690018469a2ae123ceeb578d9ec8300b154b6 +Output = c9b66f15d7075cfe2b90f89547992986f9f4d474ca850cbe9c40ad67cc9161c2 + +Len = 560 +Msg = 33abf921debbda87d59a30e8c5d1b137a41392e4f072ecb038d264c1de9d0bf11bb8836c43b6647a4b4cdd9988059fcfb937f63e483639f9cdc76516d4d80505e06e5520b0de +Output = 5a09deaf9d55211a207ade48a4e1928cca4ed330c0cc3a4b22c1052d7aa3b34a + +Len = 568 +Msg = 1c744d510d32a4def51189ecd2a395c2a0893628d7e6517936142cfabf968c6a034e1ada9ff00bbf07b7004682572be77632b43de6ce5b1539875ec53d819dbf6be1fc656d3d09 +Output = b21bc7a5fde822156691e11a8ba2040f2e9b403b0917c7ab860a28028807bb98 + +Len = 576 +Msg = 7ab4397ee403e4fa3cdbfffe6ec208df114c5868513db11e2cee16c8e2f2df2fa6f80c239af3dabefa7994ed9769ac2b88d10a901c0fa40b13364fec0db3d4a5423047d174b89475 +Output = 4eafd931f87c4130050a4d7e3bb35fcd09e1879762163690abe37d6b414e5c59 + +Len = 584 +Msg = 584f50ce46b7c5a84b2f0c0ac03ae9b72ecfc976120aa964dd22348e3f9b2bbfa5bd0a970144e9ddc959a01642c12e57fe555c57a3b29dc8ef3139e8f91aaa53ba14461bcbe01f1a70 +Output = 045554935fc713437e807694d3eef5e957f1e87a3b5ebb79b1370519af5b4c15 + +Len = 592 +Msg = a149d7126162c2e75e3238126f8ad49816314e1bf78894a48f6e1c9f22627827f5e72b84be2dbbf259ed07a4bc95db092da5c24eb3591b24ca886fc35acc022feae3a8ba1155daca2e57 +Output = e81a1331b73b0e5af705f826d57d1688dcd772de02aea66f2872ef99a1403797 + +Len = 600 +Msg = 2ddfc60c78ea22be50d83d03fd9dc426ac856961c331d8fc72dcedb98ae42470938551f719e79144465b80d6b6e1ac5186ef4a68ae6d28ff9104e391d3985ad06b13628cf965bcd659c944 +Output = 4f4388e341bad4d7ba49192d355d03ebe4b11d2fde616dbe56bc4285479529bf + +Len = 608 +Msg = 5b0d535eda02649ffe1db6fb2d04ece0312250b9d4ef0c5aad719e9e3903864e2e5541450bb47bd2f48b815ebd2af54f45c7c52c05c25d01e82e1c055d8c057aabd9b8d586cca01fdf596d9b +Output = 7dd509fbcb73766c34e63e071b23e9b45da1ff21f060e89845e98aa6341910e5 + +Len = 616 +Msg = af665bdf1d36debb96e2d71ad64487cbc4baa241537d518ba62e7d8777b24b52b940e3027cb8769812377f3070e8497bd61db16fb39e2d3dc3400d847aba01c4a5b5dc154f229719e1d0992f8e +Output = 34ed5b65dc69b4e501304f8c51f6e38c870e34d0d3e8073f5916b61660431196 + +Len = 624 +Msg = de701f10ad3961b0dacc96873a3cd558558188ff696d8501b2e27b67e94190cd0b2548b65b52a922aae89d63d6dd972c91a979eb6343b658f24db34e828b74dbb89a7493a3dfd429fdbdb840ad0b +Output = 642f3f235ac7e3d434063b5fc9215fc3f0e591e2e7fd17668d1a0c87468735c2 + +Len = 632 +Msg = c00da5d029856847c0016b17065447476f6e3ae85b81c25547626bb84531e5d0a93c59f20621fd4e5933e774831f1f17fdd0f710c78f9fa5a16ff40c7ee8992b36c249a27b346b0b0e4ee780329439 +Output = 6aa9521d01f8d85a6f8d58f3a1cd5eee70a456bf12e39956787e929f667c93e1 + +Len = 640 +Msg = 32721a1a9d3fca0b0d61481b7d7a07087b6ea10d2b60076f8edddb5304561ad210d4fe4f5ce72308fddfe8ecf73f18ad046fca1591b1859d0a56a83c5732097da74dddd46cdbd832a66f95d7656b3768 +Output = 14144807d7a3dbc8f6a2c248fe6c1536f191940068cad3dc274636dab236bc39 + +Len = 648 +Msg = 733c258c1e87a23cdd1da23451eee8777fbac178241bef3748c6e6ad160e3b6aebaa597dadb776945e01c564f17eed4b5c1bbb34eebb13bce37d2d93363efe24b660f3785cc9e557dc2e4ab17a91a83d1f +Output = ec95693d4bf55bbd563540bed1270cf20e9cb6f77b9a1ef230019acf2e927665 + +Len = 656 +Msg = 7541c1489246e1a19f18c03f4db53927dd663f0d889466c41fdda4f8ef67591fe7748eadfd377a87cde74bbb8311236efc326016288520e9b31a0494e4283531c5a4a57384129824199c62d2296172c52a0f +Output = d1a7c8154bd7308d39995643b44d5e602c29e28b8365c315ffd1b9de60c98804 + +Len = 664 +Msg = 8d4623e05ac7229b410d9f75fe3160eea549326b948c7f7fa5b72368a8af7cdd1067c007ec0494cd193fda54b60bcac6d978445380d86476cb20587a68916e3c4e977132aef136ac2612725a39c7ce0ffc1b3e +Output = ac2a00b87291855b80224c040e1b15cad763f3b9cf30e0adb2b77d51a652525c + +Len = 672 +Msg = 18acc2bd06abac8b3593d2bcfc73dbe7e5b7500655425b2770bdce64372e6614f3cc5243d712ef60e112d636010c181e7d3fc87294ffba4462088b500312e130fba5f4cfd52f4e200b54cf102685f3b926d458d8 +Output = 51aecbaba3cef2dff7a36bf2aa1934cadced8e7792101275e8a2048c28dffbfb + +Len = 680 +Msg = 3ae735f7a0042e61a574a4e98f70c1a07dae3019057bdc1e1b0afaa2340c49f7ac80984165cd8a2bb20e96d873ad511d8133f0ed4c5e0814c275992873d84bbdf3dbf7d980d469a8e57365709e52e7c63dcdaf030d +Output = 35384485d5ada66c2c90b29149e214daeb3d7244ba089230a60c457039d7b8af + +Len = 688 +Msg = bdce2c134ef75bc6b1985a5e693868b13e8d2f4ae291911ad4d8a46a8520fb14ba2a28f331c87e9887381c3e59b02700aa3a564a84c2b48ee26da138ce2d1ae3c7933bcd65e40288406e56f30d1c48690a4998389dd2 +Output = 4fea5e0e9812f945db4a7a516404ccae0190361fef57358aac9ab7c2f2c7419a + +Len = 696 +Msg = 741757929e3184d7a7cdc8028265c7f51c82f22c8f245b429864c7b74b5805f005377f7fa3bd0fa5f1d114156566c4fb0e9fc43dc736f601b01e926fdf6778b85263c4572807a397119366550476d507306bc6fd34e9ee +Output = 19c3c35f6659e262abdb05ed688955694002ec3b019728f5a35e8906e7d99239 + +Len = 704 +Msg = 36c9970cbf6084743d076a68aa2039eb9061e1ff7a766467a9ee2fb10954aa74649c0ed7d4c277527ead3ab97d5978761d35f3154aca2107489e7f9fa45828616a24a67c98590895d35a34c659ba7fe737a37b0cbc78104e +Output = e6d737c11428a2b7e74de750839d0f1d90d91fa6045b6282f03508b40184ba78 + +Len = 712 +Msg = 07810e6b785177e52d0feac0394f3ecc41f35aa08ff1ed8162575f85888c07f72fd89efef926f37a4e09e12ff6fe7e25e7f1964e5b02586a26884e284756938ebd3e409a9cd4272a5f74c419808770ab4601d82bdf2eaed2ae +Output = 9afdc886f45578b7419edc412cc08c5f6cf11644e6da9e42ccf73e3916746c32 + +Len = 720 +Msg = 4bcd4a38eb4ee261e0610ee67577924cabda9ae02dd84ef98624a67d927980a63280f00644f4d7c9d304b73b8af9c58a6f1840ccceca024372fa55e01bbf07072d3bc192a6c39418523fd56f42d42b6f7ac1e6f9ea879238a04d +Output = 9f356b3a446718eb7ba8deb4baad4898ddf760436e70bbba6808ae1c3a7804a8 + +Len = 728 +Msg = 4ee8f5ef912a50bec6e45b2ff70619cfcca71195af9c96182f494cfea2b7e8b80fe7376d4b66623361227085377c0cf26f9e89128c0f23be568488807ffa974986016762dc5b8ba546c594ed8215d8cb2d85727be44f8a16aa7ad7 +Output = 97ec8257f32671f8ac155dff6b0fdb44921bb0ec28ae6205f115a309e8b7eace + +Len = 736 +Msg = 6d72e6b1ce2b6861541091a5927d18e1a81cd328afb735ae584a1580cf5db072e690f2596f78f17be9a9bb446014513b8e94f33446c39ec61312d4ff1c199b574a2bc8e3ad2e7dcb1ca9f1fe1c1f6f24049ca2d55e8d0f088fd4e3ce +Output = 58ad8d65bbf8aa57ef91961d2455dde3dd3506f75a578938d04108f14b262713 + +Len = 744 +Msg = 8c85ee2abf140bafd81080570e2555d6d353a0bd034b56fd621c61a6450ef3f58fce198edfcc930608e2e3a4c236a4699f611d4d40d116ccc86beaa19175ded21eb4b1ec51d17590de029d2e00e656116bb01b9c818783d3c82d5e1d9c +Output = c8817530966693bdb4499781fae74ff87def99994c5ab94df8041e310542e69e + +Len = 752 +Msg = c6ee2db9efb16ca85bfc1f15c4f1f0d04a7f23de688726c4273d6a0291d272dd69502a6119c579a7eca319547d67a7627079f6235f53a98217e6018d0539f330eb547e43d75c3bc856ff366de513fc59a879f5245f48f42795270df71afb +Output = d9fd11089e6a3990e4ac947edf780ec1cf15f64c4d82644a8b1540295129a113 + +Len = 760 +Msg = d129ebb6cd13cc74b9226d679a912b4dc5b121a5528e3e6fced09b3330df0c440e4bf646116a60eea7434c09f7aa47c01aad3f1a882f95c2d0d3730b8d1c603195d211e273a782fc181a4699cd9c1c496cf1c29ed0da0eee8af13a54d5d480 +Output = ab4548227e2bf0eb3c6dfacd1fd17fa88519a95484490188083bea4567002b85 + +Len = 768 +Msg = 7061337e442b3c67c05df97be7fb2c003e84259730c943b4b1feb95122128ee4743ce88e91d78995f76f9a14a61ca7f13d0eec10606acfc65c55ad910e4dd90601c0e20ad6d71545e99343d4311cc53e6856bcaa6cb49d4fe651ee2b293d4af8 +Output = 2a03dae2a85486325d19b6872769c4215b4e6d47e79c3791810e601166349f38 + +Len = 776 +Msg = 51c7d4511e5f514a21cedd591c9c73d9148d545c606bb3920105b26c31788d803ead15b0992361062aefc0e3e701f159a5a897d52e59e70193aca4e8c4a74d5c5d3f9594c31c131a709d3be58b1c8dc1bc730cf83ebef22b3663a2814350de0456 +Output = 66a20375e237415b9c587ec865effa7b96a3d8fb4a24a4e69be9f3ce6f2004f4 + +Len = 784 +Msg = dc19586bae9a2b2fee81c3b89cd9d57ab1cab40abdb216d3cf771b0b951b8be5c4905f08bace84416324db7459cb84d94fc15c64afd4c48582fda51291f0b182c9f1eb5be4e969ed46b9584125ce424dedf68c69e3724307084c189e40eba8e7b3e4 +Output = 7992b0ea67c323566442635434fe2ccbef2c94c8a143c9868a9f4f3f8f02c179 + +Len = 792 +Msg = bb0c3c35e28161793a4bcd1ae8cde33e8bf865ef14cae7c1d81583b4e382cf5b8fd50c3e5673a07ee521c7b7710e852a4e14df1cbe3b4a79077f64bdc8d3e2148c65c9c0a024e2bc2280679f5b7003c24fbafaa5916fa38f5cb41f75e0c8451dda43dc +Output = f74a23d30035c18ac085e54ba461dfd583a96a9a54da10f721c2e9ca592135eb + +Len = 800 +Msg = 14c841c658760d214eb913e1d9fae8d7d1c3c1f9a6d0341346683eb941ee8a802bb3f06e430e3dae51af3288d530cf915dedd11f3716790048028f6c3cc6a737e007a34bcb0c7956441736c060f643e06bd5e76f89560e3d9de449226a441538f96c6047 +Output = f2d42ad8670de2f17e8b7faf1f080b07a72be6a3e86bf32961209e78a05c8b0f + +Len = 808 +Msg = f61a8204c17295ba0f730e1ac9f8acfb3ba6cd4d6023d7f46083d6d75703673358fad436b20c80c971a186ad28959dc9ee323fc2a75b0acd850966c1cefc6871dfaaf638717c2cd51b39ff7918c2201f4b01231c801ce1f7f5ee1b7a19b760099312303386 +Output = 7491b0daa1b490d198397dcf39272a799b501268dc5b45434963c37f3a48f100 + +Len = 816 +Msg = 9d53ee952aff313c25809d6f6c49a759cffb44b37433633879a6bb59dc71c83198aa10bb113bab43b2f0021ad5ced78ee3a78619bceb8ad959c14240b056f50dd775157b6d59c0b836bf8c98053f848bdfdb6ecd5dd950dc52ce322faefc2425a2dd833c0500 +Output = dca77081643426346b4b24ab3ebb6fd369fc47c7f4cc0a3182900115b3d9f6cc + +Len = 824 +Msg = 7ef94ef059a2ef80937339a461a31ddd4a6b7ecc7d0b2e52690d1af788cdc1887b39eb045cd697ba500435ab5b821535793420f3ea24c6dfcdc837b9f083d6ade76dea305b57972ba50a0e5b9bd000f7aa365894260f2947ddbce509f2abd15fe91eb53afe2ed8 +Output = d58d6af5a258050c2dbf983f48e2a87a197e8fb398de0fbd8be2911a71b8ea66 + +Len = 832 +Msg = d3dd6162663371351cc1f654f5d713254cb4178b09ee50671914245f1b915dde5cd3c55b06adf3df94fa64c18984ceb46224b005c92a2e1d0bfe1c4dcc0859cbface5ef7ff5c16e33be9f113b1b73481003b93e4967e013220c3c764446ad379931453bdb908834b +Output = 51112e5e51bf1c567b474327a611b3fdb245b2f2366cb1df774ae17bee516268 + +Len = 840 +Msg = 1b6facbbeb3206ff68214b3ad5c0fcbcd37ae9e2d84347dfde7c02bc5817559e6afb974859aa58e04121acf60600c7c28ceacaad2b2fdd145da87e48bae318d92780d8144adbbcca41eced53936b4ed3663755bcf3f81a943803adf9ec7fade2b8c61627a40e5b44d0 +Output = 1d8599e06e505fea435eb7699b1effdc3fe76864abce4ea446824fff7869ad26 + +Len = 848 +Msg = 46496a7c1261eec6f2c6f35f72a2886744b2052a914cf9468da064114e3e2735ded8b89d8f491a958ed70d2cbbb582ddb8cc516f40bc2e1abb1ddaeb0f0a966ab8e0dd791b43527f1762f8c6de7ca12203a4a9d4d4c1e3ade9d8d477fd8e1f90fde841d85f567ecdb5f0 +Output = 2dceeb7ee72a5a9e971c7f56303724f336ef6424a9de23b851e77aeaa07e3a95 + +Len = 856 +Msg = df95a358501103fc5378bf37980929df2af4c147a2c007c09bea8d5f65cf5001fecb488d3da33e795120de906afd0df2b6047d5c8f737ea9f3a4179934ed55d2f0c6e3244429db113d3fdc8d8f385d028a7a409749ffaab22df813bb8ab799249fcb9aa6cc6d81cdff1be0 +Output = cb6a885088144bfbdfb29d48ca0920c7a47c45719cdd5626e488d38aa4eac5a1 + +Len = 864 +Msg = c96b78a590284476c0f21a94c0214435c3aa311b4d9517b1f3b1dc56628637f9a28b13e69c9934dfdaa01c6f8f99307bd7bb171a3ff263a7888d7314a83697801228760c379cadeb4d84b9b94f7c170e45fea952c5d55cd3bad4081464c79869a0aa6ac06a19f9c2a008b91b +Output = 45e8ecb2e310e1ea2ea09f6b5e57c080aae28a2699847b143ce347e48d4f95ac + +Len = 872 +Msg = 89c9ded4413eeba721d7b8bcab1f6f28f1f055adfa434d3268469e7158aff5f08a50ae32c2ec4f2e6d4a5500888734dfbeb0994fd091f2973ac73076141dcb12361507319fc477ab18e3bf2014249de6dbc22b45e75c5ee78e03d38ae292cbf8d63d7439a26d6a0768cc7d8217 +Output = aa8102345c9b6a7cabb7f00f4acec79be943c5b6b29a48fdd1a29c1acdb1ace9 + +Len = 880 +Msg = 1937c7ce4819144be25d5a883e49d2a68f9765be17d27a6998030c860c8dff379556b42db727db26c55688b399a2893f885ef84d96d20c01e5de34e274e067de06d8b58f5fca23bcb664b52368e1cc75ea2db2a3014a745835f2f0c6837e2ea65206f47aa8ca94169ed0095e11cf +Output = 9776cc578f6a995b0ecf1bdad8b337e6cf28fe9d05aa46f2703fdb1fee37417b + +Len = 888 +Msg = d948f33cf6bc7d2fa74546e49d67170b967546b8234992b9af384e28bd46c23c7195ce645224d0974eb6c8e5ff0fba532c6654e59318d1fce59a1de213b13aa4c8e5e22036336e5e1602f624ea58bac4864ec039cec1bf72c14b3ceeb771f389e61e78962b511e2d081218c6e9aade +Output = 3535bdf5c7ad7d9555aabbce4a55868904327b1eab4edcd7870a48adfaa6a0cd + +Len = 896 +Msg = c37a7c705942cec2d0d46d252a7f7ef8d64708fd25870315fddbb24bd13c3314d06d55d55d97a9a6c030dc561b2043af9f27b8fbff79a5c725ac5ee625d4b4b96fedc7ae48791b077b69eedd4b41c964ad785670b41d71384dc1815a2c90092006c17a0201314c6c694a4cc1a42a389f +Output = 878bdced2e25b796c601a24cb1121bad043c77765decc16146b7a6e56045da16 + +Len = 904 +Msg = 494826af988054e6f4ac4cc250053a52d12c04733006cf4561cac6db72581637b5cd3d7521548546f63fcba0a05685b4de6e0421233ef6673d6f2e9e34f2a8687596c7242fdae264feffffa1c762de2ee3093a6b7f7c4b3b42d68fb8311bca25d0cc4c238ab9722853176f2e8cd24ca827 +Output = e24e536b66a0cbb4f7ab6bc361c53f3125ffdfe7bab5f23d89bb0f236da66771 + +Len = 912 +Msg = 62e40e71d862336415a4c0ffb99b74598bc0754d105589d75ded88c0292e127e26d67d5692fc11c30899781b9d4670702847c3b4e1c979212e684cd8b9f45cc9c67524d2c46cad2b215c01016389e3617500bd583ed7da5978b6d5dec0975252e9c9eb2f963b6e6408f745f934ed35f519f2 +Output = 8e1bcb6d13b2b724b770fc06fff9bc96f2a0e5052be2546d6e0029a3cf0133f9 + +Len = 920 +Msg = 982dc2ba99d40c5b782e57ad2972cec3ba809e9f7d75455d697c0daebee7d388e87e0d1ca6160c096b667ecf051736867c1a30d03d3ecf0c77026accc6a707890f8a6696abb14253c7a4d3a30a7e97a07943528d9874540bd2e1fa901bbf7716d4fad410efcd36a2538f601182d0787979a40e +Output = 525bbc954072245c18a9d85872db1cdca5ecfa36752f096492bc2a491f2d3a47 + +Len = 928 +Msg = 132ccf4f06ea14470b579a880e3f534c2fd1ff67c5974dd8a3ac439e9b29dfcd41e0ffe0f14d7e5114c9a0679e01b050dba7e76f6c6790f78d1d6ab999454e3acfb211095684ac4f7f549aa84bb182312dd016e3107f3b1f9c5b6a89b543561a450ccf713c76e66ad55f52f21a37121aaab4546a +Output = 66cf04fd177f2963c891124d3215c70db54469e3def0cf2ff69482df80bf6c83 + +Len = 936 +Msg = add5b538b9c8d91d5d29129d978bf8064ecd4044924a28af265016273bd47b637f63fe86565cd7f3675d78635bfb7335e1b69805f62b5d7f638c8475874ef7305621f704a22575279a5bc0c4905a614aff43430accf61801cc86f7f287eb4ab93bf7e7db248c7d61fb0b32e7bd0f8af0ad5c8b7c9c +Output = 864e2003b59f8138184c54fd664cc5a2395a2a8af7f0933fd23b423bbc8480c4 + +Len = 944 +Msg = 2c57b4307144f78e26f8a26e1d88ce9acc272c0e09e2e852128ed406d0fec2be5d793111c36a2ded075a702d661ccd6ede47cf1ef0ea9dd5a57a20e9cf0f683d91d04c5921ac51c0cd4cce7d3c454d00f79133282740a4a1a16ba1701f6a73ccd0464d3014712dae80b50386296b15f71feda255374e +Output = c3f1af970a01935a167dbf096e4b0931b1bb069761a44cfe410d1025bae8e5f5 + +Len = 952 +Msg = 45900982a016edaecbc7861f03ba1e440e6ecb2cce0aa0eb15e9243ebb550372ee930481ca213b7f293b8034bda3200b5ca2d22b9a4aece39dffd64b2d36bf280b7b901184b91ed045b6a40b71dd7024f140dc5d0cdd80403720a63e2eaafe9643519478f668fe6ac740daec48ee7857764fd30b494ac6 +Output = 33b1772fa13c407f3ccae548dc79710c51c9c04e18704060a26659299bcc3562 + +Len = 960 +Msg = ade3306a8d1e2da871d716f3bdb094a17a5f15b9a9b1c010d7ceaeb1f2c057825b2f4a253c6e221d1cbcb532b1c38e16f5659e487cb82e39044f18ae4ebc37652c521cfbdc30020d947b049e5eea8eb82688125611b5fc82116ee7bbb7cf119948d60cb4126ab7c1009c6dfe6d2c7cd1364fd9ab13af1233 +Output = fa917321c94f6d6232d2fc46a3a4b01c2f947cc078fb784ae123e905f82ccf41 + +Len = 968 +Msg = b3ddc063481e3d6bf604f92c0df2d9cda8e3ffb42708e449e0b2a6fd1273a38c1a80467eea5a21f4b6ae3ca1f079ad17776f69440c9e5a3c054fb239452d7edf6ba97ec54a9c34329a2e3b24ecf8da97e465d903a25e932781264d050482c62e0d1e0f3f502c9dac084e9dbce8b687d5558bf6fad28fb792bc +Output = 1dffd468d1d5d88b5d0c49bc1d99901439a4ed8041428c3a52896cf91b098393 + +Len = 976 +Msg = fb9f5bda38c2a71c3f8320bc7dad37f9878fcfb600504372be83ab7a28fb5b5de2e1ada1ad0301b4886f01251b412a1456b988e85691c040888d542b1053239b6c7d2f1754eda3b1e5601538ff4608aeecd2b5fc424d0be50aaff4392170da4bdf9c6aa4f72697f99e7ee25bf065d9ae8f01de5c8d2c2a4b8c12 +Output = 2e2b9664a77e6e8b3af1dd94da1bb73d11daa55de1846c0a3feaf9bdb0f5d00a + +Len = 984 +Msg = 8d13df8fb45b0f24c204e0940b9fea2784e25d5b8258e736c457d8dab433845aeab1e8ccf2be91a04f61ba30bfefb597c17e8cc7559be7d6034030991e00f6744a858f703c3c028ec14f245c02d400c506447c2d782e3abeab2cbdfcdb17cda0b6771ca31a3d299921b565405bb695595a1c77b67477a895c405c5 +Output = 549a33c5b9bd64a088d9e904c84fbd063a877db07cc41184eff9d09aff29dc9a + +Len = 992 +Msg = db9dc7a7dee636c297db365d3208fb6f183ddf7a1729a7bdbd2a08aa04646a9a3511ebc00617a75b05e037303a667738088d8c9655b626cbeb91032d1d32b596ad68a459ed4a567a2512ee1e352ff3407b9553a6f758a813ad79b9bf4b0044040c4afb5adca5cc85bd1a650d698af8ef39fd3b924536b4fccd8b3346 +Output = 056ae3eb48a2562f3c416fdabc419d2a23036099d4393862b8d8620513a4ce0a + +Len = 1000 +Msg = 5cd623be5b6bf6d1bcb414c826d0f4ce60793791b6d82dae9f9e9b699e50bba266e2850541882d80b2c9edfa59d504421818ff45740f37853e5b9bc67214af0a5f5fd5c00843cc39cbb8765b4001de99643c7923f738ac5922868f865dd3f1cb90759c597843d9e34daa3754a2fd89bd8c0d2e9106fa95149448ff1127 +Output = 4a858221c598b307a47cb93069bf8f08603d9d97784959d79aec21ad7bd58e3e + +Len = 1008 +Msg = 0709641ad3877e55ced32112e0049eb6ea45fb77592031c1fbfd98d811e59fc0a58cc05a1e8fb3cf11fae2315a0d1e606c40902be584f2b866ccff26a1cc2770b3008895b5f11af68db429ff0ab3090931b0057fd10698405e32e045fb934f84d96ea414c0351991eb09dec2197dc779e19d42bb462f8b218b38237e49c2 +Output = e90aba441c4d7f5805e059f6c5299b7c48803af439383b755434645dbaacfbb2 + +Len = 1016 +Msg = cae515304b67bbf41ae3c599212f01c53b47ca783b422d9c2f844adde634fcbaaff1bcdc64c0c2a7a7496e106c44e7aeb82e0213a740655cb4a1ec0735db4b05258cf510265e3d3fc638bbd802b6f26509d72f0a42f6b4158ffc16d7d4d3e4b3b31e89749a2774e30018769aeb6f6b13b6ac1c04114c64ef49fb92f4ca060f +Output = 0be4f9bff900ef43c9894e0efd761321067055ade3b6d107e07a4058e8764688 + +Len = 1024 +Msg = a1081e6994e1ba5f966f958158ee0a8c369b73466918f7077e11a3790620bc9c90ee540dd49c1c87316179aa5a74dafb4c2c482d83653f9f6d27bc251f82970b47bc135761afb44f2e6c503b6224696c9d49ba7d9df010d9b27a5b7d72730500adba82d0a4e229be75d942bddac760e61339f1c0217f13bf3552a90a68bbae81 +Output = 8e9a891592447c3461ea0a2373caeeaac8b9e5a981d7742f692779379964eb1e + +Len = 1032 +Msg = 7ecfe43b648d92b79b2841679653abab888732eb849b24d1e2943db5e4be6d599afcdcd7025c2cd774eefe053dd7b7c38ba1841a89d59bf7caccc494ebc21834742c0913004ba39d9e0212de76e5633ab0928f5e9144b576e7a5a7a0a8e4a8a1d60874d8a5848170e00b85d989a53878c0035b9de50ff9b601c8edc3624da40a86 +Output = 7a88108af4963d59f93290ecd0520dc8fc0b5640332779994c414b64589af85b + +Len = 1040 +Msg = 1498f1a8edd2373a519a4136492974427adcc44e9cddca622e00179a68ebc96f727a5c37d362c2ef2c14b53926e44ca1a96acc244f28c1f3186e4e745f7bc28a0ce56b160c3bafbefee858ed2f5a301ac964ce4e47e1afe02c9b8983f56bdb844ca1c94c7ea5272c2fdfd45a4dd54936429371d26e50bcb2d44e6fd013023ee39975 +Output = b4d320a49b4557ef1f6aa1216a72641354fc8cbffb732b4d0436d46fe7b77407 + +Len = 1048 +Msg = 888e06b3635ebc631828d9d3b1e744e0e28bf9243190502559d582cbf1ac6918492d871395d14a054d3c8ee8d359641d57ac125df8e45bf22bb0002761d486fde47c3a1f02d073186ec817c4e34260040a52e0b69ed9c3e5ce59553ce307c4c1222226c0f484bd0444777a4d29c9c1ffc5236c186d961264097789f4be6da9cccbc853 +Output = f29455d9baf06bdf2ac7ef4bb515f8f6d54ae060989caac52c5cacd2bfc0fab3 + +Len = 1056 +Msg = f40b5284c999bd47b869bb461390dd5b9cda8edba56151c9765e4a4aef4000596ffb61bcf4a307378339b9ffcac5357104a42c041d248f7d164e0962ac03cdb0344b91d0cae9dac8aa337bafde2058631aa3707ee4371b85f7bb8f63ea81a9160da2eba99494c162f7fe083c98cad097a77c612f42c37d4be14ee537f2e11ff3c0a8752d +Output = 71f2af59d3cba6754c69bf6da4d9d52361c2ae86f92a38b571b842a79187f523 + +Len = 1064 +Msg = 389fe2a4eecdab928818c1aa6f14fabd41b8ff1a246247b05b1b4672171ce1008f922683529f3ad8dca192f268b66679068063b7ed25a1b5129ad4a1fa22c673cc1105d1aad6d82f4138783a9fe07d77451897277ed27e6fefec2cb56eb2494d18a5e7559d7b6fdddf66db4cbc9926fe270901327e70c8241798b4761dd652d49ad434d8d4 +Output = 50717d9da0d528c3da799a3307ec74fc086a7d45acfb157774ac28e01ecc74f7 + +Len = 1072 +Msg = 719effd45ed3a8394bf6c49b43f35879176a598601bd6f598867f966a38f512d21dc51b1488c162cbdc00301a41a09f2078a26937c652cfe02b8c4c92ddbb23583495ba825ae845eb2425c5b6856bda48c2cafae0c0c2e1764942d94be50da2b5d8b24a23b647a37f124d691d8cefbf76ef8fbc0fbdafb0a74a53aaf9f165075784ab485d4d4 +Output = 6881babbb48e9eea72eeb3524db56e4efc323f3350b6be3cdb1f9c6826e359da + +Len = 1080 +Msg = 362f1eb00b37a9613b1ae82b90452579d42f8b1f9ede95f86badc6cdf04c9b79af08be4bc94d7cac136979026b92a2d44d2b642ea1431b47d75fce61367919f171486a007cc271d19de0d1c4c6a11c7a2251fe3aee0bb8938a7dd043d0eb0758a4768c95cc9f6f1703075839487879b47c29c10b2c3e5326ac8f363c65aa4ef76f1b8bd363eb60 +Output = c6ce60c1852ea780ed845aac4ca6a30e09f5c0064c9675865178717cfeb1dc97 + +Len = 1088 +Msg = d8f12b97f81d47aebbfb7314ff04172cf2be71c3778e238bcccdeecb691fbd542b00e5b7b1a0abb507f107f781fea700ea7e375fdea9e029754a0ea62216774bda3c59e8783d022360fe9625621c0d93e27f7bc03632942150716f019d048a752ccc0f93139c55df0f4aaa066a0550cf22e8c54e47d0475ba56b9842a392ffbc6bd98f1e4b64abd1 +Output = e2e1c432dd07c2ee89a78f31211c92eeb5306c4fa4db93c4e5cd43080d6079e4 + +Len = 1096 +Msg = a10d05d7e51e75dc150f640ec4722837220b86df2a3580ca1c826ec22ea250977e8663634cc4f212663e6f22e3ffc2a81465e194b885a1356fcbcc0072e1738d80d285e21c70a1f4f5f3296ba6e298a69f3715ff63be4850f5be6cb68cdba5948e3b94dbbce82989aa75b97073e55139aac849a894a71c2294a2776ce6588fb59007b8d796f434da6e +Output = 02f17bf86dc7b7f9c3fb96e4b3a10ca574cd0f8dedda50f3dda8008ce9e8fec9 + +Len = 1104 +Msg = 152009657b680243c03af091d05cce6d1e0c3220a1f178ae1c521daba386694f5bab51cd819b9be1ae1c43a859571eb59d8cbd613c039462e5465ba0b28db544f57a10113406ccf772bc9fe5b02538e0b483225209c1eca447ab870e955befae6bf30dd89d92ddae9580ccf0dfac6415ec592a9a0f14c79acce9679f52d65fb8468012cbc225152d9ed2 +Output = b341f4114eee547eddeb2e7363b11d1e31d5e1eb5c18ea702b9d96b404938bad + +Len = 1112 +Msg = eaf4249b5347c2395104a96d39fbf5322c9af2f8ec6a8c45efdc06a2b246efb5502952ab53b52ed9ca8f25a29cd1789b1b5333eddc29a5fbc76c13456a3eae8c9208c1381d062ff60a061da5d26cec73fb7a6a43eace4953f92cd01bc97ed078da19da095842afd938f1f83f84d53703f397fec2bd635f94ada5a3eb78103ebf4de503e8ad7295cb7dd91e +Output = d14c7422c0832687786f1722f69c81fbe25b5889886bf85c7c7271bf7575517b + +Len = 1120 +Msg = a03e55ee76150a6498634099ae418184228320bc838dbfe8276913761516ec9021226f4b597ba622a0823ca499618169c79eb44af2f182d1cc53caefd458a3ed7bbea0a5854653f2b3c20f659f70f23ae786238a8d0e59c29ef49d53125e50abf43b6f65c31f16bc174e43468717dddfcb63f5e21e8d4ba0e674140a97cffab1d5c165f1d9aef968154c60ad +Output = fa889888d3b984c1577fe7c38ca86f0df859291502fe0b2f6e82c778babff377 + +Len = 1128 +Msg = 2fb4178a0af42b155a739e2910b004e0781c1bca697ca479bf8e71430aefc043883cc7a151779013d2ad07a47cd652b5bdfd604130a1c565115ac51ff3c0ae56b5886c1ab2f0572e385e4fc33c430b874b46aedec49f9b6f45c08be3633bdde99ee02d7e9325276b74cc9d0fb6bfd85e093f2c2a8d3dcfa24308ec18c229f2072b8b32545ee0a9d46e3f1a0f53 +Output = 254a115343d0ebd865e5d3ff6c61c3f9b65fe96ea92865a5681b1f1f0d1b00e9 + +Len = 1136 +Msg = dd344dd531f415a590a9c1838f242af8605bc0c29c1a71283ff5cd8af581683c94c48095e9e9e042b73804e0fd467ecb78699930696f3b6a9890108b99a0e4384e8a51bbadf99b53c358d8cef9fd545a97a13399861458f35a2e86309009c546136d086f058c0c7fbdf083750cb17250c5ebd8247c6f906c8db978a26123d30dec58ecdb7a0afd6face84efcbdca +Output = 2d56bef53fde76ef9849f97be2ed22d3c3d10f23b049eca2a8aba0d1fec33119 + +Len = 1144 +Msg = 353111e447fee6f0bd05d562f30626ab9fb06384a620c49034a5eb3c0bc6d1eb1b86015053e6041ab8ac1cd7b4633512b0a318bfe592e2da6eabb44aa2bead0ba238158c2ea5db56bd7342efccf9d7fe76b8a6af45e0ad594816915f65749054f1d1b7627e4355ecf4e3af72e4d0f5b51877751c6f110f57e86ce942fcef640c31d94e98ecc959238683cb28a3f178 +Output = 11b27034db724b46882a3086815a835947d19322885e08595be271c511ef783d + +Len = 1152 +Msg = c4e5a5afa1c7d2edd5a21db8b4891ed53c926131f82c69d323b3f410114281fecbc9102bfa5f298e06d91fbd7e9b9661bbae43e7c013f3796557cf2db568de7c94a7cbf5a53ee9326ab4740cadbf1a0b1f59b92040156b977eb4c047a1f34a0c66a85f776a0d1ac34a5ca30b099cb0bbb2ba4c453edbd815b7f14fc69e8cce968bf453171374c428eef8342459db6359 +Output = f1ebe75725c26b82ffb59c5a577edaa2f24e49c9070cb9ca007e65938f33dae4 + +Len = 1160 +Msg = 3b79da982ac5f2a0646374472826361c9d2d2e481414db678e67e0967e5cf3cdd0c1f570293362207191ecd78fb063347350d8135a4f02614d1de12feb70a0046939c078d7d673fea589460265290334d217d6231274ae0d3891e6f50da725f710c983d9bb16ede20833caef34f9dec3c36a6f9fc4eaa71256ac3a136b6a494dcc5985ba5e5c9773a377c0c78387bc8a4d +Output = 1fc7c4802141e2db7a9199c747d885a72d8f068262863843c9f4cbb19db38994 + +Len = 1168 +Msg = cf9552db2edd8947fd7fbbb2f7189a578343e742891ae6fb85fa0f64da8706e468f0cdc5607539db5726a2679aeddf3ac2ce711e886eff71dad203132e6ac283164e814414c7f686b011fd02c95f8c262920e9725c811a22c1339e0de16e5acd0036d620f2dda98e30c9324c2b778961e0c0b507ad5b205463a448199c9bb60b4f303420a1be3b3cfed5ab0d693cbe331036 +Output = b51adb0c2375c9d302ba61859040fa4bfa0091275eec1053fc13950aae706c25 + +Len = 1176 +Msg = 4ebc9225da5f168c07ef62f621d742cd7c71bbd063269f5e51d65ef164791fe90e070f8b0e96f9499ec21843ee52290fd219c3b5b719ebfedcefe4efbf6b4490d57e4df27d59796f37d35734110b96fd634f5f20bc3de9cd1c28479464be84270ae7f16211f0be8839e8c8d0734ab22097dd371859d9be527a4b2fe83bba0637170ba6e3b1a2ef1c0cca121ffa57a4ffd78af2 +Output = 54a3fd90ae00dfc77644ca16b4964c3b32a4641c5305704ee25d9f8fdbfb5c7f + +Len = 1184 +Msg = a83f74dcbb48d679db402433020e33dacfa2c37f1e39b2d9dcdc70e81a2ab3d75f586c274376f90a39f49c0dad642cfa4f810afdae7157050847646d60cc6adcd27f7c6a24dab9049dd7c6111ab37c555ef2dd16aaa34d7e8de5ff41feaaad80a8bb8cec85fd7f2eaef28a8772828ab3a5fc24143a58fc0c15bf27ab1a4de28a8a1584f68f65b151154cd1b6dc5ac0dccba7c73d +Output = 5d084841c35b1cd9c43082746960ff5bb2d3de78f9bfdd80dc9ca4f5eae2a66d + +Len = 1192 +Msg = 734f872c431ab145706b7517e496a3be98bca885fca0105a99b54980f47caa84b60cb3720bf29748483cf7abd0d1f1d9380459dfa968460c86e5d1a54f0b19dac6a78bf9509460e29dd466bb8bdf04e5483b782eb74d6448166f897add43d295e946942ad9a814fab95b4aaede6ae4c8108c8edaeff971f58f7cf96566c9dc9b6812586b70d5bc78e2f829ec8e179a6cd81d224b16 +Output = 14ec5a3c2ad919aa0f0492f206710347e742e7a58d6fdfd4b2c93dc2183b7b6f + +Len = 1200 +Msg = 10112498600da6e925d54d3e8cb0cdc90d0488b243d404b9fb879d1c8beb77bb6579b77aebdbf3e785abe61df17e69e8db219f29ae226f7ca9923719350abef876ec6b3920ebb5c28ccedb2a0b70d5d67a0c8a6116b74341922e60a867d24aa96cf1a89ca647d6c361c5922e7f91f9db114db322249c6a50dde28093c94c01166e11d66c26f73c322d1875f0f8e6bd41c86d803480d8 +Output = c9a88a3f221a857cc994a858f7cb4567979ada7834a265278e55de04c1fe496a + +Len = 1208 +Msg = 6969a27ad5d0aae6479b2b044bb4b043642375ff503ccb538e17be2f1e41f6aa88b1db991ffefd6087cfb20875920192b671be8b7381f7e1b33d8ff5213429f110fe475cbc74b3ecd2211f9b33f308fcf536e0d0abc36bd5e7756adefddd7728093730ec339c97313179b9e40e3f8e2a2a5c21f5836bf0d632a7961239a6a7f77b44dc700cdd70d8abbfc90c8dde5bc45dcaca2380df4e +Output = bcdec7a8776380df27a4613cb50b7221995d3f752fa55691798ac2dfa0b15599 + +Len = 1216 +Msg = 163cf8e89b260a81a3d6e4787587a304b35eab8b84faebcef14c626290a9e15f601d135cf503bc9ad5d23e7f213a6146787053f618c6ee90467e3a8df1e03387928acc375608339f7fa45788077fa82f87e11d3c58ce7cf3f8dad6aeaf3e508b722a2a62075df9fa6af4377c707ffe27aa5a11468c3b1c5fce073dae13eac2d1c9a635c5502b96115e69e741a262ee96a78336fcfc34573c +Output = 181d10fa5a58ca57077be52eda53910135087312ca7711084e4a5213c81cb4a2 + +Len = 1224 +Msg = 3a023141ab4db8b08c5cb6792ad97abdf0116d512ea8f4141a8b987f1527657d2fd98f7deca55cc6492a3d0bfad53e40f656a1ac3550c63eb8554f24cb11819a87c5ec009af84e304b69b50eb847e46162a4f8e1ec284b902002994e332461a84ab08ef23cad57959aff64a9ed9632c73ee5b818dc964bb2597cbf25d6c9cf508081be7a5b2e3f9e3fd69305202af11a92002a7b8b038d4c6b +Output = b75b698857675f8aff2b482ac437925af3ea86198484cbc87b60e6dacb13e7e8 + +Len = 1232 +Msg = 2fd7ed70c6946b11c819775fd45bc0924c02e131ab6d4a3618f67e6d3b77801d4f0d87ea781bf9fa57929757dc70f5945c872eb4e480d547cc1f2fd68fc99f81da4361e7e2bc7b46fb0ef1e3674139ad6b50ee1da830c960a90fccb8b9dac020f701e22fac7eda3edb14eccd1ad47223a1e68a35a1860cc9d74dbfdb60b2cc40cfd072897d6afc2a202cf0dc9f338a3f25d068c4758987ca7d61 +Output = 85c9275ec610ffbcd7f785c0ad24b7700b32ee352e6720f1ea2305bdb7f45277 + +Len = 1240 +Msg = cecb838187223873bab25205a54dadb1ab5a633958cbef3aa04f930467c8f7a947ff12548d964ddc843fe699f72c9377f1c76948c7a2fb5f58b1c65a94b7cd3f3bfe80cbe74be2064d11eb1bc0e52b67f732b1d00f2e2b58d30c4ff13c7479943430958d9f283f199c9029320860bdaa450404773955c74e99c9f47367e642cfb9fd1843bd14ac3cfa246887d885916763a62ae54c011668304e7e +Output = 3a5dd05e009e7f985a2668885dd0ea30c5502a1b5c575db6a4c1149c2e6229c1 + +Len = 1248 +Msg = 283dfdb2e1dc081e3c2b377ba5bc6491cc4af08c40fbfa5e3fe2d45fcdc8b736032cb5fdaa88f0a008d60a86fa53dc7443836bae2475175f2d48163a52ee216241306d87f3f2dd5281b976043a6a135af2555ab39c71ee741ce9e6ac56d87ff48b510d9ae5a338fe50db643b8c8a710a80c8a5e4d278e667b4ce2dfb010f37b588987e7ca822676a1d44bd7419395e4e96e43489eb1167ff9efed170 +Output = 5643c4252210fd45a2a67cd0a97d37e80d1b4a3c2fc86b0c3a3b4d3c1723b9ec + +Len = 1256 +Msg = f32d2e50e8d5df7ce59a9d60255a19f48bffe790e3b1e0ba6b4bc53d920b257bff8d8003d5faac66367d784706f690b2f1f3a0afafdcbc16866d00a41169734f418d31d7a1c3ca9ede99e5b986f1294710fa5d011d5fcd13fdbef02b755b49cfbf168bf3d39a00cbe5d82bde2fb4ad5cf0fd65b1b5a3db5ad724dff745486da2830ed480f3e61795542094dd88a5e3989ae501e5ff10ae921c89133309 +Output = 1ead94e30440b647d4cb4d7b3ed6b87ac07e8d72b3e5f28352bf14a78232ff1d + +Len = 1264 +Msg = 8bbc18eab6bcd9a3d6b90ec56d3be949e02a8866d69c7808e1ec787e600c7f72a41c001f513b6cbe079df94142dda2447f956e41a12df60392f0215d2d65331b5cdc06397d4796530b4bc45d7a975394627537b4e09e0f6c3a53f00fc1a9648cfc25b2a00288604a28ecf780dc100620d1f169295d9acb2b1f3c6afce4811aadcb1e8dbca8a8d18ba7a81a1132f1c2d014318e07dec7332889d4198c5e95 +Output = 429f15c653f92734bfe4d1749e84da8c28861b70c5158bf59809ece810221774 + +Len = 1272 +Msg = a3d0eecfeff88df1cdd1e86df7bd2ec3ba60bcedfc9c42ef7dc021b05dfc1808df19201a6c6694e4dbf69514ef08ad1d21c7b28ba034ee9397607cefaedef5e9d3784db53a21f703a22b50d5dbba3a8e8579074c1a8b9a782fc5c89cf61a047408563c476110fe77acd9df58c2ba1d3e6dde83da718b8dc6cd57cd5e3e988dd2051cb679ea1af16881690b44acf09e54615eeedaad1b11a4f97e53de8d40d8 +Output = afccfd3b18f6d292d2e125884b721b3e3099c4dac8aef05ab0fba26799043d02 + +Len = 1280 +Msg = 2ecb657808b29574b020545fb7f94071406047ef4de20c003cf08cbd91930187f55b079d7f99fded33cdae2bc8623021af990d4650c4a19197b4c38faf74a8b40d3803efb1907180a8e1150ed6167ff4f293d3ddd26a2790e9d22c0d0ed511d87e48a4952500bbd51943d230687df5941334e1dc5a3e66a43a320f5c351c059c517531b76352a1938ddb2db806ff5aa619667e6c71a7257693bcb4a7acb34ca8 +Output = c994acd17e08e8efd3ba83915245781e3727bac445672c44e6335e4f7deaf90b + +Len = 1288 +Msg = e649888592d192c5fb59f10560f5f5a7b0ac21739c35dd80f1fe6b5825731c572f7cc4549c476b84e049459aea7fe533fbfaad72b79a89e77d1addb6f44cbbf5e6a65a5552fec305bc92ced3c84b4d95074387c71184e875d413f65c2b2d874cb3d031d0da7d0311383d72f823e296937d8f97bad17a62f29ef1a091f39be8233c01330d5c4c9170fc501b5022ca29f605e6c59220055f2585bcc29e742046432c +Output = 88a9aa4b4ffac981d1ef0e8b233cb309695f89211cd4e94d50760909e3cb919c + +Len = 1296 +Msg = 816b0bffd99b0f7821e6093ef152723a9cb45f7a082ef8d6bdf72cd33b5aa3c79102f43e2b74199decdd20057d0e227ae4c57945582e2e9653a9b16eeacecdbc5aaedac7e35c35cbd9adede7f83bbf36f8b0453d61416a85a17821885b3757d203fa2560a85c4b4c10dddaac0ae230b700fd2929cc6f94e9ccebe4e9399d284eb46b3ed2227b4366baf54d1b5c0a5d4225358fd240c0940bff8b62592a092a7b978b +Output = c593f3d663c48426ce892f22584d49a3335cce3456194b7b5ee4814fab477fcb + +Len = 1304 +Msg = a10918880cf31a8551af80bcb0d1a6ed71ca42c71e533967ef0fb71c866b7e6ddcca7e5d7cdfa6edef59fbe377c6e7ca00b1d33a530ef8598dd971a2cff995e5386a858f109b012c4615802a1d5e7fe0221d19cf617ed827d8d8cb8d2c8ed81b9b3354a832f1d14a402b371a0a611737c0543b0eb06b82d8ba56eb6304f1ef16ef6b143049a7bf50c4e2493aa69756d8c39f627fa89d9d741a99f9afbfeb81de1a5bec +Output = d557aed03eb7c4c4c8091efdee992c9ad7f8d2e79e9296b40a08acae37868d48 + +Len = 1312 +Msg = de7ba70e45c879ad6c90ada6fda071c2b692840f7893eeca9b69ef8285b4357b7b735151b6cb6cddba04365ce3d520ce41e1cb9da681c07ffcc4619ddcb420f55ddbeefd2a06f689d8498cee7643606865a3f8b96aeb5d1301751438f4b34fe02dba655bc80280776d6795a4dd749a56cae1f3abec5a2d4e5183ee9bf5382c0492199eb3b946707022673bc641f0346119a3a4bb555698f895f6d90e06cc1e2835ff814d +Output = 06cfdd9cd7ce04abcdbf3121a9ba379505dbbb52f148c9d28ad9b50facf573ab + +Len = 1320 +Msg = 6e9a5752ff8ae7c385b088e651ef2543daae1624562052f787c9e0f5d83e8f01a82ce7d3e69b5f55de74d14d52412a3dcd356687346cbcd59e7315b8650bc3907e2a70ab054354b11cc7ac3ff6ec67d22fad22e75f125660eeb1d02a2a75621d969ed92385092e9de8b20102657742c9a91f328afe9a8a60208af9914c03d4719b8f0a838e7656e2ea3cb8dfc66a25ece2927eb93a8dbf9cdb077936f63e82543306ea1347 +Output = cb1e8082bb94629f162f20d815bcf3b212007bc049951a29ddb18a1f556bf3d1 + +Len = 1328 +Msg = b05007119789d382fa750d2087dde79b37a5459c24522b649ac976b07059cbdf99fcce56f6da94246e0f5ae241ae77dd99068f7863240acb5c99c4906f7d06403eb3b679ff6fcaa389f602d3aea5d7efcc35af149f3d523459f8a104f5498615c8fc2740594f5f4872b16ebb77c9ef19f7ba0b3881a6ede7b97175d2aac731a65e608975ac82395b52c805624423a7a3431e0daeb066c12ca389a9c338fef03a296644dea211 +Output = 9021fefc1a020cd0c579e3dd67a66dacfabedde9cd36ddfc7d5c5c7c47be2721 + +Len = 1336 +Msg = a19909e14ddf9b3c470df6bb604604ad767c38c83b2b747937472b791173c3a10a733dffcae417295f2a71d183ab709a1d3be02a0bd61d811f95338967db44eeb2cf2a2f4f105ef618a418a5b031b831086f653328ddf43c2cb30b698c188638a196199a65cb374a7b61335c6f40a6193e01100a19a6c2536689fb4308935128e0ae5268937d6ccd8e4a0a21484000fbc7da29d8669b4e6dd5004a3c61b36c6676011dc0628ec3 +Output = 7dcbf4dd9c27fd8340f51c553898502cec53d3bc83198352fc58465625c076a2 + +Len = 1344 +Msg = b0dffe4a5f64f612359397e4e070a8fa01296c1d8cee25177104d76a7c154e4279cb62a99d9d7afa21e84f983041f3df030a115b4b437638cfa3d0fa56e7b66fc76be9e18ff7da8f43db6c5f863efacd2eb39c27a20da6fc867572d29bb96017e0e71a5afe1b1dbbe29575a0ac0ec7aac84c95e85af5be4ae0a14458133252230d687e7cb1b04b65483df2c5685a62601aff85053ba2c509234fcff585fb967c96169bb0725f6d75 +Output = 8e7023d18902a9184a0191f1c7a2b79030e833800baeeb33e2d0673500245dfa + +Len = 1352 +Msg = dda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bf +Output = ad83957a387225aad811b0737f582dbe7eb616187a8ba8e09b00db5d0bee4a7b + +Len = 1360 +Msg = 5cd623be5b6bf6d1bcb414c826d0f4ce60793791b6d82dae9f9e9b699e50bba266e2850541882d80b2c9edfa59d504421818ff45740f37853e5b9bc67214af0a5f5fd5c00843cc39cbb8765b4001de99643c7923f738ac5922868f865dd3f1cb90759c597843d9e34daa3754a2fd89bd8c0d2e9106fa95149448ff11273587cb414a603759315f6881c6b94b46700d94d8b2a5f86bfdf99ddcc974cf98e47bf4ba09acc273b463afaf35 +Output = f754a71e3439760aec2d763751e160d05d3de0809dd4fd6aeef588da8b86a517 + +Len = 1368 +Msg = 42c0a452e83840ae858c094c044961d5f2195ddb34a21cd1f5ab575be3803ac99b9872dd617688d515cd6da562e756853947c9ab7e8ef85a019b4f1baff6494b0a6f87d5d602234115fe42ee3667e89b8a98112cf72cfdabf01fcb8ea4314938768b0bc2aea5bafa6e67aface78fc021cc525ae60746d1ceac7ff33a2bf8e398c935252a5127f5090650dd69dd28861ee9becf6017a21ccb1b03f0a9aa15bf74eab5fd9727507b75c701f3 +Output = d5980482d666dde4f2c3a99b45e523fd6410be999a96ba8c5df397c950605e70 + +Len = 1376 +Msg = fece673103322483b85340e991e478c2c15e2d795a98adb5b697b4cf17a733898aaa4ffd11b1add300c9edb7a818740a33286fd8cf82140b0f7f2bde8d5bce94d58b6d697e5015c99a8df1c051d611b2c8c96a4c48a11eba9c08fe1aba2d4d31a617c75d9439e2cb4d4654ead346d52048ea26bb0c1c522a26db346de54639cac6f668c299919f43e09c1f1f78914abd7b32ac0f641c39c3749fd5be55cd1ac6fed1557ed683d1981c395946 +Output = 17f4b2f60cb364da5e8a62db58e07eb1c44b888c433adc1e62461879cd271463 + +Len = 1384 +Msg = a542b2bdf8e04ec2a004cccd2f89e7bfd17ace1ad285c91360ac20e9913e3976a806000494c28b61b9d7ff36f342ad94d8d281d03e949d91fe8f4127f7b2ee1e550bcb13133a47c7be2400727cece45a4e1f95a3922e1269cc22950ca58bb7cb34b9da957d2fc81b3755982ad36dd238b9c8d33dd53a72c452cbe341a5afdca5ce79f730da8b5886add18f06feafbf57a33700430fa003c919f3f56dff08a5d3aab1e88c33353d30a700adad07 +Output = 50cf700b5b6c802e20da4c1f9b75bd0a6632678212bd0e2418201f3a10389994 + +Len = 1392 +Msg = 8fa67f49db80f22bc267a70e5636dfbc8a21c83d9691fe4b9c3051068b3fc9e94430e7fdfb712e4ce086e299ff5a104e65d7ceb685b4c46cda8eeb14cd3b9548d85baed5ec2f412810af3d034cd67a75c541f70829f8663c4d8cea3415621fb0954e5b3b756333a69a0a41b402522517f087ca9b4a06eba23f4fd5d02c5c6e07c132769660b50dadc5c07515ec751a1d2fd2cfd8b0855b85f602344fdbd28a37a52e874e73ccd627dbf9628cd1e8 +Output = 3379265620eb781d6b59e331cc525e60e8c063e19f96cfabb2fda9aa83cdeba5 + +Len = 1400 +Msg = 23ae9cd31da25c0187c0247be19e089872742d772f73d0efde5889c97b40d12ddbbec35b8f2b1f9c0b3d947708db3f2726306f4dd6ffabe37736f671bfc551835db0825adc6314e2cb479fe41b92497dc8638dcfbc0e3bf6f0b4c03dd418a892f1ad6138ccf442bc0e04cb2ae36a2f80a0340f63a849891190fc719781e0de44dedde95d2783b1121e9fa3b1280cf81af5cc7e7363579c1da03390e68fc5fc806e67a132b5bb6acd413eace2b120ac +Output = a17a00ac106c0af50c4f449d3cdcc2cdbb9848d2d85a36ff434099162e25606c + +Len = 1408 +Msg = 3bfa57a5f9f60203059defd501977628908ee42116e4674dc0a52a32c5bac02aeb60c6714cd9c47c5a61558c21648884ccee85f76b637486f3709a698641c54bf5f5eb5b844f0ea0edae628ca73fb2d567710080e8a96c3fe83857fc738ac7b6639f0d8c28bfa617c56a60fd1b8fbdc36afe9ce3151e161fa5e3a71411fb8e123d48762bc093558aea7f950706bb72f8dc7ca3497a2b3ccf345ad3d9eafde10889d76c61d432e3a165d34ad0ee2d9619 +Output = 1a2cfebf3483c33a5eba84121737d892cf8bd6c3ba324fd4ae4c2db42872e54f + +Len = 1416 +Msg = e9b9525afd5634cf8d16df4ae7e12e8ae206c6ed6e7d4dd96f6fd75accf7a10cc22b023c7f569e4aec88dd51ca519c0a00c922ee33d3559b98a32d79067e6a9d50c182eed125de864841455be751991ea635c163ddbde6031223e2be0fd9f5253885bab81c4b5a4b4a4a00ae66698d8c7c538c9493c068d786f7dc710f90ac6c257f93e1884e7c609aaaf5927021e01d292a6bc87e6643e09b2505da2d2cf639bdb6f3b33cb8ab8fdf690b512d02fa9956 +Output = 3ff47b4bf4f908aace95b0468a54b7e6644fe07df69ae327c0ff2e45325b97b9 + +Len = 1424 +Msg = 13ec10c6b27a6ce6fdd5e2314e8626a28a69f313ec62f29b044cde1aff32e61228c252b9affe6a4ca93593a55932bc10aeb3f85b0c1d6c2c506d6c970e72e1f01c3aeede55cad3b1971111f60e1fcf48b5937c691952b691617f6a058ba73decf83b2b5e2b446ebfce52a24bf5b526f1a7f0c5659b6b96713f68208cfe38c2adc3af5361b9d5051c56de8fcc975d8bb48db41c7818cfd574f312d652f08f38dc857dac0e88e55e70379f20a37b7dc4396ec6 +Output = 9703a69f279ef15b843b355f86b3f7098a46eafcad625920d93e0e3fb136fc5f + +Len = 1432 +Msg = 3d8263a177af8c5beabc76a4388e0816ab1bf1f5856e985791f15688feebe4ac6d480fa64999b339575be66d8e7c7435281b8c4ef990b86a00ac128e3c41b6b9c0e573c60af4c69391d408639d7de6815b38122731a6389d4f0534a587af82175ee3f5c963c8acb1bfaf434e0e9946436df9eb46d4bb0038a7842295873c300f6ecaff76fb1e4fdb0a75fef588d87cc486e67f738bd4f8832fb24526e5f0a8e91920f8967bfd96599aada321b4437049cc8836 +Output = e82d636a61c7657029699374a2da3dfabfae366e7708c7e4ba2dacd8b786a36f + +Len = 1440 +Msg = 01f793fa05548645f644a64ee1b5ff7fd38eaa233f874cd59f3ddf385e86b5e9f601b9b256f2f901864d61988d11c98593d7335543ab4d85731a3e39078c9e3012d5c6f83f064b5e7089c529a46dd5081efe66c8c49932cac5be88b57e674d689f98423389388446fb1f5969ee7029eebd29cbe489f8038edc5148148cbdca77e375b3cafc2fada07038a5c133c3cf21b881eb125c71c6b801fa03bdf9371b472792a3276094ce5417fb32973a0dcf87572d4db8 +Output = 98bf0fd777137c94300ab5b1bff7b3f487a03a788e6bb96c715ba6f10ba1922b + +Len = 1448 +Msg = 71a986d2f662bf36dcbadbba0657f4e2797b569610e2d82271ee6d813f01f6db922a5a4ca405d9e7cddc9dfbb1129294b8c27845bea337250c2f721887045e50288ad513acd6a6be8dce300a308e2f8e600bd585fbf61dd2ebe45c4158ab18101c0f1eae789ecfc205d8bb6fed9371d65a9e94dd2fa5322ff75452851abfcc2357025ea56e24fbfb1d4266b34ee900768fc3dfd6c2761f4716c97d6a36092192c0abbc81f832d372be535b5dbd578576e6c2dbf61d +Output = 27255d504a38296857b8d382dc8ad4f1ca03ef3a8d1983e54bc01ef97b04e581 + +Len = 1456 +Msg = 69ee06f5f53f74c76674751f8fa80efb42f43e71132ae0fc5ec6d2148c21570191e8baf0b9cd3547a57c103690d10d8ed84804d7b9b5cb9d5b35580a0f642abad5d0e5ca23ae3c32e1cc1355b8c7e5d78c7e64af47c6607dd960ea1d7d28b97c3d8ecdaab84a5131234cc6a68ef25e7d687ea62146c76845e02fd0745cd4cdf0d00bbab9020a3eec72e4714e9abb4029743012573d1fac9c798a513937d22ebd962df61f8854ca0ad67c5b7864885282b77df076b436 +Output = 600b41954a9398ee66ea0e603c8c80d936fbc8be98c74f44ae13b0aa4b50b8d5 + +Len = 1464 +Msg = 2a74e9800ce49aac07af3df2e451f245d4ffa5304c318574135eb7f39a064bcc8bf66fc8a4c8e2f5c6a9ac90495f0d28938ab301e9292fb78461aa23e87ad482712b1ed42f172983f4977e45aaba7f43ea8a9e7bcb91cc63f89c34cf06bf2a1404995e6e53d9569fb8011bd9af6b32de0289cd669b7043c19698bebd9bdd33ca6bca985cb81751913a70eb14ff790c41030eaa8a00cf7c1987dcaeb650ddd9eccf46326707d902a1a36c56be43ecf7b414a29caea3b55f +Output = 4e549f206099a8b3183fa3b86af220b1b6554ac3d8d52c54d093e68f60597256 + +Len = 1472 +Msg = 5b2e2f2fd3ecc733a6198d34e5d143c176b60c3cc3dac6deafdf99fbce5cd088d583e8da4f01e7b09226f074f24613be345f691a46fb610b2d5855503ec761659152744db3a1a78f9b1fce7fdf584dbe28a52e04e40c701d3a62a13243b2af4a77e3fb106594afd7a84b52db16cf99ca3ad2808305d39a1dc043a52b45e7623e6f7da4accfa2a690a0f3a112fd739ee9522d891e111a8812a6448bc2ac2c234a616997a8579335c36d5fe6acfe0b052358fd715d70a7e104 +Output = 24a3de94be98126ce95cfd3140754230b6880c71cfe4ec215c3f451bdc8bb690 + +Len = 1480 +Msg = 013944b7958b6b3686b14bdb042f2f5b42768edc20fdd6a90894692b15f6e5157b9da9de23da95749524102f1bb150032343d6fbe64537e247162243fea59f95f53e95aff2a38f82775fbf06e7574475e9a2a8b8119aad1ebe3349543e8cef9239c410124c0fe2c6f409604aae4a92185c3a0efbeb26bfc63394e5451ed45d740dd823ef774615aad3caf9e2b9b1c25344b40facba11f5406fe1fefee6a571a33a22d42ebc6fb094de4c94b650b55c9068b7b3b3c783d7f53a +Output = 009661924d01ad811d4c598580eb954362b8554c5e9cd13686acbe41ac8c3940 + +Len = 1488 +Msg = 72c2880163482bbe822cf72ff0e02be7081d271b366fd94c0cf37926925f76a9de44b086e590e7cc915773c314d336187ba9d03b866d1106b769b49fa99a4a9fa3fc74746d085504627a4792c757cde65b2fcaa82f9ff00eb81b7ab723ea1ed6e8723d92a2b65ead1e1dda64b275d897d0377c2ada0d5cab38913435a958da94d62f74a92da4e810ecc994017c344074014a50892fbe3e265f5448e2e2eb662295ba7f81b5dadc76f504dd31ce9debc517efad8cd5ba7fc754eb +Output = 77cf32d62a3d0622cd90f7c858ce1ae3bda60f9edc9cf50f7ecc9d7253d8d18d + +Len = 1496 +Msg = c6dad2ff2cba3ed8873955178068b5704cbccf1e8c62eed472d275f726a7670a68ae2d6a763d943b30c616a27aab5a34e254feaf838093e828d8e905b5ca8decc39491fc8b9f8bfa050fe04e5198436f5593789ca8515ecdaeaf2ce905eafb3920b5851d32892cfd4e3d3e83ccd67707eea0c74bc47e56694c7ec609deb0b8d7c739913535a37e2c5377b5a9b40efee6f5a472269eae83a54a6d3dcf08c4ccb000473dac5a9489705be6cf28d1e7e1f2b2c60293008aee6aefa61b +Output = 8708b77ac39005607b179857c037f64860540e80ed7c7a4240e09ae62c88f87e + +Len = 1504 +Msg = 02553a2117e654ac28d948a6f67a83daf2089a95ff6631ff78131baa755cc36c4ad0ca6a51f5f176ea393a9bbf2b4af54deb12c6a0dfaec75da88dbc0655d34b7ad6fb0ebbb3c1e7f4fe3f94bb865683934d4fe7b53cc20b1016b7e68eab0cf1994e1735de888ba8500ea0b970f16e2acc159a1ec6e435739743e15194c53603af1f640640dd19600653a53368d55c92012b3b935c3fcfa6fc195325a00d192cc5332baa6b1831b81cb3952a2b9be6643a777a70feb5584d477f5489 +Output = 376b551c1e8f908d7e1979efa436ab69013d2e85c34430dc826179b4f94480ae + +Len = 1512 +Msg = 9945c4f0e067b943986b6841b8fd21109e91d2f2549c711a11039abf03d37a6e4b34eba44a98e09c1b38046660c19e39424ab80ab38a805df648ee5c6212a72663322269c1de093325afe205d955ee2acf885146e5417432672ba807d5540c79e729b067cfa1faafbeb84947a91fd98a4d32e7cf712a15406b940feae5026f10e100dec5fb497cbaee3b83545a892701c530c0cddfac2a300a6b6c2a19829992589ff4accd3e57f9be20d65374f99f393e6a2467b82e7da94c9807f2fa +Output = a4ab2e8f96b69097d84596b628e7bb76f460c001043ce5fa6e379fd29d1eabba + +Len = 1520 +Msg = a4d7897eaf5c49979b361c39a67f47e26c2f75e5ffe0645539d4de245138eb8cadaa45aef7fa0c7a732dbbce90c85be2bd4bf6e37dfb4fdebee4d0e0671fc45c3051c6ccb674799bcfda7a431a6e93b3db3e32f30636190a9a2e5620302876e0d4d2f6201353fac4554341df6efb591c6f100f5dc21a2aa176ba592bd7db69e14237bbf2371df6bbb072f9ecb1f714e621c97768d82eea6bf98ebf4a82c005262188ff894a5dd549866f88b00ee82bd99872515d71fac230ccb472c55a60 +Output = 9510ff5231813a865918badd0011f05915364165492ef17b85929a63e4951589 + +Len = 1528 +Msg = 22813ee9edc5c2a90d8b3f07b48d9534e60f08312dc296d68fe78719bdb7478d8d037129aa182c4b8ae5bafca1604e76d5251ee43160ba68ddee9c624ebf00f0ba7ff6b1cf75b5cfa4ab323cf04ff13b7a591b23d06ed25f3c04c1baf4c8f7da913cf509c2a5053c4224ce4d0723268cbdf2277672b285c493731ea81799d353fa8497baed70c59a4c99b7b950a39470863a69667ff67c9ec981ddb41ffb3d63dd9d034bb79d9df1a95214083199e4efbd770a7a5f005ef5c877236674b6dd +Output = 44f8a8b05fc643566f1f53a93a122f7902d2cab68bb02267c0479339371a7304 + +Len = 1536 +Msg = eebfa2629596f61a926c4cd472ecb03eb2ecaf7f7650b12f7d2b8aa755284b7ccb295e46a62dd2a69577f38765ed1ea377bed34972470c5e3538cda310f2fd353334745a66f7557afb969e6c0132fdf4bb55e68951d5e25bc4fc2a9427e574de0d290d263ebc28a0ae11760caf85f63765fa0fc47ac2dc2c14c0c70404c9597f415050339443f2209430a2eed5acb1765df5768457d6a1db0ccbcc7a0e66531eb6f16608d1555c00973b4a9add70d5b88b8e44504fd9da709367627fad840bc5 +Output = 9949d3ac3c05b4a08b85fa371811fd3f0b50c71950fef50acbb59c450ab1c587 + +Len = 1544 +Msg = ddf38f51b732aea3fdf1fe4c756d17961262163d737f407fad17e9724a19959a92425cbb099193ec38fca8edb0614eba4dbfda60b8a6ed102fec547289a22c3b74464a02023ada50647545f6f57959a37a85a4b5a70b2050e66416ad55c33cb50d6820cfaa16caf608c69d0e4a9d7f78211c3ae44b97216659e8f6cdb6640b30e50ea8c90a0bad06ac5678deb9b50962caec6494a930377b11debd77b46de2d382a2a8992902c9aad88d9e0d49a93f88fe5dec6dcbbfacb794b0335558c609c66e +Output = 954473b4965a57c4cbb20e199b8730487eb621f5fd694a1eb1667940da0d6728 + +Len = 1552 +Msg = 184e1b9ccec71f837dca25838db073d51cacc26246fda091a468135d12e67faab69ac9d93e05bd9a687dad01c8db5bddc6751a45e64c2f734c867dd67f1e62626ddadc2baf7df0320f3e4c7e477a2b6f0ca679504b87372bb3a522e173fd8f7945f69ab9ab967ff378f6482293f3a936f82728abff188060e1ae48a778ebd09846d64cacb9b83487ad8bea1433b09ed791e06f7f8a65d2bbdf8a384f1550eb677962392b624bd593b6e77a7daf17d1fddfb995f472d8f5e4b41f3a02d394a98de583 +Output = 0a7506e1b6cc43acdb4f2ec456e069e6e4b7608deb70dbe7ccb88578658be9da + +Len = 1560 +Msg = c436d19f05550b6979bdc69bfd27ea4cd80c1a60f00a8b093e89178c7f9e8d492c304cf6ad59102bca0e0b23620338c15fc9ecd1e939ae91da16486f72ee1e154d41bfa391e6ba3b6ca9b3c3be39b5e61242ca5cd3d6c96cbd1170af91fdb2160db3522e1bc3b1a349d6e50479920ac5d9bedd8a16a787a3cdc2b6d24392f25555cc2f20b2ba9e6b47ddc96cfbd6df669d874ce21a758d3cf4704362ef7786d90ed67b01bd91299950058885accddbcf44e340ed4807864218653ee7ff7215aa1e1761 +Output = 206be726fc681367387ff0a15303533058070f9655438ad8142cf39a0523b2ce + +Len = 1568 +Msg = daf7c7526cdb85127df59220fbcb67dc5069ef58dc069a18a2e4ad164178dc0927cb1ae70120b0a975d78c4e1491dc228a95dc401873ec5645e7e6a8d0ffae58e8800be49f87b5f09d6caf4611ebd61bee86bb945325ae884a001b88b6be1a1c87de41503057bc6f5b7ba00fdb217d4de203335a746506371bf8f4bcddfd45df6bad65339bd9efaf18ce0ab1587bf842cfd6ec9c637b1cea1f96184e2b045a28fcb51e96c85574373d2b9335724170821ec58f6108af1929bea430458a1a7f80a2be1580 +Output = 742389244ad26d7a16d1f2b01e9c83e987a283bbf3aa2907a556746fe8c98c38 + +Len = 1576 +Msg = 597dadb776945e01c564f17eed4b5c1bbb34eebb13bce37d2d93363efe24b660f3785cc9e557dc2e4ab17a91a83d1f085060acc148508e43897993f66a20fbe65d46d3c4d9cf7e2e97e3952f0195f10ae8c20533753c719f6228d53d69a5e3c5fdafb9b039426d8716c2e961e09af9a8eb24a21b82c9b6192069a51ce3fc96843d7ab696edf9d0c42d151f2e2d95606ac14c2a80563c82392b02ab9abe6e3bab8471747ddc3cd06a46a6de9fd0ce4dd8d202466bdbe00088ebbb8ebfe341fbc2395a986df0 +Output = 892985bdf2379f8ae138aac016894ee23408955d627cfa699fa5fa1439340a91 + +Len = 1584 +Msg = 0efc14917a94f5320eb734c2b9e45f659d06c9f5c454deff0e76b30f6ee9e22e56a494a870fcdf138fc5538ce5bacf44761f993ccca4ae4ced8d576a8a10fd2979fe3e8066a641cdc5f746190ae4819e1d0d2886089bcbf6f36be44b5370afa45e523ba0c25bc169969436f1912b1c7b7a189d5edf00da050a5a813b31d09da5ede8b390ede30aeeece64a9ae05749e4758a2149b99d868219a056c18cf972370e07cdd95006c264ae33ab9e6130afdff6a9dbd1fe38747408868c65ccb4d45fa9f9b102528c +Output = 73088e0551c89477bcb675245c5c6347b4230390285832c7d723bf668c8061fb + +Len = 1592 +Msg = 9ac34ec974d28b18b7bcf6982eac60ebc670b0674e2acd697b49bfeb2fb81159fa5579a1e2a5bb8a5fc6ca46aaa5304a3771b15d804f2bef054fc1ad919e3852befea1c0bb74394f4d408d651412e247107bd32e64a23c9e593857f3a5ae253deea5104d8aa6ce108913881cf55d3c89587860027f8cc81b7eeec9e5f44e9fc190320c71d4a3427519250394d4ed07b9174f9e005b7696117c575fad05e76d86ae8cde5423d25d25076046f4392a0a7e56e8d6517fc66f265c5d617060e258354f9dce1dfe9de6 +Output = 17cba68f47a0615b3513d28a44feda6ad36b6e6eb1ead7232f4e2a4e1a64bf50 + +Len = 1600 +Msg = d00df64c4bb9e2fd16fb6f9ca746d6cf162015ec7326e41a5d51e9b3d0792fed3f17d5bae34f03ec522e229d53304dcef105024ece941edeba410892846b2c7a1039ab82aa9750979a7bc70bf96d093bc3461b6f2d38f801380eccc286b562996cfce06d4a98b245176bc4ae4006f45eb36cc71636185acdfe429c0a7d5fbb927be7dc43685a0f40f185824ed102f57eeafe6d0d943e2d883564e233126f1eac648207ccafe651ce4f5169b35369f3e48f84771aedb2577b04fd0506ecef72305055cacfc4435e38 +Output = 67302648e0082254d8d342b4eb8070ef9a44e0fc55c3d9a3f20613e4824aff21 + +Len = 1608 +Msg = fff5deb2bc7f43bd2db44ceff874e9c3b7c1a2f54cc6889f74186ca2a03d5047006b1b26e0919147379c81887df3403ebe43571fed8279607a2eb81a26d6f8f217dca3f927799ed182017c127069f2eb6f068b0d85979dc4d4867c676f6bedf36cd2def33b3e54a3366ea45478dee612f391a785bd0ede15aba921512103199228d434dbc1e899047a6861183e5b04fb716c11503dee2399261d10a0e5a76317736b0d7b6480573e76791b246ae734ee12203336ac3f539a6e6cb01c625eb3c9741dd199ca0d759753 +Output = bf64c9ab7042245fb2d8054edd699086dbe27a1ce904174d28bc0831ed9acf97 + +Len = 1616 +Msg = 280fa6a939ee0f9f07b667cc20c955cc04b6fcc5890e7ee57e74be0c8ff46bc568963a7b1e3272eaca85aed37785def43ef29037af2e6e2a734e07af3071d2f5ad506fa6371731624374da6d54eda5a41f768ab6ed43bd9042db7819bc6efa203d68d0924d4653f1b9a8720180a8b1c5f06b72a90df57301324299b2fb92ec2f6104e2a82766e07e764cfef9c45f0b3dfaf8d17ad5ee99648cacf2e3b486af0b614d2f4e8f20e1f0c08606bce6bab9f682462d900ed337a099400c12b1f14b9a856a3eed4b1c5d31e07e +Output = 37192cfcc0c3a61815b71da99310648b88b103dac6eb8ccd8f74d56ead0499ea + +Len = 1624 +Msg = 12e76f308f7ace0771e5a48051a38d9cbe5ba6ceedbfe801acb4b4dd98b3ae46906fcf2669b8b66de39f3f56dcdb57ebc46b0fcb517def2b748f8c1b8bd45c0ad8d9ca8d3268865cfaad1f9d5197d3668881a67dd812b1625461bd8f1b5d10fed26d87ec5253e5dd9d566be017a0a914f3e5936beb45d7ae34746ec1b118712967722fcb31417cf6b4e34ca496be80fdebdeff1df0df0917fc0ec83ab3cb28937d32e9b237faf3b1289ce97336b8002a59b5121c51a9eea69478f3818b3fdd44fdf3de2acc45f116dfc96b +Output = c6bfd0c2147f5c93638664966cb6df88acae081bc7a10187336499af8de5e8e3 + +Len = 1632 +Msg = 1d9236eecb54cae3192273ee28afeb721a9c1a46be90db666f8a03e83976a0323eff7e6b58a5f02f000fcc876fa2b8180252a49ae3b8988ce665b026b1776590206a0d51e830a50a7a83cf642a7a1747905a7a4d2eaf2976549c8a1d4170802a8b79ec8ac11d74dc4e26836da05e90678a5ca445e79d168a81d799b331897a6a47d722fc2b95e20d45a2f08b1b77ace0b9ff286c56aae83234bde6d1c8ecd9b71b2ab79170c07905279c1ea4e1ecf21ae5ec10a8c3fc26d537f678604fbe2878d01bb42fd7c5c02dbcbf16a1 +Output = d68ff8d635a0cb4df7166abf237260054493f5ba879129c56f08b2ba14234ef4 + +Len = 1640 +Msg = 2200c2dc1e93b3456c51c47adb1d5428f3af52572bf10af05da93e7d765979317263a0288871caefa11451470fac2a267c8771ff204d4843389be228b3eedba92ec3cbce22fc1a2d5c8616b1ae39429ae5fff1c5fa39142e8d5e51b38ee5551b3e666a5656fc4c0685ed383f208d478b165ffa32227e16b8443bb2a671088e8e8a95a6498b3807830592e27ace70df02f6efb3cdfee4f5e9457a2d8ac31d2f0af997a72e2879f4abc2bd3ae81ea9b2066ff7451ef7325ac97863ece6eceddf9775b6948d9787bb86a5b6681379 +Output = 242abc587a4b3f216eabce7129afc8fb857d574c75ab60ff12c66e9f659e05cb + +Len = 1648 +Msg = 04477b1cef0024e19c46a89408b67de2fc82629bd71f44088d3d6380f0fcb1362e5d7a559bf64a4fb1eb0c7155196fbc5c948ef04e54cfe96a2b0b2eeafaf0c88825a4504044ab4c581c0bbc9ecdaeeff14c079b0214f92d5c19f45ea2fe61071887403665510f8198c1ee9a683a0224c09317c57bc8897d6cef6436a16eca9ce86c952e93853e9579c2fe353dc83203d34f04963fd64880a095a4de6eb4f42e00baec615148ff31030780b5a4df0833316a1735d8a8fedf02f4fc7f9136a766665b8df727021cfd3f78bf4226e7 +Output = 3cae392c4723d3017b15e380eedd66218bf7bbec451bc69dde2a8c3bf520963f + +Len = 1656 +Msg = 6b5bdd9624fcda427648762cb4d345ada9cc0b86dd3121bc143f1aa7182da545b819b5d41143e09f0c79051828d232277a9fc5c2f29fd1bedf72c3e4b55045480efb62d6f0f2eb2e4ee81ab2d17476dcd80af6d6bd2a69445ad71564cb4b9f5a76e92bc54973c396437dfd223622d876cbf5e8eac63ab3f98b575a4fe1857c24f7cb57c9a52d3080f321f591df42229a5b48e127963875827cd8d8cd8066a34d99892f098a88fa9467ba4c27553e1af291eb2ab4b48a788a3543d9042f56de7e640cfbae83ece879a631480b1f7c89 +Output = 70fcdbaae9da8c1c871e9d50ebb17523d0224a391e892d649ce1da8cfe3eaac8 + +Len = 1664 +Msg = 8fc8543572cd7487abd87562c0e3b7b6b476f073881dcf9b0219df9bad56afdb219d3094840b5ee251c2221a58de775d07abcd6de715aac0695f97d3e3183ac1d64bc01472f77edb5cbed7fdaee160cc406c42dd26aee01879ecba0b5b579183353acd5e43781b9b53365ab3c9d5b82ce723186b4bd2b8cab92910ea1bf9fd4bc6d31e19ff787e49be9174e5b2a0c8a4843717be606879feb27c60192de7c43e127c7deeafdef00e2637ed3b6f2cd85da010077f6c576cdeea4e743f980a2e86a09eb0855a92b71211908d5c0a5f307f +Output = 28f57981f0cac415ce0dace3440409c1441eeca9a01841e7b70986e6962ec3c3 + +Len = 1672 +Msg = 304309e9258dee2bca9c094867277de8d23d759936ee0a1f1448670b87852a90cc820e910173c7fe2dd62e6181a59eb4ded09e7697eac0fe7722c90e067611ab08232d2c4760cc92924bdf170624fd0a8cb905d9a321057060ad5ac1b21c19a4eb0eaee27cbcc38c00e564927d0c6090e6e0f2ebe4fca01dd5d0644d16df0a237d2cd9da2aee7597808b04f96ec490f1f32dacd4e1e15baee1732ddab728abcfc763f53dd860aa591925087461b655d3bb897dbb2239fccb897efe8f1f5dc551d09c4c320f792a7ad39cb82ddf4976df47 +Output = 983be131933178140703522cef52d9b5b319d646f8ce6d658be5ce69fe734696 + +Len = 1680 +Msg = 5daf676a4d8efa57ce6f6c06f6a21971a0225e91b3cafd2fa8c5c3f7464768ceb07ab665a2bced0ef80767cf70b078b5b055986b8b11c40b80f1213483ace35d018e6d691eb6b97b4181fb0bd246813a4244de624cd847f27bf43d79edcc6d0056d2d49d47e52645b1c571e2a5cbfda55dd7789e80894f8aa2b45fec0a0fcd5fb92e322aa8b1fc1550bc117b6fa7b5a10af6ad46ae8ba47bfc1acfb565decd21318ad137c6830292274c22ffbb416ed45089c6835f460e6e910ed4fd839f33eec6cef7ed2bc101653d5eee950e03f3e63778 +Output = 4ed0cb0ffe737890bbd1f99fbb6dbe09f1bca17088a8c4accece368a6b3afc3b + +Len = 1688 +Msg = 731d3df43a12bd9632d7ac51a2e4ae105b163f28ee0c8fde1cd2902a8ebc4dbac7957d3a56f958d35000a9f1fd1d254ad245fb1c9f53acb50aab1d393c1deba0da0dfefe37d16107c85b50d2d81893dd7c170b52ca6e8b8846dae9cd9da5546396cde7c845627f3a8230ca7b999ea1d243d69852d526d35eb8a61b6d191c300be11c6121e8745b7565c73f74aa77f7300ec8c9a52a432c404859dba2184929a1a544948f88ce9cbf5b67d646716b3cffc437c7d22f8d4035de3a53f202f5e52bc98ba79c8d39eb214c59b778584218474f69b9 +Output = f2d235dd554b3b2b1b75dd1df1d5cce6e50791bce3d917563e004bef9f017cea + +Len = 1696 +Msg = 1cc86d74ac881ae91b161f067e02626a0684c7bbd805a34618e174e5476ccf26d03399a9dd847aca6f308f80ae8f5f857ec511b85244dcbf4592bef0674d7172546c9b9f0cc745adfeda8e8e66c5a014d998e4591ece725e4017ccf2e15bcbd6d1fbd91ee05a61daf09c84f64ead0e5f4285a867e4ab4f6b32f804b3609ec5996f69bdee0144b8996cfed9810d4e8faedf15c5ab4be4592e42bed0fa8a1f4805553cadd6188d30329a89f5f74cb10c48d8cfa3eafc807aee99f0979107e53a60acff13a0cd3eb3eca3c44120b2dc6e76563caaef +Output = 06244d95aacf76d77dd981294996b82b52eb52af4a9f3c4696e1ed1a378c3212 + +Len = 1704 +Msg = 095c3f71f9fb5980f7bf108f6ac61c4adebb8b54f9fa598cb1f4408fbdd5d17e4965c401ee2c8d8be1da30e06be655d599749f57347c3aaff329b304f07f0d225941117a6812e56995dae0bd0a6b9d7557654ec867565369b2260c0ab5b3eb1f9fb8cde44ef38aa17987ca2c2f9f1bb0805441ae7ad1cd4157b4f2a6f4b893fb8591a0478818a3bbf7a89638c2c8f8117c0a20115433d0c0489b0de295d72e41729634acfdc959407607ece6ab2f5b1db34f92fadfc4836ceea306c58058e476ce8d2e1a974ed4b75e6a7240d21c6d5e8eea3f6f02 +Output = c277ab845d3425bddb0b65c87bec0f3174e65b611f5d8f2b9d467c7d0d16bc10 + +Len = 1712 +Msg = 5d758969e7bf2b3b81017a58544c8a8bccecd1889f5243810b52bbf45f8f9dc7bc33b9961de3734c95f221f0d8d4b5c2fdd69c87820de621918ca66281da9c22a0a4118f30ae03c5af0f829f5c9e5accf6a8f225c7e4743de1a82e3aa85c39e4903058fc280a22cf58c2640be692c1d03fc89b0a75be37ff840c1b24d9fcbb35153f55840ede1a9216738edc819831f761a05fdf9485758d012235c71ea26c3cb639d1d0e91231357488c9bb3298f469e396064c2d20770fe05144cc7e369222fb869488c18db0e0f76add50037a504d4d1457f84677 +Output = 92d72070266a2da58c1622d1c8683773b6face6b24e325759401179026c3742e + +Len = 1720 +Msg = 68bebcb812893fb9ae15b83aa8f4fe05b0df724555fc35ecd561985233d4d41e8bd4fc6aa3de2f22c2e912adc5337dd06f3f75cf011e5bd50aef629581a2473211013c5cb4f025bd83f30693cdf2bc9e6639ec3c41c33ad341b8bb6f4d34acaca34a64d76e4987509a3d7d32e7b922363cd4bfd53f723aad22c58926bf136c55e8b95c21f870bea4aecf5dd43c1117629a19d7e220b3c32d541db60301c6f0f589550c827bed338168af90bff38103e8280e1aab0f0e3d1980c8284e38d59f542d265c441f494dae70e7fc3b35924f918dbd7177320c10 +Output = 8ae1e83053ce4af251746c48ce7a96b49c0128d12400cbd8cfde3ac9ec0f8a2c + +Len = 1728 +Msg = 89a515ae947ceb5c3cb1081138af7bb3a5acf2444fdb22b72ce369022991b27429c99a494bc3d17c6c74c2dcee497662b71bb5c27c606f403f9e5bc51626de322ffe2ef4111fb7d924e0be2174b344d9b20f2d647cada15bddf7b39718be408ba12b1ad76df8661b6bdf43095353adbf9e6fa053d52c80af0fd6b89fb6c1a2288938a71ce7b6a7eb4a599abc129378bc842357b61243d3e5dc23b3067897cab0ee0c1ae807c140f1c8340c6139da6f7a6b129ab6b85c64a44dc6ecf3e6a880ccd991be665681f9d4ed59df21508f589e5b26b17b51def995 +Output = f0e8eb2a35d7b974cc45884d4af3071a27efdc4f6ead8023f319c35246b65bce + +Len = 1736 +Msg = e68a402884a458ee49509f77d18fa46a39d49a797a0b5089f5d963134f26b2ca7ed9127e24e243401c7e23c753b62212da29f64f390c90fc056f4e4cb5c272ccb197d346acaad2e5341e909b87095ec0a93375fcb31be8666e3bd6ed208de4f8a64eea49c302ed27b8b84ebc158f40bcce797f47913f401157c663c03a90f0958685c14f12f47c4cd1d5c5f2a451b14d72847df97b818043e9965e8ba8d27fed78c5bf204187679da6fc5d04dc5597bcbddad5da18e790454c352d17155b7746a5954c83f7c3966260b57ebc67a5dc52d605f1b2117c585fa7 +Output = 350cff599123035d15a26e90a4060ba5b2d438673a6034ea5db6b963b5ffe1fd + +Len = 1744 +Msg = 964af60a3374af7a5ae4f230ef3bf16fc25818c0c0c3e2806b4cf09a87ef5c9616fb4bd38774c1102bb5ba31e8597640315c14b3357e62ed57e8f407df1273cfefe43811b81c1916edef836b78f3cae36d3cbcdf3cc57ccd2a128eef02142e5e074de64e2e355f938adb786508cf95605c4039ce3b62d829cb12e6dc58bd344a487e7c1151863b90e9c1bea7feb780bde8b0b3089c1b1d082230255549d52e9b99be23e389d95314f2e980b9c4703204f8d35113c5b9f37317b473e33d23c35ae157034b3ef452278d9ae424c0c5543d73f23c792004047192e5 +Output = be4e6d58fa261d68dc6a728254eaea1eaee244a509e157d5c90319df718ddf93 + +Len = 1752 +Msg = 76485cf752a99d476d7df40cfb7852468f35f7058bd78829dbf1616de3a32ca4b506b24288caf21d661e707524d0d03297b6a36e054c8133da9e58869c6903a4217d1f8b00651abc454a8c406915cbe981d4badab55fe149f43bc384e6be6b32227449dca2c23cac73c9f074b18d6af1b357e1528358d0f4918e4970a8ec8cd720b5d83c5629817359634319e682d6d49707c2dc577e75bb19619351ca398d1a830675b404e1119b5ee02e38ef3a361a93ab0583191af926f47a482f33ee9784b430c84a943313ace90758d7b4feb349110d524cb17483bd8aa111 +Output = a2bc3160c0c5c81093b99b1c3de953b169e8f78c48f9e6dee2d967cbc8b24a5b + +Len = 1760 +Msg = bdf4ee52991e79d8d73401238d88dd3e6e91fe669199d36175b66b1141fbda4850efdddeec3ec1015aaf80cd18562e1c620b93a0fa1b1a2f293dea5d01c75250e6216ad04d7af79ec2bb900730b9ffb85dafead4b4ebb34447c79c4f14db2f6a8771dd514139e556183f77f95f1919ba67654b2b45736649d63eca0c01a1383d3cc77d8852e451d263227ecd2cdf45c98815fdcd3719fde6df89bcbf507f37720c0b939e07e104baab4eeda81f71498dc9a749e112473ec26990ba8e8adff2b0002567bae899c6b5f9aa0cb4c138edb03103778f5c64f3867c3b0ca1 +Output = f5824f7434e73e2dcf9b51a5bf14e31405544588b20fcdd26bbcce88815f3e23 + +Len = 1768 +Msg = f75653396209a166dfcbeeffce0d3d12d95e33bb7ddcc13ac5ee0348593568acb8bf1409c27e82fa79f96e600842f2fb0528ef38f3adae4a0bbbc77c3c1242c67085fd9e11664d10cb3fe81194c20311ea03b7cf5ce5a9714cd2ead4f3b01c21a610d7a157a84bd25e0326ba7a77b87b12585428c16bfad7129d34f788f53ee4e2c869b99c2cc166b9aeee02c0485862058d8fea2927e9a3e4836d8e02cbef38ac157d8fe9dafaf465a90991701c2ded490c2ebd9d01befe4bec5c406a1979458d5fd9ca459a3da5e85b3f1091dd7d45683bf94b24e1c00fce40cab6c7 +Output = b6ebf08972810dcd536f8bf8479899f45d7e5e438ea15ff26d90ee52f2deab31 + +Len = 1776 +Msg = 1a70acb51185c5a0ee56561b2ebee1737d0c861428a91d4cd1fb815166882e86545f0ffaf7b4913155cafc280d1603938aa19a697cae07a2899d3c403f0f648c4e4bbca2f4e0a42fb88cf67a5b5d96a10c164a25dbd4cca970f11ef7fd291e4471fb5ab5ef5225227e65eb1902dcc1266b3440512c6494e9eec1d080861f84372539923ccf533d900f1d830ee8dbada90ec324f557a686e96cd3f9e3c439c0ecd3cb0c3d7e291403d37c6760f7a181b25f8b9d1743e2cb3150f042269ebef7ebe17a6fc3e31cd102324a3f17157866c9c55354c1da608a4904e05353fbf8 +Output = aace1fb59f9060945e01a41712c4432e2b9355750b2e1410d629bad281087ee1 + +Len = 1784 +Msg = efa4614636be908b339f9e870fe48dc475950ec23b4344a44553cb2aa699f9df092964945069a40c7a6b5af9ca7a712725f3a3f8bd573f10ec9d2a5162cd240a83ca4d6b0b6fe83df4de5ed0991586341bc323ab0459af5f2a635751d7194692263126b5b0f8e48468a1b4f2c4dd56511eac97c559721af9c74d58104aa6e6dfba06f759872b214aa05c644993f968e7f556062d04c90a468b023778069b8c5907f0c63fd83126f862b674bb4d92445f696a78cb4d8806ae3e2bfc705221c168d4989d4feb327bf47757ee323ccf731f4290f6877bd49799a76faddf75600b +Output = 1fa9a4c0e3ec78a59994466343d600de81854a9d25745330d090c782b6fbee5c + +Len = 1792 +Msg = 62f288a2acb987f02952c555dfc011f4b85149c227bc21380e6b214be01aed9d03a1c9f5780e5cedbdf7b4eaf20f8b513cf6c9f867564adbcf2be01180629cfe9ca649c9fd773a101c7c46db311a10cf9c458ca58496bedabe9ec5a7f07b1933f6a81108841aa8c30d888010e40a27d6a2e59aafc7a5079ba46dd7f5788ceca6d9502798551f2e6e5ac36c72530659ce147ffb0078abad8848401fe35fbd9ebd0c469563b8af5477c9d711e7c6372c1fbbbab87edfcf360774bda35aef38b6e25931634ff5f2a3472369775884c42a325f3fd713433a2c82ee8f6d406e22bc7c +Output = cf229928f7480327166f86583b9d285d145eefa5308c2f85acb65ad10b1518ca + +Len = 1800 +Msg = 1e6f61080fb48ae6ab7c9bb864042ec046b554de7c9e35a91622f6be09eee059772fbe22310186497b2a3cd40f08143864c8d7272fd987aa2ba0466f156e7464fbaf1885b76481f1b7d32d44ff7ce92170503a0e4a1efc85f04e4947ebd19cf4325836d9a8c4c109e7de34af3c49f6a2f2b5463ad454da63ed92c6ef9201a031a392e2c70d0b8fb793b51abecf5583e4735ec354d5656a6babd5870f12e4c842d6c6e2f6ed20332344bfa618bf8ad80f7bb579035638f4c6b180524e74645b4f535aff1050ebf5778164a26514cf3c4a90212ff05db5c09b87f9f054bf68a382a3 +Output = f1d17a4f227f42311fad320aaad5ef9147d3f78b1741ef9b18c9aaf13a217222 + +Len = 1808 +Msg = 6a81a5b01c6357cd67d83c98da3f03904834a9532763f711369e4c3f632e9c90eb67b921c380d1f337a1389fd13c68457ca147c6e9cda83332831385bd9fc98e64a6032fd2a17bcc302c2dfd02ca5f864b7bdf8af8918cfb7bbf1755b7730b8c1c650b4213705b3e9ca2a31a358fef3bffeaf9071c56ab515b79e01817526b725ccd5ac34c957c32c12a205e3433204cde151ea51cc40e1e18daf437a6e6ef286c06771846b8e391e9ed2e31c65ffaa23125d5ccc284bc48fb09dd182cd4a1969437eaabc9809a415a1254fbb2bb86233f41a7e4d43ebdb94c2e232571c789a51c89 +Output = 0fb7c30ba8901fe07b6d2a04768d525b0b4e0db9c4bba3f75ea51913b95f8a7d + +Len = 1816 +Msg = 8b7b6046c4e9127a87c15f53fda23b8556031060f8c605ffdd1080c33659e90055bfb2f5c9a09402cb671b15d9a66466a06626641fbbefee0a9bb0c76cef7c4491eb8d48239b887293bf0195bad94269c18448803e070f7b9f2a107dcc4907e008a6f92718037634a8711cbcea635cf78006819c9cd5ed0c6668a6cd9e8c123b8299ff7af200e6afd2247170b06b3a79a694d6a0824b120b25fa7ca029e326bdc76ca629f7b9614bd8800a9a53196555fbd55174389105dea58b9adcb674cace9ec6f71d70576e70842fee231c9664f54772f90006d04eefaec1066b8d6786d6d04ff8 +Output = f68ef6c27805ee05b87578362b819574aa97b102f91c1b0693f06b337e6e682a + +Len = 1824 +Msg = 134bb8e7ea5ff9edb69e8f6bbd498eb4537580b7fba7ad31d0a09921237acd7d66f4da23480b9c1222cabcda92627851657da788bbd0f7fd65ef7a12926661beab0507837b7b31a093279487ed2a9791cfc15bf1f2d2f8e7e4c40a36ab946dd7ab2544efcad840ffd15d1f5a15c972dd58e8a4daead4385513c65273b62d792f2efd9b4f7c4a5196a415653c5466929bc79b8a2be9ff3eb0bc9e59b2fa580d2efc35138bdaf8edcfd4f76f13f0297d35e58116cc387a9261a5f427dcc03eb23cdc74b48b2c0b9b1128aa44c9323bbd117a434fa51f6ebcce976fc5d75006efc197628738 +Output = 4b0d085e0f50f0335b27a01277812a3888d635eb7f3825a5165a39eff7b02951 + +Len = 1832 +Msg = 648815b187b606ac67e06440e5faa31cc4415b8af871a9432039d38851ec2a6e1579357ab39d0b6db1570161989d8515f74d4a86aa66a6bf5c7838f14b59cdc64b1a84f30e39310da218009d3bae5b76337d0d464fc4a76c44f522097a69c75a0f534c451ff34031430ca91b5797ebe681b9ebf36ef375f2df99dbf86585dfd1680cd3976e31ff839a19430473bffe0ee8e92eb5905bd8fa364aaae59413dfd45f2d6312845c37abb228187f188e5b9670f51cb33c64972c4ff1d6f8907d8d0afb9e42dde8ddb05190226eb5cd6ccc2521c5fe16fa767c2f3477a85be029b11c4447b82222 +Output = 154ffd15dd9e804c23d84d20a095374ec13514027a5735da91997526b61ccadc + +Len = 1840 +Msg = a7f62189091153aabfe341f5e2b16bf894ac92803e1f1e6b1cedbcb8fc3b4be0426af9693048a9b864879927a26e4157d4ce7ec84f38efa6586d9fe6e716e592abb589614ddc288bf99ddadb1b411106663cc53b1b61cefb8853912bcf3cde68e8c1199ae93598cc850c4d3bd393a5ac51dfaf0329038112b387d8af3a15fe090374f13c8bbbc12211be3a6c54cdc3f29e9e86480187d192e1f0bc99b3090d1e03b8586ebcd66b36a49ae99926553480546090312c5386241a788711bf80d24ef174985803ee5db04688a1e8cf95c0fd7b0f17e731d1686f67067f41e8e21642d490f723e86b +Output = 5b8e95f7596e39a9fa5d10a6eb9e916b80aefe94a8213e99293a996114e842f4 + +Len = 1848 +Msg = cabe53f6dbeede426e1314f2a3e1a88060b15e2a3cd415e89c2704a11be7449e30c78e3f0b4047edbf29b94fa687a4c101a6f502e069d52c42dee5ea7c15c8e5df33e37f95c260c4cc4b799d1727f3471092e8044301ca1147b6a5d72e91a4652029d71e421b33afdca2db45bc689efcd59cc09a2c45fd7df5d6cbd2f802e0083ad1f484daf4c897395667ad5df3abc798ed042b64dc75599266df42a41182b57754c11a25f42562298ea53ec46f258fa0ac3c1eb4703a8e67906a8ff86594541ddac646eac454faf5721e60b885113e3602f1dde2a65503bc7af320bda71dcc758a8c71f30b5d +Output = 8ff8675d43d8c56aab19108260d075b832164d10f714310d531adac9d6092532 + +Len = 1856 +Msg = bcc9849da4091d0edfe908e7c3386b0cadadb2859829c9dfee3d8ecf9dec86196eb2ceb093c5551f7e9a4927faabcfaa7478f7c899cbef4727417738fc0694d774e089b4f16f0310bbb3948a0bce62fb620b219e1f203e7451b05de6ca1406ad755b9befe98f8eaa3d3ad0561e298dc62070165052af1f2d15932a222e9f4360192ceeaaa0ae5eb5ad3ae7d45d45b6d555afc0255900f83b1bf1c534502eb3bb095a692c4153dbf9b2b8c04ceea947eeaace05675d9b32670ad216645949be85ededf3bff2076d3ef5be4306f9dda6dac7d7cf5c850936778a3e05fa7178cc856cee76a9db517c4b +Output = 1dc298d5702b0d83e1374576238200711914f7ab25d3cd23c93e32c1d12427f0 + +Len = 1864 +Msg = 22d5582d042c98dbeed1c15cb7cffe3e88396845e21c2a02e3b2e2a7c5d84b1aa7c21a4890ee25bcb156ca70eaea8fe3903d066b6e7ff4cd09abb10b2901d27d94b706231dec3e3adddd110dc15b5e0e457d33257e92ed485e59a14c3475bbfb721be566b30e2b7dfccd5cdc420ab3e82d5fb61b1c3d5f9c69257a13ee1a4ebbc8567fb95a3c33ac958e748577e0d699d24c59f44f6890f0b275030760d9d3e61ed09cc21b5e9fef318821af68c30e48bcade25920fbc96dc2b205d1919b91a3fdf0042cfd5cb77057232a021c9ca41d71e81af195de523b204549188946d11beb207e9d091ec3548f +Output = 4a74c28f29271d9147d36447897fba9d3f25edda34d1565fdbaf0e7a10909eeb + +Len = 1872 +Msg = 67a7b39c685ab099d04d9ec1c9492bd1b08faaa4827621fa91559d797ca3c9f15d5dbfe444a81e46e5b85d818df05fbc5b4b475dacfa8dccd74f527a1bd9f023d5d1d650f6b4931fb53230468147c3563aa8413da060940f0cbbed065e635cc736c99ee667c636ada883bf198d968026b66d414c47f05d4a976219222d883465e80ebfb07d262f772772b1019924bdb43864ee9387f21105e20c7cd87092a1855368e2b6211ca70598c8ae078d3aa3892653f11949add7c95480be2f0fc7cab0df9eafff3cefc6e0644d603251205a2ce903f1e7766ad81c55888830f270d86df47acd93b4e8b38ff4c9 +Output = b1ca616497ff2a11155a6d30abb4a3725ed12b3632d645e3cb6adcd78e864029 + +Len = 1880 +Msg = 701e81c1b4f4577630f053eec481fc24cf9b41de4f52b9e049a72f5f6ba25db8f0a1f862c4efed21e898eb7d197c2173aca3496abdd0e5698859c8861735d9a21e571453233ad122e1be49f7ef3256d19db27aba1fb323fbeddc2d8c6918a9cec2e9dd7c19ff8bdfe30977428fcb23a66870ddb7bc22fbfe3ed96657a97055a6a6fe5bc6f063a4c2b6217c48416e105ad6877947de46f6da44f779d11f686690913f9717ee90a33221af60ef4c43a655af9c5653cb479bf7c7df70e1122563f64a5398595dae1097ee5b2b21fa736c00bb5a7dc4cc4c73bd8f38526eccd2d43f9ae4667283e47458e3cce6 +Output = e25a82f0f55473d77705bb7ddb3e0eda9424dce3af9104ab2baf76cc07f01ebe + +Len = 1888 +Msg = 96af7db45af915c6d2c265127b62f9455b9525af94c63da4398d0822607673b379048395def58d19abc8a949cf7d64cd639cb5103b78339ebbb584d1ec0819accf3e1807f2809aec40d517421de81ea8b30c4aa4867d71fd4fe81e65072e425b42662650be21a4093cf197448e2c909ef2edcbb49e5c61899c2fbe28d871568a788294b96b601336452411984ad02177c8471f88ab9d69094b914c608858bdff199d4a8a21c5503c03776d87785c38fadf233068d4c9f3470317b1563e6cdf83cebc300b07d9c1e320f1935741583ff1dc88e59c416766096dc8d352233325dd3fe92e844623cff2419b6c50 +Output = f8148d6f972b4a3a163c917c1f7f7ce0a05f4b0165d5b70e64cbb0b2373aeb31 + +Len = 1896 +Msg = 1e08e62bad68e60bb0b43ba0751c26b8e1f76f8aa05aaaed7feab9c815ee92caa9a9435b50e633d256d4aae8df14936cce118139e690f1662f88cfbc9c333b6dea658c02cb1d959644592842542fd9d8d61a04d4a892128f0ddff7b6502efffbabe5cb0a663496bf43ecbe961a957f63c1bb01432e8895d2e0983b9e7b0869dcb2d0075a6953beb51b3572cc7a6d0d74569b7f6ec09b03966f5aa35c63e8fe78c7cf49da1ca494e094db4eccbcdf0c755e63863da6f2e24283ce36d950f74838b48a9872c74ca0a976875a7e281503cda2ba1f9827b7bd40e49bfcfb8c5dce8240a8fc0ab1766a7688e09dcb06 +Output = 6cd25c114ac8226ba572e0caf11391b0f9a77072408df997dbb3e7920db7a15d + +Len = 1904 +Msg = 5157bfc9d75c3327d26c3e9324f46dfb546f19de327e3103ba3b3a6c3bca9386b932fea28f6b5ca858b9b80a103887f877b72ed3b6c9c5e3451a1b4c0c00fa3ec952ac6db17dbdc15ad4034ed828dc862799b7adc9abd68eaf9d526d5df65f3c4a60d11285b9dfd89e682746c4edf30e2bbcbb56b14ceb6cc06be5b576d44ae70303767853484957ee1b2dd91caf54f64cca42b5b6d38ce5402ddf0e9ec343a7bee4a189635283a410951cf1279588a7526855b222694161f68a455f1febd3e441ab5d2cfcfe1629cc7ffc752ec8168a0540fa353b359348ab2b21903f73810655ffaf496874894cec81d64c7970 +Output = b51f93ea58ce59f061d974dfe7ca6d12f7a8832a59f98f0c92c2c4ad44a852a7 + +Len = 1912 +Msg = 69a9610329405347541de35a0a6ddeee088a81532a7226902d7724b2ba38f064a0cf88c0624c1165f163becaba61f5d2e364ada0d2cc1bacf0ed8d16ac06963bc2776b87bd2e8d8aba63a84d7085bbe66d747a4aa2f0f1632252696227798f575608d3fe44cf0fdc3886698b33c17a532d20b0faa2c6f0dc4d0d803e347825dfe4ea88d0fe15de86f234c82e0bfd7840acd11657d9376240f8889a50d9ec9efbf58452a3f3e944ae71d68fdb0021ffd670f0750a4f298db6ac2a7f4320bb43d51040f9202c34877d3bd2843c1b15553c03e395ba0c85bb67f05bf6bd11ce5c92bd8544eeb0dcf01ada9270f963c1c2 +Output = 4fe18e5d6fbd4efe3c96daf30983427f09cfe3db5f301f50841ed092d1169a6d + +Len = 1920 +Msg = 1e1f3419ab27506a0761f1d51b656349aa3b9bb084c11274fc4cd4429b92d30e16c882577e079facb7f4506f2ba072d9bfad2e3e07b3cd92b5e1cd2d58e834cb431424d7cabcb0e9b5ddee8dee024d467d6729d2b65d9db0b1f099e0fbc834ea8b4d4321f80f2a29e964f2b7cc539c98cbb0b5f5fb892bd5d7c15fe3eefb7b72d8b906be6ec5b6743bd185752d5a06d790d2fa2d3dfd1f090f9c48bf9749b26b11a2963596a9fbd3936bce5079e0340cb6131f05e582205441c87cfb607981dd1e4e1a0ed782a24dd97bf6cf18adce3f24bc4d0259e0d6bf558e221fb0558fd1e706bbd2981752ebf549247b73897b76 +Output = 1d560299ec31bb60ffa406a0284cc0551c6f5cc0a4dd57b90de0d7fa3b973faa + +Len = 1928 +Msg = 57543c164535df9f95c3fa3d2ed94fb989a3abbf6d52c634fd146ac9f543d7d131dc67506f346e5455e66488b610460611bf396d5aa77133fd18513d212dd3ad29472bfc81b9a74897c5daef27c8f95cbcb1852174b72a46034ce8e1fa4c70e74a7bd142032e53246248a39a0b6831649361d70441ebbb15169876de0a0976279961a04b7efa3a8fbf5709b2e95ab6c69db7773e4ba9eb473ee4455cd9caac1420e1e23f7a852432b4da525f4a055029e29cacf61a5a818583189b82edf8db57e6e4dd467d37d9b44cb9c7c8b5d1c7356bf6bf5434674676ee1cc178d0fccb98f350db86117820bf8cdcb016b226e2933f +Output = 1040a949dc4396d46a38ba2257dc4b0080c7552d9c7f06968a8ede1f266c6992 + +Len = 1936 +Msg = bc2925d87a51c8ded927ac3ce3dc54375b7aacdbab0f9b411e0ddb0e4ff1093ce223f81d711d4b9cc9d043c75743d58add7e00bd69a65d628869f827b79d5e331a23f71e7112964147114f316c058986a6ed53e1a409fc2d3342dd24b5c67a15cef3cae56076d255bab479820c6997b21e8e4f4d42819f2a8860350c30b5846d6559187a2892265e8a7f68c31eb62796ae2b9a0b2d546ee2ed8aa6e812b3a5c0471e89e3afaebbe61e3bc4fc8a3563bbbc8adc234bca92dccb8ad8bf42060598db0ac62adf12b974e0b03733382e71a8b274be9b862d33a08b267599a8f6cb7c8be477579e05479137a5677210e879e5f6b1 +Output = db8b0259e4cc70b94747e3f5c712adffdc4ef6ac8993521288232278e149068f + +Len = 1944 +Msg = 8ad36cb261bca27cf75be4a016a06e3017d1833d542d749ce0d0fee975d6d8cdadc38d7d75238883bf6d6dc1782db0b3ba6260f442254304248c2848bdce7952eaa8106377ff4b2edbc663df2222f95c2accf2cb12b88554f0f49228c2d236c2a8499c6d50991606b12e6c03fcc774b4cfd7e2c9ac2b6215abcee4916b2a37a44e6fdaa1e6390f92aa6d3034ee634642124bd8f6f9c901cebce3c58ca01da58046e2710922265e5a2e4a597ae0409a8e59ef7b5bdfd98b078dfbde1f49f4a8dff76a0aadecaa2ce6a68e8cddbaa496210d8c74ff47a2274885ded7554ff86747c9cf4d932d0ba1bf7801736664d8628297ea6a +Output = a3a0137b93710d0f450357834dfbfa5992a8cd85d22d74bccd71e6dfd744b337 + +Len = 1952 +Msg = 0a961e725fca289d442d033d0c1bab30b1f1195d0e71133a4e684892a58d9c853eadc1d07405074e44f075bf02c218c94cf39b3c3d80189ae28e2ed7f250545db92c6c5356199c1f264c59298013c4e2a3013a06ec4b261e4d721a48fa221f3a655b49856dce8e17d28ad704edd758869e621d42859be6cc755c356e25cba52529817ded21ec853e31f119d7b1d67bba25606e786f3800ae4393a7d0dc128f25ede73313db3a2b9d29cb442a34d8d6882041523012ea1bcc9f6197f685c1854399d691800181253ba35e8386dda511f7774ef3f3d679df2c720c2d698a9e2e861694bfbbfd891e2188f4fc711604d30f12cf7948 +Output = 2d05328a0bb2e3466e32498d97b19ddc584b99eb05f555d5c8663662c6c7f854 + +Len = 1960 +Msg = 593def2e2124b69fb8e139272e922e7116cde2683a8688418d33d0bb612dbca5da5ab0a1a309c829df1d6dcf636e2bc9226cbdace8066a784cca95d5e04d8f9caacdaf99d815a590afa10b7dc5033d2070856bb97e10ec11264cd5b93f09cb96b0de159e280ff5dc0fb439babc180d7fe8601317626db6130503bbf0e82a189cd4d40a36fbc16215e6a01f0db07742ed7244de4cfee56f86d0356c01417820b5fef9b5ebb9f192441eabe7fe09e68573f67bf4e2b93fbf726f2b1374b4ba88e916933f44ca682d719e1eb6152f2e7e185c4b7c61fa4550e0c92dd6d2a7bafb4004ebcfc996eedca24e41b7db8a17d4e48cfd9e4f2b +Output = 482bd8b1e2cc879dac01f7e26d0f207655969b84f600a485cef778fa3794b848 + +Len = 1968 +Msg = 162b906314f71a4052fe07b094c069d7801c2f30b016e17706d991c63ff80efecbf95a68dc145e9cbe38dda2664fa7584dc30f137f419e89eebd09ef0db6615e9abb8a7bbb2eee574d487294795daaca88614828f8acdb5fcffab6bb2fb62d932b7808e4d9cc3139a835b0cef471d9f4d8ffc4b744dffebf4f997e74ce80db662538bceb5d768f0a77077e9700149ea0e6a46a088a62717216a14b60119dd19c31038ed870b4709161c6c339c5cc60945a582263f3be9a40cd1a04c921947900f6e266f2390f3c970f7b69fa6a248899db23d40fa77ae3f01c0c91f525ed3a591ddc2c82e10e5be4292e572318a17c77110e6855cd1e +Output = 76f05ff04afc46646466b44acc52b18b38a56c2ec9d161edb4a08bd8714d0318 + +Len = 1976 +Msg = 13de9694de24175ae926dedb286189075ed81e9ed5fb5a3a52cd459048460af34cf6061ac9ec1f22f5d657d6036aa02f9b04f31787909c72afaad85f4704a1bb4708c9e81bbf46cc9cf2cd1c408fa2da8d4dae1cd493d2101b977b3d5bc3760bec5c06863d65345fc8c16733459934101efd773624cea31a80db56b1ec4a31ea233ae67d95a692e3608c4ea57c4f00da355b78ebdf07b89ac5bf924362627961d4e991538d4a08614c9ba9fa4b7bae3fbaaed6c66d07b897d28b577b25d3f677e7b22e938c183ddf7436a1b81ce3e648963fbc4c36964c1a8f87cce29d65513444dde5c2f9d9da68c0a55e6956504ffcaf565007a37b1c +Output = 206af5b5f6ff831db1dc0531680e0d6290d80e8eea60f7822994567f62f60882 + +Len = 1984 +Msg = c253ff0f18060eae16b44d591bd2aa591b136202e8946a8bb0560e1cc7f2d827a788b3fc36f950984756c9be6298844ac8915bc1b222f92cdaaf87273cd089351e4902564e3ddfdcab9e927ae6e8fe9e8a0f93003ab5ba7b3aa1731d326d3c7a2e7e3645e83a83214a74f2b42f2bdefd6a7553e809b67320db1518252f31bb9edf0f95f08d58030f2dc12f95c3caed116eabe3a1a68bedc3c2f4c068bd84cd4a39e56880c4ff294f5b6b92442c2bf37fa0998b52999ef00bf924b10d63ce392645e6f61c1697bb89dc5c63e9f2b8b8f2082893246b5644a0878f333daa77c8d90afb89ed0a888264b97aeaae9bd80310ad3e423ea31ab02b +Output = 39a558fcc12f9ce8a87ea23634d80592040f8a023d890591ac6817ce4da54c05 + +Len = 1992 +Msg = 57374d98ff2418c02bf2fb7630b0956a4abf95223be47da7359ba77efaae85d942072c0f5dc2144a1987197fe617c6a43824d31d2d66ec7770ebb5585daf0ab6666c8b48b5b3583a123c1925087b423e437395ce3dcfe8e21a2f2843d0c09ea88a0f712b4f1f6cfadeb9024fdd038fa23354e11db347f750fa0e08269a09c8177897e6a0722dd9f045a5dce5aed83736d06ec1f2d6f5a329d9315ee804b3106bf6adf38f670526860fa8b0cec321c264e26a3c35ef0273d57f3f317356e6fe0dcdf99ee077d0db23036b85f46407b69330ef5ace4695efbcb4e18aaed8c91b63c522f17be7b6812eeb96633ed9b29d2a83a624a523d7a04640 +Output = 59c6a1ed57adc5b6615fbbc577615f85bc6c1619f7cd551b69a78b3d1e63c290 + +Len = 2000 +Msg = 38413a7ddc3bdd2b56831f515a4e7663233d0ea86482628682450a000046d37d3bc315cb579c416379b5baef369ce6094c6c844690f14073280c841efa5992596410d0ba2e2962a6bdc4fecf89c7fcfcd1c9ad098d2fee2ea494fd845f6f8bc41def1252492a687b8a7795fb3918e2c3181d32f94184953f5ca51b3815cee648ce2a839c90e77b6b4897247b30d7bde68b2fba1e953a5d2fba07864406becc6ddd87cc9feca7c1fd5fec5655544cb8ee90c9ee8171986d852481e7af188965bab3cf956443b465b9373ed0938fbff86291b17629bee5eec904dde6823576d8b7b8c985f17f548d2738553d3dc877a8caf5b0f91e626a0784c1e1 +Output = 65b2e41c04cd36203654539700743ab04b47ed1dd620ca09f0f802f1676a5150 + +Len = 2008 +Msg = be6c92c3b5f9d28ff1b0b50d3db619b6016e2c107ba5d1804d0d465f38ed03512716e5d26f198b1255b70103d1999bb0914224d04141389b0aabefdc58c8bc48e10d940ee34a52afac255a1060c77ccef7d51cd185a29024bea3ca03b9233736f437e69e99f5ed0effe1095c74a884b73a115c3acf30a1c271dd1ffde2643dc4697e25ab198025d655d3550e94a47b1362dc2b34a853331e2c4036f25bf5969a47c9975cec55c2afb7e3884e4923288c7820d3e796730ddff6b65609ad3c0a5f96ff86da99da8c432cf9e946198d54c882c49a7a23f8f8aed827c86a5fa361bb5e0a384ca8794b37bcfdbf1b8f4ac76f8bb0c916d74abc33d979d5 +Output = 407016c3bddc3941ba5d757a971150f548be891fd2c97b0f4d29927b8659e447 + +Len = 2016 +Msg = 49e97f8e609bc6de3ce39e89e142d140092076d021c115af95760bd44d102fcc789ab50b884853807daaa36c6725c97326a455f4758b6b9627ed2123affe289ae6cbaf7f0928847601ea7c10e85716e5c8db5be3a6fd08e5bf90ef87112e9b391de23393ec25a0e9500cf21e6cbf00bd762d4f45bcfe36c5e5c93fa97a88cfd4a5490aef3826f100f076cd3efc45d124b902fbc4c0783b5e2200d731f2f40e910466fc3af512bde46b92d5179ed1cf4118c22506b95260d7fd9b80c6825a9e98c4a3d01c2bd34dbc49c7d2525c4b443d1bd596b3af74ed58ff03021030a2c8126c67503fe350e9b1107c8b963e9b763f4aa41674aac62a0baea025b9 +Output = 89996f488a8e57aabf091ed14a051c3ca9c49bdf962815ee93772b64f293af53 + +Len = 2024 +Msg = 9b7ea3f721e4c9bf60a4500e0054cc3fc835c2c919ad565cbbf8232ddd1a6b8e561870c13167210e69a5f913f187255cf713e5336a0f34b9bab9ab36dfb8a3ae9c539ab505e1d8833f80514b870acec97545481b825a94d1c98946470a1acf33f497e87aa4383448699f205fcac50fafca35b4276a78becc70d0bb0867293644e74c23b916567e826f682ef6c2a12f367c49f002294ffad137f6d320fdcb220afcda13196421fd5cda4543b97884788515ebc652c7c99008a7635638d4e9d9acbba980439583fbfc309d2650f35830c51d82fcc04dcdc79a477f0cf7f56ca453ac2132deb163be8afcd8a0623b03a01d1a765bf3c242e9af9fb3bc0667 +Output = 6bffea5a13566c1593903d48cd28d81e03d58373b2c66b0593bd4b681313ecf1 + +Len = 2032 +Msg = fded50c30cf9c8cae8cf40ac9aec97e18e944cfadf0ce27ad60a89e7ad6afa219822a3f2067804e52373595ca28f79ddbbb4fead6f69a6a01346f92f0ca72ccbd8a846714e4d817f2600f3c6bb416de01099a4c311cf8e971c5f0fc5c028d551c56581696cde073ef76057126c6a3d92972985674ea66408f93f13d25154bd5a67429b02e8955ecaa079cd693e72af9d574debbfad57ee9ab0cc4d7d4592ab8fc727de634bd94dcc29359cf3b8c18ca658ee1cf3b648f5f64bf004ef264c6997ecfd90b51d119dec987a0ed762bf9b58a3f2612cf1e240c3d191824f7be9bd1cdeaafa1fe4a716d1f732693ec4d5a6583f430292e78d99aa4b990dc6cdd1 +Output = 8daaf170b53a6e381ec360d12db19c4b0f7e0911fa46bc40a1ad9233325cbb23 + +Len = 2040 +Msg = 74c91ed7756b88ea869c0c569d87fcb04b8911639e8868a54786caa9f8753016104d86b97a5db076d2decb85caceb5dbcdfccfe5e25f017cd2abff168d26cb39cab87c36ee423d132f3198c9f953f5b090e95d37f8fd84d812f6074b0769f2fae93285b698c438a8e3bdfc8af0bec417de7944bfa80bf8a04d8d69b22ee5ac41b7e22ba14189a81d37a97e3078b62af8fdd30be7bc3166bccc98adb1c94301f67af1f55fb139955a731ea72359e3303b36213a16fa16d513d7405cb2a22af9027b876b58b07d0746df43fdcb5beeddc8d1885ab32c634d8fb5acfd1c7f439d4b02ca16f406fd07cbc3410a91467f3a871632f22818bfd717b00618572936f4 +Output = b5958bcadd7cd116e01c66a2b23533ef2b67685aae75f21fe8de658f51ed9ef5 + +Len = 2048 +Msg = f711af48970a7fe6cd745c3b48d30c049ff4769d932307ce959f54e7884b010fc7a6e1d96afd5e18c5e01cf532d2d93e114498010cc5fe5aa073fc89d8b5ae475c2c835babe69f68a5d57d094c80d91fcbf9cd6ab80f3a5796c469199e02f2fbbf89ddf5e32c087d743dc89f1e46d350d7f95e001d6a826e7f7ce4c05f9995d3f6a737d0993762003aff46e1318a91793d2e93eac53f9f476482b5a6a5e45f760b6cd913556f7498ff033cf50cb5d941037fb35138f45a894cbe24f2f74a188d05c20ae79f3c08eecc31f5033830745033d3085cfcf379dc401879cdde3387bfed9014740006e4a9a871b8343b622a4fd414d8349ba2c4ea4778fb5ee10775b5 +Output = dbabd362969f62f059659ad42dc2ccf67a36b87ec29bc41ea18ffca1ff9e09b1 + +Len = 2056 +Msg = d6de0fcf01c655431a5d320ddcfde18bf91e510862848090c2b72b034bb4aa69b6e216858547acad8cfc76d9afde28f9ed87488c9e7d916ef8a89af1d80ab330c0aa0fa01bd129e8c97960f3d703e4438e28d688b032ab71fe6cd2c2fdd796a7fa1e45474ccc929dd9bd3883dcd2e010e5e94524210d9641dbe91c9d43831c756e27ffa39fa0b073c5af46b344b5e309f8b3db8a777419879709bfaa31760d4224ab84dc9cb64b139436d1a99913b4d6d16ce2df3dd1feeb3bb305134f1831b822931d19cb742b244e3c238d62541c1e78fea04ef88b0b14cecf34fd25d24f7d72c81282b543174ffca8828828dfe389f34f5efc320a09ab584495923c0a31391c +Output = 64d6e498ca00ddaf93d445338f48f2171eac1de90a79c50273c3905b953a57d1 + +Len = 2064 +Msg = 13fd7e2cc198fd00946dd3bed76bc36e827c9fee0b0ab9947ec29b13d098f8a3710be25c20aa3ce303d77349f7cb693025dab230d6f80379887de7b94025b440235bbe6240b7ca1cb1c5c6fbe208b73a303ef22ab6e68fd763001be950148dc851757b04cbc78ef3c5bf349c412a94d3cc31c7a654db45f83ad39d6ca86c6a8525e2820b66e370b0674d25f3bb3aea45213a996a57df0d23337fd70aef3532bdc5293a3ebb11589ac1f801c9f93ea0d656e1d04068facf9f768b2f8ace77cfb959d20a67725b2efaf84730e6a2419ecf93aed4ee2f3573b52c7f0fb6ec3b28c10a665c4c33c9da1837c31a125f48cc78022a0e3c5397e1ad7de4de54f288251cff6c +Output = d3bb10351089f12044b4829c40a972d545a6d475866bd4ea203105720398d08f + +Len = 2072 +Msg = 550de9bdb8501b71fe9c22df687b6c8ef73e17f2dc9e063230a3352fe5c549c1fd526c43f90f57539522b0d3b22f973394c27cf34ded336379324aae2ca29a1629471c8155c0fe356b2bf6e0f048d7db6ada62afcd515ed936a7ebcadb88133242b5a27eb2aa379fe87f9c0e0a0c530de150712f4214b01acdcbbf8cdbbddc9cb164a543fa162b1a74e54965e9c4345161eb527a967c50b0a8666ffb12891edcdd1cced6134c022d7726a5ee73b7a12f5272ad98afd266232d40a21f6936017b2da5c541e794e361590a59b0912fc3301cae2992775d1cf9c6200101c80bac000bc6318c5c36f63d82590db32c72c1db27676f6fd46798bcdacf33a8184f48f3de49ba +Output = d7604debd1bc508d04b34a111467a4ad741fe2ff049f5826f49cf0e7256c11c6 + +Len = 2080 +Msg = 83a0fdb841edc49e25c00eb925089a1e16170b39c15e96b43a78fe9a6d6bc2bdfa2a9555435e0ee9c265a173a19bcebf84d99814aa3c3916342814ebc48ceb9d4a6752bf1b8b635444a1b4ec1d6d861021533fe0fc1a1bfbe6f11e9f30af4d121c5f1d40f2fc2ca550792f6dc2042bda928ce9e7e281a42bf7db04ffd85d50e3181bdf1ef03acfa591f7fa3eb7ea26e5828c7c6f82f83c6d10eeae53e51d5cdae5a27ea23cccb61cac22fda725a7ddf9975ce2c104074b8ad93304e37e78d9bd2cfce414ff3a47d24c0221f034c1bade790301259136394bf9b1eff6ccf52f559432f7bc600dec8e17a04c600bc2245bd189c3e2510e6e75197055d6f71cc66ac64ba1e1 +Output = 5c38d1f80d313a2db5667bb2d9f090aa6e05fdd0c8761fb63ca3eee61060d3b1 + +Len = 2088 +Msg = be8887275ea67aa6190cbeb98a0052ec5a91d5faa9730241b00a7774a5c5ba90dfad7d113b3e2165be757aa17c2ad273b8a030574c5bda0e4c31184de6a43bb28c6fdefb565f6c7aa164e2c4fde8d6aa465fb96a102059264873a99419ebc5f80df6314f75b261cd0a027f8ad4e268794bf7f899bd6a876feff7b3b30741604aa969fe7461de0b474177d85ccbbf8fc81190754d1ae36dd288e6be11784f1590aaf0ced2e28c6fce8dea75a0a827547fde50b9eff03112375a67501634bdebb256b527d1bf64974b3883dfc034c4bd86fb624be507fc7e87aea3f32a0232eb98f6dd94d9c20d8aa7886c9d22373bd5c5b0ecb39927edbaa8ccc22eb5ab561c2ad1939a52b1 +Output = 711830111ca071a423f8e465d0be13f1137f48d1d48da9495c58aae7633fc397 + +Len = 2096 +Msg = 8b40882bc0b62596f9de7689a96c2b869d0c17a5e0ae3385dc21e688c1e483402b391424ff7a568895b004cc1d6258d33babd0b6f58f2ebacf8fc280347beb7c1888dca8dca39c7a72045013c105bdb94b3509870da8c163a6922131bc148f469c56682020d6ff54d600e3c75efe612114d14a7ff0a1f769aa51890321577587fdcb41f293bd88fe0acc4451bcf44df4dfa81c066521d5b220f5855e2aeba725840eee88fd003e605691fb17a3908718f4e2068435d0652753a59aaaa1792d0a7948f74926472a6301779183db7a19779ba691612858aeb08a8a524f4ca80d1c24a0e59cd63952ed55a58dfc2b590af81c1c4306065eb8360ccc34b5f3215145cc3f3eebd47e +Output = 13c7ae8256cc7e41b1d9659e5e456b97dbf651195d69230fc19f84a0364c78bd + +Len = 2104 +Msg = 3a250047dffe58d4b6427ae94566d3d00026013925d5dd2fe5f1b94bc4fae62842847a16bb8c4f138c084ff777c1efee4965fa2bb9d890db94cc6e58179170a09c2e53057ab0c02626c2861d9e7e28fa07839771944840cfabb0493243de18fa914a167be314b2f4cc99a8c5814583dc83a860717ecbf6f371c4d3421088e81e670148e0bf602d67c5b53c56e9bc0a7d05fade943f09b92f303193ee4638e8f4667a739bd63c3a665b3dca389e8ec4c3d4a498429eac916b2e1e129fac951f65d8de1e16f04edfdad459dbd26861b9973acc17e46559868fb5b4d6be0b4895570354d2b8d54126a97933f68e0fdef2e27d9be1e05abaa1830b1a69b12bf852b3310516e94cbb17 +Output = 97303e793263d13c231963b947d56828a6dc5aea6caddf57ccaa817e454c950f + +Len = 2112 +Msg = 8d709376d6cb1f3e7e18ac77719f36bf2bfeb0cbd8c148a1ba32ed07cc720e3ba5c9a5e49e3b7549375c8fc1b7651b6a1386551e117ed6a3ad6a1522bcda2ddbcf2ae1165a10dd5d16713ee8a379555972eaa8aae2b43a63a9c70d107625e4f2d53b4df55271dfe2e100c1d67d036cf310d2b155938bfd4776f1dcb7427abce87da3f467ce87044061b01e718d2de69fb4e477086b2aa6b9db918a0167013c25900bdb551579d3df5e2a5fa31a1d4dc728cb02acb3babd20a24f20d52fe4ec11d51a0ca87070d528a0158c536efb28d2322d5a27b462cbe491d2a51ae048541516798e4627949081ee1aab69cff000289bb38863b34b576c71c321bac357fd9719cf6919820c8e53 +Output = 9d4ef956c39a07c9db74a4b57683992383a4a11ac296140a84f00e5ee2027481 + +Len = 2120 +Msg = e4188320de58795535a9c5fce7e26a553df91c9aa081b099ae71d2a28d27f6a37fad9192b73a880b6cfce83b2b14d9fc71e3cd417984fdb55399169f364b2f09178cff217a9f4ddf89dba7e863ac57b3b6da93ea900ef41372922a6fa758ed22d33e3695cf90b019b4ce69cd36b0cec13468d65b8c277dfa34e274da87561738dc4a9fb65d149900175e97b04d2a256f1214fe5d17d780b4c1135ea87e4e95915a38a14bcd33f0ddd712975a4f214405796673b8d627e58740ad4ea036474f757491a31ec6f59df81f73d293e59e13cb90e79e34731e94bcd936ae8b54492c2e52db0ff5f16388991508b022b7a87908801ee59996c5769ab638e531835c17031da14c99f6849a08e1 +Output = d0cef0614cef0bbbc7dfca32f975d666f87a32bd7c8ac44dac3c95d3141e4df2 + +Len = 2128 +Msg = dfb77844e75f85583be98d8b02b601d95449ea7c954cd81001d31bf487e536f3db399124c73d6e0ec25c1e10c381750157d77b13f2d464fd8275c3594acbfa4aeeb6f563caf118c4884e7586f243435a04a68b6c46b5258e5959e392cfac0cf740b80cc9998269c2b847f9b53605532d843d83513af7020aab08e568bd905442f8c63e1ddcf84b4f78cd126538ce8dc1ff24c98875a3e2bba3082fa3bd7fba733e69f3293a5ba5b5f06a285da0a6d9609ce4c7d9a0c1afe766e32b0b768226d13c2793b35cb45e3a4aa5a36615951f508304e40e635750d71f203f6791a080a5178b8684ea0a6027ab06ec483fa447dadd0c87ed656fadd3f448d581b5e2b037fa1a34648b6692c43d16 +Output = ad567b0eb8df9c1a16c6235ea3fe1ae66b0b40abfcba592cc1fe4596104fe539 + +Len = 2136 +Msg = f62bf06ad09026d5a60bffa752dd4ac732b97a277fcb9eecdaf994d0286979c4a04363d922b85360cb436550c62e4ae96559f8977037a019bd19e1e200af3bc0e5cbc6bb5c69244034edb47fecab0811c6ac9ade1cafba3ef76fcb5ede24afe6ec4c80d826ab81bb0b9154fa6c5b6d877d3cc6c32d3ed4a2b383bb0a69d1be7dde4ef9f82687521b75b7ad89ed475f92b391e51048e9d78e17de17b04abd4ecfe25799e307047fa69ce827f61775c77b9031608b17baa94a4b07481629f0482221f1c8606f2bf0a5a8ab2a0893ef8e8b3ba69dfd42b8331e7886b705ac7395bfc3a3ee3907038e5fc1891e8609bd9a07dd78062d71eb5d52c6e4cb447e4d1beeeff5733476943f1e0d096b +Output = c445289bc8eeb69e5004241ca010405b85527fcb1adabbfba3254d03b442e33f + +Len = 2144 +Msg = bd82ec72c3957da1d1dd94cd353b1e845254ba34f695b548e7753994bffac1f3fa7fd02e4eb4e3203be6a418e281607f1ad3bbbbc112a35250a18253b28fb8f2576148728411d148ed56c17d8526c5549579842d0b518ca915f78c0fef87c5eefaaebb040db3305f0fb452c2c633344aead17b517e585a9360ffc08f1eeacf310bf191ad92a2e6aecb89c1b04caf94aa426009f1c031f3595642849de6c1c001b3af3135bbe7dd7d475c750fc0a2cfbcc4b096d379e44143214741ffef137fa7197205642f89fb14abb5d6a7c914ccc899488bc052772a98e996607ee2e8f46b67c1740297902aba201c4c3f100e7316e8b04e80f2f498a2d5b847e267480794c225e6d69a0551b8ce1a3fa1 +Output = 4abd3ca446071c2bcc915de22ee1e345a648294d675d7e778d1d41ac31fff2f6 + +Len = 2152 +Msg = 9c1916734c1e03f81dd1be8672127c12c095e72aaa80672b6b36a0b3756d3c595787ea9ce41fa61a92e23c0320a007cc7ca2ff28e33ff3344aaa12f1fd0eb0f886dd4769d065bc258ca4e43dd45d47aa0e6b243e1456b5da9224b3e2af711deeefc236c25717cd81d3bfc01dd670c31240975e5484ed35850a4b8c6cd2bf0aa35bdfbd8fc35d5f952fdcd88b6d02036dd8cfb5527c2dfc9e7bc8a478b01f007f91dce7b85a60fccb68a33270e23b90249fba3220443d918bad4204ef8fba86ea5b60b92665482b8a45bbd8b27d42f19d5d01dca624467cb66862b2b7b8b8244c7f133dbf2b3d753b8fcdd23b8640ae42da4bbccd6470468574d0b8ba7340620dc69e7a6cf66660440e8026f145 +Output = 2a7715451074b31da76b5b2ffa2627e26562b83a85b405d461c45e3bd70d6f9a + +Len = 2160 +Msg = a1faa337c08b66d382c1902b32ca6df109099ed152b15fa7cc930bef5034e17cb323086eee89d15e7c023ddb04abbf1a387d42e9fdd96ee5cc6327ed581457d6718bee6028a42769344c0c6194943cfe7604ec3158312c586d916bb5428f3e1fa1db5df7b604ee5e704807a52aab6e058b46a391aae2206876c5df2f56cc1dbf0cba5e1adfd0b1a4f99e35900e18dc983eec6ff13d13d27eb1a68a44dbf47c1e7ad1f7b1ec31f5a397f59e0887040e1d589e583957edcb00e4dd74da1b2ee3a4b3c832a5254e44c311f54bf6de978dfea203675141989258d812a5da5ca3dbb97e4617dcd250256c314743435cf8e0a1e1c4a321433bafec55ec262de77aebc5a4f3ad3f3b5e2106bd938ed54650 +Output = 60143f77d6e6fac8046f9a539409abcd6222243d0f76a05a5360fd24e00aea77 + +Len = 2168 +Msg = a1ce406d09c02ca1c3cc97f25c9b96eeb9d3480c053b67edee201ce111f718adb243e08cb1b96873b9a2e499bb82db379bf77d8c29e3362552cd835b9885051dbf07d4f0c9a21533255acfa8248afa30acced9d6301f8a0fdf40dc401c5a60812fe3c3a13ac35a6a6ebaff267efc1c62541f05f104378b34fe40ce9987bc52626a9c55a8ea64609ffc8b1d1bb3206853fcb4a8e58b73601b1594016dc0f40347d8fd330cc3cd4f5a3794d090aa3e078d0a536bbbaf1b324d8e051ec4af499ab8e1cd05d5ac464e24879fc18b4b9e2098e8c5f67a56762850cf5bcda73c053f3dedd3720b8c168583547297177e88dcfafcd1f02a6acd6bae425eb51c4f6e1c5f64d823b74d861d0106d7fb392b4363 +Output = a7835b81740824ebfc4a0dda40da7a70a66f9f3a8ea77cf857664ff955c5c5fe + +Len = 2176 +Msg = 104fefe89f08d15d36a2233f42a7defa917c5ad2642e06cac56d5cc51ad914ecfb7d984f4199b9cf5fa5a03bf69207b9a353a9681c9cf6437bea0c49d9c3e3db1f3fc76519c70c40cc1dfdd70a9c150943c272cf9eeb861f485f10100c8f4a3e259c6470501932782512225ba64d70b219cf9d5013a21d25d6d65062dcc6b3deb49d58b90d18933f118df70ff42c807ccc851233a34a221eca56b38971ef858475488988794a975d3894633a19c1ae2f05e9b9c0756affd3cfe823ccf29228f60fa7e025bc39a79943325126409460926b057a3fb28a1b098b938872883804fd2bc245d7fd6d29bcda6ca6198f2eff6ea7e03ef78133de8ba65fc8c45a688160719fa1e7646d878ea44c4b5c2e16f48b +Output = 46293a63c235750d58a24edca5ba637b96cae74325c6c8122c4155c0d15805e6 + diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp new file mode 100755 index 000000000000..ad5de460789c --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp @@ -0,0 +1,6239 @@ +# CAVS 19.0 +# "SHAKE256 VariableOut" information for "SHAKE3AllBytesGT" +# Length values represented in bits +# Generated on Thu Jan 28 14:46:49 2016 + +[Tested for Output of byte-oriented messages] +[Input Length = 256] +[Minimum Output Length (bits) = 16] +[Maximum Output Length (bits) = 2000] +COUNT = 0 +Outputlen = 16 +Msg = c61a9188812ae73994bc0d6d4021e31bf124dc72669749111232da7ac29e61c4 +Output = 23ce + +COUNT = 1 +Outputlen = 16 +Msg = 74d7980949c1dc759a4a10acc3ab994b771ae6d8b5ef0005f8046233af610c36 +Output = 77cd + +COUNT = 2 +Outputlen = 16 +Msg = 4f865b9ff82cc68705fbb6decb84cbd48f880e5b49b0d77ea77eeef45584f0f5 +Output = 6ade + +COUNT = 3 +Outputlen = 16 +Msg = 5e30de9794d269e22aead3ce26f4f6dfceb1e3eb6ad5cb744b0020350cf0f7fb +Output = d436 + +COUNT = 4 +Outputlen = 16 +Msg = 3fa5f3b5dfbff118e07eb21d339a5a6bb60d52d8b67feb7eb102441160ff6d70 +Output = 28bc + +COUNT = 5 +Outputlen = 24 +Msg = 29eade8f428791131625a160f95d97e8654f5ff93fdca8915c158c7344f2747a +Output = 6d0e57 + +COUNT = 6 +Outputlen = 24 +Msg = 213adfd05103bec8ede43e1f9df4e9cccb08126506845b93a4717ac4acd03c1f +Output = 9fcf7c + +COUNT = 7 +Outputlen = 24 +Msg = 3766097d363f3cef069feea2cfdab32edce440c2aa14200f3f29a961bd8b2f0f +Output = e30c44 + +COUNT = 8 +Outputlen = 24 +Msg = 1d4010e5c963729f3492d4ef2e309ee29961f465c211a165f1394e343e5df82f +Output = 4d4236 + +COUNT = 9 +Outputlen = 24 +Msg = 6e57ab75f741a3ab3a04f71ed7935a06309763eabf6e86c4ae744360a1829d05 +Output = 32efd0 + +COUNT = 10 +Outputlen = 32 +Msg = 687c03141fb6788f601d09c8375a4f4226b7fa3f7726c2e3d185a1970a203fac +Output = a3476714 + +COUNT = 11 +Outputlen = 32 +Msg = f0be5e961bb55b3a9452a536504f612a3e66aec8160a882e5156eb7278433b7e +Output = 1e27de8c + +COUNT = 12 +Outputlen = 32 +Msg = 85a0b8e5ec5ee85eaddb72fd5c6930c14c23a7b4b07e421f0021defa9ff78ba6 +Output = 56db8ee1 + +COUNT = 13 +Outputlen = 32 +Msg = 18b1a92b57e86708b433a14968f7f993d128639e165fe4e90e2d99ad5eb0fa0f +Output = 5014aaa8 + +COUNT = 14 +Outputlen = 32 +Msg = 7ae4899b4fa7bae138fad1a9fe947d74673355135b301acf44563ce8bbf4a041 +Output = f4e98187 + +COUNT = 15 +Outputlen = 40 +Msg = 663b8a63fa83edcd444ae24de642a73ca1b2b43e606be6cf78fedc1f2e2ca220 +Output = 971b2a9de7 + +COUNT = 16 +Outputlen = 40 +Msg = 4a83fecb9bb341ca8290358ca43a4a518a23fd2f491ea2bf62b96016e7cd7df6 +Output = a61fc2c5b2 + +COUNT = 17 +Outputlen = 40 +Msg = 17e7dfab5f6d76af3c5c58421848554367a2ad467f3a8136aa03883f7a1603ea +Output = f4ef4ada87 + +COUNT = 18 +Outputlen = 40 +Msg = 2b5014a02af19a0f13d35adcc6a851dc56874297bbda094bc7772b345c0db10b +Output = 6a4111b44b + +COUNT = 19 +Outputlen = 40 +Msg = 050e5162d205984c18680f454fa304b84418ddc0b5684d911beece14c78d4bd1 +Output = c4b4f9ba5d + +COUNT = 20 +Outputlen = 48 +Msg = b17977aced3a1184b14b0e41a04dd8b513c925ca19211e1abdc6c1b987ac8455 +Output = 073d08a75c1d + +COUNT = 21 +Outputlen = 48 +Msg = 889f7419727c4d7eafc1ca603acce2add99da6fe5038181dd44b3fc5c2117ba8 +Output = ecb416a2d305 + +COUNT = 22 +Outputlen = 48 +Msg = ec05474e86e8d73b2af8e9795124c50396e709ceaf6e4108a1f9b79d34838d00 +Output = 6e3b1a7006c8 + +COUNT = 23 +Outputlen = 48 +Msg = dca55c76165b528f2080566538adb1f0053b66f3cea80b82ea3bd8c278ebfef0 +Output = ae53c844d511 + +COUNT = 24 +Outputlen = 48 +Msg = fbc037ab31ac0bb0e67ff7f5357a8edacc238b39ef3bfdf6c0f1a7d8bd55a697 +Output = 30f0a13681cf + +COUNT = 25 +Outputlen = 56 +Msg = 0cf9662f935c94e203b1e3471ec3c8919c795514cdf303fd7fd5ae4122e3e1d3 +Output = de4ac702408944 + +COUNT = 26 +Outputlen = 56 +Msg = 11daf4f307c9f7bd68a1b6ecde7bb970e5ed0cbc7423fb79e032197cfdaa87f6 +Output = 471d3437fe5104 + +COUNT = 27 +Outputlen = 56 +Msg = 30e462c7eca9602312d25c0ef86414d60a31e7f627a94f8948f3ac05633d4325 +Output = 4ab846d5e5e156 + +COUNT = 28 +Outputlen = 56 +Msg = e510a97e51548149341f0938189e4b788608319cd723f83f4709e2ea4b2c2b38 +Output = c649dc219211cd + +COUNT = 29 +Outputlen = 56 +Msg = f31fb31e147f8bf1d1ec990aff367d595e6e131bcc4b4859b9cc2cb2db1f495b +Output = 96cc735c67b2ce + +COUNT = 30 +Outputlen = 64 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e65164 + +COUNT = 31 +Outputlen = 64 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c05700 + +COUNT = 32 +Outputlen = 64 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb + +COUNT = 33 +Outputlen = 64 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0b + +COUNT = 34 +Outputlen = 64 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4 + +COUNT = 35 +Outputlen = 72 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d + +COUNT = 36 +Outputlen = 72 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4 + +COUNT = 37 +Outputlen = 72 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83 + +COUNT = 38 +Outputlen = 72 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428 + +COUNT = 39 +Outputlen = 72 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530 + +COUNT = 40 +Outputlen = 80 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1 + +COUNT = 41 +Outputlen = 80 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4f + +COUNT = 42 +Outputlen = 80 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c + +COUNT = 43 +Outputlen = 80 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca + +COUNT = 44 +Outputlen = 80 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6f + +COUNT = 45 +Outputlen = 88 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b1 + +COUNT = 46 +Outputlen = 88 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f + +COUNT = 47 +Outputlen = 88 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0 + +COUNT = 48 +Outputlen = 88 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f089 + +COUNT = 49 +Outputlen = 88 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506 + +COUNT = 50 +Outputlen = 96 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82 + +COUNT = 51 +Outputlen = 96 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e + +COUNT = 52 +Outputlen = 96 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a + +COUNT = 53 +Outputlen = 96 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5 + +COUNT = 54 +Outputlen = 96 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437 + +COUNT = 55 +Outputlen = 104 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667 + +COUNT = 56 +Outputlen = 104 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b0 + +COUNT = 57 +Outputlen = 104 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aa + +COUNT = 58 +Outputlen = 104 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be2 + +COUNT = 59 +Outputlen = 104 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482 + +COUNT = 60 +Outputlen = 112 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b + +COUNT = 61 +Outputlen = 112 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19 + +COUNT = 62 +Outputlen = 112 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab + +COUNT = 63 +Outputlen = 112 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d + +COUNT = 64 +Outputlen = 112 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da + +COUNT = 65 +Outputlen = 120 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d819 + +COUNT = 66 +Outputlen = 120 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5 + +COUNT = 67 +Outputlen = 120 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae306 + +COUNT = 68 +Outputlen = 120 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c + +COUNT = 69 +Outputlen = 120 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936a + +COUNT = 70 +Outputlen = 128 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00db + +COUNT = 71 +Outputlen = 128 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258 + +COUNT = 72 +Outputlen = 128 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fc + +COUNT = 73 +Outputlen = 128 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46ca + +COUNT = 74 +Outputlen = 128 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe + +COUNT = 75 +Outputlen = 136 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c21 + +COUNT = 76 +Outputlen = 136 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8 + +COUNT = 77 +Outputlen = 136 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785 + +COUNT = 78 +Outputlen = 136 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc + +COUNT = 79 +Outputlen = 136 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe + +COUNT = 80 +Outputlen = 144 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc12 + +COUNT = 81 +Outputlen = 144 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5b + +COUNT = 82 +Outputlen = 144 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e + +COUNT = 83 +Outputlen = 144 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118 + +COUNT = 84 +Outputlen = 144 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7 + +COUNT = 85 +Outputlen = 152 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71 + +COUNT = 86 +Outputlen = 152 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a + +COUNT = 87 +Outputlen = 152 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7 + +COUNT = 88 +Outputlen = 152 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1b + +COUNT = 89 +Outputlen = 152 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72 + +COUNT = 90 +Outputlen = 160 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4 + +COUNT = 91 +Outputlen = 160 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57 + +COUNT = 92 +Outputlen = 160 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd1 + +COUNT = 93 +Outputlen = 160 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded + +COUNT = 94 +Outputlen = 160 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaf + +COUNT = 95 +Outputlen = 168 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e634 + +COUNT = 96 +Outputlen = 168 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d77 + +COUNT = 97 +Outputlen = 168 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d + +COUNT = 98 +Outputlen = 168 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f0 + +COUNT = 99 +Outputlen = 168 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7 + +COUNT = 100 +Outputlen = 176 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877 + +COUNT = 101 +Outputlen = 176 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728f + +COUNT = 102 +Outputlen = 176 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860 + +COUNT = 103 +Outputlen = 176 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b6 + +COUNT = 104 +Outputlen = 176 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3 + +COUNT = 105 +Outputlen = 184 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696 + +COUNT = 106 +Outputlen = 184 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe9 + +COUNT = 107 +Outputlen = 184 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe + +COUNT = 108 +Outputlen = 184 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514 + +COUNT = 109 +Outputlen = 184 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9de + +COUNT = 110 +Outputlen = 192 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d + +COUNT = 111 +Outputlen = 192 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c + +COUNT = 112 +Outputlen = 192 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673 + +COUNT = 113 +Outputlen = 192 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4 + +COUNT = 114 +Outputlen = 192 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97 + +COUNT = 115 +Outputlen = 200 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49f + +COUNT = 116 +Outputlen = 200 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144 + +COUNT = 117 +Outputlen = 200 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4 + +COUNT = 118 +Outputlen = 200 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4 + +COUNT = 119 +Outputlen = 200 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054 + +COUNT = 120 +Outputlen = 208 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c + +COUNT = 121 +Outputlen = 208 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6e + +COUNT = 122 +Outputlen = 208 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021 + +COUNT = 123 +Outputlen = 208 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acff + +COUNT = 124 +Outputlen = 208 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b877 + +COUNT = 125 +Outputlen = 216 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9 + +COUNT = 126 +Outputlen = 216 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7 + +COUNT = 127 +Outputlen = 216 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf2 + +COUNT = 128 +Outputlen = 216 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a + +COUNT = 129 +Outputlen = 216 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def0549538 + +COUNT = 130 +Outputlen = 224 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950 + +COUNT = 131 +Outputlen = 224 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265 + +COUNT = 132 +Outputlen = 224 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d + +COUNT = 133 +Outputlen = 224 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b + +COUNT = 134 +Outputlen = 224 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44 + +COUNT = 135 +Outputlen = 232 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e + +COUNT = 136 +Outputlen = 232 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a2 + +COUNT = 137 +Outputlen = 232 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e0 + +COUNT = 138 +Outputlen = 232 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed3 + +COUNT = 139 +Outputlen = 232 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff + +COUNT = 140 +Outputlen = 240 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56d + +COUNT = 141 +Outputlen = 240 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9 + +COUNT = 142 +Outputlen = 240 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a + +COUNT = 143 +Outputlen = 240 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b47 + +COUNT = 144 +Outputlen = 240 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753 + +COUNT = 145 +Outputlen = 248 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225 + +COUNT = 146 +Outputlen = 248 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c7 + +COUNT = 147 +Outputlen = 248 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c99 + +COUNT = 148 +Outputlen = 248 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855 + +COUNT = 149 +Outputlen = 248 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff1907 + +COUNT = 150 +Outputlen = 256 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e0 + +COUNT = 151 +Outputlen = 256 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559 + +COUNT = 152 +Outputlen = 256 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810 + +COUNT = 153 +Outputlen = 256 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe + +COUNT = 154 +Outputlen = 256 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3ad + +COUNT = 155 +Outputlen = 264 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d3 + +COUNT = 156 +Outputlen = 264 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54 + +COUNT = 157 +Outputlen = 264 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c92 + +COUNT = 158 +Outputlen = 264 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148 + +COUNT = 159 +Outputlen = 264 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908 + +COUNT = 160 +Outputlen = 272 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d6 + +COUNT = 161 +Outputlen = 272 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73 + +COUNT = 162 +Outputlen = 272 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3 + +COUNT = 163 +Outputlen = 272 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d2 + +COUNT = 164 +Outputlen = 272 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f + +COUNT = 165 +Outputlen = 280 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393 + +COUNT = 166 +Outputlen = 280 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f521 + +COUNT = 167 +Outputlen = 280 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51 + +COUNT = 168 +Outputlen = 280 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa + +COUNT = 169 +Outputlen = 280 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1 + +COUNT = 170 +Outputlen = 288 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7 + +COUNT = 171 +Outputlen = 288 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32 + +COUNT = 172 +Outputlen = 288 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcea + +COUNT = 173 +Outputlen = 288 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e6 + +COUNT = 174 +Outputlen = 288 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f + +COUNT = 175 +Outputlen = 296 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d393934251 + +COUNT = 176 +Outputlen = 296 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f5213513 + +COUNT = 177 +Outputlen = 296 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570f + +COUNT = 178 +Outputlen = 296 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9 + +COUNT = 179 +Outputlen = 296 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4 + +COUNT = 180 +Outputlen = 304 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f2 + +COUNT = 181 +Outputlen = 304 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427 + +COUNT = 182 +Outputlen = 304 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6 + +COUNT = 183 +Outputlen = 304 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b9 + +COUNT = 184 +Outputlen = 304 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183c + +COUNT = 185 +Outputlen = 312 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c9 + +COUNT = 186 +Outputlen = 312 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c + +COUNT = 187 +Outputlen = 312 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843 + +COUNT = 188 +Outputlen = 312 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f + +COUNT = 189 +Outputlen = 312 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e763 + +COUNT = 190 +Outputlen = 320 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8 + +COUNT = 191 +Outputlen = 320 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135 + +COUNT = 192 +Outputlen = 320 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b728 + +COUNT = 193 +Outputlen = 320 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54 + +COUNT = 194 +Outputlen = 320 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc864 + +COUNT = 195 +Outputlen = 328 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71 + +COUNT = 196 +Outputlen = 328 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19 + +COUNT = 197 +Outputlen = 328 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04 + +COUNT = 198 +Outputlen = 328 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619 + +COUNT = 199 +Outputlen = 328 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0f + +COUNT = 200 +Outputlen = 336 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f263 + +COUNT = 201 +Outputlen = 336 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0d + +COUNT = 202 +Outputlen = 336 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff + +COUNT = 203 +Outputlen = 336 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d + +COUNT = 204 +Outputlen = 336 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e22 + +COUNT = 205 +Outputlen = 344 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24 + +COUNT = 206 +Outputlen = 344 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6 + +COUNT = 207 +Outputlen = 344 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce2 + +COUNT = 208 +Outputlen = 344 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a + +COUNT = 209 +Outputlen = 344 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa + +COUNT = 210 +Outputlen = 352 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0 + +COUNT = 211 +Outputlen = 352 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900 + +COUNT = 212 +Outputlen = 352 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad2 + +COUNT = 213 +Outputlen = 352 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597 + +COUNT = 214 +Outputlen = 352 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070 + +COUNT = 215 +Outputlen = 360 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c + +COUNT = 216 +Outputlen = 360 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546 + +COUNT = 217 +Outputlen = 360 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de2 + +COUNT = 218 +Outputlen = 360 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338 + +COUNT = 219 +Outputlen = 360 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b52 + +COUNT = 220 +Outputlen = 368 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1 + +COUNT = 221 +Outputlen = 368 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d900 + +COUNT = 222 +Outputlen = 368 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf + +COUNT = 223 +Outputlen = 368 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4f + +COUNT = 224 +Outputlen = 368 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439a + +COUNT = 225 +Outputlen = 376 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11ab + +COUNT = 226 +Outputlen = 376 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21 + +COUNT = 227 +Outputlen = 376 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fd + +COUNT = 228 +Outputlen = 376 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58f + +COUNT = 229 +Outputlen = 376 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b520109 + +COUNT = 230 +Outputlen = 384 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b + +COUNT = 231 +Outputlen = 384 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19 + +COUNT = 232 +Outputlen = 384 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf7907 + +COUNT = 233 +Outputlen = 384 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa + +COUNT = 234 +Outputlen = 384 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa953 + +COUNT = 235 +Outputlen = 392 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0 + +COUNT = 236 +Outputlen = 392 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8 + +COUNT = 237 +Outputlen = 392 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda056 + +COUNT = 238 +Outputlen = 392 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b + +COUNT = 239 +Outputlen = 392 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051 + +COUNT = 240 +Outputlen = 400 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dc + +COUNT = 241 +Outputlen = 400 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf + +COUNT = 242 +Outputlen = 400 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2f + +COUNT = 243 +Outputlen = 400 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e + +COUNT = 244 +Outputlen = 400 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1 + +COUNT = 245 +Outputlen = 408 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f + +COUNT = 246 +Outputlen = 408 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e2 + +COUNT = 247 +Outputlen = 408 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454 + +COUNT = 248 +Outputlen = 408 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d + +COUNT = 249 +Outputlen = 408 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3 + +COUNT = 250 +Outputlen = 416 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23 + +COUNT = 251 +Outputlen = 416 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f + +COUNT = 252 +Outputlen = 416 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd635 + +COUNT = 253 +Outputlen = 416 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d + +COUNT = 254 +Outputlen = 416 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f1 + +COUNT = 255 +Outputlen = 424 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c6 + +COUNT = 256 +Outputlen = 424 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e28029 + +COUNT = 257 +Outputlen = 424 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e1 + +COUNT = 258 +Outputlen = 424 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f + +COUNT = 259 +Outputlen = 424 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e399 + +COUNT = 260 +Outputlen = 432 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa + +COUNT = 261 +Outputlen = 432 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a + +COUNT = 262 +Outputlen = 432 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cb + +COUNT = 263 +Outputlen = 432 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44 + +COUNT = 264 +Outputlen = 432 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470 + +COUNT = 265 +Outputlen = 440 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd + +COUNT = 266 +Outputlen = 440 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709 + +COUNT = 267 +Outputlen = 440 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be7 + +COUNT = 268 +Outputlen = 440 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218 + +COUNT = 269 +Outputlen = 440 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779 + +COUNT = 270 +Outputlen = 448 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa5298 + +COUNT = 271 +Outputlen = 448 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a7604 + +COUNT = 272 +Outputlen = 448 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2 + +COUNT = 273 +Outputlen = 448 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de + +COUNT = 274 +Outputlen = 448 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3 + +COUNT = 275 +Outputlen = 456 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae7 + +COUNT = 276 +Outputlen = 456 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e4 + +COUNT = 277 +Outputlen = 456 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8 + +COUNT = 278 +Outputlen = 456 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0 + +COUNT = 279 +Outputlen = 456 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588 + +COUNT = 280 +Outputlen = 464 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1 + +COUNT = 281 +Outputlen = 464 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1 + +COUNT = 282 +Outputlen = 464 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe8 + +COUNT = 283 +Outputlen = 464 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c7 + +COUNT = 284 +Outputlen = 464 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527f + +COUNT = 285 +Outputlen = 472 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8 + +COUNT = 286 +Outputlen = 472 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a5 + +COUNT = 287 +Outputlen = 472 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f + +COUNT = 288 +Outputlen = 472 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2 + +COUNT = 289 +Outputlen = 472 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377e + +COUNT = 290 +Outputlen = 480 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125c + +COUNT = 291 +Outputlen = 480 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435 + +COUNT = 292 +Outputlen = 480 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c + +COUNT = 293 +Outputlen = 480 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387 + +COUNT = 294 +Outputlen = 480 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffde + +COUNT = 295 +Outputlen = 488 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a + +COUNT = 296 +Outputlen = 488 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bff + +COUNT = 297 +Outputlen = 488 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c + +COUNT = 298 +Outputlen = 488 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf4 + +COUNT = 299 +Outputlen = 488 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac97 + +COUNT = 300 +Outputlen = 496 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd534 + +COUNT = 301 +Outputlen = 496 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75 + +COUNT = 302 +Outputlen = 496 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c5756 + +COUNT = 303 +Outputlen = 496 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c + +COUNT = 304 +Outputlen = 496 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c + +COUNT = 305 +Outputlen = 504 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10 + +COUNT = 306 +Outputlen = 504 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa951 + +COUNT = 307 +Outputlen = 504 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c4835 + +COUNT = 308 +Outputlen = 504 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf46730 + +COUNT = 309 +Outputlen = 504 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313 + +COUNT = 310 +Outputlen = 512 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092 + +COUNT = 311 +Outputlen = 512 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5a + +COUNT = 312 +Outputlen = 512 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568 + +COUNT = 313 +Outputlen = 512 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a25 + +COUNT = 314 +Outputlen = 512 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9 + +COUNT = 315 +Outputlen = 520 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429 + +COUNT = 316 +Outputlen = 520 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a3 + +COUNT = 317 +Outputlen = 520 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72 + +COUNT = 318 +Outputlen = 520 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283 + +COUNT = 319 +Outputlen = 520 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c + +COUNT = 320 +Outputlen = 528 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd53480925243 + +COUNT = 321 +Outputlen = 528 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef + +COUNT = 322 +Outputlen = 528 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01d + +COUNT = 323 +Outputlen = 528 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85 + +COUNT = 324 +Outputlen = 528 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f052 + +COUNT = 325 +Outputlen = 536 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d4296158 + +COUNT = 326 +Outputlen = 536 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a38126 + +COUNT = 327 +Outputlen = 536 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f + +COUNT = 328 +Outputlen = 536 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c961 + +COUNT = 329 +Outputlen = 536 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721 + +COUNT = 330 +Outputlen = 544 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b8 + +COUNT = 331 +Outputlen = 544 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef1518 + +COUNT = 332 +Outputlen = 544 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b + +COUNT = 333 +Outputlen = 544 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063d + +COUNT = 334 +Outputlen = 544 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0 + +COUNT = 335 +Outputlen = 552 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d42961586921 + +COUNT = 336 +Outputlen = 552 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10 + +COUNT = 337 +Outputlen = 552 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8 + +COUNT = 338 +Outputlen = 552 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d3 + +COUNT = 339 +Outputlen = 552 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f + +COUNT = 340 +Outputlen = 560 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fab + +COUNT = 341 +Outputlen = 560 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3 + +COUNT = 342 +Outputlen = 560 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440a + +COUNT = 343 +Outputlen = 560 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd772 + +COUNT = 344 +Outputlen = 560 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba + +COUNT = 345 +Outputlen = 568 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd + +COUNT = 346 +Outputlen = 568 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d101958 + +COUNT = 347 +Outputlen = 568 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7 + +COUNT = 348 +Outputlen = 568 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48 + +COUNT = 349 +Outputlen = 568 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912c + +COUNT = 350 +Outputlen = 576 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c + +COUNT = 351 +Outputlen = 576 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c + +COUNT = 352 +Outputlen = 576 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27a + +COUNT = 353 +Outputlen = 576 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd + +COUNT = 354 +Outputlen = 576 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16 + +COUNT = 355 +Outputlen = 584 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885 + +COUNT = 356 +Outputlen = 584 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d1019586281 + +COUNT = 357 +Outputlen = 584 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d + +COUNT = 358 +Outputlen = 584 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6 + +COUNT = 359 +Outputlen = 584 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fd + +COUNT = 360 +Outputlen = 592 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1 + +COUNT = 361 +Outputlen = 592 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce + +COUNT = 362 +Outputlen = 592 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54 + +COUNT = 363 +Outputlen = 592 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6f + +COUNT = 364 +Outputlen = 592 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e160 + +COUNT = 365 +Outputlen = 600 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db + +COUNT = 366 +Outputlen = 600 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309 + +COUNT = 367 +Outputlen = 600 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659 + +COUNT = 368 +Outputlen = 600 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801c + +COUNT = 369 +Outputlen = 600 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9 + +COUNT = 370 +Outputlen = 608 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e606 + +COUNT = 371 +Outputlen = 608 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3 + +COUNT = 372 +Outputlen = 608 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8 + +COUNT = 373 +Outputlen = 608 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50a + +COUNT = 374 +Outputlen = 608 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1 + +COUNT = 375 +Outputlen = 616 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db1749 + +COUNT = 376 +Outputlen = 616 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4 + +COUNT = 377 +Outputlen = 616 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7 + +COUNT = 378 +Outputlen = 616 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf156 + +COUNT = 379 +Outputlen = 616 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038c + +COUNT = 380 +Outputlen = 624 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f45 + +COUNT = 381 +Outputlen = 624 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd28 + +COUNT = 382 +Outputlen = 624 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f86966 + +COUNT = 383 +Outputlen = 624 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab979 + +COUNT = 384 +Outputlen = 624 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43 + +COUNT = 385 +Outputlen = 632 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db17498570 + +COUNT = 386 +Outputlen = 632 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c + +COUNT = 387 +Outputlen = 632 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be60 + +COUNT = 388 +Outputlen = 632 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72 + +COUNT = 389 +Outputlen = 632 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba + +COUNT = 390 +Outputlen = 640 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc + +COUNT = 391 +Outputlen = 640 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd7 + +COUNT = 392 +Outputlen = 640 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f869661500 + +COUNT = 393 +Outputlen = 640 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c6 + +COUNT = 394 +Outputlen = 640 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d + +COUNT = 395 +Outputlen = 648 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d + +COUNT = 396 +Outputlen = 648 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d + +COUNT = 397 +Outputlen = 648 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a58 + +COUNT = 398 +Outputlen = 648 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8 + +COUNT = 399 +Outputlen = 648 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f + +COUNT = 400 +Outputlen = 656 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566d + +COUNT = 401 +Outputlen = 656 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c + +COUNT = 402 +Outputlen = 656 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efe + +COUNT = 403 +Outputlen = 656 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6 + +COUNT = 404 +Outputlen = 656 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb + +COUNT = 405 +Outputlen = 664 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de9 + +COUNT = 406 +Outputlen = 664 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725 + +COUNT = 407 +Outputlen = 664 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039 + +COUNT = 408 +Outputlen = 664 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418 + +COUNT = 409 +Outputlen = 664 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95 + +COUNT = 410 +Outputlen = 672 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87e + +COUNT = 411 +Outputlen = 672 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0 + +COUNT = 412 +Outputlen = 672 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c + +COUNT = 413 +Outputlen = 672 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da + +COUNT = 414 +Outputlen = 672 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929 + +COUNT = 415 +Outputlen = 680 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a66 + +COUNT = 416 +Outputlen = 680 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad + +COUNT = 417 +Outputlen = 680 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f + +COUNT = 418 +Outputlen = 680 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee53 + +COUNT = 419 +Outputlen = 680 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a + +COUNT = 420 +Outputlen = 688 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7 + +COUNT = 421 +Outputlen = 688 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b3 + +COUNT = 422 +Outputlen = 688 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682d + +COUNT = 423 +Outputlen = 688 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae1 + +COUNT = 424 +Outputlen = 688 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188c + +COUNT = 425 +Outputlen = 696 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac + +COUNT = 426 +Outputlen = 696 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29 + +COUNT = 427 +Outputlen = 696 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad + +COUNT = 428 +Outputlen = 696 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e + +COUNT = 429 +Outputlen = 696 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d81 + +COUNT = 430 +Outputlen = 704 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36 + +COUNT = 431 +Outputlen = 704 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89 + +COUNT = 432 +Outputlen = 704 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d + +COUNT = 433 +Outputlen = 704 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0 + +COUNT = 434 +Outputlen = 704 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d + +COUNT = 435 +Outputlen = 712 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023 + +COUNT = 436 +Outputlen = 712 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a299731 + +COUNT = 437 +Outputlen = 712 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695c + +COUNT = 438 +Outputlen = 712 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede + +COUNT = 439 +Outputlen = 712 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bff + +COUNT = 440 +Outputlen = 720 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d + +COUNT = 441 +Outputlen = 720 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a + +COUNT = 442 +Outputlen = 720 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875a + +COUNT = 443 +Outputlen = 720 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5 + +COUNT = 444 +Outputlen = 720 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02 + +COUNT = 445 +Outputlen = 728 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a + +COUNT = 446 +Outputlen = 728 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a2997316283 + +COUNT = 447 +Outputlen = 728 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143 + +COUNT = 448 +Outputlen = 728 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede6907 + +COUNT = 449 +Outputlen = 728 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b0 + +COUNT = 450 +Outputlen = 736 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118a + +COUNT = 451 +Outputlen = 736 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6 + +COUNT = 452 +Outputlen = 736 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21a + +COUNT = 453 +Outputlen = 736 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad + +COUNT = 454 +Outputlen = 736 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a + +COUNT = 455 +Outputlen = 744 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337 + +COUNT = 456 +Outputlen = 744 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62 + +COUNT = 457 +Outputlen = 744 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923 + +COUNT = 458 +Outputlen = 744 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403 + +COUNT = 459 +Outputlen = 744 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b08031 + +COUNT = 460 +Outputlen = 752 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a + +COUNT = 461 +Outputlen = 752 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b2 + +COUNT = 462 +Outputlen = 752 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab391 + +COUNT = 463 +Outputlen = 752 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4 + +COUNT = 464 +Outputlen = 752 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746 + +COUNT = 465 +Outputlen = 760 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1b + +COUNT = 466 +Outputlen = 760 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd5 + +COUNT = 467 +Outputlen = 760 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e + +COUNT = 468 +Outputlen = 760 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782a + +COUNT = 469 +Outputlen = 760 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd + +COUNT = 470 +Outputlen = 768 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4cce + +COUNT = 471 +Outputlen = 768 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f9 + +COUNT = 472 +Outputlen = 768 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d06 + +COUNT = 473 +Outputlen = 768 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d854 + +COUNT = 474 +Outputlen = 768 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52b + +COUNT = 475 +Outputlen = 776 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601 + +COUNT = 476 +Outputlen = 776 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf + +COUNT = 477 +Outputlen = 776 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00 + +COUNT = 478 +Outputlen = 776 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b + +COUNT = 479 +Outputlen = 776 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da + +COUNT = 480 +Outputlen = 784 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef619 + +COUNT = 481 +Outputlen = 784 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f3 + +COUNT = 482 +Outputlen = 784 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21 + +COUNT = 483 +Outputlen = 784 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d8541527 + +COUNT = 484 +Outputlen = 784 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba169 + +COUNT = 485 +Outputlen = 792 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d + +COUNT = 486 +Outputlen = 792 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1 + +COUNT = 487 +Outputlen = 792 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4 + +COUNT = 488 +Outputlen = 792 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f + +COUNT = 489 +Outputlen = 792 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516 + +COUNT = 490 +Outputlen = 800 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf + +COUNT = 491 +Outputlen = 800 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911 + +COUNT = 492 +Outputlen = 800 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d9 + +COUNT = 493 +Outputlen = 800 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21 + +COUNT = 494 +Outputlen = 800 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5 + +COUNT = 495 +Outputlen = 808 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38 + +COUNT = 496 +Outputlen = 808 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d + +COUNT = 497 +Outputlen = 808 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d + +COUNT = 498 +Outputlen = 808 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f2360 + +COUNT = 499 +Outputlen = 808 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf5 + +COUNT = 500 +Outputlen = 816 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54 + +COUNT = 501 +Outputlen = 816 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdf + +COUNT = 502 +Outputlen = 816 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9 + +COUNT = 503 +Outputlen = 816 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236 + +COUNT = 504 +Outputlen = 816 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d9 + +COUNT = 505 +Outputlen = 824 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c + +COUNT = 506 +Outputlen = 824 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775 + +COUNT = 507 +Outputlen = 824 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973 + +COUNT = 508 +Outputlen = 824 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d6 + +COUNT = 509 +Outputlen = 824 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b77 + +COUNT = 510 +Outputlen = 832 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18 + +COUNT = 511 +Outputlen = 832 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03 + +COUNT = 512 +Outputlen = 832 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d577 + +COUNT = 513 +Outputlen = 832 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519d + +COUNT = 514 +Outputlen = 832 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298 + +COUNT = 515 +Outputlen = 840 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c3446 + +COUNT = 516 +Outputlen = 840 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f7 + +COUNT = 517 +Outputlen = 840 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d49733027 + +COUNT = 518 +Outputlen = 840 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f92 + +COUNT = 519 +Outputlen = 840 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79 + +COUNT = 520 +Outputlen = 848 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b + +COUNT = 521 +Outputlen = 848 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b + +COUNT = 522 +Outputlen = 848 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709eb + +COUNT = 523 +Outputlen = 848 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc142 + +COUNT = 524 +Outputlen = 848 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778 + +COUNT = 525 +Outputlen = 856 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105 + +COUNT = 526 +Outputlen = 856 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7 + +COUNT = 527 +Outputlen = 856 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bb + +COUNT = 528 +Outputlen = 856 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db5 + +COUNT = 529 +Outputlen = 856 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437 + +COUNT = 530 +Outputlen = 864 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c14 + +COUNT = 531 +Outputlen = 864 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4 + +COUNT = 532 +Outputlen = 864 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab3 + +COUNT = 533 +Outputlen = 864 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b + +COUNT = 534 +Outputlen = 864 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe0 + +COUNT = 535 +Outputlen = 872 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3 + +COUNT = 536 +Outputlen = 872 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c738 + +COUNT = 537 +Outputlen = 872 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8d + +COUNT = 538 +Outputlen = 872 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6 + +COUNT = 539 +Outputlen = 872 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec + +COUNT = 540 +Outputlen = 880 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101 + +COUNT = 541 +Outputlen = 880 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd + +COUNT = 542 +Outputlen = 880 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a8 + +COUNT = 543 +Outputlen = 880 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd1 + +COUNT = 544 +Outputlen = 880 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0 + +COUNT = 545 +Outputlen = 888 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d + +COUNT = 546 +Outputlen = 888 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea0 + +COUNT = 547 +Outputlen = 888 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01 + +COUNT = 548 +Outputlen = 888 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa53 + +COUNT = 549 +Outputlen = 888 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c + +COUNT = 550 +Outputlen = 896 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6ae + +COUNT = 551 +Outputlen = 896 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b22 + +COUNT = 552 +Outputlen = 896 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1d + +COUNT = 553 +Outputlen = 896 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ff + +COUNT = 554 +Outputlen = 896 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef25 + +COUNT = 555 +Outputlen = 904 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e5 + +COUNT = 556 +Outputlen = 904 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5 + +COUNT = 557 +Outputlen = 904 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da71 + +COUNT = 558 +Outputlen = 904 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543 + +COUNT = 559 +Outputlen = 904 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb + +COUNT = 560 +Outputlen = 912 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa82 + +COUNT = 561 +Outputlen = 912 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de + +COUNT = 562 +Outputlen = 912 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805 + +COUNT = 563 +Outputlen = 912 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432 + +COUNT = 564 +Outputlen = 912 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3 + +COUNT = 565 +Outputlen = 920 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a0 + +COUNT = 566 +Outputlen = 920 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b186 + +COUNT = 567 +Outputlen = 920 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da715474 + +COUNT = 568 +Outputlen = 920 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec21 + +COUNT = 569 +Outputlen = 920 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752 + +COUNT = 570 +Outputlen = 928 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4 + +COUNT = 571 +Outputlen = 928 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e + +COUNT = 572 +Outputlen = 928 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc + +COUNT = 573 +Outputlen = 928 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f + +COUNT = 574 +Outputlen = 928 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae37286 + +COUNT = 575 +Outputlen = 936 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4 + +COUNT = 576 +Outputlen = 936 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af4 + +COUNT = 577 +Outputlen = 936 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577 + +COUNT = 578 +Outputlen = 936 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90 + +COUNT = 579 +Outputlen = 936 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f + +COUNT = 580 +Outputlen = 944 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9 + +COUNT = 581 +Outputlen = 944 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e7751 + +COUNT = 582 +Outputlen = 944 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8 + +COUNT = 583 +Outputlen = 944 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb + +COUNT = 584 +Outputlen = 944 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce + +COUNT = 585 +Outputlen = 952 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e44695 + +COUNT = 586 +Outputlen = 952 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c + +COUNT = 587 +Outputlen = 952 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de + +COUNT = 588 +Outputlen = 952 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb7 + +COUNT = 589 +Outputlen = 952 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f5405 + +COUNT = 590 +Outputlen = 960 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b + +COUNT = 591 +Outputlen = 960 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c42 + +COUNT = 592 +Outputlen = 960 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370c + +COUNT = 593 +Outputlen = 960 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f + +COUNT = 594 +Outputlen = 960 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29 + +COUNT = 595 +Outputlen = 968 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b6 + +COUNT = 596 +Outputlen = 968 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bc + +COUNT = 597 +Outputlen = 968 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7 + +COUNT = 598 +Outputlen = 968 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9e + +COUNT = 599 +Outputlen = 968 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93 + +COUNT = 600 +Outputlen = 976 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0 + +COUNT = 601 +Outputlen = 976 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63 + +COUNT = 602 +Outputlen = 976 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b7 + +COUNT = 603 +Outputlen = 976 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e2 + +COUNT = 604 +Outputlen = 976 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794 + +COUNT = 605 +Outputlen = 984 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b60939 + +COUNT = 606 +Outputlen = 984 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e + +COUNT = 607 +Outputlen = 984 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938e + +COUNT = 608 +Outputlen = 984 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0ef + +COUNT = 609 +Outputlen = 984 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0 + +COUNT = 610 +Outputlen = 992 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3ba + +COUNT = 611 +Outputlen = 992 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8 + +COUNT = 612 +Outputlen = 992 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b71461 + +COUNT = 613 +Outputlen = 992 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527 + +COUNT = 614 +Outputlen = 992 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a037 + +COUNT = 615 +Outputlen = 1000 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5 + +COUNT = 616 +Outputlen = 1000 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980 + +COUNT = 617 +Outputlen = 1000 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4e + +COUNT = 618 +Outputlen = 1000 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c + +COUNT = 619 +Outputlen = 1000 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990 + +COUNT = 620 +Outputlen = 1008 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41b + +COUNT = 621 +Outputlen = 1008 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac + +COUNT = 622 +Outputlen = 1008 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8 + +COUNT = 623 +Outputlen = 1008 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c + +COUNT = 624 +Outputlen = 1008 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9c + +COUNT = 625 +Outputlen = 1016 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd + +COUNT = 626 +Outputlen = 1016 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de + +COUNT = 627 +Outputlen = 1016 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb1 + +COUNT = 628 +Outputlen = 1016 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd7 + +COUNT = 629 +Outputlen = 1016 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc87 + +COUNT = 630 +Outputlen = 1024 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce9 + +COUNT = 631 +Outputlen = 1024 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2cca + +COUNT = 632 +Outputlen = 1024 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e593 + +COUNT = 633 +Outputlen = 1024 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e2 + +COUNT = 634 +Outputlen = 1024 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8 + +COUNT = 635 +Outputlen = 1032 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c4 + +COUNT = 636 +Outputlen = 1032 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55 + +COUNT = 637 +Outputlen = 1032 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c8 + +COUNT = 638 +Outputlen = 1032 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357 + +COUNT = 639 +Outputlen = 1032 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aa + +COUNT = 640 +Outputlen = 1040 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d9 + +COUNT = 641 +Outputlen = 1040 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273 + +COUNT = 642 +Outputlen = 1040 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f97 + +COUNT = 643 +Outputlen = 1040 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e29973 + +COUNT = 644 +Outputlen = 1040 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e + +COUNT = 645 +Outputlen = 1048 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9 + +COUNT = 646 +Outputlen = 1048 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e + +COUNT = 647 +Outputlen = 1048 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5 + +COUNT = 648 +Outputlen = 1048 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08 + +COUNT = 649 +Outputlen = 1048 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d6 + +COUNT = 650 +Outputlen = 1056 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1 + +COUNT = 651 +Outputlen = 1056 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd2 + +COUNT = 652 +Outputlen = 1056 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72 + +COUNT = 653 +Outputlen = 1056 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc + +COUNT = 654 +Outputlen = 1056 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41 + +COUNT = 655 +Outputlen = 1064 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6e + +COUNT = 656 +Outputlen = 1064 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda + +COUNT = 657 +Outputlen = 1064 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52c + +COUNT = 658 +Outputlen = 1064 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba083108 + +COUNT = 659 +Outputlen = 1064 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5c + +COUNT = 660 +Outputlen = 1072 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107b + +COUNT = 661 +Outputlen = 1072 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765 + +COUNT = 662 +Outputlen = 1072 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5d + +COUNT = 663 +Outputlen = 1072 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc1262 + +COUNT = 664 +Outputlen = 1072 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e867 + +COUNT = 665 +Outputlen = 1080 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29a + +COUNT = 666 +Outputlen = 1080 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a5 + +COUNT = 667 +Outputlen = 1080 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe + +COUNT = 668 +Outputlen = 1080 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c3 + +COUNT = 669 +Outputlen = 1080 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d0 + +COUNT = 670 +Outputlen = 1088 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c2 + +COUNT = 671 +Outputlen = 1088 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b + +COUNT = 672 +Outputlen = 1088 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e + +COUNT = 673 +Outputlen = 1088 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303 + +COUNT = 674 +Outputlen = 1088 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e8677067 + +COUNT = 675 +Outputlen = 1096 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5e + +COUNT = 676 +Outputlen = 1096 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453 + +COUNT = 677 +Outputlen = 1096 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f + +COUNT = 678 +Outputlen = 1096 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c32618 + +COUNT = 679 +Outputlen = 1096 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98 + +COUNT = 680 +Outputlen = 1104 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af9 + +COUNT = 681 +Outputlen = 1104 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b0444 + +COUNT = 682 +Outputlen = 1104 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1 + +COUNT = 683 +Outputlen = 1104 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc126203037169 + +COUNT = 684 +Outputlen = 1104 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac1 + +COUNT = 685 +Outputlen = 1112 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07 + +COUNT = 686 +Outputlen = 1112 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7 + +COUNT = 687 +Outputlen = 1112 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f2835 + +COUNT = 688 +Outputlen = 1112 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9d + +COUNT = 689 +Outputlen = 1112 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907f + +COUNT = 690 +Outputlen = 1120 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989eb + +COUNT = 691 +Outputlen = 1120 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6a + +COUNT = 692 +Outputlen = 1120 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1 + +COUNT = 693 +Outputlen = 1120 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc1262030371693350 + +COUNT = 694 +Outputlen = 1120 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7 + +COUNT = 695 +Outputlen = 1128 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d + +COUNT = 696 +Outputlen = 1128 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a + +COUNT = 697 +Outputlen = 1128 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583ac + +COUNT = 698 +Outputlen = 1128 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddc + +COUNT = 699 +Outputlen = 1128 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276 + +COUNT = 700 +Outputlen = 1136 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e1 + +COUNT = 701 +Outputlen = 1136 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403 + +COUNT = 702 +Outputlen = 1136 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff29 + +COUNT = 703 +Outputlen = 1136 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f + +COUNT = 704 +Outputlen = 1136 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79 + +COUNT = 705 +Outputlen = 1144 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d5532 + +COUNT = 706 +Outputlen = 1144 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad + +COUNT = 707 +Outputlen = 1144 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb540 + +COUNT = 708 +Outputlen = 1144 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e + +COUNT = 709 +Outputlen = 1144 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671b + +COUNT = 710 +Outputlen = 1152 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a3 + +COUNT = 711 +Outputlen = 1152 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46a + +COUNT = 712 +Outputlen = 1152 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac + +COUNT = 713 +Outputlen = 1152 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a + +COUNT = 714 +Outputlen = 1152 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e670 + +COUNT = 715 +Outputlen = 1160 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d55324945 + +COUNT = 716 +Outputlen = 1160 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33 + +COUNT = 717 +Outputlen = 1160 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc + +COUNT = 718 +Outputlen = 1160 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352 + +COUNT = 719 +Outputlen = 1160 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9 + +COUNT = 720 +Outputlen = 1168 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478 + +COUNT = 721 +Outputlen = 1168 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c1 + +COUNT = 722 +Outputlen = 1168 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac + +COUNT = 723 +Outputlen = 1168 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef + +COUNT = 724 +Outputlen = 1168 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce + +COUNT = 725 +Outputlen = 1176 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab + +COUNT = 726 +Outputlen = 1176 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc24 + +COUNT = 727 +Outputlen = 1176 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6 + +COUNT = 728 +Outputlen = 1176 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c + +COUNT = 729 +Outputlen = 1176 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d + +COUNT = 730 +Outputlen = 1184 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df36 + +COUNT = 731 +Outputlen = 1184 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147ed + +COUNT = 732 +Outputlen = 1184 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3f + +COUNT = 733 +Outputlen = 1184 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a7 + +COUNT = 734 +Outputlen = 1184 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b + +COUNT = 735 +Outputlen = 1192 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49 + +COUNT = 736 +Outputlen = 1192 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c72 + +COUNT = 737 +Outputlen = 1192 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c + +COUNT = 738 +Outputlen = 1192 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882 + +COUNT = 739 +Outputlen = 1192 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b + +COUNT = 740 +Outputlen = 1200 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4 + +COUNT = 741 +Outputlen = 1200 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629 + +COUNT = 742 +Outputlen = 1200 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d + +COUNT = 743 +Outputlen = 1200 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810 + +COUNT = 744 +Outputlen = 1200 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38ef + +COUNT = 745 +Outputlen = 1208 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483 + +COUNT = 746 +Outputlen = 1208 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ff + +COUNT = 747 +Outputlen = 1208 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a + +COUNT = 748 +Outputlen = 1208 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdca + +COUNT = 749 +Outputlen = 1208 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924 + +COUNT = 750 +Outputlen = 1216 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c962 + +COUNT = 751 +Outputlen = 1216 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb75 + +COUNT = 752 +Outputlen = 1216 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a9 + +COUNT = 753 +Outputlen = 1216 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b + +COUNT = 754 +Outputlen = 1216 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d + +COUNT = 755 +Outputlen = 1224 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded2 + +COUNT = 756 +Outputlen = 1224 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda54 + +COUNT = 757 +Outputlen = 1224 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b45 + +COUNT = 758 +Outputlen = 1224 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24b + +COUNT = 759 +Outputlen = 1224 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e + +COUNT = 760 +Outputlen = 1232 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5e + +COUNT = 761 +Outputlen = 1232 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8 + +COUNT = 762 +Outputlen = 1232 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf4 + +COUNT = 763 +Outputlen = 1232 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc4 + +COUNT = 764 +Outputlen = 1232 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a + +COUNT = 765 +Outputlen = 1240 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9 + +COUNT = 766 +Outputlen = 1240 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cf + +COUNT = 767 +Outputlen = 1240 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543 + +COUNT = 768 +Outputlen = 1240 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff2 + +COUNT = 769 +Outputlen = 1240 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924 + +COUNT = 770 +Outputlen = 1248 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29c + +COUNT = 771 +Outputlen = 1248 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00 + +COUNT = 772 +Outputlen = 1248 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d + +COUNT = 773 +Outputlen = 1248 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65 + +COUNT = 774 +Outputlen = 1248 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5 + +COUNT = 775 +Outputlen = 1256 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f + +COUNT = 776 +Outputlen = 1256 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8 + +COUNT = 777 +Outputlen = 1256 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c8 + +COUNT = 778 +Outputlen = 1256 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6c + +COUNT = 779 +Outputlen = 1256 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d6 + +COUNT = 780 +Outputlen = 1264 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc116 + +COUNT = 781 +Outputlen = 1264 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c + +COUNT = 782 +Outputlen = 1264 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb9 + +COUNT = 783 +Outputlen = 1264 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d + +COUNT = 784 +Outputlen = 1264 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54 + +COUNT = 785 +Outputlen = 1272 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd + +COUNT = 786 +Outputlen = 1272 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4 + +COUNT = 787 +Outputlen = 1272 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd9 + +COUNT = 788 +Outputlen = 1272 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8a + +COUNT = 789 +Outputlen = 1272 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901 + +COUNT = 790 +Outputlen = 1280 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92 + +COUNT = 791 +Outputlen = 1280 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fc + +COUNT = 792 +Outputlen = 1280 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb91499 + +COUNT = 793 +Outputlen = 1280 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0 + +COUNT = 794 +Outputlen = 1280 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb + +COUNT = 795 +Outputlen = 1288 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937a + +COUNT = 796 +Outputlen = 1288 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350 + +COUNT = 797 +Outputlen = 1288 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42 + +COUNT = 798 +Outputlen = 1288 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd + +COUNT = 799 +Outputlen = 1288 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2 + +COUNT = 800 +Outputlen = 1296 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d + +COUNT = 801 +Outputlen = 1296 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd671 + +COUNT = 802 +Outputlen = 1296 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead + +COUNT = 803 +Outputlen = 1296 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc + +COUNT = 804 +Outputlen = 1296 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367 + +COUNT = 805 +Outputlen = 1304 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66b + +COUNT = 806 +Outputlen = 1304 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0 + +COUNT = 807 +Outputlen = 1304 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a359 + +COUNT = 808 +Outputlen = 1304 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d + +COUNT = 809 +Outputlen = 1304 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240c + +COUNT = 810 +Outputlen = 1312 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d4206 + +COUNT = 811 +Outputlen = 1312 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36 + +COUNT = 812 +Outputlen = 1312 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413 + +COUNT = 813 +Outputlen = 1312 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8 + +COUNT = 814 +Outputlen = 1312 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a877 + +COUNT = 815 +Outputlen = 1320 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436 + +COUNT = 816 +Outputlen = 1320 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f + +COUNT = 817 +Outputlen = 1320 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39 + +COUNT = 818 +Outputlen = 1320 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828 + +COUNT = 819 +Outputlen = 1320 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce139 + +COUNT = 820 +Outputlen = 1328 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59 + +COUNT = 821 +Outputlen = 1328 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f + +COUNT = 822 +Outputlen = 1328 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc + +COUNT = 823 +Outputlen = 1328 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b131 + +COUNT = 824 +Outputlen = 1328 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed + +COUNT = 825 +Outputlen = 1336 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4 + +COUNT = 826 +Outputlen = 1336 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f9 + +COUNT = 827 +Outputlen = 1336 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0 + +COUNT = 828 +Outputlen = 1336 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be + +COUNT = 829 +Outputlen = 1336 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce1396919 + +COUNT = 830 +Outputlen = 1344 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1dd + +COUNT = 831 +Outputlen = 1344 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac + +COUNT = 832 +Outputlen = 1344 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b32 + +COUNT = 833 +Outputlen = 1344 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a + +COUNT = 834 +Outputlen = 1344 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb + +COUNT = 835 +Outputlen = 1352 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e + +COUNT = 836 +Outputlen = 1352 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9e + +COUNT = 837 +Outputlen = 1352 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd23 + +COUNT = 838 +Outputlen = 1352 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0 + +COUNT = 839 +Outputlen = 1352 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a + +COUNT = 840 +Outputlen = 1360 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb88 + +COUNT = 841 +Outputlen = 1360 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b6 + +COUNT = 842 +Outputlen = 1360 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4 + +COUNT = 843 +Outputlen = 1360 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a27 + +COUNT = 844 +Outputlen = 1360 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef + +COUNT = 845 +Outputlen = 1368 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859f + +COUNT = 846 +Outputlen = 1368 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a + +COUNT = 847 +Outputlen = 1368 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343af + +COUNT = 848 +Outputlen = 1368 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5fa + +COUNT = 849 +Outputlen = 1368 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb + +COUNT = 850 +Outputlen = 1376 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb887572 + +COUNT = 851 +Outputlen = 1376 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683eb + +COUNT = 852 +Outputlen = 1376 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f + +COUNT = 853 +Outputlen = 1376 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0d + +COUNT = 854 +Outputlen = 1376 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f4 + +COUNT = 855 +Outputlen = 1384 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1c + +COUNT = 856 +Outputlen = 1384 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a8713 + +COUNT = 857 +Outputlen = 1384 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1d + +COUNT = 858 +Outputlen = 1384 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8 + +COUNT = 859 +Outputlen = 1384 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4 + +COUNT = 860 +Outputlen = 1392 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed5 + +COUNT = 861 +Outputlen = 1392 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090 + +COUNT = 862 +Outputlen = 1392 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f25 + +COUNT = 863 +Outputlen = 1392 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa + +COUNT = 864 +Outputlen = 1392 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683 + +COUNT = 865 +Outputlen = 1400 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571 + +COUNT = 866 +Outputlen = 1400 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a87136770 + +COUNT = 867 +Outputlen = 1400 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc990 + +COUNT = 868 +Outputlen = 1400 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74e + +COUNT = 869 +Outputlen = 1400 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd83 + +COUNT = 870 +Outputlen = 1408 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df3 + +COUNT = 871 +Outputlen = 1408 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb0905819 + +COUNT = 872 +Outputlen = 1408 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f253177 + +COUNT = 873 +Outputlen = 1408 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9 + +COUNT = 874 +Outputlen = 1408 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da14 + +COUNT = 875 +Outputlen = 1416 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f + +COUNT = 876 +Outputlen = 1416 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170 + +COUNT = 877 +Outputlen = 1416 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa + +COUNT = 878 +Outputlen = 1416 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec235 + +COUNT = 879 +Outputlen = 1416 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd831777 + +COUNT = 880 +Outputlen = 1424 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea6 + +COUNT = 881 +Outputlen = 1424 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae + +COUNT = 882 +Outputlen = 1424 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561 + +COUNT = 883 +Outputlen = 1424 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69 + +COUNT = 884 +Outputlen = 1424 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3 + +COUNT = 885 +Outputlen = 1432 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc + +COUNT = 886 +Outputlen = 1432 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d + +COUNT = 887 +Outputlen = 1432 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6 + +COUNT = 888 +Outputlen = 1432 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a80 + +COUNT = 889 +Outputlen = 1432 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b40 + +COUNT = 890 +Outputlen = 1440 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d9 + +COUNT = 891 +Outputlen = 1440 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e69 + +COUNT = 892 +Outputlen = 1440 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a + +COUNT = 893 +Outputlen = 1440 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba9 + +COUNT = 894 +Outputlen = 1440 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295d + +COUNT = 895 +Outputlen = 1448 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7 + +COUNT = 896 +Outputlen = 1448 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a20 + +COUNT = 897 +Outputlen = 1448 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4 + +COUNT = 898 +Outputlen = 1448 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d94 + +COUNT = 899 +Outputlen = 1448 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca + +COUNT = 900 +Outputlen = 1456 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6b + +COUNT = 901 +Outputlen = 1456 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c + +COUNT = 902 +Outputlen = 1456 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a1421 + +COUNT = 903 +Outputlen = 1456 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30 + +COUNT = 904 +Outputlen = 1456 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc57 + +COUNT = 905 +Outputlen = 1464 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03c + +COUNT = 906 +Outputlen = 1464 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0 + +COUNT = 907 +Outputlen = 1464 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936 + +COUNT = 908 +Outputlen = 1464 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b6 + +COUNT = 909 +Outputlen = 1464 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca4402 + +COUNT = 910 +Outputlen = 1472 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e + +COUNT = 911 +Outputlen = 1472 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa + +COUNT = 912 +Outputlen = 1472 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e02 + +COUNT = 913 +Outputlen = 1472 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621c + +COUNT = 914 +Outputlen = 1472 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3e + +COUNT = 915 +Outputlen = 1480 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d1 + +COUNT = 916 +Outputlen = 1480 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b6 + +COUNT = 917 +Outputlen = 1480 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566 + +COUNT = 918 +Outputlen = 1480 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607 + +COUNT = 919 +Outputlen = 1480 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9 + +COUNT = 920 +Outputlen = 1488 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075 + +COUNT = 921 +Outputlen = 1488 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5d + +COUNT = 922 +Outputlen = 1488 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f8 + +COUNT = 923 +Outputlen = 1488 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a + +COUNT = 924 +Outputlen = 1488 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38c + +COUNT = 925 +Outputlen = 1496 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b7 + +COUNT = 926 +Outputlen = 1496 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8f + +COUNT = 927 +Outputlen = 1496 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec3 + +COUNT = 928 +Outputlen = 1496 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e + +COUNT = 929 +Outputlen = 1496 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d992 + +COUNT = 930 +Outputlen = 1504 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121e + +COUNT = 931 +Outputlen = 1504 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe0 + +COUNT = 932 +Outputlen = 1504 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab3 + +COUNT = 933 +Outputlen = 1504 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0 + +COUNT = 934 +Outputlen = 1504 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a + +COUNT = 935 +Outputlen = 1512 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b74111 + +COUNT = 936 +Outputlen = 1512 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b1 + +COUNT = 937 +Outputlen = 1512 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd8 + +COUNT = 938 +Outputlen = 1512 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064 + +COUNT = 939 +Outputlen = 1512 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d9921806 + +COUNT = 940 +Outputlen = 1520 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f + +COUNT = 941 +Outputlen = 1520 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1a + +COUNT = 942 +Outputlen = 1520 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65 + +COUNT = 943 +Outputlen = 1520 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041 + +COUNT = 944 +Outputlen = 1520 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697 + +COUNT = 945 +Outputlen = 1528 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0 + +COUNT = 946 +Outputlen = 1528 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b + +COUNT = 947 +Outputlen = 1528 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38 + +COUNT = 948 +Outputlen = 1528 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f296 + +COUNT = 949 +Outputlen = 1528 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e + +COUNT = 950 +Outputlen = 1536 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8e + +COUNT = 951 +Outputlen = 1536 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab808 + +COUNT = 952 +Outputlen = 1536 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2 + +COUNT = 953 +Outputlen = 1536 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a943 + +COUNT = 954 +Outputlen = 1536 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92 + +COUNT = 955 +Outputlen = 1544 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d + +COUNT = 956 +Outputlen = 1544 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da2 + +COUNT = 957 +Outputlen = 1544 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954 + +COUNT = 958 +Outputlen = 1544 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c10 + +COUNT = 959 +Outputlen = 1544 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07 + +COUNT = 960 +Outputlen = 1552 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee + +COUNT = 961 +Outputlen = 1552 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cb + +COUNT = 962 +Outputlen = 1552 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f0 + +COUNT = 963 +Outputlen = 1552 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f98 + +COUNT = 964 +Outputlen = 1552 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc928643 + +COUNT = 965 +Outputlen = 1560 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0eda + +COUNT = 966 +Outputlen = 1560 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9 + +COUNT = 967 +Outputlen = 1560 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad + +COUNT = 968 +Outputlen = 1560 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d07 + +COUNT = 969 +Outputlen = 1560 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1 + +COUNT = 970 +Outputlen = 1568 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d92 + +COUNT = 971 +Outputlen = 1568 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b + +COUNT = 972 +Outputlen = 1568 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99 + +COUNT = 973 +Outputlen = 1568 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b72 + +COUNT = 974 +Outputlen = 1568 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc9286430540 + +COUNT = 975 +Outputlen = 1576 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03 + +COUNT = 976 +Outputlen = 1576 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64d + +COUNT = 977 +Outputlen = 1576 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74eb + +COUNT = 978 +Outputlen = 1576 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e87 + +COUNT = 979 +Outputlen = 1576 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa16788 + +COUNT = 980 +Outputlen = 1584 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997 + +COUNT = 981 +Outputlen = 1584 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a + +COUNT = 982 +Outputlen = 1584 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e + +COUNT = 983 +Outputlen = 1584 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110 + +COUNT = 984 +Outputlen = 1584 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369 + +COUNT = 985 +Outputlen = 1592 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb2 + +COUNT = 986 +Outputlen = 1592 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb77 + +COUNT = 987 +Outputlen = 1592 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf + +COUNT = 988 +Outputlen = 1592 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e879690 + +COUNT = 989 +Outputlen = 1592 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894af + +COUNT = 990 +Outputlen = 1600 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a + +COUNT = 991 +Outputlen = 1600 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147 + +COUNT = 992 +Outputlen = 1600 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352c + +COUNT = 993 +Outputlen = 1600 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f448 + +COUNT = 994 +Outputlen = 1600 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4ab + +COUNT = 995 +Outputlen = 1608 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17 + +COUNT = 996 +Outputlen = 1608 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb777164 + +COUNT = 997 +Outputlen = 1608 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf9389 + +COUNT = 998 +Outputlen = 1608 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c + +COUNT = 999 +Outputlen = 1608 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622 + +COUNT = 1000 +Outputlen = 1616 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c + +COUNT = 1001 +Outputlen = 1616 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d + +COUNT = 1002 +Outputlen = 1616 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461 + +COUNT = 1003 +Outputlen = 1616 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b1 + +COUNT = 1004 +Outputlen = 1616 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac05 + +COUNT = 1005 +Outputlen = 1624 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48 + +COUNT = 1006 +Outputlen = 1624 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e99 + +COUNT = 1007 +Outputlen = 1624 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0 + +COUNT = 1008 +Outputlen = 1624 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811 + +COUNT = 1009 +Outputlen = 1624 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448f + +COUNT = 1010 +Outputlen = 1632 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a + +COUNT = 1011 +Outputlen = 1632 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a5 + +COUNT = 1012 +Outputlen = 1632 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a + +COUNT = 1013 +Outputlen = 1632 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de + +COUNT = 1014 +Outputlen = 1632 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e49 + +COUNT = 1015 +Outputlen = 1640 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844 + +COUNT = 1016 +Outputlen = 1640 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea + +COUNT = 1017 +Outputlen = 1640 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e2 + +COUNT = 1018 +Outputlen = 1640 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5 + +COUNT = 1019 +Outputlen = 1640 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab44 + +COUNT = 1020 +Outputlen = 1648 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d07 + +COUNT = 1021 +Outputlen = 1648 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a50673 + +COUNT = 1022 +Outputlen = 1648 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af + +COUNT = 1023 +Outputlen = 1648 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fce + +COUNT = 1024 +Outputlen = 1648 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378 + +COUNT = 1025 +Outputlen = 1656 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba24 + +COUNT = 1026 +Outputlen = 1656 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334 + +COUNT = 1027 +Outputlen = 1656 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482 + +COUNT = 1028 +Outputlen = 1656 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd6 + +COUNT = 1029 +Outputlen = 1656 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa + +COUNT = 1030 +Outputlen = 1664 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3f + +COUNT = 1031 +Outputlen = 1664 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459 + +COUNT = 1032 +Outputlen = 1664 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af0461 + +COUNT = 1033 +Outputlen = 1664 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60 + +COUNT = 1034 +Outputlen = 1664 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9f + +COUNT = 1035 +Outputlen = 1672 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9 + +COUNT = 1036 +Outputlen = 1672 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e641 + +COUNT = 1037 +Outputlen = 1672 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e + +COUNT = 1038 +Outputlen = 1672 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53 + +COUNT = 1039 +Outputlen = 1672 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa9274 + +COUNT = 1040 +Outputlen = 1680 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83d + +COUNT = 1041 +Outputlen = 1680 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a541 + +COUNT = 1042 +Outputlen = 1680 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9 + +COUNT = 1043 +Outputlen = 1680 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a8 + +COUNT = 1044 +Outputlen = 1680 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4 + +COUNT = 1045 +Outputlen = 1688 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd + +COUNT = 1046 +Outputlen = 1688 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03 + +COUNT = 1047 +Outputlen = 1688 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e + +COUNT = 1048 +Outputlen = 1688 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e + +COUNT = 1049 +Outputlen = 1688 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d82 + +COUNT = 1050 +Outputlen = 1696 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26 + +COUNT = 1051 +Outputlen = 1696 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0 + +COUNT = 1052 +Outputlen = 1696 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e + +COUNT = 1053 +Outputlen = 1696 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1 + +COUNT = 1054 +Outputlen = 1696 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352 + +COUNT = 1055 +Outputlen = 1704 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139 + +COUNT = 1056 +Outputlen = 1704 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f + +COUNT = 1057 +Outputlen = 1704 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e + +COUNT = 1058 +Outputlen = 1704 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b1 + +COUNT = 1059 +Outputlen = 1704 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8 + +COUNT = 1060 +Outputlen = 1712 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f + +COUNT = 1061 +Outputlen = 1712 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c + +COUNT = 1062 +Outputlen = 1712 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115 + +COUNT = 1063 +Outputlen = 1712 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c772 + +COUNT = 1064 +Outputlen = 1712 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea31 + +COUNT = 1065 +Outputlen = 1720 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8 + +COUNT = 1066 +Outputlen = 1720 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7e + +COUNT = 1067 +Outputlen = 1720 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df + +COUNT = 1068 +Outputlen = 1720 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9 + +COUNT = 1069 +Outputlen = 1720 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5 + +COUNT = 1070 +Outputlen = 1728 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b + +COUNT = 1071 +Outputlen = 1728 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56af + +COUNT = 1072 +Outputlen = 1728 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25 + +COUNT = 1073 +Outputlen = 1728 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5 + +COUNT = 1074 +Outputlen = 1728 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce + +COUNT = 1075 +Outputlen = 1736 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c731 + +COUNT = 1076 +Outputlen = 1736 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2d + +COUNT = 1077 +Outputlen = 1736 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e98 + +COUNT = 1078 +Outputlen = 1736 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a7 + +COUNT = 1079 +Outputlen = 1736 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb78 + +COUNT = 1080 +Outputlen = 1744 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3 + +COUNT = 1081 +Outputlen = 1744 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb613 + +COUNT = 1082 +Outputlen = 1744 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826 + +COUNT = 1083 +Outputlen = 1744 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506d + +COUNT = 1084 +Outputlen = 1744 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178 + +COUNT = 1085 +Outputlen = 1752 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125 + +COUNT = 1086 +Outputlen = 1752 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec06 + +COUNT = 1087 +Outputlen = 1752 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c2 + +COUNT = 1088 +Outputlen = 1752 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b44 + +COUNT = 1089 +Outputlen = 1752 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7 + +COUNT = 1090 +Outputlen = 1760 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f + +COUNT = 1091 +Outputlen = 1760 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e9 + +COUNT = 1092 +Outputlen = 1760 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63 + +COUNT = 1093 +Outputlen = 1760 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2 + +COUNT = 1094 +Outputlen = 1760 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc + +COUNT = 1095 +Outputlen = 1768 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee8 + +COUNT = 1096 +Outputlen = 1768 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a25 + +COUNT = 1097 +Outputlen = 1768 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e0 + +COUNT = 1098 +Outputlen = 1768 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fe + +COUNT = 1099 +Outputlen = 1768 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f + +COUNT = 1100 +Outputlen = 1776 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f + +COUNT = 1101 +Outputlen = 1776 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1 + +COUNT = 1102 +Outputlen = 1776 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be636276 + +COUNT = 1103 +Outputlen = 1776 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a738 + +COUNT = 1104 +Outputlen = 1776 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599 + +COUNT = 1105 +Outputlen = 1784 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c6 + +COUNT = 1106 +Outputlen = 1784 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b19 + +COUNT = 1107 +Outputlen = 1784 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3 + +COUNT = 1108 +Outputlen = 1784 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a0 + +COUNT = 1109 +Outputlen = 1784 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e03 + +COUNT = 1110 +Outputlen = 1792 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f76 + +COUNT = 1111 +Outputlen = 1792 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67d + +COUNT = 1112 +Outputlen = 1792 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae + +COUNT = 1113 +Outputlen = 1792 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a5 + +COUNT = 1114 +Outputlen = 1792 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69 + +COUNT = 1115 +Outputlen = 1800 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7 + +COUNT = 1116 +Outputlen = 1800 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b197514 + +COUNT = 1117 +Outputlen = 1800 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a + +COUNT = 1118 +Outputlen = 1800 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85 + +COUNT = 1119 +Outputlen = 1800 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb + +COUNT = 1120 +Outputlen = 1808 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaa + +COUNT = 1121 +Outputlen = 1808 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c + +COUNT = 1122 +Outputlen = 1808 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797 + +COUNT = 1123 +Outputlen = 1808 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33 + +COUNT = 1124 +Outputlen = 1808 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29 + +COUNT = 1125 +Outputlen = 1816 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d + +COUNT = 1126 +Outputlen = 1816 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f61 + +COUNT = 1127 +Outputlen = 1816 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ec + +COUNT = 1128 +Outputlen = 1816 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad33 + +COUNT = 1129 +Outputlen = 1816 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edc + +COUNT = 1130 +Outputlen = 1824 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885 + +COUNT = 1131 +Outputlen = 1824 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c10 + +COUNT = 1132 +Outputlen = 1824 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401 + +COUNT = 1133 +Outputlen = 1824 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944f + +COUNT = 1134 +Outputlen = 1824 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d + +COUNT = 1135 +Outputlen = 1832 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc + +COUNT = 1136 +Outputlen = 1832 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f611769 + +COUNT = 1137 +Outputlen = 1832 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6 + +COUNT = 1138 +Outputlen = 1832 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5 + +COUNT = 1139 +Outputlen = 1832 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd2 + +COUNT = 1140 +Outputlen = 1840 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1 + +COUNT = 1141 +Outputlen = 1840 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325 + +COUNT = 1142 +Outputlen = 1840 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d727 + +COUNT = 1143 +Outputlen = 1840 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbee + +COUNT = 1144 +Outputlen = 1840 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735 + +COUNT = 1145 +Outputlen = 1848 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c0 + +COUNT = 1146 +Outputlen = 1848 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6 + +COUNT = 1147 +Outputlen = 1848 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a + +COUNT = 1148 +Outputlen = 1848 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc08 + +COUNT = 1149 +Outputlen = 1848 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0 + +COUNT = 1150 +Outputlen = 1856 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee3 + +COUNT = 1151 +Outputlen = 1856 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9 + +COUNT = 1152 +Outputlen = 1856 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241 + +COUNT = 1153 +Outputlen = 1856 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc90 + +COUNT = 1154 +Outputlen = 1856 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c + +COUNT = 1155 +Outputlen = 1864 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c07828 + +COUNT = 1156 +Outputlen = 1864 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e + +COUNT = 1157 +Outputlen = 1864 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e90 + +COUNT = 1158 +Outputlen = 1864 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6 + +COUNT = 1159 +Outputlen = 1864 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa08034 + +COUNT = 1160 +Outputlen = 1872 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee30201 + +COUNT = 1161 +Outputlen = 1872 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b + +COUNT = 1162 +Outputlen = 1872 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b + +COUNT = 1163 +Outputlen = 1872 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5 + +COUNT = 1164 +Outputlen = 1872 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d + +COUNT = 1165 +Outputlen = 1880 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766 + +COUNT = 1166 +Outputlen = 1880 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547 + +COUNT = 1167 +Outputlen = 1880 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7e + +COUNT = 1168 +Outputlen = 1880 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f + +COUNT = 1169 +Outputlen = 1880 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4 + +COUNT = 1170 +Outputlen = 1888 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191 + +COUNT = 1171 +Outputlen = 1888 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868 + +COUNT = 1172 +Outputlen = 1888 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b8130 + +COUNT = 1173 +Outputlen = 1888 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224 + +COUNT = 1174 +Outputlen = 1888 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8 + +COUNT = 1175 +Outputlen = 1896 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361 + +COUNT = 1176 +Outputlen = 1896 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20b + +COUNT = 1177 +Outputlen = 1896 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b6 + +COUNT = 1178 +Outputlen = 1896 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46 + +COUNT = 1179 +Outputlen = 1896 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd + +COUNT = 1180 +Outputlen = 1904 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733b + +COUNT = 1181 +Outputlen = 1904 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6a + +COUNT = 1182 +Outputlen = 1904 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d40 + +COUNT = 1183 +Outputlen = 1904 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7de + +COUNT = 1184 +Outputlen = 1904 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e82266 + +COUNT = 1185 +Outputlen = 1912 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6 + +COUNT = 1186 +Outputlen = 1912 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20bf023 + +COUNT = 1187 +Outputlen = 1912 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b654aa + +COUNT = 1188 +Outputlen = 1912 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46ac36 + +COUNT = 1189 +Outputlen = 1912 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a + +COUNT = 1190 +Outputlen = 1920 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733bf77b + +COUNT = 1191 +Outputlen = 1920 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6ae633 + +COUNT = 1192 +Outputlen = 1920 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d4028e5 + +COUNT = 1193 +Outputlen = 1920 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7dec29f + +COUNT = 1194 +Outputlen = 1920 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9 + +COUNT = 1195 +Outputlen = 1928 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e61113 + +COUNT = 1196 +Outputlen = 1928 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20bf0235e58 + +COUNT = 1197 +Outputlen = 1928 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b654aa4592 + +COUNT = 1198 +Outputlen = 1928 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46ac369c18 + +COUNT = 1199 +Outputlen = 1928 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a547d + +COUNT = 1200 +Outputlen = 1936 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733bf77b4d58 + +COUNT = 1201 +Outputlen = 1936 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6ae6338b6c + +COUNT = 1202 +Outputlen = 1936 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d4028e5408f + +COUNT = 1203 +Outputlen = 1936 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7dec29fb672 + +COUNT = 1204 +Outputlen = 1936 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d2 + +COUNT = 1205 +Outputlen = 1944 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e611134623 + +COUNT = 1206 +Outputlen = 1944 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20bf0235e58f567 + +COUNT = 1207 +Outputlen = 1944 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b654aa459239ed + +COUNT = 1208 +Outputlen = 1944 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46ac369c186265 + +COUNT = 1209 +Outputlen = 1944 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a547d89e2 + +COUNT = 1210 +Outputlen = 1952 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733bf77b4d58cca4 + +COUNT = 1211 +Outputlen = 1952 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6ae6338b6c153f + +COUNT = 1212 +Outputlen = 1952 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d4028e5408f99ce + +COUNT = 1213 +Outputlen = 1952 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7dec29fb67234ec + +COUNT = 1214 +Outputlen = 1952 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d22761 + +COUNT = 1215 +Outputlen = 1960 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1d + +COUNT = 1216 +Outputlen = 1960 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20bf0235e58f5678d25 + +COUNT = 1217 +Outputlen = 1960 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b654aa459239ed8cf5 + +COUNT = 1218 +Outputlen = 1960 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46ac369c1862654f7f + +COUNT = 1219 +Outputlen = 1960 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a547d89e2b26a + +COUNT = 1220 +Outputlen = 1968 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733bf77b4d58cca49258 + +COUNT = 1221 +Outputlen = 1968 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6ae6338b6c153f7705 + +COUNT = 1222 +Outputlen = 1968 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d4028e5408f99ce9455 + +COUNT = 1223 +Outputlen = 1968 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7dec29fb67234ec71bf + +COUNT = 1224 +Outputlen = 1968 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d22761f1d3 + +COUNT = 1225 +Outputlen = 1976 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1dc383 + +COUNT = 1226 +Outputlen = 1976 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20bf0235e58f5678d255c37 + +COUNT = 1227 +Outputlen = 1976 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b654aa459239ed8cf5e654 + +COUNT = 1228 +Outputlen = 1976 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46ac369c1862654f7f3d1d + +COUNT = 1229 +Outputlen = 1976 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a547d89e2b26a3ef4 + +COUNT = 1230 +Outputlen = 1984 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733bf77b4d58cca49258897d + +COUNT = 1231 +Outputlen = 1984 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6ae6338b6c153f7705173f + +COUNT = 1232 +Outputlen = 1984 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d4028e5408f99ce9455efa0 + +COUNT = 1233 +Outputlen = 1984 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7dec29fb67234ec71bf6948 + +COUNT = 1234 +Outputlen = 1984 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d22761f1d35bdf + +COUNT = 1235 +Outputlen = 1992 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1dc3832566 + +COUNT = 1236 +Outputlen = 1992 +Msg = afc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6 +Output = 45c65255731e3679b4662f55b02bc5d1c8038a1d778fe91144a5c7d3a286c78c54f52135134a3c6a19a9e6e546de21b2e8a7e280290709f0e482a51bffa95137a381268d10195862818309b2a4954c656d1725c7ad1a29973162832d62afd538cf74e1b70d1775a9f77dc7c7380ea034f5b1869af46c1c26bce29e1980f0de9e55543e7eda19a56453c8b7d58a28ad7a33bc243c7242ffda5409cfd8f8ffd4b350c6d0023f27f93e9eb46a871367706170074d8a2080f0a8b68b8fc6b14b8b4da256e9e64dcb7771640e992eea2334e6411b03368f2d7ebe2dec063a254b1975141f6117691ae6582e5547e20bf0235e58f5678d255c37350d + +COUNT = 1237 +Outputlen = 1992 +Msg = 7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8c +Output = b44d25998e5cf77a83a4c0b2aae3061785adc7507d76fe07f4dcf299e04c991c922b51570fb843ab04cce25de258fda0560454c0e17be715d8051f388c48351e72ce0f8df8daa7643d3659e0e7be600a584039a14f85ad695ce143b923295e2d00c9a4394d4973302706bbbc8ddf01da7154740577c5de11b7938ece4eceb169c896d5d52ce3fe715f283583acb54078bc5ae6434c4a0a9b453543f8c86fd97f42a3598f39e7c0fd2343afad1dc9902efa39a6d8d4f936d566fec33bd86f38f954ebad74ebbbbf93898df0d6e25482a33e8b3e190e32df4e9824c266e04ca3d86a98ecb8b6af1a5e908b7ea3b654aa459239ed8cf5e654ba29 + +COUNT = 1238 +Outputlen = 1992 +Msg = 3e20cf32669fa3fd6e94e519b52a1dba33cd1f3a6947975e9829e4db326d2a18 +Output = 3389aea66244b91428f0896be26a9c3cfc5c1be2f07514f5d4718a1ed31855e148c4aa19b9f50f7619b04a1338b58fcb9b953d214f8218faa0e4b2daf467300283c96192d32d48b5e6801cf1560b72b5e8a418ee534e2e9ede69071403782ae08b128f236040d64f926db52af6aa532543ec211e90fdb72c9ed0efac1c8cd72357ba08310887c326183d9daddcea9e8352f89c5882fdcad24bdff26b6caa8ab3bd809d3828d3be79d0d5faefc8c74ec2356a805d9410b66607ba8e0064f2968c104d075e8796909c4c7811f1d5bbd66e53314e01b12ab9e7a72b4415fea8a06b85ad3302b5fc081bb6986f3b46ac369c1862654f7f3d1d9133 + +COUNT = 1239 +Outputlen = 1992 +Msg = 7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9 +Output = de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a547d89e2b26a3ef4aeb8 + +COUNT = 1240 +Outputlen = 2000 +Msg = dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0 +Output = 00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4ccef6192bbf3a54af18e57b0c146101f6aeaa822bc4b4c9708b09f0b3bab41bcce964d999d1107bd7c27af989ebe1e104a35478df362ec4c9628f5ea29cc1164b92960d42068a59b1ddcb8875722ed59df36ea654d97b6bf39e5075121ec93f8a8ea6ee5d923997ae8a9d4c315a3d074e3ff83dfa26490f0f5b00a3cc3f110f0f761eaac885a3d1eee302014191733bf77b4d58cca49258897d6460 + +COUNT = 1241 +Outputlen = 2000 +Msg = e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715 +Output = 7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c9c6ef265b6d9f559ca73da32c427e135ba0db900d9003b19c9cf116f542a760418b1a435ac75ed5ab4ef151808c3849c3bce11c3cd285dd75e5c9fd0a0b32a89640a68e6e5b270f966f33911cfdffd03488b52b4c7fd1b2219de133e77519c426a63b9d8afac2ccab273ebd23765616b04446d6ac403f46ac0c147eda629eb7583c8bd00dc7c30fcd6711b36f99f80ac94b683ebb090581970ae7e696c4c0afa9b5dafe07d1ab80877cbd09b705a0147d62d72a506732459a54142a0892c56afb61359e910f1e67dc99c0c105325a7d9f65b9868fa6ae6338b6c153f7705173f4a22 + +COUNT = 1242 +Outputlen = 2000 +Msg = 76891a7bcc6c04490035b743152f64a8dd2ea18ab472b8d36ecf45858d0b0046 +Output = e8447df87d01beeb724c9a2a38ab00fcc24e9bd17860e673b021222d621a7810e5d3dcead3f6b72810ff1ad242bf79074d2fd63503cbe7a2ffe81b1c57566568b01dda7b440ad27aee54d2f8696615008efee01c682dae7d875aa21ab3914d063d21f1d97fa9d57709ebbab376a88b1da805f0fc5ab8370cd3b714613fd8e5939f972d72fd5dff9e17c1ace1ff2980ac9aac5c3ffd2d97a95bf42a5d6bb914996ead2413e6dc1b3284e4f45f2f2531775561001a14213e0220f86ab32b65e2e2f9f03b99ff5e352cf461589a38af04611ff9418e2115ad25a826be63627650ae8797d401d7279241135b81308d4028e5408f99ce9455efa06988 + +COUNT = 1243 +Outputlen = 2000 +Msg = 445b17ce13727ae842b877c4750611a9eb79823bc5752da0a5e9d4e27bd40b94 +Output = e7708cdc22f03b0bfaca03e5d11d46cac118fded60b64bf4acffb35b0b474fbe85d270e625b95d54157d6597eb4fbdfa482e636d4a44c9de13c71387654c1a254a85063dd7720ffd5c6fc50ab97914c67ce6f0da5ae14ec0f2c5cdad79c4d85415279d21e236519dc1422c5b6dd156ffe432c14f40eb458f21e20527b23c03e299736adc12620303716933509e0f8b8a8cef58a75810406b6dc47d65ae5d89f0ebbc72d8b1315f6a4a272b0da9fa19d9fa69aba98c30621cd63a4ac0b041a9439f986b728110f44817b157de7fcebf60d7a885f1c77211e5506da6d2a73806a53f33944fcbeecc9022b5f224e7dec29fb67234ec71bf69485245 + +COUNT = 1244 +Outputlen = 2000 +Msg = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b +Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d22761f1d35bdff79a + +COUNT = 1245 +Outputlen = 2000 +Msg = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4 +Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1dc38325666c + From 0830f9233332c8160b90e1af1a9fa4e2058fa3e4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 9 May 2018 16:34:45 -0400 Subject: [PATCH 225/988] Use a checklist for bumping openssl version (#4221) * Use a checklist for bumping openssl version * words * empty commit to retrigger jenkins --- .github/ISSUE_TEMPLATE/openssl-release.md | 9 ++++++++ docs/doing-a-release.rst | 26 ++++++----------------- 2 files changed, 16 insertions(+), 19 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/openssl-release.md diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md new file mode 100644 index 000000000000..6167739f16a5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -0,0 +1,9 @@ +- [ ] Windows + - [ ] Run the `openssl-release-1.1` Jenkins job + - [ ] Copy the resulting artifacts to the Windows builders and unzip them in the root of the file system +- [ ] macOS + - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula + - [ ] Wait for it to be merged + - [ ] Run the `update-brew-openssl` Jenkins job +- [ ] manylinux1 + - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux1/install_openssl.sh#L5-L6) diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index b70744eb68b3..456179855bd0 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -3,32 +3,19 @@ Doing a release Doing a release of ``cryptography`` requires a few steps. -Verifying and upgrading OpenSSL version ---------------------------------------- +Verifying OpenSSL version +------------------------- The release process creates wheels bundling OpenSSL for Windows, macOS, and Linux. Check that the Windows and macOS Jenkins builders have the latest version of OpenSSL installed and verify that the latest version is present in the ``pyca/cryptography-manylinux1`` docker containers. If anything is out -of date: +of date follow the instructions for upgrading OpenSSL. -Upgrading Windows -~~~~~~~~~~~~~~~~~ +Upgrading OpenSSL +----------------- -Run the ``openssl-release-1.1`` Jenkins job, then copy the resulting artifacts -to the Windows builders and unzip them in the root of the file system. - -Upgrading macOS -~~~~~~~~~~~~~~~ - -Run the ``update-brew-openssl`` Jenkins job. - -Upgrading ``manylinux1`` docker containers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Send a pull request to the ``pyca/infra`` project updating the version and -file hash in ``cryptography-manylinux1/install_openssl.sh``. Once this is -merged the updated image will be available to the wheel builder. +Use the `upgrading OpenSSL issue template`_. Bumping the version number -------------------------- @@ -91,6 +78,7 @@ Post-release tasks * Send an email to the `mailing list`_ and `python-announce`_ announcing the release. +.. _`upgrading OpenSSL issue template`: https://github.com/pyca/cryptography/issues/new?template=openssl-release.md .. _`milestone`: https://github.com/pyca/cryptography/milestones .. _`mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev .. _`python-announce`: https://mail.python.org/mailman/listinfo/python-announce-list From 6c9a13f438c3d01c905cbbae269efce0748ac692 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 11 May 2018 23:04:22 -0400 Subject: [PATCH 226/988] fixed variable name to be correct (#4226) --- src/cryptography/hazmat/backends/openssl/backend.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index bfcf6fbad265..9cf969cd7e93 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1296,9 +1296,9 @@ def elliptic_curve_supported(self, curve): except UnsupportedAlgorithm: curve_nid = self._lib.NID_undef - ctx = self._lib.EC_GROUP_new_by_curve_name(curve_nid) + group = self._lib.EC_GROUP_new_by_curve_name(curve_nid) - if ctx == self._ffi.NULL: + if group == self._ffi.NULL: errors = self._consume_errors() self.openssl_assert( curve_nid == self._lib.NID_undef or @@ -1310,7 +1310,7 @@ def elliptic_curve_supported(self, curve): return False else: self.openssl_assert(curve_nid != self._lib.NID_undef) - self._lib.EC_GROUP_free(ctx) + self._lib.EC_GROUP_free(group) return True def elliptic_curve_signature_algorithm_supported( From 33ae3cea990b307eafaa5f52232eba8315fd05fe Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Sat, 12 May 2018 07:41:37 -0400 Subject: [PATCH 227/988] Fix some callback type signatures. (#4227) * Fix some callback type signatures. SSL_CTX_set_psk_server_callback: https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_psk_server_callback.html https://github.com/openssl/openssl/blob/OpenSSL_1_0_2/ssl/ssl.h#L1355 https://github.com/openssl/openssl/blob/OpenSSL_1_1_0/include/openssl/ssl.h#L734 SSL_CTX_set_tlsext_servername_callback: https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_tlsext_servername_callback.html https://github.com/openssl/openssl/blob/OpenSSL_1_0_2/ssl/s3_lib.c#L3964 https://github.com/openssl/openssl/blob/OpenSSL_1_1_0/ssl/s3_lib.c#L3499 * Missed a spot --- src/_cffi_src/openssl/ssl.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index d9b11259dbcf..91cedac08cfc 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -252,7 +252,7 @@ SSL *, const char *, unsigned char *, - int + unsigned int )); void SSL_CTX_set_psk_client_callback(SSL_CTX *, unsigned int (*)( @@ -401,7 +401,7 @@ void SSL_set_tlsext_host_name(SSL *, char *); void SSL_CTX_set_tlsext_servername_callback( SSL_CTX *, - int (*)(const SSL *, int *, void *)); + int (*)(SSL *, int *, void *)); void SSL_CTX_set_tlsext_servername_arg( SSL_CTX *, void *); @@ -738,7 +738,7 @@ SSL *, const char *, unsigned char *, - int + unsigned int )) = NULL; void (*SSL_CTX_set_psk_client_callback)(SSL_CTX *, unsigned int (*)( From 36ad98fd5e4b7358dc2aa903b6d51569bf19c5f8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 12 May 2018 11:57:32 -0400 Subject: [PATCH 228/988] Add support for extracting timestamp from a Fernet token (#4229) * Add API for retrieving the seconds-to-expiry for the token, given a TTL. * Process PR feedback: * Do compute the TTL, but just the age of the token. The caller can decided what to do next. * Factored out the HMAC signature verification to a separate function. * Fixed a copy&paste mistake in the test cases * Tests cleanup. * `struct` no longer needed * Document `def age()` * typo in `age()` documentation * token, not data * remove test for TTL expiry that is already covered by the parameterized `test_invalid()`. * let's call this extract_timestamp and just return timestamp * review comments * it's UNIX I know this --- CHANGELOG.rst | 3 +++ docs/fernet.rst | 16 ++++++++++++++++ src/cryptography/fernet.py | 21 +++++++++++++++------ tests/test_fernet.py | 9 +++++++++ 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6ab6b04481af..4cabaf7f4213 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,9 @@ Changelog .. note:: This version is not yet released and is under active development. +* Added :meth:`~cryptography.fernet.Fernet.extract_timestamp` to get the + authenticated timestamp of a :doc:`Fernet ` token. + .. _v2-2-2: 2.2.2 - 2018-03-27 diff --git a/docs/fernet.rst b/docs/fernet.rst index a0ffe64f8d72..2d7d2281ff75 100644 --- a/docs/fernet.rst +++ b/docs/fernet.rst @@ -80,6 +80,22 @@ has support for implementing key rotation via :class:`MultiFernet`. :raises TypeError: This exception is raised if ``token`` is not ``bytes``. + .. method:: extract_timestamp(token) + + .. versionadded:: 2.3 + + Returns the timestamp for the token. The caller can then decide if + the token is about to expire and, for example, issue a new token. + + :param bytes token: The Fernet token. This is the result of calling + :meth:`encrypt`. + :returns int: The UNIX timestamp of the token. + :raises cryptography.fernet.InvalidToken: If the ``token``'s signature + is invalid this exception + is raised. + :raises TypeError: This exception is raised if ``token`` is not + ``bytes``. + .. class:: MultiFernet(fernets) diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index 1f33a12d899c..ac2dd0b63536 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -74,6 +74,12 @@ def decrypt(self, token, ttl=None): timestamp, data = Fernet._get_unverified_token_data(token) return self._decrypt_data(data, timestamp, ttl) + def extract_timestamp(self, token): + timestamp, data = Fernet._get_unverified_token_data(token) + # Verify the token was not tampered with. + self._verify_signature(data) + return timestamp + @staticmethod def _get_unverified_token_data(token): if not isinstance(token, bytes): @@ -93,6 +99,14 @@ def _get_unverified_token_data(token): raise InvalidToken return timestamp, data + def _verify_signature(self, data): + h = HMAC(self._signing_key, hashes.SHA256(), backend=self._backend) + h.update(data[:-32]) + try: + h.verify(data[-32:]) + except InvalidSignature: + raise InvalidToken + def _decrypt_data(self, data, timestamp, ttl): current_time = int(time.time()) if ttl is not None: @@ -102,12 +116,7 @@ def _decrypt_data(self, data, timestamp, ttl): if current_time + _MAX_CLOCK_SKEW < timestamp: raise InvalidToken - h = HMAC(self._signing_key, hashes.SHA256(), backend=self._backend) - h.update(data[:-32]) - try: - h.verify(data[-32:]) - except InvalidSignature: - raise InvalidToken + self._verify_signature(data) iv = data[9:25] ciphertext = data[25:-32] diff --git a/tests/test_fernet.py b/tests/test_fernet.py index 6558d11b5853..75ecc356a913 100644 --- a/tests/test_fernet.py +++ b/tests/test_fernet.py @@ -122,6 +122,15 @@ def test_bad_key(self, backend): with pytest.raises(ValueError): Fernet(base64.urlsafe_b64encode(b"abc"), backend=backend) + def test_extract_timestamp(self, monkeypatch, backend): + f = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) + current_time = 1526138327 + monkeypatch.setattr(time, "time", lambda: current_time) + token = f.encrypt(b'encrypt me') + assert f.extract_timestamp(token) == current_time + with pytest.raises(InvalidToken): + f.extract_timestamp(b"nonsensetoken") + @pytest.mark.requires_backend_interface(interface=CipherBackend) @pytest.mark.requires_backend_interface(interface=HMACBackend) From 617825d026a933e355d644ba12a408c63b8fb20f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 12 May 2018 14:33:20 -0400 Subject: [PATCH 229/988] Fixed some confusing type descriptions in docs (#4231) --- docs/hazmat/primitives/key-derivation-functions.rst | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index 0196e438a388..0f3d1afe0756 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -282,7 +282,6 @@ Different KDFs are suitable for different tasks such as: :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the provided ``backend`` does not implement :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` - :raises TypeError: This is raised if the provided ``info`` is a unicode object :raises TypeError: This exception is raised if ``info`` is not ``bytes``. .. method:: derive(key_material) @@ -290,8 +289,6 @@ Different KDFs are suitable for different tasks such as: :param bytes key_material: The input key material. :return bytes: The derived key. - :raises TypeError: This is raised if the provided ``key_material`` is - a unicode object :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. @@ -314,7 +311,7 @@ Different KDFs are suitable for different tasks such as: called more than once. :raises TypeError: This is raised if the provided ``key_material`` is - a unicode object + a ``unicode`` object This checks whether deriving a new key from the supplied ``key_material`` generates the same key as the ``expected_key``, and From 590692fe6a071b3c694ae8966b84b45ece9b1a07 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Sat, 12 May 2018 15:07:21 -0400 Subject: [PATCH 230/988] Check for CMAC_Init errors. (#4232) --- src/cryptography/hazmat/backends/openssl/cmac.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/cmac.py b/src/cryptography/hazmat/backends/openssl/cmac.py index 5919017a9f1a..e20f66d3c543 100644 --- a/src/cryptography/hazmat/backends/openssl/cmac.py +++ b/src/cryptography/hazmat/backends/openssl/cmac.py @@ -36,10 +36,11 @@ def __init__(self, backend, algorithm, ctx=None): self._backend.openssl_assert(ctx != self._backend._ffi.NULL) ctx = self._backend._ffi.gc(ctx, self._backend._lib.CMAC_CTX_free) - self._backend._lib.CMAC_Init( + res = self._backend._lib.CMAC_Init( ctx, self._key, len(self._key), evp_cipher, self._backend._ffi.NULL ) + self._backend.openssl_assert(res == 1) self._ctx = ctx From 056c9ddc412fb23b81d3192f9f4e2403982ef09a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 12 May 2018 15:17:06 -0400 Subject: [PATCH 231/988] switch to py3 on docs job (#4230) * switch to py3 on docs job * somehow unicode isn't a word --- .travis.yml | 2 +- docs/fernet.rst | 18 ++++++------- docs/hazmat/primitives/aead.rst | 6 ++--- docs/hazmat/primitives/asymmetric/ec.rst | 4 +-- docs/hazmat/primitives/asymmetric/rsa.rst | 6 ++--- .../primitives/cryptographic-hashes.rst | 2 +- docs/hazmat/primitives/mac/cmac.rst | 2 +- docs/hazmat/primitives/mac/hmac.rst | 2 +- docs/hazmat/primitives/padding.rst | 16 ++++++------ .../primitives/symmetric-encryption.rst | 12 ++++----- docs/spelling_wordlist.txt | 1 + docs/x509/reference.rst | 26 +++++++++---------- tox.ini | 2 +- 13 files changed, 50 insertions(+), 49 deletions(-) diff --git a/.travis.yml b/.travis.yml index 87673d7eaab6..ef51e7bab692 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ matrix: env: TOXENV=py27 OPENSSL=1.1.0h - python: 3.5 env: TOXENV=py35 OPENSSL=1.1.0h - - python: 2.7 + - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0h addons: apt: diff --git a/docs/fernet.rst b/docs/fernet.rst index 2d7d2281ff75..9b95621ef888 100644 --- a/docs/fernet.rst +++ b/docs/fernet.rst @@ -19,9 +19,9 @@ has support for implementing key rotation via :class:`MultiFernet`. >>> f = Fernet(key) >>> token = f.encrypt(b"my deep dark secret") >>> token - '...' + b'...' >>> f.decrypt(token) - 'my deep dark secret' + b'my deep dark secret' :param bytes key: A URL-safe base64-encoded 32-byte key. This **must** be kept secret. Anyone with this key is able to create and @@ -113,9 +113,9 @@ has support for implementing key rotation via :class:`MultiFernet`. >>> f = MultiFernet([key1, key2]) >>> token = f.encrypt(b"Secret message!") >>> token - '...' + b'...' >>> f.decrypt(token) - 'Secret message!' + b'Secret message!' MultiFernet performs all encryption options using the *first* key in the ``list`` provided. MultiFernet attempts to decrypt tokens with each key in @@ -152,14 +152,14 @@ has support for implementing key rotation via :class:`MultiFernet`. >>> f = MultiFernet([key1, key2]) >>> token = f.encrypt(b"Secret message!") >>> token - '...' + b'...' >>> f.decrypt(token) - 'Secret message!' + b'Secret message!' >>> key3 = Fernet(Fernet.generate_key()) >>> f2 = MultiFernet([key3, key1, key2]) >>> rotated = f2.rotate(token) >>> f2.decrypt(rotated) - 'Secret message!' + b'Secret message!' :param bytes msg: The token to re-encrypt. :returns bytes: A secure message that cannot be read or altered without @@ -205,9 +205,9 @@ password through a key derivation function such as >>> f = Fernet(key) >>> token = f.encrypt(b"Secret message!") >>> token - '...' + b'...' >>> f.decrypt(token) - 'Secret message!' + b'Secret message!' In this scheme, the salt has to be stored in a retrievable location in order to derive the same key from the password in the future. diff --git a/docs/hazmat/primitives/aead.rst b/docs/hazmat/primitives/aead.rst index 7b01f745e26e..ee4214a1501b 100644 --- a/docs/hazmat/primitives/aead.rst +++ b/docs/hazmat/primitives/aead.rst @@ -34,7 +34,7 @@ also support providing integrity for associated data which is not encrypted. >>> nonce = os.urandom(12) >>> ct = chacha.encrypt(nonce, data, aad) >>> chacha.decrypt(nonce, ct, aad) - 'a secret message' + b'a secret message' .. classmethod:: generate_key() @@ -99,7 +99,7 @@ also support providing integrity for associated data which is not encrypted. >>> nonce = os.urandom(12) >>> ct = aesgcm.encrypt(nonce, data, aad) >>> aesgcm.decrypt(nonce, ct, aad) - 'a secret message' + b'a secret message' .. classmethod:: generate_key(bit_length) @@ -181,7 +181,7 @@ also support providing integrity for associated data which is not encrypted. >>> nonce = os.urandom(13) >>> ct = aesccm.encrypt(nonce, data, aad) >>> aesccm.decrypt(nonce, ct, aad) - 'a secret message' + b'a secret message' .. classmethod:: generate_key(bit_length) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index edcfdfcb7405..bbab2246313a 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -669,7 +669,7 @@ This sample demonstrates how to generate a private key and serialize it. ... encryption_algorithm=serialization.BestAvailableEncryption(b'testpassword') ... ) >>> serialized_private.splitlines()[0] - '-----BEGIN ENCRYPTED PRIVATE KEY-----' + b'-----BEGIN ENCRYPTED PRIVATE KEY-----' You can also serialize the key without a password, by relying on :class:`~cryptography.hazmat.primitives.serialization.NoEncryption`. @@ -685,7 +685,7 @@ The public key is serialized as follows: ... format=serialization.PublicFormat.SubjectPublicKeyInfo ... ) >>> serialized_public.splitlines()[0] - '-----BEGIN PUBLIC KEY-----' + b'-----BEGIN PUBLIC KEY-----' This is the part that you would normally share with the rest of the world. diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index 46cc30af9552..635a46260b94 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -100,7 +100,7 @@ to serialize the key. ... encryption_algorithm=serialization.BestAvailableEncryption(b'mypassword') ... ) >>> pem.splitlines()[0] - '-----BEGIN ENCRYPTED PRIVATE KEY-----' + b'-----BEGIN ENCRYPTED PRIVATE KEY-----' It is also possible to serialize without encryption using :class:`~cryptography.hazmat.primitives.serialization.NoEncryption`. @@ -113,7 +113,7 @@ It is also possible to serialize without encryption using ... encryption_algorithm=serialization.NoEncryption() ... ) >>> pem.splitlines()[0] - '-----BEGIN RSA PRIVATE KEY-----' + b'-----BEGIN RSA PRIVATE KEY-----' For public keys you can use :meth:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey.public_bytes` @@ -128,7 +128,7 @@ to serialize the key. ... format=serialization.PublicFormat.SubjectPublicKeyInfo ... ) >>> pem.splitlines()[0] - '-----BEGIN PUBLIC KEY-----' + b'-----BEGIN PUBLIC KEY-----' Signing ~~~~~~~ diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index 7e23ce9e463a..021e433d700a 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -26,7 +26,7 @@ Message digests (Hashing) >>> digest.update(b"abc") >>> digest.update(b"123") >>> digest.finalize() - 'l\xa1=R\xcap\xc8\x83\xe0\xf0\xbb\x10\x1eBZ\x89\xe8bM\xe5\x1d\xb2\xd29%\x93\xafj\x84\x11\x80\x90' + b'l\xa1=R\xcap\xc8\x83\xe0\xf0\xbb\x10\x1eBZ\x89\xe8bM\xe5\x1d\xb2\xd29%\x93\xafj\x84\x11\x80\x90' If the backend doesn't support the requested ``algorithm`` an :class:`~cryptography.exceptions.UnsupportedAlgorithm` exception will be diff --git a/docs/hazmat/primitives/mac/cmac.rst b/docs/hazmat/primitives/mac/cmac.rst index b316e4c3d062..a5b13caf71d2 100644 --- a/docs/hazmat/primitives/mac/cmac.rst +++ b/docs/hazmat/primitives/mac/cmac.rst @@ -32,7 +32,7 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`. >>> c = cmac.CMAC(algorithms.AES(key), backend=default_backend()) >>> c.update(b"message to authenticate") >>> c.finalize() - 'CT\x1d\xc8\x0e\x15\xbe4e\xdb\xb6\x84\xca\xd9Xk' + b'CT\x1d\xc8\x0e\x15\xbe4e\xdb\xb6\x84\xca\xd9Xk' If the backend doesn't support the requested ``algorithm`` an :class:`~cryptography.exceptions.UnsupportedAlgorithm` exception will be diff --git a/docs/hazmat/primitives/mac/hmac.rst b/docs/hazmat/primitives/mac/hmac.rst index a0e2014d219b..c605e58c825f 100644 --- a/docs/hazmat/primitives/mac/hmac.rst +++ b/docs/hazmat/primitives/mac/hmac.rst @@ -32,7 +32,7 @@ of a message. >>> h = hmac.HMAC(key, hashes.SHA256(), backend=default_backend()) >>> h.update(b"message to hash") >>> h.finalize() - '#F\xdaI\x8b"e\xc4\xf1\xbb\x9a\x8fc\xff\xf5\xdex.\xbc\xcd/+\x8a\x86\x1d\x84\'\xc3\xa6\x1d\xd8J' + b'#F\xdaI\x8b"e\xc4\xf1\xbb\x9a\x8fc\xff\xf5\xdex.\xbc\xcd/+\x8a\x86\x1d\x84\'\xc3\xa6\x1d\xd8J' If the backend doesn't support the requested ``algorithm`` an :class:`~cryptography.exceptions.UnsupportedAlgorithm` exception will be diff --git a/docs/hazmat/primitives/padding.rst b/docs/hazmat/primitives/padding.rst index e49fc4946480..245b554780fb 100644 --- a/docs/hazmat/primitives/padding.rst +++ b/docs/hazmat/primitives/padding.rst @@ -25,16 +25,16 @@ multiple of the block size. >>> padder = padding.PKCS7(128).padder() >>> padded_data = padder.update(b"11111111111111112222222222") >>> padded_data - '1111111111111111' + b'1111111111111111' >>> padded_data += padder.finalize() >>> padded_data - '11111111111111112222222222\x06\x06\x06\x06\x06\x06' + b'11111111111111112222222222\x06\x06\x06\x06\x06\x06' >>> unpadder = padding.PKCS7(128).unpadder() >>> data = unpadder.update(padded_data) >>> data - '1111111111111111' + b'1111111111111111' >>> data + unpadder.finalize() - '11111111111111112222222222' + b'11111111111111112222222222' :param block_size: The size of the block in :term:`bits` that the data is being padded to. @@ -68,16 +68,16 @@ multiple of the block size. >>> padder = padding.ANSIX923(128).padder() >>> padded_data = padder.update(b"11111111111111112222222222") >>> padded_data - '1111111111111111' + b'1111111111111111' >>> padded_data += padder.finalize() >>> padded_data - '11111111111111112222222222\x00\x00\x00\x00\x00\x06' + b'11111111111111112222222222\x00\x00\x00\x00\x00\x06' >>> unpadder = padding.ANSIX923(128).unpadder() >>> data = unpadder.update(padded_data) >>> data - '1111111111111111' + b'1111111111111111' >>> data + unpadder.finalize() - '11111111111111112222222222' + b'11111111111111112222222222' :param block_size: The size of the block in :term:`bits` that the data is being padded to. diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 126a9184c24a..593b880b070c 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -42,7 +42,7 @@ it fits your needs before implementing anything using this module.** >>> ct = encryptor.update(b"a secret message") + encryptor.finalize() >>> decryptor = cipher.decryptor() >>> decryptor.update(ct) + decryptor.finalize() - 'a secret message' + b'a secret message' :param algorithms: A :class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm` @@ -151,7 +151,7 @@ Algorithms >>> ct = encryptor.update(b"a secret message") >>> decryptor = cipher.decryptor() >>> decryptor.update(ct) - 'a secret message' + b'a secret message' .. class:: TripleDES(key) @@ -229,7 +229,7 @@ Weak ciphers >>> ct = encryptor.update(b"a secret message") >>> decryptor = cipher.decryptor() >>> decryptor.update(ct) - 'a secret message' + b'a secret message' .. class:: IDEA(key) @@ -278,7 +278,7 @@ Modes .. doctest:: >>> from cryptography.hazmat.primitives.ciphers.modes import CBC - >>> iv = "a" * 16 + >>> iv = b"a" * 16 >>> mode = CBC(iv) @@ -471,7 +471,7 @@ Modes .. testoutput:: - a secret message! + b'a secret message!' .. class:: XTS(tweak) @@ -594,7 +594,7 @@ Interfaces >>> len_decrypted = decryptor.update_into(ct, buf) >>> # get the plaintext from the buffer reading only the bytes written (len_decrypted) >>> bytes(buf[:len_decrypted]) + decryptor.finalize() - 'a secret message' + b'a secret message' .. method:: finalize() diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index fb07fd0f31de..160971d95c31 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -96,6 +96,7 @@ timestamp tunable Ubuntu unencrypted +unicode unpadded unpadding verifier diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 014d1f473db2..279c4c741954 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -271,7 +271,7 @@ X.509 Certificate Object >>> from cryptography.hazmat.primitives import hashes >>> cert.fingerprint(hashes.SHA256()) - '\x86\xd2\x187Gc\xfc\xe7}[+E9\x8d\xb4\x8f\x10\xe5S\xda\x18u\xbe}a\x03\x08[\xac\xa04?' + b'\x86\xd2\x187Gc\xfc\xe7}[+E9\x8d\xb4\x8f\x10\xe5S\xda\x18u\xbe}a\x03\x08[\xac\xa04?' .. attribute:: serial_number @@ -389,8 +389,8 @@ X.509 Certificate Object >>> for ext in cert.extensions: ... print(ext) - , critical=False, value=)> - , critical=False, value=)> + , critical=False, value=)> + , critical=False, value=)> , critical=True, value=)> , critical=False, value=, policy_qualifiers=None)>])>)> , critical=True, value=)> @@ -461,7 +461,7 @@ X.509 CRL (Certificate Revocation List) Object >>> from cryptography.hazmat.primitives import hashes >>> crl.fingerprint(hashes.SHA256()) - 'e\xcf.\xc4:\x83?1\xdc\xf3\xfc\x95\xd7\xb3\x87\xb3\x8e\xf8\xb93!\x87\x07\x9d\x1b\xb4!\xb9\xe4W\xf4\x1f' + b'e\xcf.\xc4:\x83?1\xdc\xf3\xfc\x95\xd7\xb3\x87\xb3\x8e\xf8\xb93!\x87\x07\x9d\x1b\xb4!\xb9\xe4W\xf4\x1f' .. attribute:: signature_hash_algorithm @@ -501,7 +501,7 @@ X.509 CRL (Certificate Revocation List) Object .. doctest:: >>> crl.issuer - , value=u'US')>, , value=u'cryptography.io')>])> + , value='US')>, , value='cryptography.io')>])> .. attribute:: next_update @@ -1132,9 +1132,9 @@ X.509 CSR (Certificate Signing Request) Builder Object 3 >>> for attribute in cert.subject: ... print(attribute) - , value=u'US')> - , value=u'Test Certificates 2011')> - , value=u'Good CA')> + , value='US')> + , value='Test Certificates 2011')> + , value='Good CA')> .. attribute:: rdns @@ -1152,7 +1152,7 @@ X.509 CSR (Certificate Signing Request) Builder Object .. doctest:: >>> cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME) - [, value=u'Good CA')>] + [, value='Good CA')>] .. method:: public_bytes(backend) @@ -1759,7 +1759,7 @@ X.509 Extensions >>> from cryptography.hazmat.backends import default_backend >>> issuer_cert = x509.load_pem_x509_certificate(pem_data, default_backend()) >>> x509.AuthorityKeyIdentifier.from_issuer_public_key(issuer_cert.public_key()) - + .. classmethod:: from_issuer_subject_key_identifier(ski) @@ -1790,7 +1790,7 @@ X.509 Extensions >>> issuer_cert = x509.load_pem_x509_certificate(pem_data, default_backend()) >>> ski = issuer_cert.extensions.get_extension_for_class(x509.SubjectKeyIdentifier) >>> x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier(ski) - + .. class:: SubjectKeyIdentifier(digest) @@ -1837,7 +1837,7 @@ X.509 Extensions >>> from cryptography.hazmat.backends import default_backend >>> csr = x509.load_pem_x509_csr(pem_req_data, default_backend()) >>> x509.SubjectKeyIdentifier.from_public_key(csr.public_key()) - + .. class:: SubjectAlternativeName(general_names) @@ -1877,7 +1877,7 @@ X.509 Extensions >>> ext = cert.extensions.get_extension_for_oid(ExtensionOID.SUBJECT_ALTERNATIVE_NAME) >>> # Get the dNSName entries from the SAN extension >>> ext.value.get_values_for_type(x509.DNSName) - [u'www.cryptography.io', u'cryptography.io'] + ['www.cryptography.io', 'cryptography.io'] .. class:: IssuerAlternativeName(general_names) diff --git a/tox.ini b/tox.ini index 6dfe1c7219f7..a1e97c5073ea 100644 --- a/tox.ini +++ b/tox.ini @@ -39,7 +39,7 @@ commands = extras = docs docstest -basepython = python2.7 +basepython = python3 commands = sphinx-build -j4 -T -W -b html -d {envtmpdir}/doctrees docs docs/_build/html sphinx-build -j4 -T -W -b latex -d {envtmpdir}/doctrees docs docs/_build/latex From 7548c63b5e70ed1b2e3e85cb56bb579441545048 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 12 May 2018 16:15:26 -0400 Subject: [PATCH 232/988] Run no longer used debugging output from travis (#4233) --- .travis/run.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.travis/run.sh b/.travis/run.sh index 2b9479d843e8..1e2ba71b3b6c 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -36,7 +36,3 @@ else fi source ~/.venv/bin/activate tox -# Output information about linking of the OpenSSL library on OS X -if [[ "$(uname -s)" == "Darwin" ]]; then - otool -L $(find .tox -name "_openssl*.so") -fi From 40c6d4051214c13e0c0640b55edadb0e5aa0ea0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 13 May 2018 16:23:49 +0200 Subject: [PATCH 233/988] Use pytest instead of py.test per upstream recommendation, #dropthedot (#4236) http://blog.pytest.org/2016/whats-new-in-pytest-30/ https://twitter.com/hashtag/dropthedot --- docs/development/getting-started.rst | 2 +- tox.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index 96b4b6d74f91..953ae9597790 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -61,7 +61,7 @@ automatically, so all you have to do is: .. code-block:: console - $ py.test + $ pytest ... 62746 passed in 220.43 seconds diff --git a/tox.ini b/tox.ini index a1e97c5073ea..86d23aae1d0e 100644 --- a/tox.ini +++ b/tox.ini @@ -74,7 +74,7 @@ deps = {[testenv]deps} pytest-random commands = - py.test --capture=no --strict --random {posargs} + pytest --capture=no --strict --random {posargs} [flake8] exclude = .tox,*.egg,.git,_build,.hypothesis From aedb3f0714253f7c985ddd19dd017c5a6fcc1173 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 14 May 2018 08:45:42 -0400 Subject: [PATCH 234/988] Add SHA512/224 and SHA512/256 test vectors from NIST CAVP (#4237) --- docs/development/test-vectors.rst | 2 +- .../hashes/SHA2/SHA512_224LongMsg.rsp | 519 ++++ .../hashes/SHA2/SHA512_224Monte.rsp | 309 +++ .../hashes/SHA2/SHA512_224Monte.txt | 2209 +++++++++++++++++ .../hashes/SHA2/SHA512_224ShortMsg.rsp | 523 ++++ .../hashes/SHA2/SHA512_256LongMsg.rsp | 519 ++++ .../hashes/SHA2/SHA512_256Monte.rsp | 309 +++ .../hashes/SHA2/SHA512_256Monte.txt | 2209 +++++++++++++++++ .../hashes/SHA2/SHA512_256ShortMsg.rsp | 523 ++++ 9 files changed, 7121 insertions(+), 1 deletion(-) create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_224LongMsg.rsp create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.rsp create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.txt create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_224ShortMsg.rsp create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_256LongMsg.rsp create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.rsp create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.txt create mode 100644 vectors/cryptography_vectors/hashes/SHA2/SHA512_256ShortMsg.rsp diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 3eb810ccf71a..d28e32323cba 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -405,7 +405,7 @@ Hashes * MD5 from :rfc:`1321`. * RIPEMD160 from the `RIPEMD website`_. * SHA1 from `NIST CAVP`_. -* SHA2 (224, 256, 384, 512) from `NIST CAVP`_. +* SHA2 (224, 256, 384, 512, 512/224, 512/256) from `NIST CAVP`_. * SHA3 (224, 256, 384, 512) from `NIST CAVP`_. * SHAKE (128, 256) from `NIST CAVP`_. * Blake2s and Blake2b from OpenSSL `test/evptests.txt`_. diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_224LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224LongMsg.rsp new file mode 100644 index 000000000000..9cc1903d0327 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224LongMsg.rsp @@ -0,0 +1,519 @@ +# CAVS 21.1 +# "SHA-512/224 LongMsg" information for "sha_values" +# SHA-512/224 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:34:13 2017 + +[L = 28] + +Len = 1816 +Msg = 9625ae618ea633fd7ae5b20ceafd6b1f3ab1a6aa20aded66810e78f38925e9c2fa783a32c40af3f9d7dda0c635b482254b1d85a281af7231109166cd133c8360e281e5e39bcdd7c601ac47928a8c78cdb3c4f71e97d4d0b1c0ee01dd3db62f04f44798bb3a76492ba15a91b7110cb5e01babe56589a36fae3a2f336a2d1d5778dbd23c03ca8db0f25ff0657ff4bca1252adc38c080a5b8f0255ce3be0bf862823d2ab704729b74e1e275aa305824a566895ed677a460113e2a7bf91f00d0b8ebc358f3035b27fcc1d3f14a1367cd2769df39a9d21c5ee361f1965cd6342cc17a1463d6 +MD = 72640a79fbb1cfb26e09b4b35385389ed633a55e092906d01a7186e1 + +Len = 2608 +Msg = 0c20650801df9765482e7e79f6a0ef0dc5db8a94649da85611fd8ecd6af4e74f801b71ee2eb6f69da9f27e94576bc3f5e5f1e5af948c5fa2d3bd3a0513078005d7aef4af0abf00109650ef9b32095ccb7be4ea09473036cf36dc0a0e8af2d4cd386256133e019e0838d139572e83a4d6b13a03692692152461e168af76bdc9efcbbeffe27284b9cbb6fcc490f4e08160ad7d9798d8b9e5e87d54bbb27f6e49b2ba4a57e44d5137a2395af80d2c28ddaf97340d5f06ad8c64b1be6add4e0f3b602a8ec7e1786f02d5e9713e987d649f0c98e8cf845877f4e026a6dff98ba7863f4513b5a09be600acedccfcf78f9bafbfd82044cf751e03a3039481cdde3f149833608aea5dbf1b6f6ef09bf30bd5f5107e64d40a06aaa3f77110b823eddeccb21cfdaf876601396593678454991a5847b23ce7fbb224bb2298a3ecc1638c96d727738a3f5fb4 +MD = aff2287ab978d604bab6fe2b5fb498d14c4b169f688064e19640b597 + +Len = 3400 +Msg = e637a85c9a85c62bf2679889967e8d3d05d8c9ea1f67c72be6b243e185cb57cc9281e45990d633bbb8b4dc3df9dbe7d73d1e32ffeecf12c1b8783d1291cbe862f7dc2c70798eae62794b7f1530f941b2f3298c82b4919003cbbcfb3bf7001d4c9fb149495e947f48bf9649b845bee3f5af619e1a79958617a6e74303bd513db31266048b46d0ee9411fc02cf3f1414c9f92e327046c33f25d262de12eda592bed66523de3a2a436ff8e5710127e21e565af80e2b22030256d59494118ee6629675146eec418ac500fbb95ff7041047c35927fbf4163d16d139e42ca8a9fbf66277ddaf5a63d8bd70a2e19459de85d8397f23c1732959c4bf85bc707e45cc964b6227acd3a8fc73e675c3d8cebe2b18df5254284f633f54484283263c6a418979c0592efd19de2f8bfdc8f3feabe951de5c23f831ccd70e93f7a017892042191318ddfd80bd673986c158ac92ada7c95d25f6f8c06d0a39c92c7d0b0e70b78c41f31ae1059d7dd80049dccc32cc4dca853336f1a54dbe1f116a81ca7361882b2dd878a234bf0956211eba1c8511c49a7d104cac8774dc069437141b5ffc9d3efc4f5f07b42df4f910c7 +MD = f35f575bb7889ae170f9ca3b3d2405eb111d7fd3e6fb9a1607fa94d5 + +Len = 4192 +Msg = fc337b05b1808c3250776c7eea726322a48f664ebea63bc1cd7ede984b402463522b9e7ea58ac09ff0e342ab5172c7ce16d5bdcac909848f6a95d20dfb055646429a9ba7ca4030982bc006528b3719f065c752c9898cacfe64d2974f82859a3351e83b27288a234687777e1aa1aba1b217cceff40718fd35459cf407e8a63752097e46a7c751e3d08e6e73ac9ab5a63ab64b5af34a93bd5d945ab2dd365277ccf1c284ceb07bb65fc80eacaf7e3c72b0caae5c6d5ae7359dda7699787370a0c9911dbd45eaf2e51bbcbff3cc552a4b3dd95cbd0b40faad1e9e577181a7e8fb7072f8b8b37d9cb72bf2ea0eab28667a096dbd457403b66d076865029fdaa2d0ea1bb93ec1726376b8f2f5c6f3fed8463b0d39bc50ab01bc81c108147b1585675f14ca1717d02e68e9454ae34ce068f9fb4238e94941c5e4b42fa86ebc5f7b07f6e6910b5c9fe4d7e7724f2d60d5feda7392229505cbe92bc73cadd90bc16cf9d71878e238e76f09d9016e6cd4e58230c8885f882c5455dae3707f1d10423e862b32e56355b1b647e87a0e675318dc4425a9578a67e1f1382f52860272eadaf41abd42575804a1d83c6696e78377f45eb07f73635e7ca58fd46a2b50dac1288bcb40f686ece91806fc4d70b40c09b2c5919119dab82c5925f940d4ceefd01095674369b8b767031751b5039697d7ffc3f167b2b91dfaf544c75deb455a1e7b58154e03b561864a546228b755cc +MD = 76e87d874ef2e551881c088acd73133bca4427e0660f159cdea8d989 + +Len = 4984 +Msg = 87820cec07f329889b4065a507efc391774aee9712ab6f6bd3f722c89469eb576c91a5d33b9c5b6b83d5bb677a6cc70f5d76cec806369b81c19bec4d5c0926517d5d46e1382b1be6e149b3831f9213f842e42ac6d76b081479224c51ea96db1b62eed85f2628d0c25da534401fe80d13d09bebd7acd21eeba294291a6698747bc24c41952d1be1c79ef028e8a2f61e2aada3f744adf446d0e5fa6df1f995583a45806bcb738db8bd4d3276c1cf45ae03810438550458e689ea5bff1ecb17ef2094913c492306bc6c11740614cf5c2668f5c69551d68768df58bfc7e903a5a1f457879e56630c559c93bdc028cac3ec1fb0f2f5824e07329ad82ead9ac9c8d680356a783c5b29eb147b158c47e7036af05b90422e9162ae8211b199784706f68ad743b14135e4e69d708452b74ea307a59ea6639eca1f425eac4f73cca2ea69dbe51933ae16c5afff1a13fac1282b2a04203e401a1fc758f8501123de05f9973b06f5e5cb2855ac0222c96cad9d243dd78a5fc1e9b8e15716a6fd91f696bde971e2deafdf931b466d30af90c3d415a7e48312ce55bef5a781551ea65c7dbdc54722dc79347fa0e50aebcb4e4bf686d0f4b45e4fa4598cb00106794857e38194836ef72b10136af29ffc278f8c2aff20cec54b2c1fb02dd95e61186031f092bfee6d38aebc7703d3f50acb39cf9909ff3c5de14d0eec608c5f0d02d730cb77ac50c8a6e880d4f3f2d4bebd365c6a2bd50424299ab934ad31cdb33f939d9db8c571274ac2a352c0b604c0076c7bc6ee0aefc42afc67b19d2e70fad87ec08dde7118302a246f18f4864cb7b1c574d5d906c5e2ec59628bb7ec108bd47fe0c470170f8e50f72a4f16cc754cc1288ebe7431 +MD = e82083b15fd2850fd894e28d88418882cf692b8581b728997e0b67ae + +Len = 5776 +Msg = da1cd2f1c4e90aa6c6bd4afcc9e571de58dce9a4bad4e5455e93e6c87d8084fcfafe6b698df8a48620bd162d790f4c4b1a7678dc65dbb817045199e58836da98507b72daad40d3e343a471f0b3db7ef07781f8800d2de619574adf884222cb9fa63cee2b6de82226f818632dbe71913436a27278f8f5f7b51f23c099f16de179c2e8e744151916b505c1f5cce3fa0d7e2183edac6e59715223874401de3ea48f6c28650dedfa39f932492eb56a9e7838fecc7104b981de572c1c74a651be9b476ea4716e3cb4125a495517d09b845cc9962507682096c52e028a577191154e0a8f03124f4c6e29411090b606bdd54099b134b5c0eac0af3e6d7af54ae86a454196ee519863510714519f153d1ab8ad1017a485f4602623ef3594571a9ce509524c0c3431ca85333cd22d3c5ef8562a968f1b7feccaf1a9a9217f84c7f6b021a77906c602c93135225ce03152a0d73f93e241aa907048c9d4fae4843b3ef015a6e5830cf3a77d962db660feff5a62746fd8c00ec999540cd8886a605cbcd06eb9572c10edae92ddc4aa56ab4f6e1f5292393db37d8e3df91e93ba1f14b876b34798a9d9d624989251fe6a3e2923376064cd63a295982a190ce37bc94a790a6cb871a16f9852b63e3b7b43c174c2d2264e5cd7e2fafd43f20b3f5667e648b52173a7bcdb19801568eae98a3b1a93172db6ad447b9205b20e8471f300cf6d9e5be205a32443f6dd98c610e6b502de2ffc0589507647fa9cf5dd3ff99cef30efa16c52fe52fcfb355637b7003614eb421ca4b8a3da00222c2d807211432dd8cd7c7955746e2ed8452ba5a87fc638017713f902e6afa5c78740d3d2e2fe71af627371d7ae7ec0d6369e78a90c6d566af66b6e2fc1fd1d2fd8b6402615d4a3fbd60ebda0548d9a3b303818834f34566ce8ab6a06dbcd52a245152d3851ceac0551d5c3780da0a44f5a7fedfeef222050755c5550dd262b6af6e704ce3ff37215fa51ec2781c1c65cddfd60e195409d5ec40596d56e +MD = 4cb0baadfda35eaf66bfbb96095dfc049c9cb27da24f29b9511348e2 + +Len = 6568 +Msg = 1e13f580fa2de14f1294e1eba9ce789c75072c9f54fcdc253c17549d70db1f36fa839ca055e655136a9e8b93be691672e9cf6c164a06fffdf912ccfdfd3030d1bf75fed1bfb3d001869c9a4ddc2a85133a3efae28287fc82eea5bc34468e673a5731439aa05afa204ed636a26bd76d87529aff8a66467ebc03184cc8b5bd6c7ba8ff928460a47c78aa938519d33978d7172ba2975c0d2bb421b2a643b184e69c9c2713166759fe11831db23a7c184c0a733b0c90cea2ab712ebcef2da1ad7ea31af0f0d81e4127f4bfbae38dce3c91284d1064fd23cea7fb137e520ceffedb9a09a44e52eb23a02848b3419b326cf03a8cf3d367c359c75bb940f56a0240a6885389580d37c910b50450f3eb0e7210471a2c8155160bb298074a00ce423a8676dfe733906bf920a4ddd82105cb149b57de03954f84ac11bae4e39cc117b6246b95080a63ed7c78fcba95f572d21b3673c0c037dd75038bca3a55f1cae97a276f5d33030f271abfc582cd95b98a4e8ba1a8aa918851d9c9cef0e626712050388a1faf461b7f9a9e071fc929625a7742eb7e0ac8d780f672d1eedf633e24feffc5c3c5fc0f5fc6bccb78d1daf6ac5c03592a2807536a222fd81c88d2ba5e4c232731bd4d742e64c218752ccffce7c775f2954c74827725a8ed6228986c34044db952df60d0543d57f7fe2432fc727e40bea5be37ee10c68417a808e0dc0fec24820c725eae3919246ffbff287eb7490dc543c5791f9bce6c5fd671d09358ce518a48c06e9345c0d0885406db0b1df2841058ab629c820607cbd4a9901875707bd9ef0fb909e0f9044af281732a0c3f4ca6cab619ed2b33fe668af849f3d09a4b78e7a86797728d68bebbb81764ecfa0e8f832fc79a0020f835e0a823adcf16686e1ad39fc66345a3eb98f2f04026e971d4695e932b67949e42bf0045cddcab7cc36ed8891c1be75eda7179264620d51e7c668aa629ca5698940d47d8db5e202c7fcdfe4e23023b40912f93e0fe4385bc8f61fc271c902f8d33b4c60360bd3e22ab1e8e1663800bf21ab88946f1f7c3f41641fd3f8a21e725289ac5efe360cd064f49d00863fe1d1b7df6a382a6a5556e17f0d316fde546097aa98bc3ecb1957f71350c4dabe23a64c0d028b9a5b304d19d55c6d3fc44 +MD = 13f224102f57b2a5774d979be2ff6691a9ae7125a1443e805598abe9 + +Len = 7360 +Msg = 559c62738820c2cf3de11c2a30409b12845e31c54f8c3647590352b121d69ccc212403de5392eec4f4f81f41885bdd961e1c5253d56e326c9f0d9d8f452e47b5acb1d6f8569e8ba42bcf25907aea02af3b9388e297dfc310aa0b4f79876e79477caca166982de3966bcdf6bf0dd55384622b9a1a9bc5325b00633016ed7e7baa1b7b2dd321253cc33b5a59754904183e1b4c52a5eb0ac8742b7f080f82469505118842e5fa70df5323de175a37609904ee5e76288f94ca84b3c59f0b4bae0e80e43aa7442af4146dabc1f817decf1dff64c9cf4e8d4d83b21e9fbdb3529f30451ef82699b99b22395c6cc454473aee5604f525bcef1b3a27f67429af9eff4179462c858cb04b53e0bd4543b8788a5232564a401dbde8360ac2acaca637b88a47e53d8dc416eeed8a57b53dec7ba592bbe331e717fd9bc0840baf0e4126b053d5829306eaf36b395eb02579985875f6183210e452b91c20bd58e4172772d1e44ba596b8a550aa7f8552fbc06315e1c572cc50fd77f8539edc31b58e00230184d2d7ae6b9e34930727c5a1daf5bcd049f0375afb2ec328820a1e893d76422a7c929e43e67da70e186a8f7d8ff7542cc8bbfd95a51e2183136ea8c9ea2fd53315b285bdf2e9b103fb793af9a711e6dc8bfaa568c5f01a4c9a3156db5ed3e704945a1184578a5b5af97a4e7be9ea79c8dad6b83d214cb66b5f7ab128610b7d8544b4cc00dd09acfb5896516d1e2b15d8fd77bd7b83d8fec8aa724018bb7fa19e6ce53d994b0eadce60f4cd360e7bc2f43b043c89b13ff94bc3408b1433d65a375318ecb86b4064bc5bbd493e81838904dda6bed17327afddf10e1a8292b8b138427362c30348dbab8f184eed3feb71f02b84caba933929647e0176cba0cfac89811e2624dccd1a84452e63ab0f5a83a06dc7e8acd71c6ec9b043265825c056125842c041be782730c52610e0bb78c6fceb96a00f097886f5d0fcb290e936b4bc0f07b98471f10c965729ddf409ee42eded1a7b4ceff77acf2553a3dab3d7d06ded949854bcdfd19d435f534fc264ff59ba7a00c9523f513ef9717fa04d4bb10e3b12e51868eb7c2fd0eff959ae81062a9bdfb8eff9f8132c927ed1497d3b5f8842a8293a3dbc17334802577b94ee5e46d8712926aecbc98039a11e3d0c4fe3c1477fea2103fba990f1bff61b3d530f97b957ddd7375f7a223602f0e3c22e44a395beb335824f3b30144f5da37256220385ba5c685d5e2ef9d1cacea566818a15738e09de8261d4faf8d91479f9a29e7486c12c43e86dedef5221 +MD = f7034510a4dc5cc5fc5be53538134cdf6e4e17705ae09994b2a435d4 + +Len = 8152 +Msg = 04b31ee6288249e3f319d48a65ced46b5e4e53395781a3cd50b4f16d09f61d4f75c2ca596cdfb12ba0853a5fd2c14d0f461a65987475e79e0036b351eca8f8ee0d9f4c88bb5cfc08cdb0a073c565f36b47d9e2f9d0ece389a41c883608ef5448b292cdfb7ebfd28362e32f4ca4816f864ad1f2e1d3ae3f9524af9aa6c593da664de2753b1bd1dda247660f74d8de6869384cbbdae582a2cb683411288b5b314fc7d86bcffc5ac26f65816773ca44871af790686b6e31b43159f61545c210010b06bcd83f87222cf2a27c5fcfe17a74a371e51f1dd6841ed2dd3ccc83d27af4a3f4d6e31426f0c132e79e2112844ad60b8c950876854088b3dd4d616d2461b01e786db5d5408d29371d31d2c31d7a565b32e74d00e33099de4272fa881e8ddd8479ca750a3cc20d092a7b9d6b13d39b9a4a221343591bfa5af2f3c05e29c624dee1364c3c845515b1f8c5a891ce1d4ed0bc8f85c64dc8532fd718da76aed32d3397f762f27f0ee8366d561bbdb62016067076c81128004b66d8297058137d9f8b8355deb495b72fa073781f7833a39c434d1f07ac538b8a05dc6dac8dc28c22ee8d9ae80a2e1691f7f171dc48ad70878f3dd168203431b917cd2db49c21c860659d0caa7db2f5b744ce8a79b88c4d80f228d513f335ba80a192b1b00d9af8fef79bf54994891a488ff40b1e4d38032f75f47431b0bded86ad1341c96993e6a7ad6f9bf0d81c4dedde4a3cf591195a3b1f8af3eadc33937442382526367658018d0147c5cfd1584e3bb864230b97194df9d29d65010174f169e9a4f1ffaa17b4a23940f003110212ad26cdd3431b0a0c09b4b9cba68e58a6290e074f4997eb69f100d09afc4512e23d7cbd2bc20bf32159198e435442073a8a8f976a9ea59bc8843c3deb40d35165f1a27d530fd19d33f1e765f6928548569454996a853cf17862d7d00a59258744d3815574b2d3d0ebd708860ce8bfe5a25045587787c4b32293b7d120cfa17b26ebff8cb6347b53f1156239acde58a4c5c54b1bb72ba5aa6d20c6885428b1f7b43f056c401c30f0ecb3dfc6fefdb84e68fb4c2955f9479e0210ea3ccfeebcc196da7c3b3bf2596d84b766742bcc48ab32fb31cb77791357886b0d37b8a82aa273c14a42ce3f6093622bde8d5bd46e82cccce34946346f9ca83916bf38df6262f3fe59c92289ac2a2e163157b59b939cdd7649ebe9b1c4360a83ed1d771acec9bf978f185e5ba5fa8f81461b62ab20c20e024af988787bee55517a999ce1d59f7f97d676ab3ab3ca2e7305208a8c7bba0777d0ba4d12fa8a31a9a57ad0bcdfabda03152d31b03e64b3f456b053c40e4c6fddc2775e06abd24895560a3a3454b679e534831744ae8ec50c2111e8dd4042ef3d0778e3dcf5903f1c758f03d09d8804441ac1867f6b110cc44e8c6f5f78632e9e890505 +MD = cfd930d824bcba3b35aea4d0f1847c89308763580cfb2e26e8843b0d + +Len = 8944 +Msg = fc220ea57c0f3c7633aa7010078fe09e03ea1c424f989e5c6089a20a6c6938eb217f972996d5b4b6829913d5acc3dddda2f83439aeaec3b4069299f44326374314afe796344e50c7996d4826ef5ce930443ce79e051d20a22963756dac6ed9f43f7aa7f43ec33933e2edb60ab8a42b205180de783b2bdfae31c5df7d8f87458509a77f4b9b7c9682c3e30689efe1cc34318ac0cf3a21256086807f2dd4baa47ed90016a435c1903aa615dfab7c5cf3f54d2236ace9471d41905cfc84634f1e68194b1506f3da4fe5f24dea79475dc9e90b12e81630e4ecd8b821ff8a248edaca3051237abd0efa0a0f51cffa382c769ad4217d15f741bdad64962f4800bf012c86dae9077ba7ba3265e935363810219011169eb126a7b649fd8435c5dd29ba1683ae0fb515ebb6e45cdfc4362d53f35128baf2f3a65cff33ecb3b80aa5152e118f943c8c742317a85cfa2501013b136783d522e25da8c1f398eb611d3ecb85a4125518957e960406cd01009f9a11a95a882fd58634d5241268f4d8089293e65874b94cd71c8ea68717bdfc19e21cdfb0a18fb4e8132a4f17c695c4d387b579b41d88805a375124b2a2f6c276bfa6dbf335be660fe3ee6b8a1998cd8407786840758a5b27b528a710d673fabe1bf5c5aaab8594038a6a9ff4c8c39c25f926d884e5878645805b57271cfe4bfadd52c65e6daae6cdf2e614dc3ddfd9bd4405f309d346a9bc7e325b82da5d5d31ed050696e2f5037401a9f1cadfb32c55d25ee156a8906b9599f5dca67959d96b3356acda72309400a1fd5f4616093bf48a78caf3cd2d74d7b7eb011d62ba67b0968de0b28521407ab92886d94aa7b1a2549dd569a8e56d8ac25df36efc48ae0901f1cca78392b0e931738d0ae356346718132a3fa380feb7a193d921aecb577d59cb9540d5498c55f1269d6249de6c4cbe23f2fd25c5ce653cd5dcbee20a091587636606e10e7bc7e089dd68e50703582f15552c957d869c7b6b24ceffce6dd87301658010ab2545e8e476a41d999e9451317a535d70cd64469cd8d96ddf2bce05edba36cae633daf07e8f9e5a5be8060dbf8afae4664cc685b221659305eaff266e8eb078894d8be1a051df051686b84c06aca99227abc920f326fcdb085274bcce0977805a1a62a192e4ee849223b2f44f09e9cf7a9176ffa81025acaf0c34b05352124c224366199c6f53419765faeee2c8410329a6d30b1806696ec3c047eb46920942a86f9f31061a97a2edf49a2307133a96fa93eb2a8d314e8a0d15b654eff0e5ccb64716d2170f41115b799a7a060f5af1b600c3454db85e6652b488d295952c511273d2e21873d9f5ab9c00da26e62c7a25946545a1c4216b5d45c54f81a86939859adb4a5171e7b6a304d62db0c0359a0ef8d810d17d1e01f56f75b2fc5221ebd7643af30a2ef4bc0c5a245aecc4ffb93ad42490250add91e1daa1e34cbbded1d07bf6c48bd5876ead45f049221b114072cf52abe594e681ea2f51c9b90a2752388417a41b8c2936506e44e29aecf3957c91684b5842c23bd8168b4e8d6885d6d62aa67d047b617bbb7c270d9b +MD = 85fc69646c885c9622ea2bf6ba2ae0a317c7c91dd950348faabc84c8 + +Len = 9736 +Msg = 136b1b10987e40ca2cb6f6d0e6649c10ca08fd3e8f0d2f24a6b4bc39774f0074eeafd26236df6777c41372a298db9023bf9ce4a11d41fe77692e0250797506f3c04dbb6015c0501bb5a393c88ccb5af8b07e21432f28f4970a4f90cf81c9c587912d1e2fbc87c45f0850a06a4a9dc036a496fc4b4d2ad9299001addf18b204d96a3743fab39e8bebc400e0b25bb78b86a4ccbce1ffaf74d8042ba2a8c4988d91525371e7836b6d66f19d9cc64683838fb708ab2fce1f8e496db5b85110e326565269f21eb3583278980e1dce93676ffae5320f5a41e2ef27d386340281fc98d071610cc8cbcba1cac03ba8f3cbcd186e3632318de1605f183f8861e5a149aaa8b723080d532e8304710c885c751c4794b3f059ee3402a6c4b7a2861ff73326862c972e14d4e8a0ceb369033319bcc2146355cfa5c42e8bd546bceadb0b23d211d9a6c506d661c0ce8f3a639d3f1551954f47dadb194dd8f0f1bfd63f667f78f2c536170adf01abaf0c67eec4708fbebf7dafc3b8b9c853bfc29192738fb0ded1f8306a497930281733d8edd03392d03bf776d3632e05c5eac01b66a00e1fcd547b7d07eb2b5601af0b76a7e911864eb1c5824f05006ef519f3459aee6c330c26550336177ddbfc1e9c27663591d301c8edbd82c5b56aadf364f87584305365ed8eac3ef5f827e20ceed470df3be1b129790eb3ccd760b3201a1a408be2e99e522f5f69ae23a27a230a660f0d9718257c705c2941eebad0491d94442a0b5c80fc3f04fd6a87b58e08f7c388e82ee12768db912d4d80dfcc16764fc68a3214d394c6824350aac6e466bdd5269787a27d95c194071817376f2e2c3211d2df795fc1cdc38389163f46e3658230422ac4f0ac2a4dffc93a2a813a47246c2b9af3eb2c5aae053c53867a27f5b4ed13a0b048551fa45d897220c9e1d00f1ebdecea417c782b1092e70548db7852a63070cd4d37a681687f458110ccceda70af5cc6275a2c22edb35c227aa7f344a4c12282c7fbcacc69d43db51ea2496daa2a73ef666e807be5c63a47d63270722cef3f397d48906da8afe224bb0c4ab01455b7cdc65f7b1e3ef407db2625f6c489e14e5938c7024c6d39bb37afb2d78bf559b2c80ed625f440644d4630278e2201c1d74ac020275200995054c13bfbe6975dec49087a87e3353f93efbde13f74deb46273ddfa0765a8f829e5bb50bba9408aecb67af4a8d463ac624094fb11a266e4783e57fdab6eaf7ecf50639821bc39083a792deb91b013d441a07f1c0c94e279a012f5d21a565b52c9ff82bc3407cafe5ef8e908485d8edeb87744ec3932999b635780215c03f59d9f58df63fc723a94e09d75f3d7c519f34f2eac159f65d5704876c1917a5fc486dac5443682e6d3f449cf9b5345ceff3b8f2b7f3c4613dc23d7d57dcb7b51123601ac77dccd49db4321f521d09b6286ddffd7850c3725f8da98dd7f7767c025d59c7741fee5859bacee79d013e068f802289a852a79846ebd14f68e3c4796478a338d6a44d3805b553ac270c41cc89bd190dd4941141689f6d28971c222babd7d4f56ba559e2463668c38c98b586ab873c10697f711c590aa5afcf1b20014d2d7773af9da4e57fa086d43a20e9b36960f437f38f47778ca0435b9d6b4e98ccdc034a1ee7aec036962644bc5f8ed147fce9caef4e14e178029ea26e86fe60af55f0df362de7f0ff99ef9b8f8ef56 +MD = 4f11cbd7221c4a3449cb3acd65c3c5411cac7f5972f0a195c5b59a9c + +Len = 10528 +Msg = cd4c8dbfb9cb8b99f4fe7c65f027ed8f3f1da8c79a41d89c27b46f4cfcc7c5dadfb381624f8bbdaac96e65f94401e02cfe1cf3067ac4e2c8c95ad8010a1188a82da61568fc4b2f3b5be4803ace7546b43ddb417df4bbcf88eeb956b853eae2f43f8b0f7ac5f32a7534c693d1986c654e84c159d30f0ee8061d39b019e03819e69ecb383fb46bf47fdb7d6765aacc87235c3605b1d4a67567de42b0cbb8e576a8d1cf5860d09bd582d872c49f0a7ff25a4ca20bbf4969bed6b93c1c77e3d7415f60fe3784216b17a6b40c7127c26bee1cdd6e34a478400a79378fbdc46af8c236d4bf9c54b0c40112f6b238a4da7ac591950048096913a378dfa35b5b542e4153b37c5177848cdaef26cedfbf5893bde0ffc10f9523cbcffc3ae0bee3a96305de889c1c96a5adeb64ccc72f1f469d2032a01951f1ae4ed72dceafad05717e5700d887c6591c0d7c9a7105f06cab8234ae0271d5c4128603322676f169b5677fe02da41767f096d4b99cf0ea509029427dac2f64b7575a9a34c79e52b67d06c5a80e5dd669292e3de8d6f0e471fc7a91c626bdc67286b1e65a3b909895cf43707d0419cd06d0bffd4fa66da877f75d6bb2f981c39ca7752dcd09b38badb506ca899641c2e7ec305d1794cffc0b8aba1669ace522ddc08db8b4b96ef3a7363719f44c3b7eb48569a568287ea9d5bb79db12c74faddfdbe1cf38d32b972a5abea6e6ae70c914a4521d69ebe2777c948202d5d2292a47ff59b981e05140df2a83b98645486aaf4fd30d4364632da91dbdd3db56da62c035ddc0b66848b66dad6e9afc982c2b2e91d4bc1d1c6a95035d13964cdbca1df084552afff177c17eec6890712f82d2396f3d7320995d75335c6a9250e761237ff4a94085054829b7ed57e40d93b32877f3f67a7465a696e022ac100d04073b168dc14a702b22b5c2ba25dff74b28f59124e7194008abc0b3b8bf58aeb9242f5d588590e8ec6d2f475bb8c658df48012e0af998ac08d6ba53258db2598e20c5fb5cde5914ce925dedd6fae457d87a13f7ae123ee2ef8e4e6a71fc66370c63c699a1b2ef1c5bf7075d35d1801dbd28f594171b5407443a429da5f6bb6fba55f9de30eb98291b05f73f8027e1d116b96dac4dfd224690445f96c762fa29215f2873106f9d639524f43abde3509c6c9544e7599ef0c55a136dfde2276c8fc7e719ff492846f151bdc5f6f6ed15a6452442ef42e806ac2a0f3479fb2f56c63657952be4fcdafbd736331c322d78162ccd2e6910c2ab2488a07bb31c6103f9f615649fe8d5a3abb0f906547a8bc114a6fbd100cc132955fd2e0c534ca5ba4e8d8b4e025d9ae727636c0645d5ef37ca3d13f45a7dc5c6661021ad0094e3c2ed851f1bfc4c33ef9778f9fa984b41235e787e5d1f2bbfcb7f4ae12762fa0364ff663b9237bc8703247707acf4e469cdf8dfa4d5f8dee980ca32d6422289eee8acb6467d58b5806af6e9fde202a94f7dc1fbed238d9f2b2c6c5069c5e8468a961bffa8a20a3f056e345645656aa1db7be053c21185756d18902c007a5b3bc0b575c8c8c9f363ff55064446fdd3d4f60e7e7089658869978d5c4f0527246f798fe19a10bcbb285468953d6871e54b8680c3d8ace8408291d1f840de95ebea9b6a88fce7420b97edef09c8138b490d7417d615916252c8432c8d87f58c57b50f8f9276b5228bb6b2328a6eaf11a722a91ce0afa29b694396e843adb0d410d7be462690e325e28f8b783eb5a4cca6930cd6082c455a2bfc704c41397934bf588fd76cd3d713b82a610b50285b84ef67848f7716e46940fabb9fb0b3b7750c4169898dc6fab4b78d1a31e64c3a012aa6fb8d54f4e68e51 +MD = 8f7b464921f5344b3ea2f07ea95028bf0ef23573d1025160caa5b000 + +Len = 11320 +Msg = db6b05c68a13255b2863fdc461a4bd3c0e953620ae11f0af14ed760e5d20f58e25260532fba6c76c11523028380ea40b0c55c7fd6cd990e52e6a9fb31019d0a4f19d10c141f66faab65077914029bc8940b6b501f583ca8b365baee36767ef2ca699cc7c454c469b7d247a08603c2d3d1080a9342f57c82a96864ea34a517baeabe2e16aefef74c9cf98e094808e1fb0e57a4a9f039daf49b5b325fda11e9cb36a40f894282920bc1572513e8868b968286e4149599caa71fbacdbf8541779c24a7bb900d64072fab57b770d611223ef3f22353b1a9dde29d038199c4b843b63b35acbb8e27d930d197bf709f1d486cd945ecf7b2ce876f99c1e87f26fad091e0da7d7c43528ab7da73a7c3a21f60a888decb71379c59869c727cc01a6d90c7cc128842ab689e1d0c97faca9dabfd6aa9493940ae87c6d02b91b90d2d9516c0435a67bf44ce75e90e6132f5d027913bb101a0e6960541c4bdbc27d6bf15e503fd2e8632ae18c4a4465bfae5e826ae841694ace37cb96cdcd93e339d6d446e0b300b8e5d25cbecc75b049d1b543da7ec606eb7c7c108baa0e4a486c1b6c5146ea28dca9f6a4c60caa2e793f692c13fcd151c5c0411778d89869b7bf409fc9a76cb01d569da3ec336b4719a182245c8bebb19f408dc8a882f356f9d94f57f42ebf024394d04077694163ef9e0915fc539a8e42a7680b62cea57bd6644f7b1c006d84160d9663b1d5b2eac5df05e63c7b6951779bdac8ede4383f150549f38748fea05e66f7f4e0a04844610b7e7f642cdd6004c4ece792ed3409806644a77d2cf8bde24afbdc4df18bda8bcb7cc8bc8d8024b1cca55099111f43dd2f487f48d4e5426b5fab0140f102120dc708a98bc7d90548580eeb4a778354f5085e632f694c99c14d0e4c00c83555aea6290a1b01706c8f132da1ec48e7a490978c3b7913b629acbd2ca5d79dac0c3511e8d3b264cebf50a20c58c9abd49b7687dcef6ff9aa5af4570ef50b98f09d6baf4bec99187a6751b0b3f927c9d1a16e7e56675944b09460c2bb22e5e3887218295d3d1844fccd5be3286d4fca661e4124018b7f1b503fb9a73b16ada3fcf1042623ae7610dd5835e3759a89d51b7ab723e54428a713c3c7ad97b7ab03d584f64fa728fda5a46fa959a26a1d12791d98200a789d108089527dd6ef27299a92b74cf091f32bd97c7dedb5c452aa076facc67910277d20f722be00a5683dd38310c406d3a1c905e67a46b88f71c54dd9bbba39f50c167976fe191ec1b76808bec65ff2d44fa8af15680db2b5c28ad4c18ca7520d9405156fb036372a5cd1c2ada4c6bb7e45f05f710fe9ac1d8d222390e833cd42096f7c48febc53ca9fa288b771a169b7cac89d623683adaf1ab5c3af9706b17bb17f346bb1547a88c700e344f49705692758f250a782bd53b06a3a8461c906a0d65ac73e91a5b54c1e155abcf651957ba5c9e5a3288fe4f1996912790e24d498be2bbd2b65580bfeea0975883f7724d58a43ffc382522b711bdbd2f565be244db1189c98f71485877404bc0e97b0b75f1eedc6187d7299bb7fe803602f40fda6f949eeef0d822acd042db8b7c6a45801abf0c40be09837b80db72c213451688bdde73a97704902b9e2acf0eb93fc0ea377748102756b0c4e0c71d5a23c9a6ce4a41a09f8e812153355aaec13c860e22dcba0846602942066c63d874a0fc311999709e27a3c856c24a64f35952b77da87ef9c55a050ba7be98144c88174735f93fedd4d8536490e721ec252db85ea01992b917c16278626bd86ad23af35525fb821bdd2819c070307032ccb4b9d605c4cc7a781324ea028cc1da11d3c180918f147d2fad6376654c99db4294f3d82f5860a05ed5b8faf89fc8d484091e6409227b9444ceccf0f08a23683f34e2bf8d3303ed448f8b05b513720c91314669ed640c03a512c2ca9277914c0b1b03069fe33a93b18737a4e89641c4d1e2e62cceb26a2dc8ffc15ddba358094 +MD = e4c8001c625744b14c3b12907f17481ee35b15bec0b505182561465a + +Len = 12112 +Msg = 0dca52b026c2e5cb9f3efb28e8802132935f219b5b3c26f166382273c7a46d2247baaf1b658aff239b364c84e362fc187ae7d4a3e4c718653066f3f07df71838bd34aae9b9525afd5634cf8d16df4ae7e12e8ae206c6ed6e7d4dd96f6fd75accf7a10cc22b023c7f569e4aec88dd51ca519c0a00c922ee33d3559b98a32d79067e6a9d50c182eed125de864841455be751991ea635c163ddbde6031223e2be0fd9f5253885bab81c4b5a4b4a4a00ae66698d8c7c538c9493c068d786f7dc710f90ac6c257f93e1884e7c609aaaf5927021e01d292a6bc87e6643e09b2505da2d2cf639bdb6f3b33cb8ab8fdf690b512d02fa9956c24749c636dfe6fab7444192343a56a832c47461104e9ec1902c32c49343c8aa24065d92b8a5b14ab480ed6630e2898ffbec6d1edfcf56ea263f7c5d5c2472ce57924d0a75fb083425a327d0a9559b1a1a55e69cac957fff332b7822e6035e6963d16158f44ab460119437f826fb54f096e52602ff08e1abc0da6e39b849552451ade0a1bdfb7e75803b65072f3c7bba7786777960904394d333a5ca5b5f1fa7280d141059742b1c7b80f9254c80da1fc51f1f2958956f62771e67fe55ab8499f0d843ca4f1f86fc084b3a79062f37c8899767396e7f2bbeb183fafc30974ca2b2f8b6fa276356be3284712ce4b15b5ccbd897d22bb640508b4aa7ed738a3e6b7554b5c66aa76209fe13e6656f6e0e8491c9f71b16a276bf0c5cb6f9a7ec239c41d487569f55738676e0e14d2dcf17e8e552cf3db7ac94b33c9f6f475324c3dd1e6076d34ed451dca1d4aa0ca83a402fce5b665f963a64d624fc1a00ff9ce6d415e0c865008cc4b487d588c968184f0255cc05aa3cb6accdcb5bfe4b34bb542c2d3cc6333be594b631ccc5adf3d20d08808df446308635433aa5645178e9d48b6f5cb8668a478889a6a2a7dfd3ce42ea59877b5afa14c7de77c0943a568e309ae129e625721a6ad6ee3d77879076b64fe8a0e20e23c62a468c96d62d53122e008d8997997dc6004412877ccfb03130e034c1708b32062524800e7252f9de97657b6515ea32b3137c196700ddbd667a4545d36ef9af3b81205c0fafd2cf583273b2a6a63f19496a250bc449d93f7f5a2523bc248022cc06e12783d7d55de9c9d03a3293c0bbf1cfe8f188a0ecbce39928d766da4614237c10e95130822cf922241bf324979f11086dd29a4d3ebefafff768b7d8760da7ab54ab610302c3f107185dd0a0e94e13de5bb6e298f6cc2c533ade99653693c05b56749b977daa373e5309b051e14e5d195ba548c93c6fe15f9841f3cbae30d653be4ce7361a6a358f7e277d7da429598114a8b4273a2d81e9ba9aac50086b515c333b2d26018a52c441bd1e6d5d666ddd2fc60efb159174ba48f0ae3d69cc9a3e5d4a55b05b92f5a343d57b69328e03f753083e8df820229ae94ce0dafbdc17c1e580471c500b88f62d767cb84b28829529742c250964f45045b52a6ee62231ac73e6ebb2077c7283a6a909a4d1bc52805815c10b70e450a605337443522750c9ae8229baa96d1b1357750a73ecd3db8089f0e38656289f62d1cea69f6671ddde3f5eea7b5d66eb6de8e2676ec3f4845d640f7be0e3b94a4d508fa9cb4a8a3eb4cd82143e4cf04a5b00f808dd7fa7b7de9079725f3e1eb72f2b7d630f27fadd1301f4914b9d92a0a347c0d5084774dcccb636ae4c90df50d00aa1bdb2254721c383be47ea79d5550e6741b73644e459ef7d4f19ef00857cf793019ffe6bfb718bfae820630840d164058394b19e7e970f8ecb9a8fb797a26e71a7f239229d37340f7803fd715b7c6dcc8f56bf7ccafef490b21875dc9d2cfb4a9b9cac71b6da876978d701ddaebff0616ce3a90651f7652c0c7dea981f8167c7e3879f81cdc249b1ef86b773c200b76f2225b7669ae82c0ae2b03413a609798f899959796a57458ee6f7675c1ea8889cba0230c12e3a0fd13b999b74b92cfb4b95bc2482160042a9641259bf4a202c903b645e429356d72a202069e4e152b3a20dd746c4572807a971bfd5c5cfcf6bf4ad32870e53a24cbc982de48aa5e36b3dfbd20866b8345d3715e62296341c0c701954f450f6883530aba8568f8d47e9c36695b291be8d +MD = ec6211b2639e12fcb06475a9352baaddba60c54ea471baf9a5299cc6 + +Len = 12904 +Msg = d22b216e6981100b93434d0ea501799df93e558aee6be3e03117c8bb3b60f55d1bad867f769feae5cc444535fc8e12090b040d4321b850a1d479bc91a9499a46d812820b50947cd7fba26622438e96f8d5e2c04ca550198e32ecbc800b994d4592c1ddba004a0e0aa9c5787d82e84b91e03e354c821d86d0d2d9923068375682d0245f368da7e8a65d1543edbf847afdb38135ecc106de8f3ca6044ac80bfd261aa2d024ff9552d2a0fa8e1b044a6a63d61488d469f26bf2f9bddb7634fd8a59f8a3f72f5ffb93b6f9dc23af582265ecd25df6ab82cb73229084de5bb2f54442f38f9dfdb4c0f47bf023c850c4f4b1c02ec6471915783f478965d7a24ddb750a92cf8a3606cebd490d3746a64ea8970672b642c828e117886dc68cf20a9763d85ec986835d0c3647d980645a01265fe72795b05dc6ee420dc311c7f4f31156d5dee6598cc262a69edb67ec14e256518ad4ca5983f4870aff13ad4e500f3298299a8ecaf83cb857759b52a47bfb20b51801bf05e0bc94b586e602e9ad66e070fb1a2aa36fd4f68ff5a2aa5638536dd2b836db7c1c25fd8cc9c27862b301042573e720aa9b9105974677d8c8f3f223f193fc8685e037aad7f13277800be78700bb88daa8217bcbb78fa342c353e12c5ad0da28ead4fb83de25bb670a5d204f49f885be64ac9a3136f9ac520e00276e55985929719f7871e88ee7b0c950b54648556736a8e2f71f5eab1c6f73a3ccd32a13fff2e3e9b75a3f533dba858dad5344f8b4a93a6b997e75cd7a00b8e4d942206857e9075cbe28299e45ee05bc105d8709f77fe3f08834c4894f6fa66a55a280c0e677a79e97c1ef9488b21384e74e57b1b51f6b19cd2b9305222305de48dd9242360489574a0fd95f8d6f758d390dfd1778f39a8d6f492a697b849de7bada9e17cef97630ddf82e27dc8ef4800e82c165c76238f57678d0dee2fa352eb481ec6636bc36d05a663813fe7558056e95eac02bd40cf8eb9fce8ce0ed975a3dbac458f7b791e1c8403d4c7a8e69c3622ec2522bb1df3fd5a66c9afcc589145e6d6d1598514f08306e86fad840ef63f1358f434f6279713c74f230bfead4041e8230c4a1f137ef99d75b43a1f2b18c24929abb1f4da23728f3a878b0c540d185e1558d9a01133e0b6503525c0e78e7022d2be124db2239a20ad69757bc94249b7324990ce8a99d8fffc84d91fb0c1c93ee89dde574c01eb1a1c3b83c389aa4691ee4107f0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79db2528e9f8c4a98ae8bbb1ef83d0fabc687a33b0f0fd9ae260d7cd4a635bdd84b79ca5d1268c5a5fb86563ca27486ae29324b3af77daacb2dc9fc66ecca184270aedd1ea009097cdf9fc8d7890ae51e4680eb6631e975fe17c378d69f0f935eb3ce1563c6e17895e1349da02a84ad64b51ffe5d5ce7bdaf6aa69c943b5aa1856b540d9cf596b57996e11ef6f5563229eb5bee80c6dcf4679cdfb220505fe57f2ddd205aca7d22a06721f77c781435c65fc146610e4dbcaf24cb642b6c73b17471d5e7fda42952a2e883a18121330ad298dc907ea1ce78fea9162ce5ee3aa83dbdbaef26110fc7e9816297a59f3733d70d2a574a1fc3bbde903c771054093c0398088044afb4e4fcc86b546a4095433c53270553d6b1f7b750aacd1b4c83ef9e675b55d9cead5c4533ea624f93d1ab7ad15f151c753daf1180edb967362f2546b21fda65fc4d706b4a8c4bb62770ff3b2e3f111469bb54859771a6948f6f9f951eb27879b739d3c772ad6b4e69f790c5b05383dc22bf8a8c0ae32f23d6d9911203dfda759de6f8f252ea6b68d9da12d30e18e7c43ebeb38d619ebd859ad1bc45e7e45afa1ed9427451bfa6a6059cf7cbae0bb76d2c3d52122210cc3a49fc7399515c8467988562b5f599b7866bb4b21806a86d4769b008a2d2e5f5d272be4994c6c4e15eb97fbc4fc505187a8ac5c450be8b83e385bb29c7da9aa4be93abc0b0cea9fc4fe02cc19a368e33f2c124b10e1c0195b1eeb347f9cf8b638f2b295b85cf782fabab11153dc091b4afcd761a98c5c71d43333ce5a12854bca4b7db8c8c4fbc05f288d12992f9bbf4d20e1e339942288507c1bc75565b730a9fb816d62cc5e219c4f7c1614258698f39e1a1ce77f7c2678038c699a1ff52f7e0aa8fbaefd896d59386767eb45326ee1806853dcd7d112f4cf6cfa4ec7a90ef181d8acd5dee26c3de9374b47170709c2ceb5cf3f2389156be8a5c39ce63a96a967 +MD = 5316b168e039ee27318deaca4457e6632d0bb7ff410343fe2020fae8 + +Len = 13696 +Msg = 5a4e993809faaee961f1085fb709b5bdb21aba42a205077213f5a970a3e542af1063b6c9959328af77762503db6c1ec2daf81c26d7c4afcb10e52710745f07c0b5ecb7f29df9792da5f29ed0c4bffab1858f95055cd4a3803a8eb7bd5fcd33df70710379c9358bab14ecdd8e1a0a30d2da658ea6d83dccd8b87abf3e0b36ad54697b0226c04e4471ebec49058753a86d02046dd2f408111db331a95c22a25d67c9911cc32b4c8ec6537a4afcb1a44aca24f49b51583c59955239dbdf491a2b60b83cb916b13850f4741f483d4004fe3169bb81ebabe18e8abe1cbf8f2aa4ff865d0341e9fb1972417562ab8edd7cace9f9e38668960097421e62bb336d4bc122e16e1c02b0f7dbf67fccdcb830123c3bfbf4118fc09f5c069b913995ba14597c6b05b22979da755ab9e44183e0d0966f97748c29d2c9c51d5d33a07bb709afdc24516c28fecb27b74c3243b696bea2cdf7ed5efe7383bad18bcf58ae0f31ac8a34d9b0c6e6d1d9535f3e4a1bf9e3499c40e6efd64cd723684eeec9f6689436cdc225e7cadaf573781b91bf78b24771269de8a77904cce82bcd175b1a6b3b36eff6be7afd813ede6ca8b2089668f203b1347aeeaf446af16231d276e4bf2d9536f92bcf2784b400772d298f3dc4ede8862d242c3fb4ba2655a1a7821a0c7239ebf3f450108a5fc2e3d27fbb346d3f06edb16ec9f2fbc3704b461fe785fc130c550ba2647f3c480cf6c13bf3450cf0472de8e12d90c28eb58e47c10ded3517f5be6abc723d4276c7fa1fe5a13649099290f904c0e1b021df64cd165c1a5f86db6c38cae41343f1d93517052cd0cb90ce5c0c5febac6e86d41600a53dd32369a8a89c5521c6e7c22cf0ce24fcdb3b90e5da4b7b14bba3c57eeb07f616e129c743babee49121d7f0a7726fc9791f400ebe52dcdfa5d4f8e4c32d0b91500d18a894eac7ff9cebbb833105207d0b648314410ce71304c015ed8d2233ff541d98148380df2eaaeb3a84b4ef09c71a71aca9564f95a09b47a1e7c314a8c789d95314f8c32dfa23eafdfa1779542f0e0f62d6e5650d0dd03045db4d499171560beeafdbfcdaea6fb0aced42eb263d4f064da2d69478e20d45a8d0130a1785257914ee14740d87f605ee651c8daa7a451e16151125fea8b94c73cefc9e628c5dec6bd78b70ef5721b16b6b8fa6056d581e65377f60c6e63b0e4ddef24f990e652c9b75293ba8e4567bcc068380629ff1d0e111068cf924fd53df06dd63e591a7014dcdd41c5fb6fe2db93fde61e79676fa33aa8ff2beeb66e2d050a3236d9f8a3329e9755a3d53828dd91d8992bcdc5165030a03db3ec1de85c9c42dd75abf7689d6d0f53e69454864d5a86c5b0af9e8d9f83a488da131cd02726963c7d37ad3cdfd8a3a100b14ba7954e86f03f973a51eba4148510ec09b2272472d3a01560ac545202e184d463f96ffe67bd4b0d4effbf227e96eadf8b1ad7266747a0bdd813a5799b89d55653e817ea9761458a32d3948f5152ea760756b19cf1ecd1a97a1f3dafdbfe94bf9210378394a0c1869c9a063b2b3d7248050241089157c560bd2ba77542d4258884fe4969fdd0419ad2af8ec66abb24be1ab9ffe9c3fcee6c17d55d6a7e9f1a49c30ec7fe2194482f7b8098a19e507450aeca58c11860df341088d9efddb3d56bc2ce3db0ae4137cd0db9be6d4481e3a837dfe62efd17fa414dd2a775feb709671ab90542028bb2fbefb75a79ebe3e51d5c472273e076e22c162f40bd401d18e4115bc902acc82c24b806076802fb0b2872bc98306122094d001b3ff6405a763b7d22f3733b8b15effd224fb8181bd862118ca2050d9de23c9212efe17df3b40584ab1f240d48f2a615989dda99dabf52cf53ea32344eff735292eaef677d54baee60a695b08664ff97e57c5006bc2262f29edb7883b9d379c837bb708b5bcac400c01438b3c7cf44fa7555a8fd34c42b21c9f0286a62e0c8496ddc256823a8c96256028d9581b42ec3e4c455dbe8f703d361c2c256deb9d77ca1c77e6c49513399aedc24b44896157a9042d7212d4d959df2bde6d791c13fc87ff7dc2651668b0d171b6ece80e78185245bbd7b963a48d7f96c067b009959c354f7df24b05b48334b3afc12cf4afb89fd797939984fa627e23791afbf94cdd3cd41e7c60aa1e3b2a7d53d4f9812fbefa8168ae9c7f035f449bb28f43365f4a0556096a8a4ccf5f1a954a2c35ff20b2ca0cd631a99be60c39c512cc6e06f768f69de5c4b335ee776ec43dd1cab4aa1d76418b23a722ccf1c66b42db65b23cc178705b90c2aba40b8dd2d4cc9ee9f38568e52c8c805adc975153e9c4118155dcf49913d89ff719a4df87b6249be5267507c364751b8c3f854446b08d59bd6b41d0deb4a3326174c9ccab8ce1a8f26972bba2d8e560ff +MD = 1bc7a74f8c616a592ca4ec760e0b63024568a2354264a0042b912bab + +Len = 14488 +Msg = ce42ba096910b6242ccabea5160468e1f9d9b3e57edc330969516ec81e9e85ce64fc17536a7262a80804ab0f4628e0d022797d898eafacc6b9cfb0d18f9f83cc835dbefc8cb0ba686ddff5a33a41b7e618f5f56144d275d357a13359c88a0483b2cd79add7b3068de6c36308f938334a62b3e415a72ed659cb31bf06cf484e1e79b40e0e54618e3ef818bfe78bf69d25881d114dbfa916809ee61c80aec0a9c3607a46c60aa399a42d46cfe7f9623d9e139946b0952c7f6f572711706dd95f9bf087e97e026270e60cb55cb14a635ade8a9149e630a0574f7e5e677e127db7cdb044bfdd42845c2e1dce2dec86e33d0c756ce39899ebe7479bf2e651a793f88129178f8cd4f2a3a1e9f70c41b6c92f515d92dc6ed6f77780374b569233026be1e1692332bf958d69f799bf58e1fd76d5c86bfc0ff1aa4f22d9d17fe8bfb4581262a341780c5464aecf1d0fd80f665abf415f0b24f1eeb6540aec29fc5290073f342bb206c2166e97fae9c46a48ee25374dd6d054dfaaf63e51041b76f47ebf8edd6b3e83e9c5f54dff67a6b5957c1d6776381448c2c6550936811efdad66c927e7c9ac988a483ff866fe7c62fdf98c7543ed9fa7a2291cdd41cbfa3986306d33daafc6ecac8794beb8151018894bb8893c5d391a88bd92e1fb4a77d386c5f3da3c845228576a3eca7c162880405beacceaf0aa497a69013eeb665c73b60ba34397b019f393d984423a688d412a116965d40fb9db8315af1b9a8873c01cebc597729be3f669bcad4f7b7307044f557f7d83203079a8a9e5a18e168263c24da0fd56ad78d8e0fb0218c59f5e71b810723c7d8dd5caf30eebf8517a5203b01a7d9eca4e9f42017ecbc6a354592f6c288bc94cbc71776b2a09476b1aab49ed38a4a256e622dcd32d50809afac1e77387124d7717cb2718e687b6626055dd81915d3082ddc74d5ef1d86f34f95e40d6134fef8704ad83032bac6fc0b31766740cf070d79b573eaab0acbaf8b9f8e39cb689d803eddd3233dfc2970c7aba8dce90a48bdc889956c054158b6ea35777cd570a2f733924ddb0eb0f59cf1f07f99807c3a91a0c573ea7c359071f1d42a572de181d60504a2c8338dcdb9009c352da5893f11790579d67e7c058929083159132fcca519a17c6b3ad7045d7a0b9429a6b5d8c5d7a621c09a694a64f65e06e353dfe5dce7f5354483115c02d4cb06fe22868a27434406393ea1b18df02225963e665ff5f67c57d4bae117418756f81b977fe5ae224b919109a9fd7c9d1117d25157bd78dba36eac30bad882283bf21284065dc31b495e6859e660a9538748382b2860edfe06e43b8303124d3de68f7356be651e84b9b74fcdeb8dacca1141283a6cfcbde41352f3305e572b2ee32aaebe0c9e1905094687c41df6ff573bad32ed79e37104553563a711097471ce5e34f8756b3b02d496d0eb122f098162c6d8d2e3b7aff558f61d85ffcbe1ace48496b48d5f0d0497f29b916c8863ef23389a893edbb33d7b2f812b4ef0db46d2485460c8dbf790c014485561a586e6f96cf85effd22333584c2f25932ac9c62413ee8b9c74931de96677a5a608fb0f51fe62e28b3d887d5cd687f360dc45a14671d5a39cbb58327053aa10ae2528cec9477ab285705b7215591c133c77d77ea5ec9a372e12cf44f1764014ee7ca8bbcbe2902d531d04b7fe4e6c139aafe7a4eedebcb4e51d60ebe948ea20fb91e34cd65a53d198962cc59410f862efc70eba7de2bdbb462da58dd445f8d339e770f87519364dba6e3c21635b318fc06fa535cf730da8b5d615a12ee80c9a4dffda55349997d03d17ab31e887a808910c538d701a3d0bd8a929dc65c985e48c3d77d9716629278524f29d9020ec5bf62f9257fc32bc5313196a86254505509942e20bc8094aa24718babaf6a14ef8443bd9fbc0771c2cf9a94034c9f50b5ce9829142b4fd8ceee7656c2088a3707c2fd3930f6931dce7f0db537ee053f867e19f1e34b4bd505bea8d7f44c281d1460d6965f9530d6f229d121cbaf4dc5d1035dad14833c34577c5037cce30d6e1e4617fcb401a64435b52fff47f6418b9d44ad86303de99ccc10b69dcf3501d32e5c0792b8a3bd109f0b6f77342da739f22950a4bee01bb66d63223287aaccf34a8af081f2e13de23814d9b319bb4877d89a902e46d49a2a415bdc1e7bab35787db818f0eb24ed6109b6b4d87e08eceb587fb34d51802e9f50e12b88339e0507cccec80829d5963619da4a11eb7c5a4079c00228664e9fbda3de599838ed044b41b448f1365a00097069e184e97f5c1c4446c5e80da5b42d4138ac7811fefae9e352e0d29a1df3811749c259ff79b828bff744b4ceed369732d96d4d463baf8cba90d8d3db843746156435b9b6d2370bf4bcc6b5328feea27fa7e342600bebdacf57771e83f9930172a081cc95f2a16deb7e9512c0f1a1f72f8c587ce6d5757b298d07d81ae3d15a37e7f0b92441bef8ab23f7f4017c1a3e4a6f122660031618d01cce2c26aab7f86b20c8a9eb2856523c9435837b98201ed9375a6656fc96 +MD = c6ad1a8169c0ebffff5c7603f0be6a39880a66b801f563e52d9046f5 + +Len = 15280 +Msg = bed74153d90579a34bceffad910c54c5434ae37a432cd6193a0b2e7345df13e0eb6268845372a3d1b3b7dc4d0c872396150617a37492b54c345e6d0d745c7b075c61744756841f4b7ac787c249f94e949fda4422e38138cf81fb0fbf9a3513dffa1b8d254a02951986432994b2297dc7c90e9280f7c00aa9072a3b111f308270abdad9a597b5ac41c176e949aee157387ce928441719d1e2b032198c6b1670c258e4834fa5650dcd12a7f06ba4e784ee9eb42ff6ad523683635dd2b7e6ae87deea83b1abdcd960c4601d6582fe04adf118b8ce1f2034e09308f18e1bf9c26ccb47fc8c42a5db4c2f9521711423007a4ad33a2e46d887781a8637743e0a18ca91599a3b9b6631791598fb3cab7ba39200b68576f33d13a521c777adaa837a473906a4e63e88a4907e51f3edce6eb59e1ba8e0cfaeb79f10aeb2f960e7caae8bc93861b7b474fc3973a851ad0664fd45a493926100aef560cc2f04b67b497c3f4cd61ad48491011bfa855ca3d9c54430a25ee453708adb3e8026e1d7f066ae0bc7c8186536467bdf1ed05df8d1f952061df11ece87b31a52d47fd9eace8b0a9644f6a09353fd312ce4719cd37668ef701e3488f9cb917a43cf2232189b1f5a89ca48fd85621decab5650615d4f7be316ab0f69fdc68cc2ba79f83488e18a648b62a67565eb0e74047b56f4bde498f59fcf6a0b01000dbc5edbe729632733f14513f85258763791de5b699c1cbd29efb48f2db42e007a2ed8fcd857d0f684c85fe526da888c020be1ff72a3a2639497fcf540adac4e3de1cfe5b407f8d5e4b380e018561db4d6a9b66e5a4f765d43b620088b3ea272bc9dec9c6182024cbb78500db60d3f771b3405b007e9c1339c13c7d0f6ae38f46129d72bc90d17e372e07973e949145c3a7575ce63b8aa6e09789a566a47985d934f3799d2f35f236fb3a01a9750c7eb9931afcf55065a95f0ab40a1cd4fe735b9d5b4ef667a01931bb9700ba96c7eaca1335bbbc419f930bb7562b9090f50023d84f7346cec26bcdeb98e4d08e26128ba42209b9a3baec7d19ea8a704cff94e8624a870cc8ff524217da5e89afd9ae64d25a676beb1a1e39aeeb972a8d70aa0fc7d6fac6eac97554acb5be549044e6ec0a5965418c6fb0b7e2d3e22db6eac810756f2ef3a8a33d7c36c584bfc3ea8497d8a983d90c1e4c8e522dec087dd06780f79dc411873f230f22845229bf4cdfeea9c533a0ee983a137964253936d420d7cacd3aaf0adfcea41c6ca730d6fe81571a270527a88011edc5112e3e76385c8b6b87f33aa81788c17108e453cf41f177966968ebce485c73d1bf5796b0afa3225658ae32e378e9fdbcc3aa00fce9a8b69ae6ef4bc453825c0bc931b07a9c6d2327a99c3641768aaf7c3758c6e4382f9ab43a08f63f542bfcefb95d4a387143043c157d934692b35d2bde812419dffe9a6edd364973bca1dd0a1a3a927ed0ad5c200692f877402c9d4823b39702238e4c273af7d415ef8c82c7664a47b23d04815007acd438113ed65d9150ae41b5671679fdee14aa7f5474c4281cc87718f11a68930b952d88629ed8b1e8b83cf8019fd370598985ee92296cda129341f6fb9db6333fd9ac18405d461ffc63688df63ec04cfab15cbfce274df6dc4687497c71e552ca10584350a822060c3e68c9bd79dcee121a735540e4d3f8da40cb930c3d628c3ab7a68c0bf6093e8897925dbfd765de60238e61c2e88b6a8d1093761366aa49f25e0b64dacd4814020d998c75ee0788456af247acb8f0c6654453353a74491691621b7065a47b11090ec30898144e96326f438966cc9097134aaf82d9ecbb7c88724b0115022ecffe19c3446ee08762c79ef6a99999e746e791fcd18a367de657fd1ec9616cbfab51ccfeb292e96e887588801abda7617082c8bf93c3f80cde70610b2be35aca3db496f9e57c854061bcaa747f3b8b9b8e554d8c5c0f97e4df724c949b0342baf196e6396fb44ac9a91d734829abacf20adf9ed79cd5aca263de2e4fa959bb2e5169593183b2b056a908717fbc76921170923b25d8ae9ca206047490d95f3a80e7bc5e76f3f04c640c1e338faa34b1565a1db0fb8202ee702095ce1cad7c375f2ef0747e2305759e2ccf27fc656ea14d11c28ecd4b6b18996df289278849380591b629bb836ad251858bdd5a907ce8724221331f775fb19a28bb34561c3ec330ba6decb3a788c92ac0d4a20e9df7dd4265da3c66a8593fdefb405e3cbbd54f5cf3983bfb01f7f086495a34acf0581659f72e093750d019f45032752ff9a552f6f7c5a6062520bef0a95d039a3a162a0570cd2815f35ce666c20207c45817747b1166a94973abaaf64b8d7d7addda6ef16d18276722781b92bb2f847e49a41a65eb0bb4498ff13b03ba3c20a34dfd7b9a369f75bf408a2024b61b79d260e3bb43ef15659aec89e5b560199bc82cf7c65c77d39192e03b9a895d766655105edd9188242b91fbde4167f7862d4ddd61e5d4ab55196683d4f13ceb90d87aea6e07eb50a874e33086c4a7cb0273a8e1c4408f4b846bceae1ebaac1b2b2ea851a9b09de322efe34cebe601653efd6ddc876ce8c2f2072fb1516d735685f781e89a6e459a23eb3683a63be1506c39011023d17dcc1e89fe4015702f1831b18c01a8a75ee01bf541971e2ce4173aa5074f41f4baa17a52deecf3691be +MD = 6421f2c14c611469a3831a579f2e2158e4f69da9d2e79ecbdb064963 + +Len = 16072 +Msg = 08e8cbcd3b4422c97f0f3d49d0e693f20ebd9b73ffd1ed1694dea4946d92062e9e4267f9b4dd4a7af31eca72e20538fb0a8706d4fa85e3fa8efb2878717a737fe1d891b9b226a2db96e2777a9b6e3f1ff5c1639dfe5daea27b80b18d219f667f581013b53e077115efc30e060409f08559d27b7614419537e2d7077b84ea26568b53b4945f68014f862a55c123bf9256bd2216054219dfe14c67f2eba243fd2b020a3bff1e3198b2e47d165002766fb9aa19fcf592cdd5c740983a8584933126469b719d814a7f669025175ea917cdd7a71ff4ec0c45bf1246d2a6f031c00b71de701e17939bfe92128b21911e8bf5d83c9cc792b769e5e9e67dffd5b1b4d33152ef0a14590c5c5ef316fb916bb82fe3f1f83d919b228e75a9010ddb0d55d1912b82fc3ddd86e3f3ba2d6f079888c3204f9b1e8ec05603de16c798ab4c8d4db7f090bd3a26efd979ef3a439babe2f8b8dded32342fee8d4bb63568ec76438ecb298116b23c3187171ba440f4aead17d323574128efd372e40fb44447945fddf65ebccc4d283235f6c5d32ebba8d36898aa3f121508ebfad3abadf664adc8825f18abaab4f1dc2b3e752fd597a23b3330f90e6ea183206f3d128644eac968c530deb5778f9f15b016b320fc31a3cdc0c3992d1d746759174dcaa9f782f026ed8e3942fa853bc70da6080e6d30b37156781002e737bc7e3c285d7cd7d32bea44a3b0bafc3fcbd98b17fb61ee3dda0f3f77e8f794928a7624f95369ab86819c1097cb8645655a33709115814800218fc1e9a873eb2cda2b17e632d63d42fb259a92120c9d9eedbd043bdcd643208fd925f6d9deb5aeb3845f17842d53b0a06b2abb0eb5cc928e5f913edac9a6462dd6b3c5029fbabf1e6943b5d0d5b6777857083a46e999ea44015dc297c03b19026cb27fab20c20822c20ae89f362e408bd17b384211ce4e188bb1ee9a24c84216846c4b5dc89531c777fdd778b882b3e2c2ccdd8b93316510e5d5ea6b5e1668710727529efffae1157164abe3c37c7784104450a8d98bd837f711df92d4ed341cdb2cbbf92dbbc01596878b68bfe23579a529ba2149a34e92aaadf597f0144e1eeac3aff3ba9e77cecfada090147d94ca67c3427f4d43702be4f0530319555d7f1a3356160f6cae48051f12e22a153d7e405c11494c31e6098e24225eb676094755c6d7e992ec0c8c1e2608e76a72d79d173a4e07ae365734918f892e3140fc7f82c25bf4ace83aa10408aa253a5b0b30d3a62242da1a6cb5d379b1fdf17bdb2f897009c0c526e08f9d0d21260399813d5ee8b5803aa5cc933e2cc1525eef515d52180ad44670a55fd37f95722ef5e0cf9f482e4c359f1fd6b9efe2b6e0630413c40285b8958c31188ca42d8f2134d1eb7e0eb52b33cf0f872b093cb0dfa19c58c975a3f51c422dc2b2c612074621fb9be38174a79cfe42ac7ec3f6c8c36fc23548bb8c12425c41662c2b6c62048307e6b6ea9047d9f4605099653986f4961eb02a1a67976ea0140be21b6226c2219cd5df9134935079127864372c73dbde57d455db5c0d0ad84fb9bce01cddeac4636e47be86146a55002ec780f816de0e15a6b24595fb7dca9978a2c1c30ee33403bbd4b9ae518f4fd179aa8ac4f766f0023029a237e92f3f9b517c057f42153925c46fc9d5d328312d62f59bb99fdc4ac479a3386d5f88fefd4b32f57700e89b7190013823209bc1beef90fcff95a6e5038906515de6f0d1666facd9d4d0c4218e27704cbfc252c8292a63f5bd612e8968693c332f05cf7e7ec4d3f9bd3a11952591a64ed241b30d191b57cd1b8cdafd9a202b260c458dceee528d9c5bc737bdddd689858323285a34c952ce429d140b42b6bd741c2d92895e21c30bd6fe9e615fff033bfbf21875223c3d3e5a1c43790834d86386454677753a5e8f5568ae4b5314fbb66135eb278c7c01668a92ce1093a1663d7315125fdca4446e008bd0425f1b5840de7508381a92848efb861f988c054e480a265c0b3b675ff000f16a0d2e1e041f9a39d9707385b0fed5809dd99a6878cd74ff8d41398c955f7d22e6756624e69bbc09c597405d6cfd3f08b09b66d3cc13d8280eca7e19d0019ea5aa42b036e6fe6d6d347428229fd461a7c0a5984d32645f2a466eb319f7208c01203cb35bec8ed4ee8ed0d4dd33cc64e435c0d7df9206308c9cf48091f2026fc1ae2a189be0951a133c73eb960f2b704878b4cb90d44275d67a268c8ba9ef6e6abed686feaa596665a42516531b39ac5aef491d68e060539147ca800e0431b186b706a68d3323e16b2faefd1e3f4041a20346756f9ea8f4446aa90323eb0f619c0183204f613ab2ad45d547fe638657a81c757aaef76280774d8bbed146d0a63504159b4d1de803b34f639dfc6f5414f5a39cd52cd1d51eb257385820fdbda7d82783bf8d5073f906b321a61e4bf2a310fe842ef1164af77ef0777a18f81e8d0dd5973519e024be2ddbd40b6ee0a82a8197f52b06ac0933628011ccc21f3b7f5d7317a5f9b7437ab02d4773f414bed2d1d5b777727d5af9e76fcff5255b5ba64e6accb633bb185418134187b7d07bc2871f91b83d6f85719326779e4992c72a6a227e11d1d6ea75ebf489efbffd29232bdf4c97706cd1c5f10bd16e37adc8323903f55edaef0305b438e85214810e1c457cb0bb125b881a8687a70ef695a4e64276f84457eda92bf8462658bf4672d65e5e85cd2b23f09bdc03bf258e30a36f0de1516b4fba250f41880baac7329f78fded9374c4ae516d7ae5e25c08680ff522adc67cca3dbfda16655ef0342fdc2bab91a259e3e3f5bbe896d85b6b242e9f0a +MD = a95c9083d3e39318b6d97d828a34367231fb06c2350eefd4fffc73ab + +Len = 16864 +Msg = d2fdc48b1452b81292d95db91ef22182c34793129d55d35aee2847766f6590d5e48ebd9bf382be4336431b898ffce687bc43ee1e2b9b35970f3da48ab318feff0e1613d499a1365f5d66f0535058f6e8e1f85936d2d4fde2464e4cfd1b9f2b29791c2dfeabb707ac2ec845e1080e3bed5bf03d243a091383bbe4a7974e04019b4d2875e1d4cd1b73d2f380f960249bdd52b303ae0c425fc298861d20f54f679cb1c25244bae959fb716f0b6400a40002edc7119df085c8e702bd165fb7864476cd732cf00516a98e31c24cea8f9551a255b6d1b88ddc39392310fa1d3db3826fcac26cae5e59f3723d76ad52b6007606b208a9c98c4e9701230731222edd08d0d03878446dbc1ff0bb1394661cec56762b43039694e3cb882a2a2336330dbee1065bb97ad9461650d41f6bec6a61db39e8f146e94ea4bd135f023921f44a8ce995b6971a4affbedaaf2499ad4768ec991299da88629855edea16d9aa189c5a32a5ce7bea6af000d675a986715c0771dcd1c4273b77c87c5df4ee6c9b480b10025d2dcbb4de20c58b4d379a005048534b4cf995cc353a18aaa5135bba2ba096a2e55af13e5197f34260553d21cc33782eacc08c0146f8121d240c0dd06a62d45a66dd5351695e7343d58bd79e78cfc9cd18a174a44f0a53fe9a61e9a4ac5ab371083f5bb4ce7c2ed6d561d03dfb242e6fb925b57bfb76c2952e9b59009a8e1931f2076f3129f90b43886090c7fe3a905eb7d3b74fef4646290941c3aadb08efe04dbdf98e22def1d1150f7f03281ad5e03934e2e7d682c90352db916b18d01ec740e960946032cac9a5f606bb22cbe73e67ce9f0d5630326c32f22a0bf9ec8d2ef4140c0b8cfd7d735f9e8bb59355acc06a2c5487175a69aad10df6522566235c90c565bb4d48f2176c8e78ba24c10ead6ad36b1ec207550556b45d084546ca9b3d85d36b4c1a11fdf34e33927d16f44f8e4d4a9aff40e0c7e96fc7f40092693123dbbee5317bc26d1d672605455c45ecff205bc3750cf136b4c79cdfff54e767694f8eefa373edae1260b7db249bebcde5d70461cd73719cdc434491ea932e853869ab524a0b7a09f9c150dbc4dccd3a67f7af3baf7d463f8c6c28d2685825d3b7b27dd6cf4a51c6fa1358cfca26d37aad0ac31ac1335968eac8ae6a21aab4990fb16d42da395a2d3fdd377de182e5d7e098a8c6ae9c925e1ee13f20be91c31e67eee16012de7e85eda754adaff7eb972827c5071cc0d96b513f44bde7153aabe8f242f62043a3182ffa1929dc8dcd03ac4184a5b4a817d5ab68230a433f0188b944f9cdab70b22c2b5cedb8114c7363956d4c671d5b32e553e646cc7b1601fd046d6cad5c6b940a09583821f63dc6ff0a348616ffe114e3724113ce36a22052eef3055ddb3e2ffaf273632d3267ac1e341c987a0443a3172ffff4d71dec47cea1602ba7cff16d430e37d4a46ed30e0a3bafeb5bd288c9c8b3aa50aed8fb5fba453b4551e18a352f842bf44e5187d5094675e78111b86d4025c98e1c0ed84e5e010dbd24b8136e047dd72bf2848de7647df5f4b46adc77c5aee518e96789fe02fe5dfae8fd93020b20c4e25aaeed2e6309b77bbb84fbcea0768555dd8d1855ee64b364655713d88c96797f4c78ad914d1243e25f091d5c19a431adbf258c3d695a9763626f9ad8cf067e6c9189d7f76cbf2293689e4a087761728859daee9dbd08925fa9ec30ea1b995c0ff18b724a0639dbf49eed8bba04d4ce4e7151455c30972bc00077ddf6ba769ad23323877164a8f66fc89ee75a0626cf67d03599640b2febee30b8aae4f2c7c01c21fb1d54ce33fb6bb05967d1c67efd3c3e2cf39c96f7595201569e9c0cb1575481bb3cdb8b0273501cc512058c05df3383de5aec1818fd523afac2074f5ee6e41c0beceee53ee685d58af0dfa0e2fdb566f5d63cdbba5f57a54b1c0b05f6f533ba913675220fda74a3510947493edf2bb0166f74250308ca08f2b79174a00ca923f821588b9cd9844dc26626d0410efb29eb2e7d3f1e7f112c969882e685b4ae1ee6b67f680e6a1d9d840e627d12118f991c1a3d71314c96d9e0c9c4a1cd74aa7404fcd2018c16a7594009e598da704dc8513b9d0265f8bfd6775141ee9fd505edf9fb3a9d3f638a4a9d609569c0b49f7e319a853ce10af6ed0538df14235e27516dbb9d864fdb2f38441a5c38ed64ec82643ede65ce0aa2e42f86885d839779680a45e502e306fcebdc3f214c89089b9d93308ec653802a849f44230fe40861fa75a0f85a236b5a2a0ed8cceebb28169766767fa799f5f895fd7a9873713a48ce59d4c0d63892b2be82eb4466ab4dc438841a9750c7f173dff02ecfd14fb497ad5cea23bd4a036a70df8373fc82fe0d479623c00806fa0329216aaf71a9feb45f26e90b598047ec06cda540f868c4598e439ae1187e9a103d3835229aa5a109ac60d95ff003e59e48f65b93a1842610d33486e2c8565802e1dc9810956b24fc5cb2c207cbfb65ea00ffac5440ffac9adf10efaa60b7bc42deb5995fab240ff736c3adea328f5037f493a16b1d00de607a80de2328c84f36fc6c43f821f8eb61033ca1f26ce72ceced5840c180b045c86b2c593468b2984702a99bc3420e3ea28bc4a706c32c8473b3f6933cb137683b7cbb6bc5679c20ddba13aba8558f93229604c60e7d86dd330e16a2c5f7bccf2273d619bf6eaf6d61ea537a90a1a26f48eca406f3e31cc194c66073459c6703e319246d08c51209395b1110616f705c7e544b6f9b3d17b7fea27b11a2e6618be8364e6e89b4ee7ccfd5f476050721e12c98a10aefd39e48d96c1081c61ed2ef9792fb242a836b4c8a20a4b362b1dc87b87e50ded7ecdafa8deac6cc978be2b85af4d498d479b003d103cacf62b5c9d48bcffdf33cd2f35882e546fbff77b76d982680d16ddfe6280e470ed3ec5a11520d52525204cb10e721243716e5287c96b8ee +MD = 856aff6cb91416f97fb2b18276a9b08f835df5909780b994c9382303 + +Len = 17656 +Msg = e9e34366a6a074e0547d66b3227f5637d5e9d3d20d6821c9ca8edc552e81ddfa85f56214825768b3cb4b5ca8b959f3e058e357f1b65b83f35ab3f0911214715ff2d25b6f99a0ea1fb600e034cbfe6f2d311e59d15d93560b61b1b6f7b5a5473d3864799e72e1c0cc1c833a7fe2d692c5678124998a7862b8e87276b0a19e293a609103c99583b36305bcb2b08549245102f3ff72c5726ea3f5dd78e35e65ddfe7043401a8bef8b8c7a9390f03dbfec780b5e318497e9447393da03b972642b32736179b7db8c10ee81f01b6690a0b3e389a903f68745aad1c751605a6701dd7e6ed3f7c80dc10a3225bb9c3b0854413984bcbdf11eee69659b2ad8edc5a6b9896b81ff76aaf840ff6bdc5b962d435e23057fa79ce24c49d6164db19b12ba89fc7153dce839987bfe5d3ba0a086d6d24912da08205dc711cd40a3338bd8a5137e8931d448420983d702c1b3809b736452b6b52aa417c88bf12212a8e69ece20b8ba0331bb4db220316254db5ff484dee7f6f8535197b57debc38356d3ed9f77520cb1396be3fd1ab486dd62651a6f06afdc8bcc4f65f8b0622cdf867b4c7fe2f3872335808b51380975458eb9949ea5536f56ddc509f7ecff630c810543d6274334416c22ce1643d83772a884ea77827ab741cddb0b1cf86a72f48c9a5a0d0fec1af4287733b504c8d54ef7eda56467cdbd35e6bbf4ce9e4a607df2621a8a62934122afaa4294408256c0c51d4ccb1af388186e8a4c74a4473691f9840ab6e8e3b2b44be1831cc2aec2af583c6716649520d4ae739978d30afb17eb29b3f96881749341447fb551f32205fa717eac0d5b8e4fee9c6541f33bb7f70e789bbcac188fa5dcfdbdc8b4f97da9f0e41af5ddecd973762d3737cc827319ab9a4c657a4e0cd46331c5bbb469db8385bec2599cf109268d4f98c22585366509b64e5e9bcbf2071d0b20f819eb447b0027ff40111127527c290f4ac8ef08c372f5270dd738492653b055e5ab26c179a846581205f53ade8ce524377b66f11b2c7f61dcf53d1a184e4becec31c35965c744553740454ab202a85ff10792fa55807b8332bf816cc753026e7475691527a3487e188aa860b6299d49e0341d2a59b6111676fbad471aadfd62e43dc1fba7847b5c1babc682d248e9696dc9ac8a0f166ba1127268b3f9a26550a6527316ceb40576a96a48bbeea6b747fe90ea205fe8aeac6dec5bb94c7c62c0217c266b827a0d542b90d610f28c2d6cfd4f7cf6327305c0ef312e60fb811b3bbd828204ac1dbb7f07e5178bc642735fd0cf0d146e009664000888b1effab948e22e31e835e6387ea731b4335210b2a8e1d84380fdd78920083a11b20e2e6370f846d81f031dacd9713c54107f3e12d09632c644c540077c6f90726d4167423a679322b2000a3f19cfcea02b3313ba5e59a43f68b08338019dcf53ea71eb7e2e98ddb4a812f417c528ae408b57d8d3da91f756f2a5e74336fbc25b3084043ed4f1ec390923255f65e3a5db38d4d684cda5f3b2ec8bb550a3ef30334764f7aab5db8757dd1ae33d826a7b193b9052f6beff60fc5d4c3689d1e2e08337f70fec58bf78b62ddf77d9a324f8a49b759750350606db4ecfaf14473d9bf208279329450385ff005a295c5079e321606aecbbba22adf8c6fc6b198d662928c3daca8c051177da5f7340ee11d1063b9356985fd6bb1cfacdbbb1c12cc752ce70fafd3a1f4f15ee511206b66f9427983b23e46310391c8a6bf4c833abc6de8c156e755e1b2729e4de1fc1ddf12a0fe060b818f0f1057550a98ff99892cd9409bc1e771e820079630e82ba8a20fc86bc0afd7c2d0085eff38e748c186a433dee6cf24ea2db41cf14ea2339e6827054d442da5743c522511c238cc9daba90a1e22ed24113ae54f19f79ea8519a1ef40cf0f37f359c84465726fbdf7070a1b888e09a6979984a0a7abc4c0e84a05e213557afc96989254f19e7af060c6e34eba990556995be38dbbe0d18ba8a234af95108a118928aab8be474c0e4a40cb90feac2aca8f825683f3e8aa350e48b8c08ea5475e143098da9416eefdfe9d4c4a1e6f81ebc13562ea196857a46264197bc6bfb9cc7ed8e5213bb367a7c404eee2e089119f769d912af30bdec2ec20dd4a0504e941114a18f47ac5bff2e39d38c10da3e2cff7e26aab4a764975f3a28e94121cdea613abb9bd1af4fec8a591b24f6d64fd648d2b75d6e554a0a7c112b3c0b6b0a0e4cd2650e3e4ea2d105008e4f4c77569447ea03b118e4be93f9c99d538b96838e187e066ce9d4c54b22d295719e47d2e59126b43c50b032e25cd5f7b63e3ebad87890482e510c57995841d92248d25558993b1155b252676419c8b2da9fbe207bd1ab82d9204fba6a39d0c1d7f8815e5be479d3a39a459ca7b50457472cbf44f6a8324ee3d4096e2c3bf1d81909df4e6df785439c9504631bb33b7d62619ca8c780d724d4c8d3f36dd347845c1966b61d46c019a72f195b3e98b06dd2dae0bc6cefdc7d228b39ea8da4246f1793a215c856bcae69b4eee58eda15d11f0526005549e4e06397a5a43a032af0e1f50bfe2dabfd7a4ae30f729afbde2f9d5cc7152f2372c70e7aa1b0c184cda231da1ecf8bbaf515c125f5b2d1727bd1d45e6e5b4900f8c999b0a8b0d2ad7f0b8daf551a8108260972fa3c06c0e261705a9666534166f9407bb63504dbf1d1855be1395f9c1812bdb6dc4cfef7a03183a671598d96c9f6c44b17d12d4bd647b8331c561f4b6f4dbb334892fbd4507e743e9bb27ab7be73dd8e3207aab0ef540c99bd15d9fd72397a4ecbb88de5577ada89520b9b2298f2f49bb142fd9981890b0640030040d558838fd22845b949e91f2d50bf7f75fde69219f20da66451493bff41a832b3ed3d6f6cf86c93be8c3bca810468881061d14e7f90e235bfb33707eb4e7fd1a53e6a866caafff863b2d5552ad9716580495572430a4b1bfa4bb50750a2f47db35d426115765cf457425857816c74685438b5b5facab2d9a27f55a2d5fb90876cae57a7edc6fe17f7bf374a3b29ec20fa94a4720d5ea3ef46c29b72d1c4ee9f1fc63c935c396dc3c38df495ae9e332fe201944f0132b8dd65b9f8efda7b6 +MD = 1113a9e732dd2d8cf53f252656471e790af76728e54fe338fe5f25cb + +Len = 18448 +Msg = 938a80b7b7fbd503359de15041df24a90b44e6ce9fba302d0a281c0dbf464e0d39b1c3cde13fcaeb318f4f311ae55f0ca335e940d47ec2dbd25aec674bd21864147669f611ae7bda564ba49e8b617a12955995fa73429605656867035428c5526e02fc9911f0f2b9eaf667015efb7ba228d7716244adb2940c7b1547a2ef5dbe8d7d0420a7ae377136bb21c1595a6ca3a6d805e11168206e0fbb7d9cfcd0e98fba0e07f29c9050e882c05946452754ff5583dae0a01ae87db64f276b2b7370af3ddd8f77b73d4708162d97f8e9093c9d7e0177c5ba6c10a7495f9b1af87ffa055e132317c25e24b8392b643f0fa92b65687964f92706a2d60f156213289d907965d84c3a839aeddf34e246837dae293f5d142ae5af8fa5f1519703bc867438f399539048c49aac674f79c72cfcc13f13a3fa50f01ab022e0570d067fd9adfc5b44ad7aa94b056837d2186fa2548a73c983525e812f10208b69a0f4c3e8efe499ac0d8fc5e0842a3705e9c54d4db0cf494544dd02b758a7dacf7753ef7ce3f796199c59054dbff94f30115196afdc5b7b31fa54da7b2fc0b5d0bcae6d5d303d38d5825fcf595ddd679abb9be341b51e488f994b71403e7104b6948aa4537fbe6827e6298ccb07de678c0d2c9dcce42096a64c4a2fd12cc4afc72971fc2678830f56f040a56c6405374e2f8b2d1810694fbf39da7cf5a2c19e4ca3eadd9dc29313abca2b80041d59c0284a40f9ede20259228882c073486fb98c2a7eaf8206f65e6e9972875bd9e2e86286d46b1302f29e1762cb6314c5d6e9d1e4b3da9bebb5d6e7889e213841a998430aceea51174104e6ef3ccda0c2fe1461fc14c6b11ad7655dbc36b564fcb5b914ffb6dd71c9f775d6565d66dfe6f023859826dc8b3a64f21a60c2ada8b30f311e8c15ae39c21dd830c0b69798dab3ff85e17382f3f46564649aca70ca0ebdeaa6da71c472a7bb143d54d0c695454f8ea9fe8221aff0e1a58492d76692b4c9caf7115587e423d713423b325d9cd0cdba3917db2288d5e09cc27270f7ca4e3abb5858465f56dc7bbc8a9c64c27623346a7c5607eb464c6a31655f1e8b388319a410d7ceb4917aaef75ca0ef5febe58c86bbe18de6b1fc884cb783688aa6fc6d6c68b774ee5ea679acff6e5a9ac2beddf53ee0f57a908e41d5fe06d65cda613efda820c0758308e2c3bc302dddc55830a14d7cc80eada99eb48310f0699c59953e18393bb2c847f425db0bf18fba588c7130dc8c0ccef6a5d28ec73f1ab68c7917ff2b6c0bf70bb4b8a4292d176a69fa4d2e2accdbbc1c601566564ad5eea3f270a71ddce9d6fe2c655eb269df9d31811d918b0de33fc4d76655e399030e460831563811b52fc6631553ce2d4e1a5829c99f29d98c1e9611aea197b50ddc1cc44355a495d5c80b61aec9a302ccab87fa3aa12cb73e233916d39399255921ce2d8cec88f0b369762f19095c6fc11666fd56debc30611456eebf73127151a4034bf5620ca8b5dcaed43f5b1ffd95249c3906a0ffcb5dba94a2588929225c2f642766015a4745e85c5807061432b19dd2b6332d20109add9c38881c07bfe18899c8c80f9755ca5428c4585465997b49af7dc3cf4587814515bb3576d3d04a78493701d5ee58ace9b91f1c8b37b75cf0dc95a0cb97b978b9a83049ddb6defec71c7afb9b85da526fb8713af4b516bd590006b06c3d2de803fda1ab9ad870653dbc9b9ca9846226aeccc29ad7043d044dc4d9ddf95f6b3ae9bb1543f5600ee7a2cea1ce4614798f6d9e1b247c4fb49b94d0150db927fcd4348b95f9357640ecbdfd9578bb5da5f576d683c02abc04e8f6cbc22af5bb6720ac1428b5a4448fdc57ee7e82518671c08f1b03562b73b4553b5de91bf643348418ffd65f88ef821f384c64d34db762598115a2cec59d4c482a2f91c801e8ec6a41f3a7df2aa2a21d28bd5055fa1a0226136d68104162542b8ce9c21961d11639f099a41dd283753fefe948ef9fd4d8900fcb5d04e7e95565293384f65c283a59eb99d402c8ba85eb547a578983106c003bd68a93fe5bd75ec9b3e0473c12e032fa9a407453705a8a2115820ceff447dc6137f6a3d0df607e3414ddf447b9912ce744ee5cbccd7a851c64d35e2ba8f08d4796a91da39e7a2d31fc84e5c645d4af7940e8a34cf86f420e0f51687f55ef7cb699aceac0c0acd38a14dc0300de32237736362f481ac12bbebe04123323cd1075eb06f06f6c7ed80503ed343faa32f0aacddeeafb5af6a7f618f5458e3911b04e32bf19f7ca79a46b71bf61c9d45c7edaaeeabbace1981d7cc52be7d9c043c60717e04ca203249f83085b73e8823835ce816189a2d62ff7196eaee15ddfecb969417071b63f0832176dc850e1dd4f7e50ed4c3e2662419c95bb871c5fbf93f13c59776f7ca5abc3ed4b0ee2ff0c28bf269ab2c180ad5874b853bd7f2a87c0d64806fe303c5e97bccf48360f89374b6119319bfaf8defbe74adf58f10560fbd054f10b9b3e915483830c46c1c68841cdf15a10d1d61eb35d1206615c3772cd472ac1a998c9676882d14049dfff25916a76bc172e6194063ed971dfa709e4bda3901fdd0f26085d1f838c44517d36c39f7000bbf9e2697ef267c7dabac3df544c4fb3b1e89e9bbbc45f9741ff85e460d6a6cd011aa1c4a3e184b15b7dad8a18aa2f242c0b774908d82f0a47d16256ef76e1ccf379e6cefc74f8d768d80e0e9325f71b5661f939cec3b98c5faf5ab6f8e7e9a598fff9ae11118ae00cb330924d26713f38d06e9494ecc6c69081b729039086fff892218d6a2204754cf6593fcd136339d9411c81e3bd1d60e22fbfd999db80821c1ba893900d2c3d3289d23d9b5696b0429d4c29429d88015da1bbee412f9ed70b83d4e70a3ccbe1c554e3b33f55d24d79ca47b339f4cd510abff29084f4a9a6cdb0eeb26015a8080d3fd3c9417adeb888b25248502bb5faf072aee5e9936a966b8c3d1b1b028d5b1333eca92a2c8498763bb81010a808a117a03518f872a650ecfe0b4bc2694081de16747882d28a954c4fbf3200d48ef18832d14f39fa287c58ed9e6addb48a2376d2b461cfd6b95811d5b1d7a9170e8f4a11c7b23593b7c1b843409ff44a33e9e44df48a9b9fd989cdb5d42691da52266523626b73a61ac713e736129093037a2f717c1b6d95b2d089d771484283205ce252e99f7b991a3771c1cbec38f7c27f5f24933dce200bd34c23cf64447c41d9c885a379d6d67fb9dab94655 +MD = c0ad01beb7cffe1f97270ad5c8ce892664e026055cdb0f9ce34eb9bc + +Len = 19240 +Msg = 325c47bd6a2bc1e28285036850419d6c0519711fa551c282bb9a8e6d4a351ed6065bdb50c4dd63d23008dcbabecb8911e31c9a11849749e4af6822af896ca2cf87930463e189580a4495d5eec8c17001213bae8619fbb6d43ea6aa56d7b237d71dcc6bfca876c71228f5960a556a7dc2293f52874cc431d7d01acd6b1e51057530cdb82601eed97342f0c6194f0fd5de61ef301a053ce477cd8d34f5458f3331285f92e6d437b6b4fc4d0d209df8a3dd3315f04a2ca9f53b9dc887fc34b5ea936e4aa146099a855dbdd61529276d0d4506773a1ca9548caba8906d89d30a512468568e4d895f6ff7ec51833bd5b63ba041dfb49a6485d25056b08ea20ad8916b7f4a01033ace9b09f387025f8f1a56754e1309cb4684eeb110ee9352c165d1f01bf0a171052f311b3940389c3de2864d94dbdfb7359809573c14249ee0fb3a3ca50e179ed2c95bb52643cdfac757f2af7b01df671a0a4bc844e8e8904fe0f4d6836d0a938ae53f60225a6a8115bec3236b4bb0e2de22db8e8e33882ff65c26461fd5235613cb05a3954bb73a0f622031cc83fa306728e23184bcab83bdb9f815e00e0af157c3d607e7df5b2c9e8a3262066f675a9f6487378c4dfa958d3d93ca2ddf666b3d15da1380deff5fa87d213d81d89d676d1ef32a10ac1d6c4c321fed7011e0cdac08384fc9104adc1684144ba685445fb89d4d9177a2bb10e4dec307106c1f1e8ee51943283de5aad1e73312db40054b6a2abef529f77c8a3b8aa89f75b8cc66caf4a478062c77d1c0eea71c89cf88326a0d6edd8e730ae13b7df63d07bd8eae487d0275cca6a95acae198f119fb741ca08e84d10ede0a1dcb01d4692e430efdf0c85ac2e073234cd9072d17f18c7111f4f5295911ff2747d25c6aac5211f35baa1dd5e8ac5b8cafd4a98f187b4a291a4e8984feff9f07663ad7e18ddbf0e6d05ec39b6e96268c8ca20fe67c1efd413e9693be4740865282eaba619531a88f65f403d3dc089bcdea2d8159c9416c6486b45bfebd3c7cb1a4ca4d114abc0195215425a5bb6983f4d15c4710894e6038f890296de65b49cbd2c2d81a36e4c3a10d66713a9121a6ac4917a83443aca1659f1345334d06b44a16baa2a4e112b55a2f132ebae998cc9b5b46eded80c3f7948023f67777a387d3789af4d6d2aca0699141a64d4835bd690ed25f62c7fb2a6da5a98661ee9c8811ff4a16d8911c4c753bd91f19386240bf6ba143bca0bc0197158e3b1a395780a9b3b250d3a6c8812733c4e24940871f45789ce422936e45bbd8b85ecae03e36469cbbeaef9a1a072783e83703e90a20a23fab89bd2979be80f71136986bb7748ec34b2b53f378a51c332f656fb9540c7ec8b779b5e945348f79800dad632c00292f4b5c283c4c25ae4980b6b73acdaa8319a6fd315c3a6f8f66ec29315004a3c0e8a4c595fafd4d86cfc27000f4ddc4573c625d5908c13629c63fd34bb8a725fbf73caec3b7f3e64cccdfdc756eed20a239d1e15677405305a2605323257d4e8163fd5fd9fa96b7a849be423b3063880d16ddd15031218cca0137f1e21eeee6fb34ce1f004c4e8a404d47ea7dc2a9c13fdd6d746ebccaaa20ecacf5b02c62b41073963860348325bfe0621b61ad2596e1966813d9a2a575b16aa7a6b4d5418169273ff0203a9d51cb0af71f0f7841ce9b47b8f6b96b18b42283104e17a4f315ad58b09069e604d60cd4ee3cb0ab643014fa4465359d8d311e3fcf33001ee038850ed15f62c1207c2c452fbb6ccef586f5b6f4a875c26bb24ba7cc9d98cd70b299528aa734525a0bd066a3e46a6a5e96e584b006a2611a0051c2f0d607380c4a902bc3ae0621184aa23d30fed30606298d6b60c9e40302e3d999212574e71aca13a264be01b7c3024ad5bf53ce2b55069573ec37622f8b228b3248d1076304f8c9be551d4c9bc4fb703339298460b3f7a4a43c99456d1d870e974e23ea33309c5b877e13115581fdbb6184c91d2d88c262073936b44520d80bd0196342df08807005c8ea756e64d0d3668a7bc01a3c3079a3c958d840fcde29e393d93af0f26bb14119e8a26dd43b614a318695b037098e80d545d9e5196111daa3ccf7ed5824c5425b57c0da39080d156334c576e2154ca74646debddf296abc3086a45ea1745610747df63efafd7ed007cb78f5a31b581f02a30f4fb7fddd92244d67cb352309b44ea36d2081e35d830594d5b3e3e55df0f3a4952307a61263666a68bd7cf98835cf104d083581513445d7053a0b390123009198c138edb037de25d0bcdebe7b9be10ebd7e7ea103edaedc301281e0ecbf10b13fb2b398601774c5c74ec33989ef6be3e50bc4091ab52aea7cc1afa2c7cc0d4db37ddf6fc909109474fd93335b3854d8ee366f823f95a14a14d1fb463a53dead1caa233c94189ad80050b674997e86350088e7d41a93f9451ecacf96ec5a6b19a1c1e9c56849fada93cf94c4eac9e842428895c752ba1b21c332925886ec9cd96a4b98d3eea618e2530395ebf6226247ddbedf23900fef262a93ac55af0e5934a0d0972ecd36dc376b7322b06690dc8bf9b22eaf7b9c5d9e7c74855510ca8a746bd6509eae012f2301a8a1dce21c3e57bcedeb34bc684ecfe05e8520512717dff2e72aeb3910f7ec3e287c3711cd70f351f67c7afa7ba8027fd8147d192ee8be5e8a8ddc156a1edb497d19899cab5ba7de554b49dede5580806a9a3510e5e558d648e13beb178a384b2ee29a2abee5bb8c93be6910983b8e0c9c7f10df56f7f783a78fce6220254b6bc43d32640ff77682373fa137b144774bf72bd62e8904e18d31fd5e238cd55bd2c69418f2a57a21e9c935bbfb3257816402064fa484f55f1b6e94b2d56384b2a7bc4e157b885404e8d1087d06225bf680457943ea51b3b955e5bc9421ae1996132fd3f1a7c16f67a8d81fb0fd893a1cc649ea79a8f82537641edecaaf747c503ea68b742057b1925065e41c8b6fdb3c5f95c2ba857f322170a1601d26bd95284fa9de658b5204cc0901be8856dd269d72b26ace29f0c4bea0f7ac552f914c656ec0348e93bb4f5ffb3315bd06da03892826487d3d52c2571da7283a71f98951c574f5b5de997a914d835284446f5a46a97bc68f69ae13340f393e9395fc3432794c89a314f46cab2879dba3b8a3131d1c384bcb540ba19d9d35552a42a33551b5d15820ded40ff4b39e19e2097e1656a9e63efaa77153daef24d4c521f574f69f89cbf4e4424ab61779740bdf084b397a0c09e409e911322e8e252dd9fad9695ffe48e6cd4505377b9355e4e44a9b0eb43213512379c3ef82f9af2a13ba4df11eb838bf41e628c108722237be4bec1c82e1c4099d2c515712efda84773eb6d7043e0447ea2c9c9ae5a045ca151328 +MD = 108e16cd542fd17fb2b51d0bd47322bcf86226f5a199b4a7c2e5675c + +Len = 20032 +Msg = 68a9e85504c8f530a96e7d67d4b97920e41bdf891e53c66bf49cca018724b20a6abf501da9dda93d0aba56ad92d42a054ba21586458348abdbf59a0037072b3719114779d3a28dfa99ba50d0f7393d05a3983eeb75d79fafb4b6703193282a13fb0595118bffe890ded732790cd1fa477365225fb73712a00749123ca26ff6c69a04018cd8dc04266179c64fd882a8f44370898b128be8a65d1548c86dc5d9777e775492c32127e5ab09d2fb633591339c233b168ebb6ae83c82dc7dfa10194f2dc456cd53b69af543ed1f24b5d3fb2d04e5ffa933afe08f2ff89405533aff753155cfe29083a57db18f7573d7422f0a051f9fec0a5092c2bbdf3a058029d3111290877c82718fa57e569c90d06c75f12737e1861a84c7aa6a9f942887c7dd4d56df46413266a29731a95b22a837140af1968e206b34c86fc3a06b1372fa644f87a9d3d9a74b247852f27bd1678d567eeba46e610649de384e4b867149acb23f2c55f7ede9095e736998c547165581759dc948f2f2a94f2d9406afe812c40d46ce4d7a25018698adff03fe29bd77de16906ee57a373e63781c3aac20d72abe8cf4f82428f6ac1a519b9af12262dab58a4bf90ea2deee643e6e5046c39fc60d3826bebc9fd0622b85c6c765d80f684ef956d48912eea398aa13ae457673804172ed070c31988f147107f221f3cb08f08a3a651e716f4449e192be71e35a40a464cf3bda87551d1e3fe681ee1c9fa2e5657e1697686ab9bd0e73e792b25cee7c3356c2ef480ff38e14ebdd94fb911f73b3aa4ebb9ee5ea3c573f906f8b8172120a0a05131dcef9af1b9f6edb37ac65e39c477451bcebbf10e47d23d114d2b4ae0f726a0dae9b17c879899c8b78f55d7d47dcf22269812080deb50780f8569c986a165aa7a27d35205932d06b6876ef88ddf12ff64eb1f5d36d70a444dd151317447e3ea7a27d3b00e1207044ad36044e850e939412822652b83462e56c18ff74c5337cd655a211b039dde6deef3d821568bc86c65efd9b45e88ca92a4c664af814bc7efc64f4a0788af19801d7945326ad827052da283cf424fde1dc2507dae85aa1aae1767bcea0fce2f0750c425dc97de9b9012d0df2a6951172c3a104998fbe6b6a4c3440846fb63a5401374f8a450078c99b00b4a3a4634fc4a766646d3469a12507454aab2ee1802e6f00c4c0e45db709e8fa233837b53f3f501c2f401e82cb42d853a12926a43de5850ea8e9ecbd2edfb0c4649aa5b36a4c866c6ef99632712b88034ee89c28f8e10c0a03eca64766b4ba057faf3687575110fe2880e4a11c47dfff58cedb94398acb9bddb15a24e6f1cf667a6134568eb8b77965bd50f653fea4efc7c52a1189488c6a3f20507b36fcb78f5f97e54b98e743852d98225a9fb8a17aa4b4d0c76e83151f3021cf75df3f3a273639938bfc487ccb89f9a1f487dd9c49f68216dd72a32f61b99c203a68201fd7052e8441424129f380c816ed93d55e04c519447c1d10a2d8e1798cf159093046d6600093f33c14a51bedc96c4b09af521960a2cbf632362db0a059c33b61331cb0b651a996a003886150029a38df56dbfb3f77f38572b3082ef9cfd79490f1039c18beacb3d5bf445ad9099ee1c01d48729e0d1b5236e010646d3856effe32a1a06e8ec4d34310820e7125a1ce15ca418765aa6ce6e786ee59e2da67d113be9ec7a00a187d52bdea86fea0cb8844266d417c970ec8ee6d4a1541ff33c4375ca316977ad1396a9023c969c04396b7f975a8cc1c2880b15dcaa173ede14fd2d658973926168ff34fd6df9bce3280d40b00c43b80e2979a1e19045fec9afb4cf264516f55100855c3aad17b11bfcf0523b79eb20d65941077dd46ec46864e0d79704c2250e72bf8b448a6f0d3130ab10b423d1a09d9ff7a32bf700441ccd27d3223913860c28044ea5766e45a55b93f8948a959bd6661421566898e27950f04e726279bcbc990a22c80193ef0ae65196671eb59713240cfe97b99713e088c0b5e201631d926e278436bc8e6db4695a669670a006d68278975a5a997cf4ed1f860ba67e4d4feff2ff8bf7bc36344d14e5ccf0e38f82e9bd8838dbfe7218e6635b59c219a027c6d30112438bfd2d1a179055400e85bac2624d9dae6497ef1d428256d4c3dadc5b6e2564409c16e148e8f2e9ce7f8df0c4fd5403523a52c9fa23b78d5f1b41b0461ac91c4f5b281361ff89d4fcb4fc9739e53804680e374bf58d5757e16e7945ff7f8884f0478515edd1d1b16b4d7640b9c0761b404ec9e797e5de60dc6be62feff2d048b3ffc27b54e646f99ab77f7fcd057ab28b7a6f2f79d3d912d0621cc0a01b2cd20ad264a63fc36637fb717c96ec3ac2549a2fab85e3cdc3e84e0f819ab86f1abb757df048f6ffcbd70e19f2388fb6f99c0ccd037d9e4a2b7ba5b2b9208155166f8430d9b612d1c461630f84d720206cd343e11b88d1cf7c3787fa27f4a363ac58a7b995802c000c616ac088f5560db894efea383a56c4329665546289871149216076c839ab00e051b5db831599b5497b61670e0475ceeb22be4fdd41b4f489343ed6d645083b0cacb4cf17aa53ddbbe138d5f179c7560266f35b0ccfb573c91ba3783424dc34ddece8099b462ced7c50d6c576fcb3e024ddc4e48595f12595322ed9867b9f74c0acd019925b7d4b0754dba4231fc403aee1839abc16f0607a324159319bba8171470d8da15cdd9cd967b7f07a6590171d3cbfec34c55bdaf4768b95ba17b5d15c45e0c43cecb6498f03fc48e13070b10c29ea3764436bfb70895e0da47229eaee440a5bb97dafe784a3f90bfc331e67d843832aeef3d9289ae5393f752d8f44a3abdac2cb7222dd56d26eb82fdfd1822e143b252978fc08b014cd99a0cc4e551907e287d77ca7c18229addbf08932b66a0642c4a8257d127c925baabbb0ffb2bac2a21961ffb70a72f436f5e2d1ca7b08b45a77ef8bb4bc4cd893e13a8e0be41566a9f5ff7dc93eb5ccba847b4c0126a688e2bd643e3b8c9d61e6eb81b60b5f958e6abc046966c4c73d79162e5a6f6fb00e7c13aaaf89fa0ac8c51835bb768bc79454ca1565083333a12309807f7dacb1bf66f92742289b0177cef5cb20c5ff380308bea6d3361067b218fcf64da474281663fc6ea88fd61df96512c66872304364e6e83d4678d2efcafb6f04278c4c8f9dd39be5453831bcb817ed9c0523b5963480054d3138f148662abe4eaf9d9c54c036462faaaa346a4e67e4d08922f58cfc54645b15ff01fe0e27891a4840ea14282c89b23b6e64a326c5a6e8672886b416e4a3fb87437b6d4d825e1b841ecc4a3ff6d4f189fd3903dbc19268218cdf982eb13282e7aec4328ecb8bb6d59fa9637255c67228cf37e8d7dc35c43ac866a5be3a9ea5c98982da5c53b060cf4c080c6999ccc87a5cc7de95861f812573b2591fe156b8af7c2dc130cb5acdd39c7e8170635648f14e8f61bf5fae137407594efe55e9500bff2b83a682f9428519637f312301984fecf4fe9fb9601fa91bb1e3c408c4e0517 +MD = 3953aee2703463a62035f940fbb7d08763b38fc4b6ca37f5d71a7714 + +Len = 20824 +Msg = dcb55133daaec6f28634d61e32e005372f4dd3d193cb9ce93858bd7508ccf83e78531af25320da75b9600579676dd84e3945adfbec3adb8d29ebd7afbf729f7b31df589070e63565e9d49cddc2c7841b611f22972f30c4719b39fd06619a02c20c415435b9669f681f78e271cc57d145b1c378cee115203d962c76a275abeab913625607b709e0266234215e0c8387753119f7c78c50b79923ab8caa830d1f0b4d28a531f137bf49baf09fcb0bb46d52e80ae9abb74b512b489f85461427695ec27c8bd9f05906762f94a6e14f534c85de7c94a1eb6db69e0feeaaa0af63905b7b474e283ad57b57ca087cc762c6ecb51b5842d2af1ead98808143dddc285ba97f6f37455915e794923469a6cc77158ba88739658bc600c1a240982823df93f0d6de8e58d57f11d59001b7a613cc8fae8cf0c18307cd75c37d13f0a70dee00da897a9b8b347dc3c1ca55aceec12f21c8cf7a2454ac9cd54319e3958221be6a0d9f2da5040076c3004a1a92a75d07957e7a0fa8ff0199e7ec7f96cde2e7b7993120ddf6ebc0d2da3b1836aff870bcb17a939697ad8f2d7563b616e1efe84155ef1574d469fdf8d01a3a934c0a81b63e6425f63785dcc04553c64919d0abc565ef85d988a63e526d44ba17b005185c03e33519d1b072bb2162b819bcaeb9a992d878f45ac90b4779629fac2510be18caa0cde6ac55d984cf38936d14b09857a452f6ad91faec3fbb1bf239f153f9515943f445129d9785177e5f2c67ffd235630708ec77636aa2fc18baa55df754707973b31e49b03625c3dc2440fec2efad969cb59952290cd90400ffdab12454dbf2d811599ab53ecb99f9eb902122752607bc069c6b775b4a9b7ccabf350183fb8c1b16df4dd435e1637ebb041747ee087c0d01dd0a73de5e8934223c31b768380fe4ca96aa37a5cee7129d842a58e1babe37b04577451d7d95cf0f39ec6d8bfb42da3667f90315faee5e98f8a07dd7a695e31bbaf916a01089f6999eaf4c75aaeea6613a81630ecd3f0ab448c2e05733c8b94925d90ef07d2b50c953c27cadafdbf053f88b7d17afa4bdf95dd8a6e9c92160426f6054942e4486a6416d24bb70d15f15875f79b808e31f701d2afa15d066810e7ed31114899b3f384ef86d2857989baed145807940c5d92071ff0264b060c3b63c7d6cf9f8fa248863aa7e7bcaf74d26bd85bae3bf12931241a1e65dd2d7cf4190a58ec9e227dc9d69cc803c33b81d8632664e7ded92f44c7656cf899c934cb761929e0fafeb108046a69af4f9a1b2d51a3164cf330ca5d8f667e56e775be320998dc550c60e6837e480f52a847bb51b5c2f2662f74a4ebeab1c4f96ccf83c851fde2b1691588bcc29a2b8663c0dcd60e0a5babda21296047cbc36890133feeddbcdf7e877912246ff530c308921a3ad8ede48699d2d25b45091c1cd80d2d161b5a2524fe080d4ae4ddd1911d37dde094e21f9ec4f63a4d511e119ecaf9d5fe895a463d234ee4a0bfb86069082ea277d08b5f4d01f7bbb70a6f5656ef85e4d8a631c53f9dca32c65f097fc36fe302610a4e3629c773f118cf715ced9c2db464f0752494c3e6721c516572289af1782ca0af36bd9be754f31ec887cb774ddf040698e6e54c302d1325410a113fe67e4b3222d360e5be61c676d98968f782cf3647218e998d33be5b49208a05c51e7f3d4d5d8ecc3b85a2137628b44ea3590f8c40837e3a0d7db0553b88948ea11605834093eb4813c9906a8b3aab04f13d1a766143584f535abd818afd9c047a79bbadba7a5b7ce4f6a72c3483dff467ab6a7547f58f31e5770070a5d4031fb795dc2d298561d3559960d8f098c5c57d209a1962fe959a3a3f53931ab08c38cf1711820c2990d3bc2e68014dfdeed0b83903c320e2fdd0d8301179681779d84769e63cd0fb6af6af31f735ab07ddae9f51421320374a8e35e5b4940c8d7e86b6fab4be266f42c49520c8d6a66af4c7a915cf79df5fee1ad9ccc7637666ecbc746617a66ae9cac604874774be7bd6b44bd32677cce17b1f4a41c468445856f2262889561d1f656383e1ed9051def5ed1e25c19d67505403ee013632e4b63fc032be847dcb64a53589ad359a1ee8c4ea969a3b4b3d210b516b778723d625299f3094835dd45e0cb48c55ba22644de6252b8cfe11ccd82390191151eba71986e7964710a6f66ffe591287e5a9c062bc35639a847174ea1f389d6b00cac607ea41da42c6c9701f1c9ba2a042a0b1cbc983d53f58faf3db70c35ef12e71b174c6367313f045ffefca04b32b4b97c6dd90a8d6d8060e9820aab8d420355107d4ad2e0747279ce456992cdaa57b0f6e3c941d0f10f63cf05e2f91a384bfe917cc01a0fd38f73ecbf80c6c7f9b5b68265d6648d466b3f68af891e633ab18ca9fbf5627cb75c9cc2528865c187967427dc469b4dd45c9dbc664641f1aefea45de332d3b089a39957e7cb9643bcc291ed2e62109703aa25d413608a4afdfaf0b71abf9532af2a15b4678f82d60000b6dc4472e8f33b1c7eb79f2022f8906d18be89e4cf8a93bab6dfb81d5001bb1a8bfd06be4ee9e47b516df0ce3183ce1fc47a18e9aa419b1a24e2c4bd294d55d6b7575c8d6802668f45fff0b2de711ed89bf4b0154dde311408c571b6354136fde3f22f295ec5292003748513524cea5f453337b1e0e9bc6e0a8ea9529b65c657b6d765d859bb96f632d4993bb59b997d6b3f97058deba4f1d14753d784416eabd90de8e3816a13d87b2813702ee793fab521b6597a6b506506f7578e175e94c3f39c9e92fd5c09908677dbfbe5b73f9ecae07ef5cff12a9250a79dbf7d43a265ad8d712cf619e1e4fac9d924039307305384d520b505993f585e0cb2dd78fe5aafe748fb9327019d8026f532b003527af716a52454300536c6248eae60861269a0b20a45fd10d383bf97176f139089425f9dd547d3f9d63d41010afd2ef4445c29f7a1535b5cbd5d6023272155c1125132214dd25ae9751d71fe69e56e4afefaf1bdf46dd69129f50ad30d919d1f566f19abf50d1386489eff2291af4911a70aa10cebda96397e1166aeb1071431bd63bc41b53f245bb88793766ba2e6d0a655e0ec6ee4c2db247a1bbcfbcae27fb0f7c2ee75b1b5ed2ea2d400df086e0f65a3576665d1820083f8d205d4242e9195f1d4b71dacefc610b56bcad62708564bbbad81b8ea002f03523392225b20f0d51a99a69576f96dc789ffdc3649dd2ec0678b46507761f00c52e56acfb8e223d93abac2c557fc6abce6393ce9b4141e2c6d99bb13c0d0cb06be9195c18399b20819de13959920465693c1f4d5b0d6aff8967eeaea0c7349595fde1ce2047026c97eaea2ee838c88fc5a3e0ce4874b678aaae3dbbda572f16dfd750618838d058633d176b65c69b81801598afd7f9ad14b716f9575d1f64caa60fd5b4d4718daa6fef097d76dde5e1151b97807e2ec72a3b3cb20f8d927e0794f1f2368993a2a91a8b30e37fe14034f1206ddecf668d4fb379e8430052c384093836751c11a7faef9c1e2c056332e3a0ceac29304377eb9c691c9049c2ed968f4d02ff007e26067b8c31b58bf62683a060b2ee45380f847284cf85be8544d5a3aaf812db2b75623af60c2e97fc938b7ca1129c72d6ccb0b2576191f2fc71b7d2dc767f00cc3e84ba441de5adf +MD = 77682c1b38ba1be1a22b5c1eadca23ef7da6b648d916d9acb321f8ca + +Len = 21616 +Msg = 3877b3871d143439afaebdd958503a7a7831189d12939f3fc6eb8217ff42b4196ddb7e3eb616cf876894d340339cc68255be0bfb55b678f1f493f58561184535ac6223a57dcb919f060f6d5836ad45f52f906c4dfbef4df17a72006a9f961bc1dc52cb45dbfb23886f65b3abca4b5ddbf0f0641c6c07c64541d0cc4c2385dfc4e7f49da4396d2c4a8ddecec0583db63d7f261bef0fc68af730f780b654ac3847b490c24cfdea55ee46c4e61f464cf922c47ab84e4ef3420f2e2e452d9ad5cf512b6e61c5913a467b845d2251fd40ce93a73463c19058959325bc433b5dc64bea34d5a3955b25a6f92ef3abdde6e1dc97109b46d13ebb2c8dfceaa1670548561ab70fb046c5731d712ccca94b68f6cc36e7f88605bee5ae049b008839fa2395ea9c62af6035eb55ea66304324ea49457814934ee6799ec401ea461f3aa51fb261cb17c8691556f36cc369a1eed6a0f0667fb4c4fbd7ad168bd0038ff16c0455882d7525ebcc7ca2ff2ebeec3493c4750711a310cc41dc4baa3881ffe7b8992565a8c6eb6dc22508ac8c764c7b897d7b64b0a75be11df10c66070698a2f2a7cb03255045785f19cd7ac6dae84d2092aa83450acdc3d4b500c826db81ac80f6ee678d5d59930b1f9a72c432e931c0cdac6eb9128df9cff0d0d77d48e38dcc4e379bc6334f462e01179a6ec676b0d1f4262df208c40b756a239cf494e6cb3c774ea6ba1a50193085ebfcacddb851bbd0c3c6da3499822deaa21d7409b1f03a38da904f5c84957974bea067c0d79ce629284358dd35e4613af564e3ed6d842d5b84616f40124171953a8c85b8fa19bbc700ab534cbfbc7820c3792b89410d7da6f322010d22a581b205caf00b4951a071f107b5ca608fda65b4623225561591e2cfdbed0cde4a0f91c7628e01edcbfef1a35e659d40e7eed17129e209d423d3d7c2921b856cb785fb295a49e40e0f3e0dc0b84b0d864b1e2ba2d6217ce2c0aa4c725173bff47449b8d2bc08fad3a6c68eed1e4f645b44d23def6fd9c7a8727e0a871fdc049f0ac5906c90b38d6517003bd49659e8e65970cdfefef1334fc4b8daaa05419a94005f4b9cdc31e3ecea52de1d2b51e3501261a47a8a5106ff3bbe82830987cafcde81b00caa6c448fa8263d70e21f9bc0f70d8a091ce188df61f9cab93697dcff2d928964014bfa76d8e32273c5ab595f91dc4653bb890318bdd17cf5915918c474fa9c4beab64cca02f153d1dbdd64546737a2016f31bdd1d7af5ede24b5c6743b20b26a6b9581b3aeb898302c9e06c8018464bb40c1ff3338f93a1df6942d360b6e92698fd0e25865a0bb39c1d485e3e82c5528372111666719d6590fdc96336a4b06ef5b50b7e2ae118293a1692acca3983df15b393b91ec75fa3b78774993e31fd4a4d9fb48781273b7e6d4433dacba2fe4beb5f1c5dd5077706a384b8e7dfb53c53210badc43182e20dc634c06aab65811364b32f6711a85ff8f5742ad193c4da13e0876bc6b48aa861b556accef1e7d8e0127e21876d2096e52de43ed902d763073ca1531172a4fb04bb287d9a37a0521c851eb7113016a865ad435980a563639765d81816f47866815838a73ec53589333cf334a712e100f504102f4ae40f686f2c9a0f49c26b57421cf5be3f52fdeabe9aba4eab7e163d1db2d914aa5721cdd8d175cd4c64f469d169ee271e499ff3393ed259b0ea2cb93a4a1cae117741207ef4e9b67144b9fab9cf80764e21623f1d89b9da39efab01f53a495032bcf3eccc17647f7afa12a665de6b2061630b2af61bff64b8e707a3b8f3fdaf6090a0af3ab9847cabfd94d96fe6fcb9da96e1433d56017db078d91b000798103daaddd4654ba83286b7c72022a9c3a72c258b145dd87e89b30d75d454f5a7272c6411e8b65e7e35bdb1100738774e7cd8a77f1af213b51d232d847c424ea968bf44d378b85244faa38205fb1bdffbaf529523d3848843aca3418b5f32632d3968d598f0e5d7baf5caa31f68475459c34c672fba7fb6a8bc95f1e109cfe3912dab8ed8edc95f3ebba58cd2fb4574f73d0895d95c5e1f62c18da72c18554073ca09e929cbcd494eb0c6b7b71080a2429129b9d715aa32f05ffce9c2e77cfa5373066cf2177c267989a0ac4254937cca44224baf92ee81effc56324c139171aedd2392d85d50873d8ab5e2fb13f8550cea84b3a930859c900b4c093e195d56e44ce3f33309e4ec194888f447eb29db78d8c39a7a9b19d3af1120e71f551b1aa266b9f698b9a3b57b57ac48bf46a2609cb351688a2f25d79bb287444673652d57af28257fc91783f21c7258d7b2ec94e6fec0966e691418c443e1b969e0c61f728ab0f86ec4aad81c2b7dbd17cc82e8f61f93ac8dd56f07d769c2bee029b851917de6f7dc48e81237e940edf5dfefcd489a4d236ef0b13543889cbd5fbaa674131d3c9c4ea259c2f3fa4e5408899db23cf35f93884765117714f23d2f103ae7a5dd246e4c8d7a7acec31897b636175861bf3d657046153d00b345c6d4c6c03c983220e64c46c4aa36d812218581d6f045527921ad792c186ed819e2e74ae0e388c0c48cc48ab2c1baadcd7a0ce9774a56519540a65d14242ff7d109ed29176ce5ed81da5bb5df61c8a8cd09a2d952a72331145ad16e87e0b2972db44ccdce493e2ceb475854a4faff8d8368edce03972a7578d8e539d1ee953a626a8cb59ff90003536c70e3ae0dad907310445404aaeaa32533282bacae465621a5338ce70cca157ca20bdf551a71662e885cf7c052c22ecbf230d05290547eedfcc7904de4fab7a990afc42491e97318498e25e11f6f9cbfbe85a47e453e2929c9bf8c3f22208e7ca0c33eb704644bc2cc6e6ac171415182c09d347a2d61c967a491bd2544c9ee686afc8b66f27054a0996432fbe8c601a7d0edecf0c97de41a05d4cfbabd557bef579246ceec9c324439062afaf68c01b1480e5a5ca9d11dd365ff2049fc619b93ef4afd594356493013ca9f491b01f6119e74f9283f19bb066d874b6da26ce1d8aa8d1b80a72d2dd6b2381c50d6a6435b5c9845edf996603564f3cd901fd5d33001cf3def888f34aaacc53ebcba077df0fb0ecd1889f581d2e4cb135bf54ae43c9d87b100480b124e6bf852f725940a75123efb3230a5b4817573b91b932a9950c64d314d961f3b146858157aa9ea6d5a0abf5cb5be356ca39f942b79a9f3670f24961b21d33a03bf3a5ad2b1d7694b027cf66e2d53130ecbbb92e6d08a33d1ea30e8fb479fea20815a7737571e9ef810b17aac03cfcd3f6c520687cab47a6e5463bc4e094cbe060d3143afb4effa090770b292d364d263081b556ac2d92590e0358670017a1428d557369865dc18f2591344bf16b2b11e1150061c4338d3ee003eee2daa989b0d6c44c6ade4536a488811979d3859e7c53a989f18e683e3ea56e849c37f38a12824828a4cbaf66c8007042199d29ae4fcc66d96fd071af3fa36ca3fdde9cac50da088d7f15435ae1d7863895150164729573774153f9e82a2423d26d994df753262d066383a819d853ea825304b5c7cef6f9ebd1dfa6efe86ebe99542eae7401aede18b8df87ab96bdc5a8bd31eddf493620be863c20ce60c963801a66662a43b9444de6ef8719025d3e33396650b5cc9f0f77c731108d797f3b1027091e220290862c557c516a037a7eaa316986504077ef9efe871e321dd76dd0e4df7d62247cce3d6e4d8ca6835dac950c0338b98b07e7bb9206f1c733182149b7af2cf492c34109972ce1d6694ff17d32fc0ef697972057eb763253a28b81010943d2df35ad091739df +MD = 898ce5648e62cac50c6666d8b0faeb19e7b2b153b41f348703abcb03 + +Len = 22408 +Msg = 17d112348df64fbe700a1c74392f6b8f0c8c11a5f68b247d7344a82233396b361d432e8995cc05eafa3f013d73bd0bceec1213e55be76b9b48386deb8c09640c5955aafe7a480d64dcae77914eaacfe585ab1a5a639ce65a795be8d4ca6de48ed1f0cdbdc6d02ed31e3ec898515e7c7cdf406c2b95125e630c94610274ccb2648ffae0eb00ce2fdfc6d93a790442dd3a03ba528179b19a5d0cca1fa0128d97359b5d2bb3b1a9d931de66175defbcb9c8f8ff148498e264f17ee76bd42c1a5ba9fbfff63b60c9f4716dcca56b9b35d7cdc6f9fa5b790b82c76cd28dc64bdac669b9ca89ab959648477cf52dcc8f1600f2768e4c2fa596bd86dd73cda0f6359f1ddda42b2cd9789c5912c8f6a753c5fcdf0fa85127a2e9ddd6dab27287b693b06d6d7726e6b2d7b952372d4a2570ac933b992e526cfa6eaa616a77c6a5125cbfff732ac000ab1b68d8f30c6f6e6d318daf1d089725348beccc95aa0f2292f8957ef6a542a249ac6f934f4daea9d2beb1e2a11e687bd9aa6ac263339626bed0fa90ffd0f4f616f2962d52d94ffe28bac87d30580d967032ede9ddfaa3d81f4ab6dd95931d219956a74b05969a96f58d9a27cf9ecd9d818b3de90ae87e603ccf900ec0d6064e5a3e68986e6dd799c49eef8988d8f2b9951c226bf3e36ee79dc851cb8881f8a3e213a3b997464d2f1a578f4a62eec211334f64179ed4bc95cb9bc1bbf67c3948b83e1e59880a457e811f421366c886cee38bca9415a4b1914db2a88711af11666425a21e489f07b1805ecf8c9a4e85172d391d8b60399304ab73ced7e202ca256f32f6b0deefdbeea07dff5c086909159abf25a3857daa156e48fb516f5eabac60cce4b855e1095d67e29a2cb8ff58efb186aa858e5740ed1d98f6a0c2a9fb24bf5a32deb25cd8285ff668a3b0f9bbcefaf674d882ae9bb340ca886ae3cd03b41546a9c9ff4a92741021306afa407adafe774a456a6c049060487958d8b00b85e8f7112244927d6c01ccbc289ebbdd3a4472f6744d78c3ac04799111ab3c5abfc3d53290871ce135ba5dd286a2512c17554d3e0c33ba202eb4c5973e64573a892b48d3bcd2d008fac33e3b2c10ecae98b772ebb6251a633ef894558609ebf10baab8be4d2c9639e1a5d5bfc1ef73ace6f447c5192980d306594e9192a4dfc86ec78db9ec9e56bb12e78c25ee48cd6e28943693de4ad4b9ab5e5b14093c1b07da0b2f8d412ef8d7b611ca375a22e43c871da61fac8dfe5d589024a694da87f676fc0702f3e664d5f5abf6bbad859f5e2b19ff2f2cfce60733750f0edb850bdd6b247bdfabce82fdf63e7a7a917ae61b3b0fa88c059e75ff6497851685458f03e00bf4ee10ed3b96e251bd3cac07a1bde0880bfee07b918c147eef843b22fbb1fe37dbf5cb4b75eae06d27c8a637b88a410b8f4c659c23f86bb0b321a425372fed3296bd83f0193f191920e8280f14cb87209c403b08148990b73bb569552bc5d4848f0ee1e510deb5dd1062da999bc7d94f9aa00bc74a88ac1bed0831bbc0bbdbb32caf8d31400fdb415fff63dc36c86021f1357ce2af3de66233e1a55ddc582c49d76a2edc931ab3ce75876ce0ce14431d0ac737602aef6716740a6c4568e5eccef7056ceff046660bbbc29cae49f4abcc4b1ee349a2e756be17492f7b4daa46c8f349f1713edc1c8197789c4d91b0c0b41d0129a6016edce38667960571ef60c135fe626a6724fcb6727013c58c90a95fe939b17e2eca210c282c48edbefc624024ec6ae252662f34b573aa1f24dc8f55158f22d911434cc1655fee3b1b1875ce28daafe2e7eadd83c649096240db991c0bc825bf9223868ba5ca2ff56f8dc1f2a992d9710ef72c290fbad796c7d6f03e31af613999b0f6f05033b425a4a16d340fda9198afd747b0f68ebcc3a315bb43f10b7f4e0e34c57ace6325d2a19da11cc37b7f5eb2d054a0e58c62f2bbe023b1b2a32607d9f51ab1882229054ec987332b3d4acbff2b7c7f437d6e2bf77f5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30e6d778298b743f3969edd6aab1821250f8434b6c8b1a58cf030bba4319bb1826bb2fec585fd77b5897cb0aa9e5544f7bd1ae26873a0c853beaddb2176d4eb357221007d2925b93220133df0543ea8203d1e6db511ca402f621fdfe2c3ea839094401315ecd086fe0d0adbd85724b94311f72d492dae9b748d1f3084a35d29085488ad2c6b8e7f8d92bc10cf31b7f6b4de4da77121be48d7b22483738f9d3a213573352d0faff14573bf83415e58ff19f47a72e98889b6ad63b83f2c033b355fa998519453b59aca027d99db379820c6e716060eec91838a0452ca3a88b7b938435078fec25fba9fd18edb0977e60a6048a8d74da8563dd2267ccb1b9a83243f754421c8f5eeff1b636bad3889d31a6a7b9b6d425648243a4caea84bb33e04d9c1dbc29f48e3d6e13a8ca6f4d7efef4a02664e797107f506d950e8476d38d98bbb9ff1ce45eeb065c97a5edafc8ce7837fa1e15f72e61eec7f1c019b231420e9c4f935f277503a3d82ad1b37624aa1ab35d6dc60f693104f80689ab36f507968608fe58857d8c2cd08ad82b6a3999c25e76d862a566f67949fbf0a2cbc6e218c30cca71c61b8f898cde42bc52b0a3587e6ee75182d0b83702f97e66394cdd7d99827e11b1f913a2544f95cdf830d0c45c6c22fc6e4d80256b27b95f4830ffab5192a39f10bf205f70055bc8226229ee409912c93085552bccae2bf5bf1a508b3266c085a915bea827271b1499edb5be711d3e2192223f316cb55c9168b1d90586235d2a44a1f665c3de5e19257b7d1d391f2e6d5ac9461f9465d399099ea10293f403f6ab0ecf7e8a51ab3f8db187f1dec76b13512473dd8ce618776b89b068a3ff3851a50252dbc5a98aee9b39dd24a93e7c7d3fdbcd549c5fb39156180f21fc6c87a3f9258664bb0d838e15bb879ce2ace911ec965c6a0cf82d5192f6c513e664755470217302b6a61f87c4de8b43d1393b391ffc290823db0c1ee6c9da28ab0f8cccd29b219bfc9be541704bf3ffbe0bf95ca2b53b172a2ddb5f1b3a574692945374e73e9918d6155e25e1aac7baf04dabe13b6a9b7d69191f7ef9f04357e21b52b276afe2628c3c1099dea20d5bb025da32b3c34f2428c462e24894a642e4ce12ef4999045f6637850631dbcfca46bb0db6d16761f2af592bf3d0cd89efe0d31a9426a208f9ac2f45d5a0fe14effa38ccd55fffd8d145fe03195944f3461d52f207d672f517a54bd66cf4b3e5b213c49ff72332bda834db71bcaaa0ec2fe57423b221b2d3a19ab4c235f4a149fbdb860f84e7a9175ec21afd448c8a7c927e6034fcce0aaa7ed39191966a7148b298a7a3e4710beedd38e02f19c7aaac57313fad4ca7218398980bc9f91ccaeabf934ee48089014b0cde5890a323a783664639170c72a065d6314af4c5d455380a14a458bef93335d3fba7a74b682a09a70575f9a3f82e5920e575996258ba397b63d189078848b41ad8f8fc775dda4703b61cdb790174665efeb5413870a0f5fbc7fcffc4fde9d0c9be711890cb604460a05545f6551a9478c23173afe6af75708a4e405b21bd92c9f33a82ff7a6309a80c49c082bbc7eb577a12b72f8190c0c4f2eed636bc6d0100bf7cc22b328c9cc14220d385fc2374e16d7f952008ebdedd480449bb96a025576c5f617bbb8307958a010767e0d736ffe5a196ea4467d8a5d3ba1f5476ff07b6410ae659dcef520a2c14e3902f8b399a289f41f5fdadb502dd36e2682531ae0685a6d92c5f78830a6f83ef68b1e686987fa21fa9fa657ddeaca0195e6cdf222d815ac35b0ac7a47c9d73b3582e9124e332d2b66f0536392089214da011b16c157d4f2b50a684bc47fc0eb8c66d341b61895691ade4c8f0b0bce10595dc4e93a4c0ac9972fa57d455d57c851b377674 +MD = cb079b2d34ba2446d4303e68655935520a553cec12d1cbaa46621d84 + +Len = 23200 +Msg = 85fbfa0a269fbcf8f796d5f181d7b2bb417e4e76a8c2552c662788a9e8f4638d1fe8fd9f84293164597dfbf131bc24fdb286223a9a313ae60005e79cddac7f71cae4143c0b779835cd6d45c2ac803c8d78d06dda39d8b61870a14fb5a03565370d570589c4713c92dbce7d0cfa0942941bc6f6fd8d9f13ea3f62889c3b795d0871a9992db60064a40c08697924417e3921ce874c9f6f9785f4af59f8b55faf0c7d4298d1e90a5793e783d2af310f38a51452e66f762e8c1117f28b7217cea26ab98bca1c66785e86f5a87f56295ab7ff7bb9dc0d1ac638b53192e6b168b07f4badeaf7b73433c1a5bcdd3a17150c4470df6b31ce941de49ac9f7325eb0ec8ed6e2c8e6495b22c819c68bc99afc0c2720c7d0ad5ceb1dd7e867893720f86a1734df8e607be42cbb0a9b1bf586e642a836bb50185c27ad5bc693b0bda04712628c2ca22df5d63be19fc1f38683db960fdb4353397951b4b65cd6d48b85a5ccb707526e155e39368301c27d443be4f0a336e841d959701c31d3b75d6a781a805dcdd858e05e1604e9582620f7530838ad703182c0a48ccc1453bfb32221af169d0546ca559f748f5bcb73436676505675b0a77eb603aeaca703743e7b276b76bfd7252b3dc65bbe218233505a4ac232431fd09d831ddca4320c60663d3357880b6cfbe3607ed37982a6edae9b7769b55fe53748ee9c209cfc960b942fec7935c8ec535a866de5a8c75f2ac5f1a64ac5102961e5c125827c4ec8fc2e1afbdb63407fb2f7773b983439d471fd247f6f4ba013d8dec263092c70cabb9ec60785fbb94ba224fa91f5031d2e4abefba9df3055cc2399bafbbd94aac5d04afbb97de67c7baa49d91702febe943d703fcda25a787cca807098a69d44e1c49c81b9cd0ad13553ccda74c90d632fd37bb892c1b3504a55f9aee0cd2d85451dfa1fae7d51ffa12316c6505219532793472ea14322275f4d6e3a7b392db61a66ce9f4093a250e9a48f6455a308d7a3063c69a1308e43e33a46dd12f2861f87247fc71819e40a325e9f7e29c6c437cbb2c3303b90e1edfda2e95f4d011e08b5e17560de160176a7d8afda74c333bbc821424d176c026dd50fbf88d36ddfb9cb2418313a93e0dc6d9a2542dfa03fabc2db2386dccbd90b940830204d3eb079f276d004d2976984af2c6b7b1167cf4ee066cca432b64e0f6216a4ee627d7892525e059f512a84b59317e750b320caed4b4ca76fc33449c066bf83bbbb31214a12641fcb5d5419b941e203886dd11ad02b151aae344db268c98e354fff6292ea5b1086509e1e10d6e21526eae684a63fa7478f2b3009714db2082272d718b3b954eba2f6be8f51559e38b740c7405682e76c6dac5d716eb74ab7b2eceb5c6c01267cdc8562b0c57e9cd42050b70e12e0140b1cfa638c92f0b9224e84e235a508f84b9ac4348752980570c8e35ff5c2a356ad04ddeb63c33f26d15c0465ac4618f3e1457cdc1fe1ed009517c067fd4e11d4d98d1c9dfceaebb94d46321bc837773ec54675027d5bc3b6ca75b1762e9e73b7171f812061f03d9c1d72d6ad91606d037f03774daba6634f974a7c34919b1026ef22d21d9abb7df4c94abac20faa446798e64a65b0ac15f284feea4b2d2b324aeafed83bad35f3ecda34a5034bfb42949756b5f3945320c71af9c3600a371f4b8f1b5b23a445e6a9d79a5e174c3db1b204bb829f5f85cef7e0a4cf1e31a8205067e1237c86d2a05648e3aea81a56d7e8687c77101a2965aa5f65d52aa9647d81f9b9f7ef5cc66719b5775d5bbe30fd5f4a035defcd272e071da59f2f7a557e07cd09a0242d08841aa7be33da3fb16a3f32b7fbe37e677137a4cdf3d3ad626b0a6b3ae7c201803f82a620f8cda5c368afa8001b9537d076627c439abe49728bb15cb59272e116df79380573dbf94d3dd7354683acff4c84ae2b715c99566f272527e169dbd3b2ae26e7d56dad423632e060f1fcd1dfc3e4463bbd000cdd40878e542536a6e23cf2b23af8aeeb88688ff2b2694eacdd1bdf50349150bee4cdf3136bebbf7a139cf445b9d6fe3cd3ca9c34b21741e4043dbbf59c54125876feb3dcf59acd0070bafc05edd725482c44a1cfe8619d225911c05cfd6e0f8198bb0e127a9928df007e511d5d64eab89abee5ebdcb0290de67f38aede470fe254ec4edd805298c0cbd13db392e316342620b1ae176dae4eb2706912c847da23b179b964912ce54bda9906f012be7163d7524d4320fef48cc5ca9cb142d637ebb84a98d0348fd62734c0f5fb675bc3eeb53d01d07fcdc37028771ab2d45cefe26f473248f2e335fde12c52fd1824d47cc8c7157ebd40e3a2e25d283e0641cab1e059d1f55191c874eac7651dae7f6cb619d9d07461c11bc9fb66117d61ed90001366bbffdbff583556777584b0d65244af5c7bdbf3b7358d7c791b966cc809760e57398d1896ace72d26cc59a6904fcd92365edafb8af7986c7d90b2af3bfdbcdb1593c78fbe8e3378bbb0c519152bf9cb51c19a02a12a8fd35cb6f8b3ac337a828711d6c8e0c4c13e1e6af090cdae726193ec428f66961db9fdd691ff8474570994fbe24b6217388737420193209fdd5ce626fb2b4002e8274837a41c2c88fb7a269812a1ae4f415bee7f20aa76c8e5c531b9ed5d9737982425235a900a370fdc24318f512a3483c32b6b775e37ef30a35ceb3fadd4fed6b97ce0dbe588493b38750e81e3408da7c6d64c2b36cbdd66fe4e051aa35d1d4aed35b74ea20d85269503770fdf5724546dd76b67bb9a5a30def14ea5c89b5c9bc838f0db5000b479fbb5b461ced6bf33bf161051730d2e364c2c1009a3f68571526dd3ac76cb9edb73730ca0382727ebc47b8311e88a201f4fe7916dbdd75e7694bda8e69cd50bf50325c9f4a3b1242584ef0bd0a27af993f00a1bfa9ca4b150950eb6b44b86c36fb6b3318499dc7e890858f1b62846813c367ef4d7cac744a75d4a463c09468df091068d79a110fcbe57a07eea015480bf2929642ecfa6df24f557a0a6617d33209e0424fa44b5676d79adf795b80ebec7d1f4b52431ab4c6e641f0c1bd8937ba8e49640300833873d7769a7ded2db02fa37c72de37a3c522eb288d2c3f8f02e306ba5274378f324d758bad5eed9221600628b169331c3b80ce87c39c548fd145f3c17225a195b06e2248ac8ec554dc0825a26b65bdfa747af0de28a495020f4de5ed6799d75d4f407e3c0c901ccc3c928288256640b50c7c029a10e7999c29754d9c8743513c7b8ee9e442055c8ecf999d3863dd63d2600e645a30a7baa4cc66ab6d75b4a7b9a183e5dfe150fd030177e6319b5d8fe91b9ca67cfc9770b2447c8fcea750336b7dda026d6f0586df7ed7ee1250492d4f9bc149a0d929645b4e215b3e80b89cb84cfbb03b4f85725a941425491732d4ac6cf6be345acffdf6361fae3bb6504c26bb538fb80763583aedc71c4454ad1e560bb774c5f60dc61988a1e954acb9ba4d258be1622b2190c6e86b43928d1a52f2f47e1dc44f65254bd272ad17d8576f72381f65d82f42c4a5206b3bc2450d2af9c3d519bdab68b3f39fec59d3cdabe46c5f687d7888495c4c0261554200e7fed0d636e920ae7afaa74d898036f149b1620801b8d1da97d0221ac830a0554d572eb83e1c8bdd3e51dd67c4a0afe7934f19ce6578527ad0c8dde61a4e5b96afcc59f635145d9c05621c7b484bad152b25ea1f2e5c98fd669ec5d0d21ed25981b6e8fcc671247f72a3daf46ee1cd1e63ce6976a6d613e6dbda70878a12a31265bf62585cb36f0c088faf6fb2f37e47ffb0fe61796531bb92f474669cda5c65be3e4c85824b9bb6298df049bf014f3631764f6c109a90d04e8537eaa4d65ca80dcc0df0b1ba48f27847441eed8b9e7dbb76a302f6e6bfe9410531a01c87227dd6d13d46757fe5655714116bb9030a62f03abfa2b6c9fd5b3cecf8137e6d5c3babf630e3481cff73589cfe9ccbf811aa724aebd7bab4f7aa74a501b145095885ff93bf53a40205a0ff4a523e70eb2298b42fbe2e8d482d4b8ad5d505faeba5c134420f1403df8672bda4b2dd525cdbd22841bcf3a8f41cd301f7f88e2a7 +MD = 3ee462693eafcc83d2184ce623a5e50ba82fead8a041f08f4a7eb045 + +Len = 23992 +Msg = d0297207a89b6e5c0e73077464ddc680a1437edb4770dd4a95f54282fdcbceead83bbea359fbf8c6bf9ae3eccf1d7cf482eba700fbe6c2c1bbdb80f5181cf52deb6bedd48a1a826df671ee1c55509d68a215873fa3c0bc3a1b56402342831ab57282a8a2234235db19c1cd0bdcbc5064698bc69f2747f23e1c2d2a1561476608d34996160cb9399792522bc14dabbe713f140d296fc08d54262ae5d25eb100b0788560372dc7b529c7ecae4791630f168c7704e36376b405a1131a6222091035c701ad0e6eb6d11a2257fea48e2d6adcb87d52d7ecb090d8f5b170ce9497c01d2a8426a1b8ccb7f0095ac4e02e50f74a2bee9f0df0b549558bcc901d9ba236f208d573faf1538c36e6bfa8045816e0e84d92958b58ce0604c92c215721749a3bc9bd3b2103917b71204c5117f4c54a3e8730da5b0d43ef6e1898cc850d531581d404261cd4cfa92b1fca6821e9a65fd53f921685f65c2e1ae1d939ad4788cf4b9372def54e5441eb4b00942b21014734de7ef20ffa61e8908ab70fdab65aef216dce08b4586a693a0cb87e3b831e2ae3cdbd1503039948597dfaf71144139d8bcae24f5fd957499fcab8ce5cf7442f6b73172968f84d73fc206a985cd8fa031212745800bb640ba2edc92b9365bc7e533753d347c0c59401ddcf9bc25a56463dae4dce9ee5d9d4cbddb33deab5cf4023833bbda74549d1f11bf0a74cb3709195043557423ffecfa3023ead68cfc29d64be958f906e21525341966500c9900aa17df49bf3b11a21b1c53223159ce0bc9d4f2af00b239440afb9897ce885fdd9e9815144b92377f57d8c5646fa0270c656a0c2891e4cebc38eea91950ccf0127f57915f79c7d5b7190c073bf1eeab9e217182502d4d26f02763c76587290e21c4ecb085ea5a70fbd71ca51358a3d0439691f1a02329b6526f217ff6c24aee9df7be1f221db89db02a810b85144e199f3d31d6a314290185687e3f67a2a135e9904229be8470c0668befc70bb56c0c037de7add390b99cfbbbf0821298aa5897172f5cb5aef16da163af5401ac7c1c12d109f3bbf959fd17d21ee48224e4eb1904bc4491fdd909d35a462f217a0cbe3fef4f24c6ee98867c335fe350d7ef5201d1af6dee0196398ec85ad4c59e8c870d20fdcd8eb0e3ed9b5849eaf9120821c4164f35245a9751364643d1789a79faed0ebc6a6e10ca76f7d95377d563edcee24b3226df597b056c4c97a1a4ee638e6210f167ff6ecad7140f0326805dfeddeed8eedf699ebfba8353ccc1f51ac7b5fec03362bd2b53726291ef538460c9c33c57ebbb7d8ab3d53df469bec390150635a508c721e6f2cd75da6eab5c0ccd137d30af5765be1609de96e4f4bafed9f38937d821c822276cc071078a61c27743040ba01fcc9944bcf7c3d50015b795027be127ef0a5d7fc4d4de506d501256e6733164811cbcde630bf3a07d9e4ac4b780497eab73096a6a257acfe0818cfa524d5a7327c0993190adbedda9af38f78738c952d39ca655c124eedc708092c02af4df428072aeecca3f7de320b2f28bf607f94af3e1c4e06e65a31c99d7b446d4fc4859078d7e6e7453c9678f641810986041ad88ece588c67a2fe6c8e1620cf4d62e3d398b7845236d29c1221d0a23c2e44b110f0878bd6da4fdf18a583c70ef14e955a2f73cff6bee0786a54859142a066e0bf2eeff0cd8a885935a86a411483b1238c05b2d0b9278eb3e6590858012493304d0eaf8e57be76f62b607297c74bb216d0e11d8d84b706d4f0f700ff6302f32722596f6e5dbd413d629544d011917af5908d5b1040b86d63eff5158c4f81ad4fa6d6d696c8d010b6430f88f4d99c304833cf1561d370eee84b1cf009aceaea30424f8d107e3f0bea3495e50c07b5fd982170f3862728aeec6b34397d6485d1505c8a3ce469525c609ef1031f8224096bc1389c892227d8f7b90597f15e9a8b395e518a18705128a0eae98b3534317b4c7deeb971aeb7928f9c56b36c82713f73ae6a1fb67a839a337e46255604247cc0bc5cf147b21e043e7cf035f6b8521684b69da4c57131d7a0c4cf788bda443351e748ed1215a5588bc29cc497e88438f6dcb4c14e3ca30a6f224e2ddb9edac986647b55dac194b3fed4200858fa50cc518a751d58c32159290289eb4f382e65e79cbdd0a89d333f201b44ab40d6fefa1b27aa61ebeef3ec55cb4a5bee918830fdf7d5068391c92478ffd2525865d6ecde1b19340fa560ec7be55725c08f30524fde8da07385a08a8fe990a7a78d1fc721cd8b3fcdd0b18124b878f0cd1b6df266b7ab468061fe98eb3f4852353723b66da7c72a2c572fd2d7ac77641e1e8938c8ebf89fb30d2c76166ac0fb0a4c28df4910979c35221f081c291b2aba7eca4dffe33c541372724d98d3c1492fb2776a3d70c13def19cc4a7b972beaa925795993063f0ca8761745f7e112e4ab535880d1300eb662257dc17d5e704bf4f9dd830abbc8707b026585bdfb7d75861512498eb646af962c7995a9e6b2f6a2e440f4ee6ca12893ffa236718bc8a4c8e2efecfb6b31cf941709ed8797b893bbcde8d4c68090dbf953177f9cf8bc187aa13591a1b796bf63cf75f1a0da4cc9489b1e4a1b5f5e31b3e80c89c5aa217aa43a2d6206033f270b3b05cb7b1534404f382a7e7471d3d4cba4c97b7409bf714c941f84b4b5f2ad954201a0a1b239a1db8b5499591db6694871957e327d5da67c995322333778fc08ceb09b98172394f17ce4c352ced19b3336baba856ec5c03b30106209ef99ba6cc65be1eaaebac09bf32123e8e9ea0f93db7e56f844bd689241a06cc0471c90c9114a9d1eddc6cee0d855e2a2d7ca7070472a7b10670e4687b54969e0a5cb252899c5f5bd0e0e65c913c62709003964d3640550573f800125725481ef736c22904514114ea85b2e5c8dbc1ba3ccfe93c31959fe5435da42716109db7718c82e0afd7e1a591375d1a32c81e6fba4e3a7484e6cac8fafe6b0756aafa0fffca7f29da94c3867b624f5a6d95caf96eeae456aeb888391166af438768ff71087d1155132c792fffb30426c7d949efe13281732d9f3abe1d32fb5c26bf20931210d402e7e3451a9496062fdfe72ddba7c19c5a7fef54b074cfd9c1c331efeea32241b3d76de9ced097dfa61463e91529049f7d143d88b8ceb9b514db45cfdc322df4d85020c9c54a14fb5a03b40e54eb67f54b990e294f717d37b5dd8f32e4559047f0e0b0579657a9e38c3c7bfff3758858466ce5d8ed0376bc255852dbaf7405b58e177125aa9fc322ed2d1050795dd2130e0e38fa1a0b52cd03ca550c9613dae8105307b67a68fd33dd3405826eead1c0030b9c1f3edf8de4a1a1fa5820cb9c3a1821c88cae69c480dd0fe0183cc303d9b5d373aaf426849dbf7db740e7f1d6361612581a8f1895a47d0f24748b6ce4eaa6f4444fb246d3429dcc1059542cf5669a932ad2c4dc0d193dc04749a35ef15d46fca25ff1d6f69dcd0b99f3ede396460622a557b84a77598fb1ccfa3d0fb5cc264b026e5b4d6ae9ddcab8b31dac155ef95f7c1c01ea80dff35229f8b0f5ae91b56de8fd2720acc14077f1297bed1f0bd49803921a12a636f92fe2d7a7a7484884e3ba8f0dd738be8591d7a9813d0fe7386ad05c697953d911b99c1979ab1f7b152b1b8677f7ab2c1da6d0b5b602647b854666cd88750640dd7d9a20af67a093d6d27095fe0850b4993580f092d3a9335bc93b77ffac5a08acfa71afc163581d5a486e1ff86fe5c258bc4ccc90376aa91c51c2fe2775bb8b009ec6f95834c282001b4896ffb4b6e00ca9b8bc46841547578e9192a867a76298f8eeafcc425c6c78b9a49d8c7d6098059c39421e7035889dbe3c07eaf8aa09a6977d35a612a23714a2068627005f44d3f262f0905257f74f9f06b077bf3ffae9d8d72d6e3c106c7472f30348042f91084aaa4a44c0d91dfd7f961ed711e5b0b35ba0e99d154387089ade7777ff4de7131393a19432456717fe7eb571a717c5938e4f1cab34a82151884d652f3826c174dba3b9172d295d3f8a0516dfc552941aff56192120baa5efd9a45ee66566babe014ed33628018ac4a0edb59a1332c6aa1d4a71974ff78f23fd97c725fd7a3d4f33199289a94a5a57e18d14091714b7e16690b86648eb67ae627c207676ddc3b8cf88697a27805669aa57a4d52794f22179cd40167202a9dfb6e61d50580dd88b651fea903920096a99f1fa5 +MD = f15360f9f581fecdcefbfc80e75583934286f7db36095d118382a572 + +Len = 24784 +Msg = 226e5ec0f579f70f049ae68bea162dca3b3bafa8b0f48081849c5fa31d108102ef08912e9ea7f4836250519fb0bc511a1749a37168954442194cfdbfeb3e2d5dcbb5c8ccf605a02c6164e37e58fce558653f20dd737b7aed33aec699bf9b8cda7e1d0d8247bc8272c97ea50e2aff72eeeec42fd61bcdaae99a69c219e14f28e2cfe96738d7f322be61459d386ded80437a81d744a6b45c9e1626f928988189de87c1dfd6f0d30976f262d5e56bee95bfd11e200d5d5719746f8d74ac2e5935346e4c7b44d884be04447c55fb6a283bcaba42121a88df68d36c453a8ee900b64e4c33456ad72dc9ce1f3c2364b3c6f9ccfe95b6536f73d223d7f753b7129e9492e91d453137f6b33e4b4a49068eee572d65c113a0593cdecc764ac80ef05a556a0db3827f3e0803ba8f4dcfcb42c9de55b76b31ea9061143612e7a07acd5d833d7f9d043e368b41acb5eebb99197e15adbc3d19175a0bfcc97275e3e5efcfa5720882d35465a6f67b83d4175a5935859b3cdfd21100621fee609d99369fd74473700bf8ab1482a98fc2a7ebf54b18b488fef964bec98d040ba207cb55259de7a77fdf7a298a47e25039113d52374c2cddcb32d808ffb5338a015a8129c94a1676fca761b8111c2926b2b8175965fc75006b3235d6e80135d1453fc19cd3065a48b10ab53fef290779f34480f21c4e155ba6a2830fce9a914a365d95958af8398564b17fa56d9703b1c65e8105a66a9654442acb9df7a7cf5b9b5d04fd38493d95de43c7d4d38ea636f1ae207a497980550c711467ac51786e3ee616ba2320eee1e76993b3693576703cdb67394ea359c5c720665534c013eae5a1d4b593a6d3cf47cbed2a76b5fdc8718e5e2afd0fab0c3ddec94fd91b2837593545d6d20374c8c510dc214436c3a4566e0c369de6fd923654463de18b3fbd624b7206275e59352ae0698019df4f6db5247943784fd8be7a2ae4079537e1e3c78b612bd9df0b7c3ee59a2f3ed8298c5457ad3ad473c3fad007ac963d489513529c1c2e31b01107c9c47917fb4ad967fbb0b104fa7a46ae0293a4d021e5e4b5c927abf877f6f33c93280e1e975de76874d68c87328be940d677d69e8837552ff5d31470f3dc3a8563b7602d5c38dcf6867346adc3ce3519155b4ae9bc6570ea9e49617dec876d490319772d90044078f82ce85df76cb1a187e607970398bd4e8c319a09ac2214ef39f75b047ce8995893ab787f148de640f3c11591a6f8c5c48632c5fb79d3b7e1cef9159c680d71fd1f9801fa63585a5f22947cc0ecac0fb256f4ec3b9cc2df868ac6abdb9c9a4fcf649a88b82cf69764dd06440b1fdd2381c22016b05d191346340728ab5fb8bc36295a17a0b78f25b9eabf765985b28a9a935e4c4403fddc89966391f3fb8f3f9a3880b59a4b4a8ac411681a946854cb63905595ded898c1b77683f09bb646606357b36b8e314f50ef1ca936a30eea6e4683aef96622124a389d0e4c8ad906a7f94f9b4064b2c7fea1d129d46ec09dfcaa321080c52a93ff75d3adaeaaabf69dc5e7e13c0414da1d41fa91fbddc595fcf7672433e1384269d4df081de2763fc92de92d67579faf34395d88b4d867f9f694e89219a393470fbe8bc6a11a8008b39a1b26ca439d6fcbf0c3b70647ecf172eb7d013af385cb799c9d90423a137ae47547756cb154416bcef3c5f9129da7f963f0199fba54f630d4de0d092b75bde32433c2558a0d4e9a3bb75b9521c240126408834fde49efbbd016e6fdd3eef83811a8b48eb410bde39fd521e35ca3e746568ce75249acdfa2f60dc2271bc8536ca26df31e19a5b7cb6216beeaac87c21ca245ecb1e1c5ed6eb08a4a8deb49f706414c280da01464dcec42dbb2f7b8f91caefb3b7390db42a6655726392cbb0c8e550bfb6430a4eb9da6211f44277cb5cee3757ca03d3805d27c3afd33c464b98d4673132ab39f7596f67a33a7221c1ebba97d5641d0225f7b5ffc77819d8d278a7b4c1967104b29504517bee3d2df5b6a69d9715d30e2782875653d2d9e7d7e0d5e5eb4232ff13052fcbe69011d0f9563895276fc47c07761263cf73fae7ee59e56708d67f8d8b1248138dc08edf2f32f73b00d26fc0384aeda4b4dbdb7d684c6cb4c4b3a534ad54f3e4dbe0029d29e558dbbdde437f5c998f958e5b1a0ce840c25b897a5288dc45a99c4b8f2b9f5bd5d413b8f3de0dc6ba6eb2c6a2251ae0df9cd7d19af5feaa5cdfc6771e585a479d0f6f7ca3ae0019561198f8219b1be461429637860e0a9a031cefc92e17426fa3513b837e21dac6d4fe948d59daa4658e5a2315dc09312df0d774cc2ee70c5671402467e3d80251bfac4210cb6238d6bf4a1b16fd8606d87e95f1faa1561c7e8f62a694653f1b3c8ea13e0cf6c05dca5ca8ca957af3001c34dee3df15d2d75a761f3e9372d599f9ca53c4ec5c8367b31eecce2bc4de917b9c28c6d40cfbd17c9e0c58dfad29e32beb5a93397d19fb235e8ca2447bb75f791cfa1783f71f9f579f8081e374aaab157a2c057ed9028c9da41ed36a000bae974fd9527954dc956dd332465959e63678ef2eb816d0bba0747809ce26e24a2358ad3d040eb6b16841d188227bdd5b39b8c2f917bc24c3bb5a52d41ee59301422fad9ba8be8d1c6c5622f882f57f7819478e0190b925b951b1bd043230b2bf7f9ed97bbd23589c362d4019f440a0db49b7b8eedfa863eae81d2f20a49291d35038a963cdb799bf3a39a152f2d7e1d36f8bdc0740f45ff702ff11afe285e0fb585fa5da36f5d0d40cfddf3a1b35c32eef365fe161478a6c16ca1d187874f075fca64745a5689e99130c4245b9e4c51c4d49cd13bcfc6398b820a9e0d30a7101b19f164c758a437cd0c782fc7b6f584a0e289bf4b0ad8c2b5b75309f8e90c2fd1b9c8b4543d56fddeac209c4cc200d26a665552ae8b55482754a59ab07b276e69f313ec68cc4945ab58e5f4518c14440aa82712cd1be6d4c9a027da9dae9fd4cb0ff7956ace22161c57efbe40dadae069f028860e81336d83e5025027491c69e0559e36c40c8c7919f365828075fab06d867f36da87e31b3d695d85b71648368e0c3057dd4b2d748a726fc979251bbcffb156aa9af39ee6df7661ffb3dbc842be7ed4801d56ad12571d371993b1e50a08bbd26bb48e0ed7515235488561479659f1b33aecf4b558693ce2fd36e302a56eea1d009220d9f57b4503e893706b3845aef50cb2eced50a6179bfaca8117921b875ff19a71a7494599f06547d0dc326cfdc17fd707fc01f7f5889ab754cfdaf5d9bfc7364821d9989426490848438cb4253f1ac30d8b734420d1646524cf86e62a6609cd6eeeaf5a80cd1b3da1484c07709965dfc641af76de9fe03db9c29ed5c07c3fc6acb7d375a30c6450a3927c4c24f4e891f9c7bc73781a97a5da4e28a9e528f18bc8244bcf460caba816ca236b8a7b2c4270c4a22536691006511b2e4cde92a8838adc2152b0f578adc2974a4bea53b85bf1e16a735fb5d3c9e4d2b7a5f6e3eb16bc885de52bee54c76fa2f8d68ca7144245c61b443d2569545c1bcc9c744343ac24cf056ffd1fc55ee49335f3b79dc961341abd8216e25911809d74199fd937ad8c5a23da6fb155daea11098ab55d5e1f8585591433132b661a01b704c1ce4f81bad1be0dc9cc8ca349c47d84cc105be302b1f5e2dce168bdf0ee9d452049139176dadff05397f121c95598c745de491771439cd45874977dcc0d2fc504730c438a208d6b553b0cbd316c633c68eeae229be653d2f1f3400e7406746ab774c100bc49d06616e065dd4bb0e4cb7c69156c484024c4ed86ecd8b080741d8073ba31d6feb0c9dfac85ebddca255dcb76035d3ff91692955721434a2438c7a698803c9ee6367cf8caf34db0612ed89b3e025d4aba3124318b6ab70899c74e720d9a8bddaa6967a960376d8c1e052635e999d42f2b7e62094d4c9cb4872a9c2cf790845af152733a97dab139a9b42de19e512ab7f3043564c3515a149867971c81eb91df64f786f29663837ea943d7e685b0c7aabacc838c150059f172882989d0321932ab62891a865a4a24c7b80a8ec74013d02adc36c76ce10112bd9439bd0fed841c6d9b65fa8e476df4aa1db01f8c8977f1e93e345ef07dbb412294aefe64a5396552a800dad7b356b3fa79b0e2fb1259d49ffa6799c85bed44488f7295f7e0a2d50493440288266c2c61d5f21f3d632242f516b5bf1d0401e4d98d6ccaf1292634286418b9ca26172685385e1e79043b03929c081a16fe5de97a9784e47a052d4969216349c53dbf680eaadc26d87e0adf209347f0dcd36b1bd5b3a22db9fe1fdd6cd40ff8a0f2ccbba53454808257f99e44045a8a960a914292 +MD = e3a085a93a2899604ef83cbe878454c40a8c0491fcdda844e0d062a9 + +Len = 25576 +Msg = 215468519871cc39e8a7f4a151c8bd03363b402020f2fb98069b2cb8cc1b7e930938e7540d95d1d223e47865135793f9eb573660ff79f7ed2fae503e68ba44596ee745fbd8fa562c5c666d174cc01b1961736e18b8b517161ab9c8058026e0ddd6c94aed0086a26e1b959a5e05eb9d8c1ff5b2ef518ca23b4f265db61b499a48cc46bed28d23ffc1e8d9c9e345c06079ad47c88dd4e8e286575bd7f9420ab9c2d5c6685488b8b34d4c9ac04e1427ae0994cf789b48b01d1db9c2fe75fc5187727bb11119f82d0739ce4048467a08cd635bf78cc1b6cc9c28fdc199d351064a81456f81c9e56a43aef7332973804b06b18a26caa62523a7d0acc272ba49124b17bb68800d5756afd34ddb2b7e2dd8a118aac3fcf39d9f853c4d2c4fd3ed5bd25a6604d68d57db93d15aa1160f8a97e6c24238e84f272780966867f9c644ca2775cdac4af0ece036cfa6ebb1cd9d701dd7daec5763c9a4de0385db383a5647918e79c6a6de1f4ee1f6b722c561704c8d7efa4710d78dfce8ad2df0d3d82cbb59cef0bcb001f70bdc6e17af1a720b117fe02bb1dd527b18e6bce70e9447cd0cc85cbcf431fe7c006f5e4ef878a974a93b25f492847c9ae020583c9d412f4124246164d8f080b615e2eee267a7aeb5fa0974de52cefef23cdda7b305a33a91e9b50471ceb72dae337c485d636e28d6ee31f5705983808b1567d4d4ae820ec445c56e6a404cad6b408691475397c0dd6cfad232106ba96e5104052700a653e21f9ac6d79578a9f52548f426a1e81dd45bae30acdd4d22a2dafd633564d6b2f45e7d35413503c955cb0a9784b42ae8c2a5933a6729f3922f969a158540dcd201ecb6e32f88b5b4921914a2e8f424c8b031f115ea5d23a21e6f22439ffd7e5d11b08df729f65613b4f6ad3edbc9a066a5e712ecbddfa6fa764cdf170c0485f82d924a99b7e7ad8dc44c1f93e49b6469a9af3de5691944413f1417b753bcb84d5b7a34f362c383cbc802b0c88bd23a7ac471b9287571c42081b1134bfc8ce104a550942ab1f2a074cb00a90558d6e841ff15cfde6951f03e450a1bfc90dec6c513fcb2692ddccc31d22e5274d41036656183c72fce208e44920776f196193137ac67d6d65ce9cfaae774f23a86e6ee8ff3a4e9422a4667d971906e5496a4e80278774899c882708611bad282f6c1d666bc5e7c40082b43a6e98d494a18e9b3cf7f154fdbf90d786e59e83b72ad0ab893c49aca50ed37ea5202e650fda54f5c46ca2a35c476f4b009c5e6733232275abd1341199b63d22386c484cb95c43ea90e609c407bc79ddd00609cc2eb0d82848db239b249f164b7ea384d0239fe1e64d04955b9297472cafa2ff272c5c78100aaa86cdd8120556f25652a3c12da5853338e3be8f505d93ea03cd1cae7e78e95befdc0e26b760d11e05403c348e0523fe036381408033c009a8e1f117af5100a6eb91f08307df465c20bc1dd029875ef7e49338689f602d98f2dc690a57a6f2864e57098f8bd723574944ad3688b292db6d01387a16493912722ac8f91fd12b748899bdaeabdf0479df788eda440d7bf30d1c25d78d757f00b74bb556506637fc1ab87162f05d464e63a6272db3fe56e9357275035d6b6bee32bd92c4a1dc94778551e94ee1d8854f767bfac3811bd0287672aaa01ea18c25650f05a68cbacd9158e479b508e72df778589e1e03dc543b60bb3b10399e5c50de9e728e69774fb3f5fea757ddefccd0f9da75afe4b67f9c54aaaaf646e858fb001a6deed0a8a769ecef0689c988de566b6015fb8c40aeb5f2df7ea4bee60e8e69d15c4a4aa5411dbe63fbdd6418cf025d87f37362f15e22aba83abe1a3de9857c71c2234023b969eacc0bc526363b7f30b092ca114f2a6cefb34394d146866ac86a33fc497a8cb8e2a5bac398579ff7958878421fb08fff4f8f3deb8c9641b8de392647df3017a5467f9d7b23036935ec6e188dd6dbfb544b8a9e04a4b3c7fa1e4d1d9879daf69986b8083e6eb023a4b5eff80fef17f8f65433c882a21565a919448e6091d1b61013fdaf9fc3e45bbe827c9b4ab10b05600a1961e81d31c7404f8e0d32bfcac2937eaed811db167dfdc29286b0d51bad2bcdb9dea76eaf495a31a7fe717c1c98be374a36271cdd06ed06c02ef4c3c06cb42f73b3332ed488416010e6bf2f4dc4dade6e2e61f19e9306bf941868f59fa0939005743dd647f0a04b576a7e71d4c383c479453501e18ec56d7cb79fe31ff534afbd8609ed701ef163f9de31bc58114399fa0f22b62c66c380e8a10c34b7e731df2a8d39dcf36fbf3a66d67b973e3a94bf6ee0bd96f5c76baa76492032fdd2f59ecaee403d486f543f2cd7ae7b0dabe1b5566e681cd40d384a94349e9668650a6f2d2daf86c59a7b02ba466cd03ce1d50c3f0ca4c02dc4b3d1c0e7b9a77df9eae0bfcffa32117d7e05adc7195f4278c93497401629897a58d08ad7141ea52e0163f14992d7a284e7b875ce4640b4dd48ceedad1ea17d8ab1e760773044845e0899602f1bdfff4d42ab80c0765d1a8bde2ba0a830c050923956d06c80b182264ad19ae4f7c39e43195f7d421bdcda00e3eb5ec5ef2ec91d69df691ba7fe250352acf01fa92af5e2c634b9c7c97889e9147e869acc153d88cdc18908f882f371ba9c1e13c26e9cb8e3cbd4c5e1988080ca65a67b3a4c3460cfadbec904d853fddd2f5375b6070941fca53cc106b5748480213cfbdc1c34320a0478b05f76fd0454c75eca069cb1fa7b21704dab67dc40d041c8a1040db378e76655636ad725219c049e6536982d6ee9f11dd032280e622547c7ff44a938a1f233c356a98182d22d5770fbc871e20bb37483dd5d6ea1551993b95b30774a49b50d411ebe0e8c92834094e23ec2664d822c40e96fb42b8607b62b6949e05edcaa436d0ffac6a8ff384068acfc0220c0b098d368fb8113918a4f8c9de37cece74c8695cef2427e54a6e77ad092a9b7f1d94ac9f0836deff41b905b5dafc58ad6063759b0372a634f69a639e19521825d66a282f489c3172a3659264d0132af3571e637782bb6fe5c0afd24547612166fd3409d0991392fa054ea5bd07a4cd0921a13ad7b62a0b5e6d56cd8adb7f3eaa5c99576941c38aff311c49a8c9d8c755869302a2e5e40109c8365a551cd3f859b9421be189d3a0e9ed78830d5cd6a2414e9cc4c25814d94d98f8848e5386d6dbddd65d22b96c5d20020a5dd409c7e5344065871e57e01c91a443501dc8bf619890fe231319b5480c3879dee618d319962596539e2970513fb5c0c8eac3a71ff99962779cf1d7e916566d0e29d121c5cec5d7302a18ed00be9316f3de8c669a64c2a960a588f9c8a42690f6867cda7146e8ce27aa6a7fb27606eed9df6a235a42d17ce71627446e206e879de56025a66556263f06684dedcfd6f083d6a707e5fc8f8212d716e062f0f7fd0c2fc62bea93d68581265a803c31cac3f8ac8939c5f8c464ebd19df42c7e8998494af614c8383294f3f3883f2404ac10404759e182a038c97aea04a85530ec005e203807c5bc30fa9f5339b32fb0427e64915e29a25bb25ac60b92256470e7de5298d42c6b88995f8d2fb704e49d55b66b71e237af90fcbfd71d9093e1a543da2e9911ac4102346dc4704859cb33ac5f5dce2b3331a9dc9fb506461a5436c89bf90d39afcf93cbca4cfc35da6ddb112243928246ae0d1ba269b0fce0468d3ecabbdb925c9ea3241e2dbdc6b151fb4aa724a42f98b0248171fa01fa103f116d0e7deb65dc359b09126f9a420300fd209508ec7a50be56d5b470e387d0c52a1d104625f9571ce1404d1b7af3fb00475b95f752ab96610be112d33ded48624015781e7198f4dcdf917839471fbedb43c34efabe09941fab6b342cf672a29dbb1eed0db788dbfcfcc63bcfe80f7718571f691818dd6f839e3cc282f85f03fe0400171cdf1235049fa53de7450b4c40ed398d5a486f52124c1c63de2afc950e81839f52d17e2a7d32f82788465a65da6cd763c6360763561ed2bf47749080549b6e2db87514e1ee1c85a0bbd346eb6e3cc29267cbedcad67a287fc5be65ec59ba8b6854b31c83dfc5155187d4150685c5c2c342ed68b01ac9e44b60f0c100a347a0f93074dd37d8956fe2f43110dda66e9f9e6185c23dab74cfca21f3ede4bca87687549ea02662f45dfa0ad27f9959a120cacb7c419810e1b1a50fad31c12c47d5bbc61bad77044aa541d29faa6126c60ef088b82eead17a52843307d4bf798b853d90d14c5347ff10615381d85e964331b7a123d15a77a6790d93e920052ddb4db4baaac5e2b27b66ff955e53b8308151c81da4711189ccf0eb393c5bbccfa1f6c94a8d5f4bcd266fc6a12061967ce836ca042257368f567dc42de6ce0be84449234a6163b72069f25b7ead4b2003e1a7665e87ccf211abe94175d1c11bff2c0b6bc110194d34aab96934ef59804cd26e4434ba166d9833fb091be37b139cc10748b881c93690528a96ccccd2dbe024510b8d +MD = 9dfeebfd00d3fdacf321d29156ba23310e448962855d8b93edc59877 + +Len = 26368 +Msg = 3b8aca75662ac7298557e03b7a3c26c5026e6aa88e73ae2d4e81d9ec8e87afed4572ff0eeba91ea48cd995651bf817860884b620140c56d865f261bfd56fbc7790d7fa98de1fd0513d9cc953b30d3bea62dc7a6d5da14bd9bae89cb9e9347249444422dae694c478c127e5cbeb847c3b39ff1f570f39777876eaf2a16fdeb7aa883edf9eac11e2613f024f966b64c1bfb4730ea6d3ddc1fdc181cb41127675e4844f99aad89d1254e0b6717cdab5f1c0fcc2ae22509411afc2338f5f7803933d61feb8c711413c98cccab244e080f684387366932f664fd7a28ba6c4498df9fe47d3a4bdff0448762ac679b826ccb754910fa0c0175b63bd880e78382e1d8f6e5d57c6544bee1e362233309e54a11c772f1dc372b17c36a99d466d83ceb93dd7cc1184549d07a720de983ebf12070d3739253771a5d0aee309baee6cd36ceb7fbb8a47849c58c97b837d0be3060772dad8b063859a5fb4b2f3f261bce23b81af534878adf1e86d913c6affd1dba833a93345b176383231608377303ba630e7afbcd57d9744bf7ca82fe8825337f339ec736c880b28500b33e3d0c1b1c45205c71db9c00a3ce6dc09847efc2fc3ee6aebbfad500d12c12c7438857ee6e7a9c33f9e7aa7ce816477fc64b5d52e26a3afed409172459d8e7a6aad1fcea2b53e0a5e69a29caabc4133c8f7147518081af13c1d9f547872bedf5f672518acd618c06ea3b906689586fab7642344b5135a161e7f605f7139594299911fc6cdf33fcfb577454dceb33ab30fd46aabcded6b07dc8e5afbf799688a6151953fcdb4bc1d7c0bd0d8a5bf6546196e7210273e55adbd711791d13af2a1ffcf10eb74c096940a87e111b4600f9a1d5bc2dc8caf20ef0b511f87c8c5ff6ebb35183289c0d51ba914015fc53f419963c2e278c4e7d5b40c55f847a4e298d9dda8337cd65b82999fdab62a9e03032a32cc5b4a978f7ce60aa62c372d38c3caac52eb31213aa4f835008bdb08555b35d4a0b4bccd4f1b6c4b6b43c12a708a29715bc7b93304431fb3ae05d8cbdd53a38f6875352dcebc2e18cdc34c6531f5de75eb4f7cd46267f6610eae8aaf42f25aac49271d80b56614b8f4363fa4240bd2fd280ce3cbfc196586450d597c2d4043726d51db8eab220675072304b0f1d4eb543d8554e27960546c7eaaaef94546462bfc7bd91f59f7ec952f1302513f5812c1504238df8245ab59df0eefef330b4c1d1d2d7efb67edae61938da14eb6a0308b8accf88bbecf529690c086279e973b92f9f032e97c0c34215c194971ffb32bfb12aafaaed606316bba48d9662ff3fdd0b84b5db3405d661db13f6280c299ed591164a81071f2311f852f52778e26781f81c7671f5de72d9cbb885444a65b5cedae836978389c38fc18fc5721623896c97ceab9f678b26fe8a17b8885540062fe128ea4b0d20b2f489c37522b53323d15d33fb9ff3cc716478ca1640b7490e6d5640dc37ee947ff4c3869aa5e0b1b574aab4bd0044e2d0802a480519dad14cfbbcd892dab22598e501519c7822ffbcbb12f9866cb59ec2f6010a2b805a79207f675894aff2748c69c5acf115f6adb819284ade41e030d71abf98fff090b1575ce83958241a01c8e773013f0bc61c26135d512b0c3f497b82986cd907281a2018d1f353d3b34decd2bbf6ecc62bfb853e148503482d592eb24e0e6d107b043937973f2e3b38c956dfe2e670d1a2ac53fdf05eed7254e07f2e22e622c9241ff13dca453dc7250495539a6871baa4af20d783574007206fdb5ac99c708d9dbdf69fcdde1904027026d234e545edac946a5f1006a1933a67c1bc9499fcca627e97e22442268e4b9c99d064f583f744ccaef958d59892ed58c0e836571e2bfcd27389501a0ca28afa5cd28d01b243e7e84d4ab05c9b82c3c36762016c6b1ec74a1809f3de31fd2b19fe5d3fa247602047e3a7a8f400ef4838139e98325a1f7c45e3f862071d0ab66becd4df5fb9e8689c00b4b5448f35051764026d5161aa667665b93d1d4437b770a6edee8280293b3502d667c68cf064e1b731f332184c302c1be0e7994e20a8b8baed0fb330cf02a388a132e290adf237aba1bc6cf471440784e3f3f37141f4b4a766958a523679780089a92110ca3789bfe64b5a7cb62c691f56d4c4740845f4eaff32406aebea22e9142d1aa3d1af4842540293279743f1799e2c74cd0ff6e9f3fb48adc17bef24c0c55137c060b403f19f84af6b714510f24e4d9cc2b59204610f5b0b1c52f30e160197f0dcd4004d4c0d33f7dee08a4837dbcaa51b95a1f4a08fdbe0c20d903f677d73ee8fb7fe749041b314f8719e17a8cb26162e2c910b31116dd769083149238d67792f99191a8cc1647f2e80fb0fd390d27880e6f9e8a128635767df70bbd8b6053942e3eabf9ff0eaaf07bb2b8136c172349a5156fd6f296ed944ffb8f7f58bbfa77014ddd42874981d1a7caa2c40d167e300f812b9f9b8e2d586e5848e1873093c3dc88ce8d4b10f51bd31e151804535fc2b47c7bedf4b61f4b43d6dfea010747fe26b527e133aa2e586977ba183916ef89fdcd07c9e555e8f4343cfca3ac883db2469d8f472761530fd09d39cb95a7550c503e763a56b5b3dbaa54461271fb9e66a608afc50f7b8dc97058393afe4dbad3169570492f1ca6890ee4664139a791a3adbe2f66d341030db170626b5d514667b89b9ffd58d3e985c6b50338ead53ff0c386b62f5cfbde63fbac5e689bfb204f9c18a85eba22a5573c8fc6fe6dcdcfd55029ec2a90f14553b6d5d2399e9371132cd436743b500288d639579aabd76adabc707a5e586a61664ab369e45061603ccf96ef48c4a7279ffe7d5d178b3b3888702008d39db059231f0ec97398ad1651ec277be13e6d3d241b21817af4406066d2043d92450956139dae9aed5dbebbdaed5083478feb6ba094ee6acdd02f0bfd4be3c2a239be80bc2d5b855b89dd765f39d7af83a169da9ad3acc018065060d344843e0b6216fea835dc31c403526f693884a69c5a2fb19a3f232d617eeb887223b05ad6a75bf95f1ffa4830b365cf7f5221119aa4841928401a57b22048aa62512fbe0aefd39867517d6fa8815ebe2aef74978666b23acd3e5be612d4afef2937c911af24c8044a352d5032558463f17747e16788ff3b10a1ac838a82677f513c46fcce2d80649031d193d91720e75c52609645f1b4457ad2d6d62012b98162c76d266df244e1bfaf33e0a2af7a71f3e8875f288b187f9237a186de6ced1de2420738975b5ba3611619dd9705da2a3fa286e4193d7512e039d43ccc784b7d5b14dcd951500fd1fdce4c35bf02883ac7e624cc1fef1125ec40399ff11f1ac654a5b4b2a5b9a6941c3f948e228ccbc8131d28c0438936e13fb596585547a423565d576a9a7e691345d1b891c98cedfcacb05b678cf42a6e60feb40e00d92fbae8a48daa3887a07700ec82e5bbeb34ff1905856a021635f3d7855b6afbbe04b392e21d1a88bc93e7d5f8b832008fe9f9e2866e70add8a1982db152134ddc6b37dc7fd0619106898c4d5d2322a1625311909add229622b487e9e963b2fe1dab6e4fe36e285c4bcc8def838b5ba54bbc70aaa89b28c4ddb8e5939754ef17680e7f7276bf16ef75a21344d2b88514316a3eb81a71293feff3ddb322ee719ea4da92cda18ad4546a5446d3b37149f7fea6a2435724cd1042ae94d2f2f9e19ebb58d1e9ca99099314294d248c7f4f5599b8c4d2c77fbd3ebd3035776f3de61c94d0624d5bb25eb2596b51bfc6ab3e36eae8cdedd249a1d147c3e62b01822922178a6d81ba9e7bbb2360792dcabbbea2d97ee51ce04920d2caadcf75108f52b72ccd1b0e512507b55952eef5ff7779a24ec133e85948e3482d371add042d08e4bbe3937b860eaba9e387d79fcca9143d31fae0d8a50e923b58a9eceb4524f3b0ac12fe50c3230e9ea9485db39b173a7c6a7213752c63d4b3324b70283b3cbc23e7a384166f2ad99c92dca8bad38a9165e16ef545570f51b9a564cb1b4e3c0b4555de4c54f1ecb3ac888ddf3cdbcac1037f39aed28cd9b254993e284de7ee871fdc0a7f92b33145d473a12bbf1d9f735b2a1a65a4348b9f8df41fad446c18d9b8657044591cc0361e3961b3cd00d14f77cb584341b8ebbf6b9f50828a4783a918d959c42f94632f92c315a0edec27fc5e4b3c6f337ec2bbf68219d0a7def79e481e0b279f83e0d837f90519a8496b2318900e1102f0d73a3685c1bf219b3c604f1ecf942e5100d815c378478480636bae8416533475f4e53491927682e5199835bfec3366678bd8340ab8510bf7d87d270e9b5b5374df64f78cd21e512357ee03ebac2dce2b497f9db40b60c51791008b15e751e757615e8760cade17bfbe09c08955aaee06027657abba9c3948589de283405e7685427cedf3c2df5b201692748130d14f617d646ad50c2ceff3f3fc353fefaa8a664a65302f0248a5ae273027bb85cb78a283f2df1c4b396f7e2bc48b313b5caa6241c158fad1427ed1b98ce21e9cc0f133dcc8bd67bdea4253c89ded416e9c5fe1ee3a6e3e79f56cf1934dac94bcd7437a508d0c9dac68efd892316257cf942f4b1a7678e24088f9767e1c8e052e38f5e1a7e9d4a85edafe775125f25ba569a5088d1d81ce6f +MD = 95db5c122cf1b632be65f9e740809c62cf855815f12e64ed26f5ac23 + +Len = 27160 +Msg = d0ba5d806099503abf1168ae6c34c0a1e124445d18835bbc4e2aca82071ed5ef52bfa6954e43f368ed63dc14f854129354f93efe8357a1a36d49f7596175a210577e04ac787c2d14e0a9b685a25cec2d0c3c32f52dada09e958ff00f5c289bed665e3f6de42a44661e49bfab713596979353e6e91f6ea1d24d647c4d001f08af07c71e7f9c36818731adbf2b6dc558fa71a822835f80ec6a1d3062bb5643317dc2216b8ba8892c9fa13b7eb09ef57a7e2ca1b06bf7cdc98c8d5b6b00657a5d8020d5ec380e0a8dd5f45dc3e00dae434a4ea85748ee3c8061264d5fc436add5e0a8496a2fd8a0eb52b47a5763c1d6fd875f24dec24db458106f6f06b1cfc5e2c4e3e6ac170e35903e68f903e2c256ee5ce57d0e821b1f9ac1f127276d3aa8ca5457147c99b6b0c2c099448d0519175ef26a1aaf3060648f9e32de8ca07f40d5ba8e3ca05ddaf8ca00cec2bd73cd00977075658974256b7cccbcfdfbf3a4734d1b10c4e10a81f7f0278fdb5dd5e6f8e0ff8fc563f4711cac7617ea3d0db32b78a263160748b4947b5d65f733d26de980c73ea2065b4c5f66c2c90f1a98b34fa0741198dac17ab7b5c9d67e091369bac0ef0d653b4fbe1cf1d85cd35939adc70bbca2b4221adb48e4946cd8a53fe253e8a08174c878d03b96e1589dc49aa87b01a09cd1a6fedf3051e5af6ecfffe09c40012438758089a49d0543d72163ac53cc4889562f138f5544e526a651fb6c7d0f3b7d190c0cf23f4e6ba7e8393cc237b3ddf0ad8501f2a004bc59e9f2da8dde9f75148053c711f5f03c0b38d4cbf00ffd875a3d707110f9db91d0a079454ca736d872d31456f0accd9ff82fbabb40c3f36d4e6eb80bf2490f8c1431afe3afc01d8c1e7b1564974d2bbdf535b2b2ba3bddb854a824769f76e9d7ac065c5dc1119cb8a0e11f970cc153be8ab28558655f038ff4537d5b1f6ab1972085485a8782fa84816cf99759ee8dc93f0efb574918ac1bb7d78b617b0baff7f9183a830bfc811948836d0d86be21069db1dc546e4c2184249d1631ba432b1dbe26fb805465779f7d9041a19918569e2b03f0fadde4abf1c40be672e4f96c31f71754f86aa7253da9fa3efa9ce375b9716dffee9dc9908a1d8ac2cd0215bb5c2c520a9356a8d31c53292cc19609c67ef855d0dbb6e11879b98374ea1b7e60c5e641e8fa1f52c9640385d39d9071911647242c6731168de3205cc270371ea396ac4bb5d5cd8b4e3c4176fa3791031ea9e743db3a154f35f3d87f75085edccbf407d838cb693dabcc96646b36a1a7b45e5e18a5fd6a745ace6b52555999a022097e503a85f94f293d89b7ec43c8459d5d360d5258386c429f613f290cef52eefd991c83ab88a90eb7a3d746060fc51fcff689a9f28821358c40acbbc869db78f8e0a2dbe41b33a2616a2c41267d0f83dc27f47374617a7dbd9203d1360e210821dc4b0ad8bcd52f64681fa44c1b0c11ab50b57885cc5f615bdeab34fde60de6a0147fd7307277fbe82516391ff0a21065f93680ced0b8288ead0cacc6f987599e10a70c9446014f14287ac64804baca31abde53f7756d1b7d868e00395078aa4359296fab3e5b7310f9b4146e5f3d8538ec15b8a7c3678251f199fafdf2c622b6766fc91e656daf05202aeb3a0a118aa147437986c38ca531769560bbe75b0720efdfe194c0204b1b254612540c20219541d05c3d7cc5cb469eeafb1a381da1a84de381b6595a8e79916f53636d50913c64252a74f6fb3db8f00093c3ecf63a7717e26f2c3704c248ec0c740f358b24bd37a8aad23a1444aef540f05d0bcd18b4d544749d62072dafbc873e026db8204142c2a6004ffa26503310d9919e898488107058b2e34917d78b4779e11dbfceef0edbe4a63d932bc734d91707ab14c61b4ed0e312c1b4cae7e0b4ed574b8876f0225c2e6b0dc99d3b800473663d5526941acbdd65042f8d084436610a01fa606b06ab4af7c682c2d39df7b2575934ec1bf9c90d55b5a1a7623e359fa246ffd389433200f370a8e4b8151c9f8109995fda75323c88daf4611c56196dc8237e197260581a071422491270da018d546cc8f6156f32a67e0f035f144a94249e60784de5845edab9d8390834989f2243956f9a61e6b758a6dad5520131dc5dc28b39425b20961567b2fec2ebc042e9dcfd9cece20093465c3d1e1ea4340c1b94e8a37b4993885f2698df691cb9b289298a97141f258d17a72028ea85bcee081e5f001d3745fd61ff72232550ebb7ab3225a73ba1be6f73906b39df2d3248ca67d99653ad9ebcc3f928131d0ebe19f7feb71689ee31ff041d069a2523fce309773caf4334068f2c1da2f77ade9a9f1495262a2590e8066f58d993e3ef84876e5772911553e53c4472c9176348e713abff5c2c380f494b5f49cd6b411a30fba00e6184f293a38cb40083ba01d50d3b63443f63e9f1be987af7c86c682b6a0948a4f3d2027ba84724cfb9297c0c74dfe56db91961c0aeb3686ab3dc80aa99770e220ec16c935c353be854adfb7684c9d982b194c7038165d2aa7704b020240e998f9c9b5963281da2523a8ca699a6c0e5890e1e44439e7660c0fa2c2114759692f384a6f07472c90115550ea6ff408bb48cbafd00076faeb9b3269cfb0ef3d7a056ae2b5a4da3ffff3a8b7d2330bcf3ec929c7922d75bd5868be29b659606996cc10271be76248844c7c61f44b380c036a49cdcd33bcab26e501572873516a39e3b68c245785c2c79c7ed3e320ff6ba39c9a26c3abc240e1a0ba96a8a728bbeddcdc86416dab2b2463fe82015cf84a89e09967380e1d2b131c485c996d6ceb2d17e0aa05b2490e452399f0d147894540c6c6037cc333a635c8191d7d2e84547235616be39df5d8846bcfa4f57948d842cfbe9014739c5ec434cb5de673059447b5dd406da928067c9d1e12d07aad701a6bd1718187bdb138d2cd9247d367273809c2dc066c56349847f3cee4c43da9321bbd3c66981e5a1e32ae5f23a83f99adb1a073304006df61ecef3db4de6fd0145fb06515fd4495fec4cc190c99e548234df4ca8ddcc063540c6ee3c331bab15bb87960224fb7112519c5646500fedf331f4e26719b096cf92701559256b49952b676d21e07ec385b9228a5cf85f2bb57d60b3b8df35858dbbd351794c5c404a3ca171f6bae6a97fcde54619e815758fbe2ba5e357e13c3564f788e5d078f8fc973f8cc8dbb98ac735ed73c749b9354a9d5ea22fab3f218f34e5a3e6d847d973e448a5e16b82ce269842f7ac42d3d2aec10091e600d49d65d4a48bc28c504c76cac5a38791c6dc649eedbc10fcecb483d319594e812a197deb3c26c1151bb7cff1bd7003750f1e49f0f5a83d9e8b43917ab2e4af53c8fba022b65e2d9b3083440238f39d40e4fb9c3662a57a5139e7a05fd11953a136ac9621191a4c4518199ea53f149c1acedb27173c9a0e3d7d08772981e08191fd95278f6d42683c5adfa481d8bb4a2a5426b03c8c6e4289df0edf81c721804ba41d1b15bbbdc7a87e3f203f0ed0ed99fe45004d5a0b5e5ee761a00fadc499f8b3ab395a0a75b1b00ca0d886e63bce8e549edff1ac58aae31e69827a3ab214c0b2a94a076251707c8d6a96ff6ae43532df9a15d08c3d6d410b8e4d6b76d139ca2a7e16c3cb394b3589042052a1b469ad26a1699301a2f19f3739c8896a0a4f3fa39265374e15890386d83e269391b426b11ca4e2136f7c2628d0bc7d1d46a046a34dff0af2cd730d0e4dba2349645cc509718e64cb8c57fd68bdf1ee976b7208b417ace5c04a517ca8cb5bf2ca16aab4b50aefc230e2ca4e7f662f85e1620ead5d583370be726b77ddbae83b1e8de6183d4d8fa44b571c3ef3353eea0214bc5c27785d52f62e082733832aa54eb3581c2aa436b022d497f74e90e5c40268c43d98dff234706771b4348ce9d9616f48e50376ab91c04281a117e1edbbea456d793af5babd3303ef45683eec7f5fa8fd9e502bb7ed2a872363d78f1f78c195003895237c9647ecc8025601fd3e5148c06d9a2b226d6a8dc566150241a38f3fc5a12fcf0266b4084414863ee2be3e36d97a67ddb4b8863aafd259a21be45d2b04dd926312d68241ada3805b64a82e5a90ee42ab3477897828ce2cd777e1324105134645758eba7d49d6cdc24ba4299c2cf1b0fc6c51782e798214091b4516690f6cd1dff33564a662d6f4d95f5938e4f7aa3b3922ef5d44eb179ba0d0b6118b6c10bd97537386a33ecb7d0a6870621a37426ac81ff83fa1c4b549045edc2c8f622692d75ff22a5c25dcf1bc2d90b02635e1c5122b15272f4c83a59d8d616e5d3ad7d606dd5757b96131d656776228f039add57f0dee1cd5cdaa37d425eae0dd3c4a138b964d16a239f3b7420e8ed5618bd121788f2a267b8d52870fed2288f8afa8d0d0527a6efff44a19e7babbbc5f7273326377714d09d5a11eb7aeae7094dd18963cd88667b8db5d86ad4391e7d338bc8ea98e6d9a68edc283353039a09a0cc3ec37f21a09b5365585fc70ba5da623d3bfb39cc4147e1ddb3eef3b691ef385d05a2966de5ddf4d599f3c0adb26be7ce04de8691ec434ad15d84f97e6f4859068687afd796a1c67925ad5d99f4b058a0dbeafbc24b073e497d8bc0b592a3a74b39f937f943855cd284130a5abd36297809c725f7de2210c8ac69e616ac6f97bd886dab4d6d073c842d9b336aac6bce9616e9818d262276b152b5c5fc0d2a9eb00a6b864e8395c9e08acc754422cfdc9d9bd89b0cb366e49618d60ce0455340d52859656717bfa97a341d5c6 +MD = 9ac5ca06d0d578cb270383692ea829f9b41b730471d65a0bcddd71ec + +Len = 27952 +Msg = 13f6260061db48631d409261d157f76d39b943759c620d075cfde6b8cd63d7c6435e0bfc6fb2c8d6eb5ea4e6131ff5761736896f4e6b977acd52f66439cd8dc7d9d20be7ef6ed8da490a4bec13ee1d41ef031dbc48dd2620e2f84e75b64261aefeda8e888c185fb55fcdef3a78cc5716eaa9692431c0a142c47958b3eecb3bc2d9fffca8ecb747b0562ef899ebc18b3c30afd36fb11def289b5d7be6866f034c93c8bd0fb753771356b6ced114d6a1fce89dc56472fbfa1a8e2a1ed52937a19453be398596f5d72686ebd9aa9a12819e3afca6cc1962a960c56aab497d29fde24267d8d230a34f310f5781ec267e136a4f52de6f515ae44169a4890a2a50007e884e03bd2f67c77b19822f5e5f2040a74f2ad515c0ec9306a26120e0d9b190af4cf820103849274dcbf349c9ee02ee9f6209f2860e1f9ff89728d893325696bfb6ef9991f65057ef4d3239f57a2c0698ae799f89e4fcee5c718119eadc46fbf4efbad4090e843fa9c8c765aaaca471db5e0144e8ea89697d57f44bae8089a5971fe13b3f2bedc8c3643b37b02c7415b0982a4769c7d0f8a2720ad6a7c5287eef6dec34fdf394d884481415cea1a4dc5e847a11d523d98412ea4a229d542a6d46026429090e8058359ddd69ceb33aad2f4c7b0af3a8aaf316e63d9758d49759e206d1812c25b9311e8a1b9a760b406f6915b59a8dfc4d2ff68e699e9fee772c0ca0b9a42ee04849873858108f51bd0c550aaf2a69c7ca1efa0b589d3c4ad3cd0cf8a6fad7e6348ab8ce1b33e02dba6b3b50f12051b227aa6a8592fef58fb2242a371febefe085dbf875ed6b33453e74631203e60a646eba8d239d2793651d19ae85addf3d754423915555204e44510f14766ee25f86a735ac0e0382de761b94df09d63e8a4e784cc995dbbafad0fb2498a4b97e17c0d8050f6e4c759d67b47d07ec25709e12293de95e07a1ff91459b35c56c21f9b90b11fe6afe6a9ae3f0bc6c551fdd416a5fde38d7623d2531365c34010f32cf1a4741c12aa3c89b90d839566d4eed3bfe2317002973f73455d750dd7f2b1b5f8a957d9fd7c2f7691673dd0f5c390953757cd0877bc235f3a72e5d7768474372b2fcade299e45fcc1eca8ede496897537873f117f6d8602bcf466c4ce3ec12cf3a84b9d09790688b50e3350a5c640101ae0f62f6c13ce1a4752466a219a1f040c93589b2fa4e7a7053c8bbdcbfb4ad25c0580b6c06761e2640d231c232ee458b071806cfe9a6fd41d081069c97e005895556d5c3ea0f8179d857b7f4555b79799e3416718d2159c76e1400920f716ff41612a641978e7164e6bbde7faa71f4d23391a2de0e46f6cad68b90054cee552daa936830357b56b1120690ad5ab71f5e7138935f939e3c12afed9d3f79df1efdbbe101d6eb5f97260341b4c48db660e4fd30cf3c44b09466a2431186bccc322cee055b7ce2c19e8c6274320d6af4202e828140bd4a04648f5794d3233d3ef982ed065c694229d2aad6a5f2d01afbc802a634cd2acd22155675e8cb5e25bddbc760eceee7321f9b4a08dedb55c553be2911505dcaf4931081a548e17e9ccf40c2eec0f83cda2c61329f26d7e391826c6b6cdddae6e8debcd88ebafdcdc9fe903c408961b163d78c2b4486cec3a912388f5fe42bc6d18b8025d9490791d5d133fdfe4f138ef5a984fd9f04a63e338b8c5f916b38b2d622c62e2dfae713e8d091cdcf1af51bb729b27057ab489a5873cfa1ab7de9f21f2cf5bc33d7859b288412745bf3efa0d2df7c4c15809c1f3f54691e541f26cdd531749792e7c970c0741fb94be1e9646e534b58808d8a1711b5c29e355bd78d20b7ad87f3329cdcd6291e6547edcbb0b10e885d41d9fbc8f51f42e9f638e47827480754fec1e42593297940f61e7dccc6979923ff6cd57b141951c63ebf35d7136beac55a9b8b941efe9612017ce800d376e872634f0279952b57feb5f6b2f10ba9bea4b0c87771a02fdfa30f0ff2940134db1215896807a1ddbc5904e744103888ecb7a75192044045babbc9e084cf7758dccabc22f17060b8e89fd39ad17ac292dac7e83dc29427c79121d7f687fa5e6a5264002384faf9434398c9154278d04ff19b1a94f16b7c3dcb9ee059e15dddf2a5a68b9308ef9506360c8f6280528a4699fde65f06cf6830d0fa8c127c401d793c59027a67955b8a27c2cd89725019ff3bb3f4a5e909132708fd85283eeb4586814510e0883574567f832a90ffbaa5023d86eb6e8261a4aadb6e70a311a57ea2db315bce531607f3a7174e8111d755d8093e74c2b91e4341b117f88cdcb8f054b2e68b4bb0823de70546e2638ff0520805a336aa768a1a75f2bec3ea876ac2246f2d496087bf3ebc03d88e3f604dc41a9b7cda2da1eb4ecd062c79c5f9041d9a78cc3d14c01631f90894f91c6e36d29632930754228a0ad25529c3251ccd283f368b0e6f43cf3e277b43cc02a0f3a40531ae6626e1af740a487d4913d70f0c9a11346479f8328fcdc6adaefadecb63ef02969eabc6a2b4ff45efb2961210f034728de93bc8874973509a480a100837da0c1358ebbaaaf339b548a6b7b51afd93bf6043bc991597a281d2423d1ef04750b7ed3cefa310593f0150cf7da9735a4162731a0455259fe0c11c4398f1ccbcd86bebf1be6b1d0d988fcfd2f0d46331c6c18e171ce2ff89b87842f3256fe3bdfb90d62060f81638cfc98d5a181f34a7a8467be10b2aeb7eaf0e0afbeb817f733f8e7670de3446016916510dfe722ce671570121d91331a64feb3d03f210e6062fce938a3f05f491f0dde593a9b69516a85ee77f8f8718281f78a3b24302619d50b6f5158b55670fec880f9521d1b55ed6c2f6a2346de92ca71b03b1e54138602caf63baca0be8a4e37e98bb6fadd5e782ebf633d0aceddc703d26a7e0b3b3784a22a721050fbf785f2748ac9a313cd93441afd96c2e695e0147d53d3d421a0d327587f1444934b2e7ebe611aa44345b752ce83d0edaa8dae29fd61b03d5b4466d12ccd38da18f7b04323c91a8d00395cb146b07c198f1799caff1e83a53ca4c825f3e6eeaff17fa3c6410d59bbcf2b0c161fede8a508b62b6def04deaa6a447f9c6a46b624b15581ae92b848bf049d4dc7b6a6a73eabfbfb89399f11cb58a5e5badc771fd6dd1bc2329554780535028a6ca7654834fd5b52b38b67dd868c4b92e7e7029c44d934fe18d55c683cf4fd5a6b7ec44c265156e96340d9824a79981fda0653abed3a338db7bf5a89b4b8d0264a892e13915c61281ef67eb0a5a53de4d7b6f4ef4e848a0995cfb96d1b053d8690632d4ef4832c874d18b1d916938f7a877550a6c72ccafa49930372ce4e97f3c3a92c4ece49fb9f84243d7c1bc91f595fce118305a758c83985c34b4d0971e65aa7b5a39d2560d94aa55c1a33ca5ff9d72d92048898c60bec34734715ca5de6dc0b43eddfb9febd1718a823ecfbe3e464106c9bae65852de81b8e06c715ae6dbe30717e046c17b36ffaac39b5e22da1bd130bc9058238b6a3979e0acf5ff5f377a3a8e4b9a06e74bbc7d2bc0d21afaa18b1ea1d2c93333ea5550db39d2dc700aef164a25e1b4549811ca63b711eec662d59a1f8620d271e63c06791cee3942daa963f4760214eca6645b128805e667e5186adeb645466de75663635c335efc3210e93347e56ed7fc1ef6e139944a05b2bd5787691fd750740b2e41018792c7978c6fb09f720a3d22a86478d4a861c7522a29c2a898cf4216c331ba14d41fcb9385bf1286912f45a1686d7e602874d64cc9a8367a97746a54e632779b014b2fad639f02042a271700c8d89ce6fccb5a28019c8ce70510f1b6dcfa20a1f65f1c6e8ed828222538dcc72f6f796d0cae7a6f39cc6bf7c8e9fec40d515c2b9ba2b95c6f322be76aabbc7f05f8befd40655ea8db017cb3c947ba07e2fed343d85e2f016c74b45ce1c8deafb13c129e80372f5b4e036722f0744d06c1cb2ef095d9a5e5ee686a8773d66bdf9d031e59b46e1510fa9ad34c26b7de49137e153bba5d448e5ed4f672061f8a9730158935c4503750478e683a5157955941e02f2a2f3033862281ff2583e96460d239fc3b9826bea29da6cff35a9d9bbdb1b925c8dc9a9b55a4372ea6d37d21c1eb391f721837d18f64abb07f2ad118fdcdd19e1aa9e5a4814abd2bffdc23e843e3db99e22dcd999e0466b2e7a83b33a2fcef432a7f5775947edd9d388822e16c23e81393bd2e3e57e59c7e32bb221533a5ddbcff443a3716a75d2c57bec435c71127348eb1a3e7426f18bc684dd0e6383261b0a1e2d4118d2c068166664f0cd91662a5daf274bce80ba11392458bcd3a0a44c8193f6e2c8377a0446c670c8d2c9b5f0d7f67e9e6d01ffe2bb78a9cf2c0954dab6e454fb07feff31d72ab43e14706e71586f74a8d8215f8addf064b7e523b4601a8dac1c40afcc6b27f193c2fb2c0c265f68cded88753574112a0df997864f574d0e80a90ab06e3ae9b993ea0f632b8a4d70deef06643e38e5940a26abb7824aaec56733dea7510b7ce13925c9ac3917a3161c2fda74b633dbbceda1aa2df994b070c44f34fb21675216f818a26da14910d72a226d3d5a1f54133d0d0b6011d0026f2c5d96323bd929b95515322e10b8e7227d6937148635ff255ccb57d47777153f03e18ad31ccb3456e4ade173f3c1c6968a56d090c7223d61d15f18117714595eef6d7b5440d8225e0b6548d5c6fe1f91d59dc238996e8f573f5ab4adad124f5d4363f04c546a746d4dbdc0aa06e852a2e3807482796565840b20c5ef960b8798a4678211a40caad33039f187300b104848b17ff4e3c16066a953b47dae6a62bf86ea994adc39264e374c43e3dec0d90059933d1664ed007dbe6608de72b991307f6fbe6e597a772ce76740566fb40d59aac8445d7952b6479eda5b687f63738 +MD = 98d52ed2c6236696cde8021f1e169984b15a934b59ee2a7267758b40 + +Len = 28744 +Msg = 725f7ce9076e26a8d61ff5d0ddc9f806c1cf1564c0c4a1c1e7d22e33855ca4d3dfe294c02525c867a58c1f013fc7985c19b2acdf947ce1c97e089cb989933673fb9853e1a8f06f581d3eba1d1f8a2628542cbe273fec39c67267cf2efeb54bcb2f48625376174304a7fc6f2d645bcbefd905f345ab5cd2422ab7709ace080a64e1bc681e79e26bf2a990e637f882ae3b1205f540be13d3c410c02606e0d59cc57bba0e4b979910aa8dc0c646c247f99366f36920625b65d58b499a791c632976630bfce1ba8359b5b955b75faaf2d1803d99faee7e7ab0fc031c73fb6afcd8000377d9e8c9e96f9a9717638c98ca608900bd4eb1f9b9dbc1e0ff5a94b2e6d1eac1c54d69ac1379e18dcd6fd47418ce3615280d71bd600fac8bbbf74ddc6a3dbc07bf026a4b49a013054186402624430fe5a2e036b1b773466a18f12dd0d044ff3c2b9df68ed30cb766394ed69736e69dd8f36f09bd063016e6ddf13c77600d3ac7d2c9125df8e455187e6fa0ad96df6757e261f1c9946da468d49e83b762c1f5127c2cc8a002517583d892a6518c57f5c8385ef7bdaa537956c3a109791d87b984f06e1f3f377aa00f0e5fef6c5f76d094bd102281900a1c1973a1d7a6da880c85f8382022e0885d24ea7d83e458637f24391c7afe8eb9151aac47f324e1eb797d5a32d13144a2352a32956aa3bf478adf742d071aec88edc0353b67dd7ad985d4df033c55adf1af89af4eac8fdc497a2c35e9d2bef1a02b72d8243bb7ed7abaf34f536974619c53a929515292f692d67546f8e2d3e629579a5baa759c81f59f4072cc5e77a9cca9f268456493564926216d033f3f134afa9f87761f737f73bc2410142547cda93acd33d3e8794597f39873b2f2ecc02c9be9243040242f1b9a08f0d3c6ca155a8da053a3e82e09a4c34120ac02c035f7c2e0fa80e196d916c052dbb247eac9082ad4915c6b99ea9721863b9a77a5b9d2f7ecd00c09b3c58bb66c9958b28e30da9ad2b3a67aa2329892ce8e235a8296e5c375707fc0623ba305bcf26f0e9e93f96401812b1c3127d1a082dff0b23e1259ade3a07f0e8b828634acae9c64013a8c10c8c590592e1367d208f7a887c376563e9e29b4fc16e35bcba29489bba16dbc2791458039813c85b0c99ef4e1f80a03fc0ed3c891eca64a53086dde1b6574b130c3caa1c513eb51c32d9b7cc9c51589719b6560d6f3137d534501428d359692b3c51c9b04ca67f3929db8e74612e11025aea927d114711953c1185e17f91d8738010317ff8ffa94a67fbbde61c7b4bf9fad65c28c380a49dbe47adac4994fba48de47bdbc4bea5c853c6d0821cdd7be670262dc0f4524337416ee5d99fe75506ac4af3445e48072b93d960e8e0a92360513681b602508ffa5bf3e8fa00ed674271b0525a24404ffcae9fe97b0672c4f014a3f2789befed6f747301ae0b2bc4c064c0f37d951be2a3ea76c4c90ccef30e40eaea992fa4de0f1168da361d36d008fbd9613f4f5f51c9fe1aad43522210236c67e4981bf3f441b941cd52c5732b94ad76160fa16f3fc74fe7ed9a74f0bec7ddc77ae60f71a2bfd2aa7554828539fc0023ac7f49efef34666b100ef3df51743b76181368927bc203ef4cebd2c18d978a7e7f0e9745f299c800bf314d226aa0fbf04690c5dae200b3acde6944dc990fa2c3182e1805ec5feb6535a1ef8e8ce6a5c280fe95bf77e4684f845d471adebcffbe026e5aa42f0f46f53dc169681abdbf6941ad56b49ff5a863d9485820d137e7abc83fbda55d10714d12203943a68eaf51133d975eecbcea6667baf67312f8f138c422ef8dd91be0b96d4edd95b2e1fc16702fb612c092a4e39a15b0861688b2d1a0a83ec2357a2bd6a99dc4f2c2403c25e2e45174ce1f7e580af914de5e6f92f2c84049e6f4c3a921419d9ddf5731d61bd60bf7f957cbbd3014c571e04d061838b57b8f709970ef35efdeb6bfd42f5044e3f70825102017f8521b763084e4b90ff2ca7dd3862a6460eed1be28dba1415d7746006c69b4e53d3d6b804378a40be50abda3945d28bf4ed907028ed0301fa21a697f43e6d2cb6b51262e9daa9c775457b58f478114466c38ff2266544441df47e1e35ffa32210f17dbefb38d6691da74529f4194759035891a9c43da566e418a4fcaf5163b9ca50c0d3209b37ad1e3eb05623709b5232733f9eebbc4feeb954bf394c7ed5774a9a83aa4149f41be1d265e668c536b85dde41d8812b6a64037177def3cd23e7f9976d49478b363bcc2b0be1aa5f4013eb5f3e5f6fd21d51293876f18c85728e3f0e27ba18a9259648104b50d387e0e944bfdf3c9ef9913c956e617dfeefedf685c959059eebe8b3be4bcd3aca853ec4d0c5cb76f5e8eeadaedee3873353b9a6318eaa30bf99a81a94a238a777a1832bf63baa155be65b2cdc4fa21912f90126ad26c24565fa8c5434de359fc223d7a721e72622ba3d00428788463a8328ebff5f594a4b7757bde804c76b2b935261bfb693e5a3f9330676175278f36e299fb8b1eeea4bddf8625e6e248352d2774afb1e058fa300119551f475e04bbb4546d90aaf494c7f25a43fd8bf241d67dab9e3c106cd27b71fd45a87b9254a53c108ead16210564526ab12ac5ef7923ac3d700075d473906a4ec1936e6eff81ce80c7470d0e67117429e5f51caa3bc347accd959d4a4e0d5ea05166ac3e85eff017bff4ec174a6ddc3a5af2fcbd1a03b46bff61d318c250c3745da8c19b683e4537c11d3fd62fc7fefea88ae2829483871d8e0bd3da90e93d4d7ec02b0016fb4273834674b577ce50f927536ab52bb1441411e9fc0a0a65209e1d43650722b55c5d7ef7274fb2df76ac8fb2f1af501b5ff1f382d821cf2311d8c1b8ec1b0beb17580ca5c41f7179e4ab2a4013eb92305f29db7cd4ac3fc195aff4874ca6430af7f5b4e8d77f342c0f578f714df4728eb64e022e9e13dcbf00663e34f35368a362a91026ee196b746b4437cd1c546184e9b1301e8103367a06adf7487c8cdd330c04a6f6546897d19cf3bbc9eb75ffb18e05cdd329d4dd90fce9c84844cd2138487ad1bdb6d749c1f8e873ee47e3ada307be33c2f5032282779c19aad88ec521ac8e390391ffd1d4239508a0ce27ebc7eb4d1a947f38b5cceb5773f6c46c499daca1356e524cf076917bd297cabd4aaead34ea9e24cff7eeec8e6fa284c02efacd766f3494490627c71f7a29ea1e3ab5c1f81c6682537946efb35534a634d5d783504f1cb47e936628f257dd98c54c7bce193874144daa936968dd238534dea262d14d8d5f4818c05b970439433ce06f262ac74d57191c22ee115005be4ab9e9e07bf2ece14016b4c37007b395ffa71e6e7f2168c7604e93e24f6641bde0f81c80b2c7d1e6f10dc1f50fcad2fd87f0f81bb90f4cf1ada254ea65787e108209c8c81844c2ccd57e6664e8c62de6607e9a925ac970424bc7f46b061ef132b87f6d3b0ee2462f67d910977da20aed13705476c6f85955d51fd0e8a3b261b0fec9783e1938c27b12be5f1140b7207e0b96d44d90048e88d42aa8e7c0fb45f7cf588865c9a0ce3c809eb046c4add515d352986b48768677c368bafce021f493a4dd0c2692c2cff01beaa2bc9bdebf40e523ff7452e6b78f1d6aa57c73ef13f109a7721507175e125f32a4f718c2358bbb9b97ed31bdb85b5ca0e6fb0ebb1abc885868a58906ef2fc4f7456ade00de52e129e02a8763ff591b9bfe0d130e8f428b504e4cab2a09a4d7b8f2ac5e132042e04f76d0a6820304a4bc69072361d82f9d3f919eefe9142e21e83b101b6191b8237cba64219059eab292a69db25d8bd02866e100c9dcb5081e159d5a9884b94f354229597b076a77bfbf3525424a20d0d7769b16cb6d62ef36c187c047e4ed5490305225355fbb381682932245b01dae04df5e456723842ff66c8905bc1ac484ceb7a35bc321d2a8619d5f394f37f8c45b1179111f97bf66f7872f8f678ec53c3b58cb61c6c637452b6ff7cec14a48b014bd9a0e67226b10a491d9c1dcc97607808408db92e56f9ade6adb574e5f73fdfc242f91d05c2da9782d16418e534d6318da0a2dc9e7c215f51e986738f0011a6bf5a85fedcd6dbdfca96382eea4b1db7ecb3ddcce460552fa0bad7333947671de92a2ad01cea1baaca7500a903659dd2cc8127d32987fbe77b2990fa0c55aa0ee9b9d1ddf08702bf2975a4cf5a09bd49d5136637957b7d4d893c991130b1433f6610636b7e34f8e8909f0ce914bfe8e6b07084414fc3412a73fddac0cce398780935c6c3ee7965eba7f9213e5c0f836f05a0673980e7b145e0743c4e097413837a32e42d69deb191158ec9185882f7ad7bacf9674f6f336879a8a5050eeb1b27600fa3f017ec44a28363edbd309fac68bb9b2012e5e43159e6a1fe2b04d0172b63d2ed561f2a87e6988276760dee0a686d75c68469ce12e1ce67300912ac71582c85a9a5a920e025fdf24a8b17f87a743843d20304b33ec8da0322e761059076632fbf26df57b82659bb534475446256c40c2cd8de1d1dd6b17cbb0d1866dc4db0d91621e75678b255e677e9505b2bd4bad8bc4b1e9317d3fbdae5c26054bda4b98a98dee9a586919979a0c1cfc33eb7c2af6aa3ed9e94866225874f61599b44294a2ca40ecd4c8bcc7fb5151b0601c6839a1e2a72c5fcb88c6688fc42fcdef6a621babd7d55306796fd9e2d5babdecba6a0c026d690b73121a5d2112cc6ee80d8182b6f5fc59cefa1fd4351b83b3c8cd2ca38e040872db9cae84cd6463d34aa69366503dca6f7e992868cc95a3d83d3b01f6ea0d933c6182f39de93b9eb163efe8451c11b7fa91e14a161dc68391a66e8a74aaec81beb15f79f708fac58fd024208d7f045d81a56cd55aad40ab86b0d216ab55136c7027aca23ea13480a52c0dacce0d98139b25965aa4ff76a41dd92037195d24bc0750d52cb3467b48b7b3e71d852c5f82bd9ee85a8388ead5cd8bc38c3d4792e8daa9734a137d31963e245ad3217fad235f7dfd5584de0fe91c4526568588e08b60bdf1badd99f9f18ed9c36e415c136e074f2fcc1773783690a +MD = 8be1cd7146017cccbe4c82c4e42e866936d24f214b8cca03e1425eda + +Len = 29536 +Msg = 243341d29db72debfed16106ce41b36eb950526886fc5a714955a5c8da27e52c85d9efe703955a0ba9aa49fce02e852ed5e7cf30726c74ea8c8721235edef94636d2e5656ea82b7e9ee643fd1000e683743467e6d5b34679cc01038df49e30379de6ca54c536c9cb4450f6124601fdf4fe01c391991af9a6718cf20e84b1b18924dd47bdf0885c7a02af0b426a77f309db148a39a5e9b5f9e3f096aff65da5c3327e03a7d6e60b1442ca299664abef4a743565e6e168a1fb8bf5987732eb346e2e92a71a6197fe206b6af9141ce51a402f2efca135dee633cf63a06f20a3851182e1da1e78e55e26e55722c67b6d9b7275c6f6718995ab291801559da9ccc134953345bc031653ae17594db4678a9b68afc4fc5fc5d31966cf98600bb3af0f60cf508ffbeb7304416b3822e5c98542ab43f1b572d1e158715af068c12795981b980061e416449a6648bb48618aa6b7c29b15cab295078fd223d116c5eec484f0580a637d6dd13ca616ac6830903523351df8e227fa8ce71290031221ee85fa6477373cd0d86113883ed1295bc57aad8d3361a6dae6ba87b80b4d03dd111f22015d4f95e5403e479426f234e810bd7e514419bdd242d7974cfb7992ff3edc254e731a15c28baeff5237d930e25845bd09b7e9d117f72c4157c84d66915d022bd31f5f6571a3fa634bd94dc64e875b933ef69787b2ec01ab60d992289a55da5b19cae82cfa6e6a9c0675159e368447287668eb89aa089efdef980f7f2310acdea7dd7b1363d645d20b71fa5fa13751a33c75af7f07354a608c6c8e143375c0dc05bee1c2b6c2d52ce337c4b29888c12d1585a910d25a4efcc0bdd58ed26c5d7cbcd7e2e0fb1960d3152d3b3e225fdeed8b00a2e5125ef2f812f4ae9608ddcce6538f451538c52fef29bd26ac47a4f10c254f63a6cf2b7e7c0b77dfd4deb05643524dd40b77ad8aa7a84e4fa30f3f42b16cd8b1fa11a83ab231af30ef5bcd41bb427b5567bfb9b82319477ccc83181905e6045789e1bd6ec00f046b90881dd575aa8091d419d1038c041276cfaa18be301d3b1bfc465261ce2adf565e6b865c9a12c450f88bddb10af11605538d25785999e6c7fb494f5c050ca6bb020ff11c5102af597b20c50bc469bbf000322891a8e06b212df19ca78c3cc3602379475ec303a97606dd7159e3f369017fa30a4f467c34f23b46228a8c429c0d6ab36e6a179c1a6d41cccae38e1888fe78e8b1fb5bf5a701cc50c74d2da79b8c7ec4508876566a07d3f4b6f0ee5f80b0920707dc0ed12e188918743796f226a409b4d40008b8010c655d1eca2b50badf760af33c889a30fd1aa51291f0aba71cb08be119f44a47449e10ebb76c739c53ccf85c61f1d7157926ff87a3625a85bd1d52611d6394a57727140300d9518fd33bda2c9470114454552fbdb51588284ff8113b527c1f816ca77150ed9b71fc296bb74a1d2dcf2756513c9a0f31bcf89ae8ce5701687244ecc730b9c5da5b491b05979e4451992547bf2e08f9dd7f5d6596939d714e1557bf2f5825d2bd98e072b183105104f7a6ee4a0eeeba4158bf7aaa67f5ec579120ad86f17e5a6daf27f51681888b6d72121498e3339b86cf869fcb5347b8ab6d097e7404aba61228886edd9cee3cb591d28151b5c1e4d46c1a9da15d7b1e713179f9a39794fed38c69a3add92aaa03dd4cfd1e8c7fdd52b8e33bd5907966d266d8e7b8b521a9d862345e2f42241d80dde950a77155cd293a4a430ff129d8f5938d105e633af14a3250650bdec5df54191141936b2bfe807ab57bf68a73bc0340023c3babc71c51852580e8b5f337a6192d9a8a83e9b680018dad3362405923f59e33f794b07314e11b796ed0976c9e66a32136c0783e51563b9f6e8176f87e3bc9bc3b26dd3ebcd19a1746369ac76687dd9f3c2abede1a02251a4ef0ffe13b99eba1af6a36c570da0a2118efe290230441db47c9a4dd048bb5e57bb6c15c83986ca8fa67a44f5986d3608b04590f0066399ffda61285367b52ca9edba6b17ebeb59ac4260d269e5c5d9c487ce68b23332cb106c8f11cd859638f5f68952753962c3eb7ad5b9069e4119cf75f704eb4f682da0b3727eb14ae52fd656475072ba53a5e790674d6dfa7552a3fb6e19edc34a2e2b4fc9e3a100186dc59d730992d7547c0b23942402a2c920cc88820c4c277f691a81e3c51f4da67f4e2c9ad25828dbc2d0b4cab1572fb310b3bdd15089046e5af90a5eb77e9c15d0ca943d4f35175ff6d2b49999fde9d98ef40bda8b16b2ad703139a92f5173fd0ee554c8d4bc3b67a48bc37f324979931807e31c1097daa3456da041913a5db28608fedc07400d79486631fa1edc57763869e404856ee4e65708ceb6719bb1ecd2bff2d55b72f60b4eeca088a428ec095c847f325e1e69ed019d257664f838f28174c14345c78d9444a99fa986a1dfb310f225140f28c23de195451fdfd22b69feb1faa46ab04cbab6078feb2af98b09e23d76281d00864f737b9e0146ac31b9b711ff871ebfbbe51f80d1ac057286844cc0d2ed1c583e9843caa0d94df8c47856ff5059e6685389edc0358ababf4a98bd26cbe1617253bebf1cedf63a4a5c1c3ae48d9b662c8c3fad300c059f325fedbfc9e193a0f15e1961bce5e6a013711bff6c17d9f28efe6cda4ac59b377e2ec9c13484723f57c63eb855192913e6ac0df0e08f84300202a7f18b12ba17e54fd36e01551bb11814a54f60084c1a265558dc0c4528831831578f7b43e0c52a2b81128aa3ee8aa4d1d3835833be076515830d29d94580542312009609bda39f5a595b6b216940a0764ff0b81bfd70255512f0d3dc59ac28206e0155a49f57c754d2b51d3e1a677d8a81040a2198f8e9ac9f43949ed36b16e1a1ee54d504363493739c0b5a8063ae86fd59c8f50ef624848e61e6c14131a2bf8433fdfb9ae359aeb29cc01739c9b5e44b5e7f06cdec686546d834c431b45e425b8ecb88b1d3c8ff2613d5f4850e162ac18e86c7646017c77f13291823579bf2ae4b481ce77be51d34bdb76310a561e316668ac750e5c5338daf1e4d74900e4902e5ee28aa60407164d6def35b240b75a082f58711e1f331f9189ed4c40207cdf00b482c89156da44d1bd715c30e858af640517725e9243b57cc253e80022af9dc17c0a9020fbf2e43e91a5af6c9627b9e3b29181b6fcac810463beb3724ea454d87f21e83b3d767efcb233354e924cffedfd6fa50ea7950c9136d8b67eeb848baf8570daca628f9b73e8c2f7bf23f00aebaf59e74ed927dc8c0146f80d4376cbad569f6db5b364c20bfafafba5923b604390f64d5edb8a7b5b8db381059ca39b3ab955a9e4781e7b2cb2854bea28548b5f68efe226f5e57168a2c55a503f3383be773a9740f9e44e3ed608ef742a6413a5ffebab8e6e60441a07248ad4744d0ba158f73eaf7ddfc4a92f2eed2de3927e7f1d93b27f90257ed88679197b8219bc4c2434a71a4e3664d5859c4ffb9a075654898ffedfa159a60ce56c102bb3c01d25a398d86ab212b62aa0fd1dc896ea228c0c869798ea27451deda476ce4d6ab7959dccdb85f29b431147f75d7b20646b8f6e218690b3b5e27366ca534b993e1005d978b85556f892f0443219fc809db8c47707d2b1442b05761885b08adf65b2db204375c125522c305d575833febc9195eee083e1e4b2378ecb7e9473670725813ad51cb0a9d0973a5b0e2308e2ea7e699d56a20adc72fe23465d07ee784aef5defd7b40c289b5d7505fe8163734e08a94a0f35137592e59d52c911e35b599ad907f146bcebda054825d07a2cfa11b6bbbeb347e4f43a7164b76abb3a595aae5b49cad9a83ab6181d812c164bbf5a1108c1ebdd65a4942ce03de90cdbb876b14d7e0b75b85d571d5be3b85ea80a52a0f81b5f017eccc59d79abee0daec0d42d166e5b22d49be49c69111f592b2320ebf493b6ba17b3f84c98cb20c49cbb9da91ee163e9e43d861eb1d3070fbd51ee7a62f2981118a253c2a363283b8beff8aecd9fcbd1d08b642a9af3198944dee1d6ab00af0c69e1fe86043cad7a64a50ec38b6f3ae380cda7488c37fccea91023863885a0b6f2b82220211e588710250670c01b5826dc4b7600ef6958e6d530dc12704916149c6fe71964d1d16c76b7093dd469cea2cd4dfadb2c4fd7daaf853303ba13b7304d4d74f8341cbf317da33fb32f22445f391a5a60a9b21fb11e5951df80ad2b11ee9bf245f8c8cbdc0f30cf59390e61660afbbf18cf59d8730cf25e3129dd1bbf68a288891a9d9c7713a8e2b75bf4cebe26385189060eab296099817e1d6c2f43a1a75f4a0163db0970519f56fb9d336f7719373db7973fda0296e250c3220ea483f59e1315e22f9b10742fbd83d23682e3e59abc48bd3e8ed931aa2e85c661eaf5d36e69bee24134da58b974595982fe54e6a18c23484d4dcfb201a1ca22cf1dde88f7d6642ab8dcb6476604e7fabdebb1627537ae001620cb600e30fbfc0146285d60e16f833d9b8c875ef4937f9051e2a23d4553ad410eb685fa637e1d9e6dba9ad21347b5787a4461c8ccc7aea239ceee223c791676207667ecc2bc4d4f987c8774f254881080c71dcc15ea519caa5f8e4ca687045c5df44e0dd61d53bcd1566b6f08ffc4aeb6fb039456642e25ad7cc9e20ae73f9bcd188485260af98c1f3090eaddae30f922c95b45179c0ee6490de80df1008fdc78cb507b3ae905688bf23c0ef7ca959ace196c0ae1fcb88686fb33f4e23abcc767f3f9179b2340f71b84b803e0bcbb38c2d47f093aebf6ae6c2cf2c065fd8d03a179c883d02172e2d9ce4cf020eb6a7c05e0dc6aadd18e0604896d9802b1cb392e4605e4614a63d0cdb93ffd3dbe6a0d9e27cb56bf17493555faeca542be3e101741f865d705da6afe2bdb54c19f8295989094f5fa23efe46768b60eac8dae316351e82bb9bca158740d661a34f57cb9f8027e6ee55e48ba43b914fcc984e3431a601f618fd67e413748297a1c271e23c867d2ea08301b60f0d74e971f0ca4ef4555e32de2bb3acd50c26c9a039f317b10a6d990ec02327d76a8ac06388ebbddea177db738d29da5c66577a270c47c68d6a7d889183a53bade1675729c70eeb4149035281c856e71a11891bbecfec99324521afc144247bf2f08f302d11c061cc8a752a8133b77d8e9c2030dfeb5dea4018fe6126980d63371656cdf61f8cbbf10 +MD = dc4de93e71e70a70b7d8f027fc8e308901d4282501ca5032e94efbca + +Len = 30328 +Msg = a1d17520ca8030d92322817ac108c9f696f11a22f17de1ca44e5c8ff2ae8daaea809e877b3f72cbbf34d2df7c77be25189041a7113eb1c9282678ad93ade8be52a1128a75195f7748082f758626fbcaebb9dcceded7248c5c029cf6b62c99f31ad53fd59a940d82b522aa9459bca9d33b222f63f86fbae8a87925e5cac8f5fb9bb362f35c5e11609efae09657975ce08f8fd610fe66f970a5d0a0155201913a6db2285e2ac61fa35e174e061045897561594d50416b4496dcdf97efec54f031f967fc90966a6ccd7b0e6f5e0445b3f458f511ac61db40dda5cc79efea319764d72b6c151fc9ad419e26b128b426710fcf09bf7fe03552a7994dd29fec260b657f92d366375245921016afd0a056250a4bfd93554d181ea73fca1e7a52b0a0966b34defe6d92ba517954d7f049536486485759c6f8e1f93f01c7ca09ce501b8a2277eb6833099fe24247b6022fbc94065c9d6f4f842176e177dd71b8af82b0a32dd2951e28355ad70385c680b3e0580ce13640596f551c311a61821186d72493f5db489aad947f92258585f6766d04fc8ec8797f2b0b4da061fa97aee4bbdbbf0308926833b572c620dd70ce07c14f77bdaa771b37a2afa1d71f0eeb39af3aa6edd0ef017b06d8d5add41381c86b8be0e672c5c825c9b6c7e2357450f62fe5ce0ecadaf0b4071632f53feabc38fa4edaa1b7e20075ded7952bd4446acacc51a6fe5cd2a0af34bf70cf4762d7e9cc0cb767d0585e9850967c1c821ba2f7f302b4351d52abad2e391174a1286f5b7f4a29b152a53d1dcd77ef2cb556943e427d983b82f77c3e4217878dc387dcfe728b8406b5351666b3f080e4e481b8ee2926a58a042d9ce32eef6583251dcb43544578e08ea4851392a4b3cd96298b8815927e993761883c23051dfd5c6694ea730c5ad735500394e7e90a5f50ba76ac965585f1833fb899ed1d2344cfded4248d44ac434fe41c7b3251f7029ab124cc39c45e1b8e14b89ceb7c1801f602f3b1d1830fbd44bd3a36f0540c6feaa9f0576e73598f9e8d02a58cc66ead756f9df30e5bd7bdaa67d748a083bcffb70173eeb2f72ab66b1521546f6089bfb4611d688213b6cce7608e20d1557b2a865419e285a424384a299f1a01ff1ba139a40c92db6f0f639223d97ff13de988df2e7ce3751ee88dd246c676c2e6770a7b94e60288a253fa114e13868ec16a8337dcf7520fdbda1f8a0951fb40bb3e5400b03428087217291b3bf705187480b2170c23ce945f9b75d7cdac07f9e1d4065f827183d942eb58e679ee4c1ccbbe8df3188cb9c10e8f1952204f3d6cfecaa9fe88189689892302298453fc0a3b968f62ae9c94048d47827f8db5fc0866a4a7543da3e077d960dd4ae7d2756f488b3edc1addeded403739b6826ad45abdd496f71fade252a82712c110e448ca771f04c609bb37d9cbe0b7ad8af846d268ece15daa912c7879e86b32ac04069a4bc489c6e7df025884c684ab23c8d41dfc502f0e7af82f77c3174f05f5bc0f5d3b1e26353193dde80f7b1965d966fc8beca0c87fed3d5bcf185636c19a66f391d98e72c763740b16c050fe34185d30aace4156289deb41fcee07aadc16af23c68b87e7c41a1a4a534bfa9bbc6d061108f5c450aee99c626fb8be13dbd6ff4079e5ad0dd1b1e0fc3c06da8a55441c0e1517ac30697c9b4db60cec1a4777d1ba0a5c604d66c752a12f857332a539e9985d886b8deea392546e6f04268555c0f11674443f09d6f9c9ac5c473d02bb093050ec84b1b51b0c26e733b8b13c1d37962ca1cb5b114d40d630dfe8f22443f5768d988a54433f5335bf0f5c52d22ac0199b89581a33a6c2776ba4bb0a507138cb6230dede1f7d11f154667173ce0ad4ec018f8d04e77fe8fdab2f4fee3daf3dbf8d3a04c7b070c2ea55bd9aaca639f09ded18dc9393454f097df40a06326a8ec35d189ea99ca6e09121993a55e1249d9fccd9c95ecd734f0b62779bfad54fb66750510eec3a8bf586467dc318157756721f36d5befca67373e74e5824acab1f2c0577d818109c6c2a32cfe76b999e95b552b4844cb73b56e37adce12c1f295371faf17ca5c554cf0d8523f9b91416e5ca05d7478073ce53da9ba7a969a336ede99f527f2dbf4198a0bc0e8c98eb5cc120b713a1e2b8cc14b9d8332375ef4038e3711f520874ff537425e40273a5ecb269d50e25ebfca0f411aef3d1d949f1df000ebc97de6cca89f871491de1ca433405fe0b4614c6098c629e8e56fc49b84abfc6beb3182d4f96be1ca2115bcf0cb07570af74f5ab52483d156705676500068337aa263e3d0b14359683af5a3a85c248fb7f5506f317b201a1f27f9332659cfaefe383b8f2698cef5d622a65836ae3e0fcdf48a153c64440c2c52818285568774e0f3e2104076b5bffc214f630089fedd363d28d33ea897b0653915ecd5c1398d091c80ee84139fbfc381184d70b50c03d81850319f0fc30db223def87e608c0260fa3caf5c3735fc11882a9decf90f899dcc2bb8c7616d2bfc5a032ee8fc29daccd73fdd2fa91f7ed080addbde1fb0756ba3e0ef1f663f132924ad167b5cb71d37f9b1ff6432044de6afc890aded96d12ce3975f0de6e1cc23ca0439a04adfd388a9b99e659a8d723d5ea443c12c69a5c7d57a8efaa8fb5ed0932f1ebd8c4905a72f7f4199a961f4bbd4697c82a3d3f724c1ae064f7534d21ac9574d3ceb9cbb7bd32c70682629db4a5b3ec3581c7ad12bef5e4f7215342fe8b2a34f832f81fbeedde8b43adb8c2fd1394ba1ab5d063ac4a6b0efcd50a47d21983cabfc209fcfe794da93778e33f937b7b99de330203bd730cc70c6ee2cc5afc149e90d859f3e4f422b978708c541661db040685b70da4cd3db5ac7b6730e7976f392202828500c2d0248d311eb0d45b35710a2a69d210bd805333771226067fe622d9ccfe30e079d882dc1714d67bcc0d797fadb5018fc8771857ee7e0c361a3bd42e943777f28dce5cebaef9256b38e585dd6c030c6082748d704e056404fab2d596f4c8dac583140b3275462e3126301e99f1fe6331502b1b230242cde195fd9fb95b1cd9b7de3c1656e686714c188fac3bebe19670c5ed59d6c7a09a6a807eaafc53cde56803b926bf9f346f3a9456c739965726bd684dc2020ac959ee2eb87fe67b369e54a81d84d2ebdaa88b0e17f819ade984659bcedc3b28079d0b052d96fe1df154ec2fdbe94778d39dabfa65a7628f035007f4d300f8bbf5d44fb86078a9c888b9bcff669c73b2d9bf1bfda26daaa62eea22f81ce8b1331e801a9cd3ad7007673d45bb6046ee16379d596c60a338afd6d32519eefc0b29dc30fa3709adf767074ff4d83b511d3f87b8f2eb22f0b2f895abbccedba34d1cc9676d2b64e29644036268da6a43978b448256de6bce901ce5c428ab65871d687083e1de97f3d33ac62500267fb6d385e89a23da9da5668931cd17241f1ff2b94c1706b4f54a44c7da086960ddf367bc0e50b8545b1d9cca2426f6cd5ac6436bb6a14a632f6e5157a97cf30e27a1ba9a0056a2d0068fa95c1752560bbb12a61c6ab30b5d88c88f86df033b82cf4a42ac790c61c2328412bb95dfa363c29d8137b2bce808a3f165c1c52ba1734755967fd2f283cf51837f751a3f6d69e3cf7b3a493f5ef8f3716a951666d334224c3c6098a9774c061635f53ef212929110eab078aaeea319b1046d2d453f59d2969b0b5481bacca2a4dcc85e8841527d1a5626db90059b6938c9d674374458fadd38ec712bccc5d9c7ea7b1372683dea345409dc7f32467491315da5bd90c5ed88ac6088f83bdbfdf7d569d840f5c97b074ad615d8f338ce22c16f2c5893053d115c240687765381ad243127648869a1fbd117f23dd6e6d89600876298c9bb6c1fce83744a1ad127506d4d7b5d8eb2f19a5d4c0c0e4be516436542f2eeb33cfcfc8a2b4cc077d9319a073b6eac7729ec6b65eecddac09829b3660e57dade2e524005781a8b3be052e288775bd1e022e4d7718cb213e394657e8955fbeda8f42e72c6e647fad56aedb2778ddd5e48529d770682435a134e6c0d55b67987b222c41d55126f9fb2fd74924adb6db21e2d58b2ab7c1c0dde4a9fd841bc3b39782ec5a82678fbfa730c7a0a790c876dd017b922c6e686bfb2fd9377d3b3cb83699ca59bb186679b940c8073888da4f21ca6213fef3e2de02ffbc9549259a4f604e0d6608cc75cf374920a660fdb60df425d43729b0f7c0fa3b9c406f3fa51f1e89ffabf2eb82672b3218a6a65722595ffa1726340b6ebaeccbbf5f77f325d17732e64d00dd56ec9ce3f82f93ffe7db69317407a76e1173df976e1beaa8e10c74320b77bb0bb90493430868ae5bcd3a1ab233020b40a694db86f09c4fc5a2791c6fb64fa9db7257173c907a7fd49b1f7a659c41e7e9f6c4e8828f092eb430c077d22ffd54b64b8e30b5d78d8ed31b319232f7e9c3d1c9ac0f73918a10dc53888d43bdaa44050a51e69726c764be131969028b252760e7f3573f3f497ba5d37967aba97eff2e784742c8c55388fe4c7e07bba11b9cfe1742c9cfe16bfa77773c0cf03ca00f9b5d194b31fc5782fc8e09754781f3a91322416b0bbf1b12ba087984fcbb39fcb2816f0aba13fcdb1fa062ba8c73d6d707d19747db207f4dd64fd7d8b571704cddabef854c51691ace4c30de74bfecad42eaed65284ebf323411ff0f05a56e8983a544c6cdffc7c773581beae6ac5cb32c35eacbd88f04493a199931d39e5a3a0b3514d527653d6a758dcde5c9834f712d7c3783d52c761b512e4c4706a55de8df2408b840cbf48c3cb3ebd7078dec70ae857b95056d3c2fe117c05788029f1a6639c779027913b4309220c9870f5c3715195f0752997f0d539d9e6c40fd4758083efa2053b6c36bb9f111c13154c64ecc008be3a3fa663e0d888e8b16de7e2b2df948b31dcc2c383f9a69caeda3533e3902a631dfd61a4979a037bef2ec6b193d345a3c470175a32a53cee9a3432a8ec6e758f7f076c2b6feac420cbc7037aca0b5d7c2b99ec734e2e5e9283b7d75c6da764b3fbd22870e0376567e5cb2096cbf45684e5bea4974cf18618e9d99596fdc7824102e2191d8f2c41c1abbfa0ae000abb5e7152f24ea59b3de23b2df001036b68e732bbd079c325f3ceabf906190ccb16595cfb37f1fe9800af0609692314ff52f6e9c3c11e32b0f5df651bb38048c1d206071c08399e5458afc9008365a8f00af0c69e7d933459b27445ac5b4c5a6b89051e39c57e2b7cb09502b7b15145e9eb7527b068417e8cd44dfc0f4ff5a844a5b6f0d8f2582c5da2df2173857e62496ef4ab8e13d147c6b59cc6d91414b8c9b29c3d7e3 +MD = 8f39e23091ca58c782296b757aebf5948b82bef6a39c28db9068e9f3 + +Len = 31120 +Msg = a809ca883b8cc936745d26ee1f24bbb3831ca5bf446a477588ad929759d684b94b3aeff55ee57ce12531efbe2898adf288c77bb9e1f388177470ae118680f51c036959d667cacdf4de2e7f7baae25e34c604da59c9ddea950c71542c0f53297519be8e911fe2c257e77c5d8e6ea9d65f86fc4809c3ce76d798d50c50bef928add56218904ed666f28842115d39961e5c10d64f31996e33c560c75fe55917faaa7f7d7f39bc4dbead09a92452d6513d14acbb773711672948ac6dd353a958a8565f3649f630f0d471b1d81dd40b813b6ea2d34784f45e6046c3eff20276613898bdb6002e7467af24caf7844aa2ce21513945478009fee1a8ee76445a88ddb557e0252b484e5957b09a30e21e61e2f6a7ba3aff931aecb357752a50c4a672247d11aa53ae876ed5fb6aa9beb71162c2576dd9f826edd3de3aa0329ea69ac88ff1986dffc7e74f30ef818aa07d7af98d499a4bb99f4c596b38b6b6b6692a88fd9bbd97b7fb35a4707329fc10d8634d606589b7ca68fd26613b01e021761f5a7763c85004b23b149e6ea8279730950642938246b4e7c8e3c82ac7d6663440e5043100bf6c54bf48c0ca4732bcedd9cd3cbbcc20fe867738a8ec51c00d0a57d2acedae0d79498ae8e16e4e450877f54a55c5b06c30acd0cc0a6be7c79e622ac8777f1a61b3fa649b0642058a0237b12495997653d3c09d48f58ed113a2a383706ecf8ce4a1cd1409392eb3263293d703041f66fc6e2ca453723d56cba134287298c64cbecb2b64db811aa24420f42d91ab40c78f8957ae968860bf17217fe175fe4aa116b97d1ab9e7ee180a55c37d7391e2e336aca982b93fe05420aceb7821a644d514f429ff4a71925ea058668d54beee0017608aea639fa35d0ec9e0b3209a9d2ee20399db3729eebc2fb14725da3b4d675a2c62ac3cb192220901c65c17e23bf5a56e33762717eb79dfe9cc0fad0fe56028999991ed7c95eb38da0639b184087188be6197c3426fdfd7875f127642a032a92e97611e0895ffc3de0613948aebecb07a8a08b3b26334401367f5dddd65270473c5e4765e78a7d3952fb168fbcbac482a158f9e6fb0c141154c8189e71b8562f089e19e85282b9086e9ddd6e092fa76566cf52d823cce0316757e2368ac95ea2e4c223e858bd321399d5d8540271e6287f60107f2f1a3ae9e4cb45269ff9fc5b4776dfd678be6ae36b1fa1f23726036441b7dd4c7b687693338eabff0fceb1a0a708b83320fae61068f7c49925b081716432f3e0972c45c5fa1ea12088bc012b9a14479eefe7160309dabad93ca5d2f84d6e1ebc10fa0b0a9ef7af2b69468d548705f87a44278d33c454ff331a7a8a6163c5983f774648d998b630704ff298a3f47a6545bc20be3b2ee2fc371da31a454de60afb189571ab8db6cfaf9b44c59278ddf891b6672b71bff14c35d4b4050c722bd17f936c3808d485f739d9c186b86aad3cdec16f479ffe2c69efce31dd2f6713a62d663eee6a13b0319f99dd7e8e7064ac9d7bada4ee4fe0dfa5688105369349d3851f821757a1a1f9514a0cff8cf090c25e33a6d6054bbb180742360fba9d1af4370dda455a24e7c8ef78e4ac1c81be088197ef2d7d68179d75d9d56f13db238283dfbbfada140e2ada84d8e6e59a48f9a7f6fb4dbf3b82ea719dc3a5ead3d0092c038baa5fd57189a31c7e3250b0ce20420f3fa9231c8989ab1ca546982dcce27007ddc6740fae8fc99e2930e64bb9e6e01f30b271b1a7f562c4eeb3b43f66b8f05b36f18f193187ce988e553ee198e7f2c5830c03614ab83924f48fb78f2a073d7c0b9e3998971c128a02019318f79e0a808b1860c1fe4caecb7b4d2aa3a337b7f8e03eebf44bb745e128d8bb48326397dedd6a024a4f1d3416d75e86035ec4e04039461eb2cbe3c94c674ceff5e5e31b4eee73606099b459959d364224b95956e09b665a6a941c2d1a31d0d9a89e97053f22b723bb8aac8fc63186e78e4f4f7c587af2276230ead1d93cf6e0e6a8f9f65e3eb7a4a17e60673738a30eb68d31d1264c8bfe602eba6807ed319e16b1866efa86f76bb9016a4057173cf023ff8ae5d8a49647baea155034a72379ef34b6cfb29ff8f1789044dbb45197646d22b53ace07a3bbf8ff861ade0f1f0ca69f15a904ee3ece46c76a79bd7c54b3d8736b4094ea269390db77387289b6bef37d2d7b7ff62b7ada0355ab00fbe7671c7e0787bbc0b197191a832970ab7d194c4b68c7724c515f78d090fffd64e206afbf0480b12fb71f0819147e76f8c4942786520d8a555304c9bb96e9212bb71ae892fcbbf38bb993d473b597f3d63fc80bba63ce26a573033320f1e70ad4e90c7db65aaa11793bae0496e11655e8412d6f543889e5b163d35bad1c8a18d4fa63d57598cb995cafc62f1f117a3b837b2cc8e02ab1361d97dd99bc8132e9c06da9667d51a0d9baa864aa68e124135c404ebeeac4e4962e71ba73dbca81ec0ba555c729ffca812798120cf0baa45bc7231ba7e09184947893d2709752e79e3b53e16e080d98fe080146dd63188b9348b61c2a4e0b21af9070ce265ba4e47ec3dbe4d184059ccef0768b722c854a48755bb89c9fac3c45fa9af5fba54b091c39bfd8884a725652556a4891b98b50f9c1968995620f45060b74e26710cfb5f5017224f8b7de5656cb4f168296854015b1e907ab118edc5e67813c0f0a8d7b77bf8562a958940d1ab6b77deb402d982acae59b244aa552bd83524b4a1f0eea32c88c0a20a94dfb3cac15d72242ceb9a770feecb76a0d58b1d36a98aebaee52a4b0d893e53666a12b0ffccade1af3252a48a754daec114ec9fc3cbcb35a86754c0d0d887d6c788f7476ceb15535358b11b6717be56d4bb564524b1fee9a71a2a7319d604fc7fe1697652e334e3df02c0c5eefba8d5a271d1f7a085ab6e73a6b34c30aa3d2d551e7025f7db92f71dda8688674a9293f3df669d806c5a2cd4b4f8345c7ebad213e7143ca4fcb5f9d3880b4d192b05f88eac1c200d90948b92ecff11e67704517fe35ea4a16e274fcab457fd4dc7886c3d81fc668c19e0f374f5d2cd16bfa21462bb554336587063ca05737e4b45a357c6060c58482fc7cc4478794e347e1c8183170202abe2169b9b2366ba5bcede21f2e256de88f8d07ec81cfa7e88dbfb02ac9d6bc94736a36104b73897c58ac23289bee2e1939f8371c98a5f435affc5fea3f89a8154799f1cce69f1ffd0a0d6f25341b647b24a680d0e69b087f11205dd31ce971018d69033c1e09ad9c539a2ca1814dcfa2d2208bb6162f331963b40061ec86860dc730010a5c53b0dec7caf209fde5ce04c4eeae1881d322991a200e3328d1758e778761a42bfda828d92845db1483ce357f696e94c4174572a70ccdb35c6acdf830e7bb960778122f0a2aaea16fa86ea954495397576c2a3a9cd2d56ee1a2ddff65d9655c69437d45dd5a72d969b42dc4f5e6e3bcb6623f555e0aabc2632a43f898c4f563dbf05801b530590f8d376a3cd6ca95516b79f3577d2cb76a5b518e784c32e258da0f10e73434b7a064c2c265797cff11d113e4b57ca18ea334c92be2f2cbc287ede0667adcd025386ab6b4d35066776a91d091f3df11a81989f19aed1ec80c8d7224971111bb182419b3c00aee3f94c82820799716f58a39b55b59fb42e026d6213c415e652e071ffc2a5270b530ddb70e940a23a6b5ab906166e771e18cb80e55a7e3c769d188788c8b1aa95802c8a3bfabd20e20da9299f8c4d1f58d26267299e7fcc0722df2ca35665719192ddc3aa5c85fdaf7fcc5d2f5d597faa854f8cf688d0afe209c0c81a14cb654ab1a9ee86b8a01feae64bbb7d319b7f5b591b5514c078cb4f7b40c3b3a9ea6c0703177197b51770da6dafad53b11908b5754d2c4aed7f0a95a0e98637beca6f0fb3afb5a5fcf1d6c9397f9a7784dd00fe026d7861b7ee52fe9f42776dfa7457abe7f9227834363bfd7543eab253ef517f2704a122c8cc8dd0a0d3ff1f06ef0a23c87e21d706ef86bf478404ccc655e1800d990f52c521a254cd258713894372bf7dc5188c1a239f57d7c8528d84199a49dbb429bc59f579d24cbf75122c7976c72e56705d17da6e0d4e9a3bbd36436221badd59272a51fa92452932e49798fd8205ba9213a61cda29d47f272383d92352d29d075ae03c0ddbe1ec275171a8f1392778e4766ef2cdf290017e8814e5c4224a7b991e24bf9af7478fbb2162b23934bf18d04d18632fb1aba7a9b4906e2dda4b00783b9ee1892ca19a551b14bcbdbbf323bd624b78e6af4df90e6fa07d46c1fcb20c79f5aac2c314965f092cd16516eb20137bb038db319c801681ec19f721861cbda0d1222d03ca0a40b155f6198cd0973961eeabf682c3c329b11b4a284010c3f477dc52b336eb7e60db3535c166ca1099dcaed920e9e84bb0c8d618c168c33117c7bb413aa29e7a2751749545ed00149ab398cb3fad349e118fc48caadfc7ed905819f7ab910c87fddabb1f8d669b2aa4b053883c17ce46b6cb8eadcbed437fc5f29c7def495d2c4a3db2d9811cc2db1f998818006fdecb0547db840cdc5f70205decdaec13b8f2764300cd0a569eae7337de8472fd8eb368ca541756f245460760b2168c364560e9b44d030e5b572b0952fed379080488461ba1708f791a8ce4c5963ab6fc2efe0b584381767414da47b28f0dffda68d107036997a1b709c71e523f4d52ab985445f688512be9fd44961e3a3bebb9e317124a549272f537811dd05657478cadebfd58c47b14023cf05f5fa76325ee9de1d1b80c6bec7acf41490682617fe7954a9c44a0051807f666083d7d9094c0bdb7ab14362af690f7900abe6c71e10478f98b83c3f9213f562ffb8065c722796b2108287dd5777dd7f5c8bebc92552a7d8131ddd75e16f381d29ef00612b660d1a850ba8676598a99f8ebcf19c9c3a2cc69f519813dde6ba2d75b55097838bc14d3ec93fc1483ff6221dbb92b2013b58e3941016b9d63efdfc79976150291d65f2b427b85b8dd245df900449b9e2da8eb7a7c5b3d868cc76029bf1cd3b6a7f6d837bb3ac9694f40af07c338114bfac60ab30df09e01413a4e85370fea9e6363a77fbf97722fc19d83d38a5c34306056146c5e8837146a91d164681703c2ad67f58bb75b25121b81ffe6be79ad54489f302dd6ebb0caf015104cbafcc6286e48eae4094e8c1b45354bc7c85723c09bea877fdde0b028b90b34c89585dada8c4fad111f384f51270190fe0ebe3f7a3f7f41e9db30df38aebe645d617ce8e0f1c4679a60e116bdaa2cf614fa76a98c1ea685f438a3e701b775c99586a7974083ef3f0833118865b400a490f34608fd1fa77b265d016d8bbd778bf76cce90042c175ee1028f4d532ec3c3fa60f805d629c94c0ab0121cdfa60dd10b7cbb7b34d386ebb034240e8f01be7adbab52471e265620259a9e99045c7fc35a1c35ffd660820ffa3198731f1339f2ba3b1d77ddfd941e +MD = 36c9bde3797934f63f72249f44445a50ab9fd50e70dee43ffdadcfb1 + +Len = 31912 +Msg = e6650540efb41e24f3d188de1d8de5583bcf8b61707ed7b028a1c32651c5bb54c99fad3d12f3605d4db506ea666d14598ce05124e4ec2dcb7eb4551988fd84a8c1d89ca73182f5db1888f5e4242ee1c2e612f297870dacaeb75a6bbde7fa3f67b856f905b32786a63a937c54be98f39a33ae9643c1a8fa63bddc2e9cd783939a9563ede000abbbc79d1ec4c39e73f3e95afc64aefb87bff27682c53dc16228484045a0bf80d53b452770f5b92b8788b7434485629b70a461cc9358280b5da779a044392a9b6faf28c2d336bccd9c5b0dd6ce21e70b2c50baa65911e61f3db8359faae1a9b93fbe79558daf56ec7913f2fbe15fc3b1836d05eb1a16fe63c9028524bdbfc5420f113fc7e7890ef0e7596f9ac76780f73ca048851f8ff841cb2e7018c7fc059ea54f820229ec6c42aed58b9bc662a54421938d5bb0a55d2009e3ff610ebff235c9214aed9bfff948962e4ee62778bbfff8eedb55147fb3674dca39e8db31126f452fa07085eb3c6b670dc06332d049928a583b5b954785805d8b26957579f0b5e0208b732ed7be13e819eafb2e93d7649f7ab355792258d201cdce5126c1116d619d14dedfec05a9e2fbd39465e8eeddfffc4e2b093ab6c503383a02342eff01914d4299e0529b931d5a83171df81565718511c68db726c12a757191e8ea41d738d91d8d7930083b61df036d9fead464bebd060c4dc1312e3d2c7be78a1d5f591ee8ada0f2aed20776325a7c33e7b342ae4e34e6907e5d74050461ea62eee1ed0a23fbbb92f6836123fa902e20173b6709dda33ca01935fb4aa62a84b78650fdc5310ec7a22da2b031dfae6ab0a1f33c97155cf7c3b83e2cd3bade9cd30d34f018bceeaa6a7eb85c698bbb1729ae6327209b66fd4284026d6ae7861afcaa132ec869a44e320f4ccd90a3bf1fd46514916b1ac93865a40827d5d528e57b85771fa0e237994208e66a71d2c369f9ef8de341388e8f7340d8c3dd2dcfe798c7e72b67cfaf75e1920f9dd3becddde07356836a9dbce9b682fba74a9780079a98ecbae4d715c959d54dce7d0fe863d01af8dbaef25b307490f83de4ba452dcb1f0d34e0a3707df0f82b63386e19e3130cfa51d5df744bf69257ec733f25417185d20123dbc878ef232ec5cc836a45ef70e44fa60b0d2284b1a11bbecd292cd5f1c389752625a49e80e05c01f5e271ad6e3f3cea1f319d65145d348e0d57d43f8c69349e2c90e84434c8909f6c89509430928069c2e5a4e3e5139eaba7b922f67e4b6b6596102c2a6a6eca6d9268c8eedb6583eb9d331f44494bc1dd4257fe44eef194940cae5899485b70340c86c2019a41ac385822f6d16a8e05ec8637516f04e419f1357155d7f616ecbc85ec271793ac65179aba11d27063d29f1d6301c0eaab6045ba61092c9d27a4cda3a0dd76ee3016520b04588f835390bface3f87fc5ced35742865de26517022f0eacce66d45525af5407b44fc9e5a714debd1cf4c0d6d8f176e93940756d6ca96f17e0316da2fbf71dcc0b5c6da17f6658fb5767004ad9d9fe91868df6b14c056eeafd1ee09f00f10d5947fc950f807dc5a5901fb0b23dd881862a120f6c0909b22c0c7456d49c67cdb84e786ab81321cbc1af65f6976cb6a8d10f17e9250b7ee4e5f57cf6ca381f05f10a1813239e1912599b81fa7fce3b1a791be3ab64ba2bab1ea07ee9083ae35c0a6123b8d88b2e43743ebbe5f5cb2f7f8638c07eb17edab0def5c156160c797a0d3de383604028061b7f5adf7ecb5981014df48a95bf519b2ddc8f667d14a90801859e9a4227cf025546a80fa43682c6f142c8f697e55913133d2e40c4bc3daeef219d2506a6eae02a7beb9eee7472f65eff84eb4058bac09900e70e736bfb13def8284d35274347a2076cb4e4edf1ba506b709016803c4bc60d02f51388ade0d6f486395611a0e0c6d073770f09c7bad070d40ea3c6a75ca34cc71f2b7d19bce0fc0113f1ccca539dbf4812f631bb9de5f5f78c6f90c29a36a57eb443b1085002f9df008ec089472fbc32ab22cb970b98e32233004756ae89016edbe38c414446d1692ab655a46585b07a6b194121aef0209d2be0542b3fa446e0bd94768e3fb46de7b9f0f3e554a681697965f9222bf595b09b971d09f68d5e1c82ddd7b5e953b5a1d5c50212bc9a1945fe8d5d612daf2aa3abab0cb87b4e2f6a5147177feb2b91dea4bceaf4476a5e56211ad3a85a27c8bd85a688ff75efa31252599eb4ed44eae8515d13539b1d3ae60b93c5bd5a6455474e10f8a88d76a15baf9bd51c96a7a6050230e5f760bb943be3809a69d66eba89316fc6796aed108f8d95227e8f5baf7ee0bec9a73f4d539ed26aba74764ee0cb544d593bb55bdaf417d0eea47f68eb9b128e252ddfda615700d88da6e10bae55df3119b515c9e6d272d3a2540fd744a3c028624fea6aa5ae94527bc7c0ad0b6efba46eb1333e1c73c926a457e7afa1e01415e9d6050607ebb660ec9eba3de160d02dc0f5b6c2641e42525e75aef8e99834dc2189dab46f55908b48f478c117718554774b475da61a05de36750dba061448057132117ec535475af791a14495ea42a1fb798e18cab03b529621abfedf9c79194397526cf1d30656613ddecb4313319db54732fab8280c37e53f31cb5c77ee9ffe824485dc77f305eec0d760093377cf0b7fdc0c59ca9f138b98462a65efd11f09b98fd16c6936f107e1330acf933fbf66e7335593dd1d71f0f49322e24a4721ce04dc588af0f8a212699bd27d7caff62f49e0dd4fabadd67c1bbfbbbbd17a2eb42dd3231f56619f7921b6befb34effbcc6b8aac767a78cc97d473fdd9cc92cd23fa1b3911e19870a2ce2dd931032856a715dacbee93a6daa9e857f12283b68783355da24adac69df73ba7280733829026117741a13e5e891a20129e7f3d0fe33da44067b08912aede2fcdb5660b2430b3260b1675c3c85f52424d0dd844c569b7106d8f2d35a52cc171478734d237beb51b3b5254690de6b916af4416deffa15a408b22a827a69f07cabca65bd1e2c394b9b1fe257955a6b766e14d1f54e5148efe432908a83e8d1802d41bc1504ec6b7c81522d03bc726b5f88a30ddeea149bc103daa37fe95805ce138ed5096a24f88100ec43cf78cee199553f337f358c84a3f20b01c71d2ff3b2f9024eeed07e66e5845ee53f5cb864d05e4a014ad351aa25394409f4b1e931db383c9859ba514d16a62a7fc7cad77b710e43e5e625dc62a144364a8d2a0c26a36bae2fce9a360190c0cf81fd65a47c17efcd6fc5bfb544c4ad2231f5081178a80dd7a3b1f2a53af07ebe7a549f981d216d36fd6e0354d6fbcec86ec0be817e55993962a856173f922a87f741eb3aa51a11211d4383338fa333793f84cfe4ce3898440b163714b6027ebc5759daf4ca8e860c4dead1e9d57775b54295aea3dedd7597fb80081604ddc5bc3900d16ee3eb06691dc851e04ed5001d1687fd572690cba5c27a5ba3c260ba180aeb80f197bc4cb7fb6095af62486d1119e01e774c1f04edde69a4466547a6504b5e4c354c7eb38975481fbfa64e0721cb12947ca5b4bbe0ddd27466640f24e588fda59278aec55e09e35289915278dfa8b3f1efca1e5b1f1f594e8c5513a048322e2fa1a2c90c9627d6c0a5a9f23c9b4128b9393f986d0931428540aee1c308d5843ceb6159f3d25d770c9c56b9ccf503054cf16cdf5c3fa232cafbd815e7a7f1747fc82aee1583296878c62df5a46d9cce4fa0d84fb312e0be8246671c989604934ad075d1dc390a0fa7bba6424d754cd813b008660c338b2a4d88e26250638d55308cb8b1d2547df11c05463c42acb1d74ba783bec201f02a8f6bc083a980fa3ec3658a1a72760391380b84200e645a305a0fd0b66f0ebe23ba4797fcfe8ee9b475e36058471e2984ae66f6ba1b3cb477b15155e98dda439a70a4cf3ae9ddca5aba9eb217caad5e3fc1700446f3b64f120404a9c488d53f13252bdcc9d60e2a9623f015c567a4102723ef337312318893a4a232d3fa800f125a1547265d9078fb247001ddc8b2fdcf481d1aab116eff7125a287945d7b121c8229a4dceaf533fe4e96eced482a65bc9082107b5baf223f099e2e922c2706962fa16c59f8bcea13f4fd5d6070aaf663bfc6bb506b728f61b2fd8e39d1044b13d545143a214819e0d9ebc9d3dc951e59085381c6cb69a56dd4392d07f6936e19f56d12d9df3731c9401ac8b3d6794c111ca0ea4ae5f4e2c7cfd991990774ce1d12820ed59cfac041e9e2c08d18d80e006f478b596594e614186742498df90991bf3c6e99e51353ff19dc47cbfe31e2bb72afbb7ea4da2db7406ab5b5f4c0af2c4df498b332115b45527fc4fd010758a6b95211273e250845da4c725ac64c1d21613333ae2e6544a94645de9ccbd8de66c5d712ef9c1624344894fe949cfbd2357b80b5d7148fbebf57b6eb27b916f2500a973744491dfff70ddcb11fc3606cbd0f55a5ea9f1117ebf94b713a535223170a1b04a1bfbd0a22ac7c4048e41a5b4c9f3a7a452869eea3bd9c1721150aef0046faf1947a73c13ba6fc12ac797a1c489d97a9734b2ab19b1701338888b1c4c0338f84a913c2b3a68fe4aeb6ee102e55ad05b9f161b3ef2688136ced28e732cb7271443be63a6ff7c9ce7af4dc6d0fe8200d324c269625daa35b09ab700bb7766618a6e99c3b34a3d7021de2aef14f64a90698efe451c42bdb30b06ff89fd175911e232e9055d03f4a37fe0ce03d6b7faa9a64593577689ea24ce7971d240f3d85da5f675d0a912e95c8a1d01ab1c28da7211b14946771b79b0825bd6838cf32a6d5a2406cda15f64c4c8fe8a8ff0313214323be7ba27deb27eae13f644e9ff996a892364a34cd3ad03c3e9335659ba49b69149375d8fbbddb7da0b99bb60ff6b7cbb5b57fbb2540b400347c2a960ab6881b745ffd4b69a41828faa8793f8dbe9ca7634a77ddccbc8a40e81002f0becd79d2b9508caa564270853588772ba7b5b7d45161bd0d1212a566efdb5916466de3175a31ae562ffd771b17d6301acc809bcad697d9d993c7a7eab25a97673ffc5651ed5fdcdf75599e42e81e1e7d8a83ab03895938b3d06ff464b60a3873fa0d362ad95782b6b4db58954cdcacc460438816d022643c46603d4d8156d6cd0325150aa4a54a7c7ce7289aac7e55afdc54956d418fd6c3643cc50daaecdcc2e9b87579d5b59e812c21a0cb8d8fc3705d1b657f640e2af9c87a3e3d7928c4f62c5bd9d0f324f975410f3390768d50b6612c7ae5ae09bb4fd19d0b55929729e73963b4d8836fe5b96a046391ee03a7f286fc3808962f12261e19bede7db466169f8488d8ecf2edddf5a5a3485a6f13a54cff4f8092caca2d0c74cb30a10d23f4cd22e85ab65a6c537267951c524c2e5f21ca03b64a894db53b32a314830dce1250b335f66602fbaa6ece9b865c17728083d1074213c7076f18d7e8c2ca32deffb8da040472991643594f392ede4d6aaa01a8cc9c9520a1ab33d90ef3bd18d10d73fbd52d726946ceb06df07e6f7a914c19b5b62e35128709faba880ff23c3ecc009d1bd9dc0ff7ad12af53ed761b60d74a8c768f7a1931fc0c00e67ffff992cbed326a9225f9c35ede87d60488a +MD = c73dd5860f8301165e4c1234ea90d8163e4ad5fa3f681bc353574ac4 + +Len = 32704 +Msg = d2ce7367ce01a1cb1cef96f0e71e91a416f33499e3c84015c93ea0eca4d4a9ac14b9a01722df7cd62651ee6be8c69f680576b9de942ca8190a9d228a5bf8640562bebf2d83d4542c8fd71ca7e7af2bf0e567357e773b519b0df3fd5db67062d78585da903a08b0351e28278a2f00bda67d6db060d41dc2059be9394cfc652b8b46b5f82a8fa218589ded17fe07e2ddf19731336cf3fa83bd7c27df3e77fe45876bf622e2c9ca1400d2cdf4eab67d1439f95ac58a1bf91d2d7854f71d6d643a35bcf25fa032aa2d928771c73585f8e9e76c916fa2964217bb571887d027be92fc034eb74c1067ea77828098c9bc7ce561b87e389caafef9d1e01d993fed35d34306b532cfac2cd4178ca36d8da3308e10a5c82860a0554cd6dc08345207f187748ecdd90f4e1f71da6c825069813d6f5cfb1847d7c06e9632148461f1bc1935f6633eb3f53e684c29ecc44845a0ca0dae81159ee75172624c4d37270455d666314db1c869c330ea6ad2115d094600f26c006834799d88358e52c98e731a4fa18d14ce2154269fd507e713989ebc07a50041b81176ead9995feae39e2653ad6e727f3cc59cb0dc9466f36f00ea4a06aed009ae3ec4818d1527dc2d60054817554858a4bc2ba610aff1bed09ed63725964623f2c24daacb324ff14edbf941b6df7765ad0fe75362ae0e0fdc784acd8ee3c8562ba5f7acbb763df1ef17e885b193676f00c5bafefb1a27af3b992f526620c06901f0acd1866b5aa4b71dbc5d31fa803d44e68bee027ba36796066b0fd8d295251eaa535f54990ed14ff45b115e9a2b99227b416ca057eafd95c8e84c0983af5227dbd49f4c87c2425ea4afe95ffece49428bc6c0fd386439dfe88c5124ba76b8c78b17d997bddcbd8d369e2c5dabd3164b1e013240a579e51d6e41654f00521ea4c303555cc3c60b84b112247f2ba0c8e63cda0a922791c7f660eed1b2dcab4d668a825ac422e6f4ea1df217ee049f27baee398f1a4514a913c87bde77d6e90eb6e97c31f761a63f6783264ed1c136fa703b060a01876a511badcfd1c37674273ce7d7231c086db6a5ea951151e7cf0baf2c29c36e75fb87b718d4f5c145b4609f8c7c765c9fa21f495a29a89600d12020c88b028a982f158f10719196ca128387e05372deafaf43fedbc95ac794a4026a17120f7c776fc24a9d8eec6d8df4569eec4461cbbffbea6a765d700d29b0793621a7316d9a215591c7144f6c17c3a389b738894a58eedb3532ce328f495c4d2cef33b2858aaf970b97e902bbefe830f34915348401f0e0081802e8767b1245f3889cd8ebce7f506114f64d839dc9c582abc5a8a04269bf8b2ee2dae9483a2a34f4ccecc8eefb473a472378ecaad02cdee42e2dc7a3c141657e565011363ac4963ca935437389463f3659ca1d9d642cb0fc3a0d21ad602e3e10479115cf7bdbc2671dfd85e4931318eb7e8c3ffeec8ca0fcd08ed5e7af4ec0ea9be61e9b65375f7d0f8ab6c980776c6e7b077956d21555ebd7fa0cda146991163c975421619f16876626fcabb83ae3c53980f42c7d8f78d13997ed0cf846599c10ecdee9d5dd8f8b0c178210a32426fa9f42d70855c2b0b7ddaea107c4aec182012ce57b2ab77194e8a56e83a9fddd1594944b72c275a6a4ab864f53de6970d2f6a19060c9f665a7e21ae989328cb01c02bd78f32c7202a08b692076b03f1094d691081f186212cee2bc1aaca69a4519d0068512fb7f6bb3659d3cfaa0f846ce8b45744081c22110d0d52a736def4713e6b79b58976589e6216bca67185bbc8afc05fd4b6bdf397694ab4066ef535c132c18e14c69eb0540a71bf2437f311acf1119cbc93e8203061786850e948e2c208a708076d7db87c9dff5de183d4207a6b2c80542617126ca3fb021f2c5676042e8099f5e4afcb68ab241b36dba562c15c75bd43c3e754bcaf5703b9be8a8a0812e29678d2b153b8a06469ccb5d353127381a5f413c551a0d220dfb8f671793e64419008ae0efbdd2c54dbfb990a6bde1ed4dcfd8c3db3a9bacd08a58a87de278122191ddd352e568d59e44bfbb73784dcf3c4b8a3bcd547c7d01107e15a135408088420f6a055b562081546544620c72c42ffcdd0cf40fb97be8b487144d324477983da70fd2c6a48c3e1734943c1e58b56d095b9f18145890cc9ffd0f47848edd97a72d297fcf58031cb4b313c859088b3f9b8c5a010a64a3f7f9676d58d1269cceab2920d51d7c6c64536b29d062892ceddaf7a6769ae29bafe94e9648c2129a856e245b9c5917ae5f1ee23f1ae4e382bfed24ec406cdc623d9739f2dffe5cc1041ba6449c2a32b3523ba2bb70851f74fcfd9b92272759dfe92cb0e9e52e0cf792d835429c39d46288d2330798ed44e9ee31e502f37462fafad03be321f9282678cd5bbd662d05a3480c1b895ac55acbdbb289a26cfafe9bbaaa63485c08ba35ff249f1dc0afcd5ed910e4ab80b56a010ca70fdc5a6235aa6fe3af805e02c90c6c0289cb7367357b840715d4d0647a73c939001784530f0f62a2a8f3ef905e930a91a22d47fc44e39119376b147b95095a90e2bab37695b2db10d409d75a80b220f971ac0317037c486dd1da12a1c0ab06d3402faf73ce7c2155bd2bdd073751f5627fb1715f782ff02c6b88937f0541162b9fdd40f1c3537e98ebbfcb3f8b58d2f352a2577dade5d37d8edd5ebd6bb3d2bf892c2e987a213801e52f67ac85afffd474e87e18aa843789c0413d02fae982b885844011fdcc98ba33e17af42c3ec42e6decaed975f565788c1cf6f6bbcb6e3d1c4d3f04543de6e85d3fcbbf89ee6929c315ae671821a57177d65242b542de77d4eff418855d6ab6ebaf24b6a2a535ec00ca486c9bef3f9c0bd7198ef134198d38d224f69a136c4a669b4b80814c71a0ab75428d04467a22cf881381758b68a8cd5f9a469a4633cc566a09c62ecc666c4d7d65745d109f2b4b4f07c44b2d13f01dfc1daf8ee0086541842630af0b59796d4a79c9ae34f6de0895bfff7b04628caf1274d97dc8333cb1516a650ef395ee93444633fd9ac7648dc301d90bf69ca50b0a686d6fe6fc7b2d399d0e536b61f448d3935b542a5ae5623f96fa05ed0b62ba4ac1136d22aa473ea486d2845a04b3125f2ae9baccf6881073460b70d0f5ec433c47727d6487cb6afaee5aabaac7527c50d1843868e5751ec5d8b45587a36a2e47c133aa94d92c3ca39d4ecf42f2fa0b0e51d4d4e66dd5149f169cbbf95d0504d2f9fdf99ae99539075b55f90acdd249017282982ed7d07b68c66caa106be54b47b579745eff2ceb8ef01730ea9f03bd91fb368c286b8dda88b1cb2bb314318e0dbe4f22c96319d9a1233d7ccab2b4ef27b697b7bd7035b9679f6244caa112528cdc260bc15c858ba6bd6fe5924c0e6829694e21d330efa06d58d9ff3e5aaf212cd6a6382f33988a078754742ab639af01dd03d253f1e41802a3d764f5873182557678b0fc31795d2a4695307a385c4c15da5dd326fc3ba88e49047ad870bffe6f82447b0e9b518c79c5d9226b199fc8cf28042b32991dd979130949cf5d821ce2c3b1a24fbc47a05acbc950e3a32baa968ea1e2610fb2322bc68ed9c395a1641601682ca6db8420371f0dc4cb1c287ad1d5dc019aa8213b0c2d3a339a61455e74041121fa3f2f94778a4c860ccdbec1eac55c8ec4aa937c850fb65e3e0996936293538a3531718482d42e9c8cfe13054826ca94c95e2f7efc33a96295d5bb8a4978d66e3ef97279c0c55d1035f752d153c0cd18900c1ec8da62bc48890cddcb927943d5fddf59fb99247eeaeeffa1aa735b0e2401fc87e28864971701f823dfa35f42c75a2b4f9075bb3c309e5f281a10be34bf047593556c01e1d7e4dfb64de6f17a4d3d247bc2bc503cec2f6011a892b2e8f281c16aa8f00143901c0abd9dc1f9946e8e130618d6ac2925884881dd61ffd2c4602633637b2b644b90c161589e3d37333540171a2b97a9e4915fa23fe56d993d89ed170f7448ed10284cca05e4870ca21af3d75123d9643032ef9c5887c3e665e55d3d33452085e5ccf21f2cfb9dbbc626746d4427390411533e97b0adcb60455ac0cd57557bd5d464fc89554b47eba43f0a027c9d802e8fdc95bacdc14bb0e4d15cf1030c2184e4d8b22f093c4f44464effbe7fef768cb3b53c2d39290c7d4a337bcfc0d2da3b1d105c3acf367c70b33c99c8d783e3c684c77b197c4fd6708066638f150f6da288f542d130a19514f3ef21490bc38f840af89aa61c9971318d545c5a8b2ba3602c6dac1db3e563db0f51de68a416426d4e31e0fba371a46779e3b058a98e441e1261e145e06aae6a0e491a4e29e3c329575b9741993e38ba4dfda5b0f7a1188340ba2a723f983d6cf8be1b222294db612e5c059f8467f6d41089858bfdcae638c05ecfcc59d8da87d59a2b0d189052bdd91e723eee56a35aca6f9610447278e49a37187ab5904b63aec49037923ff0e4628728455e720af78397216853029430d42c4ca5db2a59a98a2492c718097c7fd0816edd5d23f25144e96dbab2e003c47824b574540ccc0172a27be63256c0352cf38b2e72d12210144dc42fea768c478d099910a7a06c126d2691bb698e82af7dc4c85f25e463ddfcab6cef822bf9621cc241a05c4c018583981e6f44198b94cbde6d99fec47d6003ebae21026611bc2c37f54dfc7a5201bce068294c5fa38d1f28c20386da384031f5d2edf2919bfec550fd3f0e91282f21e6b81207c99142808a0ec6448c5c258eb1207cdb1360cfeff5a09d1af94bb7b9935552ffbd1f5af6ec9b09c043b0b92307e0f6455428d8b30e278fa81983408dcd8910bca4137e8936aff58368fda1f7e05983b6bcbac01883da3f415b9872a37d9a74c4e73655425093b214610b881222d449b8b3e030273c01d26c2651f7058cd1a7a1ec508828238f67fb98a2147db79973d2a160d0e721e473b2e37774bbe076d1db1d29be4395ea3cc1738aed3f85f0278dee0347601bcb489af8d294cb63d119f8e188a09c8fee5aed5c8abc6076218d6f02913e9a10fd79acce2afc3ffb29a8829f37d53afae1e907ba6c29e97173cf0245d25c9eeac32f70cd47571e92c8a601c1fc0626bc0c1098f5f6dbe15d3012ce208e4a738f65926f5df14b710ff43afbaea0db66bfb7f82775f17b50249e815af98caf21e92bc930e7ef803f5af68cfaceebfb04e92ac93ca124b03fad05412e399534b1de5cfd3bd10aa0905b16c58589a40f0724acaa5fe35923b4e0af7dd24971812a58425519850a506dfa9b0d254795be785786c319a2567cbaa5e35bcf8fe83d943e23fa5169b73adc1fcf8b607084b15e6a013df147e46256e4e803ab75c110f77848136be7d806e8b2f868c16c3a90c14463407038cb7d9285079ef162c6a45cedf9c9f066375c969b5fcbcda37f02aacff4f31cded3767570885426bebd9eca877e44674e9ae2f0c24cdd0e7e1aaf1ff2fe7f80a1c4f5078eb34cd4f06fa94a2d1eab5806ca43fd0f06c60b63d5402b95c70c21ea65a151c5cfaf8262a46be3c722264bf88f25c56bd7ad4cbb765dd3a098c1891f7f235afe26a4b97b248c9d3ed2dfc98bb03151bc05ba5aefc6ad21fcb9c63faada222b22fe5400a3b6b5807876fb5927f70ea8ecd917bc658dd91c8f7244cbf13e47ca17a0e7df42248e955e56a584342a64d2e19be9fa879388cc420b63b65e733a41c75484dec034bee3d8ba03d11a12ddd885935b9dbc9f633afecb4a865740a2981862538686 +MD = 8c9ba4cb04d93ea5b3c3f3de216461b3e58175ab9acbc32d6412d964 + +Len = 33496 +Msg = 60eb754aa18aaf922b0920b4a14bae50388251cdcaf4c94126fe8c90ab5903d7159cf50b960244dd296ed7e123acd7f00afa1ecbabc7ec0067badc12cef617d46f9dc816ed92d0835684bacab128f1fcd6c5303583f63b7fabaccdf31172d12216f5d4b3cfc3bb4d5b53b1b77446643d43ec7156790a1c859bda457d9d549888b3ac0329641c6d00e0e3a5ef938e987bfa76c875b68af9d9df4e2df69a24d3cfeecb3cc2d3254e678c3d7cbb3788f67ea36b1cd961fe39441e106ea7306becbf6e5866c44566c7490868206388bde40de5d457cba3ee448e0026eed885af4a20dc5e6b78e1683e6dfb6c772fadb4cbf268b86093a4e3827f2f9a97d1c47b55badfe23226d0b21c9c0e526b66cff514f3d51f1f798b655bde507450d91354755520eea31639ccca9ee921e352150925d9d4117cc581fa37750eba00399ac412b84689a68f453fae3b33e1c639a877686b0c975fbead2c7e0a0e76913a835294acfabc23db1c92323b959afe64afc7437326b8b0ad38829866fbafea22f38763f9e48e0240e54dbd65b655721b538220b7c97d57da4984ed517b6ef33914e9e767ab072b07c9f9b6823f1a0aa6bc2f66019eec3c8d09bbe59336ba94c90e0289bdf82f8777ef1d875ad7efae4c11567d174d10480e9faee9f3d69bb518095aafc5720ffcda7f4197b527de46567b7fcdc17dee61a434e65f3a00193e6f2c77c345c2ae7376a3ed4e5bd6eeba0c2133bec9d6907099f0e9b1305e3d17169fe32b068f14d59581aa14148d27f2b62cf9b8f602fd5e33fa41459d980e29558b2651d0824a087d41ff51a7f492d79cc35a230fa63d11bb7b75854956945a7418c69b6b4357f6760c756dddb2364f060fdd67dd6d5973789a0ed8fc3fd893ba6d4d739e794385ca0a93d07e701c433b370aec28fc586bb48093a57dfbe1bd71b3434032cc179fbf62e1e352d54a9c8464691ab7fe42e0b5548c569533b8bedf112e69f0e6da2b9f3de70c208aca4029be835a54191fbcc53f82520c8f63804cb098589d6c9411b0c22eb4b236a419726cdf12c5f5f8e62a69fc01aab6ece902b7087404094d393b1a3d44ce82de0ea69705acd33bd4462cf982cb36515ae3484f0725ec630e8b876c9c223d1682060f667e8e4693bcc415189c187a07b65565a01cd31c22deefdee1d4b8c69997ebf302d122e6a4b7482bedd3503c810726a2d1cfe65defc64d86a16c6d33b426a49b9286ce7b17cdbab8a1aedb45665540470ba8c67772cd8dc8d3eca84b0e36194f3f26fccc930602025bb6215d5fa98a9c7530dc3252fb97ec9fdcd3d550cf3257313813a2c16b085244718b4b140aece838ee8e563758533a2ec5559a21f9d7fa8f447bc54903b5ef84697fd92c804e757b6a45aacbeda9faa82f96622abdf08181d29bfdd2d7ef23422666cd50139889672d6af7b3c1827335a0fef412226534316bdd1204ed9f34a62ea9f027ccb26d24be63059adcc4eefba2f51a82311e5bc496a8cb894fae6bd90bae0a5ab28569d9a59a9c264759b325bce39a22f1033e65dc65f1060502100345dfe390cdf7c4ae6b7584ff09270ad977303d996afd253ac47a4c2615856b4b62a3427226f1c8cc975e84ce2a183b3f5944cb90a4f2576bd650a48e891dc3daec61f1a7c45cbb5bb1bc663bb3138d81ec870caea8cc1d219a4fc1e968b462d86b83b6d8b01ee68242f7f0edabff4ac4b862c89c7d71bf8499df6bddbb318e6c65705aadf021916ad177eb8d1ac6b833443bc6012bcb85bb5a696912897c90be6490a5cd8e4b043be6a31ec2094f1ff3187bcf86bbc0b6ef65538432da7db0f7ef4b5ee19186861c09e553357e82c92fbc8babd3343a9c47430784e2b71c353f8f094f9002b96035c3a4508e8447fd0db9d1228f9e207dec7beb31cc264169bdca323e83e8ccdbaf9b49de74208602b595b7fb62015aa2059569529832d4929a2b2ef4624ba63db21a3ac58f5c272150dba400f666cf53bb1ae8b1eee0bdf9fd376539d43431ce65c6e0cd883f12a2061000f7f0d469d83691d014743ae4e60f7840d481a954d8f12aa3be07d130cdfebe32a9fb540f789d828844d54731a0f875258f12b5f7a17ecbec5fb31b67e9616ca4debdeda97c18757a09b70f8d71dfb67d302f5d0272333321793524a04056a3bd5edea7202cd1f30d2ac39bde9fecc4b1807fab5e9338e9acd434f5c41806eae5f0078a5ad0ed83a971a0f20e7349262747aba6f14cb675f3385994b9ba99c9845ee09f40b097aeb6a4f61c03351b64494d5a56a4e5d560606d4c0b696e36c8026e10edba14f5fb9c8c6f22a72d8d077e5935c460a5bc30593ab462ba7c0570c8e9407cb1432ff2c4f1b10be0a3c4962d35e4f70bd6947048693a9f962b2f483c9617550b866e1b949b64df98deeb99c0a70ef78ebe84a594c085cce4c4dcd9c73f3e7fb225daff755131a7b62728989e785bcdd2a5b559a5083ef08c8f33a9d2aa5c028c689a25d0ddc06a22c6a31c2f707580bed54e13e3080c1475d45d42c3a01ae78396d7150b05b830c40386acdb5601183995785cb68a983f89db822c03e920357ef9b8589092c1018425f6d10af4aa9e2d2c5bbb86548979afebc8edfb4d15f464d76675c54b85e64a761d122410151981e31eb8bb3088cacf4e5a0f1294a12d1f7908f414faa9e6fe3c23f79173ed911d02eadbbde43d3bd24a5e1aaf856de79627c75ee465d80a88c03008b9e5d80fe9d1e6adf4384fd39e28fd943cea212ab129cb3a9c55b859d04a6ace052d7e99cd973bb5c9f6679b1c305e07208965fe58c63b10a692f1dbbe22fcd0db15893ab19e107ba2e42c9934a9aafac32adf6c73473f6969e42c983b8f0c96a4639ef77d2c8e88e8cc47d7cfdd08f68d973a7beaf401cb4d1311992ddac3a9c9e067da198adc6304745f5dd312a182e6971c34a515a6c1bae647e57e4c4890b0548cea6d0024945ca41d312a919c2636f12e9d8df259d018277784142bc4d3c387b52f61d58ba45a26295dbaa2226ae56e17c188d34082cf9c487fd9bf5efb694089b2de533b1a65c12ae96d8c5bd75bd67fa57fff835e470e63ddb3523f8f0949b07acac05c7ee43cc8db29996ef400f110535bbf4bece9446fa68c2a8e170d68d38f0f6515594160ac3dd80f84493d8670d2025bc0b51b0815e24b90741cdc669afa938a8f32e3f57e166137c45f785f472a5e1b09404620fd9ad8cc1925de0aacc24077f29132c3e56fac5957bd1a423e6456464f15d355ced61b26a4ba7b1eb2effc7365fe96918a4fa1bd64ec8cf8fc86d126b9bd286f309cfce63d631b68538ab1c71002772815be28aa147235492a9bb90170bfaf36cdf663530ea926b2389a46bc1c243d512dc5296a8fd97cfc70a8f5209ba3cf724aeb38b63c1304c20827a398b1ed50d27a6a8c43fca8cbdb75b76dcb63f2efea52836357f22a1d606c3ab0a3f6e41973a6b7397e836889ace2cf094af03379678bc7cc7e5674da560cd955271491fefe56b418624ea01d385ef9b1e469eed4b19dbe5b73907ba16b8f0f7a6a337c68393468123982d8f147923c4de2f6ac68903171f97dc9c7db669ee107b5792ec0eee8db0d494a996ca126a0c58cc1f39dccefe68ce629def110e059e450112e6ce31a15f2dccc69f60dc12d012aef4edb2c7e27fdf4d74a4931fe7ef9832104d6e1711faa3830d3f7540bece904ab428a79873c35f0fc934d919f582e96d23964af95001ca59f5cd73eaee466621b59127bb12b1b22bf3f64f76cf06cd04b5480172fc02f6d418eff934f1d5e8b671adbfaa5fe96d149d8f52c0c4d997bb5dd91dfe768cdd73df0d51b99a0bbc8b80d4dbe0abd9046c1e66af928779fdd375cffd064fedd2abb0ac29e3174636136bbd18e896ef0ca50ef2a246877643efa5a31b24f8d46afe5652fe3c2a1409e08abcd34ca1b9ea31e7d9d757354d2e8255f914d4f1af2aee18882b3f23038c65765ab7674cb811952172bb6f216d022e1f186680dafc86ed7fb25d6692835234a72d11d2f87837615463cad8cc64533569a78cd3053b039f0477e14d0911efb0a59a9f1a5568b008e903823ea6b1b64abe1cf42610f925553f3f735cf74db97bea299b97b408201e68087e1b40d39fd094ef49048ea560b2a87f6000dd8533f8fd60b3f5c4d4ebf449b91ac91b48746976a4d7f8cece5a39a8ce53e33c5703ba57c6649ee86d883d16bbf4f2969ed867ebc43d6d61d2565cd892bb7e84319d2271c12a0d9f20894b477779025335307e5cd3f5fcd86ff99eb063033d55b364d3d3f770cc699c73c164722392d1ba10ff523a7e01a2e5b861b8b5c7aa214b0f4116cfd545d84fbc11f642910e828bfe7d548e422641d227586a11753f6776d0fc82b0c4245ba8d6cf655f2deff6295d7afc45fed545c3aae54cfc988798a56e68d040c9c27436685c4a2e76a19d10c26a81d7f0892f28d79ac9edadfd45753c18680652baa286c54b0d46f7edf7e0a1eeaddab3dc5e7021eb695b221afe64de7db267fb777708920e372f1e0f97078059d8b4d52954480e49c3cb916b13d2aa1b57ec2083523a4338504d7590eaf3f24e8b0cc10ac10f115831b58858366d4373c1197e58d4aa5d3bd1288b1c64445c3f4d3903faf533cf795bbf537cd6931f19766641727ec7349b3256cb0cb36742ae97c01a7491549d3faa3faf5364c2b16ef069267aa11f8dd90c4eb1ec28db3a0ee34870f205f00f0da5bcd856619a9f06b778a9abfc11bd67c786dc25652e96e2b818a41dc3849985c6cd8af06d892c53443b37b0d05c47e9ec85a652d8c00ddc9ee720326a90c11a85d813dbe8fd0de71f174d13de4db1b1f3c1acfef43df33f000a71ea6b931a4e7b632f535484a834b0a3763f66749f6265c15c8457f6eb8c741915a0370a099410052a1140ae8fcea1563fae195f457dcb1b418d74995b67738987ee5d64138ddc1490702de9290759a605ea576c58569c25d864ca83c73276d2554f6f4fcc8e4847ef0a8ca308814229557eb12a4caf41779dc4ca54b3800699ea2dbd1ba937dce5b23add9aa2cf1346cad5b727a6ca53971e08147aa4d2ab36d313f7561dfd129476abb10e8c431584c279c9d2db4a5afab5b909642faccd3f8c9c8e9dbf5081caa8b7779d398ff169d8f579ba7ea1c019114249af9870f52a9311e340e1d4930ed4f8b1b51f081f7c8ab3375ce5632b88ad5e35cb83b1ab7e733ea5ee49fbceb767e9ffe4b13df823344d9328c400d5bfd6475e36860168a1995d47044c28ad8aee05a2baa4a42404721f0dac8efd872548a8337ef3c2a54a920837115cfdb7cfd3c65a954ddd2b76c0c21766aacb986f60fb56137177f9bfe9ca069410ed661cc5c67803314b6710bcb140c59bfd81e4bbbb268263b3cea80d1d261afc7a40e810609b92e3617f68a2770a77f705ec2bb562354a6ef8ac69787c25f47426c0b8603f35b2c8d1ccc53e8de4cc30773faaea7af2e9e7a91b9ab85186ef1c657e1411bcc6e175fee7dccd605050dcb3e4f8c77fffdf525784a24947b93959d8d171c153dfbd6f5b4915fb88ed94505e848bd8ebac9953868026a7c93d81b0d35357dbbed085197978e735820d154fd986ea9b4899a65fb8867e50509446b5f78c3ced385a0708dbffe6f7c64f320fb7747b9b114794db50103fef685df6edb7d4a7626acc81b1e5368bded01499247ad5d534c026d35b0fa5e1b19aeb20ac86d52dd7c0b8a3a937b55c473a0db92286138e14efc7f05329cfea6342dc428706f616b9d49edb534614cecd5e9af09e8bc5ec980a9b6a5840e6d0510a91eb119ac0188500ff974492ad59ddd83cfddcde55975a7b21afeee7933a275cbc68b0c4bb99c5e05b75f1a01783f511743f82004b14b8ebeb3f6 +MD = 3ca081e9116b264e9d24f12b9d8ab0cf77af56ead71d2edf24fff154 + +Len = 34288 +Msg = e9317d21ce6670cd76ae225f085d217da6e2b49bfd0414661b6cd9638164b3d37ade5adbabb8c8e1ea3ea53954f1030199874b499b327778382582ea63551dde7a7ca490d36450a29962aec0d6205084d0a0c297997ebf1ae276a5441025274c9214428971f272d82821253eb77570cef33801cd20715515c1652bb7af5f38e469ad1c0eabeb954a4284f2f91e75cba7a954f03357919f307efdfa8c6988b76fa84f1a66a9d620c18d91fe3a34aac9d79afe771167690635c143fb0b652a0eb6f60224db943b7d05b1522f48209bd3256f3d7eae777ef3ea3141167bcccca47efccf22b394a213de57cf6e6d0bd04f5ad01aed53b05acc1977fe3426c5f7e19261bdfc37d0944a14270fa4ef1dd2a73e649bac483a84fa883b823b5279322db9ced59aaf71988a6ec81ab7177d284199d4cba3d53c84e60024d615480f05f0baeb1ee4639e373bb5e3f8912d545a8733c7afbb42dee3f748da01a850b0f8925e5fa0c39a80f8c5b11fb21879c9f1dfd4e651dad64a28942a060bdeb184947b6dd3631d9e3f63912a254e36420574b343d9b8e9daa5db276c50fd9db5b26014afee70dcb5020005e89cd7d2d2306b6a4947ecd1961a8417d75fdecfa263e5c3eb59cee628f1588ab22d52d36f715e6caed9f67852ceaccc33dcb65bc1bea9f1ebbb85253f36f2895280c92362f0d6213a36ddc856ecdaae486e8d295aec360775bd9e7f41f656688e3c43a9f3d65bf1b406a9a8e99a9725ddbe6c21b514146b520720de785c0d912f09c94d694b7344e6f362ff55006a99bc735a2b195fc9874a4013292a8d9e6afd9162f70e76a88296a311b7e048db72ab36602fd0f5dfc224107f48a0b4915dbf79168f288081138dbebeb7d397721873af851520fdde83aa216d2222f76fd03f6cedfd0090865f93ed6fe77618b8f3dc85d1c5529f4c34a218e4a1f77ebf2d4310f029decf40cf70d82e2f10f0346bad614c27ad05b33cd5a0edac697209db940d26fc096536c9eb260277eb4a6fe9b0eaff247b549a030b5f8f2bbefbd642fa0c985ccb79f0b6cd7ff4a74d4cefd3abc9f1a202b78af10bfdd2073f40acca3cb54c326a33f7ffde8d0aa77f1e3e9367a52a8a8c540a6e9f23be26346a16db24af4c672fbcd20ae6f54e5fc9e9e48fac27b3c55f53a2e28d795c71e5a099dd78a3a0e1623c0941ad62c8b872d5673141f7933ac3dddab59ea6b3d0990bbf3801384e8a4bda250bfa7a7f98c40951e0f0bcd2d0021a3b4f9a53cb2c9ad30f548717604932bfadcf97e57be905ae29037f1e797163314c184927ad6b2e1f119ad2e7dd055e1329f74a4cc4917eeb7804b7c78f042d4a957973cb60779e174e70a951cea818fd22eadc57637a77e9c54a605c1c70a98f9fd8dfe6ec3632e54d3fd5fd3a19a8a51f1015ad5f8a37cf983d4288299f1f26f19e56215a9231ae96701f9229405634a8d1bcf7c0ab08c6794524f1bc78d6371434a024b172e59db2694cb9a4056ad245959bdc8ec430f6f1cad03fe0e318eb8e008596f9bd94d728942719b1502ba67fc47805d2bcf88687340c1b9ac82b69e96ccd1f3b5d87878058775b5b09e2d9ddc61c19947da89fc4eba12df40f58daacdf3f687e3906d3431c0326a718d792e8034fc1daee88682f57571cf5a1e76660c1a419ca3958e3f84a94239f6552fa26e4d8a5aef7e00a50e1f590a56420348c79c4da2745c7e02749f2f94ad99b3921cf816c1780f7acafef45330d414b6db87167519e4599f25981e551b05af976612d10bf1e711677d5eb0daa3420af386d10552936211740145a35d3dad1b6da6c674e45c9b28593493b16a023ea95be31be5508f8c189f3e33ca926cf27188ccce303a7222c8c27934928bbe08545278fe33197ea0e37324b8f0bf3974268b4090bf78c31c5735b3c7b0ba375db079a0ce7af7d16ee6826d6bb21e13b0ced7ca946f19dfd668158cb3b8601e9d3233f32339862844a66f70b28b499c26cf10a36fbbb828ef8ff46c8f0627d4554e03f882db3f03b0b77cc723e8bc23449ba8638941be2ec61354dbb0167be904888c2963ecacd4317e4cd946670059a8d91193578da65208b6b932dd85d6dd29661efe5cea3a1a458f524f806290afb1fbeebb70fc0b4315ce943a6dc0c311426b4effc46081566b5f1f627887f785fe7892345c1947727bef683ac753cb35de0c8ea630cbfd09215226ea7523af8cecd3ae968f620550a98dc7bc90bb49bb5ace707a38a907b3062ceb102ce223151b91867a6162af7e3d1e15584063d902472576e432745be46833eeabf62feccef936cc28a897b05b9534e3665cf9f3ab31a6148cb4aa440de60ba3f67789870b1437e2599b7db2695056b48f5cca242698c4dbdc45d77aaffe189d88177b6c69db196b65d0911027ecf7fb3bb660d504fb063f4b5c784a3b2eef5de95c72175bec6fc9d5de5e7427c99d49f4005aa0b6b6eeb1626f094d4fe6f44792cd0a1261968f70321b4238e974bb0330a123f1cc7af2c4a9f406ee5eb4cbfd0cdf9fe81b880d11032df8e8dd8ce5c97a3f3952a6b596fb9a91fdc7d816dae0c00acff2da2f7d0eb17ccf0e8460820f4931274de5d56fc8acbf5a444c9ba59544d516dd3dfb33dbd58e51147eae2437260d6a4e0a78c1be68e2a8fe4ca1c07d13d4e101a789e60ad7e91b850ca440f3894a6ecd751e514f5792665028c7902ab570cb0ab749f80e41037afaef017ca6fb6ec156c61482ede1451ee4918bb900923f3152ddb9de6899641bc076441bd3e4f0fe846e19cb2cae714f15e75c8fa132a6c0649b582dbc59816a8042cac30cee6772a0ed8cbe8e07bd538ecab8a88f3f3dd4da70b35a5c09f1e3a4c523e6a46038ca66b4fbc184957fd8999c3e781ce07afb0eee49e8ca132c13c88dee1b5cf2fb523064d578a2c03f5ad0dc4c92fcfec4bf8c749a5da91da67745fd67c5791f05d6886da8486b208246cf1b617d81b2c17edd94132d5b71e78ac7a44f799b3d1e93e94fe2b5303edf18deda2b9c5dd4f7d56cdd42dc73c865caa802f3ac35e57c26dd8c2343a463ac6daa88f963e3bdbe4fc4a0a7ef6479a7b371aa02c1db90c50bdf92d8783a4780a19cb85988a5d5ab4a8f9ec0dab01e33e1af09eb7efed77fbf6a0480d76442e2413fd8ca6f36c5354208181c22d91e80b1da931c28021202cdf741aac5a4fe47e90e7ada8bf904f2e2c8cd286c620314b06ed6136197e9049411eab4d79ec227f5831ef8737f0d5a996bfe53fbcd647679e6637f9022c4ebce44503d91944718f32825b29a3b56d2d25c4c4d758dab1c5adbabaf48352e2eb90922b36837e5816e782f7774b069f22a0437734e255f7cffb91f30fe418d5400dac2a4effc3607c40dacd59760cf4f1d0e30440a26ea2ec4f94e8336ca7ae21223d0807d43b0f2a0232e5b86eeff3007d4d75e1df4e3983726aa3466427f5f899eacd4b4c0df086f831457a79d625b86e29d201e31c44fe2dbc2c3114c0332c385d8201ad6288f9e980f789e0e910816d1e2187f4014cc4463289ddc498ee25c83e2f11406161ec9cc703cbeb523ec440d46c5b5b25d83d8573c431bcdab14b1034da624d3302c5daad6f2ae13637e7b0f4ba6560af70d1b428e51443ac0106dae88dde1cfff3ee6bda458d0cc081548526148d4ac89ce899f8f270a33668beec024f6cf4eebdcd17f78ddbb215a671871181bb6397e5eafe8cf52c22a16ddb0f2929f41f28e7cca6ac4dfe1c602ea87e5e09d7f145d23fa98bf530091599c50b05215fe3d4f951dfa08fdd92c79f6031b4b4c93df9ec4f629efb64a0b972e4a83f4293891a7bc68b7c5a605b72830069bc8b798fdcb983f36d0eb02eb682a1ae7f91795823f69272e7b76fc18a61f2ee1e95cf2f16c341239f36fcfd345162e46c18f99a17f21d5c8aacf20a37c29d8881dab464ce92f2b9dd7b30535a659013afdefc951ef5cf110c44d17fa02d69ff8d630e772cacff7ecee6347950489403f0eb68935e8910581784f468ee2abe1aeb37c7b0599bce3a1b7ef0b73f82d47cd64827da023548fb5076440d484104a2435ec5577de7c9b46b4c4c544f99ba4609fc1fb23082dfc06121a7b5d7fba3603ce1f2b4bf1657b66756319aa717ad28320f3a6510f63d70f28d06aac3df03197fc7340f48b2df06b7a685cf708414ecf98a5e3acc1bcad3aac34a3233768d98b41875af4043cb6d0244323cd1665958057475788979efb032ca59964f46a7a482dd9cddce4f82b3f0361e29f347e335ffd56668729612d031aa1d1e41d9ba04911d91e11a606ca02a8633ddfdae1a4a8eb51952acfc9dfc506c7d112eb72f818ae03c034dfdf1fc583c57a2182466615b1d767e6233f6fa371760b941666ce3152e858b8faf798e225e74be6c302f400d146533bac187928db3b05c9f70dbf2d91054c007fc6c1f2ef6717a205addb04da3cebadc30b68efb495443735de3757f8d91ebde6f3277270b361e5d2ad879c3d1995bf108edb528df34b6e3b3eb36aeae24543b8d335eb3a6abf24a29896316a6ae5e21cf93cebd8038fc17fc5dfb0f7af54347e0d89c7aceb83e10de5636ef2af50b930f0fa26131485f38bfa08d4af9ec002aef87f8258b4549d6d1a8b9f56657aa704fcbf9bdfc4c256e851cb40633f2d20b42a93c5ce53a5cc58be8b5d161ba82df182e9a78e82c97e0d53937eb31ed031262a72ec6e57fbf05937cf32a2308dc09f1a04f3bfdd0fdb7375fe0a2fac7d969d6e7970c92fcbabd71ce38a9b52700166289deae44209f1a33f675d396669d3526d33ed6f59a9515ae444ff61e01362df3521078c405c4325266bf260eb496a1dbd2edcb143f9736d148ffb8667cc6762d61ad428665b6271b17864169970ed27c4b6a93f9d4094862410f979682f71a971f7db3902abb20177292cfaff94bf391a87ed7ac423372ea97483db5fa1341baf44774ec3a1c45ccddaa76e8c1962aa250f13f336f5dddf0b1724fcbcb60121c49d52ca27f21bfc4c198de1dd7379f38ab8b729845cfb1fcf95578e1df27b64784ed84b8df11b6878722b05623767cda211419e3abd01596d6b85efd1daf55c30f5824384436519b951194998c9be6111a53db1a88aa3147b064a92a6d42151650deb32995d6b98a552c31f0fded0764fe116147c6a32e96f022026db72621cab146da94ba3a16dc2d3d30625bb5075b351652714c04340cfcb811d0e3a49f67985a40809aaa8f17870a38f78f3c0e7e272a57a102156a2f3dee7d5ada04b8736fe08ef51f6d4cc5ca5df2b881c743563d1518ded01df98a1b8eee13828e93789da16bfc30cd766d5efc06ac19a1ce6add9e3c309e6609a2ff5e0e04c48a59fd8a65809bb5103598abaf1bdc4011d842708f6c9f5436c1014f288234893f318b9ef474dc977fb0cd1940d94edc5e89675fae4f34dad6492e75b2f5abb7f644a94115f0c7bc6210941075ea0cd6d1086011c48ef6188ecab1d7c50d7237f7b9dfdb929c630d017c75f818f31e17b27eb5ed98d0eef7a56c13df287290f28ab9b5d4311fb872a31df939ef9f8a864912ef5df4be225d6556dbf3a5cd0dcff76cb494bb22ced4921ba73bc3935a0added95c79eff9c3314b1917d02c6f2b585f96383f74cae19149d08665b7a968db7362f955f3c6462fba4bde40804468e7d894a0aaf465f2b72cba22381fa44f62016462eff1d80d16258e8907f3011412743f28fa9b7e9f0f4ce00d8fbbb6e2d5eb561fa4649fa6790f499e92ff15cb6cb50e27cae485552e1cea7ef92661b19b93a0861fc69da0ecfa15957dff02ed5b1d7a23786a1aa3883f221ce0ea354a47bcdc3cbe82426ad6587af4259d58f862101bb2af969f0892063f4df371920b5ea981ba0d323e82b9bcd2312634787b162f6b4bbcf482f2f0149ab88d571873550c09748850e2772b99c3d2fc6ee1f3ebddd1554cfe870116ecbcb33af53910af370c02cc68cec69071b86014a735e157ade675cc3eeba17ae11de478e65471d1cce1cb25e453ef8cd7385f1b67e4d1ee12331 +MD = 2e26f0b55231e39697d84055e7426d824238dc9d7291ed26e26340cc + +Len = 35080 +Msg = 9acb6ae986cf49cd95b1b0acff9db19e8fff9515fa8ad0096f7f35526f2c6755dfb390e25c0c555dce4d091c40292011efb7e7a9a07573f3378dd70586579b9c631e6902fd27083570ef8f4596b5d2fe203821c7e6c232ca7c655b55068504804d975d1112274c9ca220aaefaa48aead4d0aa9387478f4d46590270a98be8c4bc5a3d4d6421508dc8c67c2e124ea9c659cb3e9c4f19fa35b1b95a5ece30b1a43f5cc361a36f8243b574c3fe4aba3846f35bd4732064026a5c6fc3cc2907397b20399eba595d887022b5789c0e77c4e1341b02d4c5a6265fa8c4e535646ffe9de17925b3f08be1b782f11083d817ce399e81202d8960d48a49812546eaeb6f9105a40eeb037b0c7e78c01242221ac2949516d2e9f6149b7ea10d0a6d36fa0af8ff32a0dbfc9b9739569b046396e12096ba5481969641f9a131d11b14d32c5f3a50bd91e3667de07cbefa4d44811b86b460b2c2bfe4696d968e65bdda49f2eae98cad38bdbb8296cd146673818b1a63823aca0cc25b0b75c319439929f5de2c6b157a2ba7765a188ef9581d871f7e3564ab02c64a84a890bb64e30380715e92538dbcd15d1154e446d04781e1b8b77af033e585b4dbb14cf3e3dca37a46e4cb1757ddd02b371398992bdd671dd146a2a967ead19ddac608e12888ef73e111254af6659ebe320693da8e52238803bc4ae4a99b2061fc476327b5904e19da543f530bdc9372acbe649f5a7e5ddcda78e2569b7f08addac5da1bfd5b55b88d3e87c3eabb64e501ab996c229a6c78900d07639ffed0edd0b1dc5262628cec94307d02258a7981db4e90b5693ed5e7ff09089039a33f8e88abf84fa74e5a3269cabdb24eb247d59427e8ffb0e430a761dd8460eb04ab2c6d149c881e675406887d9848b8db565cb6b810cf7c22e33352faf95a468b8a23f87c67805a55f0f57ab9bb3a165e3b83cd8f96993d6384185cf1e5e0bea07321b543b7cccd82b76bab1f850ac9c35de7431ee8e1772e99c2ea52b898c5fbec921e2b2bc1ea862df5a40f944f559343f3b1d6963cbc0c8acf858e1fe6fef66ce1ad6321f453d8bb10001a475c4c56643594470cff6e55ddaab9145a5fcc186abcfdbc48f88be2e54729b03cc61085553954f0ebde20c308c0ef761667bfea6c705976ff42e54d43079b71e31134989d5b8e64812d55bca2bea333c2a33cd4f8a87b23b34802604addcfdfb8d23b089338ab028b718fab22007ecded76d57075c1cd53038c65d46336514a4c6d966ddd3d356b594f31270d22dcb505771c359a58ba857e84820222adaa521c67d930d1f5b7ff791adcb8da824779990873acacd9dd2b72c4d9821fa04577873575ea17dead4f797904c900cb399c16cf7e4e43c1afc58ed1fecca0babd3b3b7aff0225747fdbc8ce2be0165a4d9d1d208e82e5bcacd43110445a5c597c1da79cc7118143ba14e5aec48691abdded0a9036f309074ee7f8245cb3b918fc7f3a1f708091c8e68b6e7f6134e95c751c6db30a07344e206142629a513d55c90081678dd7fd708fcfb1d48473b3d89d9bb4fd7a47ee0dabe0be7fafcb6fac6c220c2971901ad700225e2290bb57acd1fb8ed40a2d9ca25be6bacfef7aa699506448c9ce4180690253d20e38746b459cbc49db3c30d6c8bad3c5c7fbf798991037b5cce654a4a2e0b4abebce47553f684e847772fa12dd33387e1c37baac18262cd1a76c522e1135c54a4fd4acabf6cf22bd3d50d1d74c7f953221354c67b2fca42aedc2b253307c164baede0ce6183be952915850aab2da7a807b672541e61e4e30148c0dda8d2e180e8d6cf089f03902e327fc1ef39cee58e78f6fcdc12e058b7f902acd1a93b66b316fe3e01e2b30fffd45ae6548672590e5d191be7be74cdc67f5116899c0bf5022cae563f935ce40ff8f01fc1fae0ae2f9e68f6fc8ce5eb197c7f268eeb0a3977122e3f4c18c6b766878792bffde28afa242bb6a3e3fa5bb7d6d20667fc00d719b0c620b0dbb92f0d676867d5f73e9675d5aa82642b7cc5a87793db9c39b57af0eebe21f142fdf40b82dbc78c50bd79aa9a2c83c8cd34d0f54509d0b609f1c805b55d6c99b759af68be27da6b7027dba15cfbe0562fe725a52a7e0a3cd37b695febed2630a197082d0596c7fabf446661015dc297ba606cc00d38b4b6011c06067ab47a3c687da6613e6eb7c1a6dcc0f2729b5111d6664c4fd580f4acfa9c470348fb8e4773d4320c51f8d1498bb6915c98fcb44eecc06d596c9ef2a726c3d35d3f098ad82c635336257c3e19d79b82a75aca14d6623778e6b9dad82fed58531c46289778faf4b2e8a44225b9f3533adc9f4b982fa29315ffa47ccbcab7256e49449eddad454df62ab591afb245a6620351c969e3129cebaa15cbf502ecf0cdeb23b483027637c80240b3038b375ca222578aae7a1c19a3f1f4107e5ef482170acab2b1fcf37ad07a2eee4bcc303ca14399d7907a27d4e4dc29948e6637a3f5ae21e0912525deb599658bacfe980f086dfff7376d9a9357729d9c4ba31e1a0fe010854804742b2067ced150a8d69d7ea97134cadadf1fa4bb3673e09c0fb10ca77feb01214928b8ed510a5f5254aeacfed7d4724a5d4072bfdd6073d9732e950c5658e2050a9e2632d77c0084790a3a74192056447cbd69877baa2de3b35a51167d1513372156113e46715cc7ad78cf131f609f50a460321af69a354135fde9cddc6abd3ff415221a882f9ba258c213e4d1dc74f63def75803878b47b63df04395c9e08a6eda601cd83fee49ee2aeb0ee18dbfebfaf33d9c2278cd11aa4c74b63e3fb1bf372d0555f21285f41b4054b39daa7643263f407e7ad1db5a55f7f65525ac71faeed5ac6d948f43616348e8fce0186cfd8bffaa7f7b17487a4fecdfc0eaa4b3b60c50dfe42e2a98ea2cb1321b473c167372c0c60fb1ada70a0e87ab5a0b9cf989062b1a2a2d690926fe15aacf31a9f53d913f4daf9d2959820854e3a0f719b5dc62c0e5d020cf16704df2dd694dc6abc46da78befcc0ed26ac3d103363b9f6b38a8bebd4696c1438e92b52479ea368c904eb61b409cc2c42cc788a47a5782ac265e711b2dfde402ba72f91a81956e3a39dac76632ade9816099e821fdc987db1dea8499d6c4abe68c552b4a10edd21719987817466de7bc7ea17c163100038a97e36593d1998d718cbfb81d984206b5c7ee3488ec6b41b80f84b0fba4998a2d1cbf9093cedb0d0634194c2f98306088cd627955a5049c167b9a333cc904805524f5a233ff17af470b0843da81379422828bd2e800e83b4a4b785f742ecf8a75392bf6df12bdf8a68a033bb8f3d615f59fd0cdba7084b3e607a5a21c46690d2fd1b91b1f7a5c5d9729709035608a4a846dc7c6677458aa5c3888b7af905f8cc787239b5fc67162ab71f6edfa47d2b65184d75959acd2632f46b7eca8ad119ddeb1f1d42a677b8c55fbfca1521a2dedef6d85f32b5a8092d1cab9dd91ed2d94f7eaaa71f9ddf95f29100856e7681a55a0906a20373df19de62ce4f6e5e1121685b9c3e168aa793f9756807b24b226923785ea6d17978408cef5efb53f295da72a77d49ed15d59c213481b8a9478b107f6c69d463727e6481eae30b4e8166eab38dd3326de57397b4f6d3011a13c684b70dad928304f66f037ce3e628b38d3b743328605ea3886bf8e2e448cf57dbab1282b449f7d7ea485bcde8f4a93211b3fcc1033b88f61d0236213ff68ebad06fdaf40662889461d7d104799d98a3fa3c9560ed2bb2873943b5da697420e4afb7558a2943fee36404ac4a1f49beb151bd85386d98a6fee416bf36eb294d7e806acd6da756216bfab736c66060e4021d1d15700bea2a0226639a5d4e7cdc30497288c40802b9d52bd8b5a1c74ad03e66468d304f89073b08128f761ad797a114b6cfb8d2ae8dc8ff4f7202d96f4b0e341f35a2c2de0552910ce6aad5a1447ae81ee9718fc466ed7f04b51220381c1a909054ebeb4febefca37e7200941ac62ce922016c6ab0cecb2e0c6f8230b0d0981813436524583b9b97cda013d219702ccfabad000cb476ca1c9ecdd6a51e48310da1ba98029935968c40674faa8cd02ed3e00c6c48cdf1552a870e97e736a324483526cfc61e476dff5b4a2c73e150936473a219a569b91cf669a43e6d767bb256521a84e573eb925f82cb22c4b38bfb1fbb0080a91448520e9b2142ae7a3c9bb66cf85ff7168ca41b6b6cdb137ffcd6543a9a49da5a29c4b1b0083d30ae5020f6fa62a96192c503e169a1bdf6b2fdb5a086f1cdafa7d7c5ae3ccb968a7f60e2869ecc09bb650f421ff1fc33d4d9390993048994af89dcd54285dde71289f960e3aea6e97af9d5df45b8eee5446f29529a47d437308ca3842d4fc1976f4a642cacce85d116edb33bf112fc3aabf1391124d5541df90cb642bcef1920073d3b963052eb4915ad22088094a6bc91ebf2d5d121abc16fa69fb17fe8472960df0a4e1cf039c9fdb49ca592b270d39ccbe1111da12db9eac6ca20f4cfde1c12ac3aa4d11b13dc4590ad9395f0ed28032d8e4368f87c701109c0319a0a30608321674aeb37ebe873cdbf6318d46e228b7d54fd518bfa7c78cc0c640e2bf0af38dafa90c9cb34871ed85c9479d1864b9c27cf9f45d03a4768aa29389fa99140aa356f26fb6970209d2d0f98577cc80b9bd968b9e469ae698710810fed0794dd6ddd5f7e0e87415d754832ff303aa60b20febacd8bbce94b4a9bbe8a64da7dddea1f35f661a90a863db6812982af9292b204305aca4e5d7539a83c189576aebaa5877d30a3435e436d0454b7cd20306ad58663d21e928d6fcac2744b0d70c9fc36b2afad31fa9f1d799e381a7e40e1dbf1f1cfd3f72dfba3747711822b6d322b040d47dc9c134f6cea00a5d22496396e9dd2ced0f2752aa8cd327e5e7da089cf9413d03f403201ba44c8186f4e74a9ab3fa5fb498f1c8cf84b81255082df23427d52c355dcdb38ae00412a525a80a51a6de7dfbe3b68b50a65efa0e8c96db13c1636abb0b0837680a328362be73ede249f14e69f660e1567b2da7b87bfc09614f55c03c069af2e0aa3d9d64c52f3975249c99a7dbd513098a8ee0fcde49c5455a12f360576d2d17498d285445c63734c045285c9aff68905be76e82bc6457e76902ced005682f386e8aecd9431f2f45a456c13139c42a1476a11af11d350770048d183418724269a29cb19cc92269d058352dcec20e9fbc6425aaf109a41d08b31b98339975acd26c2b3e45deb72cfe654c34da3cc411b1acdae62c8999e0d6ff1417768f58b69d549f5c7b8bc6c2f652019dfeb0cec61ad6279847a4fc99036fe05da50203a8efe260d3e6d73771e1a7be32e1251407206a7686ed63b591b68ce73267fa5dcaf39fd66b2fcaf282e7edeab92ca37d1bebf12e79c4ccac0d18dc925e64805063ce1269ebfe6ce03d2fabecfb8633f34ca2f3b63974eaca5851e947a8459bc4bdabc4821dfac6e7e9e2692ec098db5ee06ef6788ea6c2f5b9883b6fdab2549f1eb03b87c7ccdff0cf27b017cf09a5a4207684db40025e1677e65873ba52b2cacf0501e2b21cbfe43827060ff28299ae54e32447162fc516db92cab911cebd2d18d39ef9a6916fa96a0af67eefabbe64c4dc5f24dad6ffdb2db419aba6cd7db0404298366bd3f629aef705cc8f2b1caeb78abbdb529e154fb576cbb043f8fb3c91797900c88b5c4a4b16bd629aabbb757714c2d247300e59bafe6a2faef73eb751a1c8be8661aaf68b90a5a6d8d2a49f4aa3fc728033f2e086747e92b0714e0bc9e10eda6dfce714b48d45011149de16795ff023c750c9ce5f018d40110f341e4162d2bb45051b8c0f3426dc0cb771c04b6f264ee22f9c0a8ecd21a19978f7da014b9cc9d6234e46e4aecf9d92c566870afc26599a77727c5affc11d10549f2550c5f56ce8ff89297b23c8ae6b1bc452fc2d79aeb7d0540c0dbff61c3d4d35e978f8630c4240d31f1bba9a755f6093086b2ba6b301e449a2ee374606e909bf0dbf0b7011ad8f35100d9bcc5c363cdb939d1d35d240585926448c3c43dc3048796e27a4e3f194b6e29aefe6c9b759a5dadb2cae723bd78c8058e95d3bde6bd515cc7386ead6f65e7e08de7126ab5cf8c56c809afabb07eb9872743357b76270c923189e8f245e35cc9f8ff4dadaf0dd3c9a4081d488907d56d955 +MD = 6668fce683b170e5d709ea9d0525912b6d366bc420e69f83b031811f + +Len = 35872 +Msg = aa8def1669079910daddde31ea982ff5b3389efaf2d6f0bcbb88f4a36b851441df8a2ad4e37c9513ed4e8b270c25b0f71bbae8a83a006a647f08175be821090894436eb633ae9742bcce4c225e6263a6b8dd917e4c0c7f7d31fa209d09114342338164c342e6c826ad25c92bc7966e8df2693e841042568e3b27ba6fb69ce976230cb403f66b4f46291aa949320bf931322599c16fea181f04578bdbd70b232dccac057e3887552a9976948584072d1cdeda4a3d4f4becb9f4513be854a61bee9629ff3df180025b630134e6a6d331d56050f9009aaefbe373df739e15b5f641e94a4b47079f7d60f1832e7480b72ee41e4f4d13365b6d25e9c7db060380dfae2dd891a4642cefc1a9c42d37fafa4cd2829fee7d0d9a6907bed21a27044ffcbeca9c785dee6f7f07f58bd738fde6b225f207854605b317125ac8d90a016975f8285ba9798faf56b93ca2d47e6fc18968d851ba7708eda0cd2671bfb5e31773e5afe0cc002e369b5fe5cfcd113ad4f8209b433416fd922cc08895753290a11e0bc8f288fbb24a77825adb6afa446728d7a3a69c2ecbe8e274e9fba289f24f9df4d9588571053412a9028e524077c24114584199c45c38eb70b26cefc0f06819284cdb6c6a0e3c935c45af2eebb92c6a6022ded4e297c96f3c49b003e17136b92d8743e5eeb5a923238b08a504f4efcb426943f48f64e59561188f88f35fffa68df4589706e2c5e9873c5f60910f518d429539a2d4abd2856685d123ffa10c07d0f9e12bb97dd60e0fc07d069df29bd8e80e8886b854d968d3fa3d7e0c1fa5057c00a848106e25b944802a402d8514d3bd3cf8474348426631de9c4122c112c81b707397119dfa13ace22db64bb006a74888518e7d6d55a60799b614496f9a7734b10bc0c6f39d44d14f500ffe5bb77b11585a026fac5a51dd93539d8a11863a502b386a375655733b3059f44f6e7078a115dc4c20ee988e3c333b87ec8f1e3bf646c13d6baf6bc870eb110c44d179c67f28a01398195886aae3357878d1aa9fae6a70e36ae7276cfaea4000e86c1a8c33f76b00e016e260b10b0b1835bf729101ff0b013ce4d1876193ae7740279bf346ec08bbffce7e45d91183112b42be37756d5b42ea90b1402b50221a56eb43223f6e3debfd28745da95e66086240d5b9941c284b7ad20fc0e2886691319e5c41a6e4d438e30b0bcfa95a7ba8e3a20040e6743ac7f791322f0da24083d92a2c7a04b8934cb8618cc4616d8c96b55187f4f2de585c66b763b4350879985775fcf3e05143cc84113f635a005f7de034b2fc40c04cb2d12bea77e121d979b26913d4c217ac634f036cd51b79be036d32c8805883dc723fd50fa1995527cef2edbb46327295b7221f5b412c426fd0633513aac390d144b99d1a5ae60c2d3e20e83a71b9cac770044d54d016c13a8dca24d9a0084ef2cf466b52c94eaeb1724244d97cde870b37fe759eaa6060e9e2aae6638aaf2409bcee2700175ba37c1263e8e08f2a1127b4177f82f6928642760c65f991407cdcb2b9b96c6b955456c588bc97d424d1e38e575348dd359a0ff2f788e3dd44bd355ab009deee83270633bba84570542d096dc6d93886d00616fd74376895434eda5cda009ec8ad8556050394348e428e5ffb6dfa9919eb3120408a5ad1e1c399935f4084f3209bd70ce36968aa54775dafdd539cb5c00e83f46341da66ea4e052a0be87e271ed683f174f30cf0ea7a00bfbe80a8d2a1c2645c0da19d6fd86bfa650adcd780ece5f3cd61ab684e79d3e15744fd0739e48e3c1ee6b38c34d3a3e00e01247547af508d685199650b290b664117d19f32b2fb7303977e8ffd027c20eb9bc642c392a0bb89edc4e97121a9f944e0045a04339071d3c80a8f118d8020c57ecc253eba5ce4fadd34ddc68a350127479f1ff98ed59f56206072b99d374963523d05fe520c6f81c8f12a538b37e6b3f3a9d557ec5263534887223d5a28038fc022cc4c8038c6e75704b6604d380fb08d2a666774902694e88785e5ebdbb70f6f8261706c6950f331746b35f8c0e6e6bc2bb9714f1651dfa76985f878d8cbac0965acb24026756ffe493019b355d21c29b2b6bda46c4afd2d3409c02ba8a92e33d4955a21f89d21688bec56a6813b1c7cca45929c1b7bb623f0f8832ad2b75d97d504af396630d315438932facb89ac5c784e3a5faa4ad131a63c8a9dde5f01dd73e1fab0f8964bad79eef6d7bb259571c6b9fb14a12118fe5dbc1dad5408e1adb31483ae363852d93303e964da759e64bb6e1ee3896751331d608481bd19c6ad9f85925aa97caf417bb055caafe291dd5f56eaf5e8844577ee100643a1fc78883e1d6fdcd8cb2c8c58dd8030c3d53583bb57a97249e0bc73d9b4ec188618bfe498c2625d4b8e8f62d372b3bf9cb451ffd65aa18231e37ecfe5347f2af6d5636ab65db2058b2ba16df257369fc4e8aef8b9481c4b2af552321b7804a1789b2bc19fd7a8fb1f0c2a52bf7551f7c3da14176a0760f8bb7e01448169c6a595d2e0915b168c688f97f2bc42b24cef1ff14a04f381b5af6de654ae22ed0c5cd3e24a84f304a6736436c05182f76eb162941a665b9c6598c695101803ed1df1bd3431406e883d4525505db9872d0162132d4ae6ab42b7dd50f300292e52428ad82e5d6dd4899a055a4c929d593a4b2dbb23a32bea5af2a39369eb8aaa02c350ae3996b42ef106dc8c9425a501089538e1deedde20cc5f15165d98e37fe7e86ac6bea3bd83a7c7f2428fde78867d26ab0dc6f0a6568046586138d0dbb6e8f900a8234d2fdb93256e04a587bff08348afc843732c935def97fc635b1a55ec3d3cddd25cb23e9d6a785a3ee6214701416c98bd4017df4da1f87044014967ddfd44ec3198f0b5addc3acdc2c54794de5a09089c1d104238a5a343458a10f1a281405daac88e47abc5d9e499ead8df04dbae9d48d3bfc50444c100cdbd16fd231159b9a3b637fd7f6b80282c1d7d2e5a0c85e1292acb6f9ac37a2c4363049248f5b686862891dd1117551fe128de8bc834b35ba7e9dd49e26df551114481b9f974814fbae744f24910805321d2a2fd369d63932bda9c59c4895bf69e2836791ed7df99a7bbf94110a02a4c55e2728d8c8dbb121bc3b1a9295ed3a452d7cada9f67faeeb56b58d44c0d7b90e321f541b24de35fe16dc341f73586e29518e6e46469fad54cc108b2e7a09aa93557d42391250402e3a07b2718569c38cfb532a0552807d7d483b2e3c7a1b01fb14bb63b0f5c46848b23816572093c2e687455155beb477bb57afd70d658e478c1c7448f153cd06c40c07c03ef968e4dc81ef84b5cf9e549576e9260fa0c5f3ecc91262a8c0bcb42693d14077644bb1c587bc24b419b07c9232718bb1d0748f83a7203115a125e8f7063f27bee5deb247e525c1cf319d6847f6c3889268fc82f7232834e6999b2d9bcfabe66412745eba36c6dc659bb7901d4069ad3fded076ade994fe79fe8eeabb5ca1fd156ebf2fb30929e525ac918c88bbee5a18a692c31e56f0fe7e6463b8ac39abec315f01adc8b8a97c7e08add620a5ac1f9b54a600cef7b6a5325fdc1004e3443446680e3141e1cff2dd247ee56bba2d8e566daca84648609354453a794be5e555c31e1782d50127f8d1748732c0560cf6c855f9320ad5894942a9116cf7be19c145e5cffaf8833beee99d5956d4f5a5196fa22e26930b9b279c1fe3537ed85c273d539a120304665583f367ba00359046cad6be0e656710bebf0e42d567d116c827fc0850aaf141bd3f1b24f4d882590f58682b41f874748f29f8925b4914f44484239d4f46d658968979236fc46869e3a6eae889c2c051196b63646d79305f2cd07ebb567d200561e1a1f5a36a544d6414b3881e6ab710de01e33b849e9fc1e19b71f51ea46af2bfe609ee3820d26df140768c9846e54e5d7bdc8a292fdfc6f35381dcf053138b00e525af969e6f662bb888688fedb7541847c3d2c3835cd8d28742d5840fb648c58d89ac272987a063cb8dae5dd5c9ec7ed43d980c5fb3621fa519714240cfb68e4dba569258b7b74a17dac09a75895221cfbe6c3c1b600d3b3b9a22a38ccc5ebb841c4140a27c053f2c1431ce73723f8198aaa20b2cdf34a5c9397c304a48abedef43fecaad5134c356be845226010f2eada6ebd22aad72ffdc7be0611fa11885eda5e188cfb3a077463e3ace23d24b799d279c298b474299c3c5f1ce63723f23edd69c03803fe2bb6917c7aae3527f02e5915589d5392e143dcc22c0cc488a488e4a70e3753276004ddfbd70fb0e044af5988a7b8eff8fef98e2f5f0907084544d6612810557d50652fa7ea8c16185c26b91bd671f06f29c73aeddd676a6a7d789ddf364b6fc8a1e16fc9dcadd097df9a61160d50bfbf0ab3c845cdad5478f62e206961710bcffb8085a9d4fa4425761438c176dec2b048c8217f57642df8556d4747d009905b074b598ffbfcdb8ac99b286336a262098c0b2be3a5135cb3453efac0ad9b66346c49d3c3793afd8d7f371946782407947d86cfb8dc424b716ca7211d1daff522d382dc8c753c13f840f0f1b062ed1a17c440f648277a61fa72b3a4a74acea4ede4ff5a34178b8391b6cf99ea1c84015b084186d9ac41061500676ba35c7fdd5c46c7370189aeb72187dbf93ccf712628f29269b49322a28cbecd5f5c7b4b0838a2e2593cf02d156f5b1df9eda33def462a3a852105a29d2553ec6619cdb98b499f59aa2c77910745db9b8247bf6fc67c5741c4672a4b60a968cc69217d51cf57e633101b4361f469ae5f7a904c8f129321b00cd029a451dfa47651bdb19b3c2a1e78754f7f2544a47d71cb1171263b54328e47a22a35d991b0f1043592203b89f031c01151665ebef0d75b1257bba9842fe35c265787618533456cd14767323e0465d9a9e1aaac7fae9b14db25d6c3eec3b733a4d6214f84d67b70d9f8f88a0f011ca85f587c95af60c5dcb304fff3599413b464cf8b0c56419af794cf5cacc5905e147bde618115ad5b9de41cbfa18c4afec7ad6b4e01c31baaeb4bf11afe28583407449ae3d87a3e673eb4949d33508e8154c9d1f195930cb4334689baeaff02a56903b58903a6baf0a76c9522126d08a343fe2bfc2f8dbebeb7cdbdc5d71435ba200157db6861caffc05346d4a6ab5f6c7c959ef8397bd6d35f28b5c22d2d9a7a1583a6627073169b71b3d03e57d23be4e7d5546c1a23fff8139e9a395313d8ed30d4cda583a345cca2d25ae58ea946146d0875e03a4ddf37bb7894b2b38e981b5a3bf22d0aba009a3bfa0d53b1f92503f47428dc01c31e973fffcab6b465820d79ff3e806b81ee0e2471110f2a8a83b9656396e9d74c6521877865ccbe623dca7669d82810bdb82f457f8da15f24063fa91be78e24af5cdb7b2e8c7d394b725a3ac1e8ad5f390506866ea992ba8f569ca6e5425450b5aacf046868508de9c8c6ac4f9895c2bc7e99d0848f68a1921cd84608cfc2c326f705086d21cd2304e815b35a0e6aa00dcbf2090b64ae7ef700fc70ceb860e5caed837086de7c6164794f392c72b361f593191b4953e9b884a90f0c7d22b61f68325325fbc7e6b0d0247d250bedf96c3c7e14ec8781a3b702c019015e374dd7ca6e7d0e140692791191a55f40a7c32baa36ed660c1963e338ec2339b91fac76b64a071219c00822ef67d2ce12c799050660ac702241b2a4f0d6339bd6025b65f56dfb1b5120d115324f095ccb7503621aa757f10f211762f026540ffc07e30b4f816010054b74b8a2f054f0b2db8aaaacb0f8d31ce31a8501838b7d7456cbcf8b2b3fd87d6c797507f3ba720e1eb546852696fd91ac4375eb95e2cd87189b1b73159f5d01a969b328ff44cb28690d9c6daf3a57b6a71b9a760560e77a75dc56cde78886d92acbd9cebdf8e148e219152cf3ebc9d2f9295d6a7b0db4989415e76248033b4c182751c1d4e09db5b16119899cb13b2fcdf5248e9ef21a289ece38fae11664a39b0682c9ed04e7b9ff6d114d4f949513490858ab17160271ba8fb05d5accea27daeed4aeb06aa89af4c66340b69dbfc795e962898d8255bc11e1b7525a2ab31dfe6aaf37c41cc6a1b7f3792a79d3a193da20a8f0a93cf951cb4bb5a2893aa8d02eff7b2ed2222b16717cbad3403f24be403694a8134ed8780f5612159103b1879337a0598182bd4149ea8d03b2e72e92eeb28d7872bfd97905883773178db789559986807a46666968c35c8177d5a8550d1cfa2a6f98e39bd66c8a84c6e1a01f9bad966d65760dd8f5928e1638117b50c4fd4584b1e0e028aa877410430656918dfc36e7e918 +MD = a329a7890561e1a012840e9dd9aca10095651b65316ca01bd6a41990 + +Len = 36664 +Msg = a9865467a9a4dd6a0c78aa643bd515d60169e501ef93ce57ff74382f774942bc10f8054058e81d7d5516666c6b6603327f37a5505d39091a5783c36a2fe03b95386af59eb75b15aa8f1f22b41eae0a82621866d8606100ebc6909218cf03d1d66705aaea90a3ccda04bb66a31b5532aef036b201bfb3bab392c42ea21d590d68e6f1ae8aa9684af3fa10bba12c04839f72b9103344d63f5804461e6ee28bf631fd5589e8ca5398deba49a8161763063b2fc909d6b57397c4643feae6e540941af359c16abd0bbd848c8cb66aa519c26b718c2452db31cbddfad61b71f021f00b1227e07a4939c1ccb7016b069ecfbf187e2de90f7eb9e18d0d343876c9d611eda0e46e7f3585ad9d85d25250ca2c0628a0d2e07666b2e4bae780c95f390600a6e6bbf1e14a9688e13c24f0b1f1d99e851ca492ed5ac5d94ecee357930859c3202cd2f30750155a7f2522cf92da7d8f153dca86dd249aca300b85697afe796441ba51fb5b0fa92b5f88f176594ec1e2c24a6c44af8ad8be48e68d877ce30beaf3d76192444efb0469adbc6d70154d9e728ab455c95528be7ea62339017eba5e1dcc2a3e2ad7b3ec85dba93d3df7c8cb0f46c840954d31d1ba95710871982bc7a7e2d38a757078ec9b5ce06d2abcda7280c7d08d79399cffe4f99c7b34f9092d785e84fb8ee2f20b93768a859d2b2c9aad52f5c5dfe21050e41bcf1bb269fa997a8b671bdbf4ca515572cf0d000d664b7e325e6f2e1136cda243306e54b0a61194b0a171c570a8c6c998d68eba2a308ddbad3513ce8cb67d07b9e7fe8095b7a0ae145d85b51c3373d82fc890334a3069ac0d9f39271b3769f9c41d539fe2d24bb100c1e011c2145f6881cc99d33511e6d998c66aa188619761adfaf31a5da11c83bcf5094228f39262d40b3302b2790d4a97d22da49add1128bda56857cfcc1a0d902288b1177615af71ade5288b11e5e851eb0b981853df3439473ac0fffb4d37c470e6c55648ef35a0d937ad8680769910378be5cb6a076f6c07efbcb7d5beea9f06aae5af0f28dea8b7b2f96c6ec8461ae135f37bcb93c09d0e11b2bd02740c6a0d5c7be874c991d370dd740485e4d8b90f912aef1e8a0e1383280cda2b77866eac85eeca1ed936672c4187186ad13532ea28f3f10af543178fba31d6f8d041f00caca61db660b4ad1264986ec89747d09981b44737db46f15a5189791086243b54590ba9e367f5ed4bd011d0453ff4da4424d6ba4e44ffe90b747c8b1ca11696ad1485354ef4e06ffe0d580489cf2697159ac212f7395647cbac72d3c32a01483f667c8b9e125d7a54a1d7d23d52c450326adf17d9c03352c17fd31aae28cc9a31d658717cc654577516f40409cdb64ec31c94919de47e531677072884a35fd4aced81b0901aad4f88f41960944ae4d6f1394b47eaaa1f92f11c76c5eea4a23ed7315f10811550a8b6c1adb087d03633e3486b02691cfe577bf589b994317d1fdb2c5a58f8bf26aa260718ba896894abc3d15c8ac24104eadb8aa6cb1d55d8c1df66db529c21159f014dc1474319e688b65c85a79c2117923a6337c532159b6a0c6648c4164206cd6e1c121e5deb1410e67250219fc52099c009a26d7a7bae638ab40b770d2be27d96fb72097ee6068c7b9a24bf743408459403518c9e8ef9f480d88a332ae28ff8a07249ce4e13a4439d5d694ac376b5dfdfd9aae945566464165a2fbf1571f783b50900367779d77f7242888b339411aec814174e18dcd8fd76c361e575df0069fd49fd099e20858625d1e7476d9503fc783bfe81be273b05c59b876bf23594f09fb9a90f6e1197a2dc92ef491981720f17d6c94be03f77c52e680b1a357a9a62c4e26c0f8c53f618bf0e0858de614831cc6ddf74262d7285d7b454bae6b6fa05934aafd3a3ee8833f8cc9b3b643c6ca7bf89a8c437f8168de806ca13adf29c22357bd82159eb373aac540ebb541ac6bc19b18c03bca849248ae7d5ec30356800d1fd51c25651ea74062fcba056033eb7026ef3f85c46f593e4dedd0f1a8746e99056807e4328892a2be438b21100bcdfa147456cc0d9012320734a4211f01e239a10cf1cc879fba546fbbfb82e18287e1fc4ea2790695519632e844ebd79d8f716b2a5668c4b2a2a7dfdc77c54546adaa36d4bf173ffd9c0d898f3fbc8295cad2cc5692238a6fd04f871b7c42cba6a3b56cbce9211a1755fa4380010d709928d06d0851973925c79e0dff9595e5511eb6065dcd1135a113df2961157951f62dfc95b6013e6182fd35dcff403912a4531e8c3de77212f95a3e83b9096a775b5eaa0ef62d8393f5e5896ca10896d43ef54166e3a4ce22ae9d9aeaee396b81371f7b113f32f1310d251b457b5b59ca7f89d13ed5a18ff52f5276d77741f6eff804e244f7be11c917105deff4b4dc35e465407c8a4a31fafa2d54d1fa9f97143c837222b62b7fdcc24be3d493a1a8d71c3c11a8882b5eb4ad62a752deceb6ae733fad33010765ec9d4c2f9bdebe49fe7552b72b45b150b2a7a6f0e29a4be01f1a8de5ee5eee9e68f675b39e3c473a4c8e6dc3ad4968c265777ed3f9c383add6b0e2cebd262d73e26c7ce25442e8e421c5d1a98719de2e4dab3e9310d1227a75c4f2da480d5070e96da66e76792ff21eca22eb412d7dfefba18ae0b04994d06cd5226af76b042fde78a6aa4d4568cea3f9d60b73fac4aecff8d83f6093574a3c5ff62343c5950b322bd218714e4fe451e36f7c98084ed86b2f9af1aa54e63254c3e285c5b3af9d94f5dd4b5aea21cd990553d115ec78e63da467b9e5f4ce3356af7bf4e5ab905177451cc592afab04f9de278b860ddf62b7f5b2fabc098bc7b28127033c1403b149b814e991153804e4dc5f1e50f2fed87a92013684f98b69e8d77833319366479cbd5a59dea14567fa9e6f0c1f1233b1f617d6efe94b59847a20f4075e90348ed0d35188e3da7f88ab82dbc749022a79aae5a8a9417572c1d6ec0ee22b90eaf196889ee9493732e1683839f257495faa0999fad5361e738c9f973d76112c161a4e4b970d672e0c2cb10cedffd23e2fcdb29342063f9cb85f24b11415b7a83253789ade67d65567a5369f8c523277375f066012beb676ddb416d8075387bbdc57a604e98b0f13d205396e799bf08ae2d8a58ef15133434025e66aabb1f9dd507147082cd98a0fd7a769d85a3fb4cfdec4f08e42805e787c1f03e755a386734b4aec132ce5df9fe516188b82afd7dc779e77dc9aae608d0e19ffdcb9cac614294ef5c47e42684a96cbf5f6a78ed22739dfbbf87e4e11f762b15ac93c7a313676e8048a7551bca6495362882d3f4c46b2033d7041e1bb5e164f753b52444060c0b088d3c69665298926eede8843aea16ca36cc2aa0bf517857f0f818fbb8c197343034ec6a2ca4ae2c11b584d3e61cdc62ada6e0b1f37ca5cba6a5a69427cc72afa044a19e98490c2bc4893e0720e325b23f6e0d9adfbdd087c1614636b8b00344ffc5424fcfc81c573170fe6a12c55980952b9ba4ad9c5f54ea35e02b93f4b4bdf6c0b7c3fca945780072ac42e14ce09556e5711482a1bbfac9275db9e120ece12c3be8424575ee55d99730d8b80023b92ba4773589554c410542a329cabd12774a41bd16d2b381b762e87274bd6888b3bc71954ee73f7af1468b9bc375529048f7d71e86cceb6566466c5a5e180c784db053b3a6c7e8aed1360c2dce0b67cd1cdc07f3d95ba6022a2b2bd1ddf2745c4db053b9864fd64eaa7bcc4294b38431baa0d82458a66ac0cbba2ebd3a73299a7c63788f36a793c444bdd3c05b963224ecec53994bd6c207109a7c08bec2b29ca272ca1efef8a77667a52a916cdbf80e78687e3afa12333fc2731d98ae0897c88784514c266a98cedbdad89b0fab5f5727bb63f0ac8347d0a9ef1a57556c6188f2421602f524f0326705e5c88b2eee67c18e0aa1aa5185228db47a2bfa179743ad532029b44f360cd5ce5afe2a8b2da70e8879363da3759d366a45fee430c1607e6177a7ac12f3c3ebdc3e2732eba47dd652ba98aba1a0aa6cba84b75ce067492e1124662296aebf72d8992aec75dc52e093d5ad3c758daff64c3e3eaa4f1265850d2e4c6102ef68316973efa0525c8ff5f4d05f3a44c4169dc77b7b16a4491c4afd9d43b07f3f26f238d55e96a9ac9add1db595eb39ce4529d34356e80895d647887a32563524617bedc65f15a355dd60b58c37997932a662199fb767a27dfb4257cc009c4b2881952f4fda6668debe45655b2c8a2f789f0f419686dc9b89f304129b97caead3ee08a677b7d21fcfa756d42c5e0681299afaf331ab8f1a41275560efde2839ac109cfb46de9ff1b1ff59aa06b45797ccfee9d6770ec8482efdfce9d1bdfd613b5019d6c43715050a2e1791f216c49ae933a5927097cf4cd7dec356481c9389081446defaab7e84659c582ff66c94b209a1f6d0242feb4fc433704f5de330da9cc5ecbcef20209547b1e42c1d9e1006b3b0a3389cbc66797e62cc7b17fa1d7c7eccd318ab7f45613ad582316c9580bf6fc87671df2786f18cd59f837e4aa296368fc39837b1330fc570fce6ed372c04c5513524f55994e076f2b10e9ab906504d7884e79a9d32c871ea18f2a76d5bfe3eb3a9f8e739d76dc523c9c5743093d34aeeddabdc2a8cb4c4ab9ffea22056d561569a96bcae99c100cfb15013988f47b558988d064287fa481b58b1e73666b0b6a2d0a57ca22003af5d2f567fd743d417207b341fcc6dc385a20db47d99d1b7c60012ce2ffcb65c5b370c7fc1d7f7a0f6ad4f492faf843602a984ae6c2fdf1418d629b9dea4a1f48bc40f75e07ef3d6dd67db733fd5157c47968648bde2daec358dde0d918129f2c76c02dde4b67e9c51b6e95b552567bcdcd3db2a7798086aa38ef7724e7d987f9797ab62d666e11adc023fa87c87c41f4ac64bfba23bb3b3ec403c921f7f34c284add4aabd76657a05b3a603b9e372cd18d99e6347b221f2970a77120b7047e41516435da1cd4fe15431e6141621baedce739b0c6ce59a4d2d566e9d1a36170cd33bc1248a55ea7952e5c7829a2ae4a7f4fb0c9b1cbc68ec358bead955baed63448215a781f57d6a863511f64de4382513dbb7bb5c1fd2f83710b36ec3e41011f254098d8d954fdc798a8b173838fe8cb27a641236f61f99bc4f91056d9dca3d651a637eb71da9f6b14dff8e620e7d075a40dd48b12998f64baf4c4659cb610f233aec240676d3e0b8e43302d44ffebb9295e906d5a085386c98abd891571eb0b61e6c24828615c316b9ef1c94e1c9d3e2e14ff4ab442e86a77278641d2a4948a62cab293336b7c75132fd84acae2675d28cd8b93afbda0985a67991032b2afe79ce70d9226f0013f3b924e1239d5dcaebfe4cfd8baed2e98d9a77084d4108fbb96b84dc56173ad084b52bdb0295b5f9b4a0736aa4465f4d48b7397003562d67ed6ab0dbd717ab258a8edb1b5080772ab6d814a68fa9c75d3c6589722b51df699e35ba7eae589b3b8fabfc491545ec87770ff95954c15243f30d2db6cf19672953336a6ce2c154391a76560d5acc593581aee82cf9744a24f515eee3f6980dd094cc8a4e7b391d48b456b00d26fd095f5c1baac688acf52bc8e794a1a9b51886ea68e0cb82aa3d90e3b3d3f481c0432b8ec007d108509d7df6e9e79aef58d272db6f368cfefbfd3832f6886873fd4ec1a104c6f2824888450785af73d06981bdf1495238f714a56926859511059c734a1d4eb1d3fd7cfea98122b3d754d16e8eb45ffc7875dd7d4a49c9c2993e85faee88088e1c81d449d1ee27bc6c8476e10eab17fef4813ecc04222ad9a527a02bd46c9926751738b0e6d5fe92da674121655eda1f53221fdcbe3911a0e0c6d64d2550694184c5907a10bf0efdca051a78ba5511263e6168f3a117e4e1ef250daa08bde0a7f495c4f07633bfc5e467ea2c351922dc5c44015ad5430c627d4c2e88a63a661f6b8fbc5a41b979b1cf9497860031770956d6d2598145f2ec30412230274f637291ba600098d9a48a34940bce40257675d31cc337cda6fd46b00ecfeab2843f68101e9929a41ca818ba702c4c207e89e77c20bd3ee2ed943aa6bb1ffe6f6262c98dc34d1e8d09ee230a2fe448c6c31728f9e9a6b4e8a2218eba4ef9b38770345db3b265287a29dc73cbd91a095a7c8801f17f68e2064e0b0b93d1445222361eec27f2ca8d9302dbcfa677b6d8053143370cebe9106578ba79da4bea23673d863d948b6295021e540143109ffdee6bb295f33413862da896a036c5d26e7f0cd519a086178aec05adcf49acbfc03fb13ce24e62cc8b856607475046e47b922c7448f3ead0b27c3d50026153fd681d8c49e5c47efe68953b7538cfd60891c723c99236bf7557d750a362320e413fb2834167fe8e906686ae48395c7d26fa467b3ebf110dedbf28c610b665e4738b261e8d30a49d6acb8048e8139f44 +MD = 3e154c0411210418104a370d2e8762d9d165cb7a09ddae3ab44ade77 + +Len = 37456 +Msg = 5a9bd8d4b9af4bafc7e2d9d14504e3a147e4cc8bde66b8b0f3d693db767c56b7b971854016b1fc78d870ec5b59b2211467168671ecf2ea95cea504ed1529b5654ce88edb29d192d370aa3d6d14a8c5959f3d9f7ad531454194f437faff333fd3dca9fa8b3938942a5638d3f0bf0f578bb901208ddf4a501c0d6a32eb7dc17c6a305bd13a900d8ae453c1b6caa20e5f5e7b0c10915466938f01b0ffa9d7fbf39212a71ccf7479fd692fedefe505ce6675ae0377707aac9700376ea61b550a2cb44835e2322ea47421b26685273076f33a1a915d119a45e3d8784b2d283f16af369bac2b4b06b57774a3d1807a6a2f8f14865ccb5cfb5800808cef9ebadc460582d3b5ff0243d48ecaccd9e9c5fd21c16bbb0cc839e70e745e3b0300b875c3b5feb8f7673f2f2b428bf324c7f02f7311a8824a5d90a48fc9dc4d2f5c0952b54714111b6aea10df1a1fe15a22e2494e0731a1be91497b028661891ab997bb43432ba8c811eb2f1b9fee5e24028592d92c6fe00f6c4cb48f3454b86d1f49f89532aa43a7632ad4055761322a70c0543d07ca09e5f68197605a1fa2cf970750d49cfbab5f688f47c5ccde2413737bd5a121abe2ea38d16c9a80290fe927b90d280785a8992803cf8486cefd87149e5f2e007835c439227a682fdac763da4775b8fdb002fdac6cb56a0c9a85305a12380b2e9bc81b015e0af0ed9a91e4b59ad1ad05e48032fbb4429ee5a884b34dbda862337a6398996b645a45d13714c298682ea889ebe11dc1bb499c62c2bbf588f958957fd0e20833d0cfbce77f9c082a84646c070bb11b7d6b92b62f06ee5b5b7117de10d6a2569c9677dc4432248f396b77dcc7a84bfcce99a2bd761af4861f5ac795973c808c90fd792c51185360ab668e7d2f8a56c89e8ca039a1c4767ebafa8f437bcb23b1f64efd3474f8d2826abdd1d9a8787b87d48db5b017cd1c4c169a986f244b34cdb5d22d7d169b48fd5cb869779b3c624258e409ac40fd8df71a810aa1fa845ae9b7ce2f8ea0ca5eda6b9f7edf6e9cb20112d9c3b4841b7287adf90c62653d3e0be38d2bef784bbc207eb9379a8b6114caeab40c514bf17205b948c638cd40883e21564a2908e609d77c4fbd2f58532fa7c8bc0b09fd45367825b761ae9a53df875970b3c3b765ee074fa938263f39ac9f943ae96702e065e8d98e0549343febf073249045ec8e12b9de0fcf08a6dc32ba3676cdf0c28aa85dbc15d99303cb558058ba0638112b1ef511c9aa5bf7056a0196b8e02ea60aa7e0b894061370c1c53fee7a3f238d02b9c1d01ef2aa997afb7b9c4849a8142a0978b452b351e1e7e2361eab638ec8dc8c270358cf7af4048f31316d31e675b0772e999809d6bf07556cd19799012a803e2e92bd6855706acb293b71c071326598094dae302973e7c5e9ed840a051bb878de6596e6c27576596da39a1dd0b1111511b9dc4fd26350dbb65bbbde21034ae240652a704a6beee1055231718b5c7c954ec56a8f5af9093fda04843cde4aff235b78c32f73ba9b0af72f7de32b9a6dc1c95a9f17489cdc985dcf264cc3589fe43887a74bc8ca457d4d21c89c37d2ae41895ec41024b38f8f48a3eb385895f2ccdd7b1febce04b3e20f1258c4376e05bc96bb21a177a8ebcba26a1925256abf84543a73370fceafe043e97782b3d53bdaf957fef3c7e2b8f5730bf93db33dd0b3a5aeeb581291ff1ff38e6bfe346f1844b91ca32d9fc9beb4c46ed3a88977eb02d6bdcf765fb66c4826e87c6141a463a2def0577884c5c4b19c7bef8e2f81d919f15166b87fa3be03e5e1f4d363dce69b71bd64fc003e9493031a94162ec1629ffd51f947f9c2bdf73760197b217f67d8786a10e09a9cf40301330c680da14d3d03a5d04b557a31cd244e358203f5af01fedfa44ddb47ada99fae9dad5488649a0a3533eb1c32e12cb4918e0f91a686bd0804676a49a8872ce473900d8cde6d5f1ae96a4fd55496bdf0126c4b54fbb3b4a0c1a3606e254935d96a2daf3c0a31333ba9bca008471828dfb9195ed35a008fcdfe9e56d227bd6b847cbbbcec7678bf765d73063d732f14896fdc6f962c33f698a3a275fb17a977ef8f845b24890aaad2edd5a8fd40a329f71afca626da15900798f5e4735bd600228cceb56dabae9d58412bafcf163b1030a3c22c0aca6e0625c5dfccc25d0caf235ce2f24e442e400f41bc423c5dc0713cf37629ca6606fff712aa556e83122cfce5083950bc503affd6d28acb7dfbf324f160c4ef15a42487689ca60137b21eb51187b2f97cdd3430e6b3af04deb13fef84c726003e121ddcadffe803e0b22d54c7a986d4ea9cd5ab5aa8d86fe8adfda596f577854b1691fecb1942fae5db02e3efb4dd666f57c6771bf92d9504b6d44f0e30de07a37929f6a833dd70b0f5456970f1de3974d4ae9c10eed7fd98936cf4d3c1830dae028ccb2e94e1eca8c89eef34a8b2d45fdc362320cffe2f0e0d6e9ccff08f1fd47b6285438675f7351bb37c222180bf9937061335e3c9b4ccec824fe9042ac57daa552dd14fc118bfb82f1822a371838badc574367361133cf84f1609477b8811590bc9bf38eed7ae65b8cb1c77ada79c061b4e0ac7eed4c4f87ef817ffabeff84e2c64f58924bc6bebf69ef8e65bb33309b2aa9b279780ceb6b6fefc75e1839a5261035b8a8a505c1293989e36a42fba802f8fd0db849ec1f8a02f9ef146ca602c52b0d983491aeaa134c2f7afafa498313d06912adeb60587e493e6ba024eb0a6a67257bb88a27d628322e99ba59a35e48216c65ecd50022b2932bc1a3c97f3860552bd7b70717e1b28c35d40ad97f963a6c757bd78f520ab171509571d2b92951956f30b290e5395cbaa3ce8f0254c7552212d90082cc7d15743b3bacc94f39b8788e1b3da01669813e16cd995cb96e12e2d2e1ea47e5f6391c4a48b715a8060faf070bbacd31eeca86fd75bc5123f70e1f243b17572502a6ca1c2123603a0ab1895866ac60be258335c63b8a880afea1478558fa39002ee91e1f7974119ba45897f0c0950311ca55cb0fa36659f4e176ec84a015560dd77a88c2a61ba2438f7f6b6ebe074ce339bca74831f25f785be98e90c4fb36b4a8c58ab43b9caaa81870743093758698f0226b0e6b90f0ebaa939e381c1e638aff7494429e79935fdbd632d5056248a98a2176a0b4d4c6e569efabf939f164f757e2462c6334e4c1463b37ca78401b9b64346acda22039fc266838429306a3905ea910a01e411782e3f9e38f50b177f51ac5a7d3b825d2765c97b3a2abd0b7dc5023746c2440c3fb31bcd6a24318d63d1a6fce616b38290a68e8aea808e21a31f90bf1df199642c0bbde71a1b3f8bee9ef9d4ed53fe9962ef7f599b12ebd3347a5ad098772c44c49eed954ec27c3ba6206d899ddaabca23a7629055c81c49b73e2a13bd3a45d291d5757f100132c315bfc9c4fb93023f5d3500d7208a68acb4d2c63096232c361a161c4c67c0a74bc3e4d72c11664b1d970321d405401924b3a0f6ce2b1a2899e7caa9a55ce725fc37f55d6ae63ccd8f5a788c320bd275d83d0f849582088223815ae531f55ef2fdf95c242582fbd1bb2dfc0b973b28c5f1d987362fa5d383fb6f2c98993c0d5677917ff406ee8d9fc998f764ac9b2b50961070d6419c65704a39aa898439dd9b9288c895b531d87fe223d1601836c160f069332a766da49437683b829bf3b40775649eced953c6b92e57f3c78311d33b276c36fb73227a36eb83464986727ce449b068681a5d3e94d4bbc36197364a2a62a1e210e3c3ce9d8d1235a8ecbe1b7835f1902c22562759fcd8aaf6f9ac0c75c9919f336c568712469d6f6475e07b0c62b17ddf96466b51d034114d547b036485c3d62ab6e58fdd3ead5c48cadf82e7f877974c2135f1c175595e2f4eac153fbebfedbe6a77cd469cc9641b93c31a531ecc463a692ca1f416cffb648f452c4d9b0e4eb730152995897aefa477942a96fc37f27016326331d91c4eb4c0512fd745375fddafc68b112c4765ac1f5b99f9bb4003b7d1501fbfe6cac1e789d50625e4c28af89092db03aeb82efb332051c4836fe1d7428dbde76661bac491db997f9f3836cf7a8101b33655b2595ae9393f7b4df49810f125f18167a314816ad02d9e20ca2b169ce669eda75a8e3cc039b2cc61a5c2e38440255e66e39f008b93760a02b0d40cea706dfa358c6182ac39649d335a1c654ff4ca26e5e22db745caa40b664f92037388068687b19cd4b6219e174c7c6f3c592a2a006d08864ea05dfdc8d50f2da440177eb9263205d9e4d9a86233748310aacb8b1585bd716ca434ca6ad7586c9658031bba9975653a404acaa570a9208a4bbd368db569b8b95a375218f2921881c43626b268e4839fd25a4c098c820e5143ea738f857421dfc94fdffbb025f90f8a96e6c81ce629aea1f275b50e69140e9a388a437e467583f962b73b987ad7e6b40da5253ce21d12b5fb8ed17ec5fc695991c2d227477b50f35923ff32f77aae4982a9f050422871165bdf8765fd8c0987dc646408e0fdebbe1d6b6f0705aa1052dc3c52e16d1274cdfcb0fd4a7b8d972c01b820aa77c1ff6295d7b49e0d2eb3d605a47376cba3c2e0c4495bb5a6c6ba51e7062f94769132e8a8aff67f75cf41dde4297a97c4a3045a9df1ca2ee6011bfc7896b94e43332c57403a5c33a6555f70611590ccc0d9e1406ef2723ea30462389bafe561486f96b744c10f410988b79564aedc9e270e029c1f927a6c4598360a389bdb54eb0f18119b8c3731052ff156d53e8794610a0e75971a0a4134853f7c38a0c4af96d9596c2fe3fa8c0114b5bb9c0bb837d695aed4c0d24c44d99326958107c8fbb09702d0e70e83d967fda9cba25e980def778ac0810166fd9a8a935dfc180ebfa10fba45ab54f8a09eb3788ecd7e4fa012774941c2f080f4e0312ddd911abf83d00a2ad463ff826a0efec80c06b50478a85f935f6be8c3b214519d1c295702d0a74ffa84f75548bd1fa5424e3649df1b1af51223652f56be9cb28a22aa15002c8da8d15e509f732439728d5b43830913ce026b94960d62a0e21c9df8fe9de022eadb576854242a24c42b513b17abaae82e4d49bbe7cc0fe14c577ea50b37cb3727b135acec2e9647289938f79809e920a1a0529e40b38408442ad431bb2ae9f5aaf213320103de14cd84e896b0e4ef458ec12e478a09ea9d315f48a5f4c061e3dc66980079ec2c131cb409204686e4de5f7986beab1768287bbc8108a03f5c8925d46d203e31a5cd7bf0449e4135ef747b9002098d252732890a2862a6f00170ee063a9a361a73c9530141178b3a388e4ace4932167a4f42c510e4bcee1b791f9dc2a6744befbe8f0db0a7930bdde8b434fb0441306007e196985e1d6008eb1e9cd159b864f7ada80fc31e1aa965276fa1deda3cc21d779664683d8de4fe80f651fbfc6e687b699bc30250b54d1c1c45f940742db4fac8e9984a2a146247602e2607379c41c31af09037e26bdf48f0c0a4e9791bee3f22629803cdbbc229b24e81bfb14cd617e630dd287f454732ca680aa1920f5734ac8acd5ecd89eced9fdfcce913850fbff8e2149ecd496d22d3c494306710d9218fe89f22d387c8da4e686e4e0450d402768e9c6174813a5f335ca85d9f265b4df205771686bb3f3ae771cfb62db40d2a89bddd391df5943311b8b0f1e359c601fe67bb048f2f3753948257e935b9a27d58f53fee70ac65e4956112b5dab20085db98d5b295eb996f7b246eaec6677b440cc12a4714ae93bbe9de386e2d38f221b0202be841f54ed4c4de7cce85c781c6cca6060eb203070032b788e783f4841da58527703b573dca9839e9121ce09a4dc12e3b09f1b4aafb9b756ce785ec9fc0e4512f112a194d9b1fbc1d3f33baaf1f12e031017ac763f4499f4b35db2a2953920bad92b641688d80ef8120715ea985e84450bdf447193267bd8c9a2cb60c1eda3c08bc88d975eae45a7b7c7fd36ec76be301070839b6fe1b5799de20962e69e26ba85748e85bf87286741a0421e82dc244aaa55ea721a08df6d9c960d4797cd220f52b9e77040053fad5c3a951fdff16f0b5609d984260e721b4229478d39ed3e457ff308d5749ae3e043f166a97848e6d88006d1501854e6192b3648826190d3d369ca9323c1dacdb6b56f2749d0553458d4d78254659ec3ddb42760e5933a7b6facbaf6e9bc2755870d0e678f7ca8cff2a0f63d0f922e93df79875115435c9d40b52ea4a5c81303d7d74997c8d1b6224c90dd91e02296de94f7d079aff679d21d1f904cd68a20513f90bb48b4740fd3bd110801849b69fca49b9d4b042104824b58aa200a56d1d604c5ddeaa0d8084ccaae000c5b711a7674e13855b0579f5651dcb6fe9fc2aa0afdd32c0e3c7252060bb45022e3281ae48c754c2a330ebca6d728610925520b6851652013d5d75f87e6e072e59a34fdcf61a443291abacefc31d8130039998856c5e854ac1b7b935ae2aed2b50f3c458f8b1ab7e2c5e048def84857543aeda38eb1d924375bd38fe7858c0a21b08264bd6f2514e7d313dcc7a115987597e2ef58bbc429363583c7c655e483ac0ccbddc1947fe48 +MD = dfbac6b114a0588e017909540e2f5fbf911251aa73ceaf5d8a52e41f + +Len = 38248 +Msg = 6deefdc7786700b70107b70dc79a8d1e1d3a05ed4b21439f31bbce2f2dff94633f002fff6bbf66385f44f76b56ed940f3c052be913986a7e958683ce1bd72c3fbd4eead8bb4190af1ca802a594733f50ab219f391c8e59487b0c477c1bb6eedf2f01b9ba2f9485057e5a622149d598cab2b5e9472ea916e32b75a5a1f745e02cdd40210d91614d20ce829f493dbaa76399e992791191ab39ede822a5752b0c0c0e34ac39a74ff1ea534a3f8437cb7304a7e621398cef1f31098d48f15e107a680c05e1a63a07784a57d8cc3901b0049625d41eee686b7bb2c68d9eeb799e31291dda48bc1130ea272054ced2611062ff5bdb11ff6dacc6a66e10acfc907b39358adb6ae4f673506bf7e7cbb620939629912183d6635b08f4473dfb8c694f9a769b32ce84af78b1fd24b94d4d06e2a7fa0fd1fcda121f4a849a3d1204cec35cd39704fd0605e615c5eff1dbffdaa59d5c1c11027342a1933eae3879ca857e8833c87c7dd0c06684aba0b7fe346683803602091f09ba89eb0acd55b9485629268074bfd84ca89f07977e353c547025596f07e3da04437e5ad03dbc59e50b6c3ca1e4f895e0843aa571d29020c7c1332ff174c4bbcda528e9784796e1086aeed47e604d3df61ede6721e4f32ff521540ba391d64bcaa8309fea330bda1b3d58f5ff2fe657f53c34538ffc84f3475730f46da5411164133e850e4942cb854a51a80c9bec6b45a7e374a4626bf3232d70f237fa2d9603b0f9a1ccd1643cae5a82f48dea87024e2794cf465dd1b7f269bc0de9d6c16010450afd0d1298b5fe3493e16a65dea37784ef6e5e37dec81dd4bb4e6c8225f9f19b18a1b75507bfdda22b778b541ad62a859b58d536b9ad0a3616bca64682e9107acc93b4e2d8e1b36af2bfd8ff6223cff3419591a38bee23577560806900b6d4aaceddea0134a4e85592c03aaddf13cc96882e7cc67b14cffe7e40e235c6eaa4f2c58743fa438fe42bb08297a8b92d8a36192a7de6b2a675f5dc66b5f0fd0cea1b5a97a6142c2a0fb4f70ed93617f9719b9b917b4c572c7f0235dadfe3cca50dee3417fa9818fdd2b70c6be6a02100ea8cb76b6041932e54ee32a24a565c3c7530fc0e29ce2e9193fe9aa1a82e01c95bd315c1130b8e355c807ac8dc90d4598aac59851afe976dbb4f47b90527dcdd2d365c9a7cf26fc8ff82b6547fdb5d85b329f483b5707a19b373bbbae7d5ddc2c97e35ff83405f70a5ba8d4c1a7d1f465b6e7410e26c001ee2329fac357e2902957347f7103b85b4b6f2a8ba95bf4127e744823489395103af539b98d76beb25fbdc3b8a0b2d0a1c9af0aea5d8e9ecadc073c6f89220945084a05685b4e449b16282b8c05c5c1530b97d4816ca4347624ec3e763e569f28ec8df797bb6306b30322e67a2eb11cf797c601e1455157bcdf9fc8e7e6b5c9244e2d9ab82c4997a29d2a6ef37a0935f7e4963d7a760a6af762ae562500a409dfa3c5695a3c6659e25acb2fa88642ceec7894c1bd7d43f0ce647470ce1ab5f3a383d1edfe5a5ddfeab271c2d9b1d22a4dda5e494ad9728baa4baea333937ff92874df830514749c343abab327ab5bea84703f3e83092a9e038e99680619469cc6ed4ad30ed95f11475a026b12d1248238d0d41bf69ad0aa62b3e139a60ace511763a0688c3771c1aca6f5651ba1e083c382a95c25ed19235041f282b3e65ba8925e8c8e0dbd614fdc97e03bb2bbf451ccfc1b89819e48ab54bf69fd803a9325b0644bedf3b981fe4fb36f49788df49eada3c73eaa2cf3a4e892a3e4bb85f93b09eb7af2eeda786f7e6fff38cd7655acfe2028c60ff7bea264423ce2c656f26af77aa6275f9e991601442c6422239c1f36e7bcba13acfe2680749162210c033811883a05b654887440d6536627043c67d060ffa565bb2693a5704e0d6c33c024d09ac31883babb2ce57d20b94ca6bb0963226df26680ec9c4bebcf2f085cada3cd38bdda583f958237cef0d7f3799c9657b2844ba6bca482fc3d915175f520576fd8a6c5a431cc26e042604ccbfb55713687defb96bce2fa3efc311f357bdc9220f0fa54e85fb38d575deb7226aa7a3c7828da8cc7102c647c8e2ae2d78f16f689184512a507e0180597eef2a4157f5aa4fc1399b844e5444d89fb46dc7d73e710c503895ad8d67983770748c4bad95e4597f69cdac9a23c2a760ea5a4e57806508db2238a210b045981b0eef9092ca9c2830ff0bf1ce79e8bb8e199d145a7b6c0b8dd7ba3aef25ae03e785fb19ecddfa423dc4fc5cd29fde9e9209de21c679ac9fce1ec57a120efc003ca059eda51627310c8049f48eddcdd8d282c47e85c0504b06c1fe6c62b356178228b114a3bd4b7d07fa99c2ea7addefb84cf7327d987e989d860f17c55be5d121e6aa97d01a8dac95fc95cccfc0356dab2e2045984b5e0cfb36a0832450d1b5819fed7d127516481d4ce51c23f5feda12f2e7c0bc201a31889958b968d8414c0b1e22ce53150ed909b330bad0625fbc575ef3aad35ed78fad76e0c0773c5d1c252af0937a439ce5c0f91eacbc4f819de13bed0bc44ec0acd096dfa03bc44faf388affd36f47e8f6aae658fcd1038b0418507ceb7738fa125bc2fe629bb73c8dad07f8961a691b932f4286b2f5c8a67a64674953d464b049b4c0e50d7e5f4f3cea6983e463f15d45b7d450d412e4fa862d46fb4ac31908d745583ba9ce02ad46597847c63226d592aa655c6c0fa0aeb0dbb63bd92ca02a467454a93f72e9813361fbed436f51ac0570bd5581d444eb80d67fb107f7413f1eab7bd6d5525cf18969bc1c6402ba092371a4e11c4918d87f876904dc0c446fe551946b7656a225d2db817d30d3a9157616e2a84456649e34543cdd6053f1e125cd680f27660546951e13b8afca66f885c53e5301e36f6427a6bfe39cb590be6589bf6bf26acb7c5b9a3a74e9d038d9d8e7828a5bd88253e1e6bbbf9718682d2eec6026de4a3deeabb7bd59e7cb69e0f8e574f45b1de593e97af9185966c257075e15e9f3eea3c50ddd6610b0a53f376c25dd3a089ae04bc7cc3e97eb85e6647847a45c3a3e45280974fb414c440303bc1184046b38bba3044255e4545f1c7b0910d626ba236a4028e44594c492fc6f711033f98addbdc4274605a69cdaacc4431f73f07c835c35f1950caf1f7574a01289b0c16f722fd6b83f1585cce0dd68addd43618648612eedf0183d65d7b1c127e6c40522e0590040954e2beb58f98fd0b20d22e258c253a25b30e49e9ffcf8388e376da90d836b46af783d0129466032079bda989dc7cd9a3f1e4cd3b59d6dcee9d1a00ee3f53f52f75b66173d0d045d42b332aefdb7c45d05a81e0c01dc4a705f5a475949f6a3ecd4be4c337b95a3d9cd1ed22e62dc5f711397024f6a01b4a75899099026d0bf9dae6a9760cb28632c0ea4611fb37cc760d3b29fa6db53d5fa3c578fbd64c9bcecee28f0a3150c6fe06f0c888ad8e024b2abc39e18391bd5f1735c80e7ea2ac262fabeff06418aed7d5620ee76b8509ded0590a6ad6da2dc1465708517a03bf8853bf46b9038ea06892da63ceb3d135a9b48e3606e5f2d11ec7b5b46546e4387e01994dc49e074e18e5b6719f24e738443dc827462f7079c001be46aa63c8c97f8fd64fc3a2270a713482b2e91d3b6436e293589921e77a6d8aed59a15f25c4f574d2e706ae7257fa15cba22d2b525bea397c64704bac457fd9df47daa78fcd78473b8e3e115dc92bfffdb9ebdda081e6a8efb58c2b437d6f64f0abc6cb6b45807d5cbfba895dd07f599584a592ba78a4b769e61d4f5184c4b2bdefe6495cbfa69dd2e60c6507007cb92f7cdae90492bcfb7750d4064afe0859b3aec98fb8be431f1abbb432dddbaca5281d0c4f238297db9490110e843bb2b05e42d12d13a3fe77b08b428136b477941bdfaa437baabdee4e1e84c6b1d04c5d3a56ada00213213e20ef27cec63d760c875f4554918d978a10768fad486e4dc6c454bf66f88e63e8e851e479f0d91084d6f65df0e9adcd6568129240bc483f7388c777005b682efe735df9214b19ef83a74f64b7087dc7d6d18d4d1f71f089e9f429750acf52faf55e5de64339725b8f54c4fa0562900f74c94110a82e19b59092e529c4b8b1505405fc3c5e4074fd1e8bf17e6a7c671ca5dbd87d6935066b1de19515ec9c15b79106935bd0f4844ca7995f6254da75781065bdf3d13b68e2d86cb3c9d10df2a932dccdc559ca32b2b129596662f14d9a1b135c147e8593e566a0cba62072da9dcff50619473602c7d1a899cb035541fb4c514d3fdfb829cb2f0a473b496f301dbefbc6c837cc77147f937b30c47b15242aac0c0663478d0cb815a109ba578591863daa428a01f1f11166781814d719ad1c7012e8a7b85032986f7391f1c05da1cc470b28dc5b26164dbe3ae172fdd1eeb869fc672b9ef5d5265449549e3e2ab6e7b473dbad4c65dc6af72e3d6d53d07174e612f25d4ff05d08806cd20e357f697ee27eeb5b6a43bc2fadbc8c728d97cde881011abb6fd242b550888ac02ace01d87d76d88519424dd25e704f10ef8a6c69a74160d4531e1e936116ff62928938aad21613b8fdd40a1965e405d70e4ad59ed55e4526be2659492e82a0541143765c7cb73d457c9b695b608231137e3b81fe97b23820f5ad7b3d05660e230b8f3373f9e4a5d909eaf41edac5617493eef9ff6ae7ca619df60cf5a23b993e05cf0877c628fdd24a5522ea4148077903d7b617db596c570ba286f9717df22374856dde6dfe95dfa26c8e341064a37f32784ede4591be7fe33561beff977961fc34cc1e5dc01e4fa6938e82e4b5b61594631cc9562b014aa91135cca932cf87f17fabce1237e7a0cb5cbc6d1ab5dfcace0ab85f698ff555c1e86b890aba34f3e8a8955427a09271854a80494edf511d33e1aa071c2b0b1fc20d8b9a90a87a34665211570aa4af4068cf92adedbcda7b6a8a5a56daa6b3173e030e77e787efd7ef0e983d47be8e8bea6e3c1163b8dc63d65741d5216d7dca7a6b7c975bd3064ce720a27d4b48c0c29e99050a6d6dd7650bfb09087cf9cba81ba94e7f7a047e01e35ac89d91fdd662d9f285ff57463c0d7fc8184769d63d3e963f0c96dea6879567ff5324c828401b30ed2766bddcaabba650e838647d430c8eaf3f83d633d385f9910a993a628e2a480b71e70d8b840e14280141f9796d80497c4fbd1d36e241fcb237618537213e63bffde6c2ed68634dbfec0a95352d387b28c5a8f02a3457f5c57224150099b6388d13fc7a7cb859c77b10d8c44af2a3783729ee1b883a46796d3347867978201ae55c8e90b3f45ff60c185313256e4fe529f4e2ebcb648c0bfc034245ec1d0aaf7b5013b22dccf47dc55b0fee5ee09c3663bf2ddd7e53a702045aaacfe318e45a9167223b4472a5a3495155c2420a26e086d1258d1b88061018b1f7a0f8fc4ba0da3a40a882b5e22b0aa3cb4b894b5e6805d370672d62479aab91bf5598278f16b811e59672e748597bcad6c6af14d151634e84f81e82da262f82485a3b3b4d10bdb687619f8736d33f2f1ee00df6fe2121aae9bc895a4c37270c492b7ca7f4434d70bcb663263c1ca758fa042082535bb3610520d8690c4224882845b6ee2322f9d8ebe16844c69a56d0fecfa1176f65ab196dc1962f98cbaa9e6c45847e381455679b9f095374c0c01fa39eea56b0d37b2c8a2b4d2e80582ba79b876fe8d1abb2a5523bd0e2b544659d6eee76a0a639a622f0aa57e6316c2a4c2c97c3be5e5dc40a864459631689d9e2e75ad085ddecbe9527db60d75a7c18e4a5f34a5f5caefc1fde450d6507057f8873508286c67116eb964ad2823a1c8a197e364e5c4b23bd4d90aa6769055bd8e6b96c0723de7b619ed25537677ea1f0433bbd5a35a8309a2c6400e1df9fd178961009c8ddb440013752a70a0786b0ee0a6514f86c027a1534bee52739451ad10f2db66224b683884d9d9cc4d2e0cdd5d760c9a36fd844b0ef17a38226839c64ca48fe4d89639a594a29c2e26a2b6d3a22d537d5c19844ffb3e4d89cf7d9eac650284df58c5a1916957da60d2db4f39d85290c1a01d0ef443bccf0c24dc66a58291231e49e087422e80fa28fae1c057266e2a2ea91009840ef3688bc98c7bfacbdbd26b54edd20109a6664f46bdf275b508898c20fa5f45836a81cc6695c3f36967fa8c21f66c162250859d5d76ccdbada815a3ace3f780cba98099a20028d784bd044a57023cc9a206bfd9e81435d135d7363bf6d4b97c0d38cfb825d491f04366566d9e1a2a62b1507ccd8ea0179e751b541ba5d48d8372a0d4f19819e584cfe95abda0451e2876b7243ff821598b96ffd70c62ec5bdb2268f90ea3d80edc50ce7702028b00641ac21ff8ce9fe3e0c00827d6d5230bcd4418a5d5ed18f340ed9e14036ff4b85fc4fad6c0b7239de51ac0ac41a58185a101383f101fe17cf7cee09b898d892f5e9de5af5e5bb36fe1cdaece157b0eb19f80513185e03b914b1c1c735c04514baccd0d139c635a411e005af619fed3780feaeae2fdd92f1a82ffda04447d54f5907bfa6b40771dfbe2dc4d8a16d7d7c038668cba3fb2c4ffe59ea3b609a09b1651d0321d133e068576890ef4d4ad2273631dbe2115120328bc22fef172142d9438f33f93dd611cc7222e259a1b29bd77d836087f45a1f27e4fb2741d488213598d0ca933668767a92df41be6b3f3afb6dfdaf23c98089ce7e5778ca25391534b9845f66775 +MD = 7ccb2e870178f79dc95032fea36b12a7a3d8822a1ab0066caac6de75 + +Len = 39040 +Msg = e5e87581f9ad6a1716f6f0a259bd2796f9b019a07a90922e23d73231b39dc02150bcc142c0334927dbc8127440f2cbe848f5b29a384f6582bb53f53c8f143d097e84721790ddfb027f40829a6b9c4be7cfd2c46ab4175ea624999cdfe26569225888af85d17425b0e8a6699c40864e9b768f779954af25a148f14da31459ee74c60fa116ebc1723a0042ee0329777d0d2673f2ae82e1617b0da2300e8db87107b1636f51468987a7ad5b3a568d368044c5c75e31a573ba3d5df66faab54a9de4ffca42be4a970fffd93b741dd48cfe483cd3e2aa242edaee1f332ffff5d617129a8d42e660b2b04a6b28c5e165419f2274dfa7a269da66963ba29b93b3268a9968f49650eea112914b6b5528aa1d0cd95433d5a1db3f093d988bd8f158009c82534667845e2ddedc614c4b7d0ae8ed75c317932de22469ec2036119e4d2df5d442cddc0b161ebc319512cf65ed69e9ffabd209d0e6532eabbaea6c23f9753e971ccf1e6c803c539acf070b6abb69a97ef3ad60114f9201804ef11109c39f1fd3cb95542f024e4c1ef7712413ddb0d5fa83f0c07886aa8a75c59129d815753f913667a7dd061e4ec5f59945e8b906147b43e3508ef16370910513dc1656bd47d9458c3ffdf3720298b1c79472b8330e0a1bcd39daf9845bdcf7bf514ded40deb1e04e43173113109e1343393842fe6caef3f8a2e506d7f55f83dcb10444c6ad23eff3dcb428c91fe004545dc3c030d670b3aab4358122e32192b423c4c2175c365ac4315b405bd7646a4328999891f356432c9754d02ed02a0a8dd014cffa92f209096b94e193e2342f59c14434e96c6b8bc672ca5dc36283d5b0e07cd338f760e50ab1e77337e55839db514cfa00e8b473bf6d1d8fa84133d9657a8436993487d40e2cdd5e108bd67214ff37549e103be461b2d7cda7164200f3c6b561e5f170bf5f03fd0ae679b8c04bf48fa98a8c07c4f2667f818689b930a4ed96bae4d5218f435fcfdf815a060dc757db618d0320fdbbb49e120e419f53be17b0aa5e89a42a0368dc46a8d4c640d151a4e46f1e8f7504c2bbe807e7fc508a6b899a1ab5017ae745aba5258f0241b10a7199f8845b1615b85e6b3922d90f5012abf0e1003e66361fc565be34c1f8afa9caeaefdd8cc635bf10036c9b3d7858349e167b1265d53a1db0ef3c6b0c4d1357373e1ed32b6fadff571867fa3073e9f7e872b0947db13968f6aa66dbea28243b41fe4b0c3ef8c69fbe12f3e6bae84c86136e482e8fe17c271efd062d63712b7e6f903f30d049c5c7ca59d807e4bfca07a7700a87a24d4b83b152e2097f1070474a5dc2e8e64af5a10555de06b5e0a9a32ae2bf48beddeea43610c41547ed3bbf59cd9cdc8ae39d52f66ecc8b36333181262b2f18eb79acb1359e72fcc2f0d40d244994b3c3fc0405250d6c3d6da1acca22b322a03209ced33766b464f802825b333773159a7d73e01b9884c5641060a5a7e260889a759c31c3cf54f6f2098fce0f0001ac154e320b5f79ddca2369963b3c20b0772ca55ef461411859b7ee41903f0d061d3f5789af79163ff5b09596b369d5dc15ef815c439924ca354f9ae1c94bc54a131d81c0f4f2d972ee157ba836b669aa0bebf2de47f4e13034c3f4b6a0bc8f9434b9b21e0151293d5c5a0214ecac44e30128de2b27f9de13fc1ae30a3e18d5ae281ad3ecff1e6d69e8851421fcd2ce4f9eaf2f8c0c31843a355c5123cbeafe5e9848cd7315e20fbe39a098198fb070b58b87cb491e223b6f8892254a6eb7726d2c4c86f86c237604f8b27542cccf90de70b89caa84566c789cc347c74f0998a38b2de8c62b6c0a03ccc495e5dcb69893f34b88f667557d1e1bf79ee29767dac75ef3da247b4233835edddf49e6edee9abf477977eea5d829aa3614e36e5a9fa34ca64359842f594b55053bb813fdfcbb7ab4567342d0e361f3899011fb6950fdfe4f0dae6dbae4245a4491788b6d28c0cd9a07338a5e088e9ef7fbb6671c539e1bf61f6b5f6c3cd615a3c9d275c5dc6f5f0273ffefd5ae7753893b18d9fb114e4ca161d881cbc9292d29cc0ef98e7f92d9f3841f99bf3ce5b946397f7a8ff2d4395abb3cfc61f4e54bdf8074414f79efe27621daafa31ca07836dd35725f5ffa892815e1f7b623d116cbce4c7290314f239232795a0ab57039611081e8f3be86e514570d9b50bfb637f79eddb7da1179434fa044c17b6f1da4d0b8aa04d47841f424690910b9315c556bd97036b38037ebb551830d7eb26e608abef9f089f6f35f62331d7d79e08b192e654d17a6e64fc3cd2e7e659be62c16970bb6d19a9f64cdd69e900a16330b2a472cbc8338ac8a729e1f7df25b731f6d008629d290da5be78790ace11a94a332c11505a2f338b0a1300dc7db45c20f0ecc169918f211a2557df2b7270d6a1dd6a1076f9b5ef389f78cdea549e239c4a003a550ce48abffbec0adfa07751c3fc0f1ec43970145dc1db97c5f64b84105ccae1a941a1b103bca59a7bda7dc14d298b9abcabd659773babfcd3d5351439c3ad35cae24f1a71e224fca482fc9b99d05ff2c4936114f1477a7bb863f35a54f917d55e61555da6f6eaafde2c8c5736ab0cd570b298dd788fc782d844fead1e779b1ec8315cc10f8557227d49a57aaff412a1457bf629597f03a0a7dacfa2d2c9c7909cf4be0b27f80b03267cc07c6255f1f4b741f17f308fcf63cba7ded23e59fdc9410e01826cd976c05e0865d2fa4b2b2e4ab733457a5c7b3aa83eb4919dc2de3768ffcfcd5aa41ac888af2e24e44e3edc744e0422b34fa793c201e9879d7ec949594c51527dd267aa3ac351d89cd9ad8dc8790c8d67e3c50dad83d61aa9f84f9da6666ea8530efdd3e8d7a9649067e7a0cbbab4ec04b36416cf4712d14fc9e1a2d4f0504556944de4176e7d6f7b838db3d2a585c51638f53dabce1831fb5e2fd7795cbe90051cc8394afa464f9ab7003581ac07bf18df08f0c78b6eb3394f7ac9e81df23efb030d62080dac8b9a7cdfb46d40b32089301fbeb7017edb85f862f8c5b693a894e18dfcb31b18b9d74f7caeda0600afe3b69a25dec2d1216df368c276b93b435f22aa57e0950340fd9977837c5e78a3b4ed1894b331fe1b5dcb0cd59f8831b5d6611302251e04b76a0550e0b8dca3a2793e0ba9e8e16e3fe1e9bfa094c61f6687073889d5288593a8fd893503e2ea22bd43f3c3c453a9e576ca0191fad56cebed9f9b6d95171e5c26fc90ff0213d4badd795170fa0b29c298f673482648a2ac7684ac1bc99c2777807cf8ad27e1fbc17658b53fee6a765dd5097521cb92492eae70fb13071a497c321930dde9dfc7dcf46c9f9f061407fd975d87cd4f34c8e921cef8e1c203fce0b83bc9ffcc5fb173f42f611cf57a67487c6d4b9925c2ca724d1936167efbaa3b9f6f34914404411cd21baa1821100cc4e0d30113e3ae96409cca232fb263e9f3342e0120e5400f3e3aabfb3f1d7770d9510978cc1d6ae4ea9d6c507bf0df248e22f2a02d24a5746e8a6aa4e04f133c1c698af330178a1eb6cb6a4ea9bebff292e857a21496a709044de267ba3a65b6f486d200de768eac6bb36e6e2770a8cc7800b777859fb745c5e17d941b63f18a0835793225bedb264fc1c33f73bb0c2ac3e8aca0eeb478a2fa01c6ba8250491dbdf1eb07b4650214f99313532d026c95fd2cb1aebe894db9371b485b8d83defa8c4891e1f8eda5e0ef83d919a1cb4c868a2931018362b8f0f39a6cf7ab732598f9a6286161dd092298308f23808a1e75018ad549cbf54cd2c61bbf0f5ab2bf819c96f8f69d97de428a059fe127c37509d9ae08d7f6956bd704fbb91319a6ff3cdb979e21fac287d94b9f95d3361bc28da92f363ca1e7b88656c6e59376e477334d24726407d1884f535b1b8a09d799a8c67af8084c5095693209bf10e0dfba0d47da304d5339622d17c47b7621ab6cb3d81dc89b546494e81d40c00be61d3a138205324e5b8ea7fb2f6830182bebbe67448422965898399b7ee872f5050169fe525202d78f35cc21f0b2f3f0873cf11ba24a8069d75ff5ebdd8d526cbc40ec165f2d2c896cc3414a1231118fa203b74967dd7c864f404c61cf8be8c37a401303ef1319c482bb99cbfa6f33562ad483990bb9818c3eedbf95bb809099dd83813fb88045295f8348301fc9b3d47013b853046b19ec149cd1e027f80470447fb9321211591861bedf0ef8dd1d9b2065f83ff86ea0166ee205e99b4e9eb74db92d83a232a02227d2c0c12c15fb1aaa3fb5884e40de9bac51ce0a9c10da0f57b4409cef60c4c710439fef1010c6c37c0562f47c6e000c6b60bcdb90db40c900f5a4f630283187b995bef14b39fb36146b92ed1952deb91aa334c5200a5d74c801cd183ae570e4925dc070441e12d311b6c7da9baba552387de86fb02aaaa32b4d2b8b5644fd5e28e026d48119a83ae28b745579b4fe4853752a23c7b892d4894c42b828c34164ebe164a688d915ce155e2ae64a2b640bea0d7c99dd30b0798083a53708cce78969b5fc5ed1b9061d08b34df5736b612d6acb723a772f8e02af97b5709cde5a4c10f27075e255d3a85b0f601b8be1602d64238d7e1c11862044dd060d5b74141d701b4384312c18e08ad713b10a49fb7c549a40ed426333330ee81965bb3a9f8e158507e254a84055f6beab6e64f19daabab41ef060a10fbb6c2d6202327e771e5fe41048a356e4894d1ac99c2274c12914f58a301d678639cb31627b57cc153eedacff0fd3b47ffafc6fe0d2c94ff087e1d30514df03312eca88bd29a1b004701d4446b03c4d6d2b634273aadfefc647afd132270c209b2ae887b4a596a6cf428d4e69c2638e467b3027047cccd09cd8dd7473ef4b2c2e8e83d2fb67ad3cc036ac2ffacedff3969ad18215d1269efebc09315cc612a255ea4aeef3f85bde91bd086d5c2e0819d7ead5e82a3063b75671a19c5f43d91fbbce9c3030d03908ce56009b0078826d84ebabcda4230a965e9a3519fe0124f0ca9c064b2477cb37b082431daa36c57b182dc1a7361181c86186424ebb567cc20ce2f79451676907f2d24e79abd157af2c21b60932947fd9f9d6478f09ec56fffd341ea04a17b8e5ffc6714377d09f961b5807683c244b2791fac37f7c1b3a2705ffb9f37111215e51cf59efa0cd23ac70412448b5397a5dc4742474846b9cd3d1a6781268dc48dd736d66f2b92f8a7eb57dab2f204c93c8fbd30922b565f562cae8c76193e175efef1136d123601a69754dea902ff61e15c287efee8192ea606c07267574b95f122f6b282f62177a191a6280f0169e7fb09313275c6b6ad2592fb223d29ddc6ac0becbe95217be1ffa2f3c0ce386de3f25f7f56de0e55653b9a04a3ded71c31f8807c3c8dd96bc82892e4acccef30de2d26bbf1200920dc51e486fd34a92f5e3e4a4e36546719b3842920f6f36edd6016268c0c25fc3d9ccd3a273926e63fd5e43109b3d113ae2a7b2f50a629fc9aef14269baed432d42d19628f5e9bd8731f54fd56bcec2452b5756b1bc258e28f158ff08fdf15f20e159b2467747dc5f4c3f476dc588de42cdddaa62a546769e659ef4a11a7d08312debd4a5784b3f6e9492e64448f9c99652912a824633ed6c4439dfdc90fed2e090fe69a069425b37b3a698e3569018c24228539b2f8c574535cffd15e1e553b1b317dde1dafbb44d21c0cbd58efa405924e9b217c1ae48abb2b7e8d79ddeef26fcbecdc43da5df0157a81b955286e4bd737bd2729d1835f243983fbc152a19a2e659a5d211ff3006dd92f4ad31d45a81a65511561258a3cb50c74e1df87577d7f88ef285f8565bc01c37e387ad41362835fc1b1ce1fe169962eba087a84f6e18bba5307a4149b6cfabfd64af357bec23cad73c416c6702ef027be383b4f670f7a862ec098d57d587f569f49e6ae2f106ad7d115e12320d3eb7de738c9f2934f7371e81ce4cff4c8b90e41fefadf4f943865416ed83cd79faeba9cd2ce7561e99e05e9e3300be603cf72242ed8f40596cce02d95a21b7edb626547ccefdeb82424c99add238f3d52ea07b1a428f4385d4ed0fc53e8c8fed02e074fefd63782492d4561d16665dffd32574e2791e8d232e7bb167052493dc33b271c032b88a6a0e002a789a195b64ccee9647ebbd7ba5dbe2be3b487a825ffb04d16d095d70c716687d5cb7b25a886e7455c724fc9d826fda7cbe730ed9dcbb602a51dbd2e9c04e75c51609c1f9ff5a4f49ccbf5c714d4c9b836d0f41e8c6e75cc31b44b943ea08a0a8510ad8a82df2e7d8e5154d756b14de48c387c45dc311436225be612da8f7718d7a2566f398dac6899cb15048603aeb635e77069745cbcc5e0db36ae5817d70eb1e03ed5ab47473e2403df538c1317b399a577933c379403d3fce472a081d2757a900ec4c255278599bf5bce5029ae65203a39ca1c09c577638598669a158fd49a7b6d4565fe73c85fc8317cbb8d9b53336d5f16fc1c76a9f940f9912f1a37b37969045e7c8b548cdee60865b38607053807917fc4b6d022fbf3b0fb45daf19a7f227b19f044f15b7ee08892215d1a0499d1760e5c20fb69d36765acc59be612146d797ea77173bca7805a0aee5bfbd7bc90b7caaca21e06e764bfad98a63da2a013a6948a5a0138c18c26d500c5d3060b0ffbbc9d836182a1b26605a4431fd38bddab638147c45634cd93fc41e6c91aec15ebea150ded64681803bcd3b9b42c3d9030f3757fe39e680b4a869805069ac9692f5efd86ea34a35f3edb0c5223351ef7dc4d4c4b8798c60ef37bec69b10e09d46e203e37807bbc4fbe683654957697d95878f0f3d8cdb49d35e4275bf3fe141e5036be68d5bf1ab02c6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa +MD = 4d58321be075aea1f859d61c5db0a45f3af8fe9b6e64eccaec562f27 + +Len = 39832 +Msg = 4028a680240d8673d5a50271bd7c041033689f6405c7466853083ba0a46d49fd330eb6018a227423527a97756a4e0c84363c87803a8ebd9de7bcd4b8b431173e7152ef4ad8bd0e0d66ceee7369687a0359f20b086b9f95ee64f323eeab8380eea3fc37a23766bef8b7aaefb3e252b75544911243c283372473b50f8ab1e8ecd470127853cfa6ecabed15827cfe952c429e21867a64c10907bb0b82d3edeac3b9819e99a3c704feefb1188f18e4b840920fab4ef57ce1755ee5fc641288106e657da782db48095d8cabbafecdbe435a0c413552fc306ce2f398919b90aae253a00d361b42793b714a8203b7e4b1bfe47ad9ca7ad7a8e9b88c7dd1109279e9db32d9524c228325a2f1defba2a4e7b345a2826faecd0de05ef23bc4ab6320ac6ee28803fdc18d4c594869aba85788a7e54ce22ed62787d93eed7b72554ac5b47579c3511669c03afc18c81aaf43bb232c42a10eda2e3d5dbf44e5e4f48e918756c031457f604476f529a650a0b2a9b0824b6818a22758f349c120217178abaf7b7c7be620ee4088aa43a95664ea7ad54f2edf52165dff24442ad531b5503bb44a78483de15ddcf9852e7933e134551bfbb4adc61f175b771848ab1da75e6b1c2d7b4150abf3424fecb1bfef01d76209eea57a7ca39c94742ee34bec2ee961718b4c0e2964fa971549962393ab1dcb2790c9f07a8b35d1a3ecc35ca6343b453accb456d0f6b806d003a34c26c74cb5fd4ae7b5cac02a3a8dbbaf8754a09a4000577bc14b4776b40a82a1e3b03cad4a1482c9717429c3f9b9047074fc5a4f7a4a9669f9a4417bcc4a2e578f3af488b2f3a135cd7ead4833af2dcecaa949a11aa0f045a3e3cb1174196f8ff9cad625152210f470f2360013f8a091326057da488acdd96a0ecc7ed4fead0fc96bcacb9a2a36ce04d7ab34be1bc381532b6b412e9195ebf32f2e0b168150a0a622b8c369927a8a2e36f32c5fa00066d6116d1df13cb144e94dd8005f2ac00a38f98856abe246f29816f8301c10be07621b46b7bc1487acf271b2a5da82651528f722c988a301ccea7fa1881df2642da04fdc57b5a080ebb6a2a441ac10a8891e246f67275c12e1cb7ad67b8bce5ca037b71844046804c8dfe8961e005cef2dc1895577b195e3f9e40d7f528e2d0d28d05be2c8d2f47c0c124b7082fcefa3caba2dbd404dd6dbdcdd4385564d95df8d1341232947cd4e7ff9d41ab6c8502d28b019900b24a862515d21ceccf1913a96a773c1b08a7ae4e93c8a7c028d07f30f4c53b4205e92e0210cb143ffa1a6860d35f9a6a5c483a51283767fad739d5f4736e513c7221dbd1494facc36865e2bb864d9b8501c71f8c2759e0901a199d89715d6944898cf62f29a0452b8c840915fdd1de1f8bbca47c0ba0c03444083c5c9922f1eeae9333583c9d8bbce8ed421cc48cd08e7c819f9d5fbc856bf77e490a354f79bf73dce9f8fc67df1c000a341c64cef15636ce376c9e0d8e8ba6f43a0ee0436f2b5bb2a09dd3cfbdad648345a14918defb5cfb225641046a37d4f285d7149f50b6d8cced936d15b60588b0fd57fc0ae8025180d706d341a6e4f401b2ff6cc3bce66d74279622da46a8df4bd18cf815baffa707dbeaef35a307a6aa57e43341023eac50f4f29f9dedfbea8c58dcc7b9b647efe8978edf610d344f44db2222a7cf23f7ebcc553dd11a933d2af9b3d577687f7ebb904f3e4433ef6079c3358568823ae29d141a78046af349804a9ecbcf401ae5e95cb8866fc59d7ca196ab05f3b9e7fefd62dee8b85d909224b219f531eb8eb80a6357324420c31664cbdf1ee9e4bfaf754f0f0a5d40ff9990c6a1fc4fb95f67873ab7ec51d3f4a02bd95e2aab712676ad3f275773d394d25d0ec34b69380166f84936ff295da6cc7f55b4d3c90dc0d6fd99b45a9c73f4eed1d0fa5d1ef62948d62560f52b3c5dddd7b75f84b318f352ff05327e27a09411a7e3b3cbe1621b8f9945d268e7ee9e56bd74dab80a01527d19f82e5ca5f8071d378d8bf2510a7cadca20f7c4dff2cce9992493083e7542b7e6f90450a7d8a2541954ef7ade6da125d15d3d8383c77de9133d34efb0e36895ee6e5104add10a48c5c05acff9fa4d8a5741304f63fb35f784252cc901ba288988ee90d3185fb37db5566a6c343ec63db4736c63010c69779472e73eb187f7155ef0506687f31265609d7aca0db9afc2817a4e78eb59acfb9cbce0bb40cb78cbc8f9fc197d39cb927ffc1883e6e95ebb46ac42fb738154e63569c5c92003121f6f821086587233873bf8d004604c778a6cb006554a0215e9d6eff2d2efbd5782ab2f1a17aa5adea65d2a1dd60a517eb27bfbf530cf6a5458f9d5f4730058bd9814379547f34241822bf67e6335a6d8b5ed06abf8841884c636a25733f263b8b23351feb1c3d6f0ad50e45e5682ab1a1748567727089b4bb3e5db7770367cdd737104d2cf8c77608a448a5a0a61ecb7590661f346bd710da4aff7e1b26cf2905e55a6ae1bcda215ab7f4eee1963da44fdbfcfacc213284f0afd7e2294d67385d579dded00f7e5847379a886ee08f22777dce61043ba2f847956e4c672236e026b26010c29abc03184cc3db0f2b1c2e349d65baa2612f5425234a229f4d440aaa212c6a7e059b0a161df64f8e1fedb1d063476e6f3ae280d381f5cd9776999f2fca8853cef7245586d3bb4cb265099191f8fee6336fc26599d8f7b618443e85fed5fc3378185eccb3959a3a42a578b8c0841289b6a7d7e9be50d644e95f3aa65f6b107345115158e48c1c810786430ca42e09bebf8b2af58c101cded47095e899b44d79fd8a05df60e0c889c9b17177871f6def18c3c272494150ee9f1f5735f6d73aae682a834a70b826ba4fce0ae0af7fc58387f6a8463e0afbdb13138974bcfc607a4d9ad2825c3cbf7d6384172e65759ae2d5cce25bb394a40df8f5338d344d45467682fa6e6c961a38cb7b9e4bf1297374caef7a97f006d3ec166c5b67a6ef7378a98804f5e8ebc055505caa1e9bc4d8a02d0477e43c8911e034210bec5a0d727aaf57f7011766373abacf408fab6e51d1c8b6e229e145e4511cbb4a0397cdc8b25095db79422c0951d17b6a86684e676c61aac24e2561d7a794e32194a757ff8a53ebb844b168bd005d092feb1c8da1dac18b1f3a51066f4a65419688d0d49f688200974cac40dcb1252098a60d528883b0ff02d7ac5b36a2577cb4c55b6c2eb6a37d7f787bdcedcbf269aba083c6a2cff5ae720c8089b318313d8034904636db7f0979b0656578b68c8c72bfc8117a275a4277c113b76e12bd2b04bdb68b3e3fde4d8cdcb30306d9bb30f5ec235a95f1a56019deaf0ef0f9c1ef47491662cf4a88f0c0e5aedd1e9e47fd3b10dbc97d969fb2614c9ab6c036063051bef9f47064449b1db19b1c486cf79d4c113988b97f10e056f11cd6662f54972b06a569a9f5dbf6ac29c5e70cac94b530d985bcd113c09200b67f966b4e72ccdc0763e8026516a874357367f3c4e6f0ef4e07904db9766f6883091f56fa2a766cab7a99041cbb5a7dbeecc4841db5f3925a062ab6dbfc1f95410499af9a423de4d834a5368392b3d0aa7925481fc96921e4ccb294e0184b8fd6b62cff9883cb4b78d7342000655c74e362b2c532eaf8a2d39f516d30939b5f2c68fecc5bb5c5a972ac6d4bfcfafc714fef9585bfdf481f11c82ecb3334b60c2a613aa14ba0d606aefb793ee01a3cd0d868f3102c71029f858e733551c5459eb7eb0603d00ba46b140c8081128dc4986514f7ece368ce2b173b4534f20cef1ebd4c8a7c52c0d7df8c26a99dfc1b3bd1dd3cc6a34a8c53caaf16ce4f7ed35d9323cdf0933985186bfe921c19048c4a842a288bbdcba43a843566360e5de03605d1b65dd1ed230f165299027d94a798b833206cc0cd7a2a619174a5f9f7fb237dae4ffbbcd66263e8708183521335ce75e06c9136b8d4cc6aac884299b4eecc01a4dff2de5d09bce94092c61fe9fe93c3195323a6f37bc8a66ce93575fd80d89c9ab06abfe8e2c422ab16f46c7dca90abc61e4a99e837c51ebae1a7153878f05379088ae5e1b3209a975334c239616c34cf162d96fecf6bd87fb6c002cf9fbb3027307adaae457b59ee92afa7848bd0671c80f5259d0d64dea1b1a7c328bde23a8d706326b9607b68961b8ca6c60f644a96a7c9ce2db755380a1a85e0ad9a0c79930f6d4f68cbc8ce7936f44468b6cfe823d2d21a1696e9eca03981e2c4fde2f62257bfdf25500b937d2b0f0bd048ba46ac483890c172c6044d55c450d7af0bb8208e825e57b5ecc08c410482678dcc6e1a5222b994139487f7b875b24d7930c777fddd5265c3125c8dc2fc31954cae675338b81bf840fc7e88a8bd918e21f92c0decf945b942266f67f41ea1c34f07394142244056c3a5f0e76ec473026f0deecca3fdbebafacf0204209359575c80edcbb88bb0146239e5fc52b1e3112d15159a691246d0b3b61b4b8d82e1bb3cc189d8e118f19ce65d66af9bac662321b8aa61886064633483c5248514c255b771185206f08d5416bb79e893df86a0149fb408460ea0db46dd05774e71838f94389f206f3e0ca6bcfb298f8070caf0cf723b77ec4582a1b16ce52c31c0acd09dc0282a6428f4f99ec57b8cab87ba7b17d84896c12c931b3dd96c2c762ac67f98aeba582dd6cfb486bf79c75c4ddfa9b779e14d0fec5ab2b1cca25d65d658064ead5e92117124413a942a29dbe9c0e375fe11841cac5fced7ec90a846eceacc87631bc059217c0782ea96986f84e68f1b0fdd2332952bd875e23df5609604390a78f9ca4e0d5e6e286ac6fd6146d7176f534f1297cf45365455b22dfcfa2fb5a1950098355e52def2bbc141f9561de13a736e39938135523ceef5366240f2a812623912593be0bfaa858f4a7fdd40574316428070d38493f55510fada91d67a2686ab2101cd9179167239023b02c6df54e5d4d074eeb96046310a60ac156293a5aa5eab743cec74ff28c65075ee39e333882b0fe9fa5c23f82bec4f1ff31e5c57755b99fbaf7a192c4f3e1b74c820caa9a64f27151ef643d3eabdb17c54923b0490a9d4de4ec1ce6790aa4d81b904fc7ee749fe41830e289f17856d0b5f479973a2504365424bfc769311cde4e96ce17af5207eb4512c3a24594d6b143dc4df6d5459cdd8b3a00c22ff7b83e57fe0e16575dc8eb8afd8e12a591c93df159173ba4ecb5c7ec84664337cf057cca4e8640612861593c59b8578befacdb41037bf2237aed7a0aac76e71b47931e07f0dd2267225fd8ebcfc8ed731ef01da563d296db70b258681ab91a44c1df96a39d6938d3dc12df1bc84640f5a04179a0e2b1b6278e9307874783493efe597b2f9cc0f031c638d04ecb96fe8e040f73c608afcca1f50dfbeabb8c10743d7f300e875ae50b611050f7525172a6cac890875e0346d57481a9f4ff29fc8f0fef69c2e5cd93bb5d57d597f50c59ca54eb64575b82b13c6dac96488af369e9f5f86cdf206f68ebeb7dd2b31c1df073430643d88974884140dd5567d76ee51f8048cdd5cfd6f0f7cbe0dcdb300cf33c05a7c36d407f587eaea24ba57cf2fa8a2f4f11295c8aa8794f2f5872e95fbe8f2d2e779848f9ae6f0779fdb3d42616c46379bb5c5ef11bdb15b7ea1ca09cdee72a28b4ebeb89d67cdbe2e005858ec658bd6740d13fa0a7b79028e62aee2ab0ce7d252fcaa0867d329c7ba70d098385b1ad86364a872ff8794ee0e1303abff0cf96823cd720960f1ae982974cc8bad169a454f00acdf57aaab27e7fcf0e930b4516ee5073b43f08b023b655474b7b45db425222a46c77aac66b6ff659e26a6cd97eb82f3303d8067cdb85458f1a6b3fa1081c32a9eb4d0556ca2409634e9c91e73e8e1d9767f764fb815e0c86be014b355601a48dd2dc16d66f391d6dbbb01718b6cea0138913c086a5cf0eb09eb3d512bcb0fcc2bbbb5bbfbb2d96fbb23b68c8a7f85b29cfc385d8c956b0af451989c3cc98afdafe41408d4e602a7fba9503816299a36ca47d415c6c63b6d549a8b5b2d6273259233461c9897f3c7c4d5373dd77311d3ebfa77f7bff9475c504c8058a99eb28afb2db3bff0cd94163d30d3637764d2d2279d88cd2035771f10f1de5956862f74135cc3b98491cdde8f418d729b05c67ba5b9715d9083b3fdbd100d27dc21d32d0247dfd1fbea8665e190cb31ed5cd3158ed59970b8eae3407f32758ae47884fcef766dd1fee1a7f55ca6f6691574e2ea097a68cd4072ef2e7dde7e4916912b280272d77f347d18d4270a77e2bb52dc403f2f463ecf23bf10e09c902e1976b1fa65c283a346c6c14a6c44b4648600a760587c9b890d063c2dcff413ff962ffcba3deedb07dbc48ba150dd17b71e852d927be9cf77a4224ccf736f6f8534c2f6b0b57f45729c805c1ffd5c07a22ce9541dd0ff4ad0397fd83cf4940c889c398623f2fc2bab30011e0e9b49ecef5834064b8045755c7726c9bd79ec52d0759b935d1fedf47b414fb7b4512d2d64496f2a62b344b6e2031e059a2afeaa2468f107a462da08aa7473115a488f34caa8a2a8ab9082762c886f761b30527a4d1d42c941e34ccf0073741247a8f768e81cd3686e40891e00ac220388b3702b143b96c17ccbcbb145e65aa4c598ed31884e0c51f3ebe11427173e9328dae1263f6bf6d79c42dd1640742eae1a40faf770e5544d81b710c26972cb1044ce2cd2965468f3eb6f0c66bac6f7178fc9a522698ab44461cfa08e8d65d26124b7d996e39ff7fdaf7bdf097b84bdc96c5b771a3be5321cdc5919e25d97596e10bc70dcecf3a8dd318ede674b5588abf91df748ae9dd9be387e01259fb16b1f50057a0b7af9857bb9ce92e8f2e161a57e38ad128a5bae12bd65e2bf1c5a0d5c2bbb7f8a555895bf8e6682f537d14f9f42d421e196c6bb00b53743189c3b490deb0605c345b9e092fa7c37f4e3cd5b818e17dc1e9b870771661bad98e7fc261ad60d961d12c46fda4339374fbe7c8c33aa2c652f61459a4b193aa7a7c444ad6b +MD = 5b4580130576f78c1f460ad75766d6238ce751f29b3af150c32d50c6 + +Len = 40624 +Msg = cad23507531bef5a12f26d1d57b7995b907372efbd74174624382166468d362f11f5dce1574f8adf7fb405b37ba0ea51fa5286a0de75ee36f0ff4c63d25a787236c2c82b4eee289d83f26d1a6a64e682f4bd34c5e5035ca387a51bb69fa77ab3a0fea1ed1f3ef01a87724c5a0e4bb775e77e2464b967891451f2356694bb647ab774112db2880be0f1fd4b7c4d9f85b23c5bfd8844e99c11b6ae437b98e05f50e3ebbef5ef13a1772b5b128611a677c2591d68366dd0be221ea0ecfe955c93bb8c2a504cbe29d9659b54488341aab62ca88c0c781c6616d0f191d9f6727827451afa703b0710db34abb09578c5f169788f6f925539f1cda29749b26b177c4376f523c6c8b211d06bc236a36f85c3b92f788fa1d6adba0a2178901e666cb011d5856df9fea774e09347af176f686aced8cab5e2015e09f6d3fc2ec5ed585bb6ea33a0b2e2ce813233a4e49c81582dcffbeda7fce03526b9428cea500bc6c75d3d6583987e0f80efd3409ad8ac3d53e521492e987b1a587af68e8d67c59b3a2c5784df54d953b83efc839c73f8fd2537d146115ed8f6e861766cdfb125c0fd4bbff97c8dfb80724834d5b1166d81ebee934c1af501af1e974a8ca8d7321d58e3fd2b22eced80f634069ea06914b1ed31efc30f06fe2f4244fa58b080f49a921c9a819918b6398c2bf7463213f47572296e13b938d55c9c8f0e36bf557420f51d1d65a8ba5e957c5591352fbd15b6c4fd97a4e034902074a10f909cfeb995c70f0e3e197aee7b0dd95bd45f0e805a29d6f2de4ca2376211a285cd1022cbe35119f673b2ff6dd288e0dd8989af3c4beadc082ac428d00abcb9f655e369b3f0db645b6e3cf2e3843591a0bd7747516f4e3660ee117165ffbd0eec90dd7d78a6ad18c8967efa58785c152bd9ef7fc8b09f0d8393fb23fd2b5ccaeee6c50322eb0e5cc25342c0d59645930643baffa8f52388f7824ae7a175e11585bf65a6baa94858d30d4eec61c63834ba65a06ef92524d04622c66458c593163783830c47c7a135822c6b2505f07c20cea66874c42ae80cf7da37432a03bbf68f9ae8ddd12d621b57186113c8fc5a7eca6ddcba10ebb8659314642b1f17a1dc126c5cc261c3d231db3af85fb2d21a763724c2e8e550db03a13716c540ea8df14a61a762fd713ba095f8f8b1cb5b04329c32e3a64b419b0da9ab15b99462c75dbee29067b01fe38f0ebb28b01c7d5fd781ff079a4ba63eac34d729ae23689647f655e0767fb51327ccec5105ac2175906ef3f56fec670d07c9251a4cf6e544d77b245f3a741b139059f13b5883308c83ec7677cb376d5047f0fcaf3c14bf1737d4b5d55896392bf13d34ae50aa90edd882f05357329e4f9331c4b12685e0588c89720a7bedf7a372fe1b7295282be0b8b9c952bae7e3511415e6e9b1522e4e0123c2c649823ec23d26104ed005e7ac4b18693c9c5e25a0f123c81c86829343bb290cd06a5cf4d2773d7a0ca94aae9bb82738d9a79e4a8253e4d3154d1df67de523baf1878303194bc9c172c7fe67f3286e9ff181af3b4062de6f9bad2c3e45a59933f1480051e0df544c49d329fafdc276044bd299e121459b05754eb655e32314df9854dac86e5b65855874d34e01afc6d0b04364236f25a3fb6cd9c3229f891c26ad54194f0de885d36953054d4716e66ce87b19e870297cbb48f65c8dc1fc3770faefc6cd03ae3a9e4217c7de16205f3ebb23c01a6e7ab0abd14c877e90a6ef2545cee82c99d40f4fac691fe9b8f4b8b0f1e35fa0af3fc735ce844edd55afcbad579887531782894c6ff1175773bc7929516200627ca147c00945b992593f5370f8f6ab2ac5e232fe5356b60e909d2b11a449aa481cc8bab34838cf86e17c10d7ef905d99ea1991cd204104f756c155cfb23f663ad9dba7785405989f38918948060da488d0522e229d590afa0f507fcd43ed3b20f9039776f5531cc6a5a4462c031689dfbdb392639347cf00017131721ffb31e2c5671115f2ca64e46fded0ecaf521386fa6444facbb25bef764df4260d10506885309dbd151377dfdf66aeeed26a4a65cf8ecc4d0a43b7b1b40c4f51d7d4a19a8185c3d624d65da13d65689c340536658359b3c61ba2ea2c03d5cb5b43f12b61008f0cc8e8ba1f10d102875d9ccce06c60ec80cbc576fc4aadd0eead1a0cf6a34c75fffc2968c416e2669298d4664f63ac70bbc6cf67f6f1f92743ad23d00b4aab6025d8af88549ab9b811b7a27d8b33b00ced1e021fdf0b2eff4fc428e2713c667804c541c1d8839f218d21cfb69dc2b4e99d3b2643bf7f95839c5aefed3063c4e4262ca9bb56bbdac98d3e23bb8cfa002e5385037e9f3576d8b1d8429751a50fcd1373ad1fd929b2d79976653460c2db04976460758615192916a4e788dbec8d5a5104169566b5717339315fc822018f93f24006d37c07c59c5428a669d61f88b46a45abc407475dc7f6d7d720d9a16202eb81be3e89f3c359f2cb49e24b264602e6a03655c3c7c0f857d096e48d899d7a0b8f4e5eb6c15c8978f4969a41e9106d4b7c7defa31de031e58464bb46a18722d8d27edd0a59d5546e0d573ac04f2d1d23404a3bad320698265c084d0dd16a23dcb318608ea379e15d7d5269d042e739f55663e1ebec7955a4be4c43e9018ca49f98e29248888f59cdac50d07aaa84ea4a25908865348391e713f645e31937cea8eaa61842ee5ee344021817c56d4d57a9159bd822f36a7475c4cffa0201b1c97f122a9d84bf2fa84ce774e5ba748aa99a8e4a7b2a0f7725d8379f0b4ea242bcac7637c714e14ad06cc32ae25fa78307a5f867168572f2cd98d62e1fcfe234cfb780943efc3ef7822dfe03b7beee7f9a53bbb8543c0223933b0843df8eaacd2c29970bab44bc7ee61500c70cdf32c8892b3f06da55a951a04b34a8f392e357f88a2262b6f2452625ae313e88c859a4fdb6ed1853db4dc61b50c42302e373185e608b620610c0396780fa2fd4834d5c1e7a2bb865d3d8c82dd01f7db48a4459843539d344a514fdd311c1649818f437130162acb84731a0fe55ad7eb38e3c619290947d17ba2bbb92ecefa37b8d387f05d3fbbdf53e4096b566d6eda4f7457ab1fa04272856ecbacb96edb525ec007a1b765cb3c4c1edf17b8c029332ce46ea09faf19b1f813f44a79822623f3d33727e74ef56ccd720fb774d9939031a26fac118c39fa3430c9f4e7bf5717186bbad55551b6eb688c1fad23403a5bfe3cff201dce2fc5ca53b14e7c7d0ac62d17f74c99f47c229dcb837b3c6a8a00f31281af3cfb77af3aeb5eb9b021ad9bb25670e02dcdd1bcedcedfa438df1f19b0d19b9bc78a8e01067606c91b63ac1238b5bc5279344414d8f498ba91044620a7e8a19875f1ef85ad625dff26a9a2c430943df614de4fc4dfeb2310ed70ab9048d63807a0d82887a05ed8be5a7a1e2c3aa07a5d7912514762f11359a6bacbf33418c37bd093a5917fc9eb993f4b7aa4a73905fb2e76f50722c4fdf7453903c3ca2ee8679dbb033dac221b123d9444d806ec45519d72a79e6fd5277c51720f8cab86fb4d60c4add6b5e5fbbbedeb0940ea28cce35eabe577da80445b440c3ba838cf80bfb23722171db3f1f8c8c64449c17d1142da793b2dd374c916a55e04b0f2572d111a88fc5953ea824b46ac628d1d6796d2a971152aeb111a20fdee174178bc34f3f2408927e9184135f013f0756e66d225440a1ff991f3dc1ca632dfb43c7d5cdae1e4750d4dcba34b4d738a8d24f967ad22ca9804588b736c36d2ca83ae08e93851eb3c7412532cfdc7617d4ee1adbbfcde3939e5cf4674923834645a5ded8e8edacb4be6b76d42cfe664553524e23376cebc521836c3542122ee3982bca9a160e51b2fffad68893432d2beda5f3582cd8cea9d164f60968b7f56b6b75abbc630f941550974e364bd355306a901261e43814a575a79dcb043b6046842a89251819fe467aeae4c69dd566bb91bab126a8b54323d7f466635ec5f7dcabf36cbf7c5316ab459aa220d171e6362bccdb8fbf77e58abdf15bb9be7e4396aa785d71d9e664ad7850902c2fd15f08006d958473a58142f04983b66c8ecbda4860632375f970b4ddb3b5d3fe1a5899d846e9ed0a68a0b338a2e640af1c17114c5487bd9ab5c3293a6c19fb88775a517bfedeb2cde7c9455ca58d40d150b0a47ffbd0288e42e4725822c48d130eec98b13e7cbb044b846026f97f9f18531df9a9fe464a99c75bf9ff7ebf72e80796d641aeccf0f7bb596c5c46c443cd4de67a9204f10c056cb125f62711904f8be073f4f5d53aed60d1d1c73665163765948e01b6da56185b6d5d07c6c2d18fc253d792bca07f306173f72f6f69ffa0c4ae9cbfbc08111cb9170bf803db1cf2d3766ae3aa33a906e7c8465c99d8e54e92bc0e95bd832357b1379692856258bee6d195ae68989eb81a5727155dbbb28af6474b48615476126856669df5626f3c25edbebd9dd7488d21a8002363194d9c18d6bba35182f19409fbe3e1fae048b4b6514fd6f2f68dcf25433a4f52fa9ecc21f1c66d35157b27baaf75263de6cb6ec185aec20fff57c44db13e5fd2668d623920d46db416fe11a3f98433667be0b16f1245499bf98db6c279731b8d6602a587ec4d6c778c619bee6178d11ca86fc7e77f7a323fed17ebab23404d2801e5de34dc9932267f8c0dc06fb9c8077460f65254b747a2e2ddac31370fbb4e401e566779208768f766af44acafe0d0e79b87d81a634e6de0c6407c3e472ea529955249494b33e5fdd9c89f9fc2e01f0909c2a058e51047f0bcf1b3c04f6ed5c7331d02d680fd4698cda2fcd15b929be390eed396a755d918a705ff439143871fdefeb9a828af33d1288381c8e0bced7c1954985d10e4ca626dc587517475633b7f3c9745ac0f53afd3b4560ebb27bddc8d3d18338887c3d6f779747160cb1022ff20c33772e64f3ab67da42b529bb20cd2ef7ba377046c7b2d69ed2cbd0f37dc44f26506e4fbce7ab92593a50fe07413d2b3e83245246c59f7dc1b08f4077f7238faa73869187978c5f64a0659bdacf973d0876a5baf6c783e1c258f6b7c91ebc27faf576803f83bc036f2d597fb02c79f9081d21f6d13e1e86f34498b35144fc9cba5eb4b85f2cb942eb29b33621d843d39fef2fa260a9bdf1e70bdbcfcb1a63724b27a796610312726b3df94baa6383514255355a1f8ae09700073679710f9f3d3fe8e5a6ef97463661c2922cb44eb6f691f7c96a7862350af0df3f2cfd84fe51fb0ae5665559c2e351602455da0a6d28014f527005c019b21bec6c76cb1b1f552f063d512ceb272ddc9f06537617048a02b476e742150d1103c734c3645260bb3e8333f3e0abc16a45c7dea223052b9128cf9d5cb7d18dcc2ae82ebf539b60f89bda9fcb1b1c502d3f8313ce6b5530b1f6093c2cc1a62a3803d7b0b703869e91d9a4a74336cd21eb1c493c34b977b270dcf9e9f409d350e9111e71370e84881b7a5a0108ce3ed5288e92be8197fd2f52400a1d3efb19a053f514e6dbdf15abf9e06323683bd1d869e8e81111714615dae1c24c6a1fc9870d02636801ffca88c1ce6884fe2a26ba23ddc1ea80eff2f48f14aafe01e2637378db729b45eb138ce776d2bc46f3cdd8eabfb8913c6e7449c36b3cb892dd87f43be2dae7141b7146ff8c2a2fbf3307e3230124abc0775a943c57eff2998ba797aabaf4e1f91b74455e70e755e352953761649ea0999516523e6d4d42825732cc59b668f261658ce6a8c782d54ffcd6643a3c9f06443228026e1ddd1ee9daca10dd879fcef9843bc942e29514417c4be7f21bae434ce900333fdc07ee3c70cde38a8111ae0df1f16bd1748699846b76314d6444fe00345f53184a663706d3ced2f54567362b295e2cc8dfefdb7544e5ee80b8db7d2a7e65e0abcb609fb55e3d6db236f8ededb4d2aa9d97396090930b6e507c0a771851e47a5ee19f7ee48aa9f235f85f3ba20eef53c43cebbf62d0673f21403a4256492b7ea61f6b5af0e3952ee4ebf2b604a214c6d1238f5e687779ef6787e38560bedb6c15f76cca86f37f6263a46bd36218d362490d8cb41e02c3ddb7c5bea6c43d54c122ec1c33f334c94b2694131a66cdbbb4903d7c56f00cc5b8868bf42cfd4f282c517fe22de2121337a24d91016f5b2e3c4b45c6bd8af00fde584d4c9e886ee5fc2625672ec035edb66b236e0f082bbb77deb9046e5b5702dda17c2061d216eebf157f039d19fab945e5d7f2c9bdc9d3e5cf09addfcd9c3f24f6bb182d76c1d2f3b3ef502f4bdae674a6bdd797fcb01804a0aa3b887e4a2552cc6c8c37f30a032865e8c52bf27125b1225775104168f862d82d360ec9fb45c59712f537b35a2fdbc00deb399a47d799ed3763b9287ee57efa0515c95cfa211beb40fba3543c996c36c12aceafb98c8d6bd01c091e4c7fb76ac4634e83f137c44d6907e1322bd0785ea51c61bf50a50a32a416669f6c17baceed9714fb6b0a4d121d9297f992758e8c2c387925a7b19eb645db8828585de77ae339a31fb21914edb1343e072af8fd63b8f79b8f2952c98b17e3b4559ba2cc1337b37f5d70d4ba44d65529e73fcb6369ede24f584fd90905acc791839096e71c6dad105121cdbb9bff8e02165b7d4ef33d70fb2da5e4dbda66ef964ee1aab6faf78efc874f7487779f374d00f87f2eb42a3c255ba5e6c05df8d43924194eba3367c19a6c5469ac5c27f97153b1517111369c548eda5f4524b50e008f72036f5a30fd707ccb0d98ae4c4cf57af094b49ee52a1f13bdced8b34e05730db65954d3d58b25352de0eb025e9a7ff340a967b1a86ddba6bab5f98e0643071b40c0f934d8031f21f78411ece17a47392c0018fe02c010a47b953619805f43249bcadaf1baedd4dfb2578bc2675501c91d4936e886c954895afd0cda3eb2add631e7689ef0b3ccaae8dbd72772c3262f9ee55fe5a6f22de1e34dfc64b3d5ad9cad9720911bfd8d2ff5917280763d2ae91b54d289d5d3033aaf18734d6240c8e4696a918c8f139ceb7318fc62043b96622d285d59b5e45af018ed0fd8dc7c9649ffd249c5ec9e5249ebc2b3408f46ef474ec05eb9a98ebbaeab2c20ab84f18c39cb5ea7e1970663e7ca3f55a079d79be4facd354e336a9bc2e0566439fe38213076703a742 +MD = 8f47fd3d2797bfb8155c868e18653e9af69cab69a00b04043d2a1712 + +Len = 41416 +Msg = 8a014a12bedf7f44fcec437b0ce1347011653707b095b98374e43bf671250dfc28e659a9ab0064c0026c1126cc58a796297ad395d8a5f1a99d9a87c6e6201209ad5706a9a049102a80c29ed3c762a1638df09100acf1b2702379978bb842e4f0e2fb58f8e5e20ae83f95f26b4325ac3f046d792e74a28740cd2b722f30b20a1b8c7b577fc2f4da64078e16d489cc4f925599920878dff5816455209896990cf0767e0b267fa709049f5511f8e17d13c4491ee476ffd1869bb1a2aab0321e73d967ad7dd663221e32d191ebbd92607e3da8a17761539fc1f679b7175d4b6ac63d26b0b475b78ea15563eaad0de69f1a653acd54afba722efa873f6f892ba48d847c2eb8ecc3121ad41e0a5ecf235f6fa5c647824a7d725610a2e0ba1b18f5511531cf9224cfd71219ca9606eb92cb036316ba0918e4c6c09e914201fb5b85985a0d3c49042305118b2f39ad487b086108f0ccf2033697f40e1d0e4c113c7bedbad81de57307c39d9214995cd026410efd1d2544f2bd0c7bc60eeca14502ffd59d59196f5bc2394096435e1b6ada9c93a9656e07ccbf4edc302c830a7ff73bda6b59d9eea39d9081ff8231f0fee14179738f4f437b85849fb23e7c8ea76154838da0056a33e0f0e8369abae575815948c5656f01e657d74db60e7e35a589755869f644ebf3d380fea153a001b5030c8606ad7749f57c6f6da362320861b7c4e268233e7acbbd694aa9748b4ca7af81bd9d300e21903e7387e103400ec33369a8f2ee9c1ea3e8d255b6c725cf33cce174f4b6dd939fe30c24d8b94f50b4448d33702006e0639ae4a53112139142a4533472078ca60ab461cbf04b07d41a335809488123c6f31cc7c4801e009aba7d00847feac262b9f99b04918312a4df49f1b4e4d99cdb3bb6a23a0db392f385a010ec832827d095fae157232715c8e9cb81bcaaf0182423af9d8d3f9871a38955aaf4e68964f784fe5c4d0e00bb4622042fa7048e40ab9451e2477d9746b2b0e3f62511d521e06f4f336dbad6a928703b24ff597abc7774e296ef3176b929e0941d066ad405913f338f3f8f718a76bdb7874b117d3390adabe40ec2fe710f03ae47205a4eb914daf3984cf6980436f0c18114945f4eff25f4f22b98f7176c007a9bf94a0ae5712ad7751b5515bf72f1a13ae149e8b4cbc605e8ce1b295249bf40421ba0d130ae16264f3515ae6431a89fd93a9adf0dfc7625ef80b35ccbad2848640ec66b42d5852a4d209f2c9b7cfd0387a7ee0e039b1f9d2fc7c8572aa023d9275822a0c4ed612998665a560b5ad8146bb1ae3b3caea8b6cf2ec2e3162a983cb6831e385eff916c578eadf65dd3211baedf402f6040f9b5f73a09c837546fba371720fab712fd3bb32102d239efc06077ba0db21856fae5d17505ce36259099d39a92af782e8dded4a6c0b445b79d2befc97d8c0cfa938d82661ebcbba6e321b196db1f485b299ce1a54e622c32a0c43d94f984e333acf43595bd5c6ddd519cfa926312d0a2b9be03a716a49468b2728ba3e763450a2d63108b4874f5d4c050d5179250b80a258c61337f442662b97ffe7fb0f1dc85fe223bcf29cdfa9319866bacd0a0a79c554e24d1f10889279e31c0afbdf64daf0779dfe9c62f25204586e3d985cc455f314c7309d4ba65bf4ad1f9bb753a438d31b0246289621e852b986626199a3b5ba2ce776491206433a4a6d02c3f846429620e31c1d92d8ccab2041c1cf4d331988e1b57698e032c8a93fa6e88859e588a83dc2f8e1d5918f5c4112c427e3fce1fdf7c3ca1342a65cc0113fb5aae4ec8b87d634552bfae69104809bf2020a5bbf77b394e92eb5fb802d53a9e27225d5cbc36e89c9326f428222532fc3f40cea0284c9ab4c61c68cc33f7b77f794893bb9d98b65bdcbaf3fc3445d50c26488323bb38e697c52d0e4b674ed2c7d78ab78e638a14abb2e3738e4d8f39165d9e8aefb729671e158819daa6c4d39eca4f937c16f349b49f093b8575eba8436dacabaa2406637240935123f940012bd900ed2ebfbd9e9d2a94148ab44168bbddd8b0fd0ab723baceb87ece67aba6978c038e4b66cf5b8fdcecc6451379c2a5358c5f8f7223ef1f455e6783f9eb08096bc13e7c1111c8b13b79195d997cfe29fe2f820963340fc92fecd5e9b6e96faaffa2c469ca6b2c2cd1a4d57b4f306471bf29df12e6d1cadf13cc90a8a68d25a2cf0feab998c5d12726d3c1463b7e3ca200e13f5302e2698a7a656069d1c07118636e76158407fdcbc06fa667674ecde74ac16973bf5034f1eb1f0dd440689a34442831249419f94029e14c85db8960662330271b2501733dee625e90fa6ee920f9a6e38fd2e30dade9907b499e153d4716963ff33dde6e950b961c4607bba6010a4f54fd464e803a86e3fb5ab7dcacb3a85c7aa20ecf6d22cb230f9d70361902008a4b17f7409c118a44936231c5f5d263e8a0d1a0bdb70bb572ff3e3cc6894862c19285eda2a7577d1a0d0611b75fcbcea37927fc8e957952e9b4d0735540feb85befee305dea37e5cc2ff0619c33c771f5cc4d292c4f9428f1f5fc1eca844a8bc02bfac957add74cc4c2c8295bbaedd54763ea2f7d2d83c1f38c6a430c9e5461570e52bf7a385f39698d356fdc396681ff04a7176b766fa5553fc1ed05d645c58a5f9e1aadd2f835235ae03d07fb59fd87782ce8dd747f5a81d7a9219c73453cc0e885e2d7c4cac75aef719ac447efd2458720aaba6ddc6add1ccce9b9bf7b50626fb020e257fc7776158f8ffb644f87a3f82c66ecaaad5dd3d5cf4c44001088d6bdc7dcb5d0b6cddf94e222949ba3a40795f7235a731bb9c9cc5d53267f2c6c859a711c387a2252fe34135d773410b2db242ae9ec104e0829c71c044584f585d7cd56ea539c658d39bdca488c77c038866e6cc08ac86dd15a8fb4698a56965a35201f4dee7daa06f9f6aeeabcabdbbe703b66b11ce4a19dc4ecce8add3f35740559744ef1661746a7a8684bed1a88cc0153bfc38aac11f3cfa5126d2785fb59b041fcf3449fd4d4a99ba073080af0eba17d20ffbc68e65be384271c4e710f939fa06046d0700a386997fd6bf6c43ba2b883316b9b60475d684fb69f3c4b99aa393e484f7b21e1fb4d64273a9d90907aae2b99120ddc5d82c6cf66fcd75bc324e5e25a152ef980a4bfc9c7e8e7b517faeb3e01f9fb234f5165cce03d09e8b38b0d5641a0d24110bb2690857ebb7dfaaad783102a4e7e4653ae0ecb6ab93c91661860a3f84d42b8c9ea7f0803002e5e12dbc46facec356a0e075cd089cf9d863e6ec929268941a155725ff97fa0116dbb5dc7c587bf90e20cd97f97a43254ba9a77587a316c89f2e728f7fffa826e4f2cc755bbc3aed6d7d58d40c7c2cca954029ad73f21e061d4077311c37d8e8d2ced7f36f969a05170ef896508ec84e37cfe420c1ffecc106f3ebb73ec0facb52b87ef3226817f47d6e437b60429424c5c17d4c1c3d117dfea1369e623b9c43074817d11ea113201303cfefd6081ee2a19d4b9bcd2a2ab166e0fe3321082be443063939aef23a1c7a77d4500c7fc71c6debe59c6f5776ffd22b8921f5a72823a87b69896dabeb4e163317688dfa3b168d15b1ca6d45a4bdb2f99de75aa91f95aa000f4ce56eb53968bdff85d507d97581a366b26165227fabc3730fba7e809eba4cc0e0709b1662f48103347c3920bdde2d4ac0c6367eba0f21cee7afa7e9b37ba9f500c9b18d5f4c14b8f0ee0ebf64051bf492165a28016f9cf82bb4a5b98840b0321a4b528882d1f1874794e8f3eca8e7ea82dc10acca4f8d852834088e61bbf7fe996ffea672289ff4a52b686cdc0c29933f822a8b89117c0c89d840c6f44fd9c11ab20655b1b2889795fbfd9896d149850492e822c27800d4ad0bdef1946ede0ffabc1a14a5f233d6969128f5c18ad0469e98da311ac584a42e3933ace6bb8d51c5e89a71e37a3a4823756b02d08b465e5a1e8104d69cafc179fb0f475f98603d08b217ebdebd0442d933445e38652412c37e7d2caa6fbad31ccb925f6397ef184fc302e11c3d1a8d043545568daaf22a67331f26eab16e4f83259d53973c9279e775fc00006cf55d5105de8a34cf28fbb1f6f7823bf412ad498360d25ef8e2d88c5563b74fef1d5a2c2f8067c244411d301486ad02ba4062dc7f8d4a4f4f68ca8aebca754f160aea121ccb8dba9cc2f56e365d25d3869006b8848339ecb29cb68f9390d8828436b38f48205a824b371ac8b6db7b12bb5a0f6a1ce31f9bd4e722f707774f7ebc391d105c1f6cbdd205f3dc10922b64fb36f36da31d69e108e0964d91be48b8208aad31a32922d1c3c82714fe11a53eb88f494fd192a750c101971fdd0652b34393ea6fc7ce1b4292e61b1fc9ca770465fb776d0303666fbfd29bda43c00bf4a7fd3b27348eb494b1f84638fe3d1f6a95e41451d1b015a237cc2b09507bc300c01f35e473eb9d5cc3774f1d15da1cb5cad196aaa859337ceb66bb29adaa264c2e825143f05523ef29db8c18ab31ed8a775c74b3f14f5e742d2ac2b795db844b45bf23c2446be6e067ad83d818c5105d2ded452a6702e50c7f90d83fb3708b82a83e03cbea8064b4ff55dcb8091403b240fc7e6a642465ca7531722e8109aa96b87797dd5d431bf1737ced54d6af560e631286e063246f228075171089274fdc0904567317147b1a468b3c2b1be785d616b80548fe735f9943e44d62363a09e71c6cb639928510840ae95fa7435cf1bdae656ff090a1b5b311f76ba002b2672c65093d7d7a155ae3134fae55e7804819cc932d73c4201ff48d3718668930c630657252cb1835e8abf206deb372f1f76ee3d9c44ef38eecd2081bda023425c587b020acbf0777184349b7374c60226e4176a1daeec94eaad0352e072f9e21e386b7ac91a5c249884d6cc96e8d49723b260773c7df9fdfd87376e6462b21858ed1fe6ea83bc33da72efdc5daf29991dc8118d8219df1b304305fcd1da158e145edf6ff56dd94b4036c5f250318dae1d0e72d376eb65978ac9b524ad41ebec5973f33d73407c15d0b9a037f8d6c87e2a6cca72a059551913018f1082fffcd93014a277ec636b3894e1cad3dc07a1b24cca639188cc7648d4d4dbe5d77c10fe9f293546e6406f5d94978aed852ae2f28b108359b7ad8fcdd428e0ce351fef03b19af4d1eb3e4f2cd7c427ad79a951e5f02673f2b462694f1ce7e7f12352608f6b4f274182c5d54c654eea3c42eab73482f47b830755cc77b2f73876297d2d4ad73116bd343dc766461f1bc26857db874a62e23439ec7feda0421b86cf061cdefc26096e870eee21831d0266715687844e59f22fd1914c58eeaed8499e56f6f0e217477b05a112262232e651e75181d698bff19957abf961a225b6e61dd5822b92ed190d365cfb1c2e4511ab51af9223307e289d53a24fafc68efe85d5eb8a34138ec74ca1a870acac3dc99b38d882141c7cdf604edd16eb61d0f9504c01d4b66de4995fceee3a7ea60457492334195066a35e0dd0c616bc7cd5ec6d0c7d2a57a9d6d66f45942139238103de9a2b1f8016d9ecca5fc416cb1e8422049dc952bfce4bc8a38f04ed862c9c148225255b4b3208d2bf853fe0bf4fc5e23e854b1497e42db52433a4660cc83dd45c4d8a965ac4175916c99f3a41178073424e6d3a87f463e619b9de5474ff4c899599c29854d3eec6f4b34dedf97f9d1e397f968a3604d5a3abaa197e65d9b17c54923529e268756483ccafc18e8e052b4ba12dce4d1f6b34028cbcad885f54f5c2be4b11ac8a947aeb9b2e7da94d9ee29f3b9ccc734a0de045ea31a985981e3b07a76d175941334f54a933ebf1c2518a5ed54a4d518fa3f09d49df3a038df5984ad5010591953a2ce57c24d10ff7076daff89f188ff515ac31332e28aa44c352b3cf71a1fe8f9159c69e6af8aaf4a6d1bb2a03f7d4844b5c2a2f863a23c76eb26c1d23b44636201e20976e286bbf17ffaaf6deb0c8452d48afc64f39161edf009a4781051193d0c31bed9728f962433fa3e1980c143fa4b8e97ef1ee2a4fff8468d5f15e08ac878fde2a4cc2fee511d9ce7599d3607b96f3ffe2d41e0864b586fc50dd85d28b2ecb92d5f7bc1f4e681454394acd53ffed421a7761945864e84d7e40ac431838aec05e77ffdf06a732395db511c196d58fed62c7fe17c1588222172bc66082b9edb36b97ccf35bf8569010725779d105663cfe59146eeb476a4dee9b93a4b718d5efe0bdc6c0c547bc6196f785bbab95587617b50c627f3988162d177bd7605d4dbbe672550ded9e4cf417cc0150cc8f4fe5d4644cbb2537c4c4f928e6c0248e3c5ea53ce1a47b04ee90ba7a3500ddfa32cf5eed3e41844706a17d543c28acb58c2144a6d24b16828a7fa788879286dfe97ddcd849bb457436f3de26e5d7a0d9244cec3590cb661e0807077e61d06e455b3777aed4f30fc33c0347234995a703ec27c47383ec14e2507102e52a803e34724557f549af8b3e0019ded5d02a693accf9f5e71375c8d64a05bf444a6b9db515eea3380fb861ec6b7dcbc3e35d8f86ac0ca619a9302901df0a6723295934ce2c7b84fc8ed638d563763775e8f7c1ef74a60092abe3e06bf5ca210a2f12ab89a03421cb2ed0b802d14d4a7449c1a67e0c102bd98357951c758b1682c45da9ee5761a32c57708a7a9e4b2b476c80e73a5c924e769754ef1d48966d125003d6043a4a31a8717c5645b0b50376bbff2b2c4d7391f251a2967554334f433bcddbd33137f4c6e4bdc36cf1d6f98a9c051b5ac5fd1dd41808332c83a9e49ced806063256f130e18fb7af648f5360a79595fcead761aa4534f6e4bbc4253a5cee70cbdfc3bb70876fe23eb9c59e17eb9c49e90ee27b0eb6c3feed8e644c5e647c988e8a0e3083d648d6554d74b236ec40e80a66e58052fcaa05cdeebf861e8beed7becf7af2d344b72e838e013246302ffaf1a175144fbd53a5f62b2a650329c1c8ed2ebe64f759473559f9ff90be5db5ed0f4d05993d4f5d5a06e2396b94c4a1e69a163d29589a5595491fc45017ab7f58e3a80b91a449238c609260fc5bf2ebbb36146b928f7e8eb8c17df3e2dacfe8a8ef611ba03d2142c7a3ca35b9c12b2bb151a7ee42f47c3f3a638302db80218e67b2f6aa27307e379640e82c065cd3de536d5f29bd302a03749fdd75ac9046dd1fbee73b9946967e72b87ab8749793602bf9a8a263cafe6811e6cbc0d893b6513b63a14498e82093d78af07f76f9d07da576f2ecc91d6fd97cd90c88e1f2e6973561b359889da2f45f28f7c5affc11735a75ec6d6fbff4d41 +MD = 6b841e48f28ae5c5ab793a6a65e8356a0a894bc483e233364a03a81f + +Len = 42208 +Msg = ee769874cbf41b2d120671caa35c9919a4d20c7e7597503be68ecaeea8f4d45b02440f6cc557fa7682d0c4befab75f3cd664d69f999fe091d205b53b96ae200c2d0cd6b60c16067a03a631a6b8203c5c5455c4947ca7b164836d0e80de9918fdd898945a877966c0fe526089c4df5800856d7d6708f6eb3f618e7cc368fde1b669aef25e1dc843d1d99af86f063cdab0d173aa2023d6b5a7d42fa80e1c24a6bf4a1798ccb84ac433fe47a261667feaf4a031f2c5b78d3726441a3968e2558da1e19b2dab3f481270d3210565ccefb2555a6dfe60ab649a431915d8daa2d7bee398015a04990a5410c2efca8620d5575a67f075f8e7a30687bbe92d6a44f3620dd613c6deb0d8b399327b98c94a79048c308200965392a278935edf22b0f1a1a7029719416bfa57958b8b18383223df711bea4741d77997a0073b970ace19a23a8656fd36b2b7678b34e8f1dac11b109391f2f1015b9f0c87804afc2987b28e4dc91818c36d590c04975accb7dda8c07afb60a7dec74d2ab36751b787c1068c6933a412f384266d871ba851d86f1417acbffd10e103cb19ae22196f2c655bc5152cc494cbe067b39c289c274460a53cb34791d511f76100001b6acd215cfa61d91c3e4655676305cb26fcf70396a45817f9e49d778c57072fb80b796d8c2b873d6bdbcf9802648c9d7d91681efb59925e3fbd1119a8f458c563c61a18df365fca8163d89c9ab06f999623239c760b131280e6d8013481184a8361582b3c621207c79e086a1590d748d77acf85ee0302ba23259b37194672447fa5ddad8af8c87da35408095d4cec30a95d15e24d8a88df924302c13d8b8c3dc15a4ea6b340a8b27e4c7f81582cd5db75959dba7ae6cd083408b4a98a988ebcb048561e9e82db30c14f16dbf078bbd1a1eb0e155d5ff8bd713b5af7e7b4a14ab4369b1e3306897fd225751e0c77c598972411fbde3f3287b1a69bb13b29ed6e35eec5ad5a13d8251b96435293721cbabd0b4d75e5cca2ec5c0f20e1703d99b09b367dd4fbf3f3ac026a287f6fb1e7bf7d676b8a5a507176da3f918e6d39cd984fd76b9afeec009cf168ceae877c4f2d3eff12432511c6ad94fe95c11a65b3afb79936074b47287b4f59dae7c31b7c8e679ceba62e58ca18f013d4815f08707c3c438623cb4c92d38405f7300bd5956962069dbe5e6ca43f5748f7d6246b2f87469f05f76442672bf834cb9347f4c3479605d1909b977daa3263a6c851d716593e73598aff73ce0c13aefe175fbe2daf6b612f26ce1f7de2e72d8860ce924d798a882ae48525f0fd3d3a39c43b7cfc2949e15e87e04dcb6ee06e46a583e4fd6f94a6210edca1f486dea224a3c475573d984f07bbb76990d683ee87a059174ec4c394e50fee2f032f5eac66bbe0f36774c071d1cb3dbbf3a33a74f457367267ff7e1c1fefa11645812521a715783c5355290f65be588a1d5c6cca35d4043c71a82f0477b7dfa0e1039bc891b7759944693cf36a9cf220368980b6f11fa9be93483d15946e8f13003e286bcaabbd5262365fe4896df2c365b2e001d03e0f40f66610171f1c99b8c9b835d0faf93aafd446fba96a3a40bcd260f3737c3b1c09c18a10d2bfc9e4d765fb28c0caa7d2f8c321790bb40ac453a61a21d39a1dba631d3ca50e1d7e5ab8fb8f6b03e1bf6f74564d3fd210e666cf0969d2ebd5edd09432053792e143e2a2b4fa6461e948f86cb654b7c625d50e7a22d46e81d2b245e5276c2e27b21e64dfb8c67da2874b55280abe48ae9cdfa49a1ae35d5e3c74039e25faf2953819c9b52e7a1d8d65cf6ef07b1159541c0c1078181e084ab93cf1075335eba41c3bf76d3e9fabec2bdc2b0c31d7547e4e653a5c450ed50cf111f768daa7811b068cd74e12bc9185817a74c35397a0f5d9f10a8dc93a2d6e8efbfd08e1d81dc49d1551a2cf5936200db2315f0adaa58167b96955cb2a79363502eb30914f25658add4eafa0ff02877a8b4a267d27cbe99dc33dfa73671f2d902fa928129403c775ecb4bfab345d816e0ea761d5067af7251970c5ea78891b478920388b2f1db2044b6d181883afd59142305739ff1a71a7c3e8fe58e51dc8021836a824a9ddeee2015f021071604c8d2fce52d29b1320cac78fede53745fb68e5d4bf0788aa42b51674c7bb88d8ae07dd6798c761cdcc372f4bdab7f5687e21f7e3c65957eb77269392ae404f80c3aa55e47241dab13d9603060cf9a7ed17d6574905459b0a55dc7fa3fec74ebe521b9e2e28688c253a8e49a7ccd1d63e8f2f0bf0c4f0de6ea480e28e007a0efb2505c02b026301928dc70b16626709c2add31dbe4b85a77f2cb9c53bfc7f16a0020ec4c5485bc161fcea503b16e4c8e13b6b949de12a7fa5b5302f9239feee13b2deb1e3417752f8509f21fe2f709b03ff9e7974d007ed48068c287b01201fbefd1e8f6d36e03ec1508d8547f7320b90c315d32a5e4679d0e876b8de9a0c3008aa76664a6fbd0d22c65d84feb4539ff04d77aaa9d40caba52396e8a34deba958838d3f643437458578b6260baffae08c656d07d87a840c2f7f93bfb262e513184e0c21a2cd76705130417456305054cad59ff19f97d323d7c41645f32121f5afd49a15ec81a115eeb4a675c77f7d851364b470e674247803b9c6834fd2c8d785dde0222a9ae1bdc4cc8c3147e3a8fbd0d9558c955a9d941c274c80acbc014102318650445e5def3b429bb1bca6fa3c67fd294e958f66fe8bd64f45f428f5bc8e9733a723163e33bbdd7cfc100e9ad24298d9bdcc5ba83eb78e78d80d5ecccf91d88f30ad09ab11ac64d71a2964b045c7720ce123088bdd07176f43e1a6ad0373bc43f2cb81cd1276a05314f1ef661b60526bc382dd3662e538db8e5648c0df9c0bf7f566c4cbbd815999f14ef9e2de74019d6ad221d255b8bb64bf568b2feb748d5242641bce9b355651b92ac84c156a484bdef91d863fe766b3e0c8b91faf640afde0afcefe32fb6122756ca5cd49aced1d28e1197ba7dc0270f89318bab4d249a0d72d25820d3940b42cfcd88d01a1b8ba4f705cd815fe564310a1f128812713e230c86883b158bcb0e6c2a9b3c5b173cb5b9030c611b52cd22fd98b919ecc306bf266de28a8c19dbeaba560671d44e4f75528db6d24694ac85d23301c942768e425f1d09a79dbab85849044d392c2d5e74420a6f4d58279cba26726f1eaa283f5d2508600ac0daeae78689e1cab940c433060d984ad688183078db63928a44845006b4883c9c16de09016b66df12051b222cfbc4433842a9a937e281cd794807db72a5e4b595eb1c4d382d4ecebcf6edc2057975def3c3cb54f20c4c17edcf344ff750f7fe44c4202499440c12109296a35dfb1f669f97e7f415cd251a5e36943e134a548f0f2e841fa3541151b374c04665053382a24b99d731b99f3d411aa22644f66cd07ba6b29ef4b211062bf9d51bd90c54bb923b5baed4362d094ce7d8891ae9b37b00b92632fbf26d97d0be5fa41884f569e603a7cb5bd750f6c82ac1d6e3a8bad744d2697c27a9999f481eba6fa2039816241108bd5721adae595fd8a06d98058d9e9f06cb163c277508b79fef141caf68c30fe9055499956857039775e74c05f6945b58b0361e89c179055aa2dd14bdaa494ce333b2939add779288b80f494ebacca409cc05e542fd4f84851b6b9045832d5461b91fc43076019916f733f442429e05846f0414f590c2a1a9b95e23d95bf5b2ff15fa9ff8baab83dcb3f3f183168f0c4319cf21f4249909332d1333ebcd28d505cab18b5623cbff546edda583bf1604d06cc580c1112917bbb72934ef3f4d573057f31adb39e947f8883fa4b694d9abb6d865d60eff09599e181ecb762ac9a5e93e2dc2ea759a1a33a0c863ae40304d60dd4e861036a04b6490525bf338245daafdd018266f44d2b048d666dd39b08658fbde2597608479a9e0626af8bfe3caf017688ef17f7ffdd8d10822c5f9d0d329a4a318e6f52c40d868dd7cf95a9e8a530b759bee3ea21837e9cc2bfb0927b03d781be4917d1e4d7a9a02066760ab184e5a85c37f1561ae37e3a0e6ded02b9a1ee6c71d1950c0fbfb14ae9be59aa0013c7507aa16ac352c636f14e803f7331d486133270128bae8f43901a1d640f3b1b7fb7994675b731f34dc96a3ecd6f4a63477cea6cb6d7270d0a7c9bccbfc3cc64b4e5a26c3bbc1f346cca4af0c07d6c18dbb17f0ea877e402ab155413934e19b60fe37e5ce359844f3bfdd6dd3f26ffb9e7badb9e11f34b35d1632d3908368cd938b8135e9617c80d6169f74f73f06b0f169de46418d4c670226f0f8845058b94d66c4bb97c7c53368716938c836519e20d6484a7e6a1bc794640e046734280b191080db7bc128d92540d93dd980d6ffa7717a2b1a2e29519e6de8abcb976d2f61392409e7f61dfe87155e08ada6fd61efabc26c87520b818aa52f3324028e92c0115ceb7ecf0af0285f660db7013b7183e5df73587e18f3e39a305ef2fe02d1b06969e4a2c4766a639f9fd18838178aeec01ff40ffb081533cd9a63daf27068ac81f989f66ee6d9d35659e883a4283a9acb125300612f61e5afdc062e883dc42efb7a4fdc36e2aaf20422b74bedd3ed02574514fc39156683c163aa7017f170c2467aaae6b4d07a3a3998b2436da13ed00526be35fb40af9892cfc5423a01fae0f3692f885166b436571a8e0cbc269c6e4535c3501037899ea48eeb175705cf0572c4424394ebe550fd269f0a51ba7257a800a8dd20709100770f8062076379ca451a979b17f67a248c4b69beb7037d06ae05e33fa47252587af029a4b3a1678a0aea7411230d0f2b950772bc646808f5b7b406ea04c35a2130af4b61f45624ef14a27c287ea600d097d94e65d27ea2cf65a9987ec9c9f4d528bb6a2c41e84e43f2d124635347fbae154f615d99add6de2844fc607c1cdeeed3930a6614de20233604e13479695c3e9db83ff6128c11cc7014c731943254f8b1c4b0a1e5be67274eac571e3980aeec81c24ee1e57feff4fda76d649a81137d53ded1524cff7fbabd35daa32c34704271fc22837b2fcdf2016b737c07af86d72a3ff109b317c64802400055b9eb2ccadea43f6d5be2483e2bdf6dda64042ba0b566a43ab0adf769ae495c986b2b410038791a02005dcb53ed81b11228356e6485f14f67ae087f9a21b043fdd85b696d0fe926e3f0e8d3bdb6e0d1b5cca9eb9d0c5e771333edcb53fd135af85a11e27bd5530a85b61a0de6387b6437d9d81fb4c90cafbfca946711a0f0f60a98e558b729651959b877b667b2bfdd1ad84677363c9a4defdab2df7dbdc7c9c6fd2c48a96c9df7e2807889bcd63ca0c1308b8eabe775f6060cbf90d294164a9fff7d2ecd1f4c1ab29692e450136053dd8b0dd2805a2e2ca4a92127cac45add08285e678cd21df64c736d42bbfad97ac23053cf5df521564e586e10b0df0405920026af72f5721f12af5e416aecf66a11d8e3e19f490e0755931cc84f44a058c00f8c532a29f6f99792ec5ce76a45b64eed34b5bed632b47ce1b3cad085ce4b14bee5feecc00b1a6dd69df1bc0345e3cbd5ccc8472d4de206bca9a50f22dc60f286da0f65582cf5e7d2f9ac534885873b2b2275c2aeae14958c84c335ac591efc0fcf011e62db10a82075e9379a72f4ff75cc6abbead1c0abe9dbc1fe62d2f993b23b706270a40f1137a934e3899cd19b1e20f39d52578aac5cf50db416c8655c06a5d9ebf20625d590fa1be186718180bcd6cce185bdb7394e87231118a806b775a4aa1577700947b4ef0abc218fa962ba344312f562fab547089e7ff900422897ae6d7961803dfa2bfe8ddddb45ad939efff2bc11e5a9b2cedfdc6b285f9c41e529a07250a5186f6ebf21b12441f2a5e36048476bc468b45e93596d37149975d6bccfbab55d4d19e59742f09ce33d1c102bd04f837d9c2c6eb9b1f095ddbe46f4ce679d1027208c391d8df695d7d168cda9172ec97fd8ad87c9628fd5097f27c7d4e4a3f1815728c1c84f4daf6e541e447e898fde59929a3238e7b5652650bab876e369c9fa4582281e23606a35399f3d02b3cd12894e84e68ebdebd6b2d7524f1ac0490a00702ac48586c926baf67e1fdc0271068d80f02d3161adaa4d7791043727ec52126b853fa50602957e1f3d656102163ad4ce6e6ed75f754044b5f9706276ae02de9c23f1e31d8716dd285f96483f27200d8b5233d713cd493726fe0c132918cc93867973c639d12b7686572ae8261e46864c3e04b73b3015a32f114fcfdbb6ffffbf184dc4e77b53d8cdb6abc733761eed85946a0e1228460742c5a40efaf31d61aa62d875a2d0206272e0917bf3c93991cbf7dc3245204ae2169db1370377b577dcfbbc4ef89a01a1fa77646cf381f71193dac3ca50b2a4a1ff0be00e819f5880cb3551c755138815e8edad10af3b07eb51bfb94cb149e3e58092c8cbf1e4673b09c2416544e7143ca2b5c41d734ecc9d9a09352fd370792b2fc4d415e0e16204fd04f3af448f4694dc5251da0c57b596e159cfea53a0d4c171048a62bb10f95d298ff10bd0768fbcea55cedcc6c06365ac23d212ae659766e8e46438fcfd7dc223c5c21185276ff34142a3ac3f2356987ef9f42f40393179fbe6ea1f32f16fd25048df46bf2c67f6958b78aec1faff9dbe4eae96b59633891e8e947bd9a75fec538bb111fb0ff8254b92a68b1ba1dee40e8459ef7af6fe02e54debd57d89be9e91f0d019d52c911dd81ab59798d26519d45d8ea00cf62175d4a768c27b132c57902ac4b4ca0ce33ecf664e7ad5e7329d941cc54ee7fe2e50611d93b97eddf9b5c29bf779364b3f069627a99b3f6ab7ede2549652988975311f22e520d534c727cdc6f0edc6423503c0b18f7f41d7758933976a319b22b6867359d5af3ac2152c063e4978e69c45c4e3a648ad89a7fc0e0c47c9826c4432dee2250dab0c005441005459a103b3e1b853686d9c8376abdad1083ccb9888aa88f006c5aac57a14e540cba9fcca23a96ca49a76d2abae158e263b2c638c4a5e333191c624f399d7b74be6d2f296660d306b9efcc67ec8b986806310e0d413fe6c0b3867b012da0d0596483d18f4e57dc1fcf8580e89511852541292c9ec7feb72017d22c2afd5257e945270e6624c8b9ffd39211147d1a27025bc2a8551e8a60398d29fe326f5d170dab7f6d17ae5a708c0d3d05526b4f87e79e230b990d8ce9f55cb378814c6618aedcb37608b5b60bb0c4afe60c2957acbd5075ddd15dac583ace97227f5b1863b221ecb1a200839151420f3ba97ddc9e6abadfa467d691b7f229fe84956618ff03c252a74d596a0b59cd868d91308366d8248aeac240e40d04b60f27293311f487070cdf72861380afae3c632b0af60bedd59d364a634c6358bdf392a58ca94b283843e1775025f83b2d5845e1d2dd9593174111670772c0 +MD = 6abb6baec813c8a846dafa0339a1197da5235ef3c8f8f69d55e17984 + +Len = 43000 +Msg = 6e24ef7a050b747d8a16c769544e9aba402f4ede53b6b7eaa1bb1f8c6d818d40918c47c721b295d64b75c80b81907b24dbd01973b6259f8da2f9a3437bc096d3d5d1465f9d74a69dfe3cd2d182974ef87aa38e469f43bcd3f973b59200d85582029bf428c478303c6c12eda39e8a9b9de64fb8405638952570d05c6146f152b6df945a0bdde7bb1a5da022691f91eb7be77d9c47222bb2e9cdb8a198933116d835627ff02fe8cd9f998e780b4bd6c4fa44d544444d449c89d9d58a1f30c3284eccad6bc003a4f033e783f8716b7eb182c7feb7201dadda6b5ccc22de65cd10826c1e2761a143ab3e1027a983c6b4377b36a1fdc1db8bf4f91e486ebd797857dadd5cbabd51ec8628dd23932aa69ee04d5a651f11ce097399e6ef78a5b6eb84c0e6102cbb5bc70a59131fbe4c51643360fbf324f7404cdeb57d69477c624f1f9b51e2864206fdbe3a7dc233d2102fb81de1f2145a777fbdb4ac5fe32cc6cbb0d3e479cf3c9cb62b31e2b5f9a52b27f8ead30bf724bcc899fe3979559b2a88c0d0687e0f906319d7a709a018abea737a309ae6d63c574ff8fbec5ea4b3d5add6f9a4984e26a44f4c05bb2999ce953cc658fe2ab88a903d65138fb7d85a11637bb8627095e6a67f12b1c0fb83f573a965c8c780a6f6afba65aee82bfa7a24d2367468aeebb8b3d2af15e0bcde08cde3deeabd8fa768fbed8234c16310fa57218f967ff959841170ad97e315b2eeeb11b925a800c3c8bdff430de00625c2f2790e846ff9e632098094a190ad0891155c7fe04f7a02fe3e1830a10dbd3eba3d013ca700579aaae32bea9ab02de7d893ecb7857ba66df2c35ed258123065ca80e2a067fabb7dd4e79839ea0b3c58abace8e97bf42b0b8d97fcb09bb606a1da0243c32d24cc98985df008f8698362f2aa789e2a82b3e5b5011853d0c0e8fbd20c4d2b5f4733f2df8c5ae02e92a90d95d3c65cfaede3015348db4161f97d799ae62762672b98938fbdff48f34d57617d70f7ae53fc656950b56c04b4296e261ad8fbf0ab98a184923806c8af64356790c836199d79e1259290f324331862073b2aee5b9556f9ccce4598e8cb9dea26b725a927402afe3b03219a27448d0226e3232a2d8b2c46732d2cdd31adc11fa6dbcd785fa4d765b58aaf87975151f68afb0cd7edf7e431829634fc2abe987bf0e209cc49314abe9a0e84e2fbc12de53b6c2d1c2440446100f0a61e5c66e9a70bb621cd6e504ab0f379e6d4dcfce677421cce2259ce157ff525ca6a4d0e7e4aff3d5da255679ee3c7b21e85c16a4755a6f5371114091e326a1ce809871c1d0dd561057487e00f001ea1731c327317276fdeb010de59292365bd482292fa8f989408606a8a2165af012e2fc1b77f1d94a5be80473d26fcf9f1f032def40e9b92441cb7ade89468977641989ed9f62245517ff0dfbbd8615d139ded6537c20ba4ee845264289fdf6188c2f8d81f40eee27b084800e0d71df7d5acc2dee27da675992879b8d3ac94b43c99959a12c549122941d0d1338bfb6e3e05f9717ea633ae4df074d170224d399caeb80a38edfb7d6512cf7b3c5dc26b5691da4892a77bf612c48ad68769d398afe9a8501c21cbcc36638f2583b339952636ac88a6e746f6f18c05efa1e9ee787d33af9543c783a7a51c56f891f62a95b5ddb95c43ce5b55f1302b46450965810f7213013749e9b5b8256d1ced8f5b120c6f47eaf0c484bc1b984500fb34025c6c901dbb7f0dc69f79661cb81fe494b531d29f5a353187d375ad9a484bcf8bb19c7315eca37de10cf0c8aaf5b05f9f262ef009d59a7d2d410a557444be43c927a80543bb2bff04a5243161fa2767430c0bafcc83a8103eafdf79191cdbf88467972cee51a0fdf5121d8a87f00c63470fcef9328be65382c4fe02d2f92a56841971d260d58ade7dfae3bc65fee8bd74d881b58115dcacc1296ed6e70334c690e43fdedf706f0a64067fae434d41dc920f2bcb024b1384c28537dfa06180ae72700838b44ad9e972ddf8476904a228695cd522fd5312444e816203453c9777f066d4c8278a4fe36f2756711e4c9009c06586a4ba5561522dc5f52c1dbbff8ad36eab767f595a60228ea113ab4d95e760d54638807a891827f8fb417107424de22f962a06de81c854b8e214582e382a12521dc699e911fc03c2792a8947e72ae7529ccc02424c83cd4d215e6d18023a9c8414374bcb81688bcd79cfada47788a87ec644bcac43f955f664d832327980c6153271df4862c385be0218254679cfef5c1b7a7c45ef92b45bb56aefa527625aaa805d9d873b75ba401ded385475668294a3568a34d7b7b1231bfceb9894491eee04e3ccb194e6f2f9d13630f6f4b729cd66c12da283ce16f69f766f34469edc86c8ecb5edf57ef59126db53567d29aeaf6da1aeb77c41a97e47c0c3a0c7c75a1dd45ea164e7a58ab124c4ea999824d8e4bfe0559a497633601dc32f059f2e61592e23d63ef1c37b01d4d93ceacd106e1164646a7472d77b472965fb8b5439b8e2e0219da29c408e283d03936fa55639e16517356c80ca4bd9728f6e5970522961f2423db86f848ccf67283550a75c01f9c9dffeabfab969be002ad1987be07a7e6a6c00a9f2f73c9d5b316bb65c8b8d0498a60c59680b9e9fdb1c6c6ffb4b74e052892c9dad01683b20077dc94a4ba7a8da53a89d5228b2240c4f87077afadf30b1800abb290bd650be90b3b0fb05158d98ce1a9f41786df49aa96a887f5783159039e22ced7b4f853eb65594f71fa05cdaffaa88bd6397b88d145d1993c92738f69cfc1881bb9b82a760aa9cc40310bda6cea0804c51f717ed77a7e23db89540eb919fa66e3182ee0176fbf1ec172d57062343ae78aa56bac3b9910c058c93d6780014fe3b47cc7155df90baf7c5bfd301e6dc3bc8d67c4816c463bf73aeeaa2a3d1a449706440b4aa85b1206b748dd89fffb34ec43d316aef7f65221084624b76ec94af96efa85f084fa64bd28b600fe9561010f5473dc855d2de5e6377c27af9392f573452ca1a7725b662b3740020e6d33ba9e25d670950a5189af4f0d4d633a1bc6ad2f46e8b00ef2b8d979635b29f5f7b4014e578d6e8e059ff4c555e082c0a820ff83d5e5daa954bf60559c76d1ae01afd114939d6266ceab5f20f29b7ec5eca6f2f9561367e005fc285257dfb61405e0963ef6fb2112f13e36e87fd8c7c83dcb1fe643ebf8216ae1c9f6220017c65908c9141e511b2121bb24924a12fe36300ffee12be9fc0c0822adc78782a7139f7ad24a5629c0ffd4c490a4ddf4729e47e7e8607a97e40e72114c3d04d1b4aa2dd95a385adfb32d9ecd1396c7d7c57f09d584eacc7060971d403ddd0677f0f8a886c96488fd5238c44715fe84478736ea7b5ce67dfdd2248e31fb0e18efcc6d841598656d0d2e8009c520329fce08845e2bc8fa1bbab9652968fc66c893a79745084fa17389b8b1b3c9bad976d5f9b5f979618c321196a79357ca7d721e22f45fd167af38ed814c76b75e59a5e9bb6a30d6af133dacea8a3070dd98b1e9cf13590378e529c3089eb7208349a993ce0f98e61a35bae7358ba556be6f1480fc62b500ebf9c284cf46f997b21ffe4eb224960a3b5a264b080a567bd567066e4b61087c49439fbd45c3a28f635310850837bcc57af6fc62c2a4c852caf6f42c3c9ca7b809691dd6fca3667a3f698cd120b781aa61a2c9a905d97f7e07b58a2520842746b4b0c96c5454a9ea8ee9cfad9c22692b77c40a983226e040041924f3c7a60bcad3d13ed7fd55e142da5a6594fb16e7cb36013bbae80b9f6b48a851127270d9a6df40cab45825b125ba21cb01adf381fc14b0d98b97f601326dd99afbc182f55d3f76198be5527e0596d68c8e2546dc40ac796074b274ba47bc236f3a254af3609ce787c9355abc6508ef0695019f3b3b55b16d10c8163f0dec1c4a381e376853401bb1f6c8bcf0c688d1e5a0b35b434eb90f5bea6948e417563ab8803ce6b8a7f189049effd7cf9c8f35965bcb0978fd4ec9b96be68b5dd682f536ace1c758c109c61c1c7b598d6994808500b93830b97f97021ff06c10de0ae25118ad57ed50f1595509abb0ceb021295e49fe562f15d3fdd270e75981905668744e0026daba50994be1115c1802cdb67e921ae1b894d45486f96bd2449fee1e2cd77aa2a57fa02c6d3d3cd9edd3f2ae62738f6961b90931ac23de74be5f4a79f72f9d59c203587935689eb8a4a62887a668dc6bbef4db1bce8abfaf7340e3e24fc0b8bad507e216311da756f0ebd7c8b6dc825724dad2894a989fe0f7f7530db3257d5442eff569eca6f753472798e8105901ca37cd87e0ccd7ffc7b0e50052ade85ba4901ddb1ac4aeff2c1bebe46c4f68db236c5f53e8b1b34fa2329c8437bc63d43a51243b7f55903f5fe3ab32dbc0868ef13702ced785c5103ef18057435b326773ea957f2e2be5385d32d81cad202c9db22c5a7153d587d1cc7222e1fc06ee85efd0d41e9d94386aa28e14fa56cae577f4c0b8b3d41d7614f93916bcd84bc2c00ca882a2443ae446ce59c4647f4d2bbe2778c03eeeca1a5a33babe605e9689a668e603a2c89c837d4f2a78e37d0379d0c8c8e34afa67df021a7b9c44f5738d9972fde9888115905e9374a4efd6aa5a306745a4908d735eacfbf02303336f6929b974a6dc0452956b49cccaf2228e478d715386881e78f3cb76cd0503aee686c7bacece05d8cffd33b0a77d82d74bbc287596fbaa33f548ee194694cebe757103e580b1ae64da523886791f1a6b5f32a1f274966f5454c875320164dcf898a25ec82f142e3f2e1efa39d632416525457a6660c9400623ed017f91f7b6c3dcb548e12e481dce27cdf9292359704b5a6f22400016e4afef3113505ccfd4d69e0452aef2dff5a853e9a5f304f72f845b1a2a2dc70195d8234f1b32e65fcf777929fcb0314e3e443eec9125df8de7a6a3d1026e2a1c0c154c7189b5b319ff4cda90a7635e05603845613b1037903138c11e3bbfadb89fcde742ff574790fcad5ed30356ddb7f3eb03c2146091a084a13f6c4660c689c988705dec760857304f526b60f934b871d2f699ad8572315a868b45b31008e221db640cc1b099df427971b470d9079952869a52770d5dc54b4f1134f23be964311d5efa2f85609babd229589354aadd2e8c7b770156b8debf617db49442fc826fe4bd807672f10ec4efe5c2491aa2f65e4af691ccf017d02f642d3f09d396bf46b80c4a46e7cfcb2609238c129984677a48a81d4a67ff5c23ddbc4ed35c5c9d4e1dc7a21182513357d48f10803fd3b30b1c1c83fa3cd3d52524876e715bc28efe7c7c4256a139e9d2c874ea029bf56b792ba0606cdd39ddbbdf3b1874304d16d05a968586e2ce412f6b81832a3c8df35cfdf03d02d7a5d8507423d75c9870c75c3ea2f632b592fbb6141176577fe1ed1f1978646c9a8c477b79fe158af2b202faaf2e1eea983c5c0f78b13e2af4b5bb47f495910ab461bda557166d8fbda57c4412946a0f190ef4a40fed4505396dd05015f42d5db3daad56920959eb77bf75c10f825220a6af581c302215869c7eded00400a3d5f73b9917c143452eaf6491ea0c5481bfcf71f8c0800c4a2fbc5d394035479f241d2903615b40b9c9d33953378f97534d021b593975e83d5107ad72192035699894177ebbd6ae422d71923c321fd75158dcefec0f9862799b1cd41bd35b56bdd3da7b5d8fb9e858fa0923af5213810653be84339b5de7898e5a6588f75d27e6367ee932657b6b789008623f102110dcde356cc2653d03d77b4ed65c0d9c258d60efd59fd591b42b800db27e04bf236f48b00e1b05bc340e1268ab077eaedc1dc3bbc4f848a35eec6a77a8cea854251833ececaff561f477c446681dd2ebc801df513bce4716c8358fe4b9a363768272101a8ce3acc4b1bf01567201a2f955f4344eaea449729c8190b369bede9ce8077de76378943b184e6a176d45575e124f330291fcd82d286aed824d53624db242cdc204b1545b84906f17ce7b6860998d7c2b8a4a7bcd185c26dfb913a6ef7dae9038e530659c834f70c5f9f66ec738397017fc1f9cd8c8dfbd0a51720528a6b565ca9968408490b62fa09458d2f89addbf667bdeb3b6d66010b08af1155fca01aee575eb6d8a397eec4602052d5b2dd4aa756e2a790dad77d260ea13501b63fdec281f1c4533fa044714e7ade6855dd8c1e357652533daa17279e34b3dd1e1049de1098d70183ee0b09ba995970dc734a63edc2170dfda576189fb2b4719ddd044cea9b1769d848ec958bc6ea73ae682c7c640e1c4582914300fb615f469c6cb614f942ab13a7778f1cab49b9fb3383d97384a28983343525e8998adde38186083c23d5bb8756449ba6016aef8fd38efa5034c587507b5bc5d7617455d0b5f3a2ce529b714e4f74b93c7571b4b8f64f36195bc03e32bfc9cad53b69f096a17b2bd16dddf3eff8d290e4efa52ffc049036d8e3dbd5b36848ddeb0fafd6bcace64c4e5ce369f2bb25c9a8575089e66517a194b35e745bdea0a61fc58f2eca3dfbac4c07f5fce0ff340b9095b8e9fb81ac2056b39145b18999cc7b45512049be83f4d3565bd33f2bc8ffa3922578c5c1195b25cbbc6d3dd2fbf807773dd6c09647cbec315c189aa9a94ce934e15ecb8b25f909e32617871f8dd1ca449b75b72d0cda9d8042f076e09f9b6a6433c2954897a30ae3186918d91800cc92b228b6eb9dc8f02b53855d3872942f0b62ccac61380031b3da8b7769642c154bcb154638c13eed1ad8ffd619e9de3f0fb7a6973cd0b9853cb4a62c3539feae552e64ee7c3fe49b3518866aebce22a25a7a75de4327750e64eee2c0a75f1e9e9a233e371fe06102655d409f16e70761d2f3640add04ddd514cf66ba269d33ed00f2cba8896c5e2a90ed580002fd3683616998a2713098e135a05ba219bde5a371e232c922ab821c9f11f41218d75610ee263c2e69744f3badaae801ea85dec9d43c9c22536476df7b113d5fbe3f1011607076362c96aae96632365d00bec3671049303c8261e17b0a355a6e5dfb0c8da1906e43225e50f546836d41c3303f830f4e179e19686cf936c573c75ed4f18c98ce4edcb396ea6637e4b4329ba2f827b89678d07e42bf60e608b2f3279268162d713b8a47041f45209c33baf0dd965af3687c5b1bb781b802473d7922fd183448c35fd446729899e8f413602aaac225a80b4ac6568e5a0971ca3ce1b6dcaaedd10ae24218a6fd6a79347cacb1cf248ebfc80c999991f45c1dd9d8b44af9c54ab08fec5c2568f5c1baa49527ee1463a021e7e75d4b86f4b8edbc3878481a1251ce9aa3abd68228a5938b875847432760b4b00599d3360526c9ba86b81708380c117232b691ba3f1eec3379c825221ad8616a8ed59b69cdad991de7f91f8be0836261bf05bfdae234ade294fdf17be20f115faa990ae6f455452b85c5c86ab2bdaaad7321c9a8b8f0bfe100811114270daad57f6e88772326b62d88a37a6f55c2cf9f759115ed6a590878e4dcefb592db151538db7de20229d26a181c9d60729abb7feedd0d709f7771ee6894 +MD = 0bd2326474768783adbbab975fa17512b9a1b3c17fec8ec208212dac + +Len = 43792 +Msg = 31a3eca95a7ca2031b11a00d2f7ab231e914cb6fde6f515adf67bc632a905f5ae0d88532ba67c005f8ca7e579b51dd9fd4b5c104bcfe236445a4ac9a71f58201c2b66234f10def18e39f491dd8f5e2c0e6248d55a6add8032da29c103d0ad25ebd87a8366736d545c1d729e44e2e689d05a858ea0242193f7ca7b54bf798f87cba9182c184aa1a937bbb453665c3173c1a8b4a4c39868d211bfc1ed505679b60a21e165cb030670bf993c69a857e99a70e138a02b441ddb0f2e90036d13f64145b748c8f539264b323a7d399162593e6c7894194da3bb0f5e9b583f4c1e8fb9fcfdb0de2d596b895e13e95ba8081b0ff2f35968b123baff6e9aace993f290709e49dc1de9e050bb91ca134852b5a95fc2d5eb26dc60b82bdd80e0aadb2cc315a8401cf0a16a60725ba19d7828078ede4a84dbcc55d71d052a02a5eb68297209b964e5feea64352e3a5eca63ae5a25ec08a4bdd183f3641bb2746f33e16537cd402cd9b13b4a294fbc362ca34c3a29097ba9e3df0d3227e0257aaf1ccd8c8ef0bb0c6a900aa8c7673fec56bf8833e2d71208e03d483fc2f2f169d7fe92fbd1f4a8880b13deec99f553d5bb00f8b3fda57a465584db78efc484e68c51b83fbb4987145dc53ea21b9a9686ec200456c414f2e6963e2d59e8b57e654eced3d4b57fe565b51c9045c69756644c953178f0a64a6e44d1b46f58763c6a71ce4c373b0821c0b3927a64159c32125ec916b6edd9bf41c3d80725b9675d6a97c8a7e3b662fac9dbcf6379a319a805b5341a8d360fe005a5c9ac1976094fea43566d66d220aee5901bd1f2d98036b2d27eb36843e94b2e5d1f09c738ec826de6e0034cf8b1dca873104c5c33704cae290177d491d65f307c50a69b5c81936a050e1fe2b4a6f296e73549323b6a885c3b54ee5eca67aa90660719126b590163203909e470608f157f033f017bcf48518bf17d63380dabe2bc9ac7d8efe34aedcae957aeb68f10c8ad02c4465f1f2b029d5fbb8e8538d18be294394b54b0ee6e67a79fce11731604f3ac4f8d6ffa9ef3d2081f3d1c99ca107a7bf3d624324a7978ec38af0bcd0d7ee568572328b212b9dc831efb7880e3f4d6ca7e25f8e80d73913fb8edfffd758ae4df61b4140634a92f493146138ebdcdaa083ea72d52a601230aa6f77874dcad9479f5bcac3763662cc30cb99823c5ff469dcbd64c028286b0e579580fd3a17b56b099b97bf62d555798f7a250e08b0e4f238c3fcf684198bd48a68c208a6268be2bb416eda3011b523388bce8357b7f26122640420461abcabcb5004519adfa2d43db718bce7d0c8f1b4645c89315c65df1f0842e5741244bba3b510801d2a446818635d0e8ffcd80c8a6f97ca9f878793b91780ee18eb6c2b99ffac3c38efb7c6d3af0478317c2b9c421247eba8209ea677f984e2398c7c243696a12df2164417f602d7a1d33809c865b73397550ff33fe116166ae0ddbccd00e2b6fc538733830ac39c328018bcb87ac52474ad3cce8780d6002e14c6734f814cb551632bcc31965c1cd23d048b9509a4e22ab88f76a6dba209d5dd2febd1413a64d32be8574a22341f2a14e4bd879abb35627ef135c37be0f80843006a7cc7158d2bb2a71bf536b36de20ca09bb5b674e5c408485106e6fa966e4f2139779b46f6010051615b5b41cda12d206d48e436b9f75d7e1398a656abb0087aa0eb453368fc1ecc71a31846080f804d7b67ad6a7aa48579c3a1435eff7577f4e6004d46aac4130293f6f62ae6d50c0d0c3b9876f0728923a94843785966a27555dd3ce68602e7d90f7c7c552f9bda4969ec2dc3e30a70620db6300e822a93e633ab9a7ac25ea33b2c5c3230ab08f0eadba1f4b91b13422036139187436a5230c991ed6c277f4e0f33bfa02122c558d6a88276c05f3607446d86ef4b62cee5395fb8bf237d0ef03d6ccc4f915b7a1af718b83a41791bc8b6fa37d1c2a7fd56eb3d4897078cb292ac1facc6e91fce3c33756bc8a22f698d5e254fbf54dca0ad2daa68fe801b143a4694868d8f3669c87405c2a94d4ac85c2436f64169c75ef0e6f0407bf6f4dbf3f213832ded68f4c5a112e664a892e23ff07453e06932e0290055f996d1ddb0c298e3cb2d697d173ca2e2ff811dce5c3daa288f23bce3ce5f6222bbd7799f3bb1214d85156d3c79345fbd348913c8e15e3a9ad193caa2cf9bf49eadc7570223c77399da6e606ec3b5bfedad03f24617ab881242b6fb398be49e13f8edd1cd110c770ff1beaadb9cc8adb993772111a62b7cd80a17b86eab4248c7c3d150caac8915f6f390b34bad730e680e6d0af137e7ff33503b670bd7bdda0337fc3dbf9d4536980769e2869ec0cb43456e14ad72e5f76d3cac72d6b65e3c0f7cf5fe758b48c03b56d3a15316b7cc926101a70ffe2f4eccf8f13f98f12c5733b944fdb41f9b9d280755587cbd5ff99d89af2bdd84cdea99a99238182f2f11b71772a0430145b3a743786dc73cc03aabe6ff08e0abc5b51b7a17c320197053e2bd0651ecd84eecff32c249fd3be27805a079a7e01c21959c91094a7657f606fed38877754cbf2e7afbbd54e661ce99f4dea56ea57ee9746216f034e390ca1051838179a7079f635ec7f1f649578b87bec80cc6f67a2339b63252e92f6cf25b24f378c14aaef672f4bde598efc52128ab8735189cb8d9cce00cb9d1229578cdbe4bf5b626eccd43840621a0a15199660543a8ca60df121528ceac5484b0635069b480c002662bbe56c92d7825a6fa281223ee460897d7fbd69db4da1c68bccb6b56a247a8c718cbb12f9286436a4c551c508ef25c8a2f6931a458cbb3628a250d58e2b3deb59c52df60d734c54697d769f21038265e22448208208f1149d54897e2c96d6dd8c03b268384e971e1e4954130fd7f2cbbb87511f4948efec3a61b511ededb1dda8b6ecfc0210c11e43a77ee32dc2e374afae4268e3d30427804868232a966b56006d3214037076bf6a265b72135af0fb2ef7909fea2dea412f7717446b276ff153753662b4d4148c02347e32591697c9c9f1d016d4bfeee3687c46d838274c19e28d4e4a9ec226fe9c505bb6576c446b013b65803c1fae68ebd67b610a0c6c4a6e13fe5e09b12aa1a9088870a6f283495522d54e78b3855c2a043971694d6d0d3687daffbe279bffb8db68f3b01fd10f4646b3e423122027a383e57bde70badcdc7758a2049bf7733c3781a21b6aba07452575e3b3c1eb75d8e41402c20cc223d060ec078594c9a6b3bb771e3159aadbe23d8fbfb33963a13a935988cc783f8cb2b32982a9989f04afb59ddaba633fe79dfd85ea99ef154459200a8046497f71e40c8595e92dc40790d47a49ef2dc5d4e8f3ed06e0697cd9b4f8cb8bd8070e7df4cb74c3ecaae549f786a0ee680fe90e53af29772f1f06dbceabf10dfa27690b558e9b9efcb68f26545a965abd80260e5e8dbfbdcea64fc516a83f7915311ba496b45e89c1d70e3737bebef14834e95f7a1e346d4765b4101d8bfb7fb1aa92c438db3206b4630ef70221af64a084cf7c26ef1be841f3d05753b5b96467fa6af4ac61baa84d00edd05431dc075ef634def56eead126c7210549b3edd9a0a700b061f65ce10437477d9e5dc95bbc1fa612562c059a6e5622a470152d31e446f08209f7ad43725c98395103fbf47057bf90d99500b6913751bf6737ec2fbb40b6d404f4004200075cae0cc2e853f434dde4e03860a827d14aa08fcaaf058e3ad040d35a0a6f45be0146322912ecc04d8d891a84aa01aaca5a126a1bea65e57bb93305b8201dabf7229c519500315ce84af7e918513592692c6f76ca32c359a9fe350c9cf5efbb393d0afba534c432cb92abcc51dac667541e224643fca0434bfbc16866d057fbfabd3c90c82517da3df12f44cfcb36a201cbc54917bc8f3ab85e62a9a463e8d6b22f8ba17c659ecbd5e2fcd2f08708cb0891e30fc406d2c895828330d41514d4060082be305adb7019e49f0752b2af5acf2ce5fac7403d4559f4bdae74585e8c5cdcac379299608f7082804264c2bcc9cbe958aa900d01698c418c6313c248683d1082be0185a04280293b24b53b93a09553b59fccd1d18d92e549ff30d744e00d5880a20bc41d51bf554a2ea271d677a1f8873acc23102a045ca0f33a0be69c63f130942fb95a3584a317b0eb29f7a77844481c1c656fd767141bcfbdd49ff5d7971d04cbf9c956867f3e6bcdb869c88ec362a44c3d231e11a804e52ac5f374be96a0649efa0d4d2b6628afe8a1cf436bf27173ca0eec56ba8506e41f546391af9c6533e73e7871e9d4510dba7a7ab0865dff0b145f2e19c8379c4cea0472e51104c613533b9d7d586651f5c1b70e88746265cac9a26affb13c3f70495aa3e7995c5d5351660ec7ed88b6087ccbfd439cac4033386d15410c1f6b0e8bcb79019f2fa5a470623eda1fb7d7a66a3dc97a85a808e51f43dfb63f3d99684fdb64db98eb09672eb4903c757041601880e585c5c23a50bc9b0ca7d123552df41ee9ce2d1b231beab1b557754e7dc5e649e3fdc3a75ef6bee73e9e587d28b016ea8a61a23c7d4332fe10c395af073871dd475b05a3e15784bce8123b978eaf36e2c92ececb627da5fe34f95d1e584849df822602646be3ac808bac00fef16bc27c289dd9448d1ba23684714218fb65bca526d74045593ba4e6bbb43f3feb86483b2b37783457bdb64ba1b3db2b6b2168e2a7f755e323cffc33dad34cc6f78f4694337412275cc46081ff498ec2220bdd0c780eb9ba6601111c7b71c0108fd73c0be3ec3d79f6d02f9e0faae389aa6567872975c2379a7f91e510281fc92f0e9726bef860b8d05171d445406fce7efeb6d73ec525e73bbbed423b6ee24d4f85e6692731127053d8e5e952b29a1d1a1839912a854b45b41681984fae8e198bedb847bf1ec91d0bd6ea319a69d90206527e397f3eb8dfbe400d7bef6f99ba4ea67b46e92a0b3b62cbfd31aeeec309ce2de3349f49d51194a8df517d3a8bac1230bdeb27eb4f47e328ad8de2a9de80dc1b07171d4f5687e1b175bd8b97da6b711ceea90dcb0bbf278d699ae8339223aa9a58557ba783af200a7f148cf01c84e5db8c050d41d72d8a6abfed1214745ec43c65843cfb02f3da0439fb13ebb864eafd1493a908280f96411ef912b4fb9eb371ad07d3b24b026a5f64d592d34497eae226b9535674d1d58115434cadae5ff2ca9d64c255c2376b4c5e389c5f27aa703b20fabee54410b2db21503256f33f0ca7c53fab5e1f2f578ba49892e7f7f9156891ec2e1d2c48d89fd1b4665960a85ba9a2dcd153a836b96dc67a18f63c2044eb07e2336683e6915f84c45b1d7d287a40b4e0e6aef40a0b93325191024a9c8932e1916169f176878ad914732bbf4bf2fd89c04df89905c87c86c38db4c9ea4ce0bd5e2a9feb7525a24d3960fc9d6f2040801f9998fda66a8a2224815630862a7509cd1160d86ef6564f878718ae1ebcba36433c3898887c5c9318fe9ef4fc8c50455298654ed073f75e93680847d712bb2acfb83ff018786467f567d7ada9fd12fe833205c5261905f8f176341134bcc3cc399017aad2e9220f6e4f98b13ae72d93c370dac1ec6012ad16543490942574990556782f443925f7d8386ab61bf510b3b7d74ccbafe39df96664722c91e74e2fb77da9d3e902d0cfb794c602c9815cdcc4c7e458cd1e186c8649856b9a7ca0dec468455f3db0c2e5a0f7235dd026725d7ee529efe07a1254ea55d6d43a402d44b0b8d317bedd6cd818d20afdac5ef1d45a91a5f776720c61072bfedcedfc33f000f1db93e8e34f1583b80588ca954bcfcc6fb115fba0770f612e660c11eb655f4975a76a585cea3c760b7b75b763f0ae58c1f3b1dc8fd2ce8cff94d862a831e0dee6fef169c4beab646f054b0f35710e845ae651b59ab01ceef213d84cbd1a2345b82acfa9954cf0d3351b8f1e945d5ee37cf17c035b9f790bb85b723c848ea5225bc36ba459059b470026a8821b061ddacabda7423ce16167b4e43cbeb91fd4d954414bc68a89093452cf2db6041bd9fea6a359fed92674877a369e4fa54e30ff343ce6aca437c93f9f7d95471a0f01a3933b1a959aff10ff6adb2d6be38a57e87e0ed2b320a269ad68aa6591b740238e32ed4fb30cabc514293a50affe64a849844f8666aa49591220ee1542565fcdf2f8529fb398ed1f8a17ecbe68506da086f96778538bbd16126aa13ac581de5f9645d35123ea037ea5c96aad3173f5ef155fff3ef65f4e3f02a87c3c97c41c56dcbe182a805abf611ba02cc3a7f39dc2990a7f30cb9f9d22876cc7913597ca523ac3697265855175305ebb981839d5f9768b5ff44fb72a6f051a2bdf2b6738c034f87fcf2fd46a19a8378f712ec13ec2327519ffff506682f053118ce5cd182f5fbfa3a76bc279ccd7ed2105381428db513a55ca56d5e1fcfd8a0110f143c8fe1f9b7d8195fa011d43c208cae0cd3493576d6bd9e2c22d3b71318311da45cbcaf92e75e42ac580797068bf18a536d298b960f4b52faf98ccffdc0fe60d4db10470bb2545b6df886fd233bc94e20b933a0bc768c2a9e8b53ffe0c102416e5e9491af3f43cb682796f0dd579b64395f715a2f330a8ce2812f2f0242c52638904e76c5b7b3fa668e40587a08f0336606eba2396f4de18c832947ad6cce78fc1648dc94412a502ed58b1b43754f237156a8612052db926538482f2767a5a0809b8aad650632358aa3802280c7409c20f9b07d2d033e05354994d0b85ad2048dc51acf802e521140a0255579254b063d940be0a8abfea4c45d1510aa6ddd0eea3c022c2de0134c1975849c75b8f9c98ed2c270d971a1d6d91dd4d843ca4f2561a94aaab444fb4eddcaa5e0bea7d14ddc58db17077eb1023e31d811cd96b0b0b8b4f8335c83947f54468e079a1b5cfbeed161bb7cf9b692b94029a18efc8619b80416ae6fc56648459249fb523c20398ee359467e0b36ed13f2d072cf225bc72942ab023331f70f7a56dea22d31a7708236cd9f56dcbb7b14f1d46ad730b622d315c019f1f0d23db93953e6752379099373c4ae4c93cca483e23d73f04f20927d265cdaf0297c3bcbe3b2ae70391c6a8942475ba759f2d02970147460a7207ff11d872d7a057e7078fd03e1689c1afd2c4a5d8eb155b367cf416054705f3e51f5a149fad5ac6143872f4c69a373fb2944340e2fb0b09ad13bfd29fd689f0270525aab294a45ad1ec220972d6ae7455598a76226ed912c76364d77569091f545d0f1b4a321f9e868ef79eb15042082ebf14c625bb021f3bf87d953472f5a9e36360e6d4ea2ef9c88d7e15109bb45395217cb15b741877612f848c4b88f2585ac4e58dc13155050e84201cff1d57ff3f2d2cb8420e7ec3dd84f42d391f6183310de780bdbc1438deff88170b59bf53733eaf4b57feb78d17a557187baad5b2fc8af15028ceff1da05c008393e55d08d7d26f0b2bd9552b95ed27ae81cfc17013e89d8c80fe781bf92633e34724b377d384f6483c02da37dee8e08fe9d2a7432d83369644df11cc4feaacc683ac45390cc2dfb2e72fb92a69150c1d22681994900776fe12d55ea72b25a5add7f0a4b4da1885bbdba4748bbaee14d6ba047afce1d1b9344965a1250143e8f9c2763483d1f282c377f58ed44af0a55d1f1c5dd4a96e87c977249bde78d1d14ac1b1872e6afd517a5ab77a8c9fb91810d03434c44d5a6d2e2a86a +MD = 626fdfba02259dffd2f453daac22c961ed9e311a5130ab63bd29428d + +Len = 44584 +Msg = 203973e71516e2c24680f6d65e7d688486a934684289a043951d7a386cb4a13c3a04c7c8df7a74d0cecf4ef96fdc9907c2affa9446de8008191be4c5600910a2e94fdf9b0fea24c7dec7ed8a7891090bb7c8c7e814130129c8d759733108c37e763f44c96e0df98dbe905aef4243c079af1a25cb76cf2b8eeb7660aaa658c1b929fe7dbbc48cfb0bb6511d92959bc73af0d09ba532ba0720c92382d288a212394ab412d8d90e32290e32bfd939412534c210b2df117d9cc5ac0446539f8dbfe821888b87743ca7d00d5cc72ef5dce2516f02f0dfdbc0f366da413496b3c2cfadf6a371325fbe61e6fcf7bdf8921407783ed0e00e582a12ec9c03d4018ce84a6f102d4c40603b6854232a2a9ed9939a91769f07d44f64033d3a72affdf1a83918b84da219405cc503ca1e958a8ffea683609aef9a8a16ce43fcb54cf3acaaa38f362bfd25c6c87fda39fb86237f00303844e61fc6cfe779e42af53349839590bcd2f0e4cbbc279ec0b7e885d1703f42976aae1fc2e77f0e0a0b59ed693f120887d4c4e076e8232b9f8e0d1bfc2963e388191878f49a87949ce80a01b9a8c814d883ce788b14622c5e0493cf0c73151cf39a4cb1c6afa71482092ff7a38560bb9728373473068cace562a22a6916fdf4c03673529ff08695a4b6f1588da08106ac0b269c96874ab01cf061b37cdac273d832b5e3e623cd1fea3778abe1bfd4fbff74c4395c5e4442ebf5f9f2ab870ca121d939ed051123ba3cd3eb7806ab00a579ab39922e5521693abb926f5fe48587847228f86382316f82d47248642cae0900f7ac2f7232892ef18852b301bad32ce944a98a683e9f45a48037a1630986317da2459992be2697f8a56445f7d19e983998e52d7c0c14458a205f0e6b0c2f24d9f22e57f4c19daf375aeeadabf18fd45ab6046807b538761cfb1514e4fb52eafa308cf10203997b96ee197483e24de736e62dc37102b4e0435b7f3d369f968ccaa38af0224bc005feab0c21e96b81d9b47088c722b8308be586c510c9c0a41130954ddbbe62ba5455d7f03c4456d3b3bb9b3efb83a25380ebc5101506262381134c003a3d11307085bbec4dfc69ea7c35b177e8fa87c6c63e6088d55398bce45d11c996071eca62749f29dd796d6f3c09f85a14f02e3165c49f54d719df1743f52cd07584512f310ccace73222909fb1fb91009ce603a6667ca9da3c1c3dba5c3e53e621c7408e533860498616761c25f3bc04ffae58cd00e288ac2b10cb113af843be2374dfc87d319f3d39ded1f98b1c8936cde85cdaba10244bb53824094a150ee7f3da6b41dd3ccc2ac3f84ea86fda6b1eae008a6ff07a0f2160eed3130819280c09645d7b21be79aabadf46a932b1e41516a35bed52a4abd5c49142bef3793192daaf20e4b93b2a259500548c723786c27e3d5be34f148cd146ec0d7daab98df4fe17701f22375033d907f2c2acdfc59f6b3b04d2544e149c6e4b9dcf8c6ecfdada49b57aeb377e4e0d629bdc511f23145418e14af0b5f59fb13c7e4526ed699d05925b9882b016ec888cca49fd8a11b9df737bada2e08273963b294ee8c9ddc3e6adece86735bc87f103089c0085240853c72e8ae9625d80b3c4196d6098aed813d8e3fb373cd1c8dd41d12318b4dc7857809463429fd97f6063e9212cbe5f4213cfdb314149f8f783e5beaf947dad92514c27b73d0da8a84296f2fa8bcf61ba4cdf2d3b33c184bcab4b1b72026419eee766630737402d93c0d9c16a2c30488945a364797d481780aa0e922af0fc93d6707bd0c3dfbbeada61a8fef07c75963784a92b6c8c5223dc169c9d2ade9bbdf192f8eb8d84f562e4bb90f61e0b23bd5d905cbc84ff543c376771a70229e5fab8a57a3db4c561283b250e314346bf3063ef3ac26334e2c32b132a3a31715fdca44e5c21ea2fa3ad56449d4b10bdac81d2f7cfc787cb725b1fb022e149236dd63cf43b429e121154be70aaae06ee704423408826532177568da4f816a9ee9479fb1d740a311b5ec0ec5fd2d48637aed9fd6ff07965e586580d881664e401682a6740b30353b9d074585882492f57bcd599cc953b308613d217d00a26882a5d79f9f464b8666c1ae19b015596529d2ea9b0fce2e63361a45725034005f6b7e8eb2bbef583f9a0929b2cd0b926a09678d8bb576604ef26bc49cd98647dc038aef094f702007df5dbf3764d298499c22fd51192ab01d433c04c6a05c3e8653af41c9e3306b873ea5bad0fed233a9eaec8416c050e87832754b192e1faf0662d6ce1d00970066bec960a722722a32fcab68023452ce06c5fee2bd0a38600339e8dc2b2d0da94d68b1fae1581d478dd949f23cfc962b7006bf11d9bc0d1926decbb41bf2fa2ce44246cfa92838506289ac6aeda086c65dfda11f96cd08a4175b699e16d7c652d2576e29251b2c0e5815be183ca8886976b18a561bc490c87db8a8e14465d9e3c0ac124e7db8614918846543529d06da632a63fc91290c4c00fb72c7cc239ca7554b1b87da873fc94ade8b35560767e2cb70155a1f85e6f9492eae96d69975663a3b6f1c64112f55952c1734716c1349578c87b8ee5e8597005844978c50cde71684f85542dd97b7a175f189cb5672d7ae85a05e253f51eecd821b1214cf0df3922f9c7a9d74e0b517c1017c8b4cec5478634a93edadb2c556b31d4f969e9b52564245d29c5c73189f182f54dad7e9875f2e6ca06e3210e546f331953b46e1cc09c8daa6681fb6a7e083635bdf7ed13909efedcdcf55d317434a3f2e2a4e452853c6433e2844132c830985d7c3c90c321eaeb762399f6321f5c130608c3e3130de4668e20554f16d2fb37d11ad40023a4771b1a7d39629cb065fea74899f0caa4f4f31da27d6b8348d883351c66c1b192c42c3e4c6c48bdf1b2d56b248f83e5f51ea866db552cf4745908fdf35d4c0967428d56039b1f223df315c61f2d12f178a1e4fe5d751a06efed37a022300577bc72ccf6455e3c761f775e5caaeb2479aa2f37488b75a9273605ada03b8794a8ecf54993841e4705f0e01d736a524eeaf4271dd9f7af50d1d152c992a1bc6ff9831aa1c24263c57e6cadb1cebffae8c2012a172714baa7933c2519dbf756fe06098363e702c71e2bdd30d9a32e3d989b3b98a1c4850023f7e12d2d00aedfd53b0aaffe8637a0d7baed29f3b52792c4d31e034c16ab184c5c6aab61853acf7c24e0f0d03463998897f6f97e595ea2f40612ea84a2097b974d235055fe1dae5940370687561909874f951ff82415e6aca0d4ceda0b22a27b46c59c78cfd9e4f3197751928fca897a3e421def99ffc6654fbe10ba9689158ee5abe0587ef20be01d2c527025fa91c8008863d32f7edaa44f4960b4f8af5d488650dc738ff89ba6c7c099aedd2bab0722c2923159159be04c013f4795f7d21ec55ee13877501c9da5ce87ad09c03dae11ab1988ab4672bfa27ffce0f3052c980f208f35c98af75b33b0bd09206ad223598c7a579a93f7890f102a2f8459b54ae04046e9fb1bc455fe119a31d58e010d76f1350cab90a2d2de5c5771ee68148dd52898c38084fc14616bbfc58dac32d2d673ca36529f0d338cdf055685b2c2f74a540560fe59172d0a299e22bd37f00a047eba6324418f11b6f2b44beebc390ddc5d1d30c90aadf664c5a5d7e8d3b1199d9c7601a51ab0f3d931c4d08e06ef47f7ae30c1850c1916edda775394e20e97ee379d90397d0b506036e772e8057e2c28c1e07196ffe0e521e2733455f560fb82ea819d75fb06cde86c7cb1914a3e20ec22ccef9338ae078d4839e8808040bb082fd297cf172bb2de3d04fafe37d7ccbe5b2699ee58d8e4aca62bfeb905366cda62010dc95402b5be3300dd9370b3961bd5bdef2cc2ea12ec76d9c56416aa77664b8d6dd933f43d04e8f0d805675a03912cc37db3296a08e924c3fb261725615826d846932998bf5ec97568a89e43ab9acb07c435ded13d1f4a6b0e53992fc11c9e92067bc768b3084eeefe118808d4a53adb311965a835fb523f5d911f320d201d1b5be77fdcceae03ce36b4b702355ce6be62d250577a09d6c187431bc4ac0f2d04858ac57d58cc62a37126add8440e6931c7e521777fc732921a0e0160243638ce31ca2ab2e7cff5ff5bcbcee367463cd5eee65b80bdb010116446729d1c31ead8df2a3226024538425538accc35a0dc0b364a50fbca50d9d01480e1c3ea8e9dc4fc2f5e4f2eb8941cdbe1c9eb359ab1523c95c4511c260a5e9931d17d25a8dc13074e1186c386b3df7e5ba8d8cd80774b603d081939ac2c0d70fdc441341d20338f1afe75775bf21aab0acc1d841e78375fb49ecc895fb96d2a393c98bc57f4a6f1fa77839094e94ef0739611efb14ed679911ae3a1cd2d0e23789cec24f5e40dee711f49d5ce03fcdd2ab95e76e565894c66fee719510160fb4077c3f45358b8c31348208d63dca4cf94887ba02746d0568aad4f46a7d0f620055fa8a11cdd381e6594b04df2cdc7464595c1f1f38d3c1680b8a4b01e164e204bb712b19eec1c6ecc87618df761d4efc253f9e2d6832d0afda35fec404bd98a88109aac75ffc622dc92ccd3ee337e1a7f656c094cd343b245f009519aec08ad5eee99082ea2d5d90a495a9643bcf354e12c90cbc2f7f09aee111996aa618c2714b3a65b155fcc0fca0d836b9469053dac2c10b0e56bb4237aa90921eb56b4865e023afbe6910925b061efca6cc1f42314e6643f00991efa600a6069da362229af5cdf810ee12db941e8e829194270a3dfedf3ecb12a817e32c7b7f4f38a45af7d260c70faca9a38f305150e3674eb4e41a55840837aac2d57536849c3bdaf863bf03a5236b7ef334848eee050d3c4710e9ef9b0d413cf86625ff9eec76ab02c803de19b4f239d26b626ee55d4e9acba8b4d60d44f708c27d830053a7afc0820de71aab2a0a81491c1119bb55f2104994c331621323b62702d65e2e35afc07f1ab3dfe3ed7bfe5f2fdab6fb54c045c7bc5e2920e48bee30de6744b4fe3e5402d7af544a650d591c8c056d2ac181e25008cde6d11ef857e4f77ed86f6b2324122c22a267fb873a881bda68d206fd8ee960578ffc2933994b366242e6e228d7b70156f0c215b348acc5a0cc7a8afcf29cac464c2a6d015d6d835daba1cc1315f93e9167e41d572c8f70a1c4abb546b670d4e047e2522d4b53c7b53b2992ad88e1cb1c2f54793c8e39052375ecefa2816ec06ea5ac407d0a04e8b319059abed676903f6f9a932a14b36d6f0ac5a0dafb9c583791109fbb4388d09f6ebd4e0ea7c17541503fd1e969048ecda9be30b4cd0485853197d7ad9de865c161da1564a4c8636cf9ca9d40333452847b6008f99fae2d9eadc8501cc12b91601be3568a7495400692c35ef81b4ca0dea7328e7118a039cb2e2c72cf56593bc6c3607b46c030f65845b37bd9c8535f2155bd2be3e1e49254dc49a690057b4b3982d9eb61309f6baa38215eabe3517996af874718a2821e81deaa52257697a80280d70ea36bec894493956e36134fd585da1a4bd90280c79a5dd4e05750b83c69e4e14cd31a1f366d7f97134201535b3601fe9deca9e874e68051b6ee3be3eeb5d7800dbbe43e5c6e24b0b5965468f3f04ab9a71940c20dae70a73eb2e122a630803bb9217253e28fa967bcfbb59385fdddd5d02a6f14793a5461de6be77c4c20089ab8ce6b65b01836459139ccdef9a3e3da7fe5dde8a2d2550400e0f8fac9ce9625728a787dae51f5d19a184050372b844e1e1433456fbe9b1a0bdabaa203825365501c41a2c4820c934060baf128dde7bb147d1834c8454d2b6721d57ee38466e1b84e6ddcdaf2a313ebd8e1cab20035a8c9e935bb95b193bd7b7df296511bf82113e6a533d8eae3da04495ee2bede959ea51f32e5be48965ab1b6b9f0369031aecaad90b0a6b2f36ff17bd84235bd302410e9b6b72c537e897093d196782b380f436bd75a2c92fc5a1c36f8f0fde62ec2720d693bc51973d321dde390013436cce8e8213a53d22624eb4266f600a1b6003354f47872e49cbe2a5c96e4b7f3526e20eb175601b99854c866c95c2435f067bb86ff761cfa21d4f4d8939c84b0b57c523e61b81f907b721a6bc92853ec057e726b313ea9a42b9de71981c04fb2867ee8a7a668969ff606491a0f64740c1dcdc1ca33d7032ae2a06be609560042eefd49ef8e6c4c2e3299bd3943176fde5fdd0e6dac4910d46d65e909d3687ea81580dddec3ce2b8557b2dd900d4a2caaf435c21a459dbaeaf474c74886fdb32c228f0c3bea961aec8cda13e9130492b8045e469aa6dae7b3a1566f6cca1e86163eb23ed0aeca00aaf998c70a004d8b4fb6de01b5760881789a92473d49d2dfad9072db63b474c708c7745fbc7a2dffb8323f5a325e306f8107b0b982a821a63a41564bbda79b564e1ef644c729add43ca108bbdb0558991611382c059213c30578e7f6a62d4895c425a7def3b7d4f3212bc28b76148be77fe0b3088cadb11f565eab45e5ee826cb1050e9508c9ab44aff7f431cc32ce41039ba9b4e0a102a0751b2c9e449451c35fe5b4d2cd0a38af302e2617a5082b8fec6aa09ac9170e2fa9d6f26a89c4bd8214ee1ffb0b1f851deaf7e1a4c93da9b9807622210eb7deb53cb783127d28cf911948d97a8ab39a74267bab40ff7a50a708e7b6b17928791874e769fce8688ed8b61a6ab5126c7d9e2ce10f5310672942cbe5e5b2d013e7429a8e2c92922c0340328c58166bf2388144529245c5ab3b701397358cdc1f3119f5d3523b421b34afd7c82d035ceed307b6f6be7fe4ef8f1a262530a865f55e87cfdf655ec2dd2b0eebf370e6af085417c9f41a6735da2b294db85e6c333c76736edaed65d81bf046b738aa262ae7c598c7752e6682151983d07846410d9d82c41beb70b74d7d893d83bd622b96342d74f6a083e591476112f78c7090bcc089641e3a78bce8aa00dd97aa205dba9695929f9ea04a2b1909bc0a1c64bf094c933abff08cdc734b5d0d3a286d2460b604da09960dfe18331b6b5052ab38b9eaa92e4635357fb407a6b4b55fcfe84e3b82347eb1536a203c9e061254cc619741d128fa30f90d7587e5bc5076d0114dce18884417f9f50bdd9b75984a4fa46afa1510250a63ee7c72210c5395f8072517ccbea4ef8706a0bd19a02a5dbd68f9bc7dce0deaf88a9171638c06e6ce329ebda8bee6618607a885206f10b49c140d30104bfaf9424a7e2cb224b18edafb8069b47052977d5fecdcb9ca917977126efdd66d365fc8940a4a16bc9bb8a4c892c2f7bd30b6f476316bea99f7d1d3c9e4ccd71d084312d1fc74973c0d8ab5029d71798bc7e973b442d9bdc488e63aa137451c44b7cda96a1d513e8c4f2c9412691d42c460568381e6cf3a338de033022e0facc88c2714c5358a1295a9c7c95ebe6f5b4e4325ab45e4f568ce4de7475493d38f93cf76db4c0cc61b3d6383dd50640fcb13b87f746805f24f7e1221fcff2c38ce8bc8e5876669ae626dc487574f22a49af9078c6552116ff72922b9dd6bc2e7709abe999f7a15e9ee0e15fcbfc2c2d6d0ea7773066bd01369b8c6d56f011c877da7fbbdabf2d920c8069f099e130a4f76cd515ddf1c0987ac14469e3c2704c1fe99c57733357bfbf63fa7d77aa9c3b49489de7179cb8672c823ea3bcb46403dfa5a65efc0abc321829f788edeecb5b0300863d85be20d7dc6cffad4a4c799a279d1234fd9bc7b3b731059554f44a7e954312bb90dc76750adffbd935010d79983e646bc07d069f0d27991545719620707ec7d3d18e45c92859b7c9e568bc2c921811860d14f57e9a6c169b47dd3afb35221a08b039fb3eb568a7f1d3e9f21db5a8adf63bfa10b +MD = bea825534cecf3d9fb50464363478d54dbad942007ab8522bbe817f0 + +Len = 45376 +Msg = 0cf114e4bb8d801ed144b6b0c0cc5f2f18872a1ba9101411ec14e6439f63ff26b046536a5c14b42f98005176b0357cd52e25b070fd1dd224ce1db705bbe8e70b2a57a008f5f21eddc8c11aeeca6091d37f52c651ed978a88fd81bb6d25c30b7b44cb02a6cd52479128311b0055762690d3b776a6c0a6c5a541e6fa64241df3dfc44b822c2d5ab5b181f65b959b9ec374f1fbc757bf7109e362f57dd0011e289d737e27825d32f2a79bb8e293e201f1e7a3c7c24c3221e1aa27554b9b05ed311f190df991a50386d93e20b9e473c63751afc36d6d61ddd26259ae6cab75b396cb7e9f003f4df5f7b132d5e76e96161e1ade96d2a393ce6673c0aae9ea9c97e00b69dd45759c2fcf953e80741b92192daaf8e9f9d4111c244524efc93ec1c29646a46ecf1cdbda95ef2cc969d1b1f6ec6ac563e8e924ee94404d2514912b5b40e3f5fca61a531dd226c257cd7a39d6e3c00dada9cb126c3fcd03f5d3ca238b664c252cd35949210da2c9d3a8fd73e09b15976e446023c0ac520d070dd1f17a91e8fca85dbf080dcecb08e40242a73d9bd22c4fbf92a10f63393402ca8edd4f481f41184c36d70a9e094933e4311d146b5d94f82448d284ede8408e12e92f331459be23a9a5fd4003c4526855b21c8e942097107b6a0044d1c9f954eeca2e4d7cfe39727bf3c3d68764ec2a5eadedd39d81fc40cadf717a974226fc651923c608767badca0a71f5b251df21060ad90a0eea8d2f1b916d4cc8bd912e80be56c5402a4c7b9ed14fc40bf3f3f655b1265c70c2108575673ee2eba1009146a10f73ad8073840030a46c1ab3f051538a1cf049714eece1492b6588563ccdbfaa96f7d6e1ba71f70fba1467f79dd9097e05ef245f0f0a651f7bfd28440d8bf3c2327a43b6e7ea8c56d7e57b28c3377e73278086f41b870cd177d152d33a73ebcf2d247d65c396c6ed4407ddaf2a13ba52ccccf998390cdb48670a8e6b8d2caebacd1c0b58161eadbd49a115f29a13c6043afa04b33341dc6a93cf6474cc5f446c5b8b75f5a82949ac2ddbac5bdbe2a970b93330adcfcd162042495d56c0b3b6cc1e9844a64060a3a33ade2951b4266b7d939f03eed6599153bda0007931d10bc1606cffd2a86bc28bb6d2143bef8815150e6507de0f8c56e94dfbd545e7604b35672e2ee0a6f1ae4aeadff68352afae1f74aec4e5440f6ccc38826523a9097e0f7d075a3a039a70ca1e2b5590a6443e820ba1c16c3b89dbe2c65f37794074ad37e81f0a4786100ff19ae1bccab2eece281c6786d9bda3ac1541b7d4b07548e094f09dc66ff9f893a9a527b099405664f8ee279b969205e64befb5c2310e2d1d10dfaa161a22fd05d98825bb6516230bdacb0a89098256916e1a7e8b63d3cd6e92fb6d83b0cbc56c698c056496fdfec8b6f938d79c553eb665083db6ad8ecdda038e0f9499baf8d040f6ec3394bd8fa574c1d80db6d2675b180118cc7905d86949deb7d23eb83f39481104b1c81e7da9fd6b12b3bec3768b6f4f37542e0194244d348ec3058c42b06824756598e871dc373f10521eee164b5239c3d6334aa912f7d7bcf15700a83c887667d86de212470b85f7713d1beda5a906e4dbf2a8c03c301168e49dda19e690500190b0d609f16184f2998314a3a05cffc1ead2e381a8de28ba223de33fb569fa6b17c78afde32285265158a0e144536c838b3bc29360ea65db35a1e3bfb1f9bccef51cc6972334d0be2124864f9a77955146950f9f6c3d10f3a52fa244e229de52b015547fbb81ade0914f8f94a9aec154a449904cd2be7129f851e77451e2a71ed21cfb5cb2f064b52a4183587ae139b42cbd0e439c54cfa6b86e7bf7050a615be39882d611683c6473632a4513f94698675a502bd2e974926ced2776068a523069f1b296dfd37e15f51b4b017edc2e28db8820ad7a64a6149d38b1995d4bc2c6ee8e5344241873f236d2b034c374398e12b044719eacae54d2b6e1071134fb44f9d92d88e91f6020c0f11f87e8a7b1ef9438851e45abd47b93cf81692a2c44d31339070835d090ca1bde61a1f75fdc76e78aab5c78485fb169eb5766b11de49bc216aa6f10134a16cd033e2cf7830448950c7ed53e6b991dda722da7adee24c391d9df6382d0d52c60c77dcdf1fb6f902628c62e9ffcc8e870ccc9d326874c7405e86c8c94ef7a355c91e82eecaf657420454a12a3e43539b362f39324d0a4d5a8ac19944d58815947cb45f7f087301c0dcad327530928392a9a758fb0b1730f018db020b6f332bfabdc5dd0066b17b174212915b654e8105ddd166ed112034998f4f7dbd5a9d4900f2cf85f3443615bdeb11485d4adbfe5d4949dd990db9aacf647b86ab460b1f3fc23de4f84f75741d2e25c1fb6fdf3e01825d377f3f48160a2efb9785b010f11f929d646fe6f418cd81cc88a632acd2bb0fa80f10545008c2455c3abd07537128ea6a9eca993676378c7216fe31e95eb24796ceecbb65e5805e09dab1da2711d43021feb8d4c10ef3b4b2f753fbf934bfd0c5e174f30e5edccf711214a72055aa1a500e8b2808558a811ba457ef70f71c21a1f149899db730104e5b55dcc3af22ff7148e21180fc5487f8a86a8ad5085fb0b788caedb89112d6ee20e6097590d75612382e1fdf45ea1fe66e1c6c99fb030462e279adc37f0d79dd0d55abdaad2fc49f46ffa157c4d3df718fedf324419ea350c8e63862d3887f977b15425756a4b1850fb754af1b7a4d06684fbd287eab03fd96911bfb210c5ea9e4b55b702fdeb37ffce598399c75cf3191c2290af480bcc5c5fad710fa01ad80f4a655b98b2620cc991aea8bea2efc6f96d5d54065d82445e193d838d110d2b90578cf981b13a0176ec7ca0a673e5b3cd20b306d2519d10a73fccdd728b274bea1ad3790323fa7dcd86cc559960c4205fdc2d8f5c4ce496ff785f670635eea0e53a41c367302be89708a5aee1911677754ad2d5ec75e03f2e6c00099338ec934860dfc0f5ff54a99c191093c52f621fd811aac1caf41873fbc4b6ab5fbca98add33b456f4b9fd2aa46214ec8c62318050dabd3b3df2149b30288a35b3e8acee6a5cc86eae85afd2778bb9a17f510a02a44d142c8e975d1d933f828fd7e47d28b88223f1698cf009dc3b079be625750d9e11b67a060a7a63edb2a9a113d9a49e8f4ecec56ef54b379d1a07c00905fa0904cfab0feb74f3d305280454afefa9bab668d0d405e945c480d1c0f92f1a225e9f2efcd185fc51d7a54a9d8ef24d15e3f7773104759068194e083a2fa18c747437d7b0aa1ecb1bd693c07b38261c70801823f93f08113b9cce667e48a88279b49471cf81fc08d9389831a63b918340fbe216316c049546b6ca94932e8a24b7847da5623d68dc14647c46277d7bab0fbb1df5e173b24312cf083a81c78f9bb84dbb1b6fc8aa6f52c407a605e82ebb6428916b0f3c5a44265052ff51fd010f0478177a01090ae81ebf01f94863f1dcc8aa051ec5ae44bf0a9f6e8b0ab626a7216b566b1de8d06ffdbd31e9f9d50b36c2a943b60ab3b7dd47262487b4dc488c99904395cd4d432e7926601c1e28c5f0da8d11dce732fdc6644c3e9b5856ade6f44ea5a11820ac4a1963563ac243673398be383862145ca1e978826efd0c9ddcb80c4336074953ee65dadbecea0e392685a58071863f1d965f14baa9abe662966f34e6fda0b18040e6f4b7daa07182f228a8b02f589c87cf4d87acf36acc433da02d569ded3e7b682319b1abeb548cbe0930921ce213e4713b3921f543a687f9d45f5bbff6d98b8fa5b29307d49f9db3b1a6ecde2b8d7aa7b192e0573d5c77f19232bd0bc26bfaddf2252398613afef9a770871d3bf0939738fab3c061d65b4e620e432859da0e7994dc2a039c0df7b773f82b821b26756957d960d8b6fd7b37cc5bb7bfc310108c133d6ff38d01cf159ea49fb4d21568469797b04844b71ed55981df7708f3473df5b2bc0e3bfcd03cafdead5c68a7b6567f9c6bb813ed8d5090e883f9316dfdb5c4a2d7fcaee740542e0d1b22e6c2a5c0975059cf2c8811cffaf86ded4665781b07758966eeab6884a498b2ad53507fad671c4136966ef07a1d1a64f94dc2029847929af4042e90f598e93aa6b7388a447866ed955989727a83b42fc8506ee1540b63d24df75a00cf92677bb41a620fae519723937ebfe1f7b430970056505d76db4ff91acf16ff391a7a3d8085b655127a18acd80bfa831837f4644a6850c0273fbed6029449d65bb98a47b2ff1ca6997c50500d0b21a206936a5e4d8d56508ec01832ae4fddce5ef6ff62f1917c486adea6d6da831c84e953f84cb2cd4a57d4e5c6d5c508b92d6a5a4256e542be84af288408e67dd371e8fc08f82030141b20372e87f0c5c53ba66cb9eb371acaa28de351acda002eb32b18012840bf9de59b3db910d790e9423bb4cde88f2188ea2e96748b5d151591db2e4ba5ba81cbfc6c7fcf3721700d8851bae6179460e1a4bac9576d18c3705220c74e37357f87aabd85d9c5776e19560e076d3eefdebb175804611ab212273f216a71a559bfba35b3d83d838090f5f49d22c82648a3008c31d0fa59d40a22a0079f1fb9cf4b4ae678ff6536e5e08aaa2493619745b8964b6db48af326b449bdf9efbd393f2b21053482b7a94d66bec0cce39f599124679c333979b14f1785dd20e0b4ee506525da0eea9da361297a7dbc99e933d2ef59c7abe53059f83bbc49a4fc6ca0ab0340ac2fbd7eebc931a72b1d3da9eeb1225613ff4315b3c829d74aaccb4d17f80c59c5bf86c24a2c862b1016574652d5c445ca54d8918968e8bf2660d4c01ade89576be5cad0883231f074d0702827e7dd0d32d52e0da17f805a25e99f2b73058124e7c913126d8439dca1720fb7358e769893a7ccefc4b6fa92916fb4f7e816fca78194e8efc0caa6d9de25bd5b447395cd37f53aa0bab55d4eb0199c8d42b903c8806ed2cf4bab80ce7211017c1b3d459465e501894b23b176cc10de5348959c6f2e7e581ad4d0d0a2a65d638283958bd5649fa8113fa9fff12b7c02b3c453d284d1ed023924e19e3fc2326bd5442371787d4cb79f5dee4ea9158490147c9aaaefb2e258920385f08c0eb7a2dd268efe66f814b69d6e9ba685d45011de3a132e981986e38e3964d071d1158f02f17f3a851d1e2e723a570f6daf090d78c46665684d012a958d2745d65573bbad6c9d2ebe3393a78689cb9249edd70a4ce23a5745987ab510c87657a3e0faac446091e1fa849aa741239e3601d7e192c15e370d1840190d65b2f80fc0bbd1ec3195025b1f565cb80bd079047eb5502c3fff068eca8e08b9fe135674162e2203dad399a516f201614c570402a6cf4b612e8c4fe241ca6c4141b3388f8b801277a9e2fec6c8a0b02b6c81e63a626cfbb7f7ceb912673c702e985a446608fbcbd20489d8c61ca8919cd316c8b49bd588b8008ded25232c39076acf250476e5759b5591cfaef951cd3ee9de5177375319ecb29093235ce1f2541fdb816ebb87375b03c38c8549e48c9917a02a8b202cd6da75a15215fca4c19e1f4601aec1293a9976e5b753f3a9f533c326faf83ca8e80ab286d202eabdce6bd1d84cca6e13a6dd16bff821dfe8319657366ac675117704cf08bcf20e7442469f580bcdac8ca2b04b1bf5f6f5e9674a399922feb1adaa5136efb8ed501045b4f090e5bc62dd56987dbf59da1df3c0d5d317c9a8dac6aa784d036dfc98dbfe3f2d4683a1784feb1f1474cad53f5064c18b7707cad7a29f017e0c8426ce1b966ebc438c83d52889cd7802f0f043467a96cb83866e9089b07530d1a474da1935c9064fa96b63b0572911317532111e2bdafa01eb9bedc5055aca1b76eca41d01d97331826009317ebb48c9fea491209e177fbae15ad69dc73bb6b2a299156f25256cb3be6aaff1260b8391364cac93fcd4c4760eb233581e9d5b5ecf801356c736579b05913d3975a22b52c23448c16c9a30fc1aabec3f310a21e7a5ab871c10929db201de9c519607a9d44d644ef017f02b16ae4de99a29097014ce215a0727c3a7c05858b281afc263df7de2a769245e1d8a72a113b12d23b0aeefea72603451dc8db2086811e95cc33bfab83974bc6c6e210dae50cb66de497db30fb96e61c2a3e0b8f4a7486b5c30af6deeee5807a387a3287c8931fcc5a449bf97167bd4a06683112655705e4a12057e8aad5f2c8aced86a14a72c165d27dabe8a70cdb5728c3c66a65bcfe9afd003d4965dcf54aaac887c7d9002dc303bf856f0b1ad2dc17dd45f7aa2ad3511d4721819e8f1a6898a7a05bf2efb77c5496a2fd2c0636414a013a3ac115469fb8519f11c350d4bb1ce77aee367610fa4b7f9f237853781f35fc0db448f0baef24bc208a62c6b6aaae2471ff0257acb56ee6d4728e871ace621a5ae4806192c808e3304bfb5522cfa2cb2ffee4f90d462578ed5acd1580f764f88c5c25dc70a2cb6358f6fb80cb92b1680f6e6cde95250592345cb2835cf2a4f32c7b97c5d717e2b904ebf1ddf38c50678aedf87cd6ca95bf63e8dd550178b8a6b5d364b2388ff560cebb6cc14d14e6663cce164864af3c7cd69fbc0f10d2068fa2f40b16078369d710e5daef2ae509d09fbf44f5b15b904716e1cd260d97152a9e4df995e68ac69865ebaa9c3f4521332e1212d93f5807aaaf4f9f1e4a406ae3e251be86381e7231484d8a6cdcedd30a6266fe77711d2913fa39806c79668e58299fd87b8ea7131e327bc8e5a62785c2c73e7654f9236b1fa2503fa4fd61e603de98c5ea5ccd2fdbbf07047b0d8abff8e708f8f639f3542a11f42b3c58db08637bcd155714f90ed6487fbbb1759fe8192c4714dfa6156acfd3c5b1b71e2a7be37bbd255669a356ba59365d0d90dfa4a011795885d002157d62158199afe8972078e9944cad649de48bdb6703d1b26c2a2130126d5a31eacf47940948908e1096ddc2e0ce62a52ae13acf7828aab0a523f5ebf11a872d6111eea1c76872934eb324d979302bfda42cf0830ee09e72f609ea0d72f1e96d0ef1e1cf3a6da890c7f1e8adec366bd6804447b679c02f51c5688824f6a813794afbab9cd0cca4ff02ff83b0b82594b855b39aba674bcfd599ac5ab31a9177cabb7bb66b390a1a469638a0824ba2491b7af7740f45d81286f961dc585d42a8e9c71e8cdab1aa5affe819a97335210b88969c7e35a42979de5b0587551d20095ef430b96c092209937f2f1933f3263e880efef3cde08478543523d659f8de1b82d97ea69f7e058899c1e57a25142654826aab7f28b98d90812e3963d76ec171fddd44fec5aec96a8b66d936c706a60010202e9ae66da954dd9cb29a4dfd7e9f3876200caf09e211d0c486f9aa4929a3a9c604b1779b6c37d2071bf43e0369e5cb3a9c5a9c1df43112615b1d4f5a25c1c7d2aa7d6cb15aabf703f1fc284f17f81ea116832d69542ac8d3d22c16c82eecf2ccac39264dd933c4f9c13c8d0f1d48bb302af0c36aa6715c8298a0a101a987a31a667f44df8c61c48f061fdce1ce5a197e464dfe904fa755f40b157ea52a24615285da38d4c8b86e0a4d20b855bf9ec1d1f4d55f88d43f3dbe95e4f0013535a5fb66c482cc32aa2a11e2e97fd975994cd1b33146a2b89b8c38e5b9a5c43f5df97ba5b8b3344ea9912c73d4c3fb64ec02f40ddc447c816ec9f966ee106cccefc469bf313a9b61593bb07c6cf52a21e98ccf7150e984b30b5f86960cc049427daf3c1fc899603f1b7254793cb3e4111452ba6a19a649c203e546ff802608547a026943e940212c72ed7ed6ae60c7d71efd4b74a0fb3a32ead3e10002c22867877677c80ddf6cbde20596314c8c33c84bd5090d8158d48a12b3bb43ef1507e00873fe18c0c791680b4340f591a6b6894d8269b1356fb73c3dfd5c37cfaf45728f7352b28c894dbf312ef5b00840de8e768de3ec377040cdaf293a580ee15f838f0d2c21db94e02806312aed3adafa4c59401e3af23b1fb2f8bfdc21276bc4978999c0e +MD = 10afe95d2443090382eda0994afefe9ae6bd29232074783de973be2b + +Len = 46168 +Msg = 64a2985720e2b5a398aefa1c96b32efdc012bb9478b5b63b00e21a8ae21054cb8ffa05ae46f3033f3779a114e90c30cbd941c5b464123dcae6787fe8243c0139e7098ef1eac7463af624e6714c73499343ba2ff232063e2d9002465e5ac8c995b5f7bb86d506867e1dd8519c8890823d47a681b8ac3bbf4c46a9f8564e5fb5c741ec14d6cf59cbf2f4bc6bfb650ae2b12d2d446d9856cb0f50951c37c6a7cbb8d30f2249a0681e7ec3f9bbf7aa8a71d83d76ff78bf02675ef5ed3a698b48154eb3886c480fda860ad1b6c9f921b73898bfaa3a43e9e59d217fdada5465eb9b7229807a39e5570c7e671c1e67903a3edafaf07e35dda77440348385601b38640d7c1fd585ea89b7c2cd5341aac0ba8c87377151b665f1f5a35d11c2f577d67805f58c0495e6158fbf4b82ba2b79e02885be543e2e476b263241ab1a7b3f6edf44dcf08fd0a1a69c5b29d1125182541cbed7c2ca054cbc11d62a7a145a3ca7a1b07972ff9de2e2e77fae69d083a5bd7018cae37fa43c8cbe755ea538fa362ac733133bdb667371771423727c2ba8c32a7ddedee471df8533f826550ec3f59e59b4f372ab921afc5400d0139fb0540f54d45cdc81d5fd4d7a48cab21f1e40ac5d1a6240f889a02b872dfd75c07a7149f5058c04df395d8c9b4b92e3f271e0fcdd4fa6cd48b2cda51781f2c067f1c71916f7b67f8503c8eb9cebc6110f259e35e03a0740267768130ce6f61b1c7d1d25be942274fb9d0611870fad63ffa340ff6fc3cfc1173f3b1c6f4353ae68863d18f5c3180cca6ddfa8639f900249528e0491d2447aa5730c69477f4fa2d274ed98c36cdf6f79dd1b553982b715759952e94e4fb0905779a4a19c84331fe3aff64d3177c0c4905381c210a26ac50ce25259ae22592eb5bacb6d7639474c219f20e146cd03339839da97f0e6f13a959457faba34887a489e4875de86d25216ac32f90b54f0e618f6ee7be236939b98162974796b849c978ee560db531e594a3ff64086f5ce0298f28517ec7a9a109dd29070f4b097bd2bf068d77688718844be325bc199e7b2a0956713199a4cc32d2f549631ec07058a2d9a81b60e14078c93aff5c426811cb9475b166e7ff2d9cf953c8d3a051d9b3eae4307a3cb4fffaa2435b49586e5686a702bc8f50fd37d0c6c12fe17e521a8cfda2b1045a8699826db8c403e9f5bbf3c789dd3b53339d56b1d9c90ce725b53c3181945a58dacf9891f7b42c75b2a49b6c77adcb6d46a09740ea3ec699612c5a4d2d74dca635e4b5b57cb6236a09c2d60c5898e01d8af42afa8eeb9ef379025f96f2bd2bc10c8b522ed44479558f794c2db948e9d2950a8a55347a0693f1b9c4b57de79847e32606848ae9aeb6a84a5656f618792ad9562dd787449de95fc5221f1b8ec2993e373b4d0d10241be8b89d0ebba1fe94ec699df7d3e5b56217b6e03a780d3b33925178fed75289e3c54678bb565fea9f22a7434cc6d7fdacbdf1979e000d52b573e74800761b30acc26681f372acdda830a1c63cbc95c707b727a0c05fe9b98d577b10f865e4c8e564bb413d7d33484e8aeb8f4e4199b23197aba437c43cd029a18f7c4d2349b30c20972efff26dab0095e71707e27e3f88d4000a7ae97127190696d2853ab47faf8a9ca3c16ed6866ce626f5e00b9ddf9bf0c75bf03c112ee9eb23cc2728af9f4e072e58084ee85ac1f01d946d498302d98264013e48b7680ac3a8b1a959b582563aeeb46b0f2da8ce485d7b0618c859cfed58b2bb7bbe630a34a83b926a40d9567a3041304c00f0d053493250f5d844fda627b90e51a0905692a4c268b6ebf4cd59b5671e722cb376a57322c46d2d44d15153ac9d7708807e7220de92ec1175396dc0ce7c1deb613fc35df4e6eb41e9e9536f05ef4850a3e057aee8b7565bdb190ae4cfefbbd79a8a118c012efcb094b440dc4d7a32038b3ac791893ca21586ead5b3e3cfb87bcff4246fd0032df3e5b09e2dfbd4e0bba6dc268b38994be9093d42a0c2c2a04261ec808bfa09db864d6cbfc69985c0c3774308fe6f63a050f26ed62db53f0fb600f19a62e7b991d24c574a489ee35ec58d1df36da6126bb7a32df4cd63bb63612da1f6871188fd8262feb2267494172c48bb6a5b752bfab7cbc9430226be27be385c096b1ffe5af111c18be2c30e76823aa9c23a4516d9cbbcef356ea6bde937b1ae67715b9056b8e94e3c0002c92941f377bfac9e79855df6fe40554c4104683a07854c6cd55d444a0346f0ac4a7c05e383a704f9ba89f91a84f8688fde25ba3205e75ebc33fb1dc47f31473808fb288b8c1ce5ef6054279801c22af9ebb9c82a18022ad2429ccfd9208f762e8b23346bcf85c1d7f18063eff341ef12f02cfc92bc6a334777deb50875b600085780a404ec761b5be47b3882d7dc5753921bd1fc6183fa744a2d77c31d59775de4a011d7516274e3bfb100113e05e64447f2e2d7b5e402e1400582a955ce3e87b8ede853acdf40e7f9de64fb84530e5d684ea9b5180ecf36dff3502bdd98e81e5ae6a22a3d411201193fd1a249584217998b81051668c1bda0738abb035de6aa3106d99bb13c6aa79471d0b60b6a240b423613482f867d1e08027ce76561cc83d1eaf9587725ad5401f0ec97392d2690f8daeb0ec1fc73b09d2cb1218268fc63c3ef7bc11da17c8ed8597fd65105cc4133e642c97c1f281dc65ec209d8c818927da0eb6603143ac08e0824f3f17877a479f4e4f8cc731cce1a2529f0d6f383c8659bd2c7c6127a81998956608919db3341633c2d21acc44a1efc43870b9fd05e223cac66e500be5a91599ebc865e496600cda2d71a00b10a3b50b93cf51180cc1a0fd2b3de8368a3fbe5585877ba54c55ea0c36724336596f5def57311fd17aae382004f10ff2c064fd93dd4ebb27fc9b169188dcea94468e4d382d9f0b70772e53f9f893af85af9f39199b240db4cfb8fa31c9b77d6e0087efaebc20fd3c2acb5952b029af387e78dbb066125992ed36fcb4a20be30caee2aa19adbcdd7ebc0cb2f1d3bef75356774920e61f870a7d9d86e1bae106b67928e540a77b937f5579c69e0a576f1e5e25ec31c4537f64a873ff81ba40cdb489e00aec536607841b9bfd23fdfeffe1bf092caba8b629e89542cf5c4931204d059280e5588422d839f9c04753ba8fe3a0ac725539516dde6d915d3a10bbe7cb15c7aff360decac2d51c75d1b594076d2a9424f8202b348d57e913e3b6e60a74e305ffde107ae889188a868aca924fc7844bac5c054c643e7cd1581ee4ba729194d7d86d1262657629cd593a3bbf4f39d85970498ebde73903d194b54240056953c2a26a0e9e27d1306d58a9af20f00b4b44da876685a3c61571306e777fac464650c59bab3418e257f0e99ecfbf1884079650dd33ac822dda3a92122c7f506e9508a9c8922e1ff0c4e076e243a3b0ed34d63c159e3b6bb579b323690849d72a6972b6bb6b9323459fc4663eb2d4a18ef98d05f54e3945a71b654b3ab4e42bc2ea17553bdd6c0e2711252177c45bd1af7f421346ecaefa4be7d6734fd758327e3f7eec0f90c0c7df428a0f58223f2a98ee7dcecf1fa371e90690016e1aaed6a69130e5002d9736b4597b98a8748893916dc79e5a901e92c99f1b5f6025edfd8107b3a6d65cfa43f07e80242e613ef3e124a6ebade62a4533dbfdf3ec9f1d9158ca919959c4efd6d9db221bb3926a34d13ca41d92cacc726ee2c027dc31477973015124500e81d7b995e8e5ffaf143da9dd499ccee40e01c3dbeb62f782729d1ad57cb185e1b52ed6d75beada5f42f6b12e1cd02cdbf7da7aee070b043ba6e5956e99a7bee695c379c701920c4afe473058a52273588fe6db459b8ccc03eb392bf3306ec4c5287ee98d65465c194f1870826cf86a02df0b2d052f4c17834a81268cca6e5f25764870520c6c94743e51b7d5fabbdb82ee32ba594cb3ac62caa5cc63ee0e56ae8807543e806e7a02d1da4e79d6d48c7fc544c86779295549748d669d24b9730965a5de7848b2d76c129b7d9588a945a26a27a0573e16d8e04e223b65f4d47cde15085629eca27259097d8b5299a4d093e7c58a5223e2fece634a95e1e7c83ad4a11a0478f4a41572bd66c2d7902cf4f94404cd80b1f58fbcb8eeba3984fd759410c12f8ee922865f363f684df5a8787c87ceb3086fb8535157f7f39653dbf5c66ae7219253838ec77cf1c6db518225c5ba0a8212e5911236474b8820ddcb8111b87320adb82ff553986324aa2a21c37ce4a083c89ce9931290d4c1fea933e31d014d7507a28e83aa917ccae10bed1a490e77fe501b299f8e3b78e659407ce1934d5d68c7980800746f26ffa9794ef1d23f793bd2eab7fe524e213e58280f441ba48b40162305335b3a480c2afeac11c27f8d817792fd7805d4b61224eb52d35c0fbf471bcaede505fbc9398b216f43bfd69b1a669a61d44fd21faae410af58ff95e1c3ff1528de1aba93cef56bff4d714d8c4cc88a4ddcda52444ec1208d99ab3fd9fde98c1ee6437d8d138f62c5f782eb4660c5eb28564b5b0d46e3a2546009148f3d02b837c5284e9f508290270b97b9b29e84445a0b4df662d9711e6b73c11cebcb7120dc427034b1ccf57d8e4f5bbdb84d2e1d4bc3862a2b51931d3c9a7a5fd6ee5f4c7327c338abd011af638d730141b6eafe63469eff50f473262e9fdce636eff4c5663acb6075a4fdb00c8b8a8d3322e1700a5b3e7db90b36c1a94991b8f51657121b442db6f890e208f312466778d73bfaa8cc0ead4edd0776155f3eddf9abb1bbfc0c94421adce83d7ee94f99f61e1f25a55fb596f8b40ccedbaa8e5e2cf629496f5ca60bc4cf36d917da4e2b973eb57869dddc409dd66d5061f22642743fe843defa0b19dfb2f56425abeb234181267b5c0d2ab4268c538510feb191bbcd1631b0af6c7451cd4c641025cd8bde2d9ab6e6b948f97c1ee6f35098d553e8e9da9b4d437125046864633f109d6a558b38b270a7dd1785d44d248a863a91e3db5c0a1d7ec133decb65e81c3402c98ee329f660a092172bf6b1a02491895394ebc506882805a6c93e767c0e58a5af717d950a206c0f0055cb39ed88816a9fe3613d15f608e486ac08bfa67d462d24e6a0a37716d3fbdaeb9c0e951c1e847fb884ebc1cfe707dc6e7269eed1c44331d5957bc4ac9dfeaed4b157204a3080fafb9df8917b8d15aff9c49cdc739b8fdc26a546794991c183fa523d14797e051894f48b0d62c2b70834467ff9c993b82fc1152c1f5479ec6144c7e8fb10d1bce26bd1cdbeec4e95ee073f3bcc3c7367328e30543d371b27509a577f5c79f14d5f687ce62b82f856695af9f7dd350543ec763de75b593f1859e44c2ac01ba65f98743cfddd8a89a38115badcb51a0ff5655f830c0122af6a830aec13ae5eb89a93755b3a5a6eca233f21cb12db545a24a5334becb8fa32c3d7f5805faeaaeea85a551fc62c94807faa6474c0d74cae79b5d8ddae07498fcc5b8b4f394867112ef5fad1c9da66765ecbc7fc0f3269d29c9c38817c77778f2c19b5a3c705fde9d76a4eb86aed4a7369a832ad267312903462397f7b8fecfa8b195cc2316cd53e48c3371ed2ecaa3e484b8ecd2e22b1aee910c51ed5d71198936266f5a00655d82c089f49295feda0a2bcc1a54ec8adf565acc3a8b2d74c30eafbbd843c59e67f293f6d8296cf7b611f01b57dafec6e2d4d411a633918068c38ef47b72ceff1fae772891141c3bc496824509d78165c1e4cd4b4989321a8722643eed69950dc120fa8da3e53c3181f252d7c4cd2cedf8f086f788ee77a98ab5b019828aa02108f49ea4a51f457f7adfd2220d3e59d5f4a29194e8f5eac40ff80312ff6888ff6393c3fc0914b08c1b9990d247ad80a441558db1ee1203e07353dd99a885a7ff5d791af2548815dde0ca1f56f89d39ef6b93dbcd0cd54b854173903c12649587433f0425fbcbddfb66ebce3eb4800dfddfe7fc44d9b23a3916b1db68c187da4dd13ff0157352814b1a792de7fff855761abc6fb7b93b48525fa90fbe3a51dea974069f3f5fdea86387eccee13f58a8eeb8abc6a43fd30e9788c3bd9ae1751b30a82d420225b2abdb1bc121b9073380be16107188d20be54f2e9c658d5b443869ea0e991c496104086290b6edcc1b656adf94f0d42458750fbd8d88040c518ebbb644f4dc4f7c6971d8d60eee0272df7b51a3d5248b4b264fb22195ad891fb6ac994ae5c0bc6714ae0b0b9a484edc576638b78ee89b568195a8f33ed8362128c30f9b0c7804b3ce1355abc96b15aa55c1e16a9e9ec90d1f580e7cb412a7e85d8585bfb950acd4de5865214ce4db7f6314d81784c588c1482d5f28c5fb62e7dd7aa8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda788eb2015680ac5610fb1380b4e7d7a9cda6178dca98690449f5551b66ad2826cab2b662f56903fc95b4611bc86f7a834a34ddc3be7bf142c8baa096abaa3cd51ad0c0b6d15e590eab9e50a4c60c91061f1ed6373d91974c1ad9d263110a0d43fd8b596396cafc0ae70b7ac24a59bba090a6994ec483db7ed4c572f723670a11c724e8ffa2497d8fccae37eaa1d14ac1537eaf80efbd2e597b2ffac97f2bc3cd2c4017f170544dfbb0d9109478fddf06ec0981542bc8107a725be25070d2cab4716f4edfad75fddd582ebd363c49e8efaed9a76ee51f22304eebc232a4f67f865b04f610a628fdb317116666785fe8ca30619a07c83cc449855202d687f162b12d93b63af6e7ddfb7223d4ab998a5f450523c1d521ab76f4aa113cc2967e04a38dae07c51c2d0f44fdc8605c3c53ccee91a2c73dade5dae021cbc87d5cd6e5fbefb65335827311fe1e91921ecd66b2055a6102d7a976308a80c44e6d47a67718c84f2112d65486a558f1f269b91d9f47e3e11d09c0c748625bad2718e3674898abdb19d3644bcdc9317c09a3ac02f514b2a57e6a706362e5f6e8fb16cc83daea0eec85fdc8c367d84c9230730291440a4b109f7034d510a3f70a22dd4fa69e8b65e5fdf87045d560eec71f4e59531c7711d4f8917a96e22ad07346d2f92a13fb4569fa6a075da6e1acad1eac1cb2ef19ab452264de2357c927c6dfae6598cbc821eaf3b8da754ce91a96c702c95b2c308bf3a550cbf4d22d417745b5f17d36608feb826b862747c59d26a0e8eb96547a1852f9fbd095f1c5d20721804941d462f3ee2f0876ee2825c8df24c4f00f0844e50588ac688127013df8eba3c971362dd255420649245e880212cb3d732fb82f866dda090040f28e09cf1c86eea5dc4fbfc373eb69745b4afd841ca8e172d4a8510e7698345fd4cab9ec2ca0453a274720bb2d2e5468bf0d0f85919dd762fe3df969e6c071285e25c2e2a49659b8a78289aee655965bfa3cbca9b292a19a855ec40293185354ff4da9451ccf98abfda07f1137e79bc89d688963081dec641a99656b040637402890f185edb28e7e6a2f65848a6af158f90eea440aa6246a2e6c31f5d220b9846aae2027afe5a7caad6dc16b56463367cd9e73bf22a1d6172145de4565ee369c55e3b99ccbef70fb080a3748340fbe8f6b95ba46e8b76de5a3c4bedc37c55ae24ad02267da26769a3a732badac2e0f3a5393028dd54d78701647582cd04c8310e9f1ff1b433125229547130e173 +MD = 5af6a6102bae87a93e1ce434b8542fc12e17044f895868f25ee0fd81 + +Len = 46960 +Msg = f7af9c49d893989762dc51f7e79d593c3e67d1982119e60fd4f99c2b0704cbf2fe836615efdf036aacb6989c812e8322608ace6d3bfbb066b2b85717ee50e4a8cd3fb88e3fc0eefff0e328a927df8fa3eea915a473c6fe73ae5d9e9e4490646fab0c171c8fdf603e758b89849f5884a92fee2fa38f22d61e0f11f928d06b502ee2120d27a9e4610f85d44197b1406a1b6c7fa3d457b9424f1ffbf11d5b8ab2cdb87821175376f95a66e9da4927404ae0ed84f99e953049ee24440de6ad9591337667dc54563d310761f0dc01c8ff2be2fa26ba680f32f3e36713d6e98e33f64a6306c4467ae310febe12cd295b261508db8c6d9c8e6549163091d38fc60ce8f9c97e6356860d9f28c5763728a95c103ad7e09aa1da71526fc7e58c401cc96f28eef641ea4465e56bbe45a1667a4a25603747c9dfbbff17d7733989655a1293bf1b97e46c7a93eab0f0a6944b95975b6344eb83bef9b79e347db25364468e5da79889d642f13fb6e0a4c2973fc4ecbb2943f44fa65b40f1702d7a71a7a9e6d4c6adf39fd6711052e122c032aacdf14b9b7f8ab6ffab431871cbb96b944ac20105a2fdc58ec2aec59db2c9edf4794d15a13fd33f31af6719219f96ca95f3c8ea4cbed1d2d4abc217fa9c05518590a92124cafa72a43055fe66f13a14116aa399844b944e0ff5f450e2279be5c5daac750a6925d7c0f5b4cf2a08cdd47078f916938f71bfa668eb793c9cb4311d1fff1b3d647df7eec82d92542d768f19e5736763d38eaf03cc509af04377bef326491ba3032959946f6851cca85dcf7679b896db5e13a58de9cab9e5640d13b0b8337b268e51851cb30c137ac1ab1beefc71abe27a292aac8702e005479db9bd9d6545ad4c1f04ec5cc1e146c088fce93545ac626df8c5c86d9f1637345036809d86811f86b95d6e3231c218ec1bf9cfeddda34280a7fe49644a6463724e14637f3e356684471808fd02bed88e8d9a09ece0976afb5e5d9834abd0714abedacd0d376b698ef2be2484dcdd6eee0567fdfaf791c126476b1ba569654a04c811260d162a10ece1d629906828c254ace914dfca98314887af3b7e2d28d4e89640d548867b43e53ee87fe94da6bc08aaa7b66200b4a2ab49b160899e23f83d4def44862d64eac22e7c8e57345f455126294c4d41edfa95b3faf38c655d9f4d18a7da8fb3f0edccdb1bbda2c55c437948f83c66374c224fed115a5029deaf5e1deeff2ac12434486d4c7691a7a4a0c63a9bf07688d80221207eff9d93af12b9844f1b21ff0aa8810c9821ed833f4281219ace44dc9a825274ca483b4bd7aea6764f963a14a92fbede86247e003613f1287e409adc988b2c107c9ff1f85e6d6c1b78d93ea909b2460e9ee80cc790f96074cead3e2fdc03f51d1c6b88424d35559a514af465331a62c268d55f7f55de1430127df97e6ed4f6c23314c9d3abf0a71b625226f12e4d5a236d543ed18ea95682d317937154e47728480279508085abc8345a9af40235765834cb736542426e9297e5d4af981dc076e39c6364d4dca9c74ec81917b8b9fe8945a3c4e27991a489e94e84e1426518d58c4c4eb5b0dde94038056b0257c039e02945faf13b7d408f4eba6aae58a6c96dcc7a01eb1b70b25c7b7a585ce73470826717dd3991f089cb50914fbfe4c719652a8c45af1e7d4e429e8ea8cd71fceb9a8783346382d2c866763cfbbbedb051e62febe2a9c0ec031c29a822fffb00f24e12f0c916170946884821364b7c49b81761ffa08009a51a0fa53290979028cdc68fc662fb577e48574fa9c817987a98214b3047dc0190da459993b840355cc32b866cc8b94a1919fe123c78c6492b372b72e79e67b1968de68d3362a0f4841da57f4cc3f9f8c300a31a430f019744df5e608a6ec6209d7919097a585fd488245b03cd1a636a62446fed24566f8badd6e29c837fa4568ee80796d06126de501d769957979ea7df2e89154912b92c4e64deae3899a75c5220d8bb9d449d18c4531dca520053b72306191a180e86830fd37a1f13847739cf6ab30149ca6b8ccd0d791d261e29a315144982fb117f96d969e0757a07bdf5ef0dc0ef3cbb38425192b21a3cb9c9729c9f3fd759e24c6f9270353bd7ec21999953290ddedfae40392bef49fa99da2ca2f123a09a4a9416242ea4f691f94a2cb58213e398fd73906e205833c98505da0e501e662511ff9175ec523010f7e1b62ae3a8fad0df2f3ad7b9175f1246f282c80558b064ff37ea6ff16a70bcad8d40e2be10d9ef4b8b445b3e51553ba4482fb757f806bedbe129f987123ffde5f7d0c45b73085e0a2eb8e4f6319eae67b0e6c59026f09b6fa854faf472243b65c771b801f81084e4c29d592adcc1d157d1b1d9f70cf7638131755c81b4a7def6a428a6f9c778c8a0ecfca1227d460e3c5497dbd3cfa27fda27930676fd504e6036ff768c09c8940856dca6263ab6ccdde0a1b46d9a7a554230b7e01b78a8f36b26fd10ffe6894fe2a8454f7e3b9872031ed54a0d93064e81f4e8d2b74a3636df1c2a5d9d854260f789408471a9746a76b53d86fae2ced25e1d2ec4949e827d83bf8f43ad0f7b310fa2d32d48acd31bfe4ee1507eb05a4aa250919ef89a153120b833ab76abbc29f29b09334c6b3bed6391c791df25331c15371a482c6676bb7eae1f7e41828eb0671be77cc20f37486c25f92f6668e0b27f7ad0aa782b2d81654a59a256bc782e37ca77f1f5bf4c94e3b37f145ba2e973a8c1bcad2311c3ed9d34eb01fd80030b2a52c07a2ca404398ee25f2606fad7c658b3e437773fbf66ed13dc827ef6b5b00858ca00aee6e69f355ba34fae99301556f85231badea9531f90350c2047198399879e69c4ac7a2fa2c653769da67fc76b390e8435150a1ef952fd892d9bb4eda584439fb61e494f9cca7583194a49445f1e1e16300d692e44023ce0eb191057f3fac188cc66da68ea0f135d6bad18f3fa4e8cd1f3ed4eebc747fbf9a3eab4274c8f210e4ea9b5e3553e34eedbf6733e0372609cc5de41bd4cca41bc9c3528c778eb6a1883126326a5ffe11db04ee38c4431a05ef008cb0c993216112023f59d3fb7a48db4c66b9ba2f921d234dcef4683345601ba927340782882e075dca213699bd75729f055a913d5fcf5adc91fd28922896c6ca5c2c1ae548e11e487b78fbd3e0c5d2ab6aab7c23a7a6f643cfb991ea442874d683ff8065d418cb54dbc7b04494b87ff40f12f75d1a426a15e0c030962883aa704724b47eca43930553a3e06639abdefb7b278f5428103ac56d9791403636dc0a0e32338a8bd009dc8b9408b3503e7434376fa0a3419eecc4dea610530db08e2651be9a33a96ca43cdbfe95b678ded440bc31d7b4f75d04a6bc824a590f9f3537ba1034e49377d6b8dd6a13da040b737382449123c9c8f6ed7fa2bbcccc4175b09fddb017ea6035d2f85d0fb88252e67f11ee695a3961580ba08dd128b455a4437b8d78681ed4261dc55de5bc843381b5f3b5ccd2b6c48c83b7ba16e7682a5542f5961a4f91424bfbccc332608a3be9aaa0213827d25128e83dae19a3485e1d51668e0228e2190bef6743723ef4ba92df9fb747c41c95a19b9ad045c6e56f40d176dbcc9e91e6da7b3d5531c2645df1c74afe5821e6108b2067d727dccfbc84557f15c61b212a5c21a75edd755994aaf45a5cf5ebcf403a192d092c5f57e43c4017c2ab290061f5754de6f1e234dd12e91659bd6c48a352e8431cefb92e64fd43b948d832c01c3ae88983fb7386b5be08378afb3de2b85a105258de94a3cd3bb2dc3ed9d2e0b790fdf29c76a3dfad20e406575bcb1e0db413c363855c687b6c20190b3c93d2c29c1811b6d01da031d00f3b453bbe6b01f5752eb3508aecfe231dc8345cd016dbb0d95f69b42b68d24fec2eeb37624a4392b6eccedcaa91d3e50e8250c7124d5173b4340b8f77aa0cf50d59afcb714c31205b962c8625f78b2664dfd707f4b6d2693b5832ce6cd44063d554096445e15902d5b342f9a79e826bd3394dabd203cce5c10465ed85882b10e6a69e9e5a9a29cea7bcb88389f75829bc170b0f54b4af8e07f12b894c361b80c3b9c5d649d731f8641ad3c057828ae491f1b5bed749f8d65286ea1e4b5ea037cf1615a88e38fff47d664b4c9ad08930f761d446e4244733433e2818ed6247aa9b340481823fe26766278574ce51d1734eefcd23f5d409495c9f6c15bcf1706daaac28fdd04c97a5a0c6f8c55c9702302ae426c2a6e9bd6cf1233c71348cb8d56fe6e979f2ff7e53dfdd3bdae0108a0bfdf767cf51d5d232c3520fc7ee849f866d6ccc8254c904e655d2b511d34ee74b4a8216969118f62f25a46c863589830525a658b39029d9c1b5300b06b0a28892932ca9b4ef3397b6aab2b948c40c01c62b4c046a1f924b9a707d942602dc0c566a4f97a6c6a6155dc4d59c6bf46caa3de09666326da308c51a23e6ec342bd12b227376e8a1f11da906b58c8c515bdaf0d84dd48904dc6fd614cb79f5ef4285757e30adf72b950f1cd2bae006653a127384aaf5fa7f9f0f41e2ccd3af7e8087c9bfffd35eae12782ddb5e5d869a97ef2a786630e3387b559d26b07a857c96568c7a495d8bb3f9c76063285b698be5dfaa25e82bffb9e1e14c330ee51463d480522f95c30ad7abab391ca1404b93b452671fa93d9c8e7310e39a4089d8becb83af627d9a6873b8622c6a41c2995c73f5e5b831ec4620af82d7eefe0f5f080bdef895594a013290aabece9248df40b528aa921ace791ae7b5ad938fbbf3b9e5f0c25ac168717ed4d374cc0b5989eae8693a4fbc4ac1d7bc17e91a7e36435f0a77a1054e6c45c2e57ac2f5256b25a59e35f913aee7acd1bd27fef661f4da61e9c1f92748cbdaa9531f4dbc78f43f1b472d7bb05b2ba6a33b6473b9a37e156d046e4f53491dcc8cae2f59946e8b32c663ae3698599d2bc6e75bcbd6eb3870cadaeb17fbd7c8880747299b0f7ea6ad118436ce2e22a2b8b7118c8bc081ca9925ddb6f7a37d528983beac66a031cd1a87196586f43ee2d9fe7a7528290faaeae89d5042cca2526d9c951660d92064e7b1a3a9158d06b40c0762841552fd3fe29d9a55ade9cf2e90bc3af60e2cb314a10ba37fde5b32bcdb5c6a57f7e0c3101caf45258d7d8c7d9f6d40c9c31d7242e30fa96865e11b63a478025f344519b1f5b83e4e561a4295e61a2710242de6760a3825e130a1592f13e4cb185f1239ac0a22d64ebc228a2e016d5e57a5c07834a31f9978b32e4495862d1501dccacb54c699bd951438eb9c7db1671ecc87aff52a2084ad81ea963d97ab80aa31c14742b76744bff2cfbf77b790d1c40cf6063e2bd567ee1168a66db50a8e7ff2a835fc59161c3dcc599e264b861ee5eb7e138614b8c3b8e62afdcc6aa4af01a3e20ff82840a47d2559004eb5fbaef2ec8240537145189c749414c0151462cda9f13dbcb1616e2c82608e57638c228994c5252cbe04e717414683ff60d43a42897857b060e2e99a77e280b6f091ea0858992a887772afa7d0c4b3c0ca5e95eed6c9e689d35f97655a618003c9b795fdcc80d8dd2a18e2dca7613cbabe3e2640f678529f6532080bbe6014c47b6796e8451ea8c14252210449de7743b8dd3be78d063467b304abfc1850b75f621c6d4676c522ab6cc8daed1c8f0c0246c67720eef5f489293203c50cd5d05b3a609996b616df11e5e780c5a3e5636cf48448abb0ba2b6a54549fe4e042084e50beac67a776268b5a38a34c848405fa2e9120d656e53181b0f6e0da5737b78f31910627bf85a17e3626c2d012ed6c106167a04f65e9bf75cb737723b62976b47982475552a7c871165c5ffef3842e6649923765524a2d9d0054b34fa199be44850cd08f256f13fa5723eb379aea9562238b76b6a088f49dfc3535bc8dfb06c5e09b42139c3e0c709527f4f86d73697aabcdbec1d518accf1b7f6f08ffefe8af18a81cb12bb72a8a3cd2fde00fc0e3362ec39ff5649bdec6eaaddfa36bcacc6699cdb0b6584cf69ddaaf665ce655cb2b49279affd364e30be65b081a562e3a82f076aeb1a671e921eb37eeed85a469a07744301fa61652049ad168ec437cab9a993d7721aac88accdae6c800623f475c25c3dff35122b45774db7277b858a804007caa84b9b343e54646b2440078fca4f1012b09791c726b10b3c57b2924a855c2dea96967c4ad01a9d21e16e4f3f221558681c0625624c5db14d2351a8335166cbe043e396f4ea872036bf78442b047cfee84c6b17243de5059195400d6d6bc4aa53b81b32581503b753c6462b7cf8ecc83947afaf3483afd0b1b467091f5be092ecfb24989ed8f62820ffc04f5986cd800315b835bba625d95488aee671aa214b5316e810efbcc83c4471cff7eb3787ecf0bf70f1e02cadea231afeea8cdfee9c2f104ee27348e1bb6824596a5a9282d5a64cbe2bcc9fb1c9c6713d5f9882b14e29f23d555104aa6d332147f1cd202702cdc4892aa686983fe495558bbc1cd129e8c39fb2b278891a4e6f82d46c67dc3d0e30bb37976aca14258f2cb72134b6f5158b5b41bd2de7896016f15b60f10a4c11973b9ac7d2af103366ac2aef52c87a5753594a9baa2d83121f7bced1461af87d01f19b5d46affbb322bc2e4dfe6f80572281157377c1d00c910a74e6ec7209fa76c582824e329c50cc430963c113cebc00bbea6e1d0d38f5748596c86d7c4732ff9f965d73a0bcb06b2b045a221c2d2ff5ef10b423778375d1d37c9f519f7acaa36720173c61237b075b675aaaf265580a05d06c11697836afde6e921e42696d6b0568d732dd995aa9bb7a8adffd3ede46e572be704ae0dd168db4c95ecfddc15d61b6c6db7ce6f4573385134ba5806ab2773ed3c68283150ec8956d98ad9e6e8464520cc2a7d1f31babcf1d7653f2a354a47bd39e792984a0775aa65544741de5f483d06cc424fcfd0ba1cfe76d5d32365273e67d969ad2d3834c9b1cfc27768afa933a633da5ba043b4351265d89be606a6c32ed439da8b0d2b075753d7e207a5fc8732e781dd23823fdccbb893ef0d8d5afe275e8fcae3d4dd15be86f42c4bd096ba355df53efa1ac17682f5b4470a879841c9eeb7d8b84dcf676fefa3b095ce2c3f160d811b748bcd84c083962e5d8403208eeb5e9e78d6866ee3e4631985ed11a86d8cd1dd2343c89a1d18d62f76e1103d0efae076c5ed76aea31bbec18cbbdb68a452540e96d15728e0fbe0a4f74d33d99293ea1c001134a925dc23332ab90e0242d4842a4fc2ddb3c4c342395f170298e23ce7d8b7e024e0f4cc1d08e0731e07c1a9eebaae86e0cd20f577471eecf0fd465c46576db8ebe89862289d3e688febb938f03a439bf4c79e18fc78972d83796778a1e28229ee127914b27a9517d820921835139f807e5594944e2888573e8fae286734a5b190012f7a672ba4ff8b38d4ae29e122c301d99cfde8e142f886c282d222b848ce96372409931abe8e1db709914b2d6dd213d62fbc593d579ff0949e0c50d7dbff5526ef28e2e27242040d99381552e13c28cdb5661b9756ac0088583d6e3defb25152e97ec2fd40c9d2af1c2914fc2d7fb542d671bc8990bb4b1039fbf734e4961f3dbb61bfd5aa741e3e0adad673930b4db7fb65987eb62c14becbbe78676b091369dd8836062fef2b2cddc3b673c27d56bfacc84bf137ad0206760b6e3fe389d249b848c1f941799dee0d8a51572c3464ac5300538b958ca769d1594548de96d06fe429e0497fc1fb043285139840cefc00a6a42ba84069596b662e99fcbccea23ed9a21d514b56a701b54a99d190ab917ee03a50d1c8b1bc8d9cf1d8d62e8fac591157d5bb248646693e51308dac68a959b8295f82aef42532ee598e6f7458632123a1a5e1abff4d9d062f9416e474c84396f7a45563af481de2bc37235ec77b3979260a6f3210113fd53c2117f95e52aef53bbba47751898112a04f8c1e4b39048a4b8fae677755a4040d640b2b93fd0e6b5c220a6a896e1ee68c442463524114ef888239bc837f7c1b29d96b1ba40bd461df63e1ad956a49e6f6c166ae8b17ed11639eab91c2f32a9317fdb24a0d23b3613bfde4c123f2949c7623dd504411ef8873415e97c45522043e4d6b274dc90de2085c6e35a3bb715f6107f3091be3aecd2e06cd2ee61a14d723450043d450567cbb0bf88ba32972d86dca323980f1ad57fa4b91d7d6b655945d711c203f7e2f99da891e3380a12b7ff3073551f1c06da16eac2712e4be76c4435e193ced96fbb1dd6049bdfac6edce773b56f +MD = 85c628c805920fd0444bf9850d40c52da59c7c91ac69ba038edb4a20 + +Len = 47752 +Msg = 1b2c815410310557a7d035d92394845b9691c52d9c48867949cba08460220c31c6ecf8c736491af335f8451149bd3aa76606c032a9cdf72649c0e930caa062be73e702c103ad90b1a0cc91d2104319b72bd8e20490029b789805822a885f35120b63c5ccdf240d99ce9442a7e0edcb92cf50522abbac1b771fe294fa04272e3674a96c6f327539b2a8987f152184f54038b6392c90961e2bc69f4729a4bff53198011d336469be04161f71a63bd142ca5052be9379874d9d7683c23ed2f1310b5db2009eddc8419701733fe196995737fd6b0ae6dd4650d415d72ec1f5838acdad063f3a055a6d744fda124e9aa7df8f294b44ad249cced88ce3b23a743eaa7e6f43ff8f45e6e7a2ea9d1276b0c280dabb389571b5516fb2c4ef7732b9ea36268bb26b2303365a29b80466e03eb1e2219b7b25b8fa2ddc69a443a5312b4fd9cde89ba881a8106c12a3563714ae3dae6cb15c1b0d5af8bd05132763bd3234397c7046e12e9d3dc56492ddac9b662e8cc1e5229ff53d79b98ffbe2d9603663fe3b0afa3cb349850e276cdfeefcd04c232a1f17dbfa0b79790e43bd30a19fa2d1109e01e19913afef631ba524bf525e1cae4781f4a32dc0a58ad3009008d6ba5a0515a1f96865850f218677776d562e1e5545a915780916e40b93f3201e417340215523aca6a6cd1769959c0f8d4382d22801d764020843de9a6bdd096a49942b6c47cf21dd3d50ae41305e13a78123e02e635309c8920e3c3e4308727556e7c5efd3ec819494d67db33f03ac4478d9ef7054642d531040a60003ba84c5d132b3b1e2c4f35412272cc6aad401eb906ba7f4ba53f829e8a1c3e6933c67e4203ea0ba5a9da0a41f0a628259193b2431a3b2c47f6991d484f93cfbdbd6425aadd3321325c0b00c2348c7f0351a8177c347b5e889eb21dc4a10b844c3cf3daddfb811c329754a1486a90417241efc6dae205b66c224cfc7a4aee0cb347182671db7e6d250039645b1f5c1000f6fd38d5af64948105bc41ff99a5c971402360fd196594980b4bd260af4a5b1df532f5f2f912a965dd7276bb19dd3b04dcb842e621e112fa3cee740fa6e59347a13386c96b8a45690e12134347fee1fc514924b3817b78ca09a3b19ea2a8591caf7153bf5355f9291c1da01e90854eb662588eebb49f2695f60e23b40f1d0ceb646ef55b5ce045148bf795a3affad1c16458fa0537c6bcdc868042e668be2f5254aed403f4c3b9c9d2327c78e2ea3bbbfbdcfe76877cac0c3f9c778c2c0640d01493886fa76ab7a78340bd14e5bdcce48d66f4e6203b64a385c56a3be58fe1f318cf7ae4d16fdf3c13b4effe04f006099d5975aa9e8d7740fdad737c01a57329d5b5341a2f2d90f608017daadd2b8769a057195a5eed64530b973ba32cf184e2dfe74c660d4e5d73d4b8fe91dacac1a33ad2286bedc5bc6834151b67b3fe87bc9bc81c5ee82cc5240e4ddb499a483534c14d5b55d7c0dfdf1bc9ab2033270c259dea3c7b6c4348852922bc38783e52acd83b0abe89495f4607075373270582ac5ac01531f64c682599f9e9f50117ca59e42dbefc9ed9ab3b9a60bcc70c047bcf56ec4f1912829473e5160cf5d16edcfa7997f09664fc540e5a683f925ece57fd16c132974da05dfeaf199db155ae3add1d0c4822982bea5cbb80646b9badb7b42ee17843140045344c6704cdfa40449022ed1e1794d2cea5224bc3c94f3d1b82e3bf7892e23ccaa331a0ea825bef8aa23fccfaebd79b8156431cc621e5f6e3f7f9cdcc1d44a05eca1339b7a4e6e68d81d83e5725fce0930e8295f40c0c55b171b59eeb28b7f5822755a3e47c27dfcdcd6083cb3c614c842c5529c5fe0ee4048ecba54e6bc886c5397d71f99e8b35bbd38d6fbfc5a139c54e5f5ac46e8a3c3dbd80637e5cd2eeb87eef267f72ad72e832a344bd283932e6d2f59b67d3eaa8fd7c987be3528397ac664f33eeaefb31c36936954bfa95b25958bc8e38d4ccb4a44a68312603371c319e021cbf9a00dcedf5dbe3d4a34342ad4e1885bfd78d09d2a57435aee589e6e874bc637aca3aeeb866f7b2ffc8ce6e53319e245552c7f2f92c30fbf65fe8723198b28a98b615e1c31b1e8515b1939fdb91c1ec91ecfa2a983d42f694f8cf589d6898f4a1f42e409ea0b4cccf144f51b6fd08411dfc9ffb20671ea7f336cb048c62d4542efaf0a59b865f1c74673e1e65b1e5c4220815ff32282892a9a058009f16091b8830e96b5a4a71d6be00fc60787eeed876a618913dff054910bbf2d746008bad464c851c4b4b919e049816c25fb29800643d047bb45a193dd0e027e301a0e09c01946032ff2832d4d09309be9beb55de736365f935d7e8e352b363ce6275bc6a12aef749d66eea0daa6831bfad77ccc53c8fc9a422e6f8dc2ebc32f3d90d639a2202a6bb717e0bcb1aae4b302516515728388c071c05dd7abd5121fde5c66a9e88261b2250d42c7f79dba2da631577f6bee4399c71c2eb5197289d47093f5609ed8fb0f8e50fd0ad7056c4f90813c53679195eced49cc6f344891159c3e6aa4eaab604b9ae9f7cd776c64e26849fbda8df5e7838a4f1d4d23e193ac0a63acbef481f72ef2df1a58ff5909add58f7c5906a19f2447370b960fc5f55f610da5f6e5e52a7f3e3a4df29855c37a805da71bf91d2798cc087d941f7a21f749413c93e55c6008250277e46ae7fa0f11ba64678ff2e5a7c0ca5a8d7c8a7d3c6c0959df1b70028f504082779c9716352faf9b84efa74318cc868cca4d7d73f56f6ce420b0a876dd67fc55f056ed7fb4824234bb43c4a7b59743fa93bbd969ecfd73c69fcc8c25ba113cd89ac2729e54b37d1754b0d27b44ca098c30ee28c9e7bc24e5a495a577edf60af3bc05add9dd6a682c976058268e0ce02ae80df1faaf54892a76367ad540bf6d8e9d4a2699164e0a5ccb7bde105b06d1bc0441bd640c6eaa7d5fd594a579146e9186b76647c8086b8d3a28eca1735fe32accb1136fc5b28dc7a59b7950619c13e4bf74f449bb4093a82a900b419dc01f5c88867b83a4c73cee91afb33fc000667090aa5809b79d8b96e4dbc258a3d18b3b80e77d086f56bfdc6b39cad95ee86f1b41811bed84c75a3db0309a4e4b3932adfcfda266ef061c777b63448502fa35ce1920c45fe9670887d5b71a8b5ea1199b43ef7105ec805da90853abad76e1c07261b0dbc6b0259e5b9d9aca77a3b04aee9ee6734e2e6b8a595c3186b8804318ed6258e98a9fa823a04efe327be40fcc8c550a2ea77c70a96fbd265e0ee9c94629614175127f999f40310ddbfde765a75fb0822c799f37c4d2745aba17781a510ca99207c8179f1a228eef4c67755be34ef677f52d6067e26cc9f4223af7df41808174271331639d2eadcc0d1f5699894071100f2985a80c24031c1ee22cbf1e6c300f5e5b938c2f4cd5cba78f52c6a11f677604d7d6a449e26cfc3774e163f1b7ff8a330906c3d9645014a11d318a31d221d05c9e1d00a18e4ab9f459dc72c24b360e2f8352b0a25e64d08333ba8f4341e7479de520671c11e67edef9e695970f1dc2d8323ffa92225a27d638b67ade5401035116a87fc35188717bbcc6747aebfbcfb97e954ab1997a402094eef60bf3b62bff987df09d3778ba560b46b672c71a5c57d01b4708a90b44ecae27a9d1064fe830d36763b2abfd82f44c2c03878bc0923c8e9a9a9e3b575abff02c3b387514616b2f2e800b9660f1dfe94105c2203699ef22dbea7b38a4ab23c1c45548284dbf381499eeafdeea2e9e484d612a6cc498f8f2a3e0a8863b5f9f89b69f0a0742291fea7256a66de062b9d318c2c858b1b7e068bd242c0f649dbcb1cbc085fb3bc8a9197f5ff9298db4b8f069cea2cc47202deaf05d0fb9668d009fcb61c1ea7fc35d0989b2affc384d2409092dc3b1ccf86ae203335a6e8b58f5bc7e29c7be5743c42257f6d0cd28548585c18830ed896a1cb7bf50141519262370abc19e5d0b7064cdb3d46583a6f261cc5787f26ac69bcdd1ec594596591e11241cd04eb1e371c87063f47508fa4f424693d1120ecbb6049852f9f5d99369473e97ffe0a0266f757530fd08436c92af5b3f0f98c3dfe14a74b8d62dc50f2e4d28e5f65b141e91f542e298261c44e4317321e88a704b4426cde798f4441496ac48ce5cc7f41100ce41416cd87bc96c4ff60305f2fd5809200ba8e8533eebc9eb0819d92d2848e38bd8142225484453914cab0dd7514b55c096c16e5199ddee92cf901794970b63b1712561166bfdc07fdde1a942566f538fd6fad1f63e302e2904f9bb042ba2a8ca733ad2b2cd3cdca2116f813af30b2814341db94a152cb039111d7085cb54d95e461c1c015449ce81511c3cc71066ffd716f0d056061b9d495dc4dc205f6a1ff35293e80be96bbfa403af83f196c9fe61e53dbb21fa431ce250b5a7dcd02ca113fe67ded975ecd79491f1fdc16b7c4d390aca25b3d7ee568b52ba7ac204e28845b45fa572de123dd861aa533e78c715e7eb5fb415876272cccb99fdd8e4d4fb12dc44e6de0e261af8dda12c71a5f27ef4f2c6104ef0e7992d231bd728584a2300dcde4826eb6f957d6ba03160db44afe786c6e266fcc7f337c208b0ba498b27991df574515f37d7ee756d0a150006d1480e26d2669248a771112832949de030650751116751c408d362d15e98fd810ba0f4af875599b4de64764303c03e9166eb03b9c871a8604eb59a94d5efbbfa86769f29aa3bfb51bf965a20cb4612e6f0b377f741754e51d41a857e182421bc6952775ce2219f6873912688332c0326f745ccd1237e2adfc08d8b57cf3f160eddbce40fd80e6d4021dd4043e27cf89ba22a6b10179124543b9314e6a24684370a3d4e0c340a4d23f2001219823ed88b1ae9ba7cc4b824f66cb688f437435280175c1d199d1d27570e8402d2b8788d3f860a23dcd3fa120f7c7d4f49393d68312da2b9ffbb50e3259cf17a352e34feff0f150df9eb60d6e59270d1ad4e3dae9273968b8537aa69d5c4cde10b8c791313dd93e09cb5f059c0d71876e81e4a0cea12c0f975b933a1afb0a29f1c7950b4c2170c038bd8b481ea73fca7c1526c6a8331a86c96e8f474fb85f71c309ebfc955e606e08ffdb437aa8da5ca0292abb0a3f9d74daf6df4c8006e55bf0fa3d13a14710bde6fccf764474d9949718510c69392d40289ef3c87079143f2802f8bef47e1a265f5ec85ee0adc628ad7d4a2949b2327f5ec17d2975816491d4deaf7d1365d54dde70666bf3b6288f7fb276a0202d4598c9f8dc0e23b26efa63c7e1cc6290ea7ae0ec1a3bd220691f6a7246ef912cff1316cf80e4ef8e9bef6169002b7671b254132c642d206f107f1a176b85f1139774b1901c2c5d6863d75a2cbb28d39ad56fc1bbc4ee5314b714fb2c3501e483d73426f4fe62e1e25f58baad4332ee7ecc148904cccdde93b5878a2b43c1cff006e7d368b817019f06ca1f4568d84b9ffee8e5a1ec6a477e943d439f086437eadf066365c9c750c0d2c1d4af7c976f60f653441d94321237ebacb3f2036790c6a7f64366b3e2442a4bd69725feeebe843afa40d264c3c342245c57beb52a8f25fa5df005f6f6502dea5eb343704cdd5c4534486ace8ddf4fc6d2ab6fae4b779b6e93f5ae1372093e26e0d5a27140306b9d97e74141feca935b962b8f4f38ee694d3ed0d999f3d3ed99f36aad62475c34bcab99e05f9519cf4b2d5498288158423ec4fe12eaea54bebc1cdeeed3f0b54a2ac5ccd287ff41562deeb314caa349a8bbbce9d496d3e023f5b3cec136aad00e50ad1c925b8be5ba7c70d37f961d36ff4c9d30b91e2f1aafef5ea6df1af43103d697f5aa3ad95b8eaf5a12531b5da4c859cc4f1af17a78d4f183f382f15b5ccd153ce484a64637253ef11c19eaf317966be0a184a1446f15b4aa31774a4eb7cca4f265ac3e70ed20c3dc3d4e656c03ec0b70e480bdfb71f4a167ed06865cd684fe6ef59b63e7f203a672125b1b370e3bb0d37489982e35f4301382cb45f44d8899e910eca6f9fa408f5917ea8cc27af7e4aece29e05b1f96e9539f3009b36139f02743ea88455a69c707da572abceeb32f597dcbf6e0834f459eaedf31f8d62ba9701b4f884886d1e604c63b8584ee0fe979fffa6c7d259fdd5b1e136f52f0d02e79e3761782242b74b668022d98dd30bb76c13fb18f6b0b092f7997125065c9e79b48e8b670a6d8ebb33c45738750f80dd66e065675c81361725db4bb5f896b7d5ac821f592836cd371bf7007deddb8692f52d8dbeec14b7eca1706cafef057484ecdbc55764e4994886e0c4aedc7e455c81c41b248eb05a9ad5207d1ad2effe0dde612467a6c11d74dc484cd52c41e4c6726bb6a22a9f47a827b226ff899d7cf8e9dbe594d6137e4685f740f9c46c8c5530eb063ea827a79e01f00e65fb5717ce7413afe3dc23e743e9b547238c476493230cb402f091a205caa0de541265f715e9cf2b5ea0397ef5704a095a6c199507b39568f6ea255f64ea8b3dd5b50e4358afd8010c0b9d6be3837d2fa64c2c46394950c9217f2a0743c979d4eecc9b241c2ef6d8f50396d7958817610f14c6a0b24b03808b95eac12acf324ba94054c1ebcef05822716dea94e9e1469eac30cbf92377353c15abb6a2647d490ef781434cf7902a9a3e6bcb670ca0875afcb2ee9637748f3de8b60d32f0237624da6ad1c8119cf66550d5a3965b1fcb4ced933112f1c23695f453ef63dbed7bf3d15794e684dd638c91f699aa3c25bb7a651dbdf4b828d34c23c984bc8da00083c58fb32eb81b1a16e815d62a1979ffee4d96bac4f36f0e6b5c62f3c56e07acdd9c5b5728161ec30b3c79819e59e43eb08e47500b0c5f8ef886646506e7e928084003a85d04ad0574776bc38e642e20c60e78a54f6ac0fcfe8b1801085e0d1b0c97cfcd54eb9288588033c483a21f4f3ab771e41b755aff8252c6f0523c3c2ef28b06ef953493f5bf3f19ab057b7e7014707933f495f5408ec3b6596cea3e09c103f235a94579f4b19c65a19a57152e5a20d9ba6432586629c62f65dfcedb5381e6d9c817880b2c377f5ecdcc9eaa2e16b1daa3f2b44c1a5c437b3c3252dbb53a1e04cf6763134658d04d5822b8061b4f0ac213278399042e22e005eddd05d6f592bb73224057e91d777a69240df19b0e13d934890707cba74ba7e999d6225fba2a46dccf86a1be8c5c2d295b0533565ab4692ea2a95d18cfa7170fbda7faf78fceec31f69db76db068aebf4e0993f63bd5b829facf6592af1c7a9fe1b755477e66f69b1fed619d8e814454867fda20b95e0f4c17e3e5e24e9316c38d6efbf68edaac41d3de69f63090391089d1d07edd37b6bf834ba6afb4f535a14a34b4adc712564c99d896229d7ed31ae1653db8ae49f5abc67170a2ea281d619f71471432f73ce3fa43afc6dd315b9b15a5e976347a143866bb0b63f716162c158d7dd2d66fa62f7d877d8df99318baaef89c5f78b35a8ded933e99e3a56a2a33f01e90bc63db57aa0cc81cf88b54a033c51d1b81dd11d3e360d2ecb7bf5f828103f2f5eabc2484093a571ee20055742c76355358de7f31ce8990067a4b3f5d872cc0aa6a60c9de237af439bfdc655f2272acaf03a0ecd038783d8c343150e2ced452564439128c7f3265159806ca899c214ad68c09a2d7a894a429ed59db3add646ea27e2e46b7a5cc735b7466cc1922ebd671fa03e86fa7458c83aeab278c3c42dd362226af861eaee6b35ce4b5383c381a27567505c0bcf3bc427e0f7e0174d866b9370b9322714286c45768cb0d7370dca1a74642f16f06fd0f666d26c10c8dd3d4c6c43bb226ee1b376dda58c14efbe586f560e72b48e617926dad68f38cc8eb2ed639ef5fc61c6cb3a622a27b5641fd7f49aa3c95d0fcd2729bb78cbf7cf375706f52f751d83342e10b28f26411abeb34aa0c88588eaef657f873da4e65753a4199f79aafe49b6569a3d58fa4099f794c206e159b0a654aeb8dc99ac8cfb6024a5d1021a172bb9df2770fc362c6866d70b3b82987cd8a97d361a21355401e9432c285d4510bfdb2248dbfd4c6cec990476cd20d445e83a5ba7ce48e1b4215baa2d13efbe436c86ba9efce0bf9abceaa7a52a509f945ba3c46e77953455c033a429123de857c859126a522b023e5ff83b06d1764ce0b95241fa947aaf91750ddb90a1dc55a649aec46b5a50b6b02c3e292c61168ec377e24eeca38db5ff9646bb04412f78b767044ae293d63fa8c8191c7647c5b7b51dc065b53332da18ca7acce48ecbd413a6f610908d402f80ba356f8503e86a2e217900d4b1feae4588268bc1d915fa439ff0bfd5b512e8c0590facd9041318a71978badbae65853e45b6621cbeb25dbfa890932299c30de04b045ed2e6ba45b86c3bee2a96fbf13b89b6fa65be0560f057324527a9d +MD = a79c720cf5c61acb24992d3e6f4617c3a5b5b7ba7646f1435842000a + +Len = 48544 +Msg = 80de942baeff6c3903c31a836eeab1de3f149e13e8798b3604db833398b957aa99c641fdaf99c8a739a6e3cf916d611c91f188cc566cfd004341e45a493247ca66d3bca56c3e42f804096d1bf275c3899be865eec49ef2829c9ba896fde4cc6cefee4c4c6e57a4d46dd4fe901a6b9dcb64e27ba4ba77316416d1180e3b37ae383b003b1a3b4ab4e57aefdf5690b5b88af4c51414c15f844dbacb7ceb8b93b4d552efcf365d813bd035425894dcbddc6f547b766660beb1e58f721c547560a8ec3ca551c95c620040a6b6b07287e9d0218beae9c320fc81d59dac3f7282065024010808fabe57cddbd431311918a35e49a1fcb7538881bcc5ec622e6d39ed7426aa023ef20dc76849c79c21b117524c8f9f97263d20b52a5c857d326c237dde9a3f7a39d8d01a9a3387e0c9610d5d639a8ca580aa700192436fe39197c61f5526c65743d590b72b411de37152812e6b13700d0bc101cbbe22b27e9317ac39a0754983a211d408e31a908f61acfb2c2ca153b710ab5a7c74a0573482145d35882dcfe59eb324748a67e8cbe09603bf6eed3e8bd68f037d7d6564efa4b56079d5f7616581e40863e7cf2d7e3738224ff89f3871a7968535a11ae49643233c6f4f7a06eb91cb093dc3fb6892afbbdf44935e4a51c9e7670ba767dc11a5867c7dbd5fc65f1891ae6be692a1ee8e47c30707d27b1385ac316959f356481205a50de94da9a95c5d8053183dde7a1c0355fe1ca4d39f230a6cb67d675923d4c8418699edb8b2a658065e21a4291ea3181d92997c5addeb2b9f59dc6aee8a32f8d75096e7fa603da9c8f4c86e89c269aea32b480119b6253752bc3ea51c6573bdf0d3a8e2789c6b7a4e7ed644074eb7eb7032efdc171018550d466bbfeb9ce03e13769686384f76f0216214cda9aad5fa0b0d57b55cd50dae595f2a616317c1a4c8a42a7c445fa735c80a47b279bf0b01fc264832f1eb4c6abd6f44338dbe5e1698c22a6ca4b64671cbdc3a9a7f73a129cce48afedd3c1db0c2de82dc707afebd09395ffd5e3a9bcbb342b42ec2afde9902aee4bf28aec8a8ee15aa051431eac1a57191d87cd5ed6c06a37c164a5c0c7a26ee1f1edb2b947ccc7a845582cc6b49f4d288a5056e867c4f675bf91f6071f3c00b03c2fd9acb51e176da75c134c77d7dc50b0b02ecac2213f5197f4aa5552d596d585496e2b352b772720cd94f4686c8b0e4b27a39a886dcb77e51d211024f787ce67bafed94a4d5d415c3d307328c5dfcd943753cc2d131145117bf8ebf82a6a075e04ea2b872c3058b42b643d1b6c512b366fcdd412b9b745c781903d3ee6a41cc2a7ee966e20a6e9c308aeb6d2d875839c215046fbba13f651de95787ba4cc7b40244aae51c3176103658e64c192b383500cb9992aacbde35ae3774230fd49af510aacd7e49c084aefb271eb6a139196dc72384f31fa1b794d20941ef148b2257fbb73b79913f023f28ff7af5ed3a63abc027adda43ac334a3169a632f2f8c7a26c73da1e1b37578b64e8e25026b67db593defd8e3e73ba1e745e8b36d0a4f29d0ae793b41030eb5a58eb3e0e7433d153e7505a59377eb5d943f0d841d71509117e1a4f8597b02674ab0f7678fe3bc64f6486ad8156568a434528759c2ed576c66f14f4d7d94170a1065d73d6ed55c470b387df4fc582a324230d4b8fff6c9f8486de6bf3fe6a31a811db1b70680a337d7c5bd60ba98a664485a840616f60ee136b7f9d212db4d1527393578d98e07c3f660b7cfd2df73d6b11ff3d5ca83bc93ac5ff71a98ea5b867d58d1076a561057e1a9eb86d76508f60721d2bc6d2849ac23c67ced24ac74eafded02c74b6153701401c71a2af1dc4ec4e07f0e814c4c87479be9ee589a2fcf1376495cdf3837a927f8e91e5fee744d74ec7760a9782bb16240cc82a72bc28f7875131c9853337f77ffbff7e8b3476e91963a3748346db70e55a34e92e9f3c87779feab294add4f9e96ba3b57f8fc4e958e6616dff99904c62afca6ae4d39e6aaf57a6ce477abb6065e665d1027d95a1b255973e33014270461372f4bddeb868d6814f67c72152f49a752d1c3b8852d7d0ba2d30480859a5378e14d1e14af0489423ccc33c2a037d311fe3dc53376154591c0a8966363db3dd299847779fb0d49347052acd1e35c2d1ed6f5a72122be0f6841891b4125662e2ebe69fa8635fd278f4e2e6a2834f8c23e5b9debea218424ff93e925b240d7aebdde6219b20640bee334b3ee4e4bba3cf12aab0626e91440b8364d283f4c8c2a3058114795d29479b0b2879bbc6e0cf7c79281784fffcacd22a729a520bf003af6d9dc269a3154d278461e04eb326d8d2241c5d4ddbc2434ef75132f3f0ee05ba1d2371947990e73ba6debbc632f5857b1a6fc8e48c4cd125f1e7e28c2b28906a1bfc6a216702db7f7a88524accb59f1c6307a1719a011eff211df24645086c67710ef539f5d3f29a0745ec0307ceee6008ce2f1e8b48f1858ddca948c5f5605a27435904ac6cf43555fed2196ea93aec10abbc11e98b145e3f0a51bb335736eb4382e0a91333a9f76d9c4db386ac4b6b83858e723b314d333f9030c61895b4c1cfb2d051b391d9895605a3f9d940e9836946ee6a0aa265ac93578e92fa19a385d2bd722312ef4b9218231c14eecedbdccbd52421dd4524704546b546644acade558a0e48bab3c8bbbcdc022c4dbcea1fb01a78be3c8451285d44ec0bdb90f3755f01ece7334718ac491a9b687f73def421fd3269afc6b67be13b7a09e953e4f1f80a53290311030cc7c431f10b5c7f022566994cbf741912db12a86715fb66fc288d8d36b47b51833fc20aef79de94f2c43df68cf3f4439452b1be4ee7f0413bf872e035ceebc9bbb8fc6e895260e76b066a9154d4affcaa4f0004e5e89b3d586fa1954ed7cb34593a59a7e71c4c3e16f4d5b2cae90d0bfcd9e6c1559f6222fb9603f3ab59825a08cdc4fc326209629b9567a116ba773a31f84e3fc595aeb7cb737e4471db78036e7a22b492a9ff1ba1f206a561cf534ff2b41dc45e50e8c57111fbcecbe615f733485c182e7b9630d0119b08d3b10a13e6163c99475a7614947563dbdf01c1fd00405a702f5f366bd2fc0f1093e7054eb6259306a93bc26cdda99cb1d5b4e4df7d680404bcde47924cbb4806caf9abc809ea0a52ac793295f4b49098d687e66351ca421bfe7f316ee95430329f706348886b8ac7779e3056809e25da0a032f52246efdfe1dca5cc74ed1aedb3bd29798dbb2f9ab333223792a6f45be98af2773a05a1bf6404731652639a94ac5aaae7ea9c7414707bb73c49930d78ba81337906b9886498f7f160f17950bc8667d10c39ab048e31cc3870075e9c38a64b8c56f2d30243f33f9748fc9ecbb9b46d5242f5777f8c79ad1c9f568a0f103f2253bd98f28df22543db4abe646a10b8c3954898824373aa86ea06a185f493d7ae2ff96388a9e3819d43c2c13aca5626132089bd5bdef856e2074282d2db28225787b6ed25e49cbab4576d9fa24afe6ec47a62be44c07f11572aef8501317181a6e152902aac7213218c87c43b9a7e15600970260d867c4c5e9b4a029175d48824c378e72780282d5d69cdb96707599c6e543e8ef6af746a50fefe85f446d5a859b4867cacfe138bc0659c099530157657f12a439099fc1de6bc79a9b9f2f964ae2b07ab1b84c8a103067f1f76933625a556d00e7bd477b9785a57c84328b44faa9d690d0392bbff9dc2e3656baf404ceefbac2a18ed7bdf9e6ef58c3046aabbc792470cf5d66209e9316595f4f2a83e9d662b30e8537cf2c150ff4ff1db214b9d801e45529e6f528dc8720b92fbf28d291ce9bd7a94ff9579a6b18e1864dc71951d5b20aa79186be40e9550c62993bb2a86542a4030783a3fe6d8e1046210c036909a398de501a8946a4be02f1a204b0a48e6f1c9948b437c87b1d3565182b9faa037fa4d60cfab176202441e3c0caf50cb3ece775f8d63c80ff8cf8ec196b169b2c0ed998ab6f5d58c54e7140ddd7a9683b7fae9f012fd9af60a400e20b1690c4ec17dc2b17bfb575fc063b11e071f2418ef1191d490837dc062df64fd87234aeac6458973632e2542b12475db1e1fb1d1409cff9baa87d8f59ef813b67c82be0d2bbf3e5f2120c7dbc3b3c2c386fea873591793b3b59d450c1b14aafa05f9de2c8e5551c31a55a791549c2865d62e804594fbee9b36164a8a63df9b26b81b13df4aa2744dd35f5cfa004837408041c1ee80d470d0c09541e7059354db0748f78c0d11166dd080507c33424fd219baf5c4a91bbae2d99cd3b87cea6875781601b9324ba881966b1aae8a0502a9070c846e7a3c3d5fe59f6855363f56848f04cafd469cbb57999213f7611ad023dcb9065270d07896790f8863de2caf86c097abbed69ebf2e5e87e4ed54fe38d10f32f4073962ed25088fac6ab11cc40a91413c745ecc349459af05f6c229bd3f232cc603105e1b8a18725cc06baa447e8583e5b44bafbc181f89efba5527dddc9ce8f4bcb23c74442d6a020b7a3fa15121e2400529a3a62814ab1a9e7a630b27f10a18ba7b8897d1bbd944a249575b30daeec3dd75528352ed850f29be75d5afa402aa82f8cce6c158329d2b757bd28c350bf9b3bb36e416ee9a45d27ddabde24a65128c9663f1716728641d7b37b7c1a4cc5a1e67cb48f2ac6d572f450c345e38a3f95df0f838807d0d41feb6f57b8fce925d74178a1254bb80ab96a084c9721331c76d85043c7d1e63af25d54f8e3507008c5b26fde0db7056bbbf1ccefdcc5ea0f541cef27da5afce144942a0705fe2995f4a228134f58f521fff266541db7f740b613b4d6cb8c5af19cf8b92b27ed5cf5eb7a6ce7f114d2540dd39c2262dfa2d8242569f9a24e479183f1c80d4f07514f32a00302fdd5e22b6efe3701b12533ff26bad43765870de980e72154883350cc527eb50d7a826fcfa9d9ff9b1471f1dc453abf391e21f2221b428aa9d759a094d27a4ab07103bf6846cebb9592ab2598080df0a7d4033f64dc6accb446628ace3afe8992e9401a1dce44359a33bb175af89b2f2890153bd64cc8af1cdc3456a313713b5cea20ca16c8a3335000890f4b9b4c4664593f30a1f2c2fa8aa1b84c3ae33b28b57d8e167cbc527e5f00fd55937c89fb04376964ec56c177a59ed6b3bc35c41846a86f457732bbde703c00305920b818b0327b20e0012eec16da77d5508e73d3b775aca02eb3451a2bba78eac51143630f535daca57a6f22845d81f81f78b220afec2d6fcac658fc37844fc901d690a5caa1f8506249eee19830de65507ae9c9d614dafa72f45c4a3da26b1632f709a58824325440f711f0fa5a74640c1d7e94d5f59b884fc4b9cde41ab61883fc142df2e5f4ff660b421951e32d3c7be7da4a5497596289bed84dd5f616191a6e1b03b0eb279bfc0de82245d4ef37c46265b3fa03fad1476a1f92b73e755f1fd585f0693fb16e2c866ad48034a49b101687967040681bb151f76333f8ba33bbb7babcc5e77cc11cfd32f7a70b33b1868aa9bc5e568988f0fac989f12ecddd159e222f6eed6edbf4faa753656284c14f4631ee6a4e47622cedfbcd98e796a55711251109587106dd0531af5f407f1392d289f23f2f89ef8cb3f7f5d02cfcd3a6992b2941316c88ffa738d540ad0cee78b717908301367939d323c94304eaae2dbd9c40bb7f46aa8167248baeb1139c297c4592dfcc38465bd5e9139777457f1105e01e224ae9b48bce5e9a51557c63cca97abefa99769e1942b099748df68e7df95f8b1c9b3cee47634ccad3a02f8c89c61dde7d6fd8cb9ba1df24834fe5239722814f5179279fdbae57e2d99b145e895c98b80f5746140a7ae07c6bc4fa868707af316bec92116f37e7ac0e4c1423f4f252155958a8c08e561a69d5f41efe76304ffb0ffc658a2c8765ee17bd1521f211b3bc027ae6184ebbf5b369e837d58c26cb73e7b28853392537719ff600a2a9402377b3c5e9647334d921cea72e51f07089629b15e4b4bf99c7fd4cfdbeec44070a0c144297ec24462e7dad39ecbbcb96f38fd32d5ff4e66c7c5ac6dc3647e9eed044ccf8d9f78a7b5c8dada7585b44216fc43603e25dd525bd4fb69b4ffdc17edde784f098cecc5acb1a77f85978849867c76c9e5635b54cf4a5c440f355f33e9abde330baba146be4ebb234d95bb28342611e07a1c5ad69882497d50996a7b76d8d92c2280187370dca0764bf4df76b685af444ad55e605e194d8617809076fbf2138adcbeb4f45af7d1e8ff3947bd6417a955f602d88a767bd2eed2af638f0f93f7efa8ac2941d33cd9ebd5c78654f3589aa5fa494bad88267428006a565c281b00cb04ccc7d48ff8230f6e443dd5bac4eda4d60d4a41f9a59bc22f45db46bc13c89d7fb53334d7d647b43723b0d840e92ce307c336f04175c43dbdc674d751faa9e787e9ddeb4143a28abefaa1b51c31d2d10dffa430f61387fb4a60b596805c4f29abdf2a4062bcede3741d62f4a33b7a0f6737047c9e0b519b43b9100cada502e45a09cb0ca2ce646ee510872f8c628cfe81fdfa4b9fc9ab9e4814169250617f9810fe228887e4b07d807870be2e53761f1cb8d81681eb1064a6163bd00f1e1fc57f20b35c989c5cafd4b9d2391f6aeff165fc3075cacc0a9f0c33e23e40376dece3160fe13b51c37660690e28b63535061c4c95e1f109049de901bc458a49d48efb429acf16a17f51a1ea96f5a92effdd9e0e7ad39b0e98f1bae42c8e43c20e2c163ae66e8107fad217d30f385ed49ad869c651c30f69323af07fb561033c5534c273655820f1c0684096d9595da2b0971e18ad58e4955aca2828e9665f1554498e60aa046cfb6a94aaca77e11c35bb8a195a0fdda10f8d3fc0642b16ade975cae8a7371bcb9153d7b4d28d5810fa2631ea1edbf9db5453fc67d61cfa862554495f9b7ed6d33006b20d436c36e26c8b2f1eeba415e9f019808ce3117a5e655a3551d1e3ee0a641db3f281a705f70954c21634eaba536f788c8e1fbb2ebd06022f7dcf28c9d7b9e34e3331c03dc55d1dab6e7f326fbe2eeb5109e06c8028a3e69812079fe2d18e01f11dc83a56d3d4303b964efdae60badc7e7ed9c80707ab71ffed0fdbd17e7cf43d30b997d9b90b47031c18beef019fd6756b60302bf0a93ec73d4c4f0e34e324930a8a4b4edb6ecc926e60f8aa174a63d63e1847776a1997aea1416c01ab7d2d8319ced71ec17b3b5a1bbc3d8808470f0195667071ea6926e6a773d5543897899dccdbcdd1e1bd1dca827eefd15b223297dfdf4d93e834773fce780d6e62cea333b2459200d2b0de74615da24e864868f99be73165e9f7d2fa74c266c8c08f14f56890b6141ad307e806acd73820362cb74822be50762ff4a738c783ebc85549533e51bc8410b0248600f10126af87f84162f656fbf34946d6890be75fe0bddacdc1ed17e95ab4beeedeceb2a28aaa56388af69db117d03408f404038da02523d591e75abc5f7d3172fe9a5e345809c0fd1e87f5282a5156aef8445b0d9d27cefb0cb4f765955626c2fef886448e42b31f9c4effc9c1492949045170482e3236beb0fa708da2fbf95f4e4dad6b93d1c71092a0000e63342657b69fc5d5d9d0f5912d1c489d0ecb33986b2e46021f235760801fb87e868ec86b7da3de3f369075f2bf9ef20c1f40600ee3fee2b066d3fe9fe3328b82b1c5a9e4c7e21bdcbadd428406e70f537af80943375405ff3150171f3a7cfbc36b85256433ff2146ed23e5a581a8f31b985e89a5d3a21236d5245b7f04538ba91a29d56a304f60f62410d9e7ce494fcd0de08bd7578db9ffe8cd163fcf5abdbc544034574b477d73161099bb3b4c67d0222a6a38216b4fc2d2b6e1c209f6f4759054bcbbf39bb936299fafa05726edddab98bf48cfcf5628297e48a632bcd25d54c3f918b7a0b6c7e53a7627a06d443dd0b7f599c12e5f88639fb56cd810d9dc283a53fe05fae8a0cf6d97c1b5940d895804a79b840cee7c0777b28668a77d9a711467dc6d0ee1494ea58f0ef51fac48981b3feeb6ef656b9ba2ba7372c52fe0c5eeaf146b511339f96ec65fed7492e4174838d3a84a66ef76bd47c4750e83779d2584667f6600eb4645d8351d4773e46c382d1af6a265704f03e4f9edf7faa77d55a22327c23ce5bbb72f3ef2eca1e1fd4786f5108be3868b331c745bf607f8dcfb62ead2da29a1c03f45de0cf8bf354112d122846b639a91a758c43dad3df44283511e2f2249b80a5ac682d9d01e86ee169603d0d5584518fd147a0161ff223489f73d9b4f3f80e075fbddd827622f4abf3019743e53ee8790fa0655d8edfb297bcfe995955da4f92d804f86530cc6ed9949e3ed2ac92f440f53e999666cf797e54582aca9369c9aedee4872d780c64d214df3ba0f3a6ff4b4cca44a9f0e901632e2994f0f4cc06c4380591c4960a5ffe3b6b959701a29004dbeb6e7d7456d1af131adfb2c22c8e3aaf101e11d2f0e7c5d0eb549e20af30d26c4a20fc3a3d71cbcbd214f743b0e77a0bad37fc74e3828f9d06819c96f5651dc58e620d89c7 +MD = ea69a0cbf7597444086a922d51337a1788ea721c51c18a874fec7f1e + +Len = 49336 +Msg = ab7795685b6ceefefab0fe71f2142a27615210d678e60cf42120016fe478569f0b213e7904e13d05081fe812fa3eec28922951beba2f00ad381283e58e5a0d5e1eefba5292e717aa7b9de5b638031a201a392923c65e83f8daa65e91d3acb58a2e0a905dcd2885d59d517fc5760cbef942a91f6d621a9ebd4d0419dd7a16570a819a48007d498e6eb4643da77a00df9a52a2bc04570b58e4da553c304d3ff9c65fc66ba569f53b5d09fda7c40c8886eb924b86506cdab955c9c150f112d0a6a612b680b35ad2938ae4454684f64cbad449cd07ba6b2fc9f9626fdc8a92706392e1930f9218889edd8c64a150fff3833dc14fc7a81ab191b6ed88686295c83a721385a0a96bc0643f4b81418eee26e90e40fa4d8343091875b1337ce1e380322ef1b3bc621b22ee9667c4aca88c8cf52f0ff521b4acdf661ff799a16f433f53aec346ea24ef5543cc29566c04a1ceae887669cba11eda849a07e15e747eada6dbd165b358b0026bc7d95f090cf5931d02bc7ed3b460a279d029343c585c73329b62399e6426d06f71bf0609264f8448832b5bc2543ce04da7a5bac283a53900d7bfea33b1196856b02374f6bc784839f4092920e8783c0909c29a785e21a61678319ffaa75171286e4cd157353988f83e9f0f73dadd5db4ddc9fde64f98637e64fe807cae9594ed928344b5f958ec8b473536459133ec560b020a95bfd11840856eb6402faf79ae0410f597709d1bfcf913c61d754290f87ab5ea0c17956c62c1cb69ce9065c773ac3b0d8502d2be533b80e684eed1f2a0142ac4d3bdac07ee025bc0af3b802642724cb40717bd7c96f4c6be0164aab959c0a9c1731bde92eb2f68e46a96c840253e8a11a61728fecf0e2b771c3f938e286679097397f3b5623038fd870b04ba23f83e4de96ad9ec0570f8395de7551917efe3c35b9bb2175aed13328f01fe3f4488b08f597898ed4102742b4dc5b8012d412f18b48ee461db4d43ab09e07c7591d628007ca92fa98aace976733f83ef7245a52f04d8513aee3b0f917d0f470411caeec8dd6664c9e8569d4157be808aefe38c31d6e1c14b999cbe0c73f82795cd4d490e011501f563e8d9b582ab757bab042e45af10fc3ce65999437402e3d0cb4583fa7220ccd4044ae5fa7b6c2b69ae8ed19419cfc9b4dd5ae85f0795455c159ce2b6b7ed8e0fd2650937ca6b6afd016bbe459b86f25b8587f387b51913e2b338af6758e60e4dd51f8d95f80ef9dfab813d81be9b3ddae6c801e405f61609ab033138dd7116371661b83b8cbfa2b6b4ba9570087773d908065b9e7f95167a07e3b24fcff86c759c14d4510ee52b2a25fc103903825cfff4274adcab5cdbdccfc278d4b6e2d9ae701e270107e75de50531f4053724bff5b11514c612b42cd80987ccf01897258a9869fa71fe2f008c5c408afb2bc6656347b601853b06d216bf1af6ca7f7f18b31edb94c97b24dcca33111a4467ce17efbff45b41aeb8963df8633e8c72027ace095e3f32062eb844918cec0773a69b4420b66821f4343ef5bd49ec5b7a88128662d941d428b55ea57e99476dd8b4b90872e3724e94e092e815b747621e79a9803033e3d6682194930220759e1d623be4bd65bff016265cbc089298c6e63d07677b566d604fdb23b62609bcc1ca17e77f0a23972e036d62199ec327b25a3cf4e14c29279c6449d3b8f13c65fe673a878260054430e21c6da8e0323c4c03de3896aa9458b02fd46b3e6ca1b77e7d35e194c8f30d1f3b9d4510d5c71fbc688c9a309d7f4ac438e4b5f39d21fc69936fbe5e49d539239757b2fa856b172b11ace4542dd2430108e2777c8ea27ae73250e587eb9311637cb27c0ef9046ec187a8dcac63758c8e26347a84470d7b1ee14020b8b616dd0875166af3387b6aa551e64be046516d941a4486b1ce4b453928a73599b344e53907eb46524ab95400f7d0f898de4c2d3b6d7963ab2d43205e8fededd1e906701fbc99d6d238a574f902ccad7b344f16aaa63ad81b6cdc56b69f7a10096145c7e11b88e31c092611b9f94430314f436e0a4df1aea991002e68dfb766e821e733a9ac2134d7c5267467649f4a63380e7e82ea05adfca696ef9cd80ab61733d5fa9cf8ca93ac758ce62ccc45c3b9f59a8e3b06de9dbdb285e27c10dcca3d9ef864e486ecc6432040ad30b79e63da90cde65d28e44693beb74f2d119668036b37bba9def09643ce29119ab012f26f1091cd0fd97f7027d1137eda639e5911a1794512893ccb5587315c923c09371f7ecd8d79a017e221f381b6a98c5e650e48a84c480e3a2d20543fd442e5ebfb93e1696cc4051465282ce940c2163c53a369ab1673f551834d3c3cc3d032200672414cb31890dec1e48533644e89a2ed770b6aebb9c7e89783480e6f64ab102065a760a99ccaddbefe05486a756bf7f93336cd15450b692f6b7f9e2127d9231114198c98793a79231eb50e9a5e46a3407ef2bcdb3d493b14ace9d4204043c2a026a2b8c6d6691bbaeb9b6e3c32a10e8a01481f84ca0ac60eef8e98b6d87253974447cc7cdcdd29490ec150971805a09f633fde5913d472e5dc77d32917ec40bc1512b102b3200d992e2f9df439f9c1464de0e1a24132a7601aab6bc2243befd8420a4da082ba2d72f4ec3b9bbd05d949673210a77ba9cd4852324ac928e6cab27237899e7131f39c080014d4cbb1506e583d54afeac34c652b1556864a7637144ea24e43aa0fc6de11730fe78b868e7ec9099303b5078c7f4e5b7940b372a0c47d5282d952db0d01b84d131b260bfb40619fb7ec06fdf65e620c9a418a626c8ba84f0ea6941e32cea4970abac4c9ff7ec906a6b0022ef0c91031a1cff8cf033177a2dbf3965f9c0a7d59db0a8c4603fea8464a97d321e38a00d075332540cd7e9152d0078026b380ed996e54a70c6d89a76889eba15e3867d9f400b5383d323a9f67d42c7bfcdff79a61abdf3da3a7e76e724df2936e552944a2299c5a4e9a2c48ead1a8af6788362cb87af5759117e0a46f7df6d2d8a498e8e4d832b2fc6d1d35e2aec443f116064ca7c3dc7760273cf164013d85248b7b6ec1f5bd69ce13d50e5753c85f22f12fa2346edd6c973ec2ff5bc10fd5db749b7d426986a64df41c7a52a8fc2d818179d56a63407cbfc33b735ba4b6ea84c6c1be6d1ad592ff78ba21d994a7d2962fac8e4e8a4dce5f2070f86d9479eba7e9b3d84cf1f2556e0876acf7021379e9618f74eacb4c8bffbc263498799f01cd453a74e7d62416220a19c3b1d786480380eb30450f84da28ff28cfe43971537d421d3a44b2b4fda2e86b0d11fc49676bf58869673c3ee460513d7259bd370a3f4826d16d6bea33760834331e59a4ffa9272ec8593cc2d0321a2cc500ed394d9bbf1be26aeb0ee026d43cdce0d6de38467da5f422f558c723c2be6fe0b1be451a0fc5144118682b3ab24bb1605c4139c961b496ca5148f1bdb1bb1901f2101943a0ec10fcdc403d3b0c285aa5d1132bba3a25565a37d9758750eb6a6c9675f29eda587ea31edd3eb1499c7eb71f9d35a26fbedbd98e547c0905150b288736f8b426d0043cc6885522d16fc59f2c2780076a48ce4f40012dcc3903a33dab9a520cea1d4dd1bb89aa180c69d964e2f93474928ad6c43428b157557bdbb4eceb292f8f07ff69e728661a62515f0e275a786e4f4e9c4152112f32bf465b94316fa4a37e56c30d31adb1b13bf102a6e594747f095ac8cd8204d0e6e12ccae56170ecf21ed240c4815fb263ff0f683303ed512e28770171ac48bcfa22f4d0b0663428a3d6431f96bf8792bb167439bd69ae3703146def34b8261af6e96816fc2704813f1070078bd36d783ee8e81e4dff1e4d8736043b1e8ee61263a04e44d18c271f4d3322a1aca6598d76dd33bee9ad87bc41f4048d3717d0cec8ae6f02377de72955a72195001e93f9ea5e1cc39c5b2fabbab7348c88392b73ad7b93f637e28ac8e0d3358a8f2462e322d16cd26bf15f4378e85de118dd412c9a6f81cbd8a359237521262862a11073a7a0eb9660575fac05ed4734efec581f18f2032723a99c639cf8bb18807be3d3003161b48275770de930ba2c164cb974ae6cdfb31eda9bafddc0bd02f19c2428b5ee96d7d933ef8eaa177e7194e7ac54e545de16d31f9d30c1e2f58dbeea1a9d4f3e52a56e7a0e59d20c5aac71a378e744e5c8f84a61ec0dcfc42862ee4f0f5755885cc648301e93e9761885b66a675453b465038a86ce6f90cf212989b249814f367de36f3f656775bd7ea36a23bfc49a1b7ddd9b778c7e8a6ba78998fa1141c5af7da4ec8d2cfb004855af95b6c95ea280d72e851d6d614701812a2211afbf405b24b0c604ba77118164503f0acd4bf24c3c9f505fbb414ff778b52fde6b2548a239b0058b590431cf752f710913b212e874d70524bc4528b754d2c8498d9863ec864bb2094fcae69a4ef3339ae2bc8bba477fac56ba965ca7dd28f33a5c421ba1d12ad468e5f0bb4bb8458ba58490e42c7d3f4bdcfb5b7331da60ba99214bf729e3f4738f639e35487bcd83133f58a5a5ddbeec9ec8bdf3bc1521254e25db7fec8452976611fedefa5f3222ca5c39578d30a5968468e466af54143b42ad183c537bec49d536353dc92c1d70b3225d814b3e9b527625f7537460e1045b042db5c4926990c41c6eda1ea93576b6dbecab49cf49275c451f4372012f8882714072a88f72751b09cf3e5f9f233bbccd0d5deeab571d1e1183bd11fea6d0a03b7afc683baeffc24680f0f6d78ec7ab42e920a2996c3ca4d14c49b921efe39bab02da6a5ec636a11baa7849161f236d80a87bcd63308dd6cda16fd230b2c95d09019418c06122a1cf755fc2277e56e8cf71f7d7cf4d179d4cabb8c4f4968bcc9d9eb3d92828cca8ac082cc7d1526806796c1a29a668e2df9891abf8354430d2ae02be1460c23b9ff88c67c2db4362adc5c36f29af2cf786f77cd1d4bb64c05685543d332ed9776ffc28991a0efb4bc7fa9b7b40b43e5d78b294b0c14d9d443f6bbdb99d5b1289fe00054937321f2b3b611fc8d67b491c9f1000d228b597c277a665b9baaf1778364c4aff810f5a0bf14274dd54cef33de15be9bf6fb9fb45e57e73c5f2f1904cfe272043606c51f2d1e5c5422073e4c728d976fd002271d2713d0f65adeb240e3ddbaf9e3c12afe8c3913880a432c5c25bd4d01641b7a0730329632253637cc5ddae1e977dca1af5af8ff51e47d53e3762921e929c42312f838c94834c224079c5e996b78b5a3a227d2825a47022f62d255c89f77889cb0fd9accd1100f01732ddd33e84ce8ab97615a1f09a89e396ac8b7939cf3c561719eed23452d894a9f90db63f88af243cfa5f457d89f9dec5bc7e3355a1526fbd57a845f1d03ad89fd53dd8c04b94ee6eb4445bf5f928dc2c66e6d006f6219c64d1f04f2d138f82a1cf5583ea54e6b2f4aeaa2a7f707ea473b1a999735511a7b48eaf3610a1405b56ee3dfde52b0e3679f07bfb4478630041a6b0d6c5468a565796cb43c104b32b673ade8ed8587243a3809d166c983fb63e4be3cf2351f473f2f12ebe69c452ba7bbb1e80eb637ca01a68fac31e597a8f13aa2acbb6ffb7c430a8beef2f6784cf3b7ae61948d5931787b0784a82417c5368cb6e14a5d73b12b6c1651d3c77b0344f7e1fa314361e6e925e01f2c1daadcae4b495f01962e9242f470992b77c40af5ecfaf647a0c876ee27c7c0503ac76bb306f89a83a2627c4413f9494c9fc9b09107680a5a0e135df2011d0c96f3d3df0f40430832fad5eb894b3ed6c9a81290a0f7a78adae3c9089f326e7872e186b2fd77974cb217ff7c9d1aafc625192527900e381c6cda6003304c2a88667c2694181d83cc6372258bfa02da9bd17b87e1f8eba823625a6eda7fbedfb1043c49eee9b296fbe9a20eb62a843dcc7137915c55f066246ddc4bfab7fafc86beaa771fdcd72f7f97101177a92f47dc66e607f311bcf0b3e1d88de083811f7e083f34c38bebdbbc0e54b43ce054874034ff2242c6b1d64660f7bb386cf1a71b7372e96651711a35a1e88d927aa48a9c6dfb96d7df7f95505d824a4ececd31c382de2b64d7f779711433f404d29fb0557453cc0ee666ac665a30b1a043642e1ab8e9616b89ff57f2b7df9e008296a6efdaa03864560799fcc96b97e945671a95781d31d6e1f9643f1f33d2120529bcd013697284b8f2dc883d9b53665f3685a852f203336a65fccabce936b5c4e980bab107f0cc8988e2ad29587ac3fb62edd7dbf05c0d9dc5a00a135832685c2690e4361439c8426a4ab00f2b846e947ca1b875a0a2c206a8ec81a5196ba635914c011506c3f46df78345717cf6e2d4d47fbeb28b8e0d0f8030d6049538fbeb9a3085d06815cd76b11ae1d2d548bd171aa64f0509642b42dc2b5b946430d5e8a1dcd6eab0a5d007377ff9b5bd0049e5afd40dffb2dbb93b2d2a96e70ec9d0b758bf98d668fa9879fb31119caca435cb04876005003b4342e3bd2c6eed8a58c21f473025f99a83496cccadfa1caafd31d91ee9b78a293604a06170be98f8faa38602315bfafc2d101ca14340958b0ca47e290f89a92c1dfae3a5f838897c12d5fd8f10eae5a5f2487b6d6622afdae0bd642445fdf59a77901df9478f47aa5dd4062c5345321e7f7d197f8af2b40115c73baf2176f81acf6ecfe9d3054c0a181830987d0d78cc2108675616435aa4286c65082697192371d169d62f4d1ef1fe3d0d21f2a612358374f58fbc86fc2a751760edc9d0d12b2b728c7cb0b939186c9cdc7758a1a6f1236d449ad250210a9842cfce8fb6d8b848cc981c0bfc12d3efc25ef72382af756d4bc4f5fc1151cb0e98f218fcab6841564a2d52956844caf447e52fc7bb8438dd8b073f9e6d16f25464885b7541386cd075acaee190375416881f9fc9decdc200b57bc64da5e906e64fe3049dfaa18143d9a68f75067305c32d5eb5be4ef4975355a3286e5e307f50b5a2b2eb4a3c252cd0ab82c43d70568682230ff99e912f61e60dd4851885d2102037d4c1b270cef8051c176397c7dcdd312d1d20301c00a8d12c6926477195913a22e8d5b5e7f531e188cbb7c7d1ff33b4bd5bb6c60da184b18f44d68d5c30704df47d8be6fa2e66f061fe552037442687544a11a2ee88a21196f5fa3cde3929e61ce148a82fd113ac484da043603232139276e569273c7d4bd40b25e840262a9d1ce2b08c1193a49f9c384d93d54fc2f3f850968b402372fad6e2de025a7dfedd64c0480527dcb624ee2c91b41ef365b2e665a98bd1d42f99101b773d65b71321952873a5db12a4e6beb9310695d3a6baed2492ed54c50f910023a5dbfa5803f42e79c7d0b3ec1d5f7e5c902de256f2769d2be712318c9f8d3789de70a0d74ddf8142b9383abf6be9bd95337c7cf3c59046da1aad00815be826bc859dc1bb5d4e3e01cc2ee8033d3fece19f84de30bc72aacda2203a59c13c4e3a2fb6058abecac5357537446dfdac9cc028c98ea433a8195511ee575c7bf41e91514bb4bbeecfb75c58e3c84619ca3dcf83dcf6c4b7ab133efe99e02fc89a28409ee187d579e774f4cba6fc223e13504e3511bef8d4f638b9aca55d4a43b8fbd64cf9d74dcc8c9e8d52034898c70264ea911a3fd70813fa73b083371289baf9b0f0072bab73399484909b45f04131fc233c5901d5cd7ec8ebbec5f63ee72ab26f2c9c0d74ea78e788ebb17cff390c86769b509d8b91b134800be013260872a66f571af510bec507f8e7f845ec1b0c845332837b4f0135bdef4c64364e5a4d564014266b255c988652f9c2396d73bc8647a68413b67886d577e4b4b83e48f5427fc820e819307de335b5c1dfe9bf96fcd24bb50f58741f0bb85974117c7114eb7d07ace472f6ef9f0f9059a1e76b266871b6a8c69b8088d12f3f04ea6f5f26c1d6372cf8b90c682a4f1e0c17fd12d549a45bc1c1f63a3ec65af9f9abad6fa55609fb238d51ed720572b35bba81233e20f8cfb299feedbb4bba1eb4cdad2f1b1886a8132ae41697c128e4cb021a38cb8edd76dda72c3788d1db11e8c8f519e2a9eae29e59c61433ddc046cc773ea007d3c0d5c581f48422192c77f845fbbca66a852f07829e62e0cbe75de28255157d904180eca2ee7011522cb5559d5783d0db13e1f14dd38f291bfc7ebfcbf3e58764edfcc5927077c14d5a5e93676f0bfc8be5afde03fbf5773e7e3d96bca1bccf9214add2d930f7cc4b43d8341cc8c183fd98ed405d7e4255b3eb1f09ccd4f7b0d86418b6dfa69c9cdc67b6aa25eb20f1909c2eaaa2d0d23f0cd197ab850422d5884ac1c42e27c2bd81448e882b4cb6efe57de89f8caa41adb9b04bde6db5caa822373d9d3d5b06a8da48a43095740fb98c9caf717350fd2c3b058024ff705b9346b7f0a495a6d4d93802bc45ece777f8c6a6e7c2ef6b8135115ff911a2ba5241665b6f7cbfa1b9d93b011b3aaa1dac1853fb262659605a52dd1dfb27000a4b1cf1801e7823b2222343a26581459d08b29527fefe59c604ffeece2ad79fd6a29088d492495a8eba41f2850fac57dc0a320aabb6dd69030da6c6fefc95caa5f5368ca74f42dc6dcebfb8279e3e49514d2134f502260fbdc0f2161ed50428fecf998d96ba0721f5ebe714e88599a2933e0aa4a2457a963ceb3c2cac688523577e13fc2176f8b3adae7299665a50fc285958ca22153dc536d91fab3 +MD = ac42940c34299ea91db6577cf3a83b6f862ea181380fa877df5f0a03 + +Len = 50128 +Msg = 1f0f02529913e5200975e9d4ec0f92b301f4b708fd55d72180a1b19a48f00edea5a2e2ea2c439354b0b2998c6e83476388a1e8c9b5380edb36d2271d0cc0510368bb70b763cb7d16ef6821fb0ddf82c141f85d0343d655a6f81e8a1aa05c6edc51a2d440a4724a6daedda9a932edead714413b3d11f7528baecf02196e8c0c71489e370d58ffa362d55b5a1d437328aceac3ad008662b091402bb6a3dd1ad3c836f8c1a7e83b2ffb4c285bdfaa3ae348a9c7d9d30ae115c1967bcf3f55cc6deb01f99995baee9742fb8cd577cd0ac4b43b95e73e053a2a21990674763e6c7fe293e6e85f38df823fcbd1f06e16ab73f7867500c9df3696bc2f16cecf01c0b4b3d20ad58ec9d899f9a23dd34aece4971974af4cfd019d019741f105d20491b168a8ac89a9d49f84786a1aa796b67ed823ec8af261d13715bcb8e04007b0a62109fc132b38c3feeac409ae93d7de42e01cd54f1a7eb8cc77327a2ba7f76dc9aa9cb588e4c3fdba73e66942c097cbf5540c1947eeda1f23d201711a6329a4c0f42bbd53dcd3ea9ec8e5701d565de562dffb9fb793ff6c05cc3283f59c25bb54a8bdfbbc3aeff27191c908897cb2945027f24fea3475093a0dcb9a0379741c4d6e5b570b27a07dfa759a18cc5a1d4086d4f81127f7c25c8a3ed79d8d239d2d73ed0cb987ca6df3021d61872f192651cd8f16cdb50470cfbd075b74dbc228588eced809794cdebc5131263ffae1552fed00536bdd8407c89a0f6107357d9e0465b8c72f29d47b40af58ef2775d93342aeceb7d3e79f0db1eafff03ee37c8698c154e214df8bcde8e43ac627e82a47f3d8a14aee1b7c0cf1757e11012ce8687e6a4a309ee3985b1ab780b2279afb19a8322315a2c0448bf00335cb385ae9cc1d2841b9b67c24ad3ff2d2bc0fd47532ca85fa1fd8201e13165ccc26cbb3a63bddc3e28645f4574cc05bd7eac7dec019c299ce707981332bcb47ea2aa280483d2602d49e319158bf03bb384638000356f73648116b2cab5b778e37e0a508f65860aebf0a649c508e72d99dd848826772d0240f099869ad2b82f75d4fbd95d916f38f4dd0c45c6642747faca7e0ab13f4b72acc60e6806124544b017fd06d19fe486d24fa3b1bc362707310bbe9c42f641312271f3fb8f0cd5551ce79c7d9dd98c510ec8fb01f8e76d07e6f1c4915e54b4ba2c74d8a5a82aeeed369448b214d6dd3404e980ab2f007fb6872d3eae65b30c9a355f2afae3e5085977de8038d9204dbc4f11c331a119c59f9c0e6b27fb99bf4dc781795fc4d3a8467b06e1665d4e543657f23129f18bd52f902608b2728143417d9c2268cd7f45109aaddaef03a9974eb9db68f8b2ef24e2fdf465c28d024f11a20fe49a503075645143db277eda7d71ef5db92247ac4b56400a20dc8d85293aef4d0e691f9faf9e5969709421597d3c52f9c03b425baef600c7b85506827829bfd42e696e255a4afd7f29d99d8f2cfaaf301ca81565d64ebacdaae08aa2a27a9e45b2ffde6a1be6d805655c4613f3593e711d0d436337dcd88c66f37c4e3e8a05123aa0e2c65afe538cb190ad6066c49b6d4fbf4edc6a0cd4747b026deda2e47eba33f10dd29dee0a85ad1b560d0dc940652342ba29e36b59165591e219862675be2d74d2076b525780a650b2623ed3b809464bf7d41a84b10295365b4a4eac848e8580b1ed29b7e4fe4be55518a0708cba171f9a7395c58699a8443c08630325bbeac93fec8f8b1d5eec2da088a92c18f814521480ebca347c1d5026dc79a6d3c6bb92de9dd3587b3325ae474adf62f763dc67f87462ff650a42ee9e2ee924092f76920079bb8c891b86fb9bc7a9b1a26dcde5a8d6b1c172c4d783f48837f75066ba2b67f89ea3c1686e7a20a79ea4a476674fc8204edcf84c4994dc60ec9d23fce4e357a2f33aaeba6ace78333498682e46fab8d9a09e6000f7b5b8518d720e62854e61f16fcdcb820a4d0512f21977f5db9b0d6b4d824473804b0ad281326a2829c1197c5ab9824fab9a59cf5db46e5d9395386dac25102471e9665c7e4ae1ce30efe09c4aaa7d73ed2ad8b0edd595c60d7dbc5952f34d842b053d57cb27efb5392f49e9c5fd17af4d631470191988efb7b92ba6b87967233a23026cfe660e8da103d7ed434ddb522af79f8565ecd20b10dbe8ee6323f7721dc758048e6198b81701fd0f48f952fd244cdc496abbebd8b75a8688e98f79015456a0a701b748b4f9ae3bd85dabf910b7d75d648e2340b8f9b9871ea22866516c757edceed38914d76d06c0e7c2482d642b854f46af7b2c768d5d18236b39d2c498350ebc52c4481ed300517dd8cab3a7be06723abcf5b3bc2a9afde3e47e15fb4375c4d091a4df5e549b22865bfb33f1033365b0d84aef2935a3387a00bd8b8eebb397e23c853b1476599ca7c8444ede9faea27f8dd52f4c1318704c6c42b3ee0570e0679feffbbfccae2848aa4034def7caa0cd4a4f0493576d0dd163d81fa7253036b7586f91debc0b6dff7e89a6608039f94099f2ffad871399bfa3d83f28df642377d27e8dffb913d622b15b1401dd5f046ff97b80d916ae7c5d98bd9301789f0f1fba8740716839e958ff6efe4173bc6aa1e53328d47a805e31af02abcfa54382256d2469f23e002008952fd59dc7d4949cf9d467fe474b97d27341e9c1c9f4051f66d06ae09ee902c82f082a756e3a0aa783b9ced4f162b1c671f5eda67b2300643415c3db2f671a0e39927d76bb5f45683f6dbde70d685474278927ec1d431caa515ee53053fcce4121594f0053a6cd35696ab5b2ffbec872009628e144f6b2384b267f8ea13ca81792c70fa0bbb31ab5be3b66b74cf8a63699874144769059c48e16d3449b893fe7ea664fe65806a65f8a5a1162798876385ee7317426b27ba5968a8100a774ee38b4a1702fbd1408a97a31764309f0b0fddd305a0ed9dfb071f0fc293169823b907e13211b5f6dba19fa6be5e772c3df0d70fd2b63046a60a03a060c653633b065a335c307b36623278763e0be587458ddc698361f3af534b6be12dafaa20be55eb083e6935dbfec689db407460f74c6e55aac0a91e212853c09cce580316d42b24287fc3cb2bd6e43c9d6c9fd1c57a1ca89a309799e24da96b97eec9478ea3126c5bc847256f1314f8836996213af61e3f017c324c3aebd5d29b33095cd056912b68c1fb2beedcde2656e061369ce9fc80a74c831f732a605f6f451f2c241331ca1811e9c6f25acb2cde7806fa337a3fd5544690fbd431d179ddcd169ed20278af336119dcc1b46273e3da8f5449d26ea5cf1563c6a429b087ab73f399214df04381589156a4132b632dad032b24181157e15f046a2c3986f3a2dec0075b1921eec99f5b1de39faf64839a6b690d75b15552cd79cdb48ad9248ab785cfc6919219d5dd7f18c67f75dfaf49cef54c11d506ea06ccd9834434822ba548d9aadacb2a6bbb032e95dc063a776134b7291305d270b30574e38e1c754c51130d511f548b54e1f14997dde8dfa48ba697eca3c921ae7b2a881a901b65b762ed530286b6a258f6505015aba534fe6e2a7ddcebaa5b6a0745fc7173b8ba3281df93043778d93ea3292a576dc5a34cb3cb5142102fe86dfe5db8305f7cdc8656efb5a05b2297d08f83c1a54cce9358018efb663de1317f097ba49f7bed347b8827a11e1a3c43d46266fc47704a6ce8017d639098469c67d0a6a806f09528d8c08f3fc69b4f4713c6dbc38400c095c55a9f720849e892effae6acace5fc2167a52e78df07e20a5561e8fea625b978b7b5fc0e15794f7cdd304398da83a888eee00c32b3857ef461db9895f306bc7c85ba9d20015001c0fa19c654d8f223c336183156883eaa6d01ddf071b4cc5109f910899112f588c80e5e76c8ee59f53c07f6a6cda75aeeddfb0ffa78309e0087d960c84791916cfae1a65cdd64e0a4592822727d5800d2ac1818bd93b1a5525eee51632cc64b33c03a9a7e7981b1ba8463439d50e358df4220a141ab7d08cef7008c6127f84c6781e3e1e6858ef1bf247e01302d8f8b9c08db518fa6ddf0fdb8d7b8ca1f70bb8fa4a2249cead3cb39a0420632fba5c1926411d1ae6e1985650a3a7ea7fe77c13493400ba68e9865b26277f7aba46d2147bf89c8a6e979ee9056f286ffab5386ddb5853d0e5b25e7b1d1e57fa30f2fd445820cdf800145540602c877da0e4c3112723863dc38c17abf55534423243302141362be439dc4de4d7881fa400faceb5c322324160cb64663568bee32cbc0d13adc530cf7a43fb5ef1ee8b63a96b9db415d0c29c6c14a72253c5326d9ec206c4143a771a400fe00745ec454cf8bbd2a4b5bbc1af33ec6268d7074941f6f99f9b1b22597539849e8629fdc7b08d6feff0295fb9ea66b728c2458b6df0c3c74a1109096230c5468954348f9d4eb5fc583ed71905de63095c9715de0afa83cf98be845c2c0d51ca22e9ec3e306830f59dd94584500bb757808fce7bcaefc556fe0c0397114b8d841dcfc7762bad5cc04367fb3e02f2d22646f4e5f10820f7020c721d46bc7bc708bc6e4cc3e98eb7f0cb637e82a91451f9f26ee2ba5d3e9765269927e7782e9ccc915de2a3e47cc11ba844361ebcf0a54715664b5434a934d4eed9b9f5fed48d542f072f92c70806856c92b84eb9085aa24273964b18e14df5c7cc49fe9afe071408029a1ceba106e28ac78bbf17dbc07ffc0f49fb9487412c33e96e6de70ba8909ec8a8aecce83097756b16dc73eb955494a1dd02120bcd0cd5a98dc05dadc06e65d1e1d5053e1238def5e01337a847a4bec3d5eb2bdf300c0f953e9289350ce1ffb6bc0c1f232a3b09e07e1fed923604dcfdbb134c8218ae5424d760d431ecbfcedfbdc06537f71298b3574f005a0ed961a7f316fe84e55845e10e97d934ce3c55c56dae81dcf7540df6f22d0a3020b70f6b1462bc6834be57424ac402ae400c16f02202ff92b973cc23e53685e52a1218bfa582f0ac8534fad0f251eb2ed09394f8918a38e9abf675b296f7edb9796f200e1cf445b23550c315bbedfd070e6752373290b8524d507d3b8dedbc5d9d42b7eef1332619e3a62278fde4a2e747fbd1446ba3185d1c16551730947c22142142caa8cc1c540e89ab734ec297401bc594a8c35db37aa6bc9fee356897a76c8f5339ca2b82f1148fb0bd152424a1f8590eccc01d242b6bb7a028f2e6b97e04e15ba4dbee1461a42cf48ee775d56d7c2ac238f86de50fe9ac284fffab3be67bcbdea444602b362bf5c9914c34443305bf3165c2cc60688eee7acbc202a9914fa35eb09a4e41ef1a5ec24c99ebeb73338aeeebb5b540e5ea132a34d0a98d0eef1c5e4243e4f2dd0dec5119870925ae74124d2347b4e108899eb913a1ec50bfd87b5fd1e7e0b8b06502f8906a189d6545f9feb50f47db30cc05a9e0cc678f14aa54c607dcbdfde9be574b49d996bd082786560962ea9a0f4fcc7f04a697b2adc34d332cc8c94cf9883dbb9e4c100f37a75bf5a8f929a7f483779b27c6e945fbc1a929e902bf2050414abc0637f0fe4433ff501c18617f70e58b90a2b3f8c38f041d1c9530fc129e77f2df3a33c624ee5bc4f7cb673eab05047cf20de432a5c828fd8de9ca0c9e24aaca9782b61bfd769d615f4f6c2d95315ec031d1de2387479eeee03f446d2d9348366778354ef27d6748e9007d9ad88662f9c2970847c27de455d60e269a3b5adecae19347fbae7347e037973222df64af8e46b6091c01eb87b6b1fee71051fbdcfc785c549e7bf8bdbbcd6c2032346c92f210c7471ca000f7a6165a0c6c0bf6d14fae4be194056e47501d07ae6551febbc9c33358d6276ec29875d81d09c3cc4a38f5ea8598b5546331a8f25328d2ab9879d09294b52285670242c18f8613fca64ce1a0a709163bafd4e3a4a4f910f3a786cb6da1461bd553781fdeda4d66f8840ff416cc61a2947bbe7fa72a5297576785061d05156def166e7f6893dc475051d69fa56c3ee4ff5552bf6249c1f04766d93339168fa3233e69c3f732cf3f84ae5556e51cfd47cccb46357e89c3a6541417b53a7c31562229de80133d82ba15d7e0bc5e4529558d5bed644460d4140dfda51e99ac86f15c674156452a8341848d2d32698b4f98c175ccee6c757fd3c59225c1ff0e1cff428536a8f5706d50413c7f5b9f45dc8c09a779164f2e23602b6ffe61b3375fea64f232eabca59d80dc447b8a880b5ca9b67f568e75016b33afe5b3505eaebc5d443caaadf340803dc65396618c425c7c685c09b97675c3e8b3a1d92069eadea260d3226541c7d1f19fd844533491386e9fcbe729bc21a9d9d712d4546d6223543b441e9310a1ff36c95129e2196e8d0abd5d9351ce6b99919ab7396ec1ab270d440e13d9f8656497b34cab80a330d6db417f72b415da2faa7f0d6cd20f2c56180baf968c6198ae7f1e294dd15a9e825adca029d33ae3c88ee4941310ce7c3d2f02971b3cd4a239674a758536a7fe3c03ef7e1d31961ee0b97bd990bd5801589cc953166dda2891eac8cfe63323d65050ea57c151cfe224a4955c7a3a646214ebb0720c91da8254743986f55956cd5bdc6dcbbab640e3f0ead18b341a5c050eb65852824b6e45dd9ded49171ba939db00da486dc1819ad1f6b0e452dfa760a26731a30becfde9a9b28464dffca3a24a68c06c5f261a5d3452a3f66aecef0b8c98dcb21e0911f4556c6f88c46ece9d267eb096033663c1b4892b4fc0e49b7c09a5aa2e1d2242ec4d263f2348f49290fbad1b63fe85065ecef4c74f09392528c6283a659dcaf9381d7a53a2e2208814369e6134b5846a9ae0300872b86d24982e8afdf71465ad7e22d34da6347537ad63ad32b6acd718eca4d55f6942f30250cf6875612574f81519bb9daba464f9a31f64003858df89ea692f4c812d5d56c9152b3122258b31935ebdc401a66266cba65d4a585e10461ab9d85058fc1e8a979c5da1b8a91b127f6e344166df00075da4e38185011bd5e4135afb5f23c92612b17a47a334a6e34fc4c9a649a2c043ff97a1464d0654a1dd1211ae1238cfb1e1110bb3604cb15c7aeed853089625b5180b20f92eb25d426c12a6f9109f94a679278c457e45bcc697690ae8422da2c33d5bcd1a88b9882027b1856cb8ecda8c516166ae6bd44bba1bbfbbc674ddba06e626003b197077d3865b37699994e3cbf05b352ea76cc0cf7e6f758e2f2afdf898e684db2f7baec50e9c2780213c62fddc817276bf73ce4f35d4c2afbf99c100cc09a56b593f9f8d26e0f030fe27ba8a7c50a8f7228dc6e1e89c2d9bc4aeb5c7f62c0c7c1530cc9475c60c0c6efb6d0a665543205f1f3cfffd2210e2dcde4ea6bdba047df1f3a86371a7e573122bece6110bcba2f3acb321fa13070556bcee35893037f16dfcd582812316f5863ddcb602f0cccf5ebaabd045cb8a83c0af36eccf2b0166e7b0b66a4ab40b0419b59ef2c280a1361ecd998386d815dea9399b4516071b5efdb3dd9324d75c4f6b07b614c657f347a25a0ec433a533868ef09dc6e450c04a2e7aad85b6096507f8c8b4a484c32da487e46e1ab2df6e1bd048b0fac094aaa8e889c8ca54c6cffe215d1d1a947edabd4e0159efaac31fff1bc66759114f350bba4591c9a7abf762935941ff6bd764f2531534cb721ce3a0dfee435a7cecf9d32242ab1c25057605cd31e5bb716966f435b49126bf3933c17b14b7876a0a53afaf15773a437fb6381d7b5ae75b915b337443f199d8a49aa1abfe46585f03fce1bf12889c8987527a228a240b610bbc208d67c88d54eb82f1b0ff7255c2763029e0ee51cb6d98b55c6b02d3805825045bef74a889ca7a7712489ccdf83aeda7e8a2fd553f7640695f6569dbfe7779be36291ef4178fddf183c15aabc83eb6ce9e73c4157129fad8e39023cfce6576545fb8bb4daf4b829cd6c9bdbe4e248e0ecbe1c714f8ff44ae9979c5018898b761291cde17c95404b38bb03a57e2b2c002e16b9ad64f7caa34d180d223a587996f32d3fbe4ee5fd0d00313551b2e3ff9258f7fa3dbed0888263c53bfa8bdc8a8d90d5c993796b5839cdd61a26aa94285f1169c76884a598add3a50f20339c2622909453a724afb79549b3986e8bc5112f02750878dffb61ec44c071db5921b61f9c6fc543783a83eb1acf986f80ff21cad222a5b3f65c4b095f1f4a7425f1a04a5b7007af9d932501e8320373aec9c0f72a798762f24fbecacbc98033c0964e6b769e0133ba42039f5ce5bfc040ab5680b28094ccfa5d22f930c6fd605298264c94019c17f7d0878f1defb69e5c2d4b2b1141b53b370cdf5c381fa743027d92b45ea2bea27dc41898d458ce572bd808c1f0c4d3f5d0e75dbc89db6824f9cff96a7b88501d74a61d812929f132d433f309f60fd443ee7305e0cb02274a5f15c33794bb3bd004ff0013c36906767fc775cdcc2ca26db93a3d92a79dccfe5bd857e351446503535528164b20f56c561af7d3192323bb58c36e98c4b33e88159f1f36592ab8fe8c33fd526856a65c7eb6dfe486fa4175f49601bbcc4c6730b6f282f855751b08d51ee78ec314008d222396c8bbbbe2e2b43c5cc364702e3e6659e8f0ec2e756b56a04e940461ed4968e785475f6ef04bc13ce97836287bf94c5db9e7c75cb06d39409a2ad24655d6788c13291a1952f8421e0fa2ea7b36aa91855ea58e07b357a3873319d5ca1e7d7b9aa73596c6f031606b3508287248995c5a3df2e8376671befb8228b6f531869997ab34787cb23e43aac5739714970ed663bf967df5b102b226ed211dcf7639f90d86ef6b448066126326abdf690c5127284c58f6487c54a790ddcab161d5dec483a02b152542f3 +MD = 961fbb9f2f6f0b99f3b19e8268fa98742c34ea021c102f38550cbadd + +Len = 50920 +Msg = 6f25e99a7d1dd3a44656b3a3ac31361b7c5e1d5f08f1f94912b8322eeccc4e11de677017c8f51f3b086e49439ee288f38e56a38086ce5848c1ab59bf2b3794adc67fb7974c61f47a16e502c03cd1646cfe77ed9863d284211fd125a1baf3289def14c6005387d9c83764e300ce2352ee936a028de524043ef4d39ebae127924b21cfa33c238f568d3293f6ec9c03dae114d7eb4955ed60050858ccf3e8fc5b1d2458583104a2f332d019426cee9785ad4a65aeb2fb5421e02309b83516990a7dbf56edc940e8391dd99fcf690b07dabafdbd55b21e82ce360c8e6966b52627d2bc7168ea1e88afb715cca6c93c7c6271f487e730079eef6e8c8ee76f0bcd3b84e152d37ee5aade684b49ce76c91ea338f96a6d13ffd10cf26bb23b3961b4cdfbf7a1356cde784c9945bd4f56fa142778d20eee454c43ae2971a16cabfe03659ec505979c511783b0c9d132531687769a481c72ad361b5c7b650382ac2ce38bd7152700f685b20b17a02d7e54679e1604233c023307829f5011828626317cc80eadaf7862c46f6a3492783b40338291202b15a4bf059ffe103bc47f0056f5a3a9564408c854762a71665a7101c35a6f55285062397a9b0123ac717522e376a511d88eb6107ef0d235e67d297e5f4f360ae1944489ac9d30f22c327074202954aefb378c228a05ebe7d8866b9f4f8970a91f8a5198e4ce14e383af79dd54343be887e492e6c0dcfcf105203d4cda2fa499aada914c6955345f788f9748c9bfdf28433fcf45689e8dba35f1a96d49695b424a2b0c8e855b18cfd47ad39ac5f3cad4f8f04b25c97227aa2fa1b6eae4611c0cc725cb477e0849995f1a34bc91f783566e9f0e702c815129bdd96cabf33c6f5fe871d55d9d834e27e114c29675f492146df3210cd9f3939fa541d499be25dca376b732ba2af5afdf22138510b8128078bd948be318ef7574b080f59a8d42ec403a9eeb446d85f52be9bd8613a478d3e8252b54db319d8010a63fd897a7bb269ef9cf07e5ad5ca77200bacc857f4f16ce6f6085de6b263bdc4f25837955b913257ef28e8434a14d1b2db35f5092bece9161da24d310b22e3e73db0026df64393e90ae8908487d70903950485a25ee8599c4423ca16668e29fd90857888de3224ff6abff5b32189738ec388e8d8007c24e5f3fd232b671de684a558e86a65f56c27992f8643a994a7b0d1439cfea300e18fc7af06d47f5aaff8e69af0774ff5bfde10b7c0ba72911c1668b520aad91f05f619a9d3a631bcfce6deec1f53decbb6af6bd9438c3ef7572bd46df250f53f08b5748e281500bd43baf89cd374a4dfe6f7f5147d3d414fdf6dbeceb08599e9604a62cc62a57ee41b01be4dab5e34baa76466e9ec423bf32b688267b9bd2996b3216ed511ec0ec9f947aa7f057500e49e611bd9ff3f8199a188b9c99c6c46df67e6f348b43d32c754f947a1705d8bd6227a9e654499b4abf85aef54c717541bf4e78a87d82d8d74b49310358a7c4807ea1d690c5ac53792966b7da9d842e3e4f0bfaf22ec41614aae919edba255c8124bc5f63f90569ce5e216ff292e7378c2d1ebeb9a6efd60c189913de4667e8e5dce00e09f83d2572e8209ee63682d852e1ed89a6eeec60e61fc1e97e0355b0d72f75a927ca3acf8d4fc90c5d8e3d59b9f4e226610da4fccb47c76177f9d8fc7da3e3f96878e6af4619868000a40101e8ed645b910bfef2e31714446e30d613ffc292c67108280dc6d0bec4777fb41a0754daf2def1e189551710590eb1383e8614ead8ed85e73035fbd89e692740ea40b2aeb1f2c6370a4acf236afc83e7c53a2054f682f40d61ba233ed77ea58bbab98e47617292e7bde9c8b63de3aecaf0426e36ead85f81e87dcf57375f007fd19a700dca095dd9ea5b892f9c693bc806c686f97a98cd2b0da7878b85b44003790ce068b35d30f5d9c79af84d3631cb51f0f1066f6a47f31860d4428b246efef83767c0e5161223d256847718f398ba17e636c490f5d4c150cf3ce40f58905a97428c7d29dd0c4b1c30ce16c748787ca1d0dd9aa7e27c7dfe1d49d9daf8b1fe9e55d807455a2555007c003c20dcdafb37d76ef27ad8470f6a71838ab4abd6d2559ad2c701346529c663a350ed58c51e21237233d3803e5fdcf4715d641909be033602232713d4afb60c3ebcf46342cda6db71c4788268569cce9bbbb4eb51aaf254f0847da17bd0179f59e7fea658f00f27f10f3185cedaf126890d6ac9b77e681a2553cd83617233467c39d2c90f70a4307c7bc83176d42524c4b94f5a4122aeb028f6dd648e7e5027301a3a736f33ad1e997003306a2d7ef2d3292b47f97e0c3f81d775ea0bddb76afcf2fc4c81227219d156ac27b2cb45b53ec3c637e77bc9efb95c5fbddf75b0386929e1fd4c253b48aa9689c15498c1988ef1e7d312ff2fe757ef6286123082b9fe27b12ed8254fd3ae9663a45a7b3cc04a1a58c382f38450e3f745edadf57714435534862e08f7e365bf0178cb5bfc58faa5dfae3f401151e5dcd199b7abd572c01931ae55b87ba056792de6b0224a8626fc453d52cc1e13e605ce33383ce5fafedc724e551b2331092dad9510b76e7257865117c281f3be6edc0462398fefd58407bd0d371b36be06414a2ff302b04614abcde49746d77903c83acfc08c3b2ada00db93029ffe71d61fcc5962eb5827e6d37f4ed902146c2f313a22d81b102289319489be8ec170002dfbbd635aad3f546631fb919ff0c0797fca028624b8e51800af9774d2c8e30cd59f030137f8b6e6cca993c704b49d691bb317d48f799a0fd7f6642b525bf3827e7fd3416a81b4246eb0bf8119a72a886bbc0ac9449c69f71d2f99ebf6c2c7eb8f64d32ddb906097b20d27c9c613905dd8af836d2c687b563a23ddbca64489cf7216aecc736de2c6018a72a6f33ef671cb5329c92d27f8b7969ad9a74a2a5eb48e5d0a2618606339c4ed48218871854aaa6fa5e4301f089f995c35b3cabd70244b019044b3b00b7961ff53406df46572decc9ec71e9ad198ab3098e90e42e7a611c9e72d2da6010d4288380d8b0fbd71d032bd78ddde7e2934dfaa4fff04ebc3487eb7e96c8a6e7dcd50a290c80ab5cde768aa01573335db9c3214f0834aa20158e8aa815aa479526c1e37d00d2c77108a380c6972e31e344bee7ed1835b37ebaacf66fcde3b4b1386bb9fd543bf28c123688cb9183563bea9de8ffce880d006a4fb9362df980b4882f083a75009f36919c1d1f8307029011fc9f078980196dcaf34dabc4704e27aca838b4f1e53fe8fd40b842ea2dd9b841376494d7d26b0f43441e311fdc5f830c53c5ed493e471bbbc0e4c6456c4decfeeae41847e3746d699eb5569e92374f2dbe5a53e990675763991d2a1336d1d6a19398023827b820b48fad8ccf3687e487444079517ff3246b35ebded231f7edefadfaf35733b8a1aa736164303da40bbf8232de2f418cfb6923bb6500e2329b1fb6876bf38bf868b2066b4d501c3dfd2cf48be2d1a99744b3ef165d3dac2476e839b7ccbb94f9fe719545d8bd5698616627b637c70ca4b8f1f48717d7041009af9416a60de33fcb4fcc6b76b67155b0d1786c4d9def279099d078357b8eb7bbfc722e7878fb2c77d30856a809f0e86415730884b4c5b294121f842679a07e16454069c47b41525c71d591fcf669e303a8b4058dba24b81c011e157b7ffdc591208b530a835a5401c2b097e62a20b817e197fdb8fc80ba90dd78b694fcdb30c504bf64cb2faa74003c25f2e403d9ea0976bb5ba71a7e3cab0d9be2135eed422a68593986eeb664d054a21d8711d9fb60de7a99c89251a0c32814127734887c29c1e52bbe3f1298da92b1823fe2c56ea66f7252add2bfa961a36de2211c51414bb7efc5e19f2372b77cd0cb8ee500a652c02ef0c78a2c991f05f5bba154cc2418a0e592819d7d94df799c53e4973054ee670d0e95f70d0243d66819889c4db71923430c2ea89571cb2f50a5e177c8dce1da890699c7f577887b218647417a5cb59594ad394eff9bf2f4aa4c06153eb0d5814f73535b5a6b459abe8c5df2c697869e6700420f0075ef6015c0b2fe067321f1bcdf535fc040138b9b864d1eb6ea04a4168fd9576c8239080f8e7870b4866fa25d950a13bbb87ae4452e9523cfe6982d4fa65fb688534843140fe73bcd8d0729ae4ef835a116d42b47cfb6a075ffe9b06f0e55bad86b95a7bfef5fadb5d990ee3b67ae2404fdc7d71ff422234da851d3e1124bc2f13db9bc5f877245020e857661798c7d7bcfbe5e3a36881abb7278ee624cb26d574c1ce79f72afa0369e6d48ccff13906a2f304732f1290553e0b7865f281a187f0957bfec3b683dc80ba0dbda52e40b547eb62876dea5618b75a622343ef362dd07c2abc24c4c8c4ac8e8a6263f7e4ccf40c85892398dbdd693bd588debcecb05da0641be2fccfa13687d4e1cff32e34f17ef7df1ac4278d9dd758fc8d91ccf6dc29b083c405a25d66cf72a4b2cb25d3866840f31a15430e9b5573e71616dce8983f975c948849de848eec11d327d292fbf2e62beb33364aabdeaeb142f2266ed808a00e182cca0ed8ebcb92fcad3b59974673f154c70827159a92c2d9ceb271e3af5301199a2fd3aa0f958ef3086a11a4896fac1e79c18f20b0a682a35186d7025a389d5e7980174122d56d81de67a068e660c311f06a691549725a6824ac8a7d32d84bb172c3c1e64b10966ed838f02c83d0a0f5d50b9d3c8c7fb0efee2c709c5eba71d82d02b9e1b2d073829de7e8378846aa92cfaa12dda254ed01580c73a70666799c5144e77a809c6b85d67c6fd31e4b49b08751b240b27a7a660a567ae55465c9c5869233f9ddfde63e2afd6f466d66e516a40764ade577bde6ab126c9f6e3ecb1b76f385a5f07a4c764274cfd99c1fe68dcfd5106b63d52048e346331d7c79e566c76fc5c7e29b06f5c5e877d4d3feb5ddb0c19ec3531b0a565cfcb6a7a79f816d210edba7dae87a835c624e7f3c8cb8ceeed6f7fdddd2e3d6bb3bdd85163706f92dd9af8d01ea11e8afe93e21fc505827321901612b811291ab0c90fef3c9dcd292d729c17f2833eb65852f043ed2fdb22394a53662b0014fd275b75b63dd6bc0f910328a7b2a4956263e076e289b10356a4eccc6ade817d8d8813ae590fc1a8b0a8db0321d79b9ef9c1dafa8e232f779ae4f5c5732afbcf3663501e1a2ad53fa6c558dff8f9ced7f6d290ffa951f1c4698a03f321990586a249bf59ac1797ed6c870af3af61b4bcd416b0fab69ebe564d0485b9f8b105303b9bafc5713e701e7c5e7002a7d7f3da3c1e99805851dbc9afd4f9ae5b0b91687ce9aff5fc37f45f50cc16619494f2ac794ad904e123d08b1c7bee24eaf1207bd0a44e7fbf7c9b2c84406cb4d85137a0263bfe1cf37d43172d89c1d20b0a38f6f16bf9a73d84eb12716bf160f5754941cd62571d01d699fa2d5f132a4ddf517639913020f8d95a8dc2af32fa7e798e2dd94e92a99eb84b90c69c509225c8f05623c4906173e2600ad27aafe5d5e6acb0d4613f271caade9773a218ae255f9c234a7688dd2158a2263b6ec6a79e44fb77393a9b3a2e26d97aaf00c9d2bf1bcb7a181788189374874c67ec25d42a0d10ed824b554725a4b296e348f2a47575f4b717282c984cfe8609d2833bf01bb773904a03ebd2a5bd0088baeb1197cb16ae56b248c4d0b03f34db25b4876ff5dc99ebfb04dd6110c829cc9057a52132466ef593ca1f566fbf0a3cbc0086b81ac50a6d1fce9877196ec4df0e1f2bd53dadad00165c6a9dce067c9b1fe7b86d2d393b9012b1ab890209384c7ec224386fb4ef02b450551b6dae0292cbea9b039f81b4018e6e851b8d301a717cb11caf2ae4ab7a18465d53d10e42a03a89bcffd446ea1dfd45c3a2fd7bd20a829c73be11c578d2acbef1db6abfa34006358cc67de16461b9e7d5b3d534f5542ac4d7f996dfcda8dc2a9116cd2abafe998e890bfee9b9597eb549c2c6f40b0adfcaa7c63c8c20693109d9aa6ae7e0387ee54024d9e83f81a64e7e642551697b0c2e61c86553079045dd39eab67fb99a20ea309581458d66bb1401fc92a5c7415a60a464c3ece9ba8535106c424aad7029fdd8f2a78a19753796731071997aea24f1de2fba824d5469821bb390d14266e4a0b7b09f3e7a29a646202454751ad206627d7dcbdbb8da8d44ba4524cc0efafb733b53eadb161081c3b7ccadf11d95692310f37a51a2c94b0d5a8570636988d8d602410cd873b6446fa86e007609a0e7c41715488c91bd3d3c9b18f66ff8bd07597b2c97bf198788da507cde7c5580ecc62e57a8d51c12de72ea64391a22e4016e246b0e178e00a9646e9daa9c87b1f299953f2dc398569910d6ebbb2a7eba51948c80c24a37ce30ce4134f72f16b093bf0a3059e09d1517b6df33fef9729c625d221266ffbd2cb95886d746dc99094ab6ebdf8fb4a0cab4d561c1770f94f6ce3863746e8074b8ad939df90bfd75388211b8a161a839d40aed1d18a5e55c75ffa6ef3b3b74f4fe782ff51ed93a31aac4400f0a6243ceed847e4fae1e134f86713923db7055b47ab35e2abd10fb64ec9bd24d8ef40fd663bc09a8065201c4a4cd6f8fe98fab4999e9cebd5855b9758a733902b3a974f6d30c0f8495b449825d5eaaa1c9fbde1af885f21b751a0ce9e0e4f4acfcf51b96b80ef083e0e742df1ccf8b08114776af031268d3a7c06e48ac6b95caef695c4c8f3f7d147c5d96516f7a710133f4fd8c36198354450b460839618cdaff78bf6ed517d5b4dc79bc7fc1ea0d4bc676eb192df5d23be13d3caf04815a6b9195cda40622caf365de1db0c0b8b0463d6fb80c4741e5f910e8aab3ba257eeb6a630f52aeea9d4eccfd32aac850fa6f0d21fcac1e883efa389028acb6d87ad8de42ed114bc9fd255659b3b4553d4c44aa40219f00333dddecc62ef08704cec261c7ff56495b4b25b675e96403e83655b94cbf4bb8cd731291ed3625a754fb269954ae98441907be51c47c4030ec4920ae9a3e4894d16f16bc97d6c294237073e99b836da88dc35dacd7b4cf88b3e523fedb170c30c99278e138794dda1adf38d6ef163d03240e824c225b6867c9aade2e61e20cf9207da79451a63de57597f3e5d1cf8cc06639daa436b8b14ab7fabdc1d117c16a7091314a65d60952fe2b239ae627d38cdee5c549875520cde965513dab30d001247d94780791368f0f19566a9ea7b7b4f882b0a086c93d5de87b270652b5af69d6834fa199504c0612d2ead96dd7afd54da14b4dc78d7d773f9cadb05a2eb5e0e152c15bbdabc064c3f87f7bc620026a48c1e3a5dc0a47a6494a63d034049a12ef5ca80ac70c2a077cea82a64a2975e06455184d06d85267b014d7ca72cfb28c5b11524347e9ef8aa839730d6c4c60d44adb67b80a6ff437ee8c782398f895a9bf016e79d2cd974af065eef5af1169b246d5405b4949c3936f01d3501907c9e775bd3b22da4fa7e4dfe055138510d706f2d340bb35fe3706bc2567f47585b5e2399566e2e0b897d4b13923db70b35f4ec945c76c62e5c51e5067a47520eae016553a701e68c0ed972ee0f9a20481690654bd62c352990426b6392756bdbfeef0631cc559e4c12f98a378352bb2f36aaa0faaa17487a06acc781a5f0dae7d18fcedacf509d761d475b95f74cd0e91fac6748de1e474646f8bf09bba2e759b24b84f7b7dc2d30b52aacb17270a79d59fc80dd7c2879b8d98c1ca3dc72da5a268af22f8de094a2640a4633fca688746a04b3628b1f27f546d2a5f61148fa11b7b5de2b58431bf6b150f2c29dd6ba96dc2aca7f14ea9928153024ab610c90a7ec32119320ef0a51246276065ee8862a37d88bdb1e711777cf105f69d5a6e4434d6a530eeecba9dd46a99aa946c434580175c01fb19ce90afbd920d974ff3e0e63c56b44c9bf3fc29e8d28505e530c4ac4692ff2d553560a21f32da346fde630b5ac23deb9b31628b577e6a5ad7b5525071ba1fd937ea79fcac64e6e538923d0cc854184c68f743611cd9e503b25591453f5dde8f20525f07dba4de2a48c3f162eb98eddf93ba2143cf816f9103a5e3d2f5ead5afbd01526c237f1a840ec802b65b1d29259a0e8ebbe61174735a0adc823bed7fbb5c7c26821a501682f932f37f9d4d54aeea48de31d6f68e2b1418edeb77e247428d373df236c46c97a67936170895eaec130db23e389d3738c0348a774045c6d5cda6fb34ff488742852f6d2543a3766d92d18d497191ea2ced0254ae1b9478d5ac5ff0b2da58e11413b9eb22c4e26193f818d1dc2861216808f6bef8705ac7d297d6b0f46e82247ce09d428812df46ff9168227eb387778aa2863c0ec5155e5d1e9fbe921230abed5a6e05cda3f691211d23f199a97156f528255e29a03086b5bf0f7be47c00f1f61f90a77bfeb4ca78e9f0b1c580bb3a48287898019858ebace7ca6b93e25f91277ea9aa1b89c67d979643058abfc1bbe411e46c0ef3daf78327451ff90bc903e2161d7014eb7804dd909f4f41ed21366982fd6caa695324e8fbf40bbc4eb9c4c66460bc008a560aeb675a01936f564448da37fc7c6f3e1e3ee47bb13631ce4e34f817c056fcecfa219927bee7dcdd6ff2b608adfd5c182e056f30a2ff4b631ace2fb72f9099a94d10947cf9c7ac33040774f3f395d66deecd0ab7438ff214b4f299a37c4617279e58e7ce24ab53d3cae7b58e5fee54abdb0635742560dc4fa732c47128dfcbc4483b019fe21b7a4c0f23e64c555f6d5e7d317e0bdb0a50906c0f2eb4a7c64e1be5578076949076185b3c8592867176f23fef42c2a6f4f5736e0836c28bb204aaf03ed2c6be92dda539a2221545cd0803ad90324d4ba93175378e7b4f46fb85edf3517714e29b279f14f53a2925ba970f50b4bb002bafaaf253326a9f6c3b4841592ffbe58321da5297963c6298c2ba71a3dd4b9fb970b8874b6493575dd9d261bc2acfcd3 +MD = 8b459f49e3d8385aa0f5f64ddaa14d0af6b394effa3930cd2760c0ca + +Len = 51712 +Msg = 92ad569d739b1600a343b985058ae15be02bab36e1abd7e964902937efce0ee6ff82831608e233d1b774dfe37a7f03ec42c0b7b3885dd3bd8e1f561fe7db099039315fc24279a0f319fb46bfb65ea838b564d53857d4c3f6cab7a9d8aac6a988c724b24a2949a58d513eb6bfc2101666c07fcf6d58f6efbba0c0e80b407837f731c14455c53889c7e8a7f78ea57c959fec796bf992ac9e3599a2dc5fb2d8fa040072dc8c1f2f96ca659dd0d267896f0bbfba72850ddf198c3cc54d7d07cd3cd8bb9e44973e1712be50870b341121ead1c3aaabb8d275a9e71191030c4741439aeaac421d2ad646cb32cf6e5baa2b501a80b1e03be858946ea16fc5b57a1b597316069fc6ec567a1791dcc2f03a8ee70d7d38d7b5576e224b73c55c20a943c48bc613223c8b7df6cdf816ce9aca34f8d342a559cf28a19da310fc91f4dca0cc09823b95240f350113ece55c026004ca9357622e3162d74ba1fe7d2ad9191cbb16d2e6be298165e411f7b132cf07e6a77645d51e820dfa766ac7afef796a9ed7d93f7c67f1e8f5e8f1a0e219aac4c2d5a49368f16a32f16429f2f9aa79d60f6a7b506556244ccc52d86fe0d93ba1809d44c9826e93d7a45d0408c521846555ba238e0a546bb5d46df0ed143a29a509477e6f8a5fa207fbab23907a1d40205910fa7fd1286e2cf48061a1e4041dd8431b7c0eea8a42c7de95af127f66550e03b328ad239cd4b814d25314b9febe431761632d09b719213562d0173ec46c383cedd4a0697645621cacedccfcf2b5ed6d605e554fb0cf1ce85bad261eff2da4ea0426de097f6b31f556575313a6a9df2e61920d243c0dc0dfc86fc787de3f5cf64147f16d7feb2d8518ba3168e2431f40ac2addf0227b1603f13d82e12b4b6849ec5f61fb3e705eb53a3eec61702bb78d894c4d1b2bc0253a1d40e095acf8ceca4d95b41d83a0cd6e030a0e681708aefc4021e60d1f84f66d95a068092aef9860ab12743a17238196bd471fe49e820d7418d02f2fc6718f85a284a3a66cd7cef550fe28b9c3a28216ae1ca53dce42dbdf5a81b1e7e72dfa688a1417d43c597670828059044dc5d9d71eb22ada6ff020244f5ef29e4c603f00957a4efc601d9ab88ac08e827d338dc0573035254934e52b3c8c7cbdbbb364330ddbd084a1ca41b7b0e74f9b1d95a6b8a0bf4f8523b431dc6c36d7aafdcd73eb386223d6c70874543b1d25b7f3922da94087fe62c61b0c1f268289cfda58730f6034d1589a813a777589963ec9d3297a80afcd25fb0f7edcb1981c9319f96d87cb7c6274e2da9b08a4542c9865ffa213a8604134883890fb56a1185d845a683bc1605c9166be9ff011a56f2e8fbfa05c00c1e4f8354049645dc50397e1236c138c084916efd34f1504a5e66611bb2c3dcffb3dd9ccccb2ff0e2b67a8f9fc82f7739db06d45c1b260c47c19a9b29a4d9e5f35d4401387d1b5b0fccbf8948bb0cfbd471afd3031d0b99b51906039050c67f6983293d416b06c8d5fb8ef7a7b0083b32d0e2e78cbb209cf4cd4f16fa36f80dd4cde3bd524570deb7db5f572727afb9d781468e4365f36a9976cc61c1d81d15c7860a1df57cc81137e4a724518251fc34fb4133d1bdf2a7157e045081a4742ba44412cb95719ae4d89ffcebb1709d86cdb77974b213bcb6fb7b9d8fa43cbbc41d908432dcd467ee1c65d719c142e0ce144e45dd6f17a03ebdd7ee6bb401425375f3d50016159d8165eebc3b0ba9da46bb184cba632a4b92cf1b7d714b82a67e5fd69bafeba5ca33579312dbfae5d89504add4a828dc2d57b1cec12ca53166893dc13e9ec8156c9863eb815909b76a1d839794334aadb3e2085a601a8badf128924c345935d503151d607e4ec27f1d64da3e01c8230f7de63566c0b75958d4b0efc0136baf751c3de69a7039bfad50ff5b3983f35c81e9c8bb4c798f88b29fd6b8c56242bf66167741e1ed865bd2a341a8e2b1215195960e2c93e10fa45b90fe9fd4977ac0388055d1df6cd1218f82c025f21ffe9ccaf12aebd59dc436b4869ce77639706c6cf85df8fb64969b248e1f54c006c7b88299b38b8a0629ba4dbf362212aec01e63dcf439ce7b43334213a3d7d52c391f6cee1c8e19c0bca987c95ef2428df640cdbccd16b107538458c1f211b9e6bf4bda6cda660d43f97f03237bba8e5d6f9dfb062d025b9f6408e9078e84e6dcc6c86b947195ed067cc5406c10fd4e83a8608c47a8af16b9e13b7352ddb3d464ec0f910386a0319e92f6bfe1b33d0b974d42e1ffd45f8acd5786783274211b159babdb286e276362f89de252d6fc5e0eaabfacad14a6107033946834c65f13655207ba71bc7e0af9fa15480e00bdbe506d214cce0e15501901cfd3c858b065eaabbdaf8dd61680da34176191a4e39512f13232d1051fc24e5ea34b6bbfd78b0c05383acb6fa37d7a22fecf7c48208accc34cff54be47df7686a92fad4046eb500b01dcb8dd8749504345d22c7ed6f7c47fec22d78e001028266c00fbae610f3d099515e494448d0301872a309d7974b0739a1dd7f8eafce9ba466fd53eb87f499d7c76bd486db0e90a3d281748aa7a074ad170b4836b0e21cee2bcd895dfb40c43326fd15e654da8b9d25c4ef4dc804f621cac1ba202bc66b0ab7864282935db7721719f4acdbb989cd1575616722fef55f6206bf934903f2c0b33068a478d5dc5f41c9591f9a35f2fc489ab421dc16d92d88e33ed9322018dac7d4e209d2309ac14d142c88b6d52ff2663ecfc31fd40a54e45e20380da5441e9a7998f9c8f4585fe203552f5a21a67718669a9512c1f19c1d824bf9021be056d52772be82ab8002a99cbd5caca2c053061cfddede64f4ccdb54a8633b0953481fe6589f29dc797249e94a57d4dfe54dd767e0e8aa457caec8de1fc0ddf705bd21bf32e3e510ab776bf2e567fb617e2f33502bf99fedf2088a279956136d5e7c83b9e8d3ddce7ed9b7be77d649aef1bfc4ddc65ae5e3bca3c937fc6f03f4c64fecdd62b73a9e5a5fd455e6eae550a8c62f189953a3af44472e173251d513a5fc043289d72308a7d36bbf1cecf8cf090b1f098d2b01daf0bb60ce2144b253634c74c0437ac195cdfb2304ff23a9b17e583ab7882c28eb2ac90864b392c23b6807e48f79e93ccc349fa52d79d921806e73282a739c406a5937cee2ce812c531cf5fba8146dbb3644899942715487c34125926a37c470e0e4ce594f5c5b1923e8dd6212fa4c66596680a549cede04035e362080baece1d4355652b34466b0343289c1d515ce66bf004b744c7abdc0c72f6e7973e65cbbceb39760166eeb1a0d63bfbffa4b3de3f07cb3ac525c39e2971b95464ba25b2556c6592c81c2317e36e448048786df04734080f6645c9c93fb8a722e10d53247f5d6635efb288205381cec3987adfef2cfb67af989622cfa7ce4cedacb692a4a324b7e9d8d8824d69a727206ffa8e0d58f44685ec9563340a19271f184458956968e72913eca601be450a412f95fcdd4385414cc2c20f78cf3fa231c41519792a80507e316d67ef99f1d48067cba0f17544d44ecbba9c107f985ac030c759e27f019043b1d94c69a5240278991a1edc76a97c1667dd7d8d83b9bd34dec99e43df63233405ced8026852309443ffcae0c039a53e17b93862941a561a3eaa5b2fa43b95a9bdac7f3c4c02db6de8eb39b0da6bdc105bbc6111f94091fac0c8150895e1442f49f0c689d8cc6f50086aefcf3db6bd57b4756c2e4bb31d2115c160610cfadb3f1b4a227d970568f5230d519e52b0955eb272de1a03e834579e24a1cb81feb753d2073789ff5454d7b9311390c1c000afc6131b67aa6693f8da506d9a8d5354f7eeb65a317a1fcf524b748a59038b8bc57ff4c889b794a87f5ad33870979f50a5d1e62ef6bffe14ff4a563a698079933a40865a12b428ee65802b76c0293926e81c051a6c0945d2594644b824c100c368a85634751869c245ead7cd0bcac744393d9190e41ead93dabfce681d5db778fb17d30c335cfde09b0b568fd5e4b03513a72a46f1388bb60e2761eed5bf04304c2f8b35d00a4bb5cf622653a11f9a7601f91d91361f66c56e1d9da0c05d8d95e65ffd45cda8e9be7d7fc5acefd3dc837e941a04151bd55e74f2d0228fc1a9f6441987b0aea14e670fc4c2e02499fce9f4187e1400b64dddbd57b7d87683effe0ffce90ad59be05c00d1acb1e1ea72160cf6d8459b8736bf91aca357170cc609846a6fb8e4e145e9fb16c186aa3de29423afa72d48072690ac72211303c4d2a56bf2aa4f5f29f5ad5904cfd2d01cb4e0d2b3691f98aea3ed6838bf90bf549c4e0126174296de6612953c162b15ff7f988492aca0fff635225f70ed549c34698fee6535174e671dc64a2d32f3ce6e8907c3ddd066006630dbfcab28d33cdce0d7ae309241c85c9314e248b4c17bd287db1ae572b32c874d76ca5800a113c688b1bb28ad66a7475caaf82f0a28a0e3f26ef45a122ce6d1d18f3307e322b379d7aa8fbde4da6d8fd0d4f640b17dcfeb3f5feaac2d47c1ce7381d12b6eec8e7f343ea650e7318dcea64f670e29457b70e50a584c22884fd589fb2f430273174f44ca999212f08a5c3366b5180024161d7a1ad7baa052d39fab57a7df3c3af0528feac3f1f68bd5e10eb77adea47e323974fdf388155c0f855e33c5607ac88c216c1bdfe1108802d5aebe22d2a4d8526d5c201634fff8561ef8fc22674c804d446fea27efef6993a279d747846fa6f921962dba41debc49d5223d29642016d63401b2468ee1a50ae026bf4374938e88eec9737a1f201c5d30605354e7a3d09968d820b64e95cecb170bc2c1138ee3942d4c9db05d629cf2c919fb3f524662296b4991f19f8a4b76afbf9e2af1d04abd75b609076d14b2cd07d5713334663fe8b3dca283022daf7022a88dfb8ff61847509c41e9cec4f22e652971fb2ea1ce59cb17ced5070e6f5a185d2ebd5e7ef0c43655d4d212e1dfa9796c69d17177921f196163722e8b0f96d953fcdaedc958d6af794e5aaa09dfc0ad34b560dd662f9b37702ce4e95214b91e1384feae63b4d1247cfade248b86f689090123a2ebfb40ad9a77a7b7c1f3233f22337310dc99561de776e6e30549dd856fc984627789b1d466d0351a793f87c4e694e2d5a28ad8243f5f0f9605acc83acf7b2dac975f61545bc307a1d66e3937f735c84d43edd9bfeaffb29deb345901ae9269e1d9f0d195ffcca9be67e3ca00da829de84f46dd5980f57a6b4455028283abd392adc27521a95995f0bc54acd7e6f7ce47033a457987ccb19eafa34735f533f54f8158de801f0656b932257405c321f3da2e1cc4a865e212a86b93b98469a7496903388029973f66a867ca9212e58d89222e72bd5eb1c1f809269abc0667824a8f91c5ec86c871402ecbd89997d49708bf62e09214d208ec415f4cd12455616313bba5763019586dbcecc3fd0d06cafcf289db05537d1359d1841e9b76d9a13da5ff3bdfbe003159e339113edaf2b5c07c01b679a2e97deb4a23847d666aee34b6cb1d6b7923a89f324f44d18a2ed41dac4927518bcda4fb0bbc12e98b6f84e2b6adbecc09ea3aa81a8dd347b321b24f13ee923f66802513b6bc4e825e7e21c226259453e8ca53ff1c734113be61bcef33508b95dba77acfabb29bba481d214da5b132958e5a712ea89e12c8347560789b2d77f743ba22897b2d8f03d0a32fff85df0e2362f13e915f7cccd79dc34965bbc3dbc6472e98dba59bace1a0c69a52770dbb701f5508d1a18de3c452d1e45105b25ba54e8b5a20ab6b59f600edfce0d9db9efe1bcc6c6a0f5fdc010c27ada519774bf6d236f3030d4b2a93a99fc4252eb73d3fd0edd5b4f9412a30224b11ec5791314d6ad7dffd3b89a36ce3428c89f63f1ab7e72fd16d1ff062b42da2cd91508ea01b80e49d79c6c538c4467cb2a9c0b1bbf8b718ebdcb3ebfa1f96c52d3e84de1cd3bcc398033f7c7f3c5ba4d2ef0edd9564d92f819e857274d4e638ad3e74ee1c28671b7c13f61dcb579b6169d431114b9ec5da3f2cd5425766a453ea3ba15d026c2852a6469b27c1987e28e3e3f7db2318f5af810253ca065749dd50908aa9842168efa2f58f38e6617c61edb8a3b9d045e125d3a9618826395f0b7ce79131f5eab168eebb42cfae553eb2c3acc53bb7a820c3b3ac8efb2b6f5c84bbab65a4fc2a9a450602763a8de61d82224aecbf6dd23d0fbd665c918a6bbacfb9467870eb537c1a75557a2809869156661d7ad357368e703d712af9c7d10252f2634a046807df3fb93ecf0695d942b62b9f10160867ad8bd0479a726811bba4d36c3afde6ca4c5b5e38f564e7309a17cf4a1cd5e5c812b8f2742bc9efc05f3be8dbfbbbebfd4bc3b0be8da1423f1ff1ed9911b193da469e30615f3ec34f558eaf3cecdcec13462f6d39e87a4b574ceaf3269f278730b19206b9856f8721472392f98ecf6bced3e4e055a62e671b99597c5d05b6345dfc3ae1c76ecaafd89c8140bc6201ef626d8ac67c375c29fe9dc3d5b6f5cc2fa48eff5e155bdeb1f7de2e14d00712eb808b976c382c721862b2c0bbbee007ddb6d265d84ded2a11e184909beede80e4abb6816df3e60e96fa80b68aff44c7d3077ef4ecbb832b6438184f526368ca6f4666df283a04904a28804bcfd294aa8418dd330808be510d6e11b0c4d8366defe325174794f895867f29c706e3701e755d8596b6901f4991f5f97b5fa7b7c9faf469b0288f428cf060e5deacac37923b58009674fc0663765247f5af7c6d8cf51cbd30677372f50c605ce93d978bb42aaac6b8cf97043d4f2585b620a0d82582ae882e70fbfa5c2f1ff77d362fbce2e7a84084331ba94570c21b435fcf8802083c62f0d1835920fcd23e1132ff7bacd6d3167f2bd4660a8fcaa103b942edc11a38c62e05a40fe1ea39a93b906128809cddb100366bbafaf0a19fadc9c589e12d463a3c89c89f2d7ba8c152fb0f43fc8e0a98cdcf4c189547d97f780da1dcc0a5c737b2da8b875225c20f0dbf546e7f4f0c462e72f02f77f9f4b918f182670e384e37177447490e7cf7eab279cb0897443541a8adf230018b65e4f711c1a918494dc0e0e39654a0e5ccfce7a6fd92b3021803d2fcbcfad070bf7b98eaea238d5d485d85a4e34ab7f4b3be23b346ad810d470523dbcac0534e63f584e98666cbe8b0759c44d89bb23e4e96ed4b40a95fca34de11c7a6210878e5eb31aa10d3527038919b2fc0b83e06f02faacb7626cdcd53f7233cd9ad6e94d7b535890409bf882349f8d25630a9f33ad0e2b051a6498b36d8eec7dfc604069bebe722ea6a719512f73be8e395849791333b965d985188500bcae512fb5762b507ece43e86072b8a31dab003476c4895bf0bea047d845931f85e212dcdd71db591bd697adcfecfeb825be42fc6bfaabaecea27e0d640524f370ee88aae11bc1001bf0f19efa6d6d95145e1e3a3fd1273454cdc7d3324181a4053b7b42c85a256e08861a62ebde4b6372f25a96fb3344140aa8434048e2f359cc31b34b9a184ecb69ffdba2aa28e149c5e4bfb7a6074b777899bafdb0cec03a4e38f76e5f3c853ec7c3fa063d317770979b1546483584842709f3b272ef307012b9115320ae12efa93a3f35aee355006f7f24eaeaa437649e61b706942b8d23a01ac7a1e5563d0797cc74d80525c220d6f8b34c923eac3e6507cea1206c1d7a81c5e200b41c4eae19e15f9648de08f8536e8c134bea2b3b0565002c1d992a9e3c202a1a97e88c0bb8e1ca1881f86db16e4975e81a90fb8305e1154f949afab75995669495a24047fb347b06b75a3a73aff137730919653dede5d4b18c57d5ec618b6019b632b2896b423a07f3ecb6659fcf9a5b1f6bb19246d806fb0db70565db6ade4f03802afa8e73d1c33c962bb0c5496549646f27a9962273d420a5d14b4f99a9de8374f0c2ef3006e39a40df7ba9c862e4e10d0eab682be3e5cb0680c64582896f3ff74b0813dfa30f15d21befd4b557d59d2eb0bf415a1ed618c35bfd468c45aa3def85f484ea6eeeb6342734cd760dc3a0b8530eab19eb4e0fc4aa19d91fa7368746e4b0c9b73029844f4b711c754c57f39540bf2dd014f5b7f1b54187a375bc25e2b1616ab0b0678709cfcf4a18db399dabbffb50e55f741832c39ed78078e31dad3332ef3bb851c84bfa75dec98410a6e417ea9ac195733a701d58511f7854798db449e1c20e8f4efe168b60ef0d84172692b395cc7e9926910c967de63db6416c7acec8ac7bc82208693b59f13f3ff75b767fc96ee18fe37fd680e43e8eb27b31ceea2a61c7a44a533cab5039e2e64e6a0c75bd1087fd7920c33f0d9034f031c4f8c49149bacdd0c5d603cd2ebe24253b9cbef9183989f15e1dfb8042f8176a0d408684cc1ce8bb48816c58389a9e83b66e8105f0bdde52202adbc6bea0cf2ff3ee558c52b4a014c3830e7abf40ff70c3c9e76afedba2a44d3408666af4c28761495c30434b9ae21d2510ba2b76edf44af718afac5d7eefcf81aae8b0be967a3c9ac0f807a9812d40af9aa1e5051018333e3b5c6109193c8d59e8d5f7c4f3106d29ac6c0696fbfe1369d6b653b512e366e778f984a91c926f06eab4a6cf8252dc3e4615a8dab05c7e9aea81de4d985ecb39f80f7f032efa5dcfd90d27a7ea477121b67a563c4a4f698cfe8aee974d8f4b7ee325b9e0f87b3ffbdd69e114d4f71519252376866edfbc853b5aec59d680ccfc61c49a07211dfdd31d4e3cdee86bae70bb99727ec6155fcec8783e5cde3937fd98738a4252e8809fc247a0cccdaa256c9f63b0edfaf83bafce6c4e680bc075c7b3baf15733e5aea7f3d975a82cbc6356fa099a9ab290366f75bf8345051f6da2d821370f6b1b7032d98e2338acaa4f76f314964f95e63958e4f844ba755e06d83031c432a393af899bed1245f67bd013b30b0ed24b012db0449ffb9003832ab0e2710188825351f5637eab96b137d076617669ec7deaf8c0bc3c0f8f5698c071166a54d8b1653fbc56ca54f586e736e826de0f65d3a784d07558e87f17a4af64f6a226ecd7d062269e5876281d92eaaf2ac96805f442b728977aee28edb0e1d1a7a3e08a9d9da17d63b07af81d40d31394 +MD = 48da24405d960eab467ea3a818606ba7c8b8ec43998a2232ba766cae + +Len = 52504 +Msg = 9f3fd65fc8ae0c74a8f4c6e1d070b9183a434c722caaa0225f8bcd68614d6f0738ed62f8484ec96077d155c08e26c46be262a73e3551698bd70d8d5610cf37c4c306eed04ba6a040a9c3e6d7e15e8acda17f477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2b296c2eadb7d25b3e762a2fd0c2dcd1727ddf91db97c5984305265f3695a7f5472f2d72c94d68c27914f14f82aa8dd5fe4e2348b0ca967a3f98626a091552f5d0ffa2bf10350d23c996256c01fdeffb2c2c612519869f877e4929c6e95ff15040f1485e22ed14119880232fef3b57b3848f15b1766a5552879df8f067c3e7972fcaaaea61f421fe7e6966e5aaf179818feccd7847c46c7dd40d5c70f4efca2cf5d236fe6de8cb5cd3988d37b5aeb9f7b6cbd4e41e43294bec2dc0b321320d942bbe78e4a71954bf40b3f290afc19d8881b2d87f6a65304f4865d2517d49266f39d5ed379e2472984e32338ae9e888b6892854b4ac88f61a714bedb65993a910b8bf0081c398996a44a9cc71046220042592b62e554d0f1fef569f6c46800a2b20d05f3da7c42dc7cc712a0d7ffce7f3ff989947051fdfe22b0c43ede4bcce00fac055e5cb55c4135e2ed89acce744f87f905a993c8fece3bcd397a584986944bef580f4aebbe0ef723954b37bdfdb941e10968f5c0bba970d52f74dd6a16068d5f66ce4b27508ae91373ae1fd34f05963afc9a3f411bd9e94f0ef213b7647efe8297650770faff3439ed790d18537bad8a4607185409a5cfc33dbda2375844c6e3549a27cea4b3ff1d6c76a895f162af5c4f7729ff6a544ab9269d33f3db9f0c070337534936ef7348596b99511204c3357eb21a4c272f81ba30596ef1d3d9f8780e0232ea98fbb8411a2187549ca7129f3d7f9243287e9d4dc3bbfa3b2a38b4bddbc46db8b31ff59019601ba77994c321f4a839eb5589c5fb478980d9c605655ed444abbb6da353bebceffd518f13ff4409f3b84c9697224b248ca7d1918736e35f4c95fcafcef9526d98d45ac86bee8ee529b76ed4f1dcc5c38c182d71084dd5e6a2d38262ea0fd4932148cb0ae6b789f012dd5af5e01af18a517af550ced2bcd00f0c566c3dbfcd955303ab3fca83bd9275d317e3aa0458e2a2762f1522ee1e855be87eb7102fc4ddf6aa024e6079b1341b41ad8497c3813448b4e5a84cc8856d4e110429aa8741d2d2e8d91ff0c2ed3ccdcd25c2f17ff4e60cdb1ef1948a78f0b02cefac55f0ccdcae62379ac285f91451228684fe5f3a62b493e3d74259807648e448275792ee6354c324a71deb5e226fe6d8b1088cda0e08863b459d602467dfde1681f9942ecf8ab1a82e4b1ca3d0f1c22333552e5c54d25a2e20eec4ec2b3dc561a4831e158919d4cc17923f50859d5d70f12d6c499bd8b7c4517db0602a2a3f32773d5a2af7c9d6974a3b7ceda83d60c6d3da6e284ae34606c0924a09cc6ef490e26e6ef582615c12af8dfc03a397722ec1a35d81cbbbaefb5575ba6e7ad08e83cd6082fe92ab11432fd2e719dd743cafa3cf61dd852898abf96d29179a1ab2132059bfce906d9a34b05065b8be9b655161a7a1c2e0f2ac1f92c4bf8d96120a49c3a24cece270a2ed1b519c67aed6961ce47346bb44e0915e09c0a357d4813e2c9f8352e0f27ccf74591bb7ae15eb7719127b774d19bcf07047aafefdbe2ef6c49a43f9332759c9d351f6dc155ba3af4fd4065d02c74c705e33caf708bae3d91a9d2c686ce8ce3912ea2c3425e8c6e7c7135d1f61b659ba2fb467b7ff32668f359184c8139fa4c7370e04e665251cc687b5c9e7f24faa75ebb4ca656a8d80c11e5c9440b0b3a31a4ca4c51a5e786cf599a390da3ef8094a9b1a3c2ad233f917dbe8a4f9cc8c93db5893b8fa964a801b04c6fa22cc1a3ce146ce032ebd8c9938761bfc1bee923cb164c525ab97041ee1d10551e7241e0ce1f4b76798b60028cdf6dfe3cd9f2d664577215458e90c0fef0747db50cf6a41f3adbfb29042f76d7d641ba33766c5d83f998f8c2712cc1becae76e2865468a3be7acd2a40ebd931f1c7b78282cbc25b46d2f716409caa0981cf79acb13b7ff9eb62ca19ce380e3cd0279ac9d6568cb7022b413acc0f10a355713881f70d160d216e9cc562b1fe56c38daebf5a908bb41cab5640f3f165af119c9bab835197a509a52c7725df114772ffdaae370027193c5b1c70dccc11f65c588a717b8f698a4a0f62763e49b0d6848806dc942fc9b009417c12b0277c40dfaeed1a0850f4848db4260cd67841cda22d1a929aa3d73f2c675e6d968b0e5541a5acef511aa05b7a9d617f15f22ef273f8ff1871e6bb8f4cd5abcab77f2ffc2b46af387f78d5d6b8d1f9182241dd0ea0f09bb64080db68129249713b8b47ff4598de3db9effbbef058d81f26ecb8e8d01dd7b42ff7a19226a622aa4937be2436a3224528097adbc93be4dc487c254aac889c5968d574d42f191dbd090cfc34a76f6199f34dbaf5ec810796b1788efadb38d0ef10a1bbf7d6f321f1a49169f63f058582444324d40032289788685ac106355cbc52e4e0c4c23d1890424f6d34a76c744640741e3fae572f25f6d5f167d588290954254a009bffe9e00acc71b486ac182d116711009ef603892346bbb4ef381e1d3eec61760b3f7c2a2592db3f85ce5781dfa466dd771a8e0b36432070fd4d224239c28dedb807b9b5bb29159d4cd81b88d1b4839fe2c8b7f258548862a6d01fbe6d2d362c4a5e88cbf317859682d54b8c101ed20e860a6688b0025b5393c8fcda01b7c4fc6a4dd1b2f5e695f2cfcacfd3c36ab9f10ce7831367d4010b6c3da1de1de89f25c0da7cb3ea1dac78ddc18fa51321a2111b68f7dca453e252d838f612eb472f6ff3107116fa4531f151c1724c28caf4375c93a82b900566f07fbfe2bd905cdda2acf498234ce58e26d6d3620f29ed172976727f485374f6ac0add502937af0f859290d92209852adc12fe47353f1373b0120d647a1428f84f2197259c06c92ee14eeb1d5a58ae6ddead4a070791c37093d86a400afba8d6a16bf74a5f2531a37e870d4a1462e6bff350bf8bcd4885769c6f93f940317cf66a9104a7babd6fd524e6ff4a984eb888e2a366bbcf8be1ed9180907964de2cc2723ac624f4f60c2b9b12c8032e45a930744d467f5483603d3bb267a6be2940a0810f46aa57f78f0faab4705f1e6f431f71f767c0a65789ce62ae226a963b41fa5eb88b1f29e980e81b740045aff30dbea148d2640b30e408ce1cc9ac333cb737d2dc9d6db3f3681db4f97f9c2afa8f73cbe98e55cc36fa5446a26254de5328bfa523857a3d3ecd183eecf54ed7ab52a7b981a3793090521893ebf749dfa81efa9f374a300ff23a4080f46a42fe2fddc331b91aba816775bd7d9d8f757e64205087bdf475703634fd44bae760e7adb82dfc39faff05e2e9accc6133bf03afb72927608c33aa3245b750e67390da4e6c4fe2a84b2f062a384c48deea0fb5b069ed45c61951030ff4d66d1f17ba1e3a8090aaae1634ca66e904b9bdbc4ddd90c104aa97a3b7c4f5c9c2630ddac6fc987c571ef462f59abf853ee6a5b161c37644d61e7c334d340b4de4fa59c49cbc90e90e0422375abd5d9361983fd234af8b7ccb691ccffb9d7a07a2faabdd25a64c4e1c25e09d4b7d679bd5973326ace9f7f04c522182a9456980652aaa2e4701f133e949d49db020062601ab28b5b2b8e128bfa230513f75013e9653ffbeeb17aa20dd37a93e71ef61bb4f9cc6882f6671ad8e21f446a5756acb9b3d5295fa2e9d9e60b905897732a1e22631b6a60939d1061f971268c38dcbafdeb04abc5a8ff234da959184a831ed23ee33a0172a7a26bbdccc35bf81054c70c5748f3af582d26bb394f439ed336e07106b2be478709b552c880354c8241798ba50ca17b14e65ca537ed6b02f824b15f29e0014dd65555b7692242e7e3451af240ea35c783dd2d9221be1f05464add6fd97c7af409f7f5524b341558d7b253b6b74c110319542208933bb014522bcd0991d27be88673fcb9db302d2db42b9c6f64bcd3bc49fdc28ee8d0cebeb039f8d2ff7c8489f05bd46495a0eac52d035d72f5a6ee518a3c978baf27db62d517f9525ee53556cc1234e906f0eebd96fc2f77d6b4d1717e93098562ab56bf252836ee5ca70eed7e39669dabca998576588ac484411d9a8b83a1128fd5d122450d4a2d553c619c8b240218f0788bab6fbae81f9ae6331b35a0e6a9a331db1aa9199b95f50fee0277749fd17195259dd795cfbf671eb292115d62b13939c526c5efb39ea8bbf4bdc7bd985dabab07db427bca4a85550c8d832b7ddfbe683fc52fe22acddcab261d003164241b14a2f234cf30377223b16c1f8db07b9f479b844bb3599a2d67f2ae95a2bbbb2c8c77612322ca0cc9f531cc4b16a31b785278d2adb5d89a077cdae10c73e7896c5d05b691f8d040d9541e1caa38be35c613583eca7c1033f7444f62e91780256710ce5105c3eb6a4cdac6db91867a6104f4aa272678a8fe7978d09290100e05894241cef31683ef70c3dc97b5626013b190ef3a463dfb500a650efeb5fff9a06f6bf08efe53325701d9cfcf6a5ef7d45852b7d6be2e9fef26a34b15af39cb9c75e86b2f6c2c6f275c7700e144feaa0975c4648ad2ecff126abe256600400c402962021ed0e4a2d70d16108bb9b41f597650a5d548dba17023102e6e4db52432164375dbd12e65fc80419f1d5d01901ae6a1cc34648d2f6efc33b6acdc1bbbf8b91706f4c16c30fe5283dd149379d4e443127826da63e18562b35e805fc63bfa8e5755e846208c52f0578b1ff18f263c284d1a3aff127059d2f996b73d471cbe027ee324c3dde090e626f98dfbb43c88e29c22df66fb4432e980ff8ff930d6b9b2182f48bf16d64ea08cd8ed167b60612e8a328296a0e5c6f2d3e99917f61284199daab2bc4dc5d2bc0389bbd6573a4b58b1c9d30285cd8cab8cf5511e292893a589e5f13ff547d395058c88bfea32aded8d493f3f2c73da6ff69356702cb17ee2675182be9fc4a7c80d71c23776e20f7997412590f77156accb53f7c283258c6ca07df5bccfd4e5d1a5aa06d1bfb0f6794a3224cc993e780e55b7d369befd6280efdbb8bee7e1142e48c5a5231737f96920accb466443c4f1202f77ea52b197db8ffb5a399a81a94a81254b800fdf6ec5a5117772fb19b3f1d52b43d8c0ea72e91b4d48b13a3f1bc2c979689d1c2fed1b61f0c7e6c038cb8ccf5bc5999bf0aa161c5202ca4961e2039c126abecea1ead6c1cb1b165619722e99017bc1467ca40f0d9a16c96a9292a96380e08999cdfe845f110f861f445e53acece4c452d6d72059960342f069b410da556862000c7ea0946313caae31d698854e7f3733a7d9e6aad646db9d2fccc64b0040fc83f601b80c21a638657a8179acd6d97e8b5822ee5bcb5fd7a38d2356400228adb8132e4710ed5573e786c553adf6522eac702893f6e5ccebb5ea7e3d53eb7de9fedc3aba6d26afe196df38c2e32d97bc2988717406d60c6c36c023e7f11ccf55dac9ed9e5b5df42615fc5253f6fd08ab84f9840af5ec9cfdc8b6cae292268b65ce548d7f75f3e0a5c756886353e53371315be6c55eca0d04ce36c9b9d199309e6c14a0ca4798f3d54d86619d846696a1d117f03fbbdecb05c9b8a6da19d55d641682ddfb3abd8c58faf4745f0301a0b1c6c666d6779b55954db4e8cfe56b705b60179baee9c23895623917144a36e02594df81262c903b27ccd41617cedc07f8db5b4041bf57771f05cce079d486e371cddbf5bb355dfa31b96ea52e20a792a0eab6824035ddd65a781856ec3c72193ad4342ae24c450147b61d1c8fa54e8ef810c1c846e7d5b4dc1bb3f0e7ec790fc53a809747bbe5fede2547f2c8a7417b72dff598b24fdfc118731834f96f0c15b57349d1681ed131699977be45b110e685bada6a1ec84c59a410cd999d2ecbe99010e85fafef67478e8534d5a35d4d4eb533d8b2e8fbac0ce3773c954fb608f9c995f498aba848af916b07ef4df6570295dd8909ad648f496b08fdce8d9f73a4e674e722d7c3d5e826dd5951c236bed09c1a63e4e86d669dbf68799bd3457c996b304874a0dc9f7fc33eb1a39c78f5072c6ce1cb06a0b28834f84893bd428435bc4a9104b36d15d4db11996b29478a34eb579b3294990387704ae32cb8113b187e3649597bdfd995f2f8890f152ceee84d6ce8922ea0ca1a05c2c1ed302bf1a01585d9f966af4b218f55f905dc93b37fc71f6280116286ce5a127d5bd20d686b16bbdb5b0075fb0624ac71e5ec065889ece18182f958ca02d19c6ddefa3fdfe7f64ac604d5ae59c2478e8c35c01f4e852355ddf152fdf45620e32c0d353de88538a5127d52d2f7d46c5e906bf52916000eded071aacca646bc69206cff7212f1526d592b046e45baf7af370f07ce4f6903fef18a5d3f403308a0f354d596ef8ad805f29466dad3e49de2d88554794b4ea738b98206d062d99a1d1d7b43f6bed03e01875006c322ffb3bc0d6577a4aa2f6d1eb11f242a7e78e55ff736c72c315008e28fd440a1a35add7d3e25edfadc79da0340a831a803bf7ecc292ddba1c788ad1b6497b0e0e5947fc8f35d33c662bc52a910c3bbd3830bcaf41bb6fde1f1f8af3eae20e41b5a2b2f01c561c5a1cd657b5289e82f378cec5e6a5768aa87311e93aed4f636bb818d4fba1cda30178d13c8a2148c083e81efad9154b96dec0568defe718e454bec396674623cff821235af1a5925d362f2744cfbac3fb49b0f76059ffc6f8c370ace07a35df0709c0d49b31dc05c1d4f6f28912bb6521b1e9fb49c25ee0068176da9b7e9389b5fafdede694ed285425e485b3e841ba70de136a2f702cee78577755adb98ba940947f74226000837ff0a2eaa89a74495197d74dfcac9079b50a1b26007442c8109fef7439de3f9fa8ffd729526f7b9a2aa5ddab97beb20825650b547bf6e36d8de3f4f21256d00339182c4897b17f3564d1cc8ce8eebb23302fefe7058994211f2837f89510db379804495161a6a7a368e14cf8d784d3523e2f6ee888737d6b2e35608daa5389c42f8bd54b97981c6b9d9d07f84cc7211eb72e315eebfdc8d322d316ba396901316474793f21cd05156acfa2932f00ce0e03f4e051166f9ae163ca01862a986c06a189dc34e78e8b29393dc8d2687801ab8a4922c9f0111e1e59e2caf96529f2cc4d90a732d022d63071b01fbbdf74e37bb5f59fcf632a79116ce2191bd364ba0acf528142c6d30db279f04f597d3f9c08eabf006a5704d643059495f55a90ed489197136ab1e75935bbc501b1282053da9271eda3b2e55b3a8abee78ee3f6b20ffa2604b477a7e1439ef7ddcdc95e317716d10d815d1630806529b7ee57df32e572c9fd28015bce638a4d8ab449425d69dca8090c40df7e9dfc9dac1e9c9195556146a6cd374b471ee791b16e8e14ff384ebd884c43876d17b9e26e259c5502e42f66a6ab01be75fa1e89f904821c416ad3da334a4f58247803bfa60b3d72a11c45f1a6ca48fe7f8195fe0b7d0ca14989d2c5b20d4a98cc4741fdfcd969329b8409af4d33f2518e3bb5b78ee113ed3f1db547ac9d1e908c0ddd64179607db18a4e46844ede900caafe67e2b3881464cace328ca03b1888d513ebca04affb63f053fe3320013525a6591198a8b3df598c0c430b346edc8f69bcccd3efd390b392e80e9c0755a9167e51c5152e12f414ae0c0270f6eb897f074ef5f9ab89c222ea711429653a50318b8f1ee2b433f748a953fd48884fc3fa3620f395b82124245f958b65ba2dbf2966576b8bfb855d58265a900c48ea00636ef94242a6483b4a6abbf0db76ae6a408741577b34859ab57db66736b978c35d2a3e6e8af65d5c17a45ac0e54b4ad62976d35f2b2fb333f347cdef526a4a8139e056d4d918df1afe9508982d78718736bd93df262dacbd93fd27a4e9dbfdceac39d921b79e4bfc61a53bd31ebec0f21ab40973f6bec09c0a064a04577ef100068f3bb190e73275036d6b0e336ea7ab28028aaa1763ad63e80bab9a45c3d2c9fb6905210f94112936461ca606089416f111bdee02bca1899075d2e31f6af180dd5fbbdc8e15666d8cd7d736f12d14da087a09bc331a6b91a5cd465b5ea50bc92ecbc66096fbb0d6798b113daf4cb848d0940491331d69f09a8a7c8f7e3250078235cb39b4b77ed88ee861267ad7ecf7dc0815098d260b4ae125fbec18738cd05a3620e451c92f083f783d8dfe6f317bad3ee191abd4ede50c383aed97e9009839456ded08a15fd9fda30cd094630428a6b0c0a6199a80739e29b020871359e381ec18a053f07fb26c0155aaf763f3936b0658c340f7416af982f21160830726d67297ca9e070d45ed0bbe5971d28e505c980085dc7bcf3fb0dc873cbea886f699a191b8718596f9033a9d88ae4f12d41dfe5e4a26887866568ed60efc0457c76dd16cf668cc9b4031067995073a4f830191d8acc9bdeb734d2275049317080da58aa000de7c88b01907e92b17148301ca0af60a307c86eb272fdaba2e60f65de355c1645cf5edcd0db75297586e6bc4b9b23d0ee554d932571f7d9c2862d12ca99b479d6ec948fb918d4c8635b858406330240772c750ed6f69d4271bacf6fe6ae3b9288e8718c047024d645982d709490d21a043549c70d2a784f772aff64799c78c72368fdbbf90aebbbe1e5e6683fd91ec55e17d0a612340f669b7dc4d9cd8bf4816e174105e00fb4deffe8b9544d376ba94d7b12942c3deaf1a65c27b628a23529329a445000a604a9694cad1c07d1432e98091877a46d9256616e2ee3d309c525379c0f86a2f86583e6b7cba8b5d02dbc0968e939c2eb8eff915ce34816e92cdf45c3a88d0e2c5ed43dd21ae09f5bb2bb66418dc0cee0665201cd4ece386af0bd24b7194f8c6b78053744a2ad0c9b5893783b0df61073a3b9786a765b83b39b299b216ab264dd397c9cb56bf546b7aaac07ff70c1d0cdcc9bbddb63d83dedb58a74a9a1a0dda92ba234cf7ea293d82d6fdb34be0b5515695f99c71d2eaf3fc44875f6c80040f8d6dfc637e29a3c266b42bb8300bbe874036fd4d6ad4321d252cb67b1e6b9d5f1c19c1c989fc788c8eb8e70943db9d112213236b11a01dbcde67a118104b5e4bd743ffc98be0fc1e735bcc30e7ded58164b1087006c4f245909bf3d0f29dbb58377322fdf465c2daad232799ac83fc5a909718e6aab14469e4101b1035d13906c53 +MD = 911e1c6a7bb474d7070bd6619b53758bab253ee67a6f5f855ed5795b + +Len = 53296 +Msg = 6606e10e7bc7e089dd68e50703582f15552c957d869c7b6b24ceffce6dd87301658010ab2545e8e476a41d999e9451317a535d70cd64469cd8d96ddf2bce05edba36cae633daf07e8f9e5a5be8060dbf8afae4664cc685b221659305eaff266e8eb078894d8be1a051df051686b84c06aca99227abc920f326fcdb085274bcce0977805a1a62a192e4ee849223b2f44f09e9cf7a9176ffa81025acaf0c34b05352124c224366199c6f53419765faeee2c8410329a6d30b1806696ec3c047eb46920942a86f9f31061a97a2edf49a2307133a96fa93eb2a8d314e8a0d15b654eff0e5ccb64716d2170f41115b799a7a060f5af1b600c3454db85e6652b488d295952c511273d2e21873d9f5ab9c00da26e62c7a25946545a1c4216b5d45c54f81a86939859adb4a5171e7b6a304d62db0c0359a0ef8d810d17d1e01f56f75b2fc5221ebd7643af30a2ef4bc0c5a245aecc4ffb93ad42490250add91e1daa1e34cbbded1d07bf6c48bd5876ead45f049221b114072cf52abe594e681ea2f51c9b90a2752388417a41b8c2936506e44e29aecf3957c91684b5842c23bd8168b4e8d6885d6d62aa67d047b617bbb7c270d9b602e2220c37157c73df825733659590efc7fc57312aa368cccb7a6b718a2b26f9f494e280d72b77aac10a98238c2d386ef9d88d7e72bb7fca4b31d0ceabbb95cd0cc805a167553b9b8922ecfc3cfa23b686785ca4f32e89c2ede4982997c0aab1c3f2280878113cc89071c208086af7690662514f2c5b1b38fbf92e1ceed8da4aa2b9b60079fdffa46f7da3e17f1e27e8e21d07c7aeffa8bf2df61f030152b8ea31853c33fd69f8d18e8d2f12f18239d8b20efcc8cb5ab6a7dc41c7868fccab32e8cb270d62e3bcb26646b0070015b19afece8cad321ac9958f82d411daa53597411203175af9bfd99f20d3584b6703b210c253ff43ae560ac03fa13f828afc99c2e05ccc462a76a981b2056103f4c4b0a080cf29a083e06a16bedb6a17dc44bcf6cc90a6a4e485c4c650c2cbfa2d591916907ad6b94a0d55eba6cf1bfb17c263551d4b3107b6419dc5a3a7f36e9f554dfb67d360fe5f1130c77e18efacdbea4f5678e8f5df2e4ea71821017201c93de1b77d6562f031b09d22bb353fcd7710b38366065fabab1173364f7bb234197756e3579d573f704ffd95d4a096ada7fa42545b0ff8edbb1e849885835e762e8620076d07b82c8963c48950e78efdbcfb7e51ce723c25ecea5dc76994b158670edf8c54210057eb70a485c676731e4498c9f436e9a3e4aef9513b724c655b6165d7fa7375ba32251af0138bd9fd8fcd56a7c43ab2ca9a7fc0117d25f6d4ef9c2fcbca6172505bb4b749ab478e98d2c5b9ba4a208a0ac7edc310f4fb40aa9575c10d8494b36d2518da13c55000bf87bc3653eebecc0eed6796d24b78a630dd8cde2fa183956b3edff7e0ea5bdcdc0f1f51172a3bf5218b7bafd7e9048422385fbba4b9c4a4d50958953392b18f98d96dae66a54e81fd12987284465586d9365cfe0f35ce6e250541367e46f77550973582e4b85d1efc235c8389fbb21ac0480319b19e176df5c2f850338fa43abda8f582f40bfe18a92e26573b61c0bc91fdf0a34e5b1600a1b30c76f5d53e5c1a8f2c3336e8980b7ea394722b20f7e8a8b8940f380560e2b365ec1f37a02c35f1ca57f80006b16407240548cba1de2b9f086bd201258e60c54c15cd7b790474fddaf765e1ced0bebd10175fbf7cc9f1cf8df6703c23d52741e627e623d84d85894188e17eb98c881b08493b590a71d7c499b28e4b98fb92a3b4810dd3466dd41e9e9b1f294f3b3c9b6cf9403ae33c5a08bc2e70a1fd583f7547bfb90c4bfc0d38329c6363f87358d8cec622d79fafd52675d8cbe1b9817a3110425c31315e8d60be0b52c16dab793d9e3e37b18832e588473fe48d55fdff619ea78be4cf3bd122816661c3e769fa446ba0135b456c17b8c0c27f076b242b81535dbc895dea74e83d4c04de2e356887b7ba2a274fc1c832430eefe2619a8b0acee352b16600e54c421ad0928a745071f2eb00b81fca938f6e83bb90c1d79a7871c702df9005aea92061596384cd3e9dad912b802decf62aa3bf66a51451e654ec773176347f3d9958ade3d3b5a67f55686b0f1202bf5c8e83208591c1afdb2a8f726317ebb42e876b5f14659576bf4383c72fe036a853357d457ce96237f563db571c272e6ade1dd8f36f9b9cd46af2b044026d223e66b9f29cc11e7e80c18b6083c1467509d8a7121959e844360ebd5e502b3b6de803869394f6936f10dc1bbf96f6d847f7baddb72f77ce1422173dee7a0ebd624bb625d0dc920abc7e819f38ff216f1fdad10c38a42dcf951f10eef1202175b7cffb022ac207c70f107e807d2ad57d7529d7ccf726006f4f83883b06f117e6c6fb4eb611e3ec6aaf7d0f69eca89775e04b1b8aa313742f9bf5e9bc805b36a328442dbc16c09458462ad0b61806cc0ad9d538efacfb1d8302fcb1ee0dcd121d4431148eb9d6b4324b805eef8fb4078eda5eac46855b50fc2cfe7d49ffd54ec7b3489fa86b94b06b28440680a43ebe845a2de239bca2a31d7271b84ae6f22134fe013b83bc990d7574bc5413f615758de1e96733c36fa8496c0cdf8b43a25de77ce154cb2d324fe3a97fe41415c6a0fdfa07c7cf2a20c51282167f65a6743951c86f97c92e2eec385ef522fb53c0e5771b1f705661548dfb5d24f4748fd667f6591251183fbd66e5ddc29d5460a2a76bcd86fd83f979678645cefb3250475e57b7603d32f28c446ece5ecf99acda5b5e79d4cbb2630de625d46ad019985580f85bdf9893b70a0945a920164598d695c1b88f777c3e908e6c918f3fb4e86f745acef71fd52dc52a0cf6bd1de2c525db37f22d6d4bdc9fc4cd05b2867e9123acf1893d2f51a72c3b272f9c42fbb2569023cf25299bdd8a3dc9996b30e152e09f4f031843a3b3cd9126bc3431ead0d75907980d4906a1fe3de4d51feb878e44cfe5d51ef945e427d08e351b474aa1369a65f55c27f6da5a5991315702cba3beb33867c7bca2b8b98db022c80f95c3e2d8c16f8852f6d73d25614687134843ccedc943990a6491f10d4efdb10756896aa8ac5f18668138f505d77d569967eeddd40ae1196ee6106cf3bd3e6cbb07923c6e894c92cf1070309f665e1c01b4f5801a9fd8bf56b1a48bb58d5d6187135ee6aedac07de94f0d7e3690616df8b9f85205da82f15e51deebe721e32618244fe7fe2353306177611c8fd81fb2cae187a23a5d8855e241100bfd2d5820da94f5beb0f56d60b4342bb9ffbff18104c6041f3c9b51639ef9f84a5c1234f84affe0e98bc387755e0fcdc50aba7f6f42c1fe2761166690c0f6f845a85301f2d5cf81e6c31039e4cb64c7dc255a21c3e17fe6396c51406404d2807c566237d7277e69351b5ded3588cd8a5df41171258d5a4ce3a2ce6763e6f7216ceae24eebaca6f762e92f19fe12c4b5c8eb72f61a82ebb2a4a8f05406d3df7b85da35dfc6e1b3cceea0e65894f5c4baab7fe129098eae880ad3698ec34815cf55a8ff32ef433f4a36f72621a0ae58098425fe7278ed0d5d74d69c803fd014cd5adb8110cb5da40fda4060fd87a8f942d1822d6aff4a92a371170bd0c2f866d613f67dd1f19d7c8e57111954d07212c721f8f09af313d8ea9e1929e8f31d867a0f6e37fee89f43362bedd1c011a65f36d40eda5afad54aa33a51993146dbfe39bbb7620026bf72a7d73b0cb7b19218e286486d537d0b626e0454bc6244a0389587766e8e128a9543d79d3ca436e1ea8ab71a0bfd0022aa9b5aa715c46306b00e110fcfe1529d25aaab68e42e17f24e7fc51848b01ab7adbbcbad2800387c1f13e70808b26d53ae3cc13285bddb6fbf325ea7a6253336c66fc5eb858e2b8cb03757d3ab69a93a898ac78eb3cc07a6a752e26c96c4d02c9ef7d7f690c6b2952df902171a8fbcde62051ce1d0e12323a151debbbd07780582148032ec526431d2c96426f88d0eaba25c3fb07f85948337afc2396b75916e3a164d44fab9c6ef69390ca7a7fa252ed4c0be9f1231f231d4dd2b5a3487c2a301ad9d814e55413a3bc85a0dbb5f86c473f307e22b6eb2bc035a8892aac67260932b0f9c59cd698ed4e7dacda515aa28fa63aa4e4da46c8e4db8587730aa2703491f01da9f7ab679cf281d6be7c505b8f2832427db7b76250e67197c58bb67279e0a12e091f5ae6784f9706d15d63000d6e1f403674c661cdff75a16a572a92a2c7cb132d3b6b7f480eca24591d1af7d2200985573afb2d23ce978da895863a75ed77b45d746799d6d61f189fe3fea9a6e5f8fb2830df2e1afae143c86d53d1bcfbadf9e1f2d59be850a0caebd8967e5065f589f17ff9cd792c5bab110817bf3d9873ca00dc3def4723542385236adf9a490717f94ed1700a0b0caecd8e5d6bc16dd30f045a27fcbbf84309b4ee02324a39378e89c6f0819340fc324227aa3f0f22d4b033961c2a0c777665c15ee7e029dc8cd4e90fdd66dd723320baf988a2f15e7e95d6b5a3e10147f420f49da052ffdb0ed261502089b04aba617b2f7efc2dc9daa734e245896311c52095d3b5ef94ddc57039b14250d47098dbcdef15b68c0cefcc9743898afa7cf24fec27ae1eaf8bba97b85bca25108bd578fa61d336d6cfc6ed4500f74d8e31829441c214491a8df42d2776406f2d437a1f49af43e5d3b965f387421738e7d77dd6dbcc6fd79b8a7b1bce292d95f4428db801feea2b4a73d6c4a53172b4cc17ecff036c4530fb2b584af59d18012a2d192a6b79527105a5214ae7f48f2a0799d6f601ca20bc011792a1e4fa891a9aaf235fcf45021dcaf64c6b95b4f6005e0443a31d0f87e277f63107e26708480b6eb53e758d8299620e6111f69830a09a013bee9f63030d23723e66390c1ef34412d6afa4775b4b9596672353c9c4708337c7bfceed1ba2cf31bfa52f1252830e448f9aa52b149d2a366789f46e3adae04feefef3d6570a41dbbfac0da12d6031ace7e7c1d235f6eb95682b21b01b447bf0b99356453fad421943631be036f375f1e67f3d9446bd9e5c72f122b7ee181ac32e663f635cf3999355b2a0f8f5a2a2bb94486498d05c0c328dc33eaa3bbd866f5860f658354510f0fc81e611f2d67fb4fa2b7d075b3afdc0c289bfb18b9b879d3c67c24b52096dd841b83351b6f8d5821f10cf086dbf39ae182bebf6641ae4f5e464ed643ca979f52a3fd0e3c86e6ccd0be0a3c4905387a398910b9e51a2671e5740bdcd7a8bfcecc2fe05edb0a20c3ec78141634b5eb04749a366d4d79bd6c19de17bab9419be680edd1998f7fa7d7c5addf10c26487d43334a46be806dfa85bf316e2913b9860f18c5560b24e08630ccdbfbe7aa79b33f5e6cf184d3809b13c417e06c7ed51d89e79c026fbfbbf1022662a61d5e5a1de2d3f2b04f583d8112b47a179f5dd44c7f834c66eb50f384996f5c3cd6cb5182d599c5cb47980a732b97445ce8391ed999f5bbcaa860f0089eafb0033977c7a9c0b8cb8a931a503a06765cf76f981b8c7e44d375cd761944b8ee46446fec255b4939ee355c66789e4a58aa305d05332fd7787ab1831bd802903506469fb2d1601b231513c905e867a046164fda05ce884b9a9ac4f2d69408ce8bd853f24f3580dc7e286d037e0a5daf47889b0d22546183b01af7412fb61f19f9a4b1904db78335520e8b315945482063e85d1fe32d8026c5e29299aea40f198652a9a034c130cda8b1b57c1f00ef9aa21ede38d0c1addddedadd21dcc7a0773aca834b8aba504d87f8330c57a51bc60d12637e7278b25005ea200240879adb1df487b8d90aab5cf8cb4c08899b944babad371c50bb562641faa263634dc4ec38b8fd10a81809a302124a983e4a22d385d5a138f3f060089bf2ac6dcb7fe75392ff2c7a804e32c9adb573e6fc1a8d03a173e8fbe181999d19ba86470287cbb833af5d1fe813ed77019d10174e739c850970558ca4d4c98ec63a781b90cb38c124b2d82668cf045507b06856b9bd1901c5b23013c453b882a75bca0efbb5f6196ceee5b888eb3d0ac6d7c5c9c760ca1edb23c1bac7642d22c603c34acdabcc66134dccfdd1cd613f46fb6d98ffc4778555aa4fa73771f1162a1bacf78d17845122b6d41ccade389b9002a9ece951eade3a2e24029be1cd05db8ccd3cc460e481a010463efc8689c7abd6c1ed0e70ead0939986f47c1c8697e23c6e42f9eeb59f95456a8aed2e1e6a9f5dfdc2f5873e0367d2bea5618ae7754615d731b429be520a3c8829273cbd2d7581a5942700af20bec1133cd293b7470ffe50307e79c94305dde842321a2fb83428008a2a4105cfa14ecfe1579fbdb445de2067dd469c199110d2fe942e3bb2e43c57cd88b408b7166138be7916c265f19f90ff5bf8017db3bd8d85d7e2abc48ea4f284c8bf7f8128e298f8bf608e021b28e82080f7bd1775cc62fe829d4695394819d873cc34d4dcb935bab2e5e932c96170f1d3ab9b8ede2599911ec6d3ceed1014f11042ed593cce582ad80d9b9d05326f9bdc7d628bf6b17a6832c71b16b2e42af6278973b84f094870bc416becd6832f4523d3d9b5c6564ca84607e61691aca50f41098e981d534fb5e3e723c7453cf6183116cab555fd597ce3eefb759150cb66e52905a1af92b321d76989d558450d3c8daffb32ac8fe70a90e424dcbbb8e5209b54a27c0cb0bddb1f2d66bf1986bcd8bf0434d5d1f23f7ad55127f315cd3a68ebef2bd13c93b50c439d812c90e84a15507f3f46ce10a9f53a9dcd61aa7514645e6369474825e3dbcb1fa4c5c451011ac787e32cabcf6ca34830decf7f99b93c7b182487374c8e71401d9532bdaa2710ac83e72f6e19d2ab867322e49e227219ca76243911f200f52afe1d1a83dc051e88dd14f821d521357ccc61490ef68723d4e63004dffe7f900f2a04261fcee36de1fc322fcbeba26bb3a462a5d7ff408120ce1290a858546a790912fd986709244248097c75429d73b264eea10223e55c3797908674e8c7aaef030f47f691be6c3029608526c45a750172cde5954cbddb9faa738e4b961f79fa80c2ae41334b6d350700f5e658209a2938c7189b611127e26d824f364aa6fe21e8f4d88234f84ed84ab272bde63909b11ca3e2194a2967874a87723ceca262eca36d6dc17e0d38a25a3ca4b457ebeb21882bed19ef4dc417a8489e66645ccce319f51604f8d25219a06635d2917f6802e325dea238c56619ef8f7cbb9a1c658fb2547b558a8fc5c782faca207d3da7db955a60bd0dd874158622b443762a5477d75143bb1c8bb83469be0ea4036cd1340692197156d01694d7c9ed06e1cdc223eeb6163f960f54e6be7ca6680c550d959e95b1c6fbf3761d494ecf0dc14ed71c61499ee7e063c067e7fa3d747e418487c52ad1c4e48ab9384478045f00f5bae996d380bde3cf253f4e0179ce43765e91e31b2174f9dc0a6d300e3104840a9412f71b67c9859babf459580280413dc23c602e48dd23338f4576d9010537d58c20eaebf912af0e791072c9819262ddd80fa42cef0748d570477ca11969ff9ecb9ad909dea04a71b81b001a9e0a8ca0c99217dcbdfb510bd6fcab2d2438c6ac79082b3ebf7b3c0c8f9b6b1400f2a9ccbd4d21085bc0271de9ea6b47c87a7348bdf2485244ac6f27271a1a7f5051a0aadbc92b76705eb053d09b25b5ad38eebabfe1980d143ac90aa81f7723353059824c8d9befa5ded6f5b4973f407c7a1f4aa85d8337d82d34fd3933e9c75896bc9c3821db3ba247804abc6423b0dd46ee40a0ec7197378d974702ddd835608bb13fc60e51220ea1969b118c37cd77a643e3ce18caf6da63d9312ca5ac33f61820b41edb676c91f5ff30da97e55ff3a1067c5b68f61c68b6e403df13ce8ac243f144691084e0d44aa551400b942df83f1f536e645dd18a8f9f0542b0a4026b160c34cf360f487fa86f466b72ab002f8976b0309567dde8f5f27e7e0397629a9959cf77d4726a3a174556825394a04086f3dbc9827d0729f0c5b8ba941074f6d3c15c8a72140eaba00fcbad37b6d5d23f7f1b60b40518f68800f91fec75fe28cc2a222f985dfe7d4ab5eb16a579678dba00ba1db169d9f6c68c8ad5922fc9d78c7e6a8fcfb501561e20ffe225451d1b0160fe29030f0fd2b14fb3030ea79dac1ca37cd19e84dedf22364e3c3f82c0211c8530ac316185315232bbd2e944414f8383a01f8e325ebf60e0224a7c98184a115997cdc4c502bcaf1dec69aa6d7f67c9041e9e2627499ee007c13463f0ed3beac27db543a54d1bd2f98cf1d98c1d9cf7103d78eecc6726a99174237df0079fafaa288c36682ff5c3ace491ff08e498138e47d56e877ffdc268833f50012e1c66f8e179267670f288203c72a3499c00286582dc2fc15bcb367236af668c295a1994f0a49a37d8bb2b3bdcbb4db70d7f3b7f37b6b8e3c1390a99d59c47f7c102cf659d361a132ef8b4e70b9585bafebb56c3ad8a91537aee48c3a72d79abbebc915530572e723c50290b1228d4ba395c80192e81437b4e93f8daf58b8611e82f664bf02e5fbcc86c948f399bc11f840bc26900c355c204d020c507ddf6900604563027e434599bf4fc5ac816d551a870239b6c774f8f664cca6c254c4f8fe2e369ea1ba036b17d8f6a5607c396b86d32ab98bac6ba4c3ab0fdb797001b784272a862148beb2c36e5e56a3ec88ebc9af9624632d71c6049a3c28ea420e1b2ef5c1a805ccddd338d9f757eb44d45c6f96f518e1cd300335bce20d996d42aa5b147c72d3a8d942c4b65227bb27b423c503a7f58bfe1eb2d38d91f80b3467db94fdcb84ff5f3978138def54780790d886802f48d642a67b6a76bc76b449b625693c2f4cfd6296e981cb3f5cb66702e100970b91353d5fb36712c218390fe61e443a183962554a1dbbf8c2befac882d3efa2bd5d4d40b30155ec634aee19503cb28236e8b2a9fb8b0e90f9d9c99e8937905dc50b72ff48cbb36de08d57d88cf730aeebc952c303c8161e755b876b9e828f02b33a3abb79990c11fa6e1ad004e45b1aa759e752fb5b5f0ba5b2c8b22b2b584bf8582917ddffdc72e15b8b92506a7e400a28d4bc5a9b45e31b5e1204c7b8789414e3b296de5680fb65d44e91e81026d974a4af71aa2e673f36dbe7d5fca06c75896b6bbb0333a625d876b851447bf121975bcc05527b3f6a98baaea82289a06ad66db8f6d51dc88cb9a17d42ede449c2b2bcdf09ec183b1fa158faedd1cab0de8c592edcdc8b449a99e2f1f95d0fbd2777564ce1ff6be6a8f155412992ea1a5b0bcc31cf81e2c6d9f9c9bae70a54a7ea55a69a1fd51ccea0f92e15edee6e496ad52566515deabbb549a43c9e8e39b665de3c5b2635715f92395 +MD = 00094de254debf18737acae9829fb9afae99abb5d660351bc73653b2 + +Len = 54088 +Msg = 79629acb974770fe2666ee2ce59173cac211f38bfa3a408c824388cea6541feaf0df7f004b348ef168501fce61f6ba909c02a009f3f90a1a11e4b2271f5f94c8a1edf6c19a8ea635f79483162ab23ee0165662872b3892add23312190b558a65543206f6ce7d40329bd922ec8aec8723f6b542edeb2061ae8bd8b38db05d8729d356b7872d28e5501bc70539c7cd1bc205c946237bd9fe83057b9a6c58a0157ce502115d00b81cf7410733e32a7c84230b377811238af19608c3d19c4945bbc651de1d5e8e546e8fd341b4d4fb214ab0d0aae0a02b5cc34e5c585f07cb75026fe091e273212562809a1c91f282e6f3d01bc885b6da76fb12c8e34c93285870df5ac46885ff5380325e41d12707f109eab5396f3c7900214c150ca02aa6158f7e871eb87a7105500de7587c5ad16a146867a6a61b5024be630b7a64b38fd5e7b52e48d93cbf635b7afc089b73297a9ab1f7b73339a70859bf72d6a01629bffeea19e9d3b1319628df67f934595749252d2d131d80c6d47ac812c75a3bbdfc5e860eaaafc30fc63fa5eed452f6a3fe3c44d3636cd7f4b1a9e6b3f69c0a92b38ff2d6337459a01a29355a41fa3154c1685eaf4e28257bc76f811c0a6d6bf20d1795392b2a5a2dbb6df572e736f2b4bc2fe38b7d5a54a13d530116acd646233280d6fe3adab0fed1934f006f0d2109141c3b2d970a4baf3bdece6984dd836e49521fef098b425b8324aaca8088a79cf4b4ce5d453ef2eceb9650dd398d0a1b7a13d7d24045f88cf9a76e9ac3ad6ab5828105e52f0031a27305ef3974ebc372ef4d65708710bad85ca40236e086539ce60a468cfc57f017fbb31447dc0196bbcd87339184f57089d4a3d0667e1b4a9849d7fa19554c1795ac2725cd1ad66c3d3f4aa8fce2fb02e5882d3ff4457238f2d3718a55e1e58e62ade98c94d5722b416b1d2c7b472b5835a1c9b7a6df9503f3ab5f5c08492c3dc62781af64b6debd0f798827d45c8b5bc04600a046f18c95e0fa29daf934290d0b4278f805652108ef921301d0c826f1d0a059639a265dd404e7586bf24be3e4772554ce3e8943f629de472337330103abd75c666b2312aaa69b7376b93662ac54f9a098d8ca4d6e0484abf3d147267a9a1291128093b3fe0d3d0265189cae4be8e5e1c09cd24657c9acc8da66a99c3ce57981cfa31c46b782f68d9fd425d0ab7c12a1ad4f46369bc1802441bd046b33d435b3069a66d5bf4dee9d8cb87acfb257a867c7bcd125213125498e9ffe9c45af6eaf1d2e1a67fdb64cb9948b43b34ac3cebc76aa191cd164c6bf2bd43f355cbd4bfe7e27e0055905396a1f1427845a06ac2722e0c62293a1890c7e2470415f47f5278f4d5fb6bb81dc37951ccf4bc9696b30332781404f2f96baf15739c5369594b2ba6840820b735ea85e6be3108134335f1147f27ded571651ea3441cbc9ef4f28663f2a713123e645e2c90ad969af2b3d2408c0e155613157d384315a009d4e10fa9bc68c16d99d978afeecb069227c51d532937470950e56130fb07bc3e6baf2e044bcdaa0ddaa25bcd1329c69d44d238a8c153f243ad6d5129d6735fa14bb567f02b363b8763677e10c84a6510ec73cacdfec495a9ab05d38f6fe908d6d78c53f9d543047ee6916627589d409181223a4f3c09afbfbc575ede11c94643a1ac788dc4648338b6a89a5d5ea307a3a5560d9903a3beda63da59928694a67c2c8e2c28831b46696625814f34fc28abcb97cb27e01331ae33f75a4918fb97f4faba05569bf7ac656780c16995e9122e565fe9984be8a68faf36e76e533e99227eb88aa4796a43d15d52c128dc2a52bfe816ef56c1949c132821777eb00e38993af2227ea5e39b219a040729821068b4f37552dfcb9770cd414f8106d9bae4ddb1ff7351ac0420cac02d19d8224bd2c20ad3aabfd471c3128d09aa731af52c547648e3d9e63c635142366fb1372d0f4b90ba5d6366a411776df84a601e2d8d81fa66fa53ff1cd14992a87f413b44acd617a1e1671cbeca806693e73a3dc4770aa0c23d6c50f60918540bcf04991309e62222ed3741228cb1f955178df46a77431bf3139f86785941e8c8e577eb28c4f022a5c7508e6fa680b8b441b7fc801cbfce721359fa14605ae3784917abe65c78aba3164f5ef6c6810749fc649095c5f53aa7c318465abcc7b682706055ec4f042fc340903d685b17778ebe007b2c0177e33c9976d59bbd2ce48fd1fe73ab0b17116edcafa434d2c88beafd17f6a35dbc4a890ce23287efdeeff9042e7f931f26030e410a1ddcdc18a6f73007adac4936f325a3e6e78fc3625b468d8cf434f9b5873a244c14d0c59c7b2c0d7bfaa7427c5f8ad4f15f23e66b98f0b4a65c213959f06aecc223a12da85b01cbd18814e800f231469e23d4b73f3b903fe721b84c67d1290128c4de82e0d90121a4b07588494da14f49b012b471b5ad85ebdf9ab173cbfd17cc72e953ba77b275721e59c1c9e46375809e8e7c8799910d110028e702334f8749a8421eb9a99e5da62c32231738e04fdf49886e0549f35be31de37ba799a8d61cff895243011d30cd648f0a95cdc034c24b91076f694ce8fe936aedb871818ab2c31f8d0af0c7955441d106ea155bdab60f48e71a59f64ab00b2f9bd95d722b97ad852d660b1601e76ea8a668a23b98371f107bbaae87e7a3ef92246eaff32f58094ac1e8b290fcd3256647b5f6e7f3d2057833b4d98a4646bb43160d0b7d1c6080e0d90789b0ecc4109a894675d983f33ce0ad9d5d75fd14e8a2cf28d278694d8ed7d146e30e6816bac5e98eb198bf37200a57d8ccc3529b0241de46a78d9c8bada0492b7101e5677e78c7133cae0c0a7925b0fb8a0b0d459290b1eafd252c8737dabf299623eb12f613c068796200d982f3577a27a583a1142ff87a45c7afdce7d791c5d4fcffc59c3753f2fa8d2440e7d399d9283b4c4a0170009913fd8cf928377f84afe589ebeb4400472267eccd124716acfe34cd8cd4f168bbda2f5a78636ab6faa9761ff26dda43d9a39ad0da9cde5c4a3c1a8e0619349f671ae57eb743f1f67c344728759e5a9d2ed08e56f5e209c9554455142258aa230f58b88052245dbc9df2b149e1e7657abb4bcb15ab7c49ec32b99ce68dedd28229160105b58f1e57e4474ceac3e35b7b1367c96367e62f33770e2a7b85733e4b48d557557e0eb476d3a48291982ccd0cabd711e6b79a1a4da6b4b659c5735dccf3094415f81da097d0bcfac4dafe3aadf8fc2d061712ab79364f98f7ba58b1a59c342fbdd02663198fd30dfb190214ed9f59834802da43749a217adbc0adca63c8e8a2c382c38c9a55a944aabec2fc39e371bd33177b829e66ecb47c94ed0865ed9925bd8c7f8d88b682276a48ab411189d7234da150e9751103de6093910c4a9ec8210259b4e67347003ea053359412d6fc6e0e5d04d8872d09711e4924468030e83d4876fe07d87b95e2e34afc65ac7f43e5db8701d0531f5fe51c22314785689bd2d660c59226c8d5ccb9bc6a264cd750335bdbd281576c99c2d0bb226fe89a357a62a3b5f5ecb322548a0409668273a3cef5a7f13c02992992d2708250184a579c43bc29a3a8cf1e02dade4496cbd8b1214f97d890e32991dd97fedb78a2fd74d110169b4bd9812b503297b647b77b0ad2b0180300879264fba792984a07280f814e5fa52f0d5ddcd507ccd8e9a3df034bcda50b0b5e78157577e83354b35e9a5554d3b1fd92c9a509f0da270d3f795d050ebb5b21e62f15e38f7c47293605b7a5da2f6c0828590667546c2b12d8de5a86e9e77de49d3bf8ce64ab4e281db1c9fb34df1e0f3c908355c8ef5fab1e729e59e5a5ddb40233408e8e11b2e1c8e743ddfb4f52533de4ae8db4d02f365eda8ae688830520b3896fbc622c1fe6d61ad7c6a41c93749ae9ea57becb2435388ac2c558eb8eab0fc2d8c09776ef87a3d0e83db5b37bf40204c94c2d1cd93839e7b86ecd5bd4c395643e43847e9c74d08de7bba6905651d1b9bdf3a651b8afb185ee5b5c5071fad2d1e2adbf9fb11eeac668b90d5fcd0ea89d5ab6b1063d1c5df9d7139c65d0c156b07877bf76c7f630feedce306e4a9af514023dc3b6f0fe9da8051ff4189bb78f746239fa804b8b61bbd963e648597725b246c154c05ed6df04fae909c51d3deb92325cf748a65efb61de02657a6433d8fcbb19eadee135b0b51af72417efd5099e6b593c3c82d14ca54e22547115417d57c1800c4f228ba12cf7d2f96d8e0d47fd6fd74fd84b92f3eabc5c29c8c7309157ec9c2fbd8d593ec113f4f05262575533c22f98a87b047fa6ab186bee04819371aed6cb96ac1ed835f1e58f5327338fd604fabd399bb65e6d9cdf716d57a512398ac86656e94d0be0142d4cec27327658aaa103e818290ea40429f0a32b2b9c1402d9969adf845853ed24af79fcc4974025bb23409acd0eee6370603c19758fa59992c2cef9352c060f743da9127a6100f8b191ef7e22dda14d5b26a48d236b42d17c816fb0d0257add846de5f2c4722fb62cb6214cbb09612442da5900a5bd802d0f48f9b0f5a336e9edb6bd38233930c07526a2810600a28abff1e61e8d04f21ec38ff9541643aea708ae9b3d272498ba3369cfb58461f9e32ae3b82149cffd2921cceb24a27556b77dcc0c8c30d2ec05dfd62544c68bbbb03c466bd35c7d25dea2964bad3ab6d37da5859dafe0b29f25e3123fd93d0c7c843c906d8f35aaf091de62a7583f96897c2871ab12a74216acd5946bcd6862c0d1d43829cf85c7d1f53dc86ab031830d357ef6c14f0510071d3fe355abd90d0d2b7bc44d1e9d526e7b391e123fa10ab33c01ab8ccf8a9ad4d98a7579feff89d5f39bbb33f71cd91a9668fa4a611eac3ff269064a2e984104643dc145215c67afbccc937ad364da6ad945e35fcf0ad5f7eb0d7da5b6cea11a6fd26d43dd6004ef0986d38e5e05c4d3a6384feed3e6166f9877980c228e498b3ed0bff26dbb00384c42f1ead18036e9afe8b6541a30ec2b8d2fec09ec6798db73c15fdd6ccdd8000789752ce8649f1138bfbd4bfc9bd5a03baec01b6edb2d8f811cc37155090adacde2e3a10d136beee335ab2305576162267cdaad3469561bf95b713aa0fd072cf1b7b3f3aa1d2be731d32675cf23fde5c002825bd782d1153ef5efa5fb2a5b7b25a06c916a026d7e9720a5b0b46229afbae86d93c2c7fcefe484955fae117649ec158416a7439f29a596bf605f9263245986e2e180a958106c8018a44432f61d978f80dffc513f8ccfbdca011b4538e83e7688c18b97613b4960d030581f496aba86e979d3cbdcfc87fe5c1f91fb297fcc2fc5b06e22a6a50dbf52605426fec5e7943460b803e61d60e0ec183e14a33fa52b303a82cba7022be425d0b2fa6493912fe81133a9e943dd0e00878a2244bc3be14ecc6402d0b71687b0fe1f0a397839c27b27b12e65247ece2fe9f0c46c8a02fa87f2ac58b25870128a34d2c6ebc853e47400caf1d823a8b9d0bc2c5ba90d9cdf5229b64dca5aab0d183188b0da28721e5938eba4b0c5fd49798a775888db6bf853ee0c52973239dff160ab78a2fd06c8913c9da78d7fef05a0b17c5b6a57f2ee03cc28f79773af139c4ea55ec4daa48bb2885b8adcd5f066eceda5c4ec27b418c82096bd59936d408f582103ce35bdd043a89fcf2d5c93f5947b8e457cbf321137a7d0044c1616df311988d81d82c52ebb19e4d4dd786c3a5e07902daa82ff5fd8be5f7ced701e58280f577c31665d0f9f58c53c8bcdcb9d900e460de4177e6d01c0bf77bc35f633dab61740b844e7eb46e1bb76a6a14497e0ec3a66b7e131c1697b5a9546dc310adf8a32c600a2f85a68412213bca759d1b74dc7c89474abe5663acb460bd741459d08549ca904f0c57a03b3844c449da3899f788418466f519e8b8c2a89cbc96c99ccd7051fef73c4e285ca58c41d62b5ee5de759a1dade8e68ea07832f0e1be86c2444bfe3c6f3d13863e101b2766b613c058e99dfa68c045bd2e8008a32cb517acb282d833ff362e20a91ffa603fa3e2922c8c5103dea4bedd2882329be5a304c0dfbde7c9ef4f2860657d30d2a91b50c32308be2159bdda565725b6c254b0d66892a334e786b287ad39d0c567ee46e7bb0502ec3a1f32209083129efec102140b95dcc6760d84d66eeec1c205554b2ee39a25e437792c19f474f1f23973c44610ae11a65cccf09a0d4cf72e962552ada1a916ad01afd34be8f169b85ab31cf5e1a6eada830b1b5df11b1b1101a785ed5efc804f7e094e40d5c422fa49c932a8e5440e6cd11230a68223d4742e230a75835909d398cfc68024b3c5bfeefd2fe784522663302855fe282ccb5e05e009cd76895940364862913b87fa1031963b3a2696d9c88797b2ec4bfda7d76e28ab7ea154199e40bd4bfd840768f4fade7d2a33dad0a2bda571f8535f11e75141170f6b81f1f59d76a84c65fdb873311b1e3e13e4b2f9bc9bb7aaa81ab197967476083bda884e37bba204482f9195be9645ff2f7c28d66bc1af8bb2f62eee2509f0f27b2587b0f5d461af94679c6389971bf3ed6cda40b25e7e22dabb31f4e648ac54922b9524bf080cd4b16b81e47a66c8a4b67b6f3f79bb4ff7863061b2c279d3b6e8b45bb17da1ccfc0703e7207a4a739af37090dba82148931f1e672f9fe38ca0e588815f17e5c8aefef976206f8d455b0a14e41d28d6917d0e4dea7467cf009bf16eae36761d2972fe14d7eb43756571652f140cdf22533dba8593870085572e742f8a3f809016d06f1bb289dc4bfb646a89c7b0b64fb65c8a8e0a72544db8e2d693be811e88b851b9d7ae03245631ba83e9a61295a4e161e82ff63d496f4b3e7f62f204394b367c4410746001e02dfd171858396568fdd43b32ffeec9323acad764cdd1b722b9da788daca85d2f17b48ddf862d0ce4313eea5dce8fbbe0aa0e4761f8ef825569f1be18fde41f8c18684f04d8f77460a6265f790b2706bfc59335201b66802c6d4c7c770f1b2f3f58a0c44ff59e83238314014d5ebf9418b3e00a6add3f9befee701b738b557590fee4548a862a2377f19038a36d5e4c329c7d2f07e681b9e513e704d4199ad8c732bc677b32a43ba218236c41e30c1657a7f30abfdf34c45705389e6260f3432b1eb165eca213b3ed1f5405f066d1dacdfcc9055a7061a38debeb50e509679b05e74ab7a37e7f73a02fac6b789eb680ddc487879f400f3ecfee888424bbffc99db810c3686df162036fb207a135c2f1cf27b6f757f8467d653698a1e81fc2b53bb78af205176f6a5e08ee3f33d0fe13eb4cddbf4a3f0e4896eaa30ff9ddb847270c40ac40250472f821e87cf51a70cf795c844640be7087ac332f351f9ce968a8e0ba5ae33fb5631ae32927b0b8220ec07e33f4011d7322ed38c67d22045efe085b8162b40c8c230c7638a62c551cb609db733154032001a222ef4ec9be1ef28da41c2e7c35909b16019d63319764b09c9acb6503187d0d12183310dd72312d80e413240261c9b380ace1c4872604e5c1e5c4f8d405952c8743182c27c7a0962942efae1039405491a18b33f5ab043cc0e1e45390726d4747ca28086c667214cfe736336c65fc649205231745ce6a9ce0b8b6dcff060f479bd6eb0d77f7af91bbfa731bdf8c05cccb0331d83d3640ef6a92bffce86a8212cb8fe8a30f215ff436a42bcd3156647584c03edea68c8e1ca696891b1446ce921f1ca733fb8c8b25860de8b32a6d20460567d19047775a0bdced9ba24c41fcaddfa6b02304e13b0bf35c313492764126951e7358eaa0aea454be7df75603124d52548cddf2c87590c7ba8fb8301cd0ff7e0dab9d55ae91cf5532b884fa351b59c14fc2c78de8439b484e89a7cd04d4b8065e01c8514a0c742971d3b0027f1cb974beda4b9ceaac15c041a76a31d955397636fd3fa61c257b16a256e234881f55b3ca5cd0e975b9e475ba716724415c6a16c0286b1ccbe6cc65eec9845af92b15c69bd1be3a3270f1b0e270076ee4ef332d2109b47b00574f5e7cb5fd3a7949e1f458c17c58c9db24b8e02bb2d66c197c058429838a627fed4875a2b59db180a1872ab2740be10265d7dd2ad1267edf2de40f0e3e129a668c6d0016144a48d83dc5382e0d1a22eb9d5301f6ca24c54b2e13ea424fdb4f141513469b820be7599df7abbcaf4f36a0b27573160799e66467da3e4d1cad2a9271836eb867a6360ca964aae5c270c2298e855c12ee4c8c32c08033b50f50d3e78605a1f62be4dcf84a565e2fae46718c17cbe373e9075dbe224ff0048e8bf11b3ee007db368d82256613ee24dc99e8d3378e31c05f90010f738d9ec103282c37805ec7f1f069cf9ce6e4834cb231d206d5186d81b8b0212d9d836475d5ed2e4133c50ac0c23f6c64b311452e99d5d52bd9afc03f5b2f652186796ba76ca39c44415ef7cf12d90085b3e25b52fa4f994c2a9c5280b2d574f218b6dadf301221459171b7a649fd3408d09fee403b65c770b2274acf246af7a83984daa68901634e0b4671cdd074b0f4f18f2581c6e007a05897d1b119b5954cd3299382df390a6697244ecd0d061b51fefb299c018700e304360eb0f97ff7e5cdee2cfe9a83bf961d55762c6a7a1e28de2b211956245b419e4a2a532d90c47b0f1bce9f22a52ae5851f10754e9a60807b6736812c7dbfc20f1c4c221bb0a51781f8a0efdf67f25bb7cb442d212c8a61bcf7905aea5cd56f3df49da62ca742bf0bcdcb753a93bf009ca03cde4af943d38922562ffa87454f111a4566c83c427e95e176b999ef3bdd1ae81d0f33c934dfca32b185c3c6b66a73d56beb58394e59077dca4465450cf91ae912494364048c676dc8e6ade3d1c94c6e37bb42640d5a49e9ef9d075bda5c85ed4013e2915ce3491cc4d920a43d73822dd260f0852888436d0c4ce5f94e0f413ad2f5781ae4ea5686cce784d3a270ff5a6462c86646ebde5149da69e90f193818ee776dc543ab77f509964136aac9a93d144734ce108c00dccfcefaf2c68250d1bd222a5b222e95afa271bf96fb856a1e0b999b842d729257c6b0ffdb1b5373ac667d15a3287996fdc0fd67ba3dac294471df655146a57d0a5609e26db59388f011119767fe9664278bc49f6c1947cef86da2f9fd032ea73da55f0a703d4a77e6e864196d4b8de5752a4dd072365d40822769c1500b14fa38de3ddfac5a8028d61000017eb864032fc62063953ef6692ac8bc2412075f5d422728c9e8b53e8207b46db862ed25a49c86c6be9dd61a303878238a0a9e18b7a5a8aa30eef68b6fc3fa31a7e191d8b20593c64b52a8d27df35e275b017946f2a78b4a7c84c470d7500ad635c34c8314b214a8717c5c2538a4a34f00bf40f1f591f5911573c7f4a0f70de4c9cfc830b2eb32f597e29a1c4a936e24df0c9a21a8ab10056482a81fb3002be1cdceaae674f81534274d09be9908e82d61b02fdff33c0430cf7b0ff9f8b38b57a8899dae4220e4ed888551130e4b39f2ee72a832be8ef99abf24a38b575856cdc2c5478f04adc8a82252 +MD = 24d9e842a8a1e3c8a5f5bf0fe0aaab2bdbe3a95d391563106dcf8ae9 + +Len = 54880 +Msg = a397524c0f22857d5dcff20f5714d0b3f9c72895cb26d2876e1aa05b74bdd9907519e9325e3356fb0d48f6be1b566006f9dea0fa3fe82f83404922b1e221a15bada79b062129b8084d4e8fee9d9f1a1af44566b1fa148fb4b8c9ec6c6290870c73cad092ff0c92ee456b256685f7e6391185e482a5b2dc60fb2468549b1373eaf108f09ca1e5cbf31f2620ef7a66aca978258137e8c8fdd034e1fc3036b14d3e4cec63edafbb4d600007e95124f554b352ada4966a60da4c898912cada73fd50affb914dd097ff7d1297e6542cabc69fc7a6b769d4815b1b22a311e8305f6b6840bfe383ac80c9917d5d80bf3a91eab5fe972176cd34688728b76153df8080ce27bfbf59ec7e93e669e21f5cf5ada83d20084a86fe80e9d6c34e6ad390db22c98d838e95389945c2fdac2cf10609e97e54819a600f6dc6511aef9330eb7a3aa39a94b90037dac86e61450d4714ad93c1c38b79cea703e740562246319764b1a27579a66292480232be352c26c89f904e94ad4f966e4b34eb9e6feb9f3da16d0f47babf83f1ecdc553c02f056cae9c66df07084810e4c96991b5fe842843a583237e06b2afacc3e210236c09ec1931f66ff5b80572c0ef394f579a6e2153659526e72112158f211dc395806c756a38280e8f6abe0739a352253458d47979d57b813f81b2eb1663bcf08f1299a3023d604d4c96ee388f7428c5d4c0638b3773cad4ffaf01aae2ea642988891dcf81a053aea5d2f2a162d041a3d15777f11cdef774a01f8acf654387c10a5a6585591f66a5339577bc3456113182949e258a6585e2b949bae32e0dbc799d1cfd5f08f91dc36e54f9f374643c1190ee52a310b5fac1b3c41e609d876695b92771a701cbed8bcea7e5e1b38916a654eb11f4303eca74180521e2446f1ab7d7303f07e4065a50dcf4b7f17243357277117883796e799c6e8361c2a3134d528f9dc1fc2046e8c501c20ccd21110d085fd7e2eb4cc38c8d1fc55a9c4a2262f83ae6a6fe36fc1d5ae5a640bf507121ca77c4eda63aec77d8b45188c9aa0b101b71915a88a8a47c84e107e05270e2085b675ee52eb437cff1b4ae58f5333bc92ebc246915e5ce6ac59c6d882112f2251da71c85ef6944098aa9325789763302b483263f308ed87cbf604d94a5b7101c93af743c829a7f98e60a941101039f314f6f0d6962f45136b4e53e924acdda335ff8fc7572e86912a64139f1f64bcee951c8405427c6d70d5883a70d9ac79f1dd50c1bcd2ad39eeb4df59a96d3bf509f6e2775abf966c8851cd42d632044fd30856168b024dc6fa74f804c6c13eea2d7e71503bd4274a412645f184f45c67320039159aafb7379bb1d89b5de414a54076f197124bd40f859e17d2e0ea5bc7f40b204752a09394bbb5a6a6d89f662e2b268ad546ea47c43bff6c6a53dbaa79037233321b9f88e341c68bae9eb8dc8bd7d662903f7a28714b926b43468ef185457d9c605e723e2e152daf3a17f71dc62bcea45365c21e1c9c9f3de41fccd7f1a473805981e25e7c1f3239d2ab26d2e70e5576a3208cd2cf186e09d5485d04c7079e0aa3eeb790d6471c52fec20ba2f46ab5000ad89eec91a646f89f2709210f55445fc80bb97b4375352147c47036f726346b0ff5c1136b2e7132c92698d6cf78aeaa5042b0c8cb91c3cf34191b35f72a1bdf3bdfbdef639935dedbabd1ca11572411c1fa631e76830f834e29d448fd5eb28314fe5a2984cddb245d207da6dcdaedbca59a9b264d3361661b5d651710aa408024bb6069d3b3aa2dd8ec641139e953d4838c2088578901a0251b954938f60ffef37c96565a33ec21d4774eb42e6c9c81e437baeb9c6e3658f4cc2b877d2a652407aac5992036e728d7290336c64b11ea4f0331f725c849b60ed9f078e82e8b1aeaaeb5da2da2e5686b6a4a41066efa384c584c55f98182e3fda8acc580eac90924ee2ec08a612c0c17a2ed7af8be9f92639ed4ad207f290749a326154e4666193bd4f8f33e59043a6439b28ba32147211d3d92a6a3ac864978312811582bac71b9c7da1c5174b71ad897621c0f803c0d019d4be989eee1d214b97861a87fe13a262e9ee3cc988cd6fd24c5d445c4c47d9827ca1eda2f81caa5a5dfac462c4e9b08730aefb6afca935b49a25c4cd328996841d6ec9f56af58b15c259a38183bbde9fde7e917a0ba7c786cc25b2c97b08bfb5436fbdf4bb3a4c24612d4882defc75034fc78f753a4b6def7ee7aeef7a378d9c9b3f4a2f6d5d75fcb6e023e51b4e2c68013455fb0d06c1550ec6199da4b8b8806157ff03f5d19115300cc606ed036d249f2f7569f85c4a3e184b7352aeee992752443d20e92915e4691d8f86b8ceafcf76237e5080ce612108025cbced5bd7f7da7e94f4bbd68d10ce9d10d303027ccf22bad13d3adfbea47a75261ae482dd585681870de26c5ef0dd05da8a50414cba31500e8e8b02bb1edc0e702b28e611ef72d793caf15d142b20e24d0b250da8070e8d96c2f5d9df169948bb3c2f182e13abfb4bba6d2b451616acf8d3f5ba073c26bdfa891fc7a3125ebe77ec6b7b8a7b6e670f5aca495a483ae06e7346e8f2d0267bba3f4d4e9fa888ca26aa6292af7d36955f3a7d59cc481a070e779d1cf3596a51465422e13d3fa41657f4a8f0159f9120cbc81abf338c109b694f6cc8713e8ea93f761522044e3d0d8c69a31645590a73d58206fbf88adb080f794a7df505e01e0603b8837d5ac02a2467f567c7400f190d06e682b3dac5f751639a9007362b1a2a8b618800fbb9f6c08df48713db1b8ab2b51e05cde25dc3dfbce1b12045bc181d8bc492479796fdd12a44d6a390cc43971b31d7df382f081ae3c453c8cb1fa27f734654b9c4e399e6eb4ae8fee77dce0aa7b68b4042a63e935696fa792cb24390d05b21cfea3c75624f9b309e65bca48df9109299a85fd1c9a3fe17b9e130762231979c029dedfae3a59a300a921541a18dd48063cfb86c3e5a5e2df38f06a483f57015fa5694a4ebabec89bbd2f43fe5b466d7073f4c5851c82bcfbe9ca16936ca7941ff8aad0ddab0f6803acef5e9bb2b7bf91c6d8830b49c0b5f8380ad4ecaff1782bac0b38041634cc60fec76f9a24158791bd0f88fc734616feae166afb121df6a949f24c6a02143cd939213ca2b9490e98e0019c01a3fc2734d157a0679c1456c255c9d2b87799ff96e7648f5c7a3b99cdb81787c2e0ca2fc32c3540d855bce09d5af793957eaa5fc08ff82e706ed37358ccb710e6329878d3441910f846fedc63dfe457aa1d2fa27fba45e1859efae362a44a0116a14e488ba369da6c76c3913b6df8e69e5e1111faefb3724310963013c93920f936d4e813d08f64dfedf1484e8b9b071a4936f45ab6aaa754ce90a392c2eb3638f812a09453f177f7b47149c3c13584c6e58793c697924a5de0d1840817c70a7af0f1b736b5f9da5cd22cdcc3972e23493aec35671bd321094c401b9c51376668245777207d0d57b74f09497696eead4c504e2465c9d5f5fd1cc4af77f7a110a99e2d267b3397b4b034efd70345dde9763093a6e72a008de4584789c0916fd1e6665c0d6e5ffebaee88c8cf932c64a170e1a50415c4bdb36406b0f2a0a80871c782cb74228aaa311a537b794dd4e99be16b6a861822722d2530e7303fc3d4b8f3fc61a2be3b03e1db9ef01d5ac4d6a072d7cc7318c989c4d0ddd38bc46a3b6e13dc08e16bfb7191da700f03e1849178cb2cb2153c4368400d165e4d5725a55ace28a77751515c0bbfd1c0730b9d84eb937203b2ad16796983e26fbc227d7a45cdea25ad97c52c1531c9ebb4009615c172b1a99393cd2207db49ef224af922f7b8296ccb66df4978d861780fe7f7aec112f28b0015edcde1bd53c4c5fa22063836ee6319e5281bfc5da04fcce849b6b5183c91405b00e1c0cf09d7ee587e8cd0ef40f2df3d270b68688f58332d1395632f98a39d8e8ec66cbc7210e48c971d868c27016495647f86a0347c8bdbddb293fd0da95dd61de3ad2a9657f1bff52223b5ab78f11668e01cae99a11e1d30770f2aa38bc95a37a24bc27e955b191e017011d53fcee7ba97f339c6b03219924b9e5f62312943636a0d2b31b06bc19c243249ac3f4332e30ad3eac19210f78e9607445384c5b82aa4bc0db79269e0f7f13404385e981c69a38369942d00e0a9c113807d6ae4e212b6201219219d9db5d23deb828514cfd6c9cd5d476b49fc6d328abce9ccd0e9a50901e05e474e21602e14a6919d0073b1e3776fe03335726152349f9d93cff46b05271f8eebc6937f6c82dc6e8ca42f835b4a46696c0a6b0d89d8d2a3a52a2beb125a78b2f54b1c9bf64f351f3c482cd3980e8be900110efa4040fc03ec29b7ad996192d14c26e43b33435bae93349229028be569d69284afdd32c6c34f13c039000517f3da9f12e78b25f3227baf880d0188fdf0d6d5f4b4ca77d7edb5326d18b10eac2086fdcf2866bfa884db033608fdcf7a86e82187926dd7d98808cce7d11244fb61388a42842cd71fdb9a76c5a15e260533f4c064d03019719d2f2a56ec8d6eacbdd88c94854536032fa2515d618c564600e2f8b5f67a0749331294e1f18956673d4f4cecb31aa4fa89dadc25cff027e4f49a129f8db26709529951b0696ec2d3e88312739511e9acf02a5e4673f060881805554c1c42025902acabecdca37b98c65d2650b393ccc36c7a21e8d5f5cbd972090be42b91a0df4c33e8bdd092495fdfc5cfac950916e405b26b317e682e800d8f7a8e420709463716514acfa2f3d03ca456afc4d98fb9c4bb854cf5af5224ee80ec73ea0c0434cc3d2ebc603b4392e4e00380c76dffeab07bb75fc234ff6e1fc2a7bbaa085a521290c73a0cc5ff4edf631e48262b2e1fd1db48936e5dfc05a73ff48d0b63d34711f863ed59a8f0ab3613ef2e6a7de4ff30c3820f809413938edd1a11948537bbd15b4cfdd14dde52f0dabe5b1acae832d41cabfc80400abddc866371cdd74e585ba3c891fc1a91ea159fd2f7be790361c6cc0c81f6c8aa2d9a2115d23ebfe0c3b6b620d16178d01cae4a7429def4fd340cbdedc76b96bb8bd096795f70a6b4a7ea7e9ce688d06490c1c2ec1903a29e52b0d596f56711057e84cdd73deaf593aa00e183f8f98816ed59f182f0b4ebad64b9fe4e3470a14fafc0ad779734124574ffc91f2e3d0aacdb7bbe7ed67a37f411301f5eac10ae63c68b20a093d76792aeef1db6b1dbbcee04311127f2dcee39021c200e84cea0076aee0e9b595a5a4200d8c591a95b08a60d82d2c66d627845de85e8a6e532e00443ef5db11245551c11c3a8f83d46559aa177e9a36e943ee04e74616ef6c5d422fa99f627e621bfe98ab7b03295220a9366163f061efba6d1faef72aee00ee52837f1c148fc74007112bdc489da7a91590469ba37a51e19e2890103adca967be0a101a65b7dc9807c52dccc4334d351b42478437d2a8500d9a4affdb4dde3ff10e1d08ea790a5a6d2f21cb1a9cab7b26c6e49c322d5b9c17ff203460b407fd7819f665f755e92dc3a99855903c5ad1c4889e7206ccf41c69c1c04c7fa1cf26dfb82cc030d0f178a7eef20ad994c3ef7121e5744a440a575f8c9ba68c999c22846320960b7cabd16649ef495b288f0ab90d4a21511506e385aa22e12bfde796f29582560bbb70ae9b54b09fa98a14ea08b54d17dfd2523768c4e67ab25149eac6d9c29ea60ff886b38a068c291bedd3fca45ec63aeea4c9654766d1c4362ba46daa51ce5f0cabf04b74518d7e60727ee1750f9ae6dc572027bc2494e61f154a5381c063bb13f361df8e2211fdfa5b316381d024882de1c21c9d90228c7e9f4314fa8efd3ec87751cc51e8c84c3c00920f6530e18355ed25b0564a091bd712352e7f2e095e8c9046be4a160eddc7fb272199a2606ce6d1c18f90a2c738ab16770c7a1e069ef2e6c701d14a541700b3576699c51fa943283c06b74adb577d24bf3b85ef83747de34953a1f646ac88c1a93aefe97dcd0d68ebb244a2b3fccfc544382d12fe73900e4410169a44f2c29ea30af6b0094cb80c672ec33aff9d1560cc8eda18d610dbd04db3c9b6dd8e30a2cb73589950bca59b14b8ad73fcbcd09faeac1771a8d0b3c1dcdb15cc7ed3758688f08005d271889d9afc8dfe69d0a3ca612c5fadf547ba6b67e2955bb766e3b2620f07960d1fc37c6076cf3a957ce1899a6c2d3e39ca42258566b2e505bd1daefd2b59ca7f2bd8cfeb93fba92e162c55a1080a92e4fcfd98abd418e8f84a85e4a0d1e103970a4af0b2f09dda8230e6a71b6c725c95344f2d41b711d7eda3beec039f47e1f35f9c875cf9203f305193067025fefbb924b96bed8c4842843d1b3d8beff8d5f270401c203a1d57c70cd3ec35a0fae0cf22cedd15c026b92a8b4d51a0407e603300c807c3200fb4a4a70bd0d28a00ac55d2e1e9410f379c6f22a7b0e74d43012375b6d2ac3751c657d4bd4ced3dbadedba9a52905a5e57cb077ccd3d742d14952337f15520c9e0d6efa6ac8cc3853c8cf1b8b04ba30dada9d1f2f42e6ddc3a93dee93484b0c4f1a48ac96cd2606962abe9d0614f54c6226837d31869c8a749144fb85d3fdb2df4d734fb3d25124ec5508c2a8c24d3525e1120696077eb57ea215eee940f09ce9478d785470f41fb0d86c10e5a508a790aac76faf5df40b4c4c0f3d2037aa26d778e5aafb1175539e35270c3f35ddf02ce3f20cfff292d8580fcf6abcf0a0ed34521a5c1a4c6b6d0efbe81927ed33cb751d40630a5de1c94c5da4fc22347b6c8a73aa00347a2cc88d8d1ddc32338085e3c7210640f8574a73c64e75f25b8001344df33bdc335002946936a9e0c16abc0362226b566a69d878ca1a4c9fde5557ec61b46363f07b87ae30d116a5ef48da5e8eb3069d2c9fffc5e996f4ad4561ecfd2f3c1b7e49e5d445446bb71445b16d5f9d516c97a7702cd5a553128d294c1cf13718c88d984584f44464ef9e4d2ae1712e8c01d87370ec427dcd0ac1e26a8462e9c8ff147410f635916b44b66e1bd34db2d16ad20928ba76e36361ee19439fcce7cb33a565bec483bbdd3aff310abf5fbab01c06e0fe13fd66c49c64267deb8991adeaa2d5c56c59343956cb3e8e01f1b6a67a0993678540885f3eb6a26fe44377df98af5ccb5a409b1e0cccdf0c47de2733293c88fb8aeab891ad78059006651aded22d53170ab440e9e1569b0bfd6f9cd48e223a30a146881a8d0ad884ee78fb3a0baf615f1a3ed62b690b1b13af1078093d5d3f9d44fe774841f193c4f8e9896fc9a80ff9f53abb61085cb7a9b97b595f9b300197f28cf6a960cebfc6b25155ee80a9a78e2852711943cdf944c90ab1364c6d18c7464c96bc6de4c510a72ad144b516c0722ff097b2afc1685b3a49002bb546fd91ace7c80fcdf63c2943f09bf0fb81f34c78af8fcba0f97d73a9b0d6be6a60288d82d91b0205559d77152d0671b87db8739ee9c9d2cbb8b11483cc955cc04b1221848af041a8955180a73ab145706c789e1f39e6568491abc44506dc857b5a42e41e87f82d2c3800ec56c42cfab7c0cc12561a65d56016b5f989fa0cc6e030434bbd5a834314b01400b043c9fff33d1b76eff5b8bdf2aa782abf10b6af934f9bcedd7d3221d6801364502428d3b713ff4259666f9e90df5aee50e55a9e191aa4f41b6a8537f63a879d92ffba0477f7effb0ee6eaf5df37e69aebe27920c6240741e39cecf40841d90315310e00ba5b56079cf1cb324226a3e6ec8292b63efe2b4ec2aee9e46138903b3362855702a0da0e601180f24e3e0b28df5027ece7fb996144fafc97b58135bc99fec085c58ad46614b09cb477d084f730d5b93365ceda2fc70ba56c69be41fda570300b875bdda517798ed743a0b9c89d8db7081cca5600d57b6500e2323d74d2717456dca67e51e4b6c7f93601121351d2b1f99180959afcb4cbc3d39f90c8cd5cde0629fd1ee2f902e888b384167e0a6f2a8648842144b9324a43a258e44fe29cfd87e3c237dee0d8511460ac4f5f339d911cc6378194778e50fed2f090a0bedc535abe8861ac28c1a21ab1ec253d49f8864b8f3d2f10d4238063e9f93e31be75600d0ec224e13d394c0a2bb620aeda0a6a90f7e792303b9c49015bc535996e02b40d4901ea04aac9cf6132acca1a503dbe6bb4d953793a432b55acf72f3e5a1ecfda11ca299cddddacce6b429a06392d125a3a84db624cd297df520173a6eef403f1ed8d8bf052ef549039fa19091132d6dafd6c9271dfa52f1cef76bb49a95cf0f330ce69d5a69967653335bf8964f9ac7c7213212e8f45518ce9c96ebd1594274c8fff4b835546459bcba8060da0ebe39d3cfb0ffec83d9fbdb56bf677c054177c5fa2b9afcb908fd277a3750c51741cebb296a77916e86a0de6f0eae015f731f1245b2ca195e29677dbca951bf34cc8b677789013f7f0511c02dac4aca3081749828b2d0f20b70a1a4c8fdea302b077ac00134265e7cfe5667d9c1c33d3f127e3deb5335f18a84b286e65ca480c599a2ac0e946d562e1875bdba749fc456cf46ead5bc807ca20fa20a5eee0617ca2b0b14e8d15e905dfc78a91aee68c63b60d3882f1639fd1ab6791777da985d0264bee1d5128172d15266123f57a5abb76c2dfd4188e8dbbb2340977b49e2bb35edc2f91e7f5f6551c148e272d6dfda929b5d33533b167e4dfeff71b0626d972a6d1f460b417fd2a7f12500fb939dbd94976a10ad574a4e98eebc8d5f4ec05aaa8ddeafe380691f998b055422b767bb85055c7e97030db3639c81d3cf34636d7df5061bf063a6b6f037f1c62f6ac53c2c903c645867e61578b0552b4a3ddf366b4c9f747813bdfd739cef3e69d340a852de11a939ac5ddc9dd1417d1691bb1f3c3ab2a1c4b8365eec630aa41a1b5f68bf97e33782fafa709ba74bb17c577f8fb769458a1c799a3f213347e08869abe23b64baf57b78463939db7eafc4b8b4eea57e6317c77e700adcb5b0dafbe6ab7f8eed9fcb6b4fc8a04115df5f36dbe1a3ce2411300ff04026e3914c7bbdbae7a77fd999a19ca6080b79fc78a91ae98e18fa0159bd3af793fbfe6e23a9150ce7c3d8d0b15f54a68fe3ab395076b70943b4f1bd42a691baeff1f7f43e4d4a0434395f7ceeeedc77e4919d746fac566489df7a01d4d35c62df7095cca450a5cc5573dd8258347c40907b1854de353f21e7015f75182ce316e8e09f9e5d986e89d2d7198df71a7b2a190be381a4f7ba69e68266c0159a6dff94a9de11720fed6634cfdd43d488235c09a8c8a4c9dc0f640ccb588ad40344446a331aceea9c698901c2ef4cf667bafee7b98d6556cb8539e442fc7d5b51ae0ff2e71a7dcd262c1ac4181851659d893a3ca8fb6b52ab6511f3501c3fb46af485b52ba8c524977c42023820fa2a14d8368fdcda5fc566f713c35d7e78e7385ed03a688a4ef6d6a228458ccfee4cb2ef1a68bdf2e8b7e38368dbd2ebd1faa13318090789c14bcbe6f6147bedd6d361150f4fb30aaf310a5137c3152bf1f78fbd84ab6e6dc62b5e8fd1f86d4159c808933dcd26ec5b3ac3a9a904900682e5e9423da707fe049f77e7e378ca9420328fb1cb697e5e95dbf6d2e625aa4429cd970b6b85390424aefe34541cfbaed219ddb7e1ac2329051b8b1515aecaac90b6806034ce6b46cd61dbbf4c6c66571885dceda91d7e15 +MD = 0dfe127e5f81b93ba3e800b609269bc1aca7f2febaa4648cd18dbea3 + +Len = 55672 +Msg = 31d143ac28bc5923d6bc7b9c0e6ba6ae5b3a5c67e4c1a33f9253504b75d685b364d17966e4c7770c4cc42a3d263517f0d7fc6b3683c4f7282b92791d189d1d217d6043a358ed836e9984eedb866497445ee153bb3cb7bcfc3f9e7ca1e81fc895c3a52acb4ad78430062552def7a12f9236119b60d942fba5179fe13ead018ef77fc9b546832d823adbcfdbae4194e6c2a8b3cb8c200cbb0afbbc315b2eee772ffaf36d7dcb96867460a913b32ce4c4bcfcf06ba6dbbe0413321df362348c8c26794cd8d6e9ba96c6dcdc8155803ad1687aef0418d0ffdea806ebafba8783d4c247fc80baa742bd18998fadfd043d16af6ad91d49c87852b1bd4eedcbef7c57ecab2aed92cbd60052ddeb201181969a7713d53fa18ad16716a06d36fd341f1e8decffa5c41e1d695cf11861fbbfec65aabe0cf188e0b126bff77111b81d13308b53a232ba68c0ff1e1d3df82186e8802eb3a5bb6690c095950a810764730196d0283b1cda7166ca80a8836eed9e32f2ed3ac925a363a7bf7e20c69f69fe905642b3f4e98e00b8d36bdc114ac5ce71c3cd9ba0b8a7210ea9638368612f86697acb3bf3233ddf5e21c5ff101413df4dfcb81d51fbdb929c5d2d798ed51fd33309520a60514ed4ffbc785aa7553e9a70a495090577a57dfae2c24b60849fac970cbe6664fc2ba843ad6a35ff93aec47fc34ca7e3b26eacd0400c4107f518db3d8af99827ab3b23d4fb85d83f59cb282562c43f14369fe5c57ff2a2abb0f326cc8beae7d0e6e60c57aeaf8a902cfd8d0887e719bf8b9ef181a85bb8733e9656ed18799d8736942d77cfd2941a96acbad03d9c7d0d37d598adc331c988266b3347378e017621ad4cda65d53e041e40782689cbb226c4aaa1f1d65b1e12f0d88483f3115ac23199322878a0d0774d218fb2755c0131ba87d6f4ebc1ff382547134851eaf196eec1a70a111b929aa9b7c71b0838b2569fd3fd5f094bb3224c1fa63f5b020e18df8b7227362ecc96bc6be8094a450dbffdf6dfd939e184f9edc8060f183ff8708c605d29f2c1c5920ea3b926446c59915b58440b826bb8e590aafb61908af9c77da92eb54abcc6b725c80317fd96e0f74261f49cecd1980dbe2d4cddcccc57453bccae764807172c8b438e877da9e8173979b6357ffb6c9afeb9c32ad3eb5b114d33a511f38a001ac87a221ccd8fba19c808537e44d17cb3d9b626f1add14d543b44db31532ec9a962d7877ef42e9e267776941e423c0f81d68c3ed9636475358e69177c71d9b900e3c18456fa70db66cf2b3ebe81226f2c7da3d38bfc8e1addcd09239a54741948d3a0e34ce83bbb00578f1c050a6de2db5663adae80358673808bc53404e831a8b8db6a07c579841c970af59ce403b1b6ea3593ebf843ff202f59c6f28a1b49491cdce23099117fe41805902a17ce24e6c07f4eea6b9fce0c63daed7bedf7a953860a126e6debf47e61e6b658acb4829360aaa752e1313b5ea3760478356399ed7fcdc46a48ef2b12fb172fceaa9f15e4531f63cc62e18d3f7895d1906b46603f8e8dbecc32056bc96cfec3331976230220454dfff7970ed6699f1e6c968a47723bb2c93b3315feca3e053a300221f5154f832c94a73b044cfefcb1b3be1696ae0ea4ad5f54072a3ef8935b6c6c87d3446943c7327bb5b8c8bf15520eebd2951a90cc32e19cc3384d230fef905f9204b7f5ece78279ed72733550cb2526a68bdf489020691431701e46e3be43e329d2977be6542babcc7a74e716e39f767ac224be593e9ec23a19dae976902e0134830c8398d6d6193817f45dd06125e43680127b905529b0c47ca895302df8c09c603d966c352bca1a921b20e40e5e77c20ed1069b2db1e6b8e2b1d0795d4a2947b1533bc938d1c65b3310b7bcb2f33706b488e7e48edf6aff911d25b9e7cc421ebe75fb17a97115e142fcaabe158b2cebb960a7d1405b467fd213195894251509cecc5dbf4eb2c09607068254fecf5f576780cdcc0acc8222ecbb36be2cfeaaf12b80e927ef3dcd61ca57c6e53666d7330410e13cb6db24cf293e035477fe07bc1bb827b856b94729d216fed886fa9c68d93a6c890a2f366ecfc408803cce3654e79ca0da4acf33d8686cb397b430b7dd2e24f51acf71bfe62774ceab45153f9fd755dbf692279b55d4816b8988b22f794bf60459cc48c8217977dc3e587c2887320b6072f76886885e7cb116cc280c2677d921adcb5d58060df5ba9f3eabfbf342e5b8b8413bfd594e860aa6463957cbfbf5d57e9257777d2a15f138bf49c0ca4d0c6a2e384707b0ebc600a1bf8e174f1f71a735ebdf2d6e19ff0870a2fe7df69ca8fe3ea335ac757e651a7000cf549c2b7520389c9d83c123dc87aeb1743c5e77e0fd4f4cacf4904f8ae179cea31699672bc6f06d38805e8ed4f75cb25004ea25dceec8f955e8e9a65edb25f4b2662e1bb924c528592d2ea20edfe16e3dde82f0c5591373d88f69cb0992dc38a54b438e47bf2093a79017a9b3c7a5ade1d00e1ec3c69782dcf2f605b28e076424cec009fe216778cbb402e9ea371036e4e576f8fdbebced0917799e81550c3ed6f68dd405d1049d6c9ed8abdcb88ad3ef22a2c69cc8ea7e0808dbdc9f71558f64cb933785575dca33587f37b0d17b4aaa917bd0c76d89fb81cd0208346a481e7555b87aa63cdcc9c7e9e1d58f0b4b64bc39e75da734012d1b6cd86967c64fb5b29de5e48f07e761d259e5cda1ed62e9ce22cfb764a5bbdc7fef4449610fd11ac3aa03be6940e859f9b072660dff28a187551c2425481dd0555d2dee4acc36164f84f8505b6f467ae6f772eafcc9065490d9b4ed12a690d044bf7da14986e571fe34aee28e1d698c4136cc9f95d462c990b6815a54467da6f41c1baa86c448f37ac10bbc2ad1b957b17368ce01a7a5c930f56ab213b04a180e7cef512a0ec6646833f92656149ea2dfb82ebe67ca381c189d563f766d61ef3ae8e1de5decc78b73935f673a6d8037730c06b9f0c6818aefb62f47a60428f21f66d99846e7b33141e824c8ff64c7dc1478d805c422eadb5d49dc13cbfd09eb6601bfc90e86f31e7a3a3291cd81db5a6a028ceb0a66dad60c5c45eb0ce16aa0b6be7bb7dc52ed1ac791700acb4d24781eb50ab3eb1bb944a1fa52169137b5dbb8a7f5aad9d20aedd0f6c67a224f0b00d8963aa58ec8eeedc728ebde8387516214c316ec2d8eb25e3c701c2bf90ff6b83faf04091cf5e39924f0f8890a5aa6fd711ac4c4ff0e4e37b3085a6379164e6afc075126bc2aff10605961604d361c7677b5e87977db443edfc5696bcaeb7cdcb7a6074597f0aa19246b0eab75a61b94cf9b6b54bf7cfe3c65af2f8b1317e6d7179510aed4ce4c7e182fe7b2a92f0b1e21d4339dfc79e2f8f0ce950a7d20f622c4db52a99c4d4d05e3acd5bc125b54dd14692a9c595b5a3c262b83322f9013876780b77e17f316772debbe13d7b15e9951613798fca8cdceafcde24951eea4cca88d26746c4b0d9ba0f28cfd22b9921980c441db0deba37734bc98980dc313ba2e0986d4c4da9b3be2cb25c318fc5627489b32abb5a943ff5d018f678996c719a2fcc1e6462a281d9b7e73ade301138951edf1511b6c172ed1a3adfeedef28b1ab6ebef21bc21d0a74115c02ab50320844c2661569bb86cc39aadca462569e49f26865406a2ae0ca148eca0c9772196cc922793ec41ff8a03c1f03a2105491ab1ef19e185cebdb2525fca411d0ee327d87161216561fd57383090a401e70699dd81251c1198c75e34c64d25a7e4ce40327a519e34743860db570d8c6b4338ee8c8d26684c89515cb33cd3b2fc71596c550d876eebf1371367b5c577cfc2469549539c5a9918e25a7823fc9d7d6d0b28cabb6117fe518ffb67dd66eaa1bcb60a8e84f57789d000c3de1c3639cd1059f20e047d2dde1d9985462e505973cb0dcae681d023814733255f65ff1c4e13dc5499693a252dcdea5d9d392058c855c462cbeaaaf331e6dffb96c1d5c982dfe8ccf75a36724feb08c0e77e454d11e5604eb91fe47afe178db30e9058a60ded35c79277e0b9c6ed6b7b8f7e3dbae302680b38a22b0f5881b2e81151e64641b419d10512c740255d88ca2fa97826be355204b511dd44d39df60759a70d2eb0dd2b75d9eb68c9eda3f75932909324f5e6a4e7d8df799fe1c4ad9d41d03bd3fdb0d1225b32339b72692d9522c40d1a3caed710fe6b9e9525be6016649e00ba6ae7a16333b7b6597605920a8aa4448af4e66f0ca066aab8f1b3b41f2c30ea669aea22c4edcc6f784b11db15d4b1e80bb135e35769212c7fe87cfff42369574d0020cba3d3e0dd7c74164f639b8d5600f415da7db35b924e7c42da41c487e5f22d3402ac90a58eda837b956049971cff3ffe9aec09568ac92fdda9949a1d04ea948c7e2bae8ad216ebba1398595fbb7ae758cb2ef5a274646585f4591ea9328ab8a284cd87f165b63f7a60785557aff89cccd1b2e2dfcda4dfd450fbbcbcfd771c0ebceea789a83cd104f29cc81f68fcc2c345246b6f151ed15146191eb8d42431399d2ba7a4181f531240522c0774fbfbc4abdff9c0d916fc852a2d9f3d55168abb9bf0e2e143d2380ae044fba0627a9a596c5208758831b3d89395c8aadec2aafd3fdaf3c1a9f9f25748e1a18aaffd40ea1d27321db0f389d4090e2591ffbcf4870f4654b5c90b049ff0c4c826cbf8620f14dbe0f9d1e100f000e33083266a09d170cf703e0f69f14d5e4ad9f524f0803109ccafca696e9bc501b163eee15e5d750ad2f0eb0bbb5ad808005186797a2de86295f8eff610cccb81f54a35cf1e61da33fd311d4c5373d88461c94b07f9bd9d95b446daf65c166c082b5e083e0ea98992aacb752fe70eb73a0babc37f03d1e93994342be8c4fb2f1ad019d6ccb3b6fb9d682a5344ca7e0cbf5a63803d0ced23b4d22b535bc00d9d20600811d9b1fcb8bab1d868299234317ada9af1c0997205adeaa6d1bdf1a03ecf67a35a036dfd49812440042cc2d3de0308bca8b81e02e77b4a31378dce657c5e63661fd86c3b16771c1bb7ecd0df6ade514305722f1241a37d54e559bacfee73cfdac3a72128b81315a603d840b9506360b8988d2112bcccf08c7b904b420da6297be61e116896cbbd89788d96f43738a3a7f277b896b13e40326acff45e324becc4079bd15d4b276020766b480277d4a67b83a04a20b7ade8f123674a8724fba64da8bed5893dac9a259dffd876aabdc5bdccc55a13386257433604b26f3e3bc26339e5927ef6d1e7e35fb9ccc3386a9de94e256d10dc1217a32316c058f662edbf4bae9ca10f2dc6041c37997ab9519b88886ef79beb23a68b7b2bf8d6d62774bc4e785881df16a0e283e7c30f96095b05fbf08e071e1d90869e92d08b65eff3e4c2e15aa3ff3325090748ede476f838fc196894f4cd76420f1e09cbc91e32e7c349681789d7f9bf0226e95ebba4b4c1d58115a0e771b4579f69ff5f227786ccc2328b13a601d0db485337a9d7c7b5922c93b63651b35e2db212c21f29fa521f8c1eb8d38af55f06661cb263db5871166bf198d9c60aea50e1a91070422f2b5c6b7e7febab3b0adcc603f80128cf8dbb0e0b5befa6d0df5d988d68e70d8e890ffad24ea0793b5aaaf28966f662a5421cad416dfc86bda39051401a07de80e1a6b4aab3b6878ed50d661d8dd7fb7264a7a4444d94f819edb5a651c24757becbcd13783d7258ade070bb40eb1a65af3be89d84892d4d8df42a0242e019eb80bdcfa1cb4a886f0123814c83fd3233b45e4bf3729f4a29728d69ff8402141c8f2e4af9f4794d2d31149ba47732a3e83a326e30aefe600e7feff1f8a596ba5d2293ab66b4385535a61a4c5d6b2a03f5a96ebbff8a24f35f0eb25e78181c714ff3948d726b0624fae8caffd1f051c6de7a59c19aa4b198ad976b0c086c01dd477a974dc7996130ff61ad42aca73871253589fbac7f22b47cb280872411f552e6101288b0bfe7fdb5b917a137f05c774c5375d6af89d6db4ed8795c559a5586ae5cacbae85ef90fb057b0881e5c2c5db66cb3ef0e556c718681dc081775b0cd02d8bc50b8e722db61b5fe83ca4b269915e9bab16352421bd6372ef6d42475aa85ecc7d6bcf8e3e55c6c6810c65dd9cddd42f0aa2911063e9070c8b5263732a39a3165d95ef4bac202d373bb9d04c4406f010c45da02075e57c75fdf881e765cc22efcc5397b15d5f793a7e0a8c064a55dcc5420f0b5e3ff9e935ac2745aaf1a903e2326b6fc93a5ad157b2c842139712bdd6eb8079d2aa6c76d2ffa756c3b8186f74f8a61e9a2b595e173fbb997c1285becc267793839c884dd6603f5e3da1618e2f84cc4d2c19a347018eab3a48a2f5042e5dbe0179fe9393c936b9021d93cb879a3fa5a388ea81b59e0560cc7f31acba84f71b6abcb9d67331e8dbec6d789f833d91f8c9b5883bd0740da1f82aa6f006575c577655b3991398e06ec4353726a9a1e38f66bbd919bf0d0f38664fe80a102df33ace4bd6249b858539317bb8a5224d9b3023a3c762abf171ebbdf9e1420191268b1aa609be34813f06dc49e36715c923a4a8743960bba69d83a52d78df01085c14016e33b00613769b6da6a0b3ab9ee1b39c36165918b6f9c8c8f5952b371cfe9b2cac3e4338c392c18b9bd7d00b533f24a8f24896e9a9ef81cb58206ccc5472e9436811bcf219fb40de2e70075f70a3c173afb65f5705e578595f02ebe83821c6eda894665e9e1ae00f6953a0cc7e7750a67548fc8a544573181021f0b15173f9d276af88a1d95569c65468e37c04229ae84ce6b4a91d763bb07566c25226d14c9bd94a69e65215a2aaf69817978a0c67e23d78d0dde9e098ca96b9abf140a185f0da4d525392c3546457c98644989d7f3b4fe6984d3feb510e7903f1b7254c6d787fa08b1020c5479c7fe476acb73da99c8b185422a7ff3023282addcb5f3bccdcd22c5c46848543f977d230f76e54afadf7f74c83a984fbb2ab18b75576d56ac4dbd70d1d476910234679fc4c464a57159e69c899cee27b6208b3c77ff0810ed6a18ae5bcf0db75c3f4c321d3c6876a7d85570f8b9d8178dc49e5546f57a982bd2c2e2d4c07423c818a97e9b67673af8cb6aa6a829fcabac77695a84d32b48c1f84a92ef415062b040fdc9a1ade77f0eb384821a65a2308cc95ab09420a0af5a5b2e52ddda18e0bf58b7c7d2987f9f341131b7c1e58f52b93b00ec076661384f6bdc8752e3344a3fb065eda0bf86381374f0ac21321a9ecc3cea81510ce3603bbad3c4d10538fbdbf896af9e8b91b6275f5fc3dac3ba51104f8604f38cade389b8a28fcab8ad71fe81b8821e7538b5ea20ddb331230536200351eb818e370ed3f5d73cb265f85921fc5a09c304d193d669d8eed6c881aa95c8dca96d5a055e84e2e0702aa5bffde0c8e9ab0ec2f2fc66baffdb3e3c961acc3084d329a8af5f27103cbe95e04aecb567e5ea6438234c2564a10cd9f7d9234dbaf8dd48d27b8d250e6a7c76be5fa21a69dd5c65ccc90fad277af82c72b14094c8973c4d602075292de83e6f8834ca7a3f4e5576098aa33853dc21b845c4ff3bf9ee7499ea04838dff3478c2e680a26f68a77a3766bec3817a431e0fd97abbadcf7d2ac0d8be54de12edc02351b9e67466774f0c7cfbdd031b4e4195b6490254a9b1a364a4a44593d96289034246e2f3c94c2877b4b85c27b76c30ec54b66feb292a92c7e65cf249e34147d530ce44980184bb0b968add79cf1b70764d5950bbbe565d9d064ec75aa0e8813bc59667cb9fbf5b2a9ac9bd73d2da64b5f8985150e9b388469d00515092f6d9894965e8f8f46aad774a1b88a05337a23dff09ee352bc0974703181cd649ca9550648334bac00516542cf6cb79d0a19d70c90493f3051bff20e0dc863635e269237f94d78b531d2a53abd2028acba6daf0df4ecef506144466bee429fad7eca97523014de55e115df85f33aa3db4c5cf20ba1f1bc59f47fb8ae5b574beb047fab7d76f0443219015b4af924f1d2c7d0ea2d21be6ef412589000dd6f2dc4f62c17e0524973f4e08060b25844da3833b0dd9cfabdcdc8c4b71588fbf20fe15eb924a54c8734443f7a37e5970425b599e4147fb754a07e1184906f3d48b7e9430d17f1ec124dca3dd5290a3ecb9cf30053d7ffddedb1bd02a749dc2bd9ed85ae123befbb52862de27a7c4ad500059770e76e44f6efc62e9e0988f84e0d7b5da6afd7c440b0a915365178cce50d294cf18720758ac2a878ed9095ea2d4d281833cc329b03927c2c424267b9f559d0b88c1b36bb1fce1f44f725b7db50ffbb5f5d52959a8d61c9170d368f388e4cc183488cf83d3f7af33ac5b138f3408dfdd92d2748e9658656819f133a72374ec6562ec0ae247130eb015e1a5e59845db62faa3493b11367eb1001c3ae8e78c7a5d944a0a0973e58d042ca4a7236a4d9ad08dd61be1a206e526c3a2c33b5d91f27b3941416bf2c586aa41227bbb12967ac0dcc97104b1302523e5238130fe3be148c260557c3c59981d03d9b83f39a7179e681bcd26d748ab22e52ce94c31d0d340e0059accc9183dd6d538d10247f5edd3a04b94da7cc703be341d500fa10724fdf2cfa5d02177f45245de4ac6a6196a0b15b77c622a21bb50627379ddb42562ca7b2ceb28cdff3839d618a9df0c6818af490dd88057ef3e83e0ddbb48f3d22940f98bff29371485d7f6a662bdc398763ababd2da79e8609b34faa98c3d893c4fbee8b4673e56e79c737d60a0573f10f27eb24003a669ca9890f6896f0eac0e255eaa9457b615360820a460428862840013af0e4cb38899a5f90963a32a30fede94e4490b22369f682fe64e5b98294b5515a924fdc9ce358b173c1f71b89d76410aa0bacbab418985474c1231ae1ccdb92aa96a5e0fc207119396a521e079dd1768e5cfdf79bf5c2811dc950cf3c472f4fab6c8b6aeec7501151fddfbcc4e9b2855bc708eb3387f1734a0bd368fa8a3cd2ed8264fcdd4e82244e0b047a1a3183c7a2b852182325c1b59a073f6a951c60e6e176c6f9503c93bc9e0044c8a01bb1b7f3df6e00d375afb28e3a0936945457d617c825f2e007e154b28c353adefee8c0bf7ab137dcee18148712a56f80e86e3b00e5067bf53717873bed3a432f51959c6638d02f98059736252fb877e34f30703d6bece7085082be9ac1e87429ba2485a8882f5aad32a9a1d8ff96e223df2b300dab5de6b1dadf854fa8a44056af2226c6e7333b751bdbe222e0e520db3edad52241bddd5a3c7a55dae0122a2e971aea71e4905498278a7183a217d671d4bbe9fbcda14d99fbefbabd26a6a41a187b6b09feab388edc41ca8b81935570474ae90a8d8cb9c9af9c2e76dac650c189d0032f940859b1a0ae67ab2e0c305efd045ccf2ff4a491ce2c2b888b15829d81956d33532c2ab91b0cd352f5d6f9a66c74bfca235d806abe0c2c72a608ec069657e3b5aa7b4dfdb2099823878803ef1c187c7be64befbd15b8cbb5ba14efa51e740137089a1607fc01208d41940181926c2d65073455215bbe63d235cdffe1a09660380bfd25505fa00700b28f551655ec4d05f4ab230ff6999f58b798af54b32b6b290318fe7f6352a61e58de8105ed1555ef4d150bf18cb6d8a9ae197076dc9fac9abc7203ed8d859846b30617e8ae73d2816f06627e74a29a5597a4e5b0738f8efd669cc81364d5581a4faa7c3730943d5cd8f3b90f54f97edce2df61aa1e679cd1bffdcd995fbe6ff99d10406a19d310d21961821c8407d0b03e3d96bc43b440b8171986d7f4ad4a6509fbe6f9b0dcd7a1bed4502ea86a4a600 +MD = 190c802e5b5df0e8e5d23555e8c4f1fada537d70bf47b251ed27f9b5 + +Len = 56464 +Msg = 9773e81db76c30ea9b166fb8d0db35650baa87731049e003d2ed7601dc08be9cef6232f9ed6b5228f5d0e957d04c91458cc179fa668766b6ee03f827657c2fde6a2b2d04d6913e49e40e151e95ae5924524660e4d3c03ac041b3f12997370f134ef761a63987fb37aef87c76e6aa93e9a662c2991f9c620b1423e8713ade6622e4ed5548dff591d89bb7a5c88ce8497cd03c298112c5e87dae7b6566161c3df37436915091810916f573187a500f82c518fe1c0474e0d30059e4f070f2969b6e46f99d2815d66ad802535ef6f8c747abc6cd248a0c982c7b5b8612f798f7887ba15f0236339abc050c80fea24cba9f1921d4c87ba392fad5fd885263cee50c02cf9047e4b5760787592280e8168e92f47238903f017945f88712391d5d0830eb16b3f4996111544531606d2f1ceb28250124043eeef316cb414e4e8b0d0afb1ebff091bc0114aa27de624cde277a6a9416beade032a8743672621916a59076831170a7b75b261215a751a55fffe25f29f92e128e9442672164762226ef45a703565bbdf138f093f7d35501196ccc0fcdf19dbbaede66f7745db3f224b1ce9884d4d95cd25f1935b5ab95e67436e08366483331aad6be2d17a6401076b4d651efd5100bc29a4a0038773adfd824c5c2dd4417fbe845f210f387460486c003d82d9f2b5229af2bfd667f6b71ad0024d41b2e72a1d2f2aaa8ee47ed57bb9dfd37257a50b96f676333280a51265b90a4c2074e6baccea78dfef1305c907c126d76beb0a8c9fc8a9bab676113854a9dee9388eb2ba3462a4319e588bc3733e8fb9be2885a0939e07a6b09cddb16e3eea94f884ed90ea1447502b09834d447e74eb078498e028c30a97df794ce628c4d7effeec09e7647bdcbbf3ca8edf020d70fbc673c6e3a5e44cfe81afe16f0ae8015aaa287a261a05dec5a6f000f122680e5c899a91f3b18e295b55955db48b25015588beb0c5a14ec81da33e7c1c3c1aa79dbf5d8cc8d20d3a3eb9bdf44f3fe852711933604e60b3131486fa72b8a591c73fd63109bb6e0dfa092cae67a78fce7f2dea1aeb48fedf5a5ab0b8676ef569f7a36cb9ab440becd35b3cdb0a55f133d1fc69e9d42dc2200840beecdca7a20fb368f15be40b3246709558c85eb31aa5155d27049d655121a777102c34eb41ff8500f2ac467957973c580efaf77752be93d0900fb9983250b26e32eb22b24bb5d70bff0f4507025ba103cde756fb3fdce7e7336fab2edc49a386c5ae088535df43da5509624cb90049392411efc7488c8c118fa904a1c559156116e968ec76b8360cb32f10a2f2219f58900f3453e349fae013503899642b627dc531c650a4fd380397f4e2b2343c0df2a033c739c691aec35cd9c96e5f1d254d4efba34a46fac46f61df5af2f5bc3f97c3241ad138f0224bcaca39a90ccac84012bb8231b35d65a0af62ebddbd2e8ea8776491c2d0e1ffd9fb860bc20390e606cf05d5cf90818637df1417db010f85b53b59de7714e3920e5db1a251ca2be8f1c24f304c54f3b0a57f57518357dbaf3e9d9863867b8183496fc1bfc0c6e85ba19b0c046087408f6a1ec14b6f381f85b50c84a3498b283e2bb03a96a79052b896c7d0d4849de44cf63bd647e7085783a906c31058ba544d25ad70d97eacf78a31c72213210f5ba3fa350ae9936ef0339b2ab85d3c8fa21ab7e628faae73434b13176462de62131ec6b8d392fcd296100bc6f8cc5d817e3162c8b76ccf89c265ab473c26151ca707ec25c4f67bb995a36b99f9004426652ba6e3a0c24a66f1747ac50def5db58409eb1a536698aa9b683ae23d7b78e4d35404b5797db7815cf2021f5e2110c3369f43e50375ec1c03c91a5e3a9074536554fcccb6018f7f6168c1c4a16df6bc3b32774459a6ee945b505a5c6501cee887b90f77caf04a97ab433a336c1848071e6e0586ca7c089a2ea8ab7b6131d11ab6daad653ccc7180a70bec1a42d2bd3a3c9c6f4ada67d293ea0c6e29b39333707f4467138fe88cc0c13d57b79a0faedc225824ff1decc5281a2612e5b0b85e704d70cce148e6f4cea651fdb9e63195537c2bb711e98d68ad3b704a3dfd13ca90ae0a3f7cdc4a5200a2e45e8fbbeb19369681a631e1cc25c9ca6574a0fd37f0581d5b4f44de852d0d636eeaa78f8ea30bfdf462cd7b2b94d4438012ad3587784d17fe6cb7a429de4b445c32afe5bebb3a3eee8d433a2e3e73335ab4b14aa4bad62a6e2863e1aafe50e226c6f732ddda47c5fa864193367b1d265fcb6b80f24089c12502d80b7b05b4b969081c1b7e78cb1f82de370ae6e33878f9d72a9d02a1ee88ad6c62862c7ccd369d769ce4132f1ac822059225b1ff6bb7d3587cd348476acd71f5b1d631cc20e63eb2e8413e65ed4c428ce1682a381d7f56dfe0e855b9951c1d1f34902d8c4644b71d8c9742a589188ee4b346b215c41c0edde5309d60d401095979387235b3deb147087ae26694b941ad7645ec21063a65c2f830a1e5ce08c124ee339240d01097afda50703186ab1537b8ea2ae24a46e62fa88ce5a0d98fdf12021610465186e4b870bc8e9ed56a7413e9a800c206be2a846499eb3a9d22ad9153547eae8eae23017a138ff71783e8d287040048d22c8d61baec151b7f5dc73360833ff20df2dd0b34fa16e2b363edf41f92ac0f230e994819f815bbf69db678a806d6b946016d566fd495da4f96ede921b8565d7fd0d88810424fa4a95ef5c19863c55ccd366e4359379f5622a973322bf9b1ec4f1fb5d22c5f355dfe3e0faec03eae551a2e5a82af9795eef2f8186f9ceb21142747db96dcb369506ba75ea0addbd45aa335bc64c1791bfd372f47e202e1366d8ee594568fc35e1478277d47bfefe9a5ff090e9a3d509409459b8c39ec906460fc758a81d4137622ba4af5f484cf40ff9404cb7381c280bbc4e94fe7b85d2d96e67428a9483863f3986e23478b1e9c9ff8a56d812d23845d3b852d7c04cc1467d36df95d4a868a1fa91dbfb131423f3f93877f539e17f195fffb8f5740519b6c49df76fe59926b0f42d615b225cebb36fb177b6b62f46adea8a8f019f982350cc0251c0cf3f0793b1c33bfcac738931ea5d1ec290a6d429fbc39ea249ec273d1cceb6319a815573b9b93287b9404597f2a433c2cf2d73b61b11af817beb6da43c6aee694f46567792790ea452ab670a0dee805d7cab697cd0dc88453d7c3caeb53cc111f67854c8c66997fa7d9c36b4c5a3cb3c9e0affa2a58df2979587de820eaef7d195fe958dddf3943244fbfbbda12bdd063d317d501f8ab51f8df5994acf27575036c062ef5d7ecff3afb0ff4d29ee7e6461082bb0c83c99842cacb62b810faa37e0a60216d0710ee6c5a4878ae65575fe137750e7270b666f7a957c4fabcdb82d9c98bf29bd361ab38ebdde9f5fc68c7b5a663620c460e387809835ded5cb49db717edf51ad34bb0112e44bb21caa89843fbd238128a1d975459e27ff877025e96740abb527d3b8785a0215eca66a35c0c9646032da3811e0d18d9cdb4a2413fe86c66b7eb37bdbc16dfd8574846c58d80043355c628b50712d4fda9aa54fddc2d7f867d3d994ea8453bfe3733e1aba73ec43e927490461d060ca2963215949df61bfe6dd2286ae68152e77105ddb223a964ac6ba16090ba472e8d35e44ab20fa2c0132c315baef16ba34887468165ad40541123e510415956c8f1fb599ab29be41a891ae3b9675364ab85fc6e73528eb411116da835c484d55a9548da5c22ed0a79a4cc61a83076fcea1452f639f552453a01ab733796c71351dbb11f258f5db66c1aa323cea6f694cd980d763bca92942d866fce9c349ac15d39c6607d648858703f51b293173cdcf4758e56ff4eba216a041d22da2a6a3fcb33fb76ca2ed76114a73a867c2dc435cd317810fafe536d8dff561887e4c01f2a5eb2aaa26ac570c7d6e0280037172fd6503d5cc555d8e8f7fc8d081bf046cff91e9e748c94fd081842c50fc5efc03b9e566062d4e1c5243670348a1cd948c2c5f8217cef29c887747f6bb613a439d993b863fbb02ea29fc7fedf06e10c40b80f7fbe2c40b5d28f6ad136b39fe10e9a350aca6fcda8ebbc3afd0f172f15e8e04419f6fb37b585706a0cd870b14298fe10a1f637a3cd2b19fdff27235d628c0be26b5e723aa56beb0086a3860e356365b52299fbd917cb399f79d9c3e28ec46b88c84719a001e05fbcb33a5bfd36186181110824b425568b8df1797155070cbfa5d5536a2e57ad3f0d270f7b04c1029202d1d33aeb525790480a88a42b47df58a7f705ec2c130d095056955bbb62dc47b9098db6e54b48d85c09a9d4dbeda6c72dc1d1083fc09a5f44c65e869797e023220c9a11186c94d448833fabfd551d9ba5aa4746bfecdfa1590aed741fdcc884bc7f7ae21b22e6148c1bdc62060a8e468e34cb3042f4476feb78a4bccabde01d16b6c292642a97099517e2cf6c9a834865e5ff5d6f835c2b9ab426c90e97e13c9f66e3ba69d03224022bf52cb7719721bb2236167bf6a864e521d61172072663d4f460c2b2b0421441ac76026d2c34530c9e12042eda969c3966553e9b983a3345e3cc33c547312ad23e07f90426d56cc8ae059ecebbb13225e60698c1a7972b70b9789628019a0842450d7902fe14df7dd6a35ee20682d739158cc8aad1c7acd3ea1852317bf71d004608fae01e5d1b9aac5dcd1f3775fbc1993a36bd934647edfa0e00a812b2d99ad58cf7220428a1bd93a751dceb25007dd5a17b50588d7d2d6ddc19c26267de70680c165f5c021245311295818dfa95bc5f450f29be17cd20ba051636f7709c3f71f8a0ee6263eddfe921f0c38c711c1b9ab75a90207fb856731b7e6c2e87834687f55f55c3e884cc30580c09832313fa1c5af63a2c2fbf4d0d71cad883f724341e648a3c0cea87b8bb173fd9fe8b1e0658b25a7e3da24252fdba8412a45a1f76a9d8b9f789f45723cdf214ab5b038a9ee4500fd2d1620226d8582290ec2aa58ccec4771ee790838bfd7b12f42536ea4223b67ede83f94f3701dd3ed9e7e386e4d1aa4a2882399d4fde14c34ae9afcd8eab483007c1d2b9e22ebc2164140f142d671c9b9b0679f51dd451ae2624a8a4d2ffa7bbd51788b2d6a37782b5ed17ddb5037df3ecd0bc3b4464a42c0c42ebf0cd75378adcf185ca72f481db45ffa8541a1b50dba46d8ac072239ed573d0d441ccb08a2565fc547155b67d839ab81b17db3337cb485960252585a422d36aec085f46020426746f37ed5dcd143aa2ea8966cf953b4f10d6f9bd0f56acc15dadc5039a51bf951640aea85ef3159c4cb1394b64ebb42f20499ec72528cbc43594084811dba0183e7316253e82004611e9980787cdce7f045284c26b9d18329f39329b61226e4679712ec270ec5cbe9f1e3619ac9dd2a5396c5c4d47161ab2e707e48bfca862a633b5593e9aa4936c40a983f037ee79484c0185a64c363bcb997a8e7848e0359e19da25c8104d3cd5a3161229de221ace98bc818bef7ff3c3431ba11eda5c5fb48839f51d7648c191430e6134f3fb4faebbe7e06ca555fb506065bcbe259f39700b6f779d4129ca158cece1901dbc706f223e12b7124a8ae97de341f4bf0b6b671fe50dc5e552aed8fd2c23d9b00835967809a8f99ae05b04f81ec1410b335df032253835e775e862205698606f4107ab09e503a2b399c4296b72cb219ea999a1eeca775bdbe61f3772f6cfc28ff95f13745ac35100e95ecd4479c024edd096f2a22f4ba61735bbcf81872a7ea6b3a47633c55872e75193671fae30b98d3aee78f8de45b34dd736a0c872490347e29039b4df4386fb550a9d598aad6dd16af89b5f51d5f1d46d2841a452abeef8287ad493e3151ba1861cc68e9986907ec35de042247ce03f4a0928c1b2b3901bd7fcdd4d8b3d8f6e4742793b456cefc9e686de5db0bb1d030041dc9cecf0a547836eca4e323d80d62b343bcc38b0da6736fbebee9110f6b4226ac3929bf38cffad79121272856e6da44a74ddce02cebb57359f81500f0bc722fc744f3a3cb598d8845b36c6b5c69944fdbacc8fd35b5aa9bc7fc25805cab0847f652f322ccdc77718fc27994f17ed7fd68434f892feb9c108f31e13b5c204b95c2cbf2e5423f01bcf7b6174a1e0ded75d578382d2375d1f939fe13d6f7038442b217b894356a738e05f70e35eafe1ce0aab54d90183b927f4dcd81fc363cfc754f9e0dd6ad44151242ed26fe5d39ad667061545b162426ca5405f4531fb3f8571fc9b953b3b72e6d3500264d7fa7e82eaee31635261ad701d60d3483bd51c310acfe83b44eab08ca6799d8c9592e1461eca55bc74e05eb4d594f093515fca4c77ea635a18706e94f5e1e021bf2b77a26b30eeab898cbabd567323b11319de2a51b2a95c165b11a24a4f96deb522b63a689868db10c555fc2871e91be181dc6d10df06cbdf094e372c190e1e082701509f9750a5ab18b4f3b427bd5e5d2629873dc62813c30978b613b4d26a28970d97688432a5a8f55c2691eb2cd2d6856a0b50ee79ee72ea35c189c9703da6f11f615c059b55aae9c0273a529423fe1e025bd2de68966f19e9cc06bd541303d3db60f281d7301174655825f49fbc245e771b3c1c90b60817294803171a84bfadb5f8c48f82cf8d13d04bed37ac25f9c55cac050f7ec7ee7058c8175d200d4aed33ab3a953a7e6e467564e89255dbeef11790c64d8f4672a41cceabf601172610d8fadd294ad7459ae955b09b095864503c5be84d4ebc3520c9be49883a3ce1c70a6a24b25064a37f9070cdc85325fa713f8fe3953983c6850439786a37d8fe6e6c6b99d6c7a0f862ff68a890afcf31c2959f609bdc47872f40a2a1328685ec857381a4fd3d16b4e3aa8fc98a9bbe7ac2d2fcb7f7a371f7be039c6c77a2ce3c9a945eee9c0d2089801668b91c936e65f07c3a820f2b9da88fc1792290191c5f1c5335df49d468b6b6c775ffdd136963e9f5db3768e1251a330eeb7c1265fad48934a8ef7d1f59fd063259f642b839f50dd441408b4092bd364045c174f5d42d7fbd4aa7ac4a7eaceceb6744c3ee5aa9eaac2f45ecd68102180a3aab4e6542da5e617d805de24146d9573053f72245f2eec1d7b0142f5aa936c11c91f510c15ba3a5c41218733c6b5a1a47bc42f07650a8d9ed07879799e341096e0e0fa4da31fe1eb0c55279ea8afd891fd64dd57653a738d1c4bdcbb9709547c178047df7fdbc10c622a262b61622381b4a5e4dc06c488328603d2853b1c21099786a28950f6c4076b27eca39ad76bbec712ad5ef1b2b2d43727c29d32745d87887a7214be79d1234ed4e1cdfa14968e5f309ea5cd0cdbbd563f16cc2519f23c12e51e49736bcfaa34b96e732a238d3aa489207843d8ea330cd335dabc14c6715b4d10ed14d4a8e2445ff95bd10c3909bda49ca1fb20c77f816c878f9e6cc36d8e3dafcb4cbd4314a74dec4e98d58145d30978e69ceb5ae9dc9174b37429d07ad13a63aac02d8887840bad1427884c340d411e10cf428bb846cb640de554d4de4cce94511b2c5f850422a675252c842094d3f4e73b2c4236e6a1bf669af3b9e22980aa8903c2b0544f193d393aca104f8f47643289b167a9e59bed863a1166ce8dd80d1a20f8633d8c78dc270f69d80a2726d4bb60d9e25a6a4156356eb3c3eaa25f26cc1cd56088e4c8ea094c11c49884f6ae4869ad9b919e1c633bdee3b87d909c5b679c618f7d7e8fcfa599cabc43cd4259a24b347a96a8b37a5f31a82dd17f1815b24ba5d9648358f2c39c9da8512b8f3d91af7668b0b18e056a100b0a2c9659bd76cea824841aa8bd2d0091700bc567c2dc3d7c4b28e1366a25221237d7fde9b97bd0735a266c0997aa6baffcb9c451504d9c4d0d465f32135510c79c1add507389f70c6192a002e80186fe34a34fd64faa75f19452540a66c58132223c5e145168eb7d2310df1c19fbf88601108f7c27bc6f71ca94e747cd3c1e5aaf87a7bfbddf55ce86e851dd9060694f494aabce404b33d495544170af818f472c41e1d91eb8dd0574611dcfb6f88362f697cc51031f6822dfd9890d735d7b0182b333e8dcb92a2cd4c46c7af38aebc6ee401a8fd6ffb7648f6ce8a783988a919725c6765fabe54a8d596565b0e04c831b8cbc0f22b4c8a18d5586c546fa65fe55dfc10a0e55b5688968311853c04ca263c5db59500742e1c1dc8aef244bb450a3284d2d5381438daf39f71b46f3932ab0319ef6c6bdce2c13491dad85521e8f684a926595f537c1e714e0f7ef41ca23e91a2e6deea1138b6be36688d1d84cc48e8bb73d3d7a380c19401433b8719995f6c6b2462f7aba05b1f38e0770a5e6f7fc34e53ab1d8ee772d06ba57084da789bf7e530af00f6aa3cdc1bcb3cb81932e9a8c43e65ad702090caefaeb469b9d062b8939409b29cc6ca79519124834fb7350ddfac8a03f1ccb9c80fd78dc24221524318b709790876827b7cdae5085c7cd066d3168ecd7e3c3c6c3eb8631b0dfbd92bc72224c0c449f366eff0f4c3d9f45a486114fa46800fb73c1ec9bad077c065b7315df2265ab1aba04d7bba2242ae1126ec20432ba1a7b89c02641b8f0a0f8689e9d2e816263e09cbf7e3cbc0211ab386d6b0ffc95da49f209c4ffba34f39ca1853198d1cd15f9c5e81c1a009ffbabffcd34f96cc1e86f94e4ec5d1b9b1ff9ee6ffaa47a6c686e1cc6d8dbd8c391e84dd44649e805ebf55998c7e443edc91738a61fdae408054688a3db09ab357b6a0cccc987da2b8ce1276f7c1b9bf29bff6570c9c277689389f3c54d2be0be603922fbe43ca9f9723de8af338b89723db85f1620e59c56bb3f447555cae126e95e79aac0efbd38451183a116ba7634574a0cdf4bcab998257163fb1b6d1535bde0f72085287eafaf63e08d4a32cb0190be561573f938f77827379fc89ce4b285c786a75a6f5428563de7bbfa7beea1901b24febffb7f3b5d67aaa984e0b667e81b0d85674da769e2a680724c1b49dc00695de45857f82c7b3ba36076bff31a8fe57303d549df3cfca793fc689c427a88b1eb0d659509917baa0b0ec7c30394212da269ccec64674c46089f77864342cffab5c20f3e1c3404bcc8f99e744f9d47f981ff73bc9eb2798dc7a4a15fb3fd7e4ca34a7ed998dbbf7ac36924593dfda953f80cf343f6e72c84b8530db1fa733caf9defd9eee54f53ebe4a881fa367bee42efda7409d2cc0c32c4f3e403806cb22c8bf749056b58691814fddcdfa3e0becf4eaf1d959b2bc29fd1ce4ddeacb088ca55abf5a791bda90739af5d91eaf4c300fdd4166fbacaf5d3c82a71c9e8066592e453065bc148bac23c072e97757fa2dfe591881f95714ed79250784c9c38f18a1e37a3aa63bf4551064d7479aa490674ec2d9b2d96ea74b2158889ef2e0cd5bcec9ef51bddebf1ba7ec95ac0f31995c6fbf2762224fc116c3b19cc3b074bb93037d22336989467078bc205f3b7b9f7ddfb264286a66eca0eeb4d6ab78fbd44ede5195683fc824f401782a09a5defd5c1d21226df8609499e0d6a8bec2e291ffbdfbcb68b727c506b094f513d4f84d77b6afe4bb72b95362788b956604d58f2620e026ad5604c129249724065f440a411a932d895fdda38ae4682f49d5213642a59359be92fb83ebcbe339799b4eae58e79f5f602649ff83d2e0d8d2ba7201d5ca79b705048897cf252d97b62f74c41f7c191cd85c8ae1edb28a14890b247c600e27e12911186733becae1647252c6156694c84a691cd51911c874d56dd52071cf124a834f479cc9f74f890d0a653ecb2586f44ed27c53966f208c5048f0787babcd65bc258282e26d3001185e3898b14784134e3f35d7f62926ad8232f30efe12bdb53c2a55d42d9ef0ec0ef4295e683b00c7d0f5b5fcb8de5f5ad3a2793e69a267db7bc42deb0bfb169c5952c41a407e81646f9c891c4f0d1f36dd1def915ec9502af3899731fe0015b49 +MD = 2fa310e835e77f1590ce1fb9f3f8d1decd0f5c30c4849b1dce1d92bd + +Len = 57256 +Msg = b007fc22cde7f9957a0f3116b84dcf76298ba19c2399ca6f032cb7f7c42654bed0177f7d1504bdf45c682b1ad679b876f8ac92cd897bdefdfa66ac29f5382a16388b17d5a48e7ba39106960d6593165865358d1fcb0e213e186a86efabfc2933936aae74a20d9d68c2f258388c2451e2172d79dc0edafcfa063f2b910efbb9dd87bd2ba036078a0c97325be374b3d1ddb79c404a7d66d5f86bed855745bc43dbbc8b76a28806aa57b7d0855645c8fd10ec8bc9b13d3a1501f07d7a8879c72df6dcdc77c2c1916510cbd3c0d826eb3f455f00fc5b79de25dd3df6f46ed1a5e1f68cb91647093123017a44f3b23fa5fe42b806c18f57db6b54f960da4f76ddc5a376283b7b876c4cf06d2a062db97da3d09ea20094ffb7512dccc314748ff743c44234cea464cd48a64c8de08fbcfc94b7b9dea1b39afd3e3260288925457cc22398e2b70bc7d97febbe766b206fa83abfb2c18c3450329a295a9623aac0f3aa861e3cdef8d91a5a866beb8e2afb0cfdb03153aa5f48e0ccdb6516c94a27e462b67f492bb2c2173f41fcf731f388ad4651dd9de17bab8e3e1027af634ea2d7547b61118783a95897e2199f3cc43d157b6b5fa61ad2a0c557904869dafe5b55e79c6d9dd8b1b666cb3269ed98e542cb06c65e773eaa500c7f22714c14a277e583e34af4088513c841f995e82b9ec0574d2a8316334ce3eb1e904a61fa8221109016a01efd47e50663ff4498de37df42ba5f768de30080ea9ca07aaf74e67f5d76fe1924a13f57a9980b1f069af7c612b32cdee4340e4f92621baa3e6b15b9549e635b0ddab58e3847e7ce3945289e52a25b642110bd796ad6c88117c558f87d6e0d0ee192f0b53bda59f839c8108e87eeb2af4e5e5626fb6171a8416cf764614fc3dba9b039f23ab82a450f0cf7bf3bfffa687206217dcb6cdcc6c4463a2487aa4f6a6c1cd86dbe49225fc2f82758f53dfa3696ef66a7645dd284a93d686177e5776232be15504ef508eb5a73e7823e107cc2c1036dcc4e9d1b8af738cb42ba6a046b037e37c07324a694e0677e659de046b3fb297d120f957f7fb61ea9f0d79fbd2fe84488e7b43ec2ff5bbb35289a1522b24c49e0a431acc60befd94b9256ee6c53e8f84eed99ab25d7d35754f4bd17d667bd4cdca83c49b7d7a950f951c0bed7820c82d2faaad397c2512323f08f4e2a795518ba47b6d61c8bec6bfb559c76c7625bca5c34701fdf68db07e9459723e8911d96c2a829babbcfc01298c57280049bddb834c672f5c7737cebf01a5dfcd6561bae3bf41c5d5c492e2d19c9cb4356d69a35a1d638be158839b77e986a42be7159496f521827c9a43da4c68b2d2785bb9b27ec8d4be392511c53dce6455e6689df4da4eba480c986f65fe730239458f1e7785e1232ca06762ca7522e76b69647b3a423e648d023985f47c4e332f29921860e3d8e75dd399f719b279586b41853df34346c8c7fa0818342a5cae4a90ef281d3d1289d83f273f418a545fcbfb3546be71ea5f9f508e96739d10dc021800ddfad64093123fb9abc041266603e2ef25da32bb8169a237a151591d54ec3b619a8863c58b9271abdd149b71f3b9b52d6bf52a1ce6bd7b8da94bc2d4a17f57abfe445a23ebef618843ccddc99143de7a898dbc90e811291b1ec18ed93a22092a79cd2dee3c7f8bc96047ac9fc738cb50ff126eba1dfb474a8261018d977adc778d815386e5c95d09c3136c56fe0f083b4d11b4fae0e262a66488bf8431f02e1da9ef6f80705351a3dcceb191ae4d11a3f40a23c5e94cf7b945d73d3fa2189a877f85d65d84b406422dc800e260697435747a3fcd9fb162eda6aaff22505a9e4f4ed32c806b51e74f269ddeabbcfaac4a4ec06d546ca650ddf79279ded54c95cfc855d69bccc3712567ceaf500c67365d039b310cd8a23de4c91c31c7a9553d935c9c6902016f408f61b8f791e7358f0803692f498c2b76ac8bb6bb6f350ae2347c055855a1dbb1d7951b4bc3d5ec22b5eea8ccbccfa8b79fcfe07b4800e4202db73f38f9369f5188823410783101ae0125d87db94bb06d390627f5e4b55773e99e886f8f3800bc2ca9b1ea21b10c6d544976c6e168b903f2befbbfc79b0b59e2829f706a1ec63e3e8c033d52be630d39ba124ca7af5918675aea3d635a464eb313e2f02c6356743899a68e8dc1bbea1bf829637e97e717018a62034a5bbeced5b2d153489e17ea95632a6225536da095942a9ff8bb099c5b9df185df17cb56c4f0090e3137a0fdef68fd3cdbfbfebd111ea476987126f4d0362759a426f2730b4bf8a588b8884ab12b9d92f413e59c28e8057bc052c5cd09b361d33c01dab003370eadc1a9144d652b99e90043c8ba4790fc0412f87c9152c63fa70920da7a6741d98b5e81fb7275d960c3a2f41eb3f799c6c402baa1ce55cf2f298e1c785e81ecd7b2b1cb94568dc580a74ebd3e05a37314200211dbf08d3eaeff5d4d4ab8fd9897d88dfe8565f76087f85607cd2bf5ad52acb3a6918463a53d8cd94bb83634f588512583252d5d4ad55b6b5c329348b910ce79d159167393695694804732b25427c13b022a1939e4f734f13304e82726cd09d74a99032779a0d111938e5b1064f48d10e3dab5e7bf6c198a14ca771b66e5f35e4ae7f709d872a0d2fde40bb9888d2959b0dd90113ab27d8889e9dc8009f9ff717abc5e95205d3a4b17eec1283f402a67e1991420f758d59efaf9951f708792b3528ca653f1df01fc7a1517e709bc14ee0e93ceb175ddb61ff0501d244b0d51865adf6ac0cd66ac69bced7c60786f5d3e90643c2d26af939df2a3e148e9f9c07d0c3b185603927e1528de6b4efbc877ec0f70c90e9a4cf29b9a6b9df7edeb4409ef163bae34c10b81766e60ed14560978e44011c03134678b2ffd9fabc74070bf6c074113e190d9310e23f9d542a66667a768930c9c04470f4bf052fef697cb000b74c5319a807b96588592921728332ad140b92e3b2b257a76da744bfc6fa76e65e53481bffe4733fe09c7adf259e454fa6f10bf8f17976f2922602d6926ba7cd3df2b7ed288e09c6737157374c9fe587b4a263b0867f15feb5ea31d9d5b689dfdd8f69372bebc321c83e89d1ee6d5b7dc78662b578ae7cf35e5b997397c36544c59427a00ee5e879686cd95413f2ef5a6605d0accfedf2f816e1014ae17a82247d67b7d0db63c2f5d9640c69c315e8461a8774409423c03563e43306bac32aa68e72e1709a4c97bea58dedb707be90686a741717ce3a2fd3d0ccf5502b86a3f27f1b6f28518ab0fb534e43e7e6d52de9de3481d9851985fae20110d03bab3631d8cc279f0a0455d56c11d5a0694308f0fe2f7a2fc1a80ad123eb4c2df21a2b8b22ecd37ecca2ce74773d6c8b97ee69a653cecac18bcf08811af2700f58bbca27e3e3396ca04c62fffc3ad04f78bf973364773836ea76c5314f7f462076765a2ea61822128cea5a9e846fc995149edcbeb9938e36e7858a0a4bf89405533425c7f0f555179b64fe7b96461f0574747e6fdb8b926b89e49f3495c72369f7db711b4be19c25d2a296bbba2699469f27c66f51c50d7ad87c4cd6b552bbf26b5587523e44bde13b8d6a89787701019da1fce6a3abc60edc33d91934032348b688af93528781f5dd0bc20b59a21ddd77c868fc5aa487cd9ef28d2499412514e05e31060d10b009c005e569e40db683348652d7fd17165f25a2b2206c7387fef2be54d4fa4812c4ed641ccca221939adcc201a2146e3c6d79298e34360312adf38f61259e976ecf6b0eaf5c19467ecb7864be832810c19fa37169897d588ecaebbba02083668ed142ede640d3e53dbe0e53d1a2c0656d9caa608d46ccdac3fce32959ee301b38737be808a15864991aa979822864d5080d96e04194a8f179ece1c1d4b62d20355d1de65fa62e2d5a884ebd193d9cc8599970d8cc9b9b057742f06b58a103db4d3630d13178dfa648af0707dd08f1a629e93f2f77822c7e86a5150f2fd739b647a7bd90c73ef3392a38db3f17b2ead740a40bcf8a72e4c46ebd5a959f7f5717ed57ca0b6921f04dcacad34e0f6210c36673dc9f4d92493ff733c6e5f1c2e56805ef622a5f496049ee0ef51a0d41e9d363febb87070be558e8af61e86dc76c1058168ad5f0ddca975fab4b8c5977ff6dfeecaf6f020440750bd834845ab77477ae754cf46505b79ee54add8c3a2bdafb00e6c13f84a6e000265746a202b98305cfb3af6f06ebaec64793b103fa8600e33293f8dfd6184f5f02d3a02babf623228279bb2e1bb437774f2dd1d7dfaffb8f599c5c38408315fc67f548059e95db36906f7919ec8bda19c3c145f232ce536540a8f530090fb83d1d65481a23bf33a9c23cf019c19620146cf6133a3a0d8ecfae60ccb07be3c28cebcaa850819cb4e3de892914e1fd90d112754599419236336a6be8a1dc28bb509acd6e910253e54dacfd2af395e9b3b67de6e3f68d85d2fb3d7351e9750529f0f215a4c4ec0d4f4df641fd9f25820f2c74eff338670feb8eef1d10728ea396d6bb4b51d188f1784c82fcaaffd9ef2e9cc13b7f491758085448132c226f2a8969bd167e9f1e28eab319d737faf859986c2a708e10e587b1b510fdade35fc18b11c01f3218f6d92de8837aae7acce7d3067837297519c46f190e829c9ca89023368b0d7523572dc755888c16669bc269d073375760fa39c8e80b4b003590c0d940e7894fa88b4c4260f0b678a5ae11e234e21920b9d10b468acf00e195607935989c3bc990d85d2673829fdb214dfdc4988e848c68e6657168224847a65fe2c0a472caeac18788f9f507ef47c1c0ae99664021a456816dd0e8cccb3b4fd72401cd31dfbb24dff7454e4850c56d4e4be805be986f69ea4beb739432c4780e66807ba02142a12acf91e50a685b0d40fc3addd090f58a68284a724325eb094dd1c61788398921ae3b662418df148adeeb165640b13fa2452c764ba14bb7ebdc8d5a07b1ce988ab5614b72395ef5ca703d04d8d5a45497c77ef668764d300403c1c4b5e38975c68569c837348d08b63e1d8ccb56113d533747522f8ad25e3d0a968d87e6122abb667c65dcd213543690b137978c9f00bcddae130aa5834a7f38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc00dcc0608e08fbb0d7c0593c7e2b3a748062216117c6b893de96145b36c1393ae9f8e1980e0879b92d676deea30ca508478450124d43e0406b3855223ba4bf1de12bfe1ced2ccd83834eff65b95b07f64052be4347b761209c2ed9621448404f2e9da053f31bfef5209d970887bf6926b3f1f55acbcb441db8a128848a56c4b718754ea5e77d14f64e7dbd41d7e1d280e78c7dc1a227901e09b8c8ee6576543de9dc917a93fc18705316fa786f694aec2649dcde94724d0ad59c430a6d4ff6c9e7f9f03abd3e114a788fd51318feda52b6509c1b685483cb6574213f6a8ab4435cf5f34d2eeb076c0510d77b9a48889ae0ca44dfe8773b480169e8f423ce96938ef7221caeac02be42c38618bdf15eacecdf5d91da807d69f1a3229361c4a3a2c628060d05290b2776ce6d52499e647022b66e9b071a4f167c495683ec14e3564baf2689fa092992eb59119205f9a1cfca78ff6437ebbb37eb830d2c8c655e9867b50af956f465e4e78dfc3ebaaa1daf2b4c9954319bc8b4867bcef6095f1d5160623bc3e194c606b391b5c03059e0fa8e5bc3d3bfd37e75955621492aab27677fdd4051638e54e0978ec47e2fadf3963bcd0549a73be663603f8e8db8f184c40c4fa109a48d175adaacb2e27f4e5d6d7ac9e71eb27a07642f5c9e2a7cd83d4e4fdfe7556b37185dc6120552e7e526659377f2baa839ea6149d5d8883b0959ef8fb6999c82345ecfa1e94838311a5768cd00ad86511f9543f7d3c50fc02ce08e16fb3f45af2df19ab45800fb2394f65d728ca0e875d512f0817eeb28d2e8db122ad762babbcadaa44788b70386fc0e2bc8425449db0269522ffdd43938e55165147289626eb220d7a2a1f4b821f9a4bc184b50124c4fa050487908acbbcc4a6e1cf33ca58f8ecb190cca4082be34c2f7a9cf1ca99063c1d116190de72345ce15898303ebe805e454cf2b22c923546fc4c5f541786fe8d3bfdf066d5438f7e642a549679c3fc0716f31ed22f51902b40bb2e546e5b183df01ec67b059c18b99ddb66eef205d667d527b38c86e68e698b4b9c8b35a1ddeec7f85655c6088a8f0ce051924e00aa00de5f4339d9cd8a723a822c6113e7ca10221f228fbd053f7f1fdda738c420d162b10e60728e831ee5dcd3506e7f9967429cf7ad71411eb20a6537da4b1af306fdebb97dbf1b83a624f0c3ab1bdf333fd6a71669a308b18ca17b635d31b9039542fce50d88175bcac004e78ee1c931be7cceffe9bd6a6a19d4b0f4b28504bf16c243159265f888073787938e68a4315d858318aff8eca50434a4707ccda4a2060c8ccfaec13574b60c076c2c0916beb78151f52f1e15feb611c44b1e741f38ed720877b53264ce81bdf2e5ea5b97163710ba29e9755cd3ba2caf091a00bb0027a364b23821fce1d4bdd8854bd89be466842a0b519747c08ab5a32ef20c2e846f111fe3ca18644b498c36beb2f89ba5b08c302e0a0c6d41a27d7f1128fed0220e3b98a0cdae41873ac98c16c2441cd6cf695b16754d23e38bc46174314156859f837d5dc53c0b1232c64711fc33a603fddc094925c20202c12b18bcad7c181b9d992c9f334a2778cc32f634c35fbd99e634d92a8e038e3bcd21f35ef0179b5072ed24d9ba612d27517027f3ba10ca24f304395f30aa3f0b1a499fdfabac66c0d9e00481ad1992aa7d0e4ad3430f6211aedaa84b900e8aed22f26cb32292e0e91d222a4b9dcbee7eb97ded57e0a40c0c9428a4643ea8f84e91cce87e0773b035c724348c0ef0a710714f7df625672e622d6ecc5d9f120dcbc1299194ccb75b43625681c77340431c3ee37b3283d15faef52d7e8c33d241d15ba9069be4e6387e6939b0825d0348de9cda63918e6b066f65d549748f523aebabcba607e288de53665e3f414ee22ee3f5b4d5a7979cb9100a06abab141a3f973bf20e4d3807b37ec4349c88ab457bd8f3d33fc9520eee3d4c3213a464a2e650a6bc8de077eb6e3d1d4d36cd04a5a609f1e6008b201a2c43c6d81fd4f384b5a456abc37604cc553adc18bc82ed9b34137a4dd6719446e9cfe4693ec14338340ee6104d5270f30ed48b179c5eb89ebc62177b1ff1212dbd3e3f75eefdd625c80cbfba6a2a3f2801b694da449518189592440e4bae49370d1b328eaeff1ed6080a5deac851e1a3c44da3d143da6ea156107a77f7fd9eeb5ff368040d299fd17a943b21d65deb2eccf6128d18a33eb174693538935374c32c333a867821dba08636f20022c2ce01826c7b7e41640ad186f90ed0ac647d47086744867e5c54bbb17efcf62c150cc49b0d39154cb1558a046c61c0b1951aff6b1bf0749e5d8d8b82b8c69450c92a006d54f5e2990f9133532fc8992169d044caadd8d1469a08b88090e93b4f53a81d8fd01c86b4c3606619bfcdcaaa572fcfbdb9683d058638ab2173df7b5648f994690b37523e9125aabe98cbc58ae1abf8aaab191869c6afdbebfe13d5341da10d8f62b0d594ed6379b8575d1a619db748181f85e3d1cfd0d3468c10d9374630e169832391363c9c4bad57ec49bcefe4369c73193fdc064e19d79a60d7fe572ba89dc8fa15b10352a8f42713d3fb6ca55c8e425d7ce70e6a3815c58e81e7d4f3cb82b0cec383d6090a33515e39bb789d229409cd3b914cc7866789f44782242bd2bee6fc2b3d2931f7c14315fb6ba81e211435e2fc5945f8ad63543ca96bd92656b8b81cdd2b716ffa4488e5899a8fcab0a553292fbd8e40158fb0b217f37885bff6c0ab29fd53157a33af4774a6740589bdee1a461c9a6057532c0f13b766cc86ff7d21c22122c4fff512a64d3e1950f4d46340e024decbcb3422ae4d36486d34496a0b162574e1142f4fac63bfc45f8a6f5f078e34dfd519d9411a04ee81da505b03d19678de1c2f38d2a468ba2973d3053e0890eb222eab88e3dcdb4e97a653aac72fd399a2b8d9b83838bcabad20373c9cbea8a62a3b08e9976140e51e63c6cf40505e1687598c13ecd3e002c3f75f6bd78435f47c8caa61e831d6307a75222efbed866dd060bed26d00636e026b84198b03b9648d96088832d8fbbf305cee405671fd0e3280fa8a3538c73bdcff7dcc33b7a354c1d9cbd323c121efd4ad83a9ec681276121cc781d2077bfad815850a4e1a9473ddda4cc917850950dbc9aad22a5a7743e3a69e8fcfd702298850323a56a70d10261a03d0aa8ee270ba539c4f9ca38bf64bb0e7da8b31fa5642421e02d9d76dd83f1b999039697dddf4be0088cfddd0ebaece5c1890a2b4ffaa3da0ca3436472a8d51666e608f1bd71f7b5ff41083e6b2814133b07c93d29424d55317124e1995954e12f1ac7a4d2a9f0e03381b202dd967dc3738bbafc392469bbd6fe0896597eb73f79079b592170808a2cb5c2d26dec6d1bf27ba31189893e3384b2b72abaff475ace154bb8b4aceddb7043015521122d433f414d23215715e6c2f5f846c4c4495ab5aca168924780fa8995373403f10564e24380db077836fc182f959280b50867b7346312c3278110ff112b161b6f3ca664eb03e145d2e99c0ec854b5f5bbcba75b155a5d503638445821a7a46f751c304ca0a0dce34f76ee2d28fe582bbcd94529b74ef2405aecbf1e2c71860aeceb2b22c91d74e7d6241bfcb85b222ba17b67a98307789b7de7a8d89a5263f1baf2be6fd043525b4e3d4b04de32bcfc53f93664df4c9869866f280fd212e32ec97912b91cda1e46a107a5cb034ccda6b99bd9e134e6fab35dcd674a3e79afc7ffc84e8b15aa7fb1b6cb52db9072fe32baa978a8eb9e4581ea498c11454f6fc746269b6a237a1ea375d07abceb6af7a7406a3d426a3a21d9152ac0ec4f5bca3385dd21e0ae14a324c66043f47efc5f0d32274e361b8238c5c6ba2a64c4666915a43307741e3eb53c91c1d80db0f2df6d7728d30c65402f4ce53ff3000d38f4748a7176afdbc1fcf4be3c5f8fe8131ecef9b5f54daf3ab1765a0242499099125921de95174d652253351901009026c5389f16db806339644c0d4b40c6b6516bcb50c48d36ddf1cc62dfa0e5ea0ff47bb35192af2de805f0d5e66214ffe727a8d2ff698594f12fa428a21934d4cd45e948f77296dca666fe1ace8ee87c8ce571761616a6b7f3e552ad67cb154732e0b6fe7affba1605243621ab18e1c60b516dc07e13182949dc7ef917ffb1caa68f8bdec07e43626d063ff467482964ce3445b71da802725ddccf1598fd2fe5911810eeb23a594946d6c29be866e8de3b55a164dc1d8c1895aded08d40db8205b44ec38387a2252f85a661c18ba45bdbc7e27cda3b9e0a55b1681dab17774046cdbc8c43b85c905eb5bd481dd8c6987b87582fc5bc623a116e0339319828a182ca54b98a1a474ea87a0b3d221237cc7970358f9ea8a80922dd3aa3cf37723e4046a1ebe541f4c8a35f3ac15cbc8a502c0f052ca3a4e1d020ab78fdd279e66f15af1e83e3a3e786c5b1a6754c3c30cc29d041779325922781454897c9c3f7cc69703521e3d49201863de8b96f15cda8e9507500eb9f5b87db37241233ca28cec2468046844876e17b307c0e43ddb37ef10c0a48fb96807984fd85ed9ee0fbfe967e8a524364188f0b55db0458f874a6c76f8bc0619fb3651504f89a79acd3d47ca4add58fdbf962bcfa801c1cfa93c8d30773f7ac1f66d301f9f6a9328252d8db458560e8049c1516baf5b60e58934daa405d6f498a1d6be2290a8a8815fb7448dd8b54da72730e9f03b672bb96f5bdc3b6a297b88439682c2e9eceb8bc305f3bc93a51e5aa00d7bc614cc2933a3d91a5d6ddf177926d8046774dd662f983c22ab51cc8781fd7d8f550233623c6cd51c73d8a0d05190c2cd7af724205628875ac1dad2930487aaae04cd44dfba14776be37116aff9ca7c64613b6821e6b90c2166f56047cb83bc5f3d3ca6a797e1e98e1701e7bb591c2f5186085272c994f3 +MD = 44c630a482a602e6b25498a2b78928501a4369014817419b2dabce5c + +Len = 58048 +Msg = 5cd1c4a7be641e9c0c31d4672a9b8c9ea608e4fc9b376d5ad5d4f7da3549106657d8c75973e6b67b819a3f33a1a715f8b966fe096028d85efbcadade258a1dd255185b9abaf1f69e6ae83c88bc05e9b1f293edd81c75701a39b9141e9e707a919cbc07d25d2ae8ee0f4253ce445d10af99b739d396c53e76d6c92b0468a32e8974ea5469223b9351b7d10d6d025693dcf6f9686198c1485b1c21a9f74acc41a427cac8c7d2ccffb0acbdf1cdbb99791e518204e9e81198af51ea165e0e93bcc8fc86ed54358435f4342d88573aceca5ff17a95d54f5c365cbe4bf8a37a9fa6df3a434b79120c3c0398495871469c8f861f08a18c954a2848ab6dd92d579907d02a2c689c320b1cc7203beb84a6abcf7b2354b2768284785d5f7740646c28e7831466ce275e2ade271328c9f923a4922645874ffbdeb22e812492b6b083f54fe0401c05805c11890abb3b7836852fe06fcdc90183707c509e40e6c27962a746cff5749311f467255a5e9982a594f3c23e02414e760188e89bfc9aec27d2e7d5387c960240f0d5bbfe456d6fad17993f7b2d18c13c5981fd60a0d7bc229b5d03031dabda77170251deb8ddc5b5d8c8600e9675df3d400d98d574c4bbd385b0d81820dba11d3097f2e2fe110e279d292cdf858132e27ed4c0e2c08a70a058895c5fcd4de199043ba3f26132d16a2f64abd642644191da7f7d6fcb5063f2db8f98c16c2a21555b976ef6276897e65620e5dc144594b31eb6d764de3f1d32d76b93244499eab8fc525ad699dae703d905e3d7454cb4b11020d7a9417f25c615c455729ec3c32ab1156f7affb1492982bcacb11ba328f1796684263c3703185a43e791c2d034134088b6caa11445c017ed4850df6f78dd2030e7c4178f408e7190506bf8e7c5dc725236afc62c64306140c09ed8db2ddccf25066919b06392215298e68830ffeb0f1cf80fb8212de1285b1b81500cce554cedebfe8bc2f48b3131c8ecb9d469a9df8d02d4bd1a293c34e961e38d2de3b260319e6cb5ec7ce16ad7e764d5fb8c7ea94e5ee41e3fdea74c909aabd864f45ad3992599df5782fb94e9fd3522cceed33706142923b9d68b3af8cfc179d98ab56dcc8a6f512b8e4377121349e970190e4f5e2a8913b09951c4ca080db8b62c2bf673d5d5528f2820daf82f87710f9599bafeaaee384bad5fb3ae4b76dd20632435350cb22cabd9fa86435cd704cfe8da408d9b3fd8b39c1fce4ba2e72f41b608f3bb39f025a8283a449c9f21e8db9c3ba8b406643c10eef7df4a1445f741ad3ff8ac637686ae9e46daab024d66593922bc1af244ac892951ac52a9797e48d0310cb1932c97e4c18710178c44c67245f9426867c96f46d794ff0c6a6b097da847f772d0fa9f731c65b08845ec504d4a2703456edacf707f289e205e03e308bce7809622c8e883344980a8362e4c13cf14c75a0d5f122faa7551358e2a5312947a71c6917eb83b93994a1c66f301eb5d28564e4e4181aadfe3e2f300c6a0c3b96990a9260458c3c0bfd48fdd21b8fe7bcb77ca3966640aa6da1704bec01342b21ba6e8e84210444321e7a7a4a1b973b165f476d5b7037687c2ba0dd001f4b807f77a2ae02127e6a5294a0cc25c4c73875e93f92a1ca5170b0391b93c708b4c4167d6181487e7d06d3dc7673f39b926861e1dfc407e9415b90565ad0cf41f27e7d180598e5d962b23c72460241f47b3350d592620c316971a30fd944877f970819f4196568c7d1e4f2e2a9e78f83f431c941120d1d574c5b4ed2314f6e062509838e17772fbe4d27adaa1ca43abe9fdc4190b915b9af6c812a29dd52017a0efb30428a3ec91126e2b33518b8e208d0ab4061022c7fce3c8b9b93480cd03fb745a6bdec3cc38511beba1018a603f739174c1e87b1ce285ec3398b0bd068ebd0715d5ca7e18d7e701418c7b6fc1f0e3bb8db45b436233225d06a9d933d29f2cd26daab57dda551d47b55c85e1b91b24b086453122a1d90343bd52778b391f92fae9526768199c3b16cf79e88851a87f97e7de31c2e2bb70c5ddfd516d43f435aa1236a8e6de938995184b6c0d907f3c9839e625c82cc1b00bf011307ff9075e086ebc409f30224fed173bd8187f88a3dd03c5d3df88d30d3e7ef6dc6c6240543c874df63c1731d44554aff65024acfb8bcde203adfdd9cd860d131dda8687616fe55293659ba861c658108c5e89d18ecd20a77fda93bb390a27d2bb726ec5cbc90e31e0c1c56f3e97aac763e9b6e0a2c9827b0e0f526199f3539a7ddb21e0db718c54a2f99c6fb3e2d33a439ab1c280a77ec677f443b435681ad42cbda7c2d990e721a4b4288e08cc59d3f319845d709099f183306d9a549202e690c209510d4da502ad9b72b5847fc6f93d0d379bb9ac5d62fa6cd9fc4099953971904e77bed1505e845681cd7023a113e71fd063a5225182a44f8dc33fa45b3597cf7e1b36436f9cf28c5ebc14df738bbaf6599c7a1bfdb9488293d59adbdb42ca28a225bbcc8b26bfe50f6cb8dcc3c87e3bd93081beea70b0acf31c99679dc9d142c17c96942b63b30b9ec3a4421932fb95590602349f0da276b37f8370293075c7e30a0fc2d7bb95a312ab1f38fd31f8ade00645a4a4fae787dde5a21d08e17e5c10b66d7f18962f58740b73e6f82d3f2a76189137829d478978383c97c142b4ab5168faf2745c47cfcbcae675918e96b523243014c06089218d5f9a06dcbdde5cad08fc447575a6b31fd2c10d51bcc6f6f0126865e6aa77f923420491e1b9c6172d7fbc9ca34a14aa790a4cd5bf209794e4ca824f7de2d7b942c9c160599e3283d8b382238541595ce05acef66320d0380835c5fc0c727209f2dc1b9cccd3eb48b68d9600a3c33c735caa9198c5253b8962397b941bc1108f3c63586dc0c2b90fcff53f5c85398694f5e2dbe16e989e30fdbfea3e323779f62746c1fabfd263802cd4c65fb409ff69b4ebf5fce5dfc2d4deb05c23da3c74e4bc6d9e6c506bb342d4107330b79d6f9aa0ab270fb2646f1e0ff2176b9a38ca0202c037eafcf56ffecf938ef8165b9ecfc10bb8435e8d6cb5976f643dfb9343f70128d39d49d8605b26435fde5aad54af20f3f2bf70c483437e0d8ac184b5a76bc18bbcadc17d4e02e00a2e0b0afa58e2c44c1bac70707a6dccb6d321bd07be084bd33841ec4a019a05cf42a7aea97311b6fc7c31e6f81add8a5185822eef5073a6e6908151a840cc9e7ae4d9ce246de4fced5d775bc62b3bc0c6e90f60d62457daae0c967800d440b1f25cc9f3d20e02a00506a55741752e74fd47edda25035af011f3a8e9b8869d4921f2a0a41b1d14a92ebee460d1bf5fb0dde7472442b524eff98fde2d3a1c8b6beeee866a6764c1204fce5c00ded3767b501043c797025edf4d2661cbec5eb4214197a2cc1ea9b20c507e34bed0771ade3e0b094a8ab2b0c8f501594b3816bd7202361d52a8b58e75181695221074f3df8d21c235858cc1b3d868ed36850a516719131e846e50fe6491dea6b50492aa8926979611ef593aa7e0a245123a0316066f76ceebd641aadfa21e90fe1598e7e1f1b8ac6430e1c2adf4f98a6ac1c9b459eaa7550e495239f1331d7a86ab5051f1d6cb2db9b0ec02ccfcb3e4c38124d46873edda753049549f2d248dd32f8091c0be174095d642a20ce1197aa7e2dc1e39f39285a9f1efa2f3767bf06f07f14f568fe50e820caa49758973759d4cb839d750dc7f31f60cccf4f76acce29d6b32bc337dbf07baee9f10dd09fc2e2782ce477414f095a56879aa983949b258b6e2f990277aad46d44ee4c52238e0db0084924581005e68ca521e422f8e699f990815902b67fa1925fbf92a08513ed0fb04c1ad6dd513a6fcfe57db95c48edcdd4c191ad0af789ba85058f2016ecd6f3af5dc931e9a3cc6c4265d4cb312aa764a550c15607aaf3427f5080756b7171e8700e9dedd756232eb72397ed1a144d5a8ccf66b21ef264d6892114f4f55a346a8cdf278f28e0c513989f2583799e461bf58df035c37654c35ce7cb43370f9506603fe48a50ec28b751490c12d21138257a2d0c55879f49b5451501d4c2fa2a2894a16363e1d0c4869ba1ca3fa6157a03751d0995fde5ca08dc49571e0bb25a6d94c412a04e273f0db249de5e7823b23280ee867b78e24c5aacf549a383c0ac31eae870c40867eeb94fa1b6f3cac4473f2811f17a9b0d4717119947f9cd9da601f1bf0c43b30b6a25ce39f294106fcf85d517d917d6df40bac4b5d0853ba1ce7a539853b3a09a17bfa872ffb3db9ea1a31270abd7bec0dfd210cb71da70858bf78b04d578839c9df388fd6cd7aec964235aacf84eb56a6ae9905aba6deeb1650602950016ce7b637dca399873ec889d63283d3cc14d24886dbde408b418adf02254c97222d3ceee9af6a8211d2754a40f0591e7f3f897aedb13e7fb4180e3a3d8ec029a0145ffb5f798d98537e1a61e637d5b983b4a2c44be1cd6e0aab9eb069642e0f65697865ff02b3e33589e05732cf9fabc2bb46ae08343418734163c8ee6f3d4f5774b1b23311856ca03deeb38a7f5efc229c9dc18c721b82d824850a347796f3607c306c6270ab3a7ae06dfd5810bab58d9ece84406329b6229a2bfea444e00267cb1d1af3e5cc55adbb84be034b5dddea0a02808ace07bb37ec7d2da49dc48553a7a145503990c61f165c7cf3f5ec7c2128603bd37d5d990162a41e9d4cea830e59e474e034a194ba391cc290d9129b1940113f8436d2586743c859f817f9047f280d2f0b9da4c7646bed1542be7540bc9a3c1403c20e0150d910671bc79a118e5e44ff393e446807f5f7ff716bbd76f17e0a40bae9ba9ca66aa5cf702474b02342b36ad2dd277e8a1f610785a99342a033a34d0f727e2f503faf195df530ec261b7ffa3e43f511d53154b6e6409faeb1022ec36c2701c436a055ce4c0475ca7f32d337e638572ad073f792fcf888c10d33d32838ceec6240d4bf75a417ec5417cfd5a83083f4cf632d73253099f6839a0ebc06db30e61256251696cdf73c91d439add585ee760b76a6eff7e8ea93fd41da0ee4bd1598db60d982b92f6c0e899fba84464e3f82e3f127948e8db40436ebe1f44b4645a9c546392a67323d0a4561988284f13fc361bcf8897488bff4367e6994c2de87c2d8f08d37273e34d7cc001cce16d8b6de8cbf61f7313fd30906e4bb16d1eda48b1d461dd082bb171e26668e9184696c7e6ce3aa064b1cb8ebad031fa300db65ab9b31301eff11af865c7936f2570e28490a0e1add4c86354333c5dc63d8108fcb5a97104926a8c4b875235b1a162eb4e76d29faa5bce514b9a1103c7de0f4ed92636203787fe81e5b794a47304930d6019d1d928521a01bf4fece8519a0ef46a9bd7852d3933a841871d8405d787e573fa3d02aa60521139d52e60061a16a61b770c34583e904bf9764b48fc92c7ffe48862c0a30efcfc35ba640f57b6acb0765852923b009af987f5ac67c9bec9b95c54e187a4a6812f5d701c4ac8f847c005b039436817ca4d4795bf64efc413ae25d047bc11cf7526fb96b5a6cc675e31440f2ebc41fc94a3e2c702c4f13b2c4afb9af3f28cf24f7faa8ecea7f47c76a0bbd5b1616b278089d41a050c509c7a1c280574bf78b77695e4c8d5c2b3b0178ac7945fc74611248b85ff44af905083ae35b048776777911634e5598b9caac74c01db88725541e71582f72023330fef5dcf2bfdbecbcb155d1564d86711b4fc80f50bc9e73b424eb45582461bbb1303b74ec8f2fa381a79e6f0b7b0f9a5772db61bb5a29a4a9ac1d4783124dd8b1267572f27d6be1efe4550616e9197da59e157e059911015a3f71265843afd35869099fab9077ef2eefe05e1e9f8d632e59de2ed7823cd2f0644ea97ebf70f4cd8061c3c0d03b156550a93fcca354921a2e9e38d91b935f92a41c9a9e8e768339f3e3a6d845a09abd901671c8ff545390a2bd65b26efeef698644bf5fb9abc8c34bf90f9cf88cc85d3691bbb9bb77edb83fa37d0b8366cc9d922ce06a46f60b940f0ac7b3f0e8e56dca81e748dda4aabb8cb9488b60b13c55503dc766403e93d3c77d97c7359d3a17d54ebb1c6fc3d0c111658ddb0fc988b949df3bfcac6da9a9fcbc457dd0920f81de5f00de78bba8f1571016a29894f8f2047b03d4946a953e342e997fc8aeacd36d1e7d3501767a74e523a98901fcd3280977e895ff1d9fb9fa3b5d7525db58360af2fcca11db8e7243040f3854e86382e13db2e8f66e0f43d34b5706f0005cd23e434344b0d22b12fa1d1056993fee291333297480452c0349c650db300400ce907a1c4ce6439a7c91d5738bd6ebbd4527c314e2a58a3f22e315119cedd18c5289fd4d8abc1624d99093028115d318fda6543dd96d2590c72a9e5ff02f4e4888af359ea539330f5180c183dd5ddf4679174d6a02e1fe671ba4ca057fff637c968d8ad9466683a30be8c6bf4ab7f791e20218640508fe0c46db01c9f264f86fa4a865c41449ec2a30500a7e6e29033f60ef1cf389eb0bc66f57ac75f167f56adb8a2c29b8ed57eae740f587f1beeb991a67c1de36900edfbe9e31cf230f42b562ba49ced957ad2c5941efa47c7b97e739f16fefb501f09d5c3afaa03164c89862c0227b2091d438adda609bb76af071e4168eecae46974971b36dafc26e6d5b032521fa34a2b6560c94b0354992dc7e445d869ec865ed2a248ff4c67f361a456c70ac12bf923ace9ef6473adbfb4458814ec0cdac68d98a9e58f6ab10c3b89fc6292d8a666947e78a888d7214ae1145c271a241025642af0795db271c1d2db138d80b2bd330c7ebf9d2eba59db2298e2f4f95c1713812e286cf0a024b4d63c3eb06aebdaeefa120125dc79a1d0f767bf16f0217a115306b438ded04475a401d073a7e089eacbdcffeb08a1a3dcedf5330594f093bf584926757ebf5b54cae07b3fde3d34c71033fe4539deda5f64b601396e660e7e1f69f1ab56c9c402c94c817d645e860455bbaedcf66dbfc8fa4e8c3ad2de34cdf6ed98330d8c28e01d9a95c4d0c0d8131ad8641ab4faceaa2d13468268e5c13fad48acb4f982f47d367f2aaeaa00b573be1ec076fbf271935ba8c298a6f91e33710f8199b12ab14aa25eb283669a98b6edf3468a41e152e5347372e603a4c65a00a6b969baffe9d8ffbdbffb8d0b1c5cf8fa68bd1d33ed401607fa0305653413cab2d6ad7d7ef8989d10c56f83be9ac68d98a997e486ab149edaaa7832b6e1e13d985bcd7f34880a18fc4567f131be940a627b933e4616d32d6016adf2167a42e7dbab42469cf2cde1e4c27d4c10d245fdcc614790feab1c403cc12cfa0057c9480157c45a34d324864ecf080ab8804ce65afd1d731cf25085c53c6d8100f4e4dc8de39c207893de74aebda093b533194272a19d6b2d67005caddaf84d94ec1623f5d1624ff4df3c4b8930cf9d83854b90c7f14fcfbc83ac433b4f45a638a7edaccd939f1f25ffce6972aaed7e9fd1546fbf5e9d4726c2d4b811ebfe2178a2dbd569ccab448880155cdf9ea2cd86b1b42dbd5c1e3808cefa49a6435a55b187514c7ecf2f26890aa1a4448e67f0c4a0fb59667c3b38dee28d768ce802a98fafee60612d835bc3f9e3ce25fca58ed6298a713f318cb025b81ead1a3c8f937f9713bfb56a604ab5d86c39185bf3fe37a5f213ac1e7b3459ba1e7bf2d349b9edd761b8eff81e89db109b83803edbd565c0b2af31959f4c07632d519b2ed97376eb48fa7579368fa04d022bf217b59aece45cb26429615dab4d9bdc77b1b756974d49e2ea4040c2b1e82090d27919c5399b50bbb85c59efa1c40a6b0d0e4be9bb67d510b2ffc5c96c7c8750c5d590dae8502f29a2a0e178a780f98bef873f937fd58af2640a2e1a4c74a6fa30bf8342559d588ac799a09f18eee9cd83deeaea4110dc0671e1e22bde5affeba78999921dfd5d6d7b991fc972683b8e6e57e664aba438cb71399a74aeaa02b3aed62c50bddabe304341b76e40a79f6d1394aa791c0a21cfc653bf9b19fc4fd09b27b3f491cfeb71c305e014001765e7f817bfce1ead477205d2b9f5cc9c47c100f0d8f4564775b05f6852413d222f7d90538eaa2017ea509439221b13347b0374c403e657cbed6a9ceb668c54627c9c70caafb3cce4bafa15f97081aa4f6a267b03bd3132e7a30eeff1953be252adc32e0f8b61716e09ccef863dbfee37959868427d6b6405372bed3d86f6637d63900c74ba39ba4e8747a581d22c5b977dd7d102bcfb57bf3a3009018442643d0e71b0acb4b313f093f8cc5ee66d6ee9837359c70477aa7ffcb9c7f04586413c3ee69f19f353faeeb06ec88fe2d9b4a856e95701ec66c8c22f279e8c136896d5557d4c3f0e92fba37d182e974027b95e68a84d45cd2f3f1022181137a63fe1a2e2943cae5f0672b95a6362f786ade966294ec0f52f577a047609b4755682ae2f76c9d4ca7d151c9ac8ff0a434ef2c16a293b46a29b6605f9ab5afce7ace748c5828cc925d14535b2593988ecd18cedd4e8fc42d099d17f7a32aa6ee121d46e2f866b7e43042d7aba7ba16366e6d2ab30d9004a01933023009c666f045db07aa802e468948e2447fdb0d52e43d77a960879f5c0a82ff8ad17491d81c3a921ead978661cbcc7c02a0699334e062bdb3ab65c3b4b56b8a17a48e94e4b91ac9f5b3e678f0f0e59979d6f855a57106c8b15d4f05f4e7fd5a126ffcd673110c09f384150bdb41bac011e830598be0511e093eec6b04e960f9e1fb695f6b6a39d980e7cb470a06747932a0bba9d0766a492516e500cc03bbefee107b38b60dc9c104a5b03566873a4c44c43e4d5a787ad16bade1c9347c36c2a075da683a42e349e7866ddcd50b35c2af1d644b1331a83c45cb89d0259efbfc5ef42ff7e150affa9252aa4540dc8c62db73d2ade1e81d141a37851c85af2f24925322ee9181565b6bd10e76904068b4308e337baee400e052ba7cb53ef8fdc3a35b5a54341b00f5dbcb4279ab80f14117352dbb616e7a29551c17a436c18b60f9d48031b167d44e4b07ee567be44e90f6326877e2ceb3768a25fdf057520183fc863b8ef0adfbf0214eb913e7b3a82a364b8db6194cd24f5b9cd6a187f288b514393472d9359d63c7684bbad637269540494481ee30003c2f4b4cc0b0ea487ca9b413e55446e02da31d4d5232b6f15b7bf334df49c164c66ff80553b983686323c07fef4929efd81f3567e4e27930034e1306d812482774816ca9658a0210efea252099a027f0eca1774077cec80c16236f6274310d70cfce6fe1fb0bb26aaa66ab9fea41860cef93ac8113deebad1b61d1eebc8e58685ebec9551f24da9b1bff19a4eb148e6a6b5c9cd1c0fa293a9a6fff55b7117136a9ba41acd8bdc1ceca1e39d6a2028933e7640fd9870acbdc1cb7c13d6da39f043828a08e2fbeb0294029d1de19f1bd8eec13cd416ff619ba28a0e14fe72a2cf79471aea52a0fefd4048aaa6358ca73a401d19db081a65bfd469225322c8f5e3944fe3396d498c6f89ea78c0e6576f39cae0649cec402d9ccfef5578e44bb7ef2d036f70c32427dbd97ea3f874adc859f7b1a974440f3db50d9323d0d3895d349c180c1ad4ef35b4a76ba8a750fe371d5f17550bafd5fa8b05eafa0550f04a7679d465b212f94a9c8c37e3681ba75fe65977f3cd70430891516d5470ed1f24074efef8b11dd0eb05e07a00b5255797678f5a122445c4cc6a7870cfce18746e7973ce31a256147b535c887d191e7d61f359441cba90d9da78d3bbd857538e8e4f80e89d004c2290374919b50e5797642c5fbc900ac200973f0ba4eab74ecbf7fc0ec4b7457089be144e74450f71240264fb29f87f89c7a74f78a293683abb500175f90d0c53b8496cd54ea986eba1c15fc422d283389d7f0cb35b4ee4c7eb1ae24eec1aaf764ce6b365ff5f1f379f255f432d9ad06ef08309343599b776c9cd3102144cb948b60a8a891cd232e58aa2f5e0a0ddc18d7f47c783a7f04ac7e5cb5028082fb45b622954a70daf6c65e2deb6253307f1248851ca2a48df292bbda9c2394e301b2effc7945868532649461d12a94aa5c9b4ba2573808ed2dd12bfed29be4d0a7823dd69ec05b349eaf002f29db55e23c5ce7337663ef067d12d6b19e91f8afb35ea9984ae475500350ac7f3aa01f42e6fc2421c14ae040aafdc5d9472d59e9eeed392ac6d95e4229eea03a4d9f783124240a52801663037b39ff5f16998ee720d8f774 +MD = 8648f814c31cc68e5c8f43b039faf7cb72d618b490140253d8e1103c + +Len = 58840 +Msg = d09b75e87d246a9414ca73cbbd2a853abd7fc30de274fb62223674fe7fcce73f2eabcb52f785d5a6df63c0a105f34a91ca237fe534ee399d9576e8ff67548f8c7b2c0f325384a8c3ccd6bda6ffe3d7cd6a4bede64b5be3d64d26506366d784300045caef57c8ead2224cf24275a336d4e6209679ef61fff5936c359244fecf15051f83f1ccfaa3bb2aece8de2ddb6f9086c90104e7a897e1af701df4c9707721d1e1c2a079c1dc662cdf26e0f13288e7916eb6f1fcd9b284e95b93f1bdd5843eaeb40f6428c69cbb6f4c34b287508bc351393ea6f69c59c588551cf1e7d7ff53e2c0f3a59fb1eba23d5c9bbab7de7f0b0c50208d9d98938cd685425c101cef48b62cf5cba729d103dc36e2624b846da70bdbe40cb87668c119148c9a004c5c0572219e3e08d657c69504911109e95c7e9603138d11dde04d9a2a82137f104e715ec674668a6184d3b0eb312ebbb6547af4ef34776e760416a1edad2f5510ce76c24401acf57261127515492327925e826fc9cf3298e9db057688945749f3e3fbe5c2cd7610b0f46b2caa61571626807f4db66c2657dd6d026021c0f1256196e910695e2da4c447c71cd101324f1ac457d7e094bb72fbc3f6a8e1b767af04ee268b613e3a7955620c8eb3b21c9c1532f3556fce59b3eae4c797ef031fb081f39b9ed1f503570c4b24ca78fb7dc3bfd13b0f8ba368e052d85f73742b83ef83ad3091e109f206910cf5184765bd8dc1a9174c5a9a50c2dda8a48497b8f936b025ceabbb046e4d8bad69c0487744c2c3c27056073b7921315b80148131eb4bb0625b35846edef6a3346709a5b97b2a6c252c73b80e4bc5f6f9da69591ec0f72c6cc07767cdacc780abd63d83b3c88c65d935ec969c2f75d58b99cc4808e002cc4ce6b98aab3f89cb19a0a20dee94b255e67109c86c8bfb7518a7857676b3343709b443158fff032b87ac8068f14862e555ca117606c81d80a8ebdc0af0a15516ab115c310254ff49fce221bf444a65bd2d274ecaf34fa49b444d192cfe122c103be74e068ba643cc802acc3870048384766f06eaba875770f2b58306296e82cebf1d5fbbb25d995d1b6cc8fbfcdc83e3388c82fee3d700a7bc0b63bdf81d1ff7429bd878ffe1c7a4d6905e31703c2f817c650a2ff7a965e8aa37017cf487cb34c9490167fb9b9548b87ed602558b4d0749e2e5a47d6450dac322a569a3144e2d5e0f21ad2df1cdf2ca1f78953131a61ca8eb5d87fd6f87250fb297ac8f2d6f8908d581751d4c354913598b138f960269a068b8fdff34d27296d01e6e4038f7f1d0836ae5541597f69b1559a3f422299539413f300c1afb69616584d73d9faf0cbc01222559b2b9a06a3c286eea3de2497b5f3a48ab89c8b177570f0e0ec85c83d737f15eb48d63f089b4419cf84ff62d6fa8f16c65e903f3e090083c3b1dc9fd260d21b8ee0c5f8dff67ec54a7c02ee81c05abc5c1a372d6a5f6b7884c04bd23b36cf95a8e997421d43b71be7df850238b5eb27b471dde03cd73631bcae7ff9d853ac06d1c9b6951101a1703045f2485c29c4cb57fc00e2160ee551c3d2d5812a461bf18217a07c7bceb274bc45d74b7cba5c29bf2f4ccd9674ed6b42b3e902a19c73e84249d162be096e9bd445b0660ae635c572722ded3e87d2c0b1e826f8eeb5684d8ad6e5e248202a5820cbfa32971bd610ea6b00db6ee629f489d61bde622f4db3d4454a65bac19a3c1a4f313ba1e9a1bebf808212a7ee57994314341d9c78b89db72b7b87865c22aa3955d1ebabce4d013a490e2d9a2ee00166090c410e002d7d9beff5a22b6e5845065678cd25482c9b132b2186861657ef7b5b00e3378410d60b1955501a56bf7ef9f7824a9ed5c4eeb2bd58a82c432395eb50be7e994307397d1df70be3d3acca9c8f7afe88f5aa6e9166001cdd13e7a74ea0917da3eb751a7a9467501833b4ba56a4ef63642641bd47bbd45f1926f8860db1365af7dbeeeb7be332a718156bb0c0ce4be3c0f62f3d4e2531e970faead4b108f9a105a2d93f09a0c59b73e7466053721d2a1fd3c7710d48a54674fe42f5d12e77ea4dbec887ac43ac87bc27b92b9726df90e15daefb1d8caae085af757bd6881d9140be3157cc42640641655884f4530fa2b5e24a3de777bf52338d16d949ac77307effb821e2337881a41e890f038d29e9fe003dac03805f15ff258b909311f1426911a168a68d46a464b1ef1c4d4bbad13a35dde7fa3d16a658e768245b4f38319f8291ae51b67ac903dddf5f2a054ef2eb01cf542404528dc17121270abaa89872c11d65ac457179f1e0fe2a325032b990e26683198caf26d9213afb19eacee1936b8920eec0c731cf69b01fee9312bfbc5657f7632c992c00963a23016617a761d08962c1aee88aecd699a2c7647b5fddebf813696a8ce7c83e933169b31f446e9e829dad7651dfeac61f55454ab9247601eb89c4dd16f49098da98bb3842633a23f9540aad9fcb39a6b599f09c78a8053696acddeaa3dd1a2374eb6e8c2d6e351f720881bb2eb76a06f10351f026450bf88e0f4d19dffb956cf68c0c153cdfefef713d7b258b3efc555603d1ec3ea61ad626237af107fac2d3d40d0c69fd32daf27b658f8331cc5110592df8c74e25824e137beff6d835030691e0f800fb0186e6f503074abeda18c67ed45f37c15e02deca9b2491bd44d663c49a576092b6642b72b8aaf29f02a3f64bb94da434b9fcf6bfe3b16823a4cd89c0bb930f60dbf34e78d8c2f13eb0931e242f7ca314b3d12477f80ec0a7cf58c72aa73373f1ecd4ae7bf5e7ed3a7e56acacc944aaedf63fe6674aa561b64ef8ca76ffc124a26358e9f092924cfec67f3059f93e222cdb99cb125e0d91db8e3e021a27c4981eda208f8b215a7718137d37a031d1af5dee6f310d94bff7841788eca8b1a654b3ababfd80449912030fc1210425a7b8fda930b6cda134f94c757a08972ffed0fd725bb2945ee6943bf5eb9b1a3718c588967edab6e5f51da12271d459e5369378a8c04d1be2bb844f707cf446d8ad5b9b30ba0b7de578eb0e9910ee8583d622a1c97a3bab729058aa09c5cb0e9cfdf181f262c7672258d7f153d7a59e8e55f5055ed9fca770fd87d82c869df5f6631de96619ad271eed6b05fd269809674e811fc3700eb4806b9856431fcb816775474e064f1b225ddf2a98cf9e445aa1285d5db1cce047036310a107f2023582bce40c5d639fdd41768d46759f1906be6bf04b84512fc38c6c7744c5bda086ba929ac0d5f7b9dc7c7c098b79b9b4922191d065c59d4bde8df042be16d344f981aec1f7fa8be794613835c4366e75817d228438f011a2ec8a86f97975c35e127a6a001e4590a799823388ad463dfa5923a662418e5ee37204a902135d0e5a46074ccb9041a67850720678932398a19db79610fc1ac57c037ecef2f85734d818badf8b1a791de85d93299c12591f09a39b6a16d50ff5eb156b7152b4dea7460ef78ad50956976615780549a75131a11f61aaca78e8509f2c5d3897b56e0632ad5fe71fe95483801c933237ce9660f6758cc0c2343e7626ccc67d38968fb20c58567cf2371d72a4e77728bcf4b33d782a8f4494b37cc7105b39b7cbb4be3b51b47da4c27efbd562ea86616fb61217b4c2dbce98631dd3da6c1980b7bc6412913637f7273d8a2c48aa6374b68f4d902ac314a763bfbc2ce383f860830a2bd8594207fc86df3307b4bb70cb27ecb027489fac678d45b222ca1758dfb41a7fed088c802d67e0a0d8357240dd4a6b045dacdd15975b81aa560cbabd36d189dad12d6a12f250ee3e1e49835643846694a3b5ffe2bf74f00f4719c2983e61c4c715466f42f3c864855a6f5313667c8bfb89f27c9638501d4b767fe36c3ecb57cf39d20082aa34cff10d25562aee7927a380e0d7a29a83660954ad81cbb094bf4dbf5ec2747e3cad0bb70a20ef1420e627191f958a7e6566a3723112195c4467dd064b297ae836785fe86c37e2affa23e0c2fd3ac02cac9bb45f9938e76a50fdf7af35aa1880b8ae4801ea0fa7fa7b8d8b0f183be65d9f71b66d545ab88350ce282a9cc8dfd049db7ea3f21c918c1b7f606ddf1d6f69d495142be0fbff3fba64d908ff0a334f507c4e3f22e351ed50761b5fe063cdd9d252782bcd914df8045ea4babae2b566630d4143eaf84b96c10e16659a8374361f463ced78bf0734a527f5c07ef6c8adf80ae252b8cff100d393ec1f8c01150721fcecd180e9cd7e333d56aab99aff9e95f1cbdc1adee4c40ec3f6de237102b570c302886486034d352b41e9d963cca0b35e48409fa99948d91ad131ff37dfd982551872a2283b2a016e420e7cc5b26ce6acf240a5c47117d8e505ab8dea0edbed1f8900a844f78d4e62c1791255435b966a542ccb942eb974cf0ebb4dfc0245077efee30570aaff62c55aca1886e1e54912e8958fbd0496333556d1bdd26c9d681fc47a481fd7e8f4f288621dcf20a2754319eb5083a536aac4689f5c21b05d856e8446cec700e26b76a4e180b2820bb15782cebcac833331d8de74b75e500df5e7a8c927eaa8643cce6ab8ffc5889973dc9d90327c10e47eff02e24decce172017cc81e21f50f6ff563468d97ca6c4335ed4d04096f0f2c8b380789e51ad11aa7b49f16bc97d1309da8c61ac4c6f24864ac31f657185b6c572d19817215f75eb8ecba8437d9f311297ed43e6b93432d31cd2de2f9051d8fbd960d146d077cc69ceac06f7a039e9702ad1802747a867a061ae8cfd67e7b1b243c8a4abe3687dabb775ae06c5df94c90fd396dc7c3e4b84a590bc5d8ca9d9af4e8392c4deb41237e5a30def72f2db73b36e0884db6846e64533dcce633ac939460c1c1026dd1284b5de97102c061606c1fb45aec9a8f24bed027ede8ffd08f6e6ccc12c60660718b462da17659bed089815eeb8db92c62bf98712fc7773015e9d6ff257ffc1687a7dea67739426c8efc248543195984b1cf72c29b69e3f5ad6d65040417981af105edfafa34c392222bd0d26b76c3be985627c237b78b46df62e083b7742295370f3bd1334f245815804dec6a8e3f03a0bc801a0d99b64c343110234480e2aee22c8fd42873ace7ee61627d4847147b4f6a427225f8ae2f3340bd8db5211f8e79c3b2aae386a4673538d92a0d8b8c4d30c6387185bab91665f8ae691241235c843e6dfc6c715400736c789dc241eda2c83929c037c9202950c1ad5e61c734418c048672c91d04d82e65087e6f5180a1a12cdc07430b2b927e048014ac9b9b65187dc5b30471fc1af18b50741aa28d7342051aedaf6a21767727f034faa5a0efb011f468255483ec41461a28cd1e5c3f332eab1a85cd4c00c194c56654cd8a08dc28d93832b0e376a8fe2c428fac342efd0d5737cd1bf255e6b1c751c1fba3d7252a3ecc356c62e1ad1b4f6969345f68270ce6ec8d3e5ca06ee8be9e49173185127fe9cb35704955d9054b45619f231439911fe0cf1dd207dfa071f4f4097d392c8fa2de3ba4e0f9b224e87f82d3c95abb06cbbc9aa09bb2c340a9fccbb9cf1cf9c333ad4ef06ef6c2e1eebfd1b9986336d2b227f7af01caa1322e5ed50f6f56038163df763c3d7491a224ac5839da57325d9ccaec324a7702ddc8c11af4a40ed232f91dbb70939aa5d053ef1e3cd55e350f514c8411bfe06da93fcda34eb76cec3fbe0e2674b99088d443302ba8d39ec9509857c434a82e6afe5a2b7707f099db0e7a5bbe30f77fc214bc1688671a4275883b90b6844d888144e2839e0597bd2709f4ab8c8c948fd9fa86493c5ff270c21f00a161e7f5173be3a07c2132f4ff5697f6a79671dae757ed68724f7aa550367db032cd46ea031f4359bf07744f88f21f46f7e6c50fb0c4542c39ca9e7a0c5b0a13ea038a7273b6cdd8f458b5ef80830bad4284727c11a6999845b4b5b8c9b92ff0720a99d68f86e7e4c21ddc1d0e8fc2f330765e69338723753f15a6a8b2d6521071ea5d5e8119fa44d15dd1215aa0ace06ac6731d3dee5a8acef55992ec3cdd3c90acbd516ef76fc1ca207c438d3d313c987c97e25864a6a19b5db6bea273363a7757a0f981a6ac23556ec5cbcfefb9ce629eb4feac706f804d54a573fa01c7d2cdf3f09cdfb01b3219509400473cac5f6e36b1ba609a1df08de30efa1c70f6ce3b899483b39d23b5bfcdd12b1eaf72b7674b765e9d6a18b90311d99b31482df5681f74f623f32b76eeee64947bcd739ef3e6eb328a69c9a356e6ee9e610fd30efdc0783c573c9d3b4fba3583872018dcba0ef87e501e96762f6a354bd34f4fe2a171889f78ffe0cd8a392c406a2fc73865cb85891611e8f935a697eab08f0b39fd3c8c65aec55cf4467332124b82e97c9c257a9c05cb28f511a1fac21f586edab8286cd7201579772b712d4352a2e76e0625bfff45d3bc336a63481c4931e08f7b3d103df7779f20e23a0719a91627d74cd23cfafdb10e78e9f5674056a2c91eee8460df5a7336b513d6a6dd7566137e1635dad555ee848f365e41766d339250b80445047292a6ff664ef4d6e11b122d0b547fd77611883ff8a6bc06b66da1ed82c6a5f6675b57c681a9d74e12bc8baad339144988a2814fd7d6c2375ad75fbdf3d06afb6057b2d20fef398b33d1e8be17ec8273b22ad7887df53a5381fa3487b42c7a5c850c1deab62801d66ae290317f73af9d1d30f1b28f0b0ba0525c89156ce2bf61ff0401d81e5d1777df78ebcbb2d8850ff13c3995b8211f67f687c42dc4f81f51f6c7c762f09663b6bc1a61545923eb1055d616f89e3d5def95034f986478847691dbd551d4d9ccdb26515a931b5ac8ea7187f0a4e96aad825556901ef369d516f9ca956c71303d2d47a43e51a18706e36ed6306242adf766610af1861ad4fa7a561c6d7d70a29bf5479b755692b18c44744c3cf8511023e4dfa7d89a80c0daeacf57c74a7837cf7c4ebe676a97e14255aa6f7d2ebd9a1a44f8b3af20ce355fad8c050a9d32f8c10783967d55581e105d39ca5bce2e53c2ced3b8dde1ab3c700db6ad9e3c46ec59e10eaa1dde7c70dea649e23f9e4e4404ca993dcaa5c0dbf55075d8ebef5b1c80511882b0cfacdf947601418f68c274c97f71cbde34b41cd7bff00d5980198e1c9ec9a79fee8f741a16896eb5f235ebf73684e981553007fca250d450b52a4c161148a05104ce3658ce0af117054db27737f91f1bd2dca34d41bcb53858335e57f2bef52dd8102e37e5ac531f68b2d032caf9f514715ff8b2e35d39792fdfcac689522f9d34fe629da5961b33e50d4d0f37acf4d4fb620e14d25be77b03d39a4a1d2dd507de3fdc7354f1d1bd420632f5c539a3c3378cee5954dd48a69bbad6cdf7766fd59f7ca4a23be4fd24484486cebdc98a4aef869f6bb20be263c13a84366056866e3f5dc011a29828d0bf705181678332cfe9f72930340e40183bfbae6d9ef5a13a86893aa7d034d9296f319cf60b9022bcee889592210ee72fd2a65b59f97a48a13ca91a4e0fe199971f306e15f117e277c6e1ea78c332610e4ee394e4bb0d030b286466eda5c7ef829915cfc66141fb6a39a930c960a3341f775960f52ad85be01363286bdb0d6352a387c7f1a236f4fb0f886f6f4189ebc815b1c7759000d788c54e67b2f9dc7d6f062e5f7efd1d55940f28b051ae0b0b73ef93d14a33b0006c06cc2ca9475bc6418ab39e55ba1ea79c032efa57ee511e87cea5875d5c0e5cf29e857e380db3c531f6be8d5e2163717bb14556694b84ac6c7a92f0965242758354226547920b02a514f6328279113b98e113cb6f0bcc3b89bb0014dd5f75d388f14be9be1f8c0606aa0497a70c538e5d5d406151775055485998fc1bc9cffc673ea71385fc5d58bd818fc4b6204ff031ec7520f7d73981101b01af36d9777a8a00dfea8571a881306140bf98fe2dec7c555a114a73ae484acae33518d796d557029a76a4c69207c911bf9233ee1607a761963b3092d8305c2ee897a70b5393380b81c0cb424574ef5bb345713732cb18d8d2a7927edfc3af0fb6dccdbcd73e94e23ccfe32ee94f0905c5de3923a8bf3882b55b597dea89ab35f50c7134495dd25072acd2d2a52181d89c6772f8a16b6f26e8616bd82109b8684e307bb9d2795c1dcb5d8276a271be9ce1e706ff4458268e12c1b2d7adcb3f6f684fd2949a199911f1ecd96208c728193b67dc80ba0dc380dc8115c1b657a613ed71600dc8c5f1f38960c1ddfeab271653eedcc32a12b0c5edab7be06336571c829e0c6b8506cc8d3ec22131aca6235dd084ee0fbdf05325ef46ce7addefb852d1dfbef8f86292a5b519e0a43b3f84b45b31faae9a2e1667875bf5d84c0a337c823b5efa4a63ab04996de87fd3ffb2e49cfee8e6eb5460555ff1d842d70f2f643dbbd5baa291807290c7200a9b6d16b53af2a000d5eb98b51f105fffa68714d0a9660980297377b7422e708cbc1116eede160b43827a28506fc07259e2fa49896e44e3940691f99a59aac04f5e731b592f700ff91a8977eef50af996b3ee3857355d4b3d62736fe47a43f899a71c8ebcd60b9568c4a0ed575cf5dcff40ed4801a6ba2ac465a23f5d4f0201b3c293d5e07aec86daa948f2524a8a03dcb27ee1516862667136a5d3cd80eec1e5d5605a8dc41dc895f108eea868d05675302a6b0d245de98cfe0491fcb50f2176090c838a5ba545e2c36949215dcfbe11e3774efe81b4995de448e3b2956e09b0851ebaa1e98ce30847f26b85d18f21faf3eff3ec286e602c11f830b6c81262d9721e669813da8c51a72bbd9c6e196976871ac09fc0932540ad9cdfd1f704123af794ee3883982703089ca52ed9747ccec77f1edef22cd0e2dfbc5acbca4a031b3d09bc49e1ce9c6795ce8c02bda8444adca67672663f485acfe1086ce8ee1bc46b053793d482d3c57348dbe1c0bea731ee172e24c3d777f0a692517bfaf7447caa0ec7dd05beb365cd92f8938abd8fcd245bb0bab1f944ec8c589dc2a76e658c22aed4f11c89268ec9354de0c4ade364a7f962fcdaaf9795a8ba5407985a663cfa6cc695c0ec14898fb8409016968b3f9f79aeb4e30058342340de1374c32ed45bd0069299ed639f48a33b6a27816ea63364fba877f56f112472a4aee4b2a79c6c63fab05097fc151c7fa537a07576e08b40b0a13c94c574d4d90c9f902db8dc56ac0bb68defc73632d2e6bf287b8a37d0983767dae740a55bfc7fb01f3f49db4034a16ef7ffac49b32766ca689a92f12af1f7c2faf6c9ebe06366a73aed43e25381259e37ce9495c6038c2008da7757c0d5587a44c749908b97274d88418c39b61dfd0ff564656394f0c288af431fb1bbcbc2565f65a6da851f2c6ab2420d2892909389d8ca09fb457570cc05de7347425c9d20f4d5ca12f683dbc65ff8aef70f604ed4880766a5001bfcb2b4b25b607e0e519eaa209b7f064c9e28386c58ed541795b7ae2366a9ed68cf0361c7c046976c46992a4f036bdb01dc5ae4a5f1538a3cd2fbf227f04e35e65186b626883fb4fbe5d81b6ae91ca02afc220cab6271d8586c68fb1aebde001dea055bd69d94fd459425267734db7b5068495887948f67f2cbc67204419f75940346f8dfe58d9bd1bc46f380cef094fa87976f406ef55f9257ddfeedd9dabdd30213344a4a71b627c604298c9ea314b0c1d3faded7ebe7c1787548de9bd6ff625132b71eb38a75d0182770a48c3c23fa7ec7a06ab9b827059655f7de6fdd64ca566b2a63071e01531c7772cf8002e86126390aebfba548e91946b4f63d3514927b8835223076823839bcd415623e8c6c21f2e06985fa72f26910272ded273642274f7f6215da1f08d6bd417e1a3936a4d8bac9ed3fffccaaee7bf78b67fbf362c18ab12b9e91004a5d435f1391380f8fb1586d7d11fb7f98104fcd1893f9727bb3ff7285b3e54e863516d6dbad863fb715967524e338b244385350dd5a69dc1464776b793c1c3144c6fe4fde576aeda46d3a89e79dfc8e37cc5029e1a29258b63cb9440e217fd00d78c37225782b42dc1f0d50d027903bf8360eff2c55bd0fe8a38fa44d4a565468b32ce6b7f61265e995d773e6693ce00fdc557bc75932283201bf333ca0e9e4dedf02549dbb677e53356099314b47a60528ed45b99839cc1cbe129ae6097fa9f6640d63ddad72b7a0696f6bbab6fbb461809d040af81a232f425081506e62cb38aa15bc81b67a365a98ce9188909e33ab4e2e60c3631c54f2f6418f84b8d8712c1ae20690bdc923082943b2a3c3794a6cf96903ebc08888ee40ac6d89cd2ac35b1a3bea13a9a5a7338697761435d4222ae913928af7a6e6a9895bc36797a0ea4c13ea10116457ea62169287e2d0f7e27086f7b8a9efbe97ad3a143826fd810e876eb51f92d526131d +MD = f6abaee0fa9efbfc1331964f9a290795d47e21e0e8fdf1ffc319670f + +Len = 59632 +Msg = 889c083ceceaf437fcf36c55485a97f6401c8e9ded73b2f4dffa421067122df50685245d246af4b505491369fa7f7861d4e3b0cc9ea92f1c8c87e4512e17107be97d577aa8491809cf9ffafb7195c7c3c2dc7e3acfa3a39d6cb8dad56ef0b4fc1bcac91cdf4f073a413c499314632b25f24f1d71e627b78069d44d249066c28083b4a1ca31436950426a29b94db34d8e4c83b8f94dfe13cc6a2564c4fa41e2100985080d06efe854bc6fc2f6844bd506b8c275586af05e8956f1483f1649bbb29583256cc6192a4d96943bd11ff46a961e527c18a7c440bf1781201d4b46f6700ff8216fd98ad743b821bcd38776b444667cf6c06b446377941d15e400ff3a525f2a239ea80a983e0a5e6f8224995d1a78880bd91d366cb9b50d4f1e9f3d305f6e6254829961154773927a695e250a203cbee2ea2763068b6298f5528fc8809f22e7dba21556f565de07050d9ee1655d9b66a47bf093d7f783072f093868d11a6403e18685b2e0a1300339f84a9616d97bc77815e08d870400a227ca02e5cbd91dfc8eb74f3d800252cf3db1cc0cc59cc62a873f5f1bbfbac1b1021d550617e3331b09bcddbf7a902cb33ac08a0b19af62d7f981d5032722af7ceb8a99945d4090a87b1d95007953a6f658aeee5bba193916f563aa0e6643b04b089a365844f91aeb0b63e1c72354a9e2be015ec351e2312fa36e46042526ad6581d494177515bb2be21528de209a1bbd9544440d861334692c2912ad0bd18f137fc11b9c989c5ab227bbd10b192de6d004fc07ff00b2290eb81c74d1c14e3c9d2ae734ae5497dec603de4617b616f06334b30f6268caf7646ed0d537eea59e4ba9d04514510d31b09e05eeca9e5c23be4df0c4fd656088b477cc9ea83bdc9c642504b89738063ab81fb831eb7a076528763c8e9aa07ec345fb9835ec4ffd1d32c509f3ffb18ae125af7f7744f120a0ebd71ed5ffc02b906121bd04cbd40f0bfbb269601463a20e4175e3289bacadbb4d991e01f56e70d74e11c2710d6f1b4d0813ac659df755a9529a6bacb952b99e97e4c47a4452548055f42fe679ca28cba111586c6414ac9aa145a06c668c493110df99a8b413df74bef28dcad88d3e6d0ed4f7dc2f63adc9769f08ce6902675c02b324f40d5a1999d1326385f260651b9683101dc78c621f19d02d3b8c5b1a07b387edc416ce0bd8d6dd397f8fe9a6bd82462c97f436d382d1ff971c95406b1a6c847d819818bc1a141a981f77d3083b1a47d2b27d0907dbe754ccd74d58607d75d25b945cdf3445d41206cf71c4947da6ab8ad62caf0613a3f856d67c4c041816980f6327cc7c425eec0df74764516b6e9ddd6bc7cdd8104d13bd7feac35cd397ff2258c4879bfafad135fdbf5d47eeba4351d9170e86bc2dcc873c5e6672973f2e1bdaf9b79954f0e9054aa2547eecd1c57088e41716fe8b4c3e74a2dd4d4a584d825090047f37875b0546b7f4ff4efc4cc2e0f69393bdaebb698e7ccff5d62886e0244f18548d0850bd59c8e2d1fd8300ce4a142802e3df4091f4b5e47321f8ffbcbdff98203dbbefb6ec9bc9fce0ae081c2c087e6d5766033d0d15c5ce150fe09e83682feb2fe8617765fa4f89dec48c34ef983edb018b2df541631a0e99b7520ede5183be4bd7cd882eab1c7fe10fb69ffc8d1055c996e642f8698a3c94367d9536833ca079d05c72ad76d9e6d0d5ace4baae9be297ce55aa9aedbe5ef0d588baf3c7039aa11a36bc4c252ec6925f968b90c5888a537ca3b78fb85e7f94dc9b067de380b3abfe82ee727ec22811f59d1ce8987e55e5e8f7f1409211a46893e0003d9f5af37fc46991864b3e1334dfe92029f1264c355a7adf13427fd754417c3099c5396205b4122cf2524990e364a11fba9628762c1a54097192511f40309a1efa1bc7092615a5471d5c8ca606cded9f054f2bdcb06facf7c3482f8514a66053c96ba9efc8314c6a6f30af5d8662f62a71e6d784aaa3aa326f2dc00fb8ecf6566c7b8a1cd44e2d1e509859bd496be4476621d67803fc7841df09adc7144a85af4d13109933b570ea285a32cf3830df7f4ccacdc0a1c33bac79a49db5110735e7d2fde36dcbae3e575f3fe39a3bf90e588ca767626e3f1efca7c539e0956d2d856500aca08680bfec5d0f14263b0d995c8c814a6851ba46b8d036295089c296116de3133b4b751a318b926c7c1eb5a913b51f1ed9317ade685bbd140dd64f9713526fbf4501d378ae4f8f94a3ce3966046f4b8cbef8c80c94b223a320625c59147b6c59c692e300ec12d034a331e1f7b723cb3b1e8decf8c53c2f7d901731049c52a288c7e5eddb723d1bf38531f484b43768d501d82ecc8261ab4a65dc15bf313ed8f54ee23930c836397950b5bc378415eaff70c1d6ad54895db4a79852b25da7d84866710e287767f26f0ca47f36ae23196371302bc5c21c0f615f352e06a7f56828147ab6eb06360d7dc2e886a9bacbbda90f0d763c548287f9959af2e39791513d62e577a0fd0d544a796819b930749d794f40ff3a92248e254fafe570b6e15a30579a9a6fe5538d7f390c808d998582793bb10ee60568eb8d975c51d68b4e4da9fb826681447081c30abc024f7d683454da49eb6834b768d874897c3c9f41f14f578325fea5ccf8bff560e82462847bb034eedee9a77acbaeef1eafcb78200dcb72861d0e8dcfba1b01e07b36d2411f3652892e91e717ddb90e0332aba0546ac4557498d786e18e7e372400ad5407e78d3b0324877bf8669edb214d039f46d0e30633dc84176a3d909d15c2b1713e9c5df74208f4eb832e085e5e48fbfb5d06d08fad313bc9d290fa3e990868af4e06508f3022ffc022fc9d9ea36abd3e00d632f7c8e12422814c641f9919fd99a0ed0c0ab4b9d1813c9905a3d9fd6eef9906b2476e3369acdf3c754afe3e96b49a193970b51691b638cee975e64739978f5ff786866e2fef5527d6c6aebf5c8aa55280ca1d8268e88061f11db49144bd4aa9aabcf8dba17249d42f9b93e476a22a5f891fd3437e9e7b1ac4a22922b7e932ac72f2acc2e4bd240c27d294f50c848f09fb77bfa1fa6091c30b0c2f44bba4af2ff82f896b23584f976671983948b93e187edac9e604b62a226d63ad3d787429fce37b791d84cc303d958389f950c89d54bc51d958c629ae0193b08a5615e408d9dcde64212f9f31c65c0d4e7d4c3916845ae3d7416540852624fbb0d7ba79b48f8b6130c04d5cb9f96219cf0d65950f720399abe70c841859c94a060891bd95e6970bc63f06882f9f50aef4f1c262f2e45d793d93e17bcd642aa77430bf3713a5a9e50ee981adfd80cdd5a5708d2b26a3108e758c0caf0d0eee19e2996f6f979668f5f005e7528a648295cad3eb751377c5dd3c1cb6a8411ebea93889c7ee877f7d4555da5f003e1316f64b6306ca21272470788907eccf5d415d5e49ef3b4d298fdd23b1123e81543200106506b1b87dd44e131c26052193203f3d2110de4f5c47c344d22894bbf17ebc012413b3403f7e7ff31d3c7b9d870257bb585260f7df4d019e85c88a54b0a13107e753572136c90c02d470d4ad0390abc138dc48ac7c489f1b121aa9b45a446708f5f125c32a5efc2688eb9ab8cd72463807d71ed5f9e0a3a2c0477844b70e67ed9713a58fe3e4574983d45426ae4f2d060e6a6bdc1fbe171ad977806a8ea8389f15e260eb280425520b548b5e6ecf6a1595beb528b68a026da3d1478fa8b9e205b785dd40c2666f296993c6cad59b034be4fa872186eb6d82677e571cceea6e06c524a4f77ab13db6e5b88dd1ab5b03924247662f568a5f416ca63877c6e3e38c86e93e76168d95e1c6ec68dbb7b66fd1f9cddcbaf00fe092fc6f700a584b497e43fa32275ea481925656e050c25551f04fb3702a1a21f85d5d04893c4ecba9c3447f08711c9b08b1db1f7c9994e0b0d68d22abe79d68b08ad88b0b746f0a0a45d1a149bb161d32269e6ec51cf5fe956dfa411359418e0f01b52d7c1c82b174eb32877c6f15d008d9e76c4242ad57079ce03932e9cd381eab3c11669b5067ef9dae5b29f4e15c91b2fe407b7383940e4b853190fd0b10e46eb5605059a1d584438e42d8b2426ad69a2a14f818415db2623252b3ffc1be69336741c3be3ca23ac61b66121100a2dd77b40d4297ad59fcca2fc42555b8eab5e39bdd4632eb771a0c9aef5e79e2abb033e455e05a9031f369c4ae6e69b83bd164995b611d74fc2afe56054552b22e57b402145ac7b18da028393814a18959c4a0a9e49ce7a0d8748496ce4e0436d2d8e456713948da1309efd58ca167f2ed967d13a080f837b40087a17501f737403da928950344d16e38a7e2cf9d22bc9f4fe51eb694b80137d4edc020e6937c1f8eedbfa843235f443536a62c8e39af16f8bf134f6090c60afaa03bf88641cf18d19764d17e4c4c3e06866ac9fe1693fb99f33a926de64dd47a865a246867f6d3108f5f383e296003b57e75ce742030f53868dba842235f3e5a8965cc146fbaf752bdf8060a21633c4a05116479bf4eaddf083eb868b0c4f0a490a31a13bfe32ca00977636b9c1c90cb0584b3945bb4ca95baabeb65f3449160825d34ecc1391c015b2376e80254a8426517e24d5c2bf563666969c356a6c99449db4227db846d7d9b456809bcd32bb60d12192c2b7bd64ff4c1590940b4424acc656d4d778bc71cb12560563061c230e4bd82ba2e6c14644dfbe3c01934a189f343dce5fc17d3e7850b8758c7c615b7d45f427ecec558a7575f316f48ef915aa6bcb977d2f038e5ff3f0596e9c9cb53c542840073504922fb34689e37adb8c3cd19298b61de9f1e08080198ff348c0c9dac6ec986d390dc22c4b3d64d36becf50a356aa10a9b09b86b0a3e76fcd02eb45e628606d17d4ddb255389df2514c83179f685b49181263637d150aa35dd3f7a538db4d92e4be2e95301f7e8ec80ae90b58872774f46e7e85b87c8901aba739a5e9af195b02f6d6b19d91fe89619f081215d995f7056bf5d6a803edf38127b72e43cb4b323823ddf0e3b6a74ce5b4e8151d892d3b13b2cf3c97cfbde0a5fa7b268c586b7e4fed4c384cb5003d1bf092fdb9bd77a8e6ea14a1cb0b8130e0c98d770d7d02a710fe2a731eb691c5cdfc0db0319efca745bccdec8dddc24afa3cf3070e63971540fb7f88a2e3e34dc17f6118cd53439efad00105256d0698bbfab7c0d731b22faa8f535f20627d3bc022971cd504d4f6cbcdb8d4dbe4d881ebace188af10db5f1560afe0e05be7f8928db6a390db3818815cfa40f76abd6d51f97749e0289b0d48169af329f7aaedff67c69747fdf66ae424d033c0263fc4b68a83eab0a0799f0c5a1d80455d4d81cf58d0df42959656bbce41957f41e5efe2060c5368a1fe7e29d43f6f7ab7581bc90ada63c9c9a143d001564c7de337549d161b6c4f52b012672b08a8112a5425b722ef0b24c19e99e9661641ff32be5caf62b71dafdc1ac38e07801351e0c8065f4b14bf9aa615bfcfa4895c5059016fdf91e84ece66c1fa6512b09984013c26892b536774a08e1f4a64b786b77e89f6f64cb6e7f6192f1db5f19f20f0b438edff6ab3ebfbd69220214ea9a57bcadc57bd3a2ad06d1deb96464f5591df2245c388b13d337471a82a1e0966a2e56484fcf9044bf17b997dcbe0d2dbd59773ea10eba8f7272a9859a5073ef6663d74094b755122326ab56e264b2238d261ceb03cf1f6ebb064742cf9a59462d8cb24f1aef8cab57c809b440d4ee87472845b1eaf624321b4692da98fc0b4b1dfd69ac68c49170eb507708aeab3cc989c4a44bcd106399f1c82ea58cd2045eb65a8fe0f4d31df35c7455fc5244075ab38f9ae120ba47e6fd1f7d3c21c8cf019518779555878ca3098838d7f23be8cb52ddac3a9c306ba99ba10126ee5cd5d418bbc331f17e682091208253f4ff4b8bf6535ab0862f29623be15cce48eab336efa8e53f5f142acc81c1e4d8e10aca2cfc7528eb75131b917c74d2cad81ee1ba58847015f4e56f3739d0b2df3ceacf2f03b78933ff78bcd7cbc015750245ebcf01c2e67e696e8fc147f18eff6f1bd4f27a9f0e227bbc7775b84797855e1c3bf569e8aaa1132c172b2a98db81fe1a7617ef903a4f707af61bb09fdb5451fe4cbe0f7a4f56988a9fb5603b2b3f70632d1fc13f60138420933a432d536a7458a89940dc46e7501683f0775ce0505c92647a9e0142071d39e941fe7482403bd7da07cc9313dbd05c5e8cde72bd9d1904a6a8e46a42a2a24362d32109fa7e2ee85b9a013358bc9fd899bb0410f55e4c467e3b22eed46eb9c99a6e89623e6ca406a7c06d41680224f7c02b96bc3a1c5ce45591e81389d3da38ea6465f190a461bf390b8f21d434f6566c5ef4d8fe6fc14ac75d825cd57a7a1ded55654cc3adbe7ea9ebe5792fdd8a60f8c5bd0ba4c120064dfea04f49bb2fe51dd1f5d839f130c154d1ee9bdd546793ffe03da8efa8ef9343e5b05f591e423af63a963856175f23c46e292e5f41f48bdc3f1545119f866e63b340f1762c876c012fd4c1ba78902293112395481ee7a52842d274cd0d9b1407d7c0ca436e3604c8f22028d99d8a2a3b5b4c650a53877c6e9bd39c748b8410bad3be3e234bf4a1a85206b2361e93b717ad220228887a6e199ab740aa81d7e0e727a7c1a85e39af39a0071252444365c297331125162716a3dffbf5c1990d0137540bf9350d7ba9f76c9fbda0d72f92c6aa0e06729523f2b7cbf0107c39a9fe05d959497be2410e6c283f08b41faeea9e460156b37de79eafff52451cdc2533fd381e36cf751069026363a80eb647c9a40bbb864a48e85706da80f83609154f57f0d945b22e6026449ebc00131390ac925b9b29b97eacc856fe1aae4a38e0bcd08408fac686b6e2bd4aa6a563b0002fc3c63e958397bb6f0ada7ddbebf41de8e1723bca7f069b1ad6e7920c63241cbfc2dc046e3b1c8ac7bce029057db3236ff53bc0394e36833b2c062ca9a3e85cd919fd8b183285914ec7bfaabf920ea7cea65154dba68ee5c02726c501b865270823ab41381c6b7570c5b9816eab6f01615f4368062a88594642b9f9a8e33331c99a75b5225b269dea317e3ba72c4cc6e48a92586d4cab443a29304913e6cad399c8ed558b715f7107956e47ddb7207ea4d2cec4558f704d18253a21b725a4a2f54962b0b7f16ea5455c1a1486bea28f4eb2493a73657fba6cd1382217125916689686455c5dec91401ff24046c51b7f3e9392093b511232a4a7aaa8c84f40a4703ac881dd0941cb743b9759724d23c4f10149df01e4e04c6c3312442f3ef3e388909a04be9616ca5e4979aebdc92406f285d11a8b93524e0fee0f82d0640b4a2e527b3c6586d3f45ac409de6dbbc4bbdf9bb85a2ceef0de2c52e2c34050cf4eeddafc97865df2001625d85726b76e3a04ad700c6a5a34732dec3ca3e377e87823a49ea4858e09440d0955b76d2e89280e4598afc867a583a1148d935e5bbf4c8c39c1f1e7897256bbc9126d9593cdfc690e82b2cb89cca602865620057eec32642516fe20e2d5ae8eff9ee85489752d8142cec3e8430250ee9c16c87d53d7d067d0fe37c62c9bb203174bc61e723741f38cfd41a325eefab1e05ffb2a7d0a9cf3e7f82d5bc94d17b49aa97557d08cc03c676eca90a50b29f8dd8236914d0cfe94b4954d364b6236201448749546ee3ed84cb3bd1532bf551ffe3e194656578bc6c14615fa1563a3b1fea9425b27c3f433c76c97b571a412b3bce401be3b62bb06b88b262bd9c9c6f6c43c7d1e05a6a6eb41f9e905c431d940b4049e6d3ec702d0f4e4ec2feb1d367b0f827362631ecd7b56dc3f6abce11f435e103dd802ecf9b1f0e3d69adbd678ab3b0bc3acb294be506083f978ce4a5b4825a76e931a5d162646f883d11e7de3f3c148fc6196911ff71991a5946ad623aba53aaf02d79fdeaa61a36287458c2f015cca7c3561ac58fbcc85c262350cfefa573a8dbbdd1db9bacb74f111c389a04047f0d17cb63f0fcb03c0ee569f5753b0a63779329d5f4de40eddcdf52aeefe3d2d5c7acc06d19ae159e387e61c6da87b3cb1fffb9afcf192864e37c5ee248f54778df687d5fc80db395e0d853e888396651a906b584f5b62dc56fcf88fd2da12a0d5c354962868151ca10dd878607bbeca01c92647fec1b17b885c018272652453f47fa6e9ed972b9e4cf7444c6dd730d5e808a0fc53eb2aee42f375587bc6d5eb3a79f323a4c48b18c2685d4d094cb9034ddd5fe8172e1baf2741c8946765b3e14840bde5f646b026a1bf97dcdb4293fc93c5d79d9111202895d57fa8bdd84ad08e728b934ab437425b9b688e5c3f7e0c6a409c8f5a2ac4f52f0d1f07f77507237d7dd0de2a839ce6605a53d3f4b9c3cd21ec132fead1769f53770b54acf28574b5c122090e3b3dad409aee304d3801b96b16d001cbbba18193a1d90136a7222e97eaf3c67e51a5e18ccbac35be40b45b965f67b7653ff246600c1c802d2979cbb469da78f35d723d956af266d05a581e44242e835fd4d54869142a6418e008d69bbc2a92f5b50f1c0b0775262beb698bf513a9280410d711ef58a72f52614bd9be5078c6fe0ef8f75e1f8906197a653f199c6c080a8a543d9347f7449223af3f8cd5496784b1bc79ff11c279219dd782322cfb95db97e925c570bf3630bdcf9287a921172243b5fe6e9c9611ecbc4cffcf53bc63efd0026526615396b696195d4f4a74385f4b920f4d0e9842d35c1222519f42f4bfa93c76167848c8ac23190a4447d75d741fcd26eae63d9e6e03d374596e03cae3aa03c31644235e7a0b4b13f71fbee93966c3dff8b1fa87253a1d70575e9358c458d4e6b64367bac8a52c24e8308f8df7871284d700539f91653ca0dbdf66110a1c4c5b77048a8fe09738978838ed9e371735d0064fdd3a2b2bdd80476ee095fd8ab69bc8f600307a47fd0667874dac908daa2c170efbf95ae45c993a9bb75a472ac0123c966d3efe3de5dbf6aa243b6c60ec0389bc346fb925564615d44ed05f52e5793264261de4ef8f82c62ff5cd431777f0ced61aefce75472179a71b9aaeb9931b5afddf5fb6e356b5566756c4bd37ea6e56eb13fbf34aabb5c682a20bcdb5458316b1dd66ecafe7de181ebbd433489ff6d279c436d01be07d9d0576b634ec994ae63eb4e60eab9f579b84a95e3da0250491f08002dd7fa1e35d9e0e3c6cb5facd49d30a3f957d09cc415783d534f4f62245edfbf283cc5c8198cadcd0eda7e6a4d23d21e6098a93a6b9f5efdbc1bdafda4ed07c885bb87cc2defa77462038e94befdbb07be35ae97155ee41c46c409e871d36a636dd9a9f3180db41febcff7f3d231d1a63ab7457a6b5bf3e418d446ed3418eed80820910583ebbd15d1c5224f2fc9fe42fda5d8ac149d719b5bd3f8d295c57d6e7d17a8ca1593ab9f3b6e75707dcc28252e87cef6b92c488a364786603be1fe6ff5465609770c64055150591d65433995f6e68f1e02115ef9d2ba5a5fcf7458219736048c505ed28f3df537208e3518db7d4883ec96539d3056b3db97f88775cd8c6e18194992dc8524e5753fa2aaad3fea38122a1efaeb76ebbb71d05f203cbafb76fc790aae692e31a67d4346abe008653ba49e410f3215b95984d1ac4a95320dd716743abd63d389c2b5f3243e998018dba111a8995953e7157c63860a687bea18d0d181c4b1bc57c18719e46ec0ed299f714cfba048799e77c24e956a9ddeb9c1915a89cd3b31c1295a7b2e403d98c00f7c14e12de7ce0508bc5a82711da3a35bc0d5f7dfe97aef8495e3a8bef8c906b42a3402461e9c454fd34ef527ce12cf6dc70b7603a3de0a59a217fdefdac82215e47207f6d52985d46ff495959973657f0dc4ac4051a63a31e8dfd3dbc9dc3dbb10989842f4bfee20f9120bc2660d8f19fac7419edb1ba693cf05d38bae4e7f2c186c5c3463a4a8bad771feb71e2973c4f6dede2529827707bf4fa40672660ff262b7fcd30a20da2a73d9177aa70f390769cf2bde2326d4152087ee54fb6c169558401f27d17dacf93412fe15eb070a6bbb63cfd0b24ee6465a735b7e33a8bb9b60d16e39a10147ae81e35a8fd1590e7754627303bc41d521d5dc918b0162278ee430911060f6d3d1c415d4f1404c6cb39d94be802a48c82ffa8938834ce181f54b262fb4f8a277eb6470134222294da7fcc1594ee5abe7f62f44f96ffe6ef259fd7bf02e4f4e5c83c9bcc08a5e38d8dcdab0eb75d4b25b00ddd37c56fe51a24162f77e854f41aa215bc182d2dcc136d9a02a1dfedea54cd56dff684034d2b835e2627ec1dfc5884d82470221840c8e26b4f797f0edcbe1fb4590653588395dbde5839bebe6201e90a615e77f3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a4e9b95712ff4daf4f207cfd26aaa0030b6d39a60720135622ad7f2ab140ac626fe7e157985ac838988470740dc1f418e41450dad957058aa489f322110002548de11c52e10058945e869d91f3d076875700bc46da264 +MD = 03d1e0e3f5f2601b27281ffa126cc48c722f88e4ece0760b992ef23f + +Len = 60424 +Msg = 12bf3a3337d3b6d553bb8cea92c369b930048ed2902c81f088820324ff244330bb9351317472d5822d8b01dcc413c4c2c72f411c89b77f227539627ba341daa6a9d75a9ab44a8ca9d72c43aaa29eb157f7cedaf419bd483206460052075cb68d85933db41ee14114f8a6389c55eb964268e740a268c844e8e2b0c7f153fd3fadf6cde2c8dbc15d893902cafa0582dc49c3855d6e9d5fdb0eb27f9e9fb0acddcea58f311d127249d14247e00bd9ecec35b0ad189fe00b756a1dbb6ca646f2f8b739e012fdec7a6cb4ba7d6118fab02ccdd669597f5b527ac6cc6d1b4c3c56f8315bc96dae91632df949ad3769905606dbdec0085433bf52e8669d92daba614504b3502a7928b5f66a98de4946c267e1256fbb0e6793d765989451b997ea9947f8e88031a6d9f62ecd4f187ff7b86a257532605100a1241ca0fe9378cdf28866d4a35e6a7dceb03ceb1663c1c39be73991cfb9ba67852dddc74b6ab7c2fab60b628bf4bd462c6a8a8c93c8f7f493668741edce31e3687a11d424df5ec02baa9c68494913481ead7f77714e09d0c770764f34a59fbd7294219030f8550dacec83af846552ccca00837656fedfa0608c6e814e48ea3eca0273c318bf84f1a60426ffe551641a58ebfe4febde62ab8543d7a1e0bffcab994c7134833cd4b6417bef2014142f7af1f658cbd7f9783b5f1c1a759510bb4f06fb82ad1a762ba2a4d745d9b8b69d34bdaafab2c2540a96169f9dc6124511713a960df4857573fff8a38ff37940958fe38e4acc56f90105d154c95b0266e5585ca57cd36b4192136464373701b9fed48b2bb1e138ef43d0b8c406fe0b791e4d95b0360f74e3722711a4a46af529c24cdf0798b8133eba3ff476bd75d588a6980d40a3734962f98227ea3e570098c83c04ac651a8def4c9aadf25489099a6481ebdc2bc692c6116ecdbf6dc5c80ff8ef25a282cf4e08e3280ac135024fb84050580d36cff617a1312baa997bf5953aac686f559fff946632346ac6a84ee9224c7b5a2c571e5e90146a332a42303376baf59d48524898bd0053757143af35f2be7d4b7526b2a3c85fb2e288e221f09462f5b4c1afd01ed0da8e6b9d9a19a498ee8568790459ec305a2a401b236fd47cec903a2a7f402d87080dd3b176353ffd24bc3aa1b9bb43b04dfbd44ccdc2e717a0edb9ea8a3fcecad1f935179fab0d07a84948530c81af307f4c2681a7c4324bc535b869987608817f7a1936dd22169fc1551af8c75339983946bf237a1bbc01a58fc00f718de39458b70876f84363aeb90839f9b0d8e7d0c311269b0e6f8d2286245844dc2b67eba5d98a3fb7b5fb1ad6892cbc90b9c3c165d4e3502b69ae94b11c0870a3f89d6ead0725f9e320e7cd61017bab2e9ed55167b87fa999b026416e9e58fb8c9e8c06ba6a630c442e2dada197af2d542d246910e481101fedfd0f05d2d14d60c23c99122acbe1a285d7a4e0744fa9c811b8f2a98071ec87c83ce8bde1facee60fb610fe6ee5dec5cdec9964bfe38953f099d27ab6d8a497e8eab3dff35be7e82a0154c65e3a6c75af757377a1f434bd73d0f3cbac3da218f60f58b32f7dfe2cbe254cb22351f479d2791c5f420912ce41633be48a284dd199b4be81bee77d7c712bdf0ae5b2dc9ae0007b64c9aa8b4e035d940c79210d8c7adfcf91c821ca9eeb1af715cbe68da07e1378d05f5f070460c3e58da1b14a0f419b722a74b44f5ad5fa7b1cfe74705356b8fbe92bb1eeb9019f16ad295f6c2395ed8f96ea27727ad7d45267a6e4ec7a10f9ecf95627a8358df80eb539b4db901edf0f1b53029dc498af663ee9bf68df54de3346074a9d40add7b7edfb37001e8578d802d7ce3702c1939ee9f28c4e48c86eb91967a036a20943f89c9570419572c0d3939d12a8faf988e2afe7d3057e17b164b99eb3d9224844b90b2fe707bc8cc0e815ce565775e9971adaf11df549e7af1d70d30bef8a12e2e283f225bb5c7c7f00d29123ae3a39c72eb037f08670e171cd842e2ee1a011265c4a05b1c33de90501100fff14139021077ae2d720bdacfe5a3ed8a6152dea170da8911389277c5bd5186f75f1c696ab8b7f19572bf6f05eaee6f9fbf5f848bedee7bed473e2dd886232da0aae1cf46fa30905fa0fe4579aafc4b8b3e8cbd121b74eb37beb35b39492a57848b1dd5275385ecd47344f87b9471f3e58556c2d4a8124999058eaa7884bbb70b663d157c330c79bc603ff28c35d41b371a6a4054122b2979b22c7606b77baebdc2cbfac63758c9400e2bbe3c1d8703e87423b010c8440d625b0958745fdeb10437571f95dedf5e27c3a4c60baa2f5072191f9c8b58d157eb56c1bc31fc5960872a4ade5b7824aadc2747b46b6a21837c7fba60344277bb6d4bd23bd00b703faf1233c187b1bd21c5bf60e3dbdc020f602e80959bf39b8a6090b731cf0bb790f4958e63bb19fd658ce2acdefd8e4576b58c0eb7330ab1577dcbfd589f7b9426f01ad72f65ff89e89a37782010ef603bf53eb14f89e65da51d53f0eac1e99a441a188aaf08f0d72d56344f31e68de6d197bd14c91124e4f5b7df4e92c6c43e8aeb25354d248c69a6795fbe9ecec84dda257db5be69350bcbe5b462db2ea9f55ddbb753943930b5d65c1032c13a4d19a826f6f089e295268a1f89ea1e59e9635f6445621ec77c405f870c4843c98abeee04bf71c62dc3d9c2dda620f6e920ece23d55ed474fcd9d84728a6b90fcffc1fe474d960d9b5f7a08a8bfc3df4cef06a8af7f519852a321f7b7411923351aa76b8717f99acbb69bcdf93d2f32058254f533183b9c40ab821bbd96dd951269e3b81ca4f9282f77b3854784efb9a3a94c5a70c707ddba3512830e122541057c1b66a08b312046f165b13c4d61c097c2416ae0f242a72fde67a011398cc19eafa2f98b212e0da2d206e41fed41d1524bf888fc2088b3021606057f7370813ea30ed3650d3c5ab3983b909afafc7673c4c6573ad8267be16a5225a1668d2a75c4d396a6a60891f992584915ecfe2a7cbb2f38159fb85c3e49f0831f791f07d4a385b5c8920f4df57f01701939c367ddadb7be24ddcaee894345a05231c2b3cbbd99b36347bcd937bcab982d77e8a8f70ae44bd118baad52d4e5ffd206f4b8cb818401df4d9dee30b9db43cb0dda7889513983b2e724131b7d4604278f4181748dd943b50a2ed7511504e56a921560e51f2bd842bf73ba53baea5fbb2115a827310ddb8d03ec3f494cbd0f847b25dc9ad33fcbf90845fd8bfc476515730d878419964bcfc1628069df6824c14f88463b0bf9d14e68076734efe1b6ceeb85b9fbb60716e5d90e45333b9ab77975c9581637ce8acb353481ded44db73ff11ab9fe84e4cf67a15be845efc94a4584456cecc5325af82649d7fa67e008f13a29021d1493c7ddb0e7f4126a786f9e01991eff52c9b45d81d3d408094d0e7b1d5d2cd7c3a8a2b09e1ef3194a2c79eb6440c8fe6f093943fe5f009846e94a46111384af30a7f278bf8d6fdafd59fbc622b9054a68555c73e247d82b8f493edabbf8b413e9f619ae9b9fc4d8028587b6d38e4e63cd529045e43ad52260f17eb1845935963e378abac8e29c70d8439025ed2d2eeb3c7577325a84822d6a566c52f0c183b6cbd0e835bde241660cf897abd6020141042263e1dbc1699ce9fc9a4787ce28e601469497e10b6e081f3910a134c97ff5d30e08acee7de6018e688b07cfdb8fb48d2d2269e8ea7ce76d699dbe6fdff58a278cb82bf926a1ebc61eb10c2f8642a2bde914242bfbf874962e815c1db20c6e5022f4b7823807cc0f73aedd3d3acc21120eec4f20bc5b4027dc8df294ec1f230b656108104e9222e92bc6e35f8596c038031d436da83fca7117f61a8beac838a7c87f7639b6db70d19babc72cd33cf07e6a19c9794bf08420556c4c593a722fc3c0928a552d3e466737cfe12bc0194283a87419ca1427fda41953009357b778cde25cccf90e550408a4a5d9b2c8d626b642beece6ad40a78ad84ccfa0df029444a230b69bc69a3a3456c0197859de2da4cd5c9b3553c5123316bc12281cde12c684b0cfc402887988c29118d2efabb7cdbcdfad5cb44fbe3b5913609fadc464b21e4f80f83eaa22547cbb606916c9659f75aaabc35b2b1c0213f5435e1e301a95b38f62bed769c555e98178915ba1b7a89c601eef94f1ac35dbd43309cabb94eff8d2fd7e6961e2dbad95d9e22aef1e67a5726f581e3dff351532a8295fc1743f62ccb9bd610d0b741d5afcd200ec1a5b05642593336a759e64931b1329dc38f265df1ff25ad59fadcd6369f77a332c0150b7ca0790f1bfb02e68247dd58643a7968c98c3b3562fe7422199b9035ed3e90bdfd54ba38e2e38e7342ccfdf3a24dd6947cc9817092ccef02814ad18c992708b5ecfc5d77a51973389cc6f93727cf242a323f5d26926b37be9632a36fdf84673c7221cc950ca3977db6bf3bec98c84d721274381e09e3329e7fdd6fa7675c9498b74a6e5abe8be48ab83e2adaa04038b445f27b21a03dcaea65d39bfdd8b77711e2ffab8d64d941a6cbcc2ec8e540cd38f3418cf7ff80e6e96f9a9136db9df8f11cc9ebf8a593951b17f0af800fcff44542e7d568cdb46de4c6bcb71d1717ff7e8c2e96612ac3ca2fc33215c8c7f695255d6ebc3cb2e1492391c17779352c74025bb814919b70c72bf71ac969b5bc981e6a5eab3a581061eef92f3811dce53fc3b0efce509fa37457dd31312b8029e579923d092b64499d8d269061aeb548480ab45a2a65de63b9fa9afeb6d5d045657efc953ed78192e5473f6b5c186760781e8e81919a01b87e5d5909c0314f19fe74d1edb20655f521666d4990179b32b54967ec6cb5b0aaabc940dbb805a3ac99a538cecd8088793930d7b16573f9c8e8d16724217f9242288477fb041a74061f575abff70cc32615eea62b43f32829faffb5b01ac05087ddd627f10e386b3076d35e489874ae059ee7013f9261d15dd11b7a18bd409182b30978463d262f3188616df1187ef01dba651176ba839b6d576ddde574c6fe3990649181f8ae69113b48af43dff3317752aefd5723212f60723c079ea61c3fb65e2e9b2aa996c1d979d24bc5559a1b194f0bee6b3605343e0cd220cbba08fb0103b0bdcab7a7de9029456a00e23d540d97c40c3859f6530f0c754ff41a53da20693220e88aa9693e33ea337aefa2845b14217e48f5bb34dc5a6ebca22dc5861d76fbeb0c8a6409eb7e09cfbde2925409ac6a6d23731d7eacde05905c5b25a4ff145547be1fa067a0f4ea655125d56b2149e6004f39e4da888081f3ab0c3ddfcf2a865c87b1242b657cd41ebc1e3373aad2de6056b1d8ef77282c0c16a8d3dc949fd751eea8b9fc40fe112288377411ad2f9ab4c042c06681be4c042597b046565d904f7c6c27823b63e7983cd75fef31486225135366e6ae2a2a0260429cc31e4bf97db76536665d919fa86165beb53e057edbd94e901807540e2f500f5efbf3515a0429fbad50ae71807c7e4b570bdc4e35fd999a07a393243fb37c67c098dd57fa0b5a9756e737ebd4391bf0f297140bd1b4dc9f93315b8307b56cb3883fe44522bbd19ff7d4ffe8e10ac1bc5904ed24982729c5fb676557ac5da9597f9a11031a3c167d59bf0e4ef115f61753f87081d37f087409efbb8a77d4bac36d516b7a2ab5b197444e6d074a824569a71ba40ac9e3011483716502b04227571a0cfa909a4e2b57802c23f9347a331a1e1791a8c47c9d0d329469a99fcf797f4d72c72eb1310a24d4ff380ef9254a9280913f410a7163c7de01d1658ca137a2d02bd93db883d9650970b52ce0aa113a9534b7bee4ebdcab4f60a520bee3e92769e039a3f76f1d84e726a13d3031107824a500089a128e1f4c58ebc17ebb1878e139ed4ab61a60e836ca042832e4d0b5f78f2205740d038c9f91ad3014514bfcffddff183daf29f9be03e7d52ee9d85ad498269fba05c35b0eb4f255c8ce0a1b8d7576f7d354011f477a512c6b68b0cd846813bdb32154f26269c318e15add3d51a85bcec2316fc298d64a15338ae178cfa8f147a88a40bb62572761a91c4dca151fb5845070fb4a7ac0da78cc76f2c27c00c824e1670f1cd8272618663de12a9f818c03c6362d1fb5e00a3d7f556b125517a13ea6e1477f8a80c82561e422c6b777e9326cae8ea911dde14c944fd5d22096837c3f20724b420b1670e23a960427a9d3f989fda5515660678d538bb769a62477c6f34b17e8c67017e13167c74db6be5240664efa7d4b10a5e90432993faf6a84040c8bbfbede56d36195923d0a2b5f6eef4cc71696b996a246ee6b03bc0310b21ed007f135546553d658e47ea14f3330ef819080056899678e5a5f7e4869bd09fd88e835b5ef469e2ac084147ceae39f264dd2c03120c2faa79036914baa1992877b5513a676a1bc43169a8701c416c37dfab55f81a9b9657bd817c52d8ecd54a5f3771470b21db60ba1505d9aa475a5dccf60e45fca25b0f07a2aa156dd8157403675bf7b6b639368abcc20ae53a74c2c13fcd7324daee1f0bd99ad2e5fdca43e8d789d2f681b5b447a3657a49a55c0530fb0c161f8fd0262eb89711edc87428940a834f573ec178657b78be63f270a3b0ba5295694ba1a2d4a24768c1b2a3907972c0f33527ece168a7743db0ac431ca4e029778e88d323b239243e1e56c92a2da2db352ce7a88dc5b9d07ebc5d53dea22f0932fbe1c5173bdfb608602f5544050d2aabbaf884dbf12515f7e36013782cd97a6e3dc127fbd628656e13a6e87cb42447bd5bd4f26aaf6bdd4fc27f1267a981e57fc0b15c401585bac5c557f342af8aaae07c0781a825006edce5e4d12bacbae2fe213cd2927e8a3ea5e1acf6245ba2dcbbb7faa32306857335aa3bc0429ae6eb5febce4b5185a86994e52071904d0f55b58c38e759c86d62d09c0e602b1898771b6ceff71baf62b4096c5ce614f8129e64654ccebaef2ab63437b741739a320eb7310c963f604bb679d3bcd430e17f2f2ecfa0b9c4ff3ff5d719e0e48aa4562ac9e4be795b5cb5d96cb7cacc629d87709b47df39165d3faa4f9ef5b9feab7753b9d47040fdd943a56884f12f3880de1b205a42dd1d9d8c3bf45370423e2418020daccc6d757a7792e3c7ea7d014fd577647386164944b8336bb3db0dc7a2babe4bba2d5f70c4c44a74fcf1468b3f202dbe30236537d746192c5cb08d39bbc200eaa90da77e3cbc0472a0b01c04e32096b3fc755a57b9a8659caa7b40f2b3d04260e607d5dc36b179933fa15e2ce0695aec452666278061916329a5b9813f682b44fd865b396757122d363f9d519b6ce2bda6a10925b01434e646ca5773c2fbf41d5c13b814331f56c720f55a1198adb6aead6fb3e0cd12c8bcae53cb38d30e65407e2a6cdb2e7ccfe79c7d04fb4cae5f35a5fd06e72befb54cbcdc554ed401d764f054fa1cbdf1d604e5112e5d4bd134f94cd37287712d932cfebeb6346a98c2e14f0dd047660111b5b75c46e60ac8e05fee8d7760213edac3e0853e77fb15d04bf6cf9ff9bb4d0b607fd8eef40df7d9d0277595ffc0b604a81eca8e880a1b580b6414b98222181b9b9af17725c9e099f074464ec4b405994fe5f906f31c1bf2b62377ad9f3f04dacdb5508fe9c315a947515a123d8fb01131e29b3827a58a08c2b162fcaf6695b18d4b5089ce8df9704b3b3b80e8b837f4e4911bb2c43b0832c7aa5117214d3d4850c98c05328f2e9752be650b54c22fccde8e14d72740f8e91b5adc9d93378df79ebc5d72b44b077714475111e041ea019615f145ef5bee94546f6fe073c9ea57ed906f62c24626a7f662aa55399c092b91e54b5f7ae05bdd093485905188e4d1b3e21c55fb04fe928f9cbb15cf550fb358587db45872b32b8066b82daad9000d982dfebcbd1c11df26521e03ffe16021600c22c51697a6f870526208ee5ebe63e0d0811786dfe2d6713f4d7069e59d0e3f6cb50223a389dc4fa43db2aa7e926d44764de6f6d4f420f690c41b9bc638c24cf6bf0c0e4aee3f84c885db4dad0e92399bafbb7bafc8471d030c45e407a5f62f26ab4344d246aaa63be4b3768e956b269d40f583a4d1a15b12a08ff11e77123c99043855fe15962a7ad50b8387c96092078c35bd78a2d8372c0b6a319f2e9f2bba546bb002fd9a9801c124132d1d0b0276fbfc778fae4447dbb76533fe2f054307064df1a54120556d439d93e2f2d30e481aaa405e668df38e2ef166b01add390ba46f894992b01919e6e8944e0d50fc1752dfb6596e0dc0dffcaf4859549f6444b930e56464d22994059582c2aefd82515efd3825275c463d8aef576e7eb45b2ebf42a48a39ff2d682a14ede56a3107827993443624f1da1374422243fbc494362115252f84af8b12eee7343ab1b412174d226900d957231e2348278e5e4895f7791915c8c75bc900aead041737cf28ac443b2519d70487aa1251d5a208a8e6ff41dec4ea849c7dce03b6cc1f4f1ac1adf93df6e580729e43ec0fcb339d6ded99f5c6d1094eea0fe76894fac789ff6398c6bb6d087839cd77fac266978f1030740f71b8a988bcf5c947d82e845b1584f95733d5d710b2abb2e91a3662503855fa195fea5fc48dd6004be0c5fa34d5ac4c0527efe60c859f811197c908833ea4b89df1f47074e51718df5f5f7dc9c8501d6b1819c9ae1b4f6f1eab8d1e9aabc32bf7c855902c5b3f6f6ca469a37c5606c9e374c1d687fc01e95ac5f108f90827c0c1538c435d58c5908e4062ffbf0746ee28de96b12ca07d6c7087a35c30cc5903852416ee8a462018bec3d9e71474770685a606ce0e910874da51027cd460cd80bdaa741635dc0564789f3cfe1ef63d8f947b70a1a05639af02d29d0f567dfbb4d567224ed262bc0036431a99213500f5dfcf82b074589757845cd178397c6a1c56dabfed0272da78925fe16ced9947e5c202bb9f0d20982ad9705e4befd4af23cc859b9528a4d739f7363fedb69b98cbe5b569b1dd36b2857cbd81fefc2f2177a0f843cbc74148c0ef6674702ec47a04a5783b9d67138ce3d894fb15e0d477647e9346f560f085b9d5712da8b8ac424c9b9b9fb63d4f7de287871805307d0786bfe723a6783b346163e6c9fbe6aba7f042c01490b2330bfe040467516d81585adf7458539f89db63f527e7ee3b5b019c056628b18876bd92d8ad678eea79e06d67cb63812954c14e23c4f6041922f5ac8dfe4a9d0273194d7fe2a72259cf461ae34cc3b3b824ac6c5a4e72b212abeaae3708f8b7c2c0958a543494901e19e00fdc88f76fce81f36b1304fc9cba5e571d8b16c1a63bd7c8d60023be7cb9b24498bdf07d29cef51ca6d8b8e20872a2c177049823ccf03119bd0e20932caf50fa620223d3565be6aecc35bac1a9de11c0473e1d9da062550eabd8cba144815e57e833938899d7ef2037949b29e54f33ca0a9207add514cc1e2efa756748b2331397dcb00b48d566f7758fca793f6881454d9af6c2bf8a0edec2ddce639dc48783ed6809ea07d6f6baf281d93e3c9c72d86cd35b7ae43485b6e41d3704d83ab44f756021933b4f06d15b1537f7516d90ea04b5b644c7a6d93d2f133ff97c8761ccbc4f679577c02fe10ba47723124e63f081cc97aefe4361e7e06a498fff3ce8922ea07c7f31bcda5080da074ff3d1549280826017ecacc83dc48d0456d4bdd12658edb0aeeda78ea6570078dc7a78eb366d61a02e174564a527e5c0dc919cb3ffa791a4a32012c5590ac24c671ab7a052c504f83002afdfc4a72f3f9fba5c0984a736d8fa6d8106fef899e26e59101c8e13c6a8fc334e9202bea3b0fec37e3a6bd447ce232a74dbfebce1eb50ca14a83ec63162b12d9413e5dafdc5982175cf0bcb3ee4abeb50acded454b7ccc237ebeb78df961d5632ede48897fdfa68d54fead896bd0324b70225bb4ce820e5ec402a981bb38f418d789543fcca841e0f359f98e9d7b76b1a7459ee44ed0bb9b45d52a0905b9574165c6e99b6abc39596088098a2953732fd6be1f9d746cb92228c2a2eb7feae625ff1e6f6302237840c4134445ba600f0d251645a6e860f23b964e79f0d0d58a0ece184e603be5e4dd46831186f6ab3392bdd477c951b44c2eb70318e0a0822942f93cee5abe0b67770f5fda17853bc807c6801fcc576eb142b268e58399f7ac0aa912b719329de857462f06be1018b4b467a3a478a39808c0b00549a1613efcae0623126440a14ec6147cfd443f4be1e1c9c46e95dd3939f0d863ad01a05fff7637f665049021830aa1cc2671b9db35d6146be5ebad5a2b1a5309776cff609faa651319c2c9246e6b14aaeb0c27d09ada6f207141b902c886487f11aa254bc391b703976493b3f733959bb3df3033f737026c7a61ac39f77ce04ee183bc275374564d46b298d506a84e29e7b07d0b3333f6d668112c07a04343fd51bf69fd369b69798d767d92831464dbed48b560381773e7a31ae175ab249814c725d6d4564e1910d676edf256bd02392e6f813aed2ba0259344758a0167071cad7eabb49ad58e99887b8efe68ec4ecc12ec89a23ab6a61aa0568d4f8854ba9c6a928fa6ea77ef9c0a4d08bd9fe8701b0289749f0702ad4e331ad4ca2932d61c66292bb02e7e64a1c6b40438e4fb91af640ceb3a3c55dc48b256ef +MD = 2230697f485a62874e98de02d7fc4413b5cd0c5146f97dba3fb7489c + +Len = 61216 +Msg = 377118d283033734677e94ed038c051270f4fdd65fb65246fc5644371978bc7c88add15cc88d9043e506fdb799f3558eb7f0965ec96d4136f8025f8b2d02c27576538d1cab7df76c51004b11beeb339f7eaa3710f620817447f6e3e476321bb8c90b55fa74fbf11a741787e2bc9c28ad8fcae7d42df5986ab1d9d8293a2e4eab497c30de6a3108b217f1b814d92dbb20b0f7af92b514107efe534742c21ee3b8bd4f26b0d645c39d0036e68e5ec67560aad99532d7a6711af50e3716562b6246ef2b3f58005faa43f88f19389391ddd54519a49ddbd341a560afb08f3d7d54bca5b984be30a8460cc6a45afabfb37be8485fe1b909c20a8705e1ba94c13b4184a8a1fccaae471e61341cb0bc2b57d7ff7d52566fa89c5327ac4a5e0e288daf05c08aaf65c165bba8089f246620a37a84aa9b0aa80288a5ef1f92a3e3bb9c28a7b41ca675b32aa34b0bd7bde0e4bfebdd98e2054a5daf8746256292fcc29033d24e00e8e3cabd60b005698312bfd4b2740fce503e0239819485623141859159ee54de7d984f477a41be007ee5fb0a58afd707f26d394d1b4208398a9a4bc520638f5d6e7b89ef7764fd42b73fdf8864f8b736f3be4a13deb6768fa5f05e57139ac726c273c2dee1838cd7350ab2775eb678035c187cb45159970e8829046db7f9c4e1816a403b3f053168002cbdfece50e21534651858fd93325c3d2f863096e94d35b4474d2f1a52b59d218f48463d30bd15838c662668cd1121cce82cc737d32cca62f22fe2f9d2df1d9f199a7733bdd1aa5175ae471c6dfa063b3e3d5a221d274993522e7b64ed799182b4fdb8365fe67da70838e3a1ddb6b294180313e031075a4f519423e30b49a0d347b731d07ec3358c2d4b217d830dcfdf5dc418f87593a49fd6a701ff9419f399b9110b8882317b09cc31293ac9c60222f7c991f25395d08acab13e3ff0af31dcf4536ee6d4f8f725cd30245f16abf567cd5aa75732d3851913f8012c87d303a4dfc58173dae050e818913a75d18250b5c7be81ad79176c539ac5734cc14f11fa62af6db6fdb12f5a959c92036414ba15cd3f497f92272d40475fbb2a07ea02e565585938a5323b842d9855913629dc8dc7232452e4cb6fe80310034bbf6b7f6ed0096e7f3b2c1d6dc6cfaaa8af895e289db33cb0d7cdda54b41e7039539b2f9c8b0ad41525677c1d4987bacf37fbe7eb3837b920d3f4178b43d22c7b2942bb777fa3b282cdab019d9f09ac8e36481fe07ef7c32b4007ce9599745f99ab28ca07921c304c99c054f4ae9da96d1438b00e583a805786cfa67b9c4c301b3f140555adbc78fdf36d1c2a608ad9f539933f7dae4a1b2f0d14484436a1c88a4fcf1368b9ccaf1c427b01489c1a63ad0e217736696dba383e9d5cf84ebd4f6e42229e489c940032eeb3ad554993701df9aafd406fec86fc7f3489a0cce6ec4d80d24bfe405c91c65fdac559513e27ce63f57ca3aa0fa602399f77429765c7b171aac4918b6c8a60fcbbf45d9b63b147b5cb9a68011d42d2d5a7cfe9998209217d71b109670b14892f1de0670f4a351055f4ff965b6084f5b914399ab984da260ceeb96fbb8357c760c73182953adcb2ad385435a21e92f24fae5c5fdfb5614786ea85ca6f1a7aa5f58290b3157dceb4235f414ebda09451fe3de13ff35bc70c532dbd226a19a5a85716a5047759329e21306de7942eb39b2d886f43debf33fddb7f087f96c8025aee4b177ca31730f90e74810b0f0f16574658af718629cea386a80eeada6eb64222e98e2382fef24c52f324bf168de70db07549d3d4e0c085bd6f786a1e54ece85cb7b402fa589d1f5575ff0d91ee4b45d3a7e471b02e302be69eee084ac3cad5027e2e20f46b5cfb7ec2bafc687b6c8817b628510359461e6bfb17cb470178907e06a7865981556637a1fc94837c725de469bf7db3aa2ce5b24f9cbbfb561fa13617c53a0fe0b0eae8dc6ddeca39854da2894efdaa690708256124e04f0ce7919479304600d0960ff739b6e126f9cbdfb9de80d7cede02102afb58432b6af7e7fef391b1129b2f5ccd817fa67d066f9b9130fa15095142842be3e0eb78b7782bde4f90842f88a259d27b6f33b9a69709924767bf4209f2ec8fe263e01c3c91e69b53d4c63ede188e6ef12f92c0226cb225eb6ddb614f38d1bec08a2b01416b9f9dc8067f27e6b8840aa967cb7cc2151db0e3b4734d6b3cb92045fcd30d0d2dde4c75cdb8d2e8abc20c6dbee4d3cdbad29df8e58ef0a5272f1d3961e02aea002b1024d278272b18d0de03dce7af8d855a52f2a835314421b81d63635b3f1e0c0f519bbdc70ef92837e6336adbf7489c3c3999a46ff89251de888ca84b34f2781177a335ad6f98027e8ec710c993472700b8b482442dd5e028c67cd8b8f1ae6dbaea04e2333251d02d3d8575b86ad24f2f390de9bcb956f61e3ffb9caa5d9a129012866d603f6cb7cd5a3742b066303b50236a82e0825db9495bd19c2a62fe901d58f17e3d7e31e1e54fa31eba6eab15ebde94f5b77132543083c57f3fe7210ee9220cbcd0d7e876fd8392b2dc6b890288d253e9496e1ced5c1da1edf2d54cb57ad9a0d02333d89d9d5ecba62043132cb0676e079f6264ad53932b904a12c7ad5ae675613e784a7f4e4818a18edf91bbea05aff6c03353bb9f4b2c0d4f87da1d11af53182790864497a93f4b2d274bd7bf14dc5eb4cb2f40c7af6b0f091ccd2d259e029de861d41301e9094d050388a6b6fcbee9841040635425b23c81bae707201a499789d57c1413703e4f1e5c925357251d3d37ecd04dcd17c73cbe4771d08a8af2af10d3c57155a7a6f88118af042af7c102d5462525baec73b8c8acb3b3e958c38c8742f94f4ff408f1352128e2b8db71e167058814a40c7e58a8d2f5d6c7eb85d7f50c5ed98ac02ee1425d45148837f781f413414212dfb0c365a07f61ababff3763183c348d74de71b1b64dc22274198c845798d68ccdd1a207fd987d1e00fb55d84edd8be076e14989138a160ffba0a720b9d5f89a3ea89c97d38a52a7523fd85c9688040c30ff10d25b4236d633537cce213fd2c59afe5a1b099b07ce099569f7d884c79808ff6f9478be4aff83fcb398771f8994499b839e8714c41b8dc3b0b2fc1afd0c68ab0dd851467b135561f486a3bd4890b347c025353db31747915494ea92cef1b7c993a5ce21f099104ce69f8e61353f40cab9bafb5df9499dc9fea68b3461cd5d22a804d799d3191b8331eb1e53782b59eb1564c1bdc139f83155efc547df2bc27ef5fc54f4491be0ce7e723cda3adc64737d2c6fa63170c193027781156f904ea521952d7b7c28c6f7753dd140a3d9cb2b9818ed5e71755eb5ac46a8e43a86695ed5d74b7694c735c4bd53c3cbdaaaf4d80f33232daad0395ffc6520fd68947b72b9cb942db88195ffffbcfcc408d749458982f95d040ab85b99dbd3a82043ecaa7478f1e711dd4f6ee281627354e83039af0f5835a6aa45702db0a72d8a1924ccafe74aeec763c9da0fa9df1fe766137b29e126fcb93847655dec86d3cfa08ba0111e8888019b6c0a2d3c5a11e8d959d49e004dfb643d2603d39857e3176089f0432791fee70ea0c8e543ba9280c76a0cb675b37ad040491237bc02a589e08782ec0a4f98a343cedadfc4e9e8d7baaeeb1a4742c024c91a5a305e6e614ea8eb1fb5cda99d5ac25c09c2cace5b14398d39727ee017896000a26788855f8d401f8f467a86573714b41d365a513560cd6fbd652377c5278e63b484412ee66f31899a4618d00c5fc03cdee57e5abce2fcbc409c3cee1325daab562e9251401c0193085eb06e05fd4e5e14743dd13ac351dc8abfd42d49accd41510d81d7b3bb3ba4a03549488a374781868ea09ef52a51376375f01cafe3ed8b6cca19a6887564232b74eb46e235320cfdd9adaa3640863593669aa38df3c5f2710d5fa70771067a72c29e505720976941fd6edb442c773fe13bd9aa2a03dadf267d5dc277d8a8103ac86b4e2f20feff1aa3eb1a6917acbb169cb619cf3cb6b855c31ae022d1d34d4e2d5928b35cf03650732b50eb29ae13fa3037d8c4c6e0e6c4879ee74e850e99759a71c62bfdf476aa143663138904ad55a067cf51c8e0d23c70f2c1441be15c76b7ba10df2a9327f12f143d296036f3ef934be7be6a3fe384261d544cbcd4fe1a2b3cef160c54b1ed6bcec475d5cd4b90b2ed0652d684806652278aad9070e7299fff491acbbf7d66716ae23e11501fffa5541556313713a89c1949b1be3c806bba0c08318e5cf124e8f37ece3c47d6051388fd12a6e00313abfa7b9e6fc12fa7256a12a47db476ee796e7f6b7d3ad86aa592a4ce5a08b86f28d207bdca855da7872151bbc24e758ecce5cf5efcb28df60279f4d278369a84baa9d556f8127331893aabbd82b254ca885f55efe2375d70d245d46526f311190a88cdb120f0d70ed3bc0af4e8697d6b55e5f965574fb0a2bffe2bd18cc685f8bf76d7156ba5f3060caf55a619fa5639dd7ea30a8284ee526fade35cd4375ee7827cdbcc01bb2ee0dc1b741c40ed49fbc5323b248c5d7f498a5ae34f23ce04affba1c11c09baef66ed094e9e83cbbc7bb809a9fc9c62cb4fb90b13f2a414df18d1ed714eab28a05ee480cd730a1b197f5c0cd5dadb1c3b2ca4ca5b8c7c9057e9ad68d3a9118fa8916c89d8e5fe65c7d05942a805711235a7f29ea367d6cbd5ec361bd07760766fc72b2b573a87322e3658b408c785cc22894b90d3c9d84bbfe7150d4efec3665dc7c96e33bbcc08b6780168de663fd36b9a59a6d3fbaa9a7fa3f146368860e6da5bef5a52b0f672c760fb68132bc8ae76a2c1ea8b4575407be873cf715b5f7e4e4945f89d612cf5c9b4efbc8d5e48e5ad692e64e4ee61c31d7d43afe6bfe9b6215a724ffc15971b243d846a3647e60177b6461bc44095adcc2c08ee7cfe2617bb561f6758165f6b40c3637cf52ecb893b53b11715813a85efbb6a951d5f3d288405f34997aaab6d860e33f9b15a1f0563061860bdfa77d4f0f313abb0295671e52f97fca31aa3aa5ce59dea541409fe569823ffa6f37521369ca8381ca59b7b449bb28862ae71a92b114956c5a4b1fb7cd179fbb6b35bf4297ed4454b1b32cd0a12edf6bead3af25c5bde45ec5240843d78c35cd78452d531603dd824d243f0a05cf04d9e61290e558805c0b166de210157a82af0ac824db60c8bfc8f14f76a6c416295e9106384806365cdfc27b25b3034d16ee87412e3204867b6742775c5d889ebd7890313dc44b3a777b5dee5b932d8e530a9242b20d7dd7910bb54e6884bfb341a65825f9f083f72c3c4d39ec46f0b8d761a04f48b439368114de3723c2d60e56665d46f5436d06fbb114e06025094714a235c96accd31dcc1101c4068e580a6c371436c83352e4566859745fd3b3d38b3ac73380bdb817f29ed477994dd231d3a71157eb56d219dcc06f5823d99cc8bba9d920331d749f650ccab44497c11f5d24d93cc7046711ff67db2e648d30a1165de011fa52752ec3f9691ca0d2a11d494ed057f3f28e572ebd31498a84fbf73be5808b3ef356407fc3141336b4fed63863ab3bea77b473fb3ee64c0e577b358cdf1efe7986747ef918703a6e8536b49b21ae4b232a75d2d57b8e98885b2ad699992fde42727c24d057f1f4b0e9f542e2076e2836714f0e5de18ed161267774e2a247bd224dc9ec96100dc4b64996fbcd737f358ce2ac70e50f5b6921400d7ae888db1d917eda30aacf484ce72aa8699df436059f052ac51b6398d2511e49631bcb7e71f89c499b9ee425dfbc13a5f6d408471b054f2655617cbbaf7937b7c80cd8865cf02c8487d30d2b0fbd8b2c4e102e16d828374bbc47b93852f212d5043c3ea720f086178ff798cc4f63f787b9c2e419efa033e7644ea7936f54462dc21a6c4580725f7f0e7d158e3137ff64c47cc8e4a3d5eba5e7d6d6514738282e6c37ffd5de1e0f279dc401e537a1f93018ae2afba761b4e3a180b3f68ce66f537d1557fcac2c1bbdb86cfc65d54a7b6600c7a8c36cbc364d4bccdef7a31752397f23131e7d451b8de8e853849c9a0c933769b0d0564dd63f212b95d92c23975cdce1afbfb3f1752499c6b5c5f009133406f4e1a716af1b35dc1da72f8a93951a30e18c5502b9cf1e657871ae722025c50a09a9bc00588bcdd723514f30ffd20df5a33772cbf66fe7b68e35b28567bac2ab187783b5c29e53acdd42ccd1c0e4b4a5974fad823ffdfd17687056bc5858b98491d992a985c983b79bea3ccf7f338acb4e2349c80effeb02a7902f896a761601065e6d5e0a93da91ffb5f39c93451cd13860ebffebcc2e02cc33817f26a964bb06648835d993a4c66944a5cb95afd741c66708bc4f09228236d911001559221ce28a57e37b3f8ecf7904b7cf0eca36b7a8c4346fb12d851b87df42aeaf0bdaa15b4e70c957fdf5179f749e29572ad78d3006d39caabfb2492fd48aed6c380ad2a11f4769f86584295d12ed7d1748264d0c8d8ac5a4263665af477e4ec5741f4b847b6047f4fc989f327e1a1cc7b8af618ee6ae6d25f78e2b76b681455336945655f13fd5a639bec3a004a88ad0e2df8547a0d315b8ba15f5269038638df6169d960f5ab5b483734136551d69db6d3302b72a8d31d4c49a4d2f63082bee49028bd524354a7880329255dded1c3fae46846e023153f2dd57ae01ad74f0fc95d49b93ee54169ab699219f0d9c34862c8664ccb663feab3aea924dee03652163296742bc2bac737d03896262af25376e7f3e63c589945683cf94549337fb05476d59721c406e9b6a0e44508b9a70dbfaad6bc3ae36b79d3e732ec64b972500a90cfc928d26ff8af405ccd9d6e299dc477d975cdeefcad7c181bc03658565bc0ea4cb349d43b1cab1a68d8ee32c22c0db7c2b9fd62950aec357d6ac7f975f8feeb14fd8bb3b37c3195d20b01ebb8e223d35a32d3257eb8aaa820911f8515504dfbee4ef7551f41c9196110e08354e68d3169865620ffde3ed7ccde47e27f8a3482a34e93a3c792fb0edc8f93e0de61d33bb75d8f3b60a4312c49f846fafbcf3ce8fca66985f29850dd0c2f20ec9e7a7e580b60845fe8330a0d5e8924b3d047eb96befe81e4ea7b4fecb999918ddb5a15ef2e363f72e0b351e4d536e9f74819ccf2b4fde1a6f56281a4aa75eeaddf28206ae988c85d904c8f1874a99eada96e6465a54c93b55c756c6da96a3d33f00d283002fe250940244a11048a4bbd3c6d3d5858939ff767de9ab07c2088075731b4a9413f605d38660d374c80f60e493fde3196790b565dc293d3ec40d6115cbb4c3d70f48140bf385df21634a98a180bcf5a27a6e1b9884cdd40c172303946d4785455c48e9c1fc2c4aa284e6b18f0fa9939d3c329072ea1025dc35d9d675fa3c156ba5891589e2dc9c74b7545a01b34c3386278e92a98ec8a94baaa2583ed51aeab6557915c85a1f5b147513d0bdfe0d5bd9b6c2b090e53fb4c6d00d0753905c8bb1e6a97901c45ced0e48b5e3f852657324748f68cd7fedfeca508a7258be895efaf39aadcaa42de8deacbad25542fd2fe2eb3539b3d16bdde2a6ab17b2b229faddf6bd22879c0ad4e20b834a59623ce891856481e86c31e89c4cdf66060da6e5e75a9175ccfe6c17c4ffbfaa8912ad13bcdd8e0fdfb2c89553bd97fba7338886b3a9a8260f5dca4803f3c07148f6a657c14e32020e47a86aa56375373ac65773af6e71a1c33cbdec0b82264d3d60e11b4b71c127089d49df0de8f7a715389c3357037e878d0dbf5a6825518cbae3c5e4b7c2dbdd33163578f9c88fd9eb0cbf2c37233f25d16337399647e2be6611cd2a92cbe2932264f3bef55cbe3e00b548e4bc28342b14bfce0002845a60a36d8f7368f765f76aebfd279d4003421ab4c1f3729cee05eb85dc245945190217495555b6cfe668512dba293e0cef948d9da2bee6fbcd24aa57fa3cf714bf112647e727e8cfd46499acd35a640dd393ddd263cd85cf6225f59890a0686dad1c54eb8d809b81c08a98dba131bbdd6fce8ff59d95db824d8831ea480529da739227a6e0f62b603b38c35cdc2581f614a31879b8be54aeefaa03af88c1b7c5930112fc69df34e594fdcd82bccc72e252c00bc13d8d8dbfa929df6acb6c9ec99bf7ab6e80c224ac7e580bfffb9cfb1cba93de7ea4b9e33f3a7629ae986c4b50fed4557fde45971f47b60326f0fd772facad05047699f1a7f42d76ed685759f62c25a5a2dabff8a891c6478a35849375b96a13f53bc4458466ae4ba9c3a42723b46a1079feb7b5e2dcd74dbc41b8cc9961598fc36cbf3b4f12771c5622d94f5418203a67c2b37b5899878a1fae108f0524f9ece171e15f8288166d851e7d4f11d7d667eebf49a56448458136c312573374d99ff1e3e13ea9281ab3b91ef682f763fb4d815cd0c0b0799fc7943934b1cee1673d575b25353d82e283649cdba74f5d1d3fc223ef59a7ae04c1ba68fe2b11fb2129941023ffaa291c611a10a308b423aad3239cfbecc44603140beae52fb722a6092adb73ea997b06b13c22d343b048228c28209cd690e229132b37703c28d85430ade58b7265f950085d4be2d4be3b22ef326738b397f2c5637ac735ece1bcba547ff6d143aa3486eaffe46838489d1a60f4d96600340886698d128c9e6c2046d92367ebcad0bcf9bd9694c9dae9be7775c1ef8b591f83eab9d4b20add42a398333ab1417473e34714b3d58e591c4fd8b23c223f0a950540b8d42e3735efc72cf7288b68dd0e57fd74ca1f2c2f4aa19c9ab619f7b14f0d470b2ddf7814de0b53897f2ed860fa7b6b426bda39ca0f546193e21f2bc9a7fc5c15245e641687d0ca9e913406acd2de3f21fbaf2dc5e4e8963222da61d02a630e6b6a23819797c7e07b11337a1d21e0d7880c068e8f45dec8fa0ab4304160c1cc6261b73734684133b381a5a93e6233d2e91f68b292ac9768600c44fdb9c5a914be9d821b6993ed42dc34f32a9d1e47afc9985e607ca3a2f2e8a9f54095d37985c4902c94a3852c8c59dda46495a08cccae295feeb9a5a20708665d9f6214c37e18cc1f497eb67f8ec0de41edc4b383b80b24d5d3b64ce50353b3d670ab04078c3fb3c29057c256a885a9543cb6a1bd00652d58a61ee41c763f25085add1bc63e8de9cf0fcb1362882cd143c7d805a92440a560dc301598ee3f3c5bb474e68ff397d08d1e4543f3ac3ae8a9159549c8a2321f86fcb64beac9e86c59140edeb549e1fa955252beba632451ecbc9b08abe89e1e237dfe119297bf378900077ee6a000ea70327ffdf76b6d9f971335acb385f903ded693e120e6181053fefb3184a459029645297c6b239b3420b011b08008e773019d04450623a799526766b12fb57ee57fe0fbd4660a21c22229abbe91cfddee4447cbb7c2ded234fcefb6583851c705a5cc437078ad95ac13d66021596930c80f5d56b3d7862c75cbee86a14f17e5d5a03dbceb237c5b546e4cdb835763a4b2db5431b3c4a81ade37ea3426d4664ff7e7dba4aef705077d99f37a4f0c2d9e1130b2e9521ab321d0d9796b5358cb59cef50cb73653c61e6a4f70c8fef845717597ffe9f93a35d5e0290278b14cb5b7dd5077411bda3e14ccc73b441dac39e3528991b023a3beab9e9f1c08bb40c3dea57271feb9fadb6ef7c9c988258889583a7e2ed86bf7ac176ea43c87fba56432a9d3a33cab163c918daf81e1a11da2449ffe1ddf2ca69cadd2f0da72dd1b25587d0c818769ecc020e0e11afd0aec133ce571e5110020eee35ddd7c45d9f275b47185735b70cf0491b416fb46dd745aa5bd822b2a6107313c81f2a89d9ccbd3db39c71f455a4d887859b9893ba336f7138a974697d9ba022dc1b8c5d68017ce313859dbc170d8ba2954316b67c6b4671adf49ddc5d4c9b04baf988a8d1e66d36affa64f6c6ef1184936271837e26d29002de23750dcb6e9faae2a3d3dd22971cce244c082af47313c71f2f64870d1cb77e91909b57bf21ddf3fe6744545e037eba2bdf5b0bc2b83978a3dac05ec82bcf6a356bb501d1baa5df745b64fe41b745b936a5573101e8ddf015f9feccfe08be0ef13d2dd4a843deb46d079ba274bd57146d2564645a0ce7759e15889957b96eb2ee8d6a98edc372bb10f4520a9e1d9e13f9e7eb6b742b3e5066b5c58d7d48c59e54e3d4154743483c86a9effc68dd01fd0273520ff94dccc994611d6f15bcad194ac7d3125fca487ff6aedc417907671caf5203188e7a782751a2f809ca1e0d6df8c2cf59dc605acb898c7fa17ba2bab6290b644eddbb2ab4c4febe214175cce0875b30b0670d666a66ca42e313b7e1149826df788e17cab616ffd78025c9d4bb1f1b5ee0a8da54a2b7f08cd1eb4dc47e232bdb60499741766e2dacee1c230c46e789c2b146ce0cbca187c431ab6c4b3bf2a3c0ccb542753cf50fa333ce8a5cc8082dc2eaeaf277ff4e1654ccfb1c5e952e16f5857a204f50d22d2516e506ac8baa8fc7553b4c7bb5e625a36a8166e5d2ff0ae4534139b7f92e0f9b60069fe4d5f3383ab8e2e70124903c19d3e851c83b8c09f4fdb2969680313e6bd9db5eedef0eaf81dc86c8f29675e41eced6e6ef18fe9a8d4d743ed22d0241ff490c4aad21217c0689d0f93451bda41a24f42c42b17c46170930395548caa0bd78416b0db255282f866781b19e8f05759de92baa4d2f93fafa8d900519b0e40f2e21caf5ecd13a669df5684fc4138e97015deb0d363f0b9fe8344acce8dd945c32546e4e15be3a12941fb6f80d73c7e918fa7555b2d3366c9bcc6f91 +MD = 07122227d8d65010b24c03cd9872a573367054e7593652dcc22bfb04 + +Len = 62008 +Msg = 10c71aaa966bccfca56f7135bc20b5a4ffeae5b2421ba3c464e9dd63deb7009b9b9468a00b051cb87304b8548748aa803ac7a17ed57a43ae46601fb2bbc5e2ce70c4cd95c50b66c294de6e64c15f143e130c686d4289124b51a044941d86edc7375f30cfef0514e3b1057dab95eb5ba431c021c5b2d079632bb135522c80894d976e7897af7b8de37282cb722976e67b3debb4cf4cd8debd7c9bdb330f3d1f2738f88f352df6398a7e5c4200a5871f8ade9508d33928aa22ed661d81ef45151ec3055cf193fe809f7e9bc99f32a76d9bbdc70719a048465a251be282f31ed5fae09ec7130619caec19484795f85c3874818998e8aac1182dcdc214804452c58336c9b8e2b0d17f37f86aa62b1e31e9ded3e1a38a7e1a8a638d619ac109694f806e9017a7b9ad0749c209cda9ccabe6a15bd9114546db03c30c025c8e6be9dabb2ffbccab4935caea202da4572c549885c078c862278deb16f3ac422e925ccdfa2211c03386f231e1badf137c63b36752abc6b1284bb7a924e96834eba5499206efdad98a9b6ba2f8372602629c50bccfc3ccb4e1dae1a7b5973d1a0bcd3990a73d5e00f7ae2886f5400b594ffdb4fdc5b191bad3fb934c91a533dcd731b32fa4b4a61ec1e8b246a17c95008cae6694fd1c1da948d756007fba526297fa3fd7c7fdb91931709048c494ccdf61d8eee73cad796b8696b12b497ea394934f65f0d6c09fdb8f6f4af6262fb8df15a3d5604d0cace6d55f2d35b59b2d5b1259aee29aa4614a230c69b78ef662e6f236a265f7e0be047f5a50878cb6f89d5e3fa116db520650347074f2c690d1dd3ebadd6001d1b8abcbb1a587957a0d44bd2ac7f2617296d40bc2f31194a70dad42560fb83489a1c50089b19e9a8c73367842a6dff3ab1abdf12b6f7bc1e01f3c4633bfd558ad8139670dfe346197325dd6aec8465ba598f52cd36f9815e50e749278751f35e861ef486213b2b441539f2197b58d5f091b6304e17bd0575ee23c6d4eb9fe92df48cfebb3787e5932dde69f24f31ec87fa8efc37d1b8b51f2a47b21dd14da383d3ec19726b6021813d8199a7e0c5f5dae4981afd1d831c94a5b1bf44c0d1bf0a84bad95e354a5bb8c4d2058cc88bae83f05011202392a880e0f032fc42d2980c8787b2e13dace084443e32237ed962fd9e557323bc7de56e5c81b196cfa6cb047cc13a7ded0e7c9e4c2493fe7c55afc25ef6c58a208b6fa778f4bfc6dfe4d4aca505d4b6bbf57c413d23cf903977015cb2d26cb5f86183e6d6b7b1eeec13214fc0a4261e32f86c27a7ca496b4ec3f4272a76ed59bc96de86f6593c918ca84d88204a8306da6dc8ac1c7675f214b2f4dc2642dbc7e571ec124847b4313a1ac5c0746790132aec1e68fbc6e9c733ca8fc656c49c92fba919135d01cd406ce106931d69b1c5ace9d9c8c61a195d147121900c7ac44d77a302049515cc619d91ac6a8bef8c90c8fd87561c0e89164f5d56a3e7e3c759d1d62350910245f764b313d150676507077da39b6e12cda53cd59b8c497e3a3aa2d8e9a1d145de942acbc9420b4fff8af100bb032ca53b6c75807ca3d1d871825321e152c65edaaa882259470d27a0bf1e2d4a17e85476ee81c456a4f15121a37b2796fde0cbeebce57d305ae67cecf5d739bd6421aee49dda37c5ea2896bf208370770dd10b6f3dcb22eaf817ce58d1c4ec915258f3291cf75156fdf807ae8bf4830dfce79bf0cfb1c9e599218a68c55f8c727cfeefa8ce5187665ae032743856e5c855c50c07c531c8bcd8943f91631fafcd4e93f2d8448160908b6195a4d812ff32b2d9ca08c0b3a5dd10d05c671d8ddcfe31b88b5bf1ff73520a0cafb4cdc165d97e96549844bfe7c2ec667f5e67129aa1e0cd3798693416174131ef289bda8029239b3a2ac3df151ac5d706fbd2564f44b65276120cc7ef7cdb81e274c4d6f4be3c58f934b069a42127a291a3e1b181433cd8d55d7f1355ef337d183ddb3f29e54340004abd181b82ac498dfb17ccc749eed0b3df12beffeae3740ec8318b964ab2e0fdd12c42f1cbae4c7a75d6f097b546dac01b7a1333fc660714b87a44d06b15dc306c9072bd48b81be588b1d56911cf4758a717c8989025c6e89317e35ea2e66246818c3fd4a654484db83ad3b1ebf2a70be67e379442bd03f8cc9cff97aeaf43ae946202ee40fd520198d48408a06b8a486e0ff8cd80967ea3e97be221dacad0e729d45450c53db9df9f116ee3eb64619cb26f749ad64c77986e374373a3d39a7ec635bca29f7ff0062f63ecca09a7bd8737ff4392b0498f34bf419c03b66410d3de18946a2c4e8533ee5e963197900e867341ee2bbb183617713d44587ed6d494f5ff840e1823e9e74063e39121a7c51908c9ccec3322fcaf188cd4f869a64620825cf404df9abe7eca166d8f146981cd5d19785ad504636a19b2d65a037cf60527a37ce4ef0d5388efe88c81fc5fc501d49368ddfd36dae6f941c103d8a554c14a858734c3164984265cd8f055f4ff5523ea270c3834e3843bac1d7c55d9f2d36f559b6af820110f01d5db70adc3a145bf602b6bf2791df05564542a076540b9faa6320e0ac54a6806f5fc8950364b320ba7fe53d89dea89db0cfd9369d1dee390e9d3845770464daa3fb48109d76dd89d14187a46fdb9df3108825f09ca2dfeb6b308647aaba52e6015bc1e27217977e856f235ca233c5f0be98ad343a8ae59d0743924e0f1d778dd0a4ba734af0ebe71c3242cdea8c287a0126f96b3e7e09372cffe5c36cd6dbb55a01bc2beda8e0acdfb16b5f0e8fcf7a235a92fe712552a2208c060c8a8c8647e5984e7223e87eb51615267ad8e3c1d96a5dff539b28c8c42b117d9331e8812cba91f8b0b358ceea0985fb860e30067d1f57c8d4842e738697b6d3bf2891d34a2115424d669fd734ff2a73eb7920a750896f76e8f3e05cd0aaa58ff73930848b614cb5b10466a279422b1511e159ab39f2ce90f6b1e68a8bae0339a52a6d9dd6c45dd844555435a318b16a600e831a1fa09c9e6887e7059de9fb5930c4ef24129070336f20129a98cae4f941c747fdecdc0029a53a8bd6f0a4b27800cf5f24290eaf4f982f47d9429feb4a1ad54d5b87ee22b815957b046b26531d7d1364a2028640b329489cf887e1efe554013c3cd81e2bd3205f5f97f5b904d10f58a7a885404be78834b90151d617535811bca8c7b443022e5fde9878a3ed1b1e65d03d9a83f9741fbb45fb87c88c1b8dcd77a83cf791cea75ea10edb2d38831203866a299971e154a4e9ef11fd75c55aff12431f303ebef3245001069f0a9153fa71361ac8dcb691b94ce4d7befbd9296d388258a8715b7a799279e0418ece49123aa95559627c3dc017e2c05246e061e08f6bcfa4532ba5250f7f535ae9c15c1289cbc3942ababf82f1f2b6037d626920bf096d6f0cb8daef701a473446f3f5c405a54ac05df881c7831aa117c9e5abf571611850c38a82a15d53a215cbea7aee573ed32622bfea56746467d751f38e274d7db98ea12706017d314d46a0305559279e470fa29562f96dd8f18b3e137a7dfa643972cd19ccd879bc300fee4deccd1cce8cc105055176167d277bb7ced7c1211e7e446fe83eedf8fc33b7ddc7a912ded58c8572941f96165bf1eee5aa0eb969b4724cb11ac30aa3fa3f889428f3ef16bb2da211cc3521167a382eef31852e7b2dfcd1b939c2f522bd3ac83cf7312d6c8959620b34f9dfbde3e281feeba5e7fe91031dafcda5771c4d0ec0fcbdcd948746f70b8854d498b49dd9303a5fd6ae9be87176bc5cd3583ab3a1b8fd012eec10faefe6afb52f13a2b00382ca158149fa3b2d250870b46023f6ddf8664bbcfdaead293ba9de701930254ac1d7950c81c2911f71ba90b0577f1ea8c76024df8f0a688c529e570172060395338868e11e9bf32fa4fa452f04f834ec6f1312ff69cb320272b5a948e6cb52cb22061566e82f684505f2159930343e9036a69f84549a1473e4165baf3d271ad6d4782405a723f849dbc78b56a3db477c654253d6181f15c5f1eaf59c3ec4649d92071d252222ab236fa42cce25965498430eb55d7d013de1df590079b2473708a3db892d22d28abb09af826a7e0d6fcc1a334d824be994aff68a03ad615b9cff511bf0876fdb9cf9f010149075e79f0030d8a3ab497e231780a686a013a69a6ae2f0d89ad1e6eac66ef06aa9d4cced1ccf2640424069f102c3d411ba90d039319f81cbce109b7a08c9770d1e61665f083d45abadf8510656083d2d639f82813dd0f7508bf3a156a94acc8455e55a00acc25c6c5639df6bfd970861030a647b74bd79f03943a1868f391857b82753d5f0a8930ca3cbbb27ddb85e3602971d2ebfad303140c84210a4de820faef1f7e8bd351312fe758c42e0b36733c80f56a307ea439e094a2dfece8033339e09ee40f9b30406ce00fac5edcf4ae0bd39b6e032badbbcfa910958f769524bf238e1e58e688e717a35afb7eb5630c54adfe6ef296620157c647f2406df08df114678e0629dd7d96cd95020c48e406bd5c78dd8d5353930f88d376ce32b7d7863fb5a385f990ac90bb788095fc0a359c8ba54a11d714f95d4d2d8377695d89d501f30f56ca64dc6bf96fc79a43380178980e354e86089cd7afc0b8ea76442d74079a120700ac85af03d57787b31002e82e1e1f8204c105f50d377785ee2e2ad9bd256bf550ea50c06753f0ecc004b2519a5f696ac7b0bd3c01ec5fd8355e1a7c9f2f6dd02fa096469065c447fe98884b893cb357436a3b230a79c25fe06664d32a12a7f5f161eeb82b858217c34e0d4c67508dd60c400820a34a5f9b73d9a283fa79aaf54a90c28b753d8adab297a9bab115596586f49ceb58e87809642a4bf56cbed74c9fdfba4719e87f1f5107f64ce2f5869447da71b997debc2845cad9ae1d6ccd7a65812e519620af4403016b49999bc5d0c3741f31ec879c867d4dd424691deded303797515670cbf76d268157316277b98e540ddac39d89929f25b3eefc1cc93384659dccf7533587d3e9c0ec46d42cad0cfcb62ab96b13db0fe501642313dfebe68daa0ad5427c93fbcdb28f567b4529d3c0b0883a8abbde640e353a9a8da264bb3234b19cb911aa2944de96ccc251be576275a9c376f20b1003d7c8bed4b13c86d5d657aa41951900d19db92643f2e92c348dd5f0ba46efb8585194fc937cd1edfaf7438a56678f0706886cff6a7928a6c961b32ebf3b0ab18e4b35f04465d33514202bb972196a90561718c4c084fb7b8389b7ea004eda90182d1226621caf10b3d966a41f1b4a5142d242f2c086efff157e5acf37e2ddd8886fb00b7701c3f54c9b9af6d7fd9cbe5f327225f4ff64c5d1a8222a90a782ff519b961beda5b04760ef1f1e1730d03c0dc03cbad86ef8546aaf94a8d4fd7878f6294ad4408902ab733c99966745835ec103f94dd556192f22ed28b66f651cd9f8a134c11a2c3986061c60dc42ac349b2b663e4b963555baacf964cfba6efe96db8bfa7ed4ffa36b8bf72b6c33e55285af6f7220759d2c7b5b5ccf71508b8c341151e24a0b73fec097654fc2b5817b82cf984b890dee1c05d07fcf37cc3b44363c9ba2cf18399a299adf448c31f0fe26fe7920d1c9b892ee8eeaea8f880eb521afb1b28a95b1140b28ddb00543c478f6de8a7897338d2f79f916b7e51e766d6b0d3c77e90e6adae9a3e908ea656c7a56c224d945c5cc404ca19badd4e9f2cb86b7a48986ecd77d499e79b588116950eb5c00b96a0af683db1ad242db95145e1941826dc0bb7779bf9b085c8ad24bbb090e869f707dbc58a9b7630d658a4ba3872d4e7b42f4db4e900c2d544f127417544c3f01f5985e3d4d29b6640f44192a44fd71587a13736a8f845133617c82d431b7827775e57cb019c454ed354cfd50f714937bc2a1c05be2760c805e5ae89045b2f9765def984fb429c71f842f78b602151d6bd92a52a15d63c7b1924815d9f4d12c652a01316a80bc756158461bd7fa71779f1a179ac934c01b4da9bebaffc39463ea76d4c8af241ef8594e3b473534bc4a8c01e419322d3d6fbb01492890367f687ca0d4ce7c02a3b87db2799b3c65580ec92d3a4e7a9b1e3d903551ef29c1e48272548bc35f910d4e35418b787bf0c72cbcf864bb10f2f51d53b2838f3afa864a81ee6447d8739e121657db7f627bac3cfdf00ddf93e954878c0538892244b73921fae8bc651ee8bca78204008e4a59a802b0903c51d2bef48fa9eb5d9e3509d6b8f693a183f76fa65f4c7fbc6df1520651969651f94386fcf52d368d0d4ff09bdd6dff87b391b557a413b8f3700547d0612e7aa0e8b06f0952eb8487ee09fe00f5cd86ef82723c591c744a56430a9d8eb7f4c7a9beadb9921f717feebed7a49ea881c4496f1d77133eda9e553555b599dc6607fcc990092fb16b6311fe4d66dd5c472215e807f82e71d34f60e58b32aa351eb5eab81bd04abf15d8a23aefc745878a4ad56ba631f36bfab819d22f9708586b5c240885917b9f2d6b0fe313485fb0a78918888ca71a739d72d069a7556cccf855192971ef2ae80e84db857c5c847e3b775fcd3fe9fc2f480a353a76e01ff9325b3a99752be12025a065a07f966c36b2900b98145d20f586e8b8c332e9ca6395b918d6e3ea26be2f585ea291687f80a95dbc77be83217ce688cb725fb4d492bf09347062ac74387817273a465526c29c4ae2eaa2ee661bc384ede651e3c71d0ac60dd455e542159c674fa622ef0a92e7f20f6f56117758ba47a08dadf93a59056a15a1521728ec08b34894ab98937838cd92843c7ecdca475b83e6e85776ed3b8fdc35dbd4911249a5a27444d449c8eb382cc7eaa8e1d6d72af87085a125301981d2205780032edb98ddd38334962b9bec3e88d5024c0506508eb90a48cdc82bfa87ef49bc07983b175b20eb4c1106b7343865802d74eb4146a72efac0d91bff547e0146db06f4f49bbaeae16d42f0b9cabadc707cf4e01497e250bbabcfb1e01a24f4c38f99bb74b07d901a1a94603ffa266c2a933489ecaec0bcd15c1a108ad60d38442c285247d003ced9f69ddba65d1b8312e2bc4f55f5b2c1d07450be6bf2a74a4d534b6ffa94fde5b563b7d9895dfabfcdfe14b6dd27391e4d670c21e00a73b953777b5ae959cc7340f48ac055975470b047a646eeadd4108cb694d1a38802f3db0b20a9b0a8e005e12b7f569773b9546e52198606e4144732e5934402f5c59858a0d3e2ccfcd90c3a7b1dd2cb8d89c96c9fc6eac2746a30b476700faace4bf550bb1d8cbae027f4a165eeeb6e4f564e1fa336eb8dd9565ba5dbc38af79c06b967dc660df6dd5d6daa6e5af70c339f611beef20ed57d69267ba7f64c65c97652e26735fd0d5ed9c5da16fa8c01c4d590c5e580db35fb033faa4d90da91e11b3074fe15c05aef3d9ba4d23620fb9d895bc2195bc73bbcb4f5a64f2babf87d75f083f38dfe8c08e95d9f32a64c66083b30751cfb59334d0ee7142f1f3705e917118409f70e0d267d9a2daab364bdaf6bad7342d817d9267182685fe40246de7ef21983e9855ae25acfd4ccf6108efd8b21314d8a7979d37d66177432a437a7fe30a903edeaf1a7117d28fbe6c6366d2a4a337f7af4b1de92f0a5ee538354e0454bb70c7cb57dff32109ec9fdfc6098b976fe6b32200d9242c0a830ff363b11c4b1b8000e6b3c552d28aab9a43989eac935e6834871d9a91d4472ee7e1336a6fcf140812b72c9337323d14d91f41eedca05a07a1660c28d82faaa7958c0e43a6e88d4f25c62b13494a0a6f81fb29c1c4c74b092248344ba0451b35427c5d02699e6f9e5f9c160b3121da03bd5fb8df0b0f17b7e1b3fdcb911f8321163786705ffaa03debc0564496bf9319b3d4560f5a81a7590332cf6f54c4c8b43847f35531030974efba5486212d1ff98be16b1a5923e337b34a1200913cd433d1340a7987c2928b941377987a7264eb6e0f5fc9afffb39817852e47ef908de9088435a3073d24c90152264448964c3784e59ae2051d00c6576a8c0917c7dd1d06c1db9d5c7ea5775fffcb5033a2be24f4eb842d0283b0079c819211b1e9ab16f272632d2c8dffddd5a2cd85e59da1fbe7a985744f3bada40e53a92664ffde1df520371c207018438cc494ab038fdf0584a8067d934ddde5d467390fd80f607a3752be31df31daf1abec888a38815f87f46f6d1177bf2a111745ab95b6241875df90603612d82b2e5ba311e9297909cc5e8624f8a39b7b72fe766580a643ee56166385f1606bf544c47097928182c51beb7691fabee9b74eb281d1984f76ca640351952c72f41f790ddb824be6a17bbbc2c61edf70afc8ee5aee56a45ac494e8cfe4f8adef7a91165f6c3add01e013f50dfe326e63f7959a1f465b6e6e36342aa1a4173d80063362e1ac271079467511f1a734703cc8069929104abc34d29372a21858a3cd9feda7bc22b1abf6db8a5798488eaea62b03359fd48a5754a29708f9c824a97d4da72b1757417822a8380e2a69a7ed472674b4a91b830775ae2933d03ce415381849381bd13d3da2b46880ce92e7f8c7c4415f716b9d933ffc323d4cfdfeb0a809bb14ef1a0fc3210803f3ad4cb696cf0a537e1c4f40c55c97986c9792dc427327e507bdba1dd245aaefb0ef1e7c8e07029059d54cd46371844509d983e493417baf5baa37d132b6a416ffbb91a1a916b3e137c2ecc13629cc1f5b3959806abb0b0256e01b92aa1dfe5e27392c8dafa5252e620bb66f06297810ace09b179088e1c44287edc70322beb1729377a9685b616020d932479b1c90ff42f6d110ce5105df65c636da056ceef626eefa5b9be16e5dba54e9afbca81ad367a283d5eabe7d3908c67d3278a495158c753e0c12de540f78a3621033752076600c3acdac7653bc72af4a372471bcf5ec4dca2593fb1c5da1ef25d3c62ca9cf785d7d60de228f4feda82651d17c6a808ea1260ce7e0cd2e7f5fbb5e3e75bec6f6bdd5f6466937d9bfd997e8466da79db997db2bd6346f6c581cab1b62f766432153c9f7aef45544316b27644ceb7b34b75770e9279f0bfe754d7d70fc5ba92e4348e1cbdc6bf0778b865e2dab9eef2ece0a6dada4cba7cc1e1bbac7d2488f6fa2c3a5db9874115a1551c3ab2b2f0a7147d85be1135d4ebe9aaee987ae6721ef86ed9e8dacbabfd517f5de479346d5e66ae8c0ec3d0005bc332d92185660669439ee534adee302d0d89a3767ad8a56757e632736ea5ad6ae2fc03ee292da664702ed4c7bf898e233a16657753fa49707cd701527e113c87cd791734d2c7e2af128121286c08068e6ba84c5d7123ba0829d381427ecd4e30e73c5bcc1eaf3b978f4872cd5ff449bd16b1a09f7eef877d037e3ab9ed145304c4b879ea696e11cc6ae7122ce7c8b84ddfc51ac3b9b8326d7e39863f4590db61fa6fda364f6f259c19efb7ddb01fe29f0b450350de083b581e87fc2914cd47e6dce4f5263d3cc7a530b4ac463544594f3dc402cd486a12ab490c152dd72448e2009a6330bf41786633f897fce3e07cdcfbc4819f756848f5a21869b419303f01ea02acfc5237c86d880de378387ecda6a9c9185e015d4eb5ae4f5242376b9ac51db02adf726a2819c177172ecf79ec5aec442f8f68e3b479c213775ece40fc89f0157560bc6337f964c6bbb7056c296827b84f8a1885faa0820731605a5ac4ef25c505067cbd489ae66f497776b0353cd0b7f0f49cae81c8628d290d4813a453132162575fd2fa5ccaf339069ff060679ba5ac4561d7fa6fe827c69c3405eb644ccd05c9b24ecded86d512dafda76b66dd13e9f3049cc4e5877982c39a9c2a81272a77e4307b339bae976f6afc4f96c919752294016761e7c4d4f5e9e850e23856bc312d46f2ac05b6bc874d285372fcd56bfe9ec4c261e524cc889599cea3084014ba0b624fc7aa13a722e80e4da070954ac689db28355c3be2c34d4b6fcd5f87a67b150eecf6f75a09aad22ab87fc2ddb422cbc1136cbb5e9a2e8769bef1cc71f41cc0c954ca8c0e369771ea0e8172131a8bfaf31e6881117532ca712690dda38fe7951e01a2c684c0616de8ca55fcd9e07a9e0da3c95c08e6688cfe512af190dc9408898e10357239912c83666dd1a6c8770b5d4dff9a996048456da940a6ce5c8aa17854b3673b04cf14668d297eee14f9e98e679bcb37955a9a5ba9426bc0a233e676ffecca63a453dbfe89197334788baf0daafe7c87d807e224cbd0cefc20384e01ea2cdd60bac7d9b7f4ce5cfe4594d25762b80cfecae8c365ab4c3ef569005ea5ae042ed69aa3a41f5ab87ac01ebde9f839592af0c065949aa2453a20ef148eeea6032d29d67fb1b125587b0e566f5c5c894225226b16fc406b3c5f2314fd65297c9a56def0a48909ef3ecc5daf11b010fd13a9f81d6560d340920c609d1358029c3a3a6a6bba908602cbfd226b4d6ba1ef4e17e679e948efccf6c05dca0efde68f835650ca4a7eb21a907be12d8b159bea420d71e31b3ae28adb199f3e38cd61b0d629267eac9a2a911cc73e6853144b789fe92efb63bd47e4af86996c392cf0cad331500b89893c00d17d8eae2e0e4d14c83982255b26ac84f485d0c688b31017eaed61f349b272e45efd5661845a1d495b7cfff38a2d7cc63aa5d9ff9fe63c328ddbe0c865ac6ba605c52a14ee8e4870ba320ce849283532f2551959e74cf1a54c8b30ed75dd92e076637e4ad5213b3574e73d6640bd6245bc121378174dccdaa769e6e4f2dc650e1166c775d0a982021c0b160fe9438098e86b6cdc786f2a6d1ef68751551f7e99773daa28598d9961002c0b47ab511c8707df69f9b32796b723bf7685251d2c0d08567ad4e8540ddcc1b8a1a01f6c92aaaadcaf42301d9e5346335922db6c19f3555fcdfdf5833bcfe13f6dabbe0c8f7e41f1a16877a7bdcc06e093acf062b +MD = 482beec59edae2ac7993fe7679fc0ce6f9311c3904f9885b80b9774b + +Len = 62800 +Msg = c77f5ab02da7142fea067ea0cef51bc79dfee2111d9bef7b6e4079b09a9c04716d1dd73a87b2b123afd4b8046ac7b2dccc1d77748f7da63f62a2988583a692c090813f479bcd5d297cccb65c6bab5217ce08eb7c4fb3a17a32b1eff2e587de18d9b5781d9180800bf9f460f0f82a633e48c7247286c547f48576663ee8c54e41f0c06c049253828fcd569e073acb4d1ae5600c9e5b3cff7404f7e6b3b3ea4c027caa0146c6cfcb7ea0fa59ea591678734add8a47f79e33c4573e55976f7e3f25267b212a547bc39f1ce677e27c934d11224585b681764aaa25539d3343078f70953cb3f764dfd3bce724e235cbcb32bb13a1e7342249acef163ca4cf580fa3ac71f59ff62084619ba9bc802b6f45903bc5f8970702a1c05bd30354b3d61de5a164accd6faef1d7050bb43b0e9089d057e2527d774805f0b504b09326e4babc16146b25a936ae9bc2b416fa24552058d80fb881ce1dfea4c751494b71aa6c90d429398eeee144179a4eeaa5b7e7919285f6308b52a813425760d863dd51becaa44c1ff384d63ab1557e36230d6e64e4283fc5834d12cc332edc64c3b00135d04c252339b43e18d3baee045e6e1122b887927c510582b1df146bf65332e15b0b945b5049c64167e493465b3d24f852756c955fddc3214baed0b595fbad1ab7e34697ab0b0206ae4ca62d44a8764c7c839df3750fce1621092c6349a367d3d1c128803e67b0b67572bc4cc587ab35284ae252c6d0708abb56ee1d1a33a935320b04bf1046177845c09c4be9c20cdadf32055b5b06efa5a2fedf8a1193bb68612ba0fb298e8075a49d10d1b542e16428a3ccb53b9b948e5d6ac75335abe593e687c4dd922933d51d71de8633ed72fa8c0501086e75a76e74016e208f636fdf4a893a0c52fd78bf35a5cf146aac06c592c06afefd7e706c702a9b9825a4a0731497c93171f4975b769fab206268e6edc23cd03def9c36b1d84f18630154c278cc1b38f4f8f5d7d267c83a5524075b99a4e1fa6d4cb9436534d7ab2a2b5d1b15fb7c50fceee7824c90884358b773abf1c118b2371dbcddae0d2a1d95a9a5f4732822d9f25bb4def07a4890d423921e1ea047be43698d4db7e9b0354b851694b9db759b7d474334e7ac6ee76f714efe48c9d8e7383814dba653d1bdf5c79745109cdd5d46bb7ccb59ae6411d1a88d9196c531f5be9239cea4d0f57b3a750f4da0f4c2e9f5be47ed6d0990d6a3d03921311bbcb07f80e470d8ea8439c39968f5906a8c0531598ce04b445cfd8df239f44153dfe02009fd076b28e6bd373a89850987a37aa29333ed1ce72f5036147552edf6044c4c366cdc841283cf3f615a4532d16f0ff174245c087b70954741d5855d8b92bda90e19374c31c3398315c37c34d2598ec604487536878995677e41d4ba9af1fbdf99ec5feb0c0fc2aa5eac743612c7bdc84c8580cf93e1183fd5a1862cab88ce97dfce9e882ccd315d44fd7361182266a053c4c4fa27e0e6774ddde4da47c1fe79e9a53a4b17674f43d09ec2dc6cd34ff621ee8ae0cceec6b6eedd36edf503522cbe5b7c5d5743e4050977a9d096404171bfe91aa8097381a4c18ac48c3eb7935966d6ace674cbb84af8716f651ed303b9349fbc7b67d7dfeacdcad5e0a94389a7ea00120df46592bba3725ec28df35f7788f6b8816d82a8301b86b211be10fcbf51bff6fb617b3bff1463bc106b071b53c4d855e1a3dda41db1a7a4460586b448a3fd9fd842747cbf532dd2763e7900f4ef2cdcc4914e9b5a9913f1a7070d78ebe8a156cb20b81ba366b6e81d90b0d60311da9551c03e548fdbb4e15d4b0e1250299363fc82afe05257e8462de814652733c9c8b1b71698637d70be9059ef481e6ebb0e94f0c195752eaa33cdcf0d74095be3bd0bfe3c2f7e8931ce67ba1ae3fdbd019fbbf25600b3f1e3f925cc03cd50940fbc881e1ae18906de5b0bf5f5ab97204d5d9811d6ebb5aa7dde5e675e36a5e3350c509e16762cfd5faba492ea67919e879154d4a91c23605f2ba0288678b0523ef68a069ab50e759c06591a60e1963f978316c4375ba41c71271298e45b18e810c25fdf0d67d8767cb65214bfdf4c0c657b0767e872e0e59b1cdd3edea686ad94b8f6afd7543109ea02b8086e2a5b0cd9c14f48252780c3c55028a2dd23a1aab21f78016044c234cb31b37ed78a6c48dc9c15ec54442cbed70c1c4d4a9812e653410c5a0fff3301088c6aff61c627c6545681dddf8f8bdfb998e1c68bce80695d64db444e4c2b78895b061274a833902b35bda22cd1462d543c9e950a8d943cbad10c4685f552a036e6ae4078f639ae4782eec3a5d104b08e407c432d9cf66650d0c8e91ac05181f7748b10d579e02692843fc8b0596e7150eba2575ec54def09a837b37676d023b54ec50af4f9d102f285d63ab72f2c778387385904ce41e0cba3802e01df768f56bd83b63b3eb34a51cbdba1211ce5cb0d5a68d286807c408007cce223c2ecccc407ed9d130f2f04969f778356e84173d8ad58494ea3a3170f1d425645e8dae2e5742c46e535ed3aa949d16abe5bea79cac73046c3ff616e602d0b12cd1ae6daa34e6839177994f3721113ddc13d85e4cdf219514d5b5b4c5b7f4e9e251ebbbbe5dbc8ff13a1cc38d83f6265c755bdbdc8743bf354813cb9e85a3483b3bcff8d9265751f3f753f10c61ae989386c370ba296bdb34037aabdef08e548e1be5b589432972105bf938321ebcdd17c4a9ed645a0c71a7a464d6158cf887516ea7625d28a558ecc457099d2fa39c5fbb7982798da83af6876cfac0bf84592b90af9fb34b7d7edfbd07f5bc18f53ee1d7bcd05838b17fa738ed5a7f0ca452834e48be3a20046c6fc2867d0d6f243d34b5de778eefdab8303580a58f08fb0beee41d5e404accaa23615d100fa6a32fceb278b88c17668d3819a13c9f18daedd4fe87e0642048a07115f65f4134148f2679f633ee43f7571531d9b02dc0e650cbfa32f514550af80f5cdcab30abdac3c258e17a140a0fbe5e3a948099a5800d3a63890cef3d860924a29a945c82787628fbb4fb9bbe022b89806c2e812b3a5ba6c70488435e3c6c77839a9b334c700ed0bf0b28f3e491171d9fbb2a72b697d4a7913007cf4ba08a6e7c6730435e4406403f3e82ab221f1981051c04ccfc1af0a36e95fbc16a650b70097ae40b5c76e4fde8d9a93fdb1e9b5a4d093e1e502638309b90e4e84edc383297603709bb9b337048670d009412251fd40d46d5475c33b5b4db43927d78b91cb291a9bcf0037a2dda611ebbc19c4f383692af90662f4bc956bfa86e6aed0694f799ac938e4211bd1b526eb0080f6249e133e8ce211218e1ddc883ca8b8b9941b2e2c02c0af9927487a56d9bcc0e06bb605b82ed0c970375d680563573f6f999910774f4ea7c950aabe4abcd81fab5033083fe7b8d30941bbd61a04da891a0030e624b7cb16d71d5f49a99c3be67f5b7de47bc082771534a1f06e2619dee052477ada431d42eb16cfe31c82cf5c8315fc6115c017fdbc96767caad1fc88ec16489242fa2d742ec462544b747bcbe0051846b5f05dad25f1a243750d6bce64d49af703e4e3f3c7ae8163dd7d2779bdb43a5d02563dcf79cc8d0d78e34ef77115a571c6092709df5d92da7ba2bbaf43a8c86ca5fc9faadfb09fa25a5a8d4c3a5fd1c83372e2fc9e57ff7fcced20b59a6b2c3c45ea6c87802440c9c47b1015e83d86c3f126fa152b262e1b79653cd3e985cc958b278aae84b0d84c5e4dbf9aa2342c2ba92d599caf5189752912f851587c123f1fbbe36712dccff1cfd8832291ce2bc80290e5d95161765785fd3d7611da6501a8ae5efa52318d81c02442f6dc92eb62a55688133add5f87342df18c39262ca4cf08e2ae6d367ac3d83ae65fad08d5c139872994914dabcedfaafdd9fbe9d1f13bd259cd8b74fe81c02155a329b94fac672cb0a27f3ac2f42e7d4aa67daabbad9414aa9dd37182811fe1790a7a2cc2edd74b04862c2b0cc1c8adbf3ae7f152a384d4bd676eb76c8c9e8338dec8e9974a30ef0f88bfa8f1fd564243df6247fe9ab11c7a7284ce266ae50d7c653a79348c1b1db8ef6139d96f7f45c0db16322759c3f3c9083c3c16e39b8a2ce9f963037b3fdfe70539672ce0ecbd1d772a3c35a96362926fbe8ba6bf68ff30b02c2f6ade453c841070b9521845b242fbc6ed9052396fbdf033423dc5f6767002fc66d37ed43d78592db8b3df312d17af14cca01cec2532d3c3ea42beeaf6d329918fa52495e8a92899eab7fd583483da3961cecf2589d960950a1f73ef88436c123248962f4700c5dcd9c73963d271c6603480328ba59adfd22a3ba9ab33a812a8d8249d4b6265771d0d495cfa0cc6b9afce1f0ec7805e97a1d3fe2bc6ffe8647a08a100913fc187840da72ec4ec6bfc4eb6142b80220bd12b8bd0c0e9f4ecaab14a2789a8e8fa3d3a6147776a7948d76674c6515f948bd597dd192fbc1b9c2c74261efe3965fae1679193ff93bb45911f919c480bddc4eb0e4e4141e67be031ec25ee28ebbca7bb3225f18ee8bb4b74a09400d72d05a05bb868b0be101ca10340ceffcf67f7eb13c4a6cbeb118040c6120559c86d15066cbcb2cf6ee107c5e899a9b9bb551ead30459c88dfb5120ed09c6d0ee17214dd6743b40418024336291f3f85b35b37d55bdc8d90327c7a9bda675289ebe50a0f9474f7b8861ad8da0df917c980244c4adcb1034bac10bfd12c9b3f31ad6dff833b7802547ed2cf9bde50baeeea5664f6fbed85211416e9960d5fb96ef1b3fc21a4765d3ec9d22f60e24bae5db99a88c000b89c7a343901d4c7db4aa87d5f08d1179791e02fc1001063137d7db597bf903239cebed21f0e72a03879471a182c7bdb0325a177474b95a7cfaeb5a6f6114eda99a655b7701858e19eceb390866f0739e1a1e86b0d17d6f7a8ca6f535e86e240ffa9a7abd5286ed134d255a752d95d79598e1fd1bb6cbb9ac6581285782735ac94611c76f5449cba230c9327247266e39573ad72f9522cda50e00604ecfb2d6680551ddf7a77cae29205d6d7a34308bebad8fa166dd211fd6febb298610ab3b5ea0d10af09c6e092aa43878078532c54f3456e84c2f3524c4a0080097f5db0e3fa125fae4d3bc61293500cea4baabbeb664371869ebed80f0aa7d71eeffb0a36daeb70a4ebdd64aa74b4cfddc3519bcc3b596be2aa39898ed6681fa059ecabf7af20ad598eb4a2a275f53621884fb63f9b10c4618d6e4e10d7ccc1586439796da43a7d95dcc96941c09dab7d43acf28baeefe4cbef6510df345a230bb9e95ee2dec0471f7d239fd17a3495bb9c7139fa9b7e33e87a25b541169bae840004419c883a75c01aca2e98ce405ca13aa572d28b451a80d4b6267fa515ca8ae09309e4c8306e405bc7fcdfe24b67f8c650855ca5cdff5aa5204ce00852e0e4019da002c62b9a67e721f3eddedc2087e77a59e0129d4b3f966b0eae68da565b0c2aed3eacb361fc67e0fa0ceb7cee18462cd8a6f93d67f74ea0532fec3396b7a943d8e09f4e2bc9820df88231b139718a6ee9f58336b94a76c705adbde706c07fee492fc9866094e1afd798d7066a5b5c467417d70fab00b6e60b6e027e103d3735287452e268262bce7e960500e79e64be62521f50a4e0b5074dbbe47e1bf878205df862eaab470972d5c4e529190249dd99ef80820cb31c31b3db8b718eb7ebb6d1001f2792be23a4c4699c08684fb4ab0235242c4a41926d25181eded34338ff6ad7b4208355206b33cf55253d4c4c31856e33d6c852c0c28bb8c64e5164060311c4475de7d2a9d00a3c3609fec2ba760be0d408edae4e38cd04aa4870e1fdcbaf0e016727fe65da31f9673b157aa5827ad5304b211ce3d7d344f3549884c65e2afe09c5a9a1fd91904e1143e839b65ebc936f26cc6627a885c0c8fa311309c46cdc88ffd78318fd10825caae1ca9511b762b8225652c4b2ccbf52c3a3576d065bf0a59e186b5f2797df6ff766f4e9a3558c33c528a95ffd8e8bb83657189b2be1818929d32379160eab73b2e17e5a1d7c580a9aa832a392b56a23dcb31e3b3be5d85b28727110d25e2f8f64b9319286160d62263fb7357827a5bb3b2030f43f4e3e44245c1ec9646db3ec9456d536e60af466f355fec0b7ce83a7dd07186e3d06f96ca4f9f24ed3257fb1ca2032f14640553b8853d1ea58904e104ace9c5240f451fa30b1b447276dda078e7f0f68ada0780c6d9ff65b62574c1d08df85484d00901650ec2e5b692c0e1669db35462312a4ff2ba335bcdd0ac7f7a1a09af76e12fcea8d122633a04c6105e29c6d31b07e223c49c658b5d29105c59d7ba508aa12df9b6e8b6577d4b41cfd822a7dd15dcc3bec4f6f25ed48d44fb082d76c220ae87f547cbfb3ce0d4c8625cfed2dd031e43437c508660d47baece0da1bb9ee947d253b3d17d7e054fce9a6534e47d335ae584434f8e1bcd72d267c2cb1521452b718783bf99b56b0ac8ba796b391856f13ee3c24a75fa3011543ad0100ff3b4c7fa234fecec5d82a44b6511f85d58be9f93d461b7da76acc588c9ae0708a0b89be09970cff1e0dc9acb0cc762dd990ab4a8e8ba3e283b841df496c5169b92e115a96c8eff26e9e95cdc13f2311663abbec2933433eb9356692c24adc535649ec3d91f02f117d32968d33d2ae9b433123c9566584f9128a45593e5d0a962707234d423652c31272d5d54cafa0323a1eebc75d49ec7b565fe61d07cc629af50dbc74f0c3e26ff706598e56fb813d11a919d08508052c4d5b4fc463c06dc88706c298e5be677ff2952a9e97e1d7269179b7cb18ca5775be278a389b61b186a7983aa36750675accc751ef58872c548237cc9f5cb668bc736b9f5ff6d6b83d1b6b2e7cbfa16c684d46d567e015072fac8a61369af5c36a32ce9423be480a56ac28a50b35d8fd113cb7bef079b4f11fd61b7d7719aeede8c4f8736b39de2d372277a838101ea3bd62c51571698c718cca92284a230a6f9df192441eb1c1ab4a45ff3eeb9a9ae4d48816e1d1f9c40fde4e966a97fe31d2f080440d266c180cf6dd696f0c19754bbe74522afa7184537d2bcf4c46f34a9e4b3bb5d86ab30cd6a2b15c4383d6d65de3ef22f8d319f6c6d229e6d5404a7e5915e88eacd2cdc593b88a81c33819e6a4acc02e5444383fef430f830e6b4bf48db550769246046aca9f3080f6142acca77fb11d4535188a5639a74dfdb03ed5c1953b1690ae9e2404bf6b00e5fd50b1eec58897d48efffd841db7edacf86a487e1c7116b1f2e41ac88003a996dcd4bd02e70e46083736c00055080a232918764bb2b91dfafb1e759e4abf25139afe176a4b0bcfe91905fc524b624d692c9086b0bfdcd375af945c0e856819641d16e8ae5b47dd7f1ab3d903658c5e85ea1aa135aba3e129f78df8a199c6308f4f6457577e8916d3238a7e9a0d50e4824afeef63dfd3ef1ebc5370deeea1109e17308dec1b9a22ec1dd0149faa748865338397c1c137a45de42ced4eecc161985cc1b2f59c43aad2eecec29ba3c1f1388ff2c2d8ba96a9ed58619777fceecc860860edfa684a568e80ccb11562ffc7034593972e33b7a5d6013995e384eff86f02556684e777cd27b91208954ef6b4cc3dae3f4d92634121c6fe101aee8d8f5b32e8461a8194b8a583e7f0a3cf6d5e9d5f8be1bd406225d58ef62fa2a09036538061b5459e67be11c59591c84d2e6d7d9372a604a67cf8fa436b1b0504c0975dd407da8ca6ba88726762128b30ff8a75c1aab6ac2b796399cca3fbcb80e45a841623de770153bdd050979c75e1a95d8bd17c383d36200db811e7f87a7ec627cd2efde88e17fa06336a7b560dc6f48dc9ab30543d313a9f62fa7e3a9c652ca44204dd215a51790ba49c5869db48a7c337370e3436838fc09c6fb2e8b89ddf7cea810bb1621597732ace74fc67cf8ca6dc5e5dfdaf94e7197058c92b578ea755cd8bcebf2ecc1be7cee819383ac469dfc00667da31cc0a51e59d0c2a00a04bd8f40b707347dfce0e97d38d45db8d0715eb1872f14393c0110326c30e3b3b95ac66ea37f634b478918d75184ad2942ef1667dc76a6d51d001d3db36fe90c74b792b0e6c707db5e117b8b7046fa840a51a381bae6e376e03c85ca5ac2388ac36e94c615608ab49d049218197dee4f8363969dc6e252a52210fa76a6fa4aa521ea2d0ca3fe745d70ecfcfbc1bbc0e26a7f602a751b6cd65f27dba14c5aa7f21cb4cbf306d35d3c96450ca4ed634ae31c1f809639d49a8103dbb9f89f75d8e820490227d2919de8697741b21116b4d814ce889fa9b0844b9cc705eb34ce45fdb92160098bbbbed7672e4c91c138c727e106d8753931928ca6545fd780e687a953e8561696b448801bc48dc2626bda690d5300d56cda4dca9d1e286c283106819ce854dd881dc378f3c475d299026701f62d922eb90d2e9c0d8ee0078f505b0ce0ac0cdcd44aa8388bb8a530c9af15893800fcffa26cad67541127482aa6eda1bbcdbe830fdd7f35401b9c6b78c43e654f77a1b6bd5b52b32d6f5e9c8eb746e6aaa81a7e9f58a105bd67bbe11ae47a3ca8fc30e26e6bb715e5d406731ff3ff5229d5810e071ec6006027844044722165d0f92b014a1032f609f9af7a730f6f7aa5d082efebc256dbb4c595f78a1ffc876418e0a1b4db6eda264ac9f12c4c2fa6cb23a06291d5cbfe37ec6185302043f7beb60232433fb348b731d695804ca88cf6496a24adbbadce75e66767eb35905d6d6b003189cfb8a8396965d623837283b3ac3094a3f664e2db5e281e1fc27a2edca25b3ddcede7af293bf8218a8306318fe6a430f91889d1f4ae1416424969c2a8f673a5d12cb8940333fe0629bdebfcf76325983194a4f24e70cbff075cd7df4ec1fa07eafea41d63ebf7f295b68c6c66bc4528d1ed2eea3520b026b35f5ccb2aaf5ee2aef64291a7ce668532ef70066a4c73614ea480206548512bfad3512ce91902b481861c975b55da2ca5db3f417ebe40d02c3d511b4b523f8d225b6d6af69995fc07308aa50b0cb35742fc32a4206c3e03ef2a1a5153d8cbb8ee59fa0bdfab7927a4882531136d92a3bee502a4dbe0bb6b0bed34591b46863d93419f9600c93cd5ddff74c220f2f8806e0817da2db64984071937a90e161f99d5c4c670066d417537f8e1ee9037457bc4f7faaa725788dd6520bca7a8d1d83c1a35f7405d1237944716f50d0da509f47817139c664ec9d5aa860c0b780440c2d527ba8d71528fa16fec36a3d5b6d698ebf80b2665f6bd0b4bcbde1af827f99c9b0c78adefa8aa2b26cb2f59a4f70bc7950d49eeedf9b2fccd648b7cb5b76347d076ca28348f279000363784e7e04a1f07e9485c8ac24c18a3d29c971d2d0e4319d91782cc60788e80dff7bc1b0cf1fdb8fe9ed5b8eaf8fd73b899f0ab135b2cdbc5f95433d72d653d0ad865bad793e22ccfa600f4de49f991690c2ffbe4fa439aafe802e75da6b27959622843cab06ae7df0654cb06afbba1765b9b6c2c3c55daf95c15736e8504ea4e1d6a4270d8065eaf2857a80eaab2086310c99843c1a21154ce12448448cae45b72b233446b3305a294601850bb5b5ab1b440fce60ad6e224c67ff72952731c040a8692cffa8f817bc334a8776235fcd4ce87f66d7852a20bddb4f7d832abe5ca3d5ded6df65a367d4d1bb4ed2fd0836eb8053154aaa3f55c7c67b32b89c3c63093aebfc8ff41a9399aabda1c849972c2194f2a36125930a90aeed56d985951b9960f664b65d46e23245b94a0011f4f816adc4d8c3fd1086431e0cb491eeb0cd7cce69d7fda60e9ec82a150f215c07e2f152317c193a9d13069b401385de75c0d90caa1d0cd9590d82e23bb9d433b831db0ca1560ae521f701aff13a605dcc3ed9a323fe8afd117989f49110c09def2ffb627c2f3f04867b5ee187f2c8739d8da41a3a421f1b1d2804e881db8ea294227adc2acf5fa2b3e742b96a036529d0f661f959b0743a65631c4771e4e54a8f537f0213fe13c49083d7c00335e1864dc139c9e7123162d171f997cbf16e9ec80a335da08403740596457db850e192fc3653104c2efe9b499cc263f6cbd0a5278fbd743728d6b9fa6ab479f21b1056c69dd859efcc81eeb52aa0305a3ab467952946cf42b3359c57454b3a1a5f13d9913def293ab66562fd64ba885f05c2edf821f6f727eec7230470324a96e49524475fc10a94b35000099239f26df6a13e3abff473509e3558e9339231d0723c3dce4b7583658aebcfc1fc44f7ecd3fa62414b69cb238e2643efd593752ed1b02e1049341d1604ddd70ee9041d44657462f70d7c880a8543ebfca05ca01ac89afff3a1265e0de9ce20d6a3a0efdd74b845424d56316c4a3458f9da163afb21a2b6619a72d0b30168b3037041f220c86d130c521e4eb0a6a092cfcce8c939a26f5d417d41fb701350977b990fb073283cd53c65fd6840612fa264befbd73c14aafb7a92ba66ade931d4286531b03f5dcd92bace1b0683438a8fa2f876eb6b3efa99f6210699d049b173f01ed07aed30c7526ed59fb0e114596170c1828e30ea083e9c724c1c43fc787bbd0a1397e366d31d40c2b2eec29b4320b5634746f2de7cf254cdb5786cca2ff47673238e8bca98fc18dc7b498ea1f1d55b24ec9e1ae3fdbd06796934b57a7ee6039f27e74c23bff6de6c2348adee0b88494d9a1b0ec133a89abf8fd885d60c5a4cd7482b8d38ef147abad174884a383f672578473740c7baf9e74fec43a482573862aee1b8d2d15dd40eae53857d20049df6afa9fd2861fc0939d2f959ad87e6b18a809134b90cd9d4b0e26f0d4e6cded30666c9c940a874b3fc40872eb9c40e9f95e7c369b5499063e794508986c4d6f19fc6300151452ce07ac11c2a90e1d7e8cc0a00bf8e308b67fdec7c5fedcff2df07f7650f23df2c76f97b42b5f98549757712cf9e0b68d1c938137df94b363c858620f0597e1f7a5fc2998037bd586d2ede26b96ef69a6a72e131dbbd68a0bccc66695a492aad20811d415e18a4044afb486f4597156d5f493f6d1c150cb6799aedfb2a45ee3026c6519c65c0762ee8 +MD = 7b1676ae5f93822c4236b8218e09fd99b1b4d159a621041df2f249d4 + +Len = 63592 +Msg = ee27659e05ca0178af60be020c9e4ebbed18bf03815a45d231343aa9c85563c9d71b75a458aad791913caac33bb8077ce485877e92a009c3a9ecaf6d0eca2a008dea38cf78616ab491fb2b042ad2fec28b1f07139451cdf2a45c3e25b954f470d83ab608af16424a794549ad2215bcf6ab8f46abd1941ac9e92ceeb90f1a47817fb4f83843f1e5bc0fc40da769a8c87e0c7c4c2c8f9276af4203c8125945ae9b4cff05457d1bdd701c1d7ed847b4aac4768f228017726c0c7589d216defcae2605c3e519a5bcb2d067fba5290661eb2eb170cf8db15d81494b6716aee868d18a73aaa19a03fbea43ba048882edd6122684c65b3da47b3fcc8c459cc3bdb09e2f5e5a40b2de010f30dbe031cc433ca713b93acf763af32dfe00ca6a3ba6fe9d7e8e7bca4880f6a8019338a8ed51ba325d16733222b9eed3476e9f8a00eb7757ddcab648432f013e1daab4f3cf5f793c6b641a8c286a93ba10a06c04f8d44553b5dbb3c18d344a58ece8fb1c58b4a14ca76ad6e670950b69bf5cd8de0da990196f8a193d0dd7fa7ed615b62b729a59eb78f25047e2827d68be6b8b2226b17f32719d90c4ab5f393943f88c260457c9a046c22fb76678124073952ed82a353b2525dcc25f4f162e0f9b5a2617f6341af37aa41c3ee4c1f27848a16906037dec7af2115415e142028a46032b053079746c7a5dbfe544a34498a359e3b698d1b8ba3f02f1ef492cdc32acbb44f9996efe94afb8bfb36e673129ee8345efd179ca6c76783ff36f1ce58e364a19fa1b5be1f2817cc5b14a54e0b290e836ba96bc4818fe3be62b3c5945264a7751109d87440f597078e5c1b479bbf1505f1ecfe45b473f138f9f962d2382520b9543083b50719d5e8159b9cd26cc7983672364372a7fa1c8e25667dea72bb4cf8c9c42bf2da2b70c87151be90d6e9048f8d13dfede4b8c21865895b5fba8da88df22345b022a0d42331fd04e56289e68b73143809e3068e824ad09fa44812a0135dec657f78f09ca2d81bf442a830bac4e4a5c0793b89de3635eacf5ad3f0e0137d6e1fa365b116b1c43cf15b1063fd9652471d9e46a93dbec7165ee5b69ed4f8d146b8de4158feca86bea071239a3baa3c86b3fbaceb29766f11b2c79872eb4dea04e582c46ea167a03f76476a49d16b13d30813d6d63e17ae3b8f82d213bf8d28070a334758ab13a12dd7204d096b4368baae794ce0c7fd051239a9fc07be312bebbb6242ad78590a1867ae544f75ddbbbbfb9e87a173a0f42445af9eb563c466215d825ee395922b7d9c3408826d948d4593e60f7eadadfbf037f602b34cd167268535f4718f69b5cbe973e258df024de5fbf25cfef27eacf4853fe077d5c28f89b6df9c0dc25a1981d3c07a2926a18e2b9845e898ce9d57afb1cfb0799b227fb966f1bdeedacdc74defbc2879f0ecbe64fd534ae2be74bc804237fb3f197b98441a1ef2bb353f6f7ea1c975d1ba5e6f509facfc533eaf2c24bb0b194ebd3869a844a9a2e97e4942a27e7afaa6ef71014cf3a56560cba726fb90bb931f02d374547b3476fff2561137ea432f9ffccf24d89dff2ea1d1f74d8347bc012696e748d72251c7754e002bcd79a48cf38ec33a71f2fca08d0e1a003a549eec0bc5ee47bede641cdffdb222d1b1217b6801f7c2b797307388cc79dfaf5be6ac253c53016a03edff966df676d3054ca353f2c75df7ff2d002ba9a14c50a205da0946b006773771e84f3b3798300a887d5dedcc5cd1af64eefc022ac6aceb7eee3e918fa744fd825f50d21017a7256761cc3f715fd30c5a88607270ef328cd4612b993c9471aa81dd41befa7576da5c19457450c75aaa8074ff771e167ffa88cb56ba513e8be302daa87e61224dbdf8dc5028d533f71e793d3f8c7cecf3d91e9556916815d21b87efdb8ceebe9a34a05362d9991636cca739973f37d32c9d085791aaebab02d873858166fd9acad2e4e6f3e2f6fe78299d02acebb95988bad87a9e63467e9c8e7824009908577e1d593f89f1895d59d9bd10c73e8bf0a6b70176d35722f0edc1e843ff9fb96512786fa5ab61caa34a4199fc9c842a28e51605f4e6f2ebb29507567dc4e76b5436788ab1ced02570d7e5b61e93790e72f25c684d3fc31b2410c3453a070ca8a538924cfc6ab94436715a940f2279c35f2cfeab1854543bd5ff8a36f11c8bfbc8b75a28ee05798164a504b646e002c35e137140ceab02b848afc0ae4b9bc1cf4f3134a0ff35bd77abf1788f4e429098e03468cbd8ca6b3aeca00b0d920b5abd9924c637b861e1915cc52aa19dd0cfbe960e299edf390a1e427ecde77cc1c3214700637f92208258f7ce9f7fae010c9ee01f485c4a5d4becdaaa8dce647577a4c952a0cb24e81c591d4c5b8c0759d3d44ed6596692cdcd2125a1cf24d19d04b2a0aa12bce92f1bfc3decc3492241b1d942c1b1505100ea55a403168d4c8ed6c56d651dc7476c0dccca1e7b59976f23285c7004abfd7d4fe4e62cd85a5de18a777012467cc8356e45525ff81fcf28b44c0c5fb7cc00b95a795cad992e5e3b8c235940113ff401c9f0573fae1e4214c1bec2ef3f42f33b866d8803ed7bf5d34863a96cf29353678d58592c21d79899e7eb20bd2fb35d8a704bf8ae29c59d6f6bb2b0f78f195ebd34d7c8a3d7de2b4ea36ba637fd7fa81c949f1f2af29dbd56529b307e3b348e996d093645549482a960cab3ee2d0a5b686fc17c08cc56ee3e9977887f8b776b827267227f1c8d2710cc52ea4e3305f0046e7d8fa60ba3a87eacf22969f4445def017c0dbf843a913b22cea9e6a3d4fe571d0ddaa154e6649d0975a3dc0a4e0e5576b25885402f498f20888335f419eef6f80ced792ca1ab104b8c883431d6d55c6e94b37ec4ddc863320af6caa8273a6a9bf528abf768048ecfa137010f815b4a45ad7f0a86c8967dc3d084f3349f791855411ca8499bd95f124e30c107dff8c598674b970a622c257273ae7e3dd51386c09b49fc97cfc207b00e26029f354644d35c89c2c45d0200ba6ee39a088aa23c7a4e31176686372f354b67344a43bc5e82f7ba0c48fba086082cc4f53902adbfcee452973a31a12bfe9074d4ad6dd36923b36cd20cd0902be827b30e53ef8e775af83eea8754a8849877ef721d2613fb323a12c2946e4968d70a4e43cda3dcf98af4469fe281b5df8f5c278b3e0f068b3ad63c4c544744d3512ee7442ac201ccfb531a05b03b41833fd7cd8e647b23afaa2249edd0de0ae1e3002e7ddfbca55818bf29da94d3e4164655420a451ce3cf0c98ec05aea5142b1948745f711630215f72e68ce4fe061f2f6f157d4446df7fdec47342223ef8f54052696773412abf5c28d07b451c3ff4578fc855e69b6f18ad1f7021f00e11f704a87e345adffd988b4b984419a0ea3c5b31cb22908d2b4fd41473037c9507a6e2c513349c45313369457e65f74ead5da6ffae71f69e8c8c004dec854c56326b4732d8f6bc036e2672c1236f5257f1eec733e2c27d321b339e266d15d3d43adace7c2fe93ebcfcd83428f7beaf6f40563888f872990a5ffd2a384543a791797bd4fb988a98b475cf29f79bd282f7213a77695020ee69b33f20ee258d3c1086a4e75b93595e9c5171d0b7605961820ce2005f9a4bc1e2bd800ed28e5105d3eb0c91f6b0e3f4d72876a4d2e5a1cf927c036fc63751c7f7f756606fe03d994e0f09516761a8ffe7633422f4bc4a219ae7152257a7e1653bc928b210abb16b017b31a2284626e46f8a30e77724b10c1de68da46e7c693e00db8d708f714aff70a80c00a3aecc26b206034ee4df84e39df2d382852557970986db2826b178cb2e2dfef9842c275b617f11e5c84d245c9d848d2936134b249853c84560ecb9528c6580f9244ec6d6f05de3289bfe1dbb9f142124fbf6a24b3fdaab54d8a38b3a3df7488c1e77094de12b0da3ca52ef95054a15f2312ffb9f82841ad2f8466cc6954bac2edd458d04b64ee7d3fdec088d726f020d803fc575f2d88d5c4a75ec9c34eb326deb3ac0bfd2620825813a06e9692b4bf363968e82f340793d3982793f9f5e51a5b2b722c3d7ecf5350ecd495d5bd77a3055d4b53b16747502602c9105370da072ee4b41b53948257ee1066e3dcd2c0340d16ae802deccf75838b4d2a19e81a561d8779c08791c1f6fc285d42f2f718da160d9857eaeb2768b3dbbac892842b6df1bcca03209d149840dbc299615406fde7e911c0328dd8937e9b18d2076d97b6712aaecc68df04a584d29ccf6f131205495321a34bf9695dab736f2fc0cae697677a2d03a58018858eb4f3ce6559c45a04f3d1e87e58622d040ac8c905c49e7a99534f9020a7d9a1262ad07d8b51a564e070287713d24c6d4f092a871e8349c6d15e1d5b217dcd5f16dc3ac428203c8ca5732e38528eae8455179e51522e6ee3d5439e4cf02a7e282571398b85f111381aa3ec1483b510dadedd2b0febee96396da9da4cd4d574651a92d5baebeaadd108a969f1ed6efad7b203d9a92fea48306338da4117a7357cbee6173aa03397c0372caeb9d9e2f5e39830b008674b0c307e99a515ffc74bd7d91606f1ecf5576c6fd5c1528f398866590cb912da386aa1857443aed55d3edc33c9aac81958763c784caca6579a3cc8bd40fbb0d2daebeb4170bdf6e09394f593a80ca76e837b9a1938779b792d98718c747ecb955816767a361ad36a8fd789c25a3377329feeed1c41281b3c1c24c98e4f4b496cdb74aaf76e622fb9798eff8988271eaed3589c4710c90dea8c68398b7a69149f8b8bf082bf9ef1167a42c1aedaf1862a484011634d6158c9a7ed274a9de012768fe6aee1d1d501c9ba7a36f9f79895ed252eb337a0f9e622953afc945fb92d39100a4ddd4d0f471a60bec6348824354193aaea8daf989e3c7ed7213168fb4b2f3581363edb54aa519496d925349e4d6cba3d1e2b25466861894dfce961ae56a127d2d0cc22ad15b5808bd796a40dc5b7c16eb7daa80b2cd7de23f784f2db35d70d85824fcb216d8f4924294d8079856ad1c61d62e0f0d2e7a6e179c9c289d0191022b68e7db99b271aea35126feb74cd11ccb98b77fc43d90910e9817ac00faf5832d352e17c87c5196464af19697c28aa08f11d123865f52e37b174c188dae00c3d41639f7219b16e1a1eea27fe84c2c3022edf5caa21833ede386a40ea19f655c967895ea33a324294cc8d41af75e48543d99afa5c60ca608de62b9fedb4375a60af8cc618d092bd5bd45e0e8635d61852581697560813bdcd237e859a93ec4489803380d8c41706f6a026378aade0a3b7151bd99e02a67c25572d9af79f5c3acd424734ebff0a46ed96ac63c3c54a4efb7671683e37cbc71eeafe870fbed165b25e91895a68b3a4c920ba3b3a665b43a5e5dfed3e8ecac33e45baf4e7d991ecc23ad6282ce6594910a51667f6765ca73dc92f10a4eeea9a10ce298889d9e5f8853fe1b96963455c4d8d898effde95a54b8a27787a41747419ee12ecfca415b182d579e319c6c006053fdb585e874e62589090cec86eb078e30d3ec84824693e4165654e45f7106fc225d46f1a58cf09eb4231b9945de6cff59476c3763f29c84a556ea3f5dd7dbe0ba63c783b385fc08d0ad4e2e8f65ea0d7e980858cdf9c76260f5c8a2f62511c692ada1eca1148afc54f3ff0cb215f14127624b795eb0b715cf9f7aafd6dd2b063197706cecad0001b7a3b8c46c633532da22c01964bbee0747d06ac66e74aa381dcdbdb4f4b40d817f1905e5fcd2084b0d45e0a99e7fdecf602533773b6ff1c4bd9ce43567ce062421d060d201e6fd02376847ba5a710bd6bf0a4f42ac33a444a7918e6e945f7c32366654291a1685e0fef64fbc3733e7a5baec28b95f642420524806e138ecf26433574a4b93f5257fca7c733fa33d14c4ca675a3bc37613f0443d080d93faeb128f0fcdca0de77e2700674ca52cf0f5ac83f84e4a56fdd63d03ccec74540dd8c5c01c5914e671d28f5743569d32f41cd56e1b9f85a84ffd5f07943e85e79a4e067ce976cccc38d501259d0b8863baecc7ff4da84e3600fbeec60f68e2cd24ad5cfc13a1521d80f83501d0e5e72dca080c9e0b03346e955454d5bb15fb83419921e4075335590eae93528b7049ff85d10be0e03aa8d0918939ad13a0309855740dbb5126e71d268a94be2935116782ea5e6e49b94c0a7a2cf5b2a5a2327af4d068f87d7707b85cfec1ab469eede455b67c8cb3f97e5ab392219cdd9671b98430dc11e8dde7e9368d929040382ff452c7dec2cb95b06fc26b45a247f76ec2a807cf9e2fc637fe37b99003b27b68262e910da6dcf892a84b1aca99614f9a24b4e7cc03beba5885d505327c29e326e83d9471bf84ac95a2a21338b8b5f9746e5f3359c91234ca0e92e3027ff309dcb90454b3633f1c29dd6c0708a6b29f9dfdfb8ce184c6d01d06f5f58865ca4a0a2707543b3888e1dfb70d48c2d9f3ac67521e570b9d48f6c1fd729f2cf40c4e2fa0db1581b5ee7817ce1a6aefc8d5aa71193c242099151349509d5268713560cdb4e41b2f41cc697290f7eff809e5144b91d976d8fec7d013aeeaa1e383c23c54d1b6c78c92cf10709e3a4a7403ae64478a7ab18d34bd97d176cf2ff6925f3b6595c7cd31ff5307824455fcdc5cae3505319476c5e172f4e336cf3f4a3358e8606f9b7ea80df4d93831ef89995b40e0f545bb391b7b9451c96d7f7226dd4bbde5ddb66e673520eff2d54b7343a622f2a825537ae6697e390499344b44f6a446664e8d0ee81b63d642ad1e4c63c3a1048e5f01bebf41bd351538a22d0d15fefc525093f2b3073a06c837bc77621a678128612a671e8acdc08bca2db9f7c1c85a4a827f9c40bf100bd3f3ca86d730d2e2f6ca42168cab1c55d8dc5b648d707cdaaf32847e2979924ff66fbced3b9d7fb489f8fd4f8239457f7cddafaf36b89918010f671ad5ed1d6db01a082cf7c6ba70528b9074779bc5a7f84c9f0cabe0b97cd0777bf4ce702dcf817120c894333fa0d0e0c02805791969cba7ae0f25af3a83ade9579e8ba95ff00b03bb42a9696bc09596f0cc9427bd2f778d41196c7aa8c6f9f36e6a860f00798d402c2dafdfcb4a012c96f4ac4e2d838c5c1cddc8b990b1352444fb5607dbc6a8c4f7dc001cdab7b4004712d642e6e06aa295aec3027edcefda6fc3642a3e61edf0a2e0529726942eb075b97abc75d092ef201ef3ebbf94aaa4435548fc94c5cd61c1dd0fe51b69c1bba75b21f166cea59050a0d3bbff82c60064237ce59b7cb786b924a07d35a31d90506a64a816551334abd6db19ab31f28d46a0687baef13cde0d59bcc601caa2cd0589bb4710ee5c5a9623827b4efc90996f7ea4254bcdddd632dead561c5af1d03b1b8e34f314f160b4095267577d20b342f0a888fe6d1b1dde45fab3c1de7b3865a25618194372e56a0ad354512e336965b8fe0d3349650344024d55becfbf6419b0bb67100431674caa8dc8c87a493a5c2a0d3886fd5c2528a5edb24fa92ee1dbb9268853c1ed54b06ada3b29fbc2947ae66e8165f35101d093846010f55a40004e10127126e73c59ce4131f22d400656508a7e5cc5f417f07d89c59f2ec1fd4bc2109be48dcf9c9d376b33bd89321e830af985d7efa5d5fca6668946cfe677f2c7906b2a70f6e3ef58b0b6f88a293b6578344e73caf6da49b0b2f19453385eb9c12826af7b0da0e484aa421fca85eb922ab32e9d0267738c2ee7b52453580fe531304500066462015dc05bbfa4e8bd7d950eacd000686028739d3a633a960a29ba515cb89dab95ca369b6a34b3c21fac399f5f995f79fea3211c07dd93a2ebebaf03c435cb33baa3c184043b719280929afdad757a3ccd80aa0c940fd8ef139f91b01203f9ad4f226112a01058da9ec53b921cd0daf14b4580e7655684db1fda04feccbfb378d1caa7dfc47ff42aa8b89e0534581c6806664834f25e22076f1f7b386aa58316d1010843f7c6bdd36ce134cf7a6798e16d77626dd1833af49fd467056261d317cb7a04d7a071209529d38249558beafe0edd61fa79722a13109d4ade4a814dec3f7a2013552bc6c08e04291b5c318d2e691cc973508789e37fdea93b99603e149b95dc7f9c430ae5f7f77bae04f4e9f2fac9fb610d4fd5062c1d04a5c59b3e117e61ac84cc53878606220c89d642abdc32498a3bf64795cba3ecef9555aec873364212bb9bd9a72117184e2756a72d5aae3ff87ca1fb46d475a2cc82d00757ba71dba19c5141f437c95ed31efc9ef8eeccf1c89ba6c752912fe31e06bb218647bf72dbafa338f93a9b4a1dc93e9699192d236d216b586382213266997da9beab5dcc135df80b20c9eb7e90ce932a885a4d396896661ad437f7f538a3adfc7b65fb3bfb3fc64505465870de97a0d731328b985d733d8b3f2322c006cdb29647080646f5bda483013060a559acde093e3286e49e4038160ec4200753702203ac021d6195600921bf2872a09486a14d19cabd92ad761c67bdab7e5f912372c104c49f305cbf6acd998f2ce701ada12f3e6bae272d8d20ece639ac2d62503b5b0bf00a27be345fc32af4eded339a441c16b5c716711e0c21f30f27e5299ed23e0bf4ecbc2c674eceedca4417acc500805d0996e53a7124837e8c703b6967ede69f43c56239b0be2d4c9fbe1adfc67d185c079c17cc5f009de3421384a433c4e1308d12ce68a9348ad1e5ba5b4f170030ae105532b91036ddbbc090555c9b1dba5a0163353bd93854182cd75d6d2f3055cdb440aa733d2ddf8278652215065eee9671154b1599301589e57395dc7784143573fcf3ad4e6bffb1ea107f4ffdfeda502cc784a891b24ba1a04d98ffa881e87fdfc8b2a9cc57cad48610d17fea742a21c4f856473b4562e9dd93eb590aa04ef748524c0b2f97dd64ece4ad2764553a85ba065483fe5ff7ecfe04e16b4675b4565e284443f0a293ed7f0a76c8f418a7f67c9fe3e163787705a20f2fc8c468c4f771991fe6a7ee7ac8cd00c2f70244eeee9d23a8d203156cde3a113ad40cffdd6533435355cdf21ea14756261427606be89c1ff7f845bd45c156c9772f98a17a1a03a56333cb43ebe19e78f4b2cbd1cb7eea0375a6b3d6ae795886893df00427a0734de3e3386a6f1402f7d355783f7a1c176c967fc607e340efd6c5819b8e7273029b49f69dcc04b33541266ea4fff44a94c9dee604b7a0d26d48d09d03a6c71c221c09e053ef6939a5e38280eaa9c684f299b37be86c4388514b1ed2b0f3b206625ea823034af931c56d6c1eb1b36d45a15ab893f9ac67dd4c5c24d53bebafcc33b1a95114754116243d47aa82a35517319b52e0b0ee6a6bbefa7716fcf53cc826e381dd1fe4bd6142d199b6e5f01a7423ba16c496a8e79e19b48a1a8cb6d5a4ac32c6397e2fdaad91c8f6c6443029e6e85578c213725c0efd18d2526396f6cc444deaf8c7ad25459191d35b35da1fda0ffbfd5bcfb13418c975e4410a1c3cb97f83749d74e339e3d2bab3d8235448e7fb0c2914241bfc561f7a3488e8bd03f6ce71d78a2e6864e2d5b22cdfa545517b4a04606db8e931316f84477ca80fe90eb1a798512cb342dd0b0682d43413a61e6d7347ead6cf6f552a2291ae907b585bb9834b85184a603cf3266a584845d34be5e753fe3625031bdfe3b7816a95de78569345987994398d1e9047de5a62458e43cef91a3f90a90001360db77ed5e7ef09663b0db9272b37fde2bfc8f2ef994ff798cbe15b78adac3ea8189345b2112a526a80576f89d1e8118c16baaa443b1b71e330d632739d7ad8987cb767b0c6b4b21ea9f80532b9f7e9faf125d916978b631ccc5b2ce7f4e67fa58e965d688508b9013c7202984ff1f7cde39d17cd5aea1bd3e2f2d36c5099945de2b28f3fe8b0d7a0ac57e0410050bb635282eedee1e23c77393f9e671ceea70ffd9e85ad4e278e7b7e1c36b367bea559b269b6c1c8fe25952394166ed660285a53acc94741e75df026317e761276662fa7d4082c7c8867ac3682b3f9f998a8bb797fd284407ab6bd392a1fff6d325e3397346b65792b833ae69dff8f12e2a8b1d38a29eae64c39212b78a3b5e45cfe34051d59134b5208bfb8586194aef898cbf65e47f18ff645da71af92301460d67f75f149ac7f9658a9301482a11a250968566eb52ec9e37d27a031740479d877946e42c5976262f385c284cb4b01026b15782de9f910ae3fc74ba0c199914e420152a4556aa03289e3f41bb3f8e01b4e61d03e5ef6f0b11e07b86ff365d71cc654c77851acc59f6c32493bc51133da23cbf2f2ac8ee68698878b11820fd7de94ed314172c42f041aff4677874a78b97bc254fd2b576eb92fb5481815edf00e0e6924921147690b26b9505172fb2b43b6d37aa083b6f5a3541f53f5f786dc25c32715dcc5bce01f0fef1b5c00a9c813757de8af2e4417ef9634532ddf70d8a033c599a3f88b40aa470efbf9b8ecdb733820035b837541f87682ba4206229217d0b3046a3238f7576ca766ad142ae21d6f786f483bc110586588edb5341285073a7e0aa1fb4c7080d1370008aafa586c9bd590f7bfcdef79f3b58209c1d72dd8d194f0edcc4c48c1253c4c7ed5b1badb4dc5fcec77e24be7a1a70bb237c6f90726867b901daedc82c925a0823d0795f3d5d827990ca4c22befcbef411e98733cb9c0ef5b77fac8604d91a0a539625640f47a957fd69bceb14ea2a138ee9228c3fbe2e08263a688c422fec17a6338984d0a2bcb137e2dee123eb9c5fc106a86577d4ae3b75938aa38d9db87544310b872976a2cf65bd19cc9407fc21d3c781841ae976d6cd1278938d2a666d54181534c1cc45f9b083d4730e4632a2ecb415b1d1026e2155409b24ebdede47ff6e0e5441ab8c7740bb799f3ab126273256ccb644297e6436a45b1e4fc1084b6cbd5eaf501c5f903ced6f18bf4fc1fbd0340f5a1a658ee697c7214860dcccc1c48c6c0d9726a68ecca21ea64729e965ecd74464fcbf86f0a12f536bc73613f02e64a236bdd149b71a60ee11774587acafc5d59d913d4eca7b665b4f2cd7c321d3cc67f16b2531544bb24720f9ad8419408828cd82eacebc4ff49fbc35c8c69cda4c2308492b44ac8a1d919d7569c6f4c7a8a7bc76cbef0e425f897a8d1002a96c6c3f41feea6b09fd2b344e927f37856eabb83116ea97077e317f50dab76190b1b52165336a8fb1cc6398fbf9f9be135b1bc5f50a4eaff0 +MD = b716b689f7da8113da04984de53b80978852e1a326979c671cc8da3e + +Len = 64384 +Msg = 33281031ae4a307d07c7623054ec0b2bc3c261dbdb41d00e04c19d054ab1c9ca5e8b38c4dd071288d5906af286f41d75655ffdaf678a2f407b30d2dd58c2e1a07a5b5ba267f6a1cc37df1fea53672e017ddc39e311b81f008a19d97f47715d8e907fc2f6d47ea4f2349cca4146ad067a12215da0613368f63864fa149f28043ba6dfb5e6aa06e5a1d5afb31ee42e6d862d16b10de064d2c98df97dc4e64e9d50c7637b9a73f82a82210022aab7532bcdd5a37d5315b1252291c0aab6a64af174f8f35e3bb6bb3c3d20775f0d468207f812b00899888328a84da2c9136686c8504377a4f1fcb7e379dafdb16e1924cbafec259b08c243a404c8852102af69e98bafd796e3cc54e6de587862f5b9a23d996cea7ec84a5762dd0a53fbac085b1ece44fb7c3aaefa0f15a1d2b8ccad62265f99e7f900a82927dc1cf29f39f9c42dc10bcb9e1d2a1124c6bdf1fc187dce4da97c0554d8651fbea9054c55d00a0ddf0b0b3043b5c901ee99b5bf7504b24d7c1e1b2ad67908a3eeebcd476599c49cfc554d10b52a1232353490226db5d3467966803fc80b191c7e4a7dcd16bdaeda4c46d7553aa38e0dc14256042a5668230d2ab32d72b521f237701cc5b264512f9687b3e51b48c3f859690f4cf50df94b0012bada1ca0a78ce102b2167fb53304a4bfe9aaa0423b5cc751c4e216020f261ac59f300ef4335444ab48aac6d9debf3c977f8a10b97ea2d1a37daed55f311c23ec6a168fd84db12711e468cef8daca27b77f6fb5d41230400740977a49e895e22e2173e9747e0b53dc9138e138ad8b2dc6f040d5bc8170db2417884ceabbf92034ce3162f14dcb91b5540245c4e16c156ddbe5b99953c86ca30966946a32b0a5a5783743774357a74437ae43c2fed3a9534745a9920ea2b92b1e1a9bf1d522392a286dd42de6185d304125235b8a2aaf213c4aeccf3c658c655f8ca6a62db8a46be5bb5c3cc1767d217a4d2db60fd8f07ec3dbcc796479abf9d3a400b1c1d8ad0fb70925cc59dacdc1eb0fa9fc14453413e2e08fb80f46de8e834bf03b19eb1ebfa63f750438aa17b59b54de5422d94387a3427eb3c434efcc7567bd6cbe5abd22bb45950ce55021a8920215e7c0fce4830ee7e1930baba45db3e1b06b378c53e1fd03cd0de832b440d90296dc7616e1af2ab8007f6c13c7e645a211610ce8a7a37562642fcaba9725773da95ccc8f00b2ff9d22a070d41e1231912875c6d883112948a499124e9400749a968f4bcf0a35957f911e9e56728681953cd0ecc2add2239ed37448587179d900a49c7a3ec6dff54493207f018aed3d9896990610ee8f6b4d3ae7f43ff737ad591cace145fe5926d671ce993e30ed6b817ff99d290ef0073c211b9f6beee3f88c46e6094a784a301b735177732a2e15383d183875d59c0152cf37d0441e24c3816a7379b7fd5b1cfde0d19e0a415942a4181d5f5c0b3c61798e6410324ea31520d07ab9f25534f163027598693d16fbaf5a309a4677772d98a4cae69d4808f651c0245265487cb7341f66ebfae60c4740497b729be2f66f965a90daedd2fa6efc8199cb769edb765a80cc222304e42e402f236ec314612e5df8df748ab52186095c00ac8f1efb37bc6dcec24e5e46b89552531727d55f73d4c6de3ddcb926456099817e17928101422d9455e2bdd8ee28fb31f32ded9845e30cb6bc4ca5b1b4e98046c876c018ddd40a476347e945d7e171e58c3e23b5ac72118e79404369d98d587412137066d25a4a0f72e4aa337ba8fe986ac3405eb0691e8ffd2159f7be326b36e5586c13e8bc36130c23c84be366e87213220d3a5ab07be0cf58b0026bc1ffb2c7ac7bc827e2167cb86b0a341601789a11c54ff2b13070ab784b1033e6235d104377642d98b53271ff2539961c63f639ec12d12dbdcf45157e644032393ecd79de22f0e9421bd11b67b71d1bfe72aa762a735a94877641486b0a0aa66cfc96152213e7a52efd3da27a8a7e69c318db7a554fb1cf160ead6cc6a434388544020b96b311086244bc2dc0062428733cd36cf40d9f85737dd1a8189c878f8efd5784c26a35bbe8d697e4c093d70117c6d8759017ec5ea4adf525e859cb548e11dea72fa11d65c89d16f0029a5e9bb69d33bdb0d46004b384610bbe43c82e8e67df9d64be8faf088080790e8182a058ab2c6bdcacc21ca7ec5c8122c245c695e7a28de92b5440b2661fa66db20bb505d70aa89d07dc5189cc30af9d3e0cc3ab796ea0474e34c2cd3939a0a693c184c609179b794d7448600b23beb61fe3ced8058dfd0591f6da62e0178f418e6bb5a229996dfae653ac34937ed6f6cd938f257345ceab5b64327843019ac60ad3f0a220d945a83b41230e4b891ee4b1e4ad99abdf38c2134472174a3ee9be6fbfdccdd41f4c0ab20655f51b8bbf08319dd13d96a265d1235f4247dd18a5b124f8212b2eb3a9a8b469ecf1ebcee1eab688a2171ad87d60f27d4811e4d5f625934668c416dc850aaa338d0aa398aa13a96bc93220c7a7f7e8662f7c47be03a4237059a175e308b9fa2ce2492c32450a700fed9391b90c1f6de19d91ee1bf5b53c409bc93110593c0e1c93b56ce4d857753cb74453f4d45fe9b73b57c134f3e1467cd74434aba11b4ccb48564cf58c831eb9ce4c50c12640c4b0b0d6a95026aea9edb41b64fc07df1e01a835b4af8815d550dcb36e672a496694a4168cb9b6a6ce5bdb55ab4bb40feb855b598d58f59501c7868197300a02382bc12054b5ca511b8ef3faf0dfd0331a200acbbd39fa8b09e776bfb262ebf3a03dacfbe78d8a36f94da5131b0182d3159a5d912e9ac08057785475a746f8a5079110af2f891fddd16199a613f9f27843bbfbb5c6c36efc5242c7a95e24569fd6f0934512f0b1ce099376bec20f49a90c4a8d3e6ffb2d85620c7865be4430697322ddc47a0c67920ba9e4600f8bafefd811ba35108b25a5efa00fb0b1edac8c48ef97344e236ab03d6b8d96e2b44bd10fd62ba191bb7de361c433931f68f28fbb1f699d767ee2b009a3166723d346d71962878ad9d35ec721418c14eefe2bfa3679fa08d965f61bd6172adcba30c7895f7d77f9d21befda95dfc33e07f47f5620c6f37c611fce770b906ffb9013f77047eea3f463db59a32665801652951529e1cefb02f5f6934f12d68dce8bc4fe133a7fb286745ac3ab3c9d6aa6b72816fee159bba17d306d2852b12d5d948a03faa1f64db4eee15678404d2af51ff4a95a872fdb61e216838c33e9f7ae94af2eaee21c1b88b7b83994983e680b7042f7c73d17024a0af0fe021d4592cc7179a8b667b9c509b8279587ae38cbf1945a28cc6bdbd865de060513788fa7bc1531999a9695f23fd97692d7e903fbae718463f2774107b9469fc145ac8ddd87661e29e3d9774b3303ec570eb066a14af108d0bfca12344e2b055a232108dd364e8a7e18972977ec1cd20db36d2a65cefb2d98bdcc15092d737ef73240c74ed1b4bbc3c137711f720d70db4f8717ee41763de374e5142e5d0853c0fc6f94d95e7ffa1e672318ebcebf0eea6966f5e5ab4c7ed86b7ed54be6d0ccde08173526e7998fb791c2e6820719f46289728cf1146439a02afd2207d1b53079dea173dc73e9c2b7c77ca28d25026a6a3813a4bb85a6b56239ccc10a259ec9b8077316a30b57db4691b916b33164b72afcb104ea05fa3c4721517afdea72ddc40af7e625b6cb218b78e1089d322624cb60b475279d48147769f61788291bb5c56f94ab077c2dddaf035c41f33030f975e984bf1a5478861999225e52e98099e2bfb12cf4656558d9bb93895c346a7e4f2189aa6a3272da56393c19043289d04381b832927a5cd73226eca78044bcfa828f2bfec03f1e5855d2ae0e450c1ea4113d108589c2f8a5e2ced065086b0eb735bbd382c38465483febdf06be80275b747b21ed82452209103ba8899cae48fb912ee7ff1c082df13b0d37c817958c3e93c45332250cc34ae5f3dadce317520fbe6fd13d72d3609c72bf1e1ef7543595979f0e1b191ec1b18880d02686ad143be306f7046eeee4910b89fcce06c30ba8a795ba7107840686216af02f2c7876c6297cc31cb860a3182ff339a1ededf4beec2dbffc96447811da37a4be7e8161fab7589b4cf731837906863d5f54d7d9218eef85846f680199d971539d24cfbb1db622e95dd36a6efbb7c971d0e28ba317b46375d139f78868469f6492c56a6e784d631418f6124be76b453bbb401038e98612f5aa9dfaf4c44a4a4166095b6053a5a1844205310285498004ea166e82df2d836ed943782ff60df951e19aa97bf6e567a1a6abd07a1d7a0435230bad6840d13e4924d2792045b634fcca1d5ca5a8363ad30b8ef59df72559342fc7d6d15699ccec54f306affb6d84aaeb3d7dc8b2c0a4823856ab525b73056bd6f3f1a767aeb4c1314d25c45f5c6fc30aa013cb5caa2c16f6acf781908c9240df3704d1bc387e2e8289e147b8a87faff0ee2696ee1d5bf70d38e312df97881d143a19379d5eb39d114e3f204f7c3cd765d0bf11b040b78d45a176ee90bc6d693ba537c15148da75a44549386cfe2da130ede424ea3cca41668fb8fbeb25cb8c1d1f6757221f7b1e041506755656da761befa0b7e3381c7937acb22237f729ee8251b0e1560b1e00f9677ec057adcbbfec7bf8b2e45d339e819d6b4cbe5d10f732e21a4736334c834ae3ba02b52b89e26c3cf6fd35d299190c0deb5fc67d070ff47bad710ac08c0fc130c121b9f79b4963d7a1801ec0d650a0a23b45987f969e91c472471ad9670c24f79b07ab3a895a99f70124e74f70ad050462e47c8c450cd26470b2ada764e23cdf519ad31bdc7fd5421fcfd7a6f19702dc6826b9cc9dc17c04af980d520bf9d191eac478c31b1fe160026a37eee17661d256f1996625255a4b38e38001e4b9abb46e6be459cea183fab2de4f4ec6b1e88d332f628265a033e212794fdc788b91f1e6795d067d6f84b8381167ef2ab260b607c75d4ae69bce704544c20c4ed54cf059d52cf2b1f0ab419bedc7f994e090f4dba1d2e42f7cf49eda2a20b9ee00a558cf679944f18cc23ee359b7938da342f0b6a50978c9ad6d14d815b30ae17561d25017eb25c6ab8f56193c7ee59c633c52a0bb492f3a94017947ecc128ae9b4b05e5cd6cbcb7b5dc3244806518498847c1a1cbdc300c9b78763097933bddd92a9a957162324c126f796c0cb4541c7a2be5c2bd08a4c62999b29afd716af799c53869eb16ae0d2b10d499c8b3c09ea2b0670a7916b3f1a52dd68d08a2dd8342e5886723d059836689ebd49ca98556669eef82e74e841479fc89119f70bd093c52319902d85a352ca1652470e0cacc2fbc2430f0f740b70cce742faa213211eed4dc076e75daabe61feb922c9eb88966d3af1e7a5a0e63c66b3eee12fe6324c23331b850f0016efacc2425b82c771471ab37546ec0179e0f9b9057bd4f79c91f36d7b49191f605d270b9e5fcd22ef5ba0c65d8b56f83f34f251270945c9b896da7770317a0e2f8d4d351dae1d706b5a7bee1b435b079e7eed26b437f6cf2eb154cb8aecc65ecd06abc950d4d8526dba28852f0d8ca2104546a44d867c9a6777ded43bb97283d14fbf42c852922b6ef123461928507a4d1eab5443532b9deb50e54bf355f30fc4cee44c04a5ef7e07a5f88b5a424ad2ad6167a1464ca85c22e3048d5210ec65201ad72f665d34cca03f04df72d9c05da9c41835b6d15757b694c902d898b3267b99f4678dd6f699c122f4ace36d757ddaad496c256fdd031eec8f56e74bebc62ff2c8aeeba1c957f2f8349e3c6bceb5b88357cf12969e00b460e3f41eb8fac6c58bc04ff05c1199be35410dde533087bbfcefd8fee40eb32f884364df5e649ac4eb77d54c5453d17b50b69659b24f765d606e044ab6c3ace8c94a13b9aabdc4b6886be950292491b2e0e1a23f17701425544efba6ad415068ba54ab2e2c6ad702f8f8c69c48f85d1d4c6ebbeee146c3ac5f2f0963260c3027c1ef75bd61f0444293bb2781424395f329ba6df9be48074ad77ac830cf88eebe76971de7d9f29efe0f2f66bf939acedcdf6112dfecd8719953beb27fe84bce954ed80e2e02c6398dc1d22ea7cb627a42f3df65122b8c75005a6742a13ec96234c12eb0f05affc67a322fc9ca483f2abdfda1bf20c8e894286201135501864c256407c0ef6113a85bf6b4d2a7989552b653348b9c63515169f1188f0bff16eedfbdff987bb38661ab85edc3b03ae984c4ab2474d5797b3f5d9e1a202675dfbcdc2572b215a0ec74d146573784bdb023515bddf58c79bab07bbf827145045558a3311da85dd7aa7475de7d88958f9dc0f4ebed77f1e284473cdbedfcd8392c24bd673ce5b4b634c301a4cd41532ee6e017d1cf86c6528c862979c92d6072a8b3834e6ce4aadb3ff2fd4fb2fc4e2a400342b3f0ac7a4827dfba2f807d6e4f7f87ad4d3a4fa0a51086c125eb1406f01dad0df8fd537e11eac67753b077623e050393ea016146a25af105cdc222ee1ef44fc2274206526e49ccd98ce5a5ecbccdd9cfbb7ed40d6173c433add4939415585e07b56b5f97abc97569417c835e4a5e5cc927ef025540ff62c35c9ef07961ae6a5729d5a9ae68ee32af08019a37752b1f18b5fe96ceff527f4d409dc40e828af738fb1d8f07042c970347014528abb89326fc09ebcacb115c2a003d88d3f6628715bfaf6a423c09151e94f82e728c8b4b7c50bd9be952b08bf2020ab96a4bc98c85de17e5e04f083f496842b0d56617ca915a7601ab14c4a13dcc81c021e12499f1dcc36c51dbae782c379d76a1e6e2730e8fcfb7708fa22e55c64f579b650811f2424e88275070422f8954ea687d7fe73c472747da31ed75d295afca5735f8970f9525a3d14bd23fdbe40576a9984499b347192d589a1b2a5ca14fa2b5d25a9b925bc559d03c68c3a9ce2bc5e5d5d50cfbd611c27c269fbe2c7f8b6b67c8b28232ecca04a490887021be34329da4b5a38e9aadb1a5760fa3fa970faecd97950d59ee905edee6d5c7dc1acb5731934b1fd3fb497574f6df6e2f6e38c757bd867f7fc7a4a2efbdc52d219a3d9e620029b4847e81786b27739f339b935fa6a8eb6b3d1e938b4773cb22aa8317928f99b613e8aac254e8968099bf759bd23af85852fa49d97286a77c4acf8be5be1ace94b098f698757db27af01ba2dec9751a31c93fdfe2f31dc74d08190b348ba3fd2a0d1de88064ab09c734f099c8aff58d2c2086474c778d61b1ed0f876085abc40aabd006f6acf10af9caa6d0e5e02cdf9c0b6626729a45f54f6c2b971636b2a1aaff67c887b8d0448743c6deb3149b7005ec47e3f1b5e80079f7f5a0b21929248f8a4da3a012d934f412d919ccb7b1ecee45a4164664e401c622e63ab0979fbb1cdeda3ecc356c6ac4ca56187f4410a4d9aa2323fd21ba77b87f75cbbe5c86d3f75fc5e088ab1a447ddcb661574438464c8c1d936266ebd0d5603cea27b27f1d93af793f51ee635083bc727ae122893fbb5e2beb22cee8bb8167a41c8933c8d676207cb1b479c81d8b0c22cbb979940fbaa2b6a1caa44186511843b95f7b24bd236538ce2cd7b919d82e4fea2cc3d924aefc464da69176cfd8d4746716e2f3300fe0461b2772d6c41fa5424cd76bd91d1ccd6345631109066d3eee9c4bf5b4cda0241cff30e571aaa603b26a260c04578898963f6c9d78b8a2b9fadf6b3e09e488933600d5ba4a4c2fcc08d8b51efb7286d047824fb13654fdc82186f12633133dd019b6823b9116f150ce0ef10f2eec7c170fb478d6c279f30c1b497a48f0e8144d4086c3141699bf546a7366670f23ecdf474c6488cd8616d8109d730093c1c07d430824ce2b42de2976bc71b11cc76d9b96c0bf418807ddced9d95807cc3ea6e289a103b44fb0d2527b20cf77e83562de76b7d59bb27dac52afb3a5a8eacd5c0f9ce80c7104623061d076cc25f1fc511a5f7843e1bd6627063a82f87e7fec4476e5538b8ee9b57cca1ef4f435ba9adcc1b9a886de095fc24be2ddbcf30c19e49b0b6a2d6850491c1ddf41d431b28f5a772dbf1acb36a902b6313a5f911fd4d0fe67924e87e88b92bf69d3f8a47a485ead24228c43c5f07cb7be2f7cf31bbb8e1392728b8802fb75317721be0862545dd6258937d227b474d2e2038173903c706d147150c3402738166fc1a0d80b41dc74ba49b9e0dc639f9a357cf9ad0db62c8d56153ad4208d5fd0bc2a4d8de58f5f2b4afa8f1a749c516030e26209f4d716d6efe4a63514ac60e2f4d220a481ab5a4c6ff233c950bd4ee75cea4714e60dc3ec3a562f509ce2cfdfa23fa6b65004526a91e724882144cc7221eb154841c8b83fdde032d149ef11393ce96c3de158dc08494ffdd146d17ea3286b592e98a6784433195d117c2fb9523d65cda5a5e75b97fe731c2f31d1b9fcc8e18f326b15688be2780aabd4034ced1c1b67882e5e65bc4a16fc1c82c422d18bf433fe39a41d995472c80ab228205c6190b64feb1c6ec784923a03ba372de3fa09c3ec74b11bdf119011b8c70cf812965c36775caffb5c668b428f38995f869ba8cb87bceac7dfa2668420630028b232e4649903977fed4858a2199e692c4bd937c74a72bfc61d7f5c7bfc16c036bdcfbfbd2f605180fca280d53d4c3518a64b5d23bf268e8b0b10f8758662bba697b544cc94f36c82fd1daa5864d27ba9286a8f8d5048f57b4affa11d69d760fcd29c1a0f845d571a71121ba81ac1ab52349f2540a86a733b3fa40cc000d54eade0dcb60257ee8fac0b188b40d98a42a86d81d50a220b963f6b9681fa05fcd33e550f9f219a27a4bbfd994fbf2b9ce010459b1526479cccfc515fb747c3be9d22a19d4bf9c5a904cefb3cff7f8b89f22e3f534c4193ae85f683680325e47b1aff591e32f764e34e59764c010e63d20756bd3300d890a15fb26437fc00c2e2cb28edfaeab6e256dfefe17efaf86ef57e3e61c2c957c925c8b486581884e9662c43c2dbd994d87447f6df2e53a9e774e529af7b1c4ba7ac4f716c30df1ee285ccb49a09962db1ebf502c1d291bf77c0dabd08d46020a695627d886ab63b28b21b0fb62c96fe08fe95983c143b859a79ad7d00573b736071903d6d5e3466467b95c9b9bd5272485c783ba06bc7b8ca0ffbde288c04b04fd157458d93e03ca662db6707246f16ea663b418131bcb570e44444e3eb6263df35260a5b94300ad2e84a5c410a237889ac4d5e611e80f839a6f565b4edcb0a990d9b1069e7ba6d467c613dd9d7460380af2cf6d27acb1d8eb8ada53e1ba520f7db14dc3b06c5d09bafce7044041d4479ef688f27eed181eaa9cb77c1ed9723862e21e2416a08e12ce2d09812193fa7dfdd7eac03d36ac1d7eaed71f2ec07aede5750a70f99f9fb84d61609c69f13ca1d09ddc1e8d0cd59d10c7218338f7d0f4b171fbf180effac3dca0d69d40e4017dbe50455396f9fb6507ef7df26507de156cded8edd41a05fb25f352cbcdf3b2d770f90fa87f84863e0c2ed3b2dd770a1abfc489ad1ca82a28d061bd7039a6b5788da021657136def0c78d0b0cc7cfbec9512cf579811fd01185f3fdd2ab857328be4b63d293956b43df130e484b9861eccb1d06992b095e7febb0fb394c1954aeab04bd360e2b96fffdc9c2ae93595b49d4a0a35441ed3e3aaaa09fef44e9c1d4fbd217db0980c5ebc8b51086c49a13a915bcb4f3ec54d70a6bcbd23bba7d206057be5907ad1a61d0e9e1e01709e4f3d3357922be53c591b7d63a7a64d65eda1b66ce6b032283d37607551baa88bd6291dddfd3fd9fc8d40892f480b3c21358cdd10c35178f4382a5cb18a78769b0c8a9b5f7b0f8f7e508c64801cd70a324013e3f80a08a1ce0d525dc316ef6d5428ee464c8a1f784a595b99f6a48e3a41a3c35593192a6f3e436bde4ab573ff4fd1a0a935a8f416d8fe4a94036d853ea7c737cc727f4b139d70c37888b49a9ed68d5e3e9b6601fdb2c5b5ed26d670aa0d20dd9306aaff4193fbe5972db2e7de90b27360fe3fed9f602639ffe18dc4eeca572153c03a9b7b9a6b6ec4aa3ed040f6f79cdace94fb7e59b65366c3d1e68f67b09f894f9cc4241935bb7b7e96e83881b316e69d13d00d17fc7e9c3e717a0e7df3c49e054ffdcda8f158462b799457b97b9e2eea2affee134f381ab1bae3de75672d2c71c29ceac214c19f3145691116c77f1e2648cf73e444fc6cee3cb891d6a1459f25a3461ded1683f11098dae7121d562ee20be340f37457fd14656cab2a288a7091607da9827d1be649c26e5c53e39ffb9dd2cfd7d933b765f4d3849ce863784b3568a8404acf05e95d7097e324c0d8eeca3be9ab0e29b711efe574e979f89b79824a5a647e72be74cc21ec1e2d2b8d82e7a5c52cfabcc39b6639c203874e70a618740878c60eb2030644ef5fd58a2a5286bee6e03773696d084ef09d78eb743b6884370f9a099d2eac57f64aa6633bd817d5c3673cd414f1467394f9d73622b3e2d96a9b62e9bc522ed9a541285d3e7e2b98ef24835552e2916603bb1ad518aa280227aec925bc17fe5880e5d3ceaedf3256deaa937daf9b8994e153bc4eb288a89cd2bc3553f8ea9b42fdab214e0955bccdf66bf5c387968f6e925653e97cc9c4f800362feb1f3496279ff39941da8c3b3cdadb12bd776e2371bb255a5bf4083da244bf21518ba07f84dc71c4409edd2e42008a82d20b8cd64cb063380ca4ae5329f4c9a23dca98a7d927880ac0d2e3166bebfcce87906d283e167285820b36b60db4b83af64897bf9325b8f558f318741911a44e64b29999e441e5cb42942bc6bbe93d4411a21817414b871c6f9bf7d7d806039afffeac9bcde73f61c4cc1815b326bb661653b45f720d74e87b1a0bb2372dbd2c9fb0f0ae696ad1e18f4f661381e1a5198ad9d6e893eff4d21219ce83b51d138bea96006235416fe3186ab050b69e9cc6d5b10a533567a961baf7baccb048b921670a7627b00f4bbee6ba614dcfd205069d55c92fc508e52fdc504b1dd73510957b7aac9f6839080d80bb037b1c10704128449dcec1484a950ca009c78866bc50be832e19dc3327375ce9016949de511f3d09f2c0b8ba4c29a263818a52520edb96a075277a922bc501d10588c79049e91222529629b35c6664071cb6b38b9aaeaa5f1c58c1da784ee5ef6a5a13daad476e0a47cf82d81dc3982765dd2a77e232501b8e2e5080af3d9fb0ba7dcd220db2974e5ccd52ace2d9d530e77e25ab781f2e6235089509430985a1703441eaeda3244adc2027865e1191b00c1a439acebd9bcfcb880df8a64b3e5e264e20a9bf91abac70686018e1f364315e21f2da58a63eb09c1d39b37b6b2023370 +MD = fdc73692901e9247891e786a50529af1b046d3a31bf5bd18c053113f + +Len = 65176 +Msg = 83163b26857722875662833ee5dfd5357ed5ef32e3cfc2b79fff46279784b529e2e8f851daed5efe7389947ecc2fd2790450528c4f22063449a08aee8ad2589c7a4e3b2b66ff0673d425855e149db44d18632fb78655ea130a3922f9f1029384f44fecfa513580af213e3e26e5b1e37a62146efcaff0d41e8cd4f690f59cd0a8f7f3f307c317357a01dda71e66f4c7c8896df7a3f27b2e1b7478eefabe2976d12c43389ae32e8d9b1c08a88ec0edc8fe3676b2f4787f5fd36d2ef2817331edc73a46a3fbd901f1dc1bca29bd1a254fe6103688376984cf0e1dfdea6b3c3a9c52cb051d71ce18c703a62812f49d22c246c0b55fb3ed10e6942cedbe0142ceed3a84868c45eafc78d9642c4b7b716e8be7edfb21b12aad0c2c4306568bad7447460fd3dac054346d26feddbc9abd9110914011b4794be2a9a00a519a51a5b5124014f4ed2735480db21b434e99a911bb0b60fe0253763725b628d5739a5117b7ee3aefafc5b4c1bf446467e7bf5f78f31ff7caf187d435e837469ac7b0d9249c182ace06e1fa26eda681507055044d1f93aa7e6b5c8c635aea0ba980d966642a888c99dcc22efffe9e1906d2a3c319a9302320571bc64ae4992009845e205ec905075618b179d55af5d492f3f1c263f8be0abb9c0dac70ec0a2cc2bd872e9ae256430fa2f6032e69735cfbbd8729b3740506542477635fdc06d8dd119bb8a0db44e9cb62d9f39592df564917ac219185ccc0f5d6a4169f1a55cc616ae4e8f91e97a19340a2718f40026d85e8aad28693dde0a59adbebb610bfaf56afa8e42c1117126e2498a7a6d8a547b61ac7631906fe0d6d58630a2e240c29c5c830d4c11e8be564f604bb61c38e8ce4944cfcd346f8ef53f8859c8fc003e4b59cc4e140acbdc17d9e2ed5486986e5173e81c73bbb932f626389c95f4b6e852e15ab333222734fc2045e1ee43254fa5800ade9d9ce96759f7fb7b8282d13b7381a2ff11fea76373a10dcbdbc87c272aec2198d35e5cb681435569271cdba20dc9496438d6b8e20edabefdb59ce96f5226c0ed9d86af8b1c86eb07ec3952d6821692952060d82b2e4bbe1a04171992dbbe6d2f549c3e6f8c3100ba5a5ec33381082304611381c962629f833fed693bf8118ad0a105a5de40e04b02f9f3a9338afc7f34737542274bbde7dbd18674c567cebe940b695251db033e74339e8160f0820b97bfec95df3acc1b765158a8b98b545cdbec2de054cb184f809fc5c84652376cc0df10095bc00b9f0547fa91a2d3310a0adbc9cc6191ade2aaa6fffa5e406af7223955f9277bfb06eb1dd2bbfbefe32ab342c36302bf22bc64e1b394032bbb5f4e6744f1bcbf28d7ba5b87843f31f95367c9b160b2b4152141c86731ff74a6e9a7d1539fa60a0385d5897f86d739d1f88ad91a31fc00f3b5c3d3a1308dcb9c4ab100083f5dfd1985cf1021307e780baebee9445349365cee6d9bf83c488129e71c9be97d5f08d97c2998131d7f6d14da5672e64114b4af3f9179b291ba55de332ced6db613add1cd5779dbaa74997bfff41e6687f91c792df1f586fd4d8a07d3747d0b96366c810dfb4dd163d87dafa41a444ba460de393de1a7dbcb9cbe553c85d3598a11b57592677caad6159a2e5b3b7d1c02e66a6de3f3093779026334d2c378bdfe50291e0f3e9eae7dd67f8689da314e3ff45185b4a88210a22909353adff5df8f5c37e8d8d31c82d7858e36b468f968b805142f3464bafdc37b20b4d91da304a990526493e79e9e5f9d56cd6f7a4dd217a332b8c7da0c6559734a62321f28e3d9b7092fa4ce6d77929859a91f80a730bb592db0f35b0eddd09bd69bea56ffe39c2adc98900a2194fd011758591e8e0b3f9175b65b7a2acdc56f55e04657909a6d564d3dfa2d537d1b62005980a66aa7f0e6ab2744b9f8bba46868cdea83635ec9d3cb9e27aa6b965a25b53b3aaae5bd9bb32e82638cf13dfa115fb34b8d10d73e2de827ccf3e28755d6966bfbae57a28c9170662c859cbb42f4db4efdb7016a46bf23694ebc50c68b0f446a2823690d401c3130f41663b9fb8d3bef55a3cdae5021fde121462eba660a1fc464ac7244528db1717ec1dec09035221307d5ce09f6d0d80dd933d4f97381a8f915ac0bee2090a1b6111a7655bd970e6878bf8b03b756527dfb07fbfa3ff07076df94ae7156bf625d5f82b2efb02d514e1ce3ad31fe2cfd8ffb250c4327c0f6dc1718d25461547405be8d2d053462ab3288c48d0b57cf29d25e3d7e5ac78dbc87508b003dbd0a671db2bc4d2c96d17cc430e4a2f640b777d39893daa79bb13207007db063d64bbc23d0728bcc73e43651a9c69799356058124eda99b010d5e7d9cb638b8d4992d3a69c52617b4825789957dcc35ac2645afcc574441ac3664e8e05ceca00837a4e148ace86af801fa3d9cfb9deb1643df111a0e3623e3fdce68244222464205cac0c006933dfb83d58b175c012339757aaff65ca6c90c2c440650b10033e8cc44deba19521924d0907aeee922667d84be8f4987bcbc91896dc94defaeee6454bd441f2f4b84ddafd21209ea283b4a3755bbf9d8a283d8ddf2b9014455ff1c65dbf8d58ea6088eea435c50a73b2b0857e43bf0977da64bef7ade55fa1def7ac74604c67e8c2d9d478c5fac6781bd1fac1615140c78ae5089ae4131582d45e441a76fd849257a738f552403742579f7fe90534f7fb822517136e97ea5ae89c49da642f5369877788945b13f144de7f815fdfd8837688ab570b9de222ac74481a1ea84048c0eac14ff0510469022908bb90319a77dae6fe44ee029072fa1fd83161c3ded94aea2b0b73d490230cbfb16b14ab19399b25746d352d113fb633c32c3e3769896a1e0b27b9462593b70b003c67bcc36d39dcd43c7b7de30d83689f672e836edd90eee8411b26535fb3b38b8c03e737772975643f1b959450c426d37e9d385d4a71e558c4140597db6521a9f673aad3ec0c77cae1afe493ae0ae6f5df14b6b3546f89c34d5e64719b5ddde1e821882730356c6ec0a2eb6f79ca318d052f8f1f8ffc64be3934b36f040050d9fdb7ffaff846cbc6589f2a8638848eef8d4831e051aadeb0045182eec9ef12e8938181ec88b2fe7815ff22868ecc67b3e3f94fb44dfd703f5b1f438f419cbc944628bf5b760cacea953d53ded0f4447085ad28e9d966c1b29a0885af1f7b86638217f87b44a63fa432f43f0db3aebd8bfeee6e1f98693bb04d97c9ec981e28ecd3c9ddda89223f1b9b9e64818b5e3b8ccc377fc3ef8756cee26770c65ff71c86b7d8cfe7981313d71ba634d8dc8536f95a12ee556343ab54f4d21abadb98d9d7aaaf4f2115db665d5f9650722bb63838450b3a62782091f8f17238389f65c94628c7fc2566ed9f24b40927fc0d53d7e0097ad479b2a0a31164c259ce20009358bebd37532fec36b3d5592bc4d5f06e87040c5ce997367734db4ceff9e1dba085d8f98138c539b5812010ec6b2a1e9473e11a24508a7456d9a16c7b3a7969896413f77a54bb68a42320caea6d8e30c25d1d3edb3d20ccfa8663cb7c0e3b3ca669dc51732596fb8b0053e1963a66d9709914d4d21deea2aab1aec472f3cbb7800dae722c29dc64c2af35ff8050386b37ce6496b96148b81fe1cef1f0799f8cced616e3d5eff036e386436f295d9788805388dee1a5c36fa2ad60de650e1b0ecb49921120c676d4863c08cb0190f893d2cefe37fb59e32bdb6ae0d4512fe2c00dde9ca49d6bd4dff326f29d99c8d02fa797311c670c2c8f32a0eb9e356d7b431f1bb2f8ac4e9ebbe2ed9d516233b2be9752ddf6a52b040c40f5dd76923548fa677761a7cddd48fabdd66580fb8014b2fa78317146451e257eb03307e825d0789f78151c7296481eec97f796b62c7abf797de7f6bad8bf5d549688ccb7ada62fff9469c14b08208b07a8a01d32a759467cea7e1183547c365aef4b3f713b3e932062cc50b7b176e1977f1b9ee16f34ca7d34403c2046e9230a40f6cab55d1e44aa59b92539109f950481a666531291be02e1fad1223e6ab5eb221808f491a9b6e5ffbcd95fa42f27e756fd3df80ff4b3a689ea9af999956166192b84af67755c7bbb53c78bfa8a1ca8656c7050d5e23dc082bbe436e6ddb8037cada8565d05c7d412fa8a5e7254d5d0439097fdf2ceaef962db373aa4c81c5be31aee79c0ef6b779d2d8c37aa03f5e777f62f4fe53e99a9b0c51e9561d910d7e2ffe19a5176c9dec06967b8100c0f665909a0c73b968069e2f604d7ac8537ffe2d90c288d506592134a875022f164d58d479704548ae5a2700a8461c340f44c6912d8b4b2f0b10a0c2d7580814898ad7b3c7c87ce605bfbee6f07d464b0d835ec59d1cf80cc5edf21aebcc989763d66b954bbb217db35dec49029afff494654f2fa81c96567a159ea2ac7bbca0ea589ae2cef23af4015b3891a4445017ee121f3916342ef473b32cc4e20a7b176839ef021815d23337e22b279f233f9d61b1594aae0bc7cef8ed25e75424dee423a0ef5df1cbee229d194b71bae0d76c366b82c9394a69cc50eb1072cb6febf064b6245b21bc98a97b2923d8bf231d6db567242080981cd6c5d675cf0f93ac2172a215656f91d7b0183938c574931b8825cec6b6489ee9d49dd6dc65e8392960978d4ae1a4f2b41fbd72149ea3d9d8a6d0c7f1f35c03d7ae2112ce9c1e096996199f4c39888635deb2fc3ecc129d5cadfc7b2c3f8370ef4c99b3d2dc78aa74a941ffa2d3e3f665d53ffe3eb88a86b087f211ff02848d38964de0718dbfc5528357d6d4197de949edaca09dc9d23cdb1afab2f2a42801ba7584c23217bb010c0aa34b6b711e08eb0c400ce266b468e5505b868e8d37757dcf88819de33407a8286c87ee458dfb521b446795f9f6b2d70f5fb45a2679908a8e9f443a57f27e31c4fcb2e5fc9369860300dc3ee961c1b8414c65dfd5b5fbe898123392dcbc0facc599f3d8fef8fb90aabc90669ebd3e90cd6bc0a303b55d9fd729782cdb5c6223158c7250b3845877fac0ae9480d2d0679b04ee30193f5fb8312b3890ba981e9d9b1d58d583fe2843da535c51f7672046935f160e7d1ca93a90629e47e339eb233f93cdedd63015fc31bfc2246b46d5349dc361c39914e22ddb14cfd8bc0773bce938f82214e0c5abe94a0a954435983aa17af7d9d4eeb299fa8af6cbafc95b70815202fba5d7e058e93d592ceafd115f87caffd89574c387d40c39a922494e47ef2a1200f1dd0f0919e0da72c566e7ab37fca146466cbafe53e1c0f97f4df24a1b0851ba61bafac8617ab2ee3d37c326995707ad4e9f42075e53b4432d9eef80ee33e7b05b35489ca9550c29bb3a4cd99625569415d501a9dda83d109404eef24ef5fb6a4817a18ed9b70ea9a5352bcb14acb98403d59fecb92982e61c4697a62494b5719128afa4d9e9e0f865f10704fc3656048069c5d8d81eac502d2e91a659593e4c9c3017e89133ab9e6136898d3709559cf4571b7623cfe2d32f8285fad38cbe83d3f78462eadc972103cb596dac6ddfd4c76848cd82834df98a0b1aa87c755c9f9d449c19ca2ecb0bb27a1eac42ac1c356164f5e5de841549a691f9ba3b5c412761e107151b6f70e3d5098053e30d33462a13c9c71d18614becdcc937f78895a389946e5ec3e8ad32d641296976d74c8f8b3d6d7a29885988c2b333289a427f9c7c2679fdace1ab7f1ceabef6e2539199eaa98806e81c278791dfdf940bd22799a25fcff9bca191520fccea0311c928ebb020c374441bf0d0c22974833280b6226306195add72883317ae5396ea80390e466ac6cb24cfdfecbb569bfef79454bf27e5fe28f69ab8ab9c5aa1ba55c2ed88124f38136f7e1962e631fb0b425528f956c2276cee62484106967d743ad56be37e97c1550f71c9baaa813db5fb0c5b5758663b2eaf12617ebd2b8fce8102dca6f1090a98ebf0157d6e0d08010a0114629599e37420f22ae929e17ecf1391685ad36ebbe4eb4225329c9e05f9577c7ca07622c748294acc0ab37ff27fd6ca36868b8e7c41f7b122619bfcdba4cbc5bb9b61cb8eb1b2616e69c1cf95e7b3f56fb28331f3b8f7833493d3ef330a4c23f8dbbf5ae1b8a380398fbd970c0e92593a67221fcb50d301824eac3fb534c3e05ce6f9986763e4ef55030da002fd5c3fc02bd01faa127373351d8eb3082919420e46754dc9bc5ef6e94d1bb21dbaf7ef2989f5fb3904c0217485e115d5f1349236839d41aecbf7dd1df64d95054f4db19c06f9791f30a05268100d2bc395fe17fe23d83bbf9798eb1a850d1063c345cd412c4562049efc5039457abe7b1c5e1b8cb08d05a4282a690882c2ecdf1fc68a41823f7d9255bd610eac9095a48e3be408b226650486939f0f75d3f1206aba32c49050946f5dc9ce0fceb87ae7f47fbb9baf0a2487babdd555e7aae7cfac080bf1dfe06d43be0adf66325833ec5511e86d31a10ad6cb8e530560ae9693ee985ef1f658d2b78067db3861da895ab9d9b3a5bf53de99c1f060456647c615375272ec5d1e8972acc70cb0e1a444da28bf646be2886a77a4ca463d83dd3efd8f1e91099d9c5a1d4a14b8f33c202c13abab42e920a874197d034b173ed8c7f2fee401703d390f606035282cf9b408ae49859644041bc5275385b8f81fa1299c8d8c0b4ac55c6ee2f812a481a1caa2520b35a8a7134925482f37d50aaf9e2ca443fef7bfbe6f414c1993731abbc9c0a8f7a3c038d79b5b241801e975753897b229220df6afd94e45cca0df20cf192b5718b8261fd777316416cb3e61fad7346d45e0951820025e7618212ebb6622ab08735a21859b466db0317d1af5c4e4c97ea121d64c9952388705fea912074b08631272fb92ac71d8af7200c6595dc51f8c45cb19bba331a61f9b1f984e3afe090ffce9fa6d915e3a0ae03a8ab64de4fe4037c8a68cc5076ee6e36c439687a377b539a5673fd2775b698414ad341aa82e4281fec5e8883c5986e4cef11377a01afcd2908a2ff8230272647679fa4e7876392b57bef773382fa4a62beced915eba8dce91aa668ac9f9d08a49343170be9fce3bbad8e00e63b8eb326d7a4b5d451f0f358f100b10d30629fe73270009e172a8bb0e5ccce126bb008f7ae45564be102b0f74054712a8f226c6de9a90a049b470b23d92e275e7028ec53c72352d2f57896527cf4219b0846eec70d408bd5e30cd292ec24b510f533bdd996b104101bad03e90b623ac5386aa78131f91e987ad6827c9342efd0777afde7b1911269d02a9a397041354f9be8170aec153aa2ff2e8b4f630b402363693d0c9c25d6669f7bb9b24ff39980af69cde2903758bbbc8f6d89dfd05e703578fbc6baf1f89cf60af2e1ff1be00eef4a2c96c2d201194f73a9ca6e44834d8a44aa948287d1536062c647020c9140d813c3a5e877bc622475b07f92da6721ce36d9f4a749f9406b2db46ffd5835dd0641238e959af31cd8002227f20462836dd9fa658ddae8da62a63dbb45713629d67cbcbf4eae3dafe69d6f41e0451de905a89c75aa9d28980366e2c78f0a2abdd500ffb6883404a1bcb8085bf23ee1c9122d3093921320ffba0a13f31e658c1f9e888d12b6cee088e6ea7dd4bc3466ba1fc2475db8df7a77f2fa61ec9825c2b57f7dc5426ed149cbd1af405a82d805228b12411293548d974aa25d1260cd7716145b38d414eda8f12970e04c0a9c55a8e0a7ce70b604e2e43dac55e32ccf01c7e99b68265d66968f3ac9fe2797e3d093cccd4ff6a58312d52872fcfd309d0b315bc8c3d78cee9afca234ca7bdf60fea98c2d35f2c63185f0a780b2cf30d9ebe9077dec6637e82edfec2bf5c735764820bb322113bca2b4ad377007b791e83c6569054230f2e5aa8f752a00983ea635bfe66691d7dd59478164ab6c64d85a752cfcf955e63269c6b1d9a96b4d4f735fcd7a44f89dccb787139bad614578a31ea63fe4a7f46ad6ebbd8644a6750c601ed00357c5f3ff602bba68f086e7f744a167ae31a8ca20df82290766429de9ef0b7dfe199a78d9c57e0c391f3dbad8d195f7c48ae8f5e8c6327ad998b0366c92ae1de704e67b006a268fa884063c91bc74cd1f3ad8f6273d753979567fbd18dd6f363a942a98f7c09d9b23b960ebb677b66e1acc095960a7b2cb632a11c05331c75d8551e741245b4bd52739ee56bb95e33153d8fa8e298783c7338e16beb0225f0a43c89d121abcc9b44f800efc159983dd36dc1d02e67f60b346ecef26b4419ec2f262cc6a4f479fcef926334a68e500c8403ff1562bd1c1f629d11b86e3f20efe1dbae5e8369e267bb096fbd00a1ae2691c8f08066e31202668d52c5da3d60832222b99ea65230641024cd91b9dadb1560843d182221013ca60638229984042f5ac5f290f6f78a7b56ac25b8b781ff615bfe8de67ebe11538cd06bd6915c327cf18a033b599f1935f56a1e3be4de4190e90089f0630469d17fb294e9ac0f12f04f3a94a7b8940519552361212639ca2c7150d940b739323ee6765b64d0e4ce15dc9d4cddfc1c75b0dfa2967267d9c2bd5db724de64a693202be2674ee7228b73017ad4e40b809180f9ae64378e0750c914fd12d05093b501b5bf61afd8127490249ad3c4cf0883130c0e7377830b9cdafeea4c206547bf68ecd4f08f8bfcaef6afc6f2862ffb70f1818b6c3a2e2dcf7783467ad6890cdade38ebbdf7e828642d08c4d93112a383a0beedf78877b511290bd844f8a6282eea01ca6feed7ddbcbb995c2fcd6246e1aa2dfcbb6a46ea8976fe695090a3e4e214af3aaf7d4064de2ac8589d63062db597357f61e7831560e9c4c149a568881fe4aa0325ab0b05f302ff7fcaf9e6a025ed3d409008167ebd07c5a8d540dd5c0ce35bed7880200823c9a5985f9aeae65936af05f1d4e76dc95a6ae69c68eaa8d29828c0510467b59509216c034bfa497af9f2972c53de2aac691942472577b3988b7a435740c9547249ddc35f16fe0fb0bf6ebee88de4fc8dbc3b867e7f6cc68745ba3f333b2c2ce11240641a02de81220f8b41cd8bdf2d94dc3978e87fb129c74d4e7d8cfd7a860bebb219dd1782e7f971b1ea8454b903eb5079e12e2c2e247f2ba0c20b8f99aa185c9ba8505ed2895c6d487fb5f058c7b7a06588f88fccffd76816d958f873e02fed64da1adeb7ae748cb8c90868a6c023556437edae7101f88b1a891a40ee7078277377e4a017a06955699023c3893854f6ddb4b59306730a1c1399f970f4a11c91314755aadca56251c49cb109eb75750b3ac8f946749d34a469d29f8f6cbd43b406111606ec0687062fb45842b3c0ac1ce23b61cda1c79faa83fcb1a53d0a14165b9fcebc310b01fe13a2c077c96121b23dd59432773973b6cbdfdabb51d1b84196b726d291fbf8c1d92c92b015a0fe54b35e3b7ddd3ad750a842c0d78f5957bd2122c652f62093d5e71b76f37ec5688bac9dfdb4ba14f30182ee0b04dfec171062a8554347c0fbc4a736134aef1789de905b83e1f80df050c2ac644729d023c4c3107cae6c2458167f4712bc4ddf89d5c760740b7e6ef6c6ce4273aa554ea161aa24e29a4c94d151d9141a51816690f8b974793b347f2ce90f78df344caeba6d81aa300fd1578eff1c67d41273f1c5d0cf5f3a780287bb44ed1850edf4389572af6b0d16e2b7b8a7b006e8060bcb50e46fe85ecad0d0cb5cd1e870de36345bf79c2f22b567fa77d2fdb9fd36323b5abc02d98e3986a083bb21b2e40efbe93385b0be16f64969f2076b4abba8ce880be1f1f871ce0c400be8473c578529a046a353df92e16e4c52ce627fcc66c8fb8adaa30eb0904af88c6ba94f6f4ca9a1bbd9ed5c3e7dbfebbeaf4a22d57809dc002f7fe2f288290f2ecdb1b2d46a6434bbafe6fbc1d2248d5f338bf981e478739469ef3ee0bc8fcf1895c52f2fe741a16eaea685c4e8867c5de18dcd75b4fc076f0f59e82136657e734b4f8c28cc272ffb5d95c1eec8cbfedf42b8655cf07fe1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee84a98c0c0493f1a03cc1aa2620992ebb3d145eca1735903a2de103a2a059dc81f8837db8c906b9499fab653bbb95336287552dc8e78ea6f04cb10e1419c48750be3bc82f3468b744039631329695208475bd99c495043c4ea6d345b201885ae96a54f3d5d3246c0dfcf496914e33769f8cb03b53cc30b0a3b0aa52e3141fb7aa7141a95321d45825d058fdde4eda961230cf8aecd99ea49e1eb8be5dadf53e1277a4211dacf30c1a4235ef7015050f9b067df0f66998a8ac3580d0585b935ebfc1df23abe10ae869b71dd40d3d4d5388724e0616e8d90d4c9985318999847a10f46509644a867d82a37353fc340e027908b252b4d3ba730dbf586a67e44340a483c84afd55e04bf39bc8d7c375e18ccb4e3d3f56a6b75a5e1b5ce359b85a22e8f49b70ddafb2d43b0490e8098f42631d97615482fe7a23bc321524f5a233a16cdb31136b948896d7726dfd24fcbb15ee88a11aa0376d7fa69813b7b22e5a3c9e8c3b9b4dc0ac144779b2afbc2ab6259ca68efa64edfbcebbc1db0425c94854fcac1d80fa90c7cd096f014815b5be12c6558d8c179ebf815a23cda2a6ef88ab159f595cd8a15631abd6cc7ee81a5d5dfa3a1f485ea6234810428e1bdc1d958f67fa61978e6ec1e29d5586bc99b4fe7786b8d6a790a0c1735cb27ec83bdff9726231e8b97245a5406c4fc279b1322be01a462632541b04a3bdd822303ca32f04a2da314b3ae27adb774a024eb50e6038138690612f818749b2481afc551390a69847edc53eb1bd346cb8c8a41ba635d010eea7cc7950a3e5b876bb851b8dd8f8b12f70aff43fd6bbab3078025b96075880e2deccc824f4f85ed8a653069e624b8be55c7401e97201c135b2e20b5a7f21e20797faa25af51204024dfe9ca1c73f970e23a9ce4af9773d2cebdb916fe7dcb2c185ce8e8f1e93567824e044546245510e48c9dfd0e7bc7daa95579442ebe981a50ad0e32dfc1cb4aecd909412edfd587a4e4cbd27c722112341de7a8ff5c8cd26a97a56a3f81ead1a9a881269a4b80bb6a6badc9c1248862b63e8ba83800b03dad4434fadad19ae403e4f45b53105e957e48cb4ba43b04b279e0edada3510a4163dc43497857e46b40b5e84a21d777fd27a4adc1ee5c9deac329962006f8a5c7d2865abfe1becf4ea942e75acb48d4dcaea7dc9167315cf3dd440d672a9c86b8446b02c4dcac647586b478f31b0a7c185b78df25d76248b30f57daecd7e6b7faffb3c2c032caaac81f32247dd7c6779b76403ee306976913a08b8615d47d3f774c85231babbfa930bbe57160c823ce4b47268235bc77c8fbda07984ceb0b26157209ac3d0f336993a4f5e905b6ca881216533282c0aa6c5403f498f8e23574bebb69e58f26d0f3db208914d26962add72aefd631dbd95e0464790e8082a532596dca5677b83b4eee78c97930a8944682cc21f6acd5aca4f545bf834e930368ce +MD = 9cba41cf3cc3549e1942fb0dd4619d1c5d0c73509b6b1cf32b702a81 + +Len = 65968 +Msg = abf61e3b14287f739e3698a8c2c14eb933c38b7bc1db3eaf7de5a4311ecec772a3a644273af750436156fd234b37ba09850619ccd973d6ce730d142d4212e93ea1851d3737822f2b1bcf993c3cb3550c010ba0742c9afe7904a17e7bb3af3fb0edbb33d1d270231316c8f4595fdc28a8eefba8db82f9c09879c96b82394ed1b0ce6f0e5fd46a35e3986a94e47a5b3ac696fdb769a33723131aaf62aa9b97a5278eca344706176c83eadc034356d7944f3f3a578656fd2fd22f78eb5ba331c5fb73f32ff32d20d0dc5447c9e0bbf93c2932d90f9a64f3edbd004f8efd17c53916c61287c9142c69d41dd36c2171693c3eb703670d96c064bdd55ad4f8c0fa075ece51c23382e440548fa776703fce9c7415e0e847b20d9db8f5c144b5667939bdd5d66a973eef5c45f0ec6f34eed162b5969719b180819e97a9ad679ad1ead71a21c9065f11f7c58d89c9ddd4461998e8805183b1cac571433946c310c8f3e75cfb531ff2c3a18416a2674aba0f4f45f51c35acb056801ea3edb3e280153f736dab9c3cb81c97a0c683ee3d4d111a72c3b26c1e17ed5bab9e0c1d4c507e74823479cbe519e481218773853ff51423263c8a1d614c57fe221ee0ab87eacc3b1d99ad08a37de2061040bc54d71adf116947eb71fbb95c108a0aaf861db4c73b4b848e7dfc4cdfcf74d9a4848d243b8d43cc1f9076c4c43aec49c2d59618361d14dd654f7aeea3845539743de97cf03fbdb46ca15ad756234fc561c1787ce288808c7aa9a5ccf6ccbb4a73a67488c6cedee51bcc2d59db73bb65d4724d4a9425987a15b1044ca04faff3ebe8b5b185e3af48733b79b21cd43911620f9ce9129c638d7e8f1fd768b6381c222a345ff42536c5be13c549deeccfb154c0eec12494e9aefc6c7ed617a95fad61957afbdc3d7d45427f9a88ec63882ef2afca3a94b533c6d970aaaf75cf2b8ff0510eeb05d28cae49a57fd60de2696e8401b8bc29a848bb5bc22acc4ad1a4a817857899378d69ea19adfc9b08117c5a52e140afaa153177cb8b86935e56d2e11e5a416b3a161edffac09940a697c8daa475eb7be0a3f4e071f2476e7907be234cf7f0cbd514b3773606df2baf1d55d7c1e5408893fb9be09420f4c4628c6f54eb840d20d22f2e9814a655c5eb4a2c37f25ac83f8ac52d5e7d3c15fce28ced5d412b21d2f710992cdbc8847621c754e47ffc09068fa8b341756f3280c1b041279712b3490d5ffb1ad496f2a71b3bd5c4b0f28d46684c3473c2e1d4b7c79f729934614becdbc35d4a473529be9f4fb8c1cc65dc68de5ab8dbacb98209bb01889a624171252be5c6a47bd0b12576ab04c21d7c7cd2b97a48617d20c5de67808c1467daae5cc36d3e10ba8d104268f6c1aee960f7eec153eaed7b3d249e91c285ee8c5389f76c02ce764a94d07f3cd8f76f7938d523be8ea867f03927b1026f7b1019d48b5fee4c7cbe740e7843bcfbafec152d9cd877d28ab7223b56808230766256873afc11f552d0802391f5ae04f10d0567d677b5c897c65a6c3a71d9ad7fcb8a9221369da25894b6faa2ffdb9ec3ba900d0a674018d77adff35aedce8d9d36ff1dc57659fd95f35ebc33c80b6f2fdbff47c110e06952bcfbf93e5d2a78d988fb51b0220eae11d3bf90cdb8051f3c589a3f82da5d631175f4a66f27b5183aaac75569a4845dd41e229ff7379357f219a91ad52d7eaf1b8b132174b53712c884ab52786283b1e7bacf1139ad7bbf5a07740342710cf578e8a093d56d78118bfeee7066c6d35251910e0d1b8286fe7b084320520ed0dc3172e3231bb93fbb8c01dad6b9363be91a8927bb261e7cbd5e055d998c6c8f0d4d1323facd0056b8d273b5adfc1c851e4b8c6144e1ea25a309e70b9779f31430d4b2aa3f73a983b1653ec81cb4df7798ea8106d0d44c4959869495429f0c26eccf36be1b961e8f4e4e485b4c6be7da00024f5c8688adaf86ddf643c1881d8ce94589a8b6bdc64236947bb665a89c75fd98e0ac8f847620d314f45c3dbc900fd03e92b037700963123fbd208ef4661238b61b3d13500d64e735752addc1cb7749c2391dc7374fbc8958f8e3efd6ad775863e8593975dc436c4763f3ca21388cfbda66398d9b001344e51345b1d6d96d06a82f46297a49850753a5002b643d158f8d014ab2238431eaf1f68ffc7c52bcea8cd84d0ce7bef162602399291044dcace4f2995d5844de24818908f751802cab17ccb60a45a2502576c506ecafb4a7fbe5216eb7c0a6e19a9fb4facbdccc85f251f1c94a1b5d6af89d738e9bc8f53f249a7711e8e51304f3525fab9fa59c8e664330cef5f1570781de157a5ee46f6cce0bdac9174ff40dd8a372649c355910b0f4720c3250f7ef6b4093125f8a8af5a13f33df6c84afc5f098d56dea136cd4776c9dcc2abea7e95cccd59ec342aea4473e6b9b100eaef4e43c700eb0c73b9f64b49a5604c5cfbffc89c366b595433f651068452b7557625b942b8f17da303c1fd352f2e9edd537f57f46b25b09b18fa6be1425e43f14d6feaaef3746d3b2714fd1ace801bd221aecb644c9dd28605caf4e568364f64c1a7585a250653a28089cb78f7f73bd1e2f8c37a6f4647ab86e2bcb15a6d32166f4672d2e209e98fcc7b08ce500687531407a09557b1886228cc03a3bd75849cc2d7cab79f017749577305895b3076ec413613438a620d4048016a5af5e1bf5e58d5d066d07f8565be0c72387e0792f3d72e7c136bca4ecc710d613598345ad19dbb246f1af6ac6b6c91bf6a3cfe5400623b4b73907ce57d405a88d218efefad0e12274ec2e954d0efbd4d8d1c8742a85ee711e28cdc49c9226331aefc66d627265569648cda072cb3f9bd2f9124e74249dc6feea57ae43683d20c2ab74bb6f6730f6b7ecd4b3be555b18eb03f69aa64af65a6069edb5d4c010168d3de00fa9180aa9dcc08bf8b81517f22bd7bc81495ec3d64b8cd701d80169be848d529297ebba170fac3994e8713dd19a5dac2ae4cacae1c83b5cb9d7920ec0ae84126cc1490ae9579828b2d6d2935f417e0dbdfff5d424de5ec50557ddc7c3140867c4af9bc0c7bd6c9e780ba1e341272029642247a84795de5a0ee2495e6fbc029bc2ea47a5584710e40e0e44f322542c4645d62810f1f5a163fcff3e996eb05bf490f9b78145ff6c429d67258ba8d18bad88a200d2ca079028f737244265f8f9bb5364511c35ed69ff4d9faa757ba523a6560f37b77bd293f12610641fff9ac63736b47f3dd118ed65453d3d7844d8de78d7a43587ac5e9305b11464f9e2a0a9b25e70a8aec188e1baaec9455bab73a36d32e9630a04b476adc1cb8d97b6118972f6203335ac452e47afcb2ae7577d59cb906627072cdb26317ebc47c324f650c0244c8a9b3b58ba5471cc53e4f1feeadb18a4ea48ccdb89d90f6ffb43d356e5e4107d14a715c86f291c542a1a20ff3de5f32a15938bbd89ec9c6c0fe06d393026e43a3923e29d340dd7e916508d863a3148800eb111880db44f3ced6297a819cec50c61d54cdff04aca157f50e09ec906402f3f6a0744fc774e66fb91fba98823dd7af487f9978d261e5fcde0c04cd2ae03be0e8515fa407ec172a3354147656e540c5aff91cdf2eafb4f69c9d59a3d6fb8b5e5cce2b1c011d1e84c15118798f7524afc06bd8707dd886eb9d2c88ff292879d2b0517716478a5515dfa11730906febd406325cfb449ee4326c54133da5e99fc48f95b4214fa673540acec12a1e380ec8fe070ace17454571969e78fdb1d165da470572db8e03c1a5cf3486c46d6015f5243462776a7e330f88563aade152645a732b33938734e8a1997ce8ae126a99fef5551465b2ac3582ce25c8dcc90ef3eb906166f7cf8c50cdf5f25735b1c9f33d0de361379451b571e487b3e8bd49ccf42b528d56dbac9291614f52f9a000ca35ba6a096b64013b3357e68c705295381aa089276f1008067267ee8c7881a1778fa7435d6fb62d5f6d84eca2f20d93cda59c4fc57f11115517865a4420cb1e93914119ddb31f586a7717e4a7fc62b8164b7b40d825636ae6c7291d1a80d0ea96e104681ad3e3f514f67d78fbede6647a72d9f6efe06b774427dca1802757a80a058d989550c895c75222142f450d3b92a214cc7d3ebdc8e5a02d721572b3b965653925cda811acfa10a240a2a04bafc75fc84bf0aeced243c678193af17991218693ba344873cd35c87a79067e1633b10270ffea9f03160711690161221de1c6e029a059b0535902c01747bb3d1159c8408b52dbbe1f1688075cc54893150dee186792be8e24e2d9ce0517416bc194757093ef445a67564f1eefcf21b2f397df85d9ebc3308cfd2318c07239988b865149171fa5127057d4de7ea9bd103df243cf0d161825e00a9756d5e2f431e371e400717e8e64ce9da1aca5cf5b1958bf933a5dcc2dfcc28d7efeb1d411d66e19965d5f8650dfd68a5e3fe1ba8c6cd842467e58686513a9187276f0e002d48fdff0a62dc1acd22cb032debef5d159414ce60199656e19081dfa65ff7157dadd277b8168bae2ea35b1e82f99fbca8d0811fa4a7d5d995b64107f325a127157ba92af659ccca38685d1e6990f56c866b143ebdf90bb8779519289627d4dffb9cca404c936916f4591c2b6b18b716b74b15543375ff9a8f13506a18cf57e539f67de0422c2839695fdf6b0ff9ae61445acc888c857b28e31930f40084f4e0d7730a32618cd2dc9f60ed09dd9ba2f6347e80035290450a7e90ffefd6ad7178dbfab85f301c2fa69f458f2b5d675b7c8fa17bec0cfe26e7655e068223b497564f72d18f3842064070f70dfa18c3a09c5daa036c4336e667a26d8dd66d002e223ac59be9ff6720511a5daf9d95183afea78161ab7ea24d333ba3dc123ff9fe83a5da5f960ff44682a65ebd3c5ccff249750eddd045a923f33bea3a5f1e07ce22979964bef04f3e7b1be47e01f64e8e25cd39be0420b32f4ea729f1e5949268a718eaf48728e2d0e381d63b12eaffd63cb9ea4e6e98283aed894847cb280292b930b5551c4114c663e11b3c97c04994334009d33734710c78e82e853a63bf1500e8e2d0a3c34ce7a2429dc9b901938eb56a7e96867df46d96cdc5f259cb31b9264759ad4534f4fa49ac432a9f34478d684031df84fa1a25ef3ff4d851eac145d0560334291e73c8ff27f5a673e1cc59f4c90af658334bfb2c46a37d4948d583a81cc6ad780831196dbc9b865a908aba020ef2222cb0f0b9f5eaba2a6a6bd73956a18b5f597b96b43a721e137ecae9783a15cfac25fa6f25f1342227dcdd2d3082ed3b93f5fe0a630f5264920716515a43e88bdc6d983208c92bc1bcc6264130d309bc917319f5ec9462564e1dfd2a2ac68f0cfa2c129f2925d8803150cc7901f1fcf8a1fc54bf1870acdc8ee606dcae6a103c4e89f12052ab4147cda4593f6a85ced50bb838d0af4c38df998db9cfafd8750120adbb1c490670ffdae755fa3437873d16ce4c9079cf0c45b8389e6bf4b7c645b7c0fbfbd7dc6d8e9e44461127ae30170b6718683ea232f833103e1947b009ef5ce93624c4d63ede62e1b6ee0b93d14b32aa25bec56cb2de523c203f6e6b48e75750f601d89bedd66de62cf8a88d70c0d3c0fafbd7d692e15de4cc47328f8a15f01ec2f9dbd4825d097c3197c645176036d020883c88dce89b32cb975bc4d8616f7b23749428035d7ccb4c332c62cd12a3031dcbbc2998da554ca499b1b439b31b8ea0dacc407abd0ffa0534a38d9bbe61817b2e1e61cca1d35adfb3fc05b5f33d80c1944bc3ee650a31e403f36e874cb971c1182cda82245d85054f035f54091d780e08d95a683cb59a7206e4ac9ca5f3fb78f1ac39c14b3bf49dd48f6b1fdd039f109f3eadef2c575a36a63df0dfaf57492720672992feb4d12faa68d01d57371d4ec141638b1d3a9cb84bc8e15a532c80560f2550fb251141433956375660001950d7ac2444f5a486815e4b28147abccb8e25ae5607a89b6e62e82148d3dea8bb9f47459a239dde4018458f6c150a4d5055cac9e4bb6f9780132190aa9bbb752dc27bd56b2ffd30f3056a5c5666ed2837366640a22163509fdf4c6c06b6ddb09441d9233f71fde1c7d1337a8e0e0995a9b661d937406a0df14dcf7d032d2ea01ba5cbf9bfef863be3030ab0bb1548dbce5f245d4c206d15a1e5138b4a07948fe775b81d92b37e84702356c785849044cdb8159388ca55b1d52f805e824cf9c32339085861c5cf0595ba7f889662cb16ce499d4594450829b6b47fbd54054485f57a2272d42b5f067b4fedb893b7e09afb9b2539179970c56bfb767268395d1d85be703392ef18cf496a0722278bb7187a351338bacf74cd1c8cce4365f02cd3fc9059634419e0a72893378df8e738d8739fd00a25eefb88f3f0f0f9f43298ef827545c991afa1d84053e5c0aed24b210f62c577fffeef3f15ae425cbc088bb83ef79c2e22bb42a8b8317784f255d83d75055947f008373aad4e2e336679ed77599dc75a9e44ab60b9b656a16c77c772cf10f341a212bbc1e1591b48998ea475fbef2c15ae53c4476a68eadfc3400009420cfd2fba27631cd9567161fe4e99f74a763427faef75a7f4d29b069fb86b49f880ded7e34c1792becd97473cc1b44871b947572920a6c67e79d2ddaae8f17c19f4fe01c38bbf6cb846f7c2fcefdeaf9641ce6ee4ee3fee31e7f52d89d778e8ccf0c57702eb43f3ee4af899e6e1fd73e2942f35d262286535a36ebee78de9d73afd9b0049758b6c89600296a19efadd7c3cd4719c834973b135a3586a132d8f8ba2e863402f7f22b0117d7fd62ebe358cc123ede95a8a62cd26fec3ba702a59e66814698e23085c8ce4d11d2c9a30c33ca9867062edd478b3fce5c680acca7c73d687dadb590c61456167384ce937ceb27e64c1af460dff8842c22b64d0f4425c74a97ed1d7747a0210a598dd23bda016c725a9776d1f3d777dfcb80de390f1c6cae31c16a729efeb7af4048851a97f910d30f06268f07ba537fb3624ed85d2db619b7e52d112082a26bd45f579e3b44bd7ef5e1a416a003df7276c50f7bd2dc3c03a6a2e5b160de49c6623cba652866badc9ba440074166546e8243a071f4aa66f29a9514f1f4544655966b3dde03f191726ce8babf50345aba6248a289370abf7cf0365b414f96f08fcd6542874267f9e6e60944cd71007aec935e75f01e8fadf933f0f93dc71900db93b578ef682c2c90a390aea0185d0d7b91ff9b651fbbcafdf27f9f361f5cdfdf75c63184f9c0d216021938e5baacbafdeaa69346bee19f01a81cbdc8acd4e5f1d0221cc65bc862dd9e0d73fcdc61dbda19edfe1380c3829ab162c573f403cbb95f538b421295575dd3d80053f23f18968c202c69e9c42e2fcaec56a6897bf9ac6fd51d86b2da381d50133e899076d9c9cdf7bea86e55ea374113e20ee1bfe8218e2143e2c0e98da27f49af1c3bbb97da6bdf156d930b5f57b063e7eb71122fef36b28f04a155b073dde5d27a587feb4ec240d107dc56f5f79566d8eacc45293bf6236f6af8a15907e87249328b264cad8dc77225cecb36ad6c97557b57bb7cbe48de55641b5edfe51b7963b32861246d1acd6935deda99cfb27fbe1bb7d792dcab4de1aeadd0cd720355b29ac4931b03e5ed36c670f7a804e38aa35a413bf41daa1c94a914c99a652ca1c657f44e89189b815b4649c4e9b38c4275a5a85b1907a1b4dec1e48bdf04f3e81f591bf6070198345733bda4c7722921d58c31b79a113e9120a781aa03f7e5931e3cc02c0d556860ab2d4129d9b726b3238c91d3cfc0ed4c1ab890a691a49e2d53717543148a88b0d78178b688f92170e0153d2252ad1a402d8385f410a17a314f759ffdb527758f5cdec8fd6dce85e5abb488359b2c6217c986d634f965162972d7c49e57a2bb76bb93b640f09de08be6e9278031c5412d8f3105cbc465de805e0677b78492c6d1745ec533a9edadce12318f949f1e241bdf10a93afa2a4fd071902dcbb46e345a078e7a4802346a36ce2c24e53b8da74d49b415051338e6845df35b6d7f9b606af5b149f0821892506b178be4af9a374c5f89edbc98084f3663ae84ff3ea0e77ebf45b8cfb200b2a589a2292563da5093710097b4011ec64133203f138a25462fd4da5b280a6347a0aa4a8139e0a48fad2ec6b79de6f2f84f3d06ee2cea8ee8d8c6ed85ac03d6cdcc3d7f2864bebf4113f93aa1dca21b61baf1b126adc8446c0415ddecce26c1b1a2b3ce93684651114260db0af2dafe8f1ee1cd5d38abfc2c5c4249d500fbca9faebda736a720207cc2e6363772ea22ccd59d9a06302e0cc63bccbff2e6fb37e45abba79693d493e01009cadbdf681ec79975c5c64696fcb61d158ebad29db02c212e2e47c0cc21f7b44c075c8acd48fbb51adef1ceaf42788acd5481666bc9e3bc95c9aeb07f61001a1d8a3e179247d5c2fd243d4aaf847a0f54900b14ddcb876783085fe586c7a5dbfeb1e5085f71d24d8d53ed3d403957153bdfac607c5ba3dc6648cfd24acc6554701d05df7d8d9daf5bdca638e9b78c26f381e9dbbff0a565b02962f963f5ab2e122a050f84c18482d93ceca004a585cf1c2547e92101289e0118dddd3aca03b34577670afdd4334295e315154979e08806384b0b48238a0fd9a584f067bfebae9a73a064512c0679126dd40af0ab08cc424967c48dde66159a4dfcd5535def5a71bd45ae173f8a90cf4b9df3b2cf7b0670c722a76a783969d370a9fe861a7b617ba2db4ac8953c142cfad752084db3e0e240102686a7705705bc10ce887c1c3e18c2b5ccedb3a79dcbfa14c869bc5fc6373294b43ad29777b19ec5d7d3094e4ac99b7996ef2139782cc7daa94f71bb40e01d34f32f903b3667873dbcee388e320eabab5b45447e4dbff29d87222462cb7d6e8545bd56c83d8813ecb04280587e6861af6c98b3f28905f8e1e49a4af2d05fb4ea3e6c9ccad793b357846877397a675c1a5d51f622b48f492c34103bd7ea077ef84fc5d8cfaf2ae4129bd893adc07c09509ff9617b4acc71e1181c9d7e93152b13ec51a1232ebe2482591b5c21eb26e806c707ac88d64df1b4e327d673460947e1b6887c71d0be033b5e99373244f8769145052dc7c17456fc37ba8d428d4463d610d2d1382fbafeb21edacb6b88514374ac6a7bb4a6dff04b885d1868d3670d659de925f2b635757b1c787f1a0fc1bd456fa00cdbf1017c0757780e52b2d18304b004011dee9e15ead9cad8ea55da7278015e579a2a5948d417a3e59c96248357f9ebf93643854ea5c97a4f38f50bd18103fde2abdd77f5266b6914a317c07cc3cde954b85f6b8e207ddf68a267c678f4d9f7445d64bdff72a52042029245eddcce84ca308cc152df6992ab9328aac74815e2e33b6acbc63d6771c437a02535175e56c01b76174b571f1c9ea7a2195aff2a3955c25a01f80b14c631becbdf10e80fd7bcf585edc61c00d5a84c7ea2829e8972f28eacf0f3505fa601146fe3dfd35570374b46a56192a1665efe18d6fc8ad628700cfe3946a18a89b8b526c4106db1c8b58932ee9c5f834739290b17275882b224a9a81b607347f9df2d6b00412bb739ce3bd519d4e738e0bd79cfe3819c01a8a6f14537ef59fa7edaf9b718e071e85bd7df97c7a9ae04db525cc1ec99a9e5946d80501f31aa14713286958e8cf4a7a768e105789928a98f9e5e9b62de26a0ddeec35331d5f848798c7070d195088794f7ecb89d11eb898607dbb716cd76c61da126b9005ac8e9003f33f3729741faad1b5f0bb5a27b17571560af48f63eb7bc3b471c0b2ea098adc13d77e21215936839c47942d93be56b5d89eea9e6d318321390d6c2cff3b9dac91988c08417c45ed999abd514c2763b26b3ff99fdc84a27a09083c7cd56deff9d44a06e6bbd1fe9815afddce3834c6f278b4c99c9a2dff588c29d7a953e6ab4e44b597c377a08a0b794f9dad412da4fd65c6039c8e73c4422a3ae6bb60f0f73049a0e5a85d3111ce2b42a5f54e5928599c3d4fa8a0a016c14b0110bbe6d1fb294bd5989c55cbba6a95509cae4601779083e154c7b8fb1f5c5748feb0ccd2e1c0b21a59a847b7ad661d412be1136dbc2a8479bb01becb079bb6d557a2fa3bce7ee638d0d31b3e134a2ddcf9959ce51dad06cf2b5e9a59f606d070c49a5754ece94ff7a425b9a6149f2ceaafd2c9b1c2a371a94de735ed13260de3ed9ecd64638b561e7da60937d7ec8233f4a08218d4932cd0c9a375ce8682d6f579b943b55bec6177055ff43b85b9967f7108af637b06a10c469b434678a2916d11f0a28dfb92dac8e15760f8458fd296cd1138dbde8337246cd5889b110fa8145c4dd0356b0727dabc9637b740f49d40b1c405c5269256e2e55b2a16785081b203d7b6f5d4d3b2753c255fc09d735f44c527ff6c7abb660c563513ffd6ed860fad963c145e7ce160090bc25b8591816bb0450c170387cf6b6a69299e526f1df203934bdc308c1e65cc5046d020d8697d1b23150de97dfac7c701563a155db024acd5c993738bd04a2dfdd56695cf8042adcb039753264de81504801d463fa66e5164a0824eff5ed8d31956670dfe2e810f44bcfd69083195fd7b918d0e9e67969a49b6f1ea7232d767acb019afeedc04e8962a8755ad0f98266d70d395005b642e8bf5286e6bb30f90bfcdc5a426f091e1ca347d3c9d4db73ae2053702f0eaa2b632436e03734948f75894b2132ed4f1a2e6c126495e55bbdee338007df37c16d9478a0dd1115c494482ed2a258feeecd2f5bbcba17a8d6bbc76f1783093798940d1b14bffcd54db1e42c07302d0a84919fc09b46f795f917ca618e5415749c493d8a071b62f9ac62da2f5d6d17969d221059329d9e132f3c6789590d8c7548c79653fc61dc094d21aa9759bbb13984d8f174172073c6d5b40f650c11e6c02ac9a7e76945d07abc68d5f260ae7259f830e3bfbd622117a8f952732c03acdbcea9f2e2d219d8c476c2dcdf16b7d37e53c4478a99e52e9c0576b1321d45573e810307a4cb706d8d18aa3fabe05a7d1d23fd9d63313be4ba77d6bc3064697e4f0e4f46cbb9cc072afe996ef76218b7cce56765d817a8fbf97c73c3eca5e27aa3a2f940b6218f2e24b51afb2ff0751bf4147c3167b1eeccdf8ff868c53642e4d30b8b75f2975c4b10c8a964d43ff222393db67080a46fefe32ebf3b68ba0d35338490671f9f95f66595bf2c72951262f2cda0b3b1439edd9ad5429c3595a3f46bca82948b8eeeb899c8d6c299844846b750c56b88240e0e7d201d0bba4d999ad239ec7ec509a8fa33ce8ab7a7a21655fd439f1863da3ffae07bc91a756660a11d5f38866a746743ba13458c2b630f094b22883ad2caa73b8b54b148e5649baf93a6f16bda739c2d933391a0a34b94e9178a2b536369d648d457700788ccad0edbada16f937bda0055abf9a59dc04a6de8c6f2f2845c3f9b31d08fd6de0317575bdfb33233e1836487e8d7fb7965921045857988b40655bb4a7c6b5763ac5d01aab9b1342a693ad29076c722c4affe78a422298680ecbb2184a79cd9a82cf0a63ec825e5e56762d315d241bc1e03f1ff8b497d9c6993d25656de8f0e2a0974ad9e878bd803609dde6e87d217d4061f1d7157f00 +MD = 048c1b0eec04e4811d3b467fda3cb969649aa2d8c29c4d6257609944 + +Len = 66760 +Msg = 3fbf707bf1fdff36cc8c34343d3681adee0c8163eafd39d503a89fb6716f589dbbcdc6fedbe942599d6ba6b1488e0f408076e1696bc50bee13698c630bb736e356beb10184d5c4011e77d04944519d12959859634fa0de40b7ab341fbcff579bd73b3a6c35ea0b971859b9e27ba6b48bf51af439dfb83c33b916a0d0ca6c452f07eb68273650a18153b8696533b6db1367a3b7d46335ac2fe053d75f7e288705ae77431bcf2e0e29973de9bbb5a89a12b4dbac1a233fb79cf30ae1b5205ba5879486d32e48acd8f5ac9040ca49a579f0a46cdaf466fce3e2bbe2c7b8f82c271b80c12149e8f4894f5958767c36d50115fffb494a7697bb69008490524dc4962b3bcf3455f82ba89e673d94b8c65fb9ea8d3302059936c49a8998446a694b7a1e8e5a1438c07cbe4a9fe9a1653f6c29d516b90c0b180288db20c5ece892e8595c3e07cadc880d52bbc601a56dea23da3f61386f463b228e958bb38eb311c3bd4d16805d279806ec58a730a9b70fad53913756349d49be5e31930b35b52e052d59dd6dd5033790158b091cb32bf6311c3160bb62f78c0081150075e6d530d632e85a753b57afd353bcb36dceb1e6d8be89a410013e4a0e7eab9a98abfb615d53625641960b46f631516eccff3129cac0ffcbfd1a59cc10dd5a291d8b0f07c3182f9979ee06452134b302e15093052eaafd9c29b3305a2f278974ab8ffa6b2f09b7ebc44b32f47ee64a3753c8bfc32c05eae03dd7ab3b92e3a244ebbda2d5caaf6214cab6769a32ce7ed5ca6f9eaaee582e5fe08bb2b963990c61851ff08cbc9199db3436ba806874b8a3f04e1604992b31e1bbd92d1ac7d12f9320bdccda2c37c20aaad4e6ef46615e6a6a6c101758075a2e76c804a7e81473a2649d1f05422a4767d397e32df41cdaf2e3d2752d5172130db8601fa8eee94055fbc9cf5628f18ebb588797829b2d920301862b8cacf6c44829aa666501d9fe758a49c615031401cde0aceb38631df0656c921c7c921bd3a572adc225476b15cabc23ea8afe1c0667140fc79673735adfcdfd2e472b68a9ed3b721932eb27ed1c366125fd3e90074f9cb714e3f4b73a3bccd04b349e65aee72bff55d21395ee33a30b5eb5eef86b4e1facb8680d72f73f10125a8a149a4a5deb5e5c4ee83e81d7a9277dfb34dd9a2c46f79d6de72bf9b442cb4392b490e615239718ee91a90ccff0bf691738c5fcb1b89fa939a96aa8610904ee94a7cee8d97ab06ff9365ef9e421da0c51233bf9a51dacc6167cb76c100ec443d714dcba6f98b34bb901e6aedee4814df01dc4f9cf1f27db4a889bad87f9132aa52443c29f26a7937418c89585e0bb143e4dea64f86417d01ef49dd38f71f98b44fe8a6a33cc952f73a38c14a0be904981dc34a2e894848ddae94646f01e7f4efdcc3919f1318406fecbbb95f92508d502f22a1b675876f9c68e1c6e72a9ac5b18b3d936a3fe7c025cb7dc7f56be2c9e09b555373d58f6fe2a0ca9b4ddba899addddf12b0fda860ad791773a8031038dde503c5f313b0b834d8a757ef8f81cf39472095ffe6ea807b57e142e3f25958ac8e968f90da9be71783106358c0c6f4f8499a93a3762ecdf3fa83cc35a43eb7e10a95f6f974c16aef329e642619d8a94f67b5a24845d5a7bbd3776619b320c4fffb7ab2798c91b2306999d0b3f5473ac3240a385ab07f9c377534b70c89a00e7db3cd38bd7cbd5b8f9a9b1faeed9347d800f0dc57509d19fb4224258aa25d02cec5f60011ef84d561383ac7635d3d5f128101f4caa0beaf8becfe381097983087c49d9f333f88ae39d4c16e6deeb5cef716d618312b44db4db80b653ad3e2162d121c6c8df749448df2f75b4afc8d35ea54b5bd074ad01bd545e44375d1db3213410b0e8ea14746e21525347711341280ad5969c9a9d0ef971901493e3bd402fed3e1ebb1c7f313cabdd3707eb73af34e83099504a2d7d52793eaed005c8d07344d298a93d5ed399c4f9aa5ce791246a8987ec524d0555afb6929b578ce36cd581f4a61a1458636fb6ce33ae2b14a8b23400180c6bcc9ef76eb2628f3fb81a3debced1766a16e7a5c7835a6581a543f430c3a4e46b2b6014eac68bdfe8efe493cb85a025073f6a234040a7e9afecfe18c6f9184417c9a4ed72f79fb14d30d2bf69449c8fb37cf1d1692fa3a37d90e0063ecafd93354f716a4d6c256c3822ebaa0d314b1c367586978975d5f9b53af2a7e05dd9398e64d073c54fa5776f6d373aff74373557d1305de93dc5541d913be1f3db379eeab1c8f020c5a73cbababe588636e840df39f80bd2adfc1d7f3ec39dc16b9c2a11dd61c9a7f8b422e3b189edec9fe5a79754e4898aed01baa1e892c490369245ca91a3e7a2105391b0f99fdf77d6b6d044cbffbf59265c954b38b13ca964a057de75973059340df1eb3b08187004e325b1454e958980961447d527ef541c4fc81630448d138d69ab5a1ecd7e1f50f40ca56bdbf4612236a15c69fcc3d9862500386bb3e61a43ef25c64bf5fbcbe372efe7e5adc22835c4a3519938a27fcbac670ccdea24b47d27c8f6698876bde4e535405acce927e0c982ef0fe4738f136c655cfff32d2a639afcb4218fd63e7cd3467872414fa64ccca5fe73081e5185ec63eea8d6ebc41fcf2ac61b100594d3c68a57d613deeca05576466caa8a0d4ab4c78b719945c9d64eb8f5fe16ea07104569a52e4a7c4305ec5c8ea3d4a10b894cfbfb02462283b3a0100972a66de15cd94b2921ef13f1a31abfa0c08d4a926b3d650602e46c38db4c98ca21ca7668de0898ac58088a3fa16607426ade6dec180d6f741a7c0a3179daba00b089ede6bf5db8f67ba0c97528599d3d49cdf35fb747800cf115e4b6b3d3dd72caecbaa1265d13cf31bcb8db5f79e7580665c2347170ff9730b7e20eb1be68e915f9c6e23c9211ff22663fb96f514e5d49abc3b36d1256de7e6aec839c23c52d39baf7f028831b4df7a546567f663b12b9a9de23d4b4eca68437ea5b9c8a5b06df37361513b897825882b5fbb8421441ff66fccecddf29bae925c4dfd87c923caf776c9725baef66ec0374f0426c42b0c3ea03fa811a75e1563d62577980d29650827fbf851089c15c336b7d446c2e28ac3eddf017ed38e27386ac0ba61f83dd6b6059d55c42cf5b4f1783eae6cb3f70626970f8b8e0da86e7088b4288e00dd9a71ae021d1d927fc6eb9a27e5210dc528e73a6598c7cc3955bcbe546474bd952adb6feea0d5cfb6b6120b182adc36f94d865655dba485cd776d8a45d0ae84d10243f9a7a3853b271cf54993e226c5fffe746974a6bcd0b13e136aed0f940d2dab5ba9b177946b4d6615e40fad694145b641e2369c691391343edede73edad17a0831eb0af8be6962be4590fef4c2f670f6f5f102f41e4f9d450647e9fe3eb0b6c4ab719bde4339dc8e117091a27f6d0546d4e95d1cfcb37a8f88a62064f5d95791311511535b8c0e7bcac7fd0852e1e4fbc2f3c167b1cf72c87bf1d29586b22519cabfb67e90cabe2b797f8850c3bad3bec8f778fdc70a4c98e71048bc79a5e7017e57d088695bb546267f7b9f5a609b37edddc805c6cbd2a9d5eacaff571867f455c5a8986ea7bb75d7af1e20a03b040d398dfaa7347ccaa04c699f86a7756b9858f186d72817986096f7b8f81cb3d5e9b4ef550d9b84fd285574117af123bc958ec4b16d1e1113ae6a3f93525731d87267ec235c824b33e7f7f36603be8a229400247381d8fef5075c6ff554d71bd351596aaabf723933853acfe7489412643db4fa123bdf470615726f272626db8f2d9252345cf2b6c7ab26eedc72fe234c37b42fd7c4ba520e7db62771f1ccd7d4af1b8d075b8a2ab501c4398da88125a02b08a90a44f189d5ea30801add4f79697ffb026be5c2fdc62e1b984113a78029c0b652f3e20d532202e7606c11392818443a98aa222397c2db33f442dbf79caf9fc811dac79517bf6de3b1adb6114ba7a6e1390b39346071af1533d627f9e2fa6f45cd061b113f72d42c5926f3604cdf4ff7ccd5527dc19b53c83f461f36b8d1d93670c0050a3204dfcb421ff1ad9288e4843851978720076e54fedaed3587fd85a2e150ad07583d35c752dfd780856a109167c72ed9e67ea9c25ad9b67eb8471a9108fe3c9019e47f2873b0ce618d4c7924407e3ffc7cc8ac193a8da59ab174410ccd12da2dddc364f68cd8fed912f8c748abc0f37648ad1e61853cdf10dc4fa11918d3ae670ca08d3a84a08e6f7c34a30290d371d1b4f5a7a3252f8f68a09fe3c3d18ae1c50e44a1fc4550a7ac33c9b55cd700e2942767f0e601aedb2b642bae0fe07f9ad04b774942b63070179f7fa45d698f6e4809cca1320100ebe092bcab072dfa020e2c002d16bf881238291d180d2cc83c74c1ec628f0d6fe80f911a81b2a143410917a9f47f489fb497376dbb7509f375a0b98fd9060d41fa41c90dd91822a17e497538478639be7fbd3335329ce8574055587db19ee9bf48fca25d5b42995ee254af76cd317a2d9b31833e288bb23dc619067d90608931fbcb84d1ae37efc094b42b2b2f8af4342f7b915043484ded2f772b591f52d6df3a33d7337bff0a10bcf1531f14998d1b6324c3332bdda3afa2f42fd7057eb6102ebe034969a3d49584918e1925652e2960b383ae89519bcb471a7bc0eaec120efff370dc212a3499121e43e30af6c0a74eb0388a05ad1c88477075db78a3d31fd45a86b34a9c11628e20dc436a5429dd55a3498f46f81030ca7e86f255abdf8cd57cae988d025539211dc002ed8853139b152085f53a5e09f7cd16cb290c209d2ce04e519263e766f39f57e83c9924914b8e2434b97cee5cf7e48e309dce7d99fe0fd0a700c7af312b2d09bcff8f869e8b94bd643bc5a870f24b54e758faddca768f9a62803695e2f1503e48dd72608483b153dc231d748f0f8bd2b803982a76b9ea164ab9b981c06f8e5e527f4b99895d6c4e65188c3aff762b6f6d46ae4be6f2a7aa2654575b14ca72d1a38d211bf63e4d17c7c21be20950b392ccc8462862474fc0c0f8190b262d81ff03aefdcd1350dd14cacad154f5c5aca59f3267a931e069bfde4e05793ebe4551398ae69727bba3ae35d8b7780bfc9d0fac2b1ab69de67d0f49fd268ea4a5452d0fcae4617ca7284dd293d336931e0e38bc5c6637ec811418c9ae81309f0b09fc4b16ff13583bf25a67a42f77d4528788966d531467d8b5412609204879181a27b6154096049f8b3bbdb2d32117c191670405e9355614e8f427b50abf78f3ff141870aed0c8fc7b5a9c66c51ea492b33dcccc3182015c3599955b477be5c5402d39cf52aaeb7a481ecc680f54c3ee7672b76c32e4afd9259638a2e06608b566d9e0d8320cb7407cee145fb9adbcfd616e8d8af441aab33f54d833dc6728ecf87fd73658df72779e343df4c910d6e6fc9916d1808338110b3b3db543658e917e89e48fcc096546375710ce49645ad2cf5c19e6dd90a21b12b42ed11d4a83cd805ed08c9474d8d6cebf5296409390e8631d6074135230fbdb25752f73fd4dc8876662d4ba06124eebd4cef3b784c0513f45b1212baf29d6eff7d8764c6634a91a09641046a95dd717fd4b8eb51f3234eb3dd5952c91d7d7d493204fb16d8299c2af9ce73e44ff99d8a5900e424c2ebaf06c94791edf8023145f1561a9fa7dbf06c0d402acbf41bbb931661c66f3fb0bd539b5750a816de537c57e553cf56f446ea4d20897026b663f0a95602afce24e220e0230f75ee643c32c24d272469e4f82c35fa208f4c5c1f498e581954f2bac60524153ed60326542fcd08154d55309cb864278067f97f55f431e28b0d51e4c166c3b85f46e9b743b9c4809e98ad599d0534531998a2829087407fc82740257ccc6b86f15706798377654143a4e6e2819932e75c9fec186789169a6131521f40ac780b9574fdff8bdf1be474d0764de2fafc6ee9fc1aa3436040ccd6ba1c14c59d75a0ac3f14bbd55754d4c2c9f00e2990dd54222bc2b5aca33b81a93fe2b86405e0f0a5f3ff30e876ac8cbdffc8a5ddf1723195bd78c20bd8835349216a7cb48c4686235211e14dc39f86b6c084a768a34771c50fb14af96694ac570cf7c43f7722aba4d8016f7db48a5d5dda9875621cb9af20b0e0c2fdd40c1723513f415d8ce20b9ad4221de0d0096b13ac98b242c46554494f9bcc81b7460e5eac9556a704111085f5188f1f8c995a6894f9c09340c6ebaf1a56ca0d66df0c697d9e8694934c44f6b93935a260c685cd423032dc085adfb2cf964e2999338bc422af53bea0d0235d7f2893e1f2fd87c222d08b75819dcb04ddcebb4e94e0270f5a6c407db369362ad55b4c8699cadae7c55f2d08430c1805a384b3e5006148ab7349cf6a5153f7ff5a35a1d8eb9af99e9830b9fcd3226145df4caa9552337b191bcc730cf14ce34b5c6c46816f0a6e6719f994dba87d1135df8b11d810d338d89278bdce1990728f7a53acf87a8593c1c91e501d4978a26632c48c15a2cd0c7aa5b3122630eb304c228037a6b489144f34137e4a1cb1bf57678d6be6ae9d607f941002bdeda9a6f1f376992493a16a6fd97d71eab894b279ec4a53c39aa0cf480c1421fda65841214bab23faae5b009427c0cd67a3ae165e3f8fb624dd83b3746c43d26dd173994ac9927a815b12715cbd61f349447a6564efc215830dc2b7853303b667158809fecbc10f6120642739f8f5861831662a3e6b85f476a1ca45eb0ef820a1d9023d8de0cb550294ccacbc68dff85cf11dcf3b414fc5781026e9164e75a386a27e8e9896f5ddfe3eb88c449ba5cc7fe9fdeefbef942affff550ba77020d18de85987af5ce52cbc74b41072ffcb7509a272e3f0e4d77786c5c1481f226e2d40312fb322b12da3b5ed5c03c803d57482b13958aacfae4d94ea1808ddc3d20916137d8ba32213e572eefcc0a456485d637cadb789ee6d1fb2f2b5d873d2e107a7e5af8b912e5c649c1022c198559892248b4c8b2eefb8505966272161de1fab4e4e524d8d445b9369f77a9124804ab55e53924e0a41f4a200cae89e3853e266a1b3e22bf7f2861494eb40b9d964d339797c1b6aac63c6674187768957c2ddbc2a9cfba151b7804a758231a61781c680fe4b447b65e3922284225d8d50b9662e418feb683b11ceb7b452b9d07f55993e6577a9faf73fec6651220a14b396103f9f035ddb047fc5eeb9b335e3616ecfc43757b863b0e739a5211d18b9e0e760629b7dbf645e800a41fe4a52397e2bdeb4fc820c4023680e618c69e5e7792bdb39bf757cae999100740a7e8b5d261b4a832d7cf20adf30df1deb9f0e17dce1f5278371321456414cd766d64dc8e9bba7a132af164e44d0204cd7330dd59c9822ae70076c20050f43fe8bd815f7399b5ab1a4aef564e4d47670d7bc41bb28bd08411d9e877c36598a5bf1fa7082a628f8171be2fbf94fac462c5591660311defa81e4ad10636ace847221b3e9d5bfe2e453d0e1b665e5d623d1d968c777e86c9de35db9a38002ccd6c3a3aaee7ae767c3ea9c31a15537c073f3eb9902740ce446e7e15a9d5caee2d5e2f035faec9d15fb6da6493921b619cb1504a89371ffe4a9f227f67a53bf8f26328ffbaba5717c1f3fb79f0a65f140adb7ad2df70c51dc2bb49a23c6ffc5402c44db425d2fe50893e328a9819c79b3705e5d8f99ad73393081a0491fdb40a47c9c7ac09c066859fdfa720f3b3fa000d77b9e4417d0049a7cfbe2fcc150c20a7b9be6fcf4a38beeb1e84c2693ca14b73781d7e1ee0e665e5575dab5780aca00cde5983dd391c015443eef9627b63825052392ff88c319235ea1dfe98063b915d7ec1729d54b958c5950f4c4639e9af8e4b367e384a8ad57fce29b2f96e62fc82e21ec47565b8ca235d0f437d3edad914ac3cf444e09938ab4ca74fe082c8e8625297ffcf32c05f57e416666f52df09cabd7217851605c2a2acc05bb708165de71554ad12857a20496f4b3e853da04698c5017263b6767b4a369b60e5c9f364f8757e55a6248e14e149d65225c6c498660e118a4786966c8c3261e5d28d08037db83d80f3d7a34408b9e02ab8b7f4071cdec9e997500a9c51e73973e61cfc445f27b8b5616861b6a406914fa7d6d79ca27e5116bdda7d137f9e4c91893d782f840a187c589d72749e79104859ec165ee036d2991fed95daff9fc1c723ba24cbd5a9845d40407b86df5a869d35c05856bf4d74fb2750faf8ba32c19d1c59a7203a4b25e1811727f24ef11ad7a51c468a250d5ec33bcd5575979f749cdce3aa369c3a238f83eb1bc2d285f57d0fc68704fbbcb979c52a4e5a7d2d014bcb1fd416e1bca5f0ae8302fe555f3e17dd87c4cc2aa3aca52c308cae5625913252d7cec7f31ad38a6ba982acbec81e2e7627a5e8990a60d0d8a7b87909cf4bdad7d13f51b89cd6e8202343d6f506bd49426ed1622f38fc81315779c47e7358cac4d6d0bd1a89d68f37baee83e16142f0a924f142d677a9419f0778969d59df8a7fae2912002bfa0916362bbc6c23d5ab1310ac8e750d8f978a815df74ec909a37221f15851c86bdc275fa1887d92a003e8fbab50f343d50b5a8bcfef790afe9c03f7d097f7a95193d0fdf9effdf8c87f90ad968f3a61a42577ee76870665e5fd9cf770d8d916d3b37bd7dbf9d29b78a874ee145431af236e4972fbc6dd22e64fa4eb7622df5619c68fb6edafe5c4d604fa86cda6c0757b6d39de06b5e6892b1983998d7ef1b34c547462da181eba0a1d8b3c6a8dcffad3aaadfc3e5a0ae1d9e3a0c95bf3f77394e391a3483c65c73d7b90d99311468754ae0e924cbf2f741b3665458889d9df18fd5041e024a33197a46f26ef3b0d642500c569d7ec3e88179839d4bd487f3f0129180349d7be413f2292e827120dd97029384988e72066f594843da239d2db76f052b22b5da03f5e7d5feae29e2c2e5aafd1f907babb56deafaf49de63b8faa0d8641630bf2f731b3b40f3c9e853aa0d1cf743fb6df99ffa7320c01acf1ae6a76bb7f7fe0455249fe69cca84f76b96b1f711ed0d06c18b7067406afd83e1e5b231b31d3d34f99c1105da38bad45a3a6dc989c0e48ffa606913770e3089f340e9b1c050965803219a21640513850ade6a19c684290f8e670c002e765ae93a3f75734757b0775afc62c1a1f9391461cad06f3001838f64e882b5cb6824a99d297effaefb3599e875906df9dbd1884945c6532ffe9b16642bf2bab8ad35d303482bde5f04cac694d34daed47586eaa999744e2b4518ac767785985b0d376e56e2a597c03a19074660c00a9a8dfd41680c03e78c9ca359821662d61e4fcf837d4014b23b64ca63e662120bb3ece19570e79ba7bacce426704eb3fc683da71960aa9fb7374c85e35d226a39885ad8efa87263151e9d821a28689d93a09d6738e7676e2f1cb8f18e91e8f11b7f9f8a56f8f484b91ed6263e93ab4a223038b7e8fac1aaa25171b66c6bfcce390182a1d248b7261b234177989761e2317fd63d3281fe7b96403f7d85d3a52a1b77ccc26b80016fc496a41e331dd08c48f53fa41d6467089550e9eee2b22c2d4a4745972a891b8a3bddc8c2140e4271f0fa3a92b28b447a26e939b08aeed9fe4ddbb5c816494d9d0862750c4550fdb9b0f690b0f8deddf8d273f56c8571f4c6ac99e4fd37a9ded1b48b72a3cdcd4a8b115109a5f74679ab1f56e6c9dc21c5acf0eb9add9691184dc6c28931b46b700f9a736d19b7a962bb97fbd47096e894d9a0389e103aea413ac66e805b0214b96fd3c584b641f1de4fc2c88708bbada87544e7b93f2c9aa2bf3cf620cbc0af6bd044ad16219c04368f2726c63a54584aa76462b312728b8305b1c43129f624cf5d7694ea05d0ccb2a44e7e5aae67d0c2978910543016a32c33ad3f7b1caa5b2d3bf0e3c908e62f99b6bf360c0bffff586e3a5963421fcce472b6cfc54de63bcd953a007bd2e51735ec03b8a2f921cc545400a5aaef96edf4ea56dcd964b1aef691dd55c80cd56bcc6fa16ae422d71ffd70625cefe082eea4c214ce7d08149cf1576048785ebe13a76721b69c2b28e09cebe8e6fbbcebb63c23780e7ae115eb07104b43526fa9f60efb0c0390bf1df779ec1aac962cda2f04340b029898bf847de427ad1fe89dfe4853e8b88984bc4ddc9c811487d85540441e54139ed5174f9efa7aeea770a3129f98403f4f220fc80d23a487986767d14308dca9563f2734b17bcf6eb2b0c21a59f299ffaa421e5153a80b6e8f8215cb4a1b292d867ff61cfd8eab94085002ffbf887d60628cefd1f8533f2f35d06914a17ec505f73d8cedcb5c98ca70f76ba7198373ca3ea78d2e424dc73452fa6a95905a389b7120f291630d1d78b44d06fbaf0a04a5083cfd527abe2be3aea720365fd70856bcd02fee0dc8c3049afcdae3c846b65986f24823e7cef4a6108094e0551cbf9d9ff64bee11b510d7eba9ef48ae5f144e8172778bd3a3a9e4422ccd79bb52e4dae33a4f78b6fd8e596efe4e10a77ca3edc06392718468d2040a54d3ead9a000745043427346c8c5f2eda3fe25fcc5ed9c0d6e9fbc4343f87031a0af1cf72f9ad3aeba2cc9073d3c0b2e40076df56379c42e3ba856585ca28f7fb768f65d273a5fc546156142857b0afb7c72d2d97ecfceec71b4260bdc58c9bb42065f53af69805d9006233ec70a591aff463bf23d78200fb8cc14a4eba286afe8924120efad9e3d3f06f7452c725e53728b8f86c9fb245fbaf7086ab0092e215213830d1091212efc1ec59ddc3a83707d4ab8de4ae041a41c3deaa6541429da28910d623a9a71f86f55758ffeea2f37c78a9d42e7b0dea589a6a2a1fe4ce0a21115c7679452f6633fb3ef63bb0ac972f95326f9c8f2652ba73b19a0d737b940b5a599634740183715401b613a23bbe7baad3b4d162e3dfe1e0335ee075f1d7ebd4c6ba07aec403b9805e2d1a4bc6c5fb3a1c484f9eccee69706dfd2b54c7522d10f256456dfd43871092afa205e44a18c36a9e798b580abba4d00930a8427f598f8aff803a03ef64754dd25d790ab77ec75d2be1c10bb142edf7e7a2d919dbfbb0ef1a4a8b7e43dc3efe19af0da09a77b642851ac86e7ea9cc543cf46fb3d48e159d3af6ead30d58de120a194c4c6fae20e91e7719e6cf5ab0535da7f487157b3e23e637c0988854c328082ebd74a38c978f6ca93e0b2fd04a93ee2fe02a0b6d9b01806fb535616a8ebeb841c9afe29d7ac404039d422ca4eb84531ebb0312bfacb4be1121401514b1348f050964894b5b155928b032223323b310d6fdb8e7fbe3cbd3cead2f1fbdab27f0eae5191430b8f1f08b2f41bd25839ecbfb20a1e7acf0a585faa188edf00d177265f5542fc804e85e9d62f769d67ba5d8edbc549e3d23d02917b6b40c463761a808a2ac188bcf76e7f1e3d994d08c76cc41295778472dea51b85556f71abac4f64585678af6892c410b3a5eeaae26601a88100102355f42845ef5d83af8178fe19f163cd382c256ee5bdefdb7b9ea204814d907c8923877357e20ce4468de40fe87cd92aedafba544663a4ca8ae3805d98a1cd247e85a06e9985e8fafe76f76b19213ef6949a585e7acd4b229d5a0af535a33e6ec922450153017b2e9fe4b9f8f40a1c99f6940874cb246c4b7daa47b29f7b6bc334a48114cc7d4de6f081339fc05cfa7bdb46d17e7f908fadf27c3f7d2052dc8c85b0598f4d22e48bbaf26c49c74261040b57bb64df383db0c378fb3ffe501a2f85f1d75a1e17ca86c5e26cdc4fe2d89c4d70ce0e3345fdbcba +MD = 0d93fe34724b8082c68ee11a445e6cb258135560bcf727d18ec57e8d + +Len = 67552 +Msg = f4010d05b6036cf40411a17752d873c74d668b7c7a3c33461aa55ddd5246e73b88f51d0810cf80560884c68e80f621aadf03c4a5819ea430a5257ba787ee1343c924c19117d12f230b3b5f854e74ed72012d95485bcbf4ba93bd93c5000c21e57f330088153204c3d5de7744047b60887c8c044e4eeaae4bab14ac1f05c69a8871cde3d55019849e2e1413b3ea32005217c91c9da324574ab6d3ce9ddd4405936898706111af391cde853dba48c258399c8ce21ea2a079217da10127d2afea702c3cb1129f1baaa6acdafc416552eda6d17c60b992879b37c5274ea52a2fd1868562aed144865fa261bb59308a0b49ff80429d57bd0046f4590cbcff2eeb433d3bb26e874618e17ac5cf5a6fff15f3ad6f86a1de693401c000f9541d260cc7fd15d3f91aeef8b794a0bf0ae60c97731967ef7538df4a540381961de75ab9e62edc6e5774844f695aba326e7ef9b952aa2f25204b676bc725a58a1f46111b2738582a917b50448032dbd1901d0da517c791d1aa0148bfe38e347e6220955a128451b0ad1999008386ca4477ac91804ada539b1c40cc6d2fa7f619ef5f2c9d2f788fa7b635a9abfabd50322b14cd75734a3e2a7df2399e34d6b204cde91f0c077dd9b8b1b6c66c6d3f3544b53b09a91b7f1a27d5fed879788432e604a8b6d121fcf98ba886396b657441211c0b8d47c9e1af392c4cf127851a3c689d823811055bb5c7a28c4ad16ac43b71686ba07506d8c4098bc4cccfe3fe99329f61eff73c04d614a8b040c60297eddea1428c5b59cc233ef94eb09a189a11eb122c21a84d5d241cc1da6571b7551d0ed07a97234a2592817fd2e7b0ae556b3bfecb174fc0d06684f5f2fffb106694a9fdfa0af2614bda7a2438b7382d9671cc6c2519121ec366f74ce0578b95321a582eaa2df327a6c3d0f068695a1bc7e94363246e19eea0ea1bcf8cb54acf2277c36d72474b239e142ceb4a4440024f9c4becaf608db8cebb9885df6060459c7291c13aa225de9c97351ec7920f6996528a0eae359605b5a11777bfa2f47f09d46a33ea84a7de06129490c599f2d904d2a8d10a365b5bbd6340ab15c12e06d265f8c96a36f9ad464ef0492da30fd901e64e3da9ab05454ecbba2bca0637615dede08da20044d3c213f252e8f68ef1f554245b74dcbb48d09f2effc4b937181434cd877b29b0d6e42842b2ddda98a948e5d1325310a6eeaba8432ded2255b45e0165bedbfb644013578771f399558a6261feca2f91eebe47aea2bf2c89babca21e503aacbc8998b6666998147aec1bab90522ceea5ba400d79f2bc68358eb84a513703d4b54667371e922e27c485e48c3a765f7a9532fd63d0dc2d8b6ff831bd63c2223d2ec434fd47a73b13c04a6e6b26116bb9a9807cb27c08197c7f20ae631c989ecd6e2a8770a953c8c2b66140b11dcc599528c94563461d8823ad2fb7a443627f6ebfa1e8f80b3cdb1bedf2e3c7e74f30f55c38e1dcf3c48368414dd4e8a2c7cd076751e0fd370a7f06af26dd134c41f8c08bf2d7874ea4103382a18e97ff70917faf61f6e7f366b96b4224b8ff144abae0fe22afcb1e663a6cb9546c192304d3c0dffab31e08f89332ef15fbf206137d3cfdeef20f2ab106fb2e8df7d6d62c99b13f439e0a3e671444fe212f54eb4449bccf7e27bd3b2e7ec82975b537df90ed3a17653f145c5b4487b76fdb8c8b852648befbd63c1984a9bcf23430a208d7d643ae871ea22c7e2ce462288704ae7c1dc8108d88f48c5c8fbdd0f1f08017aa5db44dd2c41e7475d3434673bc231cd435240e5bc34d5c5e39b40dd57b3ad5b088753c6eb8eefdeb428dac7900519c337744008e12af5031ae8aef075b360a92616fc382827c8f867fa8dc62def6f842e9112e4dfa82327ef625bfaf18de7ef7f0882a36ab2ef2ee947e1e55db7af6a89571dfc1052ec8ec1a6fc4f73899f8883ca9b8b3ba6eedcc88f6ba7a81465f0d834d5d12ba1bdb24214f480545ce42ed4dbbb62137a349c864f7f7fa57c0fa1bba8eee67a1b132cd13ac9101c7e722cd2ba46ca8aa34ce892f6b1ffde5519178421adbe843599790f970e814444b61d0df4e226e9c8b44b8f13978aab461eacc23db6cbf2779d015da8295664662c79f709f209e950f73fcb3494b2a4b59cfc065b8e811d67ba603becae01e54941be2e681ad5e1b2823fe7c83dfa5329f06fb11989909d6c5e103ad301164f749274049db13d6b83e1b6654cf7e42f29d57262f65c5ccb1c149bcb09c6f62b5e9b162a2949830f3b924db43156e2912ba8ce9c506b585eed5a5d7cef6433d19dc82f0f896859154020605523df8831a5d6bebdd63b15a166bbffb1026d520a88a629154c82223647f898d882f647893f0bed57e640073b0ea5dd17c146d31ec5c18edbd12b60eaa99741beed3fa2f04da4b4eb1f1ecf944ba48001da953986cb86ead3b5c8b7aafb891568a1102d1f583dbff7df2bb145b434831f8cbce7eb0072a79d68ee78ef945a6e766d2c385ee533590ea4fb6eb7cec250c1763280b41b215f89791137212a67c758afc867478b223a800f025a72f1fa638815aa766a61ff7d3854b574f8245dba9fc7993c51a086befc8bd506ffc44945e3e9694b867b898b2a9a5fa4dcf898b2bc62f32a15dbdd60f499f7e6c6cc1b725570137280de4bf3b0987469383d953a2f008ab30c8392cad8b7cf9c606ffd736d382d7df1f0a3619afda814a259ffcb780eb4599e3e43574973e07a45266bc38ba00bd042594c3f2a384f4993e424f1180bf49053627b80974cbf12ed95f2dd4146532c0a7e92f6feb6fe7a9552a1159f76eff9b4a687f172a0dff8e2250f4b2ea987c3b2e7141379181a1a1f2bf0d36eedfaf84a6105044c2ea78e9b6a2d7794381e39c4194c3f39da46caa9e680a516cfaa1e7d288f438434ca66a1bbe9fd22808b10c69ba7b4a15bf8eecdf90cf5179a71ded5737339cb51acf36db0a1464a0152cb22d4b33e503ba508e409c25df1dce6abebc84d418213c3c787ef0fdd8b3909eb715afb16b6e7dfab946f5d4a36157d18189d9a1538e9935568ad723d569614d42a94ebe855fefd4947b03a4444c2a9a5f479d60f6041b01f889274f04cb70827c729121dbddfa2648662e5d6be7300d7f7d37daa88ba9ea870247470ce0a5848cf7dea414f08537fc8fdfc6bf394f710ab311d7122c2b362b7ea1d397b1e99d9bc09e0dd8a07950d97f7ca8e94a70102771921fdcee8a2e0b849cbd4a442213d1563a25d1f6bcb907bd6fcb90227c30ff402279addaac1a509ca0cccfa33a2f554018b4a5f937baadd11ef75dca591ab9a729ae2df67a42214e15c7ced617395006a282fcb2d29bf344f3f4f749f1167e2f0f87054cdceda7236477eee3a379e9313f567f2776a3029d548908a72a6b765e3dc9dde4bb650aa2f3a4d8d4c436494856f9d562091b0264ab8035ecee63c8bf193f5cc4fdf071542b1534b164ba97d35134a76b744b1b225f9f282124449dd70cb02bf68cd704bf7494a9806a4bfc5b97cd9d48a07b735dd8af894eb4571c307fe3f2824e62ed6d37e7df4bbe32a067908c5e0374f335a07e77ff7985e46e51d8a1586e2dd851e6dad77f1948b7aa7fa43b93a4d7fa8770b9c133ac8133bac281b205c410835bb0c72c31f3f021432b3ba0e331b3da9157f153cdee8f8b290ce0dea28cdea9305564ae9ce09eba92f4bd85f7b4efd97cdc8ef674489736e3b65fedd7cc8193fb5d1b2569e83ac8c06192b0763473407088f872d0c0827a0f4864a64b8ee089e24e53583f13ac94f4fb22e909ba275794e1978f8a6136a0d54a59d2a7d9e3d20db27310c76adc665748d6fa584df3651171d4154a309cef5e45a53992b672b8a510e515a9f4b28611d214aa0af5bfb40fc015cbb7379cb1d2c1b0a3b52b7581d2f1102f8cb9173b492145c0c8ba738ab554c37a7a7d1f2c5944e2d8b743d476bbdc5c2618c2f1ce27bbd20539a5f7302bb747ea3b0a0baa1958a39f420377df895931c1f6162a87d42a214106bd33ee9a7107e3a1e74a713d845bc2fb75470463f0f7c9cebda8ae78f69c3bd60b0f0b2a086d2d541bc2c9eb5172078ca02a2c722a160747c0558b3aa5aabd529574d10206e08ffdae5dfc4b4550379d8c09a1de8ef6400a26176643c1b28d226548864bf3c7d344a9015187ea5d1ad542cda9cea5003fbff7d886bbd21e74ed8375732c558cbfd013980fc4c80277ddc95c8d6af59acb0d3c7f34c95e553a5bf5e1e0ceb6961c4af4097f2d65a5175c29a095dc082dab9cfcf4b895efbfa715c57614589d4db159543ce9e74bb0c3fb6b8008496622a8153f1f5a480cc483c3fb1a59f3931948a63c19951d0289416296e330dc95df8a200de8620a3ecc950d9db7f5c71f62a7d8b388caf5109a5938b2b353ba1fce19646f3717020b3fa699b53431fbc9909798c271d197ff49d526c8d7ba0e8c561c8a6cf4c259fe857e124a7955b8190be08e70bcf22c57007cd3de37adfe62de5d390d07ab369c06e51e656ea925983c4a61c55175dc9e2615e8ffbb73b22bd0a21a59581ac26f2ba3650dfb756bcd899dbac918a2ce5e22690c304b56536e93b4d558cf5725fe5a7f904a0800b1405ba04085fac12b1e5e40e87bcf9c09b48f5b111255a986d1fc4347247d93207a1b1c9c00dd191a67416123e72f8efb842c5e7690d05a0d717ab531a44276e0022fda7542abf3c4c03396667c53745266d287add92ab0e4653a9ef7d13ff11860019f74544a9751b19ca55943239635e2e99c5ef549f43035a6c541b45d4cf01df736413da44de8c2e557a343883bcd81d96631ed176d1c6a25f4b65382ce91c07b6683059f5db17c7474ed8568ad42ca0aadccc87a65cd8b1ef1feb897c023d1f4f6e2b5250ed566b2c4de0fad32bb46e539da8e5c226e20fb85c2eb856acdd9caaf08541daa7c09070e1feb3d13607bd0d10147a4ed25b12378aaf23214b85f64599aea6e77cdebdc1c572102985af3343fe9fc3a0e1ac7fe925dd788060ceb2cbc438002bef19697b42fb7e208d1367a493bb506cd77e9f49b84a26e87f005899fa91cc0c61092a29f4fb7c7adecca08b89f78ef7261a06d5ac659cbe18c36e3cb74c990d9506563a55e2898cdd4394853bc4fe0440273d198cc06895a0905a3094d8c5a3ddc99448d05133db1b10ba0e43b41be8c82ea881d3db08f3b8ffb2f1fdc6f063bdab6ab21eb7f9da1aac67a31c3567293098dfab1c260c5cc459ef0d5c8797d1b73420227b974a2e4e7f43d04fd97e49ebee5901c031d135454794ef5b9b2a525cec7b06816fb33c4911c5123910bfcf8c979b025a7ef611de411b245592367a114cc1dacab1a3887d0c71e5626bba3e853d1c39657de976d1cf0828f4dd3acd66cdab1bb1fdb9a76cb7c0c6764adbfb584763235baf39d8d249d289940ca5a0dff78d45c1b463fd9abc3831cf5eb39a883ef64cb79355bc525a00a2cd8115a8ef42eee59476210f89724eb3f7e7dfa0979c4c01f3badba5c4782920fbdaf95a1748467784a37f51ab828ac96aa69e9208d7eb0fba961a09cb1ca260c98acf28ea703a782cdcdd78936562eea1eb9ed34e8a49a256a5bf6cb8c0030e91111589cb432163e772d9c8b3837d9028575f08eb1bee86627a3a532ffac176fcfe5b114c4991d76f15e2e69e65116a885a3d97711550186883f9419335743667b30e43efec122f0e268736b692f4ba2c64d903530f04d4d3439aac74f881c96bcfbd9628b318f75f35455d8e956e2b9f17afc1035173483d499d1867cc80ac63b4d78c89271cacdcc29bbfa8d5041b5ae33075248521eef0f65f09ce29e75c0a02ea9b83c0a3dc014ef8c177ea3d25ea47f9841932a735a8ea7ee52a892c54a92a65479b1834e1673aeb278e4dafb7c7c6698273b269b8cf966b5f0f72c622db9be615418646796936f1465e67a26d6def0ed4a6bcfff4df7ab2cbef6f5b431be7db8919936ef0a19399a25ac0dba35702680f349ab0565307d3b04ce74241d49ec41785e804e38b0152c025f1b1f61dd0f3969fd44169b4de4ca09a63118bb0111e5508ccaebe8fe0ab242272abc22cbb300f6b0229bb8f6e8c116a7b5f9d18ff68a634e9d30e4ab20142e2bc4fb40e31bbee08acbfa85d2920873f88730289aa319f7ca7f84f3605f3a0e94704382cc4e5970b2c99dc78ae98868c3302388cb1e7b5528fb4fdcc5d00d2a89b7fdb12e54bbee51a4ea49c5f5273d2d363cb8ca7196c59196fa68817a73c9331f8f95b336caa28ee24bd22cbfce396023e2823ea4548e2ddaeb5f3d665535ba3262f601fb70d3920d2729674e66a5847e7cacd0bd9cfa234e8b89a09a9cb44578de9cc0ab94cb84ace5171dabd5c9c0d074ff27c6554f9c7a42ad53202e8ffc786b4f994f1ed08d48ef64f6dc05ed3da03143ecc669d6bfe77995fd00f50e08ba72d633eef52bd568acd89cebdc5923761b40c6c6bfd7b51c96074740d87891c659fa389003248394843ab4df445499da9abd5ecd3f9aa5a103ccd8eabe17be258a834d3d2f02c055df54e9c12428c75516845be3d166b8ff26ac5a059131b85e6b391cfe610fb33125ece098631bd66ef75b66105d8515bd696e729a380fa7f966e34dda819185b2becb446ceb76eeaea50b275dcb3de66333dccab09bf9b27ee24b88da78d15d6013b9bb46a381369c895c45d103d7507aebbc0a4fa2360176473774052c1764c28a7eed2d7383d7c009156975ee9a7d89fbd7da7f3510bd69fc70b96386abc1608ce1842943c6f9a28e003a4f72d09518caf5e0493ccd0edd6bbe00fc6ed49dc282ab2542fb90c2cb81e3616a78bfbfafc0dec7b49fb61b5cfbe8f1d9cddb2071d2a47a81842a5dc2488785cbe9b124d7455935c946130d6d14b83301890871f4e6942bedc4dcf00f4db44f7cabecec17c12fd38f192c0b991ef46f7c8ca3b9d32443e08ea4eda43bf6316684a8b93ef89c28480e01483e6681654c53bcf41f97f679406d0ca7a0cdadc874ebc65f42013e0c3c4ee4b1ce5ea6d3738d0343ccc7c3fdf391e5500d4dd93f1eb9ef2822ba10a35958acade209f3068b3248d7e8ebf298a20315311243e15f0ef70a5a03ab78b544333f85a2eed1c53d4b73f99a8bed12f5c98692d8382ff0ecadff3e105ddf09a8e787813795a9d931de6bf10a301b3393ed1ebb86b42aba5fe1b61c6e57ae682b7d6ae8c986e10b0ef61a076161e4c22576c7f3453d3a84109d163c48214b9a75fcd2047f4ae3217c986783c7a7b089526d68833d5dc718a7e809e5c44420672f6ca61b826815e325ce3aac6389e74ec3d9e9b3959b393ccbcb77600a47939701d5ce76fa68e11bae9f7bcb5e8ff1da1fc231cb767ff9b9244c46f643b20ef19240315d0ed3ae8fc2141228df4137f50f312a1307926d575b765fec970ef83e8bb4b917e62fe3080733e80b0f281f663b2cbbd3715bfedd184eaa8d2de1b946933a4deeab07ea4e2506e3bc16cb12f74abecc52db63141502de0f202eb6b9d153d9d52885e02a29c595ec821bb2796ee5ec46d96e3018c5c22d77ecc1125fa773993a0e9b440b618fe6eca74666ba94b3c00fb0514c70b60043c83a0f7f158f9a8262e816baf5bd2a04c971c06e3f315d41101fad3f86b06329ec5240844353709d36fe1dcb50073ff46d29b1526e0d8a77316eaa8fc17b93e6c97c7baa4fb99ff19e97d9fd840575bfbe16419bb1efe36b5be46fc688de39824900e877a28acc8683fd72dbf980756ea68296d06fa10f2474ca256b45a2fd065325b075a48da165cb760fea183fe6090cb3db790fe9b7aa6568f3075f8f8679ce35fb2cbd8cc695604bd8b4470c7196d7f2361ffb908306170602213e6d7de3a476f023564de31e28c4f6c0efadbe1ff187cf499a5e1a3f71ec7a414a04894cbc31b8e2d59a9f090d28919679eb74ab41bacf7f541a255d5a6282f0eb1c53bdfead7af1a439a25df6c1d0bf4b8e3b43afd35e49918e4b69bcaf42b4897c823d52345fd929f29522cad5dcc2cf5ebdee2319a330b980356a7e1ce3188cedbfd5a00c8f21ce8f206173addd276c239fb485d5c7bb34b98b6888f18da15c37b28cd07e3151fad6ea21d891fa7789a48c9dbd50f1736b01f46cc27667d96122026acad26ef114919c6ae1c85b3990aa2ab2b4cf4adec41f187c14f29a470376587776506d8a8686dd44769c29f5e8fd21fa509dfa86a8dda0a366af4d73abfa5bbcbd4057a3b77e56b87f538c33f9651a7d7a0128f3800134e6a0f3a9e6bf77b44085e953c50f40afcde436ab7c2baabd441b42fdabb2547b4faa07d627a9b50a0bb8948a77f6968f8c8d8daf57e693b15619a9a038a89e1ee56c33fbbecf7c06263c892341d4469efb63a0bf4d92e99fbc5e7e3922c8a7c4b0cebe41349b945098fb1047ab111985254cb604e597742e7cd009f2ef7c3616b9b9f2cf1073c48f69db711e3e15d7ec0f3119a6a75dfc07a05991f1292b15bc071315cedac1d56ba2c6f3cf8149487ac3fb0fcc1b4d49d12fe0605e573c0a5da2c670651bec908e4aa3df83fd1333d84890e19ecacd2235324cbc620219dea193b84bbd595cba9d695a7d6138dc62aea6dad7453b4651dbb087ee25b1295932e1d3eefd1f791e4308d21592bc0d9ba3e5c038e9f6219c6ab1783dceecd442b594fda04ef2ab83262df5ef3d110ca75f0e294eb184c4cc8b3e07f3853c8263d5b520aad85c5ab0eee3aa538bbd434e8b29ff5fc66c99a9e55d1c5774279b82384b2354c2e4ee6e442fd988a44a1857cf3c29b4503606fa21199fb0c0378768865eeee63513cf85d01b6ad7af40f58cd2518f95766b7589e677784794f4afdd68f769a8586f65bd39ae4688d42541b33d6f194960924d1cdd81906416e579a8851c7ce2548219de27f053e33d836495b79faf1a3733f67cad3ecd4e6e924e9387d80fdb50d451af44ea7a2f0fe1c6fae9e8394e23d6d871ffb6184fc583976413300adc75eb76f935a3a4b675c8cfaa7a529f2e4b045bc27bf25aad4341bae4d42e552dea51f184a523b7be95bfe76c13e5c902d844e739c8f979b10f5321db6fd9d816d88e28183a739d90974e76095caa9f12f11fe49c8fd35fa3524132118f397cdf6728857d9c9a3c74a4fde44afca80aa5bf1cbab47789f2cb3394574dda5727cfbea96f7a74a07eb1e45599f49ce7f0056ac3d14929221c70dbd3f759f83ac22f06994ed96a8e49917eddfdd2e3703b78199c91234ca6c3dc718679fb92ea3647667e8960256b875a9a1d78ab7a4ad147f4306309891ed1551e3547fc5070695f07e28ad84e3f1f55629e7346087d9cba2406adc488912d240a69c823d9d345bf114cb8088c13f9cafce7546c36128218d1a6d81df007bf915ca9643ad61bb1afab457bba88eefd01908185e5ac106dab22994dd96a886fe33d7e8307ee519476fd543bb4ead8134147f26c79117f44b9406673c39d1d2564d46f8d54ca7cd85d300160bf59d923d448c473f00e68ef8b5395b1a232cdc95a4a04eae711a464ac6cd452a37dfa1500bc7e01114ad2556982af713dd0a1430ec6c503886cd120abd8567a28ff42d10ecba97da56ec5609af53b1a5d209f7bc8713b3e01830cf4a19d0e3e1687ba3f469ccc51742149f768d5c114cac9d15ad072ed0419fd5cc8d8e2840734bc6848ef586fe4460c6702194ac9c64c743fc66df263be9783ca8496d0413e4b4756d252261b9ee3d6266af67bdc9aabc9f0a8e81926d244bc5d10248fcc4923cf8cc6b82f56e713288f15479181f7ae6fece9890ebdaae8511d54ca46ad9284fd100d679bab279daaa8ec54b341451f0f3b6f98fab0ac4be91239cf1e6d7f3679ec8da8919fc64a037bd7640aa3edc450e6245d048842342d45a57d3e937a00ea2830c239bc2ce2dc10bfc1be2f5565dbf3ef2055ccd36cc4bd811acea7eaacf9caddffbc89c22ddc6d8ab1f66de6cc576db7281404c6bc5882b6eff83237004ddc7ca5428eeef2ac9c227ddae608c06d5966be6ab985ea8e9d2b44e2bbc8c58f65f4fdf25419fbf3a56d6d93212408c5c1e32a7f7177be1015c761b4ca07c2666e2f4ff562ac0e5a8e55c849a6a06d06ac16b47ab7040286f2748d97e75bc17bfe14e373400df48961c1d823fee6b7d923e7a48410947c973d1911b39b2c88751d8b009377a675272698e34ab05caee52d3e41c4068ff5ecfd9d352f6de3e1fdd37cef7d8ede58dce3c432e6446c19d3d203d463205e362d3aea4133e6e692bb29cff95a0d1c6752a22c0d1e437dc24a1a1ea588e7670401fce77de98c9e6356266c64527dca682e6ab8bb1a34f66ff30e77fc5ce1132a104c7c3177ea731e77d33c788c654f241b445086039f41e976b5f7210798ca6e033191a40585ce89c536257f314d1363bf36dcb4010cc5f87a18845bb094f59a82b40e1fbce7156ee95a10bf68bd7eecc24b448e3b04ea63a73d07f47f5bfa7434dcdbeac397b2938a44e6815a3ef889cd88705cda0e18f4a62e69329d7743c5c2b1e14d431d0bc051fe8d0d2e57e90088f7496605b3b7711ff3905e32703654d33b069064028abfe58fefab0d91b91a9a9fb5f3e57a2fa3b99266bf65cc3deb108333fa4dcd9557f0fff3a31f73d09fac889d4da2ebe9521d15d29f5f15bf50219051d42706964f1756803c8b85965765bbeaba638e4b46f383bb4448d2244cad6a46661935f470049d80c07a4f740a6e3f828350ecbe46e2e50bf7478cd3a75c1afcf84ce317825fdcda75135ad07f6e1c4ff0928cab1c9242a90084ca3629d8a759d2e897674dcf1976a47f2d137f0e5b384851f6788eaca27da72814b49ac619473c14da4c98fd5e3c94e550a6d2f60324d5b4b38f65d80e6f345bf2b5c1d179ad7df8332e2d91b2148f6e4cef40cd1cfddde44a5668bd8c67ee44eda1679fce72debd2a75d2321ee6db42a858913bafaaa90943376104274d1f0c8ce154d82080a78b47895088a89ac188ec488ceac213814a27981654e4090dda58db502577be208913d26e3c5b188969a127fa7f6020accf7de35156cd8300d7d8f8232edc1490e015b9f6f63c487b0c4e5ca3a58eb974c1cd7fd8b2e9a4422b94a0949a566a41b7d5a4ae5d5512df9a7b514f0256c61f48a0d4730f40521afd143c6d11eea87937dcfc601aad5ffc3ab06dc63ebf2ff68b7c4aec15db76cf75e132743dabb78188b12ad2d54c151b157618cf02d1dc41b3ec490a6dc1f9aabd82ec72c3957da1d1dd94cd353b1e845254ba34f695b548e7753994bffac1f3fa7fd02e4eb4e3203be6a418e281607f1ad3bbbbc112a35250a18253b28fb8f2576148728411d148ed56c17d8526c5549579842d0b518ca915f78c0fef87c5eefaaebb040db3305f0fb452c2c633344aead17b517e585a9360ffc08f1eeacf310bf191ad92a2e6aecb89c1b04caf94aa426009f1c031f3595642849de6c1c001b3af3135bbe7dd7d475c750fc0a2cfbcc4b096d379e44143214741ffef137fa7197205642f89fb14abb5d6a7c914ccc899488bc052772a98e996607ee2e8f46b67c1740297902aba201c4c3f100e7316e8b04e80f2f498a2d5b847e267480794c225e6d69a0551b8ce1a3fa13c97aceeda7149db036272a70e3460f3253ca06c5425c3a9e1ef5856dc361793f6b85f979712e3992acaa0f0bc921279c5cba73945497443135626dc72f93cdee678745a461b8381113309c5055bc43beefe0444bd195f6cd942a592baea174ab3dfd37f0f14935d60a5976d1416e00249dc9fd5e31eedecdbbcbcc0d9910e9e06f5654e1b867af3bf2931320f4bcd967e6d6033dfdf868ac0cb53adfa768aa486c3100e92f9a00bd4c5bf5a1f83f3bf34b930a8dae4930f317853a24322f422dc50bd099cf36d6f4a832a +MD = 98b687988401ca495a0e77a797387a7951187658978f7db40d696bc0 + +Len = 68344 +Msg = 223a2735399866aa89db4554eec09a89f9e49f64e5e48e0dcdc36e3a1d8c2cf64738eda2b7d1a33908d8ded878e5e67d998d060e4a882a9ee613adedbb946c2dbe7d1f0c7c72e9ee54ae2d7ae4a3a459c1e0ac3a6b38e31a8021f5c22f5ab291f0d1647b72c35f52d525d9441a43fca6d8a73af0303ce10802b3efc3612627a945fb64f8800c2eecf4048b3e020c17ea46a8573681db4bf0d69242f73a40f2fd26c5c88a8e947d441715ea6f85481db072acac16465f495a63869766a0ef3d15f9f5383a85a475e3a81e9fdf893d367dc67ae197670e05cf115796197c7c2d7a27545b0f4b843e500de85196f73588dba9dc9dc1cc31a4d648cce617b72fecb319aada11c97cff13b03ba99db8763e518398889d5e0f51f870ae30683750a24836bf5c48e7d4e0b5f7df4ffbb2487e68bd774b3203f232bcf1c51b15e62776c1e55a8abd8ed30abd4c9beab8cff570a6bd418e89a4206faa34d95025abfc91a790450c77a4c2a5b3163822ddf6c43e96ecbef8a82ae2314a9fb276a06d161b829e46897e12e9d820bc7fa1700ffc0dbdb2b532997b80a0259b17368f16be3bd87726aadbc190cc8ba8350c7c01e608a578f0e4648142e3c291d238f98d3c193383ac169598ffa97c41250e06b6ca54d5a435b50f227023a9e7a923e6bad8de1a29a275b47e7d967bef164d1815f01cd5a04d4da4485187630765a05e85dab216d4ce71415d54bb111acf71b9069f862ed200552ada2e387757ce566ad689bcaee9fab0421cca41c52a1923f27120ba67a41575aac04f5d6d41abee11952e256ad1ecdac2a328502087bc0bca3ebce1087d56542be2fc1fce2bc60f5caa1114d2f46d98c6dab60fa99a80d04956b82399c4899bb5287da6217fe56251fd7ab26fba449258a9bba7e8c92d1a779f5fa7a3e377f1507a1919eea4d18efb77b127c88c3b6f7ff88140657d8a935d02f896ae41e8ff05c01aa0be02523c5ffefd9a65d018d744af4e00a91f60e10267ca174046a46ddbe2c66517012f14877ba833cff0a474adb66b123b1577ac6eb71e53e35a72e2dbc8668d840932bd7ad7f81c8d52a7ebc5f5209ca3c9979daad83c721ee51b060c5a41438a8221e040f8367a2760e9e79154b4c76aa1885bbdb46c9b794f68827681a1adb3d4c524e2c8a9782680310e1bbc71ba1707118faf32f6f67d001efe2123ccf38667e632672e9b3b111c48086a139d9e3262fce1893921acb161082116290b3e8ba44cb1d71152ee709bf77e8643819a431a0ff852b337e59ed8ed945c7ca6b64bf1be4a3a5b17b7cc650418783265d7d397137d12877ec8cace94fffb02e5824db705a599f332beabe2377d47ca907c6940cf17d19d3f7ebfacc608fca510cb195fe969fbc1eb2c987a5a56fbf14cb28e7f0d6f98ddc12e05d84b5a664c6eb8384f323f69ad8a291895334a9d91dfa1c9bb932d6e2f4e0122bceb9b41df487231f1a8ceea9f56dcb59b8c0233919270a25d2af85c7b2c1fa0be6e749545e6208cac13bf867f986ef6f42b25c8d9ad48a1cb9a7869a9a4af07489b8c6b6890ebd2e73ab9453599076308d85c615178504f6eab569da1fedaddc13b8cca2f8efb8a0ce66530a99ecd853f5d4f08e13bb133ae253a004b82c7ac91161bbb8227773c82df6a4ec4f2ebe30281a5c4713d92d6f4cfcb9b8f789ffb1ff4e24549a58771b1ed72a86cdc8706b70b079ee9c71cbea672b27556278953d59d88706c4e55af01d822448aa3ca74c8c41c9c312176752ed6979686d8ae3b1ad8b644d46b0681da67242c0790dbb79b748dc93193ca83f2c3200709d3353b566f14ca6743c56ca4642068c9ebe2579ae3012ad2653d6e5c01f8cfc56047dbf22849090e20b8fac795bdfebafc09da2bd821c9fadef9c0d257c5f6a4c70ca454ccfe09b24807b2abc2a4f8c10a76cab81c95ad92472600be8f30858d4fab1de523dad33904db1cb8b57d5dc55f51aea87804de83e8ebb7876fe08367414dcf0df4866e8d9c5cc15735ef36b041c30f63b11665b309716c95c07ef81ce519403509a9e29458b128ee09a28a69f9f474519274490cf2e0a75049b1ed938338fac328ec38388003dae7fa3f61d8ce0b65dae2c69275eb5ff120d42268b463d185211af7775f5b795da8d06ec4e50a306a6668b348d53b16d06d27787467cd0d67b5a671a7f3323c3b9b53d6b978f38d0c5dede474162b2ece9f0c5c169408142ae99603d1db4d73fb264a204b79d347d22739011e1f03cf731e487658235d0d5524b154fcfff44726b37ff37fd0f089452c14b14cd80b204652a66d41fc142071cdbe0d30476fe043a9b8f85f659379ebd4469c08298a4acfa4edead9087577054e86d5759b0565da70bed7f220033f4f88966b59faca74967ae494292dc737990ed155d4e300fe7470593740ea8a04f6aecec6483311c7243d55143854548bb67566345407a6d5981050c052a96ef06ab0b454dbbca86b005606110f666299e3eb0f1bfeef400fcebb6d1b2f47f82a32f411be1c7dd787b22bbf34b4493a89a8d892b2d88415d79ed676f0dfaa70dbd6e4acab135fe544c3264a2531e724848da4b8a0edac6f5391ca34e66bbc1e2adee64fc4c7481cc9baae6e8b8e2667b21bb7498e425094ab2eff6fa6da634940d364c0b14021c23f1f2af20ed1f04d3ad97a0d23e159cd08fdddefd834893b443dc5c81986d320cd7b049f57042c1c444f53cc08d1ad629287cd7b2382153a5fa2712fa5a2457e9c54a33d0e2ec21dfa06ab4de41a369b705335dd2fcbef8fb98cd0bdfc9b5e24d3356f94db5899988285eb5960c5dac0cbea7edba517ff8279824a3ac67908599ba3d06b64899bd5045479b824d88318cad2113e2d6e2d5ac80d476dad442a661c282e8b54c9af1ba9fcbf32d75e18ec969554cd6ed96161cdb42f1f5705ab937d4bf1bd5120bdb49804238e215c818456bab152115f83ddb1ff6a186cc47528e79581c70397aee6faf40f96acdca62833ca8f93bd097b179b76602095876f6d818c4771143568faf755ea101de56f20554c565a1bde3157b4a279ff7a5881aa74baa9852903d438b6ae1cc51f80c4b3e3c86d6dd3e68de5230a1e7cc23e9326e7a710c9ed07dae760870d7d58b48d2b05c73e948c2978081136b56115428d2a03d9e507054b63501c6825007089b2cee5d03099eeb0d809a6afa8741d6a57feefda8e051cd755bc13dacc1510071be5a86bab43a382973009fc5d7e7fc0daead432758cd8b19a716d646a86e037b0b77920175950a79bc563a53e46e64cfc36da670063e1e318b8518f671987205a8e7e78dda4a028ce10db33b196f815a62928039954e075b9d8e7e22b97aecaffb0dffa63ec380c16599a2d20345d23c10ce78ea7257d6d631b58e51ec7fc3e8866c52f12f8c35b5de7c81bf2e9be7e33273e8e929f5fd500c7cc20a8731a83def8589d5292e71d8a038c858f7dc32fe6c2568dc18a2fb477256a1c3261afa1e7aebfce8c804c5b85f50ef45fb8133dc02557129eae9413b07d5b60225a64a18dd0234a268b9b1d360577f0ca6257b0ab9868a690d237f99317c774e226e18ab7a5ab978a7b7c69857befff384236908e62b1d0ffc0bf6e083ad5e1d88dcd644d76803f1e1896495a9e9dab112159e650cc5b18533ed57bf72fad2e6e57d038368bc9ca4c2a92c49db7aa7bbdc767b9db1e8e06f5152126483f78e30b4b930d5c2cafbe7b7817e2360e3df7a4fc091216a071234b0d4a79e3af5e891633beeba6a15aa512cbceac0deb7fa82e88e7f8e9992df6beedf97cb0ca86a7f9d5f9dafc31f1067beb5f290a969815c432a8733c53e907b77fd53698d719c51bf9eae346269c6a1da071621656afc7ccc3f58bf714cedf9c8987af811d3e6be4693c0d6cc6855860b2ac5d1775ec44b004754903250405d6d4b6ef55e51e22bcec9561575ad158ace8ba24f7397816d6bad1b446ceb201ce280bfffa77e0710b499ee5ed29abf2690b40bf9ceb7bc4a8b0b0d5a956015ceb4c2ee65a1baee13949fea3177d39afffe3e934f0d21cd78cadbbb21407189d940ac6ac5b19adf9aeb45da3be9ca316d7385a8dd93884d6ec789a557027204c33287b5ae7b80741d35265ecc8cf12b057d23ed24163db492fdaf4c6a3ff40f22f6ff7f6e542e4410eeabc851f5eae03e8793b090f9c48b9bd9b710b97d7a116f0a7df8b3cfd6b82c8460a79a9919e99f3f4f93c2b2bf3adfe83ba2e32f76a40de98de1ed632c58b6a2cf8cd50b00bfade0c21727c5805ad5a5977375ea6c4f861099ab99a2819e45a652d8bfa021cac12895bb4ec6ba64139e74f2c022dd7c7e1c4bb637029901602b952bb91d0fa39f8334e0962abfdf203f3eb1706d4ca34c68fea25407b52a8c9ef0f63fc62cc29f7d1a379c76233472046f3ff51e3c5c87833cf06f267862216d10b8d2300bb02762d020c01d66fc9f8a80eedcda2f2095f78110e6f35550d5325ef40eef2ef4edf0d11cbf94fdafef3e1e4e861597781e32558459d2de6efe7b46285457f8f94993a7bbd97179c707ab81ef8f54f7cb86d044eb4659762533a460d6310f1c35d0c7ce6eac475dca7f3f6642572cd2a3563db9962afbaf0beb4a398e2378eb530a09afb5b66b0c22ac8635d78be1ba8802f73e15764dfb9babd92aa0aa29f8a95bd5e6117661178815fc7b2f8c2811f213794cf9c6a4ee4cebddcebe43a6b6d14cb8ec026ade0233422ea0bae6647b7a0e5050a38ab4f9a831c490577e53c843632f3c2912265eecb77940ea093b49786a0903b330e2a035f42a19dcb8c58f7825a550d5face7ffcfc88c66d82f11e85bcffb0a967a2646ec97ac5ee91808ef81ac7c499835b07ec87c9bb95e23a6d1a5dc0f1e68d98c8cb28432edd86f9494b98e2f1f45a406943cfb89b03858bb7bee2e9420b112a4fc386ffaf5a07b440db46938366de13269b5ad1ef270b5980ebd2d52b7790db6bf06c1cd1c4a226083faa65d3818d37b24bafa21280e2185b19b41118cc9b20afca4e3730add4e2f1d11ab67ca4e642bedd44a5cf91886c98c0fd29847a8e9e8dc9b3bb46861e6fa0483e21d96187b89ee8905950e98cbadc8a148b08f1f9a9787713358dedfd2095fd8b149447d00dc4c6493950e95d8798dd90b210c35ad6024b13226135dfaa4579682b17c86dc6d32ea5c24a2189575024083b367f20a8bdbe09fe7b0e646131447bc1ee53af584c6a5c9097228eae8505d192d485e9960d688e4635c7f9e9dbd72c75927a13468301c400e25cdbf1c9eb83359568243263a306862c032ea8c7aa00b27ebc3816399d72af9630ffc5715da3bfd3a65ee27326193ac840612267558f053d9a9c5bb295ff093d6f789e2dd4a97e29c0f83a9e3a2cd084f04feb4d322dea3985ae6b9073bf8a4248c4e051d90b1d02289ebf5787b7e40c932967dbf863de1d1decea55cf3acf4f5d73307fe35ef8f77da0c5317740e1a9b9ac3cb5f0d75d32b3e63c74f10734af2de2132a7c0bbe6410ad00ae916e65f6d446be4db3eee424f818f660919b470c2abfecc40b97c9e29221e6415e86cd7e63677115ca210f5e4af39ccb196d92c0e46b41ef3a9997fd629dda7c3730949af7ad09a0abf44b693d1493f700f49477eb52970e6177c51f127f71c1d3d257e70185cc70c20f04b04eda6086e0d6c89b902470a418b8cdc2125530b48d0293fd01605e08b4a7e7dde0e3a6fd217aab96835f4332d8d31e80f29d9bc6fb47b52777eb22caec75414c939ecbbc5b66ba132541a34d2a6d33c623e7176b86f857f0e584bf49e1ddcd86f78a4366e711707c069a055575ddaa1c36903834b8bae903daab78082d77c9175d24a26f6d016b4b97b6edee43bafdfdab4772951905d4bab7ee018837a9e068650c7d4845bd070c6936c17a3c7b8be4e26b5b1f204fc7a01dbad04c990a90048f80188419bae028fb88248ba895e06c8c7a6635571f2e3e6ca068b7ba1054763d4e18a54171634bbf298b85109097eefa03086a35ea74f0351d3f7c13319a380ec4f21e65771ccf34996b091d022ef6cb83c6403548385007bfc8ec4d04fdc474634961fe42893dec66478a1650f21e618b3439edaee4f844d6a99acff0eb95fec76312645a1512570ea58aa503adc06c67b6c9c78507337d1035fa149bf0371e6ff3a240246ce6f501198d41a09e874cc7e2724b611bac20eb02aca34c882243ab5f940a47ed1656cbf7f464ae60cd732a2bb5e1d99eccd0c5a404f4a92fe21f282b6a3b2b024afcedd5629683811d7fed172733450d1ffd4e7ea5913853f0f164db874b4468df47e5465a4fc67c01d3af2928b839f30016d41701016090c97acfe48dc33a7d5dc820af4e08fdbdf51eded64cd93ecd37adf4e1a9bdb872f61be7cae03b63bc411e4e94b05a8fb361b20aa3062eba0801333f83022ea656e1453b13210c56a2138acd8b23ad0318f21da103e72142400747025f9cfcc0d925874841c2ce89cb6fce0be70a78ee5b00e2309d52494df1b449ebfbec808e563d728ddb37ea83949028a85ce756a7d6288037d3ea0f538982cc6adc7352657a83677a4402f8ca9a3f5b11414ccec626d378352c20fbe9941d3eed75c3faeca2b2069c10b661d548c7b5e538ad39dfc99c5aa71a7997869dce22125c50e29a6b23b071d5c4ce1a3cb3c982a77b304b3aed781c23565aa0f3200647f49c91f52062f589e7b0962fc2ae267812593aaf073180e2db69cdcf50bd6c1cd32981638efa5642dafc428c86f12d340da9c1519b12d5b9b706597822f0b3ff7c6a498bf344534b342a5b9706376e54fdff6cf9830c170f2ace9611e6548e6e54e152c4f9fb6cf167ad59f5aceb6a4967cc860d3b87a531cb24fc5317635bf8011135b50f6a13d40a07c62f0787a19fef83a4e3411000effcac048232b79d1ae59c5ab2a02ad8717fbc1889928694a6d9d76232102fca9853c64745d4abd25586c53a6468b83b485d5cd9bbca82b41ccb1a1660455162a954f62d0459ba8c16793e6d40a59cacc7174c823c3be6906047de6a044d0f59b164de3e444e8e3afc116a6bcdf332bd8c221d9a61533cb9ffb496b58493c4203f27c0e39c3f715f7503dbae62ee24edf622428ae1acef8169b5d58167b60a46b10250c562891e79ffa504ada5d2fdae938c5dec23a599973cb00d6634206c4da588f04c3dc7e01b1a9968021d6df78ff2c4c236bdd9a55bc727b0dc506f44958b2041f0948860a3444588242ffbdcf2726001e2f6b5bd5fb7a1624c62ff3dcee06ca85afd371ab31b3de78c54290886b0e2bf8994c62c037ca1943ee25cb25a23c2a5d3de4068bafde708b33061f4ad3cc13d82ee877bf794acc94c45044cb7e3c6ccf3ce50e53b6ad56e212b233be664900e778a8647ac8e2773cd01926778aeed805333d52aa4f08d7a7edb0948b2c6b3c4dfef2f0982c7a61669ae638d0cd3bb624aa54973980d73dff49670a5a2d1b0e31482fe2c2adfad338ab20437f4f094d572992a8a75302ce14b03f5dd37242bdbbdfc8039f544a15da8a300f2b1842e6c4395f4c9dd071d30ea9a0549d02c692154a231bd828536f75bf7c647d31ccc99361234ac3fe0c9315bdf2b961e591d56411aaf21431fb2931d36e0a1da1913eed2a466bc0e5bc584f729d52c62489ced3bdc44ffc782b8a354d6dc8b270778dfa1b30773d8d6768e75309e875c698c487d5d8fb3704ccdbaab5e068e4a668fde1bc4936e1fff60c03e59f4215d3a501abe150bf6edec465b79431b05d4c4bd7cb95fa6f5542528cccb2c52a4f5497cb65699361490cfd6d8570c769c26a0764df2fa9ec405e61306941e466cb50586bddf609a96f985d3e3cd40a5bbe0686e94611c0734b5c0d40021a65bf30cfcf293d0f1a618989ce1f0345624df72aafb127c3a5cd1e433d03c1c6aefd27d9e44caa3d2e4f3ee83757024d370815dd6a03abcec2c2601bd9c2cccc29e857777f1e4e07ad3d37bc7f2f6273f155c1289f26f9b97d19b9ecc8c54bb43d4769b088e551f5fff11c0d90ef4b3ff8faa31136633b0c409cd3bff454670751e4048de7eadb8f8c3394e451dfe43ab5bf62a3180296507211539b44b7474bcf85d1148575125ebdcd4748aa4656eb8e6ea6e32b4b340c7a41e489a035150b1ef3774f48cd21e9f885de41836ec8dbeccd19db58853dc8c2f42c90f018f6cca6f69f46193c2eb8a62501d7c49d639038a6619288fad90cb1f1d3b81ca61418cf55f100e108625430735713561c4f94d8bf2610a1f02e61af0282090d28977601da1485867ae444fc3889fc1f33b36f36e0115e8cb0674e24ede18ca9e5a76fa44bb1ddf2dadd10743b3e9a0829b7a7b8d3c9833282aa5c787b9748d9276a8a20716f110b707441ff461ff6f94885c6c85ff7877aad1f1114744d4586340b4fdd14f727bb83d25e041fd417dbd64254cd4b43734b7bf0f85ea0aa8c9656b04644fcf02ae85d1eefed8f0406941c19d72f60544e8f324296bfc75724f3d282f8bbf0031f7c44817d215e57c90e6230d95566d3202d1b4075a0b0fb1583f3a8ecabbad8105e81238f0854776a2ff0afe1a92567f10d7e0f1c67243f6830004aaa7d201604765c2bad0a3909f0e10dbf789264b9ca17a3da137eebcb24e04092bb97eb6604ac1cc15f8fd4b8640b02882478ed71b233d1c7e34bcd46517dfca6a663e36f17e80b0f2effee29cd95183170c38636b24952fe13389258f8ee7daef347cfda45126f3aa1c24f07336694e2e1dcf8b0d1416ca82bab01aa201b08d32bad784e9612916d4140bff89f68c1c501290a88170368edb30ee3e4d1ece83cd5fca77413d0b9ce94e206a41782e6ff571386668c778ef434c800ae13496313799c22f4c3352f85240eebb5a69c4abb6b0332f1398625e6364120aeef1ac37d9ff5b175af273abb792d38d0519f361fc65fd8d2251677ea3fe10b8f6c474ea4d06f1e9fdd8f239819a8b39f2271f253ef903eb15810ca29d91088f793b84db09372301b575633438ee525ca20fbc6806eff2d34db5d67cb8b36618f6b5607c97166ae912562afe5604e55f95325facecc136c06b5e396f7ddbb5cfefc07c615f1b361a84d9de2a5154a0dd3c4d8d5649033c5cdee8c9ed5580742ec4eb4d0bf9bc11109d9ee13ac374013007afaa06b42c9fe328f3fc98e8382da036a466fedf7f8855cd03c89214e9a30297d74a40a6b3ce0dc9fe45d4ae795eee857a3e8c88ec187483b718d2de0bf2cf6d62f266a92f433742662a3300aa644461db58677e782dd75217467f87717cf0e8c1271b23f59bfa12da3e369761fa6c3c56290228aa4508c8a2d5fa99a0ae11aa704cc0bfad34b0cba8e651cb366da0755944df30090a8357f84bd69d20029c130ef7e9d4ccaa15cd80b707247e5a8bbd8320610d0adad170661c85fa56170ac2ebad08fbca6873a8c024d93bc02da87532404a1826227db2aacc9b49d957e82a94d0a0ad3cfc64ee05b45a69a273612d0528ccf9f19dd28f04d088f42041becaa90743517ad263fdbfe9ed467bb860556a4e9c1ae3998a7622ccd191b170f92376b553912a86eb685d4a044ad269007ee0261a1372a200087326079b034211b5bc6f73d4c29685ae7c3951ff3cf1dc19f543e94c2533dda674508d889c51b301b89a06a4c96dad408b4c38cc220f4db7182c6c4d81eb7dd0b4e0f5e2f30c378819c99e89a598dcbf19073b4a180dffc6c74425900f255b27a36bb3229dfe29c94e72adebed849e8a83deebe1857a4cc9912f97bc337e001bce3557dff383f435c529a74407dd5d337a579d3af0e0cf5ff453550a8562171da3f24663aa5a416e2c633d4a9affb33a5ae5f1bef0bdf1ca6f33c0337b5ddabdb317216618cd7bc2d293b2381d581b0fb42e6bd5fb7e5ec970558baf8bddf57c7a085b5fc57a1de4565fb8c4e5930f3404858e2887ae50ad964ce9d74d6ee1ca776a76a936dca243360bb359aa2d0a47ca8fbb1f0bda92174f6e9d63269d1a2829a1d5daf361a35fe04c346ec18296bb84a185321e6f7d771a5f08abadc519260f432b7d71a59baae375ae8cd2302eefb16f6efa35f98d4d7582ae495993694496c2da094814e5a4ce3c942c42b25d84df4dfaefc8e54c1aef7e0094a06484f46ea553f6dd3c2bedfef597e599858cfb6cc19b8b6ddf246ff695b24618d4e6c5e56f4bdea787d8e6f434fc114d2647b3f86ed3458b33c0ad198e05b639512929a98504193d9477105c7f6367e411186ef0aa34a6b77f8b62c6bbad6d7855a6a0098b1f4f15ce80fa76395021e4e2695cf4083247693eff118ca2fbe45c7ef9c9b3f61fe8b6a271160ff73507c5f6d53e510d5e7016ee9649e9d893b35c299cf7073a786e96ccd1f3583d94621deac653b63e0be9570aeb7c5cc0e7430de1fab891dcab494c8a2e030d70f0c9431ac76d91fedcfb901059196400792bd834bdaed2613b113e86efd58e35dcb5dc2352cc52e4442f589b79a17dfbbbc6519e301a474caa5ee32f91db5900bab05f70f2f09762d40d1708d7b5292741baf08b0cbb7f137b8ae100be950c460d3133a0128ade1f0f1d61e4cdc4f4278d723b97add2d83a110dae96b093068a56c0ff2d4bfb756d47c8bfcbf6415d51117499209e20e1452d8fa24e2245d65239d8286509b31bc22097870adbcac358403aafc2480628b9036972b38e2e0a11f8ff3603d6522fd23c226e3dd8c1c481cc5cd60955f32d0a452386535edc006e469eae763c493001ccd1cbe187b6df820823a24222885cbd655653aa0ea057bb954ef838a618bad5852e2672631a82bd7657ab2948364646d67a6124384b8e7e5788b9c79e312ec1e7a0148cf57d5cb8a931470b217d683b3af8455e461e034b1fc459af9f330a5b56c00c7db95fabf823790c8468de310ee56866b4c2985496509a6e6d239eec06651674e119221ef04777721168c93f3678335bd4385af0e49c635e6cc5c53257951bf443af751435b7b50e2ecbdef14665f17b1911d676ba45c7a03ae0568bd36938f111e6b93a3ce6ca3758ec8fe5b3212b6b0fd98b448c0f2fda542db346ee4405f1c8597eef7a472f941c454c9b115c39a23509e9f8de3b147354e87bf21cd7fb8cf37226a2726b4d8ae580956fc559b497052d92f2256c1df199bb011bf37792091fbb50f1b9c5bcb241091af263bc14d01cbee6cef61494dbbf1ff332e6b5621cb9bf8e6bc4e8e570bb691dc150f5d2e3c83885edd4b711a82181c2c58b13d43e3dd92f6f0837606cb10b4e3b31999728b424d0ed25e63cdd5d7ae042350560d428a2c47a0843b5fcce79fcee6a09ba355cfe583b7e044ee1ef75dc37992ca07506a6de2b59a04ea7702fda598ee8b4801f3f9c5751a3f05c441d37241bdc1b97544fece150bf930322b746eb04992eaf97631ddf254799b2f7ab519631a62ac1ae18613aa1f44b86628ac3316fad810a42034d218d61d37c66daebec6f1d667a50aaeba5a200a0a7cc24ffbb24984426ab8abaccee75162f3e1646b548a457280851eca0f5476afdac102cf6c7dbe09b3083d74fbd03da31e9d7f27f42cd656111a7d4bb005ad2eeaed6fb62ce0b0ebe7d6933189da0b82ad6aa8fb8e21b19ac29374462579da0f130e3eb8dab87f726eeb54eb5f4ae087091087ed0bafffc6fab7aac156f823dbbceb17dd5e4e5626b10f29aa656be73b9a57c308511fe863204dc8c72bccb0194f4da02ea0ea5b8e1609ba7783844525c807045149b993f89e1e755d8c3caa5133fc84b288d4b63206a3ae59a1dc25cefce7f4d2dbc4290ddbf25a8d618f390cd0c06971ff53909aeaa3ae59a7bcadbc9cc03992f08ad12a3f901e5e920e84d08e61f874ebb0114f28d2617e7d6c0579125a7b996e51b4d832c26ad90701b428d5a6d8c2363460d82af870d00c34568dc47d63f03f62f99e1c4ee604a8b0f0990d58b163c624a6bd56dd82573a5cc87e1cf1989e4905c90565fd39e95e6261ad9e3f2d6085cb0a871648401cf02b82d6807dc3ab76814c9475970c900f602febf023f2c05970b5 +MD = 3b911697c93f5b7a444b97926b0f1437900d4f23f83bad1cc09e995d + +Len = 69136 +Msg = bfbff36bb5f44fa26eec3e9791c4337dd0751a2310609826ca2a9565b1c9f8b595dfb1d68747fda63eeee595b9e5085926b49be303f0ae918310b1a5337c36f6dde7f9e5acdf1d9392a2b851e734925853ae2abbedd9fa99a4fbfc97dff16d8d607ed1806ee337d133b0beb363d958e21e0cce93184205a6f7957f23fc5124e4e64d438f137cd4c8e9bf00a474fde36050769053ca54552142834132d4c3e46237fc56fae4d17be07b77840a63c8b938b19376e34c3774704e704aaaad70346f1a3212a9290bb481b38254cf796164d4090c8b2be612eafde302a375d0809c73589780852a510713578578d9fbf16c9a2088d413df0d3d2fc8e15379851aa4d6b9d4a7742eccfdfe302bf612349f57f4beb05b848152f76dc7b662a01366d5010591905f7fa31daa0619d8606b94af49aa2c276412069f21a629d9d0c48db65a0475412f63ffef7fa1fa26ade7f7fb01ada3409ddb54beb22ee1bff3deb7d04a7e29c4ca2308fce6c874e6e0f1f1c4848fbeaf152462db8827871cf0aa0ba93a3a55211a07e5cb45452f22e1d1aa913918247bb635587e0b59c2f9af70b2cb9001a05e0656bfe505ded4e198cf49ea8a0f7dac66555f30a38c3b5d1878d4beb69bb285755abdd08f5c0b2ced33f757de3e734b0fcd9f77b8879a501309970812d0349d515908164a867b0ac844db619e6bac5e98e63fdeb21386da886c26330e68ceaf819cc73e9d26cd83114b1e8f305fd0f0e9e567eaf9f8a7045feaa7c7102a27c2ed6b23d1f202a99fb090e76afde28806ea154125f5fea6d580c9434a82dfe8de7d0e4456b0e4b5678d5b5f796dbc7caa83bdf2160eec2b56d3512146cb4fb80b19cc51553e929ce290f4ad44e9b453e39c24a545ad8cdd8d41cc6a4253424052a9ee735706d40418a2a2fb53d793b5ba1d93803b38a46584b08045c7828028ba15bcd1e36f749612a9af6e2fa0214c35ee52ab7f19fd6a4309b6db5cc0d0174c457e9481e138f9d78e61305fad26bd5ff7a94f99b65f95d035b6538975fcb50f217ce3b9c4ead56f3a01696b656ab33d21e0941279928e351bc8d6d609caab0b92fee7148150d4e394d640dc2fb4d4d9523ea171c95dfc7aa2348ccce403a1487e4bc7197e339c3a832ade3875cec83a730c9f3e0d8988a5b4419cf26e6f3ecfcfacac51245ad57cf1436b0a9e7e38686d93b502afded9c038392fd010d52ba76b69be42db8f28b2c56a0ed7128dcc6c26180c43162498d215626cef30fe10d83cca24760c983ce3e7e7ef2938c32b4d88e6cb8caa236ce435057cd638b3936b281607751d3ebb173e0237877ae7fe137a441b62d3a3fefd7f69860d8eba5f6719978ec578494a56b4030e7a3fc3ecc6e379244ff96bf525dbd8b31d9cdb1ad4f693e2f0838193a930319b89f01d9e6fadce0dda8444fa6431982b8dc8e06dbaa7532a7ea8ae3e179bd6073cf3bebb16bf8bff8cdcf6b5c369f215e57c8fff22131f8ff54e97f3a9db38791bb16eecc101f821eb6949cd496c2e99ae1fb27913243f39dfdc055966d99f1aaf92f4d97a5b5c9c819405ebff2094e16f190f8296c1fa4fc3bcc018567d55127fff1a2948b50197d6c3f1b6eb6e6c12b0d16fc3b2d299fa2a5590d981b0a188135ea68534f72d3b705fd6d7173efd57fab199e36f4064619b0f3d44f058caa4f4186194440929b0d9d17cf58b7990d6d320578bd5f1a3ad9e528e00aa5e1990a99613ff82d33d1d9980abb94e056db7c6866f63edce9e05bb864cb6b7abd671ba3f846df63eb0aa36d32bca67ccdc23584caa12bebf9d927b133f0d20264972b07a7b87a730cc813a34c3d2e1b5254213d8d04150ade77b65622faeecb6b9b812b1c2f59d92d7c72d0a3d76c1a78f3b7e93a997ac7ec5e902d9e4402345706e684b1f5ee04d1aa795bc5f60118c633721e5fcbdd91c7f04d8e1256ccebab4ba3bb05b6a7947dd47fcb4f238d94bea5d8537935adf6d5df371e3bcdaf3fccec411473ec26f6a68cfe959bda51fcc69d631ef3417c75ba6df55456f319df506b5757a8f0eca9d0268e5138a50edf72bc9ad77a89c98cda4ef0a710719d18ca3b5ecb018f592c7f43a774a1fe14ab4775f8235b7905aaa9d4c1acd4c3c99a9efeb00529f20d0d2876c276645ff3feb94bf3793289c16dcda1d0dc3053ffc34308038c6ed378ca500267dcfc452d284cb1354f7c567d34aa38b69b9fccd0316af9c1c75cae1cc28aa9202ee64830d67648062cb549a99dc40beb819f78cb435b46535c7fdc69a43ccd53d29ed3af87ca730e8769edc707af8dd814abf24197a86060a25508ffddead1ab6e9261e9aacdb4b6e606bd6610c14114db41c3e3acd6fa524f589e4fee19687f697d8d8fbdd4af87cf1832f737adc81a3bfd5821d17b56b09a0716ca334cf448499cb1023f83a609b91ad90afac98560bd3b497cc3ea17f438fd0d0f6c0a07ae859c76d1be6f4ab52a8b3a11b8b90b70d587f264f2c7b095a296eb8ff6b5151ab3d9497ea8dc0002a9e5b09c2fd0ccd32b6ffd6acc78b33d4d512cac51e29f054aff93798d7e587aadb6e71a9eb53bf0155fc50edf918233bfd86b150c271806b16c0f52eabad6a5ac7b380da3eaeb6039e3e3b1aa96c0116089013a83d722879daaf78b3f05ecec2cbf4df5cdc65dabef78c4039bfcdf6ee5ef999d679711105628f692f9041dd6b4df73537afc052bcc9af075422842a4a6788eae15cb9629718276faa729ebfdcb7852b739e0647857d703772bcd9c4b28a07afd1d09144b76341332d7ebd9c9d6f6669199081e09f7995789c7413ecae323c8faebc40dfeeaba35cbf9ce59b37df6296316f77469427e674d9327cccc7c4f13381070f5ac359169369b460e4316d415ac12231a0ecee2dd031de5a8984a9ec42529b46debfd3628032ae74a01383ca5fd391f7172d353037ac61f64e6e49f665275f2d9268824fca22726af76688c64a6ea411d3e166b84f53a198410b0cd6440a3b0b9f49cea51a41e98a10b0e4fec69b43c6fb8fe88dc02d87888ae65b568602172a2ce7202b1798f91b147cfe377961565fb8c023773342fb0d52849c3cd317dbd062ccdeaa6a2e8b672a4f403c0bc8c52431fb7f3e509be670c16f3951d5527046697f72ebba0b88b47bb311d425d8785d8fc864a9be3f2efafe2e985d31babcd4688842b3b038d64b2f2fd9c66f9a5752f9af3a822636bdf0324923289258a8c18770b8cdf4bc5f746d4c01db90154b4b9839698f2f89799d844840799e321c57f0bd3a002d9f09765d90efdb31513a8f93ed5999823f4c481db45919fd5301dcc8fa321303eabe9b28850c8ef9570e6713547267c6601d382415d5d158c03d993aac07cf20a46529f6b3c0bb912ead1b40f41dc3a4f5d3b6c2f11c675782bad66b5d21fc29d5e669eea1742ca0de01f34158c073c405580a1fd296a3a1a25edb8694e862c98529a339d78ea7cf70f0363f05c540cd98937c623fab4fdf2813efb1dac4c8a6bd151ffedd78f5c6eb642e618592f268b66c54b4c1c331b81ac05b14b61df768849424663c98de2c574421d05e91513c68cbd93cdf4613d5824d68d9b05bb8b8e38efb997b5829a9bd7858b31b2824f2b5985423219cbbdd67a15b2550e6d13ee1e9edbe221fa0e724e71b3341c13531a6bb0d900f2df179d2a67f231f260aa1868e40feb954098b947bb2785ac34aa2421d4cac32617f51ca431bf8a4842d89da653c80c9612d40151b64a9ee962cec91a4599e11a12c0c576076cf676600a0e6562b6dd9add4acb0af7aef83a2a3b89b397b8f3453bf5381e6d9cef1354d8bb14a53ec72a0c5776c203c71a34e77ae69c5fca724e101cd51bb8c1dc95adaf54327fe261ba2ca4a5254f258d5046f75022e220d68b1ba23cec8d7e5773b6f84a5d772425c1ba9cd6834e4cba22c54b66e5e36ea882db1fc01f5024e8442d6e0de40f769bd732ba7b8a85af3902cee18b63b7f650dbbb001f02b547f77d6d6b2f64cd7c3c71218804a999bf7296d0544e1af47a77ec57ddaa55016a1d85e36a2f6e258770161380224edf000f55761e1f7a1d4d863b2e12e284d91db3044bf57e5e9c4aef4c653d3508ea1367b53c99801f8701e45eaa4a57f0b0a5606ef397acb4b618f26aa309bd662f6c043c70711059e61a4aad58ee8b471cc39e2c76cb2b1ef784321769803bc5336c7d51ce1f30e7aef901ddb679fcf661ead4c341fa89ebd50f16d9053b20c48ab72babb20e72174640b2364f672d6d447dacd9e1c049a9d33c290622952ce289bea790a8c944874063c46d80407d3a290e7ec6d296dad7767de1452e28808dd4f569a73eca38a621f4c0d9f5909cdb841fd32090f8be033356c81ca45fec44e0fdfa55d09bbf026f5620021bd1ecdfea24326db95073ab9e5945d311b5c096323ad2330ac8580a9d0a7a8c6f8eeda5cfae250498589c3f1bf8032ef2c49e004d2e79c539ba844d1fa438cf7d122fcba930138bca6b884c40b55876c406e4f1965b696309fcd4487ba5d351a12623b00b3c9679dbf3d8418103ee50f1f73618a24419b2e7f9c87b4571d29998155a016a362645299bfccd71761d34290ff1b3f57b132b505bc153e1aacf2dae7a432e4abf3b745fce762e768e6d96d5dba8721462de42df7d6f60f4b3218470bf7fa5212a4e9dcaf5d50324bf67ff64c4eac1639de37fe1e91330d32d62146b7f4fe49229f81817cc89e9e08b94e462660920777ebb5914296d22216c19741b14648af2109079b29d15215e656cdc5b29b42dd497de64c2b8cde35411b019fc293e06e580d03927f1f767e2ef585dbbaa4c37ef7bc5198a01c5c2df90be8c8b284cc6c0fd0fecd465b11c029c0fcf104261dd4c9cf7ede6aee56f487b9d32449c016938e7d80b6462c2cc51cddbc6d5ac759c606dff58451a9d371334e4a1b4ff0c6c91c3a0fb4463bce7452744db9822f7e3bf8133ff41df6dc8c44f2d5158bbbe2f8022f352f102fffb512ae353b4407941de594e394967c782d04ccfd7ac6ca74078986798f6ab1c770a3b2fe5d6af7a453168969ce84e4af3cb90549b2c8c483def664633d1d692f8d4ea92f86baa6b4c5d31b5a09aed589a1acc442255952186594f37c9ff1fe3ef55bbb511dfebdcf5b64723cacddf80f4425326e3b411c3a84aa5b4b1ead19fd8e120feb8cfce3fafd10b59a21d9f5480e6b77575d47c9f1237fc459231b617241bace853a7dc13f93200df9cf6a733de5c8ba85f13501452a5c552c14017fa7f79d1fa88f48ffa505dca1e31e581af4b382237f61d16e3f8189364e5a281aa496012bdaf32744343b8c9adf766a93775ee2dccd13e4b6e6104e90475e58db6f072f1aa6cee038f51d781f763f6986cecf300af771358143c0f38b9d87586912336f1391883c84ef94e8592ee11e9affefb4d885e18e785c77bf4eda3cf26e9501093e258903d02b86236f92c44e7814a5b66c00cdb5423b1efb0285e7ec8ffe5844c4e93afdc3afdd728a2751c4c814d87deef09c7388e89ef0ce27ef0f76572269cd6501f106857f1dd277ee473108725287dbb690f269dde3db47bc23cba846c0802247a941b5566c6e09049e5bf75a7d5e4b83d427c8c51f506db6f035f7ac9106a775eb1b4548a68765fc92efe978469dc76b07d00d3deb5622453d5d4e3c24877cf1803c3f3f1544143ceb95e7b4f469d8d6f0943e2c8e15ecd1d4ebb4dec02a2a25304daa22ffce9d2e71f4f7f6d1ed042c581c657c51b456c27b86327aaf173877c2f68fd9ad4c8839ebb52426234ed6d5071089147c5ce580fbd6cef837772e5100def54b67e75ec4237f732c33b7d339c517b3dc573423731c849240a172951ab0aee46275c7a539dffbeef0494e85c05ad9eabc29659703a538863a352ff43a9b0d65051e13e8ffe8d19c5bad3b73d38dff369c3c16c9996099b1cf3ad7d31989a47e1cabf4ac7e06a88553a6a725d827319f64d670429b13501be5fa91ba1f421b399064917b1e0028b2c17dba2439f1162efc409b89738705cc65bb8632b48d199e479113dc47a0fa2a8e7b9bf75cb057ea4cc2be2687845fcd38c6ddc2403346b42a7aa15861acc6f5a0e57326ab2f9bdc3da301a241d206254463bff32bfd4b8321676476d4ed331ce106693a8c358b0ab52d8d840838a3dc73d9544cddb0d013159f83be082beaa63825a6ba6989cf7e9da68a54437fdefbac72c355be177c6dec6b27b8662e939b8c89512ea9f40e40de57209b5c6f5e88d674359637f9f898901378ed54bdd504c77b931eb43ef0565e8875dfbad0cc8edb28d198ae1deb9ce7df9de43ba258e8d0439413f22f1fca0781b4abc56acf12a2d6c0e28c4cfe82db16bf2584a3c54f8f297b95cb8e40a4c0890384e505101e13c629fc3a4ed951530205399589c441ec75712aa725feea70e98af4826836b9163f356f1eeb231136e998a7d81bfcc7cf6e9d5ceebafea601ea7382045ceaec938b0cc2a2eb85ca6e149ff7b32316e8205d28b20816ebdf5ad2e3b7d3a9d4be72f0d57d2d15a685e2cb43b29067b9adc78a39b45d016b9e63e9041957179b379bb7b92926322f4a7a56ac5fd6b18e1cac3df9eb554326ea0479fe32f96de85ff727df4df70ac71f1efc0186edc73d40b8be8fde59a3c6cb25c8f98a1f75623f6c8a6f710765170eb6066baf3d716d1ed1542416cfeaf049ae1f1ca733f5b2dee326931dbe0bc61e2abc11632e79c6c0e049e01921e04e6d87c68f139bb67f44454571da84c47d5762661c2928a6f22dcee3ea71b54d883e99057b56c180727a782d312fc157e4c2474cb38a93bf966d816b6ba5f5f946c4ca2408f60b1b33876626fca5dd8da266bfb6ff0dd78d5d89e3288a3e48ac2f08036a5d7de34e6973f57afac3402e604cb3eb273a5cd8ec88db6470c3152deb112d21a373b0e2bc470f6f52115302c57a0c3454998a67ee72506544bcc64523e82e8f015ed9a0d60a9b4f2d177cd07afab0d9aeb3ca04094f2c752fb2c2bc7f93f0fca0c8c84d5cc48160b25e246226d489225c0f8275e52856da592c715aa61c59b2a738e4b4f97da9eb0a6db47e720e7e5687351c832b04b6dce9b23be6418a53f83f37959c533efb375ccc92ed06b276bf56aefef683ec34c508cc882af7e6c515904c43cc120e5f8ed104287689c75ba3f201929694e7b8dbdd03c0ec71379652c1ff560ddff6bd36919cdde3a456144b82b63e2b07fd2a6891de4bf55685b0f7fbd8362762fdfd78c31c18fbfe6689ff2f566c7c833672b24be6910d4fd9fa4c65604ce2422b079c8f0c438540ffa20721688352b19b780234a1fbfb043a5c98281efe062788c3ea1ef5c54a112947aa7f74eb753933259f7499ef891cb0be256b9ab55abb1d19aa985f06121aed603171020badc2075fd33256d67d40430839575ddaa7a3f1f22325d06ea40252d5e4219b4dc2f41d0fe4965e19a017fc221d14eed3b58a0c349eebd265ca72618e0bb4c6187b797f1e1bc93b1eba4ae2f519c9d50a4c1677c96315ec534a122173ee550cd5a1f63572c0f3754f9380fd67749e9be534ef3997bac9a7a0ed899a6dd52af4eafc1645f51b3b9213f262566178bcc7ce34be5a88eb2f89b47b80d462075b06c0547eb98d73ca1cd1a197f4cc6b4be12c162be3833d711cf7bc9ed83ccd11cabf71d9982412c89bf366c8e08e96727267a0dddb6ffab4e8d2788cade16f74c94f1bcdeba13e5c95e00a9d2091415a01e79b7d4a36682374ab76f15b3b35ab8ad91902b9ec40ae940055bdbebbb42b1613ceb239bfcfe348eb7f76eb3066df95c334220aed60e71fbb0ed1c1f6360c39550325aef2791fecfb5bc364aa4c37737734d2e78ce52fbf79ff8032291025f314007eb4b7adfde941d27fce902ddcab5be1bc56b119adfaa2ee73183c8b9fcbb98e6450f6b2a5c527ab5231ca52f5c5d902886244428a5b9ea4527b16eda24aaa757f8c97d1400b14b0e6963f03ab4a5861de102da9ed67d5e9c464a17e55f6507d786f8252f64070a7e004d98826c140c4646a5496ffa8b08471d9c488e15a136ef701a07deeeea259eb847f288db2f8f4c577a150e8a5953f02e567516efb5c0fa34bd799519c148ead1d192c08a5eab9a73ffd21cfe6ede01f8d722223639129255410f046d32d0eced790dcc1237ddab3cb4e4fdcf421306fdbce4328191c84242534c8f61a55a0f7baca80ddb3192190227e23395697f79bd661fca6a563e849c4296a89f9f40ed0cfb06087de2654e64c73e50b94b9fd4a861495c590d01d3c3bd91e26f8721e001d2ac4e52b0c3c5f5217dd7d37ee0925f4d055ac60c9eaa4922a2cf5a0389930ac21f31f2234a1a13b5053b4c69de5d4277b8684a0b8192acf06db1f78ac4607857b365e4b044b540f088edbc93057fe27fe6e74d5047075fc5474cc0937ef2eaf22d5ca2fe50121d726d718c80e284bfd4255a58915b82e20fc3f23d9425a4c32fc188a55408db09a9276934c9f2065b02e853e4353b8fc44e5844d7233500a17f346c7457bb5a86034b376dc4b06f148a945688c263a886ff98b725c73991065eea9a8880042b131f4d5e6017aa49ace9ddc4bebf60479a91f9bb81d6bfd0524d48756a535fb7516ba260d4294c00549f1930ee82be078fa3ffe4a3f8244915d8f29f82484aa99166eec13270123ddc18db2da0b2d942d6b42fa4e4a1f355d1706d7b78e5415c83af87020382995c83f5981d6dd64e83f030ed8edc4ac9a115a21d9bb6a0c05a88940fa5afe75dd6ec93d472be539a657cb8ce04e379039552ec8762b401642e10b2ed2ec004bc5796a214e00ab12941cc9a4599a2a33dacf9ce3f72f99d9941cc8ab3ffcc614138e27eddc7eb8587c37073f8df826fd472aab5aa4f1fbbdc301c99d8ab3d93990570a893acc9374244f8d43c291b256470c6415c596f12a963715eefc38c020047c1addb014c4cc540d619a418c56a6a11ecdfda2490088d767b484dbb4033337a55fd1857bd4cad6198d2a52129a551e07f1f88330b23f4c38af496f4e2bd9f079e24e032b4ad5711a19dd3c4b07cb866fd5efaf738eb7be530d23022fbf79f9a0aa3a704cae54ecb80b99495e2470a10083cb6f3b1c59f45fd6fcda7e477d18c3bf7f150589b1109c6d48bf7479ad366002720bb0e58bb80512bb40644c4c168a2a033a7f6253a56e46d1e7b48fe80f375acecbf970b6d0edca487c09554eba9cf2b027e2c1a273d59f1c0947ed8af22e94c6f63f454305be068bd694eaebcea21f6c23552e06417a7f116d541cfca8ecb641d6a9ed981f20cc6c962d938b1843ba21770032e7d805ee985a04a2a5f91acb29b160ef1fe6bd26d303fed9966228cab66c0c54ad011df5991a7f09ecac60d865d08bd33f223a1ba8662c437472f8571348a11dc0826a9afcf3ecd83b8b65e7dd7b53225f9a42b3d307e25a8d105c6a2053e614892396e7a92e7398f95cd2ff79fae063e9177bf73c2e46a44a06fc09c5d704c16eae46e488123ed08de84e292194591e44618deecb2380ab111b7f3fea1a23acd8e9249882e9720861f7826cbd92e6dcd84021a1692db9f74b168e117765695e309ed80b7df93ac9dc5116d0353cb1230d7cdf16fc96190e61c0d0895400015edc930a45628cbc9966bdb15d71dadf7e4bdc6e576da4c77ab9e1eeae693311344691614f1ae820036704fb1c59b49b72fa29776ca5a0ecc3bd418f889e46c269d45f85308c558f8c47ee9e14d6120b89822ba15b8bd2af6fd4a75c20dc803b84f0c71ff09f1d31be6f433f4dce3b574a4baa952e0681390865dcfc7d092ba50d018fd7983d872d2045cb89d02b78a83dbd6efaed00f6b116daa918a70f8d278c6f80542e4ddaab3a324e21a4d31126eb413e799e607a401f9ad458a7d4eeea8aa1623fbdb65fd5959f93b2d1b04ef8db3de4ba4b0e530ead0d2563844298158f01fd3f4a625ed1b8f263e260a87647951b2664fbf1c942479b66e24640d2d121f618fddf381ec72b95865958a5d33aa241cd1fb7f3260576ac5d7cf6b5e346cae87d208320e9e077eec4c0c18eabfa8919a19586fbb07ec0a8d3da9b8b149b113ff2513f0205432367e5bfa44b47aed209696b70f2b1d6b0f791a43da9adf97e6440381ac6bb1ab766b0fd08c3ef7f067bef4c7dbe6f34cb015c81e4f7f6879abd2f7c1c55538abc55ee23f5e0eb95acd6f9deb64833c19b2fff19995d366eecb386c64d9515bdb99b67d8738982174c8250c9227844a4a7e7401563c3b7d5fdaf0fbdb66f49db36a0e3c58ba6fd2d6fe7bcb6c937ec067792e91d4b11bfe55317900a5ecb360bbbcc2a924420a4019c6d044db46b710f9499c0d8582f97c57854d2544d922576d18703e6a7ddbfb85b7cf235eafd1ce685628eef9205879ff4cf9d448caa5e44ff393869bac6967d347c4c1773d635b4d2571a09017cd6984defb88222fd299cce4a8fc487c37176b0d5db9a58dc04a004df2ecfae7aceda0d1bedb51772cea6c522d19f16bd97cb56ef6767a0f9d0d3a26190e9a0e8b58dbbbd028574f0948c6c29c6a16d9a51a5ae32b8255314e375344709fedfafd4d8e03cc09c4061c5734bc835739644e72c4107957d7a1583ad42f861b674b573e40300ef9f83aca785eb65e7bd99a1a18796d4c7171ce3f9a355dc60bb66e4dad9ac71573945b983ead36aa5267c9bc6df3602179a41688d80f45bceb2bd2350de64f7bf108f70a0ca8b3d35564919a05ba7fa4aaff18b866ca8dd724682591e1bb1faf1cc68b9484c9c485ff60802752473232bfd35342e8ef8ca151dbc708db91ee2b316d97cc1988df1edaebf408e6121e4812d144bcb0f6c8a7fdf734fe3e03017ce96e9a154d7e6a2a52578ba333b3aa713e697b9a6168c857835afde68b771010af3a010493130c251043a58acda45d3aad1c56407cce124c8c77905666768082ed506b1e8cdf1b9b7f20e024065cad00e95a6353559f2cd363cd8ac23179d9504e6246c78d4b4eea098faa03804520507db42147ae447e98c3cd5bbe8f0990e52cb012a436dfecbd39d091adce164dc5d4ba2ea1c9569e19071771afd1ae3dde12fa5d18fc159b71aab4058742188bcd78ccd9d6495df1b0b80c6b2aabc036879b8194ba5f84c1a3b67a94348ef460d3f47cb179a0c3101c414ca6937ff8219e10e647ecd39605dff7b4bc1a07127385b23a53e0622e8fa85d38c28eb0ae757e3da8e544fac1be62e8f2ebbc3cfb2a3f4c962fcf0fd8b6d146513d81006ba8945c4a0b4727a081e904a5b1afa3270b7d1e00a389fc8a2c43a73675fec1a8419d073a1857fcbac6dec55d9c48dc2e7dcbc11a6da5ca9b666bfa591a7c76fcb6e4c9099b1bec6913c0c57b0a3c4a6a17b7b043cc96fc84ebb6ba29896eb2c1af081c2911f77943ef1b6f9e99ee60726fad760d7ef204ef22b061384169f7af60737b28fb7f25c3bf6b3e38b9c3d0cfcc398ce7c33b7632a1e579f5e0e2a81e91b35089e61764711b1cbbc9e870fdead3c86f5357d7b2e7ffc27ef2d65d5687a94446bc3054d7d478cc52d2b46a5a4c1cf687e09b5b5d8782d3eaaf905e85832da2c83088bbd2565ed6bdd38c14787bee3081001c4ad889e196479cad5ab789755b5f974db0f68f33e8375d0e03daf2edf2c542390ab6777296104a9bd65f1336ea6750fde8b6d7ae6d69cf88bce43982d9df17902f79d8dc3fcf29da560ea8e8bc99ee27a785d824d2cfbbaaa436b853423900b02d8516851feecaf75e28c2e16e41df498205f91db4d391d25e4517c5c85d9df7998ac8e393099e61534fe9d75c0994e21c99c31f800ff29e4f91a050d8d73ff4d7dd589e557a24a6e9e69631225bbf6fbbc3be90c0ef5e7cfcaf1a8af01077368d0f4e1bb3eaee36667f50653db2bf6104165417f40c25ecf9ffceeaaaa3c41b0d8331c25ac66bae6d9c910a2a99056469f42c2b95c0f97cabf635e6750bb730fdfb8c4896871d6d73a0e096658931c8720f9f3232a8398a9734f814cbb2c116c2bab60513b793f1fd3eb7706b0db52ba0ab35d2374c76b5503e8ddc2b23521ae053579e4ed23fea8ec89e4ec7911ffc7a6978622008218b5b755fc32ff81adbfb57e96aa46191a58cd10d77f7bdc2c953ccef889975da5b0d6bf660268b6bc8683ad3f0b0e039b19bda7d9277ee5e00e147f3bbe0100 +MD = 1f4edf806cefb52dc6c01c4140576a0ba7d142982ca2d5f32a49e9af + +Len = 69928 +Msg = 2e16393057289894ea78d2a7ac800956e73ade0875e32d821afff807179da0c4fbdc5b6cbdaee22008dc6a91d64ad668407d2be6945a44c7a930c76d6ff9573acadd0b3ea1f81f12325dea03a85b1073effff97dc7d982d81703f2fe84602f8d432232ed2b8fb8330f043a454a3a203f9bc8321634e94f7c0d8061037e5990840db2b6c285fa134b48d8439fe56f6c94ede1bcf90311137a33aefcc3856de2e9d1958105d4c19a2284e1eb59a1835e3a8d51816e5dda369b3095ac88bf228d8236d479fe436db47f6c281bbaa5fd5df8222067bd6acb20a7ad3d57985703f918e57688f4f785c82ba7b4bc0b1a65d0985456582d516c396651afe63c73958f72858395311b9140efde8eb495274421e0cdfc3b073b45ea9fc5f242bc3c62b55abf0487fbd5198391b9bced9df520b799321af7944fdf991cb00e5160d9f1d4963b00489b4da6f9d9df484d6eac84fa8b2eb67619b6c1b0a3bb0cfd7072ca55efa07fbf59adbf0a91f939be4f73f5527d67da9fe1977395fd8ef32d3331769e2d9789d47c1aed1e7fae98278772fd2738858d5a331b7eb2f2d0cbc9f23c7c1918c7276f4ebeb79d6da76c6f5fd223e18531d88f5669696d49299cb8f5bb642d77d9607815c1a5ef218cbd801fbbefe82a13c12693abbc30cc436fe484d7b74114743dd71a4b3f7c630494410f54eaa5efd253083206006241c34b34e7b7fbbfb541c475a5820eadfdb7f89a76c69b7e9e16931b7ba4bc6a715439906585bb0e23e7ff38fd9199e8b54ef1739e388bdcfd898b48b5ad78b2249c40e048667c96260ff6096c9e6896557187b4cdd34028d6d142782a49bca12143680cd684c8bf8561b0d138d20420a3c7c3464cbf44c8ef96c091209e119f32f2b9fd580726f10a843576aa54f4ec68f9ac0f63231f2610810e7ce0d7fe141d513c9915171f947b218de20a4dc0646bae4af8592757a803393322b21a0c68ab07f8c957da3a10a1dfc1fba0e4f1ef768fa6e978f576b88f67376add8fc104a4bdf576647bffcd4467d7abb3420ef44f44c7cb06b204bd7bb3233bab60a84ed01a3c868620f6342c60dad88d8e9fddbf74b6844c89871f90c4fe7f62b246aff7c7d4e302f2a8ab2073cf6c74f12d118ec779fe92a089459643d01d4bb02590e06bc57323189c9bea48c04eb1933ff884e71a1f201f919955d7a1fdae7fcc5754af182030ba5a6d5086b4668c9b5dfa6979a0d13d2f288294297a07d34ac36e1b3bd4d070026b871bd6b49c4c310f7f042814fb32f8d4681de162230137933bfdb6016d2c16565313dfc7d83b7fdeef1e997d8548a120b3b6a66239826ec328c2c8a8dead1ea337ff4af5029faa51b27f77e356c45291cc282081319c18db9b311ad00b3843db9da8be4602c1ddf130ef684f58f135b1193af8c7f3985d63fe135481dc18ac85ecd7e4c3c0e93e44d23614c772166f0703b6d63c67be64e4b8301ec3399383298c526473255ff5d4fe1b25568c7a2b1bf36261e9765556e631501e9f0af3ed4fe5e1e55f176a2b291d6840018f668f764f0842d506a75aefd13bff1c377e14805f4e0f8d7f5308c998e30fd26122c39f806e210800fa998900b86743a87d204362608b074663b33ed5553ad0ebf6f01eef5da48b4d973b3b2691ff1b4637392156de01d552df55103e856903152a3e7c039c7665d3c6678dab8c6eacf7f685a1a39118fd8d1215c53a3d4374c805d44023f53d9e7cce4508f7725cfea4002f4bb1417989de431ce73043702aead0dbf2b92ea23f2ff9fe33720a731a369f5da7e8b5cc802cb991fe8a60992d64d47a1b2c104c4fd48dba97851e58079318383eb1b7b8eb61bd9d90af5c66861f56da42e463e4d652d3a0ba9674b6cda5b6e797720de5d16497682707ff7e3c02a122ef49ef11dd9313d9260fd6337552c0923a9480fc3a1d8f194afa118a57f4fc7baac37b7c6a7e958c63560a7705847d63b080d8a52f74edd982f05931e0dfae0dfcbad1cc88fba0e2f7d5d82b88223680809ddd87b651f8cf5551a01cdeaa00ff6c96b7aa3cf27d036cf20af7031434113252574bda9cf9244d85aef2593d3a7a83bff6be904b75164a1766828042bc3f4f090d98a03d38fff2f44b5c5a80a4a5c79d56af8beece4417abb675069419315e29c817121cfd89cb073f02e75b85a9c2989e2635c4d0b45d16c0779ef29111e71a5070372290e96024518b0bb627adfc1998ca97b3c58fa3bf4d314f446e0472436d4a1735384839b54ba0cb79d0dafc860a44b8a4f3fc7210244b2172f634880ee74dbb3e3fcedf20f3e8318cc9584a49bd3ba180a32451700f6c1c6472c9b0e285222a26eba2d9cf120c44d75a4e6ec87958582d1e2ec847d43c490229eb732710716cd385edaf286fb30c42cae4f06d0543e795a9435ffe3c65af3565c0584651e18a2f54d6ea95d48692b66344599f2ba3559e8f8b9ffb0f8c56e36c73e7a50d1b8b21a286117c072cdd196b9331c5b120ab32162d0fa7155c47f5882aa8ad0fc77790b525ac47d14ef5552bfcfe496063f0388852386a157a8954fe0d24c61e8c5766d7da435dfa94e350eba54a9200142c982b21a0add99124e61946e2590112328a4dcd5f264aa5aef4f3b69c0859db683a48c3d1d62747219520fa6acc810210e46227870a892a5e278a587d13325eab06265f534fc84487485a5445896604f95c5d1044717ecafcd3f9b2741b5548fde40f1eac7e84315ee71079faf678bff6da85af1dc3f22e8fdf89ee0988883f66bc492866cd22b6af598b94117d7edc0e46242d9a68adfe1f337f31c4c294ebef761da408a36c7a818810cb138542024a8880b143c977e1b5b726a62e3141f69ffad3ba1b672826dc5bea4687758adab088e164a14c187f5753c572ce3e56057f30b39426831f61c8ba5f2ef5b71f0c4b2f916e3b5a578110efa3c02c4f9dc395000557b15e19d44e8db9abe5b2c93f2063d7f6995cfd8fe57309b6d1cedcd5eb53102e4560de2775bc3ee4e0ce4f1b390dfa2444b8d250e0c73f7c4421dce6890f1d3f69f13501463037026d737b4a9d164321c3d89e6d08d38d3b0db2659c751e74b2a579e70ac7cfeb2c150913715464fa159e22298d65803b1bb5e73f9fb9665db08160bdeb0282a48b5ff8e03b67e167285e003b5900b49043c32a31985dd12061860e7c4cff32a847d3a9aa4ddd73d1808ad99b79e058d5dcbfe2042f674604ec3becefd4c5c54187f9823952be048248aa1412940d55530d3276800be1ac52792860dd2c5c25b4735aec54f0127bc0a6471b685290914fffa3506dd5d2ed5332d6d30dfccc384c357d50c5cfe2c0d4c2e855655d70f614d99ad7933443f04c3dccae48eb1de850f2ea14529835bb06c5152ad05ab56be9c49f73bad13b9d88c2925756a1581b07d52aa2c4f314549dd7560273f468d715e83b8ca953c2dc4eeab138ffc785bbba03c460e2878673e31f344514d19024e16cf58a2963e095e5dcb0b70b05aaafb2a740b876fd93001ec6365b7c993539957956d602a99eb096c1173e4102d1df34e7271146fc43e397f3e5ad73f55ffe7936e5d6fccc0315a9c16f346a6701338beb00d21c2d9f0496cfc7a1c18d175bd4cc2af3de7518ad66033f014edb4393fedc5365be38ae4b628266a02d086438f062ad95724be45e14b00f0cb5079ee7d4e2a931f4c479a145334a13800e4f7d1321f7257ef76f11fdef68bf67921a175624889e887906ec850bf9608249df1286318f09cb20c1af67e9d0812b25bf0bcccb7b1440015f166b31fdf1fb5e1cdf91b9fdab216fe31e9bc6d1bbcb6896ac7efe07fbe6018c053fcdde2cb3f80ecd7be1ca72488cdc48e1adf3d30d02a6e0b3e6b6bb402493a34909227b72bdbec28ed37dc5071eb41380c6bd32ba9cf790b4ab0fbc170f7ed6d00b5345ff5533a710b49e0e27cd7369c23ab7409add92a5ca749a67326d55881efbf8f1236975654aafb5b471432231ed316965746e7e053b69e0225be41ea079029ae9a6a18de284e94b1faa25c9534ad25c0a11f6c39a4fb46856581ce3062a48c09450a48208068de7b69d1e6eb6214617953a1e6a4a507aba6cf2bfaba279f4f25ae81b5cbe17c112e311d41b44bab52270b58e7aff84e65fcaf1727f5cad2eb9a338ad24eb00ad530ecdefd7e45c4606014aedfba0351ddeda1ddf661c10209bd70603e1790a7b329d9a18ab7e51214ab2c3e4f615a94abf033eae68cae8ef225e1bc49b4f7a5037f940f79dfbdf6f76eae71a714628938bac1b878d4e7ec6d6a13f995a559b57eb8a8733b8414f5813107d38771bfc20c93f7d10de901acb3e06392a2773b4b5d5b837740139e903a88e4ee50d7c6c1a01232cf462780426e2f6d31e09910c957eec176482cbf499bdcb22ca3d51bfa9bcc0f0d921ef83004adad31e0997ec1d6c8cf0a942e0ba41da2fc08e0e823ef4807e916824dbe081ff1802d12e6d9c7529028aeb495e81248822f2da89f73124d8c5d648722664d0881a28e080fc64c63db4add3a02f92694e0c7e56b498e06049fd882113b654166d460df2072a8c382e0c21084e393539b5552da9994e92d15d8e6f9d1075fb7a370678b0cce05bf28670ad335b66b1bc4465c77c40ff909f9be053627049a0256dc133c1d6071a1dcc4a1bfcd09c501983a51476af9423f18b5bfc183b1c8a3e97de04cf2d8512e08901310ab4c55879fa7bdc40f0f691efb66832687ad502ee3dc7b47fda44886444fdb8060fc812033250e6810b0b22c3a36dbcfa345c505de8e30b7be42ac7d085a67797e98dc6e0b28dfbe206bd2092dad463757199bcb21f9ad06b5321164dd56438664bfcbc370298e30bebf3d187e403ef8139748e166b54cdf63010bc03ba9fc11b3cfd3b31abdb66a3c2957fc7486428c795d50db05379c8c582de0219bebfdb5dc5788cf634bc4b53918a707d8e5dd5ef8ca482a95f718a80517530b8692c4ed4ed55f8ad25a55cc262bceccf3f58c0a127c9352817a5dbcea5bc8e07424ee229bc7cc57f07fd5f983c123de5e2bcaf846d2c6e56047b8257879b632fd18e5f043ad53b93602c1d7f2874aae8fff16b4066b5755aad5c49c4fefaf9579e528c0c7049a412bb9a5e1d2cca7a001f5fbc7e1a4d915d9ab1f6bd13c196a8320332ea65be46239dafea1a53fcf654c96e69e692da0c8754e052e9cdd8834a140a1946211d6bef90d3881fa2f3660d85863c1fd5452cff625325f134280864cccd09c6ad4f599d1b6e02d423951252db0ffbd2eb773aee4c70377c50976c1ee3b6ca15103b5856c7e81ee0ddcb414c54716fa6dd577d7b9ba14f332a0ef9a1e02c23d952c8b2421aa9a5ecd87e3c2377146044b2cc3fcfd64d37bec976f5154b96debb7ce0ad889e195e9f1d944cfecc60965372c0c61185dbb5c435b5a9a2ad5ec162956a9351dba013a2b3f7b705dcbed87c251a5c6a31b592ed77b55d6e8ceb9577a54daac458a78a9ca28dc5622e94ef67d4c24702614295e3965c59a473a521a1b5733b0a9d948c36f340c03a4b4ba4bb879fcf009dea884b9a94e46ae7f42f89cbc38d4a32d1e118adf6eeb8b94cbd20449b3e8d6d1531d08c4447e8724085d6f225eaada0c451e9d899990102fe0240159ddad05a2b5a187354cb489bf1ec312f81985b6ed7a4517d100740adc83dc0018eedf2eb94c9cb57abb5afea6f2c428cbfe07b2471a1faa243809b4314344b1054bd1aa9b9479240335047e8230db010c80a354af91289521a4e3a4b49b0874bd893711a009b1537d3e3381c735724c3825eb369d9bda9927db8464dce791cb902b61fc8d28ffb4373b5aa0fc8d145aed6241a08786a006c5405e7d20d57b363bb704b3b98e9ec6dfb0fc4478b45bcd8aca395b03ee336e7877e44616d12f44fe9071df9b87292bc5439ae4e2279304aed2449e893eff40bfe6b86825671868775c4be8c9cf29238647b91acf7354a0a7fef6138df55e2e1a214d4bd303e121348ef567caa3197e9141d95e77043b2224c4c03288adea77059c0579b643f3ff949d00c4f4cf647d84d66e189f76a0f993b835841fc52ebc10cb837a3583db6435fae098fe90a4a0cf5a09e1af371097833db870a9e7958daa4459b5e75ff1ef974d375c3e836498df511f320cc2149c61e9db80cd61a94c507adab52234f20216f857774b340ec6436010925e942778be31215cd0dff478a1f389109cbf364c5370d3729b1f0da989fba07b0b49c3bd06a7fc3d7acee1a2fd230720bd3b491ecb6b3de6a4a10bc311783164a94f63b9c9b2fedb219b0b4be0adb79dea55a4f9fd3be94c0e666393888a35e79f11922f75e69b9e4be0dbf3eae83cb0ca7ad48e5767880b1edbcfab4d96306c834ce96e99b744ff702cce0b8a66e931d437521c68727cbc7c7d8a6adf20b37bcc3db3f7b3a99d8734cb7c133dae4f797e079854aef149c8add82e62bbbe318df0708c7b423207cde06940ab7322f1f04e5821a7a94871c81958462371c32d2b8681fd39d3e5162c2972c634d969634ebbc58885d5fc7733458a5c1d8fd428ccf4fe60e3c7473b3a6674772fbee605ed5ccc378fb381ec82b8facac1746596fad22271d9babd09613deade2cb22d6c4497d8b925d08d243efa062cafadfc0a3d94aa8abc2ccae3490642559c51a408fcf37777d8ab52c0e07f58fc48cb0bf4fdb30325eb7c056b5a561787ff0bee6e6ef6250e28a29744efbf4fb41d2a19d9b3c3b8cde846d1040da3d6efe54f70ff23266de68664af22e54076dead69ba4b083d280d431bd24fdb860cf7bf9ab04db1face9b82502eed49995ae679f841ab6385fd4e8c497d915c63263a1e8c30ec83f9a3979cf38af685206875f354648d4e44951c147e278b08c1cf215282873e1189995546dd47e1307c1bd7aa1c776330ef8bf08c18849f593844382c1c07b503412c7f106bda3fc41301b61eaf1ecfb3ed4e6643b70940d62d31f8ebc75703a1b6b95f7a2dd664d87ba68bc18aaf153fc458d7ebc82a12082724ee1202e98ca530ec80f491b0e2b62c76b3234dcce63d1b37efd4ca6b75579c79824f5d33d25666128e0045fe5c059bfed6c446ecc5444867f8af3c420d4d13cc5ff434ba576dcce7c13da913134f40bb6125348314ede2659cdbac422c611389c19138018e33bbb8e4fd49a3bafbb118ecb6652457825fbd46da88e0653c223e61b6c59e0940d92243df9604b58373a3d3f877452fba36eb713c60b14a26b646bac57be44b2d9ba078451cca957efee8a17bd969effe0e5cc661b2193dc9465f375db978b65289bffcde4c69cd56b963ffb11a072ab63c9d90fafb9cd28c68d461e00ccfed4819dd3c0bb376dfa34982292897a1627b483a7b58abc08af87442b4ece46e5286c284d04dd0565edd15efc85300cd29c5b79fe01b5108d9862f26cad4eeb888871a43342521acad7ca4e947b0b3fee32e015a59b379fa40cdcffcfe487a42e1d19794e21235ce4dfa8d2b41d24f9b110ccbe662a184f94337fd41d9b815a200feb0f664a57b5fd2ef25122138223655fa7db0756600aa734d2d71d7945f3a78570cf4364f60c5beb3033a7042da65046f7d651c918b723385d719927da5909a72e1fac180948473febdf0b992e68baee46160c28483e5166a90a574d48728e9eaf686a0e96530952a9bf16798c53ed7e1b03001ef68779e73d0b2192982880927b1346eda814e94bf53a904c4f4e301fff05f4512c79e3e2a1dabd9ed16125aa1886055e44732f5254b840bc8040caf97984b269f1fed6805ee1f31afb07c70f102b72087458229150a1ef6f2513043311e8000f4efd9ce9fb878dae1f01ace9eb6954943fab0b2d705e650d49ae26f64f99a7eb495f7b440033510144371c5f2fa772a9ae5432513c556a3ff1f97869bc006fa4ed0abcb9f64f09bc72916199664f95f0c73cdf233defc6ad27dc41b5df831fe23fe7a67264427b86b1f7c2c017c8851094495acbfa9440fef23fcb01408b814f49de8394d27470080a5186fccb7a0ab21d64ea72fcada2da5b0a5c7668815b9112d8994ac84dafea8487f67409cdec7e6976d940c9a0b2eb68253d3cdecb7650a2bb32bacf3502d328815a515929f21b80656d5cebd739d62378b67a2ad39a350271940c6e942f6bfd28faba43f6e6326a1befefeab8fe4694ec0e58d5ff8ee739e007692ed2ff5b0b621dd8509c8e6a2f7ea6204cadcbe1c2678fff66b91c0f4ff2d5f996573a4b5a180cd30783b26cd878dc189b1d664fb5d27f9765680a554d8d44e32e8ba8e2f33310d2f1131ce06df0d7fe5e709839751627475b7321603a9b9e507ed710c9dd996ffd94b5936cf4cde1fb1e0d29470b19cf38cf4429d91e0329670fa13ca82034717d7acfdebb77f94037625ee1207ec5bf924942ea6701ad2e516852f226c5ea607a2bcbc673fd5b3cd9b2ca886dd6013e7c51d52cb3ec81f4351153fbebd2a5821b2e0f133d8fdb1f0a96b9e5d51bb4951e7065b665e667c53c930b1fa0524c21890a058dc034612ff19793c10156c80da12d5a5124f847e78d75e125ed4ac783ec4a13fba5f4d5b6b73cc1e4988f24ec2d111dc5982909a3523f3fd779c4fef06b73a32793d71ffa830ea91643ccb07ae9a314da6a819541b07a8cfbedc7d9b22e0f1cd733e628447e94b41faa175401fe6ba8574208d309d1ad2f5af05c40105ea5e6d42d28d6dbcf564ac67477f8c794f14106c7c7ac43dd6092bc2b8a1b5123be69e628a61209a0dcd4d44af58415d1be48ada2c50636fb1b1ce9455952bea4e10cd4cc66c51416afb812d397e033e05923157b0acb2b546735a8e7d1cd9f0a963a68c272d5455b566045b867f569e74a3c06f89fe16a10cb45c2b9fb743c7c665868b2d22ce497593238a06da9ff0f1afa48c48b323b56d0b40062de30dc23d7cf9d438cb039f14198b234b0e53c7f50c4a285d6a4e64efceb288b82e7c8277307cf1eaa4b8b9294f97a1c38926a607404dde48921b222da5002dbf08249afc268c6eb33e424a2ddbd59ff0d96cfd90e21c188ab90e9f7ef4c58fb2feaa5e34b5b495130624a48a14b178538dbb313a783161a44d8d1f8c548f092470524ec964622f8a8af46ac6a0d7c57c0476035c692a4415de3b24ae3aa934941bd10f22b921789a3b260f7bf6a4f1dadc41d68f4b633a6fc98d618d1db09c824f9af1c93a8f1ac2a53df5129ca5a7e073931d4b8578af02cdf848818441ab6f8a14b9355ee7708437a0de12f956323d78de5a09add72c8f2a003c23f4c8ebcc69c2a7ff9ce7346f90f30d0593433b425aa81f522b0b3d658c39cefce5a2c8195d4940707afab0d51fa91452f0d92d8f7774dfad93815c1653197374dd8bdae6d30d35308f9e906552378693a89483757dc90d846dd603221d03cc1452d09ea56982e8c8413f3d90c732c6401101c7a4cc194b6f2085bd09589d2b63ec1d8de59f4ecda0167912d7ed0f75d0c0bd749de0e9fbd631fcf44c845a33dbefcf2317d2c5664095c8daab4231f7ce4e0414b16abfa14238c8435c2eaf57f4f461f8ccb29b453235aaef9b555edeb10f92229fb81ede5bab5424c8c6111a47807269749d14eced8c9bbc2894ca9cf18bc428b9676bf55ae04d1312d933fd3c2a7d0f9010d6bfeae127dac39f29b5385936917ed73ba8e89dff88bad67c734b38ee55bfbc6540b2f9bbc60cc2e0b9cdee55e780b6124b8d2b0800215c4f0f0d5242d643ee2521ce3cd3f864ae740d5ab1aea54f52646fa12de323f6c94032fb0d26fbdd24bab595110d0c5bc078324759ad554b5ac687dd0d1d4eababe4818cafe750dbfe7a7eb01cd35c529751cb1c2cce71f51d9d26994f12eab082a07d4ad1205fd0da090fa7b6a372f991953a51d1ae75ed497cbe5e7a60a285dc0888ae174e835c55cacad48519eab14db6f280beb9fb843cd9c194f582e0cc1681263ec8ee65cef05452defe832e0a3a3ba6116a8d5d6a8638e2e566f63fd3c0aef8758c6c61a9182a1a2f899bb774d597a79c5b7525f0a40e74c845371a3d78e651dad865219b5bb0833eccb00171be5f898a081defc724eef9a606c20a899dcbd4e713550fe6298c40851e5ca69132f7ce4306e4055e774f041722338b18bdc3f412e3a8974a1011c4ab251e11540204e88fce74211719a306942de8069b377321f6bffc52179de572194760dc2a79eb5aa8d52aad818a8f8385906c1751b93e00fb1ebcbadf217beb481bc16185292fb7369184154e58790d93e04c380cb198f3a876665c11494992c008bc3c148e5660a1aa2cf2bdf1d4072793e4e30c9f288c775d85905e83e30b09a4bdd62917d3f9728571c050f53502c931e2a2d1f0413df03a9702075fbca69d5642ca63644cd44199eef8b7b12072e130b1e20d53977aaba4272bbc3b4b07f3c3f78323e215a3777e112642d40afa1816df4b1f178fe4f2109277ddb522b19544289b1b1fb2c98c9874b392dc68eac66ab72877da8eef7c167570fc4bb815fa7d627c997bc8c9098f863b2818dec78482f614b80b390c920c5c91886d9fa7abc641922f94bc2476b9b2276337c132cb26088a403802ceec88946412a92e0921b522865de9016e4cada4f2e4b7a4af129a6b13b0df70a8d411d9632b7d079ce4d091c3a4f73d08f3d1cb481cf71d8ef3769a2b7a60071cf11e78192357a0f57d9f2bd4853dc37724dca1718c948064d631124c2d683abdcc251cf09ad78e8554774d238f2b394b2814a419a40e71c343506ff01a668fedbdcc1474126b24cef20f625b134e02f7a6205fab03d3662cb36b1fb1e1d97b3f4e5a1b2dfa80f854deae27c5c224b50f077630902c71c1f3bed78e0c144f911516758d88e3b7ada98309fa0e1c3dd3f3c48cd3837e6849dabe3c4759121746217e94e81f4e8d892f8779559e7207c43875da94df8a25322449efe8337bff1ec71f4eb75b9b612f694492c6e163f11a6f93f6011ec0472f72da88cd25a2359f9850f977b86ae104e952dcca9182a85aeb9755b4cbc13c9648f89d82aa35792cf7bc2ba5d03d6bae222acddd092e9bea4f08701c60fd840b092c74853ba6286b67c95bce1d738f8f9644dc7ac2f82a6d0c5feb9468e59c0255dec4614464c1bf8b01105d0aadcb3dc8398f20594ff24796160ed96e1a02f0919803937f01d3bdc3ebdfdf126c8d1d4a615c7a36c671fe8eb38047cafb577a5ed0989825fdecda94e210d0ef1063c27f54dac4d5dc381668c0b66c1a09e7e4102119dbe3b97b9a80ac69bedb39eda1d99c70acd0f1a31396c637a2d5d652e25801fdfb32e4ee7219833115715969500ba0b4ae92c7417a9b2c7aa878e126d988ebcb628de0d3f5b20f0d514bef854167fa2d26a59da1b0087c05e99dbab25e3546e8ae6f3dba8a0cb8651ec58ccffa911130c174052258412d5fc29ea3a3d4ffbc0c4b616c10d36c07ceba788187dff98e65eba89e71d7f7c8eed0066c69d22ab37ca5eefc55366285a0d0cf8e6b8603ba43219dc9eeb37ec7399e6f5582da48b5d05a625f263782ba91ee5503d971622d4effedf8177f58b0d68a23ff7d51fc4b9dd58614d25b4f0f086f83726026876fefd2f3d97a90080e3c3feedab7dd97dd3bb3a4ae08162a0b7ac0e56a7e19d5faac4749ce86aa2f47d10c0a77c0d1bdf34051689b260c96287faee55cb1cfe0461ac97a57da0210f64b8b114736d2d126325b2c5cba8325fe6d762db979cd38eaa1d5eff5d35c6f81f2499dd9785573de881d6a73443e5bf5fab3090154764240e7f9352900fd9d836bb40aaf13de1894c834cd6f4172aa977df211e4c06f8ef143afc481f18a2d632e46d22877e121d1691dbfb130e4945b8d9fd2a44c2d81744b662871136681b9a09eaed632e3422ce154abe9a0f89bca9028c5f06614dc3265b8cb76e5375cff6917db48d378dbffd7662c690013436d2c2956299cd9d1b439244813f560f18cfe4ef1f0b7f661d2a1cebbcfdce90dabc82e2de05ec104822c1508d8b277f21ab6a07d5e7f00663dd6fad47e95de6d1eea8397953a8f0724b5279825aae0d10158b8f7f2971b7ba9ed76f105d967d43f09e63db8ae783c047ab8708b4d3000e92af4dc4d7e9bf4af6bcfbbf60619f574bca28adb293135b9d3642c9a27ea242ac3e0b4dfb42673a6c8617fbfba6923586964f97d493e66bd559726a2b9739d5eaa08fc19c63f7b3899d8c6c354d9f062969a240f6cf4417787ede9658060eeed43da1c9c334b7dcd36921bb163e0ef2bdaae751232f77870d0c4ff330b369b6f37d0b0d779deeded453a090a6622720c9c3e771609bc6e41c6b8d29bb869155 +MD = a335e578f3635da8d1844aa7f8151f3821d8fa4baf7ed4af95d42086 + +Len = 70720 +Msg = 0bcb977da0a47fab9d58a2c50a1d6f4706e52252bc8250f3920ec0a8a38a7d2070c52943d27f947234cf8e10fec2f941544522f101455119ae149e3d580f073a017ec03ea5bbca186f97c7b22df90ddb02c8f94a5a0b85e0234f1d2e3b49af3724bd0277ff9f4824b877f6b37e0ad39e76364f65b01e17d35a87e68233829ea1434c97f5ca72371e7638c31cd83c74111957ce48e9c42d77b984a1412a00fbffc5f128c0ec7dbe8e10a2d5f425d818bd53f21cfdef46f056a90df574070defda12755de14f0806fdf07dd5434c26e6288dd1e18ca8ec87f793ec8a22b2efa2b9929fdd5fd95a37f37d916a11356e07dc2dbac6fbfefd1ae2dde7095312ee3b24ad39514274bd78f61fa63d67c8f8a3619d767254d8c3d3a0f1c71a0f1154e3a3cb0960930777f1903e83f54ced0be13d43cd8f9f1d84d8b83553645f9667c1bf54d9b35979d1cb4842f13bc98cf1e9fa8986c2e2b78951b21355904a8a71feffb06ff19cb4132ea694b8b7e58df0e41fd66bb5278d1a6717f29345d9d3b8c1ec4793c3649f8541339aa010a8d851fa3591421075877e416d39d72c135a85330c810fd1ba226f2d76bd71ef1a555c52c324d47ad58dff093f52e7ed00071f7beac7aac2a5251819f865f2fb44ed581551f6e99c4d87e3e412a48b2fa8c3d0c30b7f2b3f2e90c92e3ffbecdd2d868f6a686f491ee85d73fc70978d9a1474de30f9135bef5c4bca94d5e5273cdd09477a8ff7bba7abf8f779e093b4d74b0392ec3be9027b373f6372428d6bc15d5fc96c4ef608dfa03eb783eb00c78e5559341f596be88ac752dcf00c598014b46e5d692dd4f870ce18fa4017468f663b5c0cf0dbffd4c5156d7c38bdb32ddcea204a99b5f953ff3d6e0adbefcdd40804f661884a0f8fd328798c6fdc023bc1085cda236dcee137f6292d7af8fe5d1cb80e7d0f2e02e25e085c54c0f2ae736d15095330ddb96abd002fac46bc3ff449608ca6ac0d40920bbe001c51861f9a851911fee78e23b53c636acf66c2f95f370257258771316a84514b2c4a20bc7bb41d5b237107758b5a28c1dd029295678fa95942c9e13d3171c927cbd449efdda027cf0af5d015b4bf561b2044b579d4f95a79449ae6ccae792f7b4317872087f14255fa9c726df814f562de52b20f6e1c1f9f75210746aa458a2fda3a65b5425073d53d8e74e31f010e7d605411befda1ffb31b87cc13ed7de22ad9656817d665c43719f25ee1f02da754ee735bed482f039e7ff3bd9b3fc83f5688c21aae0bd73c63d7f0b9ce3441cbcfcfd61706186f3146e98e634668ceaa9a2e7602e2a94ee342beb20c12b3e47fd64da7cd7035099394a080457d2f382ade14aca81c7774c2ba185ddf1535bfcd51ae0b059367a43170eef0eba65eaec80a838a95c23eeee0b42b1cbb3e827abc283b2c48d776e811c31906de2bbbd78b07c138503ec6674619411526f761bc54433c321da4297f3d736aeca5720f5c7bbb16df61f6d785facfa070aaa89c2d9e8af9450d62490ebd6a29c7c8e521e4a00fcca7515439f006c09056cfb7f976a1e6b98b9f799e40978e9ec2d0eabb1803eb2ab7a7beb35171d25bef1c8d413f663dc62f5b51f0bad5c9110244eba3a0ab387738eb9e0f5044ef486219923b2ff3796657c95207277f02c9b2ac4fa223a0dcfc51a65b139486fe9ed84e2eb1ef5280e22c72e5ab2d9b210ff8917e804aebc1012b5f5d88c63fe7a67844ca69278b3c82d5dd70a374330d2bfc79e005bc93cdcded9e0c358d7892a86b82cc2d7ea4938d7a925db8a54eb065e7efddf921a0eaaac0ebd0e49238e7ebd8909ec39ca76f4d451a12b268f5f104e178dd23231bffdecccf115b7d87ceb9e8f7a6f32a9bb7085cfcf959642fb852119e484c680bf4b238d13763f56d2f58c23e4e87d0895307e7c078744204ed95a0e8863c9878b16e2d7aaac4a2f3f21190edfd4535782a920feff9cda97c7916b6deffbb5c6a1d5ad250d2462d20ff2c778d1af7027026f0fb10e32a42a0421d79091b915cea22be50dd18b13efd3ef1a1a50f63de7a2e6bd5ab9e54b57731f214f043853fffa7e1cea9e2cc7c9097a836bd4352729c2b49c2489213a9092edcad1cdd61adb2950c753a996090e3f3985d5d1e8b66e003d3ec70272ec75f22246d1353eb500ad2876d1aa63521fe380a3f0e08d8614e9f517baac56fb680f3137b5f0beccd0f479addd16f13d8e75046045769ff0bede70b977fd49c1e748bef00876f2bcfc9dc8dede55ec25da82194d3c1a9c90dc5c3486676bc7ea944d0002314e572fc417aa7c7e0da095749953cd4d330fe0fde1c521317e5ddfdf7ac900d8dd787fc7e0731904a4ab26fd0938531156766b841d86fc4eab781c29506e5e57aac3378886c7373a918834c4702b90f0fb4c8b1f5e1e8a2789b31a127c548d464cc3e186892b59687ab4597b5cc1e994a80eea1021d05d448f7b741b4d30102d29f708325603f216b6bbff723d8fcf44d349e3171760d82e234d94c441758964c8d9162c7bd583ddec0bb15980e9d4ba036a10949d34ad6cfbb6067e07995b85afe685c57934a126712ff981c5648c4ccf0bfd0921b02f696f3133c8ee1ff92855abe1adbc95bc78ec95529b798448758c8bf2f54387e0abf43bc735837df4954095b435e47d484db4d837072bcdabdcc286bcd9811063bd31521b446637d0850730780e5f5fd73d707511454aa528eb1778953658ee1b059d00ca65f4e21f5ff008a797abb1db9095d89be664bf4218d1de268c4975993d9db43f1abde1338eb19abd524817d81f9b8f115af85079feb823eb5bc14b409dba08e3e32fc9afa9c24333dec2f66f1308153c23741d52f500e65e155ed3b3ce886b735fd910063998beb58d8ad1e31351e756c0668a4fa46291e95970b365487f5847d13838b9a6ab498cff3e3ed6a90f91fbc25e0bd28543b32798b54ed784155bfbf7cbc84c89709054942b91dc4ca781b599b9368e003ac6a3438b1a7d19d0f2ea241223314a8f0f96fcf18f5666a0530ed7067ed4ad9e48c6fa70aae8723899acf699fdfa726d33be9a1e6bc79f807251dac46938f604b60d1de4848c15b2ccaedfc1ad1a89919945ec00dbb24fde6c3935817a3d72049b003e751bea7ce6088a5037a5240872acc7635733a900009d2f77cc26549a04742acca0f5863038e9a9f84a9a8977a6eabda070280e489da1af01e2e210e68abdf758d695d1a821cc9828a8e1bd4f94df9323ea0d74920c0622748451f4d00df4f063a4617f7d474ddf61a11f5208d2f7d25e33785e74e23744401eea62ff1495a06d890cc1f80fc9ea53e1a7ca2bc7c005cfcaed3e59a6b16ee521100dcc153c81e702ec5bd0e1ed434fd91fa83119c4a7f94ed096c8d0111cd4197737bfb6460f509084af70741464e605eb5ea11f72335b0dc6fa3ad4b2c8ad966483524e3eb34ab06a2f5f2ccbd996d6af60046f553265a634db385b231cd1f67c731c63a32825e1017e0572901bd2e9b04ec37ffa1fb996aeac39a9fe63d1d82379868d0fa882b0eefe0bebfda63abda29d76c7bd65c76d98ffc76781583daa0e291930d0eed19e8731cb0f61033eb10abe96ed3baf0f7988486a0a684475ea70e45ce59355a3186ebbdb4366ad4f623d349c46d1560278f1188a092fc30b28104dba11c36777ad09fea53e7b1efd4fde920f6b3af530ba77e2affa344e6dd140c7c94bedaebfcafd6cc1471ad2b8e8435958d0b5072adc6129644402612e74a6d5030a7e95fbf09da8b7f3d26312aa2fed110dfbf6514d516f1f7d3685cd909717efc402b7accc8f14e1cb1e4a8b33e8efc0796c5d348bdd266a0c3d36bba3b5e2f81ef67e52ad2643d7436ae392e3f2b3dfa982a6552648e1ac8782fe892c77d8a451d6747e1117b820e354e8ca58f1ebc724db6c239b49238f65a447a699516b8d233f149fa6b7d4272148a481f15afa2f71d3092059425e6b3d1d9ca488d71e0b097ce937ccab4a8293d2b15a5b925170f70627fbeeb914c8645b87f3697d52b65b3c6cc6f1566d9ba16f99d3e63ca4244ae122f6da31c94f71ea7423c9b8cc17beea09cdb34dc00ad09bb85f2fbe44c1d3f094a1aa30fe38ec46fbb6181dcc97aaf26adc90e5e438b7c3b78c969bc5c228b0f79cbd3b264d49fd891ad310e6be8601ea4408d33cadbd93f1ccc959a9bdcfbec648a1b4c3c5017a96d289369d14f68512c4998a5be258790190268c531d2f567b25e6327968b95acf6db903720362f87ebeb17fa47f2eef61874c887458ce2490b509389980b7fa7d5cd0ebe83261d87892ef37b8cc87638c1289e26ff932b5a196693bb6a5a3f63b106f64820a69a1baf1a1270b6328720bb28d3eb886e366281aa4b0535003ba8338f311b1f3e0e0905b85d21ecb58974af7c4d1e08a56d29ee24a4ae2183dd3d036fa67fa976e11a320fbcd557dbe4fd442af607a6c1377606db8400556d8cecc8ae3cbee6d77b16df2718d61f2b0083233cb5ee8b49fb1371d7d541fa45af7b2a55dd1ffde844c5b309576a6b2d46cef3b9711adfc523c6d8207dba3794b0b3d36b70e91631a5ef57bc63da636a1ca55daa14d4c9be1658e3bf66b335e1f65c68f8dc655b3b045b7248226e3169ebd10916856471bb3c9139bb76731bb4e93e94050bdbf28dcad2adb67e6dfab21c1b9e05ac120044fd38831c97441295f120fd98e49203b0601cb00d5e21e9ce1548c58071269ee1c11768eab06c420d76cc4bbc4fd4b72a2c012255a9d023444023258dbce7721bf0f4912ea834d2a3e008277634e735859849ab9749c3d39c04736737759ea579f298a5f069e4ebe0979d39d07b14a6480bbbf4da25421f5fc8ff328384935e842fcb4d36dac4b44b035328d10da332fced20a52625942f14f6902f7bd10ec6c21054310ae31c566c8df19c81d0dc0028a540668331032c43f5ee0526455705bdfbfdf8736c33f8cb9b413fe9ad0739549de3ddfa31d53e752de15d8cc6b542fd598c4b7a5d52c3f19709b6108c6b04093cd1b5920d538c300631dfb63d72a60893cad1259ec1df65e712acff56518acdead19454adc53fffe8a532ab93d458680f7f337e18c873aff524c7bcf101f32b0fad2346fa737e673b07ff73ae2480a53773188db1afa7582707af5147c366a8132b0972daa472f2671ded1778a94845726d295952bda4e7e7820dc53fdf0bce5f14eee036a24327d4b0a59ed8add6d227370eeae43b92e49c5e8921c09c0b24592f7c97f7b3188eea87ce10b57652d4c0976e484d7199d7ad63ca6cb4448e326a46599f032019b0126c1176f94de5d1a456f17c77a7df49845979ae021dbb81fa1f2d0044317014b22516d78b7ab7533b3c408d48258fc288083df09270bb987284a1c2a12d4243347b843b5345efe1ed100383aa32cfc82138bf394c84b6ff383b5cee015ebac3fe3604aa39f6b504229ce1668418c7e5b7b0a79118a3d33fb60c078c4e0afd1e7a1e3d2d25d4334242a6833fbd1da1a0b2399c00de133adf53c14aa26f7a36db0efad8cbff288e26b5f791153f8a82817b9b468f861d14677620cc3a4cf68b8324947c8daf3af135e357b2f1f1a79411789e4e45f809896089f3365bcdc5249d23b2d2791d5282f9358d8edabbbbffd712095c2b1c1fc051f3002f0eda312ab1731d819a32b869f91163ced88510eb5cb1a61747daa7e2c21c10605a5b80c5487c9d32f5d4b3cfbde09f1af337ec7f26be3b28a31be8163b6cea714738fb1ce9a5fa8d94ec8ddcce0b0a1934ba98e3bf9f913647c52b85454b5809dd59ea581c58fb397e638cb7b3f86c74a2f45c40afbe70ea39c2b856672120d025a695a069fd69dfbb1ff989f4118dd346ce7fbe7c82a0ec83f8d7b22a560b702608431d59fa0c26540a1c791abd34dc26304b84b052e8e32d51d0c11552e18ee8653ef773b8acb7500b3cb0ac632b3a4c0306bbd29811783db4eaaab07d6ad574a7cc553f9f1139b709a255326d3893c02df98a6bbbe452bd086e9683406dead1b4365f4618025591ee97913442249088986c1a0223261ab437a4ac1701b4780776c43f0f8949b3e7a1618c3b4ab6d8ae2aa6921f38a2772b28d415f32905251fd3bd1a235bacfac00a486dceedb8143acdf11b4b611f1229c346f89f21299920b56b1b08f7f4d32511965d7693f0eb326893dd0c096492b6f0427ea450e87d1203146748c3e9e51d9e9183baa42806a0e3d5ffed953aa0da970fcf891d0979fea501296b2952d9b09983082288260c8b26ffaa736e69e49ea0f612d6f25634eb827a87f790f856e6eab21336a7b3a6fc18590528fcb90509f33f7014369557e184c6a97660a405c87967cd7f6a967cfaa32b3993a7f2ac24793210ca508f89e8922fb86f001c8d5d2ee95d843799358daebc6d3cd8db80f618161b80aa0c730994fbdc6bda2898aef282eccd778279bd2255caacf53d2a87b935b8beabd4bd4b73733cf15592cbc1ab78a2e3931af293e53e786a68e051df45d5100dbbae0eb715df0189d921d0a04314a64df1294616e0bf9efe978c9e07a23f4af442630e53638752bbce9c4f53a09e2193fb771d4ffb2064f1ec09b806babb8ffca8bc662945b258109dccefe0ac5e3a3e18cb20441fa8f3cacd1e49e4739007ab567ebe41a4aa3b0fac7959514d9b1ad5afeef6ff32a07311a495f6a9b708d98cb274bda166b52241646a35ae6d9fe8e02aa948881d500c4fd834695e6d692e2425650c53751c352c2d692afdf3b0cde8f0c2bee5c900e40ad1c44a0b7dfc2dfd1818535fb7279e5a703ce048c717f1746901ff201df826cdf70c40b6ce09ff9ef15639cb161d825393ac0096d11c7b0cfd30b441007ff81db2d6f4694ad8cb8f1ae766a179480c9d008132f0f90694381415844e5cdf82846ae80e2bd8b0ba59f99383e9c7ee61c21d831d5d271f6381167a1851185eed89870b350560dbf483f82238a9ea58ac4a547a6ae543ad116e6b2517511c4561b5710711fdcb9fa0957d5b2cebc9ce13bb0c2dc09035f9c5887bde2a5750dc058e90a44b1eff45e617f20708b64c97be9fac65c867e54ba855af6ff96a9c6a029e4daa8b6de514ef92beee73135bfdd67d9eea2a713bebe25f6d9f2b92e839806d0ee078f46556e38e49d81608de4683de49848db620209a2e1e3569d71c8fa6813c0fbbba6851ea91fb8d98a0bdbbec4915fb993f7a33f8482bfa5a4220b59c6440fffcc7d44f2a253cd4a3e0e0a43a466a16f713336c2537fab6a7dadcf38b9e8078e2249396ced17477dcd23049945db09e4f3a31134983f530f7a838909bb5664215d88b6efc1e0b3ced7d93f123174f5c48bd5e708bb28332f3b21dd6f33359243eeba621dc9269ec7ee9f2e60ffbaf158ba3a0cb144e0b824302710bbca0c0e80566caf698b7f64f361f366e7f923994c0f4e16b0cdff7e98ea01e781d8205541150e13455151b2cbe2645d29b6253a08eb908999aebae2f7c920a653f638f310bb1d2243e323e4cbd06095a8df566009df9fd9de6fc981cb6e21f1949cac6469a91850e7898c978dcc8694d7ad3db7d96bca8bf19991d78e49843de6440125d67f9e23a2ecf2276c3734cf58d8218df210af1475b4ba50aaeba60fab84cdb3c19f0d1ef865db30e190f9c98eb8c87eee5ecc07cd398989bba525db66c7689ac597f3a76a8cce20a87a5407fbf798f718b69fda7aa0b5ef3b367225aa9468475cfad0517bda41931b43b20f22fcf9732ba8a901007295fda3f02972e9645355f22821a1aed6bbf4a49dc2438631809f71b5661ff137c0418062aa47a5cfa0232fb0661c75fab3b1eed8d349b84db4c8956d558bcf68bb374b1e7318522ed54b50142c3663cebf77549583861baa1c8b0120f5e8ed7ded5b8e841269811a794b1dd3d263eabb45a16044418d32cf1e533f70d59bfdefed3aa52416bfb51af28ef36ff7498d58dcccbc759bc3903530bdcaed633953572131398eee8f6098d7a34b59193bce2feb55a3aa00cdb664fa271df72d25901c2ffba625186d161caf04b02fa6df2f98f7e8c0420f1007e6e12bb32ea20526d77fe6957702bd382edf4fbc442e88242c98d29cee251f27337c3824d4503ca9e1877e61f55c045947eed0ba372eeb3e6334bf93fec16f76c331e8edb8b6507bf2dd4fa63082e6fbe064344499166cf0d5620c30048265891e889a682c42d52f63e7c6dcb8f5b99290c5d6e5ba7371cdeb87551b8fe6b5d0be06d94eaf943f36bd4d707fef4310bfd18a55184bd4be382e3b0691014cb4d02a3331ebc328f3248764d90a53f970c61b282b46ad9896b215f3bd4b09430729db7410da075f857b2ad46cf677674e67d635c60b506d9fee1b27c5a3f85811205a601283dcc69a9d3002a8deda3b2df7ab29c1e0e4923e2ed66ddc266f0a67662f8d9393c3ec771d3f76192decd38408028a8b41dac4f606b03c4d6ccdc86e6db33330644d3fbf8da1a53a6e3fdee51b64be9ea893646c0840f9b5c1a510ba998e17659fe94ed830ff26991a43abc5945a6c78afaefee4a5f14c91df7581c09c2890af81288855d9a06091ac88c8aa255beab5a1ae030462599b6e10cf7a14c81b457ab27b8accda4de9c0bf8fb40720d1dfb248e10f5fbfd27ca70003883bbfce9c53ce52a481a55038b2adb90c612954a21ae018723b210456d917c23a89e5cb0bc71f6e8428dd4fc3d401a5204ca16cd83c1194ea3b3857b070e28bff93dc891a414fffa836e4a5119145c4ae3e1b82f8b247e6c5e46855100adab145edf6915e5ebab66f205de8b89704a7e49a1a2f79fa1d9e93bb33850c037ae2ac0ce67c3e7bf9f367699b931f31a8bf81f50fdad29fed2ce2141c5ffaf73d80a0550e92412578672f97302cbc1dbc8c04e37f0d990041022fa3955e6362bd2bb17ae17becf7d062062dce2e25a7ba9dcbd9ea4043c7b3cedade30f8ebb254345dc301a1c84f7c74a991a81fd26c2d55653cc40b5952bfd3822871c7ea82ad4b13e1d1ac39b8e72f7857506a48d78f536fa0bed7503dbfc0a416da33e63022d0624bf3e3d7a0aaf301037995ff764b08299a1d3cbee55e16bf2ddcd575675f54c755caf108b3325fc21a664b7cc4faf4417d7193fbe5f53631d1ec250e74bd48b1b3d95c734d17d63a10c8c3374019a835ef5e859dbc2fafbaa79a9b1804b74ccfdaa17e7dfab5f6d76af3c5c58421848554367a2ad467f3a8136aa03883f7a1603ea5dfaf38a712389d89ab8dedad19ae409bfa19db28a298a9defcd67ed917215479088d8365e8cc2ceced16f906e81f38e17de11d0c2ceaef59d97841d5fe71b07d817f577ccb009db012f742d97056a1b98e27266d033d388dfea49998c7dfd735c31b415649847455b58537af32f31f86934293d5b60e29cdb4c1d28c13ca3d3455d7cd7cd4b625503d6763c2b06316db45d9c1d0c5bc47ab9486891a62df66fba24b686afd144532231433ee69250c29ee335cd8b2e5f6aa263939de257dc8ee40cc8eab433d387dfef2447cddc773e51505b177fe19db3be2704141ec33e7aeb9f1bcb8278f938639a801e88eb8f2af52b75c1917a659f341b24be01770579f66517f1c1a89db0d5b9be8cbec87eceb1fded9468039e742dc75b62347d17d42de524241acca7355ed5485917792e72ae4d2a58ad83327bd0b412ca5edd5ed3b9a7ab2b34ebfe102675854d3d08855e14a394d5070308fc4669afbc289dc1bdc23312cfb90d8c895421dd2fd57c6dd90a8793d21f8a083fb66e9c0139c727dc6f12c3d84e3a38e71162b8c98adecd2db8828f199c201a8b494c3f613b627a76e9cb240e9d7bea7484be7ee101358ca0471bf07027cd262a268a02a3d377a1d458e69f384ed78a76d6bf9740e589947bdfdb1ea0689a146277b04c91ab0d843ee3eb9b20095701362eed6caedce3cc06a7498271068ecc7c614784f16b2c0bfbb263808c750235fcb5cf63f38e4a1c88c8ed82aaaab237bf0ed6148cbbdc1e55eed6b5453ae00f1092ede5d6a5c66c4b6a4f8715fb0c3b75a6e5632a4126a592bfcaa41301f977b9eecf5b20c65fa495b3f8fa78a2a7c1e450fcd993a81188fb4cc9b4bd72565640f1fe2b999b1eadafce6f419c4688b25635a4de8e96a6afd8be5a4d0d34fe92edc201bf09cc0a6de1e13cc64990b9f4117d64dae4b4ec02713c06d7c9f0f915088a607d38012bcd7215e8ef462741715e4fc5355da9eb6a0def53baba4d50c5d970a4cfeee18ab5ac91fa265db5280f84d34e57c11dabcdf6ffcb5fa8f40a8ca89d541cf2142e0ed57efad254df76b8cd3387a9d8ba35157293f62c5b8c2f51bc39f8cb0d4320be3603705af44f34537f94f8916a259028cad35b8a9abec8fc5e6b1846071666af1749e52805ad6ac8e3212a783e09c4f046e882e22e32db74d65b3df4a8340ac7c077e1a34fa01eff41ffa4c71d0cda532dfaf39ae08f73a36c32ee3db74613f078b6ea3399d15adfe159eee4cfd6d93bc930371c767d95706818b489fef38a11882e8a40ade825520a5591391c10c98f60b3d5ceb8a64bc31134164043e4761238064832518c8840051b142ccc62b2373bab551a70af9c84b0af9cca4fc0dfdad067ac724e65898f1bd4ff27a6739d1aa23f40676443919b8db0ce90ea30ce5398783f666c1c332891a8db9173ec9122dc971c1c5d0830f1f06035f8dbdc4964d862887772598bf3b2be2ed2fb74973633dc74a323a6836c21e7586bec6b5bf5d74c100d2ac39bd8c53f835206b4b63eed36cd637ec692f5676cbf52e38609efde5f5d915a036ac011525f785c54f62353ccb1c4361063750c17f31389d45d3835c2f969cbc10091df204caec4fb5fcbadc7a72e122b01d256117b18a6fe5eb9249e6cff45a4663577d1d15c0851fa1f434e3809dcc071f68e82dfc702ab145af31b3cba9054a392218c77e8ee00ce075c8aeabd5a76bcc7fb92a88a64848804e960f301737abf922579c4bb3fade36c42a348b255f6eb2fe7675dc89630c19d4f96183eb7bec31ccac1423dc20242343bc0d75194e70615982c86e85e58c70e6de434d824c7b6175a8c79d641a7f24990092100e1f213605707ac5485a4a3408b73ce37823ea06d1b01f0ef8244fb9189a7ad2802bf1cfa6c205673d3bb5c1af16b6ec399ca890556492fee4f8066f66dc20332c0f528ca1fa00cad0f46fa83e7f39de431147ac7528bbe3d6e033a5f8681ac84e33c40b8b8af566a03ec8665b433e10211c37a9b59f02642a7767fb31a0d2f88333e6bac7e74bd12755607a7a154c58502809269b1a0ee67c4813edc728e14a578a0b18eba18c80d2e2c8531f67eced5ccf3c919a3c29e138bcb7ec1d62be442790d1a46b5c200c4f61509ebfbd8865a37c32793777fbeadc6fd474a8d0c26c9ff2bafbdb49beb9d94b999bdf78b747c0b99b4bf75fed79f3bbea15fe15a62a1d2a277d902cb1301d2c1408f34be20a40f1c7986e5687050b3b795e8183d2032ba1b7a83e679005976d50349f89a13380cf57dce0ee41228f5902acd7bdce9e47f3ec1a4a7ce380b499cecd38c47d4a2cacbc881399b448fcbf069f65260441fe8b253228ef1458113bf021538eceb4811476385aeb48eedfb7f584ce5f0ba4bbe2039e7e30aaf219ce54df743b2e194a91155c4b55878aa4ee602b57bb5d2d0c92f79d9ee43fc55abb7d662f7c03dec59d0a62496af8b2e8ccd6c1a5ed71416d1881de2f6c2b6840adda43c9a3f87baea2c5f8f98e04ee27ddba064d47d08869ed22ce945af64157ffebf6f7556486525cf87ec04144a2ce8b9a57926cf3786f7b6afd521338f72d3c230e1d02e0655cf5e262322720575970f83439cf6287fa6dcad90d376be02ced3fe7cf3ee4cf2b384451b3a230926508442a97d1a63da71eb2e01a29f792d37d6312625bf9fa498e7eabe944edea5dcc0eb92136271fd218c3b10d8d6495bd876d2c9afc989d3452f20f3781c0a5c036c86e8a4f7d9527e66daa5bc45b4f47759e84cd93391e78305eca22db517b18c3019927901233f4f2216a895114460dd277b97eb2640481a1158b3fc408d0e41b3ae78daa7d82e5e67f401ac658108d28994922dc91c5ed2fa6b0f2de5f2dae89e4c820e117f8671de7e994967f2521d263925e745af9273682d9c08ced07d4a98fc985f68a0af512ebb56b33f1fa788a8753860c1814ac405a743d420ae5f2f4ac5a213d4c311c600b32134169070d9b44db3e16618ef8e76e0eddb0615e85f5baf88737c711497fc6fe31214ce13d9f5cb7eb25bfeea9966e08063a68c80a174c232c78931208ec9f682966060fa5010f6811bc9bba1ad7bb0e6b5289b8fbe3d078857228c9d711050e80823ce8b06b0d6a564d8d57e925d570519b5ca7d7f5d85736a7009f3097886fbb084a130c27b74d0d4afd6e80fb5ddc7d675a2b2a97d44d94a9b308a1eaa9fa5d5ac60504e19d7ebb47746 +MD = 9611f49a07ea955cab6722242f1e7485aac312502c6d0e437f33097c + +Len = 71512 +Msg = fabec5e8487dd03174269006f4e8c43d1862df8b9016ae992f1b3c5aef13f39d345d03de558c08625817e783fd51f848ff9c6b3896dae470402569f4c1c07e43684d8e2e95408de97893dc631bbc6dd3a3dc2793d3398c32d1ee99c52de1ed7d1ff62e7f1082a9ef5c03384e570e69078e88dc444f19ed066bde93753a5e8875e0c0ab79cf3ba29c8dcdc3eeb830350b470a52f312645015955d21adf01f97503313ccc5d951c117925b45e8460a190856c851472500fd87d7d30915580d6239a0575a0b36ae4e89f31386e709845c26442ca1e88fd73c83b9a81454790e3156b0f41ef2ef389119395f4d910a87488c979c097f58cf5531c4440a135c0b4bcfea52dd230bd9d1f0eba6648e50f92363da8253b489d28fba7f10b3f907edf9cdd7d9624692785835914f9187e3c436d29245452e28c734467272d7af849a8378fdf274028dfc6c11b4c49d24cccec902494da89640958afc26d33ddcdbfc31f7e603daff034f56acdb6c500c1201241b86024393d626da05229cae2912fa4a731a765de6fc585e2d8eaf71e8bd438e44d2cce0cef4616b89ee33f23d337b18131fb1c55f80ffcbbd55f5ca5fd67e51a5b41345eea12e87af1302d1c24569e1007f1eda11982ce783b9a6211a6399b367b43f3b9ce675749f186f135d51abee61c22363a54bc7f8a8412a3fc06f7cfdb25ab88a80ca1e7b8285e47fb85e29875f6e2a2ac2a2b8475376eaecfaff0f76ad2fe6fa415512e480e3c8de7b74cbf4220d9af511a3e71cadde4cef701d3a6881ba3253888f37f7c0b983f84e9b797cd126db8d3a583dbfde03b912c9d0e5195583025cfc8176fc6b8f7d95d7dc1b68944255bae4c9a0770d6d9a1bae21f8d25213bfde4632b83aa8ee1d7dc13e990095e87043b7fdf98d62a255d3c6165bdba0f1d2a20daae3faa05ccd77b2cadb8cf9a094f25dfc3149062c5402babaf67c66a5a16dfaf2e0847a63f54d5287c954ebf3298d7bce2ef32193fd703112b1fdcdb8960ab51198205f8bfbc54b7d4ca0916797ddbc7cdad3da5dbae4d42875a5fcb1183fe50ff216775b48a842b44ab7138646aac50c1c315a14f2284b0328be1b188ed632f5d5ade95b44bde235ace29ad89ebc4189db54c93f0c023dabb48e5476629546ca2b2ede1357ced0075b694ee408dad6f801854e67723b5229ff5ecd52fb45c696dbe17d0ceaa1b7323e945632eace2c63750c11138b9b3384f375ae34c1ae5d61cd0eefcd63003dbf3caada4aad5eecd11f313bcbbfe988c4771d20a41c97b134e9fd5bde2cb10ab53ff504b5ba53be4be73cf41876eff8f2729c4b2b74c96a1617f6eac8ab7cc71c2ebbfafa787449d8b574638018732c14ce3b5650310d31103f40c4124a2b1cfcf045e4a14e8b36807122b18d0d3ecc357242699cbb29ae29492410447084b05e6fdbeb32a65e2c4b038e05c7be187f5a46f9ae967be588691deaf7e784512c4992c53736e7b7d442530088b591c8ed8d32a74ac6d70b67d8a3daa082f05837c6414aef35785cd66c4ac062dfef18bfd51e9668b43861f57fc43b339d1b627adc64b33bb5c315d9d2ce15bacd41ce9d3bf20c2ee907b1d7656657dac06d369d93e44844402fac857ac849b808edb32ec59652c4ecaac1b8927274bb744e9e47f3a751325d24e7846e21a286175d8f1b7df2b053458b593e0fd1dbfe402660200596162d950a907bb6bf694982f72a0b6bef6d037d104311e369d4ccad5d45d1d099df5c6e4a6d15588ce52cd2254ba79673d3fb1ba346da1624a64d425b15025c99f3e7724a47f85e6f60548e4ebc9706672864a7ab2941b1e99ba88789985ab27c9bf72973e5cccf4f20ec3ed94382c3b4b565a990b5edbb9ff906044d9582d92c1fb41a2d113ab4166e1a6a30a911d640c227aab9b2873c30098e4210d622d98fc745cde191e914ab92069bbab5eb46f597d23290e8b63d831369c83b21e1bb8fdad2caf52e83f7f6d4da58df31b81bba7b8dc77c1e23c4805fbe1e343f678613a2859ad3b0ad66df7cbb2a07e3225d76b880f3e51e76dc0f34b6cd65f85d42026584c4e1df11674ed1d3989a95cf151394d43d33ae568a18dc795c34136bf8466cf7d0898357052b1c4a2a000d674b7858b12dcf976bd8839d2e530b5a38afc6ff0746326327455ea54868a21493058d4b3e4c1fa05ecd38c0fd3b51936d6f6a66dbaf43482731cfb4f4dbe671fb4d3ab7a4218c93d771208c0f9a6e87b1401ae89d9326fa02d06791760a35ee462a67e20a357f377dcd214b8cfbcafead2bbece727842415e2a0c84f77df8511ca5fc15990e5e53f9e824439ce3cdc009373e6184e8ffe5e448a7d49fbd956327c4e198793692b0f2cb12be65dcdf946c6d82e6fb6ac5ad3b3121ca955176ec0c91ffb3d1358416117cd102126d68437ed373a8ff87fc620bed60ae02c101b476143caec9919b4cfe054b57c91fd096e874f7eeb6c50cccfe854ec80d96a0820b5481d08bd43e1c606d6607b2787f525255f7ff4baf5eb3ba00d25fdf57ba1f7359b7633c85d74ce0bd0c59f702dd4263805c24e4ca58dfe766d3bc9f8cb654572bc4ad072dcda525fc2494bd45532dc4fc0ca5aaa063182ec03b2876befee75fd392f7125388efd83296012fc847da1dd1f1cac4b8e8253715f1e98c74f9a032580788857f70f2a0684ae8721322121508f2db5a9a4dcfa96ddd4708360f4979c20daa893aed7526a52791b1ae4d9d54a7f61f96cffcde2cd0e78c128ca8a8db198ba3460a674211f1174312222e4383b9e7df9ede5b1a6a47f7fed4ff2c87016668bce37a461f0a540247bdf52fcc4a43ac639a4fd44a08d9f5e7731603ac92b18e3d880ff2d5b9d7cee6dbb2b7ff504f2df3b3abcd38b18fc98d1a5a96df3700e46e5f53d32cc581646594de2da53ee452d71078b0aa0b6f5b39ef514bea985d52968dcd51ebd75bac0f0f03fb86bb0b0356db41e469be8493321a858b945ccfc0ff3d05d5dc966b8e2b75a8886a70cb28b9398bd13d73d35ac2c47ebfa42c5f16ef9584c5c5abbbf300ed563c19042ca94954e0dfedd266962f15c24de3af133cafbdd18b6fbd53c1d7a0947f5a20366e4b54c77643824431c234db9f198ef51b87de748da27539e2f8b6eab9f76cf25f0a61c9fe052c7511c34a511b0d700d99be20f635257b773cab56e052b68f6765cda16ddffc7702207a7eaa2b89fe619f9eaadeeac27615b938a8ffb260329d66db3f3b81f00cf2442ef9703653e0fc166da5b4133f0e1940e6d5ce42bdfc9d4b7d61bb4da9924d6729e22aa434bde3e47438011a65ec8db8ff05d66894966efdfb3076a9eeb21b70b16261dcf43d20f3fb8c4b66fcb8780bc95f9d8daea718639dd3f3fe881465470fa19c485b09b9294ac81d5fcc19e3208d0cad1ad4d8a464ab72bab5405f33d48bc6634f31c9b970a815fc6d9cb8d5df92348e75ccd119ea6c375434dc3b8bff6cfa3e593d2425af5f9b72f8363d563022fdc6085e397fdc294848e5245277b0fc64b6ce48c307ceb5810668604f6efb8392df3a54b9df212acd1e2fe249fecf812d52171a4e66b4f3f04125e3962628fe19617275f840a3b7ef5f79dccb2844447c9b9a7b6c4b4b600fa99787bc859fdbbbd21a889faa4918d5922ddb7efef78d7a18c033c5bd7a4607c82713669449629fbc99565525fb94a93fb2a70a87d0a44e51f10902c429ebff263b513e5a0cdbeea657a7c3baa17490ee700818ccb8d022ce96c7cb68409820493d07ecdfd18dcf19bc4290702401b428cfc650d3955a1b181533c7b2a89592bb93fe182b81c16b9c30f165506a803d7437a859a6518a63b6d8169fa9472a7c04a7fe694702bfe9b71b7aea605c3c535b1078dc4dd2a822304537fb56069f06aadfcf873a3ecf72f2e5a6c6aae27c1c64c2fc80ce02fc7f0fc66081bfcd3b5a37a5381b0c1b392ed6f63da236e587c317b5fdee33c7cea3d9c257dcee85489d336002cdc5834444eab607250a4ba66efc5142cd840b65b619a1e5b2eb140cfa2477f5446e5d39ddb68eccf830fe21469cff95c6c7b50adf54cad2acbc64d0979454d9290f916020c3e453c2b0e440727e25bc8106ad054614a7e6716b5cdb9c0a5e7623ae0601369821652c90e74b1a2a2d80a548db9e14e09fe9aa00e377320ffd94db55a66446beaecadedaee8968297da9da96271d71411aa2fe81e3ea812a99faf80b58d179bbf14a7f96e04382027fffcaf779c984be80da16f8437db0e39a7123d9048ff71954acb7caa7c1903d994a1b73b9eb76df3a59996ceb78e7c269c104c592e7e75f3eba30802a4bbb6335517512cfcb6e2caee730e6c22350506cb242daeb217116173a8fbf51292afbbadd81dda3b1952e454c836db2c510140c0b861df585bfc546f57f9004a2078d90b6e6db1de5136c674f3909a3a85296b1967798995af6f435b3a6f92bff77a11fa44d1426ae0f6e7dbafac27b123c5fc419be52c0ea412c4b3cac05ae89a4c0ce6f5e91a456b1bded5370a1234cf6f6ab5d0253507bc6f3f0573ab97585b67107dec059812323e021e341ad839ea9e3d02aeca43356add48ccef81f693ed53d32ba1c74a35e8a5f7f3115ef834f7daf9948244c4fc31f5487678d3e70fb27abb5cb19ebf44e11c37107956d0ca999e1707e51538e0944fd4aeba21e7303d743f9d960c55a3ddd935e2b683104f22601bc951bc2d67243563b21dec85b9f0b8d66ac980abf711957ae66374355734b98e5562ca0114444e7c3d3ea430e17ec12650b6ac30a33eb98c880aaa9e574312d538629f526c871394bc76d9776b3a1595cc07ef723cb7bdc1641686d9e3dff486df0bdc9fd46f0d339c610cd7abb52eab4917baef281f2aeff711a976615de719d5b8e257e06e93df6987bec0176294ed6470af05e9d7893ebd7672d2746f6314b8e4410914f8500eb0555fcf52d4b0c28aad2c651663415423cf839c8166e0fdd5288931e6beba37fd546063d28e3ac14817c37b3254fbb6d6874c231ce6f94bc6f02b50da045ae19cff810c1af17b70196af4c6a23f10dd22384d14ab5204650ad597e4637b8aa23bd1025690a0fb457af140c5fa54094da35d06dfb15aab001d435f6b1776e1e0465394a1d80f42b7d95527f7af667d7ed65ff9e2c34345738ab402637aa8f92248f1989c55aeea4dd1012ada45d8c5f747cba6cc55ce7c55bfb1f15be16428eeb0558e949e124a8dee7fc9fc321d8b2d543a8e0aed3eb81d48c7dcb2f05b09bc18e9f73915abfbee8e4b75cc08b725a7a7f7201cfe167130926005173bd01400ef1962d8510e66f63cdecec84e382dfc9fbbfd810d08304649150ae70875c063af7e4210e4ac242b76b4258f67132c72c7e386b5ae669da4b9416ea10aae974ad683157124f7bbf4d8662a7fd7ca89c0acf85c4936d3e2028f9fa0e3a70d212cf0c27d57a68386e8be6f3e1834e0ce5cbb74deba5ab2d5b6286a321d61f3c6809aa6ca52fdd21d8da529e0f6f2d872bd6fe38e676e95b156104ba2bcb0051ffc10ca8cf18f66084a3930b37a96241f5956cf0bff06ef3d58d3ae635035b395e60f884591cfb1afa4c71e164183461cb6fc81a7efa841b244ef2d04565781c0d4f37a74d25337ac33fb4c99ba6ed0f35ccdc61297b71fb890cf22066d99e2195f591bbb21ae7a566e2246ae63ad475bc146e6aca5d7ebd8c2f037d9d4716707db9cd6591e25fc66b9f896d4cbc30b8e7b047e06887f386b51fed8ff49729324d05b54ff167e3035bddaa79d6154a033f062f690ce118818d4478ff72b11c8f8e400f21da90bb84bd0350378a2b6a7c4b7feeadbd5334d39b076c751f7e3aaec7d1a48255452e72197b434e72e7d74b93834b5683c591a767ce909804e4cab880223c1b686e85f5f8ac4b679631db999f7b0f09661f75237a02ad1128cc13d4419a9f941ef40934e0fe302afcf2bc8ef8cd02706f49296f5b0c8b87941f5e2b93a194947cbdff585cd9b93eae10c35125e3ec33a52bf5b49252f2a34ec3f3e5fd9fe4c38cb2b288f1a5b04cb475380bae2495fa11ae201aa83eaa0d60a21a2908fc57cb55bb69ed29cadbfb140763e31cf7c56cb9b8f4c824377a6cd1a31b1f3a21b551dfc16baf8bb002f4d8b08b02f5c64331a732b7e78ea42c69aaad3df01e74c60033aa01f59fc0efdf0857fa8fc4f8d8f2e305b29e6fef86abf2aacac4395e527d586073e7ee606963aae4f6b30ef54c5773172d164e7f51dbb18108c21548207356c909affff93728c83ec8965d24670761527076b3bc54a0f01a40133998f98836cf0b725af422d7694fb85f38eff0abb59dc2e7260e59a3b65db9de2db8a564ff59c05b88b7f21896fe0d3728bdb1ea75df6d9130dd268b0b32bd4c7a0eecb0b94e718f10ac6f9256331145b4f7706dab02b79b58918501f7819285a70496146c9866397a3a60eeb1d60ab26403f6db5eede92e27923bad833281b03c006a37211ee77f4fc88fd3afd041a5c04a0bdd97884a7124491336b62dd2f6c16c31c2e0c83c8916c0c2ea5907fe475134761b5dbb248dd71cd445995acd7ebfafb35caf7eac805789c2dbb66489bf9e2a013cb86ebda9c874458132a1ba71be31b8ae9828808c9b8b574dcecf29362f9272e9b0895fee80ba30938bebe0f6445a0860a2ae01d4682e48e8aa3127d48dd592c94ef4508486545b22ac1e8836db926a19d5f8748149da5f555170cbc03f5c29859998d89262ac8ed79b24fa580a41a8813aef24bac3f7623ccb765d23cd8effc49a5b41409d28935a62e37e855acf8841d87958a860ed1a4421292524c0d2db2f5726d1b8be32315209455ce551a4d301b87f5773a7244f165a736bec9f92876ddae2d21f4d312f679631db9f79285068e0ea6a422005c95a7e3b76a2f235c9272b758aa0d28d5642138e44dc5ac4c91f5aa0d93d54f64fb796698f6f42236a0550c94260d6ad6e8b8746dfc37ade04ce2e8bec8eca60abd5a9e4fe7b15c332ae53c4418ae1fb3fe9fb40f47d63e0cb1c6292eb5a0aaca35dbf960bedf67fe8cb3b50d14479de90057664cb319d30e4b1009c1dcc9d4000f7e066feee6abe5603115438b628be2a87009aac08ae3817360f93cb090a86894a153c1ea5fbe942ffdcb7bf0a7504d616a1cade2a205e2e53985e3d3cd9e408ff6500b43b30667567a463ae65e8165a5a62dcaabe7b0cefafa2e5bb8b93c443bdd99a08d7919eb7e2723f4df10a5d7efd4ab858ec45a924f335108d1ebf8d042d78f362a2a7f9cf184d33e3d662410ca4624730de089d93c659c7fa1ee5a711f74af10ac4f9e087b23d27ba3c792bcaf9b16f79b94b4f05d117f24bb38e7a32c2577d476410b9a5584a03184ad58182a43f197da8972941bc7679c904416e3136a88063aa72edf2b17daf462800acfa4d142e82d17392112e7f44b93a86ebd5fc44e0a4bfa9e53666dd148cff8215fb9b3994d15c67f23bcf393b667ce559e5bc338753cb3d08391e721831f7e1234c36b535b272fbb28848ac4717f3e7202a1d7e5bb7f5b4bdc28245a47f37a73db7c790f76c3bb838c041e04e13c713a86cc82c461a66986e9b3a5da1bce85bcd02f6d2c449de25edab61de39a31ff1597265452fc24670828aedc3f53131863af66a84838f83cb391051adf10f230a9c069bd2fdf8bcc56158437d8a263bafec5bccae1c87543085b9b9555d9ffde5d7ee12d99a04f01e73cde69546e32d5e4bf9c356767976de376c3fdf649bd20b74f37365ed2e0b031fb07b1213af301cbf97f8867bad145db9f28e52f04acd02d9dd667bdebe35fcd0cbadfdd8d46c6fb0ff1245126a543371134cb6e8f513547074922555fb9592ebe4215d7d9808e286f7ba9c23fa5eeac996221333e4cf889f80a06a3a2f544cd9c4823ae9442dfaa948989197a35b0a2745b772bb5f2727d0c8375375a099b30233769d061f024181ba532f54ae7319f5e6b4da67ae43b86a1500e6ef968d4dcef8a58dbb73b03e7714947b4363cda19a42c0541f184cc3d52fa32d8e5b58a5a6ddb912f0865e79f120027f4c0992297e2184e7cbe66ad178dec7303b362140f0a857348da2357b58a4464258e9e93a094ba79b5461c469bdea14f6df6e10a8152229fc7b0d5dcb156907cc4d4cfb5ba387d278a0ce83130b1a3487604c4f647e13d771a00ffdf18e37ee261578f014b49ead879878ce57cb37cceba81803fc9243099be5f23d762dd5a35796b6efeda459dfcf24a6cebe6309872a9d1a57f8b879668332fc46e1590dcd67ba4d206fdb7e11582d9fabcf3c580a4d299971e15a7f9630707740ba79a5145f6787ac21c2d5ea2b99ac8c13beec005c33df793fdf1b42aa85a9538af766224687aabb8bbf28134f52159910518d0f5da2329898af1612fa5bdba5d73a189c2401ff74363b3d33cc3e22fc505e02df5a60dbf5763237ad27d954612caa832d01bdce00a99fddf3ab471bda5b4b14195a5421ba60d048bc39e65ead0eaf6e7be6a35f876c51d0fbf354475eb7828b6566664e0cdff10fe6396c3fb107b1a32eda9bf93008bbdef2ac4cefadee692f6a857ea9157afd56d42e5240979e18e8efe68de5230443cf81df195bf2886ac7d1bf8479fdb95ce32d2080a9845c4c066611616c89e8536a4f93a2d3530bec1d411c6007ec24767e9a18ddc2a2c7b5c53a63ffd48a3d527805d0cf9ff80157f763a5fb9b0944b3f1c31c53d21969bcec13e44f654d8aa8c14a9e88060af1121edf613b7c7ca07c034f37c92311cac7459b9d3a69fb57bc0dc706b551b164875a5c5909f46ec0377be76e28fbb17040967795a626bb2df824230f3ec914e11d7282934e49072d4e2232cb56a321e58da852d47de5b692c3ce07c20bb35cf03c30fb19f0c46e6e27c0d9553c638ab11843d263a5ee131185d21b25055ab0194c5a6cf3d9adcc0b2c1d8314c282145a472e9f490889fb2fa7f90643120539e5b5b98027ef4c488dc300d911d14ae66a8433628e8cfe96768f0b71211bfb1fdbe015ddbf1ce80b7b563282534f0129693618c33b1b940b6da6d003c90985898433362bc246cb3c5d4c7c27e226f004ddc4a669579c95839c540f6542c2eb9f6617e31339573b04bc0da470c73c5fa05098a5fdeaf647258c02923e9430758b0bf5e63c2b36818b1e017204097b96244919dd26fd13f31ac4161f37c83a6b72fb330550a0cbe5f80e90b08cb0c9dcb951af168d96dae089ccfa7ff8e4c7147fbc3b09f4a1feae73112224afc5107b87efc217dac033589b2d147a28f3c1b9d7d873b9d234b72626b11f97164f37b9b5abbaa9b48006a1786eced76ffa0fa2a5d745df9264de933775efd2695626df6c0d0094c3e03b0447178f60770399170f3f1841dc365b3ecee5fa9a4fe3c534d39efaa0b0e7bbc931b1bedbe51547603d9a53a956b4166f148aa8ba70fcfc0213e51194239d6c385dc3c511643901c4586f60ddabe5f86e30eb62f875acb38f536aad3ac30b3799f3d50bca9a76af8c8847a6a581d1e7824b918e1e06f8d225bcb63758393804331d6ff8cd2fd43901f4a98dcb8181ccf48d0296f2caea410a765015b72c2dbc4f011af4e4cc5b8768c51d7d1552fc900c1dc8e03d6a89e886a8c0b11f45f04535c75d67d51914810c222bde4d9c4a1912246bd6c68dddafe37a8f72582c8b892d98c1b969bd061034345c18390974514ec971de57dcef7f671544bf2988056f7f9ccd526861391a27233793a23f811f08356462b6ffc63e5ca167025b0267de72fa099b9aacb6882e1645b84fe6796a878fcbc9ac9d6ad6084581a2b641b8c04fdbfdfac747844391350ced0aa7651c14002f7b015ee42db42a190702ee00fc5e6632d8b6d9ab3298a9169b992a4c1cf7b017e07dec3b2da778b79907b0487ae7c42f9e300b343c8b9aeb2bc516365278c60b60e8ec77bd2b56e3c08d309722321c7cb2fd85264bb12f110356132ba6df6b93630909a1c486ec26e45b15f5dc8797a27ee5ee89465391128d14cb340073c63851a9e9c02c0163076d3a086a902d5d2868b0ee6614b9e87630c7e358487d0081929034dcdce4e30fc3f2b1ff266d9596da252fc49f2b5bc3533606a0664540f78e8693febc7793c44e4bb7bb868f67753b0d56abcef11283602ada124213af20ad53ad2cb4029cb0760dc3a798dbfc4bf3300e238952363dbe6b07b9c52f758758be2c70accc265ba4ff7cc945987ca36a56fd35b897ef7ad5c1369ad5e0b9b1f591b5d28c1e584c3eea8b2b73100f020747cbe8440964c10df40fbf5b70a328ee92f3593c405a0bae9697d50b89dbf234ca214513edbe9acecb392f40255c73a98a8b0da47a55205acb49cdf64c0bfa59a9a7520e8e248d800f5df26a480c1a904028f6ad147114ac51491d1aa1c5a3dcaa04191d33bf238b882211c320daa5097e701d3d55d56d0aef3ecd61cf31732696e0a22923b7e357fe319332f7ef9d7e0a0b893d86aab6de6fd0e3b22079f49f34e5f318a733564c3931809e13738a56ada24296ef17748f97a869f4dac2aeaf4eb916d4075b02d300cbe0f1bd8df2f92fdd512ed8453185306e6611463728bfaa0413438b5871521da7bc123d655fcf5863bdef895b742801cae3f0acfdea35126ff04f7b522b33566c1be9db245840f0dd8ec04982c6e0d462e779543f7c7b4ba1b7df1e70b6dc74c2065edff266b4bef2cd8862e2ae156fe17a94852367f7204370dabddb9cb73f53845990f60f938b4b81311aa2b42f9beda42989d1321358fd212aa0bb652a7ec49dc23859de451f8fb2a2baeb6096202e6e20a6726536ba76d4b60f37979ffbc059811d425832426768c389e43bb2c64edf61252e88c7105790665277bc7d7cedc17e87da07c2bc7bac7cd1b6ccec55f200d54e2c243020475e22b0a45b2ccaf3dca2c049725e547285b5d8889baa94c4d7626895c0d8b3ef45d273e6fd14ad7bb3d30fb6216cd4f5fc56e88331554c6c6ff1bd90e52790f74d5ee164299dec2d4cfabb499d5602ab184747ce15564592cd6b93461a8581067eae4347672f51b0b1000d2c6d82a63de1703d93cf1347ddfbb633dfe75a4cc4e1abe0b63f32a2adeacb4d84195a8a525fba14f7e8f61af500bce582d40ebadb7d3b02da3a0ea8cbfd45c37c2a4475939b0b1224e7668583e463f0576a0993f05a47efdbdf2b2bb3f455b63927aa2ea79c4d814254cb522faf959e8730b49fae81b8f0e0b7f1f30cd6e270e698f37e386a66a778b88c47a06a39353aaf75a5baf9744d1149c9c77facd637a905872deb0e40cdef9a132d7f1d37fe976db56fbfca654e971d1970b47d1854aaf7ce036a8fc13acf82c7cb73ce7741c7f4ddc363fd723b9abb4ab75251900f12f630c85df5d3383ff810eb2587e046f2cc536a4e99825b41acc562023126af098815436b495d0d678556533c4f5c543e7b812c29a67ff7b577f1396b23c27eb637e53d3d92460270b001cc612fd3b4d68bcdd09c2d50571ea4350636324cc2428a087e7bd8785f8202791e3c2d2bafe084a1204e34ddc3a3bbfb8f0a63acc4d509e6cecc23da6cc402271174544d8b85ec64e2e8c60e836c45aa9d90c0cacc953de7f5d87c54715f38716db2a92190ec4d7edf11e8cbdea2caa9f86f508e21adad74ba48eaceb57b2cc0f99d368f083e2e57df72a4fc1e6dd06268501be10d43e2f3e6c47630813e677d7ede028039a21857aab3018989f4e13cb5db2aa9d68062ce41f327621dd3700ec41c15da6c4192e6077b085a6860849fa6b784d0c58bb76b937e054dd160cfdd93007887ea42246cbf72bf5702d842f3058d313c228d6834a40c18d7e50e0d50b332326df8ce56519a413069a185a1a198043ad735adfe8f3c4669e9a004b1d1eb594b76e10db1fd609063768b8f2b0f28c5a687451400e622d4ff6c4b6b43c7051dcc89eb26bcd8d9065e67091d68a67c777d369ce9f6a01f5de2462e6a4b9ac728bc8d6042ff4bcd4c2b256357dfce5ec3c8cb80556925fb891b61912a52b1fa1f236c868803bc030ad297e16618f094518e2e3a80e0dd7e02b1a3bcd2df7666ad090da6214f9444e759a4cb729b72e7c8d7471291e3306f6dacf6f68b7b50d278775807346c3c588bca3668a2f1be1fd1abfe4fb0fa8698751541897dada707287435f3eae01a079f2c34011fa13a0413133b3b07ae47bfc0f36cbbcffde4ce66098cb06b359819cb8885de1133505d3716e61cbb86dbadf64e5ed5aaf36dedda3d4587def21d55b6e513479f2f67f4e4bde73bf70baa2ac02e011e3518ab2c2b1848c06ba01084094bc584f11ee68fc30f26e0e1c31dfec69c3ce099f3065501a27da33cc6db6e6bc383dc308837f77b148b53a1389af0af9ff761fd0de72e06e4cd7876ece5db8553359984f3c1f4b5d4ffdb60f28ac923401aeb8aecb481e0e51e86449b9693ff06c30114e9ec4e195868c146785651cc868ec4671ad71437ad5a16cc59565d80e1165d09f120cc4ea7b04e7a5164504f793934be1fb6afb445677036b18d03b0ee14f48a94c537fdc9bdc725081e8e57210485b481bb1cfeb42fdcab28a34b3834a610c0584357cdc779776e22ebd2 +MD = 2fb8006bcad38d1ef60dcbe81d530bdb8da771a0038be26cf6ee5a1f + +Len = 72304 +Msg = f68438746c6ddca7af516d80c56a4ba84154b536736e9a2edc83ab47e4aab5f2d06a2e97ee220e2212a8e0be463118e0be71a7880a03cdc48f0a2e75381929556950653935c8ac94d032fd3d47badc726e32ed1c1a6cc15491e7f0273fae6896ab7e04e1a9276106d034ed842ece40643bdeb07a0c721fe9c96218e561331bbd7c3b3418b206d27efaf9d71b6535ecc00cbf172b46dd8f881fc3cf38066ee9d0c6d11d65b82faa0736c8e48b52b7878ec81b4bb63275b83b7b513ca696297bd97086e65023688fa66ce83b5b5f1cb9d4593b73a337014309c55588b9792a78df62a3b8615b7a2a6584a20613f32b2c9ca667b87bbc4bd7fbe517daf9183a89eb846fba21c82d224b663e6a3c75ad85ed97e642c52b191d17c4df5bedd9205604be341517d2481f60fb04915d4f6b6fd014023809eb34bd6748f5321d25a68632f838f0cce295cbad293ba3fee82a904b0501c2d064645ef35aa089116592c17d1ac574c65edacb39d92dc7a7a8b59069522c0aa0fe70a8c1e32a8552ffadb1ee0c21c88fb0e0ca0df42026e1f7d3182fe4cb3504212245dcc9d950675dbffc8cb69416af3e6f6e2f605de8333d4bd0a7a1266e813540da49f6f612d8e5904a60006883ac724f5fa9072c3426e2e65fd87284dba1a293121150c8f22e01e74470d3e33910b3474683cfd432414e6c6eca3f2fa4ebd0e3923dc19919f0188d91c6154f60626820cbc3a29f0c0ceaa5a486f16df2e728f805d530afafa6914bda6ab0f21f2bfba2957367d3e70f1c58aa136e87ed1e109911df8454dbd8d6e7c7628a159ff2d3954d9a06b9eed34d4f2779a0c5bc17f1905e65a7cdc50f4e29ffb88dff083f58c19a41669946dfe650c4c16e6e885a34a3956e806596d261db2b74a0fa819bf2ee256f71bb1abb4d2429f2bfcc78703f9b5e03f76376aa77c3f29caa4c328c09e3962c0e6690f0ec93fd147d25b5e07c3f602bf40e8c1ef8abfd3a953e449c0569948025e4d0052a64e8308fc26632515944ee5fb001b64c59f4554818df534e48c7749f7b03826e61944cddebb4ef28afb154208ffcfadc957df6ab222a384c48d80f627451f02250a6734fe7c79e680b506620f3a6730e294324a6a44ed368306f5a5717e1d5adfac9aacd00c6c77933c92b452627a84bdbece721e573ac08ca335b66abdcbc7727a3fb3f7cd9f3c3efc3ab786fa621fc752147042ebf4c96dccd1c787a692ae89edc6d8da42aa8ae09e7efa2154b6787bd894d37c75d3a782fe4a573cab1a968291d089fc0de71a247dcfea9614001567ccd00a2f873fe188b21fc41e4dcc05f8e0ed55d1820d307734ae1779baa77cf7994692e092a21dcb82c2bc81011f8359656dbb0f316584553db9ef20bb4525c7e878ec141a92a2e7dac3af29578d752099d237e9be887c4b0353f04f8831964514e7944e919a175a34a2fa5bd3ae71eaf8db3b156bfe8ec5100cb94ac42544fbb9032a049a10e18f3ad14cbce7fb00250cc952f6dc3042600e54b896d178c8484f5bfbba96afa81327df04b116eb964b302d1e2281b62d8838bc6cd842a476d74272a7f519bed172b64cc0dce308aada1d86db0cef08b6ca39c444739a4107153cb7bd3885d6d42a508aff94decab46e2f57383a969054828bdcedfd3ad6cf8e88cb89e98d8046a6711a1f7d5cba5953e03ea42ffaf5ad6da986a7d9c6ce56afc0febcac73339f73a28abefaff5fe047da7dbd519e9117c81d52309da0a023057ff1b3e5e979451e6f5d3c9249141fa668b4d233f40b3a4e41cfe6bd6af4bb0c10251e2a42b9ee1331f236d7ac8f3dfc2574816b8dcc7b5cc13058cd881495302c0949ee318de0de94fa3c3f9c19e1a59b3d595cee4d51701653f5227ab8381e1e3ec5a6185dd3ecf2c5ab4eba5c915f345fa89c78066314bb8b4a60d5382a3281061fe689b21ddae5f5026969bfd3758b8c1d8ecda016d72b56d71d0a2cc1f9df1fc723e8134504e8f8d0244ccc1e84fb2326b85172e323d037199b9bfeb5f092ec49e2b609e0177651a313b5f9d90a2db542ada6275e9754ac80810d267c9336fc26b7960e556f188fe9ac37d199717dd2ffd32e15ff8e2347ba41d05c6c7e55bfcbf6ea893b983a24124264ebe66775dcbcdd7bc73c84c679157277e92c0e59a7c8454612f91f758ecb9aaf91363890631800f1c39c17b8b12077865521cfcd54aa071b242461354054099a7a1f7177d680023293a4b3749079e56e38f42f2b46cfd0ec45340a03e97a0397fee8ae76d78335b0afdcf474977030a20d09c8fdeec8172bfeae665bda7c3d3aa8485c37c6a03fee80bb374326a1edc439d919bfcd116e7ca90a22c7a3f90ae4feb4e7152455756eaea6186ace8d713747e89ddb524a3b30dcbdbbb1d66ef1497a94fb9981116a939243f4561fa16f9ddfcec1eb2ec0f1fb126fadb4d25c84baa48ef65f6d62a40fc41b778f6a7c3d4a39e23269a314473de266554b283039caf50953b139d7a635cc730e916f8c6edf1ed94bd16fc29f7bb5585eef588894fce47ab05986dee598140125e67f3078ced70a8abce54a6f3713ac271be3c40ac31b798892c4f6e6c9233c4a091a26ff9bfafc7b76941a3ae275d85a4b4a811fbfd27c490784ae2e2b729b0773d0de47b90325aab90cb08710647345080d3e4835d2097e1246632041aa93daa133b4f5b8882c74deafbbd84367f393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26786620d8ab2fde8dfa333987316173cad2853922076c3467da48db00a8558ba6d3bdd96ab8ba27fae1fa75207b477a8b0a67f3d25b413cb6ba421da866ffe68b421cbebacd6c384d545927986787b4f589b4adc42be320afdcb92933ba27085b2c4976cfd38e3a0ebd1af7f8dc68488fb7340efe609809dba675a6a98b1418a1f90daab2b06854c683038c47c4335ee1fdaebf8ae0a91fc0813d3d12c30f3fe2103002694e42affc0edd8f8d06312074c1ec6870955e89e8d6da96774960a5a8db7a25fe93647238c66fa7d28aa7b4cf6cb4b0b666fe70db0b1558df054f717ac1b3bc786915c60213837d1f38e0427b67cf3f663ad3fb1f8ab42b53df24cce12aa26ee0b79fd3e35ddfb87bf823f3fe1905be87fb23533eb97fb9dabf26dd647e10e43d6548c0620c4c01efb2b7eee2e91dd52290379fc00240a77c8d9ecd8b26c5c6975a59b608889200824ee55cae41e12b3ee157082bccbda04131d4c3de8889bbf78019dc5b39795c3cb4f565eb881769e3d6cab6097ebf4a329310e8e60d246b64bed25be588c9be25cc2f30202588361957dad0e1820e4d569c9a632a1d5d7fe6fcca5a2edb49cd467fdae6d582fc3be94ccd7e3c3f7252b632b95d3221fd9f85224b02bc9bc232a6b340ae93063b205a9deceaa11db301583eb7fe877fcd724a199b7a1931fd944d51a7b1e0190c8c75327f399884980146a9da6db0a192a13cc702ebcd03bf9c444258174723382741f3ce96a9dcebfb88596bd335ed17d36315ca7d5e7bd3f2926c9b074d8c889ac6c920275d8d72962438b1579fcd23b1c8eb39575600003d3fb9b8a97cbdc18d0c9abf143bfff67b242df62275a87de3723299a23df90d255410f6265b1caea71c50f186cc9b3e518f1f805b3fe6ee1069d0308599d0c354d8589ea672121691fdd1ffa596c714c16ef8992b86ee3ee0b6af4729f4ecea6fd37bf8504a08c0f3b707319823ec3e73c89f87bad02a35fd60b525b6d5b54a214e604c4d6a64757353d8ce88fb73850ea5fc922fa8019a0c6fcc1453c593aa0f4fefe2c55a8ffdbcd82e209ca4c2b13b0ef704b393db37b8ecdb5a284beed3e4e11001dfa3f220744ef06dfda8438aa10978236d1b20d2a6deca405eef2e8e4609abf3c3ccf4a644bd06fed28f5dd7e9a1673986c73934814d810e1d39bba1ded1a8fe9a5dfc56d32e571b44df7762badbac8c251f8c25ef42e70c8cb2fed45340ef6b8cdf74f9caa8cd0b7b22fbf1bdc12f6473ac826d98c3e682d4e15df14d5e6982c0d9c357d0344f189edf504d995ad90b98f584d326db65b71c4e41be7634fc8a5fd351388ed9c688d59fde3ef7ae90c8bb83f8203e8f4df48d82130573c991cd90558664ab9f18a44ae90d8c7fc63de204dc471c8ae984814f04398cef2611917ce8caa2d08e2eb4224545fed8a9c9a29c8ada8fb2f0f3a6895c1d1c9051621f4a1385bca5aff000883bee5dab5f1a50ab1518415eac82ab6413257cfe546ebf235f1f78d10946cfa25470719ff11a34580368fa35261ad707b0bb76e2371bb82f53009ffda4196b981733025d66af95ccde3481df65a1739abb46d0e4005354957790f9d0894f1a930da0d88cc6c3bd2f2de39f057101c747bd2e53abb9fdd97e53384df3bfd225bbbc1dbad51a3df2a879dd1c4f53201b343ddac7e069019011705e650d4e88d437ae1372e069057d5f4989c06412e8b789c3b4f42a1947c177556c07c73f5b6e306bebc654bb03a67d255152edb63fe26fd723a132d0b6b4d78ac8fcc999323dcd790b7fda181fb42a959c9c91480fe60e028f98a09638b05a98dc0bba64f4873762dd65198941f18d22d364f9cf3f098dcb609f1b73b4ff28060efe43a98b9595aec73fba1551a3cf535c73cc53b79414bbff7f4b7013e7685cc89c0b6fdeaf10e333d764c5371317b1a091b3dd5fcfcd58d200d9943bb1432371acbbbed51cd08b88f3c0a0db898ec3078556731f01de2d42e96de815a4e0e270f7fa9e5826fc2d2e5c75ae254c5c11fa195c20df736fbfb804ae72890a68212f4571184f13bc528dda2cf7fea6a823df136ee9876ea9989a17453c80290268155dc733a22c3a810d348d844cdd9a821f3c33d8ff38b33f51ebd94ee04bd7408a09a5f83ab99b4216343f5cf93a5cb5235c54f42f19b63c464813ae93b60e30f60fb36dfd020a1d10a0eb87eb051344523b7845ff5bda18e0f59b667fb2d0c1c238989cd44ead9b6341380e0c86eab813a048d45845465a86bc187e8e894579544cfd8da7e7ac4377dfcff842050797d0556ba8201e238aa26333fca78194e3151389475f13309eb442574d77c9926cf0208ac9412f98309bb393eab1e4e6846d55e5d2e21b613283317915921bb4bcdbca4d40a1c0ced5d974e04f96f862e6c5d9b8361a47668a4a75dd597b439411f81b5b142a18ed00c46ec4343d0631908368ab7beede682b72d62a211a895cf2b1da5d4dc2811c3ac468e5a08e557a0a11ca66aa452a8e9f641c0973573431e86dd1faf45341830a412ceb9b712f66ddd5c790cb0971016d870f21591a8e3d7a95c6db10c4a14bf8a3807f2eceda1d903926d1e421fce81d42771bda4bdda8308f82a8a9fde99c8c522d495f8d9fc6aba3b1d3ff75136c37ff1b9efed26a9a92c4cd08c8e6619d4fb6fbf03896c689b67d2e3b23edfdb54425c453ce977d3a299c6ea373675177c837b11dc1d1978f3a2e66b4597104eacc1c3ae151825eb07c802f22b5680051803e197701275a00bf1e21e4a8e96e33554b45f2907c542513d6d62d93d1b754fd31f9a7007e5604cbb52773183d84b9691cad2b916ba8c177072c6b178abea8c97a1a54c6c0d4c1e85b3f0ab1558ea48ff639365e39a3ab2f7cf985487b5d746c7f44275cd31c629d7833517c19d41c5041b3bbffcc8a0cc39c05222e8ddce06caa3ec7c9a1760d7274c9ef80729d483266e1617a0ea80bbcce17ebd2a682165362d2de15102aebf0b7ca8dc5463350bfcb8bd1d9e544d1a17cf9883baf983ba80ec611490a7f239ea9fdd2547fdc5d7fd97bb3243ba585fa0d71a07191667af418e30a6b76bedd05b32c673403e197f9f878ae61f7145050e948db7d3234f9bee7f171863b3043ab3b1df36dbc8a25b591496a9a01d95a297846e3667c4ae08ee3b8ed9f431a7a1aab991f08901e2f3b0ab790d6413cca1021325d3456ef58ec74ff27c075c7adda6968930c69e7df14cd8ac81e9f85c88a4fd5f4f0a76d89610290c7f0b97e0271df52f6812e2b5bc7408ab97903fb7e2167f84ea1590a9a74f5317438f786a169731ff070c733cbdccd7e0cef55e7125cd261134f530fb3aeb5abd69e1728b34a8f962be01b4758dbdb3068887d91acc3f8d9ec027dc4fe96aac6962d02ac609a9a814cd914ae2a4dd166764d634175df412781c3bf70a0b43d495cea9e5acfe3fca6fe6399b268ba19e9de45ef3f943716157999015cc490d4fecfdfd47929ac1ccde78793993aa81a8147780ad23254dd697c8d2bd190b3d9ab98138d53957e64c0af4ce8acc9a13cf559ef9a4477bc00ec34a625152ca4b2195f8eaf2e3ce03b46ffbb81333d2ce70fbdb188db8af9e56646ecd770c1ebc910cb592353465a09267fda4676bed283951bc6bde09493f69f5d672a2c77118458847bd20ada743729d6b31fbc721978501a37209abc10995e1f200490759d4db833fca39b20b72b17ac4ef54f848c2f08630b98532bfa386d341e4fe3e4178bf980e57d4d41aa4eb8abb1ae751ab00e859e4a0f5108d83a924569f16eeb07a5e3123d4a6965d608d379e634775d0f7e8e72fd6cde7c330796fa0ad479b3f6053e920cf137b3c1c232bef56d9d7430e8ed872b9740af920740fa08de4b646c12d2a75a5aff54f5e29b23e4432e879bb26886dc77bfc87da25aee6bf92e25ef3467fa306d0970fad2d74fbd9d74c0d946c81718f6a5f07c40aa7d3c0c681e09d3c43295129c2e56f8aeec8862b545710ad4e1e8fb384e1849fa5082fe42784157b2f8923102b693bee79f4b7c3a3eeb68568d536fc20bd825100e45b9045b1f29f9f42eb28131388b4c1210d24bd4d0c714c26238894e453cb4608d24f6ee2caf61cd717d62c7cec6a3edde4c2f2ea68ed8291c3fd640e5f6b0ee6327605aef52b22c637aed9fdcd9b5d7bed23076f827686a896cf00843bccb5fceaa89c6f17ab3b80d9269e2ea2b4a79b64c94d14bf98c2cb1a821d0e4f4cc5cd795ba5bb8902d1a76ab20b781242a7bd1a2a469296c0e179dd9afbd52087c8c85d03b41cefae8f9a6ae5847282c1c8414bda86619e8b5d454e8e3f9145ea398e044549fbb22acfea6845ab967abe93c8983e8f0a4d5480bdebe05acb2600927f0d74d9d056e41d17d136e36c609594d37ddab2d509b906344415dfdb47475e2be726d6536486e193345dbe6ceae345c26b33b48a8a255858d5b3215a304b07051fefd1cd517fc7ed101ebf0060342145feede6731535e19c1f3ce1c0777837bb16145ed6b43b4aa5e2ee47df66e4b1ae974ddb3751475c6e9f177396635b3a8e7858dfe7f345b42e2b60fb427581619cc2f8053fb4e60340b3c76944aa60ba1fa501d779951bcf16680b4be202a6cb711060e6f4b6ae80c32be13563a32520ef2ac3c8142049e5df0741bc2694a159cbfe0d131eeced5f6635e95a7bf414f96d880344400b5c82e8b7a8be98b22d971dea70fbf6be4ef99a80446ae603bcbe2b3b44be75eca030d3c7a4e5b0d1880de774211414a13fe9e08986c94a5888e9a8b2fca92e1ac17a20d5caa3f7796d18a90991fe014c2c9ac8c0350801690606568dbf96f13c3cc940508e8bd5203951e349480c3505b196c3a2b3a9b3cbb09eb539f1fa37b77ea8b2c674fff25c79441681b7e148645b6861cf9710d9e7250d553638559a13138318b5f292a784a969c36165ff83ee868a13a553ffdc41bffcb710f74b70e577f2b29d9bc69d4f363d7a56d6c9901acf7659a28ea933720dc74b48c32e5495387240fbe52e2bf2cc299bd08ed1f56f92a7c4658bbf97ee7b07924c0070cda8b18c243f431bdc35d7d8a87cf2ab2c637ca8b46cffa5421da4281c9943d544a69faadcf65a12368ec5a530aab6a78d8ce9f3da073efcfa95f5c35acf01be42053f48ebaf7ec3c3542229c4f82f79c142671375e2ee28f9de0c43dd4bde8e5e4b3d00d0d94592fb2c79c0c5c3e174402a7082488e71abf85c4434049e1ed7e1ff054d1cf232f2567e3924c3bc513992bba2caa2486e085ea73a1e7144672d858724983088cb745ddffca04f40133c216c5a4713cf27c095255a6d93cd2be1a17a176cac1b739b89b810edb8dd8bee74b323922d715367448d21abec96f1b6de4e5a54f018cfca529d324791034fe325367b365fed655ee5152c440c404cff948a69cbad0f34a35105bd48784fc39c9b5cedae1b81d239ef73d6d05347923e5ca4c24b236d4698fd783e8adf218b8d4f9cd753f0dd2e6adc1fbddb521b65f5af33f05df3c17a2dd06b22692616fc37ca8ce4e2605dee74337f4dcf993a2cb7f49e707eae9a43d44264f58dfd9eba1e849382b3fa9276e86e29032799327af7d56adf27b466382eebec4443b63739c426473d5320096c3a14938a6dc282c527ba2f78d39593cb9035678b34f05f0faaf81e714a612132dbaf55202ca5b9afda2b32ea1cd2c1829aa76d36cc3c948045929fcaf44e887f5fa6c480ced3357f81a13bbf6dec7dd1b0ca73d393eb7640268e31a70b389d8648838808deab84c8b0a4a0454153075d751701ee068d62c3c0438a91d9bfdf0c08de0644c6cf261fe9ade73831a71c6a5a05ade2aea2e88f953af117fa64db55130ed5a1319ea7f98f4596f4a9492bacd21ece5df6cc7618380d0ba5e7a8011619ae6cca899a78ca23d435f732c993896feae9cc795aa9d20b1230c82bf9eeb36f25321d495317164a022adc48990274a5c2869a90ede26190f3170b21eb02a1961bdc15fb59117264380c006547e712f66e3b54f7e6be2b6c1814cb83ebdb8520fab1411a0ce65304ee40000346cfd8d4166e97f8e5abb3eef9b095ac9cd7c2923a582b2fff042c9ead7d57cd261b3ae18396b02e6b298fbc308106164e95ee6c53373097900983b3fe0a740d5657bd911e5a5a02d7b6033634fc894b91746d01fde4fdfb7044ecc7487de16e6803d5554f1fd200cbdfd2ff7f898bd70611c30562d7efc60074cc5b154e2c4adbbe16b0ae5dd4c2a815637a88ceaa231cfc84e95a968281d0e7a6e20d01c12d11d4f635b4aacea30ce53929d92250da368337202d8752b9623c00ee682f2cafbaf70856ea6d2c3c5addc8a0092b0c46e3443e4c5440ecc724d06ee2ef2cdb2d2782a186c84b79f9225d965f614f58f3b3be1eb077599d45a9534571ea91694ff8066667c69c3463e3e326ca9a15b38b286f6d1f0f2800cf501328fde2e333629cf0db5c7df5e7f7200d0e741c04a857a1c68dca7432939ec9ce8de97098e60f96e054e756df013d674991ee5fa2a403c05215555f0fe26e66b3e8e71c38ddc16643879ad9ce1cb11a17658bed6642f9f4a07842181659a8c781de693e39a712ab98c7e97f2996dcc904fdff4dc5e1b4cf204b0347fc85c86ca6b2d26f11ce6da75eba45cf980c1ae470df9ae9481cbea05ff22b5728e357b6912ac51767b04d0a13c342439fe9160d096ef14873509228cdf23cde01fed135ef8ab3df91e93b445677616397ca38933d409503ce39b9c8d8ef9a453e34cf7b0077111026f5b2d6753b25b8160c0d276ae8e873bf14aff13f3ec6152421acf672548f619d523e411ea301a9914b0e3a30bc8e40dc9def323f6462d66a41e428c3c7614c7b8b5814a13377c0afe3b63c1d5fd8c39d11f22c77f4d2f157121f9253344929380d7ab1bb611a95a8829fbd9f376aa4773d53106764b90ea11eb9c3df2fa990696520a8abc04c814194152f24d7b64c016c7cbe9c386776aec44d2d961e050a660ed47a20b5902bd184c1114cb53e22b21be96764f470d1f6af44303683ee0fe47720a688c587edfef13df4755484d10fe823ab700d57990f4c298c2ef5b7093b4a7fae627486501055b6594d3a0cdf714db60b4bf7ae445f077791fde8029ef0d56c023c573deacc2ef4a022da48969cb91b074757c76c7c8db8d201df53399bb4504274c1f12678e96379a4b9caaed8b6bd1ff0824569de2b67dd09402b519273d6dfba69528bad117d46315d0570cbc326c5d62baad4fa8d0f0342cefd7f8b805a3a6b91d492df33bc8657487b94dc6ae28976986a26680f18f56cb03c3bdd5674f306ffe9d495ccabca84e0bf83812a7aeb307cf5e69d4e0023d5a879ef0e82919a2ae824b95758c57358da23b5506e5a5bc23df09e00b66f0f1c2c393195814a80360ef7c9aa44842131795aa2d0b2fb6b7a4fcca538d4b027be9ffc7c18df0a55b6c8e57de52c8244ad62c6f478a4f89ae746fc94bc257dfe2b983656fef85b7b2baa705ebe8d2a6e3b0aeaf2be90bc5a87a802f5012512f2e199693ace69a87113282ad49cc2f70e58f659562922c12ae9e7624e8e5039c67f08279ffdaf9bc7fbc66787e68a729585a974673eb7a1ac7c89bcf9da333cc96288d41f03368ff05409d8e1423017944f98dede65ebc82fbe03559f6b4aa67c3a800100759b0f8aaa66d169364070ab2538fb04451bcf552ce8de97b803016f4582311cdb4994e76d61f3881957f81a952e4b7142e4019d57aeba8b5708d8133203d69c9aceaaa71b8fa1e681d328932ddd62bde5c11968bcd96be2bea884f87e8984384aa6db3a43548edcf64e8c854dcab342b43f7157dadd8526557ea28f9987ac58414e81216334fd03fd268e61738acf9814bb93eb103f78cec207bb68f182c175354246ecf9b59ed3fcf7c8c83d721a36bdc21b831b83c9547ab039e5350f66279d0e970d856ac6c57c3ea62a1a252596e5ef52c05b2ef95fe624a8b4d291fce7cf2fec0384b90760f167b0f788186441439fe4133db58b39aac17238489f182e6212d05f7614f33f030f73c105d078ce4d504a0c51abf18a2f0340e005ab2a73ec43ce71e8230ca81792690721c1b58669bcff0c2566bec9e9867f5c982ab640d45f410b4957a634a5ad0b4a5a80bd023f126da3379a556170b7980e8eb24e2da0b1d25c1817628d439bc4fb1e71f1ea240d2061f6ab57e94b13256647b64482d7e7fd14e306c3fa67fb30a9fc39e676bf19c1b8e11e38d9df25920451cb5bf8e06e1ba6189a3d049957d8d7623d2d6076a49c2895677abba36b88593b55d6f860b0d880574650443e1e27f3eee0190fd15a4a21621b8ff74e5152e572da57f9cf5c9e43fd9f8021ecdaa88000e74c0d5597464405aefb2526739c2996ed518592cde7619a0a5f361c09c51c36a738c189d80af0ce964ebdd24ecea5f5f3561441814e59ab2b4ff952281828fea451c4d4b912c84b65fd39b85f54eb3e80d83e52232d9caf56d4d415a21c36c763499fcca6f82afaa289216f01e959cf1a4a5c4b002fcb2521806edd244ba63f6862bae82e25a95ab064fd6ce2d68236243f06a2c4af359b1fc5122f1b2127b5284f9e9dbb25c3fa243336188eb6e4e23328c5efcd369c8fb6257661f3271bd72762c383da62fb478256541842050271db9a0288a65040516924044c48e802f3fa4eb2010887cfc13f50dfe2c94b5b6362054513cc86c1aecd43341488ce6db9f555f2bbc1eea205dfa551ee70e460257aed1607cc34a0e647058e714f54bc97bd3b0e0a93122273d7e632b1c58ab1369ac3fddb11f46ea65add8bd8e905900bc6405c73f88cb199ac75fad35388bf15262c65042a407b5d9d5db4b1f27b68848518669e7ed8eff5e1e722a99778ea5fc188c42991a3677a72e881a2f800a6909e25d4d072613e070cbc42cb0dd5d364d16bc3b1d497a39b70108b12765feabe65eaffc09fc01c4b8167c3ae231a0ac2fa37cc136f97c02f19583986d9c3957c60fa7fc533701b31e47c2dd973dfe0f8909f45e4cf1e4da3d3420586bed6475933b6ad74f9fbab68aa5c09b37c72068428e4e99c7fa59c9832407788822270b342b231463fbd5d4e4799bff2a98aebe447baffa10dc83d8abae61802b0129239127f83cf915f916140b7e8ed8784f1a7618410a8d5f0b0e9d1a56f9be5413c4927611d678b3cf8202a38fd2aa2eab83c0ac2c50a74a997441b00d6aa8e18cf71f62976a489efe239789f65206846b010a819855c667d4107fb8af5b51713dc32031b281d19e2ffeb904dc965540379c3cddac9f537c65ec4079635421cbce307d2c89a27a7b0a1d515e6927002bb65d3f0990b8b452f3106a3c52de80b9e6461e9b4555adfc368748ddc48c6d0d914bf94d6d2853b12782e749a380d6012d0eebc60d22d2ea5c4484ca164d06ae706f53f06b759761a94c9de87fc38b6c4d8fcdf40a924f0d235def6d86f332d5f9cf353cb129e729207676610e2e07c2ebd1aa6f642c8d2d34d9700d3d05584cd775887768cbadd2350659fb7749b2cbb2dd6c7d4278f41236c0eef3620be2d9b06932eab7e450258f062dffe39cf54e47baf967ccffed83d21a53681e8d37452db11dddc7fb38e7d77ddcb579b0361555703b752c48de4ab0f086b29914bf57f5572f97bf98cde3b4744d65620cdee6820818ee87dc302d77496f19fa27e2d9b1635262c84476e0cff26857c538568a76897a1c08414cf5d02ef6e76a4f089108db6d840a859ea5cfff15d3cbbd05c9dafb4845d401986a62a6036210139949a3c96846ace6aafb5da33c209c22526a56676ab216a47e53d6b97ed415fbfdc729342bf0d7ec03aa21e7c5875fefa73791d4c7abf4b06579d36f4f83a08f9cd443259dcab221117ac2d298503dad6bf6344a497796afb5a502d15eb8da58df3799a3a81c660c3c33e96d9ec35de30570e6d1d7602528d59d0ae693baeadd2cbad2b6332d1a35ed9c3dbfbd27e819df6d +MD = 443717b55aae8358245a1346ff2ea4b458c42dc5412dbf14da3499f1 + +Len = 73096 +Msg = 927d058009f74019a624e7db75b86cc58944ae8bd8b96e384c28021816cb4dd54649eee09836b81291d96294cb3380fc8e3cb2b89f701cb05d8a1627099024e2660f288d82a8d65ad3cb69eb85c3947213f3bc17155f649a596ee93934ee6fd41a581b4f6d558338938262a94b70917041f0326ee08d2e3d6759e3163fed16f18cab2fed0246a5f3f985b796c4435d3e3fbb7e86a80263e2b0d56c85d1950182e190cc31e88225d42f5cce7a9943e12436dc062716c7e9d15b69ec4f92ef19ce448f5ae1c711ec235a8f111d7279056a4edb3418d1e3aa52919ecb3c2c02441fdb3141c649fce128a5a6e647f5ebb257ae416f23825e8dad7afa711444d66bbbcefde9a8144aeb2a362ab7bfcda3ce347f961e0ed14179293d07469f857477eb467cbb4fd003f47335a3eb4ea0a94249e860aba26593580f034db3a594e34ef76b341d822630e349cb97eabc1703f7de12297da7e75c11a7f3531eed1c2bda2764af780bbdd8a0f520901cd1d9bbd43b2578fce5fea48c3936a1f040c35501c35a7535b03f0312be5b15e9548fd9c0a848d690245374b10df3bf92663168ad12740cba3a51b923eea4afb90fe063a56ca3caa12b8ed3686b53366a270f6cc55ddbfe71709d03bacc25e4f4c875636ad05fdc97c356ca999a7e8ce24b056a31ecb6d3c01ccbe8bf9f033f0248f5e0f71ca494dab453602ce39b4c6199ba68d9072e11110483711bb069454b5709e33498997bd2c62e9d098ed2fb4edad771a5f66b42cbf16ca5b4477d8038bc5973098b6718e8c08f8918e34d2313d6038a7d0094ed56ac2e8c73ab67772f418c985e3f35f3826c1d2d4229314b1755e7bd496fd19b1afa722e402650b299ac4a5a1bfa2c950a9081906daaa9fcc21f2b11f1894cd37fa6e09404fe60badfc63dc228057485e6f563ba82acdabd7cfb768f5d972a1ded761fc5a57cbe1667570bd76da8344b806369b46a78ef16adb3703d75e09601cc34d8c90de8934e9b275ca2d22a95703ea23e850b560e8fbd0dc22522aeb60884a6b2a9228a06ebe2fdd92940d5be7b8a7988354f8d60b115d2144f4a47b2b97d95566ccea94074a3a329769defd7f4cbb1f0cd1d670c031bca0dc1d6f4b39d1fc86b1af88f687148dff591d3c10a6468121d545c2a3a0e38bc5685affde13ad3099abc8882a76a387ae580c8937d52cb64b8d2f61f1458d47197a3bbaa631bff1e8b5865cb25e8db3ca04d66ad58465b6f6850d28ebf6b58b27721e44362c50dd0e5f979b2097299eccf009356c4c880fbd6d4d8bf66cf2a459e09110f05c263e750a4ab7e7c91da54199f39d7e961a2cfa969f0f92f0ab4f2b5632a5775986b2b7663e379a5cc063a27343f78ee9829b48a14028642a65d8364351663d9d28b64fc3d09e9adab8567a0c68d81fbf67e7221dff6acc82b8cbe5289bf7b5af52d598d3b0617bbb6bfa32d5e0b3a3a0207d115d1b4b4e91fab6d28660ce7208bb8d3cf63c04bf8761db57603a1ebd1442d990ff225e6cc0c21568dd5e5ee521c949a6abf20cd8b72056722bd37dbe8445891b64b2f899a7956422adc32da182e287607570ee49d32e07fda94b553a88bf182b3e3bbe77aefb2f8a786dbf19b4bde2f4e3173d9563f17c64591039b38a05e34adc3b24695f59d42abd8c97c03fa1d8ce65735f4dd2010040cbb09fbc10b096f4df1faef13137fe6dedce2c278c44e5678d13e7d5b5d3501d61bb0bb6b5558fb3b777d2a1bd1c0ade9990f0d212fd755aba574bcf77fed844cb7de225d05b59f1e5d213ed5b8c85f741739a326c5215128ddc1f9da0d9f5716997c79c0a387249ea9d0756a4fffc4265f46cdb00e941296810c7b2b8fb540dbc97308bbb7365364657115021ecea3a87820d3e791985f9e973d8b138e9608434da91777ca2af21898ec67c4ae9bc6a16aadfdf2d69602e8293b71ba91aa77f82f08ee1c63cac9624b29b3d986cff3ba3ed793f965f4c11b3ef075472059549f7777d5d10b80a2e8850f41692fd3f39bfb84dc26c71c65dfdf43dfe3c30b69e32bdd13be49b443554e88589b2f0e8eeba99e219f8374b6de131cf6b503287c695524f10ca5cc754fae7c419710e78b53510caa8c21667bbde26303e6671856dcfc33b7e3a731007eaed1458659c8b47af9b6bf1629597e2754004e9d7843bfe229f2ad6ad84bac8c5570aa909318cf09ac84a86524b585c272dc1f03bc127e23e3491acabf82411eac41b8dc453ea5a76f5eaca09ae1593643ddbe40bdeb5d493220482ae53f86dfb92cb993f7a4fefd4c2c15ef1147c22ccfec727b033722f91e5f7db3d0e84474861af3dc32b1a2b24ad6297b134e874c1ff285dc145f96ddb0ee028d0ae743881bf1afe07ccd586f7144316c275e723d3ad53d8c7ac9819defb51fdf1ba24bc17e9b35c66060e9dcca5f74ead6df49a8287fe3b3bddfabe1e49d1bd1898324c7b9fecdb763d21ea05c0d3c1ca639d534f2d6be786308db50958c408ddef09543d404bfdb0f8cbd643037cf2a21d5de8a9fc41804f6abdb920c6bd438a15368ddd5945259ebf48ecf4cc6763dcf192c513730377ffe327150512320fd5b13633cc695d05a7f735b8abaa0797d376e8632c3016410010466326a9a6c0293984f09aef17f055472ea3c82af2011e13db5d54a21e7df898981df61ba006fd14af3eb968fa883f157048eaad9b32155ec82e1d47708151d298c003e6a236d9e91198b855792fbde8b71283c0879d71ce5b2ff6aeb0fda464c4d3c07911e2480d5879083318796a477f9b13f23bb59bd8e10d6126543558a5a8e3cc61939bb017e06a39905cd7cca8264d2bc12c1cfc051630fd6cdeeaf74bb15a782e9bc5aa9f45e6ccdbbadd4d8137932babdd362ae957251be0b560f89d7aa2644e9ef2bff9f5792293b6fc65794017a410c39390dc10645d108c39e5317176113011a538be8b9beb56d5b7cce6cc5515ae73a7e683fe79217aa7f8459e123fff71984fdd5354b97783ab91bc5038a600b3620564476dde198dad1e8239e95a9f819764f66efd6c67a88d0cec4c11b4e5ee131eb2bceb0da5d8100f23ab736061fe93871c57f22f2c341e9bb540e3fc45bd0b665a4af27246d8555cc2592cebf7372128c7a4bf7c45c4b4c0afc52bd6a09ebf6ec38810c68d0d0189b6c99257bfc9a4cc80ebd1de44c9041e445f55ee7701b3ba66dac254d8f48918a983302e3c34a2d4c083c5bf99bf61071b65feae49846cbbece983b7cb1d707be30c72e9ecf6bfe41f02f7bab516700d8d7f829088a55ef5ae0ae159c3e64c462bcbf725529e308ce4f0043a477ca5a423029e2fc4d31efa32d547d563fd60e9cc48294b0d79c901cab167c89150667d64a58df67e9c013c03cf33952bb172e94d1785c56e37ce1538fd9ee0531056cbdacefe6f267eca3d995f41237ba0e6c746a0994f0546d429a80b160bed5aeb41ede54c045ce9ce618c1bdd0ae44a30f61189d02253356fa1908069b5c08e9862269f1350726b825a347b83b5e62be6185629c709e871e52f9ae406888d39e29f0d42c0ce07727a8a2af4c1af01b47a808d06ea40358af9262fac78dea3cb5e6b2a76f0f7acad3b73e82e0370b78262d12ea7b66fbaff0027b7504d2294e17058d6b21047a26a39a9e46de58587f4438c9392c802e93c9e96da65d01ed0eaaceaba7a9b48b947f98ec86ad467e3a87105844e7b8450c22915f163be0e086578834e371e7531b4ffb4dc7b5c926b1d8ffe59315d8e822e3407a4b0739a8bd077d50a7e0647ac3fb09eb935ea8f8eb204b99af1fa6bedef53fe6cf27d2edbba0f3257c5ef5a9946c0bee7110ad9bf0453d9b1f6beb70473ed6ca2a057358890b33dee95360889788487eea339eb8c8311d146b636ea565a74c4ee207e6902e3185a177276ebed3380ac1852f44f67cca332b1c6ef9064118eb9c8197f23eb2f93096ac43e7f4506597e2ca6c67fe12fac609b9f3523be27af9d98f1c5e0a1e4a7ee7130d93d117f539074153cf7795a720d5ca5c42eb51b3bf3092fef39b790eb5b931ee3afe2fd23559734a430a0abb87b8d81091be94ad85c714a4799acb2c1e37904fa322a0e2d6ffe7ba8d5f7b1d44da6a77075eb54e93c69c78b8ae1c8c0186b79697e6730f6321250c731defb59f6208f96c70bb803056b3e177807516a6d12e2ddef2af3f23e9b6a6beed6f6bdf783afe879faf2aa59fdf4780b8ddb2543e7e7a40ed5c5c5f7d21f2367602274e4689ee219098343bc8ab1299fd5d4855f52ee7857f834d6005ee56a261b0d132f17c3102ee7e8537f99cab8bf7fcc0ef1fc6da74512bfa6baaa63ccb558151d4a49c2ff25f6a07e45c3c781d4fc2026be4cebdd60b5c4bcb93d00b7afb7e8f7c856f51b98b62a1891612e219adb7f6116bcff773551e28c6eaf42b75fbae7472bc7ffd1e1c713b6d52a65245b8e48528dd51f013d57a79a6d49a0484fc1ae6fd72549cebb79cbed936812e6b195095fa61da107e367726b17b4bfe71a6c8ce66cf7497e606ed1015ea2adf5178030fcd20f4bf7b1e1e1730078e8103a2c215f6fa6954d8b16b1a699729cec07b06dcea422665d43676356aa0ecf5019810a1f21cbb3d88601ec41d6507627fcd60e299eef86a4f258766a96cecc2342fb85ca55cf0b9c0ba0ff7787b4b025814190b214cf336b5935993339616506410c42d56e3922f46674599c3027d1811f93a3ecc859e31cd2af5a55244f20758e33bfb4cd82909e310c8934721260b7323ca63e0c182c4618f62824b9f0950da4f26b0d0643bae5f5da1ce4901cd43463bd161a6272555376da81469cee291b0fc8c332aaf528682f5d73114c9fa2852e8582266e0114e196ad041f3f90533a393756ca2e0f5f9148172a3efa235225ed3658d6813ce15cd2ee0f3304afb9f7bbcea438020ad6fdca87b0e21b4079934a3038af3e9e2141b62e31169e74b3c001ef1a00b960050a313f959f326f7f59a013701508ad7b1cdaede83e7f87d71fa62956b8c6b78043169f46cad218e9e59950bdac81d3556a9b9db31efa61aa8302fdb8c4bc69df34e53752f97cc52fc390686fda1cb826a792ce103cc18a9486b2ecdeb90d0f686c279828af850cd7701fdb05323bb485503aef9e1c478b2b973077271a3b00b23548226651ad487787b2192c298160e7e10e82ab321ebbd621061d204cb8f6434ce1766a8438107656d1b333346035d4f67827c61299b53ad0ae4f68d52958a1ff6df4c3bbc7fd5a8a0929c8f76abbc2fd223f7d325b0fb012839e5f57ee9044e9583df06cdf579a7dc2fd3bc7135b3861773a4f15c523ec63308a72298b45a2772aa27f1bd0b7bcce89ae2a47ccacabdff1c8aa418a7a365f4f845fee71d151457fd2de5d6eb647e8e7ad02de2928a3a52c3b1d29fdab24430b2c670b54dbc7b0a23f8c85ebabc249477a641e9b47a66d81322643b11f3ccb2de325f486cd7c654c590849ea30928c33a6bc7db5923a958b1e4433174ef65412392b5eaa1ee5cfd8bfeffdeccd5f1e36b27a7fea80b6c9c48ff55cc2d2d78a429ed59e0148aa5cd1c4923665da7e7bcb2e3c99bcabc156a7e7c845361356ba4994b3375ee32098c2179d67d7f087215b5a615f9e6be0e8bfb62b70d3b90a8091bb42bf0576ff0014197026c597ffab81f7873622597bdc768b9d643e0c5959b5631299876c8c2f525aa8e7c1594e76b9661cb1cafd18ce56d8ac83e7b5c9c21f3c915b774c5e73075ba62f2d8cfa1f7c26a0570abf3e2afb1dc774332de24659985d79378eec87ad8d06619cdb990244d9a09a6418626ebddb7ca9d2dd2942df16b5774abcccb9bf6f2823819d91db9dcfabf069b11c2629823a99295c05642a3867ea435e6595a782b9e96e7b7ae801a900fd8de1c1ddc8b29fc6c9230d16c56db326a3dc4db800680a27c5ddcad3fac66e26335309f215ed0ab714bab6d72b2745c0debefb7d547fb7632a3cf80bf3d841ef0c6d4b0f8b8219feae9b8921e6158e5d668ee5721e4a30200e21891c873f0adc7b990b82a4122be1e93e0a836088fb30ddc49212c84802f2e42404622f6b4753037ec1f80a2ddf15772aa17835222b0fa6f897fbed09be303eace09946fd8607368714dbf835a21dbae9e48cde418c2e44735d89e70fb07c8034a41e7866255d773a6abb28ba034f46e44a1dc6979d3158fd593950ba884c6b43d55e3e25c3ba580139f2063b714e7da258b77874dcad36df21a6b49ab4042262eaf502ccdfc26b94192d0b3a7a7ff1cc86f68e69d8f670913d4e8d40b258780a5b6f60bbe7f9f44b7ed8b2278d78359b5b3752f700a198cc029d351d01adceb2ad29d2836ac5b49fd161958338ababc75c1670acf23301e8181f66b0306888f466b0c2a3d6ba1f19c7742fee0aaed6a8fff051ec1c2f6e6df4417c8abd3d49380e90cbadba4b8631b76cebc851e658e8bd719144ecfb10d61daff10d068082061b56580193fe9c8027d84392cce674ef2b069937e32aaba90ac76ec7aad6c5d7035df23fe247c48daf32d1edca23ed24bf1bf445ad32916f2204404b28a477335d2414c933cb90a2a4091129e8231431e04e1cfe99a7549119f30ff7fe7e38938f455a2df6de7377acb78be795687c9f45097db3470d87a75920385eaac86c80204e1ceeaa050f653feaac97506898b533dab10413b98d2a45f8540fac179581a68ae77bcbe3a703b40eedc9a7a7fb2c633e3181ae5fe7828707ed5b70e0460088a84465eadeecdbcfa0e9ff19bb165d29a0998c7545294892bb6ef297c6e0855d12be3d757b4345e92d0b9814f66cd01dae33b4e72dc504dfaf53459f1017a88a46af52fa2d3cda871fdd3527fe712da5b3aa6b925e3d2fe44024c4e5603db296d0a246e7895c122ff5d946d147d5be586d5841057b1422370a6e01094bd56c093d41a9dc0403854a4b7a5d9f46ed0abc17e7b59ef8cc945e8a998a8917710d67e8d7cc4621d59c7c9d4ad9e09029bb375fb339ed5bd8feb13d31b1d377934f29500f5e945744d02d47d55c53983e1850b1556e6f18cbb9d59eb12776d0ae89d42f42b16538d3c8d2f7845556e37cdaae994893a2b4075e422bb24bf1a73545eed30c65273af4df1408d24568f6884a9794076a16b23e746d609fafc28fda2bdfc7d6fa68d24a8b571869bd1845c310a22e1c523997b364ddd9e3b367eedf742d8a3ce188a327661292a51cc355bfa564b3e1ec89d918d81a0429075048e7e76e96a8ab35022df7ecf40ef528aaf07145e2027995fad126985bca1c2a2275ce0979a4b7cc83c0a93cd911c686b9f81ccc24f8b9dc717ed8df5d6152440ffbc094bfabb7ddac720288ae58118c0729007df93f0dcbe164775595695a4c65fc4776b5380bd6f0d48c56e03c56971715b4b1db4ff5f2af348aa1705c8491c8f9cb4616d42446d54abf3e1b5916466e40b23e4795f2df5f717b399ab571b2bd76d489310aa1bbee570394bc18d0f8713c7149cabb84e0567dd184510e922d97f5fb96b045f494808c02014f06074bd45b8a8ad12b4cb448ec16285fb27670fce99914f100ad6f504c32fa40ab39beec306667f76f9ab98b3ec18c036b8f1b60d4457a9fe53cbab23a0ee64d72d8a03d6d8d67a9f2ff6eb1d85c25d8746c8b4858794e094e12f54ab80e5ba1f774be5c456810755ffb52415b5e8c6b776f5f37b8bcf5c9b5d0ad7e58a9d0fa938e67ad5aaee8c5f11ef2be3a413628ef27f593a779085da6e641c19e79dcc3e1961ac53f9a573860cace8cf79ca99d3626ed0097460c31bbd460b8fbe6d57a6c2c662846e2f229298f443215d96d3506dcb3f2faac57e24f2b78c8e38961aa9da1d84b22e13034b5ed0242077fe78cbbc9d8df540491ebeb4c0875f7d9f7b0e0a6cf92364d97c7806477315f08af00df7eca4a35f740bb1ab68e44bb410e49ff9bdab1f360af7e338621848efc2a4dec5c06b812ecdadc580b78b980672bc224f1781f0cc2ddb529b28fb019d2ffa05ce22cad6d6dc6dc2dbb5648e9a4b6b60b68363dd4fca908ed7a1048821585b4cbb19a9ec7e29b16f636b587799265921d407392de76a7e5f95d51c24a4c5307934aef0094f3de295c1e04d992a88ee2d51aeeb29bb940d8c7dcd291f4effdf55e0e88776719f69fc9d1c2c3e76fb924bd67d6219f4d0a5df369014bf468dd2a868cf577b0bd7ac6c9d28deaca406ad450b7e8445b9a6ae1e6926c64db5f76f3a736b465f456e15ad6c0b4a2bdd32a7e197b83af4339f9012bd982610c2c620d2aac53d6c48eb0b86b0cd57054905e8e823336d6f8a42b383dbed1b5296814c3ab5e425e83cd6f5c11277ef800f09d82156f803ffe5177f396a2d8f5958b05a383bd0e41c49b83d243910f9e658c6df56d90ee6ea6ca75dfb1360696f31dcb495e492645095174a78cea05c7d4bc3664d537dfc784979b3927e8f91da498cc1185a318bcc4b7e84847830028e1188d3cf6d4e2ff3a116eac752c2eee2c748e98b42b543d791725312e0c6d260d19d90a4cf8865a19f046b6037ff6ad1d49894b4472773ba8f7d1fe8ad6db43db48b0394203388cc68cd9d25d750eced97052a5d0f8e03be6f2650cf882a906be2d9966708587fba27f8e7e0d7bc5d803916134c42f2da2856f54e8f19074e33820fb0e431fd32b3020eb357e24ba3d0e154b84a895be2436e7382f0070bd7ddbcb5b8d5402d8901219668539e06a726b8457f1e8cd20256df2752bafb3e11b1ba541800e0ed6cebad186d9cb3f451c9e673d192f25e22a8d19a27b49ca9e5f7a173372db747c3b8ce1d2cfaca1e8a039266176c63082a826b526aa893533bf69c9b7d266d4276b1ab2c0c358b8a381ae4a4b77589d7032cd5d9815c8745fcf7d05352b2abe66d1e6dcd75149d42445705b71b7509d393ee38b7d69821850e4268231e98193c91473b88cf61a94e97021d27a9348e04c310bc72cf26091d5b1f8a9349a15e4bc8733ee683e256b41863537acb79be737cd98894d6cde614cad65f2c3b95221cfbeb9e6ef7604d7eaec1d03ae80d4127a493c5a55254607342ae0e755d3c0fb513f882a994a235b44366bcee67b9c02824849a2bab842041adf0bff7155dcb20f6e0121dc272b75cbe983e1fb243e37fe5f430b04825ce86f2e59c38ccc2fe658eeb7854ea967b8006a07e5430735133ce2daebb93ff124bf9d2cac2eb31518ac163d9d672d7282705c6a5154913b34cc6763dd5f3d99297aa02741dd8736b99798e6029c4fd665aa251dbeb65e9b0d3b7160584d07cf972edbcc0cffd50f6999db632d746d0df20c58b475cecbff1cf88562d5393b1ede4aa47d662c18f979315217a686218388156ba12f2465b1d48217edec7a23e16f6c9ecdf5e8bfaf88ec9175e627f9c1c853e276335dc85dd466ad63f6a66eb1eaf32f30349c557c192a1e2064f04253135631a63ac1407d9d24ba579c34782aa18cda469add66f9aa885c99bb65b7b1f98aeda3adf57a8b8f3ac35b35aaec9653783463a11260a29d65d134520eb668fb607b10f560e2f23b275cc16b8018af4163a239dfe1df0192611092b141cae299857e50a9a9f65c1158eb3ca64a98b02bddb81bbfb23e810a089f3761a561a944584bf553274123b27df32f6e60f9535324fa9bc90a0bbb64bad194dba017379c5788715a6f3fe38ed5090c2c79a6f357f7ce3c745fc31b52f66c2d97d85817f211985757f86f06171ca17578eb1e3abac4c7704a39f12b2549a3742ea4b0c4f6051019b4494b15eba330dddc3beb73fbfa6ac9c31f12658c332c1af8ab9dc908a0742af7d850ad6d075bb7bef28b498c271cbb7775b354c8317a648e338b8eba82391dab2c0c071bc76695a9957a25fbc971c7cfe4306399c2f2e377f316a08c18c36436caf9ed885205fa249b3493bb6ffe7144d1262c51764a3a1e60ab88edd2c791432b96bb33359e47a87a470d5b79174a7ed311198fb9d4bb19e2d6b2604eaa1728d46eea9cf0b410adc92e1d4c7350a5c6406db5b50c2708c31004b773faef88704bef0635f1dbf7bcfe562e1eed3f35b3cfb88b61eba585d27ed1f2a9560c47b1f8a3989ee77a4f5e905bca4355375cdfc77df506e6f4b4a065ab1e60fe94e76661091c28101389fb05ab7c4a39dd9da2de2a9d247c8937b58b1c754b42fde9f62b9c0b622a3c5a2ae4d1aea419a67a956a3aee3b2ad7719a4592a1b8c1bbc1e9aed8d0ed84591266b44afbd16306663ff24b62cb6063e4c73baa2e49f952f1c9615c272accfe5526ea83ce62a48202fb1cc89555bbb313b4c3cf657f68680c1df972589a429094e3fe28a0c85cbdb36f203ee05a9b5980fb747f01b98d4f834fcdd7ffccb3b4543665861d8309fe09f4d31afe4a9dabbef3c4356d98d69dd9e754d977226eee1596b7488f232ae779347be929b6213e1046498f138de2b7726d3513794bf2824b7d79dc90193dee73a6a1360d2dc495376b6ae89e1920410f59d50250a9dd25886323aeaad5b197abb3d96e03020625a6cbbeee67bb1dbee325bb22a7bc8d5c3ed02b5b4a09346763f48b0dc5e35483c0ef9becfaf44975a0696de0e904917ad15d175ef7f434d24ed14c91a0423e14185fa870d2551229c99d43e99f02782602526e263f57116ccee284a64c9f317b3f946b26984e363fc12a03993436afd23468a64d7a82788b6690c998055acd0d89163a5a875ff42c2997f37c3331b6f3da0846315406c8d29874920365156f6fa76dbca959fafa73558fba0f26640c2f75a9c47e366490c6f7066465065fa705fd03688f7abfa7a9e749bdde884e4dd999d5a780ac2c4eece4beb7294389f264fc6fa469540e9a34518e7546d360ca86b90475f52fbe8198f40610ecc734d001480b16e3807820b726a686e4924c20bb45cea6282b9ba76f9794f81bebd0ce6f527e267a8a7cf986d92a59343f50deebe28cbea64a644ed561b3d3333bfe5c039e31699adc9d8337db9272c2551f639cf1d7360be688d67ec51b38cf221df7629dbd46c0f15a4c5ec07749fb5e283d43063692a59a79dca05413af4c58a03f00d38a44895323b3400a31656bc4dbea7292135b2fd0c7d00e71359d372a258172d210e9509c9a56a02b695b7013daf9b017f605e713e34efdaf09991c212e6d1d0bf9bbb3181ea4d3967772c4e585d9602a671987fe6ca81280081967d82b5073f3ad222d50313c7efdf461c6946d08172bef0c7edac489c176a994a6b99cea2c3b93c32bff728bf6a4589ef1bb010459aee66528437b52af157691653003888a2645f54b6032f1cf4c2c90c2c3e26c8c25f5aa30c301912fcee7a60ff5ffba32464c5ee81d232c8d37e8ddd649719f4323954214d3e7c3c81585391355d20d993e1f66ae90a38aa4fa05dc98b64f1b031a3dc340f0ae790c7bc7c12bea2ad143502792eb6544aaab251c138684cb6e308c57b44193c61f618437e4a62d7ad3b54f0d5a4b0576fb042b84292c4f8717700c8b8b9347bf356ba14e0a0e8a4253636d395329ebcafa449fe6740670f2a535fd41cfc286fa498f6592a7e1ab01fed23d23e424a2a126e0d4ab9a8193ae75f6d102e73bdc17ca41437e54bbea4a24865155a3b7a4aa1f7d7c5bf33a221b28374a57687ba1983625cd8986e9d27b72f43c57085f7c46325ee960149c96b92a7babb7ca0e91ec2bb1664cb517fe2658a040a0988893f61e19ce7075357c190b38878c927107940958902065b2c7cb441f10bacabf763a11427dd5ab715cab28f2607e482f8d205dafedbd2f46b9eac3c52f1e1590bd92da4d8a281dfc82f0224dc8e551b69cf1a70bd17b68405f056636fe331f78b490d7bf75e04313b978858f236a5592b1b86410edd3b73c319b99f8f0a22ee405a477fcc386c1735ab4b14af265ba3055c51333955e72a6bc2ddd6fb8e3ea6f2b5e59a9e593ff87d1353415d87ff63c03b843085a9450fc592cbf1fc960d876902eeb3b7e9083cdc76a8c542801900245f261f3cfeda8b9b328ad9d84a16fa6ce86bb15d0f4c4a1a7c538aa63a32e2f9713fe7a47f3007b3492274d7d3e165c50f637ed9f3958cffce5b76d3dcd1710718d8720551cee9d6809cac4359f6313a20de0173be6a695214c873108f7f1516fdf7a7a99f3c9acc7fff686203dec794c3e52272985449ddf5a268a47bc336edc7a76ed78f03835ded53907efa208d9a9f7ec920a8da94661af23cd8c7253c551fedafd649aa0b5173a10bdd6644ed165db4dec31784b3b62bc0d9f49c2d8f16add352eff6b9996fb8f0c3c76ed24ecea48c49a40cda0c95cf122640216497f81860406abeb8978065489f863a53188c1d10f20bb06508cbaef20b037f51bcc3099c5f8fc8306c4c21b18761f34fb2167047c23f2bac0f1f71677087dd7d673e279098a53da9809b9534639fc14c863444399f8aa4378a5ac0793d12646efe321b43d4f644a93b3568d81b89cbd4fbb041ef7232438fdf4442315aed3baeeb678cbdf9c806ba05e243a698673a6e795110702480323b78a5a096b0608cc594a52307f064ab634669cea4c08135a368de59c49bbc96c3bb4582b125b27c3963b48828a2125a2d6693b0dc7c1ee5f93120c3f4c12e9ab012ec8e88a22d3594be5b6228f61a3b9ecd289256b58772fa3adff7077d1e6389e4616f261017df5d0f635910d3c37740e3f01b195105032eece29d05b6d31cd6996dcb9055b9a11dbd9516e72356369b11b2f42d3adec01caff35cf75696eb2099d84bd05b5ba45b30b741b5cd1b9f35bd38c49a565ad24cecd8dce444aff8ed4b6a96ec0845109fd0918283b95adb98514834688fc36146095ac6d468666cc819ea55ef46be0c7205ed7f58cf5b114c33abeca0cb5f94937041c2cfaa026f366a222fdefc0fc0 +MD = ee7af0b4bca8f959e6401b028c7957ad99f8bce71dd52a6f6a10a163 + +Len = 73888 +Msg = 42bd3294d9b8468e8dfd967c69b8b28095c614fa8617f80872576e4907cdade75c83aad428a7e953323193bb08c6ca77f4dc39522c20eff249146da1fafdfd54fafc46e53f7b1ea475ca9f0eaa0a7ddc4b4b96404ff1cb6bb25c0f5225c8bdb204712f5188fb8c883e12e1feb74e74b68159554c5753357b95757be3eff59509612a8ca069f1dc07754f82129758560d804f9bfeac0ed52bdaa8dadcbf4e2c62fb6f86584c23b52902caa9d3b3f0ccea2f7593dfb6ea5282693d54c6ff992bc4b9884503985bc0f7cdcb7fc771e07e5476126276deaf55882a7c1028169f393883bcf028b55fa578be9a2c783aef13533d6f334b8a24854606ad378a6c28ffc54155b0500bf70bb4be7ed76e77e434ef6cd52ce723128bc3e317f07469fc2573db99ac0202ed9ab4b3c1a92f8e888831ec8a75d112410e08ab03646f75e2524a3ad10dc60208fb7f87a9c945e9a3b820a3d63791be79b71b44b9bb02f8a32e534444fa24730fd61d207f5f38eefd6bc47a039ab08e822e0698811cb65a076295e23c9ca5bdcbd297688a958e075d4a265958c5b5ec231ad18da3af1203d69618fdff1ad0480498f4451491d19b8cfc4d291ce1283f2623820d669e9e5bd871e57bd69d2e7c81d03ca1637b8811532a41d0981592ee51f223ff140ee2cbd59c0346094d45c20c217863c07c3cd3787c0b38148a7a636d2fbb4af32967b994bf7a44e051a0806b33af7373bc7448c399b247d7676805418253d84c17b48ede81535fa3d2c41f67afe9b9c462b8d8fe2a3ee72bd5e43c9791f290660051b37b8a957d99f73b08c83d2e1cfb9690ebefd6b8ff56fc77703507a05a8b0bc78e338348880be98ca2568487875f8285e960462777a103a809e48a651e01609d89ce14756741cf3f54d92dfbdf394b1e3b172293375413006f6cc24ac411285b0b13e4230283d2dc8818df930dd11ce447dc110526b753060b95595635038b8a7bcb9c5a41191aeca5dc4356f96f1b5e7679bb832e12ec424327f492571fb0b143bee3220c4acef713ed014c8b5b701430b4c91836ac053c80e93e0413adc058cab462844b6017833913c07dacdc448ede57e3c927cec77d2ba4dcb652f4e2077875c187e6a11c1a811628f2423cbf55e628b0a0e7c05a8caa2079b0fa3d3f47b5c8a734c556064352bde2b236c108f0b2f0d9a45fcae5f16725bbf8f4d0fe9fe977bc91d1c6fc8714d196c571b448e7a87605dd77349035c87b4a9829f549987c48a9a9f03b276c301beb34da5da6c33284dd54184585df37e9cf9880f445b8d70416810bfbae7c0c608a0658034b0ab7e009102846e9771b39f2fee0141c8a6073aa230b4fba3f116b1b43d5ef5e479f533019907fe785dc315ad4339ef693805c0e96d67f733ca70345f3386a08ff51a5fa783938a492e29ab02260dafa5d9f88eae256d300fb37efb01f69ba71bc379e11340ab94b25943b9bee4f10516f26c0e51071938a0427f805cf4f27c005b8061a55ea4902c75cdec442e88822517bcaa726110638e0e1e6ec09d4fb1e633ca4c0e4c332f1ffa149d2251389968c086ed92f1d753316cb810cd7df7cb25d2b41a8e87cba4255cc456ea0b85dd5a7347623307d28a22e4f900e4059f4a57beea57d69fd2a1a51439a40b9bf4a062a66a82c331967aeb0d4dd994d28a91e45eb98e5702ecaa47c6f10ef7a1099529d08ce9d3fd97a7f25c22e560435e446448be28803f7e1055db86f24eb9392e08981ae1d5da5a83c15804ced6f68ec44ff364a102d40b9687d877e8613317cd97639115594653b0e0678ff0596a90b41fe559a22f3f198f3624206befad0a164ea98beecec01791c82110e467fe18765ca4e98695ff2c7ce9653cf73a85947aa6f067f8b6d61ab8f10b3435a34f6a9d7ea8b0d8a782b8e22a120a14e26b5b7d28ceb1ada206d188e39c664e6bdd2b9c0e672c03046843417091344f77bca3905caaf58800c0e0a4283b23a95205bff47476d7b01d2e603d458927f15af82146bafba0126392ac7d278e08d0c677bc29594e304a52337418215071c50cbc4922bc574dd73b0aa9867a0b625f69a194cd1553c24c541613748c9d9e152d577f96e9446b3107877c529829dc9f9bf1de32413dfa309354a2d4ffb7097c0d885925ba3964da49977963fa6fe43bde06ed0b65436491806dc6abe33340645d9d5a51b7acd71d81c9453d2943f59eb04f65baea3a8de9bbcfd38befa8df587e24f7ad5a154e85408b54309d5cad42b349ccb35859d29396097dd77d6e32d2efadb58b2a1917abf65c2af0df0057b2477486a72847df39bf991a210529e77e32a6189da00eeeec23ca2df056d5a187fd5e27e8e27b104688fd3cfb2f326994e79c9537449d20e04943f1b1ad53071e3565350b0f69f24492b45ac8443e35b16effbffa801a5a02e7580ab74aeee50f9038128017ab01be6d3cf81afc93e87e394e0d4a0b2ce6de7e74dd63a83fe7b69e3554ea93a4cb0e69259955a0d9de35f715e1c81e3b73dd8f38ee695d9c7badafeb709cfbfdcadf26dcb31ae986939308d5e1d761dc7d8a8a02b21ac3ab1d7f55d90a29b8fc6d8b16e0d9dd3f10b4ffef0c921a4e7660500f70dd0a82d24986107c661363474f9cc9c0721f0a0e9ed72a3856e36c9fc8e88fe1a3ab03b88c7c604438ec8364cdaeaffa2052d2e6ddd33ad7c4c524bf139e7bf3ba9edea452ace5ded71781bb842b4a0c490b322fee6ea16940521f6aecfc642596386c5c38a1f19ae526f6d1ff8d186560baa0403cf3fe7b7e0ca519917cc8d5ab1a4516bae61406d78d5b3e9c5eab941be3a5de661d927cc2475e51bdba2aa28db6f18a3603ddb122cd1767d71a7426bf189b30e6461debb1a4c389de1efa1a9290ea1d4665af184b68b3d45c4af28beecc291e3a07e146c0a74d485f25c78c7e3aa746789628aad5e2c90a886ab7321f60b7ccddcd9d2c63b18413cd6913968506a1ac291faae746cdcf70e7e422c7b598cfe34e21a1fb3f75e052b5535ec76b9771a4f46cc66c127c2fbdf751d5ab65b6f9e8078e8041b846eaab937f097d866f8fc757080b97cd807238433e405b945d9e51967eb88e42b71b84d436c44769f16499bd6beb08ec7d2f863803e356c5ff4596876ccb3f7348fb551424efa38acf9882b412d52dd3c4c01e524d3f3b7f0e884d36f338d3ce7ef2b2cfd41c206d4c8418c7975a7527f9dc672e64c468242ddeec318c71f9b8cbaa14639eba3c861acfc26463fb7d5d7eccf738f5137b59bfa1da13b3170fd6a17a007c1f4a56699cc426170338b4f8e61a54ee789cd3844679bd39e198848ca2fafd75c05d0c8c5519aa5bef82aa6ea26cf6db69d10f3854df0c30a257066f42a561ed1c62dd72c628d5af9379cc43460d536c43408cfa5d4a2d746002f3d302f1d44e9dec3791828a2e8e997ea8fb33a4013d9f7beb2ee233b791c50cdb7c6668db16cf69a97cfca61b756c11bf1b1da966bbc8e3986a663431052be53bbfdf82dcd22b5bb1a9a71522f085c37d1746862a636a0813116bb4004b1f1c8301f0d8501d2c42de8c145feb9c6114716450d292b0fd59f9d8654bcbc0192340072cc1eb346caf8eb8c6decbb5a8851aa6cf075640fd79ab03d553ea20a48a0123f5e7f4d447025094312a49f8a686074313bcdb8fd4b7a5485e74f1d93bc134ecdeb3035955ebb2c2d5bafcb1f59795cdc13ba8fa3dc4870a43276956695959c669abad5013bc23b937194a9e105a64ab4a2c352c7300bebe35d3b72497c2ee45093a4934faf431ebd7bdb9f9711ee260210706732efcbaf8a91261d0519e70ed4ff76d9496444bdf3a20d170b285ad80e854937acc290a3e1f5c0fc6213c7023a06b90eb5ffd0007d0eb17803f0f0492028d72afd5163af30b290782713d6a9cacff4995c2beccfa2e64f2a4811ba5f8021a1a9ec434bbbbeef1efa1ec01de9cc83afe4068ea212ac536f95a234c00376992f1a424051afd4d5f3e80dc3a3ab874973567ad0f9b1e17c9a21d801091e49b80ae6c7f27c73ba8c96abbdc371d8444ac657829afa948a8a5736b41f9d9642a5b97643fed4f0b83b8facf6698d564bad334fe494aba3eea42f3cfc378455a989c4317e0f610c160a67527f5d010fe49b3fa6696516c757f3a99b79f0c641c68bb47e3fcb2cb01b22a5042246d5e9573c74c5d9b543e60b9e4dbbf3f36c44e0d410c750da3cc510abd12ca5cc0fceebb75912fc2e38e953cea30432e77e45408b607377e599313dcc7431d198b9a5e93576f69a76ffb977ab34dffd75022b2fd92dea7d944cdeeaae157b6e52da5699dd54da7a35a03cbf5c87b21d4502e0f3e6fd932a8e5cb25f793c7244a27bc843d87a246514215c730a24e65bfe854bd4d95bd8457cd197e354717e1a2ea3e52f4d703e23ba8c00dadc94e47d4894541cdacc209805b474c0673d07baa15a94a565bf8e7cd1e8103dfb5e134bcd36e31113dad4e9d20c303cdb2775eaa1a8bdec48ee7e38fe3e73e48e0ada8f3273e0fda90c5a018ae1b5a0d8b83073d696484d1d85741eeb951317be21a30f22533326c7ea1ba8d63bea348576a01dea2b1e100c0ddaf740f5d71eb32ad59443dfc5d593fd7fa55e23b73f0beb2daf8270257d3f0d178ba467a74094add7e63d1e7c5135ccefc2c9a0040b929f40f3496b46dbdb0d93a2c0f16bc7893213cdb91941e4d6e0d1c5c0bbb9de41193fafe4266a740b95b6043c9e0bf9bc42f0115fd6fdd49ebf8e77ea7bbf0140e194acfea9778ef52ee878bf73701f5264d679d65f966ab4f38fa0f0e8fcbcb87fa5b23dfa5772c15f91c8f17a808076212dcfc7bcf6ee41043b08790a5956d17bdc894923f06898b119ba7cba24664e005ed9d9f303a86c78f9762eeabe19b25ea0f8cb2c2cb7a2abe817053b45170289cf60b50ea7df5ed933b4b68f144b84b058c86b1bf1a906d566a63706c9dcbb44e92b0214c8dd3eae5088bb0141356ef76ec1d0fa2984edb7fc31b7229afda1ba1404690e50e83580b8bbe2492f1f99bd49aba3d0bb917eda107e30979ec2db72b9b1920326496bd6d215d56ec4502c89514e8ba68f18e2c50c57486ebf7392f43efb24fb32480738085d3c78ea1250e4ee7231838d6140005682a7aee357edc90daac8ff5c2c322ec15dbe7088ab2d5588de3c6f9db3c11458c7f65ff4b715788c8625158c3f134166db045d8664ea64875b5573a7588d8878f0dd89d9db31892556e448aac7d3f85da0b647cb85b09953b124959396cbe420c303357a0b6a853fe4ac9d9e0d99dc0f747b364156a67d54a850df49b6a3b1b70a116bbf8fe8f341f6261e50598e74e41efb33cf1ff597f3078259b1ff3e75a58bae3190aed25b9555f9d2a9f3d9484568df455d27c46f9698610ab4bbc4bb510f8391d5b25045a2c9cec18f22a4e09818cf75d4b73c8ea72196fa38305d08255d389276e18c3ad01a4df4eb2f14c546f772ca1a17857b8c6bc83126a82fe6883f743c5b84abc1870f1d72a662537eb8cd714c188fc6beaf3ea0b8676965dce27bdf986de2d8632f71e743a603899355627303b66727e07662c696e1bb25739cda22ad924539a730085270d55add8c847d21f8dde6d1684b9ee1d37ee897311c24e584b3f3f615f39c07001aaf78f2afe823327355ecde95bb99782537e5a1cb21cf23b9353835def5adfb5c49824d3d6920b961fc9fcbbb82988bbeef3448119889948a5327905adaed6a8571222396c9c196902313b627b883173059afb05753bbdf1095eaadd0156f547c6f80fe22cfadd0e71270274028052165bd7b6003180c0a3143aa14a66cdac1298bc56548458c6f4d10dda66e99c4b34463c3e07fb0241fd7a48e4e46a8d7b9740d19e173f1087cac6782bc19d268d4b592adb931e3ac25e901bfe216910d45453ca3f9089dc7fdeb5d88f0a99c9a8da093617283784c254fa2645880ee256c84618c35700f71fdf23b17cb86bf02e5edaf0893dc39ab26f1cfa639ea89c63719c4fb1d1310af81a94956d4190347e4852bcaa4a3ec7230b7d0ad0cbe2899acecad193a59672993f8ce6e93c83011924e52ce2e425a484b89eca059639445d6e6640e13abde863ac7148790fc0d0af8316b3db9204bd6804f6da7a9419573baed3001306f3b6e7ffe61c7541e63d81d16bd3ecba587c4d6f199ec82c0f2cb62ea5b1a1a0f478b6885fe596694fa2309e691faee39d5b95657b9946f4875f4d5c62b8358f1ca82004433634ec89a94c5872f99a944fe5d076914caf541e4971b67e961727f8cfe4c23470e95200bd258e3df42842ecb59f110f4b49e13085b3db7dcdff11f54a5560b8481c2061486cae1e91d085f01551c329f7af126a9e9429d4e225c3beb1f25e230e55de17f5824689453bc406bf891b85e4576e38fe8320085553b3a1a15c1929461ee1912ef6d622a0c2937d0eb578b793db6b0810115caca9e1784a72f3301f81efe1696f4adb6f16fd5adf7d67691388938f648dcf4e2652576815a148219a343143fd20eec4c32a54a0ba95ff7b4e352841eac20d6309e13e399fd6db6c0dff9b9fe90e6330c34d510b7ae31e1dbc1bf238e7576c49cbd90e33456e1d8e0f26874ba962489de4128ad1bcef23cee1bf99cb06b85c50e09c300ba2f19ee6025b7cddcad6ff7aa9fc6ab9dd14b10d4392777eb56f6e16ecbd5c1934ebc0328c00f4cca9d6f845897d692a77ee3667763723da6fd7020a44ceeae277b731c200b977aed2ecd38d07181e8a09e6345bee102754b299c8b98d13450de80e643304e78dead28311bfa75ee37f0f972b691fafea741a2212933a5d22e2124bc7f40d0d90173524236beeb4606fe57b9c0d8f88e5cf030a9035b0feed1562e9ed938dae369a575a990051ab0de3480df6b7b21dc1ac09bd91ff956b1bfe767335700b4bda0ad590e31b54b5546f93b8dbf63be0d6c19aa5b87f6c342823a97240480a6912ef1c61722b8c65cc6b5526bc576164cd76327d743389ec9a2b98618e5a1f88499db846f6af4d3eee6d18b20849d73bfe506d8f459a92f70a5cafbb80449f1c06bd15abc1153ba332fb3af5504c11b8e1d6a855bd330bd5d15d7bfac6861da6d2b3d12a720bcc25228c486b14ec857e207f7f8b4b8b492b879479b9b19d2fbb2628672d79e1634745a6cd7dd699c6fe32c16f8a6111ff4aa5a82542d20829cb8971443f5934b58c04b146c805d23abb8132d4cd9e5582c5b3ff0b50b845b05a7524f4ca80842765f85220b433347538a45a6bdf63c4781f2b0f985dd4d447ea61c9f579903e3d67890007dcef2eeae8048e713a51fd43d9735058b4a83244edd7b6c2a6f8f16c034f21489c8a20205c3a65a168d94e7a674577c90fb2fe5be75f91e8fd3b1c37bbb35c8f9da4c6aa07ae6658d57a66806ae9dc65c98596e16961e1d4b6d73d25034e08394abf70ec7ce917242aa5a3fa370904bb7c807a79e6771d129e4dc2b87c77cac21e4abd6c2e72ee8fb2fba54c6e0b673693343789d117aa3f0e1f4b7689e90ad692c70aad8ec452f818ecd8fb6269aa7398214c95dbbc1f9670bc45c3adea4ed342c4f7253055faf9c6e9bd9bd6bc14df15d8382248ecf3c580b530347b241d4498b4f16795c03cf13772d1821d7b5cf576b968b3bb22bd58988aa95d540eeca72f2797e9316b9fab0528a362b91fd93345557ccea4e5d2ac22bcff82db033377509d393e85e099539a7ba1923c221034fc2ce2e788beea5cd9ccc16972b98831b77683bc25a7c09771dc6ab5191a985725b02972f9065ad7182a9d55ad9a6162ce53d5f673299be325db5d2fc271e8363c8fbf055864aa975856c1fc0e1e45970fa5ce8200fe81c320f8f786eab0864ebb0c12233942603a24e1fdb0f6bdab2af5fccbc3519f28c3eda5d84ed46ed90d2bc5d1411e37f22c085c9f190a1118ab0bb95c5ee773e74206626dec220576fe093d6ad379ae06e97d273488ba9104a3cb7c0e99352553d9e5cf26e3560cd69dddd34d7ece2ce4feedb24ca48ab5f581bfb53126bd1bd508164c91c8d2fd8e690447f7979e3d32d8e4be45e0ed0871e152e5927bf1d00139025b4d014b4ff4ec26ec07a26c4767040c8bbec273f0f02f1f8d710d75da5f09548ba721018ca093b03ffc43bae4080cafab25dd9217f6e7903d7b5fbba354e5674e4eaca82c17fc3ac423e00c8b7c6f48bd0976d9e60c973f460fe735c37959d5239208a1b6d18221193d0bd3b65a888201e832bdd397ba8767bd3866a332c308ac1fc980a553d1fd9f962b92ed28f4c64a2095a0792ece02f2f1c7e0cb27dd7c384673b78015484ac7ddc3dca84e40afc66124343f384e3c784c1a16c3bef5ca58b47bc8dfac7173425269136050d889372842fbae5ab78e782aa38af56ea86dadd866370c7fca116fb29fd9bdd748fcfcc496494efc9693732bf8a008bd61c07820a784af05de9fd07cbc921927fe6587e472bf89a467c5e9be9e185631ce7d783bd4342fe50b98f50f53cefae9857d79068cb0e6d8a7a05c50e83666522afefe7850c81783fd774de909f2eb926a8f408928efff0fd2ad3b917b9cc1a513bfab64c1a2fe6910c55b9823a053991a256f0afbaf3ab0756717eedcbdf0811559ef8f9b673d0ae20daeab5559db8400da64fa698112711c4861c7601c6b9cbc383b6742875bffedbaa780f381ebd9db18b2e5f7082eb813dbb9c9ca3aab5e54e52f8a5b85e3be9056e6b7a2bafd10f55ae94c28a6e7fc189b80546f8b282c9beb3c474ae56cad765cdcbdd75787bfec3b689b72dfc6c3770245f5c4907aadddb4d24c95184f630c470a11f5fa243d2c14c1626a254394dbaa7b3c5ded0b58b6dc91f8cea11465ceafef42a3155b1f4181841f7329f6e6a2eea086bff36293a3bcebda5c12442c39f20cde533b84eca90c11412220594f596956635f46190510e0507fc1ee673cdab7e3338acf4a1bdf0f0975fbdad3258b850d50b0478713aae160479497f60e3d5bf2e0be6303236024cd1c74ac0d0fa5cc15ed579a3555ce3a8bd058916926be68cc64627958a9b8c7eca301065f6434c93087b990cc31f7563388628d38fcfa78c04d2b84b3055572d8a8458c52d9b4f6cdce6add843eb2bf17fe66cdfe175dd68ef95e179accd2b021aa96a07fc6a2cf5e0fcfc325d28cef79a0b9e620fc753c79078e948876acfa581898e55ec18acd51ea6d0409a3e26208fdf0583a22bd052ed631adf48930dbdc70a0cd4840d97b49ecd6f2a8196fb116848eb6b210b1bb1103fba6777b2abf2f5162bae4cb2b53c675722199b9615752d30964214cefd8b01f212079d2e72ee1194350bcc6dcd13802e31356ea73cf2e47e4f2f04dc3e88c6666ae8416f2a56266b70128da7a9e1f438e4a584323730971a5e5a789da65169810a31ebdd9bd5398525ec16c90f4fc85f8392659dcfd84deb0becf879fc8ef22d390b23e08c1154c99bc0ef39c804068955239751cc920fdb9e0d0cd80ae66751409e72e0c7b27e1f1cb7a1619ca9b6a0a381a4b7f605e4d15ee43d229602d2d567115f451261c06feef9b3a852e6de8bb5d3143614dad4b6959a12bf698a3aa0f68c737736c621a15aadad75b4628832d3426d35f0b9e770895614174b25a89c353934defb88a99ea8fc183288c6bb7d45f6391e504826e88241c992047b23b06c3e2ce2284f604c200d7a4697b980545216ff58fd329806ca83bb995b35b3c4e2c3e3ec87c54f940a095e19a9e4de9f44ca484bbf1d45b3a843729219fb60c1e0f1e062de907d5ead17491386efdd46613c9b5f5db236d563a975e70674338daeefabaef658f2935260c59cf5818531f29180fca198725544df4cfeea49331194e6cc3697c6b719410b591cbf42df493ef47f8a5177011c930a7f418d226935dafecb648881d3dac2418efbacdcf2748f8b217136f9ec1198559616b7a5dbe2c75e319f93324ebd1d2aeaa184f4c69b2b7eed1918c43a1b9ae61ae72f7d93fea42f864e7e8131a999edf7760f3564a75bf66cebbf80f324e3e5931bbe509972b99850db121583887fb33de31544d37e671b244df2d62013b97b871a2cc7f3274ec219ad17974c4117a3434e5dcc1b0a97149fa87b6dc8d065d0804c4189ab04abd5682c55ae94bca9e69120b0734531330a656520eff3422e0b0519c43fc9f018f8c6c0940364e17da3afc2d6e158dd8224fceaaa01a9535e549fe97f9053d5dc53bad19b3ec398db03269a97bf5cf5cd8beea1e04df3ea3cd5d4243825539a400fccc73306bac90a2e7c12bbb55a615c66c3f08c7bd8ef0fb32f32b8a5d0278c54840a2403505c534b3c91096a580977de01417433614b2019357bc7b9d36408496b0236de8d39fe82eb7e4a8761d5661b32fb611c95e4b72d70682c096339fb170818303f794853fd134346b37aad7044dd861cde7ca31b17675fb13c888eafe5e3b2dccd1d7299e13b47c597ad79df818b4a6a221e709600a2c91cfa4a4b6adc853a0031809d1a59ecf28fdb0121f9fcc3af169084346e10aa0f36edb258752475166513aab21c8aadac6b267f8d07da0d1de6cfb5d5ec6e0697c7bbc79d18e43bb0d319a49ae89f06dd23202da55046f1fca488b93d58433ecb970c92029a45606e12ee753bc6be7fed7d7215521e66f8b416629952fab6db126d891970456e6bbae938257ffd10a14542c43f7ab762a9ad05065cfe19f064d313d966cd5f87e4fb21a0bd4dd7bcf34b3abdb10664638d4f381b0a28ff1861784fa5810331ba549882cd448c9aeafe682c0675df6d912a03794aacb8f2575a68ea9570f8032d42fbd468c2268fc44804e14793eb1a130b2f8e3b48953bd5d80bac503d961d08368bdf184002fe6f5b8822271114b312b53d4095e9a922b962c95c7ff0c3c674b8b06b86c4082f16bf5ab54ef9417fb5b293570094dbee2c810ac4c98f69479951d23f59592069dffae46265535ac725889b9b265313e955bc36aad7246fe89e8859243a0432f6f2968df3142546d389c2bbd4ac2d39595d9bb5d750b6bdf1abe6aee2d1cf261c781bbc2e0279efeb0ae55dc93d2b36876ba6ef13dd4e3baaeaf23741c5c1e424990fdbddd8563c57d07be8437f53f0bba8664d2526f3d15b81345d09bfe255567cfc51c63dc5155e020cc40a1aaf503d3b6235d7d2ad674b98348801663b5ff94a6986b2dacc624ac81e58e6b7473e544d2210ef8a84e5c3587b21f263d3eb572adfe26857760b614b3b0e9ffe21a349062f4736f581330be8908ea45db3e2b645e5cdb25bc8f9ecb3ea4dfc964765648d104074bcab396b71fb39dffde12a5fc303af568ecc123228b47ec628c16eed0b4d6571860be02b1b45886beb67ad9acbc1f01d99893f7dd11f07c55b95a42ca76f1df4fca70e920df5e50fce4d51ae85a8f8cf24076913d6b551c1d8cdf1698afdcfc7c689ace97093b7944e9900e51a3f2f34d64f763d60fec48246713cebdb7fe5b08bb9a3786ba766c31455a185b20efe13586850439781c8cf4e876dfbc37ec678f33dd98727ba5a62c8881cd7749ecb36515add6da2c6c67298196be16a81dae7a81f385ecc53fa39123b59238976ff636a2e0703a9552431cb2e20e5f71089c44f67a74581fbb01298753fb1191f03634bebb44cd6b74cd58fcf734f93b33bd9931b0d836e39e4b3053eb8c84b1f3efe9b99ce914f73a4268e034c6665f358ec19455461bc95fce5ff9eacb1470017fb03413c1a3c1196eb6dd29373965748c68cec6327939761702e9e01b53649f8242ae9e62fc61989eed74430be4d68732f9219221d1ac87b1c3c45a01a4083483fb99cb4181514e5f572620c8fb3ac42eed3d3798a7aafb2b1ce9c71288c356e15575f8e1c508a11c9e6330d2ef0ad1bcdf92250b8dad56ff68fa95c2943e7d46ead3c5c859f017732dcbf1ce22bf36792a90e8fed63c018b424764a638c22e112623a06992b037ef7fc0f22f58c048f068da01e723dfa17b3380b211f906cfdc81f6174a11c178ee2ed2a05ad3c6af9f14ddfe58f8f0bd2bb716ecba5765090598cba8fe49ac60fb95818af5363ad0f1b91d4cd8b8179b39477a92e3d6753028e504c3daccc966945e4e2062e2853384b0085bcb03dce2005f3c4342f8bffbc2d1420673fda11054e3a8ff488b4e6db4b42fc9b44e89183d88dc5c4c209db24fe7f3cf6e6edbf499c012760a72fee62e100415390ad4b43d3ecb6c5400a6fa3cb3aaad0e92d279ef6e2b331d4c0f134d6e25acadcb283c8bfb99e21efb544a25aec72df90c1d16d25853a51578f79b9f18f51ea701fc17a639b86bf1833e187743e9a0923d1451cf291c4a778c50d59fcb02e9a931d8ec1893b758702abcebbe1d82c38e9870c1522af5a1b7f8a367cbdecf7c18ed47005f7407361f74694a769612f532b09adbe80860295b3057a8afeecb649a96bf1ae765389353d2cbab2d482ac42317fb081d3bfc6fd5e5f64eb855772192c0a9924ce1cbdeb1d84c843e9e2aaed43129ec5e201ae3bc6bf79071ad634195fdbefcfc742196bdf7647c4712a313ca9e9fdf176f5c138334e4347871103318a037b18296ea59dcb2cbe9c35014a17aa2e586f574207daef34491193afe749f4adc565bb47686a29cbb533fa10fb66900634a64d91880a419813ce0559e849e6ff561f46766ab8407eb4f18bfe4e11a19b1bfe208a4db170a22ae7a6b60f19a821b5af92a2b371596b443eaf744b00261594df97d45db5c57c15c23e6f63a2823c6a7b67744c7bbcbaec822d1af91b669c28b17c18c000884b5cc9952beccabc78feed8d943cc0b1943525ce97604bab565ddc95fd7f78013a88637293b37a9dfcf86ccba98b268021a68f5a9488763b6ebec8ab2ca107776e20f79e4ebf9b6ef1e05feb5b41977088c72899b87a855f0ad0de854c2e943412acefe2051913787e3f30b35467facaf2205952ac3d615f531d84ed062f067e4cb4b20460c7cc00cc9b46ec390536d7863a884f17d9f083702c23a902ab479e44c1a8cc06d3ac51037f +MD = 240e15ece6030c9d0c7aec2c7f80ee91a8347c51d3bf33da94391131 + +Len = 74680 +Msg = 026cca8d9b9d85b55cf2fc2c9f70f140cde9c06bc6cde4cb8343bcd2fa788f3f4137cf4df7bb9a2ae0c186aacfe19e3dc91da81f67bbaace7c50acc1f81ebe570c9f3d0e8f6253f5a116bd648ee5d1eaf503bf872986171bd7788b1fe92af793abcc9e372c3bb6fee81a28c0a324912f98c08c0cd3d6339bdce2e354954740db65e5793296edce2efcf44f27d847e6f4fb7f97162f550734d2b73bc8c41ba317841357669521a06b27cdba02f3f6d8216766690e03a99acf031e1ce33e4e272f4e7dbf3bf17f369eafcdf2b7bdd8709e229d895a187af455b5400d0dca89d40b0c4c391971ae97b0dd1b7eb0fe96b553744d7f6436711eac314496ae3274b39405a74d68df57cb87f9e0e6537ed7b029a79ed49324351fbebf533f2e3cb6cbb083b784900121db0d4b43b30a0444670602b70f4eac6fff71a69591f5b1f72548cca365f99fb5ce281a6d6c3c5a85e4d4ccc1b8ff94c7c7af3031136b58e1c7452994790c83baacc2b086995046412f794ee3580da5e47e5fa3504ef8fb1abb8de2b2462f74d97dc253b5c2b091204edfd04676e0a76f2c694819c805604a090a3f2456cb39ba4a104c2270c303cc4bec99119ae0620fd9b467b50bf8501ab7a2881331499b041a94e3f62af163ea2d8af36d4c759e6d8e2a484b9f3b9331cf3f04a65d0f6260f6365f5979a27b25fda024821507223153b232040a34f13958c8fc0664875675e5de0a72e43e1122c21575777cfeb7022e346f08d64d32d75b25b85ace183eecef742a6af32dee8c84d32e750ac225882999457e8aed1db5df3e80cb2129e46c1ce008682ed8da094cc197a345bb346c4bc7fd8eaf7b7c7becfb9c81e7240e9e750aec951ea59c4121c7f82ab751ab569ca7de62cc6115d18a4453a3a770852901da1d194afdfede0bcd9831e8ed54ed2521321f6906b05dc201ef5aea7511b7c939e51b3a49c68512bbc0e15ff5f5daed1e3ff00fd217ca9b1ab6cd379b79edd30d8ac377efbde03f79b862a4d357c5fc844ffb442d11be1e77f125164a87752940553a8859ab9799f0c8db3fed42545b3da868937f65e15200e7890fea01f7d3b88ea8f5ed585228063874b9ad7e32112f92608130dcdd3f9ee222abe3b01ad75f7d3547158bb8f5a44f57987ad2052644570b98a83e57ed372817719d5c873f1b6a0705380e7107b356a967bb0776a3623e905f5053fa65b40291ea81cde613d69c49b7bda72667199595abdae52c8f738e175e8ee26baefeb8b89cf5cade59775c21e60e1f7f1bc05440ee3e34d0f25e90ca1ecbb555d0fb92b311621d171be6f2b719923d232d8edbd5b74fbc09d50b8ccf2670925ed495d8abd1318c3a600ba634d8b1cbbba46d717a8f7545803f62c94efee3422ec1b3d1c762c8e0ef31cebfc0abd38fee89446057fd1896dc384b91702f8e8d6e9f3dc6304e91e0dd951787821b605365e3faee9689a078c6c8ae2a5c40d83ac6761aff0d1df256ad94ce44a3afc0ddc7ba79645cbb75b3e6f873dd3bb92813dd4f34c4875555080636db3f4af05cf5bd17a80ad41cff0fe3cf82f23523e8de5c31725dc68021c0918426c0a0649a65ef016f272333a7546655c3b171057f64ea25bc11f125be44f685970fcd95e3f40480b6047488d34916931f6218e7556d3032fa2a31cd945cdc411773f80ba069a59c65eaeda4ecb79c907c4c5151d2c1d66014eeadff0bd2ebc18c364a4c378d795e651fb60e5b669f55c4b845cc5e2783b7f3a68e438b6dcc0ce09eeae2122829cd9cebf84e871ec8e8ddee1cdf6168df407d99fb217cf4272af9f4005597025cf1f398dbedd7a7bf53b136fd13434c93029b111d224630a324c17fb62b30e2bbd3526d8672b5c82b9e26d810ef6c9b470536541bcd51e9e9011e8932ee4491ed7aa2b12265884bb4cf261b7ffb441da25234ab1eab05e6a1c9fa589c253ad89beec9add64fb7f603f098496fbf349a4df07f5e4e42cbf172853c351d597c7d6d38b1a9cbb7ac92c00863a80ac4a2d9f0e7fdb5d21d09d0043ccc68dd1171480a5f40ec2825cee6932071817891f7a3324098f8d3c1284c00f6923903d581031b6b60c0162185bc223fa91be1ae9cc0bb02366e78b8912d0ebb75f0b72d14744765f86bbd3439da186df3c06ca4f7f83435c160ea89ab3bd59460d423a292653754f03644e552091bb237b641fa721345e2201650bcdd3efe88382e6cbb649c93403069d4bd3811d3175d46893874d895103bd8d3d991fd30a0e646bd01f0e102329f4c944354baeaa34eb86ce76410cdc7faee9b692e4114e352643cfb9ffe2c302727adff0ccc055ff054118eac83940f459fcff41cd2525964d01131d9b9ba45af414679c90ecf512c62a1b5b3f993f104359800c278910a05d1652b07dc547620e3883af449ed83eb2943e4e13a72741ff61d178afb79ff1bb160728f2da1cd60559bc9f3450afd13f220a49e0dd8a17e2b87c0db22b33f8fb6298ddb754a5158dfa6ae30caccc58d055f7c523c6d7e0a1bfd841db6e7d24a29e904517bf60af0c9d17211a0dbe542aa2af5658dda16a910a8e9b980bcc13352c7605b094e01115a469c008ee0651929a69540c9c76e4450af791545db133178ec2760e5fa3da1db2ab4645e834bf9c9fde749b8db90c4243bbc9ad0ecd02ee47fe4c8d8a1c68994a842a5d66ba1ccd35770e921bf830fd47439b0e8960011dfa91cfaaaeba5b2cde5cf2bbf416f798fdbba88cd1b4f0fa88178c05481acc2af9259602382e103ce0ce25de0acbbe845b24c8f8596fdaae88b0130dd56dc289c6122610b0b8263de4304a503558f013d03ae640fd893cadbb95d6a4bbd962df03f0065293191bc47b2bc6aeee3f2acbef76971338a1c56ca3413d4665de4b8f1537ad4469915f54f8392156affedd112b6041dbb549d36fd23abd8f5dfcdb2e9c618172aee16f63fdb0e0c3f5186587f6707cf6ddd2052bcafadddc2ea5a011ebf62949dd69da75fe5b9b83580c7294e33faf113ceac924f00a24b9327918ed967e1b467f9b0f0f6c61a811435b82cc74166ea73ce4adefd3d1289313e7c4161e51cdf4f015ab94ea9bad0a317604a31bad3225686011e108f830164d6230200629b7e1f93a0eaadb41f0babcfc769d6c5c701839dd93ace1d7f1af3978cbafc06e7f79d5a8c6b5c0fd39cf404f572fc8bccefc4bcda1a80108d3ca82bc14f9ef887b492fb2524a3e35ee9465ff34eec336954df8b0da66d8f36cf4937caab2e61031bc52173fdc958465c6988c8e3eee627989db179c7dfc3003b9f66adb4f468e49600727fdf1895155b24267c1b49cc8c23c6d726631cd375e9725d74543736b18c099650b0d6c3525041e118dd470c225d22a41d636de81d3f8ac7277241f2f265a936ee5a4c0986a28663a2102ecf71af78c165b01a2a7fa6ae4accf658c53088a8fa62c3c29038b9bc51259e473c007f92d506306bc02387a88e6dc7c5d7f15fce89b3d57f7ff0fdab56a66eda7c5736368909cda8d391483e3c11cfd04fc051e38ce976cdff37d61a182f682fb6fe3d2d85756e188a525339fcc1f5c05622c6aeaa0d90f23893acd23fc7748d137efa3f7052fb040eed0e60758421df13a126f88c260a37518fe79c74777a3ebb5dd733f3a95bb486eae37d50623b73afc4da89d93ccce473b0ef3e5f466288d5263bd3b58178701bd2395634632cc5511348293a58be41c5802c80a73c14b4895e8ee55fe23980f52b77b5ca90da1d2217d9a05780c8967086072cf4617909018f373298d4862b3b800760baf02ec34a57f5b5d7bfd22a9b4ae608f0be77d16240a082096047bb1656501fab8b10fef05c0532631ac4466f5532de415af752d7fa309d598d6476ad37babc466a69173cac6fdda29b8632142e54748f3de2d685444f4a3164c6a529aaadfd32941f5657d19d7e3d490036b15db29283701ea397a6655339eb538fb13891ac17111c036953f5dfdb2c1b9a6e6bb602c4fa950133a8da7e182cf47e6e67ce8f9fea466699b8e1c7254dbda574dfc78bfbe32d3a82d31794772f92b887c2cc6f702687c7108ac8fdc2b3cfa0eb414cf4d034d095abae825cfdfa138625cef41332cdc66df650124a5b663ad3fb1aaf06eaf46559d6c284a0539761307015ac458ee8eba172932676986fe486caf05789f22bd4cf2d958626200e62fe8f1e5dcb2b7eddabacda6e4920d5b701834eac458fe1053fd5b1eeb70d650038ab71706eb39786d3cdad518b9ca09a8b4cb916016a1fdff0f99e251bc2a62125eb974bf6cb3bcd61fd943703b3d9746e4dbbfd872bec4c2cbfe2941ae6d9af0e7817582b1d739a9c6318887a0e872ff0b0dbc99d795134394f07a27c2104913b7979fed55146d5cd28c0adb855b2b25a9aa2e20cfc557d60d295b6081d31aff41746a4bb0fbd673c73150c852f62e5f43596b19b5d0010e970123a877f67f1817a05b4a6fedf36316d9e0ea944a0b005a9419c14445ad51c500895c2f2af3f29c93e955ec6b42bf43ee31beb3d73fbd71e2b0c3d586cb4419bfe2f7e1c1081362d79afab10442ecc0d6c9c14c2e4aeb0bbda6ae0423d969f787d7086a5929feecd3f6a558498280302c2f7ec7afab1d9a8d81cc3aad5617f100cc0a1363d819ad2172e23c9b7ffdf476c963b0ebdec9a0ead8caf363dff298b338796771a1081638a63de88a99da901f2dfc92535483a15df206b917c56e5107a2d2e0f3032eda91f714e6877e8a85bdd3c5e686bab03e4f842c1619a50fbc76a1a31a787d024cb5ec03b1228ca267bb314c17f66ff3ba48059774fa0d4b2d98ab667e628d36ff2cfb86d2dc42a6989ffcfbb112e2a2b7cfdcd560295c9546e626a97751a211646fbc2ab6254efbaae46d414c6cc161b95f9052623811927ad7b9c8bfb65a461ee6944bf59de036111128d944847a95216fb6baf596dab74bf5cb6092112429813a1a86fb96d4da6dcea61023ca7cd1a288c66b84d606782cc8d1eda8f28e502dc2c54842a06b5d13457b8284df569b9f3335e0ba662359bfb973ec6ecaf74e87291b2c656b3232943e0fbcc213864789e78bb6e0d7bfd0574017c94e0b0d792fc5828fce27b7ff7310d90b76078a89f52e3e6aa2ab4a7096053420e1531f648a30a20f07967b1832666e0b1b3bd1c7636fd4587a4141befe716f7fa303db9528f2e0168c17da21549745382c210a845734d41cc24a342ff30d10221dcd908f7e74c332d62c738f5c2be52f134783453305b4343516a0281640ccd4bbf0fcb81d4ec1e07054d5c6bbacc43c7b1fea8e996b0b1b2d47044bcaa50bf3f81e6ea367d972abd5216f7be59278fcce3a9ec4fcdd3f4e254bef1f92b2340c7cb674d5f0bd4bf19f02aef37c6569fc86f81e9cdfc4c759b7a5aef800e10b8a94598dc43a52c45e188912e1e2ae1da83008e85ab4ba49ba4ee4e28997c9c8fae9683802c742624dec1539abbac51a7c43cd9a930e362cdc757a2828c9d512e9e66301f609f4ac4d844791d55752d7055cb693ea5ec0e75ca5d5ce7a098b6fb415fa5a2284f208d97b80b9e35acfd9cfc56462a528d31fa76a9863e1e96535f5f27ecf2ccac31e8e2c60f04a47a4a93828579577fef52c493e3276f4ebeb1c3bf660df594dd043b82168f39e8079abcafff09ab743af93be9b348617839578d2ac50e95c80b21ef404f9224497a78814a6dfe107895aec73fbff0fee42ecd2768ebf9b9af5d116de21921ad11fb69491d76616dd528fad05fb2272ddac69cf74182d54992fc5b1c301e43bc86b4f77deec339a9d11c64be0f32f5d6a1294b677d2fab2cb90f8763f4030039f2caa98386fb8eaeb59975f918e763e1827e62dde39c824c6cbf1eacf473600c9b6807c4adc76863c9c6b3e9427b7837c5ed6ac33c716290f334a75ef9146c1ecab49aa82acfd0b054cca8f654933dbeb2a0ea80505554e09595aae0cb8e2b55c6d6e998c7bacd7da0d3dc8918dab85f90bc6a7ce7f15e249c0aaf9c328aa69ad9f77dfa4a3168b2f302d60854f5f303a96c721fc9ed8b444ebd3ff9f6b0e3d6493fdc377cdba83896811eddd18ff69043d68bd1bdf0e029f4d3e15fdea7ecef5fd590b8256195f5d1793c6e574ec7f0a7223cfa8da267b9d5771e36b418c9cf63e221e40d6a37d2eb12b825aeda70091d790e02ffad27dd3bcf7de73eaa805c9d8d1522fb9f97b72e731b699ddcf9c5ec038851dcb6287e6c0386d845061b8054fff6dcb9a7bc8de0c5eda1edfc680a5ee7324feb687382b13cc17290d3a121d25f4b790d2cae3a4a2fb43766e1c7c2b94e9465f6680fd352a2b71de9ba1b295dd69d61c0d376a8b4dafa92d0341dd4465f37f9c3610457975cef421663907f3e8c73fb9a461bbd65ed461af39c73284d43a2751cf95bf8c893f147e075080bbda855b1622da563a791213797c2d0a616215d3fc7d81b9c2c6e46960f998cb52153cbeae22f1d81c0ee1251834d3c36e822f1c18ca74c2d0c1675956b762265b4b45e0fe0f58afff92ba1d080e6c0c00d6ee561350ef692b0b206aebbb5d503bcf495862527f4c49a71561c5635622ccb2cc18988b422b3606b8248c9fdaa77823af9b8796c63baebe7ba9dcde12c626b840ea04f42d878646970ca5bf7aba94eaf110da36ce0c834b654bcac93264a349f520e505f1ec903d3589e3a4adf82687a65ee6dd072d6bc05acdfbdf257cd70a5183a54b4fe8e87d1c22b2e9f4ee817c57dc19d4022cdccfd4b70c6a7c7d165bee58e22e97faf368d37d9ff9e01c4a4b5e2effc63f793acc6b8d590597e3f5d10437184a5a914592c3e1074eeffff57741be152e2f911a4877b78e3b185009ec6b94b409085a637d960385638507f782ab0fe6764302ffc681dbf8757e3fa7006d0851f531a4b1aba24b96d23fd2e4ffe29ad0292a5d6fb92251443f2a0171df80e85e99671ec48f712fc81580df324190f58ed145fecea2d1bdee02ac53eecc6feb4660090720ab9b2675a7e88b53ea3ea66ee91665a1160888427a958572495257a5d3a81c3a8288d63bf3e775ee6c3403fceb2c309b854f370dd1464490e900d4098ec4cc96a6b2a597a40e1d564a19b4b541e7de02731e409cd16eefef2dc3d6cddbdf76a98ab11af512bce02006682f14a7d9cc6a51ee3b7be55005d18a43d68f5558c90790fcbcf0da846cd023a7e9c767929a57c4379e27779a14ec70e969aa85d122256c0df1f765e521eb14416b1a2b82a64f2c92df2c12bdab94842cf6cbd7d920877e5d50953f6f9dd56add29994e2aaeb50d8884f6413b286e4697045fe5c132a24a736f36e1744f2399c3abc15a0ae22de97116228d8319ee0ab018c31a39d70a52e89478d6a3945a23ad782ec9a40f1e32f5091d5225fe7872f0bab1ff938c241a1566c7996e3bfd9af3054e3776740a9c8cd45329b454a201e16099007ed08422826cafa4447462522cd98c0df2cf7768811e708e9eaaff29fa80e4c75c32aeeed7fc9d71c6fc3d0bb37b84c7c95fe939aa3dd1fb456ff46db4b221aeac3108e15ecd1dac5621f20a4f51a4ff3ad3d48240b913fa5922064fa86adc30ef4a269cbf24ac9e828405e028f2891ef799cdc4fd2693063a5fc9423e117108a5ec9c9351b9c6d2cca10d1008e48d916030499427fcfb997977a1e7ee5c8c606096bf47bee2f8e3a4f76c3c379e4f010525bc5269a2aa4e9718149341929b029fe7133c6f36cf4b9bf597a76d8639f866e8ba922abe2b7003afb5f6d06a0959c44c4ce3eb3b9665222a33f3f342dac20607a8d5f3b5fbb85facfa65032963c07e34a0d0ab57fadad813b5a4613aadf852f12b804d108771fb9e5670627746e10e4ed385381279171e30913b40042025ee339743af647b5778025e9b66da0f3624e949640a017da4751f5b2b1805ddb5285d9072931833b35567776898a8493a3292770fa99b950d6d2e77e641d63340a1bd9baf80a25d20044c354a70886167c7d8d0ea8f474bbc76ec7c0f65ebcd32db021d5d00993428051f1cc376f10439453b0b8733aafe2c12d7dc18fcbd080644999a0d8b736535e85e926624589e394b277b683f2d48e6d18f1c655ed070557f02963399b76cd42e893aa4f1459be23a3ca4fffa44a8772360c1a734bca29adacb9651a3ebc77d383d7a02763e79cea2d91cd0fd979957a90b4040f6e7fb30f8631efa4266e1aba5d9e4f11bb9d459058b476dd17c9802a2cd2cb52dc906c24847949feddf67e9f7ece0036a3e280be2c1c938ee9a20f2c144fb8631f631c95b179bb52ebba6b28ef51fbbda31e171cb2af6b4dd46c0c285011136abf628b09121a8dc5d624a900b70d88cf43bad051f1564840628f3dc5e602249142f38029b1420681289affcddeecef940c1c7406f1fa708f1a736aace00932fe3280c49d95da6fae688637386dd5773385adcbe2bb812c6384805d85450d87d91670200cc6cb10731f4f17e86baf69d537d59c8e56d5c4e4291fddf71ef8694b772b591e4dfb31f9d45d6886e0640da1a8fdb1b1cadc803990b6b1aa72b1217cdc193a7c31541a680f18f1b9d5dbabc0628bd0f42080a88b42afa2474920f693cda28ace7abd13e759e87c2a50fc8b59ede9c2ff5fa78301c5707876ac2d32b8d22e10bb301d639e3835cf805caff595cf7d4e798f3b5ac4a363fbdea1c01b15742595ec5c5e53b63667b464fedc309c92b13e0bb92375fb63eef22833c1fbcf3aefe10906672b57dbe6f07e406b8595bdec595ce4471ccf8e7b27fb67181811adf4bcb9342033a8ae1a4e7529443ca8d9956615188f9768ab71600047adbb01539ceea4f071b2d2376c95f2c1509dff6d162edd5de32ded423866dfda682bc7b7503e734142f2fcfe428c9c1175efbf01d6795dbc2b2886dc38013f2832b28c5e7676ce307b394f8c05fd1c209c7c131e3d0e3c3c4fce5d00d8f8c83af19678d2785c5cc304d0f3681eae19f7ae8a214bb3b723e637689736831523178f20b29abcb9c604c5ff0f1af3673c9c91621110a03abac0cc3d5f069e1ef8c7f298633eac54b3fba70dcc2beef22d192f4c0cf56c60a8d5f497dbf992dcee530446b246aef7ccaf90445122761693766e8f3a837ff1962a98bc3396c717aec2ab71c83b2c68b92869eac787f29a16b93875c24142b52bc9a1f59065a597e01cd163cca58d70216e1b4855e3cc475fec7444ccb71b7410b9f58a1aef95232b6a5d62e70a39d7ad8a8da624bc6be516160a45826e73f5ec027ec3f8bbfd8537b337b741f498650483a64c5b9d373ce340e1c00aedb30168ad22e853524683adff47aa01ea12e2ce615081230b98136c71e3fd8cbc41602cc0cb40523ad9e63556758250750f15b52c728ea490f6335cb1f743316487dadf4660141efd1c7576c1a989551cf7c75fedf3bb05b3b965590805dc206ceb362944c9acde2279fa1947cb05396732c074acbd506ffd496f0b7ff60e825cd73eb4c4ee50bb32573bc5f1c33f23de28c89d6fb79509f40f191c1db0227fbdb2b825cdb748ddb41e0223c6797f3c0a41a78240c9d2fc22712d31eb1c603e16e46d27680cdb6b303515dbced50dab72e624ca26db4e6f0fd871f5ef220fe8efd525609cd5538d2f063c9411c030999e7d091d2ad5528b41adaf0d33ab78a4d0eda87871faf66d38f841f69820312e17701c25529f26774256ad24bf9de49b4294bd18ef630d30d373ebab6adf589164252687a822125c9a3d34e099e299f5cc322ee81ff8df0188df01588fe3edeb0d06eeee34445e62cfc80be9cb60e0d9f72fc18f08a2b606e0a54ca8101638639b793e00fdee51b06b61fce85d01006f4af33fb6b247d867622b9440f45e812295e8dc650b09346ff66fcd8555ab43e04de66f0426d08e4d97daa0cb43a50f5083ba91c6667b4fc6f65a4767bd48ef5488701b226b2620e0051a3aef05d22b14ed5725cb172eeadef58932379cbf4df284fa09b7892fd6473654285443cd1d965c27601b25084ddf7a66569cfbf8a5e3c8ea026c89d5f8abb2ee33a3057e2dff58920a5f98f3c0f00e587a3fe1db3f4fdcaacee972ffcd33ff52238451cda3776700ea3e78d68a3938c768c75650625d49a035d54c959e08a7e6c09e31a2c62513d9c961ce98f4e3801be6dd633f57359636ffd8207eb3513214d29aace5df32e3856f6fa12346166ebdbd290e9067004bd3f39bf5a454372643201fca7e36c55f6ca411fa5ec8f98b13b552612bd7e6f1dedbc6d3eec9e20dda73d69455130710f630efe031c1b55e86950164f8f20e0fc17d01c24459796e4393671152be207d8cdab05b847b716f7f27dd1ee0ffa12de3a1f2cb8e4e24d2e548794a5e7e372f946bfd733f3c564764318f97c945c6d3ac1144f5b4ee0dc0285ab4455f9d74ac78ac7d314b4d8c6d9e7cbed79d0da68a84949d499f8259c07490c20c3f61007e9e62d99c8ef63a6996d013e7429f68d9d3f1a6cd3551335a31b348a7e413032c7058b8bdf17e89c4b3f436cea243364901f1068b5fa5c117c78bf11c38faa43f5455c39a5c2fa0055cb2ce94a3413561765c658b06c42b7e9fe0627521600c3eb420a23db84fa8b4fbd083422fe08fa99bfa6dd410f79a181f7a46ba898b63b1f782fcaeeb27c85af717ffde2d6a6ca9d692c46d6786366bb02143f157c4d021854379f3dfff297eb84fe7738425f3ea90ee1261f1b92601bb9c012473537b15c62bc2167a1ff2a8a640e6061e5a4df332d400b598d89362a6b4295ac4808d1522017f1fa6ce4c6029b1a2a1e250a14c220d3573422aa414da31639c34932ea9018f57144a555f2fa96cc34bb851187eca615aa3d9f882a1c0db56f1aad3855acb9bf3ff4efc529c8e37f20d88a3da109197174b448a5491bf79ab610f8abbafe8eefbe7990b4d3040dbd7ee3a8f0e8ade7913756b28436a3ed50af449fef731c05016d515ca7a71272019f6b75ddd751bcdf728361a77b6a7b519b341776266bb89ecd0a981ffe9abcd602de5556e57af5c6a6d8da717fc61e283a5df3f24d8426026e03d77042035ac569cadbfeabb02ee154b58194bc5d424eed20c9d640fbb9e6c0dbaf5b29d2b83a14af7e278267c4ba0ca7fb63d9868420343aed84a92900b6560064330e8f71be93fac074122853ab2f2eac712fd850669ffae3900e9276fbae00aa9a789ff3cd784b2766c368584f3cc8293f57c9336c80ef508ab9cea921396ae6f3f08adad1220f37722ebe4f10d5f2d640c9efa9bca796a8d76333f3c1688dbdc1fee6838431b56528bc70a49a5b3d4807fea22fd1547f40f873790346ec0773970c397a3127ec24ece545f5466d1603077e9742451807dd806304443c1466bce590da4b7265021b4141a4cdaf5c0b7bc1c2156d7272dec2e1ca4c331b820a0e30356f63c28995acc84a037a2fd88c36c951c31e03e55295af11d75c6fa58fdc09625f5fabf6155de476e897524326a880b626e0540001ba3ac22c2c930f669ad390309b994b1fa32840cab1b12c59657a579730fd236ac53753c12040100cef114779a404f9031106403035c70492e228cebaac59e00c3b176f1cd3d168013d5500910589707e2bf0fd9fb00e6c71a31e74079f14c654804d4cc5b3d167d20a11541d3c9141df588ac19face1b4542ccdffe4a59846e2495ba5224ccaa00dd9d8aa84b5b6fda52b36348678fb8ce8e3b9caf84c6ed223dac4e0d91b17a103210d8c5e1d55046e1885ef0ac0b6467e6c545da8f012f897c90b88408b62db507442620fb015e6a8b4ec298300ac81a32b40208d3cff3abc98b213ff2a16bf7447f9d4203a5424d364fbac95b548cee5a4efdc0b8fbe1910de3b1c7b83bdedfd10a65b25f8aa4f7cbd16b0a95b057ec46dc5b8aa64ba0422ee18fa3c04c2c74962da5f879782a71331d00e346e8d11adea547ee0589d9c616cde45b749cfdbf7b2f869db7377fc2547b9fdcd6c2a3820bf3e7753d7b3326abefd7783bf2fac6695a2f28838e49f21832717eae07752cb30c63a6b6ea5769d78e91817c18ca9346f4c8214446310a668c9d50347fee1ebf39e40ad89dec9781f439fea1d4162efc467b116127de1125cf4bdbd1f1b76218c292270c5e9bb99167f87711ef869d71986e7f44f9f90f3f44a5a5ed267800a4ef9488b8f30cd5ee30f6753431c1ea8f32c9f35484290d9b33d038f1e7d8fe4d0813b24625e6f682975a7f7261701d3c5bb5f5f990171121e4f71c43fa7f66fa54362f1cbcd12134e34d1e33493a3c625c5a0e9be46a26b99e40d74d271640931c2685a4807760ec5ef6d9dfafc851e87ddfc5a249cb514babd3f376384592ffa80a3f44397dba924e7e38de5cc163b6066ca37787e29cbf51d9f825f3b36628400be266ae8e380ffc0cc39818ce7bb43f2b2f8066560efdd97a6cc42209c3f52c51f871a850e049b0c90376aa97a0ca7042f126aed0afee8bddd9ba8beeb24eb30309cdef6bbc29b2dc7fdedcc3dae0e0d971d126f78878ae2bc66ff70b391b1f499be14b88d497496ebf3974fb31ded81938ea9774a0848c8bbc4b2d086344b64c3817844f2e7cbea74cf03be6aeaca029cdd7c9ee00fb6b2642b6f78c35b2c13467d66167d4be59aead69f92d58328032b802840eaec39424e0181b3fb94b8729b187ab79ce4762ac6a0e76773859c05c82d1907cb4c64fac1ed962caf6f852529c902a2c22fd21c80c46796d5407a7ceb2aeb4df1aeae3e6856194d5f4a268d7b25aa629dacade2b1a78ccb7b6257eb1d000b9dfe6199afb9c187907bc2f12e17b4de717fe95e0fc1c0e35fc669c8d2c642f6825223aba13eb67d809558998987ed1b49f944670649b6f7de46a521c68f7a38759d5358c55fbb47b82c7964223434fd769a6c4d68b1e036c19cc31738d10c3de2308f258ea5368281b1b4058aa522d161c3bf95a982d32c9409420dac238f93729c25866fa7ceca87c586d215734d53a605ccc44b450645e04c806982ff6ad58160b51fdacfca7c34c8607e65070ad0bdf1025db061001f10a72cdf6fdd2450a90ebc566285d004034aef5efbd8e1f503e5fec68b7f4714bfd995c3c54542a153f6b9aea972661e9dbd61f84c71692d328510933ee851c3483469bb25b05c441cd92b9cf21e03184ea096ded96916e5a43ef6584d4496b734480729f3b6c7b56df69 +MD = 566b1a3b095ba6837b8a4e2012d44fc87a23a27ead87f0a9ca2945c2 + +Len = 75472 +Msg = 5d1d044e24743e2166b88f17059af213e8aebce138cd73bfcfb8e41cedfd709f2d1fa76bb8f118a2b943662711c09fa94b17caddd259bf0a61a23ccbbcfc34119e806a67f2bf3f7a4560c8d87c0a24f8c2840d7bc51aacb12243b25f1d82a4bf968a76c939a55cb1f456ddb1ae3d2908363cac4379d8e3bbf9e26f5f7a5668b3fe83f319f46c1750ad6fcc3a0f2455e28d88d0bd575b0c30cdc69a533a4127f5bfb409e08ddc175d57f1befb0886518db1b0a172c56ace1988385cc3c50b898bbf65dea46bbd05e3dc25da7dff2ac41188fc46e92ccfd17d1180dd38837c387fe8de9df0f6d788e7235349475dd95777fcb3e8aaf550be6450e6443adc5bd9d921666c4996f2497314c332e18b5bb2c6f41fae3e86b63dd62db2ba4f3872179f51467339b3d5ef8e97bcbed4ef787c065786c12c49c8f5dc902b6601ff8797db62c7dc47b5492341948815a7f3f85e3f0f3148fca4508f7d619a71d7996304943b2fccfc04168d93f36d5ee2fea2ff7a03686c370114b2c2884702596ece04d3c4c66dde0804d48c9cb4c20e773f08bf1b735564c7de07b1ed7a4210e6903f9fe5d6e7772adaa13478a468b2c89720143f992a0b5e743655797b58836a705f0086a5624fd0629b946d8778565872f083572314b42e9ee6b312916d3b603709fe8f7c05ec64626bb364a31c828f981f134b593ae89f26bfd5a106a9be32ade7a2e8a3f8d84ca3b89946427abfd5d156cc0383c52e19d36bc20f203396469aa1f37a62649bf2ed2b4ff9aaba9492e43db768e9dc0f046c8f824228344a06c6dff92b0171bbbc086cdc6723058a2e9a7bdb60d3a812c8bad61e2465d363d9f948bde4c746c214bb224876f7832811bbb941d48850bfcd85e59d9c21396826fa84468efe0c3861cff59c106c5bf6a40f9eefad51fd9e7b94670791a28de157923c9d0feceaa30a0d8fdf1cccb67c4d5dd3efd176d7383bb10264ed32f857d38918c851d9098d793a9519825dbb43756fff492a3f051473a25ebd9717a25102a7bfd13a0f907d1521b2522a6893d2850bcb039ff3b0ba8d3024197799b2574cb3dabfb4d5a8fc46898c93fc3465b1e3fadf2717dcffb3ef23fc81750251f11977109ba67279917439cbe3e00b5a69f903e2bc7c401b8603438dfc7998a6a8d1b90a6cf72f2ac407fa184bbe339a812ef07dcbb5682bbb2f5880926ba5da03dc426f3a9154e41d67941bd27ef54c81e988575baa9c58dbdd297c4b336f148ba2dae80e5b29ce25fdcf7b80089998f1949219744324ca6d747f2a30b93f7dc68c481def3df511632f73e05d4467a75a96d76a1e6847a8f95c223248e65c3d3e0056b5e51f02d45f6647f4721aa7a144571ff362014e1a07fcda3b9ca0107b7b67ca59f8e99640a20b145cc673a0ae353f315b47f6814a20be6fed32d0a15f032a6db03183fa7db384a2c361359bf4b7b6d74bd62f285dcb09a8f2145f581260af076397d676b21a3bb9cf4c4ae09e5124d76b16948b7e91464eef4a337dbc1a60601932c85107609621288e98b7d28cf1fa620f0ef2d3f9db298fda365884b7a43f7b0b42d5a50cffa1772f0968b8ee8508d9c983a4848b310177ce4e3093c1e26e30292d48b4a6dd036438843a7a0148c9774dddeabacfb09e522d654f11c084b3e1956ff35bb7980d96b0f0773d4da305e5a2020c9d4ec0c8c60062fb253af1d73655f21ec3c69888b69f37652c59fc83cad0dc52548fca467b4e2d7df7b991a2d6739c11145b443b6b0e404c6cadbc0ccfe05103081a34e11b1fae1db0c4ccdb6af6571375fe06f05e03f37628d14c689cd94b69e07868614b7ccd2278e40a4c99e70a6d0e38456d3789382a864e125fd8c3b1ca0530cc8eb56b72d6769fb3bb0c4d9d6808906a7b9da5f7afaeaa78b82ba66b6f9ecaca2f01f7857fd3802ff16b30f74a8b8fdbe23861184ec970e53d3f8b60a0d4cfc90ed725ee66b60ce6b65d99025bbebb016ab1c4834fff25c1b4b9797aa5cfc631f1ddff95d348cd41d18a8ea5e5ca9f44dbb0d621fa775373e64479a0c5b63769a1be8c620db14aa60c9b1ac82ed7c00dfcdca0d8965a81659b8692ba49b1aadbe620d43e5e180b7e2d3842537f0ca8c296de29916dcf38fe9b27ccb179eaa8ee87ace00f0ca59932fd08102f2091decd715d7a35c5ffffa6add02f6b9d86b80a4e09b7bf60827b2844b48b42598fea94550299aae7125ec59b29c4d1fdb0639701df6134a2d439cacae3bb75722e55810a7590da1b2fddc32bd992cbe18e30fd69d8e7581ac65c7f563ea9b1b295a5fa575d67aba97e05092689a1429048a7a54e9a5011107d6baeb26d5cdc63ed656906632407d8285dfd53e0fa1c530750f578cda449cb24eec1a417dcdfcb5d1a35dd2ed1d5f1556e087c87a44372f3b456ae1aece794e16d1ff5e432a3320e4ec6a56775fd3c2cbe936725a79d35335a31ba292fd3b3dc71306d7e650fe227888425b5196601d6d704dd630c14e3f0caec62a175f5703f815cd38a7d0a22d151d727c1c4fa887b41c4a6e9da8fc6518df16f2ac635122f260bf1b3837e3934302771327ea01841823c8a5e19f5247f2aa6a86e2b7be3d6e7a58d9e7e527077addccdb14f40fb5324d3516ad23046a12975d712abaf295c4c9270f6766e0fc3505e01e640c377d7aff0c2b60c2774e013c5c2c14fb92de9dd3a626174ba5e3fa215d578580fd5f6a9fda7eacfc2f6646ffd32211e8137a323062a877e1ea4142a6a1310a00d5dd79c61c6ae23e91354c587efda20ef8fb5a55c92129f822b6970c381551ea556a30f84e7a8118414d89ecac1955dec7c45eba560a7dcce3967fd89e9f0dcc00a818bced483a07b411a802e70fade5e477c7e4a5df03fea173558251188e244bf9a97a754e5d9b6e23ff61bc3b0aa2f3981e5b15195cfbe0dfd09fdc1c6361bbe15bb772e77c21e3f7285f98460c945987da844043e943262e4997bc352e22b4f1b7fa62be06699a0d9b73079b1448aac97506a3d92972f60148f06ded3ee5eb9d46c9c13c8ca104c9c13286b4c22e4bff8648ac639df9b4db57305d9f1609a466709c1aed9f86c8ce4214a21d86b3d17c76c0e65dc746072eecee27d5542c93cfdde7ec3b9f793a8d96afc65fe277cfd2df15de3235f6417e8270492a79bd2e4bd74391c10cf6fe8a275a7fd665f89b9527adf07b5a79184cb06d3e08e749d86d0525b7f8789e79368cab4b2b71b4c935d8ffc9b3b54cd00bef3b72eb3d4126a5d014db5c52be2f352f2894c9961add376b81c655c6f02d4e9771845bec319d78d07768673c04a4e89749093b63b94c0c77ea72fc1ff174975195eee564a9a1788ee3db9394d06ed34d8304fb3b0e9a3756805bf110cf4a58a62f1ef236f7d70753d0c18bedcfe187ca7d0473bc894c4abff9eddf59f81304fd93a10cf3caa2b7c7d4a69ab741a178968da44f48c7d6b8fc9db5315bea634ed069f1bffb9098fc7355e75a71e423182a3b50e86038ce0495022e818744bf78c7189d65ded83e67bedb2045be15eaf8fe1c96d9a36aa6a021cdc63a7c658c252a3610b91e0fe76c32eadde6fc556d9daa87e29d82bbd53e2b3728d69beb5dd6a238d80439a6389c57eb7ca8ad212f788833c09e7ecaee1109f4a2e07634a90fa7977fe1a249b65a968389154117a51c4f76bd67081665db568ce0e28bdff232b2e854cbe858d52987198fb7789772fb48e73581af0cc0ff89465f475d5bddd24c92134d8c5209aba2340d09842efd880cfbc578e43c73e02ad76a995b26a080ed2b27c10ed3e84360596d86245cc955142ae9b73824133fa3b6bf6315cf0ea10d1a0ed0d03ce57349f03db7a99f4ae4f70b2eb72b3213709c4aba1f1dc35cb534f524f7812b75cde7af0a08b46516ba1e02e1133e04f9057d29e727c3923f5fed4326af81fe3db5a1dc3f03b55c913701a8cd35d10b2860becac337b7ba1af3ae6a7053634391bd010e69332cd46f0e3a732fa984c34634e9b3daa95ab96402f0f19ead958a16669dcbf5119b6af48230e8a4e8e9bbc6d4765b9a073d0ecf104d6f0df8a9403024c08b8f29819ec6457d7fa96e40533ee1fd588debdf28a0ae2c395adf1ef4738a31c373d56fde48ca88bec9c45927f2cfd7012291a1958d3f05f6e1cb571565093a1a6fbfc6a81083eb1c726574b89700ac0c04c324e3e935731e4f37f221692461e6cf43168aa1f40d1f3fdc23739016d4cf80dae9824943ec260fcf60b7046e41bf1f09e00471ad674d8e92f5e78294f9c23363600f21cce9848fdc3334cb394209db7eb3941412a21deb146c92c2ed839aa8d718d90742e3d05bf8da293227fb6d810bf1c7edc61606d1fae7f3e592faaf3db0847e6e48839000afd612bdbcd640ac5c2afe733a6b9edf9108897f27d7768e7a236ddb30112a0a5bb77fe26a5b39b9c9dfc648e1fb5c60813ed1d41e929707be8635b2bc3524c5a6eecf34b2f2af35ef80bde34f4db601460b5ba8d9c47725d82d54992f6806eefbec9f19195517ad37ae23b6e4eb323e59ee85520be59d85617949031c1256d2d5515e242fcb099c2cc8b658455c67842768fd64076e7092e4fa916504dc8b1dcd8d8ada48ed0b6f4960e42be309bc5f490b12436ec7a6dadd41bc537c2f1a2c4f21a3a0073383b327f71bc6308bb73c49356294a49996c9b4bf2842d4729a8ac49e4719dd3708e422fbebabd04aceb772886ccc3b5cd6ebf5f373a7b04f62b5e853d3ac5d50119ec4ffd23124df894d8f64af5eb579ddbe2b6f1d16a22e393a04f2e7dbea17242fa8734e1ab0a26d5aea6a98c0858911bccf8283040c975483b4fbe22d1604b73327e6ddbd064bf18c0dfac7a63df319645cee43f452036b2f72cf511463a15135eddaff9c9834ac4d74a5aa5441506b515e02ee6c350ad399b8edb326556568a444b0323dd8e4f41bb8ebbf6f22297de03d50d0d00806246f11f796d75dd993fad716f4155ad57f63454d755b72d6c7ad9558a9c45d9de3fbf84d6abc0f6639c60f6fe3b790ae94d0a44b7abd95e0ef25d0aac7bda83a88ece68fad28cca3e082784b5f991ca8dad040562dea1de04ac58997b9307a54899e671eecc2281b1ebc8c09e64e518cb7eec40e0d857d5d61291adffca146847cace47b97fca4245ae0c54c062bd1a2c29889c3a7f436b0d8bd2ec410948f32c88509363d5cc3580b7bbe823dc60f83714a1c277bdadc6307ee1fe4839ed6f7f3a32fdf5b56f83ed6f9d23d0bb17db75a8fe599f79dc11c755878c1c404903c94a3d2c7606fc54113e79aecee52aeb6c4d690abb9b19725b778c3ec608a4d8901f39c9eeb2bbcf768d19302544e14fa66ca87dd10aac11734cb8bb4d7748155f21ee7b66a0f41da3c24352debf8330ab6b8459ecb0dd17973cd3acb9777ce3bbb824ebe4b8ef652047c0bc003d5ab501b4c5471174f4ac4fafa4b813ef876a2e4ca2c173e2f3d07682581593a8ac0732ad33ee4a3e38f7240df48862c6b2d13f4531a418064a862cddd206a0e7c24dc6c095f79ef6f2219dbe8bc3aee64541770b993cdd0c3aaecabef8362de2e4b04354b50916856a51432a3112ff3688e15c06a232c9dc0c71d88f904e45815a5833d059cdb8d1e8b09cbaae1d5e9ec2da789f132ee45f08f6dfb763f5edac6b6c1d9e4aea8ec3b46632d4c98bd2063d53533cb6d7377b7566679e39d42f4b60148a255009a043159a8de24b0564563f75734751d6c9199de8f6acda921246817a01cd32d2f43a5575334afd321b7611676226add2a322c6a516490dd89e8516c30afebaec948eba1eae76a4bbff4ffb52a8439274cb7c39c44edd9b4edcf0671a2d20ae0088298dbd86cc0b4718c7445ecb04c8644b113e6e26d04d9bd370bca5f39bd7b5d6f1157c41b6f97f6fc736b255d316492bc71ccb278ae9688ceb5c8ce3d8fdb488d09c81699a350a0b381777ce1745cc71881d02d874375c0d4a90f8863de8a5a6ad68f485e28892f40030d4bc371d94273b873cc2f401206076a01162335f2e366fc2fe1ef5babc3309c9f2a99d664a54c8a3a06b730d5b8d56d4fe01232cfa4200f2c7bb3b9332cf392af91cb0e8950116b9575d5a24b69ad173e8eb7315afd1474076e41cdb9cd07a9a109ed86b1e350f1188200f0ed991d1c7f6a68de3f6ec2cf433220059a13fb3635fb67db68cf89af25c3afc936b793d1651bcd75e769a975528fb4fd6ea23cccb0fec079288529fa6fb35877b155bfca920b5bb4dd8e370ac7af9711a1f84ac1b48c8dfc7ba4c07738c991a8d7e3ef8c88c179f79c3cf9f4154a4cfede76a3d9a31d36b1dc9edb8a237ec1c924e2a18bbbd6cedabe0670d5cdc83cf17eade6692f394145c5e3e9b7a26b8f5532f2844c9da3b0ca9d7b2a0453a1eda5fd1e70f49b593424b204598457e840c95c73e643b0b0d643b4fb8414397fd598e448e2008a0595eb3b80c98496ad9cb23be7761597a695d2bf082d9a01ba9b26ceada8217dc6dce5ccd9b81d0103e99c4bdd8216b4cd75f4063174ea2eda94fc16cd31bbe9057fc0e08f83d20983bde3f6c6b8db9acdfd24150808a92368596557181d445e5a04e91112db2812b58035d72378d8bc00a1ef75ec373b81dc6f1f0a2ed96f302cf2eac8f42ca3df11e6ee678440a28b0dfab2a36eaf35bcbf3c759a71e47120f6c03292a3d6b9b111488a2259bead9a5e7e2a180fcf1c467947f59271cd0e8360035ce8b287fe2b3c3b958224317e6c7a82926e302543c1a3183b8cbf01abe9d122c645a0aed5b01b16ad2164477973dace97f070306090c533a3e3aa10cdb6c2a4fb23eec9d4e206801d6aaa7f433307b8b759507ee7364810cb21c378d89ccd00882e0d577023b70e82d86737504c79b75d03517f4c44b4461de1bbb870ee58dbf9ae8cd63c1784f859f51b0e1502b9611588e390042e823a188dd34e1b3dee8dac3fddd49d1ff8f42f3b366226083f4c6d54977fa3764a634790aaa83c0df6ac2c5c70b117bf9b786f3569e1f7cf83bfb0e0dd9cae9e65583794b25557d1299df68f061a3078e50b865df60c0ecb2f51acc836659a197b9f45048ae3e319d0099741de7e7bde5e14212f9b2edf7d8a98ad753268da69e59f0c5a84c2926a82459b0f8a4c6e527f28bc24a9e8ee692e0b3f724214f4224bde0a11308fba25c8f85e529a026c67b0cfb3c7a2b8b010a21fdf49e6088bb516e2aac33e99deee0c887db58e3f1a90ab6fa4a3261cc9065f4d0956aea1e5a4cf338aeadf7f7525d57c55a2c760dd6fc78f0b21a493adbcee194a330c7fb673ed4706f2c3af115fbc5a92a4d60649578da453dd9eabb2a6b71b1e79700052a4e9a3cb656bb7481e198991264a9dc2ea66561b3184d38c4642b8f26489c26eaa5cc034dd38166dc385bffdc195a5fe8afa0addc7e789af2e298962beba345f16af22cfa4c94b16f2793424e1379d40dbb138f80b475c7fc0d3e2fbd271e4985c695218669fd3b82d7caca31fb1122e3f1477066614ca92a0ca7c0a3a4141cefe13c49b9d1c3ee5d7087ff4c782733b37ac3b9572e0327c3085bb3a60b8da577e26f0c5a2deeb0471953496933c5eec47e0fd01bc2a4281128e06e8e0491cc64f2b6d23324876b8afab5104ed3f23b6024b41f7ac736965a95c05b2336297900389a030a5f94066c3c35bcc401b702cd94390c3ce2c258e77683e02c4a5c9491dda207a885206936075bb593651b2b54f7260128bd4f5600f4af6773e7330560085747d53f307c2f82b06383a6269f3d7504650700e578ed37ce57beb6b4b4b5e23f295835ce27a1d6bb2f5c6de044d0355aa0a1538ca6f5666718d65fe98ad893e416fb0e0152d22a047fe56152035560b01abe5c4dc861a903128389da6d1042ce778473d2e50ba714bce72b83c5131d8f3a26c62fc6792a29ad8cdc8e46a61783b2bc0b47c89475724f2b727b7053957d6aa0373b88850e6151bb020dfee23b8d316b7f6be3b5bba69e76df43ed5def0412f65778f6cd803466d6a05f7b0cd6745a5976431eb6a23913931ae2257954ac98eed0eef999a62854a6618da76c0fbe974d99d962de51b21548ca60ffefecfc655147a57730a8c783f3ea9d694a0ff54f1190349577f0990b5f97c66206de7ce1e667a659dbaf995b85e69aa8edfea0e96b025ca1c7a9775f9e2b1b380753b47477d5f888e2e3254523fb894e9e0348cf24975a6c17a2d378ce2b67683a722d87ca3ca3eb8d6bf3a797d17442a546746804f835e0ae0335beb742b2dae7646e80a942b069236f8beaa711626c4af0ac1cd2cdf5e4d6f52599201605765650ffc9da8f26ecee1976771c635cb4d529795358bda35fd5a02c71d24f6724cf5f69c825cc0d5b348f3bb5bd6e69028d1861755c71453bf42bd1ae9696e1cc99b933e754a16d9d3ef9620b54db913ebbe6eeeaa791e65f7bbe9db832937a56fd85e58d2db54f9c548073e3a751dc50a7baa81b01c48bb3b28317f86eed3aaa43ec08217ab1ba3fbe4cf7a48079532099bd166e31b23e1fe09fc7d4144c29b0b315230d013cb76ec38476b5a5fbfd97d917c04c0104068b4f3d35b5ea5a50519428beb88bff4d11ac507680de7ee39baeef2e1e3762ecdf4583ea04babcb673304f618adfa28411c1d9816cf5aa0b15626de94a9c73f6030b996d274a1d63ffcdb095ebc7cc64544a471ee1b0297fee3bbb783af8e02edfe9a84688622360deb473e1430925f6c38fc2d647d9a0470c82fe635413509c5c26d8fe8dcc76b4f62dc1cefa6e564146d8712f0736ba69597e613302b46c47600c501ca04fbf67317fc2e378be074dc66c7cb387901defbc79096faba5dc37d4e1392828b2a68276f49da826c1df2329940cea30ae71e01cb9219fb6ac4774a1eebaaa8dbed20cacd27ba56a3e87ca5998495b6a5a5f456387cf4b8d925607ad7bfc2b363bec0dbd628363adffa74a3cc05a8e9e5a8e25782b3bfc971eb0f7e2d027338df19b8e90ecde6958cae6acbc53670b3277a88843ed8f393c1afd4c27346248f9a788950db8b33fd168ecf7c09b9a5b90795277ac15f08be44ce70e63f1d5f4e2275b2d1c0d2b6e82a162332fde19051e2836f89bea8879f77e1446804da9beb037bb5ba5356e7dd13cf069f3650c91464cfc16f8b57f8bdd762cfc6591062ecca050299076a3f428033da0f3789c876fac4cd6abbefd49fffdd836fa0413cd9c29c39ec519f25ceebcf2e0175ff0700011cc429c4d293cc3dac0fe27f0f922899cbcc22d65843b8b30b631476132d463432761b4aa2beb92d78b5bd49bdfb6fcc0e29eaea4811c6727329c6bc78739ff0a033bd91d2cded5bae156e94eee0f5b5cde39311c1184ea690e286bda19293c2e09d9f4ed549ef24c6cf54e514eb70f39579c9f175afd7cbdf1de2fdf102b8276e042ee63cab25355d142ecec2636811ff6cddedb870e85ec83c4a02194c839ab307eadc7b7a25e9dbb45a9679e1218d563d6d8b0be406dbf6de5a4e7cb86c995a3961b6142f77debd0056e09e0d53b2545be73e027199cfb57462478e0f09bfcdf911f7894381708b88a241c110654d5458e99b2ec237a6be8f1091df98b15a88c77a055d4ed93bd1cdcb1e65c2ecaae0a4d316d32e670d6c9ed391e3fe1a061535188412b9f5bd0a404ffb0e7d405783d03235a24e9e403a2429ec3d979a5eedc26be82c1d5d609f709f4c1da806dfb85b957c1e7b43fbb1af91f54efdb8a18cefe2a60bd176c32bef37a635ebb6afe8b76b4eaa6cfeac6d918a318ab90b9a7d1e1b42547ed8511a0ca78dc9b0b644bf642241c87c34bec88aa1458331f98638fd8441789e089704697d575b8fbc3a86f258fa0b216ccf5cfb4595caf109113adeac280a877e01557627b76dd10efde9e28dbbf5053d4a855405a6c48ec0a81d62016a6cf3bf3c87c31512734d450b52a52f1be89ffcacec355ffd025396d73b08028d224b228535d0e3fcfe2ce4ef4bcacb9e884a4182fc0fc30cf708221b2e315e04bcf66e87da1002db812865265fb3c1b846ac92593f53cd5b24e4c8e0618e4275bf9df9c0df1100328ea85c2ce900c00d962f759c2091dd6c2e9211c36f7f7e348caa3aaccf444a968925208f822244e3095b51c83a5a71b446988330c2755fe5b693c7c8253a608c033758aab5a8aefd12b8bd6a071e38c83f60a3b4e51065edcff3278f6b53e0677f577b2aee048c9044b01efdf14d812c6b62e9cc51c13ed13b30b08f2c3128cd7ffdfe7cb5b66c6111da0cf09378e9354d47cbe3931839147ae51933c252d83267a3590c873eacd3fcaefdfe6810ef876767c0a72375e34c2178b819d8294d1ad8d02176ed1dec5d87a77853d9b5f2a74c5b7e637d7acbdca174239dd825160b461cce3851d49982254be2ad72c891096e8b4bb51b97614a8d6fd25c4ce6a16831d1e5cd5fe342d66814e377ddd95912407fbf28984c421a47b44ac1a0eeadd61ea7dea251da66ceb29af12f5568a97654c15f1a5e09ccc052f9f36a6e9d69c98f073f53f22a73dfb726725073e7009a2dd89226d7708fd1519972b3108383b6e5687e5e9b43f88dc8700d77d3e50ce23e2dfecabee0f9c1a62b3f4831317a12c454222ec7b7735d78e028f1efd31d03084a0b625f0b9915d317cf764b17cb819e42a141021562c34b0f3b7b1241bf611ea53eaa4230fc426af799d9c8a6e677f5cc9241c4be5563b145db6ff5a16280d3e80eff02f181dbd03324ef247f596a4d4a7b8daa32b9934e3c7f4d0482b4e6da5af2dd1bddd8569572f733090192dd1754a3a10d130de6644bad9eb9561517a49690c0f7564e273d0f9721c0ce3154e673c10877dfc0e1a60bdcd1aeac117795235f471feb71e239817b57f645a3463d105a4074e980f985e583823ef5189b5e89c4dc101de1fc1d711a22040877358db2b5c58ec0bcb28671382cf4b1b8f7531257fc525dfcf95b470a3c94670ba74af38a241005d2812a37713e6a72712005858f24613c414e758ba1f40211ff20172b4dd8b3296109d390b5330aa7bf89f83bd0e0b7295d8feeb7a7e4e779c01454f2574fe29bf6a125257ab75fd212b9adbdd3cdeeb580223943527bbf1edd1896c15d1628ee01eb915e4817c47219139873fe28526177a9e7b75844f361c4914f10b5b7f08ff13daab393e0e318114c4af6b6ac9cad928b7c9c1fcd2ef31503007907a1d402633bd3bdf4bf3634b9b827dea3a727fa7f4b6a6a2f70bc332d023d62b9603dd5c65aaee5c0ef384870dbc1743bc48ef88c6e2399fddc35b29b036856417fa88aa91e8ec3af1d53c3b54baa5fe5613c0848684ab4017c25e1dd8b13cc366cae9169fc05c005b63357157c450a4729a9aa31ce4230d0bd075172fdc25d1e93ba7ab787a6637b4631430fe223fbc77a626ee704aca8f22b5481e9ffe651509146b6e025e3466639e8481311b9ccecdff0b6c6afec84dc4387e3a106127172e1fdc6926b3eb15d2dc2b6ad8f88c62dc6df225f34744cf5a23bf73684b9160c122a3a3cdc3b6cd68e5b1f6db0239010bb88322f16f669e4a3cb5d29005cb7728e66724ddd4bb148d80bf2a227ecb32c4a7656a4ebc5841fe4c065e70d7fee4cd33d1f5402f2275a977fd1096b76a7e6f034105f0773f40dc1a5a20f008523016d1891ddc1c1475249012af1df43c6c7294befcc1e746244e705a1ef9e2eee26d8736a49be2b99e6794a70fa07c6c8436228556a7569274bb14ad6271abfb82391e809363cb3877d84a63390898204e23753d1b8c0a4eb88bcffcf442aca099e25f11f11e1db988e07cef343b908153a2548f54574ca0792569efda522d06aed00f8ec6b321665ae8f0f20823acb61a19892308f064b03df3aa2d1e8b7654496af9a21a0a1f6574566f15bea734e72bf1daa03f3f9aa78f5c5a5fc8d3ceb3f21ae4f3f60b5fde5e93c1005dae6f3e0f9310af012b36adf4c8402cde147f4b32489729619e28faa108ae5aed22a6e04d65f3f7579e7fe9f69f253d6a35cf43905adbed64abc4e0c41cfecb77ea21f86dd14a214880be841c4ad139731e07c495b978e7061a79ba4f3678fd01ee28acf83edfd4ddb73ca6ee2f0cc902b76ef5c7cd36be4fd390adcbc0e69596160324751478b91d2c3e75f5b79e951ee84effb1fedd1a47be50e3bf210e3e3b4af9896cbade7710c70f1cb84a4e44cf99ed09d8b534a5f7c40384b3c1b89efa725303659ad9b7be71f6c1c051e57f1db2953cc658040466cbefb72f08ae5dda765ab9e91b302130103a8d93322ced111b8cc0025115e29cbc5ea5bc5eb724e43e53d47fa5ad5c6d8d24a7bb57e837b2bc1abc14062fe5a2809676e12b9a9b1eb2897bb0a016117dd1fc37c026e404097d895885e11ab57ffde05127d7206992bb43d7037434e769c30a672809e7fd1c471fbedb489dfb3b1d835e15ca1136483fc810008acf87384a955d7d67b8caf5002613a1a5825fdfc7c9c7336c35ac4627614d2f48af98f250e74146a820129c92e4825c5f8f8872e3f8b109265371965c56b619179bc3a0bc463c0c33e77d17e3a23096de8d1ffc585946205e352d40c5ef7545605cb04876fb765672d5b570dda748d68a43cb861034aeff7da1894a4974af3b89ba06f5654d16acccb15faf673df0a5cb7b3516f2d1112eec602cbed22c8f84fc7d6eac73864496a94526da68aa508a09fb05b7e6779636123ac0a347603aa71f6d8f7787ed2a9d7157affbca37920dac8ce26ed46f659e56f6ea028f58db2c5c52125d89c9ed488db0a519742cdbb61cf67445a402a7ee225e54e2945c989c1af39e676263b8206318ae3d4ed1560ec10164433e7584afdd38a64b3db4997ec019dc9bf803b1ac5c57726e406d289c04755a708b132368ee4d874672a7075ab88c730334f00074e0349bb4324a7ce84b19fdd57123ada1bf65a0d91b7e0ab969140ca7fe74ce005878ce170cae787bffb6f679d9ec49e2b748990f2182c9213b794f8d3fd543d92aebb5a0b6e244dc8914ec65acb720b43ebd19ed6af86d1d9682e3bfdd5c8686c055f856182e09934ffb889fd0cc5a9ebc8dc87ddf2b1d32e2f97145c251c08f817e3f421bd9ef29bb3372312f731e29998050c6686202ea87a4a025d4fc187dd42e316aa52d1d2534835122b0f494db3e5e56d0eee444cced4b1969fda4b7d6232c76d89f70bc0f21b5ce7b3a96e53f11ef85a457fa0a607db884192493c425d541b794f2ebf370ec8f9043b7a339da7bfb82498dec7c2f9db2883b310f68ef52359ca484e6ebcffcda40820e61b736e549f8c77602c4c0b600cdd90b61 +MD = 44958417a4d9206a96fbe3af28560a9e650248e7ffdbbedfabfd88ed + +Len = 76264 +Msg = c3c73d8810ecef563becad1d27ad1b012fad0c986b39eab52fe1597ed52817c5bd80269591752e0ace281d6680ff10624d9b76c2b40a722c973e823af7be5fce009c24a645a7b1304ce1529f4d349c3e37609804f4382469ee0e9579d26ca12794057de3b3ea426fbe0195ee17b4873ef7e6ba87b22bc6143c38da62ec98a77781a1797563a7a76f2b6f2e7b64e6990993132473764b20d58aa4991ecfac3767cf5a6284dd44a9d99b13656fbf34994816d11defc900fc52df3a1ad4030e1a9f87167e37aa2b105516d581f2ad0551a28507ee2331b2203643e2a4ad0e2818c6b1bf17b751c2a48aa59dcc2bb8c287c0ea9de03838c95527be8481d17a60f884533c732c5a732d214f538c4367d104494c7a395666ad63cd5908f767cf2084837775dabd4ea572c11ddf0a62429b90e6b48841a442c612d21b564f9893cf826824529692b3bf3c1315298eaed288f23f29ae424b547d2adb0d56d18b50d4bbde63bbeed4142b53bf421a60529e01f4fbb3d482732438729335f1c4698d99f78b3b9829abf6507f6ca998c7742f6c5cc25ae24a423b60b39f9d0d7259d385fd17b4d1903ee39688c2548c0d3d0b32f33e27c1e2e3205eb5aa4d932184a900972bd64e6bb66265356b4adf78d4bcbc81152157927c5b98405a4b6c1a1197728b6faaf8023afc254f0c93775161ca71ceef518da23675781c57a17ea5292543a28a37b59cf3373e9e50383edf0ebbb8a175bd4c5938f565104a57b309f4dcdca425856e82099e19eadc401b6c0119fbc44e6f7a01ab63c7e6db73f2909943a359e79d0cfda3b61cfb5bb3f53e626ba1fd236f00e0b6480564b1ff228041e3018979867553e909b0997399b69e5a3a12159cc3c73e822a895375022d2213425ffb824893cc041e3e8bccfb45d4110db5d46075b6653694ba7ace85fabe38ea2378abec4cb21c7d2c9a0fe08a28ae6cf401188db49cfb0b00a3658f719cd763b7c89c798a4b58afe38ee4516de259df36666b11ab2af919c394e1287a03193381b3fcf734e1e13bcc2ff255d6493cefe4c9020b825857456b16ec58fd3d26e4eb01736f32badfa94e44e2f4ada67c2364f38482216e3e1760f12b28e29025fe5b79abe86c1e7982d0975b36da4144041fac9a7f70b4d5180bed489f11453e073be4496ac957d74cbcee06244562ba197dbbec09567145cfd2d2ebc673a39b89f20af8fd34ac229279128bc5d75106eae7ea2128beefb5c51e67bba3eef4610be8b35eaa926482d96fcb9122765551ffc3ffe2e48d744e80587561416b7ebb1685a72378ccc81eab06e0c0410bb8c3e17ac3d646ac49378ae6c484a5d38bcf3131adf070ca201f8fa61bc22c7fc0831775fea65503b6996b321ccdd90c61c5e4548f6d9874b4ac0eb7423cebb8b6ba291b78f91a7a029ca9a245e4e40048c6b7561341fab2cbeeafa11ed984a0e28fa0d3f8789bfa7767cea00670ce958afa339f02149e6dae0dfacc773e011e8b2b020748cbe2695b236293291a9fb56e88df9723908a8ba63077a115166919fab5da1e2e99f7b1f7f7ebe3748960473b9843a7405bc8f6f97faf86bf07c57b7856ad80738ae0b8930cf3f7b06519333a54e8351f1d6094ef2329e43fb91c2b4b360594df47a768778a0139a558d061b3e255ab897f584fd2446d245bd67611bb7c69c4397854a7ea989e101a088fb9ed6a126f4628ba0ee80904acdc03dc15125162784bc5ed5f355e50e4d81d5d223215a8eb1ec28eb97b9b75e689ea541f96dc7716dbd47c77a105a21ea8404387c80a9e85d9f2da37d12248382c33e91791463007b25008d774b51924501947cdf8727ca73e62a87232c5060c8b86a0e549b615b398df9a67f6953f5f984f74dd0a75cbb817baff51e8ac36c9708983710755af825429390f71ce9b374a8bcf9f463a12202aa1e8bc3a0060d7a1e799a3124a85ddb0d7edb72b87b5152c7462fbf4ead94640c0699b6fe90c9ee646ea64b4be1f2a7291be476de9165f08b334da5baca99420bf8dd6d08ec386094f7f9a33d906d263feb5a77f1c457fa4ef4d22c4a9087194455956a5180cf7d0a95f2fd8c2c13e4bc7d9bfa947cadbc8d1b6bd7709814562fad70136ae705905fc9209eba2d8d5f294337733932edd3e007691bcf3997953880ec0ca7976146ef22112b4a0d4fe1f0cc9b86427f8ebcd259588db8fda732f94067caaa1a690d43113307ae53c239cd7a568862cb06f3ce81c891b06cb9cbec9c81b1f4d8835fe61704d879998ab2f9ecf71dfc9dfd054f0127bc680f45cc7cc5b876fa5a56cb62b415021e271fea1094db9b8270c76dde67f482224de1c1448c7a6e2d2849bc2378d2191eb4d84b9bf292a586dbfc99f716bd7781b10426be31562c2fcad2ceb2c5ca81fdab7a541696bab09c48031613adf100f8d123895454ca1554aa985f9b2b6cd12d834c9ffae19231154d816ede9e2db31a16d645a17744de5e5ff10b473a478b40c4e58bd373d7cb9444ee009257d20247fa8308101964db8f53733e4142d914b9f8cba41abde9d49bd6bf77e96b7c731504b03d4aab88916a1da5850405a0020b8765753b3056e09e6b5c313e598b8a03cdf4419bbe5e949116fe6c19d32ad7b809597bdf7b9d740e8b6ad92ba28dcb96aeb5d19db2255986e7e45ffd3bd80a31f70e3461e02c038eaf61bc1bc7019c403f7b59cb379b54ae08fdcd28b0362e2bc90a1b5d1e8113715fc766a947758082e8bb46aebf1f1a88e2b15026d0d397e7f7b3bd3b774b28690502753ea4582ce1430c24a2a92f1faa1d9575620e2efc091bb176879ad8b6d847a944565e37d5edc6d470518659e8840220b974d8a6af01ad89f3cbe9c853319022707ad583300afcbab635e71de99948d978d9b0e9456415839162f478622767147636bac8afcb5d1562ca4bf9a76c5a26400b375533a2fc54fbf73b87780c44f5b1f47e86c991507b1289155bb68fae9dab83cc791e30ca6480033f741962a22cd04e813c020f8f5221fce3d27b55beb617cdf0c359aff848c9f170acaacd17404daf7356ed9852412d8037fc8a5112f6216444d27a730e68364c6fbfc0ae1cc68691b575d0ce51bea1cd7218482443d434c12924f52c8549519e9d2bef781b36178fd7f77013f6210b3f22d45921b9e6ee7f1e195e3ef562a842795f7bdd9b057d144b8a300bc82ee65fdaaf21fbfd949af8b44e1a1cc75aa6f294e91a2124bb23a9907c9508402eafaa0a1736f58763e6b85c21bd588387da0970473ef540cda7ca476d23abe6a6e398219b0ca0dfeb4e58a632bc74a280bdf18c085ebc67c385f0c0ca4069343e1eb4c1a907a06f813e34030f9bf3bcbbcf65489afe0912232aa7ad128fc2a13abd8a5adfec66cecc22e4f306d0583acf9abf467d914dc86312795ce4663ac6534c836d8dff567622b8e606c70e0495028c8a062ebd0d0319e9c060ae78540bee383a7a51c501ee3b5ca1beae89ab541b313ff83cd5c95aadfd2748df1a80fa822d09f1c9d1fbaf6c8ac27b4bf79f1060055bad1680052795e9188604e1540aa5979c6444aaa6224ccfa2dd2dbc6222779557854a204302781a0ea8ae414fc4dee44c5250b383ff4297dd44a26c8732c84dde21564af563bb2c941139dec6b174afa44c7c91279ee48fdc52686c90a9e8bb3a01b974bec3d58d235045fe7b492d563ea336a81379a8f42a76ee50f0f05f5a0596f211e1cb6da847064144b0046f7466070d8cba181671323282ae3abe72a6cb517ec710c2da2a7973ba36176ba196c4e86f938e02a3939e15e3d8d05ce92df5e1dde8be42a17035592f4713f76a19e5a7eb7121c1d6b7d88170655474195c1f988e1b6cd35a15f4f70efc38202f9a22f5ff99f7ce367a5c05c6c8396c99bd93161dc38efd7a88530dd7c9e68e787407331a6292903937933345a5e1ded0cf0abafb65a7197943b9ee1834c19acb542cffca8f64b0559c387a7b52f013550ce127a59647bfece4a4185ec13bcd9ea6eeac9e64e0972204964bd663e6d29cf3b0ccbac9e3793bc7ac3d09f3c79f68d8e6d9f487b8bd14fd4737f55d38752f1ff41a9974fcbdec792c9cb840e798c0868ff87b6c4faaa502c5bf46a3677371fe15b1c02c15f67575cfe7c84d3e422c2c5498818707e868a19c5248eae6660bfabff2cd53a1cb7d59e07ed85d1e241236cf2aa56c83eeb65635918a7857c563b23d7e2f8032955a7218f26705299709327a3f55914636449d1bed79e01e0a0f9128b455464afc937ad3c2d2e9c34377abc0472079c14769e2d9d695c6bbbc6633fc35dcfa4d69cec0ab60ca6f7d91e40f4bc2849a77aabcc3d9dd7c80b3451df742633520dc5552dffa6cbbfadb1ae4d977420087ebc8a3bca6728c92874c8d7775ccec6e5a57c6455b4706305e36e0a6dd3602a6a049b549ba264490ba2b3b2110e3711759d99f8d48705794697e7dd3d82f298b177677d7af7942ffde79bd80ae4741d05d6355144c891e8b9f79f2fd128dd3b9b3f751f2d0ebf63446b06b12a858fd0dd78d7d76d1e1d9aa6282069ef6e2afa72844da37d8eedcc28557fa5399a8f1444aa08f21732b0765555f2f160fce0bc7c6d786f32202654f3cd8b1cfeca7dd084944f0a09ac52640da49b31ec79076b03237ded146b73e2ebfdb47e42be60ece35f34870c330b4c173da58f5a8ea8ee4dcee484ea18db5f5a0b8133cd1d404faa333fd1e86fe416bb49987574e2ca2da294369b7ece67b1861f7aa3679026e32037f9506509e4ab41f0fa4a001e75104ca0fa9c96361ec1b8622836d8bf188f8f94e96c4aa914f1f1595576c7e9b17f9218b8eefbf7087737fb1255e751213b3d71988e61f67ad113ad306191ec8762bb25f9f975ba2dbb4d13c1665eef46cf73f78c1c70992033ee13147326cefea110ee4325cc27967640d2bbd303409134794e4f8040390e00cbb488144d381f24d99c21dac7e54a8e595f8a029fed0950979d6920997f4b1ef2b814acd0d2f1d35e5618802f9d51ede0e3b55df99db60c150c60664313df77ab4640a375437c97e645b27fccf6b4791d85c54adbf9a1513ac5beb9059cd2f23e8695610534c856ba90763f66997a1c576e41330ba8d10550ed0a80a8c32c76f2a19a4e474cdefa2361ec29c52dabbdd8c5b17f52534e119dafcd25f52ff6ed11bfd8d20534c56967dd9da3b05b5044e6b39e9678a2215e6a318e0fb188383ee107d5560593858dce2e1016f1cb6f98ca608fe0453c51d3fe9bd5a6a778f851aba21b401012274ca27ccdeb4e2413a3ccf30cc581cae657a3162b529ea5400eb6b832faee59b19029ee5d88900f414c33959dadf3f3e9d49fca167b5db7175d4c70a0ea670f2e40adad47577f33037b496dcb00646061313bde2089ad578626b3f2ef7a43dca34474e013bee239601854a41d269cb95656bf7ad1e4562d93513467a611496a1a84c6b04a2782c8610c9d611c8763a5d12b73c8b0f420e049c617f74e16425e9ae7ed4573f928890c3d6ccd4e8b81ccd8979eed4522d319ad6da4c96ef3f7632c5730c6169c9a236b9409103d9bbdd776858a1418d4367fc92e23068e0f2d1fd7bcd65cbc78a13f86f9bb51711de06eb0da7d63b27312bba4f2dbd537d2af3aa3fc282eecf504856355cbb8717bb238907fc0029a682f74469f155fefa4445d98006e652e7b8d9c0c8e816ec51bfbde1d5c9b1a581a5553b81f19cb41edb330bfb0f0280a72022d898e259bf56783075f5955d375f04cff01582f42b215c55a1ff4f5a009422cdfe03bff6689c5125c5f5f38547854db2129349feccc844284c0b5c7f4b253d35b1b7f57f80a9f6f8524548ac6e9adcc61399ab0f016a3f255abd9ac4d8d0dbf4942417479005c6329b62294505162e5663871ab7718d89c76e74aedd323d9b74f5b699f10f164b6f01eaf9e1b36ddefd92ea3d8a85b8c0a8e7ceed1adfb1d841870de20e5671f308463e5f04f2385b16123177fac6628024673afa2049e42ee4a888a3f21e9f5988a8daad1139dc2f5a720b5e8aac1124d46d374a6ff92b1bd8eac5444ec004eb8ada5e88b8f2efc81532c655bcbf5b4b335a42427c761d1b98be324766d32925693b28664ec5d9b1e0c500f1f378975fbbbefa96b839209aaea35e21ecd0a293be4bc6ca552b207947a939b7d1505bcef81bbeabb5caec35752aa7684330d7b2f49cc8295e8b6a9ab46fdf1bd8df2f3552f10cf5e7a3c66896c4bc9f0c8c5f0fa69e8b07ed7f0e72b1896fa27c9d781f66df6409e04c45a08e01fc1aab4b9f163ee1bdea646e92adb97679c02ee3cce9ae17625c123cf069c552e47f91e71e4337d6af4565e27db846c77c09827a9420836976610fee4d40d738144272e763332c1dfdad6473460ee3fce4f2f9aa7450a1262ecd3be8b2b22e31f9e7a0e4f44285f81786e289823e1b7752f106fbd3f661edd9d528a4c73a44d103f3be38481dd0258b66629d98a257c734a83cf7498e5011262d48bb0155c585d0db1d89e5119506d7d057481ff8137d086cfe253b84f630924a3e83e770fad0df22612241ba3f1c7b3952e18e9bf9095cd3ecfe2076ceec9c905ca7f0288f428d5e0bc9e49448e6e425c8224b0a52ec90616bfa9ee04485a3a4359f91e8ed4b79d28fc9442c4cf6b10a3962fbbfcba7419a0d931d3de19c460a4bc3634e8f5c13446fa8f6eeb5bc507b192c0748bdb9eed2446011fc30a0f22721cbeaa5f004e8182e0173580db840ed09f60421c3a506cea2da13b7bc24467f3a017eabb9d676c24d3b2ff4df6b10c46e5958d757e927d39b79a8dceea6b197171cb5ac47312dd73fdea34185553eb5c8beabe5f506a085b0b737f842a8a1f32b66264412b59bcb886463caa9f72925ab9e43ba258e2f69653b4786429ab617f98626ffc6c44f13c964e7fcb7d16e988990d6d063d012d33b4e6e03790d5c79f3f55e2bbdfda6544538b66429748d82d50ecbc53a8cf967958901ec5061139dcd2c227472c23fe1be88457d9940f479309099150405519b2673a9cd634669f7c7a32a568fa27a5087bc1bb561d741e00eaed52c6ae9a9f24086cc132c2dce1c85e2cc4e5f1ef435235cbfb82d97e45bd1b1f697e99a60e1964aff5a0577be708a738ec88ba82be423d297d257135a412c5273c3daa8250d7a38aa0ea9b4c99847cde8517fde80020bc63ab078ca12446108e35ce89354ba6ec862ad63856e08306a7f75b612aef34d902ecefd3cbaba323dbbaf8ddc7e9d06729fc2dd3a1a24f6c1aab1c8f4f75c5bd8da7a7edba226f279635824e41109c3efe7cb61736c92ed7c007222f5f791c8f8c46f5847672f343480d3586aaaa51968a133ba91c3b696f1f7434e863e282788830a23d088177a078aad92a0a9e389a572982345be2475bc15b1c62619a3da008cd76c277394365ae7436e56ad4996fec27555efca412c42e22a0466488952e948538bbcb819ebb72d3135cd134bc40d1737acf066b10d1ec33893c7194d44ab4c0b2cf0d40d2ca4d2f393a47a6e8338f77b930811e8bab85f49eeb92a6401ef1e6aaa7446025b9c6f07125d4126670ad9adc2976a5c97981cfa9fccea623cfd25fe9eb78c8e0b1667e81c581607f20b343a961ece81364662b70162e7cc388e0933742b1604ad9b34131c45578786b29dcea81ebceb094be6fbde2b811696fa1eb5b54f810ad5a37a24bc759429c7898cc65307b41ea3010055608764b5cac9fcd1fca54c04f5b7a07957993a73270887be317a5290761e554032f7013e66862a2494cce587a0503d9d97f0d8d817a7f512bde706c504ec4c48effad524dcb70d3a2816dc074805a81dd84cfded2bf07b6072ce5f30d2035bdbd2235eedafc53c6f21239e185f307656a2edf806d67a7123da90aa686fec0a75a3d10d1d52493e501a63aa1f78692ef4725475d9a99e8cd96fee96d0211eeea2bfb47e1866ab69796e679e9106384863e120f5ba17d504fdad38a31cb8046eef901e00834f746437b7afda21aaf6591159d3d64c93c6900d1cff3d82774511c8bfae62c29f2cb537609ceb25b95bb7a956ddb5f5cfebb49429b2e4c5f1595daab8c5e37ab84cb2e503bf5031c3b10a8862bf033a0eacc90f7df4373ba8a9c911f5f521003d5d03cd1ba797ba4c9eb83b07e85cade29273eb642383782fceeaab01cc99f790c61e5c02b62043d68d573da0fa10b5de251bc486c177ffd92118b266bcccc54520791e639b9852d4055e0ce864cde673ed3717506e83275758f9e49f3627fdece48a80c8a85e5bd78f332528a8e2b426536c404b8b13a30ccf04ae15d93a05da9af92f8c6ce0e353837d12fc370da377e021fbf297c7e77c0baf6b55067171a0ac1b773969ce7ddaaaa262ddaf9d48eb2bde96c0250e69179770c8e75e7cc5d1a088044a2f858fcf3d397137732ff8f28f189d4ea365ac81eaef334741aa86e000b533591e949dc3e3a8dab41214482092569bf8a34c262d8e8136ff4099194e552990c0b78a2c3b16871bbe1d08cae7ce2f0f58a5506a8ceacd4079dba7018f166bb92baac4bfa74e4a90cfe47bd5caaaf863d919e0fe229829ec319372e424bce1f8f438d2dc9b0369f66418dc0d4ba1493604719c35810f2d96c0d88b15a1c122fcb51232e778de7b99052a97e5ed5997f2755cd0b51ac85edca24b3e3a88bbb520d8a77374e327e6154d8a6de4223c7b35763c2d01724c242a504c2ab74c150ef1e96903194c883fe787c89c7c7cb2595bb1801f8f0a13240c555bcf005e65970c71e760292767ff7c5e55c2336f63c8e1a1d916c254b5b50f2c0aa9ca4215e3cceca32949065f9b603bb27d9d7cb92073b197a15fd49c7d8f3ec9396999ae8bbfb41cbcdd6bc79a2faa8f0d1f273b166e7b5c5dac2c4fe4291837fc62c7a7e55182c4997aba487237152c1f3cf152114e69979a2bae386f4942a7714a5e9a972eb32b5d95945aca13261a127b6da687a006c9e572fcfe958c48b81684b0ef07a3efc167b26c66f84037e9955eeea10fffdd73de067afafd4e84ea8aa6712dbd5d73174645b505935ad51af65c06ca10aa4815c25abac5ed2ca1bf1c2411cf2eb7e7ad77e3f0af11af881ed3f7488a105be13060e42ee80b9309866982155be25fd7f48b01c1dbf9cabb75bcb52689a5713344083769c9cf1e3700e154fe5c6e91be7cee238b04b23909a00f2a13113686b8d146c8ddf3be2ab49f11f12f392a09f5b72fcddec1e186dd3e49aab0e95a08ec589b1d0dee4f44fcc189fb4a7abb352823be751f9bfe10b090facb625a7674485a73a87c21f8f99a08a7e7b2a9888fc053189dcfeb6e832e58a110b9ed125547577effab2741b4f6d4fa2b0a4e189658b5ccbc8238c94a90e5caff2a29b42873c00b970d76c003add70f59a3c0f1d54bdc5955b92c84c3a2d8d70b2598e26a5834b7e33588ea62296f45e831ba9ab924373d0df70f27aabea263b95ea313976f15e28895e6375cf40e3c4b169379de8c46e629ae89285c5ec2df7e17d0ce4c12f439dbb1172d6088446116d4d425a1be8bf35d51f31d550dcad8edf3ca88d50e402c71098432f960a242cffef514af6586d30d74056d21461abe7d74d8c9ee9b9a18cd21c5ee9427985fdaf78ecd540bc803aea718ae4d92431ea11d8407d55562ad647c44c6dd279716cc5109b63c0bb013d54da547366cd467fd4064d945c62a48cb9b994220eb4f16188dee75c3ffef7205ea53ce78403f38e6afe3a49c58618966e22be6fc0cf0cc4410b5728852d6acb50f7caa8fb6e3fff19e98f065a698ddcaf2852beae75cb7d39be742f5aef622572fb871e93b732ba2aefd532e1b40b45c3f3d976a14c3474b520c4da86ece8180bd6fab11386d4a8e5379334230e9bbbf4aadbfe61fc52920059d18fd0cd038c65b3acca45822eaf91ea5176e82043268876dec0b62e2abd619023b7023abc67c6b823cfef5447b8772f985ff7910d6cc87e6c23688ac6de1fee40bbe2da1a92770de92adaa427ace02fee571a0a0176fceb0c8f3eb72dde839ab201395625f5c0db8641ce19d7711212dec61733262c6ce4476c025e67a3d5bc01f3ce55e578e84a807e935b5ef156ffed14b7b384765f92a3237a267d175d7eb3f86b80630439816148f013c412f31ea5aac233233d1f1caa1a6fb8762162065277d67fa67ff9a9b006aee912be33988dee005a0c67f2abe4baa8bb5aa82e7c66dad8f9b6d371e9f62295844fdc5c952d4939d146de2167d86befd831960709758839979ce6e96aba036d8d8354b73c0e24343fd988f3770e960ab704d236d509e9c1005fa2a9538411feabb60e8cb6b7e5ba4dce4fb2040ea1c2ffda440207a96538dc07edf8cdddb41087f1f1232bb0f693a32c1aa43561f6df58bcd4b5c7de6465d59db120004b546ac83be7c3c282bd87e8fbd013338efb296cb16a963f2e4e119127d567135859d5179dd8b5a3b4a45ec4435b45251d1a68e0c1eeec94248b04b8b041162f8c2b191c1eaa42f7ce11dfe10da2833496ba635ff44800f1458306f33ddd747b6e32fe7ec646b0e6596ed3e4608d14888242e38f53601a7c1b9fdfead891cb2086d74ce69d944797dc22027845044248691cb018e51e815d2d455644884561455c80cafbac7c5133df953443c3ef539dd1af92a3b36b7fbd03de35a956e1801379974166fae714e1ea2f31ede23690ae446351d8c32d5ac426d342c3484d6eb2648279ce8fbbd9ca8658c01faac241a449a0b45e1f4e5b991d8a463769717349a5ab3adc74e2e8153a78ab812479aea669ce84decfb4ca65706d08b0be35d900c5784c38b04289eb8ff7b8ba57441edd2a5589ffd949ef4fa8e352d45182e6004b5376894bc504740c3db0734c0cdb70179e8b6a47f311804c53ea4b293ee471bfa381774e52a0d739b25a5309b72b88b50f52c6219c7a1fe42799be4e53197baacf36acc0d0a73d9ebf8003982e574d8e11a5bc6d2b7055f8c627d5c9a7ce4492415acda9295fcdc4cae82a015aa6e6290d4ef435883c4a11985c37a1244af70260b885124411b0323d5b714a22627c0e691315809b2625b605008ddeb1d7ba7f9417790209040d707ea1807d6dd136c68fbdc8574c750f7075da7e8935bbb593453e548160820d07f782fea1253d3dd8e514b4c183732fc650b3b3a89a3f12c5dbf6bc9731d1d87e0ec693bf31ecb8ccd5df82c62866ae40fe53d346c7abf69dbe07594d643a955d2d34e8de7927d02bc5e8d96e2397b366e7828768a4478ba45739d5aae1056d2dbb96a506e535ad7b1ff562c25c4e67c174087718195af9610c54d5b6907a877420b2723f5d6076474acfc4c9bbd3f1d80bac4a5d0e2e685d461f047a5ae10cbdc350f592c9ee5414ae3ea88b296d7a331637a9406b09ff1e6e6307fd2581238d0e3ad90611286e6cb309b6118c652a5bfb723bc71834e62eeae88948dba3f56e6837c4a41d56edd6c1fa9562ce0328d72422a9fcfdf7461524763061628fa9e7390e5f73d5c0f8db40d7ee86d58f9d2ff7129ae70399475982d5a452a48d6881ea88517b22adb801986968868b51b0ecde09b78f106410846ecc8e2387e55ac2e16d42c4ea6754d33178ac69d6918a9540cea8fc0d9eca1e4f2596daf5dea6348785dc571734f5d674cc6137a09652b2842a1436e3909cad8da66381d5c1755f4497c43b8f5dc394c72c30f9d0a931cc14e5a3467882afbb90189e1f0ed6eeca816da5783c29e5949361c1b64e124f6a57c7fe33b6bc2acfbf42eebd8a653afda4cd251704e2845e4134bb760219d314b598cd058485367284eefc6230b680801780ec1fd1cec77b376ac741d406e652961fb7c4c927fb2a46e27016e811e9dc404ea3988a37d772dfce8c20ac20afad622565796fe8a0826ee7f1e19abd9d9889fef28a1763dbcba027b31a72b057ac81727f2c5d114eff62c527cc2e03c33c595a80fe609bfc0fe13ce3380efe05d85cceace37be92c2b8b44bbde8d2b83501728f6fb4c2662c50cd6c5816852e2b7590194a8b1ba638d512c55209d7d065d2d31fb8ac54e347588bd00fd68f416d3e1d2e082e7ca1aad1d449c98474074eb023d38b2b3599ba7bdb93db4f72bc8b45d0a387a05637a145555395074bef580fe14557bfc90bee4139224affb4120e033714396f3cbab496327d3500a3dafa6897df9ed893bc6b3f20f5cf55d7c47e1cdcfaae0994ad4d4ad82139ef306cde40b41cc1142a2da9dc2fa8e8e0625653f91ec1460e02a1d3e9d2ea144156175c2ec2878ee0f0c2329eb196183dd83a180e9902a1daeb1af0e99f2244a5a95d0c994faa28cd9c3c8dfd5357edbc9e0242e3c82941fed29b2cc0b9845b6a8ec05806c7ff4f4860df247e8158c9eb48216d0f18bf96e83d84d015ae6ab92e9ac3c70da7f162d0033c9ea8d8334d485b29eef727302135a07a934eea5fee6041e9f1f47c1b03f2d7c744f2a451e8624b8e4122602561558fdeeed2f9ce8b8e18a53171c0e6933f7321cfe2924f1bc78dc11c175ff9e7c670443b485950f12683883e0bf2ee910459be880f0e8567c6b664d85c73481506e62d01258561bfb816f55009ae9d9defe01015ce959f4d0e49dbfe48467a89a5460be8e10a9b57c1479f1011307e1a60caa8e1a7a3e74bfcccb90681461ba62034635b11554859b099c806b944fa86f56dfb8430d617d510936e799e0ea60ae625c5c01cf1f326248212ac4848ad741c4e7a75e0988b88f8426edfe4eca428859e95c08a7d465d9b95016964b8015243e0c82f3d67ccc8025e5ca1fc7c807f7d0375d4e0339c50745706d6851f90b21ac94728adc05622dd5baa584b4ad5704af8c865a4c18fbf4d2cb56c3fdbd613ff6c89eac82ea229c7aeca6b67b41dcb5de31ffb4eb37aea849a7fa2eb993be8705f02fe032f5b3d7fdc4f73c864c3b14466ef1e4465e872c934d8131ed45caffbf544caf54ecbee6478abd9e3b961f29cd8a8472c7572d8796051254ff992eb10d3b1ea04e98eacf3f86236504e62efb5ccfdfe7d5e94ac13c16d520585892a5d8efcc3b89c1e09cccff4e1848061092dc832bcbd7db83e36ccaf31c604a9de206b67f086d2f4855d83f693f6ebc6ef633ef8fa437f682f30e6794d17f36f87080d95f9063a9c9004a8c9a62e0d1f0304b5b34fc5c02effc0936dfc51ee54b572f9f935ad1f90ba70a2f090a050d3d460a0f415aaec77103477ffd82a3203d9ffa5244ee20e5b751ff70e0be4537fe435a52df47950cb112af8a169078ad7651c83899d5b9367507139644070819da2c226e364a799b5730299e517503549f75839bbb9602b3ecd02deb5f6cb6797a0b4aa96debc23a0a669d04d6bbaedf601112c1d1b96526c5b435b55975b72085e7b94cadb2d8b272bbf305cee9e014602f5df304c74955a7bb143d5aaa74d6a4c9599e1d2824ca383713e76188 +MD = f5d9483f7a39de74a9b7a684f7508395e6e2e56fbfe53ad0247edfaf + +Len = 77056 +Msg = 06ca2702d1b1d703d2e2ee034379a79f5e9e1bda2a07b7be94bfec47c126287ca33a06dfca14c2077db5ef8c0a036c235a0f940ac899b5a733d6c36c52714efd48cfb29579978ea69b7277bf100fedb3736b8df8714f894dda1a569ff7c0a42e1f1393ec85412425549eed65fea41297d038706acb2f1bf9af110baa581d12564d8d11ab971b6ccfcfc3bb467bcbc3169b01a4297e4453f2da454b541c8f80bffdc5959c562b4eeb3568482a308be879f94b91fd33931a82843e7f64ec1fd6af554485856b7bb3c0ad16fcd9c4ec690914a09fad922656efd5820da36fd3fc6f7d914b2f7d13819760543f1ae0f62e0b148736034204f182f49b5fd94eb5db479e344d6235f9a2b876aa79b72cb21fca2189bec5ec35d1830a11dbcd30cd597ee0b6f5e53b37fc6b16a012764f27258d612d9fbc37c2e03a3e6aeb49be215f5e6a9eaa8236d579f868bf7220f25d269bfffb41b0ccb204eeb930f613a0bcd62d6574d3ffced900a6958e027dbc5d0b3d217b0d69520d27e9a2ea64f47da3a434f8c1da25ac4d78bfc5962854562ebdbbf03669ae72db307122219cb4fde0b3bb4c0b26bc7838cb891f5d4d6e67d8235d93b3be48d42507cf615c081bc979e90a88dd1f8cd9a3e04dcc6dda949864246b327a75001ff3944b86230ff189793068d5bc2d5c78959f52f44e358c91d9aa2cf714f49cfb4bbf2cbafe19fde4e56f1f5b32b8f6fd16f0e2bd86c81ef93f9ce90808a5e4123770bc24768e0883c78e7541c628200f2ebb43529ffa14799fe1ea8ddeefa209be8f41ed12d7da0e2674b3b001e5a356e6e8bed9213235b8006377af1f399c8be804043c5b5a3b2c0b0b20cf6957477c455f9b7b92da485f6a09d89552ed9b3ebeb74d3ad880f3857d3a06c788e7d3265409225f7c591615e5bb5469ff7267ca4790640e11b1c9c284e9abbfe6fb11fe1acc9bae661767837a613450ae30c8d88c7890e28e56878b280058e009fdc7ac9f914d8fd97c025030e4c174e88f861093551adbd8d5f387726855527b53bed8eb41812b5cf0b125102a40fd34f7681966114a237698d65f6907ea3cc467be2907c27fa977db3aaa201cfc131bd0389c0d9268e2f005f7bb16c65fc66a9f8f47fafe8f32b2a566866aa23cdc2482bc408ec2bc3fcf8620417f8dfb1af765f8dbccdbf9ee96b6fd62f6a54783d775bdaef3878e639982179cae45085df320c28d85430404aa76c7e5ca0b662ebc11028d44cb2576d961a572abd4ccbae437b5042e1df99d764e8cb8f0bee1065cbf55868775ca9f148a926c7c249057541499e9cf5120e083a4138270a400323ee57c41c66dc506d467a6312b1c9b5cca1e36e36ec6c1f658e125ec50a70bdaeaed4065089b5ed4a05fa96ac0a337f2cfbd549b156624067e6e8a9e9aae4928e93d699a56e7dd3101da62be41a3aa41ea59bab8cb1891397bb10a3f56a00342c23fbf8ab73989447e409ad6b8033d70a35a31e399c44fb7d9146c778a678150fd590adb3379ab369ffa19592cab38a7822981c48552a7a71ffe7af040ea0b7b23f51135d28f8b2eec6ea7f0a682e310102c72029aabe131d6d7fa4f7f11e9eabb7a9d419d637155ee050c432d7285d0d4cccb46ddb5457f8506b53f50c462c74d5076a69bdda5d32c270ff9c96368125671563758591ab6b4f57366b9ebbf3761df640dd4e66ecf2e3d7aba823bd2fc1f84d97e1280aa01ec0bfc6cc56e4964808e2f1e516416717dad133061e30cb6b66b1dc213103b86b3b017fa7935457631c79e801941e3e3a0e1a3016d435e69a390eaac64f3166d944c8eb8df29fe95fdf27adc34631e4a1f3ff1d5af430f3d6f5908e40c0f83df1447274dfe30bbe76b758bd9abb40ed18331c7552dcc6959a1303e11134ec904bd0aab62de33c39703b99920851afd9d531eeb28f1c4b2e6c17c55db8296320316fbe19e881b5fcb4d266c58ca7f31d9176e26f70315330b58a516ec60d10404a78393aa03ced7acd225cb2a83caf3ab5888406a69a534f1ed1346e9b5e68831f90b872d57367361191c803eb7e38b3b9cd601282d5efdbf082db07d89bd06b093f986d08d3a7b12aa74513b6eb241b26ebf31da5726d59e315d1b4ee53ec6a9fdb6583bacc136e90e9607cab01e5d3853ab9727ede706b6f10b4e04d0510f45c0abc515bcb5ed0bcce86a92861126f4d502fcb8f988d62ecf9d124853de2bab633f9506c6fde8a36cd4413cf773e50f7b2d283482f18e2f547c2fc275cd60056ed98fb8d0816fd777c1566f0c2ae3b1cd92e344910a75e006106d193e06f7786ae37dd0e529cacf74176fd4cc1f6500549af5902dbbd56a70c194f5b671372edec425f90add40b4eb3d55123f3ab62797ad25bf5eecf4f417f86b00e6f76a4f52e44fd949851aae649dd0d26d641d4c1f343c7a2c851ca7851bbbdfd57ed6024eabc518a909a1e4689ea7bc5f83e19872950368a06e93ab41944c3d8befc5705b814e5f33511a7f7ea8a4771c804b321a3a3f32c18fa127d3c9e6c011337dc100ceb156ed45d0a62f238dacac44a3429f89bb7f98d09043c42451106e30471cc6fab7a4e1ce0a8202772b0218b631f287ec3ef82b1aa6299a0b54d6aad06aa9346d28f117d20f3b7f0d462267bd3c685cca8f4584532dfee0e8b9bacefa3092d28fcce7953a28f82e4ba6b3a1430ecca58b770dab656bed1b224663e196dffc28c96a2c65ef9de1989a125ecf2fed47eb96bef8a636a91bd521c47aeb8bc011bf81cc688fd8b620446353cbf7692201b5552cb07fb02eb3954dfaa6f5c31bf91e20b84419dcbbdaba0c31a124d8f4218b2f88da3eba44dbe40eb290052538dccd0ff7670de5f33a83ff74895b66adcff58c9c21e93b31bb49ccb2e026995ee155b5517b72daa76526a2e42aa6fa94357cd42e2a8a1d3e7d4cefc33d5d07d6303d798d2551a21f862b5f492d0c7cf078a77007a02847b34675dfad4fb457e9f20dc5750fb127a3c31b9d6a3996d50ac3ffc6ef29cca1d8414d0438bf3271dc4f4e00cfe19a507b447dc310f74aeb2a3c0b3fae6d7d13f4935bc72c35df3efa6e879164421505ee32d93b030e32a7970b53430b1643855167278e5058c4a48a7840e2fcdb282e45b5b86c0b2756f19b595f3bcfc926df35e33ac26dd1e88cd394015a5f54deb4c9f4a0bef0eabcb27c4eb88dc2302f09e92f1bcc4b4754df1eeb536154543c7dbf181c9979fe6ed08311e5a3acf365ebb5745212b2630e83b3a5bd5fa4834c727248b165700c7435f8cb6ee455bad16ee0da68fe6acd2062dae9c8bc178b157b29ade98a9bbbd4c723a3dcb7852c7978b488e4f73a2c9163dbdffae175119f812b6f4b70c2b498704bc2b58603f167f277a74e64ec296a6dfdb0de3486c0f36ac1b55f80af9fc817ba4f84b898b2a3c5725e2faf466bb26a8a84f91e123d182033a7ae2029236aa4b673ceb50c1733d7edd60e3f119b7141c882d508e0331689c96fbfb9f7e888fe88561de427c721123036737c1460b0da00d3f958b948f68fcb321ab4e297290f781ff8afb06b755d82a7e6ce1963761d799eed786524bf19801b4877b2d856becdf7e87d71aa359f2d51f09de64bcbf27d0c3aceac70790e314fd06c2f5216f3d10574b7302d6bc2775b185145c1b741524567c456d42c5826f93afa20ae7196ca7224c3b69b1eada9eee752fb6d43f24170fcc02af7e1dea73f0f884f936f900165800acb9d57480a31e409d3f676ed92b6812cf182a088fc49d68082aa19c7be0711f436db1d7be44d97dc9405591a8d3e7f6f731c6f3e6c401749829b7624497f5eeac1fc782e7d6988340541f2617a317ef1786e58e8404c5b4b170d8e8fe9f6ef5232a970491fae407af0534baba0b6041ac820626ec19428ee08a86af1e7944d9552890eb4104446141be26cde48f69b522ad995b83441099a1f1511308b80ff1ce94559589852226c4e975be4ba18ca016841faafe47a83b722fc8b361de38d4ebf845a1b01005de8531a22a33e451a8f48019839186820adda04e1e9e5e480929bef17e691787ef2f112c9051ca5116493c1783f173367e40fd61a332bac5f52472d9aa292df0df1ef2756f19b5f39e81028a0aa2a02e0c5891a3efb3662b2f589e7eb354a60924d1602d34e049c1a8489df1a6099fd14b60f7756294f2f02e32ac510890220966d2e4b47069f833a9ec48eee4bac4e8a206b9569a4be3bd583f26e1384014aa1bbffa9bb00b43d23a08bdc2252ab1aca6c631d7f56cbadb63fa88bfb109104399e50c536248bf15df0a471c05cdd8c5d00c0b7a026beae2a7e16c3d114f876e87eea47c05a6cc86ef8d7f6cf538bc9ca46490ad5fcde65bba902bf9c777fca35c496d6618a9eeae01eee13581efdfc99a4c8bf25c074fbf026352764236e25a8d61a1a229c6a7e3bccaf6f62a57b4b5384037d995ac897515e77a232ff0db1ca1d3ebd0a7818ac0569e4b3f5d04dde7f4dc4ed38b3226267b98fd80df3a3962201cc642207f09ec85d53861987badea567d1b70ab1ca84b9a04772fde77afc39eb8ab9712f39790b0fc591d7b20b734e3af282173d0724d07965180ac3d80a95414264ffd93d6857e9017c363989c4012ef1f66840236a32adb2713d6f06e8c06cba0dd4ee42913352d1ee3f0479fa46ab95bc04a0647f69a5f6269dd44cbf42d5bb5bf954911c27b2fb8ff9fb263ca519a57cf347138bfdc8f9de32d8f1b7a1e30cf675f57232bb7248086c07d7b3a7e0eadd3e1b77b5747d824205643ff767fd778750b72cfb78f88001a00ed387d3682c88ec06da26582e5bfa1d617ca81b8dc2b69284099ee5ad6b219ef963dfb119322505ef820630424aad83b5f1f146fab62a44434f438bf9d0116db1cfe3ca5cc65b92bdb87c852118033d4ae6fb6fac1b8c6edc4714f0457979151d5fbda597aed2995ac4b0de338da65506a3ed1e0bb983163639369ef72cff9f245b92cb34b33325adeecbc3df703bd2d36ff0dc7f57b8463b6dd41d79b24e12b00a8dc2999d263b9e7ef5bc908b6dbd98942c2f70bfd205d22a14f331d30c76a8b5d314303452e515bb5552aba4e11d3d58c8a246b77a5ce3ba1eaa8956e2d3f3a48f485f40602afaef140c998442faa904edba6908585157631bcae70577327b1fe7e79088f71335605973c2f3365dc6dfc201417a13ef146e33d9b5a6749a276e03782ad5c0a6af564d0d8eb8654d7b3370fe37d4543b03238d615a028014dfd80c8395ef63ed4e1b1865669d79d2b0461e39b1e0c23f0cc952e93ee144a78ba62a91389e87f0fbf6e100b06817f44d62f53b1864060218a9a9fac90b675b142184297daad4b69f2ed068d5e2e9bc3bcd1d8bd529c78c0d0cbb1b63479238608e43d3cbdaf447200c0f243ed3973160cfbdb14ef7aee6d538b0d4745e6d4758388e178bf78cab68d8c3bc5203c95ba5b2fd36ed9563175676afad64199f8fe4668e7e23c947ea5dda17b878392643f2bc06a119cd8d277a0de02f9b3ed118ed5f6b8ffc18ca0de95931a11a3f56f03037007a3965d41f27476ce18295aaeb596c4cd37eacc01cf39f39ff9fdb026a4569134ab726e206476a7b4b7fe8d30f12d559d0114dcf1d62f258586fd6d2ba1b9b6597fad85ce4c1bf34f6fbfdf38cfee2bc101ec29f1a209bb536f2f76de7991421ec6a43edc17d8ec0695f9db36b07db9a1b0bd4d91a14e17a2090087cf9a61e6dce6f2e3ba6631f472c1190bbb314071e77424b2526260ecc9fb1cfa6f92cff71c77163ee9a5bb9f0c87b9eb26c0caf6dae29ef2a453e69d53abd1694ee1200575ed8a8afa64da5e3c4038f419fd91bb2482a87917f4439bd791ca3ede04069441c0cc626d1212c49a8132a0f53629313cbacdd01dc20c7ace4363e5ad89d8262877585fa23bf944afd1238c5908f5fb8c117b72365bb5bc90473b183dc1392d9297cacd3a40f250d4a68810a5e48c6cab1d2de9f21fb3c3c603cc30ff789e3d18a87055b5dfa29bb177ccd87c675117124471a1c19c9b42e80f73ba72ee8bb71300056375566e67bedb8e4e3cffe89d4a1dd3242530e09c7ed0ee2f28b1663e1a54d6812943da57652838ec782cb731cb0fcf0bbd9b0842e2ee7809915fc234a71d803922365aed3d14592dbe5c51a70d90c1a2cb3996d8ccbecdd43d48242d41a07ee5f09c849bbef67b9c603d2c5f9a5757940e7af0c084d83c099d1910aa62a44f3224e4cbe56364fcb31e1dbbbdf9ba0d59d7fdca8cb3b16f242130fc1e929f6d883fbdb54cb2d6690c389c9454944f3f6eb82068bfc1d0c3ce7a2e6b0c49d846629175c55435c14cf250282ab5f26d7a3d3f917fbc47ccd643087fc1f60105865bdaab607e54cc252fe54f0354bcbb5a6fcebf6414bdec132c4c93b56e409d99de6bdd3b3da84d6dff788fa2b32bbf3c510608ba5b8ce50704c70899c79116fd64d569aa0498cba3fb8a487d43f7cfbc9b461be6e33d1e2e46f85d03b47af82d79a80f3185bedd43ae8b381799798337992f477e6e671df57d60ff779756b7a697440c661382e8e972fbacf626597059f52249e53f735af922916e69f2ccdc05483a0fbc407d74f2037c359d7cfffd8019cf61bfe8ea5ba5a0fa385f4935eba6070a77b89f1717e9ba5d50720fd5a13691674d62fd44a687a30bcbcc2d3a5d154e35d2cf81d8385d124f9c184182f209d6ba5b82ef0ab22b8356c734f132a6dfa83cbf759b395cb8a5a366f4c480766654191a7420b514edec6b892e57c76f718f9f8c4f3dd2fb88def94f9c1b4694d8b41418cb44dc256b28aaa01ca3610d577eced7c0fc1dab4a48c1b472885dd3dd512bc50ccdd88a0fd2a49a846688071df05b005f5871d2795d9d441cce2eb9e0d5c0ad9d2e42b96864d9d6fa33a4f3218ec4b49ed588179297dc6d0f4f41cd8f9c934110e89319e179caf3f27d5047fe948c52f3f5c8d122821f9dae7e3f75362ff41dfc8f5242276bf86fe1c6127c21bc2279e32bac95b5a6c7648eed605780fa6392a474f8b896c5d2a96c8054162760178800f9bbdba8707440351f5ccadca6725dcd4c0ef3bc11ea4ed74ead9c7c2aec0bc1e26f29876996bf25869d65b59ea0cdcb770d7a03dacfbed67387759c770083aa784ef5ef0cbf4fc4b5aabeb85d6f6123886cb20a8ac377deb16a3804df057e2f2dc3c72bd45e60b71efd1c316d3eb669f2b5323c9c9618446ace6a41bd5b59c4757623ea5ae49061351d24dd48bf4c03386f81169a980ecc123c72dfac82a50ed1de82870ae26d479a836f087a318083dc0415250f49c9ca4a3cf83b271bfe62d55569ae5ef845feb1b8313f6c660260500b74e4653be7c3753840e0b777b464f2735fbcd166b8eb1d24320ea9ad202d36fe06d136dec74c25c7036cd8367589bbc0bb3f0cee34912f6fd7e2bc77985ef3547187eec306c8ce61b64bf3c8905583c632a16bdf57857af3a9581f65a95a07971b55175924cde180cfeaa4beb33d0cfc2c7078ba804c92481cdb4cf7f1b3063e8ae52b319fc001acb6e565795cb499bb2f48ae105d3ad7e5a8e8bf9ef00e51c33694a4bcd643a15e01a8b098db60ccbba19696712ce4ee44d40cf1db22a08ccda5000e8b66dd431d46c1109ddda6185639c6ac4d9ddf37fe34b48e2d183e09a65c93e30ddfd15952dcaaffe8d218ff133e656a062e9e377a317bef153f2b7af5d3ecacb49fd466a769e2f90a372e039b45ff4a5b3d867f3160cf9f1405ed3334a166d620256afd7344f576829b49a826e6f0e79d694c71bc293c08ba0b17d4db2b9ef9d11ee9805f145f02e26d106f7e87f6ac4d3034b183112dd677cd2fd251f8f18237daf491b34e8c18aa3b06cbdaaf5d22fb00f3b12ebf3162cdba99be41800b09d4e80094286a09422a73914ff3c3b0b61779fde30769c3482c61e9fb226747eb28d4822a26ed52fa13a5445e327b7e003309a7d9b5c77ff13441950b6cf534b0b41f1da6274ef5bad64e94991f2d318bde1ea607b25ea3e845d82f8199e05df4f72627aab2056e0ee2ee0663225f67a369476cff7575fbb801941dd0218f20227288349a4fb72860e9f21e5ee4887d017502612377c3d3cad813e479ac7827c3b6c3c91768cac15b2c0950eece4f0e0071ee270641bec8ab39c628009321e1432457598485b6a548497222855809873af059233a6bdd46d3b7393cf76e12c94b5bc16a843f1150c2c2fb17d50a5e750b70d1ea124e95daced0cba7b095d16c26bd807078ed51605528d2b5306da4541c63e6e030727ef117071c0cdec2d4266fda130fd538fd3079dbb76f39fa71a0c84a16ba076fff2626daa8b0d44d91a4a121f7ad4b7a8b6dab5c07ca54294ce7a9b3dfbc29aface688bbd05833cea0435535bcbd2e4a7264543a423b0172ac953b01a07af9b9febeb73b41576f9e76aee675c0d4102148b12ef6f555e47f0745f6e4178b0a077b1b3cc96a230a658b33ef82a266738784c07602af9f5fa6f35657ab9340dd10989873f6c96f769c547edabce008daf5ad3ed3fddf7be572d752f7f8a250e57ddd930743dd8146ab78ec32a4f81fa8f42878b338e370187b49d8323bd32fb5a7b0a77121150cfd2b6f0881db593f8ffb8d0abe547a006b28c132a0e59421b016c8522c2f1e66fc948d5032b091dcd27451613fc0f1c14fe3b41ece9663fb77537b1f92be3823e76f7a5fdfd5206c23070c18c21ef9374964b8d905ced1017de64f5c6f6f20c82024ac83e3b98381f42c239defcedeb6fa04461e00ef49d83637bbb4fca236c8495c9a68e8ce39a2c84c2e7d134140d4b45ac24a2a886ce432c056a5d50808a8c55fda7b5983c14311ff8312d7269e150ac0d3e9fd1a88b9e628a69b82f104ee16d6d347a08aa8e753bec80b95df64fc8feee179f3264bcde2d90222810dba1cd03a2b3a68436f041fe273d3e9ec240f962d8176a73c14949b4a1fc759bea699640228e01b3e722dd9330ce84dcd59a2c0152a6c73bc81a2820445f66774490854b772b533ec50d91208f9d53c03847aa02e42c7f327f17c29802b3c54df1fce24d28f464ccd897a5cecd1073f2f22db88e16115a01f0296145616158c4fa97f56dbe4ffc0629a960c47191ab190b36a1cd71bd205023364b4febcfe885664705d4c0a6e294bf2c0b2b0387c5dd8c49abe67c9899c61e27c9dd28663c373df65ca9b660df1da206ee2a0b5a87e87c4d2002bf0b8d0cebe523179f8e1e83888b401529e5bb49db2151ea1271badfe32c4648c37cc3ca9257a126d8b054114eeefa40a09d3ec271637c929f36266dc9cd66e10f5404a719648b325b32a7889707d251a3f02f2d6cb6b64b3b1092383718c7f42cfc184b8af62862b17edf916bbe0f70ba465835d501493d6d67c7e834f5b3aaa0dac75fecf4c1df61fac4d3d3fbfbc76e077f80b32c7b8fbda48e26c94c702bf558d98b48459ed1f3101df7d6a6dc7b469b6db60e1e956ab32dad9afd05479eb2dd1576a5d3075fef27b4a47da7fbb7cb6aea80eec1def5d86becebd808802b60d044c90b8544b1dea64f83cfe6a0a183ddbe865cfca059b3c615c1623d63fc869b2e2b83439cf048f7b73bd44b1361f85ab06f5fb721bdcda7eec6a48d3836aca59b4513f55944b381b47594bf9b20b24a89e300daab4aac7441a0a5de46045b5653bfc683c1d4a9ac0ed9182881063816118c464e8427da97d4f76d1ad68c19161d40a1d61dc9b1e08c0e67700e3a1124100f39f9f47edf766f74052730f6714dc370aed4b44a5485f7bd897d87e5c8de4e17e1c44574417bdcbe74ef9c6be8630bf8f466d0801803178d8739372ee2ab924a4797bd338a0ce27ec258621308c0be807b75b79388c3b427688a653ee9f2a650725ba6e34193485cf84cc91558cda4af4ce7b2aa292b9632345a583c651d50d26af646abef77d7ff1db21a9960f0842e6ea609ed85a48457f3905951dc9359783852e6b41b20571039719ec9a99227a4e99804852397483eae14b0a5d8bc89e9e356cd264df6903655739acbba1c56bac6a7eb9a8b6aa88e6dcea55fe000a7ce73e945280e61491a779f59c71bf4d7180cba055346876df036a680a87dc77dcef1f594e2e4c94c64aadd22e655847265c3b89bd9db545f0b138488a73579d1926461037d5a965fbbf3153c4fef33f14af38bf554d23b45880b500685937e6cc1d415da21f5304bc75c2ff02c71681a6ea51a5bebb4a2e80e26f242691c3e160449f861f53fffd731ec1486a2648db77ae14d15c607f311466d52847c5a229603ccf4e022bf6ccda1abaa46db4f098e15ad0c6a0e569586d7e75814e5d490b66564f09ecffdddf3bea2da77ffba4468e8133fa4eb26f0106b9ded39cd12f13cd31ad5e42582bb1331d88d63352da60c9a1ace0984016c76a795f73d5c9daef1f4f589fa4cd56ff3a155a950a6319744d4caa1e2026e718235d95f66b9fc2d9d71fdf5286b7e5f5cb72217877a4d7fd63e2ca1768cf667fabd710efd0db7d808f13a01b6ab06f5151b46c050d80ac68b7f47b40f4b1fb6a7e663eb497f5716f91db596eb33f498e874c98bf2e8efd42b4024c3f36774c65159b9dd9438634e3a9d759a102cd0af9b6bb45fb7d484117e28c9b76b077a00bfbe7bce246063ea911882f76dbd23a4f7a70e26e5c151e64be04076bf53bbcabbbcafa5431edf51c736e5934a0f73dec4d1dfc7c5d9dfb95c0f91ea3774be8d0bfb5f4a379a60eba4a0a558ef494bc5ca90302a9f44b5f3775ec2f91b920bb2782492a448fd6d20effeca2ca39430c1d08d0837bb2a5bfd6575dd8db2d42b9fcadf519dc06f8f5872f75df9b018ac3aa06f6fd660b25a3deefbe98d4563a5bec9d3a31ce5174dfbf33464a65cfc469800df6defd804391dd999efe11c6701763da9900a011e2f713b5dea1bf0698743b9850b6a69498004f0f6f6717f07c82eed08204d5aabbd221219f440b386f5a49308502f5ca9b85af9bb0625b66b8150a2995cce38e780773f108cfdef7c1a2155114526f94b6886bd8f27e508bcb44324044b75e5faffd68cebb93aea727e23c947f038875818f2041b6299bf22e96f3bf0f52ba80bc2a8bf5284dfee91a713b5535b4b50f750059606be2921c4a93caf0563d6c8425256a1ecf3d441001f57e2dc8e489a5199273af9447d77cb7b1247ec9c5f8ec83646fa6211012be86e59188b8f18ae8e7ac0ba9cfb7d085ee859cc4da8af42c5f6e2925be34ef6711a7f1e0868a1d4d57c38dc96eb121ea6777907cf90ad2c601b91308073a4e8c2ad33befa21cd534e25f869901c22ffcbb0dabd1b5b4093c22cba9e79c8e94b04afdcbe09c0837522006628319796f4f41be4b9d91152c113b1c7a2edea07655ea6e1e7de4fab807992ebe322635745494100c2b0bbcafc7a331f0585e2e47ff91cac0121d52cbd7a65f0600a884c3af3a9949f48608f8d1f392a8ee8b76ae0fd98a4d47a5bf0744e00db68920f5c1b1adb0a194a088bbc2b4b5007be717fd291a331278fe8deed1ceb15c362ff712fe560c8f85ebba5d0c6f1f936b1190d9bddc4bbc40b84de6f0daf0739216072bf7dbf38042b82c51317b48de567b5fb840a83aa719437d84349d31892773a46130a80c0045a64d3cb471b74da885031d5406867f7d20ab4b2f7dfaf950e96d773b32ccac2926ab8417daf16debdef97d6a6fc581e6f045a02405b360c8b7b0c27a04abd047c9b5abde2f6dcb8ae9c15cf65c6e6ad102eb37b4bd014bd99f2cd76fa620193c0ffa2869e7a2c32025e9307a44e796e5f8ea56741c6b170de0202aae9fcfe37059e78e6d8c36f12613ef9c78c1d7a27042f190c49c375ef02b3930994a11cb7f381c523b9570e2175422f5745ba4fa1a716f8b48c51c801ae0d69dc24d8c3dd33af6f8668c06f27e3741dfff6ad62a4ef4d28a531f7126d8a196a6ac02a5b6f6d3060570d86fcec56dcac07c87f1af884db9327613ebbfc3dde7ffd911e4c36480d7eded22f1c377481c2b6e2b7de640fc81f8444ac2b76706491dbbf3cfefa6d4db363dd4536d1e56b48556cdd18b1381cb60201cbcaa3cab4864d710cd98384f8e62d5650b48352a2272c907a2fa7a6e03febc123014af4d5489bcf1746983417ff8566d6fd13632f458374158b0e021ca285ab3a363595cfbd0d02e4ab0325b0e5b335617949bf198ca2403694aef3d6c719e89ad22a56abcfeb32fb718a00ce82ffea7890ef0f68e3d01d65b24f221896ee9fcb3ef2df70657c86e501f66d76bdb0ada4aacbfa243157332b4db836e9f74ef953e155d72666092729c10e13b27e10a86b2fa72956607da90fcdb2d852d27f1ebc221ae6d6bcda3d4f1b9c9b89ad65005887494306578ba79a9a05b0590fca358e6b0bb5874e37efe07666ac0433f8e0f01a79f13afec857521c7965099677664f23eeec41046865633a36ef29f6116ebd5101dbfc3d7edfc1bbd5a0674fcedb89b18c330cc6b4c860ced20c02dff8d24692a8a853fcf3676fe0e3087d2217b9c37fad30f17c65405f9c02aa97d6f4351346350148237118e3f1694652f8992b86f4188ef70ec1f4e90b9071eec44ebfadd6718de19a3e19a5583001eeb79d57597897f32764110d8583420b118f4f979ba824f52849a2933d7b00e25a496b65c473f00887679cb2bc6ce21d08213ce6652615e02519e7ae34c4a1919d944b7e4f4dec7422fdac0c152f3652d96060d394b70ef7dff05391109adab5bf8285ca836f53dffd0f87431832074f8e360287afc2d5e25eb830655c6474f6c9fa6070e73fedf32286767e4dde1cbf2f8a69293eb13448aa57c4519d8c38fec2e32598042682559848c1e53d9b3f48c243dee2c9ebf0d1ccb7587e5d79eb72b2271d6c608dd9b0673fb0a16fd23692514ba9dad9d8d426cbbe3314239358fda1ad8d1185dabbaa98518bda6be9ca46e3891238f5e0a7efaf569f3a78424645985dc0b2fb77f0eb316899b7ba4ac30c81e56125a66b30d38066e218e3ee7cf29e1ffd7548ca401c3d6b2361e35be98b3247ddc873e1387b47d545d7ecffc3adbcdb8b82f63d73e5c14271006e86046cfe97cf4ae4aa878f0c8d109f1bdde31ef979b3028d3650edc7d5cbbbe432db56edbd7fd2812ee5b6d5758b97f9f0a4ec5de1bd1d931fa0dd560c79baccc637f208a23589d3d61a98ac75fee80da1cebff0fcf1fa925f2b5c77cfc226aeace0e8562c39966108edde9875b0b9df562841bbb096c2115eb9133106f027124b9edfdf44d222b32d2830a25dea33f8787b18c5e6f69c998412aa8c9949e4810b3980acd34a5552ae9135d015f47edf708fec168757b1b139fdc89070168683547872c4bfe756c5f1f1962c8616c11ca52c66b7790229e1e5441546739e349e8e245d30f2f24e94600ffbbe969825387e1a2dafa63f2bb1f0ad3bb58b2b175c2105ebf652b2644862b50a8d2ec1d1ba6520ea06f456dfaac201dfe59e03574476e3c220c971c1685ea96ea137daed2ac10845c54d8e6e53c307acdf956f1bdef3868ab53e758c7cbeb4cd02972ba311f998e5f3983000345c8947aa59b78bb301b6ecbe9808ee0de99ed0b938fc +MD = c9fa68b00121e58d8d406186f9ced248a5fedb60a177ef1453e18b6f + +Len = 77848 +Msg = eee3b4e74f405de799be0e948f263a27d49e3d18507de591d55e3122037458b6691d0dc6ecb902cc6dbcabfba602442d5563151d9d88f5d6a9fc0d6b9286dee983b7868a1bbf3e2b1285280020f648871a9ccfba5f73a08972f90d87e885e1e485d9a49ba2fa1aecd1400d0dc4a94c1d6b72f4595de9ee92797db9dfcd176a8fb7adf16149149df8f215e3895bc45bd7900d0b616090e8d906af9ad909e480d26058f445dab2d035bd2d30dcadee7a9dd0949c3a3010954761b737de63952b95c90535ad1b7fb98c7ab07f6d82d0b3577530304b9512fec2d1be1857a4d273c03bda3d02d62062e570c655a6a2110dedc5084efe573e29339fecc6aa9442613bfcff93add140d329e8953ceed55a914709457eba3d3b20831468c841fb8efcee549dbf14d585133e2a48bbade253454d880e48e810b2eb98765ba682a15e4dc18ddc4aa1a997290e7e055b4c92a333e88c8c35ee984a905c0dece9d74e585a9deee3bbbb171f20802cf4a231adf363fe5be6cc359dac19b6234418a7c9272d68bedb9ac9e5c5fd7b7b3f1ac5fbeadb783e459525e77f8d8dfe8abb59db71ce0c46eb7035dc30cae9b50b4b704331a53f7dd119263d6cf5cbe7e75b574cdf436fce3cc366c4098fb12083bc9b4f6fc93a60b1dfa1691b585726837f08e418967b9df61ec465f752bb04ccf5ace54d4d502f0e70fc3133be190385afd46ac5cf16fd4006b786a31defab117e0dce733b6b310f52a15e5d30f9c6157323a88df42a344205a7f1b4f7355c78e024d2889a72afdd0ff6b840b4dfb65d545d64190f9e8b25a2fc6cd3e9755e29a25bb835734cf19f2f65068555b31c82d9ea6710275a4a11661ec0a8f997fa4d4c194a21cde33f7e385512d3185d40af8b33791b4546b92dd776b5da3183780c66c54ef4b01ee1a2b42ea2d307c56a0af09e61e2704a20a27f6a12129921208d79c98d5825e51e322a577f2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccff332204057233a71878670efebf97ed7420d3af43592ca283216140d77a876db6de2b78d38263e3f8c2782dbc2abc2f42b90f6f2a40d05706a3b38e230d4ef7b6f3a934efebbcbb3e213f3ec6732ca0870406a080bdf7e4148b0af014c185f75a1449acad06a49933252a96b0316fcdbb8267f7e928e9b62747c5fb2f2fc2e92aa07b54bd7bc20a823ed8ea0bdddc234ac481b9b63a4c69d95a7323d4a09c49a338bcd173a38b9ba5eeb89d2be1183ddf3b027a8a3a966b8533a0fe97dc68a55e3d9c87722677a918a54814a2d39a69c36668ced7d23e27c583cddffb3bce68b63f890b3b7cfccf45031605133de953a1d7030b2179ca4b149b586c7137141035af00b1320fa18ac58890d2df887b77f4fd8fd3f999b131fd1adf189c66f048671ca23df8670c48249647026a3bc743275a6dadb2ca9978d962d068df43e95dc508dbf5e10b73a3bccca71865d06341d36e0aed0f84d98c5403cad1ac3645ecd9e41c6d9e759e0a288c4f8934deb5f063b906364240f7e8d78e3ce7a5e6bc52103ee229832de207e2659ed979cf55db62cbde0e0d877b2aee62951f3ebdb349f299dbae31acc61964d9238d871ac97f5b0700d8c3e0e9af031161ece933a1210b5567602c7ad0ab3a675c19ff597738a6fb0d2af7b5b9f1a01b21e537d12c73c521f3e3c6008859dd80d71334f3e5a3f12851792bae629f6000637c9d2eabbeba602fadb0e66391c8c5f2edea829b5da41f7c47e2138a14ad419527ab94b56e559069225f84e8ef86a75e1e628e1ea24a30fc1b9d8d86ddf25f358ac5bbc00f11433ee634748ecf819567394f6ed63e5e1d4f68b084ef77d9c9d2fa8dfc521d97f92f7dc22dcbbe6420aca303bd586e5a24f4c3ed923a6ebe01ec1b66eee2163412a93dab29363888c9ad0021e22bdeb8f86a91972dee1f39a7ef41d30c068580204aba31ef44ca6a00d6b51c85b6fc15083f763fc07125b72c6b2274cc25e7f6c2628808f88df0a256b85676108032d8c4e1c659e27a0ec0ffde21aeb7d6ba2259af0b92dd5827bc4bc058a10b1e3f8ebed026781c5f36e1a2b6c3f3477f887d568ed961f659ec02509d303fddf76ea176a8fb0cc6973a93a5837de503a6bf72596055f8ec09ca2ef59d71a511924cab5ccad8aa89b8865188d2d3f664e2ebabc2e225ba16ce2e9cbb5f91634e85562701c433b3de49a695cd235a99f39a79844372bd381f3da5d60242141cdd37178ed61380cb2cb117ead2d37662385405962ba080f55ddebc557ae37e14562e0d5d7a3764530d9556cb3a81cbc19b960c4c0bea15746b07ceb575b233fc31d0b41d4ebe42ede94cefb174acaf4a95e6ea3064bdef37cf6f7950934cda3708d58838c406a0fe586e4f2811b2a55fdfbd4bcdc69a72a1e36c38c14401d5474393065a9aaf02f6c37001b982424293a18f9d7e821e44655f948982288fc9cf6a9fcadd0315ed79c2e883c056ca1b68b3e45bed57a7d8d48c6ee80d81250c11e662224abde9c4f9df3e61e70fb874616f32038497d5a4820251d0ee0e8030c15f70c92e2b893df960e80897fdac01f03c2f20cec3163be049e3d08e212fbc503e420bf1dc729cfaf08c045dd1032897b302303689e81391dbab6378596223410b6c8720314476612670d1930a5c7cea6c71be562cc9aff9200f063727e5ea162f46b753ca6d6ede4b6cece21a26535ab0e437a85c497598cf9545451d299532426708e7186bcac507a6d2c570ef605b28d0189768d618f332b48d1c998ba937cd541864abae3eb7b3d51fb7bf16187e5cdbedce02fdee9ae2035a482daa9a9928845246e4c31f29086e20334548e036a55e33969b3f8af26608493259f4edd8fc7e43286439008b5de880c2b3e65c069add669b9209628c2719b675af091769b1a867639a8e77712ccabdd07b7ce080b5e0134797ea09dabdde4e7c8d45abedd0a93ba30821d85d1d8b33f71c7b12177efcb6151d5fd56082cc5dd185391fb7e1e73c412d91c7b178a08fa1177f654d6e89bbae82e979b02e4a80ff1751e76a5df8f5c88b6cba10f6b12d68ece85e950d2db05e79055b4c18ff447fc43e9777bd34d4c3a20123ede023a9b91d446280c34f20bf5041fe86cb4114be1c4da462884165bcf1fd99bafd7e610c192225933964894bb91dd812cdc67e34700da2ad37a5350f0bb0801a8737ffec70fffc3ec804568e13f77c5288e5ed9d600cf6da53b6af444fd88b6f15d6e2d4a54c7af607b514e0e16d6fd89525ef437cba355c551c50f74ec3f02b31d1a65f3676065b70ed40fea1fe07076b0cffb12693c2b5b44ca692790162f163cea6e6a52b42d18c236731e617e68183119b70ee38436919ae3c906f2f5844141480f561da94fab1edf4252e4992b965ca4f0d44061c08ddd77f8b819c5485db49b125fce29129aaa37442db1170219bad86d0c88bd0f7794edbfe60d6cc4911e4a3d2e6f1bc00aeea74158cfe235c9d11ef85dc47f6c7848afe438d7d4400606bf596b07669f257395007b46e00ccd2cdc576ffb8f1fb880242f557ee303e3f4612dbe9ff4f813c06a4a3d1ffbcf4e507b53eb35d5705ec4b46ae60a835751709883cd3eac12fc5d8fe7466119c573c764b4797a38a7929cc75b92849b827803cc2143ec763707d36a9f3f1424376518fe42c0d3a30b7e91c5cc02f313cd7f3465d0c6b13aad5ca9653ad041036d4bcbb0c56947fbe5472a1783de5fd3808f8ccb58fe96e0bd2467e77fa0ef9eaf4e68e4041bdf297d18f02348cdd1c2e3cf92678195a251af879657375826dd45967801c87fa2151b176a52e5774fca3e68ce9f1330de73cbacbd1f2a9feea8764a836fd93d98a7076c200c2085e4d2d881c8dcd57a502f59bc64a6201e50e78c930f95fffcc9c888409abac39f95c3fa4309879018026ea0de1354e17d5382cd98a6dd02643e5ee8bb61c2946c6c83ecd618060cb5fc16e93b5391346300618282cfaea91efe526d04fc8e5c9570fbf6617dc311f744107cfaabc5e3785d6df2781370bdd2118d6044f384e2c1a913600cc1246786e445a145a458b465758c67a3f88c072780f609a2cf0ef09920b471016b93d50be49ca041c4b370d24da7272a08684cc65274af4716934cc5dcc472650377252e4afcc018963cdf66efa77b36cb6d57578ff19b5a537bbfece52cab6311381d96204f4af29f5cc8ca6272abefc803ef813f5416040b2d11b644d564201e3e86ec6e7c86f6697bf4a6aef2ff7c8793dbec6b85666dc8130acd00a6e5c7b1f027d73a6bbc4d7b022ca1dc0dbf069083e4411b6bd3bc119472d62186757e53b8ca008e04341e5d573663f2ad32b46c3dd22855f0a71a6f18107cb05f5e6d8bfd350e712f359298e4da95fbb9a1afa2276d4823fb28ae6907ad64b418e6bee12831aaecd409d1b310e2dffc19541ebaab7c4a8c75a0a187ca113935995696dd9f867c05dbf602364214e8ffb5932a3c30c9d59944551a51c704a13ccaf62008cbfc2bc62c454ea9e43a590b75a6fbb11e1a925051904250674e44cf930d81e9145b6037af3edc955d1ad92941d4b8a1dc3829bb8498400b12b6ccf9dce5e409e36ac25f4d28d582157d116001678a92d4eb41e2c5b73d0a3106debf8dc46fee9ef2fa46ec4d60f6742aa8b89da5980e6dfa82cbfd3361d62a04252b8ef34a22afbbaff475f3a67be2eb4739fdd70b9c0f2f96801255d3f667794644c7ba9e2d7c8d8a72d163ce98c78696ec09440ac522502209ee65bcf24e2cec12206093956f3033c7e6e501d68bc43cd8aa36be0f0e26d16c77ab435349e7bd9e822f50e4ee6b51fb9ec067bb966de205c6f34e043c7948b3976e91a0bf7061efd36dfea163088c17e03e27d150492f7c46c4e32c121132e635f8cd611890810dfd63c45535cd8e2193a56aa0221fcc4413f1a50ef9b5350b398f201fbb0fc501e659cb87cc83fc24a13e57af72b9606513c2bb325a2ff92c8a7cb26012b5d4d278963abf90f28125f1511786a9dd94e8307f4e209b4527501207aaaf844a578899643a86e9e1c32e6b26d1ad305410d4516f856126c06780b87731917995f52c3309f3623f196a46f704aead6de67b315edb897c616760c364166e90595f57c52dce8cdefa631f767d35d60cca5a7e083e0b81f9b604bb21fe2a8a338d70245b6ffb2e7f82858ac5e5ff7055ae7ac060db4796618c5d1fa26ffcac027b9005f7e1d800cf3f47523b17aba40d810cea411cd7f03a4a3c354f9dd4fd868c87a29f6bad2b559a731fe0fc809cbeaad9a3b3e902b60f5a67a52f71faa546281ca25ef5c1d699f9cf9bbd7ac87def93a994bf2a12116523a6164ad3b5cbcbb819ae39675d2a24c5256cd97ac97229a344646cc74d28c60dc331a9ac4e979ba2446d3aa9c94f7d673b3a3ce5cda0f34271bcc3a9fc24b980849d53e20d324050658868a34d6c2c45d9aeefa11a32d5d8fa44cab6662cc7e4b302505f3ac4422846a6cb3e31a9bac9c96ff998f84e57cda5a38bd7d56976a1160aa9091d742794ae706c60bc2fae5ad22662b0b11d028a3b820ef58f02511f765b65cafe6b79fb648d52f23726905fbb7b33d38cc65d75838859f6dd20ddc79a9d8c8924d1bfc531a685ddeab6e9424d1573e8d071f1f7475e76c407eba4ff4c79272ed8cd8259dd630e071d053f6a509d2ad7c64844794dab6d45558a2d3052963da062874921306bf45a183e1d3f8cba6088b670e0615e1844630f2600c3759ed6c90a289c84f2673fbd22870829c8151ee2e7144d18424d05047ce6a61e7d36fa9018d803eaeafef81785088a90ce566bcfa35a1107c1f1b812e5f3a6ab3208b2ddd3be07bbe1d9265287eb2adc64245037306ab695a3ac6374927488d15cbc059884032f609fa0d155715571755327d400d76dc429af281012cb92d5f7c2fafcaa73ce043fecfa01088b70e5c46208ff13e08bc12dae0ac6d4d87514872d699ef9e8480dc1908fbf531c64102f5b6fd95893eb370869fd8ea20044cde865b1f36e2b99d24e5208121e6e597a1f04036bb738b6ad22a5a76f648d288882327b03f183e8db4ffb0d0351c776a9fd276dbc191613ace32db07102c548cebd5c6fd76b3a5db12a534599d470e3272f8a55d464762bbbb3c8c19c64f1cd2601aa3476c29622db492259dc8fb1c97c1ff661bc82a02662fa3d82f97358de19b6e573e8e0e05ce11230f0d46bd1502e33323c7b59dc2b2920559a8f1544a42e44d5d336ab5f364cef45b38a4e1a9fc7d5088c19d37262998dd8b26633fb46ed1342fd670d5dd6a247284a0522d2dfcf6c3efa9fd7a9f439a98e7187b6c6edde8bf49883ed20646e82a25c4dcd4237cc609d2d144ccb0991dd3e80f984edc18a15b24d9332f10935077b916b39b2d04818edce801c1ec82a8fb286c487b8e9781746c49dc618ec81407b93664c69d1cafef684ec2eeb5a8b29b02cf1a56f8e30fb76a4ac90dd37d994690746f0b163db797ff85f6a79e73c11011a87c859d73b270b95c578880fc66b0f98140cd0ae02f152d1e1b81296c6b16df78ed7bfed2005cd41f266609ecf2e33ecd7870fd9c7ce35b87a00fc8fb06fbb6b0fbae9f767fb834d3a42ae0c7c439eab974bb60db279f155332a80fb82b5b52010591f1e9973f764a6f4ba815513187e5c3f0d714c584e4f131ee602c5ea21bb9c9ca98a3dd4ef2c3c65cc24e306690d2f4b5c2e1cd4134f22c576cb0075c8e7b86bce62db86344d067b2c1dad8558ff1757ea6baa560afc6905787fbbc0724a6eaed8cffbf18e700c1f22953bf6aefc1d4b00517f44f9ffefc733457f32e68cc54d0df8267dc43d553af5b416c233ae480fe6082207a9ffbdf4f046d233ee56c630b606e392a05be9b2eea1c552afbaa08ce4b71b08e2a5d972f7a93f2b5050773f1a20bb98e873d0715585d00deacb2da84286f3ae6b994d2b90974b82d521e263836f35f7652c125d7287c05aab87f84c479e31600e822105033880a145710f82371ad917df2fb8608cd01ca3bc9608613c275d8891085bea97b365ee68ea04857f4a2f601e23ca61ec876c4fe3a165cd6948008dbdd405c1953182d20632cb55a327c03be9b14e47dbd539c6e950187a162aa1d75a8e267245d960b6e6f16cd8ebd8130e09814efc9fe2096f964a284e8bf5c8ce30dec7e4efd48600d1d0edf89f86b042473ad16780d567b4b1389d330fd0fdda066aef01db497c1a8f76589c065820406984e070c8d6d8fc04c18010ece3c963a6dda6b05161cb6ae88db4ac6977ea6f370982ffbd0fe6b0558ed8cc6857b3d1d6ddf4d99844fa5aa4ba0a0f100a96367b6ebffca9a518366d46ad51cc54448c5f12e264f91991508aa761af433aadfffb5e9f4fd2c3f6f714920786600102fc0926773abc0819b663fcc1734a2fb631807f2be1818f095b111aef536b8777899bbebc41293b19f3f76033436c103933d2796a98fd31d8cb2e856ca0370e2b9cdf85b76287d7196f0e7cbd07f305be6fb9f5655d90d2ecad317c87550abda59b9b2072862007a19270f86aa72538ce4cfd9b2219809acb6ae3a6475b2dbc6df0983af5933af13ac4e47b3f0c4bcef0326512abb216b0ff6b0cacb498e8340b019e7946731ebd6b6d34ad461cacf2ad89bb0308129a3d10177435d6f5824d073875856f0c1494bdf5263886c092ca8cbac5153f1f546884d5e2eab65a452eeafce4077848639eb7c483c107e1437e152b4cf15ac38b5ae50f20725bb077003cb4b4a7670d5502e14212f3d2650837d045173e60e4893aba2cf477cddd61ea83caad0c464530e9c3d89d73ee36291d4670f0a55a6c94318c94279e15cb4b1549a597df1cd73d7ae6eceaec633aee57fe159dce4f42f567e2ae81913a607ca815ad3ac7f2abc4ded1e8c3043a5b9f0e809ae760474ef40344e4c9f844863ecc704a5e6dcfa90d3c0c32ee637a7f8369556996044b78d82e3a9dc97a3c24d7a9e1e4ca78bbb95fbd203433b22b90e39104e8726161a8eb0f4d4247c029229066f0e34791bfc3048994545c99557507ad1581422094c673cf04390c721367b12c25af9d60e1af42c7f0fc2fbf011637e6119bd0e8e9bab995e8ebe03702dd822209b0948c2b65629fbd9376cd375bbb647f9de2626a6c058a80c08ab7ff6b4b71234ff3bea5cdab3a8181f76afd2cda4ee7f141351ec59fd55421d49b11f95340fbf2849d56d067c0c72d7b3f5d71deccd1feb50a0dabcea0ec74848b4170e3b81a030dd24654dc591401c9f45e120d08c62c06894007db10d122632e96b6430107e857047d42542bf264ab3008f7b0274de3fb59bec20e4f8a94392d18b4bb424a0b2adc04831561e8bee79b64090e54ef8b5d238fc2af859f31ce2fcf5293a36cd24e02e2fd67217f7846de792e71b5338cf48ebcf106d99860e9ddc479124df4a78a1d1f9a94933df890a1504f1f72a14f88434c365b74fe8b54dffe0f81686af1a7d5c441e3e1ada78d8bef5561b4c13ae1e94778f57e5919d5dc85fd281b57176ed4d7da9b3054ed044560267fa31cb6c629b6a11d1e2f72357d622c4f8f4283a4bf634c05abbc33bf77abacc166392c01aba0981b7c0afe3b699c833eecb39c14416d8169776cdf84c8d6cd6f26a00258160d4537c17124b1483be93c5932ca8500ff600fbfec5b1ce0eb73d00adaa294130590b915ed4f5dc4484893fe4875bea420d13ea9c50d4f68f1852d3b6e727d499161e89f05e40983c98789047c0588d6d9bc3f5d7e5fe408f1ebcee0e4dcda61b8a00d88414c7b2dc98e679357e2ab3e31095b049fb8a567f28dfb22c5467502833570f729ef7c6b4d4575d26075ef8330a1d7c6b07f582efc53fc29981a14d5f80859154635d3e55f94faea1f241c4dde6afeca3a1ec6041725181ce5bf80812202100a1f874a42066340031c58f946444d1739c5fcb7924ceb9923359d81af0609dcfd3c4ba72a4b9a8d43e07a4f146932693ad781f380a28dc5680e1cde07ae06071626ebb34734212ad5f2f0e65f55023df6fa15417522f3e510fba4613021e2d77f64cd363ecce05fdfda2486d011a3db95b5206a19d3054046819dd0d36783955d7e5bf8ba18bf738a217cf70ea4ff8b3e900a3715bdac20302a6ff49789d388dbfdfbc06122a7b0fd4e6200c216fd9519143b6d11e8cecbf67d8295258eb9fa1e681757dbf17e5c61e93d6b947084404fc81cd7b45d548ac1023f7b247e1c3151471686d18d2ec0dd7a75fe2bb97ed60835133ca72327a5b9420c6d3d61e6769a236013ebff9d249a8a728230f9d29d6be1896392422d6405c452341840fe1121825dc6d04eb5cfbfa09bbe4a3868dea156e7151bc3500fce107a985c224c4a0fef756929825c0b75455a7c227f28e0d11c931aedad77ed3bafea61b210b8698cef10c29da47c1ee400168260d5faed24b9f73aae088a4775280c57c1112ab5bf0c969bd5bafc5133593899ab43c64bc2b7793d07dc7065a3034742322d8a77d1cd6fba78cfc4ec8bd82689abd07443d29e83ea9f32138feec902e9ac6cc0f8eaba03e72fe8bc371306491a0984ec1d7df47c0a1f115a0d7e01a715d8d7b47d305cbaeca20fcc7af46a09146d671621ea43cc652e822d267a339d8e5d754f51ce3afd90784bdcfc558dcf3e7e82da974212dac3758c74240ae84c1ce54f77bbeadd329a5aa5d4065ff50161e5dc21c6acea10ec9b37174d58a61c87156b1502adcbc3d3ef239ce0392c09454a7dd1f75152d5a7498bffea89f8759697d3126f3e8e1603e0d01cd20dba4db2536ed47258d291be27911242c863bf13138f544ac5ae95f2d4b13d2400253770abb6107feaf2adf7dc50399f3b7162c430a5c5db6cb1a66774d0e51d3cf72d46f85d6f662f3b8f1b11d05d470aa9c671971f4c695921b32b6834fd06e9b799fee36cd86e4e34a0f26d1a64835e9353e4f004d03eb485230757e56e272eeee25e13ea32e0706648439935389b5fb872e4e25d3ba0a6665ec0e9ec1ec83423702f31df6704bc57f0d83c29bfd7349f8938153174d8574bcc21c750f73123deab38e4545e225b91fe77ffffe37f06d102a93288632deebcd5f19919e0aa22a8fb43d54fff82749cdce98abe8adafcd443ffe16bf0e99341e1f7064fc07a5907c816abdb326c30fef0f5846e9e313f32b602c9e00352706358fcb7fb81eaf1857a7b0ffddf27b741a465961806ccf672c17993f284b2aaa9a2c854250a4212aa7937a9bfeefc30ec5f0067c3aaf34a1dce2ee6a65b4f6c9c272384d343cae3fd2d1520284733c388888da07772ee63ba44e76b067072dcc24fd5ef0f14c98d06ffdc1d40d3149a9c89d5e83c460468d18b6dca19ab6222a683a53ee06589374d5553471078e6dab0c9a0e81b0e7f81eb0b88aae7f56967cd295d194f1e500a5b9844479f1ff3ae4db0b5471bb2a5d88f2bffb37934cdd3c1abc3276227672eb73175c4f6b1813cfaa6deae451abf9245569c8ed652d78d096fa011236816cae986ae671b14d9ac3f13e1c59f2f14da95f125e30635cfbe2ddfbb7e9acaa4077a01b9d818324327a45f873334d7eed60865635912c7fd8db561de17ce335b0cf1095dbef5f106d5b2f298a109fb93ae251a1e9901eea8232a5fcf84c78c8102d60561c1b83b6cddf035dcb628844c8b74781e4bdb941aa71440576c8dbe5f10b25f8e8a6bf7bb67e68e1b1b985861957ee82a16a9a09942f96c3e7829b03d5f0b7eacc1150d3c9d1d661c7761611af3cad00ca272fa6e1c634b4c4fa24963166cca830ebf6437a51c26a8738c85bfcee1998a983e8ae15cd94549990073185e5aabda1770e6f4a76b3487b71fae974d49ac6da01538392be4c2fc004b15a55f5f897a87307abacc93fa81ea25c3eb998c6f7c6100ecc0b00b2a2e2a8c16524002cc2c040708d33b1bde5db4a3ac03d9314c8184068ebc14d6e5a7bfcb60672accdcb636fe79851d8b4ae5bfa3512736c1aa42b03006767ecd5b2f680eda2c444322e0c71cb3199a6ca5dfb02c9a9fd8c3f1898e853c361779f48ecd5f6ce9b7f104745c6a9fd7d945571432476fb2e6bf881cc60d18440661198b95c5fee5aa5eeb38a0ee2506039ec84cebfbb8aa883ed9c3ffd083e7740d30f068497869461040f638b22eef3fff604f83505dcde8c74b48e1d763688906a383f0f1c2bdb2916974cfbea0dbb6f187e4a34e46642be246721629a20f6cd3d80dd2c7c5291769d07b0b18651090fba5d5f3fe5bb67c17320843ce262446fc3955b9d367f59d1edbd294ca63d7f4a622e81a67850d01ef78d313cfd9ef3e0a2c254b1c91686b3af44313dc84770a7966e6c191aaafe2f17e9b2b33a1b87d841b4330aa2ccbaa4582943054ae3afbfcd9968f85b3e548a6ad27360268c62bf26d7811851e6681c5ed8e923ccb66efb7e3c22d4a89f75b946d41da4415626fdc8a8c96b6518119449cf9e29bc2440d33ed3042e8122d424527afbf0290d471cbda476644ab649a49f99dc77a7b1c7ef75da9776838cf2641413a8e44c1645a47c5712a3716572b5d6b41eae0de366a8b9df574d1e2242e0e25aaef10905a52d6b3d1899779a1f4075aaff2d5d3d9f87813dce02bf875833639c78970e5fd80020c302c6dbb8b1ecf2ead8862424e50452926637f610a4c41e759056ba8960d523856bac0c65dd13d5004548d13de9b7a469aa6d4072bb2b596270a09c16d204e9f0bdc99815f34da267cfd602ece01a0d1025132d120dd1cadfa415318cae27fa9173affd4d8702d19dc2ce37b69a93e34240ca1a730f4fd969a525095f57b6cbf417bfaa712acbe92ee881de3f6bcdcd6c87d2a71a51fe1b8cfe4092135129e47524892e2531116f778ba164cbc61021fb84fd417c5884f7b619f84a2d4cf9bab1348d06ee4c7bcb14369d6a004c13977bb28a882d954cf47172dcb0218dbed514924bb310df53829173e66c51603084698b1ac9828aee984ba33e6274a5e1ba3bf835c1415c413c6bbe1cda53a51f8f41891ea42fcbc269a125cdbfbb17fae073c0eb9ff465bd4eff9f91326b8d090e903706a699ba60df2e74db46497672de7876ddcdbe6e3030e972e4132d7aa588e21f833f34e9527f201b1794c423e20aa6947cd8e3e83298a5e2a5db0e107d84939cf4cca5db1fa03282e309afb2b10b8aa4492029664cdcb169272871c0e9983159dc0d41021108e236ce3360a568479120d351d36ad7739871185a1d1e822a57b0b94fbaf0ef1f9bb149907b7e80455684abec96587af3c784da0e547bcfb1534c0d225819f23adb8ce5bf74a0918b476a233ed6c1afe3cb3eeca3bc8b3ad3d0865823ccffd3013e24130ed0ae049fe02be9e71938deba1fe9d0c8b9af5bf84bea2aa27e14fa092001620d241961e9bd546063c2208ffd322026dbd06a9b951201e54ceffbef991dcf5338c355220f3b7e1743861b5c03ae7c4f5ba54f8240ef48287197172c57a3c8472042e3dd56e7037ef4c98bab83e148bac68cc09862203754cf07e928bb4e96ee422767fc775c7f17f600e3f6f4873019bb0b6056af515a0aa3b7046d4a7ab5991cf543f7e6e85b72c5d0c6d6cbecaccc97a591355eff2aba9e28db827bb49ee82f10fa581c37230ff29da6b370ae2943eaffe5cd178613d51cd1e0d0c588dd4be71f0db58da5605ffadc062589283020335ed0765f82bfeabe56a700be63db34d383f068b1df9de35d1067a57c074bd1ff66e3d9ad71898be10bb07adcd2235382d4451a2f22361a77ef3dabdfb7f6e9ad9c926f67df0b0923757fa79750400863746e226c39b395f9ad0ab12aa6abd7dc545e903527bf130438772f847abbc3f408fe19ff72a0c650ee514dc37fe51cfa42baf49bf81009f1a9397b0a9de126c2f657793f69883bfc37a3ea50903d3985dc39f4f2ac988e7a6c3902b0467a914ec11cc8c28ad4577a0d751f48841eae0d855e29dfc1c2f11cd5f86f1c10c2b3f5eda0711f530fb958c4474521c803fb0fd299fbb9e429d2479aea08846963df56f0a50abc5eb4c1f7108cf462d877a0fb487ff3276037b2891f9077afdcc893f06e8d1e000a4e11f366c8b58231f4206e5b62a88ee277126fd88e24f4c78b7240bbbaf3b0e24619cc3b8d01066103f9c78ff47486d752624a5a35a8d9d606fad67cc15415733759f0034c5f75e221ad955aa7ef75ab6432d719297be574d58e10063297c4498c52fd5279394741c7bc564fff91f1fb26f46499cc069e2081ac8bfc713733b1df8542adb616f0ec809698e45dd4723315379150bfd17a6565e6a8c42fcaea588b616e796581196ec6dccb9c655f8cefb97cdbd25784f0b02ccd0501a0cb6eba2a97ef4a1a00172514ff6cec886b988d7e24b2933569979d20b01f1986a1273337793394460c70cbf55f0b6949b12b98fdcf9417cc27d5890c40559043f4aa703c85e9ec6c1eccafe2ac15772ba8bc9e92ee1ee4ae28410029ee56ea6b2e7eed945e50c71eaf716d574719ba90cad21ae800b16e3de3509f142a81ac5ec70af7f9532698b0370570ddc096983b8ff27a6797da290df19ab24575644ab146d54bb614d9f5d36e0f46e0990a846e60a4498c2417b990db65f6586f8d49e53664456513c942fa9ce57c0a40e423bc054e04d035f87468f978b7a7794b1e7d1e4e7180c09324984c2e7cb548c1eaa6b67648ee3ddb0df8e41992cd135c5ceb56ea5c83bbc5ff2f044 +MD = c8e13d3b1210a5df970fd5e7cb3c1e5f1a5d195f8d54bcc655518497 + +Len = 78640 +Msg = 497024822b551609bf5ef1d582e04685a420d62517164a0ae67024fcc8daf69bf57dd1fb38c501924568f7544ea4871cd1c8544eb4f588ba9326c8c4596e67c20d81d9a6ef766bddc4cb32776eaa4187bf6a1fcd8f5979920cb913d4520804a33c8523cb79efbdb3e29089850a7add8f171121ead1c98559f931ef73dc313705288f97b2fdb85ddc47bee3c84c9dc1fc81c241eca2ce14d6019743eb1f6f68af79aa1da2a45ab5209c5d2a865a9a5796a487671d29ef8ed2cdf2f782424dfd6ad8db9de5965c2b47897645085cf9062529677bc38fb45b15054af2816d505ffeed2cffc1fa462918b50f1c967b433570b76b6627fba5e36750a71e30ca02f6335fa42b7ff8a1165cc9339777deff4e40f7990e91964b8e90561262d67eea2ad1d64b0a66baf45adb6ce79ef5afb5b85d91fb5c48882dc557c092a6bcb490649ffc2a82c065c75d5d4735195613eddb8f2c993896f8d3ee863630d22b927d0a6676487cd324a386aa0224f0e334301f9e70798bc10ec673e35ff3cf69403886eeefaee1e91d0e3f8944bc0be43a05ec5107a53b12f48dba37e4e383bee7493eff0d6297487892f0c4b50652a14df5aa71962532d1cfb02d496c08d774af399c61786e88385eb7ff21fe09ae619387c1c6c8ff5646cab832e3a06bb3d2bf8f06dbd9d99a03f704d569c7ce056e37439918423d91b90a2c33cb2813001f40d3e637d8acb7f06a01da63b75b410e5fb19a2fafe7ca71ba9497caab08a4a4598ea33b1ceec646e03676d977ba488a345a2dd3b503e9b70079c6a8d25389a93347a5b04ea7af4e802c1291aff3042addc5b8cbfc9bd5d30461282d44fb9575f586545d15e05a50736a1455060c5b35827aa5e02db6780defd72521a908b252c8d3180c1aa0af93e078e6eb240f37f54d025adaf05db9ace960254bab83c786d4b7598305ef9661f0dfee1bb2037fb064e44181ec9780fa19869074f073bc5a40b97f8b7dd5f700ca2696af58f11bafefa8c09cca6cb53da8d0ce6420e079163562f2ec2a5bbab998d5456dbde0f23a17d741f531e441bebec647e3e4d2e502da381a6eb588c7d47f75621f8ad8ee9803f82b52ca080ac581f163b9e452ea6658c560d9c6650699a98d578b66e2f613dd93e67c3ddff99a1cd88badc7676f89d6912af404f85f503ea58b7afa04f3f1ca30da3b3171f684b5042589351a5db47d22e188184bbb40654566b3ee48cb7bf4586f564fc7eacc75fb9b13d8729a2f7502ee5da96600b247f65000e9b667f983920d973ee8bbbb8347531455770f42e5b9b73b604f18ee0c3fb1279355afb39f671cc4a6dc5397086fb7535731a435f5cda6eae510e93cdba9f1f1952d8bf06e5e04a631ac98a82bfc2d9a84a9424fcfc82231dfb15de4dcbb78269746e4fa1bff2d05855f743815751faf84e6cfd9983292daf7385b2d39fdaf8e40a9a017ccd2ffa94afdce8ded62f45b00f0341b7b9160abd4afca6117f7fcf0395da990aa60e359298f8df0dc4c1466a0d05a5d9e6ff36d1f1d94c6a132c816296ae5addc303fdfc91c9ba90abae7980b8d28e72953b3e77f8ba0a4fc357cc6b9d93eb58aca7c01d4acdf009e34d5b9ea2f850045c608e39d00d64553887ec991b19bf2deb70388ef48413dc0424690e4bf5bf21a4f5a2720841ef0ccb438e758fae3aafe7e3b3bc4f6a9a79a6da2e6a2439103cf76117db11f60ec8f4010e7b7bc002612a78be4fbc0ff87513c5183cbc60f7c8cc395abf8da8482c5b470935500d9ae43bb5d493cae2b251038bb2f084dbda57bbf4f799cbc72fa9699bfb1dbcd5689b84118342ec716c9fde748b201e283c5c1f1a5b146ce139c2975650af02c5f019bc1236b7913a6bb40d361d35d8c492589e100199d174dafa7d3ca663d24dc5c11c3e8b6c69ac44202846c5bc554f70ef918c97b4a9f097d3738568d69bdb5e344d0cedfbd6559a86b81d313e04075c6391d669df46e304c022e71461dffd3de5c6f3dac057b4b33a252fcc0575bab9572784147448da865303c835a01f31c9580299de747e4842cd07f512dd1aa81c5ccb2c043e1035b10e8ebf492bca0794fd98557562aa9eadb1c903821f737e09d6e524d5875d82f9552c12cb4f70fd2568f0bd1c257d16787af0e1b637109ae6481e04f4da5140e3b97489388594610f0c94374f27564e279b08161bce628d5632ce52eeb1bc0df4bdf0891d88b4f1966afb6a8b02d6b42fa486f72f4fe9d3be298e851fa7fe48a0d51888f6a3432d7006bebd6c227ec71509f62b6d3626fca28ec7122427886f6c91650f307fdf53105226a64f10af256c3dce19521baa6687f5108088aafb00dc755e827778ea20ebfffbcbc057e82d99d287577a5ad4bff2def366b9ccc69b64e37d991828e405874276844c62da6e224aaa4c428e464767bed82b33e76bad9a8e4a99bf0a6d8f66dc5f666fcbc6559a28bf9e47207fcb5b17475493955a95f1b83e3ac887d71d0f2ffef896ed6c8265df2f93f4bbd18a417ab95935412412ef03d0c2b13bc13ce4afdda14e521d5329e082e3d7baec22bf5bb6dfa5955872f6f39ae825a0ac6d8bfe83f7129459663acf41f47c983013292cb82e70ec5854adfa05018221093d697e8a60702eb13a2d1df54c3fee4dea137045ec03d0b42688a997b55367581b01b24983e38bb53d853f1561be2785f602c8e88eeaccfc66fb64db6a15de2994e93c59c7e925c5eeb7b51acb53de88f57b99088da24b81a49ace389645effe29847f23b2fd9773cc59128defbd7db736f2632e7eb6c6e45dcb4847c06027364777ed4fcb9d5b3f64cdd9d755378fa158eba9e2c884e9a4f12155818ef11e727d1829367854eb9926aa6d9f827e7ed7c9dbef9df1b90e441d11986e48853023490995604f90c301b063604efdeed5bb0857a6e880bfbf32203063769378f6d929a0c455c7ed6c19607d345e2e052edba2c3622b0c05770fa8f25922d658fcf49d9238af67d76140d57c6c45a95de4aa17c3a40dea26c02d15dbec0ba7b19d16233254a5a5cb2d087dd57aadf65581a6d5ccdee9b190152b05519e898dff61be4925cb01185539d0d81cd1ff7b88a0726b339546e8de0079e5f7d334dfbee54d7dd0ee1a25e2125a62b724a2cf63ab7d56bc49cdf66cfcaa46334c96336c82443fc84089551e30d5ac38c54058731d2826bb7eb760c9743c94984d162f74e3531d6064b73c46300313164640ad33701339b5a6cbce7001915f9b673d0a8462ca855dbd2c32167a4345d42a3c44314ecf2e3f444385fd1f5905b11d937b079b4b1604dc60dcfb8a16a306d39ba3d8f3ac62bcf9e73ddd47e4358df281e77af7353dfa24fda361ea0dc902f4d742a7193b85b31a0f3c7cf5d35d6668b0e65af1196bb2394b0be60499066ce077b7382a1ce5b637242878b396ebef0288ee2433782da18be1acf4843909b9390567e8a091213ad3de883d0bbf7f9c3272656318d2025c9f49dd19c37e415c6108db551768c6c56296b25658bd76e27b15e2942ba77847d5fc32c25cc92beafaea97f9e8e434ca85d55d41450160466eebfc33e678fe07e271348ababa47d969331433bf93f9de9022df7a3b2bda5c705d08ced3b711f1273158ef67b2139c2e7ad6bee608845623f7cf8db5bd338911e19ed17df242b826b5264cde512dc7cd1a65e806b272e5b3dc93e84f060a40d63234c83fab0ea16395133f9917e4d0c79a384b9c1233e1b239c31661c6dd383fa7512fa351e4615029a6443266d74ba082c45600b845fec1a7d39488500ac3a0b98a844387526c9f1b65d704de839cea6c9093ff05278144af5bef4d324177cbf127429aabd71782b2c884badf5848f7a03381c199670dcda8b2830afdefc8f3d6de07133ff116bdb844c9bef9f3d46ad613ac02d58318cf3c8dfc5c13843bcae3053e37c42edea27471027baeb4c3b666c77f3d59ea26cbc334b7bb039d54b3ae435482d8eed3c37fc3eb8b7e399b6ceaa587cb972abc45e54d51924e998840810ed68eeebf9ab342b3d168d8e0dff0da5432580db34db00b3e369c75175af413ce50b6562f97d465d7509e5f48e5d4ae5a1b4d3e225facbd9df313e7854130cf184f93dfad5fb94184e59671e051aaef0dbf2598d6669e74d2f3a34671ef992b532f91cbc756d47e730cdba135b7c605057a7bbe6e0707b973d4c4f24b9a9fb1357d5abaec21b864f832f87db76cc888d7f9ba0f57957af406f2f37b90f6b6e905b5391daa24c7adaaf45757f4051502dba95b1c11a65accf2faa952d078713b6a73c7648fe4a4b0f1cd82d06a055deba6f5f9652ace39acce48611898844130ca15704ffbf5b207632af56787d1e5abc08bff6b01519a1bff58b52d47cec961ab26ee107cbc821985a9499dec1f5edb9ec7e79e43f4fe731cc810116cac5c3694247b5680cd978fcfa4d9e3f5322bf3b8364c8f510cd97aad030c5585a18c380baac292a69d54a2b7ca30ca31bedf7c935388beb72dad7b0696047a1142cbee78063e456c906c2ab465e8c12019ebdec6ac469ce4cc0cfcdffd82ff9e04bdb27fe348ff416b20506c246c595ed7c3b2a8ace0ba785c5a988fa612468a6bb42c79be9d20a37223ec356226033c7d0960efd1f197d07328a69c3c3cef74ec51c4fbe4854a2149e936b6cbc04f577e2f91d2b7f3a59b94f9cf9c0c6d6adc0b19148d11bbec3956d2c856bda5ae1e5fa8ae17db51642836307bf5a31e493e4c7c8393b28b776a2d93299bb450902fa6071e1598b56404db8f344f9ce9fafa24feaaa6438e8c22328cd30c4c5ba5d9c5bd7a528c7a25bff94870e0663b00be3901e23b412f9af00a324d1ed2215fcb435e4b65332a19c8240eba7e7b9beaf8dd38d2d9380914521926004a023c1e62b34bf9b4094fc0abc044897069872a18a605e4f6948588d6e3da85145916723e7a191dc59b55bae9627c664cac874ebc07fba129e33f88ed0eb25414234aebcd2c48102055c648ef8f38c989a106b951978c9fd9a0916502de6ff5b00d43fb8d3e4b894ab53c2b4cbaec3bae03900a57c92b298c5925ddc6f745d27e739c11fd14a5d1ab5601b28f5a19253030cda25d0169e6b889572397cde672e602addf9b63f991c8a4c18f0601422ea6b4ea21cff4cb4ff49dc006f3e6c47f7d1713b4f6909942392de6016f24e9a0780caff93f07c1ddb712dad879b65220ba3d48228d2f075b635e09ca295992333a9479a918bee0087695121887d1323f03f1c5b8dd93e655edb18739a303be5f4518c1a1eb8ea868c9810057acbbc6f300b116d8566398ba2ec508e08ab7d07d5dd6228425fb7d771653101666da93153717a6118612b100ad04e94f3eea7b25bb6916c06689e1abe3a7ebc534a228fdfd820de4eb25a1b1eefdb2e64e0010d1044e18d71bbe778fc7ebddf494c6eb15ea8cc8d30410fd567b2be04626bd3417bef1a348c41da18b298b711505ad7c057484415c5f691656c7fc1bdf5766475242003085ee0be2368f234fb715ca3e45322502016ba2af4b5bfaa0125eafdd2943d65b2ef81ddc0a6f3fc45b33b1b44d99dba53297320aacbdb427afbade68052b008d9470d7d18f503d6961fdd870971214958080bbcae353951ce7ea867a6e6dfb4266f6ae752dc8a8b96bb2b2f5aa316c4d7bb6846297b439fa5b7c3c86cd93431406e826397e4f0e4ee910d5a60f8e5f477487406422660f3a8ace750fbb21546d14c3b380f939ea646a96c5243f7f4a1e1b9154322bdf7167e67fa487bf9ecbd7e117fb0e174fa9c45092e5d2a29ac92bd163547f0c872d1d0f0e5f81437205cf1c63511360c6d8d94bb3dc43d147591b265bb58d5d038ea464d91a8ecf219ecd27345a435e56040dbc77fcfa642b86468b08fbff95cb1298788e5a02eb53f34c81e96b10786397ec133dec58a3bdbd488fe99c483f445583ca9c8270005fafe7cd11280d377620fee0941f0148548a9ba58c1ae9c205c3d0cb624878a6cb2109693a058c24141bb0b518f9669aa65aba5c5efc76b695ea2a0b9e006f571cf33bd6d2883fc6b404ac011b200b4329ca2f24d0b551956b34d9fb9e4ed699db92f99659347a87dc583b45391761ba3545548f8fda1cd70c306b2bf18840d76d8ccd386c7edeeff3a2f901e143fc687f48d50cfadf3b03df79781d264120a8695d213d5adbcf77a0616fb7b23a5de65e612b2d90393ea47b5c7b3fab0e188555608005c2dfeeb7691009e70a6ee8bc691ac151ee8c8a216665df13fe437ae698437432230f9f27943b520088563f4315d2321a742db00307322e2aae85da44c8827842f9cf7320d84fc2b48a84c422eb23e7f7bfb142d1f42de2f42a49b9386c8a06a8c5b3ed6b9bc9f643af8f19c45f8c6d7a2f9bb516b3d587f100038a39dae6a9d4053160406536475e55b992bff9784d0252618939acb5a7b1ae57efb1ba14cc6536ec9e47ab1140651ba8e17e3f73d130b68731c3653aacb6a39b3c48808108dce929ea09f3e77be87fe16877a81bc485ca91314c73f111608e620256a4d7c99b8a9dc5dfd6354468e0d7aa34a9bc81621d041a2d3f65704fad20d474bd75993199acc461a8674456ed10295ddae282561c545eee4e0443e4ae7c151b20e6e22f94db6808011a0643031f582bb23a51e247067218165a06c000b866c285a85ef61aae236b76a9e4bdb149d956a6007a972b9ef6333ed32362228a2c0342364a15899978e45fb36a1776440f374cf166d548824db80e0c342ba255e745ed1d4e1e7021eb0b42a320f0d0827c761d79913d1c54fb2f3a61b3bcfea02b12ecc9d5715cdbfc58c61593ca3e89a37b7df5a42f258b80f11a702c76a5fd69e2d7d87aaeae2c2f5530772d144ece06b00511fa3be29a71b644c408e926c2264e24a5a836e296f6793834675f5fc438cc394b1de3d2064fe73fb9c394ff92d2ad59cdd89aa8b0e44d33f9dd1c00009c28910d89a772636dfc61de070a9ee40198fdcd965a5eee6b39ca23e8cace07b34d92d5b7f752167e6e61bd2daa933a359977017be673c40dd7514f34fc184e10b3b5304363efb3d3d5a5b3b2056b09e1175c25c3df95b64eae6fd82c208d4836e37ea9967da9a0109aa47e2eab94e7969b238738a62359a0177c6b48c88b9a886565ae3ba52e8fa755f4691dfd8f37b8ad53c234caab02a4ab1d551564a199a7b1f0baad5adcb72a600bf0ea7bd88ed9c6635332bdab65bee1b9321c754de9f741b66b663f32dafc7151c22eb70f617c6ee8b6cd1f92e77153e68eb88b0ee0099d0d1ce0a2cf5fafe26c49553f7234131f4a596e30fffc4e6a0bd794066330513c8b5bc72610b9b73bc1f2f865cf9b30500ed790c25138b8acbf891987c93f50a8b7b46449a57da505e95b82da75fb4699acadcf2415113294783fc38fcf81aa59f893528ddc0ffba958ef7efde3c8e854ba4883d6ea1a6e99ac482c7ed49ba0d8e4950c5343151dbe872b5750b7a87829ae44696b1eb8af54e25eaee586e1e6ae02161c4a68f19dbdfa9ba663500e88810f0dca514170873eb0cfe54444e8ee31b7b2ecc3bc3a0e2029bce6b65b6f9be333112119e0e688cf7e384a2b9d351a0c9be8186fcb52b17dab1b92ca284014d8e0fb28257b6f267fc11457fc0e4b1ca7152209af04d05a2ee514250f4524a5da6f382a248f8ee2d81fe09945f69f4899c9fd3af207475acc6e4338063081a1505434c1678bda3050f129888a04b6304d10d646d9210c25debd35263f88eba9d3269d689efeb5a182db5b9048b7046649804997e500a35dce48568a2bacc721eb5cbe9a1b66b5b8d634f36b027c1e5d079ec3c87624b165239613ce4b2ab89c017d34c06d426ee8d3948d5337c268771fd2d1333cebaade673d198d2e61149aadfe7c96151035b4038085f369288766fab2fe7279e3e41c1193b421360e7f8059571265a36e9e9cde7f79b6072cdf8f10c5a7f0edac11b0ab30903502816dff8c1d82c988ac2e15dce7e535a23df561fa617a58e882a84eacaa2a331448546acec84a3c455758b1776034dcbada4d82204cc1f4fb261c289e56eea5dbe1b74489ddd5385a0ea2f2466f0525c1906c522abe3b6fa5f4d1d0e8cd5a07d9ec2b3f55d4b0384720915ab26ab2ab56eec674625c2323798d8dfa1473f8c38ea6149dbb3367d69d3ba85d53f9e9d7db43d04b7f8d35bad64e94e6c9f147737acdf7f21270687dbcbe5c6ca382f735cf3e3e59daf7cf905cb69b4941bbc2922eb269df04123ea82637221b199c873fc34c5521fcf27d3e7d53e574444a06aa0b01deb6f8af56e07a249deb2ebd067027ecb9265e23bb2f98b5180a2a026025902acb1c789e5da12915245f7b5af1519daddef9870205ee6f48a76d6b9b7b8f6e9bb361fc659f84a36769da57fcc45e74fe3afe0ff3d9f5418d1830917bc551f6d32c3a0caba8e589b9b30e7d291c114e5c51b6419fc3dec000fed63409ba27b97f9a0711c7165e3c8aa44e334655049a46b7b4d45c4ff55b32afd0bbebe64b36ef915bc45e44594c38c22c130b0b92e95be17c20cfeae37390cfb2a198b666efa186aa6cb7df513962712aa4bdbc56abfa436ecf410123c9b9b2fe7d76c6f55443fe65938a33f0749655bc60f4c3ca62b0622f38763f30ae0c1e06b82c846105357d2fd13bde919e22d473c036ce689dfcd21fe4d5f1949106558dda106b446304676b9e535bcf06b661c35afa38abce5df7c35cd6c4ca2346fdd66bd90819fe1f61ab635728035ebfa23d89c5af2e645267bc18ff353bc53c6b82e5dcd75c5704d061c8bdcfd8f6bd0a44e51f7e4b0058965ca1b5af7417554315c0925575de43581126fdbfaa7f2d0e7be56e429c12fef8477fa0b00d6a2008f194a00f1124695d5c06ad7412488e23351348789c3ca421ef1b36c3625e3b21c8ca6c609899d54484f033898af35eed22e724acb5bdf697c60cee760d63f521edea7df686df15c23e7c366c8f002dc0a7f9894b933754ce6ebd3e34891bfc9de36d5b4d6644b94aeaf31ca998ef69424692fcc19f394d3a3ba4bc8b4fd6afda4bdb7ab1b16b2e430d0d5cad2321aff6716be5cb44344e6fdf6befd6dc248d7b89ad52dfe2d2e34f37237cf3d8374031daecdab52c98e6d3ac7b2ec3b89613f61f6b7a3484ec76c3dbbe042a02a0f898c58e421bb307950a354b1fce5fabe1ee8f9e673c123867557d65789c4cef07afe3d8c26b61e0e7780c6429535bc665a95cae9073154723589e9240e711821bcb9854c220c3c54ca1944ee1ff17861ddb09248c5608993951a1dd0376eafa9390657ad7d85315332b5f73b02e2d5b88d81788c171669f27d5499e26e853d90d72cdb369fe9a513959e07b3a7d07c725450a53c641a9c96d67d86e21a7c67de80753b6ff100429ddd1a9bde74831497196441e01335cb8886de0b58a21cd79c1b279ce0d992adf8f072db43d2c24630c40673008e2f9ece77bf51cd702d35d2908b2912c066912cb8eef06a2a56ba433c7e63253cd0bc728f687fc9eb772886c7e9078c0f4594421bd502dbe20817db6b143ad685dfce7bb820bed27bc159c2a78961d62cf75e410371381f649e05fd3810209cd1267bf2d930367288d5708d1ab25d79814498315708bbbd16e02eb38bb93cfe886b6cdedae00e307a7914f008ad23fc74f4ea1affe3b33d629837044c58b78412774847a2786f94ba76edf157c3dce76fcefb05e24a4728af8ccbf96335b8b6d812b8361b408027ae94a49bf039b0c3d99b74f9ea849f0464859098b998681d400364b12c806a70bf9ae1f3bb5ac6161a23fcfffedbe45ceb4b2eeb34c9ef40b314f3c3bd7f54f855524b03a06d476b9a2e3c1e06953eb5aba64efabd0f74a79a0b0e71b7866745d9828bd288b95a47c084dc5eebfbd4990c5e98cb3db41fdb5bb15cc500ddcae1b1f3496859872834f6ec83c79355cf8f763ab3699afe196360ce86c681cca654476d2ccefd1fd9b9a430d962e7eb5620510448d9be368ac70f2a337c229b232402b8dc0b5ac9945f30168836cf0492d20582fe248fa39a90d28c0cf0cc9168db499b02275acd81ac0367354b34eaab30fa7d7e53f78f6f4510beb82965f79e0086df462be472c92a85ea8aaafce3c8bf99bc6f6edd40346e3086e02fd615ec1c204c4f1edf0294611e692f5a1138110948097a7b28ff0f949cad2c0b08337bb67faac60835c309d837aacc635931af95702a4784c214283ebbfb43c4e29973560bc152f1cdfe5117367708cebe15caeb7ae87d9092c7a8f4f537ce624b8ffb852c599ce28ffa93a685968ba2272e8994cc0bc4a88060b73eb22b74ee2d5c3bc94a394be26301f80e8acffee77bc21517d05bc6d374267ca55a9dde6f6f495cadcd2a08fa3159a8d6afec09a6a41a96fceda02819566220b05556b4edf99e86b61df47b31e14bca865bb353e6897e33cc8aa195820e5dcae80c1e9d71b3a3e06ea25f4b8f5b1f87a6f5ee85af1235140e1127b317855ca3d3e5bc4101859f935cc433211c871d06bfe76346092789624ae9fa2adfa1aad3fb49fa49a857dcc608ec37a4e14e8d705898db3ffdb0c045087ae2a3e24b8e81e8a19e5d6b11a0a2fb80347de596b6ecfa701d18929523e4d12ca7c6296c4fd620537124549b344fbceaf2533049e1a32cd7f378d1befa682c67103abbea36f92dc93b476adde0f4d39039cfcb4d56bc76352307c0148df8a293e6a8a1af8b129769c46db5bfebbac9dcd199bd8c5d6060f2766e6a7d23bdba18f1b7e1a1964be49dd33f3e2a9fc8253481580eec3eb77376b455d4e206dffc5ef91085aa9eca9ecc32650c0442476f0212b4c75740e8362aa563082c7c85f0cec65a94b1edb74c5da78627371d5e30ad4d57efb4ac1c327410410d41ced71fce1f3e179dc93b77bafb4a98a97836ee9df7e68eebca7aedbdbf97eb0b44fe10c7ce6415587b7ea64af65b66449bf6343adb0cade3e22bf16e780caa7125224b22997396c94aa761755f5e99eecdc787ecc06f52863c56c6ed0448535abb6a59454914a3d880de31a300fe3a9157d1711b6db788bb2024f2a42bf4eeb04cffc19aa6ee426d644d9c3c9fe15014813b792fab8d546ad5bdfff9b4b8815a21090b8777aa7e703d192ca805afe35f932e28904299c07ba4487556693b164082afc07686ef5cc9546d6950fa11fc5ad5d104a6fa82d3d7d5edda221026b44ab61967ce9966e661f16fda9a45aea1ed8f4d97da9bf09564b0d6b8c572206460077088f779b6231e5b4707efb030dd0008c96992ec8d0f0b7c2896a757d22d6abbdcab59ee881be9dc1e78b8013cb57b896e0037b6fe48b5830efd3087e317501b84595cbf84d7abba1cb65b017d33465a63e632c1ee48480bae74c8c9fc2afa6f911968b6515e4a3e68484278985e49c3d1a3e9d50318ae5d3083d7e6c56f50ff2a74e59998b8b0b02bb6d32e383e6d0ce0bdc6bae5bfcdc1bdb2c5a7e5ed3b1278f13b3100eec3588c8978ea03dc987cb7be30373d458f7e7d8afad105aca1f2a318d24632076d7db4489876a13fb35c7f2e8f16b3b3dade9792de2fccb56ce5d27112a0d50b9469ca7b9a98bb6fa7f45f934a1dee1098273352d988e30f82342d85640692032262f7aae819f9755a8c8077cb159764b0a27b5354a3f1c2cd27dddb2e4111f6feb1635ee9c00258b66c0a6179c555b80a97951cb5499fd733050afbd91af9ec109e351e05577f20a2dc24dabcf7d1138e4ea936664295559e18db6ece56f3ed40709673a4a417d60523f669fc71b37d240ee027cd567a44f5a679bb74c0a6027671ade42e717381c98aa996a1fca2feb4216179544df7ad20f80c6a321fbb329ae7a3f90b843a29d55965e91360469f26cd55b362eeb3970656bb04723ad986941b9f3aa4a515d611d851ebbb654867625be45e5e02570a9107ae109bdaa9044c55ca305f9eac91654e9623ffd3505f50133501b2518a0ea8550e1615c7d2b6abdd4b62a536a661b9055b194871058dd93c7124c5a3f5ac3386039e47c9fda497fa4b58df34ac4ff543c956ff0810fbe31fbf50ffc03feb1be3b4319ba8d2d5f9f5f29b73616562015108618a6018b15705480bc87011d446b44a56782bf851ba1667b2cb857aa2c5773fc25341c6b51e3434e0887a136d9d41ec96461c1820c0a5d3254d6892172afc9702c073c2111ef5aa54a7a7ecc008d1c3786e41d94bf5ea5d7d63d156ca162a37a83bbdb3cd418fd2f18dbf45d570aef7845662e4d8402d2e4174896dc27247473c2be942ef6e4cd53ea38ac5b2bb1eaf426749e0d288b56df9e7598107279cf147f8bd16818d72dbc34fcf1561d36a133b09bd763eb7cb432e260737a21c715b500902d88a854a0b09fa58dcea9eda4cf6a5854e26b4b7d866985b399a380eaddfc87f2f13401c8e970debc35306b582fba16a0f9167c1532ca51f2ff765ba107c9cfec423a5308cf5ee5172a6f245dcd367346288b831dd05b519c0c28abeacb0ed453ec29ccd2cac075290eb49d083055dabee128f4e9d7b301295028e62a802241e46f80d3c9643bfb5c528f59f9f19ed965c37d461bc157fd356bf5bee2cfba74f84cee0c6f3427d44bb67ddfa57987ebf53ff6fb2615c0821aa01d8aa6221dfa09f4bfdb16b32abc517afe928d30977ec7c734889b5d634c739d1edde70ff34db40784d45259ab001840901733cf442e67f9a482ee00d6b8bac3682d17e1a0fc60e5bb6cc4a02f4c0a87b0d21bae14675037d55e809891637ab397fccb5fcd62bb2ff218c01f2dfc92b10f57b7459eb60b022580158d09b91dde1cc173c2cf3d0d36977ce73f3d9e6b6cda1c993e399712f933abff66c6462eb3652fa3c32cc7d1aa39edac78c4addf1bcfa533e08b86e28d8e16b0be5d7717c40f7bddd97cbfc2eb480f826469a7783e4e6609e4fb02042f7374cbec15e883908a4a746e25614b9a40470b8a8317c154d4e3adb40ea4f26fa23ac388a606dca954201a09bd78c607b1189a43a77b44e001b271c63ccc37ce88cd1a1c745e9d6efb713124ab52dcd42918d1384d5e7d70433708941bf43ebca5c04200174c4051fed25c57858bfa8016bc22c0fb1dc5761805d4b612c991ba77a8dddbf57c6012cca7fe1ac280a98be87711862745c7720e9358a4b798bb587ceb4018955b76f1e38698d6f8dd54683cde1fe05872fdf4855426d8810e2617340c1b4e7d65efafe1e2af148efea5a57255c0781501d36e1aeca1d9f5765c671b8fb1d62428448d3630b36bfb60f7b4377285b5d39ee24f4db16c218b8de8d8c1eac658102f101a5f154845c4a0d514dab8e2121a9695387c46e837c99135dc95a1ab3cd7c6dce7caf4d02a813ab8580a9d68256085768a55119885264cedf32548d30cd19c05761853dd92a7ab3bfe15948a583bd800e536a61fa2280d5bbcef54f040941b1435b5b6e306ae5eba67aa32cb33032aceb9bf78c017555f098a523a756095d0a3a73192630f1bd1de35270c9d3e5cea3a784e0e3c4d14be91ec0c7dc4e56d391e6b0a8ae01466b0f1e71a6682e2bf92ceb160dae6cc1ca87f626ca3716770d0fec1aee4ecaf2558afee02f51eb891b115f5a663520ca3a91c8df1200d3f4714bf7b9d44db47be5552ba6f1cc33889c18aa57d4bf097603d03bf4897fb056690fad9642f5e66b823a4ecbd6212eaee50a74163d964e4c8d0cf86c16fbd3235c21b6b8218c884993ff0f58c59703865cae679d8b0019d4410ca74fa0be64e6b24abb27575bc49e826d1554a577db956ace29f6a4468f97859aefa6110e8c24d25264ecceaac0f1b64c09c76009dd657730622972b0da1cc27c7878503472672601580e6cc1a4ca976492b9dd95327d +MD = 00452733abbfaf2ea3aa5d21e0dd51a80b9d50662787f78da3ba6e73 + +Len = 79432 +Msg = e1e60bec8c56a4a8090a46c5e139ded56aa9a675e374e12dc00ccb98437dd0c54cf2fcdc727bb305520da28527cbf52a9c83caeade7ce6c7f46fa7f653d33a3fad5d0ea70bc8894d1bd2f992cb87cd7c16c1055d1ef0e7af7c17f443d4171a9bac302b947ec58e470b5f3532f3f5ce93836b3e15ce584baeff0c98c8edd2d79ff0723aeaf4fa2abdcbbe3caec89e613789875d5b143d7a8c26577dcdc78bd914222b23f294f0c67503f7f84e7109ec2fd01f49771825dc1198ff899989ca88c1e964cef4872ec8395a104f5916bed944013aecb1039bd905fd0ca6765c174c70ee242337f43c9acf78132b19e1468e3ec4e12d50fd24d92fff87bbaa68fb8de7d9730a0504a3a2ff060773d4f82875e5c01bf49e2d4a44584477b07ed4fdb3ef51596ba4deea4a93acf50fd383ecf4009ef029e1bc94824874e46d3ac9a62650fedf2e5dac99f95111e4e65eab1b75590568b562d28afbc738d6d9266e7c4ed2890c3b7893391603dedce2bc973c5fb69e8c7e6995b5179d3856de8aec09943d9ae97a3dbd510b6fbae6ea3771d71ae011636d3e309c3f911b6b63ad6ad55e58d87cd3f452693f5e4e08e7155e740e9f05f56a28c9c8d96d891e51d8116615ececcf2fe479091a97424cbf9f889ca3ba234b5e7089bf4ff72c768e53094622c17dea74565bba04e43dba5b1d17d641fb126c2f5f970b07f8a97b036679fdeb9f34d38c922003650be759a3d733ab50287a60c73b1c336b37ab3598598911da4eb9945de0ef6da5d5e9317f1402a2380a05300c4c3fc0e17ed8ad3673630c5695b335d188f07f2c0aeb4ad81eaf43616959e3e8dc2939d393d8eac3fd2c76c63ecbbccfd14dc1637294ad943b6016330d1e8142310126a83f54f4283f0fd5940fa8333e052bbbb0d48d619db43ea417bdfd130194f010c84af4d44e8132b327d1f3a1086ab5f67cfa7d6ed9d1707473439da00f4d1e7e9b7c5f911c0bbd97e74b530f144810f930aa0ddd32d91e0eb065a83053a4b2f8899d3e337924d90a3c4771844ae9674c32ade5b58f1672fb37ecc3ccb5e1d406fa7438c34f16ae938e8bf4089294e078eccbacfed7ce92c26f9f987a1d4bae3156caf647852763ba45e185a3d490a304c4cb0bc0f44aa6ebbf48cf44732b650005671fca03a02007c90fcc5ef826d9782477a904cdd2d7ff91ad10329fc924fc6f135c51b1c90f0383dd7040e69eaa5d73952fd14aad4c854c98024b8a6d11abfc9655e677e95535d9151a5287403d3919ee443053252f0557cf4d971a5f549715b7b1903d491d25347d719bc153bb977e4a9128d080a5071c1a9a1e38e61648203f1958eb328d5cfddf1e237d214bfc0a71bdc1a907d814024391e9cd4c7f4587f7344469eacd619a01c8f2a4f016f2252a7103c702f0b37110d9ffbfd7b616b0a4ab5f9fb906bc75ab18111c094400373e55f710b9146dd14b1b68f8d0e443051125ae75e960f6f4a7b587cfb4fcafa87610a46d736dc98bbafe2d5e7f3054ec054b3bd4c1029681bc495ca3396685e0984b13c67a234f05262b55db2bc3d2cf47c50da288152483b1799882dfab0c476cad4a04145d87a85649e8561dc44515a03a2cc987c029624fef4453eff3cc45bcdf530d8a43fadc1401efb69e5c3326d852a12f062c2c855e5368feb1654c434e8836cb24ff2f0a26fb70e5f4b3266ab7b673be4c80b556a64c0a6a6d2a14a7eb51f92529b6ae9855de76ca67f0a549050eaa5ca3e54c3cee8334816b69acdb5be2a602e39300f06952064d413c392b89014ff351837a9f00a0ed2af24b9d4566e2444c98bbac782a012a56c8be68780c38686a9f81c6e7a24a3e4d4cf86d4fd4fadcea91593a9a6090e9cd469fbd98565b00a9d508b97d9d292dd3bf97a7606cd175c4169333bdd2aa4c9a0106bdf32f111c983b3fd9c7b8e6c5a29451d0dff71017c26e911e4849f559a6421cf2f15f02c61f194fb12ebd290ba3134d72363e5ecacce37c83a58d191ad75008e3fbadd70526b65fc61b729909be83b414cc066497cabb7cea3b66bf971675f31877e238e2955b98a2f4a1dfc6dc2ead3f091ac985a43fb8dc729c8fd74cf7051acfc6cc63545022cc2210a34ae35a617a5541369d42b759e0b2f630e25f1f657069213c934bdd24cc0e888c9ebd50f74d184253e68c6b867f633d4bc039353ca2afbb2f77634ac62b1fd042c950589840bae6c7686ba26840ed39877ac081b139075c4e1982de3270bcb26ed386b96cdca3f53b2bc5a627abb9b28d16de4aedbcdbcb418091e28d234ff4b8c545bd9aa83c37563884bdea482d70049f7ada18b392d1afb4799e02cc3f5fc7a677aa4b2deb73c1968e30d9a0b23a951a7b7759a6943641be205ab6f4f4bb447e03c9a6f11973234dcd471e3ab1dae891cb6ad81e49c29ea5705ed422d6d0d655d162d47e2ffd25662749de9e9016a40b51fbbea3193c6e7150f182df4d652634c9bdfc5c93da6fe886804455b9b77191f57133bb6c6e5b2aa75de8b2c144db22d3214711afd2a8dbd13275e69285f92a9f165ef0aa1e0bd95fe830239a339e28d7d8dd27eaac7847f0a89cd98547e1de373068c93b1526865fdb7fba40fb174dbd28e526ab328935ca2adfb7f8c7d4b5a50878ce871b55378f7e00001b64ed996d5a87945c2a80ac49ff660755cb78b8d1e6b788f7f840f6d718d87c9335c914cfb5edfb645d08b554715a51031c75eea4114d7ef1738eca1ff332b7113852c7cc833ce22b93c757d3c6e31e6a82746004d36138de55e7bc4f553437fb3331b94a0a9fd21993659aaf4728f4f2c41d14da721b3f2766f5d24f870686bbef0df232943c5296278b86ce3c525e03ac17140f37a41a326e5d1607d1d12cb7348f7b6d673bea0a15e12419ed88e105000b68896a24516935ca90607abdaf59c95f5be2cbc522dd260e7b78a1f3076089a0163253c26d3382e24740ccf1990878249a780a02837722bb93d4a2bb577c0f7f28f13aa7f5f71f4d43910d96712b078641196b199440d18f7513360759c25a4fa5ad66fb711fd2b48c3986d3c02c3f2f57ac3532dda1fb33281fa6ff969831b9965020e56a1264bf2b227fd10d72e8c4e418b177e700674eb4de3acd95675d6502c1b08d67389d1527323fb7e065caf0f147270e39c6de89223a3996de98a7faf1e85e1cf0f9445f885310aec16dac598420de1f5c5c288c791aed85fa91d4216cad72ba8dbd2344566c38de39f258a7a88b20d3d6280dfec1659cbf70bcaf8179f8338ec7ec006d9a64006ecf5c9483627033513194558703058f6fc880ffc323b1eac125eea4815c25b0870c132995bcb760c2f407c7d046e10ebb8b448b8e6fc0df7a302bd729a2969050777fdf84bd49ef4ea8e92c8192e160cb40721c8b670d5ae26e0c600d769fe8f298097df86d0c281cd4a14c42efedcfc86f717a611281a32169f709d4df28ff94f717cd9bd5e953550099efb966eda1daa1a96db97802015ea9559827e6191e5f1d139512fcc8b720b538dd91fec91f285c82bd3ba279bec2b48fd6ad915a8d7b91639e08eb929da679e6dd70c06991db2b64318e97cf2074140b8b0fead4940fdb71b023a82d4d0fd70bb9ffb2b63f1a93b7935b5fea709c51337ff4f96d7b4384a3930b3d830f82540f37e5de96700e1ee3a94903b4f564f16e7905c50e894013630e69b17b2b277a5b20ca4cf26edf53503c018a14f9f27e2343ea56a0072e1018eae50dfce827d0553b5803b37fb4ba66132afcf1c26e80bca34ab4093d350329ef2658f090aade6652350bbfecb5dc8ef86d623599017da062cde833737b7500e5d59a3e69d72df62b096c00fd0c402eb172c3c7c6d3ff37481cf904f12bee049499dccebcd7446e907d2e5df9de6fb007e0278f910b8de91cdfef66fe6bf49dc41b2588d0d2ab3447385abd2a56ef7ac260967542d1b01ea8bdd240e46311333c037d54efefebb218e3f80ad6994af6aa991961204fee3eb25fab79e93dcc2ec5f8ec1a5f568b4fcd260e2b46d2078a8634b73b74aad2b1036d81fb561eadf727a27bc2693013722ca8a608c227afa020d879eb860de1df638e5dad73303df42aaa313455a50c85ff12c78991c0c99f3e2e65599e9ea531996a4677879b038e95b817586bdcfdef0c0b7a96fdc6ddefa9dd866e0485a50d6faa4441dc87882d32733316f3fe6e181c3cc6174c6174f8298ee110ffeb69dcabf65ff3b81b523ac7848f573432e768f64db3f4c7b8152186e98028d9f87a0716f5a076647feb1b1d92330177a1f14764e54915b6f448d487956a9fd8d35ff478500eb028dcdb3afc4625fe0472131d2cac9162613c9579f53ba75b45a5a00d99afb28a4b5aa8fe2c486f3423ced652174c92c40fb98576988240466895c6b940b892ec1720dcce743f198d1cddc14eed6a54210a939f3438133c4788cc585f3716b8bfd257fe149dd429f036c65c7976b1e06398f16b1b9d95a345ee71de69446f2ce9c526973770aea944bab22f3c79c63d7002fb72948eb17d2ae3ade03e306cf45438b62e9fb276a073f0c8c3fdc054733290db3b05d50fd3ddada8e746c2b41ae6722e4bb42ed3176420319f2511018b8f89b64fd73856ac4694897ae9c4f0a689bdb777ddab6e15ff92144b1d35758c7137b73473802f114de279228ffcc79e245f793885f0eea22c8e9a504cf4597ebfe003743f754109dadd9f66a034e20c9fa19b1911c6fcc6d35beb351915556a61cdc597a5de359cd5cf24ce8432e8f7e2cb469feaf5408adc422e82ee6210573e4623230c84b2d226fe2fe2a3bf8268d425a154784561f52f8b8cc032a1334d409245a2dc3061b4b5b3e92b66a258665ff7d5bf237e0810b57e2c764c9b65544efb549b7ca8e9496a35793033a511f96a8809685467dce25462372ca6184f7550c7789756b4f49a2ece0879738e5529de2166d871c98673f581d46aa7e099b72f3fd81dd11e27ade7c4be8f8f26ceffa10a1496e46cadcb81212cb9b7baea23d1ab9db555ad2c8c7f60c2f9ed3522829c8b3a2a1318faf3de8b66a03e6feabf1f53eee74a28ab3fdcea3d3ff783f9bbb7ec001d689514f2f607aba8a4c84295017ef43c19584bcce8aa56ea14d7fcb0db748ff649aaa5d0afdc2357528a9aad6076d73b2805b53d89e73681abfad26bee6c0f3d20215295f354f538ae80990d2281be6de0f6919aa9eb048c26b524f4d91ca87b54c0c54aa9b54ad02171e8bf31e8d158a9f586e92ffce994ecce9a5185cc80364d50a6f7b94849a914242fcb73f33a86ecc83c3403630d20650ddb8cd9c4c2f973989ca20a551b4aed621537d2e91e7f0f385c820d6897b8f93c90adbc4b94492e6250558624e73b16f3420d3514a8c97c0d8edc3552b0e4102160ba18ab1eb0e6746a1714fcd605f59f5f5583bafdee990f7949636b7f2d1286f4bdd42a89b5039791f19c27102ff42e1415a6244876d006c6d17ff92d1a6731f3bdd811fde1ed936de907ebbc4179670857859aafe788b91c7c7145e13477ea06c30ca8a1ba0c30a70a3b9102c3ee13e42208635acb28f124532197c401ab7bd5d658369ecac936e75921600b3ebafa4f7f17c972a91a76865d7737fe0b69ab07fea4051c998a6cd4e0a1a2ff3a45e4f2749a121f0ac510e9a25c6cb6da1a414543d85b42adb89b17a6a49d063df799740c798788759187f52bb67f14f4270636aedc813890bc8b58b3109b46d138e07f4c9c70d672e6a253ff6fb841e3f6c2834698bf27cafc043e10cfe2ea7d7083b83eec1530892c2aab266d5f652ff13cd314f45c37e1e2ce71c4c7ba18ca0748c9e94fbdbf43cbe8a4a99abca75e7f3ecf1ed9a28f5fd5b09ad7e26df83e65f85a55aeb2ab272ba1e78fdc1730fa078e1f6e2dd758cc3c7461520642b463f25b128bf23a1bbeb5201ce01db7288bf3f56a0cda44b9ae81e06d3c1d8071c117389a92019e378ecf2ceaa544e5b697aa3b58fec631db8f0bbd679d0e705ade3a589972c5262921e28cf9e539e902a89428924edbe5e5f642d2f67dc15a9444c584b834251916ff5709f2a8e40b35451984c004ffaa006c8ee9c3e51e864a7b1e829fdf08c129ae946b7df62d9377f7a1168a261cc6547857c875dc0d3ba209af1af57b586487b8037a41d8fcc8ef4494a796be198208a20538b56b76c2c478de166311fc4b5ba50bfde75539f3c6b75aff8fd3de26457200012b994163d950153d90a7dcbecbfb13be1676cc5c23d55be61b6e53fa3271b1eb7e6e56660917bb562548e004ff44858377429d4b2f280024e2966046f8267ebe57f29d137b57372ac9f9f0672007c815b2c194081237af808d53ed51be19d0415d2effb25897f38125c4f42d56cd443c6efb9adaf38ad1c4c4ade264add3103d3929628ac7605622e0b0d49fc81d61bf53f9950bfaaacfb62ead27c7eddba47b92ebb0e4f139c8d7a3c578059f7f87680ac26fe1511e0f1f745aa4c2a5b9f6c0117dcf08feaab166160cc8a7027b1efd3b5e0ea51d6efbc63ebd429dfdf66cd75ee6a93e153b7a98e08cadcc1a9a8e478ed65c9e8923fa7533dce79f1e197087202e24ce5e758935aa4e0dbe0f633f0ea9313f16bac473f2fbc17c1130aa6997ff5e2aff02df47051b58d2c3085f9a1a3777a153dbd9d0063f74ea3b5a32bfd0a57da21b29021ccfdcb4e2242d140532deb0699e12ea7879a7fb1765c538d9fab7937368fa64715d946a2729a70ce92046e57f3f8780d313da60edd7994421dde0a9872f9e8fac75ec8087199ecfafaa181ecb7e6422499c81ab53d8fddefe40c6c5c5b73d0b37e08c00ec3e39e3bd99fc6134a3ce5942db43e230b2198fd8ec11f2154afd5e78661bf13ddea1d27db499b8a5f5efac2699c90f6eab16de18aa6a355f2e0912d9ce425c6242fe2455c5982a03bdefa35d9eba39f40c1c54244079988bac87afc0e2a84842b2775faf92a0bf3744f6c64fb2bf69aa1d52776576e522820ca0bb9768f6bdc775340df2e55a8029cf2b9e659d80a67825e1d2431656db2a967bc0c529d3c4d8d55eb586846e74c1a9b6b20526a4f8466ef1ea27e676cc6c924145b2ede8635d181de0d33783a4e819c08a9817d467fc3ea94977b0eafc314719d3c67cdca43f87981541c84116846671af8736b7fc82de31769d3a5d735ffe2cf1699d588f646af8dc38fd52d47ed9f0a8394cf6bec096b2f9ff4d753adfffa127031a042bb50964bd20a05be6bfba66fd152038b69fad545b07b0da589a92a1fdfcb987801aab0541617707522e51fa37857c26ea056d3e231b2d35d577ff54fcbc438a967c9a03ef634bfb22b2e5d5ddef266764db1c99d9a58a2eba5d8de1abab7fb476c11c85508ee3e25e35bf1e77bde7a42c0a038c050c906c0e368571923237ae27d37ab3ea4b09620c9e28fe8e56878548796a4030b80798d9e92f2b3ab7311fb198fcb64800832336d5669da922ceb1c20f98dce111b759245ed3382aa436b01dfae9b6ef171acee3c1c122508984d1a2b6d789a17f6758f67db9bfea5f0e0972e08bda69f6960b1c4c83b50bf3708cee556d6ff76ae13d572e29e9035281d1b831284b3c07bf81e85df28063c85b8bb0d3a3b56b3aebaf4f596adefce357b0f7d70931f3b05dd94fdd58a8df700d76ef1ac18485574e56e7e6c5c55d7c575038b976b3135b37bb59b2fb5808544ef4b4110f03ce29d2db26bd82c6af844b5682bfb6f9266f16cd0fc524b664dae6ad06a0d55bcd193ee615c6e90b7963f96dded1132cb454c2ba78fe1aea7d6b9c4aedaf5ab30a8d5c1ebaea41b94380293b53d7d374437103289c45271ddb7039737126e7340eeef22c1f0fd4fb9645a568e9b93ff85d30a1c084839177044f86cf9bedc40560a5c9b74c1ee8f7f819349da85f9fe189f86329379ea11f8272480772ed39508918a9684700c6d5f4649d8299b23b565032120bbd809f3edd3f4ac2fe0c8e3a0fb159e71a9bb6be0f8fa9bec3985a80384476101f0fd3fb9b2053a948330aed7cd7a3dbcdd9ffdad30020fa2ffa4687cb9757de6435847f467c2a64574bf69157f14ded66a1eb50c720cadde3c1459291937d1d94d9fcf165ba989a343a9a4d296920c4efdac04973576e10e9d3a0c911a0b076b8e3817a814465f3e5ea3e4a79a6e4096f6ec7ec600ed63a491a9f55d327b790d73a5c422181591974412ab0cf106163ef44486215abc804097d895e5f8e5b15f9c8d570cdd93bb1e829a5a6b30f5e7b76448bd21a980d1533e3a80b3e3f64aa2674332d0eb4d5664a89f954ae0ba5f80c56d765f83b6d17ce364285f7a09af96726c0a06a7aeddda1486ce3476cfc83b962764236feafafe35da0f4121bc4aac3c6c2f26b934cc1f550477b079a2cc48650ae935c489d8779400a7f1717ac65433d824a9968bab84f88d24375fefd627a08c87df380fd4798c7c74e8ffc18d1ee7148d17b5fff6ab6d8546419fe36069e730b2a8210989748da218a0231d196cc4b5cae99e1e281322817067b03a157f877c1c2915f361d92615e5bf6209f5de5b3050a7b572ca2cb60614f247604fe93fd306ca8d59f847d44c7e8f53049ce42928c0daa27a5778a697b6a9bbd28a274eea25150da9a72126ba45a86c99990eace39deadbb15a87629ad7d6842d5eca5305d9910d6f09058be3dd83253554ce55154a60c7944dd97893eb1146bd2832dadaa6b713169855726d98b7f3646a93c01258c50cbfabdf671782d26a2e911144bd0effa53cdf91789c29bf7db3450f6c8f4b90018fef09acaa11a264ee03b62f4194f33a5e496a1d13e2f22a8e7e81b8d0855a4c7191f8c7a029f9cd680ab208fcbb0a48d7601fce4966f8706261ab438aa87c44213f2d26be3e511a4910956042f3dd6744ae530ac1284ae5eba8ec7b02277e9f0b41076838c130d1fdbfc0a3b8d1b50c329e8460ff9961f166ceb5fdfb84e9a39c3227fac445216af252d461b2d759ae0dbb245f795cc639802d981acb43460850acff6cd54cab6bc3944118e56713d3528ec354b2c4f014a440237ff5d50c23c4fc0e2ce04a274aedde8747c5137c028d83e1ef307478196fc0b88c0fccb48c65b9c4b969c03d8eedac175cb67f0ab23b24f09d66edb6ce3f09f7dd7d9cc7a8cf60c3a0f64146be2f8781f64ddc4878d7fc8fddea8334898e9641c2d3c7ce1f4e7b8b520a4feb4f3feb5772ffedadace075003f2ff78a01faf026fa86d030467f847c7b1a3e83c89b61f8714115b2f4e129022fab9d2f9df0a227e31b3886b4eef6275abaafb890de65f56fc5d6e0b74683062df1f68dd40c26c4fb158339f0f95b0c9f4015e25e5571deccd2b3cf8aad0d7cb877963d3aa9e87ed0ea22d2714b2daca75f03a987bd1005271c3ed7d58142d66db0fea6485681c5d32da9e8bc30e878016bfb768361cb08fce6da823e4fadc3ac328261639e6d2a80347ae54867060f4c0b5fc1f7dffd6abce719570b74b894f280e3f742ee152d76b338309c4a20c2d591b3244ba431aaf5816ddee39cedeaef0075c03cd2043f251e44832e46a3433ca39806054b023a253a6a825d24d835e055ca54d7c6d4eff9ca323585091800ffc570ffab30e9a8ca9671d9ceb8e20674d5543d9a48e1b0836b83c026fdf97c8d6bd079a3f25267541a265dbea5b5cd2b2395e2fae4c5114066bbcb8a91b22663fb38fc960bd7066039ea76a397adfa61b521dd8006f982cf404cb02660fc8f22180cf0d7e9d1f66d7a50cd23eb352eb6fe6a95b04bf9a57e8ca90690e813273636df0f1018edc7ea5fdbc9a63d05daa983e2a402104fc9dca063474093a08f1edc21afa51584fb555efde4a0f97a7ea7da2c710be0569068201deacc002f175a7c774b2d6c31f13cfc39b6aa9d2d9b30659a852458b879bf900b79799a0950579c327a0f897f5a0fbc11a839b479a0d1badf68e1d5efe63154ee7bffdde9dac4b005a4c209b7865c231841c4cbf9301a4e4d94cae467766bf3295ac5582b16f05c4363fb49851690a5a00be24016c9689477815600b9aade0f3eae4075578588f58e3001e5627b4bd85b7f08bd7ccd5b21efc709b740e3f5eda0df17d1f9b6ed1048817c49da34fc1fad03ae9075bc408b18ce6c74a7c25232f265b1da8c1b9b30f4e0d10356d4100017424a65ac26e714751fe4c558b65153a5fa851b793421ec35c6968e52c9260e2cb372a98a9d8d62a7340925de4091e42de628016b910f866dbb33676884bcbe4fcfade89b70c20a01934022a2e182591cb10118bda2b2b41f274e1b12b73285030f628f4951135f26b630283129b116d4f3b6edf9e9c9d9cca32d15bba125f6e8eb171a3ebefff689254fb323899cc1f926afedaaf6a38bf8a786e3fe03157863fb5225c60ae6549b68f56fd471a3deebb252943b29de2f15bcb202443d6fae06a8aa1e89c574edffe9d79ade8274c24f2f557e4523e857b65b54fd18b0c2fc438b6580f48f2a4709305ce0ac2c6e1086160f083355408a5cfbd630f61d8de79d1c3ad980c854e459d4fbbdb7e02e4e12df05ce903e753b7c26cc4a66d44ef485c390a4d8f1a34a64304aaeac3e03df8812d04de65004ef96548da5e56574b79019ed6f47ab83edaadab02fd3a6ad595839e4e2902a5e1b3e1db0effc419d854ea7c79567468542b04cc2bdd8aa792ff5bcba39484e1f42c5dadc65061937f203c5a5b3b26315edf70ef8d525c9f5d80323c6ce590b96fad02446b1ad2cc292722c1e46b371b443f189d9023585b1f5e307a0fe5d1373a7ef72a6625c2ccbcafc2387cad502eee93255d9c1a25e2bee27c0cf65cec623de765e71d39d79c220144478bca19734423beb819fd6c3c24543f7a87128c4261307401fa1eb9434165d176798b39f12f360c356f95d47237fca04d2cce57e08ca04b02649b11c90322914eaeb559b09516375c06aa068be121c80c4c5af543a7801372c37a87374e82ab56921320b9600966b54604a98f080dde3f4e7c0f739b18f3d77e81c2940ccb47168d6c37137658c1c9986a668796060b6e9cfd4d794eb014bbff796be824468f17088745c6c14b711f62a5e57a725577229da4565caa909ea5ad29293c7e3ba9e0692df3db27299e3f0d7ecd70844249e2b93bd3249600b81ef05ba59702f2bdfa1a26e959923c6fb202bac771b414aa3758886bdaf9478aad30d5870198b2f4eb813ace48e9ca0dffa8247a86ea15c1a8e255c785bdae3ddad560768228c5753d08314bb1141ca0ae66838fb60e8bb7bdbf688e2dc97df92d47c41a239a71697716d2079bfa7a4f48a69ead0a08bfb3fe588969da05fce52fefc91cebd6fff82212e6ab0e852b4254cf3e7d88c0f9def41382009559722a67333724e3c4b749c56635de129c79a25a492ba63a1f815f26591afa65ad29ef5d7cd5d9114de085e8798749b027aa97e27b2dd1280b9e5f1c93180053e9675d9a336ce47f57c3d314b3a493ef0f074875cf0ca6596d99065f2745b966f5759ca5bec4ec35cba95ccf7c5465d83ad8de9aac8fccd52eba7b767f69cea6b99bd30687a59a3992d848a43c5e6771916580da7a80eca43449e7e9014ce61b1e202b46f4d796959299be185b8b40c4fcf557bca2a5adcf698e714117b5aace0a4ecbec6f218751b533e6b541a399d964d28bc88ac6b85cb4d14205286dc1c6666bdb805f4d1673e2f0e902576e19b6af4243869badb456fc5981bd9b3dd50b1bc0858b2c21ea050116ef8703b36965c78ea77f3d214ac22b6f57f2daeb8ba61095ef943d66ac0ef9ee1fcdae3c30ee92fee03ad9e922aa285bec2a4c3f8d9e2c324123fce30397b4c0a25bc1cf1757fad9163fd5cee315db6567f0590383fb59dea4c0d06298a719d4a0b9a235c6aae66970179b98360c2cd5f1c969fd14c67ee240f421a9124610714070bb36e4ef3df41749910fc29603f2b13fe4f6e90682863c4658821a7c81e0aa077399192ce9c3335d21fa30bb4805d0d933b7aac34f12c03fdbb35852546a070631280f6bd11eebdcb2232783e3567520bc05fe05cccef665130473cf71557ff65fa96bb3dd4c674dab5050f7bc2dc99ae8ab8dd5e1020443683f14fcc1e9395e64e5d80df597d038764a531ebcd2f4d11f6f003a76f5125e432ae2df2a705ec6a8a4fc7f01454e257ad9d701c98c1d4dca1bff3d73f049400a8f8683953015b693ad7f14e99f089d1fc484a6cca56c944f7531e5c03bd0702734a7edeb7287b78dca0ad195ed2727cdd50317ae630a3018463f3a461ed07600e1ee27127edb50fec145c0ee77d24cecd2fc5c550f1fa98b55d044ebe171dbff600238f49c3a0a4e5bd7e8da843293e484167babf0d285126c8d0c98cbda268a788d287814cc6ce5606951425e6f841eb3fa7e97504c4e14511e99362534df0bf034ff852db8fe2b98a2040f4bb0a70027506c0075b58bf9cd2af3ab37a68ee991a1c60531274889cb2b0827941d85f3a7bf4ed0a834c528a85923e14959bc8c237c85df6640d365c0ab657481dfa560fdef2bee31f1830baa5530bea375f05c6e6c42fb152c262840cb24dd591e8fadef890b4258154d099bc3222c8d21b3c1391a07418512c93b13334c496601cc444635f7b465c8ab8a424e02124e858c234e2edb99001b4504018ae5a2eeb1e38bc99af52c9f3126f6689cd7572fca03ea734fc7ebcc6f21edd278f8cf3a565cec42611092507945b6d555a9e57818a07e7125d11f3235e55d4da78bb89217c0cd77314dcebec79130512280a37196ec470f59041d7a961abc3bbca9453d1c969832b3b6c8314491cda4ab6579616d6eae179365cdecb947716462575e858e66b4398f5269f318cdf595975f4f92c4ae194f7afe17d0c7f4e6903f9febb095b989546c29974b6acd11ee8e770d4ac435f181b7d6e46de7a98287fb88d40758157f4df2443b80621a87753ab49cd2958a9f73f2f51a0c42efad103f1a01d20005feebcaaa3edb2a3bc1f3401ee2725e3689eed264a3f5ff4dcff5b35e5a59b40e6ef59c6386a4e7b8252f4bbdc87148bf19b9ff2a6570474c50fcfe5bc8e39dba37340f78fd23c41a1df3019a36197aafb69e224f4ac5427299eec81a31bae290c170ccf08a9fe7e710050abc15b01c8dc763e3dc393b174a1092bba17f24ad1875707bd3146278aa662e0f2b4b7f58e2b6d1e9d8191bef591eb27dfa986a23dbb9fec32a85b2a0e88636b8f0c2ce5435eab0dd4bd4adf1292b14b62d66d46e60f6e04cfcc4d8862bdae5ac1260e5380ecbc8663d51394641a0810f40cfa9b62f95dfbf51b91c54fac90394990f0b2df5c1e02db778071529e3c12f3dbd3322d1fcc3c4314cc52fdebb57178eb6895b7334c2d9c0315f876a5e9cc02b17b8dbcd955402a5651d415e18aadef83da7e90f8c3413616488c48b78da6713c58109abc75a22b4ec6ab20249c490df8badff5231ff83a1f9cbf3149842cefcaed6d2f4f99ccb67c9f5aa52b46dd64b8ae3c7c38cebd088d8703c8d289e9deebcfe612f95e3a6c5e40650d7c26d5845219166ea03bfa31eeabfc87f8fb47cf2d643dce402f75bd625e4cc18db8bbdd438fe074fff45a36c15ffbf72354c110ee4eb6c9ca8a091a275d9479d6890ae01b873d07be9437979427a49ec8230074ccf3f38ddefa6f032ba2be9efcf45d2d38738e9f52782cc4d5a768c77de2704b47d8769323fd0228dde23d9957a6fd2528e957b4523ca45f1433cb39ab1f8b04dd70b262000e7ccbbc7094017cfd95586b5d2aef443e28c6ce714e4de636cb51fc51298319ab499c55f2545fe384a0478e536a989f19448c62c4547c95c4bb83230e6e6ec75fc2eb28cbe11d11c89872f040a958c94a62108fc1906e5045d648ffecd39d9f98a368a381ecb18e35f85b3fb96998593e1c1393ed646bac4695e3d1910b9818f2557554a8b9c5cf494a60db322defd580dcd61dac532ce0239514467f78d6b9d94391caa4eac23b9f0934413f68c7c4af2f088b72eefac2793e3 +MD = 2d411d9bb37206883bb85df2491c57e08ad34fb8adf84b3a8c1c1d2e + +Len = 80224 +Msg = 6fa07f3fd6bf69e9e1bc54c3bf1f74c4d9bc236efa3f2600b30732ecfe38ae8b210bbb10d56972bba8b96c4fa0f688c52104e84210443d4739664527ee7e92bff15a8c619513b9111fe33cf472369c05ec04c70a8b5d57c754461371f5c3b965a935fb1a5ce6c75410e3cb9b7f0a39ec0163c7aeb1b4fbe7cb4fa5b0592fade70f430e23730a23ed4160222d0d98e6e22acaf116cb6eb112682a02ce63e9f5abec2dcf6422a655427a03479065082b4f2de14b2b20b601adf17f32b15b1a191b079a46c6b0e3e6bd857444aecf83909bd34fe0d3fab274212ff53e4389e9a19d2a337a2f67e85dc5295a216d92319e2ee4bdb5f79f8a91d6ea352d6a347f169b1ba073888dde42c12d5de4b7f839dc7128d2d4805867e034eae70710a603007ca38839ba6bec1e1b5a26977347c3d2ca673744546d71eaa4f6b2d51c259ee5a88a94d5ac493b773a785d4189c8f909a268930d5d26cf368cd83e9e76fa784f87986b4e456ff2d8864faaebe0c3010862f48f3881cbaa4d5556346a066db8c58195b5ac6f243ac667a6b39c6280035770d3d3cbaaa329b568393c41b4c587d0fe481cf711b13bcb4546235cf646287f36cd06d1bff775f82b48fd2c684c0cf7667a4638125e1c6e88f8a033845f97071aa9d04fa80fb59d084d20320a4870c221f3db775c7306389882d22af51179778631db4f4d33122d660e4c5c8202dab9977b84bad63820afdeac63482fa5f658e12bccd896abb42fad552ab1b8c2736530dae90b68f5935dc040f8961b63353193604ef36bbec22b44e8623994d0624d55d7b171faf186caa7043c1aa1925f8a049807a7b4b664aa958f9bfcff73d0f96c3c84f57475227cfcc2d4deaa7b9beb9c9b9ffc59d9c43307147d03dff4e5f2dfcf0c9dbec98efd25406bea1c6712ddc330bffa4270074e023eb2551e9bc8bf1459ee73c135f3d58c47a744e19cece7e1210faa57c25883eed4dffaa2b0a2e875a1d57f6301798a979e30f6df6350925e3436138119dd5b349faffb557b9af6687167c88d7447a6b00faf0800036665a232dd3da6bbbe5d3a67c75f1d44d970578f4c5628d786b13e60cc802ac657e815e2ab31aff1241269f3d22ee45287dea9c42d311a725d31a95a2e6847f24ba31f0e49f685033700290d767091eecbc8c6d8b2624d8df5b058c57ec73ed0691f297c5e940e391eb1e37b5b2e0c60cdb7169382f0a77076b5b56963a6f7a8dae399f5931434db02adfd062a703df0b63301bd46e3126307c9270d860c5ac2c677d941907dde300a7ae1768b3c0ce6aec2ef1da54375add073167b8e014f6554644f28fcd7f4815fa2f593259c6189dcee487c4819b797fa3bea79248ebedaac3165727f2b5d1628ada325a1972422693e74a2d66cc269ada90cd0f0b98f6af76682e6c28003378e2152f3a6353df97c3adb57f8457d6b1046e248998caa5a5d8c0d4e6ddecd2cb98869c6dd7f94563e6be56356abd0e44c99d5a8c80ff7f5052a7070284da33cd0695266ee7c1181d758fb8d97a6a31e882a4eba24495f8218c8121499d66db1fb4d749b80359dc16e8a839e643ede5fed82b3445642c848bdee5b046b8013d164bb372d3bb01e602b87e75f647c6af0a3286d0f05021c901d25b30744547ee5303b03e3c9f77ea437d98d9540672d19d1a4e5e3da9241a25ff482e4cd5894348a554086cf12a3d6ba07df0b9f081021a07f82877df921c6ade43064ad963e08989256def807773ddb9a43882a65fb523740abc5953fa2442c7c254f8c1665a78279aeb3e9e0e023c31923d38988d7f2bf6fca63ca6dae630644ca6d14dfef5a7193aecd4da5c8ce9a0ce6b563798a4a5f95462ac6892c6d63c48585ebf8c6698d66bff4ca5c168787fcf4f6603efea2403987e22e9e03a86a85bf61b96cd01cfd7c4aef080fb296b270b55e29e1194289e3f553adb11d5d440ee1c72740f7bbea5db587b0c5834344f091b4666ac571631bf844e9cc61d318e75180dc7e218d7b8f69846a8773d66504f0c2bedfe978f66af87f8af6b7540f997954812e38dbd99ccfaedd5c69963c353a4eda4a6d9f69575dca3938072651abc00abe5623ed2b0c4eccb24c4ecdf20ad72162b2382ee46b8fee9e99399205a58d6c3a00ca0b9a654da8915f08c1ae0c2f03fd20346d912cf6b3602136e054104a409e33157d4e313608209e80ba99c1aabc539b48a49624fae027d8e45865725e4f91f8ec8a6ef770b50a109e02dbb3b1130d2b5c1a1bdb043f9dc72c4261563161bc56377c22406377f5bd4be09b6aaad1d3d8591849d87a9668f5f6e56f412b3ec755de99949377158aae6d9b016dffbe4cab25e647a3c6ae306a2b8ab8bdb4ad59fdc92ae978145970eaed7c374416a221aba9cc3ec44e4f9e2fb179635134771a57e1764c77a2094f79b4cb62775945fae1cd1256c37c40594b72fa99861364b46a0cc7e31989eed164a9d0ad8e2e6f7d537affb629b74b0ac6555582e2b93ccc3e3363d6e531d09cb2b3d23e12ffe7550b96dc877e663659a941d145ef8ec70ddc3f934e640377586bbc1b3d8b337628110af1f048f3caedfb20b70b35fbcd1c4b169f731c65aaae98abf1d37f32e49f6bbf861a11c5cf6fc4d94ffb3b6615a493a2cf6c97c0334540689d287864f961239ce32d60440d860c54e13e8938684bbdc96b625d7dd8c76bda6663fd317c1741885050bed84cdbdc79b5fba7da8eb9d075ba7cf40262d921eb96ac97013768cb6d14abb2e953163b30135b1eb24f97d48d05e3e6b998256b82742dcc3cf0fdcb327867c4dfebde32614286742a738dd2f994bebb0844535087470b274a707d48bfc4ac7c22dcdbc8f48ba334a9c142d0a1af36f9592c0bd9e358712d937f914bfc40a1631aeeb605d136dae396025fd96d9e732a1319f40d7cef856880e4e1dbd1336f0030e817f1e08b550b5bfe8bf245a89cd59ed4b6f43b536f5f7769140026e73ddbca94a5950ad139335f7d6f251117d9836222fa9608ce589ae1d4d2c2e3a2347d52b809f83552b1e40a47b379b93154bbc7ce68fccca668a227eec52af0ad7c6d2e1deb224a54e2a5c423fef7253f3205359ea72d6d24c6feaf7f933f35503c33c88bf11c3220f7fef5dbf8a53d889ee9145c6031d5909b36e34fe40a9ad29d5886cac6edd3fe167705354a8dea56bef0ccce3a11ea320ed32a256191087dc663d2a1109d173568995dfa9cb712efbaa1c5bdded49651485cebcbb1de6597dfdc13d97835e50f14eb63f295299e9cbb8567f0f382c037705990077df99b69124cb03aa5bc24d242f680e4deed77a5e9221b312224502aaf5280a26de8903b853a138c403abec71c401c991f0b83526b03474613c02d732dd0236428b52e55602ea397f0b89a36c753a0daff89aceb6aad55f86d61415a115ae11457685bfeccb0c8235e3ca0676eb7726d2671d9b70daaab0fd80c73268479227ca107017ff149eaf731d1b8a137f2fc1a3dcbf2ff7d80b353fecbab21adb44e62af9c0720f68071dc127cca2e4a8ea5abec9dde0be1bad38c84a5d191b593cd8f282e552903dec69aa947be54d013d4e6daf1872362dd758115a3cebfc39e07cbb5c6d3e242ea4ff99d397c5cf107f395b0ced48f287300fb57cb88f3005e65ddfe6b6993d92c75c1975aed8ed4f4697e153dad965a04dcc2f227e875935a4d8faa25ff83f02ca0b93eb3f731a2619e6ab244fa822016709e8fbfd68ca51a28a762fc7dfbb07339aa3b4b838f82d7fa202feea399a3332657d6993b815e275feecdf9cb434088a65c352b7aee9ddde56a334091240be265b46ebffd9ce508582c9423d1a3c9f35197d559c2971bfbc70e6644aa6a80ac967e0039062563457d295e837863733da023c3df45d223b908d57101d7b529171f7d330d3c64ff6735acd41fa6ca65edfdc7a6c5e9e6dda01087fc7f014b2ead6979b04589a1e2f5e77f9e014421c88bcf4c2611981d723747ecaec70e75b8f6dc3a1ee9d4233377fd6863313bb0c39f7e7beccd39bd0a0616cb30e0e87bef79e08726ff05331b76de30cbb571bf7fb2721aa000b40fcc96e3ee29d275a5fabede2a70910319c279f29f8097d096244b12f1eab3f15be16e171b42a69f3b014d3ce9a3a6b81d4f08a17c27df3f7dd9f3c8ca70edd7e971171b1b23634c842eaf648d67470b87ebab53916b93a5bbc631fc6bddb65000a31756b6731166c9a76bbcde667be49ebdeb70a4f1bdec99148d149dd71644e99ff82fb3dbb9d4529409aea3454a2babee4f607e6464fb5feb8f7928061699ed8e4110dc02617e671e11a1a6afbcc8f6a5608be76a91ba5572c093d414bd3852987b60f791144c506d0cfdad4adaa4c70ba45aa6ab4b11c2d2a7ca69a6140960e42d86cd2fd72654a8822981beaba56648a53385d19ae8f032cd87ae6721f4619bdfec2685b4f4bdf7f98feab437b41a83eb7f4a81862725bbb8306cfceee29be41af9ca3ab29ed183fb96afd487ba2de4fca7be6518b6aa95f22f6b1083b957e8641580f7d90cd9740fa69ac5a29de5946211a925577dc7e703ea7349e663ddce48a8116432271cf2be27713090478bbba527d3694c65c3d971cb4c4f21c675bf4b1a4628c4d5e4248e81fdbc5a9e66804b5003d8fd54e895c638bdcb3ccc67e3f7d4e5ec98ff7732091d0612078cc00cdef3031a74337c40899b90653d5cfa61d33cb657b48e1e45b76154d99ff8df87e67a99d8b9ebc805435b8bc42e5d786267bb8312226821851fb6aeba2bc90c18e94c8ebad262140a7be0779116b9270d3cba12c4ea77c819c985dd5db2e98fe771d1a967c982a877b9921b73fe57508bd99f2c1612a15b293d34aa693c3fb01d0571b488a632cb7586d94113ed1f3a03c6d399b0a4d021df042dda87d2b3b7e22e9475c46f59c62c681daf18ebf92f9e8cbf2139a7eb6361a5d6385e7a2deb5d72a2b6c42ee1e1c3e9c62e2b01cd7584b2ca8c5a24da69d7a8998b973e9596b75c033d2feab16462913c86f4358355dcc05ba1ba22857b6a96dd9ad926d3fe17711fd2aeacb19733e7e77f1a910317ce3fdc2902a9d4e141f5092ecd39d06ba63b5f3fe97bc9c25b7330e1461d350384b6b4edd9c2afe28650870f1a7f72278c41294b875fe12c05bd7d731fe0026123ad4bb2e873fec85e2cbe056900a279f00be6bd3160e11e574e37fe4ee25078d6ac0943d6c6a9d9f31316d862c549a8fa22ff5e8e87b1e079adc74a7a2b0991c33c56674cc3985e6d8cf74facd54dfdd40ddaf647db3aba9462931f4cc413f412e49ae5f271b39ef420c934f03898c0a354e14d036462f4d0f605456cb458e9ec2d3d866fd8e3e3ae55f44dd5f7103992807b2a6b2b12d554f084838103beb8799ea7126c000e73c6b6e06304199fafc6180f56263733a649d877a333b92fa8e0bf405190f21d9762c8f63d24a62c6c6aa4079add91abb0d637486b2cdf92024a18710a84b5f997ab159ca5dea79eb6a4accabc383f643824935ea4117dce0fde32a007ef5188bbc8243b61da23dfd69cb9c084de4b44895b7721168d99cd14c594370e7acfb44be17d3c3abf22d6147c5251bc78bc35eaa268f988463d765c26c69ce8cd36648e20a905f836ac6bb76900e52aad9b1ea221f04ec3e470b12e2a51395d8f8e80cdab2f0063e6ca86098d4ae49826efe6fa01968890103b66d1f8bc743468dfef50aa97944278830f5010b8b6cc8bc0773a6ae20fb572a47d8eba8fb73702329b5f466a285f93e0eed51ad2c38e8317b8aa835d4cfab1b6dfad9553692c028e6b42a62e2680e0e70ce0d12174a8b6fb9191758ea52975767276b38ff1dc13fc4740f46ef56e06a24fb8602c2fe0cd74ea3967fe830868ee1f303ccbb90fdb8317a355affdf1ae19a0a7ed7b5d00708aabe882334f613025cf25588f288c022bc3b1f37ba6d08053e8f3a19767ce4646bde7eeb76ffa7523689b2d64a61d31fc34b3f65958d523580de5a307b313f8af067ed2124d9be0f1d3dbe6d19b8810ff50f086d27bc64030f9c51c53ab962dcd6ff456ca4f0e1896f92da95f6f96463b00b2c96d776c7ee492db3304b6218ea9e093a469df1ac61ac1d89e948b0f7cb82d3feab2b48f867ac26e11a13b7ac34a42a1e177648692861226effb55bb597fbde10f299bf7fffd6fc8ddb2a46a73b97b67387a461b23e1d65dc119366286979add615b926b9272832fc0c058b946fc752dcffceca12233f4c63f7897cbaa08aa7e07cf02b5e7e3e5ece252bf2fe61d163bce84c0e0368454a98e9fdebf6edbd70b290d549ba5577d476af04194f82348d85e9b299f08ddde4ed91675067a1707cbf19eeee675d73387802246af2717f24da7c78fa840457afc4666c26875c4240785093a5efe6aeff64e7136491800fce3d0935ac185c510fdfd162fad07eb15080dd69ecae91899daf964792a76e64ddf0184f3b37f64889727ae229cd993c213b28e84f3dde9197cac84771ae7d2cf8c6424c045d72aca13ecb605fe93c413739bb853a283e657248d5799e113ca69311efa2a41351fbeb973b73f9bdd86f06ef2dc739d83163c1ac4674546a4d903155a8e9a6d404c4dd0e539383b5de2414edc824cac8482aea57a3ce4133f0486813e697693a1b85da269c258a6bedfee59833346992e30960ed75cdf0e8e55d8bdf2122779006bd77528dc07a3a686dfd80f76c92b2a2add9e02519c0039d3e2119f1116e8036ea4924a0eadfcbedefd12a8d43d292078699a24a385b0e8868cc56defaaa755c8aa41f6e0b277adef2e5174d40a5cb720244d64d801e84277bf2083334a809c81d3c954db7edd1bc15bdb9efe988c982cf5feeb7a776eefad616b0a65603981a206748d8679f5b25d6dfa4cda4f806ba3c3f4e011510b98305bef290e539bab322b88c96a0c8917ca4af3a7f19802d78e78786c23f687e50996f109b58b6ec339294e2f0d9d5ff510dc11d6cad9d884f4fbd2b73aceaa7d3ff9bcd1e2707a70c0ea0ee8f99641f238099b01ed7bcb1bdd344ae8dd413c09da6b97aa1d6a865bcd55101bb65df5b648bbd852e3e7a344520b282895b70430e3d6c9bcefe15c2b6b529bf1ca5c43ea4bd911ef338428a65968b39ee898cb9b61219b2edf3dc2899fc9f892bff9f536464b8f0065b922eafd333473604c59f15c34552976e6811d73a270251d9ed14143f997ae02f058b74354f3ce853b76dbddf73fd43a44618eeec549d36ab2a1b449cb7420919093b635b338d8deceea01ea52a058b5bf2985181bcbc3309d2b3661a96c809a019b8fda394bb8f36b7c0a8e2dc2dc6fc0a3a9fa8a401ef6c63870927bc9f3a5aa38e93acc73974c7cf69fce70eb89efad95a39bfbee0b45978f0ae429d1a33bf5326c5e55fa9d72671e67b4036487bdf0c81a04571eb3a477faab5f9bcdb8e34950c14dbd26f1ec96bd0b47ce75fd61ef04b73b84193d9bce3ffb0cb9045a260e5b900fea40bc426f9a328fb96513631410224a6c24d2b20527a4f26cc0af8bad1c80adc68f25fd5c7f8595ad7ef34cc6b60238f58a9a72827a4b199a47e29a8c583a2e385d55a4c332ab609006c2a46cbcff0e0991bc62ae009b8a2ce319db14da669a27f074bf0e7c4df84c46abf170ebc2d38f83610bf180394c0bd97cd7ad69abfa7d92a9d6a4251366c786d4bd390bf38f6fa6b0f3b4c4d0671d743515c0ccb15521881c72edf5a4b1eb0e658f2fe43a4b9143d2a45d9206e44cfb691db3cc21b3fb1df61a51b4a9e19e2587f0ba3d3d0edda1eea656b383ca7fb54378f031a31cf3985f573829c9ffca14616742e0a7e03b0a2d7f05eff0219eebe8adddc3de99f1407eb00a1dad1256241d7c2f931ec993c4b7b9d40df5f290e68344e4497b31dd5f7cad2f58fd222a9ae0b7e91f4ad2cd18b3db2ad739443feb3ac66c8d21ed9f3b80d610a260382ec1d5a1d84cd502d14e496e6e13651f924535badc5579d31f1cb3b413c37e5a4ae021c165e1646287aea3f90a8a208b713a9da89e6a2bee464c3dcea1820093663eef9ff6a8a2f8d780e60465041391c4149a181994de43fa1245ac23a88ee86a2465c4f56734ceaa0b3d18e749e63873195393b59a3adc24b5f3d7fffdcf633edaabb7c8e7c5ece698cebcf82040896792f1a0da46e9c0ad7e70d69f496c0bcaa8ea00d9f0fb58756fc1780052c98a86c69bc8f05e90f77bb5e43169540ce8f7d64a288e4a7e1c3dd83fd467a82a45b9ff7a925fabda8a78a27771c7e65803ababf2b651bcf740281b705995e70bc2e983b68690f56c808a8c4f1d20c6f863cf700b32890f0eca1d7f7b8ef3da1308fc9c762ce904f1e19bbd97bddbbd93104c6ebc259d0b6ac4034d88fbe748eb1fdc8fe20dd39f0fb5927b75da6293d11308ea2e16f778b435c4cec129daf83b0f6fa724b0b7906e05570f11fb1c105c73ed2f888dfe1e932647474c9f35b3aae09f2b619dfb9db7d8d2c194a871fbd938e284f3121ac5b09e740351e55e41e09b5262c45d098f9237ebd82669c91ef36bce30972eb334b2a53349f984bf6a864872957277472da6298a9eeec78c3f50139b7c9b68313442436c606b03bef644ede60d96731f419cb6975915492227983830b02849fd8d08810791d0eac5acc194960f56daf8911be6fa52c278f49e74e2751465587d07ab66ec2450c23b55a6446ae6da3339e7ccc29bd11eda686c8c1a52ef7b1d1a69d4fb0461121288b99a064ad94b064c095751621d51f9e75887e7af8b91203c7d2a47358f3f6213a046e11e2fd1dc98bf639c3880825dda2b0d52742ed0ea4c09565268f8fe3b46d251ddce31933b85d398a90340da8ca7adc86289216002b0d6ff2486e27823881664024227baae7b0ba082ada68010b8a65d1fd6ac68f0d2accec67596d5a44236275963596dbae231202f1cfa9c7173de77914416103d19536b3f1f5c3c46daf841e9170ed5e9220bc3b63a845835421dbcc1b9a98270ec927d976a7bd590b9255bba478f1ac2a3622e21ed8bdae68c2ad4b61eabe311b532acd6403dc90a47851cd5dc2563cdcefd0c781f594a0bb8ce68785c655ea8dbfca20588e8403cecdf2d41bc16d89309a603c1b734d12d30d12010591f18bec6b5042c2ac561af11fc3506d1aaa39bbd23bb069d6597d35bfba385ff213cdadd287d510d1c55ea1ca5dd2d012be96d533dde4eb934c385a1139adf35b2f0858a1cb37e1b35447577a0cdbd36dfd59231bc11a2f3e87dcc6ae3ac27e21b5c4635584eba3b5755d988b5acbe57108c91c168fe0933cbef2e1e318264f0a5aaa544a5f70e55ccb09db9ae23394c0439f26a094d8b61233e3525c6c39e4695ff2a20cb568052da7e497152d934fd03023e9366a63065399569e86a18ddcc36865e3192121b18cae766176877ba52570ffca648af0127551a51cde4292a6acf64c8dfc2d3e490e4127b15b9a4d0334789b40a7713058fbff5753dfe9d8c08a7c4f1932243e5a26f2810d20d0980881a98ef27bb784486be4f5da17e1d0c8e07cc5fb37b082537b550adb62b4dd13919633365dc87c7f29b50925f2d50b1e437a49ca995caac35fcb3db29dd19cc2e8c130b2ca1e795bd9f1f9be1d3df83f37f7530db383283868d782193e915774fbbcffce4d340b6cd0fe5008d38718aa12767a1b32ce7b110b0c8085c18e8dc85edc090f53a3c330c36c94acd23afcfd776a1799738923ebdaccb17ec323b03b66b0e4ec79e8113605bf400085e40597eb54c3ff126db3373cba8d6acffb5f2cb7ee0bec2c7b75eb3c58daaa5afce307c2d8f7c28bc69971c5388cd0247ffb3ad6c5e694f7d871decbdbdd00edffe5dbb2393b7a4c3e5729f8d928557d1c04e427db2d6d4879957f38bacfbaab67ae721e27f78cd02f6cce4c1ef851466a1c974fb018dbbae9414b07781b2e1fbead698b17c480b4345aed337c6559fce4a2e2a2c76176aba205c0bc9657e1b78f53307d7b2adc64c7a1f5436407e62d162854c5a36fb4b73e638ecc87fe6c0f34405559d483166e63c284f078587c33692d4c1cb6cc1c4a08eaf3bbdf87238357f546c4b675c53d933d0acf3bcf82cc7812573c73ef23f0bc0cae0f0f7aaec064d28332936b5f5ed081f53400e5a044ad77f4998d415237a2390c3a9a517422d568a927edec4b5ea631d2c36a233b3883eeb2b8557b2d8b65f09cc302940a374438171948611f997ebd3201fa10ea1495c6f01d5ef52c6871d3de4ccacad78a1bc16b8b157252abd4948154132703655d916b3d1c37c55b40535f1c756e7277d68504f1e7987b1242584f4e67ee3da735ee52ac1fcb8ed07bef8dc674e751ad0f0371f2313bff4942590a654aceef56d93e64cedc18ef646f18e8ef5bddfb762fbd30e074d565dd5f47312d3e51aef091f20029c3b87d83a4500eeb8caae68fa322d051450d353ae38351fad51ed3010ab9b3517922afbab6355e3fa9e6994623d4ced9044be3de99adfb72817f12049de60cba7edffc761f29557016098a260c338acc451a0854cc178c18e60ae277e6176ae92748fa5239bc8311739c4fcbd6cfa2cf89dff92a05608242553abae75dbe5c4205161fbba06f7598251740940e29953745366ccac0098ca3619701bf7f5b6f79ba9fe32efda2ab68acf3031b3ca1d0b7f995a9b3a682e9a08d985d8cc57f02d49a7ecb388bf673279dc80dcdccf8f3b629765671035d57ce5bc734bbca89b507470b5e54d5fb8b4959fed728597f6cb66770e98f710925813eac1de8f90c047622fe02f085f24252841fe5b74ca5aa2d05edd96b7a16f16db8af7f80cb965fa5b0af6fb7f6ab36b78e93c007211c3aaeb765bca188f739f85c49d00fdc89551a9297eb07b266e6fcec02dc746143acafee70f9ae283a6d959c23c602868553493b500b5c43b5c1971ee5b19ba7ac6ea50d9826fdc2411ad9fa95b7f553faf8b60d6057422528652ab9a4e5f94eb70f22a733ab2d01bbb039ea483c54ef5aa3e59b314545d13f200c2ec8cff9d113fcbd4ddc1c9840fadc49fd83b9ada334e35c675b5bd3c25aa0cff0d9f639d913b5b96409f1ec0a9edd6ea700b66c0a1a459ef4370178931b65faa250ff15c166c8bb8c45a174e918523c7927b91c9e6b3901b46cecb0ade1ce00b5b6213a146db4481907c1ef56e7c927e671483bdaa84c393a6563f88d5e67669d8223035c98f6c3bcd8d9a7ce8db0a56165da564971ddba08a91dccabd1c0b0ec4d6afe14890ec2ca213f3aca8a97598c7df5d855388be881a050a9a3fc486404607fa6b6be7ad9c3898904d56eeba8da42014ea86cd5693803c32be03e8ce48863c789bd99b96d5b6a3db279ab3c17ad2aa3359d9f2890be1bebaffb08fcd6eadfd913b3bb48e1e45bd3b011aff72aa7c05209bf301413668110c25eec26af9e3d3ad11383b7fbe0d6c18a481dab564c8b745787e01655e3abf8ef867888d334f4434e7793750fe353bdbd9754c72efde4a09b71ffbddc98250aa40c0e91e621ada8e83a5b0e926e6afea669e5e9194e746d32280f691bf664ac7c4a4ed06cf6b1d24ad65ae327e4752ae13a617fa9b0b310d7f49fa698a0e374c4db99d2bc26b945c2f613a134d81ab8faa3280954c71951e9722104d71a39ea3a3a700768242c79fd0405b74ddbb42f6f1ed9f4bee42f96e32b13e25bb4d08338e171ecf59173e5657ab1a3d741ea049b27c7e02cba5e66518a18ed9b133fc64d6b1001f8d1282e78d497d565bd24cf1b38a25a329c3e36b109808519b7e029e421cad4c675d1abc3ac38fa7dafece57bdbd9a1751c478e8e33eb375c155a2499b012d402f1d8e3b26c0551838caafe297bde7448bcf2d44593d972e6ae165cda90789e12d7d67ce18e9d992bf5f76f90b3314141f0c8be73a3abc62df4ad29334d7c819a9a32cdcd9e622fbb5e5ab06dfc7276e54a419394ee02bfa69b772010418f2cfeab765cd325e383d6383d770dc202a3973bf5fa35dd4ebdf4e50cb80e07310eb39e29a08e8f9243e1162819fcae7245fc484e68b2ec104f7d63f677992902954de4b54f7c660ede807aa31fb71c31ec78f1c355a8a4d7f2c4ba9ce52e01645f4211c1a01933b9b218c826fec985d1f591cafd57939206365f3b9867593ae6cb2497a758e163137d3e912c4da095c2ffdb2644c4e03e3b88a1894194873ffa776a08fec0618ebc7e56783b72d8a69569b9b632443b03e868200650f3547b2fd286c8307d26111563f4cfdd14de42c9d1b1dd5e4bf07d8d637f352eea2d96e77b1f67e4e58b94ae9c9e0a798a2df4c0b6581e2152ad15aaf903b8340f9efdc1cf786a74a01e83e8a6b6daa96954272a9620fb13eebd66b1a751f218ca152a3f4e364268235b596400d392e538cd7457ef80e6be76cdeb41ecee6545b02ca6c075dd7247e5deafa14978d5a56f0646e9210c8379914b1ddc383d94334841edf5e4e28c9c7df4d110cf1b156272ab294ed93833eda4b168d117d40179f8f18a3009ca03ce425a7843303ed4b4ea08960986788a73579d76c11a263f7248b7e61f53185a65d95bffa8eb6896153bcb07a9a761f9b2f06ba23cadb890c4ce019c046f31f2ebb995f1c27f0ccbfbfe5f189fba68f42525b885a4411fb7e9ef6b169faccb8fd85984d92059a008e1a821235c3e122c325de08b8882a0274a3360e0319a3963a43fa5203309d6bf5eafddc28fb0e1e4730f804e69d10e416e106f737ac5f020e7e263618b1df551db9bd1707ab15ccf5fc11428c8ba9e98de2cf35adb9ea44a1bc86c1788f4a082d0e2a8b7dd9de74f610928c515bdf5b012efa910c4b2ba41a8881bbcbd2c5cb4e72acff308f505e71f4e1a8dd149880994bedd0fd670a6aa1677febbb8337e5a86cab3dc8d455d18f31685ed9bebea27ec312bd27176fdd60e3e81aeea88a9f62848f0beeb1d417784e8e78ed623807d81ed01f336242467c8325100c4ca541a542c0324a2cb67653d3babcc007eef7cee28ebdc8516bed20cf9c95be747013982fa77a8350e137484956f4fbb5c8bc8899b6608fead31a7250b671ac2ad35c64d2aaaa41223ea18137c9e64574ae9d2fcaafd02f3760159a8ddb6b7d75b66630b3328c2eacb5fe23257b5b474d88e1ebfee1d55140fb25c10f744dd95e0177255ba8e6f0f52f94599bd41aa9473ed1e3bcb4379d0c8d940f5ce7dd6aeb9cd86b5172812f0592ad49223ced126bb8b5408c90bdbaa3fca8abfe9ee4d5266fd1291dfa2594e5c88f1b411b9a2ac0dfd529f6dd31510d32aabe7dff29c51763a98748a699c69cb782f881d9ea9a4e9978c7830359095215e16f5f7476e0c55eaaae59e0a76e3249d00869dea50a1dcfe742ba6afd8b7b8f97e72e6491ce38491ac6d80f1534b064bf7281929321366a6bc1247ae77f9087124d71374338780d42f64e9aacbf1df2995f515e7b88a0504a6c479cde8b97e49ccab15454c68e906a6742eb34b881daa4f662a827e7636bcc6cad36a95a9a907b8675258c1f81bcda413c6975c6e40429603bd95de588a13be9deb21192a072f7a84511b3ec5978d9abc47c37924f586fc4645ae62a15dcdd0a6176dedcb2725a59a98090d41eabb0cd638c41c4c9bec04b66928a5f1503fcf8bdecd8dfd778eac02adaec80d93fa8d0a0015c035b1e621cc8e8102c8dfededb7d7ac644176cf1064f888f97921b07dc044450f70c609e6112c6423887b5cbda268a72b27a36b552a1f041c24f27151816bbe549e46cbc3fcd93e62c0a100d1d4283a2d209bf7fcda77bcaa91a4b1cad5ecfe2a1eb2a04e080b6c5af1ff7ebcd58cd1f4ccbed969ee991f1f3fa6f62c364e811a62a83be6cb399a76acd52ac12f1d0b1c7c9a944efef9b7f49f87b3080b16f3801a85d310aeea354041c09991394f31feb09dccfe542ff3d521a57ce0fccca205a6da2a6e3ba3c93261404faf9c9a13361956c80aa6927f0b76aec84963d6391578238651f9ecc2d78be2b17eb193fb3d175439f66ec79631ff0209a3e8da153a3ee09b6e523bbeba1216737120a3668e2af477440545f5d33b3dc572e43eb2de4b9fbe15dcf72934a459ea39626ee1a3d4d6246612740a59bbb09058fe7abe8c3ecf82db12d57ed1a33b9a49ef5cf918a567b5ff1f08404fe108dea8801484ce78ee7 +MD = 5d6a4e52750c418a7e6179238c98c8b729ed09d629e77d498bba4170 + +Len = 81016 +Msg = 7eb62a6a058f8eb117e237085795081ad1538b968dd42b8d635fa41c108db74a8a4f22339132cf6787e24c8d81ed7b4c9eca8b6b981a2636982dec244fc821b84226a2a5653c1e35ec4282eb5e6eb568eb03868bff8ae3dc175f4b2bd47085744d429306aa35e2e4ef08c36c159f1f365f04653febadc84788fda877c70c4d4755abdb9f87a3823c373ef656cf091f80a3d711cf84093e3e910dea515125e0f9ff6a64b8251068056deb03f2b3321e0c5e847183f128ae8bdd99fb019a42a652f5861499ac03fb073818d188eaa485a339116ca25b927ef412a8c2cfc9eb071adf07d5894305a30a41cc4a609be7ba0ddc88ec76e9cd1842d943270306a96b1864f68ed2129dc8d52f0f55c1ef812712eef0d845c463e23dd97112e47b023a152d5a27ba4253d231abe9daf50efc327a1852175813dc46acbb3a6bbb4d80dcd9e23b878afbaf2ae65d63c2421fe0450c01b593f7ffbeaa5826a61ad0a7abba2c2aa19889643a36bcec84f3f14ab3c7915121336ab093780ac3be086baf0a3ad6ad954101a67b5f7b01555649b9ff20d2b29fdff84de217883a891bd48d25c59e141e6a38e8fa0dea43dcd394914bb794ca357feafe34ef9a320f3c526a84c44d0745fb775340a9d25b235318fd20f6a241eefc88ed10680a5359542f6eb09dab2d11dd060fd499fbf032bc1f230544c3c0cf3c1a3ffeea9f466e49b1c030ba802f8af62d433e472dab0ff8ef2b8209beefe228e81f86dd20b3570521898c8194b4b82f341807193034c4edd03e1fae5c752ea83ab331a956411a6ec7f04d5caf65a47162b5b679cb3259850c84659965fbbba5572386b60999c16eea1efab298ea55a20142d3cec84dd4a6ea24db33a128920588980e6d006353ecd33a1bea18ead3ab57e9e780ed2e3f3ab1460ae4d7a5bab2153a4f340546d9cfcb6d386ef70e2775add079f7037da128aa147815d1193b924630d374deea5a0118dfdaa5fdfd58e74a1f119ad1e103581db3af2c552d1e8f62a3229654f8de6902b788f7f15f6ee878ff37d321036cb2514e37932c896a90b3bac2002f186eefd31ecbcc9dde72627d98740ab98be41e900b96b01ed4277c7f9e3d1c37f1107bd13b2a8cc7206b3ca2114fa562207484201256edf2b65d3d0f761b51342ccef546372d9f38cd615e2f92510de46a22cc4a8cfeb172d915baab6be206ed70b04578395c6eb88e5cb06c4500aa0713f8de56a1176364e257db9ba51ca52b66bd54b06a405f0f0b6519a050e7e493c0fea28c78286d917c2988264b5095b6b6fd0835f160db04eb838415db8b244f1b3b01343ab936c14d95a99585073e5607784a51f7444b60d6bfd6110f76d004ccb7e1950e5326bbfda226307dc808d30137034aa47515eb7620f8dd132f527a7b7a2cf81d7da5493558e73f581b5bf44d4119691f7aa36d70aed2c1103e1079cf8dc8a58fbf1b319dc0d50a41889f82939e76f691db5bae6f714c042e2c74c970f79fe48ba1f03cdce1d6d95e983c467a5700392121a77519724ff0947fe43107c097fd39ac8c329bc4d3f3d7d29a05ab73a179f8d3ee8c16b8c1cb6bc2ca7b3cf19a37c26758db816fb5a1d5bf218acefa40003d7997b90f4b8cdeda7a8d6db6908fdc4e5abaff37ec622b80e53a9c8af5c414199c0cc5ac3496710a3195d01ea85d32040e1b656443c4d9ffce4b02876b17feb4c3b478947ac9cc236e4a6b1b3eee820d0ae4d6b17ac2f27b02be856e6420063576f79970250b364cba1408565c291391d67b1ac59b43c01b07f9ede7e8c773c53d3df2e73e46f9ad9c5b6d7609f62fb7fb4af94aad3189086766029900f48f8ba1ee49a2cb615b6f9c8763244e3d1ca700b73be5b9739669aa6b8b2db38fa0b029726748d744a5ba4200b20832e6238a6d2ca740c6f12f675672524a0a80ef5b5e32148267d71eb5172e22c9bdda8c88cb100603dc939c2af5e21d990bafc4b5c69417f885021089a27a7b10f7ff9fc8a1cb20d6034124d90e23b5c2c00567e6eb013a5138adc15d6b4a8484e93ea47377c5bd5f44e3109c2a9de26c31681f1555e2433689c07a5afb0706ce9a80e2b0d665a549a661a89dd0b86b3f65c1356a8a9dfb4e7e2383a8d91aca9512aba2a844159f3a32a3340188dc1ae564f9f10e149c2a4222be246e8de995825aa82c824b3d75daef91fcf3db71b50336f69b297b4598b97a79a5d5a0de323d7960c8677343edd3e51448994fdf0544e4a27be245020c5c903d4d049960676d77babe7f4390d0ca1c125f1b6e8ed24d74e4d962fc3a50d36bf0662300d6feba5d9d55f1438ce56a9d748aa2c0e6e4c9f1a3fcd127542ac5137c365c5eaabdce32f3d6e6fb9ff6586f231156cc50025e60c92d564fba63da91c706d53a436d4efea38985f432c93f9a063c5e1a32f6b4cb3db419fbd3c3bbecbb1db61c09d6e5c995b6f7b5ab28c5270452e232f5867439e7d943b30711102c3fc5288c64bf399cb1a563c674d9921d079d0c9d027b46b3afe4fc00be17805a3a445313bcf1f27edf9ef2b0f3a44f84f66302e2c09cd1407d1c6b68609bb47c96e35e387935b97807e8ccfa9253a464b8edec8996b3bee839cab9755566549d3aea71840351369111cc182cb8ac38c63783f31aee86b4b3cb360daf064007c20ea1b67ec30d10d1e592ffcfcc79b4b15a6d3f1e2fdf5caa1ba8909dd9f075f5fa4f52ae1f33ef406b82a86a3880bf2e09f2f71dc0845ed412686ac73740473de63e709c80897de78ce33b85638a02442c5b439d0b3d613a96bdc2b589f625a3bab436d14fd95fcd2effe2a8b55e25fbacf04c2877d40de290f1c0f035dbb62d5efaccd4f2e940fa3a1cc35c96c6cf5b6ff93a456c0f0cd6e94a8effa5b7a3e5ba585b2dd381c677998306286e88a86d5ebe357d52b8031e8711516a3f5293d3b7150b65586b994b317cd495a56d59386187645692959dc0548d34ba6d732ffe3b7b0303eb6e627eec4e552aa33d8ac4619bef5a926f80c637085c7696e41f6e2fd06c8ff351c919b143b06fd1c0e21a4443ff11bb0d543717c8f426216b0a2b7c5d6d91d8dd752367a10eec95bd0a41f4c7bc027539c21cde16225278d1993e086a2f9201da0fa4f8b1962a58feaa41576f4db529b9717c733a0e8302dd73aebd3fda1ad8103ea54bbb71b0834969235782dab23d560b5fbe7ce24027594083822395afc446ab2c4807c6067c67efeedb4a8d821bd835cea724c3124f0baac53e6088db2d46fe44d7dcbeb5ad20e5aaca0d8cac290799cf1679db80e2bd577ddb3cdc257bd6def2e08481447c3bf3600e14ffb8d1abdf6df3c452124835efb34000b91517bff3404b45363b5382c0178ea70f2e7a8bafad264d5050ea3c1b6d55f3463467c8e6350068052399bbf5d7320ee3978b70af99975cfcc32e9983b5025fac09d4bb5fd9e8341782b6af39a8e290a57b6e228a382f397ef27d16ce922f8a121dc75f0535e9f394e31226359386767a608a69e692d42cff654079a40dc4bda1f6a67b8150eceba4cb15e8919f06098cd0470d6cb06f7ca7a5dd8baf2ca940811edad87a33da666dc427bcf4d54a8e03520dd5c399e9729d39be1494f9c75bd91dcc3e99e499aa1a55b06b063b3b50076f448a935528560aa949dcfe7c0456d179e374866d13ffd10718be70dcbf96bead54f486ed1670157ee8aa93bc497893bc8644e8d52eafba60c77adabdbfa75397a6db42689a07e73f0247fbc17f0b446d1f746825d401ffea256aebe824ccecb2a0076fce9b64a774fe7cdf938c550f1515cdad64ec3cc52d9b554c64d44db288ab40b62803d07ea6460fe73b5a9f1a3bd017609a5ea937b08f02a539b972cca0304dbf7db991945c41c8bac0cf308d67b81a28d012907afb6a3a9d70ba83628295f731d5a5ef101e5771012ad5529122359dae0def39b99695c5dc0fbec79eb74406b438af341a74f0d06381534b4ef2af6a9959dfeb1a0a766b0b21af87a6c6a342f2afbfa6dce774af89ce3064eb628e4792bccaefc5dd77f4d2ab740ba2371c729041bd8f7bfe4bd41a1956e590f73afd413f968ee39aff27d8b7f59bbb93156039f791352242de07bf68ac16673b1b544de92c0d9cc675cdc64c1a7f1860f8d293d723e1f739931220c51a3e95b599135fc374b717eb43ae4373cbfee3292c9146ec5bda226dd3bce43788a745ed1d041ed356d37d90d092f833f06141731965fb3b226acc6607ccb4c7de979d6c0ded3323bba8f53e84418c9471f15cc827155ace5ed71daa950b377b0457c5b9d39745bb897fa87cc782a89e36f35cafbe6b0aacf96a3cc3e741165de32fe65cd5cafda1aaa0bed2011ff45a27b269b1462db4ddd96b52396335f875616628de7d4d03df04535ec89ade17cf2d75a9552724ff6ae822869273b186c96746b2c632eafe7d81e0b0e7fa88ba052e834723c918945a0cd601587e7b6864de15ad9c5b679681088eddb68ae58405132569a395d11ab52fd1ea12ec5c454bac1c40e9628d74f580a70dbeb0bc1ed6c5a3385ef1163a8338596a49241cc588bba39433ae2440e0d3716785d5d62f802b45dbdb46b09ccd0fb7a98490839121f1f2d005a7f4a14be835149562fc600c2c537aa2fd68e79b9c33ce4b9759512138501de4b5c4403da73a3c76bdf45981b2143f3c7c04c3f3c7140226a165ac8d7707a35a405ec5bef8ca05ae5086c1e7a4d150302d4cdadf78a46c9e16704b6f965d89eeb088d7d6c32b9ac7827c4147e9d2d506770ad1669729353a5f42d6ce7c9bf8296d0b1e8ef0a62149ba9d80a86b5ff747c10453900cec8483e2a3f4b313081791dfaf44ed6783c3ba62b0271211c0dd7a75030666bf358200085b4d2542ee0fb06f3beefc110aa7a4e17edd8dc33cb127facf92ef984c563939318a2cf193070e8379c6c2d483f68e9fcf4b22691c98d6b830a03480782ab6deef53d008402831852f74479935d701046a18d8eca9bc1017eed83b5d0223005d5b4f1a703d9aa3db26a093496973847819edb83228455c7fd0e10e19326b9e203e27110fd284ecef26f1afca67f19f63a272c824e45b4358a064b59a502a188d5f83bece470e9227f70fa206777ada2dce4e12aa24244c0a240836caa487f70e88092795e3621fed60a374e3e136be3e652a9ead2fcbfffd25769b8f76abc10a7f64564df0a51ba82a552d4bec4cd2fe2fad72134e76e4996a55ecd30dbe01e90d3a53dcb4020cbf1dccd625e1e59ed6f48098c6c94e8447bd4e2f7db2e73c12fa34242c789f7c9c01b177590828ab2c7b4a18ace87a666de4096e75ad4efcef0ef9d32483a4f2a69eab16cea93e80698db4f8aff3221275a82db0a3461cc8e7113268ab1f3af745bc63bd6e0c4ea6f6f26642b6317011c5d162feefc5792962ca86e9ab928912e1228073207981a3397207fea8eb8aeac727525f41718ca6c8029e600b25b8cbe299ab41cc37ff019cd43f326f699825e172a3db81937ec7828121d4b320efaab1e98c2d5a8fef4786e2b8e8f2f3c34b7d79fd7a97737614f60fb84e8acb5838b4daca42b3c979fe5f62172719d132e3020509456b599d168d740bd57a6d18fc54330e85bd2dc7ad8e1d07f8cc4a0f75d8de6e43e58d1b54af77c1716b505a7ef9beff006102fedc7ddb2e61f3a77f8967ccd57cee561756c5e2822a43ba44470c4146ba889249149364346d7631aca81697e6f96cfeb9a5357bf809ebf4fedef3858abb1823cedb387fc2213d2dbe594f0648c149cb2bc8690bc9154b46b1cb1852740cfbfeb5bcd4f6808731e6dd257ae2a4dc6b069247c7599d574bf78597e170acb4176b273ccf8f15a638a32f93fdf3a153bcf619abb92f1dd5d451a1c9b8a6d9bb56b14ce592132a863babdf2b4101e82d22e5e57ba653f099cc9a2ee904bda32a9e1a4b3e8349663023471375aed420728719213ff68ebfab1d1b53802d7eb408d9ec4ccf0bfb72abd6bff4faad33f22bd2dbf38010a83211ad1c39159baeb15dee70792193eff5ff3e5ba941a4e8065feb7383c45e69f0d566e50730b5184531c5eef8bb81ee983542635ad2fcb90316ba29fa964799a2ff2ebde659e583168d46aef1253ec00354c91e31361e6f92582645807b33ffef95efeefe1993b6cc7859f78de8332ddd64bdd553f470d25a2e190e3cfd8a6480a190be76f7257a10fbe613f38bc7fdce6e05d0eb945ca9049f7bcd57a3b590fc2af976777c04978a1dd5484d9661f7807889571f9f49be37b432cbf9f51a4b0c39125d282e98d5e1e60edfc0926be5988d31b2179c9fd79c74274d487c225d58d5c3bdb29849fcbd5e791f76064c8dc1b2e528fc13c5bddae7429e6fbf358d8706f4dc3c3f80d3c88eff52977a6cb7a1f18d02f68c25389a156c059447bca442d48d04efada323a77d86be4a76332de05111892c90260f84078bc9e09a1d6b3048767bf3691cb40533f7adb88309b627db5902c7a6300c3fc488337a42c2a7fa6997896ffb514e88b93b65092856191e954db8ee57abf574544c8b8ac711234740d8788becacb9d816382f64ee821f6c89d6f2ca2aff93cac0be193aaf74a6c0d3228e71c293bc9e52d852f15cf590b9bfdaf783a795aeea0fc524b08452f70d2c5b154608702182760218dafa1734af3d42104056d30e7b494bf614cd13dfd5536d533543aaae2b899ec7445051d2f40df78529c0227a267737d58f131e26c04e3e9163fda92c429393a859e709343037e09e686cebbb939f710a49dddd947827b816fbbdd5626e9dcb034146a8200cc1e4a322e2949969cce0dc69b3b7f0a2e6c22c230c961a58ad2d2024f5975f2fb5eddb82ab87dc51036e95171d1404e99143190371541aa8cea146297d3db9431ae28fad4e2a4cf24e027c7da45c96f2322526c574772b05050fbe786501f5edf9aa07ce53e7b1f5b484d8c0cff86f68d04f9b8e9d6715175c5fd13a354dddd7592f8b0b4325d2013eddf20b274e57f174a9c089758ca087da79c497768837a94258638ca54b78bff2f3128433c71635251bdcdb834f94fd8746e2b6af19cc0abd0dd67a01c36bd6daaf7f537bcb73deeb8d39af4f16b8206cac72c0686a64a3d0362dfde0f473effef983a187c33791cee71d2b624ad5999094bbdc29e2c71c86bcb13cc84658b264ba6496e0152af8d711d1774354b30ffce706337be9bc1ce485a7604421e1c616d86b590d2b14bb0df39dbc7a9a1a2bb68b9bede5e70c4bf47a5a90d9edd8d41c3de013966cbd827976c8229086d295c86ac231f0447f53bd8311f5111203837ccf0beb043fedf421809cd00c7fa2f4396bc3272269ddd9478913b773f82a7c4078330add0e6bb90ffa5fef76ec54f11275e5f806bcee889b72a9fd87081767701fa297ac40007a4bcd5aa65737ae335a7272cc21a67a05c0281befd6a891eb12ac9ebbf63d74dfdbdfd51e36c779631949b0cafd9048fbbe91b1b7e7415fb03006709e456c8f8fc91a187e9b047c2858e2e81b21e021109e97b37a423c4a5fd1176067203718331d656aef0e56812b1e2561e61500cdec6721686370ff1aa0fec6b53f1005d972dda7159918254e1373fa65546256143821161997f8f4971abefbb94d9c3f98f513ca5fa340d9ad895f493a8d8f4cbe9cd4600e4162828876199eb2ba4c4b1e63c6b591360fda6335ebfa29b8244892bf89e68f873710b75b1798e9ada8923365ff50f2790c913bbe1ef57afea9b4594a4890e491fe08ea72c1cfa64f397c9ea3c583cc95bf64fccd01227586a7f7dbe4174654883fd1ea631e2c31c7867229c4203665b1b0bc6d099a696279a679e03600f0289483d37fd53697d13e17da9a71185107f66802581bf3b388fe2ca230e80a76a9dc5076707012f9cfdc751dba51b6bcf88c6e9c83aa14e6303ec3da92a13dc01c89312287ddb93873c827a4510d0160809a4af4b65f03eca260f289d009a2b7ccc2ab3f8ac4333e052bb5d6274c0223e9488570bbe2caab268d4217b0c9404100b0483542cc89f1cd2ca81a03b7bfee79c0a67a59da710d04ed39ecfb892047ff7b8f6c779ec23b13f487daaff542aa7a27357957effef983a7617078f048b2124a084df1e2e6031eaada7df1af933d32a8bad57eca7b56ece4420cf1a7c26881453c3e773ffe3137772a6b928db891ea68bef59613ef0e87cb62262c5696539496b2a8d35d11aca683fd0b5a36bb8ce992c943677163089c854b28f3a4ca5a9362f2f4cbe5275eb3f5dec71053a318794c6126b88dde2c733985780c396864c5d48588287f482ea6f652067e8b791ce0be1006520f6862541096803fbe775b7311f2ceb1d27d04c6ade3316a87447f67125d4cfe9e0992863208a656db0026e544c12c3087cdc85c4318ae9def0c2b566dd05e82e2caa452c6635417370aad63937b0c6b454162b0df79e6df6ada07f5f9f2a5a685b28000f42df14c7b9dd83526a7d52cb5e0bb0aaa8f41f7a0b5fb8bde4a89342cca0fd8e6f0e5bb4ec18fa226cdef397fb2b9b2cce128af3aa5ef62446173f281193721c133972d597fbaf3bb76c25a4abf45ef6cf801cde0b2cbc052bdc9aa2ca7e125b07f716944de41710c29b659be10480bb25a351a39e577ee30e8f422d57cf62ad95bda39b6e70c61426e33fd84aca84cc7912d5eee45dc34076a5d2323a15c79644f3a6357a1030e84cda10d449b4ffbd3255061a6dae0d9ffc96b74be1dfd5a7ae3fab0d0140fbffbcf6852a5e6235ffd9c05ea0aad6c273f8f85df4ff8bf1443a080e8c94816bbcffbf09450940ec26e80b6c3c2c56964f043152a7e3a8cf1e60d35d3e946014b27d9a19aedadf76a4e58cab2752bbdd9396e821ef2ec4b378bb38138d915b9b72bf2e42e233ac5a0c4ada980cbe552ce439734835416e42f5c18cde141bd254705cd1f169a4162acf806bbf56efd0e8b354693214bbe3e217ec67f94c7472c43daf3bc1bfbcdb5d613eb67d8037adb57380407bf80ee43551c45011a16bab8f2d5ea2105eee3a6663de418f33565a07c7457f8279aadda125c1bb93bd41eb09d1b3cb89c1a8d1da39d7a330ca9c5454010cace1f4204eba266d211beaa7bfb8cd770e7a828d202d75c3421ec0aa2b1ec35e2f17020f95f4b63f26f6d3fda83072f0f18f0bfbb3d48a19b4a5bfe05cec70a29c9e2db971c567b013d0e3c422f564ba0b23d884eb73e953516202df5831bb826bf3c1ce30b0bd589e26a48bce7c054ab1d572b955603608dee05417ab82e666139488ae714b19a11c6490c4f938e72b9c0064f9803de292838d0df9c554a3d63a0ccceaa2091f12251732f031c09cc5105129c5ea71618905d4ab16443b565b35d918f3415f40343ebaf5ae068768bfb5342bcef28f4574cc63b5fd968b705d9d65f768edd20f8fcfcc635ef6020d63f135f545370c00be4da6b9103ad9a455e75fd2bbf5e5ef7d5ec816737ec4ed6a6ab310f9265c25fe000a1eeebfaa44ec9a13555cf82f5285723a699c0f547b3b7848092b5f14179c9a2a71e98381f48a2c1cd9cc72f2fb4090afd7293615494fb061488c4fb8781272743ca124d515b723f8eaaae4f52c37307509bb71abda1f899b597c56adaa080f73e9a622383adbf8240248cc9a77c1e8365bb3406ca0438a62a67c22883fd5e7a5f358fa1fc6914f2abb56985760891e7057b130fc3e243933ca1c21cc9c248187044a1ae06b5f6f796034e6b078f5499f8835b1cef669fcab3edce2ef614c739376ea134e7b9eff9cbb64263a138f003067a141497b5d6b157f2ed46511d62457e5c961ae89f866010774e558d2bec8bf70947e103fa70b2ef59274c2105a1a40bb58848518c44942eee79291491d09b92d7fb6a7b5bf33445c98428aff40cbea62280a56aaaaffdedc2cbc77c92259aa08d38974700e99f1feb0dc343112cfb194b841b7a215104149b4c170d5572f0e9d20650ae12d95a4667c903248488c42bd79f91cb19b20f6d23050211033f04354f6e7df9b94ccf82e4c1d19c76a87fa36fd6f0a3b95888befffd6ecec315404cab7706711cc9659a0afb16f10f15964aba331e4b29cdd5d0da3c458dbe7a0bf68f2ad35b64d884588381b86c76566fe861bd040b9299606b5acb6d961bf9cdfaa38dcd02b8019482f45ba155d4f374450b7c8a2a1c428f5627b1d0310317ef218eabdaad41cdfde1088fb7f450750b28617999f2ee52cc5beaf654a69e5ed733f989e3a327c3283d6527e49013639e5a0abb17a931517e404ba3e33c1355eef88b31d12d916c7b5eb32a0e73444594a4af4aee980cc50ccef1bf643d8b849c37edaa8a93a74e5f0b9ba11fe30ca455ccf82f0407a838e0cd8552beef2d744abac6fcf81d93f33d0ec493fe299306499a8c71433e2c316105ae65db9b22ac5e47bf3002137ae37b2dd808938d00f6d8d814189184c139f73e15fea28891b442a7804c8fbc87a483317c09c6567bf96a4c372dd8238fd70a3f6228fb00a3155ca2b05b8961dfc0bbe15a9c7fce2e9967bf9eb7ff61bd9302d13ce8ce49805616fff762d74aadbf8d071acca63b3f5d37faf1beee8774f548bc4b4803ac4fffd788ff6b61bf17276069649e23e6d6cd42c2d74b8ddcdb8642c8384f8371399906036d7d0f0845829bd1de1cde171c72f0e2f864c4aa1bcd59bcab0534e065ab0d39eca1c96c6057a805334dc01638d3aa20fd147b375b52f5624b73ff41fbbd53f222de7734902feecd0939af2a5379d6468e609acdc49e7f80c1a0ccdb255740f5b73c01a9fc91d5f309e9949c95eade1a525209b27e385ddfb49584f709023c0c54c34f10cd05c53dda6458b425b02865f2f1b02eb0a8f947cd580dddcf45affda17c49b42a13267524b2e1ba2c531eee1545778b8277ba80b4f351d5a0a90191456ed8dc3c44606191dc19f6d159267f6457470f1d2c0751106d3727a4b59a90e9a1e2cf2b1fdbcac7e9e7b03d4caade872e0604a94f4a838acfa61a02f1e3c2341e50d61e2d00776ee1322f97b311d425d29eb04d69eadec92088f7e3e542efcfec0b393df435322fcde4bc0817c329e64cf55c32014f2a7668c4066e1a20de6113fa40b1fee3c1b2b4e49fb8ff28a574a3f54f809fe12f38b0428fcc17e658939c0433a2d373ed9e9e1a20cef3a81074df85d35ecb08b5b8ffeada2464fa250d8e135937f94b7e9b936e87737bab3191098c2ef40e2c839d5da42f9f8ac60d76f10efb99fad53c539cc81bce2099d17128f4a96befb56290d258d56510b0d876cedc61f05e78ef6bc010250869dab8bc44a48cebf70b1a3967ee159d7e224db72c67d363ab9b5e8e082eed48dfd6ae1b66841f9bac96733f234e376f5d8335de1396991a6ba852627a0abbb708f57b35947caaa498be354b0f608304333b58968b51fa3e2506938f218dd77d6fa0e6b4d874742e43ec2704310d40848bb27e859d803ff7621de9be029d88c1993db93d3a54c66034861213933bb817ea4f6f53500cb16ca9551c97272318ab1036ba7bc104e862f3f6be1f3dd331e3da7cf2a9addb95c68216f3c19708cd645bf1b213756c225d08a2f3d135bef413e2a1d12fbad6362c75c837e55a32f01402d868b05e75bc79fcf479d185e249cd8b24d28c81e5dbc70bd3b0aa798bc8e28d51a6f88505fddd555217c6352977395b6ebe680af1cbbfcb9f26b9fbfa9ff785c63293f1052eb29e2697584b7ac881dce75c6d5be04f3b3e9461b9e866bb7b729ed52aaa5e971f5cd7bf30d1bc82ca96f776417e9caf63ea1b285348b96595da415765b9f6804d19cd58f6ced9ee3f1007d28c7b0b3360599a452f24dae56d471780eb25b731635c7029524bb85405d27d3af75817235a137b7ef483b1832c40881865f688f18aae28fcea4f41fc4764c373291fa7c6789e249c4a6e2687fa4efce67a35500aea965d9769e25c2d2b4f3f48cbd8a265e384ff67dbec2138fef7dbb3d3e9f9c2aa9c77c3750cf131d91a5b808589f248c34d72a64c058ae061c68d47171a6a62f348de48b6d6e84e7a4d7ee2fe3c7eb73f7fe72348c149c54a407a6aefd08b31ec23faeed64729cd36700f38dff82efa7fa4c5a47529462fe2ef0ae403144479beb4347d7a689df6340c7848cfc6ea58ac4374f27b446a68515aa67cfaed7d809083f2bc4c3f2a109da820db77ad9a1beee55cd5031b9bb7be09b4fc7d641e908b199d74f4d7b96598cd6fb87fb526896c11e514b5b4c26351859e2a33800fefd6fd9e6d1a35333b4e02cda98ee676eb4f4f77793819c8b53455cacec54938e59bb75b6f65637edbe7cfa2744c497388be277aca355293f58c01a2b2dac782bcffd03e427d68848d8abc56e263e503aae22256d053650d6b84128c9d1b03d3ba2ccfaead0b4c2b985f5251bb78c20f97e3c773533b5c1d5e410ff2562f0415294a3c137ab7175d468f18fcc736e98098e89f391b943eaa18ee803ba6c0d22e4f80a0d46f28d201dd4297bdcd42613cf5193111ef07149edfb1edcf5573760875f7825b550785ffa69f55fd9747322df69f0561983ce5e0fcb2df162bf2f789e2d76a0ff3fb363fe9cfdc25ebeb653ae3a2a392dfdab958b71ade78f0e55d9be047e05813adefa8eefab49b92d6014a0349940d8a8a99ee5711705d6bf3b125b56f6d9e7bc4b724fc4663c954b10e479fbd5f3961f38b8a26be1f2d65c5fa0eaa789849f4e9979b5cde7315f8249518ff268c7d2ebe9a146a4a7250a6034040078aeac146c495f357e86ce948d69ca56baba343b792cb746cddf12ef6548ba214ccea6f39fcbc15338dd4ac0a702ed62b742df2c5182892749d252f1d60e41c196720b9953a11e938f435c60799509386aab2f120f7b856c9b595bce2d052965d83140821259e57b046169f07fa0cc4c675b8aa90d883a9b54bca3b0e4cdef829464fc5a6666a48e1aa009fd23b695131fcc984dd6392717e884a16697b8f2ac5db5856eca47da214497a2e2f03702210686ce7ce3fec986d939fb3bb066d157968b725bb88e04f924a0cb4e7fa271faae02a3b2d159904ca95507ccc94809f8d16f598dbba9a35a0d63e99c2c99831498d89e9c08ca29fddb5e6d764ced1b1480c991913e1b33e891599458818cb3e33971357504d0e4fed1ce82e4a5c6734f3732b0f2da53451932ea420018ec62fb12550eea4ffe5fe44f1dee847e54a0ed67233e2efb02455084ae793f5d493ed0b5fc716864b3093285d516d2311832939323af922a78b342e90eb042b923a5f896e0038bcd9f6f6e288c825a68a196b64dac7be8e3571d54e2937dc6c6fc16c737a83ba0f503f0fba99cb7897f514be9e936398fa00df20af3c5484801332fe10aad906475913c6f7b8e2cec0fd7d09318595ef2fb0dcfd9bf2c8622f2794fca92789822c9b7b03e30f968fe7485b3463d7e52cf6ee715458731de04153f04d86191b9885bf7eaec4c36e23d57eb6267db2dbb51562a50d2fe6da657d3e4ddbefa717af1c6c25afe3fff3f2524896c9c63d00f354b3801068738858ac91b38d2cf9062eb74b77ee88e9ab65264e040488a1db4e7d890a454b44ae2396f32b4b8438707f1f037c53fba920e2183707bf0905f52f568e4c95207ed42d030dbbfd418cdb091c3d3cc78368dad2f1aba8e29392d4fca9684de62e4c83debb876e8ba91cd13476a1c030694e609e7954ee566c6f021f3cbf1522bed4419e850849de0511d968f4d60f78f68239ac78d7e101dcc607fed73cad2f183e99d52b3856dc9c927c0d5f8531856f2df066b6df89cc2dbc690344861cf784b310eb73c09c6eb8c8408b7f552f411f760a33fa12ef9fa57bb2944a466a604a5b30482648237d9fdbb04b1cef10924d86117a0e181a638e2b691bb024a054b15d80550c77f4ef9af251b3fefadc6240848da5b89a12fe2ef317ff3fc7c5ba02e18878ecf616aef135ad2cec1f9b984199041bc140e05acefc43a8bfd8e1798611d11a8f6c91a0eccd4b1fb006561c98ed0044f1b18b5eb56e757ef8fefd7b8213e2a4be826eafd3e2b3f2105615d68da708880f961bf12d7036e9b1e21fa7410f437c3fe0b4c2ed9b6e0fd5b8deae68f0a54fe59699fd7c2a0c51b42c52e50a2e7d0cda2d6bc0832103dcc7d3bb8c70ef5d01395a0c69ebc5821ec7839b1d249717bb59129b93dd9cfac3ad50b358eecdbb06d4897c1dc2691db8b38f0437d87499f082364d224333dc2a50d6cefa2ab144c67eccf100493d67873ff9941c6eea8c151f428955fd0e2f7b790e155a6cc482aafecb74fcc86ae7f4356953b22e237791 +MD = 4af9caca8651dc812a2831f9df4890134226dd8aa22c4379e3000d30 + +Len = 81808 +Msg = 95109f6082dbc3a5dc928faebe33190421214bbc51c7f140a27f10525eb2794d03409faeab22a6d4cc4ebc0421daacb0e865b0f94eb387722897c827e31676debec9d49c36837b6bc234a95bc10ddcc7b1e5a0d9a1dca550e93e148118aa239c2e73e8310c466af3280dfebb8514d1d0e36ac165338b71634d3b9c69e5b5a911bb05807613b39df365a1622d5536b253e5bcbba4ea071332bd5807e6328130c5ce494771341139f3e1b87eb719bda7d821a3379faf9ab4469f5bfe01e754df3fcd05e22c58aa697b041afa64b9efdae8fee7dd5c6b8a7c255c0d28c1ed77de072202fcaf65c45314368e7d391e15700ae44f54e5042092595d362e2e2a3256a533083b0045a81f45dfdeaf402e7694c73ba5454264a41f6a099eb75087cc6fa16adf4729de9ef69767d03a80d25c6ca66caf5779715e4adec70c6c30ec8f50842e4ec9321aed0091362dc301f30d202fdd36339415953c3f014af4d542c122d6e61e6921dfdf64bbb4bcf5cc77d2d9eaf701809a36931c141e1ef9476fab0c1dfc17ce0017ba4b9d4a4775e848f3bf6022dae794be9e13e68651208f5d9537e3d701a1d6a9c7dcc05e94ee5d4cb8f918c787108994ff493ca0ab13b4f2c6caafdfa489ac7d4e40ab5a6d06346d69b09a4cd1a281a0fee59ed6f37abe1888ee0a7cc82f897b979ee6a4986574914d0b6f1b804685cae210948ff3fcb6b621cb7b16343a758be91ffaa6ddb425a2ad331e9a5ca39bfaf5f1a7347142a3b4da888a15b15379958eeb6ec6069b4f87d14f2f332c62ce187db15e2b36f48df9fb4ebfe107229b81cc29ca6ed9c1fb2801882b4dba2a230cc37742dd0ab97c6fcc44a3e2fe4ee537ec01970520cf316d8506994fcca4a4be0f6cdab2b43979fd9593bd815d805f9f359c5bf3a16cf73ea4f001a32b775817a9b7ae13fe1d8b8b9d629524ee5f10a2f122a19f25415783a86eebb09f4c47fdd8824666ae0dbb022ddab4357794002666bbee7373f65824d7aae0def0cb7a59e5f22b148db010488d23a11ac1c63714de8dccd6553202097ac96795e59bf8141831e48663af92460564e43d949ebe559fc3c230919d5e1bd8f6093d4765c914b967f923f8b149e4ddc50604b8c49ccff18359eaf0e073403b574d3eded0f64310bbf252135f3e0b5c6f8ed9f4dfd96c1ef5176a3aa34a61e914bb01728586886556587d7e6178a1cb8a042311977e136d438719378de9672b56dbeccb2b81caff60b30bff5eff8f723df149d89691ac25922e5fae475a3849453668b06bf0f3270089645fffdcbe99b1dcb50e811d1e8f0d96a56979a5be8b0853deebeddaea255e64f065eb1615880e4dce7e032753f3d946512ecad0df39c8bab44258479741a3cb16dbcab57b867bccfcefc2b9329921c6cdc6e2e5859aacf4547e553fe2c3f747418746c2dadd20e2a72866daa3c80b9f7ff96aeb97f7dd8824678bcbb3f2815fd633054319d3261637f298938ec9bf58d18e0aebfd9882fe8ec4a3f2f2176a9b3ea5af4320b1b5f1141500ebdbe566792a4f69ec9fc5c4dff85f44bd877ad983e1a6edc7d7bff4faa75945ea7361288af10230f665c6cbb2ccfe17325a63f7a027fd67d926440cb956860f983c882c149070061137e2beff716ac35c541aec797974c480f58a25b68a6308fe1fa19b9f6e619446fd63c54f4f6bf1405be6df963dd1acc52cd7657aacb9d62304f39cb1f39d829c9f8f0a28cec849e85811f880ddddc9aeb374f78c2250210fd4c758d487eb771c05afb215564b725b34e161bebf60c04672a9017456f092cb7565f78f92141bcd170ae89b4fba15a1d59f3fd84d223c9251bdacbbae61d05ed115a06a7ce117b7beead24421ded9c32592bd57edeae39c39fa1fe8946a84d0cf1f7beead1713e2e0959897347f67c80b0400c209815d6b10a683836fd5562a56cab1a28e81b6576654631cf16566b86e3b33a108b05307c00aff14a768ed7350606a0f85e6a91d396f5b5cbe577f9b38807c7d523d6d792f6ebc24a4ecf2b3a427cdbbfb0d943c3f2ea7de041e5a7a501b03dc4ff052c84719e13acd280cf23a68033059bf1dbd62d9702a2c829e5c9e54f1496793abfcee5597df8ce6e439fa6a33f605c4efa789b7ddc99c4bf44a0a736e4902ec1f1e0e68069a48ec228fcc77869369e4b0029c111742be41034b7cbfa16688c557348e9b55f36a036dfd98d52491ebe709d6822f451df92c7467dc81b32761e4fa495636ad7258f36d8a46cd3478f594a12c255990e3b4d3eea61202cc14f511b1624e8135a07b84cb3ebea7dfceeeb4210b6cd7201b59ff1a11068712b6ac1624895ec416043b7e2f21e8ab4c1d3e0f307c3ff01c4d4f789fafa15bb094efbafac56e46772701a8403cac21a4ec4c6d778686eeac02fe062789c9c5cc3724c4dc1f6650818f33cba796f3500ec482969d312917fac0ce7157a5670c8f25b5fd719d2e2a5bc63baf0c37a381b32c47514b8511b42b122780d90d647920e8082d624aae1c2f547f1c1528a6fcbaac0368298b240c6a7d71fd55c9a654a708871c562bcf6e22bf69da6d70e2094ccc1fa1de4a4b69dd8b14ae72df17e54e0b9891f64a77675e915fb0ba1741f0911501c513ca6f11acc3785bd9599e733b7ba555eaae8f500b51cb68a526aaf8b00e129c6f14764d00ad05ce323e224896df1531d95f0071508814c8d5a4046ad240baed9b2f4a6501d224ce24978daa88c050ea6b66b01256bda299f399398e1e3162823e23d1a1d6b93b22576bc6e239a5be4b49ca897b4578dda2a60e30acbd6b702101f9f549a8ebb49374c2b537d016c71b1b9372f444422dad9709d10cd6764e938cb89ca49eeef5e923a542f3759bd32188c952c47ba1fa806d9504f692d8629f8668b0fbe14c68ec0b1a555c52bd4a2639751334131face5d1b7b1b1191b160f98121896988c7363d52cd6bc8c0394f2d69f9c8c3444aba16b79c08692c6d1aa69bdbcbdec37801828e0ad594ef6194d064dd51405975f7fe2e219bd2562fa37a27184b805d4f6d1ad40c27cbe1c41ff7189a613afa03146dffaa59efc76fb7fea3658ce0aeb3d570c53fd6c040075cfc05af7d359e787bd09ca4a703c8a3b4aea1520492305bd72ec21477349271b879bc9b09a2cf5caae0959f17d1027225f4915c46f7aa9dde9f5b386d7b51b9deda9dcb9b1505163df86b0830b9ed41888b03f2c89345f0886d010a4e16f6361ca939dfa60ec83b81829d5e6630e19858bc79941de7cafa30f254087d9a087d1e500145cee291433239ad204cd897ed131352ee9b87822174d9b4c19076f0f53089948c5a52e8b3bc780afc390378c6442a3030d5d503fcc08db3b40b2058451f906411ecb247037cb83720df63fcaa786b82296162d8e2a088d15e624896e3281ee0750a9324c91f84c25c945c9c000c51d926a2b37989a1458e3f2a324535e68faa3428781a5b01683cfdfc6fff7d8c6795b73e495e482f6e4ac4c78febd3d76d11cdbad3806fcedd07936c107f698527586978970fb4b74da78dceb3e3337731b7a056280f4dd44d92ab87e0945a631b919c061ef635e57e24f8a430d3eb42682c5a7ef81f9bbe449ea4c442e6d6c2bec1fd5b53ba62166a33a3eca92651c58ac06a89c629cfe96c6c1da5d9df55007b69dbecd7b4bfe6bc640e0c6f630d7d14145f2b14c660e20f8b84b0f7f65bc8fc19d63f1d8db5c2cf26a588060274d59ea886c7666dd544a89d685a3fc461789b226ac697adda373d0bf8e40f9d3e6b84fd9fe33d98b36de1e2471613b1fc9be3441817c88d93a0608476a4ee8bb0bb5173f902fccf81da262a8f79065783af6edf5ca742a588bad410ad5f15667221aeac30ab368aa7260fa6c0079a1d9d2f9854a6f978ae1fd322311b5726b6095ad726b5407d42b9bde9178726518cbf98ea548582ecdfcf85c5863f4194e2dca3754415773390302e5cdd2379af2d5177ff5f86d801e31e4f28508782e28562b7f3b4df93fbfb80d3c56843561568094921c6197d7a3092abd55092bf920641e4fcd9623b28dd426add59656016c53d890c38bbc79840b30856d6df3c25fde0d6db224be15ccdfb4fef20e80c45dd64b40917fc5afeac05f11783cbad00d4c5fa293ffb0b0a35f1ff854f69df05191556c2f449bc1fdae1f2b1c7e676c51367cb61830e3cb3bdece63a45594ce6f0d5fda44e224f7e45fd999013ce2de5325cc71e8be3daebce32b0789344da6e0d1cf5379624a99c85bf324d07e136e3ca1b79bacb1a8a14df79dabac9ab0c0cc650f9f76cbf4eed028d794314ae2643430a5fb0b110beb16a18c19b48fa5635a528586e2250a3f2550ebb1cbaa3707625cfe5aaee74dd5406960174a1c14d8b21f9bd0657973d4ee5b994347a5faa0efac2a803c3a58a7f3d7826e1647e568fd54b844a8ce19f554cf48114c43137702a891355e1313a9567458e6bf1a0058637a43ac532ce3ea7f365fe4838d6ad4c4d99b41bc79662292c74b46ee9d4df30b18a6ce0e9bb9fa96174884948ae7ff5dc6b16bfd74395cce58c4584ad7b5801eb648727f24836fc1fb6ab92643733ff4f8397cca0c749d33b029e27cd01e46c3dc916251ce298f2a692d4be1bef4deb1f59d3dca4a002ee956e3ad2b90728e2313e9652aa294a3f6e9f9016f055422bd474373a635c35717d25b81002097a065e2b842b3a6aaf2500336a475207954407595e905d6a65fe6adf825a38777c4b3d266c293e454c65e404cfc9e154dbb6108f966903391907d6e2163bbcdf842326a5bad72647b654827a4d18feeb6a14987d9b1ef566d30059d4001f0fb04610c3200cbfa2d05183741a4ebf3b39e4c207a9c93c9472088a5c3bcc8ec17826b69b2bbe3d146dc275314b512706aec050d6aaad4c60c94e08667fd80542c59a67073f5bf9fbae6dac32a400dae1d881438de6b3c8fafaf80cf116bf1d33f735b4afc17250d8e0d79b00baba556d359c1ca5e4792cc385bafa9496ee20f5ab7d11ed587dec2cc374b413d5fa210954954eb72a6a024ad7fb63c986e1db0840d521587afb2677c4e999f4ac5cc836a3f14c2a3f02c401803ddaf85d3685fc65d245799f668a4a439abf1ba44ea585a244b78788dffc880ce6c2a99058cc4278f900b93c3ca204ee0c9601343c6376dde3f347ae5e163eecaabd75a6c5186af8cde5afe809e84812b3b14df2c26c6ac56381f2f609ab969dee2dc52707e4d663a566b6094ad7746024834a566d3b01e7480612167f173f9f25861097addc3558240674467bfa2a44d3ae8ee59959bcb215e21d860af39a6ef568f06f0348e834ce3752f619cada3f4575a416d3330bc431987dbb59cb279bb248dd13c4c56f88188beabea0b3f4bdfe8af260a7716f8c3fabdb2cc8087793f0a84f2c4edc4bd0777693f6ad500a5f73412259827f5878a49e8e50f2360af63509cf1f2de7fd9c8f89f7449c29ab82285a9c77f0c77727f4e33fce44de321103dfc572de93054ab5388d0ef9ab28c49219c9327ee42c08950c480b5c5bbd92c1acdacdcd47f3797cf4bddc425f32a55511412f995fe799299c3f9e9548edfa02f36766968138976b51123312b02992c5d39ca5bc854a6816f59ede8c2053955c4603f3b6d95522f4d01299c738ae1b88d3245b651eb4e3e1baee61ad7c7f13221738ebaabac9aaadf44776ec6310bdf29280b73f66d79b0e4e96be75a7d0f1e8e96ec4eea016acfb3019510ec9f1e8b7842a2f8807f2fc1143205b715ce990352f1e05ff13cc98611610ce8ad7d22a3c3a994afb6cb7958f2b33af2ce6399c8b6adf2558904c0b7408c6260d173200f528469fe62f95e5dc59195004ee3165502f2aa987a01564a89a922df1f281eb76dfca74f4ab1e7b9d6f79b495df719927ee791908cdc932734e0d1cc604527835c39d809379a1b526d0bd636c247a96771b52ea6863d7f36895bf9915c71405b66628394f25c0211d1f5cd2d477acebc2583094032cb2360cf3f2195db557327d59f315840a0a4de4cde0897b2389079e07aabc8562f868b50b7d240a599c7cfef1a69bdec0e0aa224ee10ddcc2bf886ebc29ba4bb11b0a052e893fa81e4453bfdf8b32bbc4d3b43a24c6c655df90dcb8e82613e2917aa881efdec2b39def3534664970a7a063fab0e21a4992d4ad83010e386fc68ec7b29fc1c653b9330db0014849ec2ece01fc0b09441e003c75f9ebb0c91483f362b6d336e879358820528ad804fbbdb84e26ccfcecaa1a917acfbd5250a89779ec33b0d1ad999507b77b45a81335d0e999096b5f6c746e5e3c731a7587a26d8cb4a7ad048e4b642c43b8d63afd0114fc83226a835c03680d3b62679cb68892a66c814c5222e52f70559991031b13d64b9ce03f1b33ed9428e83c493a65c19351646f034cd41d638e5d7c2a9305b4b16136f17d897c897f2bd36f13c12de3ec184caf66574a5a8cb0cbfef75d358a12d7e1a49a40ae7d85a07d597bd37776095575f0e9f3de03278231908bd432ea971a4d9819f33220440156a9d5e3caee77a380a202c507cdb09d2ebf4c9a768c9aa2ab3a70f3b01836d8efceb67490c3c38cfd51452d6010a44c03f9de1288b6b9fbbb1a43d490cbda91b9469208818c597c3c7d25af7f529f3961cea4dee21f619fdd95e7186cc1bbb6439ffd11f5aeb5fbde8438cdae29fdcfb8bc35420b2d2e09835bef319c8036d10f395c1365a165764414d2fa84fd4c898921040e6c466bc35cdac0a2b88de85c8ca1339f6a1af4861d9d98d88c5307e153cb95769e11c757ca711ffe49515cc33c7618186b61cfa5bb9d0eca3cb1bc8198ea7e2d1905bd214cdd31a6b760e0afaf167e10f21c735fbe7189521e9fd6c4c92c028465a8c9ca647dca3e9b33307c4510ea1b96b16c1e96d9bd029a73e33574fed73efc5159bd91b12e285d5eb8a3aed3c08ab1b7365cc533fe4e38e46e5e2cd1709f45b5f9756535f1f68639d5d04cfda5f0eb945ea4c9fee1b78257d4a941524337ea4d258c4f7aaa1b9e5b346c9ffd1ee09cdf419125b8fbb10f44c29162efe39b527d6a5cc0ddbb1a1e4940e318307fdc5e0e8b8c68e0a0dd284194c0f208b63c06cd448169fd99748e7a87de66566d46a79888f10414759e75c4d7928f4b5f9c7fb320749b48e9bd576575a8dadd5bb1f213e68967b2de77705517909b16242f45d5aab0d55e1057119096fd1613bf90c5f72090344a6fea9058c14595f7c876d19b2fc0c89ba1c43592682578b82d75abb8a3bfda49ae7a5e66511c107ea105ab7a4c1eb58012974bd165cca32919d31bdefc62ca4efeb942f463ae8af9425e4bf97c455ca9e742bce41c5d05f5093b8ee09723a4b8e509e6996557762620e33baf3cbf0e87a45911210841119a70018d54007cca25f5eea1bbc2b15253c126e301f9f64b97be4ce13e96337687e2e78fbfd4c8daf4a5fa1cd22846b020a7bbda785085a458a9809593528e754bd6301e6a60a227c3899ea082f282000b48f49a98ccd7a9590ab6a6a5d9ccbe64ce8db20a50936110f55ee524bdedd2722973abd9cb86bb073631ad0c7878b2513052d3160116f74b9dbd436de6f4a803ddab86c1d8fd69e1d094113ddb1cf1afb011f9f41ea75af1c73c53950a40e12eba2ea3c771b626874e406b906e13ecbea26dbf4ae5bf1ca2265e9e50a43d2e61535f8b71324b815623e924ca9e18042c9ba86b7112e8bcbb2f867c172143d02a4dc0b6557727fadce5d0d5430773e8781064b71d129eabcb3766855f1e1f8707edf4bcdaccc60399f8a9e57026c20a0f85250a95615b7a40f25132af070aa388d86df777bfb03c0bf0d6ddf8787cd9718e6bde708b9998cad4e91c7d58afc60b719efeb2ac80f4a152ea3732792ee74c809bbb44fdf397b753809b409f796f2e6dfa5b223f82de08935689c4a532a3def047296934d3e794f2da47af57f1ff501212753cc5604880369e3e058942afc771f09173ccc518f23738aa000ea4072f0279d568fa93d4c6b143dcab91b95b847a2a8bfb2241ac3d953e2ae91ffa0709b393044d3b87f34a97c9ddfd5b0147a47d579155d1d401f5915d42d1287e8f7ea9f07a3ff4c7347a6e92ca9151d4f495f00a1a1a67f6cab8b018aa4ea4bbf10c5a04cfe7d2dc08d48a512afdf29ed2d776a4bebf311456e585f299b8110cec1148624dab4230f0e78f776799c9b972e775c9d7cad9c7470a676dc9a3fa1bc14bf97b9c10cf608d31f268090b53cf455471ebfdb3de8a0b95f8fc92a8cc53211ae1c333aed6d52e3237b5a7b90d4ada9d0f8da9009bd725269f218d2d043d8bfc95cbacebf5296466e3e29c2972b6932f83216247be39242aee7f21b73e45526f9a17403ea6b7b05e6b718ee3108d1f9a8139a1efa21a79114b67f8cdd70524e24318c64d681aa27752d4c86c5348c05c9e48f06ed41594785a6e6ad76af764033552876ec5bcab402eaf012bd78435f41ee1c65be09526de8005006a7686a030f5571c392c384b574342a1a809a9e0dfa766ac1d442370b240de420d665d59f9e798ed2317f8031b554222776624419dac7a1a597b4b3272312cb826d6c601dca09a72b32586530ac9202c0079ade8acb28e8966f266ccbcc5a2cb4d246b3847a4ce657fb16dcba4135ef6e9b081369b4e0671ec4610afe072c303f6fbb75dc968b71ddf6818cd85c8713b89a768cbd7c3847c4fe2e36c9bccffeaaaa924e2d050e70458a601e91e5ce96266caaf18e0d78b01085539832d38cc07ded95e880b11d0c181e7d39eec453a040796ce9e54ee8c98bc298d74435ab9b419f8ae8dc81006cdc1c9e86f5e25e578f2a861cc927cfbbbc1bc79b04c874b97d273af94a5dfeba1ceb8cacb02536e69ae5be33428077ad2cf9a68e7c752e42b9ef6dc1d12d611b5df30f5427762573e913ded6584126c861c5ff56b325235e7d5eeae879d96fb9299cee2661be7127051dacac14532534e5e5989bb1be993352dc7b174a4a71bc074ef3c966e363297569f15e7d9cbc1840c339067f29d9ecbfd1e6f64d66ae4c8071e4e63ecf43a2c16174939b05329cf8c5ac3e244f2baf4da5f42c8916708f1b6d8a24f26859b9726cfff47776d1ea9755b8eca817d6a482c16d620643fdb060aaad2c8898ec970ff1582918d8df27a5da24b8146824f5e98b193fcdd39fd5d79115a50b454663205a48d98711a57ea8bcb9496f2c5bc7076cc06ce5b09b27098889388059ad462e0e97acca0b6b152a623f48c14ac44566cd299056c03ccd7df8d38df1bb6a68c0750d4cebac7914b2367e5c12aaa7948d141d5429edc9efbb4ab94b6553c5f05ef7725ef1de16a4c99f3d2e6b344cdf04ab6460651d89b74ce4041be509050690fc8d8de5888bedf5054666d3d0fa4c54f8c65b123ac54bb7307ca478c574d4dfec277ece922116c1d05fab5366fb0304650bed392bc6d38494e88f266f587fd22f08dcb4e31d47b26951a5f2de952d9c58fabfe1d8d1783c7a1183f7effa32f22df84da065caaa5236e3fdb82011f2a43b5c79122931616649c029f42da213c54fbf7998ff6f6428a0df5bad14b779a575f9c3d4062cb88a69bb292412984ad5fb240aa79953a0bc100b66daa3ceeb276e994330570ca23042ca2a90842300aa9af1a5d21cbf8497ec31c746b3a06fb08e04a42d041749e13cb7d43e6c8c5dca95ecf4236efb38409d1726f92d732eca3d018cd4f596d524bf49d038b31c88bf52de9fa1784fe53f8c8629fcfa9050fce35aa42c13d06e823347c6863f18aa113b8e4e542203b31d20457b56003ffccee8d5933d440f3a82007a5d2efacbea46b7c6a845555ec961c01ec20f29c75ac9b43b010f719964ac8eaa3e3acb7c71e82d4c557bf7a95093d6d7a7305c729374af5398ab83b81288459e11b19972667f07e9fefef12d6f3cc939d1c08186cf5842e7fd1860b16d9f8e207d9c4ef6f291ac654bd72c2f4fe3010ce9c77f4c35fbd3bddb5ef2cf9c78cff62a02d1503da88488e30d8ffa1710e618964e400ceee7cc9fd8861f59c79b71e9c1eb0ac86e4bf71a6fa801d5f04be024815bab0e21a493539c96d1961891ddc1ea60e1a6ae036de296b16c07021d57fa51f9a899f7b892a1d099efcfb5e17a464c673e3124564ea9012fb7d9740db360af2d1ff698ad2f531c94614dc613af40900b09b2f9ce0237572aca936fa45c1f4301f86e2b0bd42f27910f5574b0e6765d512a7154f3f15441ab8d7d1a68baffb47c1b47d958e8ff9a97e132e63f86b15c4389b65e4c84c867b8e8de9ee335c7aba671c9c91ed3891cafbf2a4648f7b935e80fc93e61215a705cc300229d3641cf88e03e24e4fc9656e09187b953a0568f48a2f11dba32d4059c0629cf1d2333c92951ec1133cdedf0323f8f69e9eb50126c2b7823e01dfccd8299a2cdeb66664092ad1cb992ad5891adb18b7e913f6e675b93a4775a4c9b711564b3438f65a2ddc9da174389049de15acfc220d40479361dc0be42b02578985d4fa359918aae48d8c222d8a03b858a40827e7539a33a26bb9c0dab6b125deb6343bc397a3c5428c64b88a060b8d83167b005a8488276e03c0edbdb127910112e264408d2e25a259c5f8fc250e45e81d842a1df890af80ca8fd6efa2dc45ab3c6e284f11fe689e861e58167f927de1f9a21974285a387510853102f445a0379345dc41aebafa9191dc5a4b6e1ea22b6b53332fbc3b6ea5763f706a2e0a3d30a7f814cabbda58260d9e741d89293f0ec3262b92fcba9eac7c1d19b7c8807920faf3463cd1e30db639c339ff4948c11691895730926e64f492ac916e5c5ee072fcd6052a795b87ecd6e9108336d3b4dd66fb4a9ae5bd3e184a7c7be041ec0fb13e0ec6263aaa5314457e9c2bda70a6bdb40a6a449f2da67213fb3dd021be53663f0c0d826e55fbd70602316b9c960351f9255a9007462abc7fb75b90644c680c606c4ff1bcf4eeafb90274c4f5ca4714b6da803fb68d2731fe1f59a3922c9a1e428e01e67efdb7f8af0ddaca9e740e806d987f863569488d1fc1ccac33c57606661fc7c35cd6c46c8862d7eecf29b62f9dfdad260c60fb28451d090cb1ad986f4b60062abf26b055a5c000943061da7cc8689d71941abb8e0eafa337945b5db3531d418f1e53e85eb7a3c96d4aa2e7e26d77d50b74ed0648fce83fcf6445527d2d960e6302e4f8e21e6cb6dc76636b0afd89c846176e67c360551336a9f1f3272b68d14905604e8a4aa93d645c29d061093cfbd404055c980984e20fddf7dc4bed141e938e4c75a1dce7e197647cb45f110ff417c348613128e600ad58bd6a45e3165ae5160ffad3458737d817c2938f956125a3cdadf2297ef713b1d2b919bf9dee2ac025313a99052594b8ee91da6d16df24da8bbc9bdb5c368f9fb48187137e19e2874446d16dac31accc7171056215d8565ea5eadae14132d8d9769d2eec241836dcebb74bcb9b49d45528d6b11902eb5e9274bf1bb5de6a83f1a1627d93f0678c239409063d62cca0157d3949fc6e968208a0bffad3845c156acd77ffc5939646edd5c29d2d8338947ff72f5c86c96885338253d4b4c37601c7435421db6e131bae196a7d268d1c25e71f1f4542a3bfccb5c21155f42c46dd79bb7d805fe06c6ee6e77732b2e0f5d8fd6d8fb0aa7e2accd1c88eeafc1f4d0d048e6aa7cdab00b52ab86f3a5d1f4422256b071b38c9280a4a0e12f0572d0714fa4481e4af2e8e82dc14b9007fa895a5f1800be178054609711b44227fd5f389bd7679d36edb545c9d74eb21b50d58b8d455049fe2c2f34ed978a8edd09aa0efe08cb900973200a6c1618c2a77ce0bef604297c30372be4ef59e97bf13eb7d9be60fa5d8b2e301f5fa630267425b2dce07e11be744a5058e5805c712946908324067e6e84c3ed6ceaae1e484af454cb94db9278940da779173368d84fc63df27822df29bcdd5fda54566b8ff191cd755a4234105627372dcc9b97182969c41002dea3f8fb228f4fe7c89e6230a325c079db7eef8341085d4de0709980d42fc309605442083a84b4e9293f2bd0d264963bcff87de30223f2e3297bc41bb286f5d7d0796eacce46f2a3a4d6519ac893dee6462a223d138fd2d49e41ffc4a9cf8db2579be6af86deef5d5eec3c532aba80c3679d475a1b54e7686949b341611473e31d4111d90953955f820853c6a3df631a5bd85203c37b17e9af1b495b845c8fb249f357f100adcbf036b300bad90c71334a63adfeb30b4c9d9b4027dab7b0c966033a20c112f57859a274abf6744891555bc7be13920c6dce523fb786a4170949759cd40fe83286e3f0d3ba431d9cabcab68bef0c098762c2ffa06027f39937a1c4a3dba4296cdcd3455896697c0ea8d88437a7b0bf8213c1c8ec89844c3e3bb71bd79e487eab6274cc8ca73038a96ec8ed544dc65d086815d5aa9c66550ffdd3a0bf83c28ff8000daaf65560f972e6e218694b178a1e49054f620095b913653d7be3f3dc035a9ee50a1f09c06973f86d2efe086befce9ed85e9d1dd91e525c3cd5cb575c83da2445128d29192eb38db3569bec89331f4fd729e15bfa2dd5c819d600150bb67f7a75eaca1f33f03a8bfab9c95f3bff1a444ad9b922bf8da3931da50997b1455189bdbb5e51d65811dc8b7e0fc947fbc5657995aadaf1e6c4a38d6b6e4316d7583765adcf29ca0d3f66aecef69276ce2a9bab863eeb58e241e2b44fb88301159d6db4e7a70dd6b8cc13aad10522902151cc29d4fcbdbc272136d97a6ebe3ca62714f3926d67c401c1c9c9aec4e25d9b40e13ca66cb8e55d6c894313185b8d34fe126bd5aa9e5a8f2572518ebb38a5e501c32a2417459b2d2bc23b433ec4bd642b5161d9e51a610b00f58b98738d2fa69c583b7884caa53f65c90932696094e0b5b720c5a643a01c5a3abff5734ac487178ab9c73bb1cc3a2286f5072097d950a42eefc27681e16b3c2935cc43d52c307c40ea3cc560d8c66ae147ebecd1565b019d15f8db3ceaa0adaa34466c982f48d36218fca941918c46c246055476d1aad3ebdb8e5fdc8462b6a5058b75f9947822d789326fbabe34bd113b7ee0ee13e5220289ad8ac977595e02f1c2e662256773898504a0352966d8b66e7d18a2e4b3f6c9677ce36b8b2eada93e14483aa8bdcd5f569ac31998c99e99272b85f80bbc5828bc24f22b8889ab8234a821e9e6243941431d60ced40517a2aeafae5952a94f07d2cc3f6f351161761da7fcd7a742bd1793b500bca5c34bba4a321b2e7f22e44eef9d53a05b6fd66b3f385e6cb3bf64c98f892a4bd2ab43c745dc55dd5bce1ee55cbfb527c24b124ae484d110d14433407fc266e3256406b2e5d4e3d0ae5605b56159ed6a324b1efc52b2dc2bcb793462ab873cec64979c6473434d6d4061a1a4459384d3731a0168d1eb082567056e185a0135ce58eb0ec436501c1ed898fb9b529601c94c5ec375ab57db666e91e94bd558d8f1c90963b97824d74a40a31a83ce8aecb387c06d0d261ddf56a7c4aee165b3adbd7f98a32d7fe606583e2906420297cefbeae706178c669c5ddc47c4c4503a3d9b4141d60795bf32b29bd2c8c236e32d083e7c967a235999e4d3c133dade170ff1d8ac052f00d7e2bf1e4867e9b29994424a262620341f5e5155db040d596fac280d80388c08559ee79130eba1bddf8811d88ebcf006df730e2a3d3e43076d9aa9a6657508f762ee92ba355dd1a0dd93ddae5b63d2e3c261811a8ee966323663db6b05c68a13255b2863fdc461a4bd3c0e953620ae11f0af14ed760e5d20f58e25260532fba6c76c11523028380ea40b0c55c7fd6cd990e52e6a9fb31019d0a4f19d10c141f66faab65077914029bc8940b6b501f583ca8b365baee36767ef2ca699cc7c454c469b7d247a08603c2d3d1080a9342f57c82a96864ea34a517baeabe2e16aefef74c9cf98e094808e1fb0e57a4a9f039daf49b5b325fda11e9cb36a40f894282920bc1572513e8868b968286e4149599caa71fbacdbf8541779c24a7bb900d64072fab57b770d611223ef3f22353b1a9dde29d038199c4b843b63b35acbb8e27d930d197bf709f1d486cd945ecf7b2ce876f99c1e87f26fad091e0da7d7c43528ab7da73a7c3a21f60a888decb71379c59869c727cc01a6d90c7cc128842ab689e1d0c97faca9dabfd6aa9493940ae87c6d02b91b90d2d9516c0435a67bf44ce75e90e6132f5d027913bb101a0e6960541c4bdbc27d6bf15e503fd2e8632ae18c4a4465bfae5e826ae841694ace37cb96cdcd93e339d6d446e0b300b8e5d25cbecc75b049d1b543da7ec606eb7c7c108baa0e4a486c1b6c5146ea28dca9f6a4c60caa2e793f692c13fcd151c5c0411778d89869b7bf409fc9a76cb01d569da3ec336b4719a182245c8bebb19f408dc8a882f356f9d94f57f42ebf0243 +MD = 66745dd2f7f1a6dc2858455704763c192454dd269812e6cb4a9b0442 + +Len = 82600 +Msg = de7647f7a9c1a277bc0d6d46026a0991fd20327a5df12f76d19e4bf31dad893f6d6894a5e829f5d989d588962aa73185e22fcb61919a6159b933a1b5902a8dbd539474d6dcb421ef7779521bf2476c7ff3fb6c6f8e2921d417a799d13550d9a63802d0d4ade98e822f00b21f80d42149d88cfeed7c26d6b093031a8e35a6d3c1c6b991e58250a45958728fe8fcd6baa938ea67238319e7b5d44e0e36b8b4e4d8a3c19d528372cc3e9bd8d3bf8fd39e68bb1e9159c98bbeab83905c0fe50374b17722de63dad66cf7a03965ec6155354e0a2f62d77904c25a47d2ec62e51aec16ebe43b5fac05ee4d0e9d2db799e3e722cd25c4e4b90a5b8ac91ba676e081b2cda6109b902485b8088e0c13685f061caeab089ecab127f102b1737295fdc1309e51aee83c67e034f0c78fff46dd443cb84de1d7cf8be2ec8ba6e238056461cd5394c409aca09dc8cc622dd99a3828af095bb7593c6cc3b5ed5071e00f3ee9f0b2165ce628f545de6606ef89ac9b37dd697c930b597e53b2f0582752fbb3e20385807d67f78e5fdd845cdbf7c42cfb2f9f587cd56de9194c5b660d7611ead36d927930746394732def0bfc0c2a13fb0b75987a9fc2d59eebf8212934990c4496a2aa7cf5b22f0a366fbc57ae2579bfdab1e495519e6968f88d328575da40bde67cbb69d22d86ab5fcc17f6c6ff86d0051ce3d6d44acd01d9e340291f1dafc7c5ea53fff31cc2de12cdc3e03dfe61b5f27e3e440e0e2af1f8c2f41b1caa80e99bb21a4740c70a2bb73b691df96b33f60b9f9de8e831a8bebcf2f66552c9dcacd09dba48a275871bb4deb0b6e48e231cb746a6c84afd6ef28c3aed0fabc2eb97cc73d80aff706135727e41b2e5ae5aae5d3d04ee1db8a514d263821f0edcd432f7fc1f9641febf0159e3c319e314ff34674a5d6247ab74adf5365c9f6260c005baff34f34e68c908d2d4dff3c8093b363c365a2ab21e04445d7824969196d6997b46c22910f6a9d1431b3d497bd3363d44c8a25044587c6172f4810d82c63f75a3976f416def84e5157e8422e4ba17d0e7cadedce7a3058d9b711c0b1d3822219bbbe3424f9d85cab1c65d87eb0807788d02b5d48245c74e43b69c984a34a826ca7ac7349d46d10a7dbb6f7f78032dbc9e3ad042fd87e92fcf8caabcf101f90b979bc3203f33932de324631273f5b2248238d62d40b194b5a8bbee80fae83c586ce87e0d1cacf1b94acae048c424bd38a1c5709e320bef6a360b0feb4d319a96b027a1031ef813381a768f2a53d9778164a8469cbddd23d5e144b606d3243a4cca21d30a2c612231baee17bf085b078631abff2fc86e577e122d8ad872084502249ebd2b2e2d462d94fa2210ccf496cf7194435f3c07b4ee2f8f34691327e2402566076d0da5a6b30f64552385ea4ce58d2cbc35fff062aca2325bc19fc73a8f354058d9af116b4b93f35a021d86504feb3b10b8fa718840d1dea8e9fc317476bcf55875fdb9bc7d886ed9b57a10cb95f589e7f115d24e33265bc2e814adb97e224eb04bdfe4c2d2579e794286d0e44012ddeae6395add0c077053c6cd82312dd01008633edca5d1664be3b3270dc4d7a900c0a14c525d53dee7008b11fa030e2c0607c300e78c031e3cbf10471192e224bb122a3702f69112867340c75b58a69ff756750f4e9feee73bb45fcd2277eaead48887e3b2ce4c0b1654edd7ee577f92aa9d815159081c2a0e6aaaa1899b766313c9c237aa100f315e4a9828fb29206be883edb04fec154d7e8af8ab8e250ef7427ee31a31e25fec28fe4ba4caf5119479b0c3137a765fba53bc52d3783e3a0e274ef076916cc6a43a180d32a2e4db7325cd0b6120cb84d755a7bf01910d83108ce2f33210d7cbc15d3fe7bacd1e0572b482cb848a160c0e4cf4471d1fbb706537e1f336f74bf7ab591bdf2591ca17f7ed760d63007d7dc6ff4af20f6b6f8a75f0f4f96a8eefd0caf65500593710996c9952d8e6c92861663752c9bfbd5257a981c30cb61cece087fc954f3f0619143880bd35f52f403f58bcb4d3155d8c6167b1f53402eb6aaf483282d6bf480d10c36a602a7878eda003561718fa92443018473379364190c37661c59cc2431413751fe2c257ed560bcfcd23a154a5a24a250c24e43a6786a67a5106a92e4154a7b666ed027ad6a40824e881750ddecf39f4c8717cf6a575e0bacaec06ed88f853ee0926f4ca7bfe1f6a70d99c0b85f385ef42c14a524285f7a0941fbae56026a085ce379f2d238dd9092ed21f38e235b47d44bd543788dd75937648cd00130614e37ec80b8c1879bd69e715057a3dbe5005940da48bbda6e2fa3a0f4824e8c23970e18041d0a0e954f3664a56bbddb6e1f1fb5842382a07c43fa61b323b267f9795be0848df0405240d72181be20b44eda8414634241729a5c98315932c1668b4b8de0728a38cf7b720d2275bd70f90fe922e808439cb330c0098a473df00a21a430a26ea037fe495954f201e8231c39b178aae3a5d904e824caf71db3c2c58519c080d95e627f744d2b1ab6ccbb9054d9f1c785c7aaca28e158e23d22be1b0df2da0633136ca554e41c06f4e9aee7d9a92ad84f4776856b8c3fe63619468d24e5c9cd1c7dab1293b494315cbd719540d58057d093c0c9388bec7d98f5f09e72693c3fe5dba249991510444ec6a82b12b59ec09a4b1e080876fb12c64740c17ed39dc93febe6acddac3c9a5b83b71bd7efe2ad0ccbe2c463c3c8405e8bbb9892db5b037afcecdee9d065be037322ea08dad867b894b370c2f8e070b241d58666d7107937ad293246382829c71380081e0cfcab2e3404afbe9ce03e71f8030d536d4a84e66b20596b39f05816f33318800cdbc1ce385ad3bf1624140e1ce8aff0f465d117b566b6d15c5ae38380d07df740d25629002a8f3cfb486bf73edae0c802fec84c2a60dd0115c4369d4accbabc4f9cc2cf3a0834b0c2a9d0cdcc7e42311f81e4e428b32e830cc8dbc4cfac41779f87b211245856c2f2e4dce2442746c4b07bb1804eb24ddf97d54d7a7dd3c481a71f8e9f7daf77ec0275dad5448a510b5c58b890eb029d6f5d86065ed3f79692fce0c2daa4821a8487d965373c0c137d89a554a6ac08afbaa43780c2607c4a040767f9531754b134e97c06589910e083aefe30220058f75a22766745b1d6515d6d119c8964bbde75adfa38e9fa5d5ac652afb5a36657f6c65edf0469469a4f27847a26fe1b1be4bf4bc0674bbe35d4be1b566fab6caa40779fbdf2ad7d2c95caf40e131188e9867a596b2bfe833f00b34f6ec89a71b446f68bbfac72e431b7d02249fb745cc9164f4d670182b7dd417e85754b01240a8ccba930bc6a0a1e37df95ba4a86f52f26a6ae206278ea95295853e6816fe201845f5edd8ce35d56a841c4db8ad9f0803a08d233c9318a0b2ae9115ee6473a5db02a3302b88f6c7f5b9f463a36edcd60b2fe801dc04d1483c899643af417ab63b2c4bc4ca9cea5fcf4408032c922ea4543f00e5ac24c28a384f1b307356193b7eeb76117db11a863f4ee0961dc29d5a24f75f357698f24fed27a944024a5a1ded66ab7f0e6f8c228cff05853ca532e0c47f8c5b000b697da43ac7e723c64542d0c6727643804a1cff7efe3752e4f41e7c000fbd132330fda5affd81a072e1936f32535ee6895c5de0f453132626ecfd93a271c576884eb838afd37a3ff536f811d3d79fbd35c8cc77888d8382142063538c39d9f3e3cb95a562d23ac9f84c5a00d185a1912998500b6333ed2c559a3902e7ef6350dcb07b33ef812905222c9f8253e6cc2910d4d3e5accdbbed926268e9da1bca561a04542b7f68b0bd1cddb1e08180894f90823c4e8ce4548d737ed7508e4676cd46cf07d5391035b78d67766284de3ec951ac738c2bff20d49ff86d7e2af7cf7d071a7c79460022bc1ed3d84f84855560fc595fe7b0a6878abfd814bdd7b73d2d06ec9b5fcdc0dd947728bef1a8ff34dc3992eaa94361f1767a24b353bd0d28a7eb4d4ccff7d9d0073f6e0f8e19d24505af5efb180eb9c66179e631890381f8b15d457710ecd261dd1eadb56fff89eea307c57b7e36356e13642578a7d29b151404dd046bd333faddbeee97dc81a9997de9cf5021e65e5254e2ea6ff551e4e798891cdb28d48502d1c4389d1cc7bcad5cfb85634a44bad8ec9b3cfebba9e3d704940be48f194fe17fdb94af79fa4a9208e8ee9c4078d369a238230d4001204b22ccb008e7c719feafa909b53942d9af495612e34dab316e3f61a784cd8224acb8da152d7a096cc32bd69f97a5c6f36ee7eefa21b7055a4d8cbdd14baa5376638f65423c8e05ce97ba0b5e3d05af1f36a957ad3cc7add8704ef5a84b1f9e9fd66f163d1e6ce3cae223f04f90a124e6705839331ec5cc333d50b0346a7488256f1f9510b95ccce50d2f2c7976c04ece82bc3e95adf989f11e59977e91f03b92956989c3f7a5e8a97ea668e5d8ac5561d59d0cdad3aa0d9c7a30528da9dcdf6daf139b5cbf915e9d9e504b999fab6027d1c34b0a77227fbbb89e886a98809b3f27e672e5f8665749d5f47e9fb10697a7def6a42e81a708d7426be11b4824988f64aab7658c6dfa368c5ca8fff805236965fdbe4dd882d0777f5f07aa9f10fee5ce2711e562ee70eb294e72bf5bef2cf5cca1436f66fbfe23d7419f1e878bf4c9cd24296c6231e0f0169383e9c10ed9d47daad89c1259bb64b2db5480e7dfa2c4c96ba602747d73ceb9f3858414a8538ddee027ddc4e62ec078f3cbd7a652315d2ac231af801c500c7c351d993b06c2a8590ad83964e880c19152af2bae2dc91d58f2727c6e54a132c623f52f1e704dad55f293b9dba8d8ef66c0a685e6b8918bbcc31070266e8bc9fe83b54ea52d1c253a5eff640f6e5fd15d0558ec363ab22fbcfcb49491b138588e1e05feb88758986f17c442e9823cefdfe86f6886fd5491c16705ee9567d067ddbc8b483fc4298c5ee58b5b512b98d155329001be479d3a34caac891bd67a7e5325f233222db68b6e8ffcb830b29b0025ab65c0c761b8b17bee506a0c485f265820e0c8490a281c07dfbe606c5f6c03b91b96ac8793cb7e009b9a9b4e03a7e65476fe0e9ca3a6c8919b7a5bef7a3462774acbcde724ff2a29983123cb507947afeff30d043f5915748cd7b29f4b1aa6c900ab2ccf5e7b3c60afbf0a6976fdd0d15367cd6728698d197a7e6c661a47561604ded02887683c0ca6e95812bf5d09236a0457afa4fdb8e62d16912b2ee3fac51f0dc2d8e8edb294465916ad71be7a0bfc6fb2c2fc3d1d446c482ad6d0151a4019e008c9c933276257b74c22d54bacf2d053e68a7852449c00bc3d4e48053feebafeace1726123dda1aa005933292641af56fced5f64b554b219d57ddedcf037c910b50a2aa02c6debdb3c39d383705e6120fbd5fb9af9d64807f74adac2b68310bd2c2b3a18cc7afff207acfc7f13b3ae5aeb29921d97888a30ad9d83de183a55ae182ceaf08a6ca3966a9af74596a65eacd4d16d1517d44239fe5e22599ec4618a81f48251eeaca06f6be90dfe81a138bdbfb4d4a9022136cdf375ff5ad08afcfa706d4a6281a0be26158283d25d0b0536b3bc0e01ded62f9292cb620a37f2eda6eb7e8a4ccab1c4636d4da4e8b04c8dbeb9d06546365df530e54693915a65fe35fd0f893652477ccd7d32b76905cc98fed8d81fa08f1d5050f4cfd916c14cf550ab0990499fcbac0d4c1a037ce1f2ee9e18bd8536737e089ac54f7ec1f50d9b9eff52e7ac3ba31dcbe2ebd14ace2856458165df3169e8e4b563acc8bb7d12b8c800d3d688ae3997ae488f69fb53d69a9b1cb975b8fac3ae4ad3d0002ce1c11475b674a5057ef4e25e85ec13b6f962804af0a18ef4ac772c001ea16d3caa84764e2a1e9b4a353bc584a1ec17a34635d1f70506740d0a6c27804d0959115fc2a8fa63b701805a7809c8a576bcebc4b7544c64ce6d2a990b667168ef0ad688e2702269281fce761276d198714cb6fb50d3f114e3c273e3bab37c753ac9b1ae4e976e455a3d5d1071d44882c70d2b7269148e1d2bbb116fe2d4497ed4deca586de585fe34a355b0fdebd46b5f4873b168e1ca88909f2cc5ec927f8aa4914a0ea721109c9d99dddf1e831e5c2144b540b7004d5cf9b8eb6e3eb5c6a2922a59586415b6287f661d233c63cd5cf54b1aa8bc39c0a14d4c77f14205c8cd86f01ebf0c8720a9c1533e07bf548a74c3a3ca70e156cb6076a4f8d65f4a2a13682cc2ca0740f6274ba868100f1efdab7395ec208d1d15a05b0895a6fc4b977c20276c02be08dfab05adc2c89489cd09ed69a94027584769e4bf76e883d1b511972645ed97a6833bd7a975b6b65da3961967285919cd08c3f913c4245ba42cd9b3747515fbe48be2a9e6a862de61265be0d792f2ca4501b7824aa7e2ec8ca5dc5d58230253889fa563aa8455725eff5f28000e94a287da4c67ad46ab9e51c8237e19783a055b668eed3e3116dc1cd5aadb2bc5c6095d3a8b9084ca06d9ba3cb5fc009b477b2589a42fead62d82635145dfa0de10678dc97ae6175a7c0590aa9bc155b4b11baeafef11f59c23cefb1b371ea782fa24e030244fad1f948a9bb9dbb360edfe4fbd81787ca9aa7f26abda887e88d90da81e178eb49041d6d0a3127fbc686cb87e1ca746564c29c9f43c3641e98a0ad05c0f25c2fe06e7ca40705c8ec3b759660f91c8618927408a9f77d96946f63ecca67a03c7135839f940c94011af93dd916ce58cd2fb8218488f2168087d149c87ef2959a5ddce60ea3978660f6a4520c0fce09da096a5d88e2c058e27752c4d8ba0e2ce6443af842594437590db14497b2749a0d340d7a9e1deeaf1cc188678601f6e0a0d2c45cc33b7f3169dea4a804b55ea4074e361b3cb0d9739024d6a468cd695b6a882d6619b0c50f03c7f2eefb6ee89238a668b1dd321d50fcefc1fdf992b1e7a3b2cab6be5f921ac788207bb465aeff11db19d1082826c1b3a0dee6a0f88d3fdd0120c119ae830f156db1e0f8302e45336acdfb35e9824044d691f0f74547ae86e1c407b41404368e073bb11f44c2ff0db3f992ff1ccc5720ff6faf852f7dce21e3291d2626923b81d3025e921a19a72175212abc384160f899dc64a30d9c194e73c453e85cb988a15fba6c0926aeb7eefcd93505a29e080c247cd309762f1a5d122a5e633ce6986d1bd84bed00debbf6d9864454024eb70c2da55d00efa33bee4ccf9f3f3da6053585c080a62f462da989bcdb3fddbff859240a7521d0950872922898c4e57439ab2c27acdd085187a78bf16c217b8e467395f0bdf4cf711a7a70d9cdacbaddb02e8d5222ea32ad44516ea8699182261bfbf21c89f242c3bc766737c05f244f034017f4756624a60e379056661888140352d6c28b92c10998e6f3e6f344b844ad705a6336c954c82fda9f9fe41ed3c47708a2a7155ec0bf2a5c954be8f5fd6b094fd342c99c49a033bafac9662d1bd3f19de42ec9ded860db37c9fb13fb5a0eb13f0107b05789baa44920876ecbb6befd7329ce1b7b6e7b36191058f6cd54bc4fbe62268d738b741c15af4e60634ae21538d2098cbd098ac570f70a23d484000f5e7523a388d568e5910572dd8c3ee9b35f7b65802c1ffc03cfec730db95e66aa8fc883b4ffee05bb5bb1b948bf093262478466b831386b7b967f2826e44a4c9bd2cacb14513bd6e7c6327634743058ac819b817774d94587551d8e01ddee4e4db80a6e54154568f571063e23345ad8fcae1f4a506f8906c19c4639110ea0d84abfe5e1f6c4a1188eecbb758787df1fdd2d9e25d579be4bb4cc87adf70f08771d4b0bda7ed7c5720e89b0b0f3d733a9b87076b8693bef70db76605106578b973ff9ea9c4ed72911eee89474dabb0f13292757569e1ea312a01a5ed6d160b0d52d4cf0bbf94b5254ba79c535beabb7c8a9a2be94f6aa5fadad38e183eac30ead5fa4bcce009cc7d6fbcdc1781211c456b482fb07e567abae4d5276fcb4e70b8c61a1ad26f753fff52d4517c06795cb29d448bb03fcceed911ae7ada5b2552e0ebdb4507b4ff9715bb9804683419022de73547d3d9f48bbf29078f4238595ec80ce6d252f7d05b2673affcc45129961d13c4690096f7d8d5f4876c8da8111cd9f3e2cc9a7f0f139943c34179a6d3a1eae798fb1fbcfd5d8139d71ba5f475157b677838c995e548d8f179dc6e7b3daafb2c5a0417942da32cc29ea47064aed0172f5020c6817a804a457bd48a188f39baa9b18dd266b0313f55850dd83fe4d51314118b798bf54657097131b7c4f2d68e28469d377aae8f20bb3460c4cf3eadd9de6482cafb7f1f670302fcdcc88e0adf6fc03c2e174e4639bc52a51b5ae5dfcf55f00ca1183f95e2fcd73ce06c8a5c1648c8729f86b8ddf11f87e2c72901f35f405e31e62b5e2f31bd98f9adf80e5599790648721015dcafae7d21af84b972f06955f9817c0376ba0bec3b2ab4447bd1ca21c58ffb8dccdd2fd969bbb235e3e9967e6d5a5357f0e6b17b0b3fe852592605c2f2df8f4734e26b46c3d3fd9eceb49081945af882271d75ee70d4db607401f090d548166c9c262a6a35dfab1cbbb81f057767b2aba3c821ed73d1d69756c8553479b3d6238c1133edcac705d6335d0ab21c6acbfaea4d7b1f1b1e211e86e5fa55e30918958d0b5078877353f5bd0b1b318d4c899886164c2d70a4041e8cbea79c1d3024e9267c47b376ccdda0e22a182ad2f335adff895bbe7a49c7bff1bd26b02e124248e0cce1459eb8ea002922ca44f1491660db10727b42f6b1283c483e3b1e96bada4263e6d70720c43d1a5cf928f43576daa412570ccf940b82f5c9b6e2f5a3d3c6d4a91e10baedb17e3d3e6d7ee29e9b43e1f7d31829091df4a4a7574fbc23d7351e075199be05faeb1b31ededc46ecec21b26ae47593f2fa7d24ae92a7bfd0c4ea9e346191b52e7ad3b9e431da18c577fd909b043661c89c3061a341a3819bb3afca6c639dabbbfec25eb35b781e07ea3a307a1b1588a736fc97fffc8fd5f2b209fb999a10227cccf62828c636d528b560188483c387034d3a2e114dcd1b7a6291b8287f89b80547f79c90fc86bcac5bf7cf46e8a0db5151819a839fdbd09727df76b58e6aeada024f22a888f863076079bb4db43df435e66b63c37d3c73dd843bbdbd3154196f8e5560bbd5fc36ce455e72e5710b60157e40205d507fa3b20a4f03ac12a5f23a3ea2cd678e12c6657d2e7cbaa999bd747bb846cdd415beb92c71defead00d3ceb5cfcf27fbdc80719a623f39b8595ad7812c4d71528f43576d5ca6416ad55c916634fc79a9a9f3571f8230ff47cad6b30124baf4765cc0213f57f000d693eb26d26abbd9320bad9a6f070857b28eafab8e3a05d39a0eb38b250c52b96add0df38ce9b3c31f820dc01b891bff92e544058ac4c47b4805ac19b0d234d7b211438bf82a4ac3bcad924ca750e233539f3265796d5d77fad2083165522ce826c11a6496b50757a3dee9b4952701bf9efd094ffc8c57464d045686b5048177436d00f20b026ffb6fa6628c5753d0e0bf8f273966aa3852991d257e125208e1829575d8a7baeb3b6a949b28806006434fd61a965a6f8749797ce37c1fd2f9c38ebb076d0f171f744f1a023d82e3e843ca62620b4a24ba8768b41f253ffffa99a24e3443a3cf634267a7262fe1481d8eb9a48becb8624898e14336fdf54171e077df6ad0f84c5d325edc75742e250c70982cf6df17b0b7fa6dbad96ad23ff61479df39b99f0673a09f2a7eaebbd34b95d05c4146fa989f28887b64f059540dc222ee1f51ea963d39a301b0343cfb416b0cc2e9b8d37254afac157822ed261f660d5c9a3e7d74105a0502a8a90405847ca7e15e9934d68efc53197177101ea16c83cb28c3ca08a37e2f9dd671b38a8b273c481e8c915d94ab17e7ef6164a63a6240ba49a642fc5d329d43b822cde2dc073467b7f77b400c18551140865d6550d3aeaa8b4a9aa7a403d894cc30a5a6ed991ab0a96e45565bd0b516233a5cd48b3d27fc4c2513a32e6e6bf1813ffd5f366969c3716591e91a709276f602057c200b67502ada506732dec1ea858517745cd4bc009e51e370be5487a43781c9a4d5cad726a5bed37c87d1650037c4967eb7875c088ec7bc95be190f3e761e2c1702f7e1e03b571f4b63e2dfa31652fce6dcddf43bc13b8fc0a01a83a6205baf2b4e1f223d5a37866c7d8fac73bfd4bd3543650f2ae431cf79faf5af6bc4aeb559fdad126e80e4cb482b3425c282ae49f271a8f756562f0e3a2526ccffe1abf14bb82e3d245dc33076f37d06400d644596ee16573e9597ce79b51a76f2f5c7c549042efccf3f7768717cd6b85cbe8b12ab2f29a944311082c1316d37b57f86b40a480bfbffa455d5b01dbda679248743a79b7f6817a71dcda9208b89e7ed5d4fd82a5195163b02facb5cbe6b35dded5b04e9741e2966040189e8f1d7eadddffb6af1ac62a351f36a1bc03571132921bb4b6fa425ea0c87b0ec113ccc3ecf73391b4468ef37879b8639dedf5281b4c90703b48c29e9f90d6e582fc8b16410bbab61a90385434a8fe19e0ef87a11ff47a0964ea894a9ba099c569b3231fb602da4e69628ef4729350ec0e73d723467222aab9465f099ce00cd5ff9e5c8552c2dc812723567c3a22f504aee0ab5799aed079c3c50c83ab38763ecb26fdf01d340876de3a5993923d3788489ecce51f90cc9e09cf5761cf90212756b3d00a2040a55615115fe284cc5ca165150274e1015d4214cd094b11d053b926ae9b7862cffd48550f301117b7ad768cad14ace5e7cc8d6a25eae877e0551cc57d27e5ebc75675259c93c753e6723045cecc37352c62a69541c2e10ca86f77bb8a3cf7c412f9050d2051ac4142f3f618e0f0bad9b664b61d8759ddd510e8f28e3ca156f4962e1f95033269e8b177f18e4b49e0d76f1de488617785dc010ab7c8fa20ab833d3ceb46aefea6511c48482e779f4e393dd4596036e38128611bebf02e7f9e7aed6d92a7877d0a826cac2480ccbaaf070ad03c2c6e6678c11a64b98f3f87d6e090073c41f7773e8587ecad0db361a947bd5ab67571c813b0122d472c9500fcbd0d53109a67b3ea6257500a5c925ee4033ebaefc2a6d1f9fc33bebd4f98b2b71a4c99373c3dfab51fc31f64f6d277094275380e9b7748d2ad635e4481b065b0fe3521d9afe31447c6b2a3e261dc75c00d4a1c3c884bf748cc8c56044845e08f71b0321c79bfc9495e0e22ad27171fb06ba5ada0128ba4015f95ef242fbfecfb7ba5152b243be163f0bee5eccfea3f82646e3463c09d18a571666eccbb86519c25fc132c38bd233c83aa34c8e2bf9bde008df9ac1bea1bdd07e71e267602d71b769d72483baf587d1fba5769e7fdfd6a48ea44a4aada75512b004657e79b452077707aa6b77848cdccd695f6660b2bd1436d5d72f5d6eda8e4992d8a96ba65522e5e756f3380bbd593e63798e853edb9f9ff8b4084444c8a3b9a1ce50cc5fd5aa54da9ca382f793d7bd28576f43c0dcb73861833e08d5aa136eb5b90d026d6dfe4265fe04ded49ac8d82c7b9122e51aeb8eb4a75901adf92e07432b46a43b88af1d2dfd8fa22f5cad0de4588ca91830ad0176a2e1c52a3083e1ee97963866b03d63871dbc73643404ccf470ca5ce6989c4f1bf850d9c6da95acfc7064256b6f19b3f5d113d91fcb6093b146c2a4bccd19b6093a3e962071d3b7015848f1a62fd46d1eaa1e39be8d3100cf5d1e271738a5d4e2cb03b0b370de9ea1c1ad33c37cee1d562b441bdce406828326353a8285d13a2d3d388ffc6216d2321f19423fd0d73320b71e05d77a5197913490759b1f1c444d0345aa57c00ce056f305d377c6105d22e0147e5aca82ce5dfac86ead7f0781b6bfc3867205314774d00b3e07c739e9c128bfebb33f4a856e0b356c562ff3711ec53abac7cc1476002892086c4ea467801388e49d42f95b35c8701501ac80a0d9a603add56f370aad7f22b911d6f054e41307ef55902fbe49c4f0ff5c7f3f8f8bf4c6d607790973c14645d694faae4061b9a56298814e3d0e834061b30280ab8a13ecc9ea741c2fe01063c762242ea89d79e9f4c2b0e5461885e70291e0e4736885fe0ffadaefbd8e50152215ee020bdbd66e0c60897577ec3f4d489594db75abed730ec537e49b20a7c27d0ca2b8c8b1517a1fee858f30fe21fbba2a98e620d8acd44cb5f5ab574b6a041ec2fcc38db26dc6b5e92f830fd2d06acdcd67951353369a5059ae9450632952ade556a2c9639dbc44dd020162eecd22f9fa7b58bbb02d5da03ccd40350c6826a0d04ae6fa2963c37336878ae8b67aacc53e5eb18883f366b2cbdc2f73bb98f87e0043f08e98528497923a7fffce6b70c6058c2018332b7e1e7345c28ad55e60bc11cc702524ec78485c956116ab020762fc8e34d93227dc39efb4a9e8fe0ac7e1716eb62c438406fc0222cedbb0e0e9326fdf504a259b399b8d83361caa30c6649b85532298cbc9292f5d29ad948a9e9aebea12f971d7fec9d94bf7a44e62c4dc1cbad7a68936276640cef20aaa6180230d58fd459b70942b4f797f0e7f134bae6169a4069925ba29c2d2c88186f8466120866fed26f7a2667c863cb9a0b4d362063c58e14d4ce9ea42131d90aed149bbe20ceb2e98cfa1d1dd1ca13447d9f48d778d66b51a0e4f3e2b0a51b6766f12b9ae571fa8658b0b13fd875d1cf905178731e74e0083dc428c0a131571923429e101ef4dd9119c56933a60c0d22898b4e5c1d47f321f498c5a4be7c94076c307a86950264f31861cd620336cd25b37753fb3df8ae840d8553f8cd2fda1989e34966104195929daa6634b69b1bc0553a0eb6462f1919d0b5592397f13137c182921758597a57efcbbb1289e4fedbb6ff07f6ff933bc984505f8de46ba2495d36de0135f31b2a58ea556242b97f5e1fecc72431cd1c7a737ded9e7c443437a526b48c6eb77ef41e30ba8daac1a431d829d5a6a485c415e3658cbe2625f0e9e17b9c20cd4cad9b8ac474fc89a5773d29dfb9e620623c831d30c355acb6dc48595c1e25185bb009e4ce0b16a70d00685a36fc4a6d0c8baa69051bcbd49e033a55f2c303188b8d2474780542cb9f469bb255253c522cb9740e0c1b8867866aa81c64122295854ed681e8eceabf0651bf7a65bc23996acfc8566f4bf42c151b7bf7db94eb57f0fb065546477549e829bafb8d4a67086dd48d87533378edf41d992e7fcfc425759a9c36bb9f4b32eed7767af6566f68ded0adeae25c7a70ca78ec09774d16c8bc357f6d6f7bd441bf62d942c768a58064cb0fc7444d647e40345bcfec964a096cd399428963774004d2cd9a2908701aa8ce9b66a18e9cdffe5acdca0530c6ae2d7dd1fc31df9ff5642f39c944bf38fc51e0390e20a88c5babf22c40eba5f47fa93a0fe59178b12a888204183f1466ef080ad109e9229abaef025f7ac57d3b4685123b43ceb516a517d318cf439060bb75534b9d258430c374944ec0bc3e02c96c0d3e5f131f362fba285c3677b98f283fc38f13fc57b53fdfafe15af872b3d10434fe81863c798f198bb894041a5bfe0f6286b3952191f7db5c008fa0a0b526f58e64f14f97488fdb03143311382d048c3916c4196d2bb00ea293a8dd517090e82358f697b509f5a8985859c79d6b035f4f2890afc0ed35208982edd60c4cd785fcc3d98620268a2a536d4f4ed07fc42faca55d80a43e4dba19b5a6b459b1c273208be3435f0516063b395dcd59cf0ca5597374b4a086bf845b141b9ec0071b5b979a59f7fa1061e759a5ca6cc1c5a6695d7c1d723d2e5425568894bdcab6a8e46ad686c979ad3273b399e0558ec75922c0a69fe2019cd44612f75838fe2632b7a029b1e26546525254fee5ad4b3fec788bdb442d7639078e984bb038e5bf807b417a216946428a2d41ba229f7d942815c502527b246db4a6ef6ae4e505ea5cd956b01f87a209a0ac83b7df50ae2ed59e760312f392a1a5351f3e3c66e90d8c79e6b5f36403035c7623db64eb6575bbbea6c6ccbe483ba0e431adffe41692d902f970e527f09888342910f8962bd1a11b5e32c803cea56e5b2ca1778616df0b1d97c93df9f230ea8d9b3de47987aa505da5314debad45d7411801ea756f5eea71c9a8420190334c2a834a71be0168912d84aba49e6c85a23efeb5a1d8ac753da796f53d68520974b2e81ee48a21732a330286164393cc99fce5a4e4d8528ece6607987655c01a2aced3a388087033e31627abe903aa818220d5b8fb9deb106357237a35f163ce38264bc0a45d7511867efb0265053a0e2655d6d82d4eff63c521f281c263c28e6561585d7fb4b873d9158773d472cada4d41f1ecc31414efbc6d7c9664d465c0782802636233c2c2a680d2e77c71e34dbe8c2ddd0516b41b10e3caa2656cd5ce3a2252b895021a67b36ae444a72b0ccf43df93913b7d6651882ae38b0b52991e73f84f45604a48c8c879c6749bc7cdc8a2e229f1ad70b3f9edebcf3b9faf391aea5102f20b33d54faf557f5da06eaea0a43cf9e5a318217907cd979868aa3e2869d671a8dde4 +MD = a30721a1aade30604054dd42bb3a86ae0c052d16ea8fe1d930f0289c + +Len = 83392 +Msg = ac624094fb11a266e4783e57fdab6eaf7ecf50639821bc39083a792deb91b013d441a07f1c0c94e279a012f5d21a565b52c9ff82bc3407cafe5ef8e908485d8edeb87744ec3932999b635780215c03f59d9f58df63fc723a94e09d75f3d7c519f34f2eac159f65d5704876c1917a5fc486dac5443682e6d3f449cf9b5345ceff3b8f2b7f3c4613dc23d7d57dcb7b51123601ac77dccd49db4321f521d09b6286ddffd7850c3725f8da98dd7f7767c025d59c7741fee5859bacee79d013e068f802289a852a79846ebd14f68e3c4796478a338d6a44d3805b553ac270c41cc89bd190dd4941141689f6d28971c222babd7d4f56ba559e2463668c38c98b586ab873c10697f711c590aa5afcf1b20014d2d7773af9da4e57fa086d43a20e9b36960f437f38f47778ca0435b9d6b4e98ccdc034a1ee7aec036962644bc5f8ed147fce9caef4e14e178029ea26e86fe60af55f0df362de7f0ff99ef9b8f8ef56ecb9d856fd92669f89fb4401adee8cfe7694dd8a981dae0f63efe1b4f2049bdfa68d54f8d3dc2a71b8807b03b5b2b23ab8f06133f9e791a5e796561e61b1a68f2a436a0b9798d6cc8b5af677a5fa8aa0b85114917c882f47833522be6ec6b56f60234416b38f11b8eacfdee5e78fbc3b5f011e2b8ac731001f13701c7f0d7385307507a18e89843ebd295bd5e239ef109347a6898c6d3fd5a37966c1fe4c85db8380de35904ed765ecae94d0febfcb293d6ad434e84200d0f7af2c34514c96793f8def5921a5b13660a7b25da3ebfa8d46b3d1b3080e1df803fdebfde2d54c654ee46295a957bab7ff5bdc0539832144946ac58e52993d55b0abcba517af4fa996cd6071902d9bf2b2143b4f2850eb5711d7d84e30ab09f0e400f3b35aa1484d019011763eecfcef6218f7c3d91afdcda341307a090b29d088458caf1274df5776749c2b1c5f84b5f5b137e9b2a902ae34f2f89a448244fd85c3bd22a6f0bbd1dcc22918904ddc4c5524234a1cc4a002ab3056374bd80280c1bfaf9380dd85c21dc3e2c6037dacbc68bce56d80357fd2f04472d885d50d602684898a0703e43320bcedbcdeb89b0d18c0a2da44c24825eb7675055a400aa59b59748fa32a812bcdf8728287c651484b77851ad234a304840d874632e3a4580785982bbc1903b20cbe9aa1686f7775eb2ab3b490523776a353cf247584818054511ce5ba9913d0c5558ca0e77bb59adf225730e8e6ad83308e76268bec4925690529460672598ee00671076eb1b2c10fa4971741b6ac331307a3d5dde3a54f2ee9e6d5066c7cf34519715f64da17f163fb9bf0028cdd8f34067fb7d1313d078b447c1a234e2508ddd6b32f31be8b33c36e8c43952ee89e7bd23256d09db8546860129dc5e2fbd48e8460ff3c25b78e1744929961647469d1b5e33a43f0be3fad83d1e755eea75f416d9f58efd7420a47c6d478cef829f61cf5bbe990f2f9cf42f6e17f393bd0b1dfd799c0b19bd5af3b3c7b6b44b0b14f46dbe1ed216b0e0c0f0169eddb911fd34e0b76c1eb3b1886dceeaef72b56b17c35af7dce5c23a8fefdeb91baa2b83ccc78515de3037db296102396a6ebb0d483d3b9b912abe26daef2fe836df577cea443f076ad622a4ce7c0245bffec87bf6e0640bb43756f0523d780648e3e977d639932eaa7700a8d82d53a248a97a21d45b88eabe82193196595ba5fa5e4e1f312615de15995e41e6e35ab19d052cb940ed0e9b28a1916517d12f4993b4f1ad5b983ba824c3a81a6b3cabf645886c8ccd3369af8b0c4c0547238763dd7e60dce5ee691f607c5aace5a7ac02aaa9c626f9bd2e9a4e28a58cb4cee8771021381840b742a6512a0253e6a2ff4964ffa61226f8c1ddea9d3a85d141b705d433e3d9fc714ccf6f631ba9debd0a5cdce0a8d8f564c80d08b0776b3d1a97a2b22cd0ac89baec1d13ae23394e64519faaf33ae5e58fa589f128e8b748b7fea002729b0a78d2b4f1f661a57ca617698437bdc8b377d7eee76c6d1af494a850b07dbbaf7e3a871bf080340ede8674b6cd0b96fedc0cec08a7b2e36a9da17a32465c5e8a724f16959b398bebe95fdacdccaf1539ca452a874d6d22643cef9c17c456e1c871472fb6449adfb927a2d812f59acf06089111ff3b03a0a43cef9c75ccd5cbc605932102af1ca5f303efeb2aea470ae0118140b5031ef4872811e9d0c251932fa9b398ef1d47852628a7927a1d4c8f546f86256d480784a9890702cd4762de41d83905f02193e3cee06a4c85010392df8d103e6c4c65d767da2f75afce81e3c91b83e69a5e9a5859d59897e02814dbedf4d00a56b2a2736e860bc10cba276a01de34b96216c3495372c302f004f8b10c312607910d55df1a371c6378acdbc7a8bacc0ccc0c973d584269fc493a17b8b6cc82b4cfaee870e747f1db582907931a1baa4f5c829eaab4cf0e026019fa698a2186a05729e2df7242fca74f814342d28b6fff882b322805631fb3b9273939d2caa248cc00dd8137b2bd45a378075d6e747d9bd3690a2bd6b92f6ed9042ca04d32561c92c620fca401b435186fdc594a8163b2c2ce7f2c853bbdb234137d4335f3129a4fec65b843da620402cb3aacf31cb2c2dabe19b0bd653b2c5ef773894987785057d6043a93875720e72c9aeef4b0db5a8fca624ecbb0381bae02d7e8d459f7cd4f2594fa1fa3041a5a068595cbe84dd85685d15d5cc7252ec5c7f2f88305117f9a5d807d54b7e95ecfeb7327e52d9acac352ff72dcf482c42ad95d2ec1f345d5cde06f4abf20777cbd3dfc1becfb42a05ab43505c8d2f18a41a98ef21dbf056e5e50a9d8cb974ee2a69078e82fcbc607914c2abcacecd1cfaeab00f8f2c2e0a7d010d8ae1666d03f106582233a29a55eeb6d38ddf5aca432c6604b99ed996820a7c374410c299bd08f3fa043a89f6114ddb9f8003f8cf9223d6bd75b6accfc5759caf528395a124587814bcfd79769d7fc94d0b9e728413c58202cb3f6b82dba7aa9e3ca0a72c40c7dcced3e63ac5006bc806b7188e90cdfbb1fc44a1df56cd87ed2b8bd1bfe31a3e6951d05c938942f822f20ad9159cc8aeacd36744d0f4a2fcaf7fc67da76eb9a665c53bc64e6b6c101d388e49ce4f0dc4bcaebc90060362f036c1750b257425e519529d8e3112859a0301cbd08352a32727b5ccee482c154acc1a21e5029d67e5cd1e7c1b0527957d1a7448d7fa4c92bd35121ec45f17c4f2b7b251720593868cc95463d59151a5a3abba8dc4fce6e37030ea3b7b146b77cf3fb08d1af8fb8ac4541ad7249f39bbf3fdfa220151c89d265e68a97c2dd034cbae3d5d45a1807c74b7986270f586e2555a5d90f4c199c8c909b1f22e72f005cd4a804a5bcac863843bf88b215ce11fb1080b5e0714016d4077f09df8ad70f1be5da2dbc4397b47db255fda9f9cf27cef502b14a111aa9273f04b3344a4fb00842dca99e9b7423063c0f7d8537d6000f87ae53a298239424abeea3b7920373b0803210a300bc5270353e80ca3c7d4b3b2ce6359092d5982ad28f63dfee9cca93226cfb802ffab33a3255afff841f59e0694caf8a8dab05c847597c23dc76353ebe0fb2bc8599c5d2b7f7437bbb56cc8dc1345a06e53e6d7b7eef4519d82a43f1977cde9e8e242ac84a95e3e52e9e03a1d94f9d8c35fa4fb2edb367286e13677a5346e7ccc62422894eb419c27a5fafaaf5f11280fc592d1d28484ad60aec203785f066cdaa147d9448d45d7a0b362127cbcb318ba4e57608930078b94afefe97940bc3f7c66f7c87dd6917927dabf896bf308312cc29bb13c28e79388ad66338f1eb97f197afafc25104e0a23e1b968634b37facee908cad4b54b4ea56fcee9a44325b318a6f97d2581a310fc91f9b64e0d68fc068a44b5371d5b4253bfd0119ff52764e3b09c546671b91519b2277b1382c5bd3d6ff77a4fa841f9fb6314b5677de719e1608a88cf2ab7a0e40cebc09aef73c7dc5eca1f02a022fb032441dce6238e5a7a806c2147f3c63ac466eb8ccb9f9da2492064ae3a4b29ced5caff8f032e44b016d6e928b8130e692189d2e78ed969d4ee7d6f2edef37bfcd71df8d5a6e830a11d2caaa409d3b6b8643e46d9cbe4ffe7323c90a8d6de430d73e5d1b6b7977bb7f748569d227be7acf34bef6b6a0988637c2771230a54a78710e9353a1f844c7a0df2961beb53c8cf377877a453902cce3604baa7629fcff415f2ca6ac4f7cc71c5f412274ca282a8988f838d6ec112b2c79c133dc606e4dbecc8384d8f372324881571c82db23cbf7f56be2ca4e3639697b722eb1ed00ec5fc3328eb688e781bbf1c5c0776c91f9d5297cd8bdb4046030e1d92bb52467439adfb424d3842f3dfd0d27aea0f3053c97a185bb2fc1ee480949509b54ab03fbf67e72d7ae59cbef725ff747ce02fffcb60a20ea7f0c6659591e82fe0ee5696df92c0927a59e4feeb246bf1c2d10d4b2c6bfc8e749d80f0ca6ddeae44277fa222964e18567a62de4437dd9ac6cb14607302f08421ed94ada8903f2be9db748b0fdc596815325e8489c51e178fb48a66288f4498b4c749c5b662d351d8f37e782fcaa929bf681f184236f70f2576b884d479c1713712e8607c4c62c51858e39108c905045d04eec3f7f12d2a91f7e6e3fe282fb8b1b8b9a583b4b332b1f0eb00244237a1f6ed13ac31608b11da215cab2e0456142ba004bd52038f3eaca5e0ea0b9b05a7920dd6fd77ead86c08da6103ec75fd2eacb211d072a2be91105e087a433e38bf394b7edb52f7dbe2240c3e13c1e3eead3cd6270569f708d4e503add556919890f48f557049ef5d1c349e3c0434b6ef3ae3f49084c16c35af337b1526ccfeecc3cac1a1e4e43b26c24378a1fece56c97daaf4927601680cc903b088932bebfeffc4caab5fab41fe7b5682b528152b441d98be7603b25356cb5c895044fdc294ede990bb08276aadef77a4c2ab939e27c3b63b84525b94db5c47eeb462c9ea773441fc1907df1efac7adc60eafd0153c160b51038c84956325cbc7fb1518cb6f7dd4f60c855bc6afab01d0e25b53f949bf9fe93dd8b6bdb6cef0fc6e8471cd4370ab67ddaa24c8924279aa86d7a4b317657aec785f77749bfebe7655d85c58bdb4cd35d59dc18e6c35203c424c4ba96eb1a540fd485222dc5d3e1bf83861d4a3f2424a3a87ba7e042bfb6f5ee2d045154b27cf14bccc2f3f9477d49ecd09a9bed1138c548f980224cd142921c0bceed6da087f04e36f048d4b718a90bfdb3fd6fa47e56ddee28192c37253d50f970b7706503a17e4c2078d293523173560ffb314e63ccb9b206317b41dd6c0f6e706c17908e793e84da109d7ca8979571e4f1cc8f978b7efdb0f7b491e982a9e36467cd8386ec116993ac7fd38a2fe4e9f98dabe8683790299ef86297c835d2e0b3370cee6b7e9972d3b91428858f0426b43b69d984459fbe56a00fc3f7ea0cfef3564011ca95392910a2d4ec191955a08b6750e34a39f0244e8b06c70703aa969b42219e12e46304e1163caeb3737bf005be2b86488924140d15f1f154374e3011870bf3e2d0c99ebb7fd5e0f311c99db99c4442fdb7bdd608ed5bd39de96a63fc9179b398febf4f063c1b134678c0f1fd7e2599e84a2012c85daefe129e819ac30df54dd3a2c69e67f796c62c1d149567f05a0b76c4fd32d1f365d170cb165cfb38f922f1716225472eb36a127327007f8f5c08479ca7beac4b0aee26f3bb130bbf1ff390ef344c2a4e0b8fa81f6acbbaa7a620d945a22ecdd128a4b3acc2658b1cb41020809fab87d1f9a74b76624f9fd5c2e59a649f0b9d0229b5855adeccefbe60092eba26abf65728318b1ca01495962cb7095dd0cdb07a98613a8262a1a030ae5f2a104bc5ec49f1bed586a6a332656e25a4b5f9fdae86ef6841c7e08c52ffe97291077191e026f0bfb928d8840ccfe1a1fae16d03cdd3b91b297ffaf56e98cbf3f2245a98687aafb4a487c83f7b3221cc8a84cc88b4dd6ffa502ef4755987a053dbdb4931ebb1892e3638082e1438c905d2047ae4ea008e9654697f74ba391102acb0e006e078079cdc9dfad84e5031ce4fd51ab0e3d99f7fb493fe8bf7499890e339917ffd1ac581064e12d6aff4e6b6729b0e7528e51d06ef52f4239725a17f1dd9e01588262d6b51ad02a1bfb3623ed8bac89a2faf81dc631ae2c41059c63dcb164e501836b9bc2d5f2cb1e3f83ed7f0b8fba86e955850be405ce60952615d69735ec833b8f50427c9139fa35fd7024919fa187c331b146f87d511d8ac1d4e877573d6511959d3af7f39c3a436b55e40526672cf154487f545cdd014d3548193913022f6f4729b42e601b63d39743c74f6a33fed986f3bce0ea9993444a1a71c5b1606abc6b9db70922deff4c47e3d658b42e84e48f5a078471ae5bd8c7f2f80379819d5fcaa04c70800e951644dd18064b7f467a362467283744e1717677b7dcb38d50c22cdb7a4bc1d3ae9956d896427950cc0444fae5b48581ae781d52b536a6ab0b4c59f549822e54d13c447c56f584c69fe882838710a3904953852bfafb9b0457651897c1fd0fba866ad8726205b50b4690b5685725d9973a6c76a88f11dac0bb753269eba4ac2c5688d862c25c54474962a8505dd96fbf0a2ab8747b62ab06c0e47012ce604cd3c7ff0df37ce0a9a131c822e4a015ac2f40f41235c6d456feec1b983b721738d763373fce9a7bfb428429eacc28c2da1064344d94795122d2ca80728be0b2b95fb298369b23149452cdedc9affdc63f89fe5131389bc059a7df7cc8ab1f1a15933b8bb9012092baf8917b8735280b23c397b386ca340841a8b57860423735949c867692a898dfb65c5a3dec07b077d0e5b6c214f14d1322fad3da03f931ed80a21bc2873993e2d0a7af9abfcd9df48d18e4e6a356ecc846c8c10b797814291fcc83d8615c1a834f0119faca2ef769a184a887faa01c0ff43808748a66e8d1bb43451ee7b833aa7d911fc5d3d3c7bd55508a0de278e2d073722f7cfe6cb6cc9a2fe9fee3f6e93fa0804964a36415daf1a512e0238648f30c9fbe8a9c31850404b7f7df1bbd412a01f51f3d0288e7a7bdaac9688571556107e73d082d5e5d604303f82959b64553e8192ab9b8e7470c0088360dd0e21100ac71355d799a46c89e3c74436389fca39c14f1408c2a3cf10466e238cb8085b942662ef1488e49245c8af19701dd6e00670dfc3b47f9ce3e0f6d534f3ff4b87513edae2c62e16d5cc614f98cfd5aa4538f2cd410b1fb06db6ac413bcf4e5b21a652f3f768f3cbb592403138a1ea9a5855d9b002992d9ebb15d95aae5b2fc7c918154683796473901be7ec8f92b72797c197f08ecb23b86a62f059e3441e11dc3af83b2d740a9f13ddbae9e42ed5c29220b0375c3d9c7dda32a3e790f683b9d9737e4a3be550bebf6c4bb1fcb2c10bc5e7b4cce15ce28fb919468c2e0f0b205f460a0c5549d142e12c2ccd3fdaf363a17b0859b4a5a04e556b6aa020ea2ef5cc473dfa002df6dc27b1b0941404075ac37f3d465ca4504a5dcd82dc001449aaaeeb8c8ba2ee5bdaf17179bf1fda57519a58c61b2fc57cf4109421984219e5bf85a77849d4275adfdd000aa6b9aa7df8949c3550d4a570ec4c73b95d7d67ad84df0f83ad1a458e5b58c1c5d38810e5b040bdfd8fb1b0f6833fd0cc93f889ebcb1988213dcbe560cdf35b5dddf18a29093d32a1106d845869893fede469fd3ad2c3a5f3748f636ca81b21152e8c92b273d89ea29b5e7c20ffa7057fc7483e153c7bed5cd9db6c2c9a5eb78e3dcfb70c70b15684890b14eac627e5f4a509c9058890c2dfe6165c0ae52c834b841153a19035fec94209eb005d7a460f16253a8617b0caff11e6af92491318cfaa28151c53050be38ec17b2c161caa019320ef019a3a7a2cf5b2f35d1690ec7d184a67d7297ce255a7d821a8808d868e8493631250bc350bfa11b3b5de2472e6471ec86c842c26b235948b104d5b700892e343330bb49ffea7796d57104c409dcf0bb33713815d6ba0ad23fdbcf4db022696ebee0b922f8776508c9b5d86ea0608a7b4d1281adaf4718878cb5ff83c0dc834e9add0f34838ff3d9e0d0652b3a19c5949c5626743df409ce5f3b6b4277de033b8ed0c569e75aaa72e26bb3e4202f2c6fe8e22e51cae7671182141d701f51719d6461e1a86eff1139972dcb829bc94472f961a12b9c48b9b7bbe91df6fe5c56dbe2376dd85ea7b197c7bfb4ebf10f9706977987ecfc408828d36271bd5c28385fd1fb70e3007910f539c876096a2aac9489d2e97b32f75bcb922623ac83dca290f854f3b09c9eb8b9b6f11ac250420b829815cec08694ba0abfde3baabaa119d621ebfd277a3d314d06e2a700e97e3d398cea3fa3403f2d4c2431bfa1489f279912679630e17f0117f14225aa7f07c9222df8430ca7223dfa87c8b97876fd53419472c6b31b8cb2813fb99da8580537a442e8e2e30462717ab14a30178ce425366fb196986e8bccf1b7f116e2bc9f1026956124109f2a52356a602d66d27b26e16bce0dc723a4d5d1228f983ff5fdda12ec0c127bc0a0679379b2b74c8febdda85071342981015788483e2baa4a4820cf1091b30dafec38fda8e7d6b40d5bd3f4e54111a4d2c7d97ef1a4d80802a867c5c99710acb3374dd9bda8928392f48e2ef3e7af215c21e41be569a6426644395cdec62f4116a92f90819cf4a267dd98bc420a13896935ffc7eb369e40be451dfc19c81ab51e69658bbc6c03f9d43f79089a5347c23f2bb2eacdb3c6ea52d29c0d4042d9ee14a0773136bfc8702042b778c36a52b6262c85ec5187282869143df71cdf72d64075eee9b63e49f0950ddc7684f63c4b68600135405acce34c3388227544ef54e911501d0691905f79c97069a7a00d6b4ceead2d61d6b801445605f7131c574f589b2834ec5fa5a7159df9b9f20fcefd19fe113d7ea1f66c97a53ddcbd0db3b1d63cfb9631508eaeb1b201cd2eeb87e918bab6cb5d638e0a8d49b73a3dbf0a61a91c53aa9d0d555e95300f0f23de3e1791482341c7c586c5706afb7a59dc64471962b7daf73e029d083eace6988efd6fcbd0e005846ee884862f9202da09ca4b7037b08e098b9b5553045eba56a3cbd8107b76815c08bc2f19c1033c87f04255f4c2c52c999a2a6dbfabb0f426c6b13da6706c1b173808ad6f48d68e2a39d74def2c7e1d7016b6cd925b27face9fb583d6d84a3d7ca8d6e8d0eb9462898c8e1ba79c63c956a5485d143b4d3516d5e293e8db994e55002dc786d2c41f6e8f71a7653bfd9812efe7058f74a90dc8113d5524a0e0b668e71632d826ee2d9fed87d97030d3f36e9d9bad492dc3ebaafad0b1d250a7dc7e0697110d0f9af4e44cd89a12a46d4030576c3d8b8f24358639a2903912772a5e05bb4c6eb451dc07556dd091bf54e821c4639d9dc253552275bbd8a20fd607d28b87cc433e9a4dceaf4d6536a80f54098d87b5c7edd8b146572473556f4fdba0400577d4d4feaf0302803f498826ebb05ae16d51393cb3bc86e4479a59670f91ce3c36689f046a6cf80f4812862214ddd277ae82cd06c14bab033eb9f5a8096dda34f248c734e6d2370166d8cb8a395a9d535ea4d2be45ba6e8a3ff96c9932fc0ff691bd73168bfc675e83e57fe6c1ed647d67fd6feda6d2768031a4e6c2f2051289fd0dcb33c2b4312f867fc8bf145fcffbafd6cd1a4c5b6cedfe008aacb2528ef51c80f812f1c03d7b57efd19b9a7785d7207613cd9f1df7d98d5681ded8a92943d860223b82e9324ade7dc005bbff2f19a1276a8e07dfc04dc6edf3e0ced38b7a17f37037dbf7b8a40370be82dfbd74c7192ffae6ec6b6f50910f073bfa985da2c3830b8d66b27992ae12f29c6e7bfdeb72d7ea5cb687abebd602e576c6bf47c4c3561bc589e21a1bc7a985dad0ff718c93676379cdfc1c257d0fb6199912f0e6ffb4c768ae4e4648367e9ec46d1179b364278cc399916b066e7ea2adda5701135fe737fd3cbfa320e3d966e3ad7bbd67cd5e8ec4831040969297d0b9f3572150cb36940c9bfdd9abb60105bef904e4b0b6569004f13f42decfa269c54bdaf9a72be8061d32d091f19840a2deb77397960755bb0a4ce81ae50ee694594aa8311f6746b4b96b0073fb6fdc65c951917d22a8a4365efdd170b338ac7afe588870c06798c767ad5426d0251e77092d263f5b818b2a886ac3eb51333c423bdd435e93142666b061955378a04e0026b5fa844a7b51bf10fd8533c6e9de159941a1a49f5437ba1bed8ba1fccab427a64fd4f5f57c401c7f1de1f11a40da1b9fec6aeaed1014eb30bafeb96389981513657d39666d9e6a5d319dcd5622777bd54766d7833106207730b642b5c741f2f45ebef9a537b4d030a3826e8176fe5ec3b85d146b9d538179b77ae5fa6bf8e5d2a25dddb8c0ca7782da587da324b7ebf2a81649ad3e4337bdb8144a3b5d05163499228ca9f22887da3ee7a1c513ea4be9805a1d4ffa206acb994a188085b0aea2abd7af80b41527c137f683ed2ddfa530a6f1385bbb30412cc4e5f7cfcb41d5a44042ed43eddb7fbe2d4fca2659de225084a343d868bde5679fad913217ffb2c3c02deffc87c0b85988b81f757f2eead08038e6cfe90d7e0494698bb051336e86935e5db2690dfa1ab0fa2ae4881824380477c8472668338c0ae3905161253076219dde6e7b096c8a0edd927a5ae4f9117729924806182c8669e1461e2f1d2119d2b41a37a5fe37300828003fdeda90e14116ebdb7464927a182c551ea36369fa0f69ba15cf32829407a51b3cfc411233ca067c0655938df0818c665aa63e2f9e3e866610e1ee763f741a8c789d63a68c79c1edd392ee44710bc821d81ef89b8fc9d1c531c37a3bb8b550fafba7867576b80ee54a13bde0841eaa2da2f5d7d7541613807f5e1ef887340f0ece04f3a678efb70c72c04888b222f833c0112408758f133e029822d635571e70f89af2621b84820b5381d665827f7bda385c26597a9a9ba8c35acdfc498847c78153cad1e5e0388af53fb09f7c9efbcb14bc27f0eca17166c98d69924b2e50bb7215c51a606ba13061e01f5d28e540ad5c1b6df5530b5e1f1d173cc2c4b002f6d2ca2966148d84a69e4e69c70fbd11291660419135402a7bc5e28fb23b78251da9593fdc88afaa94b46fd606b88f37e74c73ebeb1ca89d24cbd4a98a38ed81db00aa4fa54437dca0ac2db042abc17b8e053cb32d8fab7fbf36d7d4734377ddd5dea5a1e8d08fe0758d6f3da271bda3c64aa2e17c17b197f70fd25695e57e03b64b327cceb51d7eb95f1cc74f91e977392290bc033b22ae715dac7817a56ab9244f392a7f7a4b80152a1e947193afc18d95eb8de783668cd8284f82210ca4c8c7f3a2f122a780ac30f75cec2f0076476aab9c9c5377e5f9d279a2bcdda192f8493e551adfc423ccb3cdbe19b15fa5d2796d8b316da007bd07578d6d71ec9d104f393aecdf5a9ea645b52c622038a62a61e2a0945d85359f21caf8df05752dda84ea3ab14af058038fb68e0ea414e017cb12c40c4caed569c5dacb58c2c5ab1c8d5b3baf480fb9aa38d8cc666479bb615f06dde362a451e19d90ee21cf637d9f15942630ff3e2965e923cfb289f29fcfc4c5d45fc6ee0fd051f34a8255d70d2bc29be47a9a0510fa4aa07d3a3a04f42ba35792c9a11479fd890bc5c27caac2883c7a5cd53fecd6320256bf45a039223ba3c5fe691a9ff532ece1482b6b63037d2c39758b177ce3d5ba4e7e1ce21891c86d16ff865a16ed35227cbc034b8a3ad33ade19e3493ca0ab198ea0082a29aa99a8527f698801c8cfd4e5079343a7ce520d732f24fdb5737bc8200e4f9df5d378fd82655bcde9eec8aa2213237c4327c24eff9e975d6dc50f6e0bb1396503752b14ad99a25154c7e84b3dc6fb1ee5adeba48b50848eeeff2db4587010aadbf97b94db02863bcdbbf7603d0a625016c895b81e2c33bbc0879e420e321a9306c53026148a51b3d932bc902bc6a23a5de08732c01aeb0a69c72abf35e1a1490b431271611849e3029400840ee20105425d8ab97902f5a3732598d4d664ebf472dae81ec995b8f1cf498be3ee45c8d94da766f552cc99af660bb228f8a340bac4f17cd455e7e405c8b92556d4d93edd0726e38f52611f56c8e03e64a386eac688f2943c0cf71648764c9685c685ad3af742c82f82a7cfbf230c052fdff5303e4644f9fdf6ad95e1606ba517cf315b17a664df7ce887f113fef7cf32b5d8594b874f73c01bf1abf90f7c1cb5f4c5919d9af2ee1f8ee9cc79e20964142c17ae14d17bca2d84ac9eb809e9c1063f2a97f45d56bebf7cb6a91a56aa8b7e4d9a77c2af30c5eb38c4b745d8185db3b746b54377f61705b9d4d01ee2420e181f49fc7ca6d62da33f233ec90373b763640233b26e3cc1994d2d89ac0e39b389aa0d846b40d5cafca2af7b6b136099bf4f47586bcc8f832240a81cec63f7437af6cc58b60495649f6852b5548f49c96e7ffb6e93185626499a2cd00768e485920c70c1877a7fc33399f336abff951019fc07bb55dbfb73b564a3ef25a668437af3df05032bf9ae613e7a4499ecac3668cf5488d79ce52f0ea6f4bf6da3ec43d9b3036c549e6cefd15dce2846ddf60302ffc91c41e37c25fe66078908e9d64e5855c240a25b414c2a01d92ad95adb3f90944dc1bc39281c2baec4941e00902c9fdf06c714ebde8e152f82917bebc3b1b997cabd702451db3d85132ad66e80a5555cb64bd3d5ad7d39f1b1a753191622260f2759842e5f2bddf4dc9158bd108122d1ba1206a114e03f4e4eb28a6b3c5a7f044cdd20dfbad4b3010712cd74a787b048fa64d6d87d80ce4f42fb476a9d216b7f21916ebeca9e66b77cf55d1cac80a4c85d8b6b014f268ffa73cab39ca13f92868dbc9353f8519f1b23822f3c8935a95acdceeca4f2982959ca67f68bb17b9d247ba8ba26aab40537e4016c5ca56b65053274824ace9f45742f1937bf339e345ed09b09c049904112a8b93b0568ed80d172c6547a4b028b518b299ebf9170fe3e75dea8a83eadfab455f3c5bd3a82a3c6760c8bbcd18ba2fac4df541331b9a4cb52b9c066f0d3d926d5f7310f83f176ed268e4e98c8003377c48381437d41cd0d4f737983c6ca856f0e0da880ab03a04d6a93c697982ae5ce715d4cd7dbd0220d5556fa862a59a797ea7d529a1a80caee2b651a40a9d16109b5b5de58b52d4bd24aa86cf7834ae7a7508e56e439309bd94f4a731b63bd4f3077d25f4e7221ef6418b2f65f3863eca62789dde66edabc15c08bf9b12fb555499ffdf63f7a74b6cca5bcc144b36d5f9c59b60e292248d4aa646fd38973821e5e147ecbb535ee4a11db0ef5315b2fe791cd5d1234be408ca125402a2c98ec5076c09d07370b56503ba0efb9ab98732d8e6bc6108fa88b8c01ea44252007bb949a8aa2d24e64767353dea9353cd2ffd99a1b3931c34af17bd29ac5edef27b791d15ad45380a81459607c82926b719c92bec5fd9d570b39011d1f09a9205fa8f023187cb3583ff9aa6a62c3f8c0dd120001515b7bd3522dc7e96059823c19555898ace2195b91ed0f7a78b38ec47f29cc6ba79bf3c08993753e45fca0cabc877239ff4eae1306b82f96a69c7dfebda99e04b0052fa51734b324b63c2a52b006e60df7089a070721b4c9d4c4ecf700591dd552e0540a64d827a49b5f495d5c9a5b1c7d5704bffaf14318ea740435b102f2e576768d77d8467cc5dcae24722a0b796f7a8514c449f0878dd0f4ed42366cc53c050d0075db4858906271e4198120e90dd4d8f49d5ae6252f6e8ccea6f95f3de3e5eed58bd5a4640b13f0b0dac9a253fe7599c9d2979bc806ac84cfe760a302e1006135422e234740d872b13e6b5a5e4b430fbeec67d7161b73231a8fd5ffbd3e3cad48214e8da9379a410ecccd0db3fb2884f8723161b775a9b3d426bf3d1603831c35b09daa34f73fa3f00d5886fa160b3ea2ec5f02541c387a28328623b437bcf4257784428e88b0e17f87748cdaa5d386e2e25882951906c13c3d917a40e2cf7e3fff691c5ff2d642e2c48ae6fbaf6aa4e0dd84a92173fdcf38ce4a09610ca302accfb501503d9810424c005d063cb7e0c6654b3ea13204ee456e189ac0be22c8936fd1b90872dd91c6a540b9a355a282b900150bbc5f02648ba363f3040033171d68230c30998f0f9759b0c2790013d1e3384ad61b01e17a31f894ddd6d8be39714115c270b895d0dcf0ba3f3147f2166c945268652088785ff21120de50ac74b9820ea26fd9d71dbef0c5fa7232279a7c9c958943c4dfa63f1b4384c36fe3111ab47675d6033d3d65e338b9e5c89ba239d97c005df6ce4bf6fa92d12e3d4c57be5eb4034c3faf7af8507d4532113479ced26d975abd3db1af1767cec6c3cf90cd0832147a94151aa0c0fb660015db66610fd114e322141e90fb2844340855026e3a5770080a576684ba1ae3f7dd79b01b1911409f2c3bdbc12d3ffc1f14c4f7ca7d8bde9da95da6cdc64286c070f4a0237793e337e39a306b3512bb30f006b509583628e17a0f22a26cdb1503d6367ea2b1c1c5524f1a64b69c0b4c0fa301845254c0147e8456212c354d5967182592bf5002ad9979a1c1c9e9907663359faecdf7926b19cf18ed92a8011a953dab23a3dbbd65b368188dcda40b00d4afc67aa4cc12f45d643fccfd4e5d20354daf7a75da5cb34a246811 +MD = 1e83e05b1d85d9caa756f97b6acc55758e85b9597fe1150daad2eb85 + +Len = 84184 +Msg = bc0f71ed7defa510146cacc1f33d318ebe8599d4b0a78b313b5cb03cee03b7749c389d77bba72b750a22c0e377f250743f6bad4557c405570b25ac43e5001c29d0a53bea7d11dc9706078729d1637d72b8aaf75366e5af3004b0a1a1168e136a9f7fd3ae8cd5c05f4f438bf9cb37bf707069ff66a7b48fa2702617be4953a31f53eeed2bb09adfb52ffd54bc2b161f56b0d14ee7e0d9b09695ae940248f7d430321912c9b0084282ec5e68dbbaaaa30cc00a6b3cdafc17f5bd71a2d5da23ae868529c9f056c8f0accf8d51bc4098557ae83bdecf5dc4cea52e96c89fc67f3a0793459b086882f11d20b297c9858b3d89708d300731d9dc9030468fc8d5b27f9ca6960f79afdd4ebb27f7c0695029621f9f27e84b1de4499c0da97db8cf65852e0444adabf3820e702c8256036a1acc25be318e05ea8d1db30be61cd77c3f55a3f676fd06fc193923767be1019c07838415d5ab9c607b61bc7426f48ea3e9f6e5c45488f39149d8bc4e0be7caac989022ec39c67847571d9f8e908b430e0a70dab607d5d87cbaf122fc5af2c66274fae98b85670167c85744a24d6b5f834bcc6c14b76c1e83158f3fc88f895d8844c9c039e2169f88771993f7841c4bcb541182258bd62e6f02b7faf9d235f7e4af058e40785cba710b6a74d75e246eaecc470332ac9a6e0728733bd94d7cfc405eb73de66ec0baeb2d53cf88030d2ff35b77d9834240481530caeaae25e9d462f8e7b474eccb07be85da8c539a5ff864aaa8eb607451235fc1c5f0c18501e712269bdb311c0309b2ba0a93804ba030c761e221116a5467af846a335a934e9e1a90dd9a6724f2288e75e8cc57405a3ee5282d63dd4dd17bcb21c39cc177575f41ddb4d95c2c20cd1c5d7e1f209e148c86a592990e4550c97b3fd8133d5aa4934eb629805a5d145e221bd37522905781718318abea795ab88986af811764bea30ac24277a7de56456956efb4a63caa857068c881ba1276b0bba052cc98bc2cf53daa09a68bd86ee8b9b7dbc6f4ca950049fda804c5372d19db32c9de058b76f3ae1586f65073e5b1dae69e915463a05ac5e9c31a5511065cafe71a9da9f8250427acc04d3cd64107938a40ff0e2f54fcacd41eacb0c889df00644ff3cb2cc08f6e17bf95992a0d51ad4bcaf76955384cc668c3a31f833e0b955470c7b24ecffe4dfd8bb4ad96cef9f1d34360aefdd5b3db4ab9e5ea6aae48385d8300a787dab889062d94c1430e6624c7b3242651b19ab225085c59a660ffaf279288f2ff6a25eddbac1b1c59540011d2222a16765667149fb9eeb45fdc96c35ba446dbdd06ad4024103308ff292f7f9a995ac9974c84c960d28542bcab773ca1c222aa4a37b8498861c3cb5d145b35c71f9c86da195799115e084ce65408e2a0f304a66d84aed1b0a8b2ae9c9decfc02bdd89467474a4c5a625f1a055fb37d013fd4186f75f7a044edeaf9e44c4a9cf37af63c675ec3a9e2e872f44055dfd46bae7a487792fb7eeb3652f45caadddd415edec602e42c7952f72922bfbdf3b08749df7eae6423334d8dd2e72d3e0e879471797a5f63ec8451986cebab1f59d9fd17e9023b72d58613f952197e90436196bcad9fa7626b9288d223992c0378177420811b47447a41e583bad37829e534ed46637f016a116b9fad367269f2b832956d9013fa637b2a6a31f25d43905dc841178460960246d63d318dbf8b7481f10705fc307b563e0a4b0de3ff064d12e53b38f68b8eb2729d0a6710c7b90f3b1d72f1afbbf3a52da8301f7301eae96b5382b0a3481002fd86b056a8d41c4d4e7e80378ffb89d9afcebf6e8baa16ebd2d9bf8771df447b4f5ad4063b2cdcb523dcd7e1863a66792b42a3021443b2dbae419ac64a9753a4d0e02180b21820cf20ff1ff67bbeb10d0bcd82e3f414e8426651ba7415b96505e9e23ccbf6e01024aeaf017f55d1931eb637051a1565dea764d2c899ba8da1270026d0efeeccd53b36b32483feb934339448d3ad5d7ebc920f8b6b3e205b30917f7683f58124979c1ed4320a5dbebbd40dc895a7b6a6ab8bcf464c69316b3acbcc98fde4992f7dd0cfdad01d5a2a5189897ef20d0727d31b0cc91325d404e65e5154e7c41d36b05eb28da8c2dd431ddb703393e938475bc92edd6777f1705cd17474e99ef48158ce2eb46203ce5348512aaf1f42304f6b1e9d4af06971f5c5ac9fbeaa7908589ba9aa19a6e815a0f9741fba3f21d9872da1c2d857023adc497839fcd35d4003a47690821a789b7359cab81c9b8d1a36c7da034f444a356d0fbcaaf40b5284c999bd47b869bb461390dd5b9cda8edba56151c9765e4a4aef4000596ffb61bcf4a307378339b9ffcac5357104a42c041d248f7d164e0962ac03cdb0344b91d0cae9dac8aa337bafde2058631aa3707ee4371b85f7bb8f63ea81a9160da2eba99494c162f7fe083c98cad097a77c612f42c37d4be14ee537f2e11ff3c0a8752d99cb416d3042689040eb257772da080081f03e359caf12c40c4cb4b01606394523b7e4511ea9a4911eaadd6a45636bd9e8e5e5adef851ef47feaf2b3d7643fda787f317689d9c329793082d7e6bf94a3becbfa1aa47912ad95e26065cb698dd2e14db045397acd3f9ba59b281e978b444cc905e48132f5d9945d862eb9be2d17a646ea24f535cbbaca30b1c4b59356a6da088f724f59cf5fc582ed776b0b278f0f94667c86b2c4844ff94b13735affafafb01f2ed595a927707a1ca6a7f78124645facb6b598c0847229f17d20958e4915e83e7fdd8f8a19dd6c9b25362a45bdecce4538488fc7a27ae82c6a83eb095b52d873cd2dee7a1d5381f35ae04d7b41f00ab86c0741e2c6b15d824265057acdafa946818f5b811b1ce1abaf6c08299ab83b8db9bc5318d85db17d6d8e8ae88774833f01c87ea8fb7eb34b8aa40259af8c874d862d7072c0c70ba553c6235c70e98de7b6a3fef6a5c2205c554ee41268b4197f3d233ef6663794815dd578dd7256f0c508e78474012f4f657733555dad7717ab456665aeb3f47499f18230737402d362605bb728f80f68ee581bfe41661faa5a06be8ea28d48d2757996f4265f365f4424c9401c70a8957f60ce86c67bf2f912e8f361d9de79d69e5bda6bff193abcf5bef7c6585244fca1f71397f4d4392d5e53cc855b8cd0aa9b01133e058b5611fd94adf2e28729c5db85b3d6d45a3b6dc3af13a330809573f4d10c14419dd286e210b56cc4f69f19b67277ed6df342e2cb648e6261a3105c32358c96b938f5452e98d6db0686f020b9262484c78894b3fdda066bf4dc898adc945a6c774208736896d7e7ae2162016c0a8542eb027a09e1794265f41247287a553f3d83a5533b19718139c6ae3fe5578461d0e0473c0c00aa0cf9662f935c94e203b1e3471ec3c8919c795514cdf303fd7fd5ae4122e3e1d32acf541ab54eb3a26e71a112b133fd5ef04f643d5554f7dea8fa5ed674b70d5e658ec5bbf5285efd4725c5ec53b441404461fa101e2fbb8da4e7f7f079af0ab185dec2fa9a0f1e5b587555bf4e6e1a9f615a1f7572add8743b4381767af46236526952bfee2d7a2467075b72e88813e310e0db5497f6d5f935b70550bfad9c5394d47df237aafac03d86deed6a2ab174179b3795d6313a8659ea89669003417212ca4b7bbeae2698a298e7181c7e7eba3e353a2177869082708518a0351ed8fa95f1c542cb6087125ee57ddb45a9011e4f53eddec21e5d55422fb7e6f525e953e5f1f230a6e8a4973816a81e2ed6c20610a056b5ff212c66979170201a41fde4ca73db2b966f0590f9d370c9202b4adb4bc17f8e75b7821f37524a36ea999b170c1f861ce41d336369c3dec461d02006c66170526d06e9e7ea1b4e10ae564b53729cfdecd919b57a508ff9f739eecced4a2630e72f39e82677948296ad9f9501c5934881bb8c133b76dfca4af2add7fa9eb8c63703760845a764f0b1319d0287cdab6dc5d29dd610a35957a6d334c8948cc03d2931e5cfaa4234a0478077194e528d769f687585609ea8aaf123ac2722dae69aa400b0c7be10ab9841e35662be1ce06af6c33ba8923072cb152b3c7d0e51d1e792bafc78e9d872e288a262663ff24d52b42c18c8102160c0f8330d50bfb92a2cdaa5f469946430860305c2ac3a9e7c35c0eb346c413919938482472b9dda986f6409bd22257a8e8a99549fbd15e6141b0248b61c8d3f464c9f621193107bc4ba1830822b06e334f834d6201f3a93be0d628bc6605cfd8ef13319931280665514de61690d9d67c9d7bbd46e5c0f6d2111c8fb8ec116399a8c27f0f62f5561f4869ee39a4f54cdf6301596b0fcfe3be6321ce133c623bc1124632f6273f735491640ff3e7992df620a2c640f856ec7b4754685e0f8ec4e9cc2cf1efe64cfaafbceacfd7d13be63b56de786b381c7d734e42e2fbbddd7b6e36d5305f38c4387b3b6ca257ea6422299622e43c37770340d86bd27ecff4dbe8d2dd72b6873bc9618d583be6ab985e4b4efe9e568f0d3a6e863d9b49ce6b72c430a43d9869fa39dd333bd1268d5ef70ae1f00b2c97357f46d846b20f3187bc9ac0d7f57759a5e658bd86167a181e89030f75cf30f8864e843f05cb1181f035d713d73ed5cec57b6e9cd58063d45d80ae281e3ef61b7624813af92b03483b5b039a308e3631bf4579519883763a927a76bc47ef0e889b9dd84caf7656ecafb89ad452480b4b19f1236c4db423b363d2f74c8163ccb85d26f3f487217ef7e3cb2742db00d7436bfad74d7386eee73836aa496911c333413c6eb31ea0fde26dff1376395d2ce30bbf1f9598604a4e95f20a435d9d8481ce5a9318e4996644b4e0f9eedb917e829fda66a52af4c841e3a181badd4b831c7b1e1b96676f2a974f0d450d50624eaa8ec9472ca9a8eb79c7d1bb2076c0417bddd372ac1596bd4292d07f6236340fd36f082b7ca2f1265eb8ef1114a88032184d3702da7da4b0ef36d7237ddb7b5495a713ae159561fb491d762df7e0ffe78a6f9576921e1d87e5818dbbc0decc9f59cd7829980f7ffcf18be36c4abeb3d43abb9b38736565c4de2960b2dbae9c529848b238746faf8dc08ad346ada0308ab197a4b2eef211da21950ca31ed96f10f9bf3e552b3475304e70b2576133fa7d87aa3e807522a64a684acdf70addb94cc68788fa2cfc7586e3f40d1935c8761f1559e52b96a5a7880ab13149302a0f78b7382eb21a3604e4397b40067bfc3801f33d251ed3c97a35916ee2f42f4cd6372457abf7536fb7faa78cf7a9a43db4a899ba7ad4bd2ca2b594ea3f9248c4a1ea965c6d446908131cc69f906d5f0b7085815852d7a33dc59a7da9c3ae2d1ff70595bd0f23dbad8add0f29a6ec0cf4001b329d49b2367b3756c423fba23ccd5a3aab0ffe001bbea3bdf9b1a7802e75c7fc360fcbded7739c7cf0ff6409083b2fec3ebba683b9b9d2221ede1ed4341f4c8af41655b816a5496f9c82896d10080c8cd946b509363dbacbd6f57942de3f125a055783f8648ee2c12f53c828d4b254aef347961b01a8b1fdcaae43766d739debe229b30a519eecf411e9ccd6c6a8bcc52524c633bc895c4a524f19c9625b63b303237f586e63cc8aeccaf3f186798951d764c1edb75e0e34167e48c66d34e841f0db557d0b6c05f8286dd9f364936ef7928e15a392a56c4d7fb27cf7debeb00b2397b1e2c9262dbe5d58eb771194c208ef173defdefdeae9066202d857474f81240f31241810a86fe402a4d6edec17183586a73ceca60eb9432396e2377d1b466aa84fab88ba0a6f64f192ad8a07f2a81e62ee154c5c5c10ae6d95901fbea7cd7fd95a038b80c84f48ac41655686d93af2127f038e7f3791a0b67b8c708a7988dc390ca6a113668217a91d88d3d73f43693bd672238d35aee284d511da6f04faf83dc41f59d0699a5a6e93a2a2779943dc45910b9c14daeabc5f2eca9deadeb66c6e1cd83656561a7963502d12e67bced3b61b1a6894abb7c6bbe5316b7c6b2d9130735b96f39064fd3dbf92c5b25b46e803f139198b0cb87a0194d0a3a23ed31f2b64341c56cd1c6e445e7e3b59cc4e71b59fe20f76924f4ef6ba12d6eace395eb56bdc36fe40a3451d9949e44b2348095193afead5b0eecdd1c18295b4ade2e874f6ce6738bf9c1a301c70411504b6374e68ed1c270d397f4947aa309e324234d091853db47e69361244abd235f52b54327c3423f8eba1cbb3c8f468160fe9dc6ed89b2af0218d513a9e37283c591a18746a1f82b9f0aa3ba7a1eb7caaab4c4786186aaf5a3d8ad42fa5bcb376c504ccaaaf09c8e8a0c567ab7f1a1eca78ebfedced9e3b7126e43757e796f493ad7e193bb78d57137085b825cceaaf041d4b7ad9d4806fc3722c0349d0707c0196d866be1014cdb8e45da5acf7e7add5fcdd33e349cbbcdfa3b4c07bfcb3aa5f05c63d98452a8d4770dfc8b7ac9babbe9c23c2afd9ca93143030e774c8fb1ffa6eaa2650c349264daa6e89cc4761292c6fb19f95e127930fac02f0bac1913d625606897e16fb2949f59c715144f296be0c09331c1c4d2d207bbd64c483109335406e0f86bcbaf6bae6ec17fd41aa84d1e59d25c8d7c5d20523c2cc086a13b1d1b232f0f131032f1ef2dfd616ba03641680dfd012a00c221c38b59f1cf30509c620080643f05e22f4bdea44341a97c4ea6263da90018a8dd43ef84678ca5f1b811e6f9805873682ca8c8ddadbefd227cc0eab9db778eb75db8b2d6a823c9c57a111bc2eac7226bf1f034d1284a63cfd39fa29a1ff72998a80c1a763efe6475e948e7042af3da9484096aa83b4da42b5c299507fde8b0f3c625708cb1833ea80d9f94e7c943638befddb2896f2f88df1e470d29feb2ec6fc0edfb42871c1e07effe69924e2184f73a52549c4b58d79321e25027a9bda5b59d4a05be4a30cd39964ead2e41f407806b52970b573059ee6ee0a72a8771a26d6526d428812614e70a75a9e22b23b2cf8cc4c5fb1b20d6990c2b5a5a1e37ad3e2168b1a9b568b9b9545da5d793184e8ca48f2496208e153c03a9b1def9758cd0d8f8e4696d5d84567bece834013aa25fbc9dfd04ede3df7e5c44f4df9d9408cc92beb58f316d3f67870cbc22fdf178eedbd5976d0a88fc071ee26a8494fde9da57a16c438900b09381a467c910a596e4091f3cf800e33480516d5cf66517f7a1308c50affe7ea183709c3250c1bec5e74e6332cd565e4f91fecc125c9849faca2464aaf81750d8df5cdc65e099a4cd9fb389c215946014e12ce7d4dfb5fdb9fc3c12c2495ddc1d4e4e4b48a01fc076b63f7a34f843504c19e3a6eaa7459afde07f7ee0c8578b3a784cd323b9db7888d1fb1cd09dea98bfe02bf19bdbd0888e1ef5904c9d8dc5f506615b3d525535ca9bed58de2d119f35df0db031a4dc2e345da6314df187f318a092ccdf94166005b91f17a5cf40cd76be90cbf229f3f6b7459b472decce7b69ede90c51a7a55f01d6993f6eac008a4924bd2a27939c47de7fdbbb32b5e9c7b1966d04dbb28a9c869861b981ebd83e78b99ab61709608972b36e76a575603db742269cc5dd4e7d5ca7816e26b65151c92632550cb4c5253c885d5fce53bc47459a1dbd5652786c4aac0145a532f12c05138af04cbb558101a7af5df478834c2146594dd73690d01a4fe72545894335f427ac70204798068cb86c5a600b40b414ede23590b41e1192373df84fe3ccd55d0b9fbbd080151ca4629c3d5b3578e6e637c15ec9f1ab977b0d0ba50b67167409676bbba48d542c104d48ee2b1eb54c5fcefdafca18bec99c785714c13ea87bc1e21956e497dd9c9922785418ed7e4d47579e0fda4fe011bf212b2db98f0a504b24af76d7c539d6078932596ccb5c51657dad6843be98d6aaaf8ed83a83c55d6fd63802c640ef40222980e46ddfd6c082e531a14b8f6e8126cb89fd8e426009f7a0b9e2f92f8744b1ab69de65527403663a32a23be7ea78fb1d2284fbf363bba9293cfeb8bb89497eb6f62d9a4bbe80d922b9535bf19524f14c6355cabf56dd4f1ac83e4b0c7eb74ff32dba55f33da0a345cc9cf2d2f6edd001545843cdc2d6af1a668af949eef5ed0a186ddd7178cb8b4d76654ab5963c5fe3fc76ad462f0e92d21dca0c9b5f6d20a2bf2e7ceef76a5bdfbc96a9c0fb77679b6395525123edbfe9f5e6ca295b86af6328e6789243e3d9a6a817581baf08b0d0919e781728db0008f6c67c1c69a864f75d7b1a84e3a0ce4741d09fef3a55022b8f7a68bfc5401bd72952699b123b050366d7aaed5f07016d8fa9c56422c82554640f6a728384d9fd9573dbcfdca75b3249e070f440823cbe9b8b14a1f1c7e0f21847c558e80f0223420f18df51552e291080b3c20d7845e26c5cd2cf2ebcfdadb409c3987e495ef0390f69f4f9ab4693c39ebd7e4e51e5820a064815620e422f3e3caa5bcd9bb40d815c16365b126a166822d4518c74e4467e6fbe9c1425781dc1cac3c85c6bce2122dc67ccfff3645a09f341634d4b0ad5cf817b8bcc696722429a5608b32272d52579a4df6db4fa08adfb4cdb1c3d1fd80522c90b1342d6e4cb94ab425a2969d1911a14962ebff5c85d213ce27eb2eaf6293cee446f188e0b63a0099fdae67bbc6ea7001ac97a1c41204d5b9ffd1234d842b6335d6b53584013a6ba47b9c36f3fc507b092c64f391cfe67ef3b20c6c5255878e07f8c5bfa2be28e046182270f019d246c27aea51200ff5841dd6f346586746a3dd15c983c73d8403015ba7a21abfee57c0107e371962c0699ae73c5dca39c74927c6273e8c0fda5858deb236ee4f03227475c731c868c5a3fd6b3e1f123db7e26a72652c4bc5aa34dee9c8cbe557cf3b72232bcdb77273c7a7cb8f16eaf3670427b319e9a0df623ce63561cd9a5a91072b913267812069593c8085b19eeb7322e200ac0305bd90e5211a03b867d8072a1358619b9fe304bd2e32d89ba8965ac32bd391e4e4f0c4a1f2302518f8507ff8bbd14fd68e3ad487ff5afe11b2748c7967a4722be9096c17dbf04c6ba6448a07a7a433a4b6b8672e22514cd03716969a180bb3347c77f59b60e2f03d0c34b3eb4939e382b3cc2b3439ce6b4390ecf7b9cf71db8b09cd0fc11370a6e984916bf8231aa60cffe69f2e982acfe86a782e6cf07f61bc2b69091d5621e70dc9fb30d2c7cf118015a84171dfeef12b2e48b9082d6ccc345bec7004bb9f172626c2a0efa9bfac987f71a092738365a856cf163fd8f2a18015b7d31bb610ddaf35981ac34b74ddc2a7f33b24f59093dc7e8bc4687589582bd36bb0b6c85fa11570ec2cd21f773b7b297d7f9dd89f0233ffff5206a59976943f78878a84b3e805632f55b0a84f3c4e7e90fc618ef7474b65aa3dbecbcb7355945ed60b5db638eb86d203d3785556a911de20149b41c99f4a1ce5e56a67e4ec8c8f1a9dc5ef1a244694d5bf023221077db5993b8ff71f8c17b7e91f041721d57299c3c65fc6e26c3cb839d7d86e12062ca7b62adf9fafae590bc5c01b51d08d010f60198dc6481fe3ecbeb25d51a011a92505770ca3f0727898fa7d32a0778f92408e0bd275a1bba682c2d3239551b67dce05a4899c888500e005aacc7b6d69c0ed9c21b04d95cc2f1ae4bead91bd6115034547f8e1ee328c6165dd5b4b4887f76718dfb9c68acdd82592d96def39adf95532b5bd3c882775ad998961a89f86b02d92ba5178f73d2c336bc7d6f66cf9a5445c9258d4ecb057151f43621bb8c275d1882619cd6196a5b4cdee9b5fbdd0a34131424e739289ab48757fff0d4ae7d2d367c7753c6066df3a37c20d73a2cf7dec4f6a2070f00fdcb82ab37b05cc5331b3c002e65e6a2a332447f6bfeab2429f96056e5155bbbf75d4ad62788d93912ce31f5d0fabe56d3c136cd1252d72e672ef01b363aa2c05012e8c217a1d571e2ef1d45a339d788c74781505dfa45b07b257a2fdd9d6e79d09463554e22d7d76b2509d7f04bb8a2456d2eee941f7d142b8509792268464d3e88c379163468d27419fc93fe58e90a16db4491fee808c040f6a2e14dc0b3a464991115b5ff0fcac772fe611787f32a0238cb20e47e6d1e82224f4fa5cf3ce7086d541074aa54272ad9172981005d68d02ccc838e083494b8ae17ab73bd697cf3ac94549b5ebf5266f650d385ecaf2e4a614da244afe68cac4503ddffb2c2ccedffd9c87242d9b14370b0476b7372e3367c59654e9b0a6d248d19ce91d5d03fbe0e2c54417f29ad88f03f6e7bbc2dee5d28f5b4f3f3289fe92e6364714e1a3e2d8094e04f3c37afff1d062efdf068b9870b2b777de0c88ac3d1e988e746282f03fd1a54e5a28c1d6ea00c703836acab7bcd029632897396791eb2233ae5837b082fc5984bd9af609e205a1d75b77f2c031783f95b17b02bd5bcc61bb352b28b04bb9d95c90828e15746f61bfc9a6ca4e591b4883fb108b19d542d5a9ab63dc6bf4caa31a757800760baea541508f87beae29f2c288002909a8defc63738ad930088f5552cef3e3983233eae0829ad1adab24ccb5cab263094101549d101895c911785eaa1f8eae18629f8131c2412e77dabc14e245bfcf95384a7cab138598838a262d64e990d663275226a9a22af4b9b73089ec8b80d549e92ab302006a67fbed195037bfb2e304fafc39bca4a0daffbb229a190e9e0a73ee22b656493f6a8eb4b25577046d5a7a57fe48df4c5b37966112a41c417fd5bfc1b2e50c506d46d86b91abc74a18a33fb8b8c2a60ba2913a4371565ab69edd99ee5bdd98d87c53559c27d19d134d63c1b7ec3595652f8e37dcef1f58e083788eceadfe8024053692a0f5555cd28402acbfe91021db5a753b97bc7d8b51b63cfb0cf9c656e56056fc247aa5ab1a55165d4b3ff0dfe0abec91fe89ef868cbfa18b03ffc3817f463b0e913840fc5d28f55fe4714634179c6af78bd7e3cef4083cab5e0084a4640f694661bec5c50d88462105fd9ea2e2c466c8ca1708c91a1864c875ac781426245840306e9299cdfb8f5d4a6548b0c48c668233d7ad098168b08ee5642c65583d9e6867d845eef0eb27410c18f2f25f8ce0b0539a7f04ac91b65b27c7f02c5cb3823b827c4e4928dfa498d5b92bcbf62e7bdf93cfcd5f0dfbdcb9a73881bdb61eca461adb1a1cd8518da131a631c23ae98e6c9ee8365d183faa270e465fbdf6e7dd049b6537ee71e94916aa60c3599056aee3bf9438937db5953fa761c881919710e37ebb3632a7ff7d559a895f1688fe43d1802442a680f624401d2b7acd08b52c8f5f3d839dcd1c90da9c80436da738e3b27b48f2ead489dde4c9f3d4d4eeba7654978cae6463b90a322ad63ee35daf05132b42b7f4eae9389a586b755d962f94dfc1f9254b0e6d6fe8c00b900c2eb93e5ffad20039368cbaed22f2cabba18cfe7d692376961f92286af680f54c9cffe61584577a4c49fcdb39c41a4373934b19d9e79c10fa39dfda3538e6cd292adb92b03243748287a2202cb6528e19ddf27d61e7b392dbcfaeebd3f19d86264ae4dadc8f368d9082251012742be913040bafb1c41a6abf5377d3c3cb25cec89fa414d715a123eacbee21a7781712f3880f17261731070967d32881201fe5847b81d75c4003e5f5c775eb485c946a3fec655a4b5b87f66e7f3960989adc88ee7106a8c8b8ef42460754c3617c347d5ca3b6df9dfb8fc7430c23028685fc276b02baefa8cab3a75ffdf340af6167baee406c1daa91c8e82b811884b79bef3f9ec31742690001a3a83dd9e97ea6bea149351d9add98c3e79c80927dc827363fde14a417a5e359b5b32991345bb6a9df020413edb38af133fa8d294414c251a6bd99c9f5dc0f1c5c055381a7c30ba9b2bd30077cd8e2e15bda09357e49f7d212c1a5215377cdca15233e53ca41204ecabf4b60ceaa3b04cdbf874f92b43237f26ec922c715b9f36f716c6002529ef995acb8a85993edec182f79e0180ffbe3c4399846a7125e28d984403ee683d24a91fa0a56b4429607b98e639f74a9cf6616a68525aa0a24cac1e06c58ed3164a24e1ba2f46522add82060d6c64f0e375f483a021816699869d6fa43469cf7b0a138a624f9c2b0afedfb5b460cfdc99e000758a1c692cd4386875667706c5360c7d01e02df737906a998c233dc07589e28a2a6e6899581909131694b7ed1b0df76a2e7cf2dedd86c9b872a12abf237a219c899430995431a1a83c751ba73bc974e2f97ec6da88b2c54551784f554e33453d7a439af286e4a92ece52ccbb8b322aee4a2dd0729dde044610eed5095e7df776e5c4ce2b58f9c9aeb473f1b1750fc29509d2392e85d02ec6974ce464bb20df4eb260f5cc313aa82fd620b3125f2ae3e01eb52896a851eccacedaa3edcee4a4cdca5c375d786defb91ca13a65b34936d5711ec6336e28e65c9ddf3b2cfd91eefb1303bb67975b45546e3dad32d835627feb553b8c401fc383eca5d4a9b1ee67e1769caa72f5cc5309b43e340236b610e372a1ae2984fc2b48a37294ed53c4b586db6e2b04fa88c1dfd6eaf95b3593e80bef4c4793a488c8b1aa8fa67f49db80f22bc267a70e5636dfbc8a21c83d9691fe4b9c3051068b3fc9e94430e7fdfb712e4ce086e299ff5a104e65d7ceb685b4c46cda8eeb14cd3b9548d85baed5ec2f412810af3d034cd67a75c541f70829f8663c4d8cea3415621fb0954e5b3b756333a69a0a41b402522517f087ca9b4a06eba23f4fd5d02c5c6e07c132769660b50dadc5c07515ec751a1d2fd2cfd8b0855b85f602344fdbd28a37a52e874e73ccd627dbf9628cd1e86070ca4a8f25221ebecfbbcb9019e86c7c26896b17cb775196fb22dc8e827853fff6091691eb69791d67d6d26f961bd14bbeb410ad7433eb5511e3928360aa5c0099345f5d934d3d7f358f405c2e3eaaffe57046d2b371431c516542c98c2fae6a40924c7c839613ed212e3ddc49179ea18503350deff701f2a3f215e670cfef45d36c0675250ca26e13faf0794f70563785b604e6918ecce0efd033647252c899390ab4d0e077930af33c82baa80f79cccdd1dce5fffe4ced1d48c3cbfc7fe06f5cb47f161b9e8dc9a93d1b27bcbcb065459ce493a20f2a2115a2eea1751fe0ce23b28fce404a39b41d42e149f341a30cd55f4577e2890e84bf26db7045fa6fbf764b0b80b6433ed23896ffa7b665f9c86561261a28339f1f031cb3bfd3d836493dc91bb5e551462ce0809bca6bef5ba2ddebb002dad686f9cacb9d178981dc746072e9f3353cf6c8fe47de387ca870a025450ab9623a6b1afa7cc2ffcebc0a48c88f9ac50ecbf8b07b34ef7b4f58e1cd25b75ec72627f48b7d7749ff0a5368ce5b6759b0d8c8f4ec3d8ff61b4ec7552ec689d1b29065cc5339045b9fa60c9d0d02444c3efbf991822ea01d9edfbc75cdee028d0406bb997a186b206808b0520da66c9bf6df26787c35ae8a8e6c00e9b1866bba44f2f3040901f3bfe199072ed72d286f60ec1951e1390365725c5c58e2770c7ffbbbd3b407dbe56193c1d8da7281c0f0058b99c3ba24e5d7d317956a69a72d05b0c924527c90892d04e9edfde6887c456c226d760edd9d08380576c84d001674eb84ad857107274cbe770c403c2ca4971e1b5e13e54c721f298ec61a96690ff3355438f6ec2807e549d5fe4b7b537f0da1dc34424859ae442e1a4c074cc95faa14a18b4cf8db71212b698ac5abe756d07fcfb7aa3dec97a1d011d138780a4fc212d370309a08ac28ee9d7a57d5cf71073f5aaef4cfed775b96db1d5522132763b752ac4adc97012119d895a800f318db6ae7e3c70344949d09e0f80550cc2fb48a860a41c570b8343581a261343b937487dd1ccce3d9378daf882af00c1daede13d851be5d7c198bc9026a29798f29f91ea422ab7694a753133c7abf5deeee08daae4868ada16b4b5dc2b5a9d8d72492b8a4bd0bc45e2e18ba62b21a4c27355b6871b9e8bcc8f89f7a294a8858fbca69dc44b494d61d12042e6498a8dfb0ccff448a6ae593da06ada79ff36f02e364a312efd1efb3bb9c3ef6a8f5122071fb1bf65f230838bdde9d6c8c7606dc78396be20adac4631e14ef9a9890ff175309d8075aaef9b55bc89851589cf4f1a093e7d5fe98baef30c23ea29a3318cb3c405dfee2d25f129a0bc6df6b2de24644b83f7233d37a5ed7ed549718a4054415e6d3635e56e25564f14e9d2ef177e54df19c411153acb8fddf580179ac6d8ac74461bf38032b88a0c0581307b05cd5a18626cb01dff70689de73662513f9a639a23098d7a1e2b236c10eca5f31381e2abf04976941034f6333cd5084a1509f52486779a3f8afdc0d3c96499f3db4c9cee45f2eb23f799b73268d46fe1e1a7dfc7d2fe704cf380d0f7918182d9c78dc773c5e1645a201f2a1fedcd1fb5101481e8ab06c62ef284d23bfbdc073162b620c102ad98831425dd505e178e303ab099fb7118f252125a43158acc8d772756075a8eafee5b6e5e3f781c5c31efcc0c8694c7bd9b52bd71b228a0eb8c37a00e09a4cc70ec3f7918defbbaf3a1404e98b639115d07bd5e8b9dc9e0b199ef471e96344e9908abeef62a5fbc8662de3ce5c75ce08fedde9fd8748dcca72d0a97384b8d7770ca1d1a76a018937ced2601642874a7beb442dc18b4e8b744bc161acb8814f990b72f860adecac25fa69456946814e971d196bd9cfd7f4302cd9e4c48da6f2791464fdc2344cadba735c58716e4b22831ec269f05bc960279e80f9640b0f093cafdfa777060bd41dc01162d3c4ce0e6876a9f0ac350e1581281e6a343ba4db0d644bbd242b0f697769f22a3a50f05a6eab34c7b5678c5c65531bfddb244eb212bc110874ac42b4eff7657a4c199a4dbc47cdb8b4f92d7cfba6 +MD = 92fb33b5f65076e92b58753b5d74fb554278a9c904030b91c9eba803 + +Len = 84976 +Msg = 3abd0dc60c95d9a004609f1c6dcf9c8c24d63fb89fa746752ee0257a8103a7706b28d748e5ee21d156b7b58a12152cb5207f6eac4049d3782cd388a01f00353f94e9dc5950d3056fa25f1851ea010a3458b33b04f6eb9ffce9ca1d73f49634f93d6ae4a2542ccca271c0901afd7b7d3254db7068ca75f328ec2eaa9c08aeeec5ef12b7cbf9e1bf914a42e48d546cced79d5dd37fc2cf1724bd68f8c26331a9cc30491c7b47db2665b54dde51f6ba464abaa32df2e9e15319e4decf8e0e05ae358b77dd5a470049453a49440feb4f2bb4331345684494ef2fe9faf6a8101445298504c01100396f5a629edf6e3c11c53c9117e58addce328d552337b77144b5d0a8598e487a6fe1ccb4b47717f0ea5e0b5b16d300bb78665cb0c05863397f48517bdc0ea6be88e8c2b9f4d4b10fc13c481978d871e67bd1c3803b225671ac44d586f60ad4d36eca64f7c4bde5a27da81c54a4bc8667bdbbeb4ffb5d3521b3f283520f487ac107cfdbf88dfb5baf08eaaf920447e645286efba468d1ab4f7c9a846690923f913d414f44b857ba41494a285eff413988a3311c08ea455e05ee84ff4adfaecb4af666e761ab96ab5d2810af3dfd712939154b7602e983f64af3f71d876664c7f41c88ccd9d083d50d8d836eb966a05c5e6805301acd511c27723d06a48c7edb9896ed26348ee5e15860ec8a59a3967a0283a773d8fe7878a2549ce129b8c2ae3d4cdd1cf84c83764789932ea51a1b2c2a4e7966c5e5c0b1c67f5dd69f54fae9eb26a2d6af74263de0f1c0802634f71ae0b1c23268e8f06f98dcc70f8dc7ec33aa0c837de06d96dd2d7ebba86359f1eb2b94ccfe4970d25c225324b17b79613583e6c739149f9bff3619cbcfe5f2d34714dfddf3f1e62c1e6bcdbae7f1d220977d9cb731d272fd4b02ab3a1d326563d8a17a3e39e7b0c75d7b30d3d7783af300a1169b8ea24e8368991a4eb9d41c6a43dc4d37f7b3386bc25b66b5a99719a018f63dbb770c9bf7ff035050cc537daf33cd410f55dee4dff41255a886d7d7f08884f75e1599c11fb74833877d35f2fc4e7b3c107cef1eed9ca8e7f696bfdcabf8532dcd90d028c33971ad3df504e2173cee2780946e4d5b622602e500d790990f6cc8510f3a38ad2d86a5b85b47b5c9a62eeba8c4e4d8f2ed9390bfeda75c8176d6ae30ba5d5aa4398d0242d887d2da34446ed035d8297ae6f778ca84b8a62dd599c9b2bac3f46f0890ae21944ba3128d379a400fd2a7bbf45aa24fee91d763d3beff2137f470d74096909db61b8f395a0f563f795aba7dc0c5f69552ba58ec184b3ac3587734a48aa89000677ffe1642d489169bf9ca87f23f5ce6d9bc90904d4b61e246d3aa9e8dcd9690ce005872ee8f1d0e9e363fa231d1bc88aa1ee6161ac35cc42993388cf20d8a97142506150548f96daa9a82962582fec4ef68c44826bd13b1283c48386070545b60776ec73005057be6acf92b775a0ae2cd2391ec1a406ef36b58416880ffdd25db7df95017d029827bf40d28cf61c82a6ed6b4cb9d5555d11b6e8be5fac10b3cacbf0f7761b04dc891fa2657d4a021e4fa0997ad5803b09260078e7775bfc7eafdc51905b7ae59964e47ad7e2f1efb579844a15af252677f61aab1e599fffa75f3187dc3c0d03534dd62086688e340cc71103a99144a62e047df5ff90f8b8a26b83fa5762520caea64d3a1d785f8d68badf4ca3366f489fd392ffd797f6b614574c2f7e98da6fe000c23df99d164a7dc7379b9f18f57c51d6020f42e90a5651a4e2adde3a169babdfcd92973122f9907eb257099387bfc89e43cace0eb4380ec6ffdbe2b0971e76b5d7de92ef16296533f8355f30869178aec0b8d57384c9905ffc6028a6cc66b50569786921504850a9418d1c9a828ff66a014005a1ec997ab250a10c8727130b410b06867271d4d72156e4de1bfc09a6529df6bb345c16427095352adc4791ce1b24ff775ceb6d8d3e70c2f04f63ad2d1aff43728563ce7c1d4282f000ae6191e65fd9b84b3d50d77357ae0faf59d8ef059dccd82f94308c0ae120f8bebc00eb25141bc5b7d85d4a52541c98b63f1b60c501e9388d5dcaf6ebe985a141010e2e69da3c2c3d5cb15a4dfe8517fe93f316bbc42f3049312c4112d42796421de7f0272ab158463b1b8bd8cf7df9d2e8ee955c4d054bcdaea2ff22298d243c530cc4ef7e21d66ce3ea63854f6ddaedbe6c51490511e7a536ed859c623ce79a410b11155cf4231bf7ac55d5e6eb27a974fadef494db804a6a5a88d416ad5cd67851695b3fbedacdd6efe73d3e7c6c90bd2892d174a8c227a9785d8baf55008b697e3203aec84a0d1213ac4dae78163de76411721d2019e774d5880594da5f2384f00fb112c71d5429b5f969cf84b10b944bef5906c7f3f46ce0ace48f93e5396b4566e62431a13d9e5563241a18c974442e60f8ba16ecc8f22810aac8181f378cfcbc052b7e9223e0608e0f06bacc1267aa2ac3bf7370ef952a77cb06ed89a84a6483b0b1244c918065ce8d1dc135608f4db15c8f840cd2d65636c7947aa0f6544b625b5db95d10fee39910d7e291e91b77793592cf2d0d3639c2132945f1bc1aefbc7779b4303ccc58924ccd957e06acb606c161ab5e192553ce401de5f8641ee01697ad9b625f79333e9357303663a387ce8284af2c612422afd0eab11188c0aae53e61d56ff38611f2871d69776aa06b551b7440f48fc324eb48286df984b0deccce2f08b5b35363529a78a79d9623ef1edea91762ff82d905085f430d025fca21d96d8bdff991a5d330015135709e81a06eab88d43ad3cd81b3e7f6d86c3e1b88f2b5f54b40a157f90a401cbb7470a17e2df41be4cc4660e5bd6aefc83ccc31568c90db84230308386bad60bc3c6aed0c9f0b57011e4b41a597509468fe9aba3f097695171b572515e6b1a3a412bdb2d05459a0a5bb62ce45d4119b371c2a04971befb88093ee4d160de57bffa219a16dd077bf6f2e2d955af6565acf3feaaef31664bc3d1768cecd33c1404b64ef273985edd9b9e0fc05396077697db45d17d79b5e26b9202748801acda703c5aeb2c7f714a6127e5ebc75c50d2ddf2411edc91d647e9148da48e3057306b56ee8d29da6949b0540e619a476703e7009898f2c1ef02a31fbd22e7a9649e5dcab2e153f16d63f0ee2f2ab2a074911ccdf248a851299c037b3af879b4fcacae614dee900ba61e89bdf34ff9aea102e320f834e788ab9c70efad2e2e9847e3c7e368bcc9713c05e489ffd756bb14e0a6c3516695b09e8a5245becaed9f6cca0e18aa54e76c569d671afecab00df5b2cc7ca6e69b0f29ef104314d69d0f94eaecc8bcbdd0421c707b389630f1ed6d01bd149fbae2ed755114b258592831e6c9caba45ff6e3bb70589aa6f1200a3a454e053e3ec5194a93bc559315c754d8bf10eb7ee23a7a14fe4f7393277c577c1339f001b84cf4bee328b0248e66cabaaea22875f3065ba0b962ead876828b1ec2661e5ee8846596cc0ce7344fff5926c3a6cf23f2e8fd014a297ce15ec11984fb68fc805029d074a6cf675cfaff84cf96b56c036260d2992909963850b68750f6a8f7207f9bc9db1be6bd08eff5d1f780546b8ee1fc70dace99b367ecd159057cbcaab9d768b63c83f964c2bf60c54118ea6a30c21a4c68a33070da93b00314d60a83a6f80f1a0b876ddb14e9dee32ee90dd493b348f9b55f944b1ae5c12a019b192e9241fd99ea8eca9c69efae9033492537221616dd335c0baea34393124e446ee7e655b28a3c1276354c418e60d0e1d70e666af27b75112d17fe3d84607d6a825c2d93dc7f82ab1712367fcce9aa2b89c6cb327a58fd276f13a65433a8f165ea07d29cc9ee50c123dfb30b087f018eb3fceb0cfcfa3df7582e15f82f305cdf0c677fc1195b18fd02da4c73bfb57993ec1d204b18d3aa196ec3d7c9b5bb122e7fe77fb1295a6da75abe5d3a510194d3a8a4157d5c89d40619716619859da3ec9b247ced9840a16891e88fdf6b07d5b6602e253416615e35eec34b980d4c9482149ad1c6e4c266a92ee53ec37c2caeb4a927f9eff51e8b216515e2a5cb6c769742b728dd7d342ff1a820f48702e49276fa0dee0176f5ed6102f5e5c33e61ac94cbf5eca1e03a6fda84484bba7dc42355c96c8c28faac177d4effaf90d4c0a8f306f387b4bc2998bc59b79ebe6b4fc3d99da05eb71e957bcebf7fba6f3d0e1e4a9a3ca4864fa64d1f7efb780349dc168afd65d05c5146acedcb1280deb5ae5ef3ec1dad7739250f8c9a907239a82d7dd25f098b5911240d52f834bd600d260d9773231d37f72a328c02f2f7c1e4887c583927da5dfcd21f86dd72aa9372098c9dc5e97e29182a58866eaf732cbd819485223d67db62c575f1d148f2c9a2cd6e8f6add3acb0aaa041424229eea61ad58d190b69e41f172933c7a2400a30de615d4c88afdae4d2da7adca08b57b9f603bd60b1ff832076de9cf3e905e9011f83516655f11435e29c5cbd6ae7160b55eaffb07f5f02c431bfc12a51a87216d582eccd7d6201acc22e0f6c0a03d2a41dd37c8fdc5308103114cbf342ef4c76eaa7550869ca4a505ad8ba71e6a7348d38065c8830a13d0e5c25e1d724a41f29443ab59f80f1972a92e28655689de3cd8ccbc620e4124bc59b392c5d5f8d9538cd83331b299e8f4053939a9ff6ac886c036ae2e15e6ed73dd799d40d5b7354aa6bc9f803ce9bda9c83351fd7fa9bcb73842ad952077d8c7ff68e006f801d048708562cdfd6ae21460c0e3c86db3353e9f655d3fb47060f92e25ed80c37554ed88b70f538a9a00c44d4671a33013cc9d64331f76587d30b7e8151856be6e1daa4dc607e94af3842a0c587e066d47ed44252076e172daa264cbdb12f14f78a4ff3e36eed7e50406c62c6b8b7a7bcc01d360b1e6099a35408037cc4fd90d01855cd88e16b7bf47e3190be40c77f21cc4cb956c0f4744f995aaba8d41866db53963bb3031f1503bc3a34976837756b6808d41b33522f9b40c44d2827a81e7e03b7444c1a32d3e5c02e5538783012025df98e42c0a352ee13edefe405d44123ef63f13b6fcb3d0252b6fc89b8d9dc4e72c8efb3af0f66afd87e9cc4b8c45631e04049684a13dcc23c7a30726f5b5db8711dff5748bdf248581e59b087a1e5109ef654bbf232378e4521f9dbe7dd1da6209fc714d3d67e205b763090b9937627f12e1a1db14fd7cc34545fac6688a38149f74ed39781929fa92e284c97c192e0a190a474cd9242e6d2ba6bcd358377b2b2cd9c7ddde7b72d09ed49cc6954c0a275c3f9aa8f240242e7fc24269cf7219f24c8baf8ed2f7432445b9cf9777389d6367021a53f2d9f4a3bc193a0e20c29b26690af2e0f825216222128b9084774e2ac3e254f25d49f6495b2be2151e9185242ce83058b08d8416be7f6f565f8092f9fd60c8e89428cfabe76af922fb776e67e2a3f67a8e88e1ce7540c96d7add025d7dfde4cb29fed737fb66edcc59dc9d8e34bea3baf4bfc0d5e117482a48e522c1b02a370e9124b379e1a01e55bc49b8f39da8c69e858ab7d97c636a314c416ad35e764e276c32daee349729739547373487e2ed89b3822d55b1a58df7177a40eeb35298aa1db1b4018ecc9d9a674daecd7e0d6721012e97b72b5e42001ce85b90694f850b2829d5503aa0c92ec4c5762b0a78f1e8f0f89d9a440e14d0ef240144eaedb1cf0df3c556e2c45ac5105723d997c5ec45f578955b963584ede0b5d898a28d9d6a41b7fa81f1a7b0e1ec7b3e55b074d4dc911715978c5500bb940657f84adfa66165defb6de1bb7a09ab9a3c3beef639f1566ca4caa0fd16be9b9df5e02e347b48ece12e775d7004a0f04c93d89dda8a38b7d1a9617e8e459b59f538dcd72c7a8549673a4aaf75ef4c3cfadbc86782541727fec9f87f98fba641a4976ad03832bafdc97534723d986ff43d8a97b69e1621493c5cec2eadc773f514a80693e8123e9c8085e12027ae80b88d16a3157e4ecb7e22f8d8f62d3788e6ddd13cbcacb7a48844d2bd43d48032fc5206970eb37c9a493b144b8097ba599958b97995069161535ee24547b4bbdb3234e0cffcde1df23cfd4590388dce6a7f2db749c7761e1970673af5c658cffdec9e2bda8a4ea187bbe1e353987fe2401ac55139ce8bdc1181d6536b2a312b2fadf64e331185b5af687194022adea45f0ea81da614a85a0dea24c201fdce6bc4d8f5de563d33b8fda534de285a3a733bad4e832b246bf6532beaed56bb80e0720ff542d067a929e704941842b113dd4a7931184588475f85c9815bd5ee19479ba57d122e2b8696f00927d8cdd9db512014f84361cabae41a45a0840c0fc7ffc65c05c2cbe32c7ead255896461f216d40e2fcab2c4637327522910c658b4d87767627eb36493b4f72dbbee727fb66801185c6a5e1856cb95ad30b4b7efaea6d10964be1f9a81387e5bec33200192b38365feeca4e22abe70fe947c7b4d95f1f493eea5d929a45c67a20fe0d5ad2d00413d3cd9ebe88754a18d80f07a3a0fc2c74d2aba47d9a6279a4b4c7df84d305623ea3eb89af3169610a21a991c7ec420327e3e85d2712ca2ff9dcc93f3a742be11b32d111bcb7e8ba5858afecae05e131d70528ee2bbe1d37fe2b7a92d840c3ff3df316dd538683b497df9a7ea2a82a370698f5ee07d6ac4006035480eab35e1b1b7715230027cafe2d48f1de622dad913b21c7c3280727d6b616cf7fee666ac3483164b94f061ee59d073e724910ebcef932270428c9f04a92b873e65fb47a9628b47dd69ccc00097bace8d0e3ec654ea53c9c377699963a106aca5abb37fdf24162d92175c40ee83dac7980af3a9aaed3c38fc38de09a23a3c04b538d6b757636deff106698abf0477878f82765fc5e19498a3efb497c75e14b6f5752c961705d9b7829fba457b04da35fadd9091aeaca4104003b3eadcf4d5eaeec87cc529f3a0aace48191a2b6a4cfa628309e76b38b4c95cdca3abe8e3c8ca269a90eb94160af25c6a4cb1d61e13fe4ddca908066b0ceb7ee24c81f415357b27542eb1615561b7b46e1cb1840777684650389d862ff39d2f7d761507716428795c1fbf9797eb205fba51c33d0fc260d2477d4df46bb307f615e80f29df9cf7a21c2bbc3ec6f256e4b8b38e0a1d3a107b2941c1570792525b126b16624726102cfa19515fc9bc81cbcf09bbf21a299ec85e4ca0b7ead9a6e6dcc7d2bb914a9c9f60b325018891c79d661df1feecd532414e66931dfecf2a20dbc4ec3ba650c381b5bfe12cebbb53e1e7b5d9357c87f56f6157428f2abe079077290ceb6c80ac5c61062ce8da814b1fb99a1a9fb2860ed900e6541856ec64bf19c0d9d1cc2280b7cc50af3e3d2ad8e044945d44761ca60891dd72bd6aa26a33274ffcf7ae7d661b5e651135fcff21aaf06b4a2db18fe5827e0243884f2841760b9f1c65fbda870f7f0cfbd6ff484f0825e688614928f2d12d1e7080ebc610102b78e22299810b1b970f15282e4d897f4bcec0e8282ff67c08f8a0ad27c4ff87f1a2f63672ba19c70e3406337255f899caeb99cb34ec180c755a7c18ec693865c4e4ffa96dcdd99c4c4477ffb1a9c3dd0a05bc1157a68108de0aabc820ffe0310b07a68371017421b9060f95d59214d374e4d0c278a758f8aad1d6c5accc227430d492cd68a012dfbd4477fcc45610046e4f7ee77f35c6654177a518791924b59a106b8f39f0da5cc1c4563c683de1f761106e865399f3d60bc4bfc86e2d0e7cb186dbcfcc3af5222b4f555ea791af34b6ed47aade1b06d37080cddd72520952ddfd889709c58bb965ad1c686b98a144d3afb258070228e4d87276606fce3dbd863c1aeed8dbc3a7d5a652659b9ce0ae221e569ab6988092ab6363584cead147140c3add21c2c576e5029f5a1fe393fa0901dc77d3233764511b3ccdf1eeed78ef35906accc3baadfc88ad51dfb5e3b1f221ebf847ec74e33262a8c84622bbd77f7fc3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db27c84e8331c75de36a663b21ff97d67394602cf58230446bcda6da039073f5f9562202932d9157aece28e97450fa3c3c0e29db48ae4b8485ff12775acd6597ef11e7b6d6a283ebdee7dda57176153c0a3a8fa901acb3826b13b879a6ff5c1f38e579d9a2432760f03204fdbdd1815c6ac3f234950010c467a6194f7ca8dff2534b68f9aa81e48d8f273f60bdf5b713da15020c974aebc12820a567404c69c7babe258533e153980841dd6cf6453f08d4b82f7f6cef9d0f091dfd6fa67c71f5fba8400af2e3fd36f81c7f710b627191e727eb2baa60bd14a6e881b6f39b910382b449095bfc39d0eb11862b41b007458deec59fc430c4787e2ac2dbdc3c3f86dc4c90fec3aca1fc3dbb91ea5dc068aa45672f2a4ee23b80fb5f315ca4d0e5d684ebc859ee77be2f7c95133c94060e268a3bb8799ef78ae4aaf07da801fc2ca9090c4fa920eff6d134189aa0a9137050d8d6d1fc58e34b0a0978d84c58006c44d548a77b0f77d487d0c098a4f15b279fcdc31c30f137f477937301c83ba02d50760b603e0ea1efc9ff278db7f16fac89c58ae7a5fc580f93d5596a9a113df84267defa70a2e0a10e0ba7ea684da367954c98d4c9ded605154ba673307d4c5591273dd6a160c680ca72ec4f245aa8f158ef67541b1d346d4262e4cc39d44dbdd340a2954eccc60795e14f2c7aacd2d23b1a80f6284bf5b0c1b79ec5f4bad4a97f20a7b6d75b61cde6c35b02d9b8d372b25a703b6fcf9c7809c62f112f9553910b53a7abe9711c1c33959a42d0030d6b651bbf84502c8b1b80fb200e18f85d1cee663cf4e3b277ab02d4779cec1ff314b9fac96187f76413dde31c4d6f5853a5beb4d22254a3e6d2eb0c9d519c7427172764186365949a1966fa7e2f8139d9b3f2ec01a4caa9fc2c42aa56114f841bdb33e4370a77a8af64b2cdc054fd1151c0015845fca4592a2fb03a4c4c93d433e97607bfb74c8806be57c98d3e41834e7280a609aa7015e355aa38ea6407f921ba542aed0a42d7525ebc6a2f4bece44213f741e73ecc84da269722bb180a4747d664da7973f90af4fe574c311e5dd8bf5cbbb8491a081a512b0d9438b9195328c60e92df74ed8770f5bedc3d2622b528956465b9dcb14afacb83e9ddc7b3b136f1d7f0798d8ef158dd6996ade3ca2e005677f6a3e7568b399080a024d467d614f2575fe23e5bcd1f3dee07fde7b297f9287cd7b1da767f90028a63a85fb426253fe35da407e27f366f92acc7928a775583c9854e169f8c80aa1780d2da27460a432256396a918c210b1df17584a060b7e1149be33c1036adefaea43ed41faa16949af60ce707787198d672922e92d892c8b4681bbb97125a6bb63a36ce2bc6ecbc93a9b8fdb2c8ba9152aca800d04378c34f86520582842876d4bf6538ca20ef23c2dda82f12013e6d291c11abf735cc393c7320ba61108ab970904494894cb0529f2e64fba396afb4b02d897066242fc301caf23ac14c13ac10795f71d7aeb2d19f0879d3e60d70e08e6d5a0ebb92f5d945da511711ab35b73ac7105133cb791938f8414867ea14892a681dc75606c0e46f4dd7cfd09283736605f1a32c2775a1f37a75d997911d070a8a4f4ac3f4138ce471c0d59cb66f6918b29de83f473af4550b6207f3b6fcf2a56068f983ff503b5c02d6c8c46b5bf0d9595fb0dbbf2b98e427a0441aa036c49176e564246d29682c5d7409e645fba30e76c16d8fd3e9f8176bbb2e6b014d05452a6f0b13d1e1abdc0e131980bab1185e775daeda49d8aa75241d27634eb22d3717407ed0d22b6ef1814e98125e0e991fe7aec539658a2863fd30bfa1dd18b4fdba140ff9c26939f35380d6199476dde9441f712bdb60ea8a63b0578550c334ff8f545eed472d8557f1548414f28c2f31294a133ff01f795ed3f69fbc3e4415b3037bec29c4dae995e723f282fcb1358de3992bd467f84d37ea8df884fa3ddfbeb315284db013df43a189d1e2177869662f873b8797adeecbf3d0e29e18f31b891a9aa3b7bd4aced7bd0082b0d754334059bec2d80382c681ac89fe561f262198a686eef630f240d89602858db0e73ba2ee8a423430297cdf60f39c5b7129ba73e3645a87bf9ccdacc90a7ac73873eb047a944a2a91f47a5badc85cfcc3802e816dad76fabdccddead2a2a30bd2bcb9fb7a473b29cd96377d0f52b0d86abbf66781ecd4bdbfe4ea192f45ceaa241430fe6a2da5c047614cc9f22d287ceb5fba9cdc8cf45f3a978aae4b8e2e40810cd863c6a21a7c73f812b8f2d22448d9cde377ea18464db2373810c3c6726d9e1928e21c6ef9cce7cd31c08dcc54ca9a98f9af17195b07cb466ae704991b6fbfcbaaefd7cec410175312772f960a70c24375a9000a931bca679b97aa6089e58a96c6f3855c1a04871c4d5354a9e5e9c55fdfdc21569f0843fd62b911d75e6d630d0573a1916c18cbab3adb998247743830a0dee7a7df4bdc9a28c1c7480945fd80ff06b9092aab396273867aa9dfde7f885127ef58c454d8a08628574d0b2daeb51c23481de65a74e48fca54aaff572fa9792d94f3eec1ecb2e3733e50e472eafbd53fbb6a2fa4e293d83dc3e0269cbd2681767503df016d33c928e8fe15c456d7c2e29f5856f92712f55754f3f60dac81f2890bf2e591fec5bfcfe39f2f8066cb5d827072fce5a6c45f8d6450ee38723e54ebc65bc30205cb3fcebade92359f691da5cb4491f8d64a8f669e816f9ba2de10f530b8d7c006c6b1abdb16de5265138bd2fc37b68159f7fd7950000aa5b2c3cf6bd774945a964abdedc0e264755c6d1090afe6cb3d966f321c15473fe52691d8862729993028c9dd1b18cbd50cf9d8544542bc507c1002c5e57ad18fe872cad4fabc3256ff32b667aa2f2da097a1e7bf874132d6db5b75115bed397b1e3bd13d2fe3494e0648b3161180a24783f91dcacd47e4deb9dd18bcf5e8e97204c637899c48b8eef3df2240f7c9a44a7073dcfe9db34cd8c619701139fa6c051ab67042d6691bda366a9670b346be19eb86b7d36f1fc5455ea51dc69e9e2bc4ee911de154a0ec604c8f823ddaa45a4643b630d1b7e9f8a501e474359a40b301feca92fd9daca541a4926800e44ef3500796da820eae61884e6c05f6c38e9c7ca9e771e027d8c0deed27da5256c333b7d59d176ce9e96a6f92b0657290d442759e6c3d4179a1d99874c43bbaa89d75fe0c2d69eac007adbb8d35f54198be4f8d3abd479a09b46a1ed9dc1e92602a448339ec54943795960c8c7147ec21b91e341d7f33425e7cdcd29af3f582041629e7ed4e69e1972fadc31f06cfcae23128faa51682d2fe67ac44268052f20add90bc74c81c6b85126f8fc35b1f7650d30a616017b8d4500172f40b25a97aeaed03518eedee8a87fa55c307d29966d3fb3cd8ecf747cf09d6ab52c7488b853ac11c478a2452d6f653fafd5b21e02502363ae18a39a21b7253dff0d96d5b9960f6261f050fdbd976abc9af4bbd662961f07f1bf6536a5220056b4ebff8ac300408cb486e04fbfa8f5e3c493809adfc59d693e88fd902fb9967d7dce99eefd18a55764443a835b28707dd6bde9b1a167044f3b7d53f0e805507c02bf4b4b9066a78a1a3246e1bba142527777de65cf03bc8293a5509ef88d941aeac5fde7a372aeef7d57edb0049ad32a50cb47fc92222dcaec08dae186d9cb1edee9970c5fc5234c36bb153a619c8bcd08c00cbf114bbfeeefafda03ba725e5185320200ece66c6aec66a7c5f82ed203485e15f67506dab843a1394abddfb37b88a8240b715df31148618c9af1d81093b8ae4ae9e5dbe6ee90e6ddffb7a834648e53e67716b31f08f1b3aa017522ad46ffb794df8a534b598087b069cf5648d3403c308a056f57199064eb41ac9511e4c682d9228bf571c1b98b99d22e705691466aeb8e6319050acd7d36a4bdb8a435b41503f8114ac0eee3fa7f80fc7ec86747e5fdc95b3990a44f047270d013cf00727af8aa44d9a1a7a7dd4cbc6009051aebb65084125860afbf0489ee0f2ff80fa7b9a27f4b2a7ab5ad3be7ce82987575dbe4cb06b3fdddf3c4826266a0938928fcd8e7c14fc5b4e19c1c38fe8bb3803fbf77559964b16f380788e520abc7e81419e1b1b67733b8f11c882794a3e28e3f3e78d8834dfb7e45301dfa6359547f9ba5dbe7a8ecfbedadd7889cd7f1ae073e01ee3b0d986372e3e64a8979d1c1b48449cf71ddd5a5badf72237f109e9e5304b0e1667f6a71b3dad1167aa83c96f199acc4379e5bb9894d9862b888d13bda59f2594021eeaea9f29a89b539c25c9da077c22032a6c0c1c0ef4b2f84b30b05056f5fb33a49a1bcf2e9ab23748a9a1f6251d216e3dd42c9001fe9cd4f6c983acfd0faa714a6d355a46585aaa0bdd8e1a7e3fa01f729c50bd5d1417830236ae281bd3302f52bcadaceb71e3306829f4a36d444c7b7b1d3ee07ad5d196e010766e1dd11ad260010b539877ea7ef0275c2d9cdb8516b9ef3da5d5a4499522df92cb8d99c90ef4e2d4cad7caeeca165e5b156765d875b17ae37a181fede24cfc89ecd58dc93973da709f23eb5ec65d2747f76763b51ce458a6e99c994d22c11fa23ea03da9f68f40853cf769b8d8271ac9501765a980e4f11e50edb0d5cb1191922d5829d9aa89cd7910dcc69b9426b1459bf1dc342615ecb05c75e7163fd0fad05577c2d6ea05c9d2d74e72657ebe8343478147d39109a3f368efbc8d1561c3c33389a9301985de18ecc70da4fc60f958ff3029063622af5e1295a1b8d056850144083d63dd8c62b1cdd0e8d891b09bed0f99005aaa137756c6122717f511a701037dffe08a7c0043f6f6a48ec32fe37615266e3f513e84841fefbd38f845a258fe458144c4f73f25f492b1262521589a8c62b322b0266f5c6c88f48a5e552f5f910941ef016067fe434faf4d3c4763b0f1d87fa36b4d804658783d8a9bb276bb6833b27dc45a23336f87ff525d14ad5fc1e2444fd7267fd8502828b834f040c2e05f634f8236e95bd5d611d41bfb9e0d992a71768833b698d02326a1be90f62ca5e6d4f2cfa932de22b49740fd6eae30d41bb7c5f317bd0e74f3b7c59d070f4f055477f601038830b29de037760066600f3067acac250b8fab146ca264e504a09b42ccd7caf8620a220c9d162a334f11a703019917fe1ab2ef0fb5a68a9d7ed7e41c63f681da58b0dd8b1e6b6e89d0dc37fe2619db05730ebd30136092a2c64b5c5bae00ca2bc4cb6193f4b5d77684163eac45bd49dd9d099230166ef1978371807b3b55088f3ec03ab1b073d98be1662777d0e1f8d9011a0a8a2f004bee2ef0ed157c81d1573f25e55ec224093c71328efb68367caa37e692a8dde2e609313fee94e20599364e62ee05aa54dafaac01d1916c0929a3b9c5a7169385749b22b521841c5ee48ee51da150f974b3690a5aabf46cf894680f5dc44df0466bf68bf7126d8c0c27d37b9ccb9b000246ea04b35a7edb835159910586d974c430bdd58c3dbba18bf796aa96b97e8e9bfa00339289ab4817d51af7534b23817d675387db0ff90d5cc86ada61f765c590413e0f7e96043344840e9addadc6b6e0744a2b7a0590100d0ea283a501db758db11600ee2c141d8802c703fb0b3d758bec2428dfbb2b69fb5ee05ec66559fee2ce0ab05798556760c5b6bb320fe25dde335418729d256bd62da6944c9e6bc24dfc9e86418732b15d41603929087fc055ee6c62d92818a5fbff67ecbe298b801dc1440b4265568bdc0a460626a1405d9171dfa089f87fa8fb4896c081733388d0b09da7b0bf1b576b84fa9ae156ee760f622049fb6ab4d5429dd5b84d17ee7d155f0df442e0fb849a45d07fbf95d4ba2e43c0d7a41b62cb7063872c579426ad4a0107694f9791c3d6c17a1d37ea8d9a8c7b43d22a6713ebe33e3d95575476c9fd6b2c8f5d3f6875bf8c5a0bd0c19387989d2bb1e4fa12c739826b9bc2f559338dd1efcee244da2aa30af2b420b76111d10deb0f6a2119dde1e483a800d3487a99f9c3b0855471432fd1c6be8e3880b9d4620433309883a06ab93832b79abf1fa0274adc9ccac85fb4556873afc17cf0011e09d5cebcdabf3284dbd45da847931f0ed79bbf2449f0ef2a3a8bdbfeb044e5b65e5f9afa997ad7ebf0f549885c6585050c8662fd60772ea4cf6fb92cb53900bf84493bfe4a63d9331a2e21b77817609e5c151ec2c682f1798987bde8064cd09e1e2b1824681aa51eb9d76ca21519405f48d048f0c684e5fd1b7c50cd3de0d3d68e6db6097d0fc9f3429990f4ddfb92bc55307823fafd6ac3d7a6282896a588fd57999c19e3a3b64566ed151c1d3ed63a03ce32b8de6cfe5260ad9aa6dafb7e76fc2740d2468708a9793a9f946d43895cc701ff4bdb541f2d28eb2eb4656312d7feaf3acf102a3f840c1a66da48aa3a99216434499c335bb8a2f76acdb06cf494d189f07cdafda96981f5216a39e35883a56d782e7b9b2279515ac57f56898232175fe8480171f4ce9d6345c0bb8f7180c596418703ec1203d67dc535c2394a343299a8cd1e37902790dd4a8a37fef424f47726dfcfb698ec84e8e08d8e0cbb2fa5bfb8889bbf1a092edbb60349c27ef4d4887e95398b2577ff14bde314746369033a7de70468d0e7a9e70ee86b6a7054c822df43cbca464aa799a3d2eff0c184bda28f84e2d573479477bb86176756e9520ebf6800f489d910d048d99b125417478063ceb1757fbd91065288d849b1070484957e73ba5ea7bd6103638049a985234c7140fad9449e022b5a4d18721d52423d07f39e5c334b2fb46a0d4a172042f37f5e781971608d8a5f396f7280da3fbd807d73eb7ab617ca52e33342fb56f51a9171c0a7ce51e07c0a865c50e69643b8f77c5be59645b22fc515822576bc001b1b61d72050a75b69c5b7904e13dff2d72a6b28073f608eb27367564c19ddf8777595181d98cf32c61943a7b4b8f5c +MD = 8e3e22e51fcb2c8f7929b1feb30c2406ed870e0891c5cc5739bf00f6 + +Len = 85768 +Msg = 33368583fab2e430d6b552c1d2f343282b8304d1a6e3aace273d493280e866ba8732aeb36b5de81748e728faf80f45242d948e00bcc0b9b53ca51c92d0a720af413af2d150ed7b8f4aa893b3dc3171e329f566811a06cccff56039573270f88a8ad7b9a7506b87de047efbb62664afac482ff61c67bdca657bf506494d4dd692898f6bfb14def34d9ff4c8c97dade7c6b1c9a59b4ced9dbff6eced2fca45a21067ed7096434ea724438f62b58916017a8e4bdac4709f2c258dce54d25060444c4b76304086c38aab17d93141f3a6e610043eff617cdb5fdf6821a5fb88a7a48e5eb414c08546862a44599e3763657cd03d297b3817a71e34b07047701921aa1ec72e82e0e7de82e8f1970f5d805cac016194b612ea0d516e8d40a2faadd73f43af6ce3665594672e471ced7df3925fed970718b69c14e0d3261b1e60e9cf49473ef7a01b766f1b446e6fa15d630f7bda080b09eed6c4b3aca488236c7713b1709b561fc7f37787728d1891c679dce911dc27f1804026b3402e1019e4ffab6007ef11ca3273b49300cda0277fdd0092da3ae438358141c6d9ed396891289d3d5361b108239f2f2835558eca5236835d7c4ac946d5421ed5bd098e783b9bf32f9e1abd40641fef2c5a4e6ae1052d6e3141365e83282ac3c935a994b2a900b5202e42bddcbb9afc89b7dfbdd66169c8f86f232b58f5e23a8889f5d57ca5fee9f74d003943f1b85f2594310d102e9399994f3bb92b06118bfc0116d83ff53d999c417cbaddce221fea396be5f73452eafc29a68f652160bc0be53425646266ccf652dfc712198044beedb6caf33a4fc209458c356f0f77d79f7c764551b4218befca51e94a9c79d78bfa3a466c0a3129a8ea1434af98fde39f0f05bf70b315dd6eeff9a7ed1db6de38a61ee0ca6aa127c16266138f839be9f3e6091b2827ebca5c0b00896365df64ad3a8b21752347c53cf3ab5a769af8f08349a9e2e0d74a5a9f648d17143c9b6ed2fda88fd6fdca0a01e60b92cca3bd0037800d9b028cdb962042c9da696992068f399eb453bfd3fff883ad42f8679121f7d25ecef50e4685c7efdc59c8b66d33cc349418553309aa0a11baf264ae1d5cab89c4032125322f7db2ed1c9ae9d4fe7138b341451f15151dda592a774008b83beb66c3ee99479d28d224ac48cb6e6d668b22b9894c9e481a24b37399e4fb3e8f416d95c4312ed6b198aa903824e48b93750a088b824d49ea38f05432649ef58fd200020bb68fe2014ca750d4bcdd5de04093b4b188ca22735e3756aa8698e524e848912bf111caff364275835a02ed3632e4476528bcdb9fddb0ff6a13921634c96dca8ca75d95929da486acc8fb427b9526490e28cb7a55ff84dad8d23391a8be963596a31b4ba4cbf50bb9cc6f6499af80401351a0097d0adb6c5d8d245d690feb5bb2acf2f51c065c8d112f075c76c91bb6de6be38ffe47dc3f620a0c825e0495c346898a9ae19701931cb86a31fc2a1f32d63e3c15c2feb0da4d1294096ee5bcf5bc038c42ddc60da5423140eb111cb33d639151a2b0777ec5876d64f983f9877a7ae2a0f5f7daa84beb6033939fe5ff5eed2ecd3eb0f96f8979e3235a84891fd9eaee6dbc171df90e7f0fe92f8dce2c1ddcdb56f1aacdabad8a3c793458ddac9a72ee9c9e25d5297566040acac31f6202996194c4863c59b9213f1090e93d55467cacd4a40a4b5f0908083f692920c8968a8831be2c8ca235a8b68d751ef142646feebed5acc7c450cee23016a71987601817d2e88505adaa86679becdf409c7cb37d0239f49080d41e5c84d82551c6e8abd8214877f1a3a0231ae0fc14748b16b02147d8caf0ba1d613ce3b88b11aeb7ac91c6e9eb96ab9de79904ada5d336bbcea135bb172d9bb1004bf7bcc1a16754810b69d0ca3eee2b3aabb0077ba6c6f275c775e9c1904a1a615165eeaf491847940eb107fa2f93d184178c137c3462440d59af6ab261efe0ee16d8563e51ea194c62469565b1c3182da63fd891c73338fe208a47d0e8b4890e61f6fb5400045110ced182f10ea6869d20725ea3a56156b0e4af87056dbf9f28fb67e5da9f8e774a1bfad6888c63a53c4dccae981713268b6dc632383738aaa6add41cb976b2146111689a117523fd73f4f6cf5a657131f8827651518f4830ef3de5a9d7cd96afbd78c4d6740f0d14a8df97c9cfd7a4fe5ded67ea37bd17bb6b7341931eec62d0c618b59099a34a7444d458a5e1b5d41523744208d409ccd2821991e2751a3fffe4b9e4d2687801a5b09ce16a774628ffb3e0afb00fba8ffe9cf57c9ec3a155c57f22f8a3c9d85b2d53ffd92078d3c94373f855ecd01a8ac521d1abd0f2c7cba9ff1c9a0ca409809694c4e8d0cea4df69cd86ddc3ff6fe2b27973c580e9d5c934cc6f7213e1549768ddb5b781600191fa2850ee3e8502c24a0ca373b4901279ec4ee327c36801c8299598ee3b1632077dec203163481b5017432b5d76cfc8015bed3f622121583d6323363506d87e6a7a80bc4e3c3102b4a084d22acd8e3d8909124dca37f4a11b9df15732eb8e2fe2794eececd128fe176d385f83c2b5bb3a7d23d3080cca238d6066c290f1208b9603bd7ab3281658a107c89b0f5b2c883b3f8a9ac3a88927b933ea41f52176dbaf9f352c4d4be15979f59a4e77a2dbecb5d7ad6aa4141bf5c79ee59a0a81796654d61ecc5f427346c8bf183f629fab31d0cef60b535766d5e029bf96761c0f76ae2fe1209413b26ab5eea9387959829db3aacc447779540f2c5de1fde1f72151e532e4f191c8880c6909b4ff64d84a7a87f696deb883ccead2c1b197f51c9840206790060169dc730b98a35eca24e90e7337bea2c07cb5affade982c57925a8b87574d298afc95e8c423dd1a534649a2a0f7ab55346cf9a7ce3aff83b261517a43898420d48b9db3bc33cafea845507d36bdc5c2bf5b7f17735f4c65ac9263557c859bb4881ddb1c1a4fd2d17129e8e95c1274b007522f4a14d5e99aed2b7a6359d4fcad4ebb376b07005d5a55faf82c3a7d20e6b458f187d7223cea1e377ded03fd0dd3cd6c99e7aacdd362fdc1678ff986312d6f76ad15e4d0af1de7bb543ba28838eeae38e9d92c3e9cb111861f5ac1b50f4de0b34b3d6467a8faefc1e7955dfee4c598270f89b4db200f384f07d5b993220eae17b3477f6d914adf501e435ce678213442f43f6b2dc8441a2607480aa7d33881aace7b5c6cd1d55e71e18cc8c85eca2a907e4378bbfa17601207fadb7988920375822024ebd063152b18bac92cfd88211996dc040d1f52b21cef345592aae5da7fb880fe73f6bcac86ab13869bbd23c2e6255437aca0bbb74aa73ea079a2f9aed059e1138baba7ca8a82e0289d0662b4fe11f1381fe31b18a61860e3b6d79628714b8c8bbb57ee17408568d6b8400e9f6a44fc30ee52397d3828e247d2b084ef6978c98d8b62573daf9df5b976d3ef2d30a4bc46a254df8c07c00bf354978aacc0c6e0418434abe1dfb0cdf95e28cd045a1b7ba3c250d3f01bc9240fc4f372077f1f18d02d35b1aed9a739bdf8a570ccef907f6ed6b0de4f7c2975c5ab2b02a7ad6aba620ece3349a46b812dcdb3a02ef8ea12d067dbc85233ca463b90a90335528f0e1eb065f75d48e3ed7264bb24d17c137af1fc3959a04692df99fbd43c5877755c2d9a64c790cef6c5b44523c55f83f2fff81d3259e2c06b8708741477b92206ecb75431698a3d8e501af9544b7d166feb0e522e8fbfa63c88b084d17a005e2905e36736a5f49d92d7cd07b77ed53b72845a2495c4e002ed28b8b2730ed430c6f1d95ad94576f7e9a2f5f7b3250ffce314051acfc0ecdb65b0488762fbdda2c6f6c2b5840fb7527df9b852af0ad361aae136bd444b8c3a8e688a8a0709c4bb0f5dc6019ecd60b63524419f15f3c771b03416935d2d68264f97a443c80031838a6e0cc58f45182bf96ab6664ca99634db54cd26802d27a79086be3a0ea7cb031f70bd89be4088bab1154030bcf4e6b2148b82fe161571c5397e01f842c73b42b7ad00d69585586a456b0683cd9b60f4441f5da188abf08933c59404ca282848386bfe327bde2f449eb531eae768ab01515987993cb849fa64a3a0e610923b1e8cf3de28d811b54ea23ae8ea72216fe12581286e9c032721b5624d277acd1ccb998dc93d15e793923a44540dd68f569da6df67a60f5630040e49c24e72a072574980e7fb982871184f199cda7b7a063cbeba6dcbfc770cad589f28e35fd5e6cb82165fe9ca9cf6e6c702ead9caaa27c6545c6264cd2f642479ada66ea9321f2e2e955a8f130acb068c47639329e662444f0b6dfae946e06f5bbb6578b780c6883446ff76dc3c98808430318f01f75fbd9910b614b8842798e4108d88f38682e27c7177258bf8045a99057c55bba6c53919b3663aa2b1e2a7fef64527c40efc43ee5ee9248a07b79eb20d6b6ebdb93cc0b73ba5f50f94b8a290b3b5dc92dedbb372547efc3f315a54b691276171f86e5b5bf29acb67f652938290062fc6c0c83af09d5e34143d95828fd9d8b63e2d0011ed1e6e46129f5781bcd560a8c6796be1507fb0546ff50f32242da4f68b1e9deb550848ee7857707525caead0fbd46baf7a439de5ba1f716b5dd5b6a8c294ebef7bf8514a02e64576a7b7cd2ecd9871ad56304c6e5c846236221834544a5792274835b1e216137d8c29e3304ba58c24e1cd90e577bdec8b9a5b4047838b2f3b9ba2098f3e1ea7c1bf94973cade97a2d55c5a99288451f939ff09316bbede48e5273ba13e7806bb818ce1b19de0328331127c5792a5ce4244dc95aca87d83d3254a1916764a6240b9ec0b7ee66595edf1bdc2ac2e46a04e3adcfdc8a6cb404d0a915d6b03df69d615a52b3e3cb55e6d97dcb20963fd7487ac6e8637ff4e9ff0f5ab8d119fbda9d63526d5622975d87c83fdbf11dc20b7591a0fd35d0a6dff7986d71cac725b9ebb990f7e9d051db085467f6e37ef56f56cf44f79ba60afeb312ed2708e543fa500a1cdab41882363226ff0340e26069b2ddb9bcdd29a9affd26dfc4d499dd0794fefcfcff20b1d6cde60ee94e708c625062073643800a589b7c4d2f760b7c477f3e3a4712106623a13c9d92565100c3f907374b15d4b66356bb3e503665a722d872dea134112a8575ceb3e59fac44f2757450e59a4c3336f68bbb0f5bcce7006942eef4af4b8364124758ca73aae1598c505aeb1b110b3b4396cb542f6ac349f8547427c9e5fc28414d942918735e5e06445e45e04ac5d805817607f867c3654e537722cb071a39c88870ead72e436baaf762db3120ea7703f7c410ffeb6fbd33e500cdfddb67ff6fa2f3f6f80319e74112719556bb017f069ebe578c1d50b76fb21610a6866ae300402633c31b663a933c905b96429258d61e6bc5e725edbcc963c1d30f33ab4b410d0f8a809eb5cb681ec9153bde26693b20d440572cce350aa009fe8108b3a0fcaeb8e376b48b04885f23ab8bb6441cfd4cffb1255a7c88fa10f779422d094bf7ce2927ee83724cbba8a705cff374d8e349f6019ad67e1f615c922c9acb35b2fb13693c3036f10bc8a15b0b4ebc3e06b6c0c116fcc95c60072ce3ffd30ac03fcf257f0c84f391aa78f149a6523a2b0c3e5866da935a9fb5b426f0db341131593dad767e32e2d88f934179bc2194c25343baef34a9b2ce852ff5c3a6040910670b535379812d5023e138f13604f38b438d8d630b84f87137413f644a8c19e6d302be20e7bbf981ce297fbbfd437f0f44e37acb496d551135b2add9ad146a3904ea97e5af2671f2f935bddff8265fd5bf0f292ed5acf135e64ae62cb9e32494628b85a8b90aba2b0acb9b630ef5bc661ad741949789f365b2d0936554436e7c55ac3173edb1ffb46bb4c15129f7bd48bf046b06774c8329010e5b8a687a707b4517424d3362661682b8d6b030758b05145e4e8a5d3ccb0a3bcae7a5dcd153189a92613f736417d8b99e83890ab74d2583ac932b31a2f08fc8cddebd98903fdcbce6364f95003b8277306fe3a1052c2e73b8e1eedbc61d4111dfe9db84ff5b4d14db6887817efa9c233442c6dca750aa4c48e1dd43f078a67cc7b0068866d0f50838a0ef1f267baf2773a63ba3e4e02075253aff52682948724fda468c0cc55c01c7858e583fe742eab54148de0605195817955cee7559af5c3d10a3783a6308684ec06c121365ded4c1bbf87553e61c5ce59afd00613061a05af9263438d283a396f89136e81e0a4d61bd505114acb1e959f0e97172d5e8a86e3ed6a84e39551c67d606ad073a4ebd5bef5a58907e606739402827f171ccda4186bcbdc4c004398802d25db8e0328c78f81d731185b23e4e31c30c262b93a09a7ade59e1911a64c323fd3043383f228081a18bdde82ed7606cc107582cc76143c14665eed11f04dee1900def6bfce83b31ef863dd05d9837982affd09bef840204fcca33ab9980a2e692db05a1f24471b10e4e7965c5ea9a5e07ded7a19473a0eb066ef8451242d7d70b84cd01a79fe9a806c9d9cef03652665f8bb3663d95e51d6e3b85c711b1455f03ef8fb4a5626cbfe0e1a53466e228573aeeac11725298433c18215a1f35b324830493e274f3c29ea37d24bead58e1daa0ef0ccbbc12830476ec1626c336ebce92ab20b19abcb3ec57849f954ffe48969a7619bba13d6c0926a1aa52851cb30639cc804ca123075104e05ee0d43e24342f6b1d0aab3b1cfa531e2606ed50d4747f4ff9d911928577b378a9c8c27f3c5b68b65edf62755b7e064bd26c843816bf6c1cd4817070f6036c34c875a32859b44b3f25634d51f03d4610f5a9d13d408f081c596b482522a035fc020efea343e6e3efb9bdf438a5e01b55d8e85cc71c8e5c35cfc02019d1f418b8a1bc5c57c29a35ac6416df93400f8d02c44fae3f70626f5080a781b4cba71c50eba644ac9e784b5f6c9697c88a71a5ffff064e0b05b34956b249f25ed76249ac29f53e0a9e272cf11a64a3414baf6a34d136c495a32af32daecdfb7fbfcda8b5a2d0d2d98c50e048b6a98b644b70e58a84079944116e74bfbc5c247f498f4051a06089812e9a704e888cd89b515d1ce75fa0547f1928d4f2231ef6c63e501a6969ccea6a4caee3e9d736114d271e1935a92a7db081001cb02d3af8bc65ba3ce6463d7efdb0334103edcfbee1935ae45aabcc9d3e129d53e020d9b3c98873b0ae7fdbcba021d29283107e67c15eb98340adaf3b9194a8816a4522ad566d237eab5ccd5bbc6633df51896b955450e500cdf6fadf11cfc8ae35e43e70c9dd73acc3253cb6ba48fd2f55a0bfcf02308362ebd0d611268ba6e32b4554848ca00a44e0214f62008fd98b779ca29e33c83eb281816b5a388fea2833af8d6f057e924de9992fe9f8036efa9fc73b894fdebbf77652e041afa43b83356c11bb9e3fb0d0c6d503d3096b6584b567b318be3ba539b48b5e4ff39241fe1ac207efbeaa0ed45f1df4a69a916531a1c531d3e9a7a28122740c0a6c21a5a0c8fa9794cc8954619cb92aec153b170a4b29de4336e95ad6a85513fc82180f71285beb3132a22a7f65f0cc2ce13222169bdae2ef0ecb77402e759aad9e41267a222f284e57bd3637a20c03ef663e305e7a22645fda139ec79c1dcaa4266293c29fbc7974a3a423903b53f6bc0c26e6e8ce478c1c008a7974da95cb698444fe51854c04297e1e9793180ece1b3bb4eebe819283adeaf8b04ed125c4841eaf0d30be25f1f850f23a472184b2945baef0e8794b719afe25eb5d6715dd7e5e6b6b66308f696681e9b6b43fffcbb0d4dd936ca0ba7e6ca6d8d1aa85ac40ddab3fbefbc5d494fd79cbb0e258c540f60e098054dc27d0aa49db0a3c1433122c6cf4aff8633b9944a160d3da551f3aef72fa5fa817d992dc4ef43f1cfaf27ef00b52e564f40ba0c35f6fc4a31f55e1216677d76e3819ea8b1fec18502131a9b3ef2109475f8dd3031cc22e459caf5c16534a90b0272f003e238a3ce26f38befc8029c2aa8c09588b411fb7c9b675d456a2393375cc63fd7dc29854d9ce4ee3542632b99463c657e3344f073654ee7067b90d68c60ffc09d064dc073e25bd40424903950dcc0ef9945f1ac7945e6359d3028dd6aad8444bc07120fe185bcbff4e5165ff1daf27652529479febbb1cb622e38326290f81ecd4512ae06f5ac14500a6209fcdf45ac41ef9a036445561b0dac6b5ff4b9cfc13956dc2564c09e73de1b0fc1c2483ef3e0839eb35a6137a6f8512ed0a1967fde9892bb208b650840c78d8c11f2a442efa6a50f1431addae1aaa2ff1ef9a58cc963af4c19db517e1dd4d84364fe8205f21cca67a09a79b47dad2858955d658b0413031b6be514647d6e91d245565fdc9dab6a34e2f55358bd6847c7fe4d64df313f1485a1293c6fc1fd30c53d8aac5b54eb1af345c2c94c337487c9a45a121db3307a37542827d48e193b88b81bd5e6ba54432f538359e3624a6eda1203fbab1c9faa8cff526547544b28894f8a8b23306f894596c773c2ec627375d1cb902bcff50c12fd48833ca6fb7e635e473a75599543d28a0fa57f14452c296e216df46fb93555e86af038e8b2a3938ed24271888e0952a7bc7d5c8c7b0f6131a5e3b95e54acb25b4a3aa0abf94e863bcc519c6f8240527a6e5a0fb77c73c9e6b9afdf2e6fe8d4a066d1286347c5d7ff95d64a513a9f3e6c95c9ed27b22fafd7dd10da52636029523142149116aff534cf5f2fe01f6c8308b35b995fc4699f9f90b53f6cc7a92d0b4a0c19d7fe636a95b94aa18ea93edcd9477d78b21bd825a8750b62d0052a5c1601ad9c8a6796a47d142743df509c8858d2ae2fd130e1ce8cea92191ec47a332d0895113adaa03f6540738b34adfc3201e57c133f9c1ce6b771d796bb5e0f5e9acf511c6bd02697e8cecdec3129d4565ee055c75fc5e02aa29b5a70386a601ae9b670029fd0805a723f84fb575ccb51da63c9b0b446e1f6e8d7893a18520304b45e5088496443d39be3471d19af37d10ed04663cf8798d7f4b6e258ddad6ea86537a101eaf3e7afb08a62d5faa9a04066c66a5524105b3a50a9f460eae5098296d2b0140717f25b6a6586ca6cc49b2c7cb694093469cfba87214dc6e2917a0fa3a02c132048ea432435214ef2989ef1ab1161f4830c5cc4f2cd4d0f372b26cc26306393c8ff36137859a0e82e8e123c9c6732bb826098e63e0e70be6b2a962488f3f51a63a37c28d143a43a733dab69ab38b4a2d51eeaaad3556748f1085ec5667b6f2b72fe131fb993a9aa62ffa1156206365edd8fe86f2d428f235b5cc71b2937202b89379154bbca0fac606cc9ac5b4056541e4c18bfd65656f21c8095925ba7b6af19187d64324764d50e0d5baae187830719dbe21958f15d29c72c10b7784da13aa4e94dcac7ac47a8ce49fd9daf4c4b0c52a7db181fa4103ecdb7ef1709b96e42bf5278e4d659069c23bb16012eff2cb85b486a18a4ff1e9592ac772d8a4b7c4bbacc956f08ee4023a0c93b51cb1086bf862625b78362b6e2d8825f6764a469da49b019b5b9cc72d3b80ce42c0e31177675d98451356f979ae1c1fe513324a562cec57c6573842d20fbfe96ec82d12d71accb0c9225862f3260f3da87707cbd79cc4533dac0a5bd9fcf06ca0fa36157359d8324e6fe36fc2db8807a56a6fd2083c4e7e6922b91c2a4b3cdf4220a721336ca9a73cc0a026cf16b00645b41265d153af5fb281ee8dad44cacbbb00273fff9a6697fade3791021eaec1f01c9a8f1a2b127f819050b54b2ec3b873635f76bf2d3888f2914fb8433dabc00f6cac55cb0a9d643c18889cea534e2cd210f6ce5b6b46048ba090a17bb9cf8c086af3c1cc3978984de13d4a73f994b140d1954fbb9db9922dd5a45690db41ac45df14da0500cca31ab318c8cf69bcce256ce402c70ab8bb40f630df6ceb2aa82c92baa85ea6c10b0d56c11de4ebef0ce9aa8aee68fc6c052cccdf42f531b109274d8b34c0757e5a8c91df519cc655f1f453301b84b9fcfa5a1f568915f4ff569dd62f8511b32c17012e1a6dde441507ae2f7d92048a912230b740bcb37e3b17f6f64fa33ba9f2cbd3f31c7791ab58d680051a5ad1b75304175b43e1b7158ed599759397249ff9fd6aa98a7a9f4445e5d09fae7bd188692878d5070208022016f01ba268b6dc68352e180f7bef5705bc07c3e2feee45fc16b9eb3526908d186562b0251ed7aa68fc87075184692cbfe38e3a5eea0f3533574466755636fd9f4757fbc3c2714f21d8dd3ff89cf50a9ce3cbccc9471ca137727f0d6e99e29cdc4637c5255b6b14ba549889adcc7b3bc4422840cc1efcd12fefd4aac9f77cb0f8e96bd6f2f1ad415cf520ab181be3055e8b0c600e76990d4457aa032d78ed821ab859f6d38d1f1e2e45dd6de09115b19243dff23857da9d9e3068e243251b5a6b3c6aed7035a9f359cb3899ad36fa868af408bff1c9a7c86405780db305ef8013fc068270f43307040f97f5291378ce6b25f18fe2d5e8d8bf5b414c2420513b3981967f7ccfa5a3589a634bfa2f78cf605f012ab2828513d6bc2b693f7f2ad4055180aa3bd0e70f7df30561c892e3d38e29a0570ad967c2d2af9e2aab296093a0f62ecb56fee1939aa2e3ff3c459f20200b36e092e0742cdabd02591026ddc032f806ac74617c77d73067effd4f96fe3c8d2b8bf1a1959b176cbfbc187f87a3e2dd72143e029e025d24f8f8b4b8aeb70b38e821d024b355b0473d1c693b4884d92fd9ca5be8307d5406fde10989d192b493d369d66fb4a3ced3e540ab6207aa3f75a397741b1b30e45fe073a3c9e6d65f27552dac8c82cd999a1df287fdac5e3b38374331a4456333b508762b80d5cc367ad733f983031b38234ef8a4131ee8f5ffff96398a985e6c93ddb248b686bc5e16bf44665a21d5d4f6e11bacac47909652625835d5fb68b57ec7eea374e0ed028376289b1bc242949c3c2344d00e9e46b9c850cc8e55cb36002ef4e4c1cda9484765a73fced0aba19cc9d816885b592cbd9947a7bc90cd19a07a8ab2a6353658ecf389fa793258227eef02cadb160a71e53e056e6793b783e71379b52afedd5bfa87957626d09140cb156808d228f93cba1d52c89746d19e5b6288965511e679f78b9458dc929e230aa5d37774776eb6c39ff65d5591629286cd81fd2f5699d96d664f4ba460c6f2c3060bbfc9ecb107882cb8d6a85cb487f0bd2a91c1b53ea4e3808bf5852253d67ea0d889d96f0956912d61db998f0da41f9b4dfb12171c01e24113fe87c08bf6c4db027dade9c0cb6708b9132f12b6119dcdb0e32a627c19f111ae0fb222b77b1c1f50424c401c909127882772cdf7f7f2bd1cef1280a614985823d00f311e8c0fd48b81be5e66ca97f096be6aa9177ea4d158cad157e2195f7e3be8a5d30a5224627be10c29e5a402cdab81208c60cd3d732e1a6fd17850cfebbe007cf1c1f4e331e80b3d8be34458258e189b60180d450a6488f5d5afe26f0774bf9d748c9bd4a99aa6596ba6d22460082ae30b886542fec3bb6a4ad1f7c73b24ce0f42b36f8033585b69b07777ebe5e15f0177f8febeb6135cd61a24b660ed98d4da457e976e35ecd273449e5a371ee161fc8aafff409c1c12422cf148c187967a0763353c26191cb2820e63a58f72cfd5dc2ef7915117a586b5687fd5726fe7689d861f853145b1a39bf60e7d7c497566aa4a16dc788f785f37b61884fc0f5345a495859b1623734fc8e4e60c850c99ba6dc555073d6c5b46d0fe027de6cda1b92578afa55d19295b10c0347a322104792d89fc3b281717e3892886e9b8139b6e2617e5cc8f919d727c7240ef0bf17e4cf27d539fc2f674dd691cecf0fb480709b25a6f3833f2953a12e3529299e4cfdbc589a25c927239dd78c37cb936d3ae35ce299410d1a4da5bdcf9b28b6363becdad95309920f4308abf037e6df11e5898846c9e7df10f347ee29da803f1d414cab389467ff5e21f8d45c53933b590ccdadb0bd3a61c9b6a4b2bb87b22cca0997cde4d2c3698a5cf8d13f2f6340891d4a4dcee7cb4d9b04669bf30740f7b30158836ca2ae591a608332f70fd977589369e8dfde0ceb1b68e81a6efdbf386eb5099c3e688b4694c9127a329968581e0bb6ff821491d2b150b3ae8dbf8f5763811558e8a8dcca7fe341077030926b6ff2bbf2540fdc8cf35853d8ede123ed28122649e9f8255d326b796b1e89da19b4c4e381a4345f8257ec431a0df72f5222d496ffb0baf76762be3625bbf9b1fb830ec80e11369d5b6598fbf24c56143efa44f1eaeb85c581775801c7c704bc79614cc3f8296b186092caf8f247a2550bf4dfc18be8cd1233e6c566c1de2f5c2bc5eb71e03b66534a660ed48a7e506431d921706337155fe73782cf845ffe137b27875c46e5acc06165e0f92b6ee4e448eda6a8f164e32113f01cc6bfcae574f01c8cedbca6a2f25e08ddd17587d437d9c8ebb5c6e0aae85296ffc6b4ad79e3230b88a0820cdd6b88c54217c957a2f13ce14d314438f1282ba2a85a03862ff07c7ae70f5776d09e8a31da16c75cd5831acd57a609dc4a62f789a2fb4cd38c2f64f14494ad73110ddac4f268d015f07fdbf3977e88591b1b5ed27c14c123f2f294f51ddae490132be2f5178874016839f8ea9945302de7d3ca13a05130d608dc54fcdf4cad3c5b9b3b48d5f033bdb1640a28b974a1d9350eb1b39c1aec88426f5d7f056468065ebe6c46aa3a9f897060881484974dd9973eae38ebec84b9140df7022cac955ca117ce6500b2081309c1eb549727a4ad62e62819fc4079c7124aba1cb1afb5cda72a0a3a76111de9020abc6f5da036c33c87b7dd69b13c50a1a82f3530c869c7e587882d86b23159ddad63ab348b84c988b5c609a0a95ce46698ced22690f1d9f092c0b49f2ff304111c89bed8640f1eebd2eb252da35bd0b5bf017a0f841e823cee5c663bd4c36620fa8700a5a45631ba718f968d39a9c4336d7f93683c104f4efcb3c8e96b330ea1a9f42728d6cab099143bf43bd6d72d543681c4ad03a79f8b405f43343dc25c07bd5988ce75fd09ec2d68b4b605548a9cacc0746a952501965bc76b88d6e1dcc7a71fac22fc6dac484fae6e884fb25a7132a4290d4b1903d49174b873c1221f65e9cf07b2f48d2621dd75782f00611b765ab56921900414ea93ffa06186f3726717d0320ad8ebf60d69466816d1f15c10a77cab242e76b33cd5b0b9fe82e6a44f93dba177240a9a5f75a9b4dc3ee37ad48b5265a150d17d4fd9407b976f6bf383f039ec94605981bc8507f4eba1a8163688df3f15c1b4d19811275bb887040ea8bf8369ef08595a9919f99ed194cfbcbb128b7dfddb813eaa0fcdd0fe743f44325430aff3a69a737996e7190aa2bacce6daefd8b618d732fa47ac71c5b18e329540ea252ea59d7ae29e690a133609c52e2474a5faf4274d0d3b6bc4aac971685617e8700c9fc2cf4892f7d867d92d3405a1928c2917e1eb576d54301a167944094bd40729ffbaef20170c0a9506a5a811b4f1e1ccde97ac7d402e5a90331654035f3550f34fd6590d9d1e270749038fb6d0fb5d62c2c8fec376329aa9a9c926f8c474e3e4fab5ab7587b6a45b0ab75989a81735676ef660de520976d2e5122b4e1e2b469baad944dc796e08fcd631a3fe9cfe30573d905132762b75887f71df67bec0ff73baa1b3b6e49cdb594622dd8a11e8a4bea9376e4455112d46c378c1fa38ce5509b4bf86a95bdb821ca4db94a0b99f291a5c5c16a87142f4aa7b97616a1eac0dca13732c1841a293a3acfc37f6f65a23d6a16ec8b35d49620fe24e3c3bd2f27021716d1278287a868ab8e555e15ad22b9022e013196b8d0c03a21db0e3f83a32dc392de86d92cbe13e43276cf4497fb6b35b60743f3e96490235767df6e0dbbc26f515fc5cf32f2a3ae642fba454bb4bdca5607a9948edafa806f8e1e93f6f72ae1fb5fccadc1cd80d1cc870761f2d5168bb5084bc1d0bb641b1059b3f665dfcde239e383bb00d6131511869fddb4e6dd3e7c1211c2d78e38bae3ce86df83fc1339b3f5d2401895c242db346804b8707cac522de3decadbdd268ff8809678d565b0109ca1863192f61fd49a4b1d27fb5a9de062a95fd12bbb27bddc87626bf2290df8e1d8d371561875a2bf306f280ddfd9ceb84b8b16043a841584848d84dcc91915ca5f7003688e0cedab0043e4307327c338b1abbef1c2073ef7605ded1aab9c0c621ea50d50c2ac5e67a1e183eb7e5067e9c306f477bb76e13d011bcb34395e88aefdb9b8971a1d9cfafd912cc6681d63d36ae6de208d9aa55f510e49b3d9262fb8e5f62bc40026506cfb9b074a99535ffe8c91a473a03b336437808c1ef5bda987bca28f5fdb9122c682463dfe7abd027312506ff85d2132549ab7bffdf4ec9f236c060bf01324b90f7cdcf66b7122f539e56b67382a134b3764fc08d93e79b995db6ac80010a8be4fd0a35917e749e058eb2ab3ba70da26167c978f383b2c9ee4f315ed1639e4d88e66e48f8c45fb69d90ed57c06983e6af8cad07da553cff7189a51a3bbf8a2b0d526e6bf52f1003bc335b3e9a50807c0e636effaa5ee286b3aba641276b4a8ee2bf8f312ef5520fc1e480d231e2afdcfe7a83b2dc27401a3503a9761cfd6bf3999c451b0edd72355f22e2b51f965e8400308fd3f834d2046650232b94ec4af39267249c0d4e1d0ed48d1559cbf208fba423e7e5870e14dfd7efa7d417ce74097daea236b2adaf06d2718d32cf7c5bbe6ad32039e12985270a50ac022e0a73afbbd1427d8792a4b7c98ebec2829bb346b4bcdd73cf0dbf646e11a4283036d640cd8d89d304838a9c3a232eab8de6ac2f325f54158931000283b124c8d6b9f8773321fcc9a206ed2e94dd513069c3a2d234193881b81a139bdb9da2667a2a76bd8d3cffd3f88338d97a1bdb037ee933ca5a990f5ac44f469ae665a183b30ebd8e1c4d2784608efa475a7d0087659ddb92165d2d033647358a2477b6a2e9bd596390c0e85d8280bdd2a66f765e967806a3e7b4361da6784cd426623636a6dcb6c86b36d6c1d71ed015fe61b0db89fe417a5f5caefc7d7919136ca3b4c172d372471c2d6743c6afed8bb3022490c89718afeda4ec422 +MD = a5d565070fa4d67f83772a2f31faa3ff9c988ec27fb7c0c50364be96 + +Len = 86560 +Msg = 6dbeada90ec32acf04e8e66337c81989c6540842412edaee1953a71054fdd35285c89ac9fc13eb793aa97a1ca8a1111f888226ee2babb37164f242d63e8c4792ea2db3a2fb6fc617d67825d163d72c8b09b08518da19faeb0ac387dda6ddb42b823522be74a163b0bf9d0e0bd23513d433264d48b6405665f20e9facf5b9c026372a0ca5cd6f694cdf605f515c826e02ec2ba50627e770e6041bb2cc94e8138af0529cdd70a281f31d083d2c6985e41e1e08b5db95d8ef762831e7c3e932565f95f7f7f0c30252ae61dfd22361071e2eb006a64e68d97c1d469a661b5e5f31ad0d5f486630568584932b46beadd0c43d8a6ba0e808b3bfe4469c585b5a364b7d42d2b5c51d68c17e9c35c185b3a87d50947fca2fdd2e5fd21080e50c45804dd61b9a6697f4feafa362456a01dc57f171b68c4dad501105f08d8e34b58605dec180fe84631ce1f6fbcea369b990a4c9a7d8d851eac7265845a30d6ede878da745594537b2fdd93f8ec896e7353859adfbe2acfd6dab3301d93b47ba10afe0506a8eb8a60bffad326539670cfe3a3c4473bc5079be6501a7b43e8241d166c58038089ffaf68a277687075fff9b0016371a4e0cee655b58f3df92072aac1406dfb8ad425afb060db4fc1cc4e994f0ae2df5812884eaf7ff8d61211e9e26216916f166e8efa3db2893cd5edef17274cecf0e3beb62d6a0c01c42d10ec5c9f6b7cdeb1cdae1757140bc01b7f740bcf33cc56c659fb1b1bd61488a8c21c61cf9b7abafb56157fa311dd6a00e55fdfad5c1b617e88a9801b8abbb42399dcaa7933359441bc379b881868ab34a4151b581254b18aaf44050f8661a72c0cbf8f32cf17fb234487039ca4480405503647361302b769527d025e55a102009f379872dbbc402ea3a640575205f5216e35dbfdcaafe39906a7109e74e4356fb5d74ebfc57d03b23df7ca2e8dfd0ee7529641e5a5a6e6a82044b83660c5b1b805012a8038d4c65c981e19a8d4c7a1e5a1ca31a4309210f553e851bca5a01787f167b45a927e089c366bb75cb2e06e9ad053f3a007fbf33f06048597b01dd73e1f5d64a55eb33aef9d631b9094c1b58562c6306f784f1db3bb2bbc6e2c996178c364b4071a3eedc531b6bf0b16f62713ed9350791e05f111e7b07e96579d469692004ae6415b81bb97c92a12a5f823e4b54ddc4365ab0dc8105534a6ddb417360fd261c960a3a741340ce55dce424c766e484c64fbc8c454c96c87263b5833c5a13dc126f491cee49b046932fc6f01378d3529342cc9d5267778ee8add042cc3dac4c19579c0592431423e38bcc8d2a67676eb57953880dbaf0cc34b5f4272cf30e9eb8b6c99d67eab48ccd58c0a4141de901b45a18f87e2e48aadfe1e8d9636281fb78f4998d7524d7aadafe68dcd980a032164fe593aca9c951709b760179744f8be079d47dc4dac6a591e58cde827ad62a65bf80019f14b9e96f4a6447770fbe7578ad42145df5caa47b75f65217f2d1102812b2eb5f58619965557b52641d18e2c8f9aafb475b29cf1e176dde9ecfdb0de8af43f9f55b098ad92683cb4885a3f959c3d6da8af62b4f0431b82d21fb3a492c00fbd26807f9e4532444592b2fa8e3b2748c582fac1a4cb52da0e5a75d36eb7c6ca21fc04378ce5bb786a516036ec75b75951d3c673cedb871edaf39dd191c605bff8705f6cf707a47105710e93fcedd2db9d2bc0edb5b94676732de6329036135dbb3400a47f3373cab1622c9611fbf03bf1fb4893dbed475d5179ed7b0c90663fe4a7966267f1bff1f8a538b1de4896171ab2ec0aa3dfd0501058121f495d84b30f5b6f2b43badf6345cab17bb42c4ae951f319b6c00997eb1a5902a3e905e56395c01963b50758ab13432558363f751f422c602ca302f48ae9fd2d8d5e120ece026613a01e6fb2360b9f12ebd6faab4565df4dd0bf548cbc09a501403b2a676eefcdfc64f23c82a0794ef88b08d653e8377c31478766b6eae3e10c70e28795a2c8581226d3263056f6d344da5e6b15742193b8f59dc209c42341cd73f6d20025f6a5137a339541e60eac963e4a215675ceb6536f64ef0ba42247c2edea923d4525257eb396124dca2b6b5b4b5e81ad69a9448f296f5613177b536b233030b3acce69a2776d15aa6fc77002660e0460dc2bdeca982f9fd69a990544d85a45e9b94ce22d4a4b27ee637d6b3a32cb424729c0d5a4403814ccaa05ddde61eb4a75f73b1f7d8092b18031b7ad5126389396ef22d99ac5fb5d5bd23c3da64445a6bed3137221ded65b165700c6e5a4b8a0f6a8ac4b1c7debe20a8fc6a52b140be34af9609aa899a87d074fe3387652cdc2dcc2d7bab7fcac4b5f4f1fb4db45a09890c69cf970657bafe988d98261a50aa1bfda3fa8ebb69ee1d0acb1ed455d963f36c7430f17b6b26c239e4e25661fe1a6266b4e862630565df50517aed7c07f3f9377dd5c1cf1ff2a4bfccba1c227d54896e28ee305ee45183304db8a3112ae223d64d660fecbb472c920dc882451681187cc6b3ff964ed99111857ffbfc8b57f9afac8ae1b9874ce31a6fb38fb311c997fa57e0d7f28d25925bc378ff25727b042b62e9411eca2a50bfba244b52b6538f4fa31cc05ae85e0e75cd4bb6752676cbb2362c3603ce08fceab5c2bf0b4c4888e37210c3b6a6ac8bc96b9f28d2f16fd6adf1fbc850d90f6d012936f2c71dcf081e8c63e7ee103693be671c5e25198eae825bfd00ed34662d6ede27ec6c6f119968b9be35eb6e25adbc886b5f57e7fdda9b3cdbe5c32737c4979c3eb6e38b36c229c0c9b39308a0622b9534334ea3e1e25e5c3d80b8f9a7b8e62b235715b9650cc96a2b6bcf25d03874571ee3f495654f3583c9d7b5f4e093c1527dd7e941c6fdb07f8d65880eddb9fd96d2763005aea887782af5a35e0adc92daf43f466a821f46c796a8a40cee6d2f19f8f4e93ae775bc0406df68804c1cc08c3196167dc1faf409ef3c0d652bdb72aa3766097d363f3cef069feea2cfdab32edce440c2aa14200f3f29a961bd8b2f0f37d37716c38c6e01d13b1b0cbb9ed3889d32ac8166f7349f2f77624acc05cc11a1431b4db7e7bc0110bed90537f188641a8742021c2b9682672f1e667fd2b3781dbedd693ad58db96a2d0fd66b593a88feebea8cf536b0808e59c7ffff794a0c524da5b473e04aef8892a5c8806051bdef668c6919a2e8604cfb445b7482fb95e9f75b748b8f596c11f482219e8e35cb950110dfaff7a8ec4b1f7dc205762dda89c5e7f2aa6a23f8ae5c9029ec6a4e7a9ac35e37e0bb57ea30cc5a7edadb47a4dbbd3176f6fa105a07d1b62a937c0592a3b55eb9d3785c23a60bc3d61c3cb3bb87ea22489ac6895cc35bdc6abb4cc0da5bddf9acb1b5215f53e3a011f31ed8e73451a0afbc57f4c48a02ea328a63e81b6745155aa1fb0d65df5cd978860b1ef08afc94f58533ba5b06cfc9ca2b48e61d72f59b09ccd188fff37e5653fe8aed9d33f2e7601ce444e9ddc95f7ac48320a822f3740259bffaf3375200ea8224adb7d43b7f39a9f2f936b7f9958a7e9d00841f49868d714dcb0a52dfbd843b5fc60618e046c756e340093d655441801ded7812ffbbf13c04640ced2d766a51c6a152a4e823544941832c161782e9f38b4f4ea31bfa78e16b2bc1af4514e5ebdea463235bfd26aa932965eb1708c8fe708dcc79a72a68890b89f1412e7d3b313138013b41be86a2629a7d646bcf26ca5211bb3daa350a5b6ae7634af09bb44c46c6f394a34dbc59353d3c281dbe4d7ebc42e2962d02a68012abe07394549a64a5b402d7889210f6947c69e035bc844333880b2d3779841f8b3f3064219233a0d76bf6acf975caa107bece33b9b31241414bfca9d082eb615b091bc49f3cc929635497bafdde3184176c31cab38a409f6df37eb40005256e0c73693b173aa227d1d6acaa9cb58ec44bec5b4c2a2956863fe859f3d0ea786d26e3e173907406c1aa58ff23dee2298c2ca7146227789c1d4093551047192d862fc34c1112d13f1f744456cecc4d4a02410523b4b15e598df75a3ab36e7b8be3b17a72c0a53c946aba017a536ddf394e126f52e9d0c6d7fdeda6cf834bf6dca933701b26529a4cca01f73359ca7e3d99274b67aa8c955c96a8e0dd29e97366033e0d0feb20d4b066d38e4888e913a00b09022b9eeeb4317fb26e2c4c4ddb731759b915b818d20867b72e838ad487a8cb3ffd666efd0b9ee193ba84958114490d0cdcf735407c9cf4363faa0493c09e0251a3e0c1c282eae4d12aadac8c08300edfde7b09a2bab336d72986a12ca8cad7c85b604043025faff6286e38769d72425b276adc467596552254df06a92673732a8fb0938a71436b8a1b91e247bd56d0071f8b5832938e789f297dde1121e2fd02a696619fb9df3f136bdc51084f23e06b2fa82370fee1c7d70e27cf6d83609ed508db5288c07b541b7f182dc13b229c10bd87e5089cd76b516ca781c433337e2d1c470f4f705fd229c10d2078699b2a7d33f1470057ba8c95acc39e1e19a3c4914ca140fcafd2e0c69882d037c1d5b23af7aef06216d0512c3444cb841dfa998a00b38d95671da6786c40e5052a1a5dd073868a36c163e39d6ef1b2fc277e249f9e439c247f894dcaa61008eb8fb052c60d41ba823fb96a70c094fb911f798e588f1a18b0df5cfd41acb8e1efd5e0baa42fa62a507a1a0d2e94f34e48ed31fe3d3b00a7426fdedd67e700171ce5f2bdf3407f82a759d0f45e51d8512b79ef9dd70abcf1e1175916c3bfb25377a72e823aa8926990c42248885f09af41abfa92ad65189f95bf13cfdd9d943c0a03dc3201cea88811a3573134264e0e926c9c0647b2da59664f55313ee7707bdce243f4d11c888735deb8d6eb0e711727a21b212e5acbc65daf67646d070cb7f52aacf130f9fc0d015e8d60347f38710737c00ae9c6b38f81c7918ff26330995ec55f51a9cdcac27f091ef698e16dc43a11d3ea005d5a5cdb7f1bdb5665a6c81e99a43bc101bb50b6c8b2c19e9cd6bac91a9ce8fc8687d471c04c6f207335ed3d90c3d702fb975cae8492e9ce183cf9bb38622d64ab049f4d706e74d8f7a4b0c491034ef324269170230795b0bd662918556fe1c03397667779c7110758bcb8ba83aec81ce42f94038f57edcdf41ef3e958092a998609d1f5c1a06f34fe45ae27500a6c06a47c106faeca1aac232aff35297933750c2187d13240b5e751073913df606338cad3abbd6aaa44d5b453f404b00722df2da93113b3f10ca8b9c9028718f7d53ac0fd0df4a93d92d10d617a5ed5fa205c516776c12bf99c009e55b18ae319e995ecc2df1c55cd2d27981c3b4c809c5476e025ffe584a18c766871ed25280cc7d0b8e9c93e55a03d5fbb4cdcd59933e7b442a97386a53105937fe65e5fcf1998738b3c726091fee902e0b808020808009edfbb7bad76f12edd4b7bad40c0888407cc81838df13159976e2965dab563c8bd1f25bf61df2830de35fa82d0e4a1b213e581a3ca5d80b6a6cd679b65888b67986baee6aac820321ea329841821ac4b1f3d047b21bd3228b7643a53ab6aca04b8291d9990191f5d24fed25c1f60f076b33cd2b399f990d6539d6a35b54166c7a3c33b7f1cba6ed878afbbb2ed8ab65c584ab2f23af9e2e901dfbee88af7a8d9e39fd041559355cca21cad2d8b85462495cf6de00da670884a93ff153272d8620027a486448d1b612aaf6f75003be8f7f333cb2619e681dcb51ff563b69c3e8980c17ef7ef8e0abe99cfcb335492e4fdf9de946c67a25e0dcaec687b1d5b2277edd7273b607f680c77e3870f9074815d2f399059fdc35042116220046f99cb54ced068fb9f497e724a556cb0bbc808401daa8796e52f9da313e9e4a7b43d8247ac1407dfb2d294199c8c42bfdd76c1cd4c9a40cb27d08d5957ea7e0cf52f8f780e0bcc8ea304f229f4f0d1e3ff65f42d4372849fc98c6a8c65cbb4da3a573a107c1d81b17ac6dfc9dbe9e0c5277fe9878a981bbad54d7a63c6f64fb9899dcb377eb2ecef3dffa521d8df390c60abe804aa76cdc552fa070701d11753ece989149d32d7f1f6998a5a733aa261afd138cc2a726268497b57a09ec6d34d6a23bdd06005085fac7bd79c3462e46c1eda220692f6a14ac1b8b255263c4d520b33af92509347e0688dd30ea4c0c7d4b4aceedb6b695314c298624e209b4b08d801a783f3445e1c31b7c8d94aba12427930e4723b33406d5506aeb4144a9617d875edcbd48113bc0fe1fc24aeb98f5d764e4bf48dbc30fe80e7ddaf8ab3f6281478c89178b030680af3b818592604ceb2ef6d88e66beb6f4d2438660b3d32e392f082fd693b7bc72bd544ddd2673a3c35f99057d0aa3867c4a507021e5014ef5cc761392e88bd827970e89aa1e6f9500856fd88d2e1e18eec5292aa4c5462f57ae3ae6a4f01bd40fcaaec784f0908b232ecfc447576ac8dcd1320871cb1e59cf22eb0bb540c45aabd6c979e633a3109bba5d4b33fd2620c6fd1fac116d0658dce8eb152c6131b68c39f333465e03afdac67cffcba5dcbb2db72697fc217aa6f16edf7572d7d082117290664de62ec380c1c33486e7fae2818e0b3e9a9ef7bebd032cbf30fb2d47dbff45954552a0f5fe3ab49bee2a1d4162e01202852c1a1a90645754df61a4726c5e6732c529f6b1d3afc59879e29062226bffa6445f3e550bf0e3d8f691d29c130e99e155d29c71718f7abca2a810af7070187c40bef0d8804746bdef12341f909e42037ff30edf8858486b00f0fa83bd9ae11712b1be1fbdc6246651594587357be42b9bf1ca366898b3461d43daa97a4b0de932de12b4f4fbd17495dd836da22614cc32656b2092df4fb040172d6b271ee36519aa8b12c656e26b55157a3d473b4867fbb44e28b78a724c11e15f635475063d3f9d73c3b275dbbcf7a796709519f3713064ffa91738cf6c1b490d0c72fbeac42d2d894239c721ebf5fa74923c40aa9a78fdfc4c6248cbb2c4a4a2d11302058c6ae12818dcc9696ae884713c7d4dd2264df5d06cf958db92a69abd4ba525eb08613edcb21c0af6dc47ec38b9f8a00eb717d2f8957ce783ae1981b8f6b9d61fcab8cd139867fa6e928c8817a53ed5c4cf7f1bf1504d536847c5f0224cc1a0f845c9e26956511645303eeeba78b05d78c1ec474727eb4aedf2146c85c84d0518fc2d354a5657fd0f37c7967dceedb5af50d7db5676e73c795f9d6d5ff3cc8106604b2c3322fd0d110bcf05fdf2476cecdeda4ecbd7c186bed2b9692d59b0832524cc3dc036a0c51f3eadb3a79d6df195de5c1803c4fad812edf0f65a54a9aa099bf8f05e2bf3c37e52fc36072ac1c25ed1e5dd9ac9039f0a13fc7b739f0854383879da795d6676b2cb32e39924d37d8c5c0ff5fd5e6c5a28e7048f15736d2025acc752be55695d4109da72da162371c2cf2307a7ffa587e3d9d1a79c8c488c464b5a0f79ae8ce5cdb15b3a4669225d86cdc77927174fa6cf5ecc3b95441af73eb6ba5757c331bead345dc06aa8608f4cba75c0f74fbb354ff85cd17c25650f635160c0c52e083674253a9bb35e5e857927b675950378c1ea391c0fddcaa72358adc5e23e6960fb96e67a22bcf58ceeb087f21d8cdd18cb3293822d268e61d1834e82224fefec6c9a0aa50be4087c09777dc11f4b271bcf9d9a17dfe2fb159877a60e07663bfb07f1f433add4f19c94325b9c016c9be22d9fbf558e9f9b42f6aa36d2181dd82d5c3355be9eec6b7eed75b3fb4a4d861c83bd65b3cfb8e96a6a9f8366bad34ef3e7e281ae35b6b08393c61967708a801b608b3fcb09cb500c72cc1e449622fadf29641a7b28a07b5b1587fe591a80147f326da003c34389a99db469e40089765f9f5c82bdde561655e14fd5488eeabdb877f938e682bdd0b249fce8dda0734be5c8105cdedd243c14959220de6416d647afa26cebde96dfc705ea2d89ec7ce6122243fb669bb7370790d38353208108bd47edae9c2d6af1486020ba914b12df553c5c00dd907ba1bf61985f7f5ad5df79ef5f907005a6dfc6d714f25c52b1823f84ccefbc61ee06ac9665279b6971950e046c94ffdde6d5b2d95b676389e599317a0b2a8b768ad04f9dbe6e3fd2e0f40a05993ea43c878dacf548ac4f573b6ecbbabb43b344de9928e5f8b5e53da066de8169e005a825621599811368510f8d7e9541bddc5355bbb91dc87123e03c57fbf6534b8c872cfd7d64895f56fdfe7fbab8331b5f388cc28093923264811151f2e2e9b3a1702aba44b4c5c283b464a0108203cec45ae0481fe5ea7c2f96cbef53b591cafce99b132c28caef872afea90091485a9440fcb6d79335b10d87c88a8f1ceff3f769eaa2642efd58d9b819051b44554157613e994809f86356daa3be155758c11967b5f2bd45f180e3e2402eb139cf1586523259f1e8d725c405c9e4771360b4eb69795e77fc4bea4e40009072e01a39999a5483658e265abdafb7a834cfac31d5f5a17024b041076147d6c4d0b5db30099031a003887a84ac2f0973ceea7fda7172cac25400856ad5603f564b49669b6eda363a6c564836280a2bd1b6027011369751bf867b8d87032fa6af531960de31defebcf07613d1b9d78b4c7a960178ada9d2d22c7fcdde831ca94a78843e7aeb14d7a240767209ca0dc43e9d13c8734f40caa4c68bdaf3cdadb3b23c3873f403227d74dcc5c720e11353429e1a298383e2b5a1d53e19495b5952711ea495cc128e4cbf15e2a7c9879ea4d2ee07993bf4060043e8f52d51b4b611f170371875819ec1eb8c6b786635e6557a1d6abc0f08314725624f6b9f523a5ece018e6082d8fa7984c0bedd8974b0d1929cb1f67f48eb06a0e1bb78a4cc6ca561230922769117d005235b2b95bc54a5d6fc8bdd0f2e99ab50e7b7c8e47ba392556545c2c3428d620754df073d75684e91bd46d43131d3c1bfd4c2c0f0f895921538b2c5eb55a1abe5b5a8e4c34852386d4f817077fb1fd638397b153cbba9112b2ddea061532b1a3ac64748d9ada8ffc423ba3655d2d44574963f2a3a4d64bbf1a527e6c7b35039711748a7d30de31130ea5f9a5d51a7bbdf7b8d746c264eef134f3d1d810ed78623190b8661f186f93e03e020f11ff095e359e48864cece270a8c7c992fce179cbb6c3e68e8e11b2435f0fa4ea36645602a91e2da96bf78e041dd64fe166996c9b4512fc3ea64f63ec341fc8806fd1ca70fe3f6ef8460c5c753b294c0f769ebb9a8987e2be8f5ce85607765717e2cfcd72da0af4bb06b3b38aabc7a6625677cc902729805670c0ab497f1d37f8b7e5c7cee685a53ad274fb0c15b847232bac0945ca00be4e7101128d441b526b179c204dc9ba6abcd3d89dc42005159920c6d981181585edbca987e9ff788eb72a7b40b72bb12c8b3066ff7775b5fa0e5a4ca30bb96fbb7d76407127583dd526170a8fd4b671d1ed12a78af0bcd0ddc804c6d1ac56164a44ca4c380df6710efe07d1766c1002422ba121a6f69c5fa51044bcca2c9713188bde574364821c218821595b46e16c688c045ebc50bd693c2e42b7f653236d0f99dae8fcf3a346f50c8e29a72bd2b72a5a64e632c7c8f6896a283fbde8a32c16b8e788ca8402f874d275c9c3e38aec6fdbe83f7223650f740c1bda87b5be59142e2dbd15dd463a8521ffc21536b2132159b9f3e22c3bbae55b4512bc801dfbf344d31246c718121043539b07ecf232271afe8aeca9f301c4a0ce6ec412671a9a42010cc30a208afe7e9bdc00ccf1536967e08af76434ecf924de76073345bef170e135f56e05a9351bfc0e689f587dcf87877d6a23a7826d2c9bb3eeaa5ff0e015981444bb70779e61a0b8a62dceb941c41aeaafaff4cb060330acdf415cb74f7b513119b808fd219aaf62243efc0ea764c25a2dd0c2cfadf0c3e943bee51c26e83215da2e7642a70c5094499a8a84e9b0a6544c4db9974b3a7df383eaa1264da56347f1e6614e1601acd77d081f23eff0ef6074f0822ac62a8551058d39ddacfa0d4fc4a5722a58bfebb2285263f4a16cc4060d7fc5900808048b336f54492c2e58b6bd3651dd538e34aeb23e00fee86b4ecf7fc329d2f71c212a74579b73b38b6b034260a56ff1b8af5184959b49aa37b442338457f77dad05b52f0fb5622a576fbebdea16e918848626041edfded1161fe88f8af7078104d7b4ce5d4c1e7adb8b70959d4e52b239deb29ba371c44351b747fc9cb00bea6ac0b0b80a05b0895fe8a03241f2b2a620e27fb1eafc03ea2fa3e9e3842a09a225e83055de8a1f412badd6fc9ead12dc81b714afbd26a4acfa0c56aa080e0c907d76bc0da083738986039a5b7b24793ca488f9fbe297ae73f81914bbf104199cbc92dc481a97b548ba1275b7a102efaed07bb7ff21f8292673f3ad7c06b33aae2866196e126fec680d01ee78d9ed7c1a4eb8d52244f11eadb1c1a95711c476ae0b17fae751b320d0c8f98e06e98d29686768dbcb112994f0fbac8eb3d8ded684abd0081b9f0a59683221dbc9998cfd8060b35164524993d698dce6f725aa601951b7c973c31ca01895a25f2ab38f014a84c0c054cdf82349d278388dbed01e5344f4c7558792fcc837a3a28ffd413baf1ab8b0034bdf4d31efa90ddc6bf7181bceb08a2ab1147660624d2b614147b59569c2a7d993a618743896ec4cf6c7555a3513985b0a4915c85cc88209454c77e6ba072f3e6ff48dfbf5685d4525eaddf6c2447b4e5adae1e96d3b2fedd2f6878855afcf9aa571b2ae6e46e82fc205b8d9bd6cbb6d696ee2a9dfceba77afedef6582e11055fec69175ea59167293c3efe96eb2de1ffeae21f1f8abac0ea6dab76389c578d7429b3239b3c86e7661c988101c3f6ecbe342a5aa02f78d197d65e56cb184918839979be00fbc79a4f3c28e34113af3dbded176ba43dde302fd3583674446e3d1aa63d654475dbd621354063f93ccf3b6b8039d0b04833830eef3983b8832f4185fa7eb7ba2d2c4198727fa18eb1df8c4398221838c11130b18462dd2c6714fc61e0ae03f6a44163218e471a76154896d28f30a0c25b0fdfb42d74913452a7944b034bf87e5da39138e3374d43c9a2f194e01618d15887d68364ef4e64f86fbf9ddce903a5dbdb726b1bb0a87c616703074522deda5c01bbaba5236332aad5e4c6c805942181418d249253ba845f1d71a608e76161d805f59978b18e21fc62aa727f124865f08e27e1d180f1f0252e93fdb5e44efc5f2d2ae95a2a1dc76fae571d4caf8ee79c19f94f63d8fd445623008ac6aa060e43bfb1f7b3fda07777019113cb2de62b066d67b9c3cc2b0564833db9d599151c48662151309c94c6a514df12752dcca4a20109bd7bcb1997c2d7a2174d320aaabf990f923a9789496c40a785d52fd0e9016d45c6f65627800398e43fa825453e2bc0c3174c6efc544f2d70ea5594617ca71aa262be1df362a93f6a7f70b3535b1f85e27ce0935c8bc023c1bc80fc1cb40581a61d4d530b942643ab73319cb365fd50f41f81a5186461dc1078f1d751339f4ad7532ec5beb90d3e3da75521f3f367aa6e9bca04ee62a6bef3bbf2b6ad8ff6ceaca0dcc6ab35c097877865e38397c10ab86e04431cfaf134d1d23e0a900d8e95ac82d1d64f8ed2e81f82fe61e0a7abea77f2dad042b1e3e641682e539740d9383d85a8852a48c6986c43692da9c78ad213e6b83cfe1bf13ba8fa3e1221de591ef605bb43b9e81e21043630973d5be04a12a627098d9dabbd9ee4f7d6de2aa0c26caf94b27ce14c2a6dd80f4f19f93ecafabd91a69fbb75d499c4e6121aaa22bae7cfcf21f1c8d31d1fa53fa5de1418dd4299a29492f9e2290026834465f171711e02c53297033561802a6c4be830e0e970c6b46415dd6323887659fe5e84ff7d75c501650b24f5a035d3ff91c6c439881bd1519576da8b4c9920c49042d93f4865a32e399ca29641a73e6427f86275219a2604995475cd0c98d26dbae162a36a84198600ea0099de6ad6547f0b80465e724137f03d33ab0c2df7bfce88b5ee4c4794b38b61d372dee7183af76ea20f873abf862a8fa89793bf0d355bc747527636a13119927fa3bba2807231a04c53446a0d59b8ca29356bd28f68d31b9b8260c7cb794c0a79cefd33bba4ae3ef3941e76973d1b7b49e6dcfefac4d4f426f0a4717016832866372c01064cdd991c446de709aad3219f3e6f9adbc3d1ff7e2fa9ca3b735f7aa98ec0911cd5304d3b06bb41c11d604b7daeac3caef04a8c1581f9488a2a518fd828437a5bc856d9d43daf0d4a2f535789aa1b6ae0d4bf3861ba0b62e8a5e9c666b63d133fa0b1bd8c7b81a0213b2ce437d3259c1deb9063071a68bfd37088bcc99b15f25508c166a8230ba0d2db4d5ffc9c5346c29f7eba5a3599a5e704cee1955956ae283b0673dbd67595db8a45596c784d015b8acaacff8e06bb7fed2cc34e73779d25e201538bf887e5a7c2953efbf95b42651814994ba648671aa412d0597c0145da8842842d2b9b26c41ecd9f2f9206805bd1ed2de2f0c74f53a411974ad58c3eb2883a9453c227cfbce95ee87bc4e751cc42a4c94a101bcaa767c996970260fe4a7c69f2846ed646feccb9b96524662d12d4ec09e566ae6f72897b4cc29537fb0edf512d3383ff2306336e7070131b78ec23135e497707a46163d738521069cb7c2b70a2d5a43afa6fb7fdac21237fdba497cb34dab3b01fe0914dc7c9d68ec62eeb49020f31e22397b4e7cb0cd7fbbbc8bd643c3dcf20386c9c4fa9ae8a1f9173895ab944dfbd452ad4ad6b7793279fe50e8eb2e70be06481ef6d2c549d84b3f6a02646fae004b57571cefc05f77c0e75f59b574b0c694abd0526ee6073668434aa2c29a5f5511b2426ccfb4c87716df82d2a97ee4333417a67fd5e66be2da89a11ecdfda823aec936e17f79fa5a064e7ffbce34542c6ff46a260fabbd04297b361d8d80d092a806fb2306f93e47159c1f7b2c7e47dacbabe2ee251f45c6db80d3480b0c21c989d058db6c1adb66cd322afbcb450764d2a2d7801e294a4e7aff3e474e87e1f1d88e16b1bac61be0b5766822b46fdaf30c42108302b016c48e6240c15edb59311eaafd4cf7e444dd55d1a199eee609af00f357a0d99eef519d10a15f44eed1b2e28bd5552b5c9f8436ac9c078190dbbf361e727facda1e1d317129c807aa919bac9966735e1674fedf6d221576579a4c36292ac7824cea4fd1eda0a4aff5e015053c784f99f90b73d87efb6bd4228c7d897e472064dc9d0f06eccd9d45b9084873dcd290e3efab0aaa45efb0a3d8fb7bb683913459727e8756d67959cfdd4f5b80e13ddf45e09debdc2cc68ceb632d6d45a2d0a869f6d4dc4c136c805849fe77b4b381e4c6b22a3ff69947a9b5aa6b7cbe42cb279c50e8396d0b6ebbe5e55cc396ba66466e4e982e81f63bac0895fcd0aaca4b57fb6802c4432747b28099b368ae5fb4ae459c2fdf04aa6a40ed0c2a9091a418e08d2669a555cdbe0c304d498d840832c35484397b071d9c0b6bf73be5f937fa6b5b7367052b669d71fee9685ba11fa92ea2effc2912b799b58a3e78f66cebb9a06b35420c4e5baa8bf05556fa8c0ae19637c3c112aee028e752ca29ec71281c26c75643e14512aeff11795b91cd33a2a41cead05d62001349cc8196ee9156eca677bcb2ad98f57078663dc148ed00b400584a7133b77f2082ff4c062552ddf1c78151d797d06bba9cf98ace4873dbde51f3cdecbc34c5183bf414c3b83f26f332effbf9c874db5213d146ccb9e72be93ff65a881f613ac21bb1bf13d0dd97ba8ec9a462670caf0186f65b01c3d2579e7468d88f85c647e8cb40363f95b6990d841533589d204e8f9d71afb68cbac9c29551314715ec5250f2a9628e2e5195b6bcdd9024923920c4ff492c323f2ae8204dba4cf9f85ac5c339f22a4ac436f17bdd28a30e6dde8d685586b9bf02a71c7f41aa11ec55980609482575b97eee172590ff545d5798fd4246313da3fdbbcda61c29686a552f7feac6492d2585006d7c7c698b5b77eed81b7b50a2275aed635e843f39b920a6962e5b6739d400f45d474a6e304ef66886bb9beecf933ec5466f21f56c22dd85b59cb086810f18534d50a1162b7ffb8e6fea4f10ac2fd3ccdfa19d52e9edb55543fe6daeed1df5a3a75d2a6a6436afe9fc703fc02142418994bc9d5e9862cf9ca81a3ae76548be6fd2378c71c3bb3900931412051616b085ce87cc2262c954e54bb8bd3ad1d69c3c36a670333155c25b9e9f71e873f14746f6cbcfa52d696bb596a2a1ae1910b6943b717eb9944d728383da036f201c2e56725051f0e38b3d96f09f8c4c253e35fe49625d0ad6eb70ffac8a71a405df8e3dacdef8096a77f10fc176271bdda84003c83fb62edd77e5577f7a628f0b818f810a3d6cfaac75b0a972f019232a95002920d1302e9339f81466717f37184c58acf63456cb8fcda2ea69d50a6cf24f9cfbb9e07411de79d2bdc83670a415861246d78d5e82fdc6ee5c0feda4ff1f1c3dfefc3429dfa87e9ada0c92dcdeeb78e4d5150e2b29dda9bd87ccff8ce397450bbc4f94f8a1d89179f49c4d6bee806af7e3188066c716be36f209d56d2044112dbc1bc9895e56fa9792df2fc6dbbea472f747aab665924d82252c35edbf0ccacc86c99c831e0a011b3c3d0095ad8c6d7e9a0c56c40a389ec8a89fe8b4c7d9b60fa3bfd28fe9dcee2e7a1e877f6cd10f4352ce4a38bef0f93104c8b66b40921f1f9a673654c8b408f7d5ea8d2d2177d0e8aaf64fb989a2a5e5c01166ba321f4b23f3288f7bc27a989fd409da47d465f99627ea2def7436eb0b64e1c248a66883443769a4abe016e64d00e436748b83d1745313ac83869513cb789f90bea3540eaaed943e8d29703a2adfe1695c50b9a2abb5d9941dc8a5654e85b599c332cd367c9d1025c8a570dc5efb693aa82aefb262d5a5ac64404f28bc138aa5005abb41e3cf4521055cff1310dce57200220d4bc23cddbd01f87ca63da8867c1d230478060c9bfaec5703296808bbd90b3efbb3f371eb8f9bf81225f7ce11e5c19591230edb7a77249d65648f0955377288a1321cfc35eadb46fbee150c93a994b94a8a22c54a6256360e0dad671954dc08e8126566259669ec1d49bdea7490409617f46b517381292be56be9a871f8f2c5b699f736215aecf2627d18f11c626a34e1ab10075d9d4683d1c86c56c4ea5cc7f511faf493000d5eb0d44da8f4e7bc9c8ef53a6f707d5446bc6a5ef879f3c1168bc09529e24e733af194849862e7ded5081b1112 +MD = b3c6597b661d2e8b051fae0e6067791c93e03e5dcb53c27c1b06aa4f + +Len = 87352 +Msg = d0cacbe670b7e15556a9593af51a5e6ed937f137372b23b4c9a0877bd883e7809b083639bfefc6ff4705bbb896edc0b3ca20f8d34c3337f0a559737a9428755f5da0d42f6369247ff95c6b8b7645d41f87e7a8b7ca4179e59810a1f32295ebc9bf988f1284ad649b16b651fbbca90479b894e72ad8de505a48cff92daa52af8668fa4e284944ec1c431c555291a2b88b052d9f759e9024185d9d627255e82b5e02cef9bbdbb526c92a945fd61cb7561b14bcb7e145e25ee88083c7084adec519321a77116288786c732957d1867047f2904817b4f559649059870d38b2bce77ea2e8b27205464ccbc6e02589f655f3d81fdaa736d57f9fd88fb41d4ab50bf857fa3f9128ec7609b0c9c3b14795efc29469794fb10edb778acb0fdf867a52606ae128fc7a40a017e127d9e3528ac51df0172df76bc7f5556cb4a23b342a19868000a9dbaf294cde26862aa4f4fe5f6ab2d1fe87ad29569f48f3741a9bece9d460ffcd1610ce03c6498fbfda73194612a33ef5e7bf5c85bfe42f8d6204e948b1d4859996e5584c3710e99f6f1802017e8b0719ffe9870a1b0811f6fdb749c185a23a174176eeb099453cd2492be2181532d473b773d36e1d7e40b6d1fc33d9b993c84e000ab9b654ae326152f4e0143e5f4c09f8a467382b0d65d5c81bcf1ab36fd446bceae1e6d014715370ba257c63dc17e5a8c66cf0af7c285cc95b460bdcfe09085b5f8dc8753ea1b08dc7d9d8eb6fde0fb11f091f10943052bb06c0349c070c9bc7afe5e5acf66b81906122b13ee1498df9f8674cb61d26bf8862641e5c548807e62212c4db0277cd61d12b8dc4f9ff696a98adff09dfb1ab17b85b5082ab2355a2023ced6c2b6c9ce85f1af7e581a9abeb4904c071a17a1f504fcd5278d5858ce1958ae9c539f2f60d521874093fee5963519418562d29221b71e1ada49a57b48d25253f50f4b3e4b8f44c8e98fd777dbcf9848e204965bd6064bfe870c141d68df835777324546dd18bdfccfa81eb1edd89fdab37bed6f70771908b4314eaf8c956e11a9890809a4060f8b69793f345ae4926f5035325d8f8e07c1f8459fb25298951af2601dd72edbbc0d5d7fd37f9178028f6edd2fa681cf9aa2b9d591b6295d8aebe853f13fdc0e35fb023865e4200782a365b01fcb059044337f5dcf3b9f58a20cf1c12cb43a222fcd0e1f511285177553cb6aad4b798486ecbf4aa2b3131e8ce6b5542ad4d79bebfbb7b13f7b4f2c6d09067932a85c20e5470028a6ad2313ae119979660222f00d1fb57a8b9edcbadc4bad485a523bd9e1cad874558a5dec880624bd78dcaaa305a18df7cfedcc57359426747ed987340ef0beba39eb11ed9d4cdd7cddb4ed496819879566f87c662b6b187a3abecca3cf511966ce4ffdab605e2a440f3b5937a6f058fffb3f8b7c0048f9b5f8728acd95547f168d195fba83a291af87c07d1234ce68840733781d66a620d44285300603835625f0e7d67f59b2ba1bc1f4c75da3fc4ccdf574a0aec11b4441a3775ae19c564521843bf08e5516fa256848d67e77026c3a4063b3c4a210ca8a95b979d4c255b2a5c1761c4c2847d838c52d28f920894d5592912fe37c1f3a1b83dbfb7417fa250f3326d85d25bdeae273121d5232f966ac467d537fd19f0971184f8e340fcc22ea53dea325fff1989efcb8421e10cb5eaaf698ed1e2528bf27ad9470990c4422a3ae0e1b3af98b67eabc5025b15c878bde0d744b32f944c1abce4b6127afeaaae79c259f00a4d3ef425caa36b078a684b1f5800c52b06bc789f4c4ce446d383212b8c5ad0ba46385323807039ff7b0bfc3694c9ef20d16272eaba11683c6a53eb18e5ed3e06ac2c026e8f70ad45c3ec39eb34a719541cc67167d50e86a3eca5740876181f35a7a26bcea0acb02089906808e0a22b101071dedc464a27c580fe23c3e7e55c905e23f50a5b2a28daf581f3533fc30d9cd5ea1f12b4cd31e84fe86210df5cdd5ffa3608ec67f4ffb931464095fa11a84092b99ed1c8a08e5580ea99b906848aeaa2640c3a6d121b066267b995b894e2447067c1e02aca24543c8d2e8405654b787f3469bd148a6608b36cc41d2255a4ef967bf2098153dd2cab578a3a84070952b92e883d0566c6094adecbf3e05bd78b2c7d981275449f27f4d215a32a73aac177dacf82e7ae254f4f4535e099af615e5cf61ac4b0a4548b40863786a0b0180be1c1a75363686a23eb276aacf5572cb14c6de2e7d77be3a1b6fa59ac8ec63978206a7979219e7dcd450ed21f9e5d1ecb246a574395d234b17fb6e1de9abef7525c5dabbdc85746958781d50139c821f60d75e19f8fb02f03c24239e26f9f39dfbc23a7e5009cacc3d609db1971a11c782f17e8c5701dbcdea827c780b371e6696943d3b973749a9e5d2d4c30ebeff69ab1d7d47bde21c38c59ecf5820f3ce8368b459903c7e7f56f4175900e52ba99a4bb3e0e8a81c52c53fc192aae2a09268e49b26089a4fda67ead690f7b4c0becde77d3fcba0310df7cb936cdceaddf88bbcb118f14b3bf9513c792313f81e9d78f0b1e07d2090bc44eb9cc48a83fc7f6043aea906c9b34aa76b7775f219b5c42019fa7979c3ebcc4132462020589c858b0bec6ca590564ceeea6a0ffeb3f6c157a5cf715de472dc511228163ac32ea96087e2ba5a39958e7c5bc967b63172238436995e761cf66b092d9b0d367e3359954a3a48911fe17de4120e03952cb8594a4ef0977ed7c6d6edc7477bafc44b247dc54b6de6ddda99cabfb06a37f039d0fe416dc2c4af64ce637195e8034fc6889e7baeb0c7ddd17084b74911fb46673924d05956d3fe60bffedf1ee8dd7b46048befcca7b0aa7680968b40817b79c0e0625e5bca495f4b0a34523ae4aad13a06aaa44db94dbe2a4894be2f3f2514e7751b5ddd93814c745b986d7271d7dc232d8f1b7a7bdba37d46f3d27db184a24b45d451675918408d128f937df6f11681d7bdb7fb55f6d4effa384ab46f16ac5cf101db81717ad5e5ddae66860a92fae6a3ab2c48de3bdce2d0c6895bfe579dacf5484ea48325772f0b695953231a03c20fcbcadb8af72606694330dcb5c3e0abd10c4d48f4a49ec92a44de4db712cb947ab4363bd2d54abb3222b3df4be82fea02c239f74c74c734b8c577de5cf9acee82e8d0e24c42a581b9f9a4bc1730d5d808fea737f1128af2456fb89d8b5b4220a6de2d476dbbe0ea7f1c65fbae3a7d0662360773990a54924eb81303a8a405eb5508ce03adcd6765e01f8a2687618ff58cfcfd429ac8ae95431319995b60729f1bfd258f82e3b3748b7773b52952791617b7db1d8cea136ba1153ed70a1d12cc7a2fb653939b5fa6dfb8d5301a69e2f860fb337cc5cb0d960732e5354b3660e3ee1502e83650c67d6b68012fb134380d174b98e8fc080794e400bf4c8548d785f6419dc611a07258ace999fca42df2d4990d7dda960d9bf8b5e32f854ec101231139e9658c06fdd912d2023f59d39ddf64c554ca0a683531fb7eb8680e3b583bcd72685f2bf0c36f4b95dc5058a1b39e1917a05fef945dc12327ec6d5a145740896fad0b67fa6d9ba5c97ae81734be81145902d4ac0e8036cb632e1da8e878c1e3a63a12c69056debfd1805f1bf92938e51ddef0d65356f362d51ff1812457405a9a71ddde3f09b908426f3ded6b8e2619eaa71ce4ff1c8787e2147159645d3c5cd0e6e5056310bafd80aa0cf20857c91133edb15e6e7b83891ebe25b805052678ce2bc0d2b8e6453e30c334c05c10a2697e3566b92dee5804ef6f8723a2e99f1d0692e9dc8d04f818c73d5dded33332914df0a56bb9df7579d8cb0e02aa74f6e80eded8797bf7343bb89ad0b40a4a0a1717b1e60c9ed97c666f3322fba831ce384b42053fe2279a05894e45d66dcf99696ffba1124966dd39174a7e65189aa5ac406f08a67c208a14cdda15cc7a3e5116bb308f0346020890657378e56829eda272d85b33968c94c7dac0d8ecbc10c18d7de2d85621359edade409ae3337a36c97700656dcda63abd449507ddbfd17b6c5ca54581476bf096e6346ce4f6d5f17fc169cfcb8e17fc639fb91b15d20aef01abda3f2b352fbe4321b157712ef7ae33c686e2c3544c5a3950bf8b1bbf278d0bf0042daa86fb486df559f2fe4849dd840aea56ebbcddc4ccec1ae055b3b1e5d9cdb5a985a9593f85f590b812df370fff030684ab2426dc9ce65db35a7c3479f999513b5308c3f41986f82f255059a5f3435e049826c1f207b3fa6c905529c9f9f7894b8941b616974df2c0cc482c400f50734f293139b5bbf97384adfafc56494ca0629ed0ca179daf03056e33295eb19ec8dcd4dff898281b4b9409ca369f662d49091a225a678b1ebb75818dcb6278a2d136319f78f9ba9df5031a4f6305eefde5b761d2f196ee318e89bcc4acebc2e11ed3b5dc458b01e6025a75f70c4a325308f63c5f1a16357bfeca6684286b3efe244de822e8ac8ca7f612935d8cacdea1153dd0235e760f528ea01528d8613b4e63fd2f1fdceec94842c408ef8ede528cbcf6e3cc1936ca59b0b35f4f375e4646707a111f9cb2364b6ad72d296d3f2c6a42c9ddb5e4c904f5f77c9b53bfb2fe9abc3d249ea2a75225e0d4a697b24fcace592f247d4bad3dbbd5545fc2fc1fb2afb9cee039792eab6c4734dbb6f890cc2d528f6e9eb863d31fdcd3233956f500f9eba7ca6c9ac8b09300805303aa928f0be1730276b58d63a670917c136ad3680de44049a48205f01eaf4f931a32e5b1ee686296a1bd7a7dc422e7c0eda21b66501630f46dc956e87395eb12473bdaa34969e671bc4acb700d867e9824876d7a6503e24144db3c184676eb67372011f1a168774a02e7f0e8f6fdae7854a52a22c13fecb6b62235fdeba4e8f84689fc1b8ae68d86321f7b56f50affd7fa65e1ddd92ca8cb3e48d507f7b23c4c11d4298f6a66919ca65bcb38ac30fb4d8254152a214cbf0559c989d4df118de915990adbd45b4c13fc17710c60f2293f88fa34964e3287eb74fed4d326652645be33107f3d56e5829ffd0d50d7e0f2247ac2e0909450abf42c834681520fcde8984ceae829cc264f0e56e094656ffe92e44889a7a8399395ece14f7dd683cd482040fab50e3d66ffb3cfab459e01971131e5904a0e4fc767428350174863acfae2b9b0547f1d200b4cb1bde2d6486415f034a4f62b25cfeea9f408ec1c2205775c01bc44e10dfa0825c7a90ac2a6de17bbb0284a733e0572afbdda7ac6413f23f8d36f14c8625d5cdb5bed2bd79f7dacd0e2aab59b1b10b9a04b3521db33d2a745895932b9ccb2afe9f90aa489b4bb3bfc46aca5f72f6a2a4816b99fcf8c6867ceadfb2d29af9247be2982236d693f4b8a469eba1bfd8a2af3cac84317cd68ebf0bbd5629c8d94dad467d416d73f4262077d01507df7f9522fb1f1aa58493cba682d788186d902cfc93e80fd6b998d05e054651791c120267876c633e5b28c49719d44f87d34949d190809559f2a77adc1674a6dfbcba72e5a83a67e548bb01fb965db45e402a2d9206eedadf6448ac0172021c21089e6c0425312f8392750b3bc219be85fd5b5fa9bed9e64e59a4ef35e097bb2748e7782cc8fac2fe827d69bd65b175e45205677c7deac29017e3cae02adb8cd9c4bc1ec5573d284060fca3eb47cce1648650ce750ec9758be62cc66a16789620c346e7379ba16a2f7419422c2f130bebe3631bfa381d072910a7693c6d13e1e28fac5aeb5ccf8fb505fdcde7e72dfa62af67d675c28e8150dc7e3ebcf65776096e170047626f9fb95ccfcc8635c4b6b23383884d75c6eaea91d6ca537be95c7ba9af5fb47428a322c2b8c870e27d48c1b7e0b8ea196a4ade78da9769c2749b22879b019b5ca2a1da7de0480db602b77983a5eeb47625aa14d9af2c67959e3ce452046e62e086a4c8d56ed4c578fb0bc1defbb213539c1174fc8011b3ba0f46ab50112c73c97cb1d4148af400f20f4d80120a8d6f797a87e62873cfb7f970c15ecbebc534de2bd2e6805e3126eae784a065f90630b1651452a6b0edda1c69b6e509b9c10fe93c0ee6630f129f292bb80820f1a6bec105c1a0bf60f383e9a12c2853a4a66bb0566ebc03c820d37782f1a08a19f381710495b8b8ab691c2ac12b0ef0d4feaffd22f851a9afe12b9b943850ed9a77e28b079982dcb8d80ca570bb812a7050459648b68b9cecdf0d5f0a94008f9bba47d5b9d3e772b0c8bb2357e56947a12594436fb05326a8a2e2898c0e98ba45431919bf4dcdc1babf916b1eb0ac908e0404ce3fed928d0bb013e2c1ad00b4c09ac11dc40f1e12ff47f6476c25334d6075fdfd62752e1a3c930632527921c53347a5aa6e1fc0ada7e7527de94ae6c63e00e79a7d50111564d32541e67ae137c6d22f8765879ddad9280dd63e29ad42512e2a6b3b8721c6aaf6d7d626b92950a3c4c67e524f9be1bd908f1a13ca710bc0862e3941204874378683bbba3de25aefa5d155dd7da4097ca940110f331867b4915ccb3a266c69320b93b6490ef29bd5fbbad5ad1b9f9c3efb8982db6e8c9f55d51aebcc9e77ebc40b6e907b35435c7b50e8c66b3073e02a0cd0371f83b3facadcd15f9f92504315107c11fab9bbe4092bc3f0bec50a1e69677ef6827877c23c2eeaf05c09dfb94ca125006ba2447da815b31a4fe14b9d2291fc88ac57bf3dd251cb66ab0c0c949247d12679f9c56d8095200ec68c1ea77e13b1b5462872b5b5cfde8933a2bf1e0e88e84ccac525fdb8337292cace6b82a5760444f8f17a700c308a219dd3e09de9efd238060e4e757877116f03b01a77be425fff69bcbeb700fa36f590a7575a4a01f7b3d6dc271deaea666d1a3914cef2fd29ac429026d1b9b74cceb5270c9d5a48c084e238983c3313d753b7723fcf6831c9142a769a085eee3374b45ae8ae404b9375d129891c7e7acdeb816184c24965a9ffca7402a2182853af3449d1d42592d94c4bb8e203f1a8b1fb2110cceebc223035ca9546e80eec1447ddfab05831a6fbd2faec8b3ab424e94c3e87fd9ceaefc67dd1de4f2269c2de0359776e828b0e5fcf83cd6d09f076dfa681cd0014fa54d3a087590398503219ac4dc8f19a5c526f0b91636eb7cd27f9d092e9be9e15d9bf67950d4b91ecc52d0a64f323e8cbfb924dcab7778e72bea19418e61e826307f397a3021057640282e54402ebb401902f5ed6d071d408c33eb8bcc907070b65d5fb58413830e172800595fc30452699b0075eb642d2b6bf3705259c6376367cce5a5dd1ac658b9b903200eadce4619e7c0e0a72d4d0a539f643fb6719170bd2477b59ba553d890718332cd3d6d9da28fb3b810b0d16fcb9e23ae8301132b3f1a627f5051a02043e82d1c3bf066cbabe95586c89d7ebe4c763b19201330f55615426d9b9e2fa23c634d46ab754e529e9b22b72f5199985ece172a1e167f61aa8ba40acde976f0f299804cbc1a88b4e30ba7e3c56bb6606afc443bed9952e2a503f3d177d20a7efef14288ee8eaa7521b151771b4a49b909975ed91efa500ace14ae4c19c65ebec9e120a5b3102815c322bbeba17be7f4a315a38c12d7fb4c8e145fe53464e822ec0f970d8a6d86195fe653dbf88f05c5dffdcebf79b0b92a8da97537480c3b6dcdc3123b04e558f2506295b270e2278f08b63d0da4032e17153a8abcd54accd1f7b22eb89315f5233d2e0df9bb23c1d2c5e58ad1324daeb4ed5e0ce05c9f1101e24348f0c58dff4e7ebf392c27b279139ff214b494fecf665e7a784c5e77ac7025fcfd9e0cabebb6ad8c83c4571c91c3ef6287225ca514bde116594b5b72f3af2b45b8fad8fe2f0e421c9a5cb9c0b0863ccd4e94e9cef32e2db82c77c40f9b017ac407a1db035da7c4f5d94fd05d59bd2088c7a6dcdb0f299ce66e5c38bbe7398cee662d6349ec35be9ebd283b3101fb032baeb2a667bd52a7179b6319e68c99ea3b50f802304f1a977dd2804aea2da28d2c5052c6d3721bd4c24016f83ddfb51b21648c48651ad8d829a5b28ff75155f7115901cedce1f7ce8cd9024420750d8836fd64a646c3f2f918a3698ad701780961254a1eb27178dccde29f9e1cc125c9e2982b9c53defb82c1580fcc07a2ab1ca241964712a511880bd95966a1687048cad12b9b1ac0550dba300fb417d941a94b3a60d86bf14468dd49ca2e4ccf9f9d4624ef431a1c81e279c7f3e37609ee57c27c44333ceaa3e7a8905c658d6ae62feaf000f4c04814b9768c56daa0b90370ae83bae7f3f5929cf469aa9cd1cef6892feeeb50bbd79feb46f9a2fa265b23bc75ed3f772fa6a2f157221f44b85033319b6e18c74b4f560041ac62c28584b163af153c614e82577d374634edbfb34ea1b3ea13c92d2409911cf100d43cca5f3ec0a85c26eefd12a91b628608366c8b61e00f66e6afda1d063f7427afca706f8630f2f9487f8b76fd89f37d14dac08beac63a8ca061e5f2e80fb221a5ad2b74d296a1ae467ec206f2e975a4a41b63c2b4ccf7ef76d1ec3daf24179966535001bc6810e5917b152521e065773666cac2487ac429ea7e315fc41330e9525b8288ac0bed39b9e31963f2d54f7f3c4b69fd2e363ba66bd579dbef338abc0a34479c1a18830530452335ee5ea0273637d5f5cea5aaff8b661a24692b716bfe6bf39e9f046ee2952fe73d8cd2e409a4ca732eb24fae8fb9ae86ebca61a1839f613b1293662d5c48f1c9cd56d897911861e61a718ab2f1871d64749b5c879d7dc2629aafa43adcdc394f77c4e64747f19c833b74ed64af744127615492901409fe2e993c4513eebf64eccf6f725fa8d0e8ff2444ee1023f1a844247e9a5781c472d380d1df450c73131636bf036d3e36c5ae475a1361f98fc14f5071ea4a515ddf160408b94aa087b270302c2fdc7283b105373ce3b69acf1aad67f6e8e51d16715a75398991557dd18f5e3f4e49e04839b85655d5aa820012e2cd464cb44f8f081566fcc6b595c5eea82370e511f214de2c374d6faa39f3488403185c346337d1db4bbae723ebe0686f02699ae1324a0cd54c8c28223cf93a05abc5bdf1f2a18d10b60c6178c26ddd487d71c6242b885448288a95cf058255ec19d6d859684c885a1859cc00a3becbc91731fd57483032f93dd11efd2e3f3abbffd431e75e99621c053b9d781a63a2754212a6f712d2276d0ee84a39118036d9a0466138203888daef2a4c2b90ecffb190ac698005fea0281e489e0f49e5f8e9bd95dca8677a9b1b389e5eb7a1cb42228557ab8ebc164b9eee6a90ec41e0ff40aa5b0ad48f0fe75194005b88c78f082c92bcf37f8fa97845e1d6a95c93f19892f8fe823921491c226408b93b6c98b0544b44c7df0b38c4c1bb057decbaa873351c08c932a8b697e24b1ffe3c1b78e92e01779f29a9349f76bc8f54f920661dcba5f2467d9fe8e9359bbea0f76ec0010e77ddeffc043d86e978dce51e5fcad6bb0953806671509e70e84d2819a0de9699f0d040a286a419ae626694d8e3475c87c8a51d89c77e1648a3742a0f8c5528451f0727d9bb18a62a2bc4ea95355c0db6665f64540cd1ef117fabfd457b94249444db0bee1c0bdad117606cffd08978cb54fb0b51abec975fbf5d3857e94c1a0c24d4737c23ee1657d7d182554f401c3b36f0690f3f3e8da7f52051b36fcd7711118be4e06d3ff712cf80c151fc20668a6ee803e93138607eb36ddfe47998da47ad59d6d74281eb967106b052819ae63d7f3a627c2c7a8e487cbe4977915ea2145ad6dfbd6e5462575edbb5f35a2029c8ea701b448b758599a39a14c9415f6d0bac7b460f2b27f9da0b6878a0f0409fb1331184bec8a9d4e6ea89d865f44ba9a214cfd039035d2092e9454ee7ee8cb69adba735677e980ab493f5eaea3473d65c163cd4e7a19465168aeacf349f651cca56a9b3bb27b075874266e2a28c9881be335aea87704e45d962d16013ad5a20e4368176462e93c3d37865564b670a1a2cfe927794e9fb31500381b80172ec615cfdd6f3752da2743d98799c215e492e4cda8c12ac891bb62edf841d8a9a8c6cb91f02c1e49f7cf50a450c4ae0cce63c7259a0221ad82042aa7941371b8eca916d1cad5800ee83c4dde0a5e8f65d61a351ee674c7c51c9757743516b40ca177e0d692f2c46a547623d0dcedcde6a3c11501b59f84d7047bcf9d03d4076c703910e9710c5425e386b8c2effbd058de5f4e162e0ac1ade5b87c6925d4d3a101f68e528faa97073e73f6fc6a0fff822efdcaa57a3de40d65574422c49e8174fbb642591354f5d80d45c4c576b2c42e3ca270f6c0c057c02c5f110e07bb77aa078114462692d65ff70409673b6a8622b0562851291c808ee3d8ca7717b21f0ecc60ec60efeda265a5b9af28e0c2ae273121dafdddd8c93e32ca57a31b0be067f35ab2f097ecc1b2bf6c9d518e3fa205670c6e43037c999ac03ea0db3c4f217c23784e3e45189c0eec23bb296c6bcb84fb1ecd6bc3905768363b8c66a2054c1605c1a89222f79941d4e8f1faa3cd916c9560ddbd469d6d713bca058e74b5c8fd403da8345613211220c2270a5aed5d84dcd88780b42b427d78f2f399dbe7fdf97df4376b08f49d4a78ba45a3ba5495957990b4fe35c03e5495bb3cd0fe2453d264ef3b81602073b183d6330beb89a36713904a7defe6c9bd392dc97b06f3324f9c359dbc87210d0fea20d98a1414edc253de33460d244b810c5182e21add023acece4665a57fd12c54a0206a5d7edd6ee18455a1b5022c68b82e4f4c63692b59a1c31dc3e1c029d06a5deef1ef4ed932648a9ad51009d43ae2cc1903081f1575be1b0920646e7cc2d45f2d69f20c4bd885f6e82c45c0acbf3434c64d32872855ccdef4c2561031cb39aec3188d419a26ebd229ec7cb01abf566d4073092acdc37414c5f2de2fb2b342539a47e9742ee53e26445edf5f8701f07f6dbcb48f6a855ec664f8245266429655983d2e2d6fdc28f821ca93575c4ea97337725c3e696431fcb81c5101b53fdebca74483f4c5d54f52a878c320ff6e295085db28c0302896bcaba68dc50774c190aea2105298965b3bc1af9540da29191e3e41419c2999341024ddff24c4a7e8da94a0fece50e9f5bc54b93141534721e64ceace5aba7eb4ff0c0bd0a854a1faa2438675f15594c5db49dcc0abd48fe8af961ff8834da1bd91497627d9202aa0eea29c9c410f5f72a288616a04c4ca17810427e79e49c8f8cfc4662d3e8e0a82c899299c48e714a519f99056d68bc055647e4cc23316bc0cc065250a5f0708473710779d8e4379054785b0ada891394b61ecd4b2ca1c45a26d15fae5c4f4ed9744efccc69a8c583b34120b96033dfda17f3608deecc22a62dcba2ce6f6bb811cf51e713ff42b77eee889e73a6ef9d3fec745306f207235f3173d04377cc68c7b5486ae3124869ec76cd38dc1712d850a3fff948cef942cfe2687cafdde7bd65f690dcac4b207976dc7d64552943fd96ef14d7b5ee08ed82a0f7fc663a544266e3b9c0f1f2715298a017c5615609898d2e5182f0c7bc90120dc0c3f8e58884650d21cc36b0b171bc323ac0a335ca08add2246f6bf48ad6f8895187fa97faefcae36732fcfe47736c2334ea7d411bf7638b0c0199fd0a3e909408accdaa2201130708b9b743c9c422f3c49761f055e258b976fdfd39a11394be74a6f494a454d7d864a4f819aee07b14387bf3dc2e3607ddf3a92842e6025f7913fb020fe85773e839a921f87d54cf152efca56d0b8edb6910878d915f976b54753d6844748591a6c62ae768ab9db977069de91b54394dfb5c3dbfbd642f32c106d2b9facf6b9ba4b8ae9ad2b027a4aa6dd4416fbee1fa051520111f9a56605f475f599b5f760c527f98cedf218f2b2fb33450e292054a06f9d3344078995e7fb547d9aeab416e40999de5d68640a78775327a1c840fd88168cb8bc87564a7b2ef00bc9d493a2bff8512926144c8c44222632f65fb8e0ff4f07daa001734b699432e64efafdcefdfc09b36f7e393ebd0592b03676efc6ae21f6df18fd4a605835025852e45b60471da9c6612f94ea8c2780e788964d763c9441104e044253f01a49a7fd1b132144641aa824aec3565990d92015453aba52b0d0b5679dc3ebda4aed1c76268fd99dd842a1df83304bcb4983a3040e1e58987e8b168e5135efbecdd8ffe68d3550f9820afbba3741908a5968b87e766119b5055b7ae9a7012843acf09874d96f4d01685afcde5160ef3fc86fa7ab076bc5524d262ba0278d5e12ee1f2e4991a49a5d941bee7359f42e929f7fb7b248a524165fd66fdc594258d39b4c0b8c3d3bfdb40e3317a0d865162ae58232bcc175fdaa42518fc5c688e02dbc5f7566669e3faedc8cc08e551a6fb0a25f5ef0fb441ab5fe81d282f5c8bcc8583fb5ff933428f4080d3065587d01cbdefe84777d7b41e09c4c823c6e68b54d77d6137e4c657f2e9a9db14c69f59324a247eb78cf803bd3239ce51abad29364210bd60b19990e049826896b11eaef62f522dd1c7abdd0359b584545606c1eb45fc648d083389b1c0c8f01ebd7c4db2ee077a08b0598c7af0d68e8e4e8a01ee638efaff211aaef21fdc061f444ec20306a2e7decf87beae880b41720dbd55aa1b56f549c4c58d2b974a0f1addfc8860f9b2fbc67dccdff89fc231921c0729b8edd2c7ff4baa80b8c7819f93f30c1d4747b62a52638f6cf39899f380e1fe1a955b80f7822e50364431112c0d2bf40d40613af804e945e22a13010ba0f81894c9d4e00864f55d2a38647748f8c15ab4c6e6aff940a786dc068f85ce84e6cd24c0ea8e8f2a3907b91fc2325ae98b96b055388382a806d8b7037ea6c0af06b247051cdad05452068f64eac0e651c33e9c75e76448ad8fa20fbb60c28682003e7810ec539045e8dff9a24eb17fc410c8c59373b09fc3ba8942a8c68784904be8348ec99723a155daa4424e629ba2ecbbb8585df71c8d1fe4fc3620645f7c423618a945042ee931ad0bef9a72ae80cf8e011f06b6335c184b98edfec75b889bae712aef29067ff4bd8ce493604ce021b62c622e6c68c34c23a55ac24f2d57b0c7ea7e18843ee82792c3dbd999db439bda96cc058841651413bde70b6a296c1a08e10d51845cb442b33d2fcdadfe2d8651dcb75ca8418418822f2d4a86f4284fe801633ad7d466ce95557af01b09f089c26aae642aedd2b1f595980044023ebafba81a34cd3a7233cfa927d14fa35f1e92cd3becbeaac388f46db1bd2fc7f1f3aa619ccff2f3590aa8a4d0f1da4eabad4970ca36a20cc8f5f53404d188d9f4727aba557cd7939dcbd6d4e0c2396078ce5cf1e3e2938865a17e74fc0e0dacb8cff30efebbf99fb2efd0c5e1d2fb8d38ea53cd1360f1a22be4069d11931cb4a16499fbd31db78c3aff1cd44ea48f298e99b46ec3324afe8e561438f031448660c8d5fd8d12bfcd9862119ca1a762c9cc4505639df71dd1ff702dc4e248f39659654d80872b70e84dd1559b655c14e29484ad27edffd8d111bab9cd924ad8690de247214bc85970ed956f3d1453240859c132484ded1a8047ae5ebf7ac73182f098895c659a07dbda46b51e390d0eaf8ea33b21382f314413c37316f64ebd58a4205a9e4ee0daada66dcd9b4dea434cc5730e6f3736dbb10882ad60af31ca6e8af25163726d504ac4632f50bd8b407470d9427eb5a4783b886454290020e7393786f4487a601757d6df40cb1250a49b334e6dcc4df8756836010dec938ca25d1c66b9c9c1999e49303aa856f6eaee456f3af6f46a9371bb73b13107c3e57a2ebc1a2843d25a338382fdcca0b5ba6be7973764739615eba9d42d74173bbbdd429909b653472295bb11913424d93fcc163dcc3cc65ae051a7d9ae3da745805a2d25cdea847a9323449ead655ffbfb8d45e551f66923933259f6ebf4148bd36f3304cf4b33f72c7ab47caae6be786e0deb006107d87aaf0c24ae4f4e0b79158b1898964f0e374efa8f2e022eccf917ec9a21820790da844d9c824091e887c74c3263ab6c5fd58b2139455ba407d88997c7cb3d7c2ecdb38535f578662852890114f88739c53c518d47350fed0b9113adf86febcc0ececd31658a5f416743ab7834b9b22dcaf642ad4d7fa77024dd768da082257dcd4831e0bfb35d9a11e5dee01649a4bedd7ddeff90a7bac3fff802b554947307c6e471f1a8f30c06b4b373f73e0ad773793d76f2c53fa25f099b58b389293d00a80e1e02c5ebd2edcc270b1c108fe2c22adfbb356f99f6b7be11d916b2b31beecd3f86927ae05ad5c4db14cd324b2f516ebf0c25d4594054aa06144d65c47828c2f35c0f5c830c453b2a219917cf4577b175ea52b7ffe7bc39d28ad626dfea5505c40ef7cf465fc29baea1fe457eadcb9f7ef62a6ef085650a21bd2f5a57daea221c0fea679ccdb462d3167b2ffbc0b38544903b8dcd71d5875e2bd784ded25e9475ef359a18eeb12d321f7e5ba936c60f5148f4890965843df2476d4ad75928c97c1d87fb2d3b4f67460d963d197889aa4f90f3d516b9078a88903ef0d3e7ef5d691b4fff5c2bd58d79615168cefe64c279f8a81687e4b6198bb6eb3b56f718bcf7890c1b2848ea1c56cb1e432c40fe047b008fb1df81465775fbf07ec31f1b6491c73ad3140af3a0689b7b70d3d89bcccd19293b70170ec0c20fcd2fcac88de0b2565abb91fa98962972e766383de4a7eac2e3180c0e95e20a32ffe2b07bd6bde3c6fa3934902f8a13b1f097dbd95f025e9e7bdbe5e06247b935f72c26b18c58a09977d08e545ee8a1f9157a31437188830c21fba034fa4e596951608ff2255d733e7215e1cf7d3e6eb8c4a1cb04b297027c940bcd54d472654d8d247ec62818d636777dd15a20e7d4719c932b8598ba57903060bff87750577308ec55961b273401e68cff9cd0917d93ebd2b54eaa5efcc785af1a786974ca4a532cc6fa551527314da7aef012b7c4c050c50ae85e116c93125b4f6d013c18540a6a255b8c4f2a351b62820c5dc7346769fe9ebb2a6e117354d9d13ef532dc208d28f3422751b79dee51fb3a184c66f985e3e36f95d195e8cbcf4266bbd5703069fdd3469ca959cc24ea7d11d8b3b71733196b5e36c86483f580159cabb09ef40f3d27c172d27b605d80aa2c25a9bf10f013b90f73cf07b550b0bd296b4092ec0b8b835b3059b6cb06d8e4d1757ad9a75b473f0bd351f9fd6bb5cb9561020698ed4d586c6bab768c9f47dfba5eb3b11ac3487fdbebfdb5dcb523a3793361648b0317298d7b444525b541dd3f27e0b01bc67bfde8143eb5d3bb7ee74d490b37230b5d6936e5a09d16b77b7fe8879e710ae3762bc8f2718462ed2c097a185bf90154a4b9e1416d08e034492a3ef4295e6898bbabe6ed52ac0ac8bf7c8827d014968d717e14f4f5f312aa3f8ebad43dd2c554a0d0da8b3 +MD = 377aa2e9b916a1eefbd55c546ca6e43c12a010aade59360cff576e7d + +Len = 88144 +Msg = 268716435f8e27dd6832469e09e4b21b92874ef82a76990864c9e0b513d4b3a360f195901980f77f4c2b6815156f0643b4573825e28b9f2a668a4976e3342884f48bc3107aba2c34355732d192e5d730c49d05e9166e7c0480420f5f7883104f0add098a2b46ac454b3c0d99294e0f2bebde1c0c6e251adedb789a397bc9524dcc70cdc8d42c61fab564623682b3957c51a4e75691ba5f009eb452cb930ed6c360cb78901c72329a9c579771441b516b1d76cd8f283435b1f27e9fdf695b84fcee7773abab22066f279b1610178f2b4078dd367eda9c833bff5fe93ba4b7443f9ffa25e12a43c7bf7fba45dba5160b4289608aec50f931e4ecde98a8ed2bfed39adef5f941de5cd3cb3c8e9c93b8d9ba798732a1325326f5e28414eeecbe9a0108aa4dbd97faadf334a758198c7d7df06fda946527b34cb508d7c5d54878001111e794f3d59fa266e2850a1b366edf2c94e21900d7208a6e87611425aa61184bdc1c3164a2d52376fc5d0e6a3992e8b60f262939eba2c86686aa67a5b982cbf692d18ed8a7a51869aab8cbce3ef27ed5092e2dd90b41eee72e38271e1ee2ff5c5a8f12178c166988161da90fed948ad3aa838ba9de06e537a695bd5980899dc35ddc25e8f831fe1b651410f4ed82f5f619acad6e0df8939e17498f1b88808e74c3432f1493fdbf6ac2256847e7c4a5877f31f9f33f1fe166a9da072fdeceb8b7b3499864068295bc53d919ce826084cd039bd9ff1d84b7d583d28c5c297b05d45578c99df9c8665b40b78b5267607912ce71b4594f2efe35ceb9856911905c12d257288a13d81c8db248279a3dcb6b9c073bf2ca7c259cccb1155c1f4014a4ba526e1ef2fdb99d9bd1125370adaa44b5d782fa1a4c727be3557078465b0fc714fc46149c5f73d3cdc49f789a5f04eba366cc3611691c81c1e25141a60d8aac68f9667051df0fa46ab477ffe1fae148aedba40d76782b98b07f411f06fb8b3bfe71569bd92894fabcc8204e0d274a43205f8fe71324a8a7f654c77a2fd01d5c1d8b9ffefce00abc092924cfe68d45c43f19172cae129a96dc8a6bbaea3245f70f6fc80082b079d29afe0be933d5ddb35532c34510ed094daa49b547fdca0df41a465908323fea23b7705b03bea617f8a8d11b98015bfeb3a8b82e8a303f7c3b8738db80d5366499a7a79e874da9fd7b801fa88e49047fb21e005de94d399ab59e6cd5cf333cf01bb4ca5bdca98596252744f190af9297315348cacd1a627048a60bcf5d14fa959224011b6a9ae3eadce4677f04fcaa4b1990b9fe9f615f05dde93c519240175be440766599e86b0289feb0d853f8f6a5501d7b80c5e8db625dad28e4d67e3c4afa504ec1d15ac4e515be4886e66b1eacbf42b5d8a9787c8dae3bf60f9198116bbc9cb4b77ab9979b666c5711241dca684e47908fb1d8ea90badbcf5b2b543dc5126bced0fccd8b2d665004ff74d6a1e2e673332c47d2ce7367d4db4f0c7b6960e507c493bf5e49a2fbb178da405d4b216d0fc637d22cd03c9f7041739cd53c451bb6bf892c3478020fd9db29ef7b712dcd637339baaf97f549f52a4f44295f7b9ec1e738a916c156890e5475e9f8bb0fecb760b96623cca54dacbd6c6a41790a5470632a9fcecca551990b45959cd0ceb453b53f4050165593dd235178e333fb270a5ce7772240f74fc229215d2e59720b7e9b53affd1e0c02d08386d4d83555fed9f9f597dbc6546bd0d691a878fd04db823a7e1bf48cd284cc0694e8e72620c02363de69c105c58d0d391edf40658b0ba5b947ecfb07af001bd4021adaaf655731c12a539ba6519dbf7b4f684f380f833040378bdb37ac5f031458d478772baa4b3c5fbf335001832fc3adac6d1f992b6bf9d45e5cc5d087cdef1f7d88277aa1b8fc07144facdc27a53abf1361c22feb9d0aa9ce45592461c08cde7cd3665a24c228a9bab861ea7168080d06f5c8dcab0f9b3b44609aaed526141d3b21ddd41bafe8ce193618334ac2541febefdaa5530ad51426733178cc45ae64213933ef6ec866fd999079c098f9467e2b189f94cbd4dfbbdd47c58a2c67833c96e511b40655c7bea2902b98455608b12f38c0b0fbb5e2b8d2a4ffeadfd2ba2c02eb1f29c99e36999cfcd7c33721bf405e17e401cbf706946c5187a2cbce7cbdce140458a0ead917ef9d244a58a296b41f7cb49024e172d6121804badaa5f175602869497383d8bf033bbb348e21b393dc31d764ecba4f062ebf1f38f39d40df21eff5032baf5c1a409e4389c3e53e68fcfcf6850dcbc4ac270f7f26fd0092807931518eaeb78dae0f8d6551de3760b8e7a6b9fc6d5cfa5165d0cc8be2140ee2d1b524f2e6e39206d6d1c995c75f400d04f7c7d0f6b4197c50cab0708922dd8c8f441737ba7a94a7fe32165d66a508eebdb6c9098e1d48b650c4d1dcda7126061da6d26611c6ba1bf078f5afa350dde479ad66b01fddaf86cd88d7d7bd4b12d9e1a3fc87d50d2de9136b0d9566aae976a1a247cc903d77742fdc6b6a1af6c98c45023da0ed981499ced3071697f9542c9b5e1465c985c808de89359bd9bb72a7af8d3fbb41af98b38b778a3a1e86468ed0a97484b2fdc9cb4257dc74e2e235b2890aa7dfb999e1c0b1203f0ae399e625a84a0f2f33eda344c30d09fd1db33b363a4220153da01648a896cd8dce7a5c788c0b8e71349c7dfcca75633d7376acbb2afd5064b50a5fd1d7a1deccc870d10fe2b2994f9d538079bd55933cca72b0c7c103dfd40920e5e5a80917cdb7c46d731308d7d3565ad445067640020cf06de4671b766d212ad00b8295229a85bf572b88d5f10447f9a0e80ba013981f380e99840fbd38e57048cccd0fa73b18a6b8bfa8e18eea59780ce8369ab305ed92b96e80a55b3c3e3974aef23d4db65ac4b7b8daf3578e721e42cfee2eca515c4697ecc3a6f98112cf7c3b57e7bd1531607d9d88d5f4f77b3467249a22fd85569bcf9ab5d93e104b7889fb65d79f6087c131f6194d0c2d5d02a670a43ff6a7c2da8901bf08d3f0cf7dc37584d49a9d4330fc4cf5244739fed0253a734d5dc2874cefa747f95f29882651311da556d64df5062584224f2248e60c0a6f14d9db8f362616b7758bc45cba5bb796137c128d58760c2d0ec9f0228b8468005b13fcc1e359d67544ffc835830b9059e6b45aeba174865bb160ac7309b5dd8eecb32c059aae6deb2e623dfac78743cce6a5b54f172a1d73d4ba5d25a6c6f0818d607443a24d657ffb5c2c93cff75859daf82ba103be58de3d7f0b1fabdf2a4107c2da63445f469b72979ce7e38457678c54c4c9ad58bf04b558be49602a12362282694ec80c96a65db895e04a56c95dc26289af5d21db4d03ed7f8b0ccc30c9a54826ea767bdf08826a1f654e9436a545ca813b5b403322f1e555cdf8f00c605abb1b2095d5a828a953435f356624a6dd33b456eede50e945e849f76dbc2f6507844fd96f417a709c1b08b448f51dc851452be66023b80cc8a062f1b158203e754bcafb4ae8dc47226b774dcf69a8736ba9edd4f736f5f142b2a8a30ced67556cb7956f6ff2561502eb961212ea4e0ff1070209fc408f027bc923f6c8a38d10b470b71e2686704305426feb589e9504ac06736cb6680ca53a8bdcd02ca119d9141f38efb7ccb337f3180ac1ebb008bb644f47e46fd7f64449a0da1b7f109317556c21c969eda65a94176d7a11462c9ae18a865b6db4d4466eb125bd0a1783313ffe79968511d214afe5a20013898b0aea5e39b8fa282f137266c6a015df72919a7e483d535fbdce0e2ab13939a0ac74497367e35c5b8e131c66c4aae790e89e2e9396a61b00f1ee778fa00fcab3173ec47218c3db7479ae365a27c5ca516bc0c3e66cb9251cf6deb3bb796910ec55d224035442c19c784c86e9f8d8044a855f201ed15eb8da52048a58442e5171ed9630cd244754fa1455d6bc3ecadea4bde30ee4ce7d1e628fcac30b0748d66a67f4b2798fbbdeb7d431ec7a0185a0879bb555e06afe9ddd3497287ecc9ee7004c5370ae9e84a5fa414890cc49f0921aa83bbdb9adc97e73cad27f599a18cb5a221a3415588bf2ece1028c5a1ff3fc866bde0e189fc6094bd8e591437a9ecca274b3c456c5b80cb43fc8a7cb8a7625f26d060fa449de858ee63726e5721830fdc785e818edf43d7ce000a8c893615687341c8906b2f73c637d3006e78d6e4095a5f86a03d925cb694e1458f8419cd76d4a8644e5e2fa74f32438f8f0d0894492957411c09034ffa5106a7f049c10f0cb37ae08eae2d0766563b7c5a8454f841c2061a4f71a0a2158ae6ce593aca3e9c981fa9dbdb95f8ae2c21535b9f3a94759cc27ec4f808d79a9b080514e7a3e0991b2d4ca056f91f792caba10c8e27fd774242eb171c9a74ec19f108cdc0dca994851a3586a0d4d079c020f1e801bba7a93addfba05fd3feac803835fe76d2de119e7cf10969a7a0029f27a2786a54079dff1a0d1b2253d93e562418f14a351292afbc0b72e1e022b602364f28588fb1c7f77dabc204788924046b2e70db61cb9a315dd18dda2ccd06a1c364823cdd2aa9bc7f644f86e0a2f02363e2e7aae78d8adbe90fa492cc0376e6556f1087bac6d5d6a5a31e29faab153bb4d2b02944cd0707c41241ac7c6a795872eb5dd9a73abebe7704b85e450625a5c47a74e6f80e713da565ff978c66a0709245c4a330ead6dc69f5a8a44e48840a1946a0647fb66be5d38738e49a8c6eb73a2adf64c65bb0c904e2598c84f6c2c129c3cd124a7959b8f4f2880415404694e0f718af0601cefcce775587677564738c7e5570f6bbbcff703467768b36bab21d370ad24e71a4002d1127258458db99a7e2c410f2f21851dbd941dc7ab45d674567208f2e2fb24ba74c48d76a15ba9c027db372ddb10e38ae3db176525d815d0ff3f43613908c57d385351d674063f332cb8e07058ce11c5dfe3104b0a6e8ebb389e0579d4894bd285866882a4d7a57af38ce5e08ca338561774ae7f404d69bf6959f6439bc6de42c32677821b16001de61eed8560d980c6f556990bb1bdcf64f836bfc67706a4545afb29dcbf0b7ba56b38a168bcb7109cdf507af64308e8314efe080b4e93c890b2cd239a7afe3b99eca0a990898411603f2cf949e075dbaed37878180ab3707e336410c433366b81d01fac05ad89aa9b7cb0bd0b6f4bd163ef6eb8f791afc5a746889660d2fc31e67f7d53d0120e04d4fea56f44d8d3f1d90ba670b0cdcfee9251005d783e98b54e618245f89e5a46932dd2b6fd035564978dea4749a45a13c7be950e1361522044def62a853bb7996071013b3dd8185125df00e5cc009a5ecff30f513a22719a4d5ea0ac80d06b25c432f8a60c3f66e10c67b0f340c8d5f5315a36cdf4693f4af3494971f045bf1146d8809e7220853bd38fc419aee454007559d12b491e0259bd07b921dd82fb866fcb61cb7863be8902be02fe1d3b5fa8245aaa12412a03ef3300b8654f6e67abc57363d625f059f0225b344b95b73d14c5c4872be5738a32de9c0ee54ff34ba9d2394e6782af9e9abad020a71f3f386ee0ff311e3ce2df4d45448248e4f8eea71e83e9259588d5af52848fbbc1bc96dbfd7370924e5f4966f15ede36176699ce2fbafdb96864455672df482f8514a085a5880b3024d311a66854e859ef2394468f4752ca032937b8a34915aa73309e945fa6cc9fc5248034348c695674182736c690b0016cc1f3fd6c2abcd492f8d830b4357987393cdc39dc7028d8ae2d9ac65affdf06ad12c14c56ea0656ea54957f2b9ddb9289016ddce966ef85a64b3420d5fba680ce06e9cde8f1bbd8832d1fac4c46ba66bc5d7d46e2d8840563583e69bfebcf18d584b2aaaaa8a3016669bcdd9f98deabda37529e4f2db001ed3d00cc9e392075cc7366082475857a9af2b53badfc0e0aec76350db9cd3b214de3c26ffc4c6240babd4b12dfc12bea27ae52edfdd8142af9046ebba720ed0c8a31cc7a608c5c20a849a9ed62f55bfa1687da1b1795b6b509c845cfa18e8e6bac0e65165361d8be9dffcac43577de526e6497ef849cbd5025aa02712f7fe5e5bc64d76b5c339cc1a1c7f5bde1b17c99372ccf8fcb54f0a55392eccbda5bbb23c01a68a0036a72d2bc897100ed09fc7879c9cb237424195c9d684c02298ad8ccc31861ddd06e2099f72d87b6e1e928963d22d3d40876fe1d0b146a41a5740489ca460a4c4ca86ebd599b7f0746b8c69c8a1f2ec90eb1698fa47f8eaed4810702df8caa12fe7e26e7ebbca11aa2de9f3169a8262c0e3c205a708f0071401aa8de09d28a5a6e590ebeb476341880c37bfee1a501229081eb27772d07b371a5b0c65100f34a25a2f0ebbcb2822865cf22aafafe08d51de7949ec242ed9cee8ce861bdfe2b0aaabf92150b59d173db6a5bdebc9c836d3cd6e16658b4f8533f35155858b47ac3851abce5aa516a2169fcef423065ba1176b69c28416d7101ec0a0252270a2a9d3f193802a084955998eda77d5d42f4ea52f08b8b8653a0cd7d7176f834e982bf5f26cd16f5d89a43eea549384c1b7b2058ea77382e50cce07bd438f28637c9526da842c6b137c008f58c9d1a03d995da100d27d6414b3e616e9a11e725de487df20760bcdd8850d0350a6dcc8c628b4003c1650ec82b3f79dc2bc97f1ac4476975aaefa081b392c235887ff5efa0a57cb86ff788c9da15504fef28636cd30d3d7efbb719a39fce077d6c9c3e327a2ab3b77da6eb4f3f080d4e4ef63b23f1e42295617fd04d364cc695208c4f5fd7641089553adf5f4262d962b0faae480812404344116d865f5328060a17cf7da199b8b55d7b0e03cb69db117dfd65e1ffe0be0f0c339757022d555694056795bf12d6c3ff311d42c2673ce61dc708f9be96c58222aef6c608207410251dbeae1917903ca223b7250fa22366f8203e952d7c7c22ec4933de5775aeb924287dd097ef0ea7ad1a82b29b63b91b76d0afbf34da0c7ad3cef6a4d8742adbfbef4b0321e4798c8ade26f34cf1258c009e047ebbf79c0f4003e622736411fd1137d1509f3cf973a0374cf00b969041fc53e5dbaa1c556b99b2ac5f118f8aa8cecbb6bef940b5e557ed9cb0c19822c3d4b7f9dce9915f1547a1f063983bbe639a72a3561738d66917c7bd3b54400299ee92e98c609ee195b3995937f2b1d4b6ddf3401fe16c8388488e5899aed6594bb4ac5cf0f88b037444618fe20539f529ff1734214023e5c9520a14d3b5a24e628ccdfb12979fef3961c33b6cbb1a494568a628641aa724b49e039aef53eb0a65e0bc6ef92623ca6c748505defa9ef7918168c3f1593e67d1924191f86ffbb5dc17425cad8e5fbf95e470943fac0b2896b024aecfe331d6a9978ba2f3f018764f99276e37b59bf33d194c9197b8aa03da5ea49006a2c89bc316ab75eac08b7547ce334b9e851f91eb7be1a3ee06c3b1e7f4ae129f7c4adba77567b1e4c69cdb4c1e2d9beae532bf2872f6734d7e9e5945d80bdca15b01c1de1e88feeaea92d0e4f1df0823bc1ea57b6655a8bb0882247a74839514263372ef77d6060314b77b99af0f3852f4296d6cbfc4eb418cb93a102fdde500c5291962ea186e372c5105f2c086d37f749c3c83e50ce4e6f289c28f70e3766e1f2bdcc0dd18e18e1aa995778c0c82b024bf3d4940f53ab2223be47da15bed651e80e390ba9c0511c60754b17c69edefecd99545384696ad0416ca64290ef5eea972575ae86d82c719b26a27f664bb43b4346f0036c99fe0816499cb70c43410a84760a7cf5301b9f9f4fe6163c694b56416f100a044fe527f6b7c3bde4452d3044825fdd7152aed4f1338e82c57224be4c843cfe0805a0be775993bdb58f83fa3bdcfe7687da46d04584143b7df0a0f1c928ef55c455c14a2c81853cfc6ce5d6eee85eaea511841fe0b41fa6e26f709f5bbfaf87e5aac7497ac220b22577b344d227090c55a2d6f27745f96b8f38f40558dae62ad89f133ad6bdfec3cd3a8cc29a3b86061608c0166dbc49efc107abc264ed3ba5098d35ace4c767d8502fc2ee8b784e2272bdcfea287989aa44361854e479089d150fcf0e1960f4666ac206174a7fc9f7d82c66fc5c102131755eca4b7c00e56977911fdcd92d4d04598bb6db3bb4a1ecc2ef25bb6d12a90bd0ec220470074a90adbbd8a7c88eba28b8f765b8f3a93e77df807ca5dff3999fe358c01e851eb0a923da69dd5bf7c45a159f932ef6e0283f6a5aec5a29357b64294f14f81f99b0297697441c081b03fedbeebfaba9dbc79a1008e526dd4ab70f1f19a13f941ab188125d07b2514ae1ad986f4bcda10ec51e5d0507ca60b5e4e73152e553a7144d5b83a6255ecc19f5dcc78bd7f360fb89429dc9b48358097d930c8561b2bd18dc0a470d1d6fed0ab912e5dee4bb6e148c9d7ed18c0027b7f9791d1ba6fb4a9af61ae8ec5064189f93d66fd2f2842d0c57856cb6eebf6443e12fcfa0158bd40d1403c5ee8ee9e34b2e9de20261fc222572a0e3e46d1f722fbd2da09d4df2edf1ce6b8a6df95fd18fd1efd8e7e371e202565670e487bee5fdf5d94c7da0aefceb8da882f5504477e03622b0edd793e1258b4c9021bf0c441113d90fcbce3e955cca416c1f04162aeec40d06aeceb0b40179c9ce468385f11b9fa3870217202bc80cdc824585638f0df3d546852976bf18ba7487ad65ca916011af3eab2be234afddc081f364ab08c04e320d1b785476fdc5c358d0e63899a0f27283417cf35486b593d7b3226b1c984b99a6cc5bc88003143cbe4b755e6e30ba94114f7ad1efef2ccce00f3f125f187472b03224414edb2e573497a3baa3a1e26a553fa61c8b4b8be257622b3f34a34163b5c7625d57e89c99382ff1cbce77028bcb9c9f219b2e8b7a9a56675031db4ad33416a67b2fadb789558ed0004322836ee0d0c68fb3fa83dc255683e3db12f947978a51392abd378df93edef6a636ed9a3196acb55a520dad84dd0168950cc5477c9d0315fd79653dbfba6f2d6c16c9743a38c240e2a7a1553564505cf40b37494fe93c700c74f90ef57c110309547fb36741a7a1017db769c386f14f7ca0d7c37dd95df5dc324b88571e55260272a8ae454bbd642b46d8619bbf74ae93602f5ca307f805e123d52040fbbbe4ebf3bceb60a173f8c4858cc33a685b08dccb966b4bdf8b3ebfec3e6d4faea5fe3a5a24e1260d7bdd61dc4d152c3c04ccbd45b575d4da97feccddefd5dfa1b3a05208892611ca3580879d81bdfd851288c950f502da73aec49c8b51e06d7f6599d7a15230c0722190ba5bc3440aedf4cb658feda8c955202ea3771d1395822c394f9708879e9fd07c5e999a4df0d13be33654f7ce2dd99cab762399e5e464880d0e6c249128adc2b1f8c97f123bd9588e9042bbf9748b94b9990360edb690f993b8932ef3eb1658b01d8dda573850cb2c27dba2a139e578d760b90a819892015bc29e9016428433154139447392e2142a5172345bea71e9938196ef4806e22fc3a0f0e07eeb51c25fe86e360dc817b42791b8f98012ab376c503f87b79dfbe569f84ca894321996de979f377c443c3b928d125ac42f1c12c071158c46aa69c2cd2ce4510cb336113fb33eb14593fa0b099810e08eac2eec4e48ab358bc896385bb35a623eeb51d1f1efef4c0023cbb2eb47371346266e24546b834bdd851bc6a4203164b146d7497392036012a01bb3b61ef77b911a546b714e1007d24c64ee24f7ebc0fa5250f8534e2d862365749df883c481e5e46c223364e42200aafc2f5caf0c1f709a395f0f78c03688f060d2311a30bebb313fd909347202cf1d5bfab9b9f4c8ba8b0afe16966de9d9dd6ae0ee46ce9a977d2a0061513c22b4101ee0daad48654eb13055f74b89288c88fd5a9eadf09df114c528da3fc51a461f9f622dfd696d938963e72ffc946b179f829fb09439415eb49bc2e2548f520bb8581f323efa5a2f8ff0222f3e223a116da530c2ae2b1d36c9186f08440d526b66f34865c65db389417fb78364b51df09fdfae4360289a2fceb57dca62c1a3eba7eb9e574815f2272a6cf7bb14cf7f3b829c78c13ec43090320d7f87454ebf02f79b818518b5ae8fc7426344c2d3d668d26610babe80891e9f9af4ed6ff71c57e29d825ddcbf3139948a9a9f0354cbfeebb7269e43d00c0173b87e6b577d4440d56c216fe88532ab0ebffe483ad4c8645b29faea8355221f3b106c6f7023bf645c71ef39e0ca1b5ab26d1edeedd6544f9d192e3de162739e622d5f886e9ce618e4693c2a49d063df1bfc7ca1a0dbd7f72e1f3106e29a69259559c844874b70f5199c98df884aa49ea7e8885ee857fc218a9693b3fb6f8b3b213027027ea1b88f489695b8209b461fe2dbd26518cd19253f39d6e3b0544245b24afc60a952552e1de1b352a734d0d95920db32d6cdb798b8537b0495db36eba504c8ed8bbfaf77e608622d80c9cd617772136696bc6fe2828de0a51086d18395f81ce7ba5c5ff35d7532a741aca43eca2a0b6edd2baaa92a43a823c4c99aa3e18f590da9bacf06d0a2955e6e6fedd7cdb333ca1e9de0331c1f423f0725fac334451dbdde4d7548dc2b1ac16b8612a30ec82cf6df75b936e47b4f256c1e8a77fab3cb86cca6fb2ffc79336ecd81bb46e9c3477394659e2affd21f956835c238a155f2d6f939c932ae176fb518d53039fb2f23ced1cff765dace43fd9fee3a6bc4a6145ce88857e76d802042b20319d2cf7632771c275d9e11ca5ccc57ca3ba7d11ec0571f153fb4b73e05864d9de0c7b33303fad80e493a1150ba90443c7e63534a57741162d92117bb8ffe20082d8f62d008d899d742a075fbedd7c9b75b34c7936a2243e3ccc30b931028fdd448704af7c17ee634c287ac1677017ced5a72aa9478e03b3a83010f2f46851b84da30c7f4ce7c21895156105ae6bbb23114c378c7f44c7bb98471af1a93912d8c5b478661705ef05767726f13ad552e14e2adce987cb569f3497b47df77eb986d340af2c85775b7218d8304eb4b6c351b7c77f89062b9aa7a6aa475d863e2e0a9fd119993f47f0a6a2bfe7e3c316f6bb71ad8a35a56d7a1a13083c5aff8159ac52ee1e75ed7d94eb3db5b37a10fed367a76463b30c98dd42a637f93c0a4f22b414202687371f31871141fcd94275429c7f7274cbe2b4ad6584c1e8cb4eb171690ced9998c337aec345eb2ac902842ba321612347d0cad1ccd82e70ce74ae2e1463e0df703cccf3e7023ba512f83276c4b6b9daee7de031bfc804f80f234f41fd407e60d748e7e83b6fbad67ccb870b47660000879201b5857ccdea54049b926ccc5185958f8f7507b5ef23cf248bd27458c0fcdbb63245681d10ad66bf9a09a92fe0b471bacc8292fb62f5d2aa47b493b58038b2927dc9aed356a90dfb548ffb90b3563571a6f7256a9cb54e06c297eba4c91bd3cde929a0c526461060d20aac1753d4a75b26bc082a24c90cdf0465c54e220d08107e4d861c08ec39971b6402ee4794902153b98362829bd1de160469db13761703451da8ff84034e483783463a1700b76b36d7de3a3f9168abff5e1f7224bfc94d45824d9723f3181b2f51bf264c7fe6e0d5fc60dbe21598edc7592f3bde4ee6978762bf0c6c245fb60ab4b7d76d78e3283a11526df38e284c77dfe05fc88c368811a74485e8ffebc4d0967478025577ec6dfffc17fb64e17216d77c066be180c9ed37252a1dea83eb89de3f2f937d6ad474aca60281fe8b04ac2849574db68e0123fcaa24954ef1d33e746024a9588487590298560dc6eead42bc907bf87126d9b9dc1a9bd894fb25f7401f81cb4e8dae24e8193a2723d113de7a989af47c11f9b9c1bfb66c226a89ba29c46b82c74cf0db4573d6587dfdde8b4aabdac73d17082a92df9edb6205a6911a960c552b8af68803ec53273d3bb74e140f66fb1effaf1537c37badba962583f8de8ccce20f673209cdd91dc9514631c00d64188593958197b3746894e3ad98ace5136f54a3ece23f5e8fc08a07323b37edfda4dc9963769cf6b19657b6e7d91ef0c8c7ea0e2d9f8de69e9be82723745ff758298adac0fd2dd65bbe6bd57b4d364ad35b0a17d171dbaf2e334c77c3e521739e2ef71e551c32999a69380810fddd3a5db31d88816011ff66121cc1b79566a8f63c8b2dc9dd9488951e26194eeff9078e588c27e475171f6ebfc2cbaa8c14df89daaecec54839eb75659dcedf2d73fa8dd1bebda3b7d5576fc2a45e42d314607e90c8cbf1640a0a61c605f168bf345b83a61a11652f34ee91a42c4127714f73fee641eaf439ef2c82cac64894ab237297600aedd3e31a2efbecc03e026eac60316581f477cfd19b00f8489c08fb2786f286f41794dd705dd622ca1b7bd3126e3e94f0b0212f969d02d9f3b46fb72ae0bba0425851251fc449ceb1a139a76be64efbf7e89b60287bb0f3305a6fe513c91b375b78b2c10eab7d79dd98e5f29e108823fc628c6a6d7d33d16554b08fca873ad2a73f5ebb245999aab6c826bd9334159369e79d564feab3f8fc6bdbbc36623ff98e75fe1b4b18c6eaa4f8a50f329a1cd3a43f762bb50c57f25b67987541a4523478e139e76a2e2cc00ff20af0638ac66c1732bef186294845ec108ec1d2939d0ccd4cb82968e4f2b45f7cfc680e4b3be528881db0ac8aae7c152e66a8d2794508f57e23e82f82414efc5f23801b26a2c641083d710e77b01c4088c832279c75b1593f212da65040174e63283f72632398c97cc33b943776afd4e75a68ba45538d5f575affb5961896be4fb3aefb4ae8e228aa5a17261429bd3913c75173bb0726708d7766449bf053b2ed6bd39f22162cc55aa80cac54f1ccd6d4b5f53a48ba04f5aa206a3ba8f1d79303f9b84435d8ff0a5655220e40f56615f2cd5df83294ad5477fc14820542a9ca5a0465d3c954e15e650a6134205e125d34b69093c2bcabf7b9b46b02fa0d52bdba35e03527b25d294e6fd2073c535917631896f5405b86443bef77a1cf7758d6ea343350971bf8d4da2b7c6ddbfdc1a9479d7804f498c4a5c4564148cbaa457cb4a8660e60b73cc5d1e7684f4784d47ca8eb3daa259cef811b91d0e037cea016de3a7f56ccadb065fb4a9c96c60f1af84eaaedce1d8e8e3f09472d4f5b0af20e3191880f2126dc1c1ffd2228a1c61a850183915822972a4956205e7f7f87c2cb75568823a849495307a702ef20d25c8c881d302f7ddf4a06cac66d56eb6d98b572308879a93f7e7079f142d28a5b6873ac22d23d768d76de2cde61bee6e3fc34efc88ff96c2f03dd3e82ecb82988c7a435377f6954ca37394613439eba1177b0b6c5a58b384261001e04078b43820085eb06409b61bd137fde0a1addad2090918dd0d217579f1f43e01c9c3221719b8095371cbbe38f9418bd6eee650838d03f3d911f850f70c50d4e74b2950b7c20fcfd721cb22367426dabe5c81d1380be238eaf93bda9dadcc52eb4519c48cb1861e95e4766696ea4e47017afed1521e2a347d337a86c07ebd54984812f22870b1622a3a5c0fdcb42e6d3aeabbd5843c42832a4112ca21f7aa4678a4b36dfd87f8570ea3ea826a7a4dc9d4fc475220ced1b15cb2c329149119a5071b699c8e5fe159adb1b072d2a532c96a403febca7e4e2b9ef8da383ae391fcbdfcb4025d70f2e6a1d43c35a7bd64086556f3e6e3a31e7e6b93e65be76799ba17d91133ed53b38a659bec6f5c3b57e350a101e7fee5d9063d046628bc85a769af210fb5a08089b173695f6462979506b6aef8639eaef47fadead8031cc63187ee650dec39800c0855dcf3d95d6a91def1d135fe2576f7371887ba9faac1cea15035aa6bfacab0db875748229f2cd4c8acc858fc35c657b9178b9c42c8d0d5227ee3539976c90eb77278dad4ba46d47041f4b0024225ac922566fb9109abfb97b52e981930137c38b1b20a54314127525bd6f984dd0d6c4ecc9a370eef8b988dad57f64fa9328fbbdf83854596b433eb44ff841858f5fd4b67a5fd00ed283250c1ffecc1649ecfdd366daa1d5d1890a7b7cefe215877f614a11aac3b74ea6fad9d96ea02d4c0a2f950f1074fe6d6b4140ed5b6345dfbdd36e358d313294a96d09abd7c888c40afbcd98e1b51d68714bcc4944ab5dc0a193eb8e0e00c8cd14e8633c422b6fd875c841ac564c7ae92391e739b3a4a551b40789c53819be2170d2b035b6b329b0d1fdbaf175225d190a795865ae3565bb7d980f8210645fb74393b83d3c470075a904000f481d0e20ad6ce9744046e42585ae476ca0c9f2b8189343fddbcf3a4f8244dbafd726d42594d3600f6ec06bb852b2f72cef31be4b7439191d9b342065e62513792826f950481486dd4289429b6e0ae86a05820c99e1ef0144845cfae05c0f6f144603c3ca50992387c38ab1f76120e2cdeba624cae61dc51a9f3010e76d6ab92936a77bbb34c8ffb4f9ab00f4b15badfda8834e050c292b49f398a9a39f9eb75f01f8684b7d0be10dedd576b9e82210a34403d272d97cfc76887d0f3c7d13325fb0e0d4a0b2c99339a6ee5c6f8ddfd467c80df73ad77eff4b67c588d98c32f1d04b4605e55b69dbe12cdffa3d29f9c1f03b8807858e97fe70975a5da25661be5bd8114440015582ad8891984c43d89fe7a55e487a8530bf8d2022d6c062095fa8612bd9d92bf45044c1eb7ec463e436f30e76034244af0c490b073a5b38939d5eed7b0cd961ae0c4fdfd4f4cc12854ebd7fb87f04537eab4c5ff0d39a6165402585e925682beb8075eb36418cd623aeecff0c06e93b03643f24c4e7a664e910a7305d6bad1213725fecf8ae2d3a261f29975ade1983a801ca636dbfa7c986d589f6bf27d19d8eabb5ea0283d7c3f6691c4e8a50bbb3d4489423d2a3c419a35676dff7a2fb55c5f31eee3c08b1fbfb546c2c84a4f853ee03466cdbda25dbaa5c14f4ee2154c01e1142fe8e84e4699da8c2393022f7ec60f8874670aef39702af0b3c8aef046802cfca25e0419795452cc57e7712e10591f000ba796556d5131704bfb45332d5daf35e681a85f30859a91e023fbbdd27e9b259cfde48751e455ca7865594078d0c46a5d12499204943e774cd726614d9d008398e879f79f900459b9853fbaa1a02904867e6c545e069ae70e8f65bada3aeb848fd5db289efac9b89fe98d043042299ee3248508b5635c6ba5ab5e2d10deb8b2f2746c8ce87b12618be0a5bfcd1d628403b338419320df6f92b9543a8a0ef4996112b2b704977aef1e293e3fb0b8507e6898da718fc5b07d56480c559e323ba24c5f52196bd67fbbb711ab2683996fc87244002af3d86c2f80c5db10d5feda5824a8af3686ce7d41f74860e6ce473d0cb1532dd077bf6ec072b144feb9ab6d458a8d4e90fdd6003c5f2c1402f93834b5c634d8047411350adca8ce71c1ee70d4de7ba4ab3983b4e54f3b28fd8ce2e34df167732981445b590efafc1c773e619091023607b26de7e758041458f1edc55ff379a3c227ef4e258a56425151f1dc0352bf971900eb35bcf9f56a97e09f57462cd9de60c0688a0aef1935a2eacf2c9793e23c61ad8 +MD = 50d210d5e691d0d29e01f6a838bc5a6ee45b0dbc54637993e3ab427e + +Len = 88936 +Msg = 772da81230f5bbd9228ce9b1b1db4ae648ae47cc410aa2ae05c1b707744301f487b7dfea334b98a491c89d603d690f4bfced813aa1ebff9a31664faa45a176e8b0347fc8626077ac8ca0bc1105807806edb268e3905fe2378cbb160237dc94253bcc0e1683dd5fd85b3ccd2bd2c98b006326822fd50e526c60e99378119d609470a6163b5f69591045c558166cec521fa8715a873aa25721f3174e729d8be41d96eb1e9fbead6c3c9363e6399b90d54c03ba755185c0f93e8f6ed059a14f27a9f6c2afaa6850a0458e3dfefe275d1b70bb295df67f1241ac7a16a096e690311ed95450c424fbfd117b7c28ccd7fd2c7119e899dff0403651fc36468f34f70b6685c98955bb568c89a547ec0c74151039651cb173a0f2e0165ff64bae522cbc674348e2c5f608549553c7d324c650cfaee7f02d1956cf48e3e97f365a0ad64c0b5af9e47c9bba5d1ecc24647d955372bae68a963bdc7f75a1e4f98ffa229dc438140516e37213b00a5985287fa9c90144ac127440f8ab6f36968cdff8632b2bd8b794006045bc54434212a592ca5882337fb14d9073fb3f8c485eacbb952589d28ccd2b5cda5c51afcff5651fbfa8ff71a88eab931416ec8a419a81ab8036e60edbd91e40fa9cb0384853f08c51627fe56ed315b1a5a57e17cb66e330eb044b74ece061726d2478c5f457cc43482e0b771ba51452ec4ffe1d2cea5cb2a037bfec06097d5cfb9bb13d1c2683aa6cb3aa0ff62e2fdeb3bd7383ad50739965784b5e727cf9646caa648a08eb9d2b849a64954696eebdc096e53196bdb14d036ff6b279625df487f8989300cca02d5a8a41f15405d957db835d0e2f5b9c3642c3c8d061e33273152e55404cf11618b42c4a0c68a27914ce2ce104bf52bebde91cc9a07226ff49def3a379338386535b2886ccc995555d60387cfa90ca9f48c224020bf6544cddaaf08b26feaa79481725fe1ac107f598585033d9e8eac54193807af73394a29941cc142ff68d765eafcbb8df9620e22f7f1b108710daba0e25db394e720f87e46b30477c605505fdedc4be019107a3889d421aed50c3061940db48f6fbec8626efc42af68729ae8d97b5186afae5c00d7a6c59f3efcd2fc8ab28aed9165424c8962fc883b232fa767649cc0019e1c224dd42d682371fbf85306b73dd0b6feb30281a260c289870215226e4ad352430378f6b98806ee23eb7954ca0ec216462c76d2c4e7a328299f4f3f4675798d592ad5990a7d7dd3d32c5a3723ceda25c11f52c0e47b31818fb58205c5ee8881d71ee01590c6dcc59251922864fc7d47e81232f6719a1228420b6a305d0474e2453624f6dce2c835d9e1ada2fe26400f339b73ce0cd2b98eb90744299c55c3211c3710d75f5fa497226309316fbab6de2c11b1c216938c178d1fcc6bd460f7b0c468301188ac168c044c314e3a5846574a2b597d1f8b2e6506db4f61b5948733f6600f4ff9468266e803b263de5d72ed163ef74987f804f9eec069c5b09ef60d0aa50afd21bd7cca5620191ccc58c11208c307d20088a4488d4597e255bec8be79adbf73828f6a18c737b1d394c8c568aa6df780e9ab80d36af14661f59273cadbf0997d9c1adef4c3a12912c82bd453638662e0d3ef2f1d104a11af40a89bb49a043555ef1e4fc0c3f2eb74c7008264cca2c67c3fb2039815c67624a76f84fe4c6effb6fbd8312f50b3855421d5540f6e499ead8d92a2e6d3ece08caa65d41a6b7774fb32f72772f259634b5928ddc5a0f1581f5e0f815be323ed21ba1a1d9b6fd411ad34e9973e115b21c4ed59642a0d208f2c21972399bc01f8ae56faa5f3d20b7237622e0503364f3d5b5f05abaf1b6da06e68b81e12d71d9f6d219621b62a63f3445b430544e99c02691eac08c7542f3850a3e0b549cccd4df88a6b0554e194313e80b6fc95a3c83d88bccafff53febc37d53bf9db0f5a790caf1e7b5428002a89062f87f57ed6a3b34a9d115cb4729be4f08934beaea12e47f08aad6119e45c5e47295e21e3ee887f7765cdebbf27f9530230a345a22b5c56f3f12dc4494c415a5500de94b10c9a04b92dcbf49da43f4db4392db813806c025f5be3c5dfc04145d5bcee980fb8410ab9fcf3bf7571d39aaeabbc5e2826c413dcd0b7ac04c8c4e672667573257be5581eda2d9470171f02978e37800aa7ce51145991c0dfed3206d2055d6e1cdceeb791cf61bab61d894d17eb8566e18bf184acfd594a99b6f36d9da18dd11c64c4efbae4777a6e0b7b42d8c99058d45894734fc5f79259ac6fe37c43ede44c99cfc84020571cc06a5caa7f303f9e0b9821e7a3b753e048550e3016f165efd505770acc8ce9e8d5c0944db7287a7fafd2ffa850de567c8e3c391b15b5dd39df30257c052e1625d5988bf326ba2944e88f967eff3fe6ad52e6566e1e973d0b91a13fe79410c41de877a86474ed3536dd564e3158e4ecbdbcddcfefdc9e6dad13e02f13203adc1634e755674aca849ab7af8f8802d451f2f5a80a67f4d255678e755bc852b24759e46ffac65057ffbb9d22c14ca617fb9525cf719d113bde812ae92dced282eb2e1e98fd472d9e8ee0b8384c45ebb6d4ed73da6a5bd9e2ee420ec20bec47b2b2dc0ae8c7b389a71a503078983b7ab8c34408525f67f4ce6ef3638b5fec594883add2e9c0d10e7889542c6b0df6fa25afe00cbfb78a0b0747dc50c99094b14e45e79b23506b621bc534d497143d1405820aa6a7da8cc6965f45fe0606adf7cbe2d3901de0472d98b438518613da7061230afe943035cc82a07694c929fed3c841b9d65fd62f18f540a8cbc07493b5407a283d0d214dc6d3f1b63b9b6151eb4c4ae198719ce8ca3c50cb69cb9d318bab6fac8b9b159b5b92394f1b03166cea5fe592fcdc983dec75cbea5431f87c9ca9eadd0fc474e834c662875b89b0187609fa162a2734f526a69b4db47aeb3b8d42d305f213a6fcf87753a724b5971d375371b34bdad7d71fd9a73cb02ce038097e126a5b0d139f50adf4f69d103343d74432b2877de8ad8015d7ff70d13e39b6668f54733c2399e4712dbeef21ed52fbe5265b0599d13df06313dd1df06d073c01330d62273fb15bcae64541702b114d3c33f5eeb5f95018ca4320df12d56a4458e4dc4f56cdb15ec107d5bc865649755442ca695ac8ada0524f0eddbede2976718b086252375f945d78b487ead7c21b323c209f0fa61e2f031ff0407cf00e795611dac5a2e383a6a6212acc241444e6e00740b85cfb696de69c0d2fd473dff60f5c9a9dce3be73ba4eb81b0bd77977e658d72dbc92f570402acafd34fcf6594a25690155fa552fc60bcff5d3c67828cc9b4fd30dfaab0995f381c54746c68fc19e60352dc8b8b90e17eeefb294ccfb814662be025d53cd706299dd9ccb2b0d57bf33d7fcd545ba12f1794b10d8d44a94f8a42132416c263fe657a8ade0a04c8d16784c2ba688ad453713aa86f94aa0882088bf062d60ce84fd6fb9032da2d7d222921432c2fe0d354722708d7c8c87cb3c84ea0697ee00c02636813508bf49b76215c2bab1125463a04a5f8cd9168aeecb1d34bc17407771ef3083ac1861fcbd6377ca2bd7620d40e0efaa0da57504534ad6117f02249d2ab70242e0c3276b44853cbcfecc69a26d7776f29858249ea94a4412f80ee6dc5b2c10417b9f6c3ffd75d8fdbbf695be49d294cbb577a1b45127cbcb9f9423df739cef01c503ccc53883d11eebec72bb5680bd97dd7a88efdb91e18dee1857f114b7f30655a6b5a5965db992e7248d24141055e988d726abb8e729dc5c21ffcbaedbc0b1b5fea35b8751f6ec6625517312fff2234014176269b60959723787c9b296dcb66e5232519c0f2dadc1754c32d3be16e77bc7e7be7e7d1467b8df8c75c067ab66d767df2244f3a239917af9edc6c938a8c458f41a57aabf99a8707a4a48dcb15599960638029e19224eccc70e7cafebe9924de90095dd8f71b990ddc1bc4482f51d73442d656cd6fa61d1501f55d0852c7e2d130bb973e85274b72376ab5da4e7eb66255cddfe8024633f019af2e9a8d3d06d2e86230c7eee6269e7d396867b808c050650ecb18922db5c77fbd449db824184882a6315a787fb1f9762fe3d8b6167d673940224769822b01fcc6a7f71ba3a09bc431a1de6d1b74eceaf5301690d0740f9b0ced5ccd6e1e0658726092fee3273277a8883d13e1f8dda03357088e5f2db1511a333f0719153e5b6b7654a90b347763b6ee5eb3fac43561905e95f8eb30b32411fcd85faa9811cc56f127634450d14f01dc29948d615df5b44fa7159b067fdc9a500f1c492fe775dedaf276b602a80431598600c355bb244831252e98367b415c38cc882063281ca9389d2888d2654bef6e5d3dc42ab9b6f40df68b0a48111a00bbf7e954bb3c8a5f130fc2e3486eeae3229694b767be725fea047418c4a8312de2788810c08b87a973328beeed2ca9b47d194dc495312132d03631ea33a74c8cb437ad7af87edb2f61edcdd24807520a87ceb0153b7c8b14c87409a91d7834c4391ca0baed7b4d98e428ceb6e268ab8f499e05cfe10678aed8a6467d0882b17e7910a8f927eba68c05cbd8c341b57ee9ca6f931d1037b0a80bb42e8d7e2d8b627df90e5f2d37aeb5cbbf3120ef5891c0122ba3254e77faa966870a0206e189174cc11b1386c52db83eea21f774b7acbd2ab87d0f262e2059f305210329067446ee4e143ebdffeb406635f26d563c9987190069041dc4e861b917bdb96d0414966c8a4407574caff34c88eaac1f4d1fc7e7e9af2cbda11b69c0a6244c5d4431b0cd5bf297de134379f7cc53dc565405259d5d96ae8d2e811811989fe37e2c933b19ab6515dabe6d7b6fe7732484b81448424367b215d1e117b3d776a65a2501e05861e6aad1b4f6a1bdc393ad30e114d9de826b62def3040dae49f1be789845479365bd7e4d5da692e847fa9fe237cd7f7a04e7e46ffdb3a30bd8585360eb2517d29f32b8d52144f7f85af221232206e31cb026605055b481d16bf28c9b886af91bf78d81f2689a77f6e6c15b790a89adcf6e6fff0a65cf4e08e90892b0d5dc94785515002a9a6ebbe9d2b0766f571c84982609e82494ceb3b83ce28d273c4291f0a1135e081f896ad906079a8a71881081c03d4526497757ea4bc8a4892365978bc3cfc2115fb32dce690eee54c094fa9125533b99ee94e3a6fe02ff5cf40e4f52a39155cfc3b3acd1e50d9b54ad0aead03b93f404eaebfef23dd7c72b1603604c29a13ec9b1538ee9614bc8129eb08747eb4498efa54551d8f091247bf10d74823e46a68792597c1fc6119e17fc507afd1eb04ee28769835fff763dd6edf330fac8cab592cf8e1d7afaa745ea30b06afaba1d3f66f8213d8f52cf3bc3727f3ebeb0739271ceba1a02e655e413a0990047a8d4930260332771d2e345cbe87746d6df8a66acf9a51abf7263a41bb6d2e4ebd11d713f2768e80c65fc8474b7a4ef483c5658ccb716c6ba8718ac89d925bdee1c3f01a4b5882969f460204947cee21eae2191586fd7c6fa0bbd25e57058345970846db9725b918e685840cf01bcc7601f3139d88baec187e89a36b8e534f033b732da06c7a8c985a72c0c904b38451476d077d472645f6a04f708889f819a84d89272141a3978569b24ad138e0804449b4473d58cc149aa491cc2e00607d955bbec5d6ad4d447072a884be033f5adf775d55662418c274f9d508d45828d56ad4888c3905e42dea23e9f0d80a0c7e836eecd4804f98fa062eadd91417bddb89467adcb0f1e4be42ebeb21c7a3f465c08ed7270421c905de91709f55b59bda81200a59d6e7eb602b49209a056773ab2755b0ef7a4125806ef0c1de21c84f6ce30fbb66235e54ddf3ba2ecc09daf6a91851ee704b243af4279b1607f0a6550d1f5402942edbbd624cbd6a3a4d6519fa2411f45c0f5185cb991ee1cf5af62925a6ab746641d671a786c16757589c4a18db0467253f4f729143eab976b93e48610954954f14d53e184274aac5b3e7038f9da7cb5e43749dcfb89d01b0a3c54f29c80dc9d1005e6f3ef035a8e7d7ebd2c8ec8a7559b47773e157845eef934189fa5335967eace881762092e6404d01344f581b09ba1abe7170b16f25861039a55d4b4a9fba72fa1178540ae7517bdda49d60d80cf1eeb032f8468bfa36a2f40dbd10db2a16eb199b9ffb0c30bdfcc7a04d875fe393990324d297895153b4274fb43465ea067dad9c67961536c84855b3aa4c011201b21db3ba24d5af8fdc49d7bd2659442bb35c7059a5c47e12d70e5b6e2f6a3ceec2668bf96eff892d73b222427743ccd9247cc400ba888b20216813f39209b89d32840a2ae67552cf2316dbeea7a3d8a139a513d734dfd272cfe959c5145e09af8aecbab91bc5b0d762de511c38081c167b5bcc57b548d88d3b08b96d36d5c49844071a4e7f6f07f8ab8f2e4588defbab52076a0cbc4221c1eb5c9f567a0f6dd9f669a535a1efec85659fc0154a96fbc2664e8960aa5a32c3694b981b4e796a070a9ae82903a6c3103986b2e5ddce910e208796fe0fff70043d5c101634924d8209015f731552202b9fda8341b2f45ff109490f2f7db08e06c014b3f1bcf89ced6a4377be67408839f1119db38a96bcfd99097e9f440bd14d99fbe018580abcabb6b7dd557a106fcde5b27ea595344c86485f51a8237fee3b337821049647313f76f4dcf2be304b49d633a2b2833b634dafb124d47c7b3972251ff340e83c9f3b138102f0a43eaf405b2bb644d54aa596278564cebf8c4764d769d347ce696b0124c2fbe9ec7a0043ecf105e70bb0981258629de17d21ac95d2dc4da3c94c093413510448c790e2c6f42a3e13872b9f24aacf3ca735e9bd779ffdcecf69531e4667b1d897f611db4c194dbb54d80a4f4fa731cd9a6a330eaca734d3351f2cfebaba4bd541d86b3e35b4c1fa158edb0d15d610cd359a9c24878117f77f6b284f0363a576e0ef0b90265f2d96e01c1c7cf9a002b803379373aaa61da808ddd373a2fc555a0fba71859090f70e4ef05d038dad8e2a7dd1a790888ecc715bd7cd012bfcb1eb08cb4b6306d2a4ccbcbc1b352446f9712fe946efa3b39ac002e9536c00ed61a66681e7dcfb9cbd5eb3cfb5866014fb3873ff00058ebd0f2078933538c436db18c38ed547d167a730cebbda7bb38009fcf48351669bf3a02f3765b0ebd86194be8a3292284acc08ef57f0e889b1208c2b2c06b9776e0fe428b9c174f9d0160504452dbd12aa2248e6fa1f7e34cb7f183f74f9b6dc776a41c99a46efe72d9cd2866ec0b48b8202fdb42f97ea0174e434c689ecc7fa4a8b5f7e33569048539e53b161abf6f755067dd362eaea744ff8484cb5506b5559eb83b33f80e471e4732f21e84012eab5856fc12e98ce01bf43e92e91c51f72181354f4f9567b0852b3bb345d1d86da06084a1a0d12233e452f8e08a99b62d5279b49dffb37c27010e88e752aa4d149e917832a68f7789e6443bd575773c3f2eadbe8c0dfa5395db18a2f70eb6660beb12ba19edca93c86af08ed9745cec15fe46da843f14f6e05c701049419e2d3acf0cd2bc3d2b7fdab87e79544df1cc98096b91ed5fa66df2c93f5a47b209aa8a94a749855e5a42a5181784aec9dde7ae99456a30335bbeb16dac09582ba0e4e1800aa5db17fee413d2e33850b0c84240f4fcedb384d8f3078fe0a4e3720be329dd5e712531bf6e0b2d091ca0ca5ce73763b7a2df19c814db7602b35251f1af48f1ca32cd7547e77472b1b907df3edd792e9e121cbcd127146b3bbe0c8dfa51280577723aa83b5738ea0595eeb6192cf09ddac4d3339b369cb6b34e79f1cfd0af608db8d49546c63eda2a3abb1893dd82f893406a47cf485a9f91ea01441834c74c338d03030e3d6e8d4b30d8cd54f61986f00f4bc01566366efe1b0c4d7c85570f91782fb93bc3b04a8efdab9d05829c901ab8dc661497186a216802d5a4cc46f2d001c0807661ec581b2b9e504e86f35e39c3870175e3e8dc23594ba438117e3d18b01e20671e0a001b4217add60c063874b9b358df528e0c2b764f82df5ae638900eb161b502f28ab6c8807d461bbd66f321c734fbedf3426248773741b1662b61a2e20b08158d3e1347408845bc002fdf832d5d71bbfdc6ef56298a071de65db2f417e50a60c1635b46bf967cf6b7dd60674c9be8c495dffb28ce45d9a74e17ac8db9b861ea7743b54e656f93d1cab69d568cb60911a4d7ae47cf2e5e5586a177f4314cb5bb98244ae69ada31552103bfd855757ba910f42f3a920e3f3177433ab1e669afdc0a4f4296c6a1fe8ba40bed730fa1e695c37fa78981ac244307451e4d3fd7f654b70cc4e6518aa47a3c1850b12202f4dba3bf3dbd03d2b3921fee4a4fa65d332b85a3f85fa35ec82acf701019f7604b859afe1a5d7f469726a887e63f82c50e6a5e5b078824e415a4465c5433f483939a8f8265f15fd1760788581ca63ad52e18297d19e93de630ef8a24448882337523699547020a3bf93ea9a9120b38563c3dce51550b542ac4138210099f0a379827127de817e84cc7d1f1c2f0f6e30fdfe2341fe475d37a77191568cb00f258a6ae71826fb861cc89cb4aeadfefa3cac00d452feeaf209cf1082d73b134a35e44c16eee056ddd82e6319b6b077fe04d87c9e8c89a42a558dbe8b17ae4c286111c66f107d1bfc437870dcc8b8f2d0261db1b053410b5c878ddc288c58c320238d6a7e217fc357eb31366c4939f8271ce640d85b97990f3c29e9d9c9ccf0d7e9d1a8c2964ad5873be33456dcb6105965ccba64ea0fd5c8d00c781d447d8da64068e1caf370dae0c208fb1ae7afb3ed7d3b8ee4931c3a0fef8ff76180dcd211b3cdd5f5ad744c1afa0ceb26fe995b59dfad2ee5eb3f4e4ad73ef855038d76b0b07ad5d138e7919c5089850986158f3519ac2ad7670b7b104383fb5640e1d3e9c2ea71fc3a2d43cb71e979412286b7f597b2f3377ae358d6a11960f3dd8c825367b72ac505c7eb4ebab7085c386f7e11f65c2894bb6950347c49c99c1ddffa541b4b60ca4049f09cb76ce2c94c524a2092023b6d8d00098041afa5dd967eb4825a21d48a5e25ec1be49578f6d2c19498173f9c208439ed607db58636ebcb3954a0d4d673d3de4662beab3b83702ff5eee28edb6c1599644b9cf5db16625811419bdee71535f597f7c228bafd890fd69b805a699ed58116a82bdb251abea7a4ef879a96fce8ee49518b9877a3a1e3cf346d3cd73738936d1cb6fff4b2353c8ca500a26689813ad2f67774e2343f3e4830259094d3b342e00faabeba5b8a893108a390c649836ddd5d12489b2dd591ca25361032e2da1207f793a1e69513002a90ccc036bb63e9c10be87df2def960cd7a1b1621e311735d7aee4419fd5343e1c408bb586da7511669669f99e61f3ddaa5513cf252fe0958f0370fc4d2efc6ff18d40c7bcec216561c1927e0c1bb8b7a3d54cf24c0f42672fdea8f67d43d0bbb15ab1e416d48bbf89a7ca1780042dc14b8a27729ab986d440a952d836fcf84de311a7b29a7afb4865b1d96c01069a2429dc6bf81815f30349cb37498141bb4b0f19ead952c7b8287d45862497084607c634df2bcc0cd31cd2ac1ff265fa63debeda420246a10c8659cd9ae84af37a93a8f84db4c0846c4963b4d27aea0f362d76bc77d57df23d8a82afde5f23ad7ef059927b3afc6608b0854b178b18687d61c22750f9ffa0945e7f551732291f9a4561683166869bed79bfd9b7caf8ee7fa127839717d4945927d8251008653116ba46e439e0680a63cd9ac67be1918786162f3812d605b7d4101689908addcc3979926c5a4faa9ab4d49d7a2878eb1cd8e761ae8adf98f04d3ec0e85e609bd64ca7cc6a5b5b523526b5505e89360f96be3d454dc6d998260bdc5ea94331a739976f7d4505ad6ac203993bd865c404db8040647e906d0a435710783607a507db62f72c6520edf92891a7e75183c9d2d5661745a7ae43f82e790297f67265c5a6f567613274c308511908db32acee826ab8eb7132e90269cfb9dc42514b19e98097e8a514c8d59e24e2e39fe1a8db1b84bde36e850952660e5ec302af5c69795392a27e73e5cec3893661bcc83f37a50abe28c60ad6ddf6d3b2e15e786bfb7f062cbc77b794547f685baab94d39ab29e403e1002718482106fb5ede14417a0281ae5e15489b0fdba99ae51eda5ddeadfad437a546963eef8f82620aeca68c0bac60b2e28ec2a9de353b3a74d674793c3479523cce196569568f146b6662d9a16f89dd65f2d3c791f286d241a94623db7a39594d27696596446a9c88eb3c0accb2720a26da9414fac9c3d510ba9b8594b45e7561b84ee77f3f5a23e9e4fdc7945d645faeafcf3523a2396b66733b466eca2ecdffeb90932a30a8d117b76db70258a50484da4ad5146631bacd3bee0f72a4f28aaf27f610a1009dcd99ce54831d8b7d2230c1ce9ad4fbf3edcc7a7b88a62af1d3f9d54907ec957f40f78f7ad3eede36e13bce222c6a4bc72aec99ab58144575d1665b511f11d99651ba64a74d7b3a17682c681034e13df599b3fe4628c4dbc4ab7d22d6011ab32c2969b4a29cce8567e08bf65e5a3eb8c464ab12149fbcd5278ac692a0540e0a87ef8ce63466efa96f70e1e2d5458ba67eb05c3ddc66061ce696ca1376c1f6c8f0ccac642554e48c7741b4933d9ed0ee69a84de86824aa9749f6100e22f0d9d4afe850953d0db718c67b8f715e0c1378cd7106797e82ae2d98d321e96a88bf160c6a00e1433a7033a645f7e4ff385e2cf4360f5ae7281cc81a54830e1732b1764f7a44b0018215c75dc77654eac9b8f2251df1f16bbdfb4f18a2c0e3f195b5dcbf42a56a3d8eb0bb342a9329e5682ab2a74e33a8d1ea54a9dae460d2bf5ad630a5e7aa77c00548f77396d7cbb9bdba54c3f25de6e3562ec0a843e9424b28195a4994dc405290e6636232c8a32e6f72c0c131f71267a9917bcae7e59b5ba88842f36fc12bbad791e74927f0170b275adee9328a96268d86c287f7db44b8812ad1eba0e3a1c281516b6f9cd7901a8c7997821e9dd9e8a8137d299c54a72a5c07ed7850ca0b30372ed71dba03772147d7d1d61cb94374a24394f6fdd72b78e1287fe4a7fccfcda031139ba9fe32e9ff7c752b55653c94241bf03743ec386cb7947075cc0357616561073190502b3a5d716ccaf1292c0ed6a57733951b36cc8753a674e86709b42dc79c27977fc8db09bd9cfb178d7bab5fe812341ced8d61f86e0b2922ae4f8da169b8c4e8157396aa68ef06ef1a913368ecaa80ffe9a6f3b3ec86dba36290b668514451a89a9331e87b4c32a257d76e98ba25606798e74a5fd5fed3920a33f52b87291602948f756dfd9ac858cdb32498596d1c7c80b92da5325d5a182fa21392114d5b1c8dd12adef6c31038028e1c0fd168fc652b85652d0a8ab65d5844d844f99a681e0cc018e66eae526b80d11fa62b00484b21b1bb9e656d2f880d810bea47f784319ac4062b6e43d619cfe2f5056e1c4755e8a7f4a14bee0fc2d7c1762b014bf97dbe45be55fd6ae368752b66d3a2a342ac0acddbddc5f59c323c6cdfb031800d2900ab060d240bc383fc123ab8cf7f81770f8d37fbda6a2001c6ea0f21de7d095de85fa7fbea0ebc90ec01385efe974cdf7d4ecfa29335e156fda4ce25112a3543ffc769c6575b17b8cb5f296a37d3eb0cde776c7bf63e285a6800e364d16fd800cc4c131673db1c222394d587801ba525b972d62d0e6e3c348f67188726343bbfd7566f95477412f77b08045be357c45397a6d561e0ab670dfa4233361861a7a6a94e43e9da0f435e5c237e8e676f8ebdff7b31bf76deef0d32f7fd18b0de62ddc99a58ba3495f5804d4d0ac9144b4c8c7959b1eed7f01d5bbef03ed6f593b48dbfa476b15eec7184d6ee72b4f3d445e78da81f970bc739202693be17f069e7de14d364755ffeff937f6e7cf60bf0c3f7c4d041611b4d8b83f34a4484a74642f74f8eecaf3fb1e6d5d135f13765880ce3a539dff50e685aadac7c9ac524140c01f83fd40707ef707153ab9821078569d4b94cc3faec02f0c6d99086816fb98e23984de524be9fe3908e383b5afbcd22f2866fb419bd0293f502f0d1608e1f1086b620e7af6ca988590845a08a494a7f64960b79fa8a508c62b003430c8b2cd951da20a24f19f4a7f54b38905af7e2c8537189db445ad423366a31a32a6dca33ad8cb5deadce6a888bdf7bd3710f7f44e69d4fa2a036769f99b9e2bb653de064c25547627193f272444a74317998083c46a4c796b5251e4ab2247e51620255b5b7bc3ef7426e74af48168d72179b65f89a0e587e2c2fb46aaa336d2eccc4136eb54a0265c869d985beca2d5df51f7ec00b616924ac5c2048a86e181a498c01d7e385fb74ac8b073dceefbbbcbb2c3bdcc127644edeb54a2cd55ee5dc816107386af791eb96dce71ea20ca15511ca8493e3e7b0c569411a5d598a3d3e1e4b0dd871282d942d6561725fa946f09d02412f9a2ab551f70979255b7a8906c552fb00219f35351a2d5e7f304f12570adb5af60d77dbb92d134dca03b72ffd207fb9f8a2e41397053cc48f3b846d51fe5eb73165568ac7b56980957ac899ebd7d930081b7f2d82949b7de8a8d3bfa521924027c94f2a413713f8cee8352d9892684678b4f9edbe72516fd2a0c1701c1d7fde2262eb23f05a179fbd758755cbf835e48f97d8ba12456684974bd8e87e972d776857b1dd9cc77f5baa4745784eb147f396e9a7fb47b6e3a27ed09f90933aa5f442d12ac10d265316dc89f7fde766a759d5d5eb1a256ccfb3ce579ece22abee3ef8f8dc350a1e99b79c61264e5fbf5b0094802e7e7410329ed00a5e0bf595103bd2f351a25d575b2632f759d27d636dce1b15f78ffc49154bcc0f66b0d29e14d518eb1171cc7aa04be67418f10bfbe4adb1bacfb585c07fa2098e3e23826e01f31107a208202f710eff00eb13cf2ec984a0973d58d61c788bd1b06fcecdaedf7d06708ed1201dd557c7c25ba093a5233a2ed6c9e0b80608ee6a9c80187a06b65a3f4d5d3296edd40e84e3ef001d07fab9a49cfbb5f32638b31d7bf968531d8f7404c795954846761b7f8a309c35fd57e84a145c3f4f230fc2327563281e9c71b29d06c06100d1c46600e0a4daa52f41af676373e794a69503f1b145bfa42a65fc513165fe8436c5d74f0dd5233444c0f644b4c8138956d35fa2582795ad70723a6a710dd49c1c8157b3384be0a9e5dca52a2de42cf7dcd0bc8c9191120116a0542eed3f4b122b01cc768a8c77cdb99ea55ff64e9ba6df9504f8850c9e67c3f733e6ce83cbad0c4c20de2a225268690ddc2b388ec75e08281d2e5c1fa1a81f80bdd93b61bc34676a39344095d7429c3133d81b2d17e7ff93f1763d53838cd342db515d628670e36401bff66b7022fb1392adc6b2f5086bde6618502facdb874576945b0d912929415ec9722e84d12dbae2f162a5c88bf40f665bbf3b845de29274eb5eeb4526e1093a98dc657a18db2e09ed168ff7364330d889afff74da8d30bf9e8e820b31b2c57c755d99bcbdad78f1e90bf7ecd20048a3e84a04e21930273df5125d4910447c0ca81d51b1884a9f802c68650e26d360b1c1b8d137e37280d8381301688c4036d2794315c1435baba0005661c5fc627fe95b21eedc00fb4276aeb8f8d16d4efbb530f76d54b487a538abfd74791a58ad3300ace43738747501a02ac9eb7b15d4a01463e2d2a577943076842592495bf277f6813ab2538522605690fc1d7e3ec8786eacfba4dcd38070a914fd785113579d86c978b418d5507b181319d13d70e02686fd4130214272df8cd48394fa2ae38ef8ac27a4500d073a2edba96e81542392a47c3bdf3e6c706767ed3f4c0c459f309451ceecc3d44f85df0f345c129299a410517119f9fa85ef8186b9094e0f916ca2e1f5f339d3314475d84002b8d14a4511a56b471c94b66023c87a34892dc32b698324217ab2b45f365d57ca3bb93f5bf1a0b2cf6de10da095db0933854a3d533260e4de4d18e1be6bc7001b62f37fcff669cd1bb58a91981fe6ee700a0c05cd459fbc927cadbe4a5b3dc45df627128a69294491bb364a300911b251e01b2582ea6a35a5cd1a56e950e829f9c0fc01739207a09b498e41519a86dc40ce20a55969e6d5800907ae8490efb955851b5371b82c67a0253a7de11b6af4a49ec38b39093d2789f81bd004647bfcda102c106e24bf240818e106c9d4e882e516abe10c1397b02961ffc34f14b479f028d640511fe95c3aea2be5f20d250f6bff81afb9cf1bfac80d5b8f4fe8c1b80094c1ec02efd299a063c221430e4c229d20ecfb2885f28ccfc5d63dea28cb41701d961c68dca162a14b4bc2a31e8344e54395cf417d43eea44f18d30a1bf99daa8bfdd66d307f40a56971d1fc87f2fcaa2e2332ecfe37a9b173ca5c960a745314a69d24f83193ba1486d955358fc3d255aa3f2d1152f6445dfb94dd763d63eb18351f0df2290658576a2e56367f1b4e4c7f91c698bfa7470fad1d6092fcefed1d022a9a415effa2d4dd16dde79f25f9f875c007698e733a31530eecd28f40e28bd367d1ce19a721f4a739f03036065ac15475f86c0781a62ab30e8a1e3d7d52c9717ebc81a1255c1f8f419af98ee9fa10e357a08a71fa136296c6415e50cfc341a416634240a2dbbe5fd3e02aedf45f4beb0f07a916050741c3dd197a0e5dbf5a33d7ccfa3c462737dd9accab9c4f13dc344435b23ccb0c2f04fc1a5ac050cd7ce86b018fde38c7f4d23b6564e3239e29869f338e2c73a9941fcb4de6adcf760f89770aeb6ea1435b0561b33d0998869ca9c808232e2667d8ddf1b9071f03407bdfa6edf434a824d640b2bf1f58d5559b6466bc5b890ccc63061766a35c13b529b29db4947776f1cc49d690f0160392908121581d874c629d62e45da3ad285d7fca0767b2813232a5e9762e9a8c49c6e2c6a3e2506e0fb1efb801a5f05a6abfe6ee8a0c36980570c8e83aa20302d078f9fc9165de877c40bfd2154670ab0063c7e8cead070517319f0ec9f315bfbf303deb96e6ae1abc977676c9490de813d1887e7c510f108f009123cc29b60d3f77165a586fa86ff63e7d6dc5b5ae58ca9293793c013500966206eeea4dd03278d3ec127f07b4cd53be3a7fb0923b444e2d4ea0b5c4611f53e16638cc664a7791cf27dcb4b7ba7efb9d177333e99bf4c62a23bd90a27bb3ef041ac9197c0c24b3f02f7e9f86a2c815667b13f5c1b8b05b12799674a36c05915388697a98fe8105c06cc0e77c54f4c99ece259f2279c0356bb7f50ad01a5d625719e097c008d6b0c6476c34a1b94941cf7772d814c66b7bc047a0fa306e038a9735f517ff126adb8a264830feb711a280e0c249a087fb5696905febcb503e309c4572a35a0486af95721e819a3792173a70dd99cda4b6ed77fafc86aaa9577cecaf1de2dbc672546e94b4cf7d2216c5848f8a71a406e569eaed3d72d45f969711ddbe7d894076f19df2d2c3b05ee3d7e6a593792b93cff178d1ec57515c43a993351f1b6c5bdaaeabf642043ad54173e81abe586c34beaea70ecfdf2a86a6d9f82107658dfde5b41f07cb3b236d7ac21357d4b76fd2f8c7020cafb066c70750ca083d02f30fe02b818c34107410d5ebeec29c3d3a53c6650e3453 +MD = fc5ac1619748c2e8885e886f79eb7c6bbf4e29bc944863f41380dcce + +Len = 89728 +Msg = cb1a885a055272292f4e4f5c7714613dcc6aa3ed9d8eacb4e427d596647c9e272ee44ea06a7dda31542108998596d4f5740513d53cae5695a0d911eb4c10fdbc5d8bba3424ecb915272d594f69d650d2ec734da07345dc268c3889ccce1548cb60f9143ebb06d77db0588aa6ac3a9d7c3b9a9975cbbb040eb32a856273f348fb3d14a4e8b532fb0ff68be2c5d52c829c69643e7ccb7897f61a984cd4c212c5f5fec6b1589cdaef7601afaad56c13c9da7fb886dffbe45c85cb6b274b44db8760abf685b6f7657958d9aa2bfdfa5738dd847db7c3e3681d64cd895eef7fb455e54a8c662b4f3b625e8766aa66065f984e809d1a520c6aa03a28dc39e7fd06f82ce56f9ddf2bc4712f12c972371895b0d47bfff7b4fd54aeb0e44bff5c463a39dc838972f91367707482bdca99b8604a187e8b96113e8c0f6e0abdfa75e0b6de9d2dc12ca18f8f25d4df29f9b46f282cc190293e90587c8b1ba21c705b55e4af19eaff150128a15af832f448afc4561f78bac13959d28aea5fb24faa352d2b76f5c22b733e6506d5878308ffb34050ebe5033bcd953420f3e4443ef02ceef2f9dcbd2e8f83cf265f2ad84c66e7697f58af737f436c07a56f4f5fd18a6822a30174e4eeb1f6ec69bf893ba8c474ca4b2e7f1276e305d181274b0cf0bf1050a556653e5421bf4738bf4bb3046381e81d34fce906f4891d1be07e5283d84d0160c058d348260765f92518484889374d5b33cfff18c01f70dd659039721d46bc3c07f5acb309f6d016ba9a035d7fbe806ff49f5c958df0542e7d2ac9a5d62409a1f2e3d07b13b30ff54676eb298d3d09bf3c150963a4245076eff40b044b0e70f74bcb478a8967aa0091570995fadc71b5d6d90d6c4de2ed1e84950678c42d7aa6d8541ac6b639299d62e3638910c53eb789927096cf52b18c04b6c2e788a8ae1662275019e152153682c204ee151dfb2f1ce83bcb749d262937fe483be0a895afb0ebf16a51d9f632ba9df1aa520f2d84588575f282ebd45de4169f5a1455b5da8c4906a04ff752f9d01c33a70fc05e1e050e26f342634291d5a5cf2e6cd699fdbce996a523d4b3f38ce6d3cb945b1565eb2e56b6fc2ef82bd054e19d2f54c6820972a9601597a088b8a4d9002806dbc1d18b0e22f8737e959ecbdc91a7f6c6cf3b8d47b96d69a2201afd4b2d14e9379a80cd55217d5b5d3507b1c8f11ae51f4e1ae17998727140237c9a333aa12eb158c19d349bd40e1c75d2aeaea5d1485c656d1746e56dd802f9a422980e14fad1635aa3b27646b343bcc96c95941448027efed6b788a6c5700a5a3e8393b87820231386d79b19735a71b29085a82b0d9b0093c7d36a656113be6896fbb0d4cd2501b6eeabf29575eafe56c586c85dbeaf53f591a271f2d3727e95d1084daf2468630985376304e27aca7db1a1dcf384c4dfecdd2c86944415b0a898b25392a372b2d6f082d7ace1933deefcddcd3586640b40537a9295dc85be6a9202a8c572ca57e3da9434d79bbcbf734f43816bed1641b89a937b3bc2490ea368ff3590baf8b8f8e97664cb377db8d252d9e1dde063e91d5b7f2bcf1fe90a1ac1b2e23ba3853fdfc52f4dd0de5e90d4aca9d5d388d169373d4788981aee18994621980d54f8535f17c7d930b8e8af4105bb46940cea2acee9f27ce0dcdfa2e69f563d4ff6d95b3f8747ef31eca27ee107151a69953694aa0688eeed8d440fca7359ba4ab0b1c148bcb6761da315637c58c13b9a4b3c10923d12c50953a6c70d6a30f843ab07ec425f1c583a04c7c7d9a0c78f6f558404503696eb7a598b32772de5de850e6344f517827cd1384213c1882d002fdc96d9aa981f4788c57eb8d064805357024d31288defca29660eadfcb7fd752407fbf8690cb2c17dc004c1dfb7074100af4e1ba5696b2a8cb7b1ff52d73fd594ff3ac7553959419f71a7b56dcc848fc93ced6a3252fe844053b56f8b8df90ac8ebdbb035c81baf3801eefc424efe25fad2b38698f0b1c08e61a2676e8335fb08f4661ad26001f38e9761fe26e37eebdb9827d89eec8bc6be09fe4ec461fa909c42646df5aa11f6e95c8923e1330bc9b3b7d1c60eee947e1875538c55ce51b1cbfc5d10644d559e9378edd43ae7ada7cc5639b9af9dd5d1e4ca2889e9734046de4bd76de8f2d5d4d3121677fba76c6d6c9ee81a48a255a5693306ac48f8d2371d565ceb48419881f0528a76ea1a5103dcb7654fa2a41de4f0d6745f39040c6cd04673f24ee1a68b3361d337d0e9635164c838c2854c3374c1dbfa0a863ff8ce3f42a5eac07b07dce467792474bcab3f4bf9ead9b842a13f246b2013f5539d43b273783b67b6c45a4b8b02a3a0392fb6db7402fe052d6f2b61ae6fe34fe503b47000764e0b3be3efaff6f81e1a0bf99c5a5e089832b6a322bfcb6ee25ba0330ac212278974b16f825ad0e2fcabd811db11e2840f0884470b87eaa678e329342bf0d1125569c16dfa924049a51b497d594825ffca4f4062cd02359d0ead2b0e014264bf1bb313e741a06eb4813205470047520133cf91fd5275d2dd0a834cca73fff4b6411a4ee43ecc83abf8b8b577b6558f10b14f201f812be9eed62b346f6871a88031661b6dd95da7b67274001365bb04b6ac9994d0426ba356d86d8c05cadea9a4515f2189fa9d015e572f8f25f4c2db7a8c7396187d7c279f7a13fc95808f1eaa0bcd094089d2ba2a0fb109b44baf39e4baa6ce001aa79e5023e32b2572cc301bc6777a9a6e45f9a302c217c952cd487d9cfae38f023430f23aa7c2c088dd077de9261da0913ee74f982a616bf16330cc9b367ece1b6b040c2925686baa09ca5bdea29a59db04acb83ab08ea210b8195a202446c34e9343265726c630c099a23a0cb398ce32e16f664e1e467697152aad918ae47884f614c92c718416b2d5b6a4db21bf05801b58e03e3a33f06ec28b4f5731fff5a3daa07b10d0492568052f20b3b3b808abfb91ae70cdfb177d0765c8dbe1404094880fc76b09bd66ca713437fc322bdf9cc93f584e9e46f4ad2ce09e84614e6340488832a5e589e0c161ee6f1e67bf903ccd8d663e77bd8de478235bb97bd3668e623346262c559c331c845381171d25724fa161aa1e07ec0b345786e4f5744f651d398a57a6c8a00aeb1f688e0deda52596a3d1f95ccd190ba9a3a86c98db28afc2c2869e1a8bf62c16e738ab10d6193febbc3c93f9b71aca1c3048b92cb0f95399f5c3645246a683e5034a41e78088a796132ce0bd6cf932d825ee33799ac839eafbc81214a0b6f59f9c26b95b94fa45dfd228487095be2a24ab234246429f49fdfc1d0e2941306c8ed9557934ba78010d1eb933d9d96f9947ea6d4e5d50856b191f4bc259d21bcff8e35eeb3a9908c36a226509c1e116698a0957bf846b8387888cd9946bfb800626e1c97634dab5733c03b732f055ba81353166fd843b9f85906c4fee296366f860fc1f81ec2484f9ccec34162edc64c9908924702569e34d7ae7363759b3d58fee5ce67628207f3d6203661d431e1b29e23a18802e9d57c78e2415d7c492d6b21728a9bcb176ad284670d4b0f6c4e789756bca96697e02dc134c743632a96f492489edbb4fcd16a0bf5c06351076d0d18f45c3189cb5ec725386dbbc6ba0aa3d5da63cdbc9cdc38e16ef85165adbdfe979f08a7090ea1d7294fbd3d1361e8f740aa81d84e91fbbdb9450d8b9999c1bb97b93a7040dc49ec51fd2e3dd5ccb25d773b6191e756b066d7ea8878898608d2adc56a33edbeb76513c349448a650744ee0f9b7113658ad2e1f1e1be91ed03b22e6620585c108ad0032496d7ad95584c298987fc5f48fb705bedb1b46f2942f8adfdf554088c34cb94b38f6dbc0815e19e4bcf9a377b82cd9a2060f06dd53714b10f51cd9f8c35963cd2ab7d4227d093d0c8dae11867a159414c87f91a7b5074bc1cae0b7d9b1dfe8014639cbc6f08d1458322578eb7d791d5c49f44f1864fb743a892c42f334e32f2fb503297583f3880fd4e6416c6a605cc2b0f6a8f70555adc25885e20ef56f209f9e9d57f7de42807b9a7ad2d2e9d2398e260b040e431bdda25f75fff19b8aa3982a90bb14a882e3e2ad6895e4a1d89c07d2bdcb23c357ee23c8830165cf3da0648163bf948abb9b8d3438f06c3b796d76dd9365ff3010c78bb8385032398fff49ca9eca3e2bf68fc458734d305ebe94236e153a6a304f5022591a54208088a8902eca43db343ba7cf41a013fab3adf956aeccb22c6b1b7132d3b376f64d308480d46e94334c90cbf51647aa90e2518557c43f360c8b7c12014e8b1c7e47907963e412240e1cffe37f00f07aba92af1e6dd9f72cd3357a1bd8f128b07e17af707f883e5b344b8fd7b52624eb426bd1ade2157afe49131e74ffe41498bf6495521ee67ba16d82488fdfb16a65ef17be1bfc9f521236cd6f06be50d73e09d74b058626505e806933f445c84b50883b7e4e04a006d2620b75b75d5df7082418d873ff7146fa36a757ec2f944e14d6821a30413f1fa5957439702332fe60d7ce4482d3efe4dd57e5bd60e43cfb19a19199a8fda524f296b0c21a5af874adeba1981c48c7b270abca6b39ade9dac7b013039d7ef99d232e68199b48d6df56293bdb28a8223819f9ff6b5dd2c37487cdae60f90e64139f254444dd35f5c9c55641158e3927ff410b2bc5b69bf150bfbe0ab9a3f30e0dce43eb4dc66b7cb9613d5e4e3644ff8e51a7f77f2b4f9cf6d94cd01583751e13184f063b4031943892a5388f0810d16daf960ba3a338ebef3b3fa87d81debdade5133c1732ce65cdc05577dfece7c625c59f0e38089c07c24f5f39f8857412649d5536e8838b16005316c447ca0f063dfa8ca94741c417f77b742c8e778146bfa8de9bb61db0d059b3b0c7ce8ad1b83db52483d736f84417294528473f4b80476e76148ae785ba6149eb277c147504ad602e45f0cf80b6a9c09bd62cc51be98258e4496bc951fd9f7b8f8c59504313166273969af4a39435a83ede44f238a9faccf2e161ab5ec09bb263a06e26830d0023bb1fde8daa064348f6e798acece7373366857475f22cde573008c27f7c1af10bcd87c382dd365c0a8b992edc7dcbbff609dcad0f5669efd0be6f5d4177607382737752bb84490755c49e106b347e1c7ba38f1362d29e5687d57b4856bc0a0df073979220e76acd926a9b463f5928d62cfc45ae54adf39ce23dd48aa4933e48bd968e8b9a4ebf3527453bd64234f07370dba787ce3191484bbd232b154424aa51a405450f0070c77d1d23ca5a0cff7dae0a5ca5b9a4a0e2291f10349016e6bd1465a3c96946a60bfcbafe29712b7d7c504f0d11fb4f47f3e42942acfc53a9096fa1111e8e68898a0ce472fc6ed791f6bd7362d17e7aaf02e4a4629b43419815c81ff64c68ae40cb1662274a395963755d3e02ef286d00979057170a4c28d86988a8fb5cdd5ff45680fdc71bbaf91c8098779672e36f613a520c0affff52948d1804c855d7c5ccb4b47df778d9fee4a0d6e8c56396c9fa749189e3854406f20adefb043f3d26f16c18aa61677eb2e25b7f5738c929c4f4ccb69749a1038b1a6644545722f7cb8a06164badf3915b3f3cfb8d97ac83a677cb27fee45d242a352cb1d96b07ecfcc00b152a8321fa4222c8b25289158eb7aaf74d865dc08f2b6be18d50e5f50601bb027d0d89fba1afb4890d6db60a3141b6db90f75cd22dd6e30f3f8270f52c21a273b5bd6a886ee91d0672a8c796548ac3fc5918889ce472c63d3137b20e46a59de62702ccd04a3a84c74ac964bedfdbf8e40eb28a259d493bf4ca3753483dd5d6e43aa358dc1be81155fe99348cbb7c7d1a198d097641a16bbb7249fcabf7f972f4566ab5b3cb3cee37f4e0e007ceb57b26e071ae95b6c37e1a913755405d599c9fe31d8b5d407e40f596660f3701ce1a91cd26218ce6f79b998fc7050e573d7a6c498584e364f632184bf26a253d0e81e146730963b785eac1d5c2b51dceec34e3f16a464c1dece9277a4e99d868bfd9a1b5220f2013b49419c9ef0c76a8aff38c419479a055a790aa8d4043586b27495681f9dacde1cdc12ad418b320cfcedff0a2cac6e8f3704d29eb9110ae2f8efa8a12c113710918987a5f03512329911f967dd6d52bdf8f482dfc09aae19b3e13c4d041611572dd4293d0798f88a03fdc06387e4d71014cab3d286fb6f9967ebd8d23436dc00664e7fd904215561b223dc93d8bd6c241ee9be2d78ddfff0a95206c738dde7aacf4ad3e08268a9581806b66f2c41a2787bf42a37129cafadecc63e928e95d4b4cd7bfe09fed964ebca28d65c1f3bea7bb05c8085e0c22f2fa6baf8caa1d923ccf53436bbc5ee288b3d0cc4f11de6d4bc509559906fe8df046ba2bde61f124541bb16265c943164b4e5250ab494ecd1a8d130fdfd2c6b3faaa000066b62fbc9c193943582d62da9f756f4001d30b861cfb6b2161282e3e1b0e8755ac0f9d011ab1320fcb5083d48d1070c4da16dd4159f858b1a771fcd3585a955339d5059cd8cce6ed479a70af1c079d06bc7a8ca6da6a23e83a16f91cbb76732194712d34de509b065373f01155423e2b3267df5ca63b15eda17dedc14b4a69e94549dd7232279a817743caa33eaa9b5ec145a00cc55174e96410a06a10bebed0d5c7dffede372b873b72c70ce225fcc5f37c955d409688030c36d9be13bbbc00cb52fa7fea6a95402868aff4469ca8884f7487f81ef09b64205662655b27a9a1af51f59d5ca622d3c58d4a0574f8e8d05d963d846749f33328da0108f0ecceda0a2e99013ed518699a4a5fe5731f04c5a64881aa2388d999ad297f4fdbf073d46350ae5397dec0293005b83c4bfb448eb1f319125b9595be36aba3e1231de0b7421ffc3a70a9623c0e271bb30573ef540600ce6317586fc94bc83767d0595caa2f034a5fd01e46c9bd1951f1a76e4f3e2ed568455db9afe274e80188eb8e30d5b364616abf25b3f9c342229f3cd6aa75b0dcaf6237a09c333a73cbed7ba3a56155aa0a0246a6f3f4aa095565c9924920147c6b5facf57fe124d15b3d888001769e3d0bcf6b894ce1f9d8b4ea588a7468e31c63e7c4a0a017bb6a79211b0d8c3b15862c7b38b607e8391605d7f0a67375a42660a0888947fb85a7ef413a3290d942eb37abb5156b33f12a11d39ace8d6edf012a32ff98bcb50cee8444f0d75378add5f209e98fc2e7a97ea0875dea0b7b1d15894632b6466ed8a8ffd342e41e3edfad273ddc0a522fea797a9b41e235c6e4ca458427c92f4e6f3e29953a4139565fd99cef966f65313a8366b64e9e5374bf882593e8babd7c5b16ca33dfd6ece6b5c31ac620a7411524042d808d06adb033b7f21c7d723921249aaa54398b7f176ad1686a81992e042d6497a305038ba0cabf74c6ecd8eb64503190a151493910056d5084c12c7626df0c6cc4be7b346c0b08733a3fd31a6e694245c12ef664fa0efe98bce94a60a2c162748ec158f13d7efab71f7e4d0f66f737925dd87c46fc0dec09b9ffda33a05bcf77a615800a3bacfe071eaf2d137580773d1d58c1273f8b9e6b240ec3384a36bc3cb7c2ddc78d1c7a2ddfdc5b6cc38e6a0ea8b5af51ea107e86a41befb7c6d98f8c67d1556f5c56d8ef090cbe6277a878cfa7f72d0b2622f321e23045f73cccb22f5e49d24ccfe37e164448403fba570946c127229c1b4b65068554ad42d5988bed45323ba40f4ad66a3a97c849b321853c9f4c784df0123cfb36900fdeb8c4848ec49578c0431346b290013fca8b91547ae96e1666ceffe1c99deb53140fd803d9827970e894c738b8f18e8b08692cdec54695e42fdc9bba38616d622cff5d729728e60d642aed13420347954c767c8ce85ecacaef436d300f2b1e226eb2da38905de4367b2c0d3f196e3345ddd908c4a9da14b0f02afeac18a2077c2250d7bd8cca7cd376c2b02405db5a8405bb58efd2627c7e78bad494196f2f588f00dc695317b5cd9d165d2acdf2c5380a44f576299d091cd01a7951db399e9ffeeb72a4aceb980a384d9cb93b5a7b4a359b66bf7734c3724074754c26a95d37b73920d661ee2b738f92f53915bc84a3cee9333483ceb2690fed4eecc167730a02116f6738c978f0ea0bf11224bfe9291d55e53c1714dfe787af8e98761ae8ff279be6bffa24876a90e017ac300cb1c66908033ef9ae51d5eee2bcba0b6ac5fd6d010d466fa65ec7ca3aef6f014ae461fc2a15a4f243101c8dad61b9490111ee1e686c655ef807f1e04102c45e228be21ce2a3d5ca7b25a2ac3904fdf884d4b980fa8c8290c28ace1a1cd711103cad30125836394900975193ae2deee09e1646dcdff407ceabed48bff4f7bfe03f523526b5553837776e10893365f4c8f5e07d793f2c5ade5b3a4619f0e83793d482d89f21893a5b8bb3c6d7f032777a313946a141bde5887b79af6e3934e0f4a24601c7c359a77ee26d5dc60e1fdfbcfb2a899a0d2e0e96b3b06d07f66221ca52a598e4c44de76824a4bc9cb5b19457fbba2eadcc073fceaae9672c50fb64dc8ba8863f4bed62e1fa60cba10c72fe13d8f11d22a6d1dffa092b85256f8610f3f656b12081c281b10caa721f3ce985b73ad73e41c21256e0777faf397a8b8dd73ab702ce8e53aa9f0189995c6c9e920dcb75795149550b499debcdb19993425000d3619399284675810628a1c51a8bdb30d2b79c621f68fc227ac7d5f6259926f0b3b7b5cacabef9362807366fe4daea14f6de6836fad4c3b03185edb6c9f920b15eea7d4ac078f4c5f71f639184e5021dead8feed6db764ec1af0410407ca08ecdce4334192de2dd97b5670548316eaf3b58ba6ae017aa8803cee19066875a448368b1fd7c9576e18bd95a4df68d46c3f5fe1a8a13c8357149f68bce47360bd6e73c98932ec4a7d2ac4c5495bbb864ea9f1c14befa93b394f4c4773c7b1f41a059b85b87d832123b898cca5ef059659d87212d8c0cd0a15da4a7186d7a89985b6b7a7f5de1743286a429400c4cc6b5575eabe973b3259b55ca1d03d3be2b8c429cd16887d2f1854e7c903a4019b6d0a2762acd0895f8edf7e5a4bdf1ce7b7a005e8bcb98353086fd83503d8cff7044097e0c4cbd1dc135ce87cc9b6a13d00e1f30d80d0180b7b40e48f7be3566a98be6d6feecf3c324ef4410f3408f36ef94f9a464a1463e0d990b4de520ebd7b914d50141226f2e8a96e321c731e39020cb1a39a02ce8d598a27ef2a72a12db357b5e8d918161a868a9462a96e409c7fa0d1b5129146bdfff6cd3e7bc2e4cd9852bedec5e8e8dd945b2c7ac10db6446f1c7579b4ddc41c58864a49da2a1ec6b4eb2fdae06be4629b83ff216938c75859ea66968acf90d2eea065b74e92993f8f88d283338751d2236ad500abd7bc00c6716cb59c4ff10649aee731e0e29b61af936d82c5257954b27876be8ed2dd663d194e7ef04631e1ef16995e97026d539e72c97e9f2ea211d215a9041a1172af464ad698909a968a6a4240e77bdb573ee48fae20c78815300aa9377a587cc306696ccaac843569294298a7739453a04a0750e410471d1adae29ce9c74ffc18912fe7f361d2fdf1e8fd8295abeb53929e911f32f527d3f837e35685940877b8781f24196084dc78ed2566d13687c473630a6361786d94f96e9440d38889d6ece4c2890451a2b9446041ae24be708c8cc0f8833940234763a87ec09d4cdc02fcfd9e7f7bda327b9e6adac156e8af9525dee5e982f650d47f0c273fa98709e230ea3d6f48a63e0cce3377072f5e4bc586e558fc0441fd2295c31926c0e2165dcfd427bf315bcd531ce2a0e877c84c06f6fcda2487ca311bedf4dcdbaa050d5d23e2e2d9ffa2e838d09fdeccf5cdbb3fbf4bf2c9d238f4a6cec8f6c82f97f5c9723df8237a2296a33194b71b72169f5827fb2853ae344eab8267f1531741d788050cf1076984df7c88e6b53db64b00387734042be36648134ff855e629aaba84247853eb956fcbab1dc0609b8913e6c9f61d0fb73975e9c47ea3a8e82e7aa6a417a9a839c78c631938483f9bb3165af2eedfd060780a3aa7569274c1ef5ba4d025c67758c583aeac21a6daa6fbfd639ba5a1cf8e67cc41a421ea40d831f3baf097f749b057fbb44d1f03b9252a700aac648c95aacf6408a425d69597bfeaf3edb566a5a9479c7ee57c87657e0816560e73c8a91a7879978dac7cfa6560e954adc73813ab5c0f135a7e59651b5d984fa71a7c93482ab4f449fc04f7aadb98e71915981b1e5dfc7c966ea24162f19dfd60a1d1dc9aadbd29be5d9714cff99eb319e7ac466a130abf7f948982bd8cce69224fee0b7ac83b3ed6195dda3a82a4c096849c1bf746e2e6ff3737af93f5d39ad36efba84f45d63977777dd0543e5117763591232ebd2cf8fda0d3504bf553985c44223c81ea37248bbe1f7f85f44ebfa342b3e475428ffe601886ed4f54f76ca61a894e78800606f9376d6d366e42c003f329e8359bb3ff12e5780f06da661d983758669bceeae8a92a8c24cd72d623808f1cb7d7914103fa4fd03dd84e48b319e5b80c549e8cd183dea72cb4c9b2ef0160b3d7c1ece11300a0b7002d7a4737136ad1c90bb694c96f9de40b513b7d2c6dac17d25d743a350c1e54df6d2409b06d0fca2426dfa9d955ad6b4b0e8fdfe2aebc6f3012f1f5730613d062001536260f1ccba60ee173071d576573528f821aabd8e477472ab9d5d6c552114f1577a1e1d9fed52b849c5dafe3fa0c84010bdc4c489e3166e82f62657d0375c0ec742aca8d893ce590c9e3f399519d0eae252e7953c4e5d6f3ff2299820a15bc61d4c8b5829460a5cca4a0d2c193ae575e761a1a427e1cff13d01d5b1e9079ac3d3f8487fe48cbd101d59c32a2e7c8c7d8a6a7175df65d49104a5c9497bd2af6485f65294acc04d3f704dffd857672c6e65edd58ec51301cb116e62a36b8af044ad97383ae49931176d87219b26834bc4e46c5c637ba1de0bfdcc30743aa903c0b58b67d71e701f546f95c7071e49611d90566478657adfd0343fc1106ba560852823700ddcdd4e52e10a5e80a12212d4f44c9c4205067db42f49832c61188cfe9fffdf23824974bf8c5566bc41b5c7978aaf4264eced4e247979f51cdd6aef89678103dcb13cf8e6abf75e0e927cf5b1ce0f15358f97a7bd9d31a55613251ed229579c7dec306164da70d2ebf5d033c028dc83586f8e30cbf501028cb4df81555fd3f7ab95cc34b6824233f8fe67f85f35a7fb31ff497ffc2b789b1534e2bd8f6596a3ca3058f9585dfc1faa0eacb9cb7ee20b46d141cbaaab08dd8405e729ecf5003f7e6e6f15c6a7fee473c9070eb16f3b222b681fca73fe22585dca456cfa68b1092c8287108e0adb30ea900f5d8d80e3ee44362bf2c48f658a06d495ed344b19cf592f39701af1117373063e2cdc4e9cbe25ce0ebb38f932f113c741313716bac088b6eecaf9f5222ab19e1c031a32c610449230aa3da62b0c0914efbf5f4614ab3fdc2f77b7819dc50aca1166c3d7f08325152a364f20be596b4ffa0e2973a7dde2e1640cb010d4e0f31cc6ce65a88c954bd953f5e9f35d679ecae8a43209f4e716793500803d77fd1ef894b06c2f2ab52d51665f9a8888a5282833f7e5837c354f061ae9b471e777c2f0139363c63b714e1fa9d9dd7ae090abea749fd07abe76f11a7e2ea928b3ff9395bc0de9283f482296c70b2f24c5b87e8423026f5a2bfaa128e755fafc6de3155c068648afc6a85f59264a0c20d89b3487b7a63e9c555ee3a3dee6164765c0bcb58b831ed7321038c9403cf0f969975267bb11badbcb021d3dcd5577b43c26ee24a38ad829322e5379bd5a7a19296b4c96a5cb5072ed82d2395b3abbad71744e3bf7040130174143ecf61913fa7855a7a6f049bc0c3d6f8738e0fc4ead7637416dee95366681f77e9572ff3b37d704e81b23034a024b16c0aef710ad3eeaee6c3d02a4c456e2cf57f5bc736c3bd5e78265c68e86ef9717032e161e53cc2018232bcbb9576bba2784a05b2c3380f58c0b195351ff4e91feb318c68bdeefb6330abcb2594c1f889e7907b7701d91a650e69841d41f89dc1c750170dfab242ddd87525efb3f0cde9299ae59e5770878d4a9752aab643bd62ebd7aad9044e3f7662d9f1a159c9e1cb28b06caf2fc3fdd85c832664e79df0073f0e6f53448a9936b61f58c4ed16dd36cb1a3833f09c254f2c7529d23acddebaab3c8b032030f825bc8f81dfd99d6833fa1f70b201c1a7f9a3b5837c189d308217ab29710106064c5d70947a84272bc99d083cb2ccfa2adfa78a5beaead38e686ba16f2650d668b27f0cbb1d567bce009d1dc5bdb8115607213ed9a516389f728f6785a97366c95f0ba91c51b763f8e0e0a6335a2dccd57bfa17273406940caa6b459482d47ecf5cea90df9d0fa551724febae1293f54c43185e6a1f20af7c18e882c43ad9e822b002092d8ac60a82bdd2345d6b53526665655acdefce5098c3ec683c58ec6b6b633d5b2e9f445a33c952c868efd3acc9ebc855752b774108b3603d256474ce527e82d00964f25d0b9fb5f0f8267cca1ddc28958d5b824873f02d4aa6e6d9da7e08b8aee76136dab346e5f43597b6760b416f633b07592e828339d7e86782579809c93eef1f799bd3c6c81c46caea763a218407a7b863badc736e2c136fd90d478a9cc84a252466122848af53477e9354844fc9fbf508b629c8b3904e8445c3349119941ffb9d0418734cf78697dc95fe73b8f15c47b0e8138aef4dc1302e43072928e9972a4e3d8eafbb3a05416a44e2f4a7c6f435c31a40c20ca995fafc536757b111da399dd81ce57fc1f8cd9268a8120491eb47a9125878f1edf26a18bcfc259c520fb0f49f691c7fd488c3bbc8f8d2b79a6905cb9904b28660ff09e8456f9ad1f55e18ba581e5ca3bbdcac4c2d783ea82995f88f76ec7ab34ce55ed5b868be3941f0f757cce2add3bd1e10af5fd35dc08697a75e73b7d760f7cbf248dc8e9aba80edd833c35e18f72373754b26af37e5f9989aa1560dd275aada4ba7788a353df87d40b6053aa4f7360565884ab5d500c9c05abee89871daad3af35b550398abf3c6b948591d5abb3bfc67ce928c3efa3f366e1ff1fdbe78481272cd3ba2c9eab7f3ca5188af402c7d800485c7dc7ab9a3235e2a39e7c135c38a4e64f10fd2e48c2afc395b99613043b7c215b14f92273daeb34987fc81fa65cc118741f1ba7fbc93d5689783c2b0d4cc2ce7188b8d2b5400f4e3a4e406b078fd42a0f1f18aa58e58df4607146d9579e5c761c43873ac3140a95f5948583d42486a16cab6493d499ea23c72f569c57a2b1dec7dff4d941d975b276cd0808b0cd3105194e9ff2f3690a5b09fcebe2a1fc5b5f10a8822ca5e2d91a2a52385801dc6bcb91731b5639d53700b574675abb0db17d6347afa363c29d338ceea6f06bf4af7b61a3772c0c6128bb66205942f7497cc05c37dddc001b3a951adcc4604388747b067a23e30f8f37f1788b426a0b41f5be47f3bd450f3f59c550c721361d1a4370fc41b219b7c1ed29891fb30e5b89b4cdd2f59e6ce5c1433acb183de07d2c94c3bfa4a24e79bbc0fa04481bce6c83428569d821c22823bf7bf64a8addd8320109cd1d64efd9af5bb966aefd18b2c1175b98f5c7c34ae906ef4ef898acb2bce0a9a1068a8c5c4f060e4cbec78bc2b5cbe6dce8f11ec273b22b419cd7cb914fec29e81a7382760d685f12f21b8610e3a88da22c4e03337659b68a91d8c8f84d6c10eea3c080cb5ceb3255e3599621ed55d6852a3f3ef24365f766820c035c47e8e5414ce205a0c0171e81fd123a7a055c47f28d3510a37d5f8481e7f22941c1fb1d6c70686fbad9747a23c9d5f18dfe246876afd026ab86bee4492e1ba92d3e1b3feca8c44d5e0b7bdbb7b40549e22a26ae8e1c80ff9ef1fc7d48eef8e1833eb1b33e70762d2ed895c9ba5630a1fb0c0b80a55dd7f9d231a0d5fd851a90f826671dce41fe6d91b36abab82ad8a84d262b8568ee35a409e83474d39ae105d09793e638a7ddad1b4e63351d9c7dbb6d0b1f3325383a8c9a683fe0579aecdec104d082fa1c945a4fec07af67358059cf2d4f0076d6572208442b9f160fae6a2df095aa8f1aa303942ed0a031909111d80f3373ea530c02d80e70078b63a6669bdd6b93641c9a278c7956bde91820623c138513dc18c98d8e19b5b0242155228f4dcaf415bcea349d7de23f1a36aec95fec9c56e89230409f18553f7cd34b4c7ca42c33105603b94b8f3bca3196acc5a7fce1b38c79a0ba8f6ce6fc01f3f932d88317e6e08277341b3fabe5bba29ad5c8c70dc02419cb59d399d38c300ddf84475d066602ccd5238101caf834d5097826dd68f36c0cf0bd0021b356938b6eaf3db48057038f7e162178019829b8692b4692abc3b0cdb1429996fee1a8e73712200c0e304f64f27a5104f83c06c74a7dac991eb79ed69d99145c3eb3fccbc95b92d6186862c7d2cea42b076a587c1ddddd635a5582b2160ee4f3cb53eb8385fa1aa53785ca329f81af6cc7999b6163da3d53e71408daab32aff04d3811b90d6c0bfbd41f023fa941b74ca1404bf1bcd1511d4d899ddadda2b9d43cd6ebc6c03ffb4c767a8749807d704d3cf4e6b77971bd11d61cbe1d1dbdb71202c6f6572ec46d09b74ee5dac5934ee0f33df82d3a39e5c44943e62bfc020c3c476ebdc4d9b7e5d5ef029a7de921c79a5c71fccd6f784fb6ff95a271e91e4da57364aeaa3188da13b61c01ad5bb76eebe137711299db7f6c71988fa97540eff00f1f3571d695de558511d7e3adc2a9581a04d18739d1d95737b2ea1d213867ae73150eb6298d570dd47a79bb4fb1fb617f50aaa5dfda0209ba7b6e576d53493357dc86e1baddc8cf3ccc639ec223f99a79b178f8fc727de6926868e2ba30092125ec3a7efae5c7fc267e21f895871865a18da8fb0039918037f08649b84d2bea55ba95f87a53c9271a0631634a69dc458f6bd7168b7e016913aa22f6c80926017fce35e8a99640d28ffb2e69512ab9cc8bc27ff61ede3203ce0beb6469f28c08fc9d76ca193bb38110d355753a78456d2f380ff40ac8a7e2bf8c3c2d2ea7c26364bee51749a2b5a51515530176a0e3aa0222f3ab0fdbd77880a191bb76876da340990d4aab69cbd13537a3b8865328f57d19e7857e66454789e28899e21ff23b08b26bfebeff4a77d9c0d3e4f9fd99f22893481dd72675e253d57d42f1efd4bd25a16d8e14e1c61b7b374021320e9b027d0591ceba6aedab76e10c311665a98c4fdcae832dafc33ea20194f7df14c0b8e317513298c221356babb1fed01fc53abfca8b6869c7c643e6c62ed3519e8f88031f02c3e2ba95028a8beb06af8cdc3b2e01a0c869a853eda1eb9a3e2a0a7be255a3330d38b2cd858c0823e3152b332fe3087b0d9defd07e7be853a2c8f6fa7a433a4e68fb594f40c8a6f91e91798e6ba74576b2870ce088cd52e7bbded2af92544ac181bb0c7ec6d8fee703b5063280c35f1051b56de89f2ea1c2b3ac2bffdd216b48c1e84af08a25665a5cf04fc401cf9bf46599a17d24085b6154e1616fbd130220b413a3390d3673df64c3b4b76134b28f68b445f2a9f2e66009ff2173b4a1a5f5d2cd93acb2a4bdf2c5bfd371219b094dc585aa0db376e94b3d55daa04665dd44a8669ae02cc89b10fa353aa5b55b26bc169e6c12b2fcca6f79960b7a04c80e89af7f3767de4a91d66cd448c9af0d8166d65efaa63b0d1059493022655260b0214297d7a8498348afb80d9c31812aafba8f57e43cae10319526a4bdf6c19878c82c112a25f10b160946519381ae1b1833ac19a74aaebed4af9c6 +MD = 0d333dad2e6f66c13ce835e54ab749b9672a9636cece6e448757bbb4 + +Len = 90520 +Msg = 58bcf97807288a83e7c34cc6c670a4df566cec92dd31c5c92f9bafd9da4ad707a0472f4b2aeac454fafb4dcba217ffdc3355a9f3f92afcc3658a2a8d4b50b49f4ee07c1b980b22f9ce338d4f42afc8d06b70109393e52b17d01dfb83352c523249cf086eb8534b7c49b237da1000a6c4e5054afc152cf9cb579c474301a45ac87b5cfacff489e8e455c271f273d142bf895c7eb6e5c50ee9e14e395615817469cbcf7bc3b377a03ad9a96321d3eb44c93fbdd5476d781378587cf643db8a471e216fb2d45ee31c85bcb037ee991753eaef6f7739130fb081a36ea992b9897cee6585c8895b9604cde81f12e12b1b172b81bb8b1441508c0baa6c78cc1944bae27f59e46a1358ff1b443e1e83f2bf3a93dde9395e5e05501e55be8b786285aa0158332f00eef0b576b854835b56cd612bec41aba1d2f4a3c28cab0b1efc12f453d65bd1d25528cfe62cab69f2c00b36fa940a066404e62e00377c20474fb33fe0e218f169aec6f5738889f7ce96436108be8e75305ea299df3e7af17ac33233b165b4b74b6293ce26b4375579413b8a5d53131e8c47f28b6889eaa73fc05679cd45754c02da57030699fdac7b2abc580239e22900279caca20017691eaee6b93c6ca4d8167dda3b1b1d22245ab88d73fe5a43bf146769a5958c4860a0f5ab9a07c088820db2e31f6e29f0e4a0527884599c7d08516d211e4913c4b44cfd6dc5352b6b7371e33c5706a6ad15d46243331be9da2b3ea28cbec77ed48caa2ef3e2ce9493d3c977ab8aec7aa2de7f4fb7274d28a050646e712e16b6c01043f10798dbe249c99ed6f960268f176828819c09f74118a1493a9a163ea2d06a9eac6f8f62ffd57d7768ee83becb54da5760ba801f1b8a43776ccd1c48294cbf44c9f4706ed27f18dc945198bb18a05d9554d835cfa03e61766ed3eb3b357b3abbae5ee304438fc255c5ec4a265d451968c5c0cf0eb77b21cca674291fada6008dc5758f2e3a4ca26b60853e068289355b1b38f7e5488bab037e777ffc78153c4174011df39f00e1a5cee51f636eb5daf3be09555a3cb428a35ca694db8010146025c9345c5af1a68c77d493460b102fba16fb9078793fc032aac711c3acdfb0713f967d6f54671aa6c31942b640e45d378cd55144e8749a3acfa39dbde4c939fc2a30a03673ac657e1b7ed6bbf5778bf286613fc8719adf423302e1d01017d78a4d5f44b9a007ae99e5c9f45d1213e2746d65030bfdfab6d33eac84041912b1a212eb11ffc4bf1d818ac346a580fe8a44aaaa441572dd487458682f61e5fff0cce09bb110c51ddcbd7334749a2580aaeaa3f8abefba89bdade9ff8af05d29bb902038c9f48d6910d507e42644eae36aefc216e0a0bb473c06593a3cb869d73b77388a04b302ebe451ad9a03acb76df3da6ece8a305f5eed0810dfeec1f2509808915907560eea7ebacf20b3d975686d330ee651a88c18f93a77b64714deddf9cc936d7de598b00698d43cdfd30a1a00830c27df0f2cbb8824f489f0b817c68649a68e0c668783a57124b72fa360ccd250cf59d96d2690c14ff01e90b58353690933835ce3c5ac82cf27584a505ec50e25bf44eaca62dfcd42d43ed0140cccc794a01516633972c73945e9d9e2eb4fda8744afb82fc8f0d48506b158dc9978cb70570ce2efcb1f9938e6308362f1b05e00c664eba3400afda1f03fcf1511a09a27be30678e63fa225372f7f1d75731c417ad292c2fb276701df8b0dec85e8c5f413f484e48e94a8a125104ca49051a315561c723da067d568188cb2cfc67844044411e3e254558f9fdeb1fb7c1e2b3cf404a0677ac2465d756075962b914d065ba2c78e02e606c969da8126045d843c662d1add0adf4761a23dd2227074db7f72a671fdc6a20cd8979f1a46ce0ce143e435c86d8e65ffa487071ee24effa821e1d5cdbd9e26ec5fb192c9c8497ad6c5e695557345e4b3788c62d850078037a011a72737f9c339a1406c3c34f745b944e5e22e98f1da27603ab78af64ab50e4c9a911b178a25595fbc71ce1767ec1d437aa2d048f2c4affe0aaba33f88eca0b9d52a15b69fcbefed9e4a1bea0bdc77341d3dc6fdc922d1a48485cda632c5736a69e8a3afdb0541dd5e6b821763a56bb936399f41f57310f630fc46c4e8ae0ac0c143516dac801391854cbd39ffc54f256e2cb590084402558865bb160b24eb6f63d08b7a84bab9cc9b6419dc40bab61b1d6d967262041a65035897042ab879c8c9f6ce410423c8c119582458d704150cdc92de63a331bd872a5b7739b7d75a6f8c4ca67b9b49b521877f693a1320007d1422e9ee3c6b804e75d4b801431ff1c5f3488064da9b03605e70551a959cecde6ca4457cadfff71d6e5af6055cd0c45ec75108a712a637f006a17454cee95ec34e8d7d89789d86968c649db055c866ac411c8bacf3d9c77338a943833f83caae2244feaf1c92b32c58783b8cce354d312901a600fed4364c4cee4f3067fab501906155580a9e01514b0c4c1546c5ec8fc786d42d93f408fdbbe6f3b6c8cca2500178fe1ed30e05a7eca73bc42fe8c91aa53282ad33d7b40a1e39ddb0d258173c0de2655e06611492a5cfa7241a2c67545a8b5dea8eeddbf3dc4d7999255b88080e3427b00545c2a40eec0abf75ff4bdf5007b26fe5a4c53d8ea833fa321579669af4c19f601a944ea082d2e0c3dfeb2e1e2e2cc7e8ab1459adb0b93e79346fba3c9aaf86976e1e04e33a9c52944cc9932d65296cf85f5ddaa21d55e07b26df755b9c6e002b9ea4694f69c36f67d46bd0f64334e9953fe6331444b67aa86b4d4a708079969d4aebee5da6e4a1aef5565a115edba86fdb61f56cad378791804d8c23dd4ea45ce1490696687c93ea2dfd81070e8a33c8a0459423dd7571c6f434dcee0979c3fb003034722507b099fcd5f83fe8dd06302cf581c24becd3a935b79f27ab777fe816560a8962f2824ed08422245420ba46e01650d08f0a27b8d32a557929c432b4921efb34b8d97369477c916cf701aa7d581c83d70d59e8964b21825b0aec86d111ff891c8d391e89d013c872480c6133f37c9d3e4d5890920c21c835c55ce6de047c3699567dee20f90e29ccad8d790b40bb0f8ec582aa6ca49f7991ff91cd2be8198643bb346cbf20b047e4be215c83de5c4d311c64a066931f29080027b45b3b5beaa411d914b4f59ea552f054860e1ad4e8dda87b1d10561559008d8b36ec8cb7e622f0f860c2d64dc48fca83703a94b964dd00327b0a7c168c03de38cf404ab20b48ef0eeb39413227f3c35ab579ba7e43c79a2744a55397349a98bce80703decc9e42891eb8c4e032376136c04c2aa808260cd5f4919b1bd53d43940b9126a29c9bc1f375a1efdc85c33aa42b3233ab1460aeab252fb118f054553ab48f41821dc9b3ca8a85109ba51fa62f50cc840c1b001633310024131878443d7d41e301a280be9ab7e2e581e2b53a34cb6b8a5f6e9cc9eab283629eb02196f8c06969b5dd8938e0a84bbd33f11c6d5105afb4f9919f305e1459fb2059e8d419286663f3212bc918b610262642cdc60099f9a28f167fefe9f0d46c2c682661fb0fb9606e0fe0c5bf7bd0beed4a41cacff2e9c1748fc76f3ab28324277d72f73b00d2cd7b1c60d541542dc5dd8a00f21baae0903e400e34bce3f6b1b60c46da458653299eb8f47e4af967f99b8483b2801c8e9d60e9acb6ed0fafa33c972aa1a71abaf36d78441748b61fc88bcc52a279e2445770ef2b8c47900e674fa086d3dc287ac95bdca836a734c59142c3f6488576924ce2c3131b591fa37c53aaf3f75159f309ee58c95302cfea0244fdd6fb1f53f8fc3b07fbfa9df8ff60dd38fa72a309e433996f0002c8120d99f6ec8d50c40508d3ee103e8082c682a360bcf2dc4dc2aed4e1a1e4bc8395a0a6fd1281effff41262709e6373a402cdb272b9859abe1eb37c5b73ffe6b1b533d7bc024d0f4fcbd62666e4f31a7e38411c87a11b447078b2886b67ba17cf1b479ab83e47552fd6a4ae3586760b7dd18d5014263c50116afc97a5ff9bd658124c7e761919481cbf0e58711564bd3f58f2ebac9b5143fd5012087f9e2d98d944c2e17a453b6e92ef83c38e0437a61f59225db59302a6a0d293896ce5d7e5cf1d4b623925162f2ed2a55df0c5676cba3c8c14c38fb8eeb86cf16902493333a626367f374b42004d22d3a65deb9c677c7da0af5ae40c828089ac45b44ac808fada14a7091a37887a3aaf3b09e91f2cf2b6f08bf0524618b5b3249e176cfedc39b3866803347f3e3294886aa940983399630c49083d1e07b4640ad080124033ef4cdc30ca0c818802cb0fd3a0746001fcfc44552726fcd60936cf8ba2fd44969800b6afd214d70c674895f474173f1e89fd593eb1825b1a1085d33de460748aa06976239fefe821ec87cb5bb88b6defcce08b745be1c13a86ebc665c8fe4866a501cb3aa7f04d6eef131067d253750c32407b846ab7c7bdc8c30971c52948d1224406637ec87f49fb84f5a75601fcfa5697a9ed8296c71a52c62d005d73fe5084bab82c78cae659ae37fba8b8096e10a640872e27e147e6b14f91801650b14b68d060f44a8a2b0463a682ca7cfc3105ade5a3b4bf39d29960d9e78f84523a482b1f91695888b5d0a87b3bbb193cfe3fd9f1801fdd02ffb8edff9f6d0c0ad1dd6812b9da27490f45090076c9115e2e25b6fe9ccdf5df17bbc52b19d721cd20519c345af53b4d9fe7f1e0d492f9d2296dc1675a5d9e20c31862e6f72c6a1b9e6b340ee51908f8f03fef96c597372ba86e95b6593d3a6a8a5553ada7fb4998b470cc0cf8d414fda8937e9cda446ded03be807619fb5f2eb60923f9bcb254a6fb18c0b906a4e3ae11a91b6d8338e278d3b43e210d0670e00e9a305595efffd8eab9be8d8f19f99cd3d7427340d3596181060b41b2ed2420dc8f254bd412cfb0fbda1204f281cb3c57b48068a3a21739a41a94529c1dcd63b86e5f46f7b92891b6f067b9e19aed2f25a761981c33c063a57845de3926e11b1aae6ac16141bf2da4a32c16dcc3b3c7c646429c2af6c9621d95bc3f1a8713c98bc5c465a15ae7c73d58dba6347ac3a8a217bfdf4069b6d764f9540fa0bcb9f1744af88e58532710f98802e2994ea144418235fc0d1b0d162429a9ca6c4668257cb463b5c6c9117d51c71e467bbdc12d3d1c515ce17930b0d39d29f9fda282d7fd88b276ad2b2b7eee8c9a5c4c2697c5fd4c7e8c5e02c639ebca5108a55fbe7b8f4e513b5c07d988185f139e8b37b990faa93a04e3463203d537bb9123ec6fa2aa6bcc8e53dda04b7794f687c95f9b20cda8f05101c208c1487bc60dd9c71acfc76790fa352b141b84e4dfa2871ca0f7eec25deb49f4bed48dfd0ce9377e34657ec82ae9706ea98ab8b52b6934ed8f88c68bcf5e1c6cc8c04e41fcbddd7060f6291406d68616d51b8b9c56566340ab55ed7bb1040988bb16e1c121f63c5c15146ec1b16be6b22b4095f10cf482c488d1dc18cf8781d70a4ae110f91cc48fc522a867c6f432df209c3059abce23c7acaf1ac9675325d64aced4b7feac0699f5c37e5c9429daec3971134cbf4dc6f88b20122414f16614d125351cbf2e92f93b594936c5574f67fa719720b3eddca5b8e76aaf54dcb30151f07aa5971eca2bea56b18cb70710e0c81034ac2648d57d9a577cd1a38fad2a21832e1932f74ca0976e1fa505d3bfd546df841582c951deb412d1118d84a50de48fb7be0f327b05c6e20c361e37bcb3db320e1355f9d247aa8c00158f564b1aff68b02a787ad5ba0d750fa68c9d981b19aa2b1c2c54c756c2357224057effdff6909fe52b1afd3bbf79828ccd8fc26976ba63965254b17abfa1afe39c5943cb5ea9ef5483ad521971721d4f5d88dc2d66f5602874841121d75321cac09fb77b9c17271f1eac64c1b7e13864b91335e58ebd89391f7d76facdcc704ffe9cbb6f336acf9b5882b5c2e7695c736ca9700042a5474e9f8b5353f76003f9c2eadff4b917516fcdeab5aba45cf1d1e4d61b3c273f32ef913826cbd8c0654e9a0485ca919f44e2eb2ef4da634ea136be0387c7a0ddc482812e71c106601cb500645d4f517522cb3cd9e3dda8b0e2e854cc4651441394addbb8b4e1f4c182d37294b6f17d3b635f3f761323d9262f8d458ae7579572fbd82d8170ad286730008d20336f79549f357f7e035b9910ff8c1ce9eb48f97e8287e2f3256115b3bcf2ac714307da532ed4597c24d35cf3cb6b2743b2b3f488c133989853cc415981f05d12866924a9aab269db0839a9512bb10142ee172b442061badb7c3d3fab17a01b7e4de1ccea9b663d251dece2bb98e44741ede0e21338a8c6571f32653af678643f2a20477869562fe4e66bad958b7b45db42bfcd88726f4775bd5a667b96ffc3bfaba338e5ad08de94e2346e718bfca9698cf25216563bbac1c703980f818cb68a32c905a4cf04b5afa1e5b9c202dede971d27043f5c849cc5dcdc8e494ed5b9296020225857c031bfa5edf419989841ce83dc48861dd069fc5f23cdcb47315807b4473352dfc1ff2f5ebbc1eaa5cf9f8a4170b36ce2a5becfde97bb080345ffcf9f8cad46bf806a893ced87b7c2cb3454e682c966638ae7dacba6fa821b7a2ccb828ef4867f920057d0e1da036841acb8d390ff0518e68187b6bfe0cbf8447b961dbc9d94a86d5d05bb371d401e996510a919c8cb7b4f286120612238124b48b9c1a42d13c288dd3d4c6be6105e58fa16c78bbb1bf33b28f18929236901e530a10ec41766466b0d4914deb8d69ff6d815cf654a9919212fa3618668d14fa8bfe6659af12ebc8a69c3a53e0a156c098ba82144fba56597991139f76703441c32e456972ebf8d6d7f376dd85e4f3ae791485d9942d36114f1a582faa27187a656356257349b419aca0edf5c2a0695376560e4e0b4a5841fb5eacd0eaf9e92dd86541949a7647188b6d48a27f1bdf37f84ac4799d58e571e725b88b1e30cfe284fcadbed0b9d85bdd202feda49f7ee068b6506430a104297a3723672e12f122d1f042acfb598f6b0b8249dc19726dd82c635917ad6bdef21c5b966d02e878742708a965049f95cf7b5b3f7ac6dcd5a7ae198898fdff9b53355bb9a482f98b61ee0d8af1d4d3120f9773b8cc9327ded3549f85f106a562d52dfd3314978f53708ec88c59523d2db4c6915ddc6999afe688bff72ab2a45bfe6d0aadc527f0f8296ffe58a465240f456f7fd6b12e7c7168b13f8649e846af595b49cec01b65a114f97a96daf7d2e04afc03ca53cc164bdf36e8db5890d1866b60843f0c5c3676ba9503ed04ef8dc74cd4e6e2cb29b066d581829e5e918e07bee581a7b1d1aba0a2a9600529349eecd25fefc5202f91ead1f9d57764d5c55bd95009afb8610c47549f5a8751b04d786405e81b5ac403fe5c06a80c7143bea9440ae4ff28f6a09259ddb91b844ae1938a2e978e82d24ccafd10c5088dc3c01a887cda3e0977b0aa38cd4568cbeaa464cd42c6c49e40b5773c7ff211c03d14d62c0db31463cb84b779d5c5172d78dc14b4a93b65b9f6862da1bcf8cf13990304b824362b3fdc64e0a55f03cfb3ddd2cac8cbbf1ad8dc0713b52d9fec8dbfd3cdb42b2d28a491984d43d2c53964ffceaf8f11198b05da8052ff3bae0d3798cc58a9895eb69bd26727db96d4fd48c717eb93e1135f47d83811074eefdc170a38ce1fa6917b2b871b96f513f8c2671df7a55ca4733ea7be787956cf280138fe5d569cea901f5c98fac11ab1f830caeab40670c302d22b7488b2732422249f5d8519aabd224b36ee4dd1d1d89ef07814973559a488c0dde2b0e3e6b7a5ec560df63ed0870ea7c26f5beda3f0b0aa7985e85a9fb1cdb3c5f1383538ef790164f8f8ee97b01dda07046e3e1761f705d623ef9fc8519851ea8767cff033650cd104d55185a0178d0d96ccecb5933baa96d8f42a5eebb242548d86d996ed32b5a51bd38e24bfc467dd0bbe1e05ee4441c18b3e23e9e9e42f0becdd7db384a8a3e9243ccefc76eb117e4d8cfc90dbd971602416b3efb2f4c0188ab4e1ce608f7fa5075638932b5632f8427eafddc0c4e2798ac402faaeaa9c8251532d6fe9aff0dfac6af57347cb7354d4dc5f7406cb3d17a790379145d06c5128018a1e87d09fa1fbbf2c2433137c99eaed33de16b72a3f62c17a3ddf2cd78df6082064a2b933f2dc9f062c56f6f4cf6bfa54a2564f50fba3a1f584e488863fa5ae16c8a23355db3750ab15173b83ff414bea48305d58525276cdf1bcaa206f1c3c94d3ef06ad62f41b4267e0acd23053281c590ba7e94d58892d09cf5a4e2343f9c40bf1fae292fb48f3a8180f896a89d9125c4ff7acf29b223b568662b865022fccfa10d69d70341fe862262d50b5cba5f5d96313494b04891f5f4789053c4124d428b564850687e8461c74cecd1a01d6ed58b1c367607b0502ac7b96deb1e822051c466a435bddea385f69b9aba013b22162a0d1ae37e9df0cc68b52eacadf6f865e2db17e771c6ee4b26db89050e982ba7e9803c8da34606434dd85d2910e538076d001df632ebc729de89125306c8ddf3501235a5146cd337edbf63d0e5e181bed99220e26f91c0ba8420d114b821db90e44f70fa20571a02dec6fd448b5047e49efdbb2c867d6d75ce4f4fca614787091c7488cd75b93d4c877b63f47fd61d21539f573525f31fd40340e904b0be72b46f3dd7cf82f7af6d7e69525131c753ed6e139fbcbc876a5dd9b2372414db212b63080850b686f2fe2a0d12eb5fc89eb164e6cef3b8ceef9b982fa4d90c4214e68e7f74f1af0baa7720d35033483e4015ce859faaa92de1e5e4f5cc741567c07e47e0b832caea3850e95884c989bd0a73117c7c221c2913f546c11885aed0a64b35f84c94a8a72f23fa091b0e92b93051c437defa7044e82213fe139e670148e5cf02ac87b6c6e158c9619d8301a7644a5d4442a45405c0f4f329482eac7e2ad679bc529c73ce0177ddfe86c7552c18c5432e41b025e040f66abf10a70dabce85dc71c9336e2101f9ae3c613bebabc04b2c52569e6468eaaec14c17a7f91ea67c5dbf8afd14746566c0b7b75153aafd546f6cfbcf9e142076bd4cc7920d4b353274121259f51cae37abdce3b81bae126982ba9be4415674f6a53dab05a8b61d40b605f9ca8e9e3ef4c62890d0b229b2031cd7c15cecb47a972f9b3c7359e3a11faa07abdf5f8dba26b637292b95a25eb984510699fec283e0a2e1e65b9f587337c69392f8d64f8235e265273954bc7ae55fa2d63c05e5336ba5ae532ef788f611723659a7917839bad15f058a7dbc992f1539baa380b10b80ae5ced8de109cc45536c6a8bff7c331e19716e7f6f372bef3ba21e70fd9a7ec8337a2fc8ea3f484bd0b24ff69ee020e81138acb8a7c0b5ae39689c24eb25ffbacb82849081ae0c8d70847477ee3865915f315aa6b5cdc904a4e99e2fc7d810d0dd12a64535ea8b82c96f72907bd993b269e7f2da27d2d86af4c1af0212255492fe86ef87756947d431efb4c0b6681dc3b7c90fb35c546649af7d393c68823d89967beab7de9ec3fa4061c5a92c58663dcf510bd2f1e6e5393b78e74f19933e2d3b4e0256c01f725d8b722f8a5c2f2f99171c61a956fef7b23f4113bad3ccc8e66399c0f4c85fe58669ad5d04a450bc5e3587bbb71a00f03d116258fff593804d95cbc11265c4900d616fc8a8b361bf05912f747ca98171326859218f1d9bd6db48706d201702043b19261ce707d68a17c070267a9414fd5a9aa207f8aa2a4f1802144fbe5a8cb4c7e78ca4200033b01d2a064c31582fe6fe2eb976cd29d35b7c4923c33daec9141c52f009143aedb38e543e40216436d0959b1be86d2b2b7e80841b723e924bc4b0f1fcb614167926d3d594cccb46ce5cc97655e7691ca74abd5987c7319389291e2b0f25b0317a6c8604b62cbf8e6acdf236d3fe317cbb229b1fe55ca73115c3cc94a3f2690a46072d87fefa4e9970a6b853329766d9fba8927db08d0fd9561734955786af0f808932d5fba0290684998461de4d79a2cd4f4bc985e2ec1adeb5fec3966d12cf9e652e5528d8bf341b08ded9537ada65c4792fa9b1f8cc7424027395ed1014b9141d88abf2ee71c0b86730202eca19a155d8a684d1391153aa9f5b82d81a255a7634da31066bf13ac14710dccc95a7d415c058e1601e6b57f6eeef20c3d5d532292d8b9acfdbbde0ea2b0975a978157c78d2af55fb333aff7d73c6e64ceda4cec17a153fbbb828717775827161dbd318f3822248eef1f098c2c07b49efdc048ec3ad1f96568bd16b1dd90466725b71281a514a30d7e52cd25b4764d2090b74f0a42903452cb1391c31a807bb5751602851b29fb42287503a9b8b2c0544f696a2e79058a2aad2d023577514e69d7830983e489b397b430b10280e395a1047ba04025598555d6b270ef3c2b47e910a63063465b5372ec2ae117542f556e7598fa288fb3ad3b0e4be4d8b135ef9eeb267e0d8ac8643d960c9ad07cc187256b667eceff3c89451da065da1e98cdf02facfc69f7f76d5f7b7de5153fbfb32dae8d361bbc1ca1d9ca58fbdcca7b6a48a3dfb060d710f6406326c9cee75262ee06b62af5107a7d61de1caec7fe074c0c1168a4d8703d874816ae4ee3baa11ad03b896146417ea643229387810264fda63feee0ba0ca4a9df5bbf7c3c01d5663b14ade3f49852a3e95b668df31eb9057cf51a6aeff16de36dfbfe5cc20315cb975bcbb8e85d1bfcb9543cc9059a2eeaf8fd944c5e67c1be5abf15f55b0a8ad34cd68ae90bd8043a1dd4be41a0bded36801e038eeeb8c8c10e6cac4ff05c5b05c24e937c445132e47ca294ffaad01b707e1f0f36892aa974f2cd6a736a42b1e9618a8d7c7a0fd0823d87650b0d1be32159c9614e16078d5f6ca9f868af04b408925421ee975b049cca4bd96bafe66bd079e4a1dd7c959b0be5c7fd36a9ea8be9bb72f7dc827df6bb8ab699297a79db05463877eca51dfcffc6f022e63e3c5f1546adb64d23bdd066e58f4d4d541b5c49288c898278e6d7c375ec0f7f5841571299cd064a6262b72643a09ddd2716162287a982a7dd3a55e05c836b09de429c6a1e9a91da27b6d5820caf2fe3dab0301bcb580863bc5f9edde17ddf8db88755a43bdcfc055aff5202a885ae665532d2b95c5fc3bffd9ed9426ea11211ce58ab495a5af2d3e386562e80eac06f80e42686a2865dc2893f2e986ab8ada008fdc6e0e2dd194daa93088ffaa60d05430d510906977b75468ac6653d8a573f4ebdcdf13b2d197a986e90ac7f803e3086f67ecaee58c8de1dc7c9344edfb9f888e2e905cc129b63935e170d7841fbf831e8d352c393e907f63d5f8a077f7ad29eb241a3ff54470e84acc53b4bb1eb662c297828ee0e89f8ba35aef1cf3243d67876fe533bbac48554a1c1bd6298b7815f0196d4d5924eb84ff7e1f00ebfbc0afe75479de90dbbd0e983341b23be0752b2ba55dfe2e6e04e9fcb1e102def8c7819f9450a6f15d3f52d9a45def8eb81df0e9bdcd07cd4e8c591f98dd7928a5c28af481f21369ab5fe07301d8d48e6d03259eb542f0a220e220cc858cfa658d320a9abfe6aa66408f25e8be3b07a789a537df3e485f699f96ffa82a480d1209a6af06a0a6e273a75da1cf4c0d0f869884860fbb558a70152b4426d9c717cac580e6bcd6ab422e6a4bd28b3dc742981411bec4aef338522c0f7ccd1652a0dc2b612011c47c5fd2e3ca36a105e2475876ed4072ab99bf8c3ec4280f82a33ee2b5c809c9ec82722dbe695ca536e684445b6799be13b1a68ae7d9c4629111585aff15f239c1664f7b5499930c336c9fe81c2148fb89e373da91c0e06ab42573c151eb87d5e5804e6830eba84a9dbce0b0439accbf70a7bdf7d719ea8c7e6817a278a92942cb78d560fdcfdae4d8800d496c44a37e6a66cb7f2235614c5251ba6abddf54f4e5b89af1f5c6c96f763e5bffe0bf5bbcd9b942bcfdb3e32ed26ae2a6ac1ea960b6b7f587c350e25ef94073506b5b53ff3107ba4de405deb8612c16d2cdc7751ad10f8bbee10eb417c44ee9f746b92aba12ea78be5fbbb25da10ddd7b8d6a7687a717b3f3c950cd3e89b206311d495e71f1da246adb360c92f4989d0d8587fc4bbb7904c306b78c479c027eba599c5dbb504f43ffe1155c0cee54dc0520a094bb709bf4a903b37fa78dc8b9df8612b70ab0b23dc9fbda1f0ff0bb10fef934ce6b89091a125ac525f2d16d2e3d1d5cd8c485cb9875a5e4c430ae33e25779c507e04738dbab767d0dadf978624fa9cb518d51c3ea7f59c5fa036967b6bb2cc1ef9e4db3cfb0e13b952d7862ec7395febfd9a7638a33921e1eecc4cf14768ccbd41a0f024cdf15916b15e0c533657c67521df9031e5ee92da17142c26226043353c80d9cf9929e1eedeba517cd81c785d6eec92b0d4dc9a5202565fa46563da8fd4ccbfc5c57f5249c1337c31154f1eabcb08a53ed8cadf5297da0df3763939d2f0cbc98cbbb8552f4213b6fb55ba5f651f7df162598209e1bee75c99bfaa070677c620aee19f91a949a026600023e49554919da4bfcac1085fc77720a67eec335305ebb3a1fbafbebe24f5ea7e535542518dd18c736bafce62c08410957c92626bd053216293567789e54a2138125975feb9b7a3db2d7a3baf1baceff36d9e9ba76f80828b302fda922c4e8c94279835435c747060d7ca572f2016472819bbe4ef29995d869ae1f2c24028b3fb5cbb8a08bf337b6a33492bc816eb9f9c488f472b48c73bba9915c4ff6b011ed6776a7c352b1a4d62079dbe63475280b7c2c2cb431231a38ff5735a32f301568b414c14b2e6516dae1c6e18e9f97471e14efd781fd0001d6d75a2bb44214fe284820a5967380163b83a6542407578fa82b6e857a8c95b31bce34bef1b3d144a27024b543d6b52b8e7282943520387a302c02a6fc4476b68e40515ffa18f7717de88b80b1ac66bf3a2b0632305eac9f5c9356bc95c9057494da3a9f2bc5ea1d010def988e890759c5398bbeb437465773fdc556b59ed485d6087aed056f4bafd24cab5d38d12973c61a9d8a2f3e784b2cc7f8e5fa1a6662a8378cda15697e926841594f2f394fa5a34ab6350fd8c4d2cd9e4bead1e03d83a1f3dae6ea49056d4978740ef005dc57e346603fd48abe96fccd48e5bb64cc7159d9ff83e28272a8ec5e75ed19eb72130c9a261b2be8c7f030f17a57353c85a416366541acaa38ddd76ff99a1b4e836f95b2625774676386e0875adfcdcc0ba48db5a6909724ea6481295966629392b6052bbf652c8b33c3a21b64bff397c0eb26c42e013086e9e5701720028e7f229ee16297c4d2d89b2eec1a1298352447f057de86040744c9c92ac5e7df0d55b57290f38606f5b41c2134f00ef900f6035cb781292999e30c9827920b5c5dbbcde9ba5af4ac03b2296303599452e5817578bc4891d256e614daed18252afe15ce5cc4158e149b57653cdda34d16615b30ecec915abedcd294f9e1d4af9b6cf84954349f9ce11b2832473a69b3e3f2e7a811bef7de1f7a1cef7dbc34154e38d7c1688275bb92018932fa8019532c28bb5d9fa9e8b694dd4996eec2d2f0b3d048c8f234146487fd1ec9cf753e955f614ab3df33e05ebf74cd2dc59c1dcc6cc1afc289d01822635c3d694e5046051e3b2a6d68f37b40efbf3c169abe90f2c99b8130b7cced6f94ad89b3ffc7cc2cb914beccb55f1607b63afae3b690c92e5abc71a5d4b0f0b6ac7f682c4c324d76e09c8c645ced5d1da376ae07d1b912b9a0b2d59498f2ee920b307d24bc26266df52127c6c8049ced27d0ba0554ae2a3f3bfd418f4d29238c416f2d4fe829f39c9740f5667f5b6210b3f7a36eb7d66c197d1a29f899ba3c0fdf99fd0038a4416d278a99c5fb585902e849fea683c854f2f4881352e73c9497463f60d8262b7c6a265c7957b461ce4e3556203f40fa713622d58240be16c9ad05cdfd5a4936211e243518ae432e5e4d1b9abcbb67f34d7d9870eb24a6df47cbaec426e90a4acbe3a1a2ec3c101465aa1b86288d71394613b5e8d28109fc9b7da1c07216f1dfc9751f348883b39a90cfa5a6f837e54307931bbbcce88005313d7f316366987bc62d0d586217a6475c485a8ba04d4c86ee963a583ebd717fb585a7957f5a56953e85ec9d0d5a5091248eaa92b5301f9b7787824cac8286c274d0ab7b3a64c4b29f1a4d60eeee5b1e860d065abb72c6f74ed194079aea18840bb90b4109085b5a6454a0428b261e35fd6dfe5207a7eb00b11ed0279e36af2af6a937958fc793032abf75b076a4227df71c03074e21e46e6ac9d71b0afac32db22bc0c7132504335ec53e4915daf05d0f81b4e8d3834b96b86d095075c8fd12babb377457a317717d007a6afd5d1069a34974855c3ea8f04662f7766313a5609cc1fc2ba1c4453401fbba94a18cfb1a5eddd25b2cd66521815611eb675d649dc4fa8f3ba5fb35f18a116f6486fd28f59ea95ed8e9cd0890e5c0f92dd718a330bfaf7142c8da323081ec194932202261ff566a9d07951bd5001e1dcc56d7f9b0096b42cf7ec3e28765d648b117986015dd4f86060ac117545cc7e0354b0dc0922ea874405c5acf5cb27a6e4acbc87a57c50f41a267d373955878f0f7484ca05d9c016633d5f151270442fa64a322c9ce53102df0934eb91e8f8bb090c2f71188dde0c918704a008cb7ca8d9d5249e6dff3fc9b8f418570666e9abf804faf8c9a60d0fd6cbfa755e4697b98634da04a03142f2accc72a01f382007e4442d88a18c15c73bf18abd9c485c09b44f9c87bde50124c47a8af165c46576d6b3104827a8bedec7e2fca04b3894416b0eb24f4d82450807e6a8705f7382a0d43beb61e360d0f983849845f2800708b3596383d870d6467df8144595ad3d2ee9c305fa5d1d12c375c0a6d519877d079518f94ce4167c852e9915998fdb60c81a34a73c1e484de1a77f6d7748b5bee61833bad1fbdeff6d23aff594d663b1157174194fad4749fe21a736540872914c4592ef3ba42f26a76323fa5df1aff9bef56ca35a9284cec0e9214993e026c0e1221edfb16871badbf6de6d1d6825ff6aae048d855665a4cf09d6ee5e5939114ebabdd45ccd0d84b0e5c796fbc42f8dc2a5251efa805492d489ad6ddaf9144d3b125814635d6949cf37c5bc208b34696ee1b59fde98b862776f8d0d314b1d3c4f34d8e8efa0eed4e0f4c228b3489c5c156a9d585c26f9da5fc560178bd4bda533272398281d04ec8a24a523dd80ce2e5f49c69199b37fc335930dd30f1e5c518ff3236c355c145875d056f3c6bd34a7f6851792c0c6b1e4a0df7c89e6b063090aa1beac3fe584e14a00bce09586358f7f2677a2f7e8f90749b39581371238934c37de9f6d41be4fb1bac134736439ada535d00b66a0bef2d71640022bcd45b7fec06a8ee8f7286a51084c3587dea8ca0db909133776696ef3116556ea68f13fc8414ac1d78f2cf9d3f1462dfa7cebae62ba0a038ff2604345aaecc39b6ba3f151c46680639131c6de7e9562f3c668214a41bb23999d0c3974ebbd92675ec5974250a613b4869f971bb5221d9b4588eb6d5404ba7afed51829dcc00b75cabef742eef2c1f1f6dd3532a0d5a51980b3d375fecd125d9e24a70b84de75ee37f6dafaa532d443675568ca47964496ff52a30744fe7168035fafc3ebfd1af92bd507117d4e92d1636ef78bb04e403a4bcb21ce307f20c3b7f0f8f8190640bf30c348307e2e44c47190ac1fe5e3e22ceb88166fc9386797423d4a5317e23067cd2863ffb1ba31431a234d2bee3f729567ef499517118d0c2ab06d7cec77321a8b6c21251ddba377e48fa35ad148389c486a84e623f3dc49f9af281aa0af8d00f0f74a4bca77e087593d765198e87b6a15608d0af4c49a7736a445d53c718b408631a618c177319c01938ebb4b06852656392daa926e10bd6af68a57c6a47203 +MD = 6d927a2446b30c8feb016aa9f6504fc318294112194aac4f673913e6 + +Len = 91312 +Msg = 77e06971a593ddb342d023207dde00b95d76d2b5540fc6dc185f4b31ae1ec7d3c70d88255037fd2d4576263ac63a49ca6c86e7aadd3bee5f9e9930c5290314f640028b6d808d466c3988279a7d8af5f177e353d7fedef38b6a4307c3a720f89488c95b915d1e2137c70c0d89cb576cf726960084e07f3d282464b8734ffedc74476aded90e71f457970cc24dd82715a420a6d4f9aba634fe74052a1d4a24265f26ebfe8dbc0e2895508f2d2ecb855abf0e1bb97d86db40d4002d4709bf1a401dcc56a2f48e7e26b79a9e3676ccf6a21297fe965a99a7c97473e4f67fd7699076e3b2b257ad4855851f40c56b05045663645652d60d9137a473321fc6ba988032100815fe40f41cc9847dc2579b36dc7b1c2bd73a0a22f22da820aa278f2f7618fd5fb531700be549745d1580b9149d2268850cceb7e062d7bcb580ea7eb7dcf152bf7938651417ce95e9a72f8527011ff06dd9d93d55ef6954fa8757b1b71985b631495a469719208f285eab27f6713c5bea26a5c40902ad1bf5a8b54db7959cd2bb0de13b1c55070b23233ec80a533f5205db7873830169b6b0cc4e7d3fb8fe4e68ad136e2c324bb1e0df2e90e910f17cc5e19b724b5666d033d96867d8ea72d13d1239044e18b3286978c4a61d111a82321e56eae9676c0f84b94c330993c20344229a280b6f0919c6d848332ebd820b547bf003e59e431bad52420a5b1bb48e84c68000eaa0132bfde5025ea27bf0c034e0b3e4c862b29db68e911455ea111705e731b473119a071889395003b52e48d936e5b61a1a823da55383787f68a049d06bf66d2e2b65541eaa3730d8d2024d4b63cfa061307ba2848b5e5f61fe2bc9ec3c1753a4563ebb18324227aa3a35749351b9cb270b65755a1d6bf0841278426140dc8d5cfbebe40d08a35d00548f67b8e6ea5ef313085d30f1f2546f0e515a38618d44de8035760514a2f9628ad7cec20cac824eb02c030def3bb2aa587cb97885719fb34fe41a093e86245843d750baaa455fbf4a980ef9ff8d33be5ac1082996d1c762cec0771f6e99056be85596a7a8fe1cce491527fd0932ff327aeaef537bf5e373679036528c21c522df1a4891ed1fe203156bf61ff5703d8e22bd15ff1c251c6f811efea780678b0691ee0d8063f0d8e716622269ab90155bb904233561a99add8330782832b3809e66988d7df1b92701b5c154e313d9b01fa785c0fb32c88445d78f4bdc8b4dcb72c7e2718f7fc1f6d958523394169536655309955b77cc022fe40320cb717c960a1a9261bff6516ef869db68849a0acfb227574a5c18fb3e2412549ffecd8906efc87104143cb1b7e54e259abb8882a1908a398606fd9e5dabc9496f7c88bc45a83a4703963a29f82871f87242c943d786e475f1620ffc8a4d71ab394d885d7bbdd7dc054dd801594a381c98204395971d9ed43477345feb917242a47ab7b4cfb606f7b342ff8003d20d58b35de0c209db1e1ef74e550da8ff35d6590afc096a1c3162b57c95ef1e4857756b028711574bcd1be1ed5b4fea1f202fff053ea37477bfe3b2038396d1357d3c6a1520c9a6f213929b5e2c6dd97a9c143f7467cb144d184353e0b2bd4520e97255a19233215a594dcda9b2af9c97124fc15e5ec97228a4493f1a09aca29102e2d7abc797ed0a05121ed4d35d5cfee8a62ccb0be5b78fcabf1eb96faa0f103053963da63d358a81aa36e979be403888e229c356670b0bf56b9ac6ce01b426db8c3a5e176c1f6333ddbeef8b1b71cc58cb5f4f279695238a1759470df7ba5a6b566c17026dd31c85725eeff1bc1642c228777666bb7e5ff289034714d549354879d46f4f897a3dde33bdf093e958232cc31841fb1eed47958a41cbcbe3883edbbd196ee7053c4ea5e684fa59ea5ff60062ebb6ce070b64dbe1bbdd1a68a0fd8aeae31cb02c40d844545a152b065243a5ce97e0c8be003d2d581884e9aeb9fabec7dc829345af632245e84af187599383cfc5c4cf8af35af1b500c920fbf9bee01daaa77897b075a781d6a093b39e6c022c1d6cccb50c4491c11db2a7988bd056b4f593486b6c983bcfcb20f9d346598aaf46dfa88575827344144a66cd95b88a54664fe9090b5346f86fd10b2e7cdf831ee9254943539c0106909645e140ffe2c5a4e245b9b42e30c56bbbb20e66885542ad479936d11ba1ce37a02d1eb32cc8ce585443c38fb261fb67e6d4b92cdb68e33b4c7fa81486bd65b16f04ca17c7a3392aaeca6ec56642650a5b5a78f76025c93a3ce2df4765bc94a70bb42e9358dbccc1f7c4047ed339cafd212d93efa0f2bb531fac2490410621c17d23925068d850c63718cbe17faff1e84033523b2238822efec4bf17a003d4a6cc3b3d757e018ce076ae0c17f40da371c156fd046e60e672e012f8050d1b77ff00e2792b23c04ab8bd6e0e47bab9a843ab7ddb710dd0afc8ce7e17820db6d07322028c9ade7c50f613401b9a571dc804069035ab86f2a5d7cff063b52a3ca9ab3882bfe9379e6741810c7938559fcb5dda7653d9612d9048eb5025c7eb15c84e4d4a5a41b68c57410eba71483ca978f530197d2427e837c22a86a6e0d8a9f5056642a5c9e4afe89fc2324bf392a298750f60fbb45f8d63ee957a2b267a60fa788d52e8aa486fe203a55c4f60e1f2f384803314b09183dc733315ffc458a39e4ec9626a0b6b350c14c020c5b8b00051cb8a7a124046326afb0d3d69e0fbd8a830235a7415d3672f7b1a67f42288367af1351d3b8e0402d52b29dbb0a3e969e1c5a1224eef0a6f13e0bb1725c7f0fb359f8905d8bf565be4ad91d81d34acbc11b64ea240c398b380e9ac1aa0ce70b74c7d8f1830fec1a561294d1af8bbcc3b00aa2fc392b6039d3e41f456ad6090d385324e3f8d71cf481246638b8962cf4c754a4e6b8bf2d593148e9bb594a5d9b5a967ce63354007acbfaddd12174f3f59393eb283749f95ffcc79aa1e9cc4d2c680c3186a7194f1393206c296ecaaa3c9152d63f495e4cc482ca928780ee6046ed1ef333e8995165832f81b014e9c8404cebf6aa436ea01d6fdc71dad3232f516669227c5c56afd6f862bef3a864d69722f9dce7d9fd9bc11067a92a450d12f240555fde96d3c2fe8f7484629dbe4da7bff6f976618d88661116b8d45b0ea3a0277e0bc90c83232294df729b697895f8705dccd46e80fe52ee44119789aa69c1683da6ca41f75909c50df9ec9006681fe0a8d790758a763e049a53b25552ddfcaf3ec160cba2cd0a7c7a9b04a60a0c748d62aa390b0c888df053ffd342aa68a858ebdc1b0e1807bb47cfc6421fd62bacd315a51c93899db93e3b6668d613926ae1bf67578dc99182a3581c43620d2e0f5e3c58d9a3743e465aab37e1942103aaf633e3a4cf29e2f71bbe0d7711018c429b3145eebf7ed2bbb21dd4ebe14504eef2e3e19146db749f1d6c0a5bb175debcf6befcda4bec039fe12dddd652124ebd6439d19b8930eed114dc937fa7bc9df51d1fde0add5e49597435a34f7afb298cc6c044320adc8a33ceaa4941885832715aee7a1ee8480c7ec7cfd595a0722dd396f1b9d350210f3d773f9c4fb7db44b85c954185012bd5867876e5678719d4285158932dddc0c664bb16fd08dab83d307eced4cb9c9c2cf6f2b543337344b501826f7070181e483006cafbfb456194805dd5a4512efb8b46b2f57f6819a538e5b6a0c268a3ac1d25e6c61995ac89d32e665420b44cdc690c55c20a93de9dd84b4a971965e4fcbdcce782c6766473817124c4ea736ab15e9e47a5753536a13bb8caacd5f67082928b65ab830c01c1281f15a2520cfd1cc4a3051a4fdaa651bba4c36c98a8bad043f7fd8aefc508f52f7eb576f7ef986143811a8adae2c221d095a150d1db48583a792bbb6d3fee72102680ad6c99b13153def481d6ec0e84231200f4023c9d9cfea55ca77beb26ea629d03c000a9cc0f6e032fa9a454e01b1b904eb0aa1b2f10f8f32cf9ac4546a0af48bb59549e6d5e0aa4284cc3cbfb39329707315a157156c1f9090c6eecc2474eb013d3e8c609afa2188ae5d5af947100acb6d062aa08d0e21d7d7a44302e40d979a9ca3ddf2576dcf6a42f2a8e5054fe37da2884575a01c1d6e6adccbdef2fc7fbf996b438453603c5106362c6b34793ceeda41f9be98be9cbf11158e49956a2bd6fe3ec7fed7fceea6c4cef0741db59d86ddd94e63bb1e253196f79529167f244991c66f482b686fcf4265fce6092c8fad72f94c4c5261402cc02ce768bd62f17e1ba8454b97cd473649a156ab3e0699cb6349fc61a4b2751856598cecd23c1adf638f51ed6353fc41a02a08a9056a44487670658bfb374d5e21298d9f9d3428d233219a17d621185a11a91acaa580178c74178fb09d184f64e941f1676673a2c1510628b2396023e862c692f468719aff24e583b9d37e0493754cc02e7421101386e703a4d437a3535c287a11946555095083488fe591f2538ff002db1065fa309a6c34d7efcf2202c778d9087283d113be98e6181b78a30dfdd5c0568267e980553cc231d250275f6b5db8c14af4958337cd663ebd5c9f2788a402871250656b7f00b59cc5e13bd10f801e2464e029c383cacfe812646c0bf805ce560848f459df5f15ff0faae5c07d881319076e16396a3629fe63b9941f159f2eabab7620b23e02eb41f9d4ad947b1ea0887cc6e34fb4b97d67f8829fcda71b296e440370de64903e4ccb871bb6d2eacb590c11186c28fcd20d19e8137c7520c7871b166c4519b21707cdeab88c4a939e74fc773ef790a730d70e137a93485711de78d89d4f25107d5a46260b7faac221c1971fdc5ab2629fad1e2a5b7ce8680e5ba3718a654f51782d80629cf8bc1e5b2924327afc56d3287793553f9e1dfac7e7e308bced601e1068c1c7f45d46505492ead7a04546a5d21db3bead61afb5426882c5b951211e4ef4527d9a1711ff14e63237d79d497ea688c78a2d2d654389c8c6d10bf757fa39b77bab168fe5d4a40b4479a66c2607aa9e16e4476a0849a4edf8543949cd59da9a837af12c89770beb68c7961aa6e7e848eaf28480607299c15f75ccad4ae43785b411b255c78f516ce6462e0f91c6686f89dc6bd83563722a455d4b8d95435a615499e17465c47f780520f6b4af4e31f93ccb85d84fc73712f0343e50771d4b14ac3907f02cc09bf60f7d766fc7254ad04be758e97644ee60a9212e5eb81a1088041aab31e428b0cd4a8437a9a3f3bedafe576e747182a1fcb84ca21f20e3b3a3a463559f55a7c3e7ff5ec0cb096192019d444fdf092a57cd65de22fb76203c4fd33d8da246e3de2b7532993bc216d02b6fd5819306e419bdf8ff365a8478b173dad0dca281840881f6294b6396bb8042bd338ef93057eeb3b8d667a410941cf70143c907cc334ad1c86b5daa4cf8a82dcf85fe784e2cde98ef8c3c41e31c84c290bedd39f098ab03341f5777ae7452d4edf457772a0bf152e3483e99c5b7f2becf6b9ea0b55a3300826ec23482d8851f5fa823608a9a30cadc33f3147e0d6dd2067096a4e221eaaefa7f244891cb4af66cc8e99a3784a2e82475e51bd5c7fde67cf54dae4197d9f6e47b081ba3f6a8415e7c328df96f4f9502359c14938daae37a234a24986207c08789f3158001a7e87bee85a1970440b7bd9b9f6980067daf48211570b02a7cf52cd26f9eef934fd30c436a3edbea7c379ed1768064db7d332e1836f85198417b1b7d031eb954a9eb58a669cc8bc90bfeedfca9c307b4b3577430352642535d3c9cb338fda6eebc16a93d0bb3704bf6f3f247c0983137250461909b614d04d81ff79c94a37e06903d4530d75b521644fdf4d84469a90fdd203e61f0103853bb0b735fa17809472e4975a8562df9d2fd063dd7bd9d38e2e39453caba9dcce70dea5925e7e50f569d2081cd0e8f2c282af5136db19ca6593d49e8f4836fd169d6a3f115ed5057dee5acb1c689eab5bfd2b2bfc2aacebb1bf5264507d2ee0f801e1e83583b22aa850fd34dbc4fa75a41fd2488fd2f9b3ed11312b22a30824ed5ee43571559c4d0f3227f9cd6e62ce453b335b846c96bf9229df77685249355104dfab575d09c91d12697e73dd8e31a9ffdcc96c7fea6b2b79dbcda413689edd8442be4a02614b5c724037618ad32c6cde2d169a559b432371a492686eeccded5dabe2dbde693037c22ab9190eb83ae856b2d7a0b5ffd414b1d86a27bd5c4f0b0179bd8f4958044992b7780cd1c3d9b6e9fc6111f9aeaa69bad5b954972daea1103aa2d6fbd4540c5444f8af6c7c856308685750991e12bced2b049174d74969fa7d47353e549bfa9771bf933758ca4742852f0f2cc4b968c946d040eeffcba030afff4cb96f489edcbc313aeadf150e28e16c802d491b07ffc7a0f56dfd81fe53414f6fc57ae6538492f218cf75f2021bfb746603019414d11bfb216a5728deb2efcc211b0df1d32f7476af8db3ededac31fb235684d119edc243477ca30ccc0ff9da03029ef7784dff43818e2f650b4a33454a80594e71b6392dfa0d57ca30aafe1d7824b473cd6091cd11493ef3f5866e073e28e558d6bb0eff9b94ebddb7247afb12e9d4d34cf7ba87e157791726d140a590a8bfac937cb25cbecbe5a3c9fceee745ca86a26183f8187431445b39cb69a4c4984ea6427ba1a9d5facbd8e3a4c886936f206db595d8d34c5f571c88d527795c7028d26e287b8b73aa04d99eaca64d8e1058a1c39dbb6cdc49f7f7ae7f38b7cab8c4bd6113ae560a6227225584e6a0988695caf60c3e399679cd591529ebd481eab8c3e5bd98be1cbbb94f92be3824351a4e65c771dfce1d772ddd5785df54347e6b824696e9182d0f21bde0c8e94d064408fed26efe8ed3bacfd0efe371bb34fc53751e200df8bdd50709ca35988f6eac5be2814439105bccf9f038f3518e15dd0718d6f985d441c5cf9fb974b46fe0bb9ddd7ea20de7182652a7dd15dd2159a90cf9fb83df3f5b39e1fc3916cb730eea653c04f8fb778b4f606446cb932972d8cb75164f789e5ca9e4abb38c5c1d3bc1388acec9604647a089a20095120ae3f4c92691cce075d8ae5e3ac355d4d319c89e4626940ad7bfd2550d9502b85a3f859c9b087cb55a51afa505e2f3d4490b78fcfac6d929b0665d48f36e85147be7f3ac2ee4ef55b05a365fb99cf6b8c3935adb150a096b44cda9ec0007acb5047fd77e7eb185502c54daf4a25bdf10f743d6bf217ab53e197830949ffad9f868699999f6e8ef1302c3f5fa7c9a0d7b388f752fac936d10b2d889f93fb2ad7d3c37c27514158d3ce83a2fd794e202362bf8ce9312ee819185712e806bc987b1e45cda9672a1d03c5129d11287de6df035f24b8000d6a32f25d496b0a09a0914f55b5a848f28587fb2159241c1c9a127eb1e648cd3063247f8754b008acea234d3b5cab5c613a695af8febdbcf3e4c5bbfdfb20015d7cf8a91d5b3f666b1d38023fe93a0b3ee1b1c9dfb36572cc6affa18b8bc9055d5db5566688a18e0fe1d955a985ddbd5325652f1da0a3a66dd7c81aa2bdc940f8ad6370ab015de660e00d2ec0571dda66ab8f76fbeeffbe9fd1280e8bb9aa19f5150bde34eefbd825bfdc75cd8881ca401e3685c1c501232a0028638fa8f3fa1e3cb388497803cb28294e12183f92f5a9246344b74c323dd60ecf02f4b22d4a39cb665632c7fe272fc46ceee9a5d6c468651d9b24ac19746ba026d302fedf700f6929303602745303383def88e2d79d478b6c72520c3f31b06133be03b591d668bf06fe9f51ebb96c2ec9fe3c1d1de90c3b58b187952ada6ef600ac3dfecce30c7404a8b3ddedc0314e19044f7e2e11801fea400c6f64d96d0a9583f90216ffc2312b16bbce01d01c3f34e7072e947b6bdf290729c175947543f82d7fe8fa92539e8431fe4cb051f3aa2291ad55d79195231eef25b3e3754e49339017d9fd04886216dfc67e80ab7f36ece8881a7dbac592cfde4a6f38e2bfc54e9609fda9be2726ea09598cfb47888c99d6e2a6105dc5d446bdde1afb45925f4f269c7b8526f8910698009fa98bd6533142012118e45b928b752adfb5058dbe40271a7c19a5c54c747203df11e03034bd132eb21bb65074a4ec76e4ed8a798b2883c927eea454fe3c81aa73bbaf5fd74433b181a33b6b219b0c0a512b3c1d6d1021f2a58b896e5064ab3d832f5e2ce3ce89d2b737db764278bc2d4ff883430dffe9dc1d78bddbeaf6da0339f6575c0164fdd97c60fe377e41e32806dac7b112fdc3d1b83ea96373f9f545bb9700bad80c770df7a40c787e006b439d5b7030251397179e64b4ce9476e44b319ac30d11d0dfb8518e6dffe9bc3bc63c03e688ee474df7f67245e3f4748f5dc488071c53b81d20b1a38994687e3bf90d59918114a3cdb9e8f1c66b3cfbdec39be733b047cb1a8d406dc901a34d532435e5dae3402fffa59e689e2f1314b9c4e042b1919411bc492673930d41316b8edf2f277519f2cc033d5f35f422c508aab81ee887e392ec9b8a3d507feb326b8031c0e10048f41a1af05ef3851018b3bb4d05405adc5793ca9454692048593b42531f714c743dd333ddee40a98615a240c77e21d12667971f6e3f44b801adc41c6ed43d2146d6dd962c9684272cc3bd804e12f3b66acae2e23d864b0fbd36ec56aa68af4766c6228b06df27c8a92aedc508471ecf4f895a5b2cb2e5ec25fd9c372e622e857b15885a93509154a652185520a80ae57eabe9d1604a7918e009bd08234a21a52dcbf94afa712a93ca442779bcba20bf9e38768e04d6715c97633512b0a9f26d26f15ca464ca5b4cbe0703790507c6275839e8d83ede347ef211ee9afe0508a60b8f98b1f8e48a4929a3929d221665e354b529f836eb2a46981dceeb35e9cb1887ab97b6df462150b421be2d3b6f66bc39b420361684bb7e328ebf4c7cdaa38a404f40fe4078862a07886e707a9b2f7ab03eb5d903324fec676da804fb62f8c5de827bd04403239fc9e08aaf05212ae5605cd02b277c4e5ae0c1705cdb0832920a4d3073126e5e76a231f9320489bec4f2155972aaea208e4592019c4454b9b76cb64730d441a1793c84a541a05c52e10d7238f7b4042d503de9420c5dcff6fcabc8a94faf05536e3ce07524002050025a7956026b53de6a70cd1bf34f004f2b6f883c18cd41db1e4d4e51224e601ff0803499dafa5e99a28746749b41702d0a6200e9d2567da35115d52185afa1277328abeac987adc7c22a5c354a5ca5f9632a3799c7724112ce3c7dcd934d6dd052fae532153bc9d19000184749c82919fc6f35323d4716905f6b4e3e95504b82579dea57073d391dd5b28190e0ac84f79dda039d7d008385ca4a515ad2e0c4a548bac243e7b6851558e79ff956303cf91012a8c3cfc31159d8808d0a94235fa1eef876dcfdcd3620e3487b6af57edb891cc02c8b7ab8467551b60a372144a4de11000c0c90abd3a53c7d1ccc03bbe90e888c98dcc809ad3ffd93d1c7c3691bc579798fb9ea77e40e2c2d8b05c912ecf01d1df3a0ffdbcb20a4c0e9a4bfbb4dbced0c04cd515af2c27b00ceff8fa96e96a31c45be68592a810de45ab46061c12c3761752f0e7c8429f1a0efa09da8f66ae230961e4ba851c801a82de1ed83ff7e1d1fe9c7690422ab56b2f5d23a380dd3a102efa8f0f3c85f48b46911ad4b901868ef697da91a54b071e1e97caf813939aa3a57449e6018acaaaf162ee9dffb64e078fc3918e8a3a00bd2d28645aa0504c37fd7da9f17c819ef413d1fea67c8c84c63aae3fc9396e3ec30b8d741dbf69db57976523941600cde13e5ccf50c80ae75577b639e46b6e1dca1a459ee3e966a47d13c94b50668ef40cd161d55f5aa7d24fd78a146278903a3cd9cf393f86cd4432f31885b8d6929dd17d8fa504cce9d1ffda8863c5e99af085eab8d773400446f3a5e1772ffeb227d97344b303674762efe14f8c7146e4ed5f9d610e318db20959bca2744837442e8f831f83bdd25701ba8c2e030718e49d04827621fcc84d17bfa7da117428ef1e5e0d8e9ba6968f3ada4bc27c09c8306c2f3a56c737983c0eafd806e3464c0973ef83007f402c667ab9a0ab3bcbed5ef72a2581627476154a94fda74e310929cb9e7413833cec634de31b26e6ffe0a6baafc4949825da5f48296939d6b6e8d681f551365bdf8f0c20e12be3f2085ace130a97febcde4d70a3b7bb4d016a7386337ecaf77dca6cc7902e5350d167a43bbcd5202e5510380fd9da544f52ae31cf6cb511c54d501e3c2845120c29a065560499fdb2053e3273570bd4bf3f049bf87a12f62e6f330bc035afe8645f4516c386c3711831eab541a7c6ad2b4b002ab80832c8a137d5bdfa54d956f7e6c820fabfec3acf5f9848f148855df1fb235684737f09ac5baacd51125bee4554ac2c721c6eab5602b96618b5e257d1c3d0b7c4685249de3f34925aeaa20ebb2d5381a028d5533abfd0851e7c483b1939aac71e337709855715a57e3a4648f7d560d92b61bab2ebeb703e8908317856c123fcf88137b95037908f41ada31d59e1568b7a53895af81a1aeacee6388008febed1c9ce3ee9bd5567a83ba1530c7fd5a721038acbbbcdc023227692b7f2ae56ddde2876d70b3b34eda8c2b1d096c836d5225d53ec460b724b6e16aa5a30c54e238a8b07aaae485ab4d97d4ba63cc1695317ee6b859a0fa4d636157979dadc59025f781d1443633b3fd2d1fb4e6f09f1c37a4d1e021868dc6612f9aca141621c0cd56613ce5b1a5af12d573d23bdf07488b1e007fc51958d7d7d39906b14d4ebb574db881355ec3e6b41838dd0aa134625674d95cec6143c7edd5be121c5c36c6ec64ef69de4476a2097dd79efa3f10b1bf2fc6413f6737e0cdbe70b8fc4abf2cb4246cbc856ba4293c8cb6dab4c0827fefd62df465321a689c1616bef920d333d6149842d5dc36c573cd3e5ce02c71120ef1783e07cad6a885631aedbce559257bbddbc2739e15bbd6c9d7eb258cc7b443080ee7cd3851e8ae2fe30deda13948caa59e060ab927568f07ea4e2be76baab6a457b75e8375703f01d9e6345d5be5ec5647d4403656ddc30fdd4e9b45453f904cbb7663b328876162643f3720a743085840f5bd1c89979d6a1ab31dae3dbaf989a2eb83d154763bd9ece2a1f205ac4731ef312a73a8cd429f0745582b3b6218e274df67e4e086f7eed99518db5d66d16bbe4f2f449ac8dd360ecbf5c3278116df991ab7f4b4fcba29932144e497bacd8d1419739649cd94b8960f9b7fe95d1a087a641a0ab823af13824ecf149bf0632058559f719c278fac06d7f365693e4de67d85382cd442fb330fe35e745150bdabf4cc5add7b1cf79ac8eca580906ed7000b44ba65f0a0c911a0aa9c0aa12200b64f464de3cef6f40a431658d54434dfde8d6a48baf4863f369f692ee074ad57cad18b208a7dfbad85df1cb46e6ed78d0969bf8935c83c852972e9bffeb03ae86ee2627adb71744b9204c86352f7a00a08090b26dd540ac47283f2f56a3f11db2aea9403dc90a8f5ba1ae00a89c5d77e63d316c6ba8138249a384c782e077a598651ea6497c3e1d484892d541cc2c411a331a812d5350dcc28fbbef152f2bd8a0b7f294514f3651078ba77e612d4aee94f8a88b23559d2e5a4331108dce7219540dd1c4d5a067ed01e13866b73e5df31ef457f4de2d6d09697470d64d6cdefa2add18a2571e6713cfffd218947dc9d0f0ccc558be5924c0888a17aae478e70dbdbc43a756179897ea2e112e897a131ab2d86d21645779162ffa8208d3811e966511ff5e432a90dbb8f251f316a1ce32edadbbd930a6ce6cd84c4c7aab03ea56b9748831aed5c441e4f33110cc935fac09b33e0ad3d589271a05d36acb7fdeb1336a9acc09a7c77cc6971af20bbd4c088f9f6010ae525de75dadb363c55360285b5a8387e3ff0eff06549c31648e17baf7b8ce9520aba1202bba78f0293d133ea9cafeefbe6a0f1b0cc2213957844745caa5e602eb4ff763fca2709a578b6c66a742597e09674c8342563694654e5f3b80cd22e46ecdc51558fc46bce0dce032cc472fbd45854bba5f8768bd1e3ac3feb2b511a41b939ed6b92e67f2459ff315914fde2803328112bcec241dd2e82a21c8f44edc724fe90aa5cf60b5064329a18ed30148b2fd813ed2daf55123b4d6274be116f823413833a745ad8f936508492d572589e544c0914a0a58d1a14f7c81a42226817f1600e42627caec8d83f38ef562c7861ab6d3bc7ac0cb39ac1661c36a3dda03163ce78eaafc3556551e9fe56f8c43a7b3b21f02fdb4c8d3d4884a6f267acdf7693430b5ce2969477a9341def42a367950c517174b4cde4a8b337ad7418f6ec8e88a80dbd835f34a6e80adfe3bc31c75627e607bdbff87f860a697be43d2290224ae6c7381a85fe9c17528a5aeed6216793c6f8328533287d5301566b5f9a93dae2e381f23070b7fe3ef4677b61fb3e6f58db8cfd8de7a53598e7873105c5bd5d578983164c872a7763d7be6f9c06e7177f0b0d435f7dbf58e003565db70bd554b1bf14caf7341ead90e5d75e2761e2070f40c12f845b3e8b343d0a17fed4a566f96c7d36b8df5a48cc05f96f8b72f7e61061f2e683ebea789b7ded896088f33c367a078417eea7f1201f6eca4fa3f05d8b56e693e4948bc71dab45d8678f887d70d0f7d99ccacd50921c7c98fb5b94138607e55c30bde820c2af5b2f9b522cd2af569860d0db940c2de26c011801aab10c5c3969eed0ca29937177b48337a6e3fcf4313e3a89c4cdf65a862c2dfffbde223d29e3a634f98d97d9e18fa7a7c0575e92099e633d243df76c1142c2bc4f43d292fcf2e1513df2d6d0e0e98f0b40d7de1869a6d15d7d023701576a5fa06d872343fbbd258f5e01593cbdeac4c9ef0a836e997e0e5397c4beff9ecd8d131f531e386e6dfd5623612707c1b9cd4b9599557de14fa2853a2c95502f92d37d2b4fc9599d29ee0e55ba4817317f32f7fa2b5c2b8941135d2ee1c3da52e2ba465a222e8fcf1a821fbcb6c55658637c37e569a161d87beb413a8c50874ee5c9d6747555c04d6840f120fba5aa7d8e327220fa2b081726b19b28d5453d6dc2889641ef44d5603ab0ec4931f0fde727dc0f718802068f69eed2be63a9e6f5a27fec893905b74eb85b79ff01af36df570278a1b82f45856d294ec5df84692fac374113faa04c5f0cc8fe0913e93dad462d147834b9ab4459ea7704f0deae630937fea8db1b7edd5b7fe5300ea6fa991be44bbda4a8221356bab5453fc09dd9e00789108480340ed009943c9aee55ebffb0853aaf0591398c1f704e74311ed85a304c139cd7563c90ed75f560ca36ea19182ab5fed7dfff22a310e8363a19a99f39ad78cc26cbadc6b3ee22084185df92a4a2f73926f6ad41cefddb2de27695d6aa1609bb777da998e4698d3a5c2a1291dc56c807fabd8b10279fef02311de2280cee8c11d1537a2e074dfc9d220dcb3f49acef105c1ce0b8365fec5d2ff6d8bce59dca783d3567b1a40238d99b1652c3720d36fd53fbf66083a399e5e5eac1bbc08b8b96c10bb74944f00997cf2eee46dfe26376e842133197d4bf435adfe34c2220971368bdb31d6e7f367fc73be9f019913f2222d98053f95b261f96be889895c4b5983734a356aa1789388a2689e8a78492aa09a985ed319e961fa270f6c6a0dfafcd3856cf1b8020c86b20d81757112124b5a5986927c807d7ee85dc75ffccd94b59720c7e957902bcbf9238da64e0d2bcecff8f762a45fdb03247e94f6b9f1a52e5ed3ff9ec1c252ddde72d1c389bfe24f71e77f21e30e7eb94f181ca31a30a8b18b2d58947f1f1e36c27a123faca0c227d0a36262b122f4ebb8a8b307a6011c09bc8b874ce81cfa5155a7b39d3f6667f26ccb65a77713ca2501aeec76d5d98b71537ce02ab53253c8089a3a4eba673029c6bddd62dd876aefaaa94d8332205392f08017d03f05c7154bc00ac69629b7584ef95e173cc453c624064aaf337c20e9142372b01dedd0a39f97c9b76b2469e8961c5c471d711122fe74687d62535fee2ed5a56caa70fcfd94afeb7391fdc4751c855c8518042f90aa422b50473c8d1ca12514489d2598ad9b66f4adb30c536842c2c32384f40b99b81e07da4a9e24ef3b7043d64e82501e445b59a836e6a34cb95344d50cd741a89856927de4fea3f02e75b8b8370dafda000b9f05a5f3108ce0c5460c18144e47db8a3fbdcee4a6aa2a73e750ff2df46b5ee6393888d837c349874b2b3f419de1e237741c30d69977901954230f79ea4cc189ccd3480c956a5427c8c4dac5cd215cdcd40be35af902ffc483b0d067edf8d844ae486be695fcb115536b733738609bf8e41f2ed841c6da03fa8cfa7e7be9f3c5621a7d1cd5f4b0de5f81a11c8c2a3ffa08c8abd5002dbf663d19d62410bab48a9ccbf415b1ed03e151a9eccc1508b97ed69ac2d7b0b20059afda0c0f58c58ae2a2df5947d6300adcee36aeec8f7688e5c2081c66dffe4d6cd750048690a4f78c08b72549af78361f69da7ff447ee2edd4f8300f8fa6d16fe582e483064c37ae55305e0819a30262768e7c859daea2bb3f3ae19147c78ddac86a74f7341cb956d062e039642d25b937fe120a3a4f5000842fbed2fe2cc01f6075da2e5c407d7a186a206ee25d936d20379015852994c58b1cec5c1d9b134493ed3bb0e4812a211790472ffbfdf58618801f2fe50314113c4c96b70add2d534b18c20336a76854b41b7d0517d3f20d0920e7dec2a67bec7f06e2692fbab8536f4094b1b87ae11ad755e9769ea93309da600fad85db6f5e3c91f8fcf3f9594de7abdc42d4c23a7b6884b40cf8455f827388c021946898705b3601f8bd64ba489ba1c03cf1461e7f50f1054f8e6f1f80bce021c45815a029c43d25e3f7c1834c736c682976cf332f75e405c6c6f11b0c9daf5b1d39ac2c925fee8b4708d95c625753fd90cd252192c0a4dcf90992fa2dfe3f95b4a0f3e7b115905cab5874eb902f9da7fa5d1091b0197bb170c01965ecc7d6f812f3b47690cc6dbf984f5adbe0e3938dee8e582b9269afacb4514f034fe0bdacbe9bb584376dcbdd955552d25a5b7dd8f4c8c4963f9689f74c26fc7d61313cd84001bfb7ace1f3de2ad22578057fa3af94731d7bbf8a51b7c0a5e87a27a29aa4218c99b7f90e2de9df2e9b77e9384c3b57f72b811b2b4f179938daa3ab1c2139e8a30d2d26dec1263dd17c740e6cc1a4c4bdb6515a63cb3d5e469ba0f48517bf1db0e1c13938f6becb23901a7d044b11642b869284190c519737f4180ac7c55d491ade1a3c0315d9118d9f0e3de930aabdaa62eda2355b7ccc72aab3f6c8733cf349cce13629669e987570fb5601b89959a3140abb9e00e58661881abf726984a3a573bd30913136e744cc87d1362d03c07c6290d73e43b64c6b55f56dabee5ce1969a573123bec987637b5ab56fd513789f1528fefc6b14a7f8d8eb095d4bec36840b5641c7547efe38451d0a94faee0b72f57939c0c2291e70daa5996fc95d29d78c6368653d7dd62df278d88ce2bf015fc92c8f728e1d393c23cb28c9aed743f7e626afe5bfef96a949122841d5ace0cc5be809fb181880c27b04bb5342810a4ce1461d2f23fcc7141394019a1ddd32237156ae41a8417c6baaf85cf5cf84083f446cbb2cb1cbf0d518a56c7f017b7ecbd41d862d86c0b49f775012979b08c536d93f90c2b085995620ee70d8c8ae4d2c4ce699a7f9beb0c7acb4e621ef34c89a6668a4da6a514bfef317158dbb9d26aea059f0984a63f9490fcbde7b133099d4b48eff5d25588c3558c76387227191b99a1d92e6c2d6168f693e058d4f25c04a8b5aaa312ac1e76319a663ac455116b500db877ba7408fff81b46040eb3bc566b274ac40c1b5e1f0fc5d1ce56b663e0a9b3ad83d41c8ed0321d6f97a2e99318ff3830d70315c0445ca94961bddd8902033e38c16da97b7020f4cd72462688c2c142fd5abc4ddd7c84af2da34e4ce9560907dabedb8d4756414bd0227cdcf5ca7de220dd8c061e2e24620ef1ac670d33079b13ea924a8b090f8d28369b7f72b671901bddf6e0faefb84c6ddb3cbe7d4f9b7274b34663beef0833261d46a0780 +MD = 9afb57810a93e485bbd388b525902061ad6c6b37d8e948d22b5667b4 + +Len = 92104 +Msg = aea5ad7f36b9ab17fc0047285786342e24c3d19768b8f278373ae37fd48daa2919348d341908d4580588d0324c701c81068d239493cfe2037fa0f09ea974bba3a5a114345e72ee0700766260151ef73cee8721cf449507311f418955f734823a19944a654d1e808eb675069af9b94cc9a25cd231c331e86bddc6b98c04f487563fb438b02e341254ef2bc3c84169a48feab23ea057cc0e1783d7852b1add5360ddaae5fd48de2cc17240a1d2365586f690326e05498eff9fd71bf71a7f176dbebc1d5a35e442573d095da8a01da67a665a836949e19e4569a23b16417bc95ddaa4b69d3e4a881a307a2ae11a41830847124d3752672568dfabdeea88581bac1b5d1db802c2d9fe028e4e5329e915b9017e3ae10a234aee67bcad7cd85c36e1e8aef9b268945d8a1b0d7206b35c8414fc67f06e585d36616b9b50d317d14284ab60f39457073b46e4bf3d03a1e3f7a2a19417e6235c104852116ef72ffd661ecb3bb265b9649cbac36c5851dcc696e956cf58525569012c84e6aff10629cb36b007df2d75f3a76f21db6af84b4d8a7384de5bb9d5cc319469e2bdc8869c9954c28c21f573fc85ec67d51c01d5c0fbc8948ac7238bcdc70869cd3d8496a0f700699221c49bc75db9fb2216736466106eec9b44985fb4ec10ec6eda2e1d7b0dc30de086a2d59c585f478aff56df88f2eff6d97c2139c8c7355a8e3acd05760424163ff99709c29e65b1d57fb32d6ec9d3190c14c5015281fe1bf5056935d904acec7722ac1f825653a3ca40913860bca0bcfbb78d9f9a41f4976be40b95ec34e1f750a8e8ff24a8b28432e7f8e7a6f3e0496f0b7ffbe8309d36b87eb90df7bd4d9f92345491f0bd08bcd51ff02287971a2730b8a6fe84768461a37d7d8541c7784d046df6be2dbde0b37b8e82d14cd0d7be0667078eb53a2e7ef6865fe51379e9676ffcd86c25d0bfd0ecdcb5dd3ec59e76b9c0ac94c5a425f777446615b5fb28579b8802841e1c2f7defb2922ca29ff7b7106a9cf9faddf032ef5c9afd6f76bd8350ba7aef61ccb7224eb81fa7c3856ae9d40edfa39d0d17992579038689123155563a4a933606e025cf956636e8a08074cd537e7cf55b2292e341aa964af60a3374af7a5ae4f230ef3bf16fc25818c0c0c3e2806b4cf09a87ef5c9616fb4bd38774c1102bb5ba31e8597640315c14b3357e62ed57e8f407df1273cfefe43811b81c1916edef836b78f3cae36d3cbcdf3cc57ccd2a128eef02142e5e074de64e2e355f938adb786508cf95605c4039ce3b62d829cb12e6dc58bd344a487e7c1151863b90e9c1bea7feb780bde8b0b3089c1b1d082230255549d52e9b99be23e389d95314f2e980b9c4703204f8d35113c5b9f37317b473e33d23c35ae157034b3ef452278d9ae424c0c5543d73f23c792004047192e5f70c9c709c8e0a8f43d1d8a0ded1a21e126f5c7d8e6e43559cc213c3f50a7b0dda5bce84603ffbaf0cfdbfa59f1b19bb3322ff5f87a14f44987408c07146ba7243553b27b8759cfe85585bcb3f0cdaba6fc51035e8dd7f07581966c11e2e375c5b844b214c39d5c6d76915da63adce63ede1f9c5582bbbe50538958fa4c9db154a6f6739c3928e4d29b85399b504dbfdd6fd21d88092eb28c75afdf2ac208ce4379ef539c689afdda4ce7ed1dd1cead251a2f035081af716c50606b1de3933104a9a5fe7fc2520bc6f32ff4a83fae4288757cea697cbc7f828c41896e11eb9e2adea0b0b0e6ec932b46c3ccc4ea8af48a0a423f1d5ae4415171c9b675ed704a28516636fa36c938998059f1fe62d357ac31157df6cca54b7bb97f7edfc6afe98fda7cdda6428640745848f0af4915c051827d2380127e0243cbc94f064e18e0b3a24b313f8a926f6e371745720dc0e33c86dfdc43fced1a5c114da383d439b4567157ce309f7bf9c9955b5cc1117324afb6c3e4acbc60d827226328c30990f8caa0290123c1b194290b7bc32704ab093d8aafe9450177e03787a02b5e5ead1292b7457683b1c1a2ff01ff050e47b705688b1a66874ca0b70fb98b37c033ec96413f339adae02acade015b9f016b459db33099c8fdfe69b102209aea7339edf848a059ea83cd6b60288227fd8adfc5569ff384ad13a73182c16545afe1c10fbd3b734ee228e9f1f7711cdaad1525c4c4917c816f52d7a690cff011e4b679f0597c30791e34c65d154a39fa2a3adda24c4a1416ac55f0176f804986454bb50e519d606efb31d30b3e1651fd0166581c620c629ad07791327384da293e2c12d83a116ba705aa909ad6680d59af223561aa5ad0a478422b5641303a712bd203dc776aeaa7d9f99f7a72a1c4969fe8e63089d7f6ba00403f115d34e2d4bad81889ae2c45f7c4b950389765f04a6034faf794e63d5204fc4ce22be55bea57a8c17e22b815fd72644343b92748db7c90d42530182cf2f2c0c55731d41e188ebe8f1899a0c34f4f84f92a6c6816c0618712580ff03e13564838cf037391f5cca3e1e75778e653d895d25b05aaf2af9b8235fe68d0f939abfd27d825666fe8add35a7900a2e7b18a117f64295254efa70caf86ff6ce6ec605a1300fc0f00878ed7693c09a15fdef07250c45c00c60700a0ef9028067f921fe97ab80befec58fc1a8eaef716a7329842e6f9f238be8c34c9969867503bc14725df8be98b8bc372374b504d556662ee0da283a06cb6f5aff1050e51bc94005289b1fb0964775d9d982fbe70f015d66e3d33efcb1f37c9feb1eb606bbe20c5de9f8263d00d378dbac79c4806792e03954beb9cf6b2c98f9d769a4d19c75a9857d1c174f1d834ea7640218b72431770ffd46a29a7e9e4ad08c99212e08ab9de3acb0f9cd36807ea3c9c400749008ab50a411004530701a8dd357360545ac72e13e5cd59e93f29039a268839ff13c036412c7dbb7cacb9096724bea3e9c9fafe6fac7b2ac7c000cd0b995aa2090f808b30f113bda93d63554311c45c155acdd59a99a98de39d27bcfd4f47cdfb56240a663972995d5ba902fda724f76b8fd83a4137c901c119165a0bc2c01c4a8a235a3d500acd0d69e2a9033f711460db7292e0016a04e4e6550aa39e641b8b0e16f132ef4cd73e0ab89dd065192179b05585f3810d35c3675c65513ca45a11647755f361d9367390837801928dad3ab0d969f82112e2f12ea4e09117f146923fbceedb520069229dfbcdf3425f26085f76e56a8c1bbad29eb712efcaeb6f61c26052773a82eddfa559e6421efe1a871ec65ec70c981bfc5a1b52c9cfe34324cef9f74375b1430f2946775a72faf91b71405c9a3d1884e2c34a56cb9189503fa7f263bcbe1bf745bc49e7c8d8d65059e96d5560980d940a7cbc6541ba3e1536dfd22e6f5e3378f7b0ccce09cb00aeb6f9a5df9697f7b7f7e8ea24d89482009ee9219dc7e09856b9b9578099c41a62a734a261b8c7576f1f9a6c0c0cdaf5b0dc56695852efab0ef02872a5f55e742acefccb7253b0bd380603ba813ad7f9a473aa01d49cc5fc002fa096b4a8e4be4582e48987d3ce99913fa74e3b0f261e39f95693a9022dfbe8ec943c1321115971677e7528d57b6d091107af8fd64fc40fd1de872c2f623b17ab85eb77fa4ec60ce11d06cbc561b80e4ea756f64caf9b8491b46504711d2a1ae0f82d29910784968452d6e71ffbfb2f3d08cd14bedff536bd7aa59873b95961116d69ce81c6259cd5b23e1161c4b6ea60ae7a41c96b71a4b993d17eb3b14998d15839cd5925298e39bdc4c127366bae5dfaf733e8bc814d1a92611d9dbf6b10953b05ac638ef0f934c8037cdcdb9a098990cc31995dc4ae64e8ecfbae1e4e76e19865f24d8e2c5c6b8362aaff1eb27a77e251e157b98c270d29ddaf7168542a2af2d325838d2c2622527ae20a9a557fad7230b9a07a686587b7ab9f64282ca8e5dcc5bc821680f50dc7b4a88bb8f397aeb2d1310ffae9e87924ef4212d82871a6b8c63de5a4cb3792559874ff050d40d046cbcdf2c5710e45e4014df9e2e822f2094d101ad25b6c447e9ecdd1091319c6808916f564ae6562979a0975f2ec2b3c50d2d98e09c21188c55019ae3f9561060281729442f28c7392120b336294f90a21e000dbc58fb5f3ac24eef30314d4f34f4d873c0addc1ed85f1c9aecc732acfff0d0c709024c809a5a5c42c1e01e432c955bb6906c0c434c5b1db449b172f124aa282e8f411d63f445b2fc5cafcfd29033285b7d15bf1ddd3eaa69148f174558758daa15be75f090abd886ca466ae6a7f5c8c84f50fe96d5304c2117082a92e57989a365205c0fb5b35746d34cf666ba04c267cec4d0957a588a4418c5b1bf11dda3814510daa8ad85b6a63e6a7c3a11889e9fc21a3d0316dfec3ae06eb7b425ca64ac7e36f8a3be4a7d0dd547034af4a8e5d7f2f94dc6efecfa6b37aa41596867528dd839bde8312a35e35e8c937eab8c1e79270a09c74da83d40e421599624ddf78a1ac2325f4e4c658fa2e034be7d5dd1ec29f578ee7a3b3c1fb17c06539f53db0c0e785df15cd9957b69eceff2b4438698c061a224bdcc7f716463517823f2847c7a044884a5f84d0e7b57cb029665c6e5b4f6904f5d838f9fc67d40edf6e17c40270dfb016fd216b09fcad1d66cec183bcc5d4958a389f30f9f73de9a60494bc2dd3c7c51038f77c99fed08567dff0502d13ed528d706332bb7ec3067ab5277686339d55aa956f9c14167786b13c714a28c403da64121d85ad591403d1d238a9c83ab0e06a84f22014ee129fb746ccd83c20c88b928036903c30a150200e50cc5033a2d3c4aa37def8d0224efe915b80d3e4abe4bd6d46e9047feb7a09abf834aac8f3ce4d57a8ff4c8737030baea5ea9c7a1e84391bb70682a162ffd34da7995465242e592fbe279c5db15a52f1446bd24b90d88a2e0f6f333f98403155e750d992b4829c94ffde44de31c3590bbf8b31e3b3504516c88992c4fbe988772001a6cc05597c29d689e28338cca2406fdf17dcf689ee587aec2dbc2e6a6d03ea12489bc7117c40eac101e726d4b341edce1091caf3ea858f1d60af8021439ebe093b6c5a49118ca50a1f748c79f082b1de989cb11cce008d83d7f991dca0aa145d0bc83f7ed07f8dcb87a5fa3b0e8544973c7839731d6beec5f034e3cb08b87594163a07113d7c1d8bf715c08651cc1e7e689ed4853d2a3b3a55dbf69ae04c6a34f72c11becd04ccd1da2eaffa6eb9b7faa98b12c1b1bdfb7755793abacbc85ab62b390fb5e3cc2433ad5af8f5b9f0a9927bc764b71fb998038b7720b92fcedfae3ecb51c52614ac07ed453c06c7e35bec5bce4ae3eb8fa945746068f480c261738e6d883b1890dce51667f9ac2d14575ec62a45c689b297d38ccf441b634578acb69a03a61fa32f41b52db2643df614704745e5dd9ec4ec34511e729c5bca9dc033db5484cfce2bb44610e6bd8f2b2bb75bbb9ba77f393ece5dc854e5beb43944729c0b558d945a9345bc1716a506059a7ff5e7a2cf81e827ff676b8610a4d3a01f669896fd7824853089b41df4292a90208f5a5df42170d7d28636fc061f157986c57cd7840c2200a2f45e221107034ef9d2544781aa7134638f47c5e385572745333895b5a2cb7bf9a665c16022381d488965ddec8f61e42eed0e625d7a113fd73a4c3006ee997db0fa7b8a860d3181a8ff1fbfb942bb5d914a0b5fc85fec29b9453854fc32048c757b0fdbe71a7822a7bde23b6c56e6173700bf1ca8c9408b67de7d630a3fa50ea3a28333f7ec8466a1304dff7a5e9a878ccbaa379328a6cb6f709bf8b549f39ab7fb76315cf5eec44210c36a67ac11550ee54d3f0c0087703ca6146481f368b74f0069427ac90fd1f6b9d31ac8d212d639e8287177d38af05be96764f4ce7ccac53bdce5d5d860063bb60d6ef262f7a1aa6ecc9d6b3409e249a51548823dc86ba7184199f29697d77d7fd2f588d1383dbcd39a015a848ccc92839eadbec3a400812017ed55a61fcc5871b44cf09f6d00fda1215bca679c05a2ef73f31ee2c83fdfddf04e7369506b495621b3de300ea1f961e2eb3f3fa024175325b7072d8d601fcc4b4bd062e22acc77cbe8864585871c906f5e2d7f41ae4c5934782c066c17cd55994401153d915e70e359ad127a26f3a7172329c8f91ade6c20a4d20ffccd65145af56a12db258bbc3865975945180b308ac8988f2ed039f66acbbdacb807838300ae8fce435db0c40bbaf97c8ec0bfa73abd1e546b94db92736b335f164c852c4afdf6b9fea07a130dc837eeafb7ad95977f0f9b27af5fdafaf1c7a99012f67a6a52136865a444439efbc73230634156219d00d5fba6230a31fe0f2eddd163e81f498a5c20cfbbb03fe44be9b96a179379857687500fc1dae8ee6e21282e3a0fba52a007b8892cf371002a7793229cc80fc6f541bd52b8b7605169533780055bcbec18ed85773487d2ede76e66334d5e44dff1779c05741a38b58527645d3256d4a4498020004ee7c5fc07209b02a5d0c94eefab849e808de2994600373c6d8b64e9b66210baf89ddab90e40ba1732ca0d9264500f846a8cfe6b208038a3f353ed4ae405c01dbe0471a361413be770a47228e407856d9e91dca9a929e10a805aee3656edb69efbc63b59b4a4a909fbfa9790e3349ea0a9370dd3546fb8f6810ad84a837c7cb55e5d983a5ced79e51126fe58e659a3c3f6d7228696b438ee71ee4be5fe548af7423508c3de7e370f6cd416ff61f94d5e140c9b21f4b9d968df7fb9972be859eb43e71d94cdf968ff7b6c61d2ea95f3c59d41d83402c322ec262991dc90ba7207dfde371b8fc1782ba96a7f91f4b22f90ef117a4b2572adeee2966534c13d5bb37294e5d6b878fd1a9348c0baf4d0695675f5e1c5f14ac2e79120c42e42038f94a8a5ca34bc725052b5a1b5ac7f63297cee59bf32dabe0a7cbe630f27778f8611fe8b34d420602a5a7ceffee508fce87aa4d76320663efd04c6c7d6cee643c7b1c0bfb62378a4d398759decf306004ee625d96e0d1850131656e98b7322c2cd0aabbddeb119d2f4a32c3610651b1fa5360dea40576593d537cb22cdb2a18f1e732bf00efba85d05f10d42f9999cad83e0b9747aadc27ccbdfb02dfe1bd70b3481ae00e76198a57008954f193f2f2c737cb5228d5ed37d6f7482459d0d57b997ccbe6ac8916f6edb5050a4ef94373efc708d5ef9190d0828acde043b05982cc0aae99842e990fb907ecbfefd5749377752ae943e3ad3cf8fdf000458a30cd747a2ac03e6f8a1fe47da63b7b2e6c9b87ca9956ccd52dc161d81b4a066544a4b755a6258254d16c95a09b469b0d15d3494dbee4336ef6a8e5a4b5882f497c4fc0228c8ef6e4573ff5f634a8f7795682e386ff5b20b6f139abe82680673ec015b56943c4452702df2c09d728367a17f17dfdc5823ab606bbdc2cd5fb574df840bfb3338f1525bb966161ed9000184069403b79222a751e789ff92cc0a77d0c160586c4b60fe76baabc84dfa6ff5cba3053c7810397fb1fb61dd59299fed7e5e0b06d5e03da74f86466fc1333d84d6b8edf2947ed2a51f3be7d4b6f4c046169e5e7ed693c1ed44c0c8751f3fe36f43ccd0cea31a88b7e80d8e8e02ca26225816fd3904d2a85104dea4609e6d1bf5715340191a9fb618ab04b861e2f63c02b16c49bdd7295b52fe545ccae53721b80df0ae7a616b0557e69617e8ce157c5790e2d695c41455639fb6741c7a4aaf3778098e5b1e08d0e619560f9b2aa451a1953f26296200111377696ccdd4041ef42e226243b6e5b353b1b911e19f3f76713cb5bb01278928e30401b95778fffb6ebebfbcccb2ae17115e33c16482233536d60b07b58b2c1742c403ec51df9acf17a856104ea7be96bf6d5a908c7a1c28631f938eaf134546b335e468458e60f47f5979ef41fc939cae6d91f1d1fd66ca9677d3c266468131d4e827df9aebef1616609fbc5f27d9b37edd7e87dd72bf86415d6045739b5c82f8494294da9e91ae6d4c3c09febfdd45a14b74a4f7706305e45ebd8a3f982394cde7c93a7d1cf527f48ac35a993b2afda62618ebc88d1da40fea400352b392f1a62220330add961d4c9aea20c7104f360e0bdfbeb91f3bfb149e9c333574172411a6fc010c56d0e8c5fb04eef0e5c679394b4db041ad4a75a2da26bc60602ca6a0e49146ea1f52250129b827bf020d51c882c7431abdc5ae2b2b73e15bee4ff3d459a4572cad766c7eb5586d8a1ba03a2c40e1098cd739ff3e01085490a4fd861c7489c46c77d9f9af1c7a22da990b9ce4e43f56107013f32c09687896fab1f7f9c3c610f204d98702dd91ea28e0cc14830b26bb5e2ee0349592f8efe77609a3ecd5fdcf85eb118f2a5744161da94e2b77242bcbce5a2b0e0b3c4e0cfa9d61247609855260810e6c8637e548f1492e3c31add2e9d9886119ed73ec6258d754e4160ce13c4a6d1cb996fe19f57c56d8d15326a0b818300ed2ccc838828aca618d5d2eb5ff8c05e8f0dcf836adf748da855c1d0998f2f790b319a7d6eff8dcf36abc0d681eadf1efacd8d4efd4fa95afc2bd0f921f0235a34564a12c0d3b95a716a3177c1c48a79d381b1289fd0ed3c503d66cceacbe7093043e32cc5cbb6ad91ba2eb666ab4ad7e4d141fb9a8ac69b6d368b313e4904f0c79f6db2c6100e325e45be7bbac9a6a0f36347ae34a4bfdf1cbc471063920175c113f18c0bc9484fa0b0e9ae0346263cc9e2ca29b6465d702377a351a2cd6602e54675a2dc1fed6e1ea6b7378a4a52142ef4d354689a2ab64a11a6dd4322bcfefce104dc813a84f6a1cd31fe97fcb38eea41691791c5ad1a5b2f599a8eba89d1ce8ba3224141954ff1cd5eec7284d013c472945a7af26e021c7cc271cbbd58e223ed5c5c665da9e0d64f47e7620b310c852f5c056c47f6d7579deb4a4153ae9bc3ae367236b5471318fbf2d8b0b95fdff51fca00adeccc02d23ddc0e39a2156376773a4cfa72f74f7e7869a8a5b5e1f6dcebe533850a78e956029ca3fbd514a203f06ed2f9bb41fdd16fb43d87283fb7023bb6863ec983f6aa9432f3cf1234c133c0dced7db9ae83d987d9819e39028c2fb543e21f507490989ca9e5fd81fb26ce908c83cc93c54a5e69e25b3411b1dc2a04962d6fc8d31ee6c20660cc4cf33a9c07847d2f720eba28bcd6b28fd7d40ebcceb7517758290a5dad534e8698a46564cecec4ee7e123bfe29be70f8b4f48cadbcac347f29fcbbc506989671909510f08c723f51de5836aa58a17cb7d098bdc5757fc0ce63d799e674db20d5594ea106ea76d5a0bb6911f2f087be14524809cba238dbae2d3f0c87a026d4fc1e57826f90e470223ccb369f9a791e57628cd889eadd6f65afbe7c7231809a2d053919f325c3f7208a080b79fd7d84c72aed92c5f678633c12db516dd0f25aaf367bd059521c51e2cca8fa47c29ed8adcff29f486d109f7b7e1ff3412582fccbdaa50e6bbef668b02b316ad390e102517c2468daf8ae0b6a1a10cbb6d73a68c9193f3aef115923d2cf2dc3e31050eafb570953423f598f510f383f938f2286f11ad2beaef54e6a8fdf236c40e9f279f3882bc94ae9191377841fb8a2f4413f8a06e5017010db2531849ccfb2c4cf9580381233b89ff67f25a24b9fa9af9f79de04016bfc0a0b3cfee51f530049f027ec8f44f75508f9bba391465a7167441d333dad641c8ce3983f2b3460f41f5c187db44b7fe9cd29af39789853c2c53914d2d97154963e6d1f3b7d635e54ef1b4e7cd0af313c958f442f7fc7f06371854403ffd5a333c7b0ba3c0435b5e96036b3310af67715093160ccd05d9b1e1230970ed762b9bbd0b45288e731ce7b1bb42ee38baab83ed019ec5990e2bbb95043f43a8a9ffff60082cd684fe00fd2c79da6db7a525b7d934fd11eeadcb7fdd5c542d04015dbac0021152464c8e1b50dfa05620077ca9bfad9f56304d5f9b246be6b18204ab6a4779910044d73aded95d232be45a06c60acc142700654e8a04e36565a53c8f9a70ef3a8503369d943062d15377055a993520f9f8c19e2ec8e9336ebde01170a7d6d36c44f3d30cf7c09139617aa1fe9fe93c9f30165066d46bdc512eb50bd53ee3b6a4b4a9452f563458d9da41a84946718f928151148d38e75ecb3cb6b443ac2209727895f57b5bf63a21228e90e129789a625114530872f63b2b6c4783429c0c6c63f54c7c576570a5bdde93e45cc568dd9d23d2b47eff12e1f031fa01387b1d2ff7bf3f4269ff4e3bee63042b0286bcc9917e0e814749b7e3b83240a6bbc5def48c3ad0d019a5e95d616441cd78fa0efeedc43a71f7ef7fd0f1c1adfc3308cc3abffcc3bdfce5dc9a8536ff5426abb9ee009af8ef176cb51a2b74b46a44b06f62f1796a547a3b9273e86f7f57a1f858078866ac511c2e022fc3dfd6895759231dcf35474c18139569f9825430618c63ebd3bbc7507ccfe192694796c1e16fa1cbb7c4dcfd5d0a7ffd36f41086ebb467fb811efc65cfbecdd27a6077bc796045ed398cbdf0cf8c9c9e3f5936b3b72ccec6fee4adf97b674170759eebd195d799f2d3014cbed61675dd6106295f4a4222decbc14e940675c6fcf9778599bd32089cf2d71bc01744b62b4aaf8ae21b80ee93761960be0756d8c8647eb78d660c3c2c3752adace973c8185aa9bdd4a1859c856c7186efe486f1734519041506d28f211f2874cde33016252f8944af82bcb7453d4e13922482ab7e19cafdd936018c2bf8ad03bb9b163ac227c2b1eb2592b9235723b95d4dd66159612907327a35bd9d7274ccee5772a08fe1ea781010a43cd05886caa9d6fead95b9a7a2c929cb9e160b0442eecef1e1dedc6529a6ca6d9cacafdbd9f04667faa361cb7305eb5fa7f630d008256800694f75c72927b95b6348cbb769d922aed3031818da61255e55de726c8f3a991ac1424c85090b640a2b154a9dfcbcd23fc1453af45b637e34423f4e3e4a96f8cd6467df234bda60d64e929af40523fb973fea48f268a54c9dd79922c9bcb2fd84dd109c26541d265c68613b5e05970551c952d097a47f16e7805cae9378272ddd95fd1212d43c2b18e2d1aa30809e75dbd82f5068718973adf72a302fef5bf034195dbf5d2ebff5785884761008a2c3b1f6d046c9723cc95d966265f394d9eb24f1d31289d6210c1733fa1d81003c7550afc6325f0901be72d895ae82fb19752c99fdba0d6d07d5520fa30ee809c411546da1917da880998a48547862a4a334b78c2df47c55dcf7d5360fd8c977f20e29aad2e2c9f33201006fff51f703ff905242f4703b22f8da0d6190f9b9ed1ef23cf1eab4a86b8e7b81ba26d9c4ab972e9958e1bbee4713f256fce6f01ddbd3342add4975bd63fe6f6aa13b6e600e0245d9286615fa4496e76e72723a89c6876a6fc78fa46d8f2a6337dfdd8e3dadb99cae5bf23ce3adfa1fa05cb357623fd3fb784b1ddf3d4f7aed85a06dc7d20d3599954e268f3ee5c60199363ac55b9a217dd0d28474a1176864b0ad6c99b19efea30a89739b607e8333b5796912ca87f85805e844033d998b7f65516a7250e58d6f9a8859dffcfaaa3c81b0debe236be1108406ed0967284c840026e7e024735a55a1e559cb68ccb3728a56fc261ac8443dd7b8e005b25634190db85571c0cafddbdd0ae3ec3877278c4bd651f9052fca467d78bd76a3a5dab50a604395aa5ee088988398c0e08c8ec022d9709576f4bbb0f1c0e5dabf9998de72c922da45919ad260c9e8d7f57f51d4bbcac889e4c9c103b11be9b07aa406fbd35d83ae2725955fc248449ffbb209308314da44d32152c547f4498649479d93a897e68fc36d587739a93c9747e72d49f5521664d67de96c32e475dac006d54c6ef2bbfdbeeb6cbf3357414c8e6126a7af0d1d5843320d6efe670f0c5364467c930874865e123a9e4bccf32e13c28ddffca04f9dbe003753f6f675b997e259bab143b0a835945aaaef84b2ca9c7deb398aa63db3ab5aefa1d90d3a60e203877d463ef0d1e9c4355b9b1910906d15a76ac5995828af94aedf0135cd70e63a783ace54a5a1cf346336dae49d1e2a0c4ada2a043f6b1f5fed71fbeabf8809197479c62f5f867a676ca33b91a8d247d45e1e445154099f1f33f145a68104bf0324c0aa198efe5fdfaa57198ac44b4b00599d910b267283450ad36ae3b2859c9a0195f6bda488040fb499014a8fe7a812b5de9cbc37348083ea9ed84ca47916309360488630a1eb6a040f9f5b6c35d38dfb57c3cef6de0b3e5bca1a2c075db08942c5fc0dc3da9a8121113037d9c481c4b2afa2ddf5cd87e6c6dbad1c3ba1ffe6982dadbedea085e78444506a69020769443cc643b4818b1fc45a0d97b1f458eb1c0dca03d182320fb61f9c5d8a8ce8ee58958a9aa3a8794bccbbc8292ab3600946fccd875cfe236c3f19609bceb3aac648307c6d4380f6fd5877494ad67d89c3916144b3c172de7f77c849afa614c1839b94181624d97896e0131d6775914aac93d1bc13bf9ec7dc0882a403912ed198db36fa4fc7e082bb0c25c11958bd3716b6c49021a7c073e459ff2c3210703f988faf7f549d5489dc3515b0db205fb3a482c06d580a96673af4843ea5b4777fe5115433df2594027ce36989274cd754d8704ba041586f263250c857e8fda3271118cb9439e12d811f9fa796883ed2af2527dcd55821e9158d071214864c91b9aefe8c3d1f609f9a26e246856886d0171ce1da8916f762c98d7017d0d831b19c014afc8ada2458923523ccc262b53e111256fb1808398ac6c6344029894d8162ca76c30a049ce71dcd0ca0d9e13a9b41b7ff851e9678bf71c9cc118b03e08f927d1a4627293ad9a150d579387e97761d70342f095c357f7f0a900281c29b4aaf7bae1c8eb2ae9eb16346ac5a854c3d08ddad4f74d3e059230b38998a5fee410e489aac9d3b38a4b266b8c0dcbfd97e9852b36ccd7809bb223e1e5d213659e15386788cdf1d999a48fda44d2b68bfa94061ff1d9fb32243e125c9b3c2e05eca0397b023c0e411ddd97ab1a7d32a7f5b95ade8c8583fca51e454b3340bd87d59a31eea07ff2961ede8703967407f98e40c78f8f373585283a04d735458a9262e966e7eafc657ea58fa70d4120fd28cf11965b8259db76b47a97282ab35bcf9976218f691c2fa1b8d83eeea2e9dcddc0140f69ee523b7652c645659af1f9e68429a90da44717a962a196d142386bbf683279e25b8a1e2e090658b70b692c7e2bea488a23e6e73ba8d2f5dca7737377cf511eed4f694b45e12216450782bb3f94a2442e6f5f65029453a4375b04bcacfd5a44b354578c64e202c83815a470d3c937e6200f1c5aa32d0ceb0be6510e07fb36345bf1bca733158eb5b7be3711dfd29376898b838dc97be51180cec43130d0cb360eaf00655981af27eb88a3670eb59c3c906cfec81a87c760bd9dc3ecce840391f4148b8e7f2e4b64fbfd513a057c3c7f5e39f4d13e58981eebdab8098920c58f34aac5ea4c254bb510a5a7526f2f5a891a7acd71def64294310e0a4e0baaf876f7f91740696d986252070e76f2d4dea0edb8f070a26aab0ab8c02184f92d868f6488e75a7d0e18b3e8abef703675af0dff79c79631bbbdc7a7786573feae5622a4df9efe3111b5f0fb19b006e419b7187748b9ab34f15e1527bf3ee2c0375077de86a5f52d7d5660b2dabb01a4c9dd087eaa2e765215783a601b149ae7cf5cd53b066207185ae34c367576281d8c09273b298ec0342ef27f79174f641c7f6286e3e53ffb9bb143fcae724b45f86a23bbd74c42518144b42c9b385706074e4ad0fdaea39b5d8960b8435aa11edc6b140d799bb0f1e260a689ed0894484f44fcfcb1e6f6ad07ea21c81db3df7d7298c2654a9f4168ff88b0de980e6ff49c69615129179ffa40dc6e7363086f2862f8160b72df5d7d7fc7ba72c3d24ed098c65f198ac8084ab1682f033edeb8e75393f84618e46dfa0b22ac8e97dd9aa6e962df9aff82986501954cbed5bf2284ee72515f6434d7a54aa36e7a3cb6bc3c3745ca1eadccb712d96caeed513215c5da9c079e7f590546e551e87ed9e51a5a2b7806ebbf2ecd1be1f33bd7d9c0f974bf19044b91db5da7833403e296f31eca6c027d495b304246c034dcc696ef365747f22eaec140498fcd55a5ed9c672f53a3eb1582aa5b7f5c1f377a00af4a3437182e6f0f381230c56abbb7e813c9b4bc783cb8ddd336ea24a502fbce4d565cdbdad5aeb51ed87a12036e221b23a217ce92fc4da1fe4aec68fb9f4978989d140d36f0d3e99a1b8e3e4077cccef278bf519a33bc17551deeeec8164a46b7a6c593d386c5f3d462d611c8dd9f49abd6140d37e9ed87fd39567fb56de880d3f9d8365b9f6e1bf535b95344a882d374417ec91227c73821268de36aae096d131fb3be7343b5a9251c9fcb5be15cb67543654fd3f43474e76afce28ee19756a09fc0f3c57b82e48ba0f042b68f1738d863316521591c81778f0a44c90c7983a101669df94ebd1550481580fdba9aa2c22a4ad4a45d65a8fa1d1ed0c539973c3fce0c83b7c54f849b9d744dd76acd3c5d1e19630508f831989aa24f276fd9c9a28d1c6ea6e71e7995267671eca8984dd1c904dcec62bd647890fd8a9ab72771f1c6fd266ebc133c666b83b3e57be31f46b3740500749c89c3869746c418697e55011773b84c161435f404dc6aec96f8e362d2a8ea457ee7a005d84e4d9a8736f5c7d21d2ca0104b2a4a5fb422029921d060848b52dd49c738942869de4569e2fa9f96eb71bfe7276ff4fe03b6c5d4e23635f477de45e771b3bbef5e1f22f8c98b12cba630b185f1297a4791cd3d30823d67883339843e2d380295f6b7381a35d1a7d916107fd0f08365a4261073934b0c80aa8909a23843eff282f94f8fb86cf3e62803ba30b26ea33b7c89276ee783cc08c13ff7a8bcfa01121e2f8e30bbb71a572035d5cc12b1b1873783b9361273a485351eaa9db19c96ead25f1d22095e6e832a730a5cd702d6ce3cdc6ed4fe63bd816deecb89016fd5030453a36d8ca916f1ac8701e6eba9399af55cf04f919a3e83d377017593bce7e41ed1c91a2ae03b291037617535ee0472c9cae4afb5625014ce80f5684fcaf41586a23730cd4a04b4bc4cd20e9d195cdf20f0f5fd51011bbbc6d34e6a1de3231fa68e94b75c309a191a8efebb0b716b686394c9404cc0c6002336b583e54d9c89e45c88b8bfda24e090c48a83673f5995f87f088090e77a6b4e72d2bc8f5188dbaad6bd39de90cb9288b8216f99cb4eee48795bc504be5e85ad4f4c1c03370f9e5fc2d845a19ab7b6693069858a5d71fcbb4a6a18908d9bd5a994ccab2a4758596ae984e1f03f0fd49bf50acf203dea46bab9dc801c9b58e3ab0bf972eac98c9435136717b3c9fc7486cfad5544b3e254ab8f59069031be38197a7c782c04d2d8270729eed27ea51f9285fa1edf0681aff7948bb1d497f55b5caafcc6d94153aba88f736f35a7335c27e19832d77feede07901789d11524d4dd632262d7c836982071eda0c48bcdb4ada9309916665269424ba8966df3732c036c965610e1a424f7763e8b68749cae8ca6695b8203d4d90f8ce4e191780bea358fffaa6ad4c5d996660e3807a8c7d22ca0ec81059d9db5d81d737126ed1496dd920564cfe8c03e630907ad8a7077a8f55f6013867dd48504c4fe4e129ab5b9623e518e2666bedbc727cff4da14d4b950aa6e17ececa2d2fb4a2d813fc717da2c5b8b2f5796e6392b870e15dddc058ca34abe9721302f222477a71193bc6281a3b15b5049c061dff5f26d167d1033a95708f79a0c91a200e9121506f8c0bd362f0767f8e62c56558f309301a1f78599d5aac129955923f1b1e51e69551d508238275a2f1522ee245f092add31da24e384f8c64ba4cedc7fe5b66b41911944ec26d7dafdbee951d3cf45d7b31401370fcbbcab08213af231eb4ea39696fdc1fd61e08f6bc9caa6ea45ab448a34b4e7a614bc1b68f4e3908f2c756f704b11ee3b510a23801f0d15f22b04196a783b5c2fc6c1bc740612dc2210f277d8989cf4305e1c3b45a6fac872e818fd5cc8ddbd32489336333d0efe71008f62d565e8fb64f1e082c047d8e4f2e4af99660ce4323704fa32ae82211f056212d9709a3b2a5e701c9dfbebf194fa879195932c96e5c761be58ebbe9167649f4483b020dea9a6459937fe788bfe13398598e8113cfb69c7a64ff4d7a7fd1820ed099ddd19a1c4d61ff6cfd8ef4ac462554a6fa11d9fa69e7cc0d1b7ab0aa94cd5 +MD = 7cfafd37c646df7acbed82a497d103f078a41974466f270dafaa62d8 + +Len = 92896 +Msg = 2dc8ff752f619ba7c84716fac7a23e101641fd3f84463ae4c820fafac3bacbeb06f262a5944d83f1e9e921003bb3c747ffd9368eaf835043cbbe34131eb8abbc4233c31c6634b98e4ffb1c779d38301c507c91b78aee18c9963f02b12ae04f7ee97269022c7e062702664f87769b4236101155e29ef05c1f338dacfc719881da04979d7e6f9232640b1002564c43c53e4780cb3971f2e2ecaa8e7a1b7a4907779a89a7b8b6da05ec71e37d0faa9881dbfdb13be18d5a73d9012cb437cd5caaffb332cfd989bd47683cc607d815023db63b8bec057a91d78e424da177f337321757795d0970a3bf7f75a0ead917e9c37708f828cbbe00d6b275db8a04734467698f46986ff4f436da235b6c3c37b5d9c56de0355be30e38eda0bdb705d5ea119d6281c9349c1974214eded626fece484871295cde7122c4e9cddb70a3a290f75bd913387ff17841fbfe1170c1f29dd7a91cbce57ceea6434b031dfd0661a0e24afbe22d797a7a65103cdc81359d8850907681185ce4017ebe4b6ba5559a819a12d0d7f04abf87a7090f2753aa87f879a488603da7da9b3ae8acadb2b9d59be75c60dac8194808d08e80da2c4736561c8e59429b8459dc42712ecb6a599b5691d0b4d4ff0e9e63a84696dd55343408fff6f10d7b1ce82c5d02d9ad165e731a5f15d3abdb534802f7da5918169a0978eb8259ab25970ff35243b63cfdefe64f1ad4c549a50dce4b85f1d174b6a13b0ca7dd9802e11c5699eadbcc5e69357b5d8ab49394a467b9a81a3407d77f70542efdadb6fcf7d34686ed7323fca057baac775e447622878f807d4b022bb730dc45b39bbc80aee5662223b2c4ffeb7e2ba4a979e0d66595db3b77ddca56a70859b9924eb175507a3ed65341b64d92d257aee7ae709bb6ba2240d0926842972155f1626f9dc523b9570847c701d0dd7ac530fba5faaf5d1deef95014e3d5cea25757eba5895770cb3822c5edae6e149ffd94ab0589f9a2e8c6cdbe0843f996b4e852f4997c137ed8698a965bc4117e688840c0762261cd403324e4199195357f8f4a47f27ee1970773aa82b84ba064feed9e02a2cfcf254fbc6788edd490f42ad4a7aa5997a90180dde850ac4c030e88b414382e972bf33de9fc732c14d41bde3fd2e676d053056c2faecae1cd22c42f660c2cc5835d7f32424c6d7f5948f2c25931c3f030c7ebf3f263b6fcd9e5ce1b8aeda40d994e115550bf3e8eacd4c1ffa92d0870bfeefb3cad6edda875347373a81f69aee3e4f1ce9abead001460cfbcb72f7f9d86ae7d70e839078babf7fd60480a4351690867c6a8af837d9ad465220c9dee208cf0b8b62c2bfb4d8216b209f316f99e32a3ba6503fb88af4518cb592fe01ea0da9df537ffac83970379db9730ab553c469b33d2320b843b1d154988a861d7c6769b7c1aec2465113408bf3188311dd4adda1a36bd463fcc2ab127d70087e03a6ad4958878fb6a621faca80082101a0d6f46b7b82d13800875d5ac6fbeb903a3be2e88a92d9a5a32cc4bdc2ba6b0149095c9518109dc1197056a21786a6106a978939ca49267fd2b41cea4db7c79d304274a31b8d908b822e256ce198de6b2f5a2ea1aa22fcb1bf3881e48388dd41e122bb0a08626ff3e511583fb7baeb0cf2f431b4aca8d2f7b32a92110696027be62abe5e41376286bcba5d7f0c6552725ff640d744533f9e691aac144977ddb7c9baed0458654ed06399a3cf4210ab37b0b0caae03aa99324b795e52be96d591e653d590d0745b5d942fd9951b456bc9bfe43d9d6d27863fd4e71750e88b7086c6a5f6882c0d3e9aa8fd5d54da8c0aa4b7e11829d3527d339fb4758359be34f304f1ce5eed685ef42c72ada3125d1e554337f8d7e8a3e499f681e78e84b7a9830bf7cb89774e3306993048f45520fd57ec794e3c1f9462ff83dfebc6fc0034a356088cac6c07614e69b6cdcd05804e290df596aaeacc6ec0c21f00c112106cc07da4701c2e2c504838669a91c5f38755426d40b8cc846e8a3bdfa5018960b886ed6c246d503596606fd04de6f8e32f490410fafa5784e8b85b92770ca499be532fcff82454bb8a338a74464120d7ac90ddb123c3fe2673d79bc7c55705f3d4b1af3089b5be16c24e12d31214d05985a939ae39ca32e1866496e03e551037a22f064e57b5feefd50c936d3fe679e1411ea268cb51985ea6ebb79c309b75bd9d37af69c089999f18eb76b33e3aaff7755d9281571e80f64bd9882c4aae88fe2c48152372c500bd248757358b95c51498d294884b65af30ebba7340fae2dc81d5ecc1fbdcdce6b27e5c9f84a66c6bb1023a22de36eb55a70d1b234abffce2e1309250637d559e279cd7c9f12d43066567e0c803980426b13657f2da08313e84b2e52afac2b3a984f675612b7e9e179a2062fe88fd4494f7ee1d8c5f724441f4d331cc124b7b9b4311d1ef9418f231d7d23d30eec52122d39ab83a4b7c8a8faa2824be5a8611d5fa7569efbb9ad3c7a6e3dbf9958e2e42ecd2d4873e85988a2d181a7c23e11b0c03a7b9cc1262b75b7fdbcbc32dc6c097ac1cdf1da92be2c3e629af701f1afb80071f2e1f390f016fdb20892817ed8c7389df54480bedfdcf7de340549c6237e46d5243538ffe667731689092d480e6790ea0c0b0e74a4e0f5ccb69743c7554abbed795f387cf4b042b0a8e8df42f630ab2e7a0c2bbaf57f5fb48a7696fb2e6486415a299c0e02389108cbf93e73796cb1f4a610809aba035d1e176aeb6a9413d1592d590cbef94889a75c02f3e37d61cac1fadeb51bdbb21993c53bea1d70a0c1be5bb82f93bf285214c1cca59aeb591c1fdd40714540d5b89afcb03a1bab5380f74d0eae953d2013d7641ffda1ac9ad295b7fc5c21d2b365bc2492846c2b74368c6a2330cc5b78f479abc3a3ffa66c12acf1db1fb677964680a5a96f19da4b0a0519be5e4102771e81007f3ebcc31904eaf1a5620d18c4836ee8bda4299f2025ebc4a9e0fb1866b977ca1c76e1eae8d2da2022cc2c9e86450e5396caa4613aafc6d2aa5d02868dece47063f5740320a101e619061def24b4e94ffb8a930ae2cf1cab8a7e5f3534e04f5c196080f50a9ce9ac54b8e8f5e6f78645b68cfd8160ad77b710ea190ca3bd40f509620aaaeee819d89989939614376d9b8d77eaaefc725e5d064938f221aa3fa3faa11c0914b019d4b12128bcf59b27bb49f46279fe465a083245c5d1f8cfd5ceb3c5bdfac31a72066429ae4ed24c3b0bb2aa6ecaad50f21d5e84c6906e5589defd77f665444eabd879492e34f37131f58f42158952b9ae0550ae4617cc64e43ba05fce32e0754cb1ba28af56a03392dfaa63609e35a81628d16c4a4e5a236d4e64244d4adcb7ddf8ed6f399c21bae533c9b655f19e46b3eea866dc1d5fbbac7d116e7b93833be717dbc5d4eebd2db258b5e2ff6bd5bb0cc09f43036c255429316ee761f61c2af2754cd38934beb482b6369063f2212ea9047cabc823f2146dd34435065beeab847a08415f566a79dbb513688b6fccc713240848312a0f26ffc95b0072ab42e7278ed6b65f3c0aa148bd16117ecb1cb0d1860bbf4969c4b0677d7bf1aecc600662197fda90cee5574e36053444ec5a0e6b944dbb15c858db2e556cafc1a8902fbd83cc56faf545c17788a978e6bccd0c6ab495e29f3015cedbbbf5e3b3261a8ac13482d2a59770074a1bca866b22bfcf5550acdcee8741b2f616e0358d2d4540f5956cf59a9daf524f583005db057682b4cf5b520ab725ae07cef34c56a75b79e20c5168e0f04aca0fa5a29e3e4f3b4b109968ecfca609eb974bf7d1167ba25c0e02f8d37f768996116be9f99de75652ef169b51cb3e34902df4b36bd591631203e02adc8019b4dfdd13cdbdffb50fc0dcaebe2a7f65f0c65233f1c39cd1e5c2490caf2eeac012ccfc0316936da1aebd5cc9971e210583b58d6f77817223729566f04f6fc553ec86f5a58c22ee937a70f9cff0d6b705368466110e4c606f50b3e4f2d24819b98a345060f7138a73bc023a288ff94c4d515c657f7ecc6d9dc8434b7cff60efdc34ff969b1e0d4929bd9ba73c3c30e5c51c6413228faaa195226e21f59f604ea3320f4ec0cab9349dc261c973c1238c55dfc5f762098e043fa65bf0c57aef3ff6cb8b0036c3be52b8167f2736e57948e5e1a69aa8b31f9f839c333f5358b6c9bd499b3565d1c6ac60001b4aeb6fdb225d6b30825a5606794a4b1d9709015cf4e0f26973b5bc76487ec75eb8fc28f020a5c58a39e2baeb9a7afc427f4e3c8ac8480f1a458e4b7830fbb46ffbcfd8614da537de47a6a7740bfdf7c97f8ad3e84edbe7d9305848746cbd0f769bce47d5ae4609513210e54cd3b984db1f268c1d8d82c4ccbe7b791102ae209d1e5f3cf54d6e820d84863b19fa98eba0e88830d28d26ec1b765fa6f8fcb52e0a0eec80693106eb3ac47273848981733f611987ae57ada8efe06c99d161b983e5f2dcdcd862f78cff7b3b5334875b65e11341585af2014070850b19433aa46557539715eae927ad853049a4d2fc1009ad84696d7d6608fcc5eca2edf68e5d1d88b885f648cd8096f46b042d05f187a7cc3ef78cc0bcac24179e9bde9365ccf29fa90e469a16e98f73b5d4b8766ca88765c9557ecbfbd3ff8d215cb4c2c8d92ec4ae9acc87cc49df2a94210bcc785bf1a1abe90a452b67d650ff4f372abd6c1721509151b8f88acf429253f0b01a882ca86e1dfad7554ff187bfda2e744f6df7db165b9dd5a293a7e337d22cca5c1781a1995815288073985bea67634783c4141d89607885d04caf340a068ac145f038b4b50122e1b4bb13f4075d9c4c6359b70d2f08aa708c9d2e5e9358d13eddfc990b4982eaa9f90fa9799e24a22bf61427d393bcfa3fdd6e6e885a2ec8e82d21ebcbdd4235295857a41238243d8b44deae983ae2329acca7b5dbe8f139683c48781ffaa9ca08d87b4ae95cc43414569d9284aee418285f304c7fc40aea65135a862d271f73ef8263e423926f516f333b1cbe76287592a0f17b9b76dfa388b83d5e1dec0cf6865cf8b9eb628a5a44e39e946f1a18107f97d3895887da2e7935db4818d1d81c7471201367557e183a6fb042be221ab3984bbcc0dd7e6252df921a8b465febad62c6c438bff2b353fade576dd417982485c4956653e3ded662d5e471ce1dae71f765cd711cc191d32c387d5fd881f92ced0a47c4e13fb883ab082040d8938730dc552106a64b815f7786095ef3e6a5937926b922b01857216232b6418e4adfb1b89eaa3f8417e9c183cfe3b34dd00421d01fd2c8e7f923782f5c8dbc16c91fbd34494e64dfae32bff91bf3a60dc67e9e9afd7cfdaf67844fb88d8ff99898ad1cf85cf7bcde96c5228172217e5c517bd181c89e0a30ece26fa8cda33f3d40f396abe28c90aa5908b1c2dd558561f863832b891f37910fa5a1a524b1d82c4857f2f5e0f5286a7e65366563770145439e7c4048e9ccfb5935ab579ba20a8e3843fa80601acc478e4377110d6f3b2fba9484690be3119550fb5568395c1e8b991e74f169e3c469100a3e6fe2257b48e6ad634edcf54e887e5d697d07c85c4af25029f3043857f78c215127ea8109b74e52e096c207cafb6bc4ad410bce0bf4cb41e12c3801cf198bf278e02d6c2ca57ae9c5e9c601ce179d99eb594f5774b0ac5964440d2672f994e47d42b4cc2d3af3dcd8f1eecba2039e42e970db49e0a71e0079e48b8f89bc2f5f27f7868b549d4091e253444e8ee8f629702cb58e9501a89eeab4bb245b8de4cb3da4ab8fe9f7e972aabad070daee2bb44735e70cdce5d39b7d5ba4ce32923c9188f42cc2346f77e5facc991acd3cc74d383479adfc7b265ffb824e7354f3be17d08c100a7d2e71549831a735b0fb525b09d171573fec29522bd0c2fc0ad9f3c6dc175f510b5c5f264d9202a7cb52524683b3d9f4eb6064dcd7ee07529c6c6106763b217e2720c9c3e197b35a666a51756e83b86b49fe6066c583255b52d3924064a05f7919a238931ce7c134c96bd65292e817a4a1efa456be38250174370eda6fef212a290b34fec62b341f3c7c6a44b68bfd873b5bb8168ab50e2b49bf5b3e5fd06d799f83436ca60a140206c594b3a41372fc5e69250cf1a1e8c11a9403d2fcea4d4ec231ef45852d6ac4706fdc0722297feb534172a2bba4bcaa2fdd8e000ee6c891db3ebff12b3b3d4fc2a2caa9f9752a3c630c273faf6791d0d0c3822f5c6be62a32d13bd860dd968a4485e7fff19e7dd7d3f2cd4a97926f1a456e69c6af22b0010f13ec62ecbb7c5d3d41ba72d14d80a4ee1aeb2d39cd5e70d505ca2fcfb32dfeba2c59f8967cf7b0f7fdcb6b63293a8cfbad094f5dbe67bacab02ed184c5660a7a430b0027c90f6bb8e2a3506ddbb37541d2af18cd1091e06a991c149600610b998088e46849cd77c918c98ab80af34909b266f05069e5cbfee51c60cc0e28eb5d0c5a0a1ea538ba72c6c5820c5f03ee9b74b53fad726961cdbfb61def94c3900f0f08dc1484591dfa15209f3082ea4e3f42256dadd2278b214d73b3c73d38e4f6b01bc0118f3688ab2c6148ee1ab04f3d413de21831273240b7da8b1cae91cd5c181a20dc6ed9e4cb3410e70ccf5edbdc9b8507b639703c7326740bb692d635876f8d633ec84a17a354b6e3534bfad9667885424e90099302c2c79c5d8f0d03c0dcfdf1ff458f0b7bb5daa48b338f3021ffc6fcaadefd1d35b25da7d84d401f4f87f132e78eb2a69b7e04927c3222ca5659cf9e90cc51c4541fbe92f07576707c99f18ebd4bbbd24ad8bc15edeebd8e4cad288ec9010f6ea63070c66dafb8e08f3a856d4b23b076d1eb8b95a80f67644d245a361d263f05740efdac17a20d56cf91363757bf9b7a78def87a733e29349fe6ecfd53e3e77006e0edabb5f77dbb86c78b54aac783c587d98c2c17230ae68b1a664a35df1197a4cfc62a115610f5fa030d2c0ce271414606cd135c65126359e9518789c3c46296031293f165cfed736e422745b86cd5fd8b459709ac4991517a331b183609b923a3584d1ecfc18b3b30b4ae1cf27c69f3907c21e8a2b859bbf6976eaae1e78495d721c0603aeeb89970eb275a38a9e6713ef917bfed66a3de8402e8076c66ab32c9f4547e4f5f5ad4566efcc731fc32bfbc44e357355b58034dfef1f67e8e16439e597142b51b5a350cc5932b867c362533e5eb7823a05e727812f140bf68ae0f81d87f72142aa104b778564edf32daebcb6499e95e3c9f732ec750add9fb59e098fae6d716951689820fabf8e2240758ab4a54748f37024e97a37605714f00fc0b460e396163a00b9313fcf03a5ca3b5fc1f83df5e9a6e4ada30cb10326d8cac034560609d9c29d4120cb0ff8de2974ae56990f3726ccdb020f6b896c15ce338a87d42137349982a28802fed84bccc5f8fb2e27874b506c8907ca35ec924efe821781d1c8a71d556fdf9e182c6f4293c2281e1360b7d01da534af531f0ce960497be5a418c1cc79fb8fe2e85fc929529c55ff5f5e0cda62e90e817d7de61c2d331d55f4b1e52584f81187ec0cd9cfa6da0d3867c9bacdd0c70df6f183ce55a9e18479601ea1c6fad82cd39f9e21c3f51dc65fc94e3238ebb1bb567bcb26346ad739c652d9881f400e0a8c7f9e2194c1da19dbf056039a184b8f5668ae7e16e486b5a3695d08ad091c62e9088769c091916043797bbf6feaf6f24d34b846abab7280b7002393ee9a85ae9fd6d46ac5e8c6421cd119c628d846acc18c730031241d1367b3d7ba5288cc4607472f95133c0b27ce73daa86374ace749cc694b65e308e64bf0b3fc775872d1b5e5d379370fb299eefe18e69e24bc6a5c710588a86ca891ca4372dadb9dfbda324f7aa7bfd86f10e4bc6f01377cd77e6016c23887258e7e69287ec5edadd9b7f2c08f810c2a9315465b4768ddf190cbfb2a49db60a21d34af1c525e2c2c9f037e058c95ba7ab12f9a373cbde0077abb8427e6f1e376f73d129b77f4257ebe354a7aec66295d6bb846fca950ec42e7d5a1ac341c8df88ef02a226a385838a9d5de8d4962f7270547d30827d261288a92ca03bbabaebb57066c4d938b32df045da0d90e2ca28c2076d4d632a2dd1cb57b73dad83fe443e1e83f89ae7d53d6304537dab52399d14fadb3035452beb40b18159e2449cd06b20e4a42f58f19a2c0251a0ed8d86bbae554f40c07529472fdc145da3a49a79849f0e326132122e93665bde1d3cb968d74151e5cc632dcde003f8afb64b0226d0c28b08f81d3de0df59fa9f0506d88ed8e66a8720b642659a4cb3b9e3e2dcbf98b2e190bcc37c985a02b54b6b94ed14f96b218e85176df7a7dfcfe2f4112e2b24969b3075c9d63e4a8a144a188dffe282f8ff63c32eb86b4de5d491af7f0254bc973e52eada54bbf8189f04d49a17e0bbb78b6ca2a22aa9d5864830ded55f21a8dd545de49cfcf5acd5dfe266633cf6ecce4d12ea1ccb9a87e9b52647ba4e7a2f8f65b92bb7d8d5aee85b4a988f760c5c65cdbd6243a424aa37a2dbb3d7d5479bd5f7cd87d4f043457a9ba530c7cd0a54a594d6d3c0bc30889798b7e9d4ff7032d89403c09b4a28bab3285cf7b24ad81cb529c3053a1ca767321e22b358d1de3dc0c3c29db3f06a55ba89d5b5f9f45efcbe14eec05aca6f9030bc84d70b557703b50d73e7c5eaf35eb8467a3243d4853ce8debdccc8d0724bb8fa451e969224cedef87c66783ea91dd4e8b23539f033235a0e9af02b3696dff261cd50a190cee4630e46e275f676da37f6e488835251fa3d2cecf52b02c59607788435d3585b8e6dd73923631a41dc08f87af1c802c809b8c01ba4713ee6b61fc7d394d5f1b51424dabdf0ebb0f26c7077db39b0067e98f4538fc3a5f1e18861d720374e63c2beaf9f3b13b5c270d297fa6f28e5685def196caf1a6f249e54f62fd4e4e7b76cd436ae19526857a556a4099e850c304c564e94e57375de04620658586448f4999de390c176ac787840c02cd01ad0643214bb5299946227fdf9b8d8137f18223362dccc99472b2cd1d712ec6dadd60ef972892e3146dc07716234396cfc004a216b49ea0b8c8a7b9864c3d0dd07c93588b8e0b016518b8746e6a302cda5a7724b0053727e0f746db52ffa6188f04fe2c72ee761b07d19ae65cb2dbc9d40b6a5996922ed5a968f0b1180e025d72f101c9e1bc7c867922b85b659f9ee4396d4e8f3eddde306ea835c929f9da6308eb6ebf5c9a76ea4576c1221da3020296faa4541d6acdaecd3f96821d3586cfcd3e657b47eb0d9cd95815f8f94f9dbb693dfc36b6ab85c73189938a76639fda4c74a69c3830a934c141574e6d07da552c91c6a59f229f003830ad30a9e69e38e328a280a20dc24879cce5710d6e30965da0943f4b5271f04daf54134c410a624dc4e9d729c4e12e8f55412f3ee548c578f4d5522fdd96fdee6018b0b1f55cccd8c3dcee1418ae7d5e650ad7960f8b891ae91a9cc10676afa6fd7b879f961dff00cffc54055b52ab8396a2e8973f61479ff7c45db37fa98be3d1ed065985c67f7223d8a7821fa64f8b4499f0a717728784cb73335baba8093177fdcb6456dea49979f236fed7f1cfd209607e6a0a27df75be97bc4e1ceaae2c6a2e35648bcf24e32cc9a0f016cda2f44f86f0449a09a5cf5bb236ef45e9e11132eed2ce972066ebd6df73fa4ea27f6ea18de4cb3980710e2d5351d3a94e58ac3cc032070b7af11fe2940e61f2189bad89d5ca628b34d7ceadeb8b8fc9606b3a1232b1a24b2739fbfa97feeba388ae3d730f2faee19f307d57fb527828c89f674dc6f024f8cdd80c694bb3ebd57b2d9af79a6304ef181186a5f3352149ff7ba039ed7c0376c721cdb93fdbe70a88804281f82309063801972273a21faf6d66617126a3d247bbcdcc84e4c561b5094cd0acb8ee2fc997771b67ed37c7bbbb16478df305f60e14226546cb0ee057a5e9a1c24d12fdab8ee88fb0d044be1130d1beeae310f32c58c634696316e774c6fd427d353fd71eb6dc60c7bd776722874f341277636e14f23fc6773d8beb9ee4ee4f37f1c360a587d93b07154e577226d5438f106bab6a98e577facacc71389833048d135c0ed27a557ae978280372981a69db5e985f9f855de56e8b56fcd459722ee71a58562816e7acf946930fc633651361a287df26701f8b3d0fc9f2e491121ac06746bb18e5f64db1111db0cfb17bdccc9ca8ce81b190c5f0b88407fbe79944c38aa5c2175007d9ab5836ab017a9532669d799253f25842342623809cb58e594b1503ffb5fd92ed329c6c630e076790ea3588beff9adc7c51d90711199347b4d166efb887373dd5014e2d5d47d05984a1f544c8f713a3d0d431cd1e25098be3f120a7a0dda55f4d71fe081e416de19a384d3c34dd1534ec55d0d42c3170916314b2ea3d5bb07d931f2c7b1a7d58a62e17bddd8703e8162b3126cabfb1611ebec69e15e273f12f626349f4d66e090ddccab7b7342e24be1a10b40f3d37637a539152c934a8dfdb17d8d703c695f78f12bbdb47c09e5393355f09104935f03acdef7152a87cf507400a74368f87bcb05c85891db0e6fd3c0976868c583f8fe69a3b6a70c262a94a675271fb85b5b0f836925187999a6a2f1311bcc1eea6aaf4252fae71f6fc850aea5b80d14d929cfd2d7cb533cf1b52d2ce9b2c5f712dc9fa0b16ddf4ca9d10cf658001464bc0a905adaf34a0d60c2fcda89d55b38417754ec8ab5967c1e6d50e555a73c904a28dc83394504d52cf69864d72b97cac063588ca37a149514c2a5e366568d81ccab3ab5be68897a9e7888309c5d8093d7c733eac4656280d4fb925851b5101d89bb33582f05e1e6fe7154a89f121e7ccdcb6b6cb71d8726a63ea0acdf6bcc4dcb7e4ed455c315ff94088533aaf37a6dec998a7c434b8b6ed1b35548d821c9fad81f1391f84b2bafa766a23883a89b4f7a5618812f97773f9f843c92047e100afac40af8e0442edc81b23321f3d88a08c02d9be344a8528356d6daf32b2ba8677696bc6fd45723706815c155c22b4d8206449d094a2724213fd4b9d414cf99f797bcb05f9e2c1452a5b7d33cb84beea394c3a55d09bbf501a2a3609b8813eca4a45e6e31046a086a80bff13e9ddd7455b1d33c46480dce0bc76e57b24f9fa854e4a67f4bcfba08a04055a3c3388ce87fa69ce82cd1c5b627f55b277f311ad5f1a0ba6a17c7c31bdc2fa3723352fd5109bc4534776a8ab63d7692576cf62c7c6221c2b7fbb32e490693cee5f6b3dbb7da38f6a590dc04d535903c6fdf657ea48face7ef615ca29a06b501857423cc23dc65d9c5ddeedc1bf78c81f74247b855608c5099b08bc817c4dd62d8166a789bf68a131bc76aba906bb28878fc648297bd07273d500648c729531968424f892a10eecf2fb716453d7a497a7a758482738e679163a995c9b31b5e4fbd619ca4d513da338a13bc26290a9b7e83156f63f0bbf2b8942302f3e183472c5ddc1773a6e59667b34422055c04eebd1d44eccb172cf1c45726146f5b4a57d7d219899ea46f6a9432b31188df518b5fcf6ac563efcaabdd351a92e52956d379a482b9cdd7999ee290c7505ab9d7ba8b21efc0d2807b6a29b56745fc51910639597e71a7484c797854e7a921f280c2699c3ba6c0d22874d35f75f55ddde237407b7477d4fe6e447f067de2869333ed22c7b63ed7eeba1301bbac69b0d430adb592ce94fd01e8481e2ff0c430a3d881de2bc952bcdb178cdc52756b9c3f65b1c124f390ca5aa3ca7e56a817c82a56c7c44edaa81aa1292a8bab36c1c925688b8cbb4b33e2108615c6030da3f5319707fdba530a9749d634364e5834e08e21833dde3e45ee2b78701fbe872f60be8289b0f79a3edbd908f107c4448c898378e1fd16348d95b46322b1107e85b0dcff94068b190c8f5ca6aa249461916b0a55ecf3e995d480b22e74a3805a6b8e90f6712700363e5bd798a8b546160b2f2ea0ed48e1c9e2562dc1ae1e9783aaa2e44f693ade5b9ae654c630e363cdc17cf4412c2386387fc02e041849db610a93dff2c268abefead9da188dd572ed7cfb6620f1ad5f4b7366bbdff94dd65c520a89c8c4d8f15af4db727605b5fbde04548b26840df46885efdf3a9b5110dd4caeebb7b9b33703819523c8e2a88607212e6b392c6ccdf97f049ffd447e104abe280ca8e720065458aff5f66ad89cd29b310f4233f27364274c05103dfc5e0d711ff5849748e5b443d0f0e8e66dc4a639067e2adfc66d134670185bcef2828c2d3cac3112525c8b08a01d869d8f87ebc455c0d77911436ca317e0c63e880431b9273b999d67f34270c983b9d9646c0a05c5de3348fa7ed908ea663ad7e86d63df87a9a283af333f43f02a67e017fb69c1ffdf2596aaa5c03b90b19ddf3745896504ff360a51a3eb49c01b79fccebc71c3abcb94a949408b05b2c9d99fa0120d1447443c7c76ccae49de5dd872b1388ad270ab6acbfed7a12ef8b7d45f495e56b4f8809c1f4534f10df5f86a8deaf61db5f6868e41f1f36a7e098278675ab0cc0dbfbc3e3ce7651a5babf519949e7e9035e664e8564b1b4ebd8e32abfefc91d7e642ff0a1a83e793fca85bcccef8594d1ae84d605134d8b5b22ed0576d5688df092c51e8034240c2b895326b841d0eba2ca34ade79d3b10726926363fd921d4c3c23bac03d4cfa11561a83ddff38254132c0624a18512eace162f3b7f3d5d88648cf437a11c89ce7a0de550c846f2749f6e69e8c74d5d70dab45893b9a4a42f5f5daf3fec7deafab5c8ab0df5eea9b393ebe048cd58835904ce32bd73916e2020ae9d334a7b8bac753c59c3ed3d2097bd3f09f338592cf9e8be5e4731764401351a7e904f97b45a24d3822112d4ff9767d237467cb1a2da031f3b9f77d5ae59290b93f570452d9a4128b4940b288f49203ff8d11ee48d8fc06b4b44bb32058e590cadd131163fd3569651ab4aba681372f2ef11a3745571cd2d1dc5701df21761980c92268d639bd1b6e9b535fd029cdc755a868ee3932665df13904afbfc9abf3830d6a51d415a4f14fd606182f73bc941fbbe55b4cf2446fbdd43804e7d7eee57cb1d514851a52b0b0d3b61cebe76d5e313177c5a41e1dcfddb4dc4980d3a6b813bb4af810cf3023389949b52b0d46ed361208766c3e5846f8e1d9c7b1463a34ef35b0469dbca4119030a928176eb008d4667fb4cadb5f9cb66415c3a3b71421b926f147566a174160a0bcc0d9911479b336c4c8e67c9999c1447a887dae9b471897f4406160f27c4ff16cc496fed8067c89bffae9a96e04be89ef5d68b3376eb58fa17ce6269b8a052c9f7b793e6678d7685891fbea46a7583c5b898c4f505d3716e0420e457c332b593f2ea7d824966bda77d743c889483564a85510094edd473499d90044fb3f697e33264b547c2ae1e70412eaca9fb0fd09bd091d6a9ab68df2b48ae5ab827566a563a88b3bd5fae097e78b1779f1a7593382eddaf99ab0b057199de503789ecbd5b7ff8f1496d011f3088af35be5f5f1ebdf48703eb792596cb15a27d345823f171772806729721c024f56a6fae4616c38bc6406c159262f386208d4a350e96b726b4886bdf5a8a8cda53957de57b472230187c50be932dbc315f113fc039bf6ee9bcac89c623c5d5af0792f8da4b6adb396fad5a3cd7f0415b35b0d64c55f89938f406f8fd8f4e5b31a5f5591352fc2f063055d116fd55337228fea65ffffcc6a30f2a21bbf9ae5e00933f17270e75ce251ef85de36fc70304cd5d1871741667a64278aca7ff408e7a73d2db6bfa621924602779189bb02081774ea5176ee00cb14284f2380cbf3d2dac42fe78933b9072b8458b2d2dbb1c76db65e4b84ce4166293e18ae2be651a98c121f8c3557cd49e9be53c97825277635e155fda9a8d25289af0df4e60fc872a46d262e2dda056166f88d5fe35e091d573ef6f04e455a971ec3587c1a0c00370a1e6c54d88408568c7a31fb7a5102c2ba156aabd96e823ecec41ece30a6a3ffa66d18869e1c7f30428b6526a7c5b86f48aed9b6b4e9f24e83f88a738ea556d360a1524de76c11f86f745167d281d32be8506a9a457e51cf24a9c1f29ed1c3ba2004442f1b3a67b5fd7e1f46614efcff824545def6f748ca991deed3c7f292bccedc13b6a24f286fd3eef44bbdf4dbf1ffd3930a2e1b7e45ca9c379f70cf6be15272ea6ae573fd2ed90ffbff4e3b170c45437ca754b19c4b9f70c4dd0331f432940eefd24a6d8efbf72859e97ceb58553ddd273cd28249e100e0be15e7e0d8b67cf84a763a0782dd15803992b0cb48d6cfe8bd510f562e11d5334dd084a4bd75f37724de1e0782dd1b60c18050a48d96e4ae656e73f4f2e206b2989442454c78dfd4a5935c363502f110193dc63ecf9d6275481c66263e5d7ba5c8ec898a2cc62a58f41c5e5c445480d86a517861b7f433868de250b2ba881c54045dc13c0567ba483a018a4156dbae00dc42d0d5eca23d295d4999610d6dd20675715223816479ef9ecb4aac14a064cf969a346117af6aa5e0d8a9fbe014830443afa40746c44d944901056725aa8b8ec1e00ecfe024a0443d17e948da831897959f1fb0fc8f207e622b223833010986849dc5e5ee08c94c9d8ebf10a4c47a0593ca2ce64cced9f612d10be8e3aec8fc0858c16cea63cc0627c6941ae5df8f9667b73170de886044817c273fdfb8ae3b74996a2b7b3d91ba0446d12f46da419436ee981759c59db0d6b3de04cf27a58af1e928ec4a9f00b05b96dc176fbf77452bf8c7a3658d78823aff98015a049430a7ce6375ff90012f553f1f9a079619f36b5c28dcabe9d901d4e7bdfc29566276bdd2838f41197c801ac8007fb7650ee421a22189d3e0a876cdf3b5bee425f9a45c7df002b84159ecd1b9e9902636406073531c74857bcd294cabe90f32794002ab5612960d1080b9a39b4193fc1096b189f6806368c130627a98bfb6bb5b1fd7d3e55213e88ed92fb7f47051e3fcf81e8c13b51f24bab9697e41a07d28d27e6dfbb21640f0c44d98364fde9281004eeea4332370626e5185812ef52a21e7450a4c46c7e6ceb9c23a4731f31e7e27806af8dd321dcae6de00abe824864da15cf7ee28cecd2a75215f132417bc837677dab1994af00329492023f697595508ac7c08e091bdaa01534dc1afb23638f71986f6efd3afb63f7b2e12e0b46be0241be0c2f77a7ef9643f4c7a5b2c5244b14fb5f06835238a315b719f2fe58397fe926d45f4f0d7bda6cca666aeedd950ac02b0c78bd8142806d033f36a916b229dfa69b95f5a929fd0e4a1ac325d9203f118c0a2e0244a37c6c4ba35191fe92809391d46c1227546e96e87756fe44706877b2ba9f0828c60791e508ec5f9c6514b39d112a0af495bf9519ee8ecebbe00761139064258a34b28c63b26f586c9476ae0cd488769d58509772f2e31d8c09ac7c434de5f0f589fdba3c324312ebcaf6e18580efbb8e36d1fc7816ec615157c817a625ccd107104989f32b10159653460c8bb8c860439ba4629ded13408854dac1d0da516c2b62469a1cef4ee6f8e7c47d83fecafb5a01583858c7f021bd8b551947be4c18cf1a45592e1167fd8fd2f2b2f2953fe33e026e0c3d49fb8b5d55e76c7f43f57d8e82f6458b13e3dfd7bf614b7c4ebfce7c19464ccfe59de3d46ed269ec2de5f0d646b9fdc8795ae44cf790b5757dc30370b08178652d7fd1df10d66012cea61922d000d06aa435c16c35f17f7294e238c852902da183e9cbc9e6440d8798be6d10b97b7bf646fcfdc1d50417f83685b4ff9a02cb097b94482179abb0bf2e87531c6d8a3edfb418dfca6f690d8ad5262e62d149ef1186d7cd72358df82df2a961a256adb79b8e220e026f60ce8ef35c0bbe92e5e83e385cc238946b5268878d1f4f2f6674ce37a10ee65fbbd989139fb34f79676504027bcce120b44dd34fbaf28f3234d4dc430e3902aabacd1da859dbb1ef3ed3f777cd540864f95902cdbb71cf19a9763a22d232d3eaee07914422eb725edcc37cfab9ee2adbcae28b93f7239b3024d78c799572c6aad617985973490d52d1a2291dca01a4ef8998b214f66e703047573799b08f7745038ba75ad39adf65bdfe70639615133ab5ea3ac351d8fa748193b015bbdf5243e6c232eabc478501f246e73e76bf0227e0356a4161f97687540baa702fe8e4420059bf7ba5e58aa1ff09f2311465de418928e4f1df2690e33f3d7b2b8542a9a9d0c0c17028db5cd064b625ddd780241231232f76f206b612c397a6ca44531f05e885dd7aadcf8827a3d9f68738b4600448c2ae237310729051a8b1bef5b0b0c0a81767fdbd0878f23cf3e8dfc0790eb25075e589baba42d699ef308c01e21b64aff3f57bcf3cbbcab082714a0724ac86e8bb6a3c3 +MD = 05a905c38a20a5f5c39fe0ba24e7c9a806150fd90327ef84b08e32b2 + +Len = 93688 +Msg = 836a54699cdef8b938a80593e8213e3f20ff4f47982956e3f3caa1b59fa4b9b6fca8a071c0c3586f9afaa4f215b913e6c06839148c404099755da09664142a2a54864b9db4758fde0d576430e5a92120e38646ba347805fc2c8e028b31af58a5d52ddc57429da5f0dbe7ccb5209970d6d281fda1587aaef6628651fbcc1d4b10c5c5db0630e3a38b4ad164e98e3009f1d680e731c2ee436e5d6c144efe070b546d75d11147ee9099a43eb435f617f35735ab8ad3397aca4b6769d4eb8f15a157156645e24f6774012f5545ff22f636f2372b70ed84c94d77c6a5183c47ee140305c0bfe010f557ab343f9eb0d874dba8262821e96c81d3d9c24768a8ee3b6c3f84aac7735241427ffa2347b1e139e86348c9242db94b6559a5784c974ba3b1f2db4ce603dcf33c65cb2ac96905ee680ae737002333ce0adfb55f4d7127cfec0653cfa3f877b24e45ed7bab3f0b3b6085499a4031a1b3ca533c25f29f4a662562325b87bbeb267f07a940759dbdc7dabcb61969c1cda1ad9d80f1c4877c1162eec01719b200f8d793479eb0eae13bdd9778dc053a7d41bca6caec4a928578ad92472ce1467dd05ed10fbfe38d403e72fed60c9b047a3bfe54613d0c282c420d360dc267df2c551daa49cb96f0a279a0d917d1b4878c367c908f0e92b23a188bc25bff34e6d3301b043ce9517acf936f108452d72a7ada3c439a84659678a12d1e790ecfc13b0960c931429d938e35e78b65b88c580ed04853cbc90c3eab86fd33af15c0da2c86f5df70fe01a3a8071132022a5c760ec0a8aa6a050f109e6e03e7453d90986e52e13041440612e6b0f4eea2d1cded4351622ebf5ff7761802462382adc662c8132ca2ec3c32490ed998a58ed56925752c80c911004ad7e0eaced0b08eeaa20372df1fb81010aee82906400f5db8866cf90962aa10939bbfcda3d4150784bfe716018eefe525aa3e4945a86b914179ef5f06e0d0b657297d53ce19f9411d213ca89ad6d7e6fba6d6e05dc3ea9a8c64c8067e2dcc1a20ebe2255685a6633c30cacfb3e1b83819087997577bd6a021b0bd977930e6657548b5eb430263966a5459345296dc060739ef163ab775ca89c697ba00d165bfdfa8c04c9d7777022ef5b07e82dd8a764ea200040e5f11414b0c1d1619f8934fe573c9f16dcb2bce107b9856489e09b075aa740adc5af02defec1954cf8db63e0f129982bbe8c723984ed964aec1a2dd04b812cfab925ab5fdcd511b277817b3e5ebf8a68db593284fd63b4fbb2f9d258336a3fc83ee9901fe178f142ba1fed7f067ae05ed1ad606bc7b86c077ce42af7b8bef386c56f43a7a3199e7e2f1b2d2b7ee8248e2ffdae468a6815eeb87d8a4741fbe2c6fb2b288f785373b544e7dcbc2e93d17744ce5ebd9bdf5d21e43a92bf45ad87f93ea1c12ff7a33b88aa1a5ea9abea719ace94042992aaac318e8fb6d85a405dae1e77a01197854078bd37359c6d788f791bf3313305368dae25f1792ae650ce55f8f147ccee761d05fca2f3dce9aa8592cb4058324a2f7bf839145c1f805b64717cb31aca43023ba0f7021c13b71cfe583b100bcff7d1e190365cd22e9eccba911841ab925b9626ea2ac910a94c3c446a19f6ae6484ea6906bc2f6de0b8213b254a018cad9ebe5942065c64361f850228b648c28887c58cdc292091de630550be8097107472e76d3928509922b783b224beaaeab466ffa7810bc4e06005c5b5bd5a56d99f7ebdbd3fff3a21f78aa4dede71718970a8f54395e280dc2e370eb4b235e56a87188dd3d6f97d913d3f84d2c6ad511135d4430b6b3be8e7817d2ce83db1a725b3e6f44b9ea59f596c1c90586d90be247c5f6549a1766185122ecccaa05c30bdbe506d8ee792140cfcc863ba43ea1d45ccc0d898b9208f5758e24ac68a7406750eeb7618523d700e77b95b82da07e2d7afaf197312d8c6b0be3e43867cb79cee1e2e9a625f1637e06565f44ca088c35c8d60a4636efdac33ca793364c78568ab647037077e9ad0252e64ca6237db2366fe8c15e3fe1da452f64986fc2b7bfe2f8a86f8723169ed4f6b2c5a8df07d87697b87ca6f70975380da15dab6f8f9c1dcf8a94b3d07d1c3b18433010a6aee63e66cfa4e7037191e6fde749b1fb08d5846277dabc26281081e11ff6a7227bc5d607b4a2e90e21179528bdc44b0f2a525fdaf6a969cf1e63ec78d08035f9755b86a0efdc74be1ff08eb5ab363f53fefcf65e9069837067fbc505de3582d3a591965a09bc50bb750219cd3907566e8bb99017cb82d2b40cc253b2cf7c555911504d5c89a944ae2b377d98f0a05809d972762d325d1e40149fe0a52dbf7832c37ef5cff70b1a3f4776043d57670dcbf110f1c74a602fbf8779b2067f65b107c304d4dadc499815d3a6f4e5f7c53d5dda79470d9df4cdd76d3a12fe4ed6c98017cb32a6becd87d9d6b196b75623af669c97c028b282bf30cfc948b521798844c9ba595a28feae32597e32dcfee72c8f4050a6401170ce73b40e9c5280b8b5fce1b8901f9f44d7c963f5107b777b7c80cd8e3f7c4327c24825f156fdf3fa1a4f65af1e1dad07c845fcfe77bd474567e04b38d505cf106356295abde003a87de65f864c7bd9af4a502c81b1caf8afb557c336ae033d927846c8311a203728a768d6256262aba4258ffc6604c9121f2d8f3c70129d1614cbbf0a5eb5e818e3607ed374a8f9ac4f21ac7395b9e21bff982dbecd4bfbe000226af8c9d65e2d416fd05d5a65696316064f9af7173f9db6bedc5138a04626bd46ef995bc5aafeab9e057cc2e3d959629b1f777268051fac6742fe9658a66db3fff5f6fac9f51387b3c638916872149ca9c515eff25f2a495b07ccd0bc423f4a1424158f2c67f53e77ba9ab03d5b1e2af8e87957ff7345f561d4c4ce144323ea4f26000334272b39b28aa907aabdff765031ad90d569f8184351ec78a8d0a2fb76a0bf3c2a5e3ddf2cdd6e7ef6c03de67948b884bc6acb1ac7254eb6bf1243e5523d58245633b497ac5ceffe6b8b62e43ad4a219fe9e4763b6f8f271a2318e10aba2d5a2ffcf16cbfcaf366d4f47f6d75d7e7339e22cf35bd774de8f9a540be5497a3d9d6e59eee2e27d4bb5eb1b7f27a8ed34cbaf3c576bf43f1cfaeda343caf36b99ffecfac144276e34bc8730873be4c9edb7aef8fcf9d301b498e347bd28731df0afbfda1958932bfb6c6bae957dd9bca4e52786696f3d63ac53c66801688f3a4a952f207d88ed5ca8abdebc32544e6c633d610e2633fa0c0e12dc2d98f01067b09986f5763cffa941632982e4280c8131a6a6b9bcafd2a6e2bd6fbf092abd4e28a30a808bda8fb8d07b95293662dca4170b3caeb2498dd62e3bc546dc7c6097bd9b05ea44cb66345cdb68d9ad68847d1b516c16906bf246fc7626e99a50bfea7469bd5a29774cc3ee6beab9d3a3ccb348617e19df7ccb9e5355dcd0ca0da4ed57f57bf9c346080d8d1365f22f7b7eefa323bade26e4de853cc02e24f41bd54b6d2786ee99a164bb41bb1fab495960d8367f688eed0af4a4bd9f630da0e21aaabee8286233ee2675124b610daaa33c17085ecf50bd58d4a3e1dac4b257ca3db3531ea77d1a9617e209ab7340d9c3d85321a6384d1c354829ad5a993ca03b040d33b34c66d502ffab2dc39d6b5e1ffc358a41ebad950916de2b052ad2049d3960668d5f46ec99a678877b27b7c22172644a153097ad3d076c62c4be9d0a58a256f5962844e8c2d3f01dbc584b8c2f0189690c4f33ee37e3785a809ec53ad40895e7b4ee8950e750bbf96c7a5044b3704cf00d8faadf6072ad1c1f13711c7932c544d1fb3dac6fe3822375d3ed73148854e6ff3a2408207bb0af8b63c939b0ea8f15d4958685c255eda1bdac4ba0ba114a53cc96c8f2e0c82c1baad6f618dff69b61a5058f61486da37d2e4c91530dd3d53f5becbf24061fc76966b62041701f90302c937ecb69f54dbfaffde81475959eb394833126fc4929a0a5496e3dc92d168a51867c488db3926d2705786c5a214db65fa54581280efbc851d9099354e8d778fc28b0621c711b9180ad68e2243d8951a49823bcf435e5ea51ac19cb7718780115bf43a07ef58f32a13de1ff3bb2fa8b4ba5f45fc7888e0c8d0ac56e9c84a42e84945c8a1b07975972fd0a490747496c3c14e0f308cd9f39ed3d35032af5010631ef24a95b71db0ddb340c4af1c61efc602d0eff21cdbf76598c9212893337910417c384a7fa0256c42c0e8a5ff520449d38a70b795097cdb93e04232006efd7e65660a46569b53c152b3990ba9ef84bdc7cd29f781ecf45f59cb2bf5936d1e1bdf2238fff879bc8b67ab4e46b874e190642b84486fe0ee6f5eec56d9b8a84b6733435cfdb1c5d018f61a80ed879c9b701d280810bb9fcb9a27c64b64fcbb15eee64beec63f0a2f089273d966b3b112cb77453df6f1742c5e28db821dbc1ffe218cae56cfdca139b8a169a058b97cf800e7059e51ae088139e6ae936a8341749d7aed3d91373570c7b74e8e39f53abbcf00db91b75dc75a9bf5c1e7d1eeca09b1557b0ba0cb4174b458a4eb611384ce744949c09e6d3b2912ba97f7fa5b043e0b90ea3985053fb5ecea0f508480e5b09f24d2938d68ce7d3cc9935c3a64aa821ab1bd4fa4718aa4f00fe0560ac9d7f2be180892faed0bb75887668d187807666d3c66c6859cdcd26c2eba547a5ac6153fb75e376d467d68149863f32b21b55b51957936aee380be9fbb1fd449b05a88c27746096b219e1fef613e36d8de3ef18651570896e230da2959636dff66efddb4dc42816aeae84f577637c0a829fe9969f492c4c41547b5877e378a01eb0084a56ae627e32ed666db4be3192f819ee37af3bee3ccf93fc1489dfea107c9370e0287a3757a59f306e946e2a8c5717a4047d33dfdf80aa38ddb3d4b5b676dedea5ac70ce276f8c890102ba90800662b304f17927c0bd5fd8bbdd08001a755bf9a2cad75079f87c1a2ce3e98bf66fc2c440f454ed64ec7c84b6efc4f4c5e2d06ade6bf9e4d2a7378bf920444277f9fe7fbe6c0e595577c7e3d7d150b93e2306d861751cb3bce6848370a113de8a0ce08b8843ed951ac4099e256cf4760da2c5ec34d289e4be1d2daa984e9e86b8102e91a65f3ac63b3d095ca8a6f854bbc5d44e5e6888a061b2f8a9790f2c63886db1381eaa3c17404891c66968a37acff6fda5e721600f2b0eae281bcd069d828c3129fa0a3daeb24f67846f9b3f10d19c0699d8e35b58a69917ce876e755b2ed3760b426983b319b9543dc32512404a1eb8d43898bfa45abbfa44c4dcbfc515ab4787fcae574ffbee20996bf06530c1e6dbfb0f27d51acedd2032dafd2c04be7d6d4532c101a9e256934271e27f08be5b37b96678e5e38a65523ed2bb0640b1afb1eceb8ac9eb555975dddce5aaf1c9e593b34473372616bd5613b3fd93a077abd92430f0f73add5f8d15b5e02c136becb994b100120cfb4bf45785aa1d4d97d7ad9708ded2c101d0a48f03ba4e952bd86f02b507c0bdc079f6b350acea6f999df7eb7b39a3a5491482f6ce5d589f92127ea559708760edae22ce1dea422d06647dc891eab2113d93eff01fb0925b2700ae27a423b01d0a514251f34c6faf659308d753d9472b66b5b325fd9b43ef720bc62d9f08821da0cc1ce3dbbab81e3e9460bfc8eeaa1b4be3953f7006b583fb9b9062500847883686792ddc1c64a21ace4d29f812220a74835fe380d92e404b19d26bc109458655e720d6fe5abc627fa997bdec2bf9206affd7bb36fcf74de9eb55f3faf4c63d8457db87495d0887f88d0522ab227584b4bdc66f995858d35d7be1a001b210d84b3e70e8c60b90380ae261013de0df5fda27f3a7b1d398fa30303e1ae02a6b7d3204a8a07c4d9b9e3f107101ab4c7fd865a3280a875601e9e971330a9f432155c2114b58740c72e01e7ffecbfc4d9c18dc9b2b4022cad9c910a8891844e7798782ce21b7b42e5e282f98cf0638cd7f46c776c5f28b1569c12d3c08ebd9fdba3bfba1f166469ca59bfbc1ae5b68b3718baf9cbec8c821f9fac995782c656c2d9bb3f3850c313f8f630963617293e7b80f1a75de69e3d4d19c6b1ba182f11e1acc342da3527efe66a8e1e7b1f2c1509cf99369ed7ee31838ce9c364b9684fac9f906b514e034c070910cb36684fad867719fe0b2aed1d478b8e34e3d1026e88148aff5a05d5b6ff747113148cf47665fa1c842f6a2b4f0d783c8cb4097dfd08be1b9530e72fcf241f278c81e7cafe3ceaf95f7810194539e57d3151cd3b89a2fedac3928c61e3196b8cadfb2323b35fac38e671b747ae7145b8d94996db82fb5940e0eb402c91440c48ee0ca9af2452c063cfa8ca36c9383b87db07e0de87565fd693a7bcd0583863c4c322f5bdcfbab9f26199b35753f31952cd2955a4e558751442545d0db66af498d3da91e013fc1b7d52a12d39ad3671b2060a4fdf4b762b72837dab252a50412d769008b6afab476cf97b724e5386d72e3c4749de2843f589cd8011c7328cdc0b51efb491e12cd039ec653d15d548bc1fd64cde31fa2665c287084b645d7527aacc4630125715487c921ad810a100930f4aa7777b3fb1fea54672927d09bda6946c3005a88fd9129d90e8fddf5552ee952fd3900a676b22aa925b9181c5aaeb40a839afd4ea0cb1255f7bf8c250944119ec4dc2700fa6645ae12fb3032fe1785806df9917f414c69c5430637a21591d361692993ca718563ec96b918196d5b0131e7e4bf24c85a57b25a2c8675625e552253e5ec0cc255abe91ab977d991c252a45a252f431c3e04a3a4f920a5d7f2bf69eadbdcccd51f462f04c4f67b5096a0612f8288e7274097208935ae3a5b973abf96d20914922a5c46bea23d05941d12f1ccc47315d0a739b171a7d73dd893eeaabf911bebe1c014b4ae1bf38244a1d1db9bb397d7ffbd11dfc41844b5352f02b4cde1bb5aaa2796033ef7c0f7486804a702169d349cc84831ea509daa5ab39e65288a9167d5a80bbad5fd4e6e88bad4de6bb62c35901105304b1789252f67ec443854441d4a8b9b62daf642eeebe169073d5cede0c1e071624f35b02c9b9211d966077d81f1186d82b7ab47805b24eaaae0ce873f187db4515f71bbca897e38ac186ae39db297aaa2d3e1032bc0ca8050bcd5a35a7d2ff585e1945204de718746b7461f78764f794b96631ef7001c52803938e937d93f5c853f661ce483b4262eac63d81a2389030368f841ec046289c2bfc100e012f512d9dfafc271608f3eec5e89b78ca38d6f55b1671413b4e44c9eb636915d12993f092b37ebb35d49f709348063d5dca3e6c6d9793e73f8e9c49d866043b4bf730a9d89c640b3632c780c980f85fdb81390e048f66814b9bb18469707bfef03cb9c1e63236978587eea7df100c50d1e24942a67a639ffdda0712151f3ad16c5e81d1420170d0a268874e5a619ca0cf51f1b2c9c505a3b4ee1f7b71debb32fed13b405286ad472b3923fca21233d02274c4c6f50be72d0f2c5d18f61b87c446294897be3e468b7e9e473b7c9e5c5f79bf3507aecb62ac7b39628328622ae5c0eb3c5fdb94c6ee1aec5373106290bf4395c4ed5d6012a27789a2326f5f1f280d8b89014126c91f9ec7fb3c240b5b700e9cf6f09786719f8281bebf515edefb7a8ea1146560a77068a5810f1df5270249393db9d39af9f43ad5fa7264dde4e096692711eedefc810709976464bc8de671ff1b91980a3650feeaf8042078bb67efaf8d7213fe32d2086890c4aeddfaad175313106b7091364d3529ed0aabdd01f4d646cd9b4ae4d3cb472fb842b5f7c6a7e9b6deb45aa514a449228589e3c44f3451e58cdb517d26fe29a6a7d6e0ffb3b20769250924ec5ca29b547634ad0b902cb6dc285a8e761bef84a82bb1fb8d04b440ccbbd06bc1aeb6a0422781841d755c89bd28af7e6a533deca6bc8a422a3a2d3a33ebb09bef6b6f0c7e21f6f5647f322eeb26308dc43d57c624c2c67151b49b38413d1031a0231a146aee0b7d8b1e4c3af87984591e6acba5a4d6dce59e047cef773885c99e56666c8af445990bc3191257cb215cd34c181f9981543b59ba40a4386677c03475d28970cd2bb4311e1769ab638df57d51bb78952ac2df3f46951b273f6cb20d21dcdf9ee1346bc58fc595460b20df872c24650a6b8f4d9929d8a8a63bdb2b82cae3e377d8d62c2388b219ca0a80678b3bf1497bac3ff301e489d147d459792fd186498e0ca781c5995b8ba9ea3329f3f190ba5b654b8bf3f727198ea15e377ee6326664052ee93642205f6842bf934bfd812c4c3f486509e24f05ed1b5ff2fa6986be7c4ab2eef013bf09877c6c301da05103a0929d1a9e26601ad5bae5182cebf1d65955f9ef8d7e661e7a1fef8cc39a7ef50af7e0293b43e8ccfaf8743380ede2326daf6a8758f2d402c2a5a005e83c6964edd787fd6bcb67a0af7c83c180dff6573bcf6b330d01875b03a62437f616aed7cbda1b13aa1d5b1a758faa4eb7429cb9363e926ef43aee9b8f79f2af67b9cdc21748000870ca31aedfca4e279ea653dd0f6566b7b90f7828f8c981b8d78634b872d9dd584a4299d260b4e608a18baa3709ec6e99c5efb297c1fd57f0a01c822f40e8196fa126e2398ac8085e6a630e5bc82c0081955c3c7c6d9dfbf36bdd249b13fb3adb2fd7a928d08c3b9543bcfebfccbcc30bc1e5642b6e13d41d95589a806e9bb80710e56d44b479e649e7fa09d78a072c94b61bc849460776fbb70f5283a34227902ed09cf1a909aee8a1caae4772a3b3b8fc5fe73a87d16b0a3b71faf97476ffe2c419b6d440b3dc0e1b7f5a64390aeef50f323f93961a16b5bd10e26634b2a79b6b2159410e212406afb8acd22fb544b569333fd9033a00aa968ca76e767dc5169ea7e2ec53a9ed7ef8d703f5d93b3b8684c3766f61c9cf456215c856bc40cee0d8ede22ac3e6bed3618afe63b7f559f50c6351eb1441c912aa6cb3d378942b86a493e580d1300eb094250a806e8c266d4aa380c09d2a849ec9f1f8592df061747c0a5b830e4e5372eb35a6f04f58077bda0451848eec88466b36144c6eee1736d9e1b2a5cd7a33b6d14d5227fcf1938d24f662ab4c205aa5e8b986419dd5a34a589a896da14c15e900dcaa9bd9d1513dd60a22a9773e6239dcfccccd4d5fac2b52955e4f3c4c7075d4540ec0788fa6fa47a0200372cf457eb2605643efd4785652829fcec0f3da09e653fd2a4b852b3f1468c95dd13b5af0f384c14a17ecbe67f2b2dc6101cac901914cf45de54a4498a6c4acfd050b391d3aea8c4437f0e4bc9dd672ba6149c3f97fbf92dfb857998379344975a0c7666fd30225c6e29971d0de3e111f51e9315dfc2c47044725808c26381d6c16f84975665c1c468a4eec511e8a36246631b7abb1039f70144c901f18609724ea0678aa6f68de579179ba99e92b304e10bbbd6f18d5eaa7a2254eb8ea1e45549c8a7a9b58a8ea5ebaa26337b891be10e3dfc914ae23d71f635822e5f5f1b65fa0eca5b4acacded048718ca7276e3df152164138eb7de35bfa4da322d65b48ca89b5a072f5e51a60ed3f9d5490111e83de07dc485b347dc1b98e560bf5ebab09d96df172aed22b64fb94fbec9d1afe3d0a2cf0df67f82505339291edff032bb1f28dff2041f4907105fa4ecba8fc4b7148ee054abc39777aeae30d553c326947779e400859ecd7f98ed7fc7e4e2594e52cd3b026a268c3b762082eee4809d23edb075a9740fb608318c69b70e73758fd1866580fc506b83f1b6a5cf5acfa050c8f61b559a1d0d892164e92402ea2062dbe2e73529ea3c36699923e27d57360352725c6cc06ed9e9b19c877686ee62afb6094a88b89c053e24f0848e15c16724d14dc356acaa2212295ccb156327445eab2216e3730dd0826be44e3ae9b43b9b8eaed57b277af0ebd1ce3e6a613ecd580256d1ad20e6a4ea859d0b50c2d9bb50d1be1c44f8864c5cf01767db47db068303cc054d88ce8a5ebc42423768d8ee2ce2a41f17e9753d4dd062ced1dfa5f5c8f6ad392d736e88c656fc7c57a358dd150889665dc0efcca6b7d5fcb5ef45a4102220f6b4a96ea90a9cf240183b018ef48c957a7f469e004fee9878ed40621b41d04ec34af175f213d64d16e2f77d0bb2b6efe2e34327e131bdd4cae39aa56144485e2857142b6dc74c34861da0715c35cec026f37f3577326bb17bfdc4b67d02d279ad43db39210f45d01931fe8887671c2fcf16c16ecb3b425612a5883c7a62b6c7db770b4716d40b485686d968962fe86564b3d27ae43588ec1742ace05d4b3b6f39596ffc55fce4c5c684f9b99074798a6d347b02ca06869a133bf94930a7aa9a5052ce01e570196fef9426247e2018c5720082ae869884898dfa371ffb5d4b6fa6cbeffdce19f16d5b1c2750671a0d3efc7faf251fd1cae00de62e0cc4556617c52a9b9919deb6e89286c5e7534aa01e9219cc109d9b9fc81b67a5b6957743b935d89a7dcda6ae071a38c88e4b98198dbd369f1609dd4d6940e566c575ab2a7e7c3eb450f25b23f37d9cf8ef55ecbfb2043ef2e06a7f1aea03c837e26dd9628e24c3b1bb91e45bd343181cb27c2edbb6ef998b15c8684f74ed79e1b583e93410b5ce5865b0299fd0f216fe7fc546b5c006af325e2b82332e855e2ce5c1c3e82cb5c972f75a12361214fd64fc3a1c95f9d2e9b1639cb4104153e0df1b2f4fc60cae1bc71894876ac0303517d4e299c389daadcfcb22e62cd4df67c4fed47615d5272c1f7168708103cf26dfadc5a38697a664533fc600d110b25ca137b81e1fb2a96442a9ddb5c40278388330ec23284bbf7706668feb451d53253f6de3302ac9bb2bf869fb3e7be6b3d3cd045e02efceac4cb0e9858dd0224a2c66495e957f42e5e90859cbf3eed6085f83d123262448f54d196fb0cfbc4720d8dd7230336646af063b2054bd64fb00446e4144790ee023e108a119994fb65c906e9161f426fda2ea59679f82277c22ea56fac8e2f7bfbd6f4627c7d4d39486bedf4efabf098e45fd2ad5b22c7d82f7b903a4b748250d4b619ca8c2668e0c26c9f950017b552120a8751397a1af35061a3ce81a95e1f1561ecfcc1339c943c5198440811253e0bc5104c856cb04bcd773ca6ef8b07393650eaa3cc134cb64ea1648c57f6b4bf1a0629d9df590c640f22d76dd5981231c0099f4a0d43ede951e280d88056e857c5441093a7eda3be8e0b106dd45f039b4af27749f554148fee8b79a311a0348aa61581046f890addd28664218c5e5fc82fb20f3e24b2452c9d02bb867c712dea24e0d796a6c9a624652b3f433e048b5af6bec3911becf441b5eec2fd213838d8da3ca0e4de1e0a34ce602e2d99f01ad6288f30ed3b629661f1b62c71b063e9e93e9f695985f49b7176dbad5b008f829c4d89e3ad03c1cfffa8ef547eaa82c59dba7f8d7f2efbfe8ce6f429560261674fde55384b1579059d7400e79e60233058e653a9c04972a7c9a7204ea92fe41d534377bb61e106bbadcb71323b81b3cebd3ac23ab756170bca200679cee9a629392547f96be6e966b317d6e0e08fb3054d3021bceee557af00fa0d3721b0162f73ec6c5ed3a79f9b4ff1a85027dabf586b6f28acb177a306008dbb036c23b27496015b78239397cdc6e14c2c7bf3275caa301d86b97d87a53b63767ae8a519bd122c7bc1f64b7082da5f58c2477989667c2b96e7617774113403e5ea31c4aa5d6aa663b8a63fa83edcd444ae24de642a73ca1b2b43e606be6cf78fedc1f2e2ca2207a9e8cdd0ad7650d8a66c9e82360d039410dedb59ae2158b6caf233c051a7bad894ced7bf0eadd8e4e47a1f157d82be022e8e8232d8ce79ba2da3e1bd856aa791dad75e4b3a69d771855320f8a92005acba96e312253a628a2e5f663aec876abbd29ecc05bf1ecf171f844ebc57597cfc4ba4787801e9859f53a13bc9058296bf22819b9f1b51424df989e2c0f6b376696813bcc4fd40757223f5dd085ee0ae34212c5757bd95b37ec9d097b715c2947c86812a8975f3949b15e9c4495726038384fb89c04450a53206f4d80f22eb69be2d593c561a677582afe97c3c8cc74955947bad791e1689f027632e29aca248a6d3287c8b49108ac168617f327e48e202f6393ce2c95bf441a1b804a7118bb3bf0e6b65c9908366cfd60e47cb9a2f50141090a28dc495569f0c4fe5f8000c5d7f359e82717f347c165f3c60787eff36117a2e98daae574370ddb75cace6b8885fef3e5d1363a84d2d8a7853c97b1ce683a97f6a79c5162d6f8c6ad32633f4d6e9a1c7403fec635c8dde4e8c2f3d2cf3d314efa1bbd75676d39ef6e4048665cb94e3c5f65787da2cafd12b842a3383e098431bc941239cd2459bc809c84c6fd8fa3bb6c9eab481201be99bd63adcd63f3bca706b8a586da24df97aaed1f49781820016457a010cf94abe2bfce1b77852460179e2f7d42d89553e7b5db22d6147b4d760e375dbb1fac4953862af520eec3f8eb4da2a2570d9f3e136a1094541be1b28334e7ec324b712255d92041afe4f90c8adbb91dabc26826858e317dadd371d88e9c0e555e9a0abd518258090cb0ee255c101bf5283e1b96a4ece9e6c8855446010f559e2656a0a2ad4779541f9ac9cac9b47132b5cbde13d84bddd68d78b184425564d171c55a5ad3f12c2bd0e9b384398e62dd39afd9278972b855e4f6b11bbb36e2f52931616c2948189507e7d3da146797fc9e3336591f2a206bb5457c92d27a771335e0dc601913e69aacda5254c207b79acb9f1a31023bbd21e8ae3971f1e8cc327d1bf4bf091c3d42a70b577aab366bbca83baf389b6d397e657911417f4a895ae929d10f6329c696e0c20bd538bc5b6c1d4e1df55088398a14ee2b88e466569361549adb8e03289d3f4795eccf602eb112228cf18a53684ede55b0d18704d9e6cde278a8f2720c5fade11e47daeb8d946ffd23b2b2976bd1a9f5c7a1d2eebd5a151c9200f73d1ae510d9ce6fbf261f1b1c280ac22e1ced1c5f1799822ceba8f8214a116a052ef9365277ccebe8d68d5001eb6aa968aa9435e6034dfbfdc243c7d9b41c6f840b525a59034143bbc67e3b078d6bedc609082628010c95ae3c35cf26a1dc95dc9dcc5a0fc55400a2bd9be314583418b200f2f70b59fed6a5212618ee5b786775ac103d5a052ea904828c501192eeb29359faae79524a484b39c0ab1b28196ab800c50b240af6c648def88ae784c041d1dac75559351973084ba88f9351e7280b6094cd541dd5e0d899879a7c76d34fd44c02f3924a92de452189cc401d0928d795258ad286f37e1b7be287bab04e63037652910ed9de116881096b08d6a8f285681f4a868d7728794cb15988795a06c8226036b42a2494db34d073d5c2eb0f7b9e2b15587a8a665ad39b18cd1b1fbe8a16d4ea6c858df0040287ec8e2bfb062302f0f4309453c126d949cd73dcc416b21b55b51e3141ac4db2d6de1b57ff5fe45b17eef624fbc04526638061057293a6f98ba0b27767501d0e6452648f20a32570470c9272a9ec208290377fdd50bfcf781fb2119f2764dbdcda4f501a8659500a2955ecc686cb1db578fcb5ae87219560b9f421f1aa71f1e5dfdec9425809ccf164d1ec68bae7a586c4d6ebbe3e416178006ccbb418ffc6f11c06b74dbf3b01eda1887b9f6cc821be1cce09579ea899899d24f8329994c2c839cf0084e27857c688837fb5c4f4f72527eaf7bfcfdda75b37248eb153ba4d31dd418d2fea473643c0c9e1f0ebf591838e349d3ef868f1b67772777a71f8cff5b0654696fe31062ef2628a99095355a0f8b4e41e41d2e162051899d519d6b0dc5c42130047bd2f4dc55761f74594ad440e71b2a5d3a2dd26881ede0974dd58ae86e0ddb7ec731969e2af4d54c84200367873f11dd6604fcca98a2c60a9943033d8488a0116db2c49f07238f6bae4b53fddc287cc71959e1a0f666d20e0849e33fa810427ed7ed1b798a8092642033627e6675efbcdc832d962ba889243330b759493317098e36e79825aa82c8826eab63a695cf1128173d04c8c65fef72be0c24d87fb2640926d585590fc50b5d539b382d06bf86748c9c973e6ecac27f483e2cd64498f0c14341cba50efdaf1998be865a47256f4a69c8a7fcf05e3f9145e9dbd3202f525f02d8d58a4681163f8481b8cee5854e22254dd195098ed9515d7bbc5fa109eb2aebe72d893503f347cd8159eb6073a59455988e96f8d10247f58038cc35ad3dcd75195e1258daa8bada49e44026650809513539636cc95ced8483ebb95c8dbcbf24dbc1c63089a9112127e26dc5ddd809ceb08c9ad3dc4baaa0f34f9784200a6871ab03054a9596e338b7ceb4bd42b81e2476d29dbc9e4117c15adef75b088961e2039c601592e499878613b58b380aaee904c5fc8563ffad7c1714593fabcc240c61e8670fe604aca3ff5c009e22523482f6b127ccd1b9e427d47a2db09e45374762917ab81389b504a001f684a6215788a92eb0017c12545b1f9ae53c3487043982022bacbfe61b2ff4a037dd17ea8060b8b915b1a79b668c34d1205112f423492cc4ea3c3fac779c89a124f60c3037b191dae95c08a79341c0c76f9dce3f0cfcdf544705073f22c0cbaf4e6e0774f5f1b0fe7b7f03e973024fe81360aaaa39cb163ac295cb30d533270524a37e3b3387b2ae6c792db38e543eadcc484cd8324a7dd2dd4ce003e76a485d4844f4f5890a03653d08daa83d9e2992fab3393b7ee152d6f7b8ea3ad1ec9c1219a0e0365eef2fbd5d7cbf3a19667d421f3fe46688264191b2583e484d209ebe2975e4603dbd94015e633febaa43c615aa5cc2cbd69fd6ad9db970ae81bcccdbe8026625adebdcfbb04ad12f589c70883c9878fdf2a46e750a4b15f03807a2d5e5f4e9d917f066e6e3a21787acf7293446516b5f54da95a2988b929fd897bd4693bbd40d1461ce6d68f777972fda4c8448361e7285b8d890b8f98b1febe388a881d5d9241bc68fe9c0b975b059cc4712c2a506ca0db5a3e9fc2343f2da81716630c15dd0a68508068b66a665a333c54a363cb8e8455773f8d28761ab2ce8142a110cd6753d23d32e199d6e49a4a733a5235ba93fc514e547cc9468cb6b8dfd4eb316d7a458398deb0bbc41bec6ad1eae0a805c43258464714ae8ddb61ef9795e878de5c0802c74a7d241d547919be2ef6c494694bf1c7dffede3150dafa134d41ec0655c3d7343fefddc7d768e2a2cc3c924fca72a539e3e2611c334a61b9c49d96ceaf9e8b4584aeedacece24ae58d59191f2ecdfb051c674034ccd8adf3c1a57c1eb0c2a564e3635cb3db0fdbef39f661eadf847b915236826362ad65280e01a8dfa257adf822b633c3eb161c2998ba739a23c0ad464cf72f903ff011bf715822f7cb842c690a4e79c6662095f9714e561543a91a8cd45150a3a9ca3a22b352f0507472a91e63d436a39254cfc88e591245866649ccb0ecec83e96367b89c981cd1e449ac81f5ef7242b8db51ffb584b0103620c26ca9710b1a47e220e9f3d2ae616530bdf98748368b1fdca304af77376099fe0ed68788b54f0a6fed1d82a8acea3d4f65eee386896611804e4144d9af1cf929b47012d8f30a7c3457bc0fc02053b5cf2bc8cf5274bbd4efd91c3b53212c9cc83ca4120acc33e356e52e63c5118415d898f01454fe72b150ccff5e8c9478cb042fd94ec549b3880020dc465d8864a59133cc7a332f73f0cbb051732d10e7cd0514768fb27170b3588e2c7f308cddad2384c5c8980fa6d98a0c7a43dd9d63ecf273e59d794c53ac86b987d8e725d674b61344c82aa7f3b4b268e2964544d46ef3d58d40c1e244bab32956172a5b38437069af4092fe43c86e4cf1340c0c209c32c0d640323c2c260764ff05a037e9627c0d6ff9771c7c5ee4410fe4dbfe30bed4bf28647561f139a9f4ec6af2c0d2190087edbb820a88be3ccea46f5a20ec1c0457eb7532597d38c261830ec8ffdbb02560904d5bcf4d309f7c189e307c3cfde812873c102db66e79312eb8c8faed6e121fbf79a973b5fc35d2d337061a09aba877657eb8e48622f7ee54329dbbee9cf04ce40514ffa76925583d028300396c6d0eeb06d286d49b631f5c42ed4ac882e66f66ba467a0ac09896bec95038b6895f60829b051c8722e64db0b161ad61681d11ad60e4ecc84ab515bf5214ca664aa5f49204f9ac89ffa8ffb746a0eea396bcb921bf995ec84ca55ca66678bc33f66852840a5741c17ad0bdd9cb53157453ecf02a9e0ad6f2118ff3ddcd241804d7cf03be75c7e017db87107e062128bee9d53d30c7e25f2ee09c63ca4fbfe6c033038eaa0df0937369f47e0ec1b331689e9e289b00c7fe6400f333d7b4f12c51532b7baf997b61bd6d4091f1c2b0375abb7039d31262bd7cbabeeb6bc364f49e7f705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffefa9da3b1556fbcf713c551b88e5cb64ccdef4ae057b8f31c4935c703a7280c1af0e163ccf5bf400deaf59d3ebe8a +MD = 9c6c3bfcb538215e569cb42e7b466d7838c464a0f8cc8c73db52d8a9 + +Len = 94480 +Msg = eb79d074809df39c920a059e28b9e95fe2d9e59ade1ea9d4db5b8d939f531bcb97cdcd99bee61733bfaba8205ee7eea4143ad87ff96bdfd7e8ff4772dd0ba228a1469798aa62e11b3c9d9af6d593bad4c856db7328c03f9de708135a3f94f564510eb5db0dba583a5107638a556456d5465476de31c5cf0f239e7ab38f971c65ef4dafc8ae96857946118942a602c991d65d3128dd219915e3e703e593bb1d15c32a0ec9579c6ec062e596888f161beec09995b9f47da5986e0e365814a9025a15ce5845ce771df8efa812c3d94854d64b2f29f93e80f97e0d399b74d908d31e2c6118a4dccd9a073385835a4c3f7d30c048755183d39fb10891bba2ac819648510ad34d4947ebd777a273b7b0a49ee4670b02278a1d9f17a73d1d4853bc55c0ccf113aadd8c1a4f02276941cd1ebdd988a157e41c07ff9a326549d09760176ee53f5f2260452f561e3dee606b56e4f96b31fdf10139c921f033c8a04015e53ae41c401d991930d6110c897c51f31a2b58e47ab4015a05932acd21221685c60c10af3d0351b127b624bbc2fd489e685796e25897e312b9da285bdcbce156c2ccb221de3d50b41bde9f72214c18ffd4656e521e01710befdd320682d86830e1621299ab315ecb1535ca5b2fcf89bd693e285c555a71eaae8490f59add74bc2cb678402d48439e1ca5ec9b73ef62812cc80c2a8409ac5affb78952ac33cda1aab02c3eebeac6d438164f5d75146df227ec61e13378ea01e85e664240423b88633975ba6d80b115716e39c7bea770b9619371aceb0ef387746170efdf71861960379ddc3c70ca0bd096f301d50e347de2a382b132338e95a8a8ec81102a75fba894eacedf24da5c5c76c53442b381e7b306dd18934f85d38e1c25205cd5d1d74336a5b5de02a8b01ef6f6888efc1f9fdba2ca0a93ca9ee82da362f24ad862543a0715bcc274feb01cffd0244053d54c626190afbc0da27d8d26ea22629cf01b94ed840812e1a20360779931e01f6c965129792e957e5839b78e06d62c8943d359d238c456b15d52f2489ad6f7c8ad27afe4cbafa6868ac5b2c1fe3731082225929d7a16174bf745d8581b3c0cb65da48479cf5c788efec886a91a6cf87f57b946369226db1938831c91648aa75047b8d8d0cd5b92fc7deb3c2da29d0957a8367d85c81d2d82e8b5c6d9bce950003209b4d10dd47c39cfd6db34ddf4edf9de453f71642392eece82dc1a6d81902ee53f1f64d6f0bfaebc306ba814962bcbc18d95e4ad5f94c5b393683bbd79ee402903227172d6e2c20ca1f5708fae4b3718b786c6ecfaba705f8f7124f5faf39fc6fdc4e027b06ddc86d37f749662d6a4ad6a1bfd6a1c8c559a1f00bd5c2b25b384d40d993ea3e966f46b149c71da537a464f5b726ceb93dd2ceb1cee3c350fe42b300584fed9ddc71c14b9d0673f4a20ac0d4e0d3d925670dc9acd9fdb3f369b82bbb58ab17ad167c67478f8c1b94300a74dfcb724375e7773d51bb88372243e521a24919dad4daebc3358fcc86fc781feb76e5668033158ba430f217af6603763f85a820c9bda04c5fa62c4c18a5d0b7bf2abd3521d597d768db0c208f272ec7dfb6046446cffd1a8719c38f7318e06e4a7bb172aad5e4c725a0783778ee3c768cb3dc38e47457d2e3f1041b18de1da027da70938ddc62f75531a4d0df4392eeb11f9e3315433701f0cc6c536c6def09d1d7690c3d31b8d4620f3061449ff8bd0759d8d77bd51124382c4adcf030dae7d2e309615b7e4ceae689a98d2b8ba45dd9e30a9a6a727cc614714e2c46cf77d6959de0274b2aa5975d315e99066f4c4db35ba1e073c3e044303be4b5d2b23c62a4686bc29ecf498630b6ee3957e347091e144d6e2a41d23af5fc8cfe26519ef889c33ab7b8c4af23fb5ad6d2b2603b1c94bd4b87f074c926e023c589a4562624b04eab9b4ba34cfd37cd86e9886e8ef491b75ac258c54b8489621cdcef085853b25b5cd1ba03b97e505f9d025c86b92daf82c9a1d5bbcfc04c08015c6910ac220a89bcff763e6b33efb177a1a111402448a036ab09d0cc86c2a601aca4e7a80c134a5a8912ebe89a6043b54bf8c6ca74f7a0104237acd83467cc9c3224f5c26e772d93e31274a82e5c86c465b5efaeac3702e51c11986945b5dc4f815bd381e5a09417a1e761206c2f1b23838b2463167139337d1a3bf65737657a1ecc097cfe2a2e544a2449e7e062415129caed9e5040c379f9a3f005d566f8da7f07fffa147e5cb8503b97750790b9ebcd07a3a6f620223726516d2e4cbef6bf06623fbfc5079fd238afc24e6e34e541e1c3ff135499e5d967a50bc629b9efb6599d31048c70783087f362da70c954021c72587a18188eff52114473f8e2644eed0b8c8ed7236631a2a8e1bfabc8768ab1b53831ad167e076a28af9e46c2c4e7452faaa5319afa743d22d7449baccd6a55ef26d0703e4390044db5db7fd5b22dd68c03ee3861a576ac13ac3fbcf0d92f8d929ced2dda6017d512ff8210958c7135a320d03801e79773dde8d78c3f2a28ad4212de2285640d40fad548b57ce45fc707a9e1cce6317518f415c275e2210459701129fab9bffedc77ef85bb063a582f2bd7997399238e2ff8ab7726746e41069f20571301e45b0c0c96cfbdcbfee8c272627da8953e511d4e227c0a80524d2941c8fc07d861a0544b739d1a38b280158da2f4f864d25c65870337ae708da755ea637f45c7c86d49970e647cd6f5bcbcd04195df72900e9d15d6306edf60de010b9867592a89205081bfbc3211290d1ceca6e6ba68e7e6388d03fcd8278c6fbf17c03aceab14580d9e100af681dcffba354b5e35925a81ac5f250376d360cae4b1836ff2b40a82d54e97e726a371e3193cb762cd99685f7d0ea1dad78d7e7e164b4a7d71cfcc1f4c15cfd74ef09875be7573aaeee881de2f0e12e9569045f7c8679df9d878e9abe6761031dbf3b1161e81f87d15fa379c46eff0c5809647d67f78f65b7329d3b718f211ad5a174c42bdb4ce8fdf690a083926b3e5f20a0488bff1dc18fe5d2aaf781c3c9045f5ca9a20b05e29a79f79a09a44e4c11765fc9cee84b7c8b6ad5f13685709912bf9cc7acbf73ff10b17f703ceccfbfd5d24a0619f8431d15884d1818e35010678adc27323ebec6c766d12906b2171e15fe080955792a2c9406e22584e28ab86b87c3cf1dd10dbf286095cd4e3d4df138c042da68b12b3170ad3d2261cb47198780fac953c0887399667265fcd69ac1a6e1a07f3ce96bb51045061699e6aeb9213b291dbe535969834210f8f7c52614c629c902b7681540de96e40a137be822a382f7d145d2a5294fba188e29521875025f666ac3784f5841678005b7d21cdc731b0cefcf84973c6397322f79c59969c14d1ec0475f4187a181820f6d33736dfbce117e46b2542929a005e4cf65d07a6cb99a0b2a66155467ad91301de5155fa165ae8791a40778079f3ab4137be62f696c825356d5f047f9b15571af31293acfa68a1198a2d6b2675a78a82d4f0210212e7da1b2f4fce9c05578d90b5fd784ec5b4e2443f4e95eb09b68c706294da6fcc633fc260a61c124639f711ab749c7604aa1c87ae169044a28b2198451ef7863fe4d6c9a6147588ea17440c280a48a923c2c0625b27e2d9dc9fda6900e0f0fbc9c73f9f63fd53464d99f4eec041356ecf897e52cb04f601148f17713aad5f170694cac22ed33df0fd1c8a38189bcb2d548896e772005250e6c3793f36b6aa8e82d818c07b38ae1f85296486758c726b5f2aaa8ee4dc704fcfc77021a9af6bc8bb0b9a18bd802c08623b14488b95d3af5bfa39b7a7ebe8643c158cd6e7ea0b3c0b99df497a6c206200ec29fcaf3a677fb771c4f01fa12324b8383fbd9619117f112d58c1463f33a30d971611750c96430e2bccd6c0aea907c09a0944289f16f85810872e858bce51d4d65935616ee8afcc72c1ca4f66e293f1d56a1903fe744e4cfdeacfdcd468e4f32473d6f8e3f6fc8f014449006c884fa854d28adcb9b1d76c40144390ab8bd2e50be654900e19dfa231a4e17821d2a170a2e3480753682a227164186563bfb226e7315ceb4ff9cfc29e94123b198a1fc74a1caf185e0fbd3c2c8accbfbf7ce93560d54e5f1bff234ca27259bdc5e73138b4df4e842c0116e5bbc8cf03f13c1e9ce352b760149290ccd7d02664b9a27c217dbb94df6ff4bdcbb9de9dc6bb8598c9f93a06a2ac6c9eafc92e16e46724673dff22208e7c43285aa11cc79c60d20e491cebea7b55e58381d0fc99a150e578dac3b35025d384cd1efc03cae9a3b9d5a6b8f8a16ea38605df99bc3d2ff97e278465efc21a2832429545441632d695854f77d0e9f107d68c158dfd6fe4d35709b75027f4efdcc3ff39f72e380c9c0da3bfb41512b7054f9cc02820a07480f886001cfc572b53b279899c42beeb468aa7840825ba053e69ae6be2d67d3354eb22eb16fd67313fa63810af22093368850718ee935e8ff5bd3775588f64b5f19766e4e87ba3b5f2e7b15baa4ca5899485590ac1ee6e9bdda2ce7903abe570d995d86a0c279b0e102f7bb7081322523d1403c64c8768dd48b2e9e35ecc7e086f6eedf6fc51cbce09c60ddf6315fe31e4b99dc7c8feeba8e9760050c451acc1357b2e1833bab46a6243ee2125d5978d0dee9dabd1d555a31264a82dfeebe05fce42ff4a4ca2c3579c317328dad29ce82b0b69def17b354065f757e748ebb7189c7ef81991aa973a2a075352ec8d6cc7bec8b8dda281090556b686294ce1afa02257aee2bd429e768e5df53bf57685905b8ed1245f675f66672ab940756e287ae2956a522a0b57915b7def40601e85f663c6694fa29e96e809bc77e95cd1bffd6f80d0c46255411f040f980cd6f5dc5e7a27d7bbf6a75e0ec0e438606dcce4cc2bd278d5e0c0e9740a8b85fda48cf73d00fbb2f5d612034f3f4a716212a0255ba9e2a8f34fcebf34e17a3f9f535475069ada6189cb5f252db757c95af60bf0206c3a07a8e9ef40e62b443b6e8decb46f9a4c89f430ef322ecb8496b78250d3bed5510b5359a30cec3a71fff7aea663cca1ca92a1c162c8d70e696ff4422f5e8b87c03aaf197a81cbb19bf3a72021d1b223ccf23ed72a479ad26ecbbdbfe7ef1b05f00c0893d62e19032acd199cdfac94a2cc4f07fcd63d0eca1d1060562b13e1a278f5fc73668038b196d2ab7f4042f8a1510fb9acd7278757ed04889f694b841fb38ef7127c26cf4f78aaf941e4335291f39aa051ad85b90e66eea306132456c0484d850bb760213f38cc6f7f4c0c47171c9678a5d9d5f85013552c24c90cee26afa832c988eaf2f36fad9a91d82c2a8344899ef3eca6e9bf6ace9075eb83cec542356cd66115992e75c4f73429119178f3ca7fd64666f1cee5b17c640b175d2ea85baface08ea822f3b901b0bf6af06ab2ffb7c7879494e10cb45c9998363dc56aa187d777a4948361d04691fb86ebdafa8fc34210ce67a8583d9d61237ed52bd1ad61c0b6f5e2c238d132727df3c83c43012ed08252de7740b3db653d3fa7b4a5b5ea02ff011751e10251bca7403a2124ea56ed5cf06df06ecd731036274a022f716d08d034a6d5130a20eb17eaa60c08a1d802f0f59a863ad110ecae9420970766876cdb3f15ae274f2c984051906f76ce3ebbeef0e8bb2d6521752724cfe5a5ebb589705ee85f9647d11ea1238dbde7d5d772b760ed01cf0011240047ac70839764091032936bf89abb18babef299e44f4eb1eac3fbfc88288c83fa8b4aba38e03f466b48bb55b6ae56f10db26365e4910113e9a8aa0de144e01f565e2f353e6c93cbc20fa49f690911521a7c54c47151aaf3447d7ba882ebb840a43ece83fc830e23c505f3bb88119696519b4b1812f788ea7bc0f56ec59371b274abacf90bca0ac8d4ba3d3c8c7e3348538dbad331f947640ff18bc321c2a8cf48334f36d4a81645719ac594fea593d280c228a856ed52fa71adc348300fca018f5439bfffb3bd044c364157470e14ef79e728ea0a3a28083144206078c151f3ca8cd0e6e5636b9fa50b24f60e3e52d9af5b103ac4665327df63179e548ded107a5bb95e1e4dbe621c87d4e3acacca3b819c92fd0e0850d3cc793d646bcbd7e22f3f678802b90216234af5b2baefe78f913a05b35f86ad9698f4f6551711bed349a65ff74b5be30659b2fbe5b16e37407ea20ce03167c5eab574d6e2fee61e7e6a3ef72e50acedcd105e5bff18ae35f87a630d261c22364ab26753907bbf534e0157e18fab026ed4e7ab9a6169266002450b7ad7785c7b21004af0e0261419cc9f8f93adc31302b860393baf1b7d42084ef9fa86ee6d01183f9e3344867abe749554720b315535e1ea75b44ab8095874f8bcf0b6e6ea649ac0ef9f400559ddc0a335212a6e2f64dc16ff98c6b7611fd2e2d2f1e9ea3b122324ad99652b47e44b19a0158dd2283c1156155da5a1fb04ac8dba729270f5964beb66b62670ab6e7e9923c39815c6182c2885876a006db35c79f1f73313a07d6f758989f67e2ad8d5824ebfeba19f85871e9e8a764b0f888d0817f45e3ab2141863a46977ac1cafea657f7f0afe0b00bca8eeeb7cea771098e88afe765ea116d12645e90c63177017c3446548939f162747e53ec0772ac81a6bc97a1e07f3d2244dcc9d376b91c6082c1c1756fac232618c1fd8f379913b7c32520bb7cf30f28c4ac6da8b0e21fe15f08509a8ac2ae1f5d60d6e785a40c758bcc307c60cced4639dc34569c32e94dbb11dc0a0202fa15ec62c53e1a1c0181a6b8b02db59541464b7205276433e26b40e24b0efef56fd06ccfb1da1e8959a4bdf18916a2d372eea378c7612d6d7205948587eea621761786af8404b8717ca67880a17f5010e807e9f5644d226702e15f0276f2231075b4e20b2504105ed24f7e6ce2b0e6d30b58c5f2c33368a9f8c94a5f02629d4ad66d27ea7c224fd7c36778bd33f08da543abdd76cc5b2abbbe82fca612853b55ff0bfd5571a69d65b7b50d7c7b896d0df8c6dc89670c8e26bad71edf8da426bb5a560e53ecd7218e1602e6b0a4c1ad93927268337c90bc71568f58105d0786044d15ffecd5ff04dd4816aa6195e176bf7977297df32ddd24f971514369f682b642127b2814646dd7b5b902973630ef1a159dc96eb42c19c70a47b27f99b9425ba0132810914e8506c5b3965b6ff8412bcfaced0fa8d597e3f3d722cdd597ef7acfe1aeab350774f1e1cb0db4287f937a0d6b3f66b56f80ff1bea4a3405dab19c3744b602e6d661206fcb10ab490f0e9038a3677ec444fba4ea47d2bc11c8af484003e81b8d02741cd9794647baeed9f4b91c0d5cbe9a3159c8b8616de1aa120652e8eb0013d4d76c859d589063641e2ef69ed80a89ba4aa61d039f505ec7015ed5b968b95e94af98dd01ed8e2dbb02c759f1708f0fec6d1351f1366c6e69a5d9313f064c588a2729476cae4afe39af4649dc7ef33677c229cc4acbc9fad626fece426ec3e8fd64a62da542cbc0284d332e29aa3ee8a5726ff7d60970eb57ab56148a4725f5379197f675531959ce03176f9e9b790cbca56e385c956827345c686cde3a7b697ed4840aa4863db374fa797604faac8a0582acf8a61ab998b562bc3c07efcc2b1b55f6d1fa853eb4615ae1aa226edd4ac832b3a07a3e6c2522e5daedce0d2023563d75b33ff82446df4ad773c2a016334ddd0b96a1a988b5c20c4be8f93d803976b487183a86f85034f2e439aa375e2fdba93a44e3041532de0096945026f255c5e1b668b4d8c1b9a97b8f64a3dcbe26bbc1ca1007f71c83bee943589d71815f89ed890b7596876b860d615c75373cfe364b4364d729a390aaeeda9ea6c5323f0b0088694567524d13cfe18ae8efe3a092702ba71943b541ea37e4cd34cb0fdd93403ceaecf32b4798ea9754c4adb8f417570c4196ec577ec5ede94c0f2a1f2168d82cf731e319415c860b23d018c5e20f296d9a16cd932f85386f85ff8b6af4d4eee1f6dddf2523a8c9c660d5d91153c00dd71a618e703c703f00dfcc96f93c1dabe151b88e56d5c4de4f719b97a42d732cd1293ed6f78dcf2b23c23df2d3e38c36b66e8a99b440f8eb2ec0eafb875a71ade32f764d2e0ae92361961c4800cf69b8e7b71ba7474a8c19ecb38aadc1c0ffb99594d19c1f9c085040c42f3f89eafc58fd92336118dcc78f10b442545a49687870c0176bd22972da4ab23f80751a8c3f7f69996f2edff276222adc985bdcf211fb1b10614d9a70e807c913b2cc496394f5a31678913955f5aa7d1e23cb60e7adbe0e84279ad84aa2fe71757e975ec780e8a872244ad438353114d19ab2bf8d7342ff3a65c1ca4831b7132b8cdd41012bdfe0751d6096e35d3e59bda818e02d8c0e57fbc2c857b2bdba15fe83a6da59bc62b3e608db699d965ab3a9f306ab0e1fab7f8fe6b969cf6d90e1b60cfa11165bf9898f90c434b0080c8a5e2383087a559fddbe7a9be7e86ac0dd1bcee2ce82322dca365b22df62dadc47a5e198dfb75674db502677b845dcd273f47265f9e36685dea411fd51fc35525044d54c180e49b1e00c9154c62eea4e0a0b9f8c7a82228a2da15b5d74c540f70e03a6a79bc756df53bb643af8ebbcbd0926fe5e39a78cc220f5e14b2f072452e9acfcb1502aa7859e25463236c37ba7da0e36e31e9accb71d674ace6a0808ec4a058173207f612b2812e04268004f92e48bf02312a20bf18dc03eef0d12154b97d8dbf4f10daf5a594ada7576e85f088f65d427fb0871f7d9c867b5016b72f93aebb23cad1db7989994dbd049c4d490436389f6c315255067476a282c5b497e9906af543af7a17050ba8b5dc7dbd5b3684eb898500e5087a105f250772cbf601ef3794382e39667e6829323d9778bf766ee08168c3e1921eec9a536ca24fe292f79b9116b29be07c3b59b2a68de1ee7a60b22775deca9a8b55d2be10e8d2e60365f17c7df1040d7501b4a7b5a59b5088e6dadc3ad5f27a460872d5929ad768e9a6e3a6cc5e1445ff37b491d993078e487db520263e0bc9b561053a705cdff3ac36ecb0804e5f428159e3f180bab9002fa1fb93d67b79017ffc044d28934f1ec192771a4866176b91f4dd5759a1225ea4dff897ca12cca9fc35ea9e29c2c732d0460d54632a0f29a774eb33b2dac5e25ea446bc5f98793bc0ab429e028fbad83ece39ff9f0e9915487698072abc2643a37b60622570f12f43c886dd314eac879397676c2a8837a6eb668e522fe9c5fb19e1c039aa30d70d2c1a31cc34841ec9453e202ab42b7d7706b1189540d827613853f0935c5c9d4db01cddfb8ab48405ea2eeecbba7cdcde3102e1510c0bcd1e656e8c1fca58b679965cd5ebb2747ed5e8f64dcfabd0d864e0c85305cff9199b578ddd2f62b9b5093536d40d3a3851a1c800a79716dbe2a39c7df8342b24bf60553e7e62c4040b85134732e09084bf021deaa6c27a02ae02ca903b5c9c1300f604fcda2a4cac4c75c71a8cf643ce197f4120a5c243c97d1b01abb6ff914890d4dd459b068b26da43b70d4ccec288f361d82f3f2712a4e254c82cd59db949d17554a51b880e18478769bbfcca9b49df625982cd6155397038949021a7627b656fe197e61f23e506a96593078a4c952fe93bb7faf189eb993eed7225bd3b61af2d3a9a854c8b01ba32211f178e44df777ef52b22683f2feff0394f5c3f82a1212596396390a212b4ba22dc873712ad488c2c78ee25d39ac6c50e942fbef69e6de1aad12b7be78ca899e147e115446315a9281db8cae5a0c045e3cd3aac05dde7f9df0e276ee9d3e859f2edbfb948b5614eae861cb7f3d66efb4f66e7971ec421d6a95cf1fa177cf682ce3a6d939df8adf4f64e748d7ca0255da80dc100c0059df0a02a15ae0f0c75ace9ba9524c2c17e34b5d37aabee9275d5940e51698806cee04a120ceb2ef6c820cbeaa0fd3594347653b179a3c821f2fb8a050341e54c372e0d914241f5d08096eb472b8d94e5734266650c05a7d30f47f07e711a564a692271144032f20e1167ce5c9f463f39ad11447aac31fc2a3d437dd705635985d7660b37914eb213fd2bfba766b7b305647b944ec4c9439c0f66789b4aad6d82f4713267bff5a486c65be9943c628edd1bd9dc6e002bfcbce8397757bb6910c662dc8d2126b847eaff601ebf6ad7312555c46364c8eaa5e17a24f088d216d1c484f081f060072a94fad111958c76287284b3efaf9975ddbe17c18aab19473f01ed65a751e672bb295b3758931bd003492b30d7cafc6de2b753979c3b1b7aa702fe9473c2348b782c930b5a549365201ddbc392235c337341b00fbbb53311a85c5b156dcde4a1f00334b5ad467db62d74f8d4c56553570e01af924fb60abcb1526560fbd14166a131a2deb7d5554379c324fce7fd5c48f16bc4d7fe99fccc6099bfffa479054a0a5c8fef00ad948d93acc2945047e199ebe472491eeda3d124a6cd4a0e319abca9d83e5f2e2bc60519766443b4f18dca4bf04a5e473d7a5b7bfe1fe88f776c3efe2940a786dc543a69d47c837c76bb5aa033bf9ffde5fadbe4f42a53aed7045175e43960a13be99e032b9dcc2d43e4ab77134476a983afd2ee4d6f03f2bcfd94af8d7b1303c6d0c084002a863de5b46d3f136b8ae0a303c0f65e6081e1b5b2691989a8273509c4224ae6b55a24d884f066b8a74529b091269b9ba155f23dbd5f326d2325ab711e33f643c0b078a8e0d59c779a2deb28c2945ca9a3e8bad198d798bc8e86ed995985e4abdf11bfb352ad3ed496bdab98326aa7fceab2920dbf72aadc4cd351fef098b4836306509444b7dc642f6cf17b4b4a1c09d85c1e4eabb0e750d0939efe9ddcd46eeef6d1c851a5d38ae6c4534e779317551f4db610e802dcbedc302b249bc2d2c2e57bc9dbe3f7e2cd3f4c278e61d6286301f00ff0eee9098aa2416d1d850b1e23e90d9f2b862e58bfbb7d04b78493cdc832fb726b4ae3ec28d53ffb25e3e635066c14c853b2a9c3b6cdcf61564a5c85d914b893ec6683f33de7845bfa3314b5fee139ebd0f3faa266e8cbd3e73d80df2a49cfdaf0dc39cd1e5bd6e5f6ecf70f51dad5601fb4a17324befab2e6d8b1384024a9be151685c86ea4804f988c0dafb3cb7fcbbc8f3eb49492c4a4d1a65e3f9f47ceb3c5aff873934418ff7baad915a935b19523ee12f52b26c2204410f843bc25a7629ef2f26d20cd195c0ca3e9ef86abf342e25bdeb35ccd6b9b9ac30fe30b40dc30edaa03f38ba20a0bc801a08bf090bd5b7452e25dae09399d521715ac212bd5a54e1fbdd5586553753a6ead796b768845566dde72935ca4ac1697a9fd82391c464cde80510b798e3ed02551364befeca704f71380a15a452e44cf2d55930b288a4650ec15197132af25e04c51364f42e70c9932165c6493ba59181052f81482e7e731618006ceb97ca809ef58af27239bd9ceba82291e08d6e02d036415e7a3f59bda713067f4bafdd30cca9b1afa271bf9020d829be91cea6658770770f70429d0d6ab8491859fc943836eb70e5aa60de6cdbb662958688b4834ebbb9db53bfb1290711b27f3d05555f83c2afdab28e83fac34cb55ee4420224cb20ef0c4b3effd9252629fb2052896c5c3756d8e382140081a10b60d685f70fa9a601e87f48eee76cfd97d52a6c992868504d2564c4fb47bcbd4ae482d8fb0e8e56d7b81864e61986a0e25682daeb5b50177c095edc9e971da95c3210c376e723365ac33d1b4f391817f4c35124e9ccbb94cccef95367b84c6c2792a9ced0630f51705317f4920dcd68b367bed3fa4552ce23ba5cafbd71f00e954c7582724afaac02aece77155e4a9d0989f26e858cbdcd6b17b07b078bb1988da79b66c2648e51f91d892c41f33abedd70147df46ba3998a2b1c3cafcf3911f6ec4303297970473be8709c7e9643d116654d88aea7ac3b6a3fc97c1c022d81ba6497df10504b96b257ac4e350d0de09eb0c5181b0b81baf19adfc2b6ef38f0c054bc84ddb2c54744b265cacc2141f25c99a3b4a35eca1e09868597e55d0067f007dd7afa678660db40c299ad9a8710386810e5ae672e6f9949e38211132ded32c42047cd3737ec5e4aec423e4086411a643332a4ef56b6882c220ba2da688b6ed2ad75c0ea80f0b5180b4de9dbe78dead63523edbeeafbc0776aba007a59488c7aad8c39470876c8f24643153251fc90063d40f19c91442872e21893bba72c74044812a21778857f20c5ab290e6d97f53c74121951f39ba865b3acc465fa3f0fb8a59162227726c2e9b10d8f37e365ffc00120cba4b907289704fef93ffc8a43dded90e130ae60799732f1ae755a6e97d90df2705f8b919051fe979b125314f9bd47988709c53b8c706fe0ee907bbba6d1c0117148103fc8dbc9fe13a6a7e51a9edc30bc7463bfe3bd9162b74fed5312ee41043428f11bb97d8cbbc8c3a1068cc9d4e0e83b30f566c5bffd717b583fc579b95323c6d62d497f70572131e87e398656307324d6e4fed2223b84dc6685a5b94f87a5ec657c61289c5988b72555071d8aa9c5f8fa94912ae2a3593abd2f9cf82c2721604910eac13849641f0094e0d599d2467e470e081626bd565d0544917c77bb01eb28f1ca926eb01c2f2042abf7ab335f8062594cde1612e40de7cd6b8f59ccac55ab28ebe364151ab02e6750cbe75576c4f67d44cadb296c110ad11477fae18a6679bb33fc4200c569d10cb69976bff514a983d7229d8a54321858737c818203e63bb58c2431f98524b237c7a980f942362372ef2d83be0538b66b70e817377f9c981bdda55989c2a779f36a422c8cc7f20d527334b64ce8eb8e10f301e389665139f70ec5e137e4bbcd4587aea2ffea120f2c4a7f5ebc64124851e4110eff20cdc55006cdf18c5328563707330bda155cd0075e56a197e0778c362b5ebf2215d8e52faf05b30f78b6bdd0d01a8fa6af9af9eb9601aa64c6e000c6b1311f78ae3a419bf0b44d48b92daa18cbab55ea209231e0dac79fab7d164f095cd1568b51ba809cb123e7bf7f54c418e02d862ecf0d21ef12f2a9f56de11f0715888be367224a3ada9baafd33f4b4d7f8ea49fb26d2711f26c8efc8fe0819c9c59ce6065938497e5462bd893bd5215df928c7d78cabc879ff929aaf9855e4565256907e8dc5226f05c049eb01bfb4b3cd30274d695ece038397d12fa38e28b6a6feb1d36d908016d6ff76aceb7a15e05a4a92e226b42cc79b21bdd2877c8ff2a7dc708b60630979af666b5363cdebec8abd302029758acd3076851face7bf113f37f630cd0465a2793c5168d082dfe043d3288edb698f1b28df539e7b97601b55596b491e3c3d991aca4f739a5f98c36fd2a3b4a457e4bb6da44cd85a531b19d088f65fbad339647c588efd282dbf9df503c81bed0931b5e50d9a54b2e498129a0dbff90991000d852d368de4b3fb77bdaec04a1c451d0f7a62659aec137e0e9a30ef9f733e3b9c1f936eac35bbf558af1bb2c99bd450d313ead4336ea67515b838aeda60a1911731d05ee1830b5448b391c721d07e730997ee10a6a2652730dc6f23303883ab88a32d2fb4376dc14fb15a27d9250a2eb7f0b6417bef1a3966ee1b772b63ac30f65df209adb7a6e47691bcf979004228e7058a8d3bbc8b56c0d685d15349e4c96a466713556c8164c43b00668acbec0aa0beb21f6d738124447cf55a2f53f31eeb48d47633bec5ea42976d9593edd17beb03751d997bc44bfcc9b23a47e7a0d6814a8059d016391df68e4dae1cceb924cfbc1db0483c1c74f0a30698236fb49a3435b4e5b2daa7a6ea06e6dbadd66cac54d1f0ff001e514727f4379c4c51f8110defb8426374d52c26e88242cf6db1bd822a37334c892a6ba9a28e7049f731e41361d4976b4a8b58b01d670b09fb51fc62b03973b1e571897e965339a2c72aba4f73500c50c693d2928cdd5fe4e81513fb4940e8b99aec48afb9ce22e02baa3cc70e73cb9c4eb441d41c2e66e79cc2aa55de92b9eb10645142f247508a8a7812851886f9d64cb54d7cb7a0479a8023687958780fcfafa04b422805ee284b5de3917bd1c187275f9f94447d2b85fafff66e9d3a12eee06adfb445512242d82157f11d9c4936477adf23aa0b3931731dfb3c9720e9cf0988b5a230731461988c17afe82fb96b14ceb532d3939a25544620ec2c72bdfb94c37413d1b3ee0cf365cbd3c2d13aaff622c7c8a65c75e903420d854677b5f8e7e3c4101058d5cc51761b6395ccf488553fc0ed0bb0f306ead9690fcc78fa506cb04fa0d5acf3281a85ad6948660e8199ee46a9ead53c036fd3dd93a6bdb38a89f2bacb08f570a8b65b2cecc3e8b01f2af501052b147768fcf71017bc8e092fa870b099917c74d48ec03ef5ee9a04ec701c9b08b7b5ccbef80eaba6f63324c630f3d71358892635087c8b8bb1c32f6fd42db9bb7400648bcbe055453cf32bd78943d7404664ae528d56bcb6f4ac5c30bcee06244b3d675adc35b7fe761847eb1a285929415435b38617797e9f9eb1b89129274d24b3fdb095d578d88ce89f894d6a05d432a2e3e1598769ec9adf568ebca4c73ee8ab4c175d8841dc66ac5c3989d0824b0297df63706e3507cdb7743aa3288cfe7d6d7f169c15ba10ecaba58337237996977952c1319485d820703345b07c1e94cd41bc36bb458a7e072fa3f0bd2b91bbdb90638406c1ff657c51ba364a6a260bbf6f2bfd20e05a2e9d7e7d0784b073c4b5263b3356bc4eb8c7a13295d8b84c683a3ef6f534aed12697e15c50f47ac6b80c810156884e18d9eba9c2ebc42f37b528f842a65f769870dea06854755033a0caeade76063f06ceceb193be759790fa70e33a970a0256145903c89a70fc6283d6a9fa1a3757bfa15a00cd9953b8fe3dfa4703509b18b418ef52a5ab4b44fa6918067cca835dec5a75e09701c6592a88ae6ec8597c815a868ad4260d70f1a45b78498c0e521b34ff099719803644bbe2749faf3b1305ef6511d2744a45cb075fdeb9546f0c57409afd6e7c9d0b3f5a543421e07dca6b1cbe6b94b6ea3499cc80329ff97419dab73239ade8e1ad13afe4d63d84a7087d889882621573a4259ac35c43a6a6e26c42d0a59c84d28588619c423bc3413401dbfb3d84b96ffd351a3244ed818bcdd4897b298379faf96519846063c4d4b8c0bff08441c965a692f3d4d3e5b2ad43dc333bada9eee172747ea319fcb0e7fb82da7d3fe36ede0904ceb1ef726294ad4ae91819570c0d597b39015350ae03650ed4ad56b0cf618d5253d281deb9c671e7521b55d5fb081443f1a6f7a5e7af5e2e5685b2f115769a46293e726fdecdf97b174b496be25a0d944f9bee4483734ea8080f39ed67a598a6f9fda86efa31abcedfb1de61e989aa35fbe71e75a9d79d459152d4eeee77ef3b6a180d233478f1a75353fafe3a1f55f09c9271808164b3cd9a566c3ad17308cd259688d5b52c32d01a3b868bfaa4758bdaa5ceac34a1f908ca24e71a39224924d17f00cda4d4d50fdd716b50549e71cf5f271c42ea17d5becac32fd64e0a1b0717dc5f542af9442d44fb8f956e97b384d020458aca4cb0b6413b2ab637b5e73f9fb48cb06f22e6f2f6e3dca27016a272d89830ccfdcaf3b9d895c2021dab1395100f6f299ad723259c3139be83a4a6601d98c550ab19048f37d8de01277209ce13f5f009d4a16390ddeb8d33cfc827184727ec5dfabf4d00050c65fc7e942fb54f6ff79644060ef9621bc2477b0a8d60ff4e8d3d154634d4ea39413b4999ef116d846c1a13908c29d3c8bf43aff24101ed149036223623d290685906b107b0a9143d37db68c746e8d7fb6c6f9509a9c3b881dd914a1581c39ca195a5de68d946eda040226c32a2fd16bbb11252d62e6d089d5d96b46db66fb9eadd5ff743d4b09fb87036465909323910767511e138c98771f68c89c52a9e8d4d197e252108afd38aad611fc4e44de802a3e1f8b3309ddb0491bdf0a64518c0d131488f89dd0b3120e0e91ffc9917ca9a209c2fd37cb2ac5e176f12976fa4fb7e0d065e03bb8b6081f2176d88925888dfd5eedfc986d0a3886eeb1620100ce65d96ffb9170af909b5c93332f035d8c9daab21301eb5be6789807925c990162875b27dc94e321bd3c54f8595bdec5e3691887c49597046a1693360671b578b69cf4ac6b52f9bb967b86a54bf761eb4770e56465302212ef93171ea039dcd3253714723a643ae9d6c9604ead8a332a03359fbc875a22f3f16e8215d22d85ad58c658fdcc410d18e8b67048d07cc92eb1278614ad8c00241a1962b02eb52673abcb30c3936206d536c345286747aa55dbe756e13a3e402fc4143762187955a2a8c61a48225fbebb5b604d61d4834d3bddc570c6dff9697389ff8ec021d299d6da37941feb827b17c12e07899ab8384d51727229e145f29bc63bd74ecd69496cbab02caf6182e297027cf2044c4ee206b14ec97ef09c620513498f629da60af0c490527b26c98ba589ed9b664bcfd0f487eae55a80754e4bfba935bff50144ff72789407addebcbfe1e062242ba38ba34fb764311358fddce9eb589b76039dd56ed96fd9693b1c628505f4c26e72887f6334b4972bc017345880669983456c3ef4334464db571129fdbeb1c576b54df58d0354f12c3320fee1f8fe3ecf1f3688acf6c03e96cb4172b69b37b1f6d +MD = 9325747a922495cc8c494afa2ba67b364ba6d0accd949e39a8339918 + +Len = 95272 +Msg = 51d8c32d5ac426d342c3484d6eb2648279ce8fbbd9ca8658c01faac241a449a0b45e1f4e5b991d8a463769717349a5ab3adc74e2e8153a78ab812479aea669ce84decfb4ca65706d08b0be35d900c5784c38b04289eb8ff7b8ba57441edd2a5589ffd949ef4fa8e352d45182e6004b5376894bc504740c3db0734c0cdb70179e8b6a47f311804c53ea4b293ee471bfa381774e52a0d739b25a5309b72b88b50f52c6219c7a1fe42799be4e53197baacf36acc0d0a73d9ebf8003982e574d8e11a5bc6d2b7055f8c627d5c9a7ce4492415acda9295fcdc4cae82a015aa6e6290d4ef435883c4a11985c37a1244af70260b885124411b0323d5b714a22627c0e691315809b2625b605008ddeb1d7ba7f9417790209040d707ea1807d6dd136c68fbdc8574c750f7075da7e8935bbb593453e548160820d07f782fea1253d3dd8e514b4c183732fc650b3b3a89a3f12c5dbf6bc9731d1d87e0ec693bf31ecb8ccd5df82c62866ae40fe53d346c7abf69dbe07594d643a955d2d34e8de7927d02bc5e8d96e2397b366e7828768a4478ba45739d5aae1056d2dbb96a506e535ad7b1ff562c25c4e67c174087718195af9610c54d5b6907a877420b2723f5d6076474acfc4c9bbd3f1d80bac4a5d0e2e685d461f047a5ae10cbdc350f592c9ee5414ae3ea88b296d7a331637a9406b09ff1e6e6307fd2581238d0e3ad90611286e6cb309b6118c652a5bfb723bc71834e62eeae88948dba3f56e6837c4a41d56edd6c1fa9562ce0328d72422a9fcfdf7461524763061628fa9e7390e5f73d5c0f8db40d7ee86d58f9d2ff7129ae70399475982d5a452a48d6881ea88517b22adb801986968868b51b0ecde09b78f106410846ecc8e2387e55ac2e16d42c4ea6754d33178ac69d6918a9540cea8fc0d9eca1e4f2596daf5dea6348785dc571734f5d674cc6137a09652b2842a1436e3909cad8da66381d5c1755f4497c43b8f5dc394c72c30f9d0a931cc14e5a3467882afbb90189e1f0ed6eeca816da5783c29e5949361c1b64e124f6a57c7fe33b6bc2acfbf42eebd8a653afda4cd251704e2845e4134bb760219d314b598cd058485367284eefc6230b680801780ec1fd1cec77b376ac741d406e652961fb7c4c927fb2a46e27016e811e9dc404ea3988a37d772dfce8c20ac20afad622565796fe8a0826ee7f1e19abd9d9889fef28a1763dbcba027b31a72b057ac81727f2c5d114eff62c527cc2e03c33c595a80fe609bfc0fe13ce3380efe05d85cceace37be92c2b8b44bbde8d2b83501728f6fb4c2662c50cd6c5816852e2b7590194a8b1ba638d512c55209d7d065d2d31fb8ac54e347588bd00fd68f416d3e1d2e082e7ca1aad1d449c98474074eb023d38b2b3599ba7bdb93db4f72bc8b45d0a387a05637a145555395074bef580fe14557bfc90bee4139224affb4120e033714396f3cbab496327d3500a3dafa6897df9ed893bc6b3f20f5cf55d7c47e1cdcfaae0994ad4d4ad82139ef306cde40b41cc1142a2da9dc2fa8e8e0625653f91ec1460e02a1d3e9d2ea144156175c2ec2878ee0f0c2329eb196183dd83a180e9902a1daeb1af0e99f2244a5a95d0c994faa28cd9c3c8dfd5357edbc9e0242e3c82941fed29b2cc0b9845b6a8ec05806c7ff4f4860df247e8158c9eb48216d0f18bf96e83d84d015ae6ab92e9ac3c70da7f162d0033c9ea8d8334d485b29eef727302135a07a934eea5fee6041e9f1f47c1b03f2d7c744f2a451e8624b8e4122602561558fdeeed2f9ce8b8e18a53171c0e6933f7321cfe2924f1bc78dc11c175ff9e7c670443b485950f12683883e0bf2ee910459be880f0e8567c6b664d85c73481506e62d01258561bfb816f55009ae9d9defe01015ce959f4d0e49dbfe48467a89a5460be8e10a9b57c1479f1011307e1a60caa8e1a7a3e74bfcccb90681461ba62034635b11554859b099c806b944fa86f56dfb8430d617d510936e799e0ea60ae625c5c01cf1f326248212ac4848ad741c4e7a75e0988b88f8426edfe4eca428859e95c08a7d465d9b95016964b8015243e0c82f3d67ccc8025e5ca1fc7c807f7d0375d4e0339c50745706d6851f90b21ac94728adc05622dd5baa584b4ad5704af8c865a4c18fbf4d2cb56c3fdbd613ff6c89eac82ea229c7aeca6b67b41dcb5de31ffb4eb37aea849a7fa2eb993be8705f02fe032f5b3d7fdc4f73c864c3b14466ef1e4465e872c934d8131ed45caffbf544caf54ecbee6478abd9e3b961f29cd8a8472c7572d8796051254ff992eb10d3b1ea04e98eacf3f86236504e62efb5ccfdfe7d5e94ac13c16d520585892a5d8efcc3b89c1e09cccff4e1848061092dc832bcbd7db83e36ccaf31c604a9de206b67f086d2f4855d83f693f6ebc6ef633ef8fa437f682f30e6794d17f36f87080d95f9063a9c9004a8c9a62e0d1f0304b5b34fc5c02effc0936dfc51ee54b572f9f935ad1f90ba70a2f090a050d3d460a0f415aaec77103477ffd82a3203d9ffa5244ee20e5b751ff70e0be4537fe435a52df47950cb112af8a169078ad7651c83899d5b9367507139644070819da2c226e364a799b5730299e517503549f75839bbb9602b3ecd02deb5f6cb6797a0b4aa96debc23a0a669d04d6bbaedf601112c1d1b96526c5b435b55975b72085e7b94cadb2d8b272bbf305cee9e014602f5df304c74955a7bb143d5aaa74d6a4c9599e1d2824ca383713e7618800bd48d64c787c47160a3beeb0cb899453627fb811e9e6d40c4c04e2e6f2b61f78a0bf0fc79a60c1330b2954f2a60ebabd8ebdbcc9732f3ef9fe7dc55270f636af866ee1b69fd8bd0a2018f5c21812a41b2007dd698621ef54aa4ce740a748560d36fc5401d00ec40213b0da0967bddbd3e10424da68e46e8316195099e0d505fa7a12709075275d83ab9a0aaddc36e64f995d9802619f43f00b8b094363c4cede18583e4bd64e11f5af7e8d98bfa64df510b942cabb7af701504a1928783e3621d975c51b3aa967c1e8036cb05834992f0dc1281abc9e1120afff882f676bc72b85120de6eb60e74d1ed2aedfee0951645a1d54dbae3319b4ee525f3f77720865e4d61f962f9c190218935b0ccb4cfdfbbd74cef3d7609825d6eaa542f27c8135bd6a02114f858648a0ed7c1f3526265eff6e9c4c804e15da2f70621f1eb0bb04da75be419242b5887c8818ff75bf53f4e8b4c8cdf025183dc18b9ebe44373d3b01a05c0c42fc2e28750d3796d33e0c253fee5a5d710c29b553e46207ab388f40fb93e35ca5da7a925324e1cb96cbd959cec458e6492bd1aaaf22b5e29ddc3a7d90f55b180505202cde741f86089043f85bdccc4fc1ab97849beea037604bc558876fcd28a8a4a860dea6f8af6fb2d16aafe1bd8021b404ace0f02aee3dacb83baaa84074d7e09b951a61752f145c0c1892793460b16d9f8846cf5bef7c279c8dbf49bce3d9e180325b4e9dec3fb47a68cb4c38d9b9fff08194343b2265e6f8b68ff9495ff8cedfa1691578cf38e2a5c32403d1d280927f0094c6d36f400e541ee261f0d07acf41490c5d0ec0460f1592634607344f4cd56b0c2e2abf54ca382d8028b81ca80e2c920cce68a8b263503b51bce3e56e58792bc51348f8ea402d4b30f7aa2ccab02be430118d6dc505e028b60e6cce25dcf3a9871e36044a98bae0bb76cce828e0c3a741ce85f9c41e4dbf5ae4abd7bc01cc4c19f7fbc9bcfb6854ea4c283809c47e4308ac5932fad51d6a04e4a6e97aee8b7b45459f318891be0f8322c605b784e3214a541002ae53da907eb967eaa8ccb8a0d1b02b23f58144794e9fac3578497aa7d26eb25027bf0b988e09f6c48ec2db2286e2a6864cf482fa156ce4b2953bcc3e67a14803ae4239ecfd7d595d74f97d692c801844d61101fb9e3076625681604ed095d8058b04ebf392bc9a9fa29825dd8b358a44d80148e2b294682f0244be40d6f36d3d062ca915176fc1705fc85ce66aa6026e9debdf191940c400e3ab6f7a41630c9367e3fcba523dd4baf5b1a9ec937e8baa6cf84f069bdb92bc3fdffa66d98cbfeff5506a4a0dcfdd64aa7a9457cc632ae08c4f1f13000dd84d5f07e76b65178d39f99c7d2d0ecce356c74ca58fdefee9f8461ad7a70f80a09a8b4cbff0afab7f59bbeebdcc1eddef78934e65fc91f6cfdae27e002991d9f18b0ad6095f7df19b38836fb18d04aa08b258a95b06acf3e46fa8a521034fc3d40826cc4d1f9891ebbc9946e1d98ada36ec5c841016f99f319ddfb7c29c0ee44ff925561498c83277ce449dd5197615810ee9080a923e9fbd4dd1db6b5c99e46d46509ee432d47c4557ce9916b39105f200455cd3e4449e9168c43aa5abb76c33d8efc948558619603d7d642b11a35090aab8aaf372d342b3d401fcf7f12f24ab954a02c569a4aecd6a9a269c99749e64f48c17f0a6b3332d7bd048ea96cab3dc66a86fe5d6f7e695c46c06f2b5cb9874c707cd54e7ab1a07437846050250c2ce3353382f044766c1353d2db4cc71e5ca0973f4a69c849f47164320d09e89f88ae591862b5c5cd959a453c36a452f2e6ea416b36f2f0669f7db77fbd3d03cfe1762ab816244fde563f8f8ef9c8acb1b667e39333607f9211e7a5d029701337b7d94e9505b25f432e91b71d9d3020d53bc81239c838c256ec5da3d5aa39a3418c562921c9e680769f2f409aa9615bf7f78941e15df2652f9f3e55f2e7f01087df6b3f00cb473ff32876b078a6e2ba746a09e70c6d03d476ab0820aa4b4a077511871494924b0a334af68b2a0e2ac8f513e8962d8e039cd68049988e4c9de483c3483e6fa7685bd1872d354157a003d48593c3c739782ac9bf8131f17462245e850d10f48335c1385d8943310be9079d1fa9f46be7c80acac93d61865b4d634fa77430b5be29c6f24ea9497ba37c20d97289ac8e2179c9443decbbbf59961de1daec1245a0bad979dafb9ca3b6cffbf40eb150907f03c2e07dfda4ff0802b0bf7ff33a06d37f753972fec13bae5b059754bf8525390ca40a1a0ec1e7dee9c82307181c8beece26dbb7316b95f2b3ba1dd512bebf17eac93b829e76ec56d1c0d710c93e472b5d6abb0821d0554c50a602104961c07424ceff580b588f084137262d9513cb4173bd71e65eb3fbe3b835de86d222dbe65101c00af3cb425bce97aaadfa417aa9c79b7af2266afc8161062db92b5653d6e62e180be66398c9b06edf12772bf7ccbf81409c3789c97dd1835a27d380dade5a9071eb319614eabd293e1b7a57a532c20b5d44f08505618039fe436946d35524c5781983f729374b6342099239157485a64b9cffd112b50386849c3afcdfe3eb5965174bfb5827d189756d5d64cafa60ce75f4a41283e0b21587b2e73752f314b8f38508172444e61852c71a4f284cfa00770c8bbddb8d425371f7fc7acf1b17609dc336df1006ffac6497777cdfd497c8c91525377c130accce0bc92bc6c489ecbe5256b79df69492257ee3623439e0a3e6ceef14080a91ee063efbeebc77d2b9efc2f635309c2b861fbdfc93d7d55b0e5a9a77d7e1ec6e43b531f32822bd8854ac9573dc8a505ae4adf511763d4f7d848f082df7ac30f64a55655d6c8bfe21597f3a7e11edcb793a6ab4c0adc700be930e789007c950d07e614989207ac22414d2327379dd562ce3d07d989f278194b6539c3c6cbbf4735c537f04e851921723300de288fb98dc9d799fe7deb14aa65af8c381ab16746570c6465f28c2f65111233d49a3aafc1eb3c0cc5cc106e45a1d689f1e574b690d38145006662157884b2631176e8e0859c3306365fa9ab7266a1d7f50d5dd3af13ed82c8924ff4e235db399ea5df736144862f581efef6b91dd91e4c7cb4e62b7d17c3c65f9df4298a555c820e6791dd4bfb3133f15675a32c4608ff18c1198a7bc9af00b3923cd7ede776c598ca62821a5bb1cfc1fb50b7fcb03b15cbcb925674c9ee807878f573c55b2c702d4e0dd7176d5a357433b07df5df5f967b1c7916d0e0294e949546867a772889b43dbb65abfbd16cf447bd7e7f9b1d8b12faf753f6d60870f13258977404121b14dd93b23ecbc17c277f9e4103ab1dfb77ae3494507332f07596532e1ac9912b3777be4839a7d06ef7227c4fe7d806ee92805761457f50d50a0b5ed4d6904ec3045263af0255a6494b7a7e2e95ea806c4bb788423dc1092897d7a10f0f1ff1ea63b8ab6d039dec150acdcd6873a9357e8a9df1c0a00206f00343456a2e3f21a93cefbe0ca3494ada1e649085ebdcca2b3778b762d70aee353897726a99b886077740c314491f67a16e87f00b644dea7c3a9105b148a16a001d1b4f99b952c90cfdf3e20b5fe9ec71e27d158446c23b777b3001345c8f22589a17057ef6d592c0b450457b4c6d805362902677f8046526e39dd3737b9bbd4597d2bba1b908882c859f11eb7874cc4ed6064b6de4db1191581fa4f60e8fe4cffc959a8b68b45457582771e44bc5786a2628aeed710ee7bfc3ff9c467b313effb1a8cac36da19e4916318bed2d2a2baf3b3e747f07678eb80d86e2ea2c4a74dc9f5372d12e970d0ba505878e86698d26fb90c8ab0eacaf841cf99f6a87a12d6eacdebb3e155e49a4efeb8e4fbe4b47d64f65d0faeea6f12cdaa3fa4ff60012bec190cc9188bdfb1cdb2bc8b93d9801c81f07b4f3101dfdb72ecb1c1fe02dcad3c7b2ce52f17ecb7c500c5c536b18620254bc9d1fdad97a2dffb82c65adf1feb6a48ce80ab76760cb38d772a5b192138ed4cdb304b5a1119637b353a6c414566d42664340424163117ad5343875d0bc7489821d2c0a3e6afbbd04b96c8f5e79028788067cfad37b56fe4bc893209804ba5a22041f3f792c6379f3853e7597107c5d395a4647e751a3ac84563f1bb3936a2ef78f63be18ffd753c8e0a5de86c2e4abc3672791438cff6cc707c2cde9128bef47e782ede38d5e33caf12832f43841596c54a640b0d573265b02a69d012926845b330436a47b000142e14fdaa91a9b4e7d4a4cbcf6d406c2897072f5c57f42d57b9c6f002174c5a578d7a23c6d0ffb743d709f6ddd30c0289979af3cfbbde7caee4a4db2231eb607b4fcaac108bf68b2f6ef29bc2d92a940d344e4d96c8a1d4bfe6425b67221da103e77eed141d3eaf0eeee720fada1caf37efa9936e08fed40f1128073d6263aa65d71f6d5e1f389166f9600cf26062a27e4c257ba1f745e91107ee55117d5dcb25b124b33b1c64e0dbf0e5d656168d1c54bc5a4cdf0e07926a3cddcb8fcd5ca1d7e81745576f540bb267f11372370c8b6fc2b0bd71c7b45e7f22aed104fcf0ccd0fe7f9a1fb276709ee11a2af37c616e03f1b11406ceecabd44bba1c1d66aa8ac556b63810705ccdf5deb9a346411c32d5cbd4071a5e1108ee3a87f335a4fa8a19a36395c61377626bd36812d71f9d8849a3a1fd092fb2044151a10cfa2251393246f039ad2646dc45419dd0427285ccc42ba36c6fae501c52339dafb7895f26c3d3f4aa22234baa36bbd38204e4357ef9c640ebca447bbfb552c6720a2474c132bce94de195164a9494a19e9aef5d2d4f0612e1859c757ccf21c3fa7e9e2297036436cb57e6073c038e709c70ee3d36386d91e43e110dc224430e8f6150f926ba8c7578f1b0cf0cf7ebc8f2237b86584a5f367a604c852e49191ec77ee758decc781dfd4b6fae2be64f23362f21a8d1f97d790a88a98c1fa2266d3913bbd25dbdd9a8bed18d5517532b17def05b2551ca2ae21b03a27324b3fd823abc68e5f203039e340094346db3020f6323827c4630fa0a328dd1eacc12f0f662f559145a30887703651ecc7daa66825915521e2dd26d49d773b2438433c322384b16dde4dafacb938b77adf59dbb09275224ab8702e7397051ce2ddbaac69e312a2cb32046ccf47ac049293411821c64769474d0571a4193a48ffa30cc8de2d41f0534ab18618a0fb00deed78a5e3486df0c3aa853590ac7e86249222d8b6897962ac2d3d46b04e8e7306f4e7ca1da0518064d5d6c35ed739a0f9b3e4241c7f22c17fe38ef4bfd9cc25b2b076cff85759e0d2d8e2633723d35c250d3af33698a4d573758ed86cc71cde892a0efb9bf4efdab6bb8f5c4317b48351a80d8f2c5b676631ea2339e0a2e865336995972eff7a34b884c7f8a93b44dd248d433e2751d43c604a376143f197835975f5ebdb0162b77f3d717d9217ec3147c3c6494f00511ea99eb196bc3d9100a357143fc8810e2bb4ed75342534124961527cf8cbf247d6b4ed7921730d3da4b816dcdb1d07e858fe9dbb658b1920eb1b434f92c4af1f2a283f774a91e9053641ba3306031b570506542a58eb4e7ce01d9d266161bd3fe3ae9c93583e595080e54c030aa246c3fc741aac546e5c90ef0e68e8abcba611c9ed0db595a1e687484dd3332d210f9403eff728a33ccac2e297ad7fb929f2fba38e99c547e31710572057abb8a8ff33e31ff4878b7c207c805f73d2d3a427673b3849abb72b75547507e153f3619c0664ad18af5557e725900fc2c94064cfbc5794244f2da287bb69aa7713257271764d416c8948f4a624db4ea24c4a907162c0493299f070d5aefdb024d3970303ec6882f6fdae7ce5e329c51c43375096c13e007b724abce793f7c2ed7b923ddcce7b19c0f4cd162cc9411b379650cec541986108c081ae46d32087dcf35c4783854fadd254efeb043eedf9fc2edd2f864a9813e06dde7079d740a8f8233d4a807aace732075a22f4aaf30771f1269e614404bf0b5fa92708061fcc49f37f6e5c14596feaf356e485761ceca0c87241df97a50c92802afe7cc7849cd84c69da9eba20ec02022d593d083051919b0b4087ab43a37cb6a91b5b8439bfac1442b7ced6c707801b25a8a7c9f7dd4b5337c4e2e8a62bd1eb6da630a404decd35532c74cf17676e2588fa48213939d6d63ff576b7954d9906bfc8808faea14495e462190dd8b4d30a9c76aa79bd0c3a0e6bface7ed9b1ddefe7a8d5acffaf181e3c8144f8d298b8b1aa4554374cff7fe202fc6fa63afea58e2d70b665beb151b6a5b07ef8ccb92402f98ecec5aebaae394e22e39880ddf7cbd845ac21b54ef84765174e7590bf1fe5d37aa189abe4cffd9595b1bb73f5dd8e32513e49aa2f14b8c5df3cd7e453b2427e3154ed0a25e815207c6176dbef5ebf81bcf44366fcadf10d30d086911de30143da6f579527036937007b337f7282460eae5678b15cccda853193ea5fc4bc0a6a9d7a31128f27e1214988592827520b214eed5052f7775b750b0c6b15f145453ba3fee24a085d65287e10509eb5d5f602c440341376b95c24e5c4727d4b859bfe1483d20538acdd92c7997fa9c614f0f839d78aba8197c5dbe841655d7b84f2fa188f690bc71c31a84dad5011ff15df4cd53bbb10bf1b7ee23c0dae7e284a3478d5ac0f235eb549b238d32a9d0ae2ad47bff330ddd94c6f8108b0b3a8fbe047c076612c17a5800df8b09475178f83402e208750e97632810074b0dea29b4d151a213628ad438466c1dc769a4535fe824c1f8082fb3fd69aa6aa979636b29984ceffb46baee1c93a57e403ffefa55d59e8e56530dddc3fa3bccfec422ae5cd7e2337625de126587300f1c30ddf87a8af4999bec155f475858a0e384c47deefea62f1c96710bb38f7052b3d2cdc82e56bb864149d2c2f8126588d021b55450aafd4576fef014771b0aeb9f9c5ad3e1e757d6eed2c2a376a706e74d2171cc123b7be8ede5f7d730c8442c37f3e1b645ab5e0ded4d516b1384a13ec30a863fb44e96bc19e1d4ce7105d0b735801ee9ca21329dc4e03b948f49b911da536f49b742d22163593364a85224fef0b74ee8dfd779f92e51bdca2a54d2e2eb8299548bc6b2ab52d27034474bb575f2001e2e073c98b262086456753473347f2e90faa228bccc70e437a7fe40f6bec1f0f943c0cf135c087acbd400671e892dade2a6ab17650745e4e65a0dd08d2be9105ca4ad1d7e589a3f50bd5c7b39434f871ad306e12fee3a7b08a52678dd6fcfe4d4db2c963e3a8fbcaf9cd9df58058d40862a363481d3d70d0b13b8b87bdceec4ee51bfc7e764618914dd0911ff524f70d0f6c9701f7a94218a40350dcd05de570592d730ee88b80b4d088aa1939c0e8e67d331223d250a4ef2a53bf7557d1701b739135fc7f9ebd994a9af0cb94552ffd749fdd97f75a1ebd0ad3de3a9a5216b7f9ef4a3184a857aa83b16b1e500b55b8bc58ff46aeee38eb0d2ab713e0065dacb4eebb943ed0d44d427324f8b409e1811c0780173f347bdffb0052e97318d0636c378f0cf73fbeec5188224307785bbf5d5469f1f1556e029cffb5a299aef442e972ce83f51c9cee76996de5927f4bd947e6c1be0d799abcb7cdea289bf153b2f24681e08290f7bb7a4e0ec89d473a39a2669065dbc785761612f961c108741c515baf0be4c356bb244e0cd26ff8b046367bdecea368b9967f77e837521bdfe6cc5a60eb63dc41563e426fed52b93368cbceb4e1ad84be86bba3c19198541d7a2ceb9c6a490440f48ed140008cb24d072806198640421aac92408c56d9d9b53e38b56c6fdc62dcfddea486f2660c858b16cc16a5a6ca5772cbf34f705ed22f9cba61d7e3661f9cd9f46249ad28ef635d5dc8b2262545fc3f306614c66f6814fb7896e6ac2d6209f098b491181a8270e3c5a1f5f106db927a8741e24053c2eac23cfda0b37a54a9aa9442671b84ee33861600e7ee91b3a08d992bc2c6540a3c5bcc3e0de0941c0770afb3d29ead5a35ae178c91060df6aedf2ecdba40b8658f2df000351cc5e4a8a8b0b0db89deeffcc491eefa1fc4cb45d80ecfd596c8fd6da072eb214d53d116bc60e089c45fd5122e4ccd2a22fc5bece000d818b1ccfa5d1c19a8d85c870dd81287ece4387833ff5610d22af8fecd2b5fcd908d770c84e809acdf6232a9c07614ed7bf4cb713149a2a5a50187124a8abd3da13bd1cfc194cff437c8b5011178285936c26691f97a7cd2edb7b97ffa926218b02aa75fdcecd6b95911cfd62967b894c455f221b0194b605255758f04cab7266863e202fb7587c2ed45677230cb2b67cfb5556981af77187ee2a28891ba222f6eed680147b948d99a6d651b4d2ae997fceb79b192c368bf16662ab3c8eb0cfa6dd023a4e73f82c4088fb01aa80e5aeff5fe44410bdd8520c5eaf458d2e4de500b15fa32038f9e4ce0b632b76afee63662f6a060158638023174e8bfd62dfef9f0c3d4f5c5320239cae7d239bb83f533eadc7458d844e92c020fee2ffd4fd6bdc5e29b3353af18536d2c78eac224efaf36b7a86f7ba2fe67e1c0eef26fd1cc64327b3635d58e4762728c0c10a8693c72ee8f23ee2625e07b7691d04e533b4ab5de948d437458f62d801077f494da4444b96ccf1d0357f73068897c8cd116b779723888a457948f7d40be9fdeaf006fed3f57934337bfab4e5fb0dbf313e97b78956c0fa2a8ca791a5aa06d1521622634295757a9ede5659c050fd3cd3e3cfe7af03a0a838c821ccc75bec9e31188cfe31f7503984b528be3ffad4d607d98a7472ba961902d45e05b391e9c8ea7fbd4c0c8b88056798d87ebf89332f6f683e0a6edc1fc11b39a2d8e50cacc5f0d429b94cd28b42ba01ebf7c96c768d5d1871161de8bc34e460a6b2e5fca439e68e58e26d5cd8861e88e9d5e8153d945372ca03ea70e9f8e0c1c02031124e793e36d134089b0e43f78648758623e6b9050f9f606f053761b30585ad50be2a286a36194a891d8b10c7928e734e19108fd43767b806060323bd846db6cf80c5bbed3497827944dd511126324b8a55397d3392b9776a03fb9372d6fee907ea8fa8499ae27853b183a966c9ca6ad578c005b59a1b3ae58f8f557565af90845c066201d16098a2d40c6e2ae5bd5da9e452bddcc5f35f22f91cce27b8f669df65b89da880c86fe12cd633f01281909238500a0b9ed8708cd142822c6979b1739824af9021506a894c8f8f38d8cda008e5467ee49d40fb8db88f05d5df9023eb53c91c7b2bbf15159386d47790e808886ba480da39b37cc01f60cdc683d01d91391468ac185afc10925aa83ee377369b3c08b46f1ca660ae66563e710ec02b2fa89528b57fba8c04d9796ef138d1b6bbe6d18e158ea033c33dddfc57c8d6c8f132d9b129aa64416cd971bd3119ae1564fcad726028278288f6767c0d6a8a73906840a67b50dec8a302c20760fe62bf10dddb05d171a2c97a309e41e43c51b787a9687d1ceb906e61e5f8e2136f76205a1b08ccdbe3a875017cd3c28ed6d3013186cfb990e30fcf041374b1cae57ef5ab24b51bf206bf11d92bb5826fc274ed4870d4c089cfc34713ebc40af9e8e38b8e9b4e97b6534d2c4bcda2060987cdd816f816464a1a41830c0f655222e22a7e7eef53a49b41e920e3e327c1de7f345e37ad129f544b10ef76dee73bc889da3ae68162e7135b099c3c0cb55a71414eec24e048505aeaa808cedab80c6d18793d7001dac3a127250abe9ae9144456740e693225fda0617d5b8e93565883466e1285d149bee70ec1d8d62e21a3da375a416f2349ebd7581754309950b4ad7c4f46a2802e5d37aa76933d26fd6da55c5801c12412cf6236fc8f5f4d25954e228346408f07131552a9d63e25eaf6283df3dbe9d51f0cd3769369653f436ed7e1b09e0a6e527522cfd1fe63ab68c1f574c44c5386dd28ad9f727edcd048c5fd324dba4a9e9ef7d25a95984817f5457f793fcf88d9bba7433a203c30b0842f008cb127aba04b1f968b5b10460c1f1538b3ccc2144e590d46af132e0b40b40e945981628813f550f1ea991307e854a5b3cd01e0605533cf2a96d1c0c71126e92b4145076a5a1c3076f0e60ce84d247b631d6597177eca716169c290fea27b4327ac6262ecf33e429826a86a719b1d0ae94d6e42842b8b788d908c2b0c651fa12c2360116a6fc9ebc80486b83e629cd898a5829f30fbf558f1b394db8ae99287bb2ed4af8d304da0a902d772a924226903de58f9c860a6a7504b634f0490526b37272679afd538159dba31263c604c40bd5047ee94ea0dc80bb07dd1d40a0dc022b4dc2c4cdf279f28931a4f72a788d42793e5ea4108995f969b4b20a3a6f32b20507c140eae8ac1dc16095af65a56a7c521a989373ce7b283545197ee07c110a2727ced5fe3d0022abb64d51209443038820927f2076785448437c40dace5f51ba35504aaef95f4870bd34a5024b011d42d8b52fbe8973c6c9364219cf6d06d0e5baaf68a425b0d838fdb275b4d48a13a8cb696df61053c7e1a4d3d16762eccfd13d52f788c9db1a2afd3087dd37c82de48017ff7011029db81797304bb4fb95a546a3bf01ebc7566f4514a4267aa2b21b7f25aed39767907516f6fe236b196c8a5d0987b8955ed42e5dc89437a7ffec7851fd42c7a76aea412a58029690309aa80bec1955ce87db90ceb21fb7c5c921207d0583f64bf3f143d925054d29276826d7b43b7f9f2ab5bd1e3c0d4fdde79a3e8ba739058aeaefa4aec5cff041e61e2d4acab6de0e30a8dcd8cd25a6f6419ff8044a2b9f6d372a8b2ea02826dd5504e4ea94511b267ffd1681cc306518bf77766f55226afac3eb21e31ed897075c6274427bd6deec00fc92a3a3f7334b496ce15432e60e3b74798d54a8a6ecc6e37f04d7e80bce6a9bec79c5b93fb998c7c4613b483f3438331ef809a45bcd23d2a4bd3341ba94a73917f27076d39e0621c81dadfff584f8e9208a8b7cbfe1241119c7ddefa9d8abc0c3262b427a8b9e3fc03e31bfcfa5837cc86a61969ad1d48826495d5ba1417f1a393c7e85fb286709f4eb50f09640e1d65ec1135cb4443820136b3cec69772a2dc15df1a71f1c6968ab4d91fa12fc1bdd2ab62a34d5e35abf27570109cb23b4e3a2b10d10ae10ac422f8c7c460b82377b73722d88c456414eab32341c8ded2622265f592970ab3981c6cf993a49794097831da4bf4a44f5b6e7275d8c787c87d493905e582c96170bb93e713f938a3b18a0de17412f567fdd235b05c15479dfe0326ba206ac784eca50038bbeb35d32e813dd0f763b33e6ada7f9b323e98b362e4b19af9cb6fae7a4d2436f1d6f992cee244314c63583320dba27f01afe5b95a626c10d8013c4e9838929a6c690e632121a38ac99e7f06be4a60d430e5d9003300a8c421c8b7d5c4ebbdab71fdeee4b3c3fe3615717209a1cb1d53467ccd389b441a2d8d7e5cd48edb1812a9220567f54d96dba688ebbc79c24a44b8d14cc2e1a112a5718eb5eb647b344888520c9d64231fd3f34146af84c47a511e8fd22fa4ac34c454963d5ad46084b5862a4ed59ee8fbc792471d5371461fd0de04e7ef52c9e322cd116dd36d1fabf2290756a0f413ad2ef9e6ca38bdcbcd7c8ded18728a9ec019318cc1c58d0cfc86f775be901217c66290bce7cfd8c9e59c8484ce69aa7f3e403864c3a1b2cd08dc57f1d1235779ba0b0d45f0a930c50ab97888842530ffd01038360e087cb4537af10858cb52ce0a90b5fe7f257441af6bd044d445cca50801b77ceb6a59676edb2925900892693a9c2162edf511d4362c0266294bcbf348ad3ca5f637c75aad8586d6215b74ffcc75e60fb77887d15162a5591d97bd5f347b4e4db9014512b2028096874498e632c66a41862044ed63b82f8a0bba2f6d4de452d0ae476103fecaacf33c446ca0f00624c4b49cd76cff8517958e438091e770e0eb408a99c2f6467258aaeb7ed496adbbf5dd4ecdf48761e3f81f945f51a3c98eda0a3b5db43b2e67436daa3de5992586516aa686f88dc71b2e3a5d2a410536a33975ea3b7c2fbaf2500ef128587a161a63d744910d953d23a458ee5fd47e40d4961e17a17f66a4b9ead960dca1bbf7eea9cd997a98103ca3f715c89e809180795c6d342e22524414908769a955c133899f9825b21c913e0292db8c34d9c16e2818edc04029854198dd838c4ce93c6161b1d169d62f9ac9d60424a9d144907257480a5c75e97205cd1e483905d08ffa1d8d03e635359f5884c78b91e26581359d665d693de69b0917ff500082a03e75f39d9a2b7dc3117295696ad4e691161050e0517706a582d40fed356331ecca6daa402e9a0e5c83908e466d036c6bc1ab186280e67eaaabff2b6462e191faa639a8211bc27566784ae60aec7dd25a065e6a596667f46a88d2d0f1630c316e747253ccfc252175620a230373d4c6f066b2ad316c5c1669ac07c710a0338ecc979053804a42b11dd346cbec9d8898a3654087872d43333c87f6444ec5080879921c2e07809ba2a44e895702c409e60784705fc703adf9379f36ff082bea4d19e69e29bf29a064bd265a4b0271e92d8146cabc8d99fcd6ff74424dd95f6abb12277efd03cff175dd0d321e5831a6ed951ec814274ad04b088990b73ec9f9d0e6b7371e91cdff546865a947608db394d79ef0fd30b0a8c3c751aad1b516283d2c286ee4d5be2a9f03c2086cd7e0afb1bd29cdee3645e6dfd06f1913b8ae764e46fd8f064c1b13a413a507f51ad4ebd2ba51c75db4952afda8243403d60d5482cba90fe9615f4b023c710056a5d50866539975c21808d5bba333b40879bd53792ebd6a14b2152137d2d88a28055b85eb1d8341c1fd1b879875ffe1b83038e3afe49d45febab746c36b2e2ddfb5e2d4df7c81b3c3c067b0f284fb758975fa958581dafc3de7c02c2389f433e4440575c1f527544dfe57d27854b8c802d79cd9a88af92528c5ca31e6a3cd54ec1c3df9211be6abd723867c8869aa51aac17a3067647a3965e12ff87b4d0c094dbae6df8b554212e5cc5e0fb13862bae7c02d2a70b2d0a16ba68bf05fea52c99facba894f35cc31f055591c7145546c5050203822da8f05a09248ba0300140e387e03970b41d7718d5af223471501de6aedfdea1c5027debb40f0a61332d24fce8b6c794dee066a2349d3a4a12bfd999e1600a0bbc81d85021f1e54fed71016c8715fb065bedb7448ae58112dfeaa166064e30c8f86e2a11ba92c4734714ffb9cbc57dd0118c93873f50a193c1189ed68371f7e163119ab7e6b94dd32960456d1b8df4faea0522f2bba63fd59e93f870c191085de4b151c90c302b797c9bfc0fe136098acd9f8b0d66af06e160a1d6bc28760a44629776cf96bd046d260e4b288489638aa1a3f760a9329bbeed8b604321e7a69ec70c3251eb2981b511015b3f6c4bab0150598d74eaf9a9742f99c08c12ae8474fa56add8733b495b23bb53dc014788f8c10976d092cad60c0c121b2064914bcde3bd0eeb96bd056746865c88aa44a376dcfbd9fc0a6eca8d6e409c858059a4b26a8b7e13bc755cdf61a89ec9d209a3838977df81b9ad2eff3c696845ccce362a770624d74d2df7cd5c6a402ade5f3127b0c4b0e6064eaa6b5ed6aae8b2b7aa3df27829bfb1ab7d381f146b30370ef56b392b73b35b1be5d8bbcf88f499dda7f3c327b45350b8972991ee466545de96560cf451711fda884e3d9b2af3e909d655d25cee1c931beda79c40fa507097bdf1126771a7b9543ad5cb84b96c0901de6a075efea1e09e26ba2751ae792100114331cbfcdd9351a4764dd05de8638d693b4b770d6aa007ea6a1b6a8b69bee23b54526a199b14996e38acc83dee5e771cce84ed43003c1fe3c05ed3b9a7b105e22c5e8af16aa4f33f24ceb482066286a12d9c09c7ea1aaeb7c3d9d45fbb6031afd43b74abd1ab28bf409cdc53b8d781a0607913c2b0a47c0e7c74b5a52e352e4953d370705991019796fe87d98d2631c06d05535bdb415091f118bdb48796c35ab10cc56888bf436f2eddff3c0cb55eaa5e2610 +MD = dbe971878f486cd2f6893b1660eea0f473965e54311149bccf2bf107 + +Len = 96064 +Msg = 023c7a7030f9afcd60d32a820f9e7dab7602c3c0bcda7b1a6bdb96b32176ce2e88ff3a17870e1f6bba260a5b20941b4d149aa4247fcdf3c14bbc6bc91bd2daa9397e06d8cf90895c5be7df905d49be245292a565e611b8bf662fcb807451bddefe00073c714894a9295dd4aa2d850c391931f00d5b6d731ca27bde5f94bb1fd5c0cf64cad3fbe9590ed20e30f70fad934fc1aaa445abcce1e9eacbeee3d8aa956531460b5e743074f18cb8aa25b04a3ade88feb00c916a1522c2bbb5ca700426d66fd5857a7a1003b9d4f8a01e308b37accf12bb17e8f6c0354cd53daf4ad590fcd038c290d4310d50f2f69b4a571791a3dd0e4cd07717ea09d0420dfb2fc6dbbe9e984a064b3c9a9d2edc2311ec9750aafc1bec9e08769c889629ad17e77e10031f1ca346a7d9b388d0cfbedbb9b27da8726121e961bade99e5b3a6693aa637b59ded57b6b0af5ef91ff9f61084111f878807761a4b8cb62407077f5bf0e656bb5e32eec02d67a5d864825218165b3e2e863570978e942e12424fc054d0e577fdab14eecbe8a8900de8925a5b3739e285b41599c9f2794d49dfb0f2bca34ca163cbbbe13ea71b2681f04f9742ae53147459cc78183fe41bb225549cfa31c2ddd5084e4e8333686f1ac7e490334550dbe3bf8595ed3c7ca1355e63467842f0323ba8f6be01543673c1b477cd97c2d940ba2c6679aeb2eae6bbd004789d9e7ea87df4dab820d12d3b5ffe31d7d7ee954ae1e997abc56ad5f22ac560bbd10c1347833423c44874f6cedaee393559912d01403e41b39829e6ce6c839f967c56571835b0f86ae10339341cccb86f8773486dc0728c1a91bac5816752e8920642f4227caf823353479d760be0d50ec85b8f9747cf9f6716e41913057c6335d8998f6d3e7be8a60708cb9b9171b9998313a986be9ba322916e8a8d2c483a0a5822d302655a534c630e6bab95c88b98226140420e1fbfd46921c2f6c6fd9296efa765e8d795ebabd02024affe2e74940c0ef9d41da31c0406c56656bae4966305eef0277e73d74db7089eadb6e99c14a9e27e43d56fe13ad02221b6f0456bf803c11ac8403e40ba7e8c82b0a4412aa061a477971dca37fe2fff981d50683cdd4fe68bd2073c4d788f7578bdb08046c09c1e8bd9dcfe46d98b257693c2942f9b5325ec4dbab72711508a27dec2ec1afdc2166310fc5135524c5d61202e126cb97648e54241f5f50d2b95381ac2cfcbde3b55a744640c2df2da6d01cd7c2b1cbf1f151db8843fe0f2875c527a986f84ec6fa3fe7dfc76553f9d1d00a194246735b8563db76adc104acba91e042d156badc7c710c4acd9d6c3fe3703a55e4874a4a8d1ec47dd16ac9c614244c26708a8aba98b86205c7bd7066381b5dfc3de6c94574fd371c533dd71b0ef6bbc2f92646e7eb5089af4a6818f35c5bb59a92d768b2d979a3c087cca50207a3bf96ef9c77caf0e3d395ca0fce6ddc9c01bfa7ebb139273e8b18f399cc119a95e810a86f85fa25ece057db16f93c1566a2b9c1963b3eea965d642b27a4c0346795ced81209fc16d62063d23021e4b336193794695f4a902bab5092e8d7a46173793fd3266c27302a245853cdf10e22a4e5b774d795c2b468f56cdf7fcd24ae53d2c24e0f3521fe736c93e462bf1ed01d98980753875dc3d8bbf7453f0dd7877363248d5eed72fe2c59a4e871147d681a9277b08fac725ae57fae88b91213697c8aa535780d70abcf7c19f48b79c0472673c4f4ce6d86c639b0f0fe60628ed0b9b9e2cafd1dc183d764517d04577df9cbad1e68a25331a22fe04d3ae787a069c5815bb25086dc12ce72ea069e461cfc64bed2709de5d98b428e31b290e9de712a718e8004e136d52f5852159bce13cbac298fa133adf4de1c2b4cea1f11bfa352fae9b8aca548478465181e9f47f8e3ec6da47ee6142a070747dd65c487ca6cd99dfbc09a5bb6e64829aaa61b4c32d1bffbcf6e37a0efb2be5481aa33c4652a18cb333c606cd93df52688309263682191645f03aaec9c5d8be1c82bdf503687ab133e80916145cb05ec4f4286f5ff3ffb37e1b3b24fd6540a602f6f49a3a4f20b066c41afc172fa14db5e508bac6e9977d6d602e0531452b46005e8e54746f5b3055ad40e15e7578c7443eef2df4cda71d1ca85a78eecc614621a2d44a3830f3d9068cc4ed7297fe7678e726f07005f83a93d908a6bb62a94d6aab0ea50efaaf55834aee47dafbfbff59c9f52cc2fb527dd9dc80b6206fcc03e55f848c7e355849d4cd06181e0b370defcaa30973157c8ef59a0ad1a55b931199a77d281149b660ffff5487c72e794643d37aae0abd4014f2faee1fd38fc31f8e6c43a04e9e91400ec720bd5ccb8a525ccdc0440f5a64b8d5e373c7317127d4cd941c1dbe9cb191080cb1e2654c33da429ebef20b53b121a83fe2f2486a86d95d0851c7e7acdefcf6b8501d6a183a86fe30bce18512eff773f583c79ee3a7d546b129c55334df28dfb24596f49767fd9769023805fee6e43ced9e6fbd4253719176ee408a9e7dbfcbe2d8768a3184e81533d720137f5d8e0d0f7b112df05255453ee65f12508066c33051e5b54e57ee817585c138fd1e9ded4362d674566c286af35b4b75b4b0c7cd84f70afc56aab8e2175242fbe0efbae5719ae61cdb6993097c932b3b30d48af4c6130ee7b143ed400087cce591998dfb816c68ade6103d28c1d728ea2eb6573ddeed18fec7ea36a31a6b867d76e4bd395b2084ade12acfd2aa6e6a0c151cd4b2b4cd51ca01693b144c48994bf897f3a7e7fe64a6337ff00c1fa218284dcfac5a31fbe1d2c587a39a7e642cd77f7cd64c0e4d2d1f44d749e008b95bc73e97853d3bbeef9e7c0b173e980968aa74590f30b6570aa17cfa81554dfc5a70503b0864bb60a3b78fbe3e07837d754b3df7455bc86221b343b04173d6b33eabeb85dcd69a2726a46468c1fd25087a42441e21d62db79add01c031438b262e00773ba99bbe5ca0ed65d1472867f49f18f0954aa8cb9e9ea71ef3f8cc559c53f85c2619bc1146381bf9c0799131870e54a82669d98c5e559a02113f171a5fd41a020ed2407a2f17b587feff3f6c0bec7ed69726725741e63d15e2ad2ac4b5daefd1bb7c2fe05d65437954803afec6641ee1b12879138d7918c02deb0f39e78dfe32f4c0922d19494e3687a48bd1019bbd313c18f9aa8b38b469bca0ce633c14cf8b82467048abeb5d26621439cc03bce22e009df7038349987a55756d28fe98ea452eb5d1195b74f8b1ac784cd616ed1640c5607d06bdd44c59c112f6727340d8c9beb5bd88710ca73f2c77cdd98056e0cf5209929b80025970c81e7028e535207efaf03d7d34daf338abbac3bc8a21c843703f3faa16fa46253142e4329a9e4acbac0b58e0ed076304f1e936677c735604e7aa8b1bc5e59be2c6255978dba4de1a9ab11799e5ba800bc6ab2ec19e77137a7ff37ed6d6ebe10e4d70d7e1ef6f65d28d888090611cd0b6f2a8b4b43752860dffc220c491339f108fca67572026675a4d389eaeac55dd6b3c89cf28912f382631be7acb3de65d5254dc0fc2b4f26a1ca26a76d90d8c2f936ef68803f234af2bdb9093d4232ba43b634dd908f4faf87f54c612facbea4c974e96e62ea3897586c6e073c88c2bfa3386c6cd12286798eb2af379fa2f96bedda512f191ec57129dba55238dbe0eeaa283eff2c89860d3c8ee9ab3bf81b80dcf3a11b11414c60cda7f97aa0d02fbf9f0236f50128b0e2f7f6662c933097abfd4d73c2fa065fdeda4dc4f102e9f1ab1862eefefd94b9836765bf4c23d0e025e53423b721b25253c629a255edadf9499ca6c16d8031e27701694f7a6c4da7872b644b5826f9d65827e81c09bf808913925a58d127a4de364c7db147db2b3058164a553688215e6465f59c9cf7063381a00a0fba5241ff39af2f6f350eee2d115c52dbc2b3ed5cf106deae7022a38b2c3c126099aebde809afdae3b2660ae03b541a498d38924496910fcc33d0dcf27bcd2ff5ff8b6d0b1ed52cb9408f061c3ea40d191694d4c7cd7b0560487036fbe8e99f3a4c76c3faf1a5715a8fd86423b3a2a7d4df371938fe4b5c153e9f4619fc080ca800ff771a1a976541c0d0a9890306770747cdd42ab188705586ac6eef3daed4b9dd93eafb022164f9b4064aced515f72af0979a0f7fa8eeaba12625ce2654a3fa02c2940040e9ecfcb9f7cc678277b4ba6a42df79c12333822e9b0f393e8fe6e3411a06ec4f5789c54313a2d593921c20054e18dc1e8dcb637f898fd2feb71a0ff8f8b7f195d0b7edfff872bb90fbaa165227dac8f05f32da24603c0ddf60b9da9aed2bc2ad0bf3d140f4906c032afae7f14e99a2ef0de650adbd785c692342cdb765e6d20d5fca09a6b6a07952966b2f3350d9fc531072618c0fe94114654173df015da22f52a701a1bd076617c49746c8ad1057c51d43874fc5e35e79bd3247623e04a59b6b1753b25659b4bb4bfbe901d1e127cd7af62c597e1b07018191c2f18a807eca3fa77a6930fbd7c582f5607f5da10ed4bff6db39a6e4cd3458ec60fd5535704416b3e026db8261bf003057a1aef45f7362b22e80cec5339aa9becbf64ca83c91a6d91f8b9471c5104a293919543fac01e9d4609f5450bc9d0a654e6cdf6d262b5693a3081a4e8461d74c8f36dc076738ebca4c15e60bdac3e19c72d16be8ef89ac5ff51ccb7d221c2e16c49aa4d03360bf003b54e25b0097c5a0d3c4909fdb252eba904a368210b7c51463a55d1e7311fa12a90cd7c2e0913d3eeba6dc169b9644100f00d9f1f2bd22c1f6f74366b8e5137e2f8e34d7dd48aea324f8bcd18345831cbbe124412aa4cdabf8f1263d772291af3959980e6916909a0a4aa15534cb721d415ba3f43af72c3ee433440730730b32511f6fdb16939970261d2816129077be19e0e78fa63cd507433e4b58675ed68401102ac268380fc1e2e0bf98cf2d3a6bb0015d77fede4e7180629aa5ae4e9a20b40c6768d08c99fbcb15e651ad0a00a2ae4d74519763ff2a3650c07357baaca4f4349412d1f99eaa695d2ad54eaf80ff5f25da8112667d7def793b46062ba46d4c594f74ff17a44a38070b98269621de6d1aeeaaf24e3008e65c89923c2a180626cad7e3ba5f3157a1b3f71ec74679cc32ad2f13b993bd37e56b39fc5c3e5dec1e09ec039648dc6f40d47bed9348df455a4d2a7fdacf8ba75735bac908c10cab8ca6fa39156cebdd9fe908693d05f8d64e8b5f23d86a11c3a64c8a9ca46aaab11d226118aa24063f19823b3607162d0b89d83bc424ebe6096d0027fbc1839e9929fcdf16d716b200380072b893f2023186c45ec552dd8f0515f1214ae2b47ec04da6b2a82ead65dd96144d8556120ef4dfd026abe4b763333baff52e8a65b1b2e2a09a61136098039e1e3a00e00ea9d20f7c21ec5cf20910489d120b1b2fee0da38ae4c627c8cf3eca8eb6dfa43079356038df0b2e25e728b7390655377b6a2ceac6204bde5e81cba5f64266353fe3bbac86cc8ccabb93e9121450b141c0ecad32d2db66999a4656aae56b38f5757fc13ef668e5c53b85dde3bf8f93dca8bbeb163184aafbf4835c63ccafcc7789b3d281f842aaa01e4383a68af1715a8b7e730f72aa9d77f5cf394b2c7e852de5168c201cd84fedec3356d50744de6df19ad18916cb9290269099db756617ab001e4a93c4984a012dfbd3e9c4e83f696397930d8e463ec70f7dea9f47e4f85173319a5790013d7c4c03976f446a18ff6a0b141759c906af18cda80114798bc3a706f7e60fb17ed1cec0fddff628ff727d5bf130f9c26e9abb265e9b5b92567423f4efb9841792843eda93b66ac35765060096e4fea0fb2c9f0e7ad88dddece56291ee6cada22d1614b6d58d02c7c5699caf91add90310d71cec89434baab389fb547059dcff92f9d8cc5fce6e94add2b9af5de60967641ccd570665e5875ef446b3121ba27e58c203a18ee50eb89552e5867848102c498018c48ebb0c022396ed34401c8ead02e12dccdf7b53a1f04c98db6d2e7de0558387cb6ebd2f99c5f4576e96f7020a15e9afb4edfbedff63325c04a913a3220ca9b2b232d6c0bc9a8f0db86315ad24064e01e026e12e1f4296a798b882404fd364f23f87a25ff935e988a85102d0894880dcd516b5a480330bf40e1814b5e84e47fec9b9aa5dce1c7640c4cd492c887124991a3a03d1c0a8e4c9eb44257479d1b510c765595aa9a2d7de84545301c0049bbf060d36466f08c3a1a6c95f1c83025ed0def739d72a8d60aa6d62ab00be8778c74f0cd762e9f72b13d7140c1e725487c7770bb643bf20b34cf694db99d25e2e3a5bc561c7afe88d88d2b0b6eae64cd26d060f6930d601323ea6574f4dba0d2e90a2a36fe54f515d89403c0a125d5fc12a227ecd1f0da38fe7f326808cc4191c62ba334c3c36c63d9da5f250153611c69742d65c7ed48c0ee1638f19e79f166a190901913d04bb802e6a8043740ee7752cfd9291d0b92f41a38ded65ee89698a2c257ad98817a5d7b404723eaf46553f63a95ff7a53a11cab6c8ee1ef231970f34862b8f7e0e29a6d70a24ac378aff97d3dc9b186cb5b80c83bb0d8fa326336b9aa1702dbf569b600fe234369d3b2b10e60db05ea7da9679a2caa84261b5b321f71e052eac7f8fb5b7331d5860d58c2d12c34c44e71741b48c7e5ad1ce8e8ab4a242472cc5e78afa75733c7bf2f8876ef283cb659aea2e2fb94c91b84a1f4eb654b4a282ac2cf1b0b3093e2be3f2a1390dd5ba2b43c1c05db1cbf95054c6638966ebc3dacfce787b088b8ee2b4825e2dbd1fa510723cbcb0fe62de547f326db0516e179f912a63bbde60ab3ad4f632bf98e7f8cf96b967ec07a7cd1f39d1b1cdcca21a3ba0ff67e5bd3f1f8ed5ecb36129c5419321d646415611522b1532f424013e48596f8be9ab2d6d587937c454a4d81dfc05b411fc737225e9f281c49975b7892e536d7e6d5e9771e2646b2b9b0d2c78a4b1cddaeed4d45c112010051615581938c41b35578293e349eae070fb1caf5bc801cfbf91f8053a541e30730e956b650426095f5ca99b480b674832f935d94dc2904a2e8a4f8d372f6773acc7785a02fce3b84ad1562606838402e029eb22b540c7bdb63c6dc4d8ff765a00e520ac699fa7988659fabca55eab9116e1cf2428bf22aad52cb5449660c5441dec40eb0f78cc3a905b29d7bb09688335c534462e9a2b8209dfc8a505effec262513b9e7af4dc0f0769460fadf02559cb58cd111d6e6ce3c2ca1a3e9df97d656c98832f22b0519649e8d1bcf4cf7c7555f0fc0daba84140ae702ca9d519bbad9b46ba259d17c750e66e7f6835d3c866544243a42fd453191b76625f31dd43fb8cc0430a50b797df4b6e81a9d7c9b3bd44b1367d307f1ced98217dc73a90a0efafb9a055d40c6d92077daafa510da8eab5b236e14415092eb325b18a55e04cfa728774809d729309a8f03dc2481c226f15e9e788d112926cead7b0112a48c29c83be122323a6b2a68e8accaa1361bacae3bcaacc7e046318addbebe41e468c4641b21bb5fd0547094691ca1a499adc7eadaf03349176d5c28a86e78ba84614983b27f3a1801abaa26f99d88b5113f20ae2357349b1c674faff8d15606ee3f602de742c7e5353a80248275a75d069b5e01fe49d84659fcb127b43181ac88cab06ba2b48c4fd4c79898ebed2723e0872aec530c47d134f32b99c4d42034bccae244cb1baedd461b9d891c4d309008cc2c760ae9a8c41716640c10035c27f1069dc14bc05818f4fe3500fcdde92be4320ba70b2823a8692b05887f055d0c8e478ae908ebb0864437080475e57b7cdd8070873e11e20492fbb515fb244a6bfd5551c4ebe4deb19f90bf9d6eac0e0b5c80021f8bec0a60fa4e1dbc6ca64bcda5f8995adcf20b216ecf02d3d07bc861c7f86a76db00c64409ece484b8d48ab8eef80ab4c45e5f5c17bd78af819ad40587b14f9414963c39279cb376c8f62cb7401c4dd9897101ec0422ca386a51587f05735a8220f694c6bc27329884545c4f032d0ad115701a599bc6a07773e87d58a8053347e568f774305608f4d435400a9ff4e8a54ea6d1294670a07285a66a17d73181eb4d348dcaebefde92a1e3006f7d36905c1e5a4fe66cea753386d44844fcbdec773fa17d5055ba5b78d1a4c50603beaafe6cd3bb1774fac5c260ba3e677e721ef2a2f8f08ed68128b04ec1b7589a53dd941f5a3e45c8693925f9a07509c518bc6460820d0dd70aec42fe82fdecaabcd124213700f7cffe78663bce14b1397771d66084fd54be1e5034cb2ec04a9cc22fb959b228b5f1832b8d0c8b44e84256e24e8a49e7ebf585fc909c0f27fbd62d9f58af13df0896bef9a056212d35487fbad7c618f45be207975e586b5b86c2c5c80b0ba14c7626798ba900d6f620b3b89f76fc384b2bef6cc9a4e98b8373c75153d955a59889097a88aff2f3c831ebca3a3514f216e3837b3c6c36b7c84b4c9be7cb7567eac9a88a99bb14bfcaf1587d321bf68e7a0c05fd95bd27365295bb692de7542f6bbd697066d44e8425e762982f308b54a12ddfbb7fa0a45248d97b84cd37d84542edb5f696028888009c72e5db7db98bb3ce787aa01b9551d2a0f4b46ec3eaf099e1f5e2d14daa158496ee2adb09697dd7773805a039e27c1a708ec0b891737a95228ffdc1be9c71d85f4030dadd847036b1872328ff741b45d4b17255ac59296037ed0f0c5c46e4267fcebf7efff0adf803cd9be07731767e51c590ea19864622a875e05a3090b8937c029f6f79977c44f672366fa802d4eb7132e322e1e01802fe91375440633349e0439756535f244211debc7e9acf7fb4bb6033a20d51e929c0a8dda196a59f7032f870db9332ef1cdc7af5b45681bd02b7b84815a5c0ffbf76219bea3a40422ffb8bf2a543f723f7dfaca8bae3fed7fdeea0e921af14a4eba86637d7321a65afc263e55d6a9609fea3dd9f37493015cce781e06e35371dd5dfde790f881d4f180fe811aa11f6e956af76a0d491febe982ac4f3a53e10b5a6a2f12b3b44304a916b823e353f010b2a8bdd7439c24f1c8840cfeb6ed387b3867a0713026c3a9c425c9933a6fc9eb6a0c07ce30de40d75c5b00c8f70fb845e9cee88fb0d0a258e546c95b9a450b534e0d5bab4f8001f127602e1a954beef001186dca90425d868ef23de98d7442fcb1352feb1a41c6d3bc4bfb8ffc124b0df0cca6ce58dc63b723a08dc98e8dff2c461c0b2a0b643df37d76ef85b6036b043b6439e7953f436f45ea3f8807f2ae767f1a53d4ad97a5d50d6970983d9fbd5763778db2bfcb7b135837c981a432bf6fbec8c0777b3cbcfcce9c3533fd37b08bfb6f18cc53117947ecf1c262cddec08ca79fa78eeec3d1df43a783e59f7bf32655b37170d991dc7176d0a087ff475031ac179f8792dd82f10ee413297ecce39b150d1e6ccddd0324883cea8db31ccd134ec90efde1ea5ed6830a397c35ab107ebba475fc9a439be593af16c083cfb586021c8c5e666ab40432628d5a3eb6e825bc422ecce975e5191b9fabecdbc0a82e588a7e259adf30eebf8575400450f944893e9f4a15e49d439297105f35aff350d4ab7aeff9d8341a6cfb87ca1109b24fc5224df0ba0023099b1dea843bde45b1e8f8092a0dc65bfbdd3d4b650f51b19bd275c14d4058f4bf97aca11828dc0db617e89f40312a172782b3268d39b965dd43a17fdc437fa0fa1abbda77b749c9d1e405a3df1e83d401e005bfcf3ac14d789b4e001a3db4b63d86d3dd2f5187f899dfc7bd632054313f979d5d878cd9e6f23bd3c88389c882ee8e8d4fab721718725db75258e13bad24fbf2a662aa83a0dec7cb5fa4c1fbb5a174309878a387b7fff05ce94cdb7ab6569f9e10cd1e5f3992a1ad2c0a70febceaea764e13605a35974a1118ab69b1db38f508334342ccefb26bf1b4011122172f43b6e71832ff3fdcad8c36f126718a608ec97451c23d51c289119e352d0642e3328ae9d395f735349d16eaaa9c3a5251ef4a5a751750fe277bb531131f3bceab195adce1f3c2a443bb599a54355ca19179036c19bc884365d6352337820318eb8abf16dfe6f20b6e6abcdc7a8c891683cead1fdc2c53d0120b29cafed01cc028e9104e09e9f5d9294dc91789fc202fbd527fec28d13412909cfbbef593e942e7b706e91c775eac18b6f6d20f2eb24ba2a724579c55a989860e23759837f92fbc970b5e64198ce2a138de92767edff8d82f12f8832444b346d159657356bcc4fbeb86349d3b211b4765e8ef6c76d9b5d27cc43589c7761e7778e625035aa4c14a471ff214768bc49fa09e3f3d91601105f2c0951cb9be297c87522ac4ce51a30c1c212d66364d5d0e9b77187678d389073390adb8759d72ea6f35fd242c43c8d5ed423d0f04e6730898fbe1a377d48c3ab1acd5f975947935a30a02cdfeebc11c2cfba76b5cd775323ba5415138c3a934ef8db43c4423aae2c536d21eb0ca1a637da60327c8a0f20fe5fbbdec16215e7a6fabaf1d6bcb86763844e192dc5f433031d9b6b0b2d367f64a779df09a8e1a6f949f4cf9571caa649edcc7c6ec2bc9f6fc1f68a2b5df5589bba187fb506a6ba900c1147c806775324b36eb376aa01d4c3eef6f5a4c25393ecbf20258b236d0ab36c97c03926c8563d01bd240d26ccb947cb25153e0558199fde173b55a83d7ea99110a2ae77c397dcfd4038fbde243643810a52c1ce0cd0fc418728d93c1ffebca20354f0a172ff49cf7f5707791133fe372d15f4c478a14b0df754e0881a7232c7f940c74ddd74cba002eafba09b98c11617c4a090a374d36df027313436c2542a79cdfa230bdfab9852579dfacb4dd4464fc98dda9532dd87f90996e77bd76af00b6353ca042932def608b630a83b7fee5d8a834957c1b1839a62d549f297bc44376a98ebd038a59b76630de93a480a37ca714a85f00b978a5b9ab703a2eb914c864a922d78f64ff65bd26cce8a5dbc481de4a93768f7d7c4c51904bd94bb33307f6c0939034a77182bbc99869f63de4ade4d6a07c86cb8585f47841ecef0e819ab36c5b6791b642871895dba8240b8649613539c1754836eb18dfecf5a70f92f90118d4de2535f4fb2a0801239de92bfcc9e2d9f5d96813044513c784025ae99b8662aa647d9b0b5786bca35ce23b4820856bfb7a21af7c49ffc04c086f64e80ab9b6568af959f814a5103cc48f965d6d2a3d38defc830524bf71f4f36ca230bef1a043b236f74dcb1baf27eb047efe3b3ed2fc84b887303cea955ce578b73630e49cfc9aa4f76ed340e60f40df598d0329c9c11bf4207feb2796de5f22087af909290b74c1deedd5bb615d667eaa9c6d818e21052de356c7ed1313b0e71a718fb5c0db011c124d3ae18d9cbc71069ec2bc9c96c0c444575bb186779b3661ac6d90e0f5a022360f8b69d747b344e226bb51819cef55c7f40f0b5d846e9e72ae0b1125e5d262cea73faadad8fb68c1a6afe6b99dd160f2af6a5124c4bb9dc1d8e0ccfc26286c2096d02b14daf55b29b128c2b1242764390be63968b302a2d3cfa71ad031128ce070e570f1d821aa9eb8ae9c14da41de1f7c1b0a95c9c45c2cf496814e81116392a7d8031e2b10c5752fb9d930fac14d2a82717b3883711831ea6796c3b0b58e9bbe3057d67e333a51a8d2e0b230262fceb171d1cd8aa965970372d1dc2a6f4c801676f5d73c1987b89672690504d0f4908b94c4d119ddc2a0f240b8f468bf4bd46324538cdf342c2e9b20d895d3524a046362bacfeb7ece041969c2b8e615fafd06b0f763e203960809569601364a8e8eeb642a266a1cd614fb5665764d13e88e93b567e8ef0863f9739c47c3a7fa30b48601a981003879781a8f37c8e83982fd7caa0ba850d304575c6a5459a311ef09c5d3af4c58323681e98cb03d51e758ce23f7891ea1c3f5c64639523fa1f1f7f32d52a1f4dcca8be70ac7452014bde8754c3636b87c8bc6baa381b7e23f4b1a051ef738270841e80bd0d78d3dab1d908737debb022b6ae5a906ebfbede56d93b43d39c84f6548d964ee25fed27f971f7899697c984911d115e2d094bf1eea1384eaa2d8ca6e3fee76b54af07b2caab3cdc35ef1c75ff12775c9c828e2463107fbb9caf0449da785d5b8bf28b41cd91bfb4837c12bda89376d2e4b1ed415d2ef9d2d0a953a7e004df68aeafe09da92a695ba8c5142336abf5072c1ed10e86048cda6fa3e1889ea956d8e56f6e8e077e2018cb5388704e5fdd449d52a3558399211da02516b4bb6fa8f45ab99ddc8f96cd3214acd76c9ab914d15fd4c9dcfff6a1e18cb85af2e05ebe043215d54ee87959f2ac5a6adfc2c083f6992cad6ca021f26f5ae3150cb57f8050980b7eadbb2faaa0bbe5a8916e7c12fb74e3b5cc0e24fe0f332fafc8e1d9d61fb22400c1afc1aa8468d3f84a45f6aa2717804bc6f207ab083f2390ef0d74a9bba8e7c3526d363fe5dcaec4d1ef3531c3aa8bd620f4d0e3a4a5472049e059df6aa3dd30289c96530d3ffd73ef15419117578dbea3bb898d298e23c89d038f6275cb8cad0ae5eacd42b8496d6c5f23b06b440d6a17f03991e02140eeb51d1e1824477ea3c2f03995cd6f19191074e27807999344443ae9d7118725fc57d70febbe403b7b16648b93f68df5e1a2fd86cf327fa7b3f142a04604e75a584cd969c28ddd499bcfeae8af043a652ceca1189f361ed21fe8b066c8006a686c5bca3484d747326db52959d1419df263b4099fcf599d9bf0ef2b43444f38d69e4e53791be5a57e578fcae5e1f3df23ecc3dc2347e4248b8fcf5b40a337782c58ec1b3f6eff20b3c3277495c763278130e1c3adef1fdd286250e964cb0153f301fccb8e656ce05b1843d0706bd99e9397d56643af51eefdd2397db8a5f4f0b200470a6ee8760cfdbeac857eb59c6ce18a696cf06fc37f8f4854be42195a78f1bf9581e8df63cc221d2a3cc78ef6b8f36f637eb917beb9682a67550c10791238a5add703327c4a519d849d54dc2daa52af8c43a88f88c30fe13be91e709be7101a59b5c8ca09ab12a6844f2c898a6c85b3ac64c4bf69c60cd698237e23061e00865fc33d8d521aeda0f0fb577b552314e28b88158fabeae87045ab360f02e0915288a86c649ebd6bf39148de9cd6fa88a3f058a4e895562a160c284e1ed95549e49c0d5d3737bc13072fdfc8d255176760a57b78b06e335a32b343cc37d1a4b3a5639917ef63406e4492671d0719a23c80709a99d17fa8002b03a3ba4134f654fda5f5a2726b7102138189e5226bc48c6b1a5d103110dea569c4f01f264872b65529c806aa97765adac5ed290b93a4e1886b6be4ba68fdd054bed404cd56416013b8bb4b7e2e78fb02263af1aad96cc2412a6d1d52d12c0a54b8f5701ea58adaa11a767ad57a9e6ff46c1943e78441b8fd210ac4e39193dad17cfb6b017f76ad6517a09b99c1113d175f3129aade4d4a2516ebe054f15bc833d08ffe5e2a2d60c976e1b4b14cf8edd2c72baadb2db8001fd2b8798d39ac5ce27d592f1defd67b3301e3cf05637c078f6baece62baaa62541d189876b1ad1f464b0008261699860d7e4bf37d4dc514b514639e27cd4af92cbeb343f7a18798c7012d9161e79f0abeb6c4290154fa9cac8af12112aec04c107f3285f8506150ce6987d1b7aa108fae71f47879be4325db9502600ca435e366263d63610764cdc149b7d00ea6149b457783e8cdd4c939acfd3b61fbf8d147977c7be71a0eb8990a6a64965024d1b8eb8f1a81e5deb45f8689462ec9f3bbff0c4995180bad843c0f94372c636c726d0883614ca9242c20d103cbcf5cda1c932c5532fe1d2cf03c3a8ed79931c61d420419ff5002ed5802f631714a9ef81b8c5e67fba236d22623f222eee5a07afbc0471a9d95d683608f5bdbe1a97594e1710c49980b3fe84b789e1621199acf336e394de2240f2c6d4f69cbc3f4cbf595ca9dc1b04121b68ac4a8331a3b060eedd5437c77049331a7c988c8be31876460207998eb4dc284098e77418156cb80537bcb6d033d4cda358521997a6a91296af90896f3360c9af05e7308fd6fd36a8aea3be92fd8206e3f0b9a07a0a6d18cdae0b1826d04e63f68bc044f37900517bdaaf9b8a3dcf937efe45ddad8ee2fd5d85adf2504c037bd993192e0d7c049ce12416fa20651be7b6b97d0dac949934b8ef1f7485e71e95aaa448581840887d6b139036f00405783dbac5dce1cbfe537222c62b1231fe35fc37e45fbe66ea778c31a1fe63bb0ab9768ab6b8078580de1bc938829fcd20d140e663a16a6fd92fc706a2ad15ca9a4fe3a1d61b6861df39185afd17791934fc0b084cd996cba2eaadfb38cf60e332902788aa939ee157f8fa407a665896991acd460644edfaf64c9397cac1df75723e94a78aad157489a2242246db98c5dbb21a08369fba8e31da3a54ef410bf1c78fcd971cc4569bf2a94878c903c4476b5653c7442696f5e3f7e4cb0cb960f8b11834dfc775fcd81182b9ac975b656bc67c0d1bb5960db29b3a3562a99768faad6c6cea213e52b964d30a46386ef6d37ba7c87e114a8944b625aea44c779e683af0c82e908a02a07b0eacce029ae2ff094e0856ddd0843cc33eb3087bb67bc1e859f945cbf5873db28a33bcac8bd44eedf33f4e71b4990b50d9d517ade08bb813ec52a809ed5ae1a9fa118a8cae2553981befbd73533220ddab975a6982389b6c4c76ddf0ede82cdfc2e8c0397e60ada64c9c3c6958ea2dc8187c3915282cec5fded8400783d97fb2790bf6297900ad86e9b743ca222b72aea4f64c572eb33b4d37e976b42b896ac070fd84d32aafe3b897e35bfc4b70a00fd5980ca62275f8d2dc4d0a9d61827e886f5004cd0fa8d0c9cb82ed963144265a2ec3e2688fefc58f20555419a24f1b88b885ee8d94a60528e928811e7020862c152c6634e37af1b0c8a4ebbf8a69d23ff121ba8b5601e1549546befb94904fe42d141081b9c22e0629be4a05764d232c8d95e15cc04705db446fefc3fb1dd410db2d79e56f3fdaedc7f3e761e2839eccf2650b58600fe33b7b06abfe2023c330a3dafac6905e78e628086c8b7b87a59fc4018134c1b6f9e3ad9d6c10a03c8dd22b9f2babb9a8986dce4e11b89dc3c813871e0b4841c6ca7250a6b88207d2a463b70c751b47a8ba132f479f9fc5e276d69ffcd2298cc9c55608b519e8a3809763ea857f8bc6c94e44df876e97805e424783309e4eef3a8b0d4a4af8bb2fc0e7614aac9373b394c591338007465981bae4e55bc82f05937c0679dadd5fe91e14da3be469699a95d076dfb3d202be07314d1ad0d8404c5f28e02bd7506d8be2903d52bf69e3e846cf6438b587832a5955deb822573940080218e4d2ca5a74c8ea1913b00d69392242f7e2e7701e3ae2991831e2cd707d38b81f195fd3bd304ba2ebe348dc6fe9b2ab9042dc345a4c5d6b981c74936c503b8b715dd0e4fc4ab52b2465fc4f7e866299cbfd063cbdeb044dbccc6a41a365bb1cae06d8769e10c01361004cef0babcc7e1965e7f1bfa381c024e63660ac2a21ec23c8c911294ee6dc0046bd239da65ac8f702141be5e250633eee5b78fd19fa6a8108454d045183e5b0adbf95bb22981ae375fcf3b743fa9789496be30cb1bf283449bf72e5a531d0c0a9e6bdda8d0ee47d261511aa34eaed828bca47518deaa5bbf1aa2b13c67b2ddecfa4f4726219a60296ff0e45219bc5c93a090e620b075386b497fe3531ca4d59838cd2293e52e0424d0d320eb697c0abb8aab0c4b59fb232f6fb34b073a9bfcf79f0ff557e45138abce2456d50696ec89c11d6e02a0e523f3d56971c188415bef793a48dae6ac06a6af080e78b8b10ae58f0d94ab4fdb419fc4c7dee7cf3bf9690c79a483b3e775fdbca9d13c47756ab83aa307b02c84841c82f519e3d734df4ea2f28fbc12a98d983d2f26897a8c16e80b094e770089f450571caa1b68d2138481cd93edcd9a575f7ac296c71a9b165f4a64f16a929199248d641af94abd9ff5f133387caa63da3bba88a85eef4d70033fdf79efac457c806bf4f0e3449e8a873c4c05d272ac1f1247ace4b6c1472ebe329f6d70144da44d38f5b443201ddd24a93f8257ec1c2cce6754d237583458776acf5554935019713d8eef80a4e19fb37f353773e25c0b5563a9fb4a7cbaf4163095ba03f1f7e4d6c2e828029993d81c0755ad8f1a14c49183d2e655f4810c82cc1922e5f6e90c620e2ae731c6da914789c86b115eeb5d680ef71bc28932a7a5868418626ace99ff6b7db475f55fd11c4cb5f9637489e0c44e4223f70375ce66a5fe21e2145094941f091836eccaa0839a45e0eb2497548c89d9855e2af188ad73aec7cdbd15040973f59adc74c20664b99fa71338bdc2a808e4c95dc54fdd6236bd918b2dc5f146af6ac3cf55ef0ca7f2edd64276a231ff138c785e9e36d56e375307842c0963321b8f197757fab9348d54f6dfa8efa97bf1f819c87b4f79b7be96b220828963b7ff8d263d428b16f3d2fe8e54944b3303ec5234032542d02613b119c8f6ecf8bca28b7287dd4929cc09132608035fd5804abf517764b6e2a37dcac5e252da2b2a4db283bef1ddfca879ba4663bcd399d85469f98cff54b817450a3cd85cfd03e7482ae34b46ee976d6b1c77cd894e87f45278b3aac0c35968b4980810ddfa88dcdb1a1a94a4250005276140ae3078a6bc8c1408396dabcd80109db0f49c7cc2f14eaaae03d32a4156f5b02a6e7afafe1849637fa1cfb61d45a140bdea6329ba0fe80429ff9aa4624a1d31bc752f7c97f1d390a04aae8a50a1b1aab65cf8a9771cf24d13efc33c69c8e60e7e2c17a57a2d70c1f39cd2cf6e7b860223b124a50101b4b0f23d149960b79a6cf8f9f91eaeb6691f0100022e80ba69718d51afc561a77653505056644e017f76b3459f8e3b7206d151dc084e8d +MD = 71fcd2e11fd28dcccb7522431b8ad1c2915f8a2384a2dcd501651457 + +Len = 96856 +Msg = 20bddc4898218edc24e44ad5f290462480ba912701d69d200250fce64dd867da0dfd041d34fde9001adbdcbc66b35c64324be6176aea717a756d3b651897c7dd97a926431d3277ca5d29aa2f7a3989a4245cf80d05ab7b6e5b75faa4e68ec15404e9cb221b69402337f53c94f4cbd2cc9f16516f98c2c5e5fa8fc10a7e645c279de77a22f54a4df1ee671b549d1041c4e9a078a6ecd657c59ce419ffaac2a13faac8bbab757ca51ecba9ced83db1dd744a23f51bc99037f8879b89eb3050968273b7162561a8509016e0dd879c55aec40cc75135f6986f6403dd9a37d9b545d93fda14f8827557311737d1c881a5bd9d76b3135b3d9507f35ad2d2496d9ab62c58593c8ca08cc1e716d43005b64811e5cf10c3f76430058cd2a1bc8ab4a6f064045d17498394969c5adf85a501e7b2866005e97034107316b573dd627682fb678c0e2b98f236de372c8155102b2aa96671bb0e2e75dd587b496fbf3a7ad5df1f389303dfb61aa2a0d4e12aadfcb8fd6f495ab999ef41bda2d7bee9788948a4734f15248797e7eabf9a298be63b3ab6873209731969e2a973a687e3866b83534a1bbb18f95d46bc7cc57e0122b257dd9872f0c316ad6824d600f336cae82df48ee2ae669cd0de22bf9f0a13ca27b87989523831f8817c37b32b2a69aec7ee8d26ed1596d7b85823706ef54944630592421a094527aec6e8f270530498d27028fa84193014dc5bc7777b672bf92ee531ab128a880bfced417b17968ff2cf58ccf2eee2bdba059017bc0e8742514f005cac82e4810c329a4a36681c9323875182f67597c531fb9e1a276f7d15b590ff1e2db13eb9931a740a0cab0d9893c20151ee5f60cee0862fd9a1e5722c8bb78a7c16e8c1b6067a2489e3279124aa481041c2f56662316ee85a10b98e103c8d48804f6f9502cf1b51cfa525cec1d0e0275a5a7fd1088b7a73a75e34f84831dae231c08ee12554c5a4e538edeff66d54eea59e45c949567478c8719bd95cd166ff97528dcda5ff3fc4d286c71a4be96a0c29778e75abfb229ec3333958d583f848bbebb3830c37535b9e75fb7849aceb2aeecba4fdb8e04c8ea28a559e3ab15a65a4744928e163c70e52efd030771e9eeffd84cd8af86ebcf06d6036d213c252fd5ad697e7aded6487f4db8f6a5ea84d045d885244f20d396b2a9c251de91ea9b8e6f7e5e6f73cf26e8f20815084b0be1016c17b522e268aa7e3266aa7422d27404fc17b4d47b8396a28a8eb0773a0babc31158fdc341f784d9fe64d97a956933a9d1ba04525c90024c95a18bab3de09b0b56ed80c8d62cb0567c41615a304b651d9ec9ef61ad71144791e4f8fcad47393aab39c08c0554b7642a80c4bba9c592b0a1ebb87ad4a327141dcd7ae42e8c00d19cc24f85562bf49387a785f7587427038984020678a2c53277cf940a384b7c809a0b805d4f0f1255122a2795c2d3ac96b4275ebcfffc79336e7fd6d730f226982199f57c666a7b39688d2c2f8f608deac04a10d6d12cad973032b5c3cf1c79b8c1e2315b32eaa9b0e945061d04b765602c60db1c929ffcce8b9ca3685916e0430988a6721afc284c12f637f6d924ad9767002fd6cae2c159cf22422d759e14c756d1d769a51b616b83f554455354d110feac619dd071a5c97947f49b9b0e71c6486246aa57c50fafaad6cd7129a47a3d51ca12ea49e9148e28824d3b3fe471c03cbe76bcb9856d88f62f1612c2b003ad0efdd644ad9598184b75be74daccaf35c24ad9f920d915780452b09294e3f7c0949c1e2562239b085086cad10203849777ac0318544c920d43d64f8936dce11871494d150e0fa7dee629e4e83c359c85ab3664729a3c6db9334e255f1ef73a252369f58c07a648fc6af3af22ffdf4160fb9e80a08934f2fc611ef49cc3cf7d773992aa02f5a3f8f15d688c09a37d3db9e728ea1a97d2ec474bcd1fcabbc2157f1237cd125e75324e3bfd0e14ed7bcc00dc89f3494c72943a51cd09516d7bbcbd4bedf12288968f739525a7dd347786c66a265ed52db0954611b363d95f58bda2551998bc2a845af1e776dbbafedcf89b1e726f26a1f959eb1a0491bb17e5b2debc3f3657aacb3f59b1653c36c3388bcf4812b6b64fd97ca9c945358f1daf16b2efe35c8d8fe7a71b71752be91806daf3957bc81c9dcd57f2bdd9a1bde71153df6e9a7db650462ca7a62b3d4a73b440a8751205b1f2319666564678dfeab914b4c6c91c7a82733a9ecdfbe2c35ced674e757a123f13c2927521101d5dcf12c3c376f3ab32acfb4b51677baefc3a0eb965f5185fec48ecd69facdb21dfda9adb9c0daebc87165ae97ff10f144da194b18fa2715162281cfd4667ec08aeb3ddd69ee95ec2e074fe9f6af93a95401a1bda1bdc29993927df6119d0d74462d1384f5c989850c74f72d7b2fe92b46c0a00ad9b208599d9dea09c8a76316794b956a04599cfe8a3ec342ce86f8bf439f7efa6ae0e29c5ac930d1a08d66ee4acd29563fa7b79ed2ef1def96bcaaac7327a355f94f38acf5a1b71642560043e23c39114dbac3ae090e6cfd7bdae63cfddf78e33108f3cf94aae89f560a185f69202c64d89aa6765a24183527e793b50a4f636cb712f94e606e293683b2968806ff6a1485504a3eebb8895c3feb9b60c100cdb7367534718074e3a171546107e1635becfee3954ee452263d6eefe5854b791f8d543a8b7f1c447fa9c9fb632423d367b3eb5b71ed6e7b599f5af9596ccf42bfb6b968e5c25e67631633ac8326f4d8f630f3c1c565b1b98a49ab14df5c76e417fa0e072c806c64f9b05671a9577bf9702cbf1c79fcd4971f040a455f9f68e68d21fb2047026ec3a83fdb51bdfde1be3d6ff77474fbff9a81981f96c17bccd08bf227b91e908d0dd78a6955a8614dafc5c142d1a0aa5c4c18cd910eed39ca2b78363bdd9971f0c9f05aa98350cbe85570ea483ce45010344c6b08b5cc208c7ebcb5de91a0efc17f5a7743e59e82da37a7b1b2bc283646da86392e94447a3751bf37b9df1b5025b77da9de837ad04addd0e0285a54a524c72c00a8b23e8df62de88474cef2dd46fac1b82263cdfb60d0553d511d51e3d282a8882118a3a3ef98a163b6660dde4ccf8e6bb98f7d4c46979c91d60d0538799360993fcc59024a1c529e27b0549b5fbf4c8b480f740b21ba0fa35e3259ee4183befbaad84af2304161fb70b3b05ba55163e07ae998801cc2143d9295354c51d928750b435cbdc98e374339780768490d3b32f427d3f35c3615251a3d8299d21d08d10a1679aa3c8b3c3d29054308717b3c4961d10cab0c9e79249d32261eebd8c5d54e588800b2c0d8b3e9644a844624cfed67ed2bf15283a802c47d0b23c591c74a8011710852b6746b219d0624ef8f5ae5ae85170d566b0a87362517ef87d076f7474a1c0a45f4762f78b65d2f944447fadfa0ba4741e1077b9b3234cc5a1d3aa64c0a714db20248c596b939ef5fccfcf4a247fbe63b6a07a59dad490066017b1d3759581bc26950f524ad81aa76aee39b9e81c2346b9072cee29d3ed4d203a125af3fb9ba9cb0f889ca9b1da9017262b67c56f777fadab0be120afb90c7ac14865cc57c736a5fa7472f8af43429a1e30fe3ce83f810d0293dd6fc677c6c823c08e7f2898e51ffc4f9fc82f09215c2cd6c7cf24cffd3fb4513d67c6ce0ea0f8273f8cfc8537b17b965d88cf80def5d8896efc93bd46ee26d07b991f10368db4c8e3662210a102fed546caef5ebdcfa7c55e35b38be070e07e32744df2e0f6c03224ab57dfa37cfc88d60f2cd750622117001b12c06c7057d6dca9c1ca9074c10f7dbd0c26c1980b2da5b6069f3955cafb1f0d2fdf5d551356e47a191bc7703d9d592b9daa8dec9130105ffb1adb131bede58c695d15a7999ad495b26af8717c884177aabf6ad3353cb07d78dea8028a6c0e396dae27d060ff476d3c4c9611244cb111b1f9eae45da0009f0e6f42dc9cf1f3749b672677f0109761051532a7cb47429a21de70b871168b253a211de9ca1c3fce710c73f6cd6b5f21ab6950ddb824506198c1be9815ecaab07ab8abc2a8573db79cf2a2e56f6c092fadcd730b915075187568073bc2af09b14e7a7eefae1f97b06dde35cc4c9f2fdb7aa61bb9dd581b1f5625ecebfdea02b8340af9c941e1b8696213af03eb713dc59077ad7102a7dcf6a98ff2512e0a3035b9decf081a5a2a1328377124c28ead6e9dd6cac997cc152eee0aa9e3e9ac1caa4e5a41048dd5576e0ebe1ec778440946d137d61c03317e38922a661ca72c12966022024712dfeadaa41c1a34633ddbdf091f61e0db7452a44463c973ed26dc7aadba85585ff63ee986d5f62429d89fa773f1f0d097113ce2634b46823218b4d775883ca0bba4ee0b158034ff12a0cf30c053f533bc74b7838d556fbffc7e462d661fbad8bc5852bfde8f592dd432d4fb6cb9f1b2b22b3cf810f69795d2c40afcede56238d8ad07884067c548e4eb5b77e79888b62eb157c09cb3709c2b867db67b7dd569a70f96f4f9be2bd8bb56dd26af740cb67883726d8f206d4b8d3208fa9d5d86e39dfc6b7658d6df45cde1a49852d0f04c263e176f76a1f02c6e534739d1e8f92f33f01f9cec66622893387c3d4033f5efce2dd136d1dcaba75566c2e4a7b49eb4ff970dc932c156e9a1a7be9616217009c6ff2a742f14f244b8e8e69b9d450a1d573dc09bba9c10118fdbd633330de132a71e7d77ed0f569d2f562cbf012eadb0d160c274e24b3028b4316d85257ddbe2f50854d2aa105b192f3b2fdf91b60c1804acadf5584349a79544ef0c7bd5c2a327394b14e4cc72312f144a6dcd9fa7db578dcd9d6b38af16c982d54994ca27ebb44dcaaf0b883e8da55e16f9f33ff3434060bbcdc98fd2eeb777bacd0eaf9e3522a24e11acf8127728951004c10b911865e1f306c1bd77a7f59ff9f7581a781808d36fed378080963f35c00ea5a6e3932e6e0df90245efcaea682d68ef8f57fccd5d8a8249b62b633fdca1882f867d7c008166e4f9bdcdd03c6ccf926372b06bf6bd3871321d5556d0e62ef1bd2ec11b92b8888b26897440321a5af4226913ddfb5ee44abf0aa0f968ded2ebdd0440fa4b6ffd3bf74d85a381fd5a0ecad6f4db71cf387f1f1290b38e4347c70dab9fa091343f780a5e646292923752bb40c5dcc09a8f7ef0c9972da7afc823dd891fa70a91c9dfde40b315ea558d60823b196a8e2d73dac2a446b05b710e72bb2153662e0526d3d1a8d4360fd3c6a89e2a620d21046013031701f4003375443508dd76620ac0e482db5a3b69797dab9d93322d2fcbeea840b66b513c638718c9a410405d1f3292607cb7ae8dd31cd9df1a0c4310d06a0af9e6e560668dce50e7978e6c65bef65e08e17ef7f35d2ec3f10343076aae8ccb9d4cf2aa251eb59d1d37ca53127686b7cace02b020941dfa61f388b293d2a16ab93d3586eea2d74de929368ce9b26e205487056f9c0474dda07f400d22d95258cc5c009f39969df3c9c06572620f07380490d97ecc2acdfe4aeb0b4fae2f1a26451df64b7c76941f3db1d9cc01f90c6f79900166477383ccbfeb4d228c406343b1f789244ddf3430c351f5c24fecc82711f91fce947b20c97de4780e53b9b841a17d3ba2241d08d8e9456c2db276d4ff7c30771019ae4f95035b3e6b8af7a3908213705d75dc8c681df08f36c003bd7906dac9c36d894a9ffed3e2e298869fc0e25ee9bed98a296edfe7e1a5ff3fdbf4405c6a60f698bc4aced317dc02e3175330b3ea3ec5928a7dbd8005d3d667db21b739eb614b591f35d1dd4fe06099a4b7fbb70455a0a209e5257d5e48dc381561e9f7cf5ce256ede1c656ed682816b27fa1dcbabc11253265b6247d8d771d2535472a78bc41fe92cf0ad4930bdff6eb0ad1a99faa8d989e5fde19c61a4d83852c6d2699f7e0ccb85e2ddab323de9698f9f98205d98c7898340bd1da67a607afb7aa808598555dc93f8dddd048ca9256bd880aafa18441da92cdc12d0e47162f57addcde26060e4fb3c9527cf32a56aed61bb7df9b0b80bffca27c3066773b6e9ce5700629797ab68b6eed0bbb547ffbd4130e183e88b1c2c218677718dce3f7e7c00e900b361f8806dce22ef9ff6ae8280c620c0492518d939e27839ddeac55d8ebfd0e53b2595eb691f639477193de4276781d75aeec7ad1b210c85df30102d0b7bfc39b74d4852b2c7dcd1c61a758d3dfa4bf0a34ff151ce2d7c7d1c06e797fc1eb623b040da5d51b0d5cf13601e22ca66c735adae5d6c5aec104b1bd51343688f46cbad6613b34dc095b5e653004ed7953dccff74d4a7c8480f1464065dd857b6f45a3627bafdaee166acc75be2b76a6ef4dd220a1eaa1f28c30380ff8affd27b08f8d3eb99e27cfa8edc3fe08e058ed936919cd6031c6773723df62a655fdfc6c9cc0d1a760bc0f2566cd54acae148be490ff7424ba5a91365ed4eeeb5a1897f80ff6b1c1a1f82b3068512015ff3a2057680bab5bdeeecefe43911b2416cd58e75b876594dc7c824e64e7d6d15e2a397050c6e97229f38ef3649c6e0d269cddbf020b43ad6ab9c2d3ef09ef7b356535a3eda9a4f426095fba546f5df303f784f395faf257f7205b65592fd0503f9bb376913c647e5d70cfb775827172397ded0979cef830ec50ca7745d2301cb70e216cdde7be6d3afa4d7f5a6e2f0731908475400fabd4c4bb7e8e3799751d466d1e0b3643f94d38e66776759b1d2e76cfd9db6b25a3901ad1062ea0de15fe6818e7b63cd9db9af1d58c4159819254939c5b806da9761f5921ffbd1418a91c96923d125401abd2d0384a4468ca4515f2769828ba2379cefa3eb9cdf3e195144c797c941e5400916e8f200445dd9bef2dff0e28f30c451b9887c2e5d2c16062043f34afee596033176a9c1553240d4c90862bf58acc6ea19e8da979333091725843e3ea668a4144853b1cdc23362fcae4bc8032f3fc3ced86b0ec1c9797bee1b33808c7f95f3a42127120ed38ac69c675029955c114565beba1f924729f4f2caf7c21cd2950a1c869bd46bcf5cf51ebdbe8d5d2749d317927d15f45469fa8bfa790bd6e69071e23d5600cb00d475e8783efc43d80ff64c1e5bf8ce3a611721726163a205adb1600e019e18ac17d06460777f2fb68d346c28fdd1073f3bd21cfb56d268751451fdc344b4391c508df83c121d090ae818df790ba789ac1cb3e55d0061107feed92022c64c1698a5350ed6b6dfb91c4b270dd92c833bc92e43e2600817826b63d233f5306d97673e4f0df40ccb2734dceb5f0f086c05dd99097ccb16fda6819ac39d022920a4d344635d5fbbec3c9ac3eb3be5486acf32858e1b68d1196409bc34c6125a6c2522dffa66df6c47de9529af0a219485810e195828fde275a54af0ad16ec6b59029d369b8f3cc7e6f66f36c0358c93c604ba7df10953f0194f8d5fb7f55a03ef238c72ce423d73d06d6e11a522eeee343e7edae12832a40b4c1a30d9cb22ca377037ba1be7ab190d29dbe3e63b0f4dd818a158aeec62a65582398c9c000d6a38d2e5370be44e60a614fed30ce7b656b87a6d1ee2bcaa9dffdb329b87fce388fa2fe01125a2eef1a2151e0a9e8dadb4de4d28550402d3320f3e4c8422276ccf86716e6ff1895373091384af2497ba0d52771b249d25a60c8f92d070f5ea6fe4e37ed879f802448fe3f879eb266ca60a1ae28eb4348de8d486c1068689abb67219406659c1738bed39ab43e62d7438524074c82c51a26431fdb236ef65d3071f319d5f34d545ee3412142ac7c0173a8ecc1713b57dcbe1ccfb4da8d211cb2b93327f0d35bae1360d771b78b768bd7265c4b2b5773e73264c887aa45816faea7724cdb681faad2b1f6fa873ddacceaa80322df7991ffffc5aac2171a9fbc70b73106fa3431d13941302a3656214b2a8861d702144a5d82b9e702a58ec489c582efd4c1ca1a97a3a9038f4946d28d135208e627b9f5a667bbfdb7da14a86e09751f34e68c3284ae63f1a834927719418f68ced4dd3c511b466f60394ea3cfa9183fa5cd1d221ea5ec7af38cbb776611baf1ff8de076e429d3ac8a278f5f2540e6d1b5e9df61dc46ad200fc6446bfa104f34f6c7764de5fffe4594397923055d6b75d3d1556a33fd40513b55afcd5bd9c6c252f60129cd2a20bb1cf37ea7f65b008c9df811b3bc3630af24df6003f1babc0a82ae13830014e58d92ca12466ec6508652d296c6db8de89a5aa807b8525f997e14542fe2356cb72d8441d696e52be603b0f5472c2870e2932b6409430424d9ad669ca8dfc37e003b6fdf2e11d0080b8536e4c55c196bb93a3577d74c7d97070917cc20d430e57b07b416ab3fe5c76b7b330573cf34eac6f00778142d2542bc21a6772a68142f62330f7cb0896cf6706653fbe4fde17ab644ffd9227da1a44387713227e3c3b8604dd075e076fc21a4d7181c9b80c5a7e1a9ad1f94b66938379b2671ac0ff61cefa88586bd9109b5833dde0bf9c057dee3ae8dbfed5fe27b22ed34aa1924f1c98ae3bd43aa501c4e960b343ea264feac36c4203e8ee2a3e97fee0a6011cb6d4aac8fd621294cba3957dfb91907b7407c557af3101bd7340fc92e3628087bbf1cdefd7ea3dcef5a22432bbb4fac6fc3ebca4374d8f6b6095a791e36667fbe7dbc9cbcf55017a07275d26fd93702d6df66ffae23fdb1f7aa560a4e99afe9fc0fa6605f089a7c0899c0902c81639d85196a702b9ef2d0247d9f173fce68c9cd0b76c453f6f76c90468f06d25259ff02f882c64c345cd3c519721a524325b1a9f78a232c6efb8bd00f3da101aa8e89d9033c6c7082a02f42048b7e36966b140b3a6d1758cf2b3c403a58f92b2875d06fbff3dd3918415523a557cd4d46ad73696aac1b6995eb10497e6d69df2aa4654f8545831653d4e7f292438216c261525d0ea3a9cf61df8a8431e79d6e4faebae0f9ae0898c3bf5a3751fb2713a82b235e7d004cfaa15d0d690b53ee78f5d933dc9399e820f6852e5a4adb46d4467f88d65c3e6f8bd3083b60413ee78fbbc8829ad9957c5f5aaad6e403504bd94bb2d56d22aaabf3854587229a05130310010994423d6fa46eb4d66d1216b0832689ab7b46f16cb226b962f87c52eb8380f74b5143de2c80b127bf4ddd8b1f6245487d995f9f3c5835c8618a4e84eb718d3fca7a75042d74b077f40eec29e3074693be3fc300854630f70520a737ad6da33ef9485c5bfd00eb2a1738b47fa5e2a8d00fe727c1f21cb6c9c0841cc78bd851697a73402215b5cfb29b53dcf8c284caa1c527e45fed3c25b5160cf5d101321663a053e71301f3eca5e2d8ac21d34e4a7d806a8f36e1351c4d8823e8c0c81b70a21d92b79b3c5bb078904fd88752df96c7c4378ee37897f8f799716c333ae4dea9449818174f4dc9af2611b895cb994e15030779f21dc54a47cc7dd694c43eeeeda7dcaf33955a86be16d6e2e9a80bcee9cf62c6cf4b5d8eb29391de520e79ffe3d9e8d36cb9027629e507dddf62b797ba7bc1fbe77bb144dc8165da177436a0203d453b2f24c61687031d0ff3a62d370baabd9fe73970fb0a085260418fe56e27546a3cf75315f63a138f0fd2cccd3b51debe192b1f0d1fefaafff76cdc16b86db1d05f51ee8283d778f643d9512803218a3bfe4f66f631d1ebc705f5c34b2d67d80018cb319c4dc3b5bb4293cdce3d0f3fbfc5a0dbcccf754d301288efe32bba29820fcfd6c3c2a34c76928ebd10275f51c1f5ebd7e1472e41c3b372bc8f41b948de9adc487970dacf80aa16899e70a672eb057cd5d447815c0a5f5fb39fee09986e508d015dd6fe9191ffe7cdd9a78915838ad060363f031e7c8cac5fa5af0faab9a73e8bc1637345030a6ef4521a5bbc33ec7301579c17eb82a1f53b21035ff259257d6244b4dd5c5c6018978867b2d974a0f133e8fd5455c555a6b0a2695ef1c551d60f6849914a26877121fd1e12efbe4ec7624ab13cdfbd1e5d6aaa6fa14b7692b4fdac702390c9f7051e108be081795c6226fd86360bb24265c39974bb41f58eb6a771e738b2df2540f6735fc0114e406e0c81bad44c7d887c4600270187caac37b7690d1532de98b14585f82621a5a1276d77ed9c245756ed8c6ee5088f5e51d487e2505da340c7d285d8f3873507d53ac4308d0225e81455e1463d54bb293609b38e6f76569e493131ecc067bdfd8314cb4c178ac3986731ff16ae6abdc3bf43a4cda8f3ff4f8339c421ed4c4eff0151cd4b2baa8ff0b60e306096bee9b6641ed610ab6affed0c68d728d8a94a74f65e648e27f5dd7997472fa4a4d5d169baf7e1f7c52fcaff5b5ac552210342f7c8b70bb59ad14eab71793763572407662a6b3303a4c6f2eee67c294e44eecb0ffed83d3202d155fedb11022d1c3dfe2438e56394c8d50a4434396d6dc2d035261f5e6383ee8a85fc3aaafa526288183c7cf2de5b8fce7387db3f2c41093c33c29096393bbc51512c26a39a83c8a708175d101d988807b13231d9c058a697297df93c08ca0aba39f715975d21ccff203d6fc99c0c403555cbdeb5d425298598a0bfac6caf4849b2f58e02dcccde1503170b9bf40726cbe3cd484fd236e07c03e36a63df6bf3745e90065273d57a6d234ce6e39019ca3fcdbef50444fe89deedae7ffedb70aace9f6f0522ccec308bf347585d0ac498f576096b7fa6fc8442d87a76d9db6dccbcf7db00d042718ee6158ef644ce9821a19f35121e62a14e3c36dfd58179b3d7c3fa7c90077ef5e3ffec9c275755f4e2b88bea9f6d129d661f9b37128210d35a7809cc2914dce9de5dfaf791e13b7b5abeee6259e831415a817828b4584b4cd34db83232a4d6edec74c3199c9ed99bf8091964e82c492da9f6501d41708390c0b98847532417428cd8c77acddccab7593baf4aa085c4b2c2e2b59d3077444fb14ffc93f11ef8b84dfe9aa3ac27898deccb028c39912e8133db0b1107b927ca0385777092e1f59f9e5a9f2c9dfb9060213bd5b219eaf1197b43d3214dc288a055deab95cf39b868fc71576e39e579eea5127b54a7dfc6dc17b1a036693ff15326cfeb5bec72abb4e6d755f0f6619079d6c375dc8a0bea5987b8f4e8f06dfc62d4edc93ba1293a03fc011d4d6a0c8e9234e357c236dc060249ae438159f8f4500e9cc7cd53d9fdc69a630febeb22cee85dd6939e14ec9476ec160eb82c5d939b327159899ae1618d5081c0551050dbcca031abd8caaa0027dd94c8f5ddf834b4cef010e8dcec0fb89cf1b10170133fbfaa7922fabe80e385ac8f04b2f575622d528d6073905642e8fe17647970e66541eb117b8c772db910b7894487f941a6755bcddaa26bccc58ef2875d359956d6e3d08f28067afcfb79acf80aed5fe97c1d5925e20db59be22af8b5fdce5fc11f35f966bae1307b14f0eb7fba4b9fd94d95c92a190e0460333d9f17e89c4ad1a888c42c96b54e24b0470174f52b4f9db56f2a4ed23bee96335744418037d0e50d7cdf456deb0a8637bc7d6c2e14d5a32e19fb08c00fcaca5cd896b767298897a8829945830b1c1c25f1bde9d790d8862226c9ec45122f693a51f4ee0fd9d856243a90b1888df963056751628417bec33c06056de3bb92ef3653ed59dcc156aceaf543fde0fc18d7508dc66aa621fec6c6484c121e848be8eb5eee8f708889f87743219f2ecdf0f581f58b66d0481f1d7b5dec5d780570d2c3b386f34d97c8e553b4b819b48c185a240f1eeb74d2a643a5c794b462a6e8395a223529d667b9effaca860224bf0551b15b0f7d168a1ab5e005a3cb80f16889090b8797ad80c374f6e509ccf1cf3e98b469cb7037b6e300b4a8b7e7357d684e6aefecc1356b8c10b2a4b1feae452a7ba7bbd1794af1a5908e113fbc02937df5fa3fd34af0905a4fc87a2cfbbca96f9705b1cffce2b2c901f6ffa99e6adc001c317bd9798197d49ea2e5c968af74646748ec058f7182c3c169948422f0df953dab447df14ada8169dc6815b9e93eaf58fbdb208589da2c4b60906dde16e6a3b6c1fa2f26ced0d74dcf81a0640c50a708990f8f939e31792c7673c5245fb9c224003d6bae80234cc706c2d7eb8b52f1e2aae9c11e211130d115af089a3d916711f06ec1dcf14a58422c9c5ad4e8ce06739c0a53a9a501c9d5b8b2c694333608ed1d0eb056b4ae906b8b7e77a4a72a6b3806d1c5baac8bcaa6fa2f7dc6c2f03e31e0adb5902cd87b8fae09dcdf38e086ac55e085c5aa07a9c13465aca67f586d6ce5cc401ddc50704b2e9ee8e92098ef4d13a7124f201dedc101f5b197dae71d1a86dafe44459f251a67de3a56f0ac0ba6caa609dba1271d02ed605b2f3824d3b75e6a3ec7eb1ce069f4282fbd2ba27225d56dbaefafcbae134135d7d1498a07cfd6ea900d5f6268d65e0d57603414a956ee5ed3ff9e64277ec7d6d622719f5fc08aec8088f507f4dc000e4ff49c6b17c65009b3900f98ffb1cbd3c4a732cd1225e4e08edf5e663ae784ab57fee71e53d0b4eef82575c2bd38d7bd21b41fabe58c6f571954fe15918546553dc386b6d422878f00346389e69075e38bfd9ab43060a4b0ce9e568eaf31efac30070dcd1f18425a6a415b56e24520e751c8366e992f0fae0d1fea49ca79cb00ed1ddec9ab4e6fe1a4e0bfa256b3534911c8753366541a7f536e4bdfa9c97303d39c9c14ff218aa53e771304aa8797895a62c9bb4e7c4fc54feddda893bd621581f7a867812e0d259588f7e6642e68188a1bc66eb8043a104133223d3ea232c656a39619e7e071e358aad0d00a144f872f77ddb6299843e0d5b2bc15f1244f96e044e7a489d5535ee641305a02d5b845b8fb823a198517a78c00fdcb51c022f7ad401fafed791c08ccd098dcf4ef3ce4c51b46530e770fd4c29289b5e6e257692c29a094894856618afd6cd136cd37d4c25bbca98eca970917dbc27e1727578bdb660ceaf3cf7d099f1c3eef7efc43a64f3137a6011c67b50a614a8c68fbada03989c72ba37b0a6177b1818003f8ead9ba3059c10bd8dc5908b7845962cbb476c50971cf2ee788f9b351d72b8c4f97df91dd9593057c8f759142f26d8b3416501c796f5ddc716332b071925a6e6cd538649d7d849493db8b3298374148b14dcc9e3e425052b543bd2d95658520ed1d64b104742e2fab5b1a7b2ba57d21cfc55cc8dc8d3f283f84f95931a3445a2ceaf4f5870be84d2f78a3c971df69bcec17813ae89282a35cb167e1daee1060c8c859a0b9b75b639cdea7bc0f47af6092aeca52c704b37ab9539945f5a861db2d301350f108e0097fd796a16870a6c35005a8bf1c564a14b1e5fdf41654c13fe6bcb274e1732ea5450e0147f1dcf84ba0b69cbe3d09dee7f2d3168ac195a6f561b8a78aef889fdd88ec77ee400f1c60013c26fecd81ca8ae8c573686bcd9b924ace63119fabac08c7fd5b22e7697ba70e00c7ef32709563f017851b997f07acfe789597666eebcd6eab3b743c8e9e97039f001df038d819c553cc22bf2c838bf9118f8ad844c771f9909950d3e10da69e816ff9ab5d0b02c504d90c615887e5c753e17a59cfd7bd0527e54731f3415c4b325800b84f96b57b950c3704759d10e5aa1bc48f628504fdebafd5cb57c23e763c68d1aba303b855af06413d163bb3d07e9f27ddaf67c06056698b246118b3cc0a02caf9e9fa61ef9d37a96fbcdc35145bfbe2c8f8f895b8e2a2b5c1b1bd529915c68b2776b368a5fa10de10dc072b2dccb2a3d5e1affb843adc0427cc18a18a0a1460b8ebf7332540326dc4f634ec894b43d998fbf6484ea985e4cb02b3170b318d0a32bc1e47c9fa0cb6f09dfe1fc3522ff266aa842274c920e620182529993680d60959911d10a220782825bb3b486bf79cd36fa20093144d76cb5ee75fb083a052b1670829a5b2edffd03004a595030b2773de087926155c152159623fed936c1edf46ec03d5b6f5dc8d4f530545b20b20ac580fe2aa36ed4fc69a3e30ad003488c78ba5224d28a88cb3d63ed0b6f35827017020d39c0371952f93c3e87b34aa2f2ea7dc0b5882a68ef867207e85417298f7b8f3c278157973d0c8abbdd4bb2d80592de935a44f5061af6490852d16faf51384f145cab7756a3ecb5e27460e4f1afb706527ad0936935d61178b1b0e51d9c98691c40093e5f6edfe43bb4ba87f5d6a31c857cf2ad99296ef1dd6cb7207a5ae105dc3b6255b9842e3f4f062044ed649c49b4ca73eb9fdc0612c1edafc9ce725c4dddb67d636ccf21efa5d05bc3e040ebb568cb1af48238e69cab9b5f8722cc5167a61723118135ff1cc57b34abd652d88728e7b1714a2456b624de91037d50087bc0c81c07ffa012ed387070a5d782aae87d86fe0900879d88b31e0be5e7e6c8b2b12f30eceef7a08b8516da58ecb8abffee10cb65ab4b043be0c396d46876db3303b627695722f21e34d4396d1cdc21f503edde2c5357d3f73335fa7809e887273dc4c825410850cdce14548b70d655f14486ff07009352e335ddff7ad12415b6e8c0dcc9b49301c0da3df45bee8e8f1c3a41f89ebbe7c8286d216d82c912cd078b142bfcb8aa4f20e0b7e184a0ed179d6c8790988b3b7fed636a0b37f79bf643ae277d675635801568e9e3af8ed9349d62c18e9e7977bd5ba021a24265a5d991da619ab1951dddc6fb3dc284bf3b2f44a555bb578c83cb9aabacfa4a1b19bf1a952a4a837e48ae5c201a45aa3bfc50b9bcaddf6ccc47f1d10c75dbf81fe0ee066aea5485179f3bfe60e836ca0a02df252f2fc28441ac76294ce20df47be0af7cde09815e6a0acbd542105b8b353724af87452b48f498a4c9f25d57e5370349a47bef99b77f72a8094ef87c96c28267804b56e35fecf4c1d9864d8374593006a7c80564375cbd18c10c096392bccaefbf03c9b37331a91683911a5748eb4f2cad4db1a9870bd5642505abd72828f9059538086129cc9eebed9a2b9c0af44704dd935c324e94a0d45ec0479f0010f6f12a707ab52bc4ba883f29ea19617d02d660216fc535fd08af94c54384c17ba9fba53687792121e734a2c6be98f68d67ea5e7f502be450f43fee9d094e1472fa6b2f0f9773b2ec0c383efa0fdf702c5e87fe36692c02954bca95cfffc5a0fcd188ef85126c872c10dc3a4c46b87862cff668cd218f37d2f799b1e38fb00e21169b0e1f612d48e9dd68be45c9e9b638a280c5ccdf1e2d11dff4696220d905e9b1ecb366ea7b9c2b5a24f46b013ad1b5bf6b3dbc0d9f8959eb22e5d319062e5d8ac307e016212bfb6f580249567572e20ffff72412dbf6b3036d4ebee40031848a6832174de59e60044b1064316040c578861c8c569a1a250f1bccabe88fb56797225b93f8919d6301464746f8c5e469e346d37c41a39dbaf77586238d7a620c9a3baada7debcf0b4e91ce76156a05d33988457d3bc02877a3c3a5ad3b8be17d7cf9487646bcdd60d474ce7cee174c0d60949916acb76366fc4d50d25a88dac223a55defb9cb6e6a79376fe1ed96601e42b2f8d0fc51f58ee85ab019523af4e1798610cb40e22b322621d82c78aeeb0ec62a8a32935687f75034ed0a8c69d8e465e68a9442c7bcbfc47b32e5f92692e5d34376c4d98ec0aa1d212e2d6edd2ed2ce0bf3d12743c819398da494d7c7ffac5347e50e37c149ae356a9b0b615d9db49e3e720b561ef7496f9f57c27a59da6b2d7cfe9913b6c90b82575d2bceb3cd91bcc72fc93920f3564cf973f64aa4ca28492beaecd636e9caeb2f9c151ba5677110ee539337116148bae31fb9af6f78ed8f9bd08fe90951f2573c7f52b2fc135d82fb06f1b8b8ec28a0a4839211848cc1e716d90bb2f7a88bb0c42f69f97f785bfa356f6c24de3afde585c809d8a9adad39e22de79bc8969edd10d4e25af83f7660e6b78be44bf3cf73ce16a66ca783b76d48f3ab0b43c531c66895463b2d0fb39c5405d75ec7c0a631c794f23545b7ea6b9054e06a31da4f53139a1c06e8911c96c782d7fb1a498b07b76b749c4df14b1b02770d1f5a80fd6c5b0cec22ef6db837895613230b3585dde8c2b40785d8e465e685ba94865d45f986133ff70a4a8f65e1a8133f642c9d9ba0c23bdfb715bc3283a56f307d192ee2ddd69bed03d0aa0916a060b5ebd8da2a2893908da950db682200b55b065dc00fa87e8b6ca1a8100c716881ef69de4470c85c3c7724304af10bbd137debd104682f3294dcab7ac9543a25fe53a5e9e356c746c507ef5d10b3860512fef21c01d6b91b40a5eaeddecbb902604b699fc0c46f78b5a4d4803598db003847e4e6c03f9060162f26aa565835252d3e7ba8e2a3061a93b59941c28751d510be88d9478dfa2b9ee3265939e2f8b6f094a4ad51d9d556e8a40747be6731ad1fcca89ba0a640a16127b4a1905348de2eb4ac56165024523bd8e63b3122c3afefd90ad4d374aaece664962a62926ec471085b4a38ee3b3614b9fec4239f4f04074e772de6dd7f34b503959db787b29240f77932bf9d612bfbaf168b9dc61dd3ef91b74de3cb09a0576a79a2971a5b6d24e9cdb5b444df597922f837a67f7545300c92ded1258e5953030ae00b33b37fa446207c1ecbfde7157a6a7147b29e825126d085b9d35787313510001aba00f048773a2e051903fd581f35e18747e1b1da4638eca2bcac507a6752a9cd978be898e2e374711839c5c97a212e6e2686fa53d694bb94cad4dfb50399842bb29c8e1df0e3f66bafe764f0f1f5010438d586453daa9a98e4195a6a70ad393cf37a0a5e09015bfac6540555ed7b015263157d38e3422fb4f2c1ea2216566f08436f85e396064c2746c9ce81d779d75f909007b2302625f2dd15b6635d5cce9888c12735fdbb70f9158ee7fb15b82a33a88c4a3d8c1d225a8b5de7b8ad8600f3acb917dba8e570781ceb794b1100a3d7915271605feecef3e5e1a4a66e9daa21959f7e5dfd4ff3ac4328acfa3118ea52352aa2a41162d3c5d3e816b7086a772b2dbb834466c0a29e738ca78fdfcaa6ac7a5b058f0a41d6d83ebc6472e3b20c185a544f174aff25559260939282dc7fee4a2fc4abb25382350ca3b75f674014f006b4095e11d523d989ec978b81171f1f8cec0480725f7ce327e63707fddb35bb1821daa2 +MD = 3fe793219c9c647b912981ae91252697d6ed525f4f24a87e760d5ed0 + +Len = 97648 +Msg = 02d15236c222ec01d5d06f0e2b97f8176626cc5a9ad03fef5184d55ad3ffa65da44007104d3c66335fd476c2b6048dcafb5d4a7c6cb57a7fe01d3c8b05136434edf91e03c9c6d4cbf4fc513a33da26af3bd24c4b733d0c4bfc4e1c95ef440b90e5e4de39bd27fc749930479f2a808c6d2e6d1df236d0bcfaadffbb9f16fb621b95ea91dab1c7a6d45858a119236087addc1704973ed75335fb1863d2049e327a04f17d0d2d0e9c93385ca8cfa7e1de174eb6486311b89aa3ef815a56409743583ae2ecfbba64a55a4224a1ea3d6b5b528b33327d39dd56ed9022e852524c5d5b40a624ccdf3188d17c98d7916e66c4079b770a0d3eac52bae7e357eec327482b1d236ea725dd0e9ff0a191edc13ae2dd8769183da68f55b3faaded54198ecb71d94311b413d0ff6ca6251626be507d7d56f0a333fbed2680d366f4a9dfebb0d57ded571d317223e2a40daf63ed0e5d8e10f6f517c42e8ec87af8b2189aa5bdfe10098607072c41a7f442a4ccd7dd49b9be6254128ab95533f54970c6d424bb959a7ee79c1e6423639eab3d8b03260aa6661c094cd4f8436b4e4375de14d071412436c204fd838fbfa82fc2c5f94f68fc130b5bec2a521f158dcd0b86e311a9abb4185f672cf24e621cb87aa542c22b64ca19941a142fb3dcb8ce78e6c84f297b550c05ec341828f6012dae5065e51b85952dfb001bf7c565d93005284bf2ba580cfafdbb9c5ce4206075a6f1ea2200087b2fd7c3c6131e5bf7dafa71f46224eae3ca90fdec284c8a407aaaae5ae0a1948508718e9ee986641bb49fec4c072fdae16403daade326dca92302af3c86c7d2b99e11872ae2c5284ca63bbeda4aa3d00eb1a17966f43bbda458f51d187e3a6921dafed6f266a25192981812269147737397b1039fc553d63701cc20772fc202c5a482a47edee684f5727c0eb945e46c17ff7a9fe0bd36cf6d07d0dfdf012745abe5e31957b0596b7e1cb0da1acf426203d24576b244ab4f4b504683db5c30d9dd836a5c0446c3ae347efc9fd19529fe3df65ab09cc27bfedbc57933f0a8a76763685f960d07ecf52081a785670161e8cf550174279f6e86244eb018a84d5296437a0aeefb5a9ce7480bfbb3637ab1c7c0d682ead9444c8c2ed4325a8ab3f90f87a3b28d54a99a2cb6053e524d67e3441960243b3d17ddbb023d48201e43667a37caa19aa35baf6d7258b989ae32bd06e1dd318fd881e9b8a7733a92ed63607e59d71d3e6dd8a35282eab4810d4208b62034ef0d34eb372e255c50da7e7caec3f7b16fa13c873e82f0a57761f2ff8bfbdf4da7ded8bb90c385e2d21d59f719f21842dfea97d247a6c4704952e5d1107e2510a0294c5bbc1fceec0786073a69b3c571b442072088650432747c6f205de6fa652417193183eb0861383a0faf66ad052638d013dac768bad53e0617543cdc663479d0c6a7adcf3b2bad64f9bdd789e049b1bd4366cd56ed40f01966d572087265e87bdb2301727031ae2a4ecb86ee5ec368301f2d62d8a65bd1dce30cca1125e0b941e00f487daf5b83b495433985887aa55230974d96ec0e2b78165f0ba0888d34495ed24a97fe91732b568cb9f66557b04afd0d5837c74144148737fc5ca154a1bcddd4cf6967bbc7b71a0ecee8fd42d0410ef549643fdc66d9bffd67ee7a1e47c1e37d9f9bf1c1c87f67313f0359244e5fecb8e9c45dc7d7ef451712fd1bd16f81fa3581d4a48bbbacc85dd6f080e372cb1ebf000028ebdf7da1efc5328a576123a9643fbc8902eb65c2fa59577a6984ae2c7156bfa92ec8ab5ceb4a35d19665d079729ffca70c9fd3df7091df509ccc2f9f35b2aae679d8a3fd7568adf878c3b0f0c76a3c07921e1ea627463109669277fe75de68e9b5598a0cf4e64205e4c2ea98cb6723af7db16d9f8840f5adae1dadd198a0a2bac8918b11d08d9d02c1aba7f9e7605aa9b3a0e853f946d2455cb6faa106c1005f9cc9cb95702566f6f9c60e99811b89fd1e33b949e32270d857a586f4260929e2174875203e7644ea735b4802036257b1a5b20509af9a786e89327855623fc64a2358af38a147e0e517b27cbcd3fb6ccf2f64f71cc377920fd9a5f949212d7ea0a73fa1670161e2efcd13d34d5bae715ea692b409898065c42f45305acc99faeb8a467534c78df1107dc5753f01450e67f1846758677f9a94735b460fc94ce233b6b550275991b5510f11891a2f86eaf1f8823692c73ad8888d2f62f0810edd8112d45cc92035d8b96b3f37644c3bae04a3d4493e107bc8a76609ad865ca693dc86eac1a18443ff517a97a9a7c02a01a8dac1c9e4aa0812f9e4314f58c3dead4cfa41a738ee81d4202260046af21c8ce68592de0dfda95d86f0ee6fef1c7cd3d9561f3514c4b9ff2e4ce473364cd8f7c58c90af4071285157738a35d1d049ac8c82cd93bf6fb12883e1691c923528e94ed70065056e4c9773534bca88480de16c6793eac15832f628c738270615d20a884e2d27e45cdcd7e27a7a569ceb901981ebb862a0e6031124e899bd1a559f037bda5e1e66a3a1b8adce5e00932099fdd4f78622e680ee227f2ad306575b577c2f61da7212ab63e3db3941f1f751f2356c7443531a90b9d1417730294490c21cadccea4a70dce90074a269514fe561685248381cc57d2dc573b6f64e6a5ca78cfc04d6ce099ffdb681f01f472444af3e8c5dada66eaf12a71dcf6e9f4f28d07424f0e628645a65ad080dabfbfdd6a4612499ea189d8e301e45a9e0417d5a037a2e77627d0a77ea8e14e055966202077621e6369bdb824ed3f52e945f7c5c0949218391f8815c5401aa516540db33a2288c2bdb57aef3366d3445d11fd294aa8705fbbcbe53736badd4482220f1ce3b1c6c501f73a149ae950bd6e1a9096caddde2c62bfa0722f73b99add65f2b3c9bfdc93c4b1839ec7ff380ca0a26a94adcf2c1ce26d226d3bf520268c72412e58a71acd9a66d0044712e9e0795be3898fd6fa9faf56e37ed8c9b15623d982c31cf201c0e7a9b7dba4bef6a76ca9840bdd9fba332dff7c2d826bedc8182e3048934b421c30dc938b4d7ddeefff0dd4821383fb65e2d9550fb55625faedd2c1f537fd2c3e0a920ba9bdba1318b50b4d92ce2e2ea67286f68c0e12fa5d2959b07f879240b4e94c88ad820e23b0033467a469e8d473315ae928e91cfb6d3f35a43e1ea5200f316e830d16e491548dfbbb3d735e8d6ab3f7956ce2ee79a9b3f8e5b759a04aab879a835f08c7ec6499d3a0c47709a9eb7edf93de680225910c162d71b50e112850331209c442856edb4eb0efe154ca7406656ce3f4f25fc1cc0fc403dd6913f43feab793c5cefce1a6ef74065eca5fa2cf3b79241639b8ba686841e42f2bd39d8b03ec93a9d7d35ba11862ae2bf4e9e65dc440f54842a0c955923f7926d0d092e621096fdcf7793b4e6bf55de54ee9bd16927cfe1797a89d3820055950e28b62c5b4c6bedba88f0f035cb48c2742efa5ae2855a4e0b3409474845bfb39fb748b9e518cd722556555646d28bf4e7b6c2e78e893605020095d9f517be54e661c8bf469c46f4da89c9ce60fba7de752dfb5fb658ed6c26853471d0a0d9e0adcf3d25c7025ddb9fca5540cc6e23e6e63caeaca21d07ed3e6ceef7200898bfbaa8afd3b06f9b8f3dc10094d3548776018ae2b59afe0aef145ccb532e778359d59527b0490d86787c15d2b2bbd55cf58fc09f62e62380da6efed46e42142316c83eaba6d904a8ff236ed382cc1829cb5885ed9bcdb5f01515fa102ea307ff5f5a4a469caa7c898afc760ced5046765f2482d54898dce30ad1f7887c9b799f9a5262fd7b029caf83cdd284d98d86cc1bbb5e5e5190bfe020699d424170928c31792dda292a8ca4505f2d4330cc01b166e5c2919efa876fbfa79648636b794d8a9754e48f6a75f05b7a2d52d855deb0a869567418215b184f5187a2ccd4576a0f747e2395097f190ae57ab8bb70464e4a10c112a54c646438301b5662f3536c26d754a02451d1a9c76abd7dbf656115b2a2ac702ec2cadae30cf86e0f0f96da39897d6222889428f9cf9eaace7b568c49e7be989cccb403b6adc6f1b972473caf53a27179f7ef1c07ddc446cffc4e3b77a6a091d5b24a651ada2ee84a628f1bf0fb6bd60fe60b0f5b5cd859a92e70aba5a9f963c3bcb68a785dd75aa92896fd64497f98ce9d0f885c1481ec465ae56339b672174d321dfa36fc6b4fbe0c836d730787bf9c63241072cd68058dc7d4eb9d96b3b35a5baa3bbe808fd071557ef085fb2a546382722e054e35af66bf66cc37116342d48082d776b0ede3aa4db11002ee115e0a40206a7d608fefb988c38d71ee2ac9a2e9d056c8562d93513a425452a9e4e579e6574c43cb1ecf6e6b12b6b2f7b252acdeba3e1b38f7e54e655944ddf14af298bb3e5dbd578b566eb07cd061f2a0e4daa76819d620f1e389161f690b91eb8b4f09fe2454cb7e8c9f9f2862e8a89f88148b036e63d4c694eb95bb4a454f70bb8616be2970f19e7aea803ef4aee1554542d3b3c6291c1c005a295670f1f58187252ca7f57a8f9427379ae80e1b646a234cc89fa890c29c30bf1b18617949c5f91491e10fd86e079c6f364c3997fb872a1aaff09c008ced2b03b328a74314e5183b8d93fff456a0df789c92fc8a6c546394d3cd2ae144b7f90c39afcab91d88ec826ae54e350f07fa3c14e3e05c8078d5a37b5fdb9bb0a4a3c4f5d450412e577ed26e00830260e3f4a2e6676c75ff9c882deece3696995a30122fc0c3450dfad511e30c26c512ddd6915945283eb167851b7541c43bc681a8dd2e9aaa2c8318f9290f30c0e5ed9ca7f3b6a69c1d5e82d35658e00bf001c2140f3b8b8e5e5859f3003b95d8cab9c96faf45b1517bcd947ac5dfd4951e10c57b8f9ebbf6435467ca80ae63f6dc3e0b37ad4e8fcec1c746834f5245ea2ebc31e5459f516a433fe78690b2c1a283440b06d519679b551440f5def85a9086cdae5a19867672c6e08430178dd765279270e40fee6241a17c29d8591a3c11900be6e3f39a51973400e4cfff88cec630f1e3d94314a8470bc7a935a70013f5b33e7e87bb240b60f567af6b2febce4e06290cee59d46035fdbc6a13b2f206c2562d214f596ccb5671dd8e0d8ffefe831102922a3976b294de24117a61383d02e3a17541b5babaff102a28bb070987efb9441e96cb42c7ea16c749729c19e13cc1622268b85600e63b15277f7f53911a67b65738f87fc7c20d6db8044bde1af95838d1c94887c49058683061df25438b8121e61aa677daa12ade063757d00fc010eb2a6e4e972e87d1e9ee680fc7c5ca714d7244be702611d7e1dc14a634e9195142d45eb3cc67520c61069cf781405f9d02a4bc29b3d6997c40e2a12155cf8c830678a15d6f977973972305809bdcd36f08248ccd8810c27fc1bfe8b07aeaa20effbd4036c7e5846c55ebac905cc0ac4d2699bc9436fc12492d1bf13cea62e25af54c42251e7afc61610698100d1575a126ab526507c413424ba0c2abee5ed5cfb0ccaf11ba7e69b9841dd1e9f602b3d2ce035827418d4dd2e5f465e7ce0601d6f7e68fe4e41851dc86d860015fb0f048e749d5c42d824762c1bfe2d6d283f0d59442eb85e4703e322fde4c429046b36b3825d22313c88958a9aa3f6242fd2a364d87cadc02afb72347d89d93d0ed85a38b3d562c3b8a9b1e625c8672659b355feb5d35d186fd4517956d5cdb69cded58a63c69c7ecee061ab77ebfed84869bba366e334cb7816e76e2469004a10d73f252c813dc701c51b66fb8f0bde7e6e4adf55fcc35df64bda8f60a41f5c1d69fd957895d530d3d045951b123c9d6e296a2f2db087444cdb71599627796104ffa757d294e140c79a76a27125ff999a23b00f388f0f12ee5e62593f63bcfd8a10b2f8c4def08b5f7c353b782ad35774f5a2fc10e8b95e7d4d141ab6d94885ff35a6d4b9f46154fe0df7bcaaa1465ba117c972416e246b6c100cfab708ba9ef6e709883c75e24245b844a27329c71a80f28a0e348fbede2d4fc3959a6271ace39d419fc6d3c1e7a91392898c14d418a72e6b2c84be073b4374ce57db870c3447e0e567e38eae99aaa867de3ff30bea7613e3599c899be740f783de14d6e8d9b62a7b9d1d06f6fcccdf3b1d1964cce4905b9911f662cb86a8709a74c0e2a5e190f26a9bcded3965722092c2a2ba95ab686de2e22cea348ddc4868d85a2ab2008ad138e090a1e4885d24f57b669504b370b36746aa7055517f1775655b3f9b9ae63f7cf7efb596c9c054e983cf5488714bc48ccbe9a5bc95e34646a84e61d13545a59d6e45a8ceae5e28c58867a99f895c29c9ce74fac8bfbb5d631dae51e1441bac10a02cebdaaa89293005a9e4c850245ba4dae6d0083369d55131f5804a6bfaab7d3a200f6932d3debf681096815a26c2b48d99d6099561467781ae6d8b01452c4998a973e8fbb091aa4c364f592be6076f43086d2b5a54196c89438a11989db6fc4833c9e869b21aa70e757fce39e4923b87dd161bf694d696b55f667cb666d41bc55971c5e16ab23c4b78983f08a4ebafe8625129feb6068c925c732adf32fc1eac84fc30072d00b07f9a395a1ca97c42d142bef3d73a01c4acc530ba7784a77b4a40d9854f7b7eca1764c37dea54dc9acef8aff8148380c571143f9a13ce6eb83b078a542ef894dfaf62d738f65984fe5dfeb4a54b44ec156bd3f05838829a6c0b539f1b3a06db77a41ee509c509fe03facf6d99cfd0bc1b198ee3635a43e2fd17bf7848d538cb1891e36d7edaf8b03221d52b3436c9696ce6af994a0d84b0e20ca5b67ba510dc38f56ad0e6ac98341f6fca8e02f4918c717fb0727aa6c79cc136a0da120df1975f4b1fcfffce8b020240f9f694adcb8ddf213c1f83ca7eff01422b43aa948d85020f7cbb289523a2a121fe0557a6c9f5fc979cf0e3fd2d6028abcf83b3cd271db7bf0c12dfa5048e729f312aca943f4d503f6d8719935558addfe83abc0c70d9e6e64877a382a02ded155de77bea7e0c80852842a3418951174b1fa921f6dd3225f1ac5a12a289197730becbda1e18bbf40557d40f6c3bd1eb99d08f8400deceeb7db22a8b7921d9a75dee3863a391c4213c668bbc97df63a138953e60bee7f8bdf6f4699c9afcd7041966cda71f6bbd9e96ff0a4949068ecea3e8363685ab57f3d9eda7b47c8caa03dfb2ec22e62920d2a16bb023f423abca78541783f97b6543b30865718253cb2d3d4d24559c3c6653e8471ddb1dc9532b024352c78eea99140ecf134260e4a2e6aebff6cda62826a8d81bb3dd4a5a0d76ee30687fba7b6bfb39bc41a58cb1c9d69065e3e9987eca280d5412b8fe78432498c5c91b00a0765fe05a61296a3db873aee96c37e7a2c977d47aaaecae868ccaae5e153805fc10b88f24022c8e0af72446b500372826bd1eda09ecf6df2752bf7b83bd451ed0f3ab92a3a55d6c8bfe8ef4534075be8d1d739a8c795614bd2d99acb121c0dfd1778f9743bb0a9a43470a343e9d623f58530c727ca088c3ba95ef9e60f349ad70150b09aeb3d27bb3593c82e1878b0eeb06701e55230d70c1f407ed3d923e2c3f6474662f3033957ebd7c6ce68f6ec1e79014ea905162a045e098f5919f1cb091ee72395fb0ac8be7ec706eb8257bdcc0988153d8bc16e6d8e40963f77a73ff0a0b7b0fbaa5bba3915e8ee4d0da30d3f8784c0678d39898dd66efa4e9a4c25c1a43f535ba9fdf910d8c4e7bbb2e2c3c01c7bb6f0b38765ad5f1a234e2be864c55408757e9ff86b8bf0e25aff191dc797f0f75fa0a4b2e91451cc7907d184e641d6997f2d3555faf285caaddfe95c010c2a7f233e09c2fc0cd30d644035269280527ad72e131b8d8cbe054a24cba55967f39c6a9489c088db0d634cc3ffd950c9f134e749e0520ba2c41a97966602b7ef72d49c68cdb374ca28599956d6a20863da4e164845025e7cbf91fefc637a03edd0b221837ca3a8214c74b3c2628ba2973750cbf1e9346d62d6f3e51f691525a934bb61ad3f980b28a03e02ce4c9b07ad2dc3700e75f0209c31c6b6c821dc056bc779c5adbe9b87274d3eef443cda1dede62e6c65903c5f71f995d8bd32d68b7bb073b34da0b303657afce0ead951cd9e8a1927bfe322122b56e5b3c7460ca020183194538ee9682b50013e8acc07000a400c09e315a921106f40afad02842aa4273cd1882f449cc1f7d472eabc049c7731907a9bcfd974696d2d34391048124d041bd0b42ccc886f96fde2d352518a2e852ce2adb9bbf47d7735aa3118604164d856fb9f2c89147d5605f80c36f5b3776369a9e27a568796b6de795ec1d29e30ca76b910d88429325e731b5f0ff8fe99f3ce3702bbb316fa52b30988b4a810fb030271d1d8c4add7d7cfb292866352de5fe3f4d523d88af27239c37699ea810bab828da8d3518ab4e8a2276e423d998ccc3049225bcfc9c63efa0df2179ed8aae97e745e7134a611ba72e1bbec8ebaec643e9cb30aa0bdbedf7d50c2d6cefd1ee57f8ebb5b74eb3674ca48412b5f9d464f94564ed9514c227d4af5af7f81d7afc80c438639193f6a3f2fc4c7a8b72ae2b5bae0bc70ec60393fea6281bac050a7baaefb89b22c8cf7432bbd170a9e4907bd39a0c57678e04c4ee401002e924f4ce2ec1e8a6fb3b923a7459bf7fa1ce2ff8f98003094feb4a3d2c039f484ffbde8694e145218b9ae379406c630203add10545f67c77185c486f2077124630f80c1765c45a95443537a31f4a78a23ff228334173d50b615f83dd640135974cb811f329f1a56cb5b9036a799a4ccac7499a05647e9940ab6380fa7f3865b5f3aa84cc59ef92326084db11d7d26c0629f2baee377d55b16716c468da832f2cb64de8f56e14bd60d537235bc26962cee8abef7022f686d814d7c28afe87fe66052092f0df179382742e708ab1e5ad9f73d3bc1dcf80a91f45350fe363ad5fec70b12751355e9111de0947213eddc8f26be8b5599592391178ad00f49279c03a897e2a990950529963261bd1c198215231794fb60db1b3391fae5a511363cbeaaff6013ab3a34473b42372fed2cb635955040fa59045b400bab7506b6ef1df4764a73fa8dcbdd35b417fc12afaedfb5246f769cad5f497f2ca6697b5fdaa770b48005a85ed06ab9a8b99aac8925645e797e1e2784714eba9df2aa4c348043f90baafd6345d2429cc031f746a41baff83c841fe405c4d3b705971fc15e68575623cf42746a58cda5a386fd272817274b158a631b59df3e3f0d9eaf22051a4d50a5f7be23f6ea739ef9c092993ca2341eaa97d114a74af81a5d0e44b6501f8baf392a58b711109c4d6ce8a0e208433e3ba6b35116188e6a109cefc5c668fe7b3b8671f87ae253b07ca2040e4bb582ad68afe6cb6ad432fbe97249199a753f83bb35d386b2923a17f1431fc41c6be7ea6e6d39275902be126c89252a7a9e6b0df9ed59eba8484e3975f83eaa9d51fb5b158ab34d29cbba1963868adfae0b0980bb570a0da42d157fcf696ba81690456924ab5d262256af77941481207de5a144ca1beed5ed69194fc93dada6ce4f4d7c657a3d988ecc2594c7d911d53154bbc1eee00d2bcd23e212291c0d8c0eb79cfd9e9f5e8cb354a2d8c67d42e6107fe05fee4e70f88a84f631b8b091421ef0b95298c2c5ebdb17b0ab58a91c3c638f9786940e1e226db3df123e9e43b046212ce51b8a7c9b4c3cd6754405a8bd71ab699ea6c81f93bed8251f83912bbfce737e1def9f8a864eec9d9e5338ed5284fcdd0fed237c31c51d4ebf4e2f5055fd0d3661dbaaf7922b4f8b8e4debf3e4e2aa7b4131c83ce6caa8e4596820ba5b1c17dc1ba853cba9298c2aadfac5c359d4dccb9c3a5f679914a16f579a0d71ba73bbf9b21e410fb292cc0264216f649ba2ba5689cf8f0632ec317520aa9e7e584a1f148e051dcb95ac3699198c90de90946da36eba001f989a80801c607ae81fe96bb517258e053ac0f3793501d13a22f21d3ab4c15bbdb566b517b3864ab7f697c864b5463dc789152a2a2149da7f3803f1a4c4ad48e57097f8c34de2b5f3c49e5eaad02fd1186af50432442c52b5b910126804456ea1b177730a523e64a57344540ed0a9f301c5a6a91b0571e1e58f61a80ede5376f8604c4b772a60fed5ead2d2191d7c4b888271406dcee23016a13eda1fb99d07f3665fab8f3d102c89118f02511f7080b8899ef1ae0645e750d7efd022fdedca98a9f8b9dcf41896cbd0c50a403e4c3b96c275e6681463ae9b19bbb39f110967f1125f9de5b53fe3a20fba126ee3da232c153e442262042b004fecab1e5fb9850689db8032e94cbc17b6b8436274e0e1816b40366557ef098661c8df284ec7ccddf7b58a4cf908c830ad05c4a45b271c9daac4e2b85beeee363798784446f9e6804236e2ba4b3bb0f7dce9bebcfe777d89bc1270a3d6c78316baa39dfbaf1978f754a3b10449ac1b742cae5933c798ac4c877209ae30436f31d03377d4f2ed2d4813471eb35a25b2ae839abc8f1d5150eef52cd562d22a5a8c628e2e57753eaa7d6969524ee56c1dadcbf7105b676b1178ed87fb462244ee3159fde90ca1d39a9e3d50745d544b0379ea0b7c1c0faf99f156cca3e38959d0279bc8d07cde76a3b17645ad680e870c1bca1f295c7ce28d611a44f7bf7030ab7612370c2e95ed6dc0fe9025f87bebe19a517a3fa216cf98d020341c643d922527a492c5aa2c01a1d2bc790394033e2afe6966e577453d604750e73d5a5a47e6403b2022790d7ae7f0984870c50e478e4ff929436271f38dcd92a480272d1797ccbe2a4c229e20e6217a44931204cfb696e80c82eb02bac86bceb20d5520cae0d015f86b2d49bb476d4ab695034d9e4adb2057ca9a605ab928ec5a0d6c9927685628d2a6237512b1dcf0e69d20517cf124885242f8f39b070cd4e4a8f202f7d865df00258b89eecd77551cd4f27931537b0845138c24455a1f6f980571c202d70622c911edef1743455fa061002b8419e7887764de591f5c6aa3bd4d7041100e40d97792d10e55ba4ef7b96dd2d03feb71f0315e77fbf2b3f4599da778e7e9251bec50cfc04e70db9b06b120f1d128701f28bb29de738607c57a7e3c101c54c39f439df142172f4d3372cea1e4940851fb195dec9b28a301e6eca934c0481b90d5c6a51fddd15bb81f2559193383a6360da95fd0378111485e9966b610d30436c45eb2821be4bcc6650599af6705ccc55cc108fc39e897853567fdea8925d85a74f10a4283b91a1d0ffcd88c078140a9f04aa19829c4ff607440b5f9b2a65ea7ee68f6869db63d6524f15cd79b61cb88d12a72ce907c0f80220bd70b13bf60c239acbe76f244ed47adcb6fb9ac0c350b084bc3c4f57a908e47b0ab4735d6a4565da4aa3b09ccf16ab174575ac1ea46d99b93dca2e0254931ec1679d69f55f409633702fd6ab4127838d35ce16263c69b95ec0491d9e50412172789e0d9a21683524f0de39e6518164bd0c87717df7cf8fb3d85b9692287d9d3ca228c6c27d26d32d314162c48cbeef053e14369c63199d76ea54117449b2d25e78e02df4af26f0caa5fbe9cc4f2a83144f16edf80ad253066ad516cb308b61767136bba753c30e7be3601774057ec168b3e1f0275b8450f0fe513efd8961db030faef860f7a59cbf6e10a4426c060a611117f580e1aa17b5094ad28190d0af82b8bb5ca807291c03aa7ff8bddf6afe9bcb1b66bb19ae07c1103479fdf3424f8400de60e2fed81cf72d209d5cdc17fe77568ebc3c702aa1a3a7b0add93d414b758caa9db86b2d1ff86a84fa85ee879a9257c46e6b918a95eb4421d699bb5813d590827b7ec8b28595f72fa8ff8354436b236f05eeda5824f65a0a9cb619f14932d10872dc93e2ee3e377310f036e889606de11b3cd70e0f636dfd68c4b5a75c0ba2af2c286948ca7fb011db2e75cefd207bcd06bc04369590f46cb33c3ad4bccea9d90008955eaad9056e5ff0cc71ff19f1756102de4c582d91cb14830623fc0a3b3886e3b49effb88bfb37edb77c0fbb539cb297e1c9d797aaaaf53fa3ff8a3cfb203940437449bcd84acb8ba337bf93068563f1ab39944dc38eedd880d1f7d55e328fb4de9919545edfa3412c4f8f2faed1fd9697160ede50d966d44935b571d8e202a7c257defda42c57a4cf3deeefa104f7fd31e9b7c7f73ce8c959b55380ffb12a9fbb4b0b373ca3413ce86d5f518180ebac081f1f791b0bec1e3ebb42813712701305ed3e9f7ce7086024587103c4f831098630b68030d8f94974d212f113a87b985ea8e975096a15b4ffa99464efbd70bc38c90d6bdd2698d17864456f19c5959602288c7656aed1b1c6bb6a036653133a9c4294aa6477335cc61c4a49be0c66a2bcc6a801e927f4dd3618424dcd5ba0fb3d37ecba8b4d6131ea54a22f74df5734db1dbcb63557d79dba4abdc29929a2747803661aa60b9b076197dd6ee2d0efc2e9984af1cfd10289cfcd4d003e6f803cf94fa14959445923a8706ca66c63b8d364c0c3431d05fe07e31a7075417fc2cb1d871ed4f98a243d4b58c064862a2afcd911d628a17932ce90acb89026ed029571144f3c1b4f74baa6bb8907d476be95b315c421019d3914551e95ef6339982270a1a2fd3306c3026733272ecbdbfc448f573dba9204899facca88f19ae82c08b8a9ca76e532b7cae94a1b47c0ec6c7fca20a353e7219cb7044b1225227b06aea587265786659b6ac95ad5c1780a77ae003c859b8586faf0f80ab2288e54e08ab3d4371dbb12167873fff74a45d8b655adf564efd1a72ce404a3f94a53182223801b7d17d7ca916a75a3f030aeb9911d3fd5b1cf70049af6968158290537441f86c778f480f194b74ae15123373fa05b42680cc8c521ddbf4a3d4f331934eec53452bb322b19a8f560227a8063cd5c963226d65a65715d847c324f0703835acb1567b43f5ac5468b51f20cd6b9053e64ab9c9ef2c585a30cc90af80358c53087a650d49a8466e61f9cea6894ab59ce3cfb33d73069d136ae9d21aab68d5d088163b8ccc23c810ff8ad561e58bf4d7485cd770f71c6e690f08501079f15cd4b4eea09ed54e7a64ccd0fcfbe817952c9e58ee0b86561384a690d337f3b8698615685ceb6b11a38f4f340d199bd4e0c46b2bc0b5259cd38bb7e9233720a6440e32ed361c96548cbc101cce6604ab1dc73a3c1517ded6f8a7cb7a08b909a1349593e6f7d95eff7e1198f109872d84935d90f5b5d8b8ecc8ff69ad4a65b4928243c1b967c9ccfabfb66e1c84271e488bacf7bd68a1bcc68cbc19e9b0e22b62773f43d04e95e72d97d41a0308ecdedd4ddff6fcf51af04c8b05639703d976f759b2a19174e5b880509325105c7e742d211c161b25ea5e670f03d01d0bf19b3b70c36466a15f45dc311a16aa4a86eb1f4f8bdd80c0ba0efd5edde7e490d3a415069b13b69cae98278192753898ac489a1e56d5948e3106f7c1bc30545a26986c616136e82e78b94b8922cb240f979588d8a286bf56f8503e80c834d53093802aca3e56661f66ae2e91f39ed577f0dad0c39a776ae2b6f4b9e3287ad0dcc26336895afa97371f81bae02d79b3985e1d5a276330fbf814f84f32058bab245a4978e6dcaae33d4c3ad5c0f7e126398a680e4e2839dc61ba66eab486edd0d1043bd829eceeb2fb94df6977796096241bc2d47f0f1b73e54f4571b2d42aa5ab673f3e99b44f6c37a07a5d4edc7d6b1fba349401405d2a4b7c9ecb7416ca94792c60927f595479ba1712998d48c10df30fc4361de487685de878e24275530405faa3bc230686424ca2b0057ce4b2e568c17ca21b232194e13bdb9d64194f5d157a12a4cde16b2db4e95b8963d9da59457964c04324b418a01fd0e4212945067253b433c5128da3bc931b0d894ec1d254de8379dc10c75b623a5d9fc3cebe69e42e914f52c2740d2a49f879376cedb95b99e1b3300ee3c5ee348db6902f41ed32b3b2e1be19a6d1c7b2fbb5b55be8742351865785478fbe0eb66512d17556fa26891ed24f3ead595b772ba94b423a6d74af7b4e24e353ae8868ef99cdc785f88659dd084e5a110bae3f913e4149690a155bc77e5509b7fd25f13234ce4e574f1bcaf86d0394585187b3335ade9affb5d0fc72d160e14413adfa36cc1a315368ad8576e8b5150c92b07a1be66b5a84d56b3a852e8c948159e82a0447fa9902a904315f60ad04b435ef3d51cb30b47ed1afbf077c224af7359e2aa38fb6aeea7be777bcbf348ad9a40da4dbef75ce7713643000a56a2a2c1096a11b8a969795471fff94ec90cf0246d256c33c82d0f60252387890ac5daa5399387522e27d8b737570efcf09fab78305fc11999ee38406407d7825300bf9646f97b83ee1875269ae73d550e93481c3703dcbed132fa887f8a7074c3d5a9fade065ecc5dcde748f95af4f5776a4e66ed9c2fb2227dbeaed405f2eed1d752694b44a19a11ba9794ff1cd64ccfa7370ec0933a81f230fd2a1e14df4f016821683b2f048b9e611e71089741d97bbc8a7a6c837dbcc4ff5e909a318613d71aaf5e1a3fc81f5853e4839264d80a002cc1202dd769b11f2b2b68e4d687dbd76144d164f19ca3d3f57233490ff98d016a639691299f0d65571c198a9e751566ce9a58a7eed2d795e8501688f336a0d417fa4442d48e203c15893907d3be4f19d5086a5f820b19128ef693deb910040c97fdcf9f72a7a807c8fb3dc920c3e774f7277cf845b5e6de6bee31b6bc06152f7cd68f238e8bf35ce3fa9e6b00368cecb760070ec463df6df19f76ad96995291392d095b829ba0b0190fe159ec769e05985a9f0f68855125d292e92fb33a5af65f59d4c3e9671e85ca939d02601499340c7fbb76bc9afaaa6150ffb99c798ca341f567e94d7eeb626b3e2810e5911d1ca637d2d12b351a70306230e7dcc7664ca3883928093395ba8d5828f1f76c8813d82b8bab5ec45efbc24f0316eeb47646d67acf2cb7258c12a38a0622101768be24b32c71a1c936c199600cd33cc14b266d45a053d1e55cef303c462dca123d601e775ba0aec41046285db4b9516e436fda814339d3c376c4d5f76f718ffd84ce27d09fd4d0359a1de1807115c72c0d8790b63e4b57707827e743f899cc39dd4cc3674f6ab0be22ad6780e895087af802424ce804b74ccf7cf69a68031947856093a400feca9e58792cc781a38feb916441cdd6f28de8eb5886734449f1a73bbdfb0f4afd78769a05a3dcb2bde7ee682221a181a145b56a3f1956f3daefe95e997c0193d364d765d76f3912608b03fac064708e7d6932ba9521ce1d325e8e6c978943623cfa314a62d1551727f3bcb7c37cb343f383015aff223126fce7f6f43cc51d3c86a2f4c63c9cc94770bc993dbffcd248b00d71c9d1ad389776f6c3740d9227994d19c257c903fe19d73ff9dafa4756131f732495b1254ce55d15746a6e92daeefcb90a8d9cb97c04c8187f3e26fec729be5e9a3d222cd696fbce6a55f429afd411fb3dc62c1fbb9ecfb099d5aa85adf2f92a432e89266e32ff8c45b512c92ebf296afc900bc9455e5aa2ca10197e73157c50aff86a949c2fc4c977066f13d026af829779902891b9f569909bd84b9ef7a48c31195b09b913d8108ed84d8c2c9120dccef16dc039483c7f8dd78b6fba1ffe17871fbef87d55c5fbed9952849c8509c3d3860922a46f7c4f0231976d3d05059d125a2ae3218c0ae623c802afc888d6f275a5d6c25bb641729e5880c6903d47775377035c7e1d1369b1f2d260190324c305ef7b21d7b33864c2aadc0e6c2f3050dae4fcb6cb9f7bf128984638068a5fc004b15ab390ccada01fb70d9729515c9409326ba49279a106e826d2ba299504740299fa0a2f893daef5fb9a13405a28db7eddc4888b322f25812d0c48eaa9af498007cd97fc7f450bf5e705e5599021719c45bbe4ee5f72d784295776d23eacdafd9969ef9ff570218007d59fcda9e2f0f218a64c64681897519a48c678daa982ebbd437382a23baa34ec8da524edc9f410b5181155d29cef89fe54ba36f411ebcaf1eeb63cfc03e084f39297f7f252e568a985e66b255c3a8dd41fc4a51172702bc5c04a3779656ee0bb98daaf5e2a3f7a64744dfce6e312eda9ee683bb947ba8ea76c81fa90dccfd8b2e50fc3679c7cb684779a838dde0319fe652773620e15541558000ed8d67ded682b89ccc54627bd77e45ea7809985a32ff884e492322b1cadf736dcb7eee39f49b0eb23fd93caefbd5f2cd175921519dd3d02f7d0506658cfdeb8fcc482ab5ee63996815721c0ddd34c7789c3742bde8487242592e55198f982e8d7753e3fbcbc0a3e4d886cb3f84840b148f0ac5461948b5b16506d774dc9685905507e0b3939c724e0f7c12edf8ab07c8793970953abae3a129f6541f7ae138c0eccdeb844fde4fcf43beb7bf429303bde12e0c525285423c2e6493c2715f8f44c70bca16066e828ffbb3825c6922461a4f5060256a931baafbb95d04cafad2456b2a4612c03453b5bfc33d6d75421a084b0736b489cbb513185e7a8d8c9848ea6293272085170a691756ae996fdac5af5ebb54aab7155a9e0eb9b206bf233a5c33ad35e75e02eed58cd49f895ed290360fd483adfc5950736434cd176c82f0c266df381052da481ea5a6d6e54a12c3c6e7ba8b65617fe0bba23692679a9db2458393f7426a88606feb321b543c81a6866dd6347ced70529e5126ca9f515cc80d13303b26adf47eeee5e1387e3a09819f298e4697a912ee43f86e3d6699a779419e1ecc642306eac31b1bf30c4f919b38a34b88619b4efcd31f75b3657b660f0aaac472a3d4a7eb17154916a680023d7a6476c37fcd0dc3754ea3f444fe81d08fc18cf58bc9bdcb125cd167f3d742af8df375bf9c47358c520e60c7aa2be005f96add1cc50931d0db771daf9c5b3a3998d8b2445e0faf9f91e614f63f086cf56f2e1fb0f99cec439bee93b54814d223c39c931a6d2f64445c5f2747aca00bea1a93bb7ace8bd56c794a9d43a00bf3b438c6820872af3bc3d8ff028399f8a62a2123173fedddd3929e11a21f4c4783351cdee6d815951b632f510b72ad1a26fead669ccafe9ad0fe31ce0a12f3d06bee9a6c2750fdebee6d89daabdb910d71aee6e3b2e2a8cab3f95b063ce43daf9427d7f9ad39d3b99b290d244a87edd97182f322c24e937664c94443a25dd4ebe528fe0cdf5a3e050adfe4b6513f68870cc2fdab32 +MD = 197490c5b6aa142807cd360e1a61c0158ed78272e3fd4ede88f5df21 + +Len = 98440 +Msg = e146ac27629f4f770349ea1a01dcc7001875a0cbf759b38ff1dc18d6f58253e8c063264951d4a9829d439c248563fb0b058ad3e0ae5755e1569728e50e69049a54a17d128a6b1c7ea731b4392dbef3085ba338a0a3d9a4685ea97481bfc98e0405c8598af5abd2f288d9dd5ee134d87f81897613be2acbab71d9a3b2f0e818ab3c9f64ba7bdef366a803bd9d890ed2f8e1043641e891f033f8f05e808910cb195fef43a9024aa6626f79fcfd0d9508fce2db203307553c8659b74cf47287cfd5d880a15f7339146f45024387550ea312ecd8dbf004bfd62efef3161593954b670d1a24e5b7f1651492653a4149c4cac367c11080c817e6b34d6f63ecd484675868857442b4bbc0dabe6b8835d2fea696bb5f66ec3aa5969bb0f2dc7f1e9a4d2e4f883a7e54de4d4831dcd56bd6035f13517a863b41b00c708e4329d8572122742ced1ea27ea436e65380cbe93e1c1cc28fda1775c78270b94f2bf1ff695f11af667ac7b51a53a03c8d1e10b9f391052cde46c2a3b361ebff5a72dcfa3a9d3f6965f8debf0f34b5d345804ce3dcaa44d8a7872fcbed96a5c919e094d3b422d729912e0ac9478f9d32e46c286de0affe4e506505f85c68c59ff33cbe92be38ff7852e6f4d9a9ac80e1d3ab4b61e9e75e1743a8ed2fea2173095050053d3f25dfdd10e644fa1dd2856979055fc6de9b89bae6188e7a7e08d99098e20ede2132a1e033f7a1318b4ad4513d4109a5a613aabfa37d91e000641cbb34bb847c4ba76a0923e1b388db5d96218929f3052b97e7afe19e9d6a597e67138aa30d20a5cc65e1486c2306f550f362c483c5ee546f681107445b1e6f9ee01f036251d117e8b7ef0b6099b3c26e129b5518266909e2566d7f3772062b0baf6707bffa9789458bbbd284bc9828fe1c54a6b0bf7c3239d94cb03f8b2a750ffd73ff83ad7ae32907ce06a135bc104738151e133832b8bd183402244e9036f0f2cc517614830ddd53af107fab2863928f672508389081b33cb0ddad624254f7b5f96760d7b9efa998e656e6c7e2072749d1235867a076666c45a9a47048b96c6f82a8099e2572d4fefc429e31f4e64e8ddc80cb6f697f1dd17dcecf1fa84b9747f07b3910cd7ca8ac783b6e9065e74f830ea529f5f3851f93dfb4f6186cf4bf66c94ab7d5bbf66bcbe2a8208d3ef17154f2f83aa4476eb5d9f3c4e3039c9b2ef3987c4c96f7c96682c3f37acf86eefe280de2c6216c2427cb42645d873e282a17e279c0fb87dbe1faa28345ff45c53c26e9cc94176a8dbd9353fd2b4c5c82fcfa31a8dbab7516245a07c048c4845e74770d1c6d2c4a93bf56aef816fbfd93ecc30c73644fc96176cb7a124dc74aa1ed42013c1908131d743fdcbbe63c2a42419bfc41258e89a3217584e11aaf9f76f1b04e926054cd12257364b063b6ea7745a9887be411bfc66b7fac9579258bc5c6e97b880ab8805c1a1dce3e5412451a3e1638876a7f72b19d127b962fd11776b5141084dedb35e29b63a3cc83f74314750994ce7f81ab4cfe55784d075a4a71065a95f0a566f48cf06d6ac4b60eed4b32ab25b8eabf717fd8712b20c8692d9e01e293332700c3426064ab8db6ff4aa8bd2372ae75e0cc32718d1c7839a5c6e5eed592b52c52acec3470ef8f4b7162135d9a0316e68dc44d13d2d4be24b71f2f145a18de7c04b672b5b8bc323c0c3e755b386159066d62b80468da584f464062bc9aaf16debde9bc28659dde5379e5b4ff2413e09d29ad5c8c76b6b082fb2f682ebcdec51c254eb3d89e17fb56605fba9187a1127368ae1ff524f12c877ef627b2e92e53fce5ec3d0c8cb4f10e68b56d598894564fd36bea859c123625769d899049252847a5cc430b57fb28433aeeb79f507316fb11eea68603a135238b2a750f034dacc40cf4ae1e267409bd7e127faa06c6b93dcb3f393e8426914a66a7d278402e483dc36e648d21a8fa43db2aadc3d316a7dea9648df6442ab162af1b8a13274e627872424fa0721e649ff93d2832dfe947a6526788f56e35ff330d8f8428e137643fc076569f3e5eb0978153da3f51ca035c6f4f148528cde284290aa8ff9571b458551460d1b0f144f41b74aa32523e42caa72518ec9a7cc21eab94dee06c82bc8bda23577fed5e8a7d6ea9805209cf6db6a3f07b73eec908ca3a350e128ef4e2a2f7ac22f1202de8fc23f944e89f04eae90bb82762493c1a4e7ef620de224f906353b6a96f6fe7c837e16dde3c3b65222b86860301d55e617221defc8c50192d989749d441021391f8510c3796067b7d43bc61f797bab64500c8f68b6442dc21076a6d8bae0239ab051bde353e28cd64fb5651eb6e20cd2fbe1d45b3ad1d1fd379752bb6ff97e27e26e6ebc17bc8e43d19fc5ec7cc2e298576c8d35db10c6badb5608a3d7de89572255a3cc4970e467166559173fa0c54b0ee71a872b635471685d293086d1edaefc920d824d8237d69aa0af1d840e3d619efbfcdd805c03b76af734dff1a60395dd9e0c7cb872f118cadc286dce5db3527405a4979e6d6cf36fcecc00bcbd73b241e41129feb59884136265968331bfb41abeb243ba09f8cbc34e5f412c7ab67ac60ecc08a4eca6cf20fde716570ccafd1f61a66087d42f9711f05f2fd5703455d6689d973f6aa4406fe91d7b9e515da3eea8e18c7c3e79fbd84f5c1b5c3075ea0fabf66412c2099e5cce7914eda1f03f04ff04260bbb804092d5d692153e139dbe2366dde3854f2f7418aa90a9711b24fede7eabaaddab2bbe0e3f3284fb65f78e797f931626fd7a3241f26d7631470c38b1c1abfe178313d663266b4feb156ddd18a0f22f299d0543f51119c8850c3b4f336d9569eb807f587f0caaca9f7a87468b6b9992ff9666f58c571414cec368aebde30672ec2be4d0ac627f798b3dca374c4fe7e63b8205d38264eadf8114ead3cbc25dbd7bfdeabb95b867f130b7bd4bc5be7b9d4fd8786a71ab1cad3e69585ae77c398e2d7ed795a58ee2b62270c6e09247a33caf121526c49a17f2794927b08b80f879731751eb66468e3cc3017d923c7c1d28fbc792a515d26b43a42cdf5142613903df6fd029528fb8f9a4e257cd2ebc47f6a8514741cfb48515619cf5c986ad69c1d4d0e8dbf4baf1815a8bdc1de388a23a2747c9996cd103fc1411f195d2b6091805f2f27fb768c648267670f0e581ba480b33802877b8564c3e145922b12ba59ac54e83812519b5c2cb2abcf2bf07fec4c67d016b7adafa9a621ca31c9c7ebdaea53c128cd83e3e85ab21267fdabbee14ebbcc3ced0a97f6b02a355d01f1fbfe8184435ff2b56cf1538f23404c2ee16dcdd5b5def33a44342b240e7d9938f3abbb10f546498e3f5d607067c2e024f07713dd13638fe6be495d37defb5a46dacbde1f5f439cb76316c97d64558133f1e666fc6c338ab60e1f8f892b3e0cc0b84533d80abfb1d7e002d6e0a462f603eea40f594ab6ab513b9d084580ae7751950102647d235197bf0bcfbeaf4f083dee98551e3454bc604daa129162b3629f7ae793eb40d5449f0718fb420b867f89faaa8270b375838a4d30f3955bb597526edf2d94dc3f5296c010a391426d238e19c2dd794e81ca784216f47bf21cdc137ad11987d8c74325f3dd0fd6dc6ebbf553c8ad618de057d134445d68b050fa8aa5a5a0edbcd7def3a76687375ff01165b0a43b50f8faf23e2ca176861bb9b95ef74308ee11d6eca9e49353dc555beb87393fcf6d18376567301786fdbdc0e037789399b15e2c35eeb24cbaee45161203f57fb0e0740077f34b8dd7f51ecb39bf317e9d5f2b40816b1a790595b88b4e80ed4d28d294bbef8b82ecaf95c4448a9b29ea5a1f017c98c723027df8352166a627927d6b01d296d6df1a570539919c7668c1191a664742abd6cf67404440241fad34f8d242ab347d6900176e051c37f6f7e92277e50946bf39c90e946d504e90871de130dfb09127288636f8ae4b22c3dd4cbd5f032b6daa57d6b91d39b9ada4bb3380ac6147747d2595fecabe88278622d032fa4a137f1535dfaf032fe4090153601c6f4fdaa6266713b50dbd3a0ce7cf5fc86f412a44a7ddcd396dd8372a4f568affa031d0f0cbf6eaa4e831c89a8debe0c9e770d8830956869f83ba1bd737cd9b6f6890911814db001384a49c99217e3a7b89608606e2a8f4296f5ff9da60bf7ab5eff285e6a81d3f4a089d1dd14a9157277e989a93dbdcfe1f564f37f974340f195ce2142430c48d909da5b30ab12a1e14eda07ef39cf88bc863103ffd183542e2d7e5a69853d9d42f6b43c60bfe54778cff0198eecc07856dbb2c77adf6c8fb5a8a85a30bba63fb6d99ffbe9dd8144ad5dc42524b130ed356892b49d3b6f822c79b4973460d6aea9350610488e7747f38abeb13d41b175dcbf3931c3500ca9f7232b97e0ef3f789e8b7f2fe94d47bfffd9585424f89290b1421ee579d7a485aa3785e2c2e1410c0b6f73915884731b06cc1974985084dc5783cc364d1cf793ca294bfe66c19c0774337beb12ee79f7bcd57a98f3e3e8a73406c9baa99a5652bb6af651292aa0c96d9a00a3b4c5dcc486781437c41d3e8fdb5d8fd91bfa5151028f1d61a666efe05be5aa419ab50c1008365ee7858706f4b1ca97181097690d440819c64b10e9dac3a8c14b513698489692b31eb49bd2845c0067fe241c0de5d46883f5a3a31f173975ee3764c501fcd61fc953ddd611ad4e818b01c2d2d0895822d4562cb8003431bf998c31dac99b3b300a1d6dc054ddedb078b97966315633c9938e62aa3da021085bb064f26fb22a65edd1f0e50ca4ce2fa99bc430a0daebbf39f4d20417e9abc29d5a6aa654c04833fd17e3beb9807451960f1fecbf960486403ff7502f8f1680e6d0bf612944092ca065c2a7dbff64c8d6a9f8d4ee0602b14eb64f1904ff15b5c0b9dfbd4dcbe1b280322a4af48003f7e3f2fb93aca96ac2adfe45c908b81df3a37c481542b666680503671293a0f651365074a37bfea13cf67e77dadb5883ad07ae84f398920bbfb760259929d0a0775669108efc844a72a0cd51d8dd4f0b5475b712e2cfed461c1fcec24927ad86dccca34bb07ec8cb164551604d8f0a098c763c7e6d5936aa1f96a5e99d3d863df3f17572a2a34aa79a4cb12fa3712802b7718523fdb4fcac3cb49bf81fabf92a5f6d7641efea6864713f431c7514078b680047a01e73bdc0f601f77a4b2374d061a91c25f2b4d0963d95bdc32d08470800aafa8f3a05d89cce077eecaa1497c4bd3ced9b55a2e19141d85790559e650d23ca042deafbfb74473d68bbb6ffc08bd481511e833539fa407fc7206976d00f43e5fb28abb694fbd3fc6b83ec559d7a1a2eed2bf5dc38459c0472dfe2f21682e39745ebf6d613a806fcedd1d4b66d24208e184038186ae7c70ee14b4cc0a71c85568b0456db15ed52977601ea82de1e7a3778f7c46a507543e798df214310109b9c10ee36261a5039547aa0a84b6edd79b375bf25527762b5371027eaf9d013a8e0ae263f477f654ddc823a88907dc5b17aa502d5514e247d75eda2146565aa3fbc8938bccfd380e268233c25d2a98bb3f56d7f4ef7435f1f1c67da38165f28c2985892492fa557a9bfc431ea827073f3cc55611cb505671c93353cc07d1b33d3fc82cf5ee7734e061beb9861304132f367f374a90af2d0f882cc46481a284fd661ae4c8867bbd88a350ffbf45cba3d2540ae068e69aa213563a383296e14c16c6021963050ed8b9873b7b94e7849e71bff0bb3377189dc45ae317ffef95f5ce8608338f11386dbd350697cca135ee549fb92e72e831066cbdb2c99333c6666ecfb49a14520264dad639ba2e1ae87ac31beba3efe4edc551a62cb6b60b7c873dc88fb6ba7273a559925c4b84fba42a065b1081701155c2bb3edb46301fc040859a20f0491694198290f8b494eb72e66488af30be1770e6f4ad46e2c81699798c6cefae88e86ba69cf9945c2793599627ca5118a19f4717431af5f04899101a9c67855940900335f1f4b9ab049b612295487da1e051e03eefad71da764f2c0bfbb2695a39b661afc7aaee09f5aa9272f72bbb3345d44544419041061ae1f534f17723173b018ffa6743bbdec068f56f949a933696d17e0f81e8eddefef6737ec8db3cfa0e19940019e6a8922e7f91ffb6be8e129cef9189f7e0fec8e937afcfc6083b6a79a778a724bb3e8d07946e0ba3bf332f1fd78899ea9dfb2ea24bb0113526a8cf465343d9d2eb04381352957ca4c40bf5e7306a26a44a6c77f2dc7e2a5b5c0c903bc4fe7d699e83f9195e0d3801f59dcdbba3401a6b0dd90ba18f220481d3ee1721a3b17b32fb4139e363de29027b711d64d8115c880ecb52770ea385eeb3d6cbbf9762bb752bc86137071136ef7e0f4eab76e5d44376cab43c010997ec234c14df491b247a56a0d7def2ad460f2500c95626c56ae36d5c99b70f5d21c14bd95a4760e3a088a24f05a0cdba43ab99cbf52d8fb706b21a0b69b1e1a60ab6540405c085c317e83a5f51444041140b02f839fa5ac690f6a65e8cf21fec3c1366567d1260c16fe344582594f248a177870fff832ef7f0f839dd6a4270379e20a8562b0598e891bfe9c0e8568cdad2375099ae91b4540e00f9116b697c901825438c7561d63d65c450210253b5fc8f92861eadec93e4d2551181f82eecfe92695f80c4edc1cad33ca202db5316b8c0d25124665c74af2541a7b6775a688af43522bb81720296c46d06ecdb1e57154d3dd83540a9ffbeed0ae43652b5973b26d1b7c412b840a91ea0a5666a7b1f1c1e1c44d8a39adb1814f9ef8bef07221911854423e187240ccb1ea6f8f03316d31bb6bc96f7f9b1c58056f13cb818b02c9b99f26154a756c6b12c322ad50ee5442d5569f5a58c28ce1b6911d213b0ea7dad54e805d5df7ddfba15718581d434773a3f737f131ce93acb7978d46a96781330ff4f97cbf94160cd1f8a905c4daa722bbd01bcaa709b117ad04dca249301f60ae24e9f9ebb4c50d194a6d3cf41f03fe9173b33d252e75c0fb4b93da96f2d2f25450ea6b5ee43b7b0baecd74077aee65b954a6cf4887522726ee4b461f2a6c56770b6337a5ad19d51da852318b88b6d687f56ef76dbec6b8b46f5b7b4e311c0baaa6fcf54c69c0b9c3b9840c0cc2fdefa1c8645c213f53f428314ce0a0c1929053d6101abfb4c0879274eb49e7b4340f8b503f53ef837a77f6f6b82cb336407306fb351e8c28a9dd0e4cf091c8d6f9c4992f58754515baa2a501f5a5f219a6222898e4771e1fed189bb42c6a1c95af9d7fb83836be808512b6f5bdf2e9e6442c5d2196caf204fac8cf4cf7494f8ad5f8938d572ea83e7a36a144597a1726ab000947d470a492536c1d7a09a5fe20fd7479014dc3beb9fa8cf87050c1e6453b3bb15e161eb222a7811acdac0694f2967f94d6847c5e8d968430fc4c60e3dc754de9f6e40b875047962baa86f1a07a31a87b5f83df0423decacf5aa4cdac5709a52784b6edb085b419e4a302ddad124f5da11ed4524c0723bf482de25e8c4f38dfde8a273baa3d8d9aba49a8511775402d8a86ee8c92b215d01fb89dca202fb35c83998d5bf10224873100ffc27bfdc486ac4a4ac474bf15bbdabd2f66f462e9b9bb1571e5016e296dcd6b71c847264cf79abb71c07e88b3c0ed9e2fdb65a34c65f9a07d5d77cc0ccd03db96c915893a0eba6cebd6fca9608decce079e104b6befa3acf83bb0b63f1368e3d74b43812c2aafd1119e8b8bbc714cdf5f0570d5c8c56dad8af648b740df5126dbd56db883d9cf8a9b7db7ca282982449ec803dcd375ac14ae13ac49a29f70e6fcee00a9e1aabdfbe1faedcf241521903f4c45bb2c7ed394ca2a57d7e4b23cd6b2fb88bfc60bef977dacba1540a2af44c918b31b245f98806780d80c87e61968a6948264917bc8ffd6f98936fe708fc4b493d8576b865f7a1eeda931fc799b0f303f7a52e478fe978667f79ecdfd47a29a74220a52819ce4589747f2b30b364d0852cce52f91e4f0f48e61c72fa76b60d3002cae89dfc5519d3430b95c098fa4678516b5e355109ea9b3745aa41d6f8206ee64ae720f8d44653b001057f2eba7f63cd42f901105e32ead9ba3bbbdc8889e8546a49b8f492f391212722765eeba3ce081ccc6743980fba3444cf7171ad7126b5f0b76ed9d84916ff4795ac11d7d9416ac07e6ed2fda895b0aa0b697bb100b172a5d8498dee7069b32705292dc44a455bf8b81ea5d62602b5b699ade3da5d10f1515551f91c8f12a3901bf69bfb1e61438a2280a56ab08aab2e21459271b1cb9cbcd58e05aacf9a39497f1a44c47c1e8a3f639bb8036fb3fadb4a376fbd236bdaad01099adf5788dc1cd89d0f668c0398df2478c7e78b080a85bd8d6108dc7712ee81c99e045064f3cfcf88e32b7898d5320c1dbb5f2b0e44f3224f52980477ae45fcd6fb61e1b7e82b0be2aa596565aaffc4947ab3774f0eef208329b7c2f3157b1a39973e330722f835b34b397df37d10f3e5ee2b9852d13f5f33ceab3e74af5884f95ce36ddf09fef404ae13e8c9b72b4216fd0fb69ff6ac886628bca181e4a3e21e3097b8c40504f1dcbb2fce6fc119593191a6f8bfe3fe4325213413a31c26dbb1fda43c407ed4d3435ad4566e01a2df3d9139873902fd3777a059bb61bfa718b8aa5020dadc344341734ca84de18d7d43e5108b95ba710d648e75c24335ef413e1fe48d1b87ede9dfeedded94c8a4da4a75732b5c72216cf4d1ce4fd1e6c6fd4844a7aa89e8c76c24b3d04dcc1ead9f5a29aa8f1594d6fd3052ac8b943bf3f4e001e3a0ae65897519aa6def7c4a71737be9fce0488758681ff9599e139a40cf0d3ede961267fdabc4bcfbfc2cb6b8ffb69db3467db36f54c9af1cafd66c7336d8e3e2b53b57e9b72fcfc49b64c94aea122d15e83d80e369375a3ce6661a55d047d83524b39b164062cc0ef5adebeedd98816bef0f567b5070e3026c4a0aae4665051f0c029d4cef639c22328e846e804f81fc827c9d00b17c33b6690aa6463f3752ea95aec3526c3c25487990fc907a3f1612ca0bbd3b336431a0042f55e464c7a8dce64177f25ef551c7f239bc1d747026f3ef441ef17f2fc40766407e525d1ced3f284320f26d9407e9c6142adc15eb9ae818af28ed3de5d635b7c58b56d13e0b59823a251b42232ff41da6af9706b75b396dd544f6148f4e701e47e3b96936e8731db0f03585a9b0311e79b414eedc502e173dd8d3ac341301c34dee42cc0b6ed4212ce808de2f74e8f2149f1c7663600f3e6f4e4daedc0f30cf5f14bba2c583c6b537755bf3bc6261c0ffd9774653752309f40c2cc28f29446a05bdea956d118f0158fff86f5862e3b1c3cbed05b476b3a1537c388f564987bbc851994b09ff782e17eea5f80b5cb7ede7dc465b8e4a072e140438be38573feb2f388e6ca435c964fcab2b36de38269bf37349f2eadb67d7c00ef6f63e3cb521c3da92a1439bcaca909c52d3d8de76e46ffac06fcf101bc4de0138e06fde31860aa06c92f019c3895a2ae1740237efefe4d8717d46d16a1ef645c724d326fa428ef0e6e6b297fbc8e2bda2c36229dbe5da7524c256069e0d90426b6972fc5a7cd733c64592fdbbb0b1be5b68039d80edd739a3e60797fdb83560eb575549975d6bd2d55996334b694e93d50bea7c2830658cb592616dd0486c07119783f3fa0cd433dbc7c821f31a41a6d85321ac19d50bd6216e6d6e5ee4be9fa3d104e4cbb19ac0a03a30b0fbec135e2ce8af179b05527fb0213283f1b5b2906aace102527643e0eb58d5c6aa064b2298739ca3f8e8c0ef2a54b895cfe3d0422ed12137d78159fa85c9bf4c4990715ce59cf03a76a5df8e57ae088a4195a01db7e8cc6aa1fa64783736f62b20b40e73db0ab4c35f6537c5fed8294c8ff3ab8acc98eb83f90aeac1c74783497798a9cf4266f026f94f4efae97923c1012678ef3789846927d9753dfda36d909664cad8e257aa4b8d8cae96de3affd3df568fb5be64a206738e8c54a3f3bce7c441f9f68386ec1a6243df02a6c3c46970aa79452ad14a412451b86e7fde78354b57bf91ec9abd7bc29d67a509bb7a6afd4bbd0542778602844c7ff35b0daa6471cda311e63c2656f3c2d0e6ceca2ac0ce61e35fd0ff5d31d9a46c4bfd275a5b7fcb2ede39142d933ed9a22fbf99db522b1374ba9a10d8b76c8404de2dd58e02bc7be660adc9dd1aeb0a63e7a2d095085c89f77e6a53fd7a8512d115b5bf5041720355ff09043bd3427f9d75401760caa8ecf4120670d6636c765a565c8ca700e78b0324176c51a68b5dd743611445805964f3e0360e6b5a68d9270ae9e59c27653c77359daa267c0dcf9ab8cc724b12b5187d4fc4d5c248c263c19a2571359e323d399c6465c23b11fb6d3c4bd77b68053119c7766fe513c33baf6cd8d97c4d96b7d1bf34462ecddf09d837a4ecdb6b90d650b01681dca5b08a79eac9c4791ddbd2c808d5f57118bf226311a0587601a030a9736ab6ade4d477a87bc2db33f447b5a4de0e199306f96e973307c351137b67ac763bb362ba762bc38689c6b2bc2489f0a8a85a9d7ed414fb03a1d7768a6aa2e1225023030eddcd5275e82cfe5bb87531d06c629667993c18ea3639ec4cb509d1df73ac96c75286ddafa4b520bb4ca2f1bd1fd686ab911074518d94bb43a4c503166af625cf1d7eed9c880a1fc22738b7d78c61753101b5999e6f8eec557ffeff2dfeaab70d86dc09a45bd3035a935e0c867aa96ce134560f3ba4cf856c8ddb4e8ef7705569d5c9ba2fe4b7d46ad63c7732b05672a371195c8ef400916f1785779f1def06cb516c87a5ec5f9bd939fb8043f711905fff260a0127c91546652402ca38d0d21b43eef86e3b73609104c3af211782cdfd27a6a1fa04d11bd9bfdf78760fbac141f37695f2999a29797fbb8d34d850316531c1a7e354c1aa106dde600a6b56dc26a92de79ace7c0079f20ca1e50223c480659ea623df40cbd3b64a42f0144c2ab0ad3a75cca1c2ec79a4dd739a5ca58f340a6625226df7850ae44ba68fd243b3c846c6c7f1dc14f661de578cbcaf7c996a6a40ad48c68ee09d3d08154f6de48057bef9667245192419e8a273b4c350ea0bcb55c5fdb1ace4740aaa1798acd698435bfad9b5a57a808a0ae5b0e960ca8bfd76cdf5a9f8f99a77925832d258c1047666f2a824c3df129a8c49ccc24e91832ab3cfc5b4611f098f1f3bf065394fcad626085c2669eee132b5f54ea9544eda78ca83be86b5c339a2f77bd8ba1726f44de5657c225d52f53bce11be053ca999d102126787bb903399633f7237baee89c2e930908268b1569b1fc7a53dcc49c71ca4a448203d2bfe5dabaf4745ea50921c7c9221ad52b40d3cf03d8abbcdd76c41f860eab7013fa2d517f4de4d6ef31645e4b3b60be3022004899bf5e606fa9127466fd4b6d17228e8ef36bfb50f811d2469bad704e3449add310a6e26415b3cb8d6f98e83736c97807a9c73e6959fb0a155d00c00192180ae32b27ee344a278dbef25a188afd6f784014f8149c8f7d5a4ee1cde674e42dc5fd2baac85d8764a78db1b942b4f5851dbcc7771456f3196157ec7d4a14a4eb5d75a4a8174c57fbc78e004efd61999ac6f233acc4154f5fbdc4bf87716d5ee1400128c8419d366d5c147083bf0d74210274ec319a73de90be29ed84d2fb7ca00c141a63ddacad39d3c584effe14ffa85eb9438e0def3b8ce0dbe8fe052b789810230c03420716d1dd15affc3104a6a14a33fc2aa4e3e084c46f544b8e89fd39fab2803f25491dd5c69974210e78f3ac4379588fd5fe5828e76891f5b5a355263a56f96fedcf2ca62ea55406ccde8119e90dfb36479b2cd9b83c349530e42abd4d64da2e0225cdd383edd20622a1b97a894646a64046b917b57ebea286e8d89fb270c4f218c97bee54b770b7767f175ec2c6ed68768d97837d8492960e1e092de80f3c448846a1471fb6a2935ea32537241431e540dc428d6f0242f85ce016e87ca492add719f88e53400a1231ca6d840b92c6c535cf4496086c6241e9fb9c6feeb57a868bbfcc148e07f9cc96514ad607e71e50dbb3084de81752fb4bbd04249cd656772c94a68a2e63041b02e467ada765ab30993418157cb7a78ce8a0e897256ba8f82055024fc2e5bb95fdd02e6b48b2ffecf4df0e7d34b1d28f4743b448170a04721d6d89e5da0482b5edc1199f8a437ede84f035e5ae9a567afe11e1a7c025db7d6a4a87dcd243ec036913b3caea8bba9db034290f58d5c5c853980b46df43a0829d88a6a54a287a06e664777dc81035a30d07722ab1f883000e429b95b2e7f62a2d8430dfb0269f28ec1fff18c165726701d68bf8587720aa84ae1d24f9774ecca0d9e0dc92c2ddf1f0c2953c54fff382254de0d89ad621304d470a7501961cf28df6213c7081a8ea8ae8e44901442b6cedca1b4c17a9f739ce89ddf669b8d3245b756c6fb7f7a27b10ff66df44d6ac9fd1d795d35d47351f8f031239906413ea7fb44cf6f7793d4c2972975f9e2bd98357f2eb0eca524d5a152f51af240c51bd815f2d52bd9afbb64aeee06a7bb844c016a8754eed3fb291e78ae6d783261f0606b2881358e14041ebc0ec507c1060ce6464ef243474072f7c827c334c45de5c567b07b977d0ad87929525c20da8d016e7b4931f4ea3bdbb5ac27c52cdf0024916f516a598ddb5ffc5d7f73faef5f52207141ba07a33489df8b751b6a6993d24bedd2f681a8cdc02fc160b19ee9c5288490fd34875972a7fdccda6cf64c5e1a7c48fcc819b52a249abbbcbf13ae07ab2341474879f63e5b97d91e60d66ea922abe89788289b38b2c6b45a4461286d0284eae59ee761e0cd361909a014b9bc1260356bdeb74440933a1503e9913d3f5630f5a0ddd882a02761f462d4b813de1324973f70cd9789ee7e447f56aad7c4ceadc840ad5541c58ea1d2f3a4c866594d7d76dce9727c5dec1bab9632b4dd459385cd8db86586992c7d1b82b64e9973e7f63a0befaedb02b598b01026b8370acc3f6a4fa3103962297d37d8b551947509144b922a8a9cc1707dbdb4d9bccd5ba264094d195e4269ad298fbd47da3fa7dd611139440da8e24553394bf4cb87803d7b1150c05889f6df0a89f914f082508864f5cae240e5ad5da08c9d1eea4dc0c40cea204005f751e7a78e53c59b45b935a55d0baf293c6ae0ef1d720023076560a0fb85426e72c1ee88079402e3702b0aadb2c650d29560f6c55692417d9db538beae476e99e38f1c365a8472d1ebec2f035dc17043d9d8c5ac9ec58a01f7f975ee6a2d6b9033049838f1ebbe6c9e44cd2fc4c5b583ee1a782b5dd283b5fd783eb89800e25b48668b1632918ebd717d0cba5199c799be6e35cbfc82d3a3987cbca59e887a000cfd1c59873e88ca4dde132b6b074f90301c2412e19d23d3ae4b163ce58ddc896613748857b9579d18ae0b0a79d5f56d2b6b6f8a75eb1a4b282e7505d5d7affd3deeba2b09cba13ebc361be0e5cc603a99a53bbb20336115ef6d0189d62d9c657bd717cb073c0fb31fbe6c3316b439ff6110b32c4b3f9f39ea50e14f51594bc80716b3efb8d448062b8d268e745527c26bf4fc655cd57dbd001f3ee0ac21632ec9f3b51f845af53fc6ed70766776d38d9f9b41eebdbea3ab1b213fc2514e8da0a9b645e3d398bd64da24727557e1e467e54ca850d4c2b80a229f0d7fa6a870248fa68dc40d54497f4e7b5512ac5c0359254e59120ba865e3fce1cf9f15f6b5c5630cb2499a5740970a3a41d6ceb0d86947ea7dbcc93a513d932faea8050203880d30dffbe3694bb5f6a95d4726a50aa133683cd6753e2420ced1d224de920377755a3a604e5112e0fa10d2ef1a024209d110bde9797d8895950e629a076f5c9984d2eb0244d93c20feb6c756139127a80a29297c3cbf23a2d0308793ea61b7f620df1b692ec7727deae465027a186286c4fda71826cb9d52677d6896ee2fbc9732cbf21b72e45b00a6e2d47db5609aabe8d260449f6b9faa433e2e2b7ba31283a3dc97a27af8a0b01af83b4f2e3178205ff17c880f65d1b44aba00daf98362c2595b3386accbe8962f6ec2fe4b52a4ec0fa2226cde82da77653b072cd098535d3e90ed4d7224dcb8cb8b9314768dc517e22d7a79748a63fb7d076aa869aa8e5b39c2ee8133cd2320d798d31916a883aabfd9ad363a451349786752d72a81bac4313a5da9568c66d63cddad93926c88ac8defe32c967b936840a3e73f7ce480a11041634e452a4de0e0a2470c54a1792536b743e1f1f38a60bb03506ac89c88f9bd1d28f7676f7f48ad2fc90bc30f011da179f6dfb476a13ad3cfb6e0747279d42016d32c2422a5168acb5c19477dc69db67d24ae45cc80fd6f4e4027ea2bfc3a21768d76e40d66505ec028bd48b570ac5d0af3d40ebdceb176c917c99092b834a8837d5b0ff66b001354547f2e7da8537e6a8edb7511335ed288624ed06e56c99d87cc650da65c2d90d008e7629e169901e31b4be48f590d6ad34a3c11867d02e8c8a11c47e5e0e0bd7c6e7e4ae06186cebec3aac200e5c626f2f71dbaa3d6e5718f2507237a9f20829fabcb4f0a3122ce43ad82772c828fee2c9078358d087d21237fae0a2f42f5c782ea56d9e63076e7b9025a6bdbd672aacb3ed6e90cbccfdeced89965ca7167746e51a8513a0489026ae9bb06d58976421528be3ee89ae591d658519a14d37f71a908481dcf5563089c8b2cb0e144a39e5377b89ce849c62384265d13d51144a67b38bea76dcc0ddf980f35d1c9af02a7cc524c6bd6727a7a206b4536d5d2bffc2e099356db108e71a69e5ed153719a43cae2031378bc0a80f24e926ddbbff65909a24e91e3caeea40d6030184832745b934e64fc96d07d1b41f8cb1fb180f3a7532c77c24ba23662177c320e6f9c96d870bff88ffa55db35579178b31dbcbecc55ce9750dc3f6d920a1bed1b92550aa0a95d45326bf42cb57a402193e81b5db257b135a35e4a9b1c2f64e7a87705d89d864fd54eb0557983f32d4f26da47da3fa0fcd923996ac8e7ce80aa1be75506b54fbe304c921fc9870a8189d4bae53c5d7ad80b385548fddd2f96bedeaaec9ed24bd1dc92d9fb25a90664580552a08cf32b6d544a598c42e599cfa9578874a7dbc3b1638a4d9094d131fd4321681dd1e8fce23bc16edd9de75653f5f049922ab8ff854d9bb5871ee7d175d290c5071326356049055ce318ccac492910b4f02e514776202cdb87cbd32ff38dbb31045b941e0e047eeb47ba7ae4d9ce1e9336bb8ee3ac66a78539a47d93a0fd0873bcb01aff15f694e2b18bda452d6b84ac0cd9571a4ea6737c44b0cd44a4a9e055d91aa01f9ca7b00bc894d4196a88a9c7189194368569f88852f8ac8c2619ac9d00a10ec7cc9e382c35dc51a6bbaef5ae05ea2d7d78369e70088200b14ed6d214db4e4c3fcd63960ea06b37364663d02879ed0a385095cdfe1058b3fc4567bc82122843cfc67e3079af4a700f3332a2fc1ca113ae340eedf81282abb53354d0af4d37d9bfdf7870350d80e279aba0d3f3980e31294d2a6627b506d224402678623384f75642d7bd09601577bed637cbd5923c4aefc270a053a2ee0e9192641b656c1686dd14267ebe51121525db7ef36ab5344749bc690444814249435496207ea1f66c9c80ea1d1c877ea6f5e2fdb179a6fd117f639bf8c1f9086a83ac45f1767a2a93dbabad01ebab611177153d6ecc109f8ed9de90e594b24a5999c2f8f5149ebce1e2c0f692f364c43ef39ac593299923a89f56d03483550ffecdbf379422b6b340f8e54e38fc5bae15b0991d8659e9904618f2e14b578a604166cb8a366669189767423c5bcd37277ef83bceb124a9ee508ddb4d94d7f8440aae0d7a43aa60f2cd750148632fa1376111a75f7b518145ad46389c75cd48c341ebae8e23b44249cc6b47fab8ea41e7a64406584baa189e478b325458ff21e5ce66d54f3f4cb8267b913fdbc2c6be3e35d980428bf5170005a4f1ffa4372cb39967ab43fd3c6a90c22e0e72ea8bc144f6183ca4a2fb2574cfd89c24c13b11348a3658f4c64bff8f898bdf479600f102d2496306f884eb018d715c4c17d377708a1a03ea0340202bb8f1d8e32feef77fafb31cf0f55811af27b558fe0ec906707f5dd5ab1ae4746d38a621cd1e1d7ac4779f90eb013e3e8686edb9c20ee4673b5345f5c175ffa45ceff2e38dca5523d71055e77e84ff1a8f9060a6207feb42d9ec1b8bb47a595700c61f46ac9a5e9ac2641d4832e6634ed12e5848a1c9a73e533426c10a93b93662a57471b1f8ff868d593fdb8e8f328254491bc6cc54e004b011b0bd4d27e8e88975388d244b028f3ed902ca1ae7345d21c7f2492a885d3cf86dffa7049daf167d1cb4c18efa2d5edfcbb03a5e5731883f9225f941cee88d342f5ca8b85fd46847843036766f499b77168f55e345f0abb690fcfd9c8c479f6b3f0fe8f0d41f85ee93f31364111dee0fa4e843301a3a6d8fabbf7ec02b431ba585608e34645a167a334781e04873fdae5c022ccd3fd776d1c9b5a33714a4a9eae897c20c774bc2f44b72a8737c11735c262737431a8f6f84d4279588ae32f04353fbae0175bc3263c3bdafa415c0f621ea9d8c19152a00b1b35d7b3b60b599b7abd5779ac7730ecf8370bffc7b482e0690ad54d7976fd05f4e9f7ed894f44b4fd96d4860d338fd4172d3ff021771c512019fb706072788968d35c6e8b1b8af12c50b47da02d5a7bf7a2e983e4f03604e23bbdc2dcf1acf5e58667af31fc96d0857f79c90bc10b55482c8b1388cc5aac0df49ecd456104ec0977cc37f45ef2c397878700a6ab3cf0573ea7379378048721e900e8304d1adc332bdc8168df294ae0ed8ebd172849cdc33dc0688b6fce56cc6d96bc3412493701172b23f5e994e6e025d346c3e4cc5e0abe691ed730127b4c06c2a1b75d3a8cd1de2a88320ad02813d50746334d2f119c3503c31d457b654f591751408a495e53c57d3683cf757f0a6f9d23fbee0c990646131db43c53b544c907134636002bd57175a78183cf6c2249f7786433cf54c7462957327155ebaacb04806eccf965f576b663b1d4787ffa18b8ac32baf1c55dc9b9381e80dc690ff3a220f0cb8fad2229b1f38b3dfb1af0406347bdd01e6b48554508eee761cde2c7626d92be4d61ea2efacf743cb1cdb35569d38c3fafd7056d5f721a01707aa1bac7debb21cd14cbdaf360033d4718b1bc3ec81446206913665aec368ba30feb4244ecd072693625d22e4dcedc258c5a0974adfc800ac200f4e9dfbad253ee1df25c20894cac56b6991df12d75d7893ab18ded9b79d9424c8d6ee51d821da5c84f90123c0d20f6cc9444e2a5b +MD = 995b41bb27d97185def7029f386fe4d579cd7b377c9a0c642f528eaa + +Len = 99232 +Msg = e6d7071be98fd9fc7f5dff15d0d889c9019d6cc55be8ca36a9617438e138ae910773329f4f87778f822632d0a2591ec7d1cef8c56f73ce3683447a1b5c606aba7863a293a4f00397658dcd9597b463f554264ea81783855f2118ebfb1cf81a45ff4e5fe031f1057cf139d74bf512e0b9514e75589b4076194d86d0c26a26469c65dd726c3eb306a5eed358dc059a1e7c92ee75bb43d129cdcd3530578e12772671b7e221135e8e7c2402592f0f75a4a7ddad57bb565e26e16acf13a2d0e6344bed84b7e6f71923685a6fe02c5bcafaa0fb33223f1e11f6bfecf9828b78c706739feef9a2340c4fd15ac2f8bb30c2a9d1b429de2ee11020cd1b5d83facddf7406519bb13f1060991feaa2a6c4d88538a0cf379472e8832c75bfa321d71856066cc933e7a4d43d89bbd3b7f42f993a2f7716044bf27b93a21e9f73610aa154440ed05fa1b9c7caa80bdcaae9e4bc0917bd4f390b96e2670b2f84734d7bb000b7522dc7e96633307d78cf238dcc881b76da437ddc466429ef12364eec138d82e6a1aa12c6935e96916b73c9e9cd4798d736ba79c7ea4afed42e7daa46b8800359640de8412891256a4a8f4504d03fa8bf397cd5d36add1044eb21306453d0ab99011ff3600d1405927eec3ee7beba71b84b503809ae6287c6b1e9874dcdc6a12de2a8d82d2b2f5d9170525d987dfe1e49d4ff4a6f9f248be3e89e57090caa0e9d6d7042b0682a55ed87884a21f753d5fb3c52b410236a4221f8084aa1fac419720c3ed7f0ad4c17302a58ac891203be54eb0e1ef1237bd70b4aef061c7e5beb3326db3ff5e3dfc8e1c3882cd9b85503de49fe2f1c88a07026441b33827fb8ab68221023c7f0299389b9e17118d090c921bfe99098382136fc4f547adce724829a6aa32b6fbe739eaf742b244e42fd3ba4b396e96d1d465014d46183319de59850655cfef4330411db5c2eec84f6e47eef8ecee1a41e57e6f6390bf589894314127b05455e39261596d9b172c1d38dbd8ab9592043229b222be81a78ec93881e681464a7b5b71fd266537e5d0dc33f1efe9aff4f55135b2a3a4756b663a3fae0db9843cd0294386fd6325b5670ae43c9d19b8816dfd8df26abc08654f5a1e37ff26f685e4dbab9146bde1105f37ae2e78e23bb1ceb596f3f07b974fdab75892636029b039c10eaebafbf68119d1061a0ba99610a807e539cd49ce6578b0735fb2db7a664f97e1219293d272377580b1bdf674287a72fd2679dd0a50aa03f2e2661f750286bec7bc961c118e2873a278184f4263c675435c5e7bd79bfef06bed05a2b60f8fb426b21e0b101f7d79ffcf932a8d5d0c8d5c5e03ccb291e82422b219eb99f7baf682b492d77ab096f6dd3ac70eb16ecd29ac7e023627fce60ddbe40b70bd55a9147036ad079dec1558ef4c2c625b3388e8b86ed25ea417891bdbf562d87c93ca9c53aac522161c793e8a762bcbe725b0391492dc9cb38c31ecc768a869745cafdcb1a363ad6fec2316534b4db1e1cfe399257cb976d2c580ef02a054ca20fac9842e93110ff7b5a35ece2e1aaae79c83977f9ed1739e5de691325ee0610f0897f10f0c45d06a138a964fb11b2d450620a2977bcd2952afe371cad6e3d48b009bc1f7718a752380494b7c56b79f96a73b48f195f4feac46081f30bad78b417d55555c654794b0865ffcc8918898690a4409027fe16a17cab4f8087d23fbbed95559c24a15859d804f18b8e406ae1889db516e8c3b0201887a7ab68061ac5f9f0c1dbdb27cee4728972dc1e09a2741a051b08a5d4a4d1609e935cf870923a048fa3fa310d62549c9b8aa77f9ebba610857b4da6597a1b1e951a7b7d392e83d61a02e06f7c9d111fe242d4fa253dde31c4dccf337bbb65181744f0408877063738e777dc9b0583c308a14bd7c7ae86446b46759461ee1917ca1aa38986f42cef9159a6c29324134fb2b0f55eab98051221c12710359b9ee356a37ca05a2d5dc5ce6055678b82278d8a76b8d7fa82c3638f56cdf01c4a5c4464e864cc2eaa028397046c14aca5294338fb7d89dbf528fe5c0c507d4084bb029cef415627f481ef934ed4111e177f3a64472dbd77789cad31ec96fcc9d023e4a5c2fd866f9244d26b4573a60860933ab563aebbf5938736b6fc88b8dfb7fcb428697ea42e0cb1f3c7f2321b9206cb0bd356eacb7ece516292460ef8a8c0ae38cceaaef88beb321c4d5bf9b7e69391746728c7353ab262f96ed211034f73a1393a4f73caafb52e13a88ab1c4298f4c3e19e12f4050c622c3f1a67722fa583d7e19a0b761c2f50da17e87408886806331908a0935e992fa88c4cc2a9dd2f8ebd112e36106eb30368e7858904c23f04015752b3d5c2c9f500f8e4c10bcfeda11f8cd22590152f013a23d07885728664ab26fcab2fd42748d21f82c13c7a68619bcf164879a20bc0ba5769c0ff3be6be9d027715260529a1a86aa761a05f48569e526b2d3197d1d865eca1d0f660d868536442704cd85975d064b320cbf0e5e6b3b161325c5909aec96e2946ff93c3f86ad6ff5b08b03f5c0688366d33d1c998586678f65e782bba615650817f4731e55fd50e13ee3f33baa76fc1c56c747bf218dc12e7bc77a081aa3fc82ee9fdcac58ee8ef6971d7df283f65b5b7da5b657a619cdf94fada10ab1084f09de419c70f847d239a181cba1b2b14b2c301e93e97cf232f7c9e11f48d30b05a5cf24def29dd2c3b4455602d0a16f7295577b03fd0be09930d2aa1b4ae976c65ea78ec8bbb0550a6e6ce64d08b7f878a1da05301cbaabaaad5052bd99590f3c3d4fc8825297994e6ffc77d2cf5c130655a10142cdf31a0c752d1f2fbc8d9f0d49af1a353fbc6638c0df52b9b0f88ac4bb95ba61991ef668904f5a963bebede18bafcb090b85847068fbbf2b30f32359da9c77b307a1076507a04a1d9fddc361093825253d5cba9d6f3a0550d9b6a76eba9f7f639fe515ace10639e96fcae734cd306eb25da8d167de826e4f32a7ddaa64871b97e952e8e4266b6d25331a2203df81efd7f4d19278bcbd4050c32f8fb6df3a93786e5147b6dfb62ff774343c764511f0bd893fc27511d2c47d15b7833933a22f2db548fcca13cfc787b882fd3409cab98ba4592c09e5a942fcafa582dc69a637de46a0cdc7ca9e7dfe8a6b2de63392916acd8997da412a02f519625447882df2b5aac283560c0a99846f579333c953c2828d37ca902c3d4b91dc57c1219821a9d76814e61ee2fd6240f1aef8c4d5f492fa6bc98ed4afca67f77feb9112a269a46f0800bdc8535f215b97d924405e5d4afbf0a8ab4ed1b99c518a858bc4aced2ba313edd2fb68161ffde93edf506d7631aca23ce9a59af233c4868f79dcc195869b1043eb60280ba14c7046f19c092791360ced1081125d737afa702105e649fc808769d19e9b26f273b35921cb3a58b0c0b324e78c42e3a69b6e904be525f1d67a00c94c5ec95059983be0388608f1d8732147376b316a124e6a57c12485755db004ca2348bb6f1de48e41ff747cda4f77ddc0c8c9e7db01bc772d4a6b0fbdd64b1ad42003786c877e36e63b3e9dfb5df36ff5624c6d1fb90d1c7aad62c9b18c72cb4f09380830df8ebb35b78b743c4c0f6050cd9cca1c8368e2a6b3b0bd3ac64e9ea3a78e74a26d3ea3983a04078662f53637d06206bca6f5501924fdf33ecb071b39c2aec3a978b478768b5160bfe9ca7c1435462ae66cdeee3bc8f371a6e4c4ca77223ffd2f4a18c137731987d127b9b74ec2ef3d821b4844756638415b59ad34c68eea2b1b29930742ba0482a265e7714d40064777fc5ddb2dc8746b4472ece08fcf5753555e4dd10128bc5b1cea7f3179763251af57453accb450f54877a65638ad2d80c4306da7db84e61a2600a7803a2e1c61117428e9bbf373e951af061f2bf015b752e91b1138982dc5a7ed87e5f82e6c82859a2d71614d874e466331c2ce60b602e6d08198802a366689fa49e81b3fc9b9f3127c592589312d0edb52c78bc5b968682cc4c31c03ac04b36f12110b29db1043253e2971711b8d935f8fb7c9e6c5f2c1460f1b72eb35a80d940de930b44b8e5d189b6aaccbed76bc371019ef8c83a6d7668827ebaa79597fb05ff7f3a8c13b2a36baa33d604ef171aafe75677f9a8e93d3576fef07221ff10d33c3bacce42090c6c45c8ef8e7049a0181549887b3b2ddd7a57be7cbd5024bf1afd6eee95d44780fe01d065b60ba2085c03cea6c76189eb89ad439be3c0b75a5fbb7f8c7d3b0cb5a376f0d506018e97be4b8c5f58acabcbf5d014fa8ff41577140ee3e2eef6a6feff1d90ba08f28de2e144d91ec98d02134178a9051c6adda9ca6042ae6597c4e1635e4681397f1e7e57985b6174730b35feff863813855e470548023b6b8ed4f172b168d711d7bede73be79c3e40f45c870ed132fffd435e3373ea9068b5c65939fcfae082cccfd67d81fbac2b2b2403f69ba06494be7f312e2acbdbc2f70e56c6d015ca0e49f48cef734a4ca5afc690f2bfea6108230f43a9a2aa6b8d27cd2d04cef1b4dc3ff2f5853b5be57374e4eac4a2399023d3fd7eec020fa890ec0cc63c1f1504b554d2fb87feb6e05e2385fbb46b145bac7751c93e7382fa95efd209b5ea092461309b853ce7e4a32e64b2aa094304296db6110be91d8cc962d727deb958567aa87c557aed1b6c98abde72df0d5190632c39472e3327b47dc14d132d8e91837052e008c4e2c5d6269c3acd8206be406fb2a7fa1965ba837e77f99fde7dbc186c2603bd4a630babb4cb1fcb7c3db19cb6c7a933b4c6fd80354f82d2d9ce029dd8ed8e7cf4b81572acfe3675b3fa532da032e7f9e7a01933081091b506c98a9b1b6f284baa280cb375fe27d21085cb7a96bd08549a3935246081cd4e4db67d9a9d747a3454fc18f7779399ea7b25420bfe2eb54cb5db7adca66cdfa797dc0220c6c42c3eda7d60c41a8434c6dd23e069414e95ea20cc10e240976ec8ca8442b7fe26e57124f00da5c69ba16d1cc7cc1bc8e55135c4541ebe98ca23b7d0f664e6ad644dd61ba0461fe39e88e722592fa9fabb903687bdccf914cfa67e8f7a91363b440d74a5d434bcd956903dd521309c3e97fbf3524d441a1e6d9e25f158f12d108fcd54abd3ff03108b62761f67f87bfe4339760e4eaba91d6bb3b2ddd7ab55940c347c16e6ce7cf105a69ae772aecea185f3c7a1062c2e79928e2f3a40e8363085ebf6cc55c9b0e28b03b2158b7b1e8f26d1ecf5beec3299aad7a3f2dbcf564ac09acab7681a264ce721c590fa87f12fee7aeff0bd163de77b3517ecf0893f4c87e8febe67e66698dfa9db4207f9d2eba497d77c4dd0d5cacc519210c73d799ca07d9cc89958f92c3c43fc12fafa462a12cfad80b44284aa66d31c46a8148aa4d302abbf47956672c59631e81ab1d755fecb78e33b96d1f01262bd76da36fccaea1f348ab9c835d0444b81acb0470cd23133408f2af1440296a67e88a6ca5778ab7b3e113717efb07f09f54604e36d0a73ae0e6bc97d6649ba49666454f82115e0bfd13c09aa1b794079949f5eae83658be4e95f5f62be2d48f07ef32ceae4094f92f5f376aa41934d43669d06d0d54c437ed95336c8d5170645cd1b75c527bbc19db31ec73fea666e0e73294370ec256124e62f94d6316dbef05bc579b47395fd8812a545909d5a6d82c42c5fb64e59ae7d19dbc2b45c98369930da7edd4ffecdfa1b7035c6e2d71148608ca0cb8551f2327940088bde0137e75540cd68435ef79bd567e208414521084f334fd71974f5ea0e44ad833d0f8882d1e1ae7ed71e44144873937f430c66699a07b30190297e4ee1d0fbc30329f313aca3684794a47c0d7c7a8f536f94a81448f2167274da5706f9cd3874b7b93e42ee7045ea0159672d7a651fab4d45aeb161dbbe524cee46b95f21adbde22632b6a02f8b8fa7a5cc1d491d8baf668842e7eea9f4c8a1cd140f19b6a2c70bd89718cac883600cf17585f1891b8941c32a5ef54600fcfadf89b231725fb9ba37350f72227582baa3280b7b90175e67602fbf81992a17df8b6c47ae3f2bbc78abd344a227a9203925ae5aee1cc6595ec519b2978aba41d83c8779990450f8cb9c3b5e61be66600fddcf185214719fb05cb0de4101f7a16e57a0edf9a914943e723306b8cff66ac63552eeaf5f605be48bbcec86e62b602845804ed615c0b9569584e4ad439f67e69301830ee7dbb383bc04836f219ca58f6eef4239329b8e9d6df69f4b00aa7ff561a28076932acf1456514c029b9299293ab47129e7ef3c9a6350e097ef5fd97d06fe8cf04b94d81fc16bef493a576481129985ae1c02ead5dd5c4e9bf8059e05eadd5083f762f62d641a134ce7322d1c5c6423d0b91ec1d744e0925e04e5f5167507733780dd50c5a92660128b6a1c8481def598a789e92701a553e8f94807370f439e14cc4a0f6ff75680a30c485b40eacfa30dcc8b894d7a733a42c174fcf0205a7923c4f45ab3b773180754140fd8feffd537116ec9d21911ef7342b2fbc91015ab6b50225a1a4f45d346491663d42435321f5e78d23d4549198366492c4b473addf4591b372b28945669d5957dbdc63b62cc9cf3cc1665e1607b1383b8fd2e91b6c7c528186faa284c78dfdb851b4bd70e46b125dfe6e3a26e6233a6c7672be4dfeb7e91256c3dc95b794e2ea4741bd2de96875731332654e840adfb8012a7f9ff686a9e88ac4a3e2b760cd701529ef379c305d0ed8896bf791d69ca0c850b99bf47739766b737506576001dc63c3c0488d512da396a9baac7024f5b9348bd8cc78f80c3ea136ec7b182124a18bb5dcbb2d598bb3d639ddf7af647f53ce4279abe48786b394a556bb6a12aa521566912a0ca7ebc23fa04243b0239e12fe0af8b4d7b45d77ee456031ddb30750995c89ff9bcac2510b83842b22d0d6895c4bf261b2fce4fdf67d8598d380c03f800e23a66b4093e2e23a101867fabd09619be34d16cfb1b845d4333afc1a79715201fad8fb87f4ea5c5a8285f00fb615966147d163ab482964dfe5a2b7de778887ce8bf1bd3f59f9d26b381e7b9e665073328c993a2e1cd3dc07396a875b5f07a9ca337b30a54773dcc2cd2c3b15222c70964e0efab6a45a03d09aeceaffa451309badefe67821fad4179e49ef029e1c26e2f8ad35e372fe84c286c47359cc07a4a937ca5f168df160d047f1e7f51ea1fedf18ee7c131d63c753896b80f85a9d8e798d94fb0eefea0b6336aeb65b485070b13b5d2df3e81c541a1f5cc439b4854692fbca5adfdc672c6706faeaa38faa252fbc73dbd4777ab37cc5129dbc8e41757c2ee4eef7b7db5c522540f57c7901749128ccf65350115e01f7277def2c74839b838f37e526c9039b0e2b57348918f78c0cb31deee672bc2031f5f550337109879603c6368db2cac84e14906a24331686e4e0a305cf11767e1228847e27d97fa6d2ed0a5a712b0a505197219bfef26a082db036466e7fe571f419cbc77e104eafc6c584cf55845ad9b52d9b286dc95a8663bc480f3900b18274540bdaaaa7fed8ee07b613cf7134bae5326dcdf54a7098036f48fed3563345ff51e506322328d8b53e2eb63354107a6e5009cb29d844a3a933b963b1e3133311bde808a8f43515b8e35f2525bf869ecd00ffce70053f3fb1c439fc5939b9b047d2852073adac166561b7ff1b05ffae6dcfc0367c53d8d2a97b1b173dcc9f63fe5a2d0c26b206614763c98287e9f41fdd06fb91834699f31cd30d52d40e4cb4c19f701a46a3cc7ceb44148df0bdfc699760f27e395ffb177866612db0814a392e1cded937e576dfadad294fea1481223948554b02f294b6489fb70657d80057907cd9d78f099de02ae96866d8602ac01f37849684b0df660a098f7b3e4517969519e183c0829a44cf936251402341c9d5b910cf131d339d391e5b0ad88ae87ca89e866c50e304742825979db5f06eb5e9478a73529a49d252589a23cb0c0b804755590fd4ad54d4a13a88babe3a1a0ab65d4211b7ba8a9be242dd546a3af937fde8b9dcb044140ce72cb626ad82dc3ee974e838a6e06e507567852b4aaa2a1a48b329516839ba7356869060284d1dd8ef28dd46c4be7d9668313206f0dc168d946f381c8100c0be7bd2a805930b675f33e3a1ca85a720e4472a5475e14357287d57668c8f3bcf34c39b8d7592304138543fc6426e3d00b0aecd7d06807264717016252fe74d2e7cca4b813e9a7e23facc97cb3ce2e28581eb951c2772dbb6def925f4752db776fcfc5d53df0027882d09761118883a37eeaa1ba2572cf1d6e79501750ac6fd214bd65b55c587def63597654863c296904d46cba02403574d21c032f74f4790c5dfe4c007808606f6baf2efd1bd269a17246e1fb60cba7e71f3f7252bc12414cd3fa425f9ae8f31f203a8703d7328b7351a7c92247fa6d9edf4c66262eee0fbbfc190f79c8e07e280c62490fc344d708275fecdabfb5cec299aaa753d5712b8163c47af80cd848b2b7903bc8e5f194887fd612c9d1e4137bd6c1fd82b681dcc58d614d816eb89ae4a82a26d7471f0c1bde730397847085f01df9305bdb076caf045a4ebff568bce6679ad2e3f1b785e7cea086ede13f694af6ba07854bec21684f154657a9d0f6e17c460795e9a24817d6c56573ee3a0ab0e96c4ba90e164418f6fcfcf492d990fd70988d9539c69dd17f4866d0b549af4b7f77c46e2d6f1ce681753a3cb969d161c9f62b8ae90dcb3d4f9252ac3e559f433f433a7dafdef3fb79eac6d72569023612caab1cff5e1c85d00bf0b18f4423bfb238757d9c4a0f7f66c2696edec26ba3d07bd3f485a0d6ce8a1b0a85b20083e75ebf3c17fc9db999ce65eba9ed5a54d18d716cba82bd4243042b66d0af6f07e4cd3e59f3d8be39713b3b142f591b05e7d0143d16ff9ca809c6a1ce3b8c7bf7de871f92b83795d73034acaca92aecc50e22cc10ae0325504b58e7076d530b9afc12c8b00e220adbfe42207abe69b4de6e0a01ab2d9640812f4363dc0f0c063967f8a37b9fa0058c02ebff47171d5d962e101bd739c0d585dd0e7f14c9bd561c47c116ba10b96e3465bab1db5b4ece3677bc825c7a8acca27e41a2764270e28bc3f38b370c752d194e349efe3304ef0570979e029afb0d213a6433cc232c92ce031869b839dd2a83e6e32e784748a84d4228d8913e1c814a38009cdc13fa4e2c30b718063ff84ebc554eca103e21e15414f796d010f30e64a19c446fbbe1feef725900e9c7cf7f0bc2fdd890c19882640f8d4188b88b9db99cc1934cc3e98a5df08589287968a6b75579c2be77b473c35a714281dee9178f52f6f13dd21adabfd3c31b8dfccdac093849ee62097d9cb91f2bff832917622febc3c608907dd75c429b1edef906774990f5c6461efbe6908344e256411c68e18eb07a76a719677e6696fae41719f1bf8806b0315f37378eb04352c1cf000fec6346754fbcf6736b673b1767ff1001b2450316ea733879fdceb0b78e7bcb419a930c205b7a1de46c6c13dd2f58f28e6cf2745f3a0406922304147883ec86e531468be1618695a0c99da5b503cbc88233b5e1f3e9b7aa6c497bf6ff69cb39e3faa349212b8b6691ca237905ac0099c450b6d33abf362bedb65bdeb307bfea233dd3d0497f2f999eb7261736f39e6d3c0b1ed29c842991ffb4cb54fc2771a38c42fea8bf261a35aed7cd08b19e4e4dd2ab156481ff37e58989f3e1428f886b08504a57ede8f542ab7341d3dd75b73f6e7ac21351f9092e727efc0ced08ad4b7fb0e267398c68c97cd3aa002142824ef8be4e66743a4774a4db0e5e655a8849d7abec600ddc1ad0093f2f17e7cb567f58c0e1e5528a98bf06e8505e134dc070f98791c8d09eb4623afff8a196d9dcdc76c8a11953b1a41880edeb945da9fec5cd8cf829ea9bdd84f75a2e269534bb6c3a1db989e0761486fa310788ac35e9523b044a0ac39b3e40289af92c4ea49c378d094fbe5fa290125cfdcac369ba2a1e2c35aef4c3667f9db505803d28f1274655d28c3e3afdbfc38e995fccfa00683186684d6e52c347a486e4ece08be203a07cc19793d74f4aa1794dec2bc9cf4c9433e64e00d87b3e5b837e649edf41d94de81e9944a060d8b403619a693cef7e4e19f4da32bd560dcc951d11fd8dd450568331b9dafbf81205151c900dbd27a56722dd198d691c5cffa2071b87fb6411c2334120dc52dea09b98c7f79fb34169e835e732984495d2fa9385a9c492b8c399e298f5d20cdb297e72aaf6a7860374d8395c4edbb78918c751dfe33bba9a0fe4777c614591b755b78d0db6ae9d366b3f188294df28bfd66ec35df274dcd09daada368cbc493ace4dcf385e3b62a2f925b9a22d2b0000b3f5d047fef75e2314f3f30e9dbf9c2b3948227217d73c0ec49304034048a814576662e42e4daa5b1dc7aa4bbcd6f25441b16d05090993437490e1eff6bc86c36bc8607dabfd26405f2fe737138ab37b8c8f98375b59d00ab22538ac771104d59724b15a9d8f3c9983329218c7624769c2ea8a51364f59292659f183eace891182813fc32b8b533030d9933703e716e68cca2d9ac17497687734f4bc777c7c40d5e7f1007d7ad2cb0f2bd2dced9f89ba9238685c254ff2914dbe299f48a2472a375faf58bce42333c730374fad1406ac7b3b23dd8969d36a5200797482c8519751ef6115104fad3001f0abd76ccef685efdc46671648a0bd2c01ca825077024fcba2ef7da045d88a657414bd5254c20d9822ba40f376c35083c90612d835c2194c7d42d9954d0c089ac35c4a862dd00c1b1565b04a7ba2eb0061136c428df9bf7c8a407016f0b17349e569c331e48a4a23bd300140dda7584ad0dbd8b7040f0704d0d28c4cb42f9319e325737afe578e56230379ff26385e0a1e449e5f246cba8c57e1735f24ef30b3c476a18a059ea25c4ec762afddbfc4e8543805617479a0bb28536e76c55712be9046948881c94cde466202778ba3538b799e56e57c9c803a4a12c5b921d000e34f7c959df83f558414bea280b74cd39c955dda15c53e23b0c504c051bfc3c4ca0a00ecf1f46885f5bfc289f2e9220cc2b15fd617d6c852c6a213a7662796241ac9bae1abfcaca3da4f5501f4aa8dc5a6d38b951337a0d324e826c11fe2b3e97c9292bcf4997379dacd6150ae80f5c8f006c95e3271306e719f2457a57780db976f70c4f35125cd9e40cdbf49f6c2db474f01789b0bdfed56cff7b1206e67c114673c42d1af2a68cdb08196ed915cc753b81b2c788d14167a818617b750ce649a82de7eb538ea121025641dc1db2b53bd4800c2ee8039b386bdb9d192a31f8dd2c93ec0c876ce920fa8609cee5b98492d079682276bb58a21897826daf2c1026343445031f03cb271405c5a9b99096f4afec6b34bd6f064f4efab60b7c21c8cf7f9d975192e9d38dff641a0f11ee78fbd34799f81495208a6f63ac5509d98f233f1e379a8b95aed00d1f5b618719b6f2db1958cf24d4340e0a60d9ece0a9dfec1354ba20518d9997dd961e4371a8bd8437e03c3c6692bd24a080d325892937649cdfa3959d38404fd166d7277a22191a7a2ac8c242672878b2320cb17bbe22372bfd785cb73c2f5299102a7ff90c4640025772e340b80274c002faf3310f2cde515c9d0847ffa36a95106ccf86cdb17f7104bf320a0bd7a34a52327d3162c3b4ad7ba60ac7f968d245e632989bfd073336a12210d6d9247ec1ce27b1f57f637480b917f6afbfdc342c1ff06db0f0a405d3bb30125fb65581b6d56f3405ab98787bb3673e67c97a0ac81c4ab15e7f1461c8c16db90d19f736a9e65d75ea7def4b0ee90844989cceb0aa6985f60cced4c196423f77677a96181b9f96ea0c7cb466bad89fcbbab046e0339656ce448661cfbcbc29cfe76e9ea07c5f9012f41ea455fff08216369a7ef40401218c8e2c47c6bc9db145055c9d5a5cb4dd8339da2b935ecf63d6a4b1d3769c687ac35236f35116756a5959cb0ec02d2dd3bd3645a69947c3996f7d9ce0e25d0ac6f5291d00f94ac1b98f5d406f5c7e29172371d7c1e25b8ba74339c233b1c6869ab48b64dd19da11235978432b99b0351c488506fa090a76121461b8288f795a6a63e1a4f45d34c24c3a4349e00273e057bee859bb77c5117e457de54bb5e604baa5d433f31dfb7378c436cb192129a95dd9045682b91bfc2048e6e029df8cf40fdccbb835e68ea34d69db5d3360520e93397173ec378f84bca1452f2f66eed6de7b40a859417eb04eada966cb6a8d7e9c42a848548d9049b7e11128e8e67bfbab23db6ab9a94c48d102198e4d8a2c77eda7213a5835bec9968ac373d2c8c4f10a48e495f3a867db98f9a41a4659cf88ebb974c0639a7b72ccf0e48669a85a45507d04b083a951c6fb16e1c12243d7302b0c0b71035656d3efd5fcd739ef9c673212a420d636aab97bcc5ae97df2e3fc30115dd2c3e3c17b638c64fcb0191be503bc5b8d87dad3118f9c6819c5c1664b8f6bf45c01bd4bc7bc96b55d68af493d69cc934d05006b7dcb09a1c87649eebc8d7e6773695d66477f87767fc03ca4deb8e5d3f5da31b44ca296807c1bf6edbddebb1fcf474ea17910c120da532bdf57957a960e74097e0caab59cbb3352d3cde7b495b6480b7deb14f63d039e173916740d61fd6ed2093c47f95efc48e8316b2cfd61cec80e6c0bf07933720d6942c9d910c0493735e66a0ee43fb5b911a72432f7fc8f63e1ec6a47dc9cbc2dac9cb03927298849afb60463e8c77e208975778e36ce6e98008f746f92e1288b4ba78818b316212299c8a9fb797ecc0b9a5ce3932c6fe2d0f4c5b8ec2ea96d82e0e3affc370eaa5eaebea91a38de25d6ceade6e66b5982ab391fa642224df1b0e6d1a658358b9a6a3908b054895df21eb0e8fffc5603d48337fddb15f0573ba1d811e9b1311567b1d3372e4f0d86d74fdbae9d598f074ef59bf0b5bc2b4dc1b23ef5089bbc2498e207ba914e17d13be6996f5d6268cc687ebf98c4c9359a2a8e862b818c3941b467410377f63ad5a67f849baebb95dba78b2d4696a1a1e4bc833805d2e72ae530ae09b240bc090c8d7727c40fd978bd82a76f9a99f9f2961e2cdf147b4113879442dc478a23e4de7769fd690f2093da805ff1054d269a26c607f5e7e93e85c165b23323c2b270d3fad4600b1b4579bb37214c073ebc1b2f2a90f6f0bb13f40b1b78a8e788ec1f756e231a1ab29c9ce80d77fb10cd1ef817d2545cbf5f85e0cd2c02a7f32b35534b67e2662873ba7fe979d068c2a6e3b36943ceb1b444f8ce901decbae74822aebe7eaeeeb4cd13852812d72f9d2a9ecf9c056c706009d13ffc77934c245e38a456f8d51e302d2c5f3c5ed8a9f0e6a4cf487dba33532cc3975abf92e64aebebb6ad8ce16f2b2289609eb471827e599a14c7433454fe2c3477336c6813cb5fb0681aa1707c163baf3bb7ca2e238601f342c0cc675fd166a8423ee48f5f16582b3b26bcfeaf81d702431ff66b27b85e24dbad9fdfde7d8a93aab5de7512cc33b0a27a55d883fe8327094fcfa4e985ecb341e623ea4b42f68af330b0c5f94d90e5305df2ba93ccde8210cfbc87e36f3c230812ff2310d248f2de47f1de5d2aee4d577a2a0149ad37a7dc085370cfd4ab08a0bc9826d99bd06fae54184ac8d4aa3d9a3752493ff03d0cdd921afbe976d7b8be3b754200104b55e5fd9a77c6eb635a7b1e01fec1463d3587e58985ea9640d783281d211ec0185a37ad0f01d1df98087ca6bf9e880fe6968d8b15bb2de354c9c1fb0630a03bb5c0f5dacc656411b6ec1169f1b4febd97b430fb45e83dbea223ed3cb6ed1ee3a24ec31f890f08225e69cbc03ebe9fffef2324ae90a984b8b76a5755a5d305486c3801d39b8b48a1ecf61e420d27e6174b47db1d9c7bbd41e2f1a2ee597ecdda823144af9a567fe0e1359b87c39d5bc43ab6c6d0bfeb21ead37e526f584d032a72aefe0bfbfd489fd99c95da186b7b674bd47a6071546d23f754e84118ca3fb8bc25b06146ec2d1f449fcfe1723ecf70dd4558356763f98ddd19d71c2172cdf5cd29ee47f1af87efa0b39c164763c2819d7df2d7f8765178e3319148f8d3487234101a3882b3f3918c7c7ce12e96ff19dae2dcc0ab280f85a830b960056839be8f9cc6bb7095faa5565ef4ea9e24cf9a3418787805e57e249a9bb1e9ddae1c2b1e14763951c2078b9cdf969afcb9ce93278358668f2b37e648e71d5ef8216a488e1bab4a9cd4a4b4ce82d46ae0b2768533b7ef24ad85c74b21875e27db4e9ea74e16c857b82a4cd179cd20e2d0ab51f0d72acf3ae771a6b3b300e6ecfd9243c7ec9a6ff94a4f7a421d232e8b5300eb6680505b01d37b50c08bf86a16e5a8d41ac81b04a7b9c0b78727393fdcde5f9d46cdcd2521f80f4fe20ab23a2e19deda208f2d28db8d1a8f213653e75fd91402122df5a003abaa0e98cde2e9ab00c0b079a0254f1d4aa96b90b927b77cd9ca94791f7e7e3f84d8177523eeeb0640eb116699a7d9d56919c7662e0922bc66efdebc10abf23e0a25f4e7cb5ad0d840aa57a7da396b9c6ed84d12139caba6f6f03b8bb012be77a1f0216112ab1d8986ab0d9de03e76fad2514714f846c4c5008855386c573574f2d32781a84443a29959adc95a4b8e592a315fff4a9c008f29f49672a3ddf9ce635b61b9eadac5bbef32b2aa86c5143fdce4e22198f0e17dc9e199ab050b7dec79d57a9a58c3162dfec2b6c2245f9b2760e8983c4209ea1966bbb941fe842447bceddc738091d7814e861490816fa5a86cb8cca0043b7cda970f7fe7fecc9f78931101f5d0cb6c4e64f966a64c79a62b46d209ed2e0a3c39c139780d943941f792db7591e7d466fdc8992763d3f22f2895c0da744e0a8acf7be61c134d7ebe2d4299c1d834413a07ffe1d169c68da348c011b8e5d290fb043d81f6a988f166b218f8511934a66805517fff28829094e45c212fb25a420f607c997220d535ce0e8c63be056758637e83affb1096af8683c08b995a53922a7cbf892929c0b076ab2368630d4aebdecc0d0e7fb2713f0abfa3cd905e4d15fea18cfd7624c9f5d3005472daa16de51c763427d7aeb0d373e06c43af2ea521de874b5303926f8a75b6c61faf523eb8bf15bf68ad35c3e154ae80aa405c0a6a5c86a1263bf30fc2c126cecb3b903bfb3923056d5b1838fd4f72974dfe66db33fb37f4f399d7494367e8f5021a0bf4011d168c928ba66e8bb6c506cb23cf96332d13dd27a7bfaa90bc65cf50c505e58ecd78db649960f3211d2e559e7b06d9cc8492b04ee00c821f4145b443c71e8ee8ecc268701ee86531f5070a344e9d0484744d14d5cd5e8e6398d15a378ac66e93dd7bca3186ad1352d0f7ab192902a4ef8e9b8168ea262de225b117b89a9df334220d67256b1fabe82378aed984c8496236167c54a0e3cf3f7a6d735380f5bb3e5d0fc5c836c09d868ef29be20c6e50810d366c459c1800cff95f0374b86e2516d0fb7c96642046a255fde8cf0a5558c06683e79836436108351e3eb8ab87df524048d21c8dcf55c02b031c0d292dc0a4f48764e8f9f64e9cb0238b8bf4a338750d808cc71e1e396470aaac08b35836a319a96a94719147e1fce7805b0e70def3ab2b03229fad7ff3c94d2f5e6355194f58727f4717b4db7c7e02a3c263511152abb0cbcb8cfd881297730c7aa3b4f70e236b096d66c187c0a5ed6c4e9dc49e2671ba4d0e507ee0355da4d9f9eee83e742cfb9f73e957cb532710505c185bd3c3bf900d8794b216e09e6afe38cf7f7df5b7cca7f719d814a85403d6776d8740dec7da93a3d427aa88dc3e0fd3afdb34177636c96362e2f234cf40952cf7c763bc3d12660f695009a2998685370a9bdf6dcac26a456ed8f29ceb4ee2e961acbaf081affb06febbc2c258dcd4ff8a31fe5d28081119a84a84255a9766391597c520383bd946fedb447c8cc99579992e1f5a3070445c79b825727fa285989e28f0bfc31e773bd43f2d15b7a53d51a1e0910956837a9a8d926518dd08c78455c0fc13a4f05b422947eb426c2843044f0a11df2cca2a304e79b16cf532b298f70015e06039fc166885ed671cab3d0dfb0b003005ace9ca26ce99035aa8cd22dc66fc9a8753e0151c89c2184ba681db3063fac083b42fd4b1119a507fe38dde80560ea68cf69dcaafc407ba6bb2c7f879855ff5196862cc77e323f8c76b5b088d5dda98d36a9ba3bcc50ce21f5855e2411fae425942393de5a3c450d3b8db5d5e0edee61d48503caded6013b8ffe2253173643ca5da098584e409fd274475297cb98a12ad1851f20ddd9fc3db11c33da521204891885a5fc014435234a6cf19541e6aa31553177056f62a76f8569f9816c9510aaed5b21931c53ef48e583f998e8e0f1be871271413c78ea18306cdd120ac84d7505a874e54672b5886c14d268688d5f198faf769bed23ad81ddad4553d7b1a43288f705ba28ab6f2d08a8e3cd6af6da899690efdc2a6bd8f3b2b59a0e785afd289ecd3eda6905057de0c6968f96214b57c43e42cc9a5953b4d70b450998cb41a06db4860db2895fc11df6527593189bcc4040d933e6f4060c7537ac0ddd0b56e22033451aab3d6540e6c080480ae3b02e331e1ad9b645d945b4c239e1ef212636ddd3e4cafb2b004464ad86d0a28874c5c4616f86b052b5a6bb33534f771898e4cc1ac9e54b5b1613be44cdd50411cedb1c903f017f258076b312611d1df5933317925d3342d390f61d0dbd1fd785a5b66233f113c9c624fec3e8cd1488c2016de3c3087b899d5735a991be75c4ede39fbfd3ef84373b8786143bfefc6187c9d85b343387c7c15218895739a173506fde5bf7a01c708e9355ce965c9d4f4ad3bca46d441da54568e7e6e894698bb631bb5d276ca21dc72eb5187e4fbefb150763e9f6a506cb3383e9e7ca3996b528117eedebbbe0e5ec42ec1a7d3f290cef4d145058bc0ae0928a67b5878ef098acf76e35ccf59c7107b643fd1a94a42be18d16011af3f08d6b64a977a7fd3edd4dcbd45a51829f681f7202e9deb6f800f1afb225c4b18279c5fbf756b0ed4a2b1075f88703cbb1733d5e71054f0eed32299b30e4de5d864ca836997a2cc6da2bffdd22e26836993a6862d87af7024a6a9139d865f161c5b01dfdd60aa2efb78421ec9a930a2c2164a8667e6f5efbd94f3072f1d18424074b2a38f82f9bd2a9df7e88a7c371160f9a0552ac0d0a62608a0e2cc54f200e13c5dacf45109ed677e41f9a939a235a2c83880eaa7c859da8c233509a084c87b3c732ab06d63363eb3a0b0ba43faa6240c83882c0e3571679a0a8c7b92490f7adf93cb282a8e2e1cb8a4ac123db8e9413101e97366a06339acc74776aca74c6ca02ffcd03af34b8e07be5a65895555a6c044033533b1c5ed5ed9f4af522815cd28b83e5cf12b051f2b6e3a18a96891b154ba83f607b21fef0ab3227a1553e228d3bd1e02ffadf12c9e24c990205b13ed48e5ea4a5559b7ab4b034f5b78b347ec3bbf0a8 +MD = 3ea2da6593d3ff5ec71e48e168a2e89b3759903155fa6bf5b554121b + +Len = 100024 +Msg = 40c6110b394f5cb5dfb17cc69416fe6b64ac6bdb380619dc4dbf4788e56069513d83c143be392f8977aa4a33cbfbaf3667759ab478e3b37e1a3b2ad81381057cc1e9b9e1513cf8bc327ccbc8c9cbe0c2678925b878bd9684fdb652943cf2f5ecb53e226d591f5f57f771260df74e38184a31356fa15b6af5dd76ea44c779e0a902cb236f3eab0b61adcf848abb4b603ffab5f2605b87d8daa4c418701edf6fbc8ed8e57067a8a5e23edf0cc87e8c003f5d5d83130f07873a39e804a1a8eb492c43ad90f83eded4e391e9e74ea9d7bf215d70101023a4211d842ad85ecd67160108914b8d2a14416a8e353ca4a2f545ece138c3e001264b8c6dd2b930f5198043c4ce3eb9931494821d0a3453d3ae3ba8d0fbc20a0f55af8ddc27d19e88cb2dfb61aa9203e1a4743026b2f7e2a2c9495e14023516b7f9f52bb9724830ee43c531c66e6ff37d8d897e9173acd9791016159495458c60d9c56becfb466e904af1ebdb61fc12cd967c7346967bc1bf494bd538fc19f571bec5575d0af2e1d4a7593388cd62e73a89f5172e628d20dc3d8fa6e87edbd95470a0f6f5e774102324a410b5f8c8fb2d2d9b732f210a8138b48b918c64b0be70b7fc509adaf583e6877a8b4a2b57d40c49178e32191a693b76e79d0cf7c22e2d5b826e352a9dc3839985aa2fae37fc40a610712094e3624d4a4ad3507c39b0f323d957af20935764226a774dc98ffb320c2f22dfd890f3d6f95c39413e3dcd2ad8a913ee0400c7efead4fa8ac4875749421cab592d47a53e4cc6dac584f40b3a429cabdc1e0b9c8eb8693acfe6499aec127e1374dd30feed0830bbc59589f58c29582660b5dd5da855d13f0579fa4b8542fe631a2f75884bf841e62aba22108655858c61129d92a48ab51112c3c5f37b9b43a2326a3bcbc1e3a262da3be8e6918ecce6c97e74c4ec1dbdb9e00dd01936e5f6d8a4d7ad4eb590fb37bf6002fe169bd53b7f3f8a7ae7d6903e559e43451ee8be0e58bef09990c8f36ec07198e07b4547936b9d063cfd7fd7a85bc047009b6b444b35672f34bb53320dc4b5d4152a54caf675e2109296de39ffd9b904d015382f97251990a89cf9611fb575dc248990086d8554d2051abd5f4cb6d2a140f41528fa101d3b7b9d8228a97af9d89502c0a6ff833d711cf1e2f097dc5346d5a0cbd77ddcbc593825b52eb5fb89f1f1fbae4fb557e31860841595e632841d198122e327723b12649b5b1c4a206d4ebede20a995e98fed573920f643a0ac4b93ffe1f501bae58d89693c9971d1ec198712df5caa2188188b79cabab50e15fbcb83d2b4119c01f32ef6204e31f64f77d1ffb311f9e818c284adda8a456405534a73bbc96101d66bdcaacfe29277df92260d63708c248513c83b190df98ac57b973965dbf9cfad1e1aed10fe9c3ce1920da4b9206abf1832e18d4fecdb699d9c3a3b9893dff0ce347027ad4a582da09f0f2c7bca9b9f1948570943cef3e7d4debce31b991d4a81d466c06c6dcd3363dfb30d721528aed07cb019bf5c47edb468a498b894bbc70e26852016100334717d81af66aa18d284f77624893ee26483637ac1352cbf4ebc5354b073da0319139f017b1f3073f57fe030926a1bc9328af6c7c85b0a33c6d5835cd64a74d4cb916ebcd7645041fe076067ca2a9b0641114a1114f2d61e199fdd23fb64857e313311392cfeb28bd5659fa23691679f776086e30dc237892e638a33888ab60a3241b000e3b6fd5962e1c4693d67279fbebed3c21b92d67bed68b214e382af7fb802759a6252d9b18dc2f8444773820bfd755938a62c5bfc3ef87b4c761417e5aabf868e139af09d3e5262bcbc7e21ed1ccb3fcc16566d1409591065a80a9745efc00b645d58e7245dd72b580550ac4c0209ae07d3d9b4cc36d497e7e02bd6a6714d2da5a752694ed29a7aa188b1ca319976cd6f457dda2badb13958883e7d1017ae13d85b511c2485e3781eae6923a3c85cc58ed509843a57381d42070c338bc92ae785e01da8ad5efa4c57df3f60aa7701bdece9475c001ab16c2cc55da1206f0ace349e7eb6f2462620d484fd294e8eaede0febfd0a85df634d9f2af86ed6f297f26efd3ceef923b0191e03692598f6ab508141f436d18f97e9229ea743b638167bba651ef7ccdfe061bcc64cfd8f95403aca55f487ed1095673d8930c8c62ad291a13eee7a7360fe2036336d593c54b5c4708dc5a5e04ca5f078535ca410b0125aaaf0721ef490527d15b496dfa51b5118fd532e39b2290fac5c64f3809cb31d015de3738c595524a1dfb08d3ad4d35e5bf90ef8eb6b911ac27024bd0370193cac427fb86baa99bbb41f8f1b10d16222b8ea25eb62146b0f5b3cfc82d696ccb784e22d0b64ed4360dd5ab8080aa2b2e6555a02cf47b59f369e495209a016b2d6b0c453321f2c3b5b441a951ccf51aaf15ad00c6c415414d7b41e8f1b0af6b5e158705bf6436e69f412e68d1f08e6318df0d5ab8af9fbb43ac4441c80bc40bc1fa66fab1f78bcb5736f4708d85c6731003ff047f016b166a7f7415f005dfcaed9c048ad75681d071f82c46e1074de91936ea94867417f1265759fc26295307557ce83c7c0b999474174e5288ff752398ea58817b7226ba0bd65e5ac700ee6f8e1f9a963c713385d216c329c1d8ecc10390e161aa86080f9f7ef9c85f06d251fbf6841e8531f03310793343382e15300dbcedaba01a4c3035b3d4bb4ab5df6d23845d3be2c8401ab3b1172558597eff1be105c5f8c953ea730747aa369845ff995b5e74d1aeb3ab4040d746bf058a8c928fa25720fdcf8cec0bfb2b9f28a6b7c1fe206fce5fcb732acafc3db89ce877162b4bc595320f95e5144795e0d181f431bf4b735545e7f0f7921e60f199f93d1b467a97e200a4a412c2b5afa84d68537d413836030ba9a31b488656d6773d5d1653b75473e42f25d999ddaf51d6ba43e9165f1e341b71182a40fc95f3df3535abf57a71e746ff99cdfc283b8a1808441991589274ffeebe893db994c61c6175208e4c76a8b3968e448c1dca9d7bc2e293549d3942236304dc7175d9c9c9529a389095e934c4a461f1ac26d3189c8a9dcad2a58938108e99889e99eb6b6088f338aeff3017c479b349eefbfb97d4bfd4449df9f8a361c1db12179e20477c653ec53bd0e1be6db6f0b1c6e59a77cee3348519030e20719d480d7f0b4eda7787db42b9c374b51accb8cdc67c3644e5952cf0c679404bda816ecf37699d90dc513755cb4f7f98462b69f25038659bb3362c3c38952562070ecdfbc321b3072561f162c2cd58b48a6392c416929ed8b246c0bbe21f242f71a5d417b4dc15b9ed2a87fe42d5a6a65205b1b76c3348785d6768f4555fd2f0c4d72f879ef13c059e2b798cbde0cfea37724540d36309173ee8b37a04dfa8525b232edfb3e9ac86b2e53492b6876afca539cbf4deca4721b17b0eb163271ab0bf0a5084c65dddb9b5d847a4af21de6a15ecc45800d189245f7ef93f02cea0b86b0d332b38a6562b218521372a58b09f13dbbccecc01459bb364f177762ee0c5d9ac55177d6b8c37906c6fce9a94782829b713ddb2e212f447dd95ff0fd04165a55824ee1706068b5d0e71df725d9b71c1ef781937fc67ca7749353a624b591438a12123980e5b7311dbe5ee641ca12876e547e5dda8ca8adc287dce00088e5e1e07e84c730cd1ab49651a8fc27a0f98a34901e8067fa1b1e0fbde0e5b9057bfc00cd8bd2a6a2f805e3aae183fce6d6ef18b4484650983dc2053b48fe76b4b95c910711a40aebb9edabd1f3c1eb21107cc1c7e4f5baee77604a0bfd735f1e08c83c35fd838531c43496ccc4ff19db0ffad8d1d9d6cf852fc28635e68c9ecad109a95d37b83ffb83a24ea53e84b19b3b3004db1131b7e4ceae62bfea9158407ae77f8aa68a5fd15dfe7864489ad9eafce8eeeb734e9a93bded85b3f3c9b8096d2a67c134430d3bba12bf0fc987b94fbae83e0ce7749f1b63479918e87de3ac109a080cc82a73c202a4c8b0ab947b52ddf99b4355ecee03278343f7b0f504b1cdff0b724a86b6ed9e7d3e4ed509447bcde3ad9aa5ffb0d3736b2d57357941a10b2017fca3a00145f465c7f22f2e3f53f26e1d18bff20d14aec5ff405e51c20331c6d5b0b9c07a516d240ba3a14a9161b56293c58c102c4d3f5a60bb13c4b05fa9b9ec98752d49997181b46913a7652d7c86b6aaf2a0360690f2f9ce3c1b333edac105bcbf3197a56945674c6d8be140b0a32fcedae952c708557284c29f72262ca6c82280128cfebb38ce55973f2d21ba81a53a2d34a9190f4a72e28b9596a2072fdcd49e194f2bd122918b790b725800e8c1f4d1c963830d9aa1f28048c637d326eada038e09b412cb58f7fc36d86eeca02b06b0f0a78e6a0da9bb89ff2b6ff851993a95b9e122e5fbca9f060a86eae5708a77b1f19dc08f6b2f458f01edd1de7892fe3ee100fbb4798f8d80cda55452228750bb136ea4e27cde99789733e5ee657d2ee5508dcae60e50c953c85c359d7cc998b8a042bfcc085bbe2e0925348edf01d0724cb114e382b5596543d4142d47f9578fde409bb6d651bc979fed4527adc6eecc1e9463129d6547a08634796a4abe96281691bf06af669c9da1b0a02298758fdd0e5d3edd26099bebd8a5ecbc4fc15c6b8f5cb3265b4265275699cee568b6bc8c63352eabe7485b2d834ff68b1ca9b14093ca007ca28e1f1c07cd56dae5307cc16743bae5a6cb9150cd591e3f7b1f9d8f68032d724cf2d266fc77c068d68cd76460b06af12c39443bffeced4031cb2940572ec26e201587ec7dbd95f60571d55e97a3c638413b7dd6602feaf709545c3ba87447dae7a04696d2c75cee38887f9554455722ac7943093a4b9dcaca633f68a3fc451d693a154c42be9db73879dcf2dfbda418379a9ebcd3678e223b9fd8af90ef449f6e8cfef616cae1b9cdebf45d7f343580a84796d775ac466826b131f9b674cac8be3e087c9712ae5cbe86d0bf7dd293c3c827344266424c025140522c5eb4610020f73bc60abf8f08d5f377fe21be454a5fe37fe6ee50285a84f54132d0d690af5e5fa0bdbaf80925d8daf104b321d37c352280a957fe63d6897808f15403e03d3e1f3e47eee6a61b90e247b77b22c6c0118d3d74e77684e02770af533263d71289df1e4dedb1ed52c5b48001c1eaa580bdcbc030e8dd13df25853c3fb11dff96064646b8008066333ff8a4c9cca0f823ff8511c3a05e983b4c60b99c1a5ae0327ffdc06e6f7b9a24c555bcf7e56d4811a0633617581e9c5b64a92d54b541004cbaac945982cc108e2173cf7254791bb1680c39125748a7a93507a14ecafbe94e81fac860819850da19fbe52461ebfc6d1e29219ee7023f8c86231c72a1af239e9a8f666ab30ae36e769506f454ec70ac8c61f7a24e74ee6c20a5a6a8828634a6cd147561614750b4ffe83bca74a301d7785dc205d5c83bb2cc3447d8b4a8a6cce431fe2cd37a1f127e9d8b8e0a393654abc58ab1c423aec4507808ea803c017aa58d08b351c9d9f2b95bff285ed5978ced40588d63afd00b741bf0c62e6acb17dad19bde235c05bb7acb9e81b8a0ade705763381f99428ef02c20855065c8e0b49a4bf95905c2bd58795707f60c2ffcebd102375d0fa3fd9c017577d4f37d1bdbbaf7dc0e1f1d4a8a8607d0b9d6216a7dbb630512e089b2f78c2e52753261d97f79adc475f42879ca7d4ce0eb9a878db280f63fd5ce6c65af06bba3c584ff900c70ce5124f78cc194b9a6a6efabdafd36cc4c362a2bd48c3f1b9dfa2a7daed60f1ad9f09fcba2b875b5a5915a9c943f66f7c586647b5a7d142545b4388f081203e261215ad312d4ea0bba4e90df3baabf8e02bf295f56debade5360542b93ea6761f461ca90559d6e26652d470649e5cd19843efd2a6217bf81478d21f5cab5b613f4407395d3787e8036bbd18447670c04ba94347ef4ce8ec882a91650151a7c62f13bfa56150ca7c39f88b4ebacb4f8ea163d83cf9759a51ea542a5dd2b6f36f97bb2b353b2b0564b0ff285aee246103447b94f9eb24f9efe1fc844ff464a5221d4532311051a269118b7b8409090de6d9f861c5eee26d8d162c898392e327a86cb8bee00b48075304a16c143302be010be326ea2a355ef530eb2040d2b9dfc92a1cb68b519a9eea304be3519398d91a7f43cbaec6a834edd84231d0dc70374c0079017a0dcecdf63e90c8855252c7fae020375aebc0573eb637a579d99095fb95d889f5656dfe3ed57903f697b9f069d4835435c0072fb071d56284f19f639c9240354481fe988b9e0c7dec8b53bc2e037309896e04250ab22151394b2708f89ebaedae8a0903a541531cb156ab941317f83e9c1c3f9f1620255adf10afecd7624d997ca817a6546556c98c1f46dedeb51adbb8f341069a64e866bf67c07701850122f702afeb60b21c6dc40eae035887e2c9231b91c35f25725b2279e1113db0de6e64c1593990d2adeea24d6a6c493557ee25bbb73c2d0ccc234e6e9a22548bed660e0c9df9ad6a11366e0102807967813308fb3cdbcbc1fda48c6d73120fbd35f23c0c04917f25502b7055fea6afc469801204a70703eb0dc8239ef54934efbefb35e9156acea873b7ef6fe748b5f416be8dfe80279b3205755d2aa7308bc8916742ca59ec629e82c1357745cd51a090d3bf1150a55c40ec958039112ddef1b520abd7567f03ad833088969e9d4c70e0a9f1639de80ebaca0fd5f2bca9f311320cb83a968c787d80ee31f37c206d0b0d276a1ff258794ba7cba47e2f0d93d11115b118a1798ab780e277b866be7e1a1f34746bd45d64998cb13505f2bf86d95922dd9cfdb001038cf4a40ae5df45441fba556fcd5f994c80a9cfae8e2994d0121a85eb3497a508ab0cff1380eb8c3214a0565564c6de0d8c9bbba18ab1855f45e7f130ce983d6fe512cffbbf4a198b06cebf4222fafc84b76f42076ec1202df9706991511a93df42ee5dea2a64b4f8fe2bd8608d63bb58090daa08c3c02ee3369d353647856d01cb89f1074aa1272102a1e8d72f6ae2318a5d3bcb1016772804569c483740947d87c9d27aa66a39ad1d1739cf90753bb943483f79dd2ac3a56c83e7efaab5d0fa7f974a6cc625b1455476116f36ee8c953bb4fc39b366da01750c5f52274be820b9dc9f05333c5890b1a4b9dfab3b9e707a8bbb34183184e528d9499a366aa6993f7e1a6c7415f6373b8a794877c639f009b3c49197f388f98bd3f0ee5f7ad00a196703ca111a53e1fa1098d220f524bdef165f79b515afe4a9e09b772be32f1e4d7da24693b13637f71f60a430322980349ad414fcfdc14f87e9915d210e8b7be5aa3e09814468e0399d17e72fe40ee1e1296a89f31486e12fd71bc7ca61acc9e8d4213a633ab285c87406c2a3729c87fdaa6b0122c2c543a89081ddac4559b15fe59102c2fbdacead8a755e16469b1b90041da31270481cfafe0bc951235cda51c4d78924efa862efc9ace20fc7d344a321c9984a84d5152e0801b041617beec6593bf6147ee6ea9617f277175d0cab3ce8b607526835d64a95aabd02697f92c78c047117105a0dab5e9145b5700df866412e19b3823006598f4f151ea12f705a457c24b70dcd743585cf7371689fd2261477f6f43c8d4d60dd38e31d7355308a6ce9357bdd08c73c74f52ad3ae8ae18649dac59dfd16556967ad4d8546b77a5ce994ccebe8d0adc9134a9164a896ce8dc99faf372c91c37b15f67be0811ff4daa4c5129096f0cee24a18d1abbf8a41437a0edb4933c7429fcf5a96b58e53490b86c42ef1502ed39201a511305b30e1b1456f715b798078dc7d22c68dd41b1ff775d849977c5464de203b7a7ce54e57de12099bf566830d3a079732efbb411fa75a4a8b08842828d08f203416c3ad4ad3ca257fa0629aaac155fe0363ab8bf0221e621bcece73c86f369c66865f156396530b45e3d58bf77a4fa260710cc33a70a7682271c4fcebc3fdf93855204e4a3197031647271f9b6cdeca72a246afa79adfa4c777cc8d3ad5cd7dd30a6d1fa6ab7d551a53c01e3f9fe8bd617dc118dda7ad5e336a50ec5dac8c725f2db051200dec48788f09508a1c56c4548be6c5849ff8dd8dd1b7e2fb50241e034750ac5f5ece255983687d25ea112773521b80458baa6afe356937bcca7bcae8dfb5f80ca60a34e4b8466cb711002ee75cc90fc872aa4dae1dceb34a217bbd367d47fdceee88bd42b50ce6e99a0a21d831593bb45ce0cec4114e1e4a5d0b4114a96e834e3d30089a0220b3638c19476d5731ccb15134356999513f6787129caaec9251339bea5d1528ec9bccef14e9cf58bb8a695a8ec9c43e3fdf47a67a1721cd1b3026109e03dbaed666cccce24f26bc5e3d817ed6d3fe8780c692c22afaa1d571e8cfa53443131c48db0d2a6dc1990981aca4c6f49b3efd7cbcf1e40a8d518afc41d5619465e5fba9c334119c8750c98ea07838d069ad269b890b1202185a762403e14da6b17ad161e6ec8957e87483ece1a5df5385738d46f48a56fae2e42152f59a6f536efa29d80cdb9b862d2dc00337d4c06336b7b7e3c713b8da341612ece0a9d181e68d8875fda94e129fa2073b6aade5e9c6a12edcc8513f8a5618d15c8cb57b195f5978a280ffabe183fce0fc41d755ce7b5a7997c0e9f3f29013e608c1677304228980c75f85b8dc2462d3ae85fb18f89e0a207e7686dcfb2a2fda5a4767c3287743294a60e27febc9fd69b9fec0375176d8abf7b4ce038b6b9333b8e55c736fa5aff9944cbe08f7b9f5298574cfb9c04deda36c40696f8b9c687c8c65ee89c0f6f77a0deac359e63d719c7aafcfa62c69719044e30028e405d53a3d8dc60f02b040341d04977ca29d9948017669067f138bf8e7653b377cee03f733268c0c1f1cb5ae2d60e279112196b7809345e2a0936365bd8ec1a33d9f193ad6f7e889fe827b70a3c84d561d11907161cc0a417731225e2e263b740e5f408c8eca808d872abd02e9017f1dadb4aefc0aea602cec35f06ca2f450b3d678a074c365ff20a25ba1ed65d621d6a85319e2e5b5f1aae7e6f41581c1a9677f30607add910b4a375f4fb8810edb87f836f9ab58f462c3508e57e43355ed98f0d0a92644164c142e7cf0eba470543a84a575ddcd715e7f0f73405e2078c54e119fa20160bc6c856ffbac0e35c635f634e8b502abf28be70cddd80db0f2d992cae774929a4b10a6e324aaaa9ed625c4f046e2a15a409102301647784c8ad06b03ee4661588ae27d703e13464669cdaba0092443422319d96165b4275a0a53e2a4fe41f703428a15ff930e6b9546d5b32c77a26fcb62cb72881147a3443809fe955d8cdb043bb0737969c4a0f337e4e47cd985ad5dc74ed78e632a7370dc9bc7be535195c13dfba1c4095d6dc802a2477976f48560184b1059a3821f48c0b045082ab5aea41013a6cabb005a7c70b9e3099818803c1e6923d3197a3032abf1815928e2ad147ba18a71c6d5f07749cec01585192559a1511ae30c372d986405829b97001a79484d55a37405b622558ce786861efd1f69aafc70c6e49ee1b49650b4bd367e3a3dbe10470bb835e35b985f42e34f8ff73d1dd2648da70b756349f48ee3ad60c1239dc345d415f323259d3033e4d56347e652a3a6aaa8fdbc39c8750f508d4875c191748517457a4b79416340d1d801782df0771e6510fc1efebbdb214efdbebee1432dee1c7052c1202cff50f17ff2f3d8a057b405078e0379c92fab23254b04495af56a2abc01efe2070c4d8df3bd1faf094950d4b43dd3739b7894182e76afc27fd5e18a54113b867a931eed5cea637cd458da184090f6b4d9bec67540c827145ad339855e0a0fd62c9aab59e1012905a8893a1ad30fd4042a09288282c8d50792fa5b610372d298c62cdc19aa8bd8132ee658229343d52b3662a2871dfe1f63d04f2f666ad3ec95ef4e9974e010d76e0d761c77abb362f0a6d01ccb39f26eefbbdc9ddebcb4c595500acab4ab1690deee416f6341e8e11c225c7e97fc2d2b74fca88e0f209ec5609167571f32276a2b7950372c7e68bc77510db0339136bcba3abbe842bf1854bd596e28fe9ecacd1c55aa5e1b89bd59c9dceb9be71e958b891e1e95c0c0aada75502525981688217b2b57ca788b6e22da6afe25fbccd3fea950d87bce4cdcbf501f963737c3e7cf0ea260658bab047d72a44f37b6c2777fe177f184b78b376b166ec94421cd713d9e63cc159b1206d45832e5ba61290975fb3b7297c1a442468fe4c4359f5baed4f215a3c4f2e7fc8e55bbc89444281148bd46629b36c085b9832a91f3f99525fcd461ee59d6536f1331e701afa7e8185ff03dc97a5c06892ab9e8386577a45e1e0aefb4bc907ee6cbb46097f1d290a5245ccbaf1b7c9fd502fac5bf7261b0e1a05d66fdd5688fe91ea5cb92440c4941fec8961d66ddb2f2aa0e693004fee037ec956fd18ca5ae0074ced3fb8f9f3b7355fd461a43c9686688bd7d9202975de7687ab139c99105b435f51ed9bad18dc392c484af9a86e9bb06cfa9ee53744f797ed3d53c7472b98cc9e35434aceb68b91be3f8e3535d5c788b0b944be1dddd75956a82e37591f51198601e144f34f3de592249be5696e9267e3ae7b1931a2f6414056135b436dfc90b3424828af657b9b44b1f488b79ba4c4924492951726ece656d193a19a99f3e88260d854577bbd39524248adb4ef472539163b9032fc239ef6a53fa8d315ef878ff8126680148b26277fe8b2c5cc2210449dd6c9197522f1ac4b77ef617447e44872a6cdcda25e0850a555368ec4adfc4135e47e4f347374e42eccd3ea478575286ad5f874a7ce564a5d2eb7546b437fbb98e54e28ac8daf3ad9bef4b1d230e0cc4b507529b724769121c5a3db229ae1101169a74a6fe9e71cd6bed07cd6c28d908e86d25133190fa18dca8a678d1ce6eb49e21838d110e316a05ce58fb7c2f201cee98e9fce147817ebade9adfd31e7b9acdf2f58828af994c109a28ee7aab4bc67090849ca9f5650d5d03003057269e7a4c14b4df6b0b123a35595eef8f22c1cf165ee03cb2210e8d6e1fbfb4876f401dc28fa6da03a905fe1c14e246e31eeaff8709e4232453e4c6943bc1b08980ca4cd86cb5c11811d85e6cd39c3b9d262e1d6c99779b26144f7f785ded6f85e1a2cd36b2c8dbd1ccf523ce9c7416e6c3f5f36c1783eae0eab782c2902b38a41b32688369c6715761c215e979521ee57ba747308aef597b60849519d963520db5e1e7689999cbd258a9fb66711e9cc3d9ace25ffaa3301ffb1e8125427d06ea3716108c4b2831693a109eec8cc0d8a7626c8ca26f86b7f345ed0d8fd2629c602a3bad98875beb448d61c724d3201abaa0500ca1f2823620c55a03ff91f85c9915b78433531a408cdc033cb54d26aa231abe2c038a7ef4cd03cb291c88288dbd80f25e06b94d7a69ac5ec64903bbcf0b581fb27140633a2388a9498fbedb79f3f35402b8c0dcdf0287da2c85fbc5d39ae3dc67921b17504adb5d29ff3bf76664f7453af270afb880f4df38133f2dfcf7425b130f23837e69844d921508659d38132dcc5cd2af4c0a7cd5b09bd7dc934bfd067e8f608f0ca90ce34b792c0e6696d074819dedc2e5c9a5245dc4c9b9dfbd9d446fbbdb244131fa861ed2afd908a6b582215ecad1c9e5fa3407371fab2a76a97cb03b9b28662ad69dd1c99aadcd924abf74466fc54185006e759ce19cba9ea91807b6a885c3bb29922d05f474fb7f179441fee68495d14138719a1573d95c257f3dd40b21a00d79ccfa2fc515db97a567522d37f80df244fbc1d9c518cdd8a6191a3ecbe6454751b300ee1678b5027ba16d7c6807f11091202e02f872de3bb34e659cf0baf99236af06ebee85d1e821ab5b93839b8852b10d80bdb76b56add586e89583870616b228d6cd5524767020ebe4198f9b1be12b2c7fb109ea7b55932969d28a34b2fa4c86363d533deec2ffcbcfb795eff2e587e4f387f6d8975c759fb1fb10a946678d31efe3f1b87f0746b2e6149c7f55854e9ca3e6861bf0e9035088b71ace0984fb92c966367d72677e08efd9ac338ce907be5877c29cce25c6a5b5aeb28b457a200f8b6f2b740f092e34b3adcdf3de3a3ab1dae2b1437b3845040289dfc840708411ffa5d6869d16dea0fa3908a795a06fddf1ce5bf93e4908d635f0aa6d448fad01ebb1419966b516b38c246437f7422faa65e3c9a45e809884178a196297fe2545183a7496b00f5fd53017ea8b4d490180fdca022d24067c747000378f81e674474ee97566c44c406eb0baa18bdedc6ec7822b0e7dd8033c1008f909dc4c6f206d54664eefea9342e6d2b49120f424fde7bdadf67bc29e61bfa61e99323ec0b321f458071b690ceba65faec230d549364873f9c10e290072e81417ee77a102b5caf467a6d18be0c6141e4f3da4ca72a1526fb777205751f7f5188b1095bb5caccf1d3c35f996375899d94009651bc7c76e788e219892b8794d7b230872d5f7229a377fbb7ad3382b9e56282e5a10712f025526c65d235d7f580486ddf836fb9e920ad8413e8a0cc6895eb0b56af1986178cf286e595269917e7d5c970d288fa91f5dedce2c03dab1c3b980a57f0563e636ae3c217366043727ac4f3f9bf1dbcaa9fa696a2c85cb75b52f3f068095fb45a6ba09e893a955fabb5b05db89da088998a7f21d26590799c68895e054e988062eba38caa1618561a2502676bf2b3e6e552d30f002c8b5a55d8b2c3ce54931b2387870d086d7bbf544545b15252ca4024654cdeaa818fe21e402a9211afd1ed02bba5a012853203c0a2e4cc2a32563ccd4e36e1401910996c2b3b798db4c78e86f499e65701cdcc05aa8a084215da25467a4bd74f37dff8c5f66fca8108067826cede304467c16099d88ff64871d8a23685d62156722078923e52059a1df12278a6dd1e793b9f79d3c971368bdad43c03dd705fc46ca4a1776f7ccb377b2a25e319311153d1ca6069d9d819aab55f4b350da4d3376bbefbdc063a8bf78403eb0c9254b962eed4bcc2a62f4023a5dc685082ee2c1e13d1f0469f25b848dd30fa4baec26734c7410754aad12a7500ce0bdcc9a6dae6d9a0272d96c8e0a9fb13dc26cb04bb381f91b8b64478391d6ab6ae306e796020418bf917899e85a9423ef924739625eb4c39496e2f9f0c8b5828e801ddd04c68d017fe9af40127b56714d9db44e127dcd1ba41c2b890155d3d9721b79446002f09b6900e42bb375cbe3806a19b90316b34973a7a7bf5d3f1af83e3c82e451bc152fa66080207451ddc1b081df40de34509528bebe65ad8e71261b6ba08580fee4045d91ece8fd167352046b6fac4bdc8b46ebead841984abfad31313bee94cf4564b7198f4bf5cc74dfa5af2fc4f1184ca6e6b15d1dc77ceed3a715bbe836382095dc82d010047ccab0bbd5895279ef7bfb3e9eb5bfe12ce5e1a5a0883b0e3f5de0f3541901d32d5c0d6d66e41c8a6a018e1e3648ef8f608c1e55580aafc3efe48d2415d1e40ae7123ee3e9a8eccd8fc4a7ac037f777922cbd4ddc7a90bfe4d9de4994f5f8251b2d48a46e63c88ea68ad8e108cc01e46798a496575ce196663702d77892da34e978a3bbee50ab888fda48a735974ab9f6eb1c716e9df9fa43846afe94ca20eac9d1c97726f79464f5492e4fdf304e72b07289417ab46665fd405b3151f268d11cd72e78b0bf1f8e9775de5d5e1d69a934ed7f89143693640409781238a21e6262d75723042da98fb6eefd224ab548b7e4ba73dac3ab2d7ef83e2613c15fbe292c80b828a9b9dec303f2ef611dae58495057ea98f16881013a5d09b88491d49fda31d5dc19ea0bd2df40498c5f5f04b80844686636252aa54af48762eadede311c8944cfcd34cd29d9558ff6784dfaae6d0e51a4fa37a6e5ca8313b56cad478733e569763c309f526281174200f19666ff245ae7c636721d09875332a263bcfce0d4d861ff540ec70b7193f181f064ac4f14c891229818e5b87fba3cf4b88b1c83e5f6158f15780244957a8763b0e1d8dd5e4f5387e307ca37eabd670c125e609d7766f3540b879eae7b3f763ec99a671a6f43816e9dcb250846d13330e78363ae379f9df69c99f6998157306b90fae196d639bd5f2edf90ba229a140bceb69036750477ef4f4ba4a646565882ad8fd2d321b669d21cb197cdfc7c9c053e4460b6de3a1396aa09134538b1510c75c5b54fb03e195ffdeda4a432fd3db59cd96fbfc1a4f385234edd06e70cbc719049036d20354e6138f041dd64a07b8580d217a1ddd98a4341a96c6bcfacfd4a736637cbe0306b7e5445e9fa1feac80d70caf31d714c6a598b954bd45126860f95b9ecec8eb4031fe66b176ab340c5a5f3208c832a71f620779ef5e12a1e09398dc07d3f6a34a7ce55ec54afcd56d6f77e7f3e6367eec0409c22e502a8d7d940b1f673452146cbf229362c49dc718e7a7933a33ec8174b224fcda3b96c0888cda8e8599e424ee233e6c508b95f455e9779ea3595b990195e28fbbc95c2048a28e902ba8b3bc17cfc0535648ec426c9d7070f7fd8bacd9d5cae499a0869707ffae8c1f0cc7c530eb30af3ea3ab9ba42c1971fdca85a3459964613c681b0c0bcac2ec2a6b282581a117e7ce43d9e646befa0a7f6550678d09396f6cca24669e2c5317146edfc65217fc65cfd17e0b9a7a9ca14379f4dff94ed077f06da88f064de875a5bcf28eeb75679008f4a3f1e88986a013ac7af2d190b1df91fbaf6e8b54096ea5fe6c6793e4e0d043554e827813406db5a6e98a5cf66510171942eb776a3e6adbdb5238948cf08d469c8aa5913f5372f110498ee3a973734a7167ee10b610d110fcaee934941e2fda705c427d3546159192a3e5aed1636ff1ab285fa061060b0c088761bc24f31ec779ce42821ea1c05bd3fe790594be6bd66f8d266d92a98097a8e68a7466f6c3d560e78be922edda197c6231301d0bd1bf639d2cc0727f997984d24ba380af84cccdaf06fa68b1cb9134d7f57692d20875326057e02912bc7943538c929aa6ca73672f9bfc1975fa8ca466ad211c9c78c082de9017deea52618d71358add64fe93d76e33395cc2d1d174164177e2ef8967fc20c0abb98dc4f70c352fd1707086f4c474b4f75a1eb72a4bf09ac10d56a334472dcde5e385780465a660af7c52cc5ed74a087f3a14145dd1fa9e46c4562eed0b0da10d845ad84f43cdb16e29933699b8f7151925295133af3e36503079925bf2c9226bc3924ba24cb00a559eba2e6c0e83c50c43e7d4748dc44b2578463746a2683a46c9b738c3285954ab044f1ba182f7fea2bbd506e81292c30ec6458676c3f2d0e8be50097b80d075b982da65febb5aaa21b67b4f56e7b288533fffe5b2fe70cb97c9e62592fc1b57c741e4734c62b4b0d25b621888b42c803c0dfbbdc3fbe9159c1200f4d04344e01c69f4af521e0ef8fdd311c7442006951158c177726165953fc226defdfe53fa02219380da986f6aea4510c653d34aae1947da7985d8ec33c701e14be0d44e8cbf91484eaa77dfeee0dae87b7d7600b29d03cd2dc40a87d77ef6b7a3426e3f7e9ce29b828c64666c29ba205089b12e8be5b422faf99c3d69aaca324eeb732db8e13c148245070dcc0b0c40ab412bde2039806247ea3917d194a4dab4a38c2121d6c63cb7a007dbf6cff9d1f66b8d1759e192147e60871bf784ad363e326122a3c3a99a89640dd9d2bca85a98d07ee21e2410c006232e53c4c10dce525f993825ef0cb76158c00d491c4163f938a746574c23ef47fbd7c71e95eb2a5af3dd6b90a31819a546c9814135ee74816baf4bec9ff227a9b02a7eef466fd3bcb7d4c4ca27f54abff4cf3da351d516983040f9c566a6f39409ce801d1dc350e270274abcc3cad2152a7b4758b61ed0a650ff59cbe866d870d06cd591620c2932e97d064ebfbf3711b275a947acf22b13949672e46f5b60a5cbab86345d75e716e97ffe6962fe031953646b577d79ae47c1ad4cf941ac129bc33499ed562311f537d53cf3f5acbd97d4f093726fdae1aba2ebf0f3a78276ba7fae19a394412f369c26c8d6c0f4eef2fec22b7fcc3e4ca5fef965b8e905156bc9c20b4060f5c943e01aa8f80bfc1d9299823a65dacc789e9c7eb3324f5c7614671879ab02676883cb5ae6431eecd2df6dd8c90ee2adecff4523e34721b0221f22576accc2c1935e248e8a9d40ed9641416adf612b08302ec190fce1a6289ff2c227e78be728d33cb55e9af0bb27ef20dee38446ff06cd95d86c06e727ed77f70f32f7d0bbc6af8544702023d5c168e40de9c0a5a4cf4a9a52600a41ec263194d11da28384c3afa19a6f231ed7e386f594249c66638a2fa7f6130ed73dfc5633cf93f08c8b475bf97f01acc909b7d3bb3b3e1f72845f05238d2e1d9162976d3bd23aead318793cf3bbcec20cb262d69fccdc52af4f775276df583c57a21efe14a2ba97417381d9f8157f6dcf1b0f17070da93b060cfaa107b43a751147ba922507bc00bce388ba7156bcb5fa8de41f5cc84ae45f02107740d47bcfa79792b0d8c9e82b2db1b668c4462ca3754e097507c36a55a37adf5e8807c45301dbcfe094afe5227d26326a5bad783e28a6a7a16ec7af95b8bc92dd4714bd07075a98aac2825ced928825489c53488ffbdfe62cfb9bc1ab88104f7de6c40df5a25e1697c80af492561fb68bf100429cd740ed9d150949a2fabe3ec4cbdf5d25b82d702e0f0f561bb0350ebac17b116fa210e57c23d7ef7ff50d893c5f2d549d3210cff7ff59298f8710545d738d5b104698f5528fce5a4c6347556d0a759b67f94f5b7b00af16f7c5f9b1fd71fec985a92046a5c0b633112bb2cdde3581d98bf4323b417bdbc55a51384d21229602d8b5ef00001e5721d4359616174617b70f0a0198d2d6a3ddc013154f51ee1caf11504f4ae81178cd9f693d5ba0a700ddfd250399b47bd00732f3d8df153d5a773664864ce701e3de79afeec202be04f25c2c816771d02aeab6d9c827f677160351d8dd2f84565efd6beff073c4f5ea9f3506c329913f782f57ad2e4c7b0419fa69949c1b4878b2d27b118c976eb37c8b8f9d11089a2f847d1a5752792d4d2b0587800b37b9d0a704b3fd0a56885f805e72d8b32c1608147d09bf7cd492b813ccb28472ac61c4043c1b9bb2d79b63bfc2e79ff0bc8c31f1d62bcef48534ae9bf6f28818a1c8bd9321bad4cb432e26015df4da12e18514e331886a01b59b98892c4f74463f74241a5c988e9fc1ca100dd7a4715fc28818b136297ced8c4ddca615d23044aeef5f6294bdb2747af689add9fc4d20881da5258c15edfe31d4e4ba5a82a45a15c1d83372322993963af9a70b06549c5acc2305dc54a37dcdb8168da268b9d09c70f5549efed9443c1ec8c414c96f1d611efa1acdef88b2877fdce6968a55ed6d86208fbf29accf942b5ecc9d4d87e9c49a932c08ed83e488b39d8fddf261faad8bc0aa7dbc897bc7e824874d9b8249acc9540334567b5cf7dbc04e20a8c63f87053c6e82be5791fdde80bdcdba4a854131a666fa335a63fd80afec07b26a04217efea3733700595d93db35c4b2c5e5aa5cf21e028b073fc229d131391a3791a37d6d11fb2f6b1b10919eb8db8cddb110d29ef4f3 +MD = c7a74295b5ec39bb1b7033485695e8345c01065543131c6ed4df17a4 + +Len = 100816 +Msg = 6153aa4fd49a35ce3322eef1219231b37dde70cfe4bdd5d4775e287ade56f4378ddee50e453b75a8de7dc7a5456cd334c1c0c4e17a909eaf3b0d24677770f92f8a31055e427a1a8f9edbd8f5d53fceee9a1fe1da9ff5f22d58f4bbc301f6fa74e2b6d2e9d23f6eadfaa4e787dbf26808936390605bd417765579b53785d03f2d1cd31454fd72b72a7a40bd065e6deaaa31f4971bb71556b1ba06d96a09e61083c1f2924acbfb3e2ea618221867989cfefe3abeb5baa1f7061002f0059820b59e587a157145c24be00792de65fd5bc529819ecfd36d5e429eddd5c2af376675a569d3657172b026682417b896289eae5642869020d6357fa1ace61711f0a09ac17d644af35bab16ef85107953f049a0abca5bcb41ff0ef537029fb7d2cab66a191b978c9f069c649db3e3e9435e44e150a08646e1f0d2ed8669676a9bce902ed6cbd3f21c7d6c599935fad00f7977b96e4c6dcaa6b067afb968a6f71402162d1f15814513c8013b0c93bbf65f4aca722d577a1e3846b783f688c527e47031b11d82074d2bed45521d569023d9d72653b448140c40bda9b1654f2ac2b420c700f799ced20df61fe8f505e01e282a71a32ca7a25a661a248030473e902b18c163d6e23e9c60ea7643bb2812b0f24b95abbcfd8ed15167123a7cf86958f2620822e2e6bf72cdd234ac984890a1e04078b38dd03f39aaac5a2574e914e4b0068385422cba1efcb5406bb4ecc1b999130402c7ab1d5a18efe4893da2a5fa0e0a19d41f3d9566949b82c8369c0dbfc6cc1fe2911390fb443a98b002ab8663b478b456a09fba133e8de20b46e0dc7d0e71b399139200e6d5945ee1e98d1de749573b54eedc8feda191487b0e4196b91a0ca77076afd5e174061e631acfd44d76b09516307c7ebb66b29c61b346a33c91a4e3afe2f377b5c996c07fbef9125fe28aace48f05ee4734f5c60560786cce1c424f9e7ee44f2a7b4e2c7dfd933ee335ed670633014757b464aeaf3b5d573663edd385730cc30733364aa5fe26c2a219e2aec343f7f0b48d063da76c7fcd3e0dad57abe8f33c169855033eea390564346f6965e870532668e359341c6637acc38ac359061f231d53b33d92e8556ff02e9f803249f3d774ed04eba07398fb492c8dffd7f51adee50b58e1e721016810b077dc738f08e468c370dc31989f83ddf1bdf36ddc6cd736694dd886bdc5588a6201636fe137e2c8932f1230b4033530b9238863e39b74d7159908b7e329a727eb44fe706809395d044a77e5ee4a7b092dc5a40034311f92b6445bc2bbb6bdaff44896bc4b0552efbfc8f2976ffebc32f4ad308df4b63f2df457b8ee6ef303ea2416119cb3b493466bb16a8f5ea65f71b7e315524eb03b7179d906842469dfa024b55958c89c6529b10ec916e4cbce8f1e6d399768a97d26ead22fcc049eba989b2d5438b147316139e6f67229f47054d05586a46a286c14f24a1a0e371cfd9b3287ec84973d5db7aa41d9eb54a9ad8776a3e3c07db67002374aaf92e56b0e7191ca0883a10453f0ad275acb8e73edf2b75d3735c9daf1ba61d9d69f341157e25ffe8f7ef82679d7e9a16158fed8985b3c8d6c49751c57021900777f4f983eb6442b6bbdc32b393307b6d6dccd62168bad3a6945a9040ba307c67a785c882db4ea5a83882b99facbae6fa19d2299d04ab16d16718f1b7365d233c7d384678ba5f693bf2758fa236887d2aae426042c5ff02d5b144ce8f80f224f47d8eebfc05113dc07e171d51ed239eadaf8002b9394138220770bf3026ba123e0cec3173480e73f43009fb352d16dbc1723d9966eafc2744de3f2c5fa3ff5b67bff2af84ffa1ac35bca091b272dcb524aabd9ce2379a40cca9e29e54654c61001b14ce9798655703788d89505adfab35cd9275a1cba62517ff0d9db5072bd3a582d50721aee404fc08133a9541ba3e733f5ecc2bf3aa34c55232a307f60813b6abb5f1b9af88267dcff43e07c3d6df7b9474f8f76c01003327e436b3ae8bb1b1da2a16d616dc3c174482fc1e5db01ead4167948a816518000484d14ebd013e35b2c3defd714ad6371a520d5f8bf06c86eac9275bc020dcba5ca6fb4f9e1309a0b9f5c2a64b7e657b95e3ea21bb025996e4fc19e1c4decea0b4cd2d2cce3bb48154425a4711c16a536bbb0b2b7750666bc482e4c2fbf98e718159df6cc9e5bf56063c1e7640ce653ce049f8d35d7503640df02065d1fb6c9b66ff9a861dab9aad644577ba74ffd6b6b8032b9fb9eac12e25b65550e37f199cca00e71f35e7d6f5e2e10e6a0ad05f4f47892c07392c1018a067ec0aacdee5e41f103d8eaf34e4ae06b14b2b9eea3f75134e62a047a380b202676cf99aa5820ffaa0166ae61d44545418a6659d9817b6afc577d1520b8388c04740a4496d5e8ed132fa1a770b86773f99a8be738478827180d43104aea91b6e8a1fa11580dbdf374b6133de7a2b853da6ea8cdd19d2670cf2f035cc1751d8619252669baaaa7f914bd44d9903941cd2e2b45726c295e2d6be646614d03e5e5e12716b58251aee73c6dbbe1312609ca3bfceb3ed396374632599387b539efb986cf535b79acdba534ee00bf931118304b072099cd8abaa36db17236c3c145ec514664c56763351c44679bd97ea077e9a4746feb21adee2c63156bd63d43ef648ab4d159141ec432b4001599ba7e2ddb8e6c5d9c98a9dbca5eae07cfec66f30b79412381478491d0cbe3f4660e5142f053177414fa238963a4a3cd8998d35bc76613e1a4ca3da3dfd235c3a743c2bf0e3a9c3bbc0fc601e07e1d466d09322f829855932963f20345112107c62178ab1f8a233afa9e374a2a3444f8e1062a7523582dc27adb4bb7ecd0cc4a2a701c0e0a8cd6fa3771216c270e3f6d4e59633792eec3f5fef9efc9ba5761133bf855f1b788db02dc4e2a70c154372d1dc8867cb7a240b41d87874099ed06eb6181cc5b0ec55ada4ffefa5ddf4d53beb41c3b4d7abbcc873f4bba2570dce35904d22854f78d7c0bfa493a3b6942bcaa7d1c29b1c3838ef7cc0f317f266a22e58cb412e45a26681c44f69212467b9979de92f9b07a40af8b2c999356a5e0e81761ef32141fd9479594cfa9eb604013b141445252873b56ccc8b189b3d4866078eb4b2feb2eee41ff549a28cd9ed952dc0dfcdda0d2bcac400621bb9d9ba3af8f9390b2716fad7de1eb20b6c1e88d7d81aa8042a1430bd9714fb0d01ce28000e4bf8562afcb5e24c3c129fcce26a6bd298098285dc36f04e70c25713891667900d8f3e8ac28485d2d3e7da2fc406a395bf70e37dd38325628a34945fa919b426a47a2eb7170b451a8cae34f531f221a9f77a918288c9af6be7ee4f569c86784aa735a140489ea28bbcd24abdca915877d68307346a5f00c3103be288d1f146749c3e30b6f5d3209efaf085f9ec78da97e326cef406d7bc2079c9e876f7ee912cea10477bad2d41ccbd85713a162d0a7293d25351dca853ecab04db916ce2daec1748700ebd2178bd7b0d96eee6027aa07f122ede5a654a801a694678af52962aba3324f0c44457b9ba056198cabdada9eb72dbea1e8312935e83939d4dd25571398ce0c240fa416a00e95bc8329315e79f50c50587864e9eddd04d6fb6c68b481ba22df3c1d7d846d635ffedcc4745f1d14884c123e350fb1edbfe7078c3ca27d71f86e5b5517ed8a087c879e62ea04147d695ad721ecc3098030130124e74990251664899fbc788063b400d1eddc76e5977721b00cd02f7efe2103f01cb2d0413e4567cee3b24dd6decf117e4c92dc18c97a4aa4e42a7897d0585fdc5ce56019244d1f3309429514e09461ac67545f357d397cbc9242c9dd5c9dcececbc8209f40f636bffab478c3d0cc9963266a27c51a7d60fffe6048d70bbaf8cc53a3395bf808517b9c501d6a183f60ab711b5b50080e9e7510cc1d0d457586e1dbbdd2d5b54a1b6dd85ead911fb55f8d30b1245caeb4dd26b1cd7107739820124c5f1496e085399f97254fc04df63e104b72a9737637c51bc7ad6c4efbe96d698cd12725df815619bfee2c800ac9a43daaa7131cc75eff5b3bb23569473116ed845b320a1c0618e139016b58bef8391a369789e009f233eef625f5e0bd37c2a61c455dcefddc2701eea636d1d149a6b2d58c3445a5bc08dddf4ed33cc7c51a9d3dd6d2f8ecca2c81c525b271ac85930a70cc3bd50181272fdd74f803cca1c6d9cd57b610509acf67a5c509c3b574a72cf0a0c718860c38ecdae08bc034946d62b510349e9112b7bd78cf634c55dd8b1f3b5000959c24e21cbddbb5f86666b741de49712b17fb8d8b258be796f489e7eb3b240dd4ac90cdc86eab9e35ccdf4e7d2f4a983e491cf8d79441be28fb416299d664175d1c19a2f8d4986dfecdc7d71e8f5acf60913fa1abad390f8ad0cba42ff65745b9568709b2d9ec4bdcd1e5fd2de8c33e18562a2f0e58ba0345ddef56b88246c06fc0a2a90064ed5f56400265b121cb0fee01a64b097d0ec2e0897720396279af07c4312be95ee5d2f483e6bab222bb676af87b9da2047b73e33b29a9bc7e383b09c9fe3676ad1acb3e0059a239d3db7115a471cce3d54a3fd65dcf9a48becb8cfe37cf73ad3ad573bd2023c54c1c7252766d5081d4d8c34d42562f9ae60a79c96e756d8a98ed5df1f84b0bcdf6e5ca3516bcdf637cf62dc6af8e12529d4a8c1bdfeda0223faefc6e77eadb5f3c1629407bf7e71be315d2d1a36d3f6975664aa9db062fe3a866f812c36359262897d89b2f883050111ef897a85b80887646fc9ce928e477ddfb9a0463204ec7c1501f6fbad582ab0ffae83f45c09b57a9d2e91b92bb8583e6572a6ddf8781ed0f2945e4a248a5d4e48feaf20304597d15f35b4f5c27dbb2c960f074c002bc3e1b0b94217147607298c745d8688f82a3c28f985fd1d5aea9900033428df8c562ecdc524fae3c7d2d34894318fec9de70b98fe974792bc613431e3dfeced165028a86c895e28ec2afbebc2adb4d1b348d01dc96b6db92ea96e8a254d10cf464c6feef3e1c94a5f89d414a4348dceb4ea1a25ce74c7f73e4da8973c1e3cdcb8a554f01fb0b4ce9e7a2c21ad68833a2f255a5f9245fed347a882d7bcc5b9cbd9f5885a2498b93c256644b142bc2daa9e951119a9416ae3f7548dda1bc62fe326a76a9bc6ec4ef980e8be320891f5a66fb3cee27809a49fa9cc1a0cddb1f7d92b458c236b3ddebd3d8c093263ac73943efbf4587301246cfb99c7ee76fbba04645a5d8f860ff0cdb7aab620e84e102a78f811da4eca72e2592807fd8c15defb4e506f4eabd51dc18bcf358c0b0953afaa12b7e65fc818763f116ac86192ef3455c231cf412fce2f368407d25050d6ba3ee6470b2a7c7dcf39c060cdabf56336171a35bfea627a6d2443cda23cd6e1c0c3ed5fc7337a2b23c5bf7a7bcfafc3871ee2fb6f0c2fbb11e1a8d76a34ee3d69c59252990f23993a6f8928615134888db996e37b2aea08a40b0db598ed29120bb06fd00f221b50699397eb0cb5263ad093a09e52cb23db99ececf8cca9fa382d10f05877f0b3d947de8632dc8ff752f619ba7c84716fac7a23e101641fd3f84463ae4c820fafac3bacbeb06f262a5944d83f1e9e921003bb3c747ffd9368eaf835043cbbe34131eb8abbc4233c31c6634b98e4ffb1c779d38301c507c91b78aee18c9963f02b12ae04f7ee97269022c7e062702664f87769b4236101155e29ef05c1f338dacfc719881da04979d7e6f9232640b1002564c43c53e4780cb3971f2e2ecaa8e7a1b7a4907779a89a7b8b6da05ec71e37d0faa9881dbfdb13be18d5a73d9012cb437cd5caaffb332cfd989bd47683cc607d815023db63b8bec057a91d78e424da177f337321757795d0970a3bf7f75a0ead917e9c37708f828cbbe00d6b275db8a04734467698f46986ff4f436da235b6c3c37b5d9c56de0355be30e38eda0bdb705d5ea119d6281c9349c1974214eded626fece484871295cde7122c4e9cddb70a3a290f75bd913387ff17841fbfe1170c1f29dd7a91cbce57ceea6434b031dfd0661a0e24afbe22d797a7a65103cdc81359d8850907681185ce4017ebe4b6ba5559a819a12d0d7f04abf87a7090f2753aa87f879a488603da7da9b3ae8acadb2b9d59be75c60dac8194808d08e80da2c4736561c8e59429b8459dc42712ecb6a599b5691d0b4d4ff0e9e63a84696dd55343408fff6f10d7b1ce82c5d02d9ad165e731a5f15d3abdb534802f7da5918169a0978eb8259ab25970ff35243b63cfdefe64f1ad4c549a50dce4b85f1d174b6a13b0ca7dd9802e11c5699eadbcc5e69357b5d8ab49394a467b9a81a3407d77f70542efdadb6fcf7d34686ed7323fca057baac775e447622878f807d4b022bb730dc45b39bbc80aee5662223b2c4ffeb7e2ba4a979e0d66595db3b77ddca56a70859b9924eb175507a3ed65341b64d92d257aee7ae709bb6ba2240d0926842972155f1626f9dc523b9570847c701d0dd7ac530fba5faaf5d1deef95014e3d5cea25757eba5895770cb3822c5edae6e149ffd94ab0589f9a2e8c6cdbe0843f996b4e852f4997c137ed8698a965bc4117e688840c0762261cd403324e4199195357f8f4a47f27ee1970773aa82b84ba064feed9e02a2cfcf254fbc6788edd490f42ad4a7aa5997a90180dde850ac4c030e88b414382e972bf33de9fc732c14d41bde3fd2e676d053056c2faecae1cd22c42f660c2cc5835d7f32424c6d7f5948f2c25931c3f030c7ebf3f263b6fcd9e5ce1b8aeda40d994e115550bf3e8eacd4c1ffa92d0870bfeefb3cad6edda875347373a81f69aee3e4f1ce9abead001460cfbcb72f7f9d86ae7d70e839078babf7fd60480a4351690867c6a8af837d9ad465220c9dee208cf0b8b62c2bfb4d8216b209f316f99e32a3ba6503fb88af4518cb592fe01ea0da9df537ffac83970379db9730ab553c469b33d2320b843b1d154988a861d7c6769b7c1aec2465113408bf3188311dd4adda1a36bd463fcc2ab127d70087e03a6ad4958878fb6a621faca80082101a0d6f46b7b82d13800875d5ac6fbeb903a3be2e88a92d9a5a32cc4bdc2ba6b0149095c9518109dc1197056a21786a6106a978939ca49267fd2b41cea4db7c79d304274a31b8d908b822e256ce198de6b2f5a2ea1aa22fcb1bf3881e48388dd41e122bb0a08626ff3e511583fb7baeb0cf2f431b4aca8d2f7b32a92110696027be62abe5e41376286bcba5d7f0c6552725ff640d744533f9e691aac144977ddb7c9baed0458654ed06399a3cf4210ab37b0b0caae03aa99324b795e52be96d591e653d590d0745b5d942fd9951b456bc9bfe43d9d6d27863fd4e71750e88b7086c6a5f6882c0d3e9aa8fd5d54da8c0aa4b7e11829d3527d339fb4758359be34f304f1ce5eed685ef42c72ada3125d1e554337f8d7e8a3e499f681e78e84b7a9830bf7cb89774e3306993048f45520fd57ec794e3c1f9462ff83dfebc6fc0034a356088cac6c07614e69b6cdcd05804e290df596aaeacc6ec0c21f00c112106cc07da4701c2e2c504838669a91c5f38755426d40b8cc846e8a3bdfa5018960b886ed6c246d503596606fd04de6f8e32f490410fafa5784e8b85b92770ca499be532fcff82454bb8a338a74464120d7ac90ddb123c3fe2673d79bc7c55705f3d4b1af3089b5be16c24e12d31214d05985a939ae39ca32e1866496e03e551037a22f064e57b5feefd50c936d3fe679e1411ea268cb51985ea6ebb79c309b75bd9d37af69c089999f18eb76b33e3aaff7755d9281571e80f64bd9882c4aae88fe2c48152372c500bd248757358b95c51498d294884b65af30ebba7340fae2dc81d5ecc1fbdcdce6b27e5c9f84a66c6bb1023a22de36eb55a70d1b234abffce2e1309250637d559e279cd7c9f12d43066567e0c803980426b13657f2da08313e84b2e52afac2b3a984f675612b7e9e179a2062fe88fd4494f7ee1d8c5f724441f4d331cc124b7b9b4311d1ef9418f231d7d23d30eec52122d39ab83a4b7c8a8faa2824be5a8611d5fa7569efbb9ad3c7a6e3dbf9958e2e42ecd2d4873e85988a2d181a7c23e11b0c03a7b9cc1262b75b7fdbcbc32dc6c097ac1cdf1da92be2c3e629af701f1afb80071f2e1f390f016fdb20892817ed8c7389df54480bedfdcf7de340549c6237e46d5243538ffe667731689092d480e6790ea0c0b0e74a4e0f5ccb69743c7554abbed795f387cf4b042b0a8e8df42f630ab2e7a0c2bbaf57f5fb48a7696fb2e6486415a299c0e02389108cbf93e73796cb1f4a610809aba035d1e176aeb6a9413d1592d590cbef94889a75c02f3e37d61cac1fadeb51bdbb21993c53bea1d70a0c1be5bb82f93bf285214c1cca59aeb591c1fdd40714540d5b89afcb03a1bab5380f74d0eae953d2013d7641ffda1ac9ad295b7fc5c21d2b365bc2492846c2b74368c6a2330cc5b78f479abc3a3ffa66c12acf1db1fb677964680a5a96f19da4b0a0519be5e4102771e81007f3ebcc31904eaf1a5620d18c4836ee8bda4299f2025ebc4a9e0fb1866b977ca1c76e1eae8d2da2022cc2c9e86450e5396caa4613aafc6d2aa5d02868dece47063f5740320a101e619061def24b4e94ffb8a930ae2cf1cab8a7e5f3534e04f5c196080f50a9ce9ac54b8e8f5e6f78645b68cfd8160ad77b710ea190ca3bd40f509620aaaeee819d89989939614376d9b8d77eaaefc725e5d064938f221aa3fa3faa11c0914b019d4b12128bcf59b27bb49f46279fe465a083245c5d1f8cfd5ceb3c5bdfac31a72066429ae4ed24c3b0bb2aa6ecaad50f21d5e84c6906e5589defd77f665444eabd879492e34f37131f58f42158952b9ae0550ae4617cc64e43ba05fce32e0754cb1ba28af56a03392dfaa63609e35a81628d16c4a4e5a236d4e64244d4adcb7ddf8ed6f399c21bae533c9b655f19e46b3eea866dc1d5fbbac7d116e7b93833be717dbc5d4eebd2db258b5e2ff6bd5bb0cc09f43036c255429316ee761f61c2af2754cd38934beb482b6369063f2212ea9047cabc823f2146dd34435065beeab847a08415f566a79dbb513688b6fccc713240848312a0f26ffc95b0072ab42e7278ed6b65f3c0aa148bd16117ecb1cb0d1860bbf4969c4b0677d7bf1aecc600662197fda90cee5574e36053444ec5a0e6b944dbb15c858db2e556cafc1a8902fbd83cc56faf545c17788a978e6bccd0c6ab495e29f3015cedbbbf5e3b3261a8ac13482d2a59770074a1bca866b22bfcf5550acdcee8741b2f616e0358d2d4540f5956cf59a9daf524f583005db057682b4cf5b520ab725ae07cef34c56a75b79e20c5168e0f04aca0fa5a29e3e4f3b4b109968ecfca609eb974bf7d1167ba25c0e02f8d37f768996116be9f99de75652ef169b51cb3e34902df4b36bd591631203e02adc8019b4dfdd13cdbdffb50fc0dcaebe2a7f65f0c65233f1c39cd1e5c2490caf2eeac012ccfc0316936da1aebd5cc9971e210583b58d6f77817223729566f04f6fc553ec86f5a58c22ee937a70f9cff0d6b705368466110e4c606f50b3e4f2d24819b98a345060f7138a73bc023a288ff94c4d515c657f7ecc6d9dc8434b7cff60efdc34ff969b1e0d4929bd9ba73c3c30e5c51c6413228faaa195226e21f59f604ea3320f4ec0cab9349dc261c973c1238c55dfc5f762098e043fa65bf0c57aef3ff6cb8b0036c3be52b8167f2736e57948e5e1a69aa8b31f9f839c333f5358b6c9bd499b3565d1c6ac60001b4aeb6fdb225d6b30825a5606794a4b1d9709015cf4e0f26973b5bc76487ec75eb8fc28f020a5c58a39e2baeb9a7afc427f4e3c8ac8480f1a458e4b7830fbb46ffbcfd8614da537de47a6a7740bfdf7c97f8ad3e84edbe7d9305848746cbd0f769bce47d5ae4609513210e54cd3b984db1f268c1d8d82c4ccbe7b791102ae209d1e5f3cf54d6e820d84863b19fa98eba0e88830d28d26ec1b765fa6f8fcb52e0a0eec80693106eb3ac47273848981733f611987ae57ada8efe06c99d161b983e5f2dcdcd862f78cff7b3b5334875b65e11341585af2014070850b19433aa46557539715eae927ad853049a4d2fc1009ad84696d7d6608fcc5eca2edf68e5d1d88b885f648cd8096f46b042d05f187a7cc3ef78cc0bcac24179e9bde9365ccf29fa90e469a16e98f73b5d4b8766ca88765c9557ecbfbd3ff8d215cb4c2c8d92ec4ae9acc87cc49df2a94210bcc785bf1a1abe90a452b67d650ff4f372abd6c1721509151b8f88acf429253f0b01a882ca86e1dfad7554ff187bfda2e744f6df7db165b9dd5a293a7e337d22cca5c1781a1995815288073985bea67634783c4141d89607885d04caf340a068ac145f038b4b50122e1b4bb13f4075d9c4c6359b70d2f08aa708c9d2e5e9358d13eddfc990b4982eaa9f90fa9799e24a22bf61427d393bcfa3fdd6e6e885a2ec8e82d21ebcbdd4235295857a41238243d8b44deae983ae2329acca7b5dbe8f139683c48781ffaa9ca08d87b4ae95cc43414569d9284aee418285f304c7fc40aea65135a862d271f73ef8263e423926f516f333b1cbe76287592a0f17b9b76dfa388b83d5e1dec0cf6865cf8b9eb628a5a44e39e946f1a18107f97d3895887da2e7935db4818d1d81c7471201367557e183a6fb042be221ab3984bbcc0dd7e6252df921a8b465febad62c6c438bff2b353fade576dd417982485c4956653e3ded662d5e471ce1dae71f765cd711cc191d32c387d5fd881f92ced0a47c4e13fb883ab082040d8938730dc552106a64b815f7786095ef3e6a5937926b922b01857216232b6418e4adfb1b89eaa3f8417e9c183cfe3b34dd00421d01fd2c8e7f923782f5c8dbc16c91fbd34494e64dfae32bff91bf3a60dc67e9e9afd7cfdaf67844fb88d8ff99898ad1cf85cf7bcde96c5228172217e5c517bd181c89e0a30ece26fa8cda33f3d40f396abe28c90aa5908b1c2dd558561f863832b891f37910fa5a1a524b1d82c4857f2f5e0f5286a7e65366563770145439e7c4048e9ccfb5935ab579ba20a8e3843fa80601acc478e4377110d6f3b2fba9484690be3119550fb5568395c1e8b991e74f169e3c469100a3e6fe2257b48e6ad634edcf54e887e5d697d07c85c4af25029f3043857f78c215127ea8109b74e52e096c207cafb6bc4ad410bce0bf4cb41e12c3801cf198bf278e02d6c2ca57ae9c5e9c601ce179d99eb594f5774b0ac5964440d2672f994e47d42b4cc2d3af3dcd8f1eecba2039e42e970db49e0a71e0079e48b8f89bc2f5f27f7868b549d4091e253444e8ee8f629702cb58e9501a89eeab4bb245b8de4cb3da4ab8fe9f7e972aabad070daee2bb44735e70cdce5d39b7d5ba4ce32923c9188f42cc2346f77e5facc991acd3cc74d383479adfc7b265ffb824e7354f3be17d08c100a7d2e71549831a735b0fb525b09d171573fec29522bd0c2fc0ad9f3c6dc175f510b5c5f264d9202a7cb52524683b3d9f4eb6064dcd7ee07529c6c6106763b217e2720c9c3e197b35a666a51756e83b86b49fe6066c583255b52d3924064a05f7919a238931ce7c134c96bd65292e817a4a1efa456be38250174370eda6fef212a290b34fec62b341f3c7c6a44b68bfd873b5bb8168ab50e2b49bf5b3e5fd06d799f83436ca60a140206c594b3a41372fc5e69250cf1a1e8c11a9403d2fcea4d4ec231ef45852d6ac4706fdc0722297feb534172a2bba4bcaa2fdd8e000ee6c891db3ebff12b3b3d4fc2a2caa9f9752a3c630c273faf6791d0d0c3822f5c6be62a32d13bd860dd968a4485e7fff19e7dd7d3f2cd4a97926f1a456e69c6af22b0010f13ec62ecbb7c5d3d41ba72d14d80a4ee1aeb2d39cd5e70d505ca2fcfb32dfeba2c59f8967cf7b0f7fdcb6b63293a8cfbad094f5dbe67bacab02ed184c5660a7a430b0027c90f6bb8e2a3506ddbb37541d2af18cd1091e06a991c149600610b998088e46849cd77c918c98ab80af34909b266f05069e5cbfee51c60cc0e28eb5d0c5a0a1ea538ba72c6c5820c5f03ee9b74b53fad726961cdbfb61def94c3900f0f08dc1484591dfa15209f3082ea4e3f42256dadd2278b214d73b3c73d38e4f6b01bc0118f3688ab2c6148ee1ab04f3d413de21831273240b7da8b1cae91cd5c181a20dc6ed9e4cb3410e70ccf5edbdc9b8507b639703c7326740bb692d635876f8d633ec84a17a354b6e3534bfad9667885424e90099302c2c79c5d8f0d03c0dcfdf1ff458f0b7bb5daa48b338f3021ffc6fcaadefd1d35b25da7d84d401f4f87f132e78eb2a69b7e04927c3222ca5659cf9e90cc51c4541fbe92f07576707c99f18ebd4bbbd24ad8bc15edeebd8e4cad288ec9010f6ea63070c66dafb8e08f3a856d4b23b076d1eb8b95a80f67644d245a361d263f05740efdac17a20d56cf91363757bf9b7a78def87a733e29349fe6ecfd53e3e77006e0edabb5f77dbb86c78b54aac783c587d98c2c17230ae68b1a664a35df1197a4cfc62a115610f5fa030d2c0ce271414606cd135c65126359e9518789c3c46296031293f165cfed736e422745b86cd5fd8b459709ac4991517a331b183609b923a3584d1ecfc18b3b30b4ae1cf27c69f3907c21e8a2b859bbf6976eaae1e78495d721c0603aeeb89970eb275a38a9e6713ef917bfed66a3de8402e8076c66ab32c9f4547e4f5f5ad4566efcc731fc32bfbc44e357355b58034dfef1f67e8e16439e597142b51b5a350cc5932b867c362533e5eb7823a05e727812f140bf68ae0f81d87f72142aa104b778564edf32daebcb6499e95e3c9f732ec750add9fb59e098fae6d716951689820fabf8e2240758ab4a54748f37024e97a37605714f00fc0b460e396163a00b9313fcf03a5ca3b5fc1f83df5e9a6e4ada30cb10326d8cac034560609d9c29d4120cb0ff8de2974ae56990f3726ccdb020f6b896c15ce338a87d42137349982a28802fed84bccc5f8fb2e27874b506c8907ca35ec924efe821781d1c8a71d556fdf9e182c6f4293c2281e1360b7d01da534af531f0ce960497be5a418c1cc79fb8fe2e85fc929529c55ff5f5e0cda62e90e817d7de61c2d331d55f4b1e52584f81187ec0cd9cfa6da0d3867c9bacdd0c70df6f183ce55a9e18479601ea1c6fad82cd39f9e21c3f51dc65fc94e3238ebb1bb567bcb26346ad739c652d9881f400e0a8c7f9e2194c1da19dbf056039a184b8f5668ae7e16e486b5a3695d08ad091c62e9088769c091916043797bbf6feaf6f24d34b846abab7280b7002393ee9a85ae9fd6d46ac5e8c6421cd119c628d846acc18c730031241d1367b3d7ba5288cc4607472f95133c0b27ce73daa86374ace749cc694b65e308e64bf0b3fc775872d1b5e5d379370fb299eefe18e69e24bc6a5c710588a86ca891ca4372dadb9dfbda324f7aa7bfd86f10e4bc6f01377cd77e6016c23887258e7e69287ec5edadd9b7f2c08f810c2a9315465b4768ddf190cbfb2a49db60a21d34af1c525e2c2c9f037e058c95ba7ab12f9a373cbde0077abb8427e6f1e376f73d129b77f4257ebe354a7aec66295d6bb846fca950ec42e7d5a1ac341c8df88ef02a226a385838a9d5de8d4962f7270547d30827d261288a92ca03bbabaebb57066c4d938b32df045da0d90e2ca28c2076d4d632a2dd1cb57b73dad83fe443e1e83f89ae7d53d6304537dab52399d14fadb3035452beb40b18159e2449cd06b20e4a42f58f19a2c0251a0ed8d86bbae554f40c07529472fdc145da3a49a79849f0e326132122e93665bde1d3cb968d74151e5cc632dcde003f8afb64b0226d0c28b08f81d3de0df59fa9f0506d88ed8e66a8720b642659a4cb3b9e3e2dcbf98b2e190bcc37c985a02b54b6b94ed14f96b218e85176df7a7dfcfe2f4112e2b24969b3075c9d63e4a8a144a188dffe282f8ff63c32eb86b4de5d491af7f0254bc973e52eada54bbf8189f04d49a17e0bbb78b6ca2a22aa9d5864830ded55f21a8dd545de49cfcf5acd5dfe266633cf6ecce4d12ea1ccb9a87e9b52647ba4e7a2f8f65b92bb7d8d5aee85b4a988f760c5c65cdbd6243a424aa37a2dbb3d7d5479bd5f7cd87d4f043457a9ba530c7cd0a54a594d6d3c0bc30889798b7e9d4ff7032d89403c09b4a28bab3285cf7b24ad81cb529c3053a1ca767321e22b358d1de3dc0c3c29db3f06a55ba89d5b5f9f45efcbe14eec05aca6f9030bc84d70b557703b50d73e7c5eaf35eb8467a3243d4853ce8debdccc8d0724bb8fa451e969224cedef87c66783ea91dd4e8b23539f033235a0e9af02b3696dff261cd50a190cee4630e46e275f676da37f6e488835251fa3d2cecf52b02c59607788435d3585b8e6dd73923631a41dc08f87af1c802c809b8c01ba4713ee6b61fc7d394d5f1b51424dabdf0ebb0f26c7077db39b0067e98f4538fc3a5f1e18861d720374e63c2beaf9f3b13b5c270d297fa6f28e5685def196caf1a6f249e54f62fd4e4e7b76cd436ae19526857a556a4099e850c304c564e94e57375de04620658586448f4999de390c176ac787840c02cd01ad0643214bb5299946227fdf9b8d8137f18223362dccc99472b2cd1d712ec6dadd60ef972892e3146dc07716234396cfc004a216b49ea0b8c8a7b9864c3d0dd07c93588b8e0b016518b8746e6a302cda5a7724b0053727e0f746db52ffa6188f04fe2c72ee761b07d19ae65cb2dbc9d40b6a5996922ed5a968f0b1180e025d72f101c9e1bc7c867922b85b659f9ee4396d4e8f3eddde306ea835c929f9da6308eb6ebf5c9a76ea4576c1221da3020296faa4541d6acdaecd3f96821d3586cfcd3e657b47eb0d9cd95815f8f94f9dbb693dfc36b6ab85c73189938a76639fda4c74a69c3830a934c141574e6d07da552c91c6a59f229f003830ad30a9e69e38e328a280a20dc24879cce5710d6e30965da0943f4b5271f04daf54134c410a624dc4e9d729c4e12e8f55412f3ee548c578f4d5522fdd96fdee6018b0b1f55cccd8c3dcee1418ae7d5e650ad7960f8b891ae91a9cc10676afa6fd7b879f961dff00cffc54055b52ab8396a2e8973f61479ff7c45db37fa98be3d1ed065985c67f7223d8a7821fa64f8b4499f0a717728784cb73335baba8093177fdcb6456dea49979f236fed7f1cfd209607e6a0a27df75be97bc4e1ceaae2c6a2e35648bcf24e32cc9a0f016cda2f44f86f0449a09a5cf5bb236ef45e9e11132eed2ce972066ebd6df73fa4ea27f6ea18de4cb3980710e2d5351d3a94e58ac3cc032070b7af11fe2940e61f2189bad89d5ca628b34d7ceadeb8b8fc9606b3a1232b1a24b2739fbfa97feeba388ae3d730f2faee19f307d57fb527828c89f674dc6f024f8cdd80c694bb3ebd57b2d9af79a6304ef181186a5f3352149ff7ba039ed7c0376c721cdb93fdbe70a88804281f82309063801972273a21faf6d66617126a3d247bbcdcc84e4c561b5094cd0acb8ee2fc997771b67ed37c7bbbb16478df305f60e14226546cb0ee057a5e9a1c24d12fdab8ee88fb0d044be1130d1beeae310f32c58c634696316e774c6fd427d353fd71eb6dc60c7bd776722874f341277636e14f23fc6773d8beb9ee4ee4f37f1c360a587d93b07154e577226d5438f106bab6a98e577facacc71389833048d135c0ed27a557ae978280372981a69db5e985f9f855de56e8b56fcd459722ee71a58562816e7acf946930fc633651361a287df26701f8b3d0fc9f2e491121ac06746bb18e5f64db1111db0cfb17bdccc9ca8ce81b190c5f0b88407fbe79944c38aa5c2175007d9ab5836ab017a9532669d799253f25842342623809cb58e594b1503ffb5fd92ed329c6c630e076790ea3588beff9adc7c51d90711199347b4d166efb887373dd5014e2d5d47d05984a1f544c8f713a3d0d431cd1e25098be3f120a7a0dda55f4d71fe081e416de19a384d3c34dd1534ec55d0d42c3170916314b2ea3d5bb07d931f2c7b1a7d58a62e17bddd8703e8162b3126cabfb1611ebec69e15e273f12f626349f4d66e090ddccab7b7342e24be1a10b40f3d37637a539152c934a8dfdb17d8d703c695f78f12bbdb47c09e5393355f09104935f03acdef7152a87cf507400a74368f87bcb05c85891db0e6fd3c0976868c583f8fe69a3b6a70c262a94a675271fb85b5b0f836925187999a6a2f1311bcc1eea6aaf4252fae71f6fc850aea5b80d14d929cfd2d7cb533cf1b52d2ce9b2c5f712dc9fa0b16ddf4ca9d10cf658001464bc0a905adaf34a0d60c2fcda89d55b38417754ec8ab5967c1e6d50e555a73c904a28dc83394504d52cf69864d72b97cac063588ca37a149514c2a5e366568d81ccab3ab5be68897a9e7888309c5d8093d7c733eac4656280d4fb925851b5101d89bb33582f05e1e6fe7154a89f121e7ccdcb6b6cb71d8726a63ea0acdf6bcc4dcb7e4ed455c315ff94088533aaf37a6dec998a7c434b8b6ed1b35548d821c9fad81f1391f84b2bafa766a23883a89b4f7a5618812f97773f9f843c92047e100afac40af8e0442edc81b23321f3d88a08c02d9be344a8528356d6daf32b2ba8677696bc6fd45723706815c155c22b4d8206449d094a2724213fd4b9d414cf99f797bcb05f9e2c1452a5b7d33cb84beea394c3a55d09bbf501a2a3609b8813eca4a45e6e31046a086a80bff13e9ddd7455b1d33c46480dce0bc76e57b24f9fa854e4a67f4bcfba08a04055a3c3388ce87fa69ce82cd1c5b627f55b277f311ad5f1a0ba6a17c7c31bdc2fa3723352fd5109bc4534776a8ab63d7692576cf62c7c6221c2b7fbb32e490693cee5f6b3dbb7da38f6a590dc04d535903c6fdf657ea48face7ef615ca29a06b501857423cc23dc65d9c5ddeedc1bf78c81f74247b855608c5099b08bc817c4dd62d8166a789bf68a131bc76aba906bb28878fc648297bd07273d500648c729531968424f892a10eecf2fb716453d7a497a7a758482738e679163a995c9b31b5e4fbd619ca4d513da338a13bc26290a9b7e83156f63f0bbf2b8942302f3e183472c5ddc1773a6e59667b34422055c04eebd1d44eccb172cf1c45726146f5b4a57d7d219899ea46f6a9432b31188df518b5fcf6ac563efcaabdd351a92e52956d379a482b9cdd7999ee290c7505ab9d7ba8b21efc0d2807b6a29b56745fc51910639597e71a7484c797854e7a921f280c2699c3ba6c0d22874d35f75f55ddde237407b7477d4fe6e447f067de2869333ed22c7b63ed7eeba1301bbac69b0d430adb592ce94fd01e8481e2ff0c430a3d881de2bc952bcdb178cdc52756b9c3f65b1c124f390ca5aa3ca7e56a817c82a56c7c44edaa81aa1292a8bab36c1c925688b8cbb4b33e2108615c6030da3f5319707fdba530a9749d634364e5834e08e21833dde3e45ee2b78701fbe872f60be8289b0f79a3edbd908f107c4448c898378e1fd16348d95b46322b1107e85b0dcff94068b190c8f5ca6aa249461916b0a55ecf3e995d480b22e74a3805a6b8e90f6712700363e5bd798a8b546160b2f2ea0ed48e1c9e2562dc1ae1e9783aaa2e44f693ade5b9ae654c630e363cdc17cf4412c2386387fc02e041849db610a93dff2c268abefead9da188dd572ed7cfb6620f1ad5f4b7366bbdff94dd65c520a89c8c4d8f15af4db727605b5fbde04548b26840df46885efdf3a9b5110dd4caeebb7b9b33703819523c8e2a88607212e6b392c6ccdf97f049ffd447e104abe280ca8e720065458aff5f66ad89cd29b310f4233f27364274c05103dfc5e0d711ff5849748e5b4 +MD = 18e0f8e1acdfd4d45f7816846c66b5beb77a3a25e90fa93d1292e854 + +Len = 101608 +Msg = ec44930e177c03bd4c5745c129490dc8311f07a579e42354a301313810a9ada85274dcaae04a18fe0e83675f3c4c53054d4df66e5b89555ea885ef25d8ac95205ef27b8235b89054d0ef0bbb5381467a03ecd0b7fb30be0222ec419359c47ed3f905991f7c8c13c87ae4575ed8ae8f2e3c46bc09c3a30647f77f500cfbb810ca09f75e071f8f4b61f4a873cf319cd629dea1e3eb1aa9d636108644172652f40c770ef1c48489dd2726838896c813c274d2466de56809d6d55549453d4258d2a12c937bde15427422f9bfbe3c03dbfb16017d817f168cad2eae0f7904b79351920fcd23db3881b65b53a33c484cbb2a17528e47428afa034904220bf7eecb1ae60706124557104bd91e762b420a7cf780acc0e8b52d1b822c3dc8219b4dc8d5a5fe846fa3d9b5dca44081b2b2a4e60958f95c8c6167b6d0e1434ae47a3d5129d8db91637e263911c5a30cfa2184c109a720aa5acca1959570fcf07b1b2730be868673165da66391432d5e2b1711d59e7509f27b80417e7adf52010e06712b3db7e672afc8c1fd0526c8c16c1ab3ea71cb9c7c1705b13a26382cc7c7c4850b4e73e5d85747dfcd14775b7be5b4d2c729b0c18f55e1579143837188ccdcc99798c36aeb3563689d673dcdd5bf6cd6356f2d60755d9e9d4a76c60b8d45d6a799c4ae5ef572a3c433a580081722ca28fceb49617458c3ea2f690be11e5b3b86d7793da73c35905b577748f38935572ee4440cacd56ed9a506c459db823591cd1b60772e09a7b095d3859e7673219a51b5237e29e0c66738982eb9e103fd63e62b2164dba3ef8edb6e7689791c0d1cf9362fa8c1dc89f50aad5031dbe7d83638cf630c975437af93eff312e4cd22638f3011915a13de0c830dd2ccb177f0942bd1ce784862a49d271fa3409fce88f9796b7041ddcbee330b7f5b8f4cfb6d0427f80bafd71660dffdc62f1b9367666621aff5c1334de0f20acc938492bb770f940bc2b92db893fd7fac3eaba6e0e430edc4481842e1ddd1e8bc24b26cfe343bdad39a9f3090647f139879f9c1802ce14771104ef4ce0d590d17b321c20ecf1361183c68cae5fcee2353870ccd906300967ff56c305e9711e2a5ebda7d316e1c92a1501ce20183d216a612ecb058b41642b7a179ddd7a481cd2e71e483b03ae0d3387dc4602a20b15456bfa2542045aab3deb97de5825b323779f047bed35ae68da36b662ba9fb15452e38359f303e4450bfe8812fa7e5ab894f0e0c15e1f6b629abc30d2dc63d8551f525ad7bcfc86d8321d48ba38e69742978733a6f2438d90d182dbe4dc80e8ae0722d13cf470babb4cb25a6297e101681bcc8d9b6e246d6a3b2508373f995ab5a6ef96e83de2e89498684d7a9c10218f7e3b5f2d16448355241d563879ffb7027b131c67edd598cab1a99280b9d6602f5b4e18ba8f2677f818c636772036761af037c23aa8cb63e424f0ba0375b645de2f8f5af23d3ca3b9a5ca3951a6d02075a2c828eee326a2676ed8247164226b0267798632a519bf104793df76824f4e991f3ec0e3218a0ccb0bba8268e9cd18329f973b1a5b2ff2927abd8954472648fba2262ac5e877eb95682224488af905f52462ea07c3f206c6bba1c75979d7a823f7f8b6f5bc52c74d20a9baaedc589ca0b25703897402641386db3a147ee604986d3105f0f1ad3858a1bb95ea324e44ebc60e182defd3931f68d42213ead3b6cf9e5988463d09b75e87d246a9414ca73cbbd2a853abd7fc30de274fb62223674fe7fcce73f2eabcb52f785d5a6df63c0a105f34a91ca237fe534ee399d9576e8ff67548f8c7b2c0f325384a8c3ccd6bda6ffe3d7cd6a4bede64b5be3d64d26506366d784300045caef57c8ead2224cf24275a336d4e6209679ef61fff5936c359244fecf15051f83f1ccfaa3bb2aece8de2ddb6f9086c90104e7a897e1af701df4c9707721d1e1c2a079c1dc662cdf26e0f13288e7916eb6f1fcd9b284e95b93f1bdd5843eaeb40f6428c69cbb6f4c34b287508bc351393ea6f69c59c588551cf1e7d7ff53e2c0f3a59fb1eba23d5c9bbab7de7f0b0c50208d9d98938cd685425c101cef48b62cf5cba729d103dc36e2624b846da70bdbe40cb87668c119148c9a004c5c0572219e3e08d657c69504911109e95c7e9603138d11dde04d9a2a82137f104e715ec674668a6184d3b0eb312ebbb6547af4ef34776e760416a1edad2f5510ce76c24401acf57261127515492327925e826fc9cf3298e9db057688945749f3e3fbe5c2cd7610b0f46b2caa61571626807f4db66c2657dd6d026021c0f1256196e910695e2da4c447c71cd101324f1ac457d7e094bb72fbc3f6a8e1b767af04ee268b613e3a7955620c8eb3b21c9c1532f3556fce59b3eae4c797ef031fb081f39b9ed1f503570c4b24ca78fb7dc3bfd13b0f8ba368e052d85f73742b83ef83ad3091e109f206910cf5184765bd8dc1a9174c5a9a50c2dda8a48497b8f936b025ceabbb046e4d8bad69c0487744c2c3c27056073b7921315b80148131eb4bb0625b35846edef6a3346709a5b97b2a6c252c73b80e4bc5f6f9da69591ec0f72c6cc07767cdacc780abd63d83b3c88c65d935ec969c2f75d58b99cc4808e002cc4ce6b98aab3f89cb19a0a20dee94b255e67109c86c8bfb7518a7857676b3343709b443158fff032b87ac8068f14862e555ca117606c81d80a8ebdc0af0a15516ab115c310254ff49fce221bf444a65bd2d274ecaf34fa49b444d192cfe122c103be74e068ba643cc802acc3870048384766f06eaba875770f2b58306296e82cebf1d5fbbb25d995d1b6cc8fbfcdc83e3388c82fee3d700a7bc0b63bdf81d1ff7429bd878ffe1c7a4d6905e31703c2f817c650a2ff7a965e8aa37017cf487cb34c9490167fb9b9548b87ed602558b4d0749e2e5a47d6450dac322a569a3144e2d5e0f21ad2df1cdf2ca1f78953131a61ca8eb5d87fd6f87250fb297ac8f2d6f8908d581751d4c354913598b138f960269a068b8fdff34d27296d01e6e4038f7f1d0836ae5541597f69b1559a3f422299539413f300c1afb69616584d73d9faf0cbc01222559b2b9a06a3c286eea3de2497b5f3a48ab89c8b177570f0e0ec85c83d737f15eb48d63f089b4419cf84ff62d6fa8f16c65e903f3e090083c3b1dc9fd260d21b8ee0c5f8dff67ec54a7c02ee81c05abc5c1a372d6a5f6b7884c04bd23b36cf95a8e997421d43b71be7df850238b5eb27b471dde03cd73631bcae7ff9d853ac06d1c9b6951101a1703045f2485c29c4cb57fc00e2160ee551c3d2d5812a461bf18217a07c7bceb274bc45d74b7cba5c29bf2f4ccd9674ed6b42b3e902a19c73e84249d162be096e9bd445b0660ae635c572722ded3e87d2c0b1e826f8eeb5684d8ad6e5e248202a5820cbfa32971bd610ea6b00db6ee629f489d61bde622f4db3d4454a65bac19a3c1a4f313ba1e9a1bebf808212a7ee57994314341d9c78b89db72b7b87865c22aa3955d1ebabce4d013a490e2d9a2ee00166090c410e002d7d9beff5a22b6e5845065678cd25482c9b132b2186861657ef7b5b00e3378410d60b1955501a56bf7ef9f7824a9ed5c4eeb2bd58a82c432395eb50be7e994307397d1df70be3d3acca9c8f7afe88f5aa6e9166001cdd13e7a74ea0917da3eb751a7a9467501833b4ba56a4ef63642641bd47bbd45f1926f8860db1365af7dbeeeb7be332a718156bb0c0ce4be3c0f62f3d4e2531e970faead4b108f9a105a2d93f09a0c59b73e7466053721d2a1fd3c7710d48a54674fe42f5d12e77ea4dbec887ac43ac87bc27b92b9726df90e15daefb1d8caae085af757bd6881d9140be3157cc42640641655884f4530fa2b5e24a3de777bf52338d16d949ac77307effb821e2337881a41e890f038d29e9fe003dac03805f15ff258b909311f1426911a168a68d46a464b1ef1c4d4bbad13a35dde7fa3d16a658e768245b4f38319f8291ae51b67ac903dddf5f2a054ef2eb01cf542404528dc17121270abaa89872c11d65ac457179f1e0fe2a325032b990e26683198caf26d9213afb19eacee1936b8920eec0c731cf69b01fee9312bfbc5657f7632c992c00963a23016617a761d08962c1aee88aecd699a2c7647b5fddebf813696a8ce7c83e933169b31f446e9e829dad7651dfeac61f55454ab9247601eb89c4dd16f49098da98bb3842633a23f9540aad9fcb39a6b599f09c78a8053696acddeaa3dd1a2374eb6e8c2d6e351f720881bb2eb76a06f10351f026450bf88e0f4d19dffb956cf68c0c153cdfefef713d7b258b3efc555603d1ec3ea61ad626237af107fac2d3d40d0c69fd32daf27b658f8331cc5110592df8c74e25824e137beff6d835030691e0f800fb0186e6f503074abeda18c67ed45f37c15e02deca9b2491bd44d663c49a576092b6642b72b8aaf29f02a3f64bb94da434b9fcf6bfe3b16823a4cd89c0bb930f60dbf34e78d8c2f13eb0931e242f7ca314b3d12477f80ec0a7cf58c72aa73373f1ecd4ae7bf5e7ed3a7e56acacc944aaedf63fe6674aa561b64ef8ca76ffc124a26358e9f092924cfec67f3059f93e222cdb99cb125e0d91db8e3e021a27c4981eda208f8b215a7718137d37a031d1af5dee6f310d94bff7841788eca8b1a654b3ababfd80449912030fc1210425a7b8fda930b6cda134f94c757a08972ffed0fd725bb2945ee6943bf5eb9b1a3718c588967edab6e5f51da12271d459e5369378a8c04d1be2bb844f707cf446d8ad5b9b30ba0b7de578eb0e9910ee8583d622a1c97a3bab729058aa09c5cb0e9cfdf181f262c7672258d7f153d7a59e8e55f5055ed9fca770fd87d82c869df5f6631de96619ad271eed6b05fd269809674e811fc3700eb4806b9856431fcb816775474e064f1b225ddf2a98cf9e445aa1285d5db1cce047036310a107f2023582bce40c5d639fdd41768d46759f1906be6bf04b84512fc38c6c7744c5bda086ba929ac0d5f7b9dc7c7c098b79b9b4922191d065c59d4bde8df042be16d344f981aec1f7fa8be794613835c4366e75817d228438f011a2ec8a86f97975c35e127a6a001e4590a799823388ad463dfa5923a662418e5ee37204a902135d0e5a46074ccb9041a67850720678932398a19db79610fc1ac57c037ecef2f85734d818badf8b1a791de85d93299c12591f09a39b6a16d50ff5eb156b7152b4dea7460ef78ad50956976615780549a75131a11f61aaca78e8509f2c5d3897b56e0632ad5fe71fe95483801c933237ce9660f6758cc0c2343e7626ccc67d38968fb20c58567cf2371d72a4e77728bcf4b33d782a8f4494b37cc7105b39b7cbb4be3b51b47da4c27efbd562ea86616fb61217b4c2dbce98631dd3da6c1980b7bc6412913637f7273d8a2c48aa6374b68f4d902ac314a763bfbc2ce383f860830a2bd8594207fc86df3307b4bb70cb27ecb027489fac678d45b222ca1758dfb41a7fed088c802d67e0a0d8357240dd4a6b045dacdd15975b81aa560cbabd36d189dad12d6a12f250ee3e1e49835643846694a3b5ffe2bf74f00f4719c2983e61c4c715466f42f3c864855a6f5313667c8bfb89f27c9638501d4b767fe36c3ecb57cf39d20082aa34cff10d25562aee7927a380e0d7a29a83660954ad81cbb094bf4dbf5ec2747e3cad0bb70a20ef1420e627191f958a7e6566a3723112195c4467dd064b297ae836785fe86c37e2affa23e0c2fd3ac02cac9bb45f9938e76a50fdf7af35aa1880b8ae4801ea0fa7fa7b8d8b0f183be65d9f71b66d545ab88350ce282a9cc8dfd049db7ea3f21c918c1b7f606ddf1d6f69d495142be0fbff3fba64d908ff0a334f507c4e3f22e351ed50761b5fe063cdd9d252782bcd914df8045ea4babae2b566630d4143eaf84b96c10e16659a8374361f463ced78bf0734a527f5c07ef6c8adf80ae252b8cff100d393ec1f8c01150721fcecd180e9cd7e333d56aab99aff9e95f1cbdc1adee4c40ec3f6de237102b570c302886486034d352b41e9d963cca0b35e48409fa99948d91ad131ff37dfd982551872a2283b2a016e420e7cc5b26ce6acf240a5c47117d8e505ab8dea0edbed1f8900a844f78d4e62c1791255435b966a542ccb942eb974cf0ebb4dfc0245077efee30570aaff62c55aca1886e1e54912e8958fbd0496333556d1bdd26c9d681fc47a481fd7e8f4f288621dcf20a2754319eb5083a536aac4689f5c21b05d856e8446cec700e26b76a4e180b2820bb15782cebcac833331d8de74b75e500df5e7a8c927eaa8643cce6ab8ffc5889973dc9d90327c10e47eff02e24decce172017cc81e21f50f6ff563468d97ca6c4335ed4d04096f0f2c8b380789e51ad11aa7b49f16bc97d1309da8c61ac4c6f24864ac31f657185b6c572d19817215f75eb8ecba8437d9f311297ed43e6b93432d31cd2de2f9051d8fbd960d146d077cc69ceac06f7a039e9702ad1802747a867a061ae8cfd67e7b1b243c8a4abe3687dabb775ae06c5df94c90fd396dc7c3e4b84a590bc5d8ca9d9af4e8392c4deb41237e5a30def72f2db73b36e0884db6846e64533dcce633ac939460c1c1026dd1284b5de97102c061606c1fb45aec9a8f24bed027ede8ffd08f6e6ccc12c60660718b462da17659bed089815eeb8db92c62bf98712fc7773015e9d6ff257ffc1687a7dea67739426c8efc248543195984b1cf72c29b69e3f5ad6d65040417981af105edfafa34c392222bd0d26b76c3be985627c237b78b46df62e083b7742295370f3bd1334f245815804dec6a8e3f03a0bc801a0d99b64c343110234480e2aee22c8fd42873ace7ee61627d4847147b4f6a427225f8ae2f3340bd8db5211f8e79c3b2aae386a4673538d92a0d8b8c4d30c6387185bab91665f8ae691241235c843e6dfc6c715400736c789dc241eda2c83929c037c9202950c1ad5e61c734418c048672c91d04d82e65087e6f5180a1a12cdc07430b2b927e048014ac9b9b65187dc5b30471fc1af18b50741aa28d7342051aedaf6a21767727f034faa5a0efb011f468255483ec41461a28cd1e5c3f332eab1a85cd4c00c194c56654cd8a08dc28d93832b0e376a8fe2c428fac342efd0d5737cd1bf255e6b1c751c1fba3d7252a3ecc356c62e1ad1b4f6969345f68270ce6ec8d3e5ca06ee8be9e49173185127fe9cb35704955d9054b45619f231439911fe0cf1dd207dfa071f4f4097d392c8fa2de3ba4e0f9b224e87f82d3c95abb06cbbc9aa09bb2c340a9fccbb9cf1cf9c333ad4ef06ef6c2e1eebfd1b9986336d2b227f7af01caa1322e5ed50f6f56038163df763c3d7491a224ac5839da57325d9ccaec324a7702ddc8c11af4a40ed232f91dbb70939aa5d053ef1e3cd55e350f514c8411bfe06da93fcda34eb76cec3fbe0e2674b99088d443302ba8d39ec9509857c434a82e6afe5a2b7707f099db0e7a5bbe30f77fc214bc1688671a4275883b90b6844d888144e2839e0597bd2709f4ab8c8c948fd9fa86493c5ff270c21f00a161e7f5173be3a07c2132f4ff5697f6a79671dae757ed68724f7aa550367db032cd46ea031f4359bf07744f88f21f46f7e6c50fb0c4542c39ca9e7a0c5b0a13ea038a7273b6cdd8f458b5ef80830bad4284727c11a6999845b4b5b8c9b92ff0720a99d68f86e7e4c21ddc1d0e8fc2f330765e69338723753f15a6a8b2d6521071ea5d5e8119fa44d15dd1215aa0ace06ac6731d3dee5a8acef55992ec3cdd3c90acbd516ef76fc1ca207c438d3d313c987c97e25864a6a19b5db6bea273363a7757a0f981a6ac23556ec5cbcfefb9ce629eb4feac706f804d54a573fa01c7d2cdf3f09cdfb01b3219509400473cac5f6e36b1ba609a1df08de30efa1c70f6ce3b899483b39d23b5bfcdd12b1eaf72b7674b765e9d6a18b90311d99b31482df5681f74f623f32b76eeee64947bcd739ef3e6eb328a69c9a356e6ee9e610fd30efdc0783c573c9d3b4fba3583872018dcba0ef87e501e96762f6a354bd34f4fe2a171889f78ffe0cd8a392c406a2fc73865cb85891611e8f935a697eab08f0b39fd3c8c65aec55cf4467332124b82e97c9c257a9c05cb28f511a1fac21f586edab8286cd7201579772b712d4352a2e76e0625bfff45d3bc336a63481c4931e08f7b3d103df7779f20e23a0719a91627d74cd23cfafdb10e78e9f5674056a2c91eee8460df5a7336b513d6a6dd7566137e1635dad555ee848f365e41766d339250b80445047292a6ff664ef4d6e11b122d0b547fd77611883ff8a6bc06b66da1ed82c6a5f6675b57c681a9d74e12bc8baad339144988a2814fd7d6c2375ad75fbdf3d06afb6057b2d20fef398b33d1e8be17ec8273b22ad7887df53a5381fa3487b42c7a5c850c1deab62801d66ae290317f73af9d1d30f1b28f0b0ba0525c89156ce2bf61ff0401d81e5d1777df78ebcbb2d8850ff13c3995b8211f67f687c42dc4f81f51f6c7c762f09663b6bc1a61545923eb1055d616f89e3d5def95034f986478847691dbd551d4d9ccdb26515a931b5ac8ea7187f0a4e96aad825556901ef369d516f9ca956c71303d2d47a43e51a18706e36ed6306242adf766610af1861ad4fa7a561c6d7d70a29bf5479b755692b18c44744c3cf8511023e4dfa7d89a80c0daeacf57c74a7837cf7c4ebe676a97e14255aa6f7d2ebd9a1a44f8b3af20ce355fad8c050a9d32f8c10783967d55581e105d39ca5bce2e53c2ced3b8dde1ab3c700db6ad9e3c46ec59e10eaa1dde7c70dea649e23f9e4e4404ca993dcaa5c0dbf55075d8ebef5b1c80511882b0cfacdf947601418f68c274c97f71cbde34b41cd7bff00d5980198e1c9ec9a79fee8f741a16896eb5f235ebf73684e981553007fca250d450b52a4c161148a05104ce3658ce0af117054db27737f91f1bd2dca34d41bcb53858335e57f2bef52dd8102e37e5ac531f68b2d032caf9f514715ff8b2e35d39792fdfcac689522f9d34fe629da5961b33e50d4d0f37acf4d4fb620e14d25be77b03d39a4a1d2dd507de3fdc7354f1d1bd420632f5c539a3c3378cee5954dd48a69bbad6cdf7766fd59f7ca4a23be4fd24484486cebdc98a4aef869f6bb20be263c13a84366056866e3f5dc011a29828d0bf705181678332cfe9f72930340e40183bfbae6d9ef5a13a86893aa7d034d9296f319cf60b9022bcee889592210ee72fd2a65b59f97a48a13ca91a4e0fe199971f306e15f117e277c6e1ea78c332610e4ee394e4bb0d030b286466eda5c7ef829915cfc66141fb6a39a930c960a3341f775960f52ad85be01363286bdb0d6352a387c7f1a236f4fb0f886f6f4189ebc815b1c7759000d788c54e67b2f9dc7d6f062e5f7efd1d55940f28b051ae0b0b73ef93d14a33b0006c06cc2ca9475bc6418ab39e55ba1ea79c032efa57ee511e87cea5875d5c0e5cf29e857e380db3c531f6be8d5e2163717bb14556694b84ac6c7a92f0965242758354226547920b02a514f6328279113b98e113cb6f0bcc3b89bb0014dd5f75d388f14be9be1f8c0606aa0497a70c538e5d5d406151775055485998fc1bc9cffc673ea71385fc5d58bd818fc4b6204ff031ec7520f7d73981101b01af36d9777a8a00dfea8571a881306140bf98fe2dec7c555a114a73ae484acae33518d796d557029a76a4c69207c911bf9233ee1607a761963b3092d8305c2ee897a70b5393380b81c0cb424574ef5bb345713732cb18d8d2a7927edfc3af0fb6dccdbcd73e94e23ccfe32ee94f0905c5de3923a8bf3882b55b597dea89ab35f50c7134495dd25072acd2d2a52181d89c6772f8a16b6f26e8616bd82109b8684e307bb9d2795c1dcb5d8276a271be9ce1e706ff4458268e12c1b2d7adcb3f6f684fd2949a199911f1ecd96208c728193b67dc80ba0dc380dc8115c1b657a613ed71600dc8c5f1f38960c1ddfeab271653eedcc32a12b0c5edab7be06336571c829e0c6b8506cc8d3ec22131aca6235dd084ee0fbdf05325ef46ce7addefb852d1dfbef8f86292a5b519e0a43b3f84b45b31faae9a2e1667875bf5d84c0a337c823b5efa4a63ab04996de87fd3ffb2e49cfee8e6eb5460555ff1d842d70f2f643dbbd5baa291807290c7200a9b6d16b53af2a000d5eb98b51f105fffa68714d0a9660980297377b7422e708cbc1116eede160b43827a28506fc07259e2fa49896e44e3940691f99a59aac04f5e731b592f700ff91a8977eef50af996b3ee3857355d4b3d62736fe47a43f899a71c8ebcd60b9568c4a0ed575cf5dcff40ed4801a6ba2ac465a23f5d4f0201b3c293d5e07aec86daa948f2524a8a03dcb27ee1516862667136a5d3cd80eec1e5d5605a8dc41dc895f108eea868d05675302a6b0d245de98cfe0491fcb50f2176090c838a5ba545e2c36949215dcfbe11e3774efe81b4995de448e3b2956e09b0851ebaa1e98ce30847f26b85d18f21faf3eff3ec286e602c11f830b6c81262d9721e669813da8c51a72bbd9c6e196976871ac09fc0932540ad9cdfd1f704123af794ee3883982703089ca52ed9747ccec77f1edef22cd0e2dfbc5acbca4a031b3d09bc49e1ce9c6795ce8c02bda8444adca67672663f485acfe1086ce8ee1bc46b053793d482d3c57348dbe1c0bea731ee172e24c3d777f0a692517bfaf7447caa0ec7dd05beb365cd92f8938abd8fcd245bb0bab1f944ec8c589dc2a76e658c22aed4f11c89268ec9354de0c4ade364a7f962fcdaaf9795a8ba5407985a663cfa6cc695c0ec14898fb8409016968b3f9f79aeb4e30058342340de1374c32ed45bd0069299ed639f48a33b6a27816ea63364fba877f56f112472a4aee4b2a79c6c63fab05097fc151c7fa537a07576e08b40b0a13c94c574d4d90c9f902db8dc56ac0bb68defc73632d2e6bf287b8a37d0983767dae740a55bfc7fb01f3f49db4034a16ef7ffac49b32766ca689a92f12af1f7c2faf6c9ebe06366a73aed43e25381259e37ce9495c6038c2008da7757c0d5587a44c749908b97274d88418c39b61dfd0ff564656394f0c288af431fb1bbcbc2565f65a6da851f2c6ab2420d2892909389d8ca09fb457570cc05de7347425c9d20f4d5ca12f683dbc65ff8aef70f604ed4880766a5001bfcb2b4b25b607e0e519eaa209b7f064c9e28386c58ed541795b7ae2366a9ed68cf0361c7c046976c46992a4f036bdb01dc5ae4a5f1538a3cd2fbf227f04e35e65186b626883fb4fbe5d81b6ae91ca02afc220cab6271d8586c68fb1aebde001dea055bd69d94fd459425267734db7b5068495887948f67f2cbc67204419f75940346f8dfe58d9bd1bc46f380cef094fa87976f406ef55f9257ddfeedd9dabdd30213344a4a71b627c604298c9ea314b0c1d3faded7ebe7c1787548de9bd6ff625132b71eb38a75d0182770a48c3c23fa7ec7a06ab9b827059655f7de6fdd64ca566b2a63071e01531c7772cf8002e86126390aebfba548e91946b4f63d3514927b8835223076823839bcd415623e8c6c21f2e06985fa72f26910272ded273642274f7f6215da1f08d6bd417e1a3936a4d8bac9ed3fffccaaee7bf78b67fbf362c18ab12b9e91004a5d435f1391380f8fb1586d7d11fb7f98104fcd1893f9727bb3ff7285b3e54e863516d6dbad863fb715967524e338b244385350dd5a69dc1464776b793c1c3144c6fe4fde576aeda46d3a89e79dfc8e37cc5029e1a29258b63cb9440e217fd00d78c37225782b42dc1f0d50d027903bf8360eff2c55bd0fe8a38fa44d4a565468b32ce6b7f61265e995d773e6693ce00fdc557bc75932283201bf333ca0e9e4dedf02549dbb677e53356099314b47a60528ed45b99839cc1cbe129ae6097fa9f6640d63ddad72b7a0696f6bbab6fbb461809d040af81a232f425081506e62cb38aa15bc81b67a365a98ce9188909e33ab4e2e60c3631c54f2f6418f84b8d8712c1ae20690bdc923082943b2a3c3794a6cf96903ebc08888ee40ac6d89cd2ac35b1a3bea13a9a5a7338697761435d4222ae913928af7a6e6a9895bc36797a0ea4c13ea10116457ea62169287e2d0f7e27086f7b8a9efbe97ad3a143826fd810e876eb51f92d526131d41fb8a157a29b3c338dc1b4e9218c282b9a074cfe61756959165c09fe45c4aed6f9c2ab61db3bdad67896384c7fc90ae70c7206a3ca8ebfde6c29a3e7940b958083b0dcca0dd27b57bc7395076b129bbc550e4fde67df547d393567a7c1985e874a1db5febef1a64dc5e45bc8780b43122056792ccde9bfcc2a29b58d530d9251c963d78e631bd40f2162ecfe3b15996eeac5230d61205a31ab512e26dcddb9666e1da1d79eb39d326b79c91708c4274910e4ce0ec635cc44395621f2a37b3c3bb4c5c598c64b5a5de08390b1758945273f3fea9f617c8e7a50a3417f5b88a34849d683107e55a3c83d2aa44c15f7ab9fc230f93dc777095a8db30d3b7968872279da9afd2b64f227edd9a4454e71a30946528a686cb7d55b4d2fd5a561ad4040e14c4dad51fbddf35f1af14ba399c3fa382f1ebdc5b16b031b544b4bc8c97729fca64baf968ccf912d691bbd99d296e91431169c76e642d874daceacf34f84544862f5824d8a3fa7c53e9419b5ae946c66d31282d4e8f541e62de03795920046412cdbb3fb86b6adb325fafe6ba034eaacbf831f841bead5ebc8107a04536376634e7eb33504bcf96399a0ca4039f0ea5240f8b0e9019c1b0223eff2e3e6366b4b525f1e6e86cb317314360bc7ee70f203f1d3e5983c9177a5dbdf20a8dcf1ab55c2ed442c8f69dc5e101b4167301d881e5cb53bf61f6372536a5e81c7aa1dad1f3ab9c2e38101608137d0f9a2a15f232dec1d12a74c7aa1a729fe94c4c022f70404352917fe2a5488d5f7930ea4ce399f2a6c0810265f7c0dc52fe824d19a0fa0d9ffd55e695d2ed184efac0fdcd3520e92329ac54f8a67e3b672ea6c30fb5d72066a561b551255f7cf29b32a9c16f2e8adf1392b2a740be568582a0f70bf6704141529d343d270781f4636e37501a2a9e83861d639a4ce7f65500583136ec2b3ad80df1aa825f4beffc5b5cefa1bd7eedb68a34b1fa5261e37eb2b7b9b71e71d2d2dd45614755948db189e518dde0913f2128bfe2efda93e5a9a0a3d6b714abd0d8cb819fb5924b24bcf7effb2b0ccb5c6b67a73fa06de7c47ed105d15e573ffd91de8dadf49dd67cc4ad63e1b4c7940c3d50d2103692c447a44dc6f2d36e9721a61e51d32bfe9f5d72b12a10a09c54163fe9299dd8d29238c41ccc813fe11904be93b658833e0c8f6e0d2ad116107343183c942dafb4ba5d854701c6c9392f6d8246a28623e487d95fc94d6b3ead595b7151fc0ae3c0a27e90d44c099afd4025993efea333787705eeeb7a2841fa6f26f12e477a9b7eb3658cce9491d9b5b3f5ad83b3f8dd8344d9c27d994e477f1b6b41dd5fc6ff7755d9223ac3a7afeaf2a3631ea8cd478c551e8486912677c5c6f408662a363832f1a1fa22c093442264f76516c46a991b149bdb0f4cf8fa53d987efcf92116e37ed86bb8d739dbfe871bb5b73f116fcb8e81a701fb10cf8b1baed9e227ea1c80fb3500e84c40d49c181b5ec3e161a98ec3961eabea8a99868d3eebc67d52c6f41a9c79a0e9b2a0937fcaec17e1abe943e703af2f4191802ff8b51f1a481fb8b5539b20833e03d28d14b6f823be74a1837f36b30caeca25ffe49e0e7e3695643d4cadbfffb7b8ecd18d4bdd67d64064e5d2bbc4b47098dd7ee7761432b7584bf45c308286f546521920063654d793a5c3b80f7ec74592191567c9db0858dcf28308e022b96540a4cc93727d8b20e2d6a565be2ba57c2a8b6bec05cd4f7997da61d9291af7961c47545e2d3d7b50b28a13822475efb2d686daeab65578c81d76095377c5c1e64ddc48c672d095d587328683fec7f6583aadfafa582e2492d257f1fe58ddb8f469b622830fe17b2de56286e1899c69faab6334816791d3886af2a44048ad4d4ed4777a1a30da8bc8319c9d31718dab08cd492026613af6072bc8a8bfc3ceef343282a7d2a2465843003321ea23065a0104c2464fd1841c9da96c77c366bd2f62f88a4462c09f611ce5d8cd723a80c771d6510f643507a7ca783089f18df28e498ad0d831185026b436ffe860149793e9d697f40a1830380bfcc757d0b5f97c668e08cbd4060319b7981b1b4a4db54fd779e98cb7d7883dd0cb9379d78b5c7a38669497b23622da856dbcde8742644ba934d841e40f8a39c75917687c5a76183da906d4521539b9ac4c579abd9f1f27fd9bd6ac153cb0bc4e19e59c45cfe0d6f4c9d20a3a2fa267aaa86dd843b0606533138733d1cb9625d3a2609dba381726dc4d7891e0e20744fef6722fb022b273f8304c719058a50706772ae5404fa39882a88d13dce8d2d217db070989629fd49b76a8ddd75057f0350ca6fb8e52f09c566f61f894809faf83ba9eee45fc7317cb5b2ee12d4f39421dd75748eb0ea8b2e60699c89e55c83dd1199c566c6cf6bdd6524113f891c3acff6bde65eccf167ca012b70c50d4d6fd7e7ca1ca631075276af081fecfe48171783e8edb1a10c44a12f83c2c529a666efa5821c2d09398f4e7ca53fa19a3fd3006c3fb00d9705cabcd3b8ba129f2d122c340aed82b72bca6db2449ae7c5c81792990a58fd16a3a222d6138233d9ab18967aaab62ea1a6aadc3b2d5745e7ad8bd6f2910c0686ad74db1edc3fb03de7233560a9a0b73171d7a2fda89f4468b4d6d3601bf5b24fece7f0955b1c1235abd912ce51d2a7ce56fac7e2fd9a6ab1a6a092c9f23a88d928a46822d73fdf28bde234ade87485df1bbb54d1736f42284a9319175c05108d28534bac9ad0a27ee6e7a3e3b7b0dace89c150b1534751366a557230a27bd3d1b69ba21deaf8e09eee90685a06ac2d0268b5c36ce5492143cc8ea5fe0cc6580e9824745c10de23f29d848af81d9006e3803eb5e9719e39b839e7b867e10e27ad9797c95154acf2e1bb6c11a74385edd998052f103f6d21fb7907b5556b7ac9147b9ca9e4fd87d6d30fef064ec1b36b4c7ab138c997df62765498a3aff033c5ad0cda1dfd5599563062b670d5df4107a4ecebd9fcc01c8390923f8b5db961a3df12fa2c84a20afa617c685723e5574a49b75b1991034b0cb0faa674460e2aec1154a3df612d024acc25aec3221b1fbba4a3a80070a89485405675665436b927ad9b7e3d7c3ea8cfda2530bdb9c9bee21b777b9682f72077a76c546a6e7b34dc1aaf334ebd1c2410f343954cd0365f4717fd7be4ad37176a4d04e9867c23c494c058691a0d119f958048867950ab287301fb51f1dab2a1e49ae8dfc4677790d5075ec8aa526341e7e7fdaa4b1f7041ed3f3aa4c5f2aee46ff6dfdc2c15bfc12a5788fa05765b318d9227aaca26cdd33d3b821d69db740b92c9b088c56f437e18189fa4335f41980fe7912dfe4d0a06ec5b9a64e47f4c3cd67b248d975d4af029b26c713df75d9df65002dcf07d6e0181094c203ec47d9fc1740390aac81e3ee48db4062a24f669c934415fa79c42ed84ac5ef98094515edd1c153c07960591d111420e02d0562310fb175d2b93cef17dab9999b1d60e9eb2dc2136b5b1481179a7dd2fcde2c3f4540c4c7e854b5a36f570c5a5d972fd8ac61af129bcff2fe563b54c11944286041bd1a86bbcab2ee47462aac8004f6647a43f4bbb256a013617a5585d5fd8e77af0b1f3ccd89a922280e90fa82f579100d1b4f894f7d9082b1eddc9bb348c2d7e5814f448e202cd18a36dbeed6e71c5dbd6e0c05d3a338aedffc767d21d46a23add627488e1ca28ef64567d40c3854c003c2a6abef662d0a342c9f94b21ee8cd306043b34dddaebcf4b0d1549387c6c988bfcc05e344d2276704d49cd486c34745b6011f3de1a5edfe1f84eafd43c6ecb49bd88e6fcdcc78e10ba1d019ba8e24365dfbe6ded72c848ad80ef1a9fae9ac000d48bfd54f70912aa783e8f218ade68abe9094b11ca7331380dc234a2ba37a037ab914c46862e2bc7ef741ee3fb6f0cb6e7bb35530aa5c308088da2e4498f9277a9627bd9717f00ee878656e7e1de570c3f9cd2b91aa726a7d7190f6d41e8bf4736c53115a044baa7a83ee137267470375b74cb4ee2c1819de42e21468c8b4f2fba831603fcc5807aba6264dbb07680bfa10bc7174a3afc709693807610c069b79d64d3aa6b497bf025bb8ad9692fae2a7b296f1e3b5cc1aa5412d505b7ce356848301013d61ad2905111f83b37e6230250956b6a9b6df5d28871c8fc67ffdcc921af7444267eaee2a62c590904e206ce8818620354b6c371997900620a99866391a9a84741be376f8dd35349b76c80178b7afdf24c7f510eeff2263f87e55abc01e55424112294be6cd08e0538ccb964c083e33e6d10c731f2a4e19cc62b815ed72c1fe17df1ee58ace9b3446f4ad83d91fabcef9db04e630a57da80afb323d17d46b1886c756cc3b6e76a0f442e062a65a9320ec6a80e2a9fd2b9f32ac4669b59fbb320c8f43789f1915a6d9fbf6ab4a556eba1cf412e1119de25fd1fa77546d513cdb278b77631c4b12c6668462d62b7ca8fb3a0c0d69de043c6a776a5765a5755a64564065244990d8802870b76bd04cdc749217030585cc945f81704925d498ae7e17429f349d76f144ae4566e4cf4273b6d3a9861c9f5374af9ea0cf0d9127a378e906780c8e59d7b45676f3c97f09f9226d37f947814577cb0d807b9551aed3f55a009224a2d5f63fbf99d0a265efe747dd46eefee1fef8427c73b145ac9aba73d8c570056167f7575802afd82a70c8b7825ad9ab280c80966a0f12a6f877b164f3c99437408c358bae55c3f3234917c22ae84be4c9daab4734c71221cbc2734929817122c6bf5b4d2117cf8be6c55f280583b8345e05d2d58b20325e9d075aa0e89199607a8db33c6ebd14fafb61f939c09191024b0a81b1db9ef5b5f2b2e20cbf5e6f68c253e7b9d5aa56d8b7cb9077daa678e71745427c84b7ceb05351a3dd2c6c75b444be5345f483e7add25e9f72b246e24b59629f8634ff4fe635700aa2ae204edb5829a07159ce59d2a19780baf5d73fb767def37f5ac9dbb02f7a90fdb33e5d36933239bc63ee2fefcbf2eea103fc13a3f916e8b874cc04b697fde12ee9fb136e8c4499a7a157dc6da81d23d56b19f0a953a6e9d2016a4d52055655e6a10b23db89fd4a9390bfe1d4dc62eab899a549302e0b614c8f29382b0e30699576d2e11632a8c720c07ac2adcf708ddb2e429fc0deb0f9987c8d37aa08f8b6cbd9e6ed971cf399dfaf2d1160f7a297ad976666e3fc341d46680ade478c3ba7ea58ababe68f5a2d20cb2b3086eb8592b043853101ed0146c6c0369e8c1e65d78161b5ae8d20390b849309a2982195f983d12370b347b500aa2374fb002603a011938957e3663cbf7b954d0a1d20605688bec5c86092abc550e05a761c3981ac2b5c9b4a91d7c1b3864079c97e6e51144f7ae08aa234621f6ba55b8268df8c462f2b7ff900eb64823532f4533471f4cd38740849f0c384794ae10cb25e6e7028ad8e8be5c9179195f8db5149f7c1d7ebe458a188c4c67f6d8f11c288659cd9ae2704539342e2d57951a8251000d466fac39750b99693af6698a6317726b135511c1b6b8416e3aca6c037d44818301e6466ae7a7f0ed1b0ef184cce011a61ffbc0d32482aad8093a8d4f8d344765b8ad34e0c932b660710815e43eca8a915a5496af75e098f5006f9f069c6b7d3bd28a1da304f51648a3aa7fb4a31e06b42c273c5c931a334b88304b31912f498eb746a9bc7e38362f1bbdd7fce225ac98fe3e59e26478a2640a4739d653c9d3e4cea9813221433e9c4008c4c2e324a5c4365f964ad2410ec8ec7a1000cc8144c8817a4d0dd45d57187a55ef108e6618c03e539b9bc4bf9efd98 +MD = a6ca7f4235f07b7a14805d14a6b225dbdee4a36dfd732d8bf260744d + +Len = 102400 +Msg = 9560cb4fe668fd2180ad389206d2e57bbc9b04ea49a51375bc5532cecc0e869864a7db795f1c8d719083a86a05424e108c8059e277d942899d564269a19cb6777763c84a232a4c74c429e812d28878a2a4ceb015359c0325279bc4e908b38ca7d57edbe9bcfc02d3268840b3f50a2bda0a6f51ab0b5620f1630c03768abbced186de5c7fb2f87635be86f775f7322e60c84984cb816f5f9458924636ae1c459c936d93338b887243920c577f5f674bdbe646919d204f89b70e13d454fc3eb9b10311c72ed113bca5ad03a6fab51048f36a4dbf4a6f5f66018e78f6f6fc8af2b7deb442970b011d0214512d0d8297ee515e4558faf705bd1bdfaaf4453766b7572c3d4a97c2b95d02d1e034e14c63059dc918a2d43eaa57ac09901668343bd139f69428567da5444eea96039d9edc557eb4ade601ceb7fd5d1511a4877b72090444a124fbc42c9a8e6a5de16afd6aa59d26ec6ba92f9275d60a17e5cc957125601c4c85af1fb62669561c1870f375bfa227bd7bf2e7a587bef089225d09a2edf7887d959917abb188b8bbeed607656934bf085c078057fdbed04ea3625f6c2b6e8f1c9ae2337403939721acc5c2a26cfbf7b5570e820f9e7db150b0042036a5703911ddb1fc77e431fc389964aa9490a1d6acb430733731a49b76916ad36a24a38f44a62ff91d1c0aeee7ffdc49a49ccb65d6bb94dd367fda96a88dbe006f70af989d3d83b2ce72c77516245427385a23ab19b463477450c8abceed252fad513d5d05e9d7aff3b01099ad51f5caba9051b05ee6c43a596b15e1d1fac9e98c8ff5e462f35079f29c8c6395cee7bc9007fd7c8e9ae03d4d9a6a4197f9d2b574f17e379ea3189735ffe4dab4e351852487ce188f18ded8b8a36fd10935681ccd41815e9f41579122a0c007f3d85babdcd86c8b4ba8e793024fcb9b0ff5b1a5ff45a55f4f1534f02349c6f03af42fb822c180dda89223f7936627a79280d8d872c693449467d83a9fc0a19f7281f2345d0bb216901db98bd3b02afb781f033d8e8bf215587e6bfafecef71c81c5cfa5f47ea93fea92d2d72bf57da1ab1a5b5dbc5e6bd882a314b5a73b716d5109ec9551e20e609e39956401fcc7a111b907bf6205a697fa1efbf504cfb69cc994718bdbff887f935a2bb9be8eb10194442febea494a59a83749417c526fb1d0b08710fa9dc0a6b33dbb5fcb73e3cb1b02fd6abaf2ff2774362622778b43b250a356ab16835ddce52a6edc8e7304078d3c97c33cc86f084662b91f5d43dba930b605e4977a082a11686cba7155bcbbd43a257ed693400406042bc09742de9d5831bc43e64a69961f40dc80dbe3b5f1d744d024f21a1a239c64a38d8b50f597af5ca55169bb272bf8fae6b734e394b07ea2bf3cf726a66ef0ca4a0fa235c89e1f7ee5958994ebee82deb4e6e31e0401b19b1c4e4d7f8becea7e48cd44b8feba90e1a797ae9f5ce9a6336b95525cabea58780ce25ced72a573c7c44fdaa33ff3e8cb11e041a223234d43364de86531765b82b9818b3803a271efe61ecabc355210854bf7a866e7a45d543b940d003faaa2fe4bb24427e5eace3cd8c17ecc86def0577e644db35175c0afa2f529f77d901637eafeef83c18570f7bfc05c9adaa07088d2b09651099d5c9c94f5a410922f9d74bcecf2143e7c4167c6a4cef0da9e79626e62ed07b6241b62391ee714278f20fcec04b6a205d627d612f43b942de2f12b7b02b99e0013e34bb8f758cae3b98818a0cea3f5bd9b0c8ace380b4f7c74c22c201962df91719e9d390860fc6fb4bb1001d322d40fd4d7cc20f9a5e96f5ad2ad862e508f0e4633a1e6da68707288a32c369a9909a38870e430bd732aad9e0bf6d4c9ea79229a8a9fe5f4d6ef953e27b467ab715a20bfbf1a270fdcdadf48534e33729a6473768bdf5ede134180dd2eefbe8f13902f81abb62d7448c0ac5e94ffcbb2c817a9e11ea87a21882eda6da22660cde57377d71eff69761fa5bdeab54fc310da5b6de42b4460449c7e4bf76aa178ed51caa1c8003e049cca51b9f39e87441539f867869af93acfb6f87d816ea82c78be5f545d37bc266eaf8c498237ee75474db63ecf53102d4b406615169683a4f594f8399dacbef575371e159e68ce7f317e5d9ac73ed0633fa18ebebbca7909ec3a5ef790478f9c38cacec44f196d895835b425774483043341381e7af2d383e51a59373ef1764140d165ff9d3215bc46d88484e64b6f37af882edd5af6da39699bb0a1b090ba0d13b2ac6d919b0c4082d195621c3cde253cde37a464bed354ff252ddced0da4273bd768b7323c9a3c9486af65220016f661ab1a1b9e3209fb30209691fd517cb740a6648489fd09d805619a35ff7d60d1a757a0e9123bc35783f4b467e9438ae7a889677d9cc79f3e5bc81d7bbb9d03de954a91b6c8bf4890800a4f07b8ca15ddfde7384a7580a693212502df5f474947b3ecb52cc6a7e1cdafc82f1872d067c1c628a0921c126402dcdf0f08f263783189a6d3f116dcd63699971b43203cc6bc8cb367fd976322b0165e0d9f7cd8d9c6a0deb5adc0456ff5c5e0dc30c8f67bf6d6f25535f05d27c8560ac34b0690b42e7ffd2109cac9f42fbb093a8675e5cd962c4c31df2fe7bd70254bfbb596725191ae6ce0ac3e52ac0f047cfdee2cf306c41629c5a65ae82ad00a897b853766f716b692ba4023c7e0ba279fed0ff7076daa1df1d72f7b4ab7128d2c0c62ee54efe51ed6766a820fd85bacdcd292dd09496dc80d302599f4ac5b369c76f4c52482276ea2ded46214dc181c9a731ee7e2e338a0e3982ebdce51d68e4181e4c3bef5042f5db826cbbd3419fe40995c1b7883312cdcd7f2eec0eda81c84f5daf00b93a3e86ecd07c6f22787da380cf383b47080f460b41b34b2cafc68cb997d55f1a32d213fe520599bfe8a39e9948c277ef44e80d8f84e978c2ef8fb7f3676f9596cc96237c8198fa10249a1bbf9cf0dbf55c359aa6b35203662c45c09946ce52c37a034be3d996dea78ed9d1602633f5ddc060640d578d698ae8913cf7b081f504cda1e3c0d48fd5fab9db26279f1c542d1400f01febfc29b596fa93bb3f2b1aff39ea91900d046e8e2826a072420a5547c98fd54aeb1ea25ad9da5b403d1a23074145bbeded6506e64c44c6dcb99e97d243756a3acf6581ff03c8fa1354efbba1665bf916f0524d77a8ae0fd380499a41344a555c13714726b73f06c0f10c33723b95afb7b02c90d6cfcaf1d3208bbb18fe86fd2b51c2404666b4f7c5ac0028ee137b665c97847f682444036804d598be14b3e81504c92bf294b3439dd05c1a799085a35220da77c04871bb1eb7c7a1c519499cc5970668afb3c270b6288076a9253ced54e69f08639f0c9f43b3d274b26ec091a9a2fa64c2666b15aaff0dcbf16419bab15352afb6aa4d16938376700aa7a15d4d9325ceff0f0598e8ee6488e6bfa48213f195dc5dfcebb77a913422323674560df208f5aa203a80fc41254bfdaa55d9d93bc92cbe09410855878c09ddada212774a2487583c625461c1b073aab6b6289dac7d1f5b51e57fd0b0fea5417fc32915f608e28dd6258995daa6ae72673e04cdce1202ba59518468b80c73122f4ff076a01695bf6fec9714e6683ae93e65f4e61b38955f921dcc8a0725f1c42eb10ef5b2ee1f618c30137b9f85c7839eb65f731e5135bfae929eb118dbbfec009eeb2fb8effe189d987516407fd2b61ab7caf131ec625ed168a17a87ae2bde47520b912caca059167e329173c6cb1534d2bded106ab9c1dcf84b42be1dc43f6582e6b68894b487a959e259c3fb3f057fafbec3146c9a6d13da12a6369b2763ed9a12fc47488938a8d3fafbab7dad2b5da7241fc86292c508868e118bb6b400421006ff0328bcf0b744e2e384ce73eb4141a45f96dd117e3d76142127f0f888f57d392b26c5ce24375530adfa7e41b9dd17b61f2a4cb4dd25215b3185ca73628a4a300d3ca01b67bb5d7aa7770d853b8381bfbadd31fb865230b9df4fa3a311730f6201bf38431fa5f6278c84ecccd4d72847df4a1d33fe46fcb696c02d063a422575c5190ec3d0a997adb99eac771a4a63e4d8db6f1c99661de7d491c71b317a34b1b3f4842c1f18ba93bb3ecd12705fdcfd540bb8040c41ecb4352ef2609b7da5cc6abc48da4f85f7601dffbf2d7b79fc17bd758898bb6d11a215124f64dcdf011c35eacd5d0673a6993e3bf336903b39ca918341392b4a054810c62ea67a10cf27b20a7232c86460b5a87e29bc53161e6c6cdf8263d06b300ca4d5209407b578856b85d7ea09cabe3be950933d489d3293abc4bca74f333a664da9c5bbea3f95abdf077ee14f3917a28d3de027c522eec6caed6081fc448cfb77be7e8ca6019f1168e9d7b70d11f56fe0b0910a6d69db8c66a41e726c219022bfadbb94dfcdfd3ca5b762e9c7f7d01a90332653b5b4614afba33707132cfc7281e21d52dbd748a421fab0e8145d4039284000a212a51888f6454aae85f91a616ae614454ec009ee5a2e323056a4ce220551b06428be79ccf314d9d749088285d73420fa8d0aa951aabc77611380c28ba402c6184c530d9d5e9c651fb0cdcd465356d3d13b39bf94b04ff0e8ef53d5cca0bdb23d12253c60a5466cf661cb43296bb8ad67cdbfb51df7332f462ea0607b77fcf5510e878ecd639d61e9e0838cb59cf40e3ca91f1263ec1082e775f90b0e964b1ff2960c9d1a262be468a1892261437376ae71da5ffd0b62bc6b39c02dfc882282703d26bffd495c4501194e7cc31bc1876bac74064fc1940c300e8851dbca0ddd7888689fed69b93431dc3624316268b0c2bd7eadd2db4f22e458d41f02d8877169fc349540e3cd12795ee28152d3d37362294caf3c84de60e6ad15de383009fed30d3d38be63f2704605d64c9dcc9c5fb8748092d36adc76b56fd027b26d1fd6224fc502bc46e3ce368583ce88d91dc644239ce14df9c3b4ef35857427ec338806187e8ba128fb9cb9427d8f9a75e25773caf422e2be1eabe282c85bff49df94cd0bcc2c2376b45c5cc11618492f8483e5bf48d0683467ec3ddbfb37aee29e7d059e207ca9bca89d8f85fff12b527ecc1884fd6214d919c65fa5b0afcd52dab13e542de5ba6742c0c015ad92a7ab3b907ac074509f28beead6846b2cc1272ec1d5a2570fcc030d769cd47185448635918ad650445dbfc1ca20dc8d2720bc053f7a2d1e53551c732f84571e318880071fc75b1385d6facce4cd22b92772ade88a8a38f648ec102e4c0511f63ffa052acbbea330cd91562abb49fb51b62d696323847a6159078a796c9da98c090f921af5ef632a64237e85be15db095bb76aef9b0746021c2df7eef1cc6252154fb3525ed80f82e203c0487dbf262280b74ef87171403b0ac5c5198c0ff0eaed10e56b46e6fcbcdf98c7fd7ab4814fad8372181750ed8e9d758e638bd6b9b91919b4b04ebadf4aa578f20f258460d36ad270c92d24a27f5ca3c06781cf414ef1c08ddbe6b21baefc1adb181ead397020fac776037b038fc0d6e7900e481c0f3f8bfd48af7b367c1c04ef82b6ad9f886882e2c93ab285225295807771df9e8c2af26f80f964b424adbdabf99df3f79ec9f15f1d4379abe98a5607886d046d487c9a710f650d192b29ab9cc7251ed6259ddc98fcbe2eec57e09f093d4044fcc68cca9e6e62d2da0218553e75fc9cafbf7c8b2ce1fb40cadffde6f210ac1fc188d429440883648b4be2510da084dc08beeea397578b5dcbe42ab45eacf0f35ff1fb2cfe784720815b101596c14e8b65c66cbc44e80ee474270f8d9b6ccf7e2ca46a5c4a381ea560d23a194642c9f95b486f1bd1fdc66337fb04e954da880ebc229a2da3b27a41be23c8e2b8bf77c43dc76e68ab137258abe2b33e0770cb3382cf131797920aa3ddd234f84a91e86a91c5f3295cc37343247083222fba096b253c5da09231104a646016c098648c5afbb695b4437849a156270d0c4a20b343f7ece26f202a5b83c65fd6e20e91e423e03bbeb01bcc75f19578b972c34f692c8f4349c9dde82d0e98140dc339b47043c3a7e6a3321a88c286d800ec37908ba36fe1ec5707f505393e4f13ea9656c1393a9d95e412fce2829ee78bdf138eab36fe4b427d4acb84a24d4391dea0d35782998f55195aee23b03209a2d1f3b43855dee204c322f61bc839a40ff5e5b493ae84ff9ca96668bcea04c0fe5b348bc39e76487bcf0cef5b1987e2d6f6d195161b6150e52ac1f72e7e7b9fe6d1728fdd5f48d14fd785219324bc728f27f0df4f67d345c703fa03f91c0b1904eb1a3ad646eb2ec993082774584bf5b12fc00db0024f20aacb7b299d1137aed0feb8074eb3c1b3a188228b7f52bacec564cbbae879398418e7d1d28b1c85d3c382c89fc7446102400d50a814728d70346d7031494b26d289ff7a99538c8a2a652db84ea0674d9d2db90f27b456388c96b05a3b52d69bbe8668e1d886ef99152e4623ae9aaaebd6d301da650f6c507654c3f613a5da0c8a86baa43a85c4472687628739f67dc051d88e3eea662349b0072eb074b293fde9137b4e19e09918c129095f6b445e6fa096a4a942692998dc263735b8f9b2e43cb5112c0117ec92876bb118dd14cb4e15a5eba5e778ddd25d2a93d26afba553f7d412ea8aac1d28ebc7e04fe9e852e0537ec9b16415be6ab59ccb32f528e9c1ccf906f6111dc96060d62d612c2f73dadc99d55822e059e677e523b402120ec20eac53cb2edd6fcd891eeef91e6aac72038f8506be492eca16ac53f1fc4772b95f668ff64e7b8eb4b6faab843b1a7b5a7ab86f5980b0ab7a044ac2695e29b43c11a021f3fa6894da8d01e97f0ccf5f08a4acdaad34c76e9ad3590586a23951aed7f1a040bd3510937dbd3f55fde9c5f113e57d8e24fdd691065f83d66316c9a604d38169015190740b9503b5990a5e984aface88ebb471f11fb6c3d51b128aa64abe4bd9615e82f0b911dcfa68a17782ac452409f38bcf3f82074c0f24ed2313fc1a761e47ac669e08cc31b0e73faf34ca6d34add7045cd0cfb992e12ae71193ab8086a43edbb9d06d2c98559f35741327db76d1008e99596b562ef79790d499db890407b16d0b3c68ab7774eb4354c24708410ffabb133de75586bef58afa9b0e8c54b549c0c9368dc1658b65b9cfb6aa7c49d73ffa38f2c64010a3cf25d21bb7131f39628782534f16c90599394364b4bfe7b34acca92c8aae83527f12199057b5ca108611a5271f14487ff0226e51084bb120a5b2b22f96e92527afa03f9d72dcdbb73f0fc00690423a4705059f1027982cabdb4d02809d889cbfbb80a2979af0cab9f7c261862509351732636406653db0b145ec08d3e11540673d03e11332aa1d754ae9e83a5001bf6d22cc3bb87394e3dd8020337e1417b6da9eda79a4dc615a95a2e6e277a3a44f953090a4aac5464c8d147a210398f866667b54eaa0eaaee8778a39eee282694c3bf6513d61ccca414c7d6a4ff9024fe5b73d03a2abfffb7db78b534bff9ee95bcddeae44520c89789825611eb2c286bb396e77303a8ecf50c200d3a8133b7cf4c773e87810070c390c970f1be56c253d698a2021b119a32823953b71e1facc9dc5309047004edb28f66cc4d5f561a402c41a8ee5c4230f5a58a2fb47d05f20bd23bf461fc7467ecf01f112cb67459b91d59a23fad82d7c7dddd4738862db41d98f4a6a80c9705f719bde797abf8a74711a737fef51bb72f92f8464b21de18889449c8e187b6f05d7408f89526292b7070f410321e53f7b52ca4d2f5366246d330010212571950a667c7e92e0f510ebfa208d4e30f73c0e113a9933fadff6786d3e3fb4563084c585cc4656a4eb677b90fab2c19b0c2393cafcf33306efea329e4b95c8193cb0cfdbac51252cba08fe81fa5c0dde98a8b4d69de57d162a72145cd49cccfcfa9b91ce99398ed6f597ed33bbd3736a211dd9ca79da9286f410a61f55cf436ffec7b3e51f6a04420286b02c9bd3a2dc3a158b2d2d5d1407e168506c4b97cbe0bda79ea5ab5d25dc7547efe336b70c934802316534e771e786cbbbba22a0b6fdbbcdca86c9ad5424d26e14edf8f8212ddf6685090d042cc438cd408f775495258d9cb00ef6b52fb98e6b97a37f31710a74d4ce9f323da51c9bef7752b63e06e687b6f7b4bf1f08e92dc310ba15ed8cc78cbf968e30ee8b5f0494c8ba6bc75cbf4e8f0a0e8f45805224f6e8887976c4d3aba9755c85b1400a277fcd1d148b372e56975f82e3c31672f899b7950677d9bd3604d3909d0053bc68e2fd012ce3f6a2146260a869024bda3d0de666496b0bf2d06449b1036646e44d70c0ed218c4bb92c72c5e56b9d90e656d5fd82becafc02ef3a4034454d89f049abc157aece86e1f34af7c0780f7625da847570d3122a6c07194f90df40ad8ed1f676d7013538aafd4d6ed02ab27c273c8be69722cb07acac63c06d3dca120e9ad339c1e55ae172cf0ca38ae0210348f17eb98c2a60243333bc5b1fed54680e08d4b2cea79a11e7dd0b3e5724f5bc399dbf76b6567c009e5185783f6a7a1feb808d5a53e49d3a58abcb87cb858af74795d0a6ac33791d4c7a51903241a59a55a64fa8d818bedb73bfc0186e7e6b55117e54a1e44de1dadc12a34b9eef6177aaee9e16e1b08965978d7b78b66c114615bbae20e51230d9bbbeed02dbd0282879ce1b3cf74887795299702119fb175ac2e26f8c350cf09a79d3a13e8fa0743d30d929739f4d33872368209a2f97e803b766fb5c3abaab8d84f5628710bcd0166e745b63303b080f987e1f5c5dcefdc151dde4098c87cc336ba8a35505a1c65491443374509e8f73004fbed03b0ce324209bbc2c9110dd1c9c41e630e4dbc17837ad143f76e434621961a1ae2dee129cb244e62dfec258b9a5659d9324e74be1c033a02d29a8915d42384a4ecccf16ab754de4961c38b99b05984c044c40e021d96c49b5df5820b4f9482b2a9e3c59c0e83b59ed7fd08a213b3e73fcc17508d8d1ab93720e8f6d19cd25c6ca08b2768d998198aca02644ecc4eca7f53ae030474795ffda4d9ac0fc3c45afb592ddd761f7b5335c13a6747e21075a760f3ef12da9aff1670316d6cca51c4875c2fb06de814abc6440dd8325de32fe07c4ddb5dc865e0a90d590190bb63e13732fb68f63c4b6865dbe381ba46ae42522e24908d45c24cdf01b730249de1fa3462f7cdb82408d43c0f242885a459f424fee1d74b5a9989e0d6b5c2d079b257a6748da65ca73335706738963b7fcb8e7f74ea763f0ed2e0d313ba7e3b56c040b4f024bd89ceb4d42c6c879385dfee578a19a83510695599e0412d2d0e3cf2fd865f23d8e8a073f996a47ae70bcda9996e7483de66730afc31e77897f03430d54549f4c0202558ecd69977597450e49a520ee437eb35da51eb8d02848a4462121934fe3dda654cf415d3e7b2687187a45f6d310a45b6abdf39bc33bc847770fa29aaa917be69355a7bd933ba91377bfdbc1bd41d1cfe67ef41fa730685d243d69e325d157338fd672f32c13994aaa6ed93a033381916f4c92bd22a2c355fc1ed9f558200a2da8a605a69fbf71cd2f1be0982b825e3053cb520c9c0f43d25d389559980a0f258c690230348bbcfb844b6484bc9ab23d325fb48699d27452c62f0e889c0bd0cb9973eb38a0f4f5563881f7882d091818999e2ca392a8df47d546b7faaa81f9705e7b13186ba7957dba33fc0b034a0a42e7fb3cec1cdedf31f93424286a18d3c449d32c67db0027d297f5f495c5da035cabeb77e8aef10e91a05bd5aa414d1a37fa1099af959b26e5403c63b0eb359db664033001bf9bf7f779424ef8c67b173bedb7ed4811d50d36416bebd4f9e923f08ec727cfc51c05d3d27be28c704f6550733d99d9e64a65362a28df7a5861509bbaabb1bb661db2a74a5d42edc5168f06491611cd6967a97558e7c129bd3a8e084625504d090da8f24f8ae2953b8ceeddcdd5f7ab41b954645c2d336b6ed146c6dfc8961d245833356079440b59ff1f377ff1bdebd5bbf093a25da8a803c20567d619f5745eaa0bf12bace9b88709aab3edfdd717bbfbf883da1d93780299646bc77df10b0e6f7da5ef9a36357928fbc3865ed5a75ad5f6a551d17643e1a3ce3332790b49ba1512d44ac5dc0a76d99d06e7a92c2338e65588b82dd3a4378dcd6e95afc6a8e83755fcbbb42d902697f8ce60416d13ecb9af9e6b673e116ac3cc6e6f6695b12f42d19fb0e9bd7efee0b9aaaecbfae1dcac6f66ea221803f1c255c33e420afae5c3f03dd8eafe1f76403a2c21bd68258f5b1f62b2e2f4047325e40d70d698deb2374c47821c820a033304b3478a27478b322a22643e448b555b119da588b1d50b19405d5b02cbc75c35a3e0aea6dad046be3a266c789c111ece49045acd089656e676dfa2424dcfb7d48234c5b7d558487ba9df3a466d2e461c04c1ff37ef6b2c3b4a5f163f8a8bcc7c4a100b21c93806e703bd6c0c3a4b41b0df67014de8ec0164554c257f0493f0a946030d7908f8188cd251605e85e0c82933541f7387916d0e02373e654e70caf8109e3b121720e3d9803bb591c2971fe19b29984d4df3c5a4eba0efa6ba9ac1c5344222a1964b0f59b7ccea6a92d6df7691480a3f9e7bb1a57c09a7a7eb8a6bbd2b8f429be8cee189c3955d3d59187d54904fe3cf1b91a7ac2de204ed53c82f3c60e61975a13500e64e25bc8e97e4800822a1c37027ee1e159bba75eb85cc92bf6ed715a33205e3fbb1ee56d2c1b36e1dc2de17c755e99b7e20037926f4002cd2bfe2d5b91dca1146895fdaae891dbde1eb656f39280c9632654d8d24111b5402de99c82be6fa0f335f0aa676307bf60126c8185a00df94fed60930678f76aecc455c6b80100e345e8d7f58ce7a668d07ef86c18e92cb1e2ffcb6f165a19aa39b8eab4e3a1b7f3734af1e401ba9560942b011f95b3067a84233e75ea30a0fc8fd0516dece7bd57e323e782ae24fd2f16e130a0e547c3db9d2361ac6a41b3e956d532f9bc1b3a97ff3b60d47b6f065bbc672df9eeed8a5d95c5db1c7fd77bf8f69034613a85553c2e5905e451e1d76ef0879f329aec8386d5d255cd0f3820b1d7c600ac4d6c37cdd7477eb916c499f019072e51d08ed7e1c31176c803adc99c61423ee2df1a08d264cb725bb45e73679eb083607819aef3c84ce714447e9e42fdcb950cd7d5efd43cae8ad311f88e5de94a466679d62f464d494fb9b9f3c82a1128ad311ce6145ac7b76d2817d91259619d1f6cbd0d8361b8d157c049546fdc07222f599895a0ec6db0c362ac4b26e46e70b4792b06d1cc72aca730dee8bae14581c38c3229bb12965f368aba94f285788db095ab084210e4a2e6115ff8d2c0350d10d3d2ec8c55aa8e6ca628fd9fc4e7bab9c8255cfeb4757bbc6bb3ccdf013d8dbf3560243c3c11030dc1dece552924c0771b814b2c408cfed347c4ac082dc7cb77bbc51af2503387c2e0c44f3b3d95679495a71bf53c93f5d0ac79e075cb3a8de16ce716d71779e1330dc2c87a87a376b53f80148031f1265ea3baaf4f63fe9ca550af5f131b49db074fc080398fb6b7841ff280f6a70e5923336f63be7d7bc06a6f053fcde40c3be6afa6c0a1de37f0a940e6a57e245258c7648042e9a219c0d8d2d2fc2ef82bca7a335cd0dafb8ceacca745cd413225eaf33ed695f95940669880fcdf5de10c5068e5caf80b6e1f6d945ef53e6658efd64fca57a3152b587852816d30822719955bcdd9805dc05741a96ce040161f18e5820fecb6669fc9bfadde0b37c750b960f9f26faff7789b2db4d9ec1d790d08df35157e14143dfb03529ec03c52e6537aea5c75ce011e55fa5dad031bb6ac278c0fe5f306468d560ce9c973864b7151acd713d425a53bec704bf10c84f684deb3b98635d4241843a119680c5edb771abc682072fc0956c85727adef9e601b931eda002ac6d765288c8a81720c2a821672448a399b55f7517798e794b21dfbaf931b5cbc2487fc6e93e51f8fd85f19ad9814591049b2a6ef9847a9e30754ac9bdb24a1d2355b667e7fd2474a09a2c547f47f95de5048ec0a81dbfac4e72eb4bebe9cd753427c2abe17f8038be91d0c4c502e478df63e500afbfde31f98d39d7f032b07299312d09825005a3abef5792472c8770484bc5b57ce556adc636aef48747a383b7044e1736f915540d155913722f62b2b41ec9359c28a9ae3901b3080d7317271213ae4b7bf54fa836a63deee2a606dea77f482789e45781c6710ea8ef5f8bdb3ed1d61cbdbf153ecd147e7af51ad44296cfcb01d2c2d0e6f306ea4dc967522e91e15e0198b0f68634d2a34e35e86b9d06a2da4ae32eb63c53260e7d18153a8fbfa49ea0899563fd127344ef31a92d2c7b7aee69579267f04b60c3ad5803858d1cae20600cb70e21ca88cbc454d7a99f69ba8fe38c9876b16049a255059cd3854d507bd69eb02592e155b0643bee5164660437501eab62ee1643330aad5b9536a65e196acbfb7aaedb9c8b554377c509d4ca6d157a35ad04f1effe44cbca4aefcc098192f1034df43dbfc50df7ee74fe5a9fa9da1bd1b5a477925c89cd63853f32f53ce5ba5240017c21e5f4e5dcd1b04bd665e4901a3d3b0becd6503eb1a4935fa3a3e98482d1350b7576a0899d6bde4d1139eb634974374362141eac2f598ac6976f04fbff722d802cffa75fdab3c6b2c29e45021a2b27a2646e6b7246f493ec42f6ce6d32b3496ebad96fd50f4a08318cfb97f8f6a29aad967dcd4d93062d5528c3bc74c715272ba1ac7085958f113db2da4ab4597afec96aaa9a7a9e1ee585cb6e458f2708354b63d14fee1803802be6c2d3c0cd24d28a437d79a5c2af2af2ad5ef038dd1cf24283f0547b0147d3a09b4dc9aacc30a464c37ee13b9b278c20410e52fe43b3eca5847224b8ebbc6a2042c3a2ded11ee2ed6d2747c89228779328f4d43c057d92f8e7ef473431d1d22f7fdce5e976401c98a2ff33c942128bcfb7bafa9e9cda739120b022596e389a2294e209371664cfdaf77f2bba2586273a9fc93c82744b0d12b17d4ca51b5130ae348b93544bdd6b38fd1fa617b6f3d86823982084265fde023caf3cb3a3ac1426d1320add811a7d470669296e60dc1ddcf5b04d101d7954c404be68e1a1b9d330fd6dd62f50bc8469b5e42c2addaf760d7899f8b2d4281ffcbc3357db800afc311ba79bb635240f358e0924d9680e6f8e4ecdd9e8e50c7df0b5969ffde8ffedbbae67b22e98f17c1ef140b9f6aa4968b3cac4573eca771d64a36097b5273926453826bfe516a569aa7233420f0f1100228f05f700fef86cbce819d5bdd52734424b8d2b6618a0465c9359539f20c5b46f0e0b4febfd10fa5e163ae0647d5aa6575ae37b4e298290a9d71b75036a07f3edca5cb86c3f4134ec904c3e458a33dad8e8c225f9b3bce706b0021cf865385d134672c6ee4029aadce8b645dd8653706b67b1b1f561cf9817b0a5b1ca8cd74e93f4d601feaa0adaa3a2119d98ec29d5737a3ab5cd9e3b52414b6eea164b7546d4680ee029d78522d53ed6bc043637988572b597eed370741802c61c484b92e4491285e7ec432931e6318e17abfefd2805f3baeed5ac0f9c105953cefce7a0958686b39fa29767865b0c9046fca0fb12997fd3112e827928aec1908890ca3ed90137406e092ea08eb83295a082c6b1d6a46976a535f14da857ddf4cfa04dbe2d4d9694d97c8394b9623606dabacaa1e2bb531e119862eda9aff1090a97fcbf10c047397879309494fda95c5c11474bc542df41fcd261e99b2bcd35d00441b2120dab96a18ba030bffeef0e8b32a7300cef407abd5078b1fb3fa5139661d727bf9a46451b207ce988ca89a60e7b74cf17f52930d9bf11e758702b1af43d078057da99bd1bd4012f8e050bbb5c782aa985091c0ce85ac7fa2141c1c440026d6c995338774a12e7934e12e7a6dba5533fb29f8b575fdff55ae448fba8203e734cf2a884fc1c699a9537989001227f68f24f3ce9b8a6ab449a2fda5b2f0b5db391d22f11d4095494a5d8fab752b782e671b945c99953491028529a42d167ec98ebd67b6167a7405055b0ada004114c563e6f6ead81fc25f295fafd5527dc77bdbb7df1f64f6cc968254d45fc9db63832a8fffbf80af7ee5653977804aacf6b7c71174742f3c06c56850d482f981cd30651e9925b8cecfed5f1a69ed3c2b7546fad50dfc9ed588585f57f28ab8bcba93bb99ab62a8031d3dbe0a6d635183aaf01d0b9100da48bc17117216c12d129275d50a1dbf79d6d19f2b116b2cb13bff7cd8b9eac80b1d09cc23a8286d810dbd9e5a78d78453cf51d84e384b8e83dbdab4d2e9ff9c57ddd63d400210d7db35a3d6f3ecc0f95d7706b3ce86f5d2f0eca55eb4a2b8c4e90f8d330e86b6476411ade5486dc266c05558f75404513f1ff5c74325edfd87e73b9576353e0304442941920003c412a3f2b06b87b8481f387ea82bced1b62f7aea56ce5e32dd58a205c9a6c4b6af462fd474d910acc0b8650fb0de5656cb02c9a2380331692e89a62eabea3b8f694a8c850e0796e8a254cc31472367842449fdeea3dc55ebdce07a2b51230e95db66e18de4bdc272d739956bd5c3a664aa4b3d53ff2373c0d0a54384211ce4d1ede2567260c53c5446afe946c287bdfd4352b25bb49e32f1f3202cc2859c6649880515bee8e6ab96d600f04976345457d8a4838d2a163b842c995a6ce46a3c07921843f8e6e7b73e7172d1fc5a95127b528ad971c95235846257f80aa54f0d13f5630ba9c1910956fe4fb5e7d471a070974cdc90fa1cc9f67fa32c2432138173972e9358e1ac49e564ddc3934d8fa53e9132b371233a9fe46ac51e43f27e413162c1038dae001ff48d6524872eb8caee2684879dae755e550b05f8ee4d57f5553c6384d19054318a602eff4bddb4b78740897f9a0195ae524aaadfaeab6845e50f5e3eaaef712aafc5827d68c44b1311c68ac4f2866239e20ffefd0a7477d7ebc2f858a33320b06ba4a7c66549458795a0cf7d2ca3a4a40d42477a8a104d566e3d7afa41c4276bc7e5e601cad669ba19b6a0d3d1c2229adbcbce7eb6e8b26877682c4e0e0a4e05ca71875620d28055a8f045ee684aa5c15592db3017626eb50d2b5579916e5f237d2ed2eeeda552ff473605f579a3f5c18280b6b834e748e6386e3ea652562070e6050ff1bcb6a76100702a118d34da436b7ba63f95e009a3001930fbda2b5b910fde8587126f4722da86fa692b671cef166cf4edc3b379936e1471a0b056d63100a27dd67937faebde60be26dba3826c8d3ce9e945ca605f894749be5c3d5af6c0373f097876876412e6bd6f2551d563d8d1cb5ca38b86af5a9a027d674aae88568713469895b7348001416d92d7dd7bfd15e26d6660b329e7f6e30458e49c90cd7941b55ffa520430979047a99e625d06ef784515b0ae783a41337cb772eab62af41080570e207b2891f326f20e2cb0fa46d30b38e240425b653b0c0d5e61a177e2cacc0839e84272d8b232f68f021de2043ce858603130504843dde00fc9fabc2ab5c4f9e47400165315923c8aae4cc510fb04fc9149e923d49217bbedea68ffb4198db2758a5e1ae9646f4d65f6e4ab525886acdd4f16dcef72e123608b944a684052bb56f3048884e6f0af8aa38e9db29b96f0ac0d5e81832963a2d07625a42e71399ded7799670be43eec5f7df1a1180b5e5166496a1c7700c6bfa571c416eef36adfa4ddc6c065a6808c4e4bb6c26cf1035673cce1b4b33f3203474519a6900f0e09e2ef329a7c74df15bed784059695b0883c5e6c521f2ecef41fbacb5efc0d4da30e7385fd3796831117e704747e3f8b6d27c6b3fda315c31c939783461a354e36923269f27e539307c044dd160d37bc8f9dce5dbd273b38030ca6e865d3ce3a49d5f4847f39f5388023b6b8f329c46c76073c139a93e9562ff3ada3c30d2238653f807eaf50c29903a7043d14bb30c3a8cbd97c9dcf67452aae755b68b177711138a00087ac03df18b4f81380acc1e8af536d41cdc3fd2c7ca7c6b95da8160dd5281ab21133ff3147b258e33fe2c0041305c0093358f333ab446765a9d847333977b73b54ce00b81909ed545a47753e5a4b997dd574908441ef2206542b520bc68d3f4458664c9b15227f0fd8c227bf0e8cc244bd001d44c60fbd4467887ebe03d37a7426e12c03c463d6bbc13a1faeb62f0107f3e5e29ec00b01c9e9d6147479af3074c529e818ac35b9011e99a634db9e1f6e7d0927b8b94db63ae2ff5c54ae8a28eb3d24c8015701f189f6c602790440e420655634ba383ca4425aea9e872ccd2b8297bc14e74d2d47fa51a97ba4b97d17c6b3b350cdc64092875a7f22357bde01e1dad813f1142380fd372a5bde83bd82076d07c519eac14ab1e9a62f84212772af0e5f0e4836496739b131e84ee868eb8c9d3cd9c52c27926910470f9fa80e46943b3b4d133b09c357c6a66c1d72e61bfd4a39d5f914db3357d64a08ac98fd443a6a53187ba9ca5bfe7f712d72a9a0da017de601df2b43f522439763d4775b3546a38fb7a80af3f8d7e27a747614fcef403d2ba49cf8c89f725f17683ecf90e163ecd771c1e5ee6289faaa88503b63246392f0075b03d2fbf133b05e13270410374f1390efc32261bdcce7b329a63e3f12841d7342d5cacf45c64b8f7a081f8a6ad32b5a592bf7bd1b621a3b29def309f41c9a2e79f516e41620d1419cf94916a580071828a5d53d4ac32c69776aec4ab2614f8029eb20020d4a28bda082ea7e905f901183b924abf3f703853cd28fcaf35c25b37a404ff0d14b3a4baf2b6a88d277ac8f93f04ccdbd0789d79f9f46506013020e937b0a780b2bed32f17d31fd13d144d87fd1b56b51faa4a6c95878a6a190d0d89d24bb6063f32bbc8dffa7a4fd73413570e5c84f56d83e3ce2858c925ddb755abfc4c97180aadb2fac3a3447366789ee8eb2eb4075a93edf11aeecdd3cfadbdc22e29c730b58e5d475b441ac66b5064b00c2870556768cd87e5cff4fe8f7e8a5ed069c2eab0530f311f7349c36639e94ef9d0567a046106f52162daf06d986ff49b8316a09baa6d4a78b77df4d7b3b1082c9cb2efc22b2ebb565dec741a99c305e81c3eecd7f2ebe60f6703d5504c408e2d0432211115a96ced07a5d3e6e118153e8ba839e5ab0fb64c2897ef30721c4363ad40a881bf0b6c6df693aa830cf3a51767ef1245515d1da762969d18b3a8ca78de5b008485c94c41a142625f8bda37fb1770008774389ea9bb7c89798f7a85d53e0da3aa18678f10ae1e85dcdc30406230d77f2c8236abeb89d61ed36405f7f132c51c52d56a97536394afab7c9a40d54a92089519dbe7b5542fc796efdfb365631dd53f5b57177268512a1beb7ccbdcbb1c176199acb4cfb0e63e64716c2a9a3574589ff89161f632b09fceb75c43e108f23612800db5730695ddaca73fd018206531155bce1967495f7b345ecd4b7aba90ef087b934c47fbbb1fdfefcf3657ba6cd93ff341a04e129a46ed402445025694ace3dab1ebc6d6c28f9eb9aeefe179f7cb603db09913351d7d4a1a05b3304369ea152c0e36784e48a73993334f3dd5928236b97f663f1745a8db3af6285d377d312cfdecaec4b8c9f1611b00e6d563d99823f5228a5a3f9f3421315a1711796b1c8bbef1a734aca2e875afac49408b1967a85f3e87dd24a6b9bc7bc601c5afa006c1eda1c260a0701717cf79e8f7d1ee9b347627e1305ce893fd98ae7b1230b88a50187182b12acde7a8091e4873ded58d68c873290c4ed17d750697d56fb31111c6bde55aaea1f8e4a6dafdda3ce84ac8b5d4a4b1c970fdb0a35406c3369d4627864c71dcc1bcad98a4b39d20cba4dac79c19313de079c9f818ff6fa72f55c4462f42ab6b82c1486e222160be989ae2249c04ad0ff9bfc29e36675703827317f8224ef6997a5645ff9fb30d063c111d4a26257cba6dc9841d9c3a416b088bbdb7ffbfe7e910f242a78dd6e69a2ecdd8c2db0a24cfc50d6b10bad6b33ff9f632002813f3dcdf1bbb006d1b81dcd917a1092 +MD = dbabf11d16c07e6033e6a4b23be8c6a9dd9a54bd66e67246206bff51 + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.rsp b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.rsp new file mode 100644 index 000000000000..a3f56f4375de --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 21.1 +# "SHA-512/224 Monte" information for "sha_values" +# SHA-512/224 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:08:00 2017 + +[L = 28] + +Seed = 2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a + +COUNT = 0 +MD = 9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4 + +COUNT = 1 +MD = 87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a02 + +COUNT = 2 +MD = 7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec35 + +COUNT = 3 +MD = 7a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d49 + +COUNT = 4 +MD = aaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216ea + +COUNT = 5 +MD = 60f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c7 + +COUNT = 6 +MD = c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc0512278 + +COUNT = 7 +MD = 1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8eb + +COUNT = 8 +MD = 3ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd8 + +COUNT = 9 +MD = b09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739a + +COUNT = 10 +MD = 756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912 + +COUNT = 11 +MD = 08ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af7 + +COUNT = 12 +MD = 6f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de5 + +COUNT = 13 +MD = a39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7b + +COUNT = 14 +MD = c7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62f + +COUNT = 15 +MD = b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09 + +COUNT = 16 +MD = ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613 + +COUNT = 17 +MD = a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41 + +COUNT = 18 +MD = 5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cd + +COUNT = 19 +MD = 0d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a39 + +COUNT = 20 +MD = 4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d + +COUNT = 21 +MD = 02a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa7384 + +COUNT = 22 +MD = 75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce + +COUNT = 23 +MD = 4ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c8 + +COUNT = 24 +MD = c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5 + +COUNT = 25 +MD = 0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec + +COUNT = 26 +MD = 8704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c742 + +COUNT = 27 +MD = 877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb + +COUNT = 28 +MD = 15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e + +COUNT = 29 +MD = deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06 + +COUNT = 30 +MD = 19af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f9 + +COUNT = 31 +MD = d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67 + +COUNT = 32 +MD = c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b70 + +COUNT = 33 +MD = bbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456c + +COUNT = 34 +MD = b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d27 + +COUNT = 35 +MD = e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8 + +COUNT = 36 +MD = af77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172a + +COUNT = 37 +MD = de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3 + +COUNT = 38 +MD = 00397993b6b0ab272be84263167167270c45df00483b01fe9b1ea365 + +COUNT = 39 +MD = 9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd + +COUNT = 40 +MD = 6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca + +COUNT = 41 +MD = 39b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e8603 + +COUNT = 42 +MD = 49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf + +COUNT = 43 +MD = fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41 + +COUNT = 44 +MD = eeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4d + +COUNT = 45 +MD = edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48 + +COUNT = 46 +MD = 46bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f15 + +COUNT = 47 +MD = 1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09e + +COUNT = 48 +MD = cd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063d + +COUNT = 49 +MD = cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363 + +COUNT = 50 +MD = 76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc + +COUNT = 51 +MD = 3f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c20427 + +COUNT = 52 +MD = f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa923 + +COUNT = 53 +MD = f88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cb + +COUNT = 54 +MD = a071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdf + +COUNT = 55 +MD = 19e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea37027 + +COUNT = 56 +MD = 87f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee34 + +COUNT = 57 +MD = 6172fb88775686115c5d62e7b32affb353b40a41fe1ebfc603917274 + +COUNT = 58 +MD = df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554 + +COUNT = 59 +MD = 3c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb25 + +COUNT = 60 +MD = 2273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e0 + +COUNT = 61 +MD = bdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2f + +COUNT = 62 +MD = 24f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a194 + +COUNT = 63 +MD = ea7672b36987befb16352c13231fb7668c75673a932bf880181765e4 + +COUNT = 64 +MD = e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784 + +COUNT = 65 +MD = 86983ba278254438244b1bf5ea59492ec36504a078530b6a7812f832 + +COUNT = 66 +MD = ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1 + +COUNT = 67 +MD = 9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c + +COUNT = 68 +MD = 046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638c + +COUNT = 69 +MD = a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb0 + +COUNT = 70 +MD = 5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d + +COUNT = 71 +MD = 9b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d536917 + +COUNT = 72 +MD = 502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515 + +COUNT = 73 +MD = 7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388d + +COUNT = 74 +MD = b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd70 + +COUNT = 75 +MD = 6b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd92 + +COUNT = 76 +MD = 357f7779dc289dd46231a46bdeabaf899b167984864d232410736505 + +COUNT = 77 +MD = 28cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d88 + +COUNT = 78 +MD = d3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2d + +COUNT = 79 +MD = bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf01145 + +COUNT = 80 +MD = 1f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a3 + +COUNT = 81 +MD = d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9 + +COUNT = 82 +MD = 45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fd + +COUNT = 83 +MD = 2fad09cb0e93263548120115972110979eec7ef94e303c462223005d + +COUNT = 84 +MD = 6680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f3 + +COUNT = 85 +MD = 1076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff1 + +COUNT = 86 +MD = 0a819369c413d8d20195fa16660b320988357d63c1a94602eb117377 + +COUNT = 87 +MD = 397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b9916 + +COUNT = 88 +MD = 217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e + +COUNT = 89 +MD = ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f19843 + +COUNT = 90 +MD = 4a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b0 + +COUNT = 91 +MD = 970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e + +COUNT = 92 +MD = a7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021a + +COUNT = 93 +MD = d63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fc + +COUNT = 94 +MD = 0dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a05 + +COUNT = 95 +MD = c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f53 + +COUNT = 96 +MD = 1b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d3 + +COUNT = 97 +MD = 8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c + +COUNT = 98 +MD = a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05 + +COUNT = 99 +MD = 5d8fc89761e82efe7188596a52eb43efd9492038bbc47bc0df5e9843 + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.txt b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.txt new file mode 100644 index 000000000000..1d53ac8e0258 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224Monte.txt @@ -0,0 +1,2209 @@ +# CAVS 21.1 +# "SHA-512/224 Monte" information for "sha_values" +# SHA-512/224 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:08:00 2017 + +[L = 28] + +Seed = 2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a + +COUNT = 0 + i = 3 + M = 2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a + MDi = 46989836df2f5be8aed255dd0807050134ba8f7f0c4cc837b7b4e7dd + + i = 4 + M = 2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a46989836df2f5be8aed255dd0807050134ba8f7f0c4cc837b7b4e7dd + MDi = 3140a13eb9c3c9da543c680fc97da8eba01c134e5d4effd00681052f + + i = 5 + M = 2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a46989836df2f5be8aed255dd0807050134ba8f7f0c4cc837b7b4e7dd3140a13eb9c3c9da543c680fc97da8eba01c134e5d4effd00681052f + MDi = 9782959b9e747de45afe3bb7aceae9d4702cf26b9672c43b0e356e72 + + i = 6 + M = 46989836df2f5be8aed255dd0807050134ba8f7f0c4cc837b7b4e7dd3140a13eb9c3c9da543c680fc97da8eba01c134e5d4effd00681052f9782959b9e747de45afe3bb7aceae9d4702cf26b9672c43b0e356e72 + MDi = 271e3629543f493c471b92723678858a8bfaea473e09c39d32115f6c + + i = 7 + M = 3140a13eb9c3c9da543c680fc97da8eba01c134e5d4effd00681052f9782959b9e747de45afe3bb7aceae9d4702cf26b9672c43b0e356e72271e3629543f493c471b92723678858a8bfaea473e09c39d32115f6c + MDi = 11ae9691435a79fa1c0b9005e9984b583bc6c55f4c90ae4f9a6d2edf +MD = 9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4 + +COUNT = 1 + i = 3 + M = 9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f49ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f49ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4 + MDi = b60493ec3ec732cce409bee1139c005c40629f87df517729988207e3 + + i = 4 + M = 9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f49ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4b60493ec3ec732cce409bee1139c005c40629f87df517729988207e3 + MDi = 812f6797a51de0fd06ef4d579964f2d724c21aee718116a9d57e1cca + + i = 5 + M = 9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4b60493ec3ec732cce409bee1139c005c40629f87df517729988207e3812f6797a51de0fd06ef4d579964f2d724c21aee718116a9d57e1cca + MDi = d232bdce2dd9d63e64da51184a82992acfa1c6c9d482ed2dd343ca89 + + i = 6 + M = b60493ec3ec732cce409bee1139c005c40629f87df517729988207e3812f6797a51de0fd06ef4d579964f2d724c21aee718116a9d57e1ccad232bdce2dd9d63e64da51184a82992acfa1c6c9d482ed2dd343ca89 + MDi = 4e03f03b46ddb5c44a712c08d28c58d2bb03bf6d454a00f13066cca6 + + i = 7 + M = 812f6797a51de0fd06ef4d579964f2d724c21aee718116a9d57e1ccad232bdce2dd9d63e64da51184a82992acfa1c6c9d482ed2dd343ca894e03f03b46ddb5c44a712c08d28c58d2bb03bf6d454a00f13066cca6 + MDi = c985d7d9ab3fe6f48611689cd1309bcf6d51f26fc49dfdf5a5819c91 +MD = 87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a02 + +COUNT = 2 + i = 3 + M = 87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a0287726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a0287726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a02 + MDi = 38680b28bd532f003810ffc14a3ecc8d86beb410d11dcdb4d47bb56f + + i = 4 + M = 87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a0287726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a0238680b28bd532f003810ffc14a3ecc8d86beb410d11dcdb4d47bb56f + MDi = 5bb62b7a3f18b41f5483626462a9cc503bfc904c4346b0e4c7d7ec3b + + i = 5 + M = 87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a0238680b28bd532f003810ffc14a3ecc8d86beb410d11dcdb4d47bb56f5bb62b7a3f18b41f5483626462a9cc503bfc904c4346b0e4c7d7ec3b + MDi = 37ac0a3e0ae3ad01cd4258bde22695442ad8a5c804995ba9166e4f3a + + i = 6 + M = 38680b28bd532f003810ffc14a3ecc8d86beb410d11dcdb4d47bb56f5bb62b7a3f18b41f5483626462a9cc503bfc904c4346b0e4c7d7ec3b37ac0a3e0ae3ad01cd4258bde22695442ad8a5c804995ba9166e4f3a + MDi = 8090d511d1afbbffda7f8fe5f43536243fba1aef81fee188eba95bac + + i = 7 + M = 5bb62b7a3f18b41f5483626462a9cc503bfc904c4346b0e4c7d7ec3b37ac0a3e0ae3ad01cd4258bde22695442ad8a5c804995ba9166e4f3a8090d511d1afbbffda7f8fe5f43536243fba1aef81fee188eba95bac + MDi = 44cc71bceb9163d8e8431a4e2b96069d816c94e17f18051c36ae36b0 +MD = 7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec35 + +COUNT = 3 + i = 3 + M = 7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec357be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec357be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec35 + MDi = 57e8abc1d965a4c8c26ee251b76e70bd607a8fe743360f069d3415d2 + + i = 4 + M = 7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec357be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec3557e8abc1d965a4c8c26ee251b76e70bd607a8fe743360f069d3415d2 + MDi = 51b7586d0c2ccda8769944246a2f43e9268f5892bed1d36d244c40d8 + + i = 5 + M = 7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec3557e8abc1d965a4c8c26ee251b76e70bd607a8fe743360f069d3415d251b7586d0c2ccda8769944246a2f43e9268f5892bed1d36d244c40d8 + MDi = 913f7d1584c44940201050d4f1ef7966a856ac92935f01c0912186da + + i = 6 + M = 57e8abc1d965a4c8c26ee251b76e70bd607a8fe743360f069d3415d251b7586d0c2ccda8769944246a2f43e9268f5892bed1d36d244c40d8913f7d1584c44940201050d4f1ef7966a856ac92935f01c0912186da + MDi = aa462de675ca786d30e4558aec79911ef5743683fbd1e55561600255 + + i = 7 + M = 51b7586d0c2ccda8769944246a2f43e9268f5892bed1d36d244c40d8913f7d1584c44940201050d4f1ef7966a856ac92935f01c0912186daaa462de675ca786d30e4558aec79911ef5743683fbd1e55561600255 + MDi = 8eedcfdd679a251b4588de05f9b093298dcb6a1971a765fdbb24a17f +MD = ? + +COUNT = 4 + i = 3 + M = 7a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d497a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d497a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d49 + MDi = 6a21d90539b8e150df03430aee8241071ed026f72e602ea9dbab8258 + + i = 4 + M = 7a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d497a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d496a21d90539b8e150df03430aee8241071ed026f72e602ea9dbab8258 + MDi = e1cc40e0d93e504d61a3054ac5be1fd93afb41fcc060644cbfc340f1 + + i = 5 + M = 7a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d496a21d90539b8e150df03430aee8241071ed026f72e602ea9dbab8258e1cc40e0d93e504d61a3054ac5be1fd93afb41fcc060644cbfc340f1 + MDi = de1b51b6f7965efe0dc6bc9fc91494dcf36899f0741831d933fe8fc0 + + i = 6 + M = 6a21d90539b8e150df03430aee8241071ed026f72e602ea9dbab8258e1cc40e0d93e504d61a3054ac5be1fd93afb41fcc060644cbfc340f1de1b51b6f7965efe0dc6bc9fc91494dcf36899f0741831d933fe8fc0 + MDi = ef0f498bf28f54e6fbe47ccaf1fabe3d80fa69938b2a4f5b33207ecf + + i = 7 + M = e1cc40e0d93e504d61a3054ac5be1fd93afb41fcc060644cbfc340f1de1b51b6f7965efe0dc6bc9fc91494dcf36899f0741831d933fe8fc0ef0f498bf28f54e6fbe47ccaf1fabe3d80fa69938b2a4f5b33207ecf + MDi = 1ea321bca59f73c7eafed305c328fce8575dac52b65c1b07ae55f959 +MD = ? + +COUNT = 5 + i = 3 + M = aaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216eaaaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216eaaaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216ea + MDi = 4106ecc330784fdeb25b74294b52c2be3738354e4299d28ddfd71303 + + i = 4 + M = aaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216eaaaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216ea4106ecc330784fdeb25b74294b52c2be3738354e4299d28ddfd71303 + MDi = f93635fa35244f70111e98927f1de8f7df50bed5ae834435b0f6d657 + + i = 5 + M = aaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216ea4106ecc330784fdeb25b74294b52c2be3738354e4299d28ddfd71303f93635fa35244f70111e98927f1de8f7df50bed5ae834435b0f6d657 + MDi = ab7c27d79518db3ce2ebc920b6fcc93e8039e081e61a5ae50d98e15a + + i = 6 + M = 4106ecc330784fdeb25b74294b52c2be3738354e4299d28ddfd71303f93635fa35244f70111e98927f1de8f7df50bed5ae834435b0f6d657ab7c27d79518db3ce2ebc920b6fcc93e8039e081e61a5ae50d98e15a + MDi = 7df65b9f37929b80165c1b5d2088987b2d81a94793ebfa4714fa991a + + i = 7 + M = f93635fa35244f70111e98927f1de8f7df50bed5ae834435b0f6d657ab7c27d79518db3ce2ebc920b6fcc93e8039e081e61a5ae50d98e15a7df65b9f37929b80165c1b5d2088987b2d81a94793ebfa4714fa991a + MDi = 62b7b9857a143a0bcc0cbdcab2cd56badaf8fe7cf8e49ce4a48a2a58 +MD = ? + +COUNT = 6 + i = 3 + M = 60f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c760f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c760f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c7 + MDi = 51b4a6a70e9d4e27fb39cc6e76e249e0d8ac25d30cae1f5069957cce + + i = 4 + M = 60f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c760f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c751b4a6a70e9d4e27fb39cc6e76e249e0d8ac25d30cae1f5069957cce + MDi = 2dfbfb816cf55e56deaa97a80661060b07649a66fcd41c2fc008f693 + + i = 5 + M = 60f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c751b4a6a70e9d4e27fb39cc6e76e249e0d8ac25d30cae1f5069957cce2dfbfb816cf55e56deaa97a80661060b07649a66fcd41c2fc008f693 + MDi = c08b799ea8b2b1326289b24c7c678510b34c7566507fc4ad5e7e5f99 + + i = 6 + M = 51b4a6a70e9d4e27fb39cc6e76e249e0d8ac25d30cae1f5069957cce2dfbfb816cf55e56deaa97a80661060b07649a66fcd41c2fc008f693c08b799ea8b2b1326289b24c7c678510b34c7566507fc4ad5e7e5f99 + MDi = 4326d69a4518f0cf1cd5288b7fe518d3ed2166d6d09f9fca136aab27 + + i = 7 + M = 2dfbfb816cf55e56deaa97a80661060b07649a66fcd41c2fc008f693c08b799ea8b2b1326289b24c7c678510b34c7566507fc4ad5e7e5f994326d69a4518f0cf1cd5288b7fe518d3ed2166d6d09f9fca136aab27 + MDi = c87c7bbf5bd92c5cc91ab8300fa19a791fddaa0b8be0b4a6e543e532 +MD = ? + +COUNT = 7 + i = 3 + M = c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc0512278c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc0512278c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc0512278 + MDi = 2082ca26bac313e1d8db4e2c0923d52f5b7092428eace9448336957d + + i = 4 + M = c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc0512278c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc05122782082ca26bac313e1d8db4e2c0923d52f5b7092428eace9448336957d + MDi = 9946fe7925d9c3e34703cffae9bcc78eb8fea8dfec826cf47055016f + + i = 5 + M = c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc05122782082ca26bac313e1d8db4e2c0923d52f5b7092428eace9448336957d9946fe7925d9c3e34703cffae9bcc78eb8fea8dfec826cf47055016f + MDi = 55def231788a9ead22ce2f10d71e432aceca47dc473681aa0a7ed60d + + i = 6 + M = 2082ca26bac313e1d8db4e2c0923d52f5b7092428eace9448336957d9946fe7925d9c3e34703cffae9bcc78eb8fea8dfec826cf47055016f55def231788a9ead22ce2f10d71e432aceca47dc473681aa0a7ed60d + MDi = 92f3ce958775621e76e8e36e6c0ea4aad9d1645a2e95af76f4706198 + + i = 7 + M = 9946fe7925d9c3e34703cffae9bcc78eb8fea8dfec826cf47055016f55def231788a9ead22ce2f10d71e432aceca47dc473681aa0a7ed60d92f3ce958775621e76e8e36e6c0ea4aad9d1645a2e95af76f4706198 + MDi = 0d6704fd819969b8d02efe89477dbe5c74eb31406720f2dd6a3d4197 +MD = ? + +COUNT = 8 + i = 3 + M = 1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8eb1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8eb1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8eb + MDi = c113a8ddce87026ca0c6862399857edde40d0f9c8fc5044be8c6e4cf + + i = 4 + M = 1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8eb1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8ebc113a8ddce87026ca0c6862399857edde40d0f9c8fc5044be8c6e4cf + MDi = 4a464959bbcb94c2911bcc92087f9603398a6cf406b00232254cf0fa + + i = 5 + M = 1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8ebc113a8ddce87026ca0c6862399857edde40d0f9c8fc5044be8c6e4cf4a464959bbcb94c2911bcc92087f9603398a6cf406b00232254cf0fa + MDi = 9aa031435ac720d63806e9349f196596fe4335f09019cbb3df6dcc43 + + i = 6 + M = c113a8ddce87026ca0c6862399857edde40d0f9c8fc5044be8c6e4cf4a464959bbcb94c2911bcc92087f9603398a6cf406b00232254cf0fa9aa031435ac720d63806e9349f196596fe4335f09019cbb3df6dcc43 + MDi = c8b577d21275597cf9c8da72187b7932d97cdb36511bca2ceb091387 + + i = 7 + M = 4a464959bbcb94c2911bcc92087f9603398a6cf406b00232254cf0fa9aa031435ac720d63806e9349f196596fe4335f09019cbb3df6dcc43c8b577d21275597cf9c8da72187b7932d97cdb36511bca2ceb091387 + MDi = 1f8113e96884805b194a6c1ccc35b6beb4bf12e886deb0400cabc931 +MD = ? + +COUNT = 9 + i = 3 + M = 3ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd83ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd83ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd8 + MDi = de4dcd56691e4bb5ae8eb415d3f833e8deb4a95610fab773630f7710 + + i = 4 + M = 3ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd83ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd8de4dcd56691e4bb5ae8eb415d3f833e8deb4a95610fab773630f7710 + MDi = df59e79162f2f223af47c31b50a4e2e53bbbb8dc7106208accf861f0 + + i = 5 + M = 3ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd8de4dcd56691e4bb5ae8eb415d3f833e8deb4a95610fab773630f7710df59e79162f2f223af47c31b50a4e2e53bbbb8dc7106208accf861f0 + MDi = 4a539911dab0f4bb1a355d46e26e2a487bb04558170f466fd3876f39 + + i = 6 + M = de4dcd56691e4bb5ae8eb415d3f833e8deb4a95610fab773630f7710df59e79162f2f223af47c31b50a4e2e53bbbb8dc7106208accf861f04a539911dab0f4bb1a355d46e26e2a487bb04558170f466fd3876f39 + MDi = 89f5692990adbb9082991ba4a666bc95f32fe394a508a8961aa6bb2e + + i = 7 + M = df59e79162f2f223af47c31b50a4e2e53bbbb8dc7106208accf861f04a539911dab0f4bb1a355d46e26e2a487bb04558170f466fd3876f3989f5692990adbb9082991ba4a666bc95f32fe394a508a8961aa6bb2e + MDi = fa6e77121b38b7ca99f2b1fc0a101506b67fa94243cffb7390a66657 +MD = ? + +COUNT = 10 + i = 3 + M = b09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739ab09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739ab09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739a + MDi = b330a582eeb8dbc279f2500b9b2fe01f024111664b32c42d422d5789 + + i = 4 + M = b09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739ab09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739ab330a582eeb8dbc279f2500b9b2fe01f024111664b32c42d422d5789 + MDi = 0ba9caeaea633bb0aeff0ca23b6fa94e04662bb615b3773f3e06b6fd + + i = 5 + M = b09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739ab330a582eeb8dbc279f2500b9b2fe01f024111664b32c42d422d57890ba9caeaea633bb0aeff0ca23b6fa94e04662bb615b3773f3e06b6fd + MDi = e16ee07b272d4438891d5b18cf33f9be0d383936f02e1e4fff101714 + + i = 6 + M = b330a582eeb8dbc279f2500b9b2fe01f024111664b32c42d422d57890ba9caeaea633bb0aeff0ca23b6fa94e04662bb615b3773f3e06b6fde16ee07b272d4438891d5b18cf33f9be0d383936f02e1e4fff101714 + MDi = 002c0cdcd26c7fcadbd2694d371d7ce6a45b40508341e3cd011192a4 + + i = 7 + M = 0ba9caeaea633bb0aeff0ca23b6fa94e04662bb615b3773f3e06b6fde16ee07b272d4438891d5b18cf33f9be0d383936f02e1e4fff101714002c0cdcd26c7fcadbd2694d371d7ce6a45b40508341e3cd011192a4 + MDi = e830592ade986b2481b3f8eeb1b2756414c7370af30aef9a4d5111a6 +MD = ? + +COUNT = 11 + i = 3 + M = 756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912 + MDi = 630114712e1a9ab4b402def10adf4d4c686fdee5205ee7fb34150550 + + i = 4 + M = 756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912630114712e1a9ab4b402def10adf4d4c686fdee5205ee7fb34150550 + MDi = 979fe236e5a9f11fd80b2ea5f911a8cb15ee2f5191ef7f17d787002b + + i = 5 + M = 756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912630114712e1a9ab4b402def10adf4d4c686fdee5205ee7fb34150550979fe236e5a9f11fd80b2ea5f911a8cb15ee2f5191ef7f17d787002b + MDi = 0480236a4602111b781417c51a5c9bd5b7c445ff859b0852435f9a1f + + i = 6 + M = 630114712e1a9ab4b402def10adf4d4c686fdee5205ee7fb34150550979fe236e5a9f11fd80b2ea5f911a8cb15ee2f5191ef7f17d787002b0480236a4602111b781417c51a5c9bd5b7c445ff859b0852435f9a1f + MDi = 40419a07ea060bb6f07c71671bea3cd1b1d74a5629ada3c65e4e6865 + + i = 7 + M = 979fe236e5a9f11fd80b2ea5f911a8cb15ee2f5191ef7f17d787002b0480236a4602111b781417c51a5c9bd5b7c445ff859b0852435f9a1f40419a07ea060bb6f07c71671bea3cd1b1d74a5629ada3c65e4e6865 + MDi = e53cf7c5f2dfcbc0ec27d9a15ee054107abf61d0f76366841d196281 +MD = ? + +COUNT = 12 + i = 3 + M = 08ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af708ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af708ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af7 + MDi = aebd4fdd9f4266c16f44a2826d3ed033a3fe933c32bc07cb070cd016 + + i = 4 + M = 08ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af708ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af7aebd4fdd9f4266c16f44a2826d3ed033a3fe933c32bc07cb070cd016 + MDi = b9ce31a48d24489cef9c56fbcaf6889e724b46c521bb8e5dea000465 + + i = 5 + M = 08ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af7aebd4fdd9f4266c16f44a2826d3ed033a3fe933c32bc07cb070cd016b9ce31a48d24489cef9c56fbcaf6889e724b46c521bb8e5dea000465 + MDi = 9caf1184a19c5c86bc2b479706d9da1beae845ff4ac4a37f623c381c + + i = 6 + M = aebd4fdd9f4266c16f44a2826d3ed033a3fe933c32bc07cb070cd016b9ce31a48d24489cef9c56fbcaf6889e724b46c521bb8e5dea0004659caf1184a19c5c86bc2b479706d9da1beae845ff4ac4a37f623c381c + MDi = 4459f1fe4ded0f6b66d4edda83943dfa8f6aaaa6bc234e46bf063870 + + i = 7 + M = b9ce31a48d24489cef9c56fbcaf6889e724b46c521bb8e5dea0004659caf1184a19c5c86bc2b479706d9da1beae845ff4ac4a37f623c381c4459f1fe4ded0f6b66d4edda83943dfa8f6aaaa6bc234e46bf063870 + MDi = f0d896d3e73c1cfa789d801dde0e9108c7dad62cee1335e50013f447 +MD = ? + +COUNT = 13 + i = 3 + M = 6f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de56f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de56f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de5 + MDi = 3eb41b20576e1ec508db8c692f6598963fb05112affa743393c51fd3 + + i = 4 + M = 6f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de56f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de53eb41b20576e1ec508db8c692f6598963fb05112affa743393c51fd3 + MDi = aa354cb1957e1c68e3d51702bc7ff51e86f17323e42c9c543b765a3c + + i = 5 + M = 6f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de53eb41b20576e1ec508db8c692f6598963fb05112affa743393c51fd3aa354cb1957e1c68e3d51702bc7ff51e86f17323e42c9c543b765a3c + MDi = ea45b6170aadeb740b6ad3198d5c30ca792ce8304e398f9119120083 + + i = 6 + M = 3eb41b20576e1ec508db8c692f6598963fb05112affa743393c51fd3aa354cb1957e1c68e3d51702bc7ff51e86f17323e42c9c543b765a3cea45b6170aadeb740b6ad3198d5c30ca792ce8304e398f9119120083 + MDi = ba9053feaa7ed33d4603451271eca18039dbacfc4fbb078464ae0b65 + + i = 7 + M = aa354cb1957e1c68e3d51702bc7ff51e86f17323e42c9c543b765a3cea45b6170aadeb740b6ad3198d5c30ca792ce8304e398f9119120083ba9053feaa7ed33d4603451271eca18039dbacfc4fbb078464ae0b65 + MDi = a8a1ad5d89810e340a4bb561e8e8228b96b6cd422c7899fdc353da89 +MD = ? + +COUNT = 14 + i = 3 + M = a39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7ba39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7ba39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7b + MDi = e93667c22e32b1418927fdc6e129e63c98f5ac1a5f94064d8689ff41 + + i = 4 + M = a39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7ba39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7be93667c22e32b1418927fdc6e129e63c98f5ac1a5f94064d8689ff41 + MDi = b947688ef9bccd285ab04a77c9341d39eec8db2b336bf48c041c8bb5 + + i = 5 + M = a39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7be93667c22e32b1418927fdc6e129e63c98f5ac1a5f94064d8689ff41b947688ef9bccd285ab04a77c9341d39eec8db2b336bf48c041c8bb5 + MDi = d9d27fc51b9ea7ad8a7e7eda0c967b00ae1535764f32f3f4376fa8ce + + i = 6 + M = e93667c22e32b1418927fdc6e129e63c98f5ac1a5f94064d8689ff41b947688ef9bccd285ab04a77c9341d39eec8db2b336bf48c041c8bb5d9d27fc51b9ea7ad8a7e7eda0c967b00ae1535764f32f3f4376fa8ce + MDi = 3e50f1b7565222818afdfbe246db39b4397c68c10ba242afd725077d + + i = 7 + M = b947688ef9bccd285ab04a77c9341d39eec8db2b336bf48c041c8bb5d9d27fc51b9ea7ad8a7e7eda0c967b00ae1535764f32f3f4376fa8ce3e50f1b7565222818afdfbe246db39b4397c68c10ba242afd725077d + MDi = 2d7bf87074b8c442c50eb50c780a3b2f1246272c81990cdbadaa1673 +MD = ? + +COUNT = 15 + i = 3 + M = c7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62fc7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62fc7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62f + MDi = f1844ca3e2329461f9a05961f23d70c6d9269efb015e52ea466e049a + + i = 4 + M = c7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62fc7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62ff1844ca3e2329461f9a05961f23d70c6d9269efb015e52ea466e049a + MDi = b94a5e58135668de6773a019d37c6f64663b155e8372e210bef81bb9 + + i = 5 + M = c7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62ff1844ca3e2329461f9a05961f23d70c6d9269efb015e52ea466e049ab94a5e58135668de6773a019d37c6f64663b155e8372e210bef81bb9 + MDi = e5d0d3e11a0d702521178264b8aa5c37374055bca895f9212b5ea31e + + i = 6 + M = f1844ca3e2329461f9a05961f23d70c6d9269efb015e52ea466e049ab94a5e58135668de6773a019d37c6f64663b155e8372e210bef81bb9e5d0d3e11a0d702521178264b8aa5c37374055bca895f9212b5ea31e + MDi = f5299e7a67ce71edb9d9623855053460dd00ee8de8caac1436452ae3 + + i = 7 + M = b94a5e58135668de6773a019d37c6f64663b155e8372e210bef81bb9e5d0d3e11a0d702521178264b8aa5c37374055bca895f9212b5ea31ef5299e7a67ce71edb9d9623855053460dd00ee8de8caac1436452ae3 + MDi = 4dcd5ff9ee6fd7d3c8352b6d50b9d93f310d7acabfb7b084f6590561 +MD = ? + +COUNT = 16 + i = 3 + M = b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09 + MDi = ece48842cac33afd6217e7087431926911e23a3fcb79ccec8d81e54f + + i = 4 + M = b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09ece48842cac33afd6217e7087431926911e23a3fcb79ccec8d81e54f + MDi = 5503cc02169e5b43f3a7a2f798569079c1247b85367671e5d40272b5 + + i = 5 + M = b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09ece48842cac33afd6217e7087431926911e23a3fcb79ccec8d81e54f5503cc02169e5b43f3a7a2f798569079c1247b85367671e5d40272b5 + MDi = 41d1363bfcf2b932426975f1f36aba57c856e004273d4acb402a6e4e + + i = 6 + M = ece48842cac33afd6217e7087431926911e23a3fcb79ccec8d81e54f5503cc02169e5b43f3a7a2f798569079c1247b85367671e5d40272b541d1363bfcf2b932426975f1f36aba57c856e004273d4acb402a6e4e + MDi = 8b69d3be024bbec591a83362e5375a58a951a205d9b148e9074b3ecd + + i = 7 + M = 5503cc02169e5b43f3a7a2f798569079c1247b85367671e5d40272b541d1363bfcf2b932426975f1f36aba57c856e004273d4acb402a6e4e8b69d3be024bbec591a83362e5375a58a951a205d9b148e9074b3ecd + MDi = 984df878df7987fe3e0640d9405b0afb0c7803cb3c901277aef26516 +MD = ? + +COUNT = 17 + i = 3 + M = ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613 + MDi = d1fc7e93c4054420020a244602f4aa3b43afc8be9b9b6ee5431d38a2 + + i = 4 + M = ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613d1fc7e93c4054420020a244602f4aa3b43afc8be9b9b6ee5431d38a2 + MDi = 1c34d48b2007b16cb937916375a4ea110c3afb5519af63b4360489bd + + i = 5 + M = ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613d1fc7e93c4054420020a244602f4aa3b43afc8be9b9b6ee5431d38a21c34d48b2007b16cb937916375a4ea110c3afb5519af63b4360489bd + MDi = 661a56a7e36496f4b97d6d9b70a83e57f409c296ae1f7e5baa89ac32 + + i = 6 + M = d1fc7e93c4054420020a244602f4aa3b43afc8be9b9b6ee5431d38a21c34d48b2007b16cb937916375a4ea110c3afb5519af63b4360489bd661a56a7e36496f4b97d6d9b70a83e57f409c296ae1f7e5baa89ac32 + MDi = a02e94b9810487a9f24de182309116b33a058f3bd6b85ac890f3cd90 + + i = 7 + M = 1c34d48b2007b16cb937916375a4ea110c3afb5519af63b4360489bd661a56a7e36496f4b97d6d9b70a83e57f409c296ae1f7e5baa89ac32a02e94b9810487a9f24de182309116b33a058f3bd6b85ac890f3cd90 + MDi = af5a11f431be3be94d8aac15921c5ce6a9f471edff83becbc7905305 +MD = ? + +COUNT = 18 + i = 3 + M = a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41 + MDi = e5e821e6c11484c47884fbc463c28fd6737931cc6ba26c5532f1e802 + + i = 4 + M = a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41e5e821e6c11484c47884fbc463c28fd6737931cc6ba26c5532f1e802 + MDi = b85c7ad55febbeb03cd55e8f25720890c030df5bf14c96ca4bac5b6b + + i = 5 + M = a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41e5e821e6c11484c47884fbc463c28fd6737931cc6ba26c5532f1e802b85c7ad55febbeb03cd55e8f25720890c030df5bf14c96ca4bac5b6b + MDi = e95560110f188e042ad0198ce5d7a59bf08d8033a754a481ab6b6000 + + i = 6 + M = e5e821e6c11484c47884fbc463c28fd6737931cc6ba26c5532f1e802b85c7ad55febbeb03cd55e8f25720890c030df5bf14c96ca4bac5b6be95560110f188e042ad0198ce5d7a59bf08d8033a754a481ab6b6000 + MDi = d801ebec52853b84946840199dc022a34860ead7b90295500183d428 + + i = 7 + M = b85c7ad55febbeb03cd55e8f25720890c030df5bf14c96ca4bac5b6be95560110f188e042ad0198ce5d7a59bf08d8033a754a481ab6b6000d801ebec52853b84946840199dc022a34860ead7b90295500183d428 + MDi = 1f35227953d3ac8f0a8071f557652d7a06a344e6929da0501b2334e8 +MD = ? + +COUNT = 19 + i = 3 + M = 5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cd5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cd5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cd + MDi = ca45e44690631b036514dd082ed97feef0f416956ac4846688214a6b + + i = 4 + M = 5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cd5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cdca45e44690631b036514dd082ed97feef0f416956ac4846688214a6b + MDi = 2c26f73458f1c5d78ab50aabfeb0ec0604b64726e7be80d64602e8a3 + + i = 5 + M = 5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cdca45e44690631b036514dd082ed97feef0f416956ac4846688214a6b2c26f73458f1c5d78ab50aabfeb0ec0604b64726e7be80d64602e8a3 + MDi = 3779e6c6c2a038acb69a6b8ef0ca5c8f5105df37a90096e35071686a + + i = 6 + M = ca45e44690631b036514dd082ed97feef0f416956ac4846688214a6b2c26f73458f1c5d78ab50aabfeb0ec0604b64726e7be80d64602e8a33779e6c6c2a038acb69a6b8ef0ca5c8f5105df37a90096e35071686a + MDi = b1b2dcc19b57bbcccc8f3451890bda4679f9b9f6f44fd62dcf6f1cef + + i = 7 + M = 2c26f73458f1c5d78ab50aabfeb0ec0604b64726e7be80d64602e8a33779e6c6c2a038acb69a6b8ef0ca5c8f5105df37a90096e35071686ab1b2dcc19b57bbcccc8f3451890bda4679f9b9f6f44fd62dcf6f1cef + MDi = 56740a3a0124e19204062879b060de223227c11a74b63d7756022e2c +MD = ? + +COUNT = 20 + i = 3 + M = 0d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a390d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a390d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a39 + MDi = 44cb76913e6023199c974b40f2cc59ba069fe1c6dee34492c457e04c + + i = 4 + M = 0d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a390d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a3944cb76913e6023199c974b40f2cc59ba069fe1c6dee34492c457e04c + MDi = a91a93bb12940745dc37db3b6223243a08107dc2818b30f2438bccc3 + + i = 5 + M = 0d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a3944cb76913e6023199c974b40f2cc59ba069fe1c6dee34492c457e04ca91a93bb12940745dc37db3b6223243a08107dc2818b30f2438bccc3 + MDi = 332158b01adf8f7e1e213d6fcba77815c0b2ffb361c30292197cfe5a + + i = 6 + M = 44cb76913e6023199c974b40f2cc59ba069fe1c6dee34492c457e04ca91a93bb12940745dc37db3b6223243a08107dc2818b30f2438bccc3332158b01adf8f7e1e213d6fcba77815c0b2ffb361c30292197cfe5a + MDi = 1aadca9140895cd0373ff48a3854a576c5a389c059ac05d1d998ccb2 + + i = 7 + M = a91a93bb12940745dc37db3b6223243a08107dc2818b30f2438bccc3332158b01adf8f7e1e213d6fcba77815c0b2ffb361c30292197cfe5a1aadca9140895cd0373ff48a3854a576c5a389c059ac05d1d998ccb2 + MDi = 844f23c7fc82bcb24930c890f9baa3c5a0786e94a9221927855d8479 +MD = ? + +COUNT = 21 + i = 3 + M = 4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d + MDi = 19b3564693609b67e7319b26f696e1d6f5b25bf8c8b7a9ba2b45cc0a + + i = 4 + M = 4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d19b3564693609b67e7319b26f696e1d6f5b25bf8c8b7a9ba2b45cc0a + MDi = 30fcebd9a997365efff01b42f5f09388fab436e5fcdd6c949bb199f0 + + i = 5 + M = 4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d19b3564693609b67e7319b26f696e1d6f5b25bf8c8b7a9ba2b45cc0a30fcebd9a997365efff01b42f5f09388fab436e5fcdd6c949bb199f0 + MDi = c65f35bc3e6ed711efca1a65603df73ad5164e26ddc4265c08d4439f + + i = 6 + M = 19b3564693609b67e7319b26f696e1d6f5b25bf8c8b7a9ba2b45cc0a30fcebd9a997365efff01b42f5f09388fab436e5fcdd6c949bb199f0c65f35bc3e6ed711efca1a65603df73ad5164e26ddc4265c08d4439f + MDi = 09070db0e24eb3cb36331678defe3429292ec6fd2b3c533546200b7b + + i = 7 + M = 30fcebd9a997365efff01b42f5f09388fab436e5fcdd6c949bb199f0c65f35bc3e6ed711efca1a65603df73ad5164e26ddc4265c08d4439f09070db0e24eb3cb36331678defe3429292ec6fd2b3c533546200b7b + MDi = d90eb407604a94de7694f9671dc043a3ff016663d819522b43d962bd +MD = ? + +COUNT = 22 + i = 3 + M = 02a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa738402a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa738402a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa7384 + MDi = e8077f0f4d04ffab03f40850c298c972c98000901b905668771ce2c0 + + i = 4 + M = 02a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa738402a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa7384e8077f0f4d04ffab03f40850c298c972c98000901b905668771ce2c0 + MDi = 2fe9d88e2f0164c268e5d34cb48ca0d8214ddf7780ec2902b6264698 + + i = 5 + M = 02a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa7384e8077f0f4d04ffab03f40850c298c972c98000901b905668771ce2c02fe9d88e2f0164c268e5d34cb48ca0d8214ddf7780ec2902b6264698 + MDi = 84ebd62d90c16e800828b31a821d6bac8674ee55122c8279c6c205e2 + + i = 6 + M = e8077f0f4d04ffab03f40850c298c972c98000901b905668771ce2c02fe9d88e2f0164c268e5d34cb48ca0d8214ddf7780ec2902b626469884ebd62d90c16e800828b31a821d6bac8674ee55122c8279c6c205e2 + MDi = 1d82ee64b8de183fd520aa167c70a6a168d2692f90b3a762b0861713 + + i = 7 + M = 2fe9d88e2f0164c268e5d34cb48ca0d8214ddf7780ec2902b626469884ebd62d90c16e800828b31a821d6bac8674ee55122c8279c6c205e21d82ee64b8de183fd520aa167c70a6a168d2692f90b3a762b0861713 + MDi = bfc49035403b2e63c9f8312dac6937e4ffe792694b3b95e719e52b67 +MD = ? + +COUNT = 23 + i = 3 + M = 75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce + MDi = 6739d3bc6773083541e8923a4e7e3146412fcf119d3c228f098a0a7c + + i = 4 + M = 75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce6739d3bc6773083541e8923a4e7e3146412fcf119d3c228f098a0a7c + MDi = 53c84798a90182c40cce95ea3ce48f610ddb91de5b247f565ff3268b + + i = 5 + M = 75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce6739d3bc6773083541e8923a4e7e3146412fcf119d3c228f098a0a7c53c84798a90182c40cce95ea3ce48f610ddb91de5b247f565ff3268b + MDi = f8d08885e58c62368afa90f9e03daff4c324344beb777aca877f38ff + + i = 6 + M = 6739d3bc6773083541e8923a4e7e3146412fcf119d3c228f098a0a7c53c84798a90182c40cce95ea3ce48f610ddb91de5b247f565ff3268bf8d08885e58c62368afa90f9e03daff4c324344beb777aca877f38ff + MDi = 1a79f4dd679d2397c0fa606cbd9c9839e0d9e3316d63e99a431acf41 + + i = 7 + M = 53c84798a90182c40cce95ea3ce48f610ddb91de5b247f565ff3268bf8d08885e58c62368afa90f9e03daff4c324344beb777aca877f38ff1a79f4dd679d2397c0fa606cbd9c9839e0d9e3316d63e99a431acf41 + MDi = 4d5ddbd3f4167f67b2db9f81ef711dcfb0d32a9be45dc0d5dd5d21aa +MD = ? + +COUNT = 24 + i = 3 + M = 4ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c84ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c84ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c8 + MDi = cba5abde5d7cdde3cf013f2d22bd2d790dc687a437cb8f9f8ce73e5a + + i = 4 + M = 4ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c84ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c8cba5abde5d7cdde3cf013f2d22bd2d790dc687a437cb8f9f8ce73e5a + MDi = 2faa716cf2ac6666b7f1923a276795d3a0cbe35d1ac1933170169688 + + i = 5 + M = 4ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c8cba5abde5d7cdde3cf013f2d22bd2d790dc687a437cb8f9f8ce73e5a2faa716cf2ac6666b7f1923a276795d3a0cbe35d1ac1933170169688 + MDi = a6014e32bcceab77bf373d1b85aed7268746ac5ea5ce5810814b6096 + + i = 6 + M = cba5abde5d7cdde3cf013f2d22bd2d790dc687a437cb8f9f8ce73e5a2faa716cf2ac6666b7f1923a276795d3a0cbe35d1ac1933170169688a6014e32bcceab77bf373d1b85aed7268746ac5ea5ce5810814b6096 + MDi = bfbe6f75ea36b2798720c1cbef599cf3636d95dfafc7f3ec53c39cd3 + + i = 7 + M = 2faa716cf2ac6666b7f1923a276795d3a0cbe35d1ac1933170169688a6014e32bcceab77bf373d1b85aed7268746ac5ea5ce5810814b6096bfbe6f75ea36b2798720c1cbef599cf3636d95dfafc7f3ec53c39cd3 + MDi = eabca5a8cb960c24f0e798b420b6f746563b6b8bde76723c636961f4 +MD = ? + +COUNT = 25 + i = 3 + M = c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5 + MDi = 994a20f4b3651d14b4998988da15e4fd5527a322fc0ceb568479eec2 + + i = 4 + M = c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5994a20f4b3651d14b4998988da15e4fd5527a322fc0ceb568479eec2 + MDi = bb9774d7abd126db63782b1d6dbbca8c857be79698e78fa96b7af6ec + + i = 5 + M = c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5994a20f4b3651d14b4998988da15e4fd5527a322fc0ceb568479eec2bb9774d7abd126db63782b1d6dbbca8c857be79698e78fa96b7af6ec + MDi = 3448161ee9d523152f027d9a11c7c7730fbb556358462c1525b45785 + + i = 6 + M = 994a20f4b3651d14b4998988da15e4fd5527a322fc0ceb568479eec2bb9774d7abd126db63782b1d6dbbca8c857be79698e78fa96b7af6ec3448161ee9d523152f027d9a11c7c7730fbb556358462c1525b45785 + MDi = a1eaaa56d46930839517e2817430f67679e7a6262d11f89b21f70531 + + i = 7 + M = bb9774d7abd126db63782b1d6dbbca8c857be79698e78fa96b7af6ec3448161ee9d523152f027d9a11c7c7730fbb556358462c1525b45785a1eaaa56d46930839517e2817430f67679e7a6262d11f89b21f70531 + MDi = 9842bd726237131c9d8543fdd979c2fa62bc362643867095fa4d8bce +MD = ? + +COUNT = 26 + i = 3 + M = 0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec + MDi = 83ece3fdf9595b463feab0d5b391609811d1c7d5584829c39e46aba4 + + i = 4 + M = 0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec83ece3fdf9595b463feab0d5b391609811d1c7d5584829c39e46aba4 + MDi = 138135873f8566a8cb363551197d0368b978f85654647eb0a0c99b82 + + i = 5 + M = 0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec83ece3fdf9595b463feab0d5b391609811d1c7d5584829c39e46aba4138135873f8566a8cb363551197d0368b978f85654647eb0a0c99b82 + MDi = cddbaf4c733fe00171a2bec17a569ae92d962f08dd6b2cc538b93dd0 + + i = 6 + M = 83ece3fdf9595b463feab0d5b391609811d1c7d5584829c39e46aba4138135873f8566a8cb363551197d0368b978f85654647eb0a0c99b82cddbaf4c733fe00171a2bec17a569ae92d962f08dd6b2cc538b93dd0 + MDi = a30d3dff1aee39d9ee050895c7ebe38c26e25fd6ef27a1e0b92b9aff + + i = 7 + M = 138135873f8566a8cb363551197d0368b978f85654647eb0a0c99b82cddbaf4c733fe00171a2bec17a569ae92d962f08dd6b2cc538b93dd0a30d3dff1aee39d9ee050895c7ebe38c26e25fd6ef27a1e0b92b9aff + MDi = bee9e897055cc6d0c0ac0dcd6a1fd0cc6d4dea1b5d0bd3e13786f1a2 +MD = ? + +COUNT = 27 + i = 3 + M = 8704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c7428704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c7428704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c742 + MDi = 8e2a41d61cdf08cc92305010f1ef31331e6e81c912a68048b2b9ba65 + + i = 4 + M = 8704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c7428704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c7428e2a41d61cdf08cc92305010f1ef31331e6e81c912a68048b2b9ba65 + MDi = fb2d631512b3fbf60e2a4890ac1546d391913cf15429aeaaf434c51c + + i = 5 + M = 8704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c7428e2a41d61cdf08cc92305010f1ef31331e6e81c912a68048b2b9ba65fb2d631512b3fbf60e2a4890ac1546d391913cf15429aeaaf434c51c + MDi = 0c760e1ac2bcbf330a2461015180ff775809a6f229fe7da5377716e7 + + i = 6 + M = 8e2a41d61cdf08cc92305010f1ef31331e6e81c912a68048b2b9ba65fb2d631512b3fbf60e2a4890ac1546d391913cf15429aeaaf434c51c0c760e1ac2bcbf330a2461015180ff775809a6f229fe7da5377716e7 + MDi = 97b9b8d2243e974b233e63db334c489c5346422f2af41ce3d29f03bd + + i = 7 + M = fb2d631512b3fbf60e2a4890ac1546d391913cf15429aeaaf434c51c0c760e1ac2bcbf330a2461015180ff775809a6f229fe7da5377716e797b9b8d2243e974b233e63db334c489c5346422f2af41ce3d29f03bd + MDi = 4a934937dc0bd2eca2b833942dbeef095b2ceda215452093110eee6d +MD = ? + +COUNT = 28 + i = 3 + M = 877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb + MDi = 2d981eeeb82789fa5af326cec1db10ed3894131a3114e6b2f5a4e08b + + i = 4 + M = 877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb2d981eeeb82789fa5af326cec1db10ed3894131a3114e6b2f5a4e08b + MDi = a0114d53656b48e26e9974e021609980c32b602eeec20ffc8d07ad09 + + i = 5 + M = 877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb2d981eeeb82789fa5af326cec1db10ed3894131a3114e6b2f5a4e08ba0114d53656b48e26e9974e021609980c32b602eeec20ffc8d07ad09 + MDi = 514116e276ed959c7097a104a11a24acd77bac4b65e70720e668d34e + + i = 6 + M = 2d981eeeb82789fa5af326cec1db10ed3894131a3114e6b2f5a4e08ba0114d53656b48e26e9974e021609980c32b602eeec20ffc8d07ad09514116e276ed959c7097a104a11a24acd77bac4b65e70720e668d34e + MDi = 133754fa3cc9cc43c5ae7d0118c5ad3823632197902816e2b938c95d + + i = 7 + M = a0114d53656b48e26e9974e021609980c32b602eeec20ffc8d07ad09514116e276ed959c7097a104a11a24acd77bac4b65e70720e668d34e133754fa3cc9cc43c5ae7d0118c5ad3823632197902816e2b938c95d + MDi = 92f3d117b66a57c60587087121e0a982da915a1f84c0f3af1dc36511 +MD = ? + +COUNT = 29 + i = 3 + M = 15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e + MDi = 7dbe9a3d35371dfd96c2fe38e3bce0a10338e8730fc1bde98d5c03d0 + + i = 4 + M = 15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e7dbe9a3d35371dfd96c2fe38e3bce0a10338e8730fc1bde98d5c03d0 + MDi = eb069a20531e7b2468a1afd546e6c24de636956f49c344ad879ecc68 + + i = 5 + M = 15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e7dbe9a3d35371dfd96c2fe38e3bce0a10338e8730fc1bde98d5c03d0eb069a20531e7b2468a1afd546e6c24de636956f49c344ad879ecc68 + MDi = c1d472da7d5203659630d1849ff0be35c10846ccfa651a6000de1b94 + + i = 6 + M = 7dbe9a3d35371dfd96c2fe38e3bce0a10338e8730fc1bde98d5c03d0eb069a20531e7b2468a1afd546e6c24de636956f49c344ad879ecc68c1d472da7d5203659630d1849ff0be35c10846ccfa651a6000de1b94 + MDi = 4f376630e7846eec7a176a51a8e3cdb5a5d7758fe412b4773fe52544 + + i = 7 + M = eb069a20531e7b2468a1afd546e6c24de636956f49c344ad879ecc68c1d472da7d5203659630d1849ff0be35c10846ccfa651a6000de1b944f376630e7846eec7a176a51a8e3cdb5a5d7758fe412b4773fe52544 + MDi = 37387f1fffbd3204c9f798ef73e30e52da727ec2b57bebae874685ce +MD = ? + +COUNT = 30 + i = 3 + M = deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06 + MDi = d1b454a0c1fa2c5fa82361af3dad84ad0ad89dee077fac67dfdf891c + + i = 4 + M = deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06d1b454a0c1fa2c5fa82361af3dad84ad0ad89dee077fac67dfdf891c + MDi = ba033e310fdd782327ded4e617399dbe3fada122bf4ab09bab2b1536 + + i = 5 + M = deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06d1b454a0c1fa2c5fa82361af3dad84ad0ad89dee077fac67dfdf891cba033e310fdd782327ded4e617399dbe3fada122bf4ab09bab2b1536 + MDi = d51185ac18cd38afac9d5f775060bc08c2328f69503a762bfaafdbc0 + + i = 6 + M = d1b454a0c1fa2c5fa82361af3dad84ad0ad89dee077fac67dfdf891cba033e310fdd782327ded4e617399dbe3fada122bf4ab09bab2b1536d51185ac18cd38afac9d5f775060bc08c2328f69503a762bfaafdbc0 + MDi = ea0afe5977a25b98d3cda19bcbd1e2cb1a9372abc277fc01cf1c24ad + + i = 7 + M = ba033e310fdd782327ded4e617399dbe3fada122bf4ab09bab2b1536d51185ac18cd38afac9d5f775060bc08c2328f69503a762bfaafdbc0ea0afe5977a25b98d3cda19bcbd1e2cb1a9372abc277fc01cf1c24ad + MDi = 4b19b58fa56074fa4a65c5fd9755e909c39fc0842ffc2ab246ccb3f6 +MD = ? + +COUNT = 31 + i = 3 + M = 19af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f919af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f919af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f9 + MDi = 9c85f786fbdb68ef2cb39b9c190bd051eba8a6691fb5717440c8afb3 + + i = 4 + M = 19af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f919af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f99c85f786fbdb68ef2cb39b9c190bd051eba8a6691fb5717440c8afb3 + MDi = 7d8034486b41204c123ad1b0d782cfc2e809c149da5877d886ef5226 + + i = 5 + M = 19af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f99c85f786fbdb68ef2cb39b9c190bd051eba8a6691fb5717440c8afb37d8034486b41204c123ad1b0d782cfc2e809c149da5877d886ef5226 + MDi = 12e7b969252536b0e05e60b91302eaebca6215edd696024063fd5826 + + i = 6 + M = 9c85f786fbdb68ef2cb39b9c190bd051eba8a6691fb5717440c8afb37d8034486b41204c123ad1b0d782cfc2e809c149da5877d886ef522612e7b969252536b0e05e60b91302eaebca6215edd696024063fd5826 + MDi = bfbf48d1f3259bc4b7a268246b6b00b011019ae896794517e0c9f7c7 + + i = 7 + M = 7d8034486b41204c123ad1b0d782cfc2e809c149da5877d886ef522612e7b969252536b0e05e60b91302eaebca6215edd696024063fd5826bfbf48d1f3259bc4b7a268246b6b00b011019ae896794517e0c9f7c7 + MDi = b1048ac59ba6b05292f1ba00929ca9b0030a00fb9e577e4a90df4210 +MD = ? + +COUNT = 32 + i = 3 + M = d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67 + MDi = 252ab025ac67b9afbfbac922095fc752210408390f3122dd0a1f016b + + i = 4 + M = d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67252ab025ac67b9afbfbac922095fc752210408390f3122dd0a1f016b + MDi = 01617674bc5806456c8e2dd933333c62d54bd83f45dd05a499b55e5b + + i = 5 + M = d7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67252ab025ac67b9afbfbac922095fc752210408390f3122dd0a1f016b01617674bc5806456c8e2dd933333c62d54bd83f45dd05a499b55e5b + MDi = 835c4dde6ea087a9ccb18f1eeb564a432c48001e5f36f575ff56278e + + i = 6 + M = 252ab025ac67b9afbfbac922095fc752210408390f3122dd0a1f016b01617674bc5806456c8e2dd933333c62d54bd83f45dd05a499b55e5b835c4dde6ea087a9ccb18f1eeb564a432c48001e5f36f575ff56278e + MDi = f50fe322c0c705ca3ac53a88693c5a89f293e1130c7baa2570011c5f + + i = 7 + M = 01617674bc5806456c8e2dd933333c62d54bd83f45dd05a499b55e5b835c4dde6ea087a9ccb18f1eeb564a432c48001e5f36f575ff56278ef50fe322c0c705ca3ac53a88693c5a89f293e1130c7baa2570011c5f + MDi = 462039b2f0198c4a9960cf4749a23e46b5468c9c4cbe10de1883dece +MD = ? + +COUNT = 33 + i = 3 + M = c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b70c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b70c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b70 + MDi = 8359807870662769ea2e3e875aa1c67346d26dd137611e5185b913cc + + i = 4 + M = c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b70c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b708359807870662769ea2e3e875aa1c67346d26dd137611e5185b913cc + MDi = f7ab9d118536e8a57a06a791849c9be13dbc39fe32ad8017191a6d91 + + i = 5 + M = c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b708359807870662769ea2e3e875aa1c67346d26dd137611e5185b913ccf7ab9d118536e8a57a06a791849c9be13dbc39fe32ad8017191a6d91 + MDi = 79e9384ccc47ffdf443961c24fbd2e5e563a02220ece31c3483a2830 + + i = 6 + M = 8359807870662769ea2e3e875aa1c67346d26dd137611e5185b913ccf7ab9d118536e8a57a06a791849c9be13dbc39fe32ad8017191a6d9179e9384ccc47ffdf443961c24fbd2e5e563a02220ece31c3483a2830 + MDi = 5ff2125e29bb6a5ca21eac3bfdbe48df478896ba4b5f559f6df36e7b + + i = 7 + M = f7ab9d118536e8a57a06a791849c9be13dbc39fe32ad8017191a6d9179e9384ccc47ffdf443961c24fbd2e5e563a02220ece31c3483a28305ff2125e29bb6a5ca21eac3bfdbe48df478896ba4b5f559f6df36e7b + MDi = d9beac42cfec330512b72d0963664f89abbf552e28979b1242c3f9d7 +MD = ? + +COUNT = 34 + i = 3 + M = bbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456cbbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456cbbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456c + MDi = 486234a559f8f3de209f6bee3ece0f942a3c7dc9a08eb20d39afcee3 + + i = 4 + M = bbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456cbbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456c486234a559f8f3de209f6bee3ece0f942a3c7dc9a08eb20d39afcee3 + MDi = a69d04d793879d8751e614ab5cf97497dc1a940d06d47e60c4cab6dc + + i = 5 + M = bbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456c486234a559f8f3de209f6bee3ece0f942a3c7dc9a08eb20d39afcee3a69d04d793879d8751e614ab5cf97497dc1a940d06d47e60c4cab6dc + MDi = 85a798a62d17e0ad339d8d37bab0e426c65e287d40fe866c4790f697 + + i = 6 + M = 486234a559f8f3de209f6bee3ece0f942a3c7dc9a08eb20d39afcee3a69d04d793879d8751e614ab5cf97497dc1a940d06d47e60c4cab6dc85a798a62d17e0ad339d8d37bab0e426c65e287d40fe866c4790f697 + MDi = 03a0f9e402f992cfbd08115a201f22685e19d7bb2bb3a20bf119baf1 + + i = 7 + M = a69d04d793879d8751e614ab5cf97497dc1a940d06d47e60c4cab6dc85a798a62d17e0ad339d8d37bab0e426c65e287d40fe866c4790f69703a0f9e402f992cfbd08115a201f22685e19d7bb2bb3a20bf119baf1 + MDi = 18e1a2c6ef354a93d80850ba6fb9aee9f649d53ae5bde73c3c5e4f09 +MD = ? + +COUNT = 35 + i = 3 + M = b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d27b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d27b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d27 + MDi = 0756ec195fca09f656d0261aca8a303966c5c190685f3deb919d0ad3 + + i = 4 + M = b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d27b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d270756ec195fca09f656d0261aca8a303966c5c190685f3deb919d0ad3 + MDi = ecbdabf828f1ef4caf3327df5e47e76ce3d0e1c7779420db9e1252fd + + i = 5 + M = b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d270756ec195fca09f656d0261aca8a303966c5c190685f3deb919d0ad3ecbdabf828f1ef4caf3327df5e47e76ce3d0e1c7779420db9e1252fd + MDi = d542d9fa888dacca72751ee96893f9a830b6740b7e08dfb384c2d454 + + i = 6 + M = 0756ec195fca09f656d0261aca8a303966c5c190685f3deb919d0ad3ecbdabf828f1ef4caf3327df5e47e76ce3d0e1c7779420db9e1252fdd542d9fa888dacca72751ee96893f9a830b6740b7e08dfb384c2d454 + MDi = 6c3d370e2336ce387f2f13cec311d7fa7cb4538d53ef5a5f78fa642f + + i = 7 + M = ecbdabf828f1ef4caf3327df5e47e76ce3d0e1c7779420db9e1252fdd542d9fa888dacca72751ee96893f9a830b6740b7e08dfb384c2d4546c3d370e2336ce387f2f13cec311d7fa7cb4538d53ef5a5f78fa642f + MDi = 64b2ddb858d1e8d32c2f6f4fd8e7f2fff44731d02f38575772188eb7 +MD = ? + +COUNT = 36 + i = 3 + M = e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8 + MDi = 085befe7023bcdeb767a1e54247e96d0791b7a53bcb3fa70699e11ff + + i = 4 + M = e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8085befe7023bcdeb767a1e54247e96d0791b7a53bcb3fa70699e11ff + MDi = 5b1989cf9c4f2931bf350b375c3b7a7ad3b58edfb91930aca14d03fb + + i = 5 + M = e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8085befe7023bcdeb767a1e54247e96d0791b7a53bcb3fa70699e11ff5b1989cf9c4f2931bf350b375c3b7a7ad3b58edfb91930aca14d03fb + MDi = d55410240224fb6726314954110fc584c8a3afbe11e57837899ee95a + + i = 6 + M = 085befe7023bcdeb767a1e54247e96d0791b7a53bcb3fa70699e11ff5b1989cf9c4f2931bf350b375c3b7a7ad3b58edfb91930aca14d03fbd55410240224fb6726314954110fc584c8a3afbe11e57837899ee95a + MDi = 29aa0788a3f85fb9262d41b422a965685d30ba9f761f547dddc13e04 + + i = 7 + M = 5b1989cf9c4f2931bf350b375c3b7a7ad3b58edfb91930aca14d03fbd55410240224fb6726314954110fc584c8a3afbe11e57837899ee95a29aa0788a3f85fb9262d41b422a965685d30ba9f761f547dddc13e04 + MDi = 7150e0de6cf55659b9decc6a372e0af1d7e749bdd2ae3b600ce46248 +MD = ? + +COUNT = 37 + i = 3 + M = af77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172aaf77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172aaf77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172a + MDi = f463300dccfdd6ec0af99273948b5e30aedc20c99f909c2af9ef6d94 + + i = 4 + M = af77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172aaf77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172af463300dccfdd6ec0af99273948b5e30aedc20c99f909c2af9ef6d94 + MDi = cbb436221415ee6994ccedcc862b59cf1e18454bc4283e010dbdcc18 + + i = 5 + M = af77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172af463300dccfdd6ec0af99273948b5e30aedc20c99f909c2af9ef6d94cbb436221415ee6994ccedcc862b59cf1e18454bc4283e010dbdcc18 + MDi = b17e6dbb88ca36dc4bc922fb642252b4ea1beda7e24d680f695fb0d3 + + i = 6 + M = f463300dccfdd6ec0af99273948b5e30aedc20c99f909c2af9ef6d94cbb436221415ee6994ccedcc862b59cf1e18454bc4283e010dbdcc18b17e6dbb88ca36dc4bc922fb642252b4ea1beda7e24d680f695fb0d3 + MDi = f13d2918436b528dea8ccb1be4964aaed9f451200c7eff11536f3c51 + + i = 7 + M = cbb436221415ee6994ccedcc862b59cf1e18454bc4283e010dbdcc18b17e6dbb88ca36dc4bc922fb642252b4ea1beda7e24d680f695fb0d3f13d2918436b528dea8ccb1be4964aaed9f451200c7eff11536f3c51 + MDi = 583da5f0480a19f37135dc8176fe88c61c86914c13d4c5ed19632ed3 +MD = ? + +COUNT = 38 + i = 3 + M = de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3 + MDi = 414248d2d39459470507239a772875e842a260d76ffb22f265362fd1 + + i = 4 + M = de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3414248d2d39459470507239a772875e842a260d76ffb22f265362fd1 + MDi = cef108078111bda84e39fcb8d63281e91820d37f8ecea88baa160b1f + + i = 5 + M = de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3414248d2d39459470507239a772875e842a260d76ffb22f265362fd1cef108078111bda84e39fcb8d63281e91820d37f8ecea88baa160b1f + MDi = 958f1153a3cad55200f1fd584f142355c4de5baf8be83df14e947890 + + i = 6 + M = 414248d2d39459470507239a772875e842a260d76ffb22f265362fd1cef108078111bda84e39fcb8d63281e91820d37f8ecea88baa160b1f958f1153a3cad55200f1fd584f142355c4de5baf8be83df14e947890 + MDi = ce4804605612bfe4ab8d77bdda24208c53624d66db46fbfff295a72f + + i = 7 + M = cef108078111bda84e39fcb8d63281e91820d37f8ecea88baa160b1f958f1153a3cad55200f1fd584f142355c4de5baf8be83df14e947890ce4804605612bfe4ab8d77bdda24208c53624d66db46fbfff295a72f + MDi = 3a915047e685d5c38aaa06095fa264b8704f1566087aa520dadfa3a2 +MD = ? + +COUNT = 39 + i = 3 + M = 00397993b6b0ab272be84263167167270c45df00483b01fe9b1ea36500397993b6b0ab272be84263167167270c45df00483b01fe9b1ea36500397993b6b0ab272be84263167167270c45df00483b01fe9b1ea365 + MDi = 03bca697487644b113928421cb2037145a95b5a6e2d0f205cd2f0239 + + i = 4 + M = 00397993b6b0ab272be84263167167270c45df00483b01fe9b1ea36500397993b6b0ab272be84263167167270c45df00483b01fe9b1ea36503bca697487644b113928421cb2037145a95b5a6e2d0f205cd2f0239 + MDi = ec026c03aac1b170041f70b334dbda90e573be8888dad118d4a71360 + + i = 5 + M = 00397993b6b0ab272be84263167167270c45df00483b01fe9b1ea36503bca697487644b113928421cb2037145a95b5a6e2d0f205cd2f0239ec026c03aac1b170041f70b334dbda90e573be8888dad118d4a71360 + MDi = 8c45570cf04b8399386504af5fad474c53510ebd41c0af0fc664805c + + i = 6 + M = 03bca697487644b113928421cb2037145a95b5a6e2d0f205cd2f0239ec026c03aac1b170041f70b334dbda90e573be8888dad118d4a713608c45570cf04b8399386504af5fad474c53510ebd41c0af0fc664805c + MDi = f4af95ec911aad4751ff69453105f86b6756c2e913c6933747c76150 + + i = 7 + M = ec026c03aac1b170041f70b334dbda90e573be8888dad118d4a713608c45570cf04b8399386504af5fad474c53510ebd41c0af0fc664805cf4af95ec911aad4751ff69453105f86b6756c2e913c6933747c76150 + MDi = f67d30315202010174f7a2f488a404a5d4cd336036b8647c4cd9be72 +MD = ? + +COUNT = 40 + i = 3 + M = 9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd + MDi = 8608ab6b53ad6282065bd1eab87eafc9753ae0b0ca90289ca3711d89 + + i = 4 + M = 9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd8608ab6b53ad6282065bd1eab87eafc9753ae0b0ca90289ca3711d89 + MDi = b65a44d99701d64986ccea6240c1e48d431fe0fad7254c08a5b13210 + + i = 5 + M = 9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd8608ab6b53ad6282065bd1eab87eafc9753ae0b0ca90289ca3711d89b65a44d99701d64986ccea6240c1e48d431fe0fad7254c08a5b13210 + MDi = c12344da9d9c973210a3d4d71c4aa23ad82613187c881f6f7b1c6075 + + i = 6 + M = 8608ab6b53ad6282065bd1eab87eafc9753ae0b0ca90289ca3711d89b65a44d99701d64986ccea6240c1e48d431fe0fad7254c08a5b13210c12344da9d9c973210a3d4d71c4aa23ad82613187c881f6f7b1c6075 + MDi = 8dcec4bfddd9c977a05903fbf07f9ae94b4925df7875f8b4891215c5 + + i = 7 + M = b65a44d99701d64986ccea6240c1e48d431fe0fad7254c08a5b13210c12344da9d9c973210a3d4d71c4aa23ad82613187c881f6f7b1c60758dcec4bfddd9c977a05903fbf07f9ae94b4925df7875f8b4891215c5 + MDi = 27318d5943648b0157d6012b8f4aeecf584e807c9f54362953bbcd75 +MD = ? + +COUNT = 41 + i = 3 + M = 6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca + MDi = 9ab20cdfc6de21dfb7a0381231c425fdda76a87ac28de15c94569ea9 + + i = 4 + M = 6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca9ab20cdfc6de21dfb7a0381231c425fdda76a87ac28de15c94569ea9 + MDi = 87705f93425cf93d981958d114e411d8fbc053095de7ad9721cb84e5 + + i = 5 + M = 6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca9ab20cdfc6de21dfb7a0381231c425fdda76a87ac28de15c94569ea987705f93425cf93d981958d114e411d8fbc053095de7ad9721cb84e5 + MDi = 8000f079ce554adc39b758d13a0720607c1b6b01be3bdf5c1a2479ca + + i = 6 + M = 9ab20cdfc6de21dfb7a0381231c425fdda76a87ac28de15c94569ea987705f93425cf93d981958d114e411d8fbc053095de7ad9721cb84e58000f079ce554adc39b758d13a0720607c1b6b01be3bdf5c1a2479ca + MDi = 3ddbc79bd7d95fd39d59ac3d90e6b7e18364b5f9816faf83cdae0312 + + i = 7 + M = 87705f93425cf93d981958d114e411d8fbc053095de7ad9721cb84e58000f079ce554adc39b758d13a0720607c1b6b01be3bdf5c1a2479ca3ddbc79bd7d95fd39d59ac3d90e6b7e18364b5f9816faf83cdae0312 + MDi = edb9302d469b2e890592f1f5a824f65939ff8881d6700704be6a06ab +MD = ? + +COUNT = 42 + i = 3 + M = 39b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e860339b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e860339b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e8603 + MDi = cfe6f6ed46a6564e4560e817d9f762aebf679d890d957ff0e7e14f88 + + i = 4 + M = 39b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e860339b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e8603cfe6f6ed46a6564e4560e817d9f762aebf679d890d957ff0e7e14f88 + MDi = 2390ada8ae86e3dca56bc1908f245bc20c3284adcffe9dcdd0290909 + + i = 5 + M = 39b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e8603cfe6f6ed46a6564e4560e817d9f762aebf679d890d957ff0e7e14f882390ada8ae86e3dca56bc1908f245bc20c3284adcffe9dcdd0290909 + MDi = 4086e90c07c8d951be0f271e23b12d5cb549e53765dbd090419b0fb4 + + i = 6 + M = cfe6f6ed46a6564e4560e817d9f762aebf679d890d957ff0e7e14f882390ada8ae86e3dca56bc1908f245bc20c3284adcffe9dcdd02909094086e90c07c8d951be0f271e23b12d5cb549e53765dbd090419b0fb4 + MDi = 526086295ffb64cffdce7d7b10eb310b5b88314c7f52a6d0a4967aab + + i = 7 + M = 2390ada8ae86e3dca56bc1908f245bc20c3284adcffe9dcdd02909094086e90c07c8d951be0f271e23b12d5cb549e53765dbd090419b0fb4526086295ffb64cffdce7d7b10eb310b5b88314c7f52a6d0a4967aab + MDi = 97969a152ee717cb3c9131c38a57b2e4ec1ed076efd733f1f353e372 +MD = ? + +COUNT = 43 + i = 3 + M = 49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf + MDi = 75d565d8613720397a3dd8fa10f8b66f9fde8c25ee46907e59af25e3 + + i = 4 + M = 49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf75d565d8613720397a3dd8fa10f8b66f9fde8c25ee46907e59af25e3 + MDi = 4a4d381a2cad7109d78d0cc39b45ebaf2c8dff077578cff3e8ed72f6 + + i = 5 + M = 49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf75d565d8613720397a3dd8fa10f8b66f9fde8c25ee46907e59af25e34a4d381a2cad7109d78d0cc39b45ebaf2c8dff077578cff3e8ed72f6 + MDi = 21c67685371f39c85d29412968712d94fd159dc1ba2b7752a0e1a0dc + + i = 6 + M = 75d565d8613720397a3dd8fa10f8b66f9fde8c25ee46907e59af25e34a4d381a2cad7109d78d0cc39b45ebaf2c8dff077578cff3e8ed72f621c67685371f39c85d29412968712d94fd159dc1ba2b7752a0e1a0dc + MDi = 341f28410ddd02c66d9d078c2c80ee8cc44eddffb4d64df9cddf4013 + + i = 7 + M = 4a4d381a2cad7109d78d0cc39b45ebaf2c8dff077578cff3e8ed72f621c67685371f39c85d29412968712d94fd159dc1ba2b7752a0e1a0dc341f28410ddd02c66d9d078c2c80ee8cc44eddffb4d64df9cddf4013 + MDi = 69e769b092e449ef7a8e2fe5be9432039c7ce7fc1ef568db5193791b +MD = ? + +COUNT = 44 + i = 3 + M = fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41 + MDi = a9f33c29d49955e41fcccf44363330205723251ddab0f47a873434b9 + + i = 4 + M = fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41a9f33c29d49955e41fcccf44363330205723251ddab0f47a873434b9 + MDi = f1c30f037d6a554a35b2ae952d5b8a34b88b30e3f9ab0afa6d1b1e8d + + i = 5 + M = fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41a9f33c29d49955e41fcccf44363330205723251ddab0f47a873434b9f1c30f037d6a554a35b2ae952d5b8a34b88b30e3f9ab0afa6d1b1e8d + MDi = d881b0790bcbcf9ddf24fe0136079732c99b1f2dce0f072ca2d6eed0 + + i = 6 + M = a9f33c29d49955e41fcccf44363330205723251ddab0f47a873434b9f1c30f037d6a554a35b2ae952d5b8a34b88b30e3f9ab0afa6d1b1e8dd881b0790bcbcf9ddf24fe0136079732c99b1f2dce0f072ca2d6eed0 + MDi = ba2e7eea74c24de1fbc4029cb82a81316e407224cfb4ba78bf9a6abe + + i = 7 + M = f1c30f037d6a554a35b2ae952d5b8a34b88b30e3f9ab0afa6d1b1e8dd881b0790bcbcf9ddf24fe0136079732c99b1f2dce0f072ca2d6eed0ba2e7eea74c24de1fbc4029cb82a81316e407224cfb4ba78bf9a6abe + MDi = 9fafd9af5d8056cfbe2361d81eaf055eee9ea3f52830d5f7e8185f91 +MD = ? + +COUNT = 45 + i = 3 + M = eeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4deeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4deeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4d + MDi = 3ac2d0ce3b90763a96aecd8963fb6bf8e2b4c9fb1f9431c9c834d01c + + i = 4 + M = eeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4deeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4d3ac2d0ce3b90763a96aecd8963fb6bf8e2b4c9fb1f9431c9c834d01c + MDi = efdad917cbe9ddc301f3d67aa2cdb14787389f59937c8388b02b7e86 + + i = 5 + M = eeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4d3ac2d0ce3b90763a96aecd8963fb6bf8e2b4c9fb1f9431c9c834d01cefdad917cbe9ddc301f3d67aa2cdb14787389f59937c8388b02b7e86 + MDi = 1e15e2d06fa251a6b25ed3dde2aa4ea892207ae5df3ea26b57598fe9 + + i = 6 + M = 3ac2d0ce3b90763a96aecd8963fb6bf8e2b4c9fb1f9431c9c834d01cefdad917cbe9ddc301f3d67aa2cdb14787389f59937c8388b02b7e861e15e2d06fa251a6b25ed3dde2aa4ea892207ae5df3ea26b57598fe9 + MDi = e23ee0499308bdea3b11f5c7c7c1a79cae831ceafa6b3ad8a5170e58 + + i = 7 + M = efdad917cbe9ddc301f3d67aa2cdb14787389f59937c8388b02b7e861e15e2d06fa251a6b25ed3dde2aa4ea892207ae5df3ea26b57598fe9e23ee0499308bdea3b11f5c7c7c1a79cae831ceafa6b3ad8a5170e58 + MDi = 709c3473c60b2cfd15c0bede6043aeff41b2ae69815a80c07505d59f +MD = ? + +COUNT = 46 + i = 3 + M = edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48 + MDi = a4a878a9432d35d0fd8a34097bc2839076dcabd20c55aac0ef4bebc7 + + i = 4 + M = edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48a4a878a9432d35d0fd8a34097bc2839076dcabd20c55aac0ef4bebc7 + MDi = ead12b873a2804e7bc504db37f8c1f3598c60d40dbdbff45133f802c + + i = 5 + M = edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48a4a878a9432d35d0fd8a34097bc2839076dcabd20c55aac0ef4bebc7ead12b873a2804e7bc504db37f8c1f3598c60d40dbdbff45133f802c + MDi = de922123edac6dcffe17f211fc50b40f53dc2e882bfb5ffa38cf308b + + i = 6 + M = a4a878a9432d35d0fd8a34097bc2839076dcabd20c55aac0ef4bebc7ead12b873a2804e7bc504db37f8c1f3598c60d40dbdbff45133f802cde922123edac6dcffe17f211fc50b40f53dc2e882bfb5ffa38cf308b + MDi = e6816ef3d7faa00fbd290eb2274fb2313bb68c366d4bf5aa2423a89d + + i = 7 + M = ead12b873a2804e7bc504db37f8c1f3598c60d40dbdbff45133f802cde922123edac6dcffe17f211fc50b40f53dc2e882bfb5ffa38cf308be6816ef3d7faa00fbd290eb2274fb2313bb68c366d4bf5aa2423a89d + MDi = 59b9279c883a4b11c611402b4d1f09045e4903e04bf22ac67781ce84 +MD = ? + +COUNT = 47 + i = 3 + M = 46bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f1546bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f1546bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f15 + MDi = cebef0dbb0912b43130f3cbdc6f13427c70b17df20ca4cc16470fa37 + + i = 4 + M = 46bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f1546bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f15cebef0dbb0912b43130f3cbdc6f13427c70b17df20ca4cc16470fa37 + MDi = 2d717206d5729ec2aa6f8242d3839bd5188fa171ee9e846715e4e525 + + i = 5 + M = 46bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f15cebef0dbb0912b43130f3cbdc6f13427c70b17df20ca4cc16470fa372d717206d5729ec2aa6f8242d3839bd5188fa171ee9e846715e4e525 + MDi = 260a674dc619c64137b9f658b914a2b4808fdf584518d99eca75774c + + i = 6 + M = cebef0dbb0912b43130f3cbdc6f13427c70b17df20ca4cc16470fa372d717206d5729ec2aa6f8242d3839bd5188fa171ee9e846715e4e525260a674dc619c64137b9f658b914a2b4808fdf584518d99eca75774c + MDi = e2f3852ce5a830c44c684233f5e64a431854f1ff5b4b37d7b70553ca + + i = 7 + M = 2d717206d5729ec2aa6f8242d3839bd5188fa171ee9e846715e4e525260a674dc619c64137b9f658b914a2b4808fdf584518d99eca75774ce2f3852ce5a830c44c684233f5e64a431854f1ff5b4b37d7b70553ca + MDi = c1e6b29f84485a2b61ac1d3a0462dbf3e18ed607d218c4ff82fb3faa +MD = ? + +COUNT = 48 + i = 3 + M = 1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09e1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09e1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09e + MDi = ded84dfa4bdb8047df48a232776a38558fcd76768d622408ce63c941 + + i = 4 + M = 1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09e1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09eded84dfa4bdb8047df48a232776a38558fcd76768d622408ce63c941 + MDi = b4226e5241572314a3d633705c6751aeed2724dd7911bb82451b6d69 + + i = 5 + M = 1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09eded84dfa4bdb8047df48a232776a38558fcd76768d622408ce63c941b4226e5241572314a3d633705c6751aeed2724dd7911bb82451b6d69 + MDi = 933c3e6d616ad139919099899315851ef562706f97920066b8e2956c + + i = 6 + M = ded84dfa4bdb8047df48a232776a38558fcd76768d622408ce63c941b4226e5241572314a3d633705c6751aeed2724dd7911bb82451b6d69933c3e6d616ad139919099899315851ef562706f97920066b8e2956c + MDi = 81bf8040809ebc519e11af862d9d0e0ef312b246209b9f3ec7fcc3c8 + + i = 7 + M = b4226e5241572314a3d633705c6751aeed2724dd7911bb82451b6d69933c3e6d616ad139919099899315851ef562706f97920066b8e2956c81bf8040809ebc519e11af862d9d0e0ef312b246209b9f3ec7fcc3c8 + MDi = 120ad6199d85333219a4b9cfcc806a34358d01d295b62919e673082a +MD = ? + +COUNT = 49 + i = 3 + M = cd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063dcd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063dcd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063d + MDi = 00f256194aa59b699059d3b61f039c7d52906c164d1954854603004e + + i = 4 + M = cd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063dcd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063d00f256194aa59b699059d3b61f039c7d52906c164d1954854603004e + MDi = 0b5cf5704345987d423da5710c9edb2e7e519a747cfbd1f7ab8d02af + + i = 5 + M = cd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063d00f256194aa59b699059d3b61f039c7d52906c164d1954854603004e0b5cf5704345987d423da5710c9edb2e7e519a747cfbd1f7ab8d02af + MDi = 7641ba5584aa6fd60910355e8772629c56d7884c8fff634d0f147b8c + + i = 6 + M = 00f256194aa59b699059d3b61f039c7d52906c164d1954854603004e0b5cf5704345987d423da5710c9edb2e7e519a747cfbd1f7ab8d02af7641ba5584aa6fd60910355e8772629c56d7884c8fff634d0f147b8c + MDi = 5a66f44e718f0c4715fd3594f24f4f78f4322aa9d9b2f0302f938024 + + i = 7 + M = 0b5cf5704345987d423da5710c9edb2e7e519a747cfbd1f7ab8d02af7641ba5584aa6fd60910355e8772629c56d7884c8fff634d0f147b8c5a66f44e718f0c4715fd3594f24f4f78f4322aa9d9b2f0302f938024 + MDi = 4787b2b020d54789d1f3013b5f39c7f6d2c40f69590e11bf37e56944 +MD = ? + +COUNT = 50 + i = 3 + M = cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363 + MDi = dd5260e35d6a4b7e4c77a393d2efa8ba4686346a0c525fab474ade12 + + i = 4 + M = cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363dd5260e35d6a4b7e4c77a393d2efa8ba4686346a0c525fab474ade12 + MDi = bb9430196b8fa06c3c27cfc3b665a3f57e8186561f137139e288a617 + + i = 5 + M = cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363dd5260e35d6a4b7e4c77a393d2efa8ba4686346a0c525fab474ade12bb9430196b8fa06c3c27cfc3b665a3f57e8186561f137139e288a617 + MDi = 6787b7360cd007dcd6e3f9206d2f50e55f43db5e33c8fc3c7b1ec075 + + i = 6 + M = dd5260e35d6a4b7e4c77a393d2efa8ba4686346a0c525fab474ade12bb9430196b8fa06c3c27cfc3b665a3f57e8186561f137139e288a6176787b7360cd007dcd6e3f9206d2f50e55f43db5e33c8fc3c7b1ec075 + MDi = 4407fab2bb4e0838ed1332329f6d2acf6b2f3ff6f621ba5b2ff72c92 + + i = 7 + M = bb9430196b8fa06c3c27cfc3b665a3f57e8186561f137139e288a6176787b7360cd007dcd6e3f9206d2f50e55f43db5e33c8fc3c7b1ec0754407fab2bb4e0838ed1332329f6d2acf6b2f3ff6f621ba5b2ff72c92 + MDi = d0a5f61d33cbaf0cf1595773993d0a69e03b1f651c96f13f24d74b76 +MD = ? + +COUNT = 51 + i = 3 + M = 76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc + MDi = 8fe8aa47cb510aef4bb706eb5cef9a42ec0d97e87c7709e227f575bd + + i = 4 + M = 76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc8fe8aa47cb510aef4bb706eb5cef9a42ec0d97e87c7709e227f575bd + MDi = 13c932a8d2feea2cc69b734b99bcd8d87a9b05c778221fa06f401a6c + + i = 5 + M = 76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc8fe8aa47cb510aef4bb706eb5cef9a42ec0d97e87c7709e227f575bd13c932a8d2feea2cc69b734b99bcd8d87a9b05c778221fa06f401a6c + MDi = 0c153d926e7aff1ed59b898504148e65a99ac7726fbe60cc173757c2 + + i = 6 + M = 8fe8aa47cb510aef4bb706eb5cef9a42ec0d97e87c7709e227f575bd13c932a8d2feea2cc69b734b99bcd8d87a9b05c778221fa06f401a6c0c153d926e7aff1ed59b898504148e65a99ac7726fbe60cc173757c2 + MDi = c39011fa4f9dbf25dc103bbc284e812e430006d4449cf63583f4a24c + + i = 7 + M = 13c932a8d2feea2cc69b734b99bcd8d87a9b05c778221fa06f401a6c0c153d926e7aff1ed59b898504148e65a99ac7726fbe60cc173757c2c39011fa4f9dbf25dc103bbc284e812e430006d4449cf63583f4a24c + MDi = 81b91a6fc40359aa53f77de7a772192cb50fdadf01eb55f0e7fe073f +MD = ? + +COUNT = 52 + i = 3 + M = 3f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c204273f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c204273f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c20427 + MDi = 86b65d842a36038114b6c79f5ca46b5045ee2520c06bce3c3e42736b + + i = 4 + M = 3f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c204273f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c2042786b65d842a36038114b6c79f5ca46b5045ee2520c06bce3c3e42736b + MDi = 27909166cdefbd52570eff6eedf308eca7c25049a354ecd3ad0dcb95 + + i = 5 + M = 3f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c2042786b65d842a36038114b6c79f5ca46b5045ee2520c06bce3c3e42736b27909166cdefbd52570eff6eedf308eca7c25049a354ecd3ad0dcb95 + MDi = da2f0aed0c61ba967d0472468b7cd9ac60544c66acc55011c805fd22 + + i = 6 + M = 86b65d842a36038114b6c79f5ca46b5045ee2520c06bce3c3e42736b27909166cdefbd52570eff6eedf308eca7c25049a354ecd3ad0dcb95da2f0aed0c61ba967d0472468b7cd9ac60544c66acc55011c805fd22 + MDi = 9a7e7511f853be37694dba7a7ee857f3915a424d790bceddd5abe87f + + i = 7 + M = 27909166cdefbd52570eff6eedf308eca7c25049a354ecd3ad0dcb95da2f0aed0c61ba967d0472468b7cd9ac60544c66acc55011c805fd229a7e7511f853be37694dba7a7ee857f3915a424d790bceddd5abe87f + MDi = f4b6dd2ab1c86a8d9d989c8a674e6fcfcd70237079daa29ba6edb3ca +MD = ? + +COUNT = 53 + i = 3 + M = f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa923f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa923f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa923 + MDi = 06df3b26218a41bbdc9296a865daec99ec31653d334a66b96b3a4aff + + i = 4 + M = f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa923f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa92306df3b26218a41bbdc9296a865daec99ec31653d334a66b96b3a4aff + MDi = 1efa1a8f9ea235feaa271828a331be727fe9b8984ce056b9f0436a2c + + i = 5 + M = f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa92306df3b26218a41bbdc9296a865daec99ec31653d334a66b96b3a4aff1efa1a8f9ea235feaa271828a331be727fe9b8984ce056b9f0436a2c + MDi = f968b0c2cca5ac3bbdebbe856da372979b3c948d01fdda566f944bf6 + + i = 6 + M = 06df3b26218a41bbdc9296a865daec99ec31653d334a66b96b3a4aff1efa1a8f9ea235feaa271828a331be727fe9b8984ce056b9f0436a2cf968b0c2cca5ac3bbdebbe856da372979b3c948d01fdda566f944bf6 + MDi = e296700ead52bc05b6002b6417c24b7f1427c0f7ff50d1176de6cd3b + + i = 7 + M = 1efa1a8f9ea235feaa271828a331be727fe9b8984ce056b9f0436a2cf968b0c2cca5ac3bbdebbe856da372979b3c948d01fdda566f944bf6e296700ead52bc05b6002b6417c24b7f1427c0f7ff50d1176de6cd3b + MDi = 2bf9b494e1c3c433cd85d2ecbe7f93c877317ebbbdfed1f05ad22fd9 +MD = ? + +COUNT = 54 + i = 3 + M = f88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cbf88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cbf88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cb + MDi = f418d04a5f41bc805a9cb6663de3ba15155f8a3396b040ab93dd849b + + i = 4 + M = f88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cbf88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cbf418d04a5f41bc805a9cb6663de3ba15155f8a3396b040ab93dd849b + MDi = e33851ccf9be48dd9a32b1e6f6858fb2393433431d8d8231f5449467 + + i = 5 + M = f88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cbf418d04a5f41bc805a9cb6663de3ba15155f8a3396b040ab93dd849be33851ccf9be48dd9a32b1e6f6858fb2393433431d8d8231f5449467 + MDi = 516f39683f27884cf3d5a054271f3cee9e1e8d68d3856edbe8099939 + + i = 6 + M = f418d04a5f41bc805a9cb6663de3ba15155f8a3396b040ab93dd849be33851ccf9be48dd9a32b1e6f6858fb2393433431d8d8231f5449467516f39683f27884cf3d5a054271f3cee9e1e8d68d3856edbe8099939 + MDi = 004a08a9558a74a4c4a0c8037842a2fcc77f986cb1d323f0a9e6bd67 + + i = 7 + M = e33851ccf9be48dd9a32b1e6f6858fb2393433431d8d8231f5449467516f39683f27884cf3d5a054271f3cee9e1e8d68d3856edbe8099939004a08a9558a74a4c4a0c8037842a2fcc77f986cb1d323f0a9e6bd67 + MDi = dc3c7c3b290e9863f96143c0a01f7b2b8f4ea394dd018622011da699 +MD = ? + +COUNT = 55 + i = 3 + M = a071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdfa071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdfa071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdf + MDi = 15bbd2e333b702cc6034d410b2fa4202303de524e1cf17b00a2593f5 + + i = 4 + M = a071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdfa071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdf15bbd2e333b702cc6034d410b2fa4202303de524e1cf17b00a2593f5 + MDi = 1edd45851902920bb69063aefcaee440a530f0037778ab24677bdfde + + i = 5 + M = a071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdf15bbd2e333b702cc6034d410b2fa4202303de524e1cf17b00a2593f51edd45851902920bb69063aefcaee440a530f0037778ab24677bdfde + MDi = a675ee20acdbba7994b34a2ac348a44caa562fb65604d2e1202e3f30 + + i = 6 + M = 15bbd2e333b702cc6034d410b2fa4202303de524e1cf17b00a2593f51edd45851902920bb69063aefcaee440a530f0037778ab24677bdfdea675ee20acdbba7994b34a2ac348a44caa562fb65604d2e1202e3f30 + MDi = d1a0e8b4922bbd1a0325f15603d6969ca43a3ac56c7c34e9a97d38ad + + i = 7 + M = 1edd45851902920bb69063aefcaee440a530f0037778ab24677bdfdea675ee20acdbba7994b34a2ac348a44caa562fb65604d2e1202e3f30d1a0e8b4922bbd1a0325f15603d6969ca43a3ac56c7c34e9a97d38ad + MDi = 41f40206ca2514b963adadfa8cebc24e1914423a5dd2302d23700315 +MD = ? + +COUNT = 56 + i = 3 + M = 19e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea3702719e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea3702719e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea37027 + MDi = 4d3659fd3bffaf30e686a6cbf9fba3ebb8de8e6616001f11bf50e683 + + i = 4 + M = 19e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea3702719e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea370274d3659fd3bffaf30e686a6cbf9fba3ebb8de8e6616001f11bf50e683 + MDi = 13a99f308a5e1480ca5847e3be683edf3949d8d0c7fd0d2b46a20e8b + + i = 5 + M = 19e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea370274d3659fd3bffaf30e686a6cbf9fba3ebb8de8e6616001f11bf50e68313a99f308a5e1480ca5847e3be683edf3949d8d0c7fd0d2b46a20e8b + MDi = dada5fd2b3c9c605f30af6ee2f918e3eb3b0d6dea30769bf51df3041 + + i = 6 + M = 4d3659fd3bffaf30e686a6cbf9fba3ebb8de8e6616001f11bf50e68313a99f308a5e1480ca5847e3be683edf3949d8d0c7fd0d2b46a20e8bdada5fd2b3c9c605f30af6ee2f918e3eb3b0d6dea30769bf51df3041 + MDi = 3d26e0316fdfd13f3b183e7451ef9f35dc303d650daadbabab8d8b1c + + i = 7 + M = 13a99f308a5e1480ca5847e3be683edf3949d8d0c7fd0d2b46a20e8bdada5fd2b3c9c605f30af6ee2f918e3eb3b0d6dea30769bf51df30413d26e0316fdfd13f3b183e7451ef9f35dc303d650daadbabab8d8b1c + MDi = b38f9a4bd23452f3e84aa9ec866c3705610eb968a7350545180a8b5e +MD = ? + +COUNT = 57 + i = 3 + M = 87f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee3487f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee3487f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee34 + MDi = 9b148fbe7452a2c2de13d968c84a4e84edaf921e78d7b3af1db5fbb3 + + i = 4 + M = 87f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee3487f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee349b148fbe7452a2c2de13d968c84a4e84edaf921e78d7b3af1db5fbb3 + MDi = 40e6e03d09f532fd37b475f3cdbe1b8b9af58913b673a26256ee79c6 + + i = 5 + M = 87f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee349b148fbe7452a2c2de13d968c84a4e84edaf921e78d7b3af1db5fbb340e6e03d09f532fd37b475f3cdbe1b8b9af58913b673a26256ee79c6 + MDi = e54a259e18b455fcf0d9650a1fe2ecf27e552d20f5e533a7ed51b319 + + i = 6 + M = 9b148fbe7452a2c2de13d968c84a4e84edaf921e78d7b3af1db5fbb340e6e03d09f532fd37b475f3cdbe1b8b9af58913b673a26256ee79c6e54a259e18b455fcf0d9650a1fe2ecf27e552d20f5e533a7ed51b319 + MDi = 6ee99db0445337ba1db9957319e5ab11d55248ce78f8e5e59d68113f + + i = 7 + M = 40e6e03d09f532fd37b475f3cdbe1b8b9af58913b673a26256ee79c6e54a259e18b455fcf0d9650a1fe2ecf27e552d20f5e533a7ed51b3196ee99db0445337ba1db9957319e5ab11d55248ce78f8e5e59d68113f + MDi = 7d9e2f923ee0d63b21c921cf8a5fa38cb77c2dbb209a67f340fe35f0 +MD = ? + +COUNT = 58 + i = 3 + M = 6172fb88775686115c5d62e7b32affb353b40a41fe1ebfc6039172746172fb88775686115c5d62e7b32affb353b40a41fe1ebfc6039172746172fb88775686115c5d62e7b32affb353b40a41fe1ebfc603917274 + MDi = eb45a05c2c5173de7633c461064f705bbd3fc4a1d3803b5606744e98 + + i = 4 + M = 6172fb88775686115c5d62e7b32affb353b40a41fe1ebfc6039172746172fb88775686115c5d62e7b32affb353b40a41fe1ebfc603917274eb45a05c2c5173de7633c461064f705bbd3fc4a1d3803b5606744e98 + MDi = a9ed053bed907361377da9ca479f6cdacad7f3725efab7202ad14f2d + + i = 5 + M = 6172fb88775686115c5d62e7b32affb353b40a41fe1ebfc603917274eb45a05c2c5173de7633c461064f705bbd3fc4a1d3803b5606744e98a9ed053bed907361377da9ca479f6cdacad7f3725efab7202ad14f2d + MDi = 06ddf08ba0f1faa415bb603e87fae4856f5ce2e9d1341fa640d00bc7 + + i = 6 + M = eb45a05c2c5173de7633c461064f705bbd3fc4a1d3803b5606744e98a9ed053bed907361377da9ca479f6cdacad7f3725efab7202ad14f2d06ddf08ba0f1faa415bb603e87fae4856f5ce2e9d1341fa640d00bc7 + MDi = 59d4b9ca9c60fa148ba548f4e893d7a6d960333da7938fd4817f6ef3 + + i = 7 + M = a9ed053bed907361377da9ca479f6cdacad7f3725efab7202ad14f2d06ddf08ba0f1faa415bb603e87fae4856f5ce2e9d1341fa640d00bc759d4b9ca9c60fa148ba548f4e893d7a6d960333da7938fd4817f6ef3 + MDi = 2c78dc4cd5e891b6bbb5fe89692ad560cc3b8009af930164c66c4be4 +MD = ? + +COUNT = 59 + i = 3 + M = df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554 + MDi = d511e7c30178a066e379a32d075a7fc0e5d4237346343c3288534629 + + i = 4 + M = df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554d511e7c30178a066e379a32d075a7fc0e5d4237346343c3288534629 + MDi = faaf8743e92d9dff15ce28dd397a9677286ba3922e106b9130533e4b + + i = 5 + M = df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554d511e7c30178a066e379a32d075a7fc0e5d4237346343c3288534629faaf8743e92d9dff15ce28dd397a9677286ba3922e106b9130533e4b + MDi = 20a2fc8536ec1a64e04762544dd14891a6fcfa000dd4632878593854 + + i = 6 + M = d511e7c30178a066e379a32d075a7fc0e5d4237346343c3288534629faaf8743e92d9dff15ce28dd397a9677286ba3922e106b9130533e4b20a2fc8536ec1a64e04762544dd14891a6fcfa000dd4632878593854 + MDi = 3c08b67e3a89f196075fff6281de0fdc0a169f37e9baa1e72e945ce3 + + i = 7 + M = faaf8743e92d9dff15ce28dd397a9677286ba3922e106b9130533e4b20a2fc8536ec1a64e04762544dd14891a6fcfa000dd46328785938543c08b67e3a89f196075fff6281de0fdc0a169f37e9baa1e72e945ce3 + MDi = 4231ca3c52b5c35cfe6e387d440caad2f66aecd2f1fee792c713d86f +MD = ? + +COUNT = 60 + i = 3 + M = 3c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb253c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb253c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb25 + MDi = 511f28d9b19897b5cd187d8fea875458f0dbd08e743285adde268669 + + i = 4 + M = 3c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb253c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb25511f28d9b19897b5cd187d8fea875458f0dbd08e743285adde268669 + MDi = 24f9a810859cfbfe5fae5cdc445607cbf601901295f8952ef7dc4d34 + + i = 5 + M = 3c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb25511f28d9b19897b5cd187d8fea875458f0dbd08e743285adde26866924f9a810859cfbfe5fae5cdc445607cbf601901295f8952ef7dc4d34 + MDi = 1d7b875486693b5bb8afee3cb89236c61c01c2b289533fe0338c4522 + + i = 6 + M = 511f28d9b19897b5cd187d8fea875458f0dbd08e743285adde26866924f9a810859cfbfe5fae5cdc445607cbf601901295f8952ef7dc4d341d7b875486693b5bb8afee3cb89236c61c01c2b289533fe0338c4522 + MDi = f64743d1239cf525bea87ae3ac8e832189cb3d88dd2a27eec5a07a9e + + i = 7 + M = 24f9a810859cfbfe5fae5cdc445607cbf601901295f8952ef7dc4d341d7b875486693b5bb8afee3cb89236c61c01c2b289533fe0338c4522f64743d1239cf525bea87ae3ac8e832189cb3d88dd2a27eec5a07a9e + MDi = 161b38d8a0cd872bfc564217a889707e1a30e091fe040a14566b78b3 +MD = ? + +COUNT = 61 + i = 3 + M = 2273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e02273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e02273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e0 + MDi = ef23e5d5fdae9da05cf4ce526f0c55f06dce6424437ef009d6b69112 + + i = 4 + M = 2273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e02273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e0ef23e5d5fdae9da05cf4ce526f0c55f06dce6424437ef009d6b69112 + MDi = 70ca4306007af6da5798284a9498c86c4a54b7c80b42791847dd129a + + i = 5 + M = 2273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e0ef23e5d5fdae9da05cf4ce526f0c55f06dce6424437ef009d6b6911270ca4306007af6da5798284a9498c86c4a54b7c80b42791847dd129a + MDi = abbfe0317603e39dd179d60dbfc4c5fe4eb4b064b7117774344b1ce8 + + i = 6 + M = ef23e5d5fdae9da05cf4ce526f0c55f06dce6424437ef009d6b6911270ca4306007af6da5798284a9498c86c4a54b7c80b42791847dd129aabbfe0317603e39dd179d60dbfc4c5fe4eb4b064b7117774344b1ce8 + MDi = aa7931954b69675c470ed2c63f289794510ac3532f5ecf64fe1a3eeb + + i = 7 + M = 70ca4306007af6da5798284a9498c86c4a54b7c80b42791847dd129aabbfe0317603e39dd179d60dbfc4c5fe4eb4b064b7117774344b1ce8aa7931954b69675c470ed2c63f289794510ac3532f5ecf64fe1a3eeb + MDi = 3275ac9813636f85c08d68e523e94215a40e87231bc1e7dfc09b81b6 +MD = ? + +COUNT = 62 + i = 3 + M = bdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2fbdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2fbdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2f + MDi = 4fcd977d4e2d9a87b5639d1095044a624adb1e85e8e2be966d911d06 + + i = 4 + M = bdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2fbdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2f4fcd977d4e2d9a87b5639d1095044a624adb1e85e8e2be966d911d06 + MDi = 23a44cb3bdaa21beb5649a4b60424355588033aa0f229a077accae49 + + i = 5 + M = bdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2f4fcd977d4e2d9a87b5639d1095044a624adb1e85e8e2be966d911d0623a44cb3bdaa21beb5649a4b60424355588033aa0f229a077accae49 + MDi = 2d29187059924b16774c9186e9de28525de42e05a1e3f6b713d54f75 + + i = 6 + M = 4fcd977d4e2d9a87b5639d1095044a624adb1e85e8e2be966d911d0623a44cb3bdaa21beb5649a4b60424355588033aa0f229a077accae492d29187059924b16774c9186e9de28525de42e05a1e3f6b713d54f75 + MDi = 39154032198b08697717836f3776ff654b64dd556df6b3818fbf2002 + + i = 7 + M = 23a44cb3bdaa21beb5649a4b60424355588033aa0f229a077accae492d29187059924b16774c9186e9de28525de42e05a1e3f6b713d54f7539154032198b08697717836f3776ff654b64dd556df6b3818fbf2002 + MDi = a7502f979205d850a45c50ef22f03322710b276cf12bc457f64530de +MD = ? + +COUNT = 63 + i = 3 + M = 24f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a19424f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a19424f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a194 + MDi = 286a9c61e75b729cc3924445b60ab659e18dd44334ef3b7643e97f49 + + i = 4 + M = 24f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a19424f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a194286a9c61e75b729cc3924445b60ab659e18dd44334ef3b7643e97f49 + MDi = 435a470af17c3dbd08d51ba3393aa80417d9b33993a0a3e1acb57241 + + i = 5 + M = 24f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a194286a9c61e75b729cc3924445b60ab659e18dd44334ef3b7643e97f49435a470af17c3dbd08d51ba3393aa80417d9b33993a0a3e1acb57241 + MDi = 9dd29df7b04a8c446f0cf8c79d1196276d387d7a66e0870314ab871c + + i = 6 + M = 286a9c61e75b729cc3924445b60ab659e18dd44334ef3b7643e97f49435a470af17c3dbd08d51ba3393aa80417d9b33993a0a3e1acb572419dd29df7b04a8c446f0cf8c79d1196276d387d7a66e0870314ab871c + MDi = 79cfcc8a12fc35477f53abee9238db0706145dc056534bbe4668c3d6 + + i = 7 + M = 435a470af17c3dbd08d51ba3393aa80417d9b33993a0a3e1acb572419dd29df7b04a8c446f0cf8c79d1196276d387d7a66e0870314ab871c79cfcc8a12fc35477f53abee9238db0706145dc056534bbe4668c3d6 + MDi = 6d3a100ea6377952defbc8ff1ca17dce23817f5b89798fd0717ca3e8 +MD = ? + +COUNT = 64 + i = 3 + M = ea7672b36987befb16352c13231fb7668c75673a932bf880181765e4ea7672b36987befb16352c13231fb7668c75673a932bf880181765e4ea7672b36987befb16352c13231fb7668c75673a932bf880181765e4 + MDi = 1be983df92793d32403bb3b541d3e4cdcd6511f83c042050c6720420 + + i = 4 + M = ea7672b36987befb16352c13231fb7668c75673a932bf880181765e4ea7672b36987befb16352c13231fb7668c75673a932bf880181765e41be983df92793d32403bb3b541d3e4cdcd6511f83c042050c6720420 + MDi = 431479a28f49f85da4e046288e498d586e768070a4d327e172272f18 + + i = 5 + M = ea7672b36987befb16352c13231fb7668c75673a932bf880181765e41be983df92793d32403bb3b541d3e4cdcd6511f83c042050c6720420431479a28f49f85da4e046288e498d586e768070a4d327e172272f18 + MDi = a34aeae7d5535618cea6dae06ff4a9e10c6bab6fa18d634eb08241da + + i = 6 + M = 1be983df92793d32403bb3b541d3e4cdcd6511f83c042050c6720420431479a28f49f85da4e046288e498d586e768070a4d327e172272f18a34aeae7d5535618cea6dae06ff4a9e10c6bab6fa18d634eb08241da + MDi = 645e96b09b0733b80019cb92ee8c20d2c27e402d1cd7bfc0fb8da0f9 + + i = 7 + M = 431479a28f49f85da4e046288e498d586e768070a4d327e172272f18a34aeae7d5535618cea6dae06ff4a9e10c6bab6fa18d634eb08241da645e96b09b0733b80019cb92ee8c20d2c27e402d1cd7bfc0fb8da0f9 + MDi = 070547cb8a47cff7dca61ecf2b073be7f13eed2d83cbb17066848e2d +MD = ? + +COUNT = 65 + i = 3 + M = e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784 + MDi = f3f1855944ac9f165f294a7bd705edd68f2fa7cca831472c922e6b6e + + i = 4 + M = e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784f3f1855944ac9f165f294a7bd705edd68f2fa7cca831472c922e6b6e + MDi = 67c035ef490519f7108e8938cf6cfcf981ef5e8ade143b079479b8b0 + + i = 5 + M = e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784f3f1855944ac9f165f294a7bd705edd68f2fa7cca831472c922e6b6e67c035ef490519f7108e8938cf6cfcf981ef5e8ade143b079479b8b0 + MDi = e204dc2f8c86e110cd4f1813e6214b0ffb954eb8ade8a3fd1ebd1fd3 + + i = 6 + M = f3f1855944ac9f165f294a7bd705edd68f2fa7cca831472c922e6b6e67c035ef490519f7108e8938cf6cfcf981ef5e8ade143b079479b8b0e204dc2f8c86e110cd4f1813e6214b0ffb954eb8ade8a3fd1ebd1fd3 + MDi = 8bd4a31698083742dff02d71317f2284e9c8895af5cfa96bc223f4eb + + i = 7 + M = 67c035ef490519f7108e8938cf6cfcf981ef5e8ade143b079479b8b0e204dc2f8c86e110cd4f1813e6214b0ffb954eb8ade8a3fd1ebd1fd38bd4a31698083742dff02d71317f2284e9c8895af5cfa96bc223f4eb + MDi = 1b852fabc2140ba6ca83c50956059cb1e482652f359dd29a2ee4957c +MD = ? + +COUNT = 66 + i = 3 + M = 86983ba278254438244b1bf5ea59492ec36504a078530b6a7812f83286983ba278254438244b1bf5ea59492ec36504a078530b6a7812f83286983ba278254438244b1bf5ea59492ec36504a078530b6a7812f832 + MDi = 8b5396441a851dd02b55b54d2a341e116f0f349f0d41563d19824e52 + + i = 4 + M = 86983ba278254438244b1bf5ea59492ec36504a078530b6a7812f83286983ba278254438244b1bf5ea59492ec36504a078530b6a7812f8328b5396441a851dd02b55b54d2a341e116f0f349f0d41563d19824e52 + MDi = 21ed8ad2a109815126d650cbdf47dcfedb88710ef1dd1cde2301b1b8 + + i = 5 + M = 86983ba278254438244b1bf5ea59492ec36504a078530b6a7812f8328b5396441a851dd02b55b54d2a341e116f0f349f0d41563d19824e5221ed8ad2a109815126d650cbdf47dcfedb88710ef1dd1cde2301b1b8 + MDi = 1c7ea93c8243982714a6f44925c6b2df2484941b28c8c7a747ba7acc + + i = 6 + M = 8b5396441a851dd02b55b54d2a341e116f0f349f0d41563d19824e5221ed8ad2a109815126d650cbdf47dcfedb88710ef1dd1cde2301b1b81c7ea93c8243982714a6f44925c6b2df2484941b28c8c7a747ba7acc + MDi = 2e58daef2b6b7b06fdf5b169c39682852678a2822318229ec3d3b7d5 + + i = 7 + M = 21ed8ad2a109815126d650cbdf47dcfedb88710ef1dd1cde2301b1b81c7ea93c8243982714a6f44925c6b2df2484941b28c8c7a747ba7acc2e58daef2b6b7b06fdf5b169c39682852678a2822318229ec3d3b7d5 + MDi = 933f148ebaaac41aea99fb1f4a19b6b4fd65b5ca6f6ac595f1303e4a +MD = ? + +COUNT = 67 + i = 3 + M = ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1 + MDi = a4a61b479668bc862eb7b1cd8ede466aa9897e5e83e46ed8d0c55200 + + i = 4 + M = ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1a4a61b479668bc862eb7b1cd8ede466aa9897e5e83e46ed8d0c55200 + MDi = 183bacc160bd700c5ffc11869e8e500e42ddc976787a70217f9305e3 + + i = 5 + M = ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1a4a61b479668bc862eb7b1cd8ede466aa9897e5e83e46ed8d0c55200183bacc160bd700c5ffc11869e8e500e42ddc976787a70217f9305e3 + MDi = c16be664445942a8fbd2c57c17c7a3513e1866f09d154821b546951b + + i = 6 + M = a4a61b479668bc862eb7b1cd8ede466aa9897e5e83e46ed8d0c55200183bacc160bd700c5ffc11869e8e500e42ddc976787a70217f9305e3c16be664445942a8fbd2c57c17c7a3513e1866f09d154821b546951b + MDi = 34ebfd64fc02cb0121a70762ab34a18442e2315aaa9cf84c9c189126 + + i = 7 + M = 183bacc160bd700c5ffc11869e8e500e42ddc976787a70217f9305e3c16be664445942a8fbd2c57c17c7a3513e1866f09d154821b546951b34ebfd64fc02cb0121a70762ab34a18442e2315aaa9cf84c9c189126 + MDi = 8f521c849ab4fbb460bde1491545e0baeff12093479a8740562af2ea +MD = ? + +COUNT = 68 + i = 3 + M = 9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c + MDi = 093c03b2510c1e05f8543f5e71273751be5e00c09a8b7064329a04f9 + + i = 4 + M = 9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c093c03b2510c1e05f8543f5e71273751be5e00c09a8b7064329a04f9 + MDi = 1b12eba4f756eb3b547c4fbc84f5cf0392d1987716901ab6d007ea39 + + i = 5 + M = 9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c093c03b2510c1e05f8543f5e71273751be5e00c09a8b7064329a04f91b12eba4f756eb3b547c4fbc84f5cf0392d1987716901ab6d007ea39 + MDi = cba86ec922542cf2d1ff48430e78fe05a6e6104856b6d3a8dd9d59f1 + + i = 6 + M = 093c03b2510c1e05f8543f5e71273751be5e00c09a8b7064329a04f91b12eba4f756eb3b547c4fbc84f5cf0392d1987716901ab6d007ea39cba86ec922542cf2d1ff48430e78fe05a6e6104856b6d3a8dd9d59f1 + MDi = 6e03ba7c14acc8498ab15cd9a76a07716e92ab30bff28e2eefa89e76 + + i = 7 + M = 1b12eba4f756eb3b547c4fbc84f5cf0392d1987716901ab6d007ea39cba86ec922542cf2d1ff48430e78fe05a6e6104856b6d3a8dd9d59f16e03ba7c14acc8498ab15cd9a76a07716e92ab30bff28e2eefa89e76 + MDi = fc2027437655c82c9ce52cf84c95e41b5be4f66b41e207e6e72ee4b0 +MD = ? + +COUNT = 69 + i = 3 + M = 046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638c046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638c046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638c + MDi = b98efe2dbc292b155eea2b9b93c8ce19602c58b760b4d999053590dd + + i = 4 + M = 046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638c046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638cb98efe2dbc292b155eea2b9b93c8ce19602c58b760b4d999053590dd + MDi = 592fe0d1811d0e9e98f27e434350c5d982027f76ac97b96ee4015123 + + i = 5 + M = 046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638cb98efe2dbc292b155eea2b9b93c8ce19602c58b760b4d999053590dd592fe0d1811d0e9e98f27e434350c5d982027f76ac97b96ee4015123 + MDi = 7dd55cde0061385bc6fce4981c9568bafe6d7c9664685a0fc1c880c0 + + i = 6 + M = b98efe2dbc292b155eea2b9b93c8ce19602c58b760b4d999053590dd592fe0d1811d0e9e98f27e434350c5d982027f76ac97b96ee40151237dd55cde0061385bc6fce4981c9568bafe6d7c9664685a0fc1c880c0 + MDi = bb91cedb86e44862d5f32c0157c1ce94042a46bdb0f268816f8f9b31 + + i = 7 + M = 592fe0d1811d0e9e98f27e434350c5d982027f76ac97b96ee40151237dd55cde0061385bc6fce4981c9568bafe6d7c9664685a0fc1c880c0bb91cedb86e44862d5f32c0157c1ce94042a46bdb0f268816f8f9b31 + MDi = d690ff0979976136fe1d8f054f393ea82edf5bf28f80b91834a60d3d +MD = ? + +COUNT = 70 + i = 3 + M = a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb0a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb0a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb0 + MDi = 8c0d0abb1da139cbdbc0abd28bfc750dc421174df9b034bc7d838d15 + + i = 4 + M = a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb0a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb08c0d0abb1da139cbdbc0abd28bfc750dc421174df9b034bc7d838d15 + MDi = adcdbb0f2cd1afecc4dcfd42f576b704a790190f512d4f59e029e4c0 + + i = 5 + M = a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb08c0d0abb1da139cbdbc0abd28bfc750dc421174df9b034bc7d838d15adcdbb0f2cd1afecc4dcfd42f576b704a790190f512d4f59e029e4c0 + MDi = 7bb9e9624750bf620227af79c9a6d2ae872db0dfb8354df0f670e246 + + i = 6 + M = 8c0d0abb1da139cbdbc0abd28bfc750dc421174df9b034bc7d838d15adcdbb0f2cd1afecc4dcfd42f576b704a790190f512d4f59e029e4c07bb9e9624750bf620227af79c9a6d2ae872db0dfb8354df0f670e246 + MDi = 5a01279649c6b7bd426320dc9f277d78d7184e4ef9388a77cade669c + + i = 7 + M = adcdbb0f2cd1afecc4dcfd42f576b704a790190f512d4f59e029e4c07bb9e9624750bf620227af79c9a6d2ae872db0dfb8354df0f670e2465a01279649c6b7bd426320dc9f277d78d7184e4ef9388a77cade669c + MDi = dc27a29bc388020f3715882ecf0d7d35f2d2c281843c178708b69d60 +MD = ? + +COUNT = 71 + i = 3 + M = 5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d + MDi = 836c42b40f76910897c745d6da6fa5425657c3ebba4220ee94552e53 + + i = 4 + M = 5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d836c42b40f76910897c745d6da6fa5425657c3ebba4220ee94552e53 + MDi = 51fab27ae90c84257d2d707b617a5d348da282c2347486c934e455ba + + i = 5 + M = 5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d836c42b40f76910897c745d6da6fa5425657c3ebba4220ee94552e5351fab27ae90c84257d2d707b617a5d348da282c2347486c934e455ba + MDi = 008929638d13f9df504c81dac9f805251d0b8d6579b9ad12b6ce8340 + + i = 6 + M = 836c42b40f76910897c745d6da6fa5425657c3ebba4220ee94552e5351fab27ae90c84257d2d707b617a5d348da282c2347486c934e455ba008929638d13f9df504c81dac9f805251d0b8d6579b9ad12b6ce8340 + MDi = 4f633dab9ef489d899324d2f8af077cde10932460ec6be796fe2e5b3 + + i = 7 + M = 51fab27ae90c84257d2d707b617a5d348da282c2347486c934e455ba008929638d13f9df504c81dac9f805251d0b8d6579b9ad12b6ce83404f633dab9ef489d899324d2f8af077cde10932460ec6be796fe2e5b3 + MDi = ce392b8b41a9680649289470e644a937ee866ec9199da4434656d4c6 +MD = ? + +COUNT = 72 + i = 3 + M = 9b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d5369179b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d5369179b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d536917 + MDi = d44bb6387e098dea95371820691eb317c4632c09496f252693efba4c + + i = 4 + M = 9b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d5369179b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d536917d44bb6387e098dea95371820691eb317c4632c09496f252693efba4c + MDi = ea875e97461d8f5a8f660cce554ad191f740140d18d1b503760f38f7 + + i = 5 + M = 9b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d536917d44bb6387e098dea95371820691eb317c4632c09496f252693efba4cea875e97461d8f5a8f660cce554ad191f740140d18d1b503760f38f7 + MDi = 2c4f54cc10921b88447b4ffd6e1e5870744d0ff02374091d7339023f + + i = 6 + M = d44bb6387e098dea95371820691eb317c4632c09496f252693efba4cea875e97461d8f5a8f660cce554ad191f740140d18d1b503760f38f72c4f54cc10921b88447b4ffd6e1e5870744d0ff02374091d7339023f + MDi = 4b96844c627a923b6e5bf61acf8aecb480a02814da821b2d9652a9f2 + + i = 7 + M = ea875e97461d8f5a8f660cce554ad191f740140d18d1b503760f38f72c4f54cc10921b88447b4ffd6e1e5870744d0ff02374091d7339023f4b96844c627a923b6e5bf61acf8aecb480a02814da821b2d9652a9f2 + MDi = 685971f8371366f4a76b1bdfbc9d9ba675227715e8e764dea41c8b2d +MD = ? + +COUNT = 73 + i = 3 + M = 502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515 + MDi = d283a3978757270d64b32e2ed487ef90d770254f5d155b6f4f97918c + + i = 4 + M = 502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515d283a3978757270d64b32e2ed487ef90d770254f5d155b6f4f97918c + MDi = d9ce27b54656e67138d7e7d5c551f81b78a1962616a45db900b851a2 + + i = 5 + M = 502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515d283a3978757270d64b32e2ed487ef90d770254f5d155b6f4f97918cd9ce27b54656e67138d7e7d5c551f81b78a1962616a45db900b851a2 + MDi = 4baf417c5dac39b448a761688bb387d211c418a36902a9b670ef32e6 + + i = 6 + M = d283a3978757270d64b32e2ed487ef90d770254f5d155b6f4f97918cd9ce27b54656e67138d7e7d5c551f81b78a1962616a45db900b851a24baf417c5dac39b448a761688bb387d211c418a36902a9b670ef32e6 + MDi = 9f7bfe83126c4470ce04a2e892f2ec7c0bd1d3b3656a3a85ba993d0f + + i = 7 + M = d9ce27b54656e67138d7e7d5c551f81b78a1962616a45db900b851a24baf417c5dac39b448a761688bb387d211c418a36902a9b670ef32e69f7bfe83126c4470ce04a2e892f2ec7c0bd1d3b3656a3a85ba993d0f + MDi = b0df931be8db493933c622b40822020d1935bf1deb48363fead9f637 +MD = ? + +COUNT = 74 + i = 3 + M = 7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388d7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388d7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388d + MDi = e738a47df57ab4027faf7aa7402c1666ca833f00137bc8652e6ba409 + + i = 4 + M = 7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388d7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388de738a47df57ab4027faf7aa7402c1666ca833f00137bc8652e6ba409 + MDi = 419824e21ab7e058b4ebdeb7ad7d25a617eac519b0f47627c8e8f60a + + i = 5 + M = 7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388de738a47df57ab4027faf7aa7402c1666ca833f00137bc8652e6ba409419824e21ab7e058b4ebdeb7ad7d25a617eac519b0f47627c8e8f60a + MDi = 014c81125ecb0b0ef86f1cafb05d91f9e8b401504258dae8d5728411 + + i = 6 + M = e738a47df57ab4027faf7aa7402c1666ca833f00137bc8652e6ba409419824e21ab7e058b4ebdeb7ad7d25a617eac519b0f47627c8e8f60a014c81125ecb0b0ef86f1cafb05d91f9e8b401504258dae8d5728411 + MDi = ad65a85b277a9cee287e41d50a6eee3b1c71d77ff8e86cfb82ad8652 + + i = 7 + M = 419824e21ab7e058b4ebdeb7ad7d25a617eac519b0f47627c8e8f60a014c81125ecb0b0ef86f1cafb05d91f9e8b401504258dae8d5728411ad65a85b277a9cee287e41d50a6eee3b1c71d77ff8e86cfb82ad8652 + MDi = f12c96e9c620e49e71e8854b34b5393406991df1e0d8f164a44095fb +MD = ? + +COUNT = 75 + i = 3 + M = b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd70b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd70b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd70 + MDi = 01e46690bf90bdbd17385740803907fb9f5ee07c9abd0092e90f9fbb + + i = 4 + M = b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd70b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd7001e46690bf90bdbd17385740803907fb9f5ee07c9abd0092e90f9fbb + MDi = 329e04dd0142156669e76509f038998950e4fbecd296f7ce8597dabd + + i = 5 + M = b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd7001e46690bf90bdbd17385740803907fb9f5ee07c9abd0092e90f9fbb329e04dd0142156669e76509f038998950e4fbecd296f7ce8597dabd + MDi = 057ad905c477766baa7ee409a2e1351c3c1f767e5b6e9bc2796112e4 + + i = 6 + M = 01e46690bf90bdbd17385740803907fb9f5ee07c9abd0092e90f9fbb329e04dd0142156669e76509f038998950e4fbecd296f7ce8597dabd057ad905c477766baa7ee409a2e1351c3c1f767e5b6e9bc2796112e4 + MDi = 22f1b45123b360db432ebb913f60bc2f8fbc36e070ca040b9dc47b7b + + i = 7 + M = 329e04dd0142156669e76509f038998950e4fbecd296f7ce8597dabd057ad905c477766baa7ee409a2e1351c3c1f767e5b6e9bc2796112e422f1b45123b360db432ebb913f60bc2f8fbc36e070ca040b9dc47b7b + MDi = 0b80024a9bfc521fbad40d05a1de746dabc50e44216d8d3b20d37529 +MD = ? + +COUNT = 76 + i = 3 + M = 6b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd926b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd926b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd92 + MDi = a64a0a7b3fd40ea54442eb805e03565b0b5b5d938cf57634aa1079fd + + i = 4 + M = 6b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd926b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd92a64a0a7b3fd40ea54442eb805e03565b0b5b5d938cf57634aa1079fd + MDi = 8e0df2cefe1b0e34a169f6f5c220535033b0257dba96ce9f3f00f928 + + i = 5 + M = 6b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd92a64a0a7b3fd40ea54442eb805e03565b0b5b5d938cf57634aa1079fd8e0df2cefe1b0e34a169f6f5c220535033b0257dba96ce9f3f00f928 + MDi = c9ff044adb28a964a5eef6e33dc3e545a08bb0edd5cb8b62f27c8635 + + i = 6 + M = a64a0a7b3fd40ea54442eb805e03565b0b5b5d938cf57634aa1079fd8e0df2cefe1b0e34a169f6f5c220535033b0257dba96ce9f3f00f928c9ff044adb28a964a5eef6e33dc3e545a08bb0edd5cb8b62f27c8635 + MDi = 869d5523dc6e9bec7fac860c6d2ed628fd6908c5fd967016212a2e21 + + i = 7 + M = 8e0df2cefe1b0e34a169f6f5c220535033b0257dba96ce9f3f00f928c9ff044adb28a964a5eef6e33dc3e545a08bb0edd5cb8b62f27c8635869d5523dc6e9bec7fac860c6d2ed628fd6908c5fd967016212a2e21 + MDi = 5a09114384f43637b2f6f8cd90652c9eb9d1d26b4dbae15a98323f20 +MD = ? + +COUNT = 77 + i = 3 + M = 357f7779dc289dd46231a46bdeabaf899b167984864d232410736505357f7779dc289dd46231a46bdeabaf899b167984864d232410736505357f7779dc289dd46231a46bdeabaf899b167984864d232410736505 + MDi = 49a6b1adb63b5e92840e42a02996f6339b756c36eaf69b592e506b32 + + i = 4 + M = 357f7779dc289dd46231a46bdeabaf899b167984864d232410736505357f7779dc289dd46231a46bdeabaf899b167984864d23241073650549a6b1adb63b5e92840e42a02996f6339b756c36eaf69b592e506b32 + MDi = 15c63624f146f2a635ddf5972ea897fb03f0e846ec36447e4bdbfd9d + + i = 5 + M = 357f7779dc289dd46231a46bdeabaf899b167984864d23241073650549a6b1adb63b5e92840e42a02996f6339b756c36eaf69b592e506b3215c63624f146f2a635ddf5972ea897fb03f0e846ec36447e4bdbfd9d + MDi = da56218343ebebdaec067a26b1a067ee5f0837986c1250247d3c1b66 + + i = 6 + M = 49a6b1adb63b5e92840e42a02996f6339b756c36eaf69b592e506b3215c63624f146f2a635ddf5972ea897fb03f0e846ec36447e4bdbfd9dda56218343ebebdaec067a26b1a067ee5f0837986c1250247d3c1b66 + MDi = 79794cfda5edbfbd3cf9f3f8af713226af1d0349679f0afa3bc715f9 + + i = 7 + M = 15c63624f146f2a635ddf5972ea897fb03f0e846ec36447e4bdbfd9dda56218343ebebdaec067a26b1a067ee5f0837986c1250247d3c1b6679794cfda5edbfbd3cf9f3f8af713226af1d0349679f0afa3bc715f9 + MDi = eaf6e78b538076c2c909a7f99771df9275ef3a7d1faae146832671fe +MD = ? + +COUNT = 78 + i = 3 + M = 28cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d8828cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d8828cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d88 + MDi = 5fb10204e4fe30038650b0ee991077011c09427305ca6afef04a9c10 + + i = 4 + M = 28cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d8828cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d885fb10204e4fe30038650b0ee991077011c09427305ca6afef04a9c10 + MDi = 9b0431c37537dd43f8d513ebe6f89725b597f84321ed29e5e0f35196 + + i = 5 + M = 28cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d885fb10204e4fe30038650b0ee991077011c09427305ca6afef04a9c109b0431c37537dd43f8d513ebe6f89725b597f84321ed29e5e0f35196 + MDi = 41e88fb3ad9acafdd16afac6b67a6563ca8fe505b25e10d563d43b3f + + i = 6 + M = 5fb10204e4fe30038650b0ee991077011c09427305ca6afef04a9c109b0431c37537dd43f8d513ebe6f89725b597f84321ed29e5e0f3519641e88fb3ad9acafdd16afac6b67a6563ca8fe505b25e10d563d43b3f + MDi = 588863c6470dad47d074e31358a3144988054cf0395ebd20937f691f + + i = 7 + M = 9b0431c37537dd43f8d513ebe6f89725b597f84321ed29e5e0f3519641e88fb3ad9acafdd16afac6b67a6563ca8fe505b25e10d563d43b3f588863c6470dad47d074e31358a3144988054cf0395ebd20937f691f + MDi = abee56f08c413bcb35080c81cd2f79e675aa871d7610f9ecfbfff83f +MD = ? + +COUNT = 79 + i = 3 + M = d3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2dd3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2dd3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2d + MDi = 0f1dcbaf1ef18f4d3d7a8b95ba86b8ecb9fc88b59686dc975e3cb139 + + i = 4 + M = d3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2dd3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2d0f1dcbaf1ef18f4d3d7a8b95ba86b8ecb9fc88b59686dc975e3cb139 + MDi = d1602692ed62af3119d011975086f7947b920a00118d41cf489866da + + i = 5 + M = d3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2d0f1dcbaf1ef18f4d3d7a8b95ba86b8ecb9fc88b59686dc975e3cb139d1602692ed62af3119d011975086f7947b920a00118d41cf489866da + MDi = 8493da712b9b29209a4b831f9d1f6cdd4b27bce93bba7891083cdc90 + + i = 6 + M = 0f1dcbaf1ef18f4d3d7a8b95ba86b8ecb9fc88b59686dc975e3cb139d1602692ed62af3119d011975086f7947b920a00118d41cf489866da8493da712b9b29209a4b831f9d1f6cdd4b27bce93bba7891083cdc90 + MDi = a9446699074d11bf8356114a8e4f92a4a98ab751c07900258e43f566 + + i = 7 + M = d1602692ed62af3119d011975086f7947b920a00118d41cf489866da8493da712b9b29209a4b831f9d1f6cdd4b27bce93bba7891083cdc90a9446699074d11bf8356114a8e4f92a4a98ab751c07900258e43f566 + MDi = c7b0f9c6c1757e0dc82c12a3c353f8b20fcaa039921814405853a60d +MD = ? + +COUNT = 80 + i = 3 + M = bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf01145bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf01145bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf01145 + MDi = 10eda9f5c82333405b9588738a998e176927ed878a661fc559a3da4e + + i = 4 + M = bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf01145bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf0114510eda9f5c82333405b9588738a998e176927ed878a661fc559a3da4e + MDi = 660cce23334462357967050d8aa3e24ceedad51925b8cfd107069354 + + i = 5 + M = bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf0114510eda9f5c82333405b9588738a998e176927ed878a661fc559a3da4e660cce23334462357967050d8aa3e24ceedad51925b8cfd107069354 + MDi = 6aa6c624a7a04e0b2a18ea53bcfa6036f74569b788060ebe49b4b487 + + i = 6 + M = 10eda9f5c82333405b9588738a998e176927ed878a661fc559a3da4e660cce23334462357967050d8aa3e24ceedad51925b8cfd1070693546aa6c624a7a04e0b2a18ea53bcfa6036f74569b788060ebe49b4b487 + MDi = 1de67952e0054dea37f34e6b3bcb4cb18960276dcdebea26b513a0b0 + + i = 7 + M = 660cce23334462357967050d8aa3e24ceedad51925b8cfd1070693546aa6c624a7a04e0b2a18ea53bcfa6036f74569b788060ebe49b4b4871de67952e0054dea37f34e6b3bcb4cb18960276dcdebea26b513a0b0 + MDi = fbc309be09c4bda7fdc3e907bd4045253f683a83015369806f18e9da +MD = ? + +COUNT = 81 + i = 3 + M = 1f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a31f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a31f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a3 + MDi = 11b17498aa870e444ac77834e2f5faadfd4393e0082931f5523fbebb + + i = 4 + M = 1f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a31f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a311b17498aa870e444ac77834e2f5faadfd4393e0082931f5523fbebb + MDi = 165ee52120a750a093b451776dbfecc261dfb2a5224449a8d46e984c + + i = 5 + M = 1f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a311b17498aa870e444ac77834e2f5faadfd4393e0082931f5523fbebb165ee52120a750a093b451776dbfecc261dfb2a5224449a8d46e984c + MDi = bc73bf495a6d63d0c03741f130a503190a63ce88c74b13b705c1ca6c + + i = 6 + M = 11b17498aa870e444ac77834e2f5faadfd4393e0082931f5523fbebb165ee52120a750a093b451776dbfecc261dfb2a5224449a8d46e984cbc73bf495a6d63d0c03741f130a503190a63ce88c74b13b705c1ca6c + MDi = 515b49fddb60648dcfaf06430ecc7eb5439300b845e8656246f1d374 + + i = 7 + M = 165ee52120a750a093b451776dbfecc261dfb2a5224449a8d46e984cbc73bf495a6d63d0c03741f130a503190a63ce88c74b13b705c1ca6c515b49fddb60648dcfaf06430ecc7eb5439300b845e8656246f1d374 + MDi = 8edff2ef8b3acd8cbd00cd67ae49230f786275b988b6e9634683f4c2 +MD = ? + +COUNT = 82 + i = 3 + M = d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9 + MDi = ef277a87a65fa9afe7d7d573c7c1416eb8d07998fbcf0d08a27eb250 + + i = 4 + M = d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9ef277a87a65fa9afe7d7d573c7c1416eb8d07998fbcf0d08a27eb250 + MDi = 8a5b36d9fe08bb058d88fcd583b487f0e34b98975a1c09db9402261f + + i = 5 + M = d3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9ef277a87a65fa9afe7d7d573c7c1416eb8d07998fbcf0d08a27eb2508a5b36d9fe08bb058d88fcd583b487f0e34b98975a1c09db9402261f + MDi = 590f079d61186879edba28392e62cf70d536e172f297bc14466b5193 + + i = 6 + M = ef277a87a65fa9afe7d7d573c7c1416eb8d07998fbcf0d08a27eb2508a5b36d9fe08bb058d88fcd583b487f0e34b98975a1c09db9402261f590f079d61186879edba28392e62cf70d536e172f297bc14466b5193 + MDi = fb4960e5f04e30189fac1c31378b4794421a9a2a4672e7beaa134087 + + i = 7 + M = 8a5b36d9fe08bb058d88fcd583b487f0e34b98975a1c09db9402261f590f079d61186879edba28392e62cf70d536e172f297bc14466b5193fb4960e5f04e30189fac1c31378b4794421a9a2a4672e7beaa134087 + MDi = dcda3d5430cac918be332b1b5ff55a67c227608c326e005c7caafb05 +MD = ? + +COUNT = 83 + i = 3 + M = 45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fd45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fd45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fd + MDi = bd8c57242a0b242ff5283e64693da15190c0820965d31801105ef70b + + i = 4 + M = 45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fd45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fdbd8c57242a0b242ff5283e64693da15190c0820965d31801105ef70b + MDi = 99a94275833d9dbfbcf43568732382d09c108f837aa3786eaf6753c0 + + i = 5 + M = 45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fdbd8c57242a0b242ff5283e64693da15190c0820965d31801105ef70b99a94275833d9dbfbcf43568732382d09c108f837aa3786eaf6753c0 + MDi = f6bdfc67ce8fb61cd39f2dffc871ac1c212a03763400b5835a8ad21c + + i = 6 + M = bd8c57242a0b242ff5283e64693da15190c0820965d31801105ef70b99a94275833d9dbfbcf43568732382d09c108f837aa3786eaf6753c0f6bdfc67ce8fb61cd39f2dffc871ac1c212a03763400b5835a8ad21c + MDi = dacb72185a1bbc5bcce2d89ca1060ab4582899156bac235925a7e6a2 + + i = 7 + M = 99a94275833d9dbfbcf43568732382d09c108f837aa3786eaf6753c0f6bdfc67ce8fb61cd39f2dffc871ac1c212a03763400b5835a8ad21cdacb72185a1bbc5bcce2d89ca1060ab4582899156bac235925a7e6a2 + MDi = 7f73b1d006e25f2d608639475db1243d393065d04b57569546894904 +MD = ? + +COUNT = 84 + i = 3 + M = 2fad09cb0e93263548120115972110979eec7ef94e303c462223005d2fad09cb0e93263548120115972110979eec7ef94e303c462223005d2fad09cb0e93263548120115972110979eec7ef94e303c462223005d + MDi = 407f921388bd1cbe68f1a52f86a7f37481819e8c97e47c1ea6febf0f + + i = 4 + M = 2fad09cb0e93263548120115972110979eec7ef94e303c462223005d2fad09cb0e93263548120115972110979eec7ef94e303c462223005d407f921388bd1cbe68f1a52f86a7f37481819e8c97e47c1ea6febf0f + MDi = 59021d201e8f072ae297ca18c7dc048dc46da2e325c4718da2e1d56d + + i = 5 + M = 2fad09cb0e93263548120115972110979eec7ef94e303c462223005d407f921388bd1cbe68f1a52f86a7f37481819e8c97e47c1ea6febf0f59021d201e8f072ae297ca18c7dc048dc46da2e325c4718da2e1d56d + MDi = e62fc10ace3449261f7524413b35e422222daa3d6ca6e9b55c4ddc7e + + i = 6 + M = 407f921388bd1cbe68f1a52f86a7f37481819e8c97e47c1ea6febf0f59021d201e8f072ae297ca18c7dc048dc46da2e325c4718da2e1d56de62fc10ace3449261f7524413b35e422222daa3d6ca6e9b55c4ddc7e + MDi = 93161b7a37025d515bb42e60a470abd56f5c8e93ec6a48c289d25eea + + i = 7 + M = 59021d201e8f072ae297ca18c7dc048dc46da2e325c4718da2e1d56de62fc10ace3449261f7524413b35e422222daa3d6ca6e9b55c4ddc7e93161b7a37025d515bb42e60a470abd56f5c8e93ec6a48c289d25eea + MDi = 6b63c4073858165d30fb7a0c995aff411ef177df73ff23c537fe1672 +MD = ? + +COUNT = 85 + i = 3 + M = 6680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f36680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f36680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f3 + MDi = 4f404a492340b31066e485f0ceb299ffd919e3266a0f72fb1a551820 + + i = 4 + M = 6680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f36680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f34f404a492340b31066e485f0ceb299ffd919e3266a0f72fb1a551820 + MDi = 0fdd8bb4b279bc5c504f7c235ae84cb24f39463c59dfaad37cdf4e3a + + i = 5 + M = 6680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f34f404a492340b31066e485f0ceb299ffd919e3266a0f72fb1a5518200fdd8bb4b279bc5c504f7c235ae84cb24f39463c59dfaad37cdf4e3a + MDi = 818431f811ba6a03dbc81f0dd3945f072d36e722292971830b8d2217 + + i = 6 + M = 4f404a492340b31066e485f0ceb299ffd919e3266a0f72fb1a5518200fdd8bb4b279bc5c504f7c235ae84cb24f39463c59dfaad37cdf4e3a818431f811ba6a03dbc81f0dd3945f072d36e722292971830b8d2217 + MDi = f79781c8a2e95d7581ded538f89e22d4280df76aad514fd28af859c7 + + i = 7 + M = 0fdd8bb4b279bc5c504f7c235ae84cb24f39463c59dfaad37cdf4e3a818431f811ba6a03dbc81f0dd3945f072d36e722292971830b8d2217f79781c8a2e95d7581ded538f89e22d4280df76aad514fd28af859c7 + MDi = a3a2ab19d64ce0fa8a05fd6d374af815859de161e37bcec146ef963e +MD = ? + +COUNT = 86 + i = 3 + M = 1076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff11076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff11076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff1 + MDi = b9b2306cb906bb63f20041f963b3055e15a1abb5b81a73b210049b96 + + i = 4 + M = 1076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff11076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff1b9b2306cb906bb63f20041f963b3055e15a1abb5b81a73b210049b96 + MDi = 45626ca2742679887f6c8dda23dd1b6a4fa49da678629edc95e2a4e0 + + i = 5 + M = 1076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff1b9b2306cb906bb63f20041f963b3055e15a1abb5b81a73b210049b9645626ca2742679887f6c8dda23dd1b6a4fa49da678629edc95e2a4e0 + MDi = 3b5df2cb37e342142bae7de4b0e765ddcf3edf54a1ee425c02987133 + + i = 6 + M = b9b2306cb906bb63f20041f963b3055e15a1abb5b81a73b210049b9645626ca2742679887f6c8dda23dd1b6a4fa49da678629edc95e2a4e03b5df2cb37e342142bae7de4b0e765ddcf3edf54a1ee425c02987133 + MDi = 2bd173c5d5a1ca68f72d94e92a1c76bb5b69882d173b2393abd3195c + + i = 7 + M = 45626ca2742679887f6c8dda23dd1b6a4fa49da678629edc95e2a4e03b5df2cb37e342142bae7de4b0e765ddcf3edf54a1ee425c029871332bd173c5d5a1ca68f72d94e92a1c76bb5b69882d173b2393abd3195c + MDi = 4a0b838c64f1a83c466667760352d28269b55b081dac449cc7413e81 +MD = ? + +COUNT = 87 + i = 3 + M = 0a819369c413d8d20195fa16660b320988357d63c1a94602eb1173770a819369c413d8d20195fa16660b320988357d63c1a94602eb1173770a819369c413d8d20195fa16660b320988357d63c1a94602eb117377 + MDi = a116dd8474ad00cebfa4879f414baea84238ce51b8c58c5f7a9f44fe + + i = 4 + M = 0a819369c413d8d20195fa16660b320988357d63c1a94602eb1173770a819369c413d8d20195fa16660b320988357d63c1a94602eb117377a116dd8474ad00cebfa4879f414baea84238ce51b8c58c5f7a9f44fe + MDi = 306c607bc39e0fc74acd0a5b84d64d1aa8ab9381ba644f8636df8e27 + + i = 5 + M = 0a819369c413d8d20195fa16660b320988357d63c1a94602eb117377a116dd8474ad00cebfa4879f414baea84238ce51b8c58c5f7a9f44fe306c607bc39e0fc74acd0a5b84d64d1aa8ab9381ba644f8636df8e27 + MDi = 459384516dafbe08c29890785c23aa0c4c59aec82555b84bae03d681 + + i = 6 + M = a116dd8474ad00cebfa4879f414baea84238ce51b8c58c5f7a9f44fe306c607bc39e0fc74acd0a5b84d64d1aa8ab9381ba644f8636df8e27459384516dafbe08c29890785c23aa0c4c59aec82555b84bae03d681 + MDi = 2319ee6c9d904bb4e40c10d50a56d5dc0cfa2f06f81282eed55620d2 + + i = 7 + M = 306c607bc39e0fc74acd0a5b84d64d1aa8ab9381ba644f8636df8e27459384516dafbe08c29890785c23aa0c4c59aec82555b84bae03d6812319ee6c9d904bb4e40c10d50a56d5dc0cfa2f06f81282eed55620d2 + MDi = 03b7d3614e00fb3515167abfb456e3347546bd1ce6fbdad69cbd405c +MD = ? + +COUNT = 88 + i = 3 + M = 397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b9916397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b9916397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b9916 + MDi = 00036270e56311d94394ebd0b41ed8e3a816ad68d6a2bc5481c7af4e + + i = 4 + M = 397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b9916397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b991600036270e56311d94394ebd0b41ed8e3a816ad68d6a2bc5481c7af4e + MDi = 523d217ad30380584649f769989e566698278c32193296fa766e2adc + + i = 5 + M = 397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b991600036270e56311d94394ebd0b41ed8e3a816ad68d6a2bc5481c7af4e523d217ad30380584649f769989e566698278c32193296fa766e2adc + MDi = 649d82b7458909b025e64d03d797d3da5654e8e3f0aa25ee43c19e30 + + i = 6 + M = 00036270e56311d94394ebd0b41ed8e3a816ad68d6a2bc5481c7af4e523d217ad30380584649f769989e566698278c32193296fa766e2adc649d82b7458909b025e64d03d797d3da5654e8e3f0aa25ee43c19e30 + MDi = 695ad47ced74c44451f7fbe6a8e8ff51a853c3f182e72da27bc176c9 + + i = 7 + M = 523d217ad30380584649f769989e566698278c32193296fa766e2adc649d82b7458909b025e64d03d797d3da5654e8e3f0aa25ee43c19e30695ad47ced74c44451f7fbe6a8e8ff51a853c3f182e72da27bc176c9 + MDi = e56d5043d29ed310537636520278797624dc020f5e6787e1d663c6e8 +MD = ? + +COUNT = 89 + i = 3 + M = 217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e + MDi = 6a0f11738d9c388653ecd928de2a7d55934686b51ecec2b4526182b7 + + i = 4 + M = 217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e6a0f11738d9c388653ecd928de2a7d55934686b51ecec2b4526182b7 + MDi = 0127fdd51399331f9b9d6deaf54b32bc906a7ffa1eeab6117811e42e + + i = 5 + M = 217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e6a0f11738d9c388653ecd928de2a7d55934686b51ecec2b4526182b70127fdd51399331f9b9d6deaf54b32bc906a7ffa1eeab6117811e42e + MDi = 75a192b22cf65d42ad712c53aff1f0fede299d95b817aa3c9e350037 + + i = 6 + M = 6a0f11738d9c388653ecd928de2a7d55934686b51ecec2b4526182b70127fdd51399331f9b9d6deaf54b32bc906a7ffa1eeab6117811e42e75a192b22cf65d42ad712c53aff1f0fede299d95b817aa3c9e350037 + MDi = 594357ea8fcf06f51ca4bd8d1874b409d5bf0333c3f88fec4d49a52d + + i = 7 + M = 0127fdd51399331f9b9d6deaf54b32bc906a7ffa1eeab6117811e42e75a192b22cf65d42ad712c53aff1f0fede299d95b817aa3c9e350037594357ea8fcf06f51ca4bd8d1874b409d5bf0333c3f88fec4d49a52d + MDi = c9f62ebc774b7862581c8143d37ec497ccac3c9beca57b9056ddfae1 +MD = ? + +COUNT = 90 + i = 3 + M = ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f19843ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f19843ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f19843 + MDi = 6c867aa119c40b5f85f612a00764975970d2c283ceb7a465b3f0877b + + i = 4 + M = ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f19843ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f198436c867aa119c40b5f85f612a00764975970d2c283ceb7a465b3f0877b + MDi = 4bc8f10a517c7412b42433923b1c0d2c5191b41e1f6a6ac4e2f6b449 + + i = 5 + M = ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f198436c867aa119c40b5f85f612a00764975970d2c283ceb7a465b3f0877b4bc8f10a517c7412b42433923b1c0d2c5191b41e1f6a6ac4e2f6b449 + MDi = c82c31b44454baed559ed8d7db79fc73bed6f5dfea83faac03422fe8 + + i = 6 + M = 6c867aa119c40b5f85f612a00764975970d2c283ceb7a465b3f0877b4bc8f10a517c7412b42433923b1c0d2c5191b41e1f6a6ac4e2f6b449c82c31b44454baed559ed8d7db79fc73bed6f5dfea83faac03422fe8 + MDi = 17782f1d4ef413bd3d203304709342b64874591171fc66f25b3e7587 + + i = 7 + M = 4bc8f10a517c7412b42433923b1c0d2c5191b41e1f6a6ac4e2f6b449c82c31b44454baed559ed8d7db79fc73bed6f5dfea83faac03422fe817782f1d4ef413bd3d203304709342b64874591171fc66f25b3e7587 + MDi = 2518fe762043c6afc6a32f0446c5653c510785e385b1dea425517ecb +MD = ? + +COUNT = 91 + i = 3 + M = 4a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b04a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b04a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b0 + MDi = 459b8be8d798eb44eadde7a6ffea0b7609a6a0fdea0e8520015dacf8 + + i = 4 + M = 4a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b04a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b0459b8be8d798eb44eadde7a6ffea0b7609a6a0fdea0e8520015dacf8 + MDi = f1158ac0474db9a54764a016dd15dc6175efa415d82a33f651c5c8bb + + i = 5 + M = 4a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b0459b8be8d798eb44eadde7a6ffea0b7609a6a0fdea0e8520015dacf8f1158ac0474db9a54764a016dd15dc6175efa415d82a33f651c5c8bb + MDi = 197b54ea6105e171b1834cf433d78dd6e2651627326bce4fb0c8d541 + + i = 6 + M = 459b8be8d798eb44eadde7a6ffea0b7609a6a0fdea0e8520015dacf8f1158ac0474db9a54764a016dd15dc6175efa415d82a33f651c5c8bb197b54ea6105e171b1834cf433d78dd6e2651627326bce4fb0c8d541 + MDi = 3f48760114ba77c4345cd7ff364d85c3964c42d0895ba7e457652518 + + i = 7 + M = f1158ac0474db9a54764a016dd15dc6175efa415d82a33f651c5c8bb197b54ea6105e171b1834cf433d78dd6e2651627326bce4fb0c8d5413f48760114ba77c4345cd7ff364d85c3964c42d0895ba7e457652518 + MDi = 28e03a0193945464df96c5de67f682da390312c4ac4ed8aceb8288f1 +MD = ? + +COUNT = 92 + i = 3 + M = 970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e + MDi = 5b114880c00ffd5b0285728f3119fa9bacf872120b8b7df8c84127db + + i = 4 + M = 970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e5b114880c00ffd5b0285728f3119fa9bacf872120b8b7df8c84127db + MDi = 1dd5a22af414d60f25df0e316eb7746d1d2372347f06faf513cd212c + + i = 5 + M = 970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e5b114880c00ffd5b0285728f3119fa9bacf872120b8b7df8c84127db1dd5a22af414d60f25df0e316eb7746d1d2372347f06faf513cd212c + MDi = 17ad4c81ff8827ded2e13d2e27cc6db4c49d8573d783abd20fa3d1ae + + i = 6 + M = 5b114880c00ffd5b0285728f3119fa9bacf872120b8b7df8c84127db1dd5a22af414d60f25df0e316eb7746d1d2372347f06faf513cd212c17ad4c81ff8827ded2e13d2e27cc6db4c49d8573d783abd20fa3d1ae + MDi = c910a35c241d6195d136d227290fdd0d76fdaf8ef99e78e8a3a48b5a + + i = 7 + M = 1dd5a22af414d60f25df0e316eb7746d1d2372347f06faf513cd212c17ad4c81ff8827ded2e13d2e27cc6db4c49d8573d783abd20fa3d1aec910a35c241d6195d136d227290fdd0d76fdaf8ef99e78e8a3a48b5a + MDi = adf2853e68813d801b5ea2785784ef1593200e23034085ffc972205b +MD = ? + +COUNT = 93 + i = 3 + M = a7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021aa7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021aa7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021a + MDi = 6fcafba4c7f6a9be82744c0a9ea93b70868c8b99d136361e988d5060 + + i = 4 + M = a7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021aa7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021a6fcafba4c7f6a9be82744c0a9ea93b70868c8b99d136361e988d5060 + MDi = 0c92e364b075f6a6048d1da213e47dd7195e775a448c2a928f197534 + + i = 5 + M = a7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021a6fcafba4c7f6a9be82744c0a9ea93b70868c8b99d136361e988d50600c92e364b075f6a6048d1da213e47dd7195e775a448c2a928f197534 + MDi = a0e4a038c828aaed11fd9c5b6d26594bee20f921b13099c5148ea4dd + + i = 6 + M = 6fcafba4c7f6a9be82744c0a9ea93b70868c8b99d136361e988d50600c92e364b075f6a6048d1da213e47dd7195e775a448c2a928f197534a0e4a038c828aaed11fd9c5b6d26594bee20f921b13099c5148ea4dd + MDi = 08c2ed52ca99fc6b2ed64c9fabf1e2b31b99c1eb84defd441f1c2056 + + i = 7 + M = 0c92e364b075f6a6048d1da213e47dd7195e775a448c2a928f197534a0e4a038c828aaed11fd9c5b6d26594bee20f921b13099c5148ea4dd08c2ed52ca99fc6b2ed64c9fabf1e2b31b99c1eb84defd441f1c2056 + MDi = 70937f4b87ae543b96080f520c58cbbcb44d41501aa7947f3d115b54 +MD = ? + +COUNT = 94 + i = 3 + M = d63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fcd63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fcd63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fc + MDi = 90949fdfc90837d4f7be3479f9f18cf33572200337ea89e5d9ad20e8 + + i = 4 + M = d63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fcd63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fc90949fdfc90837d4f7be3479f9f18cf33572200337ea89e5d9ad20e8 + MDi = 16fc9ac20173433ad5080af11fe08d4252a89f08854cf385852384c0 + + i = 5 + M = d63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fc90949fdfc90837d4f7be3479f9f18cf33572200337ea89e5d9ad20e816fc9ac20173433ad5080af11fe08d4252a89f08854cf385852384c0 + MDi = 63ddd4a64e688eaf994c592f6e169d16073818194db2e9b9a1eba5a3 + + i = 6 + M = 90949fdfc90837d4f7be3479f9f18cf33572200337ea89e5d9ad20e816fc9ac20173433ad5080af11fe08d4252a89f08854cf385852384c063ddd4a64e688eaf994c592f6e169d16073818194db2e9b9a1eba5a3 + MDi = b02867e13b96bd06e4edaeca5b25cad345ec5da2bce5cb28eaa32619 + + i = 7 + M = 16fc9ac20173433ad5080af11fe08d4252a89f08854cf385852384c063ddd4a64e688eaf994c592f6e169d16073818194db2e9b9a1eba5a3b02867e13b96bd06e4edaeca5b25cad345ec5da2bce5cb28eaa32619 + MDi = 5f9f42b4f03e9e6414d5f852fc6d526f6da6eccf49c09f2a862927fd +MD = ? + +COUNT = 95 + i = 3 + M = 0dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a050dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a050dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a05 + MDi = 1e919c63bfafff3d50ac619018382fbebc20bc50a12f6663cf373e9b + + i = 4 + M = 0dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a050dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a051e919c63bfafff3d50ac619018382fbebc20bc50a12f6663cf373e9b + MDi = 202a759a76fca13df1037287e588ad2137bca2ad820b6042495fa752 + + i = 5 + M = 0dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a051e919c63bfafff3d50ac619018382fbebc20bc50a12f6663cf373e9b202a759a76fca13df1037287e588ad2137bca2ad820b6042495fa752 + MDi = 84754b4af451aa0adc3369c313859dddb94e6ce9c1ea09bc3e4f4269 + + i = 6 + M = 1e919c63bfafff3d50ac619018382fbebc20bc50a12f6663cf373e9b202a759a76fca13df1037287e588ad2137bca2ad820b6042495fa75284754b4af451aa0adc3369c313859dddb94e6ce9c1ea09bc3e4f4269 + MDi = b0ea7d84541c11ec0a8024d326dcf1f9696a27aeeef7d53671701b75 + + i = 7 + M = 202a759a76fca13df1037287e588ad2137bca2ad820b6042495fa75284754b4af451aa0adc3369c313859dddb94e6ce9c1ea09bc3e4f4269b0ea7d84541c11ec0a8024d326dcf1f9696a27aeeef7d53671701b75 + MDi = cec9026b0e98f8cd2d9bd38dd898e73391d8e908f060e77cc9368f60 +MD = ? + +COUNT = 96 + i = 3 + M = c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f53c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f53c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f53 + MDi = 48eda647f657fe6c0fe4cc854f59cf92bfd564ff1616f14abf4044f0 + + i = 4 + M = c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f53c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f5348eda647f657fe6c0fe4cc854f59cf92bfd564ff1616f14abf4044f0 + MDi = cdddae69af80dfd05d191de21ef0263e1e7b2f504d01c681e56850cb + + i = 5 + M = c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f5348eda647f657fe6c0fe4cc854f59cf92bfd564ff1616f14abf4044f0cdddae69af80dfd05d191de21ef0263e1e7b2f504d01c681e56850cb + MDi = b51a596a4fed5051bcea38d7a3839eb8c9be10d2fb3128cb75396052 + + i = 6 + M = 48eda647f657fe6c0fe4cc854f59cf92bfd564ff1616f14abf4044f0cdddae69af80dfd05d191de21ef0263e1e7b2f504d01c681e56850cbb51a596a4fed5051bcea38d7a3839eb8c9be10d2fb3128cb75396052 + MDi = bec8b03045516c0178bd6b7e3dbbcc7b65493cbc117d55e152eac570 + + i = 7 + M = cdddae69af80dfd05d191de21ef0263e1e7b2f504d01c681e56850cbb51a596a4fed5051bcea38d7a3839eb8c9be10d2fb3128cb75396052bec8b03045516c0178bd6b7e3dbbcc7b65493cbc117d55e152eac570 + MDi = caf0231e4f7180fdcd4013dbbae59ec38b61907b5735c620bfdf4e20 +MD = ? + +COUNT = 97 + i = 3 + M = 1b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d31b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d31b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d3 + MDi = 6f9579eb2112bfecc3a3633564802bfed285d6db5a8f4135628d7677 + + i = 4 + M = 1b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d31b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d36f9579eb2112bfecc3a3633564802bfed285d6db5a8f4135628d7677 + MDi = d353c2d457fed5e14cd65c88ff5c695e15f53147a5b716a457d09b1c + + i = 5 + M = 1b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d36f9579eb2112bfecc3a3633564802bfed285d6db5a8f4135628d7677d353c2d457fed5e14cd65c88ff5c695e15f53147a5b716a457d09b1c + MDi = cad63749a5ed3e0f1abbc20ba2d7d1b8aa2115e50f6766b0443b7d90 + + i = 6 + M = 6f9579eb2112bfecc3a3633564802bfed285d6db5a8f4135628d7677d353c2d457fed5e14cd65c88ff5c695e15f53147a5b716a457d09b1ccad63749a5ed3e0f1abbc20ba2d7d1b8aa2115e50f6766b0443b7d90 + MDi = 620168421b02dcabce7b74399e05ee03237436c330964acf641f1d8c + + i = 7 + M = d353c2d457fed5e14cd65c88ff5c695e15f53147a5b716a457d09b1ccad63749a5ed3e0f1abbc20ba2d7d1b8aa2115e50f6766b0443b7d90620168421b02dcabce7b74399e05ee03237436c330964acf641f1d8c + MDi = feb92a1d5a64fdcc7b2c95743efad68f8c12e636af8600888f43bebe +MD = ? + +COUNT = 98 + i = 3 + M = 8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c + MDi = 1129959c2448664d563f309abf45b417691c36a332640c3a0c42eb84 + + i = 4 + M = 8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c1129959c2448664d563f309abf45b417691c36a332640c3a0c42eb84 + MDi = 6d7e732e85a82f25edd499d52b16470e5d8a67d62156477a0d0272d2 + + i = 5 + M = 8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c1129959c2448664d563f309abf45b417691c36a332640c3a0c42eb846d7e732e85a82f25edd499d52b16470e5d8a67d62156477a0d0272d2 + MDi = 2859da43cfcaa43cf0a37abac376015a4f71dc8b635ae8fa3b27f22d + + i = 6 + M = 1129959c2448664d563f309abf45b417691c36a332640c3a0c42eb846d7e732e85a82f25edd499d52b16470e5d8a67d62156477a0d0272d22859da43cfcaa43cf0a37abac376015a4f71dc8b635ae8fa3b27f22d + MDi = b437e397b4ddaf21d12ddb0ba529ce23d96c087c8bc10ecd74c04f71 + + i = 7 + M = 6d7e732e85a82f25edd499d52b16470e5d8a67d62156477a0d0272d22859da43cfcaa43cf0a37abac376015a4f71dc8b635ae8fa3b27f22db437e397b4ddaf21d12ddb0ba529ce23d96c087c8bc10ecd74c04f71 + MDi = 9f3e837592e3179b189a42ac038a0bf79baaeb13f66ecab5a8b409fb +MD = ? + +COUNT = 99 + i = 3 + M = a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05 + MDi = 694f9a85e1ff5a2689621622453bbbe199d2f45a141b7809e20373c1 + + i = 4 + M = a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05694f9a85e1ff5a2689621622453bbbe199d2f45a141b7809e20373c1 + MDi = 4825583016163673abc0851cbaa177858843752d3759bd42ef03cbb3 + + i = 5 + M = a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05694f9a85e1ff5a2689621622453bbbe199d2f45a141b7809e20373c14825583016163673abc0851cbaa177858843752d3759bd42ef03cbb3 + MDi = f202a2f5ea7a2c5a11c2e0eddc086185a49ee28ac57c0f33b6f6f2cf + + i = 6 + M = 694f9a85e1ff5a2689621622453bbbe199d2f45a141b7809e20373c14825583016163673abc0851cbaa177858843752d3759bd42ef03cbb3f202a2f5ea7a2c5a11c2e0eddc086185a49ee28ac57c0f33b6f6f2cf + MDi = 3ea623ad715683a4cdba3d8d4da24692660bd6ab1c012f38b73de32e + + i = 7 + M = 4825583016163673abc0851cbaa177858843752d3759bd42ef03cbb3f202a2f5ea7a2c5a11c2e0eddc086185a49ee28ac57c0f33b6f6f2cf3ea623ad715683a4cdba3d8d4da24692660bd6ab1c012f38b73de32e + MDi = c0227ddcb04e9b58ebb6133530263d48c3e7d618e1bac5892b73eae3 +MD = ? + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_224ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224ShortMsg.rsp new file mode 100644 index 000000000000..c622d452dd51 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_224ShortMsg.rsp @@ -0,0 +1,523 @@ +# CAVS 21.1 +# "SHA-512/224 ShortMsg" information for "sha_values" +# SHA-512/224 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:34:13 2017 + +[L = 28] + +Len = 0 +Msg = 00 +MD = 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4 + +Len = 8 +Msg = cf +MD = 4199239e87d47b6feda016802bf367fb6e8b5655eff6225cb2668f4a + +Len = 16 +Msg = ca2d +MD = 392b99b593b85e147f031986c2a9edfdb4ffd9f24c77c452d339c9fc + +Len = 24 +Msg = 497604 +MD = a9c345d58a959af20a42c84e28523ba47e3bf8fad8e8c3f32b7a72ae + +Len = 32 +Msg = c2eb0c88 +MD = c5b97f1e46d91c3940be8cfef1e49baa77b475db943e49f00cddbe72 + +Len = 40 +Msg = d28bc2aa3f +MD = e79de552120a87585e7313e24ecd74139a3be9ba2812936c4b33ca23 + +Len = 48 +Msg = b4142ca79f6d +MD = 2a0ed8eb0e18bc189f5c836dc6a5825baa6f7286fa5b9689b641bb3b + +Len = 56 +Msg = 8daedf3c420c8c +MD = 4edac91a8eba35a1431ef4d49705db12da382a786d15636774cbd708 + +Len = 64 +Msg = 6963446913771410 +MD = 21f6c373637e6a5e89d6e88811110c5c3fa12e497144912914c546e1 + +Len = 72 +Msg = 6f316ab2b40f096819 +MD = 5899542e9a78d1403929c4346993e213b83c32f91274bddbc63e4192 + +Len = 80 +Msg = 5819a77fa1a8f9c35d17 +MD = 2e944a5c534b80922f6c21e97277b4a01a4a0fa652d6d40b37fb0fc9 + +Len = 88 +Msg = 3c7e038401fa74c6c06e41 +MD = a74af68819afe81bcdaceba64201c0d41f843e4b08e4002a375be761 + +Len = 96 +Msg = e243b9f901855447fa2af302 +MD = 330c77ed20dc93cabf0df3442c620c9df5c7a02d7c79fc1d2ff7ff94 + +Len = 104 +Msg = c5f942edc46407c6019cd926a0 +MD = e180a0d83683cb7e79d812ab5d4288399c78895c6a918e99a2839155 + +Len = 112 +Msg = e57d4c478ad6a64b8bf3352e75b6 +MD = 18b3e8f5a1fb603c67060c12a736e57c5ccc0b89fc62c90b02dd926b + +Len = 120 +Msg = 32d049928a583b5b954785805d8b26 +MD = 18f87e8e6b54ec4336442f76eda0b32dcb64d463c0be69e348f86c34 + +Len = 128 +Msg = 3b2542cb3fa560dd0d796d59ee151fee +MD = dc4ab34db241b3fc2055c54f70a8fd304523d8c4202852f5f077644f + +Len = 136 +Msg = ecbe367959a91b15eb08048b33752ef76d +MD = b76eaa7dde45ed50c07b5bafafbfdcc0959c1a64eca7adc391aba245 + +Len = 144 +Msg = 40bd7d47b636c2a749a247fdda75807c238b +MD = 087ed68f1db90ffb2fb4ff7dc4b17fe08100b64383850378ef543339 + +Len = 152 +Msg = 331c8939ef685ae0efcd4030378a8b0ab720c7 +MD = 97874d56296a28f8df280448f76a9e806605da257a6083598f232e4d + +Len = 160 +Msg = 26634d1eb3cc2793830c97f49674bda74743eb8f +MD = 8294b112588dfb9c553ac88fbd8441722cec6a1d435311fe72e0110c + +Len = 168 +Msg = 62ed23ab88c30fe1350f702f3b6d45253a0fc6aec1 +MD = 309db70638771e2eec309abfda219e5f13bac5fa9d5e84e727764bca + +Len = 176 +Msg = 827dbbe36fb2663c95eaf81c7ce441dca66405050ad8 +MD = 39e786a93dc90e96471e466950a5a0f7f142ca69c1251b932e8bbf45 + +Len = 184 +Msg = a2ada61a95cf8fb6f93cbd0aa67b70e286dc853afa51f8 +MD = e821247c7bc7ac8ef07fb31ac25fb48a3fbc50fde399a3cb5889545f + +Len = 192 +Msg = 5633ee7b8870002c01a3c6f68f7812f13adfe0bf6fa794bf +MD = c34b467858b65202fd8c73ffac67cd8ee55118d12beb2b110b63ae43 + +Len = 200 +Msg = da1dd1ebea3cc9474cf255dc23e35695026e86d6093abab251 +MD = e650802f29ad20b900148cf3e9361399e6207d455257fbae3efee50c + +Len = 208 +Msg = 8f71c9344ce6a535d104803d22119f57b5f9477e253817a52afa +MD = 6b3a288bd84137cd7600ccf2d2ab9b797d0e87a18ccb468183396235 + +Len = 216 +Msg = d668a21780594024db025dcb373ef3639bcd5743145527e24da67d +MD = 2b93446d3aa2f1f9ea858e47806cc472f40e33085b7c7a6522cf6548 + +Len = 224 +Msg = 03f8cf98035eac158ff18fd93b44cdb621597255d7c3d97a9e087989 +MD = e1fc5f508deed8bf74883b6fdef8c3e0c86306e7f1d6300cce4d36dc + +Len = 232 +Msg = 2a1f57998360e9216f5040e8f75f5bffba4368eeedede54aa0bb058a43 +MD = bdc91e679fc2f4e40af13f03eca3f61a7ba33ac2c613d948ed7fc0bc + +Len = 240 +Msg = cd5fee5fde5e9aa2884b4f4882cfa7d5571f8fd572c5f9bf77a3d21fda35 +MD = 72b43417b071f4811833027731b0ca28549c0357530fe258ca00533e + +Len = 248 +Msg = a9a73038a28e40feb374819df3a26db846fda284de7e88db01e2348c0ca38c +MD = a5baddceed5b58614c95b8a621d58cd4b12559bd34795ef5be9cd603 + +Len = 256 +Msg = be4850f5be6cb68cdba5948e3b94dbbce82989aa75b97073e55139aac849a894 +MD = c11eedaadc5249cefafc5a9fadf39e812db700bd2767b8de1cdd6099 + +Len = 264 +Msg = ced78bf0734a527f5c07ef6c8adf80ae252b8cff100d393ec1f8c01150721fcecd +MD = d4237aa1956d37a6dcab7b07269f18228f7e3156c3555cf4d3d68c1a + +Len = 272 +Msg = e400bc8994cff23eae189df3b1e7e440a6b5b1786197128105b5dfe2c6fe9d1ef31a +MD = 45351adffefcfb5e39085461f8bff5f5652a5aa5a0401f04d4f56452 + +Len = 280 +Msg = f15284a11c61e129ea0606bd6531f2f1213776e01e253d1def530bed1c3c42b3c68caa +MD = fa425bc732d6033566c073560b2c5fe322aa4fa22aaa3ec51154ffd8 + +Len = 288 +Msg = d858eed942fe926b52bada623fb8d0f18458e4163332e1c18c581f38cedafbba4d908462 +MD = b2b308db948d7169c8eebb4d7a19be96d5c4b5849593ec587d3865e6 + +Len = 296 +Msg = 78b8ad2372632398cf56717df3b141a4f38d5d83029bc1f02d07f52949a39917294141d414 +MD = 71be05862b44e9f57ad9be17f1de185471eabd111c1725e835e09625 + +Len = 304 +Msg = faff894c4a2ed70c4c9d6703b6bc3a3d2b2cba8f04769de350fc0cd01930056eea03fe688da1 +MD = 59f5a8c843b982989a08e6852e34f0c03397c99a87864dfb1bbafe1c + +Len = 312 +Msg = e6065e1eb7cf901c3b08dba4aeca7d4673c3fdbe60391c1b5d4d09202d7dd4ea8b6d25d379e72e +MD = ea8564c988cb67e302bd40df21a5f796a0a116846493c86c3a1d080e + +Len = 320 +Msg = 029d14c5a4a57a649a86c5f2e022e6ee098f29c9d4606548ff2775296038ec0931af0585acb4d9a0 +MD = 716668cba7b1c0ddc1c4b3e6fe3f8917eada62506b6855e5af2b54e5 + +Len = 328 +Msg = e3089c05ce1549c47a97785d82474c73cb096a27c5205de8ed9e3a8c971f7fa0eab741fd2c29879c40 +MD = 75a0fa978c45d268124d8cd9ef0a08ecabbbed53412cfc7cb1c00398 + +Len = 336 +Msg = 901db0f70f2d10626a8af408c5d15196693d49382178ad0de3b1c1d8b3ef3ff8c5a59e9ae286932d0c9a +MD = 1470a4199fe4c7bc330760c1197e79457b1644764e28a62d386a78b4 + +Len = 344 +Msg = 0431a7bfbbec1bb8116a62e1db7e1346862d31ad5110ff1bb9fa169a35dbb43a24e4575604ec8b18e41300 +MD = 1e7590e408c038b794e9820b25d011c262062b96d111dccc46dc6783 + +Len = 352 +Msg = d141753cef2e1b442eb01708f46719cd8653b22e1d9709073d7ccf9242b875d03cf19c2bfc7dcd596f6c6a83 +MD = 0f357b8ca676a86ca63620b2239327accbd4252814a6b8c56895ea58 + +Len = 360 +Msg = ce94e0126b020d68115a5ea41083b4717a13d9c57a5b6d0ae7a3237c19b62dd2fca2f42062b90dfc9edb68e04e +MD = 935d391d626a135772319ec93fd652bd9fd5680107c987872ae67212 + +Len = 368 +Msg = efc2d81b30043bb26c8d2c7a7d5bfe8ee579e463122d56a0e172b63060a83495d88bef7f0b625c9dba78ecb36ad0 +MD = d9214789b7b736a7b28cebff8829a3999ff0c7496095b130c1e2e829 + +Len = 376 +Msg = 5b27d6fe9981d136b52157b839bb5b78d7844df5a397efbe80986435d89889939139892c3c13acf58f56704315b0db +MD = 4c792bb6b1e33a3a042dd4a69ada802e3ec0bd839daa88635b225efb + +Len = 384 +Msg = 4dbe1290524bd73d9db5f21f9d035e183dc285b85ba755057c769777be227c470e3679ea9a7355d889bb8191ea2ea7e2 +MD = 33a5a8d6119bb6dd7b2e72ece8e4d5d02aa99048c0459169ee9e6d04 + +Len = 392 +Msg = bdfa173995a5b99fba74d8e255b711771731a8e1851d7dd693733b9d7567d3bab23229cd7a160cb8399c6c006c21c776b4 +MD = 33c934b5102063213e7b53675c47b19c397fc3a51fb37ab46e179b10 + +Len = 400 +Msg = 9463c563aa1fda894757398e11b04a4b4cee0dce9dab01ad134f449a673cfb388349f42e42728a7977cec90630c1d3803c72 +MD = 4cae18a39a5ca4512b959da06bc9d63d07168084e35aaf03c8ba5d8d + +Len = 408 +Msg = 2ee6e813ec84c2aded5800fc1cae94c09054e25d6bf0c4d10296d1e83e9adfb342a3c6364d016761e241ed4227fe53788cfa27 +MD = 89c6929b3c19a1472a4524e1427823768e46451e48faa7a7db7c8604 + +Len = 416 +Msg = 864833cb2912fa44929287bd0db7984968e5920d49f9725dc48707222d655f7f2b6e7fb40e80564263c7f450c53ef84df67247d7 +MD = 2c102a8349c4e362abd6a258217763229898e27c2e721c73bc880752 + +Len = 424 +Msg = e4dfe69723d430834bdcda7fa138f1fd26f22674be71169d914acfe2b2599014ff11d15c48108374b3f699165e78c7b547b08a6c69 +MD = 52310bacf78ddd40d7e93eb321da4de541a7296f98f0ad9745915887 + +Len = 432 +Msg = 6a3000176d0b029992d921e102eeee94dfb9b029d4019e4af06f517db44d78036a8dce00b90d49dd771994ebbe32c049420d3707e1df +MD = 07de1ed3f8ea774a8e5e080669206c8572edbc3f165870913ab1e4f6 + +Len = 440 +Msg = 55cab876556079eff98bf7b90e318f8ff583c2be55de882c0defe6996d1bc225a51ef7127df2a5cc47f2ca26123f17e72163fc859c3406 +MD = 811fd907f3f74b9f214193048d70eda44f3a7465cdb882173bf79a0a + +Len = 448 +Msg = 5dab016d4feb42ea606123c0ac4c3259cc7177af9cc955a64177b29f6bfc584ad8ae9abb1a673ac1997a8a73dbebd20b03dff2f89851482e +MD = 340b5a71ed65407a686706b068edb92d0ad2a079c1c88bf78ad8a3a0 + +Len = 456 +Msg = 0921afb403afd31e8b0839dcc15ba2c0fc32bcc90fa78ff8ccd51960c78e357d5d4cc2c6f469008583923de75679b24f0bcaa8f0e161df9b32 +MD = dd30882cda2144b31ab179e8f905460168b8758d8be8d8078dd610ab + +Len = 464 +Msg = c0facb87b9283d87fdd02760e4fa437b896b13de28786ba0cb192f9f263e5e75bf664fa7526d3b2073a5fcde752914ec8b6ef1902d1b70c5bd1b +MD = 1e7adf0737572d1aaa5d4c917c94d05dc092d6e59059df659490f1c7 + +Len = 472 +Msg = e0eafe1aed719fd7122a3edc9df7c4bedfbc1b0c3b1be6317c826f9c6b68e01ea2d3b7939b1e74c40cf9948c77b1c33afcb24e37734ad7e9b7af4c +MD = c260130197dc7774313c75843dd820d589a68df59e1aef7cf347f565 + +Len = 480 +Msg = c32ad1f821fbd8b5b7153ea8aa11055ea8fbde548660ecae28a8cb2ba2a6d1599c6e9305fb67abf6bea1b9db2568a88119193349c834a7da90b3ea13 +MD = c91ee4c740a5663b3b19ed778a0516c01a3c0cbd3dfd6c09ef1afdb9 + +Len = 488 +Msg = 2657c625f5ea51f66b1375f479123d863ba0514d208430574c61ba963ad2f191a6b8005aaad37dc02790ebc566228353ffd4342afa9ee81d35f6097e05 +MD = 92f1334f253260e513d5e6f0d1a6af6ed2fbbcdb7fac85c39d6d4040 + +Len = 496 +Msg = 5655c3671fbd8288ea14944af925eaec653408f56233650fc4391018c22f9977facd2facb6c5062b6e3dfc6b8e837b3a78fca153cd5e9e32e91f5e27ac2e +MD = 58d6e83ba02833ba0e23fe3472d28e8f986398620f7464ff18e9f6ea + +Len = 504 +Msg = 350bd6018cbbed86e050b3e7e60683e1f619b73b4c2e764b74eecdbb00f4018d7ce9245da4ede7e6d439afc8bf03eb8964a2a4d93ef3551abbfbfe1ff0ce74 +MD = c8ec854e632b2c132d505affe1bc00ddbe99452e5b59ba76a02dd838 + +Len = 512 +Msg = 4cd27324c28364873c6ddbc3e3a7e2cda9e8a72ad2f72201b262f874b8739f30ab60c34334c2e92f9d48533cd8ad2312c3e7c386aaa283b50dec844fa432d636 +MD = ced6081761ff5259f132aa831b7a1b432d093fc857da0eeeb82be71f + +Len = 520 +Msg = a4f2063fe6ec17550d7aa831091952dc4dc041a283c488187ef9b75e701ab0a25d6ab6e5cf9cc702ccf02cec05a04e37507acbda58cec933938a8b4b75a4425ce4 +MD = af6b7fafcbe9cb25003c5702995fd656365a20e113c8e5b10312cdf0 + +Len = 528 +Msg = c1d30f33ab4b410d0f8a809eb5cb681ec9153bde26693b20d440572cce350aa009fe8108b3a0fcaeb8e376b48b04885f23ab8bb6441cfd4cffb1255a7c88fa10f779 +MD = 408f4fae70d0fd745ae44ed66740bdf1fec0dd4e23db06920c6f8ec5 + +Len = 536 +Msg = 61b34b8aaae2e19e2d61924642351ade2baa6925f7a3a735a72e76b9905b775a004f0f7a24946b2529b3c144a205d9142ac6cdd74a6b0dca9d35a5563107c38a317573 +MD = 19658b285db6cb9dbb4ceabfe671434cf1b85455a8b4da385ead830c + +Len = 544 +Msg = 3413b09d3d12a333680f798c0e488776579d3f6a65f20412ced53c085060a6e1c061ed6a44b97e31c20297479875a1458e0ac08d08e0a8d281e0b2db349e2f831c7ffc05 +MD = 008a3c6ca57853adb1af5d44595e62016b7af47226492b9f3c1a9713 + +Len = 552 +Msg = b6e690d17d9d7f07185502bf6d275c84e3ac4f5f77c3d4b30d8e106603be84410c11849a3c18ea305f3e0b568f06ea540694ac0a306f4cd6048590b895703cb4e4f78578f9 +MD = f51dd594c7dfeccef95e3d4024bb00f931a9e9516958c32d2259f5ca + +Len = 560 +Msg = 13e6b1b4f021d610c81c97f0f952daba2766034d815b5dda4603bcf788ba60ee31541d5b4353b9f6645d96ad99ee90f6524b2963a7b7e476e1e8eeb83cbc0305eb29902a5d72 +MD = 09900c5ae3074fe73e6c4eef51f785e57947bafbe1d8dea38868e3d1 + +Len = 568 +Msg = 3a300f9c2dc3531917222034791824b49436be4dda760f67a21e54211fe77394935fd35cc08c71559fd231a2551672f46324e4081d4e9e725d566b9a788f6504713ec6d46d46fa +MD = d71c18afd448113a45d06ba616a1945a567e26f336cb94a45c2519d7 + +Len = 576 +Msg = 81c64d2313dce3126ba16d3216c0f334910f063b00720be322fdd68285587baef66860ff3c2b971506e46bdd21793911ee1982fe14213d8a7241727558db04dff6abcf0b14adf262 +MD = c85acd75ec4ddef1f179f98fdcf8e006a1d80afc14749310aa97599d + +Len = 584 +Msg = 09645b920bf81735d6b5caa43bb76dfda7497003a6595c2ca62ab7f5fe4928792ec2db426893275f50616eb6016a459c50bbd5a354a381b32667ca5de5376f6bfd61d8bca9c5b44fb7 +MD = 650e31a81dcc7f3498900d205d611b101e89d7243e1dd77551b6c422 + +Len = 592 +Msg = 3fd1d8fb9e7faf18a49a1bdc77fba093cbe09af00d461999e19aeee7cf9106e63955f7a491e1d9a8c9ae57c00a8f0500a8d9f50756c88584961e7af9740d53bf7457d74bc9b4f1afc774 +MD = fb2589e942890fed8f99ecfe02d3a51683a5da582be9dadd25305d33 + +Len = 600 +Msg = 5af0eb316e793fa9ea9d5141fa26cdc3cfcf9852976163a8ac1d81a10b5af5fd096fd06141d3baa0d183ce39c6a4ab21d46ac7c24b38074346098d0a250ed27f3e98f413d0395182382654 +MD = 8f4c6a61321c6e500cf0dc2b7d7d97da9301f71420fac604feae19f2 + +Len = 608 +Msg = b26d3233b551029077beea92859889691ac3853a9f972b2a6e8e55b8db40914f75927f1b892a7b1de8267c7aea0d3c19b3059a6cb5473c8e76d1788f945a750c068b8d02a46cf6e3ea1da2ea +MD = 4d8360f3692defa11eda027f94099b3054b841f809d2aeefc885d2b8 + +Len = 616 +Msg = 6fb0f3856dcc9addbd155916f0227630959f01c764acab99bc80dc435052ff4b1d7921639fd2baec4462caba213c2817e3a5170a09771bd951c30bcc70ba663406ceeaacd114639f21edc20a8c +MD = 71f8e09f911dc8ac67999c10c059c203af4af5e436eed8f8a97a6f2d + +Len = 624 +Msg = 8471e939d4531486c14c259aeec6f3c00dfdd6c050a8baa820db71cc122c4e0c1715ef55f3995a6bf02a4ce5d3cbcd790f72087939b05a9ebc93a905ceccf777a20d36eddfb55e5352afbe8ddf97 +MD = 065cb93bb2406003776440d9a02af1e4170e777c7d2c13a113262ce0 + +Len = 632 +Msg = c87a7448b7189a11e532a4320874186407fb32470d18904cdd512fd265a9968f95225132717fa146654e725ad9268d5f062e0f5108de1a1a340acab3ab1c6b8c2fa1e92e3607871f3da4d4055ffbdc +MD = a39c7c5eacdb22669587a1846c2975b41f9b74833d9979de2d7f11c2 + +Len = 640 +Msg = 26465ea06dbb61b4193a982c984a0358085fd6f14ca027ff60ede9fae9211d301194476691e51fc20ff68ae9ab37c864d528ef4861199816dd34d8e022be72ad299a4a1f200f1d53bdcb7009d327c605 +MD = 21afd5f923bc7bae234f14ffd662f174b4d179c7241ddb57576fe502 + +Len = 648 +Msg = 5dbf5c2711e26fba3423ecbff0d56eb8c934cb6f78ee8e96f6e2a8aad727621dd95096b3bdee1f2d55578e25dfa61e399103eb6b75255ec87714ec48bd3400f6367f35507612c9f1c1eb4f6d65f1a37d4d +MD = ec5a139936f2c42a1f4110e2c52bf7c3cd3bae49955c608fadfa163d + +Len = 656 +Msg = 25be46e3df2595aaaa9be9d21017aa2d64306720488c79b4719ce3eaaf867d4f276352d1e3ab46d18eedfc7978c4f650e106fe0b733ec5a7105dcbb4ceac7ef44005a624f843001a49f72910525dbe40378e +MD = 276a0dbb542fb69ed409a91994625f8469b051be25b5968b3a6fb0e3 + +Len = 664 +Msg = 2bf69b4b50312f07fcd68d466e329cea515af2bc9b78df5eb664ae82de74275aca94594f8e9996f6c0d2be40d9e0c1f1dfc85f534147322b0366efec1a4de92b1a5cd6530e78d69aa7a3b1339ad060c543f5d0 +MD = 45a66110f93ad7873923b97336c23e87642e79c7897d9011ddecf03a + +Len = 672 +Msg = a81a32139d69fbd64000f8d4a6ee10290ccc83e8c9e77b6081a2e59e9c157e33f6fa3137d8caa08d28230169dc6d2b10b4bdf0df29f9ae8fa13e21b7e47e7b92d36eb703589f2ad699ea5b49711214cb20a5b903 +MD = 4143fa448de5ebc14aa204d934ee3971051c4e3074d4caaf0cc62af1 + +Len = 680 +Msg = 471e434b7ef39a0551b2ed9250006353ecd915c82b77649ea1768fe99b3585ae9d7ff7a40f6bb23b33802cde5a1d5c755818cf2f35a6f97e257bc963ba3280eb59eec2faeb42ed47d44eaba8292bc3901d8a35d5bd +MD = a12a51a59f116f87f757f2fde30e11980d7d96ebc959774a734ede74 + +Len = 688 +Msg = 3e346c6aaf8f977620c3ac68fb608aef432d6cab296d1a93da6261949c10c07a19436414fad35793b827f434aff89e1f7557b18e69f2b9318f93e2d29be9b0354b8bf042fa3aef657366e93603f4c455d23ffe98725d +MD = 307467396d59103a897e6a5b16dbaa2a0dc365e22395465a035fd293 + +Len = 696 +Msg = 1ce1f01b46b4c9e04ce4b5e22fbbed4b025427c55848b03df98bbbe7d990f9834ab469de70d9729bf5512f33ffff0a3b5fb88ce60cef73cacf9205e73f2fa5e5f05ba49de85459db52e57462778a8f31e9d50605011009 +MD = 5ba94e26394485eb0a9e3f3d3d9a6083b35daed5f0c889bc78924c35 + +Len = 704 +Msg = d624f63f53be3d6c0a20c12263e4436e462407d72e3d854280d361131c169d9531430e9c556d0c69d57d6ecd4978b6926c0088162b1e6139fc3e8579717b395c0d1d330f56604f4c2b78838058d1152e689b0b8ebb86e47b +MD = 37cdd523d922362ad463216f340f254e76aaaa0b45f6dffca30d55d0 + +Len = 712 +Msg = 7f601132a3833a3e2a33a0f1a058d6a2db06f11e39afec8829974b64ed89ffee9ec98ab070496353371f9cb62a37c23de745056cb8fe98b415885b8c6a2fb8c41a59ca16c3bcc5ffc4ce92cdfc7db9f8d52184b581af62c984 +MD = 10871c0e562e11aa59406eb4bcc832efe4942260ef08cfcf99e7db58 + +Len = 720 +Msg = 12bf3a3337d3b6d553bb8cea92c369b930048ed2902c81f088820324ff244330bb9351317472d5822d8b01dcc413c4c2c72f411c89b77f227539627ba341daa6a9d75a9ab44a8ca9d72c43aaa29eb157f7cedaf419bd48320646 +MD = 6f763886f273aa5f943ececf7b765d83ed1a78b43abef25907226b52 + +Len = 728 +Msg = 424f1d07b708e60cc4d00396cb0e90597f3977aea7904be61f0b74de1f918dd3bf6b0a78bbf91e4674a3dc1438139ce7c3a1a00b060ff7632777a2fdc881f6e98cd9414cd7e1b0b0d6a3709ec009146f5b50375fc1ba62e3648330 +MD = 7742c1511fc5a0297634fb3d928a058626518b7fb88db428e2a282ae + +Len = 736 +Msg = 87e1b9edc7c6576998ca27a41ecf90410327adb96db5e8a12d4eca2c3a6511f05de803ed2d6503cb3e716263964a778160bbf2e8e5406d97b76b444b2f86a7451a7aed4db0f02bf7c6b506254463c5cdd83eabfdec5c831cd6097c72 +MD = 4331fbe48d8a7fd2e69ab0279509131d44eb132427311724e2dc19cc + +Len = 744 +Msg = 8fd0705684ca323c8ace2e7791d407697d05d522357dd23bf64f5501eec905d706fa46d5ff72f8b5c04961f0ee636724bef103b9073bf2c49c9eae2bd8d09c0b7a6c8756b3aa4dc17e6dd8dd3084508350298f76a8ced6449c1abe6dbb +MD = 43ee3b234ea91228c05358fa56bb5072031fa413be371413a257a0da + +Len = 752 +Msg = bdccba55407761a6b90ae88ecea8b95ce13ae66a34066d505184bb58a96c6e327b145fe9f7f9e016a49b4254ff8f9bf365cfc5f13254aa252be7bfbe1934cfecb720faddce5cfdeb9f3ab41481c0ddaacbfc1e4bf4964a14f9ace012ffd9 +MD = 21fa866d8695008099e400210d04a2013701887d7afa98e8324e96de + +Len = 760 +Msg = a8aa236cde557d8d365e6ed356636ee9117f7ae9e6bfb772c9da59fb271cc36724a4efd927cf11c998f47758e852b4e0d246fdd0e1c2d3b733fae39e7c602a9b4dd35ca3971387a06b79f3c303e54e1c06f705680882f52a503d43fddfbc88 +MD = 102fb3632c675224b30ffaa5a322aef3354e1ff0183cdbfd06e5a17f + +Len = 768 +Msg = 44c6c75e377f21fc9cd7c164ca5c4cb82c5538a58dfb323992e6bcf588c61b246053706bf88725a09d0a8adfcdeec0db419cd7732b0e3386bc3f3407e9e016546f4d15c314bfd57e30c302926deb3342cbc315a1e706c5607c127de42a9a739b +MD = b9b62986eebdb35c88b12e0257537a05394ef5a16fad01c2fec57d6f + +Len = 776 +Msg = d3c4a0b17f46cc5653bbd8300dfb0df6d0af3fb7c7639a830bdc9f68c7ab69a09a0235083cc721d465e73481eaed9f0c29d34262a8177217f912fa5ae1865f29b97669c1133ade59a1d2910f537b9b23c080e963c753f7e676dcdafd2a118467f8 +MD = 49e4553a6c26e7a82cf70b15528037cdd658ae33653bf4ce8e86799b + +Len = 784 +Msg = f6e3df95a4526aaf671b1ab9342db3ba0a6043da82b355c4a8d7664e09f29d5c0d9db601872e40e88b3d08f38061d521753b55b5b9b65895a58c3cf0bd0da823f81c7ede5b7a0a82cc4780ce26c5a5bb8960cca4f4eb04aa152d90575f9c97825e68 +MD = 4854cb2a3a9c9e3ec91b4e7d79a753f6e2240f4b6e2050590d6f1647 + +Len = 792 +Msg = c472244bd3325a84d37220e7ca6ecd40e3f20e52677a811ce8987f5bc0963950ba5c06c30e95fb48930ebdc1305e932493ccbf7f266d0f393f8daf9a9850418dfe992fa54d2b405f9b0f6aa7b435e89dc75e8c985e38556b93cb44e881156ca3faf149 +MD = d459400905f4c1eeff90decd9cc994b394b21430379d6328c03af436 + +Len = 800 +Msg = 8ff0520805a336aa768a1a75f2bec3ea876ac2246f2d496087bf3ebc03d88e3f604dc41a9b7cda2da1eb4ecd062c79c5f9041d9a78cc3d14c01631f90894f91c6e36d29632930754228a0ad25529c3251ccd283f368b0e6f43cf3e277b43cc02a0f3a405 +MD = 616fa8495f55e77a308c223afe470b42c0e1a014574aa36d01f484bb + +Len = 808 +Msg = 6a4cef9b8dca0ad7767515c8a61ac32c730b2894b60a106bc5699534a170f11370ff908f2d746a969ecf8fc1861503da1df2cd9cbda14bb9de11c8224440508277ebc30b746a2976a2d64545076c6d4cbc36996f9ee8b9ad47084c5e3d512eb8685ab198ca +MD = d20490eb9633a321a69eb27d42dd619aceee533e850075fd16589bef + +Len = 816 +Msg = 9a4fd44a08d9f5e7731603ac92b18e3d880ff2d5b9d7cee6dbb2b7ff504f2df3b3abcd38b18fc98d1a5a96df3700e46e5f53d32cc581646594de2da53ee452d71078b0aa0b6f5b39ef514bea985d52968dcd51ebd75bac0f0f03fb86bb0b0356db41e469be84 +MD = bf3a90e1e0e8b1a20b08331da3c1996c8395a1e3b835799f879cc7df + +Len = 824 +Msg = afce173b057b48406e163584c8d8c1a93b15804612c2278dca34412b692a2470120e24b0d57806e9cbf4b8a563053f22f76af0b1a39fe35c56a7a5cb29092d69f01911c20f78fa2f90de56b672174c2c434cf59cf184c9eddd6a57be31513a95747548395b840c +MD = 373d08139139af96f22810c8e8443a781c88344b73b9b717a97f4a04 + +Len = 832 +Msg = 5421cbce307d2c89a27a7b0a1d515e6927002bb65d3f0990b8b452f3106a3c52de80b9e6461e9b4555adfc368748ddc48c6d0d914bf94d6d2853b12782e749a380d6012d0eebc60d22d2ea5c4484ca164d06ae706f53f06b759761a94c9de87fc38b6c4d8fcdf40a +MD = 5bc1dcf59342499195a61a0661af7a8e96097660a9f7e576572f3d0b + +Len = 840 +Msg = 5add9071d1d5d1799c0f9223109b761b7b9ee1c30aa20025ea300a2baea1c512f1314b1c3c550e852a4f1ab9c9ff9ac444fc9e0abfe31b3883ef337a5bcab7ef3da3eb5a2d81891a5fd7085c9c581d8fe60c83185fa4f847670b888a053d0de1885cf7926e01491e84 +MD = 0c370410dc8e22ee61c49d7a3bd3d7e80cc4f3f51acb26ae4ec5a3a1 + +Len = 848 +Msg = e965ba8d1236a10b362cd75cacd0175cad0af65e13d9c57a6047b729029d470fd6d3d417ea4a8ec587be96c86f7661cf63bd5e9ee896d8614bac1d40e388e0339606dc189e0aba038d6f35d58f407c10f02bd7e9de328e9f6fa4070ce64c2e7a32e819b7b7dded6c5128 +MD = 175c4a7fa491e7dbe3a2c8604b07bab0e2a2e34b270e16b4392e9716 + +Len = 856 +Msg = 314158336fbf7845251e1a620613ad8c1a5996e512ae25cdd91ec84b6b837faeea4d9074ef7f7c6a1efa3115fdfe815106eed338fa531945792402b9d045703e124d2ccb6a8cd9c7af4d26713958487ff3bba805b2cad899c565ccb5ce79475dd0c9930188ef75a4019d60 +MD = d6cd1901bbeaf4b69a7c211c50546fce3538a8388460ec29ff8166df + +Len = 864 +Msg = 2c2d86197b39c194c65a93bdadc72a9e590fa75fa8ae6b758adf9116abb2bbf0525e121a89d8884b7ea5614a29ecf1a52fcfa7a606fb4a835a7e83d5b0da9c4b4a5787a04a9d22ca1a81b9750a20ccaf3b2a13e5bd81c00ef403042640a3d4dedcbfed9207ae167b6298a526 +MD = 49dae21e7733ce09e392dd980ec3a0c2c54269376e231c19dcf5a774 + +Len = 872 +Msg = bc106b071b53c4d855e1a3dda41db1a7a4460586b448a3fd9fd842747cbf532dd2763e7900f4ef2cdcc4914e9b5a9913f1a7070d78ebe8a156cb20b81ba366b6e81d90b0d60311da9551c03e548fdbb4e15d4b0e1250299363fc82afe05257e8462de814652733c9c8b1b71698 +MD = 3baff8bc1f4351fc62ca40904a002198b5ef6924afba1d1fc61d8ae1 + +Len = 880 +Msg = f627848c4afecd8df33da19c606aff119a3762c61c0539c3e6a8961bcd6a2a111552717f41a62a792aae0a2d4fbbb10d6c68dd314e20def6e5e04aec9b3ef1efe4ab139316f5d1c67c10e2b0a51587de028bc1a0b1e6c1af934da013a4a050448cbad39071f3aabc10e991ee0c81 +MD = 2e0b5455cce69262066fdbf9390ad0dc56138b221b75d51298bb5b2e + +Len = 888 +Msg = 15cb777ef3e451b928dbf288e46a3627044ff5de42add884a9af6b424d6e7399381581a6a743c7a577b02bb5da149ada4e449f48d09e34df4ca8d8f259f4e14c23471475a8f97331289f564ad6e8bd8fd4c5e51d5ecd19dd46dfcb4ea009e385bea857725fd1fc6423f09ccf42af48 +MD = 9fa12561f1df9a2d793292e0f4df5327af529336b5b2118952f5c24e + +Len = 896 +Msg = d24df75a00cf92677bb41a620fae519723937ebfe1f7b430970056505d76db4ff91acf16ff391a7a3d8085b655127a18acd80bfa831837f4644a6850c0273fbed6029449d65bb98a47b2ff1ca6997c50500d0b21a206936a5e4d8d56508ec01832ae4fddce5ef6ff62f1917c486adea6 +MD = 5cae12ea9652269ea2aafc656cb83424746ea1d5d491f9a159594b2a + +Len = 904 +Msg = 730963b1a462d234e8705db9278cc58dcb817bec6c9e62bcad0ad57c6158ec77f35bfb3d043c5c5355c96f2ae810de4e622d26e0b4605346fa630a21a3facd7fd3cb7b5305701622f5cbc9febd992ab83e4abc52c111b8b3de370d9e9eb4a5e5dc00eadaf1278907901c751fee4f303426 +MD = 46c7046aa633fb5bc4d6952f853e39c53e771009183b66961593a3cf + +Len = 912 +Msg = c1460b2e1e385c0b5756e210bffaa8f1cb12ebc3c60e7105c5fd1ce0def2beae95ad2fba97779d46ab4e24d3e5429e9c1c1fbd649f4c577124f300d90162defc9fb2b9522ba652678ed5f623a00c524f98ee8955c8dd8447871e8a236e371056c79cd27e428b2274ea35808a581e6c1126c6 +MD = d8402ee634e18c967d110bd7053a302da650ccb38f259cbee5a24715 + +Len = 920 +Msg = 48a84e3c4850a29e433c8a243bf4beb05b8a5bff38cc418158bfb968f1495cfff22e303e473e139b59cc5d22d561c1c8afb274fd66d09180899fbd777a8907bf72731181c5f0750668b562ccb04e86d95c0f314fd64cb741b6cd16c5887cd84acf613b2c4ad0908675e1e1485321d6896b87d9 +MD = 3748808c1a4d1dc1b82ebab4cffc9d8cf5c251d045dc8affd756dae3 + +Len = 928 +Msg = 41b2b071ee6a8e0bc62e9e03a8705f6da218e69b111c234c0a516520f981204f88bdef9bc3f4d58379c5c8bae59270d78dd62c4e6bb8569f4be0c8cd74899e128ad73ed1b36b96ccf936a597f08a3d4d987707818454c7773c9ce194e1fc1d140fa9a7fb07f75a4e0e283d8210814e3589a47f1c +MD = 8776f08070e38582d4604170a9e658fc17034cbde9e03a002e728131 + +Len = 936 +Msg = 54bf375944c002ccac87f55ff3eb58c45844f62d917ddd03b26b5fdb515d5ca6e8f5c4277a3657ab7addaff4e8f58176bda620c6894e424f5bd30747e13737e1d06ccbc4866ab0bdef80c7b0a5e730d55b9dc8207b70f0010e59914edd0c5d7ed5cd5717b0859569d215447d71eaee49f9d2f825af +MD = 0cd690736dd1f390694f65c3b89e0cc2269f3b8208c806929a8f8cb9 + +Len = 944 +Msg = d924b16dfe2f612d923b25669b45d9117d30a3531d5d30ad477c41734da2677ff19b0a268581b06b518d7c73352ef53990580a83601f5215aa8498241c8f960df19e014715fcc69689b594820aa99a08ede0928f4e1dfe1e69b6b1cb48a292779fd49db8f4c72a17025b727c60df4fe65e6f435f3080 +MD = 304e38689250380e322505b4e23fff35b341e2d94cc62cfb44b51db5 + +Len = 952 +Msg = 7d2d12b351a70306230e7dcc7664ca3883928093395ba8d5828f1f76c8813d82b8bab5ec45efbc24f0316eeb47646d67acf2cb7258c12a38a0622101768be24b32c71a1c936c199600cd33cc14b266d45a053d1e55cef303c462dca123d601e775ba0aec41046285db4b9516e436fda814339d3c376c4d +MD = 40a7947aad6c1e73436d78672038fb99a4ed7cb145445e276643cf38 + +Len = 960 +Msg = 5fee687802a5aac1332917cc5d0a9439ad95c764219bce45e2743094d34413306a7db0c1bfa5059ce25ac9e87293a5ff6b28a1174095dd222afb81f3bf67f6a1c65757304a7a226eedb8341c7f72f44ecf0bce15c1a7e35aa132fe0db7a5ca801c84430dccab6bfffb4b3eb0ad30e7ee814534a3cd5948b5 +MD = d6657f115db759444744a125e40ade361d8a40fd88c91187dc5a50b3 + +Len = 968 +Msg = 696730b7eca27066d541c4150a22e6a6b062c951f2177df6fd4254b14fff43b032ff8a418338972fb8db284f2287b1566ebcfded7292170827ab6b73f16629ad2755eafacff296b4a98d85e27089e40c5cc85b4deb64eca9e1a01fa18d1e5c054f52980a5736349caf3f21f57c90496f816f2a96e4f5c48235 +MD = 391d6c2b645d1eaa7a7dd68140fbb7c23dd4ac0347887a782e4c3442 + +Len = 976 +Msg = c8995ce09a8d80b790789915b77e53cb2ba0b3974327f0a509468555edfb843fba362d75c83dbf07744f8ecdcd8756609004cf6a574781200ddcda0ca53d7e100bf3dea85bfe0c6f5277cee50274f16fc92cdf9f835c74b6ffe90e67b0c6e3dea5189801bb980ff6123980e5bd0ccbffbe600cbf312d706fc7b3 +MD = 3a6ad16c5957b54ee6691d227b2d2ecf9348b68435a50647a2cd55c9 + +Len = 984 +Msg = 247f8754b008acea234d3b5cab5c613a695af8febdbcf3e4c5bbfdfb20015d7cf8a91d5b3f666b1d38023fe93a0b3ee1b1c9dfb36572cc6affa18b8bc9055d5db5566688a18e0fe1d955a985ddbd5325652f1da0a3a66dd7c81aa2bdc940f8ad6370ab015de660e00d2ec0571dda66ab8f76fbeeffbe9fd1280e8b +MD = fe66026c1c2410927fa442cc122d5aed90308273401d429fd1ac8f61 + +Len = 992 +Msg = 93dbada71b890e80d9b88a338a7df020a7bf9ffd9898536225fd3e8a2da25b589a18ff989438b188f5c53b96fd4d016c4850922afca57df2471866aa095858fdcd115da3fe554ce35840e3569cdc15ed8842a5350602f4daa4c5186b44312d5c140df051c1a68a9ae871a9f9cef1d5ac50db02a71d796122224c7c53 +MD = f73154e76b5998e0792fb0ab1d721ee730b64a1b3a543061fc76cd17 + +Len = 1000 +Msg = 6178736ea6aff4b99e7da97dee000adf72b37069df8ad5bba63fdb7e1be6109ad6c871a9596e2dabf4fcabfbe6c1cd82c50b772a20404b95622ab710f99332c2b812c2297a24c2c8097ee2193ea26fc969b1d524f28062cf41ed4cb5dc74f643cffd6fd851f83b77a4ac57c03dcc771e254c92419f72a0cf0b30a3560a +MD = 33a7425316d2f6be1bdbb870d953132d55e29fdf8530463977940908 + +Len = 1008 +Msg = 1c21b5842312111a9e2782fe97917e946b8d65987c43c91b27ed0cc8f63b316c16f6ecb60be5fb3ba2edb9bc277bf1acd927f0ed9b91dedbec8f4e8b198b1354b126558f3a21e59c227ece26f9e22da7dd3e422e35aec660a2a27fbc323b1324d7f81a99189176470723e7c1738eda8d5e1b82e3b1632ab22f6ccae4a814 +MD = db43ca3dd7bca3d899648692e4ed8f03119628df313e1573723c58e9 + +Len = 1016 +Msg = 4b9895235cb4956aefffe815415252e7d6b21921bd7f675315eff071d0bbd429b718c774aee96f6c3a330d5d40d1601e1069c7a2a19ea5ca1e87097da2608ffb4180816e478b42c3c4e9edb748773935eb7ca0df90dec0eb6b960130c1617880efb80b39ae03d617950ace4ce0aca4d36fd3ed0112a77f5d03021eb1b42458 +MD = 9a9176e97aec99ab07f468f6a226876710d6d877021d27061d4d0132 + +Len = 1024 +Msg = 9e127870be2431bcb4f4eb4efd5c2a6c5870c55e7a5e3b7503994a4cb136be4ed396887801450f600b22cb772fc00f8b8f0d2690e231a29f69b9f13f24f531e4479e45b5e8bc2992fac782567e0d7a59f853ca3a20bf18dbdbf684ac69817e2de075daaed9532659692d3b73530a12df7b8cd9e49ed0463041962c1ce7a24c31 +MD = 7e2cf6226623535784c59cd6a7b27dac60ee23fdce8a804dbd6dfedd + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_256LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256LongMsg.rsp new file mode 100644 index 000000000000..f1127e285725 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256LongMsg.rsp @@ -0,0 +1,519 @@ +# CAVS 21.1 +# "SHA-512/256 LongMsg" information for "sha_values" +# SHA-512/256 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:34:21 2017 + +[L = 32] + +Len = 1816 +Msg = 97e003903bb971a523ce0c82bda5d6733c76b90deb307559c1bddd35368743f6563b315214cd5a7ee0bccf937c9776360bc0b9786b707bfbc4fb50576155edbbbfd5ddd8e43a76faf2ec0c78fc84644f188d6b0ab68c28e5303ff031a223d9fafb3871e85408af6381e629fae67488068c68398a758f665e2c12258d9ff8effb31ec534b0c40ebffb43390e1e26fcaa28fd68ac24f7e1cafe0fa573103dc17058a77edc9b3ea1418b45aa7f5977e126d4861c778ed6332217581eee674d739622e63a529f10c11f4a9e3d8feaea848ade0905675f6458ffa132f52749af23d584438e5 +MD = 00ce3b592d4e1a65f780df351fa7b2c01b49df4ea913c3fab24297f5791b18e5 + +Len = 2608 +Msg = 773e1098b725ab1a7465c67892a384147bf0c32714eeab05f13487a3c5f4d4561cdb98dd4c39f6a2a862fe3df854ca3a269ac61c3a704fa18827804828cb4811a704c084fc3abcf4befca10594a3766cec323df6f08183ccb59b36f5b664b71c827f3094b16e28991cfb54d94ed7b0333582cfbe1d6a6f0de05751b15606480013148f15521f5f182c27c1c00e3aa2156950257bab743dec6f247a85f0fb2344c48d8610c7938cf9554890c2bc12719cf065e63581e412f1cbca59776d897170fcb1bc8bf812d5c5fe2569e740a848503389bbf4870519a55c119592b3f95a0d2247da91cde662039187f23882444db898834cc1a51e778f8ac1d6dbab9305a2a01887272e565c3b7536d6bc6a2ea85c881d40a3c3765738bea1c65c3d9e9bb7ddec6c5703a9ebf612fabb7be1ad82c46c1d40a3c956df265e7a0b1c526443d4418a30283428 +MD = f3e524f645881c45318030624baf254fc6b3389d7bb7a22aa55ef528c2fd3cf0 + +Len = 3400 +Msg = 2c2d86197b39c194c65a93bdadc72a9e590fa75fa8ae6b758adf9116abb2bbf0525e121a89d8884b7ea5614a29ecf1a52fcfa7a606fb4a835a7e83d5b0da9c4b4a5787a04a9d22ca1a81b9750a20ccaf3b2a13e5bd81c00ef403042640a3d4dedcbfed9207ae167b6298a5269a8a442446c9f5041367547e1e151cf1a138ed10d23f4dd70833ecc5208f2c451f53e06d185454ea51d68f3ba15cd41e1cbf6f48f37eae5995552d0f1a1156bae2a229f079723981bef5f7ad45823395f961e0f0062518fff63b60c319c42c6d2ba0a61631cbabb0a4ed163dd12c423f8045ca6fd4db93b1720f0d48e550b5464274df470708b25f49e574510f040802f994b42d2549285752f6bc06465efa2e6e485cecc5d15676f6069753c5b28dc7ab752792c016dedadf1af6650496010bf841a66b31cda0def37809a9bcded977df11aa066febbe205ea342cde69fd4c72889442e14a5977d886252bdbc2ff5f8dd8fc5f1f870ce121ab929a6b6227b484648be9b3501443cfdecf8f58d4de834ed1800bb244c18985a8232583ac6fc789aa59d1c5e87ad03994085bbf6e1ba1157d4e4ccbb28a49b6529e54b3b +MD = 03e58e78284c485bb6b54b36c0e12695b30bceced7bcf3ed6c435caf09875202 + +Len = 4192 +Msg = 4389f52995e81550cc7ee17fc546bba08e9ed338704248f32d7b9084869419ab008e3097e815236f95b2a22ced416ba92ba627fddfbc8e08358ed24c7bca3bfede720e5d74d5b44380be18faf1eb51502bc081ee0a3dfde5242eae8a4fa1b784649d5723421111f4150b0b92d82ab5be1856aab2fbaedbb382c2eae60b03d4641a78d39058b283a9dc01439baae8de1b79cf6bf2baf87199d5b44f07b6d7dbc788694a4dc09e508a5e0887be6f0c158ed7938a564d0107c0a76ba596580514d437d9830282bfc0c02289a1a3307ea23fb90acf85beb3e5507f4fb43afa74c7b4ae314756a4fb1d73b0ea57f1f526cd57a79c042815f55270e6c8439ca20e3c8e75d75ef1303cadca91957250c4ecdefe29b1efe658ae9848633e1c635bbabb8b1535907c2d69baee4cf0ba6aa7b81c5bc8b15a6891c8fd017e1905382a608bd315b1a59fa46a8a076965f6e4a572d0970b040b56c72acac3bfc1c7c319e9f58dfdb564019c27653c715bf069c60242d97b12ca5703bc46b5af9f2aab2f3b41e256a8964b1d8795b5eb3a6e9f1350ba4a9e4361134c66bb00d519f599743fb7f9a6f203243075619b5f69392e93448012ff009633aa106fcbb998f234f1dd9efb78fb7335dbd61016555219bf4fc7db5823af335f25a2ab3fe485e725adfe400f512aae262893eb4d565cd5fa4dbf154494bafe3ec604b784dd469d13b088e35ebbe97b9e1f943a69e9ef3786 +MD = 1a120db1b48a4035395b5f52e52decb1cc9c0c508b411455a9e33446f4d8a87c + +Len = 4984 +Msg = e4d16c654f7edbf7372ed6297b135462f96051ffa70a7e3ce0cb3758fb6db5f4224585bd61fe384afe985d4709afacd433018428e42b987a87b3e521294be7fa42540c0ad2a26964b07fab4d1ff2519fa341196b13b4b8e2ee9cce76f294193ceb07e995caf2d40df6ebaa83e763ac8bf028f8105c2d483ebd8edc9e81cfb583c66504a67077e20d78e54131868a235fc3be0a5fe81faf549c92f6e3fc8422977b764584ecb8fb2bdd74589e27ef1fe5c30c359fdf1255ec31ae048b8c3cc840b1429579673d8830cea1d813f01b09e39919621a698ca2d027ecefdf587d0f4610d2dacb098fefe5f273a7d809954722eced7a16ac17fec724549d2789d25f70422dfec3f9359a0ff2f2ae359be5436a659163dcd33ad198d0edf7ab46c02087ec5be7a960b7ef797526d572ce946382ac0c07b4047e830cd5bfe5b2b8d1ba54b9657fc5659e58ea241805d6c929113468664ce567697cebd8d25086068c959c4e52ac5e31713c29a7cf24aab52cb44641a81cb9268524fd842f1e6d5979192a562a58beebb803ffa5531b36b925b381e1d95e76665ae4097edd39b0d921afc577f56a2bbcfc1434c6add3c2fe9d78aded01fa65526e22d971e48797ad0bbd3459bccaeeccc3d990b3e43396ac1c6a921028d7ce0f4c4733034df269febfad40a587604f4298b9db140022faea28f1f7f057dff9c879bce0dc1f6170f3c6e5b1035c149546001cdc900a8a35e04b75a63596f92da37ee8a8a562bbf2b5a7cf4f1a45ce0a02856a5cd0095290b70c5e6588eb0db4c8e43252061eea386bead1e1934976f49bae0c237c05625397f315fd916004d4603304a8a65cd58a3e1855311570f49c3c0368f93b06a2c6a78900 +MD = 0b09d2283b77d04185ea0d0cfde64f56e8d5e659e8c7dafdafaf1bcfa5565941 + +Len = 5776 +Msg = 9e8a61b90a3ca711bf2031131b2cec8909afb95b26e5b8bd22c8c6a7682a448501011b31b502fc1e7471edd6f53701a69d356697a2d8a5a170ed261c4cb7f377373fbd2c15ec24f30e53333735502ac6675681cc7603290287f81523b9e7f9a008ed52947023a6fa55700d1e22a1f05131bb11e1eb8fcb4830909ca4f9e2e0673bb3df500fce0a9a116d8273054fdaafc10b1ebe47a414db315dc18752cf2f369a386e483a16d93a09f59a1e26857148dfefb14bd2698b2452098eb40dd66f74eb25066439239a4406ae5e07cd693b85550fd070d607b8895d390b1371212788f721b08c531cd51fd040d5164223c2ccea12861599a6237318973f8dc8d5dfdc86d573a8d12913332f540834ccdc8e8665a1d822646c554b4dcb3208581d20d760e957a0fb74dae8eb92fd47b5bc251c8f63d07f7f84d577c27dec6d6b1f70e14c04645c1922b5a6cba1be3843ea11f43001751432142b61405476a547035a6213cea3c4735e29d5982a53f0bf8fda781022cfc9c545e06f8ef8d79734f263c27df11bc1514ec0dd1ad4c25671d2060ff66fe7877f3e7b0b7612172a7c14156a5212d439fa1a012619481551a0dc1f20ab8fc434aa28849cbe4a3f486690f7c05adcd716b7eb74185d2d54cb95d4ad15f82b6eba8c2a838a2f4755d8398e912d5df42b3ed0e9a21cad2c85ab99e33655a3ebeeff6d6d013c91b264c13e386c1a2205d89b8d3b1298d3edb2d9f231444874764bed9718861cac3271edbdb40fed72b5e713350a4cf69517e23ce8e55e5635758d6b5154989147708643fd2a021015ac5f90127dd99cbc521ebec5280de7ac8fbd60e249c1032c13aaab48c3cee9d39348f96abd40f410486d46cf21d763a26de2b6931e88da21c4e60de4a6fae27412ab3686f10964589ed7bd50f94732e0b70454acfc757fef2b41511afd0e61bfd08f2eae42bd565eff64098ed7e2bc2b142b22750a11585eefc36032ed93d07d76fccb2ad8e331e8111d13d2e4326a4e2c +MD = 5afa61d7a761d52361447d1c72dd0c1f64700895850ba03f6a109f7077bdb6f7 + +Len = 6568 +Msg = f59f72b04357a25dc95d070780550a84bad9257463b6491886597d681284c95fdf46529aec29c621ebadfa85fff5d22bc4c162e7909c52ccf857874396b5ff5b0a68fd603f3c67aff0936cc86a1169a593980e4b2b77bd9e52de32794a9669fe7feebc2bc4f94daee0f6a3fb4910989b2f4872c7bcaf50359bd8c832b78dcef145c1d72304c63fc7c3c0e844255a25b5a1b7d684ccacd43adb2c8f956303f5dc64c7966f860c06a2a2d883cb8457d89af0cf81a9e2d510541ac2d0cbd861a765e5ea4138d2346ae68426bcb9f16f7bf32476bd5f8794ce2c6182d2fb9e0dac37cf111fa571a4333c7292db36f10ad4674696d0ce4250d46ab754df4e3b71ccf82a2479dfeac6294b730427690e90ad9f5c16031d9b72ebb525203dec39f3cf51fe0a970dc50114bc8f64e97bcf69cc4271de9e751a60dbb5b2ce35fc20fd7ce954adc1588bbcbb36ce9a6a94bcfdf9f98ad6e9fd48836c1366460fa776f69c6933f43fe8c361e762398eefda5eb4fe6cb1e62cdeac43667749701314c546f778a4c758e4f55760e7d729c3783cf7a242edf6ae3fcf0990886434896c945455bfae0e5674aa06ee6fb1512d94df2cac2447eeb849373bb3efbe7bb8d66c8a7ee559b17fc268d6599fcdef7457cdbde5b9c5b692236e4397545f2be97bd44f3993ad991cf3ba2f682135ece1e8901015aa723684f7fc87045d502e6482540b5071b3ac74322579e59df12ebc6fb08f049e5357d6ea6771c2b5986a71147427892672d3d1a5331c96ba079f4d16b3a0793e72ffcf26396798023fc95859bd09ad5bf2f779746b8043218126db0323ad3d32d617b8d3f9d350ed4e326078b61a84b73cfeb5c8550db67a66aab05e871d19218788d918301cb01dcc8cd29ae8c2d5e357d2cdc97a2cb66cbf1512506858d2b38e387a1e65aa813bc1c1f6e6d96a6a864b59099e61430a9f934e4a014dc63391f211e30d20e58aee36b8148513780949217db17093bc7bbcea3d9f98becf0363bbfa5c0cea3595df3159749e1e567bd4e0240c6696fdd16bcdca5b3d43db09d0f1da2c43490268b5bd8c5e5a806a87ce903863a9f470d45342ddc41a65520e819d9b9cdbc7b4cd19df3919e1c31ef7e03aa0fe60347b4b1d545e2454ab9cda1ec724f4fcec +MD = cfe3e7342a46e09b280abed653b494cbf6dd14633b0d8518281f031900e88af5 + +Len = 7360 +Msg = 60274d5fca105b173f22145f4e7fa2079b0ae8ba327270271a6ca55f2e3f437e28860b8eff31bba873ce3d5ce5071f546d6b43332771d8c3cdb988508b96f34f0eca5d44df90a3e2efe0747373eebd7af1f465979b313bacdd312d3e3250ba1e3b7aaa481234fc0bdce0206a9d3c66c3512db7ae38bb8328715cfaf1ca757f32d71e59634126ac6c6156a80a0dfa0175b29e9f40a3169680b1c15830fc0e2ad4093ed45d146c9d4da7cb761b6b3076d93fd08614874a5efcc6e8b0c47021a24cf96382fe3210b5f6d5c7f1655ee4ad371d4ad5f38a60c1e3d8596876cdb9d1e2d014cb0d4419deae14d081af8f208dd77794f2a5545fa97f0e9dea0cbbdb9edeb6da1754f190ffbe8c708ec3a6eb0000733747f28e4ffd16913b9c4ee491f187d23cce99e27c006e642e80674a4eeefb39ba3aa2e038a5f189bbe806ede2b2264dc258a5bee5c806c592c064234f3d11f2a5357cf12388581da635fa81d7c9034ef41e402ed441ced625b482daf9d687c6819f496a1790927582eaf346761f66fe5b8631da4f520ec06ec5881751a1a8dcd4e0d1f21da4e9bada71b9e4c99a97857ef9426961e30daaf65b40816186bb5d2960dc323caca31433311404d823dd0ae5e039840fdd14bd43df70c1306e0770058632d27c9109aa1792cc4ea9a382b519a1dfd263266b20dfb7e17fc63fd53ef2bc9a79e53963a50dfca8694700ccafa1a6fcfc64a75afc524d5b622ce36def776adecf808df92c9ed772feb7240420055558a91a4829792208a612694017aa1df6c47e54751268508bf0b402f57130ce18ba828ef21fbed94f893885401b976ac9152b69daf881ae80eb34315d5d058356ec2ec78b85f4fe8ccd7c89cac0dfe84b9880c8a2f19e3d1f2a254c430ecaac76b456cdfca3421a263a857cc550aa1fe4172578b746e787ce7730598ecda5d2e2dba2a92ec1d1b48598fc661b111f96fd58c281ff3f8513f698fd6228e2be7c0129b9620827c95411af884fb34c67d5fc25feec6423a0690056336ef8953e323b654400711d51833247d2407548a9644b4481c0cd3c5f1252797a86e62e4d7cf859ea8c53ea91c750278140494f0ecc507df40521d0eb9556c97cb1daf412e3a0cb540d95d7b2abd3183e5817a7be94759affc44a286c7a730edef7bc30b6ee9b842a8b1f2cdcb423e2b18fc799e044216149042f8c094a100f4b60742b6026524c130fd931366ca84d81ed416d9d64bb9c7bcdb843ea8c979569f5eb2a39112beab79fab2de95aca21577a6d6b1c7dad113c27cd97 +MD = d5ad083a3001f7e6696cfc058644077c4c3d5c39068d0649fee21cfe7629b47c + +Len = 8152 +Msg = 8a9fb0bd4a34b4adc238a90a3a5ecb2c7dd8d1ff990fcf55e0985b813263ef217f368e3b875aaa8ce495461c4b5858160f3871d7e6a29f45f0cb9362f5e7ff21ef9b4278c8b447b66419aa17e2fe1d951f5b0b027c9d7b54e29b364003cb2c0ae2b6149b95a953d449ae1f2288bae452b728e6a7e366292abdef8e42e2793e84606f4bcc76a1958d9c3beb65c3f373f5de874cefa167717089aee1911c57fd3972ae3135f404d68a64a757091e1293259d60830240071dce4ec2785439cf30ce1f5b0cfb963bde72a9dcab361e7d0c8afb9bd40748adf3eb15129bb4bf48a1ee705e2549e5ac75ee74c12f134d9da6cd002187263fc3bd70e58691d9382a163f6b9fc44568c063a6cc3e2bc932da2996b4d8e489afb04104c706a4ea2bdc58691a073117a7df6f41b93be67f559d5c8c20a933551fdc4850c27a1a0f21c82f15857cb3e82a72636843a0a95e3f4c08584b7cbbb518af99fcdeca3c72a15562ebb3e793e07adf05c27355bc8e7751f5a23d3ac5cf2191feaf23df523833ebbb92ac311a261e901ef8504367368512eb11ffc999cbc2ea3d119a9fa48c5ff200b378408de39eeb75b1e250f27ff2f9b24d98137fd283221fcb4af37994aed2faf520fe373e835ad4963265a490456c11ff10ffbf0ceda16c853cc31b78a7f47101ab525f605344014e476bc69206d5d2cf7074a0a087cfece676f8d061d3be2d7e21234c709911c5822a48a0acbe9bbb64bf5c6bb6d91566970278e177b899f5158a5b4797da28e8dae1e67a07f4269567059e69786cd9a440e82d96e1e0ee926eefe198fda0f332fd762b9cca30de277f4a22df0cc7846c882efe36c8d323cd30579d87c972d96b94f0014d1efa2b3b5597d0189a737f8717ded20b5317a26c03cb775c24d9425a46584fd72bdb759790f3905b4bf631bd96ff935bab36d1379152575e355c96c8bcb5fd80185a2404d9674aef46da01d5ad9a286ff7b81af87ff425d625833e7d9e0ff2910e00a04ad8fae61db4a6599903b6798f6023e47578b9c90c1bd6a041936f18513453513134b44c2dbde3a0cf415b6e020e01967722aa2b4840de25dc43dc560ab3dda081969d646788183d400e91ef1228d99ac625ce34d2bb223515575e9402b226f301a5be17123ecd9ab41361e405d634572a2a2ecaf1b52a39b577fdba835ab4b37a0a1e4b78068b1ef3f8d235244299356bd9d0d6ef567f97854ac2b1d3d21149b56cc5e9df09d831c464edcab791909c50d9be4112c5a8b94a79b45f3a43c51b7774bcda906f3f3bf0ffb98b06eea1f4a3d300f1a32b2d05cfabdbad02d556938bca0a04d35f45a440723e61587f55a52a6e9cd0e9af97e5db89408371af4e18b815b751f00174d579658432f76c3317ae539cc52e7a6dc035bbeacad1fa3511c5fdcca82e7e5334667f94e829 +MD = 8a2fe6d2218fa8265dd3a05055fcbad32702163a0d3b4f599030dfef2aaa4094 + +Len = 8944 +Msg = 924cbb4800ef4b69698f1f15330677174c9e452dca25edbccf4449c1b00cf00b56d2b8a8e43d799d999d14daf97eb46c277e54f5965b8259e05062bbf6a2f5a87a769b9169e5d77ffd525302d2fb246a47cf4e3a27808bda89d8488cf450f1a1c7df6eedd810ee785c57e37607a54d7a743a3ce6c6bb90a69084041ef23f6b6005b539a379e544f17d53cc1fdfa3b902756625e0bb341a25bdfb9d573896eb4cfca2029b948d635029ef17e4a41ef06c13fd11104e14b0bfdae61b210d7ef9cd734cd3bd712fd3fe28d3cbac9c3d781e16a4095ec783dbdcadec8763bb1f1e4b345bb3f158f41a6442a6f0611129db82460513b26da822e400b6e80588a0e12e0578ab1f9004c2e93f118fea4909a1fe6ac83af489ac0d3f99eb46eebd2acbdfaf4bc12f628653f4e6bbae2f8d0650fc4c95830c63b624554034a908a1e463c4fa7bff0916a253ef004d5818244872e3b212f8e243eff08fbf391a3a7ef73146adb16d95f4824c41556e928d58f68e1b65eaa05f717ff853dda1a06c9a8abdcd929412bc434bc552adc766766f392d0c2dc38369348dc40a611544863fc690c26fcdf6644d28478ad0ffdbbbb238d61ed146aae9d641dd1d143c0d71b3d3318b0d032176583f595186bff944691c11b91b1a1cc89dc4caf2bebf03133ed8289234df9cdbadb8830f96afc9f9dc0c6645d1e7e1ecd23e13f327452e552afdfe3eab086e7994bc4d2cc97652c352315e2abc57023fbcd641871677971fbd6c3af63c279f3a54734010e7bd9d8815b280d0a41086a8a5b5db1554fd455a414a6424ade438053704e323b82bb0326bb8559f51ba750ed3036907aa7e40ecfcc2042fc7e63fc18397bece036995a79d6b64008afed85b8fe774c4dda291bf37f9a37f52d6bf5881565a77921e54d1f2f235591884b676218983b4b8123fba391ac87c165bbdb179673e882bf3f396b4765013c4f31747d1121e3f027652c44c4bfc8edb1e43b4b3f2f26797907ce0291e3e9754f303b6e7aacdcd8275d3c7b6b4c61d68c758497620ff7e9e9cf6969b13864c902e83abaa7819c601b8c9aac07fae9186fd05580c18ec3307c06aa0507cb09942499e0e63a5899247e73c55b2d13c52fd6851c9bb0341f09ca3dfe6918244e830ef5dc75b58a6991ca934afd4d5f9c895b14484cc09871c23ee5d4fa54dcba023c6c6bed7baf64448a6baa26db06c5b1580e6728751451e6548edc5d604cd28e376e4dc22f303f99287d516c78d1e74477c4079330403602a5a95306ad0d0ea38a8bc07832a5521c4f48ef128929579f14e598219494a4939cb5f76aad85e4dea04582841887225a494ec1cd9e75bd4dc9e39768249a0415c445380de45feb9c031bf28a534e46bfb10f77f22b5f8ebd013e93bb42c90b0596d78364e3e399684d8f9edf756335d900fb7024a24f228955570bbf8199ffef9edd68041ec954dfca00f617f18e5622d3a358e9b5bd3f2f20dd6dc95385794046d754701769c44f132086b84a084e1983978095b8322b0b0e32488d5b23fd842945e71d405d6e42a35ecf2501698449ab3885dd3c3 +MD = ac8591b088ccf0dfa32f33d0ec4b123d0bab77383f4e5c0a884a14ab8159a260 + +Len = 9736 +Msg = bf633f7eb8d8ff2a390d7d9485c2cc9cd3ea64e4095d0d27c7cdffcda7fb47bcc32a6c7078d4534e6a9d6035c885de57d261a147988ce95204da8a131acd4a427f0c8bcd38102a2ab521a6eb0e8185938ce7f3a86b2ead09de4f1d82548dc69efaefe3bc81f34b65218198ddde1e88f80a62a42f0bac1ff35e140042dca184773cbdbd66dae580a8b6a57e34c0c4b12f53bcfa06ff6c08b98b117b7a3a7349764e5c61f3cb4e8f9b7d75a0173cdbc6e06fdb3e52cfd82f036e2fd652f769e04337b6178adc9741e57dda45afdbcb90b367a9b73e04575e780d5458f39aed1085ffb1275396265e2fbfbab72424fcd74e420cafef25505bc072694a85ab66a0e4af37d8778064ae2049ff3c9da0d7635c08ee6c90ba2def84a557f42fb33c590a4e2f741e23b9f861258f1d42d5c2fb83c13637474b55e26cac049e1a39d6039ce480416f058e06995b54a23c4d26696b76cc583c6130fc1f915a906ec59e66457a148893b0499e71f13412b3906c73bd2f981799832605465c401152dffb49ab16d290b2ac548991f119b7ce24fae221f281bc833a9fc488139d6bee10557576c3a2a3f27f158fa062ead7b6933a7d3ec9728e240d03028ec05be46bdf15b34f866c077eb3f677474d8fbb9365920ebdbb50d6a484ba87ff6a61c5f1d5a1c9de6918057cd05d0b2db9efab8c206c5b45d004dd2b272c1b841a9756a778627fca738fe5155cb411fbaef4eec94e2f2e7f1176e8e07fc286c5d7e5deb653c09fbbacb7ef70e16252583585ce7376434d13858e42eb13e28f69a933a746eb24ef5b1d796bb6e6cf96ed548a91b2211080a8353532756bf500199869f77ecaf4394fcdbea00ef463a56115ec80add6fe91e62751ffa610649f7cad6f1786779a4342c46cd7a19286465d8091e38d1d75467765cbf2a58996353bef2d4f877a7cd6da0b6c589648a043899c6202797edd6900f78c539b5ef289fd678ce6a95c04b9bfa9a76b169e19628c7147249a829ec02ce37b6aaf18e2656b1b722613a498b69aa60458491d596c0f07299318b02014a0337f7e0a3ecc8f2c15c855eedaa293130b6a66564cc828b967ee951a91cb2c07ef82d8d3581ad0e95d77bc61868919d1dfc3de66b3cf6033988073c8ab08d2071d6bc133ef33f04af966a39531b5107d2af608a0dbd4da24a2c5754b893dcc48c7227f528a7fb7f6f37c51b1628e40bef5eb2c2d4b415f358ea7e2cbb0d4e373f48e5a57b166ed9653a310dea27c703d478a92348b7cb70e630d046faa33df30ad999c6aec5059d11fc2264478e76aa228bb82de24efaa5629de2160fdc48826f92a8bb5c4a5c45061c0dc0a6c37f494a06643539d0000b5e80482c634eda6fee02a715dc0cdf6bb20877a5906d4d7bbb8731eba7e1980d5a9666fc8d41800606a7f948d6931b7b965fe4858cf26dbc077ca5b3b50a1f45b73ec2f8e67ac5ff2a0123d6b4537cff2370d8e304e96c74be65342009a0022f24f7e0c4175118b5f89cbb31fde48050f9e9c93080b8a65030bf71a2ee49dd24044044c0984ae4c4d2d9240d2bccd22b8a293a0098f6b7b91f09c2df0b7e2ceed5a66380d1eed6a6595502aac652cef944cdafd5a61a2d29c9d2bc16c9936dda2998c1876ca35ac4ec8ebbad463cf314ca35af2250a9532cd188d1fca1501c6070a5f346b11efdbb0ce4d38733e1cb387aff9c78f10ae62cc6b +MD = e938487666dfa22ccf527d3cb4f21896da269e17448d5a20cd9554cd3fbd2170 + +Len = 10528 +Msg = 4c151f02cacca89e871a6b8b5d04ad0b54ff5a6468a9ee358cb79509ee2e912d7dd7ddbfa9ec10086918830c839fb65e08d8f0391de426cd019a1ed74cc1d57475821d37971c8a7975da8ff0bb43e58487902c5d2763d54125b53f1d801020e13dff27911ec4e099b248d7628e580022d90d56f80e8cc338fdf0400413853d1cdc3743f6c64ad812284ba3888246d0e30739b63158c9b75b933468b38c87f2cc5a11b98e16173b89dfc93a8a21751d6c17fb94318f817b52ee670152737d0999c074d0809693d0a9e0abe591f34daf68143a37203a1bd5c41673510b51d1482d154ad1f5ce26611732daecc57f374d7d03e0e825e2018e59143ea104adea782d617a04144739b47edd3d974d4d99c153eed4ef680e9a6ebaefb238650f306144acecb10688329384eabb2d51e5dcd193dcfe9412464e3c8fafb66057ff0bca18ff8820f2197bc4d1603ef8fbd06946e5d6461f4b1385c27f5d315f0206e37c5161369901837a0f0e47ad3e7195a7e7f0e394d73afba7c633ff0d7e8dab204098dbde635b4d993ee3a7ef48dbbcfd7e5d0bd00508881c1153a0310520772adc957468c727ff3f17f789ee5e62cdd5d1d356e2f1dc424d6b8645853ce5f16a18ef34bc0d8e22d364f3f491c82e5196aafbcdb2e3dfb0a09b74f8f16a01a146be4e23c27db73dbfeb7ef1c0cd66d0a7cf7d772923395a7e6bc6c05dd99f0f27945c4a635ecad86a75418763b632d07208005d2df811c850a124a6b1cfe5c47664beb085faf17b3cc9e4be63cbbbdb5e1f2c85a7ac8f837c0635b0d595fb4799f41f5d119752af9db10e9ea6542978d3daabf98085dd126c62a2e8b1730a20fa0c255af07e15fbf5f367301599a430390322c19ecc20fd867d12562eb03ad8ff7678ae08f763e8ac58987b98e25389f9603ce3ebc883cd341e2e013296b2f612f9c161434964fd2aa8498718765e0d79ba9f694ec32b09dd0f9ef1a66b9b029a5ca87c88be3fc2d8ab215d7b9eee4422d8f35aae034339e816092e73781c84ff68d406be9c1dbf1c28c904aba22bb55c84e1bff5d1f1e5bffc18c17f055e05a8e5ee07cf2c257d5fe9e9848eca3ce89084109f0a755d96c98872b1b45a890dff9b9d88a2b680830ab428e60e5d496524a12a02d537b1d36e84bf06f9bec4226b518a8f1f82555983522e3112a57cb582a3d4f13e5f122516b6a9c8357b37ce54d15d272ed7cd88348ba46d81e8fb5f1052b8722d34aa1329e8d60052d70b9822e1bd55b7ff1097832632a3456feeeb38767e908affa1250fe0eeb6371b68083e4a5223a240450edaed7fda45827ee161d6ce503d081fe331679af0cc8e75a70ed3c598d7e39476a0a6341a6969d2caf23b4ebc2e974bd6f54482b8f97a5bfcfb46bebc3f2f26553d1af86b996b142e556da9db46f44d85c4414d15a62541906e6ae498c06e2336191174d6bdd16993f13485b56b674e780724a310bbd850e9cd06e03343e6b39e9c535062bde4fb832e588b538637763824b62eaf20dbb09181e35996b1e1fc172ea7331881e9f28574a062bc80adec4c85bf93fcbe768810f3c9f8c7f0a5292837d6c5fef22b76222bd5b2f83f11d93c90077dff7bf100ec8a7f65d0ea7a605a1fa9af1ff6f1ade0bbbf2510adab6491af5592bf409342afadcf47b885aac9334ee599807682c24a8d26610bb1c2b6d249727a44f6a673e0c67f4788ab7c8e3d2c552a2b5b27dbe507d20ef1329ff687c527de968370be083c580c474337d40022c00b278b28213b928bd5cb1a8b4d398d3a66bed13a49ae77223ffd3524c60396ede47cf0cdbbd397185ea050cce36f0873b9c3c64b3c5adfa587b3698b89 +MD = 80d7cc8ea15213c216481e8ded048c5e1e942b9c1aaafb48734cc1389417c2e3 + +Len = 11320 +Msg = 66570dfedf541a0581838eea4bf7fa8cf1a64fac7e7a9ea03ea4214bdb347f4cc6e64c76d83fcf803ad909fe82fcf2901e6d065af68b00b44d97e622e854458673d0be942081c18791939912f881a99a7de3f5a2e087e4875fc2446dda088e7935bb6b41fe4178804f59460ff6afa610d4ae236c8395cf813ccd4314f77ae18dd3505c63b9a77bd53cd219dbc4ad715cec7698a128de4b0aab5febff88cfc62a173698e39add52ec20a7195faaa492e48de45d271789df8a75204517d432c5b8c71527aae908852fc3804f83f0bc91127e9f79e898bf146962ba584225c9679fac97129fee539c04ed03c130dd1cf74d8950f4cbf3a8700f3ad22c69c1bc33478e6260a9f0e420d565db794cbaed4cfc749fd7b76f6b7de4c513ca75f134b219351e19b239e39909f4ae7fc0cf561689083329965531c351cb22394cfd596a7b687446a10f798d086225d9756480df5b0db5f24fed21c9bc13aa81d82d52e5d6f10bee5ebbce863a77e79152c1932eda4bcc3aca7f64178e6651abffc948ab93968d19d084090b07fa9daf3e2eb68c6e8a210aef532135308cbfbeab18624218209fcfe1b452a5d7b5ee3923f211807f915c69a6b181ac084d9dc2c363c934cf56eb197892d3da126e8339e856cd9275292460d7e0ac02807193c02ff2a4091e0219fe7d65b13520ee03b675a2124ab81a21f66a29c9c2ffbf48bed70d1c476fead187d976173b69fd17b9b21e0731b02cfc3347d40071ec0065c7a3fc597829d7babb720d2b76566267498711d5cec6265d1f56297b99b1fc91e07b068223b4927ca23171156d4de79a6edcc5a3a960d2ebc3806f5fc1b57b75134775bfd178e0c044feecfea8b752583099809a4be8f64f26abf0d7726045b967ef8f3a09dd8c2eaac2c40eb0fd6c4b98a68be23bc45b3150c0f208331a2104e55b9d18534b5c6ddb63426c0c85fd19adeb2ea2015ec9374aa8be1d8c4bd9fe9373e684372a1a26dfcbae4144b9cd6a7850b003261c080c1b499c3c055b33507b20b4a43ee28c00bfe050b4e100a3e7ffbe5b2c3168df56cb8dd38e27b3f8a2a5484da0efdb7ba4828c6fee6ac149374c1b7545aaa917be635bad3a79b9f09b17d4faa1d37daeb930b6551667668503675147781a4678ebea9a706884d6e2e4dbad03cf7031efe8d2464855605620f3564619eb08a9ca8668346542ce729725f9b9b051515d04d96e2391d3def9e2ae23e433c6fc39d536e610d4ede1f6d80577e24950fb6bb6330f3778b768b792ddd611dc327e5e61a46a16059445c86b2c5f0f15f3f8c1cd9eba69442a87f8fa2775b75d5717803577ff2e3f5d80521843b9285d63cec911c479a13f53c224e0350abdfe5c4e071a58aa40cc701cfba9f28b1469c708e94a4a53c7af5ba1a30dae9c0b0769ac5cd8ef7534f2f6a12ae4e0dfbd81482b8b3fdb51c4dd69acdd493b3489c0a8b8e537e367f2fa17954993b6bc0aed0ec116b91d797e11a66c3b5b84d91f713ffa0bffdd88632cfa82bf7c1b2be3f44052f280b8d5de933968230d3093b56156fa36f784e16dcfc8eff468b83230e00664865c556dccaa4b28fe25e86a33d91641cfe88179f92da865501e35dcd9f789813c159c47319f0435356c53678121a6563c9a7b59f08cc36b3b68392ec782f1307b72346df3ba8b162eaa1a9187812fc1e7d51b87383541891d0c6c32e0c866faac3cc6e7fc43095353a7e4f12e41d90b3661090dbb7049475ed377ef0d130f65353bf9bb3282a5750b2a5a8d5ca8cbbb9305ecf35f84032e6685026d37a914fb7f3776f37fbf8803bdfd246ffaff2e59658a6c3f0ebb98c59deab4b544d39e44f2f8e497ca41d985d3e6e99ff18e296d14b932fbaf5b30946cc936ce1ed9d5c7f645ecadfb51c184b4ae5123279de5800858e62e2aadf22439ec2fc0ab03e00cf4e8363ff9376887c81d060586748a19a82f30e167f907fc6d194894d599e79b52a76954ae3bf516 +MD = fb3b1c0a3248227bad87587a8dcfb528fdabd1452d6bf655b8c657cba683ef86 + +Len = 12112 +Msg = 0ed3e67a8489bf38ae1825104823bb6a2aee45466221602386c8711f499ddb5f4b8a75b1366a3b70061043a9a88af37bc7a672c4e3b65cfaa391ba566cda3138328579c78e9611d7112c3111d9bf014d61a608439ddce7634703470174a910b56acbdb02b597ab357876d790024a4ba8a1f4f10cbb1a69271a2700688893e0a09c6484abd3f56f52e2f61e704bb43b542f9a136763f84a0ec604cdd2d11f09bf6f595b090f36c7f6f8b3ecf7dd843718b2a0589bbefff2e0f0a2978976d5f3db8cb1476692e41ae862b52b6fe042a9bed30ca6f2f3b6ca65420a44d3a03d06bb9a7432088486cff1c704c11e7b77f80c39e8e7b22aa638656443bef977e0ab2942aa03380ca550d9d0a9984dd7aa8ccb8c3c02248d55a5a7fe55eb42224548eb2c5ca23e52c8046824ab96431c63cdc2760edf90414d7af4b749b5f8caf447caff92f6627f7753656c12a54a712a23bb9d68663e71161d143726036196760e8e6452e9ecbb3ba59a4fe6aca8fe88f67ca9517f754336f8cf27f4bcc7af5207ff02a662232d9a62cd763092a6ec04aecf43d2127fdf3771ed2fbcca703c1098e482954a51fe1ef2c788f8418c6327b37a13f107a26ea1f235f68514a566392b078b2787bc554fbe502e44a0a28a776d45c0b8462718fae270255782ad5554272ec66502ac5bb42c30101e972f8a7e45faf32fb75604cca966633afcd230e9f422da56a36b38d5a52ed58d0e7d8bc4a15f535d43765b9eafdf59376a5a2080faab70035340133a9213259aedd2b4d0ea3e894ad0d144f95ba3af55b48e4ca2a0903072f872146c59a7aa4b1c772d2a895d3cfe47ade86417790c9dc3b6ddd6509bc1ad7b4a65f264b209aa84b41f5ae484158291536f674b2b18157d1afaa57292ccbcc5102b5419fcedbf0bd0b2e8657dbbdd940b008a5d7f7cc7cb01cc966c3ef8a5bd0c911be24cfc919a150d5d730fd8173a1cc356b63ee0bb96b57a31a767ee724a85bcce266cde281ac95941750111396ad0e152be30ebf8c47c2dfe8bd5562b56c5d7f54c223c8c7135bd1ad51c10490c6d8207dd1c46863e9f0d86814fd7d6c8120818be37bec689a16272fa287d52073ccdfb7ccb996ded654150ef9f197d88b577c0e3730bdc48556fd04cedff594585ebb801068bb5b818f2e43e8bc5277df64e74239dccd998980dbd33323f68ad9004c6d693c46786fe47cbd7dc83dd911cb2bde67fa8c260b464c017c1e58627a43fab613aed8b4161698c2059faa6ab71cd2294df48a188ef9b61606098bc9b0ac4f10cc5ae27d0877faf83ccd38ab33bc72b9586537df792db2876d80011f10bbc1f3efaae451bb9b2bd67fbb59192c3c860523c725f97e44b9ec2f0c68d11ed4fbe5ea396ec0a3e2a3d34b049c42e51f74a31c84d4e4f2f144aaa729238e4f8a455d6860d2585600eb751b1372a702c7c709bf48b5207b95db497240b1b5076e46c0d6cbcf7746586b328c626cb409e805af986d573a7cc4f65f2d0da3d3ead368c6b1c4a6abf96bcba20b9beb087ed2b91b147d2ba18ae12e4213ca7a697e6c33b586060864e3bd553a151a8e02b62a49c2dff2b2e40a7cdb98e31195f4169b2043cfea654099cfc0713558c6316451403d37687d80801a86d9f76d86f267e2c6c7fbfc3dbd900575ddf8e11422edea24f0d738fbe5802cc87bed58dde2d6d59fd896b6023a4b10edd6bc4e0845d74770742c0ebea19f4618f5214e0b53d7d603ec3ca243554f54a0f20bea1318a51bab3d9234264311d8e0ec3fc78fb40f86ab793a3b818cf15337c6646fb529dbb94dc3c653c328ac67c8b7855feb81d249ef162c0c3d4ff58f0aba62296ee7dfb2d09d24e825e0b36538edbe719f4bc4a257399e7ee72ca08aa24461b1b0d1459acc203a5bcf09bb73a9f537972b805b126c59ee1e1f91a6b8870b0f932b7491c398f373492ee248f594748d5b00be0a3ca70db764371d6cbb3164a8482f5048efef9d6c1aa628d07d90d22c17cf6356639fbb66dbde3e66e529e7e84b4ce2df520874815af53be67e27a4a067e80ec439aee9990f656329d8e91b3c06f4bad9acac2f6f847ca9ef79b15266c5db1ed8215d2eba597d2a19f8f7650015c736ac5223046311ace +MD = a0ce0fca25b3ce1566e0f9e2a1d44f80cef4b52574b43c5f827ee3a277d75494 + +Len = 12904 +Msg = b2fe23861b9042e8f3516a728f0bcce1c908196d0bd43ca8a94548aa74b9af6b8c9fb670753925aa6d9f439bfd0801bacf457619bf8e8b453481f86db1686fc7a7bb16308ee63b13334b448b548be4cc6a0195bfc69042ecdf9f439deb618f40ac5a2d0e8d1feceaed5d548cbb1cdcde43455ea64762c76652a61380492d799e4384e2519a6ca0f943db5de45a4451ba0118b9186b8d847b349e4f60f45393a913421d43df56bf06dbcf46dc5a8aab264d838e5b5a98dff22e90df83135b4729c59bc62a8164b1da6040f7bce37753ebcf8dc5b83b0b4295e783ab32cfcefce50098c64fab1fdf3d783757cc1c92afd12e3e4677366f142a087f9ab4503319a66d4003fa830daff6cbbb50542e63289f139ef9e0754bbd7a388c9653bd120834b49b667331b88acf02d4c99b4172271f25b6c63b1d27a54d20b387553ef430577cb1d701dea8d98ec58aabea7b4812170d8d96cf598b346b67fb5303fd5ff9d76d8b3fedb26302fcbbe6dc89076c5250722b4fe54f00d29bb66de3a51fdecb7b30308480d4736fe18def45c00b665092fd99dbc5270de7a6b50f1f83cff60e0c6da890ff6d608605e3aeced7b0bf73a456de20b70a3bdb550bebefe433312a53cbfc49b5a4b0b12f632960151dfe2250240208032011166e61093c1273168815f33399e9a2ed5729b86ae1c37babc75c0f0e7af0901700b95e6fec53b82d8e1d8d5567e28e9edfb988793b29f14ec991c1095dc783d50100ab27e9f02affa532406b9ae9914cb3a87c5c548fa87090b7dffb9bd120d48209ef391931f013351bb47b1c46d37e3abd3b1d163dc798849614ed1b53909be99dd3ab665d33f1a7a19290d4417bbcdcc26ec4677a774f0df505e5c598fab2a084ff87b7be1a22618c82afaa22b28f017dbc573190e01c939e5dee81e787a20d861ad5f39ace2dcda42be286309f7d11b8cee05bc529877e57c20d37875ef29a6bcc9b043a769a52b0363050b46b1074394b66cd627b1836e9dd4ccfc1a92aaefabfe3d1e63bf2577a4aa2f0f63dd093c9dcf26faefd58231c55b231dd8dd3b0fc98b442e545bc46c8103e4f3e3e44d42f298b29f3d8ceadb7d247462334740a3a02173f81bb808663300e53d495f4a035d939e37733033d84fe14f4dac6952379a312b000c5c77f13511ae5ff6c6860a194048584377d39497e20244c6abe638423b07dab8d17999f1b68ee09e8297a3c04f5f7600bc60bcffd74bfbf497832222bf68fca38fb3cd13803543833be58cecf132153d96619de2116ab7c8b4af81a63eecca5f1f8d06f4df001d575af601f9d67eba7c6e3cd3e9210d2cb57bd1d35729f1d83de98bd420538db27d585fcf617f73ea2fcc78eb6f96a1af3d558093b01116aae27626b1205e4cc787cc7931ce4cd008ea399c30ffe2a6d3e2fa325f4b74d9c6cf5de43a7f8fcbb0e92fd8c5aadf11bb1e2e2d611485ab2f28a26d7273d5a99067095abc884868f333eaf51761a697554e2292e848001d158116a889e3a404bc4bf0e0c3f518c322ca8664938d23ff8becbf633304d28b1b8e9f6a11f570899ed0bd1cfd208158b44f9a9dc6a7e7b8b39c4d24ddd58d63c5a3d5288733cb96acb7b675a4a512a82c2590172d2c523150bf543e452491359853307a762905ba8a43857176ed3d2ffedeff5733a5041807d87d36058c7e7f083f39c65b3fbf73ac169296c083715ea0fe40d4768c7dcb3d7a20a29b77a5bea9aa69929302793086a3766c3de24fb2b6e5fd15724d0fd96616d6fa7370b762d1374875d9fb93afae6ca9583ba438dab5289ca093816ab1163118a439f2241a23684ec68c95cf1f87f493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7bdceade9eb6d203ce8978f784f4ce6fed8203714b8003c3990c41a36d6fb4b823ad1f49385a96adf4ae3e024cdc542206a071d31e170c3e69d440a37830cf4abfe168bdf6cf2534c02358518ba0870db736b5f3fad4e38c037fd71a5da11c8897a34aa2a2bd88827a0d4e4a08e77019486d5837a75f9293af348f70e569a25bf2194f6002cec57d6a97a9578d5a152c006ce109ec5f213db41bee0dd8306aa91a6bfe5fdfa8e60fd7e6f0dfe0a1802f285cd8d0927d96705c5d7e59fea07a5c55c2df0700f3f21f0b25ab4aca63b90b0864c5f36260fb16ed22c7bd1f5fdc5aec467bc12f58f2944c7a63ff1348c6a6e8ad31dc21b05716b091509f0215988d271e59f3327eed58e30d9e6883fab1ea105e +MD = df8b9b3a12500057268beb9150e0ca78d70ab63d99712f270d3e331572b05157 + +Len = 13696 +Msg = a44040fa0fb213422fab64ddeff61d211eb9226b73607bb6cfd7b56cc3fc857b5254afacf8fc2631ebe3757ca0375d58911dc0323ea5beb771fd1da5c7e5eeda6c626db226b72a8f959166b9b982c069b4b01120d1cf943dc64c4acf36cb9ca87ad443b3a1c96587b51c003b40be8c7c0fdbdcde36c44670552d03931998d80c0511f657721c203ed4ec0bab40d50abb2b04eb13756e1b77a60611997733ea2e94815147a097a2df79694fb0beae824c8f95046894b35d7b41403d8858841a37af8c1b2b332135902dfb94f3c4313c57c3f4f0859d7d52a3af444d08c473b04fde9a1baa34a41f79770aa11c59467f05508b771197b34418777909c3c4e8f39daa131a6daa07a9c4dffe3fd286d5957dbdc060b58b3d790121463b5e5fcb2c4a9a5fe01c9d321b96ed3f36bd52c6c4e892fd751880033a873515a9849e04a47d37e6355e150cbd1a2a354e86c501556e58a97ce37eecced23c4d1cdb877ba05f0711e1db1b7fd6751d484ed5e76f9036962b3ebd8ee27f09be555c0b25196b189446ab3cb673b0d24fe10051c1f6bc69d4ed834fb6cd9355419731bd7dc44ccf66ee5d29efce915746662aa35a7f222e9b561240009353dd4f7a639999658aad0372bd49cd79c22c8c419573baf30bae71ceb539741d07ca6f66b94680e56ed9f5389445585c8b7aa9d80968ea38bd11e1bd32e21953f7432ac3fd6d3a2a407bc4aaa9c4985f336923954e2af138817e708b52e2f71d6a7106faf5b5d01e48bdf62fc66f966b042084df2b62d7d99e1da8a1dde21664aa7b8d716ac749a8cdc5152eb1ee596644c8531d69b8a5055e1710659b897f0efd8a4791234aadaf19bba91133e8e93a3c8819b9d0d362a30794304054803905acc6bbc2eae7041d72c8383f14064fcd34895d1a285c169be2bb919bcf6e4c2ffe56716d854657d921144c201cef920974f2a7a839fac9d537b5badcd5fcc1763d63f1f8bd0eadcb6dc66c1c134bbad443ec80cbcb5684384eaa336d2ed29fc1af14c4cd5ae70fdba006219bc0c4d018eb9f6eeba5174eae6ec185b4a297eef79e927152247b84f101fef105ec00dabcb232fb7090e6301fe022371bf9f3b602500480f1e36f14f5d7d367c25fa7e3a8e1ceafc2546b3171edf6d108fa9000c90e9379115e6ec7cf6bb0083ae162f0c4bf9a1149b94d598ddb65dce56e13d3341f67e5195e1ea66705bb5ed63ad90bf896bfa96e8735b05bf296df191d27382bcda74c73ab27b8a5ec1cf0fc31b33b2cac64ff9785ca3fc37cb2620ccf7236965e7c34860d3206726afc4615909889484bb29c2e7cb50daebfe0ed264c9cd55d1b0d27ba4ce796b4c583e98a1d32fb34b9d10799349d2202044909cf5b4e1d694c83ac772fed725546d860c1a1269cd83ee8c842752b87a993143d6fc63017a039054c257feda23b35243324e31f711c241f688f07074389b46a126e53e9caeb29bc8d2c048e2c50da8eeb1aadc384e9b19f6eeab1d85e8caf730f34cb223f3366cffaf586791a7a7c3f0f0ac5badc252f9062ba3c46e199cb56bc29f5827c5e366718e6cd5574a3655e275ef4ad81bae41acd6671fbd397523ca1b69bb28b55e2ac7168a0cb40b2db14bb7d02447c8e19633558159c3c708a4c474183597401b1c58ce4c983888f278954cfb726d48b159625f7f3d4250bbcaf353476203d49eddbf1c00e24532291e479bcdbfc919822d922abd24895502f8cf3f53caff014dc1529663857aa53604eb3ac356dbc9c8654b6dc79a394272d0c0aee9dad944cc89cbb3c0fc3940adeee89078e225b818a3168f2b18b2a78fc57018561c232d8f7972fac5a11192f51ed8335aec2792e7695c05542a8602be59460244f97d1a0b22f0e1ce3e841aa0272299e5df61b8b92aa476ef4a43d2830ecb03231d4798c408cdef670f1156339a604ab63664b80259884a38f24c95725867717cd213284ebd52aa1cad39c423eb09bc287b910f57987005ddad30da10c8b403aeb240570f9337785b937de3058b9764d929873d2d49e41059e5610ec2c2290055588f938b3cd4f0a04c5e413d0e91eb24daa7aff7f05d101a358db22ce74f1dfd2f317c461cc39987524b5d5ee671a5b7d982f64c2e538bbb17f74293aa8ea30290e66fc4b57be97d2fd595cfa5cf2aeed099aeae466fc999073e5ebb8e704612380eec9b897646fe4f7d9923cef2f1564a6c2772fafa70507dd364e9059c5d888f1b711f2b3b68873bb3c5dfc4958f7a917aff4e9e9c166e0656d3c0925b7fe200bcabe3fd4394b47f08aa78191f5bb8503694a5b3bd024e1b2949c6c74623bb2732eb6e822771e273fcc5714f08fcbc012f95fcdce5ea7d36db255016d4df808d4ebe334c4f76adc500955fd8ead8e22ed661d87c9f2567d3dd0511039 +MD = 1b31fa493cc5f29a12ac811d7445c9d68bbd02a6c470583f259ffce5b92b6a1e + +Len = 14488 +Msg = d4620661e648431f92d233dfe27abefb93903c7c6077dae98411405d7a7871dc07eff2e77a182e4e3367194662d614bb11da11e86596f724204f48ff6b21018dd3f0c10291a12e7f0e89942ca625d087ac0c6dfcaf230cb5fc1009b364f15b1e404dbcd9b24a0b5a2d21eeb937d0bb066d0f99e0c884e243203acca2ee50493656ee2b95657d8c8697186d149c3d9de15bc9ddbd3823417792b7d9f390a6917d1ebb565d32a27aac54545a665dd63ec07f2380bb8567f1f95c6d78cfd35bfc9d9f9d845aa21f9d736dbffdd603026549df05cc0139b7b9708646f15e3ed7523be17affb43c5dbd84e9409d8d1528dc27855807b8db7d628516298bc759825b02ed3c0d9288c4a286d0be83b21bb2690079027a07f420b5df16fd8f33acc5de97cac9f71c0fbd13222a23f86e9d07d57dc1ed6d170b0877278dac45c9c006a5a5800b057c58aeda00005642e9248fe74567ff270fa89d7304841df5b21cae76d218e87ed7ec00bdc7593fa94a37b269017322f2185446701f0238e71548261ac6994aac58511c85203ec677ba5fd82158eb3d145a956e351f0fe5631bcdd5592a0b18d5241168fab2b6d3f2602369d9f3d938d6fcf67a8badb30cb0ec3222faa6773a4266b44ee326c94e64650bcd577944fb8027fcd33a71f79517afff77c7e1e4973b44c03509237f1f13f09f6c6493356d5a0231e10a12e268e08dbd3b86845a1907e6bf853552e12e482a68afc7e9b378acb61c0cc3397d6e53adf3d50036e1a7f07538a52d5af6634a3aedfc4a22c603bd6a45bd2c8dcf8db73829affda082293c19b4ffb9e5c7a76349b6bcb3e676f7d647355a0eb7e0ae5655e730456a448834f9bafaa3985ae0d97f4c58cbdfcc3a3f75734d315eb8ba762db6c09f3b30aa203ed2feb21db9f8f50336365ab3cfb5401b87fc5d2b609760e71dc7d4bb4c78480f8473ad1cecd5fffefcc0280a88502161fad15ac5df2f5caca5adad93a2daf39559c25d3cf9613f97275dfc8dfdf429705332efd63d68b1a4d4dbef6b3ab96bf8d8518a26ea82fcf73e749fe33887a1701a89e603822ca9f635b765ea1afbf65f8a89fb82c7228045c96fdab541f2d189d83d05f6b7628acb4daad6b94c8addf2f5d27af7962811aa51b573ab1e1e01e113b61557e4f29d4aa61d0980d84c68dba395cd2d617cf84e5dae326cd9f279a3565cddcd0fc32a9cc776c7e6c42bde3f1c38bdcd2f067d5875c2e1a17a5580f52697270142bf79e8381fd8931a0e8949e625127f09aee7f1215946f1073160ff0dcfb99b84cdd157827e0430e2dcaf1e8bc294eaf65c8040eadb2b058a6d5fea926c5c42ded57c112cfd1365227f99e993790bb7fef88e6e57b056840af1c6de3ed6d89e56c0c03dbe02ccd9e4de8fd084b13e8d296a5aa2f1408f1790a5dd029775f558f774e603c0f7f8352fe1d8fbe8d1f615809a2c053ef4a0662371eb7f27b27b18c6da358cbb435f200c70be934643fbf70a704cbfc8325018cb3d3a7d76f33185cddaf700374ec943817387c0276e15dacfd501f7176366d690f110230aa1e048135d7287ba80fe4599d27ca912ba0c66d8af94d5b1f0ab477b75b6996d255009a049f047ce41c5d05975e5778f8fa7442ce84d82203fe71493b1740827e5496f7d88b76bfaf9e889cb450a512655af1cd3667426ecbae1e4e18d9198be4b9322b1000f19c7102d1af62832606074ed95d61351e89bc863606bf25770bcbef5cb449b4279bbee5d2be207a7ccc45426583cd52cf1b7d033303bc60cb9a9a539123f3f97b560fb406398cbafbcdb5e250d0d964c69c83c1afb59f3f99a0b6a259ea9d655f23ea09d6b1f5a93582bf8b15b523dfa775473e069cb5f663c6c7482188a47c55bdb433dea7f9e9bca3e8b91ea12b27e43e5dd4d239bf49ac6532b1727ea7a2f15c14ee989c17e0e379c808e6355dd20f602e229d1d198df6149f7ae74d257db4b782767f0ece136cacb3d706e23a628b834ea3b1b73357b35d5400da649c6102386387fc608b159a8552cffb285f5ddb0015d4ca78bb2b7697f6efd6658af17c575e7fbb41ed5c0fcc2b402d882b28807f4a3242020f7db26cfe9465c06fa385acd9ea2613435b3ec983c438723c571e492248b2c3bec2f934e1ab02f5b8fbb0a14c43b7655b979a0612e88686f16e07065494973e379fbd9836703885f56e8fcd4c08f9a86495c41a4f19a236e8d1dd3f478259e2086861ff639060e1b38075994fc6676d1cda2f7eaed415f28136f34c71ae955fafb198e30f9826a961b5f48dddf87b13d2d94e9ba8a44c4a68e20bb67985b3f7ac0fc4eb80d4043d8e939f236d1bcf4d2517a409c306dfbefe876925b584405a7bd778616df0542ea88dd7f273acbe799219c23184782ac0b07bade2bc46b4f8adbd25ed3d59c0fd3e2931638837d31998641bbb7374c7f03d533ca60439ac4290054ff7659cc519bdda3dff2129a7bdb66b3300068931ade382b7b813c970c8e15469187d25cb04b635403dc50ea6c65ab38a97c431f28a41ae81c16192bd0c103f0 +MD = 866812b0879d25289d6fd11134a36cf928e6e9e26d214ccc40f3fa7ea0f5138e + +Len = 15280 +Msg = 648f37b8fb4fa69a05612739040b73b6a80fd486a0309518b0f3b6b704a3e5b1c497aab9e8b8e28a4e3d6ecd09b92c3dfd582609a9650a794310dbd50a6fe583d8c2f66ff6fbcbb0357ec9683a25eeeb1a870624277a223509d6465e107c6220c89783a2ce224b53e3ab9fd13f569f0a2724dba1c275c39329cc601abdd342d1bd9fba19183449bc7f4c57d1bf5428e04eb80d462360d7dacb7b91d0ba7b6fdedf60019e7b3aac3432e95b30632872b6b5ca04dcf24245531969424aae7ccf8f5564c1f79f3b5e01240b12b6d2d964d384e2272ad624f5463820d94e42df4c2b483363ed2d3f466b7c39e42ab46fe581e488e0fa780dcffa5328c0a51eabcdfcdf534d48cd4f4cbc63fc3956b3f3df06fd4597128005bbb990075d17e9e83948434ee9d02671583a00db7900756c39abf6a0b23b9515a1c917471a6b4b9e7a589bac9e4de1af522f7c5e0cf1a2e2dbb8f7229a3d5f436973116f5e6beed6777410f3d386a51122e1fe0d5bf1e35dad752a51b7e08899fbffa60890dd779818e4caadf2441b9eb199af71ccc8e0e69629b5b871ecb51f3fb5fd991a8a91ea45eff061624feb5ee59eb611c83d4084811ec0dc312890dc1edd3faa633ae2d6e6deaa988b6fbc59a73a3c75b819ab40539a74475d5dc1d87ebe93c4d3b41263e3f922d9d56c3698e0b369260224cb21f5e6f8805f53f01b49a1226ed2c2ca9924887daca80d0222765264ab1026452f4f4a750f9dd2c4ae65ce1430c82ab28192d3e6996c1bc8ff535f568c48e7c472490d137d81a2e598bc8d90921db5712213228329895f2f385d226652142eeef3cc79f950718afce13426be1d392bb08590bc7ce3679ee0d47ee2bd84dbc56bb9bed45013d754b192b7e0c758855416b0f2eafa506ea383db9de982aa0472e4cc09673f4b1ac6abb12c05d3cb67f84cad1ff425f60735bf56a17dde4df9fe0135937aef82a2a993497adb09ff48def9840122245f981b3c4c74e7f9f4213169fb4655883fd7c4105f8bab927b91cfc63b7fbb20138b1ea3c5fd6ffa27e4d2c526083f310b21e1cbfd46bc96c7a8935adc8009409846069cc9245c0a6eaaabbcbfc382126de8c66b2a93583c6cf7f25f6eee52ad78339bce61d1f85052db82f7cc5e6454ed943c99ef5ac5acf1e4b47afab0df8e3bb8a4e294ec89f55adf201d58c12e1f138d0bfd53834c0fded9a05587aef80c673feb7f6b5d58200f1f4dd768d4279a683bfb3e5ef7358dbc3d7f981dd0e54f862f364eec0cadfaf701d0cd067f99ee7307d405189cc84d127819ebc4feed7e1ff04ef721e2d0ab9cee73a639aaca42bc575df98a5b4d7868f236f4852059c1bbeafb2112c5085a864ffc0b0a3d03bfcc945fc3bb1d0b3547129e5e671e7142e1850474c69e9e2f3b8a34a37f208c8d2a27a30ab3c84bad354218cf73e07d261929339a4556da534509e317a33badd35e76ee777b455507bcea6eefb04ec598ec3e4e3897d304ee2c32d10e7b76aebaf1eb0bb21a7d716c64706668265191bee02c1ef9c5ff6427766fc53111bad6696aedc0629857e704b43dc9dfddcf28c07f5b6b82d5c14227ad2789286ced6f0851e3d72ffebafef634b95effdeb1d3c75133fd7ed200e51658c1e39a94f9bfc12f3716c35390ff6b6c4cef6d30e0dafbdd1d9b93c1a6961b00a79c2f92c40fba8b5046c39fc0328ae55f42d4db438583ab7f0f69ac9a9d5e2c407c906d38a61bed962fdaea32df7c265821dae8c11b8743c21fa99ac4420864f44a652d3cce0ddd7198ae3dce4e68b7a152275e44e6312e4f94fb940ccd41312bd055dbb7cdb8e4494ae79f7cc77721a09d6445b32ca7f38d3506a15a8530194dd4097d93ec4389860e2e192491d1ebbfcc39a5f536111ae3cc73c996b3fea6c21f291eb773d65590aa2bb2aef59d9d65a54d87f44c982bbb1fe914a89fd260f3795cc30baa9bcfd0e68572023b04c0f9f249f297b664af7cf8118b7891d5ce46a94a7677d8b77fac8ce46108ab2ddbe579d4efc6bb9c2e8d1d9335efd12f7824799c3ee34755ed8d62f288a98c40769003978569a4682e5856161bf3a607e6f6affa24373d9ba2dc3254eecb28671962573abc69b9f139446d42436d5a85a122140b2e5b03b125ffc2b59b57c5c84dc33f649cac425fd6b928c1b74633d3301270786637e1c0fe60dabb9836ac8b991b81bd2e1b87da8e1f51387f647a161b2c8be8d4b41ef0b665440eec4e25d986d2e6ee799ed089e7dfae52a1b17679ebda2c047fb80468d478c7579f8977da9b50369f851e64946b5f08b52714712127831d746f2cd951e0002a3ebaceecb560fe39775b818c24a20826091874b139578e24dfacf9e6d26265366a4404ca935d42b61f02b190611342d2f77dbb7fe703650aee3f057314e30eb38445155a9b1b85773f8294b8724676d2265dd02353b46f96482f3ac83feb656933c6e8e4f62130427ee4144b7fc30aef40c09be5a7f1149295847f2c7a00d11f20cd65b0cbf7a9e0842f1893b21368f1eaaf040d0843bcc47f46bbe9edacba9ff365740543265a19fa6b87d631bdf6a0ce30f3e2a031cff6ac7ed845c17688af5393fd2d8635a9b488a14b5d24491ec4944e50ad9743b5eec434bd891ee6a418e861e86ebbac007bd5d84b70b43f4724e40e03b61501d775706e52fc2b8574a15bd6 +MD = 5a91ccd38d6caccfa1ba56b98133113135fc44d3f60b5f1203787bfaf9f10554 + +Len = 16072 +Msg = 9aef330f339149177ad76057720da512db43f87fa5f2fb84abe269c19e4aaad03f3aa4cbd236d30fcf239c40da68de8ef54dcb36f5a6f64b32b6acb6834e887c6a35423f8bccc80863f2904336262c0b49eb1fa85271ef562d717b48d0598fed81a9b672479d4f889e0ce3676e90b6133ee79cdea5990e2e02db7d806db4e6adee5ea76cecef9119e8393eb56beea52d3c08ebdfd7677d5a1bbc5b6543a7b744171cbe36630bb642a9404933138820e2ab15b4b3ce236162dedcbd003879273866aba3d79539e58c49eaabeb4fa550b8f4d79e637415e5cfb50349573574601341d2fd5769c1467d30ff0de5088e5d397d1652f6b0852e2807f8aa7523de8a5c125a74bfc6ea029fc6471628248c6eedaf99787469ba67f53c84865fe800cc9c400cb11696fd417a74896fbc8de5ab5bf22ab7e689fdb6bfbc6f861f6e224f5a33ae5c64c0422a94a08fbfa929e13d0baf8fb753f796430cee8151bb9b8c3b1e53081db22c01e677b41faff7e2ca4c854c9121c39bcd37673c81903e5985b77108e49a07c2829cab1602e7af9ee6ff5233f89d3e5de9ba550d39eaad8f56ebd9ba087e6b6a0c75b630000ed9477f7ff9ca8cd2cd2534f360ca6f0812254800e0d13d6fe60ce9992268e0cc7bc4dbf4027b156977dbf40b0fd9ec917402a11e0eb54b1581905f2f77286ccb9ffd4285f6ad5a094567722aeaa3782edc10a96ceacefa1a43deb7603bd76ab04cdafe5a5bc7245b3db1f6767a90da875136aa13fc85122335de3953f8dca3268b43569cbc333b076aa2c81a4609dc43db5cea3bcc405adb5d792c3135a1dfd3632091739e5867b4d1202f3cd774440a826ab20ae3689be7c595da217b8de55fdc59f8068b9e700a7c147505b33adb864f494aabc8669df2751b894c51087f73fed6d37e0a6d1db37267e09c64c4695d49dffa4403a028a273f482d93f7a73b7d2806a02a42d3754bbffb9297279b63779150afe1d80049fc9060df1cd4b8ad25f3d04bbdf46869860c647d663c089bde5d4c1009d6df8927f3b71bc84e48c6dadf6ead14621d22468a3d4c9c103ac96970269730bcfce239b7af861ebab412fc594656b5e24e3a3db7da62a13a9e56b9788487ef00d4cf927aae8098b0971c1aefdbbb1b1b881bbc13e0622e21afde4eb4fa64ad2913bbd2ab58adbea67e3ca701b34ccc646731423cd3cd9b5bdbca89d3ecdfe3cc26216ad822600922b60f314d41ae4253482570812907614fce960b53c04c3b3088badb7f9049f0bbfb0e4a112b32057eb762c79f54a21873e4eb3393392c1c1cb7c2950026be1db899b441fbc49a9e3d4173a7d5eb10497ecb14a330ac01fed73fe348085a5ee8cf3e9bb97ba22a751562c2a1c350e44cb6cdbccaaa9d606bf68d973506af8eda66361f310f486412ad87fa35e62a90cac2794e2a7f81c9dc013d590c799ad06af43cc919251bf9ff4c4d64e4ccdca82c185a33431ded90d77daba33eefb0b6331faf24025bc14ea3a81fad3ed5fb9ce92efd2695046577d6d264f03cb765c29b3f09ba6d21acc4a8177b3d94afebd19a7cbe72a0c15dc1628605da969f3e683be8d8f6ba05430e6530ec8086993208b8982ab1e6e34b1ff32eeaccccd5bf397d9399538985288e737ae030a5407284bbf7de6ee7d8b1e61133a04150194c98d8c5c77b5c0fc1c74b6bf2a8413401e82d123604142026a6451aa2d2c0c88b08e5f5efb89223a33b657a90621ac284a5748dbe0c0c382df2f76a8eeb8f61df2c2dba7ea5cc6f516d5a2d45f8629a6f3f3aa0f30130af1c3eb0a9b1162c73dd650879f0bd8b2130ef81fa9fd5e91a1627d822616e11f395fbf93eb5cd188cfa360ebaf28a3f07e6147578ea74fed03e01e55885bd20840fbd49bff98ad41bba21c903d0765881c57ebd1ec270144b3b3fead9cc78fcff0df52a9418da0f8e91baafdb371c780d73a0c152c431e9e99234411cc21c07c2f526046180250b7415532ba772e70e29650d1acb4c44b049d7a190a80330d15e79d26f8ecc06585aa9add50f3060ab641e3631dee71327ca7fea41f1ec31ca4ff09cd4a2690886b0f30d2468dc13a02bf39eaf040147b119ff90ed80f9a98305fdc7dc12c38616f55603a24af26aad0fa9a8dae1473cec86db17ebdbb8027c2ef5e5de76780979c65723d73c0ff0227d95074ded158d1abf96f1d578a3c716197d996433f32d3f727ae02ba2812e91044a2c808df892fc12b7a122de5981f153f934f5d1d14bc8a835cb2814e28089123d7b1b4a6ce8e12ec1c86c7325ad9e6cfd5b1be67f0fb5c62c374519c0807b55e38566b8ef197a7229ba1aeda4b46dd2fe7e4ed878c3775aa2c71b0797c8d81de0de0b4ffb8f187b7408a6946330f0147110f72e3b019de45dfd1294d4a42ff899e761861ed44ba91536a80dddadc5bff9b5bd6e526489e1924bb41813bd0364832411e1c563a499a1c687c060754f140ccefa0f3b56dbd104357827b17dc2e0412694e98bc793bb8e2ade42b841fcdf0eef458772430441183ce73a4a611f0a38715303de6a998d5ef6140b317e6f7f9479187d83c383a032e489c64af14830fd76d4d749e7369d889aa19068951754120efb47ec52ea7d08aec8624fc90ef2e4a9a2ca3aa7fb5a9f9b3f58ca10751b2c03567d187b9935fe0e3b84a532b3dea2ac45534d374843087a25fad29b19333718c2839498207987755ba407d8d7429bd12518de1fade557aa0dcd1e7f641ab791c801ed5310a639969156c425f9cd54dada7189cbbcc001cd4f660a57f6504210cf6e8f16da5a88c4750386949bed520bddf3bcc5c5519b36734c2 +MD = b056c0f49764e387833a1f78adb26c618e9a06860d53b2354d6408f5973f4b8b + +Len = 16864 +Msg = 7dd8ff559cdc0f0d0053055cc142e015fba8b4cc7f60fcddc94832b133a39d3c68bc6bca1acdfffcf81e8c0dda71e35a3f9e8922fa7b0d8a28fe98e465a6c6304016b4e3ec045be838511ce5c0799bbf652ed160fc405db843c01b011965f848ee2e05297849cadaa734dc6bdc22b24b56a0b40fec78956f02d6e391b6a9dc8b5a4c84232766f4d82f0ff5279434cd07f83c59b634eb5cb74d87171ca43a1a016cb85959612182edb7298ea1517697f9344ae9dd3b615b990c1de0284ae059b20db9ad538f441c1e28cbd0627cb1b52bf3118b0c69a23a1c27de653f126341a72399a89a17956975683de3f17badd2a51bda68cc2675a0498613cfe8638a7be7979e71b563dd12f960c7eed6b832946d95eda7a4daa43526120345aca51eaf7a5211312cd9e3beb2f8b1199a9908a38d4a92721dedf5a2beb1f8f01141e884693b3a0f88e37116a919428ec488f6a80d2111eebdc8318f164c38f7a19dada3bb3960344fe84dc2e5a9c372dcecc64bf301b1450fd120a338cc0c83e42238b47836ccc70c5040696e917cf06a2d3e3349d4bb9f987189872b17bcbc6138505ea819c7f1448212b34dbab52df7b3270917817723e21035e3f71790c9a048bc4954ca97da81e88b4a890bb6540ae5487463f02dfa7417ed5ea5b2d0d329b8451e843084a94ae973d32a6bc68b2c2d6b1d3709254bd6ec77a03bd2c30185f2b3853e35d88728ed91f939c42ffae4f256ab9ab4a63f91f99b52c45eb27c3b5cce258cc0d99ba25cae61bdfd37cbba9dd2c795d9fafe2ca5231c453ee56bd3605da775bad10e409f92b6befe27233694a7192e6067af2f57d5a5c85aa4f7d5652ab2020906078a1c059e45af472de1409d486f31367b22797b96549a3748cad3fbef3996c1af093ccfc158f8de0e42097cfd6034af898e72db96f2e6e5853a1199062449492d4467b7c902c136f1e2580bdf08521902fbaabe4ea926f8d7ab89cc9ecb0ae8aac306875b48f295fc479313976f71be0def89eb658142b665a7a25b5f34c2e44e0f7f052234734457fb245ccc9d7ae4d3f4772c8482226858b5c410f369578640af3cfac3cd2c8b2b8671ae279b56d47b91dc4753b5ae55d75e57b1ff72b316a92ba32de91b05b1a06ee4d15070ebd62e4f20057921cfc70b28c3072e55bcdcb00c1e683a27e700dd3de38cee24233114b4ab2e9fce6b041b9d71da251c5c1f7ed914715ef8b8be0b7ad8a9a9c0e52f544ae58a6cc56b553045c7f28fcf7a293a1aed11fe96623451ae2aee2b4a1816179937e0890db80272a72e161274fe400d581010c20acbaad860412419cda62f842807fa9dae3853084b0f105615cfad1f19e736515bdd67c71885131e4e76c2c47fbe9e51b1d5901bb9d0a604b9d7b897e8d94b54917eb5475f5e82e0d77017fe26c5954d1d7600d27adba1c469fda89e4a4e1672b598da80bb343a076f7c755ba682a738fa03ec561596c83d2c29c75bc9ae6054ce121f99b76f043c1f822603855f9bbb51639cce126be5180a435bf7ec62f1a1e4d4ccbbd877a627ee6a701d4ec33b7d29805863fac1befc0b34ad993bd0910200c6290da8b4e86fe41c9cd186164d278a41683d53ff1d9238e2056a3f61081f28d07eb8ae8f94bc0981f149b7bf9a607c8e1383a88fc8829836ab927f7d1d9f67da12e3726e70b8667fb9aa6828ead1084fa35e7ed887733318e638848d9a2bc2cc2eb77dba460902ff3a1f22b80521356c5ef55f42240e1271ff84d4f7456a438e1a5c56dcdc57e5eabecd6cd7b2f90cce8d71d23565fa3c273e9ff925e605f1081ef9853afa4b18268bdfceedbb01935b77f9601914dfb924ebb17b7d47a3d42382b6933e6a8ca29de97bd062e6e0d4fc66b68f56f767924e4ee1e0692fedf5c58dbc074ff3c38b3522cafb9ffc3fd79aa0cfea54d738ce8faf58b250658a5bd7883369d45c98dcd87df3d60ac4c5a21b6e6df67c7bfa75ce553e789ab2230e42bb4342376eb29c6d411eea0c081b3f6918b83d34ad5690f389babbaede6017ec6e1218dff1bad3dcb775bd0e8ee8b66ae6d746e533f326e593f402f6b1e87dbfe9cb7634ad57890d271dd9761fd50d0820f399f8d67b3f8ebb15d5d9f36448a27394e19e6932c7e7d841c6ad838a4e290d33bfd35e93e3d54945bcbf6b7b817c5695e385eff3945414070a1c82ae81b7f6c03fe093e51ba284ab4010e2d62f37d8f803510541f93c21972f2ae4e9ac9923c1a1863d19eeddb570e835201d5aba42e2ca6a74c4fd85481abd3e70e5d9b7dc5f6e2c23d7656f24bb3d94edf70aeddc7dbe390325a818d1b83ac2ef470ff969c22d3c0ec6873e19b5c696110c48b8edf169247c0c02dd0498301d2aba57471111661dc68e5c33dc860ba353051b03bf665394a52014bc29e326b7e6e4b8891e75a13713d8ec36b45594247c8a8cb6980302f2480ae59e87c0a5f8ee6d3aa7d61567f2bd4c4030eb4aea7f5442a2b9c1f000a42b727d696758344809fee589821a3fb68b915f07c78f941ea3d665f48256d51417fee50711d35b0ffe3fc21869abb2eb465051a591491a6731eddd50225d07a8d359245ecd58a2b596d7d83ad5f147f9b6301ff090a305c4c63013b3eb2c20ca29294258e30f92a2996f2fd80c138648a3dad0d20ec3db9c29470e0723eca8e1df1748dc9a21b23ecfaed0db573af740d5f56c3251d1275723d9d63213c42555beca3dd13cb68af2ff3dc229fe8e234a132afcf7a2f66e5c7c8e741e03dd218d8eeb29210ff5a324f3c30dac493691cc2721860b49593a15fc10efb13a5e23f3172115b35c07843e71e9ba4a805bc930d78115558e2412e96a044fd50270b4ee2015086f6a14b5a64257d0edea2454dcecf2aebdb97c7f4090159d71a13b5be6736e0a3d8343bfc62eb4577cd0bab93a2e1e5b2b118b088334e9e06c60e6a043d6d52305edbc2904fca858df7a4480 +MD = 1544acd8bc55003ed7b60993c398baae11c8e2654a6de87b73b0d49f0b102cc3 + +Len = 17656 +Msg = 4aa06ebf0e0a4b1876bdafba6a94567c3635a251d543f51a6fd65ebe2028797dfb9190814fb506b628fcf6dc194217db39d0e3566c8bf882e46cbe39e7304a4ad25182145e34825322a43f39597f6ac1e6af9840955c9f3ca460438282fc1273d6c98c9fc3f187956a9ed2f8b1b319d643bb0836d91eb3f0b79b36c279f2989f0fe1f64a0752dd240ad3f743aa46eac35bda7d61be3afd452604df20557ca6778682073fb1c14ba90a2af63fcaa1a63033f53de8ce1642e4f88285c59c0102a3429208a349a59bcc708a16169c2a15c4d5f591f4911b4d7535ff71d8d9e975ca4bfa41a15766933446dda0f0a54afe2848c0c1ad8eb1e59fe562ec82919bc794aaa3fa5e646cfc8a940adcf46f692a049440153a4d41d10a11933ceb4e81c0ab66747b05f71e9d7560f9124b81f062ffc25bd5c45631da5fc179a93a970228b487540bbc99e6409eb4928a1c63456cc1d8fb487232ebc846fbfe7d98f586c65a162df4abd12babac97bd8b909ed210f3e107b76d68d56366c909fe2cef7563421ae67cfc2756a74812625fcfb9fe183de2676adc805972683283761f0d38c7179b67ecd423cdfc1a2b694c003c304a46e503a9e802debff33f522b98d735ba7fa2988c5e4ef972c9ecba9b4cafd270b7f1c3bcb977cc10b0f65f66c0d6d504223561a3bf2f42d1fe5d3d94da9b4b50370f8fea76678a2e4761926ebe91806caa5faa7b224f11e06085db7ed38803b36f464f7d485882e15f88d38dbb909fbcbc255b5aad34cc68986c7aa35efc6260069eebbb56d41bf0a0710b09df5c98ba03915c898868dd314d1a0349a481d021a51f4bedc962bd25b426202b517cd52f24aa9550dc73aa0328985fb9cc9eb5bcf4d2575ac88bd04640affc3b3a78bce2ca78eef6d1db9da6d1ed743bffdc79fa9abef84c7cd5bc1cef128581c1d9b79d9b0450c58e2a1ce1ef212c1665c184a340eb14090ccaea6f6659a5440f262d263f55a1033ce7917e2a3d6e9425d73e7f8d6294daa1f2c007508c43ce4be786465f73cbf9029b63432c4721fb68a610552a2a610763d4a7ab53b147659ea529c5a367b4ef09cdfaf99a4a2f9455b560efbe4b61d879f8082517d2985230e6806bb238462c7805be681f4b7fa7158c9713f2ce7e950ce6493b45f620dd2835f20035ee67fa78cc17576154f97ccfb31e8a6eba9f854327d4b68526c64daf17e74bd392019f31a86d8f086c855aacb35b1cd917acf147420f5d7e6972ecec16c715352bfb64ca2428d9bd9c0b8bd412b890dcee8c213fbf64fad9c70c0008b9fb2602c13d916cc5b0fb28eb73556e5b9cb01e46295d54273a533d487dd22a88e946e35daf6e3e156dbdf061a501a2136f4248276aedae00f83253f5abaa7b0cfa3d80053943699bc8e9bd068ad69ac4980f0199371874d5085dc3d57fd023cc96d280c4c35714df274539e3081e7bf581dff2a57828cf2bd19c34f0e18b495126cf8c9f35f3686af39b0aff081f702f917ac2521563e68cbbb94f4fba24152110fa4ba0775f8dc395b1d86273239ef930a71aa9f712e27f2e7abbf9f0e3b0c6be1b66ce71e3aa72734f4c152f7030dbc630a2b0047cea8d92a920f66d1042c896fc84310cc7e700f73f0d1f264e4c5dbbdb017125eb273c4f0c284f17f3f2ad02644ed22e526df48848c4883e071b087871e0f443a5c017cd6c790bd8d4e9ff691a6bb8c0cd64d68d31195961e2c46363b9e63f44f3dea37590bb3297fa4f4533e784ebab80f42f70c3b39976266ff7e57dbc5c121da96aad4297cd3cae4b08c7934174d5b3438598c63b50651c464a67830953936b48f3de48b4e3ae3805cf8fe6495a28ae7c636d025886160c6ee64f94762ab125e4c6716bbc7cd7e0a622f2a845a58bb8c54e573eb344703d12530678abeb5292a46ccc7354a09eee568958a0dc5ee51b46d0be44f4915df95817f5f74f9e60fbb16c59282658eba93c8d2997b78c201d29700adac276c58668bc83d90a49c2a8324e7f52daaba65a81b5ce557e37230793b7a3c9c5fa8e2d6bca17e586f660e1509ba5b818a2b8494c8aada2d867d621ae2bf2d8a625a13689c71be468ac22ee33da3523874407bec6932f466d2521b2a2565dd10dffe6e9e93df69f5b74f0160293965bcf997c011758bc08e678ec0497c04d7aa191458eb4b310db0555b2a3e64e302899a9ff596661bdb1eb691f5db4ef2b9d0be2a76c11b2d1630e5750db06946b528d7d7910db37980923ffa206216d5d00f3faf2cc29c1a1fe1f82b2078becafa0521cd06ca061b7d837425d4707c24d6cffe210f62468e873e0dfc16e9cdf64db918eeeb6da6780e6ce3a39678e7461a8daa1e732292f0e8bf875635a62f4f2cbf1dcb935b4d25dfb91f01cb0dd0d037e2a3f61c8609f7b0e104c811104b3c1381b0d1b335428b5de286bf0681d159ab498c565fff23f97c4cf6d04dcaba439eab629fbf6e2f4f0583ab39bd875128e13cb3ada210797cb74dedfd2037f50c3a86b3940c787bb75316fd107480e8e46636ca6aa74c6307de8e4aad5cea73ec53ce243d4ee6a07ae3171cc1aff0f102c6c2212bc41589117e68ad7f3854cf6a96cc2529eb3b55f021fe5acbe47a121a7f59685f8cfe542ff37786d166f9501d501b36b865e8d4cd9c5767ada66ec481fc86f07466894cc9fa3557425d5abe6b3c35f9874361c559ce9ca3d55a5170dfcab56a08e528db65df1c9f508ffb52da9796be050848a02b15489fd194c4bf8a767f359b8d6f988a3eb7ef6a735dc5f21ed824c0290ffdb81ce5cc20da3af9286c4ed39ac3c00cbd8571982eabf480382e54ae273a2a269741feb9519f26c620289ed4853ccc90663fe459eb9e420a1342a6bac89029b33f30edd7d2580a9f084809a8f93ce7dc1aea8a854fcee8dc19f848eb22df813c16464da8319968fc5726f9d1555894385201ceaab9b23b6ec2bba5bfb48cb329c30e98caedd7c4668351f9de3824644d82124b4ac7eccc4a94096798fc0c41f4bc06598065a7af561365843ff004da7451986ae5d8d30de8146de91767f2b03567ba0a99376d8c439dce13773b9e69551700b7fc8b1992dfba55b4ab86b480546c861 +MD = 8be2f63297b5c33f5179a3c6b922afed6b4fa727f597e7bc4b92555949d8df8b + +Len = 18448 +Msg = b4d17befeae36ed63642ca9c983fa6ca054cc2f25e191aed9ffcbb675996d69e62b41366ca73277112a8a9cd997e21ae5761636ecd1b1bd23c3da88f16c12e0cb2ede66a437bb9c20bf60eadcc67e00a803113fb493a0831ab4b6f6af9ba5c370d469d033c424c518af6a04519420866e8847ba2babc099353eeb700eac889a7dc85e0399e1106a7f56e089c6956c44af722426a06ea487e9cee285ad234dde2857356154f30124bb527edbaa2ec3a3f15d2115c160cea7dee126b7f97477f7272d8a89e38e796c533e9f8a8ae4c92ccaa5d907ed26a1a15b1232877234698df097c7edd417ebb9ed67bd16d73bef57a1e8c66da224bfed04dea064b5c7c4fafb4267ed8533ca85d05a71f11db8a8bd0d9253c78eff9be352b2cae022c30cd6cdaa05399546a868a2a338a9dcdf77b5643f0b95e1fba83ccb1b4c8a47aa9399de2b0a3282e507cadace8bc18304eee94c4b786969cd7751e4849fb3a2d30bccb361f178bc736b34ff38e5a8aeed80b13c5404a284c98bbb258b2efca2f0d7e7d3db456cc096452f767ed0ffceedafb5aac54ae1a19447e104ab84d5f6788a63b5f3909f3da21822e70cc8074189fe5f1e3bb5a76ea25e5c18423bdfebde95d8e0474d70624b76b7b76f558fd546ef261d03df544a681194c70bbe6b11977cafc942f690fce6c3466e12e3d9c8a8e4931dda2278a37a141397547717f637b160f77306615c08906771940d85ba24814e971b19a5284cd8611fa910571833d684f16407721e255083786f3d04184e47812f333f3a3754c105b695f4b8d6205e943d726443a1c1a632d900ecd5619aa9f33cdf1dd86f268069f297aebdde61bc07323ac7468561e3ee2a05b79a347e1b1d466b0fe01e3679066a2aa8c69f8c617676398afb378abc2dc1ca0792ff7d3d57d263bfe1f3092d8363cb6d637815013a8fdb39f246a0716a56ea6780312c634b7755986e5c231039a5f68735267ffdebd5bc5eac2147a64c5fc351c257e03f609bbd13e5d7f8c3c17738608bf941ca02ee39638965e4ed1c230150d9f25d242fc606ccd8e50eaa937e0d94087eeee8084ffed32a631c98726710df479ed7a4017ccf2dc801d9572810e29c0b35fbfa74616937ffc7335ae7826e679b9c0451ae2682b123ccfd3c07d663e334bced53dfc8f51c8a00ed86d41b96843698579f5e59ade18c94cedbbb44edf3f55227a692ed4edb598e8fbed08915bfb90245ffca9cbd5952f7e2b8aad2fd68cdb45f353654c2fedeeebe5565516874837843f54b564d632774cd456f072e9c3e41e8b24285fe119aafee0cfb1b0b4d3658f612891cbaa97a89d3246067de18c799589040075c9e0d2083280a2c7a944222c0c9ec66a196bca5b8b8376ba858ea192341a74f6b1eb70f32492b2c32f4276438adedba8ea56e66d2834c88f9f7264fdd68f0c4a5fe28ba6fe2d690c0e756abd211158ece70202bb51828566f5dfcabeb58a50da9b6b2c0908784e0a0e8605801a5fc6a0d614292d4d9534a6517edcbe1934c90c2f315a048a9ce926f61d5075bdefab2b803760ab66945db779f7a1e34cb5fe49e1da1d7fcbc1c2c690e1518451ea92f5ad11b11de2a7890135f12116953477fa7b0f7d62140d6254a27b129620770066244a236b0af83eec4f1565403bd9bd85c3778395adab5036f5929b9170bf7fe6af8bbe7d26ac07e08d0a744787ce575482bb3600dec114d651cff25f8aea96dd147c8b3b7eee6945b9785715c138cdcd7f829f8cef78379a7eda21e6b61fceb31cc4918e59e4ee83990914903142a85a8475c41f27f740ec435a30103b86add08f0bd95c01b61d02f663b5a21e116f62573cafa2cf67b73369f825c36348bd9c35fb698fbc8d7e2a972e4132d2d0aa4dc17e68fe2fef24d6b95b0ae9748d8680d63a4b0dd3919a644613c12793a5e2828ae3f5198fb8103ff82be669b77c8fe2397087c08ee9f816c9b93c6baab89d6b7a1560dd37e903d5f112c22b743e602b2746238e34be21aae9cabae55f32666f59b9b1316eab83006bb6a517f3fa81c4686329610f379b866eeb447df93bc2f6ee7aeefc7e261a282dbf97157bd97b13c471a020657df01420c6e01bc2fa3b6802fd2128ad814fb500d6a10d5503d482031591b37fb7a7bac70399a70098582e5ded519c44e5aa0faca3c9e7ca9f1778ecf90301a50e49e22a4a7409fc3da1aec7f087408a79b49ff9cd198b20d6c95d48c5fef41eaa5df312417b2afe0f9f5108aecafcc966f4cbaffd99e19fcf7498df218b7334b26b554793b5f04d39d97fe7d122b847d3f3fc95da50d291b39f9379b3b0672d4efc6f91e62a4433e1d8a12efe975c4ee9379b740d46443ca9d3b5de2677b652a897abb8e3e30ff630221da3df32d024cf4a0e143d8320eada9766d520e849ebe5c4708331e737df4d415d0f1cfafc11aeb4bf3d13104fe16d730e28490a0840300b27bb783ea63660bdc7395df8c95faefb14b736f4b8698bef159d4be5db98aff5362862f14243931cc5eb49321d54f6a97749503742cc5c94e4fdcb81ab3d8a0906929507f54d0ce8beeb88b2e23aaf454fbd06e2d75007e9e10f74e75e75eacfffc1b988a59ef3a81a02c380fe57005804d902fb5e3fb577759deb1ede89f7d0897d777d3c7c71e540f8a2a25bf41269fe66ec8dbedf8dc4086ddb2e11c1d8930d8d77eda130ae269a95cc22df580d00a42b6b9de179b85a0349ea20e164b6a1f1ba60e0bc02d1f38fa1ea0774cd18a660f22835ae545dc1ccf7c0fb35bcb8809fccda5e753902d487e3a35a01995be19981cb5c0dbaa57fcd3f06c7f40f07ba7d8b8f70b41f6b52ea24a0226d05ff3cb8a1fb1be6f1b81e6deb648c08a6cad7f5be241d61fa31f4212c8867a2592c3c231a60792142bd2613c1815358c92a5d6e2f446e64137f4392c3043287dd096b43b4a37ea7f5dc1d298b0623ccbf4fd650a49569a5b27bc6a6b1bc8a04d9bf5080376c325e523f8d160f9a054cd260c902e6bf180d1f4d05c5bd577701947573436a629e2fa10bfd4216e600c04885bfeebd6b8382a11e8858b17e016657545df2162ec902296bf61567921c106ae83f7bf041b1ed8116d8c553d8311b6a8495f70378bbc03385fff7cc45612580aed11149e8aa37085c7c766c0e0e09152ca3b8f9e77d4f0781a0500ba7d8e5d202fd188e0976467b19fcd1c3c7a016a075109fc0231699ed886188ed618839a70a4cf8884b1e042574e14022 +MD = daff699916bbf28ef94cff5f4151ed673badcba671ec5fb8491ae26cd8faf046 + +Len = 19240 +Msg = de65da919aa3115d25747cb979856bc5050e85a03e49677d56288efa4b4777ae24200401787e22412f34a9f28c0e84656c08118cc8beca0c812426945d77ba6d4c73a453f1c729845dc69d161e5f838d784ff6adf295488d1526e8ed70e389c9dfc8802f0d666e4d389320ce3460b367b34bfcacc3b6272998989dae8c732cea6486623bd54339c54703fac2d8f95b18a464ea314409af0794e10d7eb90feaf7631410225046d213127ff2991112c2cbd3038ae37b772a5090690006009f0c1965dc528a86588061216dd1fbe89331a6c98ea26b72e6de2b15983eee680bda77f145f21c805f8dd4fd365f926364f0d10d6ffb70313f14c1aad68eddfa3b9c3a8fb7b67f45443f962d4364038d6d4775270c5d9bbe6b1439d78bba7bbd179a89c79a685bddf0dfcf39fba8f96b977ebaa0cf9094235126bc241f8871b9881c8d2257ce5a514ab4a6aac5f21a07c8dcc7ff1f5b0268d892721afac167f674696d2754b122a8390844060b0c0e68e9aac5cc63878e93ea9f8240842d047dc5ca525ffad85beaa721d1d834bc7e96e331db9005dcdfae6e97151e2693f15561876450b10dae207b4874a5a8cb129a9cb632d16c229ec04bc0523d46bcd68632e8ca84e216c2519dc555f7ce01717bfe84f11a002172d26b6362244e7159191e34ad83f3bc4185f4e09d5510254441f0e241f029a104ebb5c76c5ba47825150fb534d34ec7d0c46ae17448d50132f459174add4f69fb131136996bb299e082ecb188fe59ff1917e60f0157865be49d236c3368da42005267f611dbde9e33689d71d08c7e2cc48551b46d0a89fc01443529251a32f4bbb19f50fb33924dc5d0093d3503241579179116dfe947ac32ef77964779bf47d337a28c7ffc35703fc11a5ddfedb283dfd48f7d807d28321fa8d1fac20fea03f1ed56f2c7bd2fcd4844b718f5d1923e9ec43333784d95586f762b9fbd6419efbcd9a4caf8fee72d8960c8b7a0382b0e5fef667feee1f4e4cb626dcb61feb5d4dd05745b3d48c757a91d368207a9e5bbca5e0ea80ac2ae9fda727fc7d667277afb79afeebc2136155183e7c153ac280c861814f7f6772c5145b049db4327d6a9bf3c3bcb9d149c2d299bc4bcabc95cca3c2561b4d788d5c2b324b44ed0c42929d055023a09a66268d86cb5bb3889e9bd938edc27d87e10b9cdd5a66aa7c88ac1d8cfeb832861ee8e07fea305217338ad345a6c971ee047003bcb0875edbb603b7cafdded21cca9675d5a74e38f10af62c691fb4ed436e15da40ec3b8cd23125d66ffc2c11d6ffbba8387129daae6b7a3f23c709220094699b0a7bd7b6d8a0af03ec7814843d34d51208d637b997fb93a6061b2ac2adfdd7c089de006f577afbbab0d02c7bc7f05f2dd7551c485631bedb70babe41b4310cd54f813a08e73698856db2d89affb8d666246c3c2951847859f3f42811bba46563bc03d926005a01de738ead545d04b755608a0bbf228a3cac2075fcd51cee8dd66fe482592b5bc43052d21f2a585a9e662c4d2f8c31b9983c56aea0ee6065c2b7dba1b9e4c0b25c258c0ba29f9a20d832d8140c131778f7a5371cc8d02ea0b0827fa9e48b890446289fb9dc266b0e1126047d25e64c6ef751222eb92cb035d3b0cc8b96afbcb7feb40e6b20516368c5ca21e7016838f203daa8730646cd8bb8ed52b544b40443f242488e23931bc76299c0f0232b75b8a9ac4a8834d0bf28bc72a2c5734ad84edd6dee913a8deca0741f52170fa27b19553088bcd93d1d736afb2d1aa6d6a12efc916112e9846e9a76b565da2b6fc19a9321d3af47fe511250e1624363ea076afc573091c5291a0be7167c981ae5d1b2efdacbde2596f28bfacfe2de1ef773993929dd8c31ee678b419cf70f32a73408c7d5c1a7d6999a26b5010f394c716e205f73d860d436df8f12c3757e171650f2b7ad65baff6890993c4f77e380fa6f96cbefb1ce10b50a8dd71468834cc5c1174bcc1885f4a67e49ece59d6b3104e0730ad7ea126bcb410e1b2a50ad28380cccd0ac6a775ab5cbcf437df04ef0f3793b88d6f1dc69fc3b963b5fbe5a5def8ca9f2d8dc2d8629018fdc6300fd25788256e257598a8fca52acd43f1219424ed9353eebde072b72a802045f5ff462f6a45b93f391bb41b82eb85242fc7869f86ad4f13fe0a2af1527cc87ad5dc32de057c01a162add2438185f5205cdf6595eca2fd64fa47e85a32955a2f79af7dad8051af149957eabeca7f83ff206f184f46fac4ab569f9438ef523f2a888011e4044d29608620e4d28661998825818715bd3b0baebd1a17d4b43cdf34ab55d5cbb8f6d84dd010a8c8ddb49e84101c9a2f79ef3c36d5c15776a7d9a2148a38b1a9c5d724a3202f1fe8f6fefabc8c4939e4a19dbe0b469b3d66f0b4f194cc308dc8527576291d862f79faca14f53f0f4c7d5ecef9f5b9b0b1ebb852327a1945516e885a34a8701cc1c5109d56fad176bb42d70955bcd6099c4e273dcf8f1b80e6e48f0dc8e9c0f9be1261012792eb866e7b35d63a2744ade4d864fc2e9b77e832728e1698b1b6260ca9157def8435484d709fbd1000aca473ce9817b966d8861e5fadfe0ecbfaaa95d2539a179956c341693e473f0db5f72f7bea16d6b7e46092f5164b90fe338d3fd443de0599f7ff30ad39fb2f1708ad02268382ef574381777aee88881109d8f4f90ed3224cbf050485b96248e54cced3168ae36b0f9eeeb337603a5dcd26929b87dc01d67957dca339e602f3412a63899428bfb2a59db0307491eb77fa2fc31cc7d4ef8aea668cf711e76696f14a730ee885a02ce1e7d0d479ac223e60cf735f011f25a465951ee654e5139bbe5306495ac80d418d2556898dd7681ac6acab4b7de42b8eb38c995a4c07936870ee2422321a8f596ffe4836f93a4473f56e72ca824c8aae9cf2053a3f766c67cfc2d681b7a2addc511bb0c306ff3eb1b6bed1c4597fc96ee76f6b6e765929fea278234e3289ef32f9239517f94bde3ccf44cf1f4ba470355eadd2dd39d94f97b3b71471ebf6ddc32fbf001c1d49ad7c08a774c49ee4076ac7514271d01e6899c828b0d32a1200f7bd97f8b9b91e32da2b8fc89b9a661777eb06c311824ffc6caa72ff5a3704df376a5285d614f5f5bcfea6d48c895327c392725ea598959178213e09ef59f502e9fd99af5c77f47f8b4b919f80b1d2c0b6833d1a165a17b124f534d77bda0df2773f137f312a4357b0d8fb315d5c0c69b88810004a10fee3daedfb70e400733647f869fc3e750b05916d8a930dd028aa316793162a0271b002d23cdc14145056c3ef422f6ba0741298d4e6cc76554f0b89e96d669e78999e026c9e24f15dcbdb51ee471ea1f2a5052cd4b8e48235a91528d646f88fb99d374383ca4f +MD = 601d1efbe0d9027d2a820cd50f3aca4a22af698625fe2857d8c770d9a9c0364b + +Len = 20032 +Msg = 90aba736b2b574511f7373ecc4662e3d882fd4873ab0d153c76ea2fdb139e873bc10bb3aeb3f40b2aaca7e9a4d0e6dd6b9a65070618c45de75801b8355ae63784c8bca8b7b00a68813caceb8c821afa882979c2b554466a2b3202d7be0b075f8a7e57c324c41cc5dc13b0c4d1ce51b3949cc60c0fc1f5b29ea1480ef3988467d35e67b364449dab81ce5df6233a3da14770b433540674dfb8325bde6487efd8e5e556c9f4d62f9228c8ff0fef4a213be751ded940862639ee41b8c69f5d9c3b48afbfa764ed251227903e729472cefc0aaca07e53b5ac69c77be947f28e3bf7521a1cbc22ee209404b076beb148796a37dd9392ec3959d7da3d67e30c9e21a5c8b0d878bd7da49046a64244d43fc2fef58142a79875c11c7cf2af184c01ffbee3008d7d930023bf73fe2bb56bdd3e32aa24183cd6ff64a0465839684f5e28bb5795963b521a104a03048d80f6854d9dec229eb3363ad6fbbcca915375173f138cccad2269201cf87a660227e2dc73a9222940bb14bc7a9756c6415a6ba1956ff9221cc356b68c2350af042adf5732dcf294a8b520f8d1fb9ad7c3ed7191de2933427fbe9941f0531c2c1dfa4a6a1db1c3f12121b9847fa0ff7b83ad457c7bc7b18a4044af66ec103389ba26a29996b01ccb54816cc3d61ffb2e1aea55a5f0d3fa8609260779c1e34d245330667a3060638fcd64a94b67d1246bf45500c2dfc684b224b3400f3434bfa8939834707d4b4ecac64bfd9fc75cf1b1aa5df5479b27d68b3d7cd7ab959d0172d5de6b00cfc924e90997e815572bf99ba7659198a570669dcdf33cb37874c90fa46398cfba729c76f1e8e750a9c68296761c745a9128bb5630b6fddb5f646cfb89c84c21cfcffc0109af79e621a5431e80d30bf1e0b95b4100288967bcd463b2f09cd3ab7249e9f3cb6c2e3a7150b1b06249c6f316babcead6d86e0d035d43c26331edc14468ecdbb1af62b1fb4134d894b143d2a5a566b00f372a2fe56793a67c27e907b8b55b3556d9b601420f631392c9e1150ff1df3d33d53c44b57bc9db85ff63e331b7db8d258ba69cc803c2ddd6f45d3ec8388ceecf2312d006126cee2b28cce851d8e43f982592e90fd6bab3fbc0e6b460d1f6413bb14c7649b3e33ad624a28b9b90ebe93948397a7bf0d1225b903c1a6c66b1e12400579c12e8c35e01838341719879068353d8c5beda9ca58112bbe54d6f362b0280b2b5d41983c457b5ddbe6628021400e91f5f2b0c83ba06a8e4897643f99b41c2fc582fdebb1a234c10370bf82d9e3c686bab52ff1cdc46d3548b998d82ce7c37830768a0cfac0ea6c95fb561420190624c3ec93ace88ec127a7009b458111c6ee52810f83816746677ad04fbe5ea97674f8df0381f4c40e6c4bb5950e02facc9914edb4d9ad5eefb99837d308fb5cbd7d42d5a8f9592ffe0d1e1fadbc16697e825e00a395e56f8e6ad9770a7b5ffa84488718a99b7f97371107880cd6242784b01904013f9360cb8324da1b9ef24b72dbb1ee2ff0cec46180ed36dae496fd852b2b3ff95f1efa4d0a60a62ef91d163040a6a0627faf7d2563ba723e6fd3b029fc7efab07eee05bd0a77246d154625657f507569d0888b2bc1558460fe430b192af97c51236b49c288509cfe79d73eba9e95b76d6bc2b71aa2a6b469194ed5fdbd830f02d7fd8e058ed35609ad362ad7a75fac95d9c6c79a0e954a81485cd57cbe06f9eb210c9b2e23e899b73acdb163a1959e0aa1fb83550e0a8dcf14d5d43f34698336890039e45077af2fa7029a07951fd3f34bc8b5f0a9edc67c04219aee2794f508974130cf1c68de9a7c3faf6a8ae594795f972316e8263eafa1a8ef309f6e978cd43748988fa36f2042ebb63588ce28c466cf966dd19d3a9171d39bada5e1b0e7c74a48e7b111aae8806d780f98c4d9fbe8d7d69d6f3b054afe08650e40d58a44f9e3fa638b98d61bbe2fbda1c0afed476b19ab4fc7e6e601d0b017fb79306bc9f06824b524213ce085984c920a75adcf79fcdd2be38724df6d34771b57db9c9e36438f85849525605b10ef8b7eff61bc99e833d8ca07080b5ffa4e17e2be65ec53da037ab4dad7c3cbff6c3423355135544577ff844cdaad2e6c639622c10ddbcd97483cbbda9b305acd8c3401ffc463307c6f471a40e2ef60f1804120cdde922ee12574a17bb8cf92e317342046046db7f3e45993ca67f77ff06bc0e3c81e3afd1f63ca6fa778c9faa7d5db89f0577c71139ddcf7d1b3ed13d3edba739c16fac3bbcae52c4521461a828ed243e706b8e54464794e3f0cfaa201ced8d92f0efb071c226ee03dfc6d7bdd09c0561158489befffd8a1fbbb46b6e2d6c11c6b4e6451aa330c93775167a41e0f4ecb5897551b7a37a0f7ed07f8d6decd1d44361d5e2acdc5684eda685c1daf6824a9a30906ee4fd47959fd3a388b5d7a965a7ac51118ed9f29185088736ff6dce9f8d9f8849bd49e0dce139b305bc7a6d2641e8ca4a5728af8fac1fad4215d3345c0e4aaf6aa735d015e177105d18419796d0abb4059c44e7dfb1307a8bb4a34e20aab6885a393d80011f105e272fc9b347a26990cbb4bb35f232ff517c627a865dd1679590f9bd8b0f0899fedc898f4ab955a7031537081477afd0c48c95b5779420d279976f525b902c7864e5abeeb85c58e86d6a9997fdc096596644c4e09c44078b86e5e0887c45094042eb0d74a6a13aa2524463076c7d750d992d76886eedf3f75ff513cc679e0d65fb5534cd70485969343b19b2eafeca41efbf31195a0274ba675d6f9a97fbc77e00aca835bf8263a185a72446f3d514badc627b10082218293f776a7f97fec5dcf569de69df1fb7efe91129101190d2bce1cfcb08d3bd4cd83aeb7ae7e20767274c055dc67950e4b8b1118ecabea282ec925f97605744915c0c12477000b649c167179cc7f8c668709020cbc3658ab3be508a66b2fd486409059426847e7bec5ff909120ae7f0b1cbe8c77686b0d9d396cee8bf8d50495373c9e9bea1a5d8ad47546253fbc1606f0f3d5df5a0fae0612a4fe3183bdab7ee30bb7b6664315d2b1c1bbbe9171f85eedef08cff9ede6efadd6611f76b072472b47cd1b4288b69d442b16e37e95ce1bfafc4bccadcc5a5ff2493edd377601faf6360753e8b2e9f475fa801d6eef3f46fe60c660de73b55ec947bef430d7ff9e2e228ee5be8955de2c7820f3c948f4e5e364a312f4ab9df41a1609ebc79b143cba5189592ed4a36351eb1fedf76894039050076a573cba2acdff464a6689e9db820c21389e5d7a8bcc9ca4936017c8a5ed6c1cf170eeb607ca4a9e9a746b26836e9a7e0878ea835f85d3d86e6d1d38d5e2ff0a2ea5893693f93f38615907733c6645c754234465e664d8e20584418b9a5753f9aa5fd4e5d743263d2a7c25760f525325a10733c92852f2ebe00f4c6afd34ae10eb079868da8e46d47a478fda031a0dbf798c7e572e356a1b8874077c046159777b039d6aa5c4e826db210c4521a6bbbe631aefb6fff78899841d376ab9c69c57e2 +MD = cf9030e5639a24ef94de73fcf17160f0a9a5b6b4a853c7289ea9b4453176dbda + +Len = 20824 +Msg = 8475d687ad7e6fdc85ac08ec0367750abd3e1ad85c8a000c4d4e2973ba622036b9d1d35cc37fa590670fc0243f03a857242516d39e26037a9e86036270b3d41eeb753740eb89fe1b018d67ce681ca87e3b39cbe2e6f1bc05db3ca147862569a5822aa83b0de6a207b9eda5f065f89d076c42e20c1c3154346a39aa29e3fe0753e6b8ce5611dcb8dcf9f924941edfae7b1e07025a282ff38fb445c7117186d5af7fe75398dfb46920287789c17b1b0360b851d4d2f233bf9f2127a0061707fc41b67fdc0a5fb6dc5dad307f8064f3c541a4e8007f6385e3eb1aa9dc10bdc7a491f14714b27a293a1af2ecacd8c1ae1ca349942d66616c85fc059123374b0ff3289908a09a1657aae05e72b8d17a952f100f1d0391d532ce584ba81f84aa27148d178a2bca1c865536598c4c7377f0270f5e4a2c07a81de58955b676fec0572d48d1955b4875ff62a44b0010c7a1072b299ee44dd0c076f2178a83d0ae76e767e231f1d81e070afab29c97abd4de2164e437b311f507841f8851d6d69ab51ee9e29e654b54bcee45e9b519c6a21787facb927f1d7d6491926614792fcc6346dcd080bb5cf07bf56ad0fc4e083a3582146315101c70bee373383a32844c69a567353eb9b2fc2b6592f0dafe1aa31e58da36292eb4d6ffc3eb872bca7d20b083b3974228f67fb687e4cfb8f0a3e5bc5175cb37a08db80e7922da4e09c1521f2ae781f3cfcf8203a389f7fced4c09f5b70daaa52f501dd34d3fb90db6f9ea9de12c78b978e60cfa01a8f010bdbd16b3d0c95cdca3a50e36876aaccf9bccee14efaa06fce9e22583e86a405a289d14dde6d26845c433921f6ecd3cfd7ee3686b9d88b224eb6dd586a2f77144f6940c5b3f50564759a3b1764b8df0fd28e55f8a33ef0499462c25eb75760b34ee4c0515236aaf492c9c732366d55138617bdc59f90685c4c2c91c9aaa0f9494d96a07f2dc48f9b503c7e10e07cbe616f04de6bf36f6bc0b27ecc37c88ec96cb7f991addb113bff2a7cc0220769737009f0285a734e632d73c3c207759329841a87f47bbe9f38668e052df3ffa62cc5c3443c1f639ff6d91ca623e74630c235e1cc49575cd0fd87f75017e54dd542e9378b7a3958e68f79f9905225cf0a0be8aa2110df3a5903c9f3083e9486594e40e3307326c7b4a586b71ced6154616f12d040eb51db99d3b30d77d2801db4b76342dda776347cd165b1a656189ad9744af086297db505f5c9a339a416987a06d6c2dd978633c18bbd95b71cb9e6f4b407877b5bb16b3fe27450c7f3e67b0bc4f20fdac3f52a054cf4cfe9b1c3ed3596cf018b127b42ba1249a2ad726e29fc6a7b763fad41abca8d81cc98a5d5020e95080b5fce59ffe70dcff544802c49de7fa99286b3da1d83d60b085e696bc9f25758e143efdbd7494d6dd547ad9f4f047d22d14a884d13c3bee72fa59cd6a98336284fe2075f8d7359a9df017b35ae00db6ddee59b1902fc90bc9ef890c42523b9fc83b4957376d7ab1a5f1c499deb7622f118026cac8fa0f3d1d2d1e5a2b1766b5c49363ab62808ca25f1e2b9168bb6dc42f90b5d960e6360fd77dc1c0102ddb2bdece1377605693f53141f4a6e03657fda0e7b1e5403966065da51a44d6ddc38980b303c51b37b6338520c7dd2e6e4762cc4dc0f7503bc6ac186dd0f1666f4658110cdb9c7a6d1de3c2854a403aac667c1b898a1678367f88709f8ccca82b8b1ff99f4205653ff18d503628d6ec37dbd2f665b84aa070b822ce01f5df8459bb669f35e106c4f45ab997fb07a72d59cfecc3a7f29bb0329a03985db431e340fdb66d9560aa7fd57ff0ff9e90bce3586a53eb18df1290c44db2387970caab297a95ca8966f67f2a89b9f0e56a1cf87dd38ed78028b6286ef8b7141dd2b3c65c5a8e1ed79bf4aa3b9f9dd29a3dcf52103325eea775906078c49b961381f31a21c426d248a9abe94fea230d83b3dedb59b1a197546da62129d8e52422269291c0e0e74ca4352325af92d309697250799f76893c51b80251cb5d1d281169991280d758f5b3ea6544a4be352e13222d162caa654464ffacdaa47acc09a9f10f84abd101353c6d78307496d2e54b6c7e994673be1756eaaaa2fd58792fb267fcd187f56b75096964cf67433194d7f84aea36fc1a1dee2006931d1eac02f47268e05d6c1d1be084320bc7eddaa5806d99f1446b04bef64ac8944ef5edea36bb5c99745e9f918a66e9cadabb567e0e737396b7e90162340ff68cd605c54f42eadfe416f27a3dcfb891f6ead62c8949b4e1c1d99d9b7172189a65fe75bb99dea6faa989503589762233763d66e42cf9d5ea5af0b05953760cbb060e6e5830d397b4d016a158dc494bd5321b9207d1e58197494549c370089462574e17227ce8661541050d6c9d0edc8212ce821cdfd65eef7620916230f25896400599a3e6e7bb25e59ebbf8368e7c3ffe9d5fabbe9414fac9c8b0bdfcfbff5fa97d1b63d4963deda229d4840e91d416decf513cd5e74cc02b87cd5d3aea32c57afcc6e9afbf957461ed7f988ddf8c0e9aad7f588e97ae4a82a310c8548898d19bcbc1bde0286bc20b33e5bd1b3f4b2f1a7f1286506be19fb865a288b09dda8af4323567cd9a66e086432d7a207ab982478d314f842c8ec7b315ab25b8f19ff96e784a6fe0dc2ed5bc65805804587f0e071e053a90a25ccb5dfb5225d24b9024efe7275e80b86ca993e106de2fa145dc437bb6cfdd95f4b29c5fc0126874541560c5f5bc14f4c865f5fee6940a1db2f2e4ed6b96d3cdfd845a881d73e13594d4aa5bdb0f0659e910c9054902fb946f5ad0ba4c18da1120497ebf90d1a554f867b3f102e1bdaf78b2f73e56b16bcd241cf12a82dc5b2b050af04c41b31c9927d865cf92b9a1be1c5466f13628c391783e2d87356abce153cf987759a1aececa2fa73cb2201a4d7efc006610ef69a813ca6e178c4b67fcb29e5e880023c3b9887260828a9d902645b5ace50d8fc7da9ec79b24b006c244cc812ac65dc2c3240aab7ae743b86b0f1a8452b5558f43efc13e9cf4c9233780467fe47a990516d5f8e1dcb405f913d1a573db1f0f7747ae233659cffe2b2d7acba074ecdb752494f91d6e30f7e9f1348d892d6b64d03ae06db7b9ff77a50cf801edc2644c98552bb56618a5420f6bff7bce31e17b20844d46caa7cb5d193bc3906db62a14f91260d5c4c2590df3eafc164bcfc87df28dbd5775087ad80f24a3212939855a1dc1fd013f5495811ed7f10707f06a91cbbcf848c2c5550f102e5f5c2731bf468eccc8e0e0b6a1c61798a7f50a7a0de0357bc5c0b9c6a42ba3c1c1e871881e02d3998a1baed1c5036697e6895d57fa91b732ee6761f3af5351458f6e0f24ebb374920a59b18b4961943a756b076d79cdda4739e6c234bdb0a122929507ef6d84f91d1243f2cd740728eb1e4210a6d1bc24236fe5e472176a1bc1920663cfee9beba468817880901daa11a7b681e84c851f2e580bd09306a8478857682baeb420d28ed5ba4c8ae3cda313d971611d305153d0bb018d81d092aee0a8646573083c3443219674d5b63d9a5b7c18b82cc6474772616f2322bd51d7324ea21b0632169b2b14bffa475095175058568ffd5690837a13fb9b60170d4ae412c9544f7ad88eae76dae5cafbfea25a34d0ed7828538f529750 +MD = b7c40a4a44459ec7fdb97c0a93690d26fd3e938cde2a9d656e5b88de624e18fa + +Len = 21616 +Msg = af7eeb4ba1ed0fc4cafb8ba07f3af532a09bc7181ae40458b05e1faffcce1825b0a7e8e5227e1f4c08becc407f9d9dc3534f47c77a792844e1e82b896c83edd0387e1e1423d129278ee917ff619db0505063e4615dc46a189e0da7564148d18bcd6a5481aace757ce4e235852c2178032041668bccad12f9703559c083040e7ef9d354d4c25d4a749313ee7be8103b024a4f95efcd1c6711dec80b6d3ba1ead24321e4b47066f23722e209899e54427556f739356bf9b288702e83057106aeaf33bdcdc9bed1b3ec19b9505655d4d585cca01905ab2c3b86aed08a312b1ba13c520dd6bcb386d6bb01ff898b15783c5935b1fe05979d4a322114e79973c80da2277ac935576ea2cd601c7dcfe628be1b1994b0e0363527b4506364e450f538083b6d6ddbb36f614ac178f4cbd1cca4f0feb0f73c90da1a35c326c7bacb8a6b97144c8957ce72595aa97bb627dd4c37026e6d9bc2ae756add03c3d9c5ea6fee773c80e650b160d423a28d8a8a1390bc79f033631997ef60d397a462aab78d09cf3b724c6f621f18d03316399c79817e7d0d6a18e9532e4440072f2a143aca04c79789825ceb996d87e57e8c061a05c4344b7a82dceb1c5e4bdccef8a97a0f2689da2c52be53b41d703e2d4870fb05d5c935cc699866a0f51d9de895117f45b93a8bc5823ea35a6fb5c88b3881266afa6250c695c5cca152ddd2e4caf55152030533bbdb83e272aa7b0b0123e2a21a7b2826d1ce0c2609beb4042c5dfdf9204d105976253618e417ed8ef5d03b77ffa0423e56db157bbf7fcaba2716d07e95de83855e28fe4e98fe30d9d00833ae00b1d820bb8587d3abdd467c3dbf17e89b008740dbab848b75a76f74fb93724d04f514556a940a36b52250d2d61e793f19f9441055786fd76559d0e8dc39a15ff5b51c64c9d048adc59412455afd9f8cf612e1803455683a505d7bbbddc268e9ba3918d54200e63fc37db15c312230d71c938615e00b17bd1cfc997865f56ef53bc931313bee8ff5972358a0c455d52672c45d59c1622367b27b52a4db9b5c8a60ad8efe1e60e9d529cf2d9779603683e0ec8bd33f213541fa25cdc9a97cd9b1112c59c7521f9cea61c858cbb90afaf54e553b0bc312f451dc41336e36608e71368fb7113ff35139285802c4ed1aca85a445938ab3fb09a14116ab1cea0f22d2b71fd2664da3b0cc64c553087b594d39ca05bbd779a51b390fed5e5a2d503edc7c21d24de4f960aaff587221cd8f2c1ba9dddc7a7bd8d31f300e74b067ed8a986de0df4f6cbb0adbdf59889749830e3327141efc235bd95d8ac114a600acad0d73a31ff34db25568ee10bcf059ff9c872df4a8e4d8f8d4fb074e66c56056504374b1bdc1efa6ea5812c437b664c97e22a4c3a3ba01756cff8efc9394f0b31a435953df41bb5f70b335bf2070d2aa5b0972ca3607089b4a730615c39c168ab4140bd1aefc17a490813e47a0a70a6adb4681518a515432165e59df1d633ba4c5be717351796c3ef2cb15a5dfe276d1a7dfb7a0c6234d0277c96ea3ca73c8caf64a7281f04023f63d99a22104a97da767dffefe13025bd216bb2da8f25423c2efbff842b5daa29219f1cd02388487b3c24b3db59978e66c9b3c7e38bb8cb6545725eaffc6ce53da30dd7e92a2fcfcbe612d5c0b7f0c5696ad54499950a5e84ad7852f004ba49d9827649d176b984590ec8c4249ee471319f40c7614d727206b16e6b18d6de5e792a98e12dabae1c8f10a71d9b60daf85bd1a6bedf17998c87ebd5057ee53189b915c64c523b85eeea963e3089c05ce1549c47a97785d82474c73cb096a27c5205de8ed9e3a8c971f7fa0eab741fd2c29879c405af1ac6c059de160af4a0e74debef63286666014c43d698eceee1e4f2b3d4ac51fa38ddf6a38ae1632d732ae3d7c2e3963f0595e43a965d836eb90c181347611cfd72962dee783f67856bbfaa55e370c1f20a1fc068c3dcfd5807a0a9534c72d50d5a77dc97008066a12d1e17e2ebab3a03e607673ad997c94f504b0cd05e5208ce530b8939ce450f0529aea30b25e34d092bd55f4d61fe55b91583d936e79f2694fec9ca433c0dcf35d419d23b3cc999564e11ff0cd7a14139e9b394e382babd15a02b064fd43b0597cec82bff8abead9fbf45fcf5b5011a262f82a652ba254ab4f9b7c3cc216d60cf7c4226d4ba42d83a01d9af8484ae2f226959a420f87f5df76de899249e056f216f00493725f6c7b9b845ad55c0f91ea319a104cac81945417f45ecf5b4a36f52198b09b3683aea9345226cd5f482671cd3015ebca393bf47a04845cc0fc80fc5fe6afeb5fb8fcf5b3af8748189ca771407f30873056f1a6e737819f409d3cee190088edb5a85d475fc204ae50b41ed1d3aee988a781bf52a5b5df02a2d570b5970ec30700f9d98781b42568cf379279cee5c857f762abe0fda525ecb04e26382139e9a30753789d61ac72dc5dce0c50794e565ae8a0c039372fdcc530ad655fffa88128935f437147d37473c22193401b0e1afa41e403439b7d8bf4eb9d3612788513fe6cc441eb7b51b295c5d72f31fe509c9fccd57ee770b4bae3a9c49f39d5f5278d5a2b7af4444db4ab3098e809683a65b24f1c380e00fff2f932caabbc5f22463c253cf772ecef031bc90ec7b1a2f4fc999360399e9184b99e4d585f835b34f775949ebf4fb961264f59dfd311f4a7e9be604a8a816c6b9a3ac416c5771453c3a070fada71f4c8a5ada7b31511a57bb5877e82329dd9dd1a355dabe47ed1a5312381f751c2e44f099f7d33939aff97e75eb4af39dc1f02c3f8e1c0c481d955c9678f3e2b28d31bd98ca1065792482407aacb79a82488011ce917fc6e69758913d46276708d07579ddcdcd569e3c9499ed38c8a865f5a02ad71c908e91ced6a98d3c14829d8c929def6f648cf73ca2f3341bc87db74de2ffff9bd8b3d84891fdfca765c5df161b92244b706932c93fd4e5b261baf4b5cae99e7bc2e738891d07022475914c01730f42de7b8bdf46bdc778b91ec0bcc1ca703a48e99920f4ca7d444fde8562c33b6d9194d0553b59cf43739c4a2f6df6543c699fb73a20303c9929660b02c1ffc725b70b2965f566c6c15cb88e6796c81a9692dcb64ac4bfe613282375a9d81bb8d019bde12e8bf246d9aaaa5609b5bb60374c7c516b6cf85953d6f4c8db238b92f53009922f7d80b1e4c3ee3b764944d7670d1b32ecb77e08d3ac565f2722d3b7eda08ab6e93896ba8b6ef0a93dcff8d2ce4b25b57f02b5672b1eb4b30e5488ca51d1bdb9dc4ba8a325d26e19e0c85c04d58d285372fd3306c2a4bc6f01372f3caa5a2f2589253b2e5cb49317dfb0c2c005499fb768f57b7a22e4c9dda0591b716f803b946063c29e987c2c2dbb17d1b6e616f84bd199f303d44569a95c28e21b0a0a8f510275d376519f75c5e37c1d3bf06bce7b4d393e664f5d183ca525279c025f7715dfe9e26810a52c7ae94be9d1acce8ed02c71c2040c8252120bec407700d5af4d691e83c67e039ca74d05ec0a73a5b5e4ffd2025f945bb3c400dcb12e6e2384523ea21c33c26162f58f4888690d87d02457b883eb6f4f99cd14751e44a2bf92deb1133012b6150bc01072435fa2eb7a08a4b3db39f5e48087c753dc3c5710474d60c043f591b4f3a181119160fc56f02c67526ccde0a1149e99d77f87f3bc3e28ee57ec4f1db7b70441b5171f7240eeea2ff2ad19880ba27bfcae6ca9f119d3eb8a488da192a3c282e2bb38edad3fd2dc5f33309f849ad6aa70174834d7bfa52ff4f09c7f98ffa287e4c27b4df5ba387d95828 +MD = 31f5a714ae87d73fd0d87f52f89ca7e7ac7a93599ee3b9c254cba83fd99cdac8 + +Len = 22408 +Msg = 4bc8e541c7586b52ec1ebac0d124c77d2d9816ccc772d0042d571790a9bd963b71515cab1e95ea2a5fce8aadef1de30ec4eccb9d8a8b5cd74f1b4a7580ac73a914a2b8a4075d0c5b0a19ca8b79124cfa8decb901d3531e47dcdfc1cf363ab2359c84a2346af6f86c54c62262564b29c9ee6289008a103fdb3c6923a6b5b0786771bfc2642fa9d7e5a49f393b7010a3015114e2a2970be61cd8811903e456f0c8fb1bbf3b3ebed14f646ab81daea9e22c1dcc6df0e28c3c9016f14bedab733fdfa36042c17f7d0d31fbf04611f85d0dd1ba50d2f153db69c15f80606cf2509034cf55f2ffdb2eb413d1f98c1e36764d799068b8add33f94371cf50188a1360950e8c378fc3818ed7d4e4d324c503ac9ab07dec72d4802e678b319d54aa16bd2ba57727bc18084e1f8dab3dfa32ff2aaef8779a8789c6a860e8eb485b9d83714fa832aa45499bab80bddf43b2cb9e517cd78000396b5c09c81138eb8dd2fe4f799d3b39bbf6d02993fbfd8efeed75d39ce423c7f907d4b5257ac6e17bf8eb9a21eb1d4070ae2a4ac1be827a3f172a037794df5c56dda55ce1ac01d4966defd3e118457903be2e71b27c0a9fe3e70f73a5701f27d35b6243851b664f7da05f9f2fbb302df5c54150bebb026a9dcbbaa6aeec7fd4ef1f801b985f809c924edf5e763a89e9c741f74a6f01e654cd33901eec905dce0a88834793dedd4664b7c3844d1caf26f8c2d4d14bd732f8e2cd444ef6d2458dc624e059f01fd8f77579c0c32cd81c8feab65e77dda184c17ee72ba94648d39ea2731bc53599000a35134b7d9e035e6f4d9af8c08d073849021fdac0635a747b1001ca0bfce0ef193402c8260914e15f71ef382dd26ee9fa1ce5c626c68d94adaf4f4fa08e7e028ef2c6cb5f069341daf8319122564f064f1fc7724ef858d090c0ca212592d6c6d5e1edb98b0ef50c6c60f0a840813e09c29b3363ab7152a4df04f0e30d8271b8a881c6373c9ab08d8e1cbac20adba280ff0fb81ebeba018de2ec5209cad5d55451631eb8d6225c51aabbde82e3de12f85efdd4081b4acbe846d76c19d01578368b0625c2fa4e6f055c9efa7f5df105dc6ce605b4239c38607556bd77dfc9e0bb9fdb99ca1b775ef51e669cfbebcd01a99348dba77a36cd72e8fab4b82c5b95701a63d942bc25a2cd6a83149d1fba8cec8c96a4667193019c2c33e06f58530cd0752f62c15ed1e0dacb751fe76c621e1193602e55cc495b58c982def1e638cd795aaed4da66248fc9abcd1d5f542c1bc55235a809ccb251151b77fed448853dc715629dd274660606a5fb7b5959913c544377c0070576896dcc83ceab01b104464fdb2c5e0c4eea1e2470d889ff39c65ad1b6f4b2090e5acf4726ccdab454876364791ee19017b27cb1ddb355b77e60459773b4bf49d24bc605d187e7b2e85dcafdecd3f1a288e59ec8827a4114e780b11f2e9e634a7ad2ce93248e468fd4edd97676e9f2a5fb0a10f31fbbd099fdae09b347f0627d50966579902e9bcdb2ce1b58d7df893ce6866fabf5e688a9395edbfe608921650bfd072395074bdefa650d2f501319b9f3e1176db598dde52309947b08972493f57d401bb396eb5624493b64a02328bf7ba084b2df2144b03334bf9390c8e08cb59d9cec6c6bdea5b8e10293289e3ab0165b4415c33e51acf266d9f2a98ce9b1c4e479f03fd4aa5030d30f3559c2c42e2c67d201124e893dd9266ff2a361a4959be853d1ae8fd2d81485bdb5d46f59ac566ccaff3cc06fd56ff9ee2e2ed5a5cab2ffd70b28fbeccfec7faabef8c26f9d0cb07b7ab3325a261f37d0ff9c5761a392b16ff73f876c8a2137329b678a7a82b7f9800e0612ec827f86b5018c656cc2c3938b4072d0b6a94b3301e571160efff0ae5523b5f0ab8cf95d06be7f9e2b9abe2cb55133667fafd2f97517d5f391574f2587564349fba825314290d65032bdfac37ab421970c00410128cce6b1b64b1c1573002e8d71568b89f5233129f68ef21e57e39e01003d2dd0895f23cec22dffe4c4dbd849913a84ed9ae00099fb904c93b96a3932e0d8e1ee13592da969825329e923f0eccfa6b9d2b041d51ec66462ba2ba2638b224615c0434564eff0eace4b5c82d915a13d82cfb1e31f26cb7dccf83b46ad98391731ddb5ae59f11cb9b9cf9b732122aa61883b2c2e5f509f4ef3d444a187d8b9cebeccd6fe8d5b2191be3d226f49b24fb522ab9b9e161aa64a6fe4f45d82db18cf24e423a06f9cc3e543fa8de1b333059afaa76cbcc3e37502a990a6c51f0ddabafcda284e81246836d3be3a850e3360a578953bf4f959700a296df892ccef73f4bf05615352808308f5ceb4a3bb21e547152b75f116db4bc377e356210cfe891ed3fc4b59644fa8de12c288c83a8d080258a0a71bbce75cc11d773c1a6fc96e9be43552cb36c04e28c320338d0cd35d59dbbb3bef4c0c277572c036c965cea8fe683714133ab0e76b7f6e214cc2a339dfe6c1c0e654c830732024c2b87f7ccca8c8881bebf0600928b012eea1dc6b31e7326ac29b579a0c2c9e3b6c822d625e3d8d8eb69fe87c27e30da50806ba99ea22170cbd68d5002f14556a9090e00db22f3fd190a99353c82cd09ae9e5fdcda6f33d2e1df95d78fdbcde48db8f37dd8cf057f716b371857e68a17b20ea06651cdcfd4560a741830ca8a13ca9b7b56023235e45d538139f9f1908bc397d74fe9061eff9320d31bce04a36ec87b4c924393acb644891e9f0bec07ed4800aca08c6147dafee859e64fd2417af01f0e398239927c8ed6b752761f17c6ab12c660212572ee002caf839d7c8cc1a8516a54a76d0ebfa202f45b20d2e69c5395ce97909bc9c102b27cfa9e4aabca59d707ea99774806ead57cc1f34d9ffaa8516b4dc10b71dd6a4369513c84c71d6c7a8f03429f69d9cd17f88cd6d76865120d468b9bbc95caa1a71e925d7107434702a7a7892d99c0b38f0fc5b0ba6967f993075808f85b0e10a642c5eb5a94c35437f9df5668ff4404066a736b3ccc87c5a955bdf005eb331e087df0cd879525fae12db29199c4ec2944b19eeea6b64ede18d8c1392c6ec13294791deb4033f2a0c7eb2923080f4188118b4e21405142ada7396cccb50c3eb613db532dcd96b1b0b2da4bf2fd09ca8a35a08cec51c5ed982020c691e8ec34114e4e9b7b75e5ea916aa220e7c0da0f9777995f37233ad7084934d8700d372aab0a78fcbd824925abb7ecb0ea98a99818a01ed0eafcd78666ec1ea9526b14a9ec12017edb3ae9eb66616004e4cf9eee7378d6e6ed25c48418cf86411d4bac383c2d9229bde6eec32a2fa523bbabe39812c76aa928e62a5988bb12a9bbf5275f0322d3064ccd7f365fea641559759d1e5b5581218486318b1c776de812b1aca6a9ba6b1c6e39c5cb6d5a44e3a474f709b8eac457e74f00a43ecd3d060cc7639696bd03730c70e70abc47ee9486f217df904ddb523b87c02c55832b0c907e75b632f342140fbb0e7bb4790930e635252b4b476d1a667798a9c962de0185200a8ee623d1065d6262a7beb73ec0ab864a7250a022b85267b1a50132ffedd5f349a718175751e0ad0a1540cb354abf2dad3e0920a433e59e32a767bb35d967405b8832957dfe7ee42f4da47b95d909727816dd8e98930966443862c429cc234e68b99a66eb14214ef8d850900672719dd08334b4a9e1a5050fdf5a1782cef16797c3ba52489bb0348e3daed2321fdff5df0c77587d24a0c4ba24b77ae9e7b9d1102df8203c9c13de18042408bee73bc3cd390c43bc64e4eb6e8fe2b6062063d5fc7fbe9a711d3294bfb61cfc55d36d4fc2925c3d0fa958c252a941938080d7bb834273868c29f59eabdafd749de95ee1e5a0cf0e1efce4918ff93dd8000ffecbccfd7ead38c5444303f82f393e33f4c15eeace7d9064709f4c073f4f2dd6be4d003849d71bfb07cdf0981a +MD = 637871150d32d1739493c27ef6293fe42723c75cb66d23d77c52795b932799aa + +Len = 23200 +Msg = efce593367f770763fc63ab5f2a01a102d4a4c2625f3d6352e75bc828ad874fc7e17991cab27e40f9c3657179c31bb2fca884dee6f35b5ad8efb37ecbdeb2df2342db5b424fda7f84af4cabac38947cf22d75dc8c0a157195393bb7bc2cac58e389713c37880a2797088f96610b1a4395cbee47dc03da5c1a4c5b0f6417d2218b3dd1d114fb9bdda367b4ee32ab0bcb5a1c64ad6181387ecaa1a7f26e10a2ed8cc883a6552aee162c5542ff8bb8e758a1975f898702be6e48d198ed34b7bcf15ac1fd1882869f45a459b066f6853b902eb56548e6f8ba8ef744b46c427d8ef197a2a4c437af2df0aded93a0edb086f6340eec77fbe3db75687360fc31c27752a5f32125cf04f8bbab694339ebcb57ff63fc7ba320549f961f0645296d272499183be8b9b318adfb2f85759e6b260d00311689370ebb55857d45d7506f2c053960d561fcae6abc239caa714b066134cd2dd59bc01188bbb825ea7e2db241a7b80268236afb6b81e99540eccc280d5daaacc239bad35d30928b3ccffdd0f87a999f5cb38144abbda18bf13e9e5a7af62d5064d9a3cea932c92fe5436d45c0fc527a3b88dbf49bbdeff333fd3e183a7cd99b25f1f75ded50b0865c5ee87b2bab77357d29d785cc11296d718f27ebdc8013ff8e19421baa08ed110a98ebfba9167c53a9fd1092bd45e24d428af84fd17e70e015c600825fd9d37288780441c9bbd6574a98f395dfcaaf352f770baea9e6750f558ebf2c8f22080d5e82bde7fe0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a8afff53e53f7558b69fcad8a924d948cace26f6eeea2d96e71d6493cefdeee55ca22de8c504c70e93db5e6b7811c50d9449ead5d28e25254ce9590e09b16918ebc7283e66792f84164b38ddbcd17ca2912fa4a6d3fc81c87828d680ee8ad569f67d52b752131b63ae7e0ea1dfca5cc251cdf90c5bdbbfeb095a81bee5c0b0630d334206105916f7dcd2245a6982d1c756c33c58e2a22c27710ccf0aa819869e80978a8d19c1beeb21e63e59e291983c00ae032ef0c672e83fae32e67dfbd467010870ced6c35fa80e38a132c35d0c9aefccc1f11edf10b7d5bd41e50fce0666ff04b94dfff485a8f237f177846bab6e84ce1d31b5428200c3b87088a626b928eb2ab87ccddbdd788e62a39abe33f121602059836ca7437d9a3e4344099c490755d8e2fdf8cfa39133473c1ed95c7a4e02422b48ad63d168b9ad3e998275528cbf9ded23d966948d71642f665e2ba35ecbc1f703e00eb86cb293c70ba968424398f82b9118371cb7d937f213c55808de5d1e4147bd0e64f41570711cf6ebb4b6625622c81d9798cacb4128a99738174716c59e868cf9739942c1c14ff356164fbc66672b522eb510d80e379a5c626b2389466342e84640c6db063c17175dd389f7776d5d6e52ee348ffda3688d5d50ee351f33ff477b68f73ecc5604eb5998ffb427a9b0cabaa0a0439e0086928f7521aabe852e331f68b4fe72838bd7efc30b62e5a0d7efbc78de937db397048f54484ab2db523398ac9a8a97692e7576ee57943fe73555ded36a000b50fc7bc35adca58aab0db17dc0e273b95b6f4c85774ec8a4e15b85984cbd19c54d3930c215494bb488b3354522574a46fec0b5920a6b60a333ad078f4152414a2ccffc1200389daed8d547756d536ecea7c54932f4380cc932cc541a5dc3f6f85443062998051bf82ff66084fe5151cf0adf8fded13f1d65831be3d00e8cdb5e7815177f6949572f0299090a51ebb3b68c91f20c2ddb2326892e3f26b0074eeafcc88889e07fdf91d53fb96bf48cd513916f082176b6ae8ad975dea4feedc23c56dfd1ef9a1305ef3c5cfa2072bf6674ddd94ad5283c2fe0d8754ad1578ae5c11acdac06f2ad7a959c6333ce48edc838b653329ddee627e72acefc12367929f7ad144f7686999e036a04fedbe3a27b0dbf8f37c1e74f16fc34c57b0e3822ff6eb23654a4c271f0d74994c3cfef880f325dcff307fdc18dae8b0b402bb932e6849eb6541832c1037fafa52b20a8e8f56515a7dcd66f07ec6c8202d3d156036fd7d726c6475401567b00b88d54bc4fbe048ba96d93d76cc3b4de3eaeb58b3f0be6ffda13c8b2bd6a47e13173029646c99f04471de6b37a9425e431493ec5204b207d72c502bb4faf64c5c27480d348c8a3240376358fbbee1e386d3be390519e22e473628bea52a65022cdfa75dfe00baf7f50ff16c8ab222c5f54ef3a796d754ca94e74dadc40dfa88cc67d48388733125ac220f0fab2e0dead8aeba9ecbe812c40766465fda4cbcc684e857e59b8bf8a5ad9745a928daa93b771a9b866ef12405e8dc9b3bae8eb4a59b8ab9edfef0166040971ba2c75dfea019bb1fc7459d90747f70d5ab0a7ce80b5b7481017b4b933dad4a1a625160140208b9cdc9199160f8134b7b15b4bd62e10acf378bd84478233bd7c9518d8af4478a3b2ef4b1789c7bed9415e375fa2a10f1c263f2de82ccfc3367b0d84584a559e869c8b1d7f84ae456742c7c15db467f58768e9e55ae97afdd21585d3ff52f1e6a6c266651b9741b941347485c07c01586123ff7056fe224812e484a44869b80576ccd7de8642107ef98eeaf1227a0bcc5bfff65b56eb44367b508051cdff066f990475c64a15a92b12ba919fee2ec5b5ba555502f5315f4d7df21f88fa736b796011a6d8d1726a320f601eee9e1aed991ebc92039c50d1f18d41a896586755d77e7d1162b6f8d23861e7d969bcced20afbae33d9c6ca5ac73bb7b226526b63fe469f1c1055197f829cea67adc4ab217fd392c0f20f1e48330bccd2a592c004524af04d5e4634d0b522c0200740304a6c3912bff8cfcd38c9701970907435c5781e292ba9050b64448601b912aa0ebb548e96873aa3478b0efaf61263711d15d412a21d7d1beda8b55937996c7c96f2cd56a6cd44042ddd582f1b4ebb33e673fadae3b966f56c2c9bfeda275142599f3b23bbe8b17cd0ae496ed16bf427326e50d97675e31bf75e4cf952098d65d70f32786e7fef77e05c674cb120aab581738a90c2e98e0a1fbc6cdb47b65d818fc127c706d97a7fdd86164b42d35b794411ec83616aa44a65d5501713946e1ff4639f823dabdf1f18b9fadd0f1a62ed0ad80b43da9fd2574a27bb2f5e4a2b8ba5551e4c7b5d79b0324679946e5c6d8b36147b3486ff94bb3d21f2a6703e026f032408883874f6edaada06e3f91fd7ce667590e7fef067e0cf629aff01f6af349e3f02c80d78c321f2d3475e27eb4e410c7a00d0bb18d852615808ab8bfa7e76f724718e62df6af79ad0af6583351d6da8703f7143df429ab370e03e66bffc907e62f93dc11f5ac91340a39c8383e1bebb16916c11ca5324064ba61a3acda63bc488fe78a0cf1f30eca1c855b16e17bed4cbcb03bd506688fa56cee1608a07b339f4e5a19a5524a997728243854a4bd8561e30eaaf0819240010cf06809b9da17f35635b165807ada44165c897aeeab5df7c67835f57d7afb8183b0c0378e480e4d8ec079d3e44b7838ce767311260b1d164d35046d62e6672cb7764719858dc0b4de429a77e4841c5c39b920a0b6a66dc6608f40e0979f2c0a918a24370770d7302e053cd9e9ef6db63d6fb8af0544f310e7cc11d4866df323f93380197dbaf8c9664f85825c521451c3de62c67bad5afbca359ed396176480d8ba83484d33cd886f69a0f9a376b832b450476e80a84890f11210642f6726281467544be1a3fe742f9bb3c628230263f60b8f2e7cfe66d644ab8e10b923e22397821caa9fd233958f2ce772512099eb7358618fd7775bd5ac47415d9c143f7a475302eef18813f477666384883727d2117ee518f9dbcf950f3051d54102e6340e222f9e3e8c4698d08f5084342e5120bac745514bf26c1f57ace5000eb57e59d336cb42eda7758a80f0d5fabccec1de5579a6c23384d77a6a0425656cf4b0f27ed8fd6268a148d071d11b6f8adf1f14cadd33f41a58bbae32803a8cc4882405f650ed8716426674897a496b052912c8013b116e6937bec495674cfd7c3a819d25e6c4385f51787db232887495734304e1db6bb886e9 +MD = 968b4520460224001f8686890dad46fcfe4dfe3fdbb4f9b1a4138f37d7d194aa + +Len = 23992 +Msg = 84c2152838e14d026568ce7d3764bf37a9778fee4885dcdd3ab1944980885a57787b2b20a6934107b360374bb6336fd8b38db16361d614b5315222478b5237105ba72a9bcc5c2f5c53a5fc44f0122b93b108e0ee7772abb1fcb4b08615e00537352d5bc033a5e1a94d1d65926c6abc10aad265b711c16978a5bd852ea59c8b730ff506b862d41d95a7b2ba5db2a4ebf6a6d288e7b72b16b33457eb66c4ed936df0e773aae153acc86b4b42cc4b267eedadf090a6f2187909af692856f93be3cce0ebe9bf398856eba1cf4608be5a3d9fc814c71b48f05b2320db8527ccef4539e7e9b21ff1dde2a64f280e3993a7f2b1fe26736f431b84a88e954a01c56f7e5c0ec914f191b81aa07f3de285537463ce580eddc96b01bc41027ebf0b6d2459dc5c73585ea283c48238f60a17852b599cdcb44d52470bcb9683802c6e4b769d62dacfc58daba5a9f3833bcd15b1339cc394010a325f9f784e1982d851e8ce11958ec6a5a63486919c67f475a860f4f4ec88db5e903b278c12cc6d0cddca927f1e823e3ed3c58e4424ec0948f718d629bfbf2c8f946409d089a527103a7b2cada4be20da3ae72589351a628f2b644102e341dae66861af095cab992c8f830263d04855bf0321b32974fae8916bc99d490116ceab31ba7f0232e7aba804687e6b4a2ac43557fca0ed8b938198e0d152c4c047f1261af8e382b45f46cbc3b4068cb96c54865eff549a22ed16eab103c83cc9da2a9f48a242508a1d50def1ee048dc514eff83fb238fbe01190d007e76778c3da605de64003355b29b329b99fdf37172c7cd5239db2d76e06d5920a069842574c7da91a5a90f9cf8955f4414eff5257bbe26331492bf573d4cf78e1e7c1602d3a68cb0c7950648f472087b183cca62dca0beb923d0c1e988464cab5134c9becab090be624ab3d436bfa2932c7aefa3f60deb46d01bb1a851d7ecfad109fbb3ca848b0cde4094e93fbcd24eca00d1738854308eb1ea2b1e1a704d0f2682488c7380d04eb40d25d250180be069951c6be41222d341b27ab552bde15aba241ca3263404d68c06e33a484fb40a837e2cd799d636c6f80b4cf88aff4e6014760482831c9d46cec4698b68d26f2fc0428f413a0ef0dc4d6b0e6233e2e8b1cdee8cb4fab90e11e4dc0540323e91b27878c053153ac585ca383b8cddd744b23ef411b4fd87ebca66a452e344e2c04544874c67ebc83955f72940d2f96ae703f03d200d1c179ac2dcb3eeff116d7f6a9d049019fe55c0bf5c84dadf070c44097a105427d6c6afadbf9115fe184d2374ea6747c3fd62003442f1560b9749e04545141a8fae33aefd77b2846ad9f050f6c525b000496b5c5772e54ed32a824039d9beffbf12ecfd14ad9e96cfd7058c82b5d6854962c0599b44e731d02163f879b087503095313e85b9cbe9977fdb4a9b24e02429ea3f7c72315d8b8d2c6d5d6751f3c88eb5ced7e334b0e94c650fff92aad9090c4007296ee0dec8649becf395468ac523e5044d9f96e402690712301ba037c07af4d60503abe174e100816f8606c2d28ab380242d68ebe177e6606098bd62d6f0892a83b32afc2daceac915bc0b228d4da1b0e01f232ef2f37399258c5b10b9076d5329ffb6853f02cb027aa9dc3031c7201505e74e23b3564f2ad388f197e31a220e6c6c0713459d21ec22c1e2528c91cf3b0a184260af3ac9741ef1198ee1c337aacf7a753cbdd67fd492a6c62fda37ff716114c87c42fb83235c674b5c317d2ec6c79d89582439456a3ecae02ec7144186af7f18cd1b22fca7105e0f965eb277c0e957cbfc0550030baba0d8b5cfd125b949b9ebe9a44ba68ddf47cea3d60d9347a93bb59ecd9539375dcb187b50d92ca7c4579a385ac011361db7112b13d911c98bbbcec70983788bc99c17d5e6a6b6c0b3daac5fbb4abd3e501e6f92a4cf63b5154a8ffb35a5215773b66f6c1dc464927ca5aac652261b051af04251153b1998ba8a61b1de64c458e08c779452acb6ab936b1de29bfcab38d2df320cc1b693e2ffddfc71606ce1dea490d8e521ea1d6aac7d6e5b1538fe381c3da72c56cc733269c7b8b068080a771455fbd507e7195e0c6f24963a6574916b9e1a1620d737f56cda1ef551d09ea0c46e68fa713e2b0457b2c90a97fcbeb325632370dc8142aa9d8797c6ba512eea492c98bc0a59d2ec02dad44eaa892d3bee3f2bc2d63523d06042cb9b1e042bc1f72313a01fc491738259cec8de75509a3a84cb629a7d7bf549ae22f8d96425b672e4622d3df8f7497ac2211fc05bc93c7ed66af6b5c48b87de2c264688eb9d3620e2fcd9f17174cc408673a9eca6e7b14fa682e5a4a50306824f5e2ab91502dfa5a15c3cb6d88a7a78192efdbfd14c971167bbc5e389530fda8a331bc67af7016591f8ac1a68b8d2861ccb91b685583c58bc7e0dff0bfbf24b5f2d705d87da49d5476ace78dc7072fee3c1ec6d1dab3fa9f7322453877e6c5950d5eecac62d1799341b1a7e9e51ca4720ba844014b60f79ba70af9d965acc88e1a4edbaa0800915ea91f68818cd56f3360dffec04f93a4c78d21619b301915e9422d399b1439cdfdd680911e6538787a644a5ad58e53e96a4aeee645803595eeac856e47318215b7ef5b8c881750a88e3e71c10ab1a8aecd09f9f0a1ff092ee481dde27605e551d61d39c0874b22e5b917dc9c25609adb39f0cbe875539cc915e8befdf0386969a087a195e3a9b81841171451ef423258f427eb348a24f64fc70aaf277c7316455e561b7363d8192a6f65a04a3000770d46d7e13ea81b20a6430e38c8e45ef5ce57b12fc2d1814d018b2a08edb04172e37928366d96df21b8d11de148eea00dead5c166eaf34b5d87dd8dd5a436ae29c0d44171281e19016bb85f330f63e167821ead475391df50a2acb78ed68cefa68e9e4b1ad90671c9a942fbb5850acb097f7b9e5b6675e42e3c42d0bbea78abf133206dbae7178e8059b51af012ad04fdc734bc28896603ff3ce5ffe44ac38a1099a2d0d8ba19192e635ae36a1f12344b44912e38252be4cc8ade6c925d35360da66b9bfcbad4b9dbae797fad120204f9dcda1d13a38d2e9c0e75404c8b9554ef44c5f7ae4f101790245a154155451b117956b03f69548a78b0f1a39b3cad8fbf5af60c77e194db55ac44ceac4ea3239a024e1046e1489f67589cbc06d8438c84cf4701ded829ac302e81d27867e4c19d5f0a64b072301671eebcb415c720f6468d00ff6c9c97322b9357482c07cf9f2178d2d50383d6969e5a9ab250720c730e7b692da795a6164dc10f5851952e652e35ee8bc97e00c8f7847edf403fceabe381cab4192b1d009ea1f02c6e7bc7bbcc7ea5ad89ca77538354af636c973048cd876abb4ac7c697271b44e90b206247043b4164cccf03e14bb377655ce3f8efd475926bc1cf6784ef1851bab1ecc9b4dd5408d719f56b1755871c0d9989ef4a01338aec06adc96ffe7e61c5e647c3a860b1432ff8a4799fabbae784aaf3dd015baa9a65a1c7b4fe5d37ba32359917cb943a3993f144f321553220f217878abceac00afe1b87f0dc1329a42a234a8ec781d8342c8d3da24459d90f7f69afbd22b75e21e1fa5444af283e69d53ac2f0412f717a2153f74eb1c195fc5127d240dbc96d2833c9957920a55c505a016a05e4a7ee549bccdbbf1095502e93d957d99029d3671f0db457d6916da0e100a89455f0380ac27e4fbc08dbf1ee6b08a851e9dd7a26ca5018a67af458a294c0e5673f1235e4bdf3bc0f419d6084013b2c6f8def48ad5f19292eb3d7059e99c88a444816cf2ab5b38b7e64e285387efa4bfd2566274304f14fb72a415cdb18a0fdf41803ed23d14422d219b348510acd6dc1584bfe32e15ff208863a45a33ad1a83f58e177183a30ebd207179119cc3dfa85cfa5b4c020eb7aea70caa83c26e2f2ecb0b8545117ff4c48d71648d6edd15a0f317c3336e61d4f2590fa6def055b42c5c7916e169137affa30b855d19412f62727d962dc5e7ed9818dd17c04ffc502904673acafd0627bb2bb06a052ea86349759c329f9ad9581c61057bdc33ba79916d467f663fb071836200711a117b77d266e4270d6feeaadbbc0951974e2896f1f1a74347c3bafee4e06c39105422d3a9b0f5e1fbc7706c6294692765e1bf3ec73c0a24e40b7e165c4154306c8946ed1bfe3201ff1407035d84957beca0f6e78d96df92df89825e55ff68e5a303404ac5a +MD = 7245beac90fe0088b49f54890f3be23d4c7ae1b7427c1d456c2d54c387e76f54 + +Len = 24784 +Msg = 1dba34c739d7cd665e9f0d20008c12ee43fe4ec5553a80be01b2e3758187a5ae944c9a3fd10d322a3b8fa90915da7daff8f5250c22f1005111288c5551c7d837928a3c46fdc7471dc8aef91208cf32d2c7dd6b4557b1a4b8e5919d3a51b349463efd80a3650ff4892e83660581731a9ed93c88399b82543aa77580ec2c52e123c02ccf20b0ec21b4949759a927cf1b5d569de4b0976df8207c5a9c3388ac8616419f92838667b6e7237038c5a3ea1e556685e772f37978b38eca59d70eca2166e9df2f9591869b6a03986c229ccd0cd02f7ef94656afbc38054c1f9f65b39b5cdf73101e7653b9855b975e88bb7ecb14dc0f82f56815adfa09695654356fda404ce39be6e0d6f68053f375bea807456993c1ea48d2b63140c0a766be2807c85a57b83ab475163ba21536188e0a6f60197c1a99043c9731515591b8a5e4824cf129795451dd1b7135c6e7b1be8abf066bc1a4f7f44dc29676eeacb2d111e84d4ee9ae5086c1ed7e7f918fa717cffe1ea687e76ddfae3e46f7b482bd0a5842b5bac0e09819c9954cc99cb5626182349013f96a618c07132b1cce9a421761976b7bd69693d29c1ac15a0fe14a644a6a44fa3cb53cc4ff4a2c2d647ca7c1d3ef57d95258a97be384c77c139cc7e7d0a721a37b50674f3ee93071a0b156d05652611e5cae42da45db4575d06c41b4bbf31155dcc448f56dfb2131a8c0b50c94c971901e21c6b96b28228e6ddc2091b456fc598797497e3485e6b5a4312e3c325b6f79bd389ddefc73480f1271cc4763d9c8f8a554d1b13a916745bd8d272adb11431f647c3011a1c29e40e9b5ad9e6f835e775e80475728268c291a5a0a9c35f1d5cb3973e51c021f0c68172f2b5d815da621d9a51538a54d3da8e5233e5be8060dc464a725c6c6917ad1c767af4e406d883d3f4aa21c5a0d620b436d2b2f9d55d4540ea059d69621d0c11fe69f3755bded12b7f856cbee6ee39b5ec239dffce810c15fe4e71519d5f681473365e16755bbe96a36990c0a78a89d5ea9d035acc6ab547efd394bf8b7d55968d667141f3bdc0a808cd3a95634995c6bab58f756f78b559473b53fdacf5390aa580f97257936bd20826c6879a99f1fab4f39eea1849a0cc8ccc5bb682359703440c4342017b34a72a1cc121cdfa02d491ddbe23674bec04392d0854abed03f2f16edb1b81b3af89f705c6fe6df85cf6b9da79bbccfe1bb2c4c3e6627a59e46c263f4d7968fb211cf78824680b0374d3a5803e0dc9dea43ac837626a7e2adcd16ad406e627a05db293fa760915a9defddd5587a3ee7c1a1ebbee28d737be31c527f393ec3e51a9fd64f3486c2e69efd7c9c0f3289b54e1d1085e963337b2a7a9f5e470e62d7d9a4fe308f7ebb5b24be41368ece650d79fe4460f36f8ee7693125d4d2a8e7582a34c768221023c1167b522a3f167cf92a8eaed8687a2dc988870b6842d2f970f5955c815406a3215b7cd70089d4738049137774b14cb8286ec57aa3ff5540282210e3038c27e282dd09f941d3cef5aabed6c6bd34add60d0532990b71f9668799ed8574343a89ec836adf7487cda880711fc43a5a652f7f3418912a018510964374695eb3083f6735e6b3210c9934094a3698738b3b6c86e3bd898815c3e85c06edb8487159adfcdbc69ad0cafa424e32626cf030f9352afa6aaaab177996e1cb9f99bbd6f47ab25e53be0a29b87a550fec653aaf65317462671c1d6d70c22d7bd3353e4aa34f92a4d24756919a8328cb1cadd87248096b01fc066681701349fcd1b359352cd4a2968e5d3d6a6a06cf4c3a6c52df696518c071900cb941313c38e13c94ff58b0ec1cce26461ceeaa507c8ec9316092eb81870de4997faac50e154bf87810ef8c781fd9cdf90fef18b54160edfb5c8946b03f1a27953a7477c77d560e8cd0b90f4c85f878deab34f70685f7003b3b171cadcede84865167ee70574ba758a87ee2723873507e5987f0492f9c29766404167e1ea221f62e4bd3118b72ea65fe05acf21e927c607faeab88279790364118db2d16ad266c38e8cdb00013003a3b1716d2219d240c8772cfca55305e02391b14c29d49bc71d7068557a0761060c87cc81c28db720bd79b0418a1afbb63b4d468439dbc0b8c736ca20d52e3435d0bfc69d81a958ce4d9f1f479f35bcee01a0c80bafd4f3a4574e3cddbfea1c1bb6e5ea10ce1139a1ff33c45f5337dc001d48b032ea54a71244333aec78cf9b101586c1ac2649dc5458f439f94495db84e48199aa87cf5dab24624ecdce5333bb831ec79018b7b34dd14cfab5f1d43df50df7eed2f6c979a76e67d301fef97896760a769d23ef4116feaa8105d97775d8e0181a3cb5d7adcf88b08219a936cc0964f65903b6551818379967796a040599017ec648435e4c6c19e8b6854bafc0bce65ee9647e8dbaea2286188131ee8fbdf8785da63dd1e805885cfac554a8d90950a0924fbafd7c05361d0eadbfbb56d02bb15ab6f3d703345aa9c96a62d687776a680e261a390df1f8cac46f61df0d48119637fb13d21071173bace4e49d5e9f6a1197780aa4d318d0fbd436d6ee05be50b39ff2fc67b23434af0fb55881b0e9f649d8c60ad55e12553cb8a47d4cf27b5f85dd2f3bec4b0639607c5c4d0840df855d3c80a95f1156fc09ec28c390363794898a1050f45d5fabfc8d6a20b560e89dd85d4854869f6f4bffd944584c535ba62b2146b9f46bb8f2df8d3f720da3bdb657957d9b005ab3bb6b2a8799d5dc5feb073d22f580f89aa476267cbf758ba755378fa0fb40d5ccc0e83a5306c133cd099a3845920e768d377cd38277818b3df104a652e3bc8333030393472d82fc2b58509d1efe11880932500ee128b614fa205b73f3e2f7f55ee829cfc48cbf87e37dc6e62fb82e8f871b7c43295187db54599873048777aed8e6e73a6b92db799dd079ade84eba0f9f696e1acb707b20f503381e252fb0121995b88d9cee4b53b2f6c55ee930487aaa82a1f03804049824c3d6ffa67a35c1996b1a13e8ed9378ab674673a2fb5e73412db46dff8ab8938c01e17238c57d2fe0dd7877c01f488b1f987976960e606beb9121dea2831bc59343e4103cbffacf88637023c2f1eefd6810eae242e7f2e7127356dc917b8280c3005b7422b83332e8a38d926213db322d46f7512a268a575e3aefe27cd29177a3ddb4089b5cbacc9a042d6e1de3a1dbc7c14b1dcc389b3f175e398aa536dcfcbe228a3806fbf62f051bdbf166efe75cc01632d299acaa20d663e03fab06a9926a854a9ce63489ccc24115d6cda70037ce9c6b0a22d14b8f33c2506c0ec0abcb316c71a1b994ca185a1a7788c29770ef2bea401ef864d3fc882026ba41034829cb4e9be1117b4ba4250e5d81d63fde0560765e9b7ad5f7db7bd3cf84d23d031060a235c56e7692f2bba3444c891e9bfd14d7030a2a830bbe5773b76642dc5121ba1dbbe921152486a66fd8535b923f48b172f9e5a81aa407d3767ac9037fd6d03007aaa6e9b564d24dca6630be692c6abed09fa8440b456a58628647a475f8ae6af69e9918f5f8584a599a6f31d207f5957660ecbeb354385ebe664ca68d3b0eb370f43a5f45439af483c169468b466bfdeaea0d48c175047ee0975279f41283a1fd37f4fd31cb1d04df97b97ce36c202094a794a2a41c51017f95f39f6913bfcef1f673933a1350d3d379ca3588fdc4d61a061d3ce9bea0bef1eeaa974ab2e59305ac10b1cca0d8e9f5d42610ca5fcc66d1920177f0d065dfde1de1f21784c7869eb566c977f807cfbd53578f4616995b51d7dc0457f6331c9a8024206dedc82223cee05aaa8d7ffda063d9118ab6de3c115417328d947addcdc1fbb2ac6259ee3b4517e602e5b3ec25822547e6c4ed81a6734da3103fbf9bde6fd31961970f535bb467ebef751623e33ab68308a559b477d1e9d67e5c73ef42c644d50bd05af9fb996adceec0492d3ffa27636efca55d0bec764d368f2a40a181cb7629c2cf3aa1609b597f5bbf70b24cd259681f52d3e91f7d67b72c6528611ec16d39d2de9dc3b673b21fbbdb96d0af41e5a2a1d4c1760759b69ec8971f07e9e13aca74fbac08e78ea75e453ff811ae1098ad18cd9e6920a5ca5bf8428d1c9f855f4a4dc8edb7804679a9ac5f1d0ba5b8d2c5e88fd308f7ec135d1ffa0b059c385b37b1a8cb762d25d98035bb9e15329524ab85ae07fbe9971230c42001596c64af21452dddbb2ab7278095d7c3c4e1401ebc94aa95a8922157757947188e8cb4db857cba8cfd2574e419312656a11e44218789f814a57e35437993f1b92b798350d2ccf161c289e9afb88c399f20661bcd8ada38fd691a2d76dbc8925ba6bf7abf97ba44f491e48feaed2b8435c +MD = 7ad40c2eb71a079a2aef82bcbe7afed765f22ae2845659774d67ff7c4bea17b2 + +Len = 25576 +Msg = c67ab91a0ba776515d1640eed01382c0d1ef96cc1ef8e5e116a84f73331dcda6d5c954a8416bfd44e93e64b4ee704db7e3d58ee4d4dd293e86c4b80801080edb4c201bf5786b10d4df67c404ae235635a1f715900e729c4b2594417b763db12ab4e6d4aab88ff728c8f829841a14e56194bbf278d69f88317a81b4749aa5fdbc9383486e09bff96a2c5b5bdf392c4263438aef43334c33170ef4d89a76263cb9745f3fea74e35fbf91f722bb1351b56436cdd2992e61e6266753749611a9b449dce281c600e37251813446c1b16c858cf6ea6424cdc6e9860f07510f7417af925574d5a9b6a77748837a8e981a66fb020a4b6d891a64845e8e7937aea55673bf667d043b9c18b9cc2031c3e856255feffa56b5731d21ffd66a10ed1bae5048f69865d725bd1c7f03dec1ad5b6e93f97a4f750388dde6a1182d333dfd96eb785f7194130f1e9c101848931497699710cc900f2070629cb4495e4cedfd66114a247b7283a0c981b531e30dc0444f18ed0c458bd5d4b4297e9486c2c6c225a9056a3e68ee81c5b1b6773998790b2900d963f753e85cdc77481f2cfd90f5db9bf25c41dc1b5a1a165b11d19d0694fe361af92dce21afe16c5912d865133d91cf591f0c37d3d2d197ec2733823086d6a2f8f56f644a76cbf2fb96136216434e2c82de27e2de91f01bb0e3e8b1bf89b92cbd7f457d2958a2f074d3635c63ae1a9cb4bf1b430440828cf06b77907b47b0bcafc1388188fe6f4d0df053bbc027fd0738ea6ec40d878cd1f4e768892b65c23a18e0cfd82d0f3af30e1568e7f65600535788abccc00d18d204804402998ef88e3e0793ebe03409c9bf6c2c48cde22a6956c157c2e67b2d77685d91658b6858a06a5c0a206b15e6b7671a26460c74843180bcfc104778d4a867a8da19ca9bed58e307bee09559d8a5504ade4a7db314931ca2211dabad144d4a86a4861ed0bc9ff331379425a9e87bc022ddbae648e478719a4f51dac1f54e5a2179144eafcf5be002fba2e4ac1c2100caaa0010dafcc6c8cd0d149b5d7f93dca1e02b24df2d76f3a194749a0b7e80586bcd82c31262676963e3ceb829bb041b2e62336609ded674378a700e6d167e0f2dcfaac69820419c8359e7f7ccb08a5eee8694ddd4eb65abeb63000a7bea046f3737dfe3133e3ea955f8c721ef660bec0cd4b651e95b09dfe6a98b54dd05fbbeb28d88e02bc245d70247d7fe39e6700eaed4028aef36ac5a4fe379b53a6c4945c55a0f8689b63d70b2cf7d555337a20cfd0fde4f8f8435624f9a31f53a29d84c9924db9dd52110ba8c1622efe461882e200cb369714e8c400e551ddc86428e1b557654edb60ca5feb9a62f95956d09bc3f53eaa13c9c993cb39ca432c6c255f922d5e23dd57ee48361070a0d0e620ffd846de9bd9874449d67f72ebea1ae143028cbed57da7fb593aabf1d1ff648813a15e11a852fe075ad51ef2349c010b3068edfdd016c170074bf58cf95f62846bb1a37e4c3a6e714b29a0bec9bcbef19c47d9a1a04334fad6fc65a8736b50948c8bcf8ae3da89109f569d4ef7c695430b11c820c28d92ea4cce84bafc9dcf36ea922abe2bcdbe73cbee7d195b44246df1794211c3403bdced34cb5ae1712eea0a576d8e708e7f095553b8a460affcd0e3c0cffb0f25b0311cc1b1fece80003c605dd0725e975b5fd018f876b4848f1a569ada23228890856fe7c12d1034d39c91281c104272d3c5a0b08516a34c4bb8de69f94089f35d486b29815c532a2998f118a8dec89b68f96bbd06fad971c32acfb095d9c1f0670873096b0303ba729014d20f445d9b9b697590f699a38f85febf013835470a4e343c09f6b7ae703f3070d697d77ddddb7472decc89be1fe48320ce7909a59b835a0aadbcf0bfe5fff8a9890b0ea5ecb9c8c7f90121758d9f76a99aa0cd5a3ea6e883571634b4862537037bb1506232a6d509623d276662f7479dd877d6c16e197e2aa8aafa38db5f9a332133534f6a3307abbcc8d1fd3a9c54921a46dc97a46b896514d3c7994fff909d1bf97da9ddeeff236b3cd7c67eef4c1ac29635397c0d78b72e3913626e9598c5ce7c362e182b1a04f0119f4eaa709c8c83fe87235f8feab557337430b1b23131ab542328a377f6c4edefaef237b0a48bb0e838e1b9534dd4226b4060b3c5f85544f9bb460a7603e7a71f7d5db130128cebdbc0f12408209802492e9edf413cc52dd564e2b785cfe1ce3980fda16f55049741b5ee2a1ee17589458537bed49cf5c88fc6ab2527b947c5b6503e82defa7745d29e1535f83f0129e8fac7bcc0876ba77146fbedec6e8e202e71acd00f617969d6d012c23467af66cbe5bb63c59a9b3d426c517c344e29600a5bc50361288f95f6f263794419e4b236dcaf4e3425090c4bad485aafd6bdf7c27523b774be0e3c9b8b93a5b7b455bee2560fd69ce539a715903d03bfa69079ef642546daa089d03cf20fe1ffc556cf36c859877029a16038abcbf1d42c6549099f664be36e86f363cc54b89cdb8c75acda18fb5e80e4fa2d6671bf9dd680f7798d43212f868a08a880ee941f554b44ccd1ca8ca87958c74c46aac76d4397f7e7c468812f6717a263a659fee7c137af1f65fac5fe71814a4dc2e3a3d2e1feecaccb32c653ae94333da3136386bdb6370cfd0621b11803058a61b8df5f304a2861083e7b4ccba44d8f1da77c9c996b5f1e0d894a70cb328b9ab9a6c472ccfe4d8d11d81a7b2cac53e06c827469e2bb99eb2e008aae09b44ee7211a1dbe068fce895ebc2e5f6030e8ca162115af282b79dcc4e87cd961fcc1f83e9f25817b732dfe7547217a04b66eb4a12fcabce83f716b68bd9b835260776678b2867d9a3cee54cc058e4b68c17838a40afe13916c032f900c612c59a3e18a55d0baf2f1617214e973df542ad677be852f3a53c235c181c1416834f62b930c5c962d920f856bc7442e9f14b969ffcedb1909fde9211f2a72e90b5d966c0e45036f78cb52fd4de46272481da2f062d1fc54e76274b28e523b8fe4d6e8e9b5ccd0c9071f5a4d6ad4dafb64df660e63709f6f5d21f36e81b171926f613c291c1c4b2f62fe83fa754104266fca711854130ad4c5dcf3c9bbc0bb9d056d2eaeb3bbd92f16f96e98ef91849fd37f52a2d741e501cbc3e4387ef8700c615b2eef2f1411348d90888d2c5eb2a44a5e99324f85a492d9a7434f6dd1456cfdcbcb6eb0cd79dc5144505bcdf134f00ef8a34b2f46cfe479d7af82eae3923b253f62a21b308982ec95549946f181efcbce1f52190ddd9326d577578897fcf38216a33db0f5b6c4c9f413ba29f8001ffb5f4bfb7f63340b5b313951b966dc229ee20b760485882e73f10c22d95d55fd082cd78be4bf99d9a17b73f61ff8b644d641e9ff9858740c750cac87f799ea038ca740a7cbab457a7404a5b90e9611e6b296ed4eeee710fb37b7834de74642bff35ef5b3a68eed6a5d7d4d0f17e78564de5183d87ad9d58746820ee93aeae6aed6d48553f802e825b835e88cce65775b94122c10ce79381d2becddde54e04c4c91787dfd528fdc393edee6a694986e478e4964ac4c7dcf4952684eb1e7ceea15ddeb2e04288e20113bd8f5e0fce8e0a52787bbff872ff1785474fff8562f5696f67d342cfca65a4a49a464c079df64e0ea2da07f01384546aca35016125a085c85df1ecc4130e140e2c1d1c9adf461a760cba0cf4d0f4120b563fdafbf0785b306615c6698e66b9191c1bb60dbc07d5505e23b54cd1d6b8319473709be904546f2a46b80560f4fc8d124803ab5bc0e6653f1eea3f3fb2b0a42bdbac8838ccd84c538caae2b4404331b5ade9bbe5f9b77d58b193164211612cc47f760c0658509086ef8446b0d3f7ceae515184813aaf6051e7991a017933910765b76d7b3122036d782e7a7c34812ca43d244f580c36d5d1c5e290a5758e9a9b9755f4bedeb86db02e90c641eb47134077486492f6b4a5805557c3558ada11291d3ae9f8e77996f71a93712781b34b2a09a70b56819198089ee0fa3a427fbc58fd4c9450d5cc46e9421dc5557d2c9b09fa288ccc3336760ea8667c7c24e563d141753cef2e1b442eb01708f46719cd8653b22e1d9709073d7ccf9242b875d03cf19c2bfc7dcd596f6c6a832bc8e4a7481b2f3b713273133a210584b48795ca4013a9a7a0474a4d547cfc7e2327f4f2f85a86f9ef8edd61b09fee9afc18ae1885b183f90316f9e884eab741030cb1753d199fb1c032adba45ff741c3ff32983b4d214694c7144f1a8be8213f4ff83fac05f62aa0ba64de6a1487e51a8a16cd3757f433ea4e1923267fe443e1e89d2472834b72ef97323ad6d82f3825ca9e1d06fbff8c232ed4c716ab4e708a83106261ea08683b22099d751b5bdf78693ef414b9a1b3b1f1dd87758e752babb80875c4aacb7f25d35152bf4eac3f84ce8fdf0b01895f292f99f0cdaa06d9b7efdbeb4535f32c3233a0172ff29edcdd62f75a347424c2fb40a09f798e620f51a3011f5e2c2 +MD = e909f834407a3bd9d824f6c5e3ab96c30d71e37ed5edb226aa8107b9b8cbd37c + +Len = 26368 +Msg = 1b07b9353e1c466c3c757a4e5626aa2fa1bcc592a27b86921aeaed802392efce7c026d2b221663f0207962bba769405961ba0eea031e4a3f22a35687477d292b450645f6ca03e879352987aea7e078db5d46efb93d772bd6ae0cf138ade13a431e1c29dd5f6a3fcf238cd26e7e13bb7c3c675049770e921d692ba7da7e458adead4a012709d4cfba93aa2b45538a7203a72619e0da6ce5def80a5eb7e13281c49d9ab51defc800022d8c7b794ece0339458932c78e188ddf06b1ff15ff2f87bc94142d073ace3a6e9839a8539966d8e6bf9b8346ba9af3e93926733d00c4048f3abf512d116ee5c77db99c1b59da57d2bc61f4a4867b7ec33973a0770b79600539a30ad69d3169d583153d19b9b3eac4e5e56e2b1b429537afa0700b48d703e636c83e4b069e2f6053547595df78f885e22ed721a177a20b43b3ca40e06555fadc37d6d5733e9d30947e2bd6f3b1e9de5a4419cf3fa30c089cb6955ffbabbf09d0f7bbba0c971c0cef9c47251ee62494f5301a7d1e4d3bf663b0bbb0c032a7dabd10d342fb3315be0cb5b0ca87a013725cf9c47366fd979d3faa237b58817636498b08b7659aee0c92d1500d58661d3f37a7fdf83e3b88c4d9abb508eb2195e51c6f415f755211bf2af80e35b6c1aac22d43af55ce907635d8bb599ea0986aafdfc4668450e5e49f7b33d28ccb3822c4e7d3c1d33f83c9b6e5e2f7879f705f5c3a925e6c21dbd1732e898458bf53ee0d0d621bb8b99de910a82977091130dbb3d4e2135f0eba3e05ea030de2ba9a746546f5a54c63643e0bc897c16d1e61467d56bb6ca73f0c951b58a85372e3961d943a9647d96662316eee35befbed8a07826726518bdd583d7e1f803f5062ce5161924ce9a5ea1f2803c10a54faa733888ab02aaa5210279ef6e893b9c360ca7996f62073f916228c90ea1e6cb473e5305dd9cf5f45ff00204a5beaaa140513fbf90d18cd1d12f3c6de1079ef6f7a2667c2891d59acd36b2b441f8cf88c78304153803fdf59071a3cb5dc24c374e3819583681d7ecfb3f027aadd818d71e2a9b16bf69a92f51d1f58dcf626d20bd77b22661fd6b7f5c8187c453cd24f0b6a07b50b1833cc387b8b811d0587027b7e9e77345650ed673a6a92dde58628a439d1b4f98e11766c4ae61e3eb14f3d0eff71fab4b494066e306fd23a7fa5ff82768f16feff3c79d7b1b69908a4876a0a837c14b0e2a9ec50d2ada223b338bbee4aca42e214bdbbc1d9855943833771b831482dee8897855549ae6b6129454630dd08a26d749b2674e9dac6b7f9653a60325cae384d67bbc7bdfa96bd88d7879056d49d67c7dea1370a3e482bac1bac4aad40fd54d92074ec551789fc79f36656ddb39b97b78f1351643847694460b1bdcb7d840ad5ca9a0e3a8faee9a3a3cbc99c2f04c6eab4660b1e502b376a3d3003b49aaa24e96e147394ea6c4bafee9e32b8cf41bc085881ad610e5c5ec6b812628f1fd668bc13ca638aae2ae944ddc7d95c1bb841ba804c7f54fb43a6ffdc3d23849572a0f7c1a4284465528c0b762f06ae9cd21da836afc8209e46d6bdae9a8dbd83e59241808a09eb964bfcabc3bc01d6d9f717798192d2ec7fceb8aa3811ea5f7197074359644da7ca7d01cdcc5711fd5b90f9d56adde3e12744126c818b8095e7f0c6a5531a3d9f8850631998e9804ba8038966f77844271d0eadab91ee99856e58990e779421fc582ce9362f5894e74aba90d1324b3de5e996511071247b578d374626ccbb41e5c2795dcd998e96fac91bd5c1233f15431442c54228136e34cdf596965a75e4834f9f8585de71cdabab9022dcd13a166a257cd3eabea5bc44b5fa510629ab53fe8606290707eb83237a803dca44258682a4ab41b03cc0abaecdae3f1d4246d77df01613fb1ce3fe89bd53ef3484e9aeb21a36d83ba94e859b9d7a2784ac2cb62813380a0723408806fd7000c29a6cd6230e8760340d369032aec4d3e36f47382879d2d5d626ec67c2c141381b8d9846fd0805a1427060159c87f509e1947da7a5aa4e3d0e2ccee3e4912d5fe8655445679018630edbb45b00b076922621b849c62d120a583ece4695f59c3cd02a871c892f286d40551aac87b2ae365b21df68b48988045b63d4d6fc76f6987ce51b148c6c9d887fe77a4e581404bc2899da4a974916f2c0a3c8dd429ba43b939ef77398d0e07c7398bc8a9d5ee2ee3493913796f2269e2e0692a18eed0cedbe5b0381d4e25711c570c8a87b19af922816ec79d90e1fce4e951b6b09f39776a5262788692a6b0e1d7786f01cccd271ab2bd3578924694bc8574982da35ad9def064bce7f30843d22b6dfaaa8ffb55366d92e18cebd6cdd435505302b3bb72b4504579c3c7d0b647d34b91d463abf000028e505cf608f4b679538bb218e1be94e26333acb98664cd6f9fe921f06583f2220e066b5953d5fdd21c86ce6b5439cb376c8f05209ffbdd30e94515beae8d974ca0783a7e5dbdf4d019f8ba238950f1bfcfc06fa593d7f1f7a65a2216fd7979d2d43a3ced6d2945e3ba3607ca07b092fbfb8c3ea0f8759604557cd991b8e3f46517a0f52f28a46b9d9be329d735c5197c7e5714bb347143f785419ed797399163f95105ac16bbd06e2d74b2d3ca0b0fa1c695644cde478631a43d0420eef6fb6fe7dec0ecadec0ec5fd5f15380aeee00c72ebafee6c64d75330b38c3646b87cd9618eb979549191357a26d37c9f0d352cf1ae7a085555b1ccc969995024daa041050571daa158e24d22507029ecd26983c17245333f96a01ebcb3de370fea003730c76c792abe8c7d94606dc88adb179160cb83f771a41cb9b926bd337e73171c73492bed471eea372edb4ec0ef83a9e66e0ec8bd920a923e1d36a8dde6f25f715aff12af8d16a61a802575bb8178aaf347d0860e1736ab1c776833aedfd433c6467db32863222a8806d38500e70695386ca54e5187b4c1c5464fe02ecfb54e9bc439afe07fce02104169ff4996c9f3266af174305a0170d9083230c64d020a5252b75b703966a743be6d36fe073f3f5db149ba1314b922b84bc3981dde46f19a807b385006a88482dc31ee86bee2e44ede1262822e2861f37f88a88dd9f09ec4cbf9d8f88df0445e396c687c34318c6a5fe01ff62cfbb90b11d5c4aee69b6c71a3c7bfe225da514644814766fdc79240a5474507978f927fb14f8ef97aa3d52186495f9574c325db8bf50daf71f190625c9c640ed47088c1cc6a69e61ca6734502032a9ad1574c7e8e5c2dee476c012fc4641f948a2af661c1aae7fd231fc16ca599b36ae1e33fbfba1b2a7bd4835f39ab42ba311f3b75d04f757bb7447c49f8df519c7e2d036a1f9da67600afd414f04f9cd65d1a1e91adb47ea7acf758678a1def284d0934760eb7a2a2f54fdaccf44ff6f680f140b45a9f1afe369210c480efa6e9600d02ce0d868433c21af3e1a60ac59d453b4e58677ddee1fccb51cb8dc33d725faedaecac88cfab0fc7dbed963ead2d026e941834cf3ef5580977f70146f7358475495c6c3ce96b36acef6b352a023840e1be5e7301bf9ae0b31fd17be988c586e6ba97bd216616cf50bac5137b6951995b29a582b3d5652f7e95d55e095684df79cb292fc4ca104249aa95a19136eb74316287e46414c68cc2969d4844e4f5e6b4e77b24a589fa37fe4b57701a1f6859faf5703880f24191058e739b1ab8bb350e8c184c222a36f8f519750f64777ac31e6ef8cfa8f268c4ddda02f7094637531d458b06f93f593db4a198c00ed37548121b7c4a2aa99ea0a225c5cc8f11ecc937904dd5691dc35ec3501d3277b7fa318c978508a46c75ad08ee268c1aa05df003f8db38105a27e487b18cf74da97c47d47fadbba4cf6052689fcfc63a760d7ff8ebadcf7d88d9579852626eef0c7dd3801050b38a56f12947b70c0b7d177db19ce54fdc0f0e6a207baf3809ea65717d26161880e377aaaa2cc075bc40e9114d46723c1e537f4cf788146868ae58e99d2ced5fb44ec5ef5d9e589769247f7aabbc2efcd6d9401425644e9dfbc93b68cc0b02b0ce0ab651ac02cbeb82a65f2c4534580cc60ee5323286aa2343c991517256e2962ec5bd542e00a6eca934ec88a26599e64c62f339b775b3a2d10e0f363877298a66fe6f794bfe86053d5ecc125bb67103da83ee9d2ca7e7971424f9a9771233f7f72331339e72c5dfcf92527bd9ad59f000d03bdefa93d26a9dacd51dc68e9e896fc2a7158e0402d6d06e340794c0c1355fe66f71a9cff0b7cde445f5af62c599215b3581a308a984d040d5682587534e3824fde7d2c2dee93589b0d38a2545b1dc5b612a761746644fc8baf004677c953a1a6bb3de02d98954fbaa39ff4c9b6dc151be526fb645efcf545931a9f799c4c6353d6854168d12bcc8969b675f432790cca1abf84c4491af7224cf8e9e57377d13e777bd64660fdd6efa6a6ac3b979cb3acf89c86fbef490a0d21c3af22177cf250e64727300fb275d7a4962207acec10a7c9e28871182f37eb59a376985002cf6f6a12bc8ca4f3b126a9af5dc13a122ea4d3bc138e8c7485a53dbfc8afe5b16e844d041ec3e86793c5fe18e7cf09b5128c6050aeba12c1fd2315402ccfa033d978d544d43ea3b7229cebfa489be17ec645b6c6e15d74 +MD = c1844067be915cb0424a0a9d65559016c6585811fa8c0f56550f75643c46057a + +Len = 27160 +Msg = 55bd3d3fa75ce4046b12fe44420bd7ab73838a7a8dddc5374eefcca3c4a1c1edb2b6222535e993f3a73cde89c48d38d60b6ac6fd67265f050f2c94d2ab94ed54b8f476fe2d797a7a5f368f9b22bbd29331ea7466d006769eaf0db041124818002f2041b1d73322ff59a71960a4be3048abab9e9d0ea5916af6392ad740e4c959dfe18c267b4012ec5e3885c291bed75f42564b89692a38d1ac590a7e7f9189c78fe05e4561c7d2a73691daa833e2513ebe9384142bbdf33b9814561d1577dfb209c5bff6d1f1eb9aa95920f9d053244fe70950259a884b108313189b4bbd53821337b72112e6e42b7f385f9fb139dbf88561b7a500b0c7b835fe57e2698c6d9f76de4fae6dcd45c47fd8a0811ebbfba35f43c17aa360f09c767c1cd9b70bb671fa638e852ace97cc73deea875e010eb73e55778dccbe4c220e356e687d63b561666e7d8e911361ab21f54699bb349c9cea42e0c6c2f265b3c4d2557702bbf2d584a622b2e9c12bc851c3bb9f7b7c2bb92bb0040dcf25c3b861fbd9ee8f3cf6361ab487d77c037e8dcdf05181e7004578c948ec4b397fec97ae5703b56c0d48edf13fb4e690ffe0615c25102747e971408bb19f6649276aba708fdab5e1587160d1f0afc86edddcacc50a017ae35e387a3a9325484746c587724a66d43642f7f9816f82635ec6f7d7d1462b600288208c9e9887d77b0383687b31b0fbb2f5641fcb6335a1a7e2bb48488297c2ee8fb3df7f66ccfd2c872ec452ecbf139e993f397575ce699358af68f2654b89ed9a79dba5a5fca1a4f94d02c0229c02425511b1484c57a268515b9f9698519b48d1f9e8d8fe20ab2982698c8d7b4db2e65261ee0c91d7366ff44856fec2b1e2475dbb6fdf183f02044a09c981a1dc09d2b8b75889eb570cf06afdf3f08c7145316647d6839d61907d78b521633950f14dae9b578603de0c33da02e0359d9bab501326878c328e3cdb35f6fcfdeeb251a15c9653cd80741e7f6de083959f36feea8ddfe8c281cfee68a852c21565091014eb2fb4240b212a1e4a1e46d7374b2548fcfa63ec322b8e6afa53db74495d18ef83efe2544cee18569b4490c50fe108b287ff5fd4edab052a5281b0e240b7507a4b5d4625eae2d07085dbc825cf008f6f56774440595639f0d963a727f21ea0fc6c01465e8e063bb3326a58c01fb0a2c992ea79f91e341304b681290a099af0bf0e634bc9df603f69ca79a75ea5fa290663de68c7e54d7bad12639f542a332809570cbe2c86fbc5d874901dc70ce50c6ff0dd787156aa5a3415926fcdfff23123728305502adcb64a593822c2fa7a334c626e11c1185296e1e695033d30def15585508afd740df805a1f81e1818c086e5e01a9b7dd44d19fcaef4c16c65ff51e6b9fcb3fa0b957552735979910dbfee8193677e6e31a4c9cd94381322455e3920350eea11997c1378f7e29bf5817f516aa3df235cd85e909cc1e8602678029249220e9608c3cabcc1571bed0c1e0999e6370af00f708355b05d8c0f41a7f442aaa7841ea833885773b88cd59e8964ac3e776f4e4ea21c00528fac8a3b7a3a338bedf9ecb991beccd745bebc726d9874ba8c96a6e2162f78ca7fd138dc98de4b341bf567038472033523380b5170aed7a19e075e9473c7a760568281ebaae774ec5afef74db5aee3d57d8228033aadbf3dd44be02a61e9745c3c48cd32575e95fcd29e0461cc7956fe79257d50749d13d457e9926c8a9fc70558aa8477484a96acaa5cf60570dc44f93fa87000c686bbaf4f69de2493f088a4d3300e8324b35e440bc0360249dd930ff8936bdad7719e16e3542b1827e59f81d462d41e94a2d70c1c532a2000872c85cc6fd5a75065a6503b30e011ec84f5e484c93c0f401de84c069c3b263ddff7a6e2c2162fd86bbaa7808867d78ad770150becaf20cf2f794bf024d1dea7efdcb96317963a188ac261dae12732aae6f95b90539617eadd73520371550ee7bec40576f3bc90b8caa7c770c588eaf4b779003b8757bd3831bca9660d2d7fa55495d344e0f2f85f334f216bbbf2c60f55d64a350f5cda62323d984280c3f988ba396bf565a03cb5cea3b7f24ccd90a4c5fa82a6730b360fe8de67bf507e4438f79615b00b2c2264a28bd02efe810e5a10cbefb63cce98e85c885d0407c5275e1396199d58ff7311b7f0b6475c7609da3f33db8bf10cca949521c33a2c026ba21720bee5d681f66616b8af64eb1548cb5a198c501a2c92bc9b92e188489cd8ab0a1b4eb00d1a750bc6cd04ad35c495d667644b2b4098b90877c4ff17e2fb3622f4710f258433b6a8cf15fd4bc1ecb6a370fe6044eab7071f309e650f82874daedd094a6dc33283e43a7ae16617f674d97cce13c4a0f143aace075b97b1a8e5f8cecb46af5281a2670ee3fa25c048972094bcacd3eaae37505ae928d7f5c6c5a7ce9f4d14ba86dbda53378eb1434ce722bfb072985156a9badb2b15f8d949b664e66da5c482abf8e51260e63228692c840592ae3c5c51629059b56a22e29980d71d1d97e63257bf2f52454acff8062df16e4aa9e694082a79dd6f6f7c9a1eeba77b976ba352f1fa611bce01b03a8db30f03c1a8bf7fe1c81d6d416b2f8840bf7d08c369226be36f2275e355fe76658686cbddf6efa74506251413a8623468c300cd8ad98c0494e71b696c8ce134f66effce87da9d949daa39d7cd6c3e27fcc0d9d1d20208a66c29f4fe51ef80fda8332215a89bf2cc4f7d00c05700ebe8667eaf1c852dbfd8d3ff543d7ac60458e39c96a7268215d9c54723d699ac90ff0cc52bb789a2d822312fe32cd05994ce0f72048debd72e4365d049217bb756f5585df5a9c8a97c0cee824ad639ef59e6947d13cddde2679099df1baae66b6451b00db4fa288ad31f72c031409ed27b28da856c71e6eae64ac83e4178c00ee39b7e9e10b3938c04e226b13f74e848211c4a52b680ed39d3f859b36293f3e9fa5c29d9b3dbf0f838de701c1d79fd9a734b4aab9a03d9155723b60726046544d21a1983427a27169699b9cb7357c7109a3c435ac00194c79a52460237d200679260b66768991f2e479d6a84e8162df1be779e25cf820596c30d716b3a05aa9963b3684ccb3ec2887272e91024bf16870685c1d5708f14ccfadd9f0cdaa64d236d9d97f91374f76c409ea037d05a6c189bed16324a2ea9b0694838abbdbcd04dd7a5ab37e940a621d9abf5c094ed16eda5370303066aac8935d8a4118b4f1b5fca540ccef5acb7f0642152751782fc4e4becf2124b4805a089154c06ed6816a16d302286debf132109861e1c02200682b5934a25c2d29d3d8b8696518a0da95be9c356274c81a0fcf264c17efcd01cd30cb47305120f5aa763b3ebbc0c49bcd465950e78e9fb47c84442a363ae99268778d7d57ae40725283a24b40d182137550a2cb3425a34f1cf2aa92c93bf830ce72085d84be0c3e7063862570d599f0226ff12ae4d4a348457ca20c4d5d896b63b2d45e442ad4a868a84f43e8474ca058f6dcf65615f04eaa94c2fd3f2a1db0ccbc6a06125f4a4ecfc4762cf3a14aa29d87ce9424641ab090dd95ec1b3c159f7de141db7bd5cdaffa4a83574f6df48544853eaacc39931cbca9936f6dde1185dbe3f444ed28ef3a9c9d0f494827dab6f281b5a0ba20f9f162ab33eda3ba82128b16e9d8e2c31f7d0b5e62796a497db63c0fbbfc6a94afcd4734ffed594bf7b3e00c9b1e092eeef5eae1356e425d5e116581ca347a1f350ecee97ff50afcd2e89f37907aacd6de23afd7f0ae5ccdec47238a68df551b1a446e3b1c8b1557b43efd1a62755a655d84cea51ca01635b8c5ea8c00638832dffca9ac5e2624e71c15ae4779a4ae24fd97cbcb21fa0b0f342c1ef929578fd0f69605afcd3c96256b0b17215e7f04c02eeb2bdc9902a7d4fed855645c21d88feeaf06d7d255059d319dcc4a896aeab171ed633bfa507901695912501158feca28b6219715f5efa8f03c2225730eec63572d067bbe6a0b1f142cda4ed1737f1a4539ea7000a5a0e33764dd34a3c176605f088a1e6dc5baa88fd211a324f7b5fac4b8c5f51adae5d667a6421aa4291532ea2e729670ea14282cd75d1f745c4fd617915888dd0c1afd118ef529fcac3555990d3466704db4088bbb10f65827b946ce71f6bdbfcfbcc1b57d7af505d17342ec135410e476f6d41cebd1da48d06ec749d935164b7c47ced400280e682f4b7543df662835ec791560e8143dbeecfcd22a15a80508c8486efd9590d88c2c2a8740cfcf1efd149746e83e6c8332e3cff1efd5a41c600a3b3c82cc49d5fa4eacd3537313679295fdd3236d2f6d3d4b7490fb97ddbee9d89cb21412c7a93b0d2ee40c47c794aed7095492e2e13e368a7759edbaa98f1ea9f96a11e77ea4b6ee3d53cbec40189a5e3655d73e3688d737449726dc9bef76f4bdbf1cd8f36af678549d22af3175fda2213130ed83df77c858e3476c19627b5f664b8565aa6e8222111aa12f003f41294671506f4da490b440b8bff7c68aa4309f79fbfc2811e271df66b7da30d6fd8a12b0b632186aca8188a200fe17ca8a1ea5d4e12ae1178ffe3c0be74f47df9b1b1259c2e468a48dc69d19aaed8194858035e6c57059c1f31d9374afecb9ab9272c1e716e4a2e442ea0aaa2e44988b2efbbc1a194b16b3b456922b82310add8c17bdf322b17bac82723dbe0ba1c120fee795097d399c6f3c4fa4bafebabfe7d08042d866d9476fe4d5b2cfb3739fd87dea7d1f31ba5f46f35f378d85f84d5d18230d3153da9aa0c2bb0679c64 +MD = f4d4a7b83262eaab269417828e525e9a6dc9fcb672c8cffdab634795a180eaa1 + +Len = 27952 +Msg = 4dfdd11aa6bb7f9eab38aa755dbc8cc2e229910c35ddb0411cd6fcfb5a19760126542611ddc26addf44f8d5330fd9b2119867479ac432011504c626f0be19063f608a1d5ee7888c08db6c17f587e29483a6412f632bb970b48b62df5c5cd7b90a3626ced43a582525eb56d813e08dc3d2e0c930b2f0ebd36ec5c8415f0a6e09017aaace14211ff984f93b9e249625c0adbc61e400b043c9a25859058f434666c38288c3a5583a89c499ace29e05652b72bdadb1e2e65b93fd97a79453a3fb62bf024327fe3c425653210d4de6daa664a058ff32c00f9df2ef1846665288f77d526e5c638549d1dfbf43ef28a57273fcd502e8ef2ea88536e56e97f3e27eb5273c2b471ed0fd33867756c51b406958647f6ffd3f952d9c007eef1ee5aa01def0cabd95a277e311fb09fe219e4e2bce2c1de4aebc8a1b5cc02a3e6d841f9ebf5a8cb9cab6d087e7ade58e771a25363fc42f057fee840e41f665c0e68799c1e0d4f094489481581f0fa8ac48177c1547bd2146d33df952e623b01b3c38cef7ede0a4d1b1e3f0d032a0a1cc272ea9455087932d6b2370a5b3d89791b14025cd211e07f6792da59ccd019f6276c84342f4b4032d8a47706325759ae8e816149e44dda88710da15fa4892c003b96cb09aaeb2efcbc3128f17c59b287563233207a3bff4e81b61d8853fd4d224819497c8d914c79ca80d13201ea9decba50ff485d8257badfb5d53ca0d58344941d86f3a2e4a18f49bafa3389b321c501034e2955cbeab4d23351e455b9d74e68c909d7af8d352783062c5bdc5c46fa7472a72b29bec125a3581ae638504f280c455a917d33102abe8ded12c18c14745bc692b6a302e3f39b4bb7ac1243f6bac8ba0187d47f3b7e4376c8c002eb9419fe269732894058080035b09caa39d1ede45086237b19bd0d5aea42cd6522cdd2a4bb3f07a41f294a1a3d8e20cadbeaa7a72e72cc3ca89ebd4a11e5a2b3d9c78896ad119dbc485da3338cd89f38d148d15b7d4de9ddd4e6785d1238a5b3b78b211d23965d9962fcfa91491681bdc2f35446649de427479e25d916c33f2f6520877f4554ad02160f367d9dd12d2157f416b00cec24e2a6ceac07440fd8ed8b8ea0043cd5f6c00c9c413fb08f0d2c375201e39cc111d69c7cf52fc5a3d9b7d0de56f630a1a19cebae021fa9db88a60a15fc263da513cacfb2e799c007a853dc178f9b483e145b5c4a6165b03a06567a46eec0171f9288e7776c8c5ec4af895841353dad36b9c8067a4658ef36ef052debc1fa51b7f6d68dd46b52c7615523ec652f228711f7aa924599418b56ac7bcb0f5c1c14f5a77d69cfcd31226601e73f8a6592fd5535c8a7b44268af22a380fdb7a76e87620e4522737872975c1d9ffab8bfd7378cddebeecd2a1581233ddc6bed8a37d38591f560c5555c50ca1011c4f725385e3d56db0e9a379029e0e256bcb8edc11fe69957cdcf4c397238420646507ffc9af10860b0235220d0e2fbb89821b852940e8f310f98464f282e1b4528cab56c122f5b427c6f640f9eafeec8a92ed3335a84d94cce2829e898350398116eafd0ef7fb748198653a3bad1254f94e926ac98d0e170b388df4aead462c5a94356705869843c307009254dd00614045a9a04767b0d6465bf4ebd4794a0959951909376762ae468356cdc7e32fbe19f8815851d0cc7f28dd5608bd7fc25d089a04682712d11086ade661276816b7c0d7b8075b50b76e0d3d3fbfac194593e203961867017a172de73de0d5c44beaef73bc41d650181f7dec009542ee4a5a60723c7e59bba43e96afabb1759045b3f05d1c7c5567552ff57a471df45756fd2e66662e71ba05d34b97de7769548acf7de4473b5b0ef50c0e5871be42fce2088640b18d61851591c710349723798189e2b9caf349af7e3023172efaa137721912918d3f8b9549d693b95c955687c07fb93e1628b3c16738ce36cd57b1af9d9b5de987a97273093e3be3a4f654f7de1d7bf1c7603bfd36827a27eb59d6bdbafbb2b90f5f98a70a151a3fac3ec15220ffa5655d2e24bb72b9b16af775930a50d6db70a2c660999317d91dd0d30e1f4f72c01925e70074922b0e80703f78ee05a912b0d0728cc35aa2d31ec167adc7a023568dd02f71c11b62dc08e41bfaf13fdf02ea26e86fccb742a2b2ec4112d3c98dc323da6bdb2974fdc454d1af9bbc6605269d049c7c1e4f73c26ac003ffec222ea08bb320bef645683204b74ecd981ea7f839f803442079a2aca6cb34a74950628915d8e29feff31ebf99039e132cd033e2517fb15a8bcc8bec078c37bb93cae5b762da35f05f04adc76254f20ee311358f741a2b21a8ce6beb0d81a1af53f804e5e3357f52dc0081e4211a0f134368296a0245e52c1fd5df341929e6f4f27e6c8f27693329df6d278035c129c2c62b9bec9c8153ec59995251cb039c1f07a4790dafe40607e1a12b3620f8f6800401e981936b0bf4de8f61ce939d25a00c30b6fbdd344c5f7b42f970631fe9fd5551aee3975181b8171e99f4f365080a687992d43fe89a9314d91ec98ca4687d62b1686d08d339a8abcd478f6ae9d7c0a505b921586f556536ca07abfe35168284978298787eb869051206d87a9a09655a5b865db737213869ac4092482068cf637a99f066a2725bab93647aa304115af0f18703ccde727f25e65606eb24d3a667e12b0f43ecfc1317b7ccd064968433f15e379e19d3bdbbe40eb4846780eb9a0a51a24fa0ccaa01d1f5cc944fffd662e3f824972eb587713c8be8954de3152cd3428c2bfdb020aa52d3d010b57e8c7a3155ba896bd2543187f46eb3feb9f4d15b3a653ecb35e49f12e873f045b11aec720d75ef51d8a86f6eceb36b0a73ef29fabfb9f289cc6a42aaaa149d7126162c2e75e3238126f8ad49816314e1bf78894a48f6e1c9f22627827f5e72b84be2dbbf259ed07a4bc95db092da5c24eb3591b24ca886fc35acc022feae3a8ba1155daca2e5709dc59f032c99a5ab34858ab5db514b5ca11572af149e804f7bb432349f64738e7c12fe30360c318ca12cfc782ded5bcd58fffc46cfe5711c08f3adf2dfe0a58495c24b5735412a7afb301f5b128756637473be19cd4a0d3aa3fe0d1b16be17fd5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac4337436d10f1ad678be56809b32a6ce3bf2c3a28410c8ba095b958450d5763391680012bbd43c18b8ec08bdf202b90d16a005fb187921f7779e26c3c2f5b9825be8eb127b5a5e9b76dfaa68402cfef630cc0b4b05151d89275b8bc32f63520fa81afddd1787c8873aff04298e98bdb213e09b3b53ce0698a1f88d2d9f0789030368fd1c9a45c1038db4e0a6e32e3e6847427e730b8a224b6edff4a91ac9a586f139b576097b9237f566048a47d6c841525c7c9a3533bbcb157688dea991f0bffcf6eb946e11844cfc7d397bc278a565be945c58d7b017401e2711755347b0d7ab05681dd0eedd6a2a6147215dfc1bfb1354e857fbe97ed11259561521d32ef686cff4ba38fce5b8067af6261f4a732cd703e63ca8c63aa677732067191db24216bc5613ad22e65f18310e2f114af51f94081fb2e72f92e8d8df3713460e84e6e23558cf37482687e8ec56e739e5e8fdd1cd5b5fbf0ccdbfba0463c0ad8ceb0873a0c096de56ee56ff1497f3a10196ed17b961eb38453452a74a6c16588031d14f665712ab3586f7e41299fe51874518ed34fbff5ac20fca261919bf4ed39c6800f0e5e9a5cb36901f4c24ae4f603ea5dba6ef432e6ca64ec0d93360976b75f50ea532c3d501464a392c00aba572c9bd6977065ebb294007fbf282a43c3203a2ffec054941c0fd4cb919f49e5ba72d88201008f909e2261d62cdce30440f90955d2f2822f3eea5bf277bca2f77e6b42d87d7bdbb2180a1b77ad0dfafb7e962f6afd561f7f37484ca0cb948050316a4d52735ed4d0ae9f7fdcd647dc79daac2ee7e467970473be296ee3d37c9062146a786935f56cc077018e2f26f20ff39f8a551e93834f92a094a586e5e2289eee2cc2e57dc7f70c0563041e07e63e47e4c42b02865ec1128400fcfb487b99365c06ba7eb2c70fdfeef6c73977238556106ed236aca3f951fce0ddd7778352c6e27ad77b517d07ba885f5ff80134659ca6dd033182dd68ff6fc6b091ffa405cf161ba281f6547f3a65ef36d022836f8a1ca106798575806951252db14d57f2cd6b4b9428fdd7f6ce0c28d46847baf3ace65d84853106e03e458e9dcbfd19ca30569d24b6f481dee3dfbeb1070d25a2839864e5db11fc08dca15599386b63fca67c72fcd266ecc81a85036562df6dfc9cb759a2e1b4ef5ac3293c989d24b0fa7e218f54f1c17322e0608969d23afe5266a79e543f763b668011862440c59b5455fa24f5ab90bf7fc406c326fbac41445ffdc5725ae27aaca20ed4b4e9aa8d8a9c7af63756511c4f43ec433535aff163073e4175ba9627ad9775aad2fe60021dd0085592888f3411ce858c0d26b2690efacda4e6d4fdccd9eeea6b06d562938e8f46c5afb8a77157e266f027355022d88940623e4075c4c1f6e1b7b9254eac4d289ae8e77d366e822e15221be805b920512afbf463bac9f66ddff3726470d6ea3a9921c23cb87640eff4a443b55f96a6d0d1e491e52926d7b259b0baf9758dd643b5f2c87dba42f4c6a9d93733aa35bc96f9ceaf1b4d75e642c3720b7ab94b91d275ee82c6983f1e4089337ed98230d201f6fca49c8431b2bdc1b9ec5ed89acd455d77699dfed53dcc3765831d83f2a7a05df10adf89d4cd81b8eac62c4fe5c93ad11fe56a3aafc3e828c1dc860c057e00936e5a6acaf9971d3d9721498bc71611656a9ec1f8296122d1faf399a6d3e5813ba70bb4a3fa800eb451966d28c94477bec9ee2b93dc65eab75360cec1087ed0bb5da743b16 +MD = d96d6d05783e338af9a5f16c4bd8ea4cfcc67b38001958cfee62bbcab6492bbb + +Len = 28744 +Msg = a24d05dfc087e4e700fe19b586d887b8d9108ce4e76c264d49af5af4c910d6e021ecd57106b843f26539216dedf72cc3cdefb9fbbf88e4db45c8e9b532c8d2846d655338f239f24d19ca6aa21b005289d2ddfa1ac06896ce53ea9e49675d74760d2248d98bf23921a417bcfd19dc42316f4215e9f3f4834dfc7d3f5570b904df89897bffd9cb5f968c8adf26ee7144e42d86d30f5f15f581c6e9958453c2cae66a04b650e5adaed35b899ac4a2a99fca9211fc350cb132913b97687b1a620db437fabf74b67e6c01987eb77f3e6b9d0a284b580203b183a6e3ed80e5cd80177078d35f145428e247ccd0fc01c89e84cd779dae1f4bfe30e84554a46872042e43b6f65ed8c89158ce7ee732ef4b2c9d3a066dc833ec7e817ee9359eac13d59b5577cd846719a315bd362b21f4ccfc307a5d246ce7ef1bbe9157f6345ab7dda6cd46bf996a4f44633d7d0490b655f685b4042b63e35bbc2e4818012f1a670396d4a8346488735e8876d9da48dded02e31184e875ce38491accb3bc56932a2fb5912794ae6a8cd8cd8fd51512129d0894b963c569518fa9ca44b091736e0849492d4a483fb7a29a7ab1f61db4fd6cf0ded32c29091367c686d998e74c52093a9bcf99b6df18be8cd703c65af64562a20a87647c1bbdc88796b3f125abe836e8f3a09d475635e6962caecc35a29287075fff952568f6bad441f946b556d8963c99c8dd636bb525a0c0d990147e8ee4052760468eb8674695d1d41cfe15c9311ed46ee273e8418092dcad9b6054df8085a8d5001ed3b773b28c6bfd68b2641077edba32dd93800154c8527482ea2d63702c834a3d808f4a14bbe7705bf3503a2d2cd5570b341bafceccefa3e0082196acf995ac538997d1a1a56ffe3fa235b72ad9e7d96395b992e930acb1e4786220235731aec8b4761242942c2d7c85bd90543c173e4f7d03b38b3bb225f5019909bb9080d905cad515e0ce45887a658ecc959d8e1036b3a0199d3629877a6a6e5a5eeba9b470925be0619ce394a2095073d44374d6800039cc08693960dd7c881af3afd4c872d6b17daf462edb5a3bac8ef977f019942c76d5b21c083685ff905162252b9b745c7ef4b0144de40bc14924eb812a60dcfffe3b8597c194dabb2d079395d3b7dced6b4b4e4e69371e64d13d94a94b33bf417a0668218aff447708456d46f7a41351208c6f3ba95df9ece9e1db377b1aa5b9913f42048b012bfdc912da82bde8825044bffd2436dd06213b19a872e19ef630ecedfd86ee21f7131777c28f4d0d90b27feadf51373faccb6fece3a3a6461b6e331880f0d8e810829a7b0bb6d09ba43e7b17fd0ad50c52b12d637512f19b7a3b0dc8b38a73dcdf11fb269e3f6e1828bddd4d3f9738cb629c1c854407eb247c5f22067e9be787ca8ae28063724e0e83f850958d3f87044354e45a39cabc6989a11bd9c96d5c713ab3f692429799041db47af6cf4ceb3f5da12eea3ca28bf20acaa04a7c46f9209856e06324f576835ebc0378ed048b05184ba23e36d9804865a258607f6fe61e4a3948fbefd50e12aed79423cfb090dddc19e75d0db5c5f204f1ec23ba304cf3ba25d4638d7f893975ccd5005e97215011d4a64fab7f7f784d7f039b16d053254ee12fa2e43b0e801b646d16800367e51f44861df67ed963aa1446d17999223e7037ffc0de51c5700867056d1e3a89246e3130ced8fcf93982775dcccdd1e2c687ededc66208d790a49d440e2185b09566634b6a383f07853d71ef94f8c1ba43fbcca0bb57aa6c6858cdd3006f2c04c170a180fafd902ccc42caa432e4b1d33f339cc1a7a77dab818ac1594bf277ac2ff2b5778411378f98fb4a26ad77e854419925f79339cabd62a43f7ff890aed1675665d7135b7c5a70cfb81a0d9bb066d2942eeb86f5d8ca930c10ed0e33189af2027a48acc3a7b2dd26de2b5b374f31798c814488c3f1f99d2cfc4a95c2fe305760bc745931ffc1666982ff9e320edcbee9e4aba18b5b72076aca3e9625a8ba1ed6f200218dcdaf93fe6d3ede763590291420c8da355f5e5930447317445e61d0cee6970dbf59a4ec4e679123ea0c744373fd423aa945e51ce5308e2307684df4af5edf23b0ebc7fac138a07676dbb1936f42c2c9d0552ed7f0573abf560da512e123806d46cb4044c0a712de02e96ea171b9ef9090d76212bb811df5199792b2ccfd23f36a413852b17d8f64767fd4f6df287296d212a856ad75dfcc384c3b5dd8b370bc0594d7adfd82c10fbae50b192258f2e47f4f29292efd294d9b75c99a6d0f0ed0fd0d44dc0d7e4de7b7633a92a31118807dd60c16a6dfa37e2a5963f2f3d7a6373cf4a8674839def4534189eac91a8c74b6ef7aa27de4f469ce4232ecd2d4dff9a8912ad7157a1a3f77c621a8fb3df5c810e29b571cd4c4166d765d1072ce621f2b2bf3b3de0ba9cf0c3b2a54a340fb8275f696bce977bd8bf03e0de63b8dd6b1ac0b2a830ab234acf8e8cb7728ec47accc7494594d9585d240e26af796d8e4b5127af8d0013863df25152d98f209814dfda4bcb7b1f5c4f343aa9bcae978343547be85202a65dd6f790a783f695f516eefce375d7b6023f4e3dec9e79d366d38321ff8feef004b64de0ed3f4f5b55d168c3a2cd3159e49df07c51bd71bd837c7bbe779efb7d354c73b6b6640fed5504dbb30c4a2e577e0bb97a8ba21ca263ce9ca5c327deba4a19f77675aaaec85d01b64f7275155b38d917acfcd4d11ea21a647c8482ff13cd9f47c4bd7bb278e85896fd87c68cb19fa689a827de45aea91061a71e68d3263a5ce315f04f917b8199ec51beb70b172cf48de09f26d0cef32122ca0322016e0ad367eea0aee24ca31634c089ef06e86b33a2eab53708ec1acd1639c546f067d98334b361122b78e78deede6ba706a1d4f4472b2c8754a28a84ca8af750368000fce8089401c36ca931991ff6a780dff4b7192647b05a7ecce89e41fbd62a532b90e062cbf640b472d1c1e99d491bff34ec6770a91a70dd4c592fd35531626db3ffbc367b7829ccdeced7efd2042e8c3004d07eb35e4e4aa366fdd3960a752c3489da08150fe5324789697737714f0350b0d2b518d439534c8266a730b9b90b17dfd85c4b16197137a1f5342018e3f12140ecc82c14c863b24c18e2a7d7c4a6f85225b760333cf639a8e98b4e5383d21c659d0c7fa872086f1472fa8ddd1e7c30a1408e06dfa65dc7fed500f4c9a532cc6f52168607dcbdfd8c137335423cf76b1dc764a1840c046d243629c5d3de7f9bfeaa5ad1ab5f00c81368d140af9695024818bfb2b8c48693a99b6a341a86352574146de51b7f5d693ae199326db1f180b0b313dcf67650d60f6346c1f632dfd3601ea422c0c4405b732c3f7d15158980d834f562c587ff9eb62c43e20f7afc205327b22d43b436194c8738a32e47d96d3f0cd8f69e7fef684e64e636ceb4f6b6cdce0c670cc5cb1d37b1192721bf4db055a9230af9c4accd388ba212ac777be120801762948f6bf1b508558b87f262f4ac988812500cb437f52f0c182148e85a0bec67a273678511551b7242d977b594a4696caf49aea22314cd88a9d58fc86bd041719911e4c306885903ef8eb5c23aed8a45243f20d33907d5bc6a31e288a12e4dc9d8f88d924bdf4f6ed43032f531e889b623b919e3c45ed5fbbbceb7c584765fd4c4bfd87f5bca7d27a33685db2415d614204fe0306f7a4cdb30e495fba038f626fea04be6a0ca50d2df2a14f08c05fdf3ac5c1a6594fab8ef4c4bf3976ee6bf44d9726e64c56f68d4ea8366c1d4296fd92a663edfdf50988c604d67355b100993078ea676341a33c257caf1bb8700ba491d06b42b990c6a573f614731ff4573a5eb5d8aa7776b301fa9795c6a3f2c5ba806b610c56c8ebcc42c404a29c5e76c020777815509c2ec3142170d4a46fcc28a79eceb29d477ee57a932b6893986711bee65311b55c1d6cbc41c6ad849029d74e92399e53b28ad7648e132ece4a32178029f007705e87e33a1f21b90afce3aebd6f2a3743b4148c48da435a131bddb8ae69d75d47497410d6e4085f005b02943b5c29e534f326eb6ea243562bb372de8fcd917d03c6ecdbd8b8040a2c578f731281bf10ed17c7dc1d0c9c88debbf8706c7ea5cd6c7cf82c87c29c1f589690328807732037c900479e40d55af3db78568da39bb749149feb2c2b58074ac010b9e616ce7ddab1d8143a67763334baf9783a65fca16435ea000f1ac02acb7e14f074d557909e76572c36a9077a670183bebbec4ff58388df5378b85df0a278a6bf796d96bf4bc08575dd2d119955571e10575f1c1a6fb489cdaf2db6c29955cd0e3f061373a8396bd8761c1cf7c665d35658e6ec78f062ed54fba0530676bd92c50cc657157e87103d489daefc82d3a97804ab4577cd3a15d1a639bd26025afbcc29d8e90b95527c8d9cd951105048a95ea4d3b27fd0e3082df6227b8805d1130bde6251bfb543b8aebaf88c9bf96cdaf07f89b8f8bf06ce4e3480159647cddf6a728d1897a601cb8aea21e70546e84417dff3e14a634a701ea77e14b68ff469d22f80c5fd2f35bd08747cebb6fc64efb90a39b4dd8458f5849941ff52a6eeb8295b64e0581a87970f9f321f17e687e4bf4984b91aead7656750f45ed15564d4593f60f1102d9e6089b56b0c8ecbfa2a12e4fc79675c70c8b115bdba9b62fec648239d818d3123205dfc4e38847265c99823c87b2da3cb274930c49918956395e04e421736edbddf73bd042d62a46eca3b4e1147d5878f8917e93286b0b83c49070a783c752b15a6b33fb4738e29c034e2acfe66c5d065f703882f06cb9130eba79d6777b1b1d37c05cc879072c9010f7586b85f6746f478f554e2a3d1eae881a750365053489e6a51aaa50e744cda63db2466ba22b1e514d59674e42a890b16ef6b0e4fc1b81e777f223575fe79f239fece31005dd8dfd38b970d513e3642af673616fd64c9fcab777c604b7719f298c5cc41b882848bbeff9cd37375bb3556f7f977e1a443e00e21004d1a47f481891865bd6af87d90dc1af0f1d138df8b1287fb5884 +MD = 07c68b2ae8430d0e0968b717d520de9a16907dc658fbaea5549331d904717206 + +Len = 29536 +Msg = fb1980bba73602e269905aed4f09aa04312c2916947922cbcefc40bb6b2508ddd0d3a7421eb2ee0359c79b78ca49daaaa1b30b0bdf17c66573b51c11a3cc2069aeb0a77fb01d4b10c5cbb6b371421d5640f00aeba9795f5f384e98cced8150efdfd806dc242022f0f5c333080e9d7bf0540cad1fba46f5a165f039540fec9f57a9724fc044627a8d31d89bde6701fc61262e7c0dda27911342c28911d1b4158955a60793d68c5bcec132749c4617a98ffe7f001ed1c4399d17ed0f6cfd81ba6e2a9eb8bca345cd9becf849ac718789632427c0ba66c4f8272b9853cb59fd97ec727fe9a57336d9dcfc539f75b0f8a4c5df4d454a63d0d399c7ecde97afceb3ec737423b50e068679376a005fcd13039e781915348e8fd4db33113739c59c165777a2ed543b5edd5be666f3d28e7fadd437b4bae2afaa02d5b72ee6176310c913c434cfeac4e6e468506e0136bde4aa516446bcba90c865709b6b749b53d1d30aa25051df6f45a589bfabb0f320ec03fb47f6a126f892069226f1682c5c883c225b1ffc9c052428a779448b71803dbfbc28edf38daeafec24a1e84a3145dd0d4536c857874d2a73a8c7621719a47fe67b4e5339577bc81f0f5478a314d7774d5a7a73eb0911009076f12dde51565b8120024ffceb2785a83987c7f93cdaff0449704a3e8b174d87f73fcc67825c7897928c09c3b37a8d8e8c8200d711161c3afa6072da7328ba5e15f9683a157f8030bb34aa16163c89d9ef8c49c2fb5277f8549116472a0cef1fb66628e07087185482425a7d7c34209249efca446258b845414d5c0b198b93d2c4cf35e0fd3cea0ccffd40814d2bfbc084f1ade4aeee862aa9da6cb0a76d4e7d267cb6c223669e5f8aae85a9f2e9c26b87db172b47dd89ae72816fbe3b79ca2ac4b5d40f49ccdc569c9d507ed1361c9b3af5329f96ec6ad9858a8dbb3f78ace086c2b74ed9374bf8eb12ca8753dab159858626ca01e5d1b3ca3ded311a339fa854ea86073a6f934d60551b4ce09c2aac50d81b34f18e654529e2b8a7346f498916776ac2d43c5d5de3ad6a55e1452f9d83313863cfb1cf968bc015a6f5f7528bb4af8a080f6651315d64df2bbc9d673306daa5e10114b7aed6202db5c59263b616db0f6053b416d0b4c0a455db6c7b76c11b8b36f180c396f44a285c0c0724132542205308ef5542d20ade5ba47a126e9d3b12e805bc9e55cb862d23321f3ca9c72ee66896dfb5909d89b8c6818fd52480846181a792eef3451c64939fa25480e5e58827654cdfc1ff87581cd9726c9f543ca1893ec85c794953f633bb5813a168b02f18ddfe7adddf4ae6e814ec7ee7ffacf98632278feebe750b8bef08221336d703c467bc2fed241b8baf99c5b3056b1c9202ea77305a8ec8ca24a17c28de39a22bb26950a6f7b8426efbd2c5b5007ed39384d080e6c6a0955c853b7ace0b5759d06a4d8086068207b95326b329e0221b25954b095a39dc23e93623cbbca17a4319757915771f6ab29140fd59baae3e3a70bcc3dc33bb2abc98c0c33799a889a92f5a57d7234c588a2049c07d0e71b9799b81a0bf1a5472a691aa81850d296cd339a14d8d2f9434d88ef6d5e8cd317d20cf6c4b7bb70d9c2afd7cc77fc22a0b0960d3c5014600e6e403cfa562a0f6717733062ad8b1ed909004bffceb5db64e93cc7726f90e9657f6a65d98b32fc97dc6f0d6a69db1fc3720cdfa879289d21db8a415d83e2f606d569f2717a221b189542d6428945e43772281b5d23cec8860c2113543985266114c17b588f81eb77d6a1339168361c939dd477944b02edffff73a60cfce1faf2c1f3690547dd0e24150cadcd9336197669a48cc45b8f8e0e2a0481de4aa3d43a418233fe4f9dc3abe4e79d5da6c07b3e4a1ab393d1af291f10462f5eaf2552a637f074a9f34edc7daac48ad80f5fb279d3a9945949fc3fc156db16f496f0e6c4f9c093aecf5a9927eb160eb3298e4fb77ad3a7ab30f132934215c1369e9111252b652963506b8a293a6e9175a1b6a355c41b55f00328c1e37698c69b2280524531609e6e12dc3ffffd30aba5f4736df333f337ce4d0d4e5078d69fa8df393a8390557b3583372b2ac80ec5ba9e4f000e4efdb5ac8b093868ad51a4d601363a8eec9648301e06cc280f5b782a0ba40a15699d680129b7207aa89c8ea94511c2b59aa57e146fb5a37657992b7ac90ccc973854b762c5918724ef09a5a9273663a62f258528e4ee31a4256a58335303f8022fb63c57cb22fce5e53b924c141ebdcf1e79160429fb072fed2196da3603fce4b4246f46c6e5c24c1fa4cd088855019eed32792c8b76847833616fe5ee974bcd6a31b8b6254497b612d7ce7510540f941fc4570895eb4a1b8cac3bcce938851ac660a13c82d9edb253471f0838a6185d3ab1183ed5b3c8985d549315b252096b3d33d1305c1024df556527385dc5bc48a27b3525d78a706d2a1d0e56e69e791d431d91381d81ed7b9dd47f8c1c3d7bf4fba54663f7b9e2187747f5f6d25824cf8ca099ba43a9a84590f7a089e077d7c0baa1c45fc2dc8e18d977e27c2229ccf05e4f334d6ae1d59be35102a846ff405a4403279fd56ce4eca52f6c5d328db20e5c8bf657ffe4f60ce9634e7dbc5e56204c4bf8aa9be577027ec0fc10affe7497ebe96b707f0daa0727c0cc60ccff799117eeafe672c0c508caff0a4ce6e6952ba0da0b1d64d6321932dc04f7d56d3b4b5b5dc5fa16a94f5e2e1c2f6863e09417fff04db54dc95ec17f2790a972120bad6b3bc34be3e99670fcbac3d9c376e20b7daebbdea671508e8135f80c2fa87b45ebeb3062671c0affdb5d703772141f649e77ce0feb48e7decd8993867a7b0a9341fe95c40cbb3d492e66acf7fc429cc1d6ee0cbfa8da6540d8950baecf142a1401e85be76131adeb8a88e2a1ce8cfa91bb73e0644b80594316dab8fbba0e6a56a02b0b42f139cd656416b9bb654da952b09bf1a46fd544542cdd33e3a7c43bb9a1591c7d491e2c354fa28aab5d1f39935ae8b8e66263b6f27f1ef4fd34c02eeb89d517ecb5694ad991beedf8127c2bb21ecc9ea0ef9611bc821284beddaca43ace317627d2a599c0fece4c3821eee05d70ca1b7a5406f510da5a6b9efec44c45e2f0cfa52d4d9999db533dd217d207f3f553c7b93c10c17dec49021434b1778b7c957ceb31ebdab2bbd02b5c40eff304211c2c13f45e17723c80e0b50bfec679df8226606ceaddba24d7ad4d5973420c6865b0e13939678c4f74a007e106b9af905924bb4ad5030e8adc3c1bae16657b4fe2dec7675d222a99a698735053b18b438d10426834fb2e6250404ddb43edef5bf63e2d0b13d7ebbf89629dd6705e9b4d90719c318516984fd6526a4d864bc6f1123798a108093e05bf76ddefe7016e3305b12f233ff5eab7c0fae79147ff90c3e95370a5a436a0109b4dba19225a62885f6781d9e019841eb2a24c331379eb38de3a7b9572d09074bf6fb8cebcba16a1f00d3ab1ffe1f2f92dd11e9f836b14c45324effcee77ad869e55608d00b109347a0a9047f9ffc5eb951fc552e213dbeafadb6458919c55eaba8737e0b8dfa8a45fe8490858b36b5a8ae6d6e9ea347f3137966f14e6af07f5968da5462f867376143ebb6fb6ad51ba61bec9c0f62d9d2b9c1e66de6820525ba4c14f49ef55f82e39767e1a7e6e27afdc002474806fa43e8abbf1f190a0b37177da8c4872beb5312217f7653a563b9f3c636d71238b32ee95f7871aeaa0b9db8221e2ee4431292370abbdec54f63c0d15511b435a00b7b050699ca6f090c3fe564ff987fe4dd279a79a381c68de777df941a4779e50a1381c8aa9122d01605e66bd26c1eb752fa8397c0c71d07f9c664acd9f6a6afb8dca8cc343090a631d7025e1f118a637cf43a8c99199464a095aac5d62a83a81ebfc13bbf0e8134669d83656fef8b9160fb067fb6ddf14ce5ccf7059a4cd97643a4133cd193bd22bc3fafaa486ee8e908f83198a07dfd69ce539497acc270c12f74e7f8f4270b173ca5cf5235f66b127bd40101de5f80606612c9a194f61032eb158597af3234bbedb72a88bbefdab5c175bfdff8ed42dcb2f1dd4cdb4e81707e7135408a1c01b7d75e0a7264c1fe79e3c5b25d778d0a83bcd91abf08348a24f06f3f1b0e4d37b30280b538b7d49f07e8ab24a0e2a9a1fd8bb0c623a30ff5f64af6ea51c22ea156770674033c918506d80e5bd3c1a8d0f327602a9f3447888d93f0800a2f2506493dd98ffb7c5e771fbbd8a01c9df25d0d99cf8e5c44440c92d344476ddb9b2d345cdf4e47fea43efa9af03ba3fcef10f2e8e739815a6d48ac12da88a350f9dfbddd02f9104acca23e7c3e74916907b34b1c8e7537ff2c0684599a8ad316a5e48fc729d77de93c6b946aaa930e69a20cbf3eae88a6bae80cc2af6c9726b3090450223c31b7625e61a36b1cdf418628e5f7542ebbf5130a230d1d38f5c4b18b07a9f6224fe53d994c14877ca1534701049a69f6564d92f8130daae6edd49895b4414cc579300354f38ec6b2226c3495315182eea1d5c01ba46b5e5ec77fee8ed4c12b0cf7c03bf91fba31a6a7b2d64c36c4a9fee4b624db9ecf4188cbec3dde2fd09cdf10bc6def983fcf417b50b48fda9ae50e661747a1c8e05c4c41440cec8d17a6260e4c229e26c7a969e56c57c4e47c3f067021afd3eb47b69370aee422b63d51c9379ae06e91f7c5072c2f45551d11bdce4afbe6dbcfac5743a1534ce771eba5b1d4cb32c7a0792d0499c008a84d026a4e3ccf741f3cb548461c5acca388c9abc42c0a9d111df5e946744728273cf64b6f8ec2df09fa0d908229ececbfc17e6aeb897dabb4ce12ffb705ee2b38b1966a1787feb1ffd05a37e1103135a1e5b3ea0f314ce3187b79793e93db9b45758ace2f70ab716b8845464a18502eb2bc0f34166da0cda5eed25ec26836ffb551797fa091f0a8b4e875c4a48a72605a0d3b4fea85a1f2c4eec4b72dca28e0f00a0b865032f6dd42b993b9d9aebe5102a2de4371c176d9db42f78b6602d9c55e6be9ea299be5987dc2462ed0cc5d8b1041a1199569480b54b314e255577036673bbbb31214e462cdcd3729712c7696eeb32cd83cc43e0e9509c3c5e21315bb734128e9f2e41bc19aa00db5a41632f802bf2688501b816c080cab3af57cf2ddea46d995b354b33f4c0571d751d1b93bb62f3832b8b638ac13 +MD = 5a3c03122a8b7927f344b44e88098732f426dcdda35c041c6ff6d2b17b2f80f1 + +Len = 30328 +Msg = 854b26ff64da37d3157c74f47078997b32676a73513aa2f58d7e2c9148df95f097ebc2b89919deb0080a97250d0e8a8c59eafb6871d9ca6e49d0a2e7150674575cb4245c4e1982d857c27b52f408919ac6da88ace5bd62d776108e1f80955ddffb2db5b32ae309942b2c8845cd6d95efa1be780854ee53783bc757ff309337d19ddfdd84d67e5d2cacd127c53f4680d1131f334166758399c17c6550ce08ec7569500599f9f264e80138be99f29a398944842122c459dc8230b720d901fd6313880a93b83c48081053eab78a8f71a85e5b75aa7216a2457baf01f064727884f32195f1aa47872febc96d7860bed4b59a807a36f80358a5cb66e03db7c884375d5d778536c1b7c3c28c4b6be326c94883dd1c2d7d3484e6bb7ede6f9cac266498643ab92653e1abddc30bf6da705b496397e2f7c9512eef931f83eed8c668f3ed5d65f441a40ccf849736830f438fa080d955fca4015ca89b70562236bd51cca470819d4e5d4017ff30537948486f3523c9fba4d6ec18f91a9adf747d3ae9d805c7151e1625856b95b5ea404e2702f0938f5f5826bb69ca5ac4a64a74e439fd5787a9de61a5e4b3904e8440e98750ba1a54067e5e165803a117340de5644824e4dbc645f68464d73625a8e0e0106279fe407a8044a4eb8c38bb102696611f36f2e9f3bb9f6b0ebfd05fde8bfd6b3f17887a42c4a10e2c4d67d7c2fb4f84c419cad9b8a82202e854a527aea60640ef7a002be6b43cfb232f7594d3f6da7541b7b4d49d7448f0fd7cffa3a19ac4367b8cae7aeeb6df14d718ac19ca7efedb9ef6f7022b87d9de522024fb3ecffff6ea33d990e334500150f1528f2ffa825ee1c0dd8ae94a9d73f1295d580dad7f284459cb944d95586996a3b01d8bd42fa714fcac945f235c58e17df2e2979d0b7392e5caafb241bff5b2150eec6473cd5e3e92ad4a167bdd342a062bc063056d7fdbbf1f099ca04d4cab2eb423453f242b686928d295bbe9b0d5aa501bfa4e6bf527cf12c9921aca1689d8e9ebb3a0fbb4996b655464494874e853a81ae2e1ce7d7efdea181d17fdfd54faf66c38fe1ba4d97fabf90c8fc2276ee87ce6a5245dbee931f11dc4ffafa7157b23cd5bc14da1308d44e814f31e716c5114a6ca81e2616f536d010f3aa8bcd445b837a5515753a77e764a04df26fcec76b883da5f230d194ba7eb8630b0e5973ffdd19c17016445388a4765baa06df53fb0a55c26ea6bee01e704b2498fca68513ac4ca79157913a4c806beec556f90944333d83dfd23f65d75731aee0c124e63b637b7e0593d17aa77b097dd0da8c45dbb55d70e24dc394898614685f165525dba53e9b597555b33e06c78f590c099825e35e000293ec0a899f6bf78046d7a278e3fea5e956ce7254c63ea9ca56017eb75f87b7bd3f39267c0590c2d0ecfd0aa7a2442451c28c16a01bd743a1630478047c930e7e9a0b76b55b3b50ed6365cccc62a77d0f331f3e848a19f37a9d7302a1ece88ad34f0389ea02b438126482576b9781369e43085896837f2fb27fedacf402f0a337c881ce6e9ea3df0c4ad33919c379e77b5cd7d33aba8f5ee574c4e58f6153fe288136b2d77182bc2790e8e03b78e9e622fafe5d0571c3078036a93ae88a8ad2222372d5a93dc955f0d133fb652a69d911a7fc447b5ba2c02f1ffb1b73e0fde5c109c6b55855e042f48634d90b5a7226e3ee423800dab70f2eab4b15d60735af61beb2d0695c7009af2a7c07b28b8b66062870963a71784b2b6319a8735fba75a0bcc79550b3f0f08d286a05ef201e0cf500f7ed8ca25f1a81d1d741d06d04feea8e6592a2eedbbe1b1a9f6205cab2823ce258bc7bffd3e3ee72048061b19da1cbae2d46d47fa8b8d57b7c9abaede16c5a5713618cfc8f3dbdbe31d2cbcffce4b0867f2069e8d07748c5922e630c1331b9d9a89b33fae99e6c30efb7631aab5e25b1ebcdd7bcfb8fe183708b9297d068e7d498c805ad6b7c96549eaccc141164b7baf39da26e82594c2f8830ce33917870f2546686769d5eb893af316b6ec7aed30c172e6e6ffd79c53459bc7a41eef6c19d7bf51ad8e7bb4f98c1d3c56d5683042fc6de7053c548094c559d3b55415a66406ff25756e328c7ce57127ea21687c780a34c7c9c826a64a21c4165e02119eb85b0fca073081dbd9eef5bdb9fb02399b90cf6c7bcbd4784000e579e6516cbbdc7ef62aabfef109d94eb3e70d89bfcf733944c0626ce75c3d0bc2e49768ad649a16bc2ba9fd097e44adb38e2cf326a7c8aa9da9c8d4e6bc08ea6540b7705c03b8cb6ab7485751a3e2b5fc985f62c027628ee211f32b59ff6a44d6738f9002ffff4706b5d23451de7a0c95efeefe13b8098b19df2c98c98d2bc11b6767f126c0372f9b0c8dbb9298d65a897921eea9c384494cfbbb43bdce130a3e0287ba50ae282e2ea6c2159b3abc48dd20405b0aae9c71824ce855bd2ae9c7472e3614083199eac96ab869f42af57d9bca926cbce219abc4bcfbf65109779f3cd2bd27d7b1540b7340b9e026d249a2cb61604a49c8c39e19323b4d02d3833b27d6641a44961f3a35100ba2b8997f5f73ccf21c39c761f38997f28357f0d6430f217315d848c31f16c2f7d632e6615b9df3900b1246bd521cd166bfd9c8385efd9d3242192f08611e3fc5a51d23b53f50be823f5eaf9d61dbc9df2a0ec37134f831e9c791b3b5a8556dbd36ffb744b295150fdfa469cacbcd67a7ec804a486e08c5dfccc83d949ec43527b2630ad65d73e081136ddc0c36fa94052cb7c386b435425d7a45336be9727f4a40ce8433e8f2071e0540702a4b6b3640123a98f3ad888eabf890ff033167346f09ca8d22fa1a722fdaa58deeb12736a1c8912f57020892116f3107241fac3ade34de8d6c3bf40afbbd249b1e10367d707344f27a5bbe36d707b0b5955a487bdfea93ecd95587b5ccd446028312a1f2f53edb47245eb06344e79670208b43deba536f1231eddb5ce847922ae55d6f7c774fdf981cb6e8ffa1386b9f8b5aa64ab696fc673caef9e8983f917c0c99a80540ced84c2b096ef33621b5ac9f6e78a91cdcc254c23de83f24e4c95ebf6f557496e44ccb190048284bcbfefe2470c1e2344c483f8a45b04bd45dc439c8867db1c2b9c57dae428085285ecdfde20789dd460f16915d6c5af2f0d30a76ed8828a30b74cacab1781ef11501ab11a1dcd9829a4cb4b3035aed1ebf6d217bf71a5e34bb3de41aec49285659dc1fa22897b8b9782cab0b44b871b68a5493b2ade6284b193e99d5255ea89b3d18b11840df2f6a27d78103e82eefa299afe881d9948dd06c9c7463255ea5a809dde9dbb15c457df074c102b6636dca34a7a65241cc96acfd82fa2cb4f228650552505343b702da1b2bf06f7700f616a364578cae354ac51416b59999c238ba78a06de9bd986e69f02698b4f3ac8f6e2d0d8297e977b104f8802c109e75dd8faceec803e9a69213b68a4038f21042ba1ccab0dbb73bd351f3e9e7fa89b31fcce765ea0b8d8a75beb78271633cd416e2b6c568c0e329b9954b796fc023260759722d5a6772ec1f533933b29d989f14ce442332ae33e86ab649574bc834749c1e956da081607299bb85c88b4ed01942660d0f960d7121ee9e35ac037c8445e703974e45bf1fc7eadce36784deaaebaa935baf1d45637b4e33579f2043da42eef1c2f7d08b76911aa09a3926b6efbd543b742b4ebed29f915ff65929840012bbce5c90c94c2e7932eef465f83c67364647a1acb2e08534bf095c01a6a9bc5e5684ae43b9690f2639ad371383d9d9ff8aa02a5acf1446e3e119cfc01f19d7cec5f90036274ce14137c7ac6d4df50ec0282c575c30c0db54fd7698be1d3c190912179a919b5c6c7135239b98e0f9cf2026d570db5a4e0d2e1e0aff22277a49b845c4c37d9d01785f39a94cbfc44be2c78e82bcfed724a41949bc4b15c63b318264eac422b6a3ccb24e4106087f550f5e681b84ee2dac68bf8874c6be81e797107970e5a76daa311379d3139b9b7e208dba8710d2e74c21c5e21ab646e0e644098b3e6e344b7f6f2ac447b9a1a02ddbfb8eb0a8d38a6e96d6609764d46ba00016a33ca7f3d7884e9e3685414214cc0a51eb7d9419a079909808d11891ab7e92dfc852d80a992e9618d776f3a581c27336dad61bcbb1d5d7b3e4b11aa427e6c40b026848a119d90e3fb00016f36e77df5361a3871143e933d0fc1fb13667415c43596640e1e0f27fbcc80cf453645315508bcc1e14e01f6c975604266ff4f8232ed63408f175dfb1362883d3eeeabedfd45d3a29fc0fde49affc46c1765571e17580bae8fa600a6c56d64bfcec88200387e1d3eff1598f93c1f6cfca7412165ebf60e128242ad978c4dc4eb774c6e14a121e80ba1a449812744a858990b44e61b57c8f0f965ab69c2742724bae2d697c1d1c2ad09f5a628e71025246f3c280b4ffdeade6797808a1270ea102c34420614fe4b77aa92355cf5f261d48c4c4161d448e24f5f40c37506d4ac222db936fc0517d11006026d99ce7bcced82c4377652c92da84309fab6fa1fdbdf41da3bc63caef1eaaebeb57bfb1ce4c3e53c60b5461f4b9db55b8cbc66b307ac0b2fb70106343c8c072fa35fe646381c260d53ab188bca8428ae0011f71eae0cec224f490c480f5891fdcdd22a88454ac7cf86c464cf08e00f79eb5405e33d96574a4afab94ae8f4e1818b5f32738ad43ceb809d9529a555ec57a4df2d8134dcef00508287cd67d5785362738868774d07f9c793345c1e4a41cfc32fd879322525fce69d123fea7ec8fbe9abb7079919bb62d241ccb6e231a23adcc2915ba4137e988396c3231f5555e3976428b17edec9cf1735b8ca8fa070314833e279192c5b5badfc250744fd9192f22967f686e0b5972ccba327751b5e3bac003681efd46ececc59b26d19dc2e826087ff574fd3f143898ff62e3106aec25e9417d6b6b00b5a752bf5b4fc756f4a88fc4954483d2f5c940f3c6f51f6f46df68c01180c23c3971eef598f6b5de653c1f2f06dfe60a25af2a5e06b4660c1870a348ca63ec429fd5010685cf50a1636b2086f14d1030cc72c008ca29ce888a5e04a1501ecf5a1058f3bbc9e17ee915bbfa92fd97e78b119869b8b95a3d2dc633f1924cb955ccb4842dda0d3528fca3b6161bd3c455651dab8c387b519c41f176d4e5663a65dfb2e0152bf8d1372336e4dae91adc41041833934eb916d40d36b0146045abe6dd33f4147833bf91a6f6ccafc37be892b129b6e5c31bafcbd9bb6819cc9213c20c5e499387650720cd0af6fe729eef32b478beea5e48266beda8264bf0f47be0b55c66f82137afcae09aea2dbf2af908 +MD = dc6c64994bc483f0d72645d47388b42e3578b3bb80e9d4d37dd84afaf18fb30b + +Len = 31120 +Msg = 90a7bbe8d98a18fb5b139099b0c5acf3d8ed906f2ecd8af09afaeb570903164a1a53d6341a59f58c33e60a5be0d692f8a4f24216fc159c01928ec125b3c686d00323c939702b06c064ed25773f9c96e2047ea0fb5204f679973b8c528063a87fb4dc3cffc14a731e56f18af7b461e1385f58522519e4c1e010c8f4e75721a5de9349d68ff7fc652f72b9e0e2266b9a821d49ff9c37fb24bc67fea3eb1f49a575093140f0f88a04791e0fd0417f04ea49a5194f699692489703a53e66c223cfcd7f5b222aae3c7786c3b9021ba672f9136190ec931cf055f84c85706127f74c6d5b902246ff59e7deca801d7883fdee6bb8757b22b35f7268aa65dee2360d44dd0698eb4bd52b7b07992cca61feeff2d61292a71f4225c76e850e33f4d7acdea6e93b234117f85c8b9a85b0dcff8e2cded7ad1591b18b7d924549159cf21e424f6b417330ad09b1f2345278f46e24c50a708f7080e8d9bc5c52dc2de46fa99960f37182217ea6a3c2ce5dc9ae33f7e4e243005ef5ce57ab55158f22d336960b62eb94f91b74165a85d26c4c14364fb2efb9c887f64d4d7304f42c9c71302dbfdcba727f2776a3fdc2a748a82d607657b83bae958e4c023bf1587945c743b5de56c8d3bd4c6d93b402b5b9860197b3fac62f7b2dc2b4bf2ca5aa40c2dc58788f587d7f5a923f2fa9cc64878e99c44dc39ffef7f99c6bcc6ea75047beb958bcfb6b413dff01d5bf01a81c7967fcd08ddbcd11eaa1235a71287fb457df6429ca49167cd754a2178be71e4558ba32a1bb6ad8cf1ccd5f69f683b63c37cde7b5eaa2e29613007cedda81b747ec2e44211f97469f55245981a2a6d352b1314ae2632e56f7baac9740f6f7fa8afd6c3936008ba1eb5c4e1888beb95e5d8bb3939a7f14fa0794fffcf625727077531b19caa86e701afaf4a46892e6e0c58efaccc4847d562f68a2b2f9b01a9f74b5e4edc45d673c94f7be06076653e0f182affc48bb90f3d5003cc12fdf1611eaed6fbc0c689e8cc01b53454f8228e64b2f792c0e6c76586322763282f98f4e42c1638e8a113ce8082d5c69262d8e7a3a5c0163fddf560d3f97f80cd948acdce2fa696b269f69d8d3f7807b76b1ad2526d3efa9ff5b599bd32669571b1296453460285cc85c4ce58a3f68822654ac6e775aea06fb2aa7898599721c32a074119eba4968588e0e9693cebb861e5fb3de96ba9a83da92675fbfb7ba62053a6fc68ad27398be7ed674576c2290461aecfbe9bba82782dcc2a6e847ea317c27afee5f6e4ff3e274cd063ee045a686cc7d50d924bcfbdc4fdfe56712a9917fb15b1085578481acb71bd4b1f4cbd3c6be8e62cfbf7d05d035e7a4a6e0a08bf61e9bb56455bb4a0591e766166e5d1cee3948bb3152944f47d4016b0c787626c9b79964642f9c57d3485945d617a28be683d2e268a6a8e1277656c301a4d46be1c47aa5edafceaf00259bf85ab7432796e4555fdd8362c15a610d33ed2a6260248d6900679bfa5a7270d2070916e7f8e6a6f9bbf7b06af9c6dd4f4439d3c70f7b598cfe3abcc761137129fb4afb3707bf10e57d1df767915534447c4b67ac80ce720b26cedadecbc970c65a8730da5b0769422db91e028feeac13668caeb8ba061e0f018bbde6a07eb4d1af277b79fca8fa375332eee2fd788fe587647094c509a6c015da2c88e81986737f92a5bcf3880bed78f02fafe2dd23e1693c74e7a9c15245ed21f06cac822ed3542f764a4791e38c235ba9134704b130937a835a6e1569c70ec9d139f4a1f41bb568b5cc00a9cc3bdddb23b433d580f98d8865951dec356d023b9798c65e1f702ba42ce927ba0c222dd8673aae38da65e0cce23fbe30fc6050de0a302ca1f9fc3d4ca14ac3abec6a9bba3b4ec115059c13b0c10057c807c78019f2aa2d52c8e773c6dd97dc64b43bafe9689872544ac5ae9acc82f29c9ecb1a5616add159d559557ba8777bcdacbcf2cdb6bfcbddf10839f4c96a96940894a7fc3fe2219e68796cd3c992a6ce1c16ebceec6cd498428e3d2581634c988f49af7335f02409c96f3f370a91684f4b702355d446946e857f4295bc131b907912b822c081e3833f64560d311cc63882f320c834f613450103ceac42220b640f184c73a83a64f213803abe07daca7109c76c91d5235907ff406bd2da3924fc9983f2cdb4c5b1408eea72b354747be228138f167f766f9ac761a06f4e006f405f7b3398aecad253f5cb8653e091e17427ff0fc1f9965ce8a18cf5eb641ef319a827953d5cf0cd15934aff0572da050d4db576f90d2d28d7d5eaf3aee53cb86dbeafa22286e0ac6caf906433d4f7ee96e35a4b2581e0dc51aaa221209801c726e73ce2b0f642774290c43d44cc8fa4f8311917af1e597e3d69dc08aa4716272a6cf6dc4f73bd347e7f0f13a0234a30197f1861feac4019825bc22eb2b822e06395041868c4f9ed08c4996cafa1d299e3157fb17af33cb20ac5791da2b4cefbb7a98e1e61b29fa9c8a789d3d80dcce73d3a778f8bbaf653bcf22c5de003c27f10f2be77a4055771a67007cd8630e3230e38288499cb160380290174d66da57455b6baaa9785c84c8a663de41ed3bd544055b9170cec43cb3eb120eceaba1fe36e3eaa3fa4f99b425cd2519f09bc0282bada52d14ce625b1ded3b24d86b1dad342d2b7be322b775b04fc6b86afb45bb5640f1d39c18165c049d7df1d111c7b4cbbb909b0a8e105a06a2cb422788270f6263b3fd7d484abfd6505cee6f3c1ad56c03dc79d70e4ed1876aa53facdf0e84ce8a7e333ebb99e721ba4a82f936816fa3aa4190bf1fcd6cb11bd719714c46bc0929c2fd670e6e72654fe94815bdb5e3f0f37288493f068c221af367fb7c7a3590c604b47c9d42e21f659bb63b2e12e2e283e1c8fbe8a4c048fc6c93c1cc1351f3e3b600e604b1a6ceafe455d00412ecd6d011db5da902a99444b5356ad7acc1a117796b49b13530e193559f7aec40526c6c7517c4fcba98a2785fb53d0b90e536b5b14c0e4f3820f6a461fba22325b411cdae36f860372de1fbeeabdef48a3d1362e03baa2b44f78c478c02dc553da245580f913e5002d9d163c471b71ed349c58398a2a3c1e6150111464d9ffee28d95b02bcf2d58981d0f3493bf6be7169bdbbc4d2991cf9619f3862324439cded6814a85393bf68167e9e2beed53e9be93b4516038fa90df66d21aa53f8d9b6d2d76ab9e67e096395affe2a874059355d1ee07944924b22c9c3b434ef7d49727e30447f9f3c1d43a66bfd902fbf77056c6f7333bd2c6aff81a8d9472d59efc99b7b8940a45461cff0bb82a30ddb00d5bf35e58d97e46e6dc725782d35163582cebe23451d4e3fd11ca676ad4a1b5c6bfd7820cffa42c0344341792c303b8267c103f9d633b31e0fd135bff40d08f38fcf400b410dcfc61c9c04c48d46513d3e1c51f33a0d096553b86f46c17f282d0bdd968e2bf912e9ed7b7641989edfd0d086b1f9bbd5db7e63795cf35bc70673a6ce8191d4e594916e87a0d994616da2e5a829f39fb0aed007bb04af0c0f272b274b0afc85fadb2768698972cbb6841b452ac4c92fc80cc3092670601a7c15bf57fb38b786607111a3c839f583c6aba3b7b38764b3457cbf3063a7efce385795fe8713ab1f3edeb9e74db94b05b86aa204eb7caa734f872c431ab145706b7517e496a3be98bca885fca0105a99b54980f47caa84b60cb3720bf29748483cf7abd0d1f1d9380459dfa968460c86e5d1a54f0b19dac6a78bf9509460e29dd466bb8bdf04e5483b782eb74d6448166f897add43d295e946942ad9a814fab95b4aaede6ae4c8108c8edaeff971f58f7cf96566c9dc9b6812586b70d5bc78e2f829ec8e179a6cd81d224b161175fd3a33aacfb1483fd68b325e25dbc35e4361d38ddd66902db7e816bce8f74079475fbd23218766042d99ce2ec1e31b05457e15fde92d7da59387a0e51b592c83bb4641ecc1b0cb3287dc1051a55085b66580e60278aa850be7ffe3234c037d9e4136e88e19f420d1ce9a1e4e3beaa87b8bb16d23f2a651669b960601e1bedccfc179da908f1b0deae91c20adea792d5b9f57d3e8bfe989be969531044352f12023553e7a8dec3983c0aa3ff719c4bb5f8abb3fd9473bd41bc2448eb6da8763984f133cd57a304da73b8ba2b33294fb8d3225da7ff264da8606ea429e0e25da3f2efafe28beaff05b420973699cb195ef80dccc61292b44064ad0784448f3001ea654a9fbc131cba9bd6ad7a1bfe3308d5c2a3c07525abaa4763f5631eeba7a3ca06768d7ea7e869894f7f8e403f2746daf5552fad7b7e367737d04ec6a42f3a2057d6142a35dc830aff8feb9d0a50b995fa638c11e0b685727d2abfd22531156bbdcbcc65498397af6b511a98ec59a19566513e4911df07c7b8873ed80b57c62accca2eb63f5827d5275573ba51accf37ada0eec96b724df57e68343ea2fddcdbe973b38393d4b42a982fbf77d6c4631b54d4e60979fac87a4330487ca8bdca0db84ae353e373bcfe52223657e83b3dbee05fec8fb9e2f7c48b81d42878f20e2eada246adaadfb2eec9ef80e1127b9f70d4b44ad2a7c56c72dbdf7fb8904529bd3e2c46076653367a83ea1799c1f008ff96748958c01c86f3989b93a38b119d47ee4b79e78298a80ff49462e893431aa9ca1330b89f52d7c56668c87fc601e94d32724ac4abfa883db0911b63e2ef451dd402d94891f2ff76b9a986b3dd709e3baf5341352ef367723c4289825d5f08ba48e5dbaf44874e7606e046d63df81c91b940e5afa83dc65bfc3b35ca4f0ce60d9d1ec043238a4541d2af916d6402e4fde4ddc09a9414154964edb8b254935d8655202faabb7684689169eecfec2b97ceb68c3a9c6f30e4c92acc7ac0fa6cefc2e59c525c78d68c68e7a1c79442dca592a2dedc1bb5fea569a27a147cad041d31d2e600cef814bdb139d9a450e4808ec83e482d9ef4e7e7897058ee4be8f35651a18f938895db98e01c841d6c5dc1c3fdfd4a979ca8772bc6f8fb80c53aa53bb0e60b92fffe75ce63e4339b6d2b1ad5a24468b2ab4d46d2a0b0d4746f1eb42dcdf4fc77bb7e8d9ebb356a96d9b8f64433c82507315fb17c953c7631b0018aad0772b4ca31b27dba54849b9818a3ee9040dd01fdd55c519a12f043212e8fa35a0bc3c6f30916e081de663937c0685e3a5817820efdcfa1bba880edfb31159895398cc59a98383085a73ed5ce6762efb2c7fc17d311362c41d442b9086e3fd4ef1f2213196582f8464d82f3f4544ffd8a3eef55b2b60c4bdd14da46e14c7ad2d83b1842080783a2444fe716223d7c12311b85ae5662ceaadde89c1a0e42333cd10bf3d4eee4b6c8f01ccfbed07973b837fc4384069e09a3d4de2c94e7e6055d8a00394e268398d6ea32914097aec37a1f4fad997bce29d15253f06a26be7dcf33c65d10476aa646833ff06de033e7b2478428410e89cbbdc6e87bec2321f8fc8eacd3bdea106ba +MD = 90d504eeef64c1121b3ec3e9503d00b69af406f0e385897dbef426a1516a8f65 + +Len = 31912 +Msg = 19a56992a7eef8edbf66915ff55f0fe79cf4f48de79aae9a4ef8190833f94638c61f7be3261a7a53c99906d31d60a4646f9a9fb10d714e45a7dd99fcfbb9bab7b21c415484e65bdea3995300576b59c0e599836ab6fd11c9b5e3f59df919934aa445c5ce0b7b22f5170f80d0eba8b763c696a89e2b667e8f40b334d5753f585865420e3701015702eba3932a204045b5da3c1736b5d31efd10f45e8bb6539149beba2479af9f836ce8fc96f53f5b8b1fe930d71b9a6c777cec4f7ca7057ec6847455107a5d7e2d9bd6c3901b90201207ba1df033225b13759e6c9510aae7807352bcd92453c6ddf77d9f8a835bb861d616a96b6897c57a4eecf2b1b0edb8467d1f97875dd89e1be8a4398b15e84b01f5c57c4fa13fd532719f8ad86e1516a10aa28d230f352e70d615389bb97e0078ca8f3fa4c664b0c5447fdb13326c2b1882a447b321b39f63299645c25767ff50bf3c9a72be4c81bb31538e69e4381f334eed6d427b98197d49f00809d7e971103b9334c2733f6e9a9ee54ae36dc21a7ad445a6d5052cc3449eeb2877214d7e41a65db69bcc879fecf5fbb888b35243767d749a76a7b9c642914e4e151edb4d6a6762c706b16b3d389d5e7f609f30c2aeb141f22c49854aff88e321eab4da0713e86a100a0a327007fed6487319a3c0aad9765600d3d97602ec704afecc94d3c5903d39afbf255fe0802abbca0af465f35bd96df82dfd72d326be70594f4fda06c7a2e9fdb98c334b8b247f6c586cd810a133e01f3f3967fa9c953c0423544361f563c8fddeaf13d0878a3d61ed514289114b567af2d57dffb8bc560632eb375b82467fb617d528f8dc259cb2afebcae715eb78132c18db6be1fd6567625bde7ed714b6304d479a4af2bd4566888499b114d9eef1d64caac67e1e112f9dee5f515a941474664e904f321adf855f62d66f76de5f1cd9b71196f9e80467caeae35c749042894c30328d020313181bceaaaaa2c2749d1ba13965b923e317d19891288dcee877e535a98ecb418925a6103de8024dd47b865449ba269759459a40923c0e18ad471ba71ddaf69de8b7e770b6b4fd4727be01176a1ea80b0cfb0c2a0d205d343900d4ccb5f7e9dcd9d3c6363d93fb77176f7331c418a749a440119d2b5de4ea35aafaee9a6f0ec903832ba9fc0f64a64a94c6eb7e308b17ca1d90e3147a0a04494e7453f4cacc2b0fcefe1218afa19c6838e18dc1eebc3e26987242efff36481cf32a43ea8e8ac9a4bd27b9bcfb18211a60ac5fb4dba3865fbc9d03e475d28057a10408a445b26c6b568fe60e7c32fd08160fa8807ea6b61d8efa6d1d634572a160eae94b76abdc0ba31ce136b957f7d961f2b24c5f2e980a1871cabf51f7e7a339c42d07aadde12dacb7f15d3bf0d9354a3dc34107a4f2cc61eb60f5c750a605337a1dff68b04379784960ab886369c6d7d82487fd6e8d0b714e79e54eb8796e57f4015c388cc9960fb874472a1a703112ab1d45c9f6317051845bb76d972686ac1b2145a2d93d2d79ee765aa97bb521039ff5a3f4a2a5a208734e94ad5576f63ad5c4e32fff65e5bed1ad0b8bf0023cb19af6ca05dcb34a9e059ca4955a3166090b335e66660967e74b63835ae01d2a248566e2840b21101c208b0ead0e1f7d22a6b7ddd076f35bfc43dee99db3cf9464498e12fa96b89b89ae65fb7dda07e48c8c9688f398ea6703a06866ddd0e0227accb683eee74094ed9670928e24b3434fa718885932b536064c4722a1a1187b6df8265de86581a250c0f5fc6755e94174dd87058aae1d6e0c2ec344718d3f4845b425c77078436ebb143b6090d67286011829260d72eab81e2e26f5d5fc1c300ae7fce90f884da0357a8ce7920e16bb013f481469e8e4bb4334b65c565678dcc57bf4ec4cfd68dfc7da2eb8f4649c88793a2af72976d2208328bda27b041bf37e5753f8b0405cd3781c6afd3e42ce9473f117f6d2867e8ee6f281eecd6ccd1e3b636134c2b7f125502888dbf90f7288f64c5939ee7faeae757b4b69d3f75605068768c90acbee7d57e6d07cac32510b0b3337e904c92b2837a9623a150d7d4fe6abaedf10e41d82963f8a08df1533c6b98ef82e9dccbda33565108b1b170ba5e4b77c9c5d6b44dd1419fda61a1fe0600845e52f40ef2bc775989b816e7bc9ae06931a2b78c62c36d95e727fe6b81f8200404615759d3f3d01284c4695a37c135628d0b2e95f9d33eef431bbca48b9d4aa676307c53bbfade1ff6b0218f5ef7bdc5ce65a399d5f7f5ac582814f3777fd0da3832eb63274be1b0340dc80dbe98f9f18a34aefe739c025b7adf9fbee1fa631daefb2d2ea2619b91e12fd53bc31f7a74551ab93a7f49f58b4f94d59d379761ff5f0baa1cb9d66c2372b8d1c00905afcc936a4ad4458c3faa3b0a2ee4f4f16deddcc6eaa3ea04c3f35d1b3600ece60a78e9a5ec6262dd5136b182344cb672d7678cbf775a9f97337024d97a950b3b2af7ac70065b53b7cacf679f5e2ad8a64f0b0377d8a756e84b285e7627e2d06f81c7704b313594a61cb2b1d43505e8063536c5627720bc827b9a6e63c680d91d9f66c989f577a212b7bf24b33174711d1a794721eb4d1ce03524d944cee581afe4640ccebb9808983c1334aedbecf0557f50fd18ad8314ac1886237bb98776a0f14dde8c0c1d34a11a7d6639acd5d239c44c7bb926692020860cd18b0eed049b3662a3445f8db2c7c34c4de62cc5b34499ca37a5ee75cc081e4767f5479cc7f92460ff7a3e500f76d70e3036c44300005058b5517e3f64ad41b46b3cfc0d3d355bb747b0111ab728b641c19e1bd444f79886793e5e0ca68a80d23fe484b4e0ea4cd4106880242667f17586ae8bdffe94c2c1f7def683fe4a5c3f6a6e7a3a3f826855ee15f422f9bf0917d3caacec99627fa9c5b5e02bd857444a8f4d64f3c5984eab454b059d8d987db74d84f770a1db2f8c4755937ac12bd981f303ad77ff9660529a6a0cda7e8ecfc2686fe412a4794308012098d755427c845a23ec4d6a072dca6215928028fc6fc7a8edfb291dc76aab97b968e7e135bdb0192079da815537a140b03f15397bde457371b54a7a4ff6d55f927c2301601d93a47c0ea5d21afe459adc5b101c97abba7cadaafd566d8813ed2e4b0f327c0cbda0a8f345d8c2f245f4fc8ef74eba589518f434981eca8ee5a4ef6e0300c40b8c8239c010f1e7a400c39343314c5e6573dce7fac15fc18bc93b785da4d8e2aa8ecda10dcdd9e39434ab230064921e32c53cfb560f75fd0f4cf53b827b47526a32e76134a2ed613320003e4ee7bc547107bd90eeb91dd779ef86cb84ecb89dbb27641ccd56b8cb11716757975127ab80b9d36b2d7493db5c0f548add7fc92f2dcac816404fa89baf9734e17237608de26a12cc8ac89493464ae2fbe4bae57122ab87f035f4495d7e101d6e57f0f3763686f0479f0b8c799910b6b133048a1e4a28283cf6fb177b0d6a7570c1146cfecdaef06ec2d3d808f50f443d5113438104ff3d5f3bbaaf9ece04d17b461819724820a794aea823cbca851fe2c73d9e43d36f1bc95cc95e13307db5f03f82958b06aa6a7bab0eec2c8a10ae53fe09f6d13616582de28dbf82f543a77245da7da3b9aacd66506e9dc5c43074037dfee9a3cd7386df559e50686ce50a73d1861e56b18054f7274db50209731573bf92e345da050c602e71ad3e07e063777b2c141e8ee975a0a822ce7bba46e7174b4c70321c597d42f58e126e66a456ef9b22eb55b244c3e55b94569d672a7d70a9b22cf2d4df4e1a236a4c93f9cf396eca0100b6cc00b457aa08c9e180ac5d22433a5602c404e338308ca82941cf9f57705ce09c2ccbbb5a2c06a4e2a73aea8ea06b97ec4a68f13fb57bb1a8df040d3c367d278064f46d7f49f4840b3b54ca1859bc7f09d889ec932aade59d122af7af751831fdf5293f399c78c3d5cd985071d7a357f60ed639d4f899d0609ba2d313c4849c8f6dc8a51b8c0a00dcde64320d92c6cf3b5dec6d77a7c5febdcbea43fbad68c39f2f513387a10ea78ade46d36e238d5144362afbedd0c8dcef338fbed9882b43b7da516f20741d446a4dceb8f6026d7a9b381069b9dc08d78f52f1a83ffd429963cf57bc586dbc43e5cd5a5737a7fd97cac43b3b6e521c8b18bace94916555412d9ec2afa1f6424297ad7822c58c94553d7b19e57dbb6a6405db64f86068c9b77fc930cd8fc665bcfa9ea6d01238f82f7dcd2b0c6a70790ef12553784f602678c4cf007a94268d1f88f174b390356f83062afcf4a729cec84539186890f3d211a720e04b31cf3ee6cd465051d1fa80fc5114ee42d64fe23c8c77325de78c72fe915f2ec40b08e1af221dd83f5a00c2f8093b9d8b5a4b49e831702fccb5a28fbc1dea6a59626c1bd541e85ad09ad0bc0278df8912b5b46c47dea47f397dde6eb6a753119fda7143f5872676ba06f2c2a83aa11f9d7b03dfc7de948f38c288b69ab819b2ebf5b1008c7c58ba6030ef7d55c8f0ef700cc1fb04dbc0fe2f0649fdc4eabecce23693c8068c1f7447bb1f42a7ae7f672efd67747b30aa4aa0cb8a8ac199a2de070f92010050cb52f4e80ac8fa458d254edf7ca29787b0d31284d3040d5f6664cef35451e644ecd4dc4a4a66da48aa9844057a2bd64b854618c4bbe024a699dfae84332144e30458827456a2d402783ea301d866d3e6981207fd9db593f99dcd2a24b6f588b5927c7bd8a813541d4696e0772ffa1d0369a584a1f0dad7d2e2abb67768554e3737bf2d09c72ef6e3b61f80b7d94bfe0c5a9f03646df67cdd190a07debfb6e1e2347f0a6a3c5c1910476708667cd3037c1b5d08976d6edf52a14662dd35910031395ab87c6031570d7adbebe57325c9dd0c7e08bd67ca8bde0c1f6bf5628a15ceb6c0abd2db352d55a10cafc764cabd99ae608868f5800ef9c9c387b9bef89ef52d5f58f015de08638a67c87eba286b5c81a30c0c8f25e5105af14a9cb362f85f1d654446a89274b1777bda9dfbc53f7026b4082aad328adc40173900d86fde5707a0f258fc08feea08c73a87a237b68efe220145d82c8c9809a3b798a655ad976c60f7a998980357aec88cde35e67d03886b8be0887a46de28356ac6a5eae27abc43a8baf6d62ea4d9fe26043f57ef78560f0c8d46b266391c3aa71d4f66298b97b799ffaf39dd3c3ae6ba9c17127a47d76b179e8b5b47236622110f0b7dcf445f3b5ffa2a399b9822009ef8659cca1c8d2e11b6dedb8617969a2d0e7288503fa35d4f4ce05be6332fda67cba35d4b40f7c6af48a9c99f901df14fbe1d1c58c7d48c0c4a6a2759b7c4e2996838ea7a6fa7a324d6849bf0277cc61d7053b055979345fb753012427081a7a860ceaad3e30d6236d2e7c9244823870ad7cedab3094029b17fdaa35d07d6981947bd44e465a98249e05bd7a86cb2c29c46e6f21da76b95a2acb260e5e83432607f9d1f2841fc61c261595df92faaf7466024acd1fc861863ae6fc1999c4b15129ad6b01c2286af54e858b292eb6ca39d9600519c63203068d76b4bc49e5baea40c029e3c61c8b965e7e28c023a7846066b1286c995ba5c26ba2d761359167d99559930058a432e79e27f20c3876e5d1551d3c2d5eec52a21e +MD = 2f69409b7ea105d8a4bbd70b563ee5e27343971a02b309422f8ae254fb345957 + +Len = 32704 +Msg = 353e1a52322700fc605a71c8d998f9a818818c4b5e620e93554e1949f370fa10a29ffc979e33ea139e17cfedb62000b77c9d5c656a30d3ba83dc2500395eecfc8fc1dd217b2d4b048e00ec10d61fe07b048fef78ca3f13af872836ea26983c1143cb445890bc2bb7783a529b023ea2dbf77ccded4738d65aa95bd36f82c6f23508e6baa4a7899314a4f089f400254dbe9f8f7c2aa9c324a3319d85f714901452243ac66d863b8a0359481785987be90e42ed8699b88706726615d2eaa59cac4fe0eef01bf67b196ce06a86b494e97fb229c173a13b2d83af91ec45b0fd95c114842bc016bff14737817f5eebbb1615929c31c9a9fc5ca442fa4963b1e4215c895818bfc7a9441c4c84af2591d4abb696e265121bc1bd7013e955b65622e88496a4de74947c1da0933121650da84f67a64586d55e53f8ef0aa638c5057e934123afa467e6ff23dcf5d0fea5c9ffab32aa0bbc9bda7ab4291078191827c2ca9b18c2932126fbffd758a86d6e2ca0661e8a7d2eebf7fd99270ba9203825b4349b5d25d329ba395899a60297479e5529332ee3054d1da650f0e57f77ac651d7a48da208b070c7ed72bc526a4b887e49c7a7e856849b43b818c844343fc51c444ab78fbe344829524949f5cbb49501666fa63aa80682485d404d23cafb1507339ca1dfd04678645e6dc1aec04835fb330bcc39c7531d54cef5fb5b4e052c9f001afb26f16f87f55c50c201da8ed1d83a1c688a16e2d30587da517f101672604456220994080d58e6b2b9839cf10f24d6222980293e29b7024dedf3c3878ce77ade94dc3ab86efb87d416986a07247db1ad8dd070dda7f5e8c13f5ddad0e2911e04e23357f92379ba6577d4d449d82f372ee3df7049d45e85e4c411c8ab09f9a87998936e32c14fe8c73bbd5e3190d5e126ea21c9fb153d7428faa41f4e798d949d06610ffddeeaad7a00b68a36c4ee4a15ff3bc07a013f2dfe61b93153a7c97cffda409fc2c2e6830e3554caf20af4cc8ca182064f2eb03de58795b1531b39cc0272a6a02a23afe3f4681ca2dbd96602eb6f890dd2d45d0e6edade21c54a5b0c557e07b38c57b34abd0782a46c96de67c2b7d539adb8823a0ae9f6d512cbb9b8694ae83c72059d41c8920b421ce9ba759328eb3c4831cc2b4a23747dc405b24aae67cccd7383da43c7a62b0e753886b6ed113f683ae6975c9d25eb7e618ee15da55329c8f978d6eb0aa2765bfe19cfa6212f565fee3d7068744fa04973ddd34bdeab83c17c4b3f82321551cd2ff3f1bdefd1a485eaace3b9802f47716368f4afcacf6f49847150b3be8d51d4735d9988a996be7ca8bb6dea11435588c8b6b1e3ea4d50b3aa91d6ea00690b0470bd2370deed0896b0ff7b54d80a4ef20c5db7a2cd83bcb247131ebfb836d1dfa0a92c11004327869bdf98941502883fb6b45246d52117a7f27bb48f46853ab87b981fd3ae477faeb1e2421288cab5d440513e5aa1a40617253224e32bc2ca317a008b53495895819b8e147a83a14c6241cac858b36afc8267ecec55e87df4dd1488dafa51f4eda1c1696c169644b04c33778ccb7b045f6c22f27751fd254f1de387ab4368bb0c71cbdad581411375f48dedf82d790ec356fef95251ea473d765f8358c8fe0966940378cd4514ac221db99496e92dc8bcb5545809f030524478f1128ff5726e706b10a9dfdc716d390a6f11e59919e09019bb950a975fd4f88840ab9d536658de797c1469b1f7d53f6ce6dc60b7cdd501f6ad36d0c1c95dce36b6b52d5d6a66f5419e1f175018728997e96aa4cfaa2476de91c3f90a1d4b3a06cbd5ac9dcf075945ff40554133d3bc2dcf230e4b3f4d633411b2ffcacc3bc07b1873977f34c87f19282ea0000a674b8100bc19a50dbe5b89958a31ae468e05f5f5156a7c1c18db1da1107416ecabbc54369c637795f5c451a5c04b0f2cd05f2a1a41b23ee576f1d5e2bc6df06b2f92f9d92a584d5892322ebaebb877dfa14069d06efb22316157d47578ea16f65143f4510c8460d60239736d72e672ef5f6e47b023a1b08076819bc1ec85051ebf63d646b9548c8ec42ec205dc717adc891d4641d652744314e38e606dab4564d857121297651af366968d3caed61a17bcf1d80e1d69e809db024ed992d952492ab22a5d4d2286a45815477a5070bb3149709f6d5f64863517723f85f29bb63c24f9a17f31096a02270f833777fde8a9dd0deef812dec9657897e2fdf36eebce6591fa00f9a63f9d3209c30c7bca2cf1d64e5926ee454c0b7d07dbba1bdf5d605b0fa68afd7571f627788961d261f299d3a66082381468a773367c42d24995b273e73965b2f39b7d65f038c01251c41243aa978286e8b9ba19986710cd5a2f054ead1539c0ad36c38bf573afc2163beba4cf50b0611eb9d3cec20ebc536d83f959c5ec6f8d0ebe38f7ecac99582ba49675894e844d42d3551137e5ae0b102f0f13c6018f9e94ac7e386a56155b0ea8a3446cc396a1e1b0de7f6e8e5e5adeaab71b3207027beb8be3dbe3029c314bb2828fee62301567bcd067da5b45d9256171ce7e6f709b5fd70a40eb24a6714f4cc4c6929d090e6161db690fff0d0c70fdcfac1fad42737e087205e75ecc9195f1da66ddf689f35b4a300173cc1c4b6dda31329a33009ad2aa8b996bf35728cc2c441f34e12b6ab1d0aebfaa54ec3c6871470082a33387da37d789fd950e9d3e66822e4c0f75eb018f8802182c0545fd7d61844d7043b1113ae645f0b63b65893b253267b3f1eac6e16c6741b3e00e9939213c7f2cc9acf42e385bf9c9762819049dba3c8117f07e70bc5dcb7f14dcc84ef6a77c3b2de21f8c3e4a7d61374b8a7d7c241ee9508294b7f853fa001c5717296243e92df8e6efcf68800ff0074649e0110ea37f5417b621c0f871c95f03e252e4903a67b321d17257ab06085eaec3e71ce85e956b263f4876a9a74d5559c6460e2ae48ad529811f8c0a141cb5fba4fcf04fa4de3e44ac86b9e62f0ea7cf4f8d4f526c09d7746b21664b9eaf95b3599c2b831abc15e99a76eb4c5d7fcedacaa318d555674288fc1286de2a23864c5e3f3f4114b1ba8b65938b3ad7332312e401faf22525aeedb08d5e403b2b004d2f70abf8474174b0ba672a3010ab5cfe082486575fb7650924dc6d0046288c2c49bae22726fddcefe56c48ca9e5ad4f2c3a51b6369af1d61c59a239ccfae92604988723c18596b9f930d5778c4c413a792ee5ab4d77f208e2f4122845c2fab9f8b63ecd5afb6a9563fd4e6b948699162e27aa4aa3daa26f4ae5bea35602e40209bc7b25251c80e8a485d671a8ddde6eb5ed489d1e0b2992bdf64db5e701ce8a9f74e5350a2f013d24901690b09738c7754868aca751aef9a4ed6863e108e1d723a42504f27b14194ae6b6d095fdceabd600b27d27f6592d6593b6b72a5f4473fb15e39ac349e206804e5d393d57c9a140dccd1b844053b56ab0e0b8ab4e20e6918fc60067e1938b2e92b3d491ed50321ba6628ba878c419190c8d6e4c1d9db64cda763dc48b4e31ba7862a879068ce4cf2418d679e5d4e2dc6e66e2f613e26d93bd9c59c48f3b7e8dc90fbddeeca542c41f9805e1d1a9971aa0121b8f791892d001e05d4e3483fc0f4c641ca6e5c2d1635e8920c7826ec03a683a21009766ae6a6ee95049c44e33a8cb09ccbb3a0b1b12ab942d124149e6a68f86fd32b5f548c9cc603a9f85c3aac10ca6d50333a9a73acc6136ac566290c5dd9db60c1bede855e3ec2337c00be9c0d9e2406817c4fd448a97427c09e246ff19285475117517767b3614f9bc4d780ff86514d13083a696adde5a6aa2f190bc0dcee057deb55b945be514cdc3b2e01431d85925c40f299afde0855e68b6f7647f386199cbd63f174ca22c9b1b62a8394ee3184e1c900eb74242cb40a45a025f380edf23200048671615634b0d8458e5152d5833802dde5443af34f89f043a1600f763dd255a00ec81e5c1c5e141787f505f21bc370e20dbc9cdc96f9edd25ef9e9bf3af210dee0e55bb4ef1dfc09171c5207bd18b5c5cb39c44918bec0d4d53dca39a815e409a36593e13b84f2a2a223d196f5ac23f1a4484bd9435d0bb3aab80b75d3b221c8dca5617170078a6ccfa7ff2043f25dee3f649e0db569110725d537e46c5b6c94e3414ed62b3a35dfe6155524368fc623e31b2546dd478337fd31da15c07626e65da5b69fdb7187648bf85e132be8ff2b45d88c25399cd4ce973a6c7a7e96d345b26f333eff61f1a327cd848dc2725b7cce293d1938bd88536a7b59930542142b77ea3f2405600714500162f468c08d90e289b2a3794e004f0d614bffe2ec4c1014c344ef9c102a208b4073d7ad67e7f02986874469b2ff19e6789e019619fd8c2f76ff1211e6ed604fe721b7febd0d13198c158c9870b75c9c4dda48ad3fab080e71980c0558c34bf4721715db546f82291707ec742bdb8f854d8b5586e1d70c684fda6df4da4e5c3f8dae61c1b271c5dec3b8d48b38ce1b37f41b88b184f411936e20984f0fe1098776622c504bd646b0feb2e55c2c21883ade2582cbbd94b03658f51ba25e2dec42e8dce605a4ef9d3644808f457a687ee46813b423e03b50b79cd2786d49777d1831692f30423031d5119c4305a7f537eb2e709d58915a8bada6433f2e5660247e0cb1588ea84a9d24028090eb396a7bb5adc6bee84574b96f01c1c054197a7acac720026f4b81379983b80984b33a92ca42708931711c72924bd8ac7ce72908a4fd4fad60a096a9ac11bd0d5089d8159f9928acf2a8a43fbdc0e2741753ee26831b9ac9f14bdd6bd2390a2cdd31e58cac2e396a7a50be89281d8987a1f45c8cfbae9bd89fa1d7e6b26619e8995fc560865e3d72570dcdd787ce3887ab2cd6846522bd69ca4718b2b32586b103480a29a4c5af25073454b3533f79d4a181fea5561489fe1fa012486af3bb26a9af26508dd109230978e5a4f10dc7ff1378377844f09bf5fe514720305d31aa0ad9ac6db82cc5dcec2fe31507a59d777f940375c8433df1e4bf49d2a9ce84cb957bfee9aa258fb31dddef9c0d9384de544a051646891a62716e7cc83dc42efbd7eab04cda47a1561d176d925943f884202e9ed2463eabd812c3627972ea8acb50ca431fcf2fb5367840efa09153731961a643525de05cb347729d7edf8e32ba8e8f39db0f3a25c4ae0ee84f3c3e7efea74594fee3fab7949dd07040da3bc139efae06f700f39d912cc5e9e6c06196b45f8106308f0a46fc7481ad58098f80d9f2ab2d0c5ae8671c82fa570fb46934daf8ed09af957b854b69fa873cd3e62c0b460b3e7363853cd73f30c2328eb1e3c301ee31b4bdeafd11fcafa067cfcc1d5e48429dd4b1566941bffdbdf7b5d82e0d1908f0f85ec508d09b058b5163cdcf3387e5dd98cae876fc83b5acb7d0587e299cc1d9e30e864317c3b09a822657cc3b636970482698006838fd010b549f5ea91bad5efd33cb3648052570828df69ec68951f85b4af180053e387d5ab92939fbf43fe2bf64f05cf1edd88fdb0116b1756813c85aae91606411fc543e8492aaa2d4de179228922195dc5e5ae43654aec87e3372ced7d43bf542bd382f3d482b2e3c1c702dd52d2eb46f0b6446842cd1203a458a104d567d494eff9b9549d6360e788f6eeb212dceddf4743e6a810be32d2aae70d77574aec09547e11940a955c4388b764263109c632b2d3bd8a38e3f3fddf2c97cf6db3b0bc40acb13a85df4dffab518cc317211f471ab0f1962004fe8a2a +MD = 0959e43fc4a5d8dbdc1d92ba4b931771be87cac7ca1be42e030dbae1b3250814 + +Len = 33496 +Msg = 58992a6cf8c9a9004312933704e03084f0e9f5dc366bb21a57b40da238e82f4476ffbd64f90d0a58ccc68b122b418bffdefc1f2ec6215db5b607c95184fc104c5f42f9a4625798696a79c567256acc056c71666dd3a1e8ed7e5dbb9d361c0c43bb6ac4735c30bbfbc634287e1ae35d5e424fb1df8474bd8a57bfcbd076d18bf03480081b0f1edbd587fe9e9e3135a4d2079ee7ce02214254eb34e1316ea1f51c708aace2a2ab60c056e00f1092e70b296366f2807430e113dfc4e5074317b28f179398113e5fb284dbe1611d6681f82a00b0b93e0329018ede77bf9b20b82a11d2a0b4ef0ac139e9bd097d0bd58cd59e8383244fd795098e8e5657352b0ec66a49bbe8c62f595eb7a5604b22068f094d97e81bfd17fc63db9768951c8ca0ec6123eb1cdcd4af87b53aefb3ac2212fcffe2e6868eece4763da2b6629a6cf605c00839387b224c1eac25bd9eef509d167c0c854d4b7dd7aa7c5746a4f5f3997a4da2ab24e941b789640dd2f234b9b9bf8bbecd597cf35c675f5d2245764810b1d1964cc86e587832a59b3799c384ed5ff6a0c7906975fc15af5d522b6594e314138f210c548f187f3777f379e4dac25e83597adb592c3d1c34fedc400afe9b0add3334d9e10f1edae1480e7cdfe3bf24fb92ef23963faae5b6e9ca6aacafbffaf52a8c155f0012aa6cb69189fbc66c1925f22c4e66d7c8d6fdc5249395ced74e241d31aa148a7d56a16b838782ac51a6cb223b45121c2158d03bf0a20b846b6d32b42c7e49d3e548450cec60babcf731b3c924f1e1353cd4f9f3387f57f904bfe796847b4506d5e72344d5fbec1fe524a690ed391d4ba1b03e940312c15429ac0b6c41885249d29b02b845405ffca3e56c1fa0040c85d95668c75a4390be639c65dd6c8cb6c466cca91344175d7cbadecd1d443cf80c6b2c3f3344fa0e5e39f7be920b71baa118e2e1fbda682cc7b1759132e2c82707df9c8a81c91f815d3325de32291ea60570457218101b150410147f078190e29fbe0c1358f19a32e2d98e8d66cb7bc21af75e2414ed18605c60226144297c70fc8ee6a061c5536916b49b93d6fb7055083493bf94794755f62707fd91e2741b45da91fa434c326e204bb2b729c0e5a9f7b04d0a43bd913cfbf02a1b94b56029a32775e9a78e208829263dc20823c2040ef1f5cec6c0dc5c9240f585f8a928e33dfffa343594030059cea27d1a2aefaf7581f1d3c88b12fee4a1cf0263c7b4913ce988a59465c51ed7ca4bad08df54f255e8abe1ef24196a189a20597e16ec7bc76e87026d094c2acca29e1d794ada14d6ac89c0e395dbe857b45153f09eb9e807145f146789826c5fdf05941672675f1f57f5374de63ec0c975c8b861670122236678a32bec4d2cb908e7d9875fe41959715610d51d2c399567ee507b7aae6f44e93b77603a97b101a5abb573193a8bab80141122448c9ce4122be2e3dea61892270e57af7c4744603fbbf082a94ffd3e0e9703dd624531ddfde838449bd36434a75a0cc0b9452dfe5d7e525d160db739a246adad804140a9b08b1844ba1b9d53f1885f3af979b402875ca3ac685b00c5c58bd93ba567116fb37e4b8b426809168efe15c644cb219545bdaa16a720220afdcd4d2fd99fec588f2799c23ba1f2a60526f90ba323bbde20093044dc46632fd575d23024d1188ccbf0c991adae9e2ade67d2b21d69cb069fa8fdde0fb40c5dd2e930e68fe5de32ef40a59fa17756cba2286762bb8599344b03d98b465264bb7e922ffa21c48672837ef3951ee361b1d8d381c4845f6d91aa808cf38b08b57260d89714e354587510147c1a2ddc090308cfe87f80df8f454688ddbfe5be45a900242fdbdb7e9b631e6908d7d54a94eaba84643cb7ee4677a78495975d5c5e89e7dcc0f8132b996433e55f741e134b8d775abda33272dc4f53da7c22f9ca463a9c6a12129341989ed9f0489810207615c6b9ba5bf85497f6d4f45a09c3f045e3a734edd261aae13c97f28cebb4595da93009250d117dc094b238f7f3c3b7a5ac91a419e0874cbc64f553f31711a647723cb2c46086d49e5073101b890005acbee1205de30d11703f7c7b45c12ff07e97721c60fd5e407b53a1e38d7382c4a4411f128384f9df47f4b3d34a93171d48415aafc08ba1ab9dc5c318165851dad35cd4e1516a55a087ab23c1ca35d017ee987dd4aeb357fc4dcd62197ee17631823887f5903d293b798e52ae8c4f62c4b7c362f1f01d891bd393054d8db5f8aff8fdc0b607a77b9865c2ca035988d60eedeb91704f703fef7740341c0a7ddf3e7fd2078c804e559f93721326f98833dcd63793b793557f6281fc78eebfe033c55ddfe5dfc1dabe384ac4b38134f88115bcd0ef308473535b38ee572b7287fd2bdb4de11794f4bf4bd4e0347ad280c9a3e5dd2d41e973c2c3e63f5b3bec19455a4144849cbf445ec077ef1e7b9ac7126d9a87d6548cfcd480d1160c87f53f1139d7eb54d60a71a57f7c19f7eb5576645b22f671d033b7927b419cf17555a16bb0e46bdb2e3f249c702b854932cb34c755c751861da74b039c80f9926ed3e65aa7b2eca10a24044a7ccb5c9bb8c4aa4443cfc19da3b06130ccd55477db38b6e70687952dd383bab789a6c576e40880e20d836d3fc915a11ff187d529224cbb18b5ac8e07f222edeb8002e961205e5daa9c2b7ef3f9a0b2daf4dfa62fadd79af79d6900b7cdc946ef4a28f0e4d490e9a2d60f1b429b173d69be25ec11e2a1fe8ca40513c5ce426ccacd6001876664cdd4a4766db31543e9d236a1d2582b718ddeb3caeeba5c540984f3f144d33fa3b148efaa9bced0ec5f1f439a7d8bef11eff5b3feba1edec6c226a325e24fc7153c059df1ce1b34da4758cf5a18329547cdd98aea9e77be6141b6c54203846681171397942e23aad44883c127c9d587dccf9322d6c34f63ed2e3f4091cef885b0ea7ac6dae26d98a40aaa014ab8fd2c989c29610a502d353230c6fe5a6c358a6b5c42110d1381671036d4760b0f31ec42dda631cd6e9a9cf7f055e6e505c3df7815745f73e8e880e1740a0ab1f3fa2fa4390f7969451d000616f3e079c028ea9fbe189a568a2949de6b53a4868edf5d84596e2124fc3ec92549a9d45fc5ee15aaff34a9fc20cc2cd1c4b72cd00868deabe4ca1047bc855f1d317eaae03d9cc75f7fd274aed35a9080263e8bd8891d1be1832c3019ac7b2bb5777a4a4250bb6788e7f9e3b3cb5addb53af1a7e638877aedde9b68e4f5a793b7c3a59dcd25d25febdeb2de552f547a36a8d769413d2d64999c1fa0eebe9100e9bc0889cbe56916510d044dda27d0d1cb17f8b933c19742ab66c0c08130c2db150baaf782b709f4811bf7188bdd57493e2f5d8002ec4e7aece387b1e373c18a015893d03bc4386145b19327b076704a56990da4f7e5d97624bc7b595cae1677764accfa3e3381c56377e162911da43cdafd100f5ad5c09c1b98a5a136094a083b895c5fd32d6988a414e8b275f87a8893026fa773e38c5698200b71b7ade4a71abe4be642da7a12d031b0fda62f7a94495131568938c40b65fcb7b229c26cbbd991a276d2613bccaf75422d6aeb2cc9c3925e03e6fbf02248d3b14ad26f6bac41a968f9cdeb341c0889a5280a54198fcb6cff96d05599050a4dff23fbdd68e11aafa556799fee6ba514e1d8cd91c84f27871bf6906e461b7313ab24eb34ebc42c4a61751fa6f0224cbfff23fdcbc16fa08cba0d6e6d7fcc4acdbd34ec9b7cbc3e23a53e0627c2a7c63206f3e0298d59fe23e4c2b17acc8059233b3d443aa4311ae17899784bed64db14fe2fc0d4b37309f3a2fda3bfb69f66bb2f263c3aea8b862de36ebb3af8bf520ef0bfe3f3bb2789a5fba68a61c4913a40a0d71cc3d7334bafeda5181b6b22f5c7e38b92af2edc45e0f8a6af8b7fbf9d5897372cfcf28f310e9e26d716cff48ae8df7a143093f9064da0e35a636d8f56ab1b30b40ec308fff3fed94055ab9dda18ec76b39d72e89494fb46d311186a2fe234a9fb21d2077f0516a69bfd8785ad001367b51e5410b75c11b761be08b9eea5ea8b4a5ba8f277eded762f39eb14cb475b3363ddbfd9374deb1f4d92c3e25c9b46bce9e7cc32b0528b2f452f60b2fb96cdc305ff3eabdb109064e0b4d34f416d4f2520ebc630f2ddf9bb25076dc706956fffe3af56ee6c4d08705f4dc06665c30eae37901f5304363e0017ea9bbbb5eb4bcf4413910ab3ab5c29158410918f43894075fd5e02b00462e8630071f6ce41691c7253766875d3937949824d378998cac1235b0ba7bcef6e5a507077e0193ecfccb3988d6e7d6db547426efebf1968d91b89d1aea9f1a1693d276335e1608b87c9500a5f859220cb7a4971ac93085cbc34ef88d07017bf5b7b3100346269cf99f991d073157b94dbfca6b3de1a1d1b7df69da7f864f6f44dfbb370fbc9fdb30b46bd1351870172f0b4a15b1cbc224e2447da57afed55e545a5f8da1280e4dfe7971efa8241ec620f8a8292efe1dd9cb711f0c07c73fe3d4e61476702ede6fa35d3faae8dad040b4266907fddf118ae403b2509e75eb7a26d17e73e527acbacfbe49a56fa3210169030144b7054992bc6adc25b781649bdacaf21898a8e5a9f43b1461b5237da2a02d0561d307329bc524f0eddb8037c3512113d6d33905c78142245251c2628f09e2f9e1ea4b48f09eb0953b82e8d17b2a7268314d4ea9ae2771fe19be066c3106e333475548095b999c3d713631de4de74d43aa6f503d983729060a5275f73317ac55f4cc84001746465e417dd19a95e8004ac4a1e43e403105d0b6d7779fffbc8ce69c8895a9ce455d7c0eb26eb2fddd49f1f29d812820b566f2a185b1c3118633498131e382eaf7301b3b9c6f93e01768bdc6baad87a434eac05d158b0cf2d50e135550f407f7dc7cb07a643ad9e7270b22b371dfd9552fffde3bef89da2e598bb87b5e5dc56f7571e02dc276e16d9cafa53b5b8e99be1714a0e07c24b72e544acd85c27737cc42de0ee83f9a36fde8a4d9e0f03055497ad7cccd53e2307d85c9b6e725d6cba8d51fb11c242b67128ba92526a86b7871dba796650f58b2864e66f931e0f31d6fac955b4c2890ee46061b1b8f1ca68fe1aa02b249f6eec9f31ec128c88c62998b29fd81eab5613902d889118c956817f3768794deb31af32e8756ba4d909bcca5edb6b99a4322d3d38361cba1db268d31c194a2b5bc73aaa318a622239615232a583f56bd5a3c4b2297339e5136787c270bb880418b7f7ceb332df4dcf55539a30a160dd673340b8a747d0e3d3fc4513db571a2149894c681775ca6fc46d27c8a73c9337826a09175abbcafa86f9099007f3e8ca17c6a33e045b0bce3f313784b05d76c14dcf8797ebd60d7354e73dff999ada46aaf5631a23ed8bb2692ae998f60bf1c3f1ea23ff02a18296644c48293c51d8df299ef4c21c3230656adfa6ca1f4eec8496434319462211aadfb392d69622cadbbc4abefe9632e32e69d8d7e4d42e4f4d626351ab6063a3f9eca183cd4f1498838d7f29983af68d548e9ee2acbcb4026680d1b37ef76c1ec9b4a083d8102f2a1fc1c89d56af85142003b831eb80e7ed171615d35ab4436c635f37fabd817c68f783aa82029de862daedae2a68c7d0f9a84db817073ff2730f14ef504549023b52f9af4062ae255dca770937ed3a750c604c41e94c3f811d14fb4eed3810ca897a4b5e3f3f8846ef37c650bf4081e00f883c38b0f25df650bc3dde395e80da3cb5a23fe760d352ff6b050b2a2a4319eb684425d3c2405bf64d02279d7f3f3c3a4c26dba18f385274ac5ac3df73282686488d91bc8190b7f61071b07f62f5f86d87feb9d3925e4d3843edfe48e3da11ca703e04d2faf713384db30148d04b14bbad5362e732ef4b32 +MD = 3e64d6b1350ae6f49ff8e551ad38a11400aa4e82af1c6d941ee7d01fe722cf50 + +Len = 34288 +Msg = 4e056bc48c71fae5ffd2e923657d89993d8ae6368786a813cb6837045cc6236ede49c258065f1bc4a12f023fd8d285b7b2c0878dda88abeba3c57458494daa897aabff7a14d0f2be3105f4146124c93a360832060642c9b2ec0d2c7810855d5e281369543f2c487cb53b05c988db1fcbd14a2ec9921ac911ae2aa88c39d50695f269490b0edbe5a538b97e86d55f4d128c6ec4ff067a75aff20330bd4da76bd6e095e7ca0a4591e2bf67a775d1191bb66e5c3cd0ebc99335bf800b32d36256c8f9808bb7b9d214db542dc7bb036f536080fdde63c76fec4a1e898315536d8d1345107dfaa5eb3537fef32783f3cabbb7c937f1e125d448971606de8b5532d860cc2e04bc56f6bd9fc6a110f32a931d6451f3bf718a606fc3afdf65be6218015797c36a25535d75bab21fc8332f303f0e201a8e3c807b2877f1fd60d60187ce9fadb5f55c24862231cd55976c8a0be95e3f92a76a8e8d3c5be54617fabbe709e116eeee8a51db8fab1c2bc7c6c48ae5fbb54552223dfe741692a3d15317a178c4db549dd662c283d1a98a9f686417fa8f8a19d78c1336965101fcd8099d1be4f103d14969e0a5c54b7b58667bf219efbfc6f87dd19a9d6ab3383a7243d5be140f964c3b6a53eb1ec09a7f6526f7f88d3572c98d195a9bbae54143e82948f2d2c79dacbc0241fc56d80fe5e492fa1b9c9996744f8bda994c8e240182e57d20e4c11edb12593440353ce1742ae683ece49238e00b50a2fde957e75b879cfcae13a424c08596b31f83941812814b1ad22cc962f7098f3a3159e8943841794e062718b4435fe247010787bda92fe948353ee61ba090712b9b64e83282f6a1fa8ee8c7d84ce664764e8abed6207de7947de0906cc3ea1efba5d200ca20ef3f88b01e5697c36445cb6ed4e16e5fb36e8713db6f5b495dbd35b66ad763fa747981d39070fa901faccbc9ad978a4e19a5a75df62cf31832775e35f51605f8cc776c5e07bb079c60c200c7dd8834d5f7b57fc4fb6f3919b173008c3c64b8024162d1bb4bdfc8cd6eaef1d12b5d73dc94c594b1b0df373421daa222046a8500196238512485450c9399264d60be504b39fe708adf25f452ccd3cd5f18cf73da9d9e2a885a55854215ab28a54452d10a2e889ab84ee97859f88708ab3f3c8b78153f2ec8b4f690553d0b7e3f9fc20101bb8a9aa4c6d2cc33ee1ddb6e4059d4c2c96ccd79fb116e2f53e2b08539b5e519282cf9b50e88f7c6f6bece10e4cd56a1004e8e03f74d28b69f5747dddad48738bc983e52f0b401fc57926af9f34119fb040df9cf7053c4d46893cab149c7ee47c0f3f1e532fef3bb5bc03692355c26ba1bd096432eca4d70f8bec1684f35222f7c689ad59d0dd4ed4871bb4171c784c48ebfeec8f85bc87195ffb46ab4c72cd6381cc28af98aac7967cc7f6f71293b03a50488c798ae3fc1887e2c1f402413263c3af06c0e1c834700fa0c85fb2b545da7c4eca6d46ab9471964b1efbaf4df06cfe8ade3a36c623f5b22eae9d875d6bcde2aa3cf75373feb8fd9c942ece1985d3b4e805782215049bf6d9f05d0aec907905b34a843bfd8953404fe809c914715c696f13071e4564d7603b540aa7e35260682279b05a78c2d4e0ed71193acf415b9e588d6395d7b33c60bb401308f230088c5050e859a639b261edc5d99dba5455c66ceb1a233c7e3f8ad22b228869a7f5d4c556b893e66c7045d96cd76c6648df63e4a29730f4245531389ba5b0ea38acf409f19da3b9c9a2ff38cc7f11438d5d19885a77698f5422162708191cd450924c96c80403a0efaf10746b4d36d2a05339a05917177e7c0a8c5606f916b88e5a50e420882e3c2d090c14dfde47b4005656c54512d5320a83262e0ec259174049a38ac196addc205554a2808ece384bdaf37fa4d72d5a9e30561786013e7124f4b6e2f1bbed1167f88ca5f3fb350fe1658237def07a5895869ebb033241469aeffd955764766c42871687b090068b5f6aa57679eb66ac8eea82811cd20c1810a00a1a592cd45d6e7584d03cd9dd3b147ebfc3fc145cc6f8f093f2296cf95634994eda7d8181553a384a17ff5503afaef64398ec27d758522d3586bf7f939165504e5e4aeef7f44463e8b78e8e24599d85d37db08260a128e4f9d75566554a21498b3e37d1b2bb0b7ce33750e1b9b95e81d1daefb08361fbdc534c71cdc8f1070977c2cae65c09fde7cc2fecfc2e5f609ee148f03ea9fb2967c45eab2269267504b6b48a792e71aa390609b93a1cac4221644078896edd601bef9647e0b04af9bfaa5bed26d4727ee5134d5c27ef3081aded49df2d2c990e6d177bfea538df13bed551696bd89d1a7086733c42207cadb8eeddaa967dbea2dfee8825dc5d634176ca1d95a49541db6fd203e0155af104c6eb645151dcaebbf8d74363f2a878017beb18e88da51150378887ce2de93e455c658669fbb3e9b82c64262f74a48dd232daebd873827c077c1c777cd875a4ddeddfac5ad0be1035ff17b8eefedbf5423ffc0efbf2b7f26f81f04b72b16ad54cffcc5eba9d3582a3e5546438edb97ecff7d0eaa987b01506fdc68c2655433ff106be15ff9dc4e19083bcc073cdb76ae9fefc1797aef5445c53e1a22e10995588a7275a907ee69d6a3eb356561b705a0ec9d00e1cd51210de08e425f09fd7a672359a95239d1516bf9ada8e26535ebcccccef46cf9670fb1aa130aff44f78b33c467a6e1f94cafdff1c94d08b11ed03a28ccc5a166fac7380a17988cf9c170c456e594deae282b3b72864d5eab395ef1e9dd9a087cd1f0aae7e0148e9221d022bf1b9bd1bf2d6c86662ed06cbc503bf9f54a9b2aa4b633102bb7a78b76e05356e951e14396231bc8b407fdbb4c290f5a365bf28e446f3871bde4790d0dc6a267bacf91bc9ad2df0a445afdd2c48e831c9357c4bdc6c5a6d585afb19bbf9a655d1cdcd1c233026153fe6ef8398a453e48f3883c3d908026446b6077bef4264340f6c2c9dfc97a49abca8d15790816e9e640347f980c685fc7573ef5fc1430e5192fc7a39ac4033e1a90fd7c19a5cb2cfc61a4b855a044fa65319250e08781f3efb134847b8d65e8a9380756a1c82aae943e200dfdb6de9e27e1a4b3efb5e114cb6351960b8a68f05faaf3cb9adbfd18b5bfefa617b5fcf4134fbc44b30717f0b42d6501d124d3fe45ce09028b450a1168cc5bac2b0567a33464222bb3e3ed30b2f7baed56c370b9618c9124fc6e1a42b44daa47c20ee7548f061d9177b2297ccda9968120d005cabdcdd25875bef453a12a259e633744af2e1ef79e88dd947b0e2c42e5b9b15bd8617715c77f9d62eb374b14da96ea455b1895f6796dcaf6d67c660642a9d03a8c5374a298a1732ab27f98bf22e38fb3015551634baee31735204029c076946a8e9daac1f464a8155280fa6d9fd38c5648ee3c863bd48fbe3e00a2f586aa64b2854703ba034fa4eb7042576879ed4af6d9ea3da6726635b59c2675b0bdccaadb1a5766d4eceacf74b7ce99f6d7b9315b5b513b0c17ec3fc2f59a9fa38c65cdaef4d7ba58d8bd9277cc2ba660e1c0aa4c772b200153ee14aef2620a161cfc35f0bccee98eee5153be5a6168eec1891b93d581d3cb4ef51c403a889c5094194a6c1945dabe572d7b0f0779c5e79c9dedf61c5a3cb22f88bf4276143f9b1d4573e9b44375303ad973337b7aa7959d82893ef5bf43001f30657a4d0cda3ddf061b2e34d0a22cc0dea2f25f6cf53ee9c2553307b7d0fb457476b2687a557f01e7a70442f449f911c36f135b58972babe5bb9cfb4acbedcadc5ab06e6598a9ac6d803386b852e054104460164574a40971224278801c1cd5f0793d08d68a0307220e83a723a529b24e889f393b76f02bf0f2ee2762abd18f393c20ded415d53b8db9bc4e3e2b1c5204a2996b4284593ae99266aff760531f3e0923976720666f36eaa52210ca005dbafc16556386255ee56c72ba4824ecae87490cdb9794ffcca60707cca16b1ffaf8fdde9fa5659dbe6be7dced5bdde2649d65a4546d57e87a647aaaf3f9f7bf52470db8f011070983036b6bf23a757e6807c3b3a8f05269a0f8a956402154298c2e946df0ad55b1d43560e671edd208e34dcd017f296dca66ebfed35a206ca5d136fac6488337dcda8a2f16117adec8fcf8ea55821e9152f5c4dfe8ebfe257a49e5a888a09b96d4bd893ec37beb7f05dc8f817858d9a44a750bb65f98c369f21bc6047e9ffb58dfa4bbf6b457489f09aa9afc33aa628ffa0e49eafe0b781f53705e776feead6746b7a6bfb34c97251a8fa2c24c20bf3baae604e38eec252fe66f376a2235b9a95120d4028602e2f981b32e3b8b61fa8fa228c709d6e2d080f341d843601b25084704cd25f6223003863dc6cfba161b7229fa17c4a09683fcc20dc96cf148fb6b728e1792cb548a2b7056f2e69fe628ce89847e7cb2b0458a9afc934b9d6543b918e33cafcd3ff75989253be8047a2b8a08ef8399d5d71f12c536bd4a2c1a03dc822ec4e6c48c7f7517d3283daf792b8eef63af83d1b3177d89e2cfcf650e45bbf895359e77e22a676387424d688c31c2860788a26eed38b12f28514411ea103ec140193eafea0117b56a0f81f95b440e1404985f742d8797fe31cc10f8556d4d2758f730344c0b6d55a4193f298d6c5ae3826720aa1a0e174025c89be2f862d0700558dbceaf50528a5ce8f0bfcbb18e39a87b4ed95dd41a3b2ccb4d977afaafe56ec3a745bbd9ac9dba02fd84bc1c925f9e5e52c99ee186396c5f8ede853ad2cebcc0fc6019ad65d6e7f1cc4009b44e9d8d989242843e4580100bc681be2c227316d742e871d4637d0b3dc7ba5982aa3a9daf780cb7f23d583e585d46cfd7851ba591e1a66a5790da4d6c55bc558c8f80f52d6beee005580b1eccbbf66043e4109175415fad3dd235d608dd0ca5dce3b5be9ad2b2a7807ce0daf1485918792898010ccbdee28e13d5ce99c973f07a90221f7c171eb36a931e974f6d36a08037fc1ddce5eab0533a035ca580b9de6c7c0f415da1fbadcb840e806c90569f60fb840f6ff84abf932f07a8b66aa618bc91c34bc4d8103cab37f8bad21b82be225b77fc4d6dc7b856da29db53ef024672b588663a24270913942470097480a5cd3e1f0ffcaa2943a423b11d0577941094d2a4ba46ed06bb0a83d9c8970518fb698ec26d0619380786f2e695526a251c2ccf606e709b76fb99ec60ea06341469ff32a941f321bbad032f116cc5307d15419404ab40963f71c7b701ffde6b3b9695121cb149297cdc24c27ac9e33164a1dc09d8983f4729c49ccc042fa511542b361662e5929b413df09369d536d6a2680416245ef414fc9d2013b1a1e58d28cfe726c50655ded3786f8a26b84585fe13c1a32f24e7667fa35c75507e25497f2bb22a8b3c1b5afa34a990f89998a7424a1b984213a1a67b7f57d828edeeac20e69e0afdae6b777d19a78b29a0b8a534b41bdda553a93ab9d819268217c71ed5a9b3ae6385cd9d26d07065fff72ce59dfac85aa00b878cfe57ab45a6243807641cfafe05e8c934bb010c04c3c37cd144c42bf87b63c40215a4141fdc3bc9d096e67ae32a00e8a405548452bc2f31d0f3b94a9d7d84e706c5665c9a6c8403df33b03c431cf5b155cc6fdf353460d24970812f32ef9678ffd5458ca09d286d9d0321460821eeadb0d8fd25977181e7a684c5e2a019c000550eebab18b94f9072cde2a2188213621bf0a45e5fbcb8f84ef72d69cd432b066f38fdc1e90620f2c75b9a585d878d5affde0c93755d2d8ea99160cea3b5ff12b71b26d7fdcdc41d0273f26ebd77841dc568deccc19c0a301f1a071909b663ac947e0cf33b5563998dde92ee229c1f31d357c20f2ac174671859c950e6907f5d6e2a57208be823ecce6421df733c872093725f669b1395bafc174f7d24897cacaee8b063d5cc2fa02fcc484a98a0e4726b835ed8f9db95b1331c40a7aaea8222ba7ebfc6014aad3d16e0ae3678105dadc550666d2d629cd4253045d760fbb845fbb42b50f8aac649ed66fcabfdd31a5b08 +MD = 42a80a3925caf97f1016bc6c48e7bc35e01e8513c357c82891e010f20c5c93c5 + +Len = 35080 +Msg = 3c0079ac6d90a1f1a21eb2ce21a746c2745c5d1ebfa35221505f0e6178717b6c997f3bb081f39b98f647c2f892812fabd2f9627b6962d840da083d4c4557de07819d5dd76c11a8437f132b57a6b5454a4e7bf95ebf5fe708ac187a51089c627c1ce445e9d7efb139650956b3034d72e611698c9068a165bfef172c366949f11291db5cae69979fc3cfb2a9d451509cc9424b82da0d303caeca8bbac40f657213090a0aedcb105829e5948d8139c7ad390aaa43025615521d66fe8ec3a3f8ccc5abfab870a462c6b3d1396b8462b98c7f910c37d0ea579154eaf70ffbcc0be971a032ccfd9d96d0a9b829a9a3762e21e3fefcc60e72fedf9a7fffa53433a4b05e0f3ab05d5eb25d52c5eab1a71a2f54ac79ff5882951326394d9db83580ce09d6219bca588ec157f71d06e957f8c20d242c9f55f5fc9d4d777b59b0c75a8edc1ffedc84b5d5c8a5e0eb05bb7db8f234913d6325304fa43c9d32bbf6b269ee1182cd85453eddd12f55556d8edf02c4b13cd4d330f83531dbf2994cf0be56f59147b71f74b94be3dd9e83c8c9477c426c6d1a78de18564a12c0d99307b2c9ab42b6e3317befca0797029e9dd67bd1734e6c36d998565bfac94d1918a35869190d177943c1a8004445cace751c43a75f3d80517fc47cec46e8e382642d76df46dab1a3ddaeab95a2cf3f3ad70369a70f22f293f0cc50b03857c83cfe0bd5d23b92cd8788aac232291da60b4bf3b3788ae60a23b6169b50d7fe446e6ea73debfe1bb34dcb1db37fe2174a685954ebc2d86f102a590c24732bc5a1403d6876d2995fab1e2f6f4723d4a6727a8a8ed72f02a74ccf5f14b5c23d9525dbf2b5472e1345fd223b0846c707b06569650940650f75063b529814e514541a6715f879a875b4f08077517812841e6c5c732eed0c07c08595b9ff0a83b8ecc60b2f98d4e7c696cd616bb0a5ad52d9cf7b3a63a8cdf37212061db15f44324372f0c7fd20940ed2dceca08e943f79c8d6ef44113750da72f5b60516dbd28943653e658f25565650654a9d540e7102d2c9e019a1633cc4a876ccf99646d2c5d3e91c91b6abd6a5f8b0a2ea68dbebf4e1ef753f79f439b9fcdd71819967efefda44b2d4da79bb03b2051d1034c35457dc91d74003b2f1c25671cc268707cf0e42bf29b56358ae7866abe3961e8e5434aaf72ea4a66509e69e7b066fc8ee1a2af2a2a9bdb910570dfceb1b04900395923569a1f1c9d42c2ebc4346e5c4e4794cd235597244695dc95c0dede3f1ebbc79642f58b1d6c800a09811b50ee3b1937acac0625e6c2b69b56e5982b9a90e74f11f907c6b34092d471b2d7b758e1c12bec28aec099a1d22d71b160211203463034ed535a84b5f5c282bdebf9f2bef9b20a2dc1efa34083139498e9570bd2531b6da47aaef8392354db16ea91624f0d9a752fe20b9a4b43de3e1076160eaa88713a92b04c844695fbd96236261dfe8715bba381bce50e9efdbccca91680f870d20a4cc6abbf6ad8380c0461208c69e0e44c3d237c2a26fef2bf01f4b1192886ae7b37105510126489f191ee0933fdc566b53139b1b000de4db374db7e1dc744670bf61fd11cd9c572188f5f58bb468f1d753447064d48d76f1889eff6255124bc1aee57984c2d7570ef41179788c0b8890acaddd2285b54e77ca58481c652c1fe46a45a130499ef16e47bb93e02f8dc39f44960bdf7b4e1474e7c4bd9675886ae1d9c99e9fc8bbcd4a683b6b4d05b6490b054721221e1f70f1c62a8358ebf0d5bee5b99859a9f492a93fd92a46764ec3dcd6074874d6f208f54fd2c5ea31290785755cb6e45212e894b4ddf854ea1cd81b9e20a85c0b8d87886a03a9d5adfea93e70fb21ca2ddd7912af8efcfdc9e931cf47d8686225b993b2ff0757a0c93663efc0de0193a01cea2b18365fcc7b7d7500b878b10e8c3ed47cf624f8d3ec98dca24c4d7dc51599e6e7d71b484668a04db6d947aae9a8e4f4ed37a3b4f67deebd5efc90bdeaf31a134fd485e0f5f81a61fa928f7c7ae273980eabccb292e6fead2cb8eeea89a268196af8be4f6094b258d3cb964e49a0b26ae538e61b2e8e91551368b12c2b8a4ba141290dbc0fa232db4a6ca649df4b6a127dc73b1653dd6e5d1bf41faa57138a53da50b94f8b8c6091665d0594c34c6338db4111cc883b5f6c4c44818d95a5efd63f560b325bb804232f86fb597d096583098cb16555102a2aaf411efc6da840d378214b8a0790e838add0d2bd96ec389b0e92630842c498414bd14020688446f18b9bc182187ad379e921d0ea955ca329f2396eddd8bf715628dd2d210da1c9d982abb43f15e08c8dea633f0802c170d5bd6b1c0d9e6a7d144f4e2e26e567913264386eec8629dc1eb87c653e66826546780fb3c01d2b8320c70a8b57773f65a53a2c35aff3bd8bd15c568bb548094b252b0d7c1ddb6b4d2598fb8cdd4b8f0eda0b6e52b0e5046150ddd7f89530bde919dc4dbf4d6293a1c9cb0879e0e9c05578dfe60d18e466264343e9f605a60609cb95b6c4783a0948b467189987da3b0028bf7cad0f764ba1519773cb2d334c71e25d32d2c4e9370a8f741535fba567d791b1187cbc251b9b23e05cc0365ef7ea073da9325cf983ae02fbe69564d2aba45cc0a2c048783edc61268e1d48b06f3ce23b012d66f257feb4027301e9e9712d30f102c2dbf71c2cb271f02a8ab01d2f1a6223090b5a1ac04e94a4c1b273203bb64e20ca9b2b1d53beca6a2f25e6678b58b7f70e72bb34bd77b6611ce8f81f9695dee41fb39baa182e38e47341dab61743446586c49c0dbdd872925cb3fed80676a9370b49d02944aac4463f0415739c841056b728860d8819cf1fc73a0fb25301b8ffd48650049fd97578db991e04e2c223b0eac7009ce5e1d6f0a6a6b21544dd1226c391a5a1f16453638f267dd3b1a6865d68c892229dd88ded401e7069a3b3bf922093566a02f266eda3d4bb46d1d840437654c40778a7feffdfcbcf17362ac82d33b3ecc59a2cb7ff5eca5fc709ff594c5f931fb33ef6310cc9d55985c6eb34dd431aee1c80ba4d820931f1bd23c3da5f69ac2a8eb76c2cfd4763961c1a9d0b8c9aefe4d67d43305cec30f990e5ceca63dec86d01abb2f9bba19d0d44fce956217e5b575b596f69774ff000a718c53142040e7172e170a02d1fac466632771c843886ce13dce8ffb97a988d6c845317e324a7bd4a224d273a09b8c9e885ee659d1097d166cd53fa0cb4512946f01e852e85badaf236f198cca6e81f34bdf739544db6e8bcf65b635747435b9d25ce820b71704ed0e505faca3f65cfb0a239a191390d9c7d1da641827995abdaec0c17622ef1a34ef731561b1c5761c6fb5da43c1ac174110bdc9c749370a1630b804b1b056460d3331cb3a985e55ddd920a4b3d39fdf9e088a67c17dcfbc6a14ad1261e3ef10ec6626f195bc2374c5c2de99d7cdee7b1535cacea529e5fa1fc73a7b05321c234914cd191191a76b6ad95a1a2e151a726d04e95ed0d1fc3bbdd4cacf2a3f6fc5a9bb9eb21cbd7ca213792db6255d966e0c027098e30a9509aaa9f86f3f404ca094c7165d4593f5a1762ec3fe6bebf4c668cafb2d4a4822dc8cd32ddbb309452c70c3be6afac9b4f1f966a7435064c803f9aae35c74ff284cdaccd5a533deebc1f43e116bcaa32d0c23bd5235713c52bf654ec3d6f1a437a2fb13aa4c2055a319659299e023c4e0686b9f5f355cf757410213070d5edbb3978424064106e20d9b6b6dc26894b3519f679928d3620a3841768447600b1a4e92fc9a642466287db06c3c2555abd303097e1749802f096829393eef8f84c44b1ddad35e56bc8d85f0ee6a2d47c7c8773f35a62bdc12697970a09f79ec6a8e4ba0956b5f687875c8f5788454af76e820b914d26a47caaeeeb0632270f71accb2c3b2cee1ca389589168127460d47d6920f92086f43b64e3a50e7645f4013f432efc97a700c5b5178dc9eaf5be1a9083d9b43d4b56043cbeeeab3d1bf47f4b92e8d2ffaa4af8f3e0ac037a900bd18e195f490a3d71e11ac6ed63ef6fb8f2b7018348ccbda1412bfa159d290ff0016173da40f123eed9e644cbc1f40ae7626bd827e366a9adaa45aef21f5e3814b3f0d9712258c674f48880af4ab4b42ad74e5ffb2d3535173a2a44681283d520ef23934c75a9efac3be8c2c2889834295a4ade28ada22b87f9c004a1fdffacbbbbe2e894c44b643db5ee522b0206548bf2469cd5eb1351a4f0f035c5683a868e2115227194a6eed16b8377134067daf9a82be22b70f1711726a321fbdb9c2a4028a4870a6f22540d638d7ba2cb248f1a83dff852c3a55187a3bf0e6cdf8d627ad8776088dc27609ba7f5a4ff2aa33b978b4b26716c95ba9d702d4540fb75f4e43a77f412641dd8233fa43b53e54ea617c857b4b1f42b730194d60e9eb8bca925558a8dd18d6c854c318187c5858c974343ece939e2ce465a17a1b0ae9dca49e6329971ede27c2fbf8773d27e91c4d8c303f00e32bee5f9510275759a32079cced78de98de8b69d24496462a691602f3e104d6bc311da558d5c3ca387ffdc69864e4c3dd9298099227d3b81640dc7655c73e94815611422b72ddd839f8daf7ab59fc0b5fa2c43e9612de075e08e6142c633aeed4f39fb28767e405d0a63e99504d0cf99187968568a603a86439b968d245882a19a1ef72e73564d79f009f3831beb63305a9955a8451f33feb5bdce101deb4fae1e9a70fe55bdec1e7808330ca1f763c3e91374a73971b2235d7b71915af2fc5a0234ce5ec5bb0596cae713f73ffdb79aed6f2c1b0f5ea03f645de7d9837871ee6f7579176b5980270f2efa0e9c0447fd8d36e4cb6eeee398f1eb98b03f8296b18ce3daf1ee9e451a6f6650176114fb34f1ef0680ff2a64762daeeddd361a53ed820857b3f7933cb711167cdb3535bb864222f9026a190b23402d4c2a114790e8786c59272d3e4e451ec6e822c1706f3da857251956c3c1e651f01e5d781235ec9795491339a9610ebdfefbb4acccff9f4a17f28d6b316c068880cc3f12812a3f060d8d40c2dc5e5817471d589f5253f551e9c825526af5cc0e64bc98889f5729ee5c8f7671dd2e6c5428b6d842095386e4560faab37645800b2458308171a4f47708b57ceeb6b7929b2a2efa3cf9e89c2ce52fe5355e436aa64907cea601fae6c89b691ce06fe31114d3ee87362af87d511e909b8129d6d1085a303c9f563f490a9d121cef0e9933e8ae5c46d7a56c727a899a973fdfe8ff59df3d4013785d6364941745c49dc13e3f40e101c8712dc3cfafb6a01689603ac06195a3ab703a7dff0ae25f0723427b4013e67eb09622b879174a7dae2e25cb6567a02c0e45c0de0386da3260a9063214aed186381d3299a049c0f7b0d621fa7179c6a5e4ffd5d0979167857536f4abe2990be1080d47ad6bce7ed6c4893b0e0c1f6fd4d7a76399e3b2f122f1d2f42dd35dfd57c76e483d032deee291505b515de203838d4351821071e0cf7a85ee010f810eb01d481c9190ee76e2c03269098d49ea78aede87d346569d55b858ca70bd8da5b3b4a4adf1399a80a0f8384e7fc3dd8c7ce37dedd4acea8e7c555270c006092c2a3189e2a526b873e2e269f0fb28245256d42a6bcd6bb41c0bf67cc939117e0adb3f00a3f480d0b77126cd38c4e4a8a2d028ece905aa3cafcc45dcbb250774a78e8410d8286f6ab4156b6c0e241ef1e5b087cc4fc5920bb085ea7d2fca0f716b0da8c169871a0fd295594f5b61ff8584bf9bd085554ba885ff8d640e7252ffbe1f541b3f5aaa4679bb997d05c4aeeee5c5090273fdfc9b9802d59b3e63f7a5088b302740e84698114dd3fef69553b4728a7c6a0205ce6d50566a29a9e527ecb11ae3ec557b178c0214aedb141c185d92d59a0f18b4e8a514c2f51635420a5a21941672675945aab4d8d31b49a12373ac6f0bf99e5372cb4e0f1e6accc0c779c0c170c25ccbf77a8f61eac67c6b9c7e2a2178307d2a966865058c2e55a987d1f7689ae31e195585fc769ae595c3ac0473b189bd9b817a03c16ce86ab84371e82c533bdd938b885261e18b7e7bf17b8fefe7e5a7e2a04624ca0cd924ddd7ae48c848fcb9a569b8692768669c183d30a6068d35f639ce2353e8ad0866acac65793410857e3bfa0c53b7d4d34453eef3d2206920b28755391983161c370d0cbf +MD = f4d7970aee8cc092fc6ebc1cdb9dd6d6680086e75cec3070494e5bd1703e84c0 + +Len = 35872 +Msg = a858fd5d02b6e4ead703d9b6b6e2061139d6f23a39a752de3e0723dc3975f54b76628abecc929fc617c60ab9e89805b27aa6cad9e8f260e59e89b4df0d63eb28a48bf7bdfb7f68ba51da851d38309ccd8f3a96dbb133ce07ec81248635984d02191c6de3f745e7cd6d8873691074726960da7fc6fb30474c10379a5917dcc2e2bf5c13b628acc3075318fc26d72a308ed5cdad242db271bdf2f33fe11cf7f2cf7d9512c0f77ca570ebd247dbf41b7d44d65d477cb181f4617bfd3aa5acb086d13b0d9189ca7c34111efd7d10d10f02944bd07557ee657941919cb42d30d026f0e10eb9970a7519f1d2e3c54ed5ce67851c6f613c4c26a8631d1ad5020e20793558deb1742030fb18f0ca481b681f5320318230b3338b28d108bdc4abb06528a786c5a2a87272838f61fb2e02f2cb6e6c72510d440b5ea29338ceaab07c6ada4e540db4b96a06595d0bbe9e88db9b6171c8231e783c65bdaf9794ae9adcf63833aafc0e316fb3248ad85bc0378c54d43719428bd62e69222f0c59f9f037d0ea5d71dcd998e8408c1faf19bd966bc16ec74ff47de74a31781a7e63b23af5c197d48ff33c743f763b237741bd2de1a9d82850821c31f6876879d7fc02017d91e7a1ee8a604fdb1dd69e1a1be78557d3ba6206348f3e9b319a53fe6a11cb390884cb74e86db024fd08997fef64253308ba7e5751ff96a2f8b5b0dbf5062390ed135a0b578a2082dd761a8e055c95de1083832d2393bf71a4629956e70a8eea0a3f579a1ddf265d86cb2c2fa4f65ec1b3bb796ff0744372fd481457864496af25adc90983954a1dc1add44a165a0743b90b680501c9aa0cca102cc61cddc2480708b840d1d4142a54c51cc7a1b118cbe91a59d69ebb7aa6d561e68beffc9a1b78f62d264fc30ded07ba0b8e8e231ac30c9153cc0e723daae4e44c8e47caa791401f2ea5458bbccca434a98825d79492ea175fce9b157a7fc04065b86e6f7013262dc6a4fa53a930f1ddff9badf60ea04b5584c58bccba8d311e39efab127e07f3c5fa0cb7445d82b85a14b070a71055f7f2ca9727c1843cff26d11c45db57d66f91d4c3c4865f28bf56f1b0b4132319b597392db71960f4f1ff342885f385e962395bb26940378ccf779c81c261ce544fecda6f83ffd61dd0526af9b38290a7946597c1ee9b6e14af651f0de2ba9a6e8b98b445d2996f1f64c67c7917affe77cdbc91d99abe8b2a29c9823a5b460ecf3244cf98ee0fb2627504718ef8a359c3d4e650e0b6d11635034bcbf2772cb2df0c97344e1d8a284fcbb35122a08628f2728cdcc08afe989d0692041c7c950e07e03aea51a832574c2d7c251c557ff46c6f563e5f5e6b98c9fa4734a0b3a8abad78d4f987d72ec9c26507f46460b6449893eb7da77a409e23a7116466648e103b9a0e6adaf1a7061a39fbc6e20954a0e0a5f4a17e25a63212d4999b55d76ec5170f90443140c494ba7201a37e978190ab6f18b3cea9c5ddfe4b87e157537153ab9e018f730aaefd0cd8c0942054649d62b700ba7e4cc4264fd2823e5322bf415d110a548a988cc97632e1a0b086264e6b4653be7657cb966e3232bb328a7f17972f529a5d32877e624a0bd01676ee2c2fe4bac89e1204b3c133405fdad4da5ec0bf8269d41fc7a637e6e72b3a6ce5be1658dddedec49508b19c54333447f79d3f8a41c9d7a973c85dcf1cb904af338c896c630b1eb6a61aa737153d282dff5c7e5838c34e16b36d3ccd53825d89ff1eeee6f5544631607309ca2c879fcc1923e4f00e5e21afb11c3ca7348f2b4071fdae8f3ac33e7bea9a401e40197f6e6e7bd91c6ca339bc925dc52766e7581db3b0322fdb5feedc6d17b5fbfaf9b25925ebc5a2fa987c8581b83f139292ca68eabfe18e7f303e9e1173cf2802311ed567fc114b5f47d351a4b612345f996b6941b32273cf3f1708fd35f56fffc9ad2c5c3423df44b8266a23dea65276032168de125fa872935f615ae591969ac746a42b1e642650f25e1627b963357ed8d6ace967fff3113400f24f0b0a667a35d087fd3f3ce82cfd619ed8cdb2a42020717e8b376a1d542be0030530c8a7471a351bf92114ec7fe1194a5da5f96804e4da26eb0c07eee27fe9dba4db3321ab7f5ca9484b52fbf2a66d61dfc6a149d12cf9ec336d402d643801c45395b39b4c6b2d78114560dd2d55442d85ba130f30feb61788e37ca4815f12043ae5b0dfd2e690d27d98a45ad7f688f47808b682c864f9f114f52419e2fb03e4825392b3e6f96dfdb4cb8839988f20ffdf38f16a4265aac0ff2b9e552f14bcac5367c1e030aaac42dd6672441a2af496e3d22e8e4509b1cd710d53200fb325a4d4aaa52e570335e920f1cc4102ceec00ac5fd4b77a59f6609124ab412ade26142ea3a664040cf03aa6f5fdf9fb84f08761674bad885c61c187f70f8229a0a74388db2d4cdeccc67d97fa6d34ab53e8712a70fa38191bdb377c0ee5a9b4fe907a0bd8a0ac8e4b9df91b8684baba43bc0730044b20d29c4a0b98f2967f7202c901df24694dbb915ff75823aa52d15c54919baaa52c5de99886022a8bcc0cb33a202b47eef70ea7f2bf795847c698a7985793eb7026620aabede33e2b582919cc1f17c799712e944099a4adc3dcb62b71a03f4d15d488056d8b62b7ddea723d6545cd2ed185c5602fcd02ab865dd4f0c5b6c75afafe78e4c4a7a81c0b4c8f26eedb7203fdf97814a9a2bad9f81099ff7edf549a886edaaf9a88dcf51c4427dc502931cf8796f1b69561f4c082bfae5f82640e9427eb556cd67727cb789be26871773019d624d851da53dae68a30ba18bb8d1cd0403c912560bcb12487196ad13b0d9769526bd4ea62bd91d57a2c66330fa1a6d6392a37e1209fa18bb085641f95328f4763328e8b14ea4415b87b5ab768ead62f7c7defa9fe681f855ea87b5b6630403c7143ae3bd821192caee53dacadaed2626ffd6084e25e559cf64b558c984dd1cfe464db0396a938a4c232b71bc636c2f77c71337ab4ca6957e1349aba12d26a89245ebde936cbca055e29720b9acacf760aa30f935cf4833e872cf3edbc0735f199f9fdf8a1cff7d5e994138413b1216880599dd8c224ccda50fa082e7e33578facfc4335bdfde69ecb39458e1835df55485c8550cea26bb2a5688084409ffbebc33136aa739cc0e76be0ae32929c31c3c9746e0369b5894fec3c03f8ea94478e485e7f5eacf6ac393353f677672f403c6b6800fa79a74e378f3f3b91645863ffa14cc6594e51d31b8a59c666803634479602e43ce7bee1f4f439cd57963378c638c3b2a442f65d15d8b9c605c5f9356db208c2d19c436b0e85f26452696fae6c738beb46712d71af863c9d5e1ebf6934274341c27f7d130ba831a68bc3532c78bc6b1a47c23e3772faaaf37974d2fb275e7b0a1677b60275c7c03b098e261b727a2ce7b01c70d8e59dcb725cad7811cbbd78c5d56e345fd34965ccd4b031a2e21496f988690c7c91d766c011b3fad4aaad0119084b4153ae96e901f513bcea51f471f9d7905a4afc114585a06ca06b4b97e0aeb6f623068d161381739d0e1b4781858ea579a26bb0b12e6a0fc2b1fe36e1db2de756229ff831adf55638715c4a239a61fb0c2c073521ea16689c77b7f4f5bb3ea3558847774f7d04a7cb2bd5e4427719e0313f4511c74133b3e138bc0c394788f3da9b2593d84d576d3d85af9c46e55f5dd0254dce0dfa66f67b3d35061749b4decea562d334e395b078c712fa98acdb79d12448f35adf593b51ce4b6bf687696d17ec25c0cb076778633925879e94343c1c855e0915b6b4894b3225c13dcb50a79eb997e0058375cee62311cac16513ae9990b697a8481ee951b3ed9356db11944b53dfbe4b1e66b9e9ccfd4c69e61fd8318c79257a5d40614b97c866a87f533c070427df039fe342547d1293ffe001c1cac3ce3cf3bdc2fc2127e0c49b81bea8b81294cd97cf93700f7e7829e91b60714d7bde637b2f4bbfbcab5d3497a8fbdf47c6500f6d761f4b03175696915fe5f1a3fdd0227a7c83b4026b673f04bbb2e99d68832def5c2edb1690d4605d743848b291cd01586c14e2dcae246b4a838acfa04054af8348692931301c11b721007e647efd897dc7a35132bebf43d1c82c983a95ec1e9303773c3d405330062fe59ca00e87415255db0aede15e4c0251404c52b173028656021c2008a446b26791a94d8794b13dde6114f3602a1043e86df4d0da10e1c406afd2c4d035da238ea9ad55324b62a729e0772e834a16fd535b969b59eb45b5de28650fe02e74c06fd8b19f57d5dbf9fffe3c8591e6e6995bb33d9d762db5c1a515ddeb7fb89df3d1c4bb133e59a49928636adfd428097dc81deebd78feba50221d433ff7fbdb247b15d6992e0046f16cb80926923606136240b3e3a985dbca1ee99ef38e1eb9b93674071971f2486793a52241143865c2f1c593f74feba0976121f6ee8d49bc1bca89587b4d56326564d1bb18a257aff13c5397e2b357911fb36c531a3ca66eb2fffbd0a70b548d52a8e5df9383ba6b0a0c93c58a1df237cadc72be5ee25a56e69d727786f216e0962788939a018b2174292d27d8d4e41901a3dc3ea2c890fc206b9856fe4cc1b399a963e11562ef59975bc8c5b42254bf2ad252dcce376ee9c6321274f85f808fc2f61ed0ecef109cdb6a0ca5074d6ab2af2f7b9fcb751ca442ba8bda5d7579fa7bd5606807f01671a81da3d1b79e5079f683008f7fcac3b5facba98e13d4d47e2c10d1b24ead2961663d3251ae5d2b9c699588b4d3808ba5582d149a04c4baa33b6d1ab5aa6d6ff37d92642bd2d226a46e2fbc17afde9bfbc2a77505168f53f011b5e37a017a13af55e4de690d4566186f1744bffc2b1c3fa20374d8337cc6ed16afd3073d1a3b1d56fb4b1346fd1680d316c7b4a0b035fa5f07b81a42d23c22b2259366449610c6e99f512f65435c6502f4eeff85b50fb3617cead32bdadc184eddcb9f0036b931749798c7515f604d647960a79181d1f21029b10cd6dccf5650a122b857415ee661acc9e2f4994bc3616dc5b4ae5ea43fd4d8b6cc2b1f3c64223740bb3301296e16a68c893538454c6197c72fc392b023154fa11b12ed4ccb2a67ceaf7bbc4050fd4d88c3fc867572ccc00c1fb8661c253b571901738c2612d2fb749d17bbcb147c68669831c904bc0ab03c8c752211ceaeb8c6873645f4c181b9d98cee46f343fdc1cd10bd4a1ab2832f007ee10eb6a4d63a51b44360db619e6ba684eaa4df64e71e66348651dddd9f0500fee67234311ca562918225057993d7828ef21fb9ffa248d90b752678c4c7f9e3136b95b2fde6c0a024dbdc9a91c7c616b0effda69c9607cd9d721011f061d551c659c0598e9d54b47737ccc131a2ff0af4c787d0c42b22ebf36658d1e7d75ff41e963b516eaa2945927c3ea3e28c4c056263055ffec963da143747df338f6071230b4ec1257307fc7b947a682bed73af01abbf7bd3d8904208cf23645bf39f73dda041d13962b6813c65c837952d3db1d987fc4acac072cdd8143487e869e6a0553e5bab34defd7bddd97038a7b472b3f2e006f76be9d1218bf0c471615bfba092cbe5749e4ea69364d7b995e9ebda5c559c23a83ebb75e6294a19494e30a71c9c302757fd1c7770db46ed73e3383c5509a59c86cc9f25c5bb097c383850b2bc7c56697adbaf39bb491052fd1e04624516e1b9b89cfbab6548173566a623e4273924f305bf6fb31bb71c305821b812d5853ac1663638cd70d85b8cfa20110506db810c2132c4af392c52d1af74ba15ad5d97feba23bf548b74bdc91c2e82dc006b57fef6bb16f3bcb09a7c28a0743374a6dfb6daeaf70760222533f659de32beef8d0fabe2cd494d4bdc78eb2c4c33d368fc32ee1347b097ec7b13ad288dcfe7720b88682f51779406000e21a0acdf71acd5ba1f271915d8daa7b16c24f77b24f9b9b1572b0b4538e8ee86f285fbfdf779529594add400caf3925559d384fe1d8e7fd19d5d617de2fa8f288561a1560cd85b0d772ddf37153f22479cbf9d1f79384531654dbce53943c93b03bf06b259d0d868ed2fa48262c640ce5e70a8a7e100f31ad5848547e6cb8509932492d98569b1ef203c8aab5991d534c76d0f5ffcec71d215892269909aacd85e1aad9239abcfea38dbf978a1a7c7bffe3e380c7307a7a14ee4fd13e0b924f18c28bfa61d9f18a15c9559b3e31000b82c6b8d79ed567dd1a81e7c0f7d2fd79c44d730ded84c755bb5f11322c6d56667787c746d13e3dca94abe09241104ab21aead680013bbce626b778d8ef3fde3130bfa57af8db5aa705d4c +MD = 1cc0495a16d9f1c889e7f2f69f251ef4cf835ed7f5b19d7d2bdec8ffebb33258 + +Len = 36664 +Msg = 1a52448e80a9e10953a0e680a1e2de9f7128317a9bb69e2ddd28e5bf2a6ec44d451625648fc996ae1e19f9d10e7a7d941c8dcd4470a58756bb84ef4d8265e5deba40145294496d2d9ab9d40dfbd218d4231d29098ff7857ce04bf4292ea1755f9e587822372f4dcdf10bddfc0ff498a8af60ae94a0b482e873085c1cd52a5d181ce6b99a1f8520d74b947d65f3e7e358e8ddc4ac4ae465e39d408eee1f09865159733f83f553cd93cfde1c114fb3e32cf51cd418359016b3867df467b645d752808671a4609f3c49a67023c9ca617e6cffa544a10ac07ca05546f54f3fe63762b7a8b9c709735541f7d2f8530cf79e5f2d017e0f717a81f43324f96d65f590cb26607eb297d600c2eb8d0577be802a4ea8b7e82a11c80cf5479e688acd79c9d3f736292eb3d12516aa28b1ff88010a81974fecb993b106edba3cab6e227acac34fb22003056aac835b2b63b1118426402351f1869e3e5522b38628e10a017be3595dccf934ab7d52271e8557021066d374465f57db75e2dd5b0548ab2d14c47a3abe95d8e99c80cb358a7eb702aeb281b1b69df5f2609565d940739335be8dd21d5ee467cb449e35aef7b69aba65f294032715288a07560456bf1263c704be3128c31f6f83abbddab9eb95c7d13d0e5291232eb74b700e00fa0b8be18ef03fe08377b0b8b8d9c6007ff08308f03eee048431506cdfa5a3a2ecab48d62f89f8275702fd0a13d7a2f0278de823bf717af103dae30debaeff325527af0955d7d14dccea702d3cac37f2da4b2ce1e5dd9b6337a44f631a9108f85c082a44a6e3b39c09b96fe8da606f4dc0b0b70a0b8a37a04719fd361158a83b2ad5204dcab4845a37f6640595fc314b0046f166d88137f15cc1534e7b0bc645e616f9ed6a522ed07d2ab64a17866432c39543bcf5c9849e9e23ba72feb04a5cb9541cec2ec6974604dccd800509f24b302413d6096a04ef34c79b6c42511bc9cb15f312bd17a903f394116f0a8ac2de707bca7abd6da12c47355c02f0f523d443e4e527c04d4a5173dbeadecc13bc33aa22d171b9d9429cfef667fdb0a549c44a465af2de716476ac37c096f3abc89107a28e83a4b6cf8882912224296875e307c5ba3cc08adebbc533fb60285bce42af816b77270d2f38fa8ef74104468f77a3e86ecd0da0a068e7540302132ab68cc94acf17e9e54cf48f764d1ae84780c94537dc6d6ebc92c5392440445b2068b87d82222993460d0469cf8b797e742e21163b6de48be49c1ae42a1bf0a845cd0df5b3cb76cc385aafaf241b246ed482c73e7b89f90b23a6ae0feefacca4a2cbd5566434c63dc41b3f8afa64e35f6f6402e4809976977e98cae3f946a2f53e4b56cb1ec4e18df138fa21dbce80fa4ebd1b30d00321d6ff5ab688d26838432136da7968e38e65c89a299d4ec1c1e678735a4bf531c271add4ba2501c656375472a78bcaf9976d4f271325dca570cbf570075d7789230f90ef1ee20fcac678dee90527cc6ec24c90c802e20be25353ce9a6a8ddc750b59b19129e883db4fafc7813e76f7abd8ab93663cfb66e033240adbcb04ae5c41f617a3245fe560b8841824999fd216a0315ee70a997208d7e6b11a71ea74a68e8fca0e576fbec3ca9ed8b95dcae618e487fb35b4e4b9c00942cc3fa566b7babaccd3b80a3e946b4da60f28d321b91a6a5472368203c2718fdf6231afa0fe028d54398b85f7f2c00943c55943c9d582fb41c9d4bc1f158432677bdad7c1d1e5cfd0046e0fc05d2ac51e0333f4edc2b95ff60af5a95f3b5fba7f1f2165f1b8cb47e73d48f2c15f114bdfd0a030b306285e1a3d8392ecbb6cefd157eea0573c1cbe42eb0374247fdd612d35883d432b36c0556865bfed1d1299052a29d11ce441fc891686de0e46f6d0b039d164c6b94a4c519583788beab87fc3a1bb406739a0c963c6b978a93ac55f11e464ed6436cecbb3cbc505eea9c86ab2c38a3561c2a2ed780484891de5b0d8f83e2920442c2906261313ad3de2a9227a987ff83207af2f71d7cf5b92cf20010c5008458f22c3c2507455baa11dc36fc42882d001903058f64882342f7e7ea4f621eaa36ca104cad9f6737241e37e19387c7c07f6e68b30ae5e855d1c7c30875eb9b583043054e56aa1551e46bb42e77d9b53e33b902a7f4221c01e8251a073ea21532d7f571bdaab7ee405d72e77a23c8df1adf516730d59991cbe8983342f4560aae9049ec172439406711dc385121c5b3cac4f01d0a29ccf7f87589c5685157ea4ffbb8eae75dbeba4a83f02d4ffc60c1e2a6fd7a805b3cad3bf18246d3b038428b6cdae4aab1a8ca7f36673cc31e1a87e6d7d2363ff4592feaff0a1e11ab6791d586286fedba97ef59aba9fd66f163843bea26a6858fa30ea9f099d19ead7656d2ba19f30cf2fc978e5620d58830dc25765053621d87cab7dd68a9f7f730d51ff78b3804a4d5576161c8745bc336d51a1aad00ef546700ba19e9c307a7c0144bb86c0b1b21ec38cb98650d06848deea09d5287b4c6c81593d3d67d772cf5a46899fefbbd20a2013486ce635c68a0a97772d37048f10559c38fc121ccf32c15f5109682510d81414ab1670fc3cc0965fd3fb253124fb94dc7c23c687fa6ede98fb0d5477d6524995cacc17ae34b42d4b05871a8a74f5e721f0faaaa1594b58f86ff3db3a8b3e64a18dd603d2152c7561f6193d98e7c6f6747cc9e7f15590d887960324f59665103ddc7b5bf047f116ab8cf9b6e2e63568dc08d7a4ff5707054e56855830618ff3739f05489032cbb931b06faef0d70be5627c6d0a54c576885498c09e745383b54abebaf13b3e8106fa4bc24d4b2310170dc0d3417708a608a245fd1f47d40bffcb21e37f78d3dda40e433bba7a330ca3e5bd5170f0895f2e3e438402344ced79fcb0c719d059a53c7582221e056ec734f2592fbf48af68a2327c9d70c023f2cae754b0e8ca38a27537eebfa0753b08703d7db45706e18b0b86d6909175c2e29a94f3e413eed89cf85d715969510499ffcd122960b2898e11403ba48cda8f85930976acc3c4a15b6ceff239a02130408aaafed601d50e3a5d6a92228a77f3a35b50c65020d5fca67af358a86e6e27c6b9dd2b0363f6d857970bc352b2d557039a71c91851a84f46ca738decfbbe50f3336d7ff8ae9d4fad672cb57c2d7b216ef972694c7fc503040376784d6e9c158ea162e4fc0952db0373d452e822f1bbac1f5d8d33d1b581a6cd050115ef8ddd61aac541599c9ee423660b81debac08b85b6391d1670ff30f4d227108aa81b1132f79d7d559008d2d3e6d92aa51d6ffbc1630f003d832b77b8b7e48df6becd17ca2ff282390d190ddc9b47358672867127d0e620f033c2c0b82744609f5c2b58f1fbcc374d3a57fd062f5c8bc9e18e5780a5c66477a84b72bdc85072cea8be3c6e033484d8404c0a18472112b6940e149489b8b419094ef48f420fa9caca0d2c0bee31512447809ddc8e9cb394b08e102b25c2f8207e53b0f63e8aeeddeba18e8e65cc8677767a1c18a9d757ad6096b30d21ef18d231e30dba64c72a4d3300cbc00f0c0c1af5c2f19543dae447caaf65012444fd78478573a25bd04363c9b44c6995f9c955ede0821b02ab44ab16608ed1d6cb8d59ebc24a78ccad2367d64578519e9ba66f865c39728e545d216d329643e18bb1bf4321fb025e64b0a18139b63fd3fb8bb2e7bf7d6190dd19f0f7ace520ea8c52f0772aec09baffd458f31a70fddb2061643991b5b1b04c5e62db56e32f9cd75635b0658654878575d6536f0d5160120ecea3584b2a95ab16bd42b8f93a9c73a7d6165b31ad6eff7d61cac1f50407da7c384e9ea694e801284a535b8d0795682b1bd09356da1774d34280978fde7a7f91e961ea2eb750577c5137c609602dbfcc4c07955ba429ec5fc19c7945a66109372b05c54b5b76b4fa1a1581d30b0c7f70b0e2eaaad34d70092547ef7e266381554462b6654701208aec161555d0dbb001908a19a92f2a06b9b8a882a32429eed37d9f45e4449aa414116209f579425a663426aac27f69b957c0e8b91a695b58981ee5fa301ae94680cf20e51dcce88687e4df265c8db18ecb862e1d4cbda0c78e6f5b5eb1919510b66f78323493763c4ce8dd14de1fab8ffd52a335a1e7a0449cb82af8d070470a9e389376a29493829d8747fcb2fefec3d66c6e8982b104d6aa407950f381a63b2174993cce98e862620b45663ff253323c1bb9a155e17486a15071ef848a5bab2569b20922661de383ba01dbedc352e518a8a9068340975b67303a5ce9540d629361046705c8d90de8dda0e22438a2e3535b683f7596165de528fb1f8ca7656954a2badddf84c4e97abb4d044c1aec34d37c1ed492ab98940380dcc1d34b0bc74e74faf41963877e1f9e2ec8cd31d7e18253f24d4146c609aa7f06c92807a6846b21ec32192dcad5c0cc6bb610450cf147280d33ec3148c3c06ea1bff2a4dea992f0ba2248aa34f4468e2d567b1e326c0942970efa32c5ca2e95d42c98eb5d3cab2889490ea16ee5972c9c317783f25bb2eab764d312e627dd3cc89784a1c8489d128431d4dc20b09deedfce6d3ef4c5296895bfdf9852e1b4aba5881d91cad252f6d0610021f15b3e1c1fb5c315dfb256045aa6858eb1009a299287cb8209e4b11c9861fc3989f064fd836fe3d15c2a21062ea230baad8d7900b71df63b2d85a2cb02ba2eec9176f6da3483333a123672b5383a45e6ec8e38763dd10685dfbe0d4c36f30001b1f6dcfb59791d17aadd315aa1f62dd8160ebfd44c2c6328c796dae85d94d9429077fea81bda0732cb28463d905e5059d412f6620bb576ec8c15f2e49f252075d7014429a22d5b511e1d99a62efb1630cea4c567a3f4a599d6433b8b232f3f632d9c96c515fa803d4ac713dda354e827abcb142d3c7159f64f299e24123a9dd43b51dcc69ccadebef82b9a2916f12c041390cbfafcb5fbcc9dce03f693cca290a927fe726123dd9bd05317d4af5b4c90b0f9d2170e47f1e3683a534acf6fb65e1e27e4128990e59e794673249819ae93271111cc98afa50359767468eeaa4107425876ed3f965e8d9c0c9462f6b3bcd523dd7060c3767df4178950981705ab54bec29d4da9bfb031e0ae64d5f4b2dc1d4a67d81db623e37d4b7bce2272095c0a3a6d3f78ef924352ee33cac7b79d783444b62f499a3e3e689d55d54d283dbdf45d6245b73a9780b86da3ad7e6afcf7e3bad25f2d964ff67bb41e4f63612a34d9d0a89852b257cd2a0606f7433358c1f054c44e11d3df737f39de23aa44562a803b471e917e59937161658f5e3a373e23b993e63c78751c3bd39d396bfa4b08b24448c1bcc7253b5525c75d17a824d64692470df8ae9a5b792b6479edaa91343796b2681ab4442b9efb3549b6a5a4f11f86e9ad8b9dd597ffe93acb7a7dae18d7d78dfbf46e3dcd148ab63b825841f7783e7fad3e6cae3996b42817589b2c1a5ab0e161921c98887f7b521bc4ea8250176114f55944ada706343545d02b93a487c8b7843ce7dec3a67511d1c583ef64c498ad6d244c5b4a1712693d2a56691d27c8164b3af796e85221fc45ca49119b498b54fde7ad3f8a91f6cce7ae4338ed0257079ed373485e4b261a601e676f5e6de1108de98ee2d03b87672ba41b877be01e916551837d8d592e740808039213f743ea057318ca82de6e41f25305df3189c4bc88fa51bbdd44de1026cf460024b058e84dcd72810a42536222042ac776c4f290f017028db6d3e0f8a3bc5743f760c9154d3fc68fce2fdcd3a5ffb1c7b25b501683efc17880d0dc3465175ee3f6cf3d76ee11397a386db49b618cc3674e1485552accb406a30179ca5628856687c45d15168af5ccaec381c240f38830b0b83a55cef403be872e60c45d36f2561408d1f9aef3220c9afbec51297b27a9410f161f55b0d72894213929618bcd3a0464402a9f94e7c363db9c4f036dc95b69e0c2baa94858cd33a1ab024c6d3f9bbf9d52b1cfb56d78712c3ac4b81195cc91f5e52eb004ad34ca755e5605257000ad7eb095289edcb32cb56db92fafb4861f142884542cffe6c366fb2d74fa87f136ce02de91975bfdfc40de34508f4d117d0633c37b077569843c2a908136acf6c254ef94f1e712dc4993344003f989f31192adf30fde384777bf9285141f0998b9d920c032d72ada7b7818e2303490b645823f1df7f96f0702b6dc1715ffc35e83253d6a3bafcb7ffab43224bf8989e1809d90481ba043328febaf4b6c1c05d18800ed98f4b71c522e12290d98409cfd29aa497c631bdc4f8524b42b01bff5773032d854453646db8059a6a5a4a1f391aa7211c1b7b161e64c2a93bebc2fbbdbe482a7a5167670a2565050f5c9f3b3256abd9120ffacfa804cc5f30c86b680820aba02944fbdc33019c1d004f0800742d15270a02352d1a4ecbc7c1e459a6cf60ca09027d854670c3272cddb02 +MD = 98183b06c1ec2be06b821ea1d783dec8a73dac88b3558bfe83ae01f730667977 + +Len = 37456 +Msg = 633676fe3afa92b0526c536e5bc90d077506f6ada16f38b1758e458e154e6b295e60a85764debfa01f2e8b43612a94790b7de0fe81500cce5b279b2c5e058de9aad733e3340f43cc7790282d67ca9baaa7267787fba4c96b00c227641ba1442caf63c1ab93d745bcc358cf3455f24b21afc7644ff8b19a11cc29943d3468b779d5cbf7b5677cedf9694f2a6113eacc668d294f5e5ec1a546272388c091a30f5884d97f0b9a47640ad33de1bb8afa4501a714debd171a12957977abf41a997351245301b51280d27767ea9c4aa06ade7b6750bc7309040a832aeea7e1b8940ced1d0224b9b96f5fc98f1d02173e81c15a34a48f881ec9b59aa250218f51da01b3d7ae9121755c3187b2a0bb294d88132975d900053cb03a614a65c407ceb47b2cbb1ff0f5308e733937397089b3c7ff6d94b7b6f14d00c16088f43550186aa2de2f1ce83bd14e4b6888b1c93d5a86aab0f8065a5438027420c5c71f7215449d539c6f21fd40e4e19b0ccf6d4f280d3f79098e9337e5fe79286aa42876af8a95136bde444265985e5a2b5d05c607a3e4512f170aa13c3bf800dd54f863cd83b1a40232f91328b1ea2d4d2138abde92c1bfd268669a25031a31889f384157781a90cb32e7777179ac9ddae5af059420004b5a4a502a889c0642d24c901834b1f75f2ca8b7762836cd313a6f11dc1396c67d2f85705a4d4fe5bb2225a7f14e7671978f5a101835317472d6870739423c3edeb9e16d315c64df25e2f026d38c0fb0c25b129b6680b2cae614f7392309598df56126f0b79d231b077976b4c7d6c3db67f8960067f101f7175d864ea25036de4a8d1ba0f5f9d4c2e94f7ffad414dc1b0fceaee6237165228d1afbefbeff1c5766a68926f256befb53ccd3a0022ea097414524f5a3e62874ceb11fc380ff5120d0153829b79e2aefce58394d590d587885c5bfd6ee3a9014648cba73ef361d621041f0524ab760c6e15b7aa9e2974be563b646310c53e62ad71194a6138dca45af917949b58ba8a7153d5e5da4b5c307648082ad061b71e0adaa7405f5ec9ff0346f9ab500004abaf166ad11a75006050f8b3bf3e3787b5c70be23379c3ce38c27421d3e31008d29fd3e2f6cf44e5d08ed3f38abab544ac6a7b46ae51063df401171c88d5272bb19c12eac17929910388405437c67962747dbf60fb75a4bdb357966644a6a3d1ab4c69cebba891767bc5f43220e1e265a0793ebda5481da1e92e788b81d824bf32293f1b5fce2b2aabd03629e0ad8ec2b2d57fb95658dfaf280e33f8eaca1838d8bb096d285a4502062facb7f189dcfe2e1af8e069187929d27f6f3aca2cfcd3216a6f10afed7db12d4cbe58ddf76bac64d240cf781768a68aea70cdba5141128ebfc6c250f843ac83afe1790086a9220963dde2edd62ca9b3e7ff2e35d7937b8333a6eea5fb2558abd1bcb4f3a824038e7836a734c54397efe050e8c7405282a16e95e22976914a085ab68931ec5ac56667d19907652c15917c1c69e8fc1cac6bb90a6955eb15f51b93656245c3bbec23bb3534b04674973b03b83e059b306d44bb7ad0b5d931ee78242fcca9bec5fc38fad816e9e98ba15f2fcae1b77e5c59bede6db4c3c1639a80759c44d83e175a38af409bfebeffa87058bad17945fed64caa6981fa24398dd71021574bd21e9a8530f55079473f2111070ea9c56276777097e4c4e372024cde7c65708f1b4a41b1386cb0d402c8afb3b34cb7265471c1cd4f75f9fa4b8c3c2922bf3d2c6a38d44f1e2d59b9823ab8cb05eba606ac7f39b50973adb91105e0299bb4f97e5f58b6a16a9da77445f3b0d94761e300dadd33ba7e943caa532ded625fed422f6b288d6a966426aebe823c612045fa8f503a6450172e333892529865e7bea3aa0e26bd1d39e743c35c74cff4f91e591cbd1530185bc82dfe5f1295a6bbafaa68b8e1ca1bcdbdab5cc039d0076a417b2361dc2b75c4e8997609fc49a75436a2f60be828e8ba4db9d55a4fd10adc65fd5dff1dbafadb05e21a235e48da39fa49dc77887e26982dfbb7bb356791c7e24c06d548630a16b6b4554be707c1e550eb867c612e37dfc4ed8e3378f81ed54cf3c894fab84600617cd1e3f50af0ded1247e9af0cdbf09a91bc3838907145d0c611dbe832f11109c97fa7c26c6e99ef1714f43c5b10e9e40e2f20bf41914f7b72070a2903c0ddfceb25984eac01eae485e53173e8cb91632ef943d28a2830dc3be6bf1a0639eb68e48598ecf8af2754c383485e9b530f9e59e14b7c5380137c8a75a1c224a364d51c6850a338c279c53bb6e0055cf28c1df8b1ddc284df1ee1c57d592943486fc9fb95677b548007c15445a16e14ee3069712fa4ae058e799556c68e574c6e35cee9d6867c3432facf76fa35a3a99022092e244547bed54d20a318e955285edd6b4ef155afc01f7978099b41ac05208b8595576b9597fbc208163b122abd60902992af7b1be191ad4275f1708f0ee692661092bca1794affd715f6b0def5bb768e1dd8a1c87dcebdb723c46756ae296033069be0724a082d140a136b7ab7b9b62457346ebf7d1fd25f79dcd109cc331c74df3b8010f47e73485c58ed04eaa07973a98a8b07cacc14c1e00054ae504aefb2023a44845df4fafa738edb8778b9e60279a49fa84a1daa65c1fa984f21b70173d960d3d56fb1e9b2b77de008484c2659304853abe75abdd3829046f329c27942cb75d60b10ff69f990eca29142a16000373f4f1788ca74948d8b06a34fb280a44040f42f2a24a25566a4c9294effbd80f4513af415b6f82f48b27f667bd13d23a08ad648a469bb51a16efed954b0655fd145bd4b7566702c1dcf5a449565d946541b235e6616dd72a910e9a83cfa7f2835e57f239222051473a83e4586b77b95c2bb847a58732f42e652319eee26336088f729845332df6db107d472340f4c995332a1a262c8da48c1fe7ec3537bab9131446276a0dd25c241b2c4d288b574d96f4721e16c5c050ca0da7a2051430c429a94d302616d00988a71b56d6af01ade7fc4ad3c5e78d917ecb0cbbcd1c481fc2aaf232f7e289779f40e504cc309662ee96fecbd20647ef00e46199fbc482f46495cfb06e05713ece74f3c76794881531710876b9a681b1f6c640dd2f81541a85f65038d6d419b7acbfe21f376f593d56f71254eb5ccd82d70d44e5c6f73ddaad490e2ce0e3058a908e1a9cca058c33a5b596f6f57d7dea1815d854507ac2cd511a641d1ac6a710406c17a08e1b93a0c428f0cd569d2550306c65a96aa0755b07c6ec79c2d380f102e653caf205f20d28cdca588d40565dc69d874563fcb80c47eb21d397be25a57e69798ca45939c15a008e2917eb834b2115b7c8dae41d7978038eab07cb07960971d3560379dd65ce8db6af75133ed1066171943dfb17fb3e8c9d7071aea95b3aac0bd79e0c5f72fcb1de6c234bdb67bd0d3f481b962a3a01f2d8c483bd7d5d98548d51d27532716b195fdfb0ea0b77db759b54e269e69e48e2cb07bc9c06259927d2755f48e8d9a020c58a9c9221a9d836f03b30eabf9099c8eeba6abed63bb38275b282fbf5242274a9fd44c8c04649cde86b757d27c97b01ae7d3c9a60188de0d199fc12e9d97861779847f269f586b6de762ea5b1a14349949090b336447eef808c190239720883b8ec24a37130356e6cebcaf8efa0a8fd4bc5159dbb380cfb0d09685e66865957d8795950988edc60fe2ce8eb345002990e6b29be817bbe9fd1a2688be37ee16a60c0648e2259c24b2cc9f7011227f6a986f34b9a0b781a4a78e7a82f52c44717ec41c4b0b129ad69534373bf1ba0ebab300df9b4cbc596875d39959d171ee10cd58df86cc786f4681c09fd99b353581a841bc2a334dcc9d30928bf79b2b74595b6f57e26c7fa1da3d1bde3057ba7c2740d9d24c9f9361aba07259429a855fb6f0b28d45354ebafc93ebfc2a6d716c14437129ead6b5a0fa8d1c0a2418a5358e53c988996d0e421349d902ae24838cb079b0caed21dc11f2bf37a6845bb381494d5b50c45de6bf87288cf7a3c6186464a93fbc3bc8303dfcfd6c3649acd8c84ea610eeb04dffbbbff8ade3f399577d969dc507be13d8ab7e1163c05d533b9407269269438480bd2581e3cf85e6695eb01bebb45c4afde3e2c1c34fa798066cdb9486c9674c924e208ad7c241f4768f18ec59caffb4c66e8ed634e80fc35ed932ba971703eb5df518dd30c40f0da59938d8b6518e9a5cd3ec1860957d1b6d62755e6b5afeaa083a754097ddd7771e0376a6aa52f144e69a624eec5dd9e95b8f0a49aa9a42d1bca5a07cb416817b0a553c20dfd310fa8d4c5a4283490b7550e85a43fddfb6a8a0bfff592e76f5619118f10cfadfd30479703bbacb5ffc0773f6cd140c324277dd0ffb9eae051c71dad3fc33a67b22a9d18e6d7f6ca992e7ec40cc837e9ace859a1dfd15dbccdcf30e0ec75d89b1e533be2e58590f2fb65de44ebd59fb20421b00726b845ed21e2e5452b9514b8804e867d9640f5cf851b083a9095e2dcb86813795aeb4de20cb6bd5253ad995096711f516f96bfa0c4929f0d8195ab9a383ff660e2f6d04bcc9f2b812b2bb0f3af6f58f6e7f3392738810546354154ab01fddb566557678b0020b269e89c060259ade5e685e30cb35f4add6d3215686fb43624d248799e1045cfe475328b030d23912898cfe2a4e5b77479fafeae7158bd8d756d02f9ce7bec11242b8f5532947bcda3962c7e9c2edf827d67f168ea068c484f7f3b44833e8189040555971f18e0c7e96732234d0f15e96a4cc0d14cf9bf1b159147e656d8949c068b3bdd130af0f46c74675d4207193da311c3641492b45a6a4bbf5bb3daa3beae359873c8fb0af7af563299259747e3ba4fafbdcb720aaaaff7081114952d856d8cf217ab59bd3614753a7342303070325ebc3afc083070792bc8a313c89074c709ef1534c776344e69d568228251678de79f7800d5b4303862678e1bc57b013d34d618ff94d466bf9c99d460de293e4f42bfd1845b048e70337b3ea71c5bbf42864d7f56624661ea960e6467d42668d92893e3f118afdfb3075a31405da1137976cbd4e3b04aaa51ee9984b1e4e78bcde1c22bc19f24a86366ab0261d9f98244aec7a621ff6fa477fec1a1d980dafb8006b125904ef17d23d9e43ea641a3902666c76f9bb003e4ef4f1d6849488f4cb21ff74dc7b8a4c256c98c2267f55dd1b167419dbb72d5e00a7813348bac5303b695eb10e25cad2c8ebe097a319586ab5808dcbcfba8243a6bd239930b1ce4951ff1232b7abb78f03e3fe2829d829ca19cc3ef49f6c09d3876160700622ab29550ca35e9fb4596c1d7c7adf8064d2e38f2310fc1177c9f7edb9bf2190b462b68fb7979c8de9b95160dddd236f665b9f5ead8a4bee80ca981eedc8129710fdda462978564bf1de27122faf5bbf86cae4d0913449fd32159c632603ace2dd837bc489cdf39f76d0d47c9976f1386b299c2bf8965f0832b1ed048cf9573bc4fd834f001fdb521d9842e644bc4ca2be7faeb80939f3d52ba6714946317c686d72d930b6f5752c903d57975708d4c526d502bfeda46f2ec3fd127a7d3381327fea65afd2d72bf477c7fdd9fbe3f1694c328088cb5f39d9a2bdb6de5888d061a36e0f137d4d6474793f1bf258d40b55d79e105accf3bb9e71ee47be00b7cfbd8004bfa6dee089723fac992b95638a5270229a7f18e75b47d898ac629c48e80dbfb75dae1e1700b771165eccdb18d628bfc4063dd6c3839a7ec4cd1255c4821b078cd174647b320bb685541d517c579f6b8e3cdd2e109a610c7a921653b204ad018d0340d9938735b60262662016767e1d8824a64954086229c0e3b5bd9ad88c54c1dc5aa4e768ff1a9470ee6f6e998f7cb9a7e24f1a34667ea0a839bb046580a9304209efff3b2f8a4467fe670d2a983129abd768e78834b321c9e877791351a8e31e96df64698ead192dde307a8f62e3e019cfba456b966f4b2e0b16804ac6f8e159499e9d5be42c1babd6f13d32b53be7da1070bb45525a27c0e9c3a272a84232d96a543278f9ae52c92ed2df7959e145d4e2b0d27f311dbc65cca466f3bf2ddf884128ab2794dcc7702dfce7ce157c02f18fa2107ffb601306fae15436d362ef4d164391d27f5e81861c97dd98b2b427185e7000ae78ca328cbca3f4a1ac886a0f30cd6ce080db88f443ca4a3ef933ba31963f27746f0423dd5a12cf9d114859b8d8edc2b960fce5a3eabeb52aaf9ec623803a0f3aaab6eee31c556c93cc4ac32f56cb1dc5e6689f7a599ba6c39fa050d864863f66ef8799844a9553e9a335b05cf290046bdcc7be60d788a57190df62378a4e3f62071f2eaa2bf90d095fb22827f464001608c34b3faead3b9c4903032839b89894ba27b43c08aa2159c8683478a36e982b34024cfe2433efac93b53c93baecd166cf47342229cf1743a500db3748d75413262ccc8582424a09369d14605613723f1026b544d691782dc021264c2bc6bc36a7ead0bc1001d31cfa62937852550386436d3f8a5718cb81df741b9f946459fc7ee4628b1599124ba7acc1c1f9d90da531c3dadcf38b98a6cba0c519cbd9b2ce75 +MD = c8c9a2581541ade3dd9ba60fa8afdf12186db373799ef1554cc06848a014afa4 + +Len = 38248 +Msg = fd8a43aab01fc3b33cc23e4d87d6630048463a436961aaefb1e93ef49f66294b99c0872c460de58038a80499ce83da2158beda507d787562dae5e149eca0199f304325de88369bd3e1c466501374c62208969842211cd850d5ab643c9cf202470b3ba52a403fec94803fecda1f502feaa0f7fc821ef5d99feb644f377603ed2a72cf907734d3e1ab5d401ea0bac01e6368088f763cac833861382ba1437ce132ac276c2c2d988001c0f08508ab6c9974a8f2d88742e9db03824e7ee2cb04e746036cc4b3f336d37cf177a87bbcfbab05a7dc601dfa53ebe895cfd362d644064ebdc61d734e56e20537fc0f62b31659ffaeefada12a93bad0e1e2af882ce44633235c01d406a0b385dca743235964ad48055249799b5150a1afb09cbe948bafdb7d57f73ee2bb51e226a1cb28768eaec9f42ebc0f1534b6454761216cd8e14a2f13de8819ac50c1065e122fd7d23b646ac3ab8cca60e4f3a2f11cc7f8be901e172c1a3acd2a060cd7cb22f89a3414d814b9f04311430a0fa2f50914cb0f3d337c123398c225863b3fb7f7add866c011ad1f26684e874e132c9a51924d929292440b5027616477562568bcd6f82ee8171e3d7484e8f45706272a1cc9e61137425960997110b18263702797fc645534f3505b031e4752cef07deb9140ff52d44ba15937fd38d24f6c0a3cb0a683a34bac2ac1fbbed3695ad91526d97ffe1f10b6063d525342908578daef305cbddfd64a93b783edf401a4cad7221b0e4d3e938a6f5611fc94b3cc90c8883fa67ad37cd67584c33112e153caab298076527706cfc3ea9d7f9803cebbbc4e040d2245e657b771e41595d210e27981303e7794118eec421e64b54830019e8aa8181dfebcd541c60e1ee59c8319297352ee235b5bced1a6bb3452499d6a56855250d4c6a559fbcb68d66a075377a3470f0ebd968d975a5d9c76d9cfbbffcd842b3bad6449e9cdc71bc48cdb2904cf458e27af0b4ef16fb1eab2b1a232c7e9d25b6311a251909f044e70b4dfacc996b5f8c0608347e5f8e8cd70428aabca93b609506946655359c82a6348dc85cddede746238c5207add4b6c39f44fce11b4775e881b192c3ce35cd724b29a5b1891092b949f9b80b90622f0942fb842a3325e819591e34f5225087c3b58e1d7b3957e44defdcb0fa85cb5800a5b8eb089f7b39aff316c759d07134231a479a1a5d485e8c8ba1e7652c54b4522e099bfc9e9bed34c657b472672c7508dfc2960f634663fdb3e5c5dbc2a2e676426a1186df2c6520694da6df44c6acfd7cababcaf9f68709ef24d6bf074a40d58966e627cf9153fb4254f8e0f7f45e69875f55fd7fcd4a49a3cb849f589f65f8796c746ffe5f1c3df82a35280f1a0be56659fee7633f2025585679fd3536c86788f766cfda0a3060e129e634e8cc37e9c028314952b0ab35936201492b94daab3ea417b7e11722fc93d07668136f54fefb468773ace64de2eb5ac503ba2e3f2c10df11c8b20a866996ba80622d97f59d9e315bf700348ac5a6cd3fcd6f8748729624ef62ab58cd5040447e9385ca9c3e1f753953cb2fd4567c15cc069a24991734f1fb266b865a19470adb7cba7bbb69058eaa1a8c3ccd0dd1e1143fe88aa37283e2ef744117cf5d118a219e4a2fd596c6ea28abb1ffd7542eab82e9c92dea1cf96416ecea919f74262edb68935b7d5ffa243f87dacd85e208d1a284ca82ff8f0bf21be0b6683cf6fb75838c5483051d15a9495f753a4b0fe6fffda15b2e36413219690033104a6e080a9449dc3b1f668ff5e0630fdab9665f82febff98430cc124678cbff3e2a41e23a9851b8e82eb4efa69f630903336dc9071041242971981305e59469266f0b00a20a04691eb590bb17d0b00f685b8eb9f8ecd579827b2dcad41a0a0f8d8b31e9bd64026b53468258e62eda715e9451a8d4fedd5833a005903d908d60b8014f140920bc4e0a43f26f8df452dd7a605f2c2790d94e91a2b809aee3aefb5a53cb0601ea927fb84079657bebb9b22061ffaa6d7d49db40d5ad9da48ddf3dc9152e36240c357ef1ce7fb12c5f6f8e04fbbbaa130ebf7ca5cb5ed2cae9aeb6a8a7f12b0c1015da2b408df93bd9f4cf8ca03bb1c4bf9aa154f6543f6e919de46d9ebc6b1680a40fe9492c9416d5da052bf1d847df1a7bf7b2d9263a1c201d458c6bd86cdff8708ea04ac42849fd9fbd676319e2eea9d3de64063d696fefbd588981edb6c4c1fbe4d4b7ed1c419bb656c36688f95fe822c3dce01233c68aeeabe99354cf6197b6911b231fe69a4aae6fc49e9e11cf5ff95682094d2fac7c31ae20f2b61d32c42111d81ed51db084e876ef5dd1b2a96bb7f4e7e436c3ae2e16edc4327a26c4d1dbe5900d953830d504faa836cc626aa5ff2d92f36786382b1ec947d52982746b479ad761e8bc77b5847983bbd697af992f6f07d967edd6fda9ef305d3ca6ddeae49012de38110190d752164f98c8d4bfd947bae8b060f71058cdf22d3c0a7dcb4373d6b51bec7b018e32b4747b8c76847d3630b3c996350dabd411d7a033b096d4a497990c9520820999f2dd073901819bc8edcd2be40d30039023eef1a932d828a0d9fc72a1be9ce9d665cbc4850221b55e56974fe0ec4200808cd5b8d15109aff72241f6a881bcaf9661d32bc6f4ff4a850f94be036e9e1333d12e5e52b795eb25e52bf100365bbb589b75a5955674dbdb8d67fec1e0aecc08855b6a93c3175aaba6fcfa4f3914ad7b6745da66b32cd9a034637aa2ff1e8bad0ddf561af0189ef6fc479afc0651e69d59a632b17771d491b929ba3d1657e26fff3cb96eeaf3f8a6499e3b8d1aae072cd729371c200e4d2e602d45e6d2d560efcdf60ce6003418280363547902737fb884416ffd593cb3b4edd0a6369121779afe9db946dc737dfade298e464a6cc0bed58145db6f97a8e3a6d643b2fdc6a700059656d7dc1c8aad2e63418b5ed46aae4f5b414cffa98d391f80b6d2553f6fad77625e3f8ba9dead68a306aecc64ee055641eab875dcd103dc72781b53e641f1c89447d477b5ea7a316b4636ff78cb628ee7baa45ecc34f2522df0046675be7b7dae9c4d0c9b2e920d2ea89a748a73345d9f39a736d1f9731505b713f94845b90b13d3efc6f41b93506f867fc834860956dad0278a98cf1499bc45c0a8e8782905668753333b41ecaf90682d76e1643fef4d26abc68b063554942490e1d0b659d1091f1dedfb321c7f43d649ed3bae769b4895aa77133f83da3fcc1b308b80aa029e0386339e5c9143fc494bb78db51bff6fb5ba18ebeb5e9f11b4b6119377b82e77ed42c0af31e9a22c49a9425228be6024ff41285f9a4427bc670801630c02993934d9f1984283fe565ff93a4369cc820aeae621f8bcc2e8826b778c84adf7f744629263041f0eccfce4a1ebcc18c4c984010f9241d35966263a8b2f72ee26bd4c0f22815d27d8a2928039f34686359b12ca23f5c56e8634fa4cb946b84d0d4f9292f0d91ded7ff3b9ab27dd5d52ad9b59bec9d8fdfec7b9811a987ebf3b2a42ca8693c6c0d07354d4de02067b0e9b3eab47779845f49c885d3c9f441238fc2b565271f6e091412a76914f0b2a0a6cf99a0ca3c047f08315d12b34133bd6f16dc89f11d5f7706809115d7557d4e6b1509866d4fd7e7309d6af5f0d88a695b88e93c4f9e0602e6665279b0b792623f6d848fe918c53ec9f6f2a5071f0dce590023a5ca0a2c50bbab33be277eb7832bbf50e3c501962cdc233e4a808086957466d4ede9ca99098d397c0cc412b55935f3b6a98971115b6f0c960be461bb65b1a2423b354415d664f7758a10db538d68f1fe0abed0ff708d994110ba2c76e71a9cb5b835e1685f49cd656192425bc7c9a1702deb8528163bb289828a487dc3b63d778c7109594b43a396b8d2ad93ae62eb543b98fa54f3833fb489dd1d98a08d6bcfde7125b2425b614eb85985c5eb3ab8f15b4d964baf6c280b4c39139126a80f04d6be9b39ee98f0d689ae33b72659ee90b693c1d4f3fe55d6f429922ffe0e125f9edfd5b7f4023676525a1d3206c8777973f1e3b96742ae5da8320239d0c75a285b5c39f3ffa11c753ce3adfd338e39f4bbf064c0b23f1ce791decb7843dcd1a738be31b7b57e8a1d6ed34ae256b31e49b616adb27cfe85bed6b455b400545e235b8b24c9bea069b410b15ba717400dbf8bee24566f85d328a13c09b4af37e8e6ec4e7af2c30f9f834c064a151d3ced9f63fd327631deec6e17ff4d42f78e5936148c9afa6cd416d248597ef411afa83165cd3fd86a11bad862848a248060985cfacfeea960f6b4e92c325f0c9aa125bdbae5b445c32423adaa532923f3b58da0c89eddc7487d630f21195524611b4c8b89cdf785e321113716f59007f8952049a382cf1bcb720a8d4f97c8060d2405e3fb0e7260740f6bbccff12998360939a1b5022c6e92dc91abdd33207847c5380c382f8c9e1bf71985fdcf5b9e5618c0ee26a65d8844c3dfb1f376c543b705cd4f67b8ac0682e002dac6188de0ffcb9d791ef6c8318a2fdee7bbe7202f04ecacf4b0313c6251d2100255532927da29b88ac47bd6310c2975955a0e9703d782be433c23a37830d62a47d008963b8f3af96840bcef4f71b88c02fb739389d7d0e98333164910c5f238ef60c03ce4c506495dbb417c5462e50c77c49f7d87addd16febd9096f4bb3023432c0183ea24968eaf5d93e30986b7db3cdd19bbc600b12efa001bf2ebb898d18b5d56d31456f1b2a74d398e338636e2996f69b70e795517c0273ec5bc64312b0f1a44942b001f9b8db4bbe39d096a09d6a218d726c0d0bb9858827730690319168c552ef8cd2933a9b9a24c0eb85c393a9dad85d87c2a00c9bb6d700f6c1684eada100940621660428575304d3b13580e89b028ea556cd09d7a891821187352d12dfd8dce6aee0ca23fbcf72339974f9a8da92725f59d125aba5ed82d12216d14ada523698bb91e0f100008585af10726d221ec5101c5ae49a67216fd0528bbfb818f31d86d807ed220c7cdb4472867fa80a0de3624ec8bb263503b57979126cdd24321e4b94b1433969cadffa844565ebeac659b041b93dd1c7db004706395d4c74a59551720c8799a041000244ebe99b4cfe94a495aad11f782dccc39a6ef56892b43f32e0982ee56895e80644d86f48b90d2099cafc1981ce826769a621e9c3f6e4585a70d2ad8efb20047104996b76b7789a1a524b8b8b437f8cc3aa009ee129cc9d52934a88090075c1dcf4ad62a7b0d74da0bc078bae7f5b994c26898932a3c36a95d87e42e5f11dbca49592e94e4d9fc7b768beae6dcacd097d9c0b3d5aed6f4caeb0dc62a8457e515277d863fcd64894e908ef683bce3a79d28b242fac7f36b007acf37bb2862e3c711bfc6715f348419fed085dbae23a56e57452d4b9c1a0312b2d31d2a73b83ba8ae25d673c2d353a56b597d34dbf332d10d815c1056d324ca3d2362c08ce35780a7ba9e8d1dc960ba7d32c8d76bdbb68ff26fb8911ca636eec0c7ecc29c6b9d17a3830606989c121fdc624c0c85639970af162715171ca147e6c5a57bcad677354b8af7285dd6d09e31f1f31a5114443cec7f92e66ebccd9d542773323fae4ca147d6573991fe04fd24e8a34bf8751dbb50b0e24a4a0e22b8b5f5402e227a84243e6f10825f9d15055c4e46e5a20f8db584b3fd8ad39b095faf35f3b89cc38786d95e084bed3a6b7e822bc3317668fdf13090cdee30eae85ceaf17418d510bc8fbfaa29dc635d6e303d8802779d0ad338fb4d39bd8a8428750f30ab96f4e98d06985b597cea8f86e3366cebff3f7d79528df4284108ef3273c6fb807a22d661b50e7a8274aa561b5e15df6610824755078f8c84c0d3b56d1db659db0b8660a162c70d8b0dca3d956a81e95bf391f2d11fa91e3483125d403d8852a492490eb3d66b1f5c8c72c95ccf2293b2f19206536182b120d2ee701599e4eec357926900d9a3b5dd3ccc84d855a1e45350ae094596c34d30f58f7553fb703620a28af8f03317d9f664fdf571c3a6e526580c850e8613fa4c331cf46129d731a3bb5843ecab6e928f4b30a490e3d89c1453d50116f91bc15cd5be76a9ebbfe735e926d25a0a50e9903a8b1a9b7be01303873006c5b783a948239c82920bd161bc76192ea31867e4e17936defc546552dc3d461b8387f2bbf865dfa0844fb4a621a85bde309d588e6a505a781936105f88bd3ec8b83310fe54e3ae58e78110be4dc8146a6861ceec14071f715ce98944ee4f4195cc81867a45e5323324678fb2271d6b5bb22b6f08c5e5ac502c347709f53b770b273afc37b1b292b8a1cad78996f1893778c5e3e966332a9df0e083b487c807b13126193e8293f770c771904b848a968921f5d397e03ac0e112b5544f8b401a0f530c86969ed089e1fe266301d831b9d61584e71b193f97a2f97b93e1e8e9d7aef3b5eb47efb16f95afaff7b27a2e1aa8bb3ac67cfb8dd66b0dfae773880c67157beaee5a5b7dd21440d5f66651c9e2867dde19c26d6ba6c1b6faf90c52f0f1cc51713ad6cc7ed9e41b600525474a39f9c23a87f556202f2e5c4270b42edf9e5cdf1275c329faad8fa618cef843f84688f314b91ea0f59839679bf573041f964c8b9748295a3a759d4bc5f9e62e1d32bb7635564532320a6b3fcd3052bcf90024bfc65a1146865a94712e2ef8eeff241ab4650770f41fac4a4ca0c8583fb5046de2695482d72684fe7f1c14356ce6452e156b +MD = 160adac5ab3e687edf09abf6fc17e6bbe9e7683a7a5059b08da9962430ba8bd9 + +Len = 39040 +Msg = 92bbd1cf47f26a8cb7f1bddb2bae7ef60cbc80abf8126f4a150ec1c1a6baea06dc4dcfb5eef57efb6cd31cb2d0471ecd566fbdf70deaa3772ee2eb57ad4948c50f6284b97b842dd8131b8b9985efd4a6dca9a3859d93a7770f9f98a0daab7069d303d7231727dfed57cff1d7722d084749721c9ccf93e2125f4db2e55367c8bad237b03ae967fc00ddf938b5c089207943d21085cb74bb0fc7f5206e4005ba7fb106f7471acbecda50a0477b978b850472d26589babd9c38ee9dca83ca0dad821b789492d1dc174356cd06711ebc9fb0807904eec4f7ec537d50986c19080989b69670633720e60297875dde7ea3d64512d0d5fc10a912291b137270547e355d2a6771027421bfe1bdd6340cdec9938ad3ddc0fdc75b788271f040d9a3f59bc620f380b6af670ba66dc2734167b43c4868aaae371096852626eeeaed2ff7a28b404386c91078331a515402c641ee3b477c3f85f314e0a1dce31558f5200bb276315e6981c0de9d051193c9e393fff64fb5a22f79fac4346d506e73389eba334d9c4c1327e721b32f5588b1df856dd728bbdd9211ebc7a6a214002100d08a8dd928166a02acc7dc5fc439a00441c2449937f898030f736041d8d44b93de0529e27ec3585c385a7f5f06b07f98ec85a76cd1f928968d4fc81243f0da3af1b36d30455bc47bb36206f5c4f537e4b13f676730ea29148ee347dffe5eb43d311bc28a26e795a84465d8eaa60eae30b677ec53fdd285c339b8466eb026c3e4c5c591b9c96eb52b13ed5d055305cec423b59ef7dfba23ecb7552b88024eed77d5394086d5f80b4c4981fd1074e27ee72182e51d7fa9ebd62f425ff59ce01c3d8b0039b6f38e7f530eaa20d1b0aba5e2d864298b84a7c5cbca084b7d25e3377f0da1e214ca36f98789ee2e12b06a2dfd6fe5d20a97bd9911b02e56e84660268583a4a56703fa6132e3d88f991b26fd800e8d486260f14ff1083ce7fda65ed1971692e97645e29f9a43edab2e9ae8fdb3dfe3f35b864dcfb3fabb6885eee520fdedf1150a39f59c07d2b7eb9bd5b715de076f3cbdb2d9019fb0324049c5fefbfe324c93eb863b3ec3b8bdb5a7739b2d48b1b9894f8b9ccefd4f29d70ed4af4ae40a28cae1d5bc6e151c8772191d9c2d3a034a43daba9e1c140228959fc202f5f59f0f22b4ce811544269e8bba7ac3fdfc25a9d326e6e7d52defb8e2c338ffe47a1988032b1891199900896652331786d6405e9ffbb880df903e602641deadffbaa01cd5105cf4645ccfd06da9efa0ae107cf21121d870248518a9c9e25b142fff5a51002941b3dcd5befc078657675ef100ec905fedbf8a54a51a336e583c5a8f72b2ec3f70d56b4bf2949bb212737fc2f5d4837f9f75fb440c3bccad7c2e69b30ec402199062f808962093f6c9cdf7cc82335447989b5e9e7694fd6670f145b35711a8814a636a52d0285618247bb054d08f6a807d399aab0aae2c63db8dd4d77420473d46dfab72c8354ce0ca8790a507732df2f95599b0f110c36a660b00678d7948162bdea2b0a8cedd1864f881064e640564b2f942f852422844b972b0aacca511d4a2683753957c718699d76abecdec5a9f502c7dca56cdc5b97bcacce9572b0c3f528652a5b9c670f4122b3216ad92946c7cf7326d24380090541b3b6c5693a01ee43fdbec3c34422877fcc35616de1b91de60492ae60b4393ee6ee77bf266343bff9cba71464e4fea6f5304c62f5958d61d72ab49c1cff588eecab75e522a325c4ca3d87cfd9d0004a237ddad218ab105e1323e12df0b7d38ff38935ca06a014a725e1b548ca8bb3cb9b0365513fa8fe4d4aaebcc6847456bc7bf63bf01ab09cd1ad56c4319f7e95c5cc6f7042e2f5b3d9ce19bc1840bb4e8ee670fcd9f77b2acec0fb48fcd13f32a328209039ab37bd6e1df343759e032791d3880cfa25564b18f14d981cf833f6fe4eb529a7e0e59774cad9f77124d27e4fc3b9c0c32ce87a2acecc56148cf37f21909bb1002c65bea8452c5c9d5dbfbf232774cce75698348eaa05e775f80427d7ae52caf5065ebf632d68d74ca10176b68f4795b96aec06bf2368e0a3d1dc7d6af868ebd8d737062fe42dec21b77e11745bb09fdbb25a7d36bb93b64092e30c65ff5c783e47652f78f9da2f9ed95c2be72d3e6f90d579e47fe2e4fcbec3ce4153238c1497bf8f87d8eefc0626bf423279644f69ab3cb0e91539fb1880ece4b8bd25962577a80ccbca2402045ba1b6a1b5a172327d5096077111349e3966ccdf0e45f94f40a97357b7499aaea05920162665353e79d9afac2e193ff23ac9ed20b13533e6953c39b84ac01469872e24ec4610070233105463a6a26bb927aedc2a5043c48ff7c8f669df181dc992992bb09f3276124b9d2aaa655d4657625e00586622299fbad80ff8feb205433532aaef8c5cf0e2f5e8a90cf49a5e518d8000376d30e1ba81020cc2143e696af1832915a7f005f8f47b45f7eefa223c0b9d3253dff06b54dcaf6361da1db8a559f33cbf7c9c23c8a9ed87f79efd208b6f0e3d1a290154f31068aa649ac08196c11b5c497491e8d6a887e5888f03e7a41a6b8706f2b40d29dea65826f0d74293e953ee402aa1b3a752f2f52759aec62aa03d86b6a7a9124d99e0e33556c27a311545893ff92c22bf4bb72d50796e6a93a2ecd285c250f2e2d4b0d22c46f2a702e768a3958aa1a492e54d049058c343536501f110cd4c2d8e119ebb683c18476dd225c3ed3992b7a6d20d0163823dcf0e990548d442eb30b3c2f2f565c083d9f6580570a3907fda7f74afaa46804e8c19a17f603cadbe9ad87b6616c15ed5ed210b90205519e99b916f8d65b5cd75f8f900c8ddd67846ca70bd50a5f7717eef724f5e698e50306960f53eda4de434a4414989f82e3d145e20db5b1974a2ff5f5ea5b8929bbe14c282d82c6e5b4f0b0c76ee3b65a06697b45d87dde7c56dc7cb6aa1475229dde7455b7ade987a7879900e61459cd98f516b7b356197662c78921ac4732e951a28407f4fedff37fb00ed7c4541143601c1f22e568ebed3897271e371d46e89fd687252d9b2f90041215344fca642427879d6db7dadb499ef55b9594be3b8551228297abac61c5fe56b9ffd09fdcd8b5dd988071d572f25d892f6e0c51992a2d2d7f45b35afefc3423ff208ffa01c7d2c719435b8036503dfaaa91e5ffe63efda0851790cc8d9c6f22f17fd4045a5a46ed269ebc04b1cb05f1d4e767efac2987229df5882c960d77fb9605e7e46ff7d8f6ca79de886bcc7f15b656dc4a7252945ccec7e59fa1b61455f6980fc3c808528b0abc0735ebb9710f57c78a37c123ebf62075ed4f37010ed81a2196c9eef37a53f04f8033b9fca486c023badf200356979be7e964df552c2d0989c21d682219f7831a91a95dfbe023f750b569175a9be748052006221a37fccbb6dce8befbf61ecb0581bf5f20ec8e0638c0fe2e9183902eb8dc5b87b9f8ec69922b5179e8db71d1f99a9f48d2926ef4c126c6ee0ed63755e6638e969834a6ea04f981204f8e979cdc226ea078986bcad52de8de3a5c87c678ffc5d720b6d256f38ca03b9ad83934986257ed7cc72e8f5b1f8d877ddc258857f528d3b94517b6492ed5523081ffa213a280b945e75f4b3b42dc6f4020bca36990e111cca81d11ed2448ee795190ed372a118b3bc0a6075ddffe20e9eef22098171519bfa88d6fc7b92296dd10951dea4133ecc619a9caa93d1a22e20f6f06cbd1ef74fc0d0fd8bf348bd3c485b53b16300d634ebc139c07a659fb914bdc5dea0794a9e99f4a55bddcaa2c9679994ea240c9783b6f8a855f60e3356069e12edc022f40f025e7eda9fba829bbb4e95e76b68cb3f5fbb68e99b4df57b63325808b07e6c278698da96bd7ac529cfe4c747add819de42841be9dea75eafa6f515bde61e1b6e831e58febb8df309f1f6a9696fccdbd71bdd01e534acf7596e60cc7bd5649a4aa4697aa12e8694a2ddeeccfb25a9b9b02840eb4a31c1280f160ffcd1030461425704affc6ae7128af047a24b64011c00143a08a76a7699473a5d274bf35ff8fc176a698f0511f538b59bb9f8af657b3d4c331a8b234fa38847c2cc5b3ae9d9ce622557c791a9c522ba5584716c496fce5cc6714410bedf48caeb5c6d2e247c4fc3afcb3475110adf5b0f82443f2f6249a26ead809746b50f3041681051b268e6b874646443ea3ed5342443ff7c79eb25d9863fcf4b79cd52143f7fe359f62829cd1d83c56287b99ac22e49f1b8cb72e95eb7a86e91ba70a7f36ff4448b82228f5e05d9d6759c33967197f4c988a6821a9e7d680cfe9b47773a4d75b28ab8e09df7b7b715e17a156eeefbd4f5406da12035420f1906aeda56654274bbbc3d0acc36cdac123ab3d77a86c48af394b34890afaffe213e3781bc10f961ceb470d99077923949e5dc024fd57c5742ea09f0e26a11c5a409f7d61ea9dccd79e7e7059156bfef3b77452e5557adfa71a4c432abf101e61ffe525004bc67284beb11e73530912e5563a1a43189b3c4fe79847643d10aeff38fc977f4a5230293229426f2b1d087263f541c5ae8384747cccd4450969743dd32dfc665108add0e22b02d6046d87a2c6eeeef480fa601ec130115489e31722b8c07c3ec7b19280b602862f45c3387e676d4a56f4c878569e0b2719264540b7d0fd3e8e1415864296f5f70258e5c30d2eb97d7573b47323fba73d1c48599603012b6bde9ffc321d6a4b7dd8a49bcf58041caed96687f98ec04a7ce658e5c20e34942ab7d22e3d191a4d3f3791af0465cfdc06083309b49ed53d0cfebcb26be0527ea49f1472503e8e4366aa87e70c3e7942ac8c4402495b22c814ecde883a8241320120ce921395af7519b6ee0d8cebe896c8edff3a63cd9032bc39252fd7fbebf868c266542d25632a81e52ee72f72062084b1ce79a8fd05c52e6cf86ee9533617010c458147f693abc6beaf3e9addb92706621886c0f26ac78f0dc10e18920cd9f586d3e1081128410fc9dad97834ebf57687442a54b4a8810aa4e7d80ec154846cb8783b197d0832848f15826f7d83d0fda9bc2d0c4ca53bc4bad29170e8f6618d2b9d5821421dc64f97c9ff27c26901c34fe7578fc14b3de8d6e904e90dd9b88166a801c9694d4795695f194a0a85d0ef012d6f861b81ce9c8196f81f3ae7d170f103fcb9f982fb818e3d987d5ebf84a948f63f98632e3708424134ba7607f38155141198faa32c388dcd446ac5ff671baaaa8d6ea03cc156a1508163ca2168dc19450a0f759820e5ee76e5b9472dbf6ab1b122afda92b1ab262ca7c23c1e76aac5fdaec570491fae3a9f4212ec31d5c1e574c604191852325a3d6e7ed7e46613e2a3c463f69e73bbf8b2241bbdf3f146cd59401566b6eb10c4eb9e3fa05c803ef7a115900c7f6335b016537fc15b5b21f1c95a89c854c370ed9ffeafa16e0b548c5e69f5bcd43644eb3397e400525a7bd92dda0948da23785bbf5774e103517c294287390d85350f2f71b8f383be377c0eeb893ced30535098b57136680198df57b53905087aa8bf07387d5351893b4b176d2fcbbf3f9b212ce7149e3f5229a49d1f4501b39bd77bf8f0afac7299ab117c19945dc6ed43139dbf08536ddc4cf484e874d418d1096c8c0116a8efd8d2f5c6597f9b0b23924d75a314fefa8948f793788e273f0287ba4ad37aedcf2cf7207c94ba2c95cad1f83bfd0247ef3f67d452385ba12e179a8cbacea3231a7f61b926310bba6cc8493b783498d553e8efb4498ea3ebeff9880a655b59f3d9b859e94c9a3bea99073f3fb3b09f512e6b29be01e32dac8a8e995ed2e0630513bf27d877361266236dfe2b74d9de6288b05d1b01a0c28d05c017ad89c78a00d07c13ad2e6d57d612e4cd2844171fb16a9fd3f2d12b2a366a7648221376968c18d76591faa7d4e16f53f35ea9d228e6db20d26cfaee2d4ec19876e2f7574f52f4b864ab624c4f3041a1b9f42d72c2a8e41ba3b1034f927e100de718bdd07cfa6b075924eec4916b90b86713585fb59f8c788fe874b8236d61bfe3eaee4be72c86ac8c2326786239647f45e2b101c974db1fdc3ad690a6c3bb95b480112f568f4c8f45d193ce8942c6de9a8ac0c1c6cfd9f8d2ceaf3fe42a2777a103aee492cbc598cc55bc2fd02fbdbdb0320d0573578fecbbcd8a2da548ab4df19b4ed26389f9b068d82904fda85204cd03213699b504e1dd5eecc2b1c552ffed6f78619071f1bd638263b3d9548c9b3a2583bd009140c082aa5f66cf4a2176dda8b4f9e32ab4a8037af1a62cdc736b3fbfbb0070914c72f0d86a81c97f2298096d8a02225d4a5a91e95b43bee70f5a23f95269b1602fde6f11967b650b5c4eb8e783e416b1bcba54f62af4561e695130fccf5f8aa4f1eb497d69bc6c97d781333e260787cf11af96cae520be298839acf0ba49c5069b83c4436daca5ca9c17c399fbd33d5e51239d8c142ebcaf74f8e0fd9c91282d348d2a8c2ab3da4db2faae208bb1ff0784fdb3654088195836781449fb9e7cc2c4f0c17f273ad1c721103cfd5d079672b3251e7df0959cced59f90ff62d8886c5496d245eca753e1f243b755fa3ecb46e68226fbacbd0fb659579b4556a716d4ea66a405016428432c796553e8bf642b23fe1508fc6838bbcb877e436173eca1914881e8efd71894d79c901cb1f129cb748031cb69fee183321782230aa4d37c4e24af163d6aeb7cfc937edbdc3be4cbe0f1c46d7ae7d0b696eeec0ad9a2930d2be277b6738468a5a14677b6f2075bd66f371415b88ccefdfff6072257d6f4fb2f6b21f0198c59b4d19dc5d57abc57922a3b6aeca953a20076161a930ba6beef62a5f5eeb8ec84549180af61fcc1a0a718e50d1ad7a5166602366c857e7bb8 +MD = 8835714786f54c5d5a8f304aee98a24919df5e6c24170d0603868e4427f29d0d + +Len = 39832 +Msg = 854c26f98a2df6749bb17fd4ca767e32dcf807a4a09f776180fdab2656506fd8814f396a372318011cb3e7561424c65c56a0cb24c357f4fd75c460df9a32bf0a837e08eaf81e6a3ecf628479bdfad8686bb97d16cc9915edaffeff1d903fce42b462f9417527d372da49be056a009c9e42ca8743666bc2785532efa8e07f82c73b82753655453ee765edfec1c53dfb46045b507337d7e3e78fe9984831fac4e34166e592408190e399d8aa7676b9dba7d8f5406de7e4608287aa62c52bb97ddcee97af1de0e2b2af9d912cec257c260ae71fbffb1f9a219162fdb5e677c393fb699c3d9fda708c939aa0eaeb798fc2b7596135e387020f5c4b6af974bd20f088dbfdf5e0d93306d6b88e4e3b1af999f655430aeec623102b687a9638a4d97acb6b4341a7833409c21ee1bea3b1c2910f034ea6e485060d45e1b4f4f7d5f51b0b42f588be807a7b9df524a4ede6f394498c09728d6bb1eff3dfa17b7cf87cba92879b31eb790d46b064dc67df609289ee18fcd4b1212e9c7d8ac7948eb4773ea663bea6f716f6504394936f42c8aa5744ceb035174e85fe2b09b0a5f4b1ed9190fee54eaafe3c839eadd024ddc540e894d7acfe889bbcfc4485e4187798e69a987f9891cbdae7c508d61cee7a005e23255b7895ccafdd7d1225e953df116a41050f5fd724510000cb37fe35df200bf041819d64ab34ef6bdb1249c0f4c3826e21d5c3887b0c8d1b2df9fe61d5ce50372e71a2d1edcffbade8738cc57d57350932fa4b0c99b299fe7744a4da24b234e035540f46592a082b817138cc44748cfa81a580cc46ec2991f03f79089473bfd49e526d2ab8ed1ecdee34d73c0fc38d2956ffe82e496247bce2130454edbaf9f9b19243e5d2c0457b76e3f07da7ec427ff9300d9b6cbbfa6793e7cd24f62eeb38b63d19df6f49861d62a60cf7d496b3e2b15f777c75a04b7a4ce45de178789c7af47a787f5733e89bfaa7b2125d69e73bc7b4ac372db840dd55323bf43c3f14a5b472e62f512474dd860b6a360c0fe673835836365cace478f6f8efc3072c5ca23e4ced5727c431cb4efdbdcba72db8702d739ddfca233c33775f02b8a4e77b5ada31155d9fbd274e9aa33139f76e661c0d2c679c3ec652f71f8efb3ad91779b4d049e5aa82b45e4cb12550e8c477f65e6bac1ed4823d2daa38ad62b070645f9767bbe5a69754dfaedcaca240d6f3731d8e1b49ee5c2fd53608e6c0842f7834ede8b09db9a842b15d6360aeaaf488e243bfa0715495445381d85f9c1ddff8009d9b4f964c7b29dc408e68fc8ce8de4db746631d6df525ae75ef407ee3488fcb8fc8c157c5daaf693ea4ec144f789ebb616b8dd5a1437aeef997b2ee3e31e39eabb72d688e8b7c5f41ef167f5c6d7035297646225849ea1cf416dd7596639c80d9b0bc520d5639c630b50cc41a8efbc2f7aeb58afacd1e3e50b5e89a53a7637a01fa969cac058ea6f23ff66bf0a5e86ab35c0397ef98be5ff4bcfbe6ddc3e0930bdee2ced25e220871d5fdfc4878de3545c857d1a0727184c87340e09d7fbad3dfa4c971e62b9ef394bf490089d1862c953adabf7322dfb7b421dc10f9a599426594720c5232a970434401ff1a7688568cfab4e9d172b1ffa010fafe5afb27e986f505277d3cec8666ad4d7f652f8bbc104f0cd723288f657486c033294b09cf2811ac4acf100f3de642560ad1c637640a830a12cf0d20ef18cc5636cc5beafc342e8dfeb078b99da94b4427c601365863dcd8213fe90da7742ae58fadf370799395d0ca883a92af98103f5facaa2da001a39b8cd984fd9571e795c732dd434d2b8e9e37bf1f437a9bd96e38ec87c742ce1f7edc07a599c0f54d8d65c5e00c80e6601fccbdef74069bedf93cec61aa48b19aa69830168930e9a2f6f1cdc3731bab557a11eb72cc5c7e9509f315ff7eb9915a3e48bb9d74ed362ff7f3b24f1f2561b3d88eaf6ff4832e19c6e4cf2bec9e58a86c7412030300c23cb9f4db4cb9a6f2c360cc72b0948391c1579783ab9bfeedcc58a59c0fdd707711647cb282e8a745cd3b529dfb536591d4e494974835e1380e2c62c18baa453cf51f119eb8552e421990a89619d930159c976475ca5f5021b60d34e93d1487f832123d07b8a846d1ee8857c7d2cfec045f968e83f9c351900b25a27cefc13f950e6687554888f4da964be696eddda24866099a2b9d09ef6d569c34e2675975fad24377f1319d42455700dd6d34aa59c8f91910d47dd92fa0df9a72846e852f0fc5d096413a9037fa7acfc5b36ddf196c60ed79e562d91b11ee46e5c8cbed77bc31366bae2d09dbe246e124d06123ea1ce2af5dc814b4baa9cbc81417483854e95c9c7fa1d1af37e3055e852cd81fd5c0c88442e45b10144ebe4987daab0ecf7e8f2b5880ed2b52e6fd6e6d2f9a7be1405b96b2a1ff9632e90ef1c777bd19ee63120b80b44a2435d4783766416ede1784e00d3467c7ed1b6304e75b5846febb812d637fa6b043e693bce4f7ca1df07d75a211519e7cbdd7a2e854cbe30e683ebe285bdbbde6306f0d119ba932705a1ef9e8c88faee6b06f90025fa082dcfd7e034a1d1e60b692d728c18402e12cc4fff9f95d7900cd6cea149931619c79658339ddcecff9e61227ce13c98c3f1cd52a5e1ef694faf9995015f6f19698ae495546279977ef3f5766e64e8fcfb50736a60e9fbc6a0532e0aa7d62c8c8e04151fd1471a49daa890a9c58bb0152a9b48f7bf3c4d6828a3fe9ff3323de7edbfa2482890217c9928cd2d20ca2449d84ec87b2f4d56c64efe95b571f815a40f1a36bec8f241b840f0f580fe94b8338af77c651f819a8999ef8deba29c664968a02cd430d1dd85489dc435bd9fde4ac901df563e9d9b0a8fd341c31393826090ee1f390ea3675c468b93cbec4018f7f91a6bcedae5dac197664bac33721c520e50684db10b71a59146feb4190a0ad3c19d9c2f92fedc5756f5263790bc76c647839292a66e8f19df5c6f7eb261f66688f7fb08e54d1224252c4bd599d73415b2d448a87d4101f17738509c56ec9e18d5d602db50550ed0b8683706ed56c6c8f6dee4ef94279cf4ff776c8d550e54732ea44e2752ab34b55735725bd9cfc1688a1fe1e89986927cee75fdd25b5babfe09ef376d6ab4366aa81078450d86967cc2f3da13dbe294f1bad09efbd8391721ee13492e070456691185d342e73fc86e58173801f9d0170beaf3ca7a3a4b288741bd1de9c61047393a01fde5f53fd9c5bfd6762371b38b24057bfade1fe65286ab490011167c7b337811629ec62b4d0b40de3f08b21183c280c5ca87f7bf27a89143aa44768d55105230abedc86684b7a18add22698e737fe35d9408302a0a758a4976e474d777385efc34437a9633434868eaf0d66eeca4b3cff1ef77ab9d760ca6e0818fff542404b086405b2ebb46bbe4e2f4a75751e958896eae2cd833127ef8819c26597e5bda0a2c64f8949f3a62ab5fbe3abc45a6781664b4de247de377cae4a4e66a58484575a111d16c5186d318bbbe3f222a7468f36ea3fa14c0618d7a643c3ec66491ed6f6ed7541a64c483b97164f31d92dbc1ad06fc0f2dccf506a38ab29de235a12873e0461f236b6c0b0a2b531502f13508afa81d8bd3d64699c2e2b892324dfe8d1fcfbe811bb7f5cf9744090366d828b477dc890eab8ebebd44f6aeaa5b101291bf67d12867ecea57cd55e75cddaa1f3b921eeef61958d5c7c6211544b12e75ccff530e839c7cc22a28db7e7fcc0991249ad98fe0b1c7146fb30c7cffd8ebb0954c1bc7112dea05bd363f4eeab6591705deb70c4ce95c030b9813564a36ea2b81222cab6fa0a74d87821bd92c212b2935fa11e499347a1a31e1c021a26fbc6f271e002bdd7946d22f78db9dc2a0f2405b5984a95437b3d2692cbd7fa6c7a4f3ed9c20b9093c4b5c0ba7091d3c9a40e4ec9989bb1c479bb417d545c0a5e366525b2928e3714e2743a2791ed80881998f40169b9a40089447c47803854e4762e2e641632b84436d119a8ba73e94fb5ec81c7d24d76ddf30060581714e0e781d5e15717a01d0908f5e3a4b1ce1807c22f7d829cff2f45fe167418e197b44da080c6f35c7f6e4d9f0823833fa41596868c6e998f76d81ff3af40f0a66ada001b5866a1af78b1f744315eac2c9ee6e64a29de76735b79531af24d462d345ae63a8448c7d633f0ef3f981e89406395de552e5480105518c8bb0822833f9e3ae9452cf4cf9a57321dd866ea81439c2a65f1c4591f2e0dbf681e184810a45084f0837af31fc38c806957c34bfcfcf0ab65641374bb942a751a8b4b455324f140e23d94cc21197ce1bb03d6c862340822c5f7422dbc0b5543c649c9a3b6862974a9bba2073b64cd5dfb25c8e91cb38b966df2790c8b5b362f54a1b9e9a094a22a2c45cd2dd76b27fc1105c03690412210449de29a8e4c7444addb43a07914016953233cc55cf733c7e5ebe73827a67597343fa25e2ea5b887b73f914fa8cff13a069c195732d098c55f1f657649a92b332522e4e0d330a9025b14c87e978d18a32df9896bc1befffe68e861785f14ececfd8ccea9e6b3f0bc82a413b6ad161eafb083b68a7089107be69003c7cfad62cba5c68840cdf734bd1235987d5231ac63777fc83ba9f87243c35d75ea033d33d705183b2df2c41e0ef5107f5eeea86ac96b38e707d4d4ce5ee598dc69618b071905c90ff9bbe256b6117df1dee941ffe872f5397557e5cbd5368863cd536187978e232b2b921883bd50c31687acc514c875fde90d9bf312af9c772f9d40855a5b866cb84bde2f4d2c982c15e09dfb50725d991d5708c64af401ab6b6190c0296dd7eddde207f05e0ad3fe167125ad5ced1011fedc07251cad4c6d3da2aada9cd367eec37775205b5fe88243c3ada1df4178adb323feda30e16505cde6f89b5a9720b791928f8aef33bf00c25d9ba082777cb564b456ab2d9834bb44b8e1cb0cc1e88f70bbbff5c08f40c0bbc75872ed9603703b187861bcdaa0d7ca9dcd315957a9c0887b6d28767a5309578a4ddfc7a6f7275dd6cac484b093a0861f2496ea634a900059ffecbafde025bd2de1afb8b03f22f576b69b2e21f55fa1c54fc266ecb34801dede09341fcf5a17387ba96abac3a92981a3b06136ac5d4317b47d76fbcc2fb29072478be808f18a34859782cf6b04217ef9c9c6f6a1df929ebc8fc2977d8f3cfa236e6760733140a8663fabf41f7a06f51faf0469bc30b9e1cfbff1c8aeaec6a15a457290f964611c86698b33c754006e7f2ac497e697de6956d6ac9647d6790f7d95517f80d014184ddfca934bdb36728001ae89055b2abcb79d9a0a304d7dcbf626af35f1bf82252368111d9354d1888afe694602c5c4645cd9642b515bf95d2bc032bb3577d3ca70cb08d7870af83905e79ed6c61dd4e9ab55b102924a154e862b821832412e909cd156cb1044d40c5985f44238ab84d10ed82a95dc60fb246d2e4854d264bbfe0f42a30114498d89efa014913fb6faa6ec2977ee15e7d06a4a932c78fc2aa49c31e6997f7c624a382d00a5cbc5885eefad113f152725bfa58420d58b98d90ef26b84de4f31d733a27c6c50f9b167d935b8582a10f863ed5f839eec958dba238923e61a791af0724e45adbd21eb9c93ff77c6e2e972e8851fafd4189fc5150be8c2d2f6031ef52cc4ee8b934e5a6eb3d551220ca87cfead6e708c02af2732ee97b11119f7272d8c8de1ce7b85e827613fae365353fdeb8dd32e8c52d09b58f31f576b2d5c1ce1b730843e1cd07c0ec7c6f6c85cf4dff84fd6519daf0709d042071ba7d73be459d83541a31f36fe6a0af192a1d292096d18ff4187c15e59e304d7678fc19b69dd15257fc42bc057845549e8895b36639213d7661231dc73d66118a2e9938492b59687a56ae9746da4ce5561489fe7d5ae65e52906a78940f48051337ef4ff472884e31d5d005c29119d9d65a548ad470b39b1f02aca6ea6848a0a84168d12707f07c24e6519807315eba95d69fb90a1efb5c4244743928ecda6cbfc7906c8f60346aaa04adce634f6e002af5c6299cba301a52e25b9fee118fd1d036e0626bff96a267bd3f09852fda32fc54625cfad6f46dc748cd5b885adb78701be3536b4ac9abb47cafe9eb7725db806efec3b309aacf260443fca64d4fb925e313dffbd63fff36cf5adfe499d3526d91f5ee33a6e5a6e59149e3b65d5f1c4838fc389c365c155521ca6c2f2c554ffa89d23d1b43179d8c6c69b146ff7c2a8d6a072ddacfb0769620991f29934e1ceda32e40d872c30b91120dd5c6c8496c3c02cef02626df9b80283159426300518d7a6499d99a7a898a1eb0d1b43c2949faafae500cb03c1c99b51dab28002e86706c1f98bd4ea08fddeeed25adcfae5c3fad3fae0d1058424963c895391f2b142d14a9ddf1f3c797030f3d5201f73b0b71a7fd6a95bba6d52590cca80404789329f0bdc9f61e7237affc0bd75f4771e0470c62263506ba1da4e894440754b97bed9ca5fd584312da2b31f3361434c5731667086169a604b44dc7aa09b1844046ee550cd886f63c071b4d5dfedf43b82c66244a9cb20e191196aa98599127bf7ca2c65cfc10ac4036e6bad6820ef8cc84bce0b348aca369be062dc9c434938995b16d00d873d9e1f213e6e77031c875049118dce5980a692212bdc8da0a6c311a80c5b2ee2f0373b1296dfb39c63744348939220422a7a9e652d71ffb81163883974ccdbda0bd980cadccac5f5ad9ac8cebce2d24cb0fbe632d0629a9473612697b7ecbb7876ca16d076f55416e0420865f4448b7ffa6e93137c79073bb20512493e8377c31a5224acce280905e6b42a94a382f3e4f11ecc8d997ceeb5b89775d77059b6c4ddbbd2e74a2d8ccca53857e43162b3827b52ba2a8f34f60b6b5f76cab4352181a84b4a0854cb84730716b7db06ad736281518571c669c844b5a53ea974e15f04644cb19753c99900f39571038a2ada8aec6454eaa7e30c687db0f4fc17231955f704321caff0747d50feaee426 +MD = 68502da2e5988d31d2c267933e810d5197414758059c576573cecafe894477c0 + +Len = 40624 +Msg = 51733c84333fbf86c9e5d66be18b5dace09183cc05c72b33f2de923a681d32835255e78b05175182c624795a8c25b71e089dd385e31b6ac747b493afa0b0c3f1a484eebf9101ef97b5ca2a5f340b70b30668237e3f349ac793e4c6ce19c316584fe799475f63636da0be31a260a45014e1dcbadfa17a83dede5673c05abcf55e5c652f4bf7a673ad8ee8d64c98581ee9a1e0e2d19155ecb231f2e2aceb0526abd2e8faf5e233e8ff88306185658fa4d94f5be17c982d9eeb93a05bbb550471e8b957406ba771890a957e19744db1a88df13700073d6a62320d4825151f23a0bd19994ad5cec72077bdba4742da26f3ad925b879a0974fe2fa6d289e1d1c979d1fb98605cdf9f73ed08cc331694574de037afbe5f83b43a896626cf48f45dc6cd663bca2863604c157f9c251902aa7dceea1bec7b3390e0e8552c3f710f494d58636acf60e271719729136573ac884d20b2875b19a171b6f67ccd2084aaf4d71bf90db82ce23caa1a0f173a4b1a5a837e98db515f56c08658e2efbcab4dc62bbe300dcdb5ed28c1463791eec9d586e88fa2ff1775d9e316b98f7b590c812713e8105056238a9d7cc5ab6ac717647644fcdadbf584b2442ebf8c5a40cfcd7f5541a2bf9b9e4203a53c73880e5a4f905f6c485832b46a499812e072b91dba36ba72ed42e44d9bc3025695d50abd1f3e0088f35c182c885c1b5b93ad0b1ecfb40a23f9c278581f435cb91b3805655be7f1f8e3d0ed1594e47e42aef280f994620dfbcf25a0e856ec7a0d0c98457d8bf2f863209dfa9616498a6e38285ed791a68aa37655a425c72626fb71df132b37c9de72b3a987d897f207883939eedf4fe94bc3f638cc36fa5a262a51f4b797e8d36acca3dedc039f49bd37ba0c783a5594160258b85f4377ee4344b4bf79eb25786619f823403eb4b57324c189440f2b0db408a3bca776c74c45eea328a14c77209803ba5ffdb1609ef3f7599899875abeed7edf2beaf571daf4d2241776e46533ca30f27c59852a6c03578721c1ca690d880c15ef71e8fd021898427441db7719c248a8619de29a886cec550c02ffe0644f594cef8478f32b78e802274a59353b49f4e2f610ef3958f55fca41a54e482a080e8c136bccdcbcdd686e18d98528ff26dcaa23fcd58e456858eea9f1e027c77cd2dd436d0e401f0fc38d303687d7ce23a707d0a7bb22b88c7eca2a30dd08a3734e4867d363a5bbd69f6755a988ca1106fd02e55aca7b17287a65ada86d7026b52ad467e6f595f8faa5057079b08a2e9888a14a5d2a23cb05f3c81ba3b6e9b8090d8a2bebec973e427c6e6aef269e8fa1edeee8f802a23deb92f95a67e3fac1389f709c2d7034f577ccaa2953138e9ae9d7f1a5737a7ed4a1ff02543c1a2ca90b8991a0f3a7f285613fc297ed9ee3b937ecb16a15bc41f7f1e1eaef6c8305d84773f22084bc5c57c87bbd9b04f0245354d4362028ed7210a1e1ba153e480fb6b7049d0529d5f7d17428a31ce130d9cf093888adf2389a867aa679adf98ed2ac22e599352a1b4d5c2def7d04cd878b971cc0b0fbbcc340c144d92f9fe680d5204fbeee9acfb5e561ba78523a0e1dc1125513b5f0cdb6ec29c721e5d34d43a07b0736a51b60cb4746e46a2aa6ec1903a87eda9f766f3a2726ca27a2307602bb2612f5c49f2487fc75736d0d30b1a3d9c15dbc7674e877772017926ea0a8e3af8738a45610640f8b542f2b04c0a3e5ccc5bc6243d18194677f740b510b2c0e020841eb6055688b7c4ddf49163e0c04631c61730e7782b97cabaa3a54574bac3f10f471ec56782458c64d724c92322b272f1498dd4d3310400c81c67e6d4ae5eb061adf01fbdc01a5293f4caca45e809e649f79ba3bdbbe3a0ac058d83574e090547bdca82cdb4ceedd7e7f415cd72b5224c9bdac29c4eef20e3197689710c6b561df11e8d1be2ab84ad2b410a3e755cbd8590dbcff34c6f17e9a2c387c65bee3950e25c9d2cec58dd80293235fd4268fe61810f0a5746ebec4c4be50cabcf1a158cfc153175045f4efd8c3817ae7c528b8ce6f5204cc0fe14677f6b66b5d877712ec8d8f888fd276f71aed32da685b1eb442d1ea0283d1e36e7a7c744590a7ed2b2b30840ed2929a5891b83f699f0ff7443edfbe88e3db4ba397f792429d798c0b55533a8f60b0e87a05cdaf0dd30a3dcf8841d97f3256a14c940f1649cb26db1b329dbaf48252e8c63ed38ab04e7377bde99e40cdb9696ed33a6d0a4164d663c189b70b2680a123a20373d83956732e75299efd5cc03d389f51b97514aeb0aa662348350ca2c420771d55a2903432e96110ea16128ff98a18a19a60a9f2dd3a73c9f9418d30e367ae5520f09d30d730e8662a96d96dc6e9a6f1b9d2e877859b4e41723693712881ad717cc848918b8b72f2058298a4ccdfb10bbed3b987ce5361535a1c05aeb9f5de39133479a17583677d24e4377a32f3a1b5506b0468e3ec13c95afcca2fbe4ba8778a3b18a6be9f30cf2fc39d3821aedeb817a3b163eaeecb6a19ddcc3c600c72f18ce50de98d6833b0cd28b425c096d0dcbd82a8c00cdff3fd40c7f21dc6bfa670bf3b40b20b65d9e8a61a638b3835e0e8e711d2c77049f24b76c224191aecabbccb4499495f1e8a3e63a192b0b01374a63f5715c03fb3301c64d74a79811be99d590901f5b31baf7cacc529dd51b6f6dc6d5c5af2a0a61537b10d4d8625d5c8db11905eff2ce5ae68288f115a43a8cc5319288aa6bca90966066d13852ea1b03d9ae39aaff403f1cb8006306fad7160d3eac48b24ba44746f0bfd85c1c408098d9d0a9b4d33fdde6c5c336f64b7971824883747b4c3ffbe1b67c78b810d913b91c10b4b21105cdf15621cb6808ba45e0d9c89a49eff634f32c3d30e0c34c4ae12aff09073b4a65b8c3dcbee0d4e209957cec28c2995f78f7cc627f4ab5f29cad70ec1548a4766ba9a9348fd512b9130cac5ebe69eae43e7c119cd27a6b749f8aa87847eaff02163070d99cd9548818d2e2a0c9a4571d0bdc863cd8d4563ab9e51c243f62ad761c09b52c84520cd77174ba42b8f6607257a5a4d2d10d08bd726956605a44325ad381e0bdd4c3ce3fc36e9dc52af4997cb873f7ff7978e5956f63e1bd37042028e3357dfdecc2fb29752cf7988e1364a484a3fa03309c8f3af78148bb4426e958b190f77d5ac4261d0d3c624d60d7448262d2158e750c6816a12df5cb00210072c530e7ac9d4bd182f229685421b4cb8ec97af511d53d02c102e6636cf98707ff9471c91c32be8013da50743d7f406c223f0af30dcfa2e1b283372c21aecd6267b5e0164ca9b0a4181c5e0079a7eea90529feaa02d2d27783a89cba798e68a243900849ae60c6d0383eaeb7895a23f47010e284716d40468ce98398e516fd3a0bb966fdb1f64576dcc7dee3fcf494f12b9a431cda2d70e156dc7841f4e6dfbc28a8688d17e8c11a7e3e4b2035059601700c9ccdbd61e8aa79e80730196ca48b42d3a98220a6ce3da5089ff6d21bcbb7e61e5c319bc92c346ea2bcfdd316c039b2c186676ccec142e9cd29d254958a8706160dc2e5b190018d82e605a283d73a2108abc76caf5eeca4e2953d2d0176e158aa3e0c3bb9c8848f0f2ee218223e2ee60f760c90e6db7d7eef5ea1cbfdf57946314967fe504a4fcbadf41d9470896aaa4c71b18a03eb87c059e2bad1d9aa915741cc80be0379c5dbf5e202b80d3d8fc6561b50b864e39e21a8cdb2af22fadc246243c0eb41fb89286d555bf346cf00c292ff649ca878230b526c53e4686abc16092bb316aa340c397ada63c6bbb26037b98a67b74cfda8f5ed6b08f2287eb3a4acf0d1c09aa7b1a7b4fdc4b2da7c209e0048c488a108b279e0463c58d1ab4568d44fa76991eb2bcb921bf93831a0b45e2db71591631db1ffc16a7899027503cb0584ae723e62dd4d98d16bd74fc4ae008861d551f1a13a001754483329605163b72c419adea348864faab700933c802da6b58e5aeb37ad13389025a7b4f1c09b7fc32b142120f00e1d0445549a8cad1e1f3eab1cae45adb1dbaa9b6733adc3fab5d5a5ae7460565d876aa133c439b78a4869a607b95f9e54471004123408fe09ffd04baa66e5fdfd156a553eaed821dac8d319bc9aea1183214d0a092477b131b44fa798672669555d7fcbd5c8cc6e97f6e7809bd17989c6e0de17ec838ea01a89a0340903a5fb0eb6179f89909b003a79334535eb8269880c2fb81cefc22d2cd67e6b7caae95571c5ce2ada94d8893ac623020b5799534f19de651ab796cad13136c853eb74fb36f300083953f96c314453319c8432b9a4704699767990fba01065d52f43bd4ec6c469b2364c621b969a304e6a1fc32ef0d614efb0b4355231fa881c8f2236d299b047b341ecc739d32e46c2e488ef05ec81b5b249e5f840df5629f8d4258629285d3675fcc38d298f86f3399c3dfae0c029a59bb28d4e5a20c9a8149ecc1fb51b11c284c74f287d242ae21d11cd9b32442460f67b28cc00aebb9eda5f645808ba74586a221e1d9729808fd7b5b6349cc118747d1426e5d6d1a28ac486ace386bf0b8490ad8ef12a082e591428664b62cf6c5c7a1e36203f2224e86dc4f436c1613db392ba303798689ada3cba7c6436e7968587e9a50fbc18a924206ae8b64b798181eae8905554934c9fcc1c57038b722d8c21071208e03da5eaa708e90687408d6bf3a93deef140c9f64cae94add327a7dcd006fba01e09b1984c2f739c075ea7ce578c7748f0d9898a38e1a3c790408c041f69c079f7f542a99a3f26eb3e3c674580f2fb07c5c601c80b7602e56585407e59901edaf098dfbb1bc85178ae62525e0a8d37a002aec94c4eac308ba54e7bb8292a55578a5cef394b5bb1d8ea58df745ebb9bb619fc56637d14cb2ee204845e0889128437ca07a09359966044989524e7feb59e8e272fca11402143ae5ff0bc724cb4c58b68af8d9e429db37f99e9ec50d713edd1c7bbdca5bee17e5cb9577ff0e5dabff7a15d5cc6c72646ede5643703c5150887469107a4d16a139f991f04fed4e2c80f0c77aaa727ceaf02038a917b595793013c25f7892849b7c987bdd816aa7b622412b4d3ba1505306e6cc39842045a01f2011118dd340eef7cfdca85b2c6f332f95c6b7479ef589f8589b597e2467ad9bc4db8e81b85080f2c73bb8a6dcae8aed132221951473720ea02c72cc690587ed27aa3d1ce8be3bb5a7207529216da3a5e4c6f1eea9d3f890e307ed379826185d700588250c920687981347aea4b3669e2f3a911a051c02c54cb5308759d34732c875d666cbd2c8b2c29d96fb0c88bb221d0767e1d15677f600bda5845313fcb6568190a5ce886b7c4c45cada02f48a77d6b4dd0bb589416b2aa7b3f52fee1f2f43b11cabbcbbd62e5f944b102e00bbe681c9595f58be476cf0fcc1a4946c99e6b68de3403e74f10f2211826837b336b747ce45a663fd71417a4339572b965023d89e4d2bfcbaa469be44d5a9c616e3324f4c08a87d4ca731f10482d79c732d2ed06bc3369d95d7825ab5ad9a822faa9fc2cb0a2d4fb5d1857dc804ec8e0b184ec77cab27ca0d72a41fed730514087445c7d1b3fd813fd7864515275da967facce55a6ec72a2b5d1535738db023a9276d87e86bdfbaf2a179727653f4968eb9f0518c75de66f6811dc3cf65635818ad5f29979a9da2d718a92b70f077fd883f02349a27342577c406f18a61e85b5fec63d667a8fde2f5225d998d66af855e724ab50deb9010b40f16e92beb06d386cec1b6defdc82255a8dce4541d64d7173c10fd6c2bbcceb74b97d03a6a8468933ac0f08601c509fd936f334d7e5e9bbb849b333f4e7e08885ecfd13f462bc39017a9ade71dbe40f7c95eae01ef6478533234800fbc9f662d320711c3e6c38c844fc41487b7796f4b34f17ff7d94016e62d230c62dce78fb0ad86bb4eb4146a78c9594ef039c03dffbb70cbb7a5b81e7c5fb0fec3181d2c18b996f56617e506736db082aa0959521d4522bdcab995381daf237fb7d70be46e3d7de79577ff087d2311d93b910c57acbc507ab77f9e0bd205c3b6c8827760b92084bb623d2b179ed3c37b2d37a3f4b507422d065d9d40a249d9cc7d7f2a48014cf39655cf2fdbdf650f8f0865e4d03f0e40fc40bd587e9663ade85e37ec434fa812a2f796d3fe47c13d3d5282999452b9920fec06996eb53c8733f41284f9aa1c2807cffae125dfd095af95f688e7f6f07f8f92a026b807baafd5c679bc131a907fed66641ffaae785e0a58287a72349b50a4bbf3c70394c66cf55dd25a39a7ec5d7b423a5725bca2e279248236dd13a24e75ee6746f7654908bb3f8627125a180bd9ede54f4e11376722806b86cf9cedbe2bb3646a3d8129c950f6feeb473afdd130efced01cb61d362df44b30f0d664ebed9252fa7df050f8dc0aa16e7f4f81f6a8ce5ca137b23e97c3088bfde9c9f01ce41499bf5ebba4dc8601d67763a28dc46814f68c480d80d10c4591b5627d779838c0a18189e90fbf776507d09b3a0a8199480657f7cfcd2e2f32c62002fbe2a8101ed207a68278e7d7bd9b3fce20de7662f3f3cbeb010cf454589205724a1a9494b7951b5c8fc69dcd92fa8da45af3ebec9c25b0cdab256ca53d5e2e5a7206a4ee1250835316e329816b8c82c7f22f285ecb04ce44d3ffde476b9061607c8d2043b86d083422b6d31cd0b8e5dcef7c74e109f8ecf9838492656a92672f6f994fbe2f5272a7b827e3c649e9808e5ac1199ddc69d493c29bcf25c0ca086d53117a8401698953e21ea0a65f8419823ae65db9cfbf4cbb992cdfaff7a20bc330dce9c0b51815e1a78354e599f2796397d2895e67621d190e20082c97803ad80fe4e498d4c9ddf8103e45aa809b68d77a6fe4b32eba0f542c5d93c426ce5b55f710b334e5e3aa412338bb1e9ae7ad86eaa4b8e1ab30e915f8ccc89e2ef337e1f1489dbd70ce4464ea570069723f121aef594b0f662a75037c55eee3365796250474eb5bfef173086d845bb28d095d389176e766e81179c7bfe14ebac76240c8387de63516b6ffd5b3a8132175ae578ad9e4d20eb84ebe08c956314c687cfc739549d3744084af75c4a971e0b197c8b8ce89542e5e470c6fa39eddc1a10d93ce24c1fd3f04c44c8da871bd14c92b786a784eb7ee6366 +MD = cd146d439e8d4d5736bba7664dd435521dc9edd2b5d9475496a44118d761dbb3 + +Len = 41416 +Msg = d1e0dbe77c8351adf3fd7d9822e4b089f2c64c2606111fdaa830ef1c03f756f59241d1bcd8d7132552949f7aaac795272dd9cc7c7f3022af8d521020c44e82e18158e576c8b381d938d409c23ec470248ac6fffbbf3aa5456fc18e4e46a2f631856c409cb2dd42d38e03e4f848a1e989f0d40c2a2ef64fa534c3902ff1ba5ded88c609b6001eff1b3d6a57a42f27a75d494c1c91352ec9d6c6a13e492e605d1b71af694d193e60b72c518b4f5b1e53a87c7656b93aa8bae00ba3c127635a9ec5286d88e865050cb142ffa780344e9473719ae329a72dcbcced10414efa71c9f294488d0f4c3bac1169bed4c0227e13c51000ea69e285a4a15332e548596d86ab9f8aa04a36a7e7dd88d43a968d7878a641f094025578ec67244fd69bea167cf73079eb228b12661f868a008add026a1eecb1097b66ce4b264ab03cd2133454de305f931eb344d1de4d284f247ae59136f98c705c7f4e6be7ac9d3e723e8eb6688582c3c71705cf23c4f64eedcce996f550c9f12e07c2f1b1325d0405d2ed489e182ba1a31d1d08f5d33c266c3cd52164d9b0b67866f0888dc43ab7133719b587d1a1553c2e53255c6241fe293073d9897d88e4c203a0d6824a7a7f22d4daa32b982e081ab370ce60594effad1189676e229ba695489c8398ac6683bc13f8bb935618e2c3123daa0aa0ab507f48e0721bb12f22779cab38d7d246ec685b3aa4c6f1a80ac1b57f626120a01b283b40a396138d80f367949d48a562e1af156906cc5326a99c02019d6dbf75852e5470a2e92efde98e122059f20b018b17a74d8bae62dae6da638a04376671b81bfa3a161cecc685d2031715deed6d122a7aaed973080bea053fe13fc6fedddc769464a83534327b46a341781234ec9d70f65498232c03dca4fdcff5236d0118c88cb7ff3eed87f4725a652b98c6c75470830771c7b608e540071cce549d25959849fbc43e010e17df914dd5788d4660b28a8e0b668d632d60c490746374917b6e33f89e3e570f0d14aebf1fb870b0e9be71b210089b5cdb8c9cf28c57dc8cf1d2b2753645d7d2fd991b84b062564f161da23b25b5c73a184df70cc139bc601f4d2e3c335b699e10f73e64327d2969105683f1f476f9470b293da4b810fb532e660f133e88f5bd6db581264a12d047fff17e9b255219c9ddaad6831ce483ae46a6bdc3ffd563753e5b4b94a22833310a76fa0360521009b5582b7193be3bb98e94a1141d499b0fa8720374e2c73a6e596e5fef4c7dc44fbcbaa236c5a50bbb2fb821cd41ed86d2d581138fb2f7cd481561142891db1ee31958a4995ca1dbfe519aa6b812c70a08ed10e2adb8c1d40566d58376d874060cf5ba9a63fdba93c81ac3999b39e210f717a7d8969f2c37ee735413a0c95165137869ea5c52f91c62b5ba603f5d4381e97ccf5d110d41de4b65652c700b792140c9ecfe4c03655c144807656c27f44324440fd9e7ab07b164639136ac47f424db11cb3cfbb8063c25fc330ee93efc40f196f0b4e020869980965e991d24cb542c778f0e3118e5a4dff8c5c5804c635e979af956c414c67ce92656be8b4b059b7b24bfdbb5cb097d886545f1f7f63187607ab2285b31d044e53a010bbe63aae00f40e30a507a7bad696a3bf917e66fa2925ba3906d1cabd7bdfae6e97d15c30b31f28305cacd411eca303047a8c42597766855f7c1805f1fb98f8dc19109560329622833eb6b65b6f3deac427237594e54c64fc62003f50220217ef9c3e66eb23fb959fc7afdee5f2b9d35523ce815ae74a01963524d746a3cd742fbd95410ffbb1f9fc8412ae500bb9555dfd07f60a11d1c3c381f07e43e53da602d9bfd46d2e4bb81ff069b5181ebed9351f4a3430f98623fab4fd94d66ae5260f9d386171303b6870992f73ac903ce771171fcc4de2e9baa26a96ab8c99566cbc6479a8caa6037394fade7a9c24b5f8a850f33eef724ef0610f6632c514f3e27fbc0dfab80436720371e13a4530bc9531695f0c642c585d9d1fe6bb2e52603ff0206fd7e7bf46ec32aaf2236648a335b2ccdda56a75886aed1892b516d60ddd842e19d0d84ba73aa9126bd64de11c628307d9aa50f24190a775f4b11d246f33c2319675e84df9e5ed24c8b38a7e8a944886ed8bb607267772d4772fafa206eb20d75027c61a9186657e935b9a85705379e683ba1848a987c5b0b4815ce3675c368bf176c0561094a86c562efc9a60287d9336b5e61b4d3a26771776936cf31f59cbd4d37564e9993c9a7bbe3f31cc7bea09611fae138406fba42a4fe1b35cad311384de63ebaeec88759e79c0c027d635d5ad57eeb5d086dbc4579dd63ae67e230f7be81a4eb337127a18f22fda04bff77475ef1666d5324d5449e0df88330ac5fc4490e6f2a8e1713485b7eaf3e5a195625555b3cae481b6e05bb96c0fc4eb80765969789bf2741b216f2b70924d23962bc61c4546910daed527781a560e98e91a34c23d9f227776cd2fdd5f29adae803d42b3596e5d2e9bcf17ad58ef928b7634613bb470bb641a94623e154e79aaca1345ab5ea6cb7d141aa6d9a620d34bae7169566bb51fb28d1380de216543b10a4a5974d3844e719e647f8d90be5351f84db772c1d0d1fb34c7163e02029e59974ef8a0468b68949128ec29970c9526fa15c64155588496b83b9cce45aaebfd179dadae2620ac6e92c4974e27900b331a862022a4c07a2d6dcd7f0f4ac2af23f1b2e30ef0e88c5829e3eb5bc0ed481ed00b5f972e8d5527ec095781bfee7a56bc3b233345578af9bcf362e30178be42b111df2f5123980eb98b90c5e382b01ded72f8cb81d21abbd27f887457c6e0374436295bcb37a55a3ca0c53c7423f2e1fc16de28350cce26f0e4e670425c5074ffe4b89ceb1e1f830c056f65d046b53b6e734de9ed4c17b39ecfe7673fbd81745aaa17734f6b6911ae05f9c2866f6992cb34c281093489fa329d15d9de4ee5cddaf2c06f468414ae794eeee31512a27088b7c67e173a976362d8fc487c951fe9f75b4df18f1c9492143cd947fab4d26d2d98d431a5e2b27796100523b934724136501a9a77898b64f54c2351a5ea8bd13044866c23b17dbf52bebb0c02819f6c2e5da0daae4f4bafa3196790b50831551747275e1f2b5b930f41a861e720f9d335e09b3281f267da941110a596b26551791d61b806a4deab425537b5d587041ee39544229107526e4ecfa8d0c95d8a6eac33bfea58d279509245f3786c186097cdc8463b69f2bdd349a1bad2db8e230547268c65b428be3b55b0663a197971e64b161bdd5b48fcc1fb33a10c3bb8c1adc06261ca771c0fc42300fa7b4c1eca82e1eb2f99137e8182f9f205ed6861e8d0be73da893020f07380d44aac927cdce638d41beef107fececc795406f01e0b0677d751126dec02c1d596b15e7b181b88a65d4b5f9289c6edd91605d94141aac7a3196ff68eb1b957b7c4d8f1747528f2b0e3485b66586c68a664b5f50a713a8cc69671c62126767d9deb2c160d1867bcef029d72eb0871d7baf1ceba8a214cde38eb10d1b3ceecdc0e76252ca3766a3fc737a536af2e59b39d29caca6ed654249093c7d9b4ff6edb7ff24eb5d613a303cfff1a07111e9674b39934751704e308640d012eb35c8ef468ec13422374a4917fc54674bf7dbaa394ac967b11417bf209d357412d4acfcf5fc02d420a2dd1714d26c4f018a038b8c6f05b2cfbf0716a187324c1816e93c4db1ac745f883dc2bbe901019ab4a833cb0f11d0b25a675e9166914206e1c9d6d5158abbe8d3b07194a9db241e5b14c97e91b36a62ce7fbe76a118fde31f92f215906352c2697f4c287bc16196698d762d5fb428e801975fdaa29026b7b78dba968bfee0f534f27cfec57c6009c55c6261e0dbb14bddf76944d0c0648b910254df6c240e8a1a50299ef0d5c87f57c9b4a17cf2ae9349e7033d937260669539e8799d9d848805e37a9165914200071b95769bbfc6c92cae554c536cc250ab799fea8431e9f7dcf1985e8b7b7595bd9c2c67a50ca2f4709588f978773151bb0ca0bc8ba8e6e087c3ab8dc95a0a456192a2fc029fe91cfce4c4cc6a5b5572ad38147619c9224aeda1daa789f5a819db461ebd1b404449b8e3304e92e0d7ba694623a1955d463df8d24d333215f8171300c93356b95b848cd9f50656ce5f32d77ef4c4692cf9c18fa02db92c82a149f208cae51cd1d5d460103a7c1fec94e0e027b067fcfee4df9a51a2c1de044cb75ea54a5bd64f5b421cce283956031fce6a8a7e13b69bae9e022ed3d4b263a1684020711eeafc94d5a85ce7c461dba7045ef0874effcb0007ad7fe9790f66476481c166b5c2a02995ec029ea5aa3cd588a59ff3a33f558220848c0b395dd7e7b307d052a8c403c18ad107766597ee516425e0e997de02dbf36f9c629b057c285ebc955c805aec05bd3db5968b92b8c2a0c8fa91b4449ab48857f916276d1db36b8758adc4eb249c351952269f0264d14275371481dae5b4e522e94e65fe842fe54f606cfcde7430fa4e27502a4fb8255414dd9a8606aa8414bab532de207845d1fef6c2b19da26615c37c3ab3e07d67dd8c354a4c31b3cb1d05a5eb193cc09d397b62d7698f76e88d5f990cc21f7a3ee6c7874d5ac4c63206ed00a19eb825de24aeecd2af1cba5e6a0cc5efdf73795376ac1bcb3825ac61d959107bf6fe6fb19b7fdcdc08ac346fb5b1490b9344404d952338eb6fbe2dff9e301ba2a87466bda5d6791cfea7adc475356d8765fb99d54b1427d586f610b45b5c6a3e3c84d1ab4a9b0cbb1876ee05b282798bdefe4a93a16731b205341f2a1ac445763b957a2292b6dde0df7fbcd9747fb54184b61b2e9e049caa75e22006e250f3722c0e27cb860f34b4d92be2e8c41469cfe28bd64f4bd4b0e45d67dcf3bce8be5b9759a14e2d8f595f90e226dba929dc5d7de6419daebdb789452b1b97ae74ec5904ddb052901c93088c0d525a2ca65714df2d26c1d2a8f7c0b596a49ac3dcc693fc021b7fb59f2cd753122c0c5473221b8fca4b62bc7eb9b2361041a5000894320630ac7ea6016af56f5b7d9a2979859b15237829762545864f01b8606fe19e5dabcf29f76b28968a684e0cabb39ec8bcfaa277bd0787e36589d1d272174d2b3d72475b910afef7bdc455a3e8fbcb32a5c5ad0fc8778bdb776be85784003585fae3010af58d6ad7b70dd708f908e90c7ffeae07efce1874e37dae0f3d3382f2bb8663fecbfb537ca0ca3c0485e2de9e712d0c28dc1518f8d2478cc246b71abba8e4d6feba5da32f9f84eb5f34929430a4db2f3a375472ad6b52e8374694e728ea84c3d46aba4138dcc24ee1b01ff10a408f7f05a7910edcd7252b37e6d3d080a9ee9046841a15df800ccc529e91df746cd26450d5d6d4cc3d48be8ace7bbc0d0caba71db086076cb3eacd79a9f145b5502b46e5692aacc7c64407f8a59495153c426e209504ff269ce5b91f77460a1615228d8a0a967e139aa07049132742e1613b4f19dc9fe5576484f90cb09818dfe33fa108602032f9e0e46044c23aabb9a21fb0ce2c5ca1453250f308fdef5658e10bea2614d3b0c1c1993fb257d8b8e42775fb092e451b382fd010db0654acc8380dd1aeceb4e0b36446745b7d0651ac19c597908a613c7a838cb84c72ce02790fcdbc6635cdaa17f2736907dace5e57a098ec2be7b8ea52550c5425e96640b18fd41418f225f73492a8857e1637c72ee37462a4ed530e07cdd94a2c15234fb9e0a9428aadc4ad536d6e3087da4974790be461c2453991e2157a042a9b0d15d929d5ac850db3b6bcaa4cd2ecce0d4d803f6d514c9772592b5277e8e6262c7b5893debcd0baf9f8b772cbd373998a3b8aa8999a0b8a07502aaf59602a5c896980454ed9355d9e5d8ced719ce5e3c924e16defa4c7c7ff5d2652a6d3bce52bc89767ac6a7a9eabcc8242c9930956d0f2cbb8f7d847f662676963e9a9656a1a7ee62381d96824272ce29a5821a998a98b91ae3a9c55be3958390ba749ed935f75b59f548dc7981a67f41ca8ae8b515cd97b793f59b7c78b17df716a1d1c0701934c03adee5fa18c6400f140a3782aefc2d0418e7836ba608ca3bfb98cba6f08c2f2781464f7e8860b4e40a86638ca6c30da2db05f9a3fc09fcc1a1dfe8e727de9f026125759140f442632696193dbda0adf662c78abfdb438a4ac1ddb61b967f08e342e2f4bce30f7cfef0afb5102423828148a2a319d433f719d418cfbebcebe14caf15496bef00c929e139b39e9aba1fd5d53dcf3c6769c7c15117724b1ba3dca12e22f028b576bb7670cab15381d2fa56c0ef8ba2154370d3b1605a4b33454f831892656de6dfd86737e92ab97a1c96a6743e54e56e5f86b37d79e429843ebe5526ea25c5e3ba846eaf1b8c3ac3d5792777b0b770c31c8e032dcabc709f0ebda9b1a0cdab4c85541f4eb852722fbc266c33cd2fdeb418db254ae92fcad423a1f3414ca99871cedbdb7f6619e9fe3f02e7411a2a79d1c312ac4d4bda62d41c1fc46e44661804056035e99b4efcbfcca32b17fe33ec7ca9a90abd6929030f568b9f913e6f9473b7a5b0f5de6e3504e38b9a310fd8b1454b22c303d7b815f67189d7428142b83153f0cf2c85f42d3e1230d714b585329c15f457c90df40629eb7f1e0ab37bddcd78f60316487d4ffbe717444b85c61b1198b25b6572696e0a22efd6424b678fc88519df1b9c76079ec0c3744e0727c52641d12071bb74b817c6609291cfb2488306d0c5d4d85b0ec73da9e984a006bb4abfd559762fc27ee33465d571b6d892bd7caf59aab2a8afe5cc5f0697e70f780f613368db75cf2cfcfb54115a7746e8b8652a0d3581fb757aeb477de0528e85e4b47fc119f3f73cb599dfc8b4a789d5045ec542eddcbffa0718e7920669206f5b481f14da40d738bd8e5d7e28be1dc231a805bd3c3952981ad3d3f56291418ee38a95b664d2fbab754751a42f218f4ac0ff7fbeb92e7ffa16ba811a9d718e8f0dfa78387220b10f6d5350dd20883ad922b377d9ed02847a9b3b73641f7053ca4b263b1d6ac0a3df0640df7bb548bce7d7629291307bfca408b52f8451143ddb2b8c52d7b7294084e08e522245f982117f9b54673be16500ffd619ddeae3a93c1fab63e9ffd123ab8caa5d436af136c05bbc41ee57e94a1be10cc6e33555225797e1c2d6ad3ea9bd5b0355619ce6278f2c43cf792cea184f4cc7bb36d8ef35d844ee143037e86f34ec57df0f444ef0d841d071aa236a5c2593a57b4b3e185018772ebc593864c0aca0e65e9ef9721f263cd0bcf3c3e0823966146 +MD = 5e1a11673b4e6ee04655e79ee0465db94e2d4446aef654e6cfac05a69e81228f + +Len = 42208 +Msg = a318c9795665f308b94a59d88767ac202856adf08231a0cc1155fd993a6668bedc94e383291c43bcb411e0acca5c91240602d8eb20a55962064e91682e69c47c2a1137217d8ea087ad1cdb6799eede2f0d73ef5f94d815338dcecc82818dfce6b4192c1dfac4f3afccf4b0d19b267b8a64335c1485d2ba85cf5f16afdcdbf944a3332a3e49c5257d3b20c9b2790b517d35ca85d29c9c31a1f488d7b6e759a1de1ee8994b12991c391f288cd2dba6464fa5bed461813d63cf23d277604911ddfb4ebee20dfc49c22ba39563f967fd434ade99af88dbbd375784c35e75ab0b96e45b3f6b4cb0dcfe9beceeb5eec81b31b408e280105225948040e5f4bdb44eb2e26cf39dcfd65ab7d025bbea7aa405f6d64a22aec28f7c64937fc0a2ff0de21b3ba961e06015ccd71374856a65a4c57cf8cde0a1643aca8ed868dace055dcfb7373b119dc5153945ac01d29c776f61a962b9a4c1befb18fa9724bde2954d1d70204a8b3ac77fa9e9e3f52dea77aee4675b35f7769a786d9018daf1447885d52c3cfd58212efb24abff781bbb2f08539d2c695f28be5cd138a2b3fc5e76acffd5d57dffb8c230b3734ab126786526b8331e7e663ff34d4cda7fd76896566aa15231f208694bc75d290ac9d587e2af1a10779c942301f3e75ef56dbd56e269c58b9883fc9b90672bb588e8b0516e4c821e7fea703cb0f8a9ac4d9e8105e04e7268545861b55ab923ff0c34403ed0a5f744809182f3c8019baccf913e0a19c4b1d1ac9ac221716550f0ded80cb7d261816ac0b952ae10b9c347c26f7bcf557189aee771a4469d12b76e45fa9d223a282878888869d651c52b63705fc1bb5bfd02e74e04918ca66862628bc379e8d1a4f55720294ed453d0dbe91f8a9736f5112464297c105b531158b5f65a2a725f7befedd0c2890ede80d9c2181785a8e955f80ec000aa1b6db2a14dcfe73827ac551f23e07ca3eeba7d2fd4a32f1379007085cb5ab9e534bcf646145d94296e7fdb8be2977e23dbae70e50907faca12020bd38440cf4c0f08824ef1ea8787b1a2b43d103ff1913d840101488e9f31d9b7cdeb22bb6964121901c1cbbce8d957db893d961efc767b02d78d787e47d137e75fd48b11afb7a6b719a78c1ce0a8c8f302915d7cc858fff19b908320193095596896a98acacc34a972091b52977b6bb2c6434ca37cc23018f41350bc3ed859d6913a6270e22b22b8b5ee60a634daaadf7e5b4ada413976418b1dc79add51ed2682c7a0091e5dd9ac8a5f4360df4dec44d1df41683f47393207b6d0011f21b711e2454a9fa7e9c24d9863acc7c25d9aa768d918969d73e1b412e6533b2cd2215f59bd4878a55744628802832402911ad1ea50b7ac8445d68f51b6388e2bec91d7913682dc3f30c6b50144b0bfca72d58a004d06f21b46818b6e2d674344f571422fb8df159dfab20cac321be04087339952d7ecaf8bfd48701154c9a1a1772868de4b4a6ae8406f3031d3adcf8c589dc887f6542dfbf39405e13144f267f91e1144f8a822488765e937304cd3d76d79dd48b223b294aece1387cfc17cc104bb0509c6e286e459fcfe664fe136494f30a13c1442877db85c62aa332989d51f670bd6bee0dee53d9c39683a553e09852bdc0c2399f4df99a8baf367625fcbd28aed53e68a7272bcad60e2f98e344097d1565fe81040e2d718e30a725646cca58c712748c889b45d973c7f927660150e89d6de6990b5adfc16a4965ceb880021d560faec836cd3a8c295e40ff409b170bd2631b0ff99699009c7402d0b6c8ecdcd8176d8a164f6259733bc77ef783b48d40cffc547353d195912afee9d399e31dd9e41160cb7455d7cddadd351f6dc1b3651f0ae4ed152216d4e8ba789385ad66b7d03aeaaade9d7da5d5f2a01c9bc734abdad75feb5d02faf437e5eb7b1e843e1e765a665900a1b1a797c84e73902d77a17de223d28decc86b82e1d0feb7000a5a40e0824a6cfb2a2faa9eaeb90d7d02e292bbbf573a47e5a7643eb78301b96217ca8dccf396123dca79062f51462e5ccb93a4a0ddf4bd0944666d1ddc6108cbb37d8284d8fe8f62e4ad9f7ed0fcc9ebd90b6d66db2fb479aee3fd523f6786add9c48f688f08bb402a92caebbc73c8369764568fd34db6dd536750233087bb9ee75a04d67a672e4bf8e2f914785db1d38328f07a5af14c9ade8b15df544400056888736d2f8c60ecdbf8da77990d0f3938e3dbb4d69cde38bca9af051f2f0c77c9ea6b7b12dafba9404ecf83a32448de050f78cddab2f44d5a6d9c23059b297ca7ea5dbec8e54717c27f58d70b15f74884164833dbd6273f54215db78c2aff6a7f22ba76c63debaedee4f6d0556482ff4292da755e78df85166f74413750f6f7bc0e02517f4741e4f23a2a0df6928468bd0fa010d71d95c53dc2604e7baf987afb16e5cd6883f240a8c982fe8322642b4fd72974ea26d26616b4b23ded995c8a98d7a549268675486f2d72106f86baad97a3d73fec472dee5da0eaadf190cb9d21caf1631dd13362b1c077e23051f06610d049d071d0f0d46f216a0d1c486e29225b2a99d2d6b5362d4d14f269f68dfb47f6f1b4ff66d3aec7b0c0d9e202acc52722e15bca0983291e0dd9bf70f71bb3a9725f7c096b3ed3f3d97f92d7621fe78c9c9637880c25b2209d26a7e9d60255b1fcf3941470aaea7ff606d660d93006ef32b9ab71310577b1758c4a3905ea27fdd14e7b94f9a068c8b0f70312fa75b9ab8fdc263a3abad06d219b24e3292bc0e9b9d0b12f78a7c56a74b0b7622859666dfe7e46376bbe52902ba3b67c925fa701f11ac338703996d1cbc451d2f5639393290069fd467884e6ee668d69e3ee40d3119d304472ce339b10b260e9e42cd7a77a133ff07d71ddcdf434083f906034d9b5d876d7e2ee42330e0b632b770d99377c1706b56342c3b1d79cb5621a5de992484d056763024915fe2fe6fc209e5ebfa99c7cb08a63dd2f03111386042fe579337b6a7755b2aec08ba05ae063479eac8d13f076654d90b20131b0ffc05e9f1b11d4248c4d67e9df110d3d8cc1a1ef8a810e007b867874d74c6f0c53e1729cd46df7b21abcaa80ae38b71d35ce25b7d63feb3b44606d001b5f398406ea046551a246a1b715f309da5d3e689feb5b9e1c144bff4575a3b8dab411c6ad4c7c6eff495151c60bc9fbd01913ae0fabbbf8c8a8a0db0348b505a1e598329b8b533059dd9860dbe0a7dd1bd6d76c2971bf5e78677a3d126c097d0d6e2d567619214fede99c5d7d4705043a20ea1161efee3587db48b3d732199579a851a0b1885f2427d7dd860ea17a27a781dc3c4d78b124836e9cdde63d7dd5834ea5bfd25b65439422cc9924827fade0741e5b30aeb09207abd6f9a400aeb396ab8a025d04ec24bf74fa05435c7e1d716230dcdff45504611d87b5b50e14c640597ef6b6175c4e0628d638dfb1fdecd6f6a46f9fec27024c3e3f808dd85873fcd3152b71f52e3604d8f1c27e0587928d8bf951f4e8af0205886ef892d1e2434892bd0f1530ea6337efdd2092d9a3a501aca042838c458a4976867c688d3acaa0330710145d096c1bd7e8e1b290caaaefd329afa04993117493268a638cca60901e63ecf3dc13972d4ba57451ed750a848a05f7efa3001e1368bfb1484329ab84cf53e4383091aaf895a356f5222b4a7c5bb5c9c61b2536a261c26f5b32d1021ac067a465ecfbedea60630810e165f143a2c983d8346ac19e18df3320ee491abe8c1f8be183baf69f16551639adbd855709a1b47a61596582e856ab3dd80a4becacdc295f77774b633209ffe3e98a7d42faeeea41346988fd7ac92606828d2c218d3e0b144a8952f33de2238427655f73e10183a12023b24a2ab7321f605a21f9b7a58fc46f99a3abb48e3faed9c69286767a1f3ea710580582a15dfd03f9c3e1b6b345c47900c419106e92d89326bce705b92b5e5ba800bc1d081803ffd4885604d7cbb8d9573ab7ebf3db75c62e4502296f26a4906342da446beee89672f5d31c93600613155e04a1be582af525b1845bdc9f95f7ca84fca34d40ff6a6d82f57876c130b8b3c48bdc4eb74c92a588da17b204a6f4564d7fc40cccdd0e2cb619b2e25dcd3cdaf4b9f5f5677f4136317fd75fe45c188f02f0015ad0f5d42915dc3666a42011c3751b7972f727635051e23566bd29c6ed5bd9e597fbce7efb18997d94230dca35bc2ce117d4c98b7c50ad9c46fd94a1f9aeba0b54abeb411b34fe12db58bad87a306ac7848efa2c12c44e867134211c2c720ccd017fc0ccf2016670acb3cbcf3978519729942dc7dc13218e95ef53a7fe4c3ec53ed5e39517f45f2198d2b510dc0a7dda7772d8d110c3d30ef59da0c7f7a3ec6e5d5cc82c058464a010240b4fda5d5bfc1ea98ffa595cdfa240adad1ea10f8232fd62e2e443480376b32642cecce758965fa6b7862e54b3c2d7bdbcfe82f59cad8f86c8604995b81ff267d0302c4f1013db08e416f831dbfb5b4c6509f5ec98589436fd229123fef64e5747f660eaff0f113eaa2f5f7ad4b62bb849a3a25b01aeac01d5ada24944b437732e94134191d292b65e21cca62a8dc9afcf5df0c7652a2765f654059c25b43e59e89babf95528c01e84b0b83a39dcc5915abb79c83f55a6e1e3c823831e80d369fa6fa368d55c29c5c23ebaadaf3dafeb903e95c40cbb9ae4028ca494ab948721f89282168ef7405a7b3e3c76e72ad93cf449dd5139b6840ae6f3d1573989da2057b6d098ee84a42b3431c63c7e2ee1f3eb7fd8d652f0e2b51590523154bb4cd39c2f1746708eb5d661bbe054d0b44abf0a42e0e9f4d547810304afb999b34fba2a6dbed5b17005daa82f03668b5583ecc535be027bee22ed23a33266550c6342a7153f9d2dc304b66c2da7d80a7d2e0ba0baa89674a5f5581c1e92be3321181b86983223420242e8221a562fdaa5999a2154393c5b874f6040b94927a08bee935d891efe9ab830ee5e8796d478695726cb94f86abd2c81843605ae4919c74758704a5e85945f6f4795e7d27c6032f72013ff6e8805e04c3260a66a892b4dc2c9736e896ecb625e625cdda17e2e8cfa247ef5f43ac25cfff9550de66e4199d164db581800bc5b7efd17bb7c604ff1c082711b31e97efd2d57879eba7ef93603b91cb992f1c3c551465b13dba920ebfae89ec1902a984b44cb7ceb4f11beacda44cbe582989e1a65fcab7947df6de5f9c56c9ba764aab1e6d3a9762cfd0e58b5864d7e5f8b87d53d7e6d5e3979637a5d974f0be02e22eb83fe91c1cc6764d435fc35e692313d70384a253528edce1396dcda94c2ed9d329caada40b6075ea9cc24f9b0b3300b95f6fe7780bec2fa3c260483c8c8397631a166c78562435843f88f2d5f4afe9e90e9f9b8e3338f646e9baccf0a78884a5322c10e1279a1fe3d3b993564b1f3530b91ca7dbf5fb9b935584430fc5c608631a137f25a34b99ce015e1a64390c4c5608eff4a877bc854faec694df0dc38c6379d3a38cf4be0c0f717d6e48e6fd9623a21f693ce1031c459e86a7a9a809766ef8756260427be16cca21794a797a7b5f30b4ede15c59c83ccbce64b4be20304c3fffa6e7b40b7eaeb54f22b11b0b63d159b76add1044f1fbdda5b34a768e20c5f57c566b73f54d9dd91151c7f339b642c62fc779244eff4b7d147cb1f8ddb0a1c2f15a32a6c1b400df6eeed22a8bdc7a1f24ecfdc0ff5af45321a7326d9447a750689a8476f81da06e6fe21be78a3d410b9fc1b10ede6abe06d71c15fd3c4ca044e8fdab0b21ef462f1a13ea53bc415f32a62ddc337398713f3bc3a2cf5c2955497a6dee8cc492b8c9796a8796ab519b3d441bc85a464ad4a55784210c7c458b0525d294226a6ebfe594cf39d7dfd3bed47e70bba9e0e9b0e13248d9db25080d20f112e6f49aeb222b712b493edf31909e5e15fe48c8decd9ad4f51365dddaa243e6162c2bdc71ab421a64fff433d1d944ebf2d9608690f379467517d12f2311160dc6aeeeb86820d39764a321631d616d2def9319a366ea258fae2d48a04b23406d0ab366b7384a85ee117decf77bf0c22df5769aa6ca7947b78a9df2babaa06a0ecb85ba6049f1012955d57e78554debf2eac80c17236a87c7f0aef604d9503bf9ef6a133b03ddef5017f2ff6e12418f84b8d2967fd8838cc6c7a97d060efa5c3560ab99d1cfd5f5693f1d965f1a9456ec45dc6164538dffbcf9d6ae49c26874ca048f73a913a2be7eb49e6bd5d50eea317b2e9551fb4f87b16d7db2545e602cc1c560ca4c380cf09660bda757ab76f05b400f59cb3893cdae0be6b0af48ab2c218a64c540a7db34ba2ac2726e049613737ec9d55c721f79babb59d1e3ea111bf23ae58d0fc7d731f1faf4f3a04834f9801ca2328b11bc32de651d3d77ab59a13dbf294940ffc89043b89c5378df194a8a02e398e07d32a021f17b1bf3f24d67090079225cb975f8b84c02b97b310daf9a18d32ee41f496c8b47bb93e029b3155ee51c40ea5ca712599f6e4e33a6d8cfb646bc1d1e5dc93e245025cfc5b7545344565cca725026862d97283a27a74154e974e48c17a079bdf5f200f42a04f8c7c43b7fe97dfcbafb3c1d77a4df9a11e3388a94a4555122920516962d9778661ce57ccec492ca2b198f1aa5b4e4e91027ad70148d62d68c655ca52da0957b68f8b0029184392140892d74f894bdfa06c54f0eac6ec6997fdd03850e75ab75c4042bb31050fa69c2f31e15b969f237bb68264ca46f0700c3a201a081d562ce43e7607892515e0b7afe6be32f5e0c07f7b63b1343baaf751f5d5edccde841eead49573a61aeec6d2d531bc8a49892d181579549d374465f5db623233cd5d03dcad417dfc3902df8a69a36ab5e420cff22f43cd89ac852264354575c14c59724622ea850011fa714ac7ac573a68202f8a23539a6e1dc5d319ae0026f9edf1f093cff12766282e42a069bcf0ac480fd24c9c1939defd8eeea29012c43224cef5521f05d3830e26ca07da65c57006685eb5e4152a40ee58eb8ba60dec2e8338f71d9a8927db166c5e0d9437542a25920b52b5c7fa2842bc30313a420d337bd88c32cd0b92f2f377950e21920b3f18358eaf6bb21819ad11834fd76f85e591161b5e210d835f07c105a5fd16792360cb4f28805402898ff12b1407e704c9459a2aec20ff9773d5e10651a1252c7ba1cbc35a9e3e47fc6df3be3a4638f8331bad416957623dd5d0503d8d985e83bc2d9f91c20fd166e6b961a32f1ce5dec775e7e5423ec5f4f9a98701d65d231d4996ef20db7faddddd14f3707ee66e36fb06d28d2341ab4b53a40e09b86a0357b86012f71348342b43e301bc864d428f5220e5af790a82af78624daba0397fd19d0bb39b1603f4cdbfb614ddf1cbf3464176a9d2bfe3dc9fdc66de6e2a6609094c0c3973303d7033a500b55b2dbd010a6d5a978d648 +MD = 477bbbc835c1e6a4c3dbd83de7cfc6cfa1c1323d471eeed24d1bfacedc132cd0 + +Len = 43000 +Msg = 305a9f363034bf0d4375d193b83b4fee72efcbef491a7b8cad7af4918c563692760ee92400f6e64d6664f9387408e52da67ca9c18e1c024a7618319647c8fedda93ffdf36c2210c227bb2df81e4962fd699a162853dc913201b1bfeb5481302b0f14640c3d604656cd9ff63b80a5cb450571998c62022f2c956c24f67b2ad466f2b6a5d53a578ff0a23adb6960c52aedc028ba558135e5207b71ea21866bf075984c48b82db0f378ecb464ea875086dce3e801eb791dbaf6fce998d33beb8e404affd61cdc127ad7f4351927bdefe8fcb5d8f7b71163b6965efcb7736453b5af4ff7d66911262df302e48386c94a57348021231f13afe1e9e9d1ce6bc74a6eaaf15bd006929413b55de929707508db6c8aea0d8c45a844d5e79165222d79c01976534c5d270334054f6d934e87d27c8c1d5c3e6771f7e6439e6305005d87b3e42709d3d59a1b99cc1e984a86c84f437d7f9f3d165d44cf1c5770346d211d4ff34ca2ecd6b28549f01391d58200283725f8da9203d23608465adf7dd13fe39d2e2d4920c836e94c5b7681bca8f704616dd235c694977598abefd965948080a47e1124f614efeeabf38f8f8862748cc73d53d9603376aa87325e86761eac9d6cc9425bf620a53d6da2a5e4c0174168737ec5eee847357ddec2ee0d37d88be1fef90617a8551f7e9a4f02a7ec2e243f6d166e9be7389d95a445e9973028e4f561f4a680951b27583be2ec019511e6b9bbef9709e46d769be1a2954bea7781809da469bd44db83735742ac1a42274f7f67f08760675088369dc13b52ec2e282bbbef99f73dfbfc78f6598a197bd82639790088c7f8489a0fe18a22d3beb3a29ec2bf7c5509e55a0f200ecd26c88c358ff709e06620bd76cdb4e594f7e970b780bafb5c002fff65dfde49bf6bb2ab4227ebf2d8666617e2191fbad7e6f4cb2e7aac8b7f1f37b3e59137f2a60dc09d16ac5ca3b8ef53bfa79b29f134c7672ed1339f572edbaa68a1cc34f2cb377bcb79c45303c8286e1b8dfada72f3c2cb0066549b46b05c0f856239dc2f760f699b3217d7fc503a3f945bdf3a255c01a7a9b684a8424fc9ee74f0803792efbd14760b4ef075974d4e93dbf152f2b7a98391896ccf33514ad09c13484d037d6a04c5ca11a657e687247ed3d929c24be5e720a7b317ffff093b659339276b693ebfee38070288851348be0c3ec77b61db5cbed702898fa12bba3737fcccb0fc60cf5b1dd90bf1bc1742bc4ec9350741b369d3e2012bcb7fdbd27ac83944bc7bf9bc72412fca7ad3bc9bdf60227a4c339697c79157079be03f0d960f97987531300c9d6baf450c1129da8e0cf09e347fac6d02aaad25e80e7ff2f4d1bfcfc5652e49436504868dbf87873318dbaaa66c1c73ecf5aa8b984fc409fad959f1935e1afacbf5d495e725fd2a354d8da589430f31ed3cf74395ec36db11ee0c07c6651da89fe4c878008bb44cfc73ab97c74dac306e453b55c52dfcefa1d7801748c25fda26f98739c239d374f052e08947cf1cf7d5d91fc712593fcd135d5e2c00bd0718c8febae01376832b79b1d181f114860e8cc04ba363ba26fecd484e4bd69e3eebedb90873dd8cecf8ff5a298aad6313fef9c266f19f96da093960f77eb2ac2bd9fdf41afc07c13563ea138ea96303ea4e86a718b7b0368276be6c02cc7c30f76c60759782795e87f4a2a5a9e8fb3d35869a360bff7de247cec336163e1c72c92c7f05280e1baa09348fd8214e5d59192f9c38e4d0eee15198b284dcda7bbacaa0c06b75a7d5efe4aa19739ee3729fc0d0f6764e33eb7dc75cf21ffcaa7f5021508c7125558f733fdfa940cab0205652f10fb5ef2e5cfcd1a3ebcf1db6117bf8c44cdde02031804359a5054abc50c8f61a4fc06fcc29a799f3055be7041a85748566785011a35c17a2778bc910eb3bd5d41e5e77123bc644d7a88d049f80b4bf1a440a1b2fcd4fe542859aedb2d7f817a6e456af0a78a1fdd43c2b198c2d51010b4c5be98397a3d2bf39fa5eacfe47e3190971bebbc97fea7429fed1d407a361e1e8326313ea9e08a3fa72c506466f61b4f5774d2d16aa333ed7ced180f8f408237f5830e9ac8aaf752fcbcac699babbff11300369486801baaf63c498e78a1e597896f90dc7adeebe42cd14f6de6e1682c363897645027c7117845022bbafca0b3db266852150ee059a404c9dfdd49dc674da865cf7c0cbea78fb1d285ea834c235741e5ba4bad7d29fec19c4dd3475528d5ba32445e917ad3b8ed4b1b7c08505c8a6ca973735d0aeb999247268d6c9ae74af88d516c78743c6061dc6ae3ee55d5e0e113fc107011f500e15af8501bf63939edc7754a04433832a9f6e2b697b515f769c5d2c7993afcc1493831cff7ff851ef4713e6bd7505d8c403b1168b706933a413f85fd3aee6957346f7161632f5156c73afb46643422f9af09757eaeb2d43601c19425d794b13f3d712598f00e349db0556a6e2d671ef760f29d7ce1526f57462c7bd5f1d66af5beeddceb210485405a80da47b551a801e086e7c8116dbb2a68b0ab820c2bfcf75325e5dc68baf9eb202de9677e8c64a5a826e2f4a15d4e3c040ea1be98edfdd074c9fef15989d8fa9bbd0641fb9fbb5f42632d9703a9aee882870ce02ac4d3fdae3a86ae5609c8fb47cebf6bbed4429b29bc1603cafb43dc7eca3b9b342915fb6a07fb87f0b330699ed383493af260e5e8924aef699aa3644338cc5447934a3632b2ebf2bc0eb5c21b5be07ee252bccbe9a61a9e6230543c9a631d8fc78bd75a82bbd6930a74af9147c86551677dacb9b74823b53724ccb1ced9cdb2468b43c4e49329cd8e9da453aec960851cebb73bcbf8e4b87b1073606afd5b70470a15f1e2c974269ae23a95babf806e852572deb248ec0c806bfeb4f94e252e4b90d48dd7cf3422c1dac8b3e61b439232a355fee4a89845f99fa54bf46cd960c6a805e56e34f84695ffd54acb7d087497fde738edb877e949343d81e6a9e6ac3ac80095007b2f0689b9e6d6d5456daa478d8cf937c9196ae1c1fdf33ab5bb553a797b19290246e70fa183c49e24d197a3eadddc5d7adb4f75b18d1c7ae0e6102824cbee527aee6caa4f12b0806be2c14f8e403ec94e6c0b579b517a21ebe551966279811745640bfc0b4a1716ab0fabacf06abcf5b41a2319e7e178ca17479df7ab1a8de1e26649577e6064db62b6db3eb9a3c37d2c843b3f0fc3a4ddf37b59ee7715414ce263a94f011c16492386c4973281eeca48289829ab6e8ac820ff19cd4f0057a2b5dab0654bc3c7ea4dde0c28f39b8b677775de8c2358a732f0415236ab424d9ded39d31ca70de639724af676954745df4b0a82b91ff8668901f0979d04717f98e90f95f7bb40fda1115c2802601b9a8c23450942e9e46544d67b5e62f3148a2e49da8d68e1037adbab70155f1c8f060890b3f6bc19a30fe0ee502b4aff81d9c870191de2c0cbea23c12542df0327f4df33e5bf87479ae307a9fd629772600ae21c49bc17d310d823c2ea4524bc6cf37a6d48e826dc527b0399f1b8fb04258a257efb0c5a8068a146514d70a2b0c48e64ad5be53d4050347f4edb72c81d58d3ed388b734d6149e225ccbd79eb88d5222884ad5b1d2c2a9bd538f94491366074b3d9a97542ee1b172cc5b8a5619d056b2083abae58f8383dafd8f982d8e7d2d903c2a3a6ed9f72cce5bcdda79775eba5f71ad553732d0f8669bf4ad2219a369d7794287c9fede75fcb128ae51f9bde8f16bab8eeee3317028d4c7ba6edc5e22e69ce966afc61cf6c47774ed24c8774630a03d4d54cc2f53e9510fa65a0039c1864c28bf66593b16f055b9813b0b143ee3b56a7aaf12510a71b9d45b2eadb9ac7f31067a37dec33c46f20051deeb1a37d4553bfd48e020fb88b51fc0320a684c99f48b806a7d3ad290f7504554901399c926b6be675c238ff6edf7bdae40cd099c3dbfb747602a3f940bb245e72186cb8bd0e5a654aee22e8208643ae976704c4fb3ab0816ac1aeb1bd72d39ddc6fc37e2fcd09b56ffe541f6af6e1f2cd5da7b7bff565b1e8c933eec03c9097fa9fc4495527e86b677b52e18891e54bf859200e8c9c899a8261ca0d1368e9e15ef0e5a6e79f750bd3dd95fb13f7bc2eaad20415eb80aa8fca23d79901885dee7c3bae1331a43dfb07ad93a88788d4ff5760da8a574237262297e31f252b5b23c4b8941addc6b1dda553e2967dd5de42707e09b84a61bde22e36830bf8c27025eaf02e3a46876f182f78e931415f26ac9892184c5f6fbd383f782debf6de1b79318ae2de0656c42ef8754e058c955c7232359ca2e0bca3bce8d54a4b99eedb724ae1388287c55fa6a2e1577fba18ce57dfe0fd5888e90fd4ccf67e877c753ec5998bb5d45553a003b145bc2c544a1aa1f41cb0d9a26550142e34213bf8f193d79ff2e120097223caa60ad287e5b9b00501515da2e7c222ffbf16e8e5a9e4991ce0af2111fea1696ff3b9411ed8d83ce5aa276a40a37fe6fbe2271c0109dead29ee291c06af81df681cc97e5db8360fc830f75d3f700f2a9d29dd510a83405e732ae9389ab663f44793c3e0d10e53a7114859bcfbd7f05c5808b21e8ec0aa1b8d2977ed3a8df84682fb211ef545a1a17542b6e00245b3fab1014deafa2c8c62dc5c5dc052a09f54aeb5799f46f8a07d58d2a78cff43da843ca5f93cc93157c2e555f3489f98c99d3f5525d84281e099305a941a2f4cc4976f595c8a9879acca3c88d0fc6dd1179e994cce50848be283906d14fe2edb1292adbdd06ad46ffbd746779f4249e409b7512edbae698116db0d6c92cf8a8935048c260d34097eb58897a486b0b03c00960b5dc6388ddc0dfdebdba604aea1bc7b9f346baca4306a4ca4925fce3d63acb90c6c26854e27286ac05cc71427ef19563b6b640b313f9a9201b363014dd55e7ef8cc652b46ed06b02f426e9472bbcc23053d8ef64cc6c6f713aa38e06e1ba67645111a80f488295c9d4f150c0b824570711d54e433906ffa7ec959f22a91052d65bcaf2cd392f0ce7eb542c17eed35bcf39d5e5b9217060a87a34e9ceff00b12ff41ab955097fd946827807b3956ed67213ff3d2f4b529a5e2ca7f673a9328b5662298311801c03cce08568fc75a0d1d7e77cdd0b8052b6af49174e7a704de833ed1edb6865ab92634fa2d85a550e52e6fd744db6881bbb851bab77491cfad1aedf2246c282d78ff215f7de35fe6364879c0e16992b53b1c7e88cfb4a75e04caf7e5c4e879d4501617bad02f539450ca20e72bf1b31a3a05df9e162e442a8641e14f57a207fa0f098c9eccc02cc5d541f99c9d0a361b2912e96d3327e4df91ee3e71452f3f08e657e47dbc5c57f5243e6863bd29b84298b24068af5825c7c84e63fe25f69b8b766fd3da374a41ccce1e01def4c6a62af9726932d325738d89d10668728eb9ec5fefcf26b6108697537f3a50ec678c3edbc1d83e47265a9b67147a32a36df6b5d3264af5c155a30f24c0868bfc82d6f8a02ef1fd93c1477be09743df30faee7290c1bbc9e170037ee2908ac2bdbf12d2f7185af3118cc69976c807d0b3dc1dad1930a6158ef64470fd4d9ba79862cc78412c77b178ef548eaa251ab9a487f0cfdcf19e6b326ec27fd5765dad252460330ec9dcab127f7dc5eb4d10fc7b64f4554c93192d64302a161ba92535ec6a7aadc07f0e6276a3aed9ca9e6f0bb119b4c7e8838aee9ce0d7be3034a6f446ab7842f6ca615a2e027434b897a989ee0caea241418821650757e2a3c7474adc6df58d222a9a04a0f24a5145d744d97ac44e7ee76b7568350a172df6cf8abc06385f06c31dfcf46819add9f2cbc58cefc700b83b5ff725856fb1fa99cbe5ca6c81312a6a232e9bfbef2b193fe3a016c58b81d8cd9d61dbeeaea4c31d3adcf867def87287c8938dc4c92ea99dbd68f994883e7b0eb26a1dd95d6c31f19af4b890b831699c7cb02c6b5e45058cc784c7c553a2f98f2d644dcde274a1a76ab1ad7f93589a28ce290a4814eaa79d8087e3e0643beebf6ce4fe34e46aacaf38a8297cf6fa7ead2b52a9f363ac2a3086e6e06e4075c5200f60a1c6b99abd89732ccf21698371aa12c17df5e0f5e7f639264fd76eed0751636bcadc08914ec6b8c3f0f551702d9012fa18b803547b4f15ca74b4461e4fb4376aebed27fafad758025171456d0d0fba60ecb251445ebbab58117d6c65e8d8c9e29782be142c4bff7c431dbbc68a69679a7c9d4141fccc7833889b58607d2fb967302521896d851d7668633b19404db91b4aa159d9ffe1fb015cb680aa7739746d485cf8d7392310a513da39d1a92d0d47d9970178b2aca22600277b90617689696292ba7a09a6976cd7fb4e9c3f77f2b49bc6eeaacf7d1c361596bfaeb67776f0015edcde79701052474ecfb57dcf07e623b967eca0e3b7960f6ca37200acbb759729d690e32ff9e9c43d63c9ee82ab60e3f713bad16102ea4011fd76ba96c58ea67c3e2de126d287f15f71460c435b996f0858a1cb858c976a3ef4295ec6338fb1de8a01fdf528d1311d9ec6417197142755dd1e09c1c321e03c4df667ab741d3bc930b9943b7b4a160032a738adec559f77e79c1696451e44b2518a5fc7059bc6b4d8b13e4a3857029fd3855c58d9c259d72eb87c8360e0fa09b541c19976afc529d88576a1ee8ca95507cd26f2ee0ec90c08efa609c51e92cadfc917a335bdc9a0b6a2b7e31c5f5cc8360b130c778f7f7f0c9e2da9d02b817e376cdc74c14a46b1f9958c8e2043af51e4abcb2624c8efb8a0606dd4109c589c52b98a7eb7d9cec627da6ef3b8de138a9a4b99a0644f8c417ac2f12914e58a9dc83b9c2167e0c465b7edc9c444832beadd57193bc487f791f23252094b9b99fafe7fac1d8ff3ba09305c476041e75afb245ac438b40694228d2b0b153332f94c6bd214c36e872239078242683f5f1333e5c32527b14ff48bc23986ad4a203b0aa6ef70a3a21f9f7dc41c553c9b7ef70db82ca6994ac89b3627da4f521f07e1ae26344a4eb921843ffc66fa6df4ab791101f3e30dff04faba3489efa4203e5fbf603d0c15124172f7f71e9c6cc9891bc659b544e63c9985705ed4c203dc5837a6fb5620a75bd3de5e6a9fd5d9887c51a635ed56c281daedf12d276101c1c9fc0d4e3c4275e46d38abbd571104c019ad291d0883137d6d76c5260e672e7f280f4adf4bcbf14a82149875f0e89eeed590c785a374697da5c264cff63eda42e6f3f8350137aa0c96f48d1ae9c7089324bf29e62a852501385348818b4295db8b4c9dc5f9102099305af212ae36c22bab5a98d52a4fe6b6799be8e11a2cf197897b94388fdfc57ed2aa7ff3baa26c36ce25ccd90f3f2efc0e2eee754f587e15660373d36201393be2858f449bb4673301931e4865dd5e405a6ea1a4775f8bc3a566d54cec3edc4f045e987bcdc733beea1505c9aaa4f531e2edaaf54e9cbb20cc2810fb9ac32f26aca8241fcd655218ec3e2bd36a10a43f2c2e72ee21ba7cbb4ec9bf65fa48b2514ff4da971719530f9c70f8dc10cabbc6ba9392058d135101a1ce4922872a066d62b6f478474db6d15f5fe56a3b1ddc6 +MD = db14d79a94bbf39ec20baa60b843a68bd147ea46d02f9df962f6892939f99fbe + +Len = 43792 +Msg = 4ca21c27cff0edc6fb8ef454aab809998e3079007d3ffbb00bf7e5f85ebc9ff03e03585d6c58f9d635a6572546b3adf0c2ea4999925d8562fd0af9d5785def63bff7174b24ae7dbd27d5b73f48bd6351197bd14c97ecfc90baf7bfde4b124503f608c2b7a0f960c4fba27d6b57de1303bb6d77e334f547826d469ddd80e289190cbdbf6a88418c33d6950f6f1b1fa54fcf48a524107f4e803c80fd98bed6a3ed289e772c838fe852e237d6133e87017d7d92c2d9d492f9d24f2c46d9aef57cc7733452c439ea5c68470f3a21651f10d5efd536c8273630bfcfd2e066f847faef1506b9fc535ad0bf2da6a45f3aeeb89e4a9868bab274db90e4fb330743d406ac359d129a79e72c9dbb827a9765fce222b964c2761d53e28eb52ea78637a58948fb7fc667529a584b192d258f8e5177a762c0abc60fdc2dfe6bf3a4aa7dc1690990363e2b877a3d11702f0e105cf65d766d348b703016a42b2dd2923abd3090381c4ae1aebf8fc136e80e9ce177f27ed70348cb3d2909305c2454d9ff9efbe41cc64116b7a3e2cd04a85436cc884dc0114c85d1f5a2bdb7d87800e1c1c9294fffb7a54710db7a4ac1d9884697370f0d6e6f720660423b22e8505e1247e6c2b82717fddb7f0e601eb6a233330b2b414c349498d245b28a5ad4d4f7d55b9ccf06dd0dd23acde49a332b2cdc65f00deb65ace57d9e6e9ab246e42e5290c393562369c1abccc207326f689e0b440e84133f1e87abd0a1a0bccd6083f8ad487462f6135c10f8251c2fbcb42149382c39c3c4d2a5aad2a76fafd98ffe6f92b2e7f86723068929c0ce9a0159dd1ca914d302db0f65000a48ad9351bac441a9c993225ee0e69fc459c27a269df90fff8cfbd96c1fef37e24b03701c2900f5585521e7c39425d932b9a3d712c99ea7a25d594e60486cd7c07a184f2424d814091d38507e85eac0dba817baaf24f36efa4f946c9dd304660e9b953750f3742523ea816378fb5eda27edc62ae4f821eb702955380c08de6e3377213188ddfdb00e84a42a9740a9b27f525a2f998b4fa66ab543bc952e237697d66544b42b9b3e31b348adc49bf2cd499d78d1b627a62851b907ff218efa07a2800878bd267556f63f15f3e85361b5ee97ca1924124ef88efe480996718ca8bc3cb3d58913b480c4efb504e9b120f1d708f80ec9946e9e874cafe3de1d01e14dd30e64013d7f44048ccde8b1fd54096bb8aab88ef72ea3a66ae494dfdb803abd0ec02c0debff2b1cde08a7267f2885116e87205b81b78e52228e2483f2313c74b3723596645cbc75ad0b4a327ec2ee33f4374d197c31e7f23a559cb0ac3d6edb8acb8882f1bd8077c181d9bc444acc38106347ae2ec437f07be303504fcc58585d742cbbda4afd8ae2105aab17e9a5888bb31704e09604b3addd614a24058354f2142927672dbd17d760d7e940c6038b2ccec402d9d2d9a398eebe8673117638125488b0e08b4884691a575d060b6da9bd5d568f639e3b2803bc23ec8418b96a85dc503d8c8f243b60e6e3efb3dd6c4a0407d695c422b4aab8ef97649e41d554135389b5b45edba2846b82878e6687d6cb754bfb4588cb917d3023d60ab4515c84623c02a023f5239c523c0ddece46b5d84ebda92ef509451b27ce2a119ab5ec9fb0700b9804f82572421969ec3d314ff33b3586c793f42e5a7ba048f91b8a6b2de62db8e4296e10cce4228400dad10ce6e4b97c578a16b501d4a1180a5e5741f6ab7bf1cbbbde4b73e05e4461cdad5578f054722802f740dadcda838e8ca4d5c2a8639e96e2d1402fddd692593f4d9070080b5180221d39ab38526fcbccfa915984eca78ec5ce56c78390572e583a2797d3e8ffa81212063d9311c60a47dfdc83e81ff4f88d5df5057c9679293ffb80b5faf265e8fb5e115893206e9324de1e077c026e1f610685af6df0e2921d18059224316b870587c0c3e08651ae8c7cc0aee7a0fb4a6a526e8e01a478b1191a1cf5faaefacf57177d48234b55a3a7432840d2fe84c0d0c8196adebc25cd5c882fa72370f8061a96afad047864b99cbabf85e426f2cabaf1ec0bac3fcf300deaa571487f4f75758abdbb2a14653a9469ed44c61f2bb0505350381436602055c9e61911e4e564917d113a3e273f6cb6d91b471ff119babc78aebbbda8bfe65cab5a6725a6a41b95f612f2e7badc982b91af5498a5a33023e86c5a519dd4ca491b69252dcd72e1aa7e28abced323051a191334d941b059b029f4de751e8713449e7b19d0623900f89cbb2c9b7dfcfdacfaadaf89d02a7e88c5ac0ed331c00b77bef80cb76ce0bea6d8333ef5bd4fc609bbe78c5057f8e7d644feb413e167f8080248c78af34f64ddbaf9a9849d04a958e42895d8e002dcc02c5196dd3364231ff2d30ff0006e39c4cb7335f12404eec2fed790c67230a56e070c7ed7319fd4e51701af9199258784920aa9e45a35dd6e905e46c5166a89095c9932ace2015381f83b6d16c95c94449726cf044880be8422247f7bd398d1b9b45f7a024e70e71c1ee7132795fbaa2d63306dfaf5cdd82e3c910290b1a2c6a596c620827ed5d9de0f6f676b07ea0f677d8e4c6d6a057492670d99adb870adf68a36ead3791971ee5539328b26110b196daa3406ad0edad82a000a7af1ead1d31817a29d4722f77578af3b2efa58e86bbcebed6dc8d252290ed21e9e63f97965c9d10e8af1dab39afe374cfd8ca8ec86f1b83e49c23824ad9aeb9dc21683ecd424ccf7407e28ed86713b2ba0e3e76192947bf043a427978b56b44f8d13717347b2712467f6f3ec605822a1be07ff8db62e9bcb027589f4ecca93fca861ac56e6f9265fa86225f9513c5476ff01d6b91b4680972f3d4583f77ff16bba081bddda83546eabc9a55c81a439720dd8562ce964921c7105438cd5fc37656c11a5504bd8641a17335b5d1718395d8d9466304710392271d46b57adc9cbb2668334f6607ebc2b94a82f443c20bcfe2a3eed0b5dd3dd70d6b2a52ca86f171a4f66af1842ffc669cc31095817452a1e8addd5065434e6cf49a7d952ee758165cfc3fdfe19e3e99c64d5d1e2d10eeb855579056954bcbc0772bcef12a663735a90a108f00cb08c8b079d6f2a910467fb341b657c84f1c7e0f8f8cfb4f8c254c23708b73643f019ff5b8fcb7880ad0648cec9dd870d5d6f22846461800d188c656f00f217e72af7c008b6ce14c6943133cd8d55d117881d94bd068ebd0df0830bde92a1dc20e78e96b7175e458a3e4e86d66fb5a3c9f937ff4ce83cb520cfa07c2cc5adce15ae464910bc6455f435c7079476e5454b38272bd81254ae6c3f4d7f02a2fc32ef0787a0baacc98a2d00027facaacdffc6cd53e00a8abff11cc7f2de082f7753d57ab9645eef732d5d2769b5c9135619624125e68a5a63c656f0f55fe5760678f090445da38e4c85ab32627391ba66da461a0304ff8a2a744240bfcb417f92e868d0905332903bdc40aa577faca6e68b9be357041120fb450a41b8e9c65001ec64c3050eb2fd27784417afa2c3dfbf74882188ac6926bd7fd37b48831af33dcc0cef0c55ccddfaa2deffd2a47e6ed7dd365efec5afa35a6bc875d85fe5702cd089de0bf228399ba236ec284d845a180ecc2121168ba0b9510eb7ce47d0cdb84003186cab6d18f2c0756519657eab694e73f35969a324c279d0c994008214c863a12395494383e744c3f30db3136ab1e7535b0e84a2375d2a34349055a44d43828c89f09454816275471c6c00ec9eda1f93e1a8302ee172ae627f2c0dde7e13e5ecd2e353451a4b9d2a6b9e14b04fcb3f5c0d8f35ef2be94b8332cfefd7b11fd4e884d850c1568a0293650bb708856c8ed5682b5b8f1caa4abfd5e0c538ed4f97a82936516e3e07ecab941bb19c49a5562779e56ab3bd9ef33df1c955a83b8b755548651ff4d9aba59a7f37c913a25edd79c823290514ab8d260df168d0a2bbb8176acd82fc305c7487aec5c916997f6df4de4e612d2cba62a1b2c0c5582ac7a61516d6412e4903a09aaa2f774c35f04cbf42cfdad30ab4b8d7679e36e7db978878d4e826312e8972fdfadb9b5e7e99c2047c0c5c9eb87fd8f0b4f38125be14a5672c6bf7aee7d432d52633fff37c6319e8156faf363d050a1321276fbcda24470ba7c77d4c7ace284db79d6ab438349795945f9a44a12c956837a2c85137b0b48ccc6480b4f15e9b8a3483a348b9f686338144e770ecdec3187dcd548fdea1351124aac88d536bd5b7254c7359078f2ce965855c612702da4b7c0eda1bd6dd12c236021c80a9df1cfa1260a28c2be9d2e0c78cc2c05a802328bace24a0274e93c88ad24535faa1b97b8427f88b2ceabf402fc0e0348b40e6d8c176f8c4dadb004ba8830c534e99f46303093dfe127c3d3025898066c4296b83196c1f2ff66ba072197e3783aeaf14da156e388ce68692d8324f68fd0c25f94f481a618a83e8bc66642a8e6c20cb630744beb2deafef0761dd7a61a26c1cd967d8e6857d8a399c4f11eedbb7afd527131761739c75a1e4f3af7233fdeaf454f1513a55af11468854a834e40b60b5a92616bf436d408371b52fa0a6b59196b016397d97c923f7c89db26372113d533166ca40eaf9197df6d0e56a827366ea35fd1a171472c534a353b7e24d704d9706feba4d2fe90777ba6c59398ede73d82dcf7b70945301e5639e3d1b3dd1986a72146f4cdbe5135906af1476939fbf49deb3e5f0df14def24ea5ce750adc27b2bbd16fa7b694440b22c49d87595d522391d2dfffbc5c6543ad91f1587b3801592a5c44c4889fa27656d17cd6a8c135508f53f105f4d39cc0c7892f2c5a8e2e4507de750d19ad3580eaff3ac948736fb61d5fa36a4f228d52e6b60e5a6d85b7609a7e8be83167061225755eca001a083f861e7e9695f140df504018487dc6a3902a650dbf97751c15505c70409a5e09d210b709f18ee7bb504e4ed55f51f8fabf01ba83f9147e7f6fb3dbf893dce979560553cce402ad088e2808cc07b3c4c5d465a676fe702a380a961b7f2a8f6060b5ab1950d5b8eb2f80269785a969d20bb79f516d3673234ecc41438c6f7b6ec6d64b321c2d7948360d902388ab3cc9d450f7e2f009e40ec99ffb7ca8c967b9b4a12cc5b9550d6c271fadd35e77f4522887b48187df8d96b26a0eee5aa01ce931fe98fbadb33c00099dc6d08e73591410442058bb2034611015c0c02a5d63a746d5d5fc82b1ceace56e2342a00932b8936f818c1334a217eb875a1ba066029bfa0e2cefbfb68a17c27c0c501ca049e5baf0204818839f614baa23264524c16c5591e5fced2939eaa8aec9228b9f64448caf45b25076f3e73965650aa0ff6ac25f46484d9374a3cca0eca1e175704c7c119438f245736550bca066ee3a60c34721169d0739fe9066b01edeb5607ac936518840317fe3be44dd4370fb99ad96a1a2e72b55682fc860e32cc6c5d625a31a5571a697852fc66da337c9584750a978eaa33b5da66f12613effa23a5ed9a1cf2439b34bdebd45701662b92fccafc475023015477e263811cb7db93b81fe8cfec6c6ac7615f703f83ead8aa5ae34b13ff178013c75bc0019918f55f1c5fc2c4e4402dc3faf44c7ab240082e47745377fbf61476415993321981ebc84b53c4968a5d38acf360b5b31cf44eb14ae4c1ddd75d52ee6e52699d0e910371bd624abf3f123fd4d32b68533475f0b5cdcb02c001abbffea6dc9f9cf8b4f0edeb21d199830d97ee229ac0e59953b2be588d92c91b6fa039a36eb1cc586c189f6d0905dff6bdd55b6a555be4ac0bf92d73a2fe537527c7f1cc7f5cb5be350f08bb8e33dcfaa17caf02d195cafd0d28a597b1a1e9bf428be98a84dcc39a9e38ac4f38082b1f36f25b94a60b22fce5e5993d102a165a7e60737625de706e061a0ca08cdf44c50cdad3882928673c14a48aec74f343c709ea1207c8ce66b90b47ac57f345a49c819ab966017a122b17e9fd2e269a0c85938d57d7e418f0fc2c360dce11b7d4f633b67fa6957cbe5a6e1a626acb8acb2699deb73f1e6ac9b7e769a37b4ec26072a1b298d27bbcb64a95da5d3aca522a2a8b32b2c5ce203b6cab56fff830e1b1824a1397621a96b46c1d9e3006a96c83f1f63dcd0479d5d09b068295cd3e9252c5ab6dededf8a7134f73ea9d66ff46832d59648863a7f813b37770e752ee50be8d24062edeac7a6d552723f7d4228c822d232b577bef039f567ca67731b6a97f696280bcac9c6d2d2da5eed1c6b98b1b81f206ccb5a584bdf494a7b7d23e08ffeae57229e04f1bdd297eafbdc73aeea9cc349b5a9971f80a0e4dd94bcccafbca720b4ee9024af2e7e92ffb0e4e1d13d75c694d739fcada0e1416cf858a13fe69af626b9c9b067ef7ed283555d3d6870ec31e81ca5116a734966e0f07827f9d47f3897c9713083c6795f60326e10dd4ca80b2fca125ebfc0815d1fc444e84350fdecee68af2c6a7c17427c8f40e09799525c502aaa6c1251302e13bce56b8620bc1c13dcab2d84d90182c1b4fa38fe1f912d338495c2ccecffdfa22083382b0d65cfed6d8eba39a4df2715e8c59d7aa50e85c020fbe8565a967ab63745d898dfa00e6665805cf1a7583a6275c99973f5706cdf45036716639c06364a54d2375e14e0650aa89a14a815c18fa12db351d560ea783dd5c676ceba8c0aa1d8ae6f526a4dd3a62ffc0a70bec784b51a747c0e8608734e9a8ddd6597131a84f8f5a782495d967f3c0a3bc7fa5129f8b7625d6889cdb8c17a45b3eedca34e3bdc2e49b75a1997ddf84d1074716966b42d075aaa12422fde9c755f3230448e0dade1bcb94588be0a8b4cef41cc16232fa3ebdc9ec86dc1ec29a54bf93cffc24493966850b1b2f44d1c8f41f4b36148b342944c0a54585435485dde0ba7dbd226b5d6b54446a01fedd39f6f56cd50bd86318c10b75d0bd1ff2226802f1ae1a6fc3c280b5cad592833d903df2fc3ee6af0995b926d8c8c2193df87992f3d18260d4f15d2618ee5f8675643fb473c40373ba28738f389e52a39a60991d1b7883ba31724721c904d76d171e82a65e1500dad739a6c13fb1ed6389f32d1de3139cb04bcdd53525c9889b85379d3535a25d290351c95938a3d0cdaf38dbf1d5234bf7965c8ddce9ace1b66247e60d74ec7702a0f931a3cdf4cb465ca9fc458c380004a3a6e7957f1f813210b8038ba663fcdc42a8965d6a252b5224bf249552b2575bf64568db4091d58323006c3c34994d3a5ae85dd297b58f9599f0db4dd332c05200b0883ae8b45d4e1bc9869bc9fce6817c210eafc10656752ed786eb8839c9ab4560dc10d1f786e75d7be926b12f676608eb1f4190c81e7545ebce0aec27d1bc46eecb1996cbf0e38a801a69a4812e4c93bf0634615b461a81a60718798d76f987b2db9191b219c7058e80d0fe92d9a9af155a04cd307bd9748ec880aafb38078a4594357d3a701660efc2f939e4c801bd76911f3f081e36711e88f01ac1835ac11f7b6193d582362f3c375ed0f797e9416b31f02112bbc609cdded323a0f767beb8f7a28013cebab2fc745e7e3bb7c4cd5bb3243e00b2ecc12530a65ff9f2b2f5aa9f74cc65b418be9900847c21b628c3d0ab37c052c22f19ad04e64a3d03c0e85ce954c34be0e484aa427d6569f189c76270876289381195dde21f6cfaa92619585bcf2f46c382b798d085c445186c4a79a9bf9f04a318a8204ebe22b36136fb157d404ae6da97c9ed3 +MD = 0d241d6eba217d3d90df1f53d7bf6776c091dd9b4330c21296f47fbeda5c78f1 + +Len = 44584 +Msg = aa40b07bb852fc4974ec0dbf5c9d00111d6e8cb1b6753f7edba70a3997ee0038367c5b5e625ec04a8c54c4cf8ee0aea48e9d7e5d25d22f9ac0473a7f47575b64fd4797cda8d67e9cf115ae850d7998c39d2f8709d3afdebcd794a05f69ab364fc74a6db0d1e3bfa76bd8d3c9239147d414cdac9d0935d24ae63746c144111a615c2ce4ef26ac09d3c2453c8416504141b91ef7020f8c95aeb6d7348e21b28e0283960572ef5ae788bd03f09c2fdd107055cb6f1e2ddbaf4e0f1d71ac48b61a9a0630d7217414de2e25bbf7fbb6613bcbaf7b1cdaab4aa694b9b1050501444691aba162e5fc03782dc2145a87f3034bb891d7071fd00304e77b3af88094849b4f3b92aea4d04e3ced5cb7202a2decc7a1c18637d3e62b50ae1e615204489fa03c7daac448391fb2d7bb4b51cbae4337ed0831b4df33ed13536bcd1c7b67bddec03b92abb77d9b6351a679f652bc3124042e80872c006fd43d27265ecc3705db443bf16bdbe4ecd6c4e7e915a6a0de154efb1ab7a194d91bd41d161edf01a0212e46700d9ab83a93994442b9b1a271923337a84c25395471801443669c0cb638e824b797de3fac2336862de75a0913231ba9d14fa235085ca9d3553deba26ea6d89d6d148ec36b0d057551a9891feb516e1a3ec7ffd11c66b723f5acb409f0f568793a89928a9ed96cd85706262a22a3945297bc2455b81712cccbb9df8a65acff7fc800d2dc6e10d578e6071a73dfa2f5198337f90906f622967e6f546df5540478bc8035030339a71ea7b24b424bd4f937aa3e65342b8b5049b7d3fbfac774e12dc112a54684dc4a904111a2df8ec30973b5dc5320525e02ac1defbc790494fd637dbd0aec1a8226975d2c0791cff78b964c16a813a1f8a18859ca8031d33dc0e598894a3eecb2a3faa30963a136f7e96816f64d5640e096a5126c2d6b5df5927abb7e4e8423f42983bab29c57ec4b89b1bc832a31589e48cbf1dead6fc947dbe98ea5fe06e6d020f84b2f9cfb197bd539e5c527eb11bb1ec29d27e68540b803fbb805420b5ecff022fd8649d5e40f33c83ac52dce92be8251bf4fc2f5ead27278e2a603ddb27801c979c18d2d76900d25638a2220042fdb42ff5f2806ee1c9128b39127c20b53bbb567e84f4af786ca19071cf02a8e97905b045eff01751ec6d2d4cd980391e987ad6d0177758e77d26cce847d34597c0b657754312ea6617a40ec623ce76bc1cb7a3616ecf663ed8de662c9b3868d69b327ff49a5d5aa6c1638a459fdb8c264f0e4682e98159f6f634e68f3786751e3f06b4546433ea8c70083a4b9c2bcbd585fb3ac52621a6a86bc6e8b0bb621cd742af7f152f3b1c9fba2e9938a723d85277fafa989324cebb8000c711854fa2aa3c994aa769d75358f633119d5f7814158b7a008dbf0f44b9097f1c2223a3b90f8350a18b929d3130baa25dfa138d11a74714d7050845ab193e9e52732502b26fcd721e4237f138bf8e18b8df61d743802147f8af1d7c6464b5eb0474e7e14153615a1b6bc887dc7dd6f2ccbdc8eb4c28a08fefec5cf80323f5f19cc81ac3c842f5851358d2a58ec42bcd03f5c73d7e195b49273d455cf9cf752e95bd0c2ec9c6d09fa0a9d4eee25af303e947db426bcaa8203912752fdacfca1e89f45a86c857a8e64ddf4dd8598ad334070483ae97c51d91801c5ac508cd5b2de3de7460466de5157559bbd666dc32d9c7cc3eb684812219a6bb64d11610aef93e0be84fc671fb89b1a99d8d9cd7a861b5ff8b0ea4976c35276031b875624bfcf2ed34b9bb2c72df7d5f61425e059a685c1ef72b9a6042505cbb300fc90aa8959cf2d812b6c5e17352ebb5b94cde8f5a24caf171b8845b07e12cee3b63a24b7fa6cd410f2c06ade1bccef946cbdafdc3aa640885917bfcc84f25dabfe7a1ab07aadd1de39d475e972589aa7f6d737c11477aaaeba7afce2de1367421c7815dca1392bd547d006a20179c47b7a44070df968f57088da8458551ef48f585e9da336b9eadc66dda67092d876fa402ba729b1202ab5095edd98b1bb0d7afa51386d03d417dadc23dbbbeb1cb80b8fb5a07b04485167872f9108ba91b8eb497b70a2ce33b9b9f2c930ecd5ee9096b109796dba88706d487428123749ffca8e04ccaa607dd860f0f72a6918f60884ec51ba669a8791af9556281df28aeaff1214d4ed815b7cb71ed7539b7cdb27bb89b2ecce6deebb15b5fd1b90b1fd80731ad111d4f875aea6c38e32eac946f524cf56960cfb64f787f29088d53d4ac90cf1660ac58f72751529474fbfc6de7ba70865408a0c924ced9238f8535e18cdb3def947290cfbdaec962833803c4cc02d7a0672af6820c22fde1cf272db0f955128b3516938b7e41353596597f437cc9c6f62b5e3d6b561351e65fe9a7ed828cc18bbafebdb4f9b72a8036d6ab348a8de2da1908e20f932e79a3aa4330d1b8e0ef63ae919bd6a07f2dc4ed46344275bd9fcea8c180c963c2e99c46da5517fd0fd0a57885aa5b13179396121e86e7bed7726652fea633187f0652ae05912adf5839b3b13155dcb20f00565dc63f8ec679ef23c046aec751c17449586b5184d0587f20d12b4ab62dc4089818e3bab24d038a7949001710702897f2de5222a0609f058f60e9e581b6e4f0ddebed84fc8302c8e985d17b89241305d198709128007a8131e8e3b2ca0dd07d9a3f4a2ac839062ef6df2158bbce2f22882f4d096640a966bac1af3ee99314f34f9b80189faf7c2123ed761b02decb9268fb2e17f5a17a2aac83a2e68ad730e6808935dafd86d343e319565ef8e676ca1694ba2940938b4169c77546085aa2ebbf70c1ee7c3faa0bc6eb38812875cf3df37477d9f1a74b4f94d58cd9fc9de9676efacacf763a7eed51eb931dfbfd23629222cd96634d48a99066601ed20172ee017f96fa7627b06ce692fca20dfd11cc652841db3005e1f3fed275911325ede43987dd0c1657fd0f2769eba9b8e618f00eed6b34c261c59322a253bd5a8ba8ee599c0350b17b935886e8e6919758b771d1fab02f94d1621bce6e810ff2a3426104349074f1d331bd778853f613c56ba660c8a72841d53602349f641585fd38e0abea0af5322f56c28bd0da43d8acb4123defb6bb340dbfcb07ad934a8f09faf1b314d93e0cc050ec365ad007307f0f49cbc8655505bb6dfaba21953b784a06f8dc4d81dbdc36debf097eebbcc5ccfbb18cfb4982119edef5ce83c054cc4dfb7a6a1cab4b4b035e9f77b563d1031707fe13e0c9cef1f86160a75ccb131586370b0edabbf8b3b63f21f3a6fee072dd9263d3217ca81188c3aff7051c12ce73480f1d301a80b0b01edb2fcc13778f9149a75d35b88a1aa04458102519c06195bd1b27956d6fcc916c1f6e8d27e2d3d29c1d048623f157df81ed95356aa8798df493a0731b1261cab5834272d2ceca01e8598bab458a63a6fad4f8ae7537609c8d2d3a61ba150adc799b3e057aa7ecafdcd1350d7391c8972da2ad08dff9c171f53c37e9b0e4424726cbd3cd95fab64ce808b33554c3f11088db44cce16c268ebb353b63960c828b4b998633cb23a169788468ab6f8d77b39ae33273500aea434dccb767dffa56196688d7c080df58762cc8d7e80a4ab6e0d25f0884725297402b573e8f054a3781f62e4b0c3d7a2603634a7373dba84938dda33988eeefa805e26923119c58915588de526f7770a481ca8dedc74a12a92c0b6447e91c1eb6f4f17727c80bb21df47d2d8072b57f5e81a107896aec16512af9f6a63d807c2e9de7059efae9f317ff61a047ae8de2be83b54be8c7282fdbb607eee6fec294898121990b22ad7829c6d4bb2a8b57473ef845df8e7484cb937dd3c18c9548d4521f3fb5fee7ccddcdfb34e2ab81a8196a5ff116eceb887622b2ebf309a989d812f89fc0dcb2de706f0cf0cb4d39f6d5db3b359676a4b9bc04259f17e0941c0c368dd05e470c48fca76cc6c9821cda18dc1a81e2de288f09b2268b94a3fd65dd474f6ff2a06c92cee1aaf551dc92b83f176e746065ff8eebb7362fedb64dfde7dfcdcd028b4c5253b8382b18cf4427c507b77ba3b0921fee8de50aa7a9fe4aa84a8986226a33fe479594d672dc998f57177606313078d86e90a39a46f186e29b11f319b6cfabfd07046165f4871b7541d13ab28d882c4f087a125d402f804c3ce0aaf6541e2cd51e7f0e781251327021cf75ff0d0a14ca28a481d227b672fe0a1101ba7ef83f2cfa8ffc7b50cd86e6836ca84a5458daf06baa92776218c76e8f4da7c49bc04b5b2791cbfe344e816ed3335232e7d6d7582de6c4eb83d9061438d0fda32f18e9f6323efd5f3166aa7f8dadf4273c16a2480c03997d0179a785934583d4cd54837486e1f13cdca86a7f3f471ec5c58ac466726b60ca6f7d34493b35dae7eb25b05ca21558159a866a045499226d18c5a629fd98eb42325634c57d1c534b0ceee915106382680f72f1956a1ebfabaa39d0190a167972de871180e5539d8ca732a6446e3710a28010c9b8ec4236fffe69caaa245eabead8a2531210860a1b5e737050f81a7353a0c23ad557ae38d889d80e53d8fbe308c51a81ef6b2e39757723cfc16a883b09f619cd7138ad35d3d10703ac9458bf5b0862267f71b69c2995e61d2c21fac823d48a0a130bd9ae607869532ae30fb160370ba958b0a9b2b63f1d00e7ab0cbb3fe08579414dbe131cc4916545418b49a6c59992f194821d99e75ae38a821884cc9ebe83727ac4f44769f1c2923c55e89d287e7bd0b9ea2d4303026d8b33b8a5385377b12d2f78d29ebd1cf3884fea2ec1f43cbc8c8d1c625036b5d7703c67ad31c353aae7b8642e815265609dd8c28ca3ad56dd7b8ac36d3fe6d7e9c008affd1752d4b928c1f1787dae8da249738972b0b85f67243f69ae60880afd0124fc2577867d6466b8bb410245d82121bc897177a9b8e21d17699670bea189aa1dc6b6c0d2a04538292c08adacf775ad004d2976f5e5c6dcaf5dc5deef4e38215faa1191cc0fc4037fbe4fee484e0841db6edb2d21789dd963b0bd099e63510d6710c658d6fe795f490c7732ac5e6186ca493718b0f3cfa9d10cdc8f30839cd4c0955584880eddb201712f193d9b19f24976ada828b9e4a483cca4ee6a11440df8924fa363b359922596c81090a68a1ac571af8a0d6d757fd86ab695afbf1f2f8bb20543de7e857641e7e29749e34a46eac4cd0cb370ea925b81822355cf669fd65f26d46cd2d9e4d2deff3bade3c32d15ea86cecf56cc62998b880600d4b2f5850424d3a362df4455068e7c412a9d23d34d5d3ec5918386fef348bc35619cc6f44b7fdff6810e4b44d910c7a82a20d1af87c0db1ab3a876184334b467e88c6ac09f9847facfdf302ed116ac4755069d17044232533fc3966215ec9d2cfbfa77666b1eaa0491cab98f891098b35da70c865d61c2f3884d8e58c5d0c4d8fe7f6342487384c899693dc36b8f2b50869aa689ed900b604faec488ed71ca107273c500b22756ab29333376f2f2c2c37259e19e5f6d7a4dd87fbf6ef7502b47fa80031e32ba9e20d3a14126a9dbfd60935d44400d5aae00c538f5777dec5703f91ca3f7449dc9ce2b4bdd3f0abb49dc8c2d44fb81d8052d8852fd3eeba6dbb8e0b23e28625177f7929b6e4c9011268baf327a4d57662e28b4564d21bb3037fb63e9182e066617519c088abbd46e11e29f154a91f8a57786cbdb4bcc76f8da3fd519e874bb5c3660ba1ba92942229a95be3e3c85efe67fcc212aaf9ba96160fac6dd2598fba443898f5d4ff153ff3f099f25c68597d9a56d66fcbf1bcd1a3ab0ab9b460741cecd406e45f5c094246db2a4648f0d9adf96ef0faa10d95c83e5f615ecc05c284c3229d95e21038d62b5258062fcaa6368b2c57dbb3b30c22ee13f783a2ae4099d20aa731e5836aa1a93d695b975d88c15979553b894ceb87bcaf1651bfc5b70420756adff01d674bc884a66c0a1147f6693b3042ac41f8a1ae1b04f0aab0ef6cb5492fc88c46f67d901057620f4eaa7cc55c3117a3f8fc15cf3f0987ebd9b07a9a703e134066e1df0ac7c4642f7c7afc75c2a0e3f6dbbe8e24036f3e0ba6c2d6d6d0dfe995e5ee183d92349bf0037f1d7f57c5cd2e5108b2b7507c3e9181ec2771535a72122be6d1325af12edd4c8188ed01e7fed2c1a0298f0c7aaf05d1f71574e0f6d53fa090b1ef0541467bbd48e4c7aa509d6a954f9cb421afb9f0fdac4ae65efd3ba4adb6617e7c6d0b54bf9bda133946d37e34ddb32f756482d86fd06bcfb7b5cbcab81e88e7a8bca4efbb4412db9612c89706121507f2e035488e2e2338d267ae382b91cf3070783ad417093326a9fca33c73b66b447f6df8c5c28d1728975a0b766cd7de63bbe7f48c3db3e6fd5a4b8df6e3905cef0351f3d973b4f2a7eed80b0de5b85c877353fb9e930ad2679149ad4cbe69910e68d5500b096c5abdbf27d684fcfcf1a57f02769283d5a06c363c2cc66c09b1ac954134e3ec7df773f29093631b6a46c4c73d8ef173def714316d31ec553865ce72ddc9ea85af73d06f5b6b33a9cc03ec334b6b41cdeb80686a24e547e2be557ee7f037a73aca73dc1ed0857a0ee8d025ab76340df8c5e26fc9a96f5e796228c3dcc4a6a37495a2a0e8370ac3b1865378170412da5c34c6313743f8b984ed87a6399f3d649cd9a523b3d72193fc7037ec5f3e2c3261ffd4b79a3ba8e16928192de6ca2474185e276e69f9f374566d228a6b6cab9c6ff0b308dcd9a65d92d88762cb8d845b52ecce87f0e5a7ed2744bd5923d6b6a1eecd0c2ce3651bb565c8784dd12f859fb04b427832e36687d8beaf6170c376c7465f862c99272e724cbf95f5defa4eca9c422c49153b58c8cfa3a0aa387d1299df6eca0fe467081bae848662db3408647d9b34008334a43a75bb3a3d654ab39c22c27fddae6cd038f2e0f29cb126daf3bb1c01a76317736532cd2221dd73815a75224e9fde7faf52829b81ac4618ed01be8e3c459c2cecd06fa3035e8a3fa35a4157df5c5ce8cdf0c57ddc9984526815edb88ce318bb3803920383fd52f84224ef2ad91c10ef519a234eab6b521b74b8b2649a88be0c7e8605b64a051fe48541e560e5e7e2dc64d804d5952a97bd397074580e3c7667e7e22e84017ed84d95388dc4aac6baf62d33d0db43df3d7edec89c5d8f0728139b9e77345070657999914e1dd1c08086d532ef285d922ba78c45903bc5f2bc59c1424790dee4aeb1bad58f3201de1cd4835eca848a49497f6a71b9ba59041b818156055e54e19a3c208bbacce3277628603dc7b7720e7f50a1d37fa2f3462bd304631b6759701364f23b36b31ea376ca94594f88bee8b56058f34bba3abed59672f1f0739698016f596d6baf5b5a0501463acbc016e0d3f9b85a83cbd7760214f386ec4ab3614aa67caac188425509179e66a12721fcc161e98f919d71769893adac77b357d3d7518479a0057a9b6b52c5673b85884667e0121adbf8b1c4815ccbeaf9772af790b8986370f0ac3414fbe3c5ffa2f2c6aec05b84cba43f6aa3b773c8da5ed6d45d22e1ef990f7f29eb591f06574608837c47ed54c768c270e8ebcecf8230007227d986a5832b9c81d7b6a2b4aa387285bbbff012390ee3dc364203865ab552dad423b00d960baa44c25894565f41d7d4516e8b47885c49b877023a76c8b574134e4987b03b79527a93881c75e029e079289de77a1c1b9c0c92749d2535f70e257b923215d83b3c2c328e629894b8347b26932c335d1286de6fe0511d0a44c7194548dac4d71a0f6286b28f47e3b57ce2359a81fab30bad38f68e81e6ad6447f693b1a6469ede7422793ccb0b35ea5fb63cf80e5886ccb9210fc55306881f37c44c17 +MD = 8acb9afb8a347e726693a3de3b5da27932b651a6c85268e7678849bfecf8d852 + +Len = 45376 +Msg = ea1c226de61d845c1bb64e806ad70166ff8dc4a9d27a060a748365c308c8ce198fd9e6316a27a92419b85155491f7a030eac831a6de0374f1d23ad6b8eb96ce72bf3d3badda2b96fd0d1507a79b44fccd8db50a5faab76aac30f5437ea6b0af645d2b1b14778fa64c76a1197027cc8eae483f1f283c50b43edae22ce23c5f06e65de48bdb090b52c86e95e53ed612c85ba0d2fa80f153e432368ded941ae6676147f608721d231ee95b8fd56414ac5c4e3dfd26fa78357d2eda552ff4d10b336d81dc0b6a126b8d37d3db649061ed9d0e663a2f152f79d17d4cd44e94ed220d73c2031f339749003c5e253d445c7b1d14b0067d31859593b5f487d3f4cdcf581c5f07be6f0a402a5f50e9a9e052c95ee9b1de8c00191d465177fc5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8e3cc6068f68e6b97ba8cdb4ad4e12e9a4a9128caa01d197c41555e24216e2abca15487bab341973f3e8f2091c4cb47cb420a9cd35780578da94ee14e859c9794c5e8caf4f79d0a53bbe8a4596dc769230463b1383a9fa0bfeef1a8efc6714fc6182f33fe0bca4b3df93e6f8c18fe1b0a5a4370e191a37b7ad7e5baed2d14dcbc62d2c9c037efe263c03a8a100d97e5e80a52dfb7a4b371262dd3203202adc6dc6b789422c235582fd884fccf94bb4f25dd3909a0baf8092bb862e0a48d669390faca9d0df6c3340708c3cdaff592e2299ba0f3851d9acbf1403b042d1565cd3fd970eb6719c2fe55199f069a7743255d0c2ea74f13c03fe18d0593b4e4d2fb50ce11861a74593f80d4c2ae7763f7a127f78c2ce4e592ee616669962040d6a62da255770c4fb17df0fed1cd2e01d5dcf026628a2edb395fda950f145b7299553d1de6c527f2f1430d62776ca6990660215f57c9143cdd1ab5e09e154cc14290e806697851a442163fc75a91c973b1b5206b13f27d52a5a85810bfa2db77f9e09627899974aecc80eef422477ed7ff6157123f0d5363ba902ded19c1f0dbe8cbaf46ec2f7758b60882b27893ad0c18ee2c1b83207db8445a9a3e557d733434db9b2c3a4242ea293763c9047f3e5b23e409508635e3996a8f09cd1adb4ccb0898c3a11cdbbdac4c93f9016d121a0c48c95577f1536d4d54b6e16011e564e88a898d6c3900d0e648a6ad225b542767b12778596b83031e2b578ac0e1a2a1d2e23662573bbc63df44f8e5f3784e4eb38385dabe9dcc8d5217fa6cb5331aecd33927ab28c7145ee0690f0a3d6907783ae96ce36e2e36f3323f28ef06af562e31b7e5cea88812a931de7585c8d9878b420963fb30c7c91d06cc687b7dfc5d4d3583f7359f23bd2c1accb2bc5c6ed771140bf28acd108ef316e54378e0c3373327c6e546d5431dd0e35b4c19c1d0fe10f818a1f80eb08c5ea9b3404ef8abedc64fa7386b118e3b7bd3b2cd03bea804523558f9adb850cb44095ee7658d5d86f0f44f770b1dac1e1633fabde21d9ef21d15f281119697548f7c0dc02567800a9760e52a8dbf46ce8a4b5aa21da459cf5bde0ec18c6f2e2e254be854f74dbd82a5d992d95bc00454bd63fb061e1c82a3f3d9d642870abc61f0be182a4108bcf501a87e0ddce78db799c305704c4cc077cd4e708b6830eaf6d61cc5ca6c61246b9315d04d78fe8aff05b39f690ffebc52d185042599a960f4c1af16bde11d9eec4367b12297cba235e87af178cff81e3ce7c5bb96803dc56398bd348a0707d181f9e84813a1187e602c612425f4038d3df758bc6887b4c24c438f47b945e666319ddebea8feabc588b8b060f8e6e7b15ee984302215d5feb6a96d76d30581040517923a69174c20b574afcc7a0e6c33a6a5923f4d916922a9b49ee95faea154034f4ce5df52c537f048a59132d25abb1e13ca10706538d52d4b6cc9e5a80efd352e54e69118ddb1401cdcd6a89b78f0cc1c73cc13f80ac04b561d3eed5a90a8a39af16607d25b37aed89ac465d28f7bbaa6d69abfb2a78a0abefa6f002eeffd547c6c8dcae6087041642883f0dd6703f09a3ca3fafbd7dc73694b85a58bf2a350bd0d8261beac0501a8ce3ad126c83174e1eb0f4f3b615e8c4058a765d963439f431c6e54c00f9df68dd31291137aad50612c0543da0eb75f2b68fec78108844af8e1782c56f8e129f98132b70e441e8c0446ad6040a690f413c5b253e9a90f57c3a4c970e73078a1d51ec2cb7ef02d2eb183302dd6f19051deb5ea917a108bd18bac88a8da800c660af3ec56cb4481405029b63202b660807681ce0a9c04a1bd3a42de5d99ae42817f48d6df5c09c3c9c88166f82dbfa789c1718745b84cf925b7aef3158b82c4f91b65a8ee9b069ad203d36906c0d20e72a9cc3dca34b13a10ea38ee5b18c63ad6c8918b0bef05af62e867e7e421b83d4515dc17227afb0d87bb28f8b4a8404b216d15a7bfc0cca9815f84071bba39db0aece73ed4f0f2199112c538aaa3b9a0e1f1392391772531375073f132f21c90c71836da68005d0736d758d7c472fae11e3e45270a7ad6ef8da37dceb1302b06868011126711067e7ef229fc8b7bc8b5e03b81ddb032a78a8a40e8c621de2ce24e0cbf0e588ab327724b80d08527eec430d0356b0e0762ab3710fc000963e8cf28a48af7c3d52daa19cba57b3cde32b715e5a8f9a962cdf99af903a5f12727731a30b8f530593cae7c58df2438095e36986223b00ba9b21dbee443dc6192b0762f98922f287ea7dba1db78f3ff0e38e8c02feeb7bb46d7bea8ba05cee20c4d816cc460ce32ac38da923db6111b57897695355137419f0485626191a2fbfdc43cdb9d6af9d74bb5535764e2a6144a18871f5a9458261e0319f3c32f8135cdde4e8309f7d99ec3e7edf63a43d97051afc46787fe41f1299b2463c7279317e463606cf151960f7d965179a623d3b9d314d574a5d81b2a2a934bba54c0ff29aa1b199f3ebe57b2df8a27e78fc8bc763810614e9a6a0d5988b438015444eef388ce2223d6874410528a1649df7bbb30e76b10fe50fc4007abc69340aef987fee4432200a3f486b03f60c6a67d84f86e4aed8c8badd6dcbbfb91037d4a28f3d12743c23f8c4c451a0cd2e006512b9cb8c85e7afd9b4008fee0dc31c2101859f4ba96aae778d9a8d723a90c7243b8cf96c985855d0181ec57c271c516e813e2f00304810051e1d86eeaacf1f03b72b891b52b53b2c6e2b14e09166682ba5fb64c6c55ef93feadfd67cba5388b21a38030f5188c04d4ab7f6b1d94bc0c6e45fc905c509ea667853e4b2c5a8848dd914efcef14d95b12247d3766b270bfec0ddd453bbe334474b0c3a177958a3157844b7c0ce7e2c06894d4394d3a2aa01cff80f2706759720d78b5f1131ce64d78c69f38b4584e3abe45abf938f291b9e6630e1f6513b63a1a233cc468b743a4269e71b85031c5d2fc7d2b0090a44e113380ae54818af2a383fa7fa0de30493f4a53e9854638f18f0b857cd5be1609b0e99f891a2c93b6b53045a710dd4ea125cd2e312600367779d1a5c5012811699ff208c6f8cef8aa79094cdb99cdd8f35e95776e23e4f2029837242f0a385c16e534038e77cf7f75f6f75644c51697e6f38c76cb055c3638f5254ce17a55c1b98a99d8091d98f1bf35e0ad091b205323eb99726e52cfc8c197846303d8e606fa9708ce5e758f15323cae97542354d3524ea3b57f95a57146863ab2bfad55f48013682eb6041db57415475d4a6618e11a259485275345f96fcb31813b800953f406a3403854aa972dc89547156bd5432377532b8d161928e36d4f189fd96aebfd78a04c0dec9f84065b7e9cddbaf4c2164cc8efdb6588c64b747ebe1440e0834472479a5c546244a6d8eca6c9dcdb269bacdb1836c9fa9a4ee9a5bcc23ed3e570fb80724e155d9fb746c6ab0258f43759a074f0c8c9d76d95d3ac5ad05aabd72a1c331b0bb6f75ddeaef4f4b0b6a6bdf92f7bbdb9ed8807c73a7ae0661dd0221adc48debabf9745c5175dc9f97f587f2262d8c831bd73308d26f996ae0eab8ee743a70383b8a7211489eb71083a74467d40735957c201b08fa010c4cdb5a2e23a5939d28f2a8eb7730d8536036f61dab2d134b753839a4e74afa7b1ee9a1ee8ba27e492069db4cf88a9135e13a78703681d042c4e88a7d3e55ca7a63746886610b4918d10978133fe677e325f684e89472dc9fe705a8e0889aef6ebd0404625e3082909d3a25daa7b4facfa103d1e33f9086d76e080b9b209ad7dc8e210c2eddc2c924f7a45b0fba76886fe4dab5fca23b6d6dcc7828e9c0c612485953f6285a327b6a72b09e2ef2cbaf4853f3c79177040ee784ce9778d3bd3d469105490b7df017b580e745b4eaf4ddfd90d77d4df85ad9b91983cdb4c3e0a73bd7cd7b34938c3cbac4d1083e0db2a2d40e0e4d8ed0d05c771d20322a2bc0eeac90050320458748de90d65c36c5558c803e00cee08ae50595e23c7b3575de822d5c54877b0e41ca95879f981bcc8df966a34767cf7109739a1b30ef833ca9f0229f347e91587c30641b6572696dac881bc05aaec83dce24f82a96358feab3b710db1d3f0fae7728eecef041bc3331a70437a31a474ba3783482d4b3b7fa7c559c82776f429ac3128a04a89c70b7cdd4a45bc920e9251a0bd3d6950097f6744a1a37eb75d687f06bca7ef6f91355d19f90bf25590a44a24e5a782f92bc693c031e6de1e948008fb3347073ee30b7dd764dd450394744ccbe3cfa3ce071cd241f1d96e34ff39ee1773c9ba7c2453851f7302dd2381c8009e9ffdf2580649ccd0c9c35780075ad96265752fb3bbd61cf70ec4e13dbf690ea40179971e90142a74a1eec08b14ad73e5f1928f6a125ceb691d697adab61f1de6f28abba90e46943661a0d2db8ff861a7006a012a90ad9a7c883acf81ceb1d56a5879867fe6a7b11cf122b5fade044eb07843ae7a9d90d038377f09ba6fe9e03a1d8f1f2a82ff2a3139bc90706b99e0094366bee2a1ce35a613804f0d018de35e2711af324816a67a21b58bc39d7ebfb9471b58ea042f72cd0284ca03ec6689dc604a5d1da2b4ce019257d07ddb7d94c86ea9a41b2f7b2fb6edd5a123983c77beae815275f7a04acd72e884258f5c073f9e5acbfc887a1367bdb9fdf56dd7580cfbfdb5c1afa3c1e6abb1d24420e4bf25c174f51678f4c7ea58790602d4fed2cc2e07af8a3285dc5523fae061f6dd6582be4049ef68b0f347a85de3d1337b8d082fe76857e70e4221c40bd604790fa05f7d06f011be773e8494acbdebf31432c7e6e507b038059b52742bddb6114219c3e60e1204e41150ab03b0bbd67d9269123b49b51d8c3491f11da31dfd263d78b6e19fd54e4046d2c3dfaf061c38bcd9f0165a99274c61ca04a6bcbd6420c96440560264793cde6cd50ff2c5448b5c2b695f61dc55de55ee96f7bbe57067ae856a2d80e50d3ea0c5e87bc121d7e0380785fea6a530abd8a6acf8ebbfab63b4843b4e5f8190b05586040b64425c9e1a134ddb711d3f1bb29a509193709c7ca209bca1e75f8cf9c55631a7224f5b2cc8fac8de0a6b0a97aa7189aafa23cb1b42bbf30f62a88881b8de783744715df40a62fef0b8b9198589d3602b69fec1a65a43ea7e16830db0f6c6e0a312cfe95daaf4f8f7c52cf54e176adbfc28290587b348a9d74c19a2ee46b572d3d49287cf6e57bddc77ee255b1cdb05057fcd1f24157336034c91cfa3725335afd2e1bfb2203355881727311360d1e32fb61298e7486c9be95e141c374049312054e51a6f8632c9e2ecfea2ddaaf27f60141ff73713dae070caca1212793f6e0ca1c51f6c69fa20d1409cfe23c4e6e081e21dc47b3f660b82d7da389ce5dcf55d02aa57129033623f5929d04c74560e7b6933881d94b72606cf6d163e4bc9cdf9bfbc48c9c586981380cc9dc083ea1234ee8ac984da7638e3f8aa355e74aefeca20227cface9ac935fdadefe6b949f396bc491218d94a4a039bba1c66293191b66c057b0b7419fd8c18f54d28dd1cb9881a99e84159dc634dffc453bc30fd8da7ed8ccb667fa83c0219cc40edb90a6cf14fa2d56721d38ba96ef163ca51b8fa84e9e0f671b7f18f7e47594f9e13bc15bba48b60f2fad8caff2e69d3f6560be035a9288496e49cfde9ecc502a1b4d9bccd617d124aac93293788532baa059d48a1758dfb3ccd518f294e37e15f640a670fce9f71d7ffabaf3ac4d7f44d281739b29537e5ca3bb74c27b5d87540eaf72069321a0702bbc965ee2a1fb5478520bc4f504dc9aaf6763ccb6bd045ad1047eec3d7155c31a794513c0250f6ffe561d860eff83043c63767feb746d90c9ca3da0503b9f6cd8cb57d0c939540df0f8195ceba5fa1fd73a2d6a6e062bac657b2ea17ff2e5f3f32d3f1472614194ecd29fb7ff9aba440c45e90ac2f4e6f44091d28e1139b1fee6197b4d303f50cb4e501135cf403c17482149df9ec2f80ed7a8b9c4c8628bc41e1a8cd9a72619e7a20b0e44df3908101756b06745f30762871a54d3ea2ffc0a279b04783bb80590646df763b3d796b50650cd204cf76d85fb81343a0ad45b378f35427752579c4c11f35d20c1be708c71a9e0993862c2ef9157c865bf0251b2a153e775af9756713725bffaad502decf5bcab408ca78015e51881f55b3c58222a8163f19809bcb6509f805fbb3f177d1f238d94ae482d7f534e015783e4d6fc77383859aff14771daab5ede9fcdd5b33a58f83431c733b28852c70abd8e66b81402e53c5c107f3a51e3abe5bfaed105f3d77b7dab973b25e0e1338d5cab8fdb8d5bfb0820d9dc8632d2e8038f34a20bb829a7ff705a9c600953e76e05deaadd4fbdda5b92afd7dc19e3a3c6a301b13b13b9de282463efe74e35532b3d6a4033d7a30385261519a253b05f9d8f9896fa7322be964c55ae223c0ff72368010885c1a617335fabea8f9ca38bf6a96bcbe072dea9a83ca23fb75f3e44051a253c397a3185e4a3d6e2ea4147a96084edb8738f582ffc89cc4d0d346ada3ec83983c57dcfc007a7189b48ee174879a6a0f53a2529c201b8563eaa37f02a4ef6c057c058eb661abe036c21ff9cd9908327fa9ad0be00365cb29cf4e678a4942a5c20a0781ee89c6d09ee1bf232ed53aee5411c1eaf5b28cb73d093dc6ee9cce76f86ec77d4b81b48ae998d6293f4119e6b51346b584357a91c720d764d6a57927cf31ab4a75505b563e70ccd1a7e88b62cb38a435349215a1f19a8308e86b2cff6eda1daf15fea57bc5f009e40fcf79a9bd074332aed3472ee101ab7ccff6d047fef18476d3947943a8a0f5291e00cc04b4098c749900f782bfdcb686314e4b48a6ff48655619bef40c08f96a7d826abbd8c4e5c29e1f0de3b4b40cefb77c87478f8bd04547955ed71bb17b6dd35d3d1650c2b7e5653a709ae810157e08876a8fe01d86dd4d104034fd22e5fbc9992c5c458b6ba695580aef827838fdcd77de67c23dd1f711934c53dae39ddc073f1ed7dea567cbd682c229aa74e032ad54ca165d7419593a256a7bd97d0dd83457fdcd449a151cd2bf80928a8d72e7512715e5d849c7cc71cf82f622779bb7f8e7b0879ef2dc632e172c70474a57e260f8a91c5c4541185e987c0ade59b140fdf91f4d153323669592af0c0c34f7ec83cd6d0310eef005a888400035acb63ce8943267d1e754eead39efaeffd1bacc62b049e11dcf3c5bf8a7b7204ef6127464c1d11cf995d6c31e13d59e48ac094ca4a82500aa6d8ee1f5fec7b152c22cad1787e4b5b6c611ad91284923104a4a32f1bde9a6e0524c60489459fd68956eb2a9ee537a2f016d74ae8134867f35e747f3f87e1ce705e0a19871564ab9f93f4ac3fe06b38dce52df1c257c10bcf446534f60caaae60eb0698e9ea4e16d75073c0dc0e5a8f7b528b8841c0b06f00fd11eb0feb69705f62683d2222d0aab922f512e3bd9a1963f57c58d6fc7b3420eee6fbcd82a2d6e43a8b60b05d70c9bd61d51cf77c8e591f347cfe0259a5edb7a070f1bf90fb24680a0c9e1508c3166 +MD = 534680ed02ab03095d25fa34cde58a03fdb938ea601975839122a4af9e98acc7 + +Len = 46168 +Msg = a11521f7f71b3392f4041d22956379eaeb9a6a8ed695836a11b8e4286e15a69263e37aa4c62b8ce6d5c5aef97983b26fccac17e0d8ace939a209e2586799d5d625f34d245d2371da17a22a4b2885885db0f46298e6de3d7c18eb6f18edb285d8ee2de19f4469a815c382db4328cfc35d9f5a93de899349da7b45d5908ac87d40c679803c0467f940e14f070603cb2b16a2c6f1dc4733d3fcd4fe5aeac54386b5b5bf702324842e0377f0f7bf40df8731c020c5b7ab26a48a2a00474b268c68dfc4e7fa7d2c270d058f4df3946875a1550250579a3ad4842b8632e4dd3609eb67fad96672a5ba60ef304e42ad02f43f2b6e3eefab7ea63a87ef7c78c87c23d6f5607dfc2916a4ed6863db2e3396c42a5a0fd3d512fe0290476dc64d348142f330fcbb04cb074d7d192fdcfd4ead4d2a8beaf550f842514c1308f8a948cbcf08c1d87cc57f001dd7aa9c39f825cef60766098daa85d3fc3792c9fbd52ce430de4ffca6886e8a7cc5c2b2da67e181298892738429e03869196db7b5190954cf3d836e2395bf2cd20d097aa792a94e4e76b830c01632f902ba4cdb0fbc07a113ed0538d9349b6f877829fb89c0a6becb997f492bb9a29f2ee1d53bf1084d5563b57c62b2ad2ada03cec73d663b005809b990c5ac5959b15458b3e1444304f7295e91f2954793f5aed78e492849dea4709e92ac2a3f7eb7dee58cd5eeb65310ccb1ebf2694bff48f15a2326b533682b690f2e068fb43a393351091dd9a96327b47333691801955c322131dcf741c8745ad60cdcc2feb5c0bb63d1c3eb635bc4496f106089b17eb8daf25e74d4ba2308acb9d335ab6516d3dee58dcf0e2e6470f26c2bdea4a3e1e4529652f536e8a46dc8812c1a323386fb049de4472950a6b11a312beb511fe76901d5b6670411702d14f6be923fae2cbf95557f35241248122687b98f786cb8ce4e7632d3267eb2d0fadf32a5ba2031a7f9d305a0e7bc73187f367dd301d37b9ba3436d40837790dce1052f5b8bcfbc3b98e01f9159964e4d8d061ebed49c5959670210b6054332db31315ebd9a04f604db43750f64e80238b8bf4559da0f798f017cc23d932cc154512966d2cf06068928c6ae22eff9b661692899abf97304c5db792cde157865d0abb5f1a3131f1552e82f72d2e3129351060ac3bc1a1221835cc1f6a0747045d6a69fa4364c954be884476b28267bc18ff92d6a942632f952ec1bc78c965c8aeeaaae299564b1cfd262d63f2ba17c67a3a859373c031cb3b9f35047a864845ba01fa928c841bbca98eca496e43c5dad167d56d1bb9b187841d9291ffec62fe1756e5948d5cdfb63c389781959e065bc6fdeebe219d46d7070076bf796a5a744f4fd8632c6eeb8c3daa01b6f9473ddbc3635e20f5e9865c2d1e3e17676e732aba635f78ea38e3c11659b56419dde0dd5f4e9010293ce4697e9d65245a876193e117e76037294cd76ede1ef377a0a3d2d2f621163c05e59164249850c3438a427bf41c9393de8b41af9daaef835deb5ef7208d9d9eb2fe66863a2437220171a8b38e4b9d90b72392411ee5d2dd641bc414243230d1e2b35b4d44b541f76fac59502d10e8be51aa3bdbd85c27d631d9c4b297bb5a760398d231eaa80bc3ec8eb6aa76e90f6d2c83c0c8607a791e6599b36ae18584eba4138ddc8298ff17e6bd535af2507c3da644a3af3dcd21066dd022a5a82d4aa322c7c095a2e486540cacb1ca05d3a9905d6166e8d6c0ba3ec91194eb321f164d3e0a2cf5c2374c18bcd1447047df2215c06e8d1da201cf27f5d27cb435e7724a246f158576fdbac685cfadf62eff703e6dc088b645ecca4272976c9929f2d91a946b3ccd37a45cfdd5fc30c431a11e6ab41bdc3b38fe262ecdd4c6f264ddc54efc92e5356ac7ad1f5beb8f52e660872b41b50a14d1c27d3d761f2e589d14c157cb5ac136a6d415cb56121c3ab3ba3500854094ebc6b63a0ef9db0544391457b59f47337962564152731469d4201ab28afd230f288e65d703d79cde4daf78f2e8d6ccbe5633ca9a652146eac7c20e9a1b27f0db437f4dfecc7de93bcd86af1d72007fe45571ad9b73ef3e318e00022641841e8bd53fcafbc97b24805c551351e1bab5381fc27bceff4b7eb08f70a2119e902083564689687b5df35e6271621aa854211bedacc19f77b46cfa447a4ad672ea9b643f09f5cf5274ba28888207e2466b38127776fb976db8ad7165a378df6ee1e3a0f8109c9aff7e0d6126fd71333c6e6ebe15d7a65151d6a4a83b82c8a6f3149dcc29e0ea55d2d841bad65a3aa80aec397171453e37c48cd7216e7e96c7aff12e484d016b7a7cf21b781f1ec09b22532ccef2264fb52649d95f471d8fbbe6161997c9d89c833e79ef3b59b1af972341bd391111377407ac1fc48de60fee45e1e44d390cfa0ac7ce31772eb954268e266f42669ca1eed9021ef38b4e83f93ff312db02e5007b897d86bdf6ac6ac3b37fb77d6b0f0b702b1a5b5ec7dda84744b829c3c0175c5ff3f6537259f13ff943bc2a4c870ec0b26e235988dc09d962f4af9d99f90a4a12a7c72c26b12e5021af7a4c3253028e2022db9de4306993d6b047f2b00634665e156e755da4ca57e7672871b14790b033d9919d035d63640d082fadc8703c4d7cbd6ac389ad4b93c4fb455f5bed2fd38802e3db68cb8dc6907cb54325ef784c09103a9b3d2328b014ec6f4994bc3664773f50dd86f34f37eb8e77376aac7f0e7dbe6c70eaaef81981baf4e4fe2d4aff9bdf5727d07d3e3488bdf41ef96fc6f165085ec904b9205c85d77495fab8e3e16073752ef7c1c148f26baa4e7471d681398ea0182dda37e58bc27cf10cf787c66f8c19774f598ef1b348086a4e8b245a75c1def2c87ab5411e2c6c7ac761bd1b0399d27559acddab35b39ce6f9f436d9a44249cd67231eebb745c1879c7fda6be71d3ecda94453e2143ee6490945948b4f709f2c8c6bdb61e1df2acc0eba861564969cc4a0b88842b95a7304ff17b3ebd1ed4d849aad71301838e6ac80aa46c416969b1ef261c129af96a19f4db32b77c608b35a346086d2d4e3b3adb4a772d4778da820f0e8b523516410ac67c051bba6638f31cc3d72d6b27fe043fd6ab0e2f1fc527f3eb5daac69533e80efc7cd23fd7e2f9fd49cdb981b6e1b03dd4c875c3053187e3e41884131d489c15831f44d35c922f8eff707a37a2eb271d6d54ccc9d3268c26214647e657890e203877da3e9d4f7d160e4bd85793244f27c8d97a0a30ad1d06cb6e5b05ebfd267a430bfa474121cbdf9ee33ca7339511a30edee74ec5cc22c90a19283880adcd6acd630db8f110012fd6c20cf1274556d866ec7b5d398d84b805ce1649be9fe937fe087c575425074fde6fb2fb1a3c040ff98a9efe35f8291be5158dfe4fdd632afd81aeed1367c587df72948eb2830490ee40b8fb6114fa3ad176f521d86f248bf3560a41d5df241e01541c7197213fa36e96311a64e9df5cf27ab678045b13a20710fa1d43930a5e6b9cb06e721e9c90a1157124e77fc1cb70a838cc78ab17b66236e447048d608d46d2ba4beb83029eae44e0e091df86cd7289e3e4df671a102b503288c1d50ff4b97ea1d1a9575b16beabe7180b1018ab20a3208adf9503f98be74ba82271fedbed29cdc855a28e40f8d3ec92fc1a5dada3815584203fbab7aa82976fce6b1489095aa6f8966d8364854359170d063f1a23a8ec9b4b6c2692afa97ea56ecb3b48369a942815bf22ca8c83946fe6dba53cc7a24b97082531d4c2e46811a9975a5e9c70ff227aa053ba361c07622ea17659b8f5dc40fe71c2c30dbcbd7c28d9581462644fac6c18fe7bab9518b88d609cba1e2c055ed658c2a9b5b8e5ae93981fb2b1feec8f93300b5612763138ad21fea720cc30b838e217cce561496f91dd9680b0c73e9398ef62939348b9ac33eb8467e65fc417ca18aa75c33d4f87caafa5c68846ae7f235eeb7a589218dacac71644996d2943370163eb77d660bde71634cb6003a21ddb838f5286dcb58a18bc9c84617cc60425a52a782ab4e5da901a2bd8618783336968346548affa86c5d2fe70651605223d0de862045d44a76cc47235b259ba8a7415c3f9c4914e957a112450cec24d64264083f22c5be7e9241bf22a7d02adeaa5902557220d197edf82f76cc30907938846e570cb36346b5f2791ffe708c61aa4e340c78ba8c40a9b2c5d0b6d7199770d28f424087495f4c6f138fb1af56ce41816fe9027ecb50157183f77f4846cd85bed9a550c9f714b0180d0673e50060eaa2f46fc1d60552bba4c86f67fcae87e1a9dbe4dfe3e2f39b7dd3f8b7aa2fe610138ff51968c0c4f6dd218d136ca7531f341485207da3986900e6faff772bba5c63813d8b9f9433717b2df50420c7cb88de01fad4ffaf6fa361d461bdd48a5a2a03869d9af2e60a961f2c2bacb1863dc92822da6fd26ce5c4e11ae1653ac241f383fe99c9fb3cd6ef29ca859f8779465a72f59843ae7297683f38eea8127a0e635557b68b211f04e74b77b73f2b0751b76f08b912dc36f0e7acacddd904081bd408207870fcf33108c4c2251e14b70c5a7ccab13ff4408edde9e5538a8802f6d01cf753fe075fd7ee462853becd0ec2de2cca253d7f25ddb55780d43f06e13be1f43add94a8cb55e24018c783bc85119cef75699de54d4a0875fdd459192937743e7989c779bc579f4311f52f7bb06521355b02d3bf2d6031e5bad88b374186214c11cd28f2a9497fafb260f482f75a05aee98561754cccdbf7465527c9d0b453bdc22c1b9c18a80e16689f855ae05ca4bcbf75d9a031cc614b3eeec1794d2e95f3d93b31ee90ffb4f7b305547bf1e9a8df3b38aeb8630b6c51f2e9eaae1d71629ee55eee6298bd1ed41036e45eb28d6c96eb62533656e657ac00eaf5e0d809340f652bb380a66ca62c0eb8a78b88b47a645e6769929409bda9f76695a9f372a4e5d70613c1308ae5600cef308b0b0b5cd7f2dc546590d1f8dc34f12c71f63a1f82b992a1cccda45730a96ef1c5bfde8e5247259627d3cba3c357ff3cc156bc1e869b45cfdbd42575ee529c7dc40dba7973d9d7b141d37348ffbf054920ab952c61fa9400a6fa9abc29971c371e7b3bb8bd0957384c265552d1f887d4086b41c3953601e6869780a452f542a03d8ebed68e84489dbf32ee4bfa831b5ff0fc4e6ea0fc03e4233153c8faebc46b99ced03d68a91054139faabec9fd245f72f517a815ab3e7be56ea09491e905dbcba1fc57fc0642edd1b31705d0b53754f6dc39ea53d216204595d391b87b8b834baebfd0891a54dd8213bfcb9f49b8d3051831bfebef0f83dc4d893acf21b9f4825b8711c063caa59d38117a96394d5c164f7b935e809ee9120c2e0a566a3592081edea6125128d89ba6988d55e25952b2d883ff2c0548f27f383e8adec3730e559f4307ff80d3e905d5c19e4f0361495359e77dc50b92228c883736d8bbf6abf32340b1f8716049544c3907f1eb09b2802a2279c9f21eebb2429498d4b2450d5961543e9d81629c0f804b64df279720b1efa18dab5723c0991df31b4344c2a500cff9f84f6f3f33a008953f7737ae1671110123d9b96543a960df58a4f2040571d5ae999e697ab2be4b82f24a99b3064614bdd6d58737e75bc195bb9a388d9134f8ee7cfb1e898bb2dfb117d9dc5a62998124013f4f302e2896c2ce6386d3fac2d0362cf60d0041062b9c3a956de8cdf3dcf04d778fd27aa876e2fbb17b5b8493c222140fb3635550b590b51dccf2aadd9e9f160eb7837f53e872ee0474a8d120651eecb880174b0b145b21d3881c8bcf3c8cf57554e78ea3520effdd012063012f98f18111b0949dbe480b471dbae3413d46663be6633b2f49f3cb9bbf76acbe883cdce9d6b3c49119e3cbf8fc4243cc2757e2d2fa8af74036edbbc0fe0030a1155709535d955d8dbdbb0e59b2671fc8613de5caffc3659ebf394afd4b4171614d94017e04d9b1dc203a2cf9ce8de9dea164f99474a0e893398313a135def17797605f9a6af57414d7edb259af2b34773e6998cfe7a802b63c47804d3c2d334c99386e68fe7d26b05b5238e9e2c3821abeb84dcdc74d46803de33b61ccb0a958b9a8c84a4de51c4700e41b2ae7eb454198dd832e92052679c5028f7f660de6347f2df7bec7a1f7418f2ff3ad5d0710745355c352e674251b58120706a6995c6850347746fa483a285ca23ce180ab563b849d98eb22feb4dd7d9e2c97fce78e5ce358c173645c4773dfc76158114c990f93317e47d62968489c038a93e77cfe9a9f0750b48432b1acaf2c0b817d6f5b59059dee098e68b1d539ee8b8ad4de2f99f9ccbf9ae8800b3b412c95ee23880fb0625f62a0aa51241bddbbb9fd736f83e37a156886efa8b6c81c658b0eb23b489e2fd2669db85731850df7906c11b5be0f967de619283136bbb753756397dd788ac4b37451470f5c99313ea9475e551066d572b2b210ae2d8e9862cf7d430321fed76f268bc4de17d0fddd5f2fa7a23d81cd7048f24763edc9463003bc5220d772be61c77db047f5b4aa604c858c4197f8d503335a2b1709f43737bcc133db0b7f103801d7a7c178cced73dbd97aa7a23482b7ec4a3a2bf487e1e644fc6676208c435e5009f9ff13723d64979c01390ebd6ceaee5303175ffcecc856fe78a6c922ee412c855545585cf0df0a5dbe9a100bea38b3f4f46d9eeb9e5a4d27d8d167cb678d01ea1838a9e5ce2f9e9ee13f68a8810dc7b0bc9323ac9d18a209058a8efe559e7aa8d14d9a952bf2eec0379d7b0bd7f6b4069a2c90e86f9ff0229d36a1241ef1f1320f08ace370b555721038b9ae457fe3773bae69077c3ca1f4ee6a40e54a3400162fde537952e37d151995c7185005e0730f7d0e82498b5210a799d0aa6db111e5c243109f3909c039a23905d28e25359a842d13f15e186ad62749e2fbd005b0f154eb86fda994c94048970855665a4d5e4842fbdd304066e60bfefa4237be67f9561c08fd1b10e2d97b3441296f11b22eba33389e56bfd090b42d89260b27a14e54792916040ab765c89542b71ee7ee9c58925ccd37c33296be6a121fa0fdf760ce6769e0faeec165af4e7f96ec496d17b1c4dad26a16f74899191787bf9dc4e1228b3de676396b699da47a415db2b831446f25565417b926c2cf1c06bd83b4400f39378efc774fd2225ba53ee9b05a698ed5eeb18c31d2c1ca009205013c2ffdd315c942f424d94fcbb892e826debe310fbd798c7911eeaa2d321c1b4143a28b1c9575cb03de8222f86fc5e58b7a6e28357a684fb12457305af81cb1e426a6685a3ccf6f91e0e50c46c5a0bf8e2ff4af9e913d63bae5c704d1b716517051c6260a7038a934f87c6c257ed5ceb57bbc47a9965b710cd298883fe38b726c516c44abd434104361b2b312efb7ab87da5f70f4fe64e01d77664ae421fead3ea21334bcdd642d63d92281ad9cd8de7bb848cbff3dcc4963409abd6ce6e26a6dc05576cbf02b690cbb364843fabbc017b1f2a936d9040574daa06038a6d9228048ad9b47b10c5bb474788774adc2f8d243f7a91a54aebcd88231d3e5e6357e0c878612ce94896de1b163bfbe1aa0f131eac23c38452ec7f4e3b978e329a9c56919696daf2f15281aee82619ec5b841bd02ece31f0ef6cf508b91dfcee588a13c8ad21c87c54202d6885f0d85438b52ea48d23e2d26a93b81c66568f7ae6499ed385a9fe70ba2968b1b54241ff89cbd30190c9de130b884ff40aeb4fbe8c007f1ce6d782b76995bdf13fc45ad696ed934f01692d991a7442f66d8344a391d83f0998535e37aa8bb190ec1d2dc1a644f5f7a6aad84edf7e1a8c56c7770f3ff8650462c49adac433cef684f6c2a903f8815f4735e519a2cf5e1d8e5eefebdc8879740ed33c8701b69b8ccff61f74f330bff0aeb15fe1aa8e9610def2b420b1b204c162274e26a73ca0b894c64e0cbf143812a2c74b9040e44bcf0c28cf95069c8d522769d79effec66e39d0d5757afcd732eea1fb30dacf903c1e0aa4731236e9c912440e0d951ef7476b074403f0a83f8aa4f609e4036f4494e242024de4f51b9e5235570bee56d52d796a313ab1a5d50f09933151126fea2de9e316f83d36d6db6ea4f8f35028d89701741d88225 +MD = d7a1b7701fe36cb402f1385934f756c543d3e67732bbd930b1b69c45a4fd72ef + +Len = 46960 +Msg = 34f3d3c56a7bff3f4748ad34b079144bbc9b2019c56c20fabfe5bf3fc978358f0297be879e754ba4391078636a6fbfa69c28eb5a1926cf5768a93787d98e1f4b5ed1231a9c50376c42d298d69a4703765e522491cc04517bfceb78b7724b5660f0abeac78d932a5e0b95f4d5668a4782a91eb306058f0e2e24b16917bb3642965f2cfcd699c78c433c6174a7f6bff59326968001ed4d6f378805f2efddd74cb4535c3f8fe773c4e37d3e0096736e74717cc174caacc8da60cfeefb86ffb6da8476449c3aa01f3c06743580e805202ce454a775a86988b86fa2756c254a5c56cc6debfb1eeb545b74cc4ddce6d35b85b456516ce54d13722da8a02d14e6502655e35a4584f19889f42b8ffcd806aae7a829c642c77ff36e628a79279bfa1ab4e77e9760b4da762e503a01c906c592ba8a760edd9727b016d6ef084002ae43664ae6ac36f6cd73b24ea0ad29b7399d6620e432279c6fd0d150805461902b52a645c4a0ae92f2197eb7059b05358a5253331c3907207ddd069ae565738e99cfdba1c07cafcf72eff85213d246c6df39e98ac52b6469795f1f7ac5435c4420426c26814723f7757d89e9705ad2b360db91ef881128c08cdc83b9c8f706fae634c39cb009f150224c9942c43b934437bfb1280df23a6ddede9a1f978857f8162d47cbf4cb0123a2e39127b87d70c0896eb3fefbd682b896eccc73dafe3985d6b3607bf6943bb71dcad75ef3295071816efd39fbc5e8e9dc8f817f386193eb4e5076735e6c8756ba8ad5af1e471d9d4449f9a1b4c85447da4d21095aba4c70a88bf17cd35bcd46a1aaf2e4e1ddbe8dfd860dfdcfe6ae1bb5b114dae8104e5d09ec3a5efd6af5d0fbb295c3e3f51b89d2aea317f328dead9840c2ba896c80fa9bfcb7e185a0e73cf02b2816cd961cd8eb4822b5c994cc45a9849470e5d5ca8e8642d1cc13068bd2a79c12a346c9a9c471dcf2a0f835612b1004f0c6a5531463f247f0e94ea2c9da498dbb33f795aa938cf37ba0291083a6f6483f8271ee46bf06917dfedf7e8a9bfd868b8d8802078e6314247d042f1b0083d9ea6df0af49ebeaaaded46da2b45eec10ea7ba018a8fd1fc757fe3099127fde3e574fcb9d032fc71a7d33a114316b3db240c3e7e07528e7947cec56564e6c30fff0f0aac15dd2c567c1e323dee70a19f5f52e07615756e404f90f1d6fb90fa0a51c1733213f1e0b1b11ab9a08c083a8607184a5a334d13e9e372f2eeb3aaf57b7428e11c79259c2bdd754af98a31d117b1c8d6caff6df1cea9e1430d2b8957cbdcc1beabb3ccc11d67aa7099877217dce5f10018c83c9a6719785cc2c1d0a383f2187670327bf21ed6269510f26d713e2a0d70f42c5d706ba884caa025054b3c6a9992fa93979198af7652e069787fc3e48a83cdaa250614eda2f715b39bb14d9cc1bebb55c442236a0624984b2795f6ac04c305b047ee2b3f6f7ca40c0898401f2d3422d77666477c82749915ff565ef6f8b94cdd2a7ae73426c5cb8cd042ac5838bdd1b722806d8d47dd73586423654bc2c1039f414f0162855d0cb48762fade709638635d231de2d2c9b790fa9f92111f94ba6510dce220f7bcd811925ba4186167d77a7ac0c133bfc3c64e272d7dfd5b8ee1cd3d970215fa7fce3285af40ac979d3f5b2fec0fe66b563ffe8e5f7156f32a0a361c2ff9a7f9f04f85d5c048f16fc0c083d0f7427171eb7510749824b492f0a44e30ea316d92b8fc9a1751358d665d0b831285117b400e16228e89f09ca77d4064206831cd415425cdaeb49ee727dc90e74917f55a723883a340877d85ad1a5f264f2c834d824c7bbf207cdd8500c9d11ef922569564f55e211f2313f6106250e321a99e64d1fc6eecf11c89edadaf4ca8a736bdc2b4cef61a9eef6c747dffd6494c51fbb9ccfe6fb5b5161c977ae773f2e7b7a358ce100bfe243eef67521d5fc733d823a2bfcd0ec7c0ec1e08e51cd7ac1f37afce3d82d04a63b4057519754dcb5c8e9ec636d2cc91c920f6b898c9f832c2393ba97f72039dc1c156f4408230e44af7c57aceca198222374f3cf2595605853ebf5100781666c2f94c8b73bea9a063a65056f3fd763760a18ffc8e4561b2ccbad38b6cff7913dbce6e910f95086e5b0c97e122f7731008f2217dc938bbc8fd2ff08f1192bc4390b325ab90afddcc85bd348ff84290ba8f9bbc373f8db496bb209ef29abc5064763a1a418369aa49681a8ed9c0694f856920a8cf5ddefcca7b1f474c64e6c604f0e5b4e9745cfe4396b73f5537d6100f2a038f9ca086e4c2b18e82030cac8d83a5287e09cfe43a698615ae68bb0372b646c6c935a4101d2df2f0c79cfe78279ee784de2912a9ff19baa854aab68bf82943ecfe00e525065ab3d89090c6d424854c7d6dddd918ace2a901da81d6da10c6a5e896a4c02020d778c87584d23af4f54894a59e8fbad432d594a89488784d1cf13c1b97d18c0d22b622decfbd27295d704d1dc1a30af5b8c4e3374947e10daa9a69f530a5d31bdaf08a34f7f423322c38291f0dbf73a1b2fb701f16919ee2ee25f4cc25999fed5ebc612093f3b99ff0249b51c931af38dffdcdb882f21c6d56086f08ed493ce23c7e3a2a0a5854c337aa163e9aa5f84b8e204eac24e5f3fd80d63b23de2154aad2ca97a9e18e7f5c615d4c3dd888f95a4c17956262e98023ecf3ebb59eae51a7d005ec38bff2b3cc1b929ff829572cd5a8581463d3897b70f905e336a56cce59b2d4ba4edc417c82b50e73c603acfd5e11465e28dd2230554370c41f68d92530d99b8464ece74420cc157a5fddd6f5441586d54a065039414ac900d87f7ff0ddd2eecd0358509516cf4c15fe3e81bf38338e0c1fe5a000d57d732c0a4fcdbbb13d2316b2b51a09e54d16d959ac1995aae9b08542d17e21825a03a82d604ed05b56fcd3fb79affd0cb40a26da8d2b130ca6b2b32b706715c87efef7aa377fe91cdec097361c8ef90da29a90f97812d1ee08f9286248e748284ac9ad196bdd60a62312d30b14338868874caa4ef38d4cbf6ef8576fa16b53125bf83ae343e3d167d26819d3074a259dd094d54365e6de017734b2ac308fa127110f23a0763fb5d25b34de365c1f5b2e1d07a46f65ac10448032ecb06cb0ccd70872f9d9692d78862c0d829d893f8389db299a3b69698e0938774814cc7b3092a0d81fe69349b3f3c356b98125374941895f192ff79b91bffe766731c64b66ea888328509b20d29bcfa4e589a67326d5a63cb3c586bee5e940b4ccafe0adfa5f1e2885cfd72f6efe9f7c990f839f76c6c026fc949d4fd515bdb6ead7a21f4560d01cca8cdde1d39cc152468b52f8e39555c25605a1daf9b5b4013451911be2905cf4594025d4cae6b3aa60958b3be7b1d57352914accce59d2085ba624205c4e0323d45235649f6d04f989b692c4edacddde64dfeea1cd627650a33de1d91d2a614fae6b833ddba033d4245710207006cd582f4a13f661703f5ebd8130829f95f5cc59d495bd0a20aeaec30f79cb19202264f458314744f39ba70d28b6c97e114f2e6925f36ea55ef40de848364143b98ba96692ecf0c27cf9ae049ceb2a133cdbea5ef812cf37cba265f689dc1f7a134789e882adaf747cf7f85646240109790a74ad938a5b2be7183b904ce1b236ce148b1c8fd9bfd564050a54cd180abb467981c7a0b09f0c41e4132819ddb6145a4121554317ce5fd2bf58929a3d83c33597664fa82c07535c8471307936777d487be13524ee379e3975579225eb289bb6e2a6b81253209ba787da4bd36282dc09135f3ebda3a7fb18c5abc5f8c755cf5af9c76367dc874fb35cb2ccc11864db1ca5dfd465fe8c00e13eb9c09b4897b8923b4d04111e87d9f0719f55ca9ea9d513b1f798c645504a332f05f485f56ae1ed35bc0cb69fbee4ff64f459488bae745eb64aee472e91317f3524e431444bf5cc5778dfc0e6a8db20b55659c3560f138e212e577100cb4135ef7b1235bbb74ed03f180fb879c23714d139d9d384284d02912666cc626b13f7ac8d00fbc23977695b2e1f15cf87733c57234bf1aca67b5c74d79ec1c9fd0424fadf230c0e4eea281a1f80516e853a179587429625e6490c4aa661f9bdfdac5e58f61aeee664216d1a50c603cd27d6273aea304986841092910742cca4e966f455463b0cf115a7d8da866295620be1fbb5d0a77444fc7c7fd69ec3c3155cee976e6415ee94e007dbb914f89ed39de80574cf1abef7bbe73489c1676595a48da802b43e1c783fabe65480da88885a52c51629fc72054eeb413913a03c9c7cdeb6c0db061ee1a11e992b4e8adaf6cdbccb1895ef460421e336530a00a090225c44173d205e8790da64bbf2ac0ea5647077da8745a36ad1898466190b4a275180c0744eff63b0ab69c9750190bc2abb286bfa62a202afda28abe0c51291b866e6bc66a505c7233d4747e50ffb3bed3e4f17e6dc86fc49a85b1d6192c90fc9fee8b87cc3d5e125e2ed608a522e36737a5efc3e4966e8dec89b695706911ce2762115152fd24a5f28d683e38cbc1433dbd2895f3dc460c5c754104f950d6188690a82de4dad7b357b9d527f14175dc4ef345fc82e11ec95013f9299d2804622340f6226a1a9fc2f47ac3cbb8ce28bad310ee0079ee1f4d3129870e423bc635683ca338cc06a35c3398db3376b8026332ddcaaac04b701f688092bbd1cf4217bc4b5877f2e60c087bdac46611482a61d51f820140403bc85be0c336332da0938734bde8c502014f3509266c73c6c93c22a1bd0ddf15a5ce7410c2894e9d092e32c079922ba1abb7c7edab4e827a067a832a24d78611d8bb1ada36bc0c66a57223b7357e0d0d32ca9a4ef91328ab0aa55f815f661e7dfc16b404c8d554d29be6c3e198b2548cbd1016f4b8c34ca3fc441d6f15c38da13868ac571fde0d2714127a054b38e6677410a3a79167d6a805e027bceef4bdc5b538699be4de21ae377fb1edf518ade68052aa2e2b06ad034d00e430940394319b0e5398bede77af2db4ce5f3f589050095e915230a8bbfcfb2cbc92acf7fc2c1172d21556e5f7721d393b24d00276ef36bdc2db4555e7da38ed17ace1d9dc003fed4edc53fb893e30975e04521d490930f6a391141619e72bc95d44d8b01bf34e062fb35e28155d8d55a1c66ab2f0e71f919e3b45f23969fd4af6233c84a34e6646dd631f7583155efb6b34c2c853d12a161aa380f230a9d5f84b11b35e5b59ae34c1b43de9bbafc812231402675a0e790e7f8f6c1de4efdc5ac2d6e5452b5b4f58416d618da672f521332fd297ede8350134c8b17b3e8339f8c4397c41fb9e713ac65832672aa80db0024dd861f4a58675a316f81426ac155aba031d5ab3683a63b93b598230973747f836bfcc578e93f43340e9f185b398090afc72993c02d55a80df7de3a1899c6f7db12de1feeb85054c102b1941e0e98c1eec23057cb468a7850c479463c464aff987cba7d1048331564c6794447b316b5c9bd8a65cc51cd32e895e9c6091b690d4804026b920b6feb9bd446b74cc972f2ed13885c47f1865e5206c037e37ba99766434669c8946f6de2b6ba5bb1b445ffb55eba99d2885e5119716d1a7009a5248fb517064855aa12b5e834a00af60832af09a1bcd098adb19b7060fc2327b43b00d3c4bf75d1a86091d35632bd11223256aede13e6a50d06748e4c5b71688f51761a0ff3f59af2de13129f623c982c8538b8b05d693fe4c621257f96ef4e6efe6c0239522c0411e1963060ed2dfd9f91c1a1d8e7fcbbdd572dc08b5ce14c0b983f26d148adcf7e21b7974b01f5b3f3fe8e14a85205bb5f5ff709f00c1bd3cdc58bf27845ef3fa004d3b1de6f284db211fa6bbf1a18b0d337194c3e32f3882dfcbeff9ed864e72001973a6b733a3d627293217dae9a3ee1731111c64fecebb4a46498a58e935866be6e7ba2cca0057d96f4d0749e2eb7f2aa5af538e17c40fa6309683cc71ef5ec71b60ff4ba0e387c057be334473abe9f3363510666265a579f19e8b5205c6239f22a61d1e9b948e634a4f42d6842a53fb4c6dfaf6c7f8a64ef1294bf18d00fd786281bdada45a934ab1c6dd04feb1e6c8501dba452fc439aa97ff6bb1f2e613dc43b987fea47fbefef2ecabd8c788c9e4a80ef85b801287174de7929a1ac08e522d15221c8149380677895559c8f725d7be085b41a42ab81c7bab68b5eed69563885f370c250129eaa665828fe9462227f9d38bfe8154f34287119709566f5195bc5d6dd776eeb933e947db8313bce75ec036319a01d8600fdae2c49e3bd5ea7331d86d865e5a0e68a7f9073c2ca29d037dfaf51e0bfd280ddce5997d834e87825097de21c48b53114741afc21d406b9f97e77e91860d73c4f5e4bead1823504c7f6469ae8fcaaeb733e87b1ecfde7ab976c575fb5c4e68bb8ea5db36e09c6e582705b637a95f47e1d2b6125729c4f2d9825c81647409307a0df29721c500092eb1436cc3f99247178c721d75123afa8823744bd5b685f289dc919a75ae99485783e6335b67abd6e1c9e643817487ba4cc1d47a550a0cd771614a8d3a82ad545a07b6b506dbf11bc8f1d82d8236f45bb0c445b7ed58e407b906e718792b8555bfa47b97cc3dad3f536c11838040c90539948faaa48856a9e9322ee2399069720fc1fc84b57528690ba359ec847a4edf71997afa8282aae6894ce9948299a0d3d1c80222ca6ca7c276fc771094ccca12df3bce508f2e28e522beded55c2e74a18d205519120875721ee03598bb1e87c50be35253d47518cf3befd64ed0372b04cb31bd129532d9a08bb8592cfe58cb217ef7cfac583dc1cb5d4798a7e59c0e23146302b55cd31a7543eaac736762df4ebfe10d0223706c020f2eee87a4456527ef1eeba96ed18118d0e0f616fd240b735607d4fe3ef4619bd90c9e96131b7837e5ca4197d41656b1ba00ffbcc88696b9ccd3ec48b0b3e8bf4349717d3d048e7c7dcfcc269488e16a87b48e0ed171ca47a8ab1c8781934996d64d2fe427e9f11e3f9554ffb8116969c1636db41fcbed4672f92d63ba7ecb471981a072dbb3e744b385a1c9479838d6ef746255ba7e48ddb324e886625bb7fb954b8bd06048b91662057a2d4a0494da9a513699ab702335f1941295811255d9d014baa6be92afbdd37ea9d3c83fc69d4961b12af98bc675b7b1763b208aed0a5445f39bfd7810618e59f462c9301546840c9aadacb578c68ae3db1e45adc7b5a944ff5726e126291cfc248356bfcbfdd4babbcdcdd88250f49208e6fb622b03557ba68341b7373e04d101dd75d42fecbfd3da3063db2c3a7c26c63c4791601ce250afc754e18cc8ce3e521931578838cfbfc07e76a6beadab07ddc83322af27d82de4ca69476dee03ade1de8f301f0c8ce735600f2180d0079d1531c6fe604cbd790b3587d121d82a8574d599483c8e7db1007d3434bacc1a51361f080bbbb51b9cedafb767f2afcb2ed4a5568526e62a86eb7ff0c7b3c86c89073c0232078779fe52e100f1269b6e10c9f7ced0273d1bcfbc0b48c2b4ed83ae512dbb5c8eed600702726a5706c39c931a730a1285bbd9f23ccc460d0562e929dc9d3b6f960d571fc40bfd81da50dc1f91c011318987eb593367f190ee50266070328b55680fe6ae6154c257ea69b71cf487eb177bcad96a69875134b7dfc0bdd594b2f44c1c951ca2f4c0c27d37b4f20c6fa1aaa3ab2c8fa5d26fdfa73641a7d26cb836895cedd14c94ffa8dde25b09a1213ad448536b2fb1f0527a077e31863162a60169f675352adb88f3509134c97b44be7bb4e91eb1538a02ee1fde16c1b81d833f3212b5b0037262891f6cc89b618136892d96cd7f54488821377f7ac2304657d72dda36ab9e009554929c9ee51c80a9e5fc8201007bd1ebfd9789e4f060842bb1a2747f8cc42e2a3af0493e1075e81f7769d4419c92ce33698723ddb3128006b5d90819bd3da42825839a31853162a027bbb516bb5fe6694c4e75ec730ce2f0cb19bf8aa4d10997fc91b8feab1b9535dd3c4c07c5acc2949035a899981751f1dbacc05cab480680a763cb2de9fa2ae58132c29c223f09bc1c84e46c8afb7512cdd83416396942ea0d41fa47a995c8b9fbe63e5d3be064e9d88350eeb280f75a89e64341b5fd66dd18726dd352b518b733a0e9d376597b24ac7915a6766e7fd2f71e146489cc1961af404d594c22c1e912a8ea853c71f57480b05a1c3f8cb48000c7d0071c9e047fbaf1c261fea46c577e456afbf6ef7be23c6e48d976a33f6e8a2a9eb3d63bce3e22cef374 +MD = 331589caf0efc52f0dce03aac19b483bd7cb6f26867ba9adc2709a8887357ba0 + +Len = 47752 +Msg = 53540e1afb3bfea1a7b944cc69e2b8e7f2f99df8bed877458c921c1611580ebced9908d2de6dd7c334346b8d857a2ec4a11f95d9c8b4f49c1b27960051a30d1eabb2c77d2aa5e291ff354181436ae02ee8bc6470f079f7a2dc66526268a91b9275e672a247a9c712f004ee320c79752daf1935459cee2760b89779c4be32e11f337f32ca9d412d4ef0e89928496e96c9de7f2ee135dc2ddd950132aebb0607cdcdc32e7c9437bc4ee52b6be96012ea0b5e3477cb240bb0225deda6a9c7ec34a42cfb8f4094521d19b9138bffbb2d1afa1580398bd0435935f6a3fd3c4aad10ad366e7c9e0559f8b752e921f2c087cd9eecad9caaa04cd0204a6b5ef0ac1144efd4661e1f4f15f4319af45748d9e7ac00cb02c7affeedbceb3f8df14c55e07872ef299c4ada4eba8e777e538b6d165e279bc6e32251f0c59cbf50e0d8ade2533f6d001fa80ecbf2d6d3cd3d42e3dd8c1b4242178c001b943db1fe501c1ddf7e5d3833cfbf54564312952a3ef6a502dee5aabe8c747537d1d5fcdd6ba10b9ea1d4360ad31a12b55549a5dd7e2e1a4dfb8cb9816962170b246d8a3659eee0e863ad51cd543eb1b1d183eb2e2472aa888c1859d5d7de4e61330c4250428b05856cef6fc379b59a125fc84e65584abd7938927100fe7182ffa9ba0c754d01e03d65a27a356b0634a0a621b9c9443fbbeaa801e94b05a21bae2c7fd0eba2d7dbd8f6cf596b51b9e6234f9511a30dd80da1846da9fe15fa8136646476fb6a955d1dc67df4ad54561a62012d3f3bde9e196673df986155001d5ffb70e7edcdc4cdd57eb433439c66372665f02bd9dd1848031d5da0bcee3c55f196ac0909f2eb95c8c57cfe745071a53723e6bdc532ce023e2bf2a856073692b3e01ec59702921cbe44de3d8a99fdcb5de217de460648b0e145a39978c9773d6e7ed004de2441ca7fa3e1d8cb9e9413604a8c74a6810fb8b2127a596a5c86bcea1bcaac27818107d2898eb78088bde407044c682bcaaa847a3b7ed174e7eb79ef5d12a6ba40d93b819eebc3f07e01a61bb85fa31e0aa17a0067b7e9de922fda45ecb2dbdf8bd2ce528b03e265a9e6c2650dce0cc7687d040e3f2e8aef87d949b371b232de87f2290ef8dbfd2530f69eaaaca08a6d0dc4896a6bea9af0eb712d03941892fe5ec4b27d8c7dfd793cb9a3b53ddd0759200171dd92f30229e97feefbfceee58838cdd266f0f0c8a9f5b6394d678d6ad4cab9232f5c52abe2a68cf464523c12c43c97f192cc3c48fd8275c939d2b99b2433760928730e7c634d1fa6053d0801fa93a978cac76a63bd0c7eb9422769819182bf8a907c2f5cf304c16ea8665c9a72648bcdd489800330ba5a73300ea30665e01d0e2e22be35dcf3f9b313743fc573d8c65a78bb890f9fb5905dcb2e7111e67417fdcb0ac2ee64444fde0f10ba6a4717e18680058a6f5224a8e1da30da8b5e6735c02fdf436fd41c4b5564e2d371344864b8b20e8d0b91302a6627bbe75a13e0ffbd22474aa074a67681da9194c28394d75ad87f99cba4019f5478789e674e08fe5d6ceadd698b0757ca39c605457c22c3d3b8ffb797d2be8f12960f099a5606b908d47207b2636a779948282de3661bb08b1b37ee576590800a492730db7503b8272484cd6342f55c54d06014828ba624eac8ce46f3a39efca358681913f127842022cb396471d090659915c20b31eca958896dc753d5118a458d7cce281399a45d97ec529d38249b326bf04067a114c63d24bc7a5f4210b358ae0857042382a0444a9220f6de1903250e99957c234704016262660034c4fd4484b7ba8d6909013f0563ac58add652a449b7c934feade90c0b08931cf154f272d72e01ad2c574eb58e07fda9eb840f19e6f2e5767c6dffc6e7550a9cc2e91a486f18344bb6930f0eae271bd3e14ac3ebabf4ef29e3b0ce98bdf2d269efabfc2f131b594f4de6cdb12d6b0fbcd751f5826162f2377c9ddde85786f369c0c120908ddf7aa03a780e08d37ae04e14c02d46d0e7f3878f5db41f7bba76867d540ed1a30d9e28c5705d7a68fd966fe2c0f49fbf29fc016417dba6f23662a76d8b4f5c1e4dcece35f73f6fb39b3a098779d0f5f7d0148d42f4dbe384a1bfb4d98f6a97c546117ad4343e4f7dfdd3034c124cb041854413731c3a40f8a496940987e7ec62a16f14e850e1838eca694579b4ed3863f0937b3db6832418e6ee31459c4fc2bb05f085ba72b071aeab05b756863df525b809ade9ea3bf7aa10cf72d5f628809a1b9db392c33482a548ad412bb1c3505185ae92bee2ec2077c9413f00bcfd90c58b7d87b86bf41e3a486ccb3f5c07afad018b1006c31d0947ba4d801017535904fc98e9739179ae3754473ddbb0927b03d2a71007b85719e28afa1d4b2eb4432117f7c20c5d49986213487f47d5eb1d19a00a7b0be621b80fe251fffa2aa7b6e283a1f8cbf8ee46832e7679cbf29afbb714bd375878034e986a580c6432b51a11e89e75f88af01e644cd914af2f287fa7d5c72e3694854343c9192dd36f64d774f0f71fdb3ad58acc167a363ab51c10b08c3046ef633000d9a89c4b8d083f55d441b3e0bc3127f1823360c8b5acfe1599e10169ca0c8beb21aee74cdb26cbfdf883da9fe2976dbb4f4c93b3683c57f82b7b417e0eb71f6de584041a05f19235aa5f75449693304ffb091cdd9b8bad202e03f86d048e72efebd1fb9b53901b66b07c8bb6204df7174e11023096c48bf56a202e1ef4b60ed7fc3ed2b90d2ceef9d38424dfc8ee4a7a100d4d93a00d76dfa67bec78255a7b8ee073935a7aec9454db1c48a6d69eb1e008a406ed038ef846acbc3965e1a03f7d5f174668e3f994e190ee00f39184b5b1ff7f342805719892428a1ecd6eb0e40b41d2f1ca907a7607baa253ae42c9dd56bd46df2befdbdf2b318da29615b3f29f4d4e9e68c998c32d20e04ac03194b2350aa00fde09f6537a406ecda91ed1efa34c30542ad67b02bd8b4fec0fa60ebbb7ae35cd299aea7ee539d5a7eed131657e07231cf8fe4abb1ec3974184e95f804470ae20f4ecdfe8d5e269394d76fcdb9843cdfdba8b2e76b89061510741ae894519b3112745fc17b305d38aaf5459da59cbd6ff58c34ebcf3ba552581f8235f2071eba7aaee6995e568bba2fab471e92966e72abaefd31437081ac4d854e8893f40ffea652f4fead5d4c78a18de6c9070dba887c956e407ec435936f69e228f084e96e2414fd69ce910a249ef1a715796f3c01d6b42aa1c7a33b984c11dfcfae5635998249825358be6f2e769b0a8c70376d8f489f94cdb49a0e3b5231b9c503d46f013f850653d221c606d6de73a671f2c97150cc4f3ccc1527ed103de2a1c78c0025ba3c0bd3a167b93e2e2094fbf53dca687daebc7784b1033e148afcfe3fd9937790f3056b6cecb344eb25c0e580550ac52ddb6ef664da4aaebdcd6b22f3699397422e75738b4d4eabac429a0b99f4e527ffb6d941e31d48afaa69bfd878a87ad54c62fe9492f5d5e2d00b72d6a879f40151e57dd295d697b138e46d574612d3e22e24e3470a73037af4e50dcf4270b1d1c2dbdf30e3b2b27407c1e647d245192e55d8d5f3584131e48963ad5dee559919d10e7fd5531e13388586cd22a39bc51a5213493202fcfbb01c0be41b02b53469eaf1d2487a9554af40a7847030936246a158bf7ba0e2cb5e1b42448f360bfe12af2a7902b0a4d128a7b8aea91fc87b33d21dab48a8af1b5f05bb4112eeb660d46c1cc68c9bc92335491eae35b7b76a5252d68f1180ce862379bb6c5e9361070fc04d6d5e927ec565a35e05be9eccca22b217ed7edfad765bd5d718bada884b253a30bfe14b32223a350b37ac4b8515456e5648e90bd87658b8a2e8c00a98c7c5486b40cd1c8fe4137c8ac677348cd60ae62623d89bec00ba70835ef6da1ee7605951826a9ce46591e87134b7e0308713b7ec00c616449ff1bc1cedd79f8734770b98175232dc3126073304d6e50c92d0622c5249f16ece8ef9b417eae17e3979dd83520c74d3d1506764a96ca99da3c1637baadcb3e6f6e2980d5f99364061092db7d501d967c091877aa4d1a45014773a3e7ce6e439b3ad357d377b048a45859aba12dae7147979c5d999be7bc07f6265094b00f8d38f4f408831f8e2c8417fa2ee9de014467679c125da8b765b4f03624097b36840e44957a2d1ab4766ff67b4e9d8c9e78a5201f7d3e9b15aacfdeab098d566b90e4d0bd97198faa902d9ce6f2045e0e76c76a2e86869c86f222678ee66a693719844374468fa7f9e086b34202677dd8a595efd0157bd594a67334e6a2e6dd2187b443c26fd68a28d042e098650e10846cd9540d12676bc62c8becbb274adab2423d78b0fa375fbfc628cdef0541409b355944ed659089a4ed3238155cde8770b2e78c45d0fa4e472c01224fc94835a467de6579f73f55b7512fc0fd29e90de53f79248ad7678147699586c1996a162769305fb8aebbf786c14c2b7a76b5949952bdeb85f8c51d47e5aca24b5df10baca517dbb3734e989aa34f22952b884313517986401c5e4dcf080e1ef8fd233ebc825b81702f3e607960014c5531ab42dba676a0c3297837683a82a1cd6249d4de68c3f8f9c8d476ad612a52c26e66ba79b77cdf14095c0399e3d2d3d472aaf89bbf19e956285803be0d92dbe4cb00d375ee53eb3da252daeb6bc45e141690d07af023fb8d35122e32cb0090c430c3b458b2c26d46dea1e4e53a21e7953741840361aad7a8d9492093053e186986f586aa6a920d35a393480fb8b01960bb063dbe7b7524aefa47006822121ddbb3df70f1808b7214db6e2ff14e3b997c8c272334a64e8ba88252f73a8a454423a1c99bb75b7545ea6d7bc014628812f190ec5dec4bfbb49d58b32d90a49f374836fa2e8363182dc0410224ff5e612ac8b19d146ed045469564b2c9f2dae79e525cbc52de003cd39d3f4b823aa88c8908d5816f439ff4ea998e96f4e893e7204afa552f4f9aa8de894f9d034eaad1d8b9e6e197f21ed047afbea9d5fb38656637f80eec5e9925f78d5942cfc2cafabfe3cb05b303b7a006e2dc3195b22f2a18213d2fb293657bc6af45800d1e72cde58f6c35ecffd12ece37d0775b96e1fedd10b300a8776672f2f9fba0e5eb0914f3c5b1b96a6dd34048b882c3502eb6a85d0d41c9f79105d1247363e980aff795908b82d854d5279f1b6cdb5d9b0217f2411fcfd1c669a862032466a506f5a31965ebc7dcd2bf3413f05bc18c669a6aa2314f46613e88b9eb3814ea1a9f4277671aec680b0eb462646f8e1d99d67f1881d4a48cc187759e356a4bd8927120da4956964dae2d3b19593f0cd8cc15388a57d3268a39c8b8c10842d21953a7163485c1f25f0c5addc1bb09ddd86d4b4d27ecd5dd281129da882c68b093a567adeee40407846fbb21c252740a07c49f46560783d24f90d3625d6883ed30d2d96b6e2ec7dea51d788f85e6299a4c193aac8172850ce5ffeed8a7853b92d72127db1d2bb17dab5fbaaf703fcf958eb344070ff38293d3a6a1c5cd4c3aa570d9768263a26bee7c7da90aec240f04b7dbe4dd6853237002cd15b039822531e243f1eaa95d9d3902bf6c27625f91eeaed942b8f4590faa59bc722152f2a73b17a7bd9a5522ee64236d2c8e38b6fc5b5bf5871f1acfee49bfbadfa0806366cdf64d051ad1ba0679c9ce10c8d8f2f953a677db9b457b6a561e1184b62b9c0aee677ceff383ed8e7fdb2b415ca8db2fdf77a665b3da2729d75d078aeabb663ca7527da3acd5822e7f41cce6d212384706b6cb4eef4299d3d764e519c59889a4ff9f994acd2e438d80e3f928b37cd3e8d14b2ebdd7e59a115b1bf358ce2bcde9fe37150cdef5f6548aa9fa2f865072bb461e17dbf42bf18b6d6a78708ddafab3ac003c106894642aa57b1622d3f5de677018ced0cd7d68e81439be898a0ed7ac12e3557ff37255b8da41972923d3df95541f9ac3ea41c5d059700bc94e302d7a37c8a78005f791a630e3c36efc523cedfc1cc5dcd4e1d1ed42f7a85b60a6c4c523987b3c288bdf9bb049e316e9dabf166ff8954512c354e4dab6dd6548da6436df3919dbe396083f615b3e4c6fd32eb9b59953232c5116602695f1108f32d5747295c984be80d53b4b021e3618a5527dd7e946a1abf1de07307d2e83bc18de28e493d35f42b10b377624c9fc6bb8f30bdccfb8e4160d7581ff54dae757f349fa3e1a7e95f69275daebaa88c7f075d90acc32ef17f50ca4779b043e63e82bdc918714144e6389dacdb17da3bf3042cb23affc3460d15631910d73a220f8286096c768dbb10fff01b8d083620bb28892fe8e14cfe73053e4765c8b4d450e519cb006fe1ce7845db34151a60dd4feb0f642706208d59d6b87cf903289fbb3105a884dbe1e174a09b8133bcdeb419d20bf985ece27529d06e043b2529c6a6ecc60c6a3902b6ae76dd8d496e0457b1642b5a75f407385ba8cb97bc8d2cfb9c7ee7711115c8908e5efdb2d6ac663a9f17da0187ba035977b65d81edd9a6a1146dc67119e0a8118ccf988c5c0698df4b7384792bad6b6b068f905d5f692b59974fff86f52825bc322f2a8459fb00b84efdd73be25ca3bf60ab00a481da2f87ad8bff2d335ac5f30714203541083248021d3ec43c3650f94e8f3ae1e59b27adbfb851ce45070d5884050619b1aca2210d6827acb9d8d79b08b28b800b3aa84e563b73f4baab704f218868ac1c56d4b5e9452e5fbb92bc07379b9f19531725ebf9abf23b04b673597804b456f1955e88fe6abf47d21282d043c0c2186def25093280390b93c6ab09e00075c4d1f6840ce51f571f9dd6a088b5c8b107abf13a28693ed4e1184a6bd3020239502de8f9d415f982216f3db99325f9c851adebb9bc265e3245e2b05a4756905b9375eb3451097fccf7d6d62271fcfa9490e42d3846f254fdc493a6eac9462169093a8ba8164818942d652e6fc7a331925fdf344a5b45c983c79b8c81eb694bee1bfc38e9965a6a842c8ab515e6c1454de8ffaf446ba91260d97adfd420285667662b715d53a8dbf96fb7f8a961df9c23f6d5ecdafa94c61164a22f460a1bf7415258d397d0cbf380718d679ebb46acb0f3f27b628a816b1213b1d95c0baca5287b04ce0d802c2795dc7b906a759efd715ac5d96f8df757ef411a9c8aa762c6693aafcf42f4520ec60af2e191036114e1a5d09576877f3305975cb7565fd6f1a03bca65ccafc60f7d779409a70705798e6fa33e0c098182f150f8d843a761ad59e8d5100f1500b048cccf4710d324a1d412ae11948696be3f386f6dd7109b6fe2bc605c8ec69a87a4551548630a27045f3951dea471374b5ba830e6952e0caff730eca9c026ebfc1cbb067c120e85479c3e4ee3b07bdbb0b31adde0e2420de3f3e0ea9647d87d941e690350b272d7b1f7bbf5df4ce90c94e22ad6db531f47b26536da908a3de7d615d99c74a8b996fa1e1cd70fde5b425e7532ac447bf82281c7cd4d370bd98338cfa7424689553b765beb7313e9450573c8ccde9aa17f26d897feb2d8512e0832783c9544b8d84dbd5d924a8a0228de8b7973ee6c8816dd2d52559c22decdcf69bc13f60ddbb536357fcbddc09d9925fbf3b24c387441be06836c7975191b413507c7f4f0466e9d855ed2ad562ff8844bb3f2786d1aa231eab7adcb6da4a9162ae7c3129aad86dc23675129b94dd9620156cf0398df9ad1404b94126ae5f9b6c1e88fcf7b65708a7625c1e3786bbe579348a27e3a37ae34bdcba9defb718f9b8066a88c0102ce211416af5b01fe19cda8061748dfa75eb4a9c46991adbbdd4cfcfe87e8ca09f22873b673f0e4996e4c861b87d3e7c32ed99aa25ddad04955337e2cb86634ef7f192b81aa659eb23e5cd3f58edfe10f812c1701f10b319e99f7aa5da474e027e76b9204cd09aecd0c670820a6ad59e11814954fbda310201df1f82df6a54a47ada84dbc565d936e5b03a92949ccc0fc363b9c083e531a7253cafe0a0967e1c34447b514d0e1cb0aacab1d8be2dea4957e09a1b7dd6baf09ddeb127e774d352f4dd27eaac736d42673d5fba52c23835151f73cdb258d5c5b0ecadbe7aac5b2e02cc0f0fa93bd3d46330cca11606bcbb4449cc3eea11890ea88e2c0f21e51e99a53abb260e0e574ee7cc7ef6d49e80c42d852dd6eda9deb3cbeeb581a6c72579264fb499a196ff983b38ff1f52358c3619fc1ffd82c9dc9c6231d07cd0fc77b8cd3281ce2b78d59ba79dd7865971e6fb4ed6291b73198cb1b482056866291c3ce20caa2f735fe13d73238c91b0fa98f9153ad4988640f5db0b07ddae31f91defad04b82243f12a67e6f1a8aa2179aa1ab550a7dc84e71f00ade8dfb4f91181b77643321161d6b8024930b3387296224478412a4f34b51309e34e94e3851c507e84f1a06396b793f4 +MD = 6dea469a89e2a352e089bae2d82dc3dea2a9f438acdb8790ff819326bb084618 + +Len = 48544 +Msg = 2069c30580bab8aa429fc880ef4fdc1add9031134b7c09f4ad85a15745b7624df33d5bfe4e27ef8ff36acb491e281cf77732fe8f2ecc371549b025bd3d55f550bc7016d0cfbced5f24f6cb5da92c1cd15a38e10a5688608639201912a6e1fd33230bdbc52a011be27c4cae05b9e3456f2ea9c1caee38eb0d24dd669fa7e3e2bfcf159123887edfdfa4735e8976d4ff9b9c8e88181c644273b3f0f2ac69e40bbc6996223310bca2204473c1310787b31b4bee1d3c0895cc7f8d60a781146ce2f29897753deb42cd6b0355c1449484c7b8e5d1687edc52f1fb5a356c65cf01ce28051e72894098c6898920450c4754a53a0f405126bd2419adc47728a2c22d37285836015e3847f7427fdc34cf467eb3697341c07bd592ac5f712fc57e167785b838e40a06fbd6c65d8d9278d6b98a5b0db9df9dc64c2412d709652a42f36721a14d3275c7b0cd9da45a49f869c90004ed891fd04f4a62b4de351f3f35808671aa40272aea7fb5e3dd8f099cd09d6915d2890b415ef6d5f83b9d67eca1e65bde9db9cb12b6911400d1d3da4c525f4df88464aad93b780447b8e84419cc4c6fd1415f2713750e755c48cfc5f038343214cbc0047e2ef9770a1bbebfaeffdb48b05ddb42166d1e5d5f0a2bd170cb46a2d16f4622197ea1b7a72dc9de9382bb70e4bad42504e8e75671de8e07b450bd2497379d0b9374974b88b6aeabb19d136fd620f3d6c32c94e7fa8da06da512c141ceec6dc7d25804bb137e182eee980bcbed56e05f3d814b9962e00a0e2958787fde56605fc0720f90b24cad6e33bacd0e902642c7583134f2119c74ef29690d69303d1cda4409e151cce91573694d7ebf2956c217fe83797c6f8c851a8e8ea6842a6949404566a186c81ef945769749671faf075616be3fbfe577e6963e0f6c5a35a2909aadd278b810b101ed44e1548ddaf9ba8c882bb142d9243f6b23348672baaf99ef63938e6e0b6ad472b972c7b9c2fc82c23c12f48db45c37a224451c541f590b474ff10a3021131bdcbf94cb743f7f08ff19bb3328dfe7764128895889ce688eaa59361486ba727d333d8d8844b94cf34b096d949cc08da553194960982da4cc2169a8d6f93e51a3801aa625b49829ecaef4713f6fc1166cdddecd5c09a6d46ab367917510157634cb4027ca4944df9b31c0105d2c494972e95f5d75659fc213693b371c54a8a9d91a9658a18d2536a7db568f1658bfef607e8441d23282346d49cde3f14b5db43a770480cf07a3f5b9b59e39917d8dd0dda535c09dfbb6f3205e05dc1c7f9d5efee972e97f3f27e678c58055f7221ab492655a23fb45a3c7d5adcc6cc678d16ece79c8d9d7be17cf8d15e52a6fd0ce6326c6dbb3169ab177344008d917bc5fad512dee99ff0bdd799fadb301220e11a442d0a0b5168148cde41ea36c36d5b1e3300fcd7120aedfac5793d42238644b418e8c91742383d08f8e4f836d4c4b2dd712274ba86230872f5dd12ed5d85ae400b10197376327b186d9dc922480a43d53a07b5188ec183ccc586fab622a7944aa5437984501f5537a6eccb6d8fb6a481d8216c857e7ee6549f07332105748d4071e377de723751f33f427d9d3e424b6fe5ffd965e7a3b6c6fcee7aa298750fadeb8082f65f2307b7814f5e25b645beebedf3aa5e5ce85b8069ad2fdf3e1171ff8c9b2950795add012763fb9b9a3965a25abd3db340a57b1d6fb3d12b78e27ac1efa3e9615347487cac10d4635c85d61fb6bd322925736bfa69a2fd1bcb6080716f3b31cd6f90e06669d657116fc386b07c63f6149ddac4a401fb0224c7f409aa85b190e930a02b7aeb45122a666b0e0126521809fc340ba6a31c8edad1459cc9edb7953948fd8016cabd8412b2f4c29e4f08066dd327b77ed78801a289bdb04bf1adad521b1194b662d02b6ee7e95ac450e65fd4a51e3e9919edf91053d4cacd2c1447b82974cff65e0d869377c12d2fd67d72c304902791d48ee3b8c21362ba077bf2dfe6bf984316c61424e504b03d3a4dedbd541608d5b20b4fe057020e9f1e554d3de52a842927aa62a7a24c8a8916d82f28262838f11ce39c3b751934e8cb20a566b76e2a150b2ad07041d1227fd69cc5a7fd4f5e508fa8573ebed16c23b87ea9ceaff2e0932bb80c33465b0eae041c3f914be3ef9084ba1f4e96b31adc40cfa8ea61515e2023e274452242a57019d70b88948e431d9699430f9f46c77f0e84414e6de1e9486e2a874a68109d82a23d97f259c71f742fd660d63b0508887c4d017f185d18787500d3978a5d3d4217e083732df6db20caf1f756ec664485147a47d1030b623cc2f5e7d0fb813b3af5405c6f63c5ec9ff26c84f635f3020161aca308b0856d11f28a127b4e14edc9c4ed616bad9cea6e30b69838aa23d769de44a16aa3438f746e3e01faf480eb9b013850ec5de44b0800508f82bb812b3af4e2a19b5dce4ff0a07224d4816dab1b34c1a956174494f9ebdaf988ec8384014007420f32ae34f333c7099c7733b2c6ca09b95d4c364eb04da654afbfb358394a13012ad44bc51892cd1eb7386b892a4b812f567f21dec7b0533f6b97993e6f6d964d92b52f76bd47d4d2b9578d94c233b869d6229fcbbcbe61f841169d9d004521a5cb57d1d07dbd7ec41757026c0b1d200740d928abebc2434dd4bf390a984b1598393ecb58c67e3b7155b97285716258764af524e5e156877e7af413fd83fa12a360cc947624048b58f8f15667919db23559294d003a059f28b84786ec7fdc8935d69395bf12eafee985811688f849cdc2dfc7e991623a0acb214c3a6dd86ce9fe0f3667aa0f9c06b1600b3b7ff1d12bbd5363830fd67e4ad42a5486d82a15c53a7ef782bd9682233f3cd25da33ade3c73588eb1d2234cefe25802f4e1e181ab99ba897f704447e4e15088c5991fbb7093539bfe9eb5206a641eda1ce19b1afd8a265e96587557bc566f813bd83d13787be93db1bc28833ad8033c677dc35c4b8a56d99fdcb63c29fcce7df8d70f50a4bb6dc683b0e9ffd1cc89cc5d0cd6b00628d09cd473836fae4311b1b51c030d95d075d8dd237600efa036ec661551d0cdd4081aecc3795cc9d7cdded92da4a4cc3975e7367a5900b4f18f2f3b3dd118f31a81d63132e4ae0d195757dd6280b0a8750274182bffa9f23ef70724dcb103267ac2514a4861bdd88642bf4a8113bbcb118ff20abef65707f70306bb788e29d8633e0eb08a8d16ccad0477a8dfda10947d930386b9d98266a8379077a7d4f779627970dc6fa3434a0c310360f54069a537a00b0492f5c6aed10956d1d111f68a06f92a566e60bde1125cf51b57f3216dce3b8b1ce0e79e40fffcac728ab191aaaf319d971d3201126dccdf307e4ed26ebfc9f6280a2b73bd838613a24b50732bf9b74d16e293976e6d14f428eecff7287adffecea53de1750a3a1f09896af5be44feab6e54f1fb459eca069d1ff2fa1b8de1e76918ab5228029d4110cb6d93b23f7c4b05eaf9a748716078e5986465c86774629ffad05016fb040c4087d4f7a837b4be662b0715e7935cbdaace70d4afa60bd2dbb26965f25212f321553d8c10dc3c48178ba6e1936323574548c49141b81cba94d5b30e2ab65e783baa03bb8c7b77aa82935574ec6f68d84d9dbc561f2c2bac53eb69b320862b1de80cc4106bb40b484fc89f5a432681b34c13e48da850cd0ab149d9ef84402d46bee3fb253f144b93d791f10c4816f26aa961c9927de4557805a7a03dc682c9a548c6156496facd2fa285d7055bbf5f80edfdd81ef0557956f95b490857bc849bee29bf48e3f6147e392acdc00e9e1d78925e8c8da0028d39d4fb30e9c85bd2ad3795356ca694a60223e751d6d111b0c43efa73692d9a258350fdf44c88ff585bbd8f242a6f34e65dcb41efb433e8ade63c58192bc98ac6e5d5ea0fcb29f57a29e87e181c9e7579d3c7d113e2b751897112fdea603432d5b3dc35efc02c0cbc8a30f87dbdd4c4c516720b4aeccc0ac7e77b626380ce40f68ffc6810d5ff73940f2f74b17872b14c988257113cf262edabae1c211828239ddc8ef71f7714e8953b4c797ff718b994dc515af34dbb087f4053918f90b269302c3c79682e1cca3461108d2594374c2254677d5da99649d147e4591b84fd7051e15d5597657797064304163eea4ef779834d34dcdb04c59814d8d9515f89d777be9a1209a7a5ed6f43afab4863d02a0efb7b27ed5c970a3859b998dd9ab80d15f65b454b7f382be3d56bb2ce9b6b82673f69ad0ba8cd6646690f2dfcc1289fb13b1955e9569ee1188ad0d33deb616ef691a16ab43a088826d531ff5b6d5bfdddff6cca4fc85a8b51d6777312ee526e41c4aab773aae8ee7e20da8365f9c2b600a5ce290b4efba9444ab828ea1edefedd3afe39c655dee790de516098f0ed36ade0a5e89844e2b9545a1b4b3ff7379f3d57145828c56b2223504efd80dd3c1e4a129c8f6364b049f677298061022cddc6bb759927941e2c9a491be0aa294fdb79ce0a941908d4c9cf446b3f09c9ff292dda9a832f3c58456a0b5080716f98dc9175888d15bbd0b7332448fda6a95f0fb7371b9cbc18aa2b07298573631a97b045ab8ed0e5e824a0c6a95b32a43aad001753414c6ac3943c162613201ba4dcf4fac2960606385104fe360a74aef86998b2a1d42897c7a7070b73922cf7b8c8f9157d36a2f306d6524e7cef4a036d25380db51ca7ef9f430a5bb47ae093a0fc5b4a1dd92e38fe35173bc072196e03606cad0fb340cea508b48b4b45e15c07d789fd37061e4458fdd24ab32b692b459bb505141099a19358942eba7ba5cd57fb13a34b35e9b1d18101ffc783bfe7be47afaa64bd0924c4c3379a8494b4640bd776d0ecf116ede27f34cf7003941fd7e49b01642115b4c3d90d633c1983ccbded220a7eb02c64f638c93e4f338c302d0325aea4e555de1afa841d33829a43c8bca3b4930ba0c3a75e5dd0a78beec52823ce06b962200d24a84a3d1d687e75c6b68a63ac6c0a665040610b2b85524b43b6f2ade4303ace9b72be275c2396ef327b34ac2d49cfe98b9f51624da84d3f2a3d4218e7c7dc9ec9ea5e80725c7a0c966b40d2b82d77a9d3cbcd5a807d461d26372abc26a1abfa4a6fb9bcf26bae4a5d171d8bbfaf8843b3463378667cb361d2352b1c13561f6d97834e515ee99a4510ff494bc6187833949f0230521f3ba9a8a7a1cd404dad753bc58ad20a4ec4793c9452774e20cdf60246d806e5ed4561341f4d243ff0ec8d91970db39713c3534a76a7b2ca210ff786de1380945f4704ef0c8bd5650843235378356a87d0fd5fc506d762bcc1b4d49cb55321effdd72153efcc4551cc47e2dbf9908b5eff091b26d5502bb86b3309ae7d056f5b317c22ed39ace878e57128a59bad8a8f064d020a52b0622f8621034695a8cd68a28ca6158a9c535cbc45813acefaec8a7f5fb0ca1f669a94caf56e0f8fbbc08ac9af078753290a7fe93b692613f725e3d2a783f09be1598a72268643cbcced440f59e39d13c17254d4d96cd1fb30cb2d98bb081848cf1373344af88dfa4aa826ebf3b6e15cf42f7e0795f8e8f52650ca4a10b99ba67e5cd189c931686bc395a60822fdde8f3f964e09f799b592463b4c6f3f2515457d9a47eb37dd4db0b61a33bc5e14ff3b124b575484cbc2431eff1660acb6ffa64b5028c0fd38c86990ba72a11bb8bde10ab33c6fb40bb9882f20dac6cffbc539761306a3afe042f6e20ac53ed245b50197623fc40bd5f5e1e524ec1a3f70008f7c67641bc67057d9386fbdee18485f1d36dd03e9f2b6f1e0df9fdcd371a03c08cca1b391b7556180f27dcf47544d26a467981b5a1f2b47f58cd61f7aecf8c245f566979e18fc1a9eae996bd32ca0a637a807d89cd7af62a06b8c468928065dc7753a62a951f0cd82cb673609f7ff583786b0de1ab2bfcc71fa16c486a94548fdda71b73c08c004cde75b90545cb5a73472379e5c46e90fdac6fa2bebf7322e5973c107de93e65ae080eb1d6aa1703dbef8f09bf9fa97874b30caef218859788aff8cd6f989d03a5b068a3f858c9b66179960594c5467dd53f5fd80dfd317a1d2cc599725611a1dae06dd796d74b3cb0ec22b48fbcab67c855506837f6e2954f178abeaea90209f49f0494d6ad035d6e501a5fd50e42fef4ffc7a5978cfdaec3772f824a1cd8019cf61524e0645be044ad654e9142710a0244acd95646eb8e24549b2e6f34fb527aeb89cddd84b98fd90cedc9e9e1a252992de74a9bad14fd18b7b809447bd3c4358946d8f5938730d674991805723c9f62c061408f47e0c247a76d5df278c91e76d5358d4f1b2c8ce2ee51820e7da7b9050700055a9fb8a75b2ca270a0b3432ae4d93e3314a3106ba681fd502c8b4a68290aade0233a0272f94e3f8c77b5aaae289c4a136bb49b95c93586cb86238f7476d0511812a227eccb162df79f056773e9263f767dd535d1f412d23845cddda49661d2f6515e90dd798b52f93f2be041d08007a2728e46e8cf21cae290119dc12ec51ac205f6a40dabb597dc7fb07fdf85b188e0716736a30169561090783593e9040fc459f2ca43089de4e6881bab17afc1ac77a2e96dc833f25f096d890ee26c279b4373db6c49384a226182f4cbaff6b959b12e9b541f0cc5cb164ecd90766236a5897b39f1e5e4c4379395c4497004a079d43d05517235e9847f5bca2317713714dc9a92c1e0b4140dc5e7118c227e7ef329f6b0cd875566708cbe0a308c4134d285f77044014f418b3ea366fc8d0f5baff882233127154579859c151d9e7b34c6cbbc5ae2125e539848ef4801785d40958909e6e31a1d8d86b120715415c740d8f80ed903d988531e29f34103ad10348d23b2824d2814467e596fa83bb9cc5ff05317740f207648042ad9d86af2d1407f0fa57ed519a3794bc5b4423c513399f623ffb36eadcf3a3293c6969e10486b53960b62e5b4712dd43d15c5bea7a3f6d2b1ee1e88483c328face40107cf1cbdf1fe0cb7e4c2276a0109babb2981c57f6d450b3ec5bb653605bc5ba30ef6f53e418fcf043a0b6c38ba70ccabe4a8413bad267e9a8ecdf1517b0d5304194f7df72c937dd14e57e9a0e7bb731e59e4be337b9e70ba49458988dae5f3aa92a059ef98503da78a6e45a97033d69beffce46dc0f3092760ecd4e5088d631fdfb2342e6f0f380c5518295c3d1d1eaa0eba5df3626e7068398a7b6fee4dcceb6a4db4bd9718958b171c3dbf37c472d31ee4cecd4b57ce053ee7252e746c5694993881a3fab37da9394328dd446ffb9f8743e20161f64a87d5ca7b2b833428a4d63d44e87e2818f0215593bb4d65e195b29f3f998e920d7568fc246d01eb6ba38822a5950dbe8de7381a25633bef4b3e05c08d9cb8753e575e46c9fcd8da461716b04bb18ebf0516e65987dcf4556120e96d7513c9e506b61f6e12e1ee49e28aeaafdf44e871a70694dc602e62df4dc5c7709e05a82b8d18133ca6232d8066836be70857051d9c3ea86959626cd534b5058fb27a3d8ffa08a27a2eca7bc6fb8b01206ff0cc0a0b468cc91a7ef97e41760d93567b7058750b34ee51dfc265c9291421bc1a25821da7a6c44a8df32399924543340e29d028ab3161b869e9a3f7e50cb396daf8cbfae860219194410c67911769f43e503d396f019c0b70d8c9ae47529ea53a2d2ec99121aa999dcb81d1f9eacb3e10cde8d0df0c64f1fd771e15d84caa9241adf3b32b502507af79caff542533b88e88191684ba841216aeec551f639e05f75e62df3d575b86d3332e1a2932670dbf6a1832e574c217c6657995a4ff44a56529c3754f9d14bc10e1f64a01782fe3ab592c4d8ba0e8a812840ffef089621b92f65d9fe98a17516e6b6bb6635f55e35b3e9e8ffca8bc6c04f3f4b88a67c10e87ae798394862eeef5b9d287d74f9fb4d602b61fc2f2070ca39a70eafa0329274a375f49d7f91f3baeb376e4e5b0d7fe248bbc2665e8902ff761cdbcc9c4620ee57b571a3b4bb3dfa0429ef616eac36b4ec3f8cb6bf0217e093151577e11336a5f61a91e47e4b283d34c91e5f1652ca15b91b2375e7480a1e0f046e3a15465e4c1d09c7c832de4ce50ba98d8ff8ad94853dc3191c5db763f8488f287bbf4c02312b2795d778c11691e75fbf7c6bf94093f8ebe02298dcb00fedf9e6c53590cd05aee88e8ac6a00fb4564026bd06d238c268ea1b211f2478e55df91baf1eb1192a26c1146a9307a2dce6ef55ca5fd4f7810c422c80572b28e916f15981d129712f1145c9ef64447a7c07d1bf1cbd5e0750518896d8d75d3abbb76702e603665f74fceb1191c102f102378bd53cc5f9e2d0e721dc83263738bdadeeba541bf44eac48257dfa2fafa10004623aa3002514532ba27027ba45ad6f68ece254915fc9359189717106c6f515ed1951d7d25c0687ad8ef42f1a05035186e61d5fea055991578b9e9efcd577845005bd43d32b43cecb4bdb11abf1d4f4666ecdeeac817a5018a057ec5857a30bdbbbcf8f790f5699337d977816a88ce8a5eb66895f6095e2337c2fe1dfca01fcfea01b134a74b9874478a +MD = 29e3d777a4c8e760c4d9a8a89cb9f4291dca7e8fb3a179b3b17a4aa92ca6ffdf + +Len = 49336 +Msg = 6387a2e8c4da8acd7cbc0732fd65bd36bb124d0de8b2315382e2e79f901b515ca92a5cd4b5e1e08ef80dc7da4ca872aaad4f58a3fbf6f074fcdad267a1b719358a3b0b1fcbbbfc3af1266f0b40377f533fee7d2c7740db55770e48cb1b541d990ea3f8f08ed1a67a6fef47ec637bacdb78d704d0e2fab89efb6693f38859262e3e486b708589a8f67b5096a63cdcc3e761f235b6c68b50f791cafa086f30fc9c2113abc7384cc9551c31a66053c38a2200285707aa5b6b063f22c4325940678cbfec021c2f83d0405b7abd433196cb315f5fb4ea17d2d1760f563a98cdf12fa621bcb697f394865e3e1324775dbe4cbf86809288945849ed094ea46353ab1b914e6910620be9b358d0e423235fa4d6727b743a09a9559c1334f24aba73d6f4f64edd58a2ffe81fd516d5016fc0af30f24821f494de319292982b73c6b6da827c2afed68258fb917e1acf0884074624e8f5710851bc54f30f3ddf68afa3208dcce9b6d2289d89d2fbe3b87e8abcd378fc884bbd69ca2687352cf7729cc30edd8d93ec93bc56faabf3797aaca868bdf5d50b965c04901016a96c5cd7b59c0d3968318862670bb5e10ee5fbda07926c631c853c2d499778671605f4df24b8866b05ca71875045243ff52e2550cfc2488a78ff24786166c7432200a9d40e9fdf390b66914aa18bae8c505cde552780b9319280368574866672756462fc9ed7826c230dcff27f66bb8fc67810323755272211105a9ba97dbbbcb83907a1f9ead5ccf4c813c9145db3110088a23028c8fa239eb7780428d530e993877f094a604220279e451588f8ffdaa6977c9522629afde17e78061a152cc0ad57b47cb7bf2f3263984e1f03bf05b25faa86a94ca96f78816c42eaa7c6170aafb08d44689106c851bd142fac3b2e61d3cba8b6cf27e25b278abff8f66f588f409bf2a8865d2eab9815808dabf3e2aeab01ca02d36459707adfd57730985917091fcbef39ac0fa3e1a87a80296f8a638f55d4d67fe73d7d23736db17cca816ab2440062a8051177d47feb514e388c4626cdae7afb38f74bc94e70ec038b384fe2127a49fcf09cf118a1b94941d552201974403670dfeda21579c471ec66e69041921fec5cf518d75616ceae2bce42b80f4f735206648949affb538860e0f3f378cbd892f19dedf235e710c833acc6d8b1682d15e450320a3edc03788783c8412fc58e84e36f830a5e1b69e182f64546a7c657c9332b4fab6a24be8b88d6cb410d89270b59f443e778bac03f3f3427cb9871dab41a7b4af5dddc6b078c6165bdbb1e8d6d7bb293502ccdfc2b93efd32f2d729c1ec2ca8ab03c0cf235baadfe7be18ca6f27233dc0e225a07eda6adb33a0dd08751529f77a432ba3b5d3b41ff4526dc5ce466ff87ea016cc8cd9ff92eb4e0938294f383799865f02dc736a5cee1321595897e9cfaa972082713a658ac6450c4742ecdfdf8567db5b2bad462d517ae3f3b2be3949f161c380c06e55495130369476807955ca42312b1803dff7bb142633510bd6fddf8a8035fef81745289a18de28acad30d4bff0d135f9804277595886b8033b31b16bd720816a540498ed3352ddc3d407413b8b1bea00dfa432d50b6c5c56deac339048bf0c37741e3ea416b10a58963f7c3f6039b8ac668369f1af52b26949b3c292458fd3e1ffe88649236732fd5c4ff25630d9267e8d668949c4e85ead04feeaec6e118cec600a1c66e9f3ec04aecf5ffa5d68c7d9ecc41d37ec8bb5a488d4190922d2abd94cd94d67fac59a110623f1a64666f160ed32926676cb5be25dd9d962f441951b0efcb5d6a67ac1a4eae473e49c6257860728853ff415c5e8ec76a8a462ecfd343eeac22dad820722c597332fbfd94ebbd32c623ef4f9681acd410327ef3328a7450a1ef75069bf3d3ea2dc02313a6b94d9a4b5edf9e4c70a78bf756809c2cc06c9f118ae3f906e36be9dcae6911412837327fcc76376774a67587c0f431a4bb526264bccdb94a8b1bdfe7c574fe4f82a482cb345d21cdd3d118293780b881c54f22014ddb4f4d330c53b8cdede2b70dbb1395603c6468d551fe4382cf3bad248b665205b4c2f92366cdb68e7bc56112a56c4616ba091ec44eaf3f6a87c10f202db6beac011a35a250d549d0c7b035d88915471f7f16d9e6efb283b751538f035e9aad09695fe8f9f2f4d95a79aa1ba99097ff43349680855d8e7931d4f81513459b87e5959afc7175b1cef538bcfbcbe179d549818efbe7c0ce879fb9b8899a0b40b5082cd3585001959169acedbd87a64333fb0d0832543ff717cba79bd3ded7129d3ad710e4debd27887e7e454925047e801f810b0d160293907b47aadc28d298a8433e5b8865d2ef1cfb56cc87ed25b1237e84a0747432295a7841ec8abf235a3eea08bb2c2b6875b5aadb8b6027316486e0bfce4fb5f742dd8a3c6ac6edf4e0c8f8de39b879a542bc51b689ba1a4f1f100dd99d862278658078e02a79f86ab3ac3667db1497b4dd97b98fce7f0fa86b29cc7b150103de1aae0cd6368929af5a54694cab29cdbbceb0aa0c63954e64cf39e64d3fa8a050eacc0cc696e0c8eb5d265c34b1dd63e39e6eecd84fe61faad4a824f6226440f75b43415750641d45458cd6c8f419a053d43846999a58caa200df4c1fc61b2cfbf77b73326eff6fe698ed9eb07cc6ce34f87881f84dd59676de44266f34b6ad8346dc6afff79808f6e1b17d9351ca33ad9295659c6f44cd4bf3407c8f731e09b7cfcfed65f4162e9ca53f3b197c0f17e72bf7ba2e088cb54cc93c14268b3988c01abac60c6c632a006e01a0eb047bc4094a0648552197969ee79eb7dd85f174c6af06bb9d6766444bc35e73b1f1f8813c782ad7bac04cba6cd5cf2d5c682d13f0171c95c0ee07c3a52dbe7e124b6d95a83ccb2e04f09368dc1c383e4a3cd5af67d9621b1c072ef135338987b71bc149741e5116dcb654e7164340b2500ad08e537d42175abdc314245d28574869dee5c9a62457ea1c778043d24e5015d908f8db8b234f2115ae75993301b66c3babb1ce5dacb9d529e57b8b51cce142b16437278c6d8d1a19d75cbd3e7d6ccb9b10f4acca510446e584201549212d7e9acc9260088797edd02710b80504400e90f5f88a767cffe4593db60a42b5fc729d2850ae85db35414284dbb110fffbdd22420391e79373588cf98791c2f016c5c160ba388dd031be78d703d0e8d465df5adf5ee8a7002849869ed9d3533a43200f5d1827a7ce520d7909d13f14ed46bd3fb551b93e29e6605015f5f87cfb4a2b8d05b2a25c3d5fd64d008d231cb0661fdaaa232932787545f1472327c69bf48d4541cfd2328621c0fda67fa789878dab31a71e620d539c9f711bab88b78209ef3ffab8dfb30f607490e2eff0e2d9820c4f95888c56242416d978d444d91851f88216b6f06741e39a0e9b2429af0e0ee8395aaace9652d6533048e783b4c69351167f0f2dd58474d980bb6778798ef9e8f9e0cc51544578fe7e722c6ccef299a1031b0bbf8541d9d9ed290005c6c00bb3950d363d1865d2bfccdeeb28b106299151d4f4ceffdedb435dcd37f9210e0bf218cb2fb96b1aae3c21746cdee5680cc909901081ccc542bfd88f537c0fdfc34c870100edd3ccd220851cf6b7f0820af03339a901735cd6f467579eb51a9cf96aec97f202dae3071100bed3db5cbaeaaed5b605767c0d5f8b110d5ecdc9ab76f34e744b2008c715b79b424971b17a76adf9ef6c07703fa42bdf99dceca4750290b682536ee4e0c4bc5d90a1a275297492a6cc28dcd5596e7dd7e36038346264e92ba85415f697dcc54f902395322ead08e535801e36c5852904d432dc00db66a5b5ce943dc652247d772b16736ff3e9b5bd12bbf518eab1d66b5299fe9146ce6c5cdc5c0cdd7a6589df47c463b5dfef41364b22880530ba2c1646dfc76d0c65e829bbf4adc27867948fcd738e8b5a895558c8fd0084ff67d50c994a5e1e96f3bf2351a446fdb2f2448da66c1b79cc7d992c7294841ebf8176553123eb2c4b40995387b4001792ce41e3b8f733079d94b4b92f2e3d59d8d0bafaf8b1981d92131fbf466b02977fc23499ed5bfebe36964f07e81453c0b31c4602d53e8b7bd536f87174137505e198c5b52ce2a325fd4b111f868fedd8b62dc575af10eccd7b6fcd71faf280ea1f169b415cd24bc55b7ba308efe5332b4acbdd5b7070e49cec8746c5c1504ccca3055f4467741d24b9edacca0d5e4e40d8bd36bdffa69b6f8f460a77b0770036d42cb8c7341042cc7d6ad56ec644669fc6cc79a244fa38cece73c28faeaec5ad1a554fd1abeee14511bac6fb04dda2d17dc04e1327b4e34110d81513a53cc3bbdd46cb6ab4552315dba52679ae732b5d66615c17901bc651be3bac0d7c6a21e785c8d69a378f30c645f39df1ac4c29cbe8764cb6677806853e652e841b8008b97aa3156a1ce22fe0b56bd56ae6b0c3a46ac9c5f89413ce66f91e44816ac69fba259f32e14b9748e995d673ec43e9216e562070e6ff34447b572d960b50830f71ec84d508adf5a56b4cfc227fae3e6cb41344f5879123904cc15ccb2ab8017f673819a5e528466bed42a5882c0cf6ccfb09fdfbe43027db619d718ce68786182272274b83a5d0c5f8df994dfa465a68cda0122a03c58a4d4354358048a65b012c00766ee70dddd9138b9f1af244b269b1404d2cee39920d794f705057fdc8630d4cceb71b46b3cfc6ae81971aee46f6305174a6ad7288448bf5eaa31c7414664bbcf7ce263a9ad099b0056b7c2c5d38d13b5043465ab41902ad6a229df4893170bab85a10cfdc0415f9f43e20e740571c66a9a8c3d85db564e1ba75e4636ded04addb04e1efc092c1f115ba0c05387a993b47802bd3cc3f3cf8a043f9ab09c18dfd2673a2818da2250132854a708bc9d120f17187354ae00f5ae534e2b2a5d69511624f5b6d8c5eca8f1147e20e816d4b7e7123dee51dc0676e51f1a9628954a3535742129b05ec37057ba9dac9648e8fbe8d4038cb8d06cb9eab2256a1fc62402accf2d1f33f74f4c938523c887a5326460e6d9ecfe4dbc452bd6fef594728f2fe8a079f5c841f8a4510ec10330de59780bb5416d96866d9f04d7e7e71b3cf44385a2a85c11a1480dfcb1c5cb1636c6ad25e9dabd163d092e124fa0ad1867fbb3e020389074a7c5e01308c2aecc40f28a6bdf0629f1b40778d0a899c61085fe1794a39b6175c7fad1209e481cb7af65863a2f3452bd9df115cc6d33b0983983d51fc7511d99844f47a1ccb6a36cc4a8271d3515b5de4d4e7b72281efb13d51572fde5ea43546f4bba032eaeb1501332e3818b0ac1e86488104e43bc0417fb3b879ba9d7614adb68bee12e90f5062d8e5203bb94154056368acd5a8b7a191e6e79956d98f5c16b3eacb866fdbd037622e91021321e9aa4c2318bd71dbb9bb116cf57abbf8f7c913639f5424597bc8f892f3376654c3bd2c3aaf643e3571455dd0f7f0eab8cb0efd7bd345b2903a5cc398aea05ce3cc862a36d891b6cbb276f19a057f0fd7c22d99bccd21be88f63cebc82a069bd5ea4c6f9efd0e81a76298f65289eed25ec36d10adf6b0f34a95b197aacf30cb32075923fa85a148d16bf19381ea06da54b5188ad6b6b9f6dd0101efc706e895030af36cd3d813b34fb3caf1ae908fd0c182742ec07606724920741ca635f4a14fdb6375af5e2b692b246a3761e3515bad11ca25f29c5d0d97dc5446cfc61d961e62f164197fb3136da51b8e224b1324214a6197f492876fce1be794cb1f2b1c7887e46296a371581b1d231e7a309fd3241583ab4fbe4c41f6c7772f21aae6dd66328696b0322fe13f76cb0ef0fabb0fbf5a76898a8a732b18c74a3f59cd167eef4b1d29ee94b355e0975b870d113080f901835a2d5dc6d43a03a8ebfcf282aa1cbaf242d831c55d07681bb057ddc5cfdaf2f246c19e0be56763db5b9180f307f4674d0af7712fa1bbd152b258c744a46a160b74cdb70b05a4cf2ab8a0df313d7f3a75a9d2bdb8c804ba4ab4983573a6b253160dd90f8eddfb2fdc2ab17604f5c51cb446f27b277bea0b49df9e901c7eb9925a386d0e5c15736b3ad84daf34d7cff35009dd15456176ac985af24105d487bc201e121c3c54146b8cebfbf1888aa4a9921b1df1da23af857f4e1caef74f25b7b0e64fa1f742e7181a8a44a5c9b74c24c2a43a79ae689e7f45e3a441b9979a6d52b9ad055588f3582bdeaf31bf05d04e28cbba1388d94980344013611555eec44ebfb3b01ece4114080fc4fe321d370d0cb92729311dba71928ef175d1312aa6eb1fe90b1abbd735fa440b74eaa6894bb596082272ddf93ba8f4c4e7b6d255fa7202d77c11f8bfa147a50dfbae49ceef6c89e66611c10cc4be9b161e8ce177a82b8f066cca2d0142375b51fc48ae0fe179ba485dd670fdf61cab6e821b0599975eeffd440e01a3fe148e5fdd7e7c54092452b66f8b93d4b8094b557b2ae7c1b15349446aa51cafbf2465c008195ba34fb579b804f6d197f1cfa35271832efadd52c6644857272c6cb109fbe3e1f5069b7356d784e1d3508bb4dcedccec834903a28ee444ecca23ed01a298d89def84d5a7129a571241066d011eaef42e8eb80c8cc84cc82bac9b2a5c57204e17f425e599d48ae551c2c27ffd901e5211f64ede589d253bdd769c0a0c501aad15aaf2b391c52d9668fe8ba9f25bc44c5c6413624e34f505cacf2f7858b60e5c60b9f227d70d0ed31d9e69d326a6284bd97f1080b5b6478eba605a5987b184c5c0ca2e2ab2d3b2023a4a64e5e29ad3b84ef04c21d74aa03d75d12796e268054ffc85aca26c3fa38d85a985c76e5f4cf9845ecf2bfa198a7cc2c99e17b1041862de9176794b7b68dac764d362121c1b784372a288674a8cb36bf0c6c43cac46662c97949598ac8953c722569c16fac99b52d4cc1e66062f4836efa785ca8916c3af3e0ce09afd8e5e4f8c175ec120ddcc7b2b55d73e75f9a4ec6e4943a4c310e22f2fe8409b940065254a1d915db6df72841f469939be742f5514b5e41381bc297411309fe19967cf1203711b30e658f4365aa64e9d0a2851388af2525deba301458deae4b5354904de5f19e683d6cfbc59817dddb3809c735e780873ca2a4cd36b4b20f75f8f306c51081fd89daecc31b53fd42ec34958fb90840031a4663f05aff2d9c027d1a36f33a38adbc897d7bb1139b229158ce4539459e17331c60501d72a1e2655202b754bdb63d64ab979c2371a1fb6f072c9e1329db320bb73252dab9df61430a74fe66255b1b06c3b39aeed8823bd9e238e0f34f97e22889527f3f5f1696f018b972a40bc7c537645a0e8fc2bc72665c6bb4460144b60e05394ba7bce7f2010f78ba9adb6cda6b00135d62cad12d98e83d8e7809721c20dd5f3e906dd410fa511b4cb71ebab91619580e144b30dbe60836e625a2909305644ccea5ec5b624080199f953051efcd32909710ee8bebe25ee041cb7730a9202c8a8244b2fe64880f0c2991da92ecf4ce659ef50f12fbf23ec237d5e1c2cd05a880dff95c3da615706b8159581e4f215f3f7c1d37968aaa4a352ed19cd77d3a6ad86e303289958d36a02d38435474e76796b515f266f68ee3e19d4ae2ef4812e5e98385f072b163d45283db16d5fc9b6a03e06bca04ee049e3009ae6e6aac339c4cd666f079982ddbeb3b9e6d0354c1f8ff747b1900df9ffbb90a7899ea2821006acd5fcd1ea83fafe2ab1e906d0c0f76f1e7e079eb29d57ed50645ffde2a4fc4ebdeecd0c2603dd2c158c83b8390b87673b12867147b398a1c9372fac741243c18917ac6156e9cf71fdb27c8e761717a0d76bf6b2d3220b018189c3525fb52d8997b95f78811d16f5688b9c2f91caef4279f11f085fd4f83202c3e198ac7404ce6f3daff8af86fadfe17fab44910e5674aa0cc91cf2b0a75fd44b522662360eb79a09648ae80ec557edf670747fca965ef124bb96949e5fae7d8bdea389e5956d9f8746d5359cbd871658b46862e6f529d6a1be1d4d86694787e94cb82a68df18061e1c829d192c95e30d3fc74249bcfde1eb9a5926500d537acf660c4ca734de5835b038296b58a9dc7dd93a28dd32019b6a17f326e593fadca4f248f78adeea1c36c8a0e07b8aec8a104a691a89a15e8b86fc93562b436337d0b91333f92462da882d61ca310985742f59fb23354f3b3aa813e0bc0b65b712bb831609dc4d6f1b93a724ef751f9d2340d09948c985c12e362283626d401df6cd18f8801ba23865bffe915830125c1dad75ea932e8b18f19af223503a1dbe6a6e3f62a19e6be64374f94f0c482be9ecdc11970b4aa9670b3a4b698d5844c2f606c2fc734df0a03a1a610713a7b26d17376b47b80627d60280f5fd21b1fd5022fd676dfe11788fd419fe607633ef0f27244da3a34b4c8f60d3b786142c909077bbf75e4ad04cda98d998033cd629f8a30d7d52d3ff62b7ac9a5aad6eb044ab7ca839766074b5ab0ec3f7976d77aa4f1359c4fd500baf796f3fa719382763c9ba2cf75e47e3f927bf3de2c512feb83d0070ea4c23587cfb302963727a783311b7b0f7bd0707607832b0233531529ceaf1bab7e653cd106577c059623a8bfdacfd9a023ca9c634c6ef85808ed55d9e7d6e9ff374e851b5e0cd6c508f824808c21454e083330abb387f22c2790306051fff87659debceb194b8950fa159979e7a824459 +MD = 31364b2f6f1d9e3ad90e858993a89e172655b9caaa902e69d20702fd08803c4c + +Len = 50128 +Msg = d4036520365256f01fc99a6b1bd4ba888f56e0589cf7def446c071b4d6e5c7a17ce1402d39c87222fcd96fd90c534aaca58bd7ade63ab399eb1b840736b682e553763725bb0282b4facae2ac0de0f1ca0e0a2f2213150111536cfa748ae958179fead27184a8918e5fc47c4ce723b8ca10fc6f1eea2fd146c6d959619c255220a96599775c61a49873eec32162c3a694f489200934312a1f8e8a2b38321377e6b90e15a00bd5c5ba807141944569c41102d8c94ab9c21584f2a8f760155acf52170dcd5458adfbdccc757e0b5abc19278112f24b418b995d395b46410da3624c0a8b49fc0d914fe6a02101ef6765adbfbb5e24739434be92acca9f43e19639bddbb012fef028c7c0449d52a9350b88c2f6e5e52a79648c0c931e8ace5bda5b8bd3a3afc4ca1b6e520012f99f8c57b3167bcec0d8bac30cb1367e8f4a4118d0a0388da8b4621149851ca87e3b33f135a592423ae51dfa456adc13371f5cf7a1e25295863882b3623fdf866ae4f48016558269ddba6bb13f20ce0509b57420d53b6be4d0b7f0a9c06993d5450195ac5e10956a30bd6b8f03b9557b8e75513a7492c9a10e99759a6bec7ebc95fcdf1f16bd116ebb57e73d981fb79d4cc5baee87ceb5f5c945d92f6caee864e43c9a7e46443f9c07f0a56306383c94cd0e78e414d977088725e40fca991bf4b9298e74f48d671d9bf16fa856ee2e8899b954c3269a5701d3a05ee28d945e959d2b82a72a7fd118ffc00bb48f27d3a0362c1334c2f99d08321e0e52be86f86f17aa40bfef04c4b6bcc74130b9cd75052ed180def2de90472e07bd05635932a9af0e8e654c038a1f596ddbc4ddc75adf090f626abd3179e34ec433a387f4546cedbf35414765697a5e199f1702fdca554d4d807f2cdaa0071abb38d52f3fa6df5a26fdfaeb10aaef543557d230570f8f84f5a3c645c24dd91b55944365226f2b7da9ad383ded94a8c228c99c6fbd70b6356e93e612cfc881d8fa0e943085f977deb10fa547e471ca305abe1ec81734f2e92018889bea5828da13707099508aec06a7e9e710de87802633fd00424da46a2773fa54e7fc47f6a7068081a66b6bb27cf104a6a0c120f02d1b50e9e647084777cf00f1feebdb12c93d076c61bee4f0c8f9288b00778242cc7a7d81bbeea8b0619cf408e8a15da5c81eccdcd2323cce73251c3d37e6f59f8cb84d71c928cbce6e429c40ad0414d62a13997700adbd7504dfaa654df8c32ff43d886118debac92529c04256fe4ace798334e5f318ad0d038e98ab4b9332198c71f6f8b1f9bec80fb92ab6eb7645b43cd666cfb35c55bdf999afb638a18c86dcbd5edf9b5f1df3b25ba14272534fb1fc73f7dd495ffdae6d6ab72f1c09179d6d878abedefa1f739875ec91f57faeed40c4afb6bc0bed08e76878bdffb31c87c638403c83b00e704971d4497be1aa8f9030560314476cf2effbba09ea87e26b6f394901906b30114cb521130d618dc0741fb36b59fac3940e8b44bbe46db372f1f16db61012cf7f28ab9b96b2e79da775f98f97940e3b17cb80df7af64dd5c3d3c77303088d31e268b9097b725b246d1a27b22ecd6a1aa3af4353ee270f91889d25258f82c49e619149356955a56839ec0fe4d90af6a85f413a68c07f9b2fe6d8724903859f60242dc2e50964aeb234721aed40559a2f7409cee59806d9f7070b15a8061a06be54c38ce203a65c498534b0940ab53ef50a8f67941dc5b23113be780a4148e1ff19dc0ff4fe24987756ba3aa2e033ca43475c6e3bf8c30c24317902375b17186c9affb2e2a2e44b82cc8d1ee069d5266156f749a3d108d1198ac51bf6fd8f934d00b4e07698f05bb31134c6134ea53b975de862944e9de75846292b10cfb93aea7284fe768850b2524d37980636abef2d85b820d61a8938298c2e9a4e789cf68a19f575ab190a36a7a71ffe80caee2b6af5eeea30dbd4aad4845ad176a140ad761d91adddf428d1f948725f48b276d898d6122a6b3a8727a058383650f1ae48f7a5e00ed4c1b16a9258bb2327954bdcfd4fac474fdea996d72d4d32a611edb053d969015727aee8b8fe7fb1e51b7621e18945a9a47042debf2e232e3ea805cbd2e2b4ec30ce2635b46248734aedfe8d8eab64b832975be9a0804190e15fff83bee84938255f2138cead9dd01db3eb0a4bde92dcc1fcfa9ec44e2fc157dee2bf5d12b14eff82a8d94d0707302814457f5f4a567d18462ae572be762a68ccb667f989739485dec1007b970dfb31b915d313163803001ef0a6f1f89d32dcd28462d8751774811c77959e86379a014a63f0af6bc0d6412c56c98a252c407a97539a42fd2555b9e3cf80fffb0d73606e35bd7b70775ea3176337856dabbe0bc42bf68149269ff7dcd3a9e61f18ef16cd9522be4ee403ee881fd62af7a3135700145edc82a2b901af8af99a1adf76ea108a07c22c902ee926938fc0ec9ca726f417ba9ad01f0d9f03fc566513ea71a5df1c54cd3301455d9ac64b91731ce240473bf2045a27029b8032a98d32c2460fe154f1288ac1b2128bc0f0e3b5ad2c6da289ef62494100bccf33db5ba1ee5ff0bf39c71b5b58dbd0a28a67ffdad6ed74ad0797fcc4f66fc99807d21785f6221021d4bcedcb4c2a5f872b992d09208d1e0fbfd319f4ccb88b82b778090963f937ad2bb9e804270586e1ab6db56a11743371b98c02014d41ca364ab47952bc4b2c0e49a7522e70d60e5813cade26330a7b7afca8001201734d5cc86dae8b8980b8ea336c7470b004c0956a9af1650eb8bdd39011594f6fb6de9b3a8df1da5300a3eaf3f296f36ef76240b8c4364e28e4c3237dad55e11f73439ba7fb8a67a032b5b58f1f00df3217bc010630f50a0bf85313cb663ef099104505179fc15bfb80b5f412ddf95b85cc987e5bc676c03f5a364b83225aa366f7ac819261dddee9516d4e8113ca8fed7ebc62bf6e00994a743472adcbf3230d8e40b621292817f40ea36ce6a9bca4f495f1533a10ddbdb6ac14304f484f98163fc94dcbdfe82fa31d20f5488615c22279fff9d59453530b6ca02f7381b6290a710eed996b664e7ee7ac92b0941d10fe92aefe97e2ab84cf1b9e14205e72fe6f8bd83f91b5ea9a0ed40eeb25ba1eb71049c60789e22d778c20d78a5fc7ca40d0f7efebbea6bc3eda4d10a7afe05edfe0040ebfb17d2055c9e5133737a40517b21c1b98252423606bb8786e56ee26aef72c4fcb1999ce450fd119c3b0dd6caa9f6224eed0186929477e0fea23cdbe4fdc2a51d6c91f7d70e54cb3d7d25a47221e31d197c66bd4c0f8089dc11d636ee81764dc86c7f876fdd3bea71ba604dea6b8f1eb380f03ad4d06bdea9b4d997ea23144b8831d0a0115618fbe3633c1785ff30a3a7cb4ca3bfaf704bd21b95835a4b131ac76d33f65e01828c0d1817a5e755ae58608bca7c8ed5547e0fa6b86dd171f938207ef7eec857fef75939918d90f72e897872f819a4ea7ed19cf6b0cbc2204d100dd7baedc2d1f4da52582812f55c57c359f1542fa46765e3148bfd31aeee655efa17eb97eff7eab172e449fa870da0a27f877d130fd4901f00c71c241a2508616fa01861a24266f9457e8588e8839f8363b5c16849aa8401dc489c07867c7cc3f910bfdf8c39f03e448759627c46baf2a10cdf93e451b8282170db70665d58f300da4065f056fcdcfa8f340bd4df798cb1ed162a5282b30e5ae078e34c30137b218d489991220371d1f6b3e964b651ae00e703902685fb00f307e2d4aaad32c8d57a46eec113aa79557e478fae53e9c3387b2669d30406bc8467b7c9041d4d789741b9da12a438700f566d5334308888a32a0d1bea655c9d79805624db18b9e6e1742ffff87c53e26a4f940888e4e45aeb74163adf2263306cd24cacb2181ea03e71f7a504d4734cf0aa69e40ee953b67bd9e02b13d3b0f1b8ee09950ba3c24118dbdf7daa752d1c3cf74d8a48a67d27cecbd9714af1dc6df8242b825a346b260b0215fe7bb6d7dc99c6cd6fc8b4b72b7eea80b1c6f53c11a52510f920527feb8f95598bdb120a0ab1994809018ca83de68674412a6656794a51686de08656ee110608ca4b2f3a22fedf6bea75a6b6dba05002c3e7bdc1f1424970653d38a6ca29c4a21e6e66feb1ec09a798a79b698136a7daae7173e536477de75378f1e5fc5461b41ca741be33f3c8697829c336db142e5a556a1166a4a45f3bdd363a7af10b5dcd397847ff35c07c402d5eb6b525b334107d442e9cc8f36dcc46f78afc34c9195bf964024813bc95ca0cb8fe5b0dbe598b7a72241e0fbf3a37453f6bd0541844ced0fce91f7a52b545baeb029f0f702f29d1768a510552450b3c6045adcb6340b4549564ebb62d4b61ac475c078782f58a16e3d9ec46771e96b11ca0cb07449d9ae8e01e4373a6e8ac5570731b22516d0abf2c8b362f78078837d715eea446cbf1324f6dad1f59ed643ad8e0404c85f65a3ed326c53cefc04e35021d5f0ec45c359545eb8f35a0ea47e0e31c2d827b21c71a5a251ffb48b9673d201fb2b347bf069666107043366fb5dc418f2950cb5fffd6341ebce70d5351b4d3a5703e6b74b2ba2264e6c464de4c8166c1ca33d13152f6e36c129cc83e9c307f371e1c8a0de8750d615925c6c65a74b55c86a827266f010aa5b768e3dba534955d22ba4dfb066b798e5e03c6b89e2acfa7f52a57bfb268fc5421e7faab1b35b88014b401bc9ae209544bdb0f155628184c8c36cd5dbbb34aefd8a6773d5cb85b386a764fd3249d3f5bd917ea6d30d121a2c25a1280e95478e14210e402f830fffeaa9da2cf21d18dfd5c56f340acca6e532e00a1e9d9e108c104a3bb8c5c44093b4b769511114377b16bf4b400288860d625c705d8fbcd6d1786fb883a17462986c3bd814981577f207e8da75c427fbb944019a8decd9e385d4f74b4acb7dbb359b9cf01c8e07226c30a8e37857934b1161385257bddc7dcead4abdb549c59493c8427912fbd47e101a6830f4c3b2be3e40675e6309adedd789d0d56b253634d97b953b9de763d4074c8e878f116e9e6869f88758d8347bc6f3f15d1567b7e5303cfdfd665b9c6b794e84b1f148ad31b6655195de32596ec470151b5a152fedc094e289155e678d8da9b076c37059c151bbdc509f200410f88aa4d9e3398895b00aaca551f9ac806be47c9dad92599461f3ff8040a91da78bc8065d57daa9252927c31ac233538d3c874ff056b495f20d9624ec6cd68c7ca4b2a36f5f017ae552718faf111444fc281b903567e1f5257d2bb25dc9ae39d76cd1e3d9a3b5e31c5472792ee6a468155627a935871e6174da3a119bff390cff0bac2f62cafecc1456b2e75de8eca520ef3301b85f75c1264c4ba86eb77fee3ea8ccedd17de41d1381b84206c0f3e4641ac7008697edfd84fae7e19e9989c5da6bb787ef6370be62fc0cf3ef16c10e2a006c0e66d68efdd60d9523f24c5e7b1c7df7638425a99749f03660e1915f09bac8a99321c461aa64acded7337906f64c0614eb586a98910f85bef3a3d9d4bf5c9b07f77f0a6dea7500496329c78a20b22d948532db4392fee22d13ff97281658a10da24850bba652315e309cdff1df961b019bdb1fb4835c300b27bb7364f8f50143fd443d51c74466a5a65468431d3ff8e2941cdff34d7296de99a0148f4c7ce4316e3b7a393391c7a72d180b88c1f6ebc0d8bbc306d6883d30d07623b1fa3571605ef4af7bd4817deb2eb270c9b3031c22cf8072f708e64d88340547d3e968d1573638831d905eb0f90fe83e0edbaeb490e13595cecad3ed6f2d1429fb035d2b9e5ccf9e29516e875a3a831d5d213fdb9276a0d3910399456c236d70342f5ca8be3a81a9a6fefb2b95154bb7c06dfdb8b1f68bd54a9d7e7e077ed6c58355ac703e36164c9d7f4bc4320a07b13ea7317474c9bc43007fcbc0c8a618d0f25e96aaa6ba552e15bca679ba8081b6dfb723366457fbc4bc91c7323804fb388830627f7f2d07f8169c5672b4df7f6cac851b270708120085bbbcfddefe46a64db458164ff7f451a90aa2d8a88eca7bacf9616fe845c7a063e5f04842fdc3c14ad2bf98a180e4e2d4ebd1d31ef72a8ce8fc3c358c74e44c5ef7ac3ced6a38328673e12cfa2f9f53a1282c8a9f8166476674f6a17dff2fab7fd9380166ab6ea0097d04fbe46eec4b18a9fb26b2944853304bd5dd424c7166cd74dcbe352a2db4dcda712ce6a59572405686cee09896594e67220e63c5712450aee09ce34d3c16067070e8893a6071211714abb0f51900c6b2245f68d0f98e11708bc2f77e656d8f294857539616f0c3d5eee5aa1499f1a21225f6dad7cf4c17a32758f9246e6180eb43a0ce217f962f765da3565bded3ea716bfb4141bc056b2dfa8872a6209ce0a0a7ec8243620c6ce4a70d3d33af4fa4b63f972376886113f84d78e96e43c3b72fbd62f66588fa8205144ce605d50ddac9e9f10adefb0a19ea6750e6e39f810e80cd2bb2edba067ac3ee88d93719b49392b1337de1dda584ed9239f16dfb7bec7b1f6e3e45bedb5b057be89f3341ecd8f8df8205e7f5dd5de8145b9374215c5908fa5423d35c1f2db20595bf5f155fb0e6ba0929580c57abc236dd5360d7ca5d0fa805e8015e7bf8b4d2b7c1255fb323418bed719ceabe766540e7ba9ae66d01786fa815368a96c5f22a752eece59039f29a59651b57b8c7b87aa34f8816ef4c2b986532d9aa199b5457f78d1b709ffbe12f738e3d1beda5a32b379a932ef547106a65c85484ab83c2a066661cc88770f69263736bfd07180e9dcb2323f82af8102fd05e0ee1f584244cea4256b5f1a01a0a529c0bc7ab28e1168873a13a3369112dce7d6f889ea662a4aaa731ff859433e16892873f83de04df951173bdbba2fcae85acdf434ff165f0cf20156dea532a5dccdc452e374160401b85034968a9baf82073c6d8b06e137880326ac9c9e5e8c7a702af5b6f59db804258b8a6e2883253c55a8c1068245583e66798d9c9535467208d2b90d22f5ee93111f99bd2474b099dea99b3201c145a2846076693a455846004239308cad2c1113830f1e0ecef61cfaa56897f5c364670572037cee0d5678eeffe2dba331d510955c470b38105a2832329592eeea48de32349162310bb59d3d72426907029e142f11de0f40d7415e3db7bedd4d94777ab31ebc93a3befa05742fd46318bdcb9e493a3094a992602145cb50b1a26064ef0096f19ba69588441bbf155468b202016c4beb35e2c02b1412e3d7ca8dcc858d9343bce4ca2e04fb9c7681a7679dc60000bd6a5d8cef06990d77d08250377df8f39b9b097ef6e47e9f0ca5e6a5cf8bfcbf053a85f87d87329e1db763aa4fa293aa050864457ebb6f7bd7fe9c93c5b869ffb9d849b60a21735d4c1908ec6397e00f2671afae33de20bb6ef833c22effca3b51c013560379ddc36961cca711c280cb66832629a4d144e6482f46b149b6b00a538e6d5907d4d4591c2e395ad8b6e8474ba9723840393e74ea103fd1d4719dd545afd22f65d6f996cadad98836e9791b5c511e6a947a9fffdb27a9b42db4f6348e80cc59cbf4aff50bf427afaadec5afff1685312029cbef71f1fec8d4055ba0b4cdc658a8c27a0c46069e41b30b508dda66311c61ab54bc64ebb99055c730925ec35abc7aa4ea450f8ec7eeddf3ac2d44ccbc9cd793ccff1a91549b218f1781c32df3f5b0307327cef91ef78a3c2b16e4b6822300579710196f7a59d5d16317a85a1c84e7e9a72d1ad21e0c46296fc320b02c5f6a8b35a7d7f2754cd112c59c64c44efa8024e8dd69a63f8da06ffcda8f56159274934b1edcb6eff4a1d791b89f1915b72796dab141e21e0c1754349596f4c87ccd0429fdae2944e1d6a469d4adb4db4b4ca3df311a2213f8199aa9acce28df7eb24264ccb2c61e84ddfda07917243a474dd078e578c2cbe23587ee889b7ea508f2f28df48119d76e2637f82e71e3ad1bc9a12a46e460a05ad9c055a19542c3bbdd88f81d9f90f9fe5e07b36d247f9e393e9a85cdc3683bb2a4c891903231b5f7f07a559074c800c5d3d174adc55498302b20fde2bc65f889f50504ccf8a7e65dca4b0905972b86552629be68db0f2590fdd9053e25d65161690a21c06f31ef4dd98f94d58d37f51cd374f346cc0bc0cc55273e38a625e0a96f3c9b12fc5c4b588c9c8b98ad79d78d4a37a5901ee6f4529f900b5aa3f130f28630c32d268364fe72065fc79e7d98372916680d4a0d2ab45ba7ff2ca5b49cbd3c8b2c878443d6b0285173dad69fc1aace659cf6e3faee7207e37c1731ecbe69f08049aa8c1a0b1dfe127a4adc7cee48c8b9c6e5634cba0c22b714b2bf06009940c4ad1ea4729c8881add5a0167178a1968778614e6f17f34ab75b77d39cfdcbbbccc94c63e9e59051a818731b39fb35b65313f31bce82b7de48b2eee61e1061b00d10cc50ec80b5cc75b52c5112e085b6b14c03420774da5c0fbd808d05e30bcc1a3606e1f6f87970bb3e446eb8b3120606632a579688db5260cdc52ef0e01a7e588b949d95b75becdd0653ca87fd5b22e70bc0d2e8192b4fd07635424b822e356c93fdfa5537bd7f5fbfc2db0d29c1abb7a87f2a98b05aa2f349497d8263a78faad19b7e92044ec6a7cd1a36b4c305ff1ccbbdf514d8d9fa3db98a2741ef26fbb7e705a0e8a7604169b0d2541b43689b6ad7f598e91d39c414496fd5e69f2cf80826b4e7d59ba28e0a0d83c9ad459a1f467fbeac81d7fa8f1b7b73100cfe1a03003331d9d55b75fb0d2596ede723fae9240581967ba38cc9b7b23c5c11767ebb547ef4ed54616b16e7ab946755790b87881be6ed330a60f27d90141080b2db7f697c8 +MD = c690f2599e45cb2788cdcc1af268337c582d6aef12644cce712406efe5373410 + +Len = 50920 +Msg = 2fafb293e5feb306652f4a036d5d3810fada97b60215268465c1e2572233d6d8c60c33452b19a3755e77db16e1fb6f3a13d0eb12ec621ff8ed7bbab357ac1bf79cef632c138acf70ef3745df72812c125e7181e5ad6a277e81527f8b5ef239ca97a06acf061bde0200b6afe788b916a2c30482baadf5e71d098c59649ecdd959a0666fb66d9279307a3d42b48c69d6f12bd0151653cb07dd6e726fc87f05a3aaa08b9a6aaeb84704431425d0e45a14077c1e638309b32ec6964cea3e69613ec87d5514723355f185448381c3fa5477eda0369488377704e16a62f14fc4ab53b8210d055662311ebb65d27e13351fa7aa7d60cfae43dd3335d2fbad81f8a9898372fa959fa51377af8f48434afc824d46fde43c7b96ae60cab761465f6d2489325a66ead463c5a368a82ef9efb94611ca0709047998b135a9ffdae36e8ce3facdc0972f7d030d4bee99ccc78bd3339a3d82194f30b1b05ad994afac38bbb0855a8bd68a23efb4174a4b6ad6a5b21191a7585a44274a7177625c28ca446351d2e3a56b234d8e82ae83a5504ec5bea89d1070150ce6c9be334d418c651aed8f886ff59e2383483eb9a18ec656745fc06781b291cef5985d36a12a25a443bf324f0763b7b24d85b2dfadf0131638fd2096010618b3dd1d162966fe39b0464302d1b2d7fdf734ada4c9aeb280b79c0091d39954f0e325c2b3b4a5a711b1abe0c7b37839b91bbf28dd1facbc556125d0dbc65084628555eefa7e650cf5cefbfd48a061713445775f2588b0f6da3b5dd5c6162e7eb6c2f508b530ae152c2fbd044e3e7668b39ee2b843acc048566ecb771a6c3b2a34c18e7aaa7188aa00fd795ca135be04814e8a9c0134e79a1321f71f9e6f807124aba7aba2eafcb3b760b76d092e412ee57cf77425c82ad4577d6a331bc80439cda7c903644311189a7f009f4ed108cf2651afa6780f93de6baaab1d591ecf6c78de7beaba23d0c1f183db5a37c51acd8df43c9cc2b229a097cf4243201aeaf06d7745c86a323f970493d1068db38012628d26bccb58f4022215b80f38645caff49baf053d1969801ad8690b18424084ed46f3705aaafded56a394e768a32d8f55724209fb8053657d7a2bd1a01b640d75452d1f39504b4779a25e35797f667ad723853d6c0e072f73a09fc1ede5f39444b25b302ef1e6fad4399f6034a20e57c3d70107576c8cc445724e41c649f600a0b6060d0235d7ecaf91ddd05eb12d0e61b53cd08642ea0e3b19bfbaf5ef743bd279b51d7dc6250752d1a3edc257cc86f9e6c001bf3729f49cbd7a95407e752c2122f0c86649d8310422761f273af1a9d3911500cbf3525db2850838709f02bbd7d940768769f9540eace0ce5402a75e37dfc137721f6d33c39af00d4df921d03bc82b8fa6cc8f57b89668621258f38d6cf84e0c7b63805d1824ba7a9e35dd5394143b7b8c1aa2224a09974329e4df1ebb0344e9b06695c3f94aefe92dfa3b2c2be8f8a301fc3b9d0c2cf3d9614d72fa6c282935d7d1b34dad3416c1c0f14544486ae96dcc1960b04628068d823bb407c7918758b94be3e37e0bb76a20c1028132c29642b71b1c433f2458c55358ae2e1363e5ba1e7d2c6db2f75a4c15137acc3319878b88a7743e40496fea9d4967589ac9ccc3ce0e96d3921f88cf668fb60e919745ae0868728991bed56528b9e76ba2e9c3db90a729fd66acc85bdddcbd2d95635715ff031d0c7aac129cbc4e375174eb526a2df0eed376c5a35840a3971387a6452635237db0433bacf921b05ef058f801d86e90ec3e0993a02e588b4da6af87984b716e9b5b33922de31e8864329538598d18302b24693e4745ed3de6d0542fd7eb7d8c7ef693da1dc27d7e52fd75d2e1f1f677b46fdced2005c7606a77c0c58a6d1f262e6aab3a02fd04392f3b3eee216ccf0e8e05abc8b4d7ad9de2853972393b20e4b49dc3db66fe7c6203d339b6a2676a9cc1d01ef88a21689c55e1085e6dbc476d177923e5d02caca0d7adae50eb4890ca56b67ca52a4cc104cb7375b0ad585e6a5fe5137fc9ef5e9cb2b1e5e48579094054a10ff61dc17d7e4c23c79182772b8295c8dad1d8af58fe9cc7259bf6609da5c3781d14eae767b1e1d948287381785ec00cc10485d4636d9dd7b89cc86714a2ac23ef2719254646917d3e9e08de0ba5e898104058c64791bec9e41082f535de1689cd5633e5e1e465f7f21ac9f7ac0015540facdaeecc130685f21fad71c9020994fec9bf8e0134632facc53f3225175028057192b2ba9b7ef32af0d04598b58d2bcca945886edd950eb4c6f1f83d91a0fc3cb6087bd8d02cfcd3ac73d86aa0ab367d1e4d3af088037a514667b2bb170eb8faa4c5b2ef5b1a86367a1f92076a6a9e5a4f600e4fddb45ccc6d2ac66850a144886350bdc7e3507a9c835adb37bcd349ab65056b5283b09d6d62c19e0ce561882e1a31062811d4c14befaf1bc13eec20b887c5b9c323ff237c4eb4a06f7d566d33f2f1f3da8db0418ce5a3ba6e97bf0bc8de27616864aad841588c3658c189d9e11217eea4feece4a68dc020067054f32592b3c909efb7a304a9d0c7905801b57ea22b5e500d8e91e3108db65170b1be15caf15a706b316b0c6808bae0ecc6ea53ccb6aba461a030899692e21640e056e1ae6a7c64811d1aa2bebd790e22e15fa8b63f3c69a329a8e146580d1f87e9a1d167a598acd985970ed3756be2a459fbc5884e7b667a32e3334966a032eed2892c1d2a14111a70ca98cebbf8261a36a8f16b6bcf658fc2c8c7c74401181da5f53cf7825a5bede79b88d81488a02b814d75871fa02c89e13fe4e77b9a99bb6acc471e34d052f9f1f225180a83198041d19903f15785119730d3d192d27c7027f896bac8e0bde796b7b8b724525ac17e1ea5076a5a36cfed83ddae11108be6e66071f2c7f1665eded289dceb5b2895401be1bd1012076aea2048a681be8cc2aeec1feeb86a1307d22be0b0e5074ea490b0954b6ee7c28b97f05ce0694348af8884ead723b58d8a79ab055b9cbe929775c508d909422dd9fad96385510787537a1018d590399c8edc383f0498e9be16f84283906b8912fd1ec4a3bcc17210568f78f20f885e07bb01bbd8d35fee98c8200f4e971b26379e089a65ae42ecad61cca4c0ae928c98baf21d16f17b37e956f515b117a17f6465c241f1825bdd241c3b7dcad9372b1533b7444286742a78677f3af43886fe63f953a38f6195ad3e2ee3e957b9fea347cd561aa3b9d0310fa4c7675e215109fb04c3a7877377c4c340ccd1b1766f5df631d98683b319b374b5d48538fb8a0af32b1a3420df898a7bf9ff1e1e3712bfea07476f289cd6187041ae7acaedb96814186134a4ce53682e0283b6e7247032eaf6a9bfdb9b90c7cbf05e305c20678b2673a08e59675ec4a30260835466101fc0a6065de4d8ce2a4d6ceb8d36bc1bdbf1e3dd2a88d33107a3a29f6cac257aec32c066318b7c18a8be5a5d7ba0e85ec03c1122f07839549af68a47583988370309ecd22318aff6a9e565bde1e1ccb7a2d1a576c873c250e36461603141b8ceca0cd1501bd298f1958b3312a64291aee97646e29abf96ac4cb5cff3de0dddc7ab0518eb01036090d5786c64b40b5fcbfdf49c6c4ea5dcf03cb07e0647e51eab0cba68a8bdf12e5ccf74b9bbf2845d974612501fcc6dbda51b1e13a45410a30157f56a9137e42bdcec47c22048f4b4992d9a0a00fc5f605250c739d2edd89551f37cc6ad58267f9894b82e9a9ea58b5918527119c6c3ee7f4573969afa831c244817230406fe51183091a532dcdd0b6070042e7113e08eb461ead203635a5f00be90299f2ab3c9e52698d1efebe55c359e76e910c9ff697a0cf3961510a58770bdae8185ad8e1186e09657d9b105a561087149ffd268a658ae588ad9e9acbbf9ad38d3be75d74e83c452e2f817840f6a18bcf64514636ed7afdf5556d7b62425f6f7c6536cd6ab653c96185505acc1da352199ea7938e97d78519f95c00de97b00b3034b79d24eb2af28a1f764c3e338c666daf7e82e3ed56f75129c8ef73483343332ae83155ff585d126e61a129f0d35546073488e9664fd15547527bd2ac6f841fa8574e507b325594f2b11e11be0e9b3d46683a018b48af70d2875a7f5cbb5a303d7338b6d76f988c3cd2f787f394a4bddd880aced4c7fe4e6bb5efcbd1ad422f6aca84fbbc568262bd45e1ef4a0c0e324d227fa3cb442a48638cc06a93cbb867b0cbb781629dafa2e49851ca29eb345505b60d22e753dff97a6a60be2b8d49739005450a829b7cd75338cbab0ba8b370a7c137beb16d7bdbe0ed4549016861dd98f5b1d994d6867a79a5a40467db082fa3c283e9a1f77a5a5773d29d9df38df02c2b828111d53906d86d9f68e6e8beec7a3876363188781f4e9cbd1e89a54a65da053b93722e1106f00f024ad1582421ab919326f8a6e17536d6596e3cf413a9231141733e37aae540f8711cefafe489a87c4f2e6fd942f6809f3bef3076763487de48c2ee88733c5bc870617a668c6f01471edf0f76193dec75e923fc82ee9278da95e50ba6e68690ed64bb0a02685c3680969b3023d0a5baf8c5af09dfe93d9684dd6c0e09912e90d5d28c270a24dbc8c72af5aa5905b87c8665e2d0b3f2a0316b63ca7e26efcecc104e5759f42e5838796070b69c24f0c1ad4e51f9c597750a0ced82c4957ed1b33b4c9f0b47017bf615bb8eed43bae8fadbf39edd7b43f650d7bf1789cbbac1e6a531d5c3793a91823ab0c2d706340bb8a0da0c044b84ded65a7d1b26302029c6eca29e0b0126438d46d49edc5a3cc35b8a863c06cce688eb039be032793b73d480235a5a85710c47c89b85959611ca83f76ca14d65c57f0f71901936ed893aaffe289d3a7c9756723e6a196b706f6ba28611ce50acce3bc422fe289c3385e8b9b516d9133d05ac7d26e4ccf64fb23137a50a35a9184d49a9763a80dab1bdf8725392807d6d4898c9108002ae9a76b5c3d2aa59cf2eef231009d9d49b0e9df47a481035e173dc85f669c07cfcf71953d79d96bd2b570042a84c50762590b2673201146be7e74e0e85b13a7e79ec36b5d37443d256374d42c2bc32f832ee77cb2a1d1394e94df99ce7753299adc04b3657f5362bd836128e0fe7f5dd2b8e6a9ac30a92337e0e7bab9c245d50f139b36fc57ee24c19d9fc9ee04e1d9777e70740ad4814ea0ebf40d5345d1f26fcaf2bccbc9fdc95a3a967ffd46d2ea9b09eea674964100b23b6f584107e0cae18a700d7adc689aafe1ae11b5ca38d966dfc607917cd182955abe642e1058a38eda7df0b09817dfe91a4f49c09afdefff8a625f0a91191c70d04bf9c06923c69e42812e1506f3e02f6de1edc3be07718f92287686da01156b237dde9f19277b384ae48f522de2e4aa63ccc6693c40aa3d7d8214ae6172b7b0ddbbdd74284e09847b0fdb0f16cd358183789c571e8ee132d5d7002a2d524864856fbce79f7ebaab5c68daf3c79d19dd554d37386cdb5d95218f03a1468b11b2a400449f85a1d4d5765854a74a38d9e662b45eb22c0e678fea12e5bcb5035ac0c1d63d45e29ea0294f4810d3a788bdc33113db6d680f4748b7c76e2281a46bb664596f80bf5d66d0719ed71ee4740c9d4bd3741227c645e71018657bb2548bbd16f1a2f923c66ef264c471300be3109b365df249721ba9957d6c947151fd03fd5d069d5816c1ffb5ae20a6b223bf0fe67c181cb950f6ba79872cc1aa64861c9dc4002944a0366244d91c3e4c35ef52a5a46bbc0bc93fc1bcb5beb5cef6d71bc5d0470e65ca0de0c56d1e00a5485b210137c098e7e5de0685908b38860cd84b9f0b4314649b2ebf61f090b56664ebc422bc7e7af3adbbd1fd9ffb127ab071f350fc5c02e91c81473fecd925369187822fbb0c28da28be6a4b6a770a51e98a5a032bfba29b53efc288e86118bed817a451bdd46a425ed018997965e9b3c00bc9de2186ba234a5e76636d9056a6408372af493d0ad458d7250c552e774a3bdc88096567132809b7acf902cea695d2b33472e7afce371dbcd7ce853b7cbb65e5dfad7f04755396e3ac712f83d233958f32c11f928013b568770791f3c0b1430f16f2f8c7a84cfbc9bef47c17a0299100b4c57a4fe61229c24cde02bd0ad2df4074ff571773ba40502aaa72f2d91fceec01a57f4cc9da80b1a07c5e0324c6406142fd245b9f466b6237ba987c45bc553d628ab7f2f013c21fb909302cd4366e5bc913e8fdf49786e62f4d761eaba92dd91f9ca8a92566f8f3e0acfda0e3ca72144e6a29643a5698c3588a953ed48e5eaa8002dcda2e7a29155d8d4fc6192953761c2972f8392aaae3fb9a7c468911f196cce5dbebd4f95d6c78d5ad083dfc19687a794821b9bcc32d5fa4b39c90dded874d6c2b46df889ce279aca0cd19eaccd1af82354781b3eb89ced1c3aab1985a6449c0565117d1ef5ea739af7e739c759b046bc0d25ab82adf8e4933d6b6eb40150908e476447c5dc94ca5628114b91cadc15d722a0c738917e8338b8a657da881d56d5b1c2d31ef09ae17413fc4eac7ef2e7fd1b75f8b0f1a24b7542d88f79992f51745aa9b97ac0715b8d5204ad7804992fa67e21ba9c5ce8aff1527e5001c2fb02d298a56569cabcbb0a58d70274ea337f5bc110774b11c623056df454138404fd890232617c7de172639ecfc833ae5639956adec95ddecf375a0bf6f61f5ae1a3f01ddd382368640421aa6b7924af75f0ebf1f92b3512786f4792e2d095b5f598b0420243ef08c8f2ecf2469fd88c1737b7fcec17714b363d56c9445e1733c54e32154e2f4fdd94c0fe0cdda6bfc2ce6081c2141882d7ad241fe5a8090442d5370e1e1d54b6654bf10d608d185ad1e02df2082d990a7631b60b9e6a6bfd61b9d59cb30c5ec32e42f56383f18f3a3800d25135853348755855924a17f1532ec7bc768a77a7e6973e60c8ed9755ce63b50057b0a751ed73a5955c7f3d23b5f8a35e23eafbbaa14e82a58613eb1687f3513a5e20208f69ff9e07b2b4569d865db13d1d7b15218392a446237d594c075589e2dcfa7d363e57a5ff4d7fd0a954dc95cbdbb13056fe3237c539b08e50cd08b38c6cb61a00eb3a521e753857e1a1e3b5acd703f9d5717ba1953123e6ef398b52a985d98359f10626d7d28438d0ee018532a809be27adfd7658926e0f51ed6c0bdca0db45bbd05998adddda1fe1a9c4a90fb73919b7d4262a61e5e54433592933684631dda109832c131fa059be559b85969cf87920b4944253a420320dfd216e0f0e83c7a41d3155a9e08d92a181f4af69c1ee78dcafa632a035b5553c4a0310233237703f8be2a9d4e8e84745af6e8aebbe71855625fa8fca430b3a68d03cce3789c373cdc605ad169146e4154e77acaefb382b27c80fbe5434a83dfe204cfcce5dce5ee96c18b401622ff59adf9e8925f098d6bc063452b092f2ec76aa92205a26ae7e1cee9a6307e419f830e351a4e3471a14ad5126c171d691d26cefcaed6d8cea7dd2be194eac9f8b6891fa1f9469573261564955af1a780b7c4b6055987af918baa55b03bb61ed0ac3187486bc2ab98849514f2f501d1fa6368c8cb0c5f4e3afd0ff55e85dba550e944ef2f59099d6723928e33278ec1618bdcaf56b0a7de5164d6b3f459a38800d589fe60ac6494696cd47960d7e29f3c96e611ae2ba8865f28c536799e54ec68d9ca5de24a1bb824c5227e7fed439414ec4f97dc67a76febb0a527f53e37fb115bcdb3bd1d7630229745459a50fac870f5dee8e74aefc07d663d2d702094dd82c55ba9f90cbc25eb4b0675b8ea4f62d8185dadd7bec7a29db157f1f32cb3ba437d3ce79ffe37be05472bb6e2a2898ad4c0928db4aa763dd4f9b91a854adbb9dded3814b7dd2d24faf57cb21f60f26aed52473187f545b8a9a72c512f625602d77b17d84790e77e52bcc30e770cd027aa37424058897c3ca521783ef85c6abeb991a0dd59ffadf59303c675f28f6cec94d74c632d4d63f04ed06588e82060150c969cc8f412c7b147344e8d99cf0edf319a2c42102941fd2f1cbbd80797802e56f2d44421b17cd9f5b623fe73b5fe280ce9ac840805608acd6e41d55ea71132220c0df7e7c4159626f10d71882983f0aa2a92d11dc906c0b22cc028f4395d48f54e12894e33da0f614dd48ee114e65f95c7a7d3585e7cc765c00178d136aa99591faaa35ee6136d2e323ffc855c709c5426b32fc0aa0ac66e90c96efe84414dd5e79ced20c508d7150818647ceb66d06fb17e905e96f7e55606e3b2820d6a8bf20fb10e9bb901769f37256dcfa713226ececf9c380a8d4ea38816eb65b76c7b36fdb1afd7a8457153272fc0857abebbdae76ffb59ef1226e08029c1b06c91462b1a6477dd7c1df1ba40fd04a64baec23b632756c62bcf989255e5de6a131f1459ce910fb41bd11e5aeb59e23b012c6017aabd5588a80cc9436f12e79b945f0c4782021e646fa91fbe8e09024b8680bdf824f99fa84c11e47a3678874bd799577d9c7d4df65eec1d6b93d60bdec1f2006539a5dd2e01250fc012de6483c3151c8386cb4471d2e43feb6088a6fc9aca52e75187b620ae91729c6b0d264a421a84e2a6b4aaddb2d7aec45fe77aaef94fda05d469d3883b9e3796a9ce76a93cf1b72166ff2743e60e9181f6ba30fbc6cac1472a11db6d8f91833634e7fca797e3dcc82d7665aa55d111a78fcb6fece9832e35bb4777d894b5810574205f4c3c361c5f62df091ae96856c091e0e0884bc24a58efd54fd03151568ad24347a013329e6f6f03be9b891a875464c22ad7d2cf3c372f820a5d4eac2d4db4165eac04218b7fbbaa2a361d30cde97039f6e167f12d5ae1155187d40f2cd783634977f8490a18ae9bf5f28ef24f091c0decaff372454a6f57cb57a9c27bafa8f0b309d5f444c1b0a0c8d8c2a8363bd205b3485c98ab8e3f1021d4b60d435d8985426b85686002297f4beea29aa908fa +MD = 9a92222ce8f3e417860196d35ae007b24b9ec907dffdd12265f4fe115e8dd390 + +Len = 51712 +Msg = e9554c27031810f19f94e6cf23eb7990b6f74983f431fd82e6d1fa2f3137347e8d8a4474799fbc2e2e1cb724d1ddb4afec96a4c91fba4114139ca21fb0d50ce490e50c95b31dc29874bc80d0bb58941e757f6127419fb5586c23562820dfde9dd8aec9121759cd375abb6a594b23c1e437faa926c2a60055daad3fd4e91e51b24f2da6740f1d8314c8639c49e808e4091c4fa44c0b98ca14438484aa735a0e2adca9c941022f8c36a7fa3e27f9cda5960bc57924823cbd9b91ee4f32275abd0d666c5a04585891a5ddc97a7ce83bab92eba55133905c7ff4aa34c5f56be80564d7bc824278603a6a541876cf1c1a9f05a63753039dbeb827789e107aa8ca8e3616e26885cc0f2e8cf22f5aa8fd3228f723c3a81b122b113ae173584947c9018b0b263654bb2d1613a1554f8ff34aef714a917703556b3137cffdc4ebaead066b9ecf1138ad81990848d37d0d662c9b7a03e9e944d046c22529827de7473e44dfb72723b80ad46072cff10ba9be9ed51b36122665ea84690dd74babc5794464ee3e74945c3bee12591df721ec6369455bcb5555ee0aecd0f6c0a0740eab860da11bff8caca69758c51c2de95dbe559242aafa9e679a489fe8cec8034947cde8ff36103231b497dabfb3db8884352965d8bc492a59015e7eece80d7efeb4e19d1077eeae72cdb53f4eca4829e931af6526e789214ca7f61308f6b50eb65a8ad3dcc7e329f75aba307b4abdf2151bad3b331404abc6f4da0946e109daf7a190326c0c35cb49c16f544d19820b8f59ec8e072c00ee5150d106ae8f510b4cf1ba64c7302dbbef6c9954cc20df9ddf553407ab15c6157423a2b247e9d5c83ab2d10ef519132271c103d700471cd08e754c4e26b99e46b8d516b719d7dc3a4b4c9edbffb12f27582a7486f27780cb2323fe0a80fecfa9a3cef5ba2c42b0880627e670ecdec8f32b0eb309a99654b726c610e3c2cea368bf760766891097dbf3ab7478c48a28ad72d589072d8de0bb1fc54b83f31060a894361360372bda5b9b410f998f9c957eb6e6be2887456c00978a778f1bac4f94a874e3533e79c12f854f7e7b56fc588e7dab1a15bea540ae167c5cb24289b85186993de5a7e49380393f8ac72192b904528b6576da94a4ec2203c1927191e30ab30eeabe79539a754077fb25f646ff08baee66f2e4fcdfe2458770d7b0ab17e5b83ab287bcad1c372161993cdf0074c43f3ce632e3c43ab906702f2a05bf9e0a1e845ce878dc62ed64632bb5e3a85e5d68deaddedfd4fd99ed27c7337ab6bea26d56b288b6c7b4c092e77b370a2606febd3a839de01470a9831200991676c0d52b177a107e5659d832544f6b5d62b4cdc7b93017ef6cda124f9aa104e1e8eccae22e7d27d6719b5ccc1270f9e344b0f20dc37bf513c485fbda27741ee4f489aa19058376c800c075e989a688a5b5419618c12ddf5504b78daa223f8c2683e19c590354a55beb114a1021b8c0a99bb0e16e190e7cbb14b9f049f1cbf9af7b3ac92990b75b971ad604c942704bf9e046fa9935e67550dcd34b3ffee00b88c6dd5911147540857657ca9c5494ce9d6a480a217b7d7119444cc612b0456ab84a127399f756fd2ce5dbc512bfedf49b2301388c559b1920356e8b4c6ec4bf47f1203f4aa2223a9550ac1cb2eb4362fdf1b8ad642a07156c957fbf74a223b23ea151e6ab7ba19ec6a010f804405ec3cbbeb49030628a0c054ec88d13b32beaa444eb9045eb9bd2c9bb5081912705bd0b713e0a7965eca7f446911bb009a41081c137649e5bd77ea68bb4dee00602f8c7f29e43c69af58d40672291d30c56cbde007d8b40311e4963f783387a461b1d06291c629f6b6c66f197c218052409c4c2e9052db3d738db0ae607b6e55019d4d1fe00908c3f1bdc10c0bad8ccb984a3356416707db3eddda2428681ab8bc3c42f5991f4167fc895a3c953f8b333900f3f59f97f282f05f734f249c0535ee396282218b7c4913c39b59ad2a03ffaf5b0e9b0f7803cb147d0c7de989c66333ff2c441dd001fde3f714b1b82fafa767b2f3a51569c3fa37c1163eebb3d6b71a17e0c9e28f8aece99e56f34aa2b6b0fe9343b245efabb6c6c61100af9caea7fcfe5072141c6f9ca113c28cd915e1a2e0966f21259c33774df69d71a9b6c6cc791cdbdb36f948838701e7fce80b99039a16e69018d1e3c239dd1bf06e94a78b0b1df373afc87e4817e357a1fbf64549a7af3a8da433451e16d40d1b62b8d96a2f5c27c9f2ec9940e032624a89688eeb75c9eb586c32cfe16195e1412a95c4e05271e94cb4e822046c79c82524d4de7fa0f179aec552fcb2a67d49003abe029420d9d88a5a3d91190913d9e032bdac6ca5a055ff341654185204a4d6f7840aebf70e55f1477f7ed562bb17fa47958138e06110a85cef5e78f0c67544059a566e5179e210210043fff5ba12d1e80ee57b0dbe2a589460845b1f2d4ac5c9637d71ccc71d756b7278cf3eab5b15785c51897a12137e6efc5e4519b395dad771d8bcd550588f8b4885e99a0941239d304e1ab2075c98612554bd9d03c701943800a5e7b043ccf4f503c5b44e758abb1d4375420876250f6df02af5788ec8a4487da390613fbc5d0a7afa0a0558b94665da4fa68fe0a2ce58c923df8c3d9e7c05b85c4bedccec17eb43ed17a87b4de3bc6af05c183c902258482e97d963f18002393696b07bcaca3a071549b24db707838e1ddf3bea8baffee5a1daca827044c088a8fd43cce6c8592d092cbd5063265dac0eac656ae3dbbf2a3404fa29895ec32f49dc2220bea6cb3e4f3d1423f0c49d5d69502f4e471a1bae4ba2c2b9bb227c858fdfd617b0ea22b34e077128de66e50ab446e3f503ff96ba5f20cec374346f33f164da226c16e2148bf83eef9a81a74c560d3e0fc8f0a306f52b68c743191da30507a8d15e917bda9f9be7d893a9669ae52f97ef04a1d2fc841f4b45a6250a6b3134bc94f6fe629def7f06847842a56ee81a8c233567a903b278c0cf2bfcb7e50c789ffdc3c238a6f20e1563b6f1d630b54a853cc9d697c4d6d473b43304a8b90d4fcd6c537160be5db58f06ce1b9ba8f35c0dbc606321b8879edea559e14f4faa36cf7114706d1c7921fdee2c34480028bbaff26781c9473b446c031ef72e2179aa109c8563d079dacfcc7a5fe07e0eabd5c69f6dd701096861966de0dac7d6d2262b5f34b01d3f091b853be784a00d1356fc13e1c77b67a58308364de0aec86a479a3980d9b5d46a81b2b341b55083e5abaae041d76afa69051c0cc4cd358ea86ac7ac28653ce2a5becf70fce6f21ba9407d952c8b822a29845c51d3e51e81f32c4e2769d704e2111f55e5778e173cc4b1cea2f058438f7d6d4395f9bcac5af0e8985be3a3c04b533fc091503f425fce7c288a4bc21182cb4c5c59b4d87162284c208a145fd196d27caa05156ed5fd2d0c15bb7d5d8ecc998e210d83bd004fefa391628a7fcb5d15627ca1159174bd76fe10c7238f1d957ecf1c31e4dedb7cddab455594681fe6a28da2f5ff4b90e922aea43ddcdb4095d17bb85756b2556168bfc6d3e0bd31fbf06ad78420f1ad38b6aa3a7ff7d68a4638108ffe67dc10a6275d907dfde3c3e5956664dc39283c04b98d5e1e02e57d1f192a0d8786b09fa380012cb42a80284be81ce55e8653cfd591a489988c9c7b990b24ab9341d454f20947160714f6e1878f0ad39bb718db33d5ac47600370184c749d04a207cbd30a299bc6f74bdc8220f0acba1449cbe0a80be11204f5e4d591fbff832476eb9c64777bc9f51d858cc0936ef338acf1629a9b0f6407d28f2601f7c8b1aaedc803896963999128a653cf0dee39a95f3de3940973d7e937c3ac34fe850a95faf5baf185ffb04bfba399a4b696d7c6dee5f61cedbac8198416ba7376c118861cd92535338c9895e501a0fa33f56821baadecadae30cf29461ce36606e945ebc206d4bd18a6cd0f93351c37fc86553a60da69bec1924788fc3ab985158a2d4788f33c01abead80974d26dd676b64981601fefd8ce4bebc924f4af5929003929e012ed9b43a52414185e085e39319f8736d2d1843aca065a4edf274ac807f3f3660a4bf296823bdfec3c9e57ca54e1cc6387c1398da931cce85ed3d268ede834693de9901afea99d6ef2722b90ac9ab174c331714d45f8917ff81798824e708d8822490c2766d80d1f24367232a534e6c909a4b3d03cc538743f7505ba96373f315beccf6277518f8b265da406db3adcfecf8d89ecfa223263a97e925851b6fa034f3742429ca095218d5a39b3cb36f474897e5bca1a8a0fdcaa86d711fd4a2e6c70cb1d5e434fce70cdaebb9fd193cdc8cbd9b21dfa77313dc7403c4e159b4cdb651aa90c07b99c077bdda241aaebe97a1b32254f36843705941d4a832714e5de90a88dd256687e43fc79763f93a9a7f6dc1a1dd43b0b91d275808a47ae3189f487f72447bbf6f5b4e3d4bfe04857b9dd92e4045394a7d213001c6412278b99abcf8914e2a4cf82e8a6a1d7da15607f7cd4429123bfd36845a83360590f8da562bbc0c829ad6cb64dd9536693a76e698324981cfb3908c4f8f28817a2d2b22dc7f140c6933248f052e05bd4a36aec185ee86730108cc2989b636cf2861d83a339e48b9895e00ed1a6403dba6fdc440c7eb432432a279b23ab7f6479695c9c96372a03a6d81308daa69d7b807f7800a670fc8bfe9e95fd26a7ab0124c2fc47875e163b89a067d16bd24c97bf48cacc86d445c6aaf45452f22e6ac57d29992ef70d5db5a9a53af315b7d214df6240e21df71484d0b1ef47169e5313fb139fbd55c354e49f3d28e858d5c2655942770bec77ed59285dc3541485f88f27079c6d242e905ac30e9e1bb5aa921bc56fd98462c52485ea5e7ce47c63afa9797c0bd9029d848acd602727acb4c5aa9c40e4e6217d7ecdcf4a7872aeb5fcd57ae75a6b419ec5f716f84076be72e194567c25cba8ff40831f9852a92bfb649593e024ae91a0c912283d76935b635a6b7c68289f59c91e3883ce77d294b27b8c6cece71d5352027e898636081404a482869b49cbc4697c60746364a94969b60c5e741e220711169ea388fb4f78e5649c0d9c25eb696ecf9d69edb577ea8f88b7f10c36773d7c59f51eac52c3ea73fefa69d12978c9379c41ecc3c6c8d8a287f1bd1bcc6766d251144376d91ff93ef83033d0e0ee546266f0759c35369431184c2b294c8d03d1907eca5edabe15b4c4cfe421c8d6ab5dc41b8ccd7d3bbdb9de49c3cb335294f8ac870beae428d064094c033a6dac3ea81835aaddfb32b5bb3e5d0f682d52ba95e9df90a181eaa9cb2a1719813be97edfe7e148545bc60ca3ad1876967707c557fceaf109406e12689bd37facb018ec43c770fdb70b603301ceee81bcbcdc45bd3a3b95888c4daaaaf2e3ddf366b517922b97237c869bb9640851c9617b5acc14463406a5d1e3c330b3ca9d2bcc48814978b6621b59c31038edd4a62b1f0db91b9586bcf7cddb0c68531a458c5d3db9b853413229f190d7fee409b050346fbd319c8630e4bc9dd6d055355fbb961f018d3fda0c1eea6f61248f43709737fb18d4efc4faf34a96c2f73ece54200367292692e36870a0c94c5844245f66b62a7c93f3c583a9e460415b7427bb5021a07122f0ffcfb5c12909f8a72ed5252b8858ed4d0a638f1694e25ba9d40dd27d5579f0de71ba54a8292a842cc59a79049f2e5f5ff603194d8f16962475c41d82e0b41eb00ba0d3d2341e99598ae7c8ddd97d48a12afabf15c96e99887f66a7befcb00b1a002bc9ebc4669691d175ab03c1c667b51ba306fbce5ac45a436de7ade3ee547101b39d3164831a8a4bac8632d28a0b004aa4776c285ba4fe745273bc40df795982c0c46f9f0473875bf4e0e7a638c1273a6796e341f1ba0984bcd2868e03f837f5dbe5d2ce6b503d84f7417e9773187e6d74cbfdb5ad81eff6f56a7945dc3fa0fd8d68279d183ef1592c3e7430997f8a4644ad27fdff7b363da4c220e2f8de08ec2dc1ca65ab7e673afc2e64fc4c74ef676fb0de85583460eb436009ffca51f454658937c285bcf3bcefa7cd74dc86f2435e6d9dd6581be46249da90f6d119d7c89d34ec3e47691b619f112a14fa24576c8939f27b7fb05545208852629db447bb6d5b74335111629b6310e77705eb733588ac58ef2f8028067fffcacd90bfa89f3e435c3c43345dfcd42da1f5803aca50c54b5dabf819d118b0a766824a7a9ef688a300d38e4061f87aadc61b0990e120d78d5d3c59dbe51e5b25b23b3b938f63f4e10e73a2c41300bf37e072029c4c3827e8f41ad544d869e7e13a52d488fe39db83e1a7214de5b82a427d74fb9b60094ef4aeb1eae32f9ddf706b63b5d9601ac51206e87a3c6e814463e9be654cc116b516d9ac1b455f2cba39c1e85ff359794a01faa22e2df1fe8602d198cffee3d2e2f62163e6d9fb8900c3ea4b23654ec7d2ea498ead71247277a5b1aeac404cd060e90273ce2f69553ba52126a0adb498e8115fe888c48aaf81d3065a8aaf6091a785f95631944cf3c34422e5784b2f6ef23dba5a309678e84cf14c46db9ac3993f437275c1c6faf750274c11fabc13bc99c5f55e454583cf31b6ffde1fa0ea5980b80a6cff3607d23ac52926a88f160447208d5f27704fc6c86a9d9ad7405955243a2db63a4008171ba426be12128ac872f3def777a5216179a2a2079307750e827058bc139360385b5ae122b804f68bb5a6869186329d11dde5b9aec344e1f833c128191b9e94a8725fd50f1ad4fdd077cf00c7f3c7376a6daa20eaf8a704a4b0c2f847a2d039fa09097eddbae0e50941c3da0540d174dd91768466a3ac719671ec55b249c6b4af780e4b1908d760c89c2b7ed3edcfd9edf1c1608c44a39d300fa3dcf380e0993b67c4c64b9526e580ff7c6bae6b30db1e071121d65c4b0c23d29fda85e8cc5c1020d37cdfd03dd7b4e41d2d1f4992fcd039fc64df6af132c47326fae3d1c871e06b90db505aaadbe6d2b43f80f974b3c702d985f1f144a5a459dfaa87ec937f0e70b36e4794ec569953a81f8dfb3494450a3f21d87fa3c9460f30560c898bd80d0881a2200f80dc4edf8f4990df7112ecb8a3b4dd769d322c0bafa9cc4930116e7ba213742af6d169eec04a2416b8b420869dbb8b66af64b8c7d40251ac1ecfa5428b4eae87bcda9cf9e1add2216a0c730c83a26cd038d58edc13fc3712a6473405a39049a6415c3a9979c10590036076a2fc05fc43e81910a105f3d71d752cad3d91a4eff732dad545ef4048e313648df27d52a4223b83e0cf1085dc3cf9f48342cbd8dc0affdaff77b888168b289d3b637e150efb91ba71aeda2e90f1a31328cdb8c8c84216e10ba77c24f8f8a15f018e84c9a740892145d8b95aafcc1f2d3026fed12f4cf661ac6d90935acc1c4e62dc17ecd791806ccfc53496833cbc972bf6f4ae6b8c3ce134329c4fc67607dff1c4adfb4a5f25d1820cd27eb5c409d56ea630ad177058f4459f05d6c676d27810e0bd816a19d8140f18295fa1e2958c8acd3959bd99b8ff52eb43b4d55f3acb52a8dcfba1421588c96f9fc5f218de1102d48530c888fb86eed00c667d8f7f3e399572d69a787cc4338bac5e00e742076944aaceb29e9f1f6bc5966829983e45382f15beb02d6c4affe4e56468de6fd420a5f080267af21d6c34983653f9e674c0ee4bf08cc162716113c195845ec60bbb611cf17e7eb32572c5785d97351641865b7c388ae4fdfc1980c74e0df8d312ac1e769f354a40bbf1c0cd4a6dda3c3fdaef2ce324f8ad3f8bc47d1a402d258d752693e5e54e39456bdeed894249c6c44121e47cf58cfeb03a574976e57c1bd0a9220b6208fafb5663787fa6af1444834b8c2982770240f297a1b2e048665490ba8933a00af105635b25fa0f2eba43d17c8662802409327b364c4fe2e36c3e221bd4b30c7590e5f0c55fc34f2bbc334336c925f286f231be98af86fb60fe57196f9ce023d37b2b83348e81c3308a916d2cacfa561a6dcd313153ee963bbd2dfb083a6162af1034af2b4abc27d7b5fc93a0aa462748dc738792c1fd4fcdf9212b8845ad6562f09fb91c1cb8c98bcec37b3559afe2acbeb3063f822984a262ef4f52373a98998cdb45796d2e44b72584687d338e14b0951a418a0cf9d1535ad6cb18978f68ad4565e8e5c48315f45ace0fcab06749feeff7de14dae4b24b7176132ddf127228caddf7c3ab3da9ddfefec5c068c1ded23ffa10627480b415274bdc24867a31968d82169599d49cae52952ed0b5345ff4f59facf55244332aecd67a7f261d2370fe10a9fe08de5b10262faf8e3e2559b1b136f8300ca5dc07429472902671c432acf8465f80c1619dca3ccc4b5c1b38a2f37e76c4fc3bfb34c914592a101e90760ab7602c9a144c91bf3b09baa79c99332cc4cd06b96d3d3dd0c4928f6b8a1495a7cc7bf7ad4d78a685b8ec3ea91fe80cddb85f87bcbffe8d0a23b352a13acd2bf4a61e4342d37246be24e859c91b918a76b7a2ca8ebadb9cc5b03ff649b726a381e2bb91e35cd5fcb90d829e8016422698413b41a7d440f7a4089cfcdd65cd86dff0d856173ff03306d14f7f76a6667ba2e38d7f8092cb28258b6ec8d4ed0e605f5ef92246f36d74482ea37f15427af4372d1de6a17cc6a8bac70a0cb8b375aa908b92690b2dba4acd64330fe450fc1ab57c6119a308eff3d42a031af13fafd0041538acdc354321371052b44c786679be6ffb8addbd93842242fe862707f97b3a7a606022a0b491f5c1a70ee61f467bb26641bcea116de3f5a030d0c2a30f0694298e1577066b1789e6847229cc18ab21fde822309abb9dfea06e8d4c774cfcb1b1265f51ccf31c73fd9f808fe559829d95334d49b0191c7de1ec0e3d1b2fe8039fdd804b6ad93b44854caca111859c75dad7a0adf802ea23d35df61d0544331a53f83abc7689de6c0c0078d5d739535b2d29ced5e90581610328b754ac1678665c2ae13d6681806af07f57c69cc131ae0ace2a49f9ad6cb5efd0d47c9613226836ca1646b14cbbb1e10dcbcbd8c9c1ff02193582a04716b2f7ead00d49c6bba0627a3c50ed680ae13c30678e11cf8ece91bf9308838f19b8c +MD = ad243dbf969395cba3e3c36b4f1d7c4224f0a3bab01f4569da237f407541c737 + +Len = 52504 +Msg = 4231346afae5c0079fbe189476023aa905269390c0e6c1f9e5959defa5b1790b84baa6e802443ad67b4c0fd34cc80fb73781afae0925baeb7998509b548c2e18d75130605cee13c53a7080e6e68246dd5e3ee8bac74357315408008f6b7009f2039ed8ba510ad63ba3d472b48c5968854105439c436820313e8bb6b331849302d048a8de27c108a07f20ed278575fc16a97cca3dc5ba9e54ffc979eff0f153ae06f8a8b4263a335b96fcfa261bfd8af85e4e8483946458025e6c512beeded25f6c55df25989eded6b00e9f9a94199b9228217957fa8cd7a42519464f7574967ecb085517c31492789501e66939f3b64ecf9eb2a23d5ba1a01a7a6143cbda2971ebb81273f1c5d6a90c7bd77c52b063931a6c364aa6f840600637a9ef383913a2940e1f2268d832d1df2479bb277b2acad2330d397d8b3c4ab0f8273c06b9da778eb1830b70762e58d4a6d40eff7a9459bf9d40550a3e1bc8e264e1107b81085aa04b461553c753a7b4a6f05e24d528a9a950d688943767416223e155e1ba24b29481712a57f2282446cfd691dcb56e2258f4d7b8659ea71df9de2ff17e8bb7e730fd0a31c620363854c68d917042ef2c94324ccfc39c64c36f3dd1ce9b1d48613d671c11e678034ba4361d4428a3323024b23cb4f759259d8ce7d1d27f985f878266acb4002319c600c58f944b01c094d11baf4f49fc7212188536e7742385c3c9a3c4015b48000f2e1bea6823831fc26315ad8800add38adabe09f4c0e6407cd8c66be041103e90f6e136a7f652d920a24a3f476696d16d9b3b51e0ac0a1b1b7876aa39f8a35db022bf7b3b0d957618555f6c74c1dcf32423a3169580b79b06715b88f4c928e5d6785cc20bb0757c1146ff3df75aaac2153a9f61fa84144aa68b1e0dfafcc75c6cc26112ff261a75733bd0b8b87926c5a9a8d739f7004aaf638e674131d9aa4cd9c67574ffb9abe8a5fd7ae7a06678844834f2a6743b8052a641dd2d82a8f63c854d41eff3af505e1154a6d29568c9875ba899b0597edfbcd56d29d8d5b0d6b5d81e6d8bc351335e1e07fc8080c8415748ca73608e118f745adaf34a133a703e3a03a05058e7797034e023f94acf077b796329bdfc3cb7029b50e28c228eec5f13c2824798b94d1cbba5c445d9c2447b543a62cf894780ef02979ea5ecf473a0cb24bc776c0ed5eb1b1f866d17ec1fe04319c79f1e7911c2f576d09d58b42d8acaf1f6e9bc303964bd161278eb94c130adc6ff34a41b9303deb7207d4d1541a478f1d7a37165a21007520f6e3c0151f6fa0ab39701752d3b2420354cb560d7763eeb08af71f63875629a2657f47cf8b791ad8bce1fcf08f12f7ab81277de198982a93115a62b221d37b7ff3cfa4ddefddc772ee3e4714bad678c50d77bd42d64adf1f9dbf74b8990ec72412436bc2a4f423045dd3aa21ff73420a6a4a98d3b90288c080b4ba09454eb919418901105362b9f77c508acac58fefc6180e9506c935a4207ac8c706cf39adca21ff0939639ff8d6da236d519572de92a742364e7f7aada9ec7a10438f5631d10413e8b06e027c2cf7cab668f7d29afa9873f12d543821e746372a421e0ad1a898662417cb30906445c51a635505a1685c125a25e0049d43288e7974f3edf9cb3f744fd213b0e2174490fdf345a29e6672abd5ca9b566c57f3ee827e996636b369bcd071cff9eda084bcd57b323fce6f6cbf087dfea43b9048e5d9a1771a04fbb7be3a6968722faa86a7358db313cdfdbaba46d27284778697f2e390356fe10ea9d6f24b75c004afbafea28d30e529abdd2c254aaf5dac9551a434cd2cde5756a0b5ac7a605a28faa21180fc442a4dc4549338590dc64757066841baf5ebd48e4cd8ad88c0a6e945cc8e657d6539c701b17dd4800624d45636bdaedc092ee4fffe9e99e90f4ce20baad3c4630cba11de644aae52211fefed6312b0c2df0e05364695e63db4a29fa6cd70326fb321aaa4ed981a31f70dd6b70c161be1f01fc1bba54d06d9494e7eb194e213d5e0e71e0fddd49cb1f075353da22624cbe4ba871aab32906e45b6fbb691b80d482e90d879858eca5495fc97dbc5c18fe31584d1bdc8d5074f3252b32064506328f4a5667ca535179c6ffa5b2bc78691ba1b054e2f7ea2dffe87d821795d49da1acbab44738d4608fbe6f50ba857d3fed35d9238ea4d3a8f1ece8dc34c1d12c6701c08ff08de6012e5838335dbd7381ba165d24e78a4ea99026f0a14f2f439bcdb7e44f2b6f8e1ca0bce1b5630d6217cb6bc4beb452661826bf1c3a318a32d21bf6ae5cbe87d6992b13f23d931c53e8685d9458bfa320ddf9def40da278a7b899e5a71f717cc5601885f435b6934dded814575cce2686e051ac01836aa1a8378fad56fe0ef6635aaf396e04941959e065b79431aa829f0a7851ca0550af4036447543625b9fb96d3758e812f5577ed7556ed43f1b607341b5f4d8f91d47749e0166f7b4221cce82fa09eac7a1f4c4a9f1639eeee9680b6e4fbdb1c899134e550ea8f95a2918ab823e75fd8b5f99333f81bb7aa6db416e7a8fd5dfdb8cbbd544b362d1be393956534cc3a8c6f9eed4814da1f0cfba94a44bbd64ea99bee7115338bd08461927d9df6c1c74e0359aae579c3b89d14e08b6cb21915869f73e0b6be4e0255c938b3c0ce5a8e841dc46c9aab8b1cc145f46abe00285b3b5fe68ca7200f3b0676d0d85c4018e8c51b6992e60e72c4201b5f58b74aa6882e49c0e5652d42032cf7054beee06f7e8798a3ce46372d471fe17be5f6e5f614e5e99d8b8f1a88d32fb6409ee723d0a851f22d6f399a1d0e3744f492eb66a989e8abd6df739c462385511d31e38eef0eaad441064ecbb4920cc233d00341336fad2cf761b106fc8cc443e5b552761d09f89b9923e430a66ae6c5c43ddd0a163ea9d999a2d60f3e77730b5499b29ddd32d1d48038985d45017bec202ce725e46f754e182341096e6c0813c44f825ac211bcfbb0c4e9c622ee3281c23da029008a85d70d53808a1ed30a09cf4750414e1f109d954946ffc299814344d0a6880d086210e3c42305c264df39d0219ac5e3c3832698463e6e969c0e9d029658c76c71808825f58700eb7a2e30616ed06d15977b13443c3e97315e20fb95ef356b915e67b96e585b000c8b4d9a1d7f7fab76136f0023abd60e05587eeb795bcaf93e178e01077ced87b820d3b34ee4171567bfd569a105833795336ee9176c97d4a5357a0b9bc3dd0c50c34728802d351f8d0554bc66e9d4b8634777711a821aa27950a24595dd980268fb1e765bcb384e387c5374cfc928e4f23d2f1fdd4cc1c72cc19d3b801aad0e8330d0192c4ebf05fc9d683f56141e51b46d0c41ea1d3bd73230d149d51b9a9521fcf27d9c1837fb6be0e958946b23834c5f8583cb83d7372c06c51d2f40df1ab7c7fc3005c81182e8df8d6d052ec70e0c9d3151fc01228b6cbc1f11d93ae923c71a53cd03cefa2115f19ae922ef773687ae7648e625ac3886d915c47d6a5724d27cafa1109d407a55bfb869681db2b14ffbfab52461e2c30cd66f91864f97b25c675658b6d392e33aa25c4a5f4a07f2b81e0533313664bf615c73257e6b2930e752fe5050e25ff02731fd2872f4f56f727d4c5f9723808216a3d6ece03d9a44e5c7fe24994a0625cdf721604d9f09abe1a22686c0a9e4bfbf64f16436475952ea4edc41da8b33f8716a5fae39a8932c98152a354849ffccae185907fb18e4ef67501f34af2647ecc3f40e4ee1c24066085ece078874303d75367454a912db7eef644d79819bd077382cb3eeb04c8feca4e7986a1bc93486a737e9d6bac58b85e503dd8cec6c6c2c408cf6fa3fd7e02510381fd97ca96b3cb695101acab1a398daa755fb6a0869807f9d4dfdead4dfa3bcc8aac225b552d415e68d7d3367822c42d72d21650056f837d60f664bc3dced1d21efd0a14d69c157a4c88a9f47c5b4b01be9bb77d4b3181bafd1cfcd356665b3dc457169f23ea90e4847df68e2dcc6a4de12061d061c449db32b9709aa1aa2135052210a444fdf7c5981d82ab935e693961cbdbf04e122306873586b825836ae167c7beca3fbf954411cf14f4b7f78fefc803ef871a01576485f807d6ead7806974ace8ba1e16b18a76fd7611a08025949d2f633ace7b2c1cb36aba9bf990a9f6b43a581ce9ec92be4f0e6ea956e2735369b900b37067eb569af469b059942eb0aed9d597a6288109256ac564e203c152b3088e9a0bacdd3cc0fcdabc12cd57beeaf226d35fb2c6937e7943ec4bcd57b90384d596a43447f3afecd6682d216b48f0eb14791b72a983e5a2afe699277cb1e1959c5045e674a6ef2a255cb17ab478492e6731e3507201df50d2fdd5f87a62d6a3ad70f5aaab7b06208f3fa6bf78747c21e7a2be346837f6e875d7062a97f36916ce9dbd68339a7e34dcb915d80064112e5b75b406d44bb1d35e1c34a41c8c2356c87fa308552cdfd0d37405ac947190bc8d51cdaefe6598795675674e51578bcb63bfb2735959af5b3e157e257bc3823243df12142eae3442248aa8107d7929de6605ef8f8748783de347882aff816ffa46c78a20ac4d0c979202fed2e91d85f59bf864452622c1dd8ab02ca466d3dd7b5eb03dbbbf6ba9de6685727cde69287ac841187e800e13a5fdf87179f9e2561d524234cbb130918169bd0bf6a28599d3b6881320db35f5fc03c8609200d66148ec267639c8c34ee6634fd1287d9a606a2d745e1480bfef4a63c8ffd7c3d78764f2040bee4d4d68771ce6ccfbb9d006a5f5ad0043b7d389f8e69f5830890b4ed92d83fcd187f5659a5b2805559d4e12eed5dc0194c8994c6c54f573869c9d4110654c50c9c0e4cfb9eabd8320703d0cac96a96aeefa3abf0f757456bf42b3e56f62070fc03e412d3b8f4e4e427bc47c4600bb423b96de6b4910c20bc5c476c45feb5b429d4b35088813836fa5060ceb26dbbb9162e4acd683ef879a7e6a0d6549caf0f0482de8e7083d03ed2f583de1b3ef505f4b2ccd8a23d86c09d47ba05093c56f21a82c815223d777d0cabb7ee4550423b5deb6690f93941862ae41590ea7a580dda79229d141a786215d75f77e74e1db9a03c9a7eb39eb35adf3025e26eb31ca2d2ca507edca77d9e7cfcfd136784f2117a2afafa87fa468f08d07d720c933f61820af442d260d172a0a113494ca169d33a3aeaacdcc895b356398ed85a871aba769f6071abd31e9f2f5834721d0fef6f6ee0fc0e38760b6835dfcc7dbefb592e1f0c3793af7adf748786d3364f3cfd5686b1a18711af220e3637d8fad08c553ce9d5dc1183d48e8337b161fe69b50e1920316dbffec07425b5d616a805a699576590e0939f5c965bce6c7342d314ac37b9c4d30166567c4f633f182de4d6b00e20a1c762789f915eaa1c89ac31b85222b1f05403dedd94db9ce75ff4e49923d1999d032695fa0a1c595617830c3c9a7ab758732fcec2685ae14350959b6a5f423ef726587e186b055a8daf6fa8fdefa02841b2fdbca1616dcee78c685fc6dcc09f24a36097572eba3c37a3eabe98bc23836085f63ef71a54b4488615d83b26ed28c9fce78852df9b6cf8a75ca3899a7567298e91bc4ffdd04ffab0066b43b8286a4bb555c78808496b252c6e0e4d153631f11f68baf88630e052acc2af5d2af2e22e4f23bb630314c561a577455f86b6727bcad3c19d3e271404dec30af3d9dd0ed63cd9fa708aadfa12a500ef2d99a6b71e137b56ba90036975b88004b45f577ef800f0fb3cf97577dc9da37253b8675e5c8bb7e0bd26564f19eca232fb25f280f82e014424c9fbdd1411d7556e5d7906bb862206316ba03385cd820c54c82ed35b36735bc486b1885d84053eba036c1ebfb5422d93da71c53deda7f74db07cd4959cdfa898ba37080d76b564d344b124dd7b80cd70ed3b52a6cf9c9a32695d134bd39eb11ddeecdac86c808e469bd8a7995b667c452e7d9a54d5c85bcf6d5ffdc27d491bc06f438f02c7cf018073431587c78ba08d18a8daccb2d3b26136f612adec673f3cd5eb83412b29652d55a10d0d6238d0b5365db272c917349450aff062c36191cfcd45660819083f89cd42ecae9e26934a020cafeb9b2b68d544edf59574c0ca159fd195dbf3e3e74244d942fffdbd4ed7f626219bab88b5a07e50b09a832d3e8ad82091114e54f2c356b48e55e36589ebad3ac6077cb7b1827748b00670df65bbf0a2e65caad3f8a97d654d64e1c7dad171cafbc37110d2f7ca66524dc08fe60593e914128bd95f41137bfe819b5ca835fe5741344b5c907ce20a35f4f48726141c6398e753ed9d46d3692050628c78859d5014fe4dd3708e58d4d9807f8dac540492e32fa579491717ad4145c9efc24cf95605660b2e09b899369b74d3ebff41e707917ff314d93e6ac8dfd643ef2c087cd9912005b4b2681da01a36942a756a3e22123cbf38c429373c6a8663130c24b24b2690b000013960b1c46a32d1d5397472e40a8c6d906427886fda99e3e94e142b545cbcb88c890cec3874227a653c149a955dcd2bd47b963d5e477aea59c11d0a98d86e26aaf37cafd4e9057ccbeea8e994ab03ebf6dc1dbbb451688ec44a5769729856d2e2e52a8d283d3e616fcdabe06076c3368e022884108cf569bf363db860010955dafab0f4a0f54fc0c755982f87358d83e08a4136e15ea3d3b1015a87efc6e817e9908a86ed85bbf37912f827878bc56cb4e0f244b54af67530581848804e95b1954321b45c7305a1eb923658dfddfd497182a62dead66fc6b397018aa01c748b648f10fd7c41af34a53ffd340eb0a7b28cfbe76310956230b14a90ceed95172dedd0c2d2db862b341c989769828857308dc93074c4ec805bcfef6075c75cf01187b4d1c4e8951c18d818af39d9d98e3bfa571be356604ca055f1db1fbbd891ded8a7a8442212d46b5e5c9f557328bf3d3942043f63752996f9fe7b3d399c6ece4725c0f12663e69425b1022cfd0a5cdce10673d97abfa9a81261cb5ecf2d099859bbb63c542ce53bb4d25220c5d2f96388010551ea943f7c35d845e4faeed4a586d5f28639c232ba822d19e16c27179974ee132951877d5bdaae65703b76628e6510f07f55b861a9242dc3ef6e8b39c75e1a37d03e2dc5ff8760c4710f3835ab6ad95a782693f4800150ea9b3b63d2759a11ddd71eebabafb2abcd77f4c8b0850eab7b212ad96dc7a032f8855135643ccf619fbe6245b114e2cbfaf57a9c85c3d713ecdae0fd3fe88740682e5e9481855485d7e6a6c068a7ae6dd76a0f1807c04a9f1a25c773dd8b3d05c40691f59cd7cffb30f05ae024d06beddd5620efc902df99ad926cd1d8f827ff969ec9dd28ac983e156c0d298837a1e8973a6e784c141cbff1a14f9bb4e7ee9a5a6734bfb79c53daffaa2c010545f6da7f973645f36c786ea0c2de45f3b2d76289f08111bbff793e7a4b461b2e73b13000ed26dd719479121577974517e198f49fbb2d77b87e7ee4ffbfd9bc56599785c5bcaea328f49566ca40092d840ca9ad1637a8564f71eb7b1a8855793f5fe04838763c3b9c2563c959bcb273ea9c701897e66031c372354d352547e62c0f41f3c3ba5e1b4daf5ab62e3e119c9e0982a36f58139eb707e2f7da273f67bee0231501f992a6bfeaf0b9d254a52c20ec57fa36fd00f1bcab8ae793fe9a926a6b1a288da468725570bc50c080fb8715ad66697955d6ef36c583b8ed3be7dab1087daaa15b5e02c0d913f783537351ded5449d90f2f3cba7fe63d8303fa5c51550e417e77ec1ec647c9e2a853cab00feec78f32844e63b92aeb1c2179a62d619dce3fcea9f5273c2d3c16660bd1109086b5a06a9cc3c93896ee3f30ddcad8230f4e3d6052d8e5d6e971447805523fe6dda8e4490095587eea771078d66c44dfd416a1fd1b9b3fdba0f0d2a7e85824591a27c39758ccf6d54f0ef6c00d965bdd13aed56dac481c957d422abb5ce8a73366bba51b4b718d83ed3c59d22a4f0464f59f3f78ace6664aa5eeb27c0b0cb0bae8eaf29e828a04d1eb88a174d4a027bea26f49e6c47e0443437cd4b29acb2738c93f12e8a5224307727b376fb38fad3141a95a7e9b17dec87d75f724b42ef4f3303f6dc15b3e326da99b818a70277c06fbd2d909dab9dc207b60829bff3b003446746bf14ce8b94bb973e88fb36d7d85f7743050286ce69566c5dfdf23fc31423265753f2127c0e8c988d544236b98f55e16c6182e39e46d662c75b8c97970671d9af17482042f8d0264ae736928b6a05741032c9327bef1a21eacee99b9a6e92f9c49581685ee828c8edce22dacbdcc0b7c4f53003f5c694322ec483ac4b9118ff2e3b386b5e50f8e8ec85a160097c2a14f12541d88a61d70c19d8f55a293276624294d7999fd7c30edd9a2cc2b2aca4242b4f8910a85545282278b915c1a73dbbb81ee983b1c109c327684f835602b16de9d0705cddf5811edf30497f8383c173e555d8ba22b14f7e509c642271f2f44aa364920da9e6fd48a67c20e81d4cc42350c63f9d613d06c8ef9315108511cf52fe5858b38a8e2c3e2ec8c9ffcd56983280ec88be0ba8c20b6ae8dcee0dd3b50f31385edefe7f9087ceb2cf273255c02a0c354e8c70a903ee490a260b7abd47e80290fef0841fbc8e0ca68aeedabede82593ceb893ea23eca10737b096a32fa65e8dec398aa0322e97f3097b734f635d3de600a54c418f52747b166584ad93f113a9e4727debe45f28ccd7030cf908887224b055fbf91a9ae55405288ab14a8729e4be42e90a5a861bbf99ebc09122924bb5a770a8f90de97cfacda1af979a8f28a54453d7e4dcc9f93219de97fffaa25001ad9f5929b06ac2d53677fb47cc3196563c4a4e63b150498f1d829a2bd8e10a718a8a18714a423e4d075376a92797fd5e6fd2576e2344933d6e7fd0fe0377006b05d8ecb9259c79cb0adc29a6f5e6e425a591f9ed78cd60a4d47e425ec58bba58e731dee9879ef9b505bb1b247c49d413a52f3cc9f912362c1627f6346445c1a1f83ff4e9b9704875c197540c06e65490395528e8ee3ca03dfe21f66929ce9cac00a738a1033bee710619dd47d9e5ec0427abc6339f72233f52154ae35c4ed3e3c714b2faac2771139be9bdbc3d6f24d738d81d9253dd499adbaaf88c45ecefad142c69dafe5b5bc24aaefc527cac8571348535ee54a599b661890a4b2cd17771b197652b3f0033e5d910a3f3ddc3963ae359172de8f19bfcac5987075825f39964feaed3b83d82e611b9b9 +MD = c84542b3a3f4fc3432a159b95b5056c4a57115664c83efcfc627eb39368670c1 + +Len = 53296 +Msg = 5aeff117d11521e1a9275b2548464cabe90e2c9f93c14cdc47a1ee6a7e9d5a44d3302e5ffc87f6e9fee2fccea13c6281222e6df9291124fafa631a95ef6b88f226209e4d77481b3fa9dd1c3fe5b431686a61b67d8355612ab649178c3fe004f4bd87eae82aa0b96b10e1617ffaf6e4e7296eaf3189d42af4e41c8e575442f7d2fe2dba39fdd9f8f69db57395ca4aa187c81eff1f24d8a8e1eaa426fc18d9881553dab446d93aff67b723fb8c3cf890cead394f4f3aa7027831a9888572efe04423558319a40af746c5f1a1693747db46418746c7b48a614121f35bf949ca26e7d567cdba4892071c31e80c36a581a777eccf8d917bc9edc52249486187b38387d3d83b2fab1a586f62d0e5fb6dec1fe817dbcbb576accd8b9d75f7c413f21fab84707482b7e912cac071d3be77d068212871a9398c7b2a1cf83d0f2ad5cf21db50f621bb52495cb2b3927f89ab77adaa895acf27a77d2bfe9d6a399cb592b19f9f34e9e066805eb1a3fd9063f128140ca05ee486aefbf9bbf2c41c209b82f980d9f075fbdad7414ef878af55312ac5ced744915f883dbbdb611261c16fe81e0566f36c1396962d121acc846553c6e97895d67db91f8b9ae4511eaf84190c4bb7af0577318205498372c1b69d3f44a89241da509c5a2dbe602aaeaf738136a61c1aed3e5c866cbe2b661eee05ddec29a54519b411216a4ed6538b089590ae57be1075689c8a12b3925fadd3a416059538085b4f1e5c8c73cf367d63f22cbb8725fa639ef97640513ec6340e82d0d913d4f267c9cef3d954d23a4b68933ea75ed73e80877c323ec0b9017c46a7f4aecc006b07cb26cf9a1a67c7bfbe7fafb8035e4694cc2ca654278b7a4d241c6bcde844db01fd30d616ec16459f0ebe65379f4278671412bbcaae3a976e50e81b7e8e28aa1e06f3f197f3681cb4ff594a6c59093ec0083457e77f50c2a97113ee09e63540268f77096356e4b5c63a57459e5a3dff694f9c63f4bf5562c42fa6cbb519f206e13fc504c33e13769d66c03d16c96522289252c83999cfde8834a899cb4fe86217bfe4ccffd37bc8002c9d1c1dcf0a11c6795c6cfe3348a0bd25214293af9dbd8fb6dc475f3ca614b834f5c9f994b3330babc4398bb5470f2bad19ad55629b8012cdb65f2ba21cc08e25d02cf23fe8f0bed1921627485593997299c259906a1168ac79fbaa2c633647a8362d52f932b0a992ccea1c14f994d11ca869e65f90da59fa2d02250305dcae6430b45fe917db92977c9fb040bb7a99544f8a46fa9741ad5fda5ee44e8a1c8a02c5a9633821d94288a91c2cf423aebac2950dbf8707b02b8589f62f36785da229fef4a40dd813810c5c49d85aba96fc0d82da9a2f668e9c1142b24ee35906bf82e17d6b91c3ef16cb9c0efb97079b26dd1eda1f193e43c8ae0b7a887cb481a9b4792dffeb6ad6cb6e7153ded6922502dc72f3956e16377702ee36272a12352868cbeaaa445531669de300ca3de49d56b0850e465577d271b5f2ce7114fa8a0446e19db2c40d66b0fffbfd05f48469eb015f1478f7e87c7d701f2aaf63f4e804f5c22f609219df713dc032d724faf3897809eb747bf19d65db7e33283e88b7f21e7686fcd7010271fe3b888af5cfa2f7bc8a7d820a1a9def9d16cf26ce3f5f9468068cceba4e3977eb72e5658e8addff76eab0e9ccece4e45ef0e7ef3aa048b27c79271d6487eb4dac6f33af18b30e674e326ef3e8eeda0bc81264ccab34db1601d74133fd347fb9e83a58b1bad39cf8eb699ee687a9e72e81862c0549817e87a028c156acdd5f8447d93eb39d71ef7af697280bd0a37413315429e23b119acc01758fcf990bf2767356cbfce8156fb516c4f3aaec66e783818241abaa6c98aecbc593e6ed45a05611b8e9d6c4478471f4f9e90b027aaa46181a5ea7bd18def5a721b5e2d014d1eecc087f8759909675383ef1753b652324a023671f9d9fd6693c90dd0d69ffed04494d7458ce770d8a8999f332bfb1bce5bea6445b7189e7d1331af3ade18e5c61338fb2914c8551788f14d888b5e5dc501caadda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bfd8b123881e3ea4cf2bb2ba7c955b467ceb9fee6e98481d9f0a204a3914be7eb7919f109c4b79b3651bcbb4bc51b97cee55175c9f8fc48abd853966b2436102de00ace244fe5f0083b22e1309250c11839a42f39771beb8d64baeacec6f4eea1a6dfe20e701989212390062cadafd0e2101473abf06e1b0d3a5a8a550602d3e551fc052ec1acd72f8f86c266938337ab2d14eb97d15d2799ddb4fd744dda504765f1801bd12a6a61f3797e94d07575d1d5381f93a683c1b1a35cacc31b05e4665752eb4c1b0ca386d3eac32de0f10c04acf06815fc5c59f34fb420c809f010b0aa92bf360bee22fcc54d18a841807aa218c05d952f5150cd274de1d9773365c4d4237460202959423c32e78a7e9e3238ad4a78a7dc0d56adce9c789e0f3a440168a79360f468c6e59d1ed84af4b4d336ded131b47edadc139a224d8c1e9f4bf4dc71a4aef506ec558c733360406ede3b22072141746441ad3e71e90a41bcde1da42410b0be8e4a207ed2b170ee26a3a41b5ecfe5791437c9100dd3bf053d8afa54317ffc9d8960c4e8afaae36a76d4002f4a8606e9751f05b3488600d57bd309612c4b092e72b0b15e7cb83e21c9dfede25cfc2c420177d19cd488863ef236c96f66fa6cfdc4ca7444dc41f7b0aa37bbb8f88acc1f43d2bb311443a5ae5b26c8b394167e680a0e9c4020d096a3926c0837bfca7cdda6a021249a5fe5a0013375f21617d419bd0d87b4ecfc91671cfd31c31533a509b460b1cbc925ccb07eed5f8f7f77046f5837c527b32e8e67a46be70f9b4eeb2ff7a4dbab434dd15c3ea4f40022dc65f5562de31d05ded441b3289651b474a5bceaed0d577b208a0fcb0ac1d8c2909f384140501947960971e3b3ae5de36d6b3d0899d534e3566d479e8f479db13c0694b42f9a810adca46490adbd78ca61a23cdb4bb1e81e57d1a0439303b3814742b7094c3108c22b2bb654773226bc19f118cd7321c58e9d8d8634b674beb54aca0bbb16a1f4fffa05d399a0bb0c4afece6d6990b371b6afc775fc7a1913cfaf030f642f6bfa36d1c948fa9aa68de98890b73a24d55118f7360c055e6f4732ec843e7ee70d7ce94afc82d1f583203a3ffe62b9b00608381c4fa4e9c3f5fd71abd41585edf4f199be061dca21df679f8d5e1c62c2d3fb96777acd145b3b7b1e356930f3a4b0fccab38c764da029c89c093630bfcdbdafb6a14e010f74be549b41c9fd429bdfe2feb3e638d710e0d7b23c2d3c3b4121991b224fdd45b0ed1e7b396ce71d33b068a847a9b1f0c4a2f9748e99bb6fbdae4c2662f6be5190463d3084c88ace1d00e249d74d8e156bceb25589022ac7a3c23d8afbb910bd8358454dcc6364ffb81ff465fb5839cf46e2a6c7a3fd06dd93fbe19b452d90e40aa1ab4578d3e20c858bf38f2c402189168d2b5d77f0dc0bfec9dce9e7baab5fa6a0e39a0280ae8f15c37427d29bf1dd3b0cc4896d7416fd449a93e94bf6cc9ae7d492ce01f006e1d954fac286d20736250016de1d0d440c161c8b3bfa4881303ecb2d53efb8a7cf50cf0bd1d178fe1e750586cddf02ffc2e39e37346b46458a2be307be3420fd821c800be81af73310ab6b88cb4c2b86bc2dbe3c75277696333fbad67f67ff74b48d168f77fbd3429728c0b168ecbd854264eaef70b74fffb5dab10e2a037a99d123011b03cca3a92c8da38529295f780029a2e4b98338fe7c8d7413209f48f9629ece231e35dec33b3a62788e9a77eb8fdc8490b223c7ff01d87279f583d10fe320dc2c19affb4d6dcfac000ba89d3c2bfdee97ed01839de04c1ac73b69b949cd89c9baa8937f941eaddeb012ec46066f1e7f5edcb4e2379248fb7f44a958339c0a05432da8d243d865890d56ddf8c6e3be855a03a66a78826f8316c3db3469d9521d5a2b2899b92587197c29e62bea044ebf1df46e82cd5b1050021b67d4390fd2806423cb4c7080732e811ead560c6b5f7b1f2175d1a266ebc0d5cde7ce3daa0bbcf599d9510673ca36b0a78c1d9a635157d20d44dd84405274064dc378e4228e5183100b5df769ecb09f471ae91096d4c3db3a63ed0f71d4e8183d936ad923aabc9108b9a9afed6b2a819fc22f0b604a4d9f1b4ba69065e37b9fffd02a6908117ca3f66ceabc78b6031bf42a75e77a325392327480b3b72ecce216f22e305a2300306bad9789966de8d2f6ac44312f2d8459026711e5cfe75aa31581ecab848fe5cacaf416b3c0f33a2b19d02075098c4e682dabb0a32add83377df7fc573198abe7b6c90ea772d675a8c03e712f93ef1023f6ab03885241f533a2dcc3bfcbddb0fb91a4d5f1468839c0ac3fdccd58b688210ffd80e1d0e52f1c4698d941cddf939afe00131d96a8d4f7106cc9eab28304f3dc1baf5c11177f55bbc4b379b21ed22a5e733c88fd8905d0af3dbee45bc514f0ed7de563bd59846484e8c8e4130beb4e2566b8cfe5d91ad1db3b22569f0d46ccb6acc975103bcced346db00d6b374d5b05632e5ed9f9a27f26dd9ace06cc08dbba10d22cc43ec7443cdbdf52151186f550f0e3b2546b2b3d04ad9e972d71d9a27a5285d733c2f20e20abcd5ebb3b1691aa88af66ffbe23901723846e6daf47a579da5b210978dbaf6265f09fc8047ab474a2b7e916631a1cb0c812a061c4c1793b20d8869fb0e2bc8482ef71c61e31d241c7b3b532ea7d3774039fd98462d58230ce6464811bb59a099b20813fe8ba7f94701967ffb4cb84c38ea2665ff9f254ed2bb5673819b2dc64172a4a8fe4a310df245f5db77293694191b0f35f0ab665e2d111fb2f2b68f8167f734a50a25a3a946d0c131484536950e551fd0c0580399447209cf0d15681a33c71ed0c926e5156b29634716a8a1993c1fbefd18afe54840657c9079bf9ed9ce6cccf1e454df9988d841e58a5b5de6ce015486a0b6f2b24873e0bfdebc1b06606ea4d202b77a7dc566c5d54b6554c4ea834931ff77132185229d22e615c5e91053103acc589c084b5a56de02ce6c7db92e06c7defa31db1efd1b8237d186ca07a577f0e93e2e83423c5bc7579f8f586289f10fe44532293c89c3a679f845f06deb41bd02711936d2953e59f1dfa49c0d1d73d3ba6200530750fb585593eaa469aed569bffa436921eb665c79969392e470f5d9075981a1a6d92c5e72a95c2e23759dbcc7e096645ac93b9896cc44820c0cddea74309f5b42acbf817a4285d6c4c8007ec32bf96ea3b425d4f18a9eb3b07994cea9f140c802521a8912664ce4742f66765ae453d124368cda32d78b6ff63d834d4da44e310f52a73ee41e999f5a33376d35128ed307d6d87000bcf3fc06e2112f084fb0de9034cd68987154509f5bdc2bfcbd91bd711d715f0340bca309f0a53b84fc4e17ae81f3ced668663f6a30bb7856ed44d78c91c06ee46bcfac27eda93a66b2102491c08339450ab5b4e4393d1cebab8f6880bc2b674b45145f876384f5597ade4c6079e4718d5f2af735fecade64fe5aba75261b10dfd7730452d99e31035ba0d944347e3e576fad4f8407cb8769ef8d139255f9334928d5e2afd85fb90c5d3e11647ab9684b432706f9dda6dfa18510bcffd32b9631402042c7e72f541d88a03de9d2fdb610e27e62be07c5aeb5c8cbfde5281b023d283e6cc28e76c9dee5afa4fac5b2f14f549cacf80d8ebc4cc0a71d6cda2f3e18e715a8c7559ce1f67b5190c0da40e1afa2672bd2786bd10f768a66bb73d11468858f3efec509640e526f4762990f4ed9d3c92972cec3b4a6f15e1efb7b684ad60b93759065251acd73f212098a870074efa9ec009afe2eb839098e53785ca909800897a5bd59cadce5c039dd3611be29ffeebda5618307ed5775feecf414f9aaecd8ea64560b3ee2b0c30405241352a00982e488adbc07ef5288b5ed76fa026058eab7f6b7a53c88dde1bbaadcf78280184ca9d30510f563322cfd7f87758bd4cb264583688d8d767304a5f3e7231771313454abf2e79bf400481ccaaeed5ead4d74de32f22df9537a130b09cc01d91d5e222c3afbaabf48c3c35bf573ca4194e6bcc82bdceb47c7fbf6351313f78f29a6fe7aa8a8bf2a07838702295e75fd319fe64c97ae31417cfc956b3a456f034012b0861d818fa4da487b598df8545a2b7fdab29ef166ad1788d8f5a6e9d0fb08a82198c00f82f5691b87a84ac8d01f2b8e8142672cf15443a4a71a7e878240297237f8b9d901e45b03933687565216d8d5c1441be73cfea65aea24eba7ed9a4c78dbee3167723a5809874c6d2b4005db5b83ffe1abae72e8b1895914d279d019c1f6c150423ebf0a344b3224ce03b5db29b0bce2feaf7ab2b26c02228f8eac37556eba3df1ce3b168cc830d3c704ee81452ec3456ba7dcac637b663c6794f44f3c2d2121fc89762719e48ea29faa7775b9e75c3377fe617dce9fcf8be1f371087e193e23ecd637e3e48893badd5c1a5e8dc1cfd4ac1dd1cdfbbe83368513eb0b241c586c481f48f2f49d884309849de4c7a6634f916af446f0c1cb66db5c2aff361db82398cb6ffd5109b564ac89c9b0717d61cdae4e928eb791ef436c37f58dba03a771654275ac04b662464dd3666a922e11758c32724d581437f4bf0a155dbab86b7e35eb22a6148ad71174ca3cba33a0bb70b27c5d2cd934eba25c3e53163d234c7193303d94896f5beca9d612465bbda7e5a8961bd244d85274cc3c75604c2c94720478901d6c4c38ff755fb2b9126c1dfdf7e674e9a0e8b593966b43e5eebb89ab122ce1eac408b4735fcde2b9609564e026d63016f64b5c264232874a2bb8754144b2f9a2998d1870f0886bee4e20c5b5bdcc16034deb8f5659fb073a0b0b9e5f2273a0eef3c2ac1daef81502e3f688a44532ef58adaf964b622d8c5b979d4d2b35d79d76db8fb7a32385a79a28fdf5d7456f83bc1f7fb82ce52fde55d654c9cd0447bae158dc832ad798eb61231e537345eb9ad8a9433f216a6bc5d1d1195c6e1829bdd8739156d95197a7fcde42eca3cd0efc5456e371547a4809778ed54c36f7e66f02339779d819eca416614f068d664070d72b4897ea9c2e71ee176ee24c2be79808a0d43450b7fdaa55b22fea5997e9c0093258f80e5985c7df74ce66d93c930091c231ce69b3348161dbc8e030e971b29472fcdee638b6d1f1abdb2004b0516e46a296914a96f8f0e3e4042f3ae3400f1df31d8f9ac12758cdc67f57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acca055d6e6a880d3b919ad062fc6b9e8b201fc85ef5429cfda727539f26cfc81c62860cdb810b3fa01079731f5a1a3bb88930916126876484f763a73aa11a9aabbfec1030e2a0ded269cc8c4c1a946a35e67907afd644f602697eb2a2c96f33cb30ac09f7060555430c28ae81c466a493b65d9d838ae7abf66bbcf850165a2e0b734a4ca661955d6286023c58de0d65427752b594cb0bf0e17cc2fadb0e47e3dcd64b7ab79bed31c155edc829cdf536d2b7fd025c0d0e8f541b153c9c17d4efc00823f6b30b598ceffa3fd48d1aba93c4d6b0e631c78bb1bed528302bd97dcc45576853114676c93ee19ce3eb5aca06897212e3be90f0229239707802b99ee3ed628d126ac3c1613eba7978dcf4bff9a118977d6adfd83c6e968266a93ed4d118a816b71809d60f7fd359f5ca7ee9079c28c335cf3a9079b49ad2ae87dfac1e679679a3c18f010e72dac2fd4c6ff19aeb210a8f5407d55504a4e592472281265acc3a7acfd9eef8a82f28f1db3e463e0e9fe20c71ee0378cf433fc43f9df07352a7edaebb610c58904f0075ef60736b8703fe1fd143a73f750455a709b8769fffb7e7b21cbad5a8bbb8edfbf18ce5ade4eb933bdabf4d23a656abdd1df88006a28add275c4dc7539b0b55e69a0a396f98b56602f69741cfd3c8b6b8e4d4b941fb8f227102a07e03bea4bcd8416edb3b130fdaf7dd92319e7db91add06d36edc5b334c11a859561387139743703137ab0439667cc806990a14c62cbbfc8b2d205225de9ba5beec1d94e689babee7fb09bcf08d147e8af4bd397e80d82e5280d870c54e718367ac7c588bf8a085f98201dd93d3513985b1024c209bb424cfe64f27901035d9da03da427258875dec691dc6b1cdb5b18d7a83cd7af1c26869ea0ef714c85b119cbe9203484df1af471ca808c8d0a45f189dbc4ddc179571a6e8925fd1db43b316095dfb5c3d520280194b245780bf9aadb7064dd271afc90d8e63d245cd9246dc80789b5cab3af03deb71a9dc527a0cb3431c3dec9473e714281deeff13c93556b08c73981c1ee0c71fb5f9c5da362dcfbe48ae88f4845441620b164c425b172b15f414bd04606cb2028294a26ca66669a52600361643891bb8c5d8ebedca64b03d69ef29f8c1fc8540522b009e3d5f17843ee3827e53fe1998d8b72c5a89968c7338637d6d95f8c765bf0d5ee35d603fd7fdc8ec91184ba18eae31ac2d3b252673fa3205d76f19eecf23bc1be09922691cdd10e2f312ca7a06d0c8d9ea31b9049c29ab81cabfb862092ac7d5fa731e19cf675bf418c622d99dcafd33f61f9aad7841604fbbfa6cd7803ea10bb57dabc86c371a9e86c4cd66b0073f58f547729774cbd0ee3fc19fa5e0c9e82b961b540b7f96dd40a1712297ea101fa75c6ba9493e337ddbaa87d95397770dc400cebf49863104990d6ddae3b8700ead8fded7392122d796a0cf926710a07253aa2a4618fc8030f63f1d5ee087919cda242364fdc9f47ebd970b6366e8e0c658e69070d05efee2e69b021704e40f4acbaddbdaed9522c3af11bdb4c97ca26a424aa3d8263a177af8c5beabc76a4388e0816ab1bf1f5856e985791f15688feebe4ac6d480fa64999b339575be66d8e7c7435281b8c4ef990b86a00ac128e3c41b6b9c0e573c60af4c69391d408639d7de6815b38122731a6389d4f0534a587af82175ee3f5c963c8acb1bfaf434e0e9946436df9eb46d4bb0038a7842295873c300f6ecaff76fb1e4fdb0a75fef588d87cc486e67f738bd4f8832fb24526e5f0a8e91920f8967bfd96599aada321b4437049cc883678fefb08c61016052049d3d2ed866f48f18a6e697296df999a39e10b1d6a66791cd4371848 +MD = 81fcd32c15af891dc77fa30ea6a14d23c952d3d87055a75f488c7897af1ceb1f + +Len = 54088 +Msg = 836761356116bb2ab5bd185c85603c0e557e77e290e8264c2ad37c46842b8345902a5d6c352ad000f5b7021dcde980a75cf0858248f17a06de11b9adf8cf960f2496a01102922459eec4f305df51659c8f209e44dda310366ff541709b26cfa988d3b18a90f9bf1be90a757c8541f4d53633498f16a8f2c526a89ef535d935fc04081841a705aa302eb40fea8561343a99540fccbca528994b5258a68e8fd0eedf5d5e9c0f5eec7e05e84ab7a8582db400a977619745b89c261af5ea6df1a96863fb0a058fad8defb6ceac4bb6cfe729b25a09b76f2dacb4fe29ff289ca6c753d60aa4e3f19a966a8890bf0e776d6b83f8904d360c080bcb1da7fecae157339581b1b59efbcc0ed6c5530b69b3dbc0a81a73cc46367cdec8c9bb783705acf318ac19c49e76ecfd1db34217c231c0ee82602a0d50b4312c934b8df7d7d04c11c29f6a594a29a16c269a826b82bac5fef711de98ba4fd1fd14eb46021209e0947da1cbfc0cde9461d9c43e8f121692f7f177b6f6eecf015a33f00e22507a0f8530fb64364b5b6de71e789c0cd80dcee157d8dbae52fc6b49d8a40cddf9e982ebc3f65e8e7069d303ddfdc4683e6621c4117d7448509db7d5eb4d69be751fe1ce1dd8e18de1d06ebffe9cdf2eabeb35a906aeaa4d4f7c8d0354344c4a2ce4d33728e914b90758e722699d15e38762af9720b3a544b75f93ddfba1de0b87ff002ccb73209d4ac9e63407488d1139943a9746d38cb5ef0f746ac8db4788ec3a11b8eebc2dbe13ea12febee4703f2b497cb0605787286154d6b2a42cae49c45baee0790d62a6c884148777bbe5f6c4491dea5787c02674f562be75da3bd7782b7eae55aee7dcd35f93d81b1315bd6c5bc64d11ab5c3690bcbf95252e18b96e722a2968e7e5e89a4338f79035281c8b491fe2770b86e11d6f953f9a706a7710f859599b00845387f8abeec069459b89d9cfb071ef64ae83d78ec5bee85c9ac584b447d740eba3004593c591f794c3cfd47fbfe89e1e252bbc502e77de13a9f4e0e3fa02f143636ff49982ed263e1bc301d618c261ddce7be68382af99ba2c07d28d7a0559b3183bcb642fbb3f6b2cce2a7dc2e980c932dc1cd0ca4d6277ab65235ad0c9c0644ccc939dd3e38a427c59151bc5434309d8b728df0d398172af769bf40335707d868a13eb774c4fec95ca8b592abaf1c64872d057535b3ed5bfa201001b30b0274fdd15f722e0d691ff8a54dff835d4270b77dde0a49be0c564511f2921a4c78a2e2d5f68dc86665740023854379b3255a82c162409e1b16c25ebbb141c78fecdabe2bbe7ad264969e299ff60f0d65477a7fb45c88915f7f28ad89e6c14949d194e64ef1c9ea9c5ed6db670ac2acd82b6914b30772d1ffb7f1b8090d712e0ec95a01bc3aeb6f5230c67c355e0ed68043aed83a0d7fce70539614c58fd1c44326a28700146fef3abed5a2774a4418f212a430d5d90fe555d4be3a2c0883da8b9bf6ec96f8b7c8ba4b9cd4a959e2f2a22ae1c502f4b3b524adb29eb8e1d7af4c7bdfb8fd7263aa6589749948279be214ff0feb4deb0bcc41512bc908b66dd10a58b562bffbe402a0db0556d02dbf75cf01574a131668895071723f77f0b6de49b530703affc94010c2b793ddc6de0c44d48037ff216a7ab6613e68a32b43258f03a9781b18840119d313d6cd9d6843faeaf35b6e76722f07a2d8eb06b083555ee6a8d0ccc094c4407ea2a62c1bee8b65a7291aed902004a8d8ea2d0f4af7dc1db0b710bc727be80947dc7875ccf16129aba9fd08f8e49a3e55daa54935212860044cce86b8ba0af8a139c4471af1539b6afe882d3b405e2cbc32fa31199fd8aa53e250a80ddf9b832d332ffca06ed15f678f32d6b1c3def87e8b825352b45b7122104d9cec4d283d4e610212d7da78da13e483a206df9b261f3cd42c9b1f2f38e14f1bd1ce932f8b873bf1363bb49880128700fba4f3f13a10cf66293d20d28623f751e33f421ff25a3c53c3469def05c5ff216016c19fa8e5dbced5d379d3dd7cb1764dc8ca880659eac03672f6bacfb0a56b6bd698e4f710ba64bed87aa1a33e060f7dd59cd63be8bfbd2c6b4faa426522556b5f1a6fa92413de40b6b3da7bea5d740fe059a9079923b1017a192c0255fe660b2aa6ae339250721818b5cccc24304a5093517efddddf324239d3ce83f58213b7c3ce1f2aedf8e68168e127185e26f8fc4934b693491ab78b251ff04bd655f4fdb50141038985a22911d647e50a8a167f9c73ee4c4d9ec738c65e3fce7b02604978e09232178f1b8bbdf5cdb6bc021936e79f849d7db3c7d7880f0b8055e01c2779dca14afa6dd905c7d01701e50777dec508281b3bf26fe3f4a2f205f9a75f144265fcc2b4ba6143c9e5b25b1812c8b3af4e373a0ae2f5ea96da71d3d8a0cf9c6d0ce32dd8ed2ab22eb73e36b7ac727220e2306e8d0e1067e8e6095e6564d42c544212d0c98ebbcd70b50909664d0b86a464b24d24cc35c86586372a327c034092960a7019079b124a7fa167866cfa6db4361b4a54a5dc98970b79abc25ee3859289187059f02f1cf677a5b59a94d583dae709daaf438b64e8164f779775eb47fe9beb55eed10e4a0f2d7498354d238582e7dc92970db899e31736f214698124113ee1854a12af261f119c73d90e4adf36c921f69e6ceac4128ebecfeb925b8684e2a9a31e4d983d80b49bcce850d1fd80fb687b47f9a85ff0fd45556f98c10bc4479223bdda3ffcee96e127f5ad4f6cdc0f2e95062c67ea08e3792722d5580049ae399bcb513ce0c3390b09838c19b9b274d2d86b9dafdeb4c1b8a9a7e09720afb70e5fa93ae585790b77e61465d740aebcf3c9ea95f6ca9f2882716142f4d940d29ef3ea0fe067aa8ec6421ad2feae1b580fce05cdc32a22786502d164f796b78159fcf038a3e3b24364a2294c066ea2c695694fad9b79e941eed28acf25e57e53cdef7e5da6964ac9e18aa24964eebf9913201aade6365e157e74f009f641ffca792fc6e77f0bbe72bb602843b0badc300797095749ebeb53a24ea37def38d645da427c5e839097ee50c72de3706f833bf1129e322d073b8cd8d417c377367c666fdc013b5ae1518d403415710a693f1d5e474bb71614a931a0a9cf5334c76c9cb830f7f67b6a95e0181b919505248a44ad99945e8b90cee298442ca59e6821693205b3285b88bf8736f204c7e74ddf427d7dfab0f40817000e17c2431a95354c6bbee54971e848d32b6bf1723731b8b73c890126e5f70c2a90b922b44feb02c6d3c0e0c254f5cc5473cdea3c6b7ca0e3693f2a48e7ca28c2ce8cc06194b62468f8a0482b8b3db4ab9ebc518efa8b22878204e89f601e0758f6271de39f93249348f18dfd7b2c9c190aabb9d27ae9a7f4257ebe92e54f025dc60cbda2a71e5de6432914b0bb4edd5d560095af4314cbb9b2013ebbfdf9a451bc92023761a46ac285bb9eddb21102c8ff7f878e1998e858c630cb73008a87d5287b9e0a45b1c5c87f2d6eecf61fa6ec656ce1f734e29851c081f760939e0748b81de3a3d9e2e958ae031756fdc73448265d37634b8e56253f79450d3d90cd3cd9fd759c84a4500380b12ab44fb4356cc0c51a6ab3f89c43918b36c1450f24121c9eb64cdc72944995cc0b8d524314bab338ed6604cdf55d753c3f357055b678de76383d57ca20ab5bb85c3aac007cb28c2d32fdc45adba34910e0c21620eec1ce187e067d378fa9511a7f44c388b804aa168d9a694bc9e58b8dae0fcced57ad39f9fa00b3372bb40446f7442f2860f19b995fb469fd4a74cb270976fb176b6bc0af3ee49045af6be3e256b1458bf239df0a2be45d0bc7d176518580374ba4ade08cbf0aaaff65218e511014bd10062df2fd6492a8e3ec9c1bb1a4b3e7d69de41826eceb59a0f7855237b5c6ec40f74e65f7bc57d402033539bbd99ab354b19ee6125b1f32e6c0f7ddfaaa7059bb502ba66d759c7502b62d4ec4a6acf0427a4ec8b38c1ead3d7c09901e70899bdbab4642e322e8e2527ff4c9809e53453c72643eaef2524f21633af707aa7b192e631eb9dd66b5d27dcb1c48642336188f148fc65910629f1f20fca16abadd5820122579d0a39b9be1221429e3d7bde0d6eb21ee3688b7f3a33fdefdac2428df5d22eb11515c02c5290f7d1c841e63448060bb14ebaddb033a1a428a4068d625322fe00ec40273d4b1fda76ec989ceaa380fcbe8dd023444603ad7c5cc0b7db04b9394c0cd397751187723bf288c48884a62c4b88f286c1da23bff4eb38e781705f889d5c16375a0c906827c25a8796553e446327682eb156c7839637b646da00dc93fcc4503076a501644245560c9d7d11eb0b5279429b24b8a06c2982fc701af701702ccba95142a40d9561c37c2564e7ca4df16eea08abbebf7ea9e330cb28797b027ccdcb714d3f0c27ffebfeb472888830ec8f507f53a088d2a0230b71902ba8b99c9fbd602c9b08010814bbd40fbbcebc2b2499888428a272f488b4ecbcd2319d7589a8a64980aa296287da0ca34944fa9675f0aba61cb6668f5b53c41239bdb6edd2b4c90ab69aa9f78c84e496fb91f116ca7b7121456bb457e3127ffc27f50dedc40853d9047f89ad6ae1e550975eaa916a62615e6b6a66366a17a7e06380a95ea5cdcc1d3302cf6e6b18963ae5522bf09ece04c3565b8413368ac328b6089226be2aba3d0bca8521d55280baaf167e1caee7e0b9cde414d590945c3be832d12f5748a7a35480b2aef1b62939bb51abfce2d47fa99ab02066c05df981c1a86d5fb84f1ab6d6cb5ffc076d1b20d2acb87781be69f98365afad0e0c226209126ea028669cde595493f55f9eded5bccfaf77d5cc241351acca92c2c960468717ddd9f1b5b483a4c256804072f8c2416197e324273a5dcc2c78fd23be39950460c1f25965ea0d80beb085f411f34d290b79a2b7f63341bb8ec1d67a1037b7489522d2a99ec6e5b5f0aaedc1a257e03b745c9ed6629525e779ad050feae2151b5d08632887d1710bff4b9ef04daae2404448bec993ea73199645732a72c11545607c8c2049921a4a949c81c83c76bb012546ead7b0b992178d900613d05c208d478535d70b91483956a37e939442d243bd5c0a49e18beaa90596a7112d3b9fbcba2c4696f65764a1ee6a7e97809791d1b495076750e7e399a6603f6eb1e7f89a6078a8a5326bd44a03f9671e26fc5f72b3f6c7792255e5ae19f5b47083e795efe271414ce65502fc3e56236eaef9a4ed628933c7825d58af065ef060ccc3dc83e71ffad33b9e547f478b98cf4116c90b685533999688a46514a1d986b304371e188bbc8158cd349ac5a0b08b07dc34946e62b036865d3198ecc8592961310d871dbc6da0656a0917609b51e927d24e501bb990e77b65680f36da5792fdd2c5879dbaf6768cfe3bbcc1866530c9817f061861bdf49d26af9499e0ba0ab06fc9e6418e404cf31032529068d3a9176f30800c621da5132a6fedbde16cd7a291806cb03f3269c22855a0744a839c3626c784a0c59a4106f911e34be55441fabf52e092d5b31722ce0e7016335d50512eaedb7c911b129d19fb3eebf55a92e182a70c9159ad9c3b8bc5881e2b490f8e0d4b4d47ce875e011497c6441766107e61e7b653d2074134e6e0b1333b2f1f154d08a1a984c86e59724c43ff556005fae47aa78048a94e3568c8b3fd69f7c90f754ca14cbcc58aceb9817cc3b730b77c93c9a7c1c37b0b6897e55626bf8955a40e7e13d57e66fa8873a03a3944bf6f2df73a7ebe4c64bff3fe9f625345cd0bfb9f08c0efd09305ae2710450904f374349736f31eea4fb4fe225f9e2e02ac333db0517040bc34f4685e3965daffb510bafb26cf89a62130b28d8bd35ffe0c1491cac1ea7049310fe09f8362543eee89e7ac70daa987c37c36c68dc98e41d7f72074c0f8287f729e3b72560320c88428e2317edc23951de0b355cb4862d4f3241236b6601067e0e9a45f1a11e6a56135d412b69da2d817a351c3af1883be4ae38e980bebcf08613841ef37554dde6bf8e4d882e4cc599a0f37969f009a07c27cbc2327610e6bded23aa91594fe7a8cb83b0a497b491f8c6a8e5905ca4fb84536c55e738a74964000b8161c99a181abbf00307228c232d7fd7d91483c49d7ba5bd1d1552eaa936d0ae3bcb52bddfcaf535cd367b4df9b61102dc8d01f316f083107053614576a4f38e22546115af282bd777a8fe7476114ebc685053aae85190190817f052421cdd1ded93914c16b0b4578ad5288a38cd6d56f514f576923d41294cd96c9b8c2ce1ffe5ef4fcba6f323288f418619a25911850b3163c095021ae3a72e528bd543c686b3ee191ec07dfceced84938d5322cfa9233c2b23715e81baaf7d2ead8e0fef54c01669a003afa5f73e04dd6fbbe8fc45d59bb819b7911a20de4c7d6b36dfc0eca2dede19d116b2e9e958d03b5cea2bdd8ae6971dc84858b8bc22bb5f6031efb0d4cdd2c6c921a83787d6f86ab6c4d2f2cb9354aa33e2a1e4b18664f49aa4c033ce59e4415c7f0a629225c29849f7860800285d397b0e9a3766ee06c526b6e6f7f8198f13fb8d3ded80cbdb2e9700b99fd12c2d561e1ab61334d00d4bc4d6c8700a733fa926cac74adc1f8ea81e5ee22cb705519a8d956a1ab3b304e2d592e93e4dfd729b8eb64b0d1cb7799f509094311a4a46415a1d3ab05c2d8a44d969cdb56b2ec44563de1da6cb2a087ece14444f837198150400bc76a6a5e9cc60c9fa77ca6da14176b0d3aa5fcdd7b0f77886ca7b01b3600bee53d02ba2bff3dc31d3e7e450961a07bcf18a533953f06d2bb054697114dcd244854f43aa7945dc4ffe98517e1f39c780ebb94de2f9978fac755ff75658c61791e5569723a25cb162ef0b9a3cb91b167b46c998615520df892a5f8d17ebc61c54e8888eb4d7832c1919b41712d058752a873dcb2ae326ed3063c5933c4a57810c0357a2c465738ce0f3145097015c740d21886ea620043930a644b239f0e4c635ca466bd8f88854492fceff4fd8a193a1aa3bfb7998633418563f62a77c085c50a1d75278ed3c22b014265b93b2b2447685bae9fbb8ae7e3618281cfb484cc3fb2e7cff1ad02978b434ccfe091c2916fa4897c2c30d507848509149bbe20c9d83c4b9ba353dbab6d426256f1691507bab67550e6612f3a29d940d915fe5c2398909102c6e728a7d8e5cc22752aee2f3186675354b45f28dc456ef5c5da02828796012be1d3af32d514d15af43b13b1dbfda7adfe922f7aa4b1dd9333bbd890ae37e23e7c7e39f56bb7ba26f4064c34c1017c856c6465d88a05d3d9e80aa8f214597e651f508d98a2b7cfaffff26360e97b30032790cae9942999ef6b2d3853c1e51bc653b175c282fa581d9c671edf5d540951b6802656cc0577fe448e5059bec402899f09b71b14699d9854cd475625725094a19a41c63a82b42efc93baac12dc7bd78cc01c4c5fece647ad8da47047bf4cf77148e2e2e5869aa61aa63df5c517cdd8a13e6cfd6b6c7a52310dfed3cd22479fadf1d352d5fa6f8f262ea0dce05c42b366ec6fd541cfa2e268b61c27be8287b7ddfcdabd12c77c10a893ac086a9220916330ec7de8ffa61fd9f0c81523c9556589d3c0cca5d30952293c29226ba3b0992173ad9d68e2ce300c24c84403def9d13add4c2695085e7d3193dfd1ec763af4271e78dcca62613d89b8e55e66a9bb2577824873ea4dc2b846ff95bef3f306c9fd9716e21566a970d916e7085512e386c92a7a5dac897f2bf2e815918b025b412c484f5851d5ecef83a496ecd601b81eb73dac8ae4a6dbffbcb625f1b98b83843b97eae6879973e20fccbab2f45e8315c923a4a29a8b1f5c2cd28e868776c4b9b2eeb133be99867205f51a02b4118c9387452b4ed4209269cba217f9fcab67081ab46ae8febd6dc6ee867f8220021bbf7a0908369c4d7e4f208f8af22013b39af951deac4fed6f0852e9b1dd3f1a78c129d80501f9fa2935b402ae18fc94f297da2dd528ba11d55db78578b9193febc21c1be857f40fdc440d614a1497176a2742b017044611e8efa7c29cbfb75abbeadc387ae29374dfa4b515278dfa856570bb426be7fcd5ede6a908e49620543160f0998347e0127a7c34870d2c2bc4299dcc4b9a79e2462f6a46bf19e65c13954de0a4cb31e3cff5f4101ec39934befed4fe336d63034af5a1044f035974812fd835c31946a3949736d341137b1c592e3dd762a94d64ca86b66e216a956f85462a765d362e284aaa67045ac37bec7f0002e14019de0faf2bcf099b16425506236a2bd9eb927ad774b22cd09c40ab17bb48a43684bf0bdf2c155f26cf092fee0fc1dda1fe1aa2253e3dd20b66736109a83aa7aab1986044d1aff72b5c9204245057131c376da71a4f307e73e9bb173d0ffd7205691017c562c559108684dc902e5355b2603491a0f1b4b970ecc1d49a38bc8db074cf364926810e3f1587bf1af3dd2bcb3f16689e6af1096a392ca00a6a9d81119a7ec8ba66099d1ed145b6aae51f1ecf9ebc35fb030ef9c996a58375eec8d492a3c5d2ff6a858e178163c8284e3eb52643cd00a104330ef5ccd486c10d66119a564b5e007a1e6a90ef8cfe7c74657939f6f2cf77b58ad256a360b0d70c9fbd907cb973a5defbb7f3e1665e8ea0baf06e81d3ac655d38cc54e2f20a9f369a62deddb61ad6dd4600a72099f3461965a42eab179e534668845853319a01d28087eb41eb5a7bc024ca1474cec28d298f1de23b67ae29b64083c8bcc66ae62778b51f70ff3b7cd0bf9fa2a4add5491660e1f0fa6ae2cff6e8500ee65882347eab73e2319bc5c1523f06b97add336429ff7ac2b0c9442e4e8973909990e8d51f41499c4e67013291cc88c1bc07e4c4aa9570be242bdc2c054b75b89c16a6af5261bfb58d0af6b8d48cac2233d2f153e149494e2039b0b26555ddedb991c4ac5f335e95b72dac3962aafa44a7e761f715448fd96a9bcba9b4d03396b6a948b38de0ada594772c9e844cfa90e0ed3c9a90adc9c7cbf832f73be3001d5c073cab2690354beb917dd0829b356ca58d8a2398ad807f0bf8ef8642b7cae97353a77e706a7cf08522a7b6a4be3241bf6f547a766c3b6bf244083c11731c62c3349213b4970cfd2bd3b33732dd7978f73aa287721182f248848803ef407bf013530452393f6dd8a34ca83d7322937713967a32d3c5dd7cd45f74c2264671fb2d580523498825ebb5348eafb0b307a8db2de663e3afd5715f7ed661fcac85ebd7ea9d6e2a9dbe9d2b346e7431b85d7219a4ed02e8f8f13ab189b5c7ba9b4028dab1d51b25a4c055ccf34f763e5a1e3c93a697f72bc7ba3d92271adea73a281afe57b41282c6b17d5f1a399c1fc0d17012d9ed2af445b7e3ca000c8d0db2c72a0a81433c892a1b7cad5034ce1b14fe755ee5f6838b99709420bd93bc322aa5bec8d9897f82f985ba7e3e49f47b7b2db33f73bbeb37ed6db95e06b7535fcb4840fe078ec4b45a789f998b7ff7881fe7927d2b4248416637b84a82813bdcbd3a1675b35af468 +MD = 473b9c354d7cb26fd130394a3aba25d3e48ab1d6e039ec065b16b5c7575bbb9a + +Len = 54880 +Msg = 68987aeff4aa641513d68cdb4bd4db54ed0932aeffabfe737a260d08b6bea07a2276c1793831d6a5b0187709f43b7de5d57b5bb17ca7b25ea3e51fdf055458e812ef77f6e8b5958f7f079bcb2351551328ecc829d943c668b135bf4ecebbda37a2cb446bec7cc85be66aa128c05c8c654e24211efec762190cde955bf93c4fee39d1d2e22cce98924f0a3029b4a54964afeb0d99d37bb0f81ca848116e1fdf963ecac6628ff52dbb21b0f1d4e574b596b30934a03fa6d58d4a5b817515acb1b61b7fcbf4ff38ae5ec4228b333c11f885c3453f3e2d92fc60fcbee791d62beed637b5879f64de4404a029a74ea1c339b94568d67882854bfa9b9a236c9ae3bd7ffa37a26ba43016341d8ced2bfdd3a0b9a33aa05827c8eae290b7dc0e471d4737ccccc560a8764d76a31504d43689560d438346e504a302a042ddbb80c721b389153b988758f810529a8a9551362d833d8f0b6f27015dbbbd18d467c900372afa3d4dc2e79cfd88516ab447a8e3074ed1ed9ac42707403cc07c6389f1dca7d414accaec885dcfdcfa7b5bc3e3275fe052c7f7edecfc92ae31d554c90142b8d85ecb7abd7381b435d53547b10ae97c614884eb917eca9c38998a6dce0019b35f600024deaff2f5bb6b013fb72311a7f8398c3e58e657a6037e057741f64be090a3b492f64496d99543450c80388628cdaf47b8ec2b8df8376bad39c9ebbf8794ae508aae3b57aaece66a76b250324709311d20f25552d9fbe5ea7d0fe85df092093ad5ae9b1caee7dad945f674fc4cd4487640156d909377762409bbf40d63b33ddc3b9d6ccc2fafa9f941f3abcc7e557abadefb7a2e6cd4a5c3a67418b7271fd19d8323b751736bda313252fd8a26b55251c34c8414ad3afa2f1ce25b4385fd4de477e98392c344f6ebdfba721e8c1b55a3b7b1942a9dd0fed133aec599c5753a1bdd97d8776662848e11d41371f8b00d1882d1b05886bf380fb3805ea22fb11fa97ed5bee8a6ec0c829048e769b29c0119eb56e386ae2e315263ff2f440ad684f622493ecdc90b172e24bdf6ef0106b90cbbe5329c5e466f030cd43f68a00ff16a909e5f0e18e62cfc95db49ec2f16be5bba29a782de2f7c8876a796f73782ef6d927a2a94dba6d353aa4be74682f6976cb0c749207610e04b691f3dd718570567ee86a5455a72949b2cb5d8e743cbcca9656a205e6e1121b2ade43bf28bb7bcc06d69da0adc73f83de4c025b5b9c0e679a1b835250d5cc927099f982ed7ca9be0d7cbd1ccabd0869f9715d59a2efa6c432b598f5b9d16601147f85d7546b72a2ff45691710db2c72a105cf07de8a4e671ccf636ea646a6cd82d9691ae1ea7f1168cb022e24b414146163c7f4530e4dc6a4c3733b8ab7e77e384223cc1a8c179fb66818c08aca47e5c705d89dc4ee2d79673c38dafb97a089c134366952c2e49474b72d7ca7a0406d2e76816298ac85f5d08434cb6d887a86aa4a21814f215e963032a0c0ffb885f1243052f142cbbfa27d55e79b44ecdddb5fde65a25419fe2b5565233c1795913824cdbda857be5325ca0bd1b93647332e6e7b832b063f3bba70c9252c73a9eaa8cc9932164c06e8e6432073a3a62a12c632ac0aa9e9e3bfca0ec9173098780aa9784d40c99447e96a753e5de91908155958ea5c9d53b9c2e08bff89d6fa7279d0a4347a20d4c3bd38ecaff1080353834e4db10973e8140d8464d6ed9e1e4ba0a4fcf94eba623d0cc7f61fcd7ef9bf151b9d8a81dc1ba4f82c45e9c2e4784627acdf062ef4d106309e3de853cc608d2357a4e1662472cf0b4e9ba2aa489d04674ec6d59b7eb5a1d13230a4146edc503679106016eb6214cf71d28bf438f108f801410224a664a2571a5add9fd4c1aad6f64c5124af8df8bd2c8720314418c6426ad9f65b0a828a4abd38ff469cc4ef8d65d56f1fdf3aed4ce525ea01e888beeef1fe3c9f2973cc14a14773b9353ab0b23e280458f91d84f7124b53b694a575462d3a4f7171dcda5d5cf2f5582ca770fde5d0ab609b8a42646a43e7ffe7136bf082faa9727212477d46e7dec3e1afb2b9035bdee7252597ed23bc311e4e37157679cbc502b8a8a60d0582aa5d0297f88c0d26192d24640829f510a9c238a4f430983a4ca2942458850f5fe2a3fe14b4df69cbe4d327ca157344fddc6c44c1aac764a28ae2c309d16dcadc0239329a6a3bafb9bc499dcc428199b0237ce1318b9345b11a4393cdc32fce83a37d5e8dab29557c1a20f4ef01bd79f419849c69393cd1c26535a4e4806390e320f0c082da10e18f98d9cba6e58f5c264913e4dd161c9f73164964e2bb71a8771534070e899aea6092d49088708fb6b31c9b4901b4cae53f87ef624cb7028bbbfaa790852c1fb69b92c1d208053710472e9b376b87c0697454a80b97157e913e3bcc0b8b5427fcad32f21eaa460e0f4ed9843e9f218582dde703ef36494e7f5a7321c685743c22f1de15b4f3a58d0a36b7f6dd10f492d7c8b9738bbee50aacad1b4960082ed4b0161e7d5358962c779b346381458360cec166775fa55b3b8fb2ae935687c68a2a965ec9786daa74fde8f94ad9b15087de5458afd96e2e49bee7a7a01898ddb4f8df296a728754fef3ac511d24e8ee608cfe2a5d879dd0cdb0d890e0249ff6eda17cf8d0f05a28130f51e66b1150af93612b3630f898e52febf1e4e4191184bccaec67ad703a9659877623b52d9d3688e168169a8b03cdf8e6b03e2c54a2297adb99d05050cd124b1285937bb802f5c99441362aed431da137bfe71965a637d03a21dd5a30764e60371ca03f6f467fddd0233f426dfb36c1356d8a3bdab242358d00e93b8dba8d214b87f470b1bc272e4b9a7c71ab80bbd186459224123acb133ab38e64d72e6116f663eaa00df8ae436d23884914781f4a90d48932aac45501d9b627769b365ca99e4d0d4df27057a59b3aed394745c3a4fb96ea1812d35289d0856ee14866f261b99fd6eb0da7d5dd7c6d15b2a27e6b690d094f24d8dc5603b5adaf256d34a4d7eec8c2079e238b4387269c55b486591f7ba802e96b63d207ff9b72b38823f664a47479144267fa8021e3db82fbf22f209dffbfe648fe592f24eb542c17c969a0511f46a188e9961bf3416ddaf74650250a8cc0ac00004db1bbf9bdffaa7971039b15c52fe02d006f61bbcdce25076e8537bbdf9b1f1e42682b533a9e9ec8af16d9147f2fc6a6ac0303bf75cd1399ccd9ac19473404acb99b09943499834b6642a187df21daeb0b6f4fc8f05821820d9aee31a2274f3025c2cd194660f656492f7aec5f966b7ea11cac64b81ffd64a33164717ab55d5d1987ec7eea95568dca25cbbe8afe16b60f83a01f475505962045a5753b9ebd67f752fe118ba712666bde1a7afbd95b35994cd15528c7b8bb073037a95f23fdf561ac689dc406e864a0b0fdbdfcb8a781f0c0a6a2d6c8a537ca99817a6fe58d99cb0cb2600e4516fcfb36dbd4380c9a0f8897a684dbd84980dcea1984f863eaa9a5ec71f4d4d24cb3ede84b6a28559142d33a3787a287244ac09a6645632fa3c984d41de8b23ef81dfb3da2fc38142bd05310f007b545b3ea18230e383a99375dea4c1ca8210b879fa5bf98e6f1d8d82caac466a19eb476e3462c67da094113fb38ccf4bf9ba899bd7fd693c6e01414ac2cbce1c1c923fbcadd1f19a739a7d81612df4c9bac969cfbec2b0a288d466ff37b731804cf3491053f638a2c664de232eaeb7ac8be661fdf6d25827853f05886f97f7fc70b670526ffa23fd5f993c0c6338a15d35b9770dc854e9322ce924cdb394a6fa5283b96a49043a1306e29f2647f2394280e9b5e77c70e92d467bceb64ad6c8e1b8002e40293d064d85e71058240507c4331f23735a50e27f9b9c082b7e84e4196bd8d6bd57cd0e11a34f968a4098934b1802c89aa9195b90f3f5dc1495c7830a33b1b9c71adbdac827c33aa4e5d46640f53bac42b3f6ddc8162d5159d8c62c1cd734e047bc8ff3dbdaea038f59e107099371d754be0def8fcced6fe28faa67b7210852268312e0b0846df931e4e6fe10ba4d52b91386194ddcdd3f97029abc43d7d5174ab88c29b1edf32473d00bd4bc31762457fa8ae36a0fa4c86178bfb428c245389da2245745dc258d3d637a1074c2955518ba41d64e2deb13263b40d6ceaafebc068b03f1d31aab3b78e7583aa23352eee39dd27961fe5926d09146ab9d57a8ab6cb9517fc5702c360aa2d0daad4d54f59fe965540c49970b45c3f9bafe90ec0eb975358a82a35087dddd0779fdd8447536e724f0b5d84cca6f18808b571e72ecd407d799727ec035d8df289efa9cc9738fdf35d4c671216934da04a611cae14da5b76034fdc82448e2f259d20c618cf99219c088a5ddbef27e4fac94955ae13914cdf8e38b4823c9e55cc29c9bee350e27dcee95bce4ca6c34c1a1dc4a961cb90990c62f84c766bfc8668d840f0c6bbb3672e682714deee03e760a06974837d46c49f39f500d95327358df12d083d607a721d1d72ee2d15584b7109ae636dd932541a6bc57e2572acd7ae3cf461b1ffa6232d71d5a691cd3edcbdb219e29b4fc1cbd080c020e54b0c013be42d99bee9c50ed1fdb5cab766363fc922326e9641a3a084119b75835cb346d9bf4f2cdeaf65799d2999e70880bce905e26e83e96f26569786bdf8aa2840fcea06bf777bc0f607f17e0877ff9d514d066b44bf0f28e8627d688e36a42e23a7ff53152620cef54e817367fa272c91e04d354b7c61ff5868b82fa29c1beed9dc8c3ce6956819f191afa26ee9f9beed474cc8f948ac62f4bdda4491b56bdad20f032c8a61bc326995ee7353c3f1b4c1e677aeb4b028e45bf6566fb20f3e82bac4169a970787b8cbafb06edd24a9bebe52704f242f7203ec96aee9a9f5ee76e270191f82e3651da663b80d51688c2d40ffa932ce2302322503664ae0260617e7b79d13e4a1dec1784647d7571c1390e86294f20937740f93e0ff1bdb0c1ff648ef152022bf5f54bfcbf24564cbca7a130fb5f56be921fcc7a3ebd51114968274ab13bcc3986137eb6949eff0d42b596f7baec56c94a67a2ec0aeff18dc044cf9500b525dc98efb9992b13f81e1b0bf4c2ac1da91e67c0847cbdaf268ced3d655928e8937cf230038fcbaacae50f50c3781b1bd623b1d479129e27767699f9ef7d6ffba0815d7f6580bd8bfccce62c0b034d0d6542f0488996f47c6cb38c2078e91e17d453a184e6524adf16396749d54a8b1cdee2ebc7bcf008d98dab8e5b05857c63b65a86e68eeeb8cea1965b4c28351c70ca6a6bf71b08226463c76752a039d308ceffd44e653c4f7f244a8ae00dac4a30b1443880adc68945756ddeac50ed692da4a852637424591b27bdbcab8b975b8519d71a0b7b1387a54b06bd111e8988fbc1bfc9cec28f1cc93257b955aade98968c8bd9408bd562ac6efbca2b10f5769aacaa01365763e1b2ce804887726a498c91c83cc6e7f6638165b2ce9f31197b31edd3c2443c8af0fd82a033e9ec21b68eb1f60c46975cd24db895901886dde1e80da0d4a078ea91d3d71f40221fec26c5727d1167a1f1f737f00bda3c192aeee8937bfef1136d0c5c546538db14b4e3585fc613d20f9b1968947b72b3f1e6ec5907cb09df16faa8bf81dae2bbd15f3370fd37da2ee94482072c4f212616fb2163f2f7be148878af25e6e7086b60d65f35d6392d2435d3783d40eeaf3d914fd62cda69e23571d167b50cf27092c902aece7135d65cfd30443259c0e49f69cc52df4a8840eddaec19987a65e3d912ca6a6456919b7d48432e0dfe2d88f5a659dfa2c7bc9fe1cab10cf5b8a629e84515d91e0eb745301ff47df7b89d62e651ddc39ddb6dc6bc49088af54f1f0a6669cd4525200d9c1c892b7b170e783b1b704247fa0d037e245fd9d9c0c6364efb87d9f4a014fd67ea8ed06e968826db3b0e6fb3dee5e68fc1150c427da555bc50a6212fb873ed704136cb9f9bae0f0aef304c4f73ec7fc13d72890d5575e31e0dce8d3d95c3477dca8a04564f099c90dfe0c162e1a934dc3d7e38826fbc483ada0705685e8f72572c9163dbd9203334b225b63650a56ea76c4202e9f405ebd85d5a71f63c5cd6c61053d175627b3ebf11081311e76696eb6fc5cd890bd536c241ceb93056b4db911ed9346d12a323faa38fc03cce761270f11083abddb690bf2c6cc55ed51ee982fd2a760b101f4caa11c4a5ff2e5d4cfe98290a97912f6196c73b7dc8e023685f564e7d9785771f9a02afaba12fa1aa5d0c1a4c9550c91210b943cab5a049c0f1d04e3359983406911f57b86cf8cc9654f6eb2fed420a09f5aa8c926f3c1b590014317e9972dd685610c4b5a6b26677adfea29de68e7caf0d441fbf3cdd1e9c54c9ff489e3afaacb27cfe8b9884f5b52ecb497dc95da76c1f2c033765abdcefb498c178b119143c6d0b0e208a9703b8a006e7b6ded612a9f50d40e431cddcbbe9297ef61a37b27f4f66fb5ec41217e7ca5685326d2245cc558ddfacea6ca669bc233eaa21bb5cdd2035cd2c8d1ebaac76642ad8be68c83f0854e779d6afc35ff22f097c0ece9abea71f8c712fe3726e6ad8de9019d12468d60b60323fbfba0756f4e8542897f58aadcd4117f088ca966f59a942c585e0b1865a52bf6bc313c8af1be21ab83ff4a9fae7f4051936478a4d8f94d60bab8481e2e8c608a3e45709c44b00b606ed20845614ab23f11473b3cc23a635336b983fb05ec3f42e4a0d345e2d49105acaff8189fc7059c24bd579b4bde84585eea555b963526d561cbdb04568c510fcfe1b095a484a8fd202f545cc0460ef485c332ac5a07a5b6183efe541a57c9f33b0fc8592a042ad6b625c7ddda1181cc6ddc8269cbd43a498a62c3b1a8c77a34908285bf9ab5e9bd393918baf3b18b24597eeb10561b53143aefb1a97c4bd05842f29f55712a84152bc1cd50a7b669b0eb52c33c934d9eaaac2e5ea82f656ae2d4d87b9747c2888320586c5b6090cbd695d0a14b0e0b6b7140b7113a1c94b858b89c8111892e556b99756c17a8c12029db811bc820a5481cbb027fdbde6a371e80c76640afce795319a143320ad7e50f4edc894075cbc2e15da8f109df4665c8afe18191361362be03549826e135a91b424b802077ef5a83bb132b50b9c9c2dba86379afb6adb020f917c162d66aeac2687676f491807d5845c9752cd864eccc0cc5a4e8abedd0005d6355724508089923b5f4496d1fb9f3a044651ac598420e4f9099d8706440f0c2bfcad1d77da10406b28e7b651d8eda3d0c81870be44136e35cdefbce918166ab85a80de83c329773d48c27141a6a609e9a411e15c988ca5a72cacef1062fc68a6d638311d44bc81d9493b8f496eb4b27662a2c6dc8774d378b03ce9222aab4e1df93ddced63b1a468b3bcd71037fee7a08b35e9e519b13ecfe10872c8760a644449f7a79a2af029120cac123f096cef8fa6311020572c2ed5467652aa5001f14450cf5ccda16158fede73087dece6146a3bfe043448cdedb267ef506fbf783f45962bc12dcfed7855b0798173e9549c5ad2048dcaf57dc28dccdc35bfcc57946ea274a063bc7ad33e0b2545c9079ed086f4aa728a6422f48efea3c9447d8639e7fc13bf1670f1afe276e11b264fadf817285a7d1b9fa5ccdf84aed4a3dcee76d92c6ee6eff43b55697915cd32c7675c34f77c7426aeef92a5e6631e87f175926cbaefdf954f3e0dfa9c27219679b54306e876205297e78e0bad2c6e96c304d7c72ffd71b289e41ebd6880e0fa6d80f7b483b149486474073660708e785a848b1313ff63ebab14d2db6488d205aaaebe675095b7b01d804751879644d6bedbf777ec5f7eeabbb66f7c19a7be603828e147d88b3131c8f29482aa085958f8f3631c44848a57c4b13ec70d466db31fd7a77ba2f981736fb237f1522d95a50eb21729a2d64fd9cbef87e5cacba8a567a25a2c36486d1f19a778c8066dbf660b025ac78fbd9419da5792fed8a035de197040811de1beddcfbb9e2c4f30a142f4ca761e92a123bff8d1a639bd2bdc073d2ba3a3de2a3b5498d5f347b4de01e2d3f2b15533eac2722e450cbe03d667c8d9bac9b9018dae2d7cddbd41bddfa8edaf615495fa003ada839b0db631089cc8f705fbec0f71dd0f83bc4542f29c5e0c9101a605704c52a0ffbbef49d02845b09ef480648f3e92a3b658d371dc7beae780b9f1ce1c34d46caa8efa9e67a02827d76fa248095b93911c9aaef602e5162584717b17862186e58dfa78de7ed70ed6a95ea7c00532a880bd6a20faec43a86fa5118e09377c32b4afe8af309e35be641ca9d8f60c2a9b18a2b16fa523fb696cec8270ccb6ab9e811841e8bd4d22027a38387d0fa5ab3302d255e41e2e7721c560aa69878b1893f3d1eb6bac1606a0c006f3de36591d37e65540c78e951d98210a72c3623f29d8b2e1d080267e4961dd8dc34291afe9706b3458601ce1579529f0c2c4865948376750d76f530f530d7ad58ef3482f75a63a7687f6f1998ce2851c83b61b61dc76ba27e77f5a508d6c3ee73e3784612aa0fb23b4d334452345dc969bdf48e04d5e526deafa64c95d45d2cab9576dce70285544c73d0e6e8687d664f488365d02b7d82ac72698032c62dd86e99a2afdb004f0e0a77da79b1c701c9075f80d606549f366664c1f8563890824b44ae47650fd75ff3edb26544dc756220579f471dddb4c2aafb320d76883fbab04adc2c2badb8ca9739eb32181562c208e511319d2378a7d8aa5c482a5185d23c00ded685466dce72e10788b20e34494f7c993dfac235668df68330d800fd795d0b08cf088660ec057779a199237498528299c4cd46858f296459400633210081cdfc8e3bda2c93dd71c4454401ae1fc08b955e7b0ce372397840fe4b547b1848be1c9c85ae3b66594479cc29053b40081c1e738a91c9c03ca6dce40de1761110700b627c9f17d407740caedebac6b997a887ac7281c2e9b1748f69c466ac9b87882b7897194c5d6684ef75dbaebaecfdc57341d939496f2675cb28055089080c4b0f674ba94363050ba4b9863d924ab8d7640c1534d7b10a0f2287573b85f72d4d298730cb8795515cded28503e7634762dc43bd10f86feac5280020843de949030c80bcfc9364da1cc0695e7e24c737fc4e91474a15fc371c4e3b07c72b4f0e011acc66b901421da02bd65928c4c6e9182d6d3a3cdad67d9907906370b8a8eadbf6c2b49d2bcd8aab63b22b806212f92b0b400c85918f3cbfd698ca1d60774dd8031c2cf5ad67af82fa753c01671be6c96aa234a0e4a6e2e54dcca229dd4ac5a9d231466ef0910abb62a811485e521057ce1c591b4e8e0ecdef9492326983e0a5e69a87658fda0ad93ec331b1a246247aa806d05139d52ece0e9900a3afc30d70a2c06685e5b35e50e14f13d9fd7891867b0a40ef20eca16a5d32741a1a88ca8eb93b7a2c9cbd43b6fcb44e2daa59c62fd99f1141be6535274e0972e23435a6447c7428e61f48797fd38b2729537a50cb262dc7f54cbf2889437673b8875a0f567ef2f93ed7f55e10184c5559634abfecf34edb76666b1a04e021fcf97e868429334071837134701c3d605f4a645b7209b36ad24195e9782ea6648511941b93312be5187055963e08b57f9b58c12d05a6091a32e345bac17b08d692bd72b9cb02eb4954720f9b3 +MD = 9a9ba4c90fcad8eaf8522c2104089eaefdfb4048646b913790ba4d6113343935 + +Len = 55672 +Msg = f379f548286da1ea9572f21dcaa51a9ca9371dab752985fa2c5358cd17ab475a9fc428726295a664867c371f4d834f96eae1d46994c4d1c1d84d6e7b33dc208ae08f1d96ef0513e99768198ccdaae6ad150e404499ebb8f778ad953a601c0eba5fe1bcfcf6454e41703d7fae71a445a9d2c74b86ac26a263b379b450c6f279b4c4c2edeca0dec134b80350cb62f7d652c813dc75f7fef7ce32bbb2068ce6c93eb63a98ad1557d28a17c2762cc82eff70a0fadc5b9ffa1f009d7a79a4db806621dd52a5887c38eb0a3783d819cace2aca0284317ecfa383c19bbff072da49b825e211fcc5fd0a737ebd4d5ed99061be2994bac427ad7f89d9d491ffb8b2c828116d8085acc254d2ac5429f0b6436f235501a37d9d61189a0ff1f88ebd8a851caf25a52984f09e6f5ca21e76f60b7ec016ef47442a14f61f2c9afc85ca8b09fdc5b38ace97b271b4584f34d8e20f18ff3407af0214ee9f7ef976a6cc27dcdb341cbe375d2b2e5308670473fec278c44776f0e29da4169d213b2efd4c1ca784277cefb2bf898ccfd35069e4d1de6d0b01a552e8ff22b5786ebd6909ebf1118a40acee05daf9f56a7edc258e377d17739389d7ca0ed6f2b6cf46d0d392ed4477e676623898c291ae6fd3e17a19e99e8666ea258fb407f6e1ab9d0b622a5968d280a0f451e02e87220ffd44ae606829cce290e43fd8ffe880698bc1bf997da42478f34b5a9983004ec621f734f243e0cc6f43bde36204f11c73d89af0c9a121f43537105aad0a23bbfd09a114b9c2ec0e76ca5782395f393c304c40ffa00d07ca1f34ea5a030b19f01a7beb549c2c751a5dee5c244758e76808ae58f308087d2e9eb1826183ce097587407cfe82cba2798e7771d17336242963c88dd5e8dcaba91a787f77159a1cd3aa20fe1955e59cb26f2d4092a5431705a96084ac27cfbac2fb4f8aa4a1b97991ede216aefcc38b4d6ad7716ec5c5e986423fe880af2ad202a9ff4bf10f714a37b7506ec45fad96d2e63fac6ebc05c134972d5f5a67351af08d506965470bb44e6f30ae6366eae5ca4b2b9899704bc8960ef291413737bb140d098d0932cee15d7f4b7e93f9c4a1bd0064ddf7cadf25341055283d077addf692f45ee3b604f9ec4e69845d0081f2316fb22490b2080196061fc956bf44a61f85d785febcf3238344526bc8636affb0ffdc156d110f844556181e9548de41164c7ba95f2de588abc9cdd9dd0ac7f1c118ac5795cd3cd5c86a08cf018890d46351a87310ef2050eb45a377a3dde0efed22e89310d0d71da7a8b784a268a1888ffa258a18eceda2cc209cec22c5fc22ba855970e70028836b7aede481d05b8421b1bc987f0a93a6d5c280e062a865b2b2aac797214777309b477197a5a904f1a1dd33424d335c868e9417fd6c7061c65df7faafc68c0b4cbf760c4617d9e5f697e553328b4e8e677ffc29e84703398642d5b961dfb72dfe5f718699dd4a46bc8c33e4104143727431637d4cfb4b351be9adcd5572af256e049fa73701e26f6a082eae8375fa50d22b32dccf912e9caddae5ff328a5e3bc5356836c98a8ba729913e7834315a70acf5cf0e191096b8639ee715a02cabb72b7b34fdf6812c3721b1cb0ccb7c4d192818a4dbd3806acf66bc19d749627ee0c75d6bc267edad6779ef3d30ef5fbb946e1b170ba5e9922adebce50fd233bfffc263754ec3d6f57f5ad3fdad48e08a2aa78692653654f511f227b283e6a8565c4315bb69b345eec7ebe6714b7f0aa320fbe27cb22fc87dcbca83e7fc2bc72c3f73fca3dadf407f8755af02d13ce2eec191b53dba374e11a28f5bee42499a27f07a9f966beed29006bfb7180926725354928a3d45f7ed99dc69342e1de92930b67f86fde289000a8d52841cb9e6c1bb2025e6e31b17adfec27f980f55b37a30dbaa3a3e0857d4d36435a074aa24d70c6e735399033e96269cfa0ef9b14e980da52442c3a50155d4d391938aa487bd3086a458c7c714b1fab2011f54fb6388b15d1526f2812e8bf5228ee3c56fb77a0db0df7ed32d4305624bbd5188f99953024aa56f3563877f1f98531a8cd25d168d344c4b26fe709a47b1562ffd749902eab6faa4f315b338387e09bf4996219a97591449280145798f2af33e1c330a9d50e73f4d935d5bbe291cd75b6383aa0d12695f0041006aa924ffbc084b00952a1b269af37f04271adbbae6754261a177e8aa54f7dac18732ec78da14f3a1e2b335bb331d1ed2be5335a05e954ef8ade000651cb6590e431dd1dc75ea7ddf983f85ee3353d88ec9711e166644ef10775142e1dec528ad4671ba75b4134f825fd7f307c21d1502ef7d806326088d70a6d19668c3adad6639368e89c016d352e182674d07043df4d97e42d0c76c90e1e369e440f3f55203c4753761c17b7017c348c9092b8fb82d2f7c4ca571f5602bd62014b295257e4a8e359c45decb8d98b03101845547ef759880862a4b2d651626fe0e06d2c59805407ea57c3f8d949e4e46f803aeb24893bc90d8a67e9b076a7c0bba84d15e0afa81583a500d49ecf1458e94d15e5a2c5144b72a6331c7afee7f500174bb773bf2facc43077087fd593e11be358cc70475d8fa64a78d3ac36bd8d4c91db79993b453e1a8ea8fd02f9ee1d85f76617f36c81f636ebbba7bada92e9ffcc8ee4b7a0a33a0514193abea87d5ea5ddd040c2c12c2f930e7df12d3702aba80bd871558ba420f2754a3a196ddc350a2b29df64c1b68c4927225889f88742c3f44ab7f958d2939106ae8399b685210143d56c300aabacd7da6b36477b8b3fd1fa58212994b9023f5cd8afb61f02b349dc555fdaf89601bd7c9b22ec5c98f360a273355cdbc1ed7bfc3b06f513df5c32494c22bc07e01b68a24496ff084b2dee713e7d197a77c5c5495821ed11659c690f0c6d69d5245a77cffa1ad60aec1fd9eb1c50c60d652ba9e8b298f4a45ff44cb228985adcdd6f597a2e1737d12679c1649f690910f47f984eccd4a25908e45bc7132c058b659a8c1543246af774ac13923a1e5901b0322ed0295d8c8c0afd24b27e91006d779c9e45ebcb05ea41277ee87ef91c7c22f3dc313aac09d9d09f1608bd8fb1ff6dc5fe708a638f26268c31dbc081e9ccb7350ed68348a0aee45ade3e4240b0bdc2a72b29a1967d379f4afae0b13147900766553495abf797d0a0bbc7bf8c833510c0b2d5c3cc369b15d428abc38f9c527e183ddfd44e651100115d4987ab9fd1c2930409638d61dd24b849717a157e8095bb373ce1b87fa70d1d21182d266d2072becd38f342855a3687ebe6373b54a6e8dfcfd02072adc65234a5c8329571bd8b744ce90593f7aed5937e8ead99c531e1e6663e22f585fb69f869ee1a7153e58784219e1cea5f578c9b7fbf2f9936be0b7f98db6bc98eb2dec8dbde57327a54f13ed9ccabce22c0c5e07e1c4fb22fa7d00be63c6d573e890b367a3d7b615b685334d40934b7c8971c02e80a808d168bea0bcce59a370bea89b1d36ff9768dbc17e6beb83a2fd736e9834c2e548291d6840fbb4b94e17d53d4db660a43fa77bcd9c4e86e3eaed52cd8e228dc5e2b181468784ff2cfdf09517703a0710d55afd6f36fefafb4ad28d5449ffcb8efef1fc1f1e5e95fbd88467fdadb215898209cb70f4842d13eb368ecc72d36389c672f7baac91606e085ab1b8ac2571586e3d4c977de70973f5a0bcfcb0a73dfe60bbd8e0da2646ccb5fadc11149b03c5c07de8ae7a2f75638f997faeac824135f45509595024315f06ed51cd8e1cb317a152077b9265582ae1a83fa80e6c5775abc6f0edb593086d24ba77b7c1b16998384311c86e909c11145564b37d6d6708ac98f764b27cb33f37e9b59656610d8eaed86e5bb5b8286050285697a18e593420528585eee6191d66037531f43587422a9987fc10e5e45fbcaa7e1c23d615422f7d011912d9244ed98f1e514433bffcd50fc2752720b8558162420aab4e837a00a0d5e8c55dbb1cb91518beed659e04d6c1888da1708c8cc6d80b28e0fc8c23bc4368bab07bc6cd2e1dca4098d30aa15637420b27de484ab495423f6bea16868aef22577a3a2eaa5f309e9fed84ec1c7dfa56b86071d4d873204d17f3200aec932a6b87cca3d9fb75d5fba293802dbd72912e5cf531187e2a01967821a4519bff7fab114ebcb0089795491333cfb3cc5e8430bf8d26fd8302c1832a9d80d1dcf5734abea78f9b18eef7f1b8747a6891685cc6a8d159693122e77ef40ebc74f69d90b05680248375a2835959ff873354b9a057e068d145ceb2fbeea01d5e2133205d46a180814e65dac1eac07b01fb5c78d84a30fc967aa3dc863bf47170c0d9a662726650b0e631be3a0cb491edaaf2ce8d095e32b1eff8c60fccb9b3f9383156289d6f97b93121777528fce955275ee345fb32b4298b15981e0bb68a02738359363082fea2197c2dfaa4612a405ae8de8b88762a0638417b3b5fb59f925817d71491682d75858c0752eaabfdb72bd8e8e418f03b51ddc597ef307c99b1cf34f74b2ae9cb3a5c972e0460a209c1827528da1369901161e913c1e7d52167c023e16262cc80f788e6ca98700df7664708c7f4e2aad14eaef5173aea86dfbd132dbee1a0dbf6b6f0c1029781b66eae62d9ecbbeb78a510ab31cde0a2577abab098b6514edcd27e7c6ffe88fa6317a2bb30c0b5979eb46040e55b3e77129b6780acf039d398bf58143ae7f345dd9a493b556b6c4ee2a7455558e9d9d27de9ca69b3952197d7634aa068e560c9ec9eacc88f1468790e26c8d2d3a03b19620dee54f3cc910260665f08421f58ee57cbd14b28e32f7ee8d8f09f9ea7ebb687aed82ab5be127cfd719c3410be621ce8cac2ad66014bc73966c5a50127710fb47592d141922b6d742c0b0d1ae907bb654387d4929644bac8774fca4448568eb3092333df71653d8e3eb379a7c9ce3397dd26aaf3c9a0c15fb497f7ae3121994b149337d783475413509c6101863fed4641a916d3c3e943c4c5a415880b5a9a433beac470ef591acb09cfae6e47e24f3a1717ff78aca6a8c0517e0a1afd89f8642831c4f4de23f87e125346373440c23a06794f2bab60571b002ec0ac30371b7683701ea9772e54f3123013a476e0af10b6d6ed34e89eba9d7cbb1d86cceb6b41f3adbad8e30197f3b26ffcfc354a7c82d036c1db8ce8380e6a2d0bf0f82e508c21f280c849242a469a17e88998079359fca2b368bfc63935758d7131dc873221b54658c3d22073b47130c191c89e5a5ce120ab22a8c125db43e23692a17e79c656b22a0fa67cdc05dfc36e5ded973b5528bb9153706065c87c34445b6f9b8d44ac3cdef5ecc0cc008ed6d7352e7b9c0a78784d413e2c5fc4c98b82d46d67d66260ef5cbdcd75ab6e2374e460b3d1e7457a61c7343bac7c97d2f0d844c469bdea1ad08caf7022e01749a27d28a52183ccd67de8768f6824083e6a2ef59b29a8a281e95613fe4fd5c3a66a8ad32cf4d86733d4964e61e8c0e1b5026c2d1b3000543e41a3309e84f13ae2d3f3aa6fd04ee0396fba03d9b5b6e8e1bf7b356c052ec6f9e0594f794a9c43a6e5a0f597404dfe91553dde215670e667a94155b53198c159cf62b8b6283ea89aa979fccbc93d88e38e05275e5354a2f2c8a7d41f3aa80c0615a4b37ea73f2f6526670634f58647d623fc26bb35cce6282595fcd1aac571a9ba0988f94d08a1af65505df94b9003131b09225e823f78b1c7f413f30856b6eac7787e4ea5ffc5226c1e474453c483427e13656fc5152136b6aa62afddc5a47043d8dea6348d656445b70d3a9688910a5504351783b5a95ffba1312bb07903e43613f028841a471df805f7059b45f313a7c3db7d4689d8d39dbfc88f09da9beda810fcfd1c0f34f68bee4ccdea6472067c389fcb95f8763ba4ee6e0470503334a2b74a4c84d2f496085c56b90c4bd68bdc4bc826f96a4a3e19156cb26e4395602bf0223e45cd4fa776365bf28864e749d0e4a0b8f9471d85031c0ac08a1b871a4ca3cbfbe6670dcede64a4a0e6166de95feb6da91df8b7b76aea90564d40d20a0cb88eaaef07f5b547cd79e9afc82f1292487821ede3e07d5669469e3e1b3ed77317b373e817d104b95b21f86ae4f66d70e30947f271607fd08074bde512922a89a9827f5afe67633df5e6f39fd18aa201a46743b30afe64df1761deca8e98aa575442f6cd247f78d9830e03d7f7b3584d74dc3eb81783d58c17562776f81600e4013d00c7f1e3ee97eee24f98be39375d39ae608afeb879de669bc070b6d5d33899b9c3d2cd5a6b7f1caa006d8ee3e938dd26d0b02962f9dded78d240329dcc5c02ff6a7520ab9798f6ae3ddbcf7a13e6468cb7b2fe4cfc919435856fd235935726571b39529f1cea64352f6ce9c760705e283c19e73d2b03441900840067cf31eb08fea4cbfe9f7d4f89fda7448f75dd0b41886c4bfc2e3ae36d6c0723f928f33b5c3d40f390cb5a9df0d014489dfd353721c2339252ac3e5a79f080a2b448a4fd99fd95331c458838b3d03c5eb89e80c90e13f723074d189285b578e760d44c19086929f16cb80f061a24a6eca700c7a951a33e68e3bacf72d9e37759c577f376f1a6879646caf8f16cf5da5c33cc12bf329993c8ae9b6be1bda10360aad7a2fe9cdf348b73234ae0f36a611424aa67f3f81d7bab2f97f5c97817a664d99c6198503ab937bb6c0dbaf5acc27e4241d02ded5980792f577411536ee7cd186f362c57df9f01e54d4969bbe28500543a54555772299b7683f0a196ce4e0430f82ba3f7f76e53bb6d07d48d353304243cfb537f93fe77ccc27161895e646fe9de47e379aaac9403754fe3b2cd53f178f0ce0fade28876f9bc00397347b0770ac992d5251fe32b860c277e74d16d2f19fed47129874e00c41aa4119eb0bb845d631561427f9a820cdb998d196a0a26cf0d16623aabd97ef68466d150c20bffa851d7701af15a005d8aacf8eabfb13e61c59ac82976af5657a14c61d2a52a4eb43ee0e8f39eaa0d40c068a72ff9eadf99d06a8d3f0f5af2af1a61a96c80a0db49d039b316ae12117e25d683303f3d713dd38e97c19f62b8c696aa91657bf30d2eafe9b7cb481a74df62fd7234ba335c16790cd0fa4d4d1264be310207c0ad4b2d84f8de59944b9f2b1fe65d85915308ec67ee1e3142a567503afde2987455ff0cf76f0e0abb2cf82a03972d69ed25dd87483c6bada5f11f53b1161b61c2749094af553124e546e8a4b71ac829f63244aec2fc9eb79fbaa235cc8593aad091668d55b22ef0391fd860e377180dd301a32b7d389f97588757be325134bbc634e9bf908fedb6e0412e272eb4045cad1b63c422f75695f7e0a8b58b82e4dbcde681f209f356be023454c140db7360ab06ed425942abf9a54dfce481218d530d2d96ed68e6514fc57eb0f6c2f34f5ff64ca86cc920860a8957bc11ba34166cad9490795470c6b254a9ac8e5c057fa2b574fb0c1b99cf11cc854e05dec6676bd5a0d75e759a9d30d53dae50b518eb71110750e8f7b56e5695601b8896dc689bafdbd364746bbe0f71c0200576347b14328c0eca037d4b210d6f8b628a80014360ccec52f9ec11974fbc6975466117d23f8b9c78eaf84eba5b3a075a61b91aaa13fb8bf2ab237f1298b8f168cea8a7f4618d64ba522e6068a949f539c3909b19eef1160a331aeec6733d20a6b61013c2bf19cd5ae42867751c25bec75a0b6cd81935f76338d947fc09d25ef6a5a2438482b73f1e47ed4c27de55cbcccb35752fbd4f94c5636673fc81ff132243651f82d1ef22d02385f8c717618310c1139f6602c857f85ccb590e044ca7f039619004d54adf3622f9529ceed24d5ae2afd0c40f27a7c3ca10e07aba4282292f9e7c51b54fdc19ea5041f08c2e9374d610f1920df4ebef563bf287ca680c95cc25cdb29a8782402392af091900bc24463eeb1923b88d44a756767f5d46aefbb9fd696fac78397576c88330bccd3033da42a49e7af9f48a666853a89a65ce249e2e3ad012ac6a7e8af9a5ad9d1f56693923066c394288893a7a734baa4cd6d921c1261cf5ab7b24092dfcc8e57d988d0ce9f8ca8918b109cc93bdafb4832ce0edbd179d7cfbd62f986c72c9bc705d69fa9c61ff9205d7d1c3bb191ee1933a01a82af499d026e167e1bfeef7497f0ec3ac452b547b9062aac8fa6fde59036606fb10a55918b406948c2d599cb5321164c9ec3d116d42ba5c8359a738435b1ab58d7811257d2bac7d41bf99fe2711cf14fa977f7e8fa147af9bdfaa74c724bdd80769224527153aeba77c9765c8a5b09ae750d9e20a37726bb9955eda0fe5b73510ecbf003df91aa6666c3b1bc0751dc0371e3387058ca1578481acb240266f955108d09fe860b37627976e6736097c4c930a75b3a9263d3ca5ad7c4385704fbf71c53e6a4fd16d239206169052ea3607a21a87af1e8fafe2c321b7d60449be7d192befa99bd4b0744ec01cdf3e9fb4b90d5851c38b4f5e1187e443b3e53c2495f143cca4f3f1e43204cd699c1fb05d2a7bccbc3618ecb19198fd0a2251ceead0a014bda380b171255b36e40f20a69821957dae52eff01229a077f36b708976f6cfa6abed699bc015fc02747f6608cf680373105d35e3e8a34457e5d569f431cf25027ccbd73837ca8e3903361c5e69c56cb6cba0154b9ac52ea7caa9659783224b2f1a85f20e3f0bbae4787a6831ce01784fc563b5b29258066f89308bfbd5b9e8356b63e1a741a22809ba94720765e4d045e8ee3d9f372373b50aaf04a78d5aa51d59accd8ba3557fb3b3cc636b98351ca01b88d69bf1f01e833571f72315ce2aeecbaadd40cfed67e74a6963e2cebe0368457aa82d2885afe0f2bd8df8d3dd1eb0a8a33a502b328aaf67b599f670452ea6500ddadd44abcdd529daedad314e2a6cdae00b4321eb8d12f2f62e2ee493456223869433ad2a2068c21141ca95ebf52948a9799f17e21b19d4754a129370efa2a63000b8ccca51a3a5aaaed8697a28efda46acee77dddacaf37a132be5a3d470c15243f30753088ebaed5e5e14c46ac678fecbb7a8a5722f384cb40043f69dd35c33886cc78cec30ea2179e4fe9164b70a1aff8312028c508b35531a132ff2d45f1cf5ac753ea6911b9026f28fa9bdc978e26fd91dbbd033d57b19ffbe177a79b255b23a7731deb936808e112fd31e05aa9e4441319ae5e2fc672d39ad76decc3e26e89e372d3bb1243ad9c846d92f718996a543b6657465ea41b7504714c6d5e9d7bf611bfa6580cb062ea03c819718fb12bb6814e524c28551e1caf3b8d89b9caf5e0a8d5f052e152bb5207994ffffe959ad37b3e29e03b7ded1311b2cbf2640f7ee21f426c3c4e9f398d065d90e303cb4a439fc2489306732af0c2636217ebbf8962fb81546492ea4fc38691a6db2da6bc8f455728e4f7d93a4e47c9fa7acf7f77fbb40f537c5ce870be1eb1dc38dadc640f22795556ae04ad840852ef8b7da3fd04df68d3d40b0e4ed5255abb9c99c0c35bbdb5685887a9f72a8a8adbda74e17b26d41a701c3bc03ca130d8cf76f8e87ced5d77bc6b232d99aa450e29d843ac64da489092a55da2bc9ad7d8824876d7d34ca85ccc2eff0427abde29741578595c879377c61fff2a612a70b67e81720378e224c131e479c20377ac792502819cc4c75b1c84ec8ecbace8921f0ed298ffd0563931685c21fbcfc64679c73fdddb3001e60b598b8b0b025dc26ecd8c4a217c117c49e9d695f5eef012a7c52e0b9910dffac0be8d727d03e26822454f141cce9c546730e43454e38dc79fc94d895b09a9dfe91e52e376142f29c5d07b75465a6f681 +MD = 71421c1a9df524158f2b202ffab37ac7b86208592d444c1091b57aa6079afbf7 + +Len = 56464 +Msg = 21f6bb4fd89e9e58eb1e32a23ae8f052a95e82fec6e88261ac448554271e58fa18e1893a1bcc29726848d169f779e386e8131240216f25d639def740953dc365d0c99e8e6035451b77fa197528ef6843cb19eee1a2c49c0dbdd298e41a54840e11570335ef0079bbe2dc13ac157108f11b191ec791106f70ffcb6d28008b245ba333bf1510564eba6f95c6f7052849f8a0baa8dc367a2766c96f80f58d0b2ab64d04da180b5f4b80e7ce3b3f423bb6c122a59606d82b4b56e166d8310bfc1e86d8725d252742f875112e786a12d3d4b26981f02fc14a63aa10597dc6c08689320d274f23ae28dd02b75e8761be182d343cf7bc3e3700f7c91ef0789af5cff124b1c8b8fce638838d9f05700d8d3148b065af041b8375901bd3d2d097f102e1c38f00a197189b718092cc3955c947ad8caa50cfaeedd0b508f7a88da4fe45de776e7411dc8b782f41585bec20b881e532d48326dfbc3aeff85119b8a862c072a815cf10b389f8463ab9599058a4087708abef10963adac553aace578d669d24be4db7a60458433dd17d6e2ee4d303eb78f63d95bbadd9bf81ca6e753a52017c21ded4dcb741809c706b43cdac8e9bcae87f14bd365e5e65ea79a217976e16033a90d0b9b48cd8ec7e4d8075981cf89ac20c1d91ef959240f77f12478c0104406f2b5045e38172b363e9cd2e90c741e66d66ff18ce9a9cd70ea3650c0155f3bc2976ff892d68777c8607d0017cd59f335155635abcb4a5b299ae446fdeb00afdd13a828c78880ecc517134f5448f390bd6a0f1609f2cd55afe6956760b5b718dcd3f8457ae2a602d2bee9f13d03d38f564115031614a5356a799442b709e51f4874dabf0b59694267c45ba620827c37a636e29d5e856482efa09b596f6c0d2b8652c9f617714d340ad3f2cead59403203b8023551e98db6b618052be830b1b63d1a309b2daec450124a49db31dce1f72540fe7b8e958359443c5c3ab00c5557d327c91e9c86511f34a3cb7c6ca1b40f517e31c0633dd7d3107a1af655637a78cf07dde1028c8609e87ce1f2ac2c48e33eac36b48e370dccb17dcbef56ba93a1a736f992ee15d5989442480e7ef1030b336787c85e1597ae9da3e9962296335ae2219694cdd6c253ce704800637494ffd64cbf6c515e07e13b88fe8b477acc1d16745f771033deb3fda37c78e84b5129ada818210674d11d1199652f33cce0609a9b9eba53b18d41b8385fe87bd9ea2110265c76fbfe75aac651c8028620f2be1513eecf06d4408574cb5cdf9ca4a26ea433e6ee905f7822b04e91a5bd0b859dec59ca25b810aae7b9c91dbed9302c7ae04d31e8721c5b0d75fc5c7926e10b78a6e9bb6ed60b2ee0fdadfd16aff0dade4afed8050fb990d36dc782fd724616e6cb403d0aff084f19c70685679f8b5ff14ab543b4c7bbbc1d2e4c9fb31daf1a50c009b97a71ac7dfaac5f413216640e6c660d0f8838a72f333e081d3a9780a85f3b82cb4dfc7c5e0bf414bb06a2ff7898336295ffe0e08cbdf36685e45e6f236a8467ece5fddc41a654c34d45c3c2211d2952617c4f0c372605046450f0cf1dfb310598e2d460db8234e7827007509a53ce591c9dd19ec103e94e32f0fd351a89d80859c53e8e8e081afdf535dc2f36e488e301c5270caccff6c07c54c2158baedfcc99fd9ad9cbb08d731fd7b0c2a937ef8ccb92adca7cf2d3f79afcee0503d2beeef40c57b73703f2f36cf6339f43d668b2c476d47c9414f7402949df67f58e0bdbd26213cb327af1db6711c339a9489b01a6f23987949ee756a1dc24d2e3493d1fcf9f5d7a50ade0a788baee063bf6ecd5cd955b7ff0f91a979f144cba4f9cc9273634734913e565f45c4222a99e79d4cbb2c0b8ba3bcc078f6b92b5a2bce1368ec0a213bbfee9f82e5c47ff882339f93ff114bfead78044aab1c7fe109dbf1bb2d968ad476403fdd2034cd3168ccfb0cf02f1ff7646ae3875ec349478749edf300b08be7005cc0d6bebc15bf91d9391d552f8e5f12bbe797d8559176ed4090782b002a5ca36baad786035e894683e230f8b8a01cfd9298e3e17b5d5583e760b2762d711ba895834741b2b077cef27dac9f735e176d187dd141ddb7cc9067e70aabe0680c5701d58eb7701371734d92f91307cf38ac751ecabf22a6c35ee8ade690c01618f7d82714b0e6905f7bbda97f1c1dfc6801d0033724f23322339139afef768325d2410240f4bc2e292f694ba5815deb8db351b57e38f764d1588a13ce8ea9b71c2e65ed7c4a99f6b8d77affd50c6ea6900b22bb09c3d643b915fcc3a93502bbe6546c70307c25eef2bb174e7783f9355a51689d3e8d3ad8c0b10fd1aaae2896698c7d13c2500920c02269bff1afa59ed2cd4ee4875dc92acf76eac638c0c5508f1dc05f9b8fed940b5697daac581bebdfc6f9174bfd2b41cfaab62aba327ef23f515edb23017851b99dca27104603246b8694bef1330925a6969a839acdfd82616e7f10c26d535fb3402a2f8640044f5d534561e3c80bdf3e82bf5b3f59ea0bdcbd4a84e19c26c6e286de797410c6769d7634898884d8757db64c39119eec929a86e8c1e657988e2db90f8d437cf2a012378bbd482e19f24d796aa67863ac218211814f3b6451c07b1fe4f45c4d30d6a6dd6f868b90755b95154129dc72d2bf7ca53cb4468bfa64b6028635254a271f40b20a6bb97095ba3dd0f84aa5910575708b417a71963b80c5a81cd8083d8083c8fc84f43a9720162cf3b8913b89ed4a460cb928234bbb1e905acf666cece20a270405a977cdbf784cc5a88707213346e66ecc47c3742345ff5fc766b921f6bd4312b413d6d91ae78490f1b36f237f7139f9a15ebbd71afefa012b6056a264a3056db9b9c085d86bbc9aba9ddc5578d425f761f5723d4950698623dcad37d3c4555f3d239e97a20cdc2d2cceb781c77693ae3395506d57433437d96325aaeb291c2e68dad6d81fd3cd8f6fcd666d145f6c6740c4bd31eddf435c727c26c255d940236165d210f8c77508aa2253e20698966aaf0d214fb32d7e3d19b01846b9dcab86514cf807d4f1bde20556e4a74528fbffa9f5e4905034ce21f48664ffbe3b439f5f18b2845c578d63a9f083867a17826e56066ebc6dfc19522b8670b50dfdf2b5b45067513803ced5be7897454d6e12feddc7289bb18e4916e738a52f4e2a9f12777c7e340ffd667e6b7788ad653495f967c078f4c5f144b650256b3728cb32fcd12561f6894b3fa7d974bd866b71f2a51b7ac791502df4798dd42b9343e792bcead2775f4ff7409730f7a098062d114b227c7e38fb4b3fa9c7cd4b0c4886a99ae90b283609095098978898aadf71da32a34e03b26e520f8c2599356adfb05eddf658dc455f8759f036b00d869d4435a4c779c0c7504a4b6cd0bf4f75af6e99cf3b42fb52f77b42e836f667f2e9af0ae7b6841b3e4a3cdb8fefc703f561c742b6dd50ed267cecf3c8bfe30fb76bb9414497f77ee1032fa73eab3ab8b19cc442db070b1b8994e353d8f8fe6b9dca6ac203925b5076242b96c02c9fd572096c7f86dff9eb42e7674c600acfe46bafca756cd137f9c65438925f997ec40050c7e2ff8da4c61b1e80c5a71ddee3ebc1e242c77913e1993c5f83611a60ec2318dd538d3a9415dae136a7f657b4cee3a9b9125bb57770b783a74f0fd9cbb5a309b7bb790e4f3e48d792d895e3d80e1c0e57cb71abec0ee7d219dfb1fb4a8747cc5c000c305fab2da99b41cce7d20c5e99c5575183f923f2d1bb1b8fab62cad809d40c8bc94cc251ff5acae38c2b2f70f20a9c43662717a12797ebf00f9de61f6728c541009ced7b7fd55c21f96ade1cc02e848f7cfd52ba7db5381e4f8244e18f5f1575fed99375d416ddcf57178328ab3af67cec033c057a1be85f94994ae92981e36eea8a1b05a4253735cdba855d5d35d953dfc13d4cc7d3e5fc066b61fedc971675ed38eff49808509b84dc4c837b27175d7cc0be550be5153dcc7ff1e750a798d22f6a760957c91249a3044062b01997dfec8725e9ef5762690f5d636d2ebc50cdd7a8180e8a70638653bbc9c1a1114124569edcd01b33b3caf68e1d581edb26ae0e7b3dc9d8032d9cbc884f6af91afd73e38e49d23681efa6aa998970c70e02bcfb694d04ea8c57d105f33a235e39b313baded6b7e847004652060e7cd25ccc40c7fcb0856712c96e5784f2b579784b4d0516ea46db8fcdf2175e1346e6ce6c8299bccf15f89e6bbad9c4dfe8f1dead69e9bfec48b4603ef121280294ac6acbca9a30107b453725ffb43a69836e73c2af906046861ec33b8d97ec422fcc3acf60f1e0dc81f5e5df830f6ff9509a40706622815fc5bfbeac0ca1333bdfed46618bc8549cedb0b0819013e9f5151a4ca0d8c6aa9fd03f5c79b76983556bb7946a954415b68820a1f36ce732c79b99a03b4ba5646e6e47a28bd61467f89dd42fd0c48faa941aebbf1d5fb5d2d5aabd422708e73634667f9ac8b1cd648c3be91c7d61d19b9c6bb913e7b3a24f890a2e3c4e57b3a959818e4b198fba04790ea16457b33171384233a33aaed8334a829596967f314445871dbd66ba03ce27dea1104804d8b3cf680079fc9a7f057fdb9a56e9ca8b8f6140d3f99878d14aff739428379aeee9c8a6c99d17bdbe4e92dde4862e7ee6121373590695124c01679420b20bbf9a9b8dc236157160be95ea501c2d4de46d56c4ea56ec47d09b7ac80bedb8aeb804528584eeebf4caa762effce9542d4445e2dd6b73b495f9e73d8b9ea44107d0559518b69a278745a03e09a9f402b8e6993ec4bf586566d757d31616ed56fe4eb5edae1ee1cf1117d1afa01ee53fd5118ff3e3aeac07a4b014c3d33a6ffe7b794be1af866ced7c89633f1c2463136c0f4f88a1ff17a336cd459528d4d341669b40f983b4e388afe37e76e583168766260285657c433f047613d27faac027a7fabbbd9370eca9926d49db6303a7a2a99fd07399ebd5e6f6f2a6013f86dfb927dee5b6458432570d6fedf6ff6bbe6d1ec2e0d8a415789df48b25aad02ed8fecc91e66b02b65b9a0830924f1f8502eeadd65b3feec2d26ee687b8569a6a52fe7f5ae56433d0107a6bf95e6f2d171c2f3f25682ddfb98b60b42f898b0504f6c229800a2a3e98f8001e127cdd8feab338baf5302cdfc44c7b46cbbdd479c26b51b04c7f448dd7bc3309c31221afc6700f088fdbc356a9bdc884a37fb65e6e59b4fe06693a8654031c155449c4f373fbbe0f3b907bac31854e57fef5bb1cce6af1f9f6f39593d976c1280c484dc5b8fb4db94077da49244c16a526476a1bab44128b6342dc1b2cbd2c2b3438448c5e19c2ece8b96a954abc2658619e4bc3cc8f1e9b97819786167f6507144031af2efc2792797eb3f96b7b8856f822e77dfbf41e10d8d64f3b5f6472a2f4899d98ed4c83923ced3cdb4e31448933fac5affe1a19d46f698aa4cf165de61c3a10ae66b3dfd4792f8da4bc8760d7594f6ec39eab17cea463d3282e3a2ebad37c105960d74240786b2ebd7d24e62ab448681fa34c21e6beecaf2f437beb0563772701a260b4be80caa88c59b2dd698a0e3d2dd5a73d04072ba821d77e9eb11252dc0ef5f73e36da74817b18d64e7c24c87453fc647610c5494567b2ee4ea52936b7e82144e690cf9044f1813a404aca9f96fbdf2bd1f2416e0e679c7104c9ef4a41f8eeeeb6b4a54776565d86bbbdc3bb2a8c47a25893c3c08c8a5dafc705aeb701a4249eb68aa4c0a1117462c8bc5943b86efc7412d9926a4638bc529f41aca480558afbedfb16244c8c8e746d30d25fc908c64707adf892c5da83ff9465333a4474e9ae63ed419a002e7367b4ff7739e4c46dc440f83b618fd67860af5989a0d767095e20496f4b445feae1a51290f69109b892c4a0a4fe2e96641df705f6ffc198b2b42df8e65ea087bd8a475165c1584070599b8f7b912a800ede7552c47f886dac5791e1eefc9c0eb20ca2a43dc0c2cf5dc3ceab084409fe404a2f263947b650bef154ebd14dc15d920cbef4621b561f477664de923d5577c0092f6b9f80d2a8b2277f00d57896da2435a4271afb9c98f61a650e63a4955357c47d073c5165dd4ea3180744a6a4ee322c5b27ae881da23258da25c1a252f9cd231fe459e3f6575b0d2ae764fe7101829cebda66e960a6c2d8ca0af55f13d3eacd1fe83d5e0d7da00cba8a7ea9877cde2b5d2a8947ee0a6f413da547026048766b84fd32e933b9e749d2d7d9ce6ec50c81b8fe61c94d38013b3bdefeb3c1c038a4570a7eacee72f66c79b6bf96ac46d447043d349807964070cd9d649cbfa3f9219ff66ad0c911961cb80f7629cb66002549d14bdba48ef385facabfe2e15a818964ab3e7d49fc8f0196ca47ae538c56c290a1eebbaa87e425cb4d58b0b04b9885af1042daf89ca9c41bd07a4dca22a0c7e0956460a3e9d9f6460e772cb3df06bd870dbe105d59ac0d4f075730ba8fa4db4295f7f1161b9ba075f6647e727e92d8f48af946009c5f833b58267caa3b2ba7bd89ed968c87f2cc60eb66cf7591067ffe6f3ca56acb8bcfe6ab2e5c238efcd359598f798c94a5220ed6c647457e2859aea4cf552250f89958e9b8f6acf0e1061eee25bf9eaa7e4987a0cd0d69afc10f0b12fa7db0916e889af80c72cdc9a0e8152ef7934a3143ead32fc04a698a98481d9f05469df8b544b3c272f90e81022245024c1b1991bdacfb6dea25ce7977aded3437d770eb9476ab2e32b3f880cf5cb7526e7f9233b438064192c71ee324e582bad959b1d4d5c68b2393c7122ecf3d7107a3e83e7df035fc92ff57e4306899e51733f3e91a3edb5a8bde5de4f4c96e7d07347ea3d8384ce54a7afea5c70b711c358dce9f25985e204d5c9ff7388797e33c69684bad5525ca504be4eb12d51431fa2f115b5daaf6e55152b3d263cf5fa98d89cfbe621067b28cba303d788e2b2b5060e5a52a3e4cb27f0bc1fede6a6ed9e1deda82612fbaa6e60f0b2461fd5d131e6a7206f41a078ebfcef20110206d7a22aeb221107ac8ad46919c2735eb53f04c93df052307d082f9e26d6560b8049537427e23d9bb36cf94890cce5d20b5cac124552b1fcd4f9515905bb138fcda3108e2670e23b8af14b83f82a13f642aaa6764fbfe50342bcffb20e46effb298567dd5956c553ad9859afb2729447f5a97259dfa081f040d3893da2f231ca3e50c7e652fc4d9095c29230522edd438ee99e31579d1f2049cd9c6056558f9976a5cf3d85d9f16ede10939a49c7558588eb88916a1df32fd81b97aebad96fd56cf4dc477498474ae102bc522bd4a36a8e1fd00e699bc48b863e098d2306390a7bbe8d98a18fb5b139099b0c5acf3d8ed906f2ecd8af09afaeb570903164a1a53d6341a59f58c33e60a5be0d692f8a4f24216fc159c01928ec125b3c686d00323c939702b06c064ed25773f9c96e2047ea0fb5204f679973b8c528063a87fb4dc3cffc14a731e56f18af7b461e1385f58522519e4c1e010c8f4e75721a5de9349d68ff7fc652f72b9e0e2266b9a821d49ff9c37fb24bc67fea3eb1f49a575093140f0f88a04791e0fd0417f04ea49a5194f699692489703a53e66c223cfcd7f5b222aae3c7786c3b9021ba672f9136190ec931cf055f84c85706127f74c6d5b902246ff59e7deca801d7883fdee6bb8757b22b35f7268aa65dee2360d44dd0698eb4bd52b7b07992cca61feeff2d61292a71f4225c76e850e33f4d7acdea6e93b234117f85c8b9a85b0dcff8e2cded7ad1591b18b7d924549159cf21e424f6b417330ad09b1f2345278f46e24c50a708f7080e8d9bc5c52dc2de46fa99960f37182217ea6a3c2ce5dc9ae33f7e4e243005ef5ce57ab55158f22d336960b62eb94f91b74165a85d26c4c14364fb2efb9c887f64d4d7304f42c9c71302dbfdcba727f2776a3fdc2a748a82d607657b83bae958e4c023bf1587945c743b5de56c8d3bd4c6d93b402b5b9860197b3fac62f7b2dc2b4bf2ca5aa40c2dc58788f587d7f5a923f2fa9cc64878e99c44dc39ffef7f99c6bcc6ea75047beb958bcfb6b413dff01d5bf01a81c7967fcd08ddbcd11eaa1235a71287fb457df6429ca49167cd754a2178be71e4558ba32a1bb6ad8cf1ccd5f69f683b63c37cde7b5eaa2e29613007cedda81b747ec2e44211f97469f55245981a2a6d352b1314ae2632e56f7baac9740f6f7fa8afd6c3936008ba1eb5c4e1888beb95e5d8bb3939a7f14fa0794fffcf625727077531b19caa86e701afaf4a46892e6e0c58efaccc4847d562f68a2b2f9b01a9f74b5e4edc45d673c94f7be06076653e0f182affc48bb90f3d5003cc12fdf1611eaed6fbc0c689e8cc01b53454f8228e64b2f792c0e6c76586322763282f98f4e42c1638e8a113ce8082d5c69262d8e7a3a5c0163fddf560d3f97f80cd948acdce2fa696b269f69d8d3f7807b76b1ad2526d3efa9ff5b599bd32669571b1296453460285cc85c4ce58a3f68822654ac6e775aea06fb2aa7898599721c32a074119eba4968588e0e9693cebb861e5fb3de96ba9a83da92675fbfb7ba62053a6fc68ad27398be7ed674576c2290461aecfbe9bba82782dcc2a6e847ea317c27afee5f6e4ff3e274cd063ee045a686cc7d50d924bcfbdc4fdfe56712a9917fb15b1085578481acb71bd4b1f4cbd3c6be8e62cfbf7d05d035e7a4a6e0a08bf61e9bb56455bb4a0591e766166e5d1cee3948bb3152944f47d4016b0c787626c9b79964642f9c57d3485945d617a28be683d2e268a6a8e1277656c301a4d46be1c47aa5edafceaf00259bf85ab7432796e4555fdd8362c15a610d33ed2a6260248d6900679bfa5a7270d2070916e7f8e6a6f9bbf7b06af9c6dd4f4439d3c70f7b598cfe3abcc761137129fb4afb3707bf10e57d1df767915534447c4b67ac80ce720b26cedadecbc970c65a8730da5b0769422db91e028feeac13668caeb8ba061e0f018bbde6a07eb4d1af277b79fca8fa375332eee2fd788fe587647094c509a6c015da2c88e81986737f92a5bcf3880bed78f02fafe2dd23e1693c74e7a9c15245ed21f06cac822ed3542f764a4791e38c235ba9134704b130937a835a6e1569c70ec9d139f4a1f41bb568b5cc00a9cc3bdddb23b433d580f98d8865951dec356d023b9798c65e1f702ba42ce927ba0c222dd8673aae38da65e0cce23fbe30fc6050de0a302ca1f9fc3d4ca14ac3abec6a9bba3b4ec115059c13b0c10057c807c78019f2aa2d52c8e773c6dd97dc64b43bafe9689872544ac5ae9acc82f29c9ecb1a5616add159d559557ba8777bcdacbcf2cdb6bfcbddf10839f4c96a96940894a7fc3fe2219e68796cd3c992a6ce1c16ebceec6cd498428e3d2581634c988f49af7335f02409c96f3f370a91684f4b702355d446946e857f4295bc131b907912b822c081e3833f64560d311cc63882f320c834f613450103ceac42220b640f184c73a83a64f213803abe07daca7109c76c91d5235907ff406bd2da3924fc9983f2cdb4c5b1408eea72b354747be228138f167f766f9ac761a06f4e006f405f7b3398aecad253f5cb8653e091e17427ff0fc1f9965ce8a18cf5eb641ef319a827953d5cf0cd15934aff0572da050d4db576f90d2d28d7d5eaf3aee53cb86dbeafa22286e0ac6caf906433d4f7ee96e35a4b2581e0dc51aaa221209801c726e73ce2b0f642774290c43d44cc8fa4f8311917af1e597e3d69dc08aa4716272a6cf6dc4f73bd347e7f0f13a0234a30197f1861feac4019825bc22eb2b822e06395041868c4f9ed08c4996cafa1d299e3157fb17af33cb20ac5791da2b4cefbb7a98e1e61b29fa9c8a789d3d80dcce73d3a778f8bbaf653bcf22c5de003c27f10f2be77a4055771a67007cd8630e3230e38288499cb160380290174d66da57455b6baaa9785c84c8a663de41ed3bd544055b9170cec43cb3eb120eceaba1fe36e3eaa3fa4f99b +MD = 6caad7572e7467903c6e55a8a09255c4af43b0686d4bc515b21effd3c14f8ae3 + +Len = 57256 +Msg = e5ea6e9b961188de576be7be0a9ea7afde7185527e31a9fa8853c469405a5bda86fb6345057f0ddeae6ae3de655a1487f9310c625a7648cc06f969b0c5b6879696fcc7dde9cf30440e8abab0eec9a829f98518255f81d90983e57cedad29ae9ffe35c5ebaac7981a611494b90eb20c9cc4b5d122f51903b9e66026a55f7b78fea7ee82f8b030ee688e5098832ddee8e844095ee185056ee517b08f6245748fba786f298b62d1d9347d86ef95b416e3165fc9e8ea750ec395fd1ddeabc6dc98db58ffe02d2a74028816fec0770920a52cff3c96c62ffcaacf82f13c094a7a3e6a31e8cf656fdf106b41ff34b296c4d7350bab91fc1997ca9d8d72d0033917266eea7020bb9adbace6e6d373cdc2cc21366b5e00149da6cc0607eac321fc7bfbef6be0f8b711307effedc0a450f4fe2a39079d0c9622f35713d69f3cebf96e63f69c8082e23da62dc03e0ff0c396249b45c7b0dd0b104414cae3da64ea99b806896597e3c386056231c1087eaf0f041b6393de9afbce62ab3516e262a544208eb3ae6f46e35514c4595ff2779cc767539a53716cecc615c35c57015fa46370a0795f4ed1c8109cfc40fe1702102614eaf2efaf7a685f2404458f7d83705c6ee7e5607dacfc2165b1ee87bd489594d589734fe1edf6015918faa49ff59099e308fe99440007ee378c6ce32d70b27970d8265b4eec1f147aa48380afde8c8096aeccf2eaf56fe1da35c1f8afa3f03dae7e12fc40a069005053e609f565ed7b517f5854b9b2be601553f5b08a09d54857243f18fd305e2ea3ca2d29b8b33af1da23a9a5f7607bd5b28e11f208c9eb023371b698cec586043bb460c742effb4afa43c7cfed262fa777901ba56f0cbad4090e7e65fb8768ebdfb785cbd942b9ed7987bbb8e32d613e2dfe1eb308f9c924a3a29f65cc9d8c4c597ba61cc6d4fa441f968c4a209c99029c831f031bb9a05bc7d6228289307a8d6fa9caa451cc49b6b419426bee9c605b8bc5287df073c7e23e520ea37967bb18eae9fa4ac1532babffb7e60593553cb1c36c4009ce50c71fd0bd6bb0e56bd65391e23df660902a8bc9197fff58eeb86c0d21708fff78267c44c04290156353a82e3d9b9074accdbfdae61541859059f42f8cbff7c9126f6064029a2d5178bb7e87a11c0146ce9cadfac7b1b36262a9b1f154352975462733f62c7b6ee1d2943c66b7c92f1e1f20bef164593d378d2f0c1d21da0e4a3ed85cc3e5ed3b0c98694c9127a90344c7e05a866418c74b38736b799db78c921f094593d6f97c1cf3bf15d098c465ffed65ea8370f339e78cfe37cf6ed38c931443552ea6a619570a20ffedb3233e98b935d4ae2ff47b53b157d9e53c36f797420df45bfefdfb06061372ae1fcd745754da82cf4a2275d7ce06b783b0e9b3e4d4ef8ae4860408700e21d6dd84caf184e6dc5ab0688510bb0b943b7371f3aac2f0717f8fe5c529df4bd093408c239b6796c1c618322632469188cc7c285cc27bbf1c3c25c4484799e4ab11a0dddf5c488d132dce4f0cc4c1886ad1657d2de5566877276dca9348e70237b9c41f061b6ef359f79b683faf7418c3b4f7176dfa9a130ba931a0b01611cdfef176fba1c022ef1c8b4725c8d9a76719dcfa9f24e990ea5e2b37eda7975f6c87227c18b732aca9e3539a2dae2ca2a0f7b136bc5a9a8012fa13485a7eb519085ab59f20505b544a36b65c29f98face9e29b721718f4b1b667ca2c8f3f5686c80010a7b8742262fa9d1c54c0b2e90f6a6402785865e16dfc2bb9ab33f264efd5009d5c8a2c6f1de0a1ed4b9be024114d044e0e264a49fa0cd0478dee9dc69c56e2c3863e7f2ace25c99209628b27fbb74be7fd29ce12a10fdedb996a4a64d5742fe9ec7c763cbdf09e7156bcbbda15d2bf360c0af925aa2ddbdf984c0026e2576e7957eb188b326aa7f3fa517925a6c6eaa10571d36a5d8d51ba533fc8f40a2627da8f336d0075bb6c80bccaccf0f8bb5491ae0565c90258c7d48fe9a9b6970ae2745cfd7d83cd0a758165cfbd2351d8836fd16fb62be0b5c69517f2ab54cf2a28af86f151fd847f4b5cbd0753a6fa4501a13457ce7640cdd565b203d6b6fbaf80f3d4b6f054e044757b8c1b96613b2b5691a063b6946ac87cac27c433c562c073a80ff562722a7e7b449ab28e3d5bb208a5dc3e756ba6cd43d23fdcc9674e868836ff55b03da958e621af754420a401a147b28e13e53c04b33fc2f4a085052847056c7fe19fa7f83c79920cbff45c41a9dee8fc99e97396535b78b3c108d0cf387d1e1afd7f6a8608b40c1e079fcc99a6d2472f0e5e95abab8f28c233d6f7a3e407dccf0dc43b2bcf39e553250b3c32228a97d07a2ee86a44419cc8fed9c2cbd20970461758620e1b72e555201ef333a470a086e640b5fca5db9a6e2bf779708aeda0262622275973c6d3c900c23bc5b5eb29fa597c438956c3eb5cc11a63b9951935173f0ad231609d795acede5a10dc63fcd3dbcadc38e0635739c829c9cf7af7f7c36cf8aac069609dae9159993ba140dfba7412c631ca21a5ad490cf3d9c1edadcfb4d4f82e1675086d511d406f8ceb9b572d3c4a9d9c679f624aab2900f36521e6208604a3ef458240161197d326caf8510d30b0a4df9c0bfdd6eeb36c97c619aeb6f716467d38d3cfe91de690f646bd511cd7406d1a27b229f2bdd84435785ecf800d763f47b7c2c1d12974cd84c8b4fe63174221d5725c8ca800e2b155e3b8f286b16cb7d52818bed71d8ab359b6a301e9d9fde799e4d0ceff9f17da806feebfcfcc3fd6b0f49d7002e1706afc795301b706bae8ece5d8980082c0e83d84cadd634438c35f84197c5a5e6e19f57a8ca7d384c14b59dd3a92b1912402158a12f54a039fa76a3f548de77acce8cd20159b473d5a396534bf631cb58d518fe98fae8cefbca95a8c1549b21ed1000bd2b8841b17cdda9a532fb349d441fc330909b132f2d6f2b6d52658c233c68937fa3b0a55fc61557fa0522c3ed7892c895248a544f336a906814d631f9ff3aadaff67d6ffd35fd39c84f07405a7ad091a2d1333c8d925f7d3f85312d24ca08c7b49049020840f7b7a68d033a62af5ba6d003303c88ee904a3a1000ce2201557a240dae0c1f6b976a0b2bb12274aa9680a3471bc4bf9caf701e61bfa57059932d74cb06ce913a5eb96cc79b892ee103a7a3293065a0212f8722e6e833ae27645a3d550dfa0c21b03e51cd2cfeefe73594461618bfc91073180e2bf50929ef2b98d4380dfeeeb62e6140c8efc44611aecf028a5f0398ef3c7b268d708672356b61efe0914dc76c3bbab0274e99b014d1c07f125e019e11ce590297e54c158ea63dc6eb328714c86aa33684d3efbc554111023aa01a573cbb1a38d7bdca925f5e951fb45c0b653f3dd33a5e1a26d9576f29325fcfbe42a475372fd98472672c170050e8987b17451793321f8bef759fde71861e377dfefdaf486df9b3e4127941f7f0d45226c98eaa9bb445a3aa4f92f1a283e271d9cabcabc659c4d68012db71e4762423cefa504935476cebd795e55b04a248f94254460d2999d766e6e6a7296e573487b4085e85f851f1eef806eb6d4077be58582a4e45faa49def790c70cafe1aa1f87691ede36d7a7107ac0129cace6acef97b9b19e8a1e074cac702ccf90c46e8e09725a2d40d1766d0341334d606f1d7673d455d57c7f418a341582016216265ea9611f1fa4fbf4fc350cb712192a3741c0da76d35c545e5e3987afeb4c5d3c570e4057fa8bdd8a87b5288833ffa0621a27d4fede5326c69160cf9dd577231741e116e9071c009ed42e9d8cf8395807c750c9d43f897ce0eb53f432060aef1fe4c9ecbd8e80eb9aad4674ada9f0da8c11e2c1e03e25de1633bafe58c82e4abc086fc9bbd7de26e4d8a5b4d18d4baf5bc086c50a2250d4cf333cf6f6610bbb56747ab5cb295f3ae61df465e2ed735eda9ce3db3a3531e774b182e3f41ac8ca55f193b9d5ce2bae0646db8fc7118f6f736ca20e58bdf19e6b7634cd393b8eff214762dbc10c690aae19013b6841c86b8dfa6a634c03b7821d4af9bcaf0c84e3223e8e25772c41d745600f71adc546d98f0ce4e4fe4fac1af2f479b93dd5d3fdc19dc09fdf75dc9b33e1ac377ee43041e36bb79857e9f7ee533e5dcbcbdda2d5642e9f50e23162e1df658197c3e8ae2bf0df8c873d18c286a6ee4dfb426d1af475b7d44066a6fb2eb3b336986417ea201e300bba9925326b54cdf05088cd63e15a010677541ecd0c1695724249ba09a7d525db3854587124c6a3efd28645a4247dd4defe95df030270d1dd9e5b1836497d87a50954f9a7396338f189241d054644f804dc0f31c3992a3020b3807b978d7e1e10368350fb3292539f7e4b9cafce19341f19ac5e3557aa7ae38aa12954fb41b2c5c6c8a59698bdbea1b8e10bca446351d7be53ad83c75977cd29a76b961b2c0b6bc10a3fa0f34b3f9e3fcfb27d318918d6d1ec65d26e9fee879a78898576a8f0ab30336740c9a49f3f1cfed9f11cf54ec15d5ecf4dd6e5a9b9e5fecb48931e2b2d1a2a659ea430a52b5655c84e8d0ebe436793331986916e0a101f7908faf4829887d781e30b561b0af5bbc6bb0c3c2f02f972d961060d062225c5daec3494be957f2203378781c786021a1d6022e768a61ae3084bdfbf39aa2bd7371dc864a7cb0bf332c19f16734583591366567732d8d3ce09ff9811ce4a2b3dd8c23ece04e3323257aadb7ee5ef8360f1f5315455402b1b25a6b96a8fa92cdf05041f389f84fdc7ba19c321e62d0717ff343ae799852ab3a168ca31427036a5060bf20c3e57729aa337e0673da71966844cf996c64fd87cc86c54d0b046517722fe3fb1aa039c945a2cb9b9b404c035ca65f6caa3483e5fe1dbdfaea1d4863da3058f8fab31809b261fd67d11ec056c17a5baecf916634433dcf133ddc2dcdfcf4a680e088928985138c01d1d09eef3b437cc6290614f14079814c72bb75c45eff255968bb29b7421a1feffa00086b2e941b49630d20bb5a537cfd2545b0d574a28db8ffa55e115df7f188d627cd291fdecfbeea1109e1155e0aabc2157f7fe2a1284611e190365d2fd972d2a23dc793a5f28d4aac4100f5fbb2eed57532220d5d8d774bfa7084b44400249c19dab50e6c3c3af15966a960af1e2cec1f697a694a35c31a5a6f8ae7b73e148f09347004a3f54e7a82db390a0aa4fc526e95d79af9b9cfe97bfdb78c0bcbd927dadb96faefc64e42c32f3e4670dfb3b4dd47c7f6ee71e445e9aba905b431c8f3092088759217a0d684c327aa8437099ff5dfda219b06a6cc2de9cde943189a7d3eb3c2e95d71fcc2624793aaa733645042fe7c9f71d09dc8b348a4ab3ae89422c5f5e4ea846da882c62cf0cb7c6d3a924f042dc515782fe81438bbcffe1a6c8059774cedb9533aa43ad3dd81564d12b274916c26f855d396cb4a71cc1f367a1243a899676edb29833adca860d74b835d4e16c6599d023f4132ee652420c543551f1a28ec175e0bbc40b7efee71f0e2ef4614bac17605b993f5a5146c752f6ec5664c99e0456447bbe6f6128eb8c5d7e4f70bc7f305c8d8fb8dfefe19bf0d42ffa3a05ae86b76741e8807cec61e42c8cadb7c6c62eec423e4667c909050c7764041c5fa690c1cf730be7d633904e04c2d6dd7169573a000eb197e5a74ccf65f53db1dd6e6a9b067bef4c77e3c1f36c87918bc551f46b5267c0194da4b96028486da28aee5c6f94bf5c5568e63cfaec43a869cb644caabdb13d9509e694e748c75c966b0fae62ffa91aadb022498c0c5fe11e8a8ba91dcb54eeb21f57258e4bd8d1368ab7a79ed19ff0fa578130d1554105530aaf51ec03b89b1999deb37bbbe5952aeecf904b910ba8e566ea38f04e52dcaf54b68d40ed450e727e6288d61f5571199f40b190c8540815e444aa1280fa2ddb6f8aa54112640e64d7cdeac800902aaba6f05296fde2d933d979ce5e71a2c27e6311e116f97b6297ab062279e5fe8b890ac9bb85b81de2e64e70ecfdabb06141393589e82bf4d3b402f5771056075b5bd3b23484826dedd749114c16b68ed3ccf8dce4de2e352963e58233b5db1361c8099204bbe13ac0add54436d218a2dfc6a8f03b218ca82c4b5a959c92fd8a6679b55374535fec2511f7f1f1595b564fd85258d6d8ccb3a3156c16fccc43d43216dfdccc7484ebe1abb900c6d20611eaa9fdfcfd2c77c0586820ed998e36598d468d155445d79fbf222259fd65a23a77e2b1c4f845143611ed8002bcfe5c813fb1c9e653efe071861f3ae5de3cb63bbf2a76980e4a2b7d974c933dac4440b50f009a37139927c7fd490a8ab07cca7b8a2a5560896345fdb22c6187b389675bc7db09f0da6c350aee499931bd5067629f895504afbae91d2935f3c617f55bdd2de91cf9f19091a31fc6f0c34bde1458c8f07f6cc9749f48c61050e421afa3a10ad3dd3aa02cc3f858691526a34e59c5cb07d9811ebcefe34f6580c719e0c7112540549c2e69547363da12440dc9be1171756e29f8b862578ddb8c5947af4f9348d98805e56ecb7b07c0ef03d077cca482e3434d9d907f0c481b7b80f245c4913946815e0b64b0770bc3b24d367f0ae7c6f862d6566dce6a48cd552664c9ae72c12e4790e9728cd1388c650985090040055dd2aa6b77d8da54982332e364939ea83ae382c7c1e5f056c30f1f063f371806b99bb324d524c23624ec8cb83efd7db6115c1bed78463c2d10b976014736d892b5c6d7c9b03b8bb41ab81c2b7e7377b35bba45a2c0341d84196af8be4985e671f95900a12fa39e97228fca834d7ef466c205e72fc139fb24892a8c846eadac6b2c5f15f57be661a6e37a7e0ad2a55c98ec46e8dca2dc3ed606011a9ddd359047f6ddfe0dbb8b3eab0680200636701711818532f18ca64e6038f88b4fbfa5fccf01dda331181b9c6c32aa98c0a0678d992ac8acb6a61d948ac916c5e33c8657c9f266eca9ba1de3b310ffce80391326f88f193e7319cb761e5e64b1a17b5f09fe7481c1bcc8197a464887aa8e28fb4bf5577fd06f0c385de2a2e837d0a5b87a362d350ab46a98cbed814a153196a7625a2a034af3a8eab2a03aac40b9e1191239c58aafd7ca213d726351f5b2aba0d5edb2ab9447146bdb1ed1b8b2a5580b39cee588986e0d3c389c98a334598e6d0a77948197b3794342250d1277da321557bf3538adc05e712432c548b86e68966bbf7b8d397ffff84d7c96c475a196c0d4d25ca1d717e3496afd95496b3960a45e8f0dd663f2cd1466ed15d69641ac9318d003cbfcb9c44b70c5adad33029f1e4dadf264fe550c1ff43e324ec0049d168b80d1bf05ef2a009f51b87cfa104d8c9fe2d33ff0f0e39f5f389436dd3091d195ac6f84db013dee5f6b5cbea7ac9176bcf65870230b7b1e0ea3e495d40eaf4d9f1a84226437249f19d9417c221e93650cb128fe7deefc236b47c9748de620110f93b9a28ad9089b336410be53ae7ce1f7dbecf1e8e18d37ddebecdaf0000ca54fdfb60b342e106817d4718a22a47470e53b4b514b2b56e1cc59f4cfe5a39a92c5c622654a7f65902bf10bea7747a29c3e9aee278d1580a9a0578a5c5418f25fdb10a5b9b3142e9bd98387e53ae02fec6ac07c7a98e73317c2ae568725a83d94f884e80e5935940f88518c8353b742e8d1759e5353e996b49826ff5a4098a3ba83ec936c232abf769f24c3cdaa140419db81fcb9a662d2078b862edd8d334b58e60e4edbf93ad65788c4d4ca273f9d06f1ab3db4799c0e9804988a17f5c05ef688b2bf64c3af013baaf96683b37f343879bc0a4cb4dd73f06922bc105e86031cd1a2910e69cf6aa96d8b21fe341ef135dd7d0a8a406e299623ed6bd0b2ce635329a56ae2d4e336293941af459462fd8783b3e675039757129bc14060d7e0a522f882f3e6ea32904376e4b560b99480b5d5294516e69f26ed3865e3c7b704f312a602d32494069e808c3cde558dfba14839a6d073d1d0bdae61a3fb0d388272aa9bedb2a4bba58867e411cf2ef6e189c719f12f96ad7045dd8041303b44a14c72400b3a6d45587781e42b33f3de8c60badcd3098760c8e503fc082c57c2aba9f2fb2311861c679354f552b0aa2c454daaea14064cd420c6a73dc0946c99e6b0b335ffdffa261a036a804dee5dc854781eab7ccfefefc00f51ab31137fb39b8a3c57654dce4db9f04bebe5961399010a9e87d20c789befe989ae224f9af7115e15c71e020c778b817d9fe250d589942bb2e6e064edbff67cd8ae5df0c44d9255c7eff2a7bc8ed9df8a050cc3aa7f5402e3306c8058431defc513a89f069d6497d936a8e4e479eb31fa842a989a648bb8b8cd3f08c00eac6ad945cc0467cfd04bd3030a608e2009a053830677ad1e7f74ba2521a32e0aeb179aac91c6efcc1e9a3ec0dec4c16b7b541f6c6606ec96785f6fa0daf9a91e221c92b0be8da67a96aba0d4edb786428874e5a613f05eb4c0a161a731b3393298a149ba1d0395c280a784a7ffe2e48d7a282e99d5db0b619e6118a0ef79e62f96cf463074cec38c23b56fa1dcede334979a81ad7370fc8359c71bf5dcf2b9fb64cd117c8c9638c1c8feeb2a4b7f8b1f28ef664ab75638033afdf20cc0c7b97f4ac432042d04fd47b7a97faa1540e537745265d86735c7ca8928254f63a0efa390dc31321ebf190838dfb48902daf862c5e907bf4cb7b2bf8e733c248d2361507d3c976d297094eb93c8102fdaf2cc8961dcd3672e8200c99004c0f505fb196c5a0dec1c14bf77d70f8b1d0465336a9591545239d53eb9d2d903392994ce1fe06f76b6a9a853c9b6f55163716b42d96c9d790a9b0894e6c1af992d280245799504a07f7badd5926f8d4169dcb3ca21f8cd7285f6912b8e7e5bee265a1707317261b3cefaebecdaea1f84b7ae06714b1f69684bb336adb9f02429ab279abd4f5eced62c8e2a41aa0ff341d5502cdf5ecbb882e238c0bf6f01547245f7550ed9439231209f317c09c651a14c28edbd62e303e9d4eff60bb99832f37a320ea3d908f6ed3295c94400f780cca2a011b3604f92c4a93ea2399e9d05d1d5408e2356954232ead8ba41968ac9e9621f5f685ef7ad3ce78f8af127f91637db899d3759d2be27d1d0cc1cd3677420110ca08567c39c79184977da5b92ad4b16760287e9a7b1f56ee6c67dbf76c99b39d19cb1809ba6a2c3d4329c425111350d6d87ba0efc65c34980720b63a00f7f61d51b95b36715df719880e0e41e8c1e48d7f278d0b920baeb08966fc6cb90f71280e5d9070f2f5aa9fd2c4e4ae2642e501d0c6b38c62b02dbe4fb51f0e09228d33ac124857b3d38f36bfc8d7b83e28caca59d394d0bcec2a17e6957eac85e3d2c6b791e339386a4d74aba467feb4e61e4d96d8a18705023c63ca82cbb693c5ca57bd3701b4054c4de022c205f00f0d4812043079fdefb4cd1887f766bad73aec7d398c24568edc08ffb1bc422ac0f0e0ae1e957ec3b15654ac9b7de037b4d5a19d990bbb7f49ac1739d4ed9d0d6f536078625230771e798ba66180b8aba108824f682047bcda3ef10518f087266e8750076c013f666b90ba8c96aa6085405626e92374599d95071f17da4f90e4331f37e1982cec304d3e69c5975568630740d811678251702e9709b8b5653af5718d708d732fd76317c521e7e01c40a36a5b4e5e80b4cff2fb51398e16dbe5a89e44a27189a4715d7fd77b7a0d5979f4edf7d2072b8635948fd836ee9b1e419c1df7362448055aadd9e7cee27ba784a606c90bc1b49122b3409e7a809ea6af3e74f7b41c3adce3c2ba7894c7c780f15549216414a84007fdd2168cbabdffbf1e47d894cfde95bd4a960c85805d70307129a37356933d65c2a8d2e6136593d199eb1c60c5bfba4793f115f9a2b9ffd2883cc1a22df1c3bcb039460f21220d875fe33590843ad5033d501769a5697a4818d6fe88f1408d8d250802604a6fc750dec4a6bc81ec5080a537936e1ef88a11919cdc80570be557cf997a9215cb5bce7513f24d5550c7307a1c1c6f65c3a9bf9102ce30b5b0859cee72211d09b12540d135aabb64e4a3a31a7214f6107753b2758d561293dac8cd20068869acc +MD = 2fb73a29109c142c33494c3cd879b6645631e67b82066ae308aad2f9aeaf3727 + +Len = 58048 +Msg = 8b6886fd538be7b9c48f1b9cdb4837ba7000e956c6bead4a61c844aa176663a46ae9a8aa15ecd1d4e5da307fcab05a3b2e0420e48547c00e26475ca659f7aad7b173ee2b9c3f25f338cf83e8684d20122896efe91d86efbb7075a54ddd01c9c5070e40c70f0c4adf6479fd1fdda6f20905bd3eafb603a318e95b08e6cc0c273615c386c896dca86012dd846b504336e66d82f57c764745ee37006db84d9e2cf28399a8745b35a73dea050116e9ad56720aebfc9988d93b05026cbd0c894140c0f8998e1483a2af4093f85d66d26bb87581033b4e1241ef25f3a8de2aa87ccb691cca20ef39a8282fb6be7ea43005c6b77dcf9ae23d08c716b1bbba5ad1d735b69834474fa3d17ad3fa604e172e04e6ffa459029f30b52d9fe5ad38e42cdbe66c14dfe97ae9a40df408e5b409f1ef82169ea859cb14d0888a37873f0fe20f475637d4efb934a94a5a875597c0a44e01c514c489af10e1409d4e50b9251bfcbe3baa1a4254ac6997cc20b8e1856daacbd2aeb678934d71bda1d3108d6cfe28b4e215b9c893786b5d137b1779a074894805138510bef207665d6dcfa32db41d92141eba6bbec13705f73f794759e276e028ec39377a282ca59bc596e3af6463be997024121cae56f54015e733f8dff6fb01e0dbd70d1767e121836c353c3780a239b1ffa5f6684f97b6a46825c49293015a9871d7c0e64083b84e5a811a55fea4bc8a530b9416aa52219504050624d45af9bb061fdbbe3ff128ce67af92e5652ee9a2292e3ee1f08d488fc3bb07bd416ea6f29f97a6c6ed9439ac9ba7ec103ba789a288f53cf1a8b2f43bae2f0c8363a52be546276927d1d4b390fe5170fd0a7764317948d56d5a28ed40cc4a60a1c1684f3b02b76b08741a5d21999566d5590542f8030f537d8f57fb4826f24a3de41dd99ddc2ff5925ccc0008735c15bfb1bbeb9e2e32fc4bcda7e6f8c2101180522e92b2da774fec135464ed948cc6e4990026cc029a19fc9f8075faaa8dfe91950142230777c14021185176050fc16b993cbd2a882df1bb8a4a72f6e64f59983500b197681893b30c828f4ecdcb4e7d39d8765fc7d4ceae186da3937c406abfb891a6b707400c6f5ef8e51bf4aab542023a1a14c778f6fdd051d07a7647782ca81eea2bebd8759c9ee41d8683933de17bcb71f091ffb2d13a5ec353db4bcd078c0e469a1cc9166155adfd36816d2f832df3429c2c534a52dffd43c5b436af79edc97faca3f937e70abb4ed4f622d34f9e1b57bfa05a06a74694177808ef67aa52b7600a875220564576d707eb99716e58a97602f6fe2ef9f88d0815df5e3cc14340b05cd0bb19d58f46627866ba5107e307680d3525096f7b4ede44426b78e648cc3649861b698c6e93b5ce726dbb43c59bf48765b9e032594161ac37fe6143eac3bb7ab25c59a46cc59ab2149af64a88cfe4198fa1fb6919cc58f6c9ff41fdb08d07975c6531451144d6cc56294b43b30aff6abac5a23d44598dc9fd565e3f2392e2478a1e3996e47834c33f020256cfb30c23ee0d1dd6614fc6ceddeb012fc93a1432466fb8c06dca7b40d70e63ad6334d4eb3361b35bf816ccad70a671f52dee64019740f8ea34a072ea2733b56df7f41f6b92a9aef49216670dbe70f8bad4149c5c86793f3dc263e36a365a42c1145bb44a12cd54cbb6b65e96d02fdca6481682ea1902d6e19e7c94670d6c50cf41d15d31bcb5ee05ec617bf1adcd66e0105adf545ac305fd50514d8ab24f28bf06bee0c8964ac3cdbc7c84c65d30de91b44a7a4151a513ba614cd87b2fed12baeb8a06b6ab721d49af7042bce9428ce0bc4c1d5a058e4a3f58d4fce18c2c55e8799d97a4001642a14ca57d7c58e9b7f6b1ca8e477e67f0b5bd508064cff63b7037605b399f1f7bfe1b83fdaeb20fa9fa1b2b96afc4194e43192a2dad02320a7aad391a1e8f731088a57389f9009ba81580d7fd3be08bac12f2c9cb642cc80b3064919bfad8fc496671dbeb054975fd6f6a368b92d9a45249d3952231569f86b8e3d1a77683a06ec10824e97b9585f02f60b0085cb74e871141f6f9ba87a1c33ab25f063a9649c6c0f0b74c03ecb3c87eebad3b4382709492c65419aac7b509df5aa580ed1cde9a8cb3fadb4457e7cf839295eded43f1c1f3e9174ba71ec3a2ce6209dc371a47324cd85760e7dd094b67ddd0e60202bb565d33a7555995b4d43052f5e4c29a6cd629e835a1938701855154c6ee2bc5b59bf72a6dff6a336ee82db3d05e33a335ce4b6afc68f15cb7c56a80dfcd1096c7d8ea58cf137f01da26ec0c0213353e8a61d9e6137ba9641353d9e8844a587cd9545d4536574305e0d596e5f3cb6e7253d9fbe5e4a262a7fe76c7141b2fab80d35879770b955b49693e52c60b4e8647787cdbeed6a7c42e5e775c8d0e42b3a89d2c6578b49372d55baa4938b26326c5e1939e89515179001d9ebfdac34c15fe20184ad09b1a2eafa05fa3c250d4f6f576656f3ebd67262521331983a4147c8a4264500526f137e11ea687ed4d679dde203c749683b276a6547e911117648e53ec579ea1bfe23673bfc61d4011e5c488c55ed51809fa0e8a9cc7500b8602f361073a5d2ccdb3d36b69098e43041512fc4e14bb4db80699d9e3557ef958b754bc7955b42cb82db5d306b5027e8ec13041a4a64ebbf8a0bd9b10714263f54b596d2cf0cc2be71885b27d13a07a18afc55fad5cb5ec328e22d90b63c4d2c586a97b0653cdb0c43cea11b66b91be08a87a5f537e1968cc99719bbc732dce3030edeef1c6de44b6608df79905fdd2c874f7487d53a1b5308952e70be9a5dd9e10ccced490276e254e156c0e280b3fbedbe3221324765dc4266cc7e00c538977efef2496fad1b679cc2b79fd1de38c54a5e6f6fc39bfe8f2386842232560592395fdf7214c04a41ba377244e2dae41f199a9cb22daa5dc2186ed60bc7cf3d50aca9f505ccee7c1719ba077e99d94e7fc81d4a96c4f50c3b8d9a42a9359358694567d362fc7a394e47b4f7ab6b8bc05df230f98c2dfe72421f935a790044ef32a003eb182815fa5dd0d2b349ec54f23014700a10cd49288c3ae47e09cc465a532918bc93d42447dc217ddad870b74c9cab752cb32747b7606c082db9de3a22216d20b8749537aa3fc620ced5bd35480a23aab1f1d08c77652f690a27da72ef43c8867f28cfc289ff4b661fd006516cff197b4a3b3d7a1100f19163d225931a20e7e4613ef8477fa11da84e46009e43f1f971461dd2b2fcda5f1bfb27640d2b5f27b51f05a358e3bba981caa6107e35794027361844a99347d46300b5fa63ab452463093b65596ea59b6d158eda63d9fb9a07baa8e7d08cefde01450c7d1912795a88a04e92db69055fd4df4eb301a9ff438d243e50ca4218e871187950afe9723690749dd0517b41635358942eba1e0ae9420376f3f94b79902cfbab199a98b6451506c7825e0de0426341cdc20fbe9507a0e8b165e0118841af7f002c6bb8bc0270d75a4d43a968797f0b7a0164f4240b34349c0b012cab897313272d95c1f9fb5e56a485b4d65075211617617c674e8076879577ef0579e412487e819b3d069c181554c0240d2ec1d402346698806af3d2521c210c2479ddf79f74dd0e9258614893d97113b669ec12504f855bc80fc1f214be9aeb1201c3bd88a874425a75e76a42b13d068a78506670c75238b6b397305feb4a0e56c851be7497fbd90dc59af7a26a787ed1f09b3ae43a31b1c4dcd0278430b2d85b23f48513b1d85524ee086b4363b7df2569392a4b26b8598b120942321d69fb97bb28abc684ae3928559c4fa63b8fba0d38969ef60b5a8261c9af1aea0fd3cab4e46a8d1d9ec1e78082e31f3b604491e1e550137556acdef18a3e0c0c8684d80b3636c3795ec7f2e5fc595483608af95bf5d22259a703c1a2ca32a01a200196332719c96a4334ed91288b8a1ecac752d3e0b936036b13dd0e102971b35abea7a54d801980fa8d3a4a9dd62a4ded9e20d24c61e9131141839bd28efb3895206eda00063e3dd3255b5ad2e5afc16753f5ef9f589609480147c4a7dfa74a7deb6e59f528a1f16bb1e34a6e2694f9c69d44743029d7466df7ac2106a80039635428ad7343df5c32a744a1a615746769ee9f18c542276af1892329655480b5e41f203d20f460ceb67a01f9313ec88aefbc6845b53e00d7713a4f564a71b3208e80e79184c6b0e9659e9da9860efbe4c67b32739679fe2c7b8f83202c9c1209b14dd132f5175a0ccea99a3b2b02a8f56ccf702adf8269da6efd612f921027e1faca8faa1882b6c9601f7a4676b63a4d611db3e3f6e3ee51da085bdcf19a6f49d98b755f657571afb864a0242f963a4d31ea7037731af6233b34e5a0f1874291bc0524db428bf520462dbe8c8c2f23856dba378dea941bdf01079113e8535c6a40cc10a65622cbbb87bf27c832fd708663016c6fb3fbb9e5c9f4e0ce6cab1723d644bb3906d67fd1fbad6e6faa6dcbb0b054a145659e7ac804914708e4eb0d6f0b03a70beb135c14107d14fb590c7f94d42858b78618b9063f41568bf79fa9ac4d8d46b769661af274b29df3d56616c35cf1053e8bd70f20d89971900b35665c2c462c94084b16ed86c27bd195e72baca9433932ed75e7887f1e3aed9648edff05c2bb5a4e3efa75c541312d112c28b15793574d3151dcdd812414dd2f468b1588979552b1be101bce93505eed918881c67601d5ee1749708d6f81f74ccad83023192d15c945025ff15d4bff71a3e58e944fab657a22c7f2024524b465225fcf43dbf52c0b603ba2dbf3a67743ffaa484fa4c6947bf0d2c27e395f9d1ef97c538964800ddeac4694fcfad26edaf1514f36f9e5cb5a2df4725fd0a539b0bcc86d62275023e9659da6b2c7624ebd2574f408d38b729b26a772359f97e2e0f8de6d4cb8e8168248bb48cc0dd88f51087fe733a61a32b57766527dfaaa51261a08d3c78daa4e5fa229fb772297b94d16fc89260624844f9cab83c7764eecd6bcd241611a2943b82e645f62aa4244f7dd556a7e683cdfb002f1967097181e994de53687d2e78f5229f4b50d094acae7c824fb9b40c5ad9d56d30b27d1787ee4399c13ca6c6799844145cce4d423a39363e5cd1b2451965de4ca424bb9f2862e2c8179973b2bfae4f0e1e7687f6f77914d025f6c876302784941ec5ac518bcfd831fc88cc3971bfab55395267f80af57c025130dee6c7a72f0c459e3674d9bc8d9d190f99a5b751bfb1566ad58f9c35d79a8987dcde076e487dc2b6425239b269d31639c23cbaeef5ea1dc4ba04d5c28e617404aaa6170335af3c16b931d438d49d9a0b3047a21db4c7356afc9fdc23071fbbae308620ee606a5cc4815ad2d636c14d8fc90d97676511476485a8dae0ac9c058e57c64ab82f76caca84155a14f708d8cc76d8c0526e90fab83b67f682e49ffbaa05adbce80c9a2d30a8a9947b7f3ae3ca20ee4568380cf7700824599016f2450c23849f065e9f2dfcd760a992361f1592ad984f312b4de594d3262a92ac5b8abc9a931a9a8d4e7338f880c1e1857e172b071e0634af1a6d2a84b692110da372c05022562d016da7ebf35203f1d221909d14c891f92d3d373c021cb994a192a7222f797b4621c4711eb01e984986ce29f1bede18080b7cead137a0c6a3d0efceea1ee0b06e571d77d8162ca8720a4e8a2eeba7c5eab3a02ef20a8ae2c60284921e049e1d2c0b3e64210fc35af2c5695a5c856cbe268b71ada6632134869f1798c8cbfceb08a3f0de01832cd6531ee6428473752b44fdb60cf52aaee56a0f718bef5a42428a88fb8d8158b0451c7f8fe9ac9d0a35cc7039f6e747791cfbba5a119c99b8493b22271ba87795cfd64f2af8dfeb7304474cc01185a3ca02bf0999d2d670a529a2d93c2d7fc8239b08f580162245f7bf3df81405d624e9bf4062f878a5c753094816016e0c33a4d23adb59ec7f93e08e34defd7be2b31d7a062e3da811860812b33f3f8359a15e9bf5687d21fdbd749ab665421bb239b05b97d6310c23950d6c6dbebe176ef89a1fbf04b35ea4abfc0b4af5ad8c4d9ce88b7dc09c4ce2dcaa3efef946d05122a0852317c44b7d46bf0979f60477bbc60e3240564610574426b0ec5a9f560c05b8f6a609798f8f7407bbc9d01083059d697766fff6ff88b3cbecc1479052a78b2a9ad24398d3e31e1a49c4ec9959320b4383792276c17f12df17042ae36c289b3d982e2be9be7f2d41dcf2b067a04af7e27e01298cff444aab5c3e6a5e4b991c3b19422a36f96d87c49cda85410156488f8f847b0161dd4177e1f66fca9801f86a4497a9452bb516ebb004d4f0245de892de8c809c8e54e18bceb4a1eefa69161342b40edffd5dc0fe40f8033db067be3394a0a0272fb1112e4c0168941ad85e7d3a21c2cc176f6f44763f7ced4e7db2bad9494368ebfab8a983632c829f56b8f255672ed420f20a067860a5cba5a5ac6ed40dd1296b39c0449a64558132ec0cb8bb0db9bfc1ef798c6ee3e89e5ee99499ae77b23056751047b98c4b597ba04218939bca54a16da41e8151ac2d205152818e0c4e4555b790fa0a6276d2217c425a059acb5c69747304d830584194e4cf6e9d560e32100628a5b26e3fb4cd88f4c63b9123a0c00dce859d0b56a261aaf1aa03dc58be2e6ac08fdc380cc626cb41a45a083ae54f3e9debf5670d1830aba17ce72695b058eb4001ae4946d1d54d0f3b8d8778f6bd11c87c0acee56ba9f0c82b71bd2ed1359290435028569d811648d4fa97459ab38e378104c7466273804c00cb2889e96e66999deb5da2f2d32fd2b7c9bf0998d9bcd2410bdb98c7376317431aef10c0aa6f4157a7719498739f972c23882cb9d6a38206459043609ca20f3c899b2a1d92b671b8abeb9356086e7d7b307916c5534b2d16dd71aff64b441e323db33ec9cd421209205306f63aa46eeb171a2f84f7bdbcbaf9034550eb512b6f61bfb68d041c0a932d32573eb34a51c501f3e0bd6b00183ac2d06b3825d21d391b47f92fdf4a439bfb0eedf718680d52158d8f3a561c27de5f5f8a74a1ceded993d46f7705d6a36cb27230e914048cd77c6fa6c1611ad3eef8380bcd064d5597f3ed802f1fc7144d79e388db4d28b59f5d218b1b340103b1b7e4540bfd576aba601b941dd4267d8578eb5d966bdb70f1e12ca81076d99f70c2eacff62df5058c04e5130bcdfac55dd81117e31726a5142f176367cfaa8e7341d2e3553f2e0e5307d365bfb24bd61dc1dd1e88f90f3c51716a26eae97dba025d25f7f2da0b6d58916df2012a22970d5ad8db4db8a11ef0ccae585f69590a653d697593a7920be3c83c239bdd86f074cc89b4fcfce131396a6a608ffa4766e30b29c4014dcdce3bd7c75e53747fc99c3e79125b6fd95e737326a842424eb6c6ecea4c0475c49faae4960cf397150acbd92e5e34b7908ee80f6a973fe976e2540a367563c77e677618329641ed519c4ac532fe4d7c0ea7de64bf955098c7d3d68d94a7e8ea030ce89a2262061f3a6561290d5c6e675c929e9dac0a3bf74a6f939d8d4a59875b784893eeda09d4d84e572d45de611f813870e0ba5ec9ad069fd560a8c67f458f91de2a1f6514b5343f76fb64eeed4d85809b556ffac263034ce2016d8322cda541f1883c6aed6a552104b8f2f3d999715169265644eec04a5c04a664ea0ac6a86ecbd4cd535d9a44da4a8f7555eeaa4c952078f4a5156de2b980781661fed99d02b2375b872ced075490a6777bf4291e330976d386fe11d349a19e0a51c8ae8ee4efd96d6e220da8751e257fcfb3bdef136c457a4d725526f6ae40c8232eec82fccae18b70079f2e273b3516b8f20fc81d9110716439e1e2a6ee88d93df93c82328a773df5a24ea25130fec29e7bc7b039bffd41311b5c0f43aa9cc409f145956e79c50c65bcbf0bdb46a70ee9148cb04f4034711ee06eb6b42ba411edddb0c398ddf07f281d9d71acc2587f028606cf475ade89914fc0dee1b6c9495386241498ff231fa68d8eddaeef3b9f4f98de1509562311f431fa8fb29632f3a2b54a915627847248d43a55c81475f53914bc8a7d7c2a92ae4ec4d10f1109974230ca41bb9d3b0274b94be4e278310929c047378c131c94276ec4ade07173bd9bbf4b2dada871579306668fe5649564856628231c65209dc759a52a0dfc9aee152c755b15914ef70e813560b720c98db6cc075616b85f37f6d60d517efba6b1183ef1d5dca1f96c4bf3605e41f4f60c25bb8ad9635501e91cafa5291cb5bf8f0cbc67a3e81d9b3eb4238f916b28446a39fa5cb3e9842d3ba1aa14bacd740b0f596f7ecb23505bf3b0db69021e03da2e595323ec928c0bb6ed90020c7a7eb5b9671fdf5774816215a6e196b840cee1e0ef8c888d45b7c4e1682819280c1de3159e93324ec2f7d72c00febfbbbad28009626e329dea4b80457b3cfe156996beac67951eb9f7fbe3be25fa8c147554e0301ac1ca24689166688c925cdb7b346d0528eb4b9ffad5ae557d9da4ca589f28dd7f4df72ba9d19fd405f4d983283e18a84a5e6208b3cd5f7870afb0e54afa8198f9d962b8945352114c281d135afbe91e36b60bfd0a2b1fb066f7576e35ac13eaf02fb2d6115ea8a5cbf6d196f8b406ee53bbed84e7361583c73e426c00fe055acc15908a083bc91ae8289d11eab297a00835b1a832376a7bfb4c18e793388071f554a4de6133dcf80d84288e183ac5bdbfebfe6ed37645206ae982e8d6a2abb5d3b495d9048c0ac5a1d41b146a97b7ccdfa67de0b23bcff97ddd2875b183afb0cefc0c83da8e7a0b0cde1dacc80f9755d02ed605b8ce2f8e9aefb1990c25b3ea4ff6b0e5c9835551b56bd75d1aec8ae0f94bb0e5cb768e672be9c659cfcee0eabc682a06bab1c2200642f12f4874baf6c4c5b389d47d140d96910ebfe2c75e387f1b21ef9661eaff662d122a3af04f1e986388f8bc29e80745b032d22d58545cfed73ea643dcf4763df2e257d8a771e1ddeed73a69c333dd9e0dd99a98c8eadea3632935ab67090df45a0bbd0be346c6fc2f4758c5921c180b72ac200c614a47d58989a3b44d514df12d3264b9eaf9555beb8159b7e0cc3ff2a5526b6f69991ffb0f06f948d4f3bd9d330255cb06b01663ed2d4526f36bdabd6f7483ab2902ec7fbe493e4e4618e6603320972a7c93927cfcf225fc152071d398ba71a6e9ab38c85efa7aaee9e74ea3f73732bc97cc500fdf7800208b138d9ce8cb3c4af1bc8a3eb7c1b65006897fcc45ed2f6b9e80d8825f68de7aa06db5802750ec7d885e6b499044f91ce4250145e6ea951ed8dab33f446ac7f29b5672e71cf08a29f7b86251b32e4bfacde45a74a2d76cbd8eff68ac5625c470c3f54b3990541d3587f4f7bee625b4d207ee14c3405cbd2f091a7f335c42dcdc6273c8de4b24ad897d37b2f8f2d13d8cdb6ab6998a208f5e8e51813b2068181ebef7713f1507430d24ac1c679fdced109180c95d46ccea3168ccf52b68407e1e1faacfc2b6a5e5a9c378bc74b4ebcd46715ad4793d07d690ddb4636dfd7219c5cfb469d0f5a79e45a1c61a85fba9e316c31d5f54377a5c6337315368a7a5eef9153cc7d29bb573c907bcbf043abb3969cef4f356fccd8392bc6a4e842d8107a3386a722e70766e1d3d8232573accd725db0517e753a75406b588db2959b06bac8167f14e3c9396298b41fbe8c382c3343278536f05b0d5a569b283bff1d722fa385bcc98c7b3f3d63921a31d9d85077c1b762f56db9110582211cdaebea13577a56e8c76d97f8e0a8e49b1608f7eabe7de2734049af20d0826cd415f88b3ab090fc6b84f399f6eaed3e2ad186215b55cc2b2e9e20d7ad39bbf0d673817b88c9ac08ed88ab0ba9bab511320acdef12fc2103fd656fbd26afb32f9c8a23256e011feec759106781ee74d059186cbbb200311f884c92ba2da0ecabbeb06a335b056120816cb0383fe4c12df880df11a91060a037aa466912bbece7858ca30fe0351440b43a06e8043c1e7ca8da918b789b34688404d744766f1855b9858a259e2eadb1d8478111af62d13ee29c2073910f20cb05f2e1d6d939138893216c0ed5409216562bbb2f71e7adf72e3c087492eaba3a25ead29abb885302dae6e546361965c0c64d11abfc38f937f440c608fecc65487c5345fa8dfb5b26d95c724621179d5391323111bed54773cd30c5ab2512b67871d2a880d0f0909716e88fa936d9ad415f5175fb3a5b1d2d218293c +MD = 1bb4220ca1e3fc8f60e0fd0512e707edca56159a04a38663ea06459fe06755cf + +Len = 58840 +Msg = 9750181782bb90c77130ab49b54ddd51fc95f38b191df8e7088755352c343df1dcb648601e845edcb2f2d76b5360e09739b1217ae2ff9d19128cd9f319fc40d954c2c6fff6d9cc5408b4430faf77158aae67c0542b9f4482b6064045877d58c2075dd91d9320a0d77c5e385b52fc42d362a01a407d67b7cafbdbd354001f4c54fe6dcbe27bc3a30f15d8fc77c355301a5d4275675fbebd9aeaf4da480b4ae63840dbe27538289da1db0ad78c8aeca706a8361af1590c1d9a89399d493166ec16d59067ff52b95638d6dd13c230276f3f4a655105f3baa071e292637df8db2795c673a1a74fdc957a0f37f7403c704f6e4bb662cbb62e0ec7fde8760feb125f5e1a6bda96b9fb240f8d02ca2f362e103bb410946c29d12f46e0211c258f715c19d96258f3177dc9a05824d5b6a6c87a4d8c5d3010d50bca9495279ee86e61e56d0c3f65e7f2ca4dd5798760fe15a8554ddb847ede4045a95924e0447f0f4bc402baea479ad14a7755f711b22f0b3569e2a96dc6fff4e5923e93365512fa95bf81eb4a46333c6511c9daac15700ed77eb5ff00509b79554eeaec101bcbb8a99f92a749acdbbb83e1d82b3fcfe9a8f65b6de42563d955fba5073755dcd0d0ed2bdcf7cebfb9d70cb12bf1b129c360fac9b361c449e112415e3a7aefe149cacb2d08e2c2c9f61768476934ec6b26be4c902f7dc548dc378e432dbfc5725f2faa6bbd710b10b904ff6b3bfcd7dd394b5278884010a9f24d491a880dbfd63985f1afa4ab92dd2b2439e749525ac7258e754967b28db44adbdcacf26dc55701570abf65983f7773027f823a3d5d7011101dca73dc25b00d69aec114e5bf3bdc2a5c63a740fb28bb233703b7c6c8212657b3c455c5bee762802721968095cbf4884f6512acac362811cb3367f483228ced9dffb475419f72a7af931f43304f71f84b8c4fe33beae453a1daf3cf77bb6a5a454339f597216466aee05738760f7b03b89f06ed918c177123c0025f8a34e82411588c4ca6b561458cd0e8665052382ffe67ded39464e8f3b7ac3dada5d430d56b05548258a291cdb12b77d5a662d30785ac809c2eb98062c7674bc0b1e467f4ba1339a094321b8586b9af8e61857210b635945046d50746babad6a094acb80a664be5ad41ab28f57142359867043ed4f7ccc1f8c4fea425f86a83563874499ed772fdb14956dfa6db8db4fba2275edab137af9a8f7d7f89e942fce98384423874532cb5937b691f2d63d2c0f935faaa4d3f0741919ac1f9f509e9615f23cc61a7b518bf0762ede8cd8c37ee53783ccd31ac71f2b19c92fe8486f1c7b39b0f9fd85f69da8d52948a25d08c8d9a364acac74694b7d7cd191ffe82bd226732327d6d1ac80b0d95868c9bf779a6b5b84c2976d51997eb737fe4cbc5f57a62315d80cfaedd5c6f71ea7699c8a53f8c466b73a520a79bd6d7ebd5531740d78ee0ba3266e34fd49b2fe8d1860cb9630727ce2fbef0e7c97e41867bfe404642d2866e1a9a81c67b7a16aa24ca8b5c170ea59fe5280d812bccf8785d3507b0c2166ca4c0d44fec5af27055f7cd0d37658906031d4b3f1cc9a846e8035e36266042db82ad7a166678ec8314d3f65af254609324608f4e60a9fb71fef6e3934f233f193068f69edfde51990d3eaf3934ec7b942a355c01f7d5abc2e4bd2ae7d413f36ed779aeaffd9207f868c26074a536c2513d251a218655a281bfe09df95c3847249f690c11689ef8e84ee76fd1ee391e1183b73176b82fc6f6bae8a293909b2382afbf768bc9090ab3e7344519b7fe751e277309c8326d0169fa5ca37b184370cf300356e7c8dc27a05a314a13a78bb1be4fe10adf9f173a21aac4077a9b38145449be13eb0c1e36f6d066e68967eab83a248a9d83a5335967f0a93658c283f959237715603ed71ffe705c82419f2374dacdf5287beccb4583f49198dd342b0525e5b6c40d0510ca00639a8405f63ccbe572aa15901de6e8bddf0795d199382202b80388bc0ad01f43d0a8569b143fa7a53d32ca8ae08d295cd99095fb9bb33736c4e7c933f51f0611e00f5ecba233ef605414b131dcc7f0aa09b60024e0a32c0a30e9ef3b6d0567b0ba56065f48218b5fdfd8304cba9c25ed98003e141010e9c62592629c1a8b2a698805b51dad1062ea0707b1a52114b16eaef6b793d40255b2ca688a1ea5b837846fa5d2cf7a085e48f3289b02ba387a757121d369d4825a1648f5d089b695764999bdc73b561266c3cdc3562c2d0f694a0c08fb5db797df39c6c19aa4f428cf002ed5fb2aea3463a1ba604aeb21a16634a5349539254acd646d525138087b2bf05575d663de783b2be488df063ff75a7c652b0bc3c8a20adf65325e0d999670623726c0b0d9e6d7a973c27d472e182b6b7377c3c445a77ff2d5e927eb507f889efc6f21d783851f638f978c74960cc347f89f2703476114e5e5fd169ad54059eccbd961a1855dfba05e8e745621dc08581b2c9d4a74d9b2ffbff892e1cfe1cd94ccebe8d6877654aa0b2f9db5758fe4e805a58f5f74163f898862028ae768cbdd292d1f3e30d910c7bc026f593a2d3e3ddd92640bf020a4cb6bc1d05bc4df3a1107276ca0298d19409a90530919bffda0cc7c84169000ca0d8e9f631d0f4d0476916238c6199a555dcc60af8fb94c0b59faea5748fbbd9897198323976fbb1054ec65ec76a909ae657afaecb1c4dc4fb08e644569da5ff5b035f678938d3046f543b8ee7981e10ba2cee77338df78b1edb072b640d4efcba20a7fcad710b48ea0bce4a897482a535aeeaeabebb42619578a9d1296927301b3bfa6812da14fd09c7f708097a7ec70d602d7fb94ebf06f37416cc133bbf67f2c7cf3055be80af432b5e4e0434530495e33ebcdf92cde9bd500682bdff87d2d556befbf298cece2aa86c92f61cbfdc639a87188e41ef78679ed17b862f112f375b121156136fe834c19a5d5bae05ccfb18bf1931b6943166b3003d1834dbcb9d5791170c98d47bd5f97033a162d544c0c01f35866b6ca34f2f2b4dc0bb58467bee948392b3acf792d2768c63d59ed259334003e8fad95c9585bb143c3d070e576294dd64de49ea0fcf25ee1f60d2f438e4c9fad5cf5abbbe392826c70478b1b4562a8b1f734bd1815206cf30af1238c4570590d973714f4dcc0afc1ddc1daf175bce230f3d133cbc0d81b6442acd0e9ffc9b5c7061ad95a8b0cc0a8d1e767504d5e82bd0865089f4542f19c64e73f42067f3b41724701d7379f3e8b1361391e147110bffd95447eeb87780338497680a0b973e4a265945229a0b1d16cd65845131c159e9b0bf04ffbcf3801887b7f89169fe618601d9bb2aa389fe2a4eecdab928818c1aa6f14fabd41b8ff1a246247b05b1b4672171ce1008f922683529f3ad8dca192f268b66679068063b7ed25a1b5129ad4a1fa22c673cc1105d1aad6d82f4138783a9fe07d77451897277ed27e6fefec2cb56eb2494d18a5e7559d7b6fdddf66db4cbc9926fe270901327e70c8241798b4761dd652d49ad434d8d494e62bddb223ee66ea4958d4d90ba09608661db526d6acac95c9527b295422f72c256164a5b9e945d9cfcb73131c386da140a2ef1ff91ec6f8960de229affbad4814c79bc5030402719ea02d3c9bc3ac433efaed0a84951105a24ef85ead2b9ef29ba5ab9d6a0945b79f1f29def20afaf6486fd86fe1d935c6d35ce44fb7797331a242bbb257beb5b5ba8f908088d200c34647d8d677b2db431281cf8433aed40e11e7f48e30edfb72d83a89abc5e665b120cb14c8aee8ab834803e1868b92688fd0dc7eb85e5cbff6df663de6110dd2c9be43b5ccee424c8e5b2b41dc25edd8bfc76980b84ad4a84ab95cd3b9d40eef1208f7e26b9f89676c3541180e6b87cba3dfd622175b1c5e754c6474ac76b26394e72ec42c2985a326bc8d8da5c328ea45fe6a8e5cf8fe8a7f82c548485fc1d75741328397f5fea9c2da56c9289797ddac0d6ee90f8b40d47141c97614f803f2640049463469bc204b76e6f41f4e9d4be0f52a5eb87babe35273b62799a73f5dc20abc358cee86b1c6778335125002ddea9ce612e03007602affd5825dd53fbf7949d37a26ed26043dc776b48a058e3ad1ecea300e121cf201cd6eb0eaebc9c192a3d53a8acc62c0b74d079a0fd5080a9dcc7ddecb89b142e0c5c9d8c84fa60b14020ca041f5038d3df17d0f27283af75623e9449efd90f7cecf2d237d6b9e44074dbed1d2ced115d69b223a5c66eaa705db748c0fd67fbad4d3e4b993a67814736c34f8c5c193fd8a333c4435f7e1c2b2db67dba67c4733f9b934c19267fe256146b63ba33413f061a114543a43e7f1630b0a5cec57b009456966630018f61cd8c58bc2f391179464cdf293f4b3c4dc2253a43468cf81e5c0cbc1c9672029a4e1d0fdb63d3f68919aa01d29eaad3f2af69b7f8ea34d846e73c88f184ee75f63834f523f0aa6ce900c00df3da49a2183e8cbe19023377f4d6546167b3ed55f01c62bd384e02e1039c0d67ef7abe33291fecb136272f73b299e2ea018be52f327b24ac8ae4a3ff833c00b438086ee3af942835d2d18f380ab2769731756c6e17d509579e4cd414c2714857600bd250166bcdc06199b95157b07ded7a18e99f2aaa7f42d4ff39cd5bcc22e5f9ed9ef4e7e73bc584d8544c440467416deef33ee57bf502e1743b85b9bd4ed468361b3ebe96f0d99f25d6753a2ed1577f500fc9d2ba18fc26345fea66b51a972d7dddb9e50b8b5122fac688b4b03a8410e495dc7cf549b325b82d47dd5424c2cc1d6ce305b579e0b2df9ae34e09014bd5353bc33eae05ac62981a3a981aebdbc69d3f469b153aecb13cca1160c9d4333eaa582aa254eb6c5f2cad4f3169de46af85cb510fbb4cf9c0aada9f875301ceafbc818f428a59679e1e6cd203d18a97e96f979efe082e8c43a252ea4c354872caf42e4d99aede1281b5cf8fb9d25f43f6a33a8cc09c6e08ccabb98e09f0e6c3f2d9d5021232f811bcbb4bc4bdfcfadf69d91aa701d88a13ce3f84f75b168b36c9e60c3936c725d9a177780d7aa1bbceb569ce7a3c5ce121cac63bb2ba06945fb2a14a5f81dbe5dec272cae68a7130966bedac82ca9a21b744e8445c914190834f8405d18de1b695b245badc67dbe7daffdd5b3d5700ba48bf0e35319b781e55f316c55bb5592692d368de5b9d524fe0d3a151164c31295aabb094fe12ea8c4c3fc21f4a92d2a45ab8448be09574e75ca9e204ba249bdd619d77d9fea24978ea982e5a2a90cece51d3717a07daa43cb2c5080c757ab1650206bc7adfc3f542959eb43c7859bde32cb767ff3df770be67c78bdef4b9025e9079f70dfdf27e97f1b5ec0cb03810a12fc6a0a1ff565afb001405d2a45a1f18a159cff9f5a855d773703e617ec66786efa3b3f8c881d361005ceeadf0f86821c938afc543601b9f8f4033c1107f42f2f0b10a6a25f46a8edce4aec786fe6e085c991ef653b4204ec9c864a221ed1373b7811c8ca44890e31a5dde95c2e6914afffd7613c31f1463a75b399b2f7a5987c89682c6afd8e6fc3d2af6bf314b825807d87da40e0b588cac8b3b02a5c195ad9853a5bec53fcd38b9de7f9a5e87b1be28ac7e0d91037d184dcae17f013d48639b6b2dbb60e7c42714ead1cda7459febc70bffd6f881f2950fbcb576ee47f248662f53632f6b5c55d2c2b5afa7efbd7f57599b86a111498166b32f70b99c23aa7d22ef3c6d250633780863e6dcf09ad77e27a993373be27be750c7f2ef844d2844e839bdc6cf425e792e94d9b2f2a8929ff8c293076c6dd3061817841cbaef3051d1cb5db8a4a1155aa7a11ed650672f313f7efcae1d4c35477b869abd8a7a6128922c92bf5f9326a106111c93b4670bd68e374697e8fdf12ffdadad4e8d8f293d8bd603475aa8d0c0bc7d59877928b6f44773e7613a03b53400e5324c2e9df705314015dd2052c24e5d4e6c3e291ccf2f0dbd75769aedffd837d5d033081759142503410d3b1169be4afcbb044ec3a2cb438c7764862d1fa104e7fd9f848bddeed9881b54157535751810cc9654bde06d7b6943a78641b302faa420ee3e8be409b1571b2e49eec42747132750c54be68a37cc80ac05bc58928b92d0ab906809d96ef8b70842fe84394a8c41b03b2e43b5eb3ea50e9f0d5ec42a2c835424d0cdf244d5757e9b14f41fa4d4a25100b586551828373bcca5540c68e9bf8456269ec8e575ed0dacd2926ef894cfafc0820d0c4121adbfe924c6ffca42fb98cf09fae1c372741212b7fd9b98453028e504662fe8a37f07aefc3602c0d0be1dd9db70b15123b1384725842a065e6a5908cd20549136319f78ac1fb9ef0b7d90111b8edc31320afcc4bbd49ee558e4bc863caa0ebd524c13c0a4e289a76bc08c0f5aa3b6c5f607bc15db5d6e97bd25c007e381b2df7054d121872cf67c7a1d5e1f196dd592183e12a5148d1db003a40fe84235e57a28b26415c36d84e0aeeaa2eac83bad27f0f48d0ce7e220a0b4e5f8b1e9450b1fd40b4917da12b97682cee6dcf79bc1ea18e187c7d60b1bfc597226ef492db8331ab5fca24bcb18a08e208670180ca87b087b8f405f56641559cef71ad25e614655490b3f88e506e139862e4eba1cc53d483920010462adae4e52f5af1555aadc2c4ad15a21ff18db0d663ac35e3abcb34090d6a4359e3d09afb4bf26a2b1d96708220b8c9777d2d08257386864f4d37f9a191f948387b6c9e65a901beae181796164f64169fda97420cfa3b86eb9bdf4ad38674c7ebd8f619abb34f95e733785c09a4e1309ef21387146094dec17d0a502855a46778e4b63256d0a398dc5700ebe285f6c17cabe8ffc30e5636d9dc0233276451d1e985f312ed67c66e976af86b295c6d6e41ef60d1a46a4c35399e0d1a591c42ad46a5f7e0f8e281c02055a80467900ce1f6a5c1263cdd3d84ebad742d44e541a2952b08c500a89a367d0158dc22899cc2a3b5542515d0f0cbf7ef7f9672281458e0ff6fe98c21d977b855501ee5afe4b84e0661f7b6a92eb1634e757a6b4b84782e09747324b5082cd938d7f0356aae6c018230c3a7d2bfde39b1a004b5b859aa88315e8c50ccedfce694377a9c22c086c31008b271b16bfb81ff4659dad55b95f55f775b99ce5290e950b6e5a13fe3ad9d9833ec9bb0fab04122b0a4620c52e27d7b05098623fd8fe9549d59cd29df899503f798ad3533a48301260bd3c40538286d51bda033b6a2ef8834fda6487cc3b6379dde2faadf804e84efb6b7643d40ff1da3a06d67477102d4c2fab6058203051d6ce7aa76c6ebab9355ce9556c2a2097343da772577a32a20917885c6b8f08c9daedba601b08ea0169e7bf6015c054e58789246d60de16f54e79e99f4e73352a0a9e2a9b3651038f513e461cdd311d7b28bf060e3d2d2da580d947cf8d7745f0ca7223df4ac1b7818fc325e22ee6fab6bc41d4fb28e1f72144b83b638505abccbeec6e92c4f546a68a18c756876c7d2696b419bad086f4070e893cd1e1a8d70c3c6f436c3146515cb491b2f0734c05596c883ca3b0a6b4a552eeb4b11fcb683de79d4aa21c4f6812a3e071367ed033bd8230c66c35abb9aa963b4b878c07dfe024e90cfae27aeb76ec677aaf16c388c19c304f7afc1063856d0159abd2c89e8198c4d2dd30436be7d2a937a0b78065140f192036607f42a42bd377b470983490a7c364af624359e41b2850d1ed8159135f5de1450f42e7a577141e27e1e1229bd6670b081505460a1a572eb93550e54e01711b1d5505c307b365c58ca35df911a9226e7da4e3b0b844d859ad0b799a2299f53635de226529852b0649314918809477e756be691a7d4f0e3a43fc65d84f8d4cbb0507332ea950e648e4184d11772cea0e49ae2ff3d78d7b7914749030135ffa22316cb2bff5ab2a15e3c4d47453d6fb5bcd1092cd3584a27e74f0a3222c868ff4117b2b79acf868e5ded379a1a5272e5837722c1745c905b30c1cf93ee99570b94bcf07ec2dcd25412ba0a739e991f57c3f3f665256cf37cf30461ce6d9014eea36b4c297f69dd1a050c8d79dafbbe3403af4dc1f070b9b2b980888aa796e6cff68d9060d95ef009bf4c8955d55e96a3cc12ee7cdc502b24099d0b6fa59117d6168b82cad9a35349c7e0c7ae97acf0cda584a33ff1f491fb6bc3b4266e6bed2d8acbeb1086204e01a5320c2d29cb14da166d32b23844335e675a49570a0ab1f9dab792dae9be2959e2a8237a92a54af1a736647cb829587686ca93aa8258aa658fb641cf08632b7a05acd33cda20da3ae14501467a894a6b4f7b5ac5dd3b2296302fbe97edf89d8c96a5e31b0a260bde4b03d1b7844e4f644bd66653239d5fb7458cd2dba066c7b61efb1cc1299e27056ed89b78e05eb08900417efa5c65aaee563445432793f121241546d33f6f74d6d02d293096a3b503f8256c62917b4b63ec8fdf768c6963f5305d29fc55833b7afb684188ac03a5fabbebf634cac78a408e05681dd7cf6459ca3a8ce271c1c31977f3ac282c68ca95cff9e5180d30afaac5fea7df0eac3e757b14382d9e1156d9ca3432b71db96afdbeb900b564a101cb18e265653bea3772ca54f686e15b3ae57e959ade88dece5a109111b4d6ffc9cb0f196a566570987840608c954487b8631b7cae4474be3ed34bebdebc6b3350d2320b7e5b9526a9ae63a1c201ce7e187c27533492e9430190f92e31762c25db070a21691cd2f4b13dbe7f62728726a2572c81f56ff05461baa1c2d08a20bdb5921ec1f24024c2fa4dd663329278689e1db16eb9848fd9a479cc0f839f50e4259cf654e3709378ca0535b3fc06a82d53f53f824878d0bb13f4017d145dc280724d1b43025328fe6a8d62d986791f5b0a085d2569f4bbe0f654c874496e807ae5cc14f51892ea3c220ee53b9991e6db0b7d93bfe6a0573195c0a95cec7792bbc64269d1ecd4e21b39b04743fcf604969e7d69b88523ac9637612d9dc323fe2a5dd6a34148c21681f99a0f57795181730b3068780f26c2f8265fdb9f9717ceaef1b149abf2039057a8f5c5e1d64a665999bd17674b50a23da8e13cca2ffe0a31cbfae379b34058868fe8f148dc88ba32914dfeee034a534f060fd687557eb89a34dafa12532174f5f69c1cf453b485e53b07a673fdbbdd148812343ccf3fe2d1727915de9a4dee8b2438cd4d0375d05adf149660024c49767512db5366ea8fbdcdfebc45506dce3263e58dbbb374a279c59b561bdaa59e5c17365532e227c8488f9177af3c281ad1f9cbe3a62d59032a35c56f0e4d6de4adb4a728430b9d9459fe5ccf842727dc4f2f11577637cbfb5576ba689f234c2353958ddfeca9f5fbd964844b2cd9121b964de071939a7293e2d1a1c93823ec6435020fff9783d705ae073474101a90e08d9b5fba651ef7d2b98ea21b4017f2ae3b425512ab62e9bbc13092d096b249321c61b7b9558a02c1c2f5e7e51fc5090a4d9f88a0900ed624fa26c6e92768e6192be60ff6c9a83a66e64d95af3cf5d77f535fd02fad4f44484133f9472c050f9da27390fa2a3e48cb0be0d7020171041535cb54496ceddc307f9d53700b526bc76950614ce115d3f81af4d364d50039d4db2b3d7534af45e39aadfbee2e14a39e69c5ac7554f584f3fcd2b16020691ec52ec7b23c6e5e27697cab1a49fb165e2a881a96fbeda503c697c29a7b4b755aef14e6dc2480c22ccb0bdfd707dc1f4574af96496813eff779d50bb63fbcec965b76d2e3b7d3a3fa1031905bb238f60083c782ed432d9909129df72c33dc96790f3dd1ee7dcfc93940d508cdd176643660b626a915a56ce09bd6cc25df133aac154f2c25fddcfc9264df8d56ed00318f1166caa665e230251b6ad3c8cccaa2d675962bb1bf6303ac8336681e8d3d25b5a0bdb60cbb4cad7f9b40543e816794a035f915ba4bcaa731a5c4e14c3995074d14a531029f4baa97224097ae8654d9b15f5f34672a7bb0c6d2703f097a70a102760585b09a47f114b852e34164f739b3fab2cee1e3dce6151322cc7cd636b979cdc4f83f33a8489f655e821ea2ba7b4b0fd92c50fe5710c66fc2ceced74f185d21ccd3d7f3d678e0324cba6fc8046923a5bc96db0353f881ef398e26052486547b045e9f613a497e2604d4595f3cc9e3c44353aa7b3864ed9a6d54ade71bcb06e254e0c0053a82224a6f1706eecc64337456ade6ee6d1db27847688a059dae1d5ea4a362673fed73a473cd9efd1b02b9beddeab7e25ceb7991af11e6e713f83ef7dcedab10b2501a3ff93c4814916b20a9c05344e16c95eaee8e98e916e37113b6e507c687f974be20eaae2dbc96660e3ee730b67205e5ac96ca45ba1977e144a2a539d9547e2108512c69757c92bc2c843ac9 +MD = 553f3f1d18ac475c1707d6867ccdae3aee8f03805bb85a8302af88045cf224af + +Len = 59632 +Msg = f951af554c202f50322e0701b03b87cdac67df7001f4d7e4cf4ec1841448ac7181a9db3586e776a6b0327e0d34b40688cc18a1adc1491770497c5c471470c28c22f46d22d7ab075b510cb619f9ac4b3458c0bd1c2dddd5c0bc032aae68da507b843b4d6567f24c37bec3966d27abbd99fb671a056a3b7a9aceec1500390ec007508663465d47ac029f5f0551e537c47e5b16a2b0a3e86fc7273e0487ae9578f82edb970ce12f8f839be9ed0c5bdac8ad20d53c64fe6d1b0f7001de89f0f6e216c544d1011d345d835b6835e7b21b31ecf3aad06ba353e539513d8d4f26b96428bec8f96b36dd7fca87e4c52a128268047c9f470bbb22370f71fbf821796768f8c06ff79357b25b20c665851da298d3bd62bb878d6e607857794307461187554c7442b3c1a63c5a4dc0f45d078be4dbde4d067939e3970fda101ba20815a193ed8248153d4b02e4181e983532f4efe831e7890556434e6660df8db1adae3e8aa3918a064e6f8d624a885af5e4063f637cd54b142eb50ee4b18ea01c7e03e5a235490e6c3d3a633aaba5408566e95eb288c2548c07625ef194c45ccbc33d1e436d54de3153d30ed6031e55cd00c4d43f1d54ad572a72c6f5d229caa7c48371d51157023bd563169c1a9a9eb5f9bf277102335d5bdf0cce583366f196c8fe67c0eafd80740e1101f6b8c225269b04e1af01086c826d58ff837f23da8119d5876cc0eb62c24506594ba43ef1062cb88963e07be3b21e7fe0dc7e078b51fd3159415bccb00fc169a503a7b50a3ff506a8f46833c9d538a9faccf8bb0eecbd3a66a882467042cb636e8689d079b73e14c5ca61d926d204fdd3bcb4e76b3ca1173507ff01ac43ab1c3b3b123645584f0a684d93140391caa4f5127b32a828f0f14fc798a66bfaa9bb948c098f76086f111ae5c68d67fad2c6e8381544cf97f4ef3a5116ddb64f0d6901e0388515b1e75161fac1ec5af5638932944ac6e773f33a800c404d942a1e4d0ba065be283a00f1c8f44dd8e46ac6185d90e260f9a336f9a85fe09f0d732590393259e2ba8bff19d43b32f90e414499f192a4b90c0f05553bb4bc7b29126a5914ffdc9ad08c2ff30f3738f8df6223357404597a289fa876c0729e87f1ef35d1236fb68e7425d7a40050267d60b5ab13704dc94a553b6683bf004c6e6cf2ce1feeebae65ad3e3e572fefc62f9723265c6cd5bcd29ccb88a5c1c88ed6a2047c6dfdd98dc784bfad32257adeb78e92da37f104faba043756034d312e689c0b89e0d9a21b5eff906c5d695b37bc4deb10cd86424aa9966718c6eba3f2cb61f03ba209af20cf2999c30183f899e7da171045b3f77647594316152386a4a7f99cdbdb156764c507c3fa46fcbbcce03ffd22c8008b443d55b498197e430aa66df6b0b28631aee6a3f458535b0b974e84848e7ef6667d3392a0e5f98340ed6ec4e50450e277c8da04152651284fc3daaf969b8e1cf0e9d019f146debbe614a706531dddb4a0784a320fad67ecf1182bca1a9321fa924fbdf18d03f0ac9d49fa3c274480811487de36c832be2d585eeadcf7bc5e19b278a2225e6456e0ce520e6d49c161d33abd3d172a007d76ec5dbeee175f6e00ba2d25b54ab039dfdff88da1a0dca9317ce110dd1c5ecd4c15dd500761c378371034f1b13b31c02f3a031ce016dd802441bdfe908593d6393ba5472fbd32a5471e55ac1e182d145a453b6533920b0d33f217b0394fe8bfc4c67e4c6e13f21db74a5aff04c9ed5ce86a6810a1fdb079e6f5b8cde061a5b1761e3007cd4b4c070ffe09916c35b9c15f1051c5333d12ebc5b368fe8ba312d3d5ab831f534e888bd8a12c0b5d46d96b499ebf2bf03b798c5994eeeb44fd764e6bd63f3d0902eed3999b8914e0e394812d7e7aeae0df2f842901143b12571b49c0052b08f550c604da53e955fcf4332c94174aab0b127bfabd60a097fe9947ed5aa110292120574924331375b962fe9305d1f7167abaa4169e1a5ba60eab4362c313b647955beac8fda2d11d1f133ddf081448d234c0f30253980d114c7557cf83c2e50b58e7c7a9f008e9f537f0383725480688410db0e364417e7fc0e0ca5c2015651c71ae361582ce24a408e137c4e5d5f9dfaa8823e45a7c759971d2e6332476fd24eb977f343d5a4ad39acf81adcf24e9807618932abcb3bc076734f179174c77c8cb89e92da8152329f6a05f1b6c9b9e12ada74ae0124d1970aaef34597ffe99b21b6ebd294b67764f233e193642a3df3e581c8e2ce5b2557c43e9f7f9e6f62c8ae32d444fafb90dec298ff725dba576ac7d5ea836bb4938d4390c8281d39bf7f729aec3c85b71aea9117d4011bf0729032757e0271f7c8920943f1c1acf55c4a2f7d985bbd7f9222ee2ef3e217433c1eb5bee7d2796b212075c690eec618c59335496d151acb73122a4cc377e848f060e230bc95daa5499329a74a11e11a87f5149cdeeb16115a22e60fe744f7785bf1186960af2e2c8e74956471ad86711fea4dc6625057e793ff91d6c3dbdd37bb69f8d78890ec677c4f396cac444ec309ed51749be728c4dce2ce3fedaf022dbb15e3e978ed7dfc9f7d864e5e687276b278c025e012212f8186eba9c920feb0c79f6a3dc6078b4274aa1c780c7cca02b6070a48e353d98e2e568ab2eae43b776d610c42f4917cef783f6c883b039e0d9122a05bfa4eaa673fdc1bd9c76b30d818f54a7798fddb3a26b7e6dd6e9f66edb05622dda9452c5132722f9ce328875956e6956a07bf1ed91cae2c062ba2cd29b01bf25c84e9d7c2a2d3365ad2ae9771a39f8d98e557b042b68cac90d6b03957fcee9f46f1af25420d59b0c1fa6ff9c78b9a8362965a57ed70cdc8fc043a23ef13389a2b93f79d45de803f30dedf16b17b622775bf295e5ff80c31a648b325558fa47388d075c84492d12246048e86d60f80da40b4673c00a8a2572df8cda631ce9cabdd2b8c0ec4d6e71a6feff0c28b94612c321a7689860f3aba01b8bc3efa4c9bb39729bcf95cf71c781d15a84268b69d9de845e9cf46982fcabfed314815a61c1b454f8b10639ffbdbdc0a079ef3f2a09fc1eb3365c8c01c19b72abf6a1a57b853760178ec7f1e0fb63b21b12093b4f4a26d6ed5e583436a1785e5a91d8edddaec97e3f8d6161dc287b911178fee9a0466394563e71c6eb454ba9290cad9b50e57396bad65befbbec0b44cbd256b0e7a2bb4034fb2eabe6541c3d6090a9159cd23c90ce923d0544f11db3914997f7ea0936c3d0c0184bf077f101474452c4891c2c54c4e9900a40dcb8c6ab054b287221dd0372b3b50ed056d4dd25513310df6c4bcbe402da667858e565602df9aa4792b7e962fc905d5098ccb944ded1626569a2db7506a680b10bab78f9ea2ae53105cc5de7c42e9e36e5e17dea14b620e4bc386dc11c79c2b69d12e7be636541f82225484a33193b4be71c12601b69b4250c156a0e6ddd934eb7229af7c132266390c990d470d89a5743845eee1a7284ed0242b8a521595b4001e479ec2b19fc3cf8c01fcaa4f32522a4224adb395afa0746c641ce5f768355225f6de5caa32b490113db77f6f24273b0fcbe71a2a77c3a7fa9ebd04fba7155c39b5c29c5571b5354c9ae228f5e5b130f1da3f67ae4744d55f4a0f51aaf8e088ba1300145be342198ea7f1296bfd7cb6a8adfb3ec96490972ae4783e8dd42352378cfb5725edf7d767f3590349b1e61694c5cf01d4763367bdfc8c3e0cbf6a63228238d73c2822d968fbae4917c989db36c00f5387e2a9c1b8f0bfd2b01102161ba12d0716f87fa9f22f556d4e9ad49f1f2b50963c40602f8c7f779f007fa6f583586c893ef54ac3a40ce2e266bc52bcae46275c6a05f31ba8e767e58661a58bea166bb02c8530b0ef22db3ae89480de74cef828b9a9df20aed70558ba5daa33b079af2e585eadec43ffa2e95cb9eb5ef314375d73a280b90ebcb47b04ca11a796e09b565ab83ef03301de702b92feb8b9c4899d5096844f390709af0e3d6831dde9d4caac4850474cc7f261edc63796394e535aa8ec667dbe4479672f3e3a7d25f3dfedb5858e6be1b063310bba3261e2102908151a83af2f038855f032f4e3efad11421ed645d8a259b5501de55b9654b88f380db7787ddbb2cadde9c223f09b642d6a30d103180f327d619cee3fbdf1b5da6cfb39c14474d095818452444dc9c768c8a3fc629478c90fc7f12b3b435986af197617da9d6afb9cc34869d235fb2567efd0cee0e88f8c0105c322fab0ecb971c006e841032e822515be7f5a53902caf425faeea8ea409d59d7b7bdaa13bacd6e3161181004002e31b5f194921294bb3529932fbf166b11211928c777ec6ff23053c2a070f400c4b2692be3b2946e0f8a325f191bb38103ae4a0db4db40f2efab8d1a86f9a9efcb1ea01e48cd659ab03b68e515836a8b5a4a90efec9eb749ad2408f03173ccd52dbb81502caa2d208490f2ad89c1e38f003b1654d788fa7e13e6ebcc09a604bbd1d2354bf812950675d0f93fde9bc598dcc902c7dd61b19908385f367659faa89faae39712cd44566a45a4247ddab9abd63e7dcd66f084a076618cb7e05656a47f8db4bae4a3e4184a351ce3cc4666d2d6e0aef0dafe199d44aa99d6af63bfb759c1d03ed45c1a52ffe9880435a67514c4f9beb7a1531b975a5baf1c4b49ddea158f5eab4cbf900e70a9110f1fc38d7a88cfd4aa23b73097a0bcf5101dcf59449b3f8687b395ee5385bddf8df266570a0baa1952c8f200a4fe14943a8bbfdbcdd319725c71a6db2a266c190615557ace33d4b536f9cb34c65cadb322fee00a8ea66547b1eeba00993bffe800f2599fcee994cfdf1c0c7405a2cd7b51dff98f8efa6a300f919905abacbe7305f0396e1116318fd39b7b676ab8bd144e94d311d6b97153fdc40a916561f1e39c77bf8e9fa0f41e9cdce1b6fc86c5a5a18736396cc9c2d803efd74cd143e05f4eefb1a8807125a4c2490509c4f42c56d31ee9af5a14a5e8a978c6e0f638d310a1c0d863bd6f0c48cb48b106c8eb3c516bc3b61aa88062ab78c8a0f2dc29111d1f53fc685c84f0334143ab5812513bbbf1dd63235cf74048f7472c2d8cffe3af500ee55e68971b8daba1bca5aa1072bfedd4b971806088e7af5d34360da091eebb5a5aeee68fd37d92caac96960e2982e80f80ad1ba283b226737eb867f66301e8a024c0e056612b7d2643d2e035a82f6af8807e36a776cfe6efd459a3e8a0115f460b7b5dd30dc0f41d4902906b36ecf9f6808dd856ac66773bfcc1c85d9245a9b6d7c866ee1e647f1785cdac9a1ce11f714a8109976ca05fbdbe99de3f7fc64d56504e028fde3ea77cc0dc3ea9a33863d1a403d152fda428dfe489ee75b0bbd3903eb6399e9377f3b4c2d64d8010164d7f57bb396fa89b59083438fee76d4dc4cb68a713038636ec275364e207aea566e12b5048d7b5ad7b9f784f197dfea4a66e97ca99a6ffa4183d3b2e0426c40d3560e76b07706c01150e7675441faae704e393c7d27045e9015f41dbbbc59976436555b37c2314c0afbcf75389b5ba3f63912445c747a22c2ff32f130fcc760716563bd1b1d9f711d211c291ef2776d34de012ec7e155c952963cb800923a3e8389c626cae785b1d0475a1d67e5d26cc4938246501c0bc4e7715dec8b0b2684231a0922d79e9890cd0505aca3f3f1251e001235858310a7ca1732f930d620d3d87c992bb1c15c905bb0ab61639b6828b98a3d86c89518e4a2fe3888a2619d900c47e2cc09fe363304f0b7d6275a8bda1fc86084a9e0790deaacfaf5405c015b46f2926e1083a9eb613bc7755f9ff0cbc91137e9a9e3a57609a9e6d9ab2400a80113149c86104c3bf8f836b98cfa1b704e1b0010392d42cf985b88a04337ffd8d31fe5d1db2281a724cc923d3ff7806a073c6582d81bc57d0f585ce399267390257f82a87018eebf8d1f765ad8f6a40b9cfbe4cc173da200f716d01e2d7df05080c8777af581e7e79a673face8961af767efea5677116cedb82d8eaa608cea8c7d6130e3dbec01a1c54a7aadff444990007f02bc68158ab5fae2e522e2f1e6b664004b5d83c5c090962f93c88d9fb477ef2fba587ae88fdc080d7012253b6960ecfc23528d8da916958d37a703f6d0119c886dd51fd8e0d297d3bbf297d7e71e60db556d69c22fb64bf9c2a402e840ff90ffb99cd785223c02fc254ebb45e43178145df8a901c8f211ebc159faf27b84552c1a2a326bd87ad1dd58711003e56c8b3db9aebbbb194c9fd9b0336c83e45261640c07a0fb58019cfda21436906f0222cdd4da225c75483e4a1bcad83b2fec3e5e0bafa3c23572cce3beb28f89e5a4d73b5c157d64715785c3607abe8692b4546095accb4f0550da15eaa69b4eedc7010c9beb1d71a20cfecc2add8fe4c14d3c22366987f02bfe5d0ad29ada6dfbdb38c830c582f26bdb11dad77ddcd430196e096a705a643e0dbe48e2f9dd457473f6e4a72f5e6553346765f2a625d3739b528cae5bc309aff18646b83e1483fc03c3e85b930058eccb57f40910eb70e05592228e86525ee63c3d8abee200a8071d2859ea9b092b8ce27c0b9738ae2b2adaa571677a78e295505c8b638022000a227c9fc0a1e98bd82c3c230977de60979cf4efd5c2a72321d06bdf4293194a99b669507a4211c8430b20c0ec690ccfdb0f18f465d97d9f103ed3fcd88526e62a3b56e273f6228f5201b26bcc86b9b759c37a3574396cb4e4fe3d4a91f10b412033cdec4a288c3f8992799a065b55b5883ca119ad5ce5131480f06f0b41070a304256c46963cf675e5feec2465171490aed16175dde87282379a5c0a10fda9fcec95a115e326c8544ac7a7af8f38cf0465751c52218b372964ab5e5ffb7d680503b6039951ed417d11ab53a8acc1949cf0dec9986b60a60e176b95573d38b4a693b01c3ba73a69d981d17779845969409633f0af810fca1a9801885b9dd895c7e2ab7461afb4494ee4619b89dfa958d8a09d19ff2b3fa8332e96c0d1e402135039ce91752f04e8c5808547408558684c5643cdf033984a422352c323da603729e041fdddf0d14e279f6304063e0fa184004e93ea60c4b730bd5c1bb7479a083b1f2d4003bac4845a87235943d1760c69e6e5f4557968f7e345dd4ff7f3588e6c3ebae04d5585914880eecf5f0734b0e150317799472f134502fce84aa641d2a5840f672588bb7dd7d4ecedc2a8f296d58559a41e92be123d3ee26d1727fddbcf3b555df21c0e51f1c9443bd57c57c42ece86034c21c0fcb23fb666c83f35b2d0a9b3481bda28147da91f41fe4a0c44d273e01d8cbedbd98e4fa15cc4b6915d921652b20a87aece63baa488a6dcb81eabbc8e79442fb7b2b8b4cbd67354b8e6fbcc592226ee4b878b45fc9736f80458a0f0b99fde3dfd8e18b65b5c3de05354f512f121d7d6a548dd914ef6146798fc98598818c0b05576969f7a768a2409b0672f42368506641841e8c32eaaf01b117d3d246b545066711ab54fadc2e68301386c73e9984731009f9083c65f5d36a036e5b42000e5d9878c4203884def684f5211adc27861b407dfd2b5469a7590b0ab9961c02e3655c0d48cbd90930761a39c66174a8e1c9435e9f68136c5ffd249c4a153d2450c8325dadca64bfdf51604feb2da0840407992a544101f47c4a3736944b1dead2f0bbd8779e643f1832e7a603f1d84f7940d27fb048a89888cac3782cba36ccd679491c1ada400d877520daa5309471ce1f5fbd47d17faf01e949cf77e53050f7cc6a771be08081b9a29c6c437c6d815efdc1616f8ddfce74404abb0a5e630da354b0980f53be520b45cac97337bbf4c866881abbd0716d5c4a46b95888776975bc8bfd49a651f518d92c7098e5085276e41437914bbd122671be48f6f5c5eacb6e8cf57f5ad3c15ec742003926eb1106e10646a4521b336f5121e84a18d70820e5043ef4d3cc6d39ba9be6e85fdcb6e507ded65976346793630225e674334812bab2286ec3a45f560daaa30b0245ca9da2fe55154a61254f21ef70309a63311d59f750318ce3fe204afea335b0ceb29d5cf5418c2159e2df083a55dcfddf49bd3d4434e1a203e024fcf885dcedd0055080443a129d5726df90835520011ff85eef4944f3a59c9bd08e38b9850be23973d77b8d4d311167dd555aecce669dd39eea471eebfa1697bf992fccb2ad7dd563ad0be9907ef13c34c1118b2c70e151d9b8ee013f31fa4a4e885e2dea551b5fbc8b65ad80c97efa925e47becec272f9bbc5aeca61cfc05a09e6445b8075434ecafd196792b3235962a78e0619dddb41a1bb09a8f835f11d7e3d62e439807e092b7ca7964ace86af221724efb22582b027e36f4b6707152b27e83a366a2934455a8490b82d7e01824d37dcea1c2bf1cbaae9701032a5a4f973914af096b20e59e49f555b9f343c696083f673bc63a0fac7379c95ffb4190efda3157143cd54dd363775ef24a38fdaf886021b276f38d3f948555b0294e9e232a81a5705dda035ebe762f1622e844d71a8904ec1a0f1ddbdb62ace0fdab0099f1ada00316588fa5229bce0bc47b2376886219d2fab948e80eb8d6d5bf7d3ebbf75c50b6af777a12578e45bb781822f49892674c5e1795cef631dc79b7efe1f00337be726f5e4a0b24f69c0c86e7caba13c2f6438d518cf65b73c5b22d26709fdfe6f11da0368afa537cd9e83511a22ec099cf9dd090b5c60526996a684d73325110f1a08826bf46aac70636cebe33b969c0f9446ffc99a7bbf36188b18a7210225dc7e46f577357f2802ade991503c4d4de7c1eb2bcbf02478224f45005f6a11a777ad09ff02d95f24e4ec7de3f9cb5ca9c6115e0f9af3d6f7aea968de8864d0003124b5f1a766874da79dbe56486f513a2af1043daf2c2fc83bb56af58ab7c9eac983ff6fdd5383ecbb301f5aa47ed77976ef621880ff7b547a01c007fec96ba171393adc0d26d1aca0421583c6904be23a7b1c32a8e46646ba0d0c685d1031def8b2fcc8cf56fce7f7524544074a1afef612871e9f816cf9ac45a4a92e22b8fda09fb9b88c7a622910df032dfee2e14a3a44373edd4cebf7a13a2d4cca877d78093df61ddcf7be0a9d56e3a406112b3e778ea105daad8fcb39590ac5eaa4dbf8b34c368b29554ce6ed386b38c54b55461e6059161039b4eee520d196e70160da0f18ff630a29ab6891121e7ea507fc1bcf57c3e23657f7dd353ff6425833b8a69d42b547e7db65ea197251c83dcd8c19eae375fc85bec50099f50d6aa6a22fe8ee47fcac6ae0e8e5f6b7c9b7e80281bb0171f3c7b6a4a91393ee6b526ad3531b729739f2dbe0c106b970cac04c4d798993b1a1d621c01060a39ab49c0d5dbea8bacf01ddd3417ab6c23bf963d314d00011f1149a5f87978259785dca1697bf3b274dc8afe9896260a157ba3504ef21b92cded096d861bae31605eb4f0f17f12d589212fb773f34aee772a1966a32fb0f24c94a5e24f4d72d79c1d1ad6f64e109cf4a554314c95dfc050b341a6b96a89c9a4f0652bda788abf54aa567bff50b4aebc524194abe4ad27a9fe6339170c6cc0dee89071af05bf9090edb00694edc8b4e90e3d0718487bcc89f3c746467e227e006370db575ad9f256ce709f3d8d125584c391b21c291257f87ab4f6cc2773ac154b4b9259e1a08fb035dd7083985c3a945886be3eef3b6fff7b7471336e26f222876abd3d01dc0ca50a409eed766c0a21b562530702bcbca4de4dde02bd05f731ff15858c2154143d35e154048f0a6e34c26d98fecb5de8f18b8865c27bd664499b9412cdabd14d819e08b84e4c000ed367f1b6abb0e898ee6a6c30fa0f62e073432e8b88061b5f782dfdf255131591098c34d5961a2376a264436432e37114b6df2c18469afaf32bcb072ba14d10a0db197f1b4872d82a155f532cf35ecba81a57d6e38dcf36b1a05e708bb863bae253f61ab3481ecd5c4f44e6aec3e83743a7937411e80d9640e1cf7e3924bbdb00780b4dc31e88cbb359fc42122de97e8d667b4ecddcbce349f6077a5e6dbf3ba152406074531699d73a6eaf81b6c968305ef8ac3df344e573e5edac2119d6a16eea7e9aed6e320171fa817723e8f1bdd197f0d589b40d6467b8685babb267d60e47ab4557f743c929a21fe11f4ac7451b1a4d12daa77f28cc7762d023c0dca32a71b1a7d976b1baa6382f349d64b4c8b3eef5ab585503f84b28c254b2c99cce6a7176089c74e39c91c798b9c7bf210d441bd2e82a45ff9e8cd5702d80570f1f754ee4b2c7794337915444b8c3e274dd74aaca1079ffdde0368553a3b4f19d60f410e2ec830b38524fe91a78b9551700eba2c76d6c0c0387f14155007720ae578ec057fdf8b42ab7728d0243d2a1703e520bb0452cf3db5b67105d8af06aaacdec652d2e4dfb812ca349e45f354de95f51ee6de1e03ccb233dfa548b485af98bb6074bc7ab68a67a8a24a8150ce1e82a8f52e589b1703da91e072049a675035693ae99103984ff69ce2637ad7ce6d768b53f0285c716 +MD = 5a808de41f438d66b250b0922f4e8e00d9b98f38fa6f56157d42628e0de69860 + +Len = 60424 +Msg = 00ed8c6dbf5e705875111476407f9ba9893ddac9d97ec446eed8250f0f4b94b29c7fa2c4e94d58834c81e1ba75de83e5fe63d49643cd2a17745d5351e9db86ecb5db9ab87d3f764c8bfdc9ed1e23fbb1041863e36b24baaaf532cfe60ad57d5b728ada11233db2fa570e34d6e254ea54c3e2ef7af98a5c4698e003961b406045fc13cc97824df4d7db3a8a3e6a7b3a17624ce0219408f83585ee5528c42517f37afed711437a24293c0c33ed5e9fd2420adb9ea1e4a476bde5e42f66ac8b89ad15d462490dc92a39a50997ab65c99a1de21991c29268be27e04bf8167c7aa0bbf51bd7058944ee4f3cbb1e4027007aef138d214b465cb8bb9daa1801dbfb4364415e9d0e5ff259b329a931734d4c5a02c4bfb706a7874dc04589f7ef72145af122221c2c36db51ac955b360d7fb5229c1e38b9b95ef16380ff70fda8e9cfceaabff1bc26b608bf83a85a97d76444ba06497f912d13a2e341f4e892f3e73485d74152e5c688808c81892dba96a5000a886c1ca52a6da3b64c4b781e99144a68c0cfceffd2544b9eeb615c0915e9f2fb69af985f7814fbc2e92da9096319195fad92ec7213c172df0c5770ea1bd92073f33b7a26deb1b2f15fc202bb169ea953e5b134a65178fc362b94f0c76f1d945b6c384a6125ecd12af8310b9c7d4a032ab1552e045421f18a8f3f6407da5c569c1dce917a156c5e54faa34c155fc62ece59a663f2e3635ac581815412243e6c1c4e23d5d876da6459ae3f4e8c83b9322525cb5ad9c8e63ece49824950156de0c54762a1e310dde8205c2e986ab2cc18195ced9b22c953a58d2f69cb29748eba7e4fb17a03ab1ef4914c97b218b4a7e7914833af33af5297ea7b5f60050b4c002eaf38eaa00e448f94c5a325fc51f1a7742fc61d76418a1dcd748b924ca04cbcbfb021782202f8c211117a7880515360ac5acd6d5149a43e1e6316e866fc39f5189891adf14fe294f07643330b7b741b201171282e8d4703c59027eabbe7b9b421afb20f75bda90d193d27df0498fde0b89cdad574d71c72aa43e721b3297400c23fac281713f63575ad4d03d57095b55c422ffc8bedcb96b6c47d14b78914e1e38ea7803d1b7015ea10dd27e5cbe5a4f44c9925db97fb74cf5a124c2dd03e5f6ce5ca9d519bc0b461ac01d39c7194b468023fd9cc9f5416de4fce4f7fc69c83458c3d09b95c8d1ac3cbdf90622a4beda0ac4a9fc6cc8083cce9d8a71333d65457cb294cdf268050f6b39fe59fbdb2588592e10031e524c37f7159db53df94da88eab6ec29c1415de4ac6a5bbbf370fcfdfc2d8375b3ebdfe12e7874a6927d1ec1300b7301f47749730068791e942ee2f13155b0fafe7aded96a5ef973133927ebe75169ce88ca1d8df5c0c7316893104a7a820f288d7cc84e6b32f2242b71feec55af54f746e4e019d59bcd5a364890ee1fdc29682a97a52a7b1de820a2cda9aec24ebee6f36a9affe6201402c8f46ac7688a85209b737e54e04762cf40f4321778552e025a07532771782392e440a4bc9cb5abbaa9b95ab4e2d7e899cc8fa011beed2db342611479bdca827053d448b40584249c1c114232cbf602e61045fc83db3e42617220e4dd143fba06dc575d99e9207730bc223db6e1cb391ed2bf4d54186ff574b3edcc3bbcff52bb4972ec5291b02cdc519553286e7f14a9dba49b6ebda9ce54cd70d37bfe31d2f661ccfcc7455dcc0aa2118c70b8391ceff39defb81213566a8850018522fdc221eb0e95e04d4fde21783ff1760822d759e152501a5ed6141cac355e41708caba3b0dfbf85f0adea899bc78923a562cf4d6f6ac67ceb1990d300c9f397300615e478e8839e779f78a9d3505d5dd9208c34638e59c6ff0553f84db1c770a993864c0ad0e8132a4f11ebe882730dea849477866512e0e3c2e4f15b98e2b2245988433040f7cc51e23cb6a107d51c21b7717ca098f8b3df77cb28f2244d47e983a231b0e0b7b134838273c7848b70c6e1abad79ce13253a4c9103dafd0f1540375d7e535730ab1b586a8822a49bf32129c871d8b06c1f3e6abdecdacc3006719d3f92e14e6aa04d897c5e7a0c0f8b79b8522f87e50a8a31f9d74abc39b901c3dfd2d5226c6e7a133f405d9767ee2218b6d1514c16f64c5c20688546ebb1ed80229eb0de5a431fb5a23fed415b419f444acb3ef0eb364f0708f705418b20b4ee912a89dcbff1797bd900773f900fea469cca5e3b0bd4797ad90c3174c00f3d5551fec9e544816eac0d0b615ab060eb66d55519f41fd7b4fcba2f73a9338470ff8da2d9c191fae89265e9155a603d8aeb1df5d7e5ce48e7d6d3e932a68c8a35336b9f1f384d64ce730a21f9074aacaf1f9b3000d4c12efa514dc1d73472267438137b051120c70898233b772816b842487891fc8aa091d4b35040c81b8d621557aec1f216b42c7d49d9c0f6876c662bafdb9d33cf127a5f4403ec6e23864500d864f64e0dae9a17ce5437deeaf2c0529cedde0e6abfef824e8f50311405d71e035ca480bfb91abd6ebb28961a53cd9f56d6dbf32550fb25171cf17ab5b121551fbf52f2f47bb35772361b88df3595fb27bd1c4bc66da330e8d159afcf332a8e76b4890b749c6dce22ef991b0041214c55ca2a7f16bdf18c09d60f3a2a32fbb24e64d03306c55008c60b29b7471e787c29278cf5dde9ec1fc2549b818e579aa7f0f7afd2749e65eea6b554c47a74a271ebf9ca17e3989cd25b7386eec34a1157a494ae5084ceb3680a13a1aa62eda815e36b6d4cef730a8e1b5a56e790b268a8b2635616fffe425f394d98d2c72f914e59a2fcfbcb223d394c3296d6bf38a584618d2e8aacd51bb97c8cc1a271e2650694c9ff8e3d4c3dbc3422cb221683d2d2fa3abf1555fc45601bf8a58327af2d24dd06fe6c0e9913001b537f335e3cf67ac5918f20c01ac83a5eb8cbdeb33ef0907c8182fd06b3c6ec4bec39715e0a1a630abb2811b6d8ad318cf5bb19db36b632b96412a9ec3f5e670b168244e096457711e01251ffdefb2cefd6fe9e683f87f2dbd437d88ae8e45ba2f9e114aa877f9d2126d34963d3ba12cd841bd321036cb82cfb78f2a6535faf59bcde498686d0bd84b8f560aa5ff3cd6f269a22d0276c6cf2015d5f092bd74b7888014b3a3b41c080bc00fd9b2bad441de504f23b5690f6760e6e877b1655174784d3828e4dd98c5e5b7a8a00dff05f1fe9e0aa2b36df3e004834d3c3bcdffb0dd9db574c65a10a66bced6e9f23c406bc59b6b4686f612cd8da36a9abc780df14aea1303a2a9f22df08e011409d32213d5d0f77baaa1ea945eafc72f9dc3daba22cae762245ddbd1366dcdbadf84198ea1f715be98f1f9b90a10f9776a52047007a8992ca5d63c148ff6834addafa530bc467c8bcc56bec0226f67eeaca309b76c2baeafa1b3718c7fa0c8407ec633be8777626fdf50a82e1a239911df3758f4b29cae87c2763a8d880503384d58736c95e28dd72c60547753c6137d6c7f80cc9d940f31728ef5bc2b9bda9ec3d6b2df5a10455e4e16321081df5d7dfeec0f836faa47292c6e117cfccda4e07ce1909b56992f71aed2cfae06c7ddbfe11d53ddbb37fcfb6aa43c645e22f8b9c2e98b051de5b29de9368b9465282aafcd840c1002d58714b7c1c4f6d2245c67505f00c1127e654f67b204682f78baca0ea086eed90b7c019e3759a8fb5a36858fc2a043c6dbbe12b4c5c89dc822049b4f0352ae9032424e788558ff3c2d2da0eba4c7f1cd7633645ae226a9c1bc9e9fe91d0df3dae28057e13c416e07258835fe86167f78e65bd0c4b7cd109ec0ff44876e07432ba4acba72bcb17a0edbfca122e6ea316b949dd48c871a66c1a79d258466dd10e4f13de2878707a795a8e19f1337d1bc18198fdc0d009d10dd090ebf6aa80de19940aa7c9a4bd27b4e14ed7c2a095b7400ed9873d094d3a3434daa8ec4a1f839db2b78c5454ba0698ac866b4e1cbf5fda8794e2871b44c9296ee16f01cd55a8e0d1a2f68f326e006fe0be3f5d5002fbd814527666aff76733a72da9fcdc27352b17544e44e6e1fb7fa87fbab7e4667382df99aba26d6cfa9c0744bfa61e9f12c6af54fa39181be0122a4f44237ff3af200df4e902fcad6baab5b017c73cc427f9bf2a64376f25986e8eb9456ac9b297fac9e8984f05c2a3a6daf91b27dd9e5c0c705ff20593060adbfd4225546caa145839ff20512fb189d89da5328daa369a46e97a0e6d2dc61da39f744da90de30c8185c0e9d023840487273ec3c24a93c7f153031f35e56ebb0d9bd62331576669bed6b35b948843fefc9f4c388f66bdcd53d5828d266204cb6019f010b4ef3a11575461df6407f45e802e55f8baa6bd92b49880bf084d9334e5434b7df98067ee942651db0a48a10c59fce36b0bb19a005ec3851fa34d20e0e43f6ed0c9b0f6e6bc750bb94cf251efcf307df94c305cfe987f1714be0bb5b6a435e173ec27eee3196818dff3ad0df12cf3ac0a43ca0c73a9f4c006232e599e6f4e2dcc2a8e57ccf128ffb7c723dcf9b66cf606b928b149da49075d985f15808bb1d9454b8d3a898ddc48a78ff9c6f0b7c4e65577f2536773a77482e646f04441886d4416cb9e0135ad7c1915dad3bc7522015f42cffab5bc3590dbd58af2d3d9f8723354f18b1e31c322741f6c0c4639afd18de567af1bfc1ce2d12cd423139b2b6f79cda609c7c845c220765778764a92dd45266379817d83f3cdb5cb8cedcf49ec7e499321e4435be585e2441f35f2f4adf0cf6b61cf8593493536183449bc7971aa9060da5eea2f120b2adb0a6977fdcaf7a6266eed5d736e7278622310abe4876569b43d1b05e6d11a18c340fb22d4bbc0743da8c34d4deaed43526228e4b2b5179e375004dcabaa1a72a5c9d43ba208b50057173a9c46430d5e90f87baf0a8428f5921d01b7a426730128aeda0a8e3a3d141dc4389488033993c3edf054147b00376dacfbddf9cc8d8df5f6f7d6c1d8bf7637b6a67b3bb1dba8934a6e1afa22072c6f03d897d324d0deb3a912e9636aa5ef4cf56d9a86d65a66aa16df4be101a69b412c822d5ab7a5bb0bd013899b785647048a733992f91e95ad592a2df3a1434d8b2fdfe7b50c72eda572e1ff918b3a46097ca2a087a28ffd471b37095889480bf412d90c0daca03d289766936e2ab9b400d3e1168c5a15651e65ee2638411b9b24df57e6891d98703d47898c5ade3b58949817e4c9a71897da3e37ceba5226c5c49e40bb52e9c1518b8b32347c2e28fb6bd22e536714005924affa470643cf537c557ed48f9782a7bb6a49d1fda2e8652d890da98e263574a4bf1fda459c800bf30ef87969b0453974edb7ac04c2e35e83c59c2e65671fb001768ecf9fe6a0b7d2d096f208bb71d05f1b620dba1782ae158fc32c155e26d4e3dc2f6e3ba7971dc0a4408693406e3423fc333b47282b1c8aee6ae9c593b3aaf4faeafe426acc066690de7e32c8a32d69981280d27d47728aeb79ae9e8f2cf8d9d7a8c9dbb4a9396b9f58220fda7a83d9f8e822839f3f76bf8dd8c3c8d9fb873d7b4f152f0f958079d696ba4ffe5afd1a239b6a831579f1cedc70706af9861fc6efc92b6602f8a1353f818e1dbcab65d52115a0fa675faa62e027fdad7837871c3afc53a7163b6549e1ffe69f9dd681b1fb3c0c101e586b21a2e6b1b8dd7589e864d2d51ad1c4945dc4f909fd28411a57b8faf6ebc1cbfab32996d6b4b0a7ebd27632f8e8befcf618f1584060e655f76e6036a5b6d82220c17d1db2c87a37768177030539624b52236f02d3f05d7ae29ffcd86297ecc4a5f3a7658d1dc18cf29e6f2f4434471a722546e10ad41719a19292c775b6841951f0ae54b1da100e27d0679dfd02f4cf1cc77fdc2c359c98fdee2ded263c2889ec619ad46528ec25ddc0653578caf1d419b121da833a7261be5cd231bd51607c3ded74ccf02fdf39db1674dffcb5c78f318a34c5550c23daac838b7b811cb55a0d3d43239b1670b2ea799983d3ebfd6a2bfbc184ebd2376d8e0c5fb3bbc6ae8b24f80fc3ae0628f8d291de0943931bcbd1abceff8db534812e9e57c2b376d4774ac7e09371268d735b074a5995d6a91ce943661e83dda47d52e2798eb155ad874752bf7b2b9f298c4c83e55c11db30c43c6a8ec914710ecbc37fcf00fd8bc321e240b363269884a96facb8f8fecb382b92c950e88999fbd2491e6100de3f9eafe43ac533a83a24348a2bca16a6cd47b9b307b3632a7ff2faab6735779e9ac49716e7fcd3faac939366a7249f4f0ae7d666cdbf223f487babb301554b83c3bf433df0602c64175930cbc9cc7942a99fea74c37d0d101f1e4d2795c966d6e2171924fcf9242da3fc718139cc8ec7d3f75da690f40de52a6448d0ca97aede21528392b4d0a49f7706c04f9e2cc425b07897c2dd2d080591d4057649c90de5a6fae74ebfec9500bcff84fea1f205a667a90190512ee7b97df7eae1ba676a319996af21c755dd99996d2456e9283890211301da95019349165360d8c377ac0b23af42d3711466b237da0a1f1fd5452c053c006650aef3fd8372d0250f03bdbb6ccc082c67301693becd9d21ea0213c23cae67fd2b3bee1ceddca08e441284899b7569f451b1d78355cf4524f3b68c9aedf19c67ceb26ef07b173adc0bade9bdd833cdf2d6a090cc24676aefe1f997fb418b096ce01a5abf56ad04d70bdbd49e4d8c9cef9f0429b4541d744b5dd31c2f600614d40a7c99d2a5266846eda42d751f0a3eb354e589840d79cc000f4d047c71ea2766f3df15719108ccf25810dc8a79351c069c4b9a837604d8d69e6e352b9cbda9eb434bb5e442dd9aa4f528ca2581949cb01f3f43fbb8450195b33f98830b09022ca4c96172df2c39226cf3dd8e5faf277886c86c32fac4af04f5c615cee35599eebc5f0164907e11346479fe0c3c0e262779effd71650a4bec0d0d95524f2ad8fc33187e027f5a8aa485c316e9403aff859fbbdf00219e3b15a21cfe59750f261db2f9be94d1480c3978d80b6b92ba1c5aa134f8275508e9475df93a297d8ceb18e10caa62b1d0ffbae5c1c7db5b16e36e2662312e2ad1bb4ae6ae2f0a902990b667582ab4457bcbf073843081c2d7be89d74e735cc7801be5e443c746d66f7bbfede527d1b5d0d8a3cb2b30a4f08414725cffa4fb549d70e2ffbee82476e515fb1abc87022a588f9a95bdae8d0ca54cf25c7dad51fbb12207e0297ceb9814c63197e4348fcc99569f784391853fc2d0d180d177a7e243991d2f8b6ae46682f72b0b6514c0c21d96781cc4c3d2b16407d76f02e94431db3ceb93ed9a5705b90eaf1f4811dc356cb8ee2a482bbc891259cbd118ea721101753bb556f48ba04175867b94122d4c0c22c94ad8b18df0552e77501c6477aa3eacd33dce60ca5da09278c651fef930873ed1237a3d8b0db4eea192153e9c2319477cd25ec65a6460cf4ca887bf89086573ce5e38b70009b701123f0b6029a41baffe1c0c0e84de0893cccb3f3c25fd2c2887a21a07320be6d0920006b26657ca4c21c5e22090f32145bed4815d153766c7c59827166a3ccac1e97d0f1b9a62b186ad72e8e4c6ca324feb6e530aa0dd9ab750e867caefc3ea3dde5d2d860fed55c669cd25436e8cc3181b3fbf2b0f175160f039e20c0bc9cead3a4869d80b2140721e7ea123cf605d0815efcca8aa0f122a6d33a1c50476ff77c5e8cafad725f9f4942d646e326f8787a3278269b9ea657d8e7fabdb23f1040547e258d4bb2208b29381770adfe1c9fd8b8fea5784d3d2c11cc50838b06365bd88e11b4efe40f616e322e1e11eddabd296ce0b5853f0e25ee0acc1c2f3f3ab094f8b1c51eaa649864bb9aad9378bb66e8c8dee556d691cbc9fdddd6333ca5d50668862c3c57d8c6c95eedbdc7114713a357399371b67094324006402ba0f03f99381f58ed8ec442f87687ad116a0649c592916e4a5122f5c36bc5f86ceeb266e9f1ede986b1cfb37ead0929f6c5618fdbf566d465391186d9cb9d5d9b8864d16520624cbc63538ec85cd2830bc5f14c630a3a4446c0d4ce01fa0cee2c007005973e2cf0d305e84b62208466b4de3e05d74b7c5c53aad511b871952892d97c79fcc59e848f3bf66fd8728f3386909052c533cd7b3039ab1889ccb6ab6495d2b5023147563558166297dd6387f56f90a9995d7e3f510fbf48d255f1d515a82b3d441ba81469fcc0ca2ccba1c285ddc770e0132f073a9f9a094ec7c7442a92de894eef411d918c7e1d03c7ba71cc6dad5f260f5061516bc3f04b7cb75717e8750f6f16a2f040a9b6c1c95c2e141d91aabad7ac82dc39e6b58454ff42ac721b8756314c3e2afbb6f35ec9e36d380dec581a717516e658a2e74bf7c9e9b2ad9e7df441da833c2746cc5a9208084c21c02e047ff3bd0e3222f1ada0571cf83ef3c14ffd5c028257dbaa3bce447fceddcfa4ef7f92c5c25ae93d2feb417cebbabe09efe04b4ccc01e80578baf3444ea66d4551fcfcc1913768525934f35a0b855fb05a7722b247b9fe76a804cef63a202b97d2547c50f96c22b99019f764e6435b4cf64e6ce3a3f47166302811f61fcf8d14d722abc4694d9adb8b06c7fdea69334869c2a4515f26035ca78186c47df8f434d6e3f5cc7f604340a087efb5b65b6a3b1b60437bd7e306e284cd7801c3510380581504a99a58be816729c90ca8be728d91c3d4c3bc900e704e58700e8e5c3d7fe142331c488b6f0645490e635ff6eeb85359d2d96bd17c8e6abf097b3d7f049bf8d82b75186cc747c1720a6a3a993153d69eb82d641bf3a5606d9eb86f3dfb5d05633844789179ee72415781d719ece8a20f1f2043c3e65dd5e0ba46821d844bad5fe41ae78dd942ce23603aa3fd63df2c275262698dd70021b4f6b6249221e0474ad968e3a677ed3b84df052fb848bffb740c6473ce4834ea56be87b53066a369a062af0b9fd85641020e61d8df0df39681a796c109bc8486527c2bb27cc51d9aed3a6dbdce7d16851798e14dd6262273bcae79ffc496478c14da12aadbcfa741adab1588b6c8967e21e903ed4223c51991ab9e7e838826622a32fd1ce1d8d8f45e4f46eaed5d5e72dd793a45877943febd0974dbcae489bf1f311b7703934b297b817252e6ade72996e3f4c52ab927a97b528d760f4de9e9403f2e47c5615667820c185f173cc8f8ea93e40ab0460890791158fbc526df7759b7861dbbd583250e29a97e038c7c77452358849cb23f4a12c057db90f1d2ffa854b3573b6269f87c74b62e301f6a0b42fcf2a16470644cf4da1a83d7515cd8d8814682e88a73485977ceee31581a4b409b230f9c22e00f8be911831ca7e59956b7b03f37d0279b31ad444c6bd915bdda786a1d982c6b083457cd57e577f5b7af7270da9db60f67717fc6b76414e4c97d3f486a0d0f4dcdaab0be80a64415ca3f4c18e3aebe8343a589c6bd9e9dfff4b53a3e635f4e00d64b7e558bf39ece47a2af08f8df5c3ba65a35b4dd9fc6cfc5ff03dc98036b4ca8933b22d841da77966605d168a4118105ec1e1185dc41fcc3d72673869de959cb1e51c6f405a9aa5cf60b02e191610bf8f7ad7d44c871ef64ba1cb39d833ad0a4497c927dd36eeef1df090dc22bed34e5e95e58a908e9102f34511d7b57e249caa0f615d42facbdfb9d9a52a8d7f884535dcb2411021a1789c25e117e80722da4c168d1757ed58fe09e2981f42a2572d7b15e701b48875e1ad0ae1035916ce4d9073f55f0459bed376d511c32a6e698c98092bd2640a37c590bcbca2f1f3507cdff0403c318424e76979b71f2b2de6edf48027bd08f00caaac0318fc96e6d1efa25316b7c6b7b3c04895333a2e25f6d5f74283c988831e1a69a79e1a3136792f3f6521d6ab3a93e87cf22c1d1ca0bfce0916e6ffcc08959c2f6ff503ab2c6fc320ee06a3c955ebe76e584bcedbe46c5f92c5f865bdca99b96624c5bfea10dc33abb670260650e343858e385755392311fa186206411050f7768eb857d82ae7084a8405664b72a586285e9abf70e90c6aa9d4cce74121e5e1c87574d25cc1b9c964216d6b81055637c18e1a0f163b51f407c4dd12a6467efcc2a1a1385d1e79fe6056513d8e4f21dfb7e75f4e2e7617377daf3e8e56c744d2cddae892c58a5030a8e959e55c992c0572311284a0e389ba715c97633bec5eea52e7f1e77b4b66e6a3a22c6ad12a9f315a34daba54cacc054c948f9a3cfdf4ccb791633f67a9e2a8b94b73d4d74ca3ecd7b760f731730ba0771fce394041300166a0e6a271eeecfe52aad52b554560bc51844b4321256c1458c5fd4b31013810c5dc24198160ae71d689fb78325efd2c306144a60c2917e7594ec4d5f68534813e0cc2ab7f494d88adae8cc358dfa2c1dc17f329d8c835a4e181cae177154ddd37fa6b6153eff4cc40e13112ae107905bd6effd36e47eed05727b8769cf9aaaa1a6cc541e59bc9c3f5ec926f1c38a77f3b2d11adb6f169f52508359d4d7875734e2b78561d94f4f7359656e18aa157b7bf1ed0bd980dcf9ab2ecea5d72dbd3bd3bff2da5e4249ef069a62671e091af36af07e50dfde24748669b7ebef36bee1249af8c382091ef34f7e5a9250651d78375b1f7a5cbb9fa86a9dc9ac8b86deef9e0053c16bb240e4d491b8807e529f82677e4af8becda10dce379e684a92cfb +MD = ac3c513dbed76506a0a83286f0920a5688c738b1986ec60e00f85802e693c43a + +Len = 61216 +Msg = 21159e073324e32551a413c041d4c71b0832d2ceb132241a4936ee7a2ebb077a8ad08fcc1acdd29934416e15082cb956266f5d66408045973162bd163fd5d4c39dca054034191748a476424385a29317f2de924048a521232b9aa79fcac06ee664e94a8b0c717cdca92bd571409c1f057667b885500980673ec6f53d58e39d8ae716a5d4273bc7fa4b4871c8c28323c9b9f3185ce1142a0a72cff01770a829572d3a5d430fe0c14c93b65c7092c0680ac368fbee822ee6b5cf9bdd569a76d9f73e3bbb024bc9327a885bde9038b9b6719db0a763bbbf7d105e1307215eb6760f22030736635de22c322041503dd8d4a64eb165e2142fb8c2261fb5a145cec84ae178890adf0398099aedcbd928848c50de557c9316e65d742fa82efed627974d848488a448251eb9c7abc6538124a4175682369f484d34cd8294bb5f9a29abc3130e4e2c262a3ae5c14078e6d122e5a5bd22d92e32ca077626cda4ec173ccc5294fd21cbff7ab53591962ab89ee5179f1b1cae675dc69c16233931cfd7c9c1a2113b4aa85d7d56503e9423f473d502b07858fd7350aabc5682c2aa2d6236535c91af10edc79be7dfd021adc0d55a6d7eddbe0e7a93dc2fde4a4f56313eed4a281d41bdbfc63c2e8950270e444edc22b1513628a3afc6bd5583c77e00f5546eadbcd99848e1c8f5f7c58d8faa65c3e7f2dda894162bce2e6436146ac50fd58694765fe8b0a0a702d0373b7817a37785e988fc9bfc8f5e49b26a1d62a612d75c8453bbf61f8b411dbdaf1811b58e60c43d5a1a837d64ddd7e827caaecb88c2b6265cd60abc2bfe1066330ea1acb0e76b965bea94c031b3a0ad7503955df8fd5d2298966baf0747a272ce0472249172449e945518ee7e476caa5db06084ebf2191f10e46321a7829a8a85e3ca44b76b15fa0c41552ed4030386e6b95867e808b1c5caa9383a9419c1556291f234ac38a755cb9894a9b94e2dea1906c22f77a7efbed0cb33215572df7c6cf7321df843c255da401d86b890b17efc80e903203799af2a349cff72f7bca6abfdd12721f22da2402338ee563258e99a0d140c6c207843decabbfb740e1f7c288c1979b1afb2e505272d091d9aead4f8968a72e2cb5420f677d73ee221d1a5ea8a503c30e117c6323643fe94312fe62004945c0b9ef5ee79213aef44979bcaf9e1bf9724ef25ecce37c4f6435feec8193d7af26d02225670b22a3723d843935e77aeb31743a400e111f618b38df121eb2b845e9260a5ffe211f03e054c91a7203665b790445ca974ae228d6b21fe9a9fb5fac5021e4493d726d42b755b4faf47042bcc185a15908df58f7cf385dedb3bc2235243a6c8b758d91d26f86d4352dccb4a1a36ed965d37ce870ed41f598bca3c482adf5ef8156b12155918ea3639e67208c87265a8b77721506b95593652510ab1785eb09e551bb902ea5c3af10c6de1aeff542b134657d633babe9a3fdada14a6624603801f6db62d014cc539727a0083e665a59fb3ded67824d8493ac86c426f1021be68196bf1dec771f3d91313b7d1a62c3c13a6140767d06ad0f0c7107c53ab764b1cee1c535d63522d979843eede66315839c6025248e6fc96297dcdaa9b5bce11644488c2f1fe78d93da90f8df44ffd62d7bcaf9f62901603ac92abb49047b0780ac4b827e3c0696191ed817c598917c0b62f24d7fef4417f43afb2827798a4e8d415b36b7bd0af2b5c0da0a3553b07dc9ec867e0643a0472b47cebfc9b7532c98cdf81740157d2a165b074ea328d561d572f82a4dc8be844c8a05d0b4307e383f8cc2b2cbd7c5829767f063a36a88beaa80b7c0aae0f745d47c41095b6763e7ee182b87af768cb2d55225d79abb42ead5a055ef921ed3026f98f0d833de9cc230ea93045f642b214cb408191d7d8c8cd35c42f5b7e4ea405a6aa5bbe208813d849ea9c7703339646a0817b68033de0b201f1f7170d59596315bc022da77c9d0658ed03f76663fe2b9c8f52e8760bfec48633bf151637d6a90f6e0bb71aedf21604596dad67f9722b870f0ef87a69aa6b8c338e3de10fa33d5c687d46c002986e15d6e2814e1e7aae28acb87f557f6d0fda986c77b60a4989c45160c1e2e41978530e6b5b62f99f1c480c57675076ce18390b61abdc504ff30fd1bd0fc8bbfd9b86a60f23ecb368ddafd7f397b37656ee713476c19c083de504929b1abaaeca3e7549d7c134735e5925b695f7c6a68bf94abab2a13e5a9cc66c3902c900e50acbe99dc91d826207f87250436fd12ff7a18c461e330a6ff2fe0f71fa04e18944a9aa4af0201ea8ee235d4f07e71b39224ffe7fc060476fcaf5b5e08cb3a6c2014080f951b04f6c9840b058e947edeb9369690ea20e3f82a912262ebfbf98b7c8f83352f6b65fd68fb93116f0778f6dd259959acc2638ce19bf29049c0efc9121398afce61b940f5af4a92e245f49e867854acc44917b7ea164880a29891d77946b4ea029c5373f815bdf4b8de86384db57504c143550b8ca6709e770184292aaf647e5c89e8f8d8c549d1334f82468b4356ec144fcfea41a31754379a4b20aea423d74ca8de6220449a92e2078d5bd7d896ed3dacdcf6c1b2a93c84a13b606ddb7f8f43779822671a1cc455951beaabbba162be08f093555ba2d1ced4f96ae09be3f0e174cacc059c4ce00e8692758f8302f715d2cf52a4f4a09e76a3e9a2bf8bddc6a73edac18461a7706d4aa58eebb53804d5a8bdb709140f1d2c7ca0aa5321e95af5244ca57bf0b8f0025fb98958d8bd365de940332a306aa840eda2d433d473385bd394ea54dffdd95e4433175f540ee64f12fb4960e02ffa647554c2ea3a27e96bbb47f29765e2a6e186c69b57bda9af09b4438c4599eb7e07825af8eec953d87549da70cc5903e32c95d897ea7c19fb1e5bbd5e50c4199d9ab319e8a9e8a3a0390dc0c75bffde18afffed8f7025dc551d67cd421af526f3ae761614a43e83bb07859f68dee0ddb1ec337a0491317d47577707d9fcb3bffaa359d3ff76217093613fdaf7cd929f3951cf0279b625593c7ce7d1788e76312d29ccd82b9847f6c3e6aae7e6908b7f3981311b7167880cbefe68cec038c326f5a24d970b730882b708355aa7c0421a1ceaf8296e1dc014495c48642394110e0e9d5a9521aee9a107368db7cdf54cdc5e0f82b0c26163ec660725162528e652b27b8266f09461de1f021263cb780252975f6f5630aafa119f8f7d79475fb9919bed43611adc179678eb420322f118f9436b2c6e1b72e9104065bfe1fca1114725331c27e2ee6166af62bb0a56c8e75cdca3388d0551b765132a6b04d7a573ffe91d8b3ffb33e5cb2cf8dbddf997f3e9ddb8121760bffb7c623e1d464ad5680841dd0efdc6450b406c2e33126dc6c52cc0ea57b1c0261be2c821452ad8a9440cea221605d6aa4842f7734f3c35dde19220da67c0962c9f24af64512703a9be8a2c6d4edcaedc235f69588ebfe455dfb67808c0e8752bfbbea287efbf5e5f3dec931f07d6a14333021c5e8011ebc6f60620e6018dcfacc81d2bfc6f783b1228c0b8c7dfa86087edc78ae5a1d6de99eb0dc602981518377accb6426ee63c9b2582f7f844b66f12ba0c5f9e92731f571539d1eef332e1549a49dbfa4c6de532bacffb10b5852f6c2e6ce4d9a07b30870b16defba15bbd7c9d210774b683a7813ef41cb1d09923fcc155c5377a53b482432147b930f40f27f9cec3520bcbf5ff489be74bf466df5d19437b287e910e0143f596b8109048ef36bf8a02daab73155e23e55fbf72d4057cd2713d2bc7cf6c93e05678deb50d1aea8fd61791b6815bf628916d8041847e827f41e6104c5b3c999e016be9d6ce637b9c31f0cf51b34b971665e5f5577330b0a657a3bab343e9eb6b2211c08a0f316081283ef2219b5cb779ed596d2912b49de44d0689711c0cfff432faf123421d4fbb2352988a7c17ddcf9248764b058280c57c7f1b2a460e5da5be980a46f97f8fc6adcc211108058083ff33af11ae232fa6708dde2344767b1c1f796a79a7e0a720420c3a49a19e36338e9b56218f0ef113b3a34110b9cddeb3e00f901fdfd92c546ab33288fb5a656acaf02a0f2aae6b99d06ff266f88d0f09aacb29ce03d195cf9221a87357b2a4762ed2992f0399f5b53144509a933c7289da5c85e8b6526a1e53080a8d594f69f234a301f5ac5a25d260b0ea201c44afb0e904331459e42fbd17b6e73b62793c7b76e213177757829de9462d9be63e1d1b7182cfc5810f4d286abebd0225d8725e60203af9072a82543564a962a3a15125ee38aa70ae2c48fcd6900a75f5e5c2378aedf80ede4babb1cfacdc18b6e6d26cc996519a43d3a986c5db4e0b65199283419bc8ed6f236523327f4422a2a7275c9e3c53c6d48df562b2e0f636f5ec79be3eca2c093c4a5514e86c6014f94aa681d69b3f7af2c3a31d4841918d2af6de64dce9afe6b838f2236be4be642d49f658fd23632b010d4922d09dbe8276913703a68aa30a8577a2cb3788bda4a13d9d5e8c657d5ba1d33df00635cb9b5b742a17262dd3e9067f0d78d5c8fc3b079df21f0ef1dc9137ae182133aa475c5bf80e1bc6338116cdc788b8b115e8bbd2d38af6ff290f4035166e12e37bc029fa95898e213c58f83dd9bb076400018b6586fe92d7ab83fd4c748661b01ab4a8b9e4f2eaa1b8ba11f93dfae16907e54e6210936f12d9e92cc061177a1417933d1c6ef0bdd2392308626cfee33aadf2594b190fd85b349d63536487e879f2fa7b848bf9843d2e32201bdf0d695352b75072f8ca8afb5c1f1557e76e296c2d48d894c473ba3d18561d880cccf03da6a2b88c4839e38db0fcd7507220b965370cc8dfc105dc6c780d35398ea424741a52f5f98ff47e8cc3a51dcf9d4614ff90c4e097ea167755ddd62ba2dd2952711e469d4d2870b86314a64d47b154c885daefa48fa82bf763ba3f554660d326cf32dc12f9ba452dcb148f0a3b56b340b2761b891993ccf9108da736a6c227fde8e8a1fb71adc84b0f53bdc92d061819efe2a702b8256fe906d8ac6446799e6448b026bb578ba09cba42b10e9f47c9b0a8a130a5fdf58b33911bcd52a7efbcd67919d8d71dcc349f5672073f04846ea1674236f75d5cb58569d788864d9ce9e1049646d336f81adf5e623efeff546d78c646285b58e3654adb8c4c739a19dc0055a5ef343587b9b95c83b6b2d2204c83201d9356632210f070baa7af3feed9b0f6e9408e8c0397c9bb671d0f3f80926d2f48f68d2e814f12b3d3189d8174897f52a0c926ccf44b9d057cc04899fdc5a32e48c043fd99862e3f761dc3115351c8138d07a15ac23b8fc5454f0373e05ca1b7ad9f2f62d34caf5e1435c451f3d927940e8a92c805ee3e754117c45fe0de0545e7d1b3f0b71912aa2deef5e5ee661a6e95a06f8727ea158000c91fa067b03a7378066619bd61f4ae33b7ec2fabbf1d0dc3078c3ab0a5919004c159f7fd79adaaeebbaa607ebdc1d4b60f2ba1a41abbec172e9d3538a75f0fbd9f27c90aa0fb66ac501547438316a8357318ee602f53a3f26407291865ca699bc0ed9627ac903141622b40c4684fb322825868785380afe5665e68d87760383fc53fe1cd2308953e7050ef79c3e9601d9b4ea2552ddf7a7093f7770142bce61a1a732e737ac0fd03f92aa5dc2c8049874c801e7f24ac9e248b86f62b6e3d1dab4f4bfeb33a55f3226b1cf6541880d9e004814f6ece948561ab7148af406d2973b21eb4f4d833f22a44ac737a0e878bc861c6b7ac8213cac8725b01156fc9a404116ff3c0eae7848c245d8fc674f0f990d2c4e9a0f596c8b97e8891e642df17ccbbb42d9fc8fd24b878a4bdc1f2598de9d60057e48fba19c53e9e7daa7029ef3e3f8fe4fa18c14d4fc0168fe4fd1dc323ea0d74ffb6ea387c210146da6e16b4e90b579c5850e088a2793768b7fbda33ef9d40e35b01a3af3ec4657fee9331e35dbdafd642e7e74161226bfaa3750b5a9d5e4f057f0672e88da71f7b5f961804fca4fd0532642211fc5a3898400f2d91cdbb8c6de42bd46ef937a3dbb5dd1594568fc3abbf5c4d74e46f31d41610bd93f1238d7f12f844bd01f4a71389ded71bebac985c4216a5d4b9ffcc308e3037bb9824d6db93e2406d287c8db53421c8f63ca9ff795349e7dbdd8a8c2010c43883333ddce5ef7053c9ed2dbc235d3c57ddc9f64da57b6c7fd4cf7de64556731c7542ed14307e28fb8dc086d7006d85201d0410274312d4ca6a10686ef2c793602c57a1214dc882b413332652bedda2ae4e8b95f0e4c239740640c87acadccbbff2d1f878906703f9e4b57aa3c1260b5edcb0e65efd01f0f933d12cbe301e72687352617eaad223598cd7f26eb9ef25be62148fa61e4aa1c66d21f39dc4f52e0628596ac7ef82773f761b2c07fb9188495947008aab04b2683ce3bb9dec0965258c4772d8e10066383aef960428a5b98c4ca8c76135d8a95b0d76e33327c3ae3319ad181621d476b035d5bee7a3a42ff396ba72ce413efd2b695c18f21aac6fab4b1ad92424673f54115e15370f05621bd20c61265f903435db23bb5f173c201abae124776b31168037f92756cd51d671791f310de384d516cd3e58eeafeb75fdc3c0988458da92c1243763db51121371165350e96f75564ada2c50056742d7c0f01993df9fcc3a93608959395cbeafa714495f4d65fa4e5e6c7e6f47bfcaac00ea5ca4ed827e8473676f860522cfe1900d819aae698c13ae0ea4d53a3bfb893a0d1a4a42b379f6edc36a68a355be7fa86c6cb180ec934cd63b2040314e4de5d8c2d302539537186eef0a7fb86802d07cbb9b327961b860537c712ee1694a5869b6075ba4ca4e5f7354b04998dc556a79657d8bdc5b53e4923d27ffaf3f7937695137b4caa52832979f0c44e9250ec41b04842c3e4bfe403f07b5311f134329542ed4bc19c84d3848287ef01dc49773fe235f9223b63019a6669971a5a740a4c6997ec036a625e7117b78e9ab4d97d08f2c606c012c71c764d4553fd74dea101d4b866f85c15ab560228a70062288804a8a27087b113bdff6db68da2889b811d49f9c28abac5429c0983451d2e5d1f9bce723f5e5f706c9d8e654ff1ddd23209910207a0cb99acacf5706dd85fa0cb352add7b2c6606b2b877f9a0d2bdac3a2c747a3d21d8ba70ec8d9629193f1b123a868c2ddb0cfc16b8f11b892d6e5123edb9096df7295016c69b9e80c814f37f12a8265d529a7a2105c47310ea39e875b62a589e09068227a1e52f7bce275397255854117957aa5907b8a840f16699b6ee8d0fd83fb7782ae535f22011c061e4dc60be53388db2482694631e2a3d8e70fcabd62381835ba7f9518f797a2745ed9d870b2a7782ba76cb224bb47d06ec2a4a4c5388b7b453264701ad8ef1a3283ad194e49f1e80eb6a5c280909d308de6d3f37310ec9908730360ff4655f7d3254e150f0b815cd6cac436f4425128c8ac0433616be9f60204c2e410e08aafe8ac23383d87f44b166c4e6bfa51124da18abbe0fab9e226b45039761a07fbc6b590c31f443fc9476013bafe0d4d4ef3ab1b6188b97b938fb1fdcda3555d07b0fc6bb426dda36eb626497059978765df47d6aba728214ca56d65f5d86d205d131fa56cdb4453533bfb8634fb33900554fa34e0a8c16b9c1c59114891bc226a5181c653c932b0152d32424f7f7c179be944beb71a1f8af03907884c6becb39de0d5570f6cf34a332e7d164642ab5e9820c9fc75878d3fe7affb4367d3595486658cd0063330922b942e7aafe17c05888fcc46c25da4daf0c5a6db21449c95a2441ab9ceb865286d12e8d7f2d8588cfb8afe562428f0ec8a3e8ca81f5c20f78001018cdf68fb6d761f1eb6a593bb555fa6c282f155fbf5426f2f42a86680ea9e20c3b1aec17de1e50d42af3ea02f0f3367ab55d081208587dc0133531036ff5b27e3d0b35e67263881f72a248a2e1b05422b574816f90de909a4e2b5d5ad96458ae452839c419acf01aea00dbe32f943cac50faea3f00ed47c8cd937136f5ffbde47cfa61797b03700dbb940c8d82a7d760ad79aa4aff8e8a91b9f5d75f6bcdc768090813cc416ff03f0ce6416784f20b85f578295836c8413f3ad9f69de2d65f8115dab88713f958f9067fe33adb7cc1654f80cf314da3541877c836b803236e79c8f9b97098a79083d1e65bce2f4de246e418049ceb27ab65994aff7775bbda9649ec7c507983812594a310eb296e5471dcc83063b85d2e6dc7e5b9a3e0a78d21c13b6bee5e951127783f695970e6012e5e18bb4c5e4cc67a2a23cc04eeed6d61576fed14ede429d0a441d0dfadbdcfc592910d2082fc59d2ea8ba162459764a0340f6988d178b2694031ac4788fca87da1ba8ea6cf76d0be2ea59e858dac59247fa34913b059923a76986457a8aa739fb31ba7a8eac114861efa2c356f35333761b4f47d3390b38b6cfd62d8b6cf1873ef3dbeec7ee50c72e311b4399239dc1f02c9d28e0123fba44ae80d9159747e417ea73d3c31eb9fcaa5729c5aa0c03b24896a4b0ec31d54cc39e1cd4c3a9f8f5188e18a5eabdab7d58ba64d603ed338901f1fc7c42083a54d61710acf015b32ea34740f1a95ba3bdcbe3430131678bba9eb71ae79c15fd66de91f2ce355ad4f56aae7323a9794122766a4ac3ad0b9acb916e768f54db8ce75f9749b50de9fcfdb13c25d84586f26fea97f289f149ef306c70a5d006d9777adbbf7c0de453898c2978ef7c281535ea9b24c0e08882e79d92760f662c903b85c55300155328093535dd268bab948a26fa793c53ed77124795e7399e2080479cbefa7c77c4c80a8d58e161735a957da9ab1ddb509a76fdd3093cbaf4ad2a2a243b2e57b1c3c3fc09251e36efaf987ee70f7b04630a1318d44eeeea160d1e61c0ac57183fda9c5c1d0cfbfd4d350e1c73aa297e07d6cbe1afe9866d5edaad7cd6851d349e73c1b95d82f35b186566b4b3fd917ebb6b01e6ea6b9bbb5b8087e9ea77e9433a29d4822f29aca6edcb42f63c9c5bacfa4175a6f847873a88b91e1770e733babf5735452653808719d1235f81e8d07f40f477907dffe18152ced0a41e4595018aa67480b7b307623911783f0875b86c3bfe8831d0173316664c501e272575be287202b377aab9cec7f6c23354c54c0a27ba3819830fe4702fbc1cc440096e570554705bdabd0033531b91dadb5a23cfa0c207a62b5c7e151b988754dd53e752cdb83df8556c832646da577420a6d82343b067662d8f787bb66c304e73b76947de37dc077c3bab1e3fcd83bdb92dc1bb6cefd7d80e0b6c2a8c9197ff97866c9cb33dcb07b39cf0918a6fb715f96188eea8daf98a4172b1880ab33f06bd5379c7f9549b779022fc16d32b61fb85e49633742c1ceb6c37f13abd4b85e259a1195ffce6cde59640161486ab04fcd32952304b3de289e2dd93b910c51d20e0f1b3db4a9ec2c03a86e7213149208865a2755bba9acac449d62179b1ba653107c7e1b06ed72aa5f159d7b35f90353cb1d2581c3ecd364915a422f2fc85ee9122861b85e61a55e56f5b60416e1ac3784c5b8308444fc586baea00bb7dc229cfd5ced9a22cf2e52ce8ee3951e9434bc999807e86679cf8fbcdfa43499209975b7604a4bbcfdb48eb02a4ab7b5d945eaf2df3b34d152f3116a3678313f596c7b297c9f5392b3e018e50f13f1437984ca78e17b992d9911e65efb418a0f5242b73bf814380ebb5afa548567cc303d9b6311e8f0a1e214d01781762ac873d2c42fd61bd38496dcc93ce4d66ecfe4ea32bda63ac1d3588cd9aabaef5872d2a09aede02e01be94ddd5e47f484f82c84bf0e1202017b7f7c8d3aaf0adf61093856bf94379c96f6f8727fc0c25336d42277ed665e21ad62892671c0df92a2a2049df59e544511e8fa2678b72b34119bb4583a45fc8f1b751b03d0af81b1c49e0b49f17b0d7c1535cf63d9a9b3ba20d9c6ea854f41ac5e3dcebfc7b995bf6f43b8d533b8a7942973e4a4f306e047dd14b6a95ed0e1fbde02f0b4c78d800ddb4999ea3cb5d74fc709d674855d358fbee3201f17794200238b4d8d7089d54fb1062ad35d1100e1669e116ce11b27d44ebb7fb65fb6e65bb72d11a4233d09d7890fe83b4548b90b807721d896df3bc7f50441f987f84361117f098380159247cbcd6e8c65db6420cd4b84423707f5dd4a64036330ebedb2cae781b5f7b20312e1d50a413f3796b37571c5541233ca86c731308ddad049b33bfd16b5fa80e0cb63ad57e441ebc54641804168e8c13e56f42245d3f663ec04fd36250e19109fc3d9bce3f01e66746b9a0d951afb5ec5b0598ddfd00405490a77195928d3cfa4aebc9a1aff15462875e7604cc4fa6b05354ffa5b0c9442e546421d1f80ab3ca3fe74bb896bd6f955f7c22eb501466451587fee43d4278b453ad6b7f4b01fe5f215aa979bc0d40e8183b2df8a4a6fc95e9c41e036d12e6cfd7abd805531923a3386b6c4ee987cd44f9c21e9292ae73871733e56808e296652685efccd8fb2c7dce431b9ee4d6208f493a7d20e0d4d002e6fedd7cd6598e5f8964383ca24e20d429093ed076a041b351cad30c57bf1df0a04a8ea79e20d8a648703cbd78bb089292e65e4e678e3696599ba6bdbf1862388b427f522ade7c21abd082b824eaeb9e5102027f7f470922a8d5819be086a5c2ef0b38e3403c80b7faad93936c82d1e0ae84b2cb8574c23d889fe90e81b2f07616d041c4a9e2ee527c2ef5b8192cc340f194f69a43bc67d13f21687e6c434a3c47b7235b2d77cdd97a7c328df38fc7a6615c +MD = 5e141aa560d2c531264c5415526a078607b12fd5720326c583d963ac38fd4d2e + +Len = 62008 +Msg = b8cb50b51ec51978b9895472091f390aa656aea33cb66728d4b652e8552f32a54a1189e7e555bc96443272c8f4943dd8b4ca7cb87b7e8088bcebed67e84a6389358d5e899e505b012a0d3d59728feedc5da949112f273848c205197312df673700a996434fa03ee1f3807cca8bf8963f2c5bdd556098d8916e6c9eb4dcd684d833ccf8bc022cad5d25f5f9c647b77b28a648002d16b9a78a498844d44d170394565d4e9dbedcf09d4ad37af3afb4e5c055d87a415a72ef5cdac2d3786e8b2c92f2c65e8d8c984ecae982c8f9cad81e2fc074123833abf62ea980124a451846fb8e6ef1357348110c8b6aab81a1096d9c6f8292bbaa4c06293f2bcaf2dda79bf6b3bdce3d7bd47f8ab7f3ea333a30192feb6cc071c63d6574232cc3183b2171ace81bbf4cac24e16df5854fb69f366b12bb9864038f665b39dde9c563696c1145b5f08a0a0f217edccd88a0b3d801ab6a677048180db0329df6cc987b6e72c3e8a2a4f821abb1a000c864a6d1eb7b2162785a3359490130caf53c03095219cebd389fd13688bd8d016d8129b9e28b141f75c0ec6d4a439fe862a1d0b51d4b7cedfe4addf4af2e8e064547f112c418cecce6093cfe185cc51ec662c526d8ef13a07d0be30027eaeb37d71fc5859a0c958f539debb1bc36eb95a8e9ab058beddcfd3b4bad05f8dbecbdab6f6eba6b4eb29045e4c1303db75875909d49f93c2d1f2dc27301a92be8d9c049a0b5583fc66df844468623a3c956e506e669abf59624589ae9a894c7f8f9673a1b60081f5c0defd62b0131f7532b0d932cd1c2bd1232a449176a6fd4f595db0547377111f8dc9c85fbfb03403c2016bed74ae79d89923c59630ee25bc6f544328b043c20822028d81e3c41866e7d28104f9cc29be18d4652375e94625361c949518d1051e222bb57fc8c92d1d08a6a10fd8ffac20369ebbafa202ef4842192d3009b96ae002a7b8bfdb39e2a4a8f054647eb3817d76e521b141d5716417cc858fff6753ec47f93fb8a780e98c4d3213a967723a445e6a4fced1db8d272bc935eb8665609176b293009a48a24269fe47553fc6470361708e6ede8f92fff271a6f92b3e118df3466b0e4ffb9d5583b797ee442a283904aa7607c45c136d0068612f5a4bd7206237105815144b343ef06ddb31186e63dc8a8f202fdb8edcda0fed04903931f728073b64a62d2c6cd03b41b2631b8a023d63424e7d8875edf3fab2ff7960a280d93934ca5fa0c17dfbeaabfa769dfb92cbf737f939ed691ec29b5b96526cb94bda3fa4efce09aad626911519d83a33a3fc98c8a6e174c8cdda743f6fc7a7d6b6cfacf44b6dd23903c4c10597045ae2a433ea8cde10b92599b017d6d245cc9b601de3bb73bb94fc957afd0608778a5912264eed1524150000d7f8ca64692577c6498662ef33cc85f99da78ed4ce43377c384871d2a822d871a699829c8e5cec57d707731462d335aec1431892650fee50ee59a3ad296d1f8ac06c87f141dd79934ad96489c563bc337a723bb7d85aee2ebd150aeb045e55aaa9f452f900219017199edfc5d7d86a162d9750bba4cec77428ed1032e5711b6fb7c37c1a65b3d041c7aa1d4f16bbcfc54f35001436b60abfb6544c0b393fc1389e5c5bdbdf2eaab1d99dd59c0e886dcf73cdb2681aab186fe9ed16ea6c24f793b2217ac3c8dc9fd5c3ec71133bc8c4a32fe3f01dcd387103381a29471acb1f1f97a56168df58102c1b18786b0ae754ded7fa31bbdac8c528356dcba7b19cb81ab37aa8117f2bbc235394640a087e9ee100930fa8aff6653d464aa692cd14534399f3a77424c1f469e1f2cc66c0f923484e20d28ad92bd1b10f43227ec9bc60f8cfb2f7f76ca5495e6ac609f7a0e15272f52642d8c2d3ab31d4e9c7f2341f61c8a92b0221b3503b7f3250b56344c1dcffaa35a8f919a8422e5ba11f639897e621caee6e69955d3b5afd5547001905035cd1b19d822a044704e80b916963c06e92b95f95659f26d960003647748a456609104c98fa90622a642e7bb66a32235ba9d9010f7c1d47862d0f662f3734ed8582ca4913d8d95c5cba8383f6ec602b4dc5ce753533ac29d2106f7776ae9577e2688449a693615d6e767bc6fb768a52a574ee2ebf12d8684dc8a4ecb661287efd18c2b0c9b0c4efc0369b871c8f2d440345dc9005900e6d49b4443856e56a5d4611fa30e5c7707e02595776d29ca559e7a70e3b9141dab36641c1ece0b1d7bd4df2bf2c832df0a2a58d3408c635af0eb316e793fa9ea9d5141fa26cdc3cfcf9852976163a8ac1d81a10b5af5fd096fd06141d3baa0d183ce39c6a4ab21d46ac7c24b38074346098d0a250ed27f3e98f413d03951823826545468e08faa94140a372ebfdb8d1595f79a0aa448726335004f03f32cd5894f8c9bc822a2e8789409ba2a3e080d828b6759a064815ddf0c9b1bc24874242bc41d15ceb20b62e6b46b5226fcb54bf3b18450d095a5c81ae66e81f58251f4864eb1cb63d7f3a0473ad9080b420bd0d1d1f7868381db3b7c8a208884e7eacf02b4edc36ddb822b04effae3bf58322385b167039f6e4c3f6dc25a3857c0683c07c07b07d504df8a839b77eb2b8651cc751a7dd00da5205b5554c49a5754f2c4fd38039f849b33452e06f728371491540bd3e1f4b66e7e189c0905b56aedb1ed4ce52c9161e7a5e56cf723a3cc491942aea63a7781108efdaaa9c69279d1cd425c8f9fe753325ef1a438a363d06e121ec559316255d57a92e7fcae376d496d4896fd04a944c286f1408f1e702dcba371bab56dbc1c03675fbcc966ae2c9db98960f902dd1be1446da7c53cd3c9a8f5c1f482978dbde37fed8fda95ffa015da8c2349418dc0d5c0ee41a2a6938e4d2f99db8856de20bdeac3c9f5e430aff9f8d948b66ac01ae623fb76ed04b862017a7ed78e53b62dd9d069d3e3fb4b43903af93508257f135e951dae70fd4b2f0efefa505e351dcc7e5868136c81574323c973540719d192833ddb51f13a52dcbae294aebea51be5f6aa47f3571f5d97facdcf0c7befbe809f44bdc73963d8514e4fd559774bb96087ef8eda6e7c64275d6d96c42b4e4ec3f8d14b78101fe276116c43ba51cefe257a4fc630774174db94d14fe6e0df8a44d60d0ecd3d167a334d62683713d7f31c17f1765c3b15959be62282d9624a79eb83208d2c8af1a7704858cc39870d9e2ea5fe26c882a1d04f9d88b705793623a1463150febd5872154c77f529731909416e9d5edb148c2cdfff2a77d2ed4b914c6668e0ac9ff2e10a9fe66d6da0a23c3eb8f7a7fdb87fb233553149a88532cad52ceec49cf868ff3789cebc6fd6513d0ecc34889638226933e6c4b6ef0a93d625e0eb84389061d18454576895dcce1697f27b8a0e5a1c59c8fc0c450f4515be23ca86a9e72e8661da46a8fb497cc0cfc371f433cee7168ad8dd317e70fb6189b631e8ba109c7fb61fa9eafdf27ccf6e7993c80e3ca6b7054cd25ae97af71f3fc85f393f1da0f3d83dc344f4f7a5a4fda19e1fa0c161a8d10d23af0f9600f6e9409aa0c175038bd01adddf6ac2bfe78322db2073c6de90f6021859772add8e8e052b45c7808ceea5a03ee3e6ba924009e692f40eb1e6187d12f980a9a0579036015a51d9a605c45fb53077f147e55596d40bc2f9eb41e86d270d4b2e5e36a4e91b6eec7f4f34b70743f9c312d182d132d48db3bdddb7a7ce289de38dce4271b03bb13d42e3e36da331e2f0d1c02f5ae5ce61efe1ee10fda8fcf1704e5642a09249696da9cad88e3e673326b67db598b8aad09ded851394048d5119fa6000d8982edfa33d6cdcc3ddcd348c4a6edc35b25020e6690c8a11e9c20506185342c2c9d05b088432b6b48a4b2d4b14fc6bd6dca999f1deea3b1f608354603097d1062d1824c4088230084cc9658a9c8f2c253c9b85e7d487ee6470b8884fca94754bccee84fe51c510672c2f25726b90e5cadd0f2aefd14b6d882149e7fa6fb2f539af3bc1dfe5641f7b3065b52b08655f6dc4eed2325f9e7f347b1fba8aa6591b79dde5248e4ec525e962535ddcfb7862b5fb1ec3d705e8eb1087204826f8f1adb35ed6f5331452ea5ccae265aecd30b64a898945074c917ac34c35dbf7ece2748e3bf47cf8bd72357a6ff814c805f422d57615a2eaba01f4f6d247b9250a9438b37b290103d38ccfeb597eb3522b2e6ffecaac20a7d9a02150223c2bd7da6fc1ca265ccb7cde0a8158905d8a76c845656c8e35096731d7c87a43fe7935e5dcd67a4575238c645311691d7be15a63a1ccc8ca98a351480cb31b3d73eb68b241416bde5b515befcf47c507c2002684aa6cb984bd378ea8a8a8dc1985c998c907c846fcf89d1006e6ed1556192e03b3c80de8c68c0c45d9147065de1b5aecb39734b3a4334ed33200c9001267b519796376fc97ed6c9f61b7d35d941ce78df7574c59e0f4aecef985a52f4496db8f5de3709e00c89dc4caf8986c4472b8a31db1dae1b7230326e6dd4749f48de98de8b0c3760705e8db9c41893bf5041555ae0ca4f232a996067e7077f72834263da032372bb78c950c5df96c72afba46cb31d07435576caf944ba7ffe1ea73dcc50fd193661545ec8197870ab97a7c922e2e641052305596f8d4e8a6ae4132514dbdf6a1ce2b18355fd1552bb65f3243a62d3240f0c54c925ba19c33073659cffe3107270c00eeb7d194ca961465c49f5ab7a1ceb71c3aece53b2c6f93cfd09cfff36eeec79cadbbfd674e1579951aef73531980513f05edbd29fe22fb167f00798b91bea8083f890bd2496e8ef51d7a188a0220633697da0cf37c13e6134f459482da5f574b8a69245d236afa90b38a72e3c5749807d6fef9220d0cfdcd26b1775eb0987b6d78a3709145d1656bc565a9e6c84595bcaca0ad3d18d3e84cee8e4baa7a32bc77f07e16f5156b79903c54e41b745a055d00074fcc07324e988d2237eba2f6c470d9433e12fc00db06fe9f4b0b317d8ef0b97c085741eed7baedb664ab8fa938601d3b126e635736d5f58e073d6874d87fc14700672ed22cb9f491fa71a916c34fa3abb793b0393006076940397f088c11ffb05e8336a5f59d8cfd20c658040b4653de58094d6e719f1e771d88e00152af5bff4b34c12ed96e9c40fe31043ab84c151b1b56a0bea2ab2101c7b1f127d160bd7bee01373681350ba3bd3a1581736ad1a9280413f16b2ff84f663c1c42b22c0d6d7072008595fac36e8569f3a1e4a76fd1a89b0cce73358ba921b2c8199c1b331df80f84e3bcc3abe97d470662b20bd7dbc3a1f51e63c4c257209a5c75383618d3af612c189e9aab5cce5bb78c859ef20fa0a035a9e2e585a08c7c421e2e84a2d7bcef5eebe486ab0e9f2d6ce60769a6b4681f3437999fbcce8de0e1dc250dba70484183263690934819468e39de73dc1442a75a9030fa4f274a4fa177c6da49e87be0048f3bbe4b52642d864db2c47d7557bf0f7b4efe26f4ec51eab6b8f235857c5347ef9c1abc74a76abbea2c656f20cfefbbc29bb4297c9a6c2462a35e68907422b60d01acccf60b8694d8f35d9c5dd1bfc62bc12341097d2ab7433124c8508ad6b8b3107b641fb7087bdeb0b4ea7485b8987f655354e1bd120c21084e3f0fe7f6b4a7748f6d38d378d7c60b7343ac14619985324d4b4d81ac89c4d0e3b413b20a14b2d3f0cd89895f0f56aba18e4ea6423207cd180f95f18197f432ec0ea6149b3f9cd6a76e5aff448d573946b3a262e4c9cbe1bc870136189f78d570370e35309d2d24ba36f35dafb8905c6b99f071cec89b14429ad978f90719637716933c51962d66340f9bcc28f8cbbd162a80fb88953d0eb13264dead389f810a937f52869263431ae09c7438b5ce04524d99279b9a79781136eb91bb9bd2d92f96189e58f9986476913c7c665762d824ea851d8e3d19fa6b8db6b9ab977913f007a8494e3394704f09c40c3b464fe196ea8a06e9e8e33bc6210d7c06935ed755ce757af1a81f10ae327c4e3eeb5dc8af33f10a3502a1e42ad9380553f947cb65d4c85ac7c101ec9af3ab68f7ac543577ae0250f9f3199c9f9d7e7a1a30fd9a28ffe8115ae401ab1b349a82eef2fbcff7430401bd22140c2e552904e4a048eaa6381fc6327ae9f539dd92c5ac261b3f36db41440af959dcdee97fca37b1ef64e868b3a1d5ec7f74fdd7d958b8ae7c2c3c5cff4266dfb2b3b842c9f59ecbbcaff575edcbcda08ccd6e08b7649af4e63f12b087225c3ce539c2464eac9e567573d549156ca200d7ab95597611db5e2120bfbd210d7179bb1706de5818c1bae35a91ca73abda732ab478b25d860256f4764b6d142b2ffcfcf58cf32d608e5fce0a30e24eb1ff604b9021fcb3ec974329eabfa6aaa31d2e707a5a6b16ae8daefe2bba78f0a6983103e8981dc16a228d86232252299ec377de4f7a305b27470d3a6638739fb12e4d1a64e3ffcf292c9bd4ca7c58da43aa40101cf42844f543e54b63b1bda4fa481c58ab0c8824513cd7da86d6a005bb59efcc88ce3d1940099ffac92d3d47aa6e0685661ba20a09dba862003712f22d58eedb3b1256212f22a10d40b4dbcfe92973683c1634c779907632dfa796e8c230a305dec85aa5eb15554c724f7f86deffcbcad60726a4cae3aa14cc2e1431a268781119f633ed9c6a2281040511b2b27a7673dbf560e9245caacd6fd57413f488d3c993a6c84168aa6f72a1df799c8c22dc2bf4e9c9deae84df286fa39ed7e1191ef3f5df01e97a5ca6e8efe39f8c957e66bac9ea4bcb91e2b1ec75a17ac490a2c058e6aac62cf8082eab961b6cc9f5167ae70100cdf7f4ff89e028d5f12429ab21c00f0eff540b376f833f8fc69dd372827b453338ab0061cdce3149e93dd6bca9f3171394a7da6fd1389246974e571be43f3c8c722fdd92e77c37054b59bd5ec0b8a8c16d6e8e3bbc913648c525ab980af88f1264cbb21a3db2e30f00be0618ced8672173f04e209858d49d396af4715a71e5cef6c7a77f393add71efb4da733b1cfe3a8c7743a8cd53134edc655d2f3e71e7c6116ae64b41dbcc33ff8561f66f491514a149945ac34b9c61955e0b591dbf3d049bfd9405bf5c585b1a77c229d32a53b89baf6abee20716e14b9c29775e248e907ec8dc361a862af327d42694cd86612d60f1ed5d93512ad3e868dd116b688270a013e465ba21ea020de2b4c0c624e67bda5744be3cef8041530a4fb0ab53c2aeeb26d41a07f54091b6ea953427cd8babef29986a47aabf3274caa9db86acf6524548d5de69c9d2a70933f0785649f8c489ae10e71a4a8faf33ef101b643dc66298c30f3748664b4cee07ee15bd60d4ce8f2fd5bf1f979abf78c3aef7adccd8e8cbdda9b00c9551884dacb792c2dac8d2e9f40e79bc59856a2b8cabf7c922d7ebc6dfcbce1d1c8c640e6b7277cf7e7bd67f45e49e5b57fbb834932fa32107697471119f1be3c3a6e71a8c474d4b1596e5396a7fb5635aa2b27b2061841b43368ab4ba4a1ec754441a57575f9a9e67c004ffaa06463c2a225fe97b6921209de7357723f75f2f951103ae14e2e92f3ca23db94fa2da4d8f24c864eb700299de247da295cc678450b2ac070af8bf685ce3974f9f7af8005150f3d5b99eb0ecce946b1d56f1bd2f4bd21d4b82c7a6b08f2c1ba9e3b728bc374dea252e1ab28335e006d0ae8fe9964f175d60c47a256f9c25cfaf6280f2ea0ac4b53a900d90c4dbb057a3e7ce7423232973301837c50e4c75bd4a66fedff0925c5afe279ed31988aa647f48d5e53d91b16aa2c6260cf367c5ed603558763797bee3583df602e90379374a18cdc44b5f57479d15718487b5bc65da18b73f27e191572f183ca59b15c3d8eea0dd9ab756c2140b4f3db532fd032fa15743c328377ebf6d0199459986314d51282eede83e9bd9d3bab5265d0941539c3a2389a3632d22f94035694a1e6aa05df7e84846df899cdd9efe5f6e9f1fd7b209801afe2b4588bb1d379916a417d9f857323039003567114543e8cf8845c5cd0b81fca3586ffa9be0c75d65e2dffe0c8e342f296b464157f6aa4ae68c5a24d4894fb9f8b2527e81d00f3e9f9e6b1980e517cc7ee6653397f85b0c1d7207fdaecb11d96700971f553634c32ca162313ca40390a03a3a43b9947fb6db04f3574519f0e2570ce5e2ff5a617575b36d4f28131f01f82f6c7ba5123ed08708c63a80bb145e309ce5d16784bcdae09b347a2c7a94a9ec8ca4e343babfe38b472aaf47f8a4d459793ef376fc6d7cd6235eba30208910e51b89827cd32b764e89c5bc821ac9cd3c6b995012099de3c01194171c4e27bc4ca2c46036a7a91238953f6c1967aad040399ef124f57495042e7d9ad84c963787eafc855a7c623eb13541c4f5287065cdadf4dd9506191c0c42c24a4c62fd0900bbdafad19b7e82212f73cefca442144b8d441c4b85b5003e150a3061d884b81ddc06c6814c2466f04c7c911725496622a235b730ba6fc7046efe52fdf555ce481727f154d77c73865405152ff1ace2bbb470b52bec70fbc51745ba090295d3e832e5843183af304c0fb5632a5194117c8b9c1e2364df23e8d688706e476f4d64f6ea86ff99e526a8453582f28d2979ceee62fb026be5c8d7746f7a120c09c6262bdbffa86145db03bd2c7a6ded92a41aa66a53af47aa71f9b9a1e2df998bc5959963f71323f8d9c640435485b9f81ac67c5b2e124055a6b66cc7b0bc351ed319072877282726a857962217213882613c35de9413a00ff0765788ea902aea771a3fd286cfb4f5ce208770cb28b35903e29c9a8e9aadffd5a1408d9a45be163900070a2df01490d587dbd5788472a488227838238fb14edf9ff07ec7c23acaa134287873738d1d45f659fb271cbd8c7663905f5cdaf22396d92f027aefe630381c6ac3604068c5a4d4ca87e0d8dc39570cadb83f63b9a781b5c4c1bab4096d85219493fc40edaf7c89f624a9a016d2b28797ead7134d01289c79648ff9ecac10ab709250596304547da5788c5cb580103b169e29d0f85a13f7149301a6d8136223c466637414ebb5189f2b90f4ff6af890f27c3f8300dacb2c5ef519a313ca02ef59b73d7a468d26c2abe6bd503db9f2eef22b2015aea8d7a51f33ded8e5fa7879f72ee75142112fe393511c59b69486bde054d46c4aedbfc81ff4592e98cb4d28657268e350a058e31d13b4f5b4243d65829e64721cd00cff25e1908b736408636d2cc816b7622a2a12d48e0d7d909e4ea0b2d70d6b7a45b1fba28dd9bdee3194d50410d4c17e2c20393eb08a5a0132e1043735278113f24567de58febf90512266a14704b41de72d5cf72452939f7f8475d686a7a4c29b25323df7e4c173ef75e8ac758ed966e1ba41a7f24f70910fa0ba37d3751dafc9b8246974710abe93f523cca2597882a42db1f7206739006a9e9c012379340303660407d68fe49ac50adfaad74fd998b8f0748eb884351316e4e3dd7f9b30e6d2979cc22625952f0e1ce3ee1c5743d1a3695216c18dadf39ddc5772eec35b7fbdb3b23f6b1a66a4f593f83f77590055ef021334446ae9c787edbf6978d9fbf74c220f29ad589f2203d7e645f23e564b23227e92480331b85a7ee56925c55975074d7b26f5c688d0be5075a994ec8edbc8305dd8d540cdeea0f98f1bfe6fbd22779abdde4a4c69d7b0666c13654cef2f659676aef3090490e0c586260abf6e2623729ffbb4d2895e6182952a6e46c36c82bb91baab4620c7a34a9234529eb6a8933ee7223b40318e580ab697b6c350bda80778a704df67ba70f07aeadcf2dbd050645efde87ea98f1d68980245a9e0485de2f21b07bc2292cf1f08f2b2a526c7e14ecc34c27539883802031124e2b9352cb4c6bebbc59876483f02f4dc9ddfb5ce62f96fd10b29a13242bf6f5a5423ad9ae5bd3a28e3138f64b8319760c44ec2a00aac551e29c004918f93c2efe968d831dd9f3456fcd904aaf25d844800bb14deadaf8eb0b847d6e05048b3ec87cfdd780534574ef933fea3564e639c3b6dd610b2c8c3909e0642a4efa6e958189fe4f7c3434817c369a5d54acbdb625cad2ebf83c09cc4c5456d67d3750d3b832117378096b2b940c320ca379e94a44bc34472875ec056134c82b0647dc69eb09d9cbfa5f33b3d5a89980a868d3769f0f741b1266cd84d7262a7080a86bd88875a9b1798238baaf802341b9d616cba33904d04c8b08bb2c9d104f62d579901f0a23dc8c3ee4b0802771d87e6e1da9efcd88ff4d5f4828cffdfc30235b90311d3bba9598d1b235f5f307ad6c7d72a1d33153008b5fe64e3fed509b48a74a3c118ee08525d74bab8f975748eaa09033fc09057c9d196dac0adfb019594502018a783823c9dbfb91ab78e3339f6410e0d8b912dbd8f868c2af498d02cbc15231e68c23e9eb4c5c78e81c2de5e1345f38e7c60da6e58952129bbf5a101688a53dc44f365000a4e8d1b3f5b9e8669dd59ca7c448564958a42c5ea5b9a9d01785959215d1eea0722b3c9d99f9a3860d3e8ca71875725ac2e96076a10e387f0a7dc9ee94992e51308e0a038d7fbfc60ee4995456f773b0749c6f6215ca5479cdf85b182ffe97896c9bca9424ae85ad1f52433de450d2e0ca3799af88908666ce8fc9cd6c74a2cf82df0ebe0428adb1bb120ad26504384250358fcd7de336bca89e867cbe9dd88a1fc246efb050806a6eae60a03da3fc7b9320a23a7a24fde1d8cf1184baccc14f9feff3b79dc8b64da671e525f29297e2ff938174e1e8348ccb7c0b93d5a3c5869fb2a59440f3b7b20f26f8e21862a32f11e8ae1b69af83041d3fd51883957dd57ba4dd042e63fd6de5181c531396a6a6669a788c55dd51ee3a750e91692452a2c040fa95da9c0fa7d4dfdff778a10aef6a4381465b1439a1afd5f88ceac2ec751a118eb7b9fe57166ae8b44dac144860995e48e7ddc6a2d4e9bd53698d1393d2c59119e8611 +MD = 00bbc70c6568abb4be0e21585d8803483db82b033da7c9fe54fe72cdbd1eb61d + +Len = 62800 +Msg = 0ec665624d978974dbdf17d6d3df9fe8e31ddd844f5adf8e39c56acc1f6e9bf8a5fdca1495a4b3fe2452d844772a21396533c6497f516e894d749992db0f3b9074cca996ae7eb935a756254c8d5b312164148eb103877d45606838460e8a8d520499cc8fa00be340ec54c8961f5917c86728fd66e5e654eaf9080f90c1c7d967dccdf9a8743579477bb287c9340e1b55f6d7da0d2d553b9fa1bee816fbad67f785d1f98931e2c274ddda2b8dd56185f19989ef51e1bb798cdff28983c4267e29850c94d9dffc07ed99327c8c093a9cc3d9a602d70b0257da3b0abb7d241a672566e59141876a90da3724416bd881a9f43d96dc4ab2111db13d6f46ac246f6b14afc6ba682f14a5643f1744d54a1ef4ab4ec14550dfd013386e89f2bacb0ed01ee916d5f7e2e28eb33a734b7068fac511929004919927809855c0874c22dfde6a9b3cab95a5bc92eeb09f1fe439fb644e9369e3b7e8feaef87b7dcc0d2fcadf214da204eb828afb3d270588dac50a1889d9b5a867d43de38166268aa2fcb8196a88afa8a080340fc9290c4dfa15102beaeadd1c4b66cc685ba02589b6918fd56ed2cb5e5da7a217ba3d1c38eb30f3e39a5047070ba59385adb1e091eff4395b54b65eefca00bd5a38ec9d0f561e9d89c1935d314f9a7b819f1fc16af52f9cf345b9d0248e926b226abcf79be2e8f46486398661be4b6aa65b742edb714aa2e569658ac3526695b5783793a43895e2be12cc296100c2493a063791ae0b4b3278e741f294bd82245c8be5d7f2ff2d4edd8dd4b0f7be070186cbf151a96a3c33f6e8d5716178f0fe5fcb4d2c4ce0b91f0a1ed782eca02078d2d029d69537248fa593aa70f02ab80d065ff7fb7b83403f8ded5f07074d1798663d678839190c2dce1147550a7ce037996f6baa488fca95ae23f3a7126ef448893b34cf5fb9fbf5b8893489771672665f2532a378ad6009b5e81ccad3aabd6f84f21613cdbef9cfad24fa75ff9f7581a1a7d34cd6840883e96360d814aa7cf79f8997bc4cd10fa3f30a20806ac0f270a71dd60f29bdcceb94bd4a399b1538c722283f32a49a4359d3622e117f20f01bb9b0c45338ffb429fc1d5f553094fac755f995dd9dc09fd99554ad920768776a1f87237fccf3c72669ac29959dcfc9df80212126ffec2b0b810a246acb3f904520cc7efdad400dc825922f5fa96dadf7eacb6b7391c5eed8dfa91b01904e419406a45a34a38f8ef877f6f91c1b17aef7dc1dfc2d1cf4f026f65c1abf213c943f1739418c7688539fa6001035bc74d5c79e3f5bbd682039df0f49aa0c45b2912e9cb3ba6dedd263a3fbdafb10542d2950785a10893df2d2e972985250c3583f49dc3a4e3fd216c6eebea94217abe9b278b296a4fb6312c22e67729bf364d5a67921f4836aebfb856637986eb188517928931a9e7aa127119436ff0c5df0d2cea4b10ce456012aa7f5adcc0645b40c8549640f866dc1d9c70526662df62ff6c0b3d5a8f66cdb4a34826a70923df8c3dfc16e9ce53e89d2ed6880d08627e8ea838fd5f14312430435f4b4aa9a001a1e8d7af6ea4154c2b78ba48d64a056e5551f1ef90e52b1ff00b135d4a2a7f6e2c4995a472125173433a7a3924b02edece09d4a8927abb2d8e5b02c128240871a5e0a4ba86816efa6ec4b4cdaac3452c63304facc66d77b965c3ac1b56fee1b8893e93460e79e44e18a7e87acb0bfef3bf55c160bf15d76010c58dc0793381af60c3dfcb8c7447eaeb6493c4f7e2a2a12cead858ef0c50ae09e11654e16a6ec2a710e8df8309005d318b2530c40fd6d156800319d8c989efdb96e44d320c0f9ec6965ce68490b421857c4b52b1bc11f0a685c0180ec5c9c1e067562ded70faa069c49a74f3b3c9b471b8448f439fda7ba79cadd7e3a9c6b0c2c30a5b6661a653eb3c200f72dac79260efcf5aec2396fed4151ade19bdd738fd4a7f6a5f369935e56d8c1a648e1457fd633a5a3defdde6a68f959ef39a91c6ea6e13ef1a7859d2c2c94d3a5b46565181b313e19b3d25cfb97cacaf13c87ce7349e663e3a9f5e971defd1c3c98c043b986ffa9596c3f516676cde62ecc00f16466be4fc32241e1f4131b85b21c78452cbea4cfab2fcd2574ac0996f00f9bed0aa472e8d939f2ec7f74f7f6516a17d5386c289756240241ede286c37d30e02a2dac08186c178f71d8a998585fa7255aa43894e8a475690b99bf4d531f55571195258bc5c6e3a0dac859079125fe283c39c9efacdb4787ec40ec65301ba7890809b800d92dc6ae8e172c4a8beb95aae2bfc841ca44c5e64da910d640bc4dfd78530d713beae840f58dcc6b2cf99432b6fedc922a27140d949dd4a96d496f3bca39cbe5d34570de77f2de715e9624491fbdaeebb4cc5f842be4e0e59d0937cc64849b65898586107c0d0d65080b6d7585c6e653507accd47846db92ba45cb37b0fc24f845f4545f6ca7fe4e12a1964150df2bd3e67b8384e58b6db9ab46530414680fa6efd8ff52af885c34639dc732e9d125725e15ad1cd87a3f615851f8bcfa9103776f7ab272ad78cd20e54a2ad2b6637d38a0917224bbdcf992a9b1e1e6c940a974ad229345cf3ff9187fefe4a8205fdb2d9437f925f579435486ac380ae93ba9a49218ca557ba48a2719d3203c908be65a234e6ba7ee19c3b0d78c22b0c24aaa1004a3802a1a7125529c3f04176cb147c63320ef300e8424ad8497c961bc3754beec0cdd4a156c74a3ee7bb8c01d97a679adf3ae4abd810c54751655a43fc950b8339c083fd25e1f21f8cf65bf0c06a97c7a10d07c63da24ac9350ee02b3c74606bf982a91bb0eced4a283339da0c5fbd680bf7c4e685513bdc48fba0280faddae7a4b6ac6374628c5d5de49e1409e428fa947da4934bb818ff119e42c0e2abeba4bfcf168adccd5fb7729d013565727b0dcf213f42fd3182b03389208c51e913119f2e6ff87697e7e71adefbc49b9514001064fd8c2677d98e031ed1f0ea0fd1cce7672112ce5cb57acafcf63818c6947ffccb57b533d5bde724f1cf84f76aa8251d0bd280408638d0f7a9790669816cec08c6e674c1f58069fd9471bf169416b8a48eecb779aef28815570cb60a401db2b8ea12413d31c16511698115d416ae061262e83ed621631ec87829dd77ad17928197738122150196f4f3561fac6cce7beb1a4d6ce2981af3759f48d33e02fad9f76182dafd39c14e1cd46932fc0108b8932794e82b7d7aa4a13ef24dc9fc38178eeab8b54afa7118fd5f43066f6ddd1aaf1d47371d4c12b0dfd9ae83a7f34fc9bc759d8687f1a1761b266bf0631dcc30936decc0448e738685e1e63b5472b26f149499e53099c2f3faac6c87739b5688f49bee1a1daf0dc4380a21db6c14f0860bea4647c16d660110739d320d60fc822719d3ab254851c86a94f9da3b349a9d16c91b34d6d70b2bf0fe9696bd092ecabf8a3609d7c4d0219224d6be6e6c0122d9c39122dd8112d310bfe11bfeee7db1324f7dacc1bf195e433c30fe5225d495a97c309841d61da4f42a05484f9b69d403ec230a5f818ddcf23d9110a2ec85842a25820bb050ac002fef5b923baa63b1c8d2beb92dd6be3c33cb9fabcd4a846cb0820e03858b1e7308528c802f660bc8e5b5b92f99091aea6c4885262daa51cdf0f42d064de0158c2215f098a788c287dee7aad44da33466204719f660968e16501e779a75e9f1aa117c2052307d188d390afc4da83f9b4dd449a6b2f29999d452436616aa23635b3b27b43366ad7e37786226023538aff01cc2b3d2502e05967c1581213706cb2e239af4b296a4741511bfc0887128f2fb4e34d9eb05be31cb31f74140c91e99815f389a666cfc9aa499665456e87af4de0d2271538fe4dee1188b3edbbcd56ef34292edb53610427473e849e407b93606ce2e32a25b1c4d769423d278aeb5bc02624c9725ae7a1bf335d829b65b6e3704058a665df3df0e0a3963949e0b59f12d52980f4e22b477bf53986c446004686447f9b4fce6a7b10a7cccfdc24f1cbed28837be852f39f61751ab9a2492164a8609ee76f5bff0a705d2c2967c06886590778e3d61408517c9c4a43bcd7e0e6e17cfcb54decc64806adfe6c721be2795f5a52e0468f3204d150104b9a5906743680e22b72eb85dadc8089c3869d274c06095799c12b38606a7ab3f9c5355bb5b154987165be056bfabc16542aaefea657fdd037ce50e40f4e037c76c4d5a75259e066b0aecf0ea1664bed47e6b6302f581c04e1f666fcb685d1b3ea1f9fb2f2360d9410d68468242a1356c5421d8690134f3dc0c0d5490018cea07d5ffd443e51c169b86447da9d4efe99f6c74bc571907fc1fcb40693920ee08a550b5624deb1e52ed1e07f2db4d8f3fd01fca9b879d692dabc5a5fa2176ff1bb9dab111b795e622c82d3932910d2d9cb0e699d2651ed72cd283b493d3543e8797bc898f1b7611ea8f4c4ed965a439a4c479790d6a1dd05e56ade2d2e9493ad0d17e9526e42c103ed4e3bf43c39341dc5d20deb9110ae3569a7cb713bdd6628bf9a96a759bf86f842b9c010e356ac4a81d753141f4669e8a00a8b7f2db8c541d62c57ff7cd9b9e4ee5ddca95258b309c77ff27548ec1608d3b8a5bdcbccb7e09cf4b5c29d3661b13a61162752e85142def17174d4aabb7c4bdca195dfc244ed571b3758857e86466eeef7f3abae8fdd0f56587b8a27622c4d9c086e2f41745050c8662afc5a308bd22b0673255174c2a2d630f1330c1200242061af85f250f1cf24c89eca726868ad41cb10877a09dadf98803e9700d4e0179134c2a77ddfb81b57e71db66d35c54957ce329bd0550b0dc5d0c97eacafb46d170a0e5d892a8e7e884b1089f3a08aec96984227fc603e7684a9fcb0b7ab646fd969fb71be37593ee07add0baeb09fdf26b0a6f4a5325c60fe913ef4cad0d86500dcf1a9c61003a486feee04436dec6a2e9ec8ca74d44b145b12f8148d27f997b3e858cf46bd72f8a25fa93c5ddf5ad4d6eb0f71114df5dac2b490d6a7b7ad4c1b1798a9e94490825e23787ba20fcf67481ee2b023a540f95bfe6f03c188ddcd60f0190054af4389e0d4c288ba043469a9bfab5052e416bb4f78fd6382a37263a9fb449b3206755750f9ee2c4ec672232456d11a48135e66c6aaa2bd930f52541ec17f44294f0d32d71b662f065e6fddde6cbcd3aa3a0043e71dc7da9bd467e8e9c933c1e194f3639dc1915989d315df0288d346235fe39adb58d28343fb97692f9bc9db04dc0f32c973d771802d4b70b633803a598cf1b3cae32d7e338bcc1d1bc0a75a373049e683baa0419275f8d922f42b76f4c811d5db473e93128ced4ed2bf3706249789c9f51c548f68b2066370533ac39d1c2b4a360b6f8c8907e2427f20e0a77319b72144235b24a9ec5c53c5d816e9fc8e285804b727303f029341486c0904ccbebb379b571ec8fe2be2f44c0c27b0b829ee486dd4cd46dd88e895552a1ce6d58f7d53203f03420f78808d2a76d5e079f2666298e9cb970a9ec985cfe280153993e5bdfb63735c83da1e658a9f8940e9f378edae7e88eb6f4e1e58de1d9d599ed2dcbc554bd7dc035aa4c5920da999ae330d33d61b6c09b39fcf57a961db7aad5548995680958b36fffaf56a4a9fb370ba0b7a3949dfbb7f9ac4ca5939a23f0d23139d25891731c5d1093d3bded156d8915c0bfe8f49c77b45e5f9152a5a716644230debeec39657d8b7e52d4fa94a8dbfe62e4e7612f64eaa1b2b06be6bd862c16234cf380381951ded3467278d56384c932a5185a210a1d14ca9547c3d3ca7a1b659faee3ebc26a7947312ede744814149492e4462dd1bc061bc26ec3865ddec09c39398db0db47e92eb552a1eda0fa5f2d10e3bb825658143aaa497c51badab42bbc3be443de4abd1e159659ae18b80750b18f30daf261cd8bbf8044a25bfe54989b2e9e014603537a04526c3209cdaba3f75f3ca4407970a3947bb314cbaa2067587a01759d024ae6f42f60161ebbca9b54cc355acb0fcc06abc45e05846ea61c76b6c51d6db811d95785bbc6a202d2ab4c6ec18afc853e2987c29c1110cc642c685d4f6512a536b5b0edf5c04e23625850bf57914f8a25709b2ef3a3eb43d91bbfe606e9365a282092d0a49f7d9de82714266e2a5e7f309058420b5a9e65836eefd982264337649e7fc63eb0bae2d29be94c8ba283d4ddfd61a439918491e19a7ab05788b3cd8a83ca472ab08092b02b428a16966a4b9c1c39de04e548597222e2f2ed9d229cf87524cbfefb591e1f69d277c5727c23d971335803c2543cb3acab29baeffa264ce6f1dd320dbef56ebbfb8deec333fe4490f09aacb522bc347c55cd55ddb4e9e65dc3f35a742cb92ca6404519051c4b3c0ff42e663a5e48632655463502ed68535e1d96deab2cb9e7cd2325cab4bf9b4e22b07bc6ce4171ce4f3c3cdedc0e12124c5130453f39a81e8516b88a5e785ee98da81b54ed86b8e44b6d09c9e58187b1bd2168149ccde43f52bd75be6ee1169cb55d858714989e339f8a457cac0239a034e0a6c330740ed8da69d5fd627442e61e5332d3dff1823adff6686d8bea986c282174e7b6a6786970ce61cdd5cc74444d0babd1bc1c15687153fb2321b524842b663ad88befc16faa3d919645341b35a5e978f71582c85af8057623f9ec8e769321914c2caa6a6a0b49fded1d55b848dd9ef2ca88d00b80c88d51e6711b06b213d5f0891580e3c70865ff38eaabdbec387ed1a2926e5f58877e26e123ab5dd51205d135d2edbe3526342e1019a0e69e6b2b6e35beb85460a93a5dba8e37d44e1243dbc8e15b6a02e91702f946df68edda0750ea5a685b27b2647ec91d2b0a8b88e248b8cd5477dec591065aeea1f3390995024711d9041c176ef2a36d0f711c0a93c09c036358175034a0bb6db2e63e7e76fac26194cfcc5ccc61bfda4fa88e0bcadbd900029b4afd748aa1606ce23cad1fb2e2b6261ea6f6ff4494f186014000e9f3065faca1f831d2fc93533a57d219e1c33eac07814a8a9a03c95f2d1be08e839e8a8eec1c9d91c2af17b2c5b78d497f942cafb398056c0f27a35fbf78de192a36fbfa2b5bb9a1d5ea950b8991ccb04bbe333da4b3862fd138d99fb77897154064d14de4ffbac68f6791c9e0772ef2d899e8d275744b5a82bfd27bafcbaa1768a080d6c3793f94518e947a74c8126598cfc41a804aa3609615049ff2c295a3f562a1413148a68fced82399b105259d1ec84b526fb74cc67de106693afdd82f9933b909a8ee9e0d49ccb5b42fdeb71ded0bf5268e3aa610ccac4e53f2ede02ea68c1e9ca4eb74b164d4d1363b95654c6603380386552dc3e4cf530c95135c35afe46866bfcfc900b2a8ecac8ec9becd1c66aa85c297624468c2aaef9bfe9ac937c51d14540c197f85818e9373fc01f4927ec309dd61d236cb3ebc7992102a4dc0b6b311fc00d48280273d67959cfd774ae3f82c31450c0f7e9c1e36f1e89957cd31a0ec227e88be24e25fb56e4cffb9c80ed04968d16e33155326a455f8566bcfbe9d1f71b5a486d64b8bf9585c97307c87e20dee677746020c8c4e18bfeffe4ac5de084446c67126db48900e6c427fdac783d62ca7b5ccd710b5a0b4bfc483c0d00a4314c25d019919fc35dafc8ffc85465c2ebdf2b81c07182928d4788290b475985c8d88e6bcaf703d47588dee3afe9cc1941cd8ecc8048b5d52e26a98a9b81f0ec0f93ad216cc8672410170cbbf99336a92c3dac25571d2c8cb591685332e44e3fd0228cd8492b541bf6075c6fef792ada74d78e758b18701deb2fcb6c1998fae7d1303379a7495121eefed6e7d9c43014e0423ba2656308f298a9ddbd98c47c4ddb63a8edcf4ae69ec1a4810bff9bd0bf3927bb962d237c7184a6a32ef6905dd8b563f51a09559bfa37a365c4a8279343472d17372b83550476cf27a87d2524ef29d922ea9d92f99d18a08af81d900009d2fd566fa7a91a1237cc701173ab59fcfd6d3544d22a87ef2c46f990a7fda077a23e8025e8bd53039044865321498566fac6380ff145cd593b3ab9758c96f9f67e999e4137e8883e46df7254cf282f95e88d3235420a54410c27d28d148595ef30b6b7aadc51422d24463bfec570dff18f692c9d0da2a31068b34dc289effcc87e3cd34a1f220837f121e9374a481de2b6032d2f9a35432f178631fb31ffb4eb31d4fa08478063c4741785e9a7d872d027023dd330eaba04e149862056da47be112535cc9e95da3c76d115fb25496523a80f647119e992f98ea454183eab3dabe5d88b7e6a89f508bff7a4550ac37f4302d2abf19b5b5275e53ea4cd31981c1877940507f4843c8e173037df9e6d4698fdf2193bff6883e0afc07d2679c96e6f8d02aa4d84ad38374624d8812b70448b6018b7388d37aca1b4d1e80b5d67ba17f0c98239622c706b137c8e23f7f40182f5eb8cce8cf15522bc1aec64249a8978689295b3d52a6c9348e062ad4b2004e68214a0e646bd07ca8f439119178962fabc05eca426cfb515abf75a076f1cd520d03afb6901c44801f4f3df137e5dcd05b6c98ef29e42d25b056a8119ab11fc96a706a63d062da32fb5d2df38a13d52011c87838783ac4bcb1de0dccc472701b2ce20a84c9d219dbc98899871c7527a56b7e6d4491d34a9cfbd0275068a856ddb0f2f097c0dc8c01166c012a739c4cc6c4f8f8822b60373ceab7853b0be54c87830dbd1b7a0499394e61e56c040bad1acac29a7f994403130b0e97eb329bb98f3face09e49ccd9eaee24c6ba6225c0f7c955d3ab500146c5c94fefff513e367b335adb9eb4a7b6ac720f2593f27d31045d3d3474042a7aabc1f5edd60c6f3bc20a923e7b4f27c7e486ab7297599475c702f32d981a22076b719b120db891420a21dd69d26dcf762978643e22ebedf79636e23f56068a755b549a1d14da36e1aa15b6ee22b4f159f1e3c3f8c54e0c4f1885b4da5c5db66d11e78d4f6a05d2832852994bfaa95febc44565330ce451e4c46bd59f0984482715b6ef29abbff6bf0b650f03a8cf4d941709a26d584351410045beedfc1eb26bdd2f3a4c286d15edd9d98295eb7b5ceb70cd261835efacec72cfeb5782918783eeccf9278e91a2a80a0c8e730141f07a57fc4ab4244db75f8256e55c5b613a07b11c963c3cc24f66128aad4ba8b7ca9933139ad1b1e1f312c577377ce5123c7fdaaabbfac1735eb099e0496030512df098af80f15d40f29ea2ad5c39ae392154a1d3b5039b29631ff689fd513682bcf90f2cb78394ef386ba065be03152a6b1ecd442bb74858fefcbf0433af39e0da1afd178908e75136f2453cf779b88a8c46b3587ab6579674df69cb76caa8d007eef8fc8001c2fb60db179f72fe06bdf754daad4c61374687407d6c514401f4e8ed7948370eb652588e8e09bb109e595ed1c9aefb4865fd88c860533dabe3a3df8ef4871870400a90752f085a51edd10535f6da11ec62300bcfc90ca652bc817e5bf1459ee6ee688b275127cb1253a9ad09f8ab2acdca6282df0e1525e8fb0227cd05e054d31010ab2dbac478028e6798c635bea05cfd29807ea5f936cf2daa7e6a98f3b4b5637792f0c28afb82ec8f5ae334711d2a78e9771727255385d2eed4ad210c490e3721b508fec7c0240c8585f97b6eeba6cc16e9311825f6ad7943ed1d44868c5e3993a3eeb62760565cee8c618104a66275566964ef77aa969f4e0a2369eee925b941c21abf0646aa5c2ef0c3dbeed7de031c5a2b23a6e9d1a361ce7807c209e554b0920540010d8088cb3588f269fa89d3dd3dec4b103eff2423ac53b49c492d8a64b6370f940f897157dd395b1288f6861da730cc50047f9008266ee6ca315ed8d29138643bd72594394a4d7c74fd94885208912de2f4c38593cf2214f85d09be8ea581f464fed57ff42f5ddd1dd2f4691ee465f6556a7b633af905c59326aea9fd759c269bd119732cdeb30359b38686d8cd57ac03e007b78246928f2718ce29a383ff717d18723c27eb0575d4e9db802425ceb59affd900ee3a50c820bde8cc1553147b551f703999d6cdaafc1053e3658043b977149fcdf346b9171c907effd755838ac06083d9d72464295bb1901f215f4f1e14b8ac7d15fe33d2871b01334e1dc5464b863dbb8446715760381091fc35595a10669faceab379b0dcb80014fe2e423452fb0e4d15df7deba62e45ea3a84eaf3e6a8d9cbd628c3089a120c037be982cb8329661cf031d22c8a0ea09680c08c8203f9fb585ca0d8605b93758d2bd21f7238bbd599c7f016b0a853c115439aa67af4d464e102bdf24e7dc6ed20a29a70cef00ced41f19cc40e7d8827e51765d15535c2b6d45cf2d9298d26d35c64851f4855a71db4018a62ac7636358460a49597433f51d0cfd1d598163db89ee6448364b604d74e7c6b6b012ec88a81a3e95bb7a9b4d634dfcd700095761d769c3b45aabdc0baafc69255a313c9976b75a6ac3cd5cdb49f015840f9775a62621adbce80c945282674a1ab08a1b3dc804a6effad53e46d6de904c0e9586537efd6c8869d652cb0610b1be3b86511ca8e9694de7fa093712fdb556866a520fe7e547416570dc1e3de0e539828da5df1d4eedab13a584550636cbcbff7ea1836ac1850f6244faf22fbd30b20d08e02e2f1b7832043c7849b9721cd2ff393b560e796f19eab976efe590d851655dcab0e73853094429adba3397ee941003e831dcf64d88843717be6642264011f62b0e4c8ec65a5bd2eb517d8e8a39b9446fbcda1e6783b926a407bab962a49939cbf06703184acfa1fab69e4038e88364999e12da04330fefe671eadfd4a8869072fc3e8093032afca1909e9440c9f4cb2e808c136dc010f8a5a5fd9bc4715f62e7dddcee7dadf34da9878671e90596e1f6094fafeb5144aaa84bfbd4792aac17f33946331f6fb3fbdb445dc17cc4f10fb8e26398c40e326db90aed743cf9f6175eb98639c172f16efd6f2b6b412d8bbb3eb2d0b4402062aa9e8ada625506c3c9f004a2e6abde350ed7b0f9578069ee4f4e229eeda9af5cc72074ca860c7a9e9770c3a52424da084333adce6d819fa231b1dad62945e2a92e +MD = ee49e9c7d0b8b387300437002fa6ea17fd98f4a353e81d3097a804ac04335c5d + +Len = 63592 +Msg = 16934dbffc3c84c52a3265198554a3b4f7770d35705cb7782adf546a3270e71c24c79b1635d4eeed77f51518596c9cff6d104e556f4254a88223a136bc058d03e51fbf287c84516efb562f1b5d36c00cdc00c904ffb58e44d4b93a5c7a3f8040e301839ed834f36f3ebb79cd979b5604ccaf47eb299dab75a908e78374070afca6d6ad2052cc1e19c78dbdd31181a50ec3858fb2f4e0f46288787253b146715fb4070655f13418941e35c1d8d3d2f6534bea6b006967b134f971a17639e2fe9097fa56e6bd552907cb194e82e37491fbeb46a17d8e1a2a12845b3e9114c5f9b8d719657abe159b9a56a32b794b51be2d2c01fad26de1a625b29e0f4f4bd5aafefacbfabafd5db477483a2266134fc51194833ea70ea56f940aa2dd55e4fc588b8a77df4e8116bec32945f9f14158edd0ad3435a3774ccb8815d06f4eea204d860f87dadd5226ffa97f2e79c1df538092ff7da66fb2c00329598e8fe0622bcf180f62b40f7977c04fd45c6a7ff427c47e10c45bb3c7e75e9e604503b3560427691470358efdef48ddaf3794d289be02bd6b721a16bcab2610b25e9470cd939da0a51924ffe678e17c9927be63a5ff817695f0ac409bf3a1a6d53f0abfd0c078e64bc54a0d3df9d1541994b2da50d28bd217a5d9da6ca6198953522d47667302628cdc705e0959618cb7e636de921f66f97af8688c35aed4e0b4fec5b19794813df3c65c9a5282d94cfb85131774ce5b12465323fd00f21bd47eaa99a46b0b3e9e05ebd76a205b81be6eda112efdc8b246011dd0d6d45a358d3bc072c9ebc081ae4cb4a8767ccca007974bf7cb36f3b3bc35bd38bebace6c3272a718c81e9c92944f8799656dbd8052fe418f952538a69d699d235eb83606ecacc753480d85b87996cd70dffc1667c52c259f35d480d2102624595ed97a4ce27088ebf1be643c85aaeff68e30bf9e88a85df0524bb1803ef3baa1652283863d4652a76d3b2266df1253f31711a16dc4fa534a9591b4f84e58c7c41b9d37fc24b68d50618ca57eb056632f25a7a21ba1ab6d74a6ad728269ddb38b29517ff5c049a1ae78b7d7cc1fff86715efbabf2464215382caad266b70be7bb374644bb3886f68958c69f98559423826a14a538dc47b25cd08dbbeb5f69c91fec856c94b5f6f4a9a9c0e4297a9da42bf2fa76368a43aba93960175a8a80c27ef115e0c95f1f04d614ae90c8b5a270329eb6083479bd6ae70f2bcdfb5fd63b9fedfe89a15d8b8cd740978abd2e2cef5f154f417ad03d56defcf4c51607f59a4b89494e66d8c2f675d783ba500ec2897c00cd0b4fb84bd755a6c5e7f3a965484a6dfd165ef74aa8787e7b08c97deda64f06394dfd59705516b5a51bda6eacae644022cbd3e3ad0ca8df855c6fa234aea2d09aefcada3338e7d29d49127e543361abc1540bc37388cca2ac9e8ba61f093b05f8d8ff641de991a5b359e400e53e0855e0994fc02286ae6ff5b665b0361fe24e5bf2e31eb5cedcd5f133981ce53922e78a82e602446d14ec6a8c45e902596153cc24c03183508f0b5fbf76fcde8b7708c4f71ab060a5c7c4120973790a1d7fbb5256dcc40fd774ee04e6c5c5579ccf6198e031f3ff968f9df5133687d6d4032ff6708100e2cc5127e88ecfa2d9d4f2990d2574f2a8a833201c93d83befe7b656bf5bf50d8395ef5d13a0dab9eb9ba8592bae2bd6e3437df48e729fbedcbc60d9b5fd80127a9c16398e052f321559b849fb639ec638cf33c15396d43825bdc95fe03f6c3750488d6260a31636df76eb10842d14eb30b41e3174e9bed05351b8914909ffa68c001e819164d6edd25a0957cff2d76c525a06eaf852a7afeddff617f7448384b62e8f3e2a2fb97e756ddac5e29c2d722729b394e7b8d5fd7bd14c98f2d63efc5639a94031eb051150182503c7115f25368aecd84a0591e1868e7fbc43a97933f5893430b18203d0ecc1b4b8863bb4ac07e37a5e28202383957e5a2cf1a47b541a86f8b5afdbfbe1d0d24d8d25007630229d26cd89f1d30c3009a49004ae8e854e98bd7835de356c84b1b92aae4aebd81021b6cd7560e9a4df97248f85b1f8ee18274a214a73f89a91c8c03628005dcd58d6f208f555ac722b90a3d27b9402b9009b6857f7828e927e7d295a9c0a12368223a42310b8659f9b5ce901ee3ff40b8e5cdfc243f33d7dd33abe3d1150533c167292c9cf715d52b863bec3e699160f4bd2770b36ae4e83196645888fb967079d2a85a03868d9b4080eeac06c8cafeabe65f7dad89c09cbd76887e21f2f98be9fb24550568624ed15c334a1870009c7707e29d632a3b57e95aa4cf4c79a2c8aa2749a822eb1852467eb660e40db6acce783d3a84bac9bc3dc935b6591e06c9230d74cdecad2438284ef46ae9e061b21addebef82ba004c3328b7ede85eaa0ffd043220b31d2a72ef6359d2aa96964ef4af5b26ddb6536a622fa7b07aaa010f80b20e6b26b97f9504527322969ec8c5e443277af62e57a9331481b8708ea03a667d75e7a810b8112f72ccf54e778dd9525fcd467c80617b2e9de2607a7b1c3306ece530c7a15869a96ab3a532af39dbd74ba923d16b2572cd122642e90db96bfa86e8c0f5e9c5210aa0e3ccd3a4715fdbad679d853d08029717d9da5ca52c57b9c1fd32c358a2b9db9bc9d6b205a8d7e7eb751e18748dbd0525898135dfc978bd24aee0b08c65a694d1d25d4e3164d6748c5e2ffba02b04afb191e2152c35618d255a653de38269bed999cb08b619ce1a168f4dbf5e547bff42af777b08e484925aac3acc0c8d95b2298c9a92125c4140f084e1c3fdbe756c6f1ebbc7f44b74752af0dc0b55ebad372827565ab490b271c0db96ba1ccd937f8d8c298c7cfe939e1ce4c34c5e2102868bf688c34b5ba4350dffd70229e668b124543b5911627485a6e47b3f83c248589b76ac7c151188f32e6e2d2ca3ad47a9da237b8e401b89c46f6c7e357543e105fd343be5c056f344a8b303aa1886b2b2056664cc978e65c2dd0946ce912a5f17179ba180cb905592034ae4fb07075c723c998174763f7b1956376f7b75fa3514712997dda5524273d4b25bafedb38752e6395c166aa34c20817352cc7217e586a07a697ccc112c628365d2293affd5eca8c24f32e36e5b80d5498b223427f2d61beaa0bede5175d695f1e3078d60ca97eac0f55a8ed52ba2d826832d3a8eef9b4a16c8442a97d14892c308cb436ad7fd32b1c8edbb8c2f1ee096d53dd3d13e3ec17b6a8d5f68a140f075add4fb9280850711447d0807f84db526fbe4be7351490874e1fadb28885835765cb5246c46b7de6be278d2bcf9c79c3361a25909eb3285bfd92d2c7bd8f6e831a00c4c4cbd1e2f3e4d71ca2fb6152c58910711f94e93cfa8ba94d1b725856f53e21ad1d836108fe4cfe85ce4afaedc13248397c60de55ccc00b2598ee0bc6149cd9163835447671bf45ce960690d21df769848f4ab9fa39646162257bce4348fbcd06fd28a1b4b2055401e1754a8a43a11c5b4099a3b4a93e520da95fc957f922a88554a6a14b2be6d22599e1519c99f808c57797c30a8417872c0ee326898fda109b25f56cc2422a6743a590cc9089c3d6ca1c8a428432b7a7ca3b4f0a6172ebad51585e29a16198bc62edcbe4ef79cc2d7217bb47aa1be65bec18eb9f680b1d29aed5290171effa798a59d9c13fd3d9b6c65072fb05a86c4b9c8dfe0d25c03829ba849e1bb8541646c3d1048a0bfeb318cdaff7851c3f101ee182d27c21fa03587e4e05a001f7b4c9163d9268d86222fc8f1d910e774a9b7dc4dfad13e222475b0119a5b7d1429ead8a85cc823067ed0a158089be9f2fd60f4b8cd8faf29eccdd4ccfc789b29c9b982891fa019a75dee966c227bc1b58867d80719b5ad9d85a846556b33d2b6d7233f749640c9ff4bb428ac9b331732b766e6b773d5b1d36b9f85698b1fcc51eec25ff9651ccc54c4dbc8a7f754430126d8b138408244822b0e2277b09ee0615d116485e0b6897e55c006dcab51ed974327c808142dee20309eadee9023a78bbe9b0db8bd8099a28b0b53b94bae6f6b88ee8ba5734b071418ab785c9e509a378fb98bf0301d7587b1084fdc4cdc510484977caec26c37f44fcf22302fa820eb5d179fcb0cdf958474515ba4236e3ae8b2bd2b72a603e93732642c17e89ce41d831f99b78869822f5180f7af63d6758e9fca189f8294a3638d2506624da14c44be4c0a34572db3feb4e1b45c82a7a96ca838b483dcb0feefac6c41adc357d2074b2771cfedbeb3693b2e024a04443f1968939fde38cb44622cb45e58ee131dcbd62c60e8b07ef8f540b071e66d4ebf0b5d653b0d1b562c316a97bd0222757808dbe5482d43f10d39520373c0222991c90328067ef8d40ef3f280fe2814f17944b8cca7fc0ca7689c0ba19855c7676fb8d65682c255e77510510a92491a19aa16195cf0e39f248393ca154015c18aa171536b4065b6e2e71d128f09c3b64082f36a10c3627fdaf6b719d91b8eb4f5cf8916e0cfe79078ed809398d5468e289c4327829ff7034d2a8c77678b3ef65b42467d5171a676fbf0d170b2754fe6143eabde1cd71fddfda77a6f3b0f951a0db2501337e640deee898616667a2e72a61283fa5a095b646ee6176dee292fa49f983c550e8e454ce31025112f54809850906208c4c7283b037ed9ffdb587d1a735c41df4fea12255c3d24dd6784e4eb9640dc85e76104d67dca38919d2dfbd04b87270e668a361cdc690bf7c99ba9c1099c4a0e3c878fab1060b9cf9e0a2a8a6aa1425efcdf2f77c61c50ecaff96ddd0d0b40ee3eab174d7ddae416788d879d63233a6d7d697ceabbdf8a28952eaf84233637b2584c3a1208813de29728a18dc78565a662a99cca102b1e3803cbcd5aee75b50723db76bd630c2dd0845c06c00a505a9637200dba85778397963165c5c1724f392bd94b93ffc44a4ccaa805f8ae1c9fb9855d4e206e4d60c3a6fff7593e944ce4dad6272a515209d3d48d4d8c15328b8cb7c1ec804d252c48d0980089d8545476bb52a804ea2de2e22c8c3c0ef24ac48c58ee677ea4975c938d99ffdc014afc8b37cf3ca83cc07c145d155fd5a7bdd144e3432d60070c5830386663c45be08b8eeabc5388bbb22bd6c0c93784a8142822e160ccd8d70cc5bb8b9ddad74aada7fe4e9a8b2b096b78a60208419095e63fb2cdb7b44db7112b71d190b399401ac855ddfa52038864e90e9b631c9de39c8e8112b8823309a1e00fc4ff8c6efea07312135c36a6cb27036ce76a06e103afaafa5b03952d513789f1b02ac3dcb8e72edf7920b799443a4e6d907dbf1e88b80bab00f98ba1205a8fa42db308771157521a99e8333f8607308d012ea3bae51e26ffaf3ad412e98367b3b818b8a29a69833fd023581df3264027c3ed333aab7a9384a027fd073f3ab89cd9ec5303a69648cbc66294c93e0ff3da534a0c023e25c7c6ae41650273f8f8bbfd7e760ee876094ae71667a5a93cc21139c59cc63fd83a220427aa793a368ebdad6f7028b2815b39accf4f47d7354178d1d043eb02ea61435c4b4bfff48c010e64300fd5a730952491fdba343a71e85dd5fabfe539d4e397111ca7eb3551e62abc5073ba391c6d78411236ef658b2d4c90b55f3947402799bd2c7cef6f30b49f00516a3aeaad4ac114ad53cdcad996d1ac90b07bad84b3c7daeb096124a0e2d7fab341dc2e5b937b873f9f73fcf5ab69740d4210ff3b0eadd4e8fbe4d81af761e5e6a91286affe24334958665e57d190a19b829d9edb9eb84596b2df0c1768c96c6bfe729622d147834b3d197188bfd39fbbf0861eeeea83a784dcd4231ecd8ae8c3b070bf5cc34211c5ac01c900bcaee8ff2a4ef1dd887c6533c858dfa98c03058e6da164a63ac0493933b3e7485e7ef7d58e6caa2fef1f291403d174302ade2d1c946948a7ae3ea42652a43ec81be046cf9b63ca6e84f84db61dd2a35b3088ea0eb34cbdc9a419ad0d875742288b6f704defd8b511f0745d8a84e0cf83237fa6d548d0469492edee6f404193b21378fee0ea100ca2a83fd311c7605b307a4efdf0d37875812127c2cc2bf7a62d5a993d2918ce33a9129748dc63e5f8ebbb5349e1d1c9cd27a553d49498fdebd2b75cc5770a47cc8dd637195ac8e60b2d5d493538c238bff0b5fe9e6915a8f74ab010226b2d3129d9598bef1d84f5247dd68d2a663339b064c9948aaa30ad3b0ddb6fce75f00efe0412f214852677b745cd9ba3ea9361610c569213e8685f3994afc8441801359ba6a92634220c02462d98e13c466134244ff383e4942b53656793c60dc1cf3995397284c884c419439dcf1a5dfa2b268cb816f6574e080e610f2dc59613b8af7d25059a3c2ded11520ed69373866fbcfccd3745f6767d049ee3e463778e5bfba5f1d8d3298dc5aed3f955e9376b9d6c1707eb1f4c9df8ca919e4e0c2c8237a2c24872cbfb050c365bf5b387f42a42b84df098ceb43519c4cb86c14c2fafca39346159e13b541f4c5c8c860c4442ee26140fc6f0e7cc4e87bf45f49feb5792338f0504cf64db8d45581633c2a235fe3a0bbe0c1231d40577df544e63fa2a1e06348be9c2f20bc4d5d13b43578883f16897a3ceaf3cdcdd39ce2a3554d697cc35c76e9f788d7554624a643b4781ad76364a29852463574441ee305fdf0b112b46aa359c6c71a8ba8f360991ff0822eb3785e7c61e4fc3c904c22f046f0226c9cd6f7946fb5906759126c3ddfa9674cec0ed4717f94cb2ea06ec4ef9814659161e999245c1ae2f042c9f0b75d6b723af86e2cfe141f4a505cccf4875b252289ede8b291f3beb82f4b60159000fd4bffbde08fac884e20acacadd842f7ec005d261e69619e68b82a5d1e024f2f2999a325ac250243e7f64a795b98a7d52ea814f6d2e71ec4e28deb5e4ce07c54b5042f17191588adb27330a91c5d3e5bb6c2b6444b534fccf2dd7a3832d69fd66a36aa7a7088c62e79406826394f90f24bf54cf7d2d67d206151ddd1180d411d10d41c38faa5452f0204fad6fa952402b4e9dcf9af982f27f6901e1346ace9916f898e38fc958c161668eca3a65882f4ba4771312ac0ed497b4345e403dc209a4efa0662c17f234d7d14487487bf332e25b710878b7740eeb611582e99c56da077d28f9e908c933affaf1630e3f3be1abde0c3e319e4ae7e71a361d84e8e580bb0b72ed4b0e3634764e15cc1031bab1f496b912d1d30c16172a067ca6b606943c252edec6aae1bdb7354240e2f6083a493ff834ddf82010082b173ec376229b0754ad3ce0612445df5ad75ffaeeacd1361459f2ca703f5c1687e8c26fcbd1fba9047e863cc396537b397587ccae011d37ce5efb0bdda250deeaeba600098d4caddf33591034b06d072b8d36dc96ad84cac867bc26831194ddae905828d1cce4622f3c141f56faf90fdb8f1baf4b2a8e6b8d0494bf22d5ae7f5d97674e970979828f2955ce8cee9df1b40b74c93dd0c096a6d6431a1f86f450724141e5cbeb726b796b7c825903b2593f82f09ee16891d8802d15ebebae0cdd872e868302bb45a9787316ff4dc2eca2e8760da4c83a98adb3a99b8909a36e92f6cf83babe1189b8f6e0b379cda4936b49652a7f74cf3b82bbac52961c1f800d5b94e7d17086a5068f34b0a67b414d2edcc0e59359aef10402d5d987757ae799302f218bac733e3eabdfbcf9b8f1704a0d29bd64f9526f8e13967ec1c83e0be2fefeaf2dd47fabbdd75226e8196db35974f01088d641fd9d886ed0f956d1736712740f5c7b0474009c2c9ce61eee7ce98ec49d63630621cebbdf6e82d3eda492353fc08c229a3da364df7d983c2c3356c517a2794207827e3868b5f2b1eb25f0b1a241214da94f12bbeb4762e38f8d4db259ce5ed5de8648788b35cd63426e0f325c2fd06eca4edb1bc088dac780d12ac10b8f78a0e3a39a16c76c778a9be34a11cddb0e0875b3690effc0743ab8a56a9bcd445b35cf710f7d9dc8857a402c4dda57e13ead24034900097ca3cf9f80a98cefbb7af6fa6505378ee88bb4e7bf6716bac0e6cf6db507897e2bfdf89dd9542f13235c86ecf617bf1b3adeecfb03323146f89ad1bb4f0125be3ce7384c45f6fcb83a74481fbab37eb33e0374e29e4bd49cf6cf667547e24f5a4e0421132d0e604f5f56cd2b096510f770addf36f6f05b1d59f8f054260770c2ddb9259b150714590078886798a8f04861129e8093ec4f5880ac01b0600d34984a9ac84c847d6365dc5e0c8dbefbb7269df63527fb7c1bcf196d1d229c40054b330d8b9001dde7e6318bbbe602d9b03265ad35c5a44c6af162909513216c5d4c25a5d20df3a51c5abe663908facf85dc76cc02b214c997601acb1c1a95deb72b70d85e2ef06f7b53b191e67f0d4992853fc74ea5c3703b8ba08114916003bd59c339627b8ea98f41d97356b0c0e480dd3f135bf946ccc1d4723711202697aa578b3d916c14cfb2a594af0c36ac0cbb34e354cd24f55bc4fb2e71943f5ff738c547596d89295e900f51896989354ebc4ccaf014c18599bf3033b5005752aed3037611594b32e2a1dfbeb71110d3070e556479b5574e030b4400660800c52af39295f9d73ad7d862b72aac75762be22c0f2e56414ed52443773328fdb41df82503357779d06ecc5cf633de1911964c9fdab71a2b20a189f27a3a6263f9c392e1d5b31ec3949e2aeb3d58b07e8bb8c2c4486d39e575398092ad94a6cd3a6c97b47abd54270fbc70a7fd07e8084cf9d143b8df4a029513b4ae81c06abc0e6f531772b2bc169a602a1db5dfd968cddff498dc7baef538b69290b74c2292de5261754e21cb34dd1fd3b6d82f18f286e1993e03c0ed5fb8a8b7038e966304329c5f687d88e5e43051fa0e04940b4820955baddf5d9984ad407e51984da06293c3896b7156a0c74c9d097dabad34dbf361a852bf9018167f34751564c06f308a6e9bf8da2990307a578ea03dc92a20a7dd1bd725070d87a6fb17b974ad34108ed3e39b086028b25217f5f05b765fa8967e02a5c030ce5adceaf2d83842736509ba1cbcac98ceef6c64ebf8553359f647bb0948f19bfef269aa82dc204ec1c0937793f80742172a11b4bd12eb9e8d7c441a9c3b39a6f400d5a0444fdd208395a4a2e5b7c8da8614fa9df5fa5f068ebd142337f718f061e8b972a3adcf465d66c5b28e8661f080127f6722f95009b23b205b78f71ff6bd2c8d884d70674e93a67f2ceade52f2b9b528c6d0ba4f26bc690139bbc5af286a4eba579e324597eaf72988a74a2c7f876f7f336b97acdbf1e92f249ced4703fdb1c867125ddac0b7bb5d3c30345ee57dc3fb13701c0997e71e12c278d89827ec18504d466da7477e7592ee22375ad30135250d7ad1e5e9208a4499fc01e2f2b9c4ba60b6ec2b9ac3b862e4d9cda0b6b6457587d833b25e22b04cf18313e802eb599f57c053e8491bf635d6d361d10f117764f934dc0f556212948faa68f7b6f54957890f3f6dc0ebb1942aab9e6c4a874d9bf80d154d7d6343a3bace8b92ad7c167b7afff91c90b76cf656decdc3079c3a52facd8a0d24aaa5f3198bf65954c43383a42f3b8537039ae4f1c98a85b4c4b05287f294cee9accc2b125f23bc3b723308aaf951283254cde872185f24d0a551f31618eff33afe28843bb4be2bc01aa762e60ae486013f78695e27b610f99291bd2bacd61aa6f34dc6fc2900388101d33aebb0501f22082cf02c9429da8e30f2293f2af1b5ac309e4bea28a4530cec78e932a64e6423534e0553ca14f20cf4f5cfd71fcd54c93abc8b7c40151bb22efb06314919e573b56e216a5621f804430f0979f7c3686c860b1e38ebdce31f3dcc0a9e155d23a1830fcce6b4bb4cf2cfb06e9e5f6e7124871c7c86985659a2bd7e7eaf8782af1b60a5704f625b7156ef9c87ca93490f8fd2631f0be22beffb1284db0c3c24d86fb2c1a40aeb7cf5af26f5cd754fcd83ecec618e3f35d80676d171982a9fbe400d1dd6e0afbcba5a7a0a8ea834f1767eea29ba32772fc53db47ec74e912ea96681f677beb4527e00360eb9b06014de60f63ebfb46a1c7e16227ee856c66580cc5cd10686af49429771a7f96ead165fdaaf8ff47c8ea88cf04f56675930e0dee1fc2215e1070da280ab6ad04b6292953c6491fb033b405c8c9999c6be670d1e37fe8e1846321c184c41cbd0df3705f916b3e925e11660772bafbd890eef56c93ec269a03ed7011e6ad34f7d8280dd05ea1bfa278e96a5675de04620b3205a5a76e64920236c391f5cee7a28edd6a446371b495264427ba7a3e9a81053a0945c70d8a13aac4830a5a2e1b08569bee8348e205b492a905fb29e0a67fa68f67159ad2816322211945bcd5b96f59e80154b4fd9a47e1a06ce029ce11a215b889dac9c42fca93d5eb07c4ccaa20bf4f0b804fc95b963eb1c4332310c1337b3dd55ffbeb7d922566631b1a1ad463af5574d0c24e31e8cf6575babeaca079ffa7b56bd9505301ff5ee84865c721805184a509b5940287bc43e73ea3ac95beca7d90c50bfa9a614a45e1554ddc78bece6304f6cfa4b8b92ed48386791787480347ce3638f138f82da1b80b7c60c0664e7afa5eb98539c74d9eaf5ce9f66061d38ed686083e170fd1fcd432975be3c0f852f0081b3f6ff9402bd4869b50074f62d8127d25e81ded5edd9d9249d6c814f5724cbd9bdb409630035bcd362d645ad7b0e9e234f734dcfbcd7bf237d757aa6d627745e46096e844acaaf963965fcc5b9bc37fe0744322d053d61b0c6978c987abda689cd65835a5b02bd2c991e0eb1523081ace66320806f716d66e9113bb6bd4dcee6c456ec67a97451f1129cf012ecf217ca9d5e9d6c541a3e9065910c64265e49efbb6bfe3ece75faae2631454cd27746d17ca4fd434bae61c7bc8573334e75c41f23035d3232ae339e549972c1bb46ab5c04b4e4a7ce9453975e6d14a68e1ab9ff8bcb7e046e73895c1e241d340fd6c1b4e63cd7fc45629069ebc645207db3980b6612e507da7c6861f36f890638be0686617b5bc358afb4d9b51f995385d6eacd327806cf2f1f5d4a74ea5aaace42f64b271ec49f70c21d417ae795924f0b2eaf816967cca4d2d460031316a4492c2d7da785b6e31640564b8d9cae7f21b6d04cd3758c83043d6a5d3e78218531d00898634ea730c1b0dc426dcd687cb6707c0f991ae974a5c58b9c77982fc000b50425dae829fafb8a3be0abf +MD = 2b8c3383ee2e0eaa90a47b0f902e6333df8fa1156563997c822281e4dfc5f9a1 + +Len = 64384 +Msg = 05394269a1a296ff6504a18fe33f111ce28d87d7a3b9f7ed698c51a4378961a6dcdaf49c2d893cff92f3752bc47ac9b6d47b71ff70801e0a62b6978b59a1a340ec0e2984dc49962299917f6708c9887b847084f123d3dd9c3a8136a4230050da3dbe2a49354a6d0d84c4066939931513f95506d2441cfd4bf9d778181d0e301bd8d34012c0f5886b5b765459de3f39273b1340cd5bc247c1a89fa30fcf330aacc433b10706b0b1e2248eaf608037bc5f53907a07f12d80a34fc100b0c2d8a73409c8c5528ee4ae1ae9f460a6a6e2666248b6fcab8dc4739cf424d7247d63d05cb078c618e0fa48bdb190af52d8a8fed9226c0ddfb8f1e752a1b27093883e4bccc02dfa8485584770854ae38c9ff14e6bea99f6cbf91ca36d5d5212246ccfe02b41ceabbb046873dd6c0a467e81251cc1a7270099d8ab709631ec07ffb08059223c431fe8e59194ac6eb81e4d08ac318261fd706edd0716752369954ddcb87d58b7749e31b13a7185933cb424bcef55572003917591985db13eaf053679de1376bd4972beefcdd30ee47e502924544fe8ed21aad37bc60df287a79fe10e5ce42353aae2b827b182f268663a84c844e9dccf3f02b324faede20839aa772399b808837f3547e24e46d727ddb95e3028e9dccf45e23b129ac627c84e701f40fd56cc54b0b492a60ce7662ac916dfe566188ff41b9293cf106069cfcc3702eef08818cf25a7c2fe532c4678149a2e6e683e9e46aa5ae4e3c28351269d4847b4da1494fac656fe6f8bde1f19a48a74539423b0cdd88256d41af786d4a7eb171b23c3e7df7c086f831cc59b166331d81d548e6e928e51102c7e83b1e1d4679aaa335dba862d063dc16ea9607637d683530f497f9cb5103b7258f17a560a06f7e973aab4f5c2998fb1e95216410ac09c7d2c1a8df33308fe2f0f07883a330e576049727e3624078ddcf6886680c3384c2315ca3da0f27e82ea0b8e849536c8e1981e7cbf51399861c9fb12f83a4a86bbce312139aad8bdee2bb44d156ffb7cbe185b91204ceb96300062b9737787f21005e8e62919cf0c6b7b720ee4d16a721568667949312147250a91457f3f62c47451a2e3b4f6beb22160ad9799c26bf10f11a9fce108c3f5656ef27ec59bc3430e39c7de83488cf83764cdb1db4be642d49a8ae191d7b8e61bb4eb2bed9292b80745bfa03e172326d60f3a245273c3ae8b8b73f200a8ea626d65e6169f2db76b86fdf3f18c6b6a8425e85cb8a742ea7b5d6dcbf5d68240b383084a0582731aa4b4eac998154d49594d779c3582c043f171c6fab3bd6ea22086257fc13e6ca3abb893aa5f82c4a8ef754460628af6b75af02168f45b72f8f09e45ed127c203bc7bb80ff0c7bd96f8cc6d8110868eb2cfc01037d8058992a6cf2effcbfe498c842e53a2e68a793867968ba18efc4a78b21cdf6a11e5de821dcabab14921ddb33625d48a13baffad6fe8272dbdf4433bd0f7b813c981269c388f0019d51d0f165704c32be4d3a1645623c89c4a09396a90e342db6b41e23f9b7ea7affc5a4e345b3d981ef65f1f0bcefbf863af957d836682080773b2a1eacb2c19da2b642b8ba752dbc9b4d7c8f24eb33f1a4b439024e636604e7f4dd63c2c29cf2eeec5178aefc6f6b29cb82fb639fc0536c97e01bd8492f416ea9e0f9252da3024c2e7a2b0892c81703a8ab3d63538c32f96bf52bbb60a2be7520dae8bb3b0054224565dab07d604790aba15c0a4fc219b3f71f3be1f1e803622274396e36d871d9fab98d8d055e83389e096042da888d02050751314328989f7756f3246456dfda131e4a8974eb5363478e52f23d06184e5b547893a08b0692e7271ec70f9f288c583e1b8b102e407970d63902c16641ffc2afb5ef4e39d4a53a8fc33e7dded35693be077c2350d1e2df891d59abcd907d02c0122d96598a3f3738e871f63969a28a491642f3788f075d5006e146658e31e32e9636c013b0c7a8c79848c4d871d7068551c6c9cf004eb1d3fd81d956c2812da249f01491cfa753e7d8ab2ee4735ccf1abff0ec7dae20a5b90921abc8b5d6a7c33444daf86e46003eb2827b85f89badb169a9a6a921e6ffaa33a905e2ed991b3a5e1a5973160c79742db5f4e287fb68f255d73d7bdf06885082022fccf4304faed05bda274e618532512ce124a8e4c7848d63fa1c72ea0850fe1271af52050bc890eda53f9eadeb2027d08a72e3be9410193625b462f84755afc213b38d7e1930a8ba02e18e5874e5b68736f5c1f2953dff37066a359a0c059efb5cff2f05408d1fa93936a7cae829073a2ed5c9e693b4494de46775372008d2a396bcc0014787fea19165706c0f9620d2bb398403551cff6209d3a9364c0753a30711c6daf7c74c8c539672a4b0d20b35234978b1a51e275dbbd55a0156aa2ae4f727cbf718f51151c8f333db9585d04dae2f2f594962cb2543950fff06985e4db02556c272b956d835a13d7a84587500a61031610a8ff2a4e93c5098267af7c57934f0a2ccb92209e5cb18e746f2043851170433b04da5c1f4f2a6347cf7fe36997c1fffefa07dcc1f974a8ca3fd84dcf96932350346eb64aede973bd2b87a8759246e42a4146f092a2d5dd0621efed4e43143d1cb1fcc755d29ad15ee6473a0015562d1b1bd01a84fb6d91a4dff79085a95bd6ecf8350dd4afa702b98a4f169d9368515de453a91d65a44d42a48fd60a5bd2a73d8188082bd7a67e39a20fdca28f05e76f55123ac07402865c2a193c40cd2114aae86634dfdd11aa6bb7f9eab38aa755dbc8cc2e229910c35ddb0411cd6fcfb5a19760126542611ddc26addf44f8d5330fd9b2119867479ac432011504c626f0be19063f608a1d5ee7888c08db6c17f587e29483a6412f632bb970b48b62df5c5cd7b90a3626ced43a582525eb56d813e08dc3d2e0c930b2f0ebd36ec5c8415f0a6e09017aaace14211ff984f93b9e249625c0adbc61e400b043c9a25859058f434666c38288c3a5583a89c499ace29e05652b72bdadb1e2e65b93fd97a79453a3fb62bf024327fe3c425653210d4de6daa664a058ff32c00f9df2ef1846665288f77d526e5c638549d1dfbf43ef28a57273fcd502e8ef2ea88536e56e97f3e27eb5273c2b471ed0fd33867756c51b406958647f6ffd3f952d9c007eef1ee5aa01def0cabd95a277e311fb09fe219e4e2bce2c1de4aebc8a1b5cc02a3e6d841f9ebf5a8cb9cab6d087e7ade58e771a25363fc42f057fee840e41f665c0e68799c1e0d4f094489481581f0fa8ac48177c1547bd2146d33df952e623b01b3c38cef7ede0a4d1b1e3f0d032a0a1cc272ea9455087932d6b2370a5b3d89791b14025cd211e07f6792da59ccd019f6276c84342f4b4032d8a47706325759ae8e816149e44dda88710da15fa4892c003b96cb09aaeb2efcbc3128f17c59b287563233207a3bff4e81b61d8853fd4d224819497c8d914c79ca80d13201ea9decba50ff485d8257badfb5d53ca0d58344941d86f3a2e4a18f49bafa3389b321c501034e2955cbeab4d23351e455b9d74e68c909d7af8d352783062c5bdc5c46fa7472a72b29bec125a3581ae638504f280c455a917d33102abe8ded12c18c14745bc692b6a302e3f39b4bb7ac1243f6bac8ba0187d47f3b7e4376c8c002eb9419fe269732894058080035b09caa39d1ede45086237b19bd0d5aea42cd6522cdd2a4bb3f07a41f294a1a3d8e20cadbeaa7a72e72cc3ca89ebd4a11e5a2b3d9c78896ad119dbc485da3338cd89f38d148d15b7d4de9ddd4e6785d1238a5b3b78b211d23965d9962fcfa91491681bdc2f35446649de427479e25d916c33f2f6520877f4554ad02160f367d9dd12d2157f416b00cec24e2a6ceac07440fd8ed8b8ea0043cd5f6c00c9c413fb08f0d2c375201e39cc111d69c7cf52fc5a3d9b7d0de56f630a1a19cebae021fa9db88a60a15fc263da513cacfb2e799c007a853dc178f9b483e145b5c4a6165b03a06567a46eec0171f9288e7776c8c5ec4af895841353dad36b9c8067a4658ef36ef052debc1fa51b7f6d68dd46b52c7615523ec652f228711f7aa924599418b56ac7bcb0f5c1c14f5a77d69cfcd31226601e73f8a6592fd5535c8a7b44268af22a380fdb7a76e87620e4522737872975c1d9ffab8bfd7378cddebeecd2a1581233ddc6bed8a37d38591f560c5555c50ca1011c4f725385e3d56db0e9a379029e0e256bcb8edc11fe69957cdcf4c397238420646507ffc9af10860b0235220d0e2fbb89821b852940e8f310f98464f282e1b4528cab56c122f5b427c6f640f9eafeec8a92ed3335a84d94cce2829e898350398116eafd0ef7fb748198653a3bad1254f94e926ac98d0e170b388df4aead462c5a94356705869843c307009254dd00614045a9a04767b0d6465bf4ebd4794a0959951909376762ae468356cdc7e32fbe19f8815851d0cc7f28dd5608bd7fc25d089a04682712d11086ade661276816b7c0d7b8075b50b76e0d3d3fbfac194593e203961867017a172de73de0d5c44beaef73bc41d650181f7dec009542ee4a5a60723c7e59bba43e96afabb1759045b3f05d1c7c5567552ff57a471df45756fd2e66662e71ba05d34b97de7769548acf7de4473b5b0ef50c0e5871be42fce2088640b18d61851591c710349723798189e2b9caf349af7e3023172efaa137721912918d3f8b9549d693b95c955687c07fb93e1628b3c16738ce36cd57b1af9d9b5de987a97273093e3be3a4f654f7de1d7bf1c7603bfd36827a27eb59d6bdbafbb2b90f5f98a70a151a3fac3ec15220ffa5655d2e24bb72b9b16af775930a50d6db70a2c660999317d91dd0d30e1f4f72c01925e70074922b0e80703f78ee05a912b0d0728cc35aa2d31ec167adc7a023568dd02f71c11b62dc08e41bfaf13fdf02ea26e86fccb742a2b2ec4112d3c98dc323da6bdb2974fdc454d1af9bbc6605269d049c7c1e4f73c26ac003ffec222ea08bb320bef645683204b74ecd981ea7f839f803442079a2aca6cb34a74950628915d8e29feff31ebf99039e132cd033e2517fb15a8bcc8bec078c37bb93cae5b762da35f05f04adc76254f20ee311358f741a2b21a8ce6beb0d81a1af53f804e5e3357f52dc0081e4211a0f134368296a0245e52c1fd5df341929e6f4f27e6c8f27693329df6d278035c129c2c62b9bec9c8153ec59995251cb039c1f07a4790dafe40607e1a12b3620f8f6800401e981936b0bf4de8f61ce939d25a00c30b6fbdd344c5f7b42f970631fe9fd5551aee3975181b8171e99f4f365080a687992d43fe89a9314d91ec98ca4687d62b1686d08d339a8abcd478f6ae9d7c0a505b921586f556536ca07abfe35168284978298787eb869051206d87a9a09655a5b865db737213869ac4092482068cf637a99f066a2725bab93647aa304115af0f18703ccde727f25e65606eb24d3a667e12b0f43ecfc1317b7ccd064968433f15e379e19d3bdbbe40eb4846780eb9a0a51a24fa0ccaa01d1f5cc944fffd662e3f824972eb587713c8be8954de3152cd3428c2bfdb020aa52d3d010b57e8c7a3155ba896bd2543187f46eb3feb9f4d15b3a653ecb35e49f12e873f045b11aec720d75ef51d8a86f6eceb36b0a73ef29fabfb9f289cc6a42aaaa149d7126162c2e75e3238126f8ad49816314e1bf78894a48f6e1c9f22627827f5e72b84be2dbbf259ed07a4bc95db092da5c24eb3591b24ca886fc35acc022feae3a8ba1155daca2e5709dc59f032c99a5ab34858ab5db514b5ca11572af149e804f7bb432349f64738e7c12fe30360c318ca12cfc782ded5bcd58fffc46cfe5711c08f3adf2dfe0a58495c24b5735412a7afb301f5b128756637473be19cd4a0d3aa3fe0d1b16be17fd5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac4337436d10f1ad678be56809b32a6ce3bf2c3a28410c8ba095b958450d5763391680012bbd43c18b8ec08bdf202b90d16a005fb187921f7779e26c3c2f5b9825be8eb127b5a5e9b76dfaa68402cfef630cc0b4b05151d89275b8bc32f63520fa81afddd1787c8873aff04298e98bdb213e09b3b53ce0698a1f88d2d9f0789030368fd1c9a45c1038db4e0a6e32e3e6847427e730b8a224b6edff4a91ac9a586f139b576097b9237f566048a47d6c841525c7c9a3533bbcb157688dea991f0bffcf6eb946e11844cfc7d397bc278a565be945c58d7b017401e2711755347b0d7ab05681dd0eedd6a2a6147215dfc1bfb1354e857fbe97ed11259561521d32ef686cff4ba38fce5b8067af6261f4a732cd703e63ca8c63aa677732067191db24216bc5613ad22e65f18310e2f114af51f94081fb2e72f92e8d8df3713460e84e6e23558cf37482687e8ec56e739e5e8fdd1cd5b5fbf0ccdbfba0463c0ad8ceb0873a0c096de56ee56ff1497f3a10196ed17b961eb38453452a74a6c16588031d14f665712ab3586f7e41299fe51874518ed34fbff5ac20fca261919bf4ed39c6800f0e5e9a5cb36901f4c24ae4f603ea5dba6ef432e6ca64ec0d93360976b75f50ea532c3d501464a392c00aba572c9bd6977065ebb294007fbf282a43c3203a2ffec054941c0fd4cb919f49e5ba72d88201008f909e2261d62cdce30440f90955d2f2822f3eea5bf277bca2f77e6b42d87d7bdbb2180a1b77ad0dfafb7e962f6afd561f7f37484ca0cb948050316a4d52735ed4d0ae9f7fdcd647dc79daac2ee7e467970473be296ee3d37c9062146a786935f56cc077018e2f26f20ff39f8a551e93834f92a094a586e5e2289eee2cc2e57dc7f70c0563041e07e63e47e4c42b02865ec1128400fcfb487b99365c06ba7eb2c70fdfeef6c73977238556106ed236aca3f951fce0ddd7778352c6e27ad77b517d07ba885f5ff80134659ca6dd033182dd68ff6fc6b091ffa405cf161ba281f6547f3a65ef36d022836f8a1ca106798575806951252db14d57f2cd6b4b9428fdd7f6ce0c28d46847baf3ace65d84853106e03e458e9dcbfd19ca30569d24b6f481dee3dfbeb1070d25a2839864e5db11fc08dca15599386b63fca67c72fcd266ecc81a85036562df6dfc9cb759a2e1b4ef5ac3293c989d24b0fa7e218f54f1c17322e0608969d23afe5266a79e543f763b668011862440c59b5455fa24f5ab90bf7fc406c326fbac41445ffdc5725ae27aaca20ed4b4e9aa8d8a9c7af63756511c4f43ec433535aff163073e4175ba9627ad9775aad2fe60021dd0085592888f3411ce858c0d26b2690efacda4e6d4fdccd9eeea6b06d562938e8f46c5afb8a77157e266f027355022d88940623e4075c4c1f6e1b7b9254eac4d289ae8e77d366e822e15221be805b920512afbf463bac9f66ddff3726470d6ea3a9921c23cb87640eff4a443b55f96a6d0d1e491e52926d7b259b0baf9758dd643b5f2c87dba42f4c6a9d93733aa35bc96f9ceaf1b4d75e642c3720b7ab94b91d275ee82c6983f1e4089337ed98230d201f6fca49c8431b2bdc1b9ec5ed89acd455d77699dfed53dcc3765831d83f2a7a05df10adf89d4cd81b8eac62c4fe5c93ad11fe56a3aafc3e828c1dc860c057e00936e5a6acaf9971d3d9721498bc71611656a9ec1f8296122d1faf399a6d3e5813ba70bb4a3fa800eb451966d28c94477bec9ee2b93dc65eab75360cec1087ed0bb5da743b16248c4b18c9ddd8346d4bc11c06c0dba2362ce6d6d9cac06fdaa4d96d4a59e7fcb31edb9aa903137ca378d12e090fec7b8e83c58cc0fa7d54dd87652be9f3b6b8fdbd8315e25feb2edfd3936ace56548e756c30de14248b853b9d9736dec91114ab712bcf9b79c910c866ef187e1d7aa494ed0f13fdd052ca9aee58d852635ed66542bb11fdda13ec0738ce7f40edc88493114a74a2873aeda3838e576d4a06c7d2391b2330093388435116e83d4ca5f819ddca492cd0abb4fd6323fc560572af9b5d334d5b8e8fac25bab19b9dc579c6ce5b75dac2340de95096fd0f361c095668b7ebd7a7f29122547a85e087ddadb75c92346e8d3ac852462506d834183283e04d2c083bbc9fb179997cff231ea793688af04eb56a44b88517249e79805700ab29dc2a407423203c207d3f9a0fd0229d4c8fc3614ce9e2b57441ab2ddcdf937253e583dda3843844166fea1438902ba0dffb13b969209a7f45444576b53205ddd12d5c3bd02ac13a833c46b82250781c4b1a86e6484fa68b9115b57f91b81d93ad9efc81837d83c56fcb9caf5476cfb799d6661071e0cf80609c436efbd9a53def1fadd844e5458ee3043321566cf919d015f95e6d39dd06bac1366c78fd63829d97b5689ccad13de6cf5535b198beebf8c189f9c3c498c7a86cd8a0928c210bc1f05d581294ed7981144813ec64e5d51ac15c09fbe7c86831856f33d0eea57f6211edd12fab62eabbbb55e48f37387e3cfdbab59e0c34945ef4444cba8bb78789e2adfa7977f7399cacc4d023787d8f695ded25339aa5f136a19f14d9cb21cb3d4be4fc7a61760e2cd0ddfe2f917dafa6c93c8242f9e327c174c7b3b417aaf28634dcfebacfa510740de8973be90087fd29eef45390b6df07560650d4d519a56c85db29c02a4ee87b4c2cc2cfe8cebf75654ca2efc9e6c1112da213bf6f378bf8262aa414db373e4976f2a874f6aefe16659eb59d0b3a74e6e3e425ff4bcc4d31ff11983e4829b9e7718270b17b69ece9122c54e6bf7ba18e5e14ae1cd3a09220f9d72dc6dbeb015c2724430fdfc732f5523da8514b71ef12887ad59c6d7a03cbfac68a35fb47bfb07e2049158a9078430e1ad96618e40779475ec3098323473ceb24d8130f039bec60bda94be58c65d92f0c0ead8e9c90cb8507a0ea7c64077bb53a3ee681e83c17b4448c395683a2c19b596faf1560331029be93c8c003eb8e3e50e538b8be4b3962fd1968463cd7033c4925f316fa98511bcbc42ab7c89a7f70aef5901c4d6f5b5130795f1e80aba5f8265801f730669643765c98c97dbd56329b9577155c51836b25d3a64417c6b1b9362f6222cb45e58907839a5ee8fb196b61ed740bb598bc972450c622c9d12e66c3d39dfd93df48d5c560b9ded3fdd20546260f661eed0bbd7418461e5e7425e7136c3af24fd9c60ff91c7cb1046b88e79368d08e60f87ac65e52aea29d569d246e21c268c9de671febde6c3f43ec44f98fda40ec436010982a2787154f209e041e1abcc7c79434ede3cf0ff05a280d2384a5e6e68eced51c20be57df3c7931726a80b07612a334612917f02d0fc8eb4db8f04ae50be9d23a8740a9682c0a5c53997b26df72b4706404dd945c2c74e65f74e4f552805a0edba9d40217e77b2990f432a769ae6feedcbe4985e777d3074100a96e93b6c891e5cca3ec563473a011c3ceba7c907bb8b39d854a34b98e55dca4663d1275dc644239d4ee8ddd9ac8be4e76e880de81d6cfeab66badb94cd816a844eb35843e8ed838909122a899a97fdc53b8dd61284e1aec0770b841b699d8536aff66ad95179110ff5b7e5e184b3db68db2fce1192a7aed9ee2bf17749f0bef00010cb68908530b48d609c7beb7de254b5e4326fb72d933a34929042df395c2307a8e68c468086f948a2baa34f44c6fb5451bf7772c1e073f2b5ed0899b601520f1568beb3f97850afe4dd0220a6ddcf4eeed1d356231b19912c64332a1522ff8eecbe7a996e895d3bad5022e022bb630e11f61dc1bfa79db85c925cd0c555ae1f95543a374e3e716462d0603e36d4390a71b89146060a72a0dcf3d05e550dc039b5c6984e170c2fc2bbba447b51acd3dc7475d87384e82b13140547f332afe855b481ff2e57770adf0e9a6a3801c9a5fc90da7dbaba95395798432e6fecd088fc2822e9589e037501d1ed2be4d5af21d36d42db8c15a62016d039fe04f20424b57705e17d493600d3ac1f24123bc1f9f9503b8c78349f71b962563152d0bf3dfa27b761dcf78320dd03cccd30b2a680e6e0410aff85e5a0b7b53452fa07665732b0b40528078f77866f6291d0c8c14924a3efd192882d2faa4f30fd3b049de307b89825bf179f5768557d0c62eca6c52af1947ad1c9ba9109a6f87ab666ca73d195b05e32a64762db4c78b7779cdb87728fdb512db922574e42d765fc9c808c38deb91903122c0c87bae20d8f67b40283a5211f16d508f4f0a97a397e14348ea60a0ee0a109a1b6d62745890acbd4b8e6f8021f1dbbc2fc89513d8fab7c6b1d919e1e3facfb3d145f281fb48a47c22d04eefaebb2cbd4c080c0bdb30523a89b94018390874572977b23ed1a7e49e0e185f087ff6683d2f36f7e675e2bb8519b15dacb8db096d6a2b2b11a156760c558b2b315e4b9823217bdf0c6eb8f891a9eaf905281c95dcdd8be36335fc61af3f5339d31162c35768ff4ae58e591344818c9b8b5172218ecabc649d5342ae6e1698115761e2f1c04ce9c3d99d6e1388e8becca6fb86b46a79e93625c4d0643020813c2316742a481761cf50629e014428a813beed0056583138df65504d8bdfa73741a1f8bf77d60f91f8b2a692e4608773f83bf0870f403bd1e9c3be622c62f1e2a838ce6cdf537e9fc56731f1c4c34e470385ccc3e80adfdddca9d8b64ea146a8fa4f62226ba5aab3bed7cb64aa57c44bbd04495de89f65843e7e64f2f984f0b4be507a8a22b5dcf66c6a3c939c0333a8ad202efd18e515ed99aa2bbd35f3362c7ca2df4b0c6b5b8f56894b25a5afe1855c42454a7ec537417495f5c00bd65f39bdad590e31af71a7059ac2c3ca43170b50d054ed242712a758a78aa28215b40207d9b07b9a6a6466ff07671415a81d621334248d12f4ef48cc48b10ca3987db0e58eab394e827df3ce3603c18dc43bb12dd47dd34f12164c58e034a67547026adc3413f155e10477f9915d713a80b920241a2767e36bcfda84d7d917000b8a597633b04ab86d4119097e3fcd25c5ded9826de9f0d6e6621ad99569084cca5ea43af34aed7e107b0285676f7c5579f401ce348c17306a1635de82ab20626ec775b0dda981afb1fc59f5b3b627d28541c391d9d983fae135531c06690849dd0bf1615794af54380a47e2cadc76a5d20e4552c395dc3c32059b198a696709017242d4cad51f738ceef4d314a910d547a2af995a8bccfc45cf365f7474e6abc04690919f32781797f08750f9e59e6acb472aef0682f94402da4c762e522d3504cd02213c746345405729e1e157c76d4843deda2f410b1b517004e41ecbe3b2b451c10b0b6387076f6d010f34c834e5a5dff2e43d91ab8a1ad78633aea7b027b818f4d772c68d640c7838615a008ddaca638e95983a81974558fbea45ad3e9ef86ac40edb661c6500c1f560bbc779 +MD = 7bb509e10a0894eb5e342dd031a87ba63d7de91d2418f481a7aeb9ff02791886 + +Len = 65176 +Msg = 2654d8d24111b5402de99c82be6fa0f335f0aa676307bf60126c8185a00df94fed60930678f76aecc455c6b80100e345e8d7f58ce7a668d07ef86c18e92cb1e2ffcb6f165a19aa39b8eab4e3a1b7f3734af1e401ba9560942b011f95b3067a84233e75ea30a0fc8fd0516dece7bd57e323e782ae24fd2f16e130a0e547c3db9d2361ac6a41b3e956d532f9bc1b3a97ff3b60d47b6f065bbc672df9eeed8a5d95c5db1c7fd77bf8f69034613a85553c2e5905e451e1d76ef0879f329aec8386d5d255cd0f3820b1d7c600ac4d6c37cdd7477eb916c499f019072e51d08ed7e1c31176c803adc99c61423ee2df1a08d264cb725bb45e73679eb083607819aef3c84ce714447e9e42fdcb950cd7d5efd43cae8ad311f88e5de94a466679d62f464d494fb9b9f3c82a1128ad311ce6145ac7b76d2817d91259619d1f6cbd0d8361b8d157c049546fdc07222f599895a0ec6db0c362ac4b26e46e70b4792b06d1cc72aca730dee8bae14581c38c3229bb12965f368aba94f285788db095ab084210e4a2e6115ff8d2c0350d10d3d2ec8c55aa8e6ca628fd9fc4e7bab9c8255cfeb4757bbc6bb3ccdf013d8dbf3560243c3c11030dc1dece552924c0771b814b2c408cfed347c4ac082dc7cb77bbc51af2503387c2e0c44f3b3d95679495a71bf53c93f5d0ac79e075cb3a8de16ce716d71779e1330dc2c87a87a376b53f80148031f1265ea3baaf4f63fe9ca550af5f131b49db074fc080398fb6b7841ff280f6a70e5923336f63be7d7bc06a6f053fcde40c3be6afa6c0a1de37f0a940e6a57e245258c7648042e9a219c0d8d2d2fc2ef82bca7a335cd0dafb8ceacca745cd413225eaf33ed695f95940669880fcdf5de10c5068e5caf80b6e1f6d945ef53e6658efd64fca57a3152b587852816d30822719955bcdd9805dc05741a96ce040161f18e5820fecb6669fc9bfadde0b37c750b960f9f26faff7789b2db4d9ec1d790d08df35157e14143dfb03529ec03c52e6537aea5c75ce011e55fa5dad031bb6ac278c0fe5f306468d560ce9c973864b7151acd713d425a53bec704bf10c84f684deb3b98635d4241843a119680c5edb771abc682072fc0956c85727adef9e601b931eda002ac6d765288c8a81720c2a821672448a399b55f7517798e794b21dfbaf931b5cbc2487fc6e93e51f8fd85f19ad9814591049b2a6ef9847a9e30754ac9bdb24a1d2355b667e7fd2474a09a2c547f47f95de5048ec0a81dbfac4e72eb4bebe9cd753427c2abe17f8038be91d0c4c502e478df63e500afbfde31f98d39d7f032b07299312d09825005a3abef5792472c8770484bc5b57ce556adc636aef48747a383b7044e1736f915540d155913722f62b2b41ec9359c28a9ae3901b3080d7317271213ae4b7bf54fa836a63deee2a606dea77f482789e45781c6710ea8ef5f8bdb3ed1d61cbdbf153ecd147e7af51ad44296cfcb01d2c2d0e6f306ea4dc967522e91e15e0198b0f68634d2a34e35e86b9d06a2da4ae32eb63c53260e7d18153a8fbfa49ea0899563fd127344ef31a92d2c7b7aee69579267f04b60c3ad5803858d1cae20600cb70e21ca88cbc454d7a99f69ba8fe38c9876b16049a255059cd3854d507bd69eb02592e155b0643bee5164660437501eab62ee1643330aad5b9536a65e196acbfb7aaedb9c8b554377c509d4ca6d157a35ad04f1effe44cbca4aefcc098192f1034df43dbfc50df7ee74fe5a9fa9da1bd1b5a477925c89cd63853f32f53ce5ba5240017c21e5f4e5dcd1b04bd665e4901a3d3b0becd6503eb1a4935fa3a3e98482d1350b7576a0899d6bde4d1139eb634974374362141eac2f598ac6976f04fbff722d802cffa75fdab3c6b2c29e45021a2b27a2646e6b7246f493ec42f6ce6d32b3496ebad96fd50f4a08318cfb97f8f6a29aad967dcd4d93062d5528c3bc74c715272ba1ac7085958f113db2da4ab4597afec96aaa9a7a9e1ee585cb6e458f2708354b63d14fee1803802be6c2d3c0cd24d28a437d79a5c2af2af2ad5ef038dd1cf24283f0547b0147d3a09b4dc9aacc30a464c37ee13b9b278c20410e52fe43b3eca5847224b8ebbc6a2042c3a2ded11ee2ed6d2747c89228779328f4d43c057d92f8e7ef473431d1d22f7fdce5e976401c98a2ff33c942128bcfb7bafa9e9cda739120b022596e389a2294e209371664cfdaf77f2bba2586273a9fc93c82744b0d12b17d4ca51b5130ae348b93544bdd6b38fd1fa617b6f3d86823982084265fde023caf3cb3a3ac1426d1320add811a7d470669296e60dc1ddcf5b04d101d7954c404be68e1a1b9d330fd6dd62f50bc8469b5e42c2addaf760d7899f8b2d4281ffcbc3357db800afc311ba79bb635240f358e0924d9680e6f8e4ecdd9e8e50c7df0b5969ffde8ffedbbae67b22e98f17c1ef140b9f6aa4968b3cac4573eca771d64a36097b5273926453826bfe516a569aa7233420f0f1100228f05f700fef86cbce819d5bdd52734424b8d2b6618a0465c9359539f20c5b46f0e0b4febfd10fa5e163ae0647d5aa6575ae37b4e298290a9d71b75036a07f3edca5cb86c3f4134ec904c3e458a33dad8e8c225f9b3bce706b0021cf865385d134672c6ee4029aadce8b645dd8653706b67b1b1f561cf9817b0a5b1ca8cd74e93f4d601feaa0adaa3a2119d98ec29d5737a3ab5cd9e3b52414b6eea164b7546d4680ee029d78522d53ed6bc043637988572b597eed370741802c61c484b92e4491285e7ec432931e6318e17abfefd2805f3baeed5ac0f9c105953cefce7a0958686b39fa29767865b0c9046fca0fb12997fd3112e827928aec1908890ca3ed90137406e092ea08eb83295a082c6b1d6a46976a535f14da857ddf4cfa04dbe2d4d9694d97c8394b9623606dabacaa1e2bb531e119862eda9aff1090a97fcbf10c047397879309494fda95c5c11474bc542df41fcd261e99b2bcd35d00441b2120dab96a18ba030bffeef0e8b32a7300cef407abd5078b1fb3fa5139661d727bf9a46451b207ce988ca89a60e7b74cf17f52930d9bf11e758702b1af43d078057da99bd1bd4012f8e050bbb5c782aa985091c0ce85ac7fa2141c1c440026d6c995338774a12e7934e12e7a6dba5533fb29f8b575fdff55ae448fba8203e734cf2a884fc1c699a9537989001227f68f24f3ce9b8a6ab449a2fda5b2f0b5db391d22f11d4095494a5d8fab752b782e671b945c99953491028529a42d167ec98ebd67b6167a7405055b0ada004114c563e6f6ead81fc25f295fafd5527dc77bdbb7df1f64f6cc968254d45fc9db63832a8fffbf80af7ee5653977804aacf6b7c71174742f3c06c56850d482f981cd30651e9925b8cecfed5f1a69ed3c2b7546fad50dfc9ed588585f57f28ab8bcba93bb99ab62a8031d3dbe0a6d635183aaf01d0b9100da48bc17117216c12d129275d50a1dbf79d6d19f2b116b2cb13bff7cd8b9eac80b1d09cc23a8286d810dbd9e5a78d78453cf51d84e384b8e83dbdab4d2e9ff9c57ddd63d400210d7db35a3d6f3ecc0f95d7706b3ce86f5d2f0eca55eb4a2b8c4e90f8d330e86b6476411ade5486dc266c05558f75404513f1ff5c74325edfd87e73b9576353e0304442941920003c412a3f2b06b87b8481f387ea82bced1b62f7aea56ce5e32dd58a205c9a6c4b6af462fd474d910acc0b8650fb0de5656cb02c9a2380331692e89a62eabea3b8f694a8c850e0796e8a254cc31472367842449fdeea3dc55ebdce07a2b51230e95db66e18de4bdc272d739956bd5c3a664aa4b3d53ff2373c0d0a54384211ce4d1ede2567260c53c5446afe946c287bdfd4352b25bb49e32f1f3202cc2859c6649880515bee8e6ab96d600f04976345457d8a4838d2a163b842c995a6ce46a3c07921843f8e6e7b73e7172d1fc5a95127b528ad971c95235846257f80aa54f0d13f5630ba9c1910956fe4fb5e7d471a070974cdc90fa1cc9f67fa32c2432138173972e9358e1ac49e564ddc3934d8fa53e9132b371233a9fe46ac51e43f27e413162c1038dae001ff48d6524872eb8caee2684879dae755e550b05f8ee4d57f5553c6384d19054318a602eff4bddb4b78740897f9a0195ae524aaadfaeab6845e50f5e3eaaef712aafc5827d68c44b1311c68ac4f2866239e20ffefd0a7477d7ebc2f858a33320b06ba4a7c66549458795a0cf7d2ca3a4a40d42477a8a104d566e3d7afa41c4276bc7e5e601cad669ba19b6a0d3d1c2229adbcbce7eb6e8b26877682c4e0e0a4e05ca71875620d28055a8f045ee684aa5c15592db3017626eb50d2b5579916e5f237d2ed2eeeda552ff473605f579a3f5c18280b6b834e748e6386e3ea652562070e6050ff1bcb6a76100702a118d34da436b7ba63f95e009a3001930fbda2b5b910fde8587126f4722da86fa692b671cef166cf4edc3b379936e1471a0b056d63100a27dd67937faebde60be26dba3826c8d3ce9e945ca605f894749be5c3d5af6c0373f097876876412e6bd6f2551d563d8d1cb5ca38b86af5a9a027d674aae88568713469895b7348001416d92d7dd7bfd15e26d6660b329e7f6e30458e49c90cd7941b55ffa520430979047a99e625d06ef784515b0ae783a41337cb772eab62af41080570e207b2891f326f20e2cb0fa46d30b38e240425b653b0c0d5e61a177e2cacc0839e84272d8b232f68f021de2043ce858603130504843dde00fc9fabc2ab5c4f9e47400165315923c8aae4cc510fb04fc9149e923d49217bbedea68ffb4198db2758a5e1ae9646f4d65f6e4ab525886acdd4f16dcef72e123608b944a684052bb56f3048884e6f0af8aa38e9db29b96f0ac0d5e81832963a2d07625a42e71399ded7799670be43eec5f7df1a1180b5e5166496a1c7700c6bfa571c416eef36adfa4ddc6c065a6808c4e4bb6c26cf1035673cce1b4b33f3203474519a6900f0e09e2ef329a7c74df15bed784059695b0883c5e6c521f2ecef41fbacb5efc0d4da30e7385fd3796831117e704747e3f8b6d27c6b3fda315c31c939783461a354e36923269f27e539307c044dd160d37bc8f9dce5dbd273b38030ca6e865d3ce3a49d5f4847f39f5388023b6b8f329c46c76073c139a93e9562ff3ada3c30d2238653f807eaf50c29903a7043d14bb30c3a8cbd97c9dcf67452aae755b68b177711138a00087ac03df18b4f81380acc1e8af536d41cdc3fd2c7ca7c6b95da8160dd5281ab21133ff3147b258e33fe2c0041305c0093358f333ab446765a9d847333977b73b54ce00b81909ed545a47753e5a4b997dd574908441ef2206542b520bc68d3f4458664c9b15227f0fd8c227bf0e8cc244bd001d44c60fbd4467887ebe03d37a7426e12c03c463d6bbc13a1faeb62f0107f3e5e29ec00b01c9e9d6147479af3074c529e818ac35b9011e99a634db9e1f6e7d0927b8b94db63ae2ff5c54ae8a28eb3d24c8015701f189f6c602790440e420655634ba383ca4425aea9e872ccd2b8297bc14e74d2d47fa51a97ba4b97d17c6b3b350cdc64092875a7f22357bde01e1dad813f1142380fd372a5bde83bd82076d07c519eac14ab1e9a62f84212772af0e5f0e4836496739b131e84ee868eb8c9d3cd9c52c27926910470f9fa80e46943b3b4d133b09c357c6a66c1d72e61bfd4a39d5f914db3357d64a08ac98fd443a6a53187ba9ca5bfe7f712d72a9a0da017de601df2b43f522439763d4775b3546a38fb7a80af3f8d7e27a747614fcef403d2ba49cf8c89f725f17683ecf90e163ecd771c1e5ee6289faaa88503b63246392f0075b03d2fbf133b05e13270410374f1390efc32261bdcce7b329a63e3f12841d7342d5cacf45c64b8f7a081f8a6ad32b5a592bf7bd1b621a3b29def309f41c9a2e79f516e41620d1419cf94916a580071828a5d53d4ac32c69776aec4ab2614f8029eb20020d4a28bda082ea7e905f901183b924abf3f703853cd28fcaf35c25b37a404ff0d14b3a4baf2b6a88d277ac8f93f04ccdbd0789d79f9f46506013020e937b0a780b2bed32f17d31fd13d144d87fd1b56b51faa4a6c95878a6a190d0d89d24bb6063f32bbc8dffa7a4fd73413570e5c84f56d83e3ce2858c925ddb755abfc4c97180aadb2fac3a3447366789ee8eb2eb4075a93edf11aeecdd3cfadbdc22e29c730b58e5d475b441ac66b5064b00c2870556768cd87e5cff4fe8f7e8a5ed069c2eab0530f311f7349c36639e94ef9d0567a046106f52162daf06d986ff49b8316a09baa6d4a78b77df4d7b3b1082c9cb2efc22b2ebb565dec741a99c305e81c3eecd7f2ebe60f6703d5504c408e2d0432211115a96ced07a5d3e6e118153e8ba839e5ab0fb64c2897ef30721c4363ad40a881bf0b6c6df693aa830cf3a51767ef1245515d1da762969d18b3a8ca78de5b008485c94c41a142625f8bda37fb1770008774389ea9bb7c89798f7a85d53e0da3aa18678f10ae1e85dcdc30406230d77f2c8236abeb89d61ed36405f7f132c51c52d56a97536394afab7c9a40d54a92089519dbe7b5542fc796efdfb365631dd53f5b57177268512a1beb7ccbdcbb1c176199acb4cfb0e63e64716c2a9a3574589ff89161f632b09fceb75c43e108f23612800db5730695ddaca73fd018206531155bce1967495f7b345ecd4b7aba90ef087b934c47fbbb1fdfefcf3657ba6cd93ff341a04e129a46ed402445025694ace3dab1ebc6d6c28f9eb9aeefe179f7cb603db09913351d7d4a1a05b3304369ea152c0e36784e48a73993334f3dd5928236b97f663f1745a8db3af6285d377d312cfdecaec4b8c9f1611b00e6d563d99823f5228a5a3f9f3421315a1711796b1c8bbef1a734aca2e875afac49408b1967a85f3e87dd24a6b9bc7bc601c5afa006c1eda1c260a0701717cf79e8f7d1ee9b347627e1305ce893fd98ae7b1230b88a50187182b12acde7a8091e4873ded58d68c873290c4ed17d750697d56fb31111c6bde55aaea1f8e4a6dafdda3ce84ac8b5d4a4b1c970fdb0a35406c3369d4627864c71dcc1bcad98a4b39d20cba4dac79c19313de079c9f818ff6fa72f55c4462f42ab6b82c1486e222160be989ae2249c04ad0ff9bfc29e36675703827317f8224ef6997a5645ff9fb30d063c111d4a26257cba6dc9841d9c3a416b088bbdb7ffbfe7e910f242a78dd6e69a2ecdd8c2db0a24cfc50d6b10bad6b33ff9f632002813f3dcdf1bbb006d1b81dcd917a1092b1139b29811f40202cb21050f48f15b2bf9bee74d391b94cdef6360d395028786d93ff54f7dcb5c14861f6c910a88338bcf8d8ad3d0e0df20c10fa896bc79e87ed08c2a63873d9950a612b927a17323b814044a1b89a739f63efb26aaf473968385c2a46ce4e74457998f7d4ba43ea6414597a78cb9db4fbec79a5d78d38c0c35675805c41d34e789defa4b75993735b7f2dc259ff7f98afae971df98e02fc3f503d0b12176c2ed77f4e7962de7194c7caa2646cdba8e763b13260f7390db5852d9a158eda80dd09269ebdfed1441750fba2a7dbe78069befe30b7fa17c1b23df576e4f8117624b79ac5b9b2bb73c29f1c14d5cbab70e6699c7b6a2aae87bd0eb1b8c17945b8c989e4adb5a723685e5c34df3466b0de250c93f9c1ae89c59ca06848f439fdad94260b3cf804918ab22f4ced0dd47d33ef4eec9404af2de4189c220ec55fc1bd4f37175cccf28d4188be6b25a73d9ad80cd7ae327a54244df9aae7f17c131950c06311f47799a0f5a6b4996f4cc890334450e1bd6cc6f5670771c0dc607f8eceb15300ec4220510ed5b7deb3429de6ae5f618e1c222c28990a9ab4b4bac8a7a0e8afec2c75b029f4dd6f43d9d2e524b024b1bc37e4af454dc9cccc62d219ed2c2d1ede9b5870af108686cfca44c8d3a05ce973f6fa77d5ea0db00fcef098e7db4a48dc2333896bc898a18b6ce06d7ae8cfb0bb41abab60d89eee85e05c6d1d1505d6f1ab4d22e585da6b7da8eefda1ef45af9d0041746c7e442d36815dc117432870221cef64a6b01589af67b59fd01d868e201b02f98346c7152b973dbc5ecb79bd795c617735af11a6298f7e7c90da59f44d7a37632c97ee4f6b0b42857917c166fd54eb821aec9668f10991bb688e88892a0627d9f0d98283fec6b545f08dc712b6ecd5addecd6c7711be3686e1a1d9f6c2a51c8455754c58edafde234c97556aad0d662208bc5a7c9195b502817c15e31a405c8be5d111773fad0448139c3116e99de70620202a1f77755559d38504f73cc0301728569c88fcaa70dbd00424bd7285a084ae61a207cd485fb35c256ddb2f0be050a56cb4322c8d6b050836f60751aed9c13be78bdd9bf51b37a6c41937fb0bb45de47c201dd83e3bee459c6f9e8dffdae84e19ac48e764d10e38cbd1b2a9a6f4676deca9f208a428bd0e9d57272e5fea1f7061cff1bb7dc95f9aa05bf43fc6e795c9261759c2a97c9beca1754d3db8538e2826ba7f1e284a5355ad7fa6c852d6107f9032f910347daf661092b5c1f15b5ffed1369b194d9e12f0590770493209ff1794c17bf92e75220453760ac2f24bb77ac80bedb2d40bc3f30bb9f9cc4ec88b19998e86867daa1b4ed0e9f249a36bc12574011cf3a5da8fe62d5fea588e5bdc0e075fc3bd0a65c3cdf0b3155cec02a2863de0d1e4a8539d5226bfeaf6da09197e45fddaa8bded41081b9b1d06b55a85268c6fb38cc6bd16bf5ea2a2ad1a1c6befbd30724f7e8cbe87ba6baf4ce6b9908bc7776bf3e56221b33dcfb98536daf9ebd6bf33b8368862d333e976386768eb3f58c0a021ee88e7b82b10d886168cecf9f874c7edcb2a5473f0de17d120afbfcaa512fb1fca788f55902ba7b9a2796ba28b15d3f627babdef57113d1ff9d534b2183524f45f7a4213d4e9cd25c3eb9f6cf76b02d93080c4d0d24c8e2bdb24718117f0c2a897d528785f12f3d25f28afe1a53ef9a0d0c3929dc855b2fcace29fbe0c0d7d4459d3680e996ec0c95f79c489fb566353eecd4edea1f5529a5658e5f25e52ffce8cba2b5debc4dd11ac2606eb627ae6f872e4211cc4f4160ebfce6ca47588ed511ad398ecbbdef1b22c779c8f43742a99435133dd9b1aa55fd18b5b5cb977f2d2ea66d8437282a5b5c9b4affd040ad83d4b5cabac8d2fa89572d9dba392e6b45be4bb12ea7979a1216a2466be0f0598ed714cb20e02fac6b98cfe14ff689edbf3f0196f6a368b8cfef710ea59ca2c11b09d6b6f8d6244a8d206432dfba36810a3f6ca1749137f0f5557c062569f49ec8eb7ff0bb016d5f5e8c8f04f1cab0afb72de143112771fd12d747cf73ef522d08fa851adff84755604ba4da1ece84c43689040e54aca317b8e358cd197338166bc56a97e0315ec732cc4a24cf2c3f8908df5955d7b737eb480823717ecc32c561caa4fa6433101f36bce3677b6a2d48ceaf35dbe2cdcce250c43c7f2c20ceb47b78c8a4c48417e7fc6c0524bc1eeaadd8673de33e66ce97539608289a37688e296e5a39898ab29be47823ef09a10402b695e62e1308b964d10c2b1051669c9cec09be2b3bdd9ca59f5fc428dc96e5e1f9c9a2ff392a19f55974f9b8da44d78b33d988fc53f312bf7d817a64ad772ce6026118d8f9416ca34d8f08a4ad38a5b3b16c2f2f5a41d1341f9b9b1504b8357970fa9c6debf53e093db8ec4632e883b0c5203536c760449de5fcbacc7ad08c06c604c21079abea819a60f92013ab0dfcef942f9523c4e96771236dfd7866bd28620e1e532aec0ec6f435d3c4c8168112a14672dce7f62c2b41be092a65c13558e57505b8981c2723cba5e0a6b8a1997c7aa593708c6aa953c81b30d5fba68112b0d81cb319d2a032911fc4487dd2c3a4fc3025f29998dd7b84c96972825d2cd064b5b7c558a6167de521d31c70307c2676749ed5980734fcf85707a2927b953c718c8b81bced0660285ab1a548314f7b99f1628bf04c4c62a332bfc8c478569157db0c5abf3dec83db08d4755e5baa1ed72515984ace904715eae66760e9ed89881f9ec2e81f25439ddab00f3b26087abe9e3c8cf0148d14b0ee10011026d67f92c8c75ccfe76d39b13ed8d567170729a0bb2bdc98a4af5604cac1185ad58e0e08651a8acf4d10e0e5b3b35a5aa512a62e0a7809acf5737591ff7e3fa97c809f49830cdf7ea6bca38bc7d4209e56b77ac70aa586958d860de90aabc974626acde69122bd469acd2c13e9bfaa9ab262120c4a48f5eae333896a6ade58444d88f4601dd0b6cf8fced52e97da6ae83eaef65e37b6ba358d2872a69e8a6ea19487bd2697bb5e71fc3e293c60c8d3ff61faa24d519355dde1b1541e14446f14bdc372da8d2716c66697a2bdc2ef9858b2d1a04a36434b7c978aa8417a70fc064fe8dfdc6cc872356567dc333cc30a7ca7c07ae5446b2d79f500d9b12fb4780ec1543ebcc503e3576f2b302d4cf7bce3b7439c9f0a6f5e5eb0b072dda2637586989229ec145e0ca4ea6e391c61d2222677e77fe806b460a321060e27812277165c1f2bfad95b30967d8d71711a06dcad5008bf50a7fed6dfec9e064f3a55ef267277bf59927001b48f2553dbe3ea4ef0d643b5599c93238d69d4e5853c92604f82284e98ce30e28795a26abd4e10eb8981050c632315d9043f47469a165c5cf9f1ad7428eb12757837a12085b70f44efd6e92f2df9fb59fcc37183de460847ae4773aa9a77991d0edb8e0fc5cd39ed8c4e4c87ea7fb838df9cc037c24a4ab2e4fa276c6e02395bc3f7e5a31ddf2547f76dcbc15932d0f82521cfdcf691882126901534040977b430233464ce9b55e6b9abd345da91ea1a5608fcedebca4514fb9fd98c0cfbe8b8cbd3e6df8850403c3b8eff9fef3b4811eaa8e3d5024305f0cc7ff0fed967e0dc0f80997dbbbc78db058dad3a179d8f716b87f13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e689ee42734ab513cb18ff55e85ba93fb0aef0ea6d85870f7c13e713496be7407be58c566bc32242db148b2de5d9d8b8316716866b0c6afcf4f56144d84f819801ad24bdaaaa86cd16cf1c3a81b7271057708a7aa425d888cbfab22f7c385092e0aa5d7f1647083de3105885a53cbfce8993f3cefe18f93d6aea82dc1b6c7bb680a4e0a599e1d119aca1e7153ab1c87a3196f988632cf4a2378d7b519e342b8c496354371ac108e9d84872f2265e699db64245b2baaaf23f9bab4398eed8889da4ae623b8030d636cfcea125538bcbbe805f7f53ebda1a9dff0b82b9f1a0b970f74eb2bbb5746386f8fb1bb5a7801665f7b54f74dd049543c976e1ba91d4e78dab0cebbea0d5d664bd9689aa0c84711a830b5b1c7a708ab963b407a5b5bb397d29aeb54d299d57558569920d69e104668c2b4e53a9662288338d9e81459ed8c7d8fcba6f381210e3b93adfe5a5ddf8d07adbce21522d8537a3c94b5728c5ebf31fc09f2cb57e2695bfd2173aaac175e1b5e4838f5d0eda4e192fb82e48789b8a68c00f8c8827c4f300f9e314 +MD = ca509caeda05b20f8d129e488382ba42b5f014e2113a0e2597c8b6963d19282a + +Len = 65968 +Msg = b94100f200d834a0501a1c24568c74506eb103e71e8036b0e31508c831a7243cb5ba4ed7dd96ff399af74f296506182d808859577e56d861050d0cfdd3063966ff89dd3b813d4b8df5e396379c44b06da468d398a90920617b47870c229ee6081f1475c4f5b761c4e846b7f3052f843b62b93b53a78356d8cd2d40a02655734b9ec5dd1a40ea8905fc897b07a7addcbd43e4572f81aac2ee8426015fe81427560303dfe66ac00b78b712aa1b8aa7ff1bce4ff0d53e68acc9279990f16fc44c52d63541d07c202e46a44a0cd6b706367e8c63cdece6a45b943ef0b6ffc34b2866a0c5cc7f7df13b97489968e135b0c90e0388b81d8246187552923b31ed9303bbe71a489c751d7a922d6888e30c8f00f2bd27771018352b94eae7e72ef4822778369c7dce6d8b3360da1d3285458a225342a6d36cb35bdc1a8e57829fe002dbc612b333be6b23ae28d7222f6fe7887958186f94da589f732fc64ad32bbafa66cd05c731147acd3213addd4748fa734b2ac9e8820111e937fa1b28a37b895111b4964040779f710949e3b841b98732e1f0dd7b648ae52171a41459ba3655f124a44e86288fe4f779f10119e76994ad83d3da8f041cdd3069543a45e00526c1e7c4b301b1055047cb348f6aff012ccc79fb4a8b2860fffc67331355dd9005a9a13d4f1aa281eb4a47391612522854770a8fb4d999fd556eb36929ef787ef9919c36aa37c5aabee634291e79a88716967fb7a1e01f9ce76e941d047d7a780b611ed84ac2e029d004dc2b2d07c9c57911209d980881e5bbe554782a65ac254201704ab921bca52a8d8568cd247c8b85d0356621b9897fdbb939a12511d32ea65adab57fbe21c7d267780785388a8143bb063dc45bfd134fd48cc07de7ba3a3f52a34122ffd737d27cfd31ddabbc4ebabbdb480a56a6481d1c94ffb85128f216d215152c4ea59c32b25b0e5ee5d89bf3b6fbaf7a134cc74f7b9b8460b5e4fd32c3765a2512549ff8f3dcc58f4fa60ff495af9b9df8b738edd8e777fc7db7059b0b0f3793b2ace72e26c67ff94ff053c7413f34f96eae41fd1ac101151069af5a9428d50098751ddb336263224e7c0e74a1f3a118defb8d892b714a32d6c2a57644095cf32b77e80801f89a94b513e9019c120b82ae64c298f23f79db378a8ff705f9f3f5d37af1bc7ad04bd7ea7d8c781ce699bd48b289335773b6999b8814e6be42c28df845dfff85319f7157829ee008b5745312ad896142542bf26a85dd4a572af24302a15bd90a65beec62eac84247c8c3cc761c6b2a9b2bfd700c49922bb7faab9f5a560d53f2b2cfd0757cb1a5c367afaedac8d6964a40579bea9cda91c8f9142a662c9c742361faa3f701011163da6083a87a73ae38db5ffa6a465d857171566b8febb14586b969ef5042628f0f68fdd247f8ea794b443d15f50ec40e9aa898ea3d5af3cc0304413be7047a25af5aae241f0ae2ff6cc21a74f4bdb7352be70330d9420b138388ad102612f1de2cf89d00987a0349849f1ea0cd1bdd010d76bfc4c96ba022ec8fd3f5743370bf6c8aefee1a0ff65e79217020eaf0df7a269df32e779d5bff285fdb72392e9fd25858cf760d9063473591397cb10464a85fa4c8f749a0e4b41d40ee0fdecc251ed8aa6321d9c6f10a9e37a03d8c1f1594a1d265a6a93be249b57c3455c9d5ababd5c7d376e67949b19e5aceeae2089a45d271f2c3fe38fdc4d65ad4cb6311d88235f848fe9d7013431c43ea0b1a889ac3dbc799d7b05dde2f6a21f6fa144755aae285ea3f6475f6c9ff3b1d289e67be17a51d806927732d91581ac4684541c92bc2b6e0c3a44e9a4a31888fcad56dad4817bacf01ca4191f3888d639f5cc5dd0ebfd25312c6c4a8ce9972677827610f5e18e8af270391b35ce2c1fe27c39c395ac0236ab2309fc85e1f43cebbfc0d8e6292ed48643a293bd44e00bb86e08e8417acef4e2d4ca7a100ab41eb1abc37d05b6c12c13fd5d2d064b490c2461d62664d6d7f260b81a4dcbe25b6e71dcfa87d518e9f42413d541a12fcba3ceee1e28905ea1b1bd2365d20a075e8e94c9e283e4ce0dcf5f0da77c3e80ec6510793d492470b0b550cd59b16ad84201a308f7fbb55491000d7140370eed2fc28189d012c19b896fb40c52666ed38a5a1500b749b73b4858b7b54bfcb2b31a4eaa96631fd85d90535f76ec6b7687ac1a7347bd086af0681bf6600747ca71105be43562bad9256a02db83843b12733ba5465455b2610284dc31f82ea2b6a5c68cd6dd5b9e54817af080b8b64fd3149d9cf6ad3dd209e0231c02e40e97f7df8153faf4ba14db0057af178cff2438ea66641cb8b1e1f617c74de1ca43920e7cf543b9120ac8cd106490e886cb62a4730a9d111d7e5c9627f60446f14a1b7b0c76de99cbca24bb4036387c2ca755b63d1e9a8c31efcc6a8f13b1bb2faebece1caa77257884b315fe51185af51fa7eea7070ed69c729bf3bbc4e8a6abddd6680bf4cfe4aea6fe7dc929b30d56a0c3ae5f484c98c3c355c24c6e1ba21c540ce988da2b4fe4bd51433f449afbe7b72375b476e64b3e4e8446af93cd35e7adbcb2e1ef2bdfa1446616af2622bf2eef51e545076e566270920153ba6fcaa4478064c598341c6ab8a758b7330cbf7295d97d8f7e3752d6d62972e76695d8c8bdd26f9269f67eb7a69fa9d61f9b857967249f024ff3b911eb952bb91cb1f8cb7d3d43e6d8c57f0e7ab95a9a306199a9bfbdda3bf106019a2d7f8c774156a323022b82216933a5d5c17f0b6219f1746a2c2fafab05f0b4e62843257078e65075e9279ad0afc38bb4076b3ccc30cdae5128d49fbdf3465b6c487a87532803992aaebc0e72f0f7891fb9086f3719489fe532572b035d796db31aa0128dd310d5b7af434d96e142367f52d0f3413804c1acd521c21988fc54512b3e679f0ea0aeb37767e8ab05260c69515f99691184dc0e8dbef55f1a51a7acd6bfe6e53f358c94a3a4502db125834450fea22d3a4b1780c8a95542961be04cc9af212ee941e7d1905324ad89c323b6de58adfc16ca3cba125b326260bd96b7508696aa91585900ea2ed6990381763735d83d544b8493f0f75f4d4d2eb9235327c0c806dbdb48990d71d67ea2e2f33c0407a0c42cfcb5ebe42fd64144912ec6ac0835b20d6d3f0066e6a4dcdc5a133bc551a8da4fa52b0165479e1d36c8117849a7503aca60c4eda2d7e22234696ebcf66085f538106bc80720e50f99d063fead38a81f776852a73ddfeeed3f935e46239ef8a36ac0e0a626664bb6d24c9eb03336bdceb8d660c394695b9c526a7a5db98751734c2922225f624291749f3a33781c01c6f35d87c942fe98ce11513b6a449420d370dbc8d32ebf6a3df54acf0ee87304a6ab40303ec61a26e0f0ea2a02314ff7426d3b2d2f00c8130ad8c1b58900b646cc6530e28a9a5696837587ceac2c35454e85d9c79c6236ed8693a696585d6048d6a5a217433c1e681413cc81ce81ce8b667f3a30a1ef664a3fba6bd9f36b0b7b23e11666ef37dc0c11502afbffce964a18addef0e5f4f0c9a4b18408d096025e52abf029e4fa39f309bf2585a68f06f1e3962a70df0f40ec442d81ab767b0f72d16ae208cb0f92dd7bc53eb7593fab2345ccbf38d3bad112ac62d72a5b966d593ea24e6c17f490fbd5e6f9298e5ced5ebdc60fc18a744bdd2c06170e0654b661d8e6a7cc42259f0ea6a8c734cc6367f4b9f69ea359c7fbcc619ba3eefd52753d5eac80b1d03f17667c9f3b6189ef8585d8e2ee56d8228b30eb781015a6fc243c3e785bb5588db493b61ec8485d5dd092891f71446c2054db084fde4aa9de3dfee6bebb3f31bde126e1cbe051ad3ad3ab4910b9f4ac2df30b667780c66c654cf5e5f401c7f23c17909e1b3605f0130920a74b3af01eb7d04274738a41651dbba1baccd1d81084d25139711bedcc52dba3124376cf2a5a9720c0e86d242a841492e38dadf82314abf942821461a886e5a3187dffda55929216ca3aabe73324d239eedaf8a0a0880ee957b2b21a0b3b9191387f28aa26dc6bb4feeec923057c9f073b293459ff4b65b1c787776f6acd79fde0bba3d724b48e5bed79473027f7b5ab56ed038cb5db6ae34074c6ea5dd90959afa7d3c9c597749bf46e98b70122d076d0bac8c15ab468ee210f43134acaba3503e84afa8011b8f5d2334020278a59fa370706905472fa3307bb5e62b83f27007be17bf1eaafb5f9d56bd00401aaccb5d8563f6249738962530d8b513c92ba5c7627e9387bbe05f89c7ccacb35e0933a532cf5cf9042b0fc918a4c772e61fe9981200556b9e923a285fa92ee2ad867e825ffac20df7cfb525196344d34296e583b6e62a50bad99682049caf5570e954fdf42d51e6d6eb31401c5b54bb4558418f36793cc0777d1ca09fec57950dfb5f1cd9b0310e0a482a230ad61db4572ca4c57afeb3423d45738919e24d29ee8444e9f7cb890dfcae49d4c91aca45e0dbb62b6bc0b75f74fa434558c6ba99794cae6c34c6816913e4365d436f81f7482e20ccef066e9d846436dd46e0c56e181a43ac79e843acb6b498c55e1f6a50f7ea8aadef170387d64bf258ca77972f32b7abb1af7bf45d4fe418150471afda55da9bd8543c9ca2d0771fbecbd457642eec8f83bcc5bf05453d5d541cac751dcbc5fc5404bd6278dbb0661833402e96767f972b8a0fca2b0087108a8e19e7a0bf725529e9e27c9060bd6f6de901444c71386ab0ffa03d57e88ad8c042002aeb9aaa4d60eaf31272c567e1c5d55fc00e87e1b11a05c24112650d5efd1fa96986c5358cffee374ea774766428dfa4ca642040137183bbfee2dfda49490f5bcafaa6dbbb11dff756b6d3b2a29fef168cd7a41f39be60d49b52beb742acfa5f75cda764829ba47b52274ce24031edff2bee7b44ca09865540e76a6df12fc6fe938a2f9788a7250b6b8345d0e9e7c1a5d2320e776f58dc86172b4bc4fdd95c7d4cb6a53d763c4aefc850284243c75351a729c382d0b54aae45a5c9830fb3a427c7db731ef363fb6e93195c01f6dc8b4ad25d032c9427b817f5dd4d74cec386432d800002a82320d1f16349d5ab2b52da7c56373c64b70e074d5c3d5de313eb18a52eb4b13c84a1610cb857850abe8e47cd9ac57be76b34c775a90307f5abb9ef586cf7f2588e66630c9feedbba9c29daecb317b1c64d139f964c053aad91da106ec2318fa44a572219a1769d64cd09db022993a5a86591d6d8ceadbdb3cf34c30eb8ca4ec7bf5de559455794af5a18923682a32136b997b662b6625aae6db15060d72af86af55ef3f713f988444a3c46b148aeeb18540e855d8c8bd7467138fe8da6ba5534f543951993c541caa55f419a021cccf53bdc8cf0d992fd24e5b017bdaee02ccec6f513e84e2186ea7368c91a39548c7578eb134423de94f0d003e117750546df705bb58bcb76204cbd3f275974c0f34111216280f5d764513b18a5c485926c10fc5cc32a922dd8978bcca37e3bc7c9011168c0cdd4e534f02dd7aaec66ed640971e284ef2cac7473e3f784b216d1d55c7da777534a70ce75ae283ab59e80f671d7d44100205dbc8acfa8141c8e46e0fb5fc6cd39dee0f887c6f39b4ab7b2ecf137194285f6a77a8156c799e52a8fb286beac0ba8199d7bce7e2016d139ea0d30989bcfa737f17403803c5c34731213a4a34378c7810f1ff4dd97f373aa9220d70241308d6aa573b656efa532f038cbfd15725ebfa09fab9eec417a579411ee8d7df3ac61172a3f42dfc8bc062969a13a1c2103b7feb3e976b204f3a67ecf3ffb12998c48c6e8a05024b0e8daa60e5f03c038b0d821b59f2437c9a587f134dac8c81c196c00475e882b8d72d3f08dcbff0aa0ad4a930b96508379d92374a8899da86298f54caf4091fe49a21b8e50aed7013f4234dc1f96a19ffad7a18f931222b854540b33881014a5cac0da08bdcf33aefeb7be825767bf9236e72aca5d3efe02da94d43c3a94b826fa1437e73ef8b917c553120f1dd053641351e6ae6ed5da8edd9f7bef2d95268bbfe65bb13aef14467d60550bd89a051d7b5cfcc22e9f5d6243be26d4c9da05dc037d6ef1197dea430c24b2fcef8d7cc65551958e06643088f639fe74772dfe1fad22972c426ae4145ce84f6ccc7161678978d89b5cebfa08dc582a569d54b95ea51dfeec1f7ea9c354f354e2d60e5b06fe19ee7099fd64e8df63d202a518dda0d3b6ccb81781e258db8feae7752c13ad9e7cfe9626621632e6a12001f54112ee1f352919923a36d9db0239021192306350e9319369e2b7eed85b3adaf797024f71e13c96f8724e503b9568bb12095b31fca7aff1cc44ef229fd9481511e253cbb1032eb7b2f1d1c4e3909f9ae1593c1d8aff9f37b65268d82263733bade9ad6ac7e32604267f683eba3b0828e44a7a32e33929ee8fd2c7174941e2d33275b9359bc94d06bde4bbc5aaddc8ec84a3be75ed9d779dbe8db7e8fcbabf65084e1e3315fdcb44dfe771619bc00a6e292eaff09172aeccad4bde5123172f79973c856c1ec6c746f552321a732af4373cb1f6aab802f904c3d4e45da6a15c98460796e99c6e699565eba8f91b64aece23f53aab48937ecb68ef72116d9d6e497f76f8b1793bdbb8997b79057bb661bb48c224fc2b6e65ac0466307761568d15aa5254cc9b764237f7c94d477b67358711e05ca447dbd72cffffc5966813df832d635143ec66c99be99fcdc504c151b9e81689ab8621fcd5c283da766b1b8f1b7171981d5255956bd6c3a089fc0aded9342d531ace8afb2eb3b9162053b7c365de44d062b789d12f26fe6f9b4d8b03705dee64f8095cfcbf3b6b229b062fa4eadda3a21b024ba3704018e201dd8ce905cb1e614d1ee02911c35fa5ef6ecb5931d458b64f1be333b48ed9a0c59655b720e588f521f55ea8abb15e482572d30ac22c29b306ea99aa86770952ef5e2d964915f3c67d761ea1156e30b344f98ee1264edf424856b5306b636f9f851f5eae09c3267c6889673dd8639d8d54ed4503e4a0420a1e497eecedbad43091c02e26e755eac0eb1683a37bf76d7e5e35409b848c19b48fab3d0793e500ac1a29e6276c34073a0d05b8fd8691673068b9c7cf8f792ee7a4623ba9e54abbbc2942cdd81ec84591d63e4f70829b55487d6122c78ccf474c6457bdf86c52cd08c5f32d6288796c6d4ea98f26f67cfd71a21598ac03f52d8ad7720e1faf65fd37f6244cec2fb043787e2fc2476a9c2751e1bd72a67c55a84a059c754437ec14f2c4bd749f9dd393576db62efa66639d904141f9dc80567f34f7bb39908a4ddbe038a6eba3594c24b523271d68733926d7cb89727796607cefb4b8a32a32f217aa59c7f91feb81be38a96bd5b9188689ce857d289e47db6524447cfb3ab74193f73008e83bdcdc298806689f14deb28f1c7906627a1a2f037ab0ee89ea9fa41670c352fe21b2c32c4e4208c2a14c250069af0a673397c51e9afff59460748267bd1c8b85f6f8a091326632888aea47a45f2d7280f046037e2b397b66c4bd434f85439dc3e533da1edb79ce37f4408142a4fd27f5d9b052ead66767453f034e96703e6e0113edd99cf283c31809d739a4e027100e185c1b2b438fa17af9cd0d042817e886abad05d21e8dfb73f136d890bcb11413d2d2c40919bc104c19a3e76052d6f29cd3fcc68a089d5d90d4e5c7cfdfa51d4b329bb74c01f39e05c70d447499817389b361848a58bed1b6d96d6d29f30a12ff5d3e5abca23e32ec2d948c06a22255967564a79bb5f53f2e285531659de9da777e431721a5a4b44870bf28df18c07f0b3e8d9785c74c8f41ea257d4d87495ffbbb335542b12e0d62bb177ec7a164d9303965bc1037caa9344766b8a7593288d33c957be86fe223823423f786e5154b4c8b737f04ad777652669f493cbaad3d462af1f3db86cadfef036bfbe38edbbda95f3f4628d05cdce270589ad453c0669dadd024e39fee29f35177f3a741be178ddb527a454980c42b8c191237cc76ec21ecb876c86254ead446d0459aa8c7414127338423bfec1776e36b192cccd4b51710345151760608db09fd5b846bfd230d6c6aca8adba6bb0b9dd5177cfbe4aaca40c91d48840c6d50c3869c2d3269a638d280b64245b89a32e1e074ef03adb381a5014273336cff7b9bf46f5da411b00c80fcaf12a4299b33d712994d8937b9836763289a2c30a8a3bacd3edb69ff2acf9f661cc4a102a555a8f6ec5e388ba219ad77388717604f12479c70702a3bfdca5647671ee34aa2e27c11d6eab5b0588b9fc6d8019b02dc0e6be66de48fcb0f45ce26f7e9130979207aedc0b8abaec12167d771cf602036e04e359cff3fb94a882e8b34ecd8481258cb111091c08ec7232a326cba0fc147d017106788e30d95da9ffe86f1db0e55d19605303d9c5751d813602f8a50eef625ef00354922cdd785490855bec3632ad504528684e811468947e82407caae2b29fd8c6f08a503facf5330091d394f79aa3d7f7c2e4cc4907ef152b2f82609ce226a3c7b8e13b6e501e6ff0ad3e5db2a99681478026f7916ff372740270b07c8595d98c2a315ef806229fcc1ab6e0e25eaae99e4c9fa38c05441ee385a22b1ff16ff29ac0e53b5b33c45af946c7df152e53697274b940776c4382f015a130e5ca17776a299741066d561a0ecddb98a99d22996a950e6f02098447303ef8526c741ee070a0a21088177a65832c8cbe3e3f8ae1cd2a098faa6198c40a6e02002293f8c654d2a01a6ec683c5eccf35a0416a0eeb30a02512df08c392152f78da968e37817d4c1bdf190f04a3a24260ff31c1210e2b940b992e73c729b6ffa74236e75dba50697fcf25359f875a02b92badb963d32472079307170603865b27c79213ddc984a7367af1ee97096aac98a613d749d291c6b3910776f2b7f9ce74eb26b83a4770a1fa532daead725a9c79fee29f35751a0e8a038e282faf87d6192d6338e5acaad615f836da258aa05ee7a6b865c94323c6157b298f1f52c6ee7efee61a7271a9b023da8c15a18ae2506c3df3ef77b52569c0686830446a2d8430d01dc1633ed3bcae6abbc5942b973d72153380c353b586354ba8a0312e2243b95178e23a5cef780039348e9fc5156283dce5ce3e975a87ce95894358475b8982f385e16a64236ee3b694c506e0036c2bf5892c4c086b0af6e678be3c1e2fe21826d34365dd361da3734afd7c24d7c6e4ef9c2f6e2f8d6c68bf05655f4b15ca037bdf8ccf308de0d9ffc5bc61dc08ef292bad4c276538487e7faddd3436b3cdbf53192208f69164f1aca3765a9e2d51635a2b070a41d21bc2b8d08a5d697059c65d0eb7a5a7f716750a52bfb8e3ab9a4dcba3f4896e0152bfeb1bf12d6bd1fa92fa2e9227cd1581fea951fd2f451a362310967917123c79d096fea636b66f2cafaaf755f1ce8313d90a2fb3002adf91adc971195606fa1d9f4ce71e1bc19e6c96e00787b624a658ae9d5a75ee0d82492856c269a894b0aa966d73cd1f25e636d349cd8bc77815dce9e350ca4b75a8d93d3918ce9143f6ad30791337e34bdd17df48b7f6b831580d156ca1049afb99be46e0d2dca2ad32a2080043f2fabbf98c255d653cfad8c355aba9d9c97ef7fb54fffe8ef84f390b0587938462b7feb200400843e321e70e63372b599d4a033459a2e2abc6196fd6543993631bbd7c9d10a9d9d27dafe48fa22251bed49e95eb28ea2dc7ba73ba3b1a88905e927dbe2149ed32af510749dd9f07bd5823ef38764f30406149f0c08fd51f1ad55b7b5bd4f864a31921ca8f6eb651eed3efbe536c391fbae6e912eb6af0477375cb38ae3ec8babbde546c3db9748b36a0bc7e8f4372f30de73c5cc35318ac6aae86285da51759ed3d6d6edd44863e555d0ec244728974a9d0a820c0be9ab840ee00dcb2ce80cca7d4d134d6a637c59b575b0c0bafe8ff2f41b1216c2412e5a6b2bfc87601718d8c232470c24515cba92e15ce5d221e0d0e98fbb13e29fddefcab377dfff48606fab6db8518b7acbaef5fe37ba19f9528b874cc62bf16d7eec325fc6fb90e2ad383ee7ae45254690dde5b38b6816efacccd33b7b857912daf8ac1730049b4dc7db858673107d1e75f16ae89e165169b83ad744214a01f6b9bc3fc3fe22a9f076ff88334ed91868408f8c85baed53d03c7e9a5001a11281e3dff34c797c4135824c4ed786c8808dba6154732515a38d013f244564b3331b1f0ad098e63beb83b26cdf5864073cf6ab0fc99827b5c906cf267e0d90a8ec2c36e5df9090862f43cf0443a030bbd40adb41f3dd0af54ea56ddbaf8ecea7c51cf117271cbe8696dba1bf8295320fd030119edb2a14feb9d1a505bfb265d847531649b025b763a7b4f042a521b129b9d217ce88688ff892f13d4cb75f9f64f93a6d228391c444eb368438b42bf7311757b37a027dc10b626ffe5a9e7fc2736337c04ba74a2d51e8c92547b59a4a507027ae4a5253f35dafb2b0d47cf9172c0eb3d56b24363ab428d69a17b258f3ad4eaacfe57fd16c1904221b6559b5e6b88117752b033f339233c3ac51b24c39723848e0f491de7665e62706b33e9b773f44c968334b4c5f168ffa239dbe5e66c4b769a71e91645769df293b66329311e8e033762a04440765c6e1c7a2dd76c1cd5275ee0c864a584f769080273e85fddbdcbb67b9371173aa60e25f09177c91b591d47b657878c13c34c49e9e69598441c0cb0287eb9aeb0be364b57974581fa4fcee16d270d5da5a9f2d5d72bbf7ec4215ca103d28c7b7b0d9cf8f9bfdf3b3c11c2b89fb744bead14134844b3c477d0562205982f6801ec2c98ab617b933943478f49b878fc13bc9a23fddd3f53281b32f34a5ff5ead69693cfff294b1010c2698af131fc620136948b82eafed9e3e730570bc5b6736e1ccb9950abaeb4661bf05c6ba6a234ebbd9bd05408a2c75fd6e6a3b663f1a03cb14c8b4c83371e8dc26469f5811ad347b428990db0abb9d06cbe9fd6a537dfd7268f1c4f2a44bd1c584e3a4b5bb6cba9acc32bfc6d7a100a1b3071f913e9b0a1df1bd2d51b87fe76400653b981169c9629e42fccb9ae684164e4e07a3a9791313d7b358ad15171400c353cecabaab4719e141aeb0fb9313acc3451e683b21019d415cabce631a3ee3f435c4145f3a1e08bcb53c3ea1af94ad3b74cca79d9aba03573e8f7b4b914f53bc94853ca81f34775828103d3542ee5fdd647a2a76ec288d43e36d7e74832e9943f6790a3c6173aedc2191755e550b0bd29c8eb76f2032832ad3ab9d88f8c3fdb0e60848c408c1f4712927aec5eed2f841a47217303cbf2c3794b3a12cf9f6c62be99abce71d08933fc73aaf12182b7053058c12604bb9d18fb0eb510a8caf3ede89972f4ea72fd16d833241ecd8feb93046466fa75207ba5dafbd77cabcd6abef4d676aa1ae1ef724e5782cfb38331cffef07f8af5b912fc71790d9148e535686bd7232873bbd4c8b767238e83fb3e1e98936731d6d3f78f572cb418e0c0e87cc622052a854f41acbbd892c5bf56450159b3da99c91f9dc1047d875e33df086e8c3da90ad04aba70b4225d2fb632fb1abad8362d2cea7a4401f1e3db929df9a036906b63e50ca3d748eaff07190fc4bd5477065672c3119ac810563b9d9c4 +MD = 4b9c80c9b67a578fad469635535fd819e9e6a49f04afeff733894f1bb7ae6009 + +Len = 66760 +Msg = 1fed33468ab4049d65c430452a7f1e589b71c051558ec471a8ba0f62a68f671b7a5a6f03fc66d959827ed7d3f8add28533485f05822e6fcd864fc5e0446baeb1791cec402d17f3868baf5813f09b86f642f8b3dd8392127da65f4a34a14c28edc33c9045484ebaec2b5f9b4d3bd1a071718aa220813f174aaff285a6e4b93d9901c2455973949652089787c900d78abf68051618a3bfe4fc4a105e7e363b557bdab4f2c5d670ef81ca5e06ce6836aaa8ce71f60b1298e35b1ec2bd03be59d85df71c7fd29b6a2d421abd00a59b756af34bd72a42f5557a2ed40f8a7ea59b2e05ff01d3c5e70ab85ba0bb5b97c01c316a893e9905757b133f1300ad371289bf3b9b6cd8e9e5d9f894036000ea00b366d32dae2d9cba941554849c0f762eacf3c973647585ba5e56b7ebb4d7e682c373f7e22fcd4eeb28e836ceeb9683208b33762ef192e09121388a02c0c8d56fd3bf9e4eca616431bdf4ad9af52ba511aee509751b184390ab07d7ed8bbcfdee6cb28f1986d226b3dda08190c3b726299e734befebedf6df832c64571d99a82815b494ec6c06dc9a0f5679575c204c8fe243044568fa41a7310df9e67f491c44562d736f82e6ce0ddc7e5e98c850606c02bffb1e9b276c103e146042b8b2a16bb785f549d25a4435ca7ef8fa102da9e7874dfa238a5dbe4131a86014d0be81c5c124e222644b853963bf0f263ba17129f857c7fc3f8280639230c004d0540279fb7302a43e9fda422fa96bc35193fe5add442b50c27ffb9dea1649b9bf5b6eb0eed81d756a408b78b5a5d37a5bea9aa0bf7ceec7193d7418c0c1c3dca5bd0b9120bcfa3df014e0027d1911f35f908b262467d80a4ea336fb9c99f6148b6122451b8862a5d60520090f6eebd5686c1912976db1c16998886f0606a90a782ffaf367a21d5426fa95b4f40d2ac97b668e8d9df640947006b19c8770a666740fddc48a74f3f4e8da852cb35c9676a26630bec06a4e296dd4faa9a63fb3cf87e911e00e64ac2a228f3998d4c5f685e45449ce8731a32b67eaabbfecdb99edbaa5df6e7bdc0fa0de00f921dfaf139d4a181fe47ab3074067300c05e0ad1f69142b8f965743e5fe23150def5d82b667da9bfa2922584210748e64a40a1b0feb9d6369822c01f6ebfab6bc29d6a5a58a9ec324c506891b4496ecfdc3f28e301a5e36b557817e0a1069cb4ff8d082a9af9e79e4dfafac5c84d5321d8b216f499f5e8aba40df21e9157b3c0e83d580897ee1a6819fa32bcb773a480d241e242321a649c163cd545aa135f141f36c070f9e6f30442e6c6c31c6cc1615b5711786493c5912e8d37f275ca1d3306f1e7f01b8500175b492d9551994847c66a3ae39bf2aa4f5f8790816f0c6c82320715028738dff5c589bd80116987b8c613b53062a7810b2bb4858f002acb9612defe34c782c14404311d3fb68e2e18bcbc16db3332c879058c7d77c3d5c8f33bf209e356e38276b9d7b310cb57aa0c2cfbd64098150f0d8f77fed8446dd30e1fe8beaaafeb61f238d625afca6669e7992b89fd0bdeb32d3c2f603cec83786b311b83074d0b0e6b13b4db693e2b0c5f83f3a88d08e0637c6dfb67f24697378f0212fd65b8b2d635dd0c4ad991260fb86fcc986d09da8e6fc7647cb4cd198ede255794627d8367e6e744fa7d5dd7c2a6cf1ef019a91d927bcb02f4d0ea9aecfcfd61de6a05ed21f2e4e770c10ec0e39f3483361f413a1e24db4f86f3499be0500cba3208ec6092ee387c34412e61d1060261d0fa7cb09fff8ab29988448ce77bd5d945bb8b7e393d646bcb7a374b297feb536717b60186705bd4b2fc85fe90d4eb476fee7da69364fb4e8cd8b3ed4b6141d05f0377bd700bc11e59ec68514affaf7d473e3d7a20095f9d1ef91eb8b55e98613f5a5c34cb364d07f4c476359450a4f3321745597d7f23cff837f23df5cc617e6e68be181694721a2a112a1bfb7c6e31d7062fc4ea5aca5f9f31b90d9b3f3f8082cb27c7e08ab2dd405f1e64eed76dc19c87475d1500c5e47a52ed88042b8520130e23d4979d91ca0e0aada0fcf6261b091736828c15a8c71037fa3ddf25d4d5759e2cbeca519158b9a06260946d29b6833287c59e1de5aff73d89af6a92910940e7cd06f73b3401f9bcd7245380db1cc16585a6e97e0ee7a5fff64d55065c43fb976f1d8caeec6e34cc765c98f5ccc61a3ceaa6ecaa7706a2ebdaa82d05a90e1c199d8319413cf5f13bba89f310714b140511362647c095548da14030f4d9d018ead2d82b86a821c5973e3cf0856b04356a83d514ca7e0c5151e4962f7891227887a97d11e3b08a187b5bd5ffa90c99f4e9cd1436a701f41fd51f2a76f5518dc17c7bf28aece8976034ade59f1ff864e8ef57741a61eeb52683ab6d85ef8d7a6a35e4d8e506a2c2437faefc4d4e910d7807bd651e8fb6f7ebea23effaebb76109405e80cec591932898c98a98b978ec28bf5977e184dd0506751322346e61e9f528538a86ae1792863ca800ffd512998162d61cd1e5d394dcb0f394d0ec1f6dd45a6e66cb24b748f2c7a50fe145f09df8be9dd48e273d0ff52a4fb84ee932751d52f9a60acdf31ee4c65af7fb708552251f2b3f64dd7bded65d721d0cea6d8836beafb8b41e4d9cd2b534698ce9536e6d0108adf45d0299f6a715339964032fc6d9db2f557a493b4310cbd53424ed3b5700a0a0cb3a73c9ecb3b38c82eaa5d43451167a6d765882cc657bbb8f97b551699aadc8480a51d71eefa79847e2c80e0590ec1a7aa70dfbc52fde8cedc64e392b3b6a84f920ff5a03d79bd766f0dc35c135c68ffb60dc1ed3dc7ed9dd351a6b026f71576d330ebb41e7fada4e7974f3edac205b6e5835646ef7a722dc789c5f85a35cc002a4f2834fbd3f118cf104c0e150940d51e1cc54fd0e11e879e5569f2b83875f57eb3d3a83b3e30da10c1e2552ef9c062481e379049c39ab242fdba27a6c7b75eb9a51598468812f090f237998c5a2e684dd2d392c0e78db699c9df1e8dac3a42c26d168d8479416439eb766597f431ec1480c2dc9e16a09c8d00015fd6ada7a98153fd0f5dd8623ef2f3c53eb78f72f885702bf64c187b6b05ec4773e793a69bde9ff3a4396f2084a2534cae54f2989388e9376930b5c52be8d3dae12a25de21c1981fd6800420403354353cd6e64cc605350ebcb4b527e420fee131052df8421287aa2c9a600d798c3ca571a5333698e49ad7773fdf489f94b585ece2719b07b9b4bb2eef4b8d389553c6d329a1fd110d61bb2338fcd1642c40ee9928bb70769e677b65e78d488436e3c0eccbf74a3969d1e14709d46939d0e643c03fd11f9aaae81158ebede8655732bb44f1ffc419de34716b192fb92868f0ade98f7b4f78c37ea690613412e3e089de61057f14b855d09517d0d56838dca6539d8083a81ad2736293b32a7007b93051cd6d40e11eb7ef73d4968e1f7114505e637ab0d487c00d6ceb4797aad8cb6f3d10930ad454ead73329d32186dcf936f5c4e5c978c77395ed1f8743685efc8ecab0dda59561d8d0fe9fef57448071a0414729973fe3d5520cb8daf651a235d41f37b5d8cb4d6724fcbd52f8026665d56974aee2cee2cd8ef23da7770dab5f8b652d826c1e218119540b65cc6794be1e96d3dc71d0cc428fc636588f458260f9c318ab2a38e40df92f118e9a1c1462c3f0ed1c0eeba91e9fb12c5406a12d226662829ad7be9ef30ab458362cc8ee3b0c9e49d47fc7824804dba603a4c8b68b1c69f2b63e5b571b950c67c64814283040c96f6e8d0d5ea8066b2ccd306324856201f16726b5186de15ec6a4b7a8cc28a998e85000654626ef8a461a741980f77f5206155674e8d138d3fe3a402be10d8d343be4a07641aa055f7d523693d1c8bc83b9289741d02fe09396efad4670c635c4f09035e9571c921358dd3f781fe261bd9208b1c4d76f22c5162ac5a0803be97190be86659064dccd60235771732cb6271a1e6ca40579469106554fe21954f163a2d55c93f56a2cb61b8d4526d48e02ead8d0908962359420efd714b343f994c1ae3d7f1b8d17c9f61381d33e4af08f2d5487e41df78b549a5918dcbc07121bb33c5db7a46151fdb4d068c762dd3aa31917ac3105cb64cd27ca806ea46c87ce63d59fccd677010e18d8abea39965487d6a8a53fece6a648edcc7794147b40f5f6006a855bd910454bb5b0046c7c27838b8fdcd678513b0d17e66514b43b25d8974627abd88f64ea75efe1dda29799de6055b7be51130964cba1b2b72bb41fbf6c2e3c06f89fe745bd0ca53c84f093e27e81a0be2034fa953183c64522ee14f19d40125e60137f9d4c9663ebb98efed50d9bfea08dbdf5e77316098640f2eeb75304117bbbf2163c4a1585b0ea7ac000342c392a3fb5e1a4b6e2e4422ec79359b603a125af459368de0f7254bfbac3ab1cbbb925df24a812256ebd409375ed1fedc42b23e413de6a300e929fdf58ed1eedd0e55814133179e542fd491805e25021cf153e0464df8a69994d58f35b28a0cef3278d8788642321e60d25657e5c3679adc93eb4417e0fb1390b49a2cc5b7ae7ade68ae08e2957ffe3539c21e842171ee5adeb9eb0a3432f74343895b26ef561858b18c62a685ca7bf3975f44b7c3c37ff2b0c6abc366c0cd530ee7415485764047cffe166097b4205267a88b0f1eded84aa6bc06a1fd36fe16733e6fed3e817b02207da49f4fcf83a8271821e8b7268fb92ce46c446c0812242ce9373f6f2a314e5f859db1227f0e8b4238d9e3112cfec4afea7d1937a6a1f2789247f99bb30b52e9905254943539626584f37cb164adf3cc38999ef4b51607f2a4127a48ce51d63b3872e829a48cd3fd870f142c6035dcfe4952540795e6eb37a917500adead3ee0e86ffa672f814676a99d47c6a1fed6b2b727c704dbbd02941bd709366685f3572ab9e9b148bf306d872e9624ac918785ec8a6650f8d0e4b476c2046ff874aa2a79e154bc828f284e8a237dcae27655e4641ac0907ffb18053478e02bf6e1a9b74066c9cd6f79a4a63d2c6d3dd615c86ab8395427d36402f2ff6c1adf0465a8aa38ca978852172be10a99f2d20a08556553669fab85d43c2a120c130d8368fd6fad7d6c61ece0349b9d0c9d4bf0c69370b033118019a42a0726d9774bf6743e74290fa6ee925d35424ee4cae02cc8f929792f484a015c6316a874a60ef00fd25425e1e572e4f6c451aac31a530097fcdbf8aba26ddf856dd5013e2dbaf2a46f8c4ea496b3574568563b27fa093eac2524c938be6ff687b0ceebc68cf460da5c88edb839145ba177dc7a73e867198df87055770ac508fbc260a27e323fdd0a2fd6adad4b1a84c39940e337741133a5ed6b47b70601695a1936dff5bbf1c9cc5ff1e8f45b4a4504431ffff31b8c1f9c8a61faa94ea9aa2b2bbdfead98beb98973672a1dd8082efbebe64b374d3c3fda45e0f8ae33224dc78072790636fb1ed9f0b30b9a5fe8a5031a203f7487a606d7a684cc36520fc6e7add0f9b0453b8c265e41e7ea316039c2445a471b695e171d32b9efe229d697e40a65db0c11f4640722a0699e1b137fa200f11ccc50c8e33350fcde3238fb43553cbda79a4bba48e4d46aeb167b56c93ac6811ae7ec7afd82b7ca0196fe026ba3ab24e9eb40f1ad67e9ede6f3b0ceb8e50b86bc0e7af8c8b3adae1490e7605367dc581c7f903ef3d8e9c607b679cfc149467e8a90baa6d72ec91561a093b99d0a56b3a9b7c806ded04a7fb7cf34fe64d01dd5011efa199b5c809c83567152cb1390b43c2446cda0e6826761ae50bf3601e826ba29d7d597d56abfe4130ee0400c10f62e559b17fc743839afe47ba697673bf00021c24f5f21fddc2e76cad6ae6c6de60acc435a4411c252fd0204391b689fad9d97480b53baa08dacf243aa68bcfe004be8ce291a47b74fd37798eb349e79cbcd0ae78e0817f950fa0607d0016647d18c4b99e8d17e8d8cbdc59831756160e728ed0f3c0eb27ea2902265ec0af0d1d62655453e1c2ecb96267c80a04069cb7c3bce5db9ba22971f09f80c52d805328ac4a64e8d6ce0e7f8b7fcf0bc48103fe7602f217bacd0d912c1c759a90aebd06bc1af145b263d7920ccc746e9deed24d5507018f65955cb1a4240dc53164d41f5a7e0452bda8ce5badf8c11bd875920b2674192be4229d3b215d512e58c81edc501ea3f741c67b4038a8befabc40ca9fb2f043d37e9b58966b6f48bd4d0225a365a1d91c84e566aa738672f493740273c124866f7c28162a4a03fb5b573b71dd60b0aba9cf2b1802283ae5efa33cc3ee1bb8eae726f35d5f86c170eec09b88f30af223866ac318ae1d6c1fd436be937887537723c421b89de650b15fce49f44b2b10489b9dd3ee181bc3298c9222fd79ce9d360b9eddac4c3359c697ca6e3d4f8bb122d0b08423a6e9e70afeff918659b8402e88fc4dc3d43583b57dfc31e966f17eba0eeafd3ec25181ca11c733b8810de167802599849db47788f8abbb82f7261e173b9567c7d3193972af312f1a57952beadd62ea770f78dc47f22033906cf33a4141f7e946410ab608bf84ad344418c3be85fb682593485bf852a4c2992c1e7a410658ac4473eca1972809d78fb15d54eb62383a158fee9ca5007d90279f6f851e7402d749d387a124d408d3b2042d847a5a6089cf6d304655e3f3c4c12db004e0723c93dbc8a25fb9aac8c925a750fb7257bd7cdc93d70111e55087f03ea79e90e74d0884ba07825d9293e271008e62db40953cc36bab77e0edda003a3a1dfc35bd7e5dcb117cb31974af451d79af61befd31f00c5b734dcae4db582a89dbc6d7db17bb3836ca9af438651cb1787a9f2275d9c140cdf92ed7b099b64593a6a37e296049548fb9def6c7fd8cb667b8c50f92d5d7e62803c0103a5d4315c1493b338fa030a68510282707bfbfb3ad317a8d3b6c5986d45aab7c6a6e2621798a37fdf52197b781991f90e1f3dd30b2ad67a558e76fa939c69823291688f124333fe54329a70de91a6c383de00db5def4345ed28e43d6bf0e2f0e5d9b910e2b0afaf261018732265cb62704cf78cb99cd88c18fa9fa95cefc1744ef4668fff4d8112c37f161aea127a6661c0846f94b020bd47880bf6ece56f9cdc85f364ce9642b9bae405a07c142e4fc6fd39ec85c5966a1755bb8ea27e57cb2ce2e227e7178f148ac389cc7ed7717f1e478a8bf349b41306f810d90417149faebfa551cf3da0b3a1a1f4f758f8ce74e623e8e663b9043874c3be7e884c207ad060df7aed9532079e13e9a9a0e4afe1ad36f7545daff15b0f6d16e7b599f5fd407ad2fbc8aabd80ee7dda6bdd279015d1e5187e577b15fb3538bc9d026d1f976d52325cf6eaadd0016449b6643e19b1f2b2deccd7c6fc8964db0217054217c9b5ab7026eed18d45755baa01ec9497269e24acc854ffff863cb8a9de14c54914b7db0ee226fbc681c8b88dd6bcc7b2e422bf24e965a299822b45f66ad7535df8f265810725c5f3f56a2f77bd8b43d78b3ee6b9a8703b750d9f278a35b368b0f6e3df591e61cc9010d814da2eae958f8c313fed9e0b46fc7926c1d7d74f91dc8f1abd0980617c2574910d2792bd394557a82f3332ad41ba6540a961c7f25b4b31f56314e5bb612e91337d02922dab837e02392cfebcb819428b42aa70422187700275fdb6c5f805e72de8dd957678e48fede22d6ae006a3a145222468c5711bd9c06a466c17bd65e6fed52b253e0dc2ddb9ced6ff8dd9d3f23ccc6239e2e672dfcdc4617e373da93114c67dc9daf6b917f4339c353c9e44d5a0a5e63c20ee16e278f8e1759ad55a260e4147ebd3a031af3bd4ffa462c0509c3f53231805f49292509c48eab930e36649ba1c13ceb6b703ef0773b5a6fc91d65738ab3618a6505ff3030a4628ccff5265a55cca1296d3c68c6f9ae15f8f831486dad11ecf5feabbcee1a7f05ff5e87ad0a7ac8745bcf267a261c7c02305aec75cce474aa09dbc2642ac94a1c568495019156dc3eeb5ad57bf729cda67fb6f7f3767704212ec6f300cc862b30f809c72bd931318540d6f2732368c88b4ed6f9ca55aee8dbcd85e696bb994ac84db5c432c855eed4c20b246b9121963803809b0350d049604ce14231e14ad06cbd50351e48093cb0d9c11469299c5e35087d85a54e274e3615a2b0d625e1e5a4b0a1c1f8409443a3edbf6a78d320490bc3955eb839f920e78e90d78f6fa5b0f98e7111c7973f2a3466cecd9d77f77f419e8fcf45f88fe6fb21726063a7df5af2bf88cc9337521aecacb6e5e2fd67275fff357f527331c9f83512f25bb6d70a18abae9b6407153a51273f5b4e4db96aed504d17ea9227f1683136367d82d5e9f1bbab2643efcfb3ed4030d7e950356f74f8a03e123db885d27fa7d3d3f4211f0755461437d7caac485d5300bcec225f7c5ff69dd45c2dadbf862d7265f402d3e2e3480e49a74c4ee8e86e7fce0aca618bed17db37d7ce93b6ae8fbb396bc22e08cb7abb80479ec057474afb2893739e2b0acaa14396e35c3f5f9755593fa7570377a1c4e4a0082b1de4af1dd06d663de31ed8970181b433e2010be9cd5afa765b4d88d07d98d1b7c025658dd082eb673b910a647881893e28fcb41e9ba202b596b7f6885418438bca7433f230b84944bccb26b1b17ca9a598b95a9dcd01093a3e1bb2937009a4d0c338e2f5f6f9cafbed35f425b25b5d91bb9ec50e6b5e552ddae3859bd9513dad31d83a3d2c2cb4b557353e698507ed2a1714bc177ba02fb7f376374598da564b9ebe0373d93950998034ca243267a1973684096307b1df00103c903bb48a37d29151053e0607e6d0f29b61ffbf62c001a05472981678ad2fb99d5825354b276993f90847ba80be8135d0cba236e2948fdbeec05fb1dde16c770156aa240470382b1ed335fd8b1fd5cf3dd0b49ece636a71b8bb5fdfc8c2e1d0d05373889d5868e1282fb1d71053f44a4838de000d76b9ea1c2a41a82199b34e72172869fd28213d80e46351f8a0052e5bcac7638915a5cc80d6ac14d0ae0d79506a70cf0e278ac88cbaf272294f3001dd4f17cf298856a14e88492cbe4915d8d014f3c3b79fcc09b57907438ca79f4d3690784dd516f3f0ed06c0f7d1b2f3f35bdc5a4ce0d60e8863e849ca09f27799cd5290e37508a442c518b87df230d0525a8b4d73711579ceffd061118976e36e0c60079cf2a6931e3e88d9c70a0dd47e33e9733f53a43562eff9f620f27d09535a81867d3238e50cc01dccdcff8f26fe50be75b86ccb69cc9d2bb1fd2e4d11d01f7cb5901e06c594b39e39c5bbffef5a17d2fae6a5d23e956f2e3ab2232e246dc41a3bdc9e58593f7fd4c78824a5561bf2edabd2e700db44cfc93847bb6a6ab3af23c1699b75c9948c871f2f24c884c848d63083189f686124c653c2dc480a29495fee40fba63e1c437ee9c1a2b1a0e98056300121f50f75d6eb342d700f2c58fa956b68a833e05d0a83cc4785a9d30604355455eb4bf6074d01838f5e08fac62b8fdfe98864d6e14a5c70c8b7f645a83b3b43865de8459ff0cfe7f18e7b99fd4213f3cc858049306cd27e4c1fe01d568d2fa59c5e1625c5291f095ae8af3485a9ea4f1886d160d0d6ad9edca5b1849962db24a0d81bbe0260b791d254eef1e4c6dc9ad5729d444bf2b5777e31afa1f822056699b24037ddfb602662ba7ef8a403b07c0b332d1c2927b2b23cab249dfb3576138fd4cdb8df63e2701002a8724cc7309fc3b0c911f0dc6bf61efb569f2a04f6d48a260a6b8e000519e614b487657922a805d1b94b2a7ba9ec2b0a8ed00ef54d51938f3e76753a91c6ecd8ea5e76834f42d77e44f15e6b343c6bbe13572e714231b1fab301197a4d2129379220074c7f13439fb32b1514d48de6002f5d12e19e1ced4caf35042602d2a517f3f4a13c79c3501c4e23d6de5187a5b9280a43ab29bc4e6e7b39bda8788168625603cbbb07fb06dd5dfe293172d3afcf47854839abb6dc485f36cc6677d57bfe03750d31ef636ecb28e7967500190c2cd4f7a9f1ecb59fc2a254bacac776e5d54271ef06faa28fccf704a612c400c5b61787ef3db35fa0c58eba0d3a2f0daecd5b1ffaa2f06172c9117de0708331e157575ea184ca5ce637699150207942dfd095a8b56e99471dabbf7bcdf7085468f6dea3472df75579027c0008e36bbc7ec53a34a8d0bdfd9a584926f3101a10637af27f6aa203f2620c0f30bfebce24969390ea5c31232af1baf7a5dc21800dd9cddc1a914ab6daa83f6a49fca069212c24e0f358fa947728b81021109403f4d2d6e49b448dd7b65381d472486a065c4a5f71772491d88b4939dec115cf6b6d567d512b0bd3302d6cbc97d32ab16b7cf72c8d9d4960b7105b27a7ae753c801f6eaa6df16f8487e8f9d7f9952add612a3c737a8d4ecdf9ab6769b40fb84109b321457e16f708a58e05ba43e0d056b00e201c8170bb42650674e74d0d6448d0d07836cdc12cc852c8954dbcdba58420cfab10ea6e1926c4c98a89bad003b89b1f7965a21b942a553eb378aeaf30d07916e535fdaeefe1de9cb137427f1cf933482ebb454cb997789766235f83f9a0828ad7740259c5db7b25f2d92e42387360f29f1efd7b2378817cb7361880895d04d488b64096247b630f5457c643de8ee9c5d37713d058333994ac9921ce6770c89b00e1008e922b5d00e09952a796b2986bd2afcf74e23268885034c2941b3f938848de8a68995333a09d871a99e9473389a4ac798f49dbd6ffa8ef43fb2e3430436796264dc159ab99930a663f5db583ca5258594813984aa2beb3eb2a27b6657365f01c6591a68e90ca087dc17c6450d3e29ab7c8cad08e19996604498e2cfcc04bd3b3d791a2a3304b6aa848cebc624f5f59da37f5ea680b41f2d482ec00bbd4202934cc49b5b41e1d192ffcda2680e4ce7f0bbc1d50a120bf3da4fbc8996b54ecd9e76b4248870548fc5a042808743a39f3927fc96901011a31bbdcaa5fd4ebb7cb14dd03c1e68bd5fa708840cb04faa79db7a9819d4f565ab5634e1ababd3f8ae70349148a9758cbfdbbb2abd8f9cc2165c262ce5455c688b0e279a112eff86c15fcd8fe09621532ec81a8f0961a57ae33fad136f6d9faaa0c8184c6cf33bf663d46b248a8116a12ae0b92976c314456efa81f43eba49acbb0889712594f3c7f472afe7ace6afe742da19928c4043a218114737d9c7e4df0843fdc0c190b16bf1bf0e51de2377a5f508be52c055de218d186f66b6f2ebb2370ed783c7531f52ea1e08eb84e3e85dcff109d2b9602e442c846d095cd7e8d6b5cdc962ad68783d5c24121d37948c8f22279e9abe1bbe7a84c9b28831f346bd130525c5fa5d765bb645dc8f6cb1ceba9a20ef2364d52935046cf26becb19fc5bd498f26248e746e8707aa9aaac8495096517e053428d92449f28f4cd3bf5e91330f681bb297fcc65cfe1ec7684466e1b54dcdb8b2836898c3defb738d590d9012db331f3ae699f3967dabae3bb2b1fe657a50a646813232e0a6b9a8803b1752cb1192991416c686c22ac3b78b9fb507257b9956868ed0634ede6c2442c22659ca56e921d494fcf07e7a196bde77ea8c83a61a51f918bdaa5cda65af4b7a95059f2fb931f2edb7b119dfff43aab7bd0efeae562104bb7488a94f488200e0fdf6c7e08552057d815922e0f7c786ebc70ef4d8df3c3ff37f7ea29187451981bb9dc33dd00a82e0e4493811957fe99072fd14da080c013d491cd745a480ebd9786b1f8c1bb3d1a44b11a7e65ac549225b59cd1683390f156bb +MD = 38a73d219f393d7afd58588e937a2ab966a615cda0a761e54c3d1b9298c104a9 + +Len = 67552 +Msg = 27bd08f7ec329ba3f14156fa9698bfb7b57b97e9320c0d53d4c931125356ab80b27dad59ce73261c385c39b44012ed58522226b08618d43972fd6aea431d92180c0e1e975ded422218eb01fc8008e6d8931ff4f79a23df90fea87d745da577f2dd7844f8c02a587c39f5981a7e0312ff1f79eb0596b4981f1fd251f8ca75c3d7cec306c620b2cef34482e556648bd9949f38f224a35466b07e84d0beb115df8f86f84b47a40b0e4fe19bd0f85726a361ba65f09ae989b109c2c6e10d3b0e31e2ae1ffdc575bf7e58b7464147815ed82c1907cfb08fdee2f3949e6c2f8fe72398ee3e0386ba5688d56f8d208c0abae0be632676aebdd85f369c165a6ad7281c78ed5f45d39c569390b07855101ac223df41cacddc9d01919a81359107385a844b5489abf34349064f230ec918d7ff0a565bfcbc8154e0e0e7ec03fa4ddc04c2d9cac51d30d6b64bdb705762ef6cf8fbed58c32be70dfdb5e484897d86ebae40eaf81a83d07e26c9fc3e5b09dcff355f6ae1280254eee1765af2ce03f88ce065468690c51c6220e8793523a726b93f9f969d3229111f138d12ddda72ede82399b41b2fcb5cab2c101cfeb62216c19d213935e98866c91b60d1eeb6b4ab27fe44fe5f007dd880d2a9ab411c64f440d74f1b5055089a14825962cd69af7a70faceeafc0ac4d70a9b1befa55e53085d769003977f8ff727cfde8c21fb4da4eb9da041975586a3700ecfb0d383d99941014bbbb16e06c32b8a591692757470c27220cadbeaad82dbb42bb67393ddf01300ea09482a5647473c31c9cade0e251afeb74f6dd01fbd731398c82c974656fcfcd4b601bc65cba46cce6d6e3e020c1ecbcd96f80fc69b5fb57fb0a695fe11247c718a862b1d9769a298ca299e386df360cb6922b08866c82246348a98ec69b208294c7f7f65f2bf66f7a7a0059890c445178e93ba4f64d5e0571d80a5f8a8ce2864c693c12426ce4153cd7e7b0abcb7031bcdf43502dfaf7918322fc60a14a2658abe6bf84479bdba14056908763af4213ef0ed2a891d7d75f33d40020af7534603fdaf2cac34b55aa21509b5c453a427e7bd25a0cc67685a4f045a62e0970c54374b0665449edda765c50889dc4cef9d80fe459fb20498b2935126ec753df3158f6f18acf4015e2bc6df0b8da670fc0c7079f42f253e340429ea4caaaf30301371338e08a4a35f6e2b29bdc70b06f4fc1ff7db590d5b65d9789773a477baecd6465d10823cce09f7fd6dc341f155fef3f53fa22450a452b8e82243e1b6214fe477b64521a4c8844ea571c80342a6437b5a1bf099d7612429e151666952ae80c76a06d6edc5d9f7fb89fe7213e441eb1bb6516dbe8ada02b4cbee814435a9a80789156aee854b8a8613db697bc16e1d5c71aac29d515615e20ebf3f7b455aee2a3baaaa2dcd646778aad25643bf7501c4f3ee973e151f843a128d45146c087bbae78f3eb1866eb359b5a9e171c89dc0dda4e593a7bc7b7845401f3e1a90fd763ff78acd8296af99af9e29b10fc330822fed565fe230b31989fe3fd0929b7f083fd264ffa9e7703f04cc1a6f2497746e40340ba3f7570e8e90b5b3a38674d75944e0e57e2d5ff8cddfa744c2b92eb2ad9be2ca06ec1bd600e2ce4460fd034d90d589d4ef16e8916cc9976e53d56f3166c5605c30cb63519605afbaaf003028d67b35fafd6d698144490462ca80423bc2471589ca9c16c97983c2dd3796e3b252bc4c204e39c9117ce756e6cec28f16e9aa68187c651e84d0e46e75a1c704312d23360c8a82f2893c2bf5c307a43e0b0276c3d3ed3062cbc4ae1a49949b7bee8e355b875a50cb31ae9e4ac11e2d386236318d80c604cae57d6b3022b91b30319e7c245866ac3c50f7c7bba7bb666363ac652de8aeea3e1c22a217c8b84e0c42847ff749559d2d30422eb13f8555a8568d990dd34ee8a6b6dcdc3703383df56869c63d20cf2c8617b55c954f2504f082005694094e09eafcd2a0f89be1eed4ec75da5fa67e602f4e78d8cda0427b21302e232a515552f3362d76c2575d6b9216cf42c3a30741111db42ac3fa85c124a83e8837740bcda7ac14e6fd0051bc152ea086d3df15d712cb91dbdd2496dde232590d233b1981efa5b079115e68e7477c0f2ff6214e2b1ba2367285e81cda4216a73b576b2776b46b28b6663948f60f4845c493325a4415e8cc77220cc0bd2b9b4f9939cfdcb5dc44a526645999f054d96acd14dbe22ae6e67a731b592990870a7ab0322ee14550794f4f748604de0078a5d2e0e28ee678e469edda97ff5b3dab4f06ab4fdd2ef9514dbbfc8730c7fa6d1e5c5f0f057fb12ac06dc68eec2435c6f7250afb7979be16c8f26625c7b32a00fef2f92cf0fd7bffa87b470596f557a39995b8fa5d2d860ee77a18286eab78796d1d16fff669bdad49a0c5c6a5d58b8a5edc1e1430523b83d3dd7c58cfb5cc1f92641e52c0ca5f7aca63a897c2cdb9c26e84a3119bf1c4bbb3a3f87c92dc0e3b964f79ebf52848af544d594195e3c994f015aeb8451009ffb052f65e5f252615a0668f923e8b62930ee53e8cc521a3480c15a9d2d7baf296f274ddc4dc9afcf5d932c91143fc947021b3c03ffb8f2f26ec0efb27f8f467caa0901577b4427923693a8d2fab82c68cb43f4724de345675b5870c7f51c850e1e32f063f8d2583e6770644b31f26e031f0123c011718fe7f920944a2893d9524e2d818e3104c03882b1f576646efcba5fdb3059f4d43108aa91b0b58495b1edbc613b32de4bee24fae0c2c10c9e56d3002aa0cc629be75df2245c968392bd34eb6683fe3b183068428552d794f10af1c2780b83d529013c6260fe69b00b49dc4db6024ce21a4596ec083c168817979af96bc70ce71c1d486dd02cab947ff62875c82cab6da28c2579f1d4fa60727b43374e69e3f2e5a9f696ea5dd8ab5120cdd6257996384172885edab41fc882246eeec86a95930615bb5018088d5f3f7810f1566fa9cc87a7541d1b6fe2fac7319292325f9e420e1f2b3c01c3164a8b6ab649c37532a4e5890d373c5ee0a1c21142b444af6a8a5df4babd10042fd7d55702620520dd6bdb96183fc60795480341e3e757e086d68654ee55cb421691adeba9bc8409166bda5d099940f07d47fb521a8de4897fa117ae3a88ac138702658700dbd8846a2f825c55c625b0053c2ab04b2a9300b184727f23e82aeedd94acc7ac226b29354134028158fcbcc99f11eafa4fbbecc8fb27363ed6d03aa6e2d41c0032c46e242b9ffe10d42e8d36eb31609c6ff7b4227fb661efe7349d6f578bf2917f7cd9a359068d889a4387e9ab09cfc5fdaeed5a7ca080cb9bb07d837d24f9f48aecf22f54086f6d4dd4533e491b770b9b7a0eed9c66213656ec51afce4f70adc7ad2e44a725e213514975b16fe704b1abc17f383987b1c4bb30c030b55c1501c826047fccefa42f372b45ff69ece76cb11dd4e6ee85b10b4b362fb2eceb55a50ef00b3d2fb6142571e26a54d1ad9d914df7a65625d0bd5e696526a2bf7da10c0e83b9096a29b07a9407597e219995c3c4e74a2279f92552a8361b8cb77385ab39697470e6ab17b3102279c7f4417e88d85556c8457f876c7a2194ed6f7d72173209e3e03fcaa85368ac61bea435a634dada42a422d4622071c0192141ec04b46afd8de3cff8e0c0200da7eecbd6ab7c5edea4629c883403019a1ed4d95fac2756bcc8f831c65fadb8de92c4d5b50ca3d6eae2701d1b7b88bc082c848038d6c477b02ba9efb38360a597d8dd5c41386fd57783592efea72603a2b89ce118233060802c556430ea8d68b1d094ca0bbd14cd1d1d8a4cb2555f7af249aa767e0fef839551a739cf038894b52087999519574043f78fe0c6f4b9746f6619bacafb46737821fbdb0e5ce6ac3a2f22555dbb9bb174c7d695bd13c892728487288f73f9929113efc24f552c018982f187c64256a33804fad60520e167b42b5f3a5c186d7388adef7a328acd475b9271ab7f1c1c87f625692c2faaa846acd12e7a81471688c766677d387c4ee008f43f3ae8c751f247afbe02ad1f81b1b50c6163cf9e8964c5d40445c198255e1a1e96a083c29b54950a45e3fe0e025b75339480777d3a7a1c5d326e7e7cf53417782496d0ac5d4176dbbd5aa2e4be8655ed345b1961ae4b23887e51cf7912e489a775687fc31c2b658a60d12c31fad4efafcd4e35ea695a83dc448a253b22f1d912e5afb1d55c74d99cfce20a846bc99ae1cbf45d85d02aa5df2182203189ee9e4111c7472192d04b99ce07ce4a65d6f039bcc7e0b2872e11e791d430dadc3d31c87669805663a043f770acd7f29d8f880e1c43700f02f740bc21fae7b57e504c0f7fe0fdd223875b3c715bb82b6745bad566e17bd9b7f8ca933e60a55004ea358cbad8202376d7f9ef3caf0f4347bc1126394c74c12ab5182353900a18f44d96c6a3b997d8b22488665ee11dd8d3351386efceeb53efaea1d31e23869ec10ce853c70fb55089efbf6844cc946a8e534a6e16f35fe06b680028da759b4fffaa92aa9145192952bbe73b8abbd366dd891e422b5443151253abab3510c8bb04993e419ee423d190fb98769d298b5c456917b9b96c255099141cc09a8f8f5e747b33af4c7775c7e9316b9ff8a00cb95a55cf2b2da57731540bcc0f973c6fa8c3a32b4a26797faabfffa91e29b9d81c80e19d1d148ac925d7bd41fe97c1da2876b37da8b964b1c889b8f987bcd19de45d9f1a15faa69bac989b16f4389a6f6c022eb35181c3bccfdaefd5530e819eaf44e0be8c4c636f341b47a3b6e6308fd1fa7754cafc00e11f2826c516ab348aebeb590316764b946ad425808d2d2ecbf8d41fea7ba4b6df44f5d031292f74b318955a701b24e9dbaf57c7260d79dfa45f039aecf9f86ff7bfc88ea220e7ccd7c3f7779e20c4b885801aaf1cae58ed99632d7ac4bc8366db0e14b4a09480a7495c6632d5bdd222327b914fccf646b32ba396321a39b265e9be7ed4b4da669e8860861ecf58e9c152f0601bcf5bcfdacbaef253460821d7b43f4b814789260d257ebb9de3685810678cebb58c7550cf09d3a650e09e4e26cb0f1f2ce1273b9da0e59b22aa82b99a00bfb88f9ca9860a56b046ad626283ed8eac7e4a0a1b13aa7b53995f9d3e8ab88ef73b1c788ebc0742d347db540b8f967fa5cd6b3afb4ace25372aa723e2581692c207de988b7f505eab2e6d3defbdbc2e79a102ec3e3d632f1ee39be7148e1e9cbe836885265c8ffaa66ed578859ac91b968d93a66a8824096948a04f4bb94b0d3b522cb6f5bfe0b7538da6ac63a337b78ad7bff1e6a76b44a4ce56d50e462674c6e8bdb660362d05410f433210639292d533ca476927b3515fe91210c2d12b63efbb7dfbfc4bbf74ed684db20258643e0416552f386596b0092d747b0fd6e44b244ef000305d0276c72d2894c00e270975f3d301fafd8ff12f1ff07c4bb3cbaaf307a66b9306a09b5cc26662bfd15585c950e678175c0995401518ad1d145bf3ea9a23869ac514431ccc89a4785e6a436cb1e1ea141d8e0ccab14f85fa651fc6697ad9f9be14d81e85bff4c28011efc2ee9b77e0879e97d84d89279f4a228192fe0e4c2d8372668e35f15a454d785074ad71faf3d87bb17846e11331a2d91bda16d8fcaa716a3a029c150cb5571e36e947d9ed8c8d11657d257da5158af5590c526f6de91e68ed2c26af9e9b33500d814c47e2132c1c2e5787935f936903c3ca2f360271d0fada5b7415725f48da4eed19205b302bd86687ebe69543d380e6640bd17ccd3f9c9c20f2db4a8a2e09658d3d17db6c02f2c89ea0cc089f41093b8a86a61f63b0ca9d0d218569a44959fbd22672c51f57e7aefc64d80c0e47e93dae1e487cddeb1177808e98622631687c6c73e5bad281239421a68f22393ebd574f311d078434ed962ba888c6886ca161ac93c51f2e153302cec455ed78bc0222de7db8620f24db835f0dcb09535191362304b5847a8a9295346cc0c07546342adc429efec74147c9ab0cf3ad1f96b48450452b6d4067cea5f2fe543d9743efd9d92e25505500ded380448714358287b6c4e38b4c282343df9b0784d7575b71ba55af0fe920e9ed2b8f3309f14dcb8757e16e79a39a539e8c9cf6d7004df38636c233a33bc3731f5c1856d0a6b0d84fe246246b060f5f3b37696acf5ae38289e9bf5a83bab522d1cfcc3e8fa7172f2de063c3d3d60fccb68a90d1d249a0aef94d9d8226086e7fa1010b489b94e936bdccbabb48b614227cd093ba944f1dcf50dcfd590e8767e0099a661398e29f858c11bb893e08a4e70ac3f28369fda37a1d125f3da1ca2a0a67e66d0dec02a2a1f55a069c28503a80fcbf2dcad7b7ea25da7823be94433d45689f70b61987bb02a60ffc82ac2f5d86af2cb60f72105a591598eb3a3a850a37880021aab5e4112dfaae3ddb1de8866ebeb71bbfad996c8a3adf265f18f2294722c2e03a35aa7d9a8faf2af4023e3dbf97d8ef5a0ea5994fc6c5659bc43d02fad5524d030d3d28cec1ad446c0d72fbffb6fc717d09e7790045e6196ea0a83fc91c38c893c13edb312d032aa174393985b8ac627723b1845234abc24642d6384873d0d34ae601ed684e5b4e42faf38f0809633306d0a6339c2f90f0b13f3974ef58d4fdb6e038d7ea92101faee63454ed25bb537ab5381f647340153dea648e24479fb8563446432e94bc2f73ea6e33bb9a0f546135e9a041cc13a05ac8c9dc9ddcab93b776ac87bac2d9ee006c23a3e9d2f9b648d72d5e9a768632967efbf8a2647300491bfe3e05a8d3ebf2efd71dfe6ce4e9a01d85a2f52f324c5f615d5ad89ba09e89989dde95b34499b9da0b1a6fc46b6ef57d9525d842824e3414708bb6de9ebef7811de1e18ea687d3df2211c485e7c6b77bbe5fca4d10c8a30cc803b3a9e7f22149f0d08f776436cf53deac830e048164ac63a931cb483c3abee64b5579f6d88567a922e61a28170adc733321d92c1f9b6447aaa539a32959af3dcb12eb45c2926ec9618bf34cb914dda25e3783e901ba47bcccab14ac008e52412b826a7f40e6d3b414f77f5c8d8bebce862a7aa5d84fdb459799e8ed62474c92b51a73fde3e11b0ba5af3ad214ce6b5a337149fcf3da7374842822c1cf22f2a52051943c2c1fc932ac199247df6ae0f7eeb25e48e4d8c4cc2aac5ed3979ff8ead5be57c47a0142cb80dd32185dcfe10a205444343bc933bef3bcf99d6c1ca3f64db71b216e243c28dc5086ee108bf02370dd8829693a34bf67c09f89ad37a83a00d26acd78f709fd0719fd13882d72b648c496a2ed9a6c600f5d9d12eb6f5a3897a6c3431b08309aa9a0213325030d45209fec3b49683f2342fa8ee397225e646a9ac10cc4c634943c798fc787cb144290c6155cfd22218bbb1df156410f09600224c09516bfaa7c280c953b20e41c5101dd9e728966b7fbc03e40f579740f9de6eb6e768152f6a4f4dfde2880cca9d2fc5ce4366e9467160ae21a4b90ffc5909145072b853eadc14b79c6fa0803315af8ba82f32d49b34cf39fc9b33810cfca89c8472ea2c134336450ec3a5716475b8f8d074345e5211302cdfbe6cf4582be48fb9aea5a993e8e080bca63de844057193acda138f5350ab1031d30d70c72de57456ef92d1501338ee0cdf10ecbd0d03e4a528786f86396a6c5aa3bdfd434cd2d3c5fd59ac330c66196738c785b6d4967324280a07d31492c8c2f625a4b4ced3356da0a142241a938936770abb18a350c98fa0725e23284eacd194ec6c00fc1220b6a0129c0c86e7c4df658097c9c25c6d4f59577c5cbec4a1ef44bb5e101eb41f08c455c1d1998954cccad220b279e0e7cd1b626a681e1c2e84cf3a80cc7ce4b7cbd512b95d98a2c1636ea85fbb1005c070ad3b2f2d907fdcf8fe10dc1c5dc872679cf08d96ce59910e18a85acdcef27f9fd989d3955c1532b397e67ae90b88d745de98446682d74e34927d1bcefcd0acc465f45f87c905b81d62636019cc4d6ecb66b2e6b4fb437f3ca2cdaaa8e2c6cf461a26daea2078f69e29309896e93fc062fbe57c6782c6ad9011410d41c8fd718dc0c44ca8aa95759fb2f42a46aa85547264d90c695f885f97a6804e83f69c19011f79bea8ac85bc86c6581c135648b2646a37a1a1dab01db92b337554b3cc500afeea36d2716f53bd2d0478e437af639ed5a740f73b67705e6601889e49b59d1027c2bf0e407cc3aaaf9f46a093e3ee8a6dd0f353c9d4deee21939148fe7e887b60a75e4460d393b714d18c31b30bdb8ff95bc19dcd20f1d12290973a1b5099b372421d5c1a9e4b4b2344547edf50b31443efb3bd8f72317032a1a35ce7525920253a033eb60274cda59da56f5edafd831135cf9c57f32531186ebc96acad4f2a403718d37c2995a7638788ec7ad041432cd51f206dca557d9e9eead0b088043a8de36501b33b364022a803dd795a08bc5c76ab32182149bd8ad935f23d0cfeb6d2e3f1b1a55fdf00ada8212aa4a2d85668c079bba21d8a57a5c9a6e49960c708d8e2c5cc98be194fcb30e7bc43cd3c791a5d94a151e89fb5b714448e0caee7966786e738d5806b9543e85f799e06b98d38f201ce6eaa103d886218d8e01be4ca477761dfa4cc5e3ade77904afc73d9fa8b2ac928408a6659df5c28ab5bd1480b3f5e3ba74cca79a664868217a73c2328dbaaf59911b1287085a97eedc7f89ac018e37b7a17a444429dbc3ec9e58a1f80f01d8d082747dee943f222886ab763539aad2b3f4b7f477450c2cb46ff8556689129975ccc73102edfdf1a628d372a2b8d6552de31860ba5473f31783d544f4988761d7f455d47a62117706577a077b0b9b2f93e11de173e48dc7946e620928c9bad2658dd2e0ab9d3432c787219d34ae63d274933b2f3a51c41aa974410a8979376bbcfdb0ee2cfbb0a5482c4cac461dbaee4e6de2828448b15cc559d4d18d43778e3cc86245650a315f26db6dcd45d61ac38fd5c683d825c00e8673afe6aa9515ca6372899eea4510c0d2090778ba640df2c77f39bbac659ac04b5634c2780a7c90cf8079432348d95ae839ac270a440f0c73aece9287a48be2b275f5fd6c003681ef86b3eab66215bdc7e1ce60bc02887122f8f790d05f2e162a5785effd12be1e31d9ebfe0a3d3049ff95d0be460c24b133e2374f4cf1fbbb317f4712b1be7db6350e73e59546d39ffdca65784eed4e5d450f201624096f425651cc2e00601ffa77a8de39fdfb5a1050f3ff572d027fc5d4b4249e1c02135c0773876a9fa3ff4b681d9d839ae74e5b87a700b36708339b4195c74f8b786268d3590b80b5f6b62994f1342af2771ac210681c25934b044e3a088a9308d8e6e93886bae909d4bf356ca834c8ab4769f4699b941628675c4f2ca0d100faa01b5db561380bf1ca84df7dc701b51bc4966311c61b1d9cd9b62e77d35d21f76a7a56b89ce5720444918836c24da8ca7b3a8ea78c1394670ebc5cca34617e85a48e44d07e55b3c7ef8fd0361e5afc4dc7c0d7793210232d92a95a8238906f1bcab1a89baa0b39a307ba37ea5fcc27fc56c3fe257c933256f237c84e546c8c20599f025884688c3c49bb4fc1fb13c48c94be333ab00f5a59a9d2067d1c584e39eda0d2b5b21013da020d586b74b45a450e0a4707610703cc25f2959cf4d63dded361ba21a7747922ed2b0225514041dc2f427a3a23fcb714f324063c7278d365c75bf93ad918149d479eddbe152a23a884f17d316d62fcca9de0d8ba19c2979525ea305fbb7d8ebfcdc34b6434e478308b91a09ba1cc3d6392b37db45f2602b37ba6f00ee3074ff0dc42bbd64501981abfad84c765bb01665e1675b9b7159d67251cb8d6d467c0d6ff97df72a9f43bbd9d9fba432d91d1596c744128c633d016deb5db2613f189e8943d06c7e85ebbafb202819d6e0335935a67708fe0e33358f50d079b0647239c56acd2549483a04779509b44ab6196ca846a745dabc64f94047caea43fdaf668a351b2971315723b701467c76a3f8d6596f7dd209b3f7d5e89af30c0252faad416d6280e0886a9f212b877a43f1f81daee9a0b6723b1551ef0ff5e7d5aa799750da4c337c959dfe1fdd73b497e640cb117bbaf9fc9ee6f6be6f7583a54f54ab20447f492f9f16ca18ddb2345cccf967e9ef70a49122914bbb811ee95887b4711973a3cadff0fd8a74f4ed0278e94a7a9e0b6cbd18113fd94f0f9520d89bc172a32f61bf76ce7bc79aeacc24d5865c8b9898564f78b11726e2df85300bd3a235273f612fdb82b808f487f6a459ea57223e5dd55f9b4b42bcddbb9422db7680430b6c4a22f654dbd5e9931489ee5f62c8fa2492f76826e723a6696afd2fce8222b97ec4a0af8b0cb6e1d5cddc7b2ba50333b3351ec78c2fe1a7b1b0c9ee21d15c973d79b2ee7175344416caa4e797495e52d365dda0c34280475d0e8e02b894790f700e5f9b4c3bd67b1eb2e91ceb765ebd4cca3bdb144788ed332b5552dbf4ff88e12eb09e658925ecb52eb4016f538ddde60d4061c7667f03fdb025c6d119786a567fabdf0485a800a3e60c7e6b09721a69d6f41824c9eff081440746e42a6b1c98a95a477157e71faf81f97b26bf95dd9ccc60e973955f1c889002ba5a4f61086f55c5bcf3286ab2a3a883e0e99e7f8c48988bbcfbf558efd93c1e0a7cb2e195a22bf327d320ba1f4502b395fcceb79135e27d7a050f61d13eef631f9278732bfbd2ec715a665ed05e389083a776c5522b513f09d90b022a7d51dadfe4cc9f3240f3b880cd23de2bb5f1229032bf3239f28dd853bf12c3625f0b8a33b9d4ee123a35603e777ec39a14d672a5e4d085ac513f503fff4c2de1acc57c035bb8e734b141eb929fa09384418e87ab06d24615120fb0b4e0e0c70f2c26b63810a113fe6dbe61638cb0d95105c26a88e0ecfedbfba4ff9cabf61955a6d742b821b7f8d93555ca9b87d71a68281a2126ba473466d5a745dea9b8ac19e480286dd621202ed2ae2f21d83de033723db66bdc0a701e67bf8a621f4c07c4acc86e3e760813630d7097ddc709b219abd430418d5e3a6b7b95d71058dab3bfc7571e124b9357e2ac430bb79c6419829a86988f176b1bb5d7d033d09b8b3671fdd63fd39beb761177d192979e759cd608fcf53dc0589a644419a78a2f861a4115edda68af37f85a38bf34651665c37ebdde4f32d14e40e08a183a265df4e699d943f6b9cfa06324b5b8f9094c5b16e081d3af58917493917174f48c6dfd23e00f819bae424e41d6b762ea6b88801e651c831c964af31de0c1d6dda4a7c8587d804ed12f526819da06650e7412fb627555979ed442f2663341e5fe57527e0ddaf453a124451674976a6a6e0a31f56a79f5b73dfac39af4f3ba4a5e8bb846cb5e333812756482d975ab1910162f96bfd7c58a02f113125189f5ac05291f49187104a42d0af7d1d0dc9019fe815205e8f98ab9f49f7a83055bb7b4fc1ad0af7f7b303ff9cb462ee134e3134031e36b6d450feb1bed421596d3cb0a4a44139f85e480b27ea198bf95e56aaedc1029efd7251bc980c3b1ef8e58f855f7913041b415b9a5c47237ac7357ee93dc056ebaad0075fb2a0a113a7551053d0ce86ebe9374a6bfd428691e04f3366947f7f8f3773ee62821a8a81dd128bb6c9030163eaa6a0ea9b5a9773dce1f0cd926d011c3be4636f86e87bfc12c44e2878b5370e88260b80b6fdfa9305b44368b8077ff5208822d15188d9d4e0d0d42390638c4e5a2bc6d8b0bb0462033cb7d265dd40ac7e059922427a48cebfdeba22707c75a5d92e7f5d490069834dc1aa953c6cf7c4bcb332fd0a4b3d2c08346cbfc99e87977db4a188c06c8e595e09b82b9c1509b055378cabe96a2b8f62786865ec1836b5b044c9e5c75de766ac7b5cf01593fb11eff912c99055986b5711399f6898076 +MD = 3c91822b8bf6252131eb1ecdb0d5a85d33dff241db96ef22615c0816a4f40261 + +Len = 68344 +Msg = 70aa0d1df63d21bfb84080a82ba173ccff9d51fd54294d6a2b9192651a5f9269457e9a5b899faa10fadc8510909b04991db6afe782d98eb3232b3dfa98303fffa6ee94936d4e8e94e2c6e0b48035f87b3b0e8f90b6b97e34b536d30fd504242f7b41234e0a1273535945ba1c6435f87b41ee177e5692c3f4cafc7b2c39a2e800acc06e12c8b3025645a23bd1a264aba0179e6f3bcc2c05fb48c35eda2cd4347b21b39e6a0ff8e2a490268a5aa48abaf2a666c04f7e4fed5219d4a3a01660b0a6c262dadb47aabb452016d03fd06fcc79d48e3240d6c32200237773075f0f038b78144befd8913742dfbd340990da8a3e8a5dec983a4f4d0d50f3f6966fa9d6322912192d2a75fca2b362df3f4b959b48b11c17de14bd1682869253d5aff6d0a1bea56b1da51eb26d864cf8696866a99f2f14da9bcbd32466af9ab34c85be9ae220136948b25402ac3fc4a80f5116594cee8a5e56c75a20c1b2543d845ac8dbfd35a43d35b7de9466c61217ba6d6d5556d4c9ca977019b19b77081a0497dd3cf8e7a20c6c1e850fa3037e6cf1243245c5cb1847e72eda80fde6fe7154a2c565dd1d5301764d111b6bde50d03dde2fd0a2babefdcc696335eee77d6bfde548fdb4bf0141daae4a61c73fcf6a25032a9ff4880413d0897d777762ce3086c62dad83b4f2f720a7f789be0e446331fbec5ac31f32b27bf6f0ee9f3f3ae777af3e1c54e66e49d1a2e23b5933f7e2e92f3da817669001541884436e6607b9590741f22e3cbf5f7406d11e9f963010d605e431f9456529e358011eecbf7dcdb236ffd91a9e2c62913b8dda981f37147fe6ab9e70a4fb51b01c2e262233e64c0da440771ef4fc7ab1a9de184cb753176c3b5897856b98a244cdd40417a8885defb9cc74452678ce5bb88b80c444ce41266ab4c33f82854426d4bb60d307ad29e2dd6a79941de88717d05eb907afeeb934dd87cba6d20a5ede97abe05f399bd76d78e42e15bf94cc6d591d6c1de1fca81efa9956c2416e18f5806c2fc2259a9019f2003acff5c3c6e6bb91400fc13f356d2bb10d9cb8fb9bf2f6c5f304b2f47c6cb38746caa8be9d095e82dee4360189a8d799983b20f70f5d6080d52ecaefc2f02340f90fbece785eaab8eda42a88cb5765179ea75fab9cbf28637c4754d58b2daaf5fca521397f6e08fa1657841e24033ff4c7e95f5f689eb537915737ecfeaab16cf694b747dcc0de1101062c09bc33ccf7bd08065b9e856fc3bb675d7d44ef9e6e90e56a42b4dd95c655b90991ba6f74ea250c3ee664f9bed1a37dadcf8484dbc3729f2070324b96dfba760500473f9f93aafeee49e2840a27f0a40f2ce7f2ce3343cac31b7b944824da47079c8a2cb5bcf2e5fecd42adbb8e4be16bda95c0e186ab6f3a89ba3f125f5a33f8afacbd1e2ba5c955b7a9fc39ce5c3ea922b5767b8354946d0215d55e56e542be7fd47b43a96cb2dd5241faedafcac2b24c6f9c03f4e34444d0b4dd93d2217d42552bec8afdefa97de5322e3df93e756ca0edbbe39f0384a73ac0df189bb6eb6c78d99a5cf1d5b51db7a42192735f60c066545a824c5a5e7e87616457794d952532050d224bc6dfa511be5955e7d68a96e5cf0248c590d9b100bef3b7348e8153c9d7cb42d46c2efe3ba860ec1b4afcd766833a9dd14efd28ed0014a09320b9df86785e26546caa0e7d8bbec1d764bc69319b8ae9373cd3cc964e4f7a60ac45b2b1104e3493715bbe1f8ff93ae5ccd4368e3d7a94c001628342d12dae61d92bb392c621d658214af768db9bc10c294b25c59293063445b3363ab135a25f5075c970c361736c247e9fa2982cbd13232a1d1dc15ca85bb2cccec715f0bf21b82bde952f95729823ff9f13ed3296c3637808dff25ee0fceeb7312f25e46d71ba53d94731463da2c6d6e0030337b3e4913dcd544f1f17e1a17c49ba0b9b1515fef7a1cff1fb3b52b40a49bc01c27e3e558254c1fd29b6d07421fcb2ec9d1dd62b1e2075983cd47296a3c185105c5e98554e8571270423920eb0345df370ef7ce9d13d804e9270c813aa32a5588bbbbb3ca948abf336c8ef1930d805459ef1cfe217e03a3a83771ed426836500dafe70b09b85b689490cae3aaad0f00daf8d97bbf8f1e98599513a801f9c0d31ce8d7d592d24db12c556991b25046671292a9b1f7c59d6565c67e4c09d65e512f1d1aae1660d62b630107664a95cb199962fa4b4acfe49d6531fe63ca9c634ccca32c1ed4f28939c14a10ebd3fc018ae7d067a228fc9892d06e2079b4aa74486e1198828ee5eb5edf87129cced18e2d86716e5122da2e082fd190e8689f05b69bfecc9374d9512d065e88f3cbd4c583edbc7ad2c8f7294fdc12ac4a46c89c29deb144ac574b6f06ee26e07b3b744c20961819917bc1feec8d97ff19efe5ac149edfad47869aa98eff76b5ad9e2e8686081ac727cbc933608cd7e5d1b444b9f954e052ef83657527a2c4750584621916cc4b0000298b4b4e82691cfc44845a6aa959c22eee3a766370a6ab1d5ebd58655b1f60b52576cb08e6b1f1041112e1cb04a29760276811b4f183c45fbdaed9042d1e45b1301a271222490e939a7f04acef613f3dbf9ccbaeade26d46f1a52f55baae3b7ee9f3e40cdd94b1f541371782d20c2612273728b2fe58e25dcb3eafdcac65ce98b382765b613ba7d3b5c9beef5509e887eed5ad647b4dd01e8ae9ff2b4adb5b791d44728075944ca968a54f34d0e0f2f986e6ce35ad47c303b12581a44e558eaa97b85d0e53451cd0ca686d05de37d2017fe90f98fcbd17a7ee7fdbf9ff8ab4a7a36c9a77a2b494f46b618ce4e565021a4a5ae620e2346a759357527f06e189ead0cfbf3eec69518ecc5f23348f0f0fbe76cae640063427e7305aa9a5dcd05b0e90604fd698d9bf0a5d8fc477237c576875a78488d142dc8755e83620e9fdc46d72bca0d1209c49f19f91e54f5b538592d78f556dcbd6e4d0649e8c62c6b04291e83366b11c178ecf12f40a0f9f2af6e80cd0bd516e66fd5cfcdc10ddfbae5216716305e8f3d20a1d5834a74a575937b2961a30f6218972878f2f6804e13e7f55aeda12fb40622846cfb241821c64d49cf3ca64ae9d94e0da8c07067a2fe726f9e0f6f27a7a3e85e5fa2b6d4966d43a01b67facfd2b4fc4e0740150a0203ee55dc84848c919cd8f6557de9f02cf2df47b5e989e6462e09b13e79ceb097abc370bb55c6a6997a5c16f796a3b30ade880844ca39d66dd1defff57384a2897d5988e4891fbfe8c4db84edf4cd6759b9a5a97012f4e96e24e1ffd3371d29ff021965fe28761da502bd09de9f50524009a0f3e3caa16572af7b7b81cc838b21c069ceb23bb209f9bd696d73a012bce858e0ae42fa2893a0fb1439a73a9c101841b28ca8c8bdcb0c7b497853fefdef782dcda238a871bb218f1503ec8a52020c0d5d6887da7eab05c7c4f226c1f8321911cf966bde63251cf3e49ff8c38ba724aad027f876ddf10c2642a296f2eaccf38b4e5483a3e818bab0ebd574ed314989a27594a2a6c2e44b222b514997bd062d23b2a22900e7de234d916f08112b2e637db3762e7115cde742e8c7e7bb5828f061634905fb49bd7e523d335b36619ed9c1f19443e0bef40b0edfcc1963a37a63ceca11be9ff4fef34859eb1664bbe313f899b78af9a6a1dd0f792887998643aff14dc1fcf1d1e8acb64c5de0a321443aa912a7aac6b31c85cc1ea2d864e9cdfb52552369fbc8c5ce247e5262fc7b08765dc42c4c4fceac2cce3704b4cdb45e707a4bfdabc4c2db841a57914476b178ee9b170e189be09bfa9b2a14c5dacf3f36f095186a54a574f4213fe42d1aabdccbeb7314b5b2cf2f16bd619bb09522b8743c9d3c4fb45bd646c09e11c5ef527c34d54008cc9c85b1a9bc42602006961052e7c93001ebca49a380dce1b5fd8c9f52e2e6b00461e868da1e372dbb341191f97883be2901dc1733e8611ca54c428e4d99cdd4060ae29ed26da7c829277c81917732ac6fff77861d80958a3ce55d924c835d3e7a9f5a99b830fafa13e7c029416d3dc37aec85e08ad0e1f223cfc3f17726ffb5062637a3b5f0978b217dc3d132e10ecbf3d0ed6ba161ab1e02125ef3f70c190055a96302f134e843faf06fc18c5b0c8c81b397708bba5cd480b714e2f4bd15e80d2fc5fe938454ea4748ab4076639fcecd9e6b366f635ddd45c4cf0495c05935d7c145e1c4684347af8d5e9718822f587f98510776e51501fa4476a3039c4faf5a66cbf1ab691d23dbc8720f9b3f24f33eaa3129c7c7eb07473cf10566dc5d1d3f263f78710e4b467201ceee2723e767b2dbf3e58c9149b9d3b62872e505ed492d0989bc3de033781d3e5a7ce3b5de7c84337f83eacc96dd47b90334a8a166f9cd18920638663e818489fe03f87d72f95cbabd4b0bff393c4a4e6a92d83730f6c75a409d8928d4284ee9a2c98e030ba8e179968517b29c9e857c45d39d50b308c2d87ccb5aae5e3624672e17cbd0124fbc77f078356d26cb9f4b7c401e7356f666982fd6d0814274ad098a35da6bedb795bcb56d8eb93f8a41c3f7218428848a5ca43f071528eaa792d99f6be15c06a81251cbac4a1d4fa413ed9ebef6f8a28a4c0496a6512bbc9a7adf5301092cc4eade3d1c7d9022bee2bcd05a5e9d6919bfddbe1afbab1322140e228f3e79628e449f888e28884ef50ae574114aa10551f1b8dcb54d4c6683dcf6aa3c6c5a86ce7ffe3b0bf45c2c5ae435e2accb2954b2e885654ee65caf47bbd97f40d1d320eb63a25d7a2b3141563a552114275ddda56beb62cc0c0273d5795faa85b50db94db834f6c213321752d2ec392fa66628904492da1908663c97de3132f1622fd85c465b0fcdf48435b475a333e7926cbddc3923d51c22b191f4b1f71f6e1f620680d5c0ae82185223e5eb221623319625f213465cbda10bfb54bc5879e333ceca212c0adec9c6c26a4efc10eacbcd0de73899a275e4cf9b011fc5fd4937e79aaca714e2a48a45fc91567016b8c6acf98b1895e02b79f28a2bbe958e975483ef347a55f00aadde2920640edb87fe168199f9cda7836453ff0197f4b269214ff4eb02b7db171bd9719fe29f085f5a55cd9a430ba0878d3a230c13aa11c98692d258a7024cd3ba7efb9737eb4448c2b006165d15733eddee1ed39a7e54be6b96b004d2fdea477314f090cbba384b1e6e5493b1b3c7b03ab917de95392350b8a1b775e9715e7a2fe5771006d48b6f56d8de9ba6af44e68de136b66aa3258855fc0e3556264f74d437b9a15001e6bd5336cdb5a4d093e7bfafa5e28384036d2befdfcc7fe4663e4b53deca1108f13bfbd0486a13dd5cbbb66b89ea46a4650820c14fc0ce734bdf7d810d14b1b253f337ed78405c9f466b5c5d0d571dcbf15f1dbc889ba99aa55f51096e0598c7b5edf0d685c1e5defafe98cd56b06fc0527d0b26b2e47a221cc7ae322a272e0fbe300cd496751761207c51028f7da44c2e67d048f424a8d4591e7e456902dc5117c4752dd3e35af25fee7145de4724372e27566a77e29b76046ca88a521c085767b11129659317575f5bdfde6b945649f9c383d463a6bbd0c5ba14490eff1ce757ffca12740db459c9cb83155fefa449384641cddff970ac420faacac4337eca8fb7862e27da9bc045464531e2dd750192b5779e136122d0267352549d3e98c8b6e12fc7a78132547ad50d7c1be83237b01a0d902868390517eef431c1aad0a87483ac231c8ae3dd117fc33c339741b4397ceae946961d13bd8978a757ff903473a7e58aad7e1522b14d4fba52720b40d6e4f8f1947236c2c24bc6ff88c33f325854c24682e32fec0345993e9e02f8a22f591ef23b84eddacb3dc6817b80446bce932b9ec4449b03af728a1042ce71a4ebe344326354a8228365617459bd09a77b6b08d99b26c02f5cd90877645fdc0cb28a52fa326bd0638fcd7d224903f5ad07e441402e130638b284fcbd2d3ba2a32e573192d350ce659a7d03d174d970471b06be1ba692d5e55b7a4f28c4ec2c310551c7426c8b08f04a7bdcca01c7e23b5fda68b22a2c95fffcc3e70151fae17edf81fd5226a5e8cc47d1ee551955b3527a67254ce367ae4e4068ae8ffeeb285165edbc092825d5c03a8723b9e40c4c5415b5de32f9ce899acc708b1cf1496b743e9feab19b933796cba3624089731309d7cd7cad93e68cab4be365ee529b11ad139f7090a6787514a12f92303113713969b6e503d939204963c9264e4a6a82c58cf337ee725af90365329dd20372cfab7278037cf44eae3bbc2bb584013d258450a5261526c42a2abeb56a6e281a93289b1cbc620cad9c4aff10fad89e9c64b108bd244ceb3b705355bfe14cc79327788ca9fafb48df533ed481dd92490fa6165b411bdae9493344d158eab30963f163ec27a491d16b3cdfe28546f92c1f5479f23bf2084775dbc6dc886ded16145bb1639fa26acfd9bef4d2241d566c53d4a374b2911e2e47d0a11b585240152ecb299b18dcce69b240474b664af134348f5c8aafe064c5487b9d38cf81f52e37ab94399a3907c77c2c9ef654b512aa49ed6bdc39c62135ff4282dbf6e3538bb962bae82da45c12c2e9c27bf54701f61a579a11582e9fa5f58e17abd35ea4513b58634eda02147209df7b8152e605412f33afd214fd243eb0c8255171db2eab46f55713a83c780edb7690b0717b68b311ea73c6761cf927ba567474d5433bbf61a15de0a03ad00fbf16cbb25cef707347e5ae96857366899ba2ccbd097c11b514c43f5dc8e4649c3e27f22c1b2866aa598b28e94aeab28cd912f5d41470f8b6e7c6c3312a227bdedf11cec9b410927fd043a868cb6a2757fe10b660fe053aea630fb204cedd5efd2a3c272e318e3b1b3277f8bb12d90b139203d90acf251e780f07d380bafb5620a711c5069989aaa50a8ede892721a7e71b53247990b7eb887317f04bf866a96fdff66ff7f5eb2846ddf0237a102843fc2367605549a3ea4418a5cf0d90049f135954efa94c9bfb2635048f37d7d8277a31a9554800d163d2851b396f88bf82349d940bc6a6816b6c9934e96884179a88ce80caf8bf299d5a42dff618ea7e98f9341c8cf30c85c24192e8fbb51dcfe54e8054880d8d92e205d85bceb2be292b8ba55639da848f46cca7868bc4ace751f5d28e583073f778facef589e20aa7811278a8dc231987413660776240384724a549940009773da862ac17ee52d8e2e2b5367c3b76d055f9a6452348cfcad7a6856fcf483fa44dba65fb28c7aa2fc1989c66392079b3e1b745dff20419697f21becba7fa7bff0ff62a4290da91182ceaf0904751d7c913c23ab54d60c71d27db77e585dc64926ba4da09b6f0b0990b1fd93c0e96361ad464ae4f9a2281eeb71dd946cfb8a3644a0b9cd904d0afbd46807ef3f6b93faf0ae3c9364213eee5172f0c75ef54df7d92749938e1443589c655083c6780998f9f88b2f1aefbb7092f5937fa4b78c1e62d27f9b1b512ea0771e69ea0c9b5ecc2799b920845a28463e7e3835e4deef0a6016ce3c9e903783e307a69a6841ee251826490046ecffcf9281417285b7d15c5f88b7f0ae3df8436ec5a91d600842143a02ad56c934cc7d5d8361ce0dfecd84cf9cbf6fb0c6eb9f88bcf3db8a5ae51a0bd3789c81bdf8effe18fb90f4004e042eb767024cc77bc8bf71f95d5dc661b71c0d1d2a16e51f97d2968173ce68dd6afb8d2140e8cc438f71692c2b40b7227bd9141db7df469af599a085def394f619b47280b40b21bd345d272ecdd9c9b1c8c18cfcae715f1599b1bb9b4b0a1112a0f80bf7d42a845357c11053ad9f5a9a2e63dc2c86439af9e4993c14408869dd9124be1919dd40a07a4bd95d52f806463d4e864fc7ec86d276dec69347e50b915ad90d46fd8a031f1c6bd68e567a394045d01fb8fbc2af19b0e0df9ad9b672e86e737e1407b73849ae8f9c6910ac800308a70d0a8a6c703a335deb9d6e533c3d5c828502c0fb4c9ab1559f9019f56718d621d2b70c5076de7e947f0d8e61d42aa584c695a1bcdc9cb52c5485eaeb5afc3edf0530fa053f60e3230e8da268b71aca08974f327254ca3a925fad0bf4c827b33d292acc01165c11881e7052ce61a84a7c8b81ebb241adb2161587e5b85b25d3da92e6fabab83a7a4223680809703da75f27e046032fa1ac261aa9109c70610125f7081eb871869ddfb1d74aa04f55513ed0ecc9db7b508950e3830527b473dbadaa00a080fecaeccf5e3093297b79d88a3b09ffb1b134ea14e4984bd073d8b3e04063188a9c61f77f6d266a1b7135bdcfaaca501c6dc94ef0a26b5d2d4b0a3a5c3ea1ff5bf6f63e8e730b47fcbcf3718dc49053721d881852b18ea194a682cf70193fcd6b8b02327b1461a523db4d84330d0e82592cfbe6d97654b1bd12ccf3ca54aefb4fc4f073a3a5cc1a4748ae765de8975548288f3af3855015fd2c6347d97572016f314b62b6cbad1fcd8190b87cdbcd54b5accc751f432346db3fc02c2bf02b88405c9d9022ea771e3d128edafe7b12f928063e25db5420bcede97e1110593df869a3417c5676dc9e0c78134e813b0acb25e15edda62cfaf09b95f7b745151bca51a1f197e0152027b22ea8937390074325aaa90d1e31f48a6ae1b75f28b857868ed508734e39f443c4a2c94a642eaae9adee97249207afd2e24957a939b773a587b8f08f0f59bb6aca80ffc3c14b68373519b3c4a002af62883933060696f2bfb2ca644b91f908152a25a6a0198ac1a431b8895dd6e765c1c32de3f60ddb573dc695be49749c4ccb6a1d785feb6139c95a47826084fa557929b3e509ce0903980987890925b80c0610e4cf63a573530ee533397d58c000e13257a0b1a584aa57123c3efb33d0c85da4f8264bd6158ffd892808f4c0dcfaa26385c17e42f29e1367005aa01d8b042a9ce417890bec530dac929b674ba5a52543caa1d024b761257e905688412b42057f150daba54c4ec7d5ef4b5557be82f24992dc47a9678635cf48dd245d45f466b227931430d9c5b47baaa34f739c2691eb8adb556f679facefb63904b07fbdc6dc8822534cf97a4c24513da63da3127cafff2979e55bfff356550499f91ce0ce64a34609484fbf07667f650a0487b91b1d7c313589a939b179a1ca5475c21fc5d1257876b131166ea891c3eb669e8d05aa9e9d18ead3df5fe028f4e4d4e3bd45a87b345c264212fa6114e4aae27c20c4ddb2d7847760537710571e9b85166bd65110f3fa05f73723269521f8f694f6c13d755b08cdc3386f90b8921914ce8df071835200dec4e5817f7f0636116d9193303292364ca0e0d1d7ca09bdf260a61c704eb8e11f3fc09dc25f2bf2c18a63b35c97377d725dff165c07e02aac9146b2e3efa31b55cc3ac095a1edaf956fef9a290f954edd6ee5d593febfcfb1c4e27c32c2ab3000fec6926fd3e5dcfb82b7b01bf8463afc583778261af31d907ffbb0e3742b9fbf4be69bc7818efb72674eadac0dc4b24dae667678f914b4c72714f97c70ceeacf483d452327539b888206eb6fac9b554fe5e56902f5bef5c45ea0ce7454ef71df581d271931ce2dac6782e1bd513494817356c86abd3c71268b3198517d17f56e00289a003d79325c9c45394b981ae070eb1d0d069c27b75c4149ff9a75d2c5d9e4c2467ea6cf4a2774c04a60edd8d99cc1babf6d3efb38d3f54c6cc5cbaa63c16a7c94eb0a4ac58b9576adb3ced8d0738bb24814f241663c2bdb5859daf96fb2f5da1debd476450782eacbaab7a575839d864f847274cfe369595acd405a4a0d3b5d39e7a1dc3909a1af4cbc44b9294b9bb92e322c1fe6781258dc968847735e9f687174ded722208616797ed2ae7c49fadd7cb48bad4a48db5c665c1f4b8c15869e7cf9f81180dab4b2fa58fddfeefd3f45b3621da75bf408d6807471d0e4d0a561850d99f5e5a6a22747d132d7e1d3cd845af15e98abf84f49a3862c722e0e60545226110ec102c2c5da8dfe21056c4a3bdbb8caebaad4034847f7ab99c82d4bd94cba19c6937dbb313ad5dc45ba3529bede4eef2ae905c934f64f7bc233bbcc72dd5ff0a7ed85efdbe14f49a080bcf0afbb1a37d0d70bf5a236f41985f14866b39c8e524d2fa9d5284660b2ebe9721360faa1317805653d02729c015f9141bf1e02abab00ea580fc902a0c46264e31685258a688af48ff3f8419dcfa994461a14985e677d9e1ef4208e85eabe738e7e7eb42c5974151abed61c8fe11e6aa41c39d60d141dcb7d26b15296925aa5d2bfd03f1d60edf763f23e7bc8c208950a39e0344e3d6be2e11c0de73957c17c6e6f0c2eb43b330c1a4293e7ff0f0293e707ba4b884fd284f94898c514a77d57afe094fba724fdd39c0478d9990496f7b8ea2a8441c80c221430e4648f0df8d815d90d3e5cda98de67cc5fc90d6f3030fe75b3670132533ac079635e2ef7ce6e4e9cd75f5ba8be9d1c1eab5ee29b58c0262ee76c5d1b524f8c66a80a6af1689aa8c075e71a3bb98017500dd3af058b35ce6a291cabef73c0e6ad3511c99751ddb2d88b5e1ef02437e814d9ffd95a51f265dc1af0842b524f5d917cdcd13604b80b496a3ce06289251ce1a21be7f617868ae91f705c6b583b5fd7e1e4086a1bb9f087a50bf50f52c8143ae8b0516576828c15b924bb0c00257bc526cfd5bfe1443137ce33c3531ba16c753065bc24e95707e66a8626a9e49e100d9de8df840ff71bce385cd1da3e319444fba46eb0da747cdfc60d05a17ff5eb05d9d77c72f2333ebf95dfb70145091a1ebce50f95d47b69663e21feaf3ccd3b424d0432e9229908804944d964ca986c66f6a0154061dc3c1e457d681f95a4af476a07a9732b8917c4d514cf71395019b23b8e064d0d07936c7e77e86f24eca579d35a369d8793cad1cbd7efb31bc08074edd75928309dddd54b99e63a7535cc7e0b6460c4a139b04b9006d0b6dc7a6f53a044844e66ff99ed3f6be7fdd0f072c864cece8512fb6696b41a18d905ee04a2d53e2e3c2abd4628bc567425f2ad36cd81e1c65b47593c57ba8a1eb6228c0ef70f2cad8df64760fc54f1f14f44dc8701e555eeb3d8c3cfe315ef58babce4dcc4b0a888a0543e88fc9bb715d6320ef20a0183ae2b21db9fed58b25d733f78fc905c3a560fcef31c8df32e285754a4f64a59039b2dccf10abaf56b935c24c8fcfe844a8c48b1159a44fdcfcf4f274f02577e4e2c3834b4bef07e83a0f1f7554c43ab6191d7c51690a60e04613a245db495c3dbd7d6f3972b1246930cc1319e692444081d2955668e15b6748484c6617ba9dc35349673f8bd94f0021d466e04e1f4e0b664d9fc95e1388988bfcba7eac5e819d2b8d3408a04ed0d5978fe0749355a03f53f5615153872f9c9698b236a31f52f4ceb29e3ab8faef111965487abd1a8103cd32a5975025989af182fd3603e456efc2216d7edcc4f4dc30be689dd5583b7f5e6c31435cd50bbb25246325d494d7b79141697b1394265d62020683e2f614dc8d0bcefc807fcf27b9e5abab1f191b73c2795ada6552cebd3a99ebd4ecdc5542e277446ac30b2d05352c9f71eb5a6b4cde330742dae634233debdf39fcf245d8e6195b362d616d7d2263051f403f0e6a6cd6395c7b39a0b8f560aa5918202ec72057db08c66ad7b907f1a65d26b04ef4f4cab8d04f315aa4e96113de4b4e5636199a8b87970cb2de6c3e4ad1a6957113ff764c455eb7a90ea154e36d9a64064e574b345ca7304817d9b2b826c7d6c0ee1444bd63b1b4d71ea6a3e2b10f4a863764d09e2ffebfdf8ad7b5ba02925c83aebb9bd2d34f0e2afe7fb4d84fb1e81e18c89391a7a59fc05fedaf160e0d0d027a7ce3543d40afebd3b4f18df28826161909fad56ca3ba33bfa40895f142d2847be0850c488d7d61c8cec1c9409dedb564b16f312700f67fd28328ff53399453d86ee7bf9d3d62d602548b53e1f723451e48596f80c53deebf12771cdef939b5baaf7238e4584590acceb9f47e9eb20c725420551ef976c6afd95eb4388aaaf349298e3ec4e70dd8ecc4b274bf9b8053865f2bacaaa48950c961438e09 +MD = 090c532d114335e4fecd5233c7a0c7bf143d3767f988a7c2591a737d6b24a108 + +Len = 69136 +Msg = e9b4ed68b30dfd1f139d7f43ea907e03ba32a5a8b8b1fa772323c9d9d5caddb91897f62ebaee785a64a96192275f7dbe58e6dd039e1685a049d06516e53f8b8c0f5e967188bb6e63887a3250559c72db13829f01deacbffc16c76567fae7e1a47911b47b44fc47032818dcc69bd0c420950cd2e8a1fb1152330fb2143c4948c8fcb63892173a6a02ec8c453c2282db56838f60010e8ae16c47b03265d2ed29c2405709ff29fb41287bdd57f9113a1f45881030944ee19810fbb3cfa2e55bea58eefb110aa1ca333d7e13f8479181f8b44a992ae988889f07f71f70129c1cf553aeab37faa82ca8089c37126ccaddce6c71313647e5085c19e2fcfdfe20b7b07a276e631965ab08527e508cb1e3d90936a6e13cf88de7390d65535dae98b48597024c7dad01cebce3cb664e5e05fa11d891b02442a7b09dad272b7a6a2d9cdb70e64d6effa31d2a832c8240bb57ca4e1ad9a6d66e5be8f0bfd18c3b7a07f519cf7c7a1c577421bbfa49aa4a1002d029c626cb3bc3d319990c0a7e88254d4aa97a6cda70fd9c61d70fc9e954a42d9408a22228398b34ca025c7b0a49b52820f2395d7552384266e78c554446c0019f547873c4b90ca9849277cb376670bf015cd6f854ab518eb6513794c508aca678760ec1a7a49057ceb124a30ec89f3b744f17e47e6190a9db7fd82f7382b043a7d42cb5dae05d6930c72dab955589c30233c6c9fb5e3dbb5dd739cd569d1400b5d89cf66457bb05323c588ad6f678803170a951d488a0ebc2c32117773f1f0629e9252d4deff4545d796ee9d994b2998c6e892210c9016294aa57b4dd511a7d8b6e8e029e924f7d38e4366fa415803798962de4b708a7485af4a44d90bc4d8d64d1a01c5e2713a84ce67ac541632a82df4e5f40d22ddbc49d08d08a9966005c3a792324959689ff1fe80092b864f8a1e8ffe5dd681fe5fee450a312ff397b1598cedfc14bc7f9a73b50917f0f0232bd3b12886581c80d1fb733e58eca1c05de03389b9c89a1aacb2887f53450231ffd61ed107d250f9b4f9e195da503f6e8df051f215d560ee6916cf6f45883b1088ae1fa45cf5ddcd6b5226ad400b1b16a4225eb37abbbf6f32191045693ae93358b43a0ef033017077aca8f1247dc34d42cec04a62ebf3f1aa41f18e28fdbb1ee291046d5c1a7a976c51feedf218c676ec7e0d3358f6ad2a3429c9c61f111f37b8ccf56c0b0c9786bbfa8f00336ca327f3b8bbeae76c497d62292f79c64594123db083778789e6d2e90edfd452f9d7d51b0752ed78ad676fb6d8891588eba83303f4351c5c22e70065f767e6eb40e302a4d248c7a74a758594a07d260173ca1e8df090c6f36826a3d54ccd9466c2433533a223e5ddc3f2339e296227ba8e78394e4e1d03d7ba141199976789500e76e14a0f7ae4968a7c1e35dbde970e9c4127b755405f83a93dfe353fcc123175fcab4a7294205c3e6189fe2048f0881da34e7bbe913681a612ae2ade71eb85a952d7d7642645b930412b599f47c0b1931d21edd286255c4120c60cdbdf61b719081b536ca7b11810a966cab14184158d2d56904995a87dfae6ca3db09b1150358aca50e47eff034ff8b0e40eccc71e7c4231058c564c5143e31f40050b66eb8f69895274327c055ebdbe17f05fe656d0fa65b0033e6d90bc8459b631c6fee3a712bcca8458d498bd76d2e91e618e393bc4492256b4a896b578fe02ef4435c2ed14f94bad688527fca293c9e1780b401d2e7fceef6f69edcf0f70b86619a823f1feb33857d80a5d8ccf755cd21a0a05e5976e2845b54e0089d656395eadd261362e6f230c2dd083fe5bfbf468bde6e525ad98c0e22ca169465c1318317721152a22a19e42d08445c1e69c332dda4e887dbf842b5d4c20a2b51f3bd7870c20ba5e79ef0c8476721d67edda9b9a059d4a2e7bb4ca1f8a3827367e44f9b7e35dcb43a2abf05976366560d04b9025b64fb4e830af1f916d54714b17a2f14c8344b26a2b6cdc2a565dd83d4c43b36962f2531b9cd7be6b6c021b7379ea50cd62521a3282a6328fad34c06da06767cda2119f390ec308f61ccd7040039f8ab317126d5d36ec95f1d167c8628b3b3fdada2a13d114f591d9e6133a21431711860812261ab6b478e969735acc4b13ae09a1a83b742de3db7f6e7fb3a7b70587cebbcddf2b80725ddeebd3e20b8ea534e26f188082d822686f0c6f8733ddcf5fe5b891e2e032baa75acef61890c44466fdb9078d8da215ab11466f2f6635f8fc73752afbd93c01f7e5897648fc6a95a6a405d1bd14fa42261ea2fb16af5e06ffe077e564870accc1f7b1c10dbf000d868ddc1399996f4c6befb8afc78f946decc5475dc77a3d9f9819ce62d15913108903b2599d8b7f78eefcedd9cc8797b2259a49e09f1332deecc435d83e5b223320be1ef0437b897c21deb915a017c6683cc8263a45f2892f227f8e9d9f15ac09e005789425da3bba96fdb0ffccb0bef4b4d732b77688bef4fba44f2f9e491ef949826591bf47f4b8c0e25be4ad02dfec006015f48b5632b4baeaee0a9645f985bfbd5c957a1552eb32151050eb5ea7b2c1cb365e0edb8302f2bbf1bb219cda33c50ec3fbd0e2c4e66d1e84e0e254a4ed5ba11a607b992e54358fd0bdcade2f97fbff42516e30c92ed46710013c656600406a48a84c1fa32ce5ef218eec5a7806c7274e22ac7fee28fa77482e54015970028f37a21acf7ff1a6526abb20c22214a8ef4dec1630826961c793e4c3c90dc134987dca42392346d94202aee275dc5633efc81a35f354648cf099b1062cd188391e619d6cdd2ba101368ff6bc16052fda8153397628a2beee5ab01f859d63199279a9a7f53bf774b0b8690f18031b261f4c65c671411bbcf89e8d8cecab3119d342bc6675c615465a40247480cdacbd74b9864d91fd1df35e14789585c6a9ed7df1f045591c139a805658b370e6387a6d512b3b628d2806615507a5fb805c28e5100be1399e60f5a5737c3872ed2cc18b9bcb1c5da1d84ab4e8b14aa858b630cb1555b671ed8bcc4c1fe590013318473201ec7d0dab9d54cb481bf036c056b9728a7431ac5a02a2e6c44b46a6687960031c15b9dd3ae59916eb9e430157ac178de7dddf438453fdf7f903c8dceddea07152cd7f66b05fac2a5bbe9fa27f24df7fa5f93bc1fcfe521236b5931f43a68d0f3e7a1a14ac59e26801038294b76f75ba5d5cc3c2147033a805c731d7fa6f8a2f47b236619f62f06283f3785280ca7ee0668f13ae7b48173bdebf21a182a82c7406fc30f80a094aac4d050d567bf45f6469f687f191e461403a03ef067ccee85fe4beb6226ccb55a7d4ceae3af94b9bc8c039ad35e8d3c657904bf671396242556980229b4827a5e7b3a6c75a995eb88011beffd5e0a4aae489ede46c5900cee71dc702ad1c8cbfde5224054fcc9c4a2cc6fd0c7c29c583697f6015724c18f2a77a29c2e26a89081e38ccd4851382a511787a3f7324c4f468f959260d931931f906ff0fc5b29b1309f017b1950eb06de07ecd156552115265802f72a8be80117e2cdd35e175316533e08b28ea0e94191c625c3acd423931e19c59a7de3efc2589843ad1a022fa831eb2ada70ea3ac1b27cbae0c1565ab176fa67e121894dbc2ad85ae7f9c5c44d14ccee5b87d5e7708950338f5c84cf5875246f36dd240ad9d7ca98e7c3081bee4209dc9e9b0af7355e6b193a4706896e64bf65007a5c2f00a698881640723a7404cb7c09743072f778f5f448488390dc8bf2d2a6c1dbc219de67afdc37ac2bc5a23a5705d9f061a020154a2128a4ed8b32e63d927746ce0bc86297a2725ef6cb647df4fb94f2cb179ef3a52dae10a762a1c32e2b674858c0acaec7ceb72fa16c92bddb516bddb8443ab88cd3a46fc6481fb02dd958876a1fd276c7cacfc7369273219571275a300f3c8c887ed06b5327f6d5c30411ab0b1081e020fc82cfbc2450d2a9c190103c60eb962093fcaa54e66c5b77145b5d447b021459ce97ef3c0a71f79fab6da8e31f90ffdc7beed4d46dca6ad271fe451c489e3bfaa7d8cebd2c1eb9009588c92e3473ee449e6f92d8a458295b84c20a9b609a7d8bee0b1547729f4053e9a71c2387dc8ce164468c6a735dc19ab36f54c9a94101950df96be2c43bb3200e9348cd0113013a363d6991c2235a1767cccdaf0cdaf0a06b6a79970a3c3af06c14f631885f74d77a1ad15679f01a5b09a21b5471ac71327026e76d2ce8ff496bf1ce59050a0d419aa66ebf800d2cedffb9e6c0c100add584f45c6d128827b673f4774c615af6fffca9e5d7bfc2b655b3d9d7fce21ecc100f9d809ea463ddbcece39a12829854990aebe1a31e56e11c8bca950fbe4ef56b79eafc08cbc347e53e87deb4520b52982a33082d8613d4c9f153c9013cd8506f2aa078b36dee8db8d1a8ec39b8fd1583c64a027cdd3fb8e44c3e1bdb430306a38b8a9ba8732dd8bd0e0e6ba99bb4c8e245f978980d23b4f5045132a4bd193f90026f0eeec6c8507d5b80040ce579913e0f06128afc07f1858155b764916022bcf816798d4c071c7f21c75f6b7d94981d8c3977599432961b2a115123a721d8b1d648828eef32654bc9ab23cd4b4d060a245c500dbbeecc40694fa9eae7a388f702cdd4f89690526ab9f4f93b37ec038a3f3544af5b81bb7ba5d567c039305b14e66d15d3296a0c635b6a88bc29b8b627458efc455b348a54476c32ae850e7992e8f0ee278f08babe16d5795809fa48689e2d1fdaa34f6253b5dcb2bbb38609f9721d06fdb2b2850451fc7317bffbe1d5b2da56731b1a6a0158ed90efabe034cfebbd065c79b095bc76a81f023300a7f7e95f491aabddcbe5986774525564219ebb98954dcc49116eeca124204e54c555ac839fd63bdfac88de1105ed995af9ed49765cd793c721a31baf2c7af63e6178610d01b0b369367090b4ecc76009e345ff1f0202b670efe16b9adc161405a4e672c616aefbc390271818d1e890ba082d445a30d61e8da0b34429defe91f2b529457687dbfb35e435dc055a5913b58f2d80f18e5cb1655f9e0e26da3a534dbcc944e5fb3c9c07572046433221cf42a1cd1caac39b5842522c315777d0445ee34cd5da1bdbc4801372bc99ff48aea966967e4e789bfc6aa1e415845eca4b6c503c621e8fbf5ce940b2a8d16ad79731050f0fa554658326754e2277372f4fc12b20527afef04d8a056971b11ad57123a7c137760000d7bef6f3c1f7a9083aa39d810db310777dab8b1e7f02b84a26c773325f8b2374de7a4b5a58cb5c5cf35bcee6fb946e5bd694fa593a8beb3f9d6592ecedaa66ca82a29d0c51bcf9336230e5d784e4c0a43f8d79a30a165cbabe452b774b9c7109a97d138f129228966f6c0adc106aad5a9fdd30825769b2c671af6759df28eb393d54d66d0515908b0255677e07efde86e0cd4880894e96689eea6e1c13187d63256f0d2d900cda1d03352144d13bfb30e9a5e925088ab0aa2d3f67474e33ce8e4916e1581d41ad515a5263b7d616ab5ea2ad3af83ce8a79306f67a63f74087c291917a75137ab231eff5535d7e48961af32c64818e2f242b1257d1f778084f07e527ff0cda8091c4aa6519c13298656bc46c8e486426ce7b37a9918b3853cf662d2298a6da1bf11274ecde6858d0c05afdb3e1d627974e8a5e36e5a89fe8aee651c86fca7a127a2433d0cadc5ab64eed864a85b240484b617044f3d5159195903962a900252fd501d15a04a49e13b82e4779a16415016e06531ce39a02142c6ace3771d04038aab134d2b5488eaea52529875e75108c5f83f106de7fce3a1a7ff691edc334f6a03d468004509051bed912bee36c98b0c5e030490c0de1cb08d49ab64560693160acedab1a450ec2ab52eb6459d114344823fa2f94cba48f9d73a3efa22f47b19206139d1eaf6fca13989dc2e72deee1915636fe9e417d4e8263f7842cb9373ddd549f9c39141b319fb40f20b6068d7f4880ccff54f8d5cf5eac80bd0a859f9fe99d79f193fe7abff6ad28c6ede759d615aaa37adc7715dbda5724e2651ce89d5fe989e453f4f43cc08bd2fbb555baad9edba5b75e46a33a9e6acd3a64047b00e740b7bca27ff16fa756f40836da18cd8e1bb9fd03eee9b451f0620e30c7be8f28abebc3a726d9215117753597fddbff8b72c796f2f64d109beecba6f0ec1b14cb310d3f8b71141a66d63fca01476b093de9b8c854e63918266ef04acdfcf95577db057975e80a228f99390f9b3e31b34e8772dc514714929777b942ef7ec01cd5b0bbb98e142301746a4b4c8e6c93c76355de1a10a0464799120ed57dfad72f8db81747fd7cc87ebc505dc80159fa0b2759e4c9ba7937ffd246d74d9ff9a85646fb026aeba85f630f5457cc1d8bcf493f9d6d32765a4f82ea1bfcf07f029a5ba882626b80215276177c21a0098c784756295f9e6dccf6978a996507429d15055d542192e36e078079d2a48ceee45fce1203a453c75694085ac9fad91352811b0a7925273d17e848e05ec6d8f419eaa51b35229aab81919b01b2a4b018aa47665afa5872b5a55b98f22770cb42b583961ac7c3ba41d45519285c49d2792ccdaef2dea0bb749fca3657358bae01409167b7bf6dfdb2d7484976d0d2885f617cba7d2de749a28d9cebb890fdc958407ce199270aa92612d2f59415281af2cfbc54a1ef146566f7397fbd41b064703fabcc69068107c40e5ce3293331d05900f642062d0f57e86609ba0d4f8ac771c488f0ce65ba5fb5524cdcde33d7f2bd7c904d55efc0675162746451c2753a82587a14714b9df921660ca85b1c01c745c9f43d363b0fddc971e24430a25804cb82e902f9c0121c2fd3020f47f697981a7188da501be400771dbb2353f81a6e75ca3d800fcd0111072098d94aca80ad63fcb6ec4c96271984ed67c961cba5c0a8b8df575b785221d2d535cd0d9fa64e49f0e53ad1b4c07017694efe0324e0428bd5354f84cbed91b87b40b5387df0c3f4d77c8d887e974d591ad88ae10ab33b47a8a82f33cebaace0992357736c46538b38e5ad19fb94f872876e34a28506f503b9a1c10f88a2b973b7457b64759048369c87622b34a0b8893976c5ef9dc1b6e89186cbc1018bff985d0eebb69fb6e81f8aca74662fa1d7c6b65a066f5bcdc71eb7c016f0415fc77814e66e0ff3a17c6b8a16aa74f6819b528880bccbc61070ccb3b86a455104593a6335cb1877374b4524d3cdfa91264d553652b2aae773f81b0ed58e683864fd08d363cb7835619fd3e169a5a3067a34f64936afb5c4dea9324f7e4c00fe65fb07ebd836d73508be3d4841fa145f639a5e48967a94673ac93afe1d6ab5acf19a6133fdd4df7e12f1ace2c194f8a4cbc5b5bbd9dceed86da15aa419b13148ef243e33386c361769804835523bf5db99fe222b679d6b1d6179bbc8dae919dd46dfc574f2c8840bf3b338cb5db6b30eb58dcd1fa885b440fc9984f2c8da1870e0141f7d94ae725f9ad2a52c48cedb4406badf1f045b71492848deaa4b4bd40ba40a73d684e7a71d4424b6de7c4b158676cd80b3e3e9493ecccff179cb06f5b57a0bea082c3bcc4ddbf2946b62f508dbec0dd764adf5e529d076e4e6b0d124774a5dac9af37189f54684665b61935d4b51c40db9ca48ed111b85df7a62750958fc49e0144053851f6d225534e0efbcde8b38493ba2aa08ff97440cbb49ba4b607917afff7da769d23814898049cfcb9d83b1b4709de3defa2bfb9133cd679297a70f40e11136dc178fa129c603fc358f217976e224ba180abff1966a574688066f79bc4564c887f55a135d8f763ea0bc4ed7b6199df85e373c6f44e74d1dd3b4b99c4ab0de25127481b04f620a5cb52df0129c9c7265578a88bdc23219b51ba96ec113ace714249cecc124c727201be9f07352f309c9ac0a8c2339d321d609ee74303ec0e75e6576848d074635507af83742fda6ccec05c030e9d152cf47448ab531f47546cb7f092f5e1e689cb57c63acc7c83d219608b25d56b1388ad27585180c5d516c23175dd67a91b4c417c7313649d941728e60eaf9b3020db93d44e88408a0dec12ed87b622a89b3163e036abf12583a269db370ed48eb57c65158bae36ee6a4aeb4676ab9b62eebf8f1d9172e686eaea58baa4a225d95a018d65a031c86562a997c6f32c566a7e6d3faf03f6b9443275720ec827f3a286f1794f1cb179819f8eb4f96dc6c821d2c101ff2ea5dddfe2ca4232220eb27cb4d2b53c61bbcec56960df5846f9851b74315298420ee8dc746f45ef32a506ba6c1bcda81faf3ca368d6536e2f3301c9eb54cdf50ea05ebc8fbaf9708aa954fe25332f2c971a479e1635dda58711c2bf90a1b0bfe4f8a3e26d63d9708a7a21ba78bf5634687b7427ea35ca88def44c6f1c8ec73365866cf0c5c06269c2a5f171cf26df5a144146d35d2c9692a789035ae7926e09f0c7fe6a017730b6c3ab48a6a0f036f82b0a342307a0ee5d611e8bf57a4311be173beca0a8eea101fdf89beb86a1d9b90d44d08942292e43ac434ae14d275e9a5950bc57349d4fb5d21c6f92f8c253f74b7f8098c53bd2efe985c480f8a5a15937b4f1d03d19a95d0095384f7fc8124d6618d8b3d94f78ac99648d66d544865522c701be1ada2a61e9e18a737429b125cdbf5d7d26da8c243c4e09f59b8a7a38bb05807366556f6efe9fda918e7d9d1b12c16357166389c152c0dedf93fdf95e510ed2929821d4cecf0ebd4c172a5287b5cdaec430810e1e7d6b50675705804095319c8e38b5e72bcbdc86e5a6b66e0637428466fda965960c8c133f6d47ab79e81c32e8b08832e08587ec00d5b83c1107be7891d6533cb290c1abca4f1ae784da3d3a14a81f34978c7f31200c966932b7901fe772f4f00eaaaa6e9a6525a0dbebf306a487f168bb31411ac5b3d761e5b775deda2c253c14aa84f02257ce83f98e0c4d1ac8954bb6247bed5473f1b2a497be39ec9a6a5d4f110fc4e48f9bed6830b761d9f2815a32c66e4d6ec58bd7e9c907b581261af0188ea9516384f469a294a2e9848e3c109ba7b6af7710fc4e3fdbb0d65a57dd812b73c01a21c09e6532fa4d488d042c0b6b38d3880feed99211406810bab8287cd25102a3a1dac08c8402251365ecd7a72c0a536b9bd79a2008878bf934cf626fc7b6df72663c213c202ca8bea1b0d580489ca4cead43b48480219b045af631c65605c50ad15d36f091da66bec2e89c036b504625a6bbbf3c029f23a68fd50d1d17de31d195b6583653abed983c0c91bceed5b6052ab820c31a60a46465d46ad077a0d46b05e02b99e0118bef8f956d295d8d82e1abb17f963206abd25f8cc18d1fedfb4bb4631787b19be009300b74b531f82b4fac402241e4018854ef66a7af5b1634d813b7b29c52bb8899cfe74f0d06962db3aeeccf32aae1e88097ea83b3c3ca0fa4c64663244de0c3f5b1a1628d35f7e892160fcd04e1184ac9db80fc36e479ea462e97cfcc0dbc40c187d245a26a9e0a7f8431a22531150db54cd267a537966310cf345ef01c9e8d71a4e26f08fee901e07beae5102578cfc74e575c9b27bff8b92aa4873ce517e88aab6a551d7d694d496fa41c5218b3ff74627851655f471983c350df1f11b900610dd28e5c60bf6b3ed1f5ae5785572b412bcddca028dc54252bc1ccf30ce253b94ea37142332bea25454821bd15b2c1a20cc064e82ee026f1b69fe775412460e7e065a46b8f6f28812c140cff2487513b77e86099dbe3009e0623a4f2591fa6715581ae34bfc9c4f708f1c67a4c2558720fae7621aa658f7e9cf58c16af0492ea209fe53a5efc3deb6e69e4caf71d55ca469b0c3c34d80217ed9e034edda3b4b6d408ffe8e75701d2ced4fe6dbfffc7b89f36a935e5cb36fe7a85b1074f5d9a7be26534dcd36aaf419cdb69df011d3cc17bf9c39b47af6c96b6351bcc8e92a28dde3d4a62cdc794bc7ad5cdab552603798f6ce1f8d505317543248a2b15f36b7119e9a72710ce50a7cb6c703f367ada552bf89acb185d141e83eca29f6ff063da47f2b1a6570f7198110818272fbc2fc8e435348e7c2782f70af5eb96170a1a0dcaf1104d0b0b6601ee212bdfab4a52694a9b75bf8af51ca33ad8dbab85b0fca0256d49a7a742bc89a54001e533a6009ac1a3a4dadf363f87b5fdd94c46759a15d9bfa432a635c373f90d50b4436fb8f1ebe6687cc37b7a28eedd8b04d3d860f37a70d66aa25539653bb18ee97507c9f31bcc26f1d2253b1b58006741b849efbd6a2956dc06318ce1f00522e122fed202f3dd66e6a5d410b3840ee49f5e5aa4c83b318bf35c5b1c5eb850a337e7c55fc5e682bed798f899a5f541898a408b1ec860220c4d0f22865ff72c865a2debd1a076648521361314472e40cc7f194bbc227b834e45b938595a2f0152c48fe2c62715eb506007b43f3b81a5340a132d1b6aefddd879c4fce3c1d2777f03683aabce679fb720884c68e7a1c74697f89f9b062f8a1155dcf0d44b83e781935164010acdfa1fdf325c3fd0012f7ac52423d988dd20bf664ba4994bb5da00f0d5ff4460cb72f0e8805412892256570e104a55675b2a09279b98b146eae763a8605d0464e292e0f90cd48f7787c441cf57838d362c1ea526674daac1956820368b1dcf8ba5f2567d424e152f9411f1a5645fef59e27709cf2923e4403804cd07a0a1f45987e9c7e19b312215f997bd1cc14ffa5700bbad9e4bcbfc475525d0a85b9a1132fb11bbc2a21e54cf0aee2a91f8d44cc1f95517205996614b7f43c1a51656a4cc81e2b89ce1762bbf5a8db0a1657d450f4efbccd1dd23a1d118f7166a6b783d6abed534dcc3d9056b5afef5c7b1bb71b373e8354f40e43c5cb4b85584c57f39b20471c70ed3a77067ae9a4071480f61330ad2f6e51f68af52c4fff570aecc2816f540d5af9b71fb18a818573aa2f982226614782fd3116967dc467caaa1ef872df3bae73b85b91402e9d170904cfa52f638553fac168f08e07d1461bf2979e55b9258724f1cfd49cae66e42fec0926212d3fdb3d63431ec70f9f22b1abfcbc11463921d36ebaf0ab5203734e288522e2cdb768b3ab69aa27e05686f49df85890cba003eaf5c5ee57629c4ccf81eaa1598b1781c463839b98c11df74c8f317cb99381b5cf4f98d587255bf818bfe1ab6eae84afd85138fa01f91cff214a4f2f74e505c0ec44daad23e466fe93aa114909802879573f31ce49d17c25db97fb7aa90853aba79b337e12e7e5e6a709238212472b67a9f3161f5a9165f1e23cdd63404595fe6a1e4d513e760139bba6be5f714cb50136358ef61b81feec9f019cf522e4f0429c93cd2d8ed9e17d39478be60fd7ecd067cf415a74e8709d78b0e035352d8efea4c35e1bea57af3d88b53121d22ffb5ba287d8534d10e28dd60f532d626797baec76a6223a3a90fe10b85918a39e082a5027fbe98e3f7d4222e89be492dc33fedb734d4a66c8ae4a3917abd26b6a3cc6da75512520be6946c2016062abd28853d984fc9b574a31a86b9cce5710dcbeb6a63a830ee9d5cd2120224bb09692c1404e6f5b1ef30741a10e0d6baf7c3cb7821e3d38acd2cbd159a21503d53c64044ea2fd11da234904bc8a3329e395d24eb3a9481908c3ea9f78b2a131d9848f79033ef6c7d7d056a58147d6b1f945e5acd0ae21ce29a5785c06b78d7dc5555d4aea8822241ee0784a78aebeaafc72bff8619791fe185ebe338919a28ea099149c88e949d1b63df41c2a25b2bdf106a65befcb6051dbd8044a8b3fa80d7237fd9a67ca3275a7cd15421e157c92e2e8e3fd01b256717cf992c9939367a1431760690e91a6b9fa7a22e4dce7e2d0d600be051fb43b0302abafd92a7ca6f31c21853405a86d45b62a622ced01ad20d6367e9bd139d6b276d5a4a2d6622fab043db321d5754fc0e3c71e40d8cda529e9726de9a0a9f023df5fba4b22adc87004533458056214d28a389f4825b19194179cd114136c5101453036fc93c63aea234b4e021dd58324b2652a6d5d173a08689cf347b3eac1f2b13263dfb3134cc2690d4a47a538655e63360ad60766692ee55a1ba8068c089e294c881909fdc8a0de81704e26f28228a59385adab06e4ae95bf915f96b8edafb866ecd51ded742b8b900740286ba2288164e517d15f732f81b19c95ebd73aca6369d83978491a0c77205944310b8d09fe91703e02d9e059af +MD = 28a911476bbc52bbcd2d2bf535004a1e51f3227c382658966f43e4d085b7bdef + +Len = 69928 +Msg = a809ca883b8cc936745d26ee1f24bbb3831ca5bf446a477588ad929759d684b94b3aeff55ee57ce12531efbe2898adf288c77bb9e1f388177470ae118680f51c036959d667cacdf4de2e7f7baae25e34c604da59c9ddea950c71542c0f53297519be8e911fe2c257e77c5d8e6ea9d65f86fc4809c3ce76d798d50c50bef928add56218904ed666f28842115d39961e5c10d64f31996e33c560c75fe55917faaa7f7d7f39bc4dbead09a92452d6513d14acbb773711672948ac6dd353a958a8565f3649f630f0d471b1d81dd40b813b6ea2d34784f45e6046c3eff20276613898bdb6002e7467af24caf7844aa2ce21513945478009fee1a8ee76445a88ddb557e0252b484e5957b09a30e21e61e2f6a7ba3aff931aecb357752a50c4a672247d11aa53ae876ed5fb6aa9beb71162c2576dd9f826edd3de3aa0329ea69ac88ff1986dffc7e74f30ef818aa07d7af98d499a4bb99f4c596b38b6b6b6692a88fd9bbd97b7fb35a4707329fc10d8634d606589b7ca68fd26613b01e021761f5a7763c85004b23b149e6ea8279730950642938246b4e7c8e3c82ac7d6663440e5043100bf6c54bf48c0ca4732bcedd9cd3cbbcc20fe867738a8ec51c00d0a57d2acedae0d79498ae8e16e4e450877f54a55c5b06c30acd0cc0a6be7c79e622ac8777f1a61b3fa649b0642058a0237b12495997653d3c09d48f58ed113a2a383706ecf8ce4a1cd1409392eb3263293d703041f66fc6e2ca453723d56cba134287298c64cbecb2b64db811aa24420f42d91ab40c78f8957ae968860bf17217fe175fe4aa116b97d1ab9e7ee180a55c37d7391e2e336aca982b93fe05420aceb7821a644d514f429ff4a71925ea058668d54beee0017608aea639fa35d0ec9e0b3209a9d2ee20399db3729eebc2fb14725da3b4d675a2c62ac3cb192220901c65c17e23bf5a56e33762717eb79dfe9cc0fad0fe56028999991ed7c95eb38da0639b184087188be6197c3426fdfd7875f127642a032a92e97611e0895ffc3de0613948aebecb07a8a08b3b26334401367f5dddd65270473c5e4765e78a7d3952fb168fbcbac482a158f9e6fb0c141154c8189e71b8562f089e19e85282b9086e9ddd6e092fa76566cf52d823cce0316757e2368ac95ea2e4c223e858bd321399d5d8540271e6287f60107f2f1a3ae9e4cb45269ff9fc5b4776dfd678be6ae36b1fa1f23726036441b7dd4c7b687693338eabff0fceb1a0a708b83320fae61068f7c49925b081716432f3e0972c45c5fa1ea12088bc012b9a14479eefe7160309dabad93ca5d2f84d6e1ebc10fa0b0a9ef7af2b69468d548705f87a44278d33c454ff331a7a8a6163c5983f774648d998b630704ff298a3f47a6545bc20be3b2ee2fc371da31a454de60afb189571ab8db6cfaf9b44c59278ddf891b6672b71bff14c35d4b4050c722bd17f936c3808d485f739d9c186b86aad3cdec16f479ffe2c69efce31dd2f6713a62d663eee6a13b0319f99dd7e8e7064ac9d7bada4ee4fe0dfa5688105369349d3851f821757a1a1f9514a0cff8cf090c25e33a6d6054bbb180742360fba9d1af4370dda455a24e7c8ef78e4ac1c81be088197ef2d7d68179d75d9d56f13db238283dfbbfada140e2ada84d8e6e59a48f9a7f6fb4dbf3b82ea719dc3a5ead3d0092c038baa5fd57189a31c7e3250b0ce20420f3fa9231c8989ab1ca546982dcce27007ddc6740fae8fc99e2930e64bb9e6e01f30b271b1a7f562c4eeb3b43f66b8f05b36f18f193187ce988e553ee198e7f2c5830c03614ab83924f48fb78f2a073d7c0b9e3998971c128a02019318f79e0a808b1860c1fe4caecb7b4d2aa3a337b7f8e03eebf44bb745e128d8bb48326397dedd6a024a4f1d3416d75e86035ec4e04039461eb2cbe3c94c674ceff5e5e31b4eee73606099b459959d364224b95956e09b665a6a941c2d1a31d0d9a89e97053f22b723bb8aac8fc63186e78e4f4f7c587af2276230ead1d93cf6e0e6a8f9f65e3eb7a4a17e60673738a30eb68d31d1264c8bfe602eba6807ed319e16b1866efa86f76bb9016a4057173cf023ff8ae5d8a49647baea155034a72379ef34b6cfb29ff8f1789044dbb45197646d22b53ace07a3bbf8ff861ade0f1f0ca69f15a904ee3ece46c76a79bd7c54b3d8736b4094ea269390db77387289b6bef37d2d7b7ff62b7ada0355ab00fbe7671c7e0787bbc0b197191a832970ab7d194c4b68c7724c515f78d090fffd64e206afbf0480b12fb71f0819147e76f8c4942786520d8a555304c9bb96e9212bb71ae892fcbbf38bb993d473b597f3d63fc80bba63ce26a573033320f1e70ad4e90c7db65aaa11793bae0496e11655e8412d6f543889e5b163d35bad1c8a18d4fa63d57598cb995cafc62f1f117a3b837b2cc8e02ab1361d97dd99bc8132e9c06da9667d51a0d9baa864aa68e124135c404ebeeac4e4962e71ba73dbca81ec0ba555c729ffca812798120cf0baa45bc7231ba7e09184947893d2709752e79e3b53e16e080d98fe080146dd63188b9348b61c2a4e0b21af9070ce265ba4e47ec3dbe4d184059ccef0768b722c854a48755bb89c9fac3c45fa9af5fba54b091c39bfd8884a725652556a4891b98b50f9c1968995620f45060b74e26710cfb5f5017224f8b7de5656cb4f168296854015b1e907ab118edc5e67813c0f0a8d7b77bf8562a958940d1ab6b77deb402d982acae59b244aa552bd83524b4a1f0eea32c88c0a20a94dfb3cac15d72242ceb9a770feecb76a0d58b1d36a98aebaee52a4b0d893e53666a12b0ffccade1af3252a48a754daec114ec9fc3cbcb35a86754c0d0d887d6c788f7476ceb15535358b11b6717be56d4bb564524b1fee9a71a2a7319d604fc7fe1697652e334e3df02c0c5eefba8d5a271d1f7a085ab6e73a6b34c30aa3d2d551e7025f7db92f71dda8688674a9293f3df669d806c5a2cd4b4f8345c7ebad213e7143ca4fcb5f9d3880b4d192b05f88eac1c200d90948b92ecff11e67704517fe35ea4a16e274fcab457fd4dc7886c3d81fc668c19e0f374f5d2cd16bfa21462bb554336587063ca05737e4b45a357c6060c58482fc7cc4478794e347e1c8183170202abe2169b9b2366ba5bcede21f2e256de88f8d07ec81cfa7e88dbfb02ac9d6bc94736a36104b73897c58ac23289bee2e1939f8371c98a5f435affc5fea3f89a8154799f1cce69f1ffd0a0d6f25341b647b24a680d0e69b087f11205dd31ce971018d69033c1e09ad9c539a2ca1814dcfa2d2208bb6162f331963b40061ec86860dc730010a5c53b0dec7caf209fde5ce04c4eeae1881d322991a200e3328d1758e778761a42bfda828d92845db1483ce357f696e94c4174572a70ccdb35c6acdf830e7bb960778122f0a2aaea16fa86ea954495397576c2a3a9cd2d56ee1a2ddff65d9655c69437d45dd5a72d969b42dc4f5e6e3bcb6623f555e0aabc2632a43f898c4f563dbf05801b530590f8d376a3cd6ca95516b79f3577d2cb76a5b518e784c32e258da0f10e73434b7a064c2c265797cff11d113e4b57ca18ea334c92be2f2cbc287ede0667adcd025386ab6b4d35066776a91d091f3df11a81989f19aed1ec80c8d7224971111bb182419b3c00aee3f94c82820799716f58a39b55b59fb42e026d6213c415e652e071ffc2a5270b530ddb70e940a23a6b5ab906166e771e18cb80e55a7e3c769d188788c8b1aa95802c8a3bfabd20e20da9299f8c4d1f58d26267299e7fcc0722df2ca35665719192ddc3aa5c85fdaf7fcc5d2f5d597faa854f8cf688d0afe209c0c81a14cb654ab1a9ee86b8a01feae64bbb7d319b7f5b591b5514c078cb4f7b40c3b3a9ea6c0703177197b51770da6dafad53b11908b5754d2c4aed7f0a95a0e98637beca6f0fb3afb5a5fcf1d6c9397f9a7784dd00fe026d7861b7ee52fe9f42776dfa7457abe7f9227834363bfd7543eab253ef517f2704a122c8cc8dd0a0d3ff1f06ef0a23c87e21d706ef86bf478404ccc655e1800d990f52c521a254cd258713894372bf7dc5188c1a239f57d7c8528d84199a49dbb429bc59f579d24cbf75122c7976c72e56705d17da6e0d4e9a3bbd36436221badd59272a51fa92452932e49798fd8205ba9213a61cda29d47f272383d92352d29d075ae03c0ddbe1ec275171a8f1392778e4766ef2cdf290017e8814e5c4224a7b991e24bf9af7478fbb2162b23934bf18d04d18632fb1aba7a9b4906e2dda4b00783b9ee1892ca19a551b14bcbdbbf323bd624b78e6af4df90e6fa07d46c1fcb20c79f5aac2c314965f092cd16516eb20137bb038db319c801681ec19f721861cbda0d1222d03ca0a40b155f6198cd0973961eeabf682c3c329b11b4a284010c3f477dc52b336eb7e60db3535c166ca1099dcaed920e9e84bb0c8d618c168c33117c7bb413aa29e7a2751749545ed00149ab398cb3fad349e118fc48caadfc7ed905819f7ab910c87fddabb1f8d669b2aa4b053883c17ce46b6cb8eadcbed437fc5f29c7def495d2c4a3db2d9811cc2db1f998818006fdecb0547db840cdc5f70205decdaec13b8f2764300cd0a569eae7337de8472fd8eb368ca541756f245460760b2168c364560e9b44d030e5b572b0952fed379080488461ba1708f791a8ce4c5963ab6fc2efe0b584381767414da47b28f0dffda68d107036997a1b709c71e523f4d52ab985445f688512be9fd44961e3a3bebb9e317124a549272f537811dd05657478cadebfd58c47b14023cf05f5fa76325ee9de1d1b80c6bec7acf41490682617fe7954a9c44a0051807f666083d7d9094c0bdb7ab14362af690f7900abe6c71e10478f98b83c3f9213f562ffb8065c722796b2108287dd5777dd7f5c8bebc92552a7d8131ddd75e16f381d29ef00612b660d1a850ba8676598a99f8ebcf19c9c3a2cc69f519813dde6ba2d75b55097838bc14d3ec93fc1483ff6221dbb92b2013b58e3941016b9d63efdfc79976150291d65f2b427b85b8dd245df900449b9e2da8eb7a7c5b3d868cc76029bf1cd3b6a7f6d837bb3ac9694f40af07c338114bfac60ab30df09e01413a4e85370fea9e6363a77fbf97722fc19d83d38a5c34306056146c5e8837146a91d164681703c2ad67f58bb75b25121b81ffe6be79ad54489f302dd6ebb0caf015104cbafcc6286e48eae4094e8c1b45354bc7c85723c09bea877fdde0b028b90b34c89585dada8c4fad111f384f51270190fe0ebe3f7a3f7f41e9db30df38aebe645d617ce8e0f1c4679a60e116bdaa2cf614fa76a98c1ea685f438a3e701b775c99586a7974083ef3f0833118865b400a490f34608fd1fa77b265d016d8bbd778bf76cce90042c175ee1028f4d532ec3c3fa60f805d629c94c0ab0121cdfa60dd10b7cbb7b34d386ebb034240e8f01be7adbab52471e265620259a9e99045c7fc35a1c35ffd660820ffa3198731f1339f2ba3b1d77ddfd941e01846c8f02c5158b6bb503c4f4ba54f24960b3230d4e7c521f78203c1c96cc6f25d445a4e2cb174ec6b0ee7395cb44bb242b3cc76199cec392ca253fe2d9453a19f4f180ab55cc37f473beb4c27a999314f9fd0621db796d9c99f22737ae49a8664a38cc654a7d6b7c683b2e82af9da1a033bc8957fec377c44d519d23fd1ee19340e23018947215e6f62c8add52960e503f42f70ae9f50a934e0749afae0d0c283cb653cd1af35bbb845b6fdb4ccd01ac8657f94384564d9005dfd2e2a95e52ada87dde8cc44865827c8e8685838aa33d70c23709b7306943d8a0e1c5d659daabebff785b7ab85cc3458e77e2e0151b8a664d58646ac9853430111d5e1d46cdaa6d04ca44248c68074723e9fa4bb5921bcebe055c856bcaec76fc2fb7676c523096547c4eaa0db0d4ea1484d6adb3307911dee5faf05c60f21027bed89a1492c7ceb63581f4805db5962bf17dec571c2b9875a14594e46ece685a73c7a086b4f67df49de6eb30962fb32ed8f7f2e97fb9ca4be046574d1c09e45ff68e5f0ae1460bd45d84756484cca9e6e04da5b180ac0e274b0322dd942aeefdee35c1e8413de01f1d647b634f13e01bb286eff7488bced38986dedefbb9edfb03c2ad67fb65649c848ce6761e8cc195f6aab702fede711543d771967c3e4922de3f0ad0384600153b069ce519c0b21b53c2e51bcb2e5fb621fcc54e3c42693a27b3c26b1f661a50eada87f86a361c7771d5608ad701ff7ecaffc04d664db70b8527bc80d94f1c17380e8ef73676686ff9eb129749e2bb34e7e74cdd20e59a5ca1a2e0578d896c30cdac9829a809fccc930ce28a4a56faa21fbd504492947af6232c1638649a746352bb8fd7e5764255e641b8aa01e7258e1b88b3cbe6e1c0a2b2cd466a860c9a7a6f445a491845a0d49b917c40971ca2c183505fba4154d226f68e58361a67483bcb4ee1c767ff800f59051694337dda03fe1e3b59cd76194a997634e44831e5700fe10c99fa2b49d0c9a46feefe93351b34f92fefb2cefdd8408ec3bc3af4d9dfe205c306fa5163dd93766d9620e51cd3cee923c618e5e79695ddeb0515378b51edc3ee578ffa36fe5e83f9d3c0fcf5f174f6ff2426413d4e406b95090483658dd82275d5e0ad2afdd2d4fcef065e293ecd29ab52046c68c6e940aa0e2d5fce5d4a2b40c516f2a7a198705c301b95218282891098dbeed1c73765105db8532e87ebe53772585115b1585f03df272944853a1e143dd34ddf18d2e1b13ecee7eed464584323cf53dcf6b9aad74351a0f90e9ef1a08b1313f98363bc73f897a4740c5d8c4a1fa37f64386458c2a6c284aae756099dc8c4c789ce92fe40d53a1129f77d8a35affb5d153e0171ab4ea25cbed6096ff13d0df2f6c206b0ff1bdfb7755c6d59ed1bff7658d237fe798418b19da45f298632171ba82768da9813b01cc105d50159abd95193baae0516904c0aaf19024142ef09ca07c55f82f205d2ca73b85b8b60a7ae7730bf0f9169ba67ef5bfc97be0fbb0c887b6394b2f7397049f53eaafeec56a96e95a902a75a4a91e80c17c9a9d4e048db6ccbae718ef6b01fad5f6862e401efc02c402e51d187f17e27303d0979a4e44e42c356c89f86bad605e23ebf2ff0abf45b4c3c96b6bbb03815109ee6e5500966651434bd132fb7f66391d31eb76b03938c94d37ff12cf59f3e7f9249022bdead3d86ef5bd03acf053132d08663ba1f2426e19c126b22e9390a44c139b77f8caa33e030a7bfef298dd68edc001b24282f91fb3f590ae7b491e229d5beec923ae5adec9eabc895ee15ba6da093c7f2463d34aa635cb7c27d2c2cf473e089ae11e71470e26ed47545264597c347506da0d579b6b0225bfa6c94516e45a877193937d135a3f8c9d85747dfd3ee249cda5f7fc7e6d0b3dcd8ab50ba5ff31d9c1bd95d4a038a5291044c00f0eac9339484aac38703681724a45fe8ce8f2547e1fe19e2e9a13f8312424bd9e0a5fb7b20b2aa2a1fd5235619a6b3e4f4c5822f2e08224d15d9699336d97c5b17ca2d0429ab873bf824a679a525cdcd96cbb2dc6c831c263571b08be313080dfe2106d795b8687f7ab89c88af6bd52b1b675e5681b52ff6b332be7203361777fb742ffb4e21757c0d59ab891ebef484eb622ea657e78143f6e438507d8bd02277894f783a2ed8bc1ace7b86dc6751626e83c9d3d5603d98664fc92d395a5c95db290f574327b6c707e0b586d0ad164c0c94d8e5e26a897a6b3a17121febe3588d1c179f50533a233e570192e2da68cb2d5b02e5684b8d736d6fca0617858cf4f72a0e5848fb895a25fb06b1fa35716639a2f0da4e4c730ad4b48b1209717ff07f1b9d8b1567cef426936deb000559a5982f49cc7cb560c808d2023dddf8e5d48fb66b3f9edf2f77a8e9dd48dc934810b2cab6c4d9ce7e337191d68f7b60e6298ec4217ccbabd46d13c3ffd177276530ef3ddfc84fdef5d578b8af10cbf1a976e40d664a8412e65dceea7b8db708d88cb84f6be3c52fed36831137c9b6f55743f859e3b2b15d8dd04326f8858580caac73c7031a24078ddcfc6213c122b2171934703fbb3ad5f04dd93e1ebfcad563198a6e4e7752affd514974ee00f971127eff1a236e07bf385cf8fc97456c50ca5a630cf501386f661dd40f6e8f217a6ffdc11e37d101668c850826081f553928f768699fc0be8ef0c603fa3b758415571be34522ef0e11155171851c536bd8a479ff4cf5bdcd56c2d640fffeba088af262cb578dcd1707fb479ce179eb98746767927e9eff4b0d05d5f2e45f6797206759e21c1f75059165f0ef02c7eec257984988c8438e22fce049807205831821df88905b81eebef77bd2d3afaf65d3c760a849f08c73386b7cbc5471991672d381783ede5a402c816777b1b2d857b20de70a3dbe20b577a200b5d5a9c2298f7f76b0526b537436774e67efd1eccc477154faccfca85cc5e895bd6be229c2566ce5b836cb1490c3205b28f7d590cd7a3acffd5e70cb710c87635b7ee376ecafe4f71950c6449fbdc5b3442f856e6033b2829d5be332fb33c59117767550ac822dd45a0a238ba60bae814301ab2e905a1f93612b1e850222eb4879bc605f0cb790a303cbac93af9523ebabd40d7862d7ca2ad136e66b8fc140af0ab66c4c1337558d9dfa2701c1436c19060f75f2e092fb7076e4068ca8f80eef51cd60bfc9e8c4b9af015d80e5fdd034db1ca9471174fa8cd79e449158af9b2fd669065f37b3254fc14716b622ab9864b362711dfd630ea77dca6a22a4ce319822f324d56480bf795b34194b80350dd01549971dad4880e9eed23ee6963d1652bcd183c85938db5d063030e8078374a18939e1ee280c9879b41c898635e492842c6debe11cc1c12349a32135c07d18fe979a193876959e80571212a989abef56fb2e24c8b705b9f4adf5b5d9b20c4010c8d405a5a0cdda255d1aa3f89b7b73f1b07bf52431eb0bf8b98eb47de51633ffa34f6edbad9b9491509e021b723a687dd3be279e935afe56f5d7e6c862843af2b1741b82a5e613ebb705f8b916d21421ed5e82dde43cdb37e9361363303f9d1178a9d6439198a05c1bb74d7a9029c00685c3ce8a2c78eac21e1402f5572ea485825765c67898830c031cc908e729b3542355d34c74f673201bda7c27e038977657e791b262ce0422f79c340823b937324f7c59ccc39ebe7868ee49a1d247bd0b7dbf22af57226bc77f9f55254dc092c892a027b1215813f38eba310a35425f6d7e49e067607cff22248df5056c280d3f732906a4960cb9b914a4fc0a1210c5c4e2ec937f84c4095c6dcedc5088d8f0bf7b7fbe4d2ba2f9f18216714b709b37372f0f02a2cce2d19ce3cad2afaab8836f300a1753e7021bc36177597257cafdeeef1cf6763ebe9f0b0ce99fc9d8b00e781c32d95fd3146758372f7c2acf855e12a97a37a3e541bbd173940a481ca8d802c760cb18f5c124d88fa6a219e1b4a3cbe6918dd2c6516c159d31ddd17e882a34b8fab62757ef9c6bee4393e7944015402dc9c0abebd7fcff142ade0f05384c36776a623301871537de70163df10ff99a068a97d55bbcb1b85fe5d6a7b9a086318c1697e5f972d867e695f5c3fe0a9a00f93cdbf91ee6d46806cc8c44a2a9204d80681de549962d218f18f620c5193f9b8f4754be3d3fac369145ca8cc93961b1d9c6bbdaf9dd5b8d5f62e2fc4e252f934f13cacdbfae834b89ba562735399286229a3b6c0f2eacd5e0db80019f14b30fc20805cdac1a9fcf7692f9beee92fbf3e04b63449570661e9aeb9ad5c2d013376e8fcc670c6d49e9de357bf9fd2ae4219d41fc0a928dd29314fbf620bf3f9734dd0ee943e88ec9c14b0ba47f69eb9537e0e4cd660f6c3859d6715e8b9c4b872e97ef220847656780447c3cf93abc555e329ca0fe13f5e09b68b797bd63db2a4c2298405e32da6b4e52f00a0e79846ebe1ad13b7da610117f53336c5f1cd6c9b708730befb0d51c52fbcfd7672d2d267e20eb6789d0a5152d1e4fa419cd26ac97d1e64a60c93ec4b5ca816bab5e9ec6c7cc52ecca9a9c32ce5172069280b21b13035bc75c85fda99e446e8e8314bf95c0a76e92ea0bddb18a74035c733c625e5328394889edfa1336f3fe08975878dd9238a8218e2c51da88106c6c630a1ebc80c7e8968f081e4ca55e9aa08e31b1e4640766606003def4f1ac14ff0bf1ce7fc269d07917df4f9b120da82011a852f45f9d1118089b6d49ecd163dc13f95aed409559b8c9787647a589924ec7c44353aa8112112ef9e71fa206c1cd222aaa4f23d3eb1d4cdd7c998859bef2598d6c496f3bcf13792732bf3bd39698e08da7ec92abee6e491647d9e00596d66e0bb620d354b2e6912c3871dec04a06f729370eb6a6ca746729c14fd81680c1af47071e005322511f10df7cb35645df0c0643fbb74be7f74f20d1429513e67ac348498d1ec0871ecbdb112ae31cf0ebca2db4fcbc23adbfa8025efc42842fca541662b3542448133c96b5c1969bb1f1d6a57059edb585931bd852c305f1c37907ba3cd9cb06cff91b49b38af359f1bbdb76615a7389d53c50a994e006e30a4f863bbd46abee83970ffaf3cd23e0190f7fa96e4776270683ee7d0c9b6ee26c1479a1cf441b64ccb7c1b35cd24eb88fb66a457e671d18812e9e5da23b6574518f87f5591943f1121fd87bd8e09a67bd7845527b0391e3ad05074f3e0a12232189593e420e4c1cbd98fd5b4f403277091cb8d94c63fa10f1d2d25ec84e9e7644ca9784746b5e6e35ead859a73b3c70dd6c6ae0d9cf7f27b75ba68f285031f5221ae8cfd678a06ee3dd1080c917e1d8a02e04720a8f48b166692cec4658f1292341f428507d3ba42d394ed59d1c4839ba2b2d94c7ea7e3665c40b7c0aad0999b0066496cac157987cc539620b949a1a932b8e50f82a493c1e34ec475d999fce2f32e0222c8d1ad3394a7a2efcc5fe0493f6cfad8595d04df88177562562dc4e0a8d0fd35e29afdcca90b84156f89d7e225397b456743cf05b7253b04c51e7a3a7df9ab149dd3c3b995f9ca403769e10a80b8e6b530eb4aeafd1295db8aee95470f028c4d3f1ea790c7fce5ee9842a428de65ddc65ad610d5d64a06653c109eacb886215e5ace01d8db7f577f26d699d39acac0f72976b97cbf461d203d170ec226ef0ab685747af83d1b9f8057782a81425220a6315f9d4624813a9b22845e2dc6b798e423a46b75693c4e809ec9eeb871968d7216f334b8a2a5ff4470cb1556147a5c75d9d06be6dc6bb4fe812e4eff84f267e93ed4284ac60edbaaac6dccc19ca1e5d9fc8ae4b3232493589327d3bd0900305a0d74e072eb36403c39eedcf6cbb8958f20267e70c9e14a3d493905878a4a77632747e5d7aeb6dd77adb0ce6c2e491c13d95591963d3c4a0b17f46cc5653bbd8300dfb0df6d0af3fb7c7639a830bdc9f68c7ab69a09a0235083cc721d465e73481eaed9f0c29d34262a8177217f912fa5ae1865f29b97669c1133ade59a1d2910f537b9b23c080e963c753f7e676dcdafd2a118467f8c744c44cc78c4cd025f7c190cd8aa25b5f3ba26c3daf594ae24838ec755fc2219dcef92f98b217ba876f7fe80cf4f3c3174007dffd24d63ccb4bf36dd979a3faa2104904d2d82127a1ff31a5605f7dc051007b67bcdec6153fec16f76658704d7c119a12a087d2df1bb2bf0df055a81ab584e44da264929de8328ad0438693e0d3d9d6a2284592a99c8d1269e55ddc98ead32cdad63da09c6b2535409a8b727b5071e3fc929dc94fcc9a10006600810399f5395381f45ada73cd009190ed77e89ae0ab680714df9754e0a21c9cc4ff2369f3f503ca0e271ea633d3094f3608ee5a2e142eaf343c4adc67b103af34bfc003d44631da156e32ac5e97f2ffed8f5438640895b18449300b3823fec6d527a20ea01624d89199dc2e563292c79b73e3db896ee6358c6c108a5ae2550931a090335f4c25ed080fe5d4248e32d0c71c63eca52d6a65d50eb300d5d450a1cf93541a1ad07c4104381545cf921942f9f29c12c12f6667e698e216b2e337b63766b46ad98a71fb0c7c332a5f259144ba5d55f6e35b256347706374f8f6516ff28379cca2624c44a943092add31e0fe90c558401699ee828100fec1aff4e7f587506be77f40544361f55dee509d4f9906926b975fd108eb1baf7da6dfc741707e375164770cd221bffaf81dc051263da12c57a3c8ebbcc89de4a6ca9156a707609ef4ea92ae0e0548baa2603534ad11ebfbe30d58d0523e900943d6cd8961e2b3ef1d22d90e5018869e225fb8302c3e6b68d97d176612777b851a719948b62a029192b35314e081000c42 +MD = d65f81b5c29b7b1e9baff58fb7cdc69c32bb2ce062363dfeb252ae7501a21230 + +Len = 70720 +Msg = cdaa34e6cb5d590027921ebe05ec70e95d9798385a20bdc5008aabbe129ed35d3382921a4b8db61f2c5a3efc761b619cb730d277d7f9430ab4e8288409dabdc394a74a7e78f7a5c4e058f9a5e58ec72fb22a2a9ce55f5fc9391084ea622da07d3940e47c194331d789b5da211bedaa8994ad290d4cfa1bead82b4a57e74185726a76e97bf8195f40709866d8e0df1394a5e05533d4737e55d961ff335ebb738c6f71e0e3db1f39e7dd2a2733fb0c08372fec3976457290f384d92de5904673b28f58511b8b00c6b41793a498361d945a78f95a3f669e5aaa20bc5bd745888ccc1353c48dd0620e9068fa657057babce5c92e42f400a0e363f73112704529c6c3438cc2a071ee1a611687f324278a8ac16ab378ffdb1f34074f61d91857d2297d6728d2bc384bf1116a64d51a6e3605d4a3b184c6bfc4537c71743837452bbee3c7527d49eb219b86acb693bcf4653507bc50efb374374aaca591b735d5db8cddab304aaf531a21aa24a8b67180c02343fcb73f2cc11f217d33e0df7bd08b9b545aeac15738dc8a631a5fc5a0dcefd66ead0fff9b7025ded9628a376ffde2f42e1da96aa7620fde9bd50648b3ce995671157fb46747f08ba77bb7487a26899e553c95ce08985c26399ec3c7111f66ac357c30e8f80f292fcfc68e98051127a1afffd574e3a46b6925bdbecb229700dfa12c4922b68f77d3388b38b17687650626ad92e49e4ce3af477a21db4efd0cf79c6cf3eb0991837ecc12dd1b3650ebd4a190f3a7a3596c00871c1180fd1b35fd108356ca59dbf43872a2a35cae34601307ee21445892b065cdedb84197b720f8e4ba99470e3773091285b5fe45fb6ccc4210434327c154e501333ea6849a78f00059e5ea906ba8fa95013989626cb806393e822d77ac03890b37cb372c8ce3ee4ca8613c473f3a12e15f58836f51ecc9d4c00689af1c6358d341857df85409f8b0ee36c49c7dd25adfe73976d370b01dfbddf6df39d91c5a419997ff4ebc941914758b0af5eb17d877e005e9f691aa0b96de7ab87cabd7973e862745978a295660838997bb53b2969294e365407e859a8d0bbc9ae05a3c18b0515ed83c8772b97c6157f2577b4a9c1649fc7119fee7d3c8ace110cdadf2e48143633fa37b174950571fa32f2b88f0ed487795e9d879bc3009149fab6ea20397a25f02362ec00ec4ac0633ad2d149cfdd97d5918d5e260ab6a7bd1e263f37edcb679aa5c671411c1aa3629384895a8304336460ebdcac422163e2dda558e5c36c9dabe7cf0bb592d97d70d3743b31a6cd0c9e33358dbf27e56863bfc0b1aa58f21a9c6008f5eeef2bc106814e717fc9bc65fb8f06dbbf1a5727b84ae4f4061ce070f4b4f0da5d9f6610ac136fc6955a46e1f4eabc612c981b2448f59e7a899dbc334d4d131372123ceeda0054a502e6f10322ccd298983f95d0ae4669cf9559e9d3fe9eec5bdce5f4ae08de998758ee4f4bfdbbf5fc725f4bdf40c3b36db9bffdd58120e8fdee9941e0b114aaf807deb61efe1e83075ba5c182b8e427df875e6caa9d899594379a99397b3905818046ca1eac8af633b4718b7d6f2e239f5ea3bad57c2f7e9938686efacfc2359e5294ffad7177ec2c0d610e21ec182317d02e6ce8d5990077719137a71736c7a91f67cb5de57bc13ad6e2ce12b828c2e36c6cf757123cd7d9738387e0fa0d185c173db19290fd01fa91854fb24bd67f8c83ddeea2baa14129aeedd41ae0bbb401fa75570ddc724ae5ddb707931fb7b57dc70fc74e476ce8d2940ea0c743d9375539ad00025081f8871bf68a37cc230131a650f5dc40d64b7eb3847278cbdbfea05543513275829748ccc24c12a9deef3292600ebf2f93c5889dddcda1c13a968dcde6def0b42aa3b560b8c1b66111dc0b2bbb86797c2c038aa37916d4dc8b7b6803f5fdcfa4b0aa5798389f956a825425c2a1e19daee571ef74f4f274663539e9a7ff2241cfdb27a9a3c01a222e96e41d07d1948e40768d3172cfc52306ce4e6d2a7100e98df0882643fde5ff35c6085b5bc933ddc955d20b3d68234326bd257cfbda0e1967975857c930678f18a64d5b4ed7341eb1e9dcb7356c71575e984b93acc89e64054624a8d40633543fae0fb751aa19a392c909cfeb3b53f206e64d4bad9b565bcf7359a3d4fdbdd12343ebd9f4a0490ed469e5dfdf533f95c80d96ff8ee0ba532ea583d34c758ba85c1e4e4da86866d30f52fd41725288a51a94b549b1273f0cbb631fb1bb0c112c5283c38d0d50e7729bfabcaf54a7e3b267022494c4ed58caee22a9c9a13fe2ef9f1ac80263f85f8012f7a083f6c1c54045dc717b3a919c205f6a9e758f7f6564aa59e8687ccd136dfca04539c93ea1d12f9a086772b28daf57b18a5fe6493d2e0cb79109985db7aec1ab276b4c8d0dd79cb165d41dce81ca8f8de9e3362bce9e2eba5e704718b0b4fa6ea373012b6de605c9266b8c542d046f5639aa0fa59e4788e8ad37198ca3331f61560b87a8466f0327a6785ed1e3df6fa0f61ed33530bcc3b909b88037e38ba939cb7f30722be50d737294f5c65ace1904abac11690a6037a1f09f0b990631104e5058ac1782eaad33274bf1bfd652f3e7c6fc4a9f9fd48d39fe352c2e9fc5fd15a1124b06ffd23acd20f7d31d0b0078d0d469ff67658c1cf78f255276f4bcb8362a56added75e5ec7ec430a6c5d591046508fa05f0fe96f512fea2ef0c977ea16487044fdbdc181aa0598083c31bf72bec7d7cdc4d38f0cdd5cfe022a72aa0b3ca80990e227be3bf9f9717cfb4cc5e8a0b6cce85774ef7e02a2cb8c9284a5841fb58d123a89a6f62e3469a927f2ef0aa289e98085488d2b577ded2eb7640ced45fd756955781e48bd42eb4d40c8ad512addc816bce2daad525aed5907b542bf35ec5cd6c167769c3da160b9e4327354a00ec31b8cc87a6c69d616ac01ecd972760e9e1b1ccc526905dc847f70c4f37db8b9651f735dcef1246c2388447f539f7cd0c386b63b4447dc50a11e84f48034cb4a4892ef375ac408798e8e3de123aeb0df67aa2c28aeb0f7aa51178f45bc225e5dc8067ed9a06d9caaa21e6cc6dc18b886f505ed18f42d0e461eeafe3d09cef8508dfa90b93256476c18c94f74ef760a73f62a8780d72476b05509504efb830fcee4dfd35a73069f3a5d0f548fc04f1d02d57879f4aa2fc785be1333fff3f73b1577369531f4f71a81e9611a7c10fc66c03d7042e8ffb78712946907d4a583d0e0af8f84d43ac03fff486f1fde34068e4878c260d24a542c0382ab4a4162c187ad186af0b5b6ca75fee479c30abc05e9e821bf52551c7e2cb5033a89eace38b5d72c29876afbae530d6821a2a61b73004bb2f795c5e8ae1fc3809735154a41f20b656ba7487bc46db72de74d14d4d677dfc6ebb9b9215c6baba551da756975a2965ea1dee2a9a51c68b04b10fb7a88a700b80c2cb3791196c9cbfaf87f9e5c7e14725cacde17d8f5ae89bd9cbe6f32147b10e96d29325637ca7ee30d886b6ebb023b0c8f7f48d86ff534cf5ed2354b569b6c0409aeefa2a51a38ba884453150ffc3321f56abf1c01e92bf0b5cb6f3cd3ee23dc7099237f953583d20727e7f7d34ed54d8d14dd2c51d6e9b2602e7f9f12efd2e3309c60555ea8ead9e8a79c7fab96abefa4f24571b66af894bc6fe8ea9a1ce3a8d81d18cc87e0c832db47d3250f402178dba76a94c5f1d30849042d97eff1e0adc58fcf3d9779b66d2d8d4e8064f7c089af98cefe0727f39d848fc03f7b0b54528788f63113d03fe97dec410a430a23827f4ae525d069f4b50d774339d1c5b9479c8d203f6380cf483ae96d3b2013a503f9324fa4d82430ff223f292f6acd89fd8300cfc12d17df09e319258b9290df7e7be350e3750342cc815be488cc6f30d4c988775ed6e2099f14dffc84110e3d6295d2ab6a4d73a4bda951f7ce7d47587dee889970d79bb9883eb274ad01e84940c584b1c1b7f1c142e8c5f578d3c27b495085b89fc5817945df45007f0bbb7da9897e06524b0a42ecee0c4000868ce3d79e145744275fc36854ec326284f4550d60231bc47d29842c27b979fe0be35c992598e806536322605e3c8d00042f79dcd8286470d4dc1f710431f5e9ba82301e95980d4ef05800be599a62d01fc936a86fd262efd8ae7f6c222a663c38c5f8c85ca61996849af8e2b5aa764b2e6e15e075c5a9aa0efd2e7e0ff72d6dfd4b2146e927af656698756e10d119e9c66ab225a886ab37ce5497070c1cce078e7e43ead9b131443cfd00c0e9a2d0245e5b75d87689ea01bd5163c7c52fca9152dbdb449cb741bb6e25257bbe843b937ccceb894e33d8a0525fff10b994a583e0e051e4a0ce432380ad5e0efe19beafa81b8db8be39198c03fcd38267efe157cf28323b945ad8150af204eb26c7cbe146e3d6d734fe0f3d68948b8d4e95f0a5541006c9d5e15318639fc4a0c71305d0ff92517550e73c2cf6d371a1dc2b65c536344a1fe3e656a6211317c06d9fdee738c3780380a922e3151630509f14b36fec11769e4cfe4536d9d878ba78a2c99c68e3c50242a855f869f9522a15f66beddc1416c58f8dc152e46c620f86d04889267fd312256937c55be9319ecf24f1c78cc895361a193d72d74b5e2ff6acfe05e7e3fc9387605ad27162591f2934d79574bb8c608b252c2f3901d7ac66ad3ccb33dcdc07173231c830f1532bc2baafd03a4966c541461fe0700c68f55535a72180b6ebfd23335eef1112aa551a0accf0341ebee4dad08b2f12e78cab20faafa1550e96e659f834ef9842b92badc9c18df887ff3fb668f073a80fbd3e7840b8d32750774319f556224d0e1a0fdc5c2ff20e31a2467283d2469601651fc9cc753f8e0907a3e1cf252f95d1478244565ad4db9832998d95c31063593ecf73d2573eefa4c2795fca34701948bc23643ce49ee7183a9966232589a67384de2516c159d2b02243d29b069c2db10253ca646fc8b75e24d6aac08bfac5ece1cc4bfe5638bdc7c183e8961dfc69b69493d5813eead2c68bc1b9e258ec4811c00a66fd882427380aca106fdd2953d5fd741407d46dbfedc9eb11fd3ee6a3aeca28f498c9d4a5ad7886d87ce69b527ba775146ce2d9e53089d3519580727f104aa87354bda29f74953aaf31acdb0c342d073524cca7d93b25fae73fd00820c2dbf971b5b6169b49db560342a250e78bf8bb14c41460026a38c24150a0104f42f89c5e3055b91f89d589831469a55adf84f131cf3c8af75a3cd9fe7c7343311d2b21b7591f02a2a0fe15ad2b6540fccb6c5a0abab7913e67aca28d07bbf9acbdedfa1b94747bbb4bcfbacffc17ac33cc19560dfb080b3e2ef2ac6bb70cabe8b1aba5e986f89ccfd6c4c98a0b034fa65e1665ba14c0617d2cb95828dec7e29b74feb5af850dde66de67c259dcbac3bafdee09adac533c81cd6b5632f380262b9451a9dc3336c906cf4345bde5a070e827fac2470642e4d2ad82f71899c7ff1f7c4ee30df605e52625c1c434ca570fb468d72014d71202e6299aeb4835f1d5fdb940f1a361fdab4b7e7dbe4cdf40d8b63d1d93a573430f42ee0d83506cb0332cb7c2663aeb8083fd35d1a474a8e064541108ad678f48726f57755fbf8265af53146db143172117a1f868072acbc84b248152ddd97fb4c4c1e24ce0e43b9492d74b8d533a6971ded012ab66fd9c6af58e1a769589b8fa8ef13b0eb77cdccf964fc9bbdcbf46d5321e2106346bbf4aec1728de64e6ef9c3963be3533d80a7922131b63ae1053ddc9d2b0130fd398daa7565904dc7f781c4c9fe84af6842913bed7bd3f57fc04ee0e942c5c49e3adbcafa207846cb1e6ed410c45da601fdd41c4f42b895ac0dea868e9124c930a82437da0d0d7863cb0a1af4f534e10e98b65ecfee2ec371d457f6137ee6e4bc6ab1189d92168c96e69bbffcf9d2079afb8029f5e7fd27d5fdde590073d2bf4968ca96c9195d296d576aeab139ffc1aa0e79a44a95ed68e071c7d7ded7b102df8ab7d9e809a8f8ee06bfc4991b82b748b9ebf85561c62f9a165a9734124b5586b8bf0881cac0a123dce2753e0825907be41c4c9eb14f230cd5dfc28a8c685e47da2b4b1dc46dcb14bf1a242869aef54c7755c9aeee51ed3d979d7f69acd0c829d843cc435f761ec898b0f9dda4e68dc15ade970c8195343542ddf757dc4a39359a4fb07b03a5444750ec1de7239501e575ffdd40d0e0a1fdbfe751de84a059720897224e18c0e299cd16b8ce4c83f8bdb000c4d345fddc9cf703b6860a98d2e80b6348420690a3c7f976f11889771b53f428734c47b28c1ad1794ed6d7fb499f89fa4ae135dd2cd7bb54f14f413b12ae27c112333dc9598034904056539069a06ba551b30d6f28d4faf7e0fadb9584d63311cb119108edd50a91b58ee621d7f29aac853ff70d3dc3a0a8e5a2c14e19d4fe61c46daa38ed213ac4d407f9743e9dfd570d0d598113ae94af28ce5a2e7aaf72f825cff021046cac71c648f25344aa7bed11a59c91539cbe54d2060efc4f6f762017bfcb8ad8bf48e0b2d93b849120feb8bb902906a59606df0bd345823f1df11fc2c6a33c1121f659c1433acfce076dfe315567a7b0a35497fabb6786f3bfcd3e4d6be000589b9e231b0d59fea367af089b7cbd3e1dcb90c5c848dcd11360f1c5e037ea9c55342887e7bfffd7b749ae1e228d95919316a2b19c020d2b460545fca5b12ad8aff47ccd4ee29324b3b45188ee11566abb8d72a39f70605b34b8b12ac161067e0ee3823d77fd7fab3eb1808d2690678f3d37e9e3f91a3e2b86801d995fcfe7541c0a231e8a982a3501472376f29032c8c01dedb8d1881061e466718fa58436247e7045bab13bfc89a47e238b7b9b1edfec45676c4f433cc6f5709555bb0759b4df1dd157126f5d71ce5e6614e938939a6bb940459dd22c2262a87133cae0bacce51ab03ed5bbb5b327f0d55964f0f9c3e2815e8ce0bd463dd216ee70fa98bf36386ec8b723a86c18583b58a21349b920fca3ab88438df4deeec1f25672b6d2b98121030924bdea680947d8361ecd397a5f290e83ebc99dcf5eb1662b5bc25a1c683c487eff82986be11d3b5eae04e298b31a6ec303f9a8d6c9ee3338dc44bf2894c67e5cdd7fdce889c46b62eb751c44a17fb591b1a57fbcd8813fc51ec568a5aec78fece53d1fa9a9444e8afca85044d05fca351d5689483271741a49cdbf5b5d4862764043ca74e8a6ce1d0925e461eac295f771932e447fc6b97e84e22b114a4fdf4215194312eef1d2653c75426394b1fe1fd2e5d6766988f53bf78e14911de7ee978d48f44b642d41a8bb1fd0127832edf46ad3e9a896c01297cb58e2a17d1577bfd05743e6f263052faeabf8363e504abf61e5cfa0ae76f7db28c8fe0a12e3620005ce9aad3f9a05423ea121968e10fdc8dfa3f1275ab08c4e3567ce93855897a354366066f4da2929928ab2fb0e7cee570b96b5044278b93a1bbcbb067e7cffefe615fddab82b592bd4ee152d699b06b40d4584010dd566e501502e2aa458802ee3f6d9d134967d912953b1f445752b270e38c7e463d07b9810a98dc6a0f303a6735e5c1310227da4bb43ee184b1346f736f8e476ee6fe09b705141a3195671a1bcd7ee67f3d841a9b2453460227c406dac0c457f53bc7e3648d0b389b887b065e9e8f79685beb2eb36e2eb9572b8ffd199fc50c73dbf3bb1c0ac4a3f2590aa3a201adf696fdfb6b16da07b7fe5d06d6b24516f15527f0053026f6d8f0778456a89f30ea559403642820a4de621cb7182769209323a04b66633a0863f07486b3c4efdec15eaeb1be79ba5c792ceb1f25fb64785e79e5643307ec8fc18cc0703f794c0e280cbe74be8e1fb524b958bda4b0df94dfa267e91fa096e37e2ffbdf5e486c356ada43cb08d7b9357d81e60108ca32fc8337983860bfc1a9f654773294b498eb1651cf3311e91f53c0210387c6a9f715e5c406d0cad80559c684d30867408a95c70db12b5e24daa6b91131b062f2947773b22440a26bda596b5b8fcf6a6e99dbd968aa42622d5394a4dd11296216b3a7b9ac81167bfda95f51231df612a14f03e9fd1ae6b26512a43fdef24148a8ad1d23fd9dc0dc0ffaa214860e2ad49b22d4652573a6c36ea06bc6b185a68b0b195e5f2feabe371566e821fec0cc348ebd93c78c54f119ac7531f5df2ba7adc060c1a7ddf88d1190468805e7e668b72e67e8ad9c2f64299129cd39c254f3255b1c0daa7237abf02342084cfbdf6ed0ecca3973df736e77cf06640f05a1e7965db398e37738a95720c1ff43852c6d263c4d1cb6c0b17e88c8b3bce2039313552acfd9cf676be3bb2b4ec3a62e4de20baf78f8e2da7a12d0e0ba2e5f6698f50654b966eacd5209a0a550fbc151c44c15b8d65484a73dd9e4d9824ed389340b0e6e18c6a2037b898c11711e418a2029b8eaddb618916d2249058484eaf5e4d3f1d9565fa1c458c1e21217919351d20989b7f7a41b33988a51e7696702373bde35190ab8566a7a715709ccfc23235a49fc92cc9519083080a401896bc5c799886ccf9e573c7040e63f7af9c49d893989762dc51f7e79d593c3e67d1982119e60fd4f99c2b0704cbf2fe836615efdf036aacb6989c812e8322608ace6d3bfbb066b2b85717ee50e4a8cd3fb88e3fc0eefff0e328a927df8fa3eea915a473c6fe73ae5d9e9e4490646fab0c171c8fdf603e758b89849f5884a92fee2fa38f22d61e0f11f928d06b502ee2120d27a9e4610f85d44197b1406a1b6c7fa3d457b9424f1ffbf11d5b8ab2cdb87821175376f95a66e9da4927404ae0ed84f99e953049ee24440de6ad9591337667dc54563d310761f0dc01c8ff2be2fa26ba680f32f3e36713d6e98e33f64a6306c4467ae310febe12cd295b261508db8c6d9c8e6549163091d38fc60ce8f9c97e6356860d9f28c5763728a95c103ad7e09aa1da71526fc7e58c401cc96f28eef641ea4465e56bbe45a1667a4a25603747c9dfbbff17d7733989655a1293bf1b97e46c7a93eab0f0a6944b95975b6344eb83bef9b79e347db25364468e5da79889d642f13fb6e0a4c2973fc4ecbb2943f44fa65b40f1702d7a71a7a9e6d4c6adf39fd6711052e122c032aacdf14b9b7f8ab6ffab431871cbb96b944ac20105a2fdc58ec2aec59db2c9edf4794d15a13fd33f31af6719219f96ca95f3c8ea4cbed1d2d4abc217fa9c05518590a92124cafa72a43055fe66f13a14116aa399844b944e0ff5f450e2279be5c5daac750a6925d7c0f5b4cf2a08cdd47078f916938f71bfa668eb793c9cb4311d1fff1b3d647df7eec82d92542d768f19e5736763d38eaf03cc509af04377bef326491ba3032959946f6851cca85dcf7679b896db5e13a58de9cab9e5640d13b0b8337b268e51851cb30c137ac1ab1beefc71abe27a292aac8702e005479db9bd9d6545ad4c1f04ec5cc1e146c088fce93545ac626df8c5c86d9f1637345036809d86811f86b95d6e3231c218ec1bf9cfeddda34280a7fe49644a6463724e14637f3e356684471808fd02bed88e8d9a09ece0976afb5e5d9834abd0714abedacd0d376b698ef2be2484dcdd6eee0567fdfaf791c126476b1ba569654a04c811260d162a10ece1d629906828c254ace914dfca98314887af3b7e2d28d4e89640d548867b43e53ee87fe94da6bc08aaa7b66200b4a2ab49b160899e23f83d4def44862d64eac22e7c8e57345f455126294c4d41edfa95b3faf38c655d9f4d18a7da8fb3f0edccdb1bbda2c55c437948f83c66374c224fed115a5029deaf5e1deeff2ac12434486d4c7691a7a4a0c63a9bf07688d80221207eff9d93af12b9844f1b21ff0aa8810c9821ed833f4281219ace44dc9a825274ca483b4bd7aea6764f963a14a92fbede86247e003613f1287e409adc988b2c107c9ff1f85e6d6c1b78d93ea909b2460e9ee80cc790f96074cead3e2fdc03f51d1c6b88424d35559a514af465331a62c268d55f7f55de1430127df97e6ed4f6c23314c9d3abf0a71b625226f12e4d5a236d543ed18ea95682d317937154e47728480279508085abc8345a9af40235765834cb736542426e9297e5d4af981dc076e39c6364d4dca9c74ec81917b8b9fe8945a3c4e27991a489e94e84e1426518d58c4c4eb5b0dde94038056b0257c039e02945faf13b7d408f4eba6aae58a6c96dcc7a01eb1b70b25c7b7a585ce73470826717dd3991f089cb50914fbfe4c719652a8c45af1e7d4e429e8ea8cd71fceb9a8783346382d2c866763cfbbbedb051e62febe2a9c0ec031c29a822fffb00f24e12f0c916170946884821364b7c49b81761ffa08009a51a0fa53290979028cdc68fc662fb577e48574fa9c817987a98214b3047dc0190da459993b840355cc32b866cc8b94a1919fe123c78c6492b372b72e79e67b1968de68d3362a0f4841da57f4cc3f9f8c300a31a430f019744df5e608a6ec6209d7919097a585fd488245b03cd1a636a62446fed24566f8badd6e29c837fa4568ee80796d06126de501d769957979ea7df2e89154912b92c4e64deae3899a75c5220d8bb9d449d18c4531dca520053b72306191a180e86830fd37a1f13847739cf6ab30149ca6b8ccd0d791d261e29a315144982fb117f96d969e0757a07bdf5ef0dc0ef3cbb38425192b21a3cb9c9729c9f3fd759e24c6f9270353bd7ec21999953290ddedfae40392bef49fa99da2ca2f123a09a4a9416242ea4f691f94a2cb58213e398fd73906e205833c98505da0e501e662511ff9175ec523010f7e1b62ae3a8fad0df2f3ad7b9175f1246f282c80558b064ff37ea6ff16a70bcad8d40e2be10d9ef4b8b445b3e51553ba4482fb757f806bedbe129f987123ffde5f7d0c45b73085e0a2eb8e4f6319eae67b0e6c59026f09b6fa854faf472243b65c771b801f81084e4c29d592adcc1d157d1b1d9f70cf7638131755c81b4a7def6a428a6f9c778c8a0ecfca1227d460e3c5497dbd3cfa27fda27930676fd504e6036ff768c09c8940856dca6263ab6ccdde0a1b46d9a7a554230b7e01b78a8f36b26fd10ffe6894fe2a8454f7e3b9872031ed54a0d93064e81f4e8d2b74a3636df1c2a5d9d854260f789408471a9746a76b53d86fae2ced25e1d2ec4949e827d83bf8f43ad0f7b310fa2d32d48acd31bfe4ee1507eb05a4aa250919ef89a153120b833ab76abbc29f29b09334c6b3bed6391c791df25331c15371a482c6676bb7eae1f7e41828eb0671be77cc20f37486c25f92f6668e0b27f7ad0aa782b2d81654a59a256bc782e37ca77f1f5bf4c94e3b37f145ba2e973a8c1bcad2311c3ed9d34eb01fd80030b2a52c07a2ca404398ee25f2606fad7c658b3e437773fbf66ed13dc827ef6b5b00858ca00aee6e69f355ba34fae99301556f85231badea9531f90350c2047198399879e69c4ac7a2fa2c653769da67fc76b390e8435150a1ef952fd892d9bb4eda584439fb61e494f9cca7583194a49445f1e1e16300d692e44023ce0eb191057f3fac188cc66da68ea0f135d6bad18f3fa4e8cd1f3ed4eebc747fbf9a3eab4274c8f210e4ea9b5e3553e34eedbf6733e0372609cc5de41bd4cca41bc9c3528c778eb6a1883126326a5ffe11db04ee38c4431a05ef008cb0c993216112023f59d3fb7a48db4c66b9ba2f921d234dcef4683345601ba927340782882e075dca213699bd75729f055a913d5fcf5adc91fd28922896c6ca5c2c1ae548e11e487b78fbd3e0c5d2ab6aab7c23a7a6f643cfb991ea442874d683ff8065d418cb54dbc7b04494b87ff40f12f75d1a426a15e0c030962883aa704724b47eca43930553a3e06639abdefb7b278f5428103ac56d9791403636dc0a0e32338a8bd009dc8b9408b3503e7434376fa0a3419eecc4dea610530db08e2651be9a33a96ca43cdbfe95b678ded440bc31d7b4f75d04a6bc824a590f9f3537ba1034e49377d6b8dd6a13da040b737382449123c9c8f6ed7fa2bbcccc4175b09fddb017ea6035d2f85d0fb88252e67f11ee695a3961580ba08dd128b455a4437b8d78681ed4261dc55de5bc843381b5f3b5ccd2b6c48c83b7ba16e7682a5542f5961a4f91424bfbccc332608a3be9aaa0213827d25128e83dae19a3485e1d51668e0228e2190bef6743723ef4ba92df9fb747c41c95a19b9ad045c6e56f40d176dbcc9e91e6da7b3d5531c2645df1c74afe5821e6108b2067d727dccfbc84557f15c61b212a5c21a75edd755994aaf45a5cf5ebcf403a192d092c5f57e43c4017c2ab290061f5754de6f1e234dd12e91659bd6c48a352e8431cefb92e64fd43b948d832c01c3ae88983fb7386b5be08378afb3de2b85a105258de94a3cd3bb2dc3ed9d2e0b790fdf29c76a3dfad20e406575bcb1e0db413c363855c687b6c20190b3c93d2c29c1811b6d01da031d00f3b453bbe6b01f5752eb3508aecfe231dc8345cd016dbb0d95f69b42b68d24fec2eeb37624a439 +MD = fa34f8e2dd9fdd9e8d3337ccb4f4179098a55f574a08c4335f59b19dd1749b65 + +Len = 71512 +Msg = b59c44642e02dd71ba8329649cea1389c3f5b2ae93092879e823caff58128191b9e46fd9e39ed627b730360561a7b611d9a5c50cb00e012e090558bce6176ddda5b53daacae80284fe4058aa580e9e0adcd29f5841f7715ef8be9e93697982ee80f9f4fc68492931969dd47c0a85921dd16686bbcf2b40b1bb38e4aa6b9f886d5297ddfa472a12d5872df5a2fe755cf2c248c35de11236d15c59722973f34701237740c9eef18619dada0244bc47c230b6609e65ff141b63e20b8f390adc8653fc816594e5084da5968a428ccd618d80b6965efbb199b61256358402b6c20f0be49d9381b5d52f20c327fea0b82d8589c9d24d498009d083bfbf9aab020da8d0e4b314b8e5c2f4326a987fa8051171f4f7fcb174f3cc31612590165c73261a4a03ab2e62fd35638492c50acd3d771a6848fcd3a7934aa1529192433f93732c22496d2aa7859845be4396ea36e7c6498ec5bafb08e6ece8fe09ac6879e95da800bee150ae0652628885f3650d8b66c40e751f71bf7618cd0f98c6cc35fd4d548b6bf0e7a008cb828861c4c577b1bf538f61117cf5cb371a2a43c9b89958a9fa6c578039a4116b6d69def1509ee239c0b98f7965d26bb295f9149b74cd81da604b8a7a8ce3ab9aead105624faaa53cd2350940757de0ef0724122548fa00494fce0dc729855dc0c369dd0009c3833050abd74cf11fb2583753454f7c485e5d8ea0e74d58b1af45bed86eb1c80f037d03c2ff8724df6754ef2db60257de227de76720f6608f2a91a4c6c05ed2b9ad8bb3238bd855e6894af55a6c2422e5d41320ccc1a98b48550c3cdddcf071e709c227768226cb5ba0a412836f9e2684fd860276d14e1f04b91f50c2c94deac2a08b2962ed5bcf6732c90e50c859a8e4243e550e58cc65eadc30a6208f5f8871f94c7f8fd35ea932c921b1687e3cf32cd1a3e13b5f0da52348a9089d370c921c9c6ef2a63c17a1e3ec14c374992e4e858c1d6da6ecf827d685f03ce1c73e4fed125a4a4f316effa3240a0b1b22190017de14c3f60a75322c196f0a954adc080ae2774f31b84b0a99f76b520620e452094ef0a9d4be6c0f4d8e8c3c61c5ce069b942cc9f5dc960beeef9f60dc9b778c846519e8e812c507606cb198ec42fc8ec9b1e37f42a2374ac9940efd469cbaf6afa9f748d90d68608e3945e8dfc84eebbbc0033ac114160f536d21f1ec2995d7b3a4f29050b73e62fe7fb0f2e160ac639b49f4c21a391ca2b3023e03754df079b7de738af4192d57d9c5597f9b11fe408ed41ddff4192f4a12dbcffd8a0db322e4dee0fc6e3a1e854694aa56b5e32cc8beeae859f7bd385198813aa5d273c61b622ca3af6523fa356e730a41d6de1e445312bcf7cc2c20fd6c7be9c4f68611ac5850226b82daa7b078eae106a60bbcfb75d501821b6ecd97b75142219d4e7c1ceed2c7f76d690f3b8d81986ecf71ef374aba20c38b8c2966a08caf8670d4f0b54e3bf91dcdd71821d5c19541f6189d3efd497f7fc58d1bb450b396b9161f53bd9d131fa34a2daca877314147c609af5ab40a878171798ac7ef4e618338378f7d06e0a3528d72b21a9c5a0447e44b0ed09786a090365960e9a4e577ac7e258a3daf2cecf23eae12bd6bc2470bfbe6a0ebd0443373bc34845f970140fc8ff02e45c07e624b05eab4da0df37059b1e34ff284cca6f3ac12de74f129243b14a061dc625f6d24882d80b8a975e9faae49022cdea763d8aefb566fdae68b30b43e0d4bbc567547727f5ea168ce18b69b20a1e2035cd0ea69f8d49779bfdda418d119dbf8ebe27a69e836db728867542071135d1e7357f086104036f73c825fe8616dd13ba61c861571f0afee2a3d9ee44342e255755fb4ac4c82927be5e329cbf7f178b0108b3320217465043d015a909e15bcd0e94ffc84b282f32e4366ca69998d177cb098482f01aa45de481d51cb8a7431b8579191b64d29a338dd74096b5229f5ca0ea98fed177a97a1d3f84b3e10478b35478c3be9225de9c03b76af7927ad5bc0b328ceff6dcda27867fa10913776106e42a8c1c53b070ceee6d2843a22019186267bce100b89af898b8b676b08ea098ccf4dedf49f1055eb65f250574a0ddf45ef0c57c6f79806fcc71319748989bdb677e3851b565e0cdf403cdb77a7ba8d25974131c93be0effaa3faef55c43c7615c1d252e569db79f2001aed4342eee24da58423c2df4bb2aba8a8aeb6c1ec7ad135831cf7df6de34a2cf34d63229227e6a13cf659e9c096365d86213e877f13115b5cabfcc0fe94124c2ec47e4f8fa51714d072356326e4c34afa0f961edf86fdbcc6c69a1475d270e9351a3cd2cba10985aa5fff5467e57cf86d3f668ef21ebfdf2a3779e4bae68c8a6f1747b23066e37c31855ec56ade87ee487a55dfa2227c4ceec44237b5188fb7448244f7a53bce81cdacfbbd171a0cb4f1880b1ad5d95f8c7c369d164eafa1f81c25deaa1167f21de69b7d4456e034d3d2313147758c8d263a5431886df5e9d65fc6bbd25e3376d7e41b8d620f7726d2513d6f6c698431a292e8a795fa3090d8752e837773e7833830f4d3202a280b39d8736c9399067189ebb8a645dda9bd87c725dfa138cb40c730eef6858f3b0b91ce9cd1c3ed5d7562ac8ed7a1fea89969bb7377599526d60c4dd09f9a27f84d619b8045054dd066b53f30e2b045744c08badff2a672426c8fef647566d8a6fa31a6e77160a1a66c0b0b666e7b9b57fdec2d32f891b7652bd97f7021f18b8f398a5999fcdcd128aeea78fa2308e697d59b7a3433214cd83b7163bd4a4329f933f21b5d8f81c59e55ddeeb2ab61107dfb9f0bad485e19e3c3df05139965982d10f355fdd25866508869d558ab8eff5197804665e25007cdebaccc3ab65ec273f7156d3f6c689a85701895b2ce959d5bd3c49524a700fce0dd5f1ff948368d1210dfccec06b94a8635719689b980d0e2d5f55fb13f75e162be806819f7f5e35484d9dacc47545f9cfefc41a417578230c59a0bd553b79f9cb9970e636da4ab7f7b8bffa6d840bf0df342fccd8e209a8bcc3c03588bcf1cd6f32d799c4f4bcddc1c7ea443608554213eca30cac6e5003c1262ae028ec4425897c9108f48f030b390392f6c882c0422041c466469ad9c8bbe94749a059ef869cbf43d03fe9dbe4cff440ae7f83cb95670c1a4631c8156bff85bbdea97662552b73568bf19595eee90289b7c57bd5a07a740b48f89681622ea3df1b8ed23b35c8514f78c422df8e36b6c4cf54eb8cf7bd421ddb0586ac4fab9c478cdaedd89cc5a195332211f7571b9988419843300fa1ded868d318f48909078bbf1839c8fed61cde4795d3abbe1a235aaafa239d5ceaa2b19efbae08a2c95e020eb1469ad06bfb712299e83b37b4dca28804fcf363ea463fd9e9e647216f0841085084bcb5e9f6046098e044586e3df655434ff0b91331e9a628323e995caecf485084bd13e274ee6e2d3c45a4c8bfcc9f2f8d03c107ee258031226d5f24ba132b4bb70a7ee7f0b5c7c15cbd8136eaabc24444bb103ae3a9f48f27420769a2a34dacac236b6d01f0e9ffd22a924b370a6b0c07652b2eaabd7facb15b066e00f60bfdc4964de4210661332d0b3c783d7ef5f135b08645bbf68e147126f0d44d9202a9a0e1aadfc68ca9f5ddde0430666fff9e602b96229fdbac50c7243b2ef0fdbe5ab18416c27aea40d265216e263a53f46e0714ef57bed356ec23d169c0839f8b6b96fbf64ea6b5b2334363feac31c150eaab2b063791842a4127ccf14b8dfe166691c7eda6e2657aa309142a44d54ea18ebcdc5f44d05472ea4365662278afdbd65266419da670069c16b07582ad4272d4cc877f21c3caed51f7393ce7cc1b48255955b6857b7be2a90cd764e8124321575adada31146dd612b3b6ea0e00d6e7fe0724a0e0d9cf9b345be77cd7bcd75980d844f5151aa3e9a7197cf1f7af5937aafc4185423a019cd8747f21e4056567dbd53444207f03747998e9e9473018b3c6a93af82c24b8640fe6fcf8af7473f8e2c2476be59a132324b29c347f2b9bf8db8e7f6e01124a8d4533ef657c929979102fecc0f6f4496212e6f268020a6953441c9d5b539b3e8512ebc4fcddd82c64fe9ea2e7c7261cbddea68af87244f76fbae40344b6180ac7e36f2c3365cdd349087ee844c8a81392e281c47a3273ccba8a755fbe8b2145d2414e738d86dbf491c8415b6c8de2b48db9094d41e51f6fa04d30f12d554f6640b70a397fd39b26dba8964ad3897e760aec9d73f3ec9046dd7db76625a6eae27fbf02fc9ebe73d08343ee54fe4dc3de96d7ced714cb8ee8ae96692d1be28c510bc3f92b5eaa0e982504a9f8513d6b64be150df518f453dbb011d6c484babc2861503d442448c3c43d7569a380eadd9eed2eeb4c651997867e9a80bb0471f2df0d0e5fe5a3fd2c0b39009df4e1e882e3a08fd74bad8db27f567ae77effbac8fb8b38c17e4259bfd3a450c75b1898f3e984a2627146e34d3cf44d7b9efaf786e4587a127c73c0e7a41bc06644797ec906e6111d6bc59cc035c47cdd896abae55ff13cb37edcd54bf2ebea0b5fa92c4ad2516658999e1ca3f043a35dcce3674c94e21b34d3d1f94546b13826fb0c0421b262fca469550570f2fe3bace7e99f2549a7700749f7cf7c25e83539a536b8b64d874ea1797ec9afc450c02b58e1d527d4bde5bb1fb2aa59071d6bb3fcad9ca0fa2af6a0388ffbc8dae7bb599e507b9ccc91e6c0e3972c5460bd36464fd5225a5eea6f5124ecfe44bd3f97c826da251ca7dffda92429c7f6c9344f314d420c4ad2322314dd2a53bbc1a4dff790d3542fecd494e45fcf0fd8b73ef1354378ad0afa8ebc6bbfcc8e96aec41e585ad07b4f122c36f3050b6642a129c6a2e0ed77134e7c95d65b58215ddb29bd6af3561ce29e537e65a2635dfd2d815a0a94150cec347849e51e319e79bd2247cfe8e8bb8307c6b5acc67b6930a2d215ecdb83d10e430e330896fd6882eb6a47c7a9ecd9b8e5127748cf981ab5a79874ca35ce65e1f0ab0bc154201201ec4e3812b4e6f9fc9ca35dca4c6de4d4a241011321392e1fd3eb1e9fb43e2d6f166a8311a87b8eb6b515c391bb515a26396845583c68ac10532af604559c0d33103bc344e2ff2a8fc4d6333faad6dd12c38abc29c5e1725c04f71c8fb6ee53f6502e833cf2f63fd0226137348982f022e704cfe87c17f35b4fdc1ca2369974116cdf2d6a6705313074334a10d5da45fefa731b14cd90a1b6ba5650ec7311f01cbcba2c4dad90c11920e8e6552e4110df9462084f18c02fc6dad263beeb0c5a80c64c2a67351d5202ceee8651e15c137d4b3e21e80c4ad03407fccf9a1cdd05e620018237ac2f5685b4b0b4c79d8fb0306583f29006855556e811ff2e7708a4a53076ee4f613b510aa8ec0c06b150699199cfe4a7a60401d7f1de7cbc881399569e18a90ef2c5d419e1dcd69fdb42b2295e6e92bf594b681f9baeb2f4ce926662cf734d06df53522c161faf1369db2c600a0c67479ec01a966bff4c47c8e99e623af364c795684dc9ac211fd1fb8e3ace4315ecd0f5068be4d96ca325f59d93dd67257ab1a379496b1a9d838beee05fdc80179dcbda832e837a63522fd323092cda95e965980ab798f7c19471d2562e03578df4c8ddca84eab57fd3c5f02e40d91ba14b43c1912adbba49ad54446407eb2fe57c387d412193111e9278caf3ed8a90f41aeceea1159bd8a2488393ae8ffc7fbaae9b278b870513cc28c8c2386189d0ead2b14dbefa51e957e0806e7a28afcd7a06816b1e17c94405012684404f8f6211fd418d5f6ba652c72feb337b647dafa01e5bb65d66581865b6227fc009e3baf6051e1be6cc01ab9c61246116b5fe8cc950baa7de052a174ab23d132c132f420394977809adec6a343ebc95c0afaaeb6247feae2456b7a7307fe6fce90dda9db6f64e301c83df052b1324302db3fb51e75ec837a4dda96ec399b08b7b5c6e34acd4b2c2b3e05202ed88ebdea2657846d51f87e2f42c47d4507a1a4d7781729d41aa65ae4435dde9f7fa83efc336aa40c804be2e86a54b5e83ab94b1520f504e11d1c7616206db30d7027ce20499f9b61ca8eb78d0fafc83b9a8a0659f78afbd99f5686a81e5e26e071b4753eb21ef3d6f769050577003ea8eebddc8b43fe962568fc95828358c0804bf73c3eb41033d2ce83d53aea6d9d9500f9d6944d795d2b40b5a88c97820755c6972a08989de4bd18852e13b21e6f6c96e7fb5a5d22d954ef29c9aea40585c8a93d4885a6ec8dfe9d161978163c3b94792e53c6bb2191083c01ffd0f009c23fbe909d9b2526b6ff25df9d515def8a757177e6c0ae9f0db0f1e553dac4b54523cb3931335f72e8277888c286d05ee377456abd317fc4d6b2d47ccbb4683196dd99df0c369af9a9de5db89000b7b2ce02bfaedfff77b77378ae6f724624a63dd3f02b378a1fe2848c9e1710a55a12d37ea5ec5414dca16c6846654d79403cc26f97c5b9193656fe99014e495e00a77b53c0cb2556f6a94aec66076633031aae1858549ac9267da16e4f054314f2994de9d8f459af0ff8946bd4fdc45db7698935f980e284397ef4714fe307ad790fd2a9b50ef8066db5d24d59ee6fe0a250d93043f39a31b5827f0bcb919c13db3190f91ec20b4259098df9bd8370a20cf82870fe52cab8e3b0cba489b70a2c60281142dcb8984d1b1c4bd9c863ce8d3f88fd5df24878010b315fa553fc5ae2521cddedb897aa0efb159754423691888229e15fe67baef3752cc374ef08931bf7347a607708466d411cf6d2f2a6c27a1c035bdea493737868ca807b2584bdc199997205e4b27652345bf2bba159674d563df342f239d0772e331d21bf18e1bb7e734d43c63e41a51df7127817f78be8780031f39915cbd90d8e22cd836b06f1eee99181e453b04e441bde6f1c293333ca739e5a61ce6f844e0318e93b26344b3323c829079ac936f1eddf097897691693bfc1dd110cc16138bc86dcadf073b1944a79a2f7ba96436c959caef2e834791d0b22e57379cb5815def40ea272cc0b58862d547c5c1f5efc3c9ec754c49d44ae804adb4dbb94522b94eae7e1544641c8fe6ba75e286b70eb0a6bba64d5aa5f8f46c025687a2435c404f1cf343dea3b2cdbbb0364c5825f7f268df1ebc065b208840c2d8c5f84eb2656902e61d5bfe2cc44a5d058dc6c1501b98cd2b030d6266062b7598011bb5a99b3506c31c5cd1cef62b27600143178b8eaeec77dcb04a1e10948130e39d16c6743b8f16cb51cd2de5d695d2416da72eee23d371839f70cd1a147c2fc7fcf07d62d5025da4cb5ede25c53ed8e8a6feae9c8008a4a23b75079513dcd138abc15309aa07142339f534187f68f0516f6c7f3c5c027db314d532142b19e1b03a07dbbb1313b6e12e2ee4307dca9506579f352010478930ac0ff119c2b9cdc918327c09b8aec249087a432048da5381dff554ea354e43a57183b9086332f1edd6efb867f33ed2d55945f54a590e985e791d531d438d397bf5deee72852bfa88f68e15786b5a5510a1406f3136cdfff6a365b41bb39ad73eb98025fab0fb4434e7ac179d7977b57570c815576aced6d4ff6cfc881dedb9682d15e3e37f377b7c2ab83359c61d909e386b8c2f5d57d993dd9190c4db0c3c82d0eeaccf3856ecc94030fd3fa9c262d57899384b871f649dde822564836ced194598e53084d02496c8a4d9b1bcfc98c5a1efae2e807c046d72ad0ed99f864785eb932199ed39bf8f14926d527822cee954cd523ad204358d2a80c1b6a7eee863437be67dba0a29fcc4780c8453db61baf1b0c902e43e6467668bf26e051d2c4bdd91a85ea3b7d07a58c45bd9e89cfda5193877194f814da6c74cf5725f87af7a2a92fbbf12c96f822215bfc5aeddff423bd2e0e06c832da5cd426f661fb4cea8aafe35119fc543aee0daccda0f24e32cca0eaaead39a90fed8eaa4bbbe3b2641ef21f8e89321e94af581e78981e855af544a19ab1d5e141c8ac459d5c36132c067accbc6a565ecf0e0b9b446cfcea3445b23c1b392442389535de366c7fd70be94fd021e3f07bb3b22d0a7b4111e68a65f1a4776dad35bbfb325c5c124365c96f7a15051d89dd0844c6526342e7e222fc09bff676f82094a2aaa958760c272e410281b23fa8ec966bdf5d44940544c5b30377e27c8d6c8933a5ac72c161840107effe6f72d61025d07e126862f3753b32e6b381a6f58263562c4df11bcbe40c68497383de9ab17c1aae5916d23ade4c20ba5b1d1db7c8e9b245741fabd1af150d19c737aa7c3764f2741a950c61e6c0268856fc095ba8e5f0fb09429afb4ee59e67e4d3ff040aa500da3d2e39f0f45eeb578e669169891db753f4a30fd12744c239b19f04bb9207ebe7ab29816f72ef182feaa5dd6ad35bb0571d8a33dca3fa219916e2e22837525ca34ace0b67c73b5418520016e6ed65830e6d3e2ea32ace648efbe6c0d4624dfa17036400605b0a481baebe64634103d780ca0927ae2589332048f1c74579c16e4abf3587e096249b3fe628ee6b36ff54b61d314686faf33558e54c1e05e6765f446487c971e051f68de386dd853420a3b74fffb5b213d4133dbb3fef9c0f34760edba3ee9aa158010b8b20583aa32d6c8b46bb99bad6f475d8b0115f905ec35baf0dd11de4410263c3c73d8810ecef563becad1d27ad1b012fad0c986b39eab52fe1597ed52817c5bd80269591752e0ace281d6680ff10624d9b76c2b40a722c973e823af7be5fce009c24a645a7b1304ce1529f4d349c3e37609804f4382469ee0e9579d26ca12794057de3b3ea426fbe0195ee17b4873ef7e6ba87b22bc6143c38da62ec98a77781a1797563a7a76f2b6f2e7b64e6990993132473764b20d58aa4991ecfac3767cf5a6284dd44a9d99b13656fbf34994816d11defc900fc52df3a1ad4030e1a9f87167e37aa2b105516d581f2ad0551a28507ee2331b2203643e2a4ad0e2818c6b1bf17b751c2a48aa59dcc2bb8c287c0ea9de03838c95527be8481d17a60f884533c732c5a732d214f538c4367d104494c7a395666ad63cd5908f767cf2084837775dabd4ea572c11ddf0a62429b90e6b48841a442c612d21b564f9893cf826824529692b3bf3c1315298eaed288f23f29ae424b547d2adb0d56d18b50d4bbde63bbeed4142b53bf421a60529e01f4fbb3d482732438729335f1c4698d99f78b3b9829abf6507f6ca998c7742f6c5cc25ae24a423b60b39f9d0d7259d385fd17b4d1903ee39688c2548c0d3d0b32f33e27c1e2e3205eb5aa4d932184a900972bd64e6bb66265356b4adf78d4bcbc81152157927c5b98405a4b6c1a1197728b6faaf8023afc254f0c93775161ca71ceef518da23675781c57a17ea5292543a28a37b59cf3373e9e50383edf0ebbb8a175bd4c5938f565104a57b309f4dcdca425856e82099e19eadc401b6c0119fbc44e6f7a01ab63c7e6db73f2909943a359e79d0cfda3b61cfb5bb3f53e626ba1fd236f00e0b6480564b1ff228041e3018979867553e909b0997399b69e5a3a12159cc3c73e822a895375022d2213425ffb824893cc041e3e8bccfb45d4110db5d46075b6653694ba7ace85fabe38ea2378abec4cb21c7d2c9a0fe08a28ae6cf401188db49cfb0b00a3658f719cd763b7c89c798a4b58afe38ee4516de259df36666b11ab2af919c394e1287a03193381b3fcf734e1e13bcc2ff255d6493cefe4c9020b825857456b16ec58fd3d26e4eb01736f32badfa94e44e2f4ada67c2364f38482216e3e1760f12b28e29025fe5b79abe86c1e7982d0975b36da4144041fac9a7f70b4d5180bed489f11453e073be4496ac957d74cbcee06244562ba197dbbec09567145cfd2d2ebc673a39b89f20af8fd34ac229279128bc5d75106eae7ea2128beefb5c51e67bba3eef4610be8b35eaa926482d96fcb9122765551ffc3ffe2e48d744e80587561416b7ebb1685a72378ccc81eab06e0c0410bb8c3e17ac3d646ac49378ae6c484a5d38bcf3131adf070ca201f8fa61bc22c7fc0831775fea65503b6996b321ccdd90c61c5e4548f6d9874b4ac0eb7423cebb8b6ba291b78f91a7a029ca9a245e4e40048c6b7561341fab2cbeeafa11ed984a0e28fa0d3f8789bfa7767cea00670ce958afa339f02149e6dae0dfacc773e011e8b2b020748cbe2695b236293291a9fb56e88df9723908a8ba63077a115166919fab5da1e2e99f7b1f7f7ebe3748960473b9843a7405bc8f6f97faf86bf07c57b7856ad80738ae0b8930cf3f7b06519333a54e8351f1d6094ef2329e43fb91c2b4b360594df47a768778a0139a558d061b3e255ab897f584fd2446d245bd67611bb7c69c4397854a7ea989e101a088fb9ed6a126f4628ba0ee80904acdc03dc15125162784bc5ed5f355e50e4d81d5d223215a8eb1ec28eb97b9b75e689ea541f96dc7716dbd47c77a105a21ea8404387c80a9e85d9f2da37d12248382c33e91791463007b25008d774b51924501947cdf8727ca73e62a87232c5060c8b86a0e549b615b398df9a67f6953f5f984f74dd0a75cbb817baff51e8ac36c9708983710755af825429390f71ce9b374a8bcf9f463a12202aa1e8bc3a0060d7a1e799a3124a85ddb0d7edb72b87b5152c7462fbf4ead94640c0699b6fe90c9ee646ea64b4be1f2a7291be476de9165f08b334da5baca99420bf8dd6d08ec386094f7f9a33d906d263feb5a77f1c457fa4ef4d22c4a9087194455956a5180cf7d0a95f2fd8c2c13e4bc7d9bfa947cadbc8d1b6bd7709814562fad70136ae705905fc9209eba2d8d5f294337733932edd3e007691bcf3997953880ec0ca7976146ef22112b4a0d4fe1f0cc9b86427f8ebcd259588db8fda732f94067caaa1a690d43113307ae53c239cd7a568862cb06f3ce81c891b06cb9cbec9c81b1f4d8835fe61704d879998ab2f9ecf71dfc9dfd054f0127bc680f45cc7cc5b876fa5a56cb62b415021e271fea1094db9b8270c76dde67f482224de1c1448c7a6e2d2849bc2378d2191eb4d84b9bf292a586dbfc99f716bd7781b10426be31562c2fcad2ceb2c5ca81fdab7a541696bab09c48031613adf100f8d123895454ca1554aa985f9b2b6cd12d834c9ffae19231154d816ede9e2db31a16d645a17744de5e5ff10b473a478b40c4e58bd373d7cb9444ee009257d20247fa8308101964db8f53733e4142d914b9f8cba41abde9d49bd6bf77e96b7c731504b03d4aab88916a1da5850405a0020b8765753b3056e09e6b5c313e598b8a03cdf4419bbe5e949116fe6c19d32ad7b809597bdf7b9d740e8b6ad92ba28dcb96aeb5d19db2255986e7e45ffd3bd80a31f70e3461e02c038eaf61bc1bc7019c403f7b59cb379b54ae08fdcd28b0362e2bc90a1b5d1e8113715fc766a947758082e8bb46aebf1f1a88e2b15026d0d397e7f7b3bd3b774b28690502753ea4582ce1430c24a2a92f1faa1d9575620e2efc091bb176879ad8b6d847a944565e37d5edc6d470518659e8840220b974d8a6af01ad89f3cbe9c853319022707ad583300afcbab635e71de99948d978d9b0e9456415839162f478622767147636bac8afcb5d1562ca4bf9a76c5a26400b375533a2fc54fbf73b87780c44f5b1f47e86c991507b1289155bb68fae9dab83cc791e30ca6480033f741962a22cd04e813c020f8f5221fce3d27b55beb617cdf0c359aff848c9f170acaacd17404daf7356ed9852412d8037fc8a5112f6216444d27a730e68364c6fbfc0ae1cc68691b575d0ce51bea1cd7218482443d434c12924f52c8549519e9d2bef781b36178fd7f77013f6210b3f22d45921b9e6ee7f1e195e3ef562a842795f7bdd9b057d144b8a300bc82ee65fdaaf21fbfd949af8b44e1a1cc75aa6f294e91a2124bb23a9907c9508402eafaa0a1736f58763e6b85c21bd588387da0970473ef540cda7ca476d23abe6a6e398219b0ca0dfeb4e58a632bc74a280bdf18c085ebc67c385f0c0ca4069343e1eb4c1a907a06f813e34030f9bf3bcbbcf65489afe0912232aa7ad128fc2a13abd8a5adfec66cecc22e4f306d0583acf9abf467d914dc86312795ce4663ac6534c836d8dff567622b8e606c70e0495028c8a062ebd0d0319e9c060ae78540bee383a7a51c501ee3b5ca1beae89ab541b313ff83cd5c95aadfd2748df1a80fa822d09f1c9d1fbaf6c8ac27b4bf79f1060055bad1680052795e9188604e1540aa5979c6444aaa6224ccfa2dd2dbc6222779557854a204302781a0ea8ae414fc4dee44c5250b383ff4297dd44a26c8732c84dde21564af563bb2c941139dec6b174afa44c7c91279ee48fdc52686c90a9e8bb3a01b974bec3d58d235045fe7b492d563ea336a81379a8f42a76ee50f0f05f5a0596f211e1cb6da847064144b0046f7466070d8cba181671323282ae3abe72a6cb517ec710c2da2a7973ba36176ba196c4e86f938e02a3939e15e3d8d05ce92df5e1dde8be42a17035592f4713f76a19e5a7eb7121c1d6b7d88170655474195c1f988e1b6cd35a15f4f70efc38202f9a22f5ff99f7ce367a5c05c6c8396c99bd93161dc38efd7a88530dd7c9e68e787407331a629 +MD = 0098b5e74dc7e666755072f79c5f3db0272731724e12a162379aa195d7cce174 + +Len = 72304 +Msg = c07c42ae25bd6ab2df7f99096f4b04a1618c356a2fe90e5162d20b72fa59c7891044c2aaba6061332f1836fe2b4582db9548f83d6057c433af14cc9a3c643692fa7e2a2ef942d9708acdbe74a54a23eb870ae8cb9fd88045ab863cf81fcccc64c65303a1ab0cda503ac6b8d3a300f0b97ffb8b7cb614496fa051e2f26a3a91e8bcead36b98656dbe862cac82ee0ff02dc5436cb96bb42799d49c46f1e7558e06236c25f488f6989fb52722eb4e202c30a00910e8886022ab9090f15e5cc6caa745007ea3436765dc10dea3758adbaaa85a750173d3bf438d1c556a9f92344db168cf68e2905fdc5ddf7ab6886ce7747f39b1c6c0157a9128c012391e5148200ed5006a193986040a6a22e48cbaed929b86e2e73915381462c4f0e74160aa4aa4d4bc0dae0485e5cbf8ffb4e93d940ae68833ec449da2d5246f16fb728901d35dac2bd70aba048789d239ae08bd85e64689ca5e4b7360db570bacfd1892f5c41fa774529523aaf32a41f75a4f02672ea5cfcfc5b560192fe1dedc769a443024d40bc006b7062030988b614127d3e3e8eaa36ba7ea2c75d7ac31cced626757fb6321367ad92c0e46b9f8a0eaf9f9a11efd4dc58e529f1edd9e4ba4ead7c31552b431ff36615e1a3e77d2dcdd2b3d48d7c61507015581b948a1768df5611f0f30af8342c2b962ef1fb95f3ca32765801c2c4356895b99f1219cf8af976845f09d3c5e28a7470033f166e9e9c35339f3f41a1eddadccb06b6f761a315754fb5ea1430cd96c75028fbc68b60bc51983476775efc1f5108ed23a19243bbe8e0a0145acd37c99aa2eaa89a60ec932e009247d26fe2de98ffbcc8b6c5ef7537c3a83905ffc39b64d4e2d5f083b4b910f94333f15934712b1bf0169570f8b9e8752898b44ce394cc828bf477684ba6a10ec1bb42af637f7dfa11bdcc2811f27171cbe3c4493a4e282850948d8303e464ad985e44e6e26207f6bbfec95fadc77955ec7ad4591a201e32cb26a1688feab252319d867453c16fbe397a2b8c3e91567e14fe63012593053e763b519d4232409917e975ec1a060b9d24b0514246f89f76dfcedee5cf4f73a7cc432c75cd4365eed5d291c2b7b8623ff831d8f64965cacca76cc66b799de00b47ce809673a6b8cfd5d9788cbf4119f34e6f312cd8515edbf668b7f6d716e0d5734e0c83e7c4afb8a27e889e8348897371c8e86a5653c2415743023c5a32eca2d9320ea2ac45b145b622409cb627372d1cef7d1355d59b89447c5390657a79dfd42b2587137273d3ab754efbda75b98caa434ddc596f511048851a879b75fef91e89dfb5bff35dfedce7f23042bc671ea454f909d3897972ddedd5a66e8e029af2eeaba32440d633d4ead8ce8153f65f95a4fd4046ac8b2d7f270361515b2b120bca07c3c2d382ff2e0e614b38d4bdcbe8a3d9044540fcac96c1224cd645bf1ac39c72bc3e33dadd42b33a2abbd743e027e20aca31ff447ccf3cb0cd7fd654f1a4e68ae0d8ea444aad89b1f1acb41f38ddd000f6af3ff91a82fa4d67b09583534a28aed6254f65b3e8e277146df3a632750e6a3e0f7b91025c9a46b01b0ba0ac0de35d00c60ba5c56f6de817822e8f6987fd84f4f54a92c0a69d4b1b119153687a9713f52d878aebbb7c837f7bbd215a711e1fbfd31584e21b63a91d36df02151ac47227be5b9b9357aed7b0dd381261eaf068f33b74cdc3059e0f3aed3d433e68ebe61d0ae03e58ce7563600927b93c30051f4390e0f4000f9cec08b7448d40df8dfe4995ce19a87a50a4e191f4ac25fadc910575d29e0593f0bdeb278d46c9092b1931e16d840ef5d11ada0a3751db95d76ccd5cc202603d39f376b06006335033c57a605723f8cb67439dd45850a9bb96111fa857e79c55c92b2fe465521c5f488167a5036ff26593adc172e01f3cb6891c510adca406883ec36b2615a0e070c9ebae321ace985ed6b7d9885713f12130ed15d6f8de5b5efb6add17f9892c5f48529279d5d63701b1004a6735e563862e11e2af14ecf7148f8fea1c79516c553454d8eeed0d6b18b2f588a204fa005fc1193be5b95666738b8116b62db00d0d2e70c623c8dab0ee4d3638cb3cc85418aa61763d6eb125e6500ce7678f2baae197150e9ae1d4850cf010cf3555d6db3b3a9945f8ad63b1d77d71d0c3060aa27cfee006d6d07173ff3c33b092d8bc0242021f1fb9ee0496d1746e673b2af3a039c630434a0d37ea2f920d81464dde65c7916167f3a91a416ed5311f42766d1092ada4486700ae7428821cc5d21dc47236591eb338870b4e0a00986d7b70ed6021e5aa7ad0533b9e849ccfd2c8d0e4b418c98575ead05e293d96d2d64892eb3b723ec17f086d65c5ae32b54c9d0fd5b7d9736454ad4d894f63f89eee3c64ecfeddf977c961c7c3861ff46b97b1131dda02e709a3d237233d27b64b29b95f7926ffa63bce8eeacb5c44523158b78313b72f8503f80c25a28ef34065fd51faf64041d58c02e25ee3b4d5ccc4e412e85dbbb9edd1c5bda18da151378dfd98b01ad73f07f70b0e8ca32c2ed494ee55bb52743c71f19159335b00cbfc118ef0272d5851adfb4b560c902ec9fa0fbbf264985d21c1f1ff81438149be1e9f45fac8c440244807587b47213931bdb3f17b8ca5f2f45e4144a86a96d8c21f95a70b0d663b2156b996c0d4dcd7f0902013439c01c23e976e254101122a526f8316b37d8985c36a70aad93e399770f1b295fd0b12476b0de6f5edbf69daf99ee6398681b4cca4e3cae916dbbdd44d8309ee0a527dff04423a5b00fe3457121e3d73f6c26e8c206336f62c45e02ae0a484affe1a9b5584a4d6a91d35d82b567e075a86a81d20d06933466bf52717d4e6c1404acc00e786d65a84b4feebc4113ec251b8bb57473f564e4e7872191794ba3e4362df2521653724624ac1d5bdecc10cfdff74935bb7baf692b4352c96aaaf5a2de8dcae9fba47c2c651272c7543a535b3dd5c57caf417baa7b1c6e8317126a3644f3cd3bef098c4255a876696b06bdb17d4db2b315efd08f1e3afc26492c0b89b08885b0ba29a8703e97b0a7ebd856bae7899741b62db6005ec4841ac8a0df816a7479b123aedb9e6606a9ea9b57275cc2aefc8e5aa136e581e38fc65c15ee07b9de31a4f33d2ab4161ee79b442c378058e76902c8f65726d0bea494cd334104e7ee36f3f2819f9a9607f420aeff8e0fef5a6705cad222ac937e4bebe2a3df5e3ace0f04e81f41382ee858e3a17735efd02f7dff26de9d5d124a0c33640dd0fffba344419dc2187626e9994ae53c330a438f3458a5c1d222944b70d51c181dcd71985e11d9102d3dc53441bf41f790468fa213780f23c9e463a8fe37cf6dcdb2e6d2e4db63b1877355eed8a97f50558dfe8fa2c72cae8989c58a3fc248b4e895a07c5e09044e2e021c42e47065ee89c6d67f69aec4081afa0319b9de4e94775de8bc5402848f2bd06356ef7bbc7a34d96099f1939ed98420647cf6f4a8b581f406ba4f2eab1b85c7715280344b9b5eade406c1df83cacfe232dc7e6a1fc00e4142a0d7f5409b44ce905f2002dcfa102caaed61fb3b820427b360d7aa7b5d272ce49372bf0db671cc06a5554d353e523df9775a4d8eaa2bd931318b1a8433d29d33bdaaf4d81513ab1c4baa7e1f102ac81bcb333f44ea4adff276222401eb197c784606fc6a5f32521a79a4fb6218a2b65613743824e96b213f58222fbc2c04b1fc560e3f8b3dd6a94859cd2dc6fdc1edf374a6a0f75095875fff15a27b9f9a2504134b2602570898ed10ac7c13688f56391850de85c6d1f99c9282e707ece3bedba844179954cf0753c9c951100015d97227fa5c96f4265f3c3af26528bae765c83b817b16dd34dec0aaad12866e5a5fe4c82c81f2829ca1881eec84a5b1af0312f58bbb42993e057ddbdf293e5966ced9246fb560173ba7c867f8ac487a427e02fde93de531f564d285e7fcfd6a421097634a60aa5b0c59443c9e45d7bda8c0e07c236bc74c61e406d04ef58e49f50b66ac46ea96f816a043c667b71b21eaaff499c2acaf938b6b63e39b7ab89d87a99027e9bced9361620f2cda6bdc4f0f35857d4d6767ad7ae22fe756f5420e01d05cfebe3c76d7f689ee9780c7e2ef1f39dc4f4c06b5443632b30308cdf5466a6a11564ad3fb69dcfb292fdf34f4a823a2423848f062fdc8413760386a99eaca5ef85a17e942f41ba2071b811bdc22215afd60c88d368237f903256e34f6a52a94592face7151ebc64d284eee26006244855ee5445f87b8b415e7b3293d31c91f47c0091333a8fc62bd091acf349fc3154940a7480728fcd00928a0deff9fa0766a8f34f3779f041de4b6b45b45eab526600deb1a66a670420e57986b031e594d226306d5a9ce936658939418f69bc8e66e38f921fa9ab3888a071263e418541203fe073036921aca8d32426eb30d6ee3c8348a053f70271200a997301f1841538382be99caa41ab8e70547e2f7da278d1292f61ab1b14b8d06d1af7620b8719025c38588c25f03b01aaf0d0c516c8360b1c6c5f8ddf8a14800f1b3ac755395367f230483ba3d765e9c721a514c3ef30d3a6282262090c8e183ac5c399993fcd4d413a3f11eb9e302c100e84844ebf6d120d8b309362412d8034401a419d448f9e927fc776c7eca5b3cde0f57d7de2f5ae9abc1386b2d2f9a145b3c7252aee9f402d2767d2fd69ca6646be80671afdd09195e453a5c166fa61b74652af07e5071d5a59a88d56bea92dc2d1aeaaebbb07a1462a765756a639a9d0234446fed2cf1b613d100f9a934af18b4006aeb9c1a0c8f4b706033b3abd62da6f2551d55dfd2489fc29c0918fb398e73411dc4bbaa6ece9b28b1336c98e721b557b3a552d9b1f1cbe7b09025bee0c1fd5559a6b4c1ef76b448bee10fbb5c3dcfbd06846ebb0f360aa8c50b79f03337a4a5c51df1f12d0c39590fc917a393b6489ab43703e458a9ee9e7fe7602f8f742bcae6a70dc895f39cc21a580eb22c4fd2895339acf61cb1da2117c082cd73fbd52d14be62b8c8c1412c751a6f97945ed0015a08e460c9e27fe933135c6a8f235354f5e09b3223f9e8e0868cc4a45a57d38b3f2124a4eeb0225f684c47871faf08cb00aa11d53601d696f52b8868ecef5f8f791ef83309af73ec2df7fe93c3e37807ab6751027d7daca817733565ca79d6a6ae6ed9ab9944e727da92cc210a6513937cc4e35a78c1ddac8400462b818bcb39357d337f2bf4fe8b14994aaf61a88de6eb3f434da682ec0cb13f551a9099cfefa4d6b01e10442c9e5297f4af4822298a8d32fb4c95154a51259cccb3862837128317ba1904c6e3ca2b0b54a15c6688e6c94c75d7a30d8b1267b527a6c0bba34a469ccbe077d1c6a6f46fd515ecfa2e9425e83d9f7ee020b8edf4f034ded8970f65f26014d80947ad4532007d98318d0b2992ccd48711adcd2ef8b11e3ee374da7795012693e1e95593fe7158dcb116c45ad8ae473a3684b7b12cd4a37f70ef23e211498669e02e3877317238290d7e4820265c4826b348110afde5650f1548843be383c4987878be5557bd8c1b8b061f20085157cb0c5a6193087de36c252363fb785a51ce3f6b6fc4edadd512ce50b1b10b2806a5c64e11efc8e8af2545025b976c37be799978b52c7fbd93ad5bd098798b3ac5356595aa87bbb018b8d967c3962ba68b091b2337126a775859a8284be0251433f86ec3a3e15d8ec09576b6447e3311281b38fd5e1d4a65939627aa346b454ea37d465a96932abf2759919056c61f22161e7769a283ac02c5e17ef8fa918844b41280bceb03afebcd63be6862f44c33e5915aeaad0bfbd97fda0276f6f94a80e686a27d29b9597f134241b1019f56d116f25802c61ca64411ce56b6c1e928adbb18201dcb2ab3e3a973effcab1dab841adff344861c57ed3c6ce02ae4079f0582658e1157ee5bd3f0870dcdd7f5c6b771b8b12285a17d3f40043365c5cb1a330ced50fa586a9dba78ea2f8700be3505ac0b261f1d3282b4dd42c4d9ffba26b09b1dfd2b352605f1b32bc9dacded82d93a45a6bce55604e854971909ea4b40f8cd85f74676b731242fba711b97fa1cbc9cf6c76e56727044567fa4782df4f59604a3e3bea5848bcc5f1499cbe76a8f2a54ad1cb5e91e5143537afba7234db0f2d0f627064a149254b1c8b88e34c5469ce1c6fb2625b0247fcc07930972cc0fa9d30b55afccfdd147d85551b52880cfaed4d3072194ee665430b3ef3184e66e256b41e43db696b520333909f30b23a6baae6fb55aaf1f936b11ee8491e23358f00a3847129f75da8842e225aa8524585acedb7a13dcca481ef035d7bd13296c84406d12d0d021adba87ff595dff195109c6d4e9ffc684d10a4c287d05803ef56cae4ecbfaf110ab6182df097001692d4216ba7970d4c5ea979614c92dc1ea9023945bd6f38ac95007c40faaa314aa499e4f1aad198003d1516ea9607840c2d9239312c85d05b23807bc1fd149a1433268d063f94c60d541c22644c797954e2ce74b121489ea71cffbeb7e01e65fca744c3b34e2abefa098546d8562ee27e2f808fcc8401cb17e845ed2a8b10b78a68bb2effbfd9a94fc61a294d9c6fe8127e6e358b3df97e34ef1aaf22e532bb47de5377f27aeaaf95f2a174cb0583b39936610cf43475e0849a46aca8d8cb96ba71d3469468a5f753f4e3ce5b7bb46a9bbe21bc1252c019914f908dc34c25736c8a0542ee6f51aa1136a8e003e648369e8076eeea7d2150e377c2fa7c278678e38faf14077837ef581fb751cd2c883e2ce3284a869edfae007ba29ada5237cda9ea9a64e76ca0efae17dacac136bcabcc4ffe77ed9e435a72c1f916e5b5809b46018ed99731d2d29e86d7f3e6ec2ca4072cc21e2763957cc1b38e15a538a80a403e531b1eb116bfadd4777344361f5263e33ae63dd71d3e73b82b4023c4f9412108b0d384d2b3de656a82f3e3fddfdc6ada2f7836e122c61237963f663fb96970c66ea9d27ef3584daec01acc27b26ba47a687b1a68ee3c269a98b9769331a9b6e255440f9c1c55ed09f991069ee127982baf98f156c7c93548f9575ca6a92a7ac32d4d431477fccee4f4ff9948b337ce56ca77c492f695c9a981c01f62691344d1be6b76ce4c7677a57a0d8e0f72c4ce6182bf9a04c2c76925f89cc7adb88d9d74d047b1b1e3eb70b65363ecda64f521b69f187c9475879e2425955d71e0c00b142a88fba78382427d47a8bb90d3f34ebbe92c712a56ffee0ed151e79527d3181995d75d98756374641e84031b05e5ddda28a081aeac54e44bc4787001d6ef4cebd9dcde6a02b78ed19fa1cd6243f4567a231fb408c0b10543c6b3fd9d343b2ef2be3e860670a6192e93a4204dd4484202a34f1320da3cdb5f9faa98518be046970ca65d5407579ce2c23805c4020829dc70d8a5de411ded051604480521051c408abb6c3c11f39f55f40383af135d916f5263732b3f7dc39ef56916a140d339570126baa7d4a1aaeff1ada2f6506e0423119883ed1a84e6930283080d2e722442398e4f7b998a461880df6a8201640960741edf0e1b59dd4a06f729313309656bfa9c34a2a8d5fa386b41e4396e66298e449e8f748a25302dc8707ef599c085380cf8700249ab4fb7787a1704de9dea1549bf9909af0f68a312941142a6c00b1336490b85c434ccfd70330ccc9b30d75e4b2a07b3d1400c13aa0be9fea4317f6341370e126097f9721a13c977eb4875cf1286e15c3adfa4e7597e0e13d93b6a8ff66c809067fd5e7f40c358ee170d4ed1657c2deb3015b886e79589678e0452011a8d69e91f8d848aa8eac11a66a6e9cd0eb4f548fc0ad1581cf761e40ab7c2207845d204d170f2fd1b310ae2223cce29d3d5405be6e576c5c04d9e71977a3f54d739c2c9c4cd303e61403d2d91f6864f7d88170c35cf30359a3e49f57b755305fe14412042cdc7b742be61e5fdfd98a5d474814333ef86107373685affd2859bb67c57f191983ece86537ff1ac788c959f4286e8266e00be139306876bb65d7ec7190d24fa551dedf4a89e39e790eb85a8992ee3577326a742472864074b6417f9956aa1c52ded7b5665c6a5f56d3bdfb522821c0e278134c837d8d91ab921cc149576503a4734e07232ff1d2036070a8f84897b93b198cb6c0a1dceee281d06dfc43a1aa1cc7d8310b55289ae14d46efe684be92d3af3d6f769002bc9bfde2e23c7bde541e34dcefa99c6d1e82e2c73c976d14c25ea1bbb32fb87d8f4a6eeaaa849089b63b52e28f78464dd16ad9681ba55228ec3e897e4e269bcbdb706d5e436f021224f69a7f9ce1f339580b89b0097ae46954f5defb7d25aa7c359071942956412644d2841aa48113be26d78c1582928464b1170ac9ec9774fd024d0442e8c4ee347a51a82a12d0284aa271493f1386c2996514a55008e68bccd5e8ade0fe5569ab59e66f447459c17d7f4b596348c21f76056127244ead4f6a3505c6d4d6623419581351f045784fb4f1d835487ecf0b99069f18cd4a5630638426f7b50d85edfce96ae8a412d6538fce9a554532181760ed20f2a1787bef3767cea8f7f02ae7d4a25fabd648de5d7c4a2441e01f47b36c2d993d475588dc54445f63244aebc22f0764040d740acdf918e873bf72a870194c6a61256df778489e7bbea06a230d6a8d1a99c000e63584af797329f8e4ce06ce06f6d22e525392fa860422ea7b1a15a7d5d5849beb24ad7239b8b60e773da3270176c41323fec1dd10ebf2285e78ceec383fc191a40be205bbccfa1fca3f8cebec5981c8e6ca33ba9eceb4b047b9e4deb4310d7e8b6bb0ce62285cc9685412812a27719c15468717a234d11ec15e05d3dc61dedf1bb4a850ef435487dc0bd28b4d693a192a042a78ada6ddd045c58070034abc2fdf87273195b677d79fd74b7eb88741dcaf83ac5233ad41515f910347eb540bed4153bbc507ea4d352e46fbb01e0a0f3310356b38b6b0923e79310cafd6f66493db9ad49fb8673b2cf1cb51d3c07a18d8f6aa0590a94946d42d35eb3c68da4cb018cd102629a5d82ba4e4ec6e525ff51acd420a0eaddfe5dee6104d5213582ace838aecfcce3e9abd921439d436140a950eadd6e716fce59b2e40a1a55908954ba624c9983889f95f53e9b89a0e4eefc4254dfade9728ccb58057668acc5402c3fb4b446cdb207a8d54c5e7442d690b14bb92e43980dc11aa66b52a96cfc309a3fd6edc0f389aa4d43f49445725eaf3233c2d31ac769f4ae65bea6c4de5fdf078170ffed3c340fea05de46e478a4d2e6c216d518bdaeadef5ca878a14a13d7dcce29f3b7f2dcbee9e4b17c389cd18135bf5e3c27c403744555cfd228f843a07feea9d0055ba840b0a8163c2b260d4587f441102e2290d21816dbbb412f15c05aa9999ebec1c11ca919b490a45d7fa44427685a14207e4ed069753cd439b1c1d3c7a166cc6a4eda3afe347f8c8b5028d4217a22c306f571d514455bc95c402b540f682f169f7803cd213d11c9f6a759a0aa206e221c1cc18fdff22208e1ea84444a970184a7671ec948784f44e6adbe0e8a024819a91cc8679425997910d6560b40d5e4fecc42b3963c8c40e5a58adf8788c7b790f71d0ec3f985c705302d2811b9cbe16c54324a9cc522ed957a6544746d17c46f4c461a0cd8bbb4928b1683bd7d21ffb6885e6c42aae25c3aac66763b019c759ef1bf74abf76e680967baee79537e47c5b0efa0f2b57397bd84b7fc460cfbd4062eb1a4061e47ec530d41f1ad058abf7f140c6f14ac7ea6074a7d5efb56dfe98d4a44328717ed4756c5d214bf59ee71cdfbde600e58aa8fff46e325c4a6eebb1c8f9fa795a90a81fcd695e01818526598af8cfb4981a05c8cbf0ed808c6d0529c43eb8b979b43a32c8ab3dc200a5da2c6763fc82def081598ff29ff2e7c2eb6f3af4f64f7b642b3ce2754913ff6b83040991f50236989c00a4c5a22a091b0f00b1bf4bc1cc2afbcc9f69f85dea50b17ef5f531a91b9cb67caefc9cac5cdfd06cacf011a6e8731c3073fbd4263e0fd5fba1204aee0a57711bf30a07e05f7be031a129f0755cc71d26f4ad650386d361188f8599579f635c7d35604c7c8d99aece22ef60a395b17f0e95e1135c3145f35435b7b56c273ac90edab1f2c76393acb0a692dab82faca265dc4967b6e9f20d1d281917925e68574f575193577e045a7790c6d729872327bb3c58ea9a0d420ef1db3c4870915677bd4fd1a6a34966489195edde8e48af8f7d3a72148c07d08960c383c07d6cafbae708b495413223f78d1a9a694cc0cc4a2a6b276df38607fcf875a2081f3cbe914b266ce7a7d4e7d7c8933effeb9be3d851230b6f66f462ea1765f987dcae0d8b582d8d264dbe0c79d2946e1af146a0ca700670816cdf6bc14c190ce84c2d3709ac9277d9b93a1c4e49a28a42e43d6d91059a095c5ba3ad2305035e71d436b5aca6d9cf6a60f591d58c2215f03b0cb4bc90323848e9ed818fe0b960ed1b56f3e4d587f660db5d079028a7b3ab7c1100ad9e838fef6e1993585dbfa692781a8c32c7018f459efcd81e8da7c5ed1e06fbf48ef272b87eb45d2cda6ab20a70dde926e9faec911241add149b6ef3d974ae121fff3732c825a496df56ef5cd9c2d8531bcc8b0cbdbb7d348eb3972058e596aa6502b23c41f57d2ac2d10f45460860ad3cdff5e6e61ebf2e5c0c400ed59aef3022dfde707bc49a357e01520275483c48d8bf357f13b4a874888db0e5d8fd814b5e7e04f7fdfbc1601ccc02bceee835cdf75693fecce5ffae1a1d31cce97513a422c76bf84f00bb53a31c659a3a5213e4a18b568b99198e8418a609eb916a6fe275a25d9cfa3d50b51bd8c5c5e0ec9e34df46c85003b81b9c8c0f816b57445bae60f7200b8518472f8de8686468209e66b86f2f72912a6fa17d40e174c46ca0b0eaaefd6c78fb6a68003497a05b55da2135efd41cccd85239f420712d5f48068f1baf3ce75c4d7f097ca399a140f21b0e5dacff743a288b0cf89979bfb04154f4fbe225a6b8764fb9091fb88e9f6129d5388ff8a26583e4c3919240523fc05486932f00ce14dea221b0903a8f0109cc1dce8006cfd5522306c7f40f0c952bcceeea7f148af8ed40e878dc68ceec52cc8e2868722310fb117ca3a52e1839eb85d308b8aa00ed0bf0b76aec8a70eba4f0d14d2d85c5a0e876ce2c8ee59cb36947def6c40a587aa07b368ca8e8a08367018e45b984de0d7f1aa46b977cc18c0cd9b7bb897cbb2814aa0ce8f8c9843e03c86c19f2ba95dd2ac4a466a93aae4b3b05055ff148517ecf43e286c57744a3e10a14d0c26e139a503e7927aa688c78609170ebe3b54104390e5f6cf538093a67922e7210e77fcb584ec9b6844e829be246a266460cb442bad52ca47255fb8cfe276108c36e02f9acbd3d191d34b93d29ec40d80496d1c1bb5ef036221641200e905598c54bc4abb3527c5a5f6258e59d4bf54a0498c108a2725428efc2047e0096b32dfdc6ec69d5d72f81301f881ca62a66c22e5dab9fd9d90084c0a36b2f3a0123cc5327a3bc7a12fd947ab57169ac533e4b6a2cb80fc65b9b527cff9fba26994c7fafb5102a0acd8f9d246a3a54178c23eaa04c0fdfd3c0cd980d1fc7a72b25d74df9b95c3dedce8ca316870c654f9ebea9b806da9767cf40605a4b0c7fb06f6b3f197bae7d8cde9daf38530e25bc51b68f9aa23ec0e95199b14bca96c91f3db15bf8432f714dc46ac87218691bc66cb3a42f6865e1c30f8394c8e68c0ddf5851ab7c5906a1994a9af6ac1c44d0d6b95ff15d9f77825ccea40fb9e516d45888f2378e045d95d936d541cea9c8ca52fe5f7d0d919b2b1c59a42d06105ea4f2943c05178e59d67351c5b2c0051c93a4045e512884fa656b772cf398af89081546d920fd3d24ebd16310506a786ab33293027394c1bcb7b1efe46b550ac28529646e8d2a5ae65c59345e24b44cd7b06673f3ed3b9008aa568a739c26682fa596b7a655842cc6b2758b583487c78d14a76bdac7033806c5c210828ef313f8efc4072681f5fded748c31a58ac933b4665c445f07d603e0905e49b84aa55146eb1c1c99196413832a05efee2e64d6732fefc629b79b37bb9390fcbed7226b412204bda523b8b8af5c4a8bdb263ef9f3f6c7b9e1de3a1dc257c1f33b3d54a9101be5b4f2a9db319993c2cd137c41e35c434ce52e859afd1a635af4d8852252dc5e28c729b2b4c96a56d57f3f3854ded59fe612b9b3a51fee3fc1c83db673b0cc7433bff2472bc74a2eeb6706605e308690fd072a7042ca6474603711d8310909e47063f46f287260a26c4f11fe492298a0f98d28c45948a4899e08fcf443a6ba36457dd8329314d53ac0fd0819fcfc3357426c5bb8d3dfd706e205a81091cf08f31cd3459854f3d07e503991ba5f067e3c406c6c5396d8257496f4ba3703cb1ba25c2fe4aa54577af782cd57e85a88a2d75c54039e8b7bb559219edd6e81e41acb6d575d6f798afb2cbf7f00abd5c9c7b0fceec79f9a0fb040ebcbb7bff3602df7b71357efacd37aa57019350bb81213508a006160acde3dae5c42f03141887eaca22d7b33d6791febfb619d11ebabb13e6c5378e9a72e852ddccd31cc53a43275966b7042ddc51485ca20e1c456dcc7020cafb5407548b044d332229911fc74d7fb97de25abff7efb431da82de2ed7e25d0dcc06ffc74e57ca93a6a9f64d76a5c39776fe2266f88d6d0229b527525fd2e22a1407e26f94c5bc6adb1e7327f3c8bb8d4c9 +MD = f81eb583272b60d25135f1a92452bac01c983f16f9283a26bdce13fe54bd7225 + +Len = 73096 +Msg = 41d0990fac8cb411eb408905fe7cb51d1c2bcab9f8c6ad3844c73c0e73613417c46e522c7ca9b9f3721d94fbd1ddfc081af61cab68a29316f8be192fe87e66e33f6050bd2e5e33b796689550c9110ade958956267fcbd22a4c171142c6a3c26ebc8ed8eb4b15e9045c09d42b6e80a74896ccc051c3a9321b47ba6a709337126142e035dd5a35a483cee899b547939bee23a7a155bea47a92f1906ce0d9a21c63da3eadbde3262cdcf3ee2c15dcb0ad7747024359f8257436537f61bb1f4ba91d8b908ab06e4f49b6d301d474b541a78c07c5ec86f892e6b074708f28ee9c80375dbe12e0841ac3b9770adbfa5bac4fd46dd8e504465599a75d4c3f50cdfc6b5858b08e75acee618ee6f287ce555b6ef8802376fa6ad455c414f9ba5a44d33028854e45976f33ecdd289f21192bb4cb9f488ee690ec79e1afa361456fdb8a9851eb81816c54522d4d46fbf00266213072ce027ff055ab070f116a2bb71b876b78922f881fe3b1e98747ed3eb28d0863181965873f2dd18d8c67feb2598b3371488341a4d6a4b9eb33335c515128d32d3a31a147a8fa553ccfac04247eb4f67166c5a01ab920d2faf813327306bfe956801f9c0751469edc80e864c74d1c39357d603235f2de65dd7eee56e9f9dbb2a691ea400f62981435472406e4ef4d6283335de13ca666d85d6eccb0fe530396e5169a73a604791f0eca67d2c28bcfdb2430c394760041954270b528f93cc0fddab6381f155e702731b4b9b0ab4a280ae01d9a332c25f602542bb2a621db994f4e1acb2ba59a059464ab2288e554e2597ea2eba5a7400d895a48ca12c05916f409ea5b7f9bddc0ce7057ab42b9d0842fc866bdd42c770f911e6e06541cddbf55d3cdf10342522a3d1d625bc66fe697f3841218a706f2838166466c547d901dd8746b939fe11eca4a32713bfc4fc0a20f7b4d04067bdaf1c3fb7807fb2d9ab7e6b36d4c3bbf6c285b792f51cca1832dea75c08ad9d557e1bea5abdc2f732215e8597b21bf2562cddab841a71fac5ac1ec3a13b1085a90dcda2b87f5d99650c0442e3c1c135b28402db85245dbb96be57d91ed827c53ae697f57b659e2df4d3f64fa59441fa9e709be410831ea10de210543f6031b07d81115efdd103096411aae8579a1cc57c7b1f31b0b7532f9dcfdec19d73ecec0375b04bca723ad0354da8c97453c00acefbf360d04199dbc8d029ad8383b7ec4f3cfb586b9993f6dac0665f7651ca4f188bbeee09b2312a018b7784bc001115d33f58e15be7ad01e7426a06e8049a16fb92e825c779d78eea5a4ec39189871d01f56f8305cce475cd2c3a7c43eccdd6bab9f5c49418eb9ef5e525f69e8088468e1795ca13b9e8c70ee64e1c149ac42308596e36fa0ffbce869483aa4d759346c9ee6202e04f187a2f191b62c46f1b705709b7f963df76924ee0ee3b28d9467238126aea05fd0203903d28ecfe0a4233194379885bf7ea8ea162dc45bb3c107d6afc06cbef3423f7f4bb0d170bdcc70fd18f19605cf9c6181082c4367f1e6fbce533cc452694fccbaf2b2e7d8857185b12552e2de155a7c32ed93ca9dee0d2b5093231d2268ffaf331f6139cfe19b4a95e2e1e2d838bfe145edebc0c6533d7fa797fcdef8995bd032fb432d1d7953a7f07826ffbae1d479022fbb8daac77fdf1a884f719aa46a17feaee22c89f4a0840c0ea9a14eb7a02ab0dc8b9811f3da33f08ea53dd030356de15fc69fdcfa8bc92fcdf3315a632bdd991be44bc37e566372d084aa64e5c2b8213775ecde351b5ea2dd8b15a78c7d7b03154c0d8711fb57e87777201c6d1be2075d797d574a582bad65f9b7fddb9fea37f24d472754d2f89aaa0307c26d48d1dbf95ab80fe44a19978dc67e24f898147dd96f5f69eee22ccf92b2c71c904f6fe5359e07cea9fa0eaa7f79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37cfd15b416ff32c609a1a03392f355e6633ccf6c9cef1e62096730ed91154ba27747d7f55b1b1665bb1c04dafdefd895de5f1d05aba515715dc2e3750da6c152e1675028dc92ea095472b8691851fe6fed8966de2ffe66b60646234889fd2c6743c20ac90be542239e3c2798a2a82bd729321960aa6966c26b678ce2b676e15206ee64407980a336d0eefed40d71056e19efc117ab64ba0925bd6cdde3b28495a352f949960371c594f1aa95b93b0f872828da6d937ec51c9dae6f94b22e8ac4c176362ef1dc526272ea97684674aed4dc63e1fd03261c5f6bb0f1a1a2496841b9eea77b0d79b96fc33051c6359c77b9bf2764306ad92443f87b8f7f3491a1af2522d9b8596a1b703e796639f740deb848f9cd924b36718ccc54b597c9a5cb6f7ba92951663bfd061d1c413e0bd05852f241aaad149c888c6fd2f08601e44a0525e822f0a45dd28417af8f3d03e9790c539577eb6799ddb55b8cccc45ddbb1f2cc6662f0a45e308c96898cc15feac566d56bb1c7a4ace5aa07c8a6dd4e0a77cad7ba45ebd6ab9b821250e6657052a1d5004ae4ec6c5434dd0d4d1b2b42ef200fc04a684ccbc48807239c0893f5cfb2e95ca98da42f0e4fc0c4509648dcf82f042e9d269de4376a8e42a18fd740a05d16531e18995d59aae7d599a4b09cc4197a6b392d49c082c779e827c899f17324de8c0f123687c4bac4b97ec2fce2c153c51e94d8fad125336c9c856f7688c68ec45ff317062ebe03f9d8767d884f7e8266a136a60bb69d12e8c850d0d767091f4a57607382c2c42ad9bb2740ed436a19e1ab953106b1690a41040099472cb94ae2faedc426d47573e6f9f799866f028ec89646f67672076e37c81b25303a559620c2e1957ce42093c3ed6e03fe12d6558de9b262c578f6d32f9d17014d207c858637e243ff7273fed33e00fcbedf5402a42e7e029e26c5cd8afb6ab9d87f8c9d75d2767c28ffee19b734470043351a1a9dccf0524b1be2a1ec5bacbb7c981442822b048a73fcdd68c298a69b15b48701ed5dbfde66c8dc14c6465382a40a92194d9a131b8ae9e08087b3b649c0de395d154933137bae108aab33e5abe95784861ab8389bb84785e5991dec88bf029f80a828007de43c3e77fdbcd9a3b70f6a1d7bfdcb8796b64c0c694fbfd47ac2281118629e8a5b03a4615039a5e68782c15403e3726ba09681696ac1b6b98ead6192d89163d52a94f0db2542e0f0e56218ae24f193b46068f481200c57a45524ea6a8b3d06caed509249ff61016f5b2dde9071b0c5fe40bde3f82b98192188b9111c82bdedf81dd70742410c8d9e532691bf5c997fa5ec05fe12efed71bd73ea743d61ac8fc93688ce388cadfc2a681cc07f48243747acc19175df8507d4b12992319a7172dab1f665a154ddc38ff450e944e6e963501d814ca58cf73203cb06e98dbfb52d993aa05c211c147a2ba2738ac49b41aa5ba8b59e068aac86c72bf2e8c623d016711b07101c54ea96a9dce51362f7d572c6f8eef43d3b1d8cab4e8e1e6f896ad41eed9b301791a88f771e3611946f0d433e688ded9e10e2aa0cbd3908ee32eddcef1cfd2a875506fb1fd0d713fd7361920e8222f8cdce647578027436b6b2c1976e437d6e00016e3000bf5878f2976ae5d3d04e9420a64b558998c0067dab9e9a18dbcc89063946e4c6142aef186d91c50add514e5b5adfe0adeacd16976fcd6b7b604afa0e7f497fdc89deb4d3487ea63003db95c23eca9d4192cbd5a891e672025b793f7d15be67b08ae488b7ca7a0fdfde6de8f9c473f2010b7cc2059462545a37e7c7f6cf3e42fe91ccc94a661c6856e758e666ae647558cf307a42f9d968cf701731fffe4187f33907f4efadfe5651995cec9d4f249da558875ce524b445eebe77fbfd1560bd4adb16aa2c0468404c6eca8a02193ce19331f1f870c77b72445d8a9472b704397212894783fc12cca3f2223d39af05d79ee600bb5a3497544ce7ef8a0555a4a2e559c06b9c075641f4be0474a87327e624df2434160ea08284e7e74b0973da80311b6c64b8b8db46bb1ce1dee3080b93c1a7ecf148b82f8368d8325603941e37c1f1ede18e82fa4163a93aca5dc0397701babb5156c38cbd852331499828d8503467b55071f84bd88aed7fd58d4e39f641922ff2b4a350b7566364841bc4a16ff4d7534ff77b3862ad54416f061475a81db8ab5406fa13f749235c9412d9f1cd8fdb582ea39e4886276800153c9574e2f2b8cdd3b21a3f03f9cd8a0821db521f51ee347afae4149995b33c66b543d05d7cfd08103a963a53d4cc6d4ebd6b3acc078a78c361bef53384a066b1e4c1e07df90fda8824f0ae6d66ca86d639fc246a0d2a75867cb192ea50ca0fa56f725dab136bb5b9f5ac03c72c22574d4bf0a75fdf58eb32a05e5604a69ab7afa9f7708b389b4a14214ac2d7918e6f0257fb2c440aa02a567107b738e28ccf4f28a3f194f518d8253c3f743533492e93e27e3b8cfb7ab37063504efd813ad6f2600a393ec55f106bbb0c80669ded26707ffc4db13e43370efbca85a92f0f6f37e4bcb00f15e8636602348fd21e04e73684e7eb474fb3f590aed8e3e23884f89e2b2e0e7c834f4192b639fb0e401ad14495e38cb5bc27af8400fdf22f3a35e373a7c0ad1d89fe4b704baf4a71b08985392751ba92e038957776cc28f6a09ce076ef270458967fe19d46e6f6b2cbeb6362bdc4fd55684177e984a600cf0814501665c3bcb4353e94681c83a8381ebb0c8fcdbfbd73c0eca738cf2e121edd46b2c0a0292eb6e2c4e46f5107a7780572d0eedb9473847684a4039ac6c56c9caea90432b9e2e72bad422168e5ad093c9d612e7c05c7fde5c40ed89c02934ec2b6735f720871bb8c524e1ce8a0015210a53dbd03662346bb0548063754142bebf8d240f2a743ba615e58b044b94ce92e34b71926480e0552d2d03ae14dc08a84e0164748f8d14a571c029a01a3f834d1966dd1392df0a049b747d54e5210f109f6efd0c97fc301ea35dc2893f28bdbc774d263d08a73ae0c2d0f73c3039de5f7b7af8c18ce6177771635ea902790346c4a854f60dfff85169ea784e3d4cfefeaacd5c7ab4764f1aa47b05e7aa57de53c71e7028ea0fcdbf5a6908725381f553f410311f59d1626d044cc02b81ecd54b495880bae80040925bf6af90bc004dc821eb7f97c122d8da587f965dcd60709712fe8f944dfada3235397690bef28dc4f8054fcc348f37c76abb9066d7db379deab7a29e61242107b0d9645aa27f3eaf4207a8a5fc40099e00a9b52ce784b3c6992bc3c06ea79f7a937f82d7b0cee7f0c798930a605ed5c6e3f00d9845836b7ae603f9e2baabdcf1a8d2d7ed2f0810f14f6117e3a71124a7db39a0923801e7229be74dec8e575fd5b57b6b8569544219a20a3c181a807da9af2c77030926b0247e7ec5c632d3b08f83214688a4db03d0873a0a9201d46834297099d101194dea58716c58ee485785da6d71dc29c4de7ec8998a37a4346db00fae0ee6660346daf067478b0adedc218107f36b4038588b2bd0c3f04ac915852a8ddf28800b245e10096045cdbcc8ca4296d41b305ffb607987bda63cbbe71b42b61381995a6edd7effbe6f810ba3e7e3c21cd643604e637965813fc3316cdb1fd0b2d8f717acbf03f069f26cf2f3e22d35d483bf64d9fdf51316a525532a2b8884c514e36b676b67856ab4d69a4222e894040aed922596b33984beaa4aab74467a521fa57e254b7265c89f092a170fdc8ab2531513b9977d7ed4749c3e771f225964e0857771c6ec388b9a4ccbfb11d0bde8457f0e1d66198a0dad41561492e1ca003fcb7ed0449ca8bc8ce6a575908ed5adca72acda6d4f063753e3bb0c374e743024bebdcc2d4b5b615f20df0df4dc7b0ac938157713e99a5b4dc895e7753000fb77a759eceac1f985fa42a24ba58357052b17707cbfaded8083380b2bb34e156a20ce7db8e1c62b2d459415b80c4b10a9d658e572db65a8aedd7d45625b715c83087b4fb97b229963285d61db8ffb4efbb3429ee0ced772ed43de6c13d4617c5015f6f776209cea2e8be7ad3c975dbb05aa1fc04e00ccf4469da2a8c786e61ed930869e7839fec697567822648d37fdcea4357644d90bd6c0d3122005d9c8ea2542756c452c0ed7a47159e8dad752bc5e87cee64bc15ebf64cd76fd5535ce873c310988676395c25fc4d22626df76a1be3d3038ea208b57397416663f02c29e26e78b1b66445a32d0382a04d10b6a53f5aca395aa5e5b4747ae39844ca86ad6eb4a424cc83927cdfeb3abab62c5f87b0bbe712512e396379664287f038f8ed89444784417a9c23bf11e9b436174e6c10959e00faa1704ce2f7f2c7eed1ff84c29bc732adafcf425b16243f3577ffdccf6673a7cfa636cb519e58ba990c16fd8b0997d279a9985334765ebe4cb500545dacfc5938b2d98945c808d2976dbba2733c5dc63deea3d0cba11db3e454ec6d3bd79ca7de4de4e1201367c2627d7a2dfb927d8052e56e459124d5a284de1081fa84d90618ddf57d70ef19ec72a1befa94ba7bb36124541c15700b1ca6c7192d1a23361680f977b8c8e983d350611692cf02dcb1d131f1ded9214294d29662d90b41383b9f16d81d986139f98461fd711b0a152e3b84d4084cb7008d90d29a104e5d53f7ebbcb3365004a0c176faf03ff93eb96af8a35722f08fc96959f20b6d63d61dddcf61857d90325ceda0b28b39fa2f4e0aa10407b9653a01daa67b433aec49fa5fd29bbb6dc988c2c0aa1f2b099e4a277fbd2d62260b344e340ed4de2338378df09dc1e1817c6676dcfba75c29462dea5cc5860303631d0317dba54890e81d2d22797a84531959eda50dd18b0382291b0422b446ebfd32c4f8c552ff1e7c697c780e3c104d30d19bbb69246442e2ea1e187d2eca1a4a34185934648e2645bad063c47d11ea537c058286264441e8ef880c3d5be948ca9f51bbb1606243047fed7824c405c4e1a7cf8cfd3db79af487cd51dbd240e20ec31582b4cd07ef19270827a78778477be33e4d36f13ab8a661727be1085d60874de860c7010b95045ed4e4e56dc5ec72cce655bbe74a257efb0c0ce5949b5eb49e2eb850a2d9df4675c85236bd8b4e76b36c18f476725bdec2ee6741dd773717427cfbfa38ff28600a46d2441d44c7e835140989252fe64647be2d8e699d843fc937ce1c29e80ad19af4e765f36ef357d092c9e279ef3f55f7efc233bf6ab09e9103914f0c20f12b86472444d6765b46045cbc88fb4cd18e61f7b7da556b66a43854d80b463665ce8ab20b494d076a234ed673f51fa5374ff46a90dab21bf0f13d9014c96e94e34ae6c9feebbd8eaa802e8462bf5da4fb2b5dbccfcd5c08fa061f69da11ebc8f42148f381b4ae6886dd120b0b303bb87790dc62d71ab99eec433c369a6d544f12d21fd3363c964199aa97cefff0405c57211ef1495b615a4239328ac8442e93c9edd9cd8edc1b965d692e44a38801fcf45c83fc8907d9c7866880db062ee14373c51556ee2ba4d34ca95400886fd736d993a9c9389889733351a5abb695f2babb084113f693a884e1db97872100568691670efbba8606c9d3752f716c01f9860a17eb691abcbd27b780775d0ff1f668a65712189178c857e1537cd0991b6c11eb8482dadd0f4938283851d6a7ad4d5972e451845fb94489e77d2c2db01aa10ad9de95fdbff3e332ce53d5987aaaa1e5918f5be377f011fc50329bfd63a85ebd4f7693363602f1a4147371270b72ba798cc88faa7c85a71ba6447ad4064cebc5c6ed1908c1c51b089507a2e6ec8dfd91bf206b3dc0127a64640317262a60eea0eab28609f5b2c5ecba90e97c7054d1cac3178d31f50f1263140f1f88429ccddb056768ae444468ad1f9fb33c397fdd91131e541b8dd3e58430b8d25ee1590fd0a17c4f6a300299e61e949ecaca67776139b55e5efd199a6434a10e3e791e3b2e694198c24b65d00442101a8c859445d7a17d0a70b548777fba47f19b8c54b640a787d34ae8f681a42482b5161d9ebf40e4c5f6f568d923431c2e4afaada527b3f69f8d68bb3d4522206cdcebd4ef4a597e3092516a54143ae4b468c03f8805f4d0f935a01492912ae05f10724dfe8d7dc83d7b194c41c0d3ae8ae9a0b465c78fc1455a8597aedc1acea9ee4e0b44df1a6d5cffb1810acfa9c4123c00ced6e2f141d47a8db6daac6e560dd4d38f6ae5dbd81fceceab478739efdade64c153eea5cd56f43ce4be78b210db52a73cd9082e92e636a51d609de06c454f414e455129de1d75f7c3b2d7727992e63da607dc8f2840e5e979fe5a49d4021d3ac853a109fec87e52b6603f2c1ad50e0b5d8fc979f2d04b10236962e2b171b695c1e754a2a9c85be24f3f164b5f1248a4c5c9657b9ce4d49dbc3a4e378f14b9f6cd88f2a0699dbd0af0b7f35cc0cb147e615d1700812f2106970952a4b77b75e23da0f17fa8c910513d636cecea7ff00cc2b384b549efaedf663f36d6e50698ccb4d7d79d01dad449a7b9d958369179e47c5504e651d6dc7c8c44513a7256912aa5862b74ef339748a233df3b3fb00079d0ba3e20335538828bc1484bf9ebdd90824443b3db73c7f2cf59c512504c2251626b870f58eb5175e73e7277e626fc82fd8ae6c6410bf4cc81a4415a22d66defc3e175e04d19a5cb2104666ab1a87c6669d25b28da7c9c3a6b9bda9f21ef31c957a4915f8a60b3f6cbbb9a8106d0bbdf49b33757e2362cc0dfb8d73dd7e71c62b03d5fe99b40fa8d39ec9567304059422f95f1d002e924f47083edd2bf5e9c404014380aea4ae7f30defdd69d867c3338e03112db6d62349a07584da32d62fe689b1c02011df0accba6de91569c79827e7732bdd78ad9634f20612d0ecbe45ba1f9e6ee58c8de17ec1cf3ef65ee03683be7e984bc2d00c5ad7de3e4347a77c6f6442cab7c4d7fa9db68c459942322d0b957dfd051fddd40fe4365dadde02424aea473a13553dc48dfb3d935a9e4de9f3ef09a0a5fa37bbd889d7077d1a5f25e124045384a82fbdd4225bbec6dd840be13d9a498aec6df2595b18b23d772ea5c6a4129d88584e6514ae5f1e7a8a84f15803b85e4060f135e6ba73e46b9ef1206fecea8e9acfea58a401c038d22fb148ccc3ec3542f261e5252a811483dc37444151049d3889b3e726cf17a45a27a950c4109e852f0b208e794dc8d912c9618fff82f94fee100bbf0158ddc79f2cddc7b25c57c45135cd907786a39894d12041df05211d37fd823eb8417b490d89bf1c3c19905955ecb9a99457a9d996add428843a149b829c97f4d02b887f21d8cdaca5dae0da99aa7538544364227499fda263945c316a97bd6fdd598df068949a17a412c1beb8f9a0ab3bdc4af9db301d2e11c660756c59830e345de4336e37a4eb9b43ab8c2044ac90bf74c6c6170aa34a0322b9ede46c596e79cb33ceaf5c7e771ff006a96c25f97743cf702dd4844084bc5bd0f18f3ac0ef1203e518885d676896ba7bcd092827dd9d2ecf877037454c91b44e26a96f5a3e91ba80a795c5202e93e5733d63a5b811f0254d69968e422047ce7a03ef5485ab7d318ef2542e19479c03759118291ae2f145725aa413c79e332ced0fbda4b3d4391b789f4fe2b33213b70b5e934cd09f1501c6c125423624e8422fa090ba953759cac5f4f5ad9e7c9f529cfc716b69c4dfecc33386a42e32db90ba6d05008a4363e20f99c1c93b859378b3011f2f56e2c658e03864a4107681ab05db87311396cbd3be0440d00afb949be5f318e318774ce8b6263bec7d3e8ef3aa6293a6b190162249bb0f5c9d3d173e9e48db213f00f81ebdb378c7c519380d00a8b6fbe4cdb7504b2479c962d89fd35488f2842b0e3c6d5f36b7d0a8852149b1046d8b4dbe43e02ae70c90ec3ca2ec9129db767cfdae57134655916800ef4c340c23ef3cd020447169546d99f7a50ceca21262a56db25e8258ee84b42ad696f226768232a1f11fb721dd9a0c983a96bf9823e324ccdd0624e4ef14ed519b9c73f9e20edfb22ab444b704b0b47cb82c92628c728b99a2c06380e3eca41382cf41ecd2cf947f31b4d27f663c1233c220fd97b89b3a52982fd6a3495658ff40c1e475e55ee167aa93c9117eb6b65bdd3669ae34b7c1962196f6c2abfc7c6339f6c43b76374709f9c3a0e3ba9b01335dbf6f2c8d72b1c2d3b83c7568499eedf2f0799421e355e4a3e6e28ca6739378e83e66892f367b7722e610222ab8310df0217d1654ed6e763d501662cebadd8af135f85a968d8f1193b32a5f5fe2c321b60c3748aba0214d2aa1a50c9fdb5ff80d388cf75fd27d20aaa1e3936433d5f7b933309182b5fec7f05e26f0967f9b3e90a8ad05f7cfc622ec34c454f435d9ce7e2901877699577522d814a55f020fcd2028c10cdabfeaa6bcee551a7c635f3479402290e3c4dbd346c1e6a135fd3e22301b7162854d6b1aa1210e5a6946d6b83f2b0c5476c2fc70b08e155ad7db96ec450326ad93d2c7fd4d8f68ab474ac0c8344c37389c0e29cc14af39589127ba79d372694462fa71dcf68bec7392f9adf30d262bc3d010f443c7a7cb211e6c09697fdbb1cd9f1ef92850a91259d8de0eb70e3b627c9f75dc866e0a332abc0314198ec188bf94dade6dc06972b485626392cc0e73c966a752f25c4919fc16975b2894a66690d098922bea3f761a35213cf4db21c830c22fe81636d6e80baaa35f15360cc3c7fee2a4d122ada4f144950b7b9ff7d8593e6a1c60724615efe491904dc76738eb6c4396fc0e3677e040285f95aef33c994800607f93192c0f50ec8f50ed483e61a535d91af16c775dc46599b16cc66d775b6d44c21dc2a2e07c3ebccd0c123cd13623fb9c90b21bc02dd74a7d7dc3d38a051b39b676d51309c2e298f09877bca09bb86f2f50a9edce08f7f248469e1737b194dfeb32b2e4f1c192b48a36cb4656424db411b5a665cdc24221b05b97a1070d5477ced5fea12ef4a99fe85b9f6268c66e6b02444a0c46063049342142f98e64f4c1dfd51ac027d891aba97b56896ea494e46f610759dd315ce9422c42892454d02eacb499da52ea05683c1aa333ce494bc0b7a060c6d9d02272790108e86f49811ea3f8fe5866b55f661ebde7ea0e311d708986d8ebf26f2b852713f89fc5df82226426aab2a9a72a25cfd9a724b50864844398f2218d5ad291fae9a407de734dda4ba24171b25bd017ddf2637c491bcb6c743b2f10214fa21962f69dc90fa16e96e910353e072ffbccb7acaf493107bca9aa01f22044ba348bedcf484befe64ef8cad508401ebff7a4eb4ced241338a2cc4361edea7e06e479f9d82618e5be79604f852d506f687e40f7679f85564b3834deff64d713c24c6415b5c9b887a6787e058536c78fd5da215a9158e570abc773eb1f196ecc78d6cadfccb5934c1ac6928b79971df674a5b6933e8bed08c6eb29e6655e2a0e970e2ea6a15c31b997de5e2fc6d0dc19c16b711fe3bae475491d975f56b58140b96d0008b8202c46ba3a3180f1767a804896017f0558644c9ed97cc467b21d093c8dcf8495c3eb79de74ad1d8dfa91b076bfb82f3806f4f534991aa41cd645cebccb1d98be99e7d990f82163e0df8a30d83335bee0291f15a6f7217cea84a41796af5ab38734b9dc5e3f5ee2ce87fc77e9aada9c82413b14625e01bd556fb06a76c51763a406d9f8b2d496187b9630fc27814746b2e1d18803483bf3e1d9e33dc986c4378982b0c52b3267738c8cf0341e50ec5be68d9ad6e64050af1465b507fb8ef19dac5ad6b813e3539275de92c63a943a3a9196df8797c0b05d6185be6fa928101480e1c4482961dae3cc0d911918b5d16148b0181094640b6d6ddc67cb4efcb02aabaa020bc8387de6038c83a31550126e704bed187884927d7dbc49b15967424e812608597cd1bd2790fde30adcdd9dc0acdcb6f590bd160c25c7bca8551256feb5e85fe7b3b8091708b427a6bbc8d3f662e51e3e9977e6780a616916ce686ec99e63610d0975f232ef51da0d5e9c557e16e78b69ef4f846f801bb78321e3ea2dbf19c45fea75f919a95962b511e282d64d7676fdfe9e80511b793083fc1f69a9ac8de246d3429e29bb2d6a249215ec8d8af4796163ff6aab50fc5c8fc9755dabcb426358605641e1b95048d24bb1031233f3fb3aabec93fcb507941cf67046c2afb9901afe4b94e018749754ab4e66e2fcf784f032e0acb3ac3d9f921fbaa57cde5610f5197d07935cecde023d48789e2a71af189576057ecb00a7a5b19f0a48cbca6e7d5e750a79eb2b75917e39c89260e4c22a40174eac85f374ce38a7e5a4ec68f12a19ce2e0267d2f658ea8cc77e24e3669bcf3ee8cb61786f52316fb81fd4d45171f7e2d2db4755f8ef0ecc05afead014e39f675459e211fff818410228097f07eb654da9531e46d5ba5771f3a6174d55983d2b11e68c52bf2679e6444bfecb6d0cde890218310815415119220f5ead913024f4b1efd4bd2543c2aa0efa296c294ce00f8d89342c402a882c112a15936031e34eb4e43fb3baf68f16b2b11dc3a522065b9c249c15decc791531b4d0713b2404b38b4231d8f8a53bb6e01f40547932bdf7ce78dd7759bd808f140e13d99a6ce5adb5a85f8f56e65505078335a10dd5736e95048ca349545ad428b4643f069322a7b4852d596e20677ba99b623bebb0c31a70460e3c1647449ef0362613f83d283c18570fc9a6e9efa546b65a878b2b2995f0bbf6a458fcfa39fb01edfae7a182d5519c9b5289a959fc5f62930674cb136b86e4ba7e79fbc85fb9b630467d86befde0c444868ef532fb642e804b21071d05b34eee1d01ba5b5aacb171a8f2432920566c8fc83f44071ce588c6d83865b2fef658f62278bf1fc5548236751e7d7df71303f1ba132c42fb63ffbb1ff37d51a1d0a167015780822a41b +MD = ff5b255bfb30e6978c482c54b7010361d494efd5af390ad968fc676727f346c7 + +Len = 73888 +Msg = 44d341900bd67587b085c5baf080e95359e70d1ba462ca9a446555803fb2f6433d1fbc0ade9970ca5169c7ae23b6dbbd544bdcb7b09b033f5c02c83fb04e5589447e3aba4eca62642be3466c3b7b60b0f208e3ed2cc5a9e1c1fa6dac5a7e3a7c837a2369016f359e657baabae1d85f765ba58987c0e9a3c69bd5ab8ee6498d651f9ae0df9f93d0c028b95b61bdd3c155b6aa354b130ed9361119e9acfbb8368c4366d7e4d13b1b129b26c22976776c962ba05103ce3c337b4b5091cf42d11e39156771403f71fedbe74945d9b4c94980e40e4475987b99dc72010abf629e2bb4bd2416ba903c616533aa4d3b21d3405d067c766a1ad4f3a0aeb5bc440427464464262f1c6ca52cf6a8d24315639c3a73bc724fa9fc4e291026f30f26d073583332f3222c7db247d76e488d30222c1d0c2c7937fce5f2237403436b2c6d8a47c74e1559b3686d9a50ac949554078cd36e7e1896297dc7ca146c2d38208474fd49e1143a78d8de0ea88a3fc148b9c342e1dbd8d4f96dd504378a3adec8bc39600012762f45730c892931d07bd6e1d954af6b4059345d24ba2685f1c5ecbee25a360ac59fe0e1fff419c9cf2ac427d7ef1e55d88da2f4bdd52a84db55563277d231f088f212cbbf38c179c535db32c4fd78c228d90adba73b89af7ef7cdbefeaf3bed488fa3d9553b696a3906e3aba86503d9b9a336baead68b2f6411180d81db9a298ce05bb2c8e759c4b304a4398b0f08c31254ec388f8c7a2c150d00c5073d96cbdc4c02ff2023d8aebb97e68576e3cea7bb55f5fd9c479ccd18514d8f99bd79fcc03b5f6765d62f50da27703770c99fae3d0d19b21cee3b3bf447c7123e4389e3c1153b93a0eaa7d3971c0bf682a9c1ff1fe31fff14699d9e345535f7feb710a966435e2ad946865f7bdf7f6ab36b7dc4e941d18b8ea00a1d5de561e5e1015475382b90d516d2141b0dd6943c0bf71b22248ef5ff917bcce0f95e1185f00a9e70be36993c61769b30d56a11149235e3435731540226e22a108f280e7f32b835c180cc4006c11a61c65b03c099510e1d4f0a94b63d54bd6bd5a8ab207ab0f4639206564edc3fa6af03280a67744f68106dc51ee35723f4d856cb4e0e1e70a76e08d93a8c65e102cd12c3e5cf4d942d05c61137a2f99b6fb9bc807ca2147cb79f4d80e2bf4ab1170319b4fec0ca294344827547bccbc516562e509aa204dc0e3e8983b4b232b7cb994184bc0296159415c87ab6fa74a8d2f6d5c111d795969293e36b1a2cc6fa07d6b1ba865c576006c0c0a6ed229d4c89e2d95d490970b42de584be7bf4ae82b40492dec697b613838c948452fcedba246361acaa003d3dc67e94073fd39157b8690b78e37b5a35f2c369994e520df98cbf95359d83a33a44a43acbcd911782fd4d451145d0ecce3aab6a6f4aeaa411a73e9e80885c4ab291a09e948ff6e90a69fa6730545e13e7458cbc8dac8d5b0b5f2aa415d451dbad94bae9e9ecc9aff7e6b79a5e78ed7886fab08a7bdd03daee9bc9ce7dea2bfe34353943534cd410515bcb06221944c2b6415efac24614c8c24365453f30b15a4d5c67d35917ddb521af7fd2049f2c9a7c02dd34e94e88ce903e4431e310ad9803f18ac283b6ad466fcc1b278c726da8e2257661785c26935f76aeb9f1f1e55f5bdceb37598f0c6a4199e72c43facf93ef9371a9f7dab7c037d2ed05f23b23585f05d25b640bc2c9a1fe2a0ab09f1a04ab321633ef2f03fc203a483e6e552d2b165586562b92960c96e32ee85cca15a21febac28e8c3d2f02396068ceba9cb7f88b2514f368d51db283039efcde1891652a77daf68feec4347ce7016f39ec7fcbe05796e0e62bbdd60cd94468d4e3e074c4ccff1f948199e95cbce050d9ce84bbf3747dd3a7b9cbb45a387172477fc1e16c3eb16220920a913736880c20bf514932e03c1423ebc1de098598718c68b03b7f519456ca9ca0bcbaf85b09854b7fe43d4f545af15e3a9379554c0f3a1b25d37c9a1a65d90df6dc5686ebd19ddf6b2d610658e0867d80a5583beea3c723ad49f26ca627f26277608846ccecd0f79d854c99ac7d59c64e63f48e02c7ca0ec11f6f6dda15ad469cf9cedc50b3b520a17c6e9dd169f1c4fe6ffce02af3a938ebc4420228a74006f1f8989c19deb0f6f17335776a3ec4e61b19bfb6c9bfeb3e87d928ce1465714ff0fd742aaac65ac7181a3fbad97479c61f01eb965175168c4fae72262fc8b76e2478ffec65f3293d8fd1ebdc91a356d194a8def364bb91ae8de4bcaecd59690e06eb9a75fdfd92a6c32ad851453402a4f68f2852860c0311dcfc66cc9f902c8c02c5b24bb54e2dbf5c9573bd46bef39ccf15462817eee152b7561f03f8f57884c2b7f5d22e5d60d3a6925c7528aca03588ebc7089ccca2eda7a233e97c01b374a102c3adeba3b2704bb1d11d6d65af0bae731968a73dce5f283153e19b3d83c83866ba336fc9c931b674a02a87a2669bca3bbbcca9baca03a3b3dd90c911501bf33438071d37eb84714b1800f9cb7d4246a62ca926ac3c87b47a5f5ba815bedc5bfbcb9d8666bfe506a5c745565939abbe62fa92a0ba8c67d52557b69ac31685fd3de36b3deeacdfd1352c7c0fc442449bd293fdaa4e3000802535462391fda5317b2e04a62848d17b49b5f998952d996975975ea5efde0e4ffa966ed51adab6a323f9de41bbfa666f8402627364320691dc534a1607dcdd8f25f9b511c64446ccd8d56ca312681b2844803b429a1638cf6776249d3eb2fae837bdad8c1cb0b218fa5f445cb3e84c303bbdd868af309c5cb77e828ded06d2c59070ac8696b6951218e5d9b119118611ba19ee682c27add44cbaf86aab2f11b1d0a156a3bcac7c32a507b142ca6a65374032d1c39951d9c087d9ead5e1c2242768de20660728b4053f434fa44059462b7e87270d6f45cc9c0959ce42393686b0d9759e4ffeb1f904481729380374b568c59552a81679e2e1319937221a12b5c8930624b41bbe97ba4ff1c2909c334f79a5dbe9164774c91aa136aa07fcdd3de9460e5854e6c53c91b771a020731b60c8afc95eea4abccbb2c8a09b6669fc8b9d330cad84d86c34153f05466a10a385f033ec2896c8c8774428758fcfda073b5f0a7f98d668fa3acf172b19fffd424b6ae2c2daae2a1e58394113eb96d573a9a93ce5bebc3115ad2a0051cf44a1ae1da33cdbf992e724fb2c930a637dd4d862f63abd63c8993507b06b27aacaa61d793392a5e9d79872bc78aec75bc7608c03d094953c6e39eed6fcb80b41046336ea86849f300eb69e28b7e4e94915f124e8c2cadbbd3f7b999759878b26847170ee36a346708ab9fddc64e5debfec1f39ae475e1f4a9ed6cbc5715a05cfcd4961f0ae4f3a0fee2b18340a122624ac4310a0d8cece890ee3fbedbe9029a13163709e6818c882ab7283bc020a3e2bf8f5608ce18d67dd222bb07cabca655f63582343fe60906d3538a6f1073ea51a34beafbf1c2a79db6b067ffeb389273ee58ff09ddbe710142dd6286f641ff993f1f734b3c31682f83c0cb0f0803d0de41a737ee87afcd63c07e35e83b32e8a0db347b5f780d211b827c709de7c5687c374bb14c07612413935e8dfca7efaf50bfb289a16d00d849fb0add13512760371a6cf58c237e7ef903a4f12c01205c8f32c02678e2b097a135929ad70ed0c2f630318c14a4abe4fd5a79eae0136df5477d86d84ca0c5650a7a3d3053e66a96a1c3c3fd4e51925c07de04ff7ea37c845fe92d2a8670e84b6f103226eda19ae21f194ad0a0f4dbf1ffd96eb86f7af810bfbcdda18c18c14fb5409a040f060ab05a7aed8e74532ea8cd91de9d1b6087a24f3ebdc7c760f77cc5529d5320df62073930d4be3138318b594f7d37ea1cd141f7b9f6239f1233d7878e629a88f249f0a48228e83f698fa18b5a720d45787ff59f73af3d7df41c6ae33c1261ae08687183b7119406aeeef24cfce6a7923a39c62fb5119ec7d05b3cc2a3d431fce86795be18b64beed1f787827b018e3a2ba6bd8fc744cde76c97550a0cd190d95ced613eed40945f9851671720ea49a6136fe1a7f16f52439079bea5bf3109ad2aa2dfe97ed6f8c1cda49af133ca603dba3c3b5f7bbbb64506a87e79041b21e11b3016a812a1fe7c369a29fafcc85c66e7b4d1a0ac4f805395cd9d7023b762dbf73c0e64f2c92ef89cd91b18c20dc48b647fad50ce5438d704902471632e53048671d0036775109dc6097835cfc12013f746d75927f167381c981a630ea87cc48f74636fb7cd2dd47ed34938690af96669b155a1004f94dea58e87306a4c6684dcf0cf8e2afa0c038adf9509d913d5ec81673112a0954731671973bfc04398aa338b1d4a0a243594b3d4649067023f0d0911739351ec089929e2e7f857b59aa05ded54899d7231edc15abeb55a00bc31c756210b597c607eb591eac379c9f5cc22bf7c352d0d87787c1bac60fc34d6c085df4564016cd648d1cd85086ca7309849a99e35001dbf9bacbc357993c714220953e68591e5f35f463ebfaf7978d36b9c52c0715ec962c018e862e868e0febf1b5b0d56510e3d2bdb8da0a0e86467ace163edd19139f74e89453a95c3a81dff859fc1bf88103e155a6230c4019273c5e1832a3de09606adc77bc568eb47f84b0ec60aa880127e83896478010c2b7f1d645b819d920817449a330b4a2ae418097d79f0f97f3d84de323c7f405056131c3293f9d9f0b6b37dca151521c6a703a39b5f7c9aceb8d88f1b924d6a163cb82a12d29ad942c961bf1ec8ead708b9437f3021b573b5ac02fc0d0deb65a604f5afcdc06d86d068aa735ff59252384260070466a46d7b418a8fcf55601b48d753132b0679c6e1bc15ff5543167c9e69e0a1ded74f6e6a9ef9af2b13b47244dd59bef44cc782beed2accc85b7d3b82574db7871bc05fc8ecd7c3e7eff054e13d8f19f0395da3b022714280e4cf792b342eb0c8dbff29de52aa35cc901ba868207d8ae776450ffd8373c94487141de2270cf467bf12b2f4f9fc6ca29f3d5621adac7aa0ab87b0ed39b7cadeec550fef586eeb2c6e03e4520954d031c35f45540da352e47f296cca6cc5ab14ba9a379af0dcfde191daa63fa93bc940a5875f4967ea787b9a352dda4326d6af99e97d2b17de924ccf9ddf050138bf99ecc08b48e40a562da5b2da67e761b177334cc9e9f4fd1237d15679ea3ad31a02410fb198ac8a52c248a95bb780fea6332dca031db0c0e5683f0c5b377c9442444c7eba82e6f2d6012a21981235861cad326b130f72b073a7c0c86d33ee04a027b4148c4ebbcb49b3f42278c22e807babe838e107635324befc919728b9aa9a7222d91044529b13a04db5e60e94742af6f738554dab3461739c6fc15c040e99ef3dd62eabd4ed9c90dee0c73d8fea93560874582871d89090486ad318f8b90664ae12cfcd68464b4b4fad0498466b1d92c3f2d0e2ddc91bdba78bb5a4bd32479a1c95d9f037308a9847248567e27e3074cfbca7c1198e681d62d950487a01c6593068365d6832c1416e4c32f28aac34c2d5dac30e4aafe11d205c8a4c58afe9689292cc5c24d5560c6d2df380677c91457c520e109bb4eca58a1d4cf77ec31a91e91b8534939fb2c2eccfb15aa176b0c56d2e6e113226f37b48237f9314c5c09add0c472fdc1a3d2b923b52c95f22f70a4f76cd57378d5d6801770966443e424c186cfc9328ce5f0e0878c013c909cfdbcb30122bd36f92345d1fd4b934b50a6f3f438ba99e428134f68ee18008b2a101896625d52d56faa70625c6d30cb27fcbfd9adcb967fe096602869f5a44a5d345301fee9d6fc9fd89a190c9fef5bd0927f778d70baa8a616ad767e1e7a46bcf6d686454cbbe5103a1d969c480175f104dd8e564e6906fef081b398e71518bfb41db3c42a6457574b853b79ea2991ffc0346e96b9441341d0a7704903e738dc18b2faf9d7729bdb896ba8241aca3863612e98dd45be461523692d1ce9631fa88110cc54e8695b13703b4d394e65f1b24426bd88784a17ef55615a730c3b359b79c1b873d1bafda59c7e9b17f97f3662f5a71d36c56a1147030a78f9e0c2232b8f403fc527e9fbf87a90324ea0987efbf24a6846c1b0caa2a8df19000b8a60ef2e16d2c76f68ee82773a734bd82443f3d66aff56d190ac98b349ab23e106673cd2b01208fcda4dea3eb7feae04b51dd0fe9372e589ac1f8fbef4bfd415c8becb19966df8649082861da334d3cacd7519f75e43516e45cbfe284ac7aefe43cfe06f5457144b3e34ecb076b65b7ecfe2454d25e148e3f01a6a8bc643031efa233340545dfb0535cd9473cce3b3a55eddd95c74ed3a7f5d936b55f1c28f0c6e412a3920f30b1709c503f3f04d6ae2dcd04cc1d5c784b4d0bf672357b6812b22c23bc634a6c3153ca3b1ad9b63ff9bdc521609c2f0d618ebf6f45052afa80f99fefe5429f9c17450f2340d28c7c054dfebdb90c7099d0011f279799d0e523e367fd87f5b6c74b8c938e19f22d97b825a05f3f35c62582ee50a8d1b71632e2baacd50b4536f5b4707d070d014297fc8cd2905adfdab85e9d7d7a5928a4e8a4c49500d7fac82e3c3bf51384c67285b8ccbcd772d1545a4c55cc2399b4210f534b4b0555dc137bca33253ce60a6668d42b87bcefd4db13345f652df72236b0d695f66cecb2c0e347a233099b95c54837f25bc739b017ecfe037120dd3c8ad215eabcbe0346766f99ce47020b2f382ecb685f81b82db1ec93891882b2c8c67df894c882045ede26a9008ab09ea0672077d7bc71d412511cd93981ddde8f91b967da404056c39f105f7f239abdaff92923859920f6299e82b95bd5b8c959948f4a034d81613d6235a3953b49ce26974eb7bb1f14843841281b363b9cdbee7606895816cb8d94cf9e5e88fa433bcbe8991cc176d7e808e116e813dc107c15e0270c21c4a9428f8d5276a187126a67951138dfc5f188612753063ae09c14987af9bba67ea0e8f74559d5280b3dc5c145bef45d34e8ce0bbbe75ff36ec80b3deb847f2e6d3ae7949ebc6165ad4db2a3a1a93982ed4621cd44dada86ae1dc9cddcd03e02b8fea72e4182049f96c99bd350d9ed981592e8706b345e3ac922b60ff4e6e26b8974918dd5b3a520ed39e71afb56f9e5d7558dbdd7fed559e7603acddccd51af05250b7803582c2edb26fe404a2946b259167779304026292f5dbecd3b8d751656987eb9737780128817480de459bb46c35d0e6f200039f3caa3a8d8ba2f34eaa4555316cc1b8b141b942d4972ee3feb3eb3ba664d48f6fee0ba62b601b9787116e5f058b749347bbd2515bb9bf1bce7f29ee3255f1f45949828522fb73628f5d5cfbf47db0b63919553682c0869198306a8f175ff8e0efb1a77e20b84ab2cbc089b26aae168009ccca58e64615e3e07a2594c1ed59b397c8f2e791112226c0ed8d28f4a7069f4e589a4ef2b4dd913bbf0385ce88851ae5f1fd67e0a06a2cf356dfb61f0311425b4f5d6f34974e07fe615cd8a9bc1b555ecf1f65bbf0b343f78ee9e0462cb737c5138c503857f7e6dd23ca03cfe27d1166b2e1677f5c7dfa41e8444e069e78ee10379f985a816b8c2c58b3adbda63acda23fdbf3a77e2abe47056745dcc2d6b3d13e0f9e37ae09867082a22d0f71c4e875d87770c0c05a0e8b68db6e355441476c9964d83c3862544e342e0821dfbc00761f3c9557bd8c798385092dacad591766dc37dcf4baf67419dfbfd5814a70940776a3a7d8d0227dc3dc891aaf487e823478e112dda046747807c00bca3c9311ce71454ec0a2cc89d0f1c3abb9b0323679f209207372d2c3cd2ee711594094182f8189e0bbafdb3c1f475157587f14a29bca188c42bd1be0adc78d9caad0e4059f39fa040641eef3235fbab417ff76351e73879cc7e982697e643be45b781368b20d0e3f4d23684d619d583854cc078c6680def87f82c6bcd3877abed79092bffc7d4ee90caee7b97ea2c26aab6f290728749715d60329592193b252abd4f289d30d2497a15eedb5cee271a198536b43c8c1488b68055add0d3b7b66449fb344da3f37d1c7bddac0c6fefe9398133eb0cbe95bafa1e3bba6eac14e503e6b458f7675f11ddc363f791b3ab1a7172923dca66f59291038cc454ed7a3a6f5c229b83c53d8d24b729c3d20384362b1ffab25ecc5b95e3f7f1d46add103e1173ee05d905b57a5b1dd718b7a6a2c4ce511453b138f04d58c211f098c6ff784ff3c09ee26ff15fe9be15fe28e62c4cc2d08827a9f2dc41592b9623c6ee6e7192a33f6f844a16c43662897e0d094b576e64fd362f4146f94cfb2572dc9e86af434c147fa8e04f31aad0de9f4e58266c3cd51b892c6f56fe9bfa69e7c21e6fbcc8b6e7d63777c22fadd2ba6ad41be61393ea8b2786c236d7acf0078960b650208ba95f7d17589745a72ec6e5859ab2d4db6cf51827830b0ce9a5aa609eae5161f2ed247b32cbf7fc00ada91a4a1cb3387d240065f5f90026b9e1f875654d9c096749dfd86e170adb20170b110ceb10c6dfd75515da6e3aac836b99cf9bdd56a05187389db586f76a6f3496d1b14df2076a509c30bd28e426b10c36762aa4aaac186dd6d1ee5ee73156ccf062228b818186567cbf8570241caa8c7773f8ebbeb723c4627c01e801b93ba6c1cc48ece4be9cb09dc91c8e2217d6b303cdeff9ba48dc5383a6d56c6e89878bb2170aba44461227a85669ca089f9d48838cf618c7e8aae4e25854325529a3436a4c4f3bc89f5283456f546cfb3a67159eb9f48e0d1df53d269a6581df22f596927301b99953c28c1b1ac5bb25729ce0fd5bd3a4b3722627f872f0a333fbe74cd292077adeeacc09d361a400aecea472477a7aa2e16ca36a00eadede7b3ce02cd1b349c7c0ead7c4144cd984bed6e793251ed1d0c195d5cee509157bdc6e48ff38ddafe767dd4a8387e24d8c7b13ce0a3f50c0757874241b50d77ec18018868dae192124fa4a8f0fd42be663100cbfa13c172fdb3191f918e85d01fa8fc2049edc6e87c4a2ba0d30a22f8d50a349231ec57c06481275ba8e56a2876c30f429fa6ae4c91086b42cad99f72b9a5d53634a81862d0543a7d14641aef6618c375d68ff83cf50cfc05450628aa68a65b1e5ed193d8c5aedafa405528a381fcb1208b2435481cca466eddfa5f0e868e4eb13cf34a90c8e38169d96313d33ee140e929ee05ec8cb2e2f5f230932d77c018a54b77bd393eb4b6322c085cfd1188fb164f57ba98a9794a213e437575d0de5150f6f95c20ab74f1e9d4af649f8e46686e47ebf3eb176ff486fead7676164b714aebd2c7e5a3b6bd075fd2eb29299be127b03512423b197a7dcfc906bcacaa010986ae51069bfc80012a1d2128680c2df914adc63ca8f8349c3e40a698285c890353e6a7f218b8d36dcfe8d72bce197748f1d06048c5aecb68a68ee6c70dd561ced0063d369e6e3fa3bdb04d91c046859db42770e5358f9749b51e4797c1c723c287a7715281af2d59701e24f8e305b17df81d88906d3d30d5c66939a8e8846794e724f4c486de14e5839cddcfaae983502a4d17e8d11a1093771a4d68e6bf75ac7b19380b028d9eee6496d8948c7483bab7109f4d05b8cee9338be36640bb068fbffeab94892013ba9f96c5d60c093b144b229f3b6f8bc46d7858ac0f9b197295323fc00f8f582bf0a136f612ae4a020342dd883293258986d1eb07e33a4d42735e7725ca89783026f5d219b8f7a9810e3abbfad114f896dbccbd778fb2e90ea0a11f4d640c22d8b41a1271575c9a207b9f386785498764c2c56a7b53a95f3f83b6a2975a8bca8e2e9a52cd7c61ae78f1ecfd4eddb5548bd2585ca3dd62224db2ebaba41c9cd1b8fcd32d6e768b58f2f7a0551128ece26480f22e518b91d4c1b4dc94e42893fae1a570fcd4f45e2c170355ea6f1554a397652f3a34fc9ce923eff5e8e81d1588b0cee06ba1743e9a5d8b7a27b921913a8ce56c1a9e8f07c1fceab4322058a62d7edf9dd45454c1164f1689977fbc06f9cd98453a2ee14711a53bb3eb1d69aa3bd43e25d15e347a42643b10a433634a73d1d427334661ff3ac539618e3fdeb646398104ed3f81be81254f8bf874b5b02b224f9e7075af84bfd58a499628163ecf173eb78268db22651afa67eea401fca24761278c4d187c134e94d88d36aec85905ddba2b7a9f3a50ad92410141f6745ba99f3ee13d4b49c7a8ff9aee1c16d7568dd48962e54c6af665bd93daef01abd9d1706119b6a6726f6d010d4328dcd05a07b9a1a3296138a8dbe2ccc60b92278f478b2a9059b88a5d137fac06ed6f67d60bf39f76b78c27fa68a8787d18466bfe8425e7df86fff6232491f3b3ea4cf25d2328ef58201bcd6da455134aa58ced9a1ff74561defb4a54290e80c4a0040441b5bffdb1f3ae7d75079f19c923e421046365bfc1c2290b62893bbfd39f1312466c2f573e9292cca31add187323caaaa00707b379c1179dc0dda01d4b3808a0bd9f0d98389d874f6a46a58bd325deef0f6343ccf45c2586019ee235a62b433429c6c11d4a64fa5a4d237ee0539a6f72a510a068bc13f168a73568757eb951511d8be072ee995a81ce29cfb28ef21aba0387a4134b59099a2449a9793f92b16bfb56f2158fab166a6fd21e7effdd5f399d40d5592ccbbcbf0b343bad5327f1f965a06c91c80aec68a4b4f1b1f0bcab85f4c4aaa6dacca93bce9d857e63e9819dcf00b66402491af0ff3adfd83c009e038c9baa88dfdc4d84d0ee1d88fc67eeada9e075f8d8d640b7e1ec4f6e2c599546d73e3b8ba68b284ec49e6a496723a7cd88d811ecb632fc11ff31a6f03c182fd45714f40bb949b7ee1c27023c3e9d3b51ee4010ac250f8b93a9b39ceaf5dcdc20aec86aa592b87ae74a206bde0d4517ff3cc0f8b39fac9db173da97cae41818a020b0e5c5cd27ffced1131dab3dabdc1a16d3409fa09a90ffe02f0e2c814a63f77f771c08c338950933678e206a41e636eeef7eccb26a13d36129867c57f45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29640df3d4e63a92c3f9aa89447a534622df6687327982c029f527bcb0296d86bb0ef68a160821f8406e80697d468dc527509864454704735f63b39a9022bfdbdc486bbec42459ab1816fd970d4e51e38fd6ca80d8d38b584208dae9599bd033351c54d507c34a73f1f9075a1b1a0867037ae42514a680357bec82f3361d08566d919918066c5c17742087fccf331b1a2a43cf99214749d3b11794fe4d2fcf0c2daf22cfeaa7f761489266c35220f0c4ad397124263e50fa8d92f953c6598d1c1d7fd742dafc831715578af8cc69f12d3364b3104b14fc71b664973aca23aa4fe408a1b8fff468028578dde26497851c65cd7da3ba50b402d59558fa81168e6d2b53667b80160eea3efc46cb4331135aeb7bb827987ae273922e23dd12b9a13e996610d186ebdd97e8ebacf991bf05b06c764ae2101aed8d9435df29a5944c89d74b850339fa3ed02c4ef9b575cac2e390c71d1d47b93d1884b576276430f5188c0aaf58c0cb975eb22c144717d9b2be0075181f68de3adc09b3cf1f751406b161a9741a44e6510a218de5f7a0743d086488223299124ca1cc39d25900c8e51dfe32be8fecd4d59a2179540d3823cb886309259c02dcdb2e754e671c2ed5fc240aac7401e11c8ad65cf949d0066fc407a6ff08a6cdc44f4cabfb76b226c2b18d2e207eb64a46d7887714ac8933df904dd572b3981f5210c31647e76111176e221195c4f750da26761dd36581e6fc9722976a0dba230f865b5f3aa272175d9aa95c132d0b1b61de69f43c5cfd484c424e94f00053fe8219db2edc902d5f1b9cebb6a3a33cd2636629a45a7a488159f798750b74addb34320d2a3697d912d9deb0c84b0ed09e66287ed632a5a9b8ab1fcae2c44f0ee0ab37b7fc4fa0bf5720c7bf39155410a6f48b3032cec66716c823aa82227abf357192a24c2f94285776bfe2b2095e441394f7065f35c6cbc23a6901fe2ddd08030ea996c1df595a3a662edfdb2e14b40ccfd4ca066f8b1de4895b96fded60307208e65b0366d99e27757c7f5b8c5ea7ba2b8b42ce85ffa5a63b6033286bec81a9e9b0b8bbccfa3b462d128adb2b256744328237607e09aa2edadf9e27ae6741d1386e76911aa67bc01556c802144f3ad36c227063629076a4ee42a0a1bebbb9117e8a5d2c57c4a4bdb5b101794ec6698f60d3b780397e4f31fdf0013fa4ce3192426b35358b3cff64968cfce7e1703b9f96fed25f0cba7efd915189a8678af17b0c79c653bef6d4de3f4d82f5d637fa2c96098aa7e22c4a2f31cd00840fd540f5651cd82ff9d96b53385e5b4b3402ec5de95ea700c4bcfdef66cc2d7da5996828d3bc327043cf0bea0a254f9003b85b5b1663f114b952de67b6b6d9392fbdaf3be0c19dbfa5c0fdcb3c0c266c4b438d4da5823088c9d634bcacf3cc60b8295e571493e1c426928a1f5679a789158acb5c1e222b07fc304819cdebce9b45c5bca3f69ac626ce2ef80ee1d69b8c68755cb00aaaab375b4862a4a307a792e07913480e3f148ea57c8fbf648aca204dec8a70f18478c0ed06c985b5ad1eec902da96de4e892a3b464995b67fdfcebcbd79bc559175a4bbb53c7e58b46fd515ec9c83b01ff090e02cf5c097297f995ea1ed8d6cccb1980cb15a2ecae3b0a6b5035b6daecea417697a321f20ec088c7b2aa89ccd1087c062736a3c1a5f20edf7159bb712d1302847cca303dc2e073292c61f6cef1364c86d79c128df8d5d058c61d21284de014e0b82ad113175f80625f2c6605b2bd51a7e1313777304b1a7c596a2e28d3bb3e3153ad4c9c94a5781b54f423989f0653124fdb59a8d4bbb2f331262c99470b491f563ae8ffc11a22fb119f73b03d771a6e2984c2476c8f6166563b61a33237fe54c8b8ef65262748aba0169f7516796d647513b87d802eef7dd18f166c1aa92275b111a7f54c32b0d20942ee0eb175169c3d708472990024dfa90c921f8ac8802d1a2c59d8baa523 +MD = dc38d4821cdba91d20d3268350d96c065316b4e9028749d2b21491bb7c32fb63 + +Len = 74680 +Msg = 61a2dd249bc4508396c8a1b9b9507c113397bd4ad8fae03d2db8b8c0bef664c9b80680d7b3e8988dd011e2a0046c2cf4b39f1302818f767d65262a35ff54ef3b2b53a346d630b6551087de96638e0c8763549e5b874bd69f37058b1d263b1e01e213b03aaaa292237fb0fd637dbc04126c40c61d9337e8ebccdb4340deb3d96206cd0e7bd749153f4517a8cefc00fcdcf6ebf40f4c5995a84c33ba66cdc508a7bf0a25d1062a25f0894145a18562dc2e28dc8efa5bbbc320df9257579b78941934515d04df4fab8073b83ea2c3e98c502a9bfea667655b99ab8284daf1d563fd8e2a1edb09bf90352c03f99a5b9df48a25b0aadb195d465cdb8aa9b977e25e9ef41dd01f2d82ba58dcaae050f886fd2441a4fc6119ad6ab195332cbad4a96d438fb3db98f2a11330aa35598e40ad8d65a5fd5aff0e5db1df010376a6b03279338773a70e01238207bf2dce1adb198d967a462e7fa07302304984ef44b58368b703e69c490110ee23431aa6bd72d2e6ffe704dfa778f944ea923eff5e89a624172b9223109b7041cd5d82493fade17ee815c1d5403ef6615607b80fbad4a3939b2801a22d774c624d35ef1f68334d3f992b0478119a7340bccd7a85223f809f8b22bb83663cab39ebf4e89000ad1e1059525630e43277c9640f0ccb5b71472f2e40462c849296aeefc2f604cec25dd872b23e657fb10ae495f3f7473013002acdab2c074f2314a9a0c69fe39b1b11812a72447fabbd347999a1c26368cdb17ab08bf57a8e942d1248296e952f5f42f2cabbf0e630fefe70b642f586ca4664061f0727ef0b90e9d12d12e8825237f81399b4cb02d61e6fb135fe1817202720b662474ccd8cbd51ce97aa9712cc4b3ccce1865c3c65c290255efcb4803017ee72c074eb7cdac36cf2d01902ae64421505e8582bfaa49467b278655028c3bfd52283b68d64bd4b43231f86b1bce4c58ca6f853c1a55c3cff41cd607577a0c7ddaef134b9edfcfddc4acb192da6127ba897579ea5a655625dbba316aad591d60efe5317f77f618041501dfcfdd2b60d71c04d635f6357ad8b0643af77aa5c9471fbf086cf82b27d7a1b5d54a9aa9a22ef0a24c778462ac5900cf552645ecaab0d8b12aaca5eb89b8d95d34cba9485632b5b22f477b6955374b30027fa59a3c0ea97ffab6f7b3b8384a5c609b7fa3e772c9d9112e41b62ff3fe5ae57c004af7e110800b0474103dc663280b628438e08fab6b74848dc5770fa89450a3fc5b58a89c45de1d919d74f3c26477995d73dbb9e90ddbf2a633d4fad870e67fd057f8f5ab55e67ad6980840d68647a871e133a1f114a9f1217db435ec75197842dd3338dc24b6a4b9ac722e1e01fe28680d82d8523480f8860fbf5173056c25ca37a1e29d26b113c1572d2c176bfd91865533bd9ad1d3715a6630cdfac640e0bd13cf936cf07850741493bb3128e86c7354d0d229612404051dc31bf23c4a61b1de06cbda067ee34851606c29cd2121a588e4b68c86f5292c92e0cbd7bbfb014f1301ec42dd3734b4b9fdaf3fcd4a59936de9cb32a7c9492772144e49d9b557cb4f2b8565e933cd5faad60501adc65cd3705a80ca4812fc8c17d823971a0bcddceefe1781bee725af9083fe0de317d3dc4ca187a1ec54bbc10096dc6df180ebea7ef42344c2e3d60b27820ab311d137243f6940680910ef7cd8eae92d04972a8a7ba8391d999c4718cc5abbaf9e650f21e51c3b7b22da3005ed4eca52a7c112236174b98aa783014efb6871420d55b47bba34e959de1305f2da3d008d7fa12b4bccf424fa712a8d243155dc18c325df884b4dca827f5de9da0c302c2bd089ee6a1aa11c0b9b15531f1a8d4ca27457d8edf4c16f939b0d44121fb29dbc6f1dd414d7060f3c69b5fbb5f389536d755e4903632a48fbc5b3bd31715ed5cd9fbf64c28e9d6eeb719edf8f68c470d86acb986f02f2d72963e3adbead7f84cdd70128f9bdd1cbb7573276f1e6e93581b9025f9750b59abb1a1fae2010aefb3bc9658930c13da62e7f136a840a4211e7e4a50702d8ed241f3cca26fc6767d995db6f1dfe454b7e9f4db422bc2f7986797226173807f3d3c46065b0ba0e24807a81704fc8c685b5a867872810e2fa13b4e5f808ad6a845a591994d3df717f8048503ba706a176fbc8411ef318a14e3a38b4bd73e97cf9083bccb9f8d34de3699dcc03bc5e8299b18d5eee1c3a06d07a6362c8b162bbdc6deaee57a83bdfdaacd9597ae826d65867563576fbfb704b44d374bc79bfa3a90be512e05a8fb3cfba898d03b306094d9db1594c1ae369f939f76f0b1536d0e962c8cf069835665d132cdb30c562b7e3b53d3ec001887074ba4db6371c8ea007f2f4771cd9d373ed6741d88467c35eb55e385a95483110485644feb3082dad9f3d06afb5a7c0491b0756e96142be6a3cf961311e4793c5ee9e8b8d11608a6619c16ded437aa2724073daa269ce9a66d5071666dd98170dc1e37005e4ae1b4601f0989448eaf06bf84d5b7800641dd13807e64045a241547cd590dd7f5986e9e27b1549584110b2cce447fec7bb8f35b08c4f62090e893679d57c9873eb23be25a17270d435a9c328e92e8b223d8500e904b0507a358530437381ab54eb982f66042ebf6f31123986cc8dc1925285df4bf1c7702baf9bbe64204eaa84c35ada0e23a8696bbbf07270fed426aa93080d43e3e3659fd5534d467c320a961ac23a98808e236c4ebb0a7200901eed9792277b4b9285495f327984e7ea400b5a84cd9f9b3e61d361d86e0462503eadb8aaca6ca96373baa5bfaf89e3d5ef56fb090f7de43799538def1992a472fa9d7eb842728dc4a55631617bd000636d0b84d57cddec185e4f2b4599c747a6d72f62514c2759348ebe9abe4af1be314d8b7050921a234f1538d2a26afcbc3a58c5fbfc3415ac31b4564a2cb9598dbe05695630ebcd1a4a52a31c5c09bd72cbf403c41f86a7e75aaabfb8432381ef6829279ecce66141988b1050f8f2741bca4d6b2341d078ab1dd65d6d78361563de2d48c2ab2e6139c8430328ffc1db17b3a96eb1f99de257d9cba1e2625d6e7b7e864f5a42006753480eedfcd6d43ce726ac70f8ad4b8f8e3cff4fbf680607b6d7d89dde2818ce3ea653435524b6341a81db345fd365caaea5e5994d1fcc6b765878d6c6d3e4104c5194a5ca5ff43b12539a0b6012794e49a3132123e01d245a9efb6c9ccbded81cd85787b4eefacc7f2a7d78a1d0f264efc31c69cc6f74acd419e4d1d876858010a9106bbd685652b1650a0e8da56db8f17445f5bef46f7f6337b998f27a6492d85263b43c4283884991b42f8bf647b50f45343774456a169896de44833de8aad452a603ca03feb7b84ef07e454a1ce389947bb174a900fce4b5e7470337ae1285287bdcdf33447b7deb635d121769bf010060f638b5a0bcc7f35932eafe11746b5239a1f436e14e1af5715e9af49ac1f617a87848e1d5b0b2fda87aa307bf4b075e83f591b551aa000baef548583c76e92896ba2db42c8346234980d3db03f0e9abcf3a40051209dd8c70b3a2b8db585ad1d02e4fb2f1aef212d107f5fe8c2072d8900287ccaf07f3f66b0c22acd3e0bb91d9573754e19e373ac35271d8b43443436ac0c162850ef3d7f281409ad29a9bf716c77d1068db9609a512eff018b6dbaab407957d30995dbfab95950944006c601cf1798be3d18f0ddaabb8db26229c4d00396c534e31820bfacb988ea49cbd6b5067b51e0f2a92c5e88f750078f205c8d3f8ceab1a52115b6495b38160d9ff77558cc84d374141b05350acf66dcfb89ca3a824eb31957c0c8d768e882542b32290f32b9ff8b00c5bbf81b92380f62546f3ea177a305632bdba0072095e6168eb971d479ccff153366185222e6f1fcc3649110efe732ec5ed8ea6169b78a09140dc7db4ba297fc6cefded806d64a72e1917bf83ee9689b5fa8fe9e4a500aaccb0d586eb8e91c5d783f92d5c672e26bb3de4681ea0f6e18383124e54cc82ca6bba26eb6470957df603d7c70eb218090433438d27dc30e0af15da35ef588b9a0ecb24fdb806a0d2b2bd0e3d2fc4aee8998799b147f6c0e199013c532d0f6784167264404eb7409e9e1e211238157f2fdba97b56e767137ee1f3bd089627b333233e79559119012c08b5a4c8a03af5595b274cf09ec3c5131a5bc0d8a3580b01a58dc8a037924ef58301fdd2f09badef887fa300d6834248a2b80c45ed06bb8a2dfec6b2aab9a695ad81b0c3b1be057ce410f22a173c1779fb86e3d2cbba51372cf017ff53058486e8b3520d6c18986c1e99debed944b141b546ebf1d7f97893130020f8d8fc8543b52556327841d3577858bd41a533ac1a407689359a3a8e2870ad6631a5050546a34631b57eb042a9820c1255038f747e2da440207af3fe51e6667c3c3fc5a12a23a48918d7fa62ecdbf2726b6cce86e7fd4ea52502bc65c9b4b9c77b01a4d548c6bea0df2c66c08be6ca51f759676fd20fe43cb5ba0a40da9c25dc60a3291e3d0cf32d6ae4abc82122e2357b41e09be6f5e35b7519641c0eed292faf9cc8e87156e0836e893ff62710e89179ced0a7714ffa95c5993053f12832359a471ac0703515573c9279e718512bfa7558adff1b7e688049c215851beddf92c34a8532d437fffd67890ff77f344ad4f067df2f4ff1db8f541c7a2bd9ae9fabad0faebbf7d00f0a71d568c3c66ac3c57d84faa4894ab2377710e4b4c4dae0f4da1eedc8658dd0e2ee2ffac8784515206f2876eb41f98afd4547cbbc68034212bcf0c8e4a7d1d43b3ed15c621f53bd8a57cada80148ec4652119b5af3da84169d81dc69d394c8767d662044d36272b77ca04abff7b6b0cf3bd1f3919a04a5d8ebdfe7d6e844e78fd576a68d6373ffd5d384e51b5e12ec32d5bb0ac685a59f4d5d12b43b533580750345310999cfe91cf2500624fe03a65769f86a627a667b5f3b42cb01da109e124ffa48203f1f3873202d35429f32e8263eaf9bce42ef40f5cc96b591467d464d00bd743a1b0af4c1a743fbdd0846b9879e092371a5e7f6f65937f9515e23820e60b83bbff73926f0cdb9df5d02e82262cf2e8cb26af6a64c2a4d1fabecab593db51028179953d6e7dbb76a2a55c0299f1a455efb5bc557de87ffb006b6bcd4c348f0c0aac9010a8e186722acc975d926c7761fb33efc1194b87533ca86fff986617e8de151ebcccdceef914b25b037df1eeb5941dc43dc5604d8305e221cd26f48e21622f8b8238c43773f7033184db267c9930ffd40c10cb5502f2c52ba67664445e3d6851118b3c128b381b9562288e93b5684689ec79e1104b99be081be549ecf7d66c19db12a8e2975e88011be47ed672908e703f7f4611d5513921be11f9fa76b387405f8d9f2a30d0b50f22ad9bb759403401857f7ecc28cfc322dd8b18cf635b665f0f5a937be0454f1a16d249b8e1fdd3c84f28dfc1ce5bf8662a9f0b0e364475e07af80a3a1e02a2ac58f12d5da53ffa3efcd9fd753e8c2575f5ec652977f5225f22e4880752cf4c406998ab080b7cf3d03f216c68e1d6e6ccfff1ab9390e4184587ae714616d1c880e927375a8d4b6d26568d811f50d2b8f5892d32ef2997b40e19c47a88e2d093b8282b76d7c301d29c037cf00b13f6286a221dbf9eaa96824369b4e8324f323a80d713ddd21556a0bba68e1dbea3b791a56b3196248c570f7ff7fe6ef4a48d2965568ed10c2cb0740fb01f8e9c78ada131c5175b13576fb80e350f63228b37ecc026eaf4d85185a902c0dfb7371b3eb399b02d72dd84371888b176595e7bc8f13bd8c6bdb92c6cdc3f591d2c1103e16547cce271f5ab43ad79fdc1d60afeb6d332ec90903125dc6a0fd97651bcbb4c22b66bd4dcfe251be35c6a505dba7c980f4fc2d710d2d63aff0ed269cc9ca9c568702d8328599a3666aa87c054ef8dd311ecfc08c410a62ef7b6c475f12367e3c30f826bc89a631983dee680500c9afe678518b40e6d2e1ee092301964037e2dbeeefafd4223283bd784072ed3a43c808cb28957646ac691462ba5c2999f4519b89907c639a65223ee145a0a5448eaf00dffce617a7c181c94dd86000669653e4c882944f3766958141a6fc1666d1ec357c7687095239b17594251603ee446e1e746d0082425e64f05f0b8e26e835080e6a3d7f368f3b8180fd4b851b7b272cb155fbc6e2027418f2051a5dbe11e18af570fad684a6ef7a5251efb52e5367140633d2f059c1d138eef97e71c72afdfa51585595ddde7e235357bcaf25bf2bae83d69a85cec59c4c4e04ddd2277bb3e189e8f5c328801004ecd9577ae9079b839106fc8e2858fedd79eee089c84c29c607e983684dd4cca6839d6b1e6173e01a998a9f1251c01f72d77f2e9c90e587313222a68d3322db90826d9ea4744b22fb012b2d1930452693d07f7016698df6aa725d0738c4b2654a4f0f98130cd688af32b14bacad313cc8ccb54dfc3a8e9eba2f604e74e7cb915d544b0273105d3bbd95e4a3d1b0ca889a33ea6e58eb2ea6e8d1f4224684b78750f7eb84cd672863ad918bdd92215a33906de67a3163b636bdc0e12bb884bc70aba2b5c528fb7f26088d70a1f7e8276433e2711a908c6e78c065ef12d1cd2374f7bc736e8cb3aaaf55f3599507ee7a4409fb53f67c4d9d927926e67f994834babbadeb260177f0241c2a0f64ca199afb9c1e53b5fd8e8cac706c8d1919dd366b7fdce696902f9baee69a5ab44852d1b074b43bff1b3784ef2ea0ad89587573aeccb32b6640c3f17439ab012e8a82658b1726d17edf31cb823a280e765ef631ac2899843d1a1c3b9fa0c5ce79978f9fb50fdaded75062a98e1c6e7889344ab98c1ef6b7c32420c056a050873d7763c756e43a29b577b3683b5dd8b36ae157537733338da168b8cac2c3b4f52433e425951cad7cbe5a0c4fb084d086c06d074695f1b6ce7feecd9f0a9059e0d4d2fc009b419a9d9a0356a51619bdbb34e140dc0ddfe84204bc4588588fa810f55c92a290da6b55f27a77b394a407186d44ec5b088531b0d9dc0acdd149074c30da8d519b70876c6ec559c153ae1566149ef20cad6cfae2a65602b69f45df5d2d53d756e48a56aab5eee2167bbe516cd0f83a37251ba99e1230178bea0b990c93cf57f994b040d770fdfcfc335d22f44a59ac24971aa8adc5743093d9249b1f0a56f581d36badba46f88eb9a312f0c429c9301a2cf25dd7682a341795174f5e3cf19938c841051ce0e98096f46524a61650ae630c2a32e3a3580d5f466c1c93cea72b649cbcb0c5e5d7badb4ede245fb9f70e455e4a8d9b1d08a2b312ac69846b81934e7664167dfecb23d0d80659bab9c538094bdbd8c57f41db5b245ea0fab985b93e7fc0a00cd3cca5bdbb642b7ebfc314f6fa647a2a700ca09ea20a28bd60bd867bdf58b4390be227e91e81037272f78b56936ddb929970d9c6b53969950931e04fbdb4bccd4f15929d2ae347607b6b836f407e63c5a1756e198471cb4a5ce8b100415d1e91466ecc210714610e8127e58b27207a8a322347e0383db6a300eadfd795da444a99f4bebddc9cb7442d319af070da88aaf1834d62f822926a9e3f531cdeb394c3efb050b9d101b3cc279389e64435f5ee889c66e9edaac765ddf0f617477178c3f1a86b5c10cdbb6d165599b7cbb8291b9f767bbb3e5cbd5d6603af10f59b571147e6f5efbe8739eea27db4a92ceb8dfcdd1a752114c0dc19e083654e13b998769872d8ba06b894187415c10690568758eb8f3a63975f8d63f475021ac753a5ba8c52fa050ee734b33424a7141e8280f670ddb4c9eec036014ae36dbc39f2e5a5cc904518fe9c81878ab3501cfff6e19f150dc99b426c41bc89d48e7c931dc0fe00349f3aff60e35b1cc9a3655a3a101b82266320bae9145c59514da1fa5d9e8fd044f2b539b9c2f8956e883958d777325e3069a17fc119a9646192759839e71ee2ca25cfd33286279baae7de21547cac5234c366b87bb66b4f0c453e95390374e1cd20d1f55097aed686a89ddc398950053859b78ea05569c55a4e4519e55b597356cb03c99d5d55f009b4beb10f05e7204713dc29b75d6c6c5495d24bc65595406c0eac74a041e68e3cf189c95c58394a66d91cb048363cec01032d53635aeff117d11521e1a9275b2548464cabe90e2c9f93c14cdc47a1ee6a7e9d5a44d3302e5ffc87f6e9fee2fccea13c6281222e6df9291124fafa631a95ef6b88f226209e4d77481b3fa9dd1c3fe5b431686a61b67d8355612ab649178c3fe004f4bd87eae82aa0b96b10e1617ffaf6e4e7296eaf3189d42af4e41c8e575442f7d2fe2dba39fdd9f8f69db57395ca4aa187c81eff1f24d8a8e1eaa426fc18d9881553dab446d93aff67b723fb8c3cf890cead394f4f3aa7027831a9888572efe04423558319a40af746c5f1a1693747db46418746c7b48a614121f35bf949ca26e7d567cdba4892071c31e80c36a581a777eccf8d917bc9edc52249486187b38387d3d83b2fab1a586f62d0e5fb6dec1fe817dbcbb576accd8b9d75f7c413f21fab84707482b7e912cac071d3be77d068212871a9398c7b2a1cf83d0f2ad5cf21db50f621bb52495cb2b3927f89ab77adaa895acf27a77d2bfe9d6a399cb592b19f9f34e9e066805eb1a3fd9063f128140ca05ee486aefbf9bbf2c41c209b82f980d9f075fbdad7414ef878af55312ac5ced744915f883dbbdb611261c16fe81e0566f36c1396962d121acc846553c6e97895d67db91f8b9ae4511eaf84190c4bb7af0577318205498372c1b69d3f44a89241da509c5a2dbe602aaeaf738136a61c1aed3e5c866cbe2b661eee05ddec29a54519b411216a4ed6538b089590ae57be1075689c8a12b3925fadd3a416059538085b4f1e5c8c73cf367d63f22cbb8725fa639ef97640513ec6340e82d0d913d4f267c9cef3d954d23a4b68933ea75ed73e80877c323ec0b9017c46a7f4aecc006b07cb26cf9a1a67c7bfbe7fafb8035e4694cc2ca654278b7a4d241c6bcde844db01fd30d616ec16459f0ebe65379f4278671412bbcaae3a976e50e81b7e8e28aa1e06f3f197f3681cb4ff594a6c59093ec0083457e77f50c2a97113ee09e63540268f77096356e4b5c63a57459e5a3dff694f9c63f4bf5562c42fa6cbb519f206e13fc504c33e13769d66c03d16c96522289252c83999cfde8834a899cb4fe86217bfe4ccffd37bc8002c9d1c1dcf0a11c6795c6cfe3348a0bd25214293af9dbd8fb6dc475f3ca614b834f5c9f994b3330babc4398bb5470f2bad19ad55629b8012cdb65f2ba21cc08e25d02cf23fe8f0bed1921627485593997299c259906a1168ac79fbaa2c633647a8362d52f932b0a992ccea1c14f994d11ca869e65f90da59fa2d02250305dcae6430b45fe917db92977c9fb040bb7a99544f8a46fa9741ad5fda5ee44e8a1c8a02c5a9633821d94288a91c2cf423aebac2950dbf8707b02b8589f62f36785da229fef4a40dd813810c5c49d85aba96fc0d82da9a2f668e9c1142b24ee35906bf82e17d6b91c3ef16cb9c0efb97079b26dd1eda1f193e43c8ae0b7a887cb481a9b4792dffeb6ad6cb6e7153ded6922502dc72f3956e16377702ee36272a12352868cbeaaa445531669de300ca3de49d56b0850e465577d271b5f2ce7114fa8a0446e19db2c40d66b0fffbfd05f48469eb015f1478f7e87c7d701f2aaf63f4e804f5c22f609219df713dc032d724faf3897809eb747bf19d65db7e33283e88b7f21e7686fcd7010271fe3b888af5cfa2f7bc8a7d820a1a9def9d16cf26ce3f5f9468068cceba4e3977eb72e5658e8addff76eab0e9ccece4e45ef0e7ef3aa048b27c79271d6487eb4dac6f33af18b30e674e326ef3e8eeda0bc81264ccab34db1601d74133fd347fb9e83a58b1bad39cf8eb699ee687a9e72e81862c0549817e87a028c156acdd5f8447d93eb39d71ef7af697280bd0a37413315429e23b119acc01758fcf990bf2767356cbfce8156fb516c4f3aaec66e783818241abaa6c98aecbc593e6ed45a05611b8e9d6c4478471f4f9e90b027aaa46181a5ea7bd18def5a721b5e2d014d1eecc087f8759909675383ef1753b652324a023671f9d9fd6693c90dd0d69ffed04494d7458ce770d8a8999f332bfb1bce5bea6445b7189e7d1331af3ade18e5c61338fb2914c8551788f14d888b5e5dc501caadda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bfd8b123881e3ea4cf2bb2ba7c955b467ceb9fee6e98481d9f0a204a3914be7eb7919f109c4b79b3651bcbb4bc51b97cee55175c9f8fc48abd853966b2436102de00ace244fe5f0083b22e1309250c11839a42f39771beb8d64baeacec6f4eea1a6dfe20e701989212390062cadafd0e2101473abf06e1b0d3a5a8a550602d3e551fc052ec1acd72f8f86c266938337ab2d14eb97d15d2799ddb4fd744dda504765f1801bd12a6a61f3797e94d07575d1d5381f93a683c1b1a35cacc31b05e4665752eb4c1b0ca386d3eac32de0f10c04acf06815fc5c59f34fb420c809f010b0aa92bf360bee22fcc54d18a841807aa218c05d952f5150cd274de1d9773365c4d4237460202959423c32e78a7e9e3238ad4a78a7dc0d56adce9c789e0f3a440168a79360f468c6e59d1ed84af4b4d336ded131b47edadc139a224d8c1e9f4bf4dc71a4aef506ec558c733360406ede3b22072141746441ad3e71e90a41bcde1da42410b0be8e4a207ed2b170ee26a3a41b5ecfe5791437c9100dd3bf053d8afa54317ffc9d8960c4e8afaae36a76d4002f4a8606e9751f05b3488600d57bd309612c4b092e72b0b15e7cb83e21c9dfede25cfc2c420177d19cd488863ef236c96f66fa6cfdc4ca7444dc41f7b0aa37bbb8f88acc1f43d2bb311443a5ae5b26c8b394167e680a0e9c4020d096a3926c0837bfca7cdda6a021249a5fe5a0013375f21617d419bd0d87b4ecfc91671cfd31c31533a509b460b1cbc925ccb07eed5f8f7f77046f5837c527b32e8e67a46be70f9b4eeb2ff7a4dbab434dd15c3ea4f40022dc65f5562de31d05ded441b3289651b474a5bceaed0d577b208a0fcb0ac1d8c2909f384140501947960971e3b3ae5de36d6b3d0899d534e3566d479e8f479db13c0694b42f9a810adca46490adbd78ca61a23cdb4bb1e81e57d1a0439303b3814742b7094c3108c22b2bb654773226bc19f118cd7321c58e9d8d8634b674beb54aca0bbb16a1f4fffa05d399a0bb0c4afece6d6990b371b6afc775fc7a1913cfaf030f642f6bfa36d1c948fa9aa68de98890b73a24d55118f7360c055e6f4732ec843e7ee70d7ce94afc82d1f583203a3ffe62b9b00608381c4fa4e9c3f5fd71abd41585edf4f199be061dca21df679f8d5e1c62c2d3fb96777acd145b3b7b1e356930f3a4b0fccab38c764da029c89c093630bfcdbdafb6a14e010f74be549b41c9fd429bdfe2feb3e638d710e0d7b23c2d3c3b4121991b224fdd45b0ed1e7b396ce71d33b068a847a9b1f0c4a2f9748e99bb6fbdae4c2662f6be5190463d3084c88ace1d00e249d74d8e156bceb25589022ac7a3c23d8afbb910bd8358454dcc6364ffb81ff465fb5839cf46e2a6c7a3fd06dd93fbe19b452d90e40aa1ab4578d3e20c858bf38f2c402189168d2b5d77f0dc0bfec9dce9e7baab5fa6a0e39a0280ae8f15c37427d29bf1dd3b0cc4896d7416fd449a93e94bf6cc9ae7d492ce01f006e1d954fac286d20736250016de1d0d440c161c8b3bfa4881303ecb2d53efb8a7cf50cf0bd1d178fe1e750586cddf02ffc2e39e37346b46458a2be307be3420fd821c800be81af73310ab6b88cb4c2b86bc2dbe3c75277696333fbad67f67ff74b48d168f77fbd3429728c0b168ecbd854264eaef70b74fffb5dab10e2a037a99d123011b03cca3a92c8da38529295f780029a2e4b98338fe7c8d7413209f48f9629ece231e35dec33b3a62788e9a77eb8fdc8490b223c7ff01d87279f583d10fe320dc2c19affb4d6dcfac000ba89d3c2bfdee97ed01839de04c1ac73b69b949cd89c9baa8937f941eaddeb012ec46066f1e7f5edcb4e2379248fb7f44a958339c0a05432da8d243d865890d56ddf8c6e3be855a03a66a78826f8316c3db3469d9521d5a2b2899b92587197c29e62bea044ebf1df46e82cd5b1050021b67d4390fd2806423cb4c7080732e811ead560c6b5f7b1f2175d1a266ebc0d5cde7ce3daa0bbcf599d9510673ca36b0a78c1d9a635157d20d44dd84405274064dc378e4228e5183100b5df769ecb09f471ae91096d4c3db3a63ed0f71d4e8183d936ad923aabc9108b9a9afed6b2a819fc22f0b604a4d9f1b4ba69065e37b9fffd02a6908117ca3f66ceabc78b6031bf42a75e77a325392327480b3b72ecce216f22e305a2300306bad9789966de8d2f6ac44312f2d8459026711e5cfe75aa31581ecab848fe5cacaf416b3c0f33a2b19d02075098c4e682dabb0a32add83377df7fc573198abe7b6c90ea772d675a8c03e712f93ef1023f6ab03885241f533a2dcc3bfcbddb0fb91a4d5f1468839c0ac3fdccd58b688210ffd80e1d0e52f1c4698d941cddf939afe00131d96a8d4f7106cc9eab28304f3dc1baf5c11177f55bbc4b379b21ed22a5e733c88fd8905d0af3dbee45bc514f0ed7de563bd59846484e8c8e4130beb4e2566b8cfe5d91ad1db3b22569f0d46ccb6acc975103bcced346db00d6b374d5b05632e5ed9f9a27f26dd9ace06cc08dbba10d22cc43ec7443cdbdf52151186f550f0e3b2546b2b3d04ad9e972d71d9a27a5285d733c2f20e20abcd5ebb3b1691aa88af66ffbe23901723846e6daf47a579da5b210978dbaf6265f09fc8047ab474a2b7e916631a1cb0c812a061c4c1793b20d8869fb0e2bc8482ef71c61e31d241c7b3b532ea7d3774039fd98462d58230ce6464811bb59a099b20813fe8ba7f94701967ffb4cb8 +MD = ab3469ed949d12e4982255a2077dd48fc5d0df72e7e8b5bad56223769ee73ae3 + +Len = 75472 +Msg = 1828d9d3b1e744e0e28bf9243190502559d582cbf1ac6918492d871395d14a054d3c8ee8d359641d57ac125df8e45bf22bb0002761d486fde47c3a1f02d073186ec817c4e34260040a52e0b69ed9c3e5ce59553ce307c4c1222226c0f484bd0444777a4d29c9c1ffc5236c186d961264097789f4be6da9cccbc853dcb114b23297eec16dec170e754ec7bd69ab44cfd9a6b2a5363c2dbf86a715ca5c82a9da082fd8f40b7653cfce6ee7db93a10a83ab6bb4afe9a3708e587db29229af6bbcefd3db190f0da68d71ed2bcf7c9711b5422122b2f73c5d9da81746b3298081e0504d9f3a60fa38cec8933aa00ed480ed0690a7b3474f1d74df3b7a36463d14ce9163cd5ee885301d3a28bd562fa280b45f7fe9bcc124d79b66b2f622672d4b0f1cde0d8e8ef5b7ff2f735bfac9473990b5b790d44d02b49ba344617f74994f2a578506d13a94f4fe0f3dbd93c30cd20c70014504d333dcfa00b8645654c947a7ac22612fd4a810a1434e8a29053974adf823b0533bfd7643e4d8a6aef1055c0f827bc5b0457a3270316e6bc5771646fdb5e578c96da9aafbb76ad08f3295b6e8405adb5d735283f44265086d01eb71831011456e527ea2ace0378901ffc07cbd50854b3d47782bb4defa082c8bff1cc76f6dc14bd0c683ddc9077a0d40d0d71319c4bc58a93351396ef71407fd9b70523bc39267d0c77817d9a24abadd0bee7403e1d7b782cc1d095822d3083f0795abddd960ca3bcba6e178cfa211bfbaea6776a24361b88bb8ae0643ee36398bb25abb77d47df71838c30e582a18cc24f275dad1a85e35b84ab0de240c99d46fefe83f679587eef65445030389d9ed932f249734b0b7df9bfa954a8cd63af6fa75dcd0704cf006af23f0c099685c0b4dc8ff15940173a07cf1e7b142f32088756cbed559a1c1298acc4babe16ea70c9be68bbdb8439a5fa2572d7b0f0c537328fc17b8eb3b013ece77df2da544c4dac5b152f56a1f35045653f00fbbc9dc9d5b4b6de0eec3b82dc44e32afab91bb5b1350db26703c4b76e00db7d70ed1c2f056844bb52ae0eedeb476ce97bcfe9279cdecaeb99344e49f88ae0a3ad0cd0d5360cd369f663bac38e51a3b4ea033531a3aac54149bdc0866965e71a0c864c6adc34eb8066c7cf925a160ff3d1fd70628a3b954a150aec0b351447571bf3ff4e8c5315852024ade8d2e70a4cb0192b18a503a36c77a62136e02899d167d069febaf9b9febf14d6256d573b25f0d0e5e28895883ede0a00a80f15472f5ca60cf9ec9b6133a002e8d69de91af630cf014ea963bc27d4b0faccf66ce7b776ef58de95aaa3ea5f99567ae91f1253ec7e3dcb8be0a7bde83570144a91f4004306ee0b4ac9fa895a229f90d36bc9b58038dbd7a4bee3678502111c7016e4905d973d1e705bcd773c5934a6f14199a198b96bf18830e7cb37a15e541b8e31fe031ab676aae2955a5287b62ba7431a9e926a7ea7aaf93d4f7c8da849814a849ff00bfaa25ef0faa9594874ad89e2c50309b68478916a4c7ac0319f6b65ee24fc80e56a2010f965ca9d06209afda311756b380dd2b026adc3af3794481ddbcbaa5231958e458e5f54ba6b2a729706887c33698b449b90c9b0960a375e3db5c10fd06b0d3b81025fde2dc202d2da7fa27dfec57d5cc84b38c81123e91c39eeadc3880c21b63807dfad63b53a2a2c90f7f139c66479aab87380bd0f3a1086f8fa3bd59f739cff016768e8bf40e721cce18c5106c129d76af260d646aab9c9672eff659f934e2a717f87494aa7a84e960795f0e123fbb2d54def1944aba665bbd474a476d1486efa909ef1d1eedc077ed2a475f00d5de179de91d293bd34e06953421edfee2a20ef43067f0f76f0e109cb4e7cbdddced7db3cefbebe7003cde243de41152a51d4d1ff544d3de0856fa959ea519515dd0a7bd15f1a1f348182c92eaf97c1165e1f453e0ef8f7bc1807e0170eb13065e6fdde44769150ab4ca3807c3c9f6e42ad54bb77aceec75a174e408b3207fa1eab26750ebca0dd24a3b4aaa51bc4773fde19a744a4ab175b01b74d1eeab26cd06818c28897c52f31451aaa31b3b3665e5ed28b1d8cca822f75b7685a9f6d030bcc49695a9e7ac161af5a01ba9ac8c62ebe13e97adba97257d1d314b6d6844721363cbbed473e2e36310733a8478111416a5244e507d47254b4aee4cc0694c3c144674cc9188be01f7886c2733088d206e2222fd497e80cb67c8f5af2d61ae36c555d8e6698e0619de47d30b3ec3c831fb3e80cc212409bfdb818e9d39b8330730794135e3ed83d22033f00d2e1089edc6e285e45fd6aca8af5b013e6ed7a3575d98f5e0870dfdd5c6360a568a599afcd6f77a6d8bfe2f2ee94095b95324c6d0529b3d10dd563cc9d8376a0dda05c1073363a78e2e035bfa9317933770086418196b61ed6e3107575c1d595ba77cc7b6e6105470cf4df8b4b4c843df4eec44d7baeea99ec10427275cd21d68772574b0f6e4c93bf644ce04553aedda74362fb63b0e5d4c5e3865e0df3dfe5bd56a8f9e6bc94d162b50a4907d57d94f6a50ed5ca6b2c41ece36872aee46465c46b2e2274ea62a29f7d9440334064f67b9a0467302c2273d986555af90d53b95546633f4a662a69de1477403822f964ae89002a05825ced0442c9914cdd2272b86ec4bac7be70a9a7202fd3870baf71f7f86e88dafc501005bf51904ad25504964adf2f8d51c9e473072a74c0590ba0e07ecc1e20f8908f564279e2539b7ff157711ef80bde9a9cda5ff39e44a9727410729554681592ad6e729f01f786e7bb746810ceb3a36755459127dab45b885dd07a56c620b1db1cb6c65d79b73330e585a630fe255eb4803d311394600dc1e0d8fc8cedeb8bde3fe7c421b4130effe203920c10c15f16b029b66366083e938f728fa42618d2209949e2883b8b98894366d21ea12822e267a39773c9fd4c91cc359a3929394326ab85b7fd9a916e818c37ecd529ba48bc09335ae13abfd62129aab2b841ed4d650903ab0e3bb4df5d2eef28bc05084f083741872822d069e61a4a5fae1a755f70144c3216a97689909e053c5fed82946b5466a2a52cdf5635308cf7870d9207bc6fd7e3b35e46eba07c028e2d2dd9b739f30b1404b32d49b2eefb10efb593c4ce7e3f4660e4b684212b7fa4a0504e361895b771b3505aa2d3b80d42248d2b150ac1dac0bbb745d1873ed50645ff708f6baee4323d8ed8001c2e4bf1e21ea88715dd42e90050655247289b29aa75e121c7c129ec0fc935dff0b42fa684c49c895412f035fb4aa594e56b4a853a7e00aba15ef0f5a689e490f5dc30e6a919879a6a157b2de90076f7e6995bbf82526f7b8ceac1e59e5b74d19028f828aba7fa38bc573c37760c6a29cf15572efead8e1fdef7253253b866f0540cdde328da54f2cf5acbf91ee8ef790371b56a1be9dd073c068372632b2b9bb60a5abc9d4b38571792a2d93000878428310ee76681dcd0189b751c591e43323a9406fb755504b42981495e75fdb2c9b1d5bc2d7b201df8f9186296822c3e42665c6b563d925ab879c927ff4d3b01b814c265a2a62f10f0621fe4879abf8d4aada5f023727daac28cbce7422242f4edd59963fd84194644c8147355ef52a0b985231e09a0916560d6eedfbd919ffcc988cd5f84a1793e64af9887881c80292d91367d6f44581b21fcc1a9d817bc99d982d0b0de7ac959de8d1e99a48ec28705365276daea4c4c7442f7be1821234cac7845f0616c743920f5093221d2843adf092992b2eee879e65dd384f45a6e95a0cd9fa6c413245cca5bfae986745fb5297e1e79bddeb713d6b1f7a6f30ff8f554e7304c7cfb34253936661858d0cfa653099364223622bae3c3d69caace4cfc4779ba49d2813e330c28dd570f942e5f1a203b1aa691d5df9c27f2ce7221f51ae6e990278b419cf6a197c32e112b267fbd7677d5a15e2ae24e32dec4ef876bc1b1bb547dfda8fae097f7a9f604023268db60dc5da917ac639898ed08898b2b91366379b5b053b2a16ded14476eb5ccaae273cafb343ad4e3f9beb011c689bef9f376625739ae7e9971dc74aaa7b26fc67123d636c9542ee3f018ca692d2f807c6768b0eaf0259939724a5d985584964bf5f590a8dee034d40a3b9e8733c93a8910bee7d97a55ad11bdbb3188eeb8da9bef7d5cc9eb5b6144a69baef4610327b06ded79bb4ebb14b2d2a38304d9aba736cc0fcd0285424ea653bd6e293b59e2730d88e908d3d28a8d4f97e494ace976cd2a3153fb33215789a0157e9e3939f5514df5a83aa0185901930cb890ef0ed3af7886740c5b75166f0a3832ebc12fcadbcdc859c94a191ad02b7681b20668485e3583bfce84b9f5b7009a3d6a99a7fd62fb85505d28314a49a769d25089a24f69ff9d99ba356c8ff211bfe0c2f93ee79755913e3ec11d620e655b1d04ff29534325589447e4095fb0bc2def6d865123d97a906616bb19ec7f03dee437cd89ee8a453931f0271cbf736e489bc2b78b3cb9c8f78a4d6cd3541bf149aa717b309bafeda3e55b652359aab6a4887b03599ca8cf2afd7b5cc64375bc4fe23a8eb9c5147d4d40e23499a8d713d637ff0028be36fbcf4209116f151cd3362e0b8e8205687289b71cfbfc178904322cb724852be4ed48fa7f013a4361c4b0d05ce115c70c6bedca7441d73011166cd94be70b6023022c8955d2b478f50f249bb73d01a480d7eded70ac978d3fb8dab015de07f581e8ee7125dc6a00372125c2a2e8c20866350eb2aa72d989456a0053bd60275671f0033457a4c793b88928f7987ae37d1d11c49c8a5af9bed2a862369b13d60d83b60f5573b2598de9d5a2ad1069c27d15eca41d88cb9488580294db477f807527a96767028b9c595b652755934bfb82f12421b83e2b268055f70cb44af9d337ee58afbb6ca70ca08dd62b83a987fb293f56c1ff03102c314d043e440e193ac038325cf54a8b36ede19723a9bbb45dca4103095480010215bda8ae2d096423a8b5d4d39704be878c0736a44a52377ff0b6a77c4b2d8464a81852d0b1e5412a5bb79eb80333979b155f1321e7f5a7fe3700b27f557400b052fd915a84fa66bb43de1e8edc4fccce1469eb21053e8c35079fc2a705ec0c71c0ddf28008e11b531b99d2ac84b1c4bd03a7fd3624653ad0ed144667df0e0e355c29e4f5d011f58e2d6b39b59f21f5c45da9e7b5b8225a3e41eebc5643529c579f71e7305d057bc8f3d2d22e7df8f6909ce0293442fe50f9c09fa2e6c5422d65053687a41244149029612a6bc3af3d9e5bdb30465741c58fc397888de76547ea17f834e5925666802886b111e2cd4149e4fbab4067a51e6cd576dbd02c24526362277d595fa4d7f56bb3f4a56ddb982ff2d1e8d6f690c21d60ae2b420617f34d5e54df93dcc7ff8c7d89639ab742a8bcfffe776e868d671e1fbdd55807a8a1247700ca098c282391d8779c66719af97d56c1d56b89f353eb4d169886a36ec26536abcb4ef05e0ac206feed9d0f6d10eda1dc9172837b3f019358b3525bd2fdac37c661c8abc20b79739005a30301758a6baf3a08058d8efd5cf4d44fa36da955e4d11c0b110cbc44c8cb431cdf20add01eaa1d908292ba3b346b69d31c976beeb86c588ac29683a05111446f0623005b355ddaa07d334757a43ce2912a08abf33ce8a5cc22e7f818b702781e0a8143983a4aefbc77d7bcbf16d9ecee4e09efffece69243d479901a650f5cbe7ed3bdf3b7f1db48e50890ee26d2d75f1b43be6132d69c8639e3d211d59870a4b592f61a18d30bda574e5a713ea84077f42e8dc3c9493307d58f34cba34e428551377257e77f1fe541017fc4c8da96ad7b22d493fabed45d2a043e74389140b4d449b9599e46860e24da87757fea688412d9295e51982edac9cb65b81ff209d7b132317bc7d9cc999521f7ffbe4834704dba028f68757115174d3103c3f0fc426a99815adea9522bf48047bffe746916ae3de6b3a9c769a0a51226e3cf1e96a982d82f635d25b549d56e0d52cb0f94db96dd4c47901e66e1f5b2cde48bcb77617c867221cdef7467ba539f44ae7a3633aa30b9c7a5daf77d8b978c62a4880d0eca2d1012ab570dfa15c9a4021344dba35ab0a5c0659da9b7d948f8fa83e4c605fe247fb27ffce0956a48821783dfe3cf2ad596ae59d6dc45513f7a28b46230eb7b15278da6619abe3a58dff18adbed0b8d28130dfd073d9a95f3a659a070ec23e3679e00c905aac90863042ca2a955ed1410914bb9af1c2c19fdf429f2a14643a9a449b852599f6a570fa52545c8ccf8323798043a5f167e5fc6fa060563edcf4043b110dcedc706a8a71987eedaa0917a05adb3d967ab05d9e71e7a7349312b49de7aa6c332d0227fd1f7a1282f8f5d5df338d7218958570ac6d7e3a6c1beec28ccfcf69fb939423f08c61d6c67c7b04098cfeaad149ce684eeccfe1a5de5965fa7be6cece170ea78c3eb6945e4084ed45ed96ad699e738bae75416687e539e60f74596156bf58fbf8bfdf12f54cf6d9bcdfbd42899c5c22f1903c90bc37788df2418eeb38955b675d97461931a6bb0e96e9db33d94c717442c52826e9dcfca2cc6aef331fa1fd33e34c5170ba58b9d5fa94584600b59bcbc79d6ef1b9ddaf6dc478e203b1ea27a6b1686ae1396ada7510679c44a7dfc06da89f74b9d141773603f2d1219678c209f073f83256e2043801ea0ff475d3c9a30e54a345dc103e44b16023567753b4a4c7f3632cb8ca2164f5a5192013989fb52142635f8052ebe0f54a406afc84e7bf5f721297082918421321238e283628eb08f31dcd65106652f7399025cc1241a2e0776f3bed08d11a84e593075db64e8decef3758345297e2e0b57b4f9005ac95718be1df106e34347079d3535a1ff8e2f4bc1bc8951e66d8d84469afef650fdf3a35d04d186329d7fe66493ac6790e3349e42fe52f7ebb7b0670c20e923b51c964fda44baef0984c56335f8449cd77c812efdd77ab797e1493c0ee34208e5c9b176bc6a27a1b69dca1687cf88c221de978638c45b01797eba6bc55e94267179d7a089c1a23ee84cc078e07603780e7dea3caa318e761ee4868ed5ff5a0cd6a16b65b8f7a5271d167af2c6a82f2efbdeebaab8cb8f85e6b7301da751fe1c83d50f2ec088caeab39f4c2ca0c2663788763e58faeed8a17f7b3980cfd30ae60789157446d16e0a4a2ba67f0551635222d834efd717f45927852550961f1ae9e04220dea27e18f64f602c727ad190ef698971a7d3d35d3d9d896615b07278a89c74b3b669fb564f41b1409f67cf697faaee674977ad8d9f4fdc8e489599de92aaa530a413c59075bfb3857e62a76773858ba82d4903002e9d12f051cbd1a74879584a10265971fa17cb6d67e1f6156b87f596cbbe805f3c23a15ed9b9d65d3aa71242931843554cf88d5b046c47fde81090c5bd5e81f578722c0c48e6047ad9b247cc95700fc50eb06df0dc67f97b59ae01b77a8f946d43e7079b17e6e88aa6098d4aafb41b4b800dd1a1487b973830eeacee7be844112f10c88dcf22ff07303b374f3a5af253713f7cfee10dbd9f1e2116dd49fefd9baa7dd356e720b46b08c5fa3cdddb216732e3b45c2e94b92a6203b3f65d1a3d67469cdc88f866a54080183aa602cb251145891c6b99b73664bd0528dc3de0900e73ec38866b7b4e0246c07d1d319179cc39ae198fbadba1c88f83d9f154e881ebc2ea8bf1c8c51b3acd4d2604e2d49c028fb1304afa7877e04a2e4bd84a787fa9b4162b3d88ea9954742ce9ffbeeb085ea831052fe12445268d52f2f3873705a2a80daacc343244e9dbde2d600e6b4b2b13abeca0f7458615b9a063c5839aa0714f2f8f405352ba5574df64c859dbe11272906b40b582b7386f8512e0c829dc9ff9fa5d2c5ec24631dfaf34ab39a3468f257d0571943255091f7f84b7ed5b1679490c78d2bef795096cdbf18b1658080bacc05fc62bfaebf239fe3dcd3ba4eab7acc476e61c690346bcd43fea886082128918beb0d532e89e4f9fb2836b9dc5b595b0ebd8cf9d3d744036744c0853612e3ad4c6c43880d767e0c2679cd5bc340db4603c2d710a801c775143120eb711d94282fc72ce4b34e96e04d15c0276b22a6940dc4689479799f2d300ef1402008e30b1b43eff188d9d77e594538a63dc9624d160d670dad087233a4235a0aad9c775dfa29b537f5dfe6ed30515d5e9ffcb87a05e3fd01ac76e98d59b884d37fa1f926b3c1a53d60276e35bc8156d9fa854f22c28f52fade8bab4536159722fedf106e2e53e88b327a155fe31d4c9fb72ad14d34588d7fab0e61632282ba80921e653e5327a5a9d4a083728f6c66363cb4e3034588d6197bc9b2ed07461574a325a09d0a850520ac616176a7b7cd28f3ea2f4ddc66574eb68247edccaad18699bd68943bb43076248557741346a8fd42965d32e13935a9c402c76a59f6163edcae652acefd4d36a3d30c72bb61203b937e15bb3d4a9baf0d11db6d96720b25d4c04067aba884e59014297b87505d6c4d6bfeefd6e1afeafa762bfd6b65d9c2eabaa153bafdff0d551055945f5a8617d826c0d6954599e1f1fb5e22c019a79d84662ff7e443e335598f39c72bc9c3c59c74047862c0821c5b661ce47dd49e3f0c8a935a0fc45be604597d1bd3e33efd012072de26989224a1800f4c8adfe62fe8ef758424c68ca7be35c8993ff11c476ff0b10fc716f0802911dd61cf82a6f5825d7b7e0c92a100efedc247573a882b4eae6a132f82c5b85de12e2c3404071a409c504fad70c079ff47142f0408a832062044f344243855a4b7abb3a2af30258c739afff1a7129b570c66592ca1a4e3ff0fe8b6f04372de655dfb00ffc9499ecdab0297bf81beed5d045fcbb84ea5c7a142fd641a299adb0a99c71b359b7c0e6a0c2f1efe44ecf87af6a88f9157d36455832c06aa1cd9d4fa34b70a2a6deffccd5eca9c9839c64216abe9ad9d04554581981da2876557529df672d7c887caf05d697a1a74a871559aecc92bc69d54ef8f4a77439b4c3bdc5ba6a18af530367282f5e89e7ad918b96c7ff013f369f7ece561e2eecd18aefb9c0eeb299bb15b0ba4c9bb339213e1f4f62c076d0cb167c2eda508ad0513d736c8f4f9bea15260422bae9cdea4a0f4909fbdb63ff8bdcbfc0dde8e872b83df1547217250ef5b6da0806c33a998c67a15cef8a493a1d54c1fafd31f8528b1ed20815dffe86d14acac09cb279b56ce9b09eda77a70ee4112b53a4d61ade2e52ae0df6f488d03c543ee2f9321bcc7007ef66390dfdfc74844461614fc094267bddcc721f44799b55aee5a8bc815d1a34c63987c7ce614340a58aaf099a1307ecf9ca239ac1e172d1a35f37cc5ad5d012cd9f432f990bd4b8d7560a9e07b957388a9d980171b6575aa4a602ebf8d546047dfdf7cfde2abd6f5249f0678a1578e0f8ad2bede456bd533b50b695fbb9c09c5fdc12030e6c41c6aeed0d00a1b60178dc7f7bba8a51295ddff5af54d411f44cdbb02e73ba3f167135959cf3def965629e9af3e1e4140fccfafb7993027c35887a20a99c6211bfd18efa3cbba27e3930c776111e823de53324d891eb073728f1c3941fe78692827a238168c28cb2e155df977faad53d5e22d61384d762f132fb40810ddfa82022dd9bb1ad930e15f2545f858c215d70bf1e9742cec2a628e817698dd00f3748f57e400187c7a735d0becfb6c31cab96ac88e0dccc37415cbcd8b70112d0c48b9edeb8f763bad88120f798a1b0e7101d9af43b5829cfa4fb15b1b19152ded05663618f19edf71296579152dcd23b5b53fed30f3b63d67182a724d1950c83db3807b91adf630705d3e90e76dea363bdf86cb7e4fce6f61781e5b49fa29c5a55bee047e4be8f54f2c859d18d1da10ae869591555133fa9078735f38430aeecc0398190853dbf8b99e22e8cfe20579b4b35487dc824da69e1f12c4427d5a095bb66602574e37ff54bcfeb93526d438f56dabf43c69843b3076e3d28e2f80dff979400692c463d3c88dff587227ad171bbc82229c8f4180f183ced345e1e6384f560e6fe13bc93cbe190e0cad6df9dccba8c157257aea3e8650bc0d8e1cf3dc0454b8836d3dd001de69141f0e7e2150af3a50dcffb4e93d9ae593c992660f92c17b268b5e51e0eccf84f7d7bee48b3b6f7917f951c5a445d3483d4f784aa2232ed441cedc0061c33a72a17de527a165b36efff54333851ed983a0e7694d1458f266ef960ed0bb4fc63cf858aacdca95221fee1aff88f28f559ea6d98df9cef7b63a19291c4b57581ce9e6b236606d956496cdaeaa4b5562ef9f366c0bd536c82156a8d02ff99ba6e38152d1b168f42b22db85fa6f05155d4e9037ea0c69b595dcc482d36f61f000c40d23fe426bc62004f4fc46743d9a491b789399b73eb4248e8c917a030bbf2f6794438111f34b3bb1eb1cdae17b4cedfd6031c235db993ee0b4bb0d137f6efc731e99a24787eb46d2c8ccfddf4893139d4ff9acadc8cdab7a46ead3c946672c91b40da90cb00e070e91f3f8962ad781a24dd3a1488eb933034905154be7108a685c87dd87f41c480e507b132dab8000b563a7e72eb4c49e24c6f41bc1ead3dda120ef88e1de7dcf790c4b96cc53f6587e975dc786c255b384c49f2d54d817ece3082df041f39964f8ce4bc99da9a151a4f3dd897841d63bcc4bee932b374380d71b2a5dd0bdd9d1339d63f4c535eab3d07f0f752eb8aeffa364c9947092c1612461cc19b6c3a3ddd1817b5e6f7f3745a942dcd3cdaf45c4b215187a486ef85773e2fc6b1a8d604f7b827b50c110f1d0d8442aea80ae0355a068c38bdd55502a6ca7a39a24a479f0d8a94b12e36f811c048de3036d3e50791665b21057ce31a1b6b7a7effe8f548891fdd4ecfe244df1d626ed66bce694f7bc13cd50de620386fa1af2b2cdd65bdf4d86fc263ab8bf17f616325b962f3798397afd9598972e9fdfd96a2bbc02f5bcb54dac07beb23e550b65982a23a0a12436a22825b0f81ab50efbf9a1f09a89e87059cdd8b39a3175bd1b091a8ac13a635a9437494c0a308f2e88865e9426812c27b345e240f9023db6416c74f41a6b1c4e5713499557d6f7e889f8a8ce2e444e8261fe6a8e5518769bdfa88188349a19b9f3a26db26675b3e40539c8c63b3a16286ddebbc539dbe817fba7866f9631204471cefdcbbf768cc9043006a6d4cb4ec2decf1c0c2ab35ad09f50ced0c896fa97d87e400aeb3f4a408ec5a993825fbcf7bdb8d48bb208956ed28ba0d453336f59309a7f95713ab5f0ace0fbb7cc5e2a7011802c6b5842629a9d4043a2be6e463281090294d9ce94826569423a3a305ed5e2116cd4a4c987fc0657006491b149ccd4b51130ac62b19dc248c744543d20cd3952dced1f06cc3b18b91f3f55633ecc3085f4907060d2eac966d2fba3ee3a001d2bc3df505ffbffd84ce85d91ebeedd9e61f2deb02fc01084a9aa8aaea9721796846bd1c03ddaf250f9a2e6cdb321a52531553ff13743b8fbfa9917fdd792baac451aecf50933ba87a9970291229ecccddd63ddbde0228a3542e5cb19e16090685719587929ccff85420dd766a02ffb9e4e65e09b92272d3a67d7cd892da542d1a0b03cd4076d6a53ad4d90d3959adaa16aa27014b5184a1253b746d5252877ef0926c08c09e0a2f8d39f536169a810dd1a64b3afb1be88c6eccd5d8630b3d8cb7ac50e2b99ec507c9b4a48968521465a47f1d4f4eee1905c1c603b23b50c0d6cdcd34b391e581ce8ec9899fd4fcd2321d793f96bd54909dfc9ba07341efcbddb1599a23c00edad43b0cf6b1b30745039b48f4b9dccbd9c54dd21ea42d24b901e0f5f39bea673ac95ce38e97a91dd74aac430f1113c07f1c53fde0cd439c1303fb06d38467ab2c0e62e1b38a1d8d1387df1bd134f8eedaf39d7399472bb264245e20ac85de371923fb8c083186f1844b9217ddbe028387fb98d79aaa4c04171398c7f1189497acaa7546ef068bc7a3f663eb96f4b74b0084c49e878f3b0db622296153a5514930f27ea6fa71829bfd18d2fbaf718d81cf3faf3cc23e6f3bcc008e7116b46ad8509c66209d1b01caea335dcc59cd0be45e7cb736ed606f1ac31f469becee67a17618ca48596b8ff105d662d2585fa8df48dc8b116b7d913735dec036388bce413bf81982b1db939ada7280a20dc1eadef8df8960ceee9bfd8eefb9d47c450543fcaae27428f3b324d27845b00c6c486fe8e640897a4be5ea5892620b3a82b30652b1a371413c452b88881080b6d7580eb3812f00001de59a0d87772ef5cd4e14b8acdb1e7d2de01b57028f98af9b8037d340c37902cd3169283f57c4309d3d0ba8dd07e04f410a70e888017c49216777b2a5ac38c4e25ff4232a826f7d7b16479df2a84b3a0e2ac89779148035e1644aec1027e3f8e5a7b7a8c995952edf5045226e3ad3bfedd78efe563758d8840d2dea20e4ff015fcf10039cffb9d74271a0b0b04e0e6378873077cff87ac361c89d275851de60a93cb9de252f52193d00d6d359405fa736c069be16c64a59133d254e170d26a96a570192f2b3023737745404d9b03c0d90f9771bfb2f6c3c00c132a8ed655c4e1bc483cc76193ee3ba42a4cfa22c48092fb9053bcda234deb2fb51d25bf8e3c125fbbce53fc05c914df2458e52f2f82c5b8570780ead58a3c2521f54e34651a521731967a0570fb26b19b2eb5cd2c0d9bcc5655b4edf3c3d975be7ab03bc2a5c86a125de583bbcd98a1f7941301a36a3cc1f30700e86541eaa7f374f4df8d269de2c6eb3b7ece879338a053a7d57ce2cf1f98e30be5134998442aaac125aee5f807b50825ff91713efcfe3318509fbb7d6cacb37eebe5260ad3cae5c0170d2a0260487c4b0cecd2c27779fb0f7af53d6d32973d0003c31e6adc3bed99bc933de275e50e54b0c7f446317a75335c64b2c8f8c04a3a34957bdde7e48af31c2665c1cef688e9f00a1df3b167672dfdd560b54791a1d48643838d7d2f847640afecc7f4e1b0b1d69d96f17faa9aa46631905da6710c7501b57fa22583a2cb2f17181b6e104f556968a76723a9d6419d5e8be79dc851c5aed3b6446848ad9af14432e6c4e92c7cb153977d25cee2acac46967cb4ff396e94867299cde76e8a8f20814f7fd611cfb747b05d0e80888c9acffc44747c8c15bbb4f9ccdcc6aa4410924f7f263dc4f5822a382c66268e8970e3036664a812652c4695031d4e2c707c81e29e41880e971ae67815b32abd4c3569f50b0deb9203ee258b6619e7bbb5dcd784d3581eb75d8861b83e7ff3dd7df149185af5aed69a +MD = 036c1e78c094cefae9938e535043d370f951e09e50523e664006915484266d57 + +Len = 76264 +Msg = 3d7c0a703e44975ef9c43f288b7820cd0de932ae652cc13762ab21c109289db729feb0f836aa787d538b673cb1e63c4c182d3149c38176fa7175df31b915daf39e27a3d963b0bbb6a1ba967a96559357c0dc3222aa7982fb07ebd830fd87c65fc37d4bdb6e5d485108da33ace3cd0f352c7d9cffc31dcb824a9674867d874b43c18a11c6ffba0796b272a8983f5797308698d7a9b6743ad765fd1cfae01c50e6bfd65b61bdcde0cdc70a5c0753f9148ef3b54be82a86b7417ea93656ce4fbe91e6e7927551a0bc3d6e2ab7c0c7bd6c989d5d6083c85c2b09be202c60f1277b8c5e471fca623b812fd05b218d42ab8896ac177e4437fd7c784cec64e1eeac701f4e7e682899a419eb152402346cca50d0486c0df11f7194d4519448a070e68592de12d7579ee56ab9640ec27eee22ac8d97e375532ac15965f4a13e671ddea32c388dd31e18065ee1e5a0c93370bb8517c4041e32fef4b5755e9ab0fc9d9bb0368177c347b00ddcaac262801b999ec1b4f557705643128f4ab6070528992595f8e45611980d04cb5e20dc4dfd12d24aad5365d486a224ce2d2571a5b3b9853bba87b424dad8f215432a9799a3825f064a05b5b08cc2315c66d35ff865a4c289c4921864d4b8e0a1a1051acdd3924edfd233cf6d2e4d41203de759660603e4665d2e0b395056d557c2dced4f56eaa6bc8f073c7435e85d02fa89e7575d7df4bccf83140b1459d91fedd59989f4316f84c7a7832c683d8beae4e3923333bbf87260b8bb42ea6af4e16918a5e17410b121c33b2cfc91f4d5c0441ae1625064fb7059f5884698312f857fce99c1a02e757acbecc04e76b5436c62595d4c7c21029e02640480e65591f3771ffe903e34c27726e1c689e127dcd786c68c597f9a17e4a22ab6569e7f231499325ab617c9a1001e44c61498f2a8e7f889f8f22076412a827226318656ecce2c30389bf39619fdf93a485963bfaf85ffcb297d285e8958eb62dd7a6883f40a7a401da79a42325600edd5bf0c36fa9ae5b4a66460f9f556232262970aad43b1c98b9342d376f4f47b85f4ae59fe900cf06bf70d8df0900c72db3df2347de2a9623921d467da68bdb2292e8e14c079c56919a4e27aea5f6222b5f7f1b09ad8dc8d7150c51f15959aec020ac80323beab98e53549ee906c417ad717fe45ae2d30925ba67dc1d08473733810c2efd066a8c4f833acb08abe8fc16a2580ba5ee98fb820ad6415b23b318df2c8e59f6e79a336792672897f5d364095aadfd85415e048e8ede2e564c4ba8358bb99dda60083379194034117521c3f812d826738b90b8adaed60f78d27f89d9470476f2001320d6807c7a0fba42b055536d32fb1dbf7c61f354414d66ad222cb6f551e838797002506266ed35b49dc3a4d39f768858e44de4df804e7972f5c28412db277979a5af11a88724680600a58fb1c8905beb74b40bee28f67b5f991d06d35f3a63b2361f3c95575fd1957d8d6c7e4ab2f8f5a256d0e6c7dffcd170aee7bd7a9b57a1a5f549ef53fa031168edd3afa268efe60188cc8fd9556e6710fa8f47a9b4f5d679a3b1ed098d6cd857494dac4c1cb16af6dc671fca01508efe7265f85921aeaf35bd1d34e4847f78cd22432ab468edc306c4293d367e33b79dc91446256be2ba4e93d44d8169cb613efb4c7187b7e5acb5c29b5e9af6988f734112b78afe428638ea8f9d4cb7d1302146d23712a44976987a260a6434ef65138cd9d2f6534e819903a7bac2f9114418977cd1f19889bf033d61b72ea3b8e6f30ee21ef3f5573ac381a51c60a81c4b896f94d8b11f16f4aa9ec6eb56bd85739649b402006f0d106ce71038c24f42850831b2c1cd9271a5d310de1d78fcc59981bfd812a82ac0b0d9a661a6445934aef9707f1393bd3a4131261fd401ec09c729f3c6c767b3227abe3221db83406317e1be2244cfd9d1652960f4959e05b29b1367f896ab92930c7f3cd94efbaf4e5e657d74dbce82c770403404e889c46073b29ee616f033a2b48108e07719f066f0d930bf5f1c429cf10a21b92361c283efac0b37bee230d2218838dffa6abe3d6dd17a9a353593b265ebbc99fcc26aad7d442f35f4ddf491c1e94f304f6a533223d2ad7e04a6e0b85d69671fdb08374d9b3f9d996f6009622428ae89cc957a05b1416bd333ecd40f3607a3c324cfb2d4c7e2b8aa74f4e9e3b6caf93518787d08a4c218524973c8379e4b152c807557d381d21311ac290066f84491daa98fe6bb7cc94543bbd847c1e4a81da47485b0ea67723f478b59079c672a1ad2f64841ae87cb75501186dd2ea7a33fc3579d3859d7678fb4892149d491eff6c6954e1852744d1adfd10be2ee55c0ee21c01868d26016a6f12c0e51aff71aa82dfcedc537b0c2c87b80e413718d95cb183483ccc48003f785fa7cb99f151ec16193b3e2cedbc0e09b878bc968ad76394f3b6bcea0b5c403db5af8dc225a70b50a004cfba833cc05b87b8f8f2433f6db1f3b3d09077fbb5e79f40f53ca55c5059fb8f57a247748aa6ad34bdf44cfac0300ba73e6695c6e69da2c2c9b079560359b2469e8f414db312b056d244acefa43ac3facf136ca51a88489dd2c5a77f6c774e906b2778ad85c61a8501896b0563f7a4144b4004819bd01839d82439bed3dc56d48812f47e46eb7228106b9226448e355d7a946640af9c9affa37436fa7fb0527cbbf9bda63fa841a9c89428398e27fe3e24b899cc9f145755fa5ea71db91acbefcd84dc0fb8260e6ff1a935258aec881d1053a50bb362d6a4a68a930ec9424895865a589ff88c61e25355c2d480035a63070e93e732ab9f55709f02b5f75151d6ad2439404903c26ab53ed52db794fd79d1916a47661a3bce1d46fdfa8b6f6e1a0c8987d9f1b3ba6fe10c791879c8f7c53683321295d4317978268ac5ccc328c969324b5139c3d0599d68b37d0cc6d2b1fe8cf432080409bd48e8b4fe0376064b8dc68d92695c8d90b2fa8d44b9b715a4f055b78e07d04c015433808d78af910840ee5383c9a5787ce8690e56c8c34906d586830ed96081af65b0f85a73974f694952a70ca1c71986065d3e998111f53e75c7609ac8dd302e4306234e3c56cad47299901538e9f814d68026f62ccaa1b698be571a1a6fe2e6b6de094f1a138ab2816c1786d7349e901e77cd551015d6d506166f76183d1d3f86e0b34657f7156c3f724247c6d09260a7ed3c9f761b1a038675b1960a706ca17ab3281c3929f56874541b414de45cee398879baa604f8a8e2842363382f54745c0070b709d1b210e8b9aa5ab49885a09cf08e90e8f7f52ce0eacfc3e9a35f20f26e94010e19d2cb624af67b421594e097ce8208841c9bf8494fbd9f67f4140d05a69be19227df00acaf078d40831115f3ca5e09c19c7172e45df4e0f849fba35c4f8d3edb2361198c8fe576f60a84a6788b297de99fff037bba7c6ce5ca9d4bc11273023236de7dcb929920acd076fdeebaeb4b424cce13d40e5d2d76a1816bfa975414df88e09431612a71aa006f811dfead5b15cc650bb9029f0af2f3306dd085385c2a40eec685a4a05337c0f59acd007695a9474c51f03d4beaa3eb30b70b8527c25b86917b910203ad9d3892b0c5684ee148e40c4f416869b7cfae0bb3733e2a2eb9844f1b1b245c662292cd2bcedd3d2738cb2c6c762bff58bf6748c7cf5948888d5fb30eecb2b2680ff32e74b0074c4fc225340f552d17b5bb3c705de97d8ab81f4242bccc530e9aac853ef1338f82412e1aada2a817b8b60a550adc8753f6a6b753868e82af77e44070840b1e1de8e5c4d11e8c3590eb43f6db9eac7282973b9dba06ead86ff52e15dc892a3b588423cc730f35c541b744c5f6b53572b3725d18a04a39943b906071f0d3b750e960e48d2708051fd224a1c0cdd6de4f8e91f5722ddbe47fba51639dd4ec182677840e501692640dea3a422f898911d0bafbecf188405161953f1de1b15cb785abf68b5d6734ba5531020f5a515636bee0b828deda01ea0274637784afa9fb352dc041fc43776fc05183f1884ec6b3e1a7d193814aa71629fdc359d0f55d4bfda4ea1a75d2e2eb16efc5ce03a860f101b84d142101b93ca0db69ac0bacff11a6b97afd0f3bfd961fb6d1901186ac58e6ba34920726bfc62db45d567efb18b4f9137ad113a750d9a24bae1dfb10335157568ef77ce2411b9931a541710b2f9cbb5bf180c93d641a6959645f09707c421e34642ac65dc8a3abf94b532b03cc31b738e8f17926c0c23a86fc3c82cb109401fbbd132dbedbc62db55776f60c78dab453660c6b89ec3ade7a7d9eb04c75b0c954a29afb2e03ece50ccf91184eb902795373b9e78f71e91ddeef6cd91835fc3ee61aa776d4c77d9da7bd8cdaf01a0ecfe117e03460d636be5a5b8e465ad8e2275a2d22e8d9afe11b2d284f841b20677ea55b699b23a38b8b95c8eb3f38e4c94d57e3f397644380284719c15ef655754e46463c6401614f4a383e6d0bdae31979864502cc9e0cc38b9d97ccb0aa40a0076de142d72197e9c4eac5fbf4695c39718e5a37ceae91100ed6aa57c15e695170c133613baccdc3c154667d400dd893fd192b7be7bd5ad0779a5a4bda3b59ee52eb4482dac98b44091e28dc38edde8ee7ccbeb45df3f06c8f93b08e436997e175921c8efaa15ad463ef14fe2432f692f6511dcc7977da4a1e67b309440fab90a15fc46be45bc1db986f30cc4c03a807f15050a98372a0d4ecbe6ca425551e659ef94303e02049c17147862ef7897d56a1705d35c30bcb71c041e1482d6477c6330aa13c351878efb31f1e0d6fecfce5ce5a4e56806be28863971cdba5643e1d2a37e6002d6ad9cb299efe4ffa53ae1d3fb62bf604b96d839e692546d57dfcd1492a1b360e3ff1be9a6d30dee1e61966be2bfafc951ef5c9375f027205d5374a598b48c621be4a31cd34bca06ccfc7291161c5507cc201c2f620bd467d977af021017397ae106b8a8b9aa87fe23340cc010193da01cc19d6a5555ea984e94a2b6b35a693fd5cdc339c47fe628d3d0ab956b36d826b65c56d0aa5eb8564f33163fdcfe8a155cb2692c8e4c630b312af56d81e5a3004b48eefefb96ec163deb600a07642a90085d011d71906d39dddb70d4feb62cc12e2fbc41a38ee45cad2626a1cd2ba9444b16216908dc83293c4a84582c18d3ede16955453cb74f9e1f6bb09398c5b486a77640bbce91335dcef0c653a49e46eb079e208641a07c5ef734b46bf4c2aaeb9005f5723d4f0c4c2876ad73f2b6e44d0336c4614ccaf913e719a8775b931ae7b74db628df765c78bb44b02590e33a9856bbb772a8a744514172e35247c7731f6fb5e94c2f97d26809d364e509a3c83184955046ffb5fc9ba8d91b9943d041d74bb725589843dc9e96bb323eb7890bcd1f6c453abc8770578fc4b798da3e15c3bdf9e0dac3daf990e454ae9f350373af89a90cea598c5e1958ce2dfd75615d4938d6b24f1ceda7c3654840831c93ae7d55c3fdc27144f465b64e05239ffa86fc6ed5f0221dfc65babc0e8e86a8ca0a9b0655be4f7e41f1a10adcd397d46a3131b29040f04177c1fb3b0fff26941716ad0dd6c50deaf3d47fd8e2ffe69d20daad966e2b4611f03ae974c4f8cf58fb6117eebf887a41dafb36a309008c64cee1b49cf7f57019e63f29fbe621fd51e768602b789f111d77f489eba77bf5b5b4e4eb3896562ad3da5d2122bc014d297b9b1a46aa6f6ed85b5ece3556d8bf2a8362b5fbf1c3b2ba4d0353abeefd1b4a2877aac2cd8feffcf57897f29f9d451daad9a94972a4c437aec055d9c79c043e6e9c96124a571105b6f06bb5da302419abc839b3919fbbf680229c4f0e648460ce6860c7b98b7e8d4044bdf1af37d8a906acebcce71b266151889b7e0bcd087bb8799f55836384fe01f40338772aef463bf633f7eb8d8ff2a390d7d9485c2cc9cd3ea64e4095d0d27c7cdffcda7fb47bcc32a6c7078d4534e6a9d6035c885de57d261a147988ce95204da8a131acd4a427f0c8bcd38102a2ab521a6eb0e8185938ce7f3a86b2ead09de4f1d82548dc69efaefe3bc81f34b65218198ddde1e88f80a62a42f0bac1ff35e140042dca184773cbdbd66dae580a8b6a57e34c0c4b12f53bcfa06ff6c08b98b117b7a3a7349764e5c61f3cb4e8f9b7d75a0173cdbc6e06fdb3e52cfd82f036e2fd652f769e04337b6178adc9741e57dda45afdbcb90b367a9b73e04575e780d5458f39aed1085ffb1275396265e2fbfbab72424fcd74e420cafef25505bc072694a85ab66a0e4af37d8778064ae2049ff3c9da0d7635c08ee6c90ba2def84a557f42fb33c590a4e2f741e23b9f861258f1d42d5c2fb83c13637474b55e26cac049e1a39d6039ce480416f058e06995b54a23c4d26696b76cc583c6130fc1f915a906ec59e66457a148893b0499e71f13412b3906c73bd2f981799832605465c401152dffb49ab16d290b2ac548991f119b7ce24fae221f281bc833a9fc488139d6bee10557576c3a2a3f27f158fa062ead7b6933a7d3ec9728e240d03028ec05be46bdf15b34f866c077eb3f677474d8fbb9365920ebdbb50d6a484ba87ff6a61c5f1d5a1c9de6918057cd05d0b2db9efab8c206c5b45d004dd2b272c1b841a9756a778627fca738fe5155cb411fbaef4eec94e2f2e7f1176e8e07fc286c5d7e5deb653c09fbbacb7ef70e16252583585ce7376434d13858e42eb13e28f69a933a746eb24ef5b1d796bb6e6cf96ed548a91b2211080a8353532756bf500199869f77ecaf4394fcdbea00ef463a56115ec80add6fe91e62751ffa610649f7cad6f1786779a4342c46cd7a19286465d8091e38d1d75467765cbf2a58996353bef2d4f877a7cd6da0b6c589648a043899c6202797edd6900f78c539b5ef289fd678ce6a95c04b9bfa9a76b169e19628c7147249a829ec02ce37b6aaf18e2656b1b722613a498b69aa60458491d596c0f07299318b02014a0337f7e0a3ecc8f2c15c855eedaa293130b6a66564cc828b967ee951a91cb2c07ef82d8d3581ad0e95d77bc61868919d1dfc3de66b3cf6033988073c8ab08d2071d6bc133ef33f04af966a39531b5107d2af608a0dbd4da24a2c5754b893dcc48c7227f528a7fb7f6f37c51b1628e40bef5eb2c2d4b415f358ea7e2cbb0d4e373f48e5a57b166ed9653a310dea27c703d478a92348b7cb70e630d046faa33df30ad999c6aec5059d11fc2264478e76aa228bb82de24efaa5629de2160fdc48826f92a8bb5c4a5c45061c0dc0a6c37f494a06643539d0000b5e80482c634eda6fee02a715dc0cdf6bb20877a5906d4d7bbb8731eba7e1980d5a9666fc8d41800606a7f948d6931b7b965fe4858cf26dbc077ca5b3b50a1f45b73ec2f8e67ac5ff2a0123d6b4537cff2370d8e304e96c74be65342009a0022f24f7e0c4175118b5f89cbb31fde48050f9e9c93080b8a65030bf71a2ee49dd24044044c0984ae4c4d2d9240d2bccd22b8a293a0098f6b7b91f09c2df0b7e2ceed5a66380d1eed6a6595502aac652cef944cdafd5a61a2d29c9d2bc16c9936dda2998c1876ca35ac4ec8ebbad463cf314ca35af2250a9532cd188d1fca1501c6070a5f346b11efdbb0ce4d38733e1cb387aff9c78f10ae62cc6ba88f33b0ac52c3b4c5d3157981bf35b05cecb07c7d3cee79a0c3c2fd542c409e6658cff49d497fa0a73f9c8c54208375021db4a759932908382fe658ee56d2b7aec4c5683d73e2d4eebe27d2d0c642252615a6461781df65a75322aae6a929c067193e94f497955a8099ded25d791bc9b01aafe221ceb896d7779f7aa3edeec07ba061012b7f3f3a4718ea146400b5688775f702de425ea5aee385508deac8c0d1a1573648f1897a2a8273204b24ba0a956ea52eb6a4769916defbb40c6760c7516447bbb5b61a241021a07f7cadcfb7c14ce2ef11beab7bf6b2292f882e5ddde3305a19d8969c3fe33b9ab85d639e78f359d5cb5756a25235a538486905680a6f4fb7d71b58b4d48a198953580dcf5413dba74cf0350626bd00508817b52957dd07887de5c60ceaed0394d8d4750a540a1b7ffa45237d00750b9876fb0647cb15a1f2949da64c89f440e3d03961f67fbe61865cbce8afe7450d399a7bbf6b6f00641fa3adc11cb9871a9fc3ee9a3bdd18f5e3fabe4b46e315505b7c00aa3c49849a37327cdf22838ed7f0375de88276001ebf5cb415e7fccd1a24a5f38d63648a8961c972c809eef1c0fdb6ed1273535f25420b040e3c3b56b4bf9cba3187c5fb7bc6f1f7437703981defc706e2b57b1b52938e18feeda7966652e9bf5e5176bdb68e31731915c96b36edf3101ef1f61eeddb6d56ada2487677061568db687eba83e0124e128a48535220c0738fcecd4e3e413128e30227de3102a71f7276e5d829e41bf0f67e8836bbb0b898fdf507958dee61f567b54bb7da6f274be920b301f2c4d4c28d9b92feb7c463e5300dacda210a85240264bde7bb741d530910f11c24a5c52a9f866d918f8448c3efbfc50543bc251f7cb783581c3a12a19aeea71108b27791f3ea21d98b19ef9b03b358fd3b2cca4d9d55a7f045e88e9c6461dbc8e6107160526db7bcf2abe0d3359070ac5183fb162ce730997da717ac2e12972806ea3bfd84b736240e61a4d54bfe12f9cde941e2f314273a0d9f3739c2a9e21baf665ed25171a6f82564c2070da748ccf6852319b88593bb3df775abe6cdc5892aac614581430f2080dcc2d34530190d1580292344e17c0355d8596b63264658c0e5ccc0dbd47a8367f02da0b9448ea47201db695fd1ebfc9d696cdf015d7071b63928aa28cdee0b21c889d53289ad7a5531c251d0fde68d5dd33570871a48bc57cffb6b30d5749ff88d61dc78a7807506386544610c789edc3d3d86bf04d821ead0d06bbb95132732673a1c53470f7ecc3d4cabd8a7a61863d00a8a6fc42789b6632c1191b5d38c187d9efd8b11607ef16800ecfe757ae13ab326e260023dda04b199c779dcbcb4f2f814e7e7ac7e5bbbe208719b1ffbe2a90f19f85a6523fe1ce29ef53db2d78808ff254231c16eff73d3eca0774c3103f80c69332595e0db461dc401a3e12bf0a1bb57762ff73950606335e359a5252d6ed1a0fa883b7c5bca8a9154740ec0d5075435ebaaf7e838ccb86aa10bd1de46548745b74cff0065ef528f5677e39f1d80f1440a6968839efdfd134153796437f255e1d1398873e0ff9d466f7608cfb255ba0e3936f310693c58b92dfa45c0e99064fbb0177fddb640923d083725587aced81ae1d7409983d1f1e3ccc8dcf94376dc1bbcae8b46cefb5afc8784e1435f3273f06b15f625d304f1198684e7172cece4ca5dc655b710771c0b5623e49748cbb2193db8bdbd411d80e3c3f80d238e39a48efb26843764fe01f3dbdcd75c1cdfbe1cc1883f68b563c5caebeaf72450a645f2fe97c1cfb2d6313b8079629bc5b7bf815e4d212e171fe95566234d225a7bef7bcee1b486e248d36bacc02c5b2a9bdcd17bce0e174f9a130d9d6bb6269400c9b3d3cc0464dc9c100bc67bdea433d23d9382d4ac2c46196c78f689da36e67cfc2175205a71881a0fa438701f7ec8a60b4fda27a374e2e71c20da47625d3839af4d1da45db6cf0af9bd696898f2d15d6e8deb8f9cf70c4b4a8db26bf6a0727d0bc03121b63a97b3f5dfc12af10736408dd61dd43fbead8c1f45e4be3d097c9138011b5f0c05ca5e2c91a880d1c6df9791b1d8bd33d0abf3c2d2da08e09f3ebd5d98412608204e53c55b8630e035b5aaa1a784132136f0c85bbcfa11866aa048a30e0d3e52920ddae9c5c303c75f9ec0e63f899eb0f662531489aea0d8738b7c31eae56e9163ed3bc058c7c12e49832388014f26891aebdb13c35d7f7ec1e59f30b4337f6d9cd8bd719bfb32bcfd4d19ae753f7353a972aa80f16e741f5c98fac7f55e3a9044b5a92517c51d1a82e2eb8024bf4cb7acde06849c4b48634d8ad51f33ce649f636c4703528e4cf0e02ce12795387b5d2a1938474b5bc3f49ba5785ff9ebc84502e4df34d6bf85e51f1242cb5013c6ec2b0a87f08606ac774ecf2ab0cc1d2d282707b9df2bbe91a1487b5893deb6f60db8993da7d6b4cd976ff2343a36cc5af0ddbc1d2dd7f538cd635169a8c68bd367d7aea196c1cdecfa05f5de24be60184629eb524664ca4111767bbe3290f824a39331fae2d1b9d24818c07097ed412fd2157ca1515aa776148be19f58c567b368f10a91b68ee1472ab13b32ba49d7673ba85852763ff39d7fa96b5342ec3f465ffb22ae387fab1247d64e6cb65c8b8829ea65addf9d167ff9d90124198de8a62fb85f98902c80fd4992e165b2aec35946e48cf9b1fb78e42b228b580530ca9b8130aa99e71dc9ced5eadc66d7c5e8a3379db68017e28194bc8cf1382d5e4decfd6cecf765dbec4e96e827b74c2b632ea71dc98837d99956551f1b0cba9ed9634a730bfb31ed53453193aaa03a689ac23c6daf5a396828f39ee4f11cd379d6c6114df1ed74db647b51f34e69c902f7279e944e3e461796343ee25cafa176acdef9038415552e89b79c11f9592083e124769a907b866f4bdede21420f4c1dc373ab9caebafd6d29c3baf494b96873c0836c885b5b20f7afbc25aa8d82fbf6834dce2055269320ab6554a408d1c858fb0a276599243c372a95bc842351d68a55330b98639f40cf7966122a3be969bcfc825039311f04b825304ab7eec406609fee0a0bbf6e2c03fa8d9b8d174973262ab28e0d0b949e010656784cd422b300ca47728151db7e4396a498d583390d1fed648ae80fcb329b37cfee4abfb504f33f03ec02012d5f18b571b00b66005f2ead5eecd2250be90c1e6353b996c322c065ed1f97b7aef609bfbe8c36aae792dbd2695bd3359eeade25da50a2419535efa3ccb4475ba46c9e1c51d35e3636ceaec44d7ff427ca5e98b3fb8c0ca77364096367521bd558e85f35f22e8bf2353a30ecd2013ce3d86dc32f8fb0ffb2a4d7950c87a2190d1293d5706b45c6c62bffe8b0c089b451103ee6035e63834972b71b06f44b4bec1a94873683bf169a62445e79debe625ab9fa8996304ea154232c23b876f6b958b714fdf00145845620321bb0f54950e41cc83550cd1860bc005d368cd54b6a3a323bc004ae7e17e2aef1a6bbcdd186d882d17099fd6ac9675173dbe9d8f1667bd33057dc5213d72654a887042eff0a1f313dc5d987ece23e5e959b374991b501e21c4adeb5abcc0b598047f1e07be69f7233b9783445b5296eecfddfeed260b6a72622749eefff7707a06decaaec22428cdbd6decc1e4a11cba089478f5d6d816a776605d6867753a430815c56fbc4efc95ea374171ea7dcbbd8c7d8f6d9e74972369ef8261a3c88795a0ca9aa4fd68e6fe4a8a0dceed67487bc40faeaefd3f8088c53b7545057fdce44953a6f915f06c7946ecbe535dfbf77757b1632473b7574a10ba928d2cf99eb16a4796c68684119977c5ef89cc8a7d22b0092978826a8fe9c51366c48ac4617f9c1cd6b7df826ad155abfdecb9b13e20558d8e15b9d79eea6aac6e659f7eb9b15759e3277179dca3591585f6960eaed2c0a4ed867a7d08be6a0c15faeb76fbf9147558bffcd8eb91fa890421e1d163cc89e5e43554c951e85ba90a0eff4bccb95c0583cbd23e1c3fc27ce5194dc7e17009d6feccc94b0efaa81996ec3b6b9074b66100d58207e2ef4977c5270a40ac5fc8ee899758809467e7b4594d2064ebbd9c4e5c879cd4e422e7f010e5d7ea290e5f93313f82f896b2932fcd8c5eb632e675f4033c7303749d367c54d01702ebee366b722fc9216a5d22e2704446ee0a91ec18718eb5422890ad730d6048596981d5edc8d29b7993ea1f52cdef696ad742571243d8c3ef84bfc58aa730fc2c266bc680a1e28a8fb7cbf11752f846bb3d7a5f77d6a53f89fd7d0719beaca319b70e70da99ba16d22a8540a68be95f5d81ac6dcfc69e7890175afab6b04dcd907fdc7d421cd3b0cf80987666f55d23d0584afa70701f2f9056dc18d8289eec2ef578445db7c9f8f64e981aff1bae34a235e89e008f9195092062d9f4841a7f53cc445e83d7075fd4d8e6a6c56b66f2418f07b0f661a0697928a1c6926f4b079d48d3246b070645f9d41692605111ed4ce82aebd892c61d6ec3fb5748269b056a1fa74e69d4614bc3b4aa66468939a612b5c4a71d9f7d113886e2147c56950958a5233506ab82e1c0ff14aaee60488d319c676b4be42ff584e5e876a58bc383d76df960d818f5a88017e7d8ce72b93337f075a0da0d793ac26591066a12a0f564fe7c6a448923f06f9386687d3d1618844681f04e77c3418f8a5e4c20a7b7de9fcb3eb9d298b86a1df692e2613be9ada5231ed21fbfa8aa2ac8b2a06fa762cfc658b2c818a40d65e9b57fcf20dbae73190aaebed44183e552a530bbbd9e4c19a72b6b1d7d57bd847154af9722a8df096e61a42ef2ba0f8365a45ae680e8de7c80b7ea32771023463368c4d2ed2fe5c103ccb19af16585f4f24a93c950339449018292afac69d91bae4641fae6ed7d3a87a0399b66e0a1ca771c6dcca1fb080f981006dd63c1697550819977b64deff65890bea8b9c7cd74627e5b790cab9440b2e4b95463b34ef3b8bf4df1c1edc854f4f2b33b706773735304ef46e6c1e38cf0752c9cf2bbe4174533d1c190298106eb5aa9dc016c2e47b7249bced6da5034cf55c32fb747d34094a3c79fb7adc46cba3d24f3033278720d71e379336174d8bdeb3f7517e39710157381c48ed6ecf6d02e9718ec46cc82d46148ceb2d3bc092ac9d4259b2b9a064617b2d8bc317545cb8382d63335a4ea9a674e47abbdb026b4563389c76c7683b524bd549639f7da1af07a936e7b9c29ce18666ca48bdbb1e934d03a13329718d11f13b0c37cef143cd9e0d8f4851cb0ede923b623daa94b17ca2cbf052a8646286b5895ba66c594afc4482f6bee9120885e08aca006a342eeaacb712390ce9c299dee4bf18405cbf234230f4b14b3e91beb87c8bfbc5459cc4b1f08e521da7b632b676bff513a3a92ae03e10893df8b27161392c95836c04f2fa9eec04a34745398367e3a6add510f866d4d3ae88e8728624e835356b536d5bcfe7b5b6657078968edfb391d69bfc771c1cc489f4b5d9e549b12e4547a2dfe977f670d22ccb56311f05b81f569d768e4a3b6b804808ef7718bda02cdd0163833cf1a5bfc000e7f27d0179b8f4828525375c50fc4e88bd22d8341352f516ff116401dde5e9b633c2f2fc7ec579f332252ca5fc66ccde4acfd33e0d1f598cbd7c384d9eac6f954387c41e50acae978474713ef6248bb19e674f0118fbd009a5aa00fe737c19471e2b3c8e76d7581783fb4e50c6a053aac2d095a8bb4e2135be84043be1bdb071cc94a27578ac421a37a20b03f540eb71bdf4ed597f8015ba10f28b2d72d7fdbe56ac3efadf953349 +MD = b762c7e0a0eca098c19b3a5084bb1faaf7a570b7ac44fd79383877b25cc90c7f + +Len = 77056 +Msg = bb8b467fc885355d692ce0b97fab59adca986f1ab7762449797e62d25b9fe9bd55c38ce8dd549da8fffea6b3b0b7593e60fdca62ce5fdcc4203ff97533d6071730799742601a5f264111ea71d91d8e734aa59f7fa744e2950685443fd6ebccb97335cf54f8df631c55ec15b9a1e3df93b118543ae92c1e0452d7aaf8ede522ea477f9ce84eac91d563189054b01333e8bcdc53593c2078592dbe93671fcdf0f4d4e066c40988d198941bc20aafb474b8947b02a44a27d8dbbec1675515aa1e1d41df95b1d27c0bac0f7f12a246cf894c607dcbe5b84926d32e688f8a778493aeb7059177518f275afdcbeae61c6b5aec496815e2318e4a89a43b71ceec6439ee5dd8c2de2dc90dea8688b19cda90cfdf77c647645bff2c4549c376e91c51f7275ce291ae0f32a5a4d13dce8d2746d06f111ecb33dea3b54f448706a2b053b59fdbab64ae9ed3d8cf0772ab81ac9645e23ff908176383cbeebe0f8ac250725ba003b9a4a783b38cb54fb0af40118716812bde66d892a5576cdfe46812a3b7d270fb96ba6265daaa9cd27d4291fd222b94fa554d3d1213420fce8d0a5752290057ecca0ca4ed511bcdb864cc3d186e6c63d7e625108cd57220b492d65c04d0ce9ffedb0438c31fc59028eab50d0b73c235e81a5617a7f1d1e6b87c36e862b5248e585309e58e4c922d4a9966c67e3913545578481b0c7146ab03d291c214dfeb6e23ba8272f6e169eb47f8453318c94906478964e3625cb8b5bc1c4fb3c15609858696d9a8a5e53113478fbb1b822a4a94e6d3103952bb114e0ce3d7831123681caa71754f4060d4ed71e731456464004659e0b5e3849538bc1bad93faae4dee7ab7d2be2f725b39c1ee870d7a64805163c938bcaa9ff215471005eadf3ddc85e9d4421c0fe0dc48d7e6f7b8822d8527355d618b564cdb9039147044fc69d914af2948f7b835eee97680c09b25657b69023ee58caf325691d84e780917d74b8315df6cb7f3179604e8e4691d2bb56aff13934c267cfa6e006ee7a4a2f9323aba631e36c4862fde81733b7aa55bc45bd0b0851cc0874b28c541067c756a20afa0e10d2f873924cd4860ad7c9d7e3b55c6203cdfc496ce8ec899d489eb3249b01fd7d5de66d69e6b42f761f66c5cc161c8addf1c99722aa7f2c079526d1857481e8c9dcbca2347c1557f80707abdff86bf9d965ca7e3087b29fd1c6061e5ef7c86498e7f1ceac4d66a4231722f699ccc91398b2656b110135697e5393061bb563d56d081c2f1c0b36a869d85f327413b27c9e3020ea3e97662d7fd67435463dd2cfb8a592601e15e3b94eb302ec196dc6995c97837823cac33058c7201868f193b80e590aee1cfe1c7b444fc48fd42b63fe463113916b0beb369b9e0d1bfe613532c08adc45b3344f42dd070a9a4eed19200d9547c27eeb3c84aad3b1dc610d25a481b38cf35b58dac49b614b97e4136482f54ca697d9d935cf2900a4c64b65e3a1c48ba3738fcc6d64e1f70e152e4ec4bbafcf966df666756a789d6c66180c0d9f0b5ba632cb1f65a85320d87ea7efb81e9f86bdc17f1369eb2c026f28515ff210c8ac0bdd97b2620361872150cb86cd40371a834ebe5081c5b5e823a971e23f8b7f054ac06035d0fa9f827f1813a462b528e36d424ebe5b8e98b7205614235483b0fff987df1a31125fbb58510ab916d1c789f268aaad65aa66e7fbca92a3cf8de0e48e904ec000df449a33783b45684aa566b90e4cbe2ead83030c5387d40f0e915b808649c7dec5c097971a1fc9c574451207cfcf51250c8f80e89d6e44a18a44ed55b65aa2194a664c09a312c6bce3191485198d16d74beefa0704a07605856df2a4bcebef5ee1981ff19fcebcbd1bb3d6a778106fb3e013d6ee35e8d8d9848f03c41697fffe2ff89be58cae2c548287d0f567f3dc497db090048d81fd6c0c3aa95a3fc9649599ea385be62b8601bc17bbe56591ed165927bdf08816445b80d34bcda50aadb3940f8ddb38e16a533ce5cffdfd95029926fbd928c2105e1686eb7394f2d64bb6c2baf4d9f14a49a76974b5a59c57cd404baf4a13b80a9b2b8305b95695a6cf3d8a7f15eebbd0949cd636e582ce649dba5bb4b957c65f9c1919a47578fa1698b67fee696fd51eeba207ced80c00460455bbae8f4b99a9c15d9f3a4072bc804890076b5803e98faf45828f15b7de7681a10fef34959e53bb67a84992da498e4f78a5987a1165ad6ff5bb0a26fcc560a62abd09519c40f7ead5a954f5262d9b1dcefed8383ee5e29e3135c2747131aee261478f5ee61e00c01636deefdcd531541167bd2ad2c6d9ca86773a968bbfbbb6e333e3d4f9a1f8eba7b569db74dcdb62de74a9ba73a4fd7573e3f4f5c2dc11a40f06992c5d696abe18c9684074a113ca84aa407fa7ecc81f8820642aad034b2a633431ed77e0b0c7d7d76cc752ce550bb27cf3e2d62ab42911a11a9da0b1c2ca7e412090df8475996363e9d895b129a6c661467c84cb6c42ceea8ad7448402f4beb1f7befad1239359f361ecc3f60c1c5efbbaa53a6b3acd0e6127601ee69649b30b29b0605335460a0a678c540966eceaa0c3057d76ba586ea992b09655f729e9b1391d96974532221d5d2fdc77e488e804f215c47a65555e283f41214ea035d158986f03f9bde800a0c55fa3adef80d57cba5e85e2c6445b619faa665d2bcde845da2d4f0719c8443932946037f255319c9e28584c47b5e4ea3654cbfde472bd2d80c0ce5be3635b4b2756988297869ac9103ba213842a992695d8d8ad84c4ce53fed20854a539b46b161e933a39856fa6b2e0f9d4e602d6bb209ef2f867247a7dd6c9937dc9cbfdfd717506bb72f22e99f8c0d60cf7ef2bfc891fc14b06226fef9b2fe653eb9a8686dbc25972be2d66374443bd282430178f11e3ca220c4f1d4dae6d77636515ecabb7bf121c85b784f337e225c3158617c76d836419d3fae10c931add28d0ceaeb097a3b705642139425644864a2641ab59fe6725aee7b679a0ebb06e10b9453b59fe18bec9d3eac1c8f1b37549e103509b3707853dc21235af1ab6d0a778ea10fc4d969fd64f84dcebcce7792ed04b962fca0d1962fd9eb38ba2967b89aa5dde0c28a5e0b7518fd92f3a38e8857e7aea7c09c0489af4ac61cb05f7e503d7f0e12df1bf17e9645c5507bc2069ca4611dc0488c9996231dbcee1c73393b26c43c8c64b4abbe9027abf09d5467389b1c0d94dc99182455f9d596468d20e11e1d6f36997f13332b67ba5ba18137c306bd860dc3eb0a9a0b871afc76d6bcaaec32b0f8c5a1b1462eadf777cf7000a5abef901247a9f7620e6f9208f47594ff5aaa06ba31450d5d63a06c2d6e4a49455258348caefb65e3265845a3079331462e2d7a642691b0e290e92066c8369b0dc5a07961410ade851aea3cb3f95819e9316513deeaad213b7e301b08235d7d64cb70687a48fee9b0b4ce7e2110ebd64e2bf7d910c5c2e8d2f51c66fcc8e777b22b7007bf0bff0fccbaac13d69575f0dfe48ed4e301f88e0dbd55082bfffb1160ae476018d133d641f52b04b9cf1ded0223d00d3de5769a569d84097c10c1d4d41c9d7b6ee4c5c9782df458b1080c5721b2658b08b86594145e5172d6426247773d1c5ea78adb6dd72aaf17a88669b5a357f6562ac3ec04aec8634a23de06f3b1d86a13ad0c9e4cc7b3034a85935d90f0db2b778d4e34738ea363994a2cd45eebb72fa266b235edb19298f83075106f7005abf517a065691bb7f8673374f5128ba01411bcc3c8d8fb8d17299074a9da8b9f1fd8b203a66cbdcccbbdc6fe9197fb5cc06a968981960f6d28e58fda5159a96f2e2945bd1f06dca983a2eb11cf73a1b3ddb5db4a86ae53f9723514ed2f75323f81efb717f9bee017c91f8af7d730e76c10f8754fffa831fb9e2008f76cb58ed5bf32f2595c1c32de453b8bf6d2553451033d4be0150d103953af513e2fa225f991faddcb6fa938c69efed657e86bef285e8b4544ef63577d3ae9d80ba1c25f759f5060b55bec5b977d70536240f982bac8eb4bc5b735708dfbd685a5e9a0a510903b635e476e0318899aeb5e038754cfea6345a99208c2313d7e415631c15d910dc4ce0f5cb599126b838495589ecd2f6cfe1b39aa66b533a8eaf2649eaff1c1bdf28910c24b834dca33074d68c555a1f5c1b6bd27d6b15ae52181185af1c76849cd7da9a0b82b914fb35dcf5a8454ee2db6fc7d31e11e6d9c2bd7ba8d0f494e585d90221e82f7a6a20a6c63576332debee4d6c0ee0d64357411da925e91dd3a93ababc2663351536a401e5087eb57394d532cd089e5eb7a16da74e7f600edf5a1beb7d29d52a0614f5e5ae011a32cc7850ce7f328ee1c032a8e8c037de4e0482c9e9a9aee684c99fb6b07591e1317500b16ed72f4b25d9a57360a2c1ac31ef8d9543e627ffcbdc0136f0f04d5c4819b8a79289514b8170545d8d5abf5270fd052e7897278965aa1427359295f3dd371a83e7fa3b088b30d9d7fd7c837971b973f5f651102bf8d032e7dcd10e306739a0d6cd9e6f2ab977a0730f7ca089caa1447c5b98945fdbead7f9853008aa8cbde620b20a400a82d142af51dfb8fbd241013206d2068db5368dec9d3437caa41054f243b260207dca3afd531a1f582f1534b78681f93deb5fcf31a351fe0943fd67bbd12b421510bee3dd91c05617379a596d594cef0904c31659261dddeef2c1a8fe18d95840d24be7d07c46ffc1924ce9c40d874a47880cfdc3940c4a04270993295941355c38edb17691226eefb5b9506c01c5ada1eba9d0218b81e4b15731b0de30f74b9fbb10db207ee745ea184c47c5e48c9b80b60647c36b2310af19c68c8d2e601da3ef51cf6e7419f74940921a521450766c6dcecf59c1747035c55470a6a0102e013c2cf8d13f1f05a5b50752a11f95c0dd794fd1350cda65ee006827bb448bff30380ef1c93e8af357ec387b2364d12d5c7f25f7e5cbe96440515dfc4b7a47f399597444e6d0c243086c821e6992970e51d5cd9dfc7d061dd52eb278d7cfb8cdd516f96c8ab479770fac9096e4176bd66613c35de9aed4e504ff0217d09372c05bf70ad3555804f20622d08f1361a427f1cf93922dcfca4c6848c973d683ea8da6803513b719f9566475ce61881ff4759d5fbae5495e5ac667a284f75a1fa4883d38e4982098bb16a2fbe6b8a290b131b14aa5b1bce90ae59b82a13ccba515328887b5eb3242eeb55a5bb5fef3628f0ee616e0a208ee5f1c6c6fca9eabd2d13f310305876cb6f8a4f2ebb89f1b13d24fa45af810bddccbfd62d04d978b175ce0af217ff720536d87f5426b236a132f86647d58983c32d5eb074ac6d1e9f11cd95b6961a50da6b1b0e9e64a2660eefb45bf048ea3049f0177e235b2b838ee858bde51773b752f79c2494dd212a005ba000c6706cbb76fd3265c378dd5086e4b6a90601d05076c0a3e7bff9f72a8060047e53b6d7cc533cf78fdb6d492c90ec3183a1bcfac34daf7882a621eb0d95e527fc1f80f20ae695ae24f3a138c0b2e90f703eb0b9b7dfac621bd2bbc77b48d352a3b037861e39f19e4b937c71b4f6c1999a6645d4d535a0aadbc931511ea010cd9b90445baf5436102d4466beaf645d1729a0e315c4567199e915e9529ba585e00b470d39663d4e4cf28dc7e55903a5d14575f2422c4a09756e3d4d919d5f1ad31b5bfce8ebfe1f9ac1f707af5bdb810e146cda24b71a4e8691cac3d8cad7b8edf556782fe59f9342c2098ee45df4da18c10d03830bcd2a167b43b5edca144577bec0e8d8fd26918b1f4bc54c0657963572e0d527d06b846b53308a99461eaab9a11fb6a9da9d00bffd4512aeff0b9fae506eb9d7affd43ce421aaaa4e6fed0fbc4fd496b250bca248780ded4ef18dbcb823e155d4f8a518770887dd651bb9e854fe109e58579d602e28392847f8734d330d8527f5a1a95de04026bf7305dfb9e6b545ee1a3ee0ca339d69487575f911084c5d90675b6f71b2610dcce2aedd19040ddb0252672544eb2024ea51ea8d9c8a48c11b94a645f85003b3824e87107a1f504677bb70d964a758e26a57d6af644b8b56162812eb565b70ae7c111f4851ab251eba9fec8bae0ab0286511baecfcce9c933c7c21ce1037606516d4e7b3343a14da577a2aaa8587ce7d56fa17b4ca75e4feeb2b435cca763b5def04710f963e77ffbaf4cbc49fa0fc37bc8b6da551f41cff9e9ff815c99a6a1f711a3babfc3af6f5617a305830d8d21e02403d2d27ab7d1be344c087a20685202990b826dac1fa61f79508d3fdb1d866c4b2f6bab01eadea45d43d30f86d14f6951266eeb645fabbc9bfa5c66aae87c8704e3adc9fc027d132a8be90111082092fe9d892133980697454a7bdec3168a9918c7a112b326377365cd523a0a364de76b17d8f763f2401641e7f1916ece390a50824e6f6d7f932dd4b017a0b9825ece5f3d65563b94e0a3567bc665f3380f4272bdbdc8743519a740dd3f1d6515dcb1a1b7372402a76ea54bab0244997d96a9461ff4060e6f514a70fbd29857164ff7fa2c564b01527384e921ae15a9c556a79651fd0f8455c47e2eb3d9f8d8ae3d083244cbb180be76a7f885d2c06b37d6a528fae0cd1e11f9ac40ad5a272e05304c11a89d40c612ff78407e742c27fc9e09c5c3a32723c8783a6f90600ca142af2b5f00d4de1d77965e88b59e43253b363d35545004dda5ca928304f08f7b8e430de3f37975cb15c4c19ad257ecac1d27a74054ee4e92cd761a44b314980210725a662a92ec191310093c7ca80f06caf7b1ae6c86ec8b6b043c7a42d30f80f1c77ab04d2a2b4f9a039f375b9795796931c246431fc610a5fd5fec5c36dc3b58c7d58903461ab5d123e952182f644e235a41d182c1c468a3e8ea63a743e87c6efcd3b9f4f0a193e1fb50575b7565cd1ffc9818d074cedd8e4d47a7cb04198a5aeddd07c92fa830f1103d0ccb73803d869e2ee0d641ccb58eb4dd80718158af4522593c2a0c17d52aec163b11309ee87fc96bf43b2fa639caa614b641c18e315724b120be8dd6cab41644aad5b4a5143304b71ba84744b16baa5410e2cca159b77a4b7b2ebdcd57b6163022be087f0ac9d77a1cc5908e6598490557fdaa7b6f8eac911521a1e5c45875416a743312126aca1cc039126d9c7a0a8f53396402bb0343e9b640430458c4bade4ca03d48733e6605cfadd5c7a039755bcc3f0020843fc6bd2533aa135c1f6d718eea2f07776c329e11c8e286b7fc12cf8ab689bc146abd742ba1defb18941661f9f91039641db74d4d3340902aeb6a54544704bdb1abb0769033e8a2d4483e165576e8c583787b7b4d95f7cf41300453f49a7b0da42a282b1c90cff2d8666cf86a08bf931ca60891d797102943f068323056f5933510adfb96609bd26b14296fff589e8b77cee6f5b4e192887a561f5bd1237b37ab85c54ec84d5429d77afce3de0d8c95db199b11ac1a85d32c87b0349fab14e150b0fa8c78fd03e162c26dbccdd0929992afb14c86eaf1f2a2aea3276193c8796abad31d6f18b0e1551104629549b77fe2b7b00d0cfbdfcc24f1819ae1869fe742cad86975476111f8924a3dfe1f032f14591ebe04f2564bf978d1f7e52aa213200992d952322059926ac6b5cffb7e916fbf85c6377a5f566b6c1ba53627d8e64b9f88d3cd80f4a16dc40133d284318e3d0e6c8d6d3901d5c0f5e80c9c264a460db342c0afd9e6d1cfc6811dcd63230cc4715c7b6dd744b1413abe94decffe1cac6d4909c0e7fcd10198d0dd893f5cf44e0edcf801fd30d0366428a5c6c9fe5171f62414c84f40894b6376d9cec1e52f210d746cef53ce1be79aaba71abd52cba4765b4b8fbcbae2f44ff97b6391c5a48597ac3f0080257a9b05d102a35200748d147715dcd471c24683e32a1256043ac4d40dd9fc2d3dd69ccd211e2931123374f9ffd9793f6d138728bb4da1b8abdb25eb1ea2ab011f153019236474018fefa04d7b012ca6b6bb00650a4ed961c16eef046703d5a5d221a011603a4b6b80925a3774f4beb155a4f963579482f64eda6b49716241c05ee034df5f097717ec03eadf711af70751b4b9492a8764225b09e1e0c328b8fbcc3c33a8a83ac1acdb2a986efadb9e51b2d58a400b8f468beee298f1e6be02fe231ce797c433eed356efac0c979f7d3680eeb2708314f2d9124ddaa5608ae7706b6796d13a5ec933633a6de0d1ce5a5fc4e67a00197e2eb5cc32ed23bbf62ff9ad078981922219750df324132fd0fe7386a72a195635c3c726791a947e69a142f0e308cd55e6a540590219cc3a0d311bcc180ae2c1a179b6270ba920324b06f33ce35add0a14363d514f943478eebaffa0216284e22b172ad7cee2ee5e0326b499efc9da39139413fcc3dd7373d963c609aa7926413967cd3fab0d278afbc92b10ef9bec6b4b876b62443bb0b337f219109b98f167352f44668a71f23f9ab703a8cb193a2624d7ed8cbbf814be71309fbbdc070ddb85383a555457780348b7e26a6b8bedf5064b4081115ac61eede50114560ea125934a5512ef07e1616d93715cb8392c5d59ad0d492caaee5b15d9e623eff5d5cec52d3da745c954de71115788986a20e885c3fbedf62fb6fb50d3f7ef9003d25d85a89b1b3de5f904bdfa3cf6f468f11df256b37456334488059ddc802281c05a3a841777bea2f95ab715caadb579c684082ddce633fcc08a9efd3cde8bb7c74d4b8958c2b24a7c68c82ca7b5c1e6c7a630121f4c77d3538782bcbf12b5ed0dbf227f07040023a9b758057b1602f71e0ad0cb24ad0900250919a20e23866bbd38262ecb469076a9ced06aefd85ff3f03952219211d1cb5d97cb76d119e878fd3ebf5e4d8f4a8aa4359621aa04bf2468b91cdc1280b77c23ba0002affcc25ef55b55d635e716a9c17514f255a20cd0ab1498c44b03a35aa1f8200c51d5fb63cf16505f2a56dc192815b1a798b82d40e4d12ca0e6a17daefcdc935d5fab7dd0b0f719c1d4e58423029dd4061a500abc3979423a8a632dc05febc1bd80872fedc28716c4dc9bf60f7796e7d984718b8bd2934158e04f9bd8f0af13f35c70f9012d4db02fea811a25ae8751e67d2498f7d8a791c38f70b03ed7afefc99c6ec35619d24fcca59dd8add0f87af6ae701946733e9a4340cb52393d73be05e8897532ad9c5c61b6f919ee0471cad0bf5df6c1cadfc3a09b6a6a134a84e970e7caf8de11353db7c49dc331737ba93e57f317b0061276a14754e1122569d6d2423832a26e255c96788fc0be449d7f061e3b645b4e5f1b0fed919d7ff7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2e7d09b9aaabc6e91b226f00e71834fd6af4bb0c7dcfe2304a569d652c52689c21e62419108e2414ce94836370693b2f098e6db50238a65920335bdb7478d8728c3e84b9e61566b3fb8e1590ae013067484b99e5338e772fc0d3c36a863676c1dffea208a5e1ed6b24878c14ca80a35aa9a4d5f9ac61d348aed05a7efc1bd1fe7faf1281ca64468ecc095d6c8058126da032987eb73359183c8197952089688cedb84cb1ee2d00b3749c1ff45a07fc14ce6d57f0fe7367331c9fe159ae1fb8f1ccb2c7156b9c8a6d90b82a78a200cee486cdaaececb28c1da153ee18ff3f31c17f170828ed436211b2d6333602e309515bdbf7befc71463c7d76147f8e786170976d8668cda216445d8e90c8f72f49efc000c503c8201404035edae9e64bc683881ec85197492569f339e9adf935ff1455e4a947ba5f7428c576c7e4a139ef7ed3b3548fc4a90e171670945183a7a7738fe00ae75d7fe50f566651ec29b33ac6fcb3a15ff0323ec029bb276010e4c161c09b608f2c11f52c18a61f8cea68470085a8355e84753609bf8229363b8ddb73ba6f409ba0b613139eae77338d99729fe10997180c0292384a6e00606df3543dbfe4319945ccdd3a5af7ff7c7de76c19a1403cf8f14ac1e05cc7435b22c5da045382aa0495c69214d00b1ec425d291e248f49d9ddebe5396692678a2f465cb8c17d3206a2b43f03780606bb72fdb62ae4a8f4f631eeda5dee21406b44d73a7196f5e1b4640c576270e905ca1f6727cb21888b8d54c49570e6a18742bb84ffb50ec7c2105a0bb7247bd03782104384eb255696080f161e5b963ac5765af7b46b6f1c5a834b5a6933e2e3224b0f38d371363b9ece288c7b074612806fead8617b021b3376fea17575ed4c508ee2ee1e459d5f2a4767cdb65b3e54439532ce0ccc0fedd44f3c87e1d4e33049b1520e6c4fa2e9c2db9682d73ec5269350fc82bf48deb9c578cdb4b7370eba931e2740c6778c02eef27b52e49a25b0fa080e9c81d6b6a88f5779d1ff85b40fb83b292b33a5a5d137f4e0e6e756a41bff2531c35b5ee1e2b9560886bfa81e5a40722078bbc1337f24498be5e75a8b8f2b0f2d9f53c9a58ecbdb417a018794c1b12ad3ce66b37f333e5944f8ed8e2233042ecad974fd4bd44d50ed56cc0a5d6c95ca0bd63d63d1160b8dd5c700dab03014ebd019c3e31addc81cd4c12919c38473bc903847b97150154b05f928267faee3ac06064a635cd1c4a7be641e9c0c31d4672a9b8c9ea608e4fc9b376d5ad5d4f7da3549106657d8c75973e6b67b819a3f33a1a715f8b966fe096028d85efbcadade258a1dd255185b9abaf1f69e6ae83c88bc05e9b1f293edd81c75701a39b9141e9e707a919cbc07d25d2ae8ee0f4253ce445d10af99b739d396c53e76d6c92b0468a32e8974ea5469223b9351b7d10d6d025693dcf6f9686198c1485b1c21a9f74acc41a427cac8c7d2ccffb0acbdf1cdbb99791e518204e9e81198af51ea165e0e93bcc8fc86ed54358435f4342d88573aceca5ff17a95d54f5c365cbe4bf8a37a9fa6df3a434b79120c3c0398495871469c8f861f08a18c954a2848ab6dd92d579907d02a2c689c320b1cc7203beb84a6abcf7b2354b2768284785d5f7740646c28e7831466ce275e2ade271328c9f923a4922645874ffbdeb22e812492b6b083f54fe0401c05805c11890abb3b7836852fe06fcdc90183707c509e40e6c27962a746cff5749311f467255a5e9982a594f3c23e02414e760188e89bfc9aec27d2e7d5387c960240f0d5bbfe456d6fad17993f7b2d18c13c5981fd60a0d7bc229b5d03031dabda77170251deb8ddc5b5d8c8600e9675df3d400d98d574c4bbd385b0d81820dba11d3097f2e2fe110e279d292cdf858132e27ed4c0e2c08a70a058895c5fcd4de199043ba3f26132d16a2f64abd642644191da7f7d6fcb5063f2db8f98c16c2a21555b976ef6276897e65620e5dc144594b31eb6d764de3f1d32d76b93244499eab8fc525ad699dae703d905e3d7454cb4b11020d7a9417f25c615c455729ec3c32ab1156f7affb1492982bcacb11ba328f1796684263c3703185a43e791c2d034134088b6caa11445c017ed4850df6f78dd2030e7c4178f408e7190506bf8e7c5dc725236afc62c64306140c09ed8db2ddccf25066919b06392215298e68830ffeb0f1cf80fb8212de1285b1b81500cce554cedebfe8bc2f48b3131c8ecb9d469a9df8d02d4bd1a293c34e961e38d2de3b260319e6cb5ec7ce16ad7e764d5fb8c7ea94e5ee41e3fdea74c909aabd864f45ad3992599df5782fb94e9fd3522cceed33706142923b9d68b3af8cfc179d98ab56dcc8a6f512b8e4377121349e970190e4f5e2a8913b09951c4ca080db8b62c2bf673d5d5528f2820daf82f87710f9599bafeaaee384bad5fb3ae4b76dd20632435350cb22cabd9fa86435cd704cfe8da408d9b3fd8b39c1fce4ba2e72f41b608f3bb39f025a8283a449c9f21e8db9c3ba8b406643c10eef7df4a1445f741ad3ff8ac637686ae9e46daab024d66593922bc1af244ac892951ac52a9797e48d0310cb1932c97e4c18710178c44c67245f9426867c96f46d794ff0c6a6b097da847f772d0fa9f731c65b08845ec504d4a2703456edacf707f289e205e03e308bce7809622c8e883344980a8362e4c13cf14c75a0d5f122faa7551358e2a5312947a71c6917eb83b93994a1c66f301eb5d28564e4e4181aadfe3e2f300c6a0c3b96990a9260458c3c0bfd48fdd21b8fe7bcb77ca3966640aa6da1704bec01342b21ba6e8e84210444321e7a7a4a1b973b165f476d5b7037687c2ba0dd001f4b807f77a2ae02127e6a5294a0cc25c4c73875e93f92a1ca5170b0391b93c708b4c4167d6181487e7d06d3dc7673f39b926861e1dfc407e9415b90565ad0cf41f27e7d180598e5d962b23c72460241f47b3350d592620c316971a30fd944877f970819f4196568c7d1e4f2e2a9e78f83f431c941120d1d574c5b4ed2314f6e062509838e17772fbe4d27adaa1ca43abe9fdc4190b915b9af6c812a29dd52017a0efb30428a3ec91126e2b33518b8e208d0ab4061022c7fce3c8b9b93480cd03fb745a6bdec3cc38511beba1018a603f739174c1e87b1ce285ec3398b0bd068ebd0715d5ca7e18d7e701418c7b6fc1f0e3bb8db45b436233225d06a9d933d29f2cd26daab57dda551d47b55c85e1b91b24b086453122a1d90343bd52778b391f92fae9526768199c3b16cf79e88851a87f97e7de31c2e2bb70c5ddfd516d43f435aa1236a8e6de938995184b6c0d907f3c9839e625c82cc1b00bf011307ff9075e086ebc409f30224fed173bd8187f88a3dd03c5d3df88d30d3e7ef6dc6c6240543c874df63c1731d44554aff65024acfb8bcde203adfdd9cd860d131dda8687616fe55293659ba861c658108c5e89d18ecd20a77fda93bb390a27d2bb726ec5cbc90e31e0c1c56f3e97aac763e9b6e0a2c9827b0e0f526199f3539a7ddb21e0db718c54a2f99c6fb3e2d33a439ab1c280a77ec677f443b435681ad42cbda7c2d990e721a4b4288e08cc59d3f319845d709099f183306d9a549202e690c209510d4da502ad9b72b5847fc6f93d0d379bb9ac5d62fa6cd9fc4099953971904e77bed1505e845681cd7023a113e71fd063a5225182a44f8dc33fa45b3597cf7e1b36436f9cf28c5ebc14df738bbaf6599c7a1bfdb9488293d59adbdb42ca28a225bbcc8b26bfe50f6cb8dcc3c87e3bd93081beea70b0acf31c99679dc9d142c17c96942b63b30b9ec3a4421932fb95590602349f0da276b37f8370293075c7e30a0fc2d7bb95a312ab1f38fd31f8ade00645a4a4fae787dde5a21d08e17e5c10b66d7f18962f58740b73e6f82d3f2a76189137829d478978383c97c142b4ab5168faf2745c47cfcbcae675918e96b523243014c06089218d5f9a06dcbdde5cad08fc447575a6b31fd2c10d51bcc6f6f0126865e6aa77f923420491e1b9c6172d7fbc9ca34a14aa790a4cd5bf209794e4ca824f7de2d7b942c9c160599e3283d8b382238541595ce05acef66320d0380835c5fc0c727209f2dc1b9cccd3eb48b68d9600a3c33c735caa9198c5253b8962397b941bc1108f3c63586dc0c2b90fcff53f5c85398694f5e2dbe16e989e30fdbfea3e323779f62746c1fabfd263802cd4c65fb409ff69b4ebf5fce5dfc2d4deb05c23da3c74e4bc6d9e6c506bb342d4107330b79d6f9aa0ab27 +MD = ba83bb6cec2dfc47197841e3c1a4d1a0b0367b5905282942d4f8b917af5d4a36 + +Len = 77848 +Msg = 6a101e65ec33fe2ba61d36e3a2043314d554c2279a5126255ffe69c29e3eef9b103a51bc1d0268659677a70ea668aea806fb1d26714fa63c585f6766d62a762de611bda6d480083bf1d05cad8b6c8b5a1c3305bcc21ef133ef237c04625971a1565c0b2bf9f307351ff0fccb3858efb27fc422f275072e928e1151a32a140980c6e5e25374a48cdb889f306d9574043998761ecf725286e29cf38e4b16a26650a072eb272ddbc0b695a5a09d8a07f276cd119e5ba14720a9818fdb040e4daf9c4bcccdae0ce0ca4dacc9f362ff5be1f2875c4d9feb2e2572a4added7fa5b0de92fbb31f0fafad32837d4d2c5dcb6f8332f20d0a2364ebcc26f1742cbc215a7c1b406bff6dd7203d09c8fe4cc09615fc32b25d26d6cf00e234994ade94ec3a6ab42771ec79f9081cc45bfd2816ea43f2ae533f906735c421c9aebc83886ad313041d4f76b269c76a4982f43ecf4c6c0eec312ed7735da8136cbe53ac0531a71d619e6f1eb5cde09e1ffa6e014811109992f8957c898b2f3f7424aab899b548d283275b54e279e630ae1eb5101fecb43b39062dfff862bbfe968e2c59c48a1aeabf549ea9c7123aba7a5c73dbb543d95c24e632c26e68e0e94a5742d00404afce9c82939de21b60a41b5024c4b69af2850d155e7449f23077f62ca8ebd6d969e6914de4a1b1f9fa85f786427b8276923e480ffb7629b32d33205aa8edcb5cfbdb34231c45b5326ac8956b5760a75b2af07c52b4587c1039935f8ddd564023b8050b8e750a6a5933f47b7bce0493ad4f43f079f39bbf9de8211a12b0c5d3b2410c7e0cb9505fd2d882203420e7e60151917af243a062b0ab64d6a5bdbcf48d094a021a43c7f433db0a1a20fa8b1cebe47142382f0713fd05c71ba37e9c311883564e239ec1d5f0bde4dfdeb55e86c16a5c0cc8104031e789c05f885df407d931b9a8d534ee639df3bac7a9ebd2d22675ca212e91ec5ae4a9f928e0e644f763b6dca89ba09e2b901ef4882ef8987d8f793425e81e5bdd88d8da0e39a21f7e4c6547c3e36c619c8b821a97ea761ff76107329161202f5858b8eb55ff1be40ad7df739148f2d944c4ef955d48eec9be4f824dea4641c759b8ac85b6adae232baa87f88738ce55a2e09a0d6ee6cd3650af7cde96e3fdc4304d366196c1e35d6f38f13f2c3f7977357323eb43209bd65d15796d3de6bea69a6ae8e77cd8561334079dcfe6c96eae8ae10fa750a2d53a21f5ea8235aafedef6b6269fef5d70b518ab00134d63287c01aedfda3dd9f3d24de562b614cd58edb39391e354ddcdd39b77aab1c69921503850f6fc5122822f3f48546161ba37437fa79d5a53b5c7ff2b120023f8e803db9d6bf77641390ab184b3422c92fe2470b956bb8d4281e99845ee92d24abc2a7ebf5453d07479f7f9ac9aae702f059b15df257ec4c7debd2f8a81f55532a21faa1c9e9ea36161c47815831bc49c6d25837f9859c95a08bd2557608a1557165dfe13cf3a67ae8d1aad5df0fc9271913e4a0923cee35fbc642a3afee3ab1ea56fdb535aa98592584519f458d372351e6fea1a5c60ab6f464caeb3d1747effbbbfd249d58e95d35fee3e774f32ec6d6114e401a6919a0f52c113407ccf1980e5e86365a43c00e810709b35389d596105c7b87d96e437965e7c086f55460338a0541f455b346f36f676b0dca96551d68912e7eca1dafcbac5d7ee9eff9bb48d779d56576f2a39468e5b0fcc164d6e344760e2cd6bd861d3256f466dd012b5f5d82eb92a647fe79d54a808920397f6f0dd5c499e398eff85e9aca04a7b5d70183e72b81cbf97f2b1c5e85bacf5e78492c74f7cddaf413e39af0a7cc365de8b5b3723c3cce515031a7e96499b71beaf9071b50d1a41a1a664e2233c47041850455e9c7cb98979613dcb3c82ebeb7fd07089476ac27522b09e0f617f63ea8d775cf15733410137c5a25835780cd7cd8fc96a613664de36e55b935fb6a89dc05908abee9811d0c278de923b997cdb0a4601818cc08fd170cd141a78627372338ddeeacd1baa9ccc2348f59977ba49c88b9f8b34b981f342d06e013613531c698e564a6d2e59b9973d781ee99353c88ad919d3f38219a83f87aff42349c600c4c2f5276940cdbbc62ff26aa66cb7bbc3a6f6f843aa8584c96b704fda664ab3f7d4321e2c036507db933e654a7484b7f58dcd649fa3740d72f45590a5f96f9a552aa3ab3fe6ce4239dfc29b603b1931b2f5f3a5820d53a6beaaa6431083a3488f4eb03b0f5b57ef838e1579623103bd6e6800377538b2e51ef708f3c4956432e8a8ee6a34e190642b26ad8bdae6c2af9a6c7996f3b6004d2671e41f1c9f40ee03d1c4a52b0a0654a331f15f34dce4acb96bd6507815ca4347a3de11a311b7de5351c9787c4538158e28974ffa83d8296dfe9cd09cd87f7bf4f54d97d28d4788799163408323943b3e72f5eab66c1baa0a8d33a3bc6eae3bd0feb90e35726e70c91928b9da15a93a56b993cbd3062da331a041567158c5174e18b6e136519b2bd47190310b9bf5a74965074fead29cb955d03c45362752a2deebadbd7fbb5c1e2e0320428236f7e698fdb7036861d730e9858b1c854ae54305d033ff5c103fcc38766f6ac8772e9cc7fc2962d6247bbe8f38c428d933eb9c557eb02365e0a4ca7623c42658cd181e58d8e50aaeaad8b699726e16cc82d403404fc8c627bd297d8993c4e1bdb9330fbe2c60577c659ccdbacaef52b9b84d0c48bbd4641bf64c79c55ee83951cc0dd58a5f21c5a9d53648459ade693b34a53bf15b6969ad3c7c23cbedb499df6617042ff9bff1c17a13dadc7aa1b6cb987b06bc970e5375e0372fffb8a09f9117dd00218481585dd4d3e9d1e2dfe7e5443cf11d0729cde0921bd2f35832972161ce7e01781c65c975f4e9e85bef6902d8798f8514421587c288d12934f13d0ad469c2324ce7a6beddd57f624e66b6ceb5af36a756fde6d5e20c9f23e752ddb7d04d71569b8997885d140ee242cc5d837c5c8ad647a39e4581259155d7de15b2f5d80fc0bc68b4c0a42f1cead196d9db9cfff0a45ed9c87110525c419f096176a5a80213581b9af223951dee634c983188080c940516e1c320114469a55b3d8d702bdcc0d6f896875bd4a66f8054251fde033327f2d176c620e10e50734a2661e5d2045bb1a6441acd6c3ad0b1441d10ff8008d2709ff3f4a3501e78816ca89e67391d3680ab3006f8ca5fc45ea2cc9f7cfd021636d8e5d917dcd9547819309d74df9bf3cc5dc6e65e8d69bd10e6c025c6d893759e22c8de0ef5d37690065ad9af23e525ed5495337f13fd2d5086a44e7db151731ef4198df9199151918a83ed76a4ad1f7c260778db0c8e97a618d5640205a09141d3547356d69767d53c48535be03872e128ba10d2b5a27e7a03c020e4442552af370608b8bb6a4bd3822475df553bb2c4f319b626cdbd5454de10ef950b4429af95aab88f166e5024f284ff71721b41800b92b327b353bbbf0e343ab4b97198db75bf2d5a9638274213f64aa2d54bb1bae8d1a265e4ea17212aa69c93dd5232ab6dcfb19bb93c33a35cf4d1e3dd6185de0142fe51f104f913a9e48fe2f55a59a7d438ffd2de0ef7d1341d3fc528e13051eb63418c6618c41f127a7ef27ffea0494fa76290931506444fbbeec7164f43cf1dbef66592ba2aabead504730bb399184677844576d2c184f67d695a4400229dfeb2a78e255d7f3299809ac4f71d968d4f45df61d7eccc0bcece2a0f20a86f5724eabf568c77445ba509bc78e0913b30c08ece9654b788514f1acb464aac8c7326d3b86f469c0c7fa3dce3ff46b2f97b50aeec236bc778fdee0fa7a000910c8a6aea1d38d2305a270c769bc8980753e56642c2c99b91305a220959ad00da61f567aa7833bdd89fda55736e8562e2cd0777d6bcd942a920fe91945bbdc9fd1f6ca3a133e067f96011f53fb68625e9e74a0bd764d32f73dd73933d1852aa8db728b54aeaef7f172d5682581e7b6f911535a8c145578095c821dd603a2c50e0abd20324079151b65a30833900b58e5ce952c520c8d7046373b1a6aa1b7b2bba7ff113a914769e5b99085e7f07c520c1d619f77279c21971528ba57746ffa95f95fe7d668c1f938b4c669a868e3ac5445df3a632d2b93e440718405446fa6864a06296d8e8ecffaa06d3bddc1e86ca79039857fe6e1cf16fe3f00ddd962be75e01c5f66cc57f315c3ac84f0c3329cec449408311967dc1398bab745faee484905c8112be8c46b6f66accb48366a430baa1b4ce29064c2c5560930a671bb4eecfe32c823aa7c41f2d095984de2376aeb0af3d8fb11818a137f55f3690472d74516830bb6dc287d854b8e74678f421876ac4734e265663be45dc589f47cbbec3c94e3634c446f250f1dbfe5fe04335593d73de90154badd22368279b1a03d94b9bf79574dacfa437a8f51757a0ab1292ad5fd7ebfa52579b453b34b063aa1d7a4e16e6f21da71deade96cac4369649d24ecb07b8322511582fc81885d108ebde540e93331967aff90733711c1e9f5b867657e69b791e3bc747814b71decad4f6524132ce3aac0ad0b75db2c5d510c83dc888ecec2bb867372119360ae94a6940ad714e1a0dce9f0063680857d6b50046b9c09350c68e044640d260c78d02094bda013dad1f69ed069ff4ca58bfd6a45fdeb1623fd5f993632b5f741e36ac45867c638a0dcbe86561c186a13edd0014e78bbde22fd6a5a51c4512b8a572839e7ee92adba2bfd4a8907c900570dacbe25c65589b9744fcb9e0229ed6c3cd4274a3c4c97b0247a9172135a37fa515949d4cd013e71cad79324d5846371fa343887373c210b31ff041726123683239e4963770625d067ca5aec23acb520f91112a8c9a97052b9524b82293a267aea4467d8aaae6760b3f0cafcd6e70c01a1325db4d9ddaf0d243c0dbb051a2e670d144a3d503f2ca91711895ed47e909d5b61c2b44e1e04c5d985f2c8a0fa77d3f6d39a9950029b32f9f43f1a07b9687b8d64e8af12b5970042f5a4b3e42228460c4c01f5923fdd83c262953655dfbd24a10479ad0cea9149c654c884b8d96a46b7462558fe3e1924db2332bca83ab61efd091ab724041a25cd6909410369655d5f88aeca7c46789eaaffc0b3e7107cf30b3b75d3424d591ebffd0cf4af1840126cdb4554f4a0227799bee424faaa362a3162320c4e0b77bb05d87ca4a32f24ed460792fc4e953e3a0f274816c8500d4cd945f96730879c8405c2ff5ac7f5387756d43ccc726bf56c740394913b4929e06aad70eed109ee0228833d1d03b4a537020aeccc486a6e972f1a709e3adfb16e4c6242a817d898bcd6e2e0f53fb292b6b3704903b9dcd242aa348243ae58cd7fe62c159deb3ec03b78a98dea6339287ad2cffc79ab0748f64c19758a7dfda79aa2d392d636818f05749eee05578f8e0dc5efac360735f93a7d90ef7b90166447e71e605adeea2ca4348aab4d03fcedf7f6980243b6ac0c96a563981dcfeb2f0e1ed62731cdc1bfa01e346ccb50ca6dbecb92a5a79fb4aa922c581a7822c32e78adc39164e94e727f9c66d885243f35ecaea43f6aa997fbb77b381a9472e8890cfdad44fa1cd86bcb15e6978569a56e0806987595be9b268cf8ca437aa5a06952765ce8fb4ca9d20bf17d52d305423f9b3b34f12ec50a549a0cd83a31a534f6d3809826706307d0c897f3b175e25fd12cb5415b40a52aac671f28aac158ec57168428a660483b8d8971105b75e6434c43db865ad04844577d9a843933a80fb5a4e8d50fd3e38d30d6e69cf9dafb38d76917cd97e8959f7c64e3b28f8e7ce73703166709d11c44e1375e5e32ad08849a24d0dcba8f748544a2647a55dabbba06bd74a63e63dbaaca35411faff5f470beff6f7c6acecd3cd7c184a6331f4fd1495a6c59539008051057f8a717baa9446b7f5a754fac880d5c49aafcd0661f742960654af3618b9ede26e9be13050e48c82efa8f12318e40fbc04046d5b613eace59c73fc4dc4cbd5a297d2c4bdd0bc4fe93b7925b65c51ddeb0ad4ae918137d5fccf9016e0b34aaace81cb8664a88ff3436fa45d15116ec2aa059d1b5930773044265589af629acfdeb2f2c0d546d4293a029711dfc69f40a19aca2e12fd715e742720bf0a4140c75bb1c4ee704a2d54358aedee76ea77ea4a20e8714f46cab2d5488e4171dde133bdf4de79d6110006be6ef54d6b0b6d220c3e746f6ebac7d01000fa9b8696d0678df28bed6739d0b34d3569b92c98038a7049fa8301b80d289cf6f237a91ab305344179d3b43323dc5a6497ac4c1ecf861ee9e756a8dd0f4ed48111a069c7fd8f594814a73d8b8df47e732bb14a1e15975084c754b47852956f45b560392d045855ace8e273b1539e11f7824297049a40bda126f7c5385baec59b69e1a7b88c02c1b6531ff723393bcd5837eac360b224ded562da5b9baefd6018bbbf3608e911261b0fba287f835ff91bb9044fb0f1861c881756d7f0b0f3d7440763548ca005eb316b4b9814e66d3db88249ac83dd16ff4fc107caf5f6448383f95883c2455399aff23eb691c70603c520055a47d94a0f72ec67b50a03420d7eee0964384d7ca9dd311e1464a99cd3b81ed1e98b7a81b5b7e5e126bb5c8ecd9b7210465d2cf3a44fb464320bf2a43617db39dabd35609a756a2e8078668d5c4011e7daaf685b017dd8ab800656ae934ae1a79e5b9e692641d58a62cfb5b032233a0a71bd841559fe2a5e8ed23a3e83e7dea5b4e51a0dd193a49f3e2fceb9d7ab76f2abf614b5063725e7cefe11b670750eaeaef84cb134e173d7832715ecb55f453af9f77eacaebf67e1c0e871c8f1590e3cfcf38b15b8c1bfcdd2342fdb73a5214dec10368ebc0d4ce6f53feec87f2a69eb1f65698de59ae4dc9be571086b139795e2fee0bda6976131ec52cd37826f8e0396dc7c9c44038f9e40a98df6342114cd8f11e1cc06e4218d06cfa1b8a37f0740f3b718c34c621c9d70feeb174764253f30d7de2c458a2a42e51500ae4aff521da683e295675d2824ad53fd0e1d43457588df2a70faefd7ee07b17eaaf166eae42fd15e753d4b1efe4657582d3e5501fae7864b1c8f8bb6f8df2350112f2c5e4f101dd0f536b27d74ec67610722ffc759ed7bd4a18bf433fddbf949836cd618b8c7c80e97dc39d0130002cc2e53ca11fd0b1e4b82789ffb67ae91af6432eaa6bbe77e5bdfa637936301c7ddf5594a8e6eb0ec1431ce1569b0978b165609e084b2cf8f4d3f2d3243ef92153b1e9bd779298f73c35204cb0b83575402bb5a4e3f4810a95728c9c07e13117957eca4178eb7e723dd45a5475d3a3e7af916bc8a32f63b2b0e4f04589e781062b8f1fa812b8468aac6af3800eb5fed6e6dfaa92b0c27bfa2d6f4756111790f7fc2c1178acc39744713d1258e126ec4bcc5d998b737570e9f45cb958093a07f1f29cc83bb0d21aaa7495e06557ee154c4b53613a5212ea87eef36dd2d8188dfdf4296b7885ae76c39ebc852ed9d423e44a082927b65f93dd017b8c4ce679cb22eb1922b8931f5497d5f9283ccda1bb18b2c51adb082610f2163e3d4e9b256868bdb5178242ed5c2f0293f1159c1d87f269d25cddae2d0ccf1682a9615fe30dd753456f5efadf35920ed30943af102f79587716b5123d2d7ae790f70c9a7d6278951155d423be88c8df01984e6d425bb567fc71ec9a1d1bfd73b050d8b4b90e526b60ef6d2552fcda5f65c5bc3d7bb2af7fa89409b0977f60a029dc4c1560ba6dbe7c65b068633acf7446b9178982dc6e86c4a794bb7101a95845c2f0253a0dd274abe02655b9e9af08ee9ce6b82082fa6698d416237448e2824a2b4c4d0eb08877368855521bb28302a395b2321d4c5c056c41164f68fd1206813ee9f3a64a97ad6584c7c8533d524aaecc025e41e19b4d88161ca915c742cc32244e81c88408007ffd0420273124c8576a5ea653eabf24337cb098424f79bba504035d3d06e257ce1a92c060370164e5974e711d0ed174b79b5b84b93dbfbd210791f1cc772d999804fb12c6f6f206a27a5b2865f6d8245a9aa4d540381cb9f0557fa33f80f2b026e2c77c2017fe96d43c0c31f449dc1c65a114f4a0e89998581555dd5dc83883c0dd7c6838412efcc404eaf592b0e64420da3147a1f63d40a2709c06edf807faad1da43dd41d8920bafb7cdc06d3fc84d26b86370a0a119a158ddb85b8b767fd37c9c663bd5217eafd494a4f1a5929c4c47c982da5cb1b8efb959ac486ae6174a4096b42bb89e043d715dcb494eb72ec3f36f18f38e265059aaf612a1e84fc473d071a42956aed118e87bb743d30e1e489c018c68cf6f7e53c04b91f4ae2415f4ae85bcb159c453e6bc96ef8ddd17d94ea43953b69b0d71827bb290bd07036a213d7b64501c8f0b0b6007da73c754ee4ace7f15596b80f84a3fd3a5779d5e5f9dffab4182295f751b75771e821c55dbd16d3b37bddb5a713faf272690dba564cf879dcac40ac6107b6f4d0255668b1056f3063170450a5ac72c15caa54c69084a47db76923b436bcfaff25c5a10752a600258990d430133655937d8216a29b872c2ecbb892567e57cca1f530cb4a498611dbae4e15fdf89be98f5f5a1af57f3fd8b3a3ff563a42c07401cacd9cd89d8fe97a59b98f615dc277de899829684493ef35c4a737078adf3a492b06db5a56a7d22913390902499346a783a60ba3f36abbdbb819fd665c9c659ea14252777db8121063364d88c4f6a013d6ea884d94ae82ce06bc70fec2df3f2ab3eac7d819a9f258d118219cd7d3cb4a09ce670e2d468d3536f75878c3900e15e96403253262ba29e5474ee688121073a4b87290c81a2439d0347c7b67971b87cb19ce05d1cbb2aa282b9c0de19bb7b62f126f786c128e025ddaa5b0b7dcaea7e271ef20fccc2204212cd2baea56083c33432771221615b765519bbeba470f9db5d5301fbe4d515e59b3ba94aa2c4b2d38b36221f10eff806e00264f79c18592ccab57aa1c3688e156261a442903c7b1c4cae830e1e2958602510e08fa3059aeb05c2d68206f0fb5a2efbb716fc5c5ee61f08047fa7a1ff1a8ab1a93477ed418e8517a02d1e02e01c57465c485588d0f968df40e45bee5e9e976149868913bf9fcf1061f37722ded451fdfe472a6673aeb090a2cc9972e954b1bc2be6353d97875a398685b0b53a3ac57f37b3e959b98e9cc8b4a8eeb441d5800ecae42aaf5bedad1fa854494e9488183672ef20f7050173e3e0f9da46daa988e5c100d80d6f2b3e2f21dfaf637074d0d04a794fb2f8afec8ed24fda8f264922dd98bcabcc53d893e49d886178506975c928e2f40217024d05e30b6e11b72ce462ac783460ac7e24dc760efe11b6de7d8d98ac8c88b2713c05adcd1352ffcd43f186d3f06edb74976335a3d3b4065c5e9a044697ab8da53fea9d0558e782c2d826b2507e4b63543245671790c3e16baf7b164193eefaf6af413b34ad33c286075eb96e2c8ac6b5abcf94baa3e5ba74d6ad291e1fc77cee208602db9ecc418f5825f69d89a187f15a7e290d8b8e04007aacc73c79c996043a457e8a9c0582574109145f1424299fc4ddae90b62150b6f1f67b3d6079d8d132fc28922393f77668647d336a872e29816a8fe4c24412d0d326af91323cb7cdc1167bb2c3ec335534e4abbaeb4f081706b1676a2e6add169499fec88d96a5625b10e24d0b82a87c1cf62a4614f039f0db2eaf91690a21d0ccecc353c12c4427779816c158dbd963a715636585ff564f555ed31af0a66397d27ba7c37b41f6959d0873c04a6c48a459cf01a9acd0cf7b2bae7c3753c414e44be316882a8c4f3531ee73ca3eb878b6bb8f6f82f829181cc4ba05a700f7d84eaf9f9a124d7fb07edcc6a13fc444dbf322d31772065cb29c96edf9ca9696102f642d9d025280ccdb040d869179a605125646940745d0418338d6e31273434f1f0009a9d8e823e6e23e3f9e8fad30667c9c366fb33548275910f13c2f2563f78609a04af66cfda12cf1d9436afd9882aa8b3ef4f66318f696c5c97f713b9cac0cf7adfafb5f628e03a5773fb3e922ec1499dcee414dc711c4bdcc17791431cf1c507f34483df7001eef75ce0ade83f5434e7c963453c70b5b6f75beb74de7f32c8a90817d972fa9d7367188c06c2050df2fba974013bd65d35152bfac57139ab62c8e5cfbe970ddb4f0d6fa95107c6120a3f35be51c0e93b519efb4d8be393851acc53153b36f3e30c5328dc94a1cb8b041d37ea3cb4f37891fa918bce1ed5e8781e1a915737f2de31a00dcfd9775ca169fc759fcbfd3a3b7e91b55d960947fb052402ea1a8253f4475be42a2771c07bbf43b986058407ad9ecb316bec8c31e74847d3c98cff5e4cd5ee769487774143915cc947f231a1f57c11cc5cd78fdad3caef54d5b6975a0f63c08bb6ff71251e64ae6d899aed523d9dc94dd960fa8be811854eb79f3091647a39eb389a47b536c2a16ff4069e60aa8b5d7d898eb58c4ea76f89164fb34974a1c15dc15de239b3329d96313d2d1466cd33241569a9252c1417cd9bcf09cb6660c0aaf95228f9bd3d0aa9e84783b699ebb50a24f9bc9eaadee3e2ee26185f633f9e9a8a80023c7a695071c02d868e6a6d49f65f47d73ef28f3d8fb65cca4c93c7c3f519ef584c1541d7b662f620e302dc59b16d5ae34e29ae8c9d9b7a06dc1d7f988351a8136fb44a083f76aa38ff89c04c04f83ac6167ac438d54787b3552aef830cd7b219ee800e49d6a352b628269f8ab4a5f06ade0b58a9fc5f8bbb00e1a0ed5756155411a014034191f481a701037b8c1e83b5ee04f246dd8e8f05256b193f2d74daab1f3ce49f49e99b83c4437387530bfb918d8e1b793f7a99790cefe2df56d90805627e0783b6534ca3c6147816d01361e505d159aae9cbb4fffc9684379a2ea74c208c0419507611c9f79b9990ccdfbc999cf4373fa42ae57f3f8886adc11bc067a28e63c8dffbf1dd9d015e5d0f1714949b1f3aa1383f36e11bec70ab9247593e30adadf72a89f5c8016d4fe5616271c04a7cec386db1ae0dd9eacb98d65b7db911106910fac923706b08f5908a68dc04f030d46c0b2855ecc0ac1edc55fe31c08fe11f7a176385be22fad7c751d25c48d6667aa6d94e34641a57f1dfd7d97f3bf045579d49fe239a706a7df08048fa744544674ca0c8525e2d16cd0824946e127d669ae1584203ed9b807075dd71bd7183f222c82841b8c3430f38c103d6062d7e6c6fae0bd92f9dec6637bc31f6ad25d8993380395f6c79a26abc723e4750743b7f5f6c2b68af94ab415a2f437ed2798e6123de9bca786a9250e1819b9053d0fbc5f183809a89b8203c6234ddb23555ec717948152be37c5de92e57e35918270869ad5bd214c7f3937cd635c53adda239f2bd28712ab6994a5c2b5cdd49a563a8911b5ce981712c4b2c3e99c4bdd246be0b78e5756ef8a8a0d260f85309046a2466c4ef8d878d4b917223c8a2e41d2bc3e531e7eaa0b191a87256940b413d26c40f2f7a85ce2537ad760b2a2756c5378fa770969767ea3caa659496cf98567dcfb4e4679aff40dae76181271bbbd2546c7abd5a466caa91edd2a26865b659598f7f6c1c94c2e71b865b0a2745bd4d69a086a19bbd57f978bbe2097095444da14a964e033bbe21e2d48b30926e023d5e74f2a3c1c5cfdfd95abc501829ea3b3d49211282569cf617171a7ad05e32aa1b30e74c34267c659c138affc7e74f2a14d4494103af036ea398307049ddf69c871c8c225ca80792a92e719fe4991c2210323562ed0c9c926c9ff39b65b3f61c8c800aafa213186fe8f39bb7d905f82c18ad0ffda8360f695b748e828da7d93111a3887b6c2e560241aa30cf0df48c4e158bfc9a9cf503fb585e27ae278347e4ffce2f0c23c26a559d9a576fe82d8092ed1526c2311021514ca6e7a59d0dea3c3c4927ec3097fb70e20c3920d27a7b008993b5fccf5110721d95f5f1550e6741b15c97a3f975b259fa48fe6933a1259fd14dd1d1de7e7866b5717a19b94d69fb464fa7b7e824371acb96cdd3736b2777ad8aa0c8c6600336fa829da62f949673e46981b2646b31bb3f3ecee5faa0299006944d69efbf57e9d612871f21a996b071f34a1cd41449423d872b273108d2f3c2b1fe3cc1631c8730675f0cf65512bad6352d7ba2e526b9acbb09217e6acba7cb2adccaa513fb19efca4ef61660b29afc77505935a771277620935c4a90bbb407470e9a01999ba6fd837c64e9921d57ca01db3df521d19582feee5ffe404b23604fbc343ebba63641da10ded7b3fcf9271af7b04a1def0ab89f45b2004323fbbd8c1021c542c1d2a31732ec488af689fd0ccc399c61728e004abedeba61ea44054430e8fdf596800b810c17a4e0b40d331d816053b703294246816a9261490622c044114d9ecd4a6161c3e6537ddd90b1963eadd7e54ae466dcb7def20de74afb4875251f030e388dff82e2bd291a175fbf2da991b3eec6545488c3412b6d177823eaabdaee005178a36f914aac13ac25df73dbe7eb98d8f5f61b9fe7848276819bcd2be5254b9d0895b27d63cd6f56eb3f3bcb4253ef212f0999fd4ce0cf6efef6432daa709824261c742e6e55d71e9928ab020bb59ca9ebd72962d807fb07d77d763a90998fefbb82dd2bd50df20a17e0eb07a8d7467812a6f458f3c0af49f5788ed9ff66d705ad0d14fcfeba69254daf2462838196978abf226605d4933d3e2fb2935fa1196ee60642295327e37423df7e9c027d330d3d6ada15760c4eea9be90bef1910fc334cb58e3a3a1b090182b7203c8f92c7e211ef44ebae2e8959f4f0c175937c295bc96121b81d5d83d3507e33ca9187f71ef09589721502eb90328afbad36ac47ee4453222b63b6f8f2777ddecf70256dcac1a5d13213521d993b00e1206a6afff5a4d4ba1974ee1067ddfc4ad29334d1ee6c6743b211e4c67cf99a9d55987cf976d32a110cb8cd74396c429e5b647cca90d823087a75818f3f539f54d426abdc7cb89d4e8b971bcc700a9903f24ac401baef214712a9f120ec305931267ebf500c3b779a1f799fbf15a147a120add61e7398a8290313fc208a7a0e59d20680ff3044fe1c4ec622f62e18959f6cf578c8c4bb02d6d31d6a38221807f76028b68eefbb7cfda3e66c19c657cb265f8b73a7b34175750d2e020fbbf28c31594b28a852883764a34145cfe246315d7fd58e644b104a2f36ad8d4e5df0e42f44d69ff35f94787ad83f75c08ccd0f6d573c93a79111c92bd804d49c10fa591aa933e31720c58666c949c395cbd4ac7d6c2948178f2c39927a9a9ca2ddf8311a10c9bcbd9d04ab51fec5f8f6a84351b64802775d4c4ae48ba5d7b007cbd2b5560200f28ddd3a2d63001ddc8a290246407230e621d051103fe023d774e3702df706404c2ee84d55c356b737fa59f9d342721c5e0a242b06d5b3e6d8912cbae124a5f19349c6276b9a88fdd1ed3d1140e4d12da6c04fbe0e76a6887c05ae991806667b8f8580aeb70f1f55720cdf30d45016ca88ec59f46f4a42718b7971f31cc5d147088b1ccc804ba229e1ff463fd8abc95dca364bb373780e0acd947eb233886ebbc602a568107699e0e76d7a279420724d35452ce5602993b909ffdcbca677c64090932069adb78ce24cff84ce50d49a0291c204717f8457e7096193fbbdbc603f30e697b9a0360497d85c6b1e54f2c8e4a654db3f18b2e4fd9363ac55bf7cc41e6ca2 +MD = 1c62b54424961d341e292395aab9c30054ae2f071845361b12e212466e563856 + +Len = 78640 +Msg = 5c45bf9c57a3f83cda3241ba8ec7b128529731138a4179abb90f3b2353789d5bcceaedbdf5c7906588ae3c8401fb6806b09100720dd75c124b00735530904c71231bb64c8750399d47374c4eb2b7c8268a5b9da45756c42e01c4756b9e3299ed89618213b447da2d3f57d9e24902bbcf067e727111c6984504e2a72d47686c162543b9d825b35b5d97954b066de5294a4c81e5a1e32fc0a07ce27365d039ad352049c364819ca37578790b83c666f8e085ec60fb749a2387904d40d9e4ae4492a1fb097f710b9cbd098c7f21fd9011d6d9484a486d0eab4168a9755229cd1a75d1e2f1f09d062d7d735510a7ba685c776f1b0b5075943f182d817c9847a01526d885e481ac983efcdd5d26dfa4f8c10a70f00bdb3533c752075abc73e72f1eecdd6c4bf847c6b883702a2a8f644729d6034cb1b155f32c381dbe9dabb1801e1108208c1e159a815a53468280a25d7a2451b967997cdc5412983487074c9efbdb822811bbbf1b82c9af39987a05439e3c82be955d52f728289f45e251618e9f93730c4097ec51a318ac89d34535007b66bde4a1c3814b90c15b77164f9759f080035583794545cd8e71c09aa8db9cfbea2ab1f494aee07527f4558bca9708d8ec588a412b71fee6742765576c9f20050ff2aff69783bfbda09164aa8908a33e1d9d33e1731984d712f50171592893801f3d660f96a8ef52755a2ed9569330095cf8d9cd1ae5e089b0041b50371ffd5660325da857c5781aee783a81f7e0b923f191036ce87c19e3967c3b5cce2b666e1bfa1c27a48163ff5213100b3596457324913926a48737cc0c84eafde6f5d7b097bc2bf64384b7e8eb5239ddd85ddde13d20036318ad432e5944ae9b462457041ea1137bfc777cbcff5e3c61a8df88558365ea8b0a9744f0c6e5129eb761ef52f6d15b209902bb65d75fa1fe6dc14eb73f89750643ed42fa9b8f9b6e0154a68268738b4ce0cc7bcabb7cf11beeae37efbab32d3d8b5646342069d373eca4847cbcb02b669b7ec4d3f2ddb322f44c4ce6390c9896a97a56869c9c411540fa91283aafc4d890bf9e68c6ab6f7a4743948207bc407a67027dd8594f6dbdc4fdd66f2a99dd09883812717d0ead8baf3c17ac6beaad528b96c0129dabe0d141565a37d395ff614a9127d6602df6bdf4dfde4dacbf6584dedd291cb1d821bb7fac256a7eccb148a071e67fb731d178ddd3f04b1362f27a2880bfdeddfdb8e146a840ee73657b2650805555ca41c72433c15690e8fbdc9a31268a4068432ead5ef2b2adfa89e56323677f3ee0865f29be50160273b4a94ec078932b9cd10a858e31838d5b607867e1ce6923432821ef46293a8bfbb3e3fd9f1ee185bfd0d4d39f0dbc78dd11bb9b525c1ded394e95df93f3c912ca20110e94bf7c381a6715fe5a306455c9c537653dbaa2820b20445f6c57cc7e2624bceb68036d2af5bf536e843f830c67a3722e6c9000cc01c7b5d89bfd4ab958e76bfbe394bb4598ff198be8e52284ffd4f65fa5853fb2626b70b3e68c4baaa790a6a6cc176e6f4a50ecbd4dc847a7d97f4b5eb141681b7833fe5616add8395d47f654ed378f9254da566c7a90fd5c3dcdf795586d83f18948e62bf307f74ec136e16d0c9a2595fec4de0038e6498b72e6846a61b1961bded2b0984443b3d11a82f159f2e8386090370de14f72351cc1f17a4796b4ab81bff8e507d30811aab156ae8167cad1db525a697787dbc8f872165f93bd1fc90b73e20cdf66ff1bc2ced89f4b32e7f6ee8c567c2ba8c90a05cd7fbdb69f99f9a144b9ad88c6cfd8ffb8304c201de9b2818552ce6379e6042c19511b1804cb422b78a5506abb21504ab9873d69ee750a7c8677e588c3d7bd56a0b70221b45cac9158cd7eed0c9d8c8c1705fb8c6e3608c7d7ec4b034e473d69a8d7f93976f53fbb2c5abe7983ea93ab1bd10df365d1b34ac0da883ae2dc8d4f7ad988c8133e04913c739976e6b16d910d14fb049bf113ee89692297473eb4ee5ee6373654de02fccf41964cfe99232435f54e29d73c319979c0a3814416ba309b268febfe7e41e22fec3d63934bbc4eda9d8dc9e35a1434d9089360a30ca8fb7bc0174fdcc5ca2da29b16236d6e40f54633404b85f4c4a8f168789b2ac7853944dc57cab55ca4c37176aaf553abb803bfe0ef1986b24adb0909dc9ca2f059d13fa4d8c550ead78ee4a6803f0eaa2b5f8ecc239aad3badb7691346cad22e2dabb43e21a676186c744253206a6712a1f1fb1e6336c438f52359ad3f8d842a08afebd2bbd7ef8e6a5fd5a413df238c22a14dff385591502b0620ff4e4d7e8cf2c52b892cbe83f3d936e3c2e0050dbfb757ce96295fde2c564a0732fb7289fbf3d5be8afec5faf0c2e1b5d50f43ec5467fbc40cbebc71737ed6566ece646d1f14c7eafeb8531b2c2c479304290387f23b7578887fd512ceab9255da508cf2a15c83f80de3cfaf501f52c477b5aca74239ad3233f5108be5e6664b9f0850e029d4f130de06a37e03a3e992573ba614eb6b8c3a34a7d6a35f363a82e47e19fe5e82fad99aa93650eec1f443cc43589696d9f8d7b41d9021e5a4f640d23b5015e970843c6855f0edb8805c20fd562cf5eb8ada52dbe0a4ce1e3782ce91c65bed71a678a27190391d0ae9077113fb89f891861bf3d0777c72b3f7c67448a7a44e9f2abf51dde579a78c02de7e35bbd76931d5a102bc6a7ed54becab79206791001b063f92d3d91854e5d5c98e8c1d7f0e728056c7c64214be8f1f1727408d8cca8c42e2ac7bf67eecbe6ab1eb40a9e7affd8d218a1786a5f62697f3c4d0a1fc769be48fe9fec31437bec77cdb78e778167907e992d6be9846ba5c2899fa2c49caeff62e8f84c840fc8ef614a75c609a0a8ff398282c735774f0779deee4b5da8f317fa6e7348e6b05d5ff5f97159bb652e75b1594412b494872ef390bb6c4198c0888e139379cfe183ce847f2cb2032b72846481e3c71d68ce8cce63799e16d8b1d18c6cdb57a5ffe6bbbb302a5787801fbbd190e46ca6606f9178bbbb5953e5217373dead5b1f87f09808a0dcc2aeef807c770ab86c0617f4ed70fdf3167f5ab9fed2ed9bfc83062be3db65c68befe63f56c353e25da30c08f145ceb35e0f85c5d4381e39c476e7134fc1e37a0bd0f0c6cb4500f4aa1398e63d65927eb86b02df8401e4e94b71c7210c4aae59cae88b915a8a9661e9be5b47226eedb79e485e819edee62ce9fa12efd9e42b08519d333984f298bc9529cf8650b034e077fe0536750d7697387656da190cede838657429cb2b6c5724ec724e48e80c9bee127388b74c2a9aaf7d0f6a4a536b8bd7e7cadc9d7395e4115ccfe96b64d94c591c45d2c5e986b9c784a93afe262865c88aa3ec8c89b9c5f31154f248b53f745171d8af3183ff770913b0a6a513b90872d49bb418dc2c8f42a08de3515783a66fc9c8987a9a1954fcb0b247cf9a71d67f4c1eddb2c982927860f75725da5a44fc7a7219219a58d61ad22a98ee28f7724657b9c3faf040921cf91da836ac37e2900a819b9703226cdbfe8614715dce4e508dd90151dedae0a8cf6d60f44b8101b2f063aa6b732aabc89c614509974add2665090047f3d610946a531bef46ea24edd294c01f68c5f559422895076411a14063d66b4dcdb6a468408b33a81cb7cea9179177133288ec1676589f0b52a72d3700ad8ce3caf11eace862428f3b9e616d45e629f78ee7e278af8dcd85d16ff362d21affaa8a19e1dac874b33531f27fa2d40f733ccc679b086414aaf76ef0766c4e8b2df26995806a773f101a8e488bf24879cd43898c584e2aa9b1d099cd38bbdc9ab26c17f89ce46b3de3afaf2518d419b1a2ac24cabca269a96cc1c05abcca12a60767e3b779c12adda875130ca8b0de438de75ca73abdb790461ba12d651f7759b7867b56a9992caad90b6863ae20fcbc09856fa654e88aead87e8ab9e43471122d483d6aced4e721efc30dcebb9cfb678ff6fc4c9dcb5a359e4b0b849ca1a66bd31da8484bfce0ef773c81a2339d60e2abcc711e67ceabfd0201921200df6dc363775a839379b04fe9f85292b8aab3c9c7766c70557b06ad9e42bce6b3566db548f5b2b147f3cbefc256fef4bd3d7a697d755d06e948e0c3ed8efa77269efcbdee194f35dbc39a2b8b08e55ca3de0b6e2849b12695c0d0dc5a36c957cd21b149dd429ea5c191b1afce6eb43f2ef50d3472740773ed7b3d637edab7ed397711e591121f758bc688d8e6f8da20911ae648c684de6342c0bcd5b60b24cbde27952d94084019bcdab6337f47c5858cd83d37aeec94694849a5bfba28be583d8bc16e7085bf26b756903bf1dc14f27495687d962bc81a606eae8dd5b3e336da3c1d34911adb111db2cd7ee91636dbeadafe8716b2e7eb2db82ddca34d11cc26b10f2c8048226d5297b468cf96a9c6422165e09b22825002aeaa08ad44e8acc5732d92c89e239fe84dfb860fcdfc362d014516bdeb15ed81cab9be5e5bc64d190aef23d47d6d2d616df953343c9ca00de30295d98d21181d94c35a30c24921a3e0ca4c3e765d9a3070346cd7530988674f34ea8889226448855d58bf38dfbef87d55685109836ae7fd331f63b1c173cbce4291455f98569514ee56742ff89979690724c6b76d13fa5d8bf763d962e6adb8b2068a80f17385dc0ccfda183235c91c55fe0a007929da199581422a5c557fc709c6e28ddc2f8d433f215b61fb184a1fd8509565362129c9e65999352c54c451c06ec7e6a6ff3de2dbf792cdd1c58edbe4c8f356327e4be704cce37a41491de16c4ab51be076fa1389bf0a9c54a209e931c39e73ecb5c2e967778b7a39b6ef0e640734ae270b548dbee41d5de2424db015dd011ec34c215984c62ba57422ba315e00b11dd940df99f20355a3092abcd92771d5e764c5e9aff3553e9c9f20f1e2a0e3d4db759bedc0a9994ddc37dff9bcdd2e573e3f977e6529912ec0091638aad31cfa679a9121ba6c12609a0cb666e3ad6f3fb3b25572019e0686a04086f0e26b08ac62a6b4fdbfb01b283ce66296e62ec0e9c86b74471dd711d0bde407bd31ef53652d287be478fbf02f6553490c2cc7afdfecd97870124b6f9789520cf011d679bf579e4a784ed64dc083e1fe29300ea89ca18ad68f77916c459318fb3bfa96e8055286c52bd9a590961900e690887a27aa86de12e7b61f94555bb776e354c72af1ae70606181f0551aa53e86b4ae80c983fd61b23b766c745153abf498c8ddbeeedbc9a0dbd05cf7b8b8f973180ab8eaa385a438dd00fe98c41b64f8cecf4120676b111add5d42151ab4d0203d359927a3a0141b5f1e4c5e280370f7f7c0a7dbf5ccd512f88126299b39511286b797fceeed4fde3406ec40f7ac6e769655685e0471843dbfd49f91c4a6dacea6f93bd6ffcda5f5fe5344edad86abf94ce619233e19bcff85d0050a219dfbb8f0830b4250b1c507009bfcc0c422c7f46e0b10d7ecf5dded0cfc0cef3c8f226605dd7ccb7c3a0b65fd495a46d5f120fc8c3d05c8abc6656a97c10dbd6feaed5a597106defce707b756d4040c5d82757629e46e91f4ebf21cc8c78df14631cb1a6dd63ff93d19485f7fd4806dc54703f5b99991b042d6f258126804275a043a0aa5859ea6c7712be30ab33607a7cf7b0fdde535903027e4c0f72b16dc15d2c8bfb2f79964265f40c67a08bb566f8c3908e92fb0de275f57cc09992c6c041dd5bdf8b4b6bdd464259e303d76d696fdcc957e01a9e6a2ddb9fdac3acb63af560f69f9458d204c0028cedfda0f04b8a4b41a0ee377463d3389ca61785a6f621bd4683712731817b3e8dcdb66da5d4f017e2b1e4daf7950e155b6cbea7fcbd6cfa32d24b41f11a20fd44cb55c6f6cb494892d1eb8c8fc88779c474e09a22577e21a1d6492c7b985748992f03334afa3fe73b492bd3a4c3e66cbf05a3e47e8c00397dd5947236c2c7267440e73d0a2778fac462cb3a9e4fd2f63468320f7a249a4bad18539a8962199fbd472a6b9c1b9c8c1561f346e534f3200be6b3a37ce6f35e19e7af2dde3ef5bb5c8cf346699e54a21691cd81e13af2f12cc54f26ee9bb47aa98ad0b29c20018339576b55d9784846af397e72fa2877727f4d2d22370b84a74548ddb12acee8fe3cf0b92055701f7fc8a031a199c829a9edc8761ebffe0ceed56affb3f21050344e9e072f434f8156490f0c9724e0b1a05c7c51a3ee3cf45641385d3f5bb0e22e55ab7a0b0cdd18d11ace37db0539b65fb5b2e7382c8ce3e871fa20ddcd7445f33a5d3c3b19e289fb2325dbf5a29be1ece1b25f65e1b881ab4df86f15b026218be6fd7547d1267fd94d5c206e65ceda51c7c4e2b2758677a7be7a73706d8c20ff40d24cb89b70a0757eba2dcdb59948964e3098a850bf6de4aac753756a6fe8562f26ea14e18a94d69f882b9af9c5d4c1603da8ceda2b0a6bfb2838ad109621989d3f77e60a3a0404990f415e9b1a25dce4353bac7c91f74397e54a9ec7cb74ce71661ab37e4998085294989f0260e4eec15e78cb9cbadc746846b0d2f8d488ff93e3fb05a47ff7e9b46257e8965fb800e10188b2a46f5f07549293d1097a0733eafe4363e6a3caafa6c0a7bebfdf4a192b6592e9fa762b0345131a216485967260ff1a56ab7fb8620ff5b0abe5a7414187d4bff90897e670220f6e4c6fbddfc5dc2da7655cd96a0bd94a993670804680dd943769349c3956d3cfb6da94ea8a3347d213185f7a87b2eb078be8c83201df15ee21c1e84bcbbe3f9b1b513ad33fc5873485f71d2ab85d2d74ad4755851965182aa58a8b6e45af50bbc53bc841a582859b268bfeb0a51687d828dd8041371bcc90ed4b85cb4e32ed76db1fa8fc647229511e5b6bd6f5e4e17d2332af2d02071a681e8c3d2b8f4efe15868641cc259d5c9d94efca6251d023a9c7cc4b122333eaf963d61d55af0b6ce0edf7fb79900c04c6b0d0841d60e035a53c35bdb841a7258ce2af8c1357711d1f39fa3eca4cc60a159c8502cfcb1effb9a9f56ce7056ab169c3a2f22b2f89fa1a9117728802d357d27d96ab4039926a2c3692bf67168378d82f34b866de5aeb191ed7ff7b593cd2457e8ce63753435c480d9620ff1efd61214eef448c0decd96307c14e6bfa0862b5c4ee1d7ec139be535389f679c2dd538b475aff656348aa41755ec5208c3ff16c7a44b7db2a7c799633f1a89bac2d385f43fd51b8897548fb9034cd61b8ea66b0c6171c1736157359d358a02e84f5f7e66961a34f267b99d97fcdcff8260fa8cad0edb3fa8e0b96e45b4545f9f13b7865e20d5bf0e36387226bb131ab7db9a102c151e64bda66c97ef441ffc69c09a327d589e3646834f9207b665d4365ed389fc1c81cd4c12ef370c6d3365b2d6660736b5ea1735cf6d619d876b98888b555ebf7dcbe5bec6cfe03f88352814b5b9790cb13ffe468b20856a969af418b18e02c8c1432a90328d17cb2d9bb009eee30c71f306381336f761f17c5a538191fc2aba8f8e186ad6854261e5edaa0cf2913608c3e3710663508bc4a140533d8d0e1b0711133b992366f4861991529861428a33cc4e25aa80ca67469dd36fb7035268212e6910c5b990a29a612d5626ab658d7574acc27a2fd38909da9a0588a56796bb1006145b09a0d12135283142417894604585d3ffb0fa6580dffab11ce39c3b177e50c2d383f604bd0e085075c3fa4366c77fd695c4bd814e267bff0e3e8ea9d8b1ffb8c9c92ec1c06444503b93792f0b72e146f6db7b70c436944bb726bd8771536952a849b97cddd0729d0e30639bc0c060a17d55e2988598ea23b22c873873fb041ce96614aa57cb09b3583b483e19386472a3d4517cf4b5d41389c09a5142f1769427deceeed0cc702fc414a57a97636336f4c766a2a425f8a7a873655680df2744cdf4469eeb4d5c6ebc4cf9c5ada9e37b0abf808e1661ae3c88c556bc902cacab56572a5ed9d614ecbb54b3c3de947b9b301d3db3cde18b5eb5370ce803626d344b67d8835eef30463bbc61e9acbb82341f70fca82d3e169ac838e68d5d08ef6c37b6dfc0dd0134f7d7f492ab9a879db2235b5bcfd6cfb65d1c4b8200ff88a9ef85b4ae8bc6b4a97dfa8db48e1a7134b1e62cd9bf3d2f01322c0f5de78d8a330adff1d338be61f4552df85605cf00dd9fd265d4ead2c48da691c4d8a56956015a80eeec7c26a1bbf9ecc4e5a70acefef862b6fbd73a389216c83c80df25a4ab5b231c38ba91ec46e8b163e1e660342f482160ad08d5f3d52f49b6f4d944de7789210a667872ba5bae1665d95861c8c50ba92376f4287ebd4c90c49338496c2c712529e43a6b8430c6763b4a51720586af345fd82db441c0fb37f5ea7095e6008f89fb3074cee28cae6b64a3763362bacf8d764f1a0bd576b7a9cb7926ccd4ba50da1ee9cc2f5db5e27062734b0878f7d90f174a4d91b2450e50a5bdaf60a0a0419fd56e850f4e42eeffc5482473b0b45823b3683ce850b26be725269ec3e258fe45ef4d43d13cca40940d80b7079286d975cb177c7249555cb7ba525999024ac356ace48d37c19263c79bbb572696c5b97fded660b1f4945d5ce5bf8442990c5d5c9ef2d5854561e4f4f066a973461784ac5f33ae39fb05ea3127cc93430f1418d245c6915c608f30b6cc01125028f2c775dcad997cc5009fff0117fb2cecd8823231ee652f7b90d3875f19265fa7de0e86c7a2d6fcdb4acaf102104062bae025f6d3e8a5712f0d49e15a1d59f45b3fa639b0c1cb2cb61b17c19b43f786e1b170babc43f6b3d36b004f2d9c11b0ab9e4b1928790aaede17e2eb4d21850c09d2fed84b6ecd7a0120933b4a040207218049af8f3709d5cba7d8d888477d548bbb2cfa11e79e4650c47f404ff3af7a557c4e57559a4d43f7714603ed144502ffd0877a903cdd7b1acd20d8afd95e9cafe8b5cb3c01397bf9dad717dc267099ceb99ad456ed2fbaf7b1246eda23a3c0a95c0c55730a72e04b6af86ee5ec948b80ecd3b1d666f9784007069d5f611388ca5cde90cb147e0354a826838ad5055aaed0de8d8f38cf25bc3523cec02022779b51990784cdbf67bdf8edf04b7e5779b10bf7b1f1d12555a4d2189d7cdf64ff84e0c8143084cb8fdff3ab3fa8571f8b3004dbd99ede708a9254616415fd3fa32f70e8616ee806ee431f0abc11eda1e19441d76ef6af45371d327abd0c1836e4e3887659904606057fe1890028a0a32f664996dc89d217edae02e122cfaecf37599dfe77354d4d67fec182a64d2e77b71e9276ccd8c57d00bd3c212fe12f8d3cfa37ed44ce6c5178385594190fd5b43b35a3139a6417c922d344a72ee128e5483ddcdf4cec0196c8c51439d2d134dd0e43f1e9dfac4790d678c30fba30195c0bad0320f9fecba1dc2d73f05e41da46c2a215660711b3786e262db75c6e7f75d9b0216ec67728e724c9fb3435d214a5db086414ab4509d48c53eb3a8fecd9b744ffde254cf587fb25331081d3f2a26eb9cf947236b6b929a39a8205bf4ba694cfd49fc0f7ea87427fe16a75c333d206017ffd0b23e7200c366298a5850b6492fce6ccee51e6a541776d5f6c8e0642002482244c0d36fce0c73485965b9c92363eaf0be9e54a409cbe2f65f28efa60e1b58e90b15d569e4bd898ef54bd7fcdf31785d3601ca607a8b6b014945070cd2f16edc8d79ea692a1ecf82c7d1535665e1a0399dd728a58f9f397f1ce8d19c55ccb38432b4ba7688766eac35c1d5df9dbb8c0e5be8157c304e73f83fd7f4607df64f68638dee98e60f8d94a8e204a070076163d8fc3aeb45e142f21cdb196033b6691186ce2ed72c2f55c389fb89a0c40c4ac17bdb3ffdb6a0cdf71abbe8a360532905053d213c421feec03ed50be883136dafae4ccbb76bd33d8ea1410831ea16b8ce46a370ce10277f133138337e9364f2b5d91986234dc2b94019332212bb473ef4b3c7c3967e8e3045c8eba96cde47025b62081a4842b56a93ea5add4fb92ee2fdb273c09a759e2bdd6db814ba4a04c52ab2e22c2e33f377117d7ee2eece12cd73ad6d12e4db9d956387651d6ec1e262a9316e67de09c509423867d8fae13d27dd0b7e5f7c9ad4995f7ebb6b922a2a01614776705faa7348ad84dc6878d9f517c4346e5068988b5c5ab982a72d6c25ccd85dc0f2b900455bdacaa63a72a083c5af90058cb2bf0a09dca28278487118e998d91693f5f2826b51708df5ef1d2f5a26870bbc62f598c66ba08287ea204e8029253efb1a67749f9be05942f83840feb18147877e247ebb911b4c7b1b610eba11a700d3304961203f80d2c894d900d8d9e6829610330512d57ba6fde31c9fbedac926c3407f9215c5bac030cbe8b511251e84901f0a72f0bf2959b54b394ab50bf2767250f14fa7b6f5ea21a54da8d01e91151eb491107fd88b2d4a5aa157c72d89ba896b87e0fe989819442bf0213e4aa7fde8d6b026e7a70ae965193a0e1bc7f8b8af96298c41f60d154164ba678333c903958d4ffb50b50f57ad8eedb6da61a6398ddbbf9c9955bba6bf5991c4c6615df1cde156d8e188003dcbc3a3992b84fb04cb4131582d3f0a9466105f7e2f5bcd8d3adbad05c2aa466466c042fd37b65fe310d06708263b62a6df930adee8a97fa082823cca1ca34a94278bb32b26823a9c049149f4abd22ba5d2ea7b2c16d3ddf14ddfec6f17f97394b52edf6b1f6df4f8508bc064e58acd5ae61b9bb0e4614d4a44f8a33bda36282ebab1ad054a01f5bf9cc7b29ffbeeb08ac43051b278dc39710ed74a778ee1d328db1a0440d0c5a6b98f4b09ee16833d0014308479facc082f5484ca6c5a83db4bc273ce65d9416dadd221ab995ed3da837d241e4e93b7224cbe05095f67a3a85f17c4f2bc8cfeb3650d5182e8fa65f0daa71306796a27ef90f364f19bdcc9a22c8113588d1283e1a7e7e1742213c1e8ce3b052442a9a3d7c39ca96967e27e3179a96ae82093585d3c08db6b91d0702827e10360f075b442ac60da580aa148bd1037d08abc360691ec19464e7b5af91aad4013a2cdf9e09814e801a8cd40b2aeb7d24e26ab2314e37ec22b0529d8e425270140d21f5ab241c3dc2540f8e8416c3722eaa433830abdbcaa9177e373bab05fcb8fd82fc3afa581e34f08d3c07f5f58d0aeec9d7e71866c7a808ef15301251b470a9c455a612c16a586e8a5f1f3efe184a2e6313bd0a657d901319a9f44eb241db807a9474f3f49cbd2c8b8a225859ce5cd7b36e3af8545701a482780086a42f4a1ffa2b30144e3fd3b9052fc9e874f9c3791f69d968bfee7d5bce01dd70a3c74ce6d79c600a5ade2ca28bc27e55fc351e811b7920e2049e53a730d9f3833dc46463a77a7d3c86c2386783e4a8273c0abe9e4c2e99eacef125056f62db44de812114ce17f0217eb6778691f8dfe2d0e5241f05fcbcf97b9171f4de3f0d2c0297f388d027516f8f157a6e1a919e0f474eff81fd56028496c9caf411b0f1af46736c2e421b296d5459b1ac92216b02fbb2a17586ecf312ad3480918e7b314526adfb738855d0a15b0dadc0ad3acf748abaaa482704172a3b5c434bc8f044940f9212073779ffa20fabcf28a04013ba60c18aa8724dd741ad9b738135b294027dea4047c3fa0ef5eebeb6633fd4007b1a61b2e4ed2ccbef808ca1e07924b8170df116b3b258771374a0c40ec058fe0d1415c3abfc235d8a60aa5ed7f7e919581c5105d98717d0613e1ca869c6516506ea482d5c23b414b8aa7efad62652403c45748e37b6aa9385a76ca422d66ffdef09836083f87189e0ea751669a902b539f5f6204cc59348e74d2b77b864e6f13bfe520da1eece15999d172210e47cf0e7ca305c973864590c9bd373a8f6590754353e75347b3c50592eefbe6a6d238bbc2edda38583905c7c1fff28630f58a8ee5a9347ba323eb2963c693bb4a788de2d903895c64ba9bbac55f9267514485e60bb1ae5b18867b4d7321e3aae282f70b29adb93a7d5030f23ba6bce5da9ba8031f31fefa8f229ff92ac792ba56389dbf1ab512dc8c45ecf58d9c1a09b3421b6f87f2cb60f1417db6f08049f38ee2a88514e23e497adff64d210954dac58107b2adbcbe9624293d0b2d13b05e73c83fe67ffbe2892d67778161b51260f6a09452f7577fa31222088149496e02eb328b69c3c9a9a58f24961ab468fba42fe6e9d9cf8ab58fa176069facea2ce8df67b396481438a487607c9f81e9b7ad599d2fcf9c1e0863bb6b5eedbfbe911638b0e0f576a33a8efc6150983201ef845a0b8dbac5dc2226474b39f3e88c4696dc553a0fb640556bd8713b8e2e784b2f1c782c24b489a8e02d5cbe3a901ef270b59ee86b6eb1314402d66508dd1672b8852e3394d0f0459955e71649203a3eaaaad2139108bf772062d8f58ea7a20d267f74cb9381d89f5aa73368a8fea9d24ea23be20aea32cf08e0c114a8f4e6c382f1911ca82f085e2a0b8adde094325563871f7e5d7ed2e00364d7e9df2ca83dd3c2ce4d5b42492b1269329d78499f70f240c70e122a675319d6649dbab7b12221dc7387342263ae19a974cff884b7ca02b57bbbb258b8cf521eae57c2fdc91b7526c8f1bc381e8e47b3989be8af410c9bce83adc46f8efdb724fe407d67b7d0d68814b47aea4273a46fe62ad13106ddc573260bd0d7b1854fd19b80755b45e84ceaa1f7f6a1960739c5a6a43b72cee6898cadfd5ef7e90e230bcf3e3242390cdf34b5e3b9c6e3ef0d9e1f31acda60ceee0160adf739fe4039bbe0a23a855ce3984e99a04abff1d628e09af7aed1863efdba87402204b7c59bca17d5178a76167e21955531f6886293755f21c8bf06debd9f6ae168c1dd42511ebcff51bb4f4c9993f02af7d1703b5543b6d5830ca955369951b650d6386261a117476e7fae2ef28df44823ba700a7634e73b6520374c708e83e762ac90cad5396fd6f83d5d6390f8e7d73d185277ff2f397df863786a7468499d26abad25b4d00ed4775f22947cba12fece53dc29f71bf6c0c43e3458490deb00253b5719074d3a68714cc669bcbdbde65dd3d7c966e2642f501732bdf767b137e6c5554ed5983cba706c11895ae730b772ff0afe556bcbef24573b42875ce26bf1af706e26995cf3fb27ca9d5d22b29895413f71ca9e752bc867178f00d6c8c3cf63701e0338e13b9be5bb4cce558cb14f003ccad063a909c5ad8e4b6abca96807471d08725d15b9d60eaa3fb468072b27a5cab06ca2aeb1a193671ecdf6ce8121c53ed47ef03e96370a601e1742692ea696b1cba843cd4ce7806cb2326b7f37a6449d2a2cd9a5f94341a59000cdfae1523cb9c48b2e4e021cdc63aca00504b21d2c00b08600920b841c403d75f0046db6ffaa431d4c79faca0e15b720aba4190ee43011934d4cf48101fbce8193cdfa57484bef6783955d78804a79b945a89401d6f5f35ba91ddbc2599ceb299e9eafbf7d657170bcec52af99ca9a73bc584d7f6916ffe7fa4be8d08dec3b77fabfb47508c07041e0c402f6c15cc356f6fc690f055ddc3e2a1f453203b367728d7832014f2495e0d56695d560ca9c6bdcdc133a129032681fe1177025b91622401151ecbc598857851a32d4dedaccb956407187f878ab6ec3d989135ac5f190fcd138bcb526f0aed628017ca455fc484d6fab7e20dded57fc4fc0a209a1a0c3a70210fca45576ebb2d72b541802d321a7b2eaa7f087a02bb48ae7a59c13cac32aea0031f0acc1180070d8e5a3abfa4b4e51568bd13d6df3d2d324a47ae417996ed131e501f47a3ca83b2fb5ae1618ce289416b12cc9fcb63e729f280bdc314c5a01ca9f3ff448609180594e9f0cd6b31fc253a167f1f47ce0af82b8b7c2bde4d5c1f4e81276d48ba5877e38df55dc011a2534e4ec7efd4da0d1f2dde660666a +MD = 456b8583ad1ad6972a813ce584441b0dd266d9ab84096d55d29ff88e4d80924b + +Len = 79432 +Msg = 7433d3472166cfd7257b6abb99fa9b5e5136f94cb1d32adfc2869f1a851c7ed588bee01ab6733dd073e62496e96a30f29c3b37ab4506c473ddacc8c9f8448c1e545fea37b28fbdd2e42a968c284bb102b41a2737924d6436aeefdcf82e60fa87019e5964bbc23726a0ce2765fea505d6c15b2fb741aff26e5ed6436dcf7bb058b703966a79159315ce5a3ee8158116b6ea87b9f5f935576414ea65f1849a96d99d170711968fb9e5975645df12e6cbea57252cb763e67960f9b1ab4bf5c79452dc611520b73992de224ba310a0dd0cb931bdf0c627ca41a935b57b45c909920a9b6928618619044a98c1c043656dc16da0d76deaece99789ef7e3ea5a869784a03b8a99aab3af86f203e0442099ed24ccbfc0bea5a4c644650925d343ced2e5a3cd5fe94cea15797e34cd7d43578289fdbb332901afa8e297f7b3eba2a9f9c826d489117965807080872a1c09104a9adf7854aa2d4fbff7aa4c14bff1d87ab0abf9ac9ebab66f20ab839cacfc4493ec048f9bbe92f589d81e9eaebcabbac413959520dd7b6d3fee71b27bac9774fd01ef697ed2dd4185286748085e4ac16475863f8c7a45fa715e558c6d976511f451028e748366b4305d06d0b831699cda6af07155e1a4deb1e4e989e909dfbc087de067235cb9be29ea8fd114c262ada44866b303a0129a70168023545081c3a7cd0b9bf1ab60cfb04564c1c48dc06440b25b7d1c3219ae1a67cbf15617d5d960e2e695660bd6799212281b3df02d613e2d31480614249a3f5d1f6c64dc566db243f3dc070a954c1dc53c45f795e414fb0daaac67c2bddf4d6b1d0ce70a8de11a54c5e84b0417a7d1d333fa67ebaf0015f80a02a7ca5ffdd316275b731ed6d417b9df42a8a4f82d4cc08171356dc8a31d60e1e35c9785764ee2d0c09fa5ebc728d7a263b659913cfd21b772b698cb8e5fdcb4e6dcb6c8c94f55abd4a32c173acc32b1c3ea9e9d67415b4857820942227bc01565cea4847722e31b20440df3af705f7ffbbbd0573cd7e1b6981e1bb6ffefbf65e8a8fd62f0881fa10be8e80b75c3b28f73a0bb591e2f5974cce15c84873a2f48f7e20dced5dd7fc0201836b95e24d042b44fac3d8b9637156e82584548c994110c0072328791680ae54876a7a9223d4c460f2f5f25caef2ae5677b73c53c8250ad8aa73896528ce3c3f02430f72a6dfe9175b1584d3c05f7da07528a7d018eaa54f7394b828f32ed54a5cbffb8dbc6fc3f09ee939247f03ea4f86a13e0a6fd608abc94d5cca61e8a1fefea6e6e84eca7a73213ab659d5251eea11e8a909b7335c7713671d545943c7e24ec07a8d453935284dcfa67aa90c40f980c78fd5d647c838bbaba5cdc2886f7fb5d55c8387041c988a72af8de20179043a039877b65b757828de993d8600c35b9cac37d2fe73584a41e9799c6a4cf194a7676df63db68bbec2cba4ac8cf0e800690eb18390ce11c6d8fdadae2835cf302fbab65a55a23193f1396c23bca309f686c3729c275c6e95b976f3cc04043c613ac31aabe5658f7e1def99a9fe604cc359932328aa66983e4a1cf2fde6005fae304b42f2d448ce07aeb6d4473a6ed9f14c466c2c0134b749f5b75349b672619f791ad6370c9316b60c56c5045816d908c5a3f4b2140ef23f210ebdb85ca269bc7df87d80748e8e149f9713e840a0748e2e7364c1cb3c71a735ead953c1d8a08ea5addfd7f4815fa8d04166fbdb54d10dee7e63620e055d099b134f21cb5c2d9c5700a54374b3b0fa051b68460f79190c6d8c9a9cc5b3deedba51c62a6375396efcbb77cddc6daa93a7eebfd0c55973141365b177d88c1bdcfa6ce777726dec8dfda4fc7b14f775fa1f8213a1e63a08ac48d04ffb2fd93d5ec32b590fde8a6d80c084dd57059938b7d49f0dc25865005c74971c31b2e16bf97d57c4fb9115e5cfaf22c269959b1c532d0d543a052282acff80c2204aeece3790b8d24171557b03314851b8ad44485594939111d3b9b6255154e6d0dd468e9f651629eb689458a3adbc354c36dde44570fb6c50ac71c54ed2da334a5432d2b9623971005d18a3378d47142d16ae1aac280b8cfe7793d7afebdc4e9598fac20ef0e95389372b854838b1976437ff1011268c9a231c6713d10220e2b990e6872578ed768de013265d16c265f77f18eefcd1453dc88235a23b817095bf233e4986600e84143f18adfe8f4227f1d840ddf591001ef39345ac75ce920fae3b492fba111422273c8443b30bf8845729c10585ce83e5af36de5808534ef98ebf506248f4c7faccbf9d0f05f2ad25335ae18d33f0973901534ace7b766efb68969b0ab870eeb40db0ad3a7bac29b18c52e99d885f04c2f3d3cf3756a1b8bc43aa724d93ec53f8f2f7faeb9ea134d16bfb215f0b8492298c9cb6bb223bf6e527e21d5660d2bc6c827dcd4bf43a962dd73cd0f944c50916d497478166acee1d1c26e34ba789f2bbc5286d8207dd166cd8fd3f93bb8b3030d4acc9b2aa5b690d2b5e0e55f179bd8bc3e124b75ff37e367626b756f93fd02093c4867577b22e5d5b72e49bc40ae4858591381282e59435baa07e698547b18d19c5c4f3531807b4b54bae46aba43150121ef2bcfa19210eab51dcf5e70d9b206f99cc53c9f5baba3fcfb37d2baf6a9472729add4ff9ec6c52221b22a8f756819c26e6be5eb2101803e73d69ce9358fbae73789c07ecbff5b5fb82174f6fa957a856595c9cb5d176097c92311bb8c32bcd0bd322ac596051dec558fd64dc5e4b9c0f6f540a67c57b5774fbff9a8773ccd721f597c5aa9829d566e6fb6fa63b047f3b6ecf3030b3d0f7b9c0f8d4662f87d59c2422db462f25a0c8743af934092b59c19ff49779651df131294650bec004ce66a9eb7595edec49d149e289f08f6733894aecc6a8a1094bc67e1196f8efeaca66cc1b1bff9a27d86baf1aa8419761147bb7de4527303c0f5f06802f7a82e1d184d4da56ecfd7d537dec0add8fe7c0047f2df39d5cda5f45e30abca2ae4193eca80b4facc4df97c4ef49dbb043492d0b7df65355b1661af33cd2ed77fbf6a522bab7a3a7ef081c32a90eb5a9c38250325d5825f58c9e142351a63937c867c27ca221fdcfd540b5a69283bf51785dd080079c92065748f6dc0acecb697f5d9000489186abdf4f0a2794f0222fcaa156fe6309c10f792d67274f91c99587a0b7b8954e66c373fcc2bd969c05cc221589b25ae9da985a15100b08395c4448f8e0ac6fa2c49ffb10867081d091aee68312a6d282072962c898901d0cabfc2a2db3e3c0d3c8c8dd54fd493bd4ee5f80b198e2b41e6e4bf90da9be7653df489506d7656e2a9cc5838dd04fadf043675667c46ce903378587ade89efc551fadf14df53a62ef651e5386a68bbf6cb84cd26f3e4e58798b607471ff37955c94b5a6c8b46b856a4e5cb70628035a8f77985a90ad90e8ca9263281e96912aae65e71c40bdfebee37c0616d4fec164a2a5d25891b938833c73160c7f54b5a494bbcbbb7cb7fef4a11aa4d7b9cfcdc7ed6d83333b0b5010195701865be2aae956beeaec464b7011ed4ebe647d432d69b8f53253564bdf76a765adff79e778e33c95cb1564215efc0f40dd24e803eb344b656720aa21ee9f2fc6a1e0a20c28788e69f7a09fe0cf9d4f1a887fc1b70f0eede6ab02fe338472f8a1658f9ef9c1929361f4f3bf30ccdcf40148ddd2079fe1e8a084611b2ca9d74c1f827635554b1894a64c788cbb5ca1481fa4a6e199a59482ba7da5cab265b671687ffb2fc9cff2d95f8695ce2687d4919c2442b718280f045c1b36d16dc1f7b0a3e48853fc5308aab52bb44c1c555d18a0501a1c2a313ab6b0e87cf807c48351f83a846a97e2424fd0c23ccf43cf242552b194d877c7fddfdb6be0092577409c9007573c4181880fd7d3951f43fc1200dace19b2a8f240c8082cc8ca72e017d993d66891a33ac234f3e72604c5e50df0612f127365baebba5db49d059309f04f292c21316414d8044b8559467190fe3e0f5de5e35528e6fb028ac88033fab4477893e9e42d18b2c8083595acee07ce330bdffcca214319d32036af04f8ba4909ab922871a64c38c7517f43ffe55263157e3dbdf071146c8cdf41bc588a5099dde8b247a176ba534b4fecc907fd77a72c8f00921deba1c86d6632564692c78b0b5779ac3c466ae99a2903908cdf8081c267afe2183af413bdde91e494b82406da2271c00abd62e3fd084c00563274d81d2dd214aa041537c56ee7d00ba371f4946e22ebd284ac2abc1450812c9f5c96860af2929bf20a1acd3fba8173fcb63c7f6613965e4250a51f74967cd8ce3fa2452696c3b3abdda61c79955f946af9c6e32fcc2774a0543b6e51a757206625e4a2a8460fb9d896c1fc43fdd23596447a0af4d508dd46c2d6f0d2097ccd101744e5b88ade77203b55b3c57c4220279e403bdbb79f61dba15dee204651a7731baa5580eb98b32cd6498a2899171bc61000bd0cf956c708fab7b062e64075383cfe3b25f0a536a36e85c994ddb9ef1ba0a2d9b02394d974d4ce7ec16fb001067f28dfd2226ec82e0cf1b830ce9164cd580ed7efbdc05dc73789a0656b091186ee1089ad07593075b7759f25f6054185402cfff050441cab2cd05d7561b26e5f909f81de29cf381f77f9c59add7e50ea5fe598dc6387dec6b98bff1ada15e03a6dbb0e8e1039a6d5546573b8096557a5bd1fecda7ff16ac0e9a2cc7b5d992ebf8e4d7ae542fd433e57a1f1a704201f5d62c341132bea8a42c1fe0dc172a62295fa3e0b0a4985d7038795878e561970bb57bae0afefda04f44b850913a1a48265b9740a26ad372acbed2a7d9585b61167a3ea11d55329a17d8e200a9a73fb17d6d4d9bf60f47d033f8f461ae61b61cc084e3d1cade03f298692b8567d6f14a991525471e1a8be2c0677d2a7a6a0816746619a48601d8564b6603336e51e55003d3bcc69d050616bc9adb76c009a7dabcbe3e8de1693611ab6ff7bf2fa0627e383982bf05675d0893037dbb11a93bf603cdc1126f6c83c122d7776d2e3b1f31b0b70584c9b9e724ee21f28be1c12ae4e4454fc6829467f15c4d10e1ec9a71f717ccb3bc5c653af81886d85da2fa0b23c895491ecd79590eb23142a1dd36e15aa7fb1bca5001defecc927d94f7bc433f4b3e3b8f9263bd95cf148b1182a903b91bb2bc33270829a554e570e632706993c6b0a59d941c2c030d6758d57f595fbedd94038b63f0c1885bf040b5f5bee4ddd59d05cd24eb2af2e7ca4a5225d03bc8580f903779443d244c337b88b4105b59f243da92d76910d1f88dde1c18a64e522595c0cbe98ae2e5902f7fd2efed23a4974592932e0e942cba526297ba33fe08c0b743cd272d5958e254cc291bddd44a5f32dc228b541b6fa7989659ad11d148b3f4679fd4b4070a9d43eeffda4af3c7947c05d591c22d174ac0d7d643b85e9e79ddcac854b782573b6d66cb8dbcf888e181ae30b3e13fb00e7ba59220affc767cc3dbeb399041eb4741b210a8bc592ac0f443a87429c9c68d299e21b651316d5757195cf5e6cc134b516f73ddc1ac19ad3454c1551451c7214b1fe99754a3ef73f811b21c13978ba22cdd498f5557c220d25fffc9397e3e7550b96e2612ba795d37436f0ebf2aa10634aa262fffe2d0a65ed3d862f19598e3fad933f523fba79d852d086041fbefc1f9547e4219e3b1b82a4edf94e54e63178a1dbf8700cdd6af723d02933481e47feb4ad6684bc0e1d0d52f79e17cef396a8ef5855e21c792fd8f01e22a0f631b9aab1ba2f4fe00ed8adff42bdb311e686789df09ed1f7f79122c0a2b974b05f19c8935889ab92a3140bb4b89e49a529c98fb58d1a6423bd587e9c4435d7ff103103636ebac05b3598cf79408802102227973e1612c42a354c938bece0f06aacc70028e30bb5c22c2da054c2c506dc3b68354173ce1894c6340a958200e8799ba46aeaa1c4b350f09b264f279b7c90db5313c58c9689e7d7da8ac2eedee6b44690e7b28f2de18be9aa0a7155538cb569b2d9d249b23fadd204bc1b18c213a413521f87958e68fd7f21f4c2353460d24f4b2f709269616d1e7b47a7e8f397d06bb4bc719b2e6f2e1bca8b4baf881d6ff4e6bba84f0518b02307d56f47bb99c0b77c637889561fa5236b7813ac95ee15c04d288168cc8bfd496f0b791b6041fd5d73bea5474ea0ea01cd632212a5f94a1b471c04c507e3dcf87d93cf4e2bb80ec76175ffbe5e19851bb8f281cbfe66996d9b3f384efd47d598f71579c664267b5b0e308ed4ceb2ffdbf4d037bde85e871e123b25ecf8e07191a6387d6d53b3cd8341965b72e595dea848a34cd2ad099e9674b5d3853ed5374b52a5e52940858ba6c44f6d81ece7ade97d14c9f0948e653e89584b02184fb02fc304b9e472c73d2b5d04cde72bd3f1085bcab501e415647c18c9944cce7662a3c0fcff85329f6c7cd55d818eea7e346caa6e18ece6c824b9ebb3b649a871d7101335c1f4c8359f00f301935c7113fd7d32a7fb99e2cd2c5ec8bcbae3ee6997df825806197cb25e1f81990a3b07b8d5a3bb1e65f01f4c04d1788ca701e7852876d60dd7dc953e314145ccef12f69543460c7a5ed9e76e357cc3cc858bdcee143fd6fb3b255d00a1ce094349c884d4cfceee64ee3c805a46c670245c6815cbe3a04ccb3adc1a21352e93a52047fa9a01a329841e013339bf16493b3582da451b03fe24dce915c876caab9b7d76a012622d8581f510483329d614ba17c0738446cfb6af2a34961eea081bcd673dbd6179d5ca047b51076f0b6d9a480b0a27afeb6c3a142ba5e54b1b51aae2e6849ab2ce01bfb4b9adb816ed43a38e184840ef934252fae7254976910e1f830233802bea1a2d3ab60aa24f57c0f7344662046bc5b9c809679a0cc8d2a54357c433b5f45489dc3d7b520e43d24c5de19d41bc4c093963eab2ee74686880de07336a813694b594660e6b441ae54f9e3d26cbafb9e72aea45d007ca7edb05b83a57c12e1933051d5d793f8cfb193182f1e8e927dbe8f426c1cacf5534b19e9899392003c4b8e33ec9c4b42e0ef55ad1a5eb846ad993ffdf07a72c5fb074b247cbe0704760abb6c152f5b4717d013253003882c1dc71b3dcbf6f082e1aaba88e795497431495e56ca116269f6dc522d0abd6cd740c0879e7902b4a0b9bdfea334b9e7f3f09fdda085e2ef1fe08ca900f4ecd4bcb90e3b7c622e2da3e5b97dffee8c50e82666bfc5c3146ffd77697e5d99026e60e9187d6421e9ca00f815befb9f9d12e565467b332c0653771dfb48af619e88484367e3f232c6183c635b3822a25cbc601fb7a6750b69381166aaae52e921b0f76a84f5931f33a6eaaa128001b15babecc822b807fb9d8c50c3f006049a3c86e2c0e828b341c2e4604ea41d25271a6feff12036687713deb9c873e620ef3f689ee919f3ff34e46f41c3b875e97e0986de2d289823088c9dc0e6aed52462bad4804592fdc373289603aba810db40a96f5bdeb453a42a3857eaa0f949ab9f2f593b58dbacac870ff72a68fb7476f98ab7dd784bff7846d77bab89fbba12ff1d7524b56c6706eafb013a7e3b1759232dcee79c68022bf8ba9797f41eacf70d05a6d0cdbdd38f197a52987def8fde37f332eebd90f21bba823a1481eaa8c433687cc4145868918d1e59d8ca713492b28b72675e4f45e406aeb1b5b5d824072cb645831bb4acbac057858ff678abf31d470be5f0fb83f16790bd00028fb53c338fcf72666af6776da67412845e6c9bf2c67dff084e22e047e8ba77fa49b2eff255492666d3fc33bf9b93f4e6aadce9bd8a36f7168fa92d42171871ffbed37ee3976123af98248c60a763cbafd6a368e7f2c572ae688d34c09c75a295576d7571d695dea32ff5edeb4a61fb527a26860c90b806323155935df9507e5d9c0760379355dbe3f3e6e4a9f52d08510dfced96047d1644a288b564ae1769bb0527dbbf4e3f8fe49c7ded374823672dfa8cfc1e9e83174814ad379f3b58f9301b45245367918f177231841db3c3bc6bd86d3df0ff78addf002986481183a14f56f5f69e802a4e0f2d9825c7b8ac6c7d10042fc777bc3e5c1d843e09d135f68b40a0bf1b2838413e17186ebfd73c0bf449e85e0cc7cc4d519543ab5eface6d5650dbda33b06a0d26d738bb808000ff43de80253b40375f523ffe6ab1eedb7a43100df492c92e065be68f98945379cafe567221dd716be8c0460af8ad3deba1d3f6cd8a92c302c13fbd837275c224f3763a24d05dfc087e4e700fe19b586d887b8d9108ce4e76c264d49af5af4c910d6e021ecd57106b843f26539216dedf72cc3cdefb9fbbf88e4db45c8e9b532c8d2846d655338f239f24d19ca6aa21b005289d2ddfa1ac06896ce53ea9e49675d74760d2248d98bf23921a417bcfd19dc42316f4215e9f3f4834dfc7d3f5570b904df89897bffd9cb5f968c8adf26ee7144e42d86d30f5f15f581c6e9958453c2cae66a04b650e5adaed35b899ac4a2a99fca9211fc350cb132913b97687b1a620db437fabf74b67e6c01987eb77f3e6b9d0a284b580203b183a6e3ed80e5cd80177078d35f145428e247ccd0fc01c89e84cd779dae1f4bfe30e84554a46872042e43b6f65ed8c89158ce7ee732ef4b2c9d3a066dc833ec7e817ee9359eac13d59b5577cd846719a315bd362b21f4ccfc307a5d246ce7ef1bbe9157f6345ab7dda6cd46bf996a4f44633d7d0490b655f685b4042b63e35bbc2e4818012f1a670396d4a8346488735e8876d9da48dded02e31184e875ce38491accb3bc56932a2fb5912794ae6a8cd8cd8fd51512129d0894b963c569518fa9ca44b091736e0849492d4a483fb7a29a7ab1f61db4fd6cf0ded32c29091367c686d998e74c52093a9bcf99b6df18be8cd703c65af64562a20a87647c1bbdc88796b3f125abe836e8f3a09d475635e6962caecc35a29287075fff952568f6bad441f946b556d8963c99c8dd636bb525a0c0d990147e8ee4052760468eb8674695d1d41cfe15c9311ed46ee273e8418092dcad9b6054df8085a8d5001ed3b773b28c6bfd68b2641077edba32dd93800154c8527482ea2d63702c834a3d808f4a14bbe7705bf3503a2d2cd5570b341bafceccefa3e0082196acf995ac538997d1a1a56ffe3fa235b72ad9e7d96395b992e930acb1e4786220235731aec8b4761242942c2d7c85bd90543c173e4f7d03b38b3bb225f5019909bb9080d905cad515e0ce45887a658ecc959d8e1036b3a0199d3629877a6a6e5a5eeba9b470925be0619ce394a2095073d44374d6800039cc08693960dd7c881af3afd4c872d6b17daf462edb5a3bac8ef977f019942c76d5b21c083685ff905162252b9b745c7ef4b0144de40bc14924eb812a60dcfffe3b8597c194dabb2d079395d3b7dced6b4b4e4e69371e64d13d94a94b33bf417a0668218aff447708456d46f7a41351208c6f3ba95df9ece9e1db377b1aa5b9913f42048b012bfdc912da82bde8825044bffd2436dd06213b19a872e19ef630ecedfd86ee21f7131777c28f4d0d90b27feadf51373faccb6fece3a3a6461b6e331880f0d8e810829a7b0bb6d09ba43e7b17fd0ad50c52b12d637512f19b7a3b0dc8b38a73dcdf11fb269e3f6e1828bddd4d3f9738cb629c1c854407eb247c5f22067e9be787ca8ae28063724e0e83f850958d3f87044354e45a39cabc6989a11bd9c96d5c713ab3f692429799041db47af6cf4ceb3f5da12eea3ca28bf20acaa04a7c46f9209856e06324f576835ebc0378ed048b05184ba23e36d9804865a258607f6fe61e4a3948fbefd50e12aed79423cfb090dddc19e75d0db5c5f204f1ec23ba304cf3ba25d4638d7f893975ccd5005e97215011d4a64fab7f7f784d7f039b16d053254ee12fa2e43b0e801b646d16800367e51f44861df67ed963aa1446d17999223e7037ffc0de51c5700867056d1e3a89246e3130ced8fcf93982775dcccdd1e2c687ededc66208d790a49d440e2185b09566634b6a383f07853d71ef94f8c1ba43fbcca0bb57aa6c6858cdd3006f2c04c170a180fafd902ccc42caa432e4b1d33f339cc1a7a77dab818ac1594bf277ac2ff2b5778411378f98fb4a26ad77e854419925f79339cabd62a43f7ff890aed1675665d7135b7c5a70cfb81a0d9bb066d2942eeb86f5d8ca930c10ed0e33189af2027a48acc3a7b2dd26de2b5b374f31798c814488c3f1f99d2cfc4a95c2fe305760bc745931ffc1666982ff9e320edcbee9e4aba18b5b72076aca3e9625a8ba1ed6f200218dcdaf93fe6d3ede763590291420c8da355f5e5930447317445e61d0cee6970dbf59a4ec4e679123ea0c744373fd423aa945e51ce5308e2307684df4af5edf23b0ebc7fac138a07676dbb1936f42c2c9d0552ed7f0573abf560da512e123806d46cb4044c0a712de02e96ea171b9ef9090d76212bb811df5199792b2ccfd23f36a413852b17d8f64767fd4f6df287296d212a856ad75dfcc384c3b5dd8b370bc0594d7adfd82c10fbae50b192258f2e47f4f29292efd294d9b75c99a6d0f0ed0fd0d44dc0d7e4de7b7633a92a31118807dd60c16a6dfa37e2a5963f2f3d7a6373cf4a8674839def4534189eac91a8c74b6ef7aa27de4f469ce4232ecd2d4dff9a8912ad7157a1a3f77c621a8fb3df5c810e29b571cd4c4166d765d1072ce621f2b2bf3b3de0ba9cf0c3b2a54a340fb8275f696bce977bd8bf03e0de63b8dd6b1ac0b2a830ab234acf8e8cb7728ec47accc7494594d9585d240e26af796d8e4b5127af8d0013863df25152d98f209814dfda4bcb7b1f5c4f343aa9bcae978343547be85202a65dd6f790a783f695f516eefce375d7b6023f4e3dec9e79d366d38321ff8feef004b64de0ed3f4f5b55d168c3a2cd3159e49df07c51bd71bd837c7bbe779efb7d354c73b6b6640fed5504dbb30c4a2e577e0bb97a8ba21ca263ce9ca5c327deba4a19f77675aaaec85d01b64f7275155b38d917acfcd4d11ea21a647c8482ff13cd9f47c4bd7bb278e85896fd87c68cb19fa689a827de45aea91061a71e68d3263a5ce315f04f917b8199ec51beb70b172cf48de09f26d0cef32122ca0322016e0ad367eea0aee24ca31634c089ef06e86b33a2eab53708ec1acd1639c546f067d98334b361122b78e78deede6ba706a1d4f4472b2c8754a28a84ca8af750368000fce8089401c36ca931991ff6a780dff4b7192647b05a7ecce89e41fbd62a532b90e062cbf640b472d1c1e99d491bff34ec6770a91a70dd4c592fd35531626db3ffbc367b7829ccdeced7efd2042e8c3004d07eb35e4e4aa366fdd3960a752c3489da08150fe5324789697737714f0350b0d2b518d439534c8266a730b9b90b17dfd85c4b16197137a1f5342018e3f12140ecc82c14c863b24c18e2a7d7c4a6f85225b760333cf639a8e98b4e5383d21c659d0c7fa872086f1472fa8ddd1e7c30a1408e06dfa65dc7fed500f4c9a532cc6f52168607dcbdfd8c137335423cf76b1dc764a1840c046d243629c5d3de7f9bfeaa5ad1ab5f00c81368d140af9695024818bfb2b8c48693a99b6a341a86352574146de51b7f5d693ae199326db1f180b0b313dcf67650d60f6346c1f632dfd3601ea422c0c4405b732c3f7d15158980d834f562c587ff9eb62c43e20f7afc205327b22d43b436194c8738a32e47d96d3f0cd8f69e7fef684e64e636ceb4f6b6cdce0c670cc5cb1d37b1192721bf4db055a9230af9c4accd388ba212ac777be120801762948f6bf1b508558b87f262f4ac988812500cb437f52f0c182148e85a0bec67a273678511551b7242d977b594a4696caf49aea22314cd88a9d58fc86bd041719911e4c306885903ef8eb5c23aed8a45243f20d33907d5bc6a31e288a12e4dc9d8f88d924bdf4f6ed43032f531e889b623b919e3c45ed5fbbbceb7c584765fd4c4bfd87f5bca7d27a33685db2415d614204fe0306f7a4cdb30e495fba038f626fea04be6a0ca50d2df2a14f08c05fdf3ac5c1a6594fab8ef4c4bf3976ee6bf44d9726e64c56f68d4ea8366c1d4296fd92a663edfdf50988c604d67355b100993078ea676341a33c257caf1bb8700ba491d06b42b990c6a573f614731ff4573a5eb5d8aa7776b301fa9795c6a3f2c5ba806b610c56c8ebcc42c404a29c5e76c020777815509c2ec3142170d4a46fcc28a79eceb29d477ee57a932b6893986711bee65311b55c1d6cbc41c6ad849029d74e92399e53b28ad7648e132ece4a32178029f007705e87e33a1f21b90afce3aebd6f2a3743b4148c48da435a131bddb8ae69d75d47497410d6e4085f005b02943b5c29e534f326eb6ea243562bb372de8fcd917d03c6ecdbd8b8040a2c578f731281bf10ed17c7dc1d0c9c88debbf8706c7ea5cd6c7cf82c87c29c1f589690328807732037c900479e40d55af3db78568da39bb749149feb2c2b58074ac010b9e616ce7ddab1d8143a67763334baf9783a65fca16435ea000f1ac02acb7e14f074d557909e76572c36a9077a670183bebbec4ff58388df5378b85df0a278a6bf796d96bf4bc08575dd2d119955571e10575f1c1a6fb489cdaf2db6c29955cd0e3f061373a8396bd8761c1cf7c665d35658e6ec78f062ed54fba0530676bd92c50cc657157e87103d489daefc82d3a97804ab4577cd3a15d1a639bd26025afbcc29d8e90b95527c8d9cd951105048a95ea4d3b27fd0e3082df6227b8805d1130bde6251bfb543b8aebaf88c9bf96cdaf07f89b8f8bf06ce4e3480159647cddf6a728d1897a601cb8aea21e70546e84417dff3e14a634a701ea77e14b68ff469d22f80c5fd2f35bd08747cebb6fc64efb90a39b4dd8458f5849941ff52a6eeb8295b64e0581a87970f9f321f17e687e4bf4984b91aead7656750f45ed15564d4593f60f1102d9e6089b56b0c8ecbfa2a12e4fc79675c70c8b115bdba9b62fec648239d818d3123205dfc4e38847265c99823c87b2da3cb274930c49918956395e04e421736edbddf73bd042d62a46eca3b4e1147d5878f8917e93286b0b83c49070a783c752b15a6b33fb4738e29c034e2acfe66c5d065f703882f06cb9130eba79d6777b1b1d37c05cc879072c9010f7586b85f6746f478f554e2a3d1eae881a750365053489e6a51aaa50e744cda63db2466ba22b1e514d59674e42a890b16ef6b0e4fc1b81e777f223575fe79f239fece31005dd8dfd38b970d513e3642af673616fd64c9fcab777c604b7719f298c5cc41b882848bbeff9cd37375bb3556f7f977e1a443e00e21004d1a47f481891865bd6af87d90dc1af0f1d138df8b1287fb5884eaed71a965f62569d5d24813dfe3cd9f278b9836c2da8df4ed69edecff85e26c9c9058832ca50fc18b7bee3e028c9bdd777648d2e0a1d062fe2202ea47df3c2324f43da45c5634a9d0b61c126aa94caf50054aba5d8ee1a5d1d2731747519031e8e1c615df51bba90c4d7a98fd810b9a1a0246f61fe9e845d041e778e823031c521f9edd9bdecd49a806afd7a45efe283d33e38c10fa0fc861360717109cbf6ec8756b047a4592120aaa64d748864de02160ca8617087cb8ee7a7bfba805ecaeb4add69363cd318b9b0140a1cf42214a2e53a3eb1b5d579cded6ea2c99a6b1657d8d86913dbfd33dc3d2ec3c23daa2efcdd315c4063fc9fd990ffcb3c9c7371a8bde2406f2639faeebe70fb02a96f75664a7c818bff7fa6287f05a9722b0a655466757fb6901be6879065206cebe49085d9865ef2ecc11531040ace08ba9259f16f2c8768ae157f3d7f85d45f599bf8b1e6e94523b0836589cc69996ebf9dc7e63451e823d4b93d56b84d7758970826911f1fc47cef193fa934bcac22ce9f47c952a02246a869a989f74699f718bb9299ce846d9cfd14dc05d97e76c35c1952114661c66f9db93c3da8fbaca95328d54291d190d26ee8f336272979aeec9e6f448c4134fd292a6df839c73feddad26711f561eedbb917fd90aa482563f48107d9a0b90e7def3fd +MD = f52ff49df7afbf6858816af8b6dc2b02c3796fc5eaace3af47fc085e26102e8d + +Len = 80224 +Msg = 8143dde209e3971f487c056eda8fb2f6d32e78fdf660506628c76877248076e06f4b4df98fecad4c78d1605347f4828332032189bfbf06d335a2d15250c44c7e39fff99bb551ed3b9d83e1058e0887b4e1281a63de5e39072cfef53d8c1a2946c8a70a4fe5dcfef6a0dbb20b19936693c9e58c13b905920bf624fcc0404cb53e028ba79e875389856a21f8ed4e5dca28d0819f21ba7eb8e6795c0d63d2209970d0f2f90f017f35eee29dde34972d597adf467a16489055a09fed50afab5f7de41b26272abc28ab3bef9689675bcdbb91df7a467aca020e424f21ee2b33d108a1c96d5a77201693747b56240e01039975b6662ad3aa9d8dd2713e0f60d23de3afc310ba7f9610949f6d23d5b1f3989b2f4e524fab4f297a5bec8ddad4f16cb616f2566ec984e056c6ad46c4d9985468c58d86dc89216e7ce2aa567811f62728de3d899fdd534c82f022071b0d58fea9425d49faf688333c7192e1119f4b34e1108bef74446c1dc026b6adffd69b6005aba5e5d179ec42620f8c75cc04565b8ab4c6d21685351ab76f50829abbc940250a4da0889ab56195c5805bd1ca8166cbd0d578ac28180d10d3d8cc14444a67b0663cc348e14b597d9a56dc4978331b4b6ea02a5fb67cbc725a37d495f9879d4fc85c9538d717f1c396f63e5c97d344b3950f2f57b6c9f1860d53e24463e6a9aa37946081037ff30fc149c931aecba7aa4e0ad1bbb06672f4f3153d4909d05568bbcc6a4aedec25082435c7f145820dd9a07956b32cbd076314652fcd73ae67325cecfdbc1ec75157c6a37ec3e5603de793440769b3357a7b792cfef82ae6a8af23dd5fff1d763da4af7c37d014cd017d2f532c02cc3692e52950f3f1b5e2e0881785d83a7263b296e8a63a3f5d311f437d8e0da9002816492cbb56e19c08d76441cdb295a6f477d5780bcf3945f460e084def184d674cf4e8b536fef68c254eca79d33394093560a67923ee6567e8cfd4c2922bbd680859d4d028544a07721c853dea54ec8a715ddbe22ce6d17386b41de59e67788b5ffde7aafe207cc8e049f4d764efbc7987df584a5c9f71088c455415486e0757b07b81b42cc617571c6199b4f7769c4cd56fbc10275abcad761e07d04491d243b63d337a28c7a22872fdf475067c047b068967d211bb2cc8e088b9b4f79571d5bdcd8d6b96a795b38069959606827d8a87a6fc1ea02339e1382fea21f5cb5e9453a6f006ead86a8ec15efd769c0c6001d562d94457457c9d097e09a5b3c600f5f453fbea99fcb920b2287cb52b8c64677c279ff1ab746d42b0eda8ceb5f7f1713c5f11752866da0fdf60c3c03984f331f87fb09511427478eb1937fb70e3b8ac8812c1452ab975b2b59243363a8884e7b6d5abad2d322ab6046b47ba690bcefe54299bc8f566f49fb1277b75c309a1ff43b3f1a853c61870996e488a22f29ced4d0e017f2cf1df4d6ebaed0d577ad2ef3bb513252970963f169ccaf9331aab0fcf3a82d635dcae425aa7186b7c6e704deb33909222b45c7808713f75fdf691bc5739907cb499e9f4e1867e2e86573281eec9ea7db413b3c1eb76269ef818b9a97175cac10dcc0afbbfd39eb519c77221c2e29156721134933c2610b2b5f3bb2daa899241c5b599cd2218faadab31c7b3f40825aac13f6772771b7e7fbc09fedf6eff778d51190ecfd4b0f256cf189baeeec507e945f0c4d628a0d0548eedfd254b11faf25458e29a3456466ed9fe76793f83b8a064c7c534cd50a6bf82f24e95ab9b9d1f33e7ada2bd5347547055d0a952ded85e9236f114d1c5723f5cc96bb71ce6ce726457d88ffc42858606b142c5c530b77272d0c10ce259b35250d5ccf01b7e0f7a8a2bfba86d9e7192219335450324069a7af7cd735b97fa772399fad733dbe0c609d67f828de1ac07356e30bd991316151f4e6eeeca0ab83c39a86de2d28ae2b367e9ecb4d9968533d6c4cd85f3a896a0d4373de59a2c6d1ff763ae99940575e128c8bb95dd47adc67a195434af3ee89c3e34a2ee68778971016e2561e4c62acdc10574cc055f762d93ee7d4028509c85b1d9566fa166bdfddc2a7ae2316761e7c52290cdfe588ee7b8a6914efb8812ebd39790ffc1844b04ec1b17812643cbadb9a2a80204bd58735cf448a7953fec3d27f20b05656ae134b5d273c52ff5c8adf308130ec518535ef539fbf09202a908036b2d16f954f0ebcdc31834baf7d96715b58a4acbd40009160a33905e5aa9cb0a856faafa0cfac8987f9d3653b47e47a65d465c658b0f1033c7782d76b29f04b1b35b47e3ed7f29ba6a4b7086d647fe0941ffaa4ea7b0f2d2f4522e57a4d9237d8778644360fead8815db49c0b796c8d3161ebac3b4963f783329f99dabe8c5e2743f969511e9b295f4a5489de31b46783c1c14812c3f34a7e68835a5225e6a64fc1945557ad0d768a931e37ae316058d46803df3890c90c6a0f558fab2aa6f99a1bdf71106349a848619a0f432478476a7e39d87659ed278d4e9ea2ad74d63e4e76622343e956a5e2dc517764b0021b8f2aeb9d92c66581304ee5fa20ac7d5db4fda6d4bae63c57a02bcad8db7d08be8894a295547e3b049a37b2ffcc79a43d14d532ed3b0304a5c9778d9b6e349117a0e5e528862a779715308e19798452c8b6298ed48fe8b576a7e72326e67da60e1e453dbeee711f21e761ffb0ee758fe5e11f43f37e3c57b480a413e30aff4e8b49db31bf56fc3d8c59f38f2cf4f3637cdfdfd8b1cfa7f3469dd5e538a46391766bd049938473d8bfb30ec6f553a6d776f692d5754cd38f1446a3228f7a5077b7ca4b0da3407cf9a23dd92b73d337f2b96f60c3a9bb653606c236514f566f0937ae75065554c2a71d3f7d460f3b4ebd2e927028b4e508ed045bb5fae0fe684edc6176bb1286ebea1800229f2f55923ebda6eb8ffe9262bef65748a6aa3ae24e8f2a75b443a0a0ca7bc9eebf3de7ac7f4ff5f87def891bb0c4ff19db15d4861239509a7a4e6888502ee20c2d9fba4388cac5c07cef94dccb569b4d248992fba1c01c0f949da74c831993a271bf96005f185f6b1366794d1894730f066e3ee9040ed6f98a9624936c2524d91403438b0e1f0b20cbbc01159e67ce850b2c9efa4109c683e5a3a9061138dcd89dd5888b9dc910072a59f4dc66b5f6d7ba2b7bd4629b33d22c2bfc4d7c3b04c8949c2ea912fcb849baa51a4c7668312e9bd39c1f6eab6711e796e60fb517e4d081bffe8c77a2490e03093b0bd866c8b2378dcb846e20a8669f4b2ff4c2b2c419eda8bddcd3a20c7d8ceb1ec19499038a15bfceaa69e43ff9dab49fa6adf6ecca60be36432fe449bfddb48c17b0e729dfbed36e3b67de74f32338feca7ecaa30c60693067925048fb7ecd4db4363a84d8b82f73dc71f68e7cff3f130b3b153307771172f004ce505af89c29422d795a9e8d3da5378d14d7bbf831a70eeec1e2e22c1ec5878e46aa04d18be8669e8cf458c463ccf4c62095d99577827e9eb5f9c607f8f1d436a09f20940151ca905a9a2fe60bafbb210211fe5e776c0154d9bfda9108be7e06c475d7c6662d160bcd934b7a9c1732a8a39350dc9a2d3f17157e4751b4f42e069a7450f12144f218cc29d3087ecc0462e962fa96488ce2ef517c34d0655a8b3d0be6b49c9c5e04bd40a2ef191896d757bdc82215ea538fe47503ca9484b93eb3fd112a503e43f7040f47c934d43d5490080bf1dfe648f0ff6959302777d9ee70593fdb946fba71f5226086e119882214b0748e7ea634ad4715c68f11a882447d08b6eef0978d1a97613551a85040e9eb9f4b217a90de6ec562940fd87d7ce7e1f1be8cec1e829cf2b40d5012df2d531ebbd8d4590e10da7f3609d706608e81a4fba1dd116d629c0e0432aba62f1706b4ee62cda58790997f7b6f1022b882b7cf10a508e6eaf4c5f437ea8beca8c6aab51e3334e5632754cd170ce1b5ed1e3368171436f4fe02bcab377e186db202e82a359132a2099db36ff4297346672b9d7af7348ec111522c3bea3679b0b692681a1ac5ef63e3ba5d6ff80dee5d8d709c0a9a4e39d78caebbad3a59d73e1a3fd18db51792b05846fbd40d027983c9b7d922e7a95ebed5dc11080e31599d48d1cb8beece4311d00834a71a4e3c3e82c6fcc9c68f26fc56a4d7544d042857a610001dad342c0fb3c9b1ef063a60192166ac081f46b91b76d0b599e11b6bf49ec3154ada8f72316a5119b4bb0e0d990c5f91e6da173ea39c2652e0b1be4bfa97b4b51b5d2840005b6815ff20126a48ac79546be04add1a32705730a534f0f3f9a986961e47bc03efd64dd71d8ea0ad697c9d9f1727c00a9f746b92a5c781662b6b30c506340ec28e6268449ac9d650ac2f138b68f60cfa4bfb370d99bd26dc97c25cb0fb365fc5a1d60f4e7f0c35badb5b5f36bbfeec739ecc63a9695f09dca475b25ee696d7958ef8e9feb49fe57260c829a8f98886fc00b1966efef54feeba4ed9d7b09d9db9bf919f5b22ca0d00a13e18ea08dc021dd97078653ec7239a41137a233f90dab99a68d86dafd5d6ed0885d403d242895e91d2b295121cab69a18d3c4b7dbab51e89473d3d440767c0fb6406fb3e024348909fec07623e0fe24384c8565162576ef3f475d2caa9e901e4a556db336357623e9fcdc11773788e8dc0c54ca2cfe73440382935270383392a0e6baa9baeed340499fecd17040ef3e808dc355a4a8ef5d7db016c455d5eef3568ee705d2c2f47485727334c39f89bbd25b51a601b743b22a5a4810affa1ab6d7a863561224322739feff99d595f0e72e0f7029c8ac08d885ebb7b603075f53a0edc028fdb514eee3afe29f1ae6ad271ff4af6f6df9b7471cded632e3a025604ea97decf9e825120f0fdca327e4271204a58fd56612c7745bbe3405c636f5533d760d209b2fdb5708894e547120e73e98bc61fa4599c1e6df0451ad1f4e57b2f9ddfe52560eb0148cc6a8118b2f75e33883f64c80f12f14f34bafa77348b4e6004bb1f0bf074be0f8228a68da525bc650a69d5aacbb779544feae7356d8a582fd49d88a3aabf732c73755c8e35bf14e9d9ec7933d5b23de4087ee9f3e5092102d42c29d6d5f5a80967faac03a8edef26bd715949742cc568281e0899e6312f42cd11098abb3de60d265f9dd447d9d4847ea07bd5f24d9a4678714d10b6290c5888f330a8a2c0b3a0774b38e95aa84b6be320e9c0953c43e8bd20bf3e9d1a40aaca7ba719d3a69a2a2366842a2985dc43b69aabf0a62248b4c2d2660ce52c51a25e5175c396162013f3598980fb961074bdb5c74f6c2632144e304b62d486c9a70b1ca2903338cfc4accc4fd11a036e66c11a47c43171886f28e27529b451302098843767f1352ea31966df07ccf57f82897032363b2ad22d198fec47cbb40c77ce333b2f1935c51901d040085a94c92edf60918fd47a99b5e9dfb9a662d8e71375ceb6d2f35f1d8f2bb27abe0c07d6d389926bb642896371607ce32cc0e5485c5500b137c7dcbd6b60b2960f29772eda50adc893cd7ebbc8450b72c32f02b8ba356e3246ddd42d16687b9be5fb0b57a9fc5ab10ebf82262262376f52f557be95dec344e77c6ef6f90bb39127c8ecdbaa55402c0f5ebc2ee77da5e1c15b0de25519a5ec02eed29f7b110380bdd94142442208447ef4555a805f00d0f8a94cac62acbd347f7929b0034112718e763312de2d59fe43c7743253d0ee45de273ba5255fb22346669bb2fb64896b84e6ead5e23cdc64461f423fc99817465d1d035404fc2cc140fd4f2cca420f7786738d12b718387d7046e7084b7e25de5cd2cb416849d51753856ea6d8a34d9c7d634452c5891651a7838a163f4bbd12c48fbcf5ba10522c68481fa88d4feae24fff391c74571ee9d41d53ef0ec789ec7b9cfef760174e09688c8bbb510d8f51e58f91f82c49f74ce05d6b1d21ba31736a41b8cfc4276fb4399ad9668ca7e4f2275b776e55284a82b18bfa28dfec5daf79c613064c075d37c5ba3232a6e390ccfdaa110757bcbe9431ef2796af25b4a9917236236281c19af233bea6078a3ce750c6874a9acdfc8946d01bf1fb2cde68988e49ae6d5b43e3aa4fa44a17648f4c06f502c08723ab69da78fec02aca84f478627630d55e8a1cd4540da63f3832020980aaef8485743dd42df78ca4c74e561736e33001523f4c588b2043e5d0cc113fafa661fabdff0c1c382edcd0ebe3955f52b8365bff097c1e3c06a873f2068292c91f9e5291f3de9ae1cc3818fdecb936fd1eca4a2c91b30dafe65d4f67885ce9183c2cf2caf9bb366ff928e3c710cb86813d7536a37ff90f2be9ebe3f6f9a72be226954430b8acd82cdc359a0ff8d236243cbe872a7a560bfa37d99569026c42700461ae8ad9b8685e9ee6a39e4bd62e2f432ea68a2ad3ea62f7afcf874ab2150aff169aa203e8ce4e66c4673cb2e056ea7c4bf98b387792ac52f6f8177a818cf73f3e6f3edf43f2445d564eb0d5f6969c0da0e9f44c4bec1f6f3577e239e18f81eb60952714d1bc87ab24c1c45b23d68e1eb2df8f0d55e00577f4b6b030db06ee2b0574254b9a156177b6263eed6cfe09d80b4122249f57a491bb1c480676d98729b474ff2ca7e318e995e6e732dbf6536232787638313746e613117464bbf1940af5fd7f5eff10f52b486a87d377a6b4e5afed53f2116a319d83fdfaf2b0345df950776b8aaa8240625719e67748f676890b0780fa49d6addf9449a3575f8b291c4e4a8c57b12341b94b5acbc757cfe075cd2dc7f7e16504d4cc5b373cd0de429b76deaa6e1bd94056aa97006aab1739d27dc9ee92dffe7ca3b69c7e480a16ee9f519b8d76f08e8461ff374b094cb8cac7a342be724d885f75d77440241519765065eafc1838295603cfa2754c4398db7dc800ff3f32edf371b94c4477f9d122d53d31c0fcfc92fe63a43f46da97a1b31c736b79a3971481c0e38a53eabe2539575ed9a1c944b1c4ab0578855c50b99ccb2debf34483e55089dd9835256dfc05fd524b6728166eef007bb4fc7977cadcb27de837cafe48aaf530dcb2cf0e40ccf0a0eedac07cb1c98c8d5c71da13bbbcfaebca0bde1125d52c63c09190a7d8d757d029c23a7d629877c3d6ad272c7484cbfff93828c2641a55feaa9c1242ac6e5b6a66e63d2169a5e9a58b7807cbdd7c4c42dd864f1bedc198890499fae6a4d824f70c0f7271ae3809bce39922f6deeca63bdebcfc24a8121e8d3551f39ca85fd9ff830580741999ff8f47da21b85f1b007365a4d6e47e550f92a58ca36ba049a20832901133930ff4a61d01ac1648528370d804866355d1931ebc12b25b74dfa89c8378cab402e3108aced76a1a81d957bca1a5b3a917cfd0bbe2aac9740c691342dd845501505e7ac2c32404cbf2f8a3df264f06bfaa97f1f07f1e90bf502f0b83a87e5a2263c55bd663b0213184f78f5fd1c926acf8711c45fb34ae432978b7e54d2c801d2563da4f15426a551d1d45c609ddbd78e7a57a43beb5cc087d8e3ff2325670fc7c7f20b443a4873ea6b3ea9b3551702c617a32713068911736b7cc32c0c6d2c75260548d549c1ff40801a967bfeee9ce4d396c58ba17a6773a3c862c5f434d848e4f9f63b0f3da80294fa8b10e7cd069922b527ec288b230736594687894893d189429bcbf7162e9f3e50f018ac3cc021a95096db2845e4bc7791e6e71822ff9d8771923e8dd5c374d0a07df9b8a86a3ccc2bcadf0d352cf20c24ec7b4d5e7c1b640971d960073731e08b8d4a99ba65390f991c4e63d35c465864afaa755589c9a36cd342ea34da4502549671cbcd31b4e81b03cfa8aaf337e0e3a8fb4c92b926ca2e1ef198c92d2caaae2215cb6b501eea3429d96816a2352a2470e42fb07ab14ccfbd6bf84eb0574dfad89d151f51059a76f6d21ec0b9ccb899900b8b195f07afc447288520046360bcf27e4543b4d75d55e3603913da6d00d57ed80b47d68867ae34addc0789cf8777383fb892ec22b74387fa338a64a4a74a95b01cc661b218d01e72494fb10a26cbf2680b6777664ce24d16babee8f1f07b8d4a3c0f812317fc6cfc79733a91c30db97d9a4be7106294bb3c2b1be7e380eacdfce5adc549f96598c2c91c56f4e0bf05e701baabcfaced5ad1011be1d7dd1ad05ea60bae9541be3a6bd4a5c6a21472604abe3e35e2905e947be949576d697e1cc5f9b39da37558ba3e0899ea37b2ba410f4c3125f7a16af0a3202eb912caa73bf96d3022e2f8e7a0dff18332146fe930ab284dfc8d448507dd5236a7465508963f5d0bded260cd76b81bdc4ec68091a7a4ceef1a021e4f4290fbeb8296bd24c42e55911200319cb46ce41f90dcb9462e92cc9f1ef4832c294499d7db82478e3e3cf38a6ceaefb7e254e6b798b55e693dfb9dd86bd317ae348e98662277a8976ce193325ff0efa17906905ed6ef049d4e25bf25913c4047fcd59420e80544f2f8c2d1336bb0d60bf0f87d5fcbf83034d7c7acf11f8e917bda9ff992bcb991034a4719f800b92739d2b10a54f85f55d27347e3d577588fdc56645525e0e3315ad9e4fa1acf6867dda6b6c3b8dc8309f8a92d004d39189fcc08b9237515309a6c3032edf6185cfc49d58035f5f901b119d1fd6ec2c54d45dd6a14d0eaca1030a9d59752348bf56910f783ddb6de69efb8962f9bd0bc651682e2fe0a01601098b652b8e3309ac032b575683765ed1a1a475e4a13e17f0e964f1bdb2b53879036f40fee0d74b54bfdc9f773bf7db5a0c558a2b3738f9d9829b46d42b15ba14d9ff585cd3d9b6c070ea0c65cf278b88c756f0c121735889055356fbb38743d77483d5cccf00f3f7ff9ec8a7a5ce1763bbefce2ec9b7dd095bd548bab2d47bccba43dfd73c13aa015540fbc527b426f3ce684cf895cc30606a69459990c40cfa94869c0382db82e75818cc47bba06141e90894a9ef79f8961c567521b51f9b69ea9637db092024b0f26d64b6cb5b6f54f518cbc83e87ddb458e6ffd98aadd322a5b9d6e43aa938640a89eb9abeaefa34d8e01cdeeabf89c1055f0c497536592cab38a2a87b40650c88b28879fc5ea7ea7ca8ad725be6a1c50d0ac3fadf81d88fe65bc2ae35ab53ae533163dded36207dc7b8a60cf8c7d0c9572f4d733157f6543d695e7ed1b3ab55554ea54df9fd0df5a35730352b29bcd3cb16d13cd1805b8297aca0a1b520150675507652887a155bf7cf73735cd30dee510678de29c4b021de6aae9e4bba38cb9b81fd730276e1b6ab669651f18e6c1fd1496ae09feb9d3af9ecb0fdfa49bdabaf276338cfb9190ea665c154532281703325ceca9dbcc9d3d07acf4729944baf9a8bcf29570b646bd2141e06ea57f3e85fe3cc258a00ddf74b5b320342648bdd42f56acf02346ad616bad2ee1ef56a8f3eca8e78ce7f80ab52d903b9ac81253f90ac5cb139fbd4565aa0089458c3906eb624394bd1015bf9cd3a67f1cfb3c0dd6cfacc57622a4af4860fe681fe8a0a8cb037f827fa4e16e8a4c7883413c204bdbf25e24ae78773b7834d943c7a1283f2154df192b32d5880bfc88e09e0759be96f76c8112edbf8a737a23b4d3223a1a6cbac4c166468c9ca0685a1f99e952a696635a334a1ed80cc8b58033d90850cb2bc9c323b73c512cd6245e78bb5ea5c438aaa9e3ca687b42f67b61393faff6d1dce67cb88490ddb92b9528b478d3cd681c51ddeb0a76f3cd7b40394d7da5b6cf0eb543e854e07cb1ff5f2b3b58e53432bfed58e180b6ebfcc5888ad92975fb032faaab4baea7d8b7efc6e885e21f749471d1bd4fd3a4ce6173d8d874b99d4e2ebe3b254b08635c3b7b80e31c9acef90df0937d8e59cd158bf4959498a4881a9248eb447ee88f91ad00f19d67e9904c1faac71c35b99c5bdcc66361cd70c30aee4e3f7b4fc5a8f38d3ebd9a1064efe84a1ed10bde499efbf477b6a28bb4da79933cac5c46362bfc6c73394b8e835a580dbb45eed0a04180437703e94bd73af11192b649eaa0a536cb5cf9343acb4c05eb0e9a17c54420834a42dfa8966e610be9fee1d6c59b911d1a4a61e6bdb3519c5287522924abb87f89699e62e3c0e9249ccfb3853f9d6c39e9ca27c57fc1f765e4c3e295575d75df8169e4aacc954fd5aa93afd7d11cb2f7aa6aaf73197daa0d1232dfef05cff51db2b236d2a951e18983c93b41229ff1e0ec8a7d51e34ce5fc5b52ae88988992d49de1198d126d5acac8fefa439c9da57020c7f5f485c637ae30b1e30497f0fb7ec364e13c906e2813daa34161b7ac4a4fd7a1bddd79601bbd22cef1f57cbc7b8693bc32639bdab5ff4934c52e0c325cba7196397f36b10e83a2087fbdcf32bf76bf5581949d19a0e79541da0af2d6595a9f13fd4c262f8cac5f0cc0cff80a13e986df63323cc165573f59148b03feccaab0a98de6f03212919a3a89ce9f9935398aa83bdec3686fe8b7c8f910d812332546d54fb20d6f3cdde4102f1c1e668ff14b4e8ffcf9554cf68f3fec5eb7b70944d215d74fe64d77dbdd3c154b0d0880ab4940e41f273e791b361c82a75b63cba3d2e9991303433035d60cf0dde3e5b3c1f51dccb7d57a70b13cfd408d0b9f06acd9df299dece702568f0136472b8495dfef339e499cafc0731440aa9270cf26da5754fd632bbf7ac838c75a194c6ba34f8830fd66e534e4bb4c85254a038ac8b6cbe978e52822f5f583add0b6ef1168ab60745e7237a05a14563945063c4848bcb80b40a66ab7f088f0433eb25c0c527df8ac360e0c789cf8c1eb8e69938e43769c48d9297bf516dd0f25f89e4bc2fd31c117189cfc3439d3000a65e6a1d3355ef910a6d0c450c58c20b4a2dd16bbc5615a637a915f599d5da124700fdf9d9ae04f013e5efc5178f0d57da1f1457d5777150fd09dde5f43d315b81137b573e0a51e8904065c7dcda5adef8a6d608e0ffd918abf24d1cbd9fdee33de10bbcca317d8169c798d4c20351a98d0c3f0547b7f40429aa8d215ac188b264b0d6b2e5ea31c387c2b07331d099bf7f9776d670646b1f5f79c67c356bd8d1dcc904c0f7fe15b7d079d42d910bdb28b890a403c5d1e56e35a920b6b46775478f74bc6f6836d0642d332d894b7abeed1e3ff014acc50bfb9481c256417c091c63f92645a0580bd3863ae30fc5e6eb159beb83928f0785cd6248d5e443713958429f6bcc072c6d0ac4d41d47681609a816dd8405d560faec894780e9220faf0413afb38c057c9f13cd4a03ba9cd4c1af765e1cf3e6981261efc6ecec451e1328be71250c030e48f68be4bfefcae6bb30a5b473e62a7776337e0c407516660cca2a2dead467ab11b9e5e9766e58159e368a27b06509c5ce6a1c63a50cfcae43f4412b296c9b1ba266c2a353c0b02912c60d01fcf9eb49c10fb311433a5fc060adeab20b5d0526a2040c587b6c38eac1ea16887e2838ccf8282a5f4186a7620afe0d0cb82d0f94ba9caa5119fa5a2050a98d065f7d58161bc06995c8793d5de9ed937f5767202c913584d653f37d926a0c5ac1c67db3efd1dc58fbff998778a685625411909fb7d0d7822e51de0809b5196602dcb2b11fc286dfd90f71ee7de9cb63d30d32f6fe1e8a8ca33c43654dd9da9710c8a3bb6d97c5e6761f86db3259c97e4374d48cc624578a7b3caafb267f57d635b3d837a2f8a2551b5862b4619f869cee6dffc9da894564ff789c325c4f970cb7c5da8f868c231410e28ce2d0630aa31a213a1501f65d027719a072b6f0a21fdf253029e1fc530b9de48cce484c5e7d10b70dd80213a64c2b463f23fd0b80f9f5fc626f7bef37230a86ebdf900289101858007aa687282b622800adf9473a804171f9c71c0ed9429ef2307c722e9346792c9c63b5fbeb8566e76b79724dd69e0aad7c9b8b014051a24de30fb47885057d5a68fcf716f8447daa08ed30c45f3a9ad87352916f74395ec28cff1f8766376a0bedab3381564ef0996072fa55da3b37196654f6017ee01a76b4b47b043ec38966b1d933e30d8d07defa719aa8518b2a98de09825e65301e94e2969096159122943eefbde526e7099e5e50d664cb11bb7e63d9fc2e3110b1429f0d25e6f4897dbc1c539a2fa84640041579773151b531f37b2c2e1bea671da87281049be293e107d16f92689b91f235a65245b9ea5fd61eb06adecb991fa8f0e35af35ee897989de7aa6c3807b0685c994507a19ef7f02889fbd5e6461f9b3f7a00bbd70d7de8a5e66bf249f58aea9f77b887947565c8388e47db15f74f3ec0c0db24ad592d1a47541cea406c09bf26c7158b387891a67748b7b800b697d8983c53f589d48f75adbb241dc87514311a11c3dc35ae64d10d3eb1334e8adfb3f277d1f812878c43fca2eb5387179386a3de2a423420c49321f89e15a77c0f15f4f7bbf3f1790aca5f92d953255a6f07e8b4b284ddd49a32dbffe726b5920f47c6467bafcdb2f254fc1256e74b468efc121ec36cd7d4cff764daf22e1dd6c79191ec77f44f3b2d27fbaacad5a1e4d9ad48a1c5c0cb28492ae41129f58a50203a7d6f19891f1ba28b85e29de6ce3b3861b3c7204960d6f213822df342a207008cb159c838e45a38cac24337e27b5394627b173ccf3fe8b1fa67b5b7df0d0351cd5631ebc74601d92bd95400914f35d3f6c719821a0f656d26bb31df92744cf9469380ecffef176cf5f29d61bbf3e8df66bf5658f1795610e0a52ad2247febe23f91cd32a884a4d87137a7c0270e749efa8d55271d25c281704d27f85dd5e7f2ff77a0258ab0b107e7cef9869e49e2faf9569e5867bab1a81edcb0b9041f4813d06e812d6c1944e09edf1c1ce84c39daad45ba5194e12c6d327a4d7de304162cf89ef9b21867684be09396e8cdbe81255c7f307c6f4139b8f34e87acc02d5a24c02e8f1c54432230f311f1541547c3c54f2f8840bf83e371aa81e5ae64411ce57047ccd3e9557c772082b4c7879006a1ce7b4b044b4e2f809f3af0eb97e962565010373f9f447d09af0e68a9ec4152a1208b0032dc4b27cd1aa22ecc20cd365fa8b258c93db82dcce8dc94610c02afad8f882f313a21d24163e129b7c9949fe8bf54b7d78d5b95a91315c059af7926ad619a61692d7938c2c11e691558e7a6d9de1fddd355d2bc8877e075f89d51be89dfe81c427dfb62397e82744f966d511a4d3b51235ec8ab525d6639a69d308029519beb24f14e578fe034d4cb4bcfaa9454cf9b3170e368ed0dcf97cb79bf7276ffda5377531b1faa305c11f33fb4b92d3b03446353cbfd43cf4214cff7a59e5630cedea36909c374b524b12e39c585ce4900d323ce29713bebe73a1be08a0cb22e9f1310fcc14ad4b9b23ee303aa1660c7eed0d8aaa5cdbca8e79015fb18c3733f747a26d3eabcb1822e407c630a74c9fdf5c3e9afe618b0506a9e2612f5cb7fac759c4eb82d22f559c13d60228da8f3333b35c0a5955afe2997edb6ebc92cc0bdcc00ee713283878693bff708dcb9c4b1ebaec454599c8e7c97042e503dee1db99e2f70c7a0e74f51cb4da9dc9faf26be2bb45d84dbe54890926bf407f81a7dea16af3a82205635029170de687d9200a423d1f3fcc33d14afafab72d8a3b8ca96590ab66a59d921e00faefe721f6b39a9fd8cee85b8acda1f164b0f8de6ceeb0692c74a46f477fb346a9271c32d41bb16de6db7e7623b8229f0d332ec6866c882e76f60e09839ab46cda19f234e1d6d33f0fdb4ea6af1f41565cc45bfd287495180895ffeee25195e5e65f1592a0637475bc34e5578d7182b9cbdafcccb3a56bd869daf699d462ec44565cd2f6a04019c4748edf233f3d6b3be2ed8dcfc86d70c2134b8e94ea1d0bfab299c6bb61fb378db12fa87444f17f4f2a728b60d73b48778d5e146a940e899b83ac7d6b56036243fabdbdd52f3c13761b10724a509d576b4089447552a5f98931fb43810ce70e89c9bfabc06e5bec432d3ddec6c512221fc5539b5fb671b056560cd596f724a0b1a68beec082ff4e38e9612d70c5284cf7945365842000628558679007852acd7e09c8e34ffd94ddc9d810ead2a14e1ca535ff4f8d3fc07488c181ff7d6787f9217bed45d94e9b0f6861c393671a02358b12bdb5d556305ae319e29042feca985e657f7306e69047a72effc3986fd30c2bb32544e713deaa36da0fef02cb414f876ee5f72366033b08883bd801433f2509bfbc595cf939d6d68a7 +MD = a544431a9391cb84680835532d2af6b32b847978cc38d8edffd4d070f17f9372 + +Len = 81016 +Msg = eb9aac467a8756313a06dcd7e0864040266da21dcc096259ddc989f034ad65043efb742e023484125e46173693030c1404d27c6d3aa4e3e12c2a80bdbd46fe1487bf5311d738e98bf863fbdab57243e919ced28d790c3f15b51d0323bac424ba4b4d1197027dcdc591c5506c4eba2beaefca6a249127be1e0008dcca3211201e140f76698ae97ae7b0d4de9367c50c3c0d2c0ddb8bdfaa249554d15b2d143a69696c492f7766371adef86df8067a300afb5d835a6e1b494efd6aab7eb4b5b9c3d3cc5490d1db4b86a299c44236c1de7a42c6944842c3e5c5bfb031dacddce753d9975d35a12fff52841fac1afc825db469ce084e10bec4b163902d1883710a4203362dc6ef4c9ba70cf2ed2862a5f6e1f8dca613dff62e39717165dfdb5c6bb7d90f8ceac11967acc37a4f136f13f129775a3740b7526d8572bba3d8df8552dbe48b4249217eaa8a301f9a842bb296b36faf837ca0bac8beeed5adab96d506d6ab12168c1663ae68dc4a95229f6b2ca868435270a316860c6b294bff0832d1cfb60dd15ba8b0b96f4d610996d227fd2fe87e6cc3c74ef096731e477c3e85f9ee8ee23b5de04d14c60dcebe87cccc4f7179c8991e154b4e858d1c68cb3fb7c75dbafb1c3bc5230797a4f77c9e96436b96a289a02993f3e800428b759413ae8341c2be3c9d6018d90798460b83377599c5ec294a8b4b2f053018d4377ec35475c52f956329b715d440732132ddb7492126dd105fed45e8ee3d995d76325690e50e88e7588ad5033e6abcf2ba541fa64ae2ffa6a7f68804ec4e4d8ff958d4491a47551ce466bfc860acfc206c9176765d21da54e94f1c6d458bbbd28a9746695d961f9ccf667f4e822fba130e3cc4a0a20af480ef9f0909411d6b8fef97b3d7f6236ccee1311b7bec1b7e3368fd120c61c6d7947f8f57c22a2ce52cf101237b2d17c71ce1709e39e597d1e8447a67a2e27c0bf662c70f7e46dfb213587d9e3d499ab5ed99ca0d6fb6cb399a685ecb4a6c55161060ee3927df5f59aaecb22d0594d3c0aacfe87205a8e040b19d4f46ec4979824840acdba43bd4625b7549d7bb54eb6fb94c71d4e201fe6e95abf5e170bf0fd708ccabffdda265568dbae9a547d20a4a83d80e3cf0094c4aae5afaa3be17409bb7ca90acba5e3abba7843b9d915656da703a67b1160af35c65720395be993358bc0306eb23b67c1c139be7ca8228faa6e93c233b3c4a1b2c20babbbd598c1195813fb3c300f153fe38c79431008f1c3754a4eae24a12ea4348fbc725753a01db6d453f3c3958e6eb7ed0eadcf4d5e5131a3b66af29aa8b2846fdd2d5fbe92cb1e8df535eb6335e6a4d7d93d247407cc4a4c93da9bf5a2463808882d3d4e2b99f5ad3973260cae2040d97341bdf1909d2591617d9f56ade7d60647f29e66dd12d2beab2bf1d649b3f26e678c0a6a7b6c3a0e99d45b421e0fd4d5872df1bd19ce4c4ec4d0dd64ab1a6013204c88334a921e30c76f7e2c9536baf2e03fb5a58414b8ba10f2574c54bbe0443833b5d060a7389454bf768a85e50edacd9878a48e9ebe9d1a10edd1b911198e19b211e660242fa5dc44b2f062a32719b9d8a95eabb4a4743aad0fb94ac2626d3f483ad9cb9159d1c88fd1e2dde9ca2c2f60d6286e0f20bc0d374b47ac48514e23768f2f05674dc4940151c64a313e8eb8d17d9647f6b9f10c401f21300b7cbd60cd9d5aa01e71eae939913f2a121abdc09b0e2cbc13b69fb247f9ca98943b4771add3e11e4f7cc112a93ea20ff4d535e14e06505ceecd3499bf79a8287b1368c0a7c156e242b4c3bac0a8936e61f483953b04a58cd0643c1d370d4e6218ab8df83be4209ec0c07f4c207d87c7d20f3357027790de60f232c71f2311f7f54a4362eacad2a622165031491be39edd7ba1a134edb6b4391da5220859c74ca9a615ab34d3f19aef2cf3249b026b75dcd06afe32b56bc0913d0fb8632fa2c2ae15713b9aade1df907ab470a6cf53cf68840bd89c9d346631e6def4b003490c6b3ee28e8c973806be9620bfece1411df92ce0cac2d3b53773919f518f832e8c7978e63eab4e7882b1f5d46cedd6b7e41731a64f56174296dec3cd79520dc7c54169f8a6473207e623103c021a2e2ca44b18a8d0c6c68106ebf3e5b69821a9396b78966010c08aa37a8bb40a023623f0fd6884e9856fd52a23b874a3c26d576b502b4bf66898653d30aef90f36ad123cb6a7b7142271d3630e77f6bb812f36ed87f895d3ef181c25de20676c17f19bf9ff3cbbcb1e8af03404b8f8883505ec127b76e072f4de340feb568bbb268205bb4fbdff88da19b02fcf01d6745e8fcb7cb31cc87e1a49313de0d7c276f2fd03f320921ed8058c97b8a5d93d1a7e0b79aec750ca3fefe79832471ac81a0dc0fb240a6f862301721b5121a578e504276b0b10c94242b647ddaf96a6093ed75c7fd0658cc2045e58afabdb0d366ea162143437dced112dc875e847ffe23fc04df69adaa06f068cbef90b2a66d211a629f99ca5020745b717f59ee38effa78903f3c5d210c9841cf35c01a848f868a30dafa6d0ef4d3ae284d115e1d9be00722cfbe3d4747e077fc45d21dd3a05fe287b9b0543eb1b8b10bd9cffdb76a9c51c1773976a31f92b357070ee21a0872c9702402a868bfe90f210bdaf28dc5f8ff751ff32fbdfd749cea63bc92e12e88e8f103379114862e6e72cc7c662712bab946af35911e4750dbbc422354b17c68e7153e9836cb6e51770702fb810ebaab263d0f47c44d67ec17d58a8c511059dc6de1be6dc014df18d1e797a06ac92693ef612771efd2c310f93e253fb1892daa225f69fe5678414d241a71b34ae0bd3abcbbdffb3b36c58628fef9849ba1619bb0962892217efcb61aa97a7c48dce6673451202ccf00d3154d1df0a337e25b77bc8ee47249ae781c599b98428d440be4ff2dd04ed4b8578410a4f1e3aed38406f15083e7f5901d4689f8b54f41a09377c657d9a771e7b89c189ae38e28fc440ff4e3ef374dad54fe53c9b8e98a79e6e931d52180cf145e250e07b0eacce6045c704f0eaa7a8c830a5f15895993556c01e7b1922015c7b1e799f33f40c3182ab30b9dca8aa4b5143354e410e782bf8d8991f313d16c8819a9626778d7351a20dd6dd4091df2b16d41da3e35da803cb147d6a18bd9fce0fe35116a43f949754ca23ffcb5ad8d07f8fc9b2ce07cb45640055fc5e481ec56c8514d0588ec27b018c9291eb5809d3f1b2c3cb5f9134794a289d36605116573dfc6be3f2ff9f853eb1cd240f1de49e2409868e268e8607e3f9bdb8dd6d18ebdab5b0d202068e4e72c61e36d5111b977ce09c5ba1543289d7f051f413f0890be95dae2b0448112f3456103aabd6016862d47fb45e86bc778cb8e468a280092fe0309e4f8818cabff9de4db011d128897c41ab38bcaaa649889fdf97079ffbd045eb2bcffc0d0d6939cb2137959703633fd4a9595a1462783231bdffc1a4e38580f9b12cdea96bc38aa92521a59c249e13f9e486a578839c3ffb0a135f3352c827c8d8d6be52684752f4d40ed0650e82af3df7512d2b8c2e08784e624edfbc10a0f4fd5e09bc857d393ab86f946613c957fd5c396fc1ee960215e57cfeeea1e792fab9334f2c45dd93e74cc47023e6daa4c48dbfdbb02d7cd37079b40df486c5743676f70d461bd0f9970b9dd2330a2f1c200644ff9abb4ae30485b7fa95ed22ab54c109b28e8a0fd0a67f6c58f7d03f349c407949d62a78c74e73f923274797cec221fbdd6a12d2cfa202b07306db9374a5e6cd58f6fd8ee6bacee8364d289d450b143dfc5d48d23d264ffa9ec4aec452b943a1ab71a705c7d61115a26bf29bb49c02507dfc9e76af8fb1ab5ad5ac3a6562f1969fdab975e12cc4f1d5f8581b83f196c400bc8648ad6ad25325ae767e131f7b3cc4969747d92b751d6f96aba539a82c18f31182c0ad242c829db37007e26b3ad4a839d304065e8bf8cdbb7fc14c2c4ccfe3a0266725681aaa11892b5069c2db2eb938ff230f3274048edb36e8420a734940cce3b4bc93374a2f842ae00fb2b68b86187e3d3a43e7c1117a8392a1af2a25990c4d21b9320cd35668e14f4aa7677b8d5cd2bb4e1f31cef41dc848e196fbd56ae2b546d1c105e6047bd0f6a13d688f4d8a8f1581010c8ea5398783986e42e924f4de8c6cbcbcf2d8418c6eb9d12437250625d499b5b270b35243db2c71a9c155970b7b00a18c7a405e762feb0f44f3c2741990ee89de259d0c8fa8146d9b0e8b6dde8b241c1eeccb2720a2cb442555a438eca2f619da0dc0accd82f69e812124cdca455d68cedad7300e7fc11c5fcd28e901b346c250a9dcc77fe439a11699b05b4131f32426c4f31da21f63045edaeee91b2a673fbc8a3ff139445401a5d8cc7af5c9abdab12bbd249dfa2778acff64dd7b70ddde881f789e6c4bec2cc98ec7c13a84edf8e88f8409349894f5b4bb092ab53ef12b4dd9f5439b4358aefbfc30b291ec201b4760e61008832218109e6a555add67a2786a546538c32ff4b7d1a5c39e77e89e682061fdac42553c5b09f6e1def497d092110497e753d89a777f8578b2a0ae1ea57e7616724eb4fede8e4d44b3ed1832159e9440097df90cd5865e46610ef6f889bb90ef1d10b7bc15bbcc226c5f5f438d3371e22199f7c83c669eb14c1b49d8af78410bef30d410baf2f1df7a93d38163a02c12c2306b692690d54db64e1d2b612514e16b17a08918c45ce061531b78334531466df9ba4c2eb58070421fe75d69527b04333d9371c9b07bd9b2f5ad9476931ff1773e6afdaf153ecd62194f0b0270f1e8ca2b23874837cd2fe1f3f072983a46a89076f3fa42604ec9b8c2aaa0d71108038268e7261edacf6760e68a7f327b43d02c4bfbde62f75ed998a490bb41a32be90e6f34dab81a00f4d245e236bff6a60cbd15d8f69b7aed81a41787b6fcb7dc1dc0b6c3119e65f06c988a8e15ab3cdbc2c57d11ff564b59664dc3f62042cfa6f64bc7e8675c5f1c43363ce4b87ebe5376c7ea4d452de940ebf8126283ce4b0b16f22b3b485c55f30d3dc59c7bc4ebbbad56d5d1547ce53277559b635df9ca87046649223128fb031f01cd0bfbf84562ead4d844c9ddcf8cbcd8b76f2b5fbe89232aca33ce3caecb1d34abb9a5936bf793d45a1e01caf8de10e3fefc585aa7a00791f6f65c21f1c97c58fa3c0520cfc85cd7e3d398cf01950819fa717195065a363e77d07753647cb0c130e9972ad1738a520dfbfb546a5026ed028513796b2623a2c558bc5b67534f0fd878d81c2177c0c5210da5f5a38de1dfdfad9a8246824441580577a48aebcbb75930446f205384c3c57f251d4daccd54ca31934a18fd3cbcb85d55c93fb4ab3a5bc668ae6e854ab073c6f545b93b4dfe5ad77a2b630561576ec6c324063c722b3891b1545c8b772db47b930976c7e83f1a05dbc0a52956a3c3e83c6f6ef194ec7828bafb8ae4be8df0138ad316c13099802324846fd7814480284de5ea629800a301e20e7a0f7573cf15492d19c59b9015d5e0f1139e75ac0c0d6431f90dfffa31a3d2f79a9a30519a076a91e0239db553849d9140fca83cd01e1bde2b52315bbc94ea617ce373b9f9404b8c1a89bb6bb1c5b6ef68609d8964b0d144f1ede087ac3bb4b68199c41f6576888619668935c90fc9560a78ca14429c20f0dd2f6210792eae71591b85f457108e1a7d386ba601c9418fa793b26fe206877c5d955a88bbd4541c53e74ddb4684e8b3b67df73ee488bbd6b04ffaeedba67141e3ce1e52dcd32232129b9026dc6a14dc45a5a062e9d494d5c50be82387e27aec102841f16491b53d0596d18951268f0ebb4deba49a2368f746662eb09f4110d553325a06db9679a7bd6796557d50d3d577e55d967e0ba4d5c4dd12f85a58bf883d8acae5ba67ec0caa9c632d996f7f9b0c0a6a9afdd3e4dbb0df596d618fe39f3f700920897c88d64d93bc643dd8eefa080b9734a2328583aafb46a24d5d3964c9b0b949b14adc9f26ebf6bbe333ae6cdc8767e603ae2368139f8f1966570d837c9b4fb3da5953b1b713c67721e63a5df9fc51418a8d2af37b6a875554f3fc75b8be31115d3e8ac88e99903862871f57f0e8e7b9af7628b042bac3c881ba62a61e8801c4c250ee4e1debe8722d9cc9e551bb9fc0faef99192a2ec8e58520fcaf0e9746509246fabcd59933b70b8dc6808d12edf9f56fe8a86224fb5ed7be170b194a534755673c9f460ff66954d0a1b4135d56c7176db3f8bb4bff86e1e84e24bf3fcd1b8458305fffeed52bc20bc7ea75196ebae96f775475f249e04c460e9670e6183f9790528963842450bba5b5ae32c5aa37d3fbaf7622b64f0d6f4dd4cadebbd93607963fa6018e788aaa250779cce07dd07f78c8c852068360d3663d5c494f64916cd034306a5c463c260029d7b4087e17349d5fb584718b8d0125a4a5511f6ed43fd4fcb2fe7c11d7b7dd8942789c0f7eabafd0d82a75cbd48112a740768a3c70e91ad5a84e7c700fc803c2349b19c6794d46c8aac481d8f9cba3b1b83a3e71fa01287b7adacbc526ef1951489c10278981e8b3a7d334174f595f50771caa93c210844ab513e8a5cf8594a2d8ec0d9731f20c0e49e6fb2b57b2bc1ff77e3d167b8f94cfe18a61766c33ec53701b60ba050637452b6045699550305cc40f846e88d6f0778aceb4db8f72b6df989ab7f47546e104a6efb176aaca62a367210f207c9f1dde0b2151299bba5aa3dcfa81db052c9fa956e5bdc6ea79a9905b634bc0c94083600d52d50533736e4c97bb4cd2373fd9cfb5d2c8cef6f69b901b36b8c3e153a7a9ebb3aee2c9465836634d877e7df915d43e37711332b9af1f212bd4ae6751211830c44d46dfabaefdca21b0345bd0da437a943528304b6ab9f7a32de4cdb1563777154ea5d90be91f36e85598535fadb9d5798372622444ed194d331b870cdd842917018467ff8cf73401e62ef71df693e957ea866accc425008a729725cc1d9ab16a3466eeef11223bfef04ca9644b6e209fe8d89cbd7eee47db6afc1c679cc7ba5f25c1e062fc3cc94ff2860cfb12a505e1fced8a6ecbc559b09acefd67e1b7ae967429eef3c48366756b7f742af2d523aea549b6693136a0ba70642b6572c708709e036d0a00b29dffd97d817c527ae4665051a32545bec7598a7038b8c69252ae01e2ed1e1726da4fbb24b777c802d299aca9c33b8fda480e5757980a6396178f5e5cd1c89e7c95f58ee978a5ba0978b918c6b90465f57d5955aeeba2c03eb194f1b5dd620d107b81d350677eaefb4165131cd7287ead01cb03da864a6318cb6f6aa242a2c98ed56516ede67b1d64c70e2a20b010106d6fc3f05f0a49c2a0cf7f3786b3e37a344e2fc81688139bb26414cc86c643e1c301d499c0ea2975633834d6f793ac85cd3032655ecee09070b32978a3ac4c692a728d6e94a881f1dc8030c769847682a6462d8d4b2d5a923c3eacccfbb481fd203c5efd4ec7bbae7951e39740e8d9d75bda61ae5015fa2751612f3813919d3420c9b9a453ba5f21c607ddb532433f2a6a778f27023b37b67cc521287fa5e6a4c8953e124802e4e24f2c7fafa2261ec23ea806a5e5efbbc60ac5133c947406a574494cc59043e566713a59e51504115554e658995fb5ceec87fb85d2f67e75dca030762cd0cfb934e8abfd040f5f8f4a49bd057fe410098060d2e99a1a47aca0f8f54ab66e3908c3f21bc97af5bb111799868dd817a0f42841e5cee0744223a8db022af0dd023c9a39e45fc86c892f53a0ed62207ecb074a97aea6449900634ac2d1977ab1addd3e3ca0106ad85c32751c6c12e76e10cb7dde87f034fd04f40d4d0e20a260ae531656d99bd0cda6d2f2485d20ab89f4b928832c3d4014c24e66d5f257068e8646b934fb4298c0eb8961d16b1bdb36e948e121e60de484baeafdfa389b257fc810ad437fb53136bcbe3a240054f51980f31e475fb290a1714229364b7d7dd8d65958fef15428a37cf9e1dca76c97864e60664fe3fbe31f67fc8ef6a57e7e1e437942e3dacfedabbeb50f57dae3212193e92fb83d1a4a33117275c7c10eb4a4a209018ea6590e93f4880922152920600425f11ca5ce34a0f03c943648ae902054810b5beeaffa10b0db65c7e0df23c6117f40f9d86840cda6c360ae86eecf05dd69c6d80e353e966637abb5b84599c84e8d95bc2f78ed3d879f41bd164f9fc9cf2bca8faf795a89a7255178162cf0eb0db975f0158098653538ddce6131a0e08c6f9cef2cfccc8ed61ced8b94d5c7a2e18b5822451fe0d912189b7f124560eeb77da4731130030a8596e66c9ed09c847c8bb2bf1897450db0c6e13b83eb6e48b30e87b7f6a39c81281bb2979ecdde0401331c432a97336783cc657050a40793117a9d3a37c807875023f8a93efe1aa6420a0b4ad5803a9b2d818ed9e30feb32454a7b567f2dc28170382efdda11b0ffa1890632b3f2d91cf09ed3c4b57f87bae106a8a917456c042ad0bc121a795f5492287397306f8d418f6ccacd62735ba157378bbeaa9f5283c28626925ac57469a670f9e4f546d5bd5c83da5054abd56a2a45bae3a3ac1494d9b0f4db25667e8350faffa85d1920e4ea6c88fa26598399dcc9bcd49cec209bf2e9ad78f4dcfc56241f0b5de2671d5cab9f6d27323cf494e12be7fde0e0151d80b8c6e863a97c36925583722fb129993284ed641296870fc9f4e2bc3a2850ae2576d795dc5c5cc91e471e819f77b40ef1c5904d3226e94f19ad33bbe31561a233dc362dd9563c724a6c3318ac3b6b427bd9dc2f3b4e69f732cd31698637d6be4e31890ce53789b6892d4783f07cbdb8232a4796787da78cb7dd82419e201e36c71f36bf8a60d32a6d12f26fe6ac09f4aa4f692f844510741b469cd0853ea6c0510dd5b22372973258a59a490949fe7c53a19736e9354341cfa0f792e6141edf5e85dc816aed4462fe6db59bd2e709a3d1d9786911beae7a676509054b20d4d8520fb1a9ab216930a0d3eac4ce039a2f874f83229851b082551b77a40ee5676fde03fb977ebf842ff260a07075104e63f68c2defd78ef7fe2b2c99fbbbe244fa552b20e7502813c565ac5d1b42ad84e59217ff4d69d6f3425c210688cca80c0c49bdb7f5b9fba6757d0f9711c12bec290c6b6db7c9ca21036a8133b7db971b1a4e64275f369a9ac4ab12d5107b2bc2a2a80f0fbb71c91f95c8d5a815433000a8b597059030958f47624ead83db2dd6e7076b4bc4fc542d8e0996ea3dae234b3c21cec915426cf252452b76e85b92677aad18a860b41bf960af3d607d76b159591583e87ae6915289c621c7ba86fa12b20b8fac1b435101922c41a171379ab963f35efa1d87a31e6267da1676f7d557319548dd5124c3b4b7033c33a55b2ff9f16da86499c002e460acbcf9b9f8b4a38dfccca2aed2c4a133c6958d766be18995c708be6c0a4112f8f732d7d03408960b8493a280d7d4458cd8e61580f46fe6a5a1e87df0d0de48bfe9e4476624519d4edf363383ae832046cc9662416f2bafc580d019e4be3af419f739aef8341027dc5f1cfc03b141bfe6142f0a3436953359e64818a42d07839ba1bb94e2fdd4d428a6c062ad9ab072ef422863d6054d1ff734c8f0bb97a495b97bd29fc2ec1010a828b8edcdc52ff7c6d91b15a335a3d4121edb4897a89298f7e827062489426bff777f1400cb309d013b6f86286249ee3ee6e776c4ba621bdb69218e745ffc5482f57b7bc307630122fbae3bd1f59fccc23f8611df57937cd8814a9f2eca9e48d735466ba1243792a09c4fad3c6a25fe607b2f90240a975a73c30a9ed063b8e760a9688a178c0ee00e9fdc60d45a7d018e4c5c784f3dfe3331a10a23f5b5cc8eb3e44a4d92b98967d178dced1630f564a0058530bd8c2885a69d91b50b3b59cd4558743caf3717987da9b9a88e783fa64a5942600b5fb6c0273b69d88d6ed11199886ecdc97f4a0077c4fb39b9aaac34f19a1c7c9533197147ecdaf4f8cad2fa24f6a2777e1c812e643d2a070442db9f1a4a6bed07a0d1279d346d90d9c9dff57c25a7c039795d70a784ce971adb3e43390cb947cf136e417ba4aa32acf648821387f74e88205f85d62e417059ce54dfd233ad034825515d87a01960eedabd3e6fb00968e6abe7cc64bc3b193da6bfb38a718fa62f312aea35d923921be19e69051066b5d17686b2c79113f8530ecf6ca62909a6d0d14b55fa92514cc0957cb0583b97abe50acce7935f54a426310479d9dc739bd980435f6a7e4b075980c8a2fd8404b17de32ac94c79759323e80f5989fe85eba5c89334f9ff5948631e129f49ac466d18aa10d657720f4bd88e408a2b21992cc214cb952d98048659d7eb23e0f6c54551aa1f9d48db8a34b08e389a51c825c5baef5cee79cae557ca48a2cf481619c0a56dc79c95086ef4487267f88264d44cfcc2b7bf632a642310daea0fe36cac65708f7942c09b35f10cd55f233189fd2904396c767e19197eea291154477d05aa6f69d53e501667c17a217ea8d3aa38f06dbdfba22f297dd1a29dc93ad8b9be15ee974bcdc7dc8ccc2ce147080d37e02995bae5c10addf9b1c6b362323bc52e3e6a924dafac801d97718f58bf42d5bb4b28daab6175992595e3048cb8e501ee6a8fe56b22529382b9f4a6244cf8e602bb7377ccf203fd7a0473fb995d49026740bb0b24e46e79648a32a02a2fa3fb5f11222ccaf14a8d7f63f623289dec493147786dfb5464b42bae9817ead5d88838e2916415fd9dabae6ae5f5bae94348c4f544a86ef0b9d6409db167d6de0b0f28866db83e6591ea7f5fcffdb0cde273aab0bc24e057f2526bbe0b3a8eb6c01296930383b4c7abbc6ad920a5baba5e7c4b202b7e0fe892aae5a5f1ea72ee7c151b8eef6119a26fb4095d6488294cfba53eca2f0e3e210f6246ec220213e3b3991fe0addacd744243d353181f9ce46e90fe0533700b9fecfb17d7081bf244eb112c2ebb5b50bbc7fe4160c7c6761f0bb1f167e52df8c3afe7d11d10928e70a71fb8cf946d33e76545ebfcd027556b77aac16890a2762accaafb14d80048f55c075e59c58af7959ebd3b8dedbcbb4826cdd69de2780443c7d6fe64cadfd2519e8a8533cb2f0c34f8b6a8aa5cf108338dbdb96e3719439d25ee7363659b9af3d2fbb60411d3f25407d4bbc8ca6eccbc30dcd2502b0084956b43c2c734ce038a9ded794136144a6120a9fd6f92709950a4bdc9ea2ab877cb0c8994d6b4e1bc5453c23761a46a64eae788e61561b0ce8f5dc308a2a2bb7dbc8e2242387271260f993c88ebf940e25fc0f3fe40a4aa0cd6c0af07104f8406d864905352d9e6c10ad29ed6468122334e419dbe77d7c6b4b571b45d997dacb3bd347650bc67dd1de4948bb817f898e824fdc89f21779156a9e58564c4b99004b95226c2ebb8aebd0b5365a6c6ac1f61723a1728e400847322a094c5188fc86a7b6234125728e5ff1d93bf1ad938204fc4ab0bd4260f3a9ace1764e71b6cc06571c920d785550d8469da1a8cd60946038aa519397df00e2dface685323dd12761b1b7f7b0cb9afcd9eaaea8533bbeb1d32dcc1c1425f89bd474a3181f86d392cf5bd928543b3273b1a6ac19c78bc99fd6ba687f419aa27b911ff330bdf79aeea90442c7ec0fe1e6d6bbe123b2b77ed448386fe5a6a7c82b20961ff596f9ede4f59338fd00ae6ffd510f96ec9a29a2f531912775ccb2305289c26e8e31f5961cbdf004f21980a45f298c129f0a4800ad9aacd9583a25a399d28a2a2416515b3d0803eecdbeed48b566199f62877c5fa18a71ccb57866e9a805d599dece7705f0dfb43db7785d22a6119d835d9b2d867c09c84ab50fdfca26298d05e5e0cd5cdc49eb3bd7ce38fbdb300207bacdc33ee41f99998086f60ebb4799b460d4bd27aa4e902e5648e69bfbce2f739ea5a64f81d5cc023d65157c1066e1ef7833ad3001f68b5f5b6ecfcaaff00c0f33ac3f81fd3249cd1535a3decd8e4dfd5583073d8a4ac4160fc95c509fa08122a169f49cfd3ef8422f7c08fa9ac7c5281e4f3217ec51239b99e0f3f472e576f610652e672c02c2a9b4c5ab981d1a31b6fc1c9686d0139135223bfe7fd1c8d3d1a72656ab2f858d49cb95f682018e79f016749b51de99f42dd263e3ba634f80fc8e36d230b1d0436b9d76507fec2c851e95dea942bdea36cbd0df0c6ad18465bfee1d0cbe58e9ca5751ef215687fb3d88a0e3281f160e3d574537df5ac26f6b61ef616a1dccda0c551089d2d079038a75600980b1900ef31958f4c651df17782cb88c5614b6abefad02cac9b56a4c522ffcdb19c0d4f13e59329d2816d08475667226376dbe625da64e3c6fcd04df7ffc9dde5c1489bf085efaba6c723cbe4b5844b575ee8b093d891d672cdfecc3f7256b9caf7458813871d9d4fc2dcbcee04a57c37860c6a7769e96d269b5cd00a4f18d9c7ba9e93eb6daf7723f0f26bb1e84d2d7a78a1645f22de2058c154d9f6caa2c66297ce3fe6ae17b1c9de0f58dec4dde7a6c3624ea987e2888ffc814a739966f831fb2efc93cce8e5a7e67df4c31efa3322e2a989e50d991e42896cb20f2ff7f7ac716b4a814e857b54a6d8d01d7b0488a562f1969028545a071461a127f2b83d3886fdba2da78ffb469baa7b4c5d9f6074a0d4f5496cb6b4441a2a886c863a417c9840bc076c6ade04416d46be3b1d433738ce366f5f32b58ff701e83b4ee0acdf41eed09d01a8abf4149bc3019820b9539747da80545ae65157923122d16dc7d70052885d0bcbedbc91a080a4f92c2b5058cc420af081cf3ea85603a1b2143afa501653c5ff370bc455260026d2b221c3d9d61d8dc869d88e65c7d03645866ecfbda4c376309c8e81bb96b1e5b9353514b6ffbd8720557ae71c52175f1036ebbda57847dc544efe9b517d26801127cdc95ca3b265bce75ecf389f499aa6a82a5aa42b6166eed0d4779343ce848f2c5468576c9cc7d291dcad470a07677d4cb31d361890b454b4988d1d852a516795716813a4cd2c25d78d17c42ca14418b70e7bd7da66331a8cc3624cabca755f15ad4f3e06d3e10b4ad8854c71c7ceed59a4fd05db4261c4abed8d9d321f6eba0f509422ed31a5174e478c2c73eb568fb71f275cb5c5ced7a46f75abb2a9bc2cf513cd6ed266e6ce647272f09d8c795441c57128d460e8c808c1a0e4a7e9dc0c596f517e410404952fb1f045691bb5ffac406116c1944e0a4b9c95d47c604cfccebbc6ddd379ad0002be8a7761198ad639088d8307e04d32ef58daf7ca9d8d62a781a409e4383e937fd088231016666c9a964d1a11c584c6567ec6cafd022bc286696f8f1dd047c419909fb4f092e7472362262869c4734933870fca9e2ea6b0eddb9fd9cad23716428737c97d0f7bea7604bf5a9a5d971fe8fa1c8328836ca240409b7675aeab0e9d2cc6cd2ffc92caf4f66f1d0e017ecee950636126a10c1b104108f1c8d612118be9e33c83daca6d42afbbec4f4088dad7227af102f7f38ff0556eb81ed8fad381570394133a9145c1a92c44d8ab53d824d8c9cf57f8c17542e623460237c3a93fecbe50589c75e9046b46a324a24e2b44ebe6389043d46f9a7bcd37fd630b16fa236a1dbe60f6db8d7e81a3ddb5f658c9f446e94639cae3699ec2ea6afb4fb152939d58df287271cf4b73c34e66eaf5265a623de47b135522c7aaf9f550ffecdba5ce7e156397503c6a836e01257a74ecb6dec2e5683c49787efbd317249a4de7d2840a0ba2d40b774437109082434c7f620304e381a444bd3d3bf23ab6bd4929b244892c56a6e7e2710557770dd400711475604967e9bb737ac1f3eaa7b762f3cd9677e20f8e8a107984bf1f188b254426ac81918b8b323dc04444a178471fe87cd062d73df97673b62b941332f72f7b112ed5565ce72d7e962960f998baf47a58a8b686527621aecf6082ddfd9673888c62d7f26cbc21a874f7d54d99a1752be9860f59ed9300041dda17e9d8f7b5eec0ff06102b48a36de5261e37fb89166f97deb9cc7fdeb63639eeafb145895b307749ec1a293b27115f3aa8232ee05cc7ec3962788997a8979c14d6eed3c9d7d017d9f68ad6f211455bac0fa9a435bcd76f1c85c88b7c5bbaccf319dcf437c0502b25c1ecc51c166c5300c1260bf7baf0990e805705eb440244ffe5263761893319c3baaa74079b18edcf4942c6a4eba5e2760e8e7972f6208c91b5351dc5a6eb6c2a5d6e544313bd746e146a54dba389e3e97ce96691e6780c5f268407d2ae0baac03682f65d14ec9f73cf2746fa86f +MD = 3f1565488d626f2d9d7ffc30de2587749629c66e4ccf94e11b86512c82edbd79 + +Len = 81808 +Msg = bd0b7ebf1cd5aae10b4db5a9367e4ba54a72243d5900862d7fe60c39c618a71b4757e2c192046ab55037cddd270c8264de3d2af8c2f6153648e40862f3903d5c78ebaccf212989ac6fd30ed703187a20be655a74283507540e297087705b190c9af0645390ec10adaf4aff00924d3cbf33113c19526564711bddcc0f03224315f38d93b4a8f4069f5ac428c09b50cf2b836959500a2f3574b526a562758dc15dccebc05a31ea736cb6681280e8cc3b4af696387f163b8145252f81e88d439dce6c3173adf3755ffb0c5f44a63f678906d6c061103f3050ccb31eeb0915eddf4f1d883415b53ed334a3d1469c69c9c045690e5d694db6aaf1a61c682dd3328dc725188cfa41edd6ffc5e5a1c82e9be8f1f9a9b3f40877989c485082bc91bbb120cd0802c45d297144b8c3dc9455850af1ccb9eb17381821b5dfe3c01e152f52415d811fdbd29aabebc5947f67a82e2c2d2a658e3ca4444e24b4fcaabb273779121daa69a767e98cdc348013a8ed3f598d5dd523ca15a126d10fc4c9fb917b2d7b54ac6a91e6be1c004dae1fc1ed5f96f9ac32322953d7b1a43763a4471aa276644caeaaff15c0643d58472b197037ed595ea443c0268ff7867600c40589555cb54bd9b05abe986b7c9c72bf183e6f6595bc52dff95671015d12c3af9fa73be8569a54040ba7ee39a6625864261eae06950e658d3baa24d61354d5ef7b3cfd212f81482e789969d7a1f220a1abd99cd9429c04d6efeb517e8e845e0c031042102947ddb60b5bb14c5794f3ff0f37e2e582ad58417be19f02b8ea858c9deab3bb2a363a252bb76fa0ae90f905ba0028333e8a89564854b76977ce73f9b393f72c1b9488033f734bdc902d593b15fc15c95f7cbe9dbe0c40bbb57750daacd4b76be5aaeed6b158ec07e4b43c2986f352b1cbc91f9f45d0e300592e43b8f0739b7e6ec09528e82efb29926dc95876ac87f36cb9d5e3466a48414b3b741ae7384a6fa01ea5804cbd1f4b81a0294f4ef05b95289608f127a0168673e60c88f9ed6d46620b456745cc01739b958396748776a1e9a6df52523bf5d5b977338a8e58ab099bd19d643b2548acc79400b65239811e9633838d2d038f38053510a90e43adc235b6d6ff968e9dfbede4c8364ece241517831c2a22bf89b63f69cc6ce1741b78170318c0bed0a86af6ce029ed20d068d54ded1b298398e574f5b8e5c6fb39c3429ff8a301cb31000c89ad77745bfd08e348ecaacf73744241d537fff20cad8fd53f455d616fe7ec54c906e470fac2921a2da30a0a68253249199c7e05d7f78db7d28a03a157b99c26af7f099989cba4c83092b160fe2646094748d848c9c24d68fe494e582f00afe0b1984f247572b19c064e297991e1fde0c2ef97517e783f77170595ec3267881153c53dc86a4239041337eaaac002ba8e30d353a64293e450c14162d42e58c5472a984debd4d4ab8eebe26d8b04e31c6ff5a665bdd29fcc84618f4db65f4ee7e08a8408152184999af4c03a80dd1d83e4a5cb760e8b1668908c31aef961d4507c180af4baecec83b6d263da22c51c91aaa5d4ed2ef87248f3b5fb0f13c2639f8837bf8c639376ea70e95fb4e7396ab6209a353395974dde3c532e06abed8745838df447a5b1ae4e47cdf65354b67271c4e77ef1b8e40398b9085d0e186fb9b2fc7f5baee7d40d2fa9d4ca4de1d8de55261214902f6b3e291829fa8defb575986180583aa0572def25b26e0d14fd18c0b2ae98b75f9957dfc85ca91e985b353641357c6365d76b3d39db340974bf9c4509017dafdffadb5d5804cb38b8cd934d1a032ac1beb14f7a54a3dedb777cd37287ef2612170c42f235a6e354b788fa2d5a7e05de0191653704c0a0fb93d178b9bd9c34569b4a296eefd783fb2b29e457910a7000d4e426e3d8a62cd26049d68b18ad2b15d330f903f50b2fb47a0cec7c4c3d0bd2af162f113ec8f4f85332877737967cb8655d3c51d3b638f92abe6cdbfa8a2bdc06c3c83fb5ad8be5e34805fe88ecabb6b83b5df90a6d5231b3bb00270a86728562699cdfcbc84423a6e6dc918b242aa94237f83a0794ee06bb9f20be1a96526758740761efadc029f49b75d0ccb19c08a9ff75b569c17ed098b75931a94e6dda4f7fb2769fd2827182d25c2cbc29524d45de60fb9f878737d1b0140215230786bde9088e6abb0d82a8281a15d80fffffac71347d173b89a50d05eba00ca8b1d52a4c8409cedbb3e5fb091a1cbec9f78854348aaa7f62189091153aabfe341f5e2b16bf894ac92803e1f1e6b1cedbcb8fc3b4be0426af9693048a9b864879927a26e4157d4ce7ec84f38efa6586d9fe6e716e592abb589614ddc288bf99ddadb1b411106663cc53b1b61cefb8853912bcf3cde68e8c1199ae93598cc850c4d3bd393a5ac51dfaf0329038112b387d8af3a15fe090374f13c8bbbc12211be3a6c54cdc3f29e9e86480187d192e1f0bc99b3090d1e03b8586ebcd66b36a49ae99926553480546090312c5386241a788711bf80d24ef174985803ee5db04688a1e8cf95c0fd7b0f17e731d1686f67067f41e8e21642d490f723e86b6037ff70ab81d9f32e121c92619298683e1ccf83ee4fb597a1a1b4f3bef7f3b53c73d83a4f8dccd948663ed1b658ea7fd2d25bd51a63ae073b149a8734fbad34b90dd8cfd5342eaed4a2e9b46064ae80ea3a12e54ca65c9aac438c33a3589d509ead0815859d89da9b6d2523a6dc6cd24ffbfc9bcb3f46b9bbd595df51354c72b5fa6ef5a7f164c56570fb06cfe9adddc9be21dfe157f5ca3273ba7387bb4000c49d1457825748d7fa52724524b2f709202b8a9ad416ef37d7c405d88d120364943d02245ff8bc7821bc93c8ed60d5be1be93eb2eda3be6673717df4ab611d04ed833f4286fc4810a4566577721acc6483a145117427e9c1cd212ab029d0144a9717d39b3f8a740749c7f03bfa09666320faa89db1c9f9aeaf7d15f54e89729d59a0c616d2cac9c5d9b83cface542a23ba9d6e40ebb27597df2c45a964b1be64fcc7209a86e5ceb21bd0529e3725a00d19319fe16c09e5e326d7c2b5b17381094933ea11a5030c36d9b8390d7ba15187045f44687af7d2fa4c2695027ef542f3058c2c62754b09bad917f931e2f2c4fa45cf63bc5ea4c34419c0c577125f898afb7cec753fe64fa4e4969bf0b64081cfa22807c760374029554e5afbb7dadf36f2a934324afc665ec2dd25343db2116ce4133570c7d9d111c7775d78b38eca5fb1bb0b81e0b4d44e3b93a2e4c171fb3bd337f79fddb1ff6438e4d5d54fa2d46d015b7a4a473623de176017e888a4c7a2363d543ce8e8518a703dcafad33e85c8aa318775c8abda751dee8e28da74fe0bd6cc553031a550eb372945cf878c64d874e43deaab3b827a16e20e8b010927dd7c8d0061001182ef55504c3bb2b1f906271da191380da257cbe7a0fb448aca80ee275fb89d5471ff915bea299ed8ccb88a83bd52b74ac27301a34b60ea20705cf5437a1d4f95a581b4f2247e9127665766bf98166f196b3683be17a03cf2a0d9588957795ffca5df86bc0423d4c64e4c83783ac3a9a3230818e10ca48229e25fe1a000b215b2f97fcf629100afde0cfea957ac43ad0f755187b4335404ecbe5656317db2b9df29cb578bd3fd699729d4a003f57cc386e67999de93980964bd2680e3d45f93aabd29e6e0d3034c182c382f251d58333000e816083459dbb86637275f0fa3eb3c3e03430998f89e8a9d9120652dbe44344a07c6d91f7dc01141f1134d366508bd34c037ad2ac6a8140546396a2c953fbb4c3c70fa5bee0197d7bd0b534f8d335425c88a749253b2dfeac143dd22c76cec8ff0de12f092e571af01d81c6402b4299b830408d7890413d7690565173b13f09a8cd6cae753b6c85226424e7caed3651d596c0e014ee5d751a649ab14d97ceef57621ca4718bac346951192a078d83034b28c31198c9f53e2e0d5572089ef0f291887b918c83b8b15b50d8fd7480ab166f62a17262a78b0117f72104433b37bbdd9cf3f634d7f4746edfeee2906b2113e8d0f683010b91666ebe87e87bf11593920c3052f8ecf2062a7ab569e9a187741df03cd4026a9ac6a8dff4af11551d1265729b38473723ef04add703fed840cf954ceed5c54929ba4cb7f1c8a1ebb0d0be5caf16ae4b2c8783e5ce413e53ef8ed5537728f82ba0a9d0e2f9b5bc0963270326e65eac9d5e783eaf059226b8d62a5480701de986a22dbbfd8706be42c6bdda6dcba0b0a24c298b861777568bb72aa970645537eea0be8444243c273c3dedba9de96d690e7823f0f76e713c20e5283a8fce3f51c82ec4c0735bb6953a4b3f1a33aa25141664e0057f8510463cf27b8e5b186cc5a7aed8d6e7980676e1713a8fcb9858606e84f64f9b05c5131451cd2b5edd4e121193835e3d53bc4aa6326871c23e77dc8b7acf25b63b10116ba56587f77753b57a9f2cccd139489f1d213166b40723d6d198e33e6dcf81cf97400d2ad1812e2e67046d894f932bd2aaa03dd52d8cccede571dad02e2d8abc1bc40c8a69853dfb4b75ae39f50be683d341d6537b29d3804b880ea183cf9b558da3ec3d2bfdf39abc5567458dfdf9211b88a3583978e83c686e0728eb30442a516244b99545ff8b2e4631426703e44907e71d59f4f46b80b0764cbce0fa15b90b817e663217a25b05aa94971c98286a1cdfbcef1a26edfbd85357f3e1877060107411e98ecd9c78f704f9ea2b3545e2cef4fa7e358aefec3467a1648952f4de04cca7aa07e23e6366e7d981ff65cd61a2a97e8dc38ad1f05935c165350703815d0da82e39f018a8d9c5dc1515a41f551c7f81a440b14496bb30309c60fe3ce89d897bfca161bbc7c4114a0a0a7acc3ba0d9cc482998a85ddf096760b9b301722af2cb8bbad1883eba7cdbd75a444493d46ab6e00aab8da43903ee689bcfe1bc99cbff51f2aa1e8c214aea1361ab28ec3b84ca02506465085dc22e0a839f5e367e679ff5f565df2e9d1dfd34dd29d9a32ada8e35974dbef8b1c6becd0dcbe76e2d6815de1f9f5a9482689db2091ae76746be7be04be1fc03d984092696b01dc24b400970fdb1015c85ad44219228d296f3a30ba8eaabcca8497ca5bdbaf651e13c81d3650c3573f4fb7e78f9e4ce1bb0d64ab5d60015715466330ce8f709343995901c10b7b712ec683eb4a19d6523534308232e08a9baa6d429b74eb7633539db0d3c0aac908ea160707fcf1898a9ecee5dabe770f2d90df7d33d35888ec570616bcbc9476c17c258b642c8e2d2efec2ccde8b8d56b8cf865b1f753f706655bed1e43c314a46ebdd572962588ae95ef82db3208b29e270482688e206f44a58ac2972c8e90c3f3f25b27f26b76760c558508405d74e537a0f2495a017dd4065b8688ee824865381e4e68e01138d3e3bca7c77c3db8db4f5c29f6f39d8f2ef86cad462254a7e2bb804397d7ad4c529c836fab4e1feb0adea49dd3d35b3fd00c2cab71306c3bd6fec6cf4751a62d5c975841364e7a77de5608c27281a0fc41a22a057cc14f70bc625045e9d672585c8499c0caf5d40be055f72c458725311e6ac35fdb3d54f2fd86cb4c11eeb869fcb4d6630bccc3039b4efe5fef4c4e9aa0c6a6ff0f0d331f34ec864631f2eebe97d87cbc6b4bcdfb79b19cd1b259938573364377aac96061dd042fc8ec9b7bd2d8301b115beb3b5ff62e410641278a8e203a176e10fa4377605e16488440e653188c30266033b1adbb0599721e4e9a1112629126e40872ac696ad8599b7bb49be32d3a401abdb76112d7e4a9ac2748bae4104f56968c749d52aae450b4a46d39b293b812edd1c316a825d1116d5a2ce7fff3b051aaeeafb6a6aed8d2427386a9216037f35c184b3ae57fed5df44fad24d05d42cc83b7aa74ffe71462e73197569a131885d809d64a553677c3b380500dffeda50bd36ffb74a8d42566f596f5ee971cf83f042efad161fa2f073d949beff90525b3fc8ff9224bf69a730ffc48cda2fe457342e00f4cb63b717ce4e507573634634971904a0a53eed1fb88d9f67048279ee726d5ba28ac6acdb96c0a28e0420bdc30d50954994afd6a8512c89572e13952ff12685201cf08b231156c56f7a6fc0f0e8963bf5babd2d29410409c4228a4002fb8207d5498a5cd6893943829df756a372127c0ce00ef989d13ca716a68e824fd6a96a28d83c25de4490a42e356187c4f1ede3f6cc4a42b249fcebb583c764fecbc2368393adf0228b846eda09545b3bae4ef51b471a108bf16e5e0a81deedf822f6f14d4086c48aa53d2bf0e279dbf0f15e3ce418266cfc10b7877b677b2623236c25eda86eaafedce262d788780ecc02443fb709155dedf002ee71ff451568164d59cd930ea866769c9cf7c3f8fdb5282986fde08fec46d7751c550fe5c4b042c01654c90ec9aabc9260b85ba1ae94ac359a1f663e20ef0e38988d60023be1f0eee3ea111512b3f6ed3682171d2b52d68f028363c701d1dd74ea83ba4581e468fe48f734cb8d676cd4a6bdc0117cd5ee6046939fd597d28b519b9de4569da2f219cde3fbd941af657039d11e28a7073ccfefb6e10eebdb62f63245a8dc9a02d667fb172be736742be87626f908b6cf08058453f21a04d5a88c37e2cc807deb5b0f59f98f9c759c0465e6241959b014992a8dd49ba2eaa6a63a33db19e95047ca3a70f2eea10510390f0f3446c49ec0386592a0a24ea638a429ad9a57bf1bfd6b0fc66b0f9deeb9110d7bbc47f087ba2dde1c1fcfc53f71ea802d864eace4f586b7e5cabb39397ed688b226e58773eac0beb2b9ecb0bd3bbf683b07c556b51763595578ba1ded46cea73ad8e82e6b38392dddd6bfb6297d6d0960858665954b4a1e9cded4f012fb43939d3c188f758cdf5224de12808a1f3a8a236857828d79822e4463d15bb1847b7363b83c529ccefb560f39abb5e8086f140d190155a38954b0d56e7805d0c9bf7012b61e1fe5e6d560264f52fe4b2253cea5fe4c85e16308ccd56992977ab256b2349d849c5abcb599f289d103bc5430e17380ffbb4fefe6accebbe7b8b4278a6050d537740239e329fa4def6b42864c74ff07e49ef416357547cc3f118810a1a3efc6ff4de543a637c60473dfe6a0f1b0d2fcc1d7d8be3f52c9046249fd55e4a298d8a3d00cc348ebdf172606af8b65bd73c55f0d03d04a69dbcb18091bde9b86d373eda47ea20f6eccecd089a52df0c26acc86e97e359fe2058928f9eb930e7628ffa37143c644e815ed390fd06fdce74078fd1250d386e6cfa65bc0745d849b20e48ee164192e804381284139396f567c308e318194469dc28a7907bf22471c428a769ae882175fdd0f66c7e774f334a65effee1a5f292e659d4a75d2cc9d2217592344d7e845ad6b01bc48e206aeac466919f0211b75c1404895b3b741cfd526ba5c883a35019176beef6c33d9e9e3e5b9a4e0a1b27380dcf12468766b245cf713ea0e1850933385aecadce1d4eb040ab668659f0b6b91c002bd3d1530e6e012cd967d792143bc20391440f4defe353ec82d28250ea51c74e129da9e7a5b880051267d65905954cfc7943f75e1689e0857bad13aa3684a81f830e61830cd7d480662b8e5851c221bc013826bc47269f0cbd807e7b2fe426ead990a8c3a82e6725314d300e8d54f8b8c59b1de6f64bb7e8c4f723323ad2dc36a2eed0180c3ec06a20279bfa1cd02a8932e73d6c986bf3b02e7bb26debe330996b5387fe9d7b78d5af55028984964f83e5a705cbc1f9aae95678ac8cc797bc798f7920f5f086e8fe2b50046b6949d05f3a4517730797760ae998622d3252e85dabca4b7ca9c3a92a40a321ee1f5d4571bd6be300bda7cd7b343583bdc0b73ccc3cb158110dc422007bc8eba02b332741fb65e8e368bd19d0e2ea81bd0747322bbee8e751a10afc07392bb210217dee6650dda9999d49f3a25221dcb95a656122aebb79ad080a8fb5056625bc769003557a2d9591cfc0e3462e75f5215ea4321788b37f81a73565707ce2a713bf1c2e75c3f04d7a84d45152c4417b8368762d90e96b797e133e05efec3bc6a45f64a86dbaa031a230d6d64ea02ed06e2c7dcc152d4de800b066f989efcbf4eccc2c09a3eac7d2a7785adaa06e9884300f0d961ad0d55ba82352b8c4f43dc25ba9b4da9ec0d1b108afd2e6ee7c19177784b80428808c34d2c073bc27a5ebbf8f6ca193d4d9584d346bd1738f552afaa3220faeb498ed142f3c6c8c2851603ce68964bddc90c607b910c919198648be515b76fe45a6727a0beb8f915da335cb0f8490b12c83959115534c4ff38becc2f0b5706b6215b6c6f7427f742df7d70a58e2a8362b2e5159b797bd70c3d291b91fc49e7e8083248b7ff59e9d1febce4b51280d858efd83c24e52af3400f6d2012ced63b0275b365814697f84a9eb763e86c943579e7da77b181883f22165282ba6a442a8dd2a768d431284c362637934784aec04f03b36e4c35dfe43abba0ea91b8dbdb1086d6fcb9a8560c1d00041cd94215a161a92ac8fce9750910641effa0a0e57713f908c7379367618593e6a7a78f13013742092dca8594d72d7b956aee0ba8251e93057156daa472f847a5dcb751ee085a371647bcf182761866cdd283df6d0ebabc94a31e665568fd8408621372efdd51ee1abbdd15870d598f8ee068067c596edc7f05981dc26a1db2d8e2c3d85ea9a4d1dc3432d9edc4795ca03ca4661d2fc35b8c3ecbe832a1de39dd03cd6d8393dc472658c526fac4ff37ca8d3fe998b840a184f7c0b0ef34cb82df6e3b17a5c480b7becf9de2f8357387d57b4276341b6d162ed77d5b3f4c69f3a6ca15c00e63188b6d42c2f72d3f5eb38ab0b4f43b81d22354870cd26b1142f5f9c0614f04992c2afb593d4be2084625aed19d4df311f82ebcae75febaaaddf1a2f829acd08e45fc30bb15c85ebbb6440c890668a5f466a12ff5bec67640c24d671974bfba69ea69d4115255eb7e33786b7df62d9851a4e27504f111e5fa7a7311cc4b700953a4d9ae02fdd9cf7947299258758416513b5b568215c951018cc968b8b5a70773fab487371c3e53d679bf4ac08b55651cb2729a1733d5007c80b93386ba4cfaf274622757ba6bbfba51a25b5d4188ced99191086c521d3b94dfa93cdd62472bf79a4b560bdc485b4f583b8dd99e0599b1611f6a297a8949712f034966b680e2abf5d8dcfb8cbd6ebd15f0a8d9aab40ecba88486f6b301743afb2e23c8bddf67350c6f80ced1b2422c112a73086e7e7550f1272479066d0218c89292ac7f4d01be677a0b2db40f1dc3d252b70bf1491567c1720e5d7ab53c3220975dba05b0f96e8f5f46bf3bbc48aae2ce3c8d3cff3739a2cc0b4818c16ab18aa54e9956f2976c0b88f62d70a10b0ac908ca34558623ed1b9de2e3e779d4bc8f242bf27af923e1635be61e5ba7ad0b0d6629a846c821acb54e5cd5efc6c17cb57cbd6c7aafe5f42042dd3b03b478d43852209217ab799ef64541c6388e7b188715ccb05dfa25cec9a4a22c70b1b28ed233799ace1972ea68eb5960cbbb48b98a5820652bc42a96e6e8fe98aa87a4606171fa6775f955b993a86b48af33718748ab8034edf43d750078b927ba1c96736f746ca213326a32fee54129ece03da94877b5c5aa72a6939ebb9b82a75ad0ee83a396f2b1aef97e3108a1a98ba8f648122588bf6a26ad1748196c51792899fa2668420056544ac4b47b54709375e28b2f1bbecb35f89a2a86faf33b386d3bbfde2a36740a0ca52d10a422270c2e4b9b26c3229014d0b4f3e1c6f9e9ed13fc6436523bf5d5be51e1ccedd276febb779f7f847bb70e96449be0e54603a0012512b346192bc052970770bd2e047204afc0c3c590e72c3292490cc0a230571ffdf0df6f98bfd2b1bfc7847bfc7a6ff03a2679f02ac9758ce626ebbdd5181c55ce274135805914c1114a9191057ffe6962f8296c1104f18c885a0745a664f68bdede610198a08c6bd4b81f6611bc26576d5f5ba10d41a81bbf0ce8c1debceea9773ec839a93d44985239b462e8d9efa0a48298f7e628a31fd564149745c70a97df6ffd477bd7442ed1f3daed517d612d4f8a67d66360e981108b1531a32e543d5e988891d61792179a11186f155085e6b69e51a64e92822ab9a973f5c098d4843ee1f28182a53839f5b9f650fcfc62b320e7ddcf6d65770117e5b44d64ae9152c573c27d46283e7e2914fdf8ce26007dd78c93b98982cfed746862a0561893913d7680efec49aacc8049b4d05378682a21b6fbcc699092d8165a04555f7de227ec11b53e3aaf860d4080a43e539aa1a4478d9e71d738c8a946e223d6478687fe1b6de8d2f902da28b2e353ab9534b3d19038030e99227a484c28468ad6da89fc11b2a113f0ecac051e974b80e2eda79b46e0b20d78f5b09c7055f5d9d322f00b18076869e913068cccc71423026d84e9afac34d43c5a708ffa91b92b0805c4127694c63caa1fefa5039934febd5d52a215c510cdadf8c408310318e83b2c0ef8748242f4fdb970380d353577db651ab0be52ce5e9278b3f05fd49c78353ed6a75af965f9a8898f2d30c49ff8232ce3faf37cf7f1b581452dca2bcd44bee422067020b5b37336566cb56ef8e85e5bb568fb6b12eddcbc83a8ba3132b29ec6fcfdfd20bc8b2869cddde45acaaf549998e22046a7bad0d07449790e532b9c8b6b744b2102e78dc9fb6904b19cb5cd8f9550a8363ec0596621f94ee9b81881db7853a04a0e306cffe8f65f9af76191e5b39adc6260663e26909e80eaeadf1560298245c368cf8bb29c6d3b3e621d6742fba904f3941649b7cb21583b70ea20bf88ea82b5982ab28b20b7e1c56551194e73636810633840c2da6b1e01d29f6aa39d719e4826abab317bba995688636db225b14fe25432eceec3631a679968bab26f00e3a39bb93d4eb560aa1954bc2c16197c0390ef6d15e490f093924cacda94068097ef7fbb2f87d7905e3750c41e2156aaca43bc51834c49fcd3ad73d290f26ad70353581b4a86e732fbd805e30a7ce424ed234447fdcdf46e20de9644a574a4ef6ff8b04056f3f02dca23f982b9cfcbd3b3570eb54d0f9b2ec34d3e69e1c1baae23050e921b75f76b1341b607f4c1139e6608a20439bb45230424f2a90b82b7fe66a3fb7960b506d31e5ac4dc81fac56c4c5d899d8a79fb372a883b6ced5ea0c682fafe5def5b244d3295a9672823e927af7f4ae607f0c4517fa3a01a4dfe7feebd319fa68e0e5ac1981aef12b3e485b6d5956d497ac9a859499da91bf4095b5d607166bc0676af1799121d44e8e4a30107c87b2da9abaf38d19eded8aa283dfdb2e1dc081e3c2b377ba5bc6491cc4af08c40fbfa5e3fe2d45fcdc8b736032cb5fdaa88f0a008d60a86fa53dc7443836bae2475175f2d48163a52ee216241306d87f3f2dd5281b976043a6a135af2555ab39c71ee741ce9e6ac56d87ff48b510d9ae5a338fe50db643b8c8a710a80c8a5e4d278e667b4ce2dfb010f37b588987e7ca822676a1d44bd7419395e4e96e43489eb1167ff9efed1707a1ab36de10ca67563f7d45f8ffd67f7080242ecdcb2efea12c5d9038281bc53ea8159e43db66ecf3eabe5a44e0d4c0c826a85adf939bf4e6d1ba53c0760d4ec78cd93e1459cbed062c50403037c53fbaffb8f5996818aff249b3172d6a203824d85c82ea1c87fc2f7cd98425653630bb63cc9b85a933a4360cde66c974f305f90315f91f84297eb244c092aee996686c0b59991ee76b563493a2cf4f17043c96a5ac2d3f210f09412c9be83745643b2f4ef68aef932e5a606696cd08c0c2309038758bc383c7104e9cc21158f92e2d87b719fd524d0b056c0e20cc9112bba678240891372ce0185d0dd99a7e8562b3f7cc3a4cf175700b99e2e76a728d5ef2a0f0dbda248cc8a5def858e0326a90631206ee16479cfbc19c9d410327813aa9cd4775c2f6040f3d56f4b68eff2945bf48ff9bc5bf341ccbc685c4432aaecd303f605ce836531243578b89034f41e12d1f0ec9f7e2cb418eba44f796e656953a8a0407c66fda804c531536c9ad34f13106bd0f193cd3087eda53416af529110d3f8aecc9fd0ac7dcdc3a465e8382f46f92a2c1a637dbd030c929385bd196cf3cc26d927f8874576945633e4e8cac793d4528882b6e564748e93f52d606102e4da5349f637ca7bd86310894f60321ee3e80e6c9154ac2cc0bcd2e07660d25ccc46a7849f25405789821c2d0f19173c1c7e8461af047b1ed0de74dfc8841581915949148c8a92e07239a0a78ddb222a28dedcee448ffa408c3ca4778b95d2791d586281232e681f7bd0c580306dfbefed503f9cb8bed09cdc1d8832275cb04d568e1951ced8681a8d8eb23f5f994993551cd5f27357a63aa9cb4897059e58042642970ef4523ddb8ebc906c8425b41f4789c578dd222320d98c0d2e8b2672a674bb033ffc628d6a68a2868f06dae69aaae038b65ee9f05856a9ff8022bba53c2742866d50d101cd0188bd314d80840c686a55355f72b4ea066a4514322499cc291f481f5766400e43b65cd9c1df397e686c457c468618dcd3160872242af761619a70dd79ebf33514738c10cabeaaf692312f137dedc438a4f76f235e956700b7fb27301e26c1485e09755dd0e7827fce003c836a6f5f066053a3ae4a2d90b31389949eaee1535108be3e483b20671e0420935377d4914cf173cb9b4fb91b815d8de0b191e25057fadb1059733202dd1cda5e0b0be304143e9f1073d403af737d4f32f130f261631ca71219e0e5fac3fe76c2348d655d652f1e9abd43d1f58f5c17b3e5f1d82e7c566c6d0fea00f7d8933ce95567234748ac3a900103ec95dfe02d8a153d5e5eaa907048c4fa4da325c173fbf600e268c39d391ac87c1c366bf2d8e1097d4a99f5b2fdccbe7692a3b171651f9fc06d68e1ea646298162880397b62dd4a17658966a4592087c898a2858c587ed90f8bf0a77c038dfc39da1d546111a85f7577d4044ecc6ea7562746a7f895402b5503a81f395ec6794df8b2c18e2e6ad0fd4822d898a0dba48a0737219f648c1efa9e37500abc3399ba4bea89e8004a26199f1ce86b1b9108cbff1efb670c8a3966244642d767fce3e89b6ab559d171e83045693ead87b85a80d8a33b3ad76404025d7cfe89a54adf40b0dd4dc8e7079ea903b2e2482a7723135a6debff0b3f073410828b06bf45162851e9571c8c33d0ee9f9fda224df7eaeb4d25129ef146cb6507fff138fd140f094836dd3f051d0766e1d73025376037707972b9fed19ed7fe089c3906a6e0524c5b6de6189deeca799303ec3832d9930aa6fde709f372b365dc016a5704d0685753367b8f9bcea28f7bca1442848a84219b6ea4a69ee8e8044bd58c155d0dd894f738a38c46e4161063d5b22d769c941d216cf8bd1c28fd421cc0a827fabe2a69111c66f7e859ae6411cccde050374b66009fec37b35b7a86196cc475230ce7406789ccb8c754f2f44d556e435a82306400b087faaca9e83a087eebe71f1f9680c328deb82bfe6b26e11b9c3edca6cb80e847d2ef4f39cdc5b2a12265381ebf91eba1a3dd5e7fa06393c45fb91dcba420820bd3fee334b48fdf7b73d7b431ebdba79b2310a7fe19142df9bf9c661744ae94a59410b2c1220056b4e525dc82a0c6c1bf673a4da35f9f7561c5cfffb53290e7bc1d0b0209a180e1f58037f83669baffb476419998f96e34a5783a30cbf63043f974d91c34b87746e64df55078cb1f2b22590fd3026fe7316ce1c6418219f47004a3604869f04d4e2e53482b6e505d0bb3168a430c4a74365f0659790122463584b28acdd0cf6ac1759b16d3407fdc680db79c30db117c0926f1dc2171998d5b22a73df592df3667652b498e17e00409d8432ce49a4c677368aa3881f90630ab858c6306d7a81a08a40dc7a51bfc3eb8bdc321a56f849c3ccd3753e1c2f299ea5568e349c6b17c6bda497a60735af03b633e65bc823f852cffa21789f3e52fe33c44a5068882c559b0e548064883845b74bcdf71fc08890ba3f36bc0b5655a5de027918544a35e9acdeb1be1c1fd60e09546770b056410a0643036d030fc821fe9198f0d239dadf6db62da370752ee9270e215d4c4dd82b4e76362ff8b310ff2002387e74df61c357f536d5141099439ad9ba11262fa480fd793d696ef8c699ecd4b615ce939121e63c5bb7798abbc9cf476030e0743c879dac97adc8396f9ebf79b05b220ebf77a2fc0aef034bfcd84eb7d2410d9416bba980c361b70d625a1271b5b31199632118b4d2d063ccd2fb93db7ea5f037b9999bb64f299ddd5568704d24c23fdc12dab1d7221ffd85e4903902c3e45ab7abbe0e8d996a0f319f56637c8becef3f54f109039702432f9852a8de50908fac43755c9740a76d92c680667059a7c24b900078aaa03bd6f +MD = cd48c1ea614edc37b78d453b7cd9e78da1ad22abd50c5b55d77f3730a8fd9406 + +Len = 82600 +Msg = 224c89d45e2b75b31c291937806855cf11e78772bd69af301eb2d10efbf99b10129b4897140dc4edf214111f5738e90b7576a5b905355def897b51ffd56187e4cdc4b68d703e637916544a84f5f1ff01ea14d50877c5ff11084df5c27aa61a06dd319b5f79a79a7d10528c0f637ddfd9f729e0071901ddc1209086fff2b2999fca48bfb53830b12269759e68a8c2d1bc251d8f5df5d13e255baccd5d466b4fd61a73e935b3c2ef8fa8244a36ccaa1dd2fb58a8b3131e6c65400a8f857dbb83d45719e38af4439ded55c95621d81c0a420142f3b079ceadaa5710971f9f897cc008a1735a039d0363f8cb8bd3d3ffe135bf433afd31cb4a1c2927acd2b5bc83c3b675624ee6b6691a1a92b1f1c53debd2bec4434143fb8be23db79546c53ee005e8fc770da778173942869026b7bd6d42852bd725b548b7251b291b24daf6dbad269e7c404ec954e9f90fef17af67b2ac9ce2be519199180c4ce30614f9ccbce4f9c3378ee1936a52c695986fb82301398c4fc06cdfd5f4c0574f1ebd2ca8cad1e7d372a06abd9f9b318051d4d7d9a110dcdca51ea5e69468c4d42ac87a724e9d7a36f31df02f3cedc238e3ef1671db5b14f03411edb3402d1cd9f4dcec12906f3a5583ae7cd1886f022516677cd3f73fbdf236eabe243f37e6c842a28871d870ae96e9fb158bcd4a78afb1e411e83de65e4c74542121dbadaa08ddc258756ec75e62efabc34551a5ad3f7e10de96f4787f65b3f51c925ab7f1018de36407999ed2225b668ee75ea9273b4390eac6661ca8a5be75ba5f057f411b19adb210a31a933cf6d67f593a7d700dc90f3e61d9fb62745c7d0071242a25be4bca4d76d265281a88a19d832d4b101bd833e04d963d343a54b5f8aeffe32252e9df3a236fa71922d96ff14d81388dcf38a4da74e509a75f6fc4a9ffddd0c23fbc9782fdc107efbeb0e981a07c6e7190b00b34bc0d87424b75531b4c08198ced8c972eee12ae3155d6b65762681543c50910f40f58e18d672e09577ec6e708c5218a46dda8c4674e147f7b7d8b548cd80b5a24540c3c1019618f647b6062bf2d4216d0b1cd70191330ecf3d72e54d3307e92cb7372c354cad88c4a2d1eb1388eb9e3d654c6dad00bf2a4c95a983da0352a5ff253d29be0e359a9127b47fdfb514c9a5fadde2b139e245005ed13367c4fd76aa0de74ef3ccaad8ec34c256d91dcc4e374a45c8b6b348c97ad77e567ede64c5bddfb9fe5f1e99ce2658afe2a8199e8651c2187215f35f422cbe257f97d6252d9b1929da586a7ed4d011c1b5b53ee82c95f0ca916770922996615b114b42bb18c258cb458836b6a799deac429904558b6454d08913b19dea287f83bdf19a9311d40cf2d26719fd90b44dc40bcbf0534d5d7cdecbb34cbf2e835733d83344599340b445036d6aa03aefbdad93b6896dcce1c729fbce9882411786efe288d65b3788cd364b13df4b008ccccd5ce146018481c2568bbe2b93ec658d1c7f4ad734592cd65b3be2be5a7c1be9a7d9f49cbb2ece0cf8ee0a8c406aede84e0121bd51829d6e083862ae5b282d92c19d3923f70616f565a55c2134572116f91a85ff5f4e6ad2e1d31c15c97f3266af19574241c4fd2a4143fb80cc2b9fa7b22df0239a1715c35c9e679b21fbbac3d4c0b79e27c600f9f04c91319472c9f8edade8b0be671ebdfcecdd84f1282748b745d28e1593a303171185aa19a730a9102ce82d28c8f6012760f689b38f2843eafb409897a853c41a557150c8435436de2d66ff55c72c5b807d4b1ff59b1e63c4638a543a9ea3cb6e6accdc1cd1a5008c21fdbde1bc221b8ca433ae13c67a26f81108375ac10377a7d3f082a3dcc3b4cead04ef494297dfa07858baaaabdbebda7652c894ca13574b23951ae9cf00c20a1124e9f8e4de06606c12cc36b5a4410025e26e551423f8cccc22db5b131c96b310d6547d0d652e40e20a69247e83b4fd824fbf3839d5baa150126a745347c17e0e81a54236ddc5c68ca7f81060cac6272de3219aa5a94b6d31fc3ed20a42c0bf7ccf52e4fba84b65de642f76f709e3018b554c18d21ef984f448ced0a27e22fbde07f3e1c6454da339d745c4bbc19a311d1e852f5987639d1960a10cb65a56b7c4d3fea521454b032169f17629826a2a7597634aa6a307fa040c4be2a087da77a3abe9bb8718b21a47a4a927caacb16207587ce743d255306684360f1b572cb01d082ba17240113cff0fe34619d12e5c54fa28a1bba5e9e49370d5ce6168dbf573615ad37d4be6ffda14265d81703f8de0c4fcf6688e246b2d4ac1cd2d3d56bc495ffdee02acb1e74b49e8dabc0a537b3d716061e4fb9358967a8067c9453b89215c6b3dacd2f077c529a14a042008a8bd680950bb9ec51161a8784ae000d8c07ddf496ec67f2115fa3bf6380421cdab03114e5f56c8284a013d3fd2ebf0dd16d1610eee09d1d2663ce94e0126b020d68115a5ea41083b4717a13d9c57a5b6d0ae7a3237c19b62dd2fca2f42062b90dfc9edb68e04ef8cbcf78d07f3bd9fd4a2779349d8983c80df2546f0770d249c0b4ff1e6c70cee8b0033591595883fd4e0bf44bc3ce8258b00cff8582cc61bb10d75dacd01d375b4b55d8decee4216263007f71ff15bf70fd67246ccbfab716e4afdf0bfeaf3159840c893f46a65a35704c422cb824e217dc4decaa4cc27d622382aec55cee66eb4372723d2967d77d5c38660757c4925635047fc96cee5ba7b799f16254a17b1870cdb85fe0ef3f42110c138742bd7734f0d504519244f8ee873cd1684d921be9f366862ed1063b8d76107036e2d73ab9f608a3c8288efd3e7bb27661af87ec64b485023165747365738ca69b9fda83ed2de586b8959211a07b4507d4e14996939c7254f004008ed2f0c7dc3ee28df9d97eb4d2a84119dd1b6f3bac4a4da0c27e9174a5f3177435dcd50a3ba811b94584d1bcb22194ea09b73fdd8f4a5a53182c7cd41dc304960f8c0a9deb6096260ff60f464caaf6cf3c7cd473d55c702c3fa546dbe3e7352fc5e978c813eed79cfe381e9ac8cbcf8e1e731445a908f7f1e0f1d5ce20e71006fefb05d3dcdb3ee3ba51e8004f0c87f058a3e89a31d7576ba21913f8fb4cffe563cb9a056dae31c2ec4954c009f686bd921538bc9550f9622e24e7a09d9c69929b6020a7efef1a033c2949211d1034bd73cfedf1fefc439e2b1a380d2d62b6d64fc37d018927606c51f8b16cb3e2fab7a4dbed8294619ee64203f088d4234d7927fa9b5b64dd6bc6d4be73eaf5f53e75cd4122b77e0973031be8f659ba699843ca0f60fda799a3d86c8377e009d069bd950773d7e57c28be5dd032c806bbfefce109b62e7be3706cc250a59917fce458a437c72cf04027ddb0c48c1de1a2e76b13f1843808443a487d2ce55c48ff160ea3d808fcc8dfd628becbec9f72a5bb5909ceb2617543693546201f70c36366a63af31d9094e19f692ced3a97e24ce38e6ba827f2eb6965fbc5333b1eb1af3eea108fee307dcce966a5325e4d581fc5d2e088cd32913c9662a16d21ae3a6c05a0ceb46323ab2a1be8cfa34009fda7caed10758b6b9046653283d6b968852122911b6a64b345829fb75247c913f86b5aa6a47749e30f0f38321277ec93bb56ff85a0bad926735ddc9bd727dfb272f3dec64496efe4371d782bf757a0790394034405abaac55f423a5c06496b3093c8bc1697db66b42ffa8ee6d97ebe6086619695f146bfd82eb921c186b756d382715e5b464d949b202ee02861f52f916c4820410c9200a70b4af994007986e468762a60f8f462e3323fd8bc37c3d954dcce0911ff9756791c7e2a9b1b95e5aa6c608aec56d9b8d28cb7dd6902f0a6f1fe7dbaca725da79889dc1c9f80155a6fb7b6e5c608037fb2571e56f66a857daffbdc99370ceddd4a7bed3867d600cc797000a3b7b57a9dc9bafaad2c198945d7fb730f1f764eded81a37e4bdc65f2512c0c72b870547fc60ded549d3b404e8b125cb85495888948a8d448967f8394c80cf91e7fea27182beeb3692b3e6ff4d85a26b617e58a4e5a7fd9c902e1396290bc4e93ee33100192d08a6f09354805c9b9adb0c8621a9bb7991c55fdac07fa4fdc85498005dfda8f35daccb3ca992fd3a34a4ef29599ffd4672496033a6faa59c025c5d1bcb6f175913d08b778b3a18ac984d712fa98e9357c7b0fa006e1214329b88f6fd265e4ea7529a980aa3829537ef5ef95fb87f64f4b980940bbfccd905ba60c96e14d3342541935bbd98715c246160f1822f795a647043981a4232dc5d886d3f363dd4b31b09423a5a120f56bb15dac060b5855cf113806df69e4b06842d36c11c4b6cb2d0d12f9ea7bb6569433454cec1f3aa53e1cac07b677c1f3dc1d044b5e9e3a01a8dc2e3f06e387a7e06e556836d90f0257dbf8a2a3584b76a5b991d8465af7ad19a04e5967534577e4a5169472b355fbb0d1766e2275d1a769bb14b97585701c03fbebdfa8555024f589f1482c58a00fdd9fddc0b06b05047c94056558a833dcfc419f482654385db78f8e09c0136dad32897750d9a2462c72d6dc425c3da37e7703c1198dfa7e808f18454fda8e2f526440db850ab6257dc0e611f71ca04f6ee8c4f9ca3b92931c00d6af80d82355adc73882e3d01113770b644eea068aa82ce607c1e0bbc706aea12d3543556d810dffe305d3a63da0b6a6b3dba1a6574e46d34e91e37b0259a6e49e6f1dbee721f152d2ccfb09b65dab276740a46890923b550be24915defca34facc566910ac906847a50c086f59ac301f12668e9b12478cfb24b8808a7701236dac0b45852e6abf96c29aa8a85f89ccad3f5659653659dc7f43636c01654725e9af99d9149fb50160ac03fa0e1e7a6e6a226310ad1e608c2242acbd8860a421b8fd878b87a87a18ee8acf64683f86fe9ce414193c7164842d491cdce810210020bd5dc5a5f0c0eb888584508069b6648cacf2dddad86eace882392fe91ec5a86a18a4ee35208f6275c5ac251c45118882a384c44efb84ec9a138e1f52329902dd35e36d00dfef65ff71ce4b057a9f52c5f152376281b12c8c24a015edf3a3f6c33da2acced6e9dc6cb1732a03b168ab9fbde49cdc13fa5407def977800aed6d6257691266ac84af05af222add927579562fc35c8558694c516820aed41e7f4d04acc107920ac9c7129063b35dc4cda6337176e025f905fcb2eb9d23b1d85f80ef6331f31898be0adb7fbe2d49f078187ea8858f849dd64c748ff93ddee097ec6ba5423fc1fd6d61a7a2bc006abd7fb97fff79d069ede525de7bbb6325dd2f7bc29a7a5155e2deb4c021e49488d4e96f7e9cd80d9e90396d37d86bff4c782d143a6964929cee18ec6c25bf516bdcbe24c2a72dade92fda0ec8cd91781c589b9e1d3b856a5eca23eff4d6d3a0da7e06bf9449fd181372d1eed983b6365d258003b1376742621d07a7a05babe79e62ca283ca9d2b5e40025f7b12261a1d789e52a3f8691807190ccfbb7ddcc8f7f2f124702f133ee2382de0f9ad11b21512ad1fb0e4f8b8e53cb7bd28383c001458ee4042d46a92a9a9f0520dab86b1e95b04c5e68bbded2d0751c164a760ea4b8264a4707d2bbd20f00a111ba00d90069c45f3b93f211b6af36b5ae55dd3edfa0a04bf8d6bdf14c4b4dbaca82d1ed2f960e107ad81baca0bab85082ece1d81cc4a3efffe32fd301162d59337a523013e43569037f5e37fab7a0f47a56aa65c2edd83f44764fea5937488434eaac29141ae272bed0e43b2b6f99aa7edd5f6d39e3e642afd745bdbd784746b51906619b02bc329413d5409baa497976c72876e86e7701294d3ad4939fd2a49e50895e0e626cb16b8f59ccb23058694a5d2e0a39563082982156b8447590a8d7d75daad70399f72d8d9669d8c86f82e2e799b09362bbcfe69cc0f039c22a5948f6a9cd5cadec0dc055b79e753c36cd26ad91f15e5cc0f0f903a104d94e47bfdaf5954d07270cfa0e2fe2f3f1525451fff63d53030ae6ebbba1207d8be090e3731b4bb43f3ba3c6fd6340f1b4d37216530cc560e834d6ca12bd66e2b942adccfcb1f0896baf567a7738f81f268637250c3552a076a43895e89e9abbca3a45825effaf55f54ccf1c63f73206b0354c8510ba0c9a1521b352248de5912691000e7f4dae9f44dab6b7a8e9182cb8a6583e49e31ad62e72ef0baed26fea350f887749e315efc021b2503053cf1ba8a204599df7a4dc276095c76eb55f515e7b82c5a3080dcdd1e86cf1e280825be6f1f8ddf640d4356ab34d8f4c7edd4b0c9e99017406bec2dff98ca1a6b75772dc5bdbd23b04d0685d33be6a30741362a4417332a6234f55521ab969643f76eaf0a85541548cc0fd6aa7916002e0271d8f2ab86020a8e80f92149b4f0461084b8c9f10312820cd7cf8d96d79aa0a410435221193caddb37707afdb5e6f65351b170ab1aaa1071f6e6e8ffbbe103a8aa0fef026d48c09d5151ab2219b8b9324e4f9afe3b4a68bdd5b3692e3361cb82978535e9e2a4e75797131e714104132fe2d99564c5820f22fc9b7aacce9b7cb47159a32219ef86ac514b6145dc47a8cea7f61c9949df5853e42599e5ee0c7bd0cfd3d355937722ee1850f02a4bf1ce71161b8cf648c0e8c324d8438422235d49fbaa22febfda409f64ca679900a108c9b5b062f642b534f3373a03e20b7ea5929d433e882f877452cf2e141c9ac3fc3aff5b4b23b84ac15673a15799fa8cd93d1d15627c431d129aafe2a21f8ad90d475b82820919f0228f92d4cb168fcc5ccc03b75b659af9cfc99f8e8e2c516ea06162bcb4110823bce0fd1abae23bbbc4a1d99f75bea7abe072068824cd7ee37a2bad705dc5e374150d2b09b3777ee9957117444df1f9b219268d76227d73d5ef088423fbb23c6faf6695185160c9c4439c453c4099f19abe499cdef3b6c0b4738a9f6dfa408355007fc3ccf118bcda4385dbedfa313fc4647dad091503f61dac2457b4f60b48e2acdb5fae3f19c89a39e053dfd73224dd901536ab02df746ffd58357f5b7d1d96f8eba12277de6d928b1e359864375134b5b2d22b49b3dc39ebb8b143b70041c0993330c057f12c41cbb2099e2d9b356869d90800662b9df9fba86398855f761df244971e4bdc7536502e38679fd851e710fa30d0c4a12a2ea1b9c4f432c52afd98823c72b01ae8deccf55a6b3799374f4f98f502f1bf1146726f4ddd6bebc0fdf09eb9944116f7a99699d84f914845ff7a27bd2d79cfd3eff22b76ba8d3de87d9edc66c96b5b122551ae5a5b19501e8625390196d96df2798590c8221336022af7ddeca89b71c8e0628529345c5b1161d54f6af57d13ed71b111ca9a9a5e9e54a015b3a85de59c595dc0ed51b6c3df111edd41cff15c35771930e68a8f221da90c16545f2f110cfeb7e41f39d524c81246652e6cb2a16ae80270b4786e2b2086a04227138b9e8b5ee561275313e87cf3f069a9725d7dee432143bcfab3d4177c014bd49bffe8a7e88abaae441f995e24b16d1b674e5c3026ea4c58780cb79307b375c52f0879e32a0c731c8344c20c22ede22cc201d6f0f1b1dd2f76b54ff3a81b62816311ecbda1ef0cea772fccd78d2a6b3609144871323c889a8d59f7e9dbcd9481ceb89b97ce96fa90b63d4460b1db6acfa2e25b6176ded132127759c6213e7e4ec87911123eb8ceb7b6f9b3383f95536236187a221e1d497eac79e01906d2a260f6bfe7bd40b8ebc80fe183be94dcd79619231f33c67c43e8c1fe2562fb4e8340c01989e9931bf43a17814074401649c3f27ec526de707308e95094348cf6a366bb02723794565a96645573f9cfc63c742898067be49e3947893da6fe1a6f855b5df72b17d30c91557cda98af9281224f420b5d93675a192d3801e830521d9b871f842f1abd833b0fd78d290646cb8d8dc545350dd54885426c49d26b928578927625f8b0d26eaa2dfaf99fae4b09e0e828e2176bccce2fff9c71f0107a3b8ed5f859126ab02381285d8c87082dc0dec6f34e8f0dac6f5bed5f06cbcf67a450ea2c9a06a8b556328785d259945d94b9a2ab07069402b0bb740a94bfe8e95461477965301b705b40e3fa4791e358da0413b688187f4e16a12c45a866fd8dc03276754739037fc73e962178ba65ae156092bc6e3f200d25af8e969e3b8db38c36df96bc8c21120e8e46a1c25dabdbdb41981305d536be42591363f2b81a08fd011b5431a3c4f5b5b24de1d0d62650a019ac510b9523e011204334425712dcb7039234431a9f99413d446810ce55aae86b380cdbd968010687a68e09b318cd2ec0eccd7d5af15b3591a2bb0ea0ca5938b8d39cf32c839f9701a5e7c5369c58e8cb73762cdf6ad9f751e13126f7e4d9f574f787edf8f72a4720d9c7e17c0dee5975cec4fe227c842af09890f63e35abc3422c5428e9432f9b57aaa50addee1c157277404dcea6f834e03120f8de5d5d1682ea983057f81e0838a1158dd6cd509123e56eb83e6a94a9c33387ab62ac5c63c9aaba90df76741226458007112c3a511c91a6a9ec47e7fdfc282b8a65a3283f88f541c6ea4ed04db3207af2f77b27c9cf149ebf72bf60b60d87831251e24efe4342a44f02f1a11f619a7cce144aa78fadd6ad554c41ad4679ba34dfb1ea4f448b2b78a5b40f750bb43bfc14d20b48075b705907e37f1c33c368a75ef01b9796b308354767e8aa972d8d7f53cb4d67d53a4a2843d2b83c026cfb60fcb6f6c6796d7140b0a92dd0562ff77d075a81a55ddceca195849d9b46e8fad855512c4a411cff418df23f84ad4e128bac2a388f15b5d04b79938fa855d9df93d568fc919243fabe1bddae16210a6711be94d27391579d9c6c6a0ee1d392221a1959183ae174fbfd06c5fa2335e75db5bb34fff155248d0aea82bbe624a45ae17dcbefb4c3129ba4cb35943a70676ede2e851186e5cf571d7077f713eda2f2709f1be38d9bbf224bc5c71caa54fd32f1950fa7b2a79a644a9ab440f982f0714de9d3a423efdd5838a2d4e411483b12966b2f32f33f284d28d5b23a15792f6fefea8da22643ff8611def99afdee83b6432d8e33c6f0fb6a2e9e1c32e654b246cd1da45df32c98345dd69f91deac69667e68873abc817643c2603cebea9a2b8e6bffb24818fe29fb8326517922067edbae88b4b832554b829ad8ae95a0bdfdaf430d21e1165d4744184a99a16681266e6a2a912cc6d0cd8f0e53dbe087349b41f8c28dc959be529683bff2bb1aa0e29727aa9718e8a88ec1935e6f5d2c9296bee3bc50518195ee6b5bf2d726ccea45fe6da550fd263101d2d074b36c0f5c72aeaa571429fc787d5b179fb164ebc1c30cb2973959fe0eb92b3c23628d9e06b179932f43b348da71be3cf33c0605dbec3a7cfccaafee9637533cd6d7325705d5a854b1597de5307e3d32a9b17a997d141053428f7f666beeb3592b8c0ac8ee41c36569dffa601f0530af3fdc431539fd16ac04f238f3f451e4278e1b777234a8533bd551a927fa8930f901f6e007a6e9c60db08d7d15d4036e1e7aeff8d15d5bc04e60291adb577cc6a6bc9be1ff287ca6eed1cbbc5a6f75a9b47e941f64eceea313b6f0bfc8ba726a4eac55b95a532821d5e54767203b1b3f7015824bbb47d364222633189ea7fc84477daef6a79b7ecf39676b1e15cb8697d7bc451e33129c9c005a5ab5bb846dbd279cf1fa6585d317afd4a13189a52a3b51ef46f76ac1bca334bfe207adf4586d7586d9552296d793afb9a4521a3c8892852b2277d0c9c62215c3638ef45c4f2da7b7cf976d42febbaf92cee046162455d80c421fe3bf2b914a0159cc1d40a46634cc4f21840ebb0825dc9b7c7bb67fcdc0ef304042065f6937f63f4f87261abfa320c294257e9ef1a913948749821d92e66077894a33f422761e7e79d090f4928951e46fb0070d10bfb444812e2d601daeec827b8acc6c456ae6a1eb6805d4774ddc0f04c23ca7edb05b260aa80cf9f6810feb6772344a5abceb4414ebf93ce6773bbcf3ba93d1d15164a37435a54d9613370d0daf0ff0cab298df76aaef90587bdd68cd37812d73e95d576e558acd74cbee71be7fc4022e027bde81435d7155f24dbcf197991d3e0ec1cc4986221c2b11b2b3fa82d4e0ed1310bbd533c74257411903f1794013a8282e4ca6560f9c218b104e5256c73f906ad401e30ab195e50eabf85d4b2ac33adbff82f533a7dfe0ae83ab565a2f50b080524b2b16a0ee87a182e4958b9d8e7e80b1f9c6bd8f59f0e28945670b51d6b5e9f7f22e1619bea7a04a632ac93ce7dbbce20b9b422a9ccadd9db714e8f334290e51915c579088cd915eee8d726d61eae70c42d3601e0ae6e63d7ad08167fb7273dba3467989cf81eb2d014e15c37f24a59d3a1f95be46dd92f50b3a43448f3aa112927cea7a053d145125ed31b3b2016f215bc061afb3076a30e2a2dd0d81ea1c82f95028f5cc87a357d6db44d28d19ba1512764246e1fce28d8bba8d1755f94ca94270c36187ca2ead9ea8cd9472c5fcf51891b6385646827780e1f2168de0c7f2084f3861c9ad0ccee7c63a7e05aece5db8b34bd8724cc06b4ca99a7f9c4914f9a54bf66af488d4383cc429f3b82ca49b8d5b61cbe8a832f55971f4b6f39a9a2cc4178bd1bae60b7628130a99fcd7f65b00ea96770bb1408231fb8f51464dee07cf12775a6f6d190514436ad566395a08ade1586e6e207fbe5076c8d2e6eb771730cd4759945683619bd5b93a66b946110ef03606825e56e65fa43fb067ebcbd793b85a53cc6ae118293a743d80d021208e67adf3dac35cb699e4627e4bd762d562644edd69e2a89536f22a53373691a3b6e83eaafa07f79ba9b7cfa0f536c27d1741835b1f8650756f8d5a201c250e1712d256904294ce0209aee5ad1672614b3cd0a6513fae5f151d7c720882540cf71cb6845856e22686243a23070212d5dc4db206545cc34b10db3000812c2c04c05f154647a988c794a3da26535aa0868cc43641d8f97daad52358943e5c158c0f347f2af2bce0f7b9e31f6df682a3f9f93b0de7638835d4fe70569b8494b90930474490edf3935d627c6a48851c85b69e0c895568ab747fe96caa84e8888f12d0021616ae00185f2ada5b64738ade32d7d3391a7cb5c1f21252c4fefe99f02f6aff543a9744d8738f875330364015f55309ada4f44996e225dd56582b3b84b57d999f6b5e445c40ecfdf24a61eeb5848c2a579383d97bb68066af2ee2ffd55b645b482747813c3ddfb8b9017ae93556efbfb7548fd7d8e5be896ff1da594a77cbceff0d077dc0c0e45207f3e5c22de2fa245d669ce746f63caff92f65ca5ca1206f247b02bcb28077247fa0370c07bf3812aa482f6a4e7e8764db6619e5944deeb648ffbda059e324da7074e3194b5225e53e87abe347d52b2297046b1d79f4a33edd19bcdb5f6f69de9b107e8c713240267aa3b6e4dba09473bca8dde4862bda53614774c01b9ba29b4fd16dd801e61350ff0ac4e162575fd2acb1f6dd4169f0ae760779e116ee8bab1f56358e85c42bef3c4b5a6b846ff9b9e7be2a6a242572aa8bd830d0e9de71887a0d7a127572d67ba2d3ebd5aa50deb41e3bfd1db6e4fcd1f3483df20cf1f0bdf0658ff64978bf60d342fdc25cb09b3b80a9e35a623eebbf7cc5f5d6e8af85b6130cfbcc8a2c53493df704b413f59bcaef9681b2ce79cbbd68effcf2159dacfb425251e7a0241e9f538ea52d58967cec9b603cb9545c19765804c7d60c12d3181ed406ea23f69ddda478339093299b1b14b598d08c2c5154bac2cae544c59476f910af36adfa4d7eb13244706c1592c0fbf51a9ade811fe301a88ac2581c6da27186af7f86c59a1d0a4b6c5f4be0e088b1bd266ad3e0b19bed149bdfae8dcb1508a47c0746ef20130021ffbfbb11f0dcc66c60e304c1c309bd9552afb0a049693f08b97076bd6c0b33649314123f6037ba814e75d9bac096f3a963b526ea44f98511dc4d9ed6da602471aaff19cfab23feaa43a5db2246ee3fcf337249d26a506b5e58f117b1f7ac53d7cbc31a293e2c1335e4e5819ea259e2853689c1df0608624cb40d79e5406a32056a229bf295aa98b2a6d755968f649c6a014df786c48bfa7b71e55dc741045f98fa7037a24e39efaf0dddcf905ab8cdcc184183500245a459172b0c0e76153cf1114e45bed45488998e7b681280a0e749e006ddd16befe07418413cf15c174abc331f6ebea48503f0ad32b7a3bdd78951fcf06f715dc54f3af9ca49367f750948d4561b184b35e252ee9626ba5ea71482c3b0c0b65470314c4028b9343cd9092579a4d3623501941ec7184dccefaa294ad8aa7a26ec7b46f66fdf1571209dcad0976e10030e52a9d2db2b8551ed4b3818a05fe4397240f0e7ed7fe683d74dbee8c224599113b3841d7f5275ffd424b17abf43a764a25bbf8f5d6d94d2ad6365cc6e6a289301aec33d482f881d30a125ff89f82c3ef936135b143ab8e43f79500a0092056f44aee7d0aa1544408f5b2605a4dffb3ec36a8ce9c669bb4ef9e9ee002d5e68ac492e527639a632f04cbd022b748d9cdaad639ca9d86d2469595fc06d5901dac0abb7a37c6b44cca2f5417aef9d63799913bbb319bec77cc9fa2557aff83ec452d8e54b71a38389df2572c0b064041a00a2cd70b80e1b3ce748e52426af67cdc95d01cae496e4e31b39eba41c8ce21697b73356133abaed57c209a68fc30f4f9aa4c79253a9eb70ddbef675925c7fc7d4dd67c3a9c928f681f22d6f49f7b7d25d3c91423d5109ab9d313db5a0775fd62e91e559fa3e07f10c55aadec3a1d3fe67b0e94b0020c20be02d2bf4c551e49a2b513679730dba554d692c85ab55f61c707e4a2d4a9d971a3cff3bb38f70b0bc51b7c5b2a2bcd2abcba90ce45f8890c4de013e698b2c0b4f0a4407625d48469518222d8607cfc35d0d91d68b6eae367026e6307030509122ee87f991bd6d08bd052ce87420bb1ef199c003eb475b59b6d199cae1e8bfcb2e40279cb22e4399ac9f2460fd7c0337f1e6903f7478046cf164a8582f02ae0bd9a5cf6b543e605bec5cc521a2884cc0e67a9ec3b77f4df2c8667e72c81cbff5ad85dbeff85c57d1e4b47bc4d3b3dc2c47dc584b44db7c8da44da8a53d9579fb2276d9850f167e9e3e3cb4b521ad55ec8e7239308d0b24900d80936a001b409ec0ef44d508db5913415c0c6d1cd32e8432d2de1df09cdaac6cb5eb3ba00cc8531165aa6a86397bc3a6a8ff6715a3ea85cd84a35e2fef13255a43fc84bde855aa9c50868007bf6b41d699ea3dbcbdfe53c6fe158b8b9042ad5eb163ff8a3c9d27ba6645effdbb8bf049b5694b728ffe90a7a5c130a42efda6e294ade6b587f33d03ed74f4e8dc72617861f93ac7785faef82222c809f9b8a46e4436e4c058fc6cf17ca029599093180b4626662c25961130e9b6bc1daef8288a769b642b0e0d3a1b8a3407b05682764ad85d6821063669da62f9a76fbd2095af72480f6635ca26da9ccd1a8dbcb52eef7f2abb46a8b50b6d2467f46082e69e45edc921025ea7a5c73ab7dc52319f8431c0fad9fd7b969851b48e4da0beae84f63f9b537ff72a5969daa0c7ae33c628ea446a4ec5fd5f733089d8fd90beecfc38fe3b113f7dd6942af2f456e251bd8f515fe57420ac743e722ad48ec1122666768024e4d18110f8831a4f14af09ea1a0f99e8f4ae17795caefe1d9bb246ef46478bf548d67f7de91ac70d8b54dad07b8d79014acebcd3504f99f09ed4cbac3e247808a7aee772085a8fbc25842305065383bae0f30b26abcc8509f2b91ee19085baeb9bdb47a1b8cabad77dada0fc5cea307251bb90c7d1ae25d641cfcf23ffe3eb2a9fec1e619cc3feebee51a32ae1ca05c40798dc5b647d12c206994ae7ded78f222e41ea56070eb26611e0c825376b7a2c8d1b4c35d6b1d279ab9620a1afd8fd8ec17d29d389e38bd262fb7e5fb05714186ca37f0baad4cb59cb56cef60550dcbce40e5b8eb7eac1bd6c02344f0f155a13f0d1d321536e83dec05bc43951e7a32920760dcc03ad1a8397859887861ec2bbe426e73b52e792953505af0027f5c77fe134af3fef72fcd16006097dc7dbc45ca10339ae3bc85e0993e4cdcefa13d01db0dabe4eee04cf036ff405b646f4f582a1f738fe70896ca86789cf1a3aba438f09c8b97d81ab27b621e02bb575c2dcda718363a093b334fe2a6521568c61a840769f3f404d0e9d46005ad9eff6fdc0a09a38483917de5d774707432841a264de61beae3b9287765f85b49eea2cde67918676652c6f532ca057c0c2f40ce50fb565b794c404ae694f4c9df9289a1d3819b0de38ff1cca5905d7521f4e40b20f61fd1a717e15fbecb1bf67572fc1129895c3c04225a29c3914401bc69b8f81fa709247c2ce48f8571348b1676424572fb219dd0f34935163682c8e47604bed474dcfd00739101c5ed082fc786a566353eb3d84fea061825e5de73a1030f84c7c65f033cd530de05a95f8b928a6b9cfbbada9489f0d8f9780722aafbf8227381065bdf3738084dce0c00467e6add0e4bd75d7987eb090098051414fb3d85b3899a9938f9866277a77eb50993 +MD = 5c55e2d2053f20f7d95c7173930fd13c647df98e7a1e2c0ff17f2034f0397062 + +Len = 83392 +Msg = 2d8e2174c992cc8a7bd8234c254daf2a430b703670cf7f362cadf2f7dc0200e412ab66d60f74082e86d3dc22a3d704544c5b3aa9a77f7158dc59b9411ce76481e2486743782c03d8be8aa40b279109ae04e0a57905f94515fcf3f473e5701b6224cfed610da302b1a96342afb7630561f202794f9225439415e569343f856fb060a7c0d8d5bf50e1d1c780b75e3542949e2a7dd257ecb3feae96e12d330ea6931e38a851d869348fbe1f24cb21ef067091be7aab5b34dc7a506e2306c8f30932e7ea6d741f8af5e4f6d1f7920a799a1d52283881a6e7073182d5f966071ce0b64225d6e8b108dc070347c1b520bb46c269ce7ffd41eb7c4acc3329f5f6727346b851ac5697cd31206de74adb6b9d51885f1a17c7332a83eeb6f07c5ca0db090bd0d6b765d7bf3c59ba1b59adf4080596bb72c786848a6445c974ba430a40ec2d121cbfbe7bc844d8744ab8d3c2e2a815054058e23df566768c28ab513e8a62d3068c8c088acf93c522db2df4dd15832cc6eb93856552d2aa8872162f439fb425358ce5ec0dbb6f494d3881b84e87de0484db3d140489f00843bbc58521692a4c268594120b76218c7cc87cc91c2201c4ca78213a238108b9476c7efae0cf0b7061e05f218ce7f0b537f3e5cc4fcc33951d2a069dc82462e41ceb0a3689b8a1b86f030fc299f626ec0721866cf06fbd9f0759b3e5fe5946b248a231e2240e324dd7586c9c388b0a5b72ba254f06f2e7090f6df1bbca08fb4b55f7baa6b7b8075721453d58748ee32702268b1d993df9fcbece88c73619cad6cb546f294c9e68fdd6344c9d52e7fa7b3fce807fb2383b9f9ae440b04975fb7b30201614eaa89c677d8c5f14dc7f977db018cb1c57cbf51b2d18e11e0b02d6640ec3780e9abeedbe9eb53f64193c0155dd6d369e93de6e97ffd032bb85a9a2b6eca55dc063c8a12ac117b4361107822c4e3687aa6b59ef3c9675fc2cbe53a99c532e8dd14dae01d26f1a8532cdc9602a8cd987ebe924c0317c70071cbee6313ccac6cfea605855df2f267cff5468e4761ec0fe061427299f39271b318e4c83bed9d5ecb3a5aee5788aa35f46aece56398c51b4a6f44b72ae53040013356be74b08c3add32399f8c607f9f7aee4e1fe9a5ff670719276e285546e7d6bbb2da40be0f8d7f3e2ffd8f12e900ce0fd8b23c21e16fc0ff591c24dc4cd5ce129780425e8dc35baebcacb2087d0668301b20fd851181e2925855a2d2988631c86364dc1a8d78ed145e01a7b9b22cc40f940080580669f672b38f24e0d095bc5da4ec809a952a9dff82b0d2bf1ec07bfec1c5771346746700e94d2d8f7b70b832ea8bd2372b34f8d0d91eb581197e0a7e22e4443f483ddedd68042f270fa3dff892c74378c6448838bfcfe29848c1ca1e35e16a449222a858ce389c4ff3ab7e1f3c2346e7dcb5c687a538cc7d1328654f89417bbbaacf7e137a7f0772cdf42d0745247efcf5253e5e37ede5a80f0e56928b88db1cf890aa8dfb3bf337f51a67415c4f3e30960f4a1cd643c091a3000877cb2c1ad10222b838cef3e1f81f9ab76dd008172b45c084540efedfc2659a057fa6afbd806dd241a4743b464b93d197ed5ee39c357b0577844063b5c2cd38d80acc983593823bc1417976b29af86b733037762ff7ac3a9e3e2916c51b4058fab9ab5a0592e5dba1a05d3a997ec3d4e3e7181454da6fdc62d2179c90247596e80cb179b0071f1e7d318dfb7d6f7c8a64627f52bd661c676ff0aa49a986c36f1a647d8bc7588490be858a3dd0d589187f42bbc5ac236868001a3fb273aac04e2c616de4be1fbcbee00cd08626598feb9f087bc1b38aaa5addaf666b7118e2c07874113906b53e157c480f490053e7903e143dfb560478bc5330bce94459a142892ce5ed33c17f20fdb7850ad15d2692f70650c726394a190b3e81904fd58250f8ec8a65b7bcf65dfefbd0502bfdd360344f72b9869194dd5039731506151c7832434d5715104a48da558fad729e6474806002370995ff85eca20fcc09a0c634bfc1cd25de63c16e1a75016747b7506c55d89de421ced0bf1b189649bd0115f30bd878567610223a59dad4320de12da44f29943561a4bec5760dc502b2ae925fa107ed6d7ebdb339f2e7868247a462b8b6c383af3ba0205587e21a7b6d11b1b719c08adf4ab51ae9803b86cc876986264746eab622499bdbbb35e5385ed2fab5c0a2df207caebfd59c4753954fa91e595b2447eec81987b4aa99d3be0a5ae3c8501f58d586f3286a718b7b61030b71de6cdc19bd7f988a9cb05e5470e211f35b22a69662fc3acb24da787cb443e9572216eeeeb6bb3f0ae07723f5f598a0a00ac2d9066d4eee3e9111aec60374cb04d0c3cd154f2d858f2c696b16b0708f7043bb173738e175f94bd19ef5d3283921471e075bfb28f48ddcf19465361c26fa9265e1876a766a619174b97aa7d0ac2311601df15f40149d7eca403ffafe1f95737dd8958650442e2e859ec30600ac80ac348193c0055e248e3dff258398c1e7634d6ceff1119bb55f7eaf6d523ab2d09425c2a1e1eb49c987d711a4446ec656ee6f0ed55f2cc97dc0ea7be820d1478945ae71aa29646fe2f820383ac202956a815d4f041524660def3384b20676e3115d28ef1afaf329075ba3c36790d6a798a892adeaa77af9dc36f44a59579e0e0f373fbb82fb3a1dad3edc53a9156d7577d0999c07aaa2ed7f24a73d5cb8b930e9605d67709e8ba65afe24597de439977ea5fc99d9833eb95d54c6fe2a8e5af426650c6342597a6b872626556471bd8613751637dec5a0f5fd33dddd416cf5b05cb1b74f96b078c5b8535cd7eb328bb9ecea80f695e67c2bd54e468b4fc90bfde2d3088cdc38295d74e2324170cb06bb5152b7467d6a12b38c00ab68941710455f455a9b9154ee9b337f4122a39fc102e76a43b823c52735780776f5bcfba52f288537fc349b4af77a76f41bd2254d19257d90bbf78c0c1a3faf33c328db3d03e51f1b3f647fc10ac065d56dbafffd66822948d2872333ea39746c51763a3a7c0b8f9ed57f76e33d9bb86fc89c84748383e9b69c413f512dfbf37b11139d4fe002331d4f04152418630b2d9d155724f8b13b6469b414d64dfdb90a829f78cfe87fb6311c80eef613bcca995ba3ec912e709afccb6e5825c2c511754668614cfdca9554ce7448ebc81f732d94c6b94bad7884da41ce8dd244d8b955ad0ccb4988893d02c56cd7779df19174d90c41b6ee0f85776d530a6e1caefd1656fb2b38211239b591c8ff2c1de9a1e988d32a5578cc196e9eaa725be2ce7951b4c205bb401c0807c417447bc04e310624c9b7c9c624bd2a66234a1e1f9daa7246efff256dfd1453dce63bd91dc5ab455d3e9e667eaffd25545be6472bc30d029dd35c19234c0b343ca439d69eb68d4172c022cddad43609d9c2fb49afa50d8d2a2ac108e87f492373dfe2f6bbb7536505fd09628328042266e6eda803da487c6c44a277260d5aac02f7bbbc0d3eaa3a972396b70011f4199c3631e4e0c93a5ae4bf94d6747cbc287a9a2898fbb2de3c96f27f5dca386259ea3f6c729f085f93140a0cb95c53ea433b25be101fca8be5a5d817a959f1fb6dc170f1f3b70e24cf8aa27e9236196166d538e0a3e1dc2fc01452f43c37d51bcfc26966cac141366aa9175ef39a43be1dd93234d6da6e264682e18988cc683fea5d973f7a4647e0ff0fd7425011596cd2a7a02f2b61f72c0372026c01b011f4580378e084ae98c0f72f70bd3a03c0da1fd1014414211d9d61624400596b68c593548cfe6c62aa52dd786224041a10927fd5e3f8139047f6eab404ead266e32026b141fdb41af3232c8b3a2b50acdf325d36b6cfcc37ecc52a17e3901f2af7908caa4642de30199e7ec85717a23473164263f84f8060928499ee6e7492304c932fcff8825d3a74411ec0478d7b5972dac9fe36dbe2d2cfb1a4a7f41cde0f28a49a62d710b3a29997b6f389f14e8464dc4e65e11965e70ad8e4f512fd452032416733709273f1002ec1e2acf78e3dbfb76a2b856c7c15ba66d52649aa8a0beff5e082436c00be3e62ba1e1ee4ccfde9e887bfa269b80774e7ffec1688ff3ab83ec10fce220c52aad019f65e5d8d3d79dc31b2b6858c04c0e8bf86f83d27353198731c7f48d966ebe36c0bf9d64184f62ef27530447ac604c5beb76d1b9473d27f6138e5450a6358392adf6fd38c6ce54d44a7ae1b0693e71b57ddf3c8b98f117025f59eab11c0a63dd0e12ec9c04dadb392aa9e9db226be66256b1ab928df84f73bd2e9ef72072c6de8a1c54d7fafd5fe86fe8030ffd70122a1ff405144fd93911d417586cdcf7145eca1b1c32d1be48a7c23d179622d65cd480b0345a051c3ba34d1b00567520b62576172cf5b1a5ff3fcbb20eb6ba252e2a20ee1facd84abff3cf427efe167512fb35186c68c13bea78314eceb8ede3eff2a8b6ae51f0ea2cc70395baace57f91a8af27c4d22a0772199c1940e4e29a06f5bf0ec9937484eae8911b9ca80ac59bf38d4b1c7d1392ffecb61c4c81c2d1ddfb0e0058b88da1611e20dd0d39aed099a5778d5cafa562fab7245edbd9b411dbcc3d93430962c8f93058e1f3a8f926f18614f36cb10801c94391e7d332e1e1682ff3cf72ce1c811ae8e331383e12510d5e0d8834cb63f7d658a3c01ed571c9ecedd8bdce4fe2542c0c66d5c24022d953f509519c44deca88bd02f0a20a8b51cfce95643dd3ddca97658cd37bf950442d13b1588d66a304463c577f491857027a9ad2cda8a4346ac3bbfa3549b0c51c027fada4ed77d72c7a9b4a76f949fe63531936fef80810bc18d65b0316aca8e83a02a43da6c0a5cb8ba382dc9ce3a8fdc3136a0113489949ff7d5543c93622313d643f2c9e893368e11ca8b9192f7c56334f16dee3acf698de7a90ff4a965b7e726d2578bf1aa98be4ce63165875a3f80996e19b4f7b50321e93b53e81147a5743e4fe29efba30bdfc815cfa41fd456bafb073423effce9d28916c0956f8a8441793744818b2f08491fc3b6dbc0e88358b6575da9a7e9963633b5c67b1890cce57402ddb214b106b0b08a777b1f197e0077d8f6c4a41d80b365b2e607a10cf7c69b4d1edf2cab8f7d26d482108ef98f489bf68ff3690b41e0bb78afc99d518d7b6b70983737a12b24ef3c772a94eb4f77bf4a99b46b3552349191644f6201066a6117da78ca24323e761cc737c56127344e4f94862f1e2a257477d3f7939deb1a289d460258976d20681fe2a6a51dbef4c57010f729384249f0965f50b67ac4010e8b6b72678d148111906a1598536f4fb1569f75ee162308829776f92f49f9c59f6cdb277b77c0c72f28be0323b4c09b9e5d8090e23a54e7a6d5ab4f726e14ce67bbe5c008ea0a68fd436eddebb44b6ee91f64c6aa17406dd9fb6cc23469ad81e3f34baaa45659fd287afd2444d478302df6cc85ba3f8e11a8535c0fd9bf1c96809d5d65b23f27ea2d29d974b397df95d98e285c770586697e87d976c6f0fa52ea349b7fc7170cb667ea942ddc60d9f6784ff8c9851bd1ebd8f36595a081cf7d7d339657678060f88537adde13e20fd896a6ce4b48e4f8ff444090faeaf3f44cb624de9af7dddd06f19b96f3ee7dd9c2913d195056f3543a5cd9dc050aca01671182c4a91cb1c9983980d01de0a6d03b148d4a8713b98c236f39c74274768f433bc7f9003a9ecef2c981f9aa8eef7ba87cf2024e23c9f92117eab331dc8bf677818edc3ec5e755cd2e0964284dda44a15705b113fb8733d9c3674061976ccf6a9f21fec3633de67dd391b015a1d9c3ac1f52e7770f83b4b41e39ff4049bb8292c13bc13c8705099b56b56e012f70612f524405f5c442042674cd406c47daa886a436d3e8a5df278c23eeee695b30a5b18c73ad0ede44aac753aba434264cb9ccb49da776441ed8e6d7a8c1cc999d29c92a4c3d30a1fe010d575f9b3669a43ecb8efaac53e6668631ce6d78897f1835dca84846f9b3e0bf7eec53a5e1966390097fb863100128c7d384b7834e70248272a2e24ac8989f2e828f2254d410fd561d13615c1928e81662a711628a2154780196c4c92ba48be6bebc36187c7de4196cf68007fdc226ea659205a6bae72a8f3ff04a42a17c396089f019714941ba227f859ee73c7157bc32c20eb04f561940545bfd37b8842a348ac746efd8f0e239db3d088a439b1d2470d3873fe5e2a33405165828df60c0cb27be48f499ffee97f6a97761a1b3c98ba6332975ed014ac2b8cbe5869476afacf7219a100ae351f5584745fdd56fff8a295d4012e3568284e5e91fe1665a49525fada4d2ba3f9eba86930ebf6d04218890de75976746fce3230a81b9c3602043e7cf13bd0659375fe8093c36c734d20f63232463c756ec75e68c95804a4cb70a25e2412fade4be6e233648f47266739726c7f718a20b03a5a70bd5d55964900d70a3c7aaef56866d9e96df68fd0d98b84239482675d7c50afae4cd197f3c2dd67e6011df692341c6d0b74a14d5bec3db4bf3a20dc141930e48c3d5dd3a57f2eda5c3aa0d99df53125ff423889aee5778aa839f3ef2dd00481705aa81093c81cb6d2b1ae60fff4cd892e9f6249b10f638f4759a4aa90e9f10fc4695b56a5e5cf85b22ced919e7916220052c7974cb1264a0262db1525ac2115ef331dadc31d6ece6374057663cb3777de25107a6712eb43421b3f37d560bc1b5980971ed5b9221a4d519f17363456112edee5fbea7bd803704d7918864fe9a96a1870b0c30112f0d88a637a00fa9c765946ed20bd341511f2c031c021bfd1488ac2516c753d67d86ce9f8a9a7663030c825d1f3c985cbf5323c0e388ff99c7f2148e258d4b5485a713407ac15c03ac7e243397cf4b622389689b887b64571d79770ca7fc6b1deff4f3437893050e4c10e67cbc2270e4161886ed8b580ea78d75403b2e63478504e6eb1314ae25d54a8b65b32cd4bd651f86fb516cbd432db07c0c841970753c7d037739cf71231b20341e514a546577986b32419d09963bfef44892099258a6b0b10412196a812275b17ce1a5302d6e292bb848accb9c64e18460cf6f47865638962e468318b49db37a0ddebde659eb3a4f19c10c71ba3b009301a6cb0e72bd8d2962518cfa51ef51f43dc304e59f61544bc3654caa7420d4a687b2ad65926f16c12cad979ddd89d9b6b9190abc52530fb8418fddc45ea8c6458f7d76eb89cd7e1409b55361bc1fd347dc6b4fe90742b50b20bb406dde555de66561b7eebd6b1b98762310e471f3a71e241434fa42b2fccacd7214f57799140fc5fa010da1ca87a4ee518094a3b7fdb02cbe6a4e89263f5db44ebbf9bef681381db0b2b6db6e4aeffedb0300a5df2f8452b450744f0f056a71abb5e928f01dd5d9307d88ceb8cdc0142a18a70cdbb53142b077fa08ffd747920383522a08529f74c3a1e1f04c98dbcac941f64d20371d591d414e4b5b3d9b71f0b4b346c1b7cb9d14c050e49c24898f331f8cfb5f2dcf22656cff9ab3a0ccbe0dba8b139ec600ae9e6954102a095fdde1f1c97bfaf1bd1b232b7c5b9b9951b2851557f50205c525bb0d7a0778afc53370793a63563b6dcfd13d5312658fd11c2155988f9def9faf051d214f0a90602c49066e262353579ce9f2f253c41ca1375cebcb27b4ebd6870728e83b4243a724e639c358d4e2112ee7ed08a4199878b082487e720993205a3ba14d70c24210b9c273d86fdd5020e2659bd467e8bb9e044c1c10e2ee7e03950d26bf640d14136788552bcfbf35ed53cd8ff433b3cea7af14a720fee5f4e6d41619bca98522559a825e2c1cfd0bfcff8a29f67c0d7a1c1d76aa2d2a82a04073c10ad395bd052def5aef57cc193ac642460a59c5482671dbdc75a3ea46f8a710a87a82dd372522b27c993d51965aefc86b917c94065c3f66c09a13d29576911736d948d4661abaa061dc5b41e6d4cffe856ffd6cdaa3db4add980b7800a28513e6a7a41fdc4e8c15953920119d40ed510de64aa40765dbf46dffe92f2af4f983528613040c48edaea1203a452c17ce6c6fa4f2fe4f4ac7fffc223b7c56f664d1e4c51445789275c7f031f86115d1f9ad452c74c0049b15da22af70e4171f6dac2815264893a3bafe1cdee8d9ecf7e5a018dd4e9dba0f4bff5c1837fb0de86a6e96d6d781f00503bd81978a24040218c14547eefbe1ffe0ec22ccef358dd9f195ab8a9696102f0672c8fc6ae41d8919ad64ece44f1ee56b3cf16e0508397c89bdf0b0f1d9769a29da4d6df97e7be55ea0f24cbd1bc368414e425c280773389943e0ea57d095cef450997cb477b1bf5e6867d7e7e671f119bcb017b697cda6a6c40687571ff045dc5237993a44416faf40502ed3439d084af4b5313f5dcb4f48badc187e2c0887686ba253e988cd8eb7e525b22d97b7265b72bc3930bdde8ae5a4dc3e1b69511c2f09642d40a998950eb362f2556762c3d1d34f80292c99f213fe8148dd7c6c7c86c7e795ee1b54fb2a37926fc946f2793482e9b6874e600d3a3455c932b9bd110603c72e2072655970ee3e9b17ab18aefa0e153ce987d344eef2d44f99c5b58223596d46b6334c18a943c204cef837ed98d14c93be6d5621a896873c911508387545548fedd29bc109d4b73d3dd2c2bda7791a5b74638b3bddbbe930b71c07bc6234175a55d4b6db391d988502bf5b879c61e8e4aa0ec4fc14bf749c5a6f467670c210467cbe4fdfad8ae0acac1264e3fe2842cfddc3a5dae43da3f01973470f276be9c4d0f3a936dda929f4a870714b3348a28d7e26a050a2a301dc62cc8bef0c9e1e65d12955895ff4defd765df335d22fa2ae09ac4715f68c18a1d4df778e96c5089a1ba3f74f9b0a6a37943f8d2c5159bd921ed90c63465552f0ce20ac763c9d42e21f07f0e225367633809981a747634dea1c1152f1288b4b49ed349d2e847347de49d9c4e965256d61d9f0833f1ab8ee069009cd2803ba5c0d808fcc2ff4e3a1df2a7df5ddf133ca52fed9044c41e71887f906dd706e6f2fbc46a6bbe3146acb753f890638500e07877db77757635a47eed5bd0672cef610f69dfdeef049753f21076f7870e7f0cf5fb5207f08e5af169bb470daa7bbfbba1cf509c7c02aaf7772f0b5bf204fa86c7c53886da94f41ef2ef3e6bc77abec75cffa6ee8eb3e560edbb9e06cceed81794dd773d5e106bf4c0932733e6b2544fe500c71c4d9eb155fdb9163e3c5581870549f574a18b263b7caee9ae31a9ea19e7da9d6ee04b779f4f335d4c6ac05d9ec1139c73ce8d8fbbcd496e21cee9e6ef08960f2b70429d068a305a787fb7d424714352810b9c0d3b5c6b9dd7e5fab297f03b049d240c8d5257b9f509a3c24ee0bcdf01e780420885d01c5e179f62b4d948d1660a2530ad4b5dd51649fd6a339b4bf190ee5706e85fd264992823ab567fb8611cbb9a3667b9458ca57eb636eb1dc580e7dbb57016920a4c36539a5cff4fe7f10ef8aca72263b6e68af1f5afde2ed395eef9c409f8e61fdb1ee02cfe16137e8c24098309451259ecadeae35b74961d378d8fac58f722ba1a3717001805912437463546e73a8ed6a5f7b0a8c4161c4a6eace495e67c10820f6a3f3f32339282fc5cc51ec6689fd41a4e8d6b722a8a02423341a639ed7620c4a0a210d508dd40e24e013230370dfb519cc754ec1aa6efbc0aee07dbb31d3b41bf869c87ec3c05f10431abac0f9ff454c7a78dba4c39b7e31933e15437cd7c8cb0340bd347757932669db0c3581e672bb8753b642a0a02c049585c2ae04d8aaf5cf4843e815145ac5d8d6afb7a53fbdc587989721ae3795980a49fe715670fb2aa0e2f5202981168cf4800dfdd0359718efb9d6d868ac3b8a760d31240e1b09b81c935963312846ca6179bf4eaf929f141429fddd5c889e5a7d51f34c8841774cb6ebe927a8647c2c84263c407fc12655b97b8486f6573e66648acd41518ec456f45f1cf40be02721f117fd69dd3bcd4c3420f38bc2928c5ce04a17a8f65d6145596f7d4ee805c8291cb18b21547d046618bce3424dc518ac65027af9e327eeb65a9f829ea95fdfc08ba55e1d520f6c41db91ac50f45953b357366f9aa498cd187c51b579ec58ee76b245fea4726d554df161e71e52d9de205b685e31b70a7cfa33488e570d7b74ca2525d55d22016018fe8ffc30e5c11861d61adf2597077eba13c685bca951f32948c78abddd860d01578e840f29a983065bc05b0cc11a52f6926e34213c56fa12b1ad872d2145ccb590eff72f9afdae7c50eb6a4dc1ad9a3e33a2021b3304ea24e43a435189db2f944f26ce08c6280b325a1e756f255ba4ef8bf4880129e653be5500579173b0962bc6b5812117c329c6dbbc14f7488f1388eff82e798d75c76d98922c837b5090faac2eb91f2c697ab85a56c16cc7c26698e40f7dfada2da5b103624a9e0d55b07f7404ce4950558e755a70f3360f900eae1cbceefb9c887f1739f32a57a61a752892aa49364041c59c608d22f9ac727c26de830a024120c40ea0c75436d2294f94acb1a27c58a8c07be12de91e1ad44f91cde4579564511505ec4140b21e0cb03216ad727225e50fb260b5be19c74ff98d5f73402b72c3d2ab5103885ff63f478f54e021be2490f3de73c71a835e4ffa57f7926c3b08e39d5d938093a6d72b661b0c0c48b6d1371d3e7ed466c13c5ed2b04ad4245a732ac59b084aeb1d4d7b9c5390845002b8420c7106605b89edf702f4bdbb10f05e13fbf243b50729d58a6ac786eac028463c12149eed4113efa31bb3c4b9aa933639a0e1ca716062ebe251e553a2217e07affe779cedb015bddd7d6bf44269c9780644e7f0e29f4f1d0dd24b8b3cec9a78f7f238a4f440f5d510b89bc107d6f9b00468737b9b0c44c5877c58922d99f416becdc63b734c4ac1e75db1bf5c6aaa6aae7c22bf0d4ffa91c9a0ab0cf6a2116d6ec1bec4ed5a6b00cbcd4c43c2ad61f47f00743fbbd2c6fe6eff91502aad88e9827e70d5e4f3fd2e2897ca02cd07a709f085c672192d3067c1e9da103c04b12784748ae2dca17786a83dc950fe01e007ad8cb7fab7c7cd6a6cefb3a19d503083ff146b7046db40c6a53fb8c2b844a37a0075b73e1a2b0472ea71dc98e1186dab5cfea102b60a0f4aba0e16ecae2877dd93e142b0b2df6c1db530a37a89b5eeea2893ba2eacc639af513972132225c3aec25ff907144d7ac7477ca6ab09c12aecec7415389d983641054248fab6d52d6a26323885b10da70c2be664ced3b2b810130050c4fae8abcc30a909e7febf0b9c3a189fc10b887758dcde5c4a9a130ce026c8eb686740009d7dde438f4c3be4c178637d5d96566239c4f4fb92af5a9ff9a24e53774526bb215772744541e44f565bb37f9fe3f00e3b9eaac15ba601f7b9100107961715521427d61aae5230b1d77e79152c76ddc1baa4605bf9f0a19aaafa7196297f845bd299a9a52f0fb9a2d13b34bc77b188235380c619f211a1ff4bbc207dc5d10c4ee9174db24bccd798b02c76f3f64677b972be4c99d8ab9b9c17ff8e3cefae1591c41b32b0893c231a10bca04a4c8834eab4b7544a1200e7079c1f2b41fb7928caf020093e6bb0249d6f86513ddf09383d76068da932d42cb844a5782b9dc4ce50f9c031aa67db44991903fa3d224c0a3853164935bf77c534ae2d05683b136eda5d763c8302100b93c9a01bc6bac32351c871278e1c7e58e34500537657d792bd77bc8a56cef0f223edf526690cf10c1042a1a900ee4a506a85e9d2d478a3c270e4fdcba422f090cff27dbaa29d682cfa4e223e4c898e3430fd24140111ea86ab31c440e9b2816fde739438f1e09b2e86677d57af829c7cbd2759879ab82e57b2caaaba95d235c7f5edf331e57b0c593b1b0da5c87e07a28570f4bdffefe1ae2e3c1b79472680619ccdf535ebc13e659ee56d7925b0524e20868017af0d96f283e2910d6c03f3a5499024a57367a3bc1833177225ee0ec7f4c4763536a5d0dd4a7a95f7731f020b62d10c111ab2cec53d9095f1676b8fb898a76187155d01c6e850b4c80acc2e2c9f0d15f950572229758a63a758dd779882cbbc9dd977bc37f40157ef818ffa5154b0dcdea2a94051668d0ae488a838d0299df1e9d1aa62b8e40909ee75fed9421a48bb21804dabc57724e639655055f8139aabebbc4997c23ec43535668d4d4756414b728798b70e2dce90367d6a5188c74e3523e7f9bddc6aef8464b1bfe9099f470842173f14840106933c4f5aae0acb254812f32f57600ed751fd160b2ee16ba67c00bd9526df874969db39a5ede675bc3f495c5f07058128385ed1f37167220c013ee93f706927237e93fad073b48d7f953781fd2f35783ea20a940d631388d4527d388283c977116bf6d16ee1ed48ebe45e12ae32683a972990cabd767ed69bca1c1a22d378ed9f9c547bd5bb095e9d972d6cd6d3267ece3981e4982df1b1bee2cc1c84d1eff11a9a6d48a9519124e148362f0b63f88b504c4e8001ec2490da36edae2d1197283ee081c66e680d32635208a7b0774706a9ec671b9f53700a6a30f14d9015270968f942837940d61da05f05857a8f9a6757945c25d4d67c74eb5b8779325ee80b256f1ffe7e8ea43d04c9cd36ae1f7b23c5deae1d26f7a266da3110cf985182b3f09c7a95c2a3c0172d2cb039dfa961d29125dd802a397a56b33c1daf369f6f8a571c02f80a22e24275e26f1d93afd6da25f45afd331e6cdb12e71e96a18b06f4d5682983998e53356ba55a404eb552d110e4b6c2f609025a55bc84244db6f189d80b5ec71538cb669acff240753c5e2dde51619fd79bd36b0846fec6bfa5b7cfeb602340f1c4935c7fdcc7acbba76166ead4fbd25c494863b6f0defc5bd9b22d9c21177fb3b4439d87566ad376a8f502c2d9d618e893e9face54b543c6b5892946a89bd1df8a74904db72c532aa39197f2fa90c2210e3096caed122b74eb9559977120e5d9a97eeb3f99bcba6c19cf8cf791ac6c8a0a94ae49246611dace7f24eb05673a36b3eaf4d9586c67af8df7584d599976883bbec7b59521a58ce09f11ddffaf3d7b1c4143a78debe96972b180609ce88ebff3f7798ca9e544ffc48db6dcaa997e1b551a5e26a49bce2e6a76abddd60a0375d5e71a5afd217ea7ecc37a53a0966a9bf0bebae326fc6462c7cf2121bf8e835e53f6409ce966b119bbc8d2ff7c26817171d6d049afae7aab3d1386b893d66cdde0bd72cef9059ac9c406672c97da51404adb34d688f24f6c1cfc531f1d824e892e95376dc6be8a3c98248d678e22686cfe446f265d887129f9d20cd19702a6c47025f4f5ccd21de6aa7bec3cb98f257c1e9ad59597d17e69565d1a5c9ae7e43467d831f365f0a46c7da4da18c48116d20e570ec0c26dc5aea4c6123cb3a2a53d783474e33c8aec128417fd881998cb234ff1812457adf57e87c57aee6bb3686413c34441bb01238d404dbd073346a0c47602c32ce2127c3d51d3bade1d9a8c2cecfd169b6c14094144ce9f229c0b3659f2f34b66dc4bc88fa56968a853d8af1c465a626cba13fbb304132a46de66fa48595b905eb0ba78c9f50efac9a8fe3fa6c253ce124f81797700a3d4f054ea7b141ba42870f9defb90c33ce7be876bcc50e381a03876fd10f1bd0925cba9f63741bc557a4a3239cf58826bb5f369b1c3af2c5c9f5bdad730a7bbaba315481a9d55bde80c46d44b72a5c513fc04da60b415ff5cf1e8e5b0872d6f13c389b9e83bc482f464f37a9473fd1dde106f63e92c29ff0b6e5c121952e759ca0d8579bf8112bdd30adc7f9541c2df22a99f70bb7a5f8dd05b420a62426a0e46f784f2310bc4c13c746e5dde7a9b8b7a1e218b784d2b3e445f27193bc429ff130824cdcd4a5f3f791835bfd06cebc55ce4723e70131172ffd067d8f666ab9ea6b5d166e4bb468b118caf000bc737ff43931de4535ab6ee3b55a0c43298637f7a97175827ed2f26ae4846b8f0e804aba6b0913792826fe2bf655e6570d7e6142702631c073e5db4a7b1a955106dd65d2eb35882be28b112d465fd2721a3a7ff04be411cf34d6697867f236efab721862411f06026cc3ed1130e0993c59a2d92cbf13de58c98ee51d307616100527ab93f62d54a6cdb5da003940035fd19fb71c561b600238f497605c0dfc5d1de5658c91c93cc00d482222ebe8d8808a1760e897645f768befc66a751eb17dfa9290769a5a84f835660c9ecd3ee04a8df41db90a56a35bca69bb620313fe19a41872789948f5f54bf6df9c67abe362e11c36b7385af35afb49bf718c53a9d9245d53bb17fa57605adfe4464298a8738e79f309a8d6191b287718bf9a467a64814b7d669cda72e0670b63c2e56bf8239df19bd8e234db4558da0e73b4543b63c3c937a2ae4f0d1e7c61a338d88e9b1a156e784b6fda0280945cebb663e5b27df3bec897d7c1f2c1a0c9eed1a4675901fed7d08bd6325676e3e4f5af2d61a85b1814796c9e98e772dc2b8ab4d060fa806114ecbf9fa29ecc4d5b76879d30e6a53ab2924a8b3db5d9376fc00be4df453e450c14105394a42ddaa7b46538ba310261805b582716249db97ed8fb694e03e4b2a990a6796f2e3f93b1f8728868541a96661bbff98cfb676a3e1aaee614fc19b0d2a7a8999b05aa7f6189d514a01596e04c1ca68a0804de5398ce4ce399f886486fa23e3c80f117a6a0b1b764cb3e1e481aa43660f005ab7b743bfc +MD = deae26f79cb44623b24615ae0deb8bc81a5cc05267fda50f37f2a1eca8fef913 + +Len = 84184 +Msg = 177271f3dd006190fc0182007389671b0852b480320b288835f2da788fa5c2fb93357ccf547d49bec4b257d01d3b42bf80c2daabdc8b270f1204aaf4579ee664d9dc1f22a5a96298c8efc511b465f028e6a9dc80c68edbb6cfb7d994ef65e188318de354992eb4064fe1562b01b27a40822e4369b7bd4d66b332eec221a1bb4de2704ecdf8b147f1a3af9186c9c7e7ed9b7a96cd76c08405079e71e5b3fa7d9d36afeaf58add243f0a82fe8ad74f3f197bb45d14cc3e887c1322ea646e1a2e5f736f3f35165752dacd8226a0f2f08aab680521a581df62b41fe7e2a91aa6d67be2dbd3f366cad9a834d6902ee152d18bab9568ea5d4c19947315e11b7f497dd8cb18319840dcc29386a7c49e6d1e1ca18c8bbd4a282db50357d36d2264a92c607651de8d6d3514820d1c4b565efc71d5520fa52da9293feb12491026936eebfa2aac6339b57ed75c0f5eacc07c93da0f474baafba9e9be33eda0518fd241c08e31514903df5f130bd5946f428e8c5e37b164531df0153ac33000b8c6eacab505d1691855b57fd176a7e71d465e8e0535d98528f94654bb832390ce31a3b0d145531c5696fd871985cc7f3d33b242d8f107d4b2f8734e4a5b0d791a39c49b1c37ff918d2d801ef1208e8357715350de53837978823eacee3338e2254617359fc31cf1448406ed632f331cf468095f2044949d03007016b0f3eaf475c1622361d2f4630402579c769a04719b809b17a4aa8368d9d8d13396836cd794106e106a4acd10540f3ad2324949abd421d322746f9901847429acabcb06b20a9d03a2c315f020bc137837a0254af127b3772598791b918c3a4028f4b3ffad5dcfe8817319a5bac476d974c7144e6c1d9e50cb16b2543f7794de507b24a1f2170de75682403306f5a12531b0ff9f433d4a26b9f8008b34cfe9cacc470432a6bfc1c6c9f970e42dd6fa241561cf839f0f1fc19a464d07971ba1cd43603dfbf4de524e81df93fe57f0ea9ec9e46a43a81c86e81406801191e424af5ecfb54402fb2847273c90caabc9da5af541ba2785ebe565cf4281f14ab1d938c49b5655f89eab7962194f9052eb3021407ea6765f05a5fe740138efe90a2a2f1dcc0675ff5043acdb7db89874de56bb52a5157a5df02f7cab4c8d5397777e5e136bafed3f9758a73a70b3293728b2f0d4bdf179a836eaa61b2a68647b813e8b4c7e3806dffe523326fa288cc653ae886ecf21bc675e3d466da3b16bbeafd07f70108905070a99184724ff0a47e7b04ac7e28d8bc3f1922249bf50b0878a9d0228268a35e145951e46f520e9e36a22ff88fe1d2ee476500455872d7bff990ddc1cca23dd9236ae0ccb767371c1666b6f582bb9ecf175deb23c0230144d6489d4f3033c4445654dac7dade1ec0a62f362e072490e1377a6f4a43842c29b7377b355dabdb3205bd8c405a450a0e5e722a0c8dab5dc71030f94363249cf0e4f4041ec558e724b9fb91d0a63a9d67b7c60f0b76ce59e34a1815899f72e81d07f4d465d7f97c9efb9567f35f0d5d6f3a9151c552fc19c83d9640a758fda21098b058a535dc100343219b22e55bbe876f6a9ea4b2b321e87342170740334f6e0fccfd474f9f25e4191697d9c9a42542cec842341681e6b67391e533c5a234a7e5815ee685a132c3f5eada928c554613c120e8fdeef6fcc4c71c47a759c91630b2a3e9ed8880db355224ffe79e0d859cff0b0f5cbc70b895e627bafc8d2658aaef7b2ad6c8cc638ac63b64438f2b5820c0fd01eb0f8dceac496acb8dc0387078f49d8e3cb6d28066bac4a430c04d5251cf6d8d3338bc836a795bd5e5b37de22d7a71a079e331a64bb8273c39e1d1f89262d2edaff87b9b72ee51869ea765423ae9adfe38ce68399c46f998b95457bf8533d3cfbbaf496b3821023a133c9d0513ba9903d3e8f4deeadfa24649a84d1b8cbad68000dda4773ca9e48cede373bf6a75c93de5b365fab9fac7c1655e30912b5051caf9f42b33f2f15eeb793c97b58193b518e8ce1a118c10b09696d690c4e39cebfd21933c45fd9ff7c25f98679bfbacf3214799afb7c3ca134258b1fc0b4818fb92f22b6611aefe35ce0b8761d75b29f9f3ac968552137f66311560b0e8cb2d0718f63d272b99a4af5b079a150c12833fec62554974ddb90fff67737de1df71a51b9838fe08401bbaf5de410f8ea4414b8813464a94950f9719c95ab19b076f3c0772bf591c34dbef2aea0cafe3930c936339fa2735dbdb920cb596ea58d57e6268f030d6ebea5db266c56d74bf611dadfa40d16ded04a56734b6a876cfcc378eccab2de5fbd329bb35fad40c66912d01a9b27c7d0ec215ad4e372015545e23378f0e1704d071b85024f4e0c56d9583251e295bd32f7674daa5d16e147afdb9e33c937cc1ee589227904e043e5900e88eb3ffe00ed3a47b55c7f00312c83d741851c5df9bc9fa4f881450cee5ad45a5b507b0a99e7fde71c5412d8f9eb0afda5d7b3faff0d7d939183dc7a139cee6431e75e628f0a886f09f9dd453f6c8976518f54b7e7fbc67f75e58fd1bd952655951aafaeea3d220805b3aaf00d974b69cd17c83cb86dc48f2a1127b9f12cc3550c503895b26714da97ea3f816a5497ffa2d5d7307a4abdec3a6d6cdcb9490f8b20f2bfc0f072a70c4706659f5f8bb45f5733483c367cfabd2d6325df1cd4502058660dd7ac4520c69d6fe4f2f224ebb37497e507f3eac32b89591c6d23b6cf3c3c15ea81ecc8ca32228e84232d078420826b743ab97c605ed8b9172cd4d5d40555671d66bae3ec755dc90dda181cc7d00816be7c901a187da1eadfc4391aa6a62ac5702f1d7ecdbad68946beba4cfbeb8e008b7681ac34b16d543cde5a6d8f454495a9841e81b6271637f8781b7d6a989c91a3cf931afc21c35ff5223db7d50b2940910cc3d4efe4a439ebb043985a00bb31cd30cf4cb8f62b73d437ecdec11f632ff0701660c01a08f9e70d3b86144b7248d3413b2bb0572df89fc66fcc9ba97ac98e581f0b71f1cbddb4370a2de0a04a3e7ba9e29d2c6d52561f76cc67abd3f475326ae5be4990744f19d7b8770527ca7b8e11c98b735f21f51cf00d9938c35b9da651706291208bb6e0954e4bcd0a7a67d320fadece56233e5edb3a498ca136a8b0b3c8dd92c8997acf18d3907e6ee26b147f7c7c857ade97ace0595fed960efe1939f61991b12502af094f30617d8bed17d5574fe0f2dc69cfa774c2a4ca6a07a88a01fcd902b7b8470fca12be5ffc57a5cb933e26e7a51d90d7925cf964d22a274ff170b1e4d70361d34d1edd3cbd0f86093930a180bf19b518bc14338cced25c2fce5c607f0e4bc3fcdf3c053b577f8236510f97e6b4c70614f9d29c6ce76411d3a1a72ffae3f9363389548084510d61fae1c251400c8e4d70517e7a29a4490ce2723b667edf738220524e94403323eafff33117b74dd550d7cc0116ee8ee9160547ff4d3288226f6a42128a978628e6ea8e4431730106d8ef7341b8e12bacf6e42adb2b3f696ec5ba6189aab0d0841e66bbe3e69baf88ad604d27a82a06fb762622b74acc07c04bb7b8993bb49c9e571981f67f58e0c397d3629b2df2a43c5c73377bf002ec7eca0a4e2b87ca6fe05cabe86544d11b1f5ef0bb8690618fd97175721066099f120b5a2b28d41bd3b1f4c5f8187d2fe804c95e5fce1a9e4e387dd1da5cf408a8e2d35058766bcf4f79e60fbaf77299cfdaa2c6565d10d269c348327848e1279058ed94dcff940d6ca1fb3035eb6b385909afcfa919bd2468e0993e52bc7790ddda20cdbfa996fdb08ffbd171daaf330df9b9225fec68bdd4f9399d73a1fc681ad233a30a5ebbc8a5acae9977ae87b37412876680bd58c43575f1f8e0ddb9dacca7efc0c4054996d360db314e4d3be014bde3441573d66211bc87f7a25af60b7dc11cc9f586898ec1144c40fea113e17860936425f82abff236c341c2fefb26b4888269a5c9c3d9f72ec76f909056df2565606db8339c025f4b6f7f48b30f51fa64e846ddb53f9efd1815660b044e01a5321208d60c7454e16351583a607bb4d6bd1708a43444065c38fecc77e441707e3171dc886bf9dcffe63375a2ed8879d0fbd858032e1b399bf84949dd1878533bc84492d53874c3413cdb7d87417bc57086f1de01890d5e42bfc08744873bd3616155d1c65b2d302fcd1119f2469fc33fc62a41a62e609ed9f4292bb41bd2187a636a4262bd6c4c52019ff1eae33b98c4244d29fa055c20e9014de035bb84490e364c8cb144793e31414cac7700966f8706204006f64b0df94df44cd04f9a8fa342c358bbd99b2f54f3dff3a186f96e11d56d2bd1ea738c9240e5178cc05c11c3ee974e89651c474481216d715bacbde9fafa9563c71ec63b42eaea72f412f8f5a48f1522ce42ad8851dac3ee68f78597db8f24c57792e27cbbc96d88d4046bc2cc74568efe568aa8cdd19c219522eea4e2f680fee01709dd134b47d8487a93b0cc0eb8d6db9f052d5bd0a110cb741f9776f65216ecf763e7b238206a39bb97490d25e4014f67479e659d7ac5f03641f8fe564216827817210158a2448d10a015f781811741f478835201ce48edb17b50e4dff70589e44e14667373702ec1d69bf3e938219890be658ac4459fab2af6268f591aebeb812f464a503bf6021660636727b1253e8144ca75ae88d411ecd902678c52d18f98e34116b8a3dcf35667f5bc01932e1a0f303d7b873fef063e4d6cd43f48be5d70918d3073522ce8cb12da5b4087411484ab43041612f674677aed3e3ca4ba3d5362b00249f2eec8bb8a99aaac34681426dc667824a7f342b0870c0d490dcd17877e34f20228287d6ff6ba130c43aa023fec2d3f79a9ed58619d52a92f2b00d3550ca16a659ee4ee2f7fc5fd295b10c6150220c1ddbeed9ec2e3467bb5a75a5905347dd13bfc2903434d43d0cc25a049f047c866188efafc1a8270e9a529e391df20528f4ce900a4f287bcf3bb4864711ae3ac97f1c21c5ab3a1585cc658a4642bf5a70c600e6fb98556b6d0bf6d6427dafd55ba32025ba0d369873ddfdda4b830de05af3f13812a44e1bbce9f3ca75477bd4939a1f5c0b6c30284f2b95fec773701f3e2b09f3bdf77515255255c35de3a4c127a07445284cb93d7e51c8782878886f90d7d5aa7c166cd04cd177616af6bd238e72b971af23244097ccffd70d26b969f966ceeccb6597e579e3e3153ad527641e6d7941ee9423fa1219c68be3e28596ee64600b2a7978bd5316236f2c23661b7e1d1e6684f41a9273b497172b506f6ed65d23b627d691d06ec4b2cfed561bb213fe233000e78ad23329fbf961e4e95a57bda44e31e175c7138c0bc7ccd19ab0868d224ec0c2f701e6d66fb316049601c9124c63d74e96f9e7e8a8e7694a759f3c469603633ae1da05666cc4c653c7ddc0d7a677966267f15247149f31153ee6abb6f90e6693cda2f5466dbee1472146d59a2cf9edb18b35f943d96fc2c6492f5b5ab5b029822cf55cf30cf1f55324e55db64a7b4bd05340334b61c98cd246c1d1ae66a94a7a926992f8a51e710c3521efd8a97c4f33629896ea484cfdcd9a56952e864a37e160483dd3d094f2d6e494f26da46d465f3bb7aa9ce75a941cc6462c579f23805b4939c3f119e5e957b5b71bd1e5deffb84125c4cfd982fe445d28edb61bc5a24cafb6bbecdb91d2e32af0b2c1c831a9d3055bac1f99568ae8b1777fd676911c39f6479c33b0192e1da6ea5da9d615f3340ad196f8a135d85e85aa59155a165ca7cf54cb4211fc797bdbfc82f689fc5a5fc4103be78ba1453a2c39f01f10e5f21a9d66efa48bac43621cbfa9347e454dbac3aff168a3397fe027cedb3045606b06e3067fe787b8fa74fbac66e00d815bd98bf96df8926ee6f50aa171155216360132bbd27780932d38fb3b1285c240f3408f94e813e3a1f8fd478a581ae187c17dfeefadc120eb5a129de452923704b26430fb2646e183445d60c206dd5e25bbe1ba2a5870c2f1ef8646409da1d63cf7d922a47f1e46834789d8e103c9328083e106e478f2f1677c2896d85a111a6a51f3d72978e67d128127227fb56b092897d037b675c436bc8e6e02042e7c9e1d5f68c0e29a4befb17fa9dfe6b23f4c7e8653ff08d5610d5174cb1a6c7150bbb65e8c627859cb28f0918663de70b27702ddd0bf642e55dfd6edc44279c91a0dc5fdf35e434dc0b3507541409f87610345eccaeb50c71f48bd47ee0ca4ac550edcac21f6ebdce91941796f18d24cc78bc851c715476629b26521acfb75817e296af79cdeca8d90b5544c643eef67527b0a9b49cfc05201b76ee9857174ef1207e15eb87877e64431f93cc5357f3d9e5b7d37c77d443133c24b2e0c112b5bad04e04029567c5d9ff9b0e9069eea5607a790a5c4905b7a3c5d8a6da55cf14dabbad85a53eb3089f0871bcfbcddb9373ad9f563c5cb6e9398039d16f5a77f3b9a9449ebccb94cc1e2648a5f3c647457847d1bf04f610623b33f03b851a31dabf62bb593084319bbe20c8d2619d5a44d911b64e9c603ba913a7a5ec05db265254adb9bee7b1b3fce7c09a4a2e9b3b17fcd0f70aece25e4627a4ffedd8e67de2e053e6d4ca9a417801cc6615400513464b4f3bfcddc3a1c2e1f2a645e4835f13cb1deba3c1870496740dd33c8126095a2c552b2a554d2da4a85843fc13f9f46c7dd07033b5bf23dea84b8ac6d84546da09a96f9e3dc62a74e39f7e1b4c9263755e371c8d8c8bc7d8064e33bb2ca9f14e4914ae607e77c0bbfc8ffea87694d5b6d71998b83033180df4dd7524679b333e545e9076fea815ff5af06cae7b4871b84e3d8bbc87ff3d04dbc2f80870633433924fbfeaa7a154cb658a6f3242f660022c6c9ea27b365f4524c3656f2f491bb56baee0c460a9a3a48525b03eb3e6c91cda6e7971f322a55935a964618c95114a47459e0a10092a142288d6d9b65fd58fbe0bc331d60938c7783b9ce76f8e3d7c8eda9ec6a10a13a2a47c8a0c33abace2420b25ea0e343f175343b608c07dc8d2a8368bfffaf283d773c974de1210759dcd3546a582ebe3d2308759cd67aad9d4fd210bbe0309a439f7373b573bd75949c652cf6a1a764c7f76d12e3c4c5d990bf563c60aa4999e52998d887f97477f6d972a673fbe1ca1a68de7dd6058de2ffef9c366ebc5e899aabf95025f0caa0f91a785b72e56260bcfdd910d3e7174c4366f0a90694e3fbcc7d31552fe8346333d5e2b663ecadcb183ce9966e080698039c100ee8d27e62f333bd61f64e56511fa24e41d770286bc49c8c6924d6e038a91556d285e39251b7661a0129a184dd14f617784e2e76c53aa33df368d218b0bc59519e6e46a44a816ab3bd3a706469cc57dad42865fd69f2d77adfda983482a5ee8cccf28a38afd9d836e0993959a9ae3e04e006c530bc75afcf88ca87b8410e3b54d8b31cd41439350025c67af8ff231f322659aac54f4b92a878e92f085e4dc6665c308ceafa17e79c0762a3b6fcd371cf01a1a50f94ed36a24a96fcc95cfd262dc1fb3901c40e8686dfce42180527ec482c6f42942fc2f22958548f6faf94c117a463cf9d2475884d4999d490baa8d549e122e1e762755bca3cb2456fc89d2db06e1aaf318df5735bcf35e9b57fcec320da6d216dff6ce9e16230cd4e5a8ec284a97066535306ce3ecb22effae7124c89629e7fbc3922132b6340758fb7d23600c11573672611ff62d7f165d5631bc7d034476b46b22d6de4ba71dca8831feeb15f6a550179bf8d647021d9d98633cb81b9e86291fcf760c9c235612d2eb06312deff99a6c0580ec02e24ba7bc2f2ce3a5e01f4227c188237251bb1822d4c19b1ba45afcb8c83e9e26c7a8630abe15656ab149e7ca1f948b95d953c5bf14b98fa9bcd05e450bba557a5b3db9ca387fa632ba0d00511122abcd6227fff3d276769de063a859f77d7ac743119243c5f00ec4a2727504c1bbede2943daf04367eb9c0b71cc23db40e73d52a2cd4be8bf205ea12812e2b54e6b89b199fbe3b695bbedaea02953969f5aa6cb6976983b50cf36ab241130ef52c75c1965512e09395efb3201d07943ebb85548f5937da69c7400d29ba0df5ca148a1cb665953bdbb2b312027601985ce76e545e7a280bcfa9549b20f40227fb2660741ed92d936a3c71c137146c8beb01cc36cb03235d113c97dc3ef8dcedb1ea5f9179b8c43268bb938668002eb6129207c07dfb0f1a540872982ccd818f14e9ef3b6d0b415efcb5802a3d403161fa2187bb1d6ad688c3944b96917bdb554baa7939a2d98c604eb4a0755dde5bd4cb36b3ee52595fef83688b9f160bd0867fb56354c22a8d80873f5b2e71e19656ac59f523c5ce9299bf0c9b7b63844a6cd793175472072c05cfdf191f2052c930c513b4201ed457cd9d09e1f21fee304d7ccbfb015c7651394d1a420e1338dcab3feb59ae047096d245e5c7cbf2516a7295e579222882e4622a7b3ec4f29bb60d426a4a951fac37f1e02bb4d086b6df234b6af8817e30cdc98d8775096484419ef516f09d188f2272966010c7802479a8c6e1e0e4048af4b69fc850a411f964a8817ab38e9721409d8e0e42798ba41f482dd298146597417088c5355fa20507710e1bfc2f436b77b9f1bcb4ae4d3db94ca8c58ad9475f9d416f068d00bfad1242c3833149c574b010e6f3cd2e6ef730fc61431dfa53ebee6f7c14c1500ffb6e63c839bca4c445d4e8963af5c097da6aa07dd3b94130421e43d97637173bf6011c46c50308e9e4c98a2919942e70ef508027fec674866c1305abb4591deaa6b4b565b0703ddc5b793ec618123ea03dcae4854bac5cff72b7fd1d578e29c51470754c80690a44b2ca4c95c0d8b9d0ccc113bf42d4c1415bf07354e63d0574471ba624c05839caefa6fbbf984c66a7a51b56fe6ba46bf42fa8ae7be9d0779e479e8e14f5a490151cf4946c29d70fcecfc2f56a4f8521c1f7c6f7b8e8ae48eb1de27545a9b5d8ce409c5fc3f9e27aec529c382a75e0ad50ba3296336c3f4005d0cea5de63f3d89c6485a4ed92d370aa37936667651bd54880d4d316fceb269168496508acc65a288f99ab127c13b9b0858ec948a8a062515194f586211ac43aee3dfceb0b962419c9bfbb583d0b1da54474a7f6c5d51b15365a46ad6234e0a56991b3ae08cb00181adf1eea5f2264317d2f49984424ca39360e0cb347a1437de12dd27a2bcdb4cd8be21aee6abf55fd37a6f757aef435685a9890c058c9b5685ff9a176fd0408df23aef88de44cbab17ac1f95b8aac2548a9e01afa1e15fd0ee9dd67cb05d9c6f7eb2c00ee573059f54e6896cb60b662812bcef28c20ebe5198ac16ea0cbb2b4bce944793a4ad3fa6fbc8317cfb979b4bce84b5f9ce6b4332e478dfc1ed8f89cd727dfad98469d67cacbfac4911b5de3a1e93daa53f9d9b0f72a295a6cb31444efade3e231d2f667ac84b5e53611cab6d7358e1cd8e0c0241c3a7dd0b4e46c74ad813a612c7646c1beed9dc2e92028f707d424fb5423d357457f71a51bf46af6b9adca72b2baf53ea71198a3d0d2df6cd8cfe98fee4b79101902ee23cb6a7591ba397d5ceb276ba60ff58fcf13ae57def32dc322cfdf191940cada90eccef40c582b3969fe4410c1a0a36b8fdb3cf914fff69cfa1e671d3863df1f35a5a951303c8de8df14994d560022122b50052bd8a5325b60046cec362a4aa35a1f82f3c50e66710754af882fd77a6eeb999056f08deae89ca975eeda3c12504782e1429375bfbc29e70d2a12ceb46616df65e3255e262bf6340a8bee423f0c43f54ea6611a9fb18df43c9cc88cd6e1f6490d383fc0ec0cb6cdb32b38e3dac197a05287f8a50e387aa4c24519baebc9d1000fbf065d4673239ef93682c8ea568cac744d21bd15393a1f298ccc00f805f02bf3df42da3b4886cc6314929877b368413d60a20aba9c138cf8dbab05077d9bf342ffbae2d37327827a2d30fc8ac073863429433607494e13b8997c721f191a808389371b17dc4ee6c4ea269c2965f7a4e10ecee6042832def02d08ee49c1b4f93ee4812d0e6b4320cbb13b1f5f8a3ac3cc7809c4b8220912280117228c5db286fc7860c1c1094d5917eb362e311785097ed0be782b1d19dae97c71b6f0d55c5143ad9c7f369cb6b92e01e070a9f420a17e7cb3aa6502ac5cb906dd517d11fa7f9eebfc0e770dc4679a59018ece0953b154e6b1016fba08c02307249b3cf9d43b929a49178c45c08ce35d612fa83e666289747f25502c752face70e3e347632aba9224b417b2bf24f8f74c7fc407ca0dba490e7bf103f3dd1de0f63df6d6e5bf76aebca354ea6a1d92805fc9c9da94b452da1af77b8dda7cd40e5eb29f0cb98485d5d8e9a0da01651367ac9b8c7afadc7ac0fa0f44eedfa4b5ad26ec1c47331c60be15e19be009ae03f3af4f8c7740e8aaa4182dfdd567f75b53fb352f1506e98fbdd045a6bae73aecdad4503a4e2b8b5afa11ddf6a027e71d8928382804896e7b5bb46041b91e9e2673b868266e0f2714196389dffd83e674b35a6f97845f3dac2e1edbfd79346a5964c7d1c165503e6ea889dc0a3c00980978ee460e12ecb9aa9b9c135a69bd01ee048f37abb2b343b31df12f15fa225e34307055fc4eb674ef2a9890b9092d176d097b1445d49cd999e0460d83a66dbbad706d09d28630f1f261b0fec9d5e8fd4eba17c2104971627ba5d4f1c3cf5732adcf50ec315800b35cc76197ed6e85361bbcf1fb9b9fd560e0c53a6666d35355dd93b87789329a2b76c22706942186444c78760b58363d7751d4f2f5dd60f697b56400365ab461dcd8f87dc56e9d70ca6973209bd6bb1df8573b7b0aa7e6b56abdb6c4a3264c0c4a1bc0d24edd40b91afb439e07878cfb76598f4f2f46d324516f1272386c77ddf587b1c12d50a9d3c86a502ae8fb2a5a73f146fbde4ac4a7ee41fd95809da66b61d541c6cb793765554f2f73aa9211cf6386d8fd822429d493ceeeaaf64a7639116d075fb3a787c2440247f4e6fce1aee7a2dbb0d553712ee46e5c2f13f365db76b768f8707c099f073c201b089c088d52ddb5d22259490b42c8cc9e6418d3a7145ced2d8c573b4031554e7299eff4ff47800dce03c6001e5136b685513b6e407cc61a7b51d9ab5a34d629881569455938423a00f3fa34cc7250b05075db941c127b674e7b73c831943757c805b8684fa79cc1177d96559a38af30ac5c69c3be67f56a2373a6108ad2014fbee52ddc3707e8497dfb0af10c06aabdd55f669b9c0fbc79a6a4f112ba60cc87d92e6a2f93ebbd19a116c885968ecbce87f9628a295c493c34b9d55d44e2e186a35bddc10ad593e82d3b6f91ce138ad910d4edfe0ae014184a1cd34ebebaf8c2a9f7f93ef038050b7ee36094174770642c5c5985a53db5a473386b759c6b6ac2598d5cf7e885791a12a93c0b069d1506271a45af8cc7a6573ca71e504276c01c4e86799a5860788a84e752651086d1159d7922ea26005ea702e35c6d555f9126d56dcf84c43b7bd352486440c9874d48ec0381a4058a472a5277b62b49a846789acdcf55b0890b9ae726b21ca630d1e6bf33d29bafc81847c7debc28a3c358981b01197ba1dba037d01cfc571af6179573a4b60f894c1a85cf72ced3d8435ffbb2b20e652ca5c2308995839ebc5986cba5b07c9e3688f66ad5fe7ebb7baac51a1e4b4ea09579fa2b901ae841eedd980fd1f1b6b61c01147d87bc3c5de26c2089aa573acc80baa07f7037aaef46f4c3b864e2f4e5be36fd2431469829c109dab0d3405337830a6da296564c054921a28beb0ea7bba1ad29057f1802ad8bf68c2645a1387ff0cbaa4b9f013c1259f6bcc0d0cf5f964ad62077cdcb1c67a7c49d606df45b147e70feb0e6c30b951de66b1dc2cf7d043e446c11b9ba45c698f686e5b8b42b8360bcc3a90a162b1bf97345e91d699093e06a7469af700f78f40ee12cb26b3a4b6bf1a16a75752af5712fc5b96d383ab3c5dac1c63b86e9cd3d7034abe773f7eae4a2109bb55a8be0196e73151eb5cbe272f7ecddca695551d9bce9f9c478f4d05f5089a34640be3a56d1d672ce5cd4be6c544e16f881e2955d57898cd5e4a19a508f8527a4c23282bddc5858d8b7d58616727de8328b02164cd28beb98419ea75cb18b7f5d599947b2f0813dea315f0805d4f4e7f4cf44330cb0797c981a4c95d8591530ec6152f7eab0d9a86f63c182beee3b8cdbd9199a2173dad631c92bd45808aae2be93e021a98fda2ed4c9bda4a630ba5d443302ba2f8f188f11e8ccf15022c4eb604bd143840ffb17b6dd93dc504f19cfca579ff19b84caed9503906b5549ebd15e0396ec1e93c5198209f498419ba25adad131fed9d75a98577426a0ebe0983b2455b169bdcdb09ac2e95076fea91c84f21a79308f094015b5e4e0306879526f3fbcb16b06105611f60627e6fbf9c0e4acadc6150f8d33cc5cc06da86f9693042c93076e6bfe2e2597cafb76adf037e07705b93afff58e4298811f6775aae290678333c27409913c34a23b84993efa1ecdbcc310c4b4b80f15b195fbff38b97a6d07b725a2a537dc394678bf52388fd62d2d5414e25d599840dc31e480c29048c99b11f67c637a6c220223855d7f51cd21f21cd5fd51eb64a66b93af8edb0f71f9b7c4c355c6e1829b7fdc550f65f86a28856dc26a34d5fab2ea3bbb9dd47f9c79e8500ae341f5b5e21a03cd0caedc13cd61d778bd78a1d0f2c28aa72261691ec697343b99573f5cb26b2a4bc99c85706d11da576b8ff76de29f10e0b0e4647f6c5ef1d3ec99270d68edc06fbac17d06a40ff6ecf8fd1f480eda6ef6bdeffa34e7aa1972616a354e920c569774b03b2ceec6ada7ea42b1f5e40ee557cdd682e5a5030b857c5ce276ba515d517beb4879c9e07f26c3f337edeea71492555aa6f830f4589ba1d3d73c4e67653c34c51d63b1c7ebd7fa8119969b2d8d24e8cecee317e8710376815bf5ba88ee9633e0228132e7643a026eef86861cbf9dfcb5734cd669f57b7ec81949ab605a2e0dcf1048c9e978db803f22441bff1c5c15a13c8bd8f346620f3a779e8d78483206e43f20e338aa2ad8544a45e94f33eda8147326bc1ef435cc3aff6add2b3960c3c237a01b4f78b69f50d0025a8786c13881cfb3dc478f851a4c293527039e28c8eb725cdea854ed29b74c100c3295855b6b9aa9d5f768de9e008d93d79bf6f89ab277ada9dddf5d2bea26e56acae09865546c7f25c91080abea84fd7b5ec46e9dc9c029194a78750a7be8f8e2cae878fabeddba48172739e85ca7e88eb696e96693e4358998a0d339ff1ac120bd2db5901d46d1b97c1d58c7e98ecb9e5ddef769a34c798722e8e65ec634e4911c10ccb9e2305be652537bcf13723d069f1d273b6a716bae83c12cdd63bfc9b052322cccc032bf7b547a01625d2ab37404d1e7407beb624c35ca253a7a23f70b1a22646d19c682e4dcf1882648f0a543298db60d3a23140cb3544dfa5bf9e30dbe41f20f61543c9f664a8e8f496ca91067a1121637a0f75c87002591abba1434c9115428396453178ae56301e107255869dc99eff6fd62a81b4e4a94cbdd012cc521094c049f4ce9b572c422a258b0778a60bbfefa910c9bfaaf1b884eeb40323cf19fdf454db082704320660fc9c11a540dd6c7a4f44b94afa316c0975d47f18af376869df7f48e35f6f6508be2ddad511498de989fb62ea4bacae257bb8ef749a73ba65136af49810eb456992c7cacfc1560a8481bc2c67456b671e28e9b9ff3ad4dc311723760ebfae90cca1f1495df90ccb935c0f7f8891757d3da3ee47813462b6151432340d13c12c791333bf456174b95e457cc316d7d2daca154fffc2332530583220985db42b03b80f159450a095ba2d628c60dabe8b640da5954b89dd263344987308c54bf4fbd1bd2030465f78b747dbc6be99efa7054d7c4792a0da6ca51f6fb6ee0f8025fe0b46dbfcef452399f5d9b3451e122ea4d4c1ed3bcdd3ff7032de6eb101fac4f3b0d2ce5e13fba0467f84d95e30ce2928e89d10b0d970e87ac50e25b96462dcc1068882bf7928f7a82d03c26f96cb9f7bd23837588c582ead2027626eff5f725256917e88ea752ea6467ff6e219b29884dab9ea9bad34d9ef8a50ae389c9a908de7154a1f2e894f27141ffb1d812b1c2b4749b1e106abf22a4db1907f01ba3d5a033b6fee0d0e6115dd0c5b8a96dd3458630f15925d667f45af7390abf76882a1f02b745b4fa96d57ea6d9e8f1f71e7f374349d167b0c8b28f9be3624464c664af70ee1d0bb047ad5836b4a96e68e3ee4c3dfd2d628461bbb72b90b52b60df13e600c3fb41ac79077f02ee906b1dd3f1398393a382bbc39e6648d969e0f542b63734c156f349ab72578dd02474906f4693b6a5fa54e15ec9115615f6e18c81da278f7eb69d123f8c764a01ec176b065ccf399c98657fa3da4ce5eef2b9a12cee4b6344a09b90d5a45fca1c4dcff83992509eefe410f123207d7accd3e5ed9460f762cb8b9b3fee68788057c00ae29985dc59288403e06d6a27872810d29c68e0c0006bfe1899ea37550f7cf9549476a5a6fadefe9ac7d2e5df9d99402c681adc49cebe7e7019799f89c9d4303998818064f66b9a620204421a1088d84fbb1ab1e9203b734e48ed0f6b31f62b26691a848ade670de64971fd4ba27f4fa92fe91012975b730f92e5158dea6b40a780d2507d0559bf83e89c7608a6052ce51126657aa6a6f430a1c2307655ac07496a2942d01dac35e779e45ab5ad92e67019232075d0968d6dd034eea90620e568af8ffa1889d6f77d77fa09f71ba102d6a29fdf98a7b294f3c89dbe8a6e626191ab86d4badc727ab25d4e023192c80 +MD = 1f15f9cd5accf3e33f678e56deea980b81a1909d0c5b43f33ddb42b0e25bc366 + +Len = 84976 +Msg = 426d059f9b7cccb36f17f8797a18cbc1a3def8fedd9fab3f4bffca61a7e27a83e47fe6bb12b73c0783a4f7872c7464e94d785f2455785e69004ab256c2a2096e682c36c6fdd83500ea76697d628229cffd417b6da30d1fabacecd0e94568c60a169b7f28228abf85eeb4d6c5e5ea215bfb60d3429105f5ed9810ac80fadbbb4035f548484973e37fd586c4c67d5354768efef009e508e9170ddccf85a7a4eff90f611a903c3ba8d4e815bde8f165cb060043582c68c002115178c05e156b6a1bea087c67c28b176d6f8948930bc98df497569511e2d248c3ac0d07750cd7358f0f12f635a20b3632b20aee2f9127a2299c602f221be9c31668c32d305490573ec6a61063a5620f0bf8be35244c26138c5688acc5daab7cf0ccc1b9f9b43fd80f57ec53579338aae18bd0a8db046fe7040ff79664e9c07a3b1f303337f58cc1e9090d467a34370d9ab166ccba81aa267b0dd474660ed1c5ddaa372351df1e19b6253172344f054220b3a92b2a8a7ed9d89a48cf33128666c0b5ff12b13a9ee85df37f5deeae4a5159d9c04c94e9930703fc7b2e33bc8664ca87b088beceb336c6bb20910e17af402f6ad3b75e6492b8e37b9419ced67ac7e56a710be063060cd9c53c96fe53db1989b00cf5f2c423f46261bc186c260998f8a46a257fc03e717e58faf2242a78e44ef1918db6d0edc467f41ab47576dcdeea7ec45d03ae046e9dbe822fea632ba768768a071452992fdb7ed774518c9aa1a540a73bd5f5000a1e3dfdd4b7c89e6cbe8720ec7310ce3ea4451ae16830ece910323a485b5dd94de91e936af21f793a386b7ac23ad435f8ab920c81222c7abf139ca60bfeae383fe6a96b780531631abe6cc214d3647665d8acd4dfe847eb2a96c5120d26afc4e9fe25ae8657c6051238d01d67a588388d14dd9c802048e83381f6a7d43c29265217dc831d50a6072d8ee0b545180a2379456b89ee34f818e1bc778deaa6e405821a1413c458981070a9e4b23594b1e030549fc5b08a1f243c3090ebd7cea80a82f0168503d765c8e56f243cc0814417ba2ac1784e8c85b34cc389e9211a3ddd597f2a026235d5d993c9e7796c478c6f20ad19c950a0f16e1a5ea9b152f46a250fb197b26adab0e8829f7794c44e519169c7eee13f302cfcadea3968f1c3f88aad6da7bca22fbea0bbda1ab34dff5a259d5f8ae8a3a3ff070d4d813987efb0b63a9aa049929ac7a6456019ff91c071d2c55d330502612f344371c94a9be0574ebe22cb80c38492a5281bbc9f17fa5c40e7a83260e6d2872d563c59c3b5fdb8fd42ec708abc56e8436df24abb6716e4180e2acf22d65ece9a4e9878cd5eb09a69cce0d78e057691281bcc0d7d0a7ad1023fca51735b6dcb22346c70901c61c43a67e647b5274e55fd3a934b0b8790eba58470027afc67476e0fa087337a76ff1918e60a27a944fc6ad32e4d8d66bffaaae404286041b40a26e71b06defd5813aee9c8660b13c24d16ec855b2c306ec5b8686f0c4cb2bcdcf1c4c735bb2f6fc8a0e174a489ee2f11aa9080bc0f6c0715781697f667d8e78577af8b5bef9723e69708d30bcbc1f310cdc407ba60a2f1b292f8652dd93a9ecc61af4fc1a5bddd343d67cbe5f61476122892029b445a9464ad16c1fbc960477b57cdfbb0032a037b3705457835701fdf630159a8e51d58f3717694a65fd34c580010786e3165ff8330eb2a0eae5b583e2519f4296b72a5268822c477c51a132c0580ac4358f63714ce1f60ed895f89f916e3bb66fee2e3c697223bb620bd06be0d258079a06615f6b9abd15def0418d6df6697a6c4f47a9b497cdfab9b458bd8c108dc57303cfff09a9663a808d16e9e28ab6e33e830d26d433a9a9e5b390c40c930a92431005fcc19e90015fb4ef31898b82a53901e5304306453d68b21f0bfcca5cd29ca3b9c50ddab8febf1030f0ed897b14fe5476628b600f29c51869f1d737032ae24741e458fe4f87311792b469050ed6f0e3271a07d185e38d5ee81226598befa66334d72d69d23f58437ad8a67e9c4fa3367de352eb381f240e4fe964a255b57b90091a15bddf8b871c5ffa0056c203a7e6f13af71da4211baed7e40cc20f00b45645298c6ac5f0601ac875013e0e87515d17ad6ed9489df6a9369e99190655f31e6f820be1240255b73af64394e04f4201579714be93ea2795d2759417da29ba60feb01eb18835ea9a2dea21ebd5bffc8c47a4a32e14aa30fd3205885ef8e07cb659303f6c510f910c27bd46b35d7dd3465e4274b85932a527ebcae05ef13ebc97259ee8722cf3eba5af0c0c7bf5fd88e801fd13edc027f6de564226884188ec7bea3894535a875cff2a42fdb61dc36fb9d9310b2ee7fe986917e7e56b78639eecfda9dd90884e57612ffe84f253440a545a8ab50c4f3b1c6087488798f4334662f67f2eaa349d7d84369b5ca13503eb4ffc66cbf65442054d4ac09761438c75666b050210ce1931d0c4a5cf432187850545519a7d95c7c597c90c8f84e4d3ae6fa1f7f264d32616cf60aa6768a74359fcbbd7bb229210dfc89868fa5466bd440751b46a06e2689ed88115bf8234dbfccec665a865c7d1d6682f824250378de895f0b6f3875a452ca4ac8432106895cfd3fb87ecb7a57f2beef4d50218d5da0ec3e59c0956c930628c495259a3a12555b4d1cae2a8c96d52d59eddb41ed03628f9c6c02605addeb327fe1cb0ac7cef20d9df8b44a99240edb47408d2c2a516c9a00acfc404869490d0215fb1ab6a77a3bb7b556d5a9e8e5ef41ae2e8b4c2e0536f38178de3d1f6ae4d5977e720e84370f24bc5d70c5caa291cf9f85055c84778bfc533ce141e795dd81d11cb9d74c6faf6b7490c5f3b28ceb7a7b5b43603a08c0a38a12f25ca911208d299c9819e96b431444b97c3d88ec22c9aa78ec633801fd708ec0b9974d27d68109c8b6dd4273f4a8969e3dab340a614594a4a96a66aa6cecc80eddf9bb1f27e6d866bc2a3fcee9aed109af449f2ece74a1a7227fac4a329e9ec6078bdc413a42fe3f5109c8c64cae5cc07a10afa091e03a48fea9f22a7a0e79aede5496d43820e31b1e81c5a14230a18b47174da7d311c550e6f120936ac5c2900b5cd2224805efc2ca9a1ea8f5bd0734be62628dbc8eac88815d1ecb2a4adf3235ab7971937b8afbfe5cbc238ddcf68186f8d49873df55b578f8d41ae3253a5c054a710a41091c8f62d0855a3116d63c48e18d11218c2aa272c72acabddf39d82240a43579380d479dfd62940af2102bab267340ed1d911618d40922dfff466d3695f83a638ec5e958ec3b1b40f80a1758ce706c001bf4d812265769720dc8e2e65157602895ac3d3aa3f935fab02dc7f6e16bde810ebab107c5fee89d922700dc7da8f0f0d52a0dec2c822b60a3e1052e684bdf997c4b699fbae4e78915ca8fc021d332e2d5a81f158fc0459c588f97a869fab570ef0fc8830cf3ad5d1e1b573943bf6e271d8c3c5ed29acad3579d460bef5fa82dee6e965bc311844235811ff0ed56ece635402c6ffff704302975daffff6202f902d09acee828b260e364b18d267ff348a62ab7ef1dc139d8557d1b2ea3eb09fbb19d9d85811f80deaf2cd3b7f722cd75f6b4a58735dfb2f6631fd13de2e2075c863d672899de36e522424e166628c094b045bdde4e39b7b0dcc2c3d7c52f42430618c05e354d1c9cc20ce9537e7715ce5944c89d70b78f2e47cdbaa252bb03d9bb9670cf5f547a2c1af36e1644f8144a7b1b8f6ba34184992caa7e46936c91452c203e241edb97bcaf60a306c29304319d31d7f1f0bfdc1913c0d76c902b36b0e11cf3057bcabc750bb952ccff312faa48ee6bd65e19e0d585778dbc50e1384263f457197c09317fb567411003b8dbde03ba12c3f637d8f6093767dddb74e022390e32092c803e0135d33979d71251f456fd9360bf010ca328682e7839ce7679ebd44c7c90182b23146401af8225d915c91fb754c160c3056972aa3473d5426e02ac6d1bb2b73f0fd981635b0cdbba69e5884648043a474454bea3ba8f738b2a05005c8e9946c3ea0c9425257e1a3e1731a108e39179de8771b2e1b1988f9bd57c37e27c4daeffdf350410b4dfccab4836d0c4ce6f03d1f649b72bc29310b896efb9c78ed7d53b13dd39ecb137d84a237a7e44b0a6c268bb63364b958ae02b95e7eed36b3ea5bfb18b9b81c38e2663d187144e323f9ceafb479507d184e63cfbec3ecdbb8a05d2dfc8929693ed9e3e79e5f8abfc417ba1e17e3e281e8a0a32f084117f28c3dcbec51b86f5c85b2822441a9423b5b446d3928f977626a334579b39cfaf58f214c98d0cdf640be1ac595ab04f7d05a0e5c939020ab88ed74cf12592e026f31f943c5c2305ac04861229e22f9083960e3fcbfc60fdb8012e3a49b517acaca250445f5de960955a5242db041dc1fb0d053e200330da3c25b1e6a774519c090d8f0c79b5e558e6b64d24b6ea0449ae158ec91277fa080da26739528ac71604dbe3d4d48fa05669bf80a104b96b906454b0c8e78047eff3215919941e018366b45584b611a0c0e41ef29f0b9cdbfee4727324e8459df7b54a8d6fb358884cf742eb0468636f00207aab0715b9dbfbf818dfc35def87881dc40d24f861e3d77f2aaf3c32ae957ce57cb4c26838f3ef66eefd8e8ea58a0af138e11eab619a8ec617a9155b1a989efacc14b74c42ab42f79bd46dc29030e5fa4d0f47147f36d893afe0752dce02cd2911d3cd0bff8c5c73c86c4943d8008100aca1867be43e1cb09a5c46eef35a7038f3faeeec961da5a21cce0857a48247cbfc9ec227b83ac4e381256ee7b029f1f01c9001362fe6864c400194471c3f9d22e60fe56122b337f50c44d7602ef6b719319ded32f4706538db0dd35b6abeecce12fbd6714a30ddaee2c067a094492a7bdd2a9c280b42ab2f96fbafdab3879d98276a7d9f59391ed5aca108f10baab2ddc63df55f9ce5c1f919d20f0e22231645ce65c2337756623411efa199bba2b70994e1e021d0df0d5e0b9ada3ddc19c1a0aef28d74cb101191bab319e1cbb8a1c5f01b45b4cebaf926145cfab00cf10570701cc6ab7eee93b54ef55a116475d8da82f50c61bffdec18dd1f56afd834497cbbe85520b779506876bb4b71ad60c410f1761e70cb314efd0eebd6816869f78d3860221b9f37b171da0fd449cf01ce2ee5a6612919dd869d4fc86270e518766b8e8b16e45eb21c9a21f8dde0f1e05cfe088ebed4d289fec046bfe2c277ca2ede667117c21b72faa9f47f4e7f3c86d846ff351db81dbe1d2e9ed73ec0450587ae681b0efffffdb467faaa0f6ed87aa8cf75a4671e23024baefd195eb27854e9a23b90e4e131ddb09cdc8309f5ec44366110e1824e0ce0f00a0c8b2be0373cbc8488d87fb1d99a58104112225ca06de8c478f65890ffdd740872378b91ab47681af6fcc9b621ba138ad25e43ea1d7c28bf56ead02c24834071d725670ffcfc552d2e03a93a2fc748d4376f55e88bf95d1b52c6d169a459ba0ce55ca8a051e3eb84d7f506832b4961b4174d3e9e126ceea013914591a7e74ba342e4348dd28593e99adbcada3ec6c5f31a01e854d85e4516425313ea54b65bfc96c5f51ea969b3221fbcdc8790c8dc59e99239520857c945861523bdd44d53e18a07d29afb18b5f80da024d248d60ead2c081bdfc8dde2f588de5d514f349918c5b3b24bf318ff330d8f8a038e79c3b98a6b7545407af8edf0b6a9f0ecf49769f0d17f77b6f3fb9bc692f6618c376343acc42eca9ab573f665a5efe0d314b49eb36720676f300ff7e1b05035679b56143a1a30b7fb16bcd88fb4176a2d1c577db57f7d634458a51105f280c74a2a04f4db7662548d26395b17ea09d62295ead09f207eb25df224afdb5e6e5f5b6ed6aa37dface8786c5346a550ad6cd906d45d18530b9ee386f49a0aff0345c2ee3200f75df6bde4717263e0eceb747bf77dedc91f0c6dfe9d7d9a3bda25c0a83281bcc3f82819f8bbff7871c8ac352ff04d475a8c6968d5be267716f9bd1a35c32ca742b92b45dcd4604effecd6f81e7aac3572a20ad7917159f84263b499902899891da7e589b944ffad335e53056f1c027db96ad702593e7ee66820f086e2e9322afccb3f2cb791435db52809a44b5fb7e8d9ebb93056aefb092f395b29528f5e51852b2178fd4593252c52e21ddaca333e772d96abb048392940b5dcc909a184c863d174b3b4e759ce41e2c5b743e5de473e3958b98e94a00e429c5aaf2ea70e553cc51e260300fc219be299bbaf3821cad316e5a3181b997fdef6bf24ea2963c1b90d09191317e4e3e3594871454c6291e1cc27b178648a46bcccf26e65b0ebd381b31bd30bb479dfc050b9212ea80a620e64042ad3f8dc298325dbd5c6c30e553dbf3e9e146022dcdbced41391d4820602e56658545df8f1dc0a62a336eb340d943759c056a14aa1dbdb818f9759314566573481201d44666e826f1edcafc5c52f255482f80256f7697fa8dc68be7ee6e2c356ee62c02a4fe295ea90e1972943b590172c2308afa62dc331432b8bd3b31d30b3e740cc1175df4bbb3f6c2bc850cf818906fe3dbd76ceae040c09499772c0a635b3e2cb61a10eadca74a6f40bb325ff9458b228e82ff5490a7f297f31ec722dc39c7144819916c2ff76b67958365e121f6966519998499b29e3b4b50be9dcce45e815c0db25a193438fc542189f22c213824341367a73ac4a82d1738c31a690a4e0f5c6d60f54267c05fbd8b4b71b1856eb717f299d1a8456a2a9421c8b777cc6cc3adeda1ed98594217fc29246ef1bd1ec1793d8c9e72c338c63a923c0f79894f40b904f19d8b8712b7a881c1446d46ccd5d06adc681abcb8828310999cfeef69f91659ec9f8c5fd6b13b3b9e8c94910d56c5f0e5b920904dd206037dba786d517f4e42df6e2b61e2873cad08b1f84a34d6c266552bf4ec8d572c11351266617a25b9665673e93beacc155cbc6f18d0e7d85e41971b283feb647d906c2f598a689ee01aee6b362c43d26dd115fe76a3aaddd1f928113b08ec9c63279f5bc246814d7af7139e92d1824cae90a1ea8250e259f62384989db5f561853d2b32210478a3b28142989fba2a9d4011ecdddc6712cf1327393bd0e5ba564c47bc4cf662a3545f2017e3bd54a136dadb5322d534d0cfb19ab25575069fdd30edaf06c2ef85b1a979e00a6c2f8acbc76371741d6890be69e48c8feaa71a88db859ffa16e9b45e59f557773ca94baeae30c42c0560d72da4ab2445a225cecb94a5eb81530fa3bcc908daa49f506861e7d9c7b53dcc189fea3516114c310127f4c53e4717bfd84f7f4ad62d14c365881ca508ca26f8d977b338ee7d492766108479f4b5c588c6a8f521f67b3d60c783b548e3c541759e67982cf9d419976237cc3aab57fcd8f33bc334a81969b712d73a3bf5212dc0dbc1f167d4c04dff99e0346dcea81e5ee28a51e967822a44bc0513d4c9783c79162957901bcc56ce51cc35a9db10ca59191739b6b1300f88479feac9bd350dfcd200433c1b52b4924e3e78655d4c51761b64d32311bd89f02a0a27816cd202da93d94ca27ffde7d9c3b95536c19564244de5c6c505951a2af7d6427244f9cb70e036cc89a618710376ef5474a49672e2353c8d03092140871586d432c1f6c87e2b8b5b581a5ce0bdbc331ec572c9fe4e75bb8e73a91c9d93278e554980637a50fa5961746915a7572816ecafc89a76b763f5437d41d171ed926f3e0cfcca5177b12387850eed456e3f1d7679f2926cbba47c64a67fda6de4eaabf7139395fe71046c25f0783e3b6165b914daad5c50d9aba33a85cfa1f21794c728e3e150d1db48b5d55d31a309ef307c70483532c38fde2c6d719dc2aef425434c0462757bf512731e11c796215623c9f12946b0254cd05a461086b6e5191092c8db938e3d7ce63658b4a6922244b43410143e7f06af16cf8ce906e944e4eb48380ff105c6c138722dbc5b218d29664d659fa8e9d80515fe8a418af43ef619d601e8077688708db8f5af61ceb272be786a02027b2a1d5259c6d0af4243bb20cecf1a535af2f95a7d58f436f442bf21478601c7bd6d265083db0cd06df3a29494f80d411da6ca2321b021572cae7d433d5205852b21de94ef3f6c9ad1bf4af9bb05376d5914617c58a3cd5ee2662b78bc4693b73ed894940e5c666b080722a4c37f3f4477bc6dca84ac4e9acffa485656ec22da8301e6d263ca80cd9b7bb84a20ee7b43041f3d9238222bb71feb62409fbb396b723e53d481f2423ee68d7a3e65ab720578bd6f77e5adfb108cb9f7ebf92c4df696de5a2edb7c313b83bcf715f46ec9f8600751c00fb8235380d6779cf5b7e6e86b727825f2c0c44ffd6aad457f70d988348da31f28d93aec86c17ff807f68acd6a8b1c7e4a5881f8be470b61498a275170c0d1f9c379b848192b6f71c260b0120e98d57c54abd0a230b29fedf4f339d0af414cc4622211e2b244c48e977edd62e21c31c4a44356e91f3de940044497824a7f9223876ade68ecde2dc309b9891c6f959fcbabb78b49b459760bfa16b6e2dcec408b95ac74371337e9a38ba949cb11959e15fd60c420aa95a49648b22e7ec107b6513f6f89d9dfe2b6a4bfa675db728cab27fbe7b82a5c6313a362cf54b2a1628238c73c75ddbd7ee34af869b3e9fcfb557639b4dda364523187eac6c02af87d2296df9bde9f166d1e0ad84b8a533b521b7539408b483cd38cc85330f74430c825ffeaf60aaa752db578d1d44fc398316bc96d136775607793e90e8670aae4d3fad86be3b08c743147f9778c9aa7ae09d4d767b5e8b759bed56eaf3fb2ab7f111fb4f4ed36c17e3854113bece17be75bc5239ba0958a8309dfdda7d533d28a100319f86b23c61d735864816dcabcde97db428b5be46b96e8f19a7aef8acc7041537bf8e5fe26bca2c347fa97ace6ee5e8598b9505bd6effcd939aad71de5dc357f5f78f62c4fe627334009e30e86b11042aaa81662591885f54fba3463ab185cf548eb1444ce147116f131e86618a14d90fcca26ae6e8b44b4312b7002a8df3833ace1b8ce0de220ecc005105a194976ff13b2098683c289b4726122614b7b47d90fdf6c2eabb9b73320e5e34105041cfb63d227913548f574a80db4062f871c53f64696ed14159478b866e9b1788bb00481bd09350fa8f8533693bd77b18d2612e4b9d19fd380592beb0a8c31c02ac0a8d1d537185f4d02fea275a72c7df7e5b44f9b94ad668465db3d435338987bdf66f8ad3981c0bfb5c56025f99ae151ebb6bb8e68ac498c5af523a3c73c4df96cbd5ac77927b07b815614472d4988159878ace4c602f922a90832ae60c37d2de91a6c968e50cb0ae61f233bdacedecd8c9888412547f1c1c082eeb5b8548283d50cc2ace1c35ce8648f21965a8151e43884f2261ee1cff43203bc6c26661a85d112e17d0bc6028e8d2473c955179df41cdc6f060b76e0348df92034338e91ce3dbb4d7964ff4877a08dae5732d7ff77a9fd5363836deefd34e1bea0882484a7ab746b4495d59b3e7f1935b27c6902d9706643b10f3d28d8b73bfc236cce5fac8acccf4116cf674d5955ae8daa4154a400a5b481177b3a3195864d5f89f2af675c22ee015063592edfd18d2b44d74171cb4a2a56249eafa2405f36974817e052a0154c07eb27dd4d630b362dc4b1759d40b229a2df2dd5a558055c7d2fd49ee8f7227dc73f93703383615e07b2664db0f17c16f97f8f68a54d370373b98f47a4b1c8d7b1d61c9e7bd182494b864c56476e1686bcae59c54c8062e00d7dce57107086fe7a4749c480bddcac5bc8fa1bbb17000d7ee40367e5a1f766ccd50859b6a3cb6662fba18eeca8deebdae2e5fa967cd6ffb2a922ed1b1282fc1467c3cbf1dc24841e6baa5a1a33178c2b7ca69f640fe9f1fa762eb157628434869e973a7c7a20fc0f2fcac283dd04f1dffea266ae60d768b8d38d512502899495f1e901911e2f22a7b08934c42725d16ad16feccfe01de86039c548fe82f190c4fa3fddea28cd8c9a867c4d5571f89f4ead759e633e3be5a3117d056e545abd8620120be24a7abe3a2a0a58b26e0bb01ddb39f7e2abafd4d4030b12df07237f7bfbf63803c3c52c1913ba03557bcdb83af34385d8e8e85a858705fddb1bfa5af90652dee9452b5ab9cc01c9d92bcd2c387e28d4b05683db3a05e432ecf33dd49fa7ce5ced4f1bce8ebb881897ee786098e440410374f0db54182c3e7f3d7c80c278bf5e9a4214fc2a7ab36c2c345e09debe20673ce4bddf8636448d2c4b14c423f1ac407aaeb567ff81fa5100adec8c6c744fc3d6f6495c22c8d3bb5ebcc523169b1baf09156b968059e353afbbb27cd4af34c36c4a31e5cc78402590f2dc323ced93f6bff6b60c5f7af4e0a3de3e3fa9b766026750f5e0e5ad10786d9de855e9619bb419d3133def5db5846795ee695e3559ed52ab03e1f0efdb003f0e6822be8fa963a12b01bfa28a8bbb7563516e64919700b8a8fa6d90a8f679afe4da0d1ec03381e06f0fe63b8a0e0257d6f5d35f6493d8f3db37f82770f9311a81bc99accbc0ab523fac65fcc4b2d589514a2c9126d6c2aec25af637c059b319859e4ccadad72c70ed559378c300b17472dcdebc40d67a43feb20c442fae9c2760fd9b0ba5fd91b7289a13321d7e32b3bc0c5e334b295c5dd0fb8edf076e48ce943908e1859a87af51f849ab3c81b5d18d874f98be35e546f986125affff4569afff0aef22345ac3f9eecb6698c1d73867ac175f1292a1b9c8f02b5a71f81ea314ae3576e461a79f90ec0cd6caa4f352fb0949e8d0b61e00dfb83e5ff5df30e552d51d2b4498da9cb77e828e4aa1b6db881d5bd88116b6c69e4cbfde041b38baeae2068edb408035ce24b0ff815e8e1ccf66c1a09c3b1875953c44571542729e5d8395e4110f2505556d3c9d0711d5a111542fd39aa99f8854e5505db1db8afa2b084ffd7e3b3585ddc67a0954924a02fe83dae404d8c8994e066844525cee78c40e992d8b8b3e31d7befda6f22647bcf7746744534f3002f0ee00bd8f2d2974c8f515e6b1459b93d3b54c0858645b399c8469970e83426fde2a9e2bb0e2a888aa5a2acb9810fa164247c9a00fc2f0f34e62363eaf0b9c3a763aa5117014082ed8bc6c4ea863d653a3f50b0070d8a5949d6c71bdbd4e89fd499cba014517b4d1d48a3ee25ac49cb6993b849c33fbe577fa118086b1d2b812d8df516d98842b0c3e4237292799c9c96289daf5c1d33d27f500074c052e93359460efc8f2dff7487682d975a779e9f6b07e528f92c5291f0eb66a505fb897b01ccff9a5dc9196110dba8a7a52eb79e90377afdc2f6815e7b7831e460a17522cd28b1386ce3f83f07457ee89a25505fadc04276e00229ffc8014b79f9cb14f064610b1ee40304d613ae96a362e4cfac69ab27da7bd8b33d7e8d9bacf901ceac6f7ff494ecb2a5eedd1fd81f24f39e4b6cff1073ba0185e0452509c588cb0b20958b56e1ac76434e0c9f2ca609db23045fc4e487c60409b0c7d07d0bcdb233127f8c184e4dda46bf49377a7e3923c8a1ea038d5fc769a675a996dfc7f13dae4bd58a2223f76316093ceeaaf0db53f4e8b4c3f243e4b9c3f6967f17421bf5e5933e8e5ca8d19b1bf48ccca44418f30ea3660cfb7a457bcafc34940ec174603eb1629eae240409bd48e2d950c2178c8098a7e6904e1337224f2bdcaa8f2408226feac500e1b73565cce51e97b201a5b190205a9905767533b7245fd4f35275fa937e083a2513a879493ea25f5bfdc70952796ffee895be65fcc7267534272d2ce6c571443940e96387946d92063479f0a8592ea73f999920e5bb38739bcaba2230680706656580894e908816fbcd43ce58689d7d52a98fcc3ba99eb87063a442390ed268f0abf65566dafad582f1ad0b2b4fc76668ee27d1c6385e2afb1c71f6c860db532439d22d9619cbb5e3c8400fe9b6b14bcb90e9974e1182b3831baba5a70629ad47389c7ba7f504a0657983435a446515c1b65d879bdb113a5288d9b69ca7c460a2cfdda66218ac7d512dff0d45a2eaaa93880c07743f14a6ae8c849370ebb5527d271b168c27cb34ef0b3ad6747848f4892f7d80a3e592e1e04f33a3eb7c036d2067e133f0cd6aac873cbe07ad6d87daead3385bee7493d22ff86e4ed4ffb697d2b8b46555b08fcf61e71306b929b043009bc6fe1e952061e5afbefcf51fd7badc421e1482784584c535bf3d6055cb1911b0aed3fbef3f76499ea91514826dbd862ca6a840ce91b3fa4e4c126999de43663a78404c2bfbf9a2eab901fad08088189fd589575a7d44495942ef9e9cf3a94760adafdbf059d239be76296fb21903dac2311f8fc31020fa7e273bc5071133fb4ad4876ee763ea564067f33acf3e1614be44d3b0b1522d55e7855ea78141c9cc217530ceb72027409814c825d1faa90dba960b81ce4c54a1b9e3c00cb38a53000d1812c309987241ef0511f65d52a40edfad30cbbf057e281fcac9bc44f4b9e03546951485d4b49f6dc334761e50ef5f5413ab562f8591303fc1e17edd87e3b4c286218bd2dbd3a339d59b6db9fb72484250e2eac4d577024150701b264cb9c4db611eee99b5b9957cc3aca3d95b1611d1ea3f4f26fc16e64effde5cc64a2457a95ef406816b4cbd5d16d1df2479c101286b294cfe0258238e57930666890ab754050b9b33047662055571eb425c5c61705b08abf4f0230328dff7e4ad12552a03decb7556881dce9b08f38ddc0cd079d0404332afcd61cc441f72bd44ecebf9de729d5b93002b4748b7c18e9a92039171a444aad8a1f9c70ca06d58d21fb66c0e48e7169273871634eb42b523f5dff17b0e72da1675d33ca6e94e7e00b49ccabbe8126ffae91983862bdecc203d4be11507358c1250d7733a837ff776b2875d0cdb872b746ac9d56700fd9938732ea86716f586743aedb3f1f4668bdb215e6b2aa8ad15a7ff7f56fef107e6149e728f9ac31a91e33bfd46f2c66d02d80a093d3dd7ebf43caf234c748664795bc6feded6960c75075cef726680fb2314746f1b6cf1ab8fda839d00f0477d1ab6f3badd421834fa89a4ab8075ab77b738677a4cdf7d54af2a81d5ba9bbdb893cd2e8ed307d0f8e8111c19b846ce4b86ebeb111abf034e1cd3b3b4c29c6f7eab477e620a4c46c10646ca22610271de58d6091ccb340b009e7e21205f1ce53829cdec1ec83a03f81dd1b8acc4d01d98f5a0c884a8651ed4fdd3d202da43a84cd6067faa56f98e03f559eea02ad958e125f2312ff97bc3310079ce437b383f247a9b3feefcb06f4c568772e7d945ad21af744a06069d837f71191dc98a243226dd3334d301882f3908034e671a3ba1c05ccd1df116f4e527165ac87e4f2e0abcc677673fafa85534d2748a0a34e3be26f4a6b2d973a8718fb7e5d549127f4e4dfe0edf1b4c3869a47e832cb771668bbc3fa60fa463e0af201e614f111a3e86404ea2a4502162f4f1d2d73e5617ec90e804763e3c2fc4284212773bc0b0943bff7cd8bfc5764c7d829719c7ce6f9c56130dbd47871f7d635e5acfa33d1ca9f3f1505a3761931e8cc194f0d009c19f64a62024306f7a33e8dabf108e70a6a4397e94d0140ebf01a915930560ee551d4207065303db8a0d402009e3054196ae920e0ee15fb3431d5de65aff7f65723d79a087f1c8b29534f29600ef0f9833ee880987361f3767992f9db3873556612790d86aa685dee4d086a66bddb45dc68da2d8c8775c84739da8a064458ba96b040f16791c4446bf0885b71454fc7897b269e1964b1e81af534e5835e08846d6fc7fc47af80cd26d047630c1fdf0d1ee86638dbc5a6e1663e1ac2df0013516ea36674936e5e66a38ede17b3b80975113311a44004d532bd66f47885b4f98fff1db4f0d7589d8f666eb4eff4a84fade4dda166f2cccd6a85126a9cf4073bcea3112bf78fe8ced5e40254624b5b11f61e6a9dd74067efe751c2d596c6514a6c0f30440f29b972a8a0ec4505246b010c324c7f9bd570cd37b7faddfc592db60677fd859e31252996318eff5f1c329d5ea505cf2b0e61d5da0c2cec444916ff1c91db793b32c6441cfa5cfbc69f5c374c0b18f4eb77d5aa5cd2cb78f4f297a61cd15c975cab1762ab7ff8c2d23a427f72c91899739e26bb2eb0691c85021a1b85aae358790692f5d046c4dd08598fd65153672549edef78ce09883f7ae428eff5a3224516e1c38e19c353a2ef898ecc765e9710e4d39a63c962ab6a5d154e93eb4e7bd5cca9138be69a27ccee56e9c2403f2ae4cb0bb22c9f3045259211f597b5016292f0d91d8fd52fa3b38b2e0b684d79952962e2c103be16e7e9c066a87c016068f52a0e4c0a53e879ef5c9b7e2f0c92685742f531b9b47af62f5e8ff1b14ee01184ee95297be178fce8c90bac76ec1e06e6f1bf9e9f00c1027ec2fa4bc80c04decaa52a30551c45bf38571b30e09a711360e5be622421ad9f5094322120a743332ee429eb4642d333469d2685ec663ff04da55e26f995852f3d58c40c6bdf2fb13a3210c49023a5eb9bf1da360afddf2015a72b578feaec24ad773c8809e22edb65056b56f30d326ab0fb92abccbfe3455161a26e478047321975e80e7b7ec51447d4b61ccf8e0d132e20ec51922ac0c2796b6ff5b1042aba19eb632a40f396ee4b267d8086149a875be843e1fbdd0c19f63ac0687cd51b3f273e4a45faeef8dbf7812e1cc73f6f39d2e835c77a3539ce70466040db717d33b9f4e9fbf9df8f6fc56b446c037cffad1b773e6c9dc1be524014ac098d67d52a5a85eea6ce33af1c4d5b5cd8bb4bd043ae3bca5bc7112e481e3c204ce336b7a57187b4f0f889fc63f7b7e3fd5f3a65bff39c661f9691fe02430359657d5ca9179760c9450950ebc94d3756348fa74454a41fae128cc292335730b3fdcc480e0354b7b82d6116e1cec6203038ad30d0b4084beeff0a31af3dd31abc7050977afb11e2fe14a +MD = 9020ba80ffe351b4f1c17a56e4829fe6edd2b15fad0b0a29d81692e39ba8b2ee + +Len = 85768 +Msg = b5fce59f034b8940b3c2cdb9bc8dfcb470c1ac04a6eefadb18f4173d0a1704b42d559946c2f6cca4026630a4be40bcf143abce0180e96f486b2dd9aca0ad37384bf9ab14498b95b58a9f1351ba45c49620b4d29bc6e12f17da501ed1542af657d99122f3df306ddb13167da8f7c49c09d084bfb9bffdc0ae2e05ef946db6c9799dc407cace0ddb7e64727691bfe6cdb41bc49d43b466ac772ef353dd35783906613b61805c4c6706465c06f458d2defec81c7420ed437bd8a4c35294f299cd66eb9d38ffd21299db817c36b90bb1574ea1334d3ab2bdb33b561cf4a1ed400e020393952e788afa65dd790dc820abc10e6cb22f784bfcde070ea742ec6e96824073c57ff595d9110d22fc9309dfe7a3a5f24023c2ff2783a4920c435dbdc3b38902dafe3c722a663917acd165908e857bfb86300018672b7aaaf2ffdd21ee2946777b1aeb58a382528532cec27ac7eff84f2c5e1adce35df120017f52e4406add9b4fdceb8d6cecc13435930ae6bb6a84b5d9b5f994c4a171bbe2caa64ce000b836ff4b2259ae2cedec5e26231c927d87f6353e8387317f62423de8bfa2f6733d10326f790691cb3d755591f76473b169dae900a1ff53802c7eb9e2872dac49d6f09151d8db3c501b96c1dc6c06868d92299d033c42512b3737ffbfe437280cea9fc3f8281fd843ee194a0d6c49f5996aabf8503a995409eb34b787c0069243e0e6716c4f1b8c2d1dc4992ede77e55d5a28a3ee854c84a0b13f884302e31377228b43b63717819512605646a9d68062c86746e503a3087bef1e1afa9216d32f1756e0ddc65ade0334b4295eb7afee2f1d31883e9ee6091f0e9a16b458e7f9f32711f1e9e62eccffeb8ab87def49574cc24e11003c5cae16777b24793b9ead4bba821de37ed973129fa8aeab39eee2421d868a33c74e20e79189eb52268219c038730dd276a4fac3b8d7b1f07de4b79898a19be02604861ac38c1446fedc62d90aaa69beb6d78a9b9edf6955a374ffd69a66eb0e41c60937774b465eacf4b31f96efd8b025ba4a21ba8880e194e6e2858a9e23c500dcd1c7148f2aa118123219450c02aead9563dd729a9b9d3682872cd211ea0d4b8d0552022068172a7e074f7fc790c335affc572fdc658f72901753d987e9ef0a23ce5ea8c6a7c8cb7f5b49adea2af4a6513e185a1783c13157b98207c8c87225e4537570498fbde15f5690353b774be6c351a75913a03b59209642c49b2e9f8419bd1ec170c9fd55641fab818320cfde4d5c8c96986203d333d51a78cac37c100933e20304fd9010d7df22f789cc8876378750776e712388d8a0938b1b3014affede479fced27ff900bd7e0117247f97c8fc7a665c76a35f571c3366571d6c4a3ee5d7fb93f1d1f726e24506f3d0bb2749e092ca2c19893ff773856f46318eca12711a801e028ef49275026ee677440f025e200ba401df1201cd0e0faf158115c2aa979636acbed78d9f3aa0b8c123383b9bad918dd7adbfbd5158ae5b714d1596b7d6a6a2976a885d88770631585f893cc2c0c3ae42f92e7328eab513ecfbb0d6c15f162b6c9aee4a57400719e100e94cf9e20bd1ebcd476b794c8a9d2e91d0c9efbb5099d354f39e351e0b37070f42b5689ad0bc7930f2ec6d0797c1e01a5cb86a71bab473a27e9f49987a546f937bbd39707b38952b17402ca24349aa9b3ceb5909be43f58b7897bc36bd38c4947cad91ec720de7c49eaddda5f5fb331e58aae50bc3100018c7ccb5803aabac1b2dcd9b971e0316056f7ca99817a124aa983d360031e13d4f54875dff5a75cf2e76647cf8e7e2cbf672f5b70410012448e4eb73706f7f543a070fdb3a855dd7d83fbc5f983671ad9e905f307148e4dcff24fec5e1e7b2ece1c8ae58b9242d691e701b6afd71796505af043b652711f3d740bc53dd0041ad4a80aafc059dab300af1cac5b102c29a33b82a016a155212d8206e46eb22f6417f154ceea55aa0d1a3aa11993c4f14f531941aa9077a6de10bac5bc594b5974d8871dc5721c1d3f7f183370e24c2371e06291c5cc5be2b0777cdcdf95e21ed7c6b7aa25e023c0e48fd65864bf3c1f2bcba6177422a49542d24690a09d3cfc073321ae52ccf32176cce36447930b60f7756237582c083b0fa1b695b1e7b25d8dde538efe8100bb70c6ce0babf640854f9e0565c450fd5061763b60860dd8cfc608abc06bb4e2eb6d0e0493046161f8ae763e475b29ea5202b043659f6816df6a42b8d73cd0f05dc5f315bed35ce6379ece4b408f2f55cc4df07d39609ef2e8c52cf957e45def7f16267fc3bb5153ce8ae6dae5d2c9c63bbdb737406c0b03987127fbb6e4c406cbc808b1660ee7112a0d505babb891c20cdc65001f2444bf4ae8b42e78d09bfcc0662a490a5076d4d6a0ab5c06c31fbfdc149a761a2bc48c9cb66200121a5e28097afba5252298e550cf584a8b64bc461610b7f7e5e51301fa44a21f2734731ee3710d644af7b5e924e3d7a5ae2fffcb473b5e03f6e2b895d03e04ea0cb18357fae2dfe4e0426646dfa8a9fbf37772d5dc0eed28c1971deedaed0aef47140759bc3ad3d589851284cd686fcbdffd8dec6105f5e4da94cb4366dc149d6ace67aab4039984ab4253398acd7983d804d98562baf8b6a64e395a00a5c282fc532ca15eb78190ca0ca0cba42257b2804fbe275d88762cc935f08934b4852e5044def438c13c786a4673b186019ae64d10d448be18fe9597de79677fa2dcfe2b15f719bedb1aaa10824491cd05a38db2fa946000c6e2afa6ca4c5b4ddb5a80c148fd687d5fbcb43132abd2d5991217368f8713d22cd2d98a6bd20b2bd86e44d7506a86e0b9831550ea11fb2c2667216c3214ca8ea53f819745b2cda61488b8c1bec6eb85831e4c041b1f815d48032ab874c60aa2ea995671ea6739293a4a6b14f68b1cc846eed6af480cebd5788691afda333acb4760c68ecc57c4319413ca359a2f81457f6533d6f392c1213251f4b6d4b4f144563630626e1cf56bcc9554c81c3cbf799721e20f902977ccf005d251e6f3c4ba918a4271321f53144e1f9930ff3b2dd118957fadc03996355c12a925a3580baa83cd7b5fcae753e793331604a59362e88e405b55e66b92f6b0f8f7a67c5a5c80a77029729afd7e42367049b7b1ede53c62b3038c8508048da9293c38e4833dc96732fb5e24da48a09257b2dea6933b29305e06b62eb741769f33e5617e6b06015d565f76fb0639af4149dfcdf63bcb4b71a1e36735f1f02e2da981b4ac6a6bb5048ad4517ff9c7bacdc72f1a23401c1f913f18145d409720beeaafa6f119c550c720e872463d795f92602f47a038a42229862341e71b8d0aed87bdccdee1b9614fb90a5dc039d50a39a56eeb1f8e09dfa507837475eb682914013a7ad86aae62f8c3b878808751471df75c58d3d8a3c49e43b7208c48bf27dcc7b455701d1ad24cd18166f99e8492c9e676357f71085d7fbb3cea8cbbd863927ba9c13861853bc652e38dbdf7d579c7e35ae5651fbe26c3ee931719ad6a88ff7d896293d0840bffd85d61201bca68928e690d471d1bacf55e485a95a5ebf45e5de1ae04f28dcf53c26d95d282d9ebb4382f0177f1d75c9e7acb09932db332498d30f82e4009025cb1827047c59a8f97812b568a4647a229c4a9c894bd76bf4b9bf5f552319c2195163aa4f24c72a0d6f9cc90f073033a21ec52fc0ccd9d17defabf1a235fadc977710488649ff8ebdcf2b1354d208071012255388de6acc86e39eadb0422b4468e526ebf0128a3ad240c47b7f2a755e362373ef27a911c4d93ca07bc97135645442ad7ad6a8ef98146c71e9d739fea1daf7b6eae65456213ca3b94333ea9fa22236aedd8032b60e4af83945a5272b36c536f62e0d08c14c78c0f2ed37d6f1689c6b2ffc36d968063e8f2577311c8486bf893ba2e4ecdbab553a52611d5db41d88863bbf40c58ce7b6d73b68c33f92f990988e2eb3292ba79abae1882da66f28af32d70ee51daa197b7885fea3b8dcf8ff0af6bac1e639a911e7a848afdaaaf3d9150dd16f0a4a04551b0b2219b0eae9d5877c2e574c8e17806aae8aea20eee5cdd7e4f024b3f5100b68d4bd6c4f4535dab92772bd83b15ab0eafc3727a1c166552165534d4132a56706e8b5e5bc7445d645ff6f3bb22adb69109835ae84aede379b96e231db8a2b2f9e4ff4cc20ff8091d60c0b1901820172848c6ec7f23ab53cec81861aaa840a2cd7116069a26f4dd212572f9e99403395ede0c8ba13ef542cbc2e254ed5a8aa265a37e3036b4b1663a1e7c413a2ecdb98f39a2dce0e5421cfb5a3a816857e73e5cec964e3a21b420a2cc4b0c0430f60443fc4844c0cf185ed7deaf8bae28fce30dccdca52706839905bf7ddeda5302a617965b57c344fe94dbc0bfb82136221d02c4dff96fdb862bdd58731e2f0d7a1b74986a7a6aff5b3b81b0c9bb6417fd58e6550eaf770962758437c96e64b8c2d0d552e4412a46b4df641f7bf9d936f53302fdf73bff187ef2b4cdff343ded8362d486573083c3a1dcfd8d34f8032b9027e34018234aa1523fc99b72f3fd24224ddc8331ccf9fe98d0b85a932a745e5494219beffa0c0c72994d10c34234f535fe67da127b0f4000371f280525af57c9242891ed2495e256abb9de6e9377c914f1011b67df36308e9cac76096e16a0544472a2ae478aab84e38a54e36c282865c22297b04e01688a6deab52e683cb08c619a4e91b74cc073ed5904b030e89baefe670f6a5be3208a275475c2a8a400d8280a0646087ed9ba05807e63861b8b46e228b3149d7e210455743894a3cf39ddf44c6a19cf735fadd8ab126be0437fc439f2534d6714c29f74b46de2fe2093f452cbdaab50dcbae5e3337137b3f2f1ad425e40536d598da201bf865bfc3ad7c1c022e879511d83f8a1b40b55859c8968b7c70ae4f4befac288d0325e32905dbcd8cc03e224b8333c80975153d9c29f9cf6b72370b1a7926776a0c26845a39e4be931cd94602f51482c77d3a134e7bcb07bb92a6508c5dd07579be71889f721f58dee95fe78055691f1b022cc0b8e5929d34770508e7c4328b84be0dd940d8150337d0d9ef0bccbb07cea9f42e2290d8f89eca5b1a74d5d51f51b7025d85924d2864794e45ec8291a1a81c9943d3a32480c132b16e7bb9409baa4f59feb6c94f2d2e8bc6d16b9e7357700323e91547ff9d65580eec4497fb65552e19a21aa4a47c5daf4a7bcf49e990f0059b072ea4f0b751e37a7c16988fe71afd4a33fa4cd37bb98ce02b62aa7cb5eecb088567e17f364e7cfe063be48387c364f4989ee8649409cb93c96aeab32c33fd724a0827348224cba072f9a25faf160a20b94ea1e02e1713683d3030175e8742e140599d98039b776aa899faacc6dd98d67e529fceb0a90d696ffca52fb3b1425e4ea26c32227a2964906215f034deb51ccff109b68488609d48167083947ba6f05c2abb8a458b8895139e1bb660e20afc94750720117cb50caec5bb9b67ab16a0533ab329d6943d0517933483b4b03f7db524c395bf4db4bf8a52ab00950a3975191a7c963b5eefbc858b86e19712fba71a47629cf6c204bdc5056a398760b87797123d59deb147c346cc3c5771cee683ac250fbe1ea44e0e452620cea4753aaeb56a1efb2555ed21409e7c6eabada9185108f0829fbb39bbf4fdf447531068235c6948037a1188de5d4b6eacab77ec6ff2362d70e2cf6ecbb9d20f2dfefbeadd7258e3f944aec003841a3c9cdaf4568e78f8ef104da894467bec99080cfc67e4e07f1666eaf53f969d520bc3a0eb907fc9965eeb490d54352494b95ee5dc88418f260ad1d6abaaa28f3c06ab6626424acf58a1883fc8569f9b1297b9f162f4fb6695e7c26f9bac2c442052db926b13f57086e16f959f418cc8ae5ca09758531a4c13d4c11d8ceb3ea3461adb8e83ab8a96674529b55bbe0493b0309c42844fa72beaf95748450fdf94f58434c036b3102844f63d05c47410e45f3a3457b08ea8ea607f0b588fc118ff76b86d924bd3900e651b33efa10cb7a304a3f03fa2b82871be8e66b532a9f0cc12df0e6b8cb2113012dd94d9bc2d02b8e792586223762ca84c4defc8f66e6fe40e219fb2bff99b769364e72ddb80f70b5030f528fa70be7751e52ef7a3b89d2db5a5a9d1ad4f36c82fd7b452c7aca18587a54efaf14de5c6177eabab003183904e94b42f1e5deb0e305e84b0485a050cd318eb3eceb5aa7de43eef4dd67f28f520154634dacbc130dc23ddaf25322d897eb1555e5a52138401508143ed4a94457451e948a840c1167c4b4ab728db20e5ce9a13c05dc92bc3b6dae9f70d3bd066927024d35164f2a85701503017fee6060cf8adce9fc5f7224a05b0cffef9e342c2997f3d9ee05ccfb76b7982bb4288d67ff6aceee7ec818a07f85d35872dd5c04cf483ee545c0771e2b14c15dc500d3c71b9978afee6d0e133dc7890727fafc777aab74f3e7ffc7721fc515242cf7d1f286cf609ad5cec1117d88948859678418de3a4c623f242cabc74119fb468e069ed3552d3baf6de00fb1519c5891b3815d4c6d0bcca5de150fb401365fbc33f01083c3150ed5bad9826baaf6e45b5f72b957cc59afc66e2f32689df0ddf87a1cfc1aa1ee8103461bfe2f0d4ad830dbe6b172c0bc681b84c9a8476fefd285d0fbb60a79e03e928035f75df0fe909cb94bda4ff28aa21f9272d5e30f79f9eec90ad2c5a3b0942e0995f28aee88ba0968209821da6aca4d27b93fcde525a09dd2c8d6eec7c62e1032ea74386e7f910168f37faad0d36d1ea51b6a6a9989530d7eb436f85e9768e3ac71f0e8e959c21f4c32f54d8e3af71eab07da4b950badc83d6b7744b0bad132d6eafd1ef79dc9bd826d9d8c5b27f4c79a1d03d350230d588f4d2c869697037832a3fd3d01c224569c11dce9d010d2a402b97bb45375fe3904e7ab2058c25c1e504b75d5a04d4e8509be47d8759c3d3e656ba641375afce40ea987948fa367afa02ffb7b4bb5c4c35bc142eac41080e142a2281c447885d42d21566593d092a6b2fff2908c92039be2d9729334144a572b0b5598332525a3e0ed7c160dd0899df90a0fb7bb48a7796f553b645e1e05ea7ef5c3676c0758bdba4c8d28760998eff2fc874370600cd631c321d0aaa42025cef005ec57859b8c29ecfe0f45026d2731360dd6446ec05ceab1ba5a923d35938b9871a99e266ab9b03d335cf34162ee244517e29fdb5e57ea9f5974bd5fb2ae454dbb21a87052b0ddcbe174195d167f4cb819fafb2c3361c1eaa3b1746233f07c8e26e6fee9cffc03077cf72fabf4852afda881eed7ebf4f1321d93600b15e4a1e8696c1a095f05d07e6a489eb4898a4f843819d374e4ac08e42b9cf8b0f50555dad71372356c68c6af3e0aef0d41e91aea3d154169b9d169af5230b6da3dccf8d4148fa014949f45f86c90b92cba3c2dae4c16c14cd82fa3c225e1230d7cc61b7296331c1d4403ef187a9c55895efdf84ed990db94cbe147eb1b30b5b12e7b2e24d0a05ec61751125dec607cb9aca8fb2a6a15e8c801c0b678a6a1e77bbf46b1695859e0957ae16057369f77142fc7a6ef7208815d26388ff96cb750b3cbc335be91b23a01eb4f5982ed9bdd5f64c49bfc860b2dca85a324fbb1d359ffc07b3ba3116bc3a1e4f55e6f860827c1c84a4ae01a7056a6bcbb25ee2aa89bc639c923a55bc935ebe46def8b7446ef01e6a32418a3ea946847caf35f4b897e9d94579e43d56cd94696339d555cea8b862c79c824b6dc5f85935d2dad79087aec6c810bed22b9564846c0e85b846595c526289792d7b820954c0c357757a829392eefed3fa851157782a0411caf4a8645405a22d16b20700dce429b4b4bdb021a57fec289eaa69f4ad65c480711fbe59d2768fa6ef587d655868acf77ea338df684381c7a7e3c6c38be5f6da9711c2c3337ef7eca1b60bc13215f52aba724255410266b7fb78504d7b7141282310dd28dfe583081314da9ad1b3ac545073f80c9983420084b12e19e3d34d71fd6537123e73da012cba117b9d0a797e27ee808bd98fbeab28d689b02cd1c3bd0d58f708b8f0a4dfd6efd9e9fee102af292b025a67ee82bed12e8898bf344b143b304693b5238baaf8fc5a6e5c01f2ef3d71a702ad6835446602545b02c38c7f6f374b3a9dd5356b7929bb911f33ef464b0a960a11c47f42cf9a14805f482f0591b32f85d8ce4a2a43be25dbaf3da1bd3c3cf8fafdcc0ac2f43ef1903d89dbaf89ed19fcced673ed3d03bfd275e7b25bf650f55bd8467bcbbd361312045039843f2d3228e7b558be4f40b200d7fbc729628eb4b40afb7d6612c9a18e1b63f18c9bbba1908c32a0a461bc25ed3e3f8b2d683d5e8dfbb3b69adb41c38dec8aaacf86de8fbc2317f3a85bc0411f137da371f1a61a6e1336ce6f00e4a396de8f0c56e6df2435162afbd025942d20bc7bbafde31211e0ba4b6eed69fb66315939c128a5068782cb345d26a8801278a30276d728c76b6a58bc3e1dfecd37e6c54f6e4da99be12bacfcc4b2cacc18ad2ed97f09a60e4f95554fe506a8a43c3e8b9abecedce659b91f4cd67b74bf6649c7ca7e9b472ee5e819cd0cb04dc69dc011e256b2242f18b38eea3b898fa225d4d59b1b93f17156eb0cfd5a24d67c83f5c0eee1016bbd46a1609f9ce401bd7cd4c015fdfb8e1dca2696a978692c0e1663008805c398d90a0bfd33a195b45894d3ef00cdda057b682220970d8735c47d943a766a0193cb8c7acd6ef1a38ebb9558cc2432393ed359661090c287dbe6e110d481b9c344dbf57638183516792ea6ecbe48d51f216dc57ad05c3f7005bb695d38719a0f93516d85a6f814f65cf8ef162d365d949690d3e7c6c32b4a9b8c3e05cc0eb4ef68741b317fd7374c1e62995e81b473a18585ab345c8d2e1e84a18790fa20b06aab8d28012b7d451fa9b4cc4c238bbf4cd69576e9f981f1f3aa426d84296e358844e4bb7d12b2e778e436af697983e89f71055c8f04691cd1f4b7186bc0c1ec521bc1fd2e9c3ec55eb72f6b3cec6397a23e2084ade70b57c04a47afcc29e17dcf186c169b32e886d90ae9274de5f5735c262d17cb092f48c9943c5a30cb968f08242c2d4d3a79d3f1c5aa0c25caff25d50f733c71d29f9af3badc431e0ea8ca03254b6aca1eba53afd1bb424b044a5415e33b1c28aa22f347a5708f1e5aded8ca050ff69c4470af1a1464f047fc9ea92588cdde77f97ffccb3b3f69b817015e65aac1f94a16668e3b77ec3fa219c2cc0ce871ace7277f5c896593f775add907dafea89a5dfa639918e29d56e3c28064d2e96fabff9ceabb890cb261dc852e7833e70e025c5a2e78bb3ebd5e92619e1980750e0547c188c3d216e5d07605c85c784f3959cf9d90d22c71957e385de5951c7398e247fc201a6b6d746cc9966f59af1d72c63f2b514f71656ddf5c1e1d7db1ca536988b67c685ff7a75c5fa1ea17e2390171336c399894008da8860c0e7c446488c391586256b39ec6c9c08c023f188a2e8333c80f559d2c3c023e8f7f38df287e17ea489b8b714818da72c07f795afa4124c7a79d2d92d0c3150d0f3a5989fe7f8e1cf0efb0a1dfe6b8ffa6296caf70817b7871a9c97dd46a087af405884bced150aeb7256d494a788aefa5c7c11fd538b1cd8efcd1651f79030ea6a96d2c80bd842804076973711679c8242320b20faced4f665eec539b38304f8deeaf34fd8b5313415b4d263c08ad148d032f71072558846197c24e2fefb5c7119bf66b2b83e4f5d5eac06b93954d5a47309963a5ed1af6e86efc5ec3e5bafe9b7aecdaf3ed6059287c6b495e078123ba720490d24b5a2d61ac428b4063687b915137883d10eec4a2d9f6c885a473f64e901901748640b036193bde8cb1e6c65de97f7df235b7c0abc808f0f0b5485b6b547fbd74e7f607cd7d905e90175d67650a6dc2f8a4e2d4ab1249ca88812bda7984deccbbb6a1ba90a0e91434ddf5e6137ba85e39a598890a7f635d335242fce0e9e037303b6c51e54aec06614ad5ccce06d9599c80016530d7fbb1da6eb548084b2b05babd7d553642443efda726a1fd71a8bc087c44f285e2bccf661ead475a72673e4386fc4eea5197c4f13c0feb0a85bc8e67e28ab872684bbebdaa527f3c253debb2dc12c2693f8e9e2651b9345c0abed7a0fafa3e5d305386c95acb7a172e5413ef08e73b1bd4d0d6832e4c035bc8559f9b0cbd0caf037a30707641c0545356bee151a24068d70674ef1befe16f872aef4060faaad1a968c39c45dbd7595de8f472016b5ab812d77e545fca55000ee5ce773edaa129eac6473410c2499013b4be895f6c0f734becfe994306e776262d4528ed8577218e3cc5201f1d9e5f3f62230eb2caea014becfba60fcb1f3997aa5b3bb622b7205c714348ba155c30a79a2cea43b070cada807e630b4086b129051898e1d9e68d1d0ecc9429d20d6a1403e0035a442b37bf508eb87e8ea347a3e68427b6d48ed299ba65ecb37b38754f4547423eaea2aec403338db2dcfe61cff4a8d17c383656981e1838a23866b91d09698f39175d98af4175caed53206973d88b7c7d306781e2e2ec603c331e9e49f74fd391a7e55e49b45d57781b90c5583a3511ffe1a8bb3eadea4cca91e88c99b600f48f85c1665a02f21c9b5bd6df46c0af794b76816c762718e4937d4cebd7ef84dc7bda791aaad33d019d3c7b1d0515009aa9157afc50f98011e11dd323c949e4719dcd96e100d044efc8e506e95cdf305e60e71cd495cb2ab9fa99049c386d279d3c879f2226a011cc627effaa14c748acba13ee5a0d441cc5271a68beeb025547a22f1c47e2ecac82b431efc7f5744f6bfdc179f77f0d601eb0c885f2acb1775715ee95b7fd5c1bf706245daac78f4d85721b4313b4cefeaaddcae69e412293b4deec93da3f976815a07fd1ba52bf4be16146d617752efc53f649102c73fcb44845509d186f469bc2c96bd35f5ead4f67126dba6988d56400426c8d020ae7dffa91433cd95710bae8ca10ec01b20064ffccb67573b56c3e990a5ce38ace8d1eb20cecf785bd9ecf6eeb95a30817618f91d949919cc69b900596409d2a87937858fc7456846a97e13c742281dd5578da057f4f964b8109642e2e41404cfca4f6d5aa02e13e26a4f93aade10de634ec4c4307f00aeab05fc1fb1a875657f6669e0f5ebf211cb86d1e50def8cf8c7c66ed34b95377e01944b054a13967b33d817aef60d29d84ea9958664e8f4f37f48dc6bedca16495856137210d7ff9c7999e925df764dddf82d1af6446cf1650650adecaba015a71bb5e614aa48296fdd265ec426c9d6a9649bc2c320edfab3d97843e41999ce0dc85e233b8af6ac5bcaf7d928407a4cb0f0703d6b8eee8966852a4ec09c29a7e3ea995b751755f0f6df98f8c0d10a288b4844db6df2e1260375e12f20c7d22bcfff020f4fe4088fa767842e0c3cfbe2aec8743d28d1584901482755830115c2387222bf2a8560d1040f43f98908c21381eda8d34abec67ae668775245fc8713a3e075dba350017d933352dbc5b8ef23ab443d2e422fbe2429536bb6080e889898d665f538f86cedcb702b5520c1e5ab9158bbae8d88a1ed50955ef137bbacb99da09d8c59c3059a135257f648a84813ca97aef4ab7e143ee29acb946388660f18eb671194646e0b0136432f9bf088e4bd8d71612a64878165f05bf009e94701a1236d256730f8d92bb88761a92f2aa6e0a6cda468c06e5d41326ac49972b229acd51a2840dd486ce9359f5ceeb89fc2ea7ffe0f05364b3b0abd826290b949efb26ce8aacfbddf3ec059e541db216ad121759d317e2aa0a3290e3d5a9e0180dc4877731d42572fd7478213e0fcfe1e4a3c24259c4212011e32a0f63d0fffd977e5712400773dbccef54a859ad2b32ca6711811afef80df14ae12475a7508b63b0fd685e4acd5f87e500fc4dfeac5187e86ae0c0cd4fbbd1f01ee9b634bb0c9ae2e34134a71b4856dce6e5c30a3b8542ae3625f0390e70da5b4727cb8129c6639d7065692545dc625e6d2a63dac118233fde19544b1d753415c6a65f968002e7670c9ba6cc3364d3f2fd95d47524505325c884940a641206a6012e1879aa084dcb1fac93a5ce27d121feecbfe34e76fae85e2e587fcc8e789462879e348d20be4e1161d7b7fc6f8371d8f8cb2d25d13f0e07de47b03b33b4694f789acf1392627a4b801b0ba682116cf481a15a93ab4b212a5e09a79a47dfac32cbb45023a560d633d106a7b5a9a49ab84fe8727f4a46a93174476cd21324e6724693c1a4a3e1ea321e41950f2c64828d29497ed0f7572c83e9a905c9dfa99e77b2e02980d20c3fb12d73dd9e5378acdcd86c8570faa6348884d67c69f3965ca9d642919e7b0a5c16c74585486608a00b25f88f469b5c48a80f77d9999614a9707c6200e6e502c9cab45f97f7ac3ee784d596a53a22a1f14b50332240114b0b346ae77e405a1d0f36bc681a926e4008adb3edcd34d69cb5d911b36148ac620c5d697a14942083b5c1a7091701f4368bf086a6111c01761fba189e9d98af81345341c3c8ca805b43d23ce9952c8649f9b4156879dae956b4562d9ddf1862d20a7eba69a4cac2cd42d344b19cfb6ca0d86029dc0c57d665fe161a582eb00d7a16479c15b07c2e03392b88083556ed65b35e8aa9d27912cb8460a6769248f7a4e014ae6ef3c90c22b042cd97662553bd0f150078d329e4afce9d98a013c86976f14eb91d7597a3552f80de053950e4d276ed53f1185093396536b97dba18ab18d05e85c93ed03cc23f4d82fbb6bfe9cc6f4e4abba8d46893d091d1b68e2105b305aada1b575a1f9167118021e45aa9d383a0af7f8b9fabe29718a8f297c9bf6f199c80bbc71f94eb3034a11ecb0a6e0d384b48e4ca97a451433205dadef92073939b3e509605e3f8211ead9b73b57ea519b7de936ca69a055b46b1156a9a71e8fb0ede82ccf653dfc2376c3fe54422c1ab4d383379b3d72967be754c4492fbf5da5f26fb72d92dc99be8a5b328a0a28a7873206dfaa5a1e3ef01172772cb03c3b6f5df609095badd3597229e44af462707925ce9f666415b7c775f4dfe2bd47a1a38d15c2c143f4417aea9a9425b56c0e013b54e75ddffbb95881767ef9cb5418b90c395503d0725c993037c298b197f8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a92d7de751d8df4cc8d1bf315224dc5a0b91fcb5f4e2d7cf7bf6b4f17d216db097aeb3d875696bbcf7b6da7fa735e85898526704137c4b939122ed231a5426a25cdffda2233f5c05915fae9724a1f752280e33500c9a65894566047b18192cd05117d7befba934b90e42b8325ae78dc9431bce44409b9a132126877426fee4bd3d1cce995f556a39f6f663bbca7510406211a43b701e6db3bceb02a8a763e2eb49254ecbdec2712ac3e14dbdf3d9233a1d6661cffb81650d7129f27319e6abcd2de7d4b0fa6efdee0da9e29357924b28dda0635c4362f462c679d38e0ef5b3e553cafd0322b945062ca6aee6762edc9f1b56456af841a06655412233f72f7fb65355241cf8300b05b96e2f11c00d6bff5ede64967a9c0d8a86266b1f52e273d2850ce678db71946f2c76dfcfd5cc7dec30cf6d595ad08031d1702aaab2bd44ac9158b0a15cdc95950e472d5b27da96c809afbc1e199d9d1eefe4cd60872e46c6e0cf2f20ed0f6339c755b45e26c62b2571d5dd6f2741d88409cadfdb50a41e840be69e621c58a1aff038f14352fdcf86e1f83dc7146bb713e7b8ee659fbd10966b259b0f6b66c57a115760a55d0fd86ed27d79b05179bd40d22555a9d4e7e1608702b1634aa8432a93378efe756afa3fdbec0da57f0a5f9d8196c21290a2e56508145e184aabaf23fe5fd8a96cad998c66aa6630fd8c127c5e93903a437cb12646c11d98dbdf6e18db46da4073363ae6fb6f1fcd4d8d7a8fc1926c8b6de3c936cb9f5c5f8eb2045b8273005e599342a20270a6e4ef7cfc2a63199370806691e91f15b6e6c3c2067ebc7ae75d605365703475780263d91beebb9fc1942b73afefa9baa9d92b9de8f4c1a50bc827d507c3d9d41fc04b205e4f23ab6360cf99779d13f4a181269430503aa7ca1930c6ae0f9b131a88f5f147be43c2f560cd568d93b65a3a79355351039ff9beeaeb76dcc5d0c8d4e704ba4cde845cf41ed52956462961d14bd839df9169f16697d883f889135beb44f7e9e2027dffebe557906636e59202639fd6409c11453dba886c95cbeb42da3d201ebbdc9912497ed51a41d873714a4afcb708563e6bc0bd7b9f3900c1241e2a4db71ecf5e3a9925ce255dcd3b76157c6f3abb8239bb8c3b12aa66ba2d6613b6b141af4d35ef5784a3402e67d616f07277ffce92abdaec9dee0c836a988f774d0b5cd1f8c89701061509485abbda67b7a764a5f9fd408e607e3423a48b16a567ac572b348ed8324463df1fe86546f7d66e17f63ab662de2d43cfdbca8d822a9124cf0f92e10947aa403039c35ad30d393c7823d76fd8585ecf2e007f08587353f533139677c0ddc21abb0a6e0505246aa303b3527207897f80dd262494001c1aae01cbb1ab95410653be263b1c63e9e53259293e7586edf9f96bd14db92f817fafe99c6704dd3de19be801cce965ba335ac6f9edd2bcf268a948866cd02d4fdd8b290a391c2f010e539721a5f48101df9d0ba9f32230334600f1ba04819fd3cec06e99ba4a0156c70b6a0a28d65c7d346965bde0dc872d1ca105e0a735ddb9cdd018cf4d26da9bc633cf2ff7f74e78ec5083aa397a185c5709d39eb7758d6e454ab62f642b314c665d450775ffdd8161e2d4036f736a2d7f9c1948d7b9257def80d51eb1df9bd531f85a25452880133f80d53de560f33d10e815736a892c450722e42198ac80e2a3957d0dc829eccadfbb15ce5dcb59e7956e76a2f26e0870369171ec9b2a76e155a52c25817c6a04bd0204491b0af4d987afab5c01c0406bf86cecb44bc1e45da2a7f600f3989e5d61f62f12bfb85a6f521c22030b286ab4b715d33cfd1b5fc4253e5934b0e6e04178f804dfae4c0135af44894c912efdd71d1cb3cb519f5f9157a8c4152c1fd63d3c9813f4894e7fa8d +MD = f250d548c560a6d7ec8796c703f86a6f310aace0fb45f7b59e0fec305de66e11 + +Len = 86560 +Msg = cb14a8d216b299e46f3a8ab35ab0c379fb3924a2d9d00b26e23b7815af3d6f740a0e9e47ad0840ef4da341b6d7a3a3a9fa9020a6e56711b5528f8e9bc30ed7ad0bfdf2e31139962dd15c480aa3ecc456c0d29e63020d294ceba79886e9e863b8d8cbedcdc9ae6347024de7d646f1ee2956e5e604b72a1d93b66bdefeaa33dd3d795ed42e5dce6fe4e85f6642461ce8c9c3b340af8c26b331bac4a72a8c580be3f4a0f22d560081ad8c780c782dd47ce00f22f48d0a69b4cfff983d3219bdb55353778ef33bae634af581229d82807013431c49c5b85be7148ed1e63fd9cba5359ecdefa7943fdb622b63f0dcce8a8d0c6588887f1f6516a96e55eb7953eaa230db895e72ea1bb29d3704be5b98599b73804dfae5c5ed0735a70e94070f8373ec1493237cc3aab0a5204ed442685562ef9955e41c345d836142e2281195fce11250d386ecaa539c1fee2879bac6e6a929ba87914ff41b52d546bbf1c16ebfb44a9831cfea24813fb6aa79f7eb3b743ac9eacb48a48b913c38bb80353d2132b43bf39545a0bb9962105b2b94fc4e67db763209504383250932aa193dad36bfa88e69e73134f604cbd509259915882755d89829f2556441806d1a6d513a35cd5aea020fdbce5d2a43aebc4f4e60701c709827147602b44c6b8e1366b80ca7c390f8c7f58b97797391437d91fa028eaff35ee4b02471fdae90409debbc4a140b1360bf8189b6d1487f3b53d3e6266a46a8d1d9e643cbc6ceb729c1e5a31c020cabc9f29c1c54ee0fd33e47fd5bf28d4b559a0d9f1d379816aaf1863ab6abfb2e1fdb692c8e99563256f660f79f8e7e24c36188c1f8defaed3041f5d33d1f86d9393f2b1a25ac9317d008a6a9fa23c53bbacd53351de874bb10c1149880a02c75bf9d404f2ab62d28091f21fcb6d9ebf6028675e4d47c8ee91318ed71c654736a7a9cb1b2e4deaacbc8e1dad61ad777bf6235f6b565c2d1dd01ee88475966e62132e5852a9d4d946ad7f6d8216d46f1fda382df8f17e3c400a2edeb007ffc0a00af20c4a19b2a726cfc0723c3f84de1178d14375c3307f0babdbb2086813f6970b8f477fe289ecd3900bcc4a60315d077e89406030155db741c002fbfa7568ada1709a5298ad12c39aabcc2b0d5c646847ca9546cc9f60f9485651e953869f5a49208560909ea17d4c4b025cbb887c9a611fc2a7fd3121484c191f7ef7ea23338f2999288ef121672143ff6def280e3456e348f2466d070aa982ec2b4bf27cbfcfe63628d8270b27b64123cd0ccda1bc95cfa8c43cc58ad70d1e185ce4420455a800fcd010c2d72577ad0ff8b8ebdf99ba3f628c44bd3523d36544a2455b62ab93e44dccad370df6e1e2247f6805006210bcf6b8f2c69e8788d2f189e3910008002ab96d120627f281ab01df9eabcc9c45c2e5d8cb741f68b9f19f8243a58521992ec03fe3a2addee3521887c1328cbec5dba07a4338404dd34bbf09e9eb3a5ebb6ae2b3a6bf27e26361e916744bd9202d71c70bdea599bd614bd0bf4ae4b835e3899176bf9dfec3ae64e3fa2c5a3a86c92fba0c022e942de06c64e0fb24873dadf56ce7a2d1bae900d5a9a16de0195945600a096245b815dd37ec3d5f2d2fec7728d58504fce4c9273e9aaa9d7ffdfe0ebd3772538d8e0bb438f712fb50faa8dbae5bed3a71f4ea6dfa47844f7c710ba181b2d57a588e8601e9e6005452a02947f0707ed7c373d361a320bd0877eaf89a680cb13b59220b52c569940e8498b45889b3b85183ea1a9ed3d6b33cf4f45b55eac5840ae1f1020355c23c6e795cf069f486383c15b00671d6aa157176059a60544dcc8d956410a005b06818a3555408ab685cec0b6e4d87563b422a7d973c366f360927e603adc56f94b581851a55c128eac505d78d464bcd0ac7ec6e31c76485fea86e56483fcffdef932db1348c0ff78ddf0dfc95973b9589252bea6da277230858c558ba5d4c3b318f919a1c5d6191b229690d0fa6d35a46d86d549383cad0f368c18fd27ca6a20b1941b23a4052820822ab6b63fbaf85c450154f4bb1ec1a4076e74e19148bbcccaeb29c26eb4f32e06959aa2b0c2ca2722ad83d1ed357696ff1ab25f6cb57f606ee68aa5aa4d43eeb4bd84bdd6ed73ad0d71a90555e9948d267919a13f797e83a26d88f6e037e008968bbb2f38a4ba970d350fbb7ba3e2338571f3cc92fc80de706869da98da9223b4e7891f5e4d698d2be1fe19e8c9292d23eb860beea54d19dfbf767b5b9e21e714ba34b5d15246366e5ebc4723c5312609d01c84d9deacdbf75af701b0eb54fec0ea051b18191a3bde92916eb4fdc2c43d06fb5fdd0f67ccc12134942029f40dc0614476bb0cac438366c7b624dba4afc9776bc5829e449544fd745a32c0c9bf1a0539f14391c6f766c2a546fac59e90b409b6de4ff40cde89d4017e6e189bb9d8c02cb137122eff8e8f7247be257a0f07a623d1cc79864e969021265c9932a6027964e11ff6ad0203b377e0f962fed3c935f9c781957c8e75171d7b85ac562c9e182aa784a50ba9ce18fc3a32e4f385029e81e7f7b1b4462e533da470b7cef3b684c62bec87109bf6a4487cf11320ccbbc9035ab533f81dc72ac8c9a52463a451a78096e20484808341a5cfbe574f51fb9ec64743850ebb4a860814ad59dde778689f10eb842e027ed6595b221846bcca0514d72a0dbec9be4e43ab0fc0046332af6dc0916fd7c7ee4bad47a4beceb430e63331f135d2ef2c6ac2b653bf9fc1876430cf5b2d4777db88e9bccdb1afe136296c7f206410d49bc1cd5e02c078a87f703165d12646bb4d7455e12359b1ece3b607e640014221133dabcaa32a55c123b9b8a87cc29c3b4df939df301f9c7d40754c90d8762e7d9dc5a624be65ffb47a280dc3e36a109ee2fedcdd7c69373b534e83a5702a9d913f420491dbd93e288ca577dc8f846c8c156c87048da04bcf262af34c90855605039a0e3b83eed9c662193f1c067a76afed29827ced2da0e0c1efe5aec1ef2380f1b60c4a3d0c9a35036aaeaad2b2f7ac721e156c2476fe172a87a1f38ad0caaa107e46e6929b471d77820aaf7a96b62eac3388fcb8e52d1c6bd86f427490142c68da03350903a928c7479b52878c7ddba451225633e1f4968ccc97c30697c9ae01b38d622aac88fcfaa3abbc80fe125b615e2c9f1dd11d2e934a60a0c84eb1d7e4ef2a937dfeac41187d8014ed533e57eb43ee02fc1f6e8b8a3914fe421b9350187823f18b62dca02abc638357f3c9774be9b0a55a32b0567883f908fd6739c0a534c0a3db3ee2c0374a9c3145467b628837bab0be72aa36660f57e3809b69d0940d48d1f5fb844b470e73453fb41cc1aa14534cb14726d45bc578ba531dec28ecea05a562028be663f030e7cda5733bba6ac5a1ba19ead75f8da3b3ff578a6fb5b23d45a9babe3b91d81a4178814979be2056d66150c0e87a4f1ff60baf0a4ef74f39d9528ae7f2dbae7a78c7b06622c11e4f132e546eafb5f335acff8f366cbba8418ae6dcccb3495a98b7439a92dfc84cf882aa8ebcd317612dfd645ed47208a59c7fec173725e2c5bc2472a79558dd9298485c6474fda9824f10c084ad07e72e94e2eca2eef0aed52ee7de40363407d87890cc3f5cd4723ce20e9e6989d45f2b6fd86ee7b9bdb57335290fcb3e1c4f06e18083883e017a78301e837530807884768bfb4d623400881b128cb276b7bb04194008a5e02bc91f7f69f91069b43a22f1231a3caffc96fa26c9dd5ba3ae56ba68f9e3000afb6817181787a2fd18aeeb28c7541c6abe7fb39f778a3090a8251018d39dff86185e4a434fb693b553dbc862a030565921c499ce431b97044e32ef70f5bd0c1b2cb39e48390c4b570ecaa1e9d6365045ce6c96fa5619fac648843db788cb8e90dc6ffd6efe1332abf0815f0390ee73f56c7f916cd70cc09f3d23e436b350edaed29b4efec653b07ba20ae8f9f6e12733a406716def7a5157d518ca359fd3903db63f7940b8532e8dcb6d26133296d5c51e072043c6ed15b6b96ad9fb73dce1052f61657cfd9b12aa14b000986995e374818d853683ec74849121f7d258f347cde60bfcfabcb3c69a25dd5dd2c667bb08759d88904f00d68804460e0076a12a5f834425011e24b025a5fb27076e93c349a441119751afa38bbbdf05cef46df281ad15c8db4b743a133d1345808ca165ffb3800895b28443555ef7c484fbe008fc0c84cece6a2ecb2b942c9f85461a08f14d6355d099041eae9493336ab280d297499c1d23a4d7ca36534e1d5dc48513e818f0e1912fb99c5e05bd3ac842d8b91c0c629e2220f9a1fd2181a7522f6af0acbc31921f9b2a262c5a7cc1e5d26d2651fce03912071bb745a7ce25aaaf510605e22e51c406df22e13bd9b00a8bc97f00c21dd73d80c674d98c3c7fae6bc3bdbb32ee07c69861fa454fdaef7f95732def06215ee9b481408079d49da68c477d9553799a6e783714203f8a668c17f399e76ff5b85fcad48301169d67da3966ae5ceed7f404cfe9da3ab2eefe7939d22aafa5a0cbe7eb47a5250a9fc6919ba7b8d8aa11fbd0c400b25b51109d8d25974711512a81c83f630eb4fee2a015da9204d1302d99198003064ac4f72c1100ca5ad31b9cc04cedaf2776996fdfac1daff80f2736b5292b7a3dd0b2ab944df5f3cabeaafd72b91eb45632844d699f8c87fd5938313646ecedbfb5c435bb89299bff9aa7557e58f9f804b26684283651a17c790b2806b9ebe5f4c1a19c8b0dc749612fb9accc71a7059abce81d02b89185db3547220cca51ea44bbf1e8eb20f5865844890b444c4f637e19b21fe16f77bc8456942830c04682176d5e21c20cdbd94ca3be79ce301a981a916b92aca128cddda49c415ae5f137d59d8e50fa17a3caa51201ff5267302ed5ebbb7e4b97cf4050e60475727f7b90e614297d7a8a72e1cb5afaa4b837b8ad16f14ceca599929e43e677cc60d70b15b29ad8ae2aad73a726435070e8e9da9b4769c3e3a4ee996e206a9b4f0c35ca4fa2f743edf2c7cba31e94ac6bcac4c082cf1ccb6c2fe00d384e3b18055fe0e0c51cf21141ba22a55e1c17b59e47128fe916d20a8e2eb51685352197f73f2274ff8954eab36a04275e8692141045197259845228518ab6dbdb3de3c02b9541ae8652e57849eab6792dc6ce70c9ad238f598166cebd292b85c5ce4b3aab4a86b7e1dd6d600d2280c453429372d268760e7175d4a4dbf45c3bc8501fae7f4439b79894b44d07fba9305664a8c2325d5a1829c86551b2d390266e2b28c3ad6da2d534de81e53e5b7be4c093d707f17319d50ae2e17e4aaf116e3ec72e223fac093a3c229ed0ba2c3c091836e6e91894fa6c9b2b10d2ac6e253ac08df9723ce8b50e38cad1b7835435c6e7b79e12aea74405640cbaf6dffa15b27de3505cad0bef78b13de342a2bdae44b47dc727bb9340caeeeba691eb392900fc32fc8899fcffa02ee39c181e4deeaa07f029d3484236e1c0319d4cd915a849c5e3c69d08a32daf3724c3e2ffee3f2168788bbc5b9b6d72634767cfb075dcb8615c734403e8c1cd546822474d87e7d1607db78aff862fa65d93ccc178400b725707ce2490b302210e177ff011ff2fe1766773e639ebc2a4387f94ca3a607ea22f4b9ee6baec39d4ec99a38453405f7a339e887813b26f957b728693fdbc7d6e728faa31867bae0d775656ac1931bfc31e8abee794c47ea1afd46bc4c93c4ffea73dbbaefe48a9f535b75f106dba97e5bf94dcdbc40737ef5b0c0b05a6c83e7b56bc9904293c72b4b022885756c32e079e22acfeac64e2a807842efc9d48900d08740cdc0f3d50717000972add34cd52449ef4f553c3c6f33ca39c54b5a48edb43cddcdeb9348d55fbba553008f5bcee386e7d6bc20d2cf980d11cb3f7c4800e922fd0b12e0a6f87dbb68a12e1ef430202fc0f06ff285ce25e7678c26991aecd7a02b2fe76a53f2f985efe777008aab62bae726e14fe9ed55bfa762815f15f4185ae486c9aef4477b8197808bc2938333aee6d4c08763afa01c6df8d03cddd923a9b5ba4a1cfc885c54ec26dcd3b36a1b723c948e477777ad7407a9b3a0e6ee72131b24d932c11814767a24dab24ec282ab44e09afeb9f7d65d111f8c29a5b68c3d9171079f06894c4cbe1505fcea2ee1c0bc43871b9f82a34e16a4ca35bec3fa7f950955a0215e6c6e2471ff01fa01e158ff37c33c9cbaacbd94f40e538689156fb26833e4a609ed4149b6266012dde9ba8a37efc035f25b21f867b91181989564561832db091e477c9a7c0c95b935638be9be6d44ffec2721dd7a6afe5454c3141c93c301cefe2356931e2221418b07339a45bc395eea9923a0c69458635056e5525574e76c3bd995c027078160511d4828685d2bd78039addeb6b5de331da96eb3f7b90a655a0280ae211d448a2a3e4ff090d08afe4f813703e55fee480f3306add51fc94edb16cdc986d3d92368e2a19f49b6e537aaf845acbce31716c79c43ac8809d29d318ec38ee2dbbdc0bfa2f3811d60a91825175035b7ffd723b94dbc3c8b1784b4efe3087aaf9560e670e79c52667e65243056ed3b5106acf366bfc6ca58c97e3a88bc1329578171193f29226fcf50a7c06f4f832a3288070a527af9f26b801da27e6269f775305cbd7cf02c55b297cf913459a88eb6f483dd0ef7cc414debe161438e738183229257acd4f090bab46afb221dd3d568fc91ffeecec4137a5d781b7a88d643fbb8907c6130359d32270882bb048b9ac2d0bfc7946867f57b65302575f9f8ab6992f5a01caa51f7c37006bc5196364b5f417be8724d2e63cb83a803d84a514437223047419bec2cf91003fc985b6a73889f44b71ae59dfad5494e5b2402769afef6bef6729d5aa91d977ee7f1bcae8ff97aa8d7f0ea2d074326a18fcbbaef1c1b711012121723f8db66e5f2f042690d0c4426af869362257f9c301631cc11443731d24ec2a1ee88ad1ec7a2167520874b8c3cc26ea9b3e1f52a888318ce93afbca953f0e6c5f104fd1f9279d6dd7b7b31c359a4fb65b8a94e42095ac32adcbb365833ad00ec01ca55f9d4eea3e3c045498a1bcbcf8fe707d5833101e37952f31ebeefd7a39c6755423e1d75101095921d30e19b5d60a57a355e9e1cdc229ce3e05df6f5414fb8324c4ccaa1adfc71de076849b817809a7cf844bf002fcf211a15b5d7aa6c8e6aeddeb67b08dfffdb75a280b296a0782c7c78c6025040c775e24947005b77c0f5f463fb9cff18a33915792acabb6abfe21531731691d1b401e8d5820f9d059fffc2869caf090a7f1129f5c6e0aae8b041c3dcac4a29351d6baa551763c39873def4b10a2fcb07fc0a2f92d5a2c9ad01c204c4f23baafd5c098342579b73a2d519e77dd4ad99a3927a92ead76fac2a1ce95474e5697b9d08622027c32521b73c4737477c97196feaf8f0785cc5c6d27a3e4f76e6323f969b1bfd6ffa7f623821dd4098827aaebf6debd495d643be58a227324585444b6c9c8d67955e2899b82e42b00b56c6ee3483f99bfdc447d70f1d4ab95b431e43a1753d1b427ebf4cb9ba2df1fa8a1a4c41d578c30ab760c57843ff4142900eacb7cdb174d1dc820fbf3dd582f09ce34d79cb0ff637202cee26dedb7675fcb3eb220e7100cde83f473b520fef77ff90564eed15821d8eead58d1665a57ff99c8372aff24bb1324577a07f03941b32c01b33a42013285449003db3047acb17370a1c3abbb2063b1335a11d771d34d6e0f0ba98c605e220c5e29b0d5e42e1c601e3a12743d0577346f59fc5c0e76f4c817b66336df6d574c01137bdd9ba5e968ba4840e11230f6b4f3c0f00878f2504002fa8fc8e426cb0e600962ced3d8bf932c14747ba269893aa7d71461170f0ae1b62055cad952275963528d32f39047ea5ce6d7c8567ad8cd73e591f15495cab01c6fdec525b91236f23825906595297432069152942a8a753f348f40954b37b71c315241302335abf501527190af0c3997bbc9a1c540483af30a35d443fafafd9facd9c4625837c354f63b5cdca69842714ea73b5285b92577b0ab37c76abb8a8b2a99d8231fc283f75f09d9b1417696aa0754aaa1c1863db36e1af187632167caf1bd04db427bf5c784e37077494e3d282ef8761cbb568b8f8baa88edadd49b42496bd1f2870c20aaacf2aa9687c740d50bba252a3dd215f4518286600f7d2edd7ccbc5d0b71d0c89215e0e76c08aa697e6c341320da2e5c806cb734753c42981d1076add9a55c24d294e2580bf3f7758063b529ef46d03f5f3acd50c3f5093188f444882f75d49dc0dea751a4b8dbcffb449ded5badb7561604e36169cca7489ffade52597dca920155c88ad2b1c7c7438156f3f279545f694d81dcd31d9d4bc6967cb30437beb0088c9e6a22895bf9fdac88c4403437b9ad9731399c826bc99159d8209c1e21663b05c155f0aa08d68e28abe4c158d1d3775479fe2275833084a75901ad9b83233d33a9f4e99e4efb797828bbf261935b4b17b4910171842f151177fc955a648573a8e0cd69c0aec7442d97e05fe92caf9d538998b600ef03c72acd780fc535eb72d7ee25eddb98d872bb61c86659ee5ee29a518bccae145d1f55c1ea695687f3bf332ab50229ad9d89a42efab23e58d7bf5eb4d091d3a4998224edea2e98cb0cbd6d3ee133455d84fd7a57edaff10ca888031c0db20c0057a41ab9edec068fb4f1c89340fdb9192d52906517cc3c7a4fd13a0fa9b9c1c805d999ae7c1e1a367af0e7b04acdef61050da8df1fa35b124c2f66082af5af5c22b734440b316e6fcd3f4d2e652072d59aa3064e5ba1e7751bf7198e0811ff4d4ca17d1311c25d9c3a316b562691cde75c974b0b52645c134ddcc709d77b6c1bd24cd684265d723c308bb4d0159e6b16d97ed9ceaa57436d3024e1140fbe603851fdd31fcf4f46d05e82dc24a8a2d4c48fae54d0b9e717e381740a35174766235a58e55e632445e8f2db23bc665b95a0edca2eea07b05426b05ea4d594a2f88d49d2afc89878e9f6bbd93e0fb505181c7246da531a3f82a72b29438dfe4d91a6aeef74d6b5c9cd7a18218da73b4bf697cba8e9a477e12dd5708868c6bac3cc300823e71161734af37628851b6fac9bb35864df769741b0422ee077085091f299c40469012221fcf37472d6c4a88381ff86ff2e120edda46d94b610cb6634bf4491059d0e5e325dea8184d54b9c8d33ccf60c482f351184c8609da89852389cd0cdabd5c19c40d8593bd31318b2064bbc13e0c026a089dbd300fbb0f7baf9f5cef86bb5a362ba16bff1d212a46fab143d6f213890d7a3142e0454cc51e705548f9fd9bf3c282a739f422646774bd847d17641e3e65109c839d93d4d4f9ce75393225a54e4730e8967bb344119cd1a3118b7c7849f930a5276fe19d649132c5d9a3e721944c9d2c2b9ab80750479ed6a63b2368d3514316d75e17ed9c70020fcd532c56ec5a313b9f5b1af64bfc8ce7e42d3f3504f6b2b53a731d0da41da819c04ada8d7ff854dc9bc6bf592b43039c756bb928036fe44bf9b5db45a5208aac5891da0e74ae6ed9c7e2907817a46bbffefd7a89f944409fbb2d3adcc702128f3d2f1521f404e7f8cab7759a38a82c162ae969a00dfe307b29e1201c314aa68c182c720e278327024d4d5709b6d6ae6a9e396db468241aa5eadb764b0c80b0699191d81c34b296bef7ad1c0bb8b7598205f5700e313e68e6a72325b27f2c97ef4f65319444199df671deaee966d19628052359f791d5810608bf1499b3d7c3e6fbb064be7e41a27062e8f3ebe9afcb2246cd10b5b070cdcdb4b92a47cf089c163c7b59e20bb10ff573d4d55869d6623971fa7c90b597b40354195106fc488a46bbcdf84812f14a4d4ca93b7a0dd0c1352eb387d2c8d29e6f8fe5701c621ef54020ae2938bc8abd40946f0c97fe2352de24ff18c113aaf3da0e276ed2281245ca1226d4f93103ce96f32e32f8645a7bfcfce618a7bba61b0c79e6357077ace2ad393ee1d498e4e71613ef94e566faa6565e706dcaeb4f7fcd772bac3e767534b13efd381119b66f8a99b91aa52c8d3ab5f0a60073c92b85e5b0fdbb844ef4a49dc96cc1f8de00ceb83095ac82df9b9fe15d8fb9e97dc4961bcd644a8926b1983b819165d00c4a6b687e8a32c2a7aa3ca24b33807630a21b3876684196273579510f760ae3ce1db0642ba094aeab447bc0639b3e600a4b7a05521288f37807b0a81a2399774aff0473e0dfba8e14f0c3024cced9f032491d470a6908e843b0a3084b9efbd5a87bcf5c45508daa09377d31aed43b6ed1246ac94575a7bdadb6bc384af1164511167ae801faf349b39f0f1533b64a220e62cb52ac3f4eb9e0a36202be24d40ead5a6bdfbde6d5b53ab2e276817bf053128da7a9e7cee62504fefc2c503d1c7aa3ce0b09201a1c34c5f85e1c402b144b042c65979d2b55494050f47fa746d5cf1cfac22dd3a0ae0f7cf8ebcf19cf9e500dc86fe4765c856dbd20b1c36c46e9563f67f9157d80758e883af256b36e75ab55e82c581c6b5cd9a3f69bc046463f57359c1687c7c058f81146d97ab81083a4031404ba345fc4d4195a1a3dde4dbf1a2521834c586a3e973ea50a03cdbdaf8240d55fd46941a4a847d59604db6351e6387fa62cda8511b138deebb99c7ee18f33b1a56c6018e39b56ee77dbe690dd05953de9eef21ab88f2779e663cd5a011105323e4bc4ec6bf66e2e258ba7dd4bbd66e3b35c4a301b7932fe62cb085af851dde093393bc62301b61c09dcc5518357d0fa6b3c8acf22b681f6c7b7f485ac97e4420afe6dadf30357408995e9f56e1afd097b575affb5903de97cf039e3062b41e00c6104a9c34679220e80bacff25015984a7560c9bc4d8e5deb3e807cee541d42022ba5c27b10424b0163e1eaf83f3f2f405e47341f369bdc7b6871594d5ba0f15224fa0104aadd42c807054b6931a457c5d9b549c6938ded9438b3810988f1746614ab6d445c708fcd34cffc2b6c6c9741af530f99ac8b199e74effc0c233953a4c3600e246d24bb76b1e6042839be781ca8c88e81c8bee601e5ccd33c749f1776f9c0ed8c27204d2d48f46b46dfc281be8cbcce64314ede2653f30d83c34c47437d731165d08dcd59bf9e396fa8a23a9023d9d82c2d628973860bb2c857686b7218228395b192c361df8e778ada832bf835c4b3bf05226e5145bdcbf3791a0b6d927549061258b8af706c2d7fbe90dd5f8928670701b7152959b15eeb718ab09bb3136d9e3b0634aa3adf61369ceed72ee8abfdea684906618b8e769a87e1e16442a5f64773c5bdba04901d96bcc8a1cb1af57c5284ffca63a1fc18e70347273009d2ede803bddd47982768896544c4a0e7afec269b02e89563a54eba2ce30967ce43596933151bb9bc4b4bf7e08ac7131781554ef67ae8619b2e1ffb4bde0f715a9f42b14bf6ff7939a4ccc676c3328e7112c0b1dd8e532e0f429492a85fc1b7758fb1aa938712edd7dbf6df6c178e78be0b34399766af638887b3688b8fa89fe6bbac3b53f1db7e5d98ce2a0dad6139c613bacd6e2b876acea586633c964b9277ca3e4cd25be39495825e8fa0ae363951d35955a80560aaa945156c029b32f9ee656cc659eeb0984542adf76c4192df27f319ba8e1bc48be10f666c27c6e63a1433408f30d1ccf03680c348ba8fff950f1a02e268963a753daa8449f140eebfb1ddc1909f2dbf0630e3a96cd2c004c3d3f01db67e9d4bd087bf74eda931d2ee8d0af7b1ee2a0f41fb136649fcfb2acf391f711e17597d0485f53f3e96c11b316f63ebdb64ef46085eb902c98068f7220a4c06037df25b7900f5ee26021650ef218fa4f44aa5ebc5227d86d3a530f5240d21e54bf68f6a98bf66898c335bf98f69372ae5e87387df0f06f94eb57bac3d0c4615e0cb5834c78cf1165772b69f7b100386978682a1beedfd6324f670a3d6cd639ea84476406f2d3e9f71074fc91ade9abff16cfac1ca8409cc3cb13862551a1f898da81116f96bf42bc13a4fffd49aa5dddae202706b9cd33d7e2dfa7124b922dd7641503fcb0ebbc32f53dec9110ecbe93c2fc23409fc02bdd2b4df59a97215a24a555c424fde3d6ea39923b03900b5eafe9c63980c6d3f55208c0fa14e0fa0e1f32d5da7eca31f340555473bb4390be808710d21dcb7320c50feb1d17a566aa158117af709240c1d3dd071f3eb8174ec42f6e759e1a282ea4a52ee7194111cea6148dbb9102aaa32344fca5e449f98fc94721ac783f6d8f7f6d0ed0a06065dc4f61ca975687da17ad01d7a06285d2023e62fcdf32b7adb3c3dc0d72337fed638ffd30cb379e59afdfa81a8730081b466207329663ff734c00569d3458fc02f4d64b62bfcab2a3dc49bc27d2b32d4fbcf2a8756a729358a8b38140af776160f0c0d0d2fd7661331d6992920b8281e9e65ecb37b3e4ffc86a6bc09a3c154c61e7be3203fcd12691f3cdefeb9a2482744304e3ec1b41b14d0187b90c72b919905a5cc36846517f4aefc5089726ffcb6963939724f90f3440fe95bf19ebe95576c8fb1992627dd7c8720d91171a9ab953c8793954e5a4155eb2246734f01c9c8fa437b8f4c9bcdc951af60e0ded7bc8add2246f0e59b6c100eca235f037d93b358c810611e4a4da2b5b2cc3ce282995e211338cb3dd9dc3a1de9dafde1b85ce22e265a57c5bbc6d15b30076ea531a9d9b261536e7d9ff99ec3885295123c8d1b236540b86976a11cea31f8bd4e6c54c235147d20ce722b03a6ad756fbd918c27df8ea9ce3104444c0bbe877305bc02e35535a02a58dcda306e632ad30b3dc3ce0ba97fdf46ec192965dd9cd7f4a71b02b8cba3d442646eeec4af590824ca98d74fbca934d0b6867aa1991f3040b707e806de6e66b5934f05509bea572fc0750c52d10f15f6ebf50966f7f8c714742f5de877e928d8efe53db92ec60854a5c133bdef99c9e012cd9c5d0110e49665f928059cfc62d402995ea770d363bd03e415371f2f9ab7b376fc2dbe4dceee12ce1307588f5bd054d12fc46afaaf8f61467a6968b9cea35658f17f3698cf450317e493b08a5cf56bf679b5232436f5484f2afad21faecb84db42fb72da2dc3c13a6454aed5ad6ad1710425a3373e153f67ec9365498258c467b94879f9318fd3a15bef595896580ea898baf31d1017cef689dc2a1f92719f641c0f53df23d2c1b2910fb9fc5fe7a805fd1c1abcf4247d64ca7c288a253f9c3a34f709724bb314d7cd5ad7a74f3e29effaf420fe3164d519741c677085ea4351c9a9a29cf05b5377d978ba42af8619ce59ea0ec911fe5d7d5263f0bbf8991c11a3cc26435cf106f97b126ab6c7e6fe09e0a5eb07da1a9df82bfaca51c774b0e389099e51d59eb5c77cd0f0e9df87620a58cebf9fd5e21ef3c688fd1c3aa4862d440811ada48ae948a35953c53f91cc38880c93794a7c67d4ecb69202985126589d70873f11dc29e4ba569b312f2bc5fb3a086e7d81100105652c90ed2ba219cd59ea08ef63bdfe03876ed114f67dd4bb346a5893c1c772ecf991ffc439c0e6f3431d9da5e454ef0dd44afc58ddb081e03fd959a354c844f3708ee86f0bd3153122b24d49daca846a679124e42cec54d223fd7a95803cfe8191ca52d5e9022ff1bd5021c38e46458308ec51a02b58d6faa87fc2518e4b29fd25ee45e01a75bb9adda01ffb48f1bbbe81038c74211d8ebe96073abfc61c4cd1f4a1c977e85541944a4951da50f26d84997ddc4858620487b43ce8c86fd8ef64c68ce78299ca4946ccf4bf46ed72e33e17034a041650c1becbc7d652d2a69b1e6356a6ea76fb5c1a2b4970286899a652c43cdd90a40f4cc9a34f0c4638afd66793a80f95c71101772eef6c69098e3d2a68d19dd44ac62d12047d908de71b2ba71d2a286cd433c1c59f8fbbef187a302ccb6992b94f9eedffb6f96c0d28111f46ca83fb57e48a236d44d066a4dd8408c2b4adc525fdbe13fa806aa8b042b93cac625c903f413eafd5e55b736fa0d54c53ec443d019a4e276a2c794a5d7f3c0942ad5ced0a3176ed664cd7ed37a89484463cd802366f78b2b780cd5cfc25c20e6e722c1ca2fd5a668840edd9e63eea39056a0e1dabc4623b48450fe5747d72d4997b7325eded13a1a488454163aafff1f73e909547e1344a8742e6eeafcf75e22c8eda0ed548c92620ed862c9634fa3784820672f40d1767db41fb7e9463f3c08d7409e14158a37e663759a36724049014fc17bd9991331bac08f59d0b8013f726f5a7a61863ca30dc2e65adbec144860f756c7d1db5afed63617d53fc6ffd0e5ed85c6344b266c4ec9953528354e3a0deb6adba6ac1b36666123ba94f79da8d9ce7d222ac8d9ec3fd42ca9a9e250867e784817c67fd690c1ee3d6a6ece4d2fd4ae8aeea383b9ab476ef738ef77cdc6193aa90ccfcb1f76af39ef753bcf80ce5cfa49bc4d006831fc169f63577a187184aee83b1112485054e0945b6a5ffb1cd93e33fb65c34818c4578fa9804db3014751a02348e9f3c6795ee69da903fe83dfe6c42cbc40ebb846ae327bd8774ffdb7af4b45c5b6a431732130ac46601dabe78094d08f0dc5a8e987426aee9b21df7c345423161cdc39d8b40d17e0d8daed769800877c9e6853337f19f7310deb2f0b6d453bb8610e4820a3f650f6f2b8d11399a1a1f357365faaf233912e63fe54cbd6b9003b37acd4d15d7707f73239ff3501f2c081dcd226b69d29d95521fdf953fd0a110d154a78616cf97d600bc0b0516d7e53b6a3ae30ecbc673033bc4c852a4cc2deac6e699b574f0841d0040facff48aeebf0203d06c3ec662658b77c70c5327dc9a7c78cc639702df5c5af593da50ffee9ccf70120c2b9c12c22980044ab6a95827d9526817e7cd4f99f624ffad93ff8edbb8c8d176f80e2c22fd27a894341a4699c7bc945acc187ddebc1465d026527683a45534330fe5588eefb4db72354151f92dfd78b3aead1132940feecc6fc04d9c7d5d64cad6e83d0ce76ec46d21e71f4ef25e3daaf552b29e665bc228d811bb2f2a2989c3b7e184a7cd9f8c0c61d458a000270bc709d008281a41086cc80c6a429301caa71896d464898d5ad85bd0a5f73ea0099352eebcdb9809e921a77affe0a02c4ffd63d1d64d0380575878a3ae5c94106095397676bcc8fb8ccedc23250e39f4414dff58326924c2ab1420141ad6eac13755242eddd5925f1afbd1cf82d6469fc82054f38fc0d29a7d94bced916e28f9b75c7ce09a2ddf7cba30ed46be3faf760bfcca6c955bf64ff5 +MD = ac57a82b6adfcdc8eb53c23a00b0db4ec4711e1729f08535a3266a74a324cd35 + +Len = 87352 +Msg = 3fedcd5f462c572fccf62488c445d9c9240343db3b14495b45971ffb3d69bd25f2eb90e25d066ffb326cd05eb5203cc2cf38008e61e226f7d8a5a36902e9d22920ba21383cc90b7abcb3461738863d228982c079221cfaeca449a4a1acf879b6efe0ea298a7d12f59355ec7ef480c42f7967eb6227ccaf80d00b8a69e49f9a168ae7517def2a6eb4deda2c5a9215b933c871e91218f92cfc8473be8a52e51d8f1757c0fb15d906ffc6c86d72b94e04749d2823519cac59a8ea0aa6cc9dd2ea6abfb69e6ca192c21e73a9168f12318d3b2113ffe65bec1ecb2757abf66d6eeaefa98e53983e5b8a580c04917944c93dcf7bbae69bfec163ae66e235d26cc20365fe664747923e46f7ba6245f8f81bfa7ad4a541362d33109acd34ad2640d51e16e5c7e2414542de41a44a9ad4d631ad82545d76808f4b0dd584d479bb91af244887388c4d006f3a7ff344f8d485123f302269ef41cd1042a7b44a03590859fb440b41ad356bce43f8ced8c7c2aec696cc675112418e8b985a851fb2c74cda8d529a6aadbf2d66dff65e8f6f64f8569c9e4a9e49477bc2f5351edaedcf063ac0b95c3cf4b4ee40f7bfcaf058820cc937edf4d7fb1d3cbf437fa8031e37de827ec3783eeadb5862749c3b84ebe6912751038d848f89788a68814a23acc87bb9aeb617f9f7fe11d63cd5d9d18e573078d1263c2d6f54d7294e832dc1ff4a86e738db60f384e3c1a439b2cb61aa9c91c59f9f295b024603a6dbcc78657f85a614037a7cb6f75311d2517b3abca87e5b15a3b67d95b026a108f9a6549794418449f9db92caba16a86a6e774d68eec53771c5b26064e1be5c588f57e9e0a645c88e0145cbb533f4307377ef2defe639cce0edddf94ffdd4d99d84285ec71d5a19e903024f01ccb54ef6542b01d9f7a1c36a037d71de6c31c3dfc261dcd561481f64e8584535ec20acfaed73f2ac88c7c317efdbef99979dc027304a8a90dad783069690d5dafafff2872a0f28f2037175f0993f9c09e4df787cb62b9182f0ceedd7f6f129776018c8a5f346ca32cf6880fce9f0a0b5bcc195e63c4b18330cf704e0f0c566948533d45d306201f554748e44c83822258809bc6daaf3482a941871286d52b7bad11ac1b6c9a9f4c2fa5c44ce1c5d4ae2ae80971ae86b49eff2fadcb753e2426fac9435b9a664cc2129ea4ca4cfa8417398eecef4dffb420a8c65eb968cbb2f3e7e68d86dafdab09a49e44ecec7612f60ac1b090375eb5b04cc2149ccfe25a7acaf5f54dacd55c9b6c213f152eed03c3254ceef509382be6319f59c61936ad243a7414e08e61b3efcfc3fde3a2a3d8e70f7d128e2220990b2daaa8d5e31d1d78acfd67100e37538f56030bd8e65ef50a2fcea5dc208c8fc767908c3cac2a1de098de562c9adabdf2754ad3554862fa851cde236f62f0727395dd7e7ad2d2311494a38cc6b2a055a1c4180ee967545be04d1805a887d0e3c82eedfa0105a9f96d16f9555ef44cbd25c906f915b1a79bb43708e727fdc2461da94e897fa315c952962c5a55ce2446e6da743c6ac5d12c79612d225e43393bec8b7b973739aa437da8d9065baecb957d9f0c33490265a09861f161cbe69a17dd4bf1bdd837dbda36b57bd3d114972b428d1b9840f5d97aa9aff20fe156897c38614d67d33c2f002642716d46ae3b7aee0b4eb5d31ea12d15b1bb874f217bdbb671eb2fa8a51857c4e6761d3cca1d06d8b002368ffb513a74fd9a8265c5e5a8afe4677fd9012c438b07e67e1406b0418b01d274d80a6e25400a2b7bb5b25b75bd3f2ec2d4eeef55f12d4f0a7cd299dd8d873bfb3bca6c6fff6dfacdcf7541d546f8bda33cbcb5f18fcd1c4cd7bc3e1d48a6ab542bc9b09d1b7f6503039d4d29d597a09b610934b8cf7ddaafa522219354e6ad0a3876ff1f1cd516b60288b1e5f1926415f232c01e38a606bd65b2c8c22acdbd77e2508c787c056c513cc624bc238f64ad60e80c9443ec2cf0a9dca84c42d25937a9f50d2bd166f25f22e41a0ed3d54ebc2d975ebd79a6b9e3e20e5474258b0cc40fc2d5cb9590354a455116409b0a7eecb8af5aec626c3a019ed631ec5b6e449784489aba310791bd249b8e03d1a56199a2be75c366a339d440b2e5175cd2ad4c9804b08a4c43b402413205cb202cb35d7c3323b51ef215c67822c287928e833dbb75bbbe4fcb08b41ba2f1f8ff06d092a5bc0943f3cf6a6295b47ebfa4c872f57f1a10c8a4040c6d246cf73fd6ca45f39fa78ae28d91b43329d65e11fc37090e5360443be1853b77ec0e79e24ffd8fdafa842d3334ff6fb2b50705311140a1e2c8f6fa7aa0d5128ee2f5fe92b3071ac326d06498825f196bc7d4f89f7c7bca1d503c78173a6a3dfca9b1f9c3b88d7346a52ac5950e373db8c2beacbfa64f0e0879bf519446cafa4b90d0eff7b8e735d015e1d4bb312e3934462296142740da4eb5ee1b743e6de41638b165a14caabef9c9a3f67d839ab868b2af492f67f7bb5a95473a3989c987c71201ef42dc4e8b1e60cfbf5e8e0327c0a8c33a83f0ba1db688594246c16461f8bd10f16ef05936c84be3a3c0a8fe03d698fcee944a2e9ded0fa2a84e7dd4ef058a8cf08821412e821b8e28567cf1d904f3cad9e2ecbba858aba1e0930781ab881ac47120d79cfed6300dc182627513f6499b90e240f7c993ecd59fc706f103eade55f7cb8bd3043f2a0113d7120e41051b1d8834ff498e3933cc2a5ce4b9a4c855c008dad679fb177a0683c6d403fccbe89f343d6047428320e404b73921fa8b118108e11ff83019a06c85c4412c83b522bf397e2c77933c34bbd3786cf071bd82178c70f0d44f902dc1be61e1be824b69ebec79bc40fcbedfb20b23087b96da2802180cc1a4a62582a482222e5075092ea3e1b28839fb75827510299449f66b93cf20173adfc0343f6375879f78e888d1859dbb28c8fc0add7376fe88d20cec25dd2912a4fc4a66c4ad0d04ad9e3924f2ef94e606849ae9411bc4346eba46c68ecab7a198709117a2dfbd1be147036813705bd5b9e3349b4dfc7c4dae5930950f064026add340d16a8a0a5fd2f9c3ecb386570cab6b758b648413ccd03566d2571e57242d9ab62e8c1a7922eb2ce70d43b01afd6383ca5415510f146cd53608d781612cc04d7d89782f8e17a2570964547c1c2a7ad2af6fe0c1d2c6eccf3aa300bdf292de52037ccf37bda0811e976c5658df0649de814957750346c879e12b83528019005ef462e1b19c401fea1d9fd9c4d83368ee0c7ad9e91536986bd62cafbd9e01beaaace6602b8e98c72008694f4e9c1440a79d6ee87c9cf8d52b6601167da0ff61ebb971bb0418fd2f76e47337549f3b7981b0b023cdef1ff72f3d5328013d64a298869f62e9dfffa1453e282285560b6c12e2c8ec5ba01e86eda88d84e6c7c3f917b0c9f83b2812d5217202814f6526a0b1a023d2843476fcfd543a9dace4bfce0fa47bdb76a5c933722c9ce41120ffa004855b46f630abd1c4bcc4d2b1f89aa9d6fe4f8d3acda534ddca51bb892e08f281eed9ea20194f9dda4ec6d49497f705141a9fadd5f41961cae7bb8805f0d510a0591a1c7052b4c9b476bb13d32757783d85f68e06dda832bfe154ca15fde672e660b65e85618dedc9e11c00ec4b2e6bb9cceede1bded4302353980247c9bfa1ca721930cdea3d62b10a643c4e580e682f5bd2fea37c2fd29bcb0fc109d8b315d329cd33c84135d0d05f1e1687f259f5e4bf5d602c3a0da29f942676daaf735786d43cc7f30b29a0ce5bb430179ea38da063f8b3249d1028856b66a448a272df5c2e027ddcac6b6af19cc1097bb17da7b8e61f681b19b9cd13ad6ac9c2763425d98398b5e3b98d87e07ecf1332df4accb4b23bef7e347d0890d68d67d68f39c365618a10b6970290218e38edbb7c9d751a64f8b9cc81cc83a36358fef351e620b664311eb3d96d1c2b4788e9a41dd829505ab07794664a96b1f0580fb762ebd612f8282069f51f74744759a75b379d620d101d89546659ea52fa050a81369d4c2199f9d6578eac3172ea05976f5e5fb797317a6f8b169cc6fcecda8fff518d0b58c60090faea95ebcdcc174a4ef69182851b51aab6db65e51645630060282d8c3f08f6e0c2bd6f0beb4a292078a4d55b6d5a5dbb564947ad359018fc723f11572adf27665d5b9a0a3200a5ca8acd8dbaa66ae921e7c4d497e16976e4a41abae4d2b52c721969a97f587c0798e3e53d28c6b97e7ef9f28f2d901df749542f9ccd9d376094855c0fd3b518d92c1290662e54e29812fb46c9d6d83a34ab2102397a00b28e5e3fa74f9fee5394f4a5339b13b762c09e6a36274c005a997a9917136293c2e02f96cfeb3c5ad8c5730a634ea194b68261c54529c5cedba0480af2bd2fccf510a9295a65418104e537b093e330435a481daae8340c9a49e3941509892a22a59a2b65cb4047f7646ea3463a1b4869caac2279b3f868d931dddf45e019fa2b70e746ea96fea83473dc5629ea39726e840900c03cc963221ff989fc0ae2084dd3828c164202fabecfb8c0da18d016d812f9390cc739940b50b144c5ee73ed1039e66b8760ffa80cb48e63d54a71ce1d03e74bbdf7cb73db90af60220f421109309d55ac58474894dec7bfb9f38100c3b37db95242f17b394c5e9caee1cf0c9f4411daf3ac7c54edaaef44e6a8a05762be06f2783d4e229ae0193abb0a9d4848e0ee7bfbd1f1457db57f93f9de322a50903d978e5b23f286f899cad4ee1f4cac938db9337d6892db6af31d5208c8f233b66c190301257373f24add8b00d79220d86a0328e324e57d57e4518dbcd75782bd2cd784e3c52de86996e35bf748a15c2c1dfa4ac7c885d9e8cdc10b7edfc2a3f0ea837257857a5acb186cb6160502a50b13ff277fb62c87ba19fc69a364bc3e1e4f8d59f0e8e1519349ea27f17f2e91f1e6923d9f9021ed38436416eee8bcb781a665ba34520b535ea5dc302e299da97d0043fb9bc90ea0efe4889195ee3c86c7999d01867350d699a6c35d0096d86218eb94ffe8d35b193d77da785ce7c4424c93a3ce8baf4a61b0e7200d3d495742322305992b418fdccd77fa298857dc60ad2f0a8fa878607b50c182df18b3a2c075210685c79635520c5f3823ccd0fd7855b641b361513b89d5d06c31475833733e7018144243b42f76b845058ec5afefd2e3d9d84aec2423dc9e3ca23db991c11a9adae32fcca4bba8fd813d32b85c3da112436cc98bb2cfb17574b0605a363075fb9f60e4a38f8cffa97d397d2b9ae85cdc1eff61c27fe41110c4ca53bca957fd3d062c056add19f746a988b291d48642abbcfea822e41767da7d8e8c53639e0cb98f83168505f92c5f96b9778da18e0efbbde9112f77c0124d3f4b7ea0ed79210b9c247c8492911b4eb53a30617a662e66825d114ab374cce36aafaf47bf7fd6adcc8ebbec1b7820ae859971cfd7b50d56bab93cf71fbbe4278019929a42289a0a9110691e0924e8f9a845b02b41e13856b79c08c724ebf4a42027cd2b2df9e7cc7a57e8acd41de0ba6dcd800631714be11953e93d5bbb7ac3cb38b36ccb7a4c4df8c3df1b14c9946b769f45e32efba470509f72cc3c70e310d1eaf9f1b31034198ce290eb33ce607733498634a2d6ceaeeddd19f64fc2da15d4bce53c6d523bb9b742c28fc982f188244ad58d359946d7417b633dfe17ac4d640d19bf62b6cfa8f862d88b3e8db3f8da11985f4fc999940c18d315dfe5e621e07a1bfd3bc47c51d0a137701b552453c54c632d69de336fae23ee105dc4242dda82407840f1ae5ed0ac83b0e85fbf236649aa7a1c4da0c4a83b08b00028c2dbc2944bb32ac4e23a68d331c01e3400d24d97f2b7cf9e6e2d6abcd7775f8a6eb6294e822041c4c45f09c3c6402548860adbc5c088fc56f8249627ced8d47f64479f0f88523e67b13753ecb593b623cb17a14188403afddb249b0a5347076e600a6465b2cb6924257da7bc845d194c2c932e99de80040983b7e9e3095450ddce6939dfb5fe6a90bd7ca5b1b6eef7283707e43d27cadfe08e592330658349542bfe8fdbf66dbb23d5cebe7ad1dbb85e76d062b9f87337395772a780dc567957f534c6f8f88bc353faee52664995d54578a71a8ec53ba27a8bbf1732e230395fb6a68f9530fb1ba7b956121292cfe68398d68c3a12669a1a7778c2e52bc331d1ecce4a6f341e4ca58d907dee51cc647f63f9283a7496869fc74a6b15fd61db65040677b58677aec3e417e677eb2dc7bf76898f0e404e0070d7ae5023fbae9e7f990998268c89ea995976fc4de36698ca3d02112419ef9034451f12bd8b0c039818224c20cae7688c6a181fbebf09400613ed6f2a661dae608c0733414ffca3350dfad432d5f2a1137285d168f2786619b7c5e97fc93ac38c0901323d9f12e5dce6edf0eb124e3cc51f3aa1cb0256636b8506309297d967fd689780211cc153f64f95f2a8245c9427ccc111638305d0820838a511767c145b1734bd8a3d9a6627846d89f860a03fa21793a0b0e91935e3add7d76ac985411b91633ae77600a4d741ff076a7bbba7ca6c3cc031a902fc07025e480d25a786c563ad98b75a96888be4a4fb6cb9f15517572700744745ab62925667870f355ddf0a6e47785fbe99cc08f9e67dcff3d00f44ecd1d74873bc9cea3ac656eac12ecef23fd7b8fa0b510e0b88591c12359118d1e8c50920ffb80c5685e4fb3cdd821bb79cc9d7bdef36c888bab3d6253920da7ac54a58655c164773c233e299ece05bc70f8e731fecb391fd2b973a7d7107ba9bece2638a1b6fc4ce6a33bb7671d1f5bcf2a61994766fd0d53563978f6fae3fd1da1da913b01d0ad30874d456fecf7fe6009129c03ec43b9d72b99bdfa78cd0a9176c9776acc6800e0777dbcff64160fe93e02207885908d25e09a5e29b4c238e2f5fcd3773c4daebf1ad2025fad03f43370390ef0576ef0071c4443ccd349efd7c57a8eaa7b062095195400d7ee46170648c04fb18d644a4387a0552a00eb97398f4b8e4bb11bbd2a1b0b9eaf4f68de2a6e9ec9034dfb04a2cab57a8d612f98d0fa78bda20514ec45c900c52ef9f0b36689db6630bfb984ec8d8c9b3b1e9d5b64af0802f7a07a17b0cb3a5b9d1466fd8341800d7f0d2933e9772ba17d60bd46bd55034491aad5a531c8c14944c753234a4093a6375cd07960319c729b4f18c2a295726db94aabfe91699e786b3b3e8f802b1f18a1d738bf1b63e7f8dd123538dd175c64b7a8868a9755d8cf5a98afa8f0ad294d05a3e86be0b412198bd29c0e3482c911d3ededb00d34773558052ed6616cbb2cabeb68e778cc27bfecb6d6ae707fc15c554169dbb9b08494afaa44819a10dc9ddad54199ab542dd149e76a7e59b54d2d84cb8170656f05d3a5b0781164429588db89faeb40f42d37ea8ce0e8b6cd746ca9b4bdd8d71905da833f53ee87aaedd5f7301b4401532ed917cec152516e3f010c23a57bd8578991917e5c81cbefec6d73f22c0bb41a389f18d59426f041b4d4f541c2c12fd19be016961b30f8b99a369af6b6aa22f0537134c8e1cb5ceddeceac369b13a62e42af5caf1864d5b20019b3654188137e8837b5cf31a95d1bc2d57829b8d7031687e6a9efdc862b8025fe0566530d4f6cded9e1140a28ba736ad2a342a2770f33706d4681eefcc2cb11ced92276a19d615e3f01bcf7b03d9cddae73abe059922a082c7b8bd630623ccd6f77c131acc6050f515cf27da9ac3f234f3189fae754a6540b8f361d88d37a60cb276a0c969301f9f83cdc267bd003459f240779871c4d5ef3cca94a6edc2ed2c9314590c7c9fd241ae7a2798e71914a85964ae4a3b3c72dca780de54947002c50dc7b44a833a099a0a66dfe4b57903ae8cd7dc3a2e2bdc97adc897681da97754a7234b19f98935f73c1653e1849a91db212c69fec6fd73be94046867e5e9cb59e39975d15bf7e7e7980b1c05e1084fccaad4dfee922bc8a01eb6b9ca79ab6f4347acdd2737107ff9c2b7a0c8674c8de18e63b6b01c515bea827214166588e3bf47cfd981f76d9e9c309e7abf63d1ecc8405b86b9c1e89e0c83a90fc225ecc91c689503583969a44d663212418332dcdf651eb8822f7c1f6486ddf55447517ff92e7ee330599f318bc814fff531e9ee95613fd49fb16640b100837d43265178c40dffe1a0f468b6e5fab9ac50ec518288c9416368f431b240853bf0255f67540b8b9a97008660b4da6292afdb3f1449380195cd846488e4b1896a06615f0d923e2bd16bf58c11abe7942262fa96ac9311bedfab689ec648728180189db1aea3ea6336e8e661f61c8c040b6e458f8510b43571659bef646e120220bf10d3d5198ed62d8669c488773636904a228638127e19ed9474f2fdb5fe8fce5281521b6399d937dce610335c74b0635f48172038fde0b6a0aa25fcc0c68eeb9b6598ebf2aa00e844e1d1a13cd5e5e745fcbef7f4b20e6f12a214ec0ed8940ac21434c1772dc1b166e3953c88c85bbe76d6ea09c619177982d32c3600c3139e8f3392264193b025bb71b77fd0ca963b6a5d24d03db1805859d3f875470492295b3a5da4f28a40a7ab02c4e5956b09f0a8f5fc05cc09cdae001af634321ba43daeaee3a7fa6fe7c9ce2d49f857184b70bb47ec04e19073cd2e2ea1cd5286ae4e01f7c0b9d9b33a0e8d37c3428650bf3e09b951481ed407483c7587db38c434dcfdab71450102abe870d8ad3eb3b2f9bb2cd0e859e442fc91a38614d85552cc6cea4071f410bcb1ea018684576fad6f6a8d04fdb4d27bc85bfbd6d53f28b0c960503d4f21797fe085c7a7c5170aaea4deb2ec2de359ccfee9cdfe458a337cd069d8186577bb9abc3e3bd30c1825452e8a26ecd55ffae504ed6252e244061565ebea68513157bba985c68eb5c53fff60ff619da0a526227eb9818b37f700f8fe68ff939f18ce413cfef0414e98cb3be0a0fb650c3d7c23c0e083edb31db4b60e539020bb889fc9fb0c6181531d478922014cd974936d577fe4e220f012a1cb1a5e349612fb3cc4482062c55fcd4575a9b2de7176416a3c1059349b5b9058b6a6cb657a420b35beb8fdac93c113357fec1848b37db1f350069ff3d371f139e7383dab33d5130b27d1d6876323a9a8166db3e416278fa921e73b985fbfcfd5fb43276e5928ad3d7e075d8bb9f3db1db7b308691fd014fc2016beaa96b176ad616c0b3760d9544d4fedf5320ebe31f70230a8204713fc5ce9399b931ed3a030a7f77b8ed15392ab1bda2012e7ef48d4547af5a2126fa05bdba444fa6eb2b7003d89daed2113d2d740708096cc138a264d068377084fab79760b6d390ccb358c90a7bbcae6b6af627c35793621a7707d4a47d417af40682656c356e75f89a6465fc590b078a882dd1d9d8c999f278639dad369fc6dce80e2ec60a48dfd7a83bde957fc268d65f7a7b30d3d198b2045fc8d1db7adda56604fa567d8855d1a5853cbf340a56b7b6832cb290d3e7c0e3a35bfab3f945b8490cd104d557604e58ec8761c10b5b9556f3ec4656f80f86ddd6610f0745887b58cdbcb85cdc87b68a16c8626eecfed80870c3d46f67976ab9a0dff81f852d585df0c25a5840527103ab07ac83d6c8e892a2ba45214907d641abdf9d43e2bdb61e1cecd212aa49e78b544a2648f03f2ebc33d87fb5c6e8313b9c68e6bb84bffd65fa4108d243f580eab99bb80563ed1050c8266b7305c1e3701e83bbce92bb94f832c9e4e032dda5e781014a01565af7140caaf1a22f1a54a8d73704c6343ae59f6b8c4f83a089bc4c5485c485f20c4cd2a46efa8b6b7becab6f8ca9e994c357244d932f04b5822fdfdc2d0ed95e8d75503b7a6c77e26d13408f8a9280d7de524e82e56eab984f6469be031145c365dc5777d431acbc773131df3aa7d228133ee4af8af2c07278c5b1a50fb311491ae7ae00862f732022ae4406a3d129adeb84af7f8ba58b6a86b8813758dd841736001f7f98501336f5f242adcdf6cb8eed8a7797ef6d54a900a79f1ce678e756418e709c107ad6277865f27bc1ff01f4a2b903a2be3462576ef9d4fdc16a822dc1f96afef897021b336f1e1986d5130790791d4600e1fe9b5816e882f29d9dc540a8d54e578ee039af798c2e245e49ee41338b2bbe5c709d4766a35280f78046450579333647b8aa73e90563a484ebd23d4d16fa008d0086c351cd16736273d759771d569caad296072951600d2e40da0a31865bcc5cf67e523f2d75d3c5bda003668b5e919f7524f49f38cc6744912f3245a3f52cb199ac7e988c18a907a7cacb3a89f41e0eea7cc1b5824fbbad26f83df3357127743239cec4b2a6fc12797d395ce0c049df7ac7f6d2f6921053475eb1a20376c58d094cca2b67c8d5cd7be0d63258691cfa6a2d1c5d5e3d6e1d3c8918b9d6ad0fe4660efb3573263b20f41c2925b8989f4705d5bac080f8ddf34ca0f9a276be0c6191a7e84b9d6736f32e58ba9ecaf4d9af92e85862246966bdc1cbddc4ab50c5edd13e1ad3ae34ce2e6fbd12035426d218588d7eab143b1063e1344b873d0b406e70fb17376f340cba0073b8bd1fd5926ca0edb5031714e4cef500cb53f39987ceb40769dda510f77d29a13435f3aa2291b22f84d2f49de8e4445ae590969fa2f3e68a972f1b6f986031700fd2974d8971d67d7480747d268e186822a6eec897c74dab2a9398faf54b6207d0fbd565cff254fc0c755f5ca6b5b75209fec3b970303393a973e3591827028fff1a739afdfe73d6d41a7de46f3f6a4123fedd1d3518de6a9c36c53309da5a2f25963a96197c7d3354d595bb8816795df60f049aec6697578c440630ce4eb210c9d7f2fe2e53b83a150f7189fc202ccd0c9affd89f02a68200056ef9716952597345637d416d6d149e31d7f7d047cbbaed05978055d3531480e1c436fa158133ab4854b95cb1e3e877a190ac0e719d4b1fb9943a17c3e6359440d28e6f3988c6fa488f5a860764df29c96451be88eba92c1fbeadecb9a60cc58a5eaadabdaf39e7adda09c85736213b101a8ee673fdfb9c9edc82dc9eddc29a27313242883eb4fbdffe6e2989a2d535dd7c0a901a1b6af59db861ef58d17e9c7f13cdb0847d61bc46c330b186f024a09a506ec3658d1ec18618f02ed0ca6951facc232b98b466b44af0f76834683502ae5f61883c9a3e87c0c5daa0ee12ab430123ddbbac2aeb6b544f6d577c5231e681718ce6878cf2d0b387c54d9bf06bfafae1a368a9281968caa6388546f53fd17b4e97e52ea96423c7255a3ebdabd1fd4fce1c3b75f6173316be00fa7b9a884d04bd298d193ab9086469407a3d8c07d466b2f13bf9dc0e549e5f6ebf018933e18487eae731861c07f2191f0904db3207a955ca711d222653cc5029dbc20a6916637484fa5cd7b3a9d9fea1f4f9e07d1e7e7f4de3ca0f86b9075bda56a5655272094c9cce8373a67581e06c4203e20ea24ff7259be6ec570eb646293991e1157fded7dd6c8fa31ef4538728fb0c2b0d1b8386f8a15a01c0d843dabd8b70c7dbc54bddecdb66af43acb5ba7e28fb01a30f82f46ffb0f96eaa115df3f54295fcbcbb6257423f2df3c27104315d0b8adf808b40931b3ecf3fdf0941d569ca4f10e1988781b4d197b32edcde897fb2a76338d818ce7d1d860204e285cab6cc9c5cb372a9e8960c5ca4c845272a9b13ba67c275147385bbd247b423963e6cb80232bae025f6764dd15b37609a8f5fbd284fd5c8c00cd5b828837542ffbaec2b15256047a835d6249a48e4b585423e0d757dbb79a804dd80fd47c0c72ecab58449b73c4f9d11260f1bf0689a93cdb69336841bde38f61db4c5071f36afe86952146aa73e6122f69bdae43ba6329c49dccff55f8d0f4b16b21433f9080f8e781309b259bab0e5b8295b86c65eee486848b633fefc779e49076f70d6b1aa475255ae109c3af8d3fb56127a913b232ca2658de282a31e4a25233b2040da2c8d988856281745a5783090941244b17de388c1cb6383277fe95ba40bd4cfd7e2dbbb29a64b2351433ce87754f029585ae77bdbd34968eff8f63cf85600cc3189bc1ac8230c78e45ebc8358d986e79646c30c125a06bc6335fb49aeae26de8d6da967d230ee60755451a1d3a668e801cde0aa13a42de637a353121588d96f322b1e02d67453829ad0a6c4762ff8a3115cdae64e66118ec3bdb816eb5a7af6c63e948c5351fe47bb30265b9eeac8b15b700c312104740e9e0174d89eb79e2dc004a754c74e21286d0f4ae7dc7b5b9b26b41f2b4a03a7fe2d0b23d78e04b55ca639c10ca0ed7ecd06ca9ef9bd3623b939756e3507d83fd607374f8457e6530bef3a7c048ea4697e3f0eacf19fcfb3a3da5083df1916ae1ea312427f8ab0e9c4018332eccf0773e47c27df60129c7dd3afb1fa89cc3365409728c7197518fc1d93a07016108b107824c2a0d5b420f4d100363ce5bfb317d449e727f2c5730c610c1ece20c1a3e1a1ef5bbbc2d2e1bb14a239c543521a185231d9ff8bea539d36e16aa79d70e64a0a324f6aa81d733326dc591e5331ecf932e57db855623f2127a9f096dc9cc6cc19743a5805e249ff803500b275bd803d0eeb5edcefbb9a3a9bcc5d167ea3d9ea484b98ee5cdfda62a942cd2c2b7388563ea9d9f7ab54f93c0bcf0c90e43474172f1ee7a82d44a92f0a6c0ae5f4f269c75aa78b7328ccd0b800389ba0bdbd39f52674a30ff7ef3a973c37667a6298b912eb7affe9d891b531018f66c05bbcafe6d6d357a03d0e134db72b5c43e4f4dacb598a83c64b321b39983a1a7a5e912a7eb8b171e36d4fa7a503ce68ed0c9563533d5cd392e13c87343cdf033936f95e2f34958e5419127c5f9a76f8d039d8c74cff785bca4aff6da357d4dd7765539f6ad306097cc0f515bfe3db98980d5d9b1b285378f6e919431981b1f5cf6a1e82d42c797fc7e575e8588862c4aee79243303074d7833c18bc0932fce8bbc5d89cdda9666db0070388bbf093097f68f5543eb062e409b45c1cf4f42c22a7090041f9c2633fef962c5b5ca4e2e3a40215329920942af502720a6f4db6201ba43416bb1fe672b1236ef4bd1dd8cf97336082d1f98f18cf76f8f8da98318da407d27f941a76b2bf3f39c94fe3fb49d37d75b97bb3ba3a13b23f5cb96c14c7bad46a01073a7a6c643a1b6d977fb0cee360b34ae8d7bc0b4c14d3ca9e41d64ada7a694f96f887fc3ab4924626499feb315da7bbbbedfb08e34f44b6fbb1fc938d6a6e9fd5ed160ecd2f1ce77eea1f1b67f4c180675f0dbf73a210a654250e3e4e44d8862680bb00761a49c603d9c4dbd1a6af4d7db34aab67bdb61d2a2371a7976a45970b4bdd6ddff677664781279918e3bf57618358395a12a3800025dd7be37b144716b6f3c36554444cdc789dffa84c7042a537bcf5a511677358b48807ccc7e32abb4aa49da0a42eee1538be6bfa4170a3db48cf7ce35a806ba65827f7be0130967b8f46590c7695ce9449ff6aa9532edf564f261b9f5e7cdd7b7933a831976b3ed9ed8f82134c2772cc24e77810020979b8b3577e339dcb5d3a9011b5c1fb116858fdb6a56f85425f4f41ed10d8ceaee7650dba013a88da4f8655688cd9bcc1c77b38724f5bc284f8702996d16e297dcd0dc6e4313ea04838c1019eba035cdac0a31638cc62744de2e1547b164a92f48ef5776caa9a8493bd8d5d3ab9b94bead8832f70b93e2b2b83155af06be8abb191ce8799c9e8a62b224da0b308761a60937ddcc0a22947ac7d8e959d5ed2d42399fb70121b93759d2b84749e22b438ea7605b69ef3ce6a2f16bf9cd84ba39cc8fc0ed95c1c4583682db45162951e37d6f4ad35623a980342031af947dea576203c7b2bee48594ffa9d6fcf86dbfe87b493f6e1c0f3109373b73313526482e0a7dfb2d02f2c694be31f19379163efb911d8554421a9c2ab42a79a738e99b67cee5a687ec534dff7a017432218c96c4c5d365ac50abb18ab2d58b3a262daaa9b6230ee7016fe27e3c01a70377378fea2153279ecf2c39d23924f11185593e9dc9207b76cbaf4fb90b19d22b0380f116ad8513544604fda952fff256e0d71fea0fc2375cd1795b57ef313cd54dcd83ef705271f33d9bc2b8034ed82ebc0e153990f289c09b36cd01f0312e27de870e1e72a088a63c5953a656f9e9c3a366e8325599b8cab24f6e5e1701f0493d175a4abb59a193cca6771c53e86e3d1c475f7c659d0da49d2a06176b8aca64f2e32f1c546304e274eaf5c20103aec4b01944c0c8e8d073e4315dd3f4b204a08655553c44a8f9bcbd8d963f6833f37ee5445da58760496210cb3a3bbb62e52480d49351930ec8492ef7223c905e8396463073d4a9efbf96a85f66f6c783b61968c7b303497fb8b04f906160826da73258464df4367c7c3a3457aaad21fbc0a6c7987bfc6fe2121aa8c11a544549a77ba5ecb5ae37eec6743c1acc08cfb448f423aeb4e10d1e1faec2f017bfe1d8cb98b48b71aab32fe66c491094aedb94992b0771265d291d249524871e4a5f045bb10d8c4a8fb226244ce2a1cc484c85fa72f8499816cdc66cf656ecf89dc6b49ef0395508063cbbc73990353a7d2b6eb2f1809ed3b400013efae1896d5f1ed0dd7bbf5073b65ad6195dda34a8f67f360ad126d8a0e0cbb6e1c84cc444386f3f607a27e45248135f60e04806dc5b50c74a3a725fc54234cd9e8a1f0747d2c2eb6f16fa786f63703ee5ea62139e53a708ba53ed9c0a81462fbd65e3b93cd21ebb5276be7690b0775cf0a1b1c4b8868be1a1451ef5394506c286831f41ece38c9750c4fe457ed6329fc830bc7ff09d043a49378ed318387e6f400c5b091fab1367b3253f4d017ea9f0b7bd0bad10401afbf852c39f7100b51f35281f789cd2bb13c1c30bf6e050e338037127b7de16d60df7be47bf0a45b3b8abfdf4f62d018c84c3c6e9a8e5f3e85df573970323c83f568ea2a29dabb08123ebb661eb98e08fa0005662cbd610c049d5ece3fba6fd5dbf04265a9f1ee826493d79efbfa616cb50c299fdc77c4e74e2eb039406315e3930a374f92f2a96aa11e86e24db1f4c487d4fba42049f560a127ee1318b8a93da92b1b107b49662166236bf8ba5cb290f0df1dfb9eb07cf8dbfd8ad42f47a4349cb77080a962bf371266d91a986725627eaed31ebe27b6202d33f9050a8c9168cc53d9f8c3cb1f2c344d60f08e7db7a98fa8ed75f52c5b77335fcb2e20f3fb6ad664b9e1410f00614a4b95e2f2ecf3e6b271bf99da4ab75e7cd573a8091a4c8b398e82e2b79afd86d2e5ea9a6c5164aa757dbc12e3ef64567839750b296bff7a7425d7757dfb810d5ca0c16f612784554741755998a6ecefa3f061e018659e8904cf3a023aad15555600dcda67fbdd77b6518dd66eedab9a8e9eac9f4c93a46769defd11443c34ff4d8a7f73e72aca92312 +MD = 13e5c314de965ad3104852d2127c979681c0554f40b86467bdf93c0d0e04d24a + +Len = 88144 +Msg = 8d00054644fee464fed29cddea45e65c9ddf35514f4f8f81480e9cc19540fdfeffdbde813e0acf7169d4cf9ab1f9aa6c4f1c8647bb27b8f61fecdc790b0824076a0df053b5e09f0f665fa5aeb047de6f6d55239758ac1afd7c7752cceccf8f85b5df62431146fd43ddbc46a34df92a6adfd334c98da65ea147f82744a05de580c8995ddaba059117b634d901f2d535678ddbe266c4dc2be768b782698f7acf018b83089e18e50292d90d874e06a5a86d5fb854f564172ad9c7fc8cc222eef50ee6e48c1993adf9bc2f8f7714f12f2a853db0b4fed51f037e4d0f6cd7bf80feb2c10610d394271d9e9e04d2da1a3c64b60f0d27097ebc5ddee0374b30d0fa93f2042fbd538119173f0fb2bf29eb93fe08bd15d79fc9b6e00269be5156bb225bd897a8bb21c44c8ea86be26788cbfe9f832f11ec471dd435f1d1eaa5d0eac1ff6b62b931c5c3882bdf98ddf17f2243ef304d488e8ae2df04b3fe047026c39e26b34da947c7e89496ee80e88696592b98160004e3ef81a0f451da53d9e1b08379b941c227b09a3a76dc094e4e56d67e3f3d2e8b16fe60dcaed24c21098817369f84244af608404073b21d55704602048faec0274d3fe85eda3e3bb428a36280411ce08adf55446f3677a34715ef45842d709f1db03b81ed1f9e91565dbaf829078a5bca08210d8f6733836a64d708c8c48bb1b86979945025f9354cd05641f998d57f5299f30368aeefa5078688b196fa08e03f9d81875095570fe1aafea5b89d053269bb548ec1b1b2f165a28aaab777ee13f977dcc4b517c0075c133b8c2dbd235e5895cb16641b844fcee16359f3e445322f1c11b147523d050432945e21a136ea6851e00317926da7886b9d2811e916242ab7a8b8cdefd5f1233091835cf146bede141bbda3be76e1dc67bf7edb2d68d32f6e2a40119591b3ff34ba64a6545cc2050905acd049a6e512fd52c21759432689691eb0d9ed7733e0679867c7727ede2455253965d8069b7257dd5e8e14af057ed10c72ee9f925a10f1b2f586f4b7fa822303ca2c169ceb449ae8b90807b55858ce7ced1852e70ed6f99077ac820cfe689928c9eba872becff1fc3b4dda5c075d87f7891eae803879a7bb5301c387d21edf1b9c6b3990fa5c82a04c2434adfbd62504aeca5d64c14224baf34d602f5eec1e64ad746ffc8933755c5456bdae1a0acf2cc4e2049b8f799815bd58000c8b1a7e8c62cef2c0519cf3b8bbac1e694d43aef6332f4e2e8c662b551bea4c273fef261a25406be43cdf243de9ebffe67dc7eaea6479e0249e50030174caec8763b43f965d93826e31432f7247de072c90e0aa90bd886585af814ba12fc18734e0b2f089718fde6817113cdf3b4cdf4370d31671a7238359a63f29beb697c5379c2e627acbfc28d9d892750d2efc2f3303eb58148b14e2a96bd3c5df701450978173bcf1d2a207ca5b0b008389b79e04336f9501cf212b7ce685488cc5ffcd5c76c82776ee49244288c705c9b245d4bfe6a6f8c1dd1306dbff9cda4d1d22e78f6274cb9287b82649470dad68136e7a6c06d9a6db1bb11acd9e62a2abe04344372fc0cfcc05b8b6e780241fe712fa38117a51cad7f3c5105aab1dc92d762b8c5cc4f45cadd1117c251b5584ce19b0b5b82a538a3ecc158f8a0e16765c48a26806095899bc518b1f0a00e804a68f599a68fe2a0e970d6b4066af95d2bebc70803ee633af81eeed489f1825c6f6dcbd8e2ade1d7f6a208dcbf576e105dd3b5c7b0b43cfc58410019eeb4953f34667a43a05b27305406c43d7404c4436412e2f01760872044e208dcaf67cbcb21f9ad645016275c79f59570c4d17048e70fbb1bc861d659466845a73c89aa62c07dc1a5826d66bee124f8f1426c16a34f40caa51436af09c54a630426a895a8988963a1b7df79da11eb6b594d330be5055c7e26bb5d85a44a1edd7dfe33320f02a2efc350dab52094df68f375a4e480c199621b0e54dedb6d4c016f13b7e3f89740d294fdedbd34e2677e6a2c5014f8ecae02ec8dab2ef177589b6207a54017dee9b8910f970699731a281801c331dfeef0cd25c9cf0a9920caf8016a99cacf42040e32165505a0cf7dd2a7765cbf8851184d51434ed634c229a3978d03e8915936500292a65eed7ff91a72faab1294bb7afff97a99365703eb1acf1f521e009ce70a9d151956f1dd127c152f2cdf87769f5178e03c9f624e95ea027222ff9f859cba4c1e1ca2309f60540854607ac31b0bee7a04b765f90aa09dcc25e4f1b09bddcb9a0e2eb54c0f595ec72ad478fa3127235768884e9de0918296bb2699064810db2175de0486d563e8dc12f75e7f21979cab7c2dad9338ef44fca24669e322dc556cd58914736a267ea1ad479fd494d3c6e0c01607abac2051686bf2c8e9b4a6b6c6bdee69b43607acc23a53b19ce3521e81d4efe13982cb3464788a4a8c65f69bd98f4c78bbd18defb87a9a383a959910291b09cebf85567a6b789b633dcf42611fda41c5ecc53fb3fece89a820341f5821130224b00c387ff7cc94b7904910a2f41f5cd5d97973960fb6b065f0476b33144d5787bd8007d193e5049c067bf7de10df0c2d0476f00255b39d163d37f35d7d3a787c3a994afbca6279a512c05e7ed099be3ff0360b857b45ae1d399e4e13c65ae356b9b0587b05b5524747cecb01cdc001931f4f4c9beb0d720fa7d2e2127a3f36bbad5dd6bbc06e2d1707ffb40362f274aaf42b29b22f5b7741fa8e45c62347d12f980a3c5aa4fd7878f5cba0003a9165fc21422964b2b02c789418ef9b3c2541071c3e0fc40dd3b30173cb1564bf3d741b092cd2301fbc1008171b462e3f2814f67c71b78475916b3514669abd5b472d6c1e63aa80b0dfb074f60dffeba6e0bb526b3dca1866a70f885a369686a95ed083f35f18f3208b8c43b359635ffdefa2cf5b0acdfc7b952e7fb7a39f3d23e52be70aa7b3e3e94001f8d19626f7ce9579b1be6119ad0eec368faf462b6d556a9e09e6a5f1ff75adc008c33ca14f73829e9e17c953a6ab0cc63cb396b173a86f8550fa025982402534f81ac568c397378008f9bc0275da774c0b770dc80cb7549070b7256138f346ef4b4ab8e400a414cc76d6a19c9717cc36704c23e584ecba3dddc0879f7fe9734d76d59fb96314aae26c21228896ed7c140fa5617078c320fbfc98b16ac3ad3ade0f4dd24f77837a505d8ba75cd1b5f7734e355f2f54d5093951923b69a0b91e1f8906091cca5b03a4cf58b89fe41bdec2905e6548a59cd3a4715f7e0293879d9058b0acb7b815c74e362adeb85a8992808aa32c72e775209be05301cc18b329cf02b02596ed4e45bb3674723c8189934ba1860d24971870ae031f5f2caca6532a2b971c30b66eff7a24b81ba31596817269799fe430d134496e06febacbeb9a4027c7e92bcfe2651995884372732acd9337105d184149fbfc95bc68ecf2fd7f9f7be524de866317081d47822116d0e83cbeccbd5744dd2845feb21639be566396bc5147cf664b75c4008850459d0351cd55214927b82559a42d6a8f379a70f6c45dbeda850c1601ec03cd1636624caac38e9078f0279cf09586485c5cf3e7a9b6d4605585d44d6bde7b887caa030743cdefacd546ffbe9da8bdfdd6206734ececa4e831485b7be419fc3cdbe6fbedcd2aecc8d692cd04b14c18ddb50870c330b463d906430e0c3b3cfa6cbc93b94a97990a970579fc09cbfe4b8a419b9d1d35cc85953d1c6898b1a5faaab726c7b84366cd79ea5329384e4dba66344038cd3c839ecf5e2af78be7e361492416a3b15132a9f3edb4c10ad898e9f3e5acf03de577f3c9d20547605e73e2faabf9e9c0317b34978815401bcb9e5ed5de284ff9a12839274111b4a085e5e421b736e66f74aed1d7620b42c5c79c8d7e9648948af002d35a23f6dbe6eea7e940de6436098b5c1635d3fd35933d31fa40a6948a6c62a666f4e32b398df94866ea79e86548f5f176258671952e9ced29de77828e187961486a07053a105635f1811259d088351d8638c1feede2772c90aa91991c0994e20c3c183b7a1855fefda7403f2441d91eaae24efbac495c8ed3377d4eb0da55a736ed9f345600a901ffcf8beebd20529378b465fe5cddad7245f7a329f8e52c0f4cf0f4667a53affd8c5c4e0f279e220a6421bf8d7c19ea857d7daba130c498a8a2d8c068439bdb3007f01f16e005c7f1e1aca41f9688b416fe4bef5b04e31c01fd278ba03e53cb48070d677c7301c4d895c7bc3b18947ac52cc4e69de1eb3689a04faeb4e6f5f0b41e06cfc64d1ca92ce51580468ee7af1ead7b4a00642778ce20c3a20cc9fcdbf2a19ea07afab0e57d53e868e875dcd161d4f15228e832433e13261e1e53f2fd8226279210f858ea3866e30e9749fe725d57a9c75e0a962667ebd97b701152c5f130241d0ec28f57ec9287c9b997c7225f9a26e23627cdb2ca1f7032888eb6d5be442699faf5de9f086b3922e5dbb131f710db6b47ec4348d3226cebee28799d47d6a1a13beea1202a5589b2a2726741a25039aae9b4818911a931f0178b159d2c6c27bb682971abb0e5fbf1561833d1efdce429b20d12d413f861f78b033555ea791b50f632ea624a9102579729b1634e1b5d70277271ba48a46f6abf3d4347f0821efa6ca7561435fb2f6ddc236a562b9ff816c07128bc2e31dcb22aa5b9f3ed1b852041d36f022168f59cab91c95b26df56760385a25a43351c6663b913da1ea9f06b0c537fec9b7ed77c7bf148c2ce5dfb26672c69051602b11fe103eb7b33b1e32322b41313e2b15785c3ce732d7090589061d1f75d154f3d1728f2ab479ac7cfe13b61b318b584f8311985d31bbc2ae15c9a12d7b2df5f1314b221cddfd260393dacd8fa7b828e3c06f3b3e2ee0f6237e3667b84b6c2d6d571030ddda468ff9190fda633bcb821858fd8d52d44f8eadebd6d5888c96e3ae6b492136525cd1a7b73b446094ce4d377343f761c80f7392842f5464e7b4fffd967e5ceced48d25596e5734e5bc8738838cadf32b5288b1a73cb4d1604cd68a2ff384bca54117c4bde95cff537c2db53d019ae8e41a3c08fdd3226648ae908e5d0fe55972fbfb5d0b6d3c01cd1c36de063b9cd3d1487f937edea49172210c60d2e59e21a255b672d4628ae8dd0d311761830a207d7dc1e5cc87d1cf7734b8a6443d05a1cdfeb79abb71b010eddfaaf5f170897b432aa1644997309cb26a13c3037eb2665057ad39031352168a0412fe189c8130bccfacb378652765de21bc5ba3232acbd3e0d5d24dbfc7663c0af794596f97ed54ed3247fb7a4cd7350c00b4a5b2e55ec32aeffb1defa69c6e64d76d365223fda5f3e096355f075d61798f728da6689b98a64a17d62b7605bb9220cd21fcbc0e2a842622a88bfd64ee0ab719bd862b1eeee382bd18ebac4e8e236248ceb7d68b5d1e7171d779858a2530262ec7dab3351053085f58a8bfe360891a747f2be9f1a813511844b03639c17a4b064f0c879ab785797317fb2740dd43c7b4c5b19cddb603536a72b885f02d59945495a41e9c3eeb24acd95b79034ee3e8ae34f135abe17ee6fcd40b0b49d34ea07e3e29fed63104b8410f323b975fd9fba53f636af8c4e68a53fb202ca35dd9ee07cb169ec5186292e44c27e5696a967f5e67709320cacacbe46a8070a9277bdb75aee274e56f75431af294ed1609c9f22e2fb144c08dac1a4284a45da7bab5073c6c2627a3a0cd57399511d919b7b4f2990a9e0654680af3d2dc146a3b9215dfe0855a0dac56cb3de4c6172fe0ff17df238aaf4e690457f739f3592ce1580ef3f68ce6cd5bfbff6590f82d68083a433642225d835acd1382cc4cdafc154710b1e2e554bd3efafa7cb29dcd07fc13c7869954315bc62cde252e6b227e6419bbb83a114c73c1ee2cc1ee396e8638f6255e8db2c32e27ce186cc4b0c82a4a3a706560a3067791400703985d9a694b6bed0ca3a07b70ec0b42b823b024662413cf57fb1d4b3f099b2980457cc937bfef7f4f5fbfc2daaf8efd95c00bcfd8ae4038ee7de26340a75a04e67a098367e2eb5c65265351b1dea399842e1632e8354a3db74d94e712f6f71994aaa64170610a250c9c2d709cf5f3b711c251f62b559c5e40fe975f3c851cd8295bb59bf7c6a649943580d7f281e9d6bd215172088bb11b0a158c3403be15e0f301c9fb54605a3a9a671fd0690f1068f4cf974f064412e47106c5fe2f2e8c94a03155d81cea90889dc53cf256f9e1ee473195d5ab1b5c5b1466e7261532db93bf7edbbac7a1d3a40cb46ac652dee8e722dbcfbe7d7dd7df629a52343c87ad4e9f2eee2bdb42be2d65d94bc4d32a9fe41632b761e3e81ff1fa35b9b12b895c25cdd5efa3ce399a85478832665e697155afeaff5884e6bf3349bd601558b472c9ca1862ab26e3033c1065d1335b27f7cc4e48ea0ab7062ff3bf8607e95a858bab224ae9ba6bfb82c25ee68aa46fc2bdb87ff10a0110a2dce3ea43f3a59799013a5501e75a03df93a8818ed141f2d61d9ac357f1d428695064486bb5c2965b7e07d0c1ddf2850bb06f36c337848aeea1e3970213ec54a625056861e0d8dd494c8423ff401c760c5386dd284ff4ae68e533997402c21c05c537b8cae740e2ef074fdd3ec0404d5e077ff3226d0ac3c1420b192220fe14e4ab8bb80b5ba33dc938bb6af4b106818d46bb0746215f61a462cab490f0e8a5ef6261e4a7906854445b673bb594c7a8f69bd888080f3b1e7ea202ea45151a6572646add343818bcfce9d3edf60e1c2a366158f3ec894640ac9a3438b2f01bca1a3c06f015a52cde5f5e71e03a6f7c8bc951ace97822097edab5ef1e6f04655a4353b6dbd08a3d3ef833d1c0f74b41543bc754c71f5bed2f758f8409ddd47f8c7a35fadf09399265341463eeb1243309ea4ce11b66a979e90971a38983e2d2d75b7d53980445e4d7bf4ab8e80c8caa13715cb264c29d38220316ce2bf5b1f7d1337451957631ad0cd671314b4de72f175d717921d7a99070fef9545fb7b466e0aec56535b38f438b36127d7709b62a7bfb1585d0fa511b3c6973e6932e7ca8ac29eb1f1760a150b94a98fdf9d49c34b7f6c37900cf16511abf10e574de8d259a315fefa8f23a5d4d808f234212ebc651cd05b32fba8baa627c7ae1635c486621618e4778dc9cb18e646f8dfe692767efea56d4bc3103bfca3dfc5aed0c30f2d81710b6f5a45af61282b4ae7d2bf181d8db314e44e710d9a8502fc28082f95424de61ceadddf7a36057e9054cffccbcb31c2f90383155b0836f8fb8bc44e3f2ae340bff1fede5420e509712ec490b70f5299c3b34a434bcf1f8969dfec6a366ca9469b8aa58c64a63092967e98c4037158011bf98b420576a77def2d67c9a29009c259c0ba2fd3504fe2a74c35e0d879abc2a9df2e5bb285359b347c1fb3aa1e6a7aa0982510c8a6a8c14b9e822c5db0b3a4146c1cd67a8433ace1d4fb72769f3438191cce776c31a4f72a7e67efbb9dd86f05a83bfb84fc08789d3de34d2f9bcec26c539eabe778ab4bedf3cc7319c983ea239c7411f9751cc711c0bf8bfd98a2e040457bf6600326863c0599fea0ba1ade174fb0620075d761e46477750720175c3dfb4e9eff5b7b70bebdb6d977fa071388c9d534c286a10ebf32f45376ba95fd0c7c00ecee0714d11c220c4cc811b0511f13ccd0672fe2954a301c6d71ef848a55d07728528f5771fe3d819eb8857f6084347e7e16f902bf2c68d80a21454dccbf009d9a567cae180a14fe1971e0da075e34d286f76a69540ee21173ae46568bf313598a1f55808debb26c031ba92b0f551caf2f330c7f1c97a5adf13f7a088e9911923fd8a23599471cb1a5dd69d94112f3ffc2f267adde70b996cafc68cb9f58033202a7ec3504c75cb747e0a74c633dc1a9875b0159644026b2460e980884d8f0201bb4b9e796127864314cebec3d7e8f95c69764ed74b0f4ebaf9d922506c2e044d22894b516d17ba2aa48be21997b64abc7cd18cfd7682c274bd0df8cedbedb866e2b02064eab6a58fbfca6533ddf48d3d126a369550fd65064d006a30173eace39e48d4304494f6e6d912deaf25043f52eca8f21b54df84d40c58fd40a8a1404797cbcd2015231cb462fdb4e80765ef924e06461c1cc9c0627d60386cfaa6210771b171c0d6f1959cefd37e7affba0c7fc91a8903f31c963632be820197cdada7be72789ef480eff4f24c91e47841247fe04e515f827884c3bedc90cb0a8874bcd0b7382718418a50fcc19590fbcba627162a25ab454e0a9f6442bb15cd56e49b4ad846d59cb3f33571bb001d048a2fe9fd268c63a60d962dd579877e5ab99bd7af6e0b370c78c926f3c157f52d3d204ce7dbec154f47b5f384f97c612d40f90650d11bd7e1e06a89f55d0395d03505d478a2cb3c8b8cf894f53b106acf5d8a8be1a9ff24b78b65e2f8f6a99b98026ef52223a045f53dcc6698c6c9f7bb9fdefcc4710b99e7ea29d66116a062df35ca4366d711de16eaaffcf2253fa47c5854cd9baee7c41d7d44b8e0458e88304f8633d92586416b0421dca3ceb7dd8c478a62b9bc0a2fa2c5451ed8fbda6815a0413adba7842c6c2ab06a002be91f65cdee70b130f9392252898cbdb1faaf09e879ecf0c5720b84beda4999d539f6835c0f6c14a62b6d1695a07720f095b97778aebebb17f64b5f411ddff35320df7f825bb956741757ea1f28529540021408e14e249d0787885651e9b18f1e4446b4d161ecf9234376374f6fc37d28e64b18a2d6b3092c8c2f0451cc52efaf0ad8cdb9a07b6f5c465468b7053e5b03a8cb315dd6eea1ff9acbe3c14438778deaf214bb95e93b57865f08d67727b178c010ed42dd3bd9e939cb6f40dfd6b9237b1f4447b0baefdd9a02923e441412e0d2c8a712482f2371cfca1120fda2470811dcb6fe9f64ff36e7eb8f5eea77e1e4473ef94cb64d0141e33474122c5f93b475a6f740a08bebfbf6867aa8d8f7c0eba3f04e4285fa15a20a970274fa3311b0ed0a8fae727428a54c4fcebc9de8127f5f9920a465cab34abc6e46c9d5d153760e73da9863c257cb6fb405fab7dd6907f0761ad2a4438c846f26ab915dbedb8c407f82bf130adbc6c76fbaf3a54c372e0d33976defd8e3e7995ccb6bd0501c5c3989f2530e92373fe9cf5827f4b8ff59ec3e20d6971f5bfcc17d00a9fc39887e402fb424951cfc8f5d4f581804b844043412319d386b773c8e03f5dc3fefb26afadd427464ff8e4d788c554473ae87c57b4c64324261b81f458e0592f9c73c9ac02f27f2ecae7ee2f1f2ba2dc0204d06084913265386811d8e87da4ed87469864671cf00aace50f8201f01345892065e8184d8e9ea4e74dfdf6dce605a5bcbc5e451c22e1dc386f5a95dc508cb9846376dac201d552e05beaecc6c87de01f5d2205b8bfbb4228353e45b601b97877f19331b731142a9a63273003f15f1fb5a2390db96ca1c6ff8ab77948ced2b04237c585f5c662135f8e3d2c5b0bb34ac8b42ac7e6d3995003954c97585de1482e5e973f4569c8f87503b34696bb7f489ebb7d99099caec87e7f8508af59ed28818e8ec56dc24cbe25eb11e87babcd037fdebbede86fe516b66fea341568ff3883ee34803578f94eb76ee079d483a462b5456b2a4df24822f48e048351321e607ea710d86734d49073b3a76167ea0d4d871915b8fed0ded47f035a5e2d605288b8e0aa36c99de76ca1e3ee07fd890eac3c8241ffc3afaf15a1f7742b6f9aa3987ac28b00255c39cb88253ed55d08b2671da778676638c4cba092db53e0871a780c753aa04118d29371a21d32510efe6772b14158ad1224e0c5fb163f48d0be10b6203f7ce57abbaea48216869f43fc9283c7253a62e5d73a585bad566f1d9848c0ec23fedb29fb0269ecae3a1051b3d19712ab754b5be6c3a1d929ff1c15ae0971006d8ceace9a7908086fb46cdd2b0df7ba5b71311a5861e79e11a419600a391385a590d911a1fac8ffe05d7b926d2cece6bd96dbca35fe74d2edac2ca7b4c2eca254717199176cf3f9899d04158018bcbe5a4d131486818e9b467f1e92b28a458001977a0f04b9cf1df3ddd1116cb7af6bb9fc9fa052d27e24a285b6c80e7b6546346abc1a70c8a594a583a82c3af30f15620d4815a1d98c938c26bef2d07c961d7552fe636481bc8627f9520ef1b222e3dee6d61b7b7eff1189cafcb7fe741e2d4db70a92e7cc5e1a02a5976099de32feb4f1115ce9a921c523d93ac0a24d469d4301a64e0291d178bdf13eca3b5e858e6c94c17df24238d8e1bb3eb4c3ee5696e0989b3fbcb85ec9e04411f3dd1a63ba8f39ad299f318d714bd8d03c6a3f963faae4b00e1d294d35f405d6848afa16aaa4479e06f75e68b9ea98ba009e284dc12b4eaf632dcde6e3809e562447e6e58733265cbc02b110d84564c3a76791c543eb3c5ee5f58a71fc0c76597c1ec61779c43daff4c813cff5e5a2b2dacd6244ee7117873d7c4935a720f5a7341682f5a7e0f65f56526aeb3850bc5040d98313e94548f013caf37b0d458307f33702c73a0eb83389a7a0adca1018658292dc7a5def35620ee86e8b55028842618a2fd559d7ecf436cf9b5dd3ad20b9470156c072f748a4d6dda4ada8e06c202716ef662dc2f86a04d345437aad3a13382cd72f4fe6e88014b17b292e669769ede42bc3de57455d9cba84a7e89ad03cfc1d480d1d447cbc706ddd460e1c72e55afacc35931e3b95a58c42d045fb49fd3cdc92a303976e219118b14d718a635c1762b80274a042d9c8516607b8590d1ca06f9b392a69257720badf867e39d395cc24d972aa64c3f3ad12d894693b8461cfe04d17ba410986c45c4e395eb02b59204615cf5df224a9fbd780bf8129169672378f84daa882152604e8ae3877d170bbd2565fb4d3cfc45aa646d028ab2b81307a48cab225f8eeedbd942d35172fa246cf836cd88e2a0c7489120e854a2becb2b3622f6b40d3d7c28c3afd7d17abb76946843cf1ab9f48ee87ccc2c18d7e9da0e9c4fc2d817b994d7bc36737ffaf76cb3e411726b3954273a85c3403fd8c5ca12556781f7159fc359115b38c58a2a815bfa1479f2d74c0a9f5aaac7420bdf35d6e00ed6a97d3c723d61929a3a8ec15eed28f1385a1a38b38759e723c817a287dccaaa1357b52c4be53b710a57af585ff7df0c200978c6bc93121cd82a529c5a9473cdda9a63fb9af0fd8b2b95324c0f0caad9d37989627042f19076e16349088e89ee9ee9f006f9d12625508bde38d68c1aeec532b2989907970662a5b0152c3b6b90d2beeffae31653f42b93f9ab60f69dbf77bd9ad5716170c33dbfcfad201b97391891ca23d130f55c1f562af018eca1c05d8298a5a3d0fd7b5ac8185daebfab5bc2fb053e6ea188e19e4ac8b378dec5a5f92a3295aae6bb736c3730c30298068d84532796f5e89d094ada79620b3d87b4ed0cff01f103396fc485af69d6254722bf52b7ba11969057879db3883a9956918ba3648700c6d5b5064bcabe93e7cbdfe6522c344c0c0140e6fcfda29172b0a05795f9a164a23ee7a3e2393dc67022f98bd9fb820fe97e59eb80be2dba3a3485f35d24cda715c37c20016163e82edb243262ac2fc78f560707b17ba5ff8040a6c1518c88229211d70cf1e9cd63a462d45c84c49a2d9e26dcbe17cc87dbc56377642b874d61c798bcbd6c28d6d341487e7ca8cb5d8c766f4f912c176ff98a1b9c3e43abaa0f06c661c3a8a51cb1b5faa7154736f67ea8add40356e2bab33ee779b222701a64d0297ab26fe50b895307d2b9088dd17ec5510e9720b4e4b364459482406b0b1dc4406c0c0a7f2fc4a8ee85ca45368af72d0753bf22149a548ac4711135f318944399ba3300ca05ee481d34eb85c78f92701f580dd378382122d293d17bbebf62ee93f9b9fb5c0a808112647f52c76bbb0f276fe5bd664a93bcfe71557a046c0425dd8f2352bbca06047c990824ac8beb8abe1ff928554e46c9a6ae1fc99aaae279c4fee19f5fa0f942aa571883ed8cae5321fc9adccbbf94d9798e92d2b7f8a86ae8dd8749be4bc4cc2a0312f910da7df9117a4d23301b185cd5a7413e02d1a069c79f86da6e0712f18a31a9ecace1c4fd0b0da2a438ed4bd4599cbd53f1c27506dfa952d9d58f4e5339772fe7185f2ddf5d4b2dc83cb2a9c053b379dd0b5780b29faf8db08b30e171c6282760e99f1300a6a73107c1e7acb1729fe901c5ed7e0d9606aa07059876dd9ee922f2a72e1f1165966f0b4f08ef1824c68d8aa800a77841431a45bb2278e7421ea514c788ac7228bd3a1b5aa2cb74f8bbf9d0284da7732fd950e5426b623f4e5d103fd13b45b35e7024e07b21dc585cd4906add00f89eb05e006e01dfbd36221916dc4ab265557553a1d307229c22cfc503c32ce7154b81358b689ffbf47c5bd70b829a8a95c90bdc436ba5017574dff1a6719e5c781a0104744d634ca2625a0b70cb4720518e907e8c22db6b12befbeefadeb7cdbb7ace2f3d84f24e4198bb4ad90ee710232691ceee90f0bbde71a2119392ffd739fe372a59b7d37d5c8fde09c6d5e0d675219e21ed2eab70432d610df316dcf58e04da8a4b4e7d664da860ccaca8daffe1fff42c0a645224eb52c7388be2e5a5223f26c3a4c16675bf82b2080d001bd8d4225241b8ca9b4631723325d07f8062910dba7ad8b905480c9f60506a744a1dd62937178ad9dd50a01c435a635563ba44e0f3f4698df039cf6eea1a476dec1b628500f1f31a9ed0d1b1664ab6fcd618c86961e4d9c8ade76261bdda2655587e03c64e8583f5564320c21a8b3dee7e0a95f792a0abe1a4bd80286a2479e335a2245d7e36bff2aa2427dede707a92b20c382bf4dc42716b4883136d6dd46ffa145ecb1e79f9aaf0f0415830bf0fa218aa296706ec5fe06804f5c3362aa8842c612d8fbde3e386d13427deafab4f652840d449575536c7317f52b862ff78a83304eb1bdaf8e00ea17c25c2a9e9bc74577ce343449b799e4e1424536240b744a47c421fd42d81bb0814d5b4cddef9582ccab0d58d439ace146fe534b28306f20733bcec57f63b147bbab2256a1f68792e96d7806fd20cef2aef0fcce25aca38b1c7a601c4e79e9352ba45853d1fac6fc38dc1c48acb626a081e1e9c602c83715aa4a800b9760eb043b00a548554179481fbfa225c941dd722799c23ba7cc53468573d6984261e03b5286b33f1513c9ff08dfb1a63d0a1af108e02e36fc0021a515bd09ce37c4f063d7ff273ff8badea85a05f2d1ee5906a38c7ed5bde8abc6bac3f0c2b25ed142033434ac51e87ddfcb7df70cb0c576c9121c3a60db56176d0df5d3a84e9fd0ffa3d0eae87ccda3f5f1d97ea84baaa88ac61edd77952b8a3c27142f64a9e3084ecc13ec83c88d7547a1d6616ea886387146fc2fc1f5504d5b8f89cc9dcb10c258046501263d113bfe63dc6a05d13f6ea71a1cf8e702ada8f3cdbb72fcbd104644d62ef079e4413d41bf535f16cebf9254cae80090c42ae22c6a11e92886c9dc3bc7d68223c405c2393ea30948a5ecec9fdec60f6544b0452dedf5f8ca2e25cc6561c57fcde546140d6734304460b0c4b1df20ec0e8925171fdece698abe0b5de92b64af1e50ea79e6c26e9cb207f261b2555d60329b73a129c603020f3d62d8f0ad19d9bf0cdb3aecd8ba1438a09a0cc9c6e5337983802b742bfe8c02b31485a1704dc75721ff9e46307e6181358f0d1ebc202d8d4836fd289826ce0a2808ac25fb693f8f9840ef1d53234b33cdbbacdabe761513f27b5e6c92e392d0a52695a3d6d30a0f78857398c7129af771053125554fb5b68a399868a39d9efc315688448af5f07ec9b574e016b216742855e3260713d31c1757f14552bcbb35d580cc309e36b88494ba381cc76a8753fa930b065f2a38eda1bdb22b27a8b123988caa8e9afd2ccae07b087563a4b43befa7f1ece2fcacd231532241abca486f82626a8607b412f8b5e02b1371c766d5107add011af1f772cd018bb0658848c19beb54426cc233b61bd1eb1d793b65c964f2176d8e72e07780af339fde4b78c0ec0dafe7518f57aa1b368ebc046779bef3f8e657c6e530864f4563379c7ca1157cb1c5a03e83457fbcf75d1799b56a5cc67594e74bb4af4a44ab63a029818b6853c0dc93bc06c7db07fda057c08cff4ce44f6747a445256866c97b010dc4fe607a203de85280a367022e9fa3015401365570a89c59025a8bbd87f382ceabc2a5f8bb30c88959a2cab773a124e57639c122be9e11f352165952ce124df6a09ee0d577fc5be8f98cac2eb5f001f3586c96522393cbf99c207a2c8422870d0a5cb91a3eebc8f7c829b76edad263b463655ded86cdf5f34a41975393695b9951c2d7cef743383e2f41917fcb9072aeffebbdfcce95b569c34158d0e130ef24dc99e3f98a4dd246949be2697171556b95c55e86e53333e46fe864aa58be6b3515a884a3de51bf9660005334b3bf35738bbce993b2ef99ecb6fd64e9df5df85563b963d5dd9726b6fc388be978c0394c4b98062c1d110c07004aff965d53be0a2e9227976e66302fce0b3390aabe8a803b215c570ee0b6bfb595deb8bce9e4dfdffc79ef790804884041f32f30ff4f97c51e941e6da5bf9b3da7a857e3679259dcbf01e7e7c3cc49b9a172d0f2ccb1175059558922a94f230048067bba15f2028ea366869ee0adfba1f4597ad86cd88a4398489f16318ce0673fa02d293a29615d7051d487a6d1255f024f36ca29eb7708a415682f88a159d8561d74182062feb2ed69da8a5f604f5d93fd0bb0491367064563ec56f5b416bc5326596f0dc362f3e3579f90518101026f0b01721577e1a542da3474bfeea07cff62e3164a74148a1bc22b7fc65dc4b65d2020f8d5406d4d6523476f2f767e7e227a1af51f9e9cdd5a538741041c1fe127e4712ad195936674e62d318d75382c841506f5d36983566bb2babc53e59beb9301fbf1509fdc5838caefa0211257edecdcb0fcb0fc505b1586ccdafde0be3d6a1cc6339c85cf8c797894a63276622824761ff3fc808b561f77c6814937133d73e0dbdafb70f568ff98242a09c8e147f28d5bc3001cbdae522faf9b7e0f1f5478f241ccb688d45591d1a813ef315db11fc66d5204f96dcb76538f0fe5936cea3ffd00f314f4f6bcf9cb264b2ad95dce73cb5c8a503e2315538e6fc5c6e8816892a721355fdde303fd2fa9b902e76906b54430522b1467f4b08556a56939e6343798ab7cdd6a219466a53645c18309c1afd8f291dfa3c2d056e34c9715ac24b8f679a6afd8c43ad5fbd4d7d7add7c6672730a931b212bb110e4e59831369c25b99f21bb69612b6308665935710082760e6f45d19ed8adb1f9e6e8651ac994884e6aa1179607d1b0ccdff73ad3041b514b4cb1631d732a862ceeddae925643e9da74a90df7d2df3d09a4b7dc256a8f6ec585ddd61ba33ac4368705e33c9f12d0da279a0d23749c5e6b3f1bb7cc965744e9c53b991dcb46f2832a21818df699d3ca0e04a3ad4fa1ab5e09835c4d3a1b7a34655b3a987de787af628127eae +MD = 21f74a3530817309f508210ee35ac1ada10eda3ef97fc877261f4a2db122b3c8 + +Len = 88936 +Msg = 17beb194686240b5ddbd4891a787b048f48a29971e0703592255454e55cbfc1c52e0d3933791e4351103cef6946a08401029753aa03b384aa5d1c9d9723c4856490e127d877c93d91b075b873c5c733e5c78f18c570fca62f12fe8d37f217c19e49096d9bfecf3a8e31115cd08249948c0bec614ac4d62aaefb7c9c6e340406d0bad862f49a9acaa5169274f5e8c246924451b5a05bba72887b0953906613a5ba6ae0a088c7b67e74e56b795a75ab9a6705319e7cb2342e6a26473b5504e15ea9ddb4ceaf02acc68c021ee284c5702098c31e742674bdaec26198cc129ce7723d87c7160dd7d82349113f38fb34ba7996027aff33ffb1840fd1807e5f9a8090c40d9a4efbb3e3253a772ef5246fe505ed47c9683bdfda4ec0da90da928a572b0bb3a0b21f23383ceec8609fa6c37a461d17ac679481825f84013c6961e8d5a1432e6ce7dea251eac46996a0e8cc04ba93d67675d4713436a7ca0593343286b428e26168b0cdbaaf59ff13916105fee3e028ca0b824b7a74cab96ef08003d4b41b5420bd4be1fd0b1ded79f9b5fdd352906319a1146ccf9a5b43eaf9ebb96a2199182d4df69b738e9eb93c424e101c771339e7df0151ae07e7fe0c27cddf919d3092d9a34766c89a5ae6dcf39fe954d1e6f1a70ddf96805def4c44f2bcf2f5775048d845c4b066beb0fade8621e5f6e39a4ee9b615a7f10cdfb317f31f800050a6ce8bbde524d88c5f69a3928a929d3c9b9632703a028a8547c717a18bf33cb9728876642f209853a4b7de71207b923d696bf3c4c332975795fca67678e92502620b2ae1192010d52f69e1da9a0d70769234a01c37c4a21468c856ea7cce33dbe3cb1bbd29cfec616df450173dd4d2788484e9ff0e15551c3ebe9b95fe0ef396864cbb40d77c8588deebabbfa24e22a3eed113e5bcb10aff765406d17347eed2b8049c14b8b276cc00c4474c6de5db990fadc048da345e3eae0d0b5582f58010f78730c1240e3aab51f2d545d74877b8857f71c0dcfba95a445e3b7a839441c1c3491baedfec3b97610bb82494c28192decaaac63b9386c2e7dbf9b92ba0be65b9cebf6612d90420bc8372712d0083a87a13ddd18c786108f6fac8a9b1a7509d399c9e6f83512ec7a2ee96a3e67ee879f5ff7d6b3636e2acf02f4ac4dc24a2a8c1172b2397e1160cd2918745778a3a77c0c22c0bcf4b662f720de282f1852f48fee2f83ac7055450ca30d6ce56df043269204c2bbe2275f0db0b126c985550ce3164881da74a5443d83117b6ead9b03a6d7e505399489ca1c99b6d0a4721a1d907305d34af0cb056ab16ac97ca06c8e03c50fb0be74a44a29c5354c47456acd9febada2844e8d2f9a14607d96ae2d8d4543c9ecd0e93f883e1b75c23a680dc417688a1511f4b46ad6963dc0453fa4a775385ae1f95b242b6283c05b0641cbab00d1e255784c0860251e47b90fbb9a859a8e0bb6c03219dc9ee55c3e323a6c2a630efe8941bc50b68f95c8917f8ad8cfbc2c2494add7e743f929929546b9b7e8470626daf5ae56171ce1066f1a14232ce3faeda249b056077b38aa85cb28758eb4a3a2701b89e029d5eb4a7c6ac2464418e0ad091b262dd12cf8ec3848ee6ec3b2ccb9723bb5b794c19bdbdff6fa07c062c6aef0aca236481552a0d645736a304a69b408de9aa301e8da03c146253048ca943680828a37153d2e0d864a1f317d8363db5c8ba06b18538e084ae3ac878357328ee02747f9dfac757c71e05a8a5166a07693ca2fd98009a033a154f5d51a1188fe3a2342444f6b0d35bf8e8c3f54f909cdd823afb3e212f9ccef216ae1b4007fcdb3fce2df0d81e08097dd1d162f468628511f88c2e5777f1b5bd37275fa2dfd45753c8e94c0f6d5a5215475d88a5500ce264522ce323f1c670ef17457949febaca86ab02910d3d3eb877bfc4d0c2c5d08801de59f7072b7fa3003da50295e324b730faf67a71fc49ceeda1b3c5ed5871e87303afc4819381ae8910b286173b86affb2f3162ae28ffe80fa386e28586458620587ae623b86105e246fa7e6e5675174dbe4fe44241c5a6562bdac11bbdefd3a25357e65e08b24bb436e955dbc2647f913eae69bee53f7c59a10bcc108dc573616ad31fa102e9d277770b97101dc95b6e06d98d7471c1fc72b9b66e14745ac7f625692c8d457c5c947dddcc8bb7384d4cdd5daa1385f18939cc474197e03453c9097687833eee2ca3b1dc60af2d25a7b5f8a75a1c8042b5275f5ac10b7fd6a9629da7ab136dc3d51db983fe0aee15fd220f4317efff3a02c3f95d86ff91b63b5b486911ce4071e87b0b70ff2f888dd02977bd5e0e514bf48800cbedd4d4577c0b90375604558cc9441e0fde7d7af1a324c882b71834fcfcfc3c12703b963efdfc1b8ee2661b7919f167cd367543e5f8bc881f9d6e08d1ae88d1eda88485d133c530fc416410db3d0b8f4571c761df43592d008ba04b4e6bc688aa116ff1b2bfcf76fbed7ec407b50aeae52ab4535215732db20c3f8ae7c73db6d4252e8867f4a3540a6126a3a314780148bbfc96c2e1a310c0899c36124346f3086e60a84574c96eb426ec4e11dddb78dccfe0bab62a516ca8ae56db72627aa39357a6dfefa2aa1d65b94011f8738da80db1012db0721697c6c4fff97c97517f117b51addb10ddf6ab82b29dbb6837157819ee6e263b5b38c777e80e856463bc0f3401807c41dd60f23dc45fdf3e40579865090aabe8a7a61731bf89415c1a00f93c26f667b81102e624f5b6c86831d4eb2cd171962c7496328cd70824e0fcd44bde428e11d62152d3e2b7612b789413ecdbe83199695a5fa5e3dee9a49574ac93a4e4a5ff4e76b767f199bd6ce1ef9b19ecadd91a11c188edc137dc44dc2a004d2a7ddca46399c6fedc0d4a01269ce0fee9a2c68cc8329876bf622e8a478565f4c98ea095c7f30824fc92858cc9347c085d578885ff3614dd38ee7ee94a0f44072c877047ee2ad166fdba0e744c3ed2c2b24c9d8a2934648dc84d3be666302110ae08fa3f48a9d92139f4233c22246bca82f2840dc8c62e14d80ee4162e80939dd8737ce059e876004bc18258ed8dcd6c39d9ca857053d7ef029415dcf589120b366796dfa46f4e70adb2aa5ef0c37e445172ef859275d898b28d3fbf7da202e54245c681bac6b8feca47e9c2fe7dd4cf744e5182b194c68e724ad04209740cb876ae8a7b0f574c074be1ef0949058789ecdc9f115049285ccc6d55e93b6785f15e02612014c97e268d2128b672f30ce0559e2695e10b54602b655f398605052c72d1d9256d75d5d91876053efeeebb8f391396950643f15509b35a976bd510c63fad60df6be4d9ab786123276f3139c2f1cd5da3129b8597f1e7b6a77f402f6b1ee576c2a2af0ffa277300f42662fe482a4bea24a86a67957e6311de12eec767bb2aa983a43ccf51900c0d19c70c8f7b4cefdabe3a493dfa09c5eaafd9295f587edd7786e306be5e6cccc62cc39653d8d4499db44ab06f222e70bf8134987dc9e48e4f30d1a5535cf815ba91ae88e1ed5ae9a1cb4c2881aa5703ff16b7a4a91886bdbf36128104f9dc8768ecea5cc0253b309557d11a0bff0de027c4c4e647e0dfdc35fb0832699184824f92f9aa551d0fced6ee5c1d649ccda5c8100ed5f09f5a7a51e43521f7d07aa6dd286eca37314314e4e35fab221010c56e9cd7ec39c0710881a62be8161339559011bc64ed1e7f934dfb4e3bdad571bf79afc29169e0ce0743a55efd6af65b2f16f364e2dd111fca808aca57e5696b0487dd418e277cdc17266630ca5ce63a93c021facc8dc59e3b1b163677d8485724f7a9f70ae8e0f598886d53d7726f52142a31d09a75b885658c2225243a0ed0a167aa35c034d9d50c183f3acd31fe5c20c3b7a8d53b466fca424318e5710961fa5632a02681b3e4f2243057e4121fa35a1b07c5f5351bb7e9dbdd842413e485a021f7a8a6560b9feb5af53de4994fb220aec6ca82f984f834b765f978a90cb633794db1d8285d70481af25f274e0b1304dd5928f70f3eab4b7380db4b970e6e14cac97e348f0600a8e2cc2e2496de4087455353d9dc953b9e8e92cc15645637c474df5033e0a1cb7e50c73d751a45b5286539ed93e815339e67202e8ea7708dd32613ca5ed3bd2b48d3980f912ebe0b58cb6168cdb85b2ddbabcd84ffc6e9eac14cfb5f3dbec4ca88e99316f16ab39d98d68e37efd3c384c6baef51e1491ec90f67fa8129283503cf116cd62e54d2f6791504dd62b0eac2e012fa37eba4abc32df595c2d9a6aa718bd979ef905378a07a1569ebdee63d82d852928977701d43ad7451b6a790719e3fa03ea5d00d31260c3621c5acda382effe83cd90d21cfd4fe72b2bf1b9c46d45b044fab55e888f1b015c11d65036731c7425da915404ff1915f3d5ebe1086de8e841162aa5bdc8df632cc358ff85735deff797c48321a2426b8561807a3adf71aae286e45fdc8655f0bb7b0963f64a5a78e04b4feadbae6ff1c917d70bc48c8bfc0f910a134c9125b0ef801003f2bfba16cb405a0e9bea4aaea83f191c0d3cdce8b080c44a75b1f6abb11c9667e29b25d29dbc0e79c71f7baa08206d367db60c75ad9b3c8bbfae70eaea95c3182ca645b33f0892b2c915aaedd303fce07cc4c4abee2a975e924f3c748034be9d3aa8bfc1996c0f4107947e80ef30eea2722cac935c75004b565d02515d41b07e72693e04932fadafeb649f6a46ef6a04c7b76b34ddc49ddb73a1698a6704c0443eb06885169b9382db4cb6b3be88988fe32daa975a5e969551e01a2688c417760547e54b08f6ea4541166b644142a1ca2f5610c2bc8c140258e5bd2da7cbdc9c2ef45e5e5389d97d84886583b667ad3d11fa46bfe9963fa8f177f9a8ab5f383f23807bc7dd9c89b40c6b4d1b043de371f2e0f396cbc43e11825d769e7ec953e64bb3e38d907722714186ca31150d6ced3bd1c04d495d3ac57560dd17075154190e543fb85261cb3d8ba385cfd01e7039529554ee4aab5a4a3048d61b2e3e6460d42d36510da4ac9f528825fc1dba16dea1f45980b8f4c72a1ddd08b3dbdaaa440504715ea886ee1ffefe53c1e42786638eb6740c7a81a8eda2e61ce6f66b4f4c09a297ea0b50b945f7cdb7250daee95083a24f99789a2619292db9bd673a7a0149cf51fa1e49349aa5bdf8308197672ee781922f9a8769381978883e168f54e92b524798c9bb88a57196bfea262a2784221be5d6c88f98d1da903173ecb2058e18f520cbf4ecdceec11fb35ce5af52da9c38ee97eafbdb6dd43d5b64cfeab478797e859c872559fefe217d8da76d0fb9bca05879e8135c936f46ae18a880892db4b61d116aae275c9165c48552ad87a7ec1ac985aa1f40cb1375d49760bcad373365913585cf6d90e0b0314dcfb7e12e9470e9c21867b29e289072e9dde6481e5c53880dc0d0542355cd6cec07d346d61a6862381b33d89216603317094681689947aba304f8039c57821c6ae149de26e7cbd9ef99cada3145adbc27cb24819f510ba2fe3791a2834d99e9d04460d0a66360f9f07b75e1031d3fb8240ac7704aeb65142643e15b61a1d87d251a6145def6f16742aa7c158f07ddcd13b07875f2d11ea9240e3154bdba087d714a9464570944ceed0d279d5d6951a3fea47fb81e6afe0aff82c8b51f00f194bcbc4156980223d4fa8bbda1f5ac61e3ecce2462561eccdfbf86f0a70fdb5a680f58b042294b5421700e884be039d635e616af9b235552cf6d01ef5216b30ca171062951934a9f5e577dcec1a5777740f364678a0b7756830fdd0eddbbf0d0e8ebaef3ab5d69ce33b7bfd82bcccd0ead1ba0955898eca1a3b001957087fa6ce5843857770f0fa74799beeeb2dda5612366b2812c521dfbd65555cc35013aa83f448c9dde32a3f4430461587e61663a4bdd82732fc0702bc408c1fa51b1164e9e33920d074d8f7bce01905db6e0775fcd87f9b3896a4efb16d02d69ef1ff724ac5a33ee1ae83a059197334682e04298506dfd8861d8203174b6815f35d446f40ec0558a418b0c5934ce335b0beb2eaf7c95773cdf934c9685c0a5254b5769846f6de127a2bf6d415eae76e47988a36afb0950152d223cf2f2f881035a30ca9c756ac00e650bc583b740e529f440099372d16e5c700d560d6266fe408ae8cf06c8bed887b3f87ce8e88b6872a399c9f08cf3bb58d3dd04ae7e1102260206e289117113d9b40dfa389997e806ae1d494aef791e537b19ad9fee0176fbeb126aecf88c584e8fd2a83b716d4b2e3e54f268436a7e939349b8a6593e43086c94cff824168e2c6dcfecb819147b327bc52c1431cfc56141f58f8c68d14f95ae1578753e179fbc758d2f7939945e5a8cf8601460afda05ada69918c2c184ead91dcf2bed987246d093da4478f6deed9975f4317a12a5c701e33e140f16c94e14323be1da9fef12a56953e27e41e235ccc5523324010eef6235e646f9d8050b87de2461ad37fe671d98041bf47d51784b6fe0e20882fdc4fa23f978261022675ba8f2710d65878f60a753b682b315ff3efb0806cea05a8ff135df703ec607abb8180edaa23372d0951eaa7dcfea1512cef131661e600d986ff301f7ea009c1ec5b7de6315a8a773e4867036842a39f922dac2cb9eccfe279be6c5d4d2c8c90aab0ccbd60ecc0fbf76650daa487b69fb643e25fdf9eb16849d9594d19d2576b591a03efa34a890fe7346e9a1c4e68d61b9a3c1c4d5c53bf79e88d7b4f3208b68a0f99d963043137603ae6ce3a0728d744b93fee8db6356c7c648f4467ebff06b00a15173a9a681714c27fe378328517942954430b2cc503d3c5c554fe30c8e06d820c35948d7c03579380766150ec2bbc632fb6502080fa1294c6097cd0f4b8150fc5a0fb5e0ba0ab06aef39ff2fc681fdf08b4f75207d3bb4a17fe5e2cf102392bf7d5f97c8553a19431e75e9904612125a5db6b11b815206e21902ca54c636c3f0960f97987b0cde4dfce57a3b2bb72bf5d7625e01022f469795b72ea653000e180ce85c5713c72410f2505b375bb8714b621b25dbea1b9d495dcab6cea1ca99be47b28f0d05b41613667d348cc05d0be367a8aeb0205c337fd80309d396db8c6aaf35d7c3391bd9dec135ac4341ee21454cd2a0888c3a2fc16e2cd0bd1c7d10a5ac38dd80964498f96c406b62c5b2ddfa7b61a36b16ffb997870bb2941af64df5a685484c067679edcd661af436f265895a1d6162a6f1fb8a8b6a5861778f6ae505e2c12f71faa4404e6f61fe7bf6e17a53cd7f74245a1a21e20f692c1d908ffa3118f032bd19427d5622e78a7c067a56cc3ba8aa788041e5f5c28efbf341e6be92ef7c5cd3187b294c48559f216a57a32f2d820a8aac965c2a4d6fd8e1e994b8902e0eb69b4276ce9aa952465269a2ece36cb59f42254110ea77b3cacfd2c470949f4d46fdde5cf3a70d8786f74c80b650c0ea6e89356b899e0703daa5429c6f0408e216e2335421db3c9b67f85c1b8bdef0c98145223c4dacc6060e4b82443c4a32742e308a87df9efd37f13dde9bf2f5c6f9df6035dbe67e7c6570aadae55fcce5ac94d12b1db5581a032dae1d2874fd082390c0b671dc7af0c708a891a761f4e83252ab5e3d2b7159a6223460e8985e7fee9d4fed25b50aecd5dc2ef1b1c92905ad70a86b0fca5183c9d8b5ee06e680f3030df32120fb953637f725402c1fd202c5f4af99bc19616013581a10a8e6cc2c09e8969c89358397945e73c73fec59a823e8a7326ca107b72da94c0ef721a8f1a9361fa489ec3bd7941b02ce13b625bf6f537a7c46e8ac51bed332301a1e7d0b8b00768248a727bee034b89dcf089e0f503e0fc07378b9f76fdfb3be3965b443564e837eedeeae1420b47f7b9c672c5f6fb04e451bd9946fe8d4b9ff7e7fb35fb2262edfa14938a0fba03eb2a25d377974b11f556491a781d0ba2b3c0ff3e42749925fef8b412d2b1a02dd880871272306496a36792a59f7d09af0bd1449ae65c099fef4d45df67d25e14346f72c6426cd811731802c11988f7bf2cab60a78dfc243f337a326f95ec3465a339614564a73600e8ea21d392bb66518ab1cbdac5ef599260021239f969c3809990eb366569def389506873879ec604aa770eab1aa01a27f9775dc50ec59bf38be8691fa14f5357b8ed5f1764ada757007d719ef8b8f67e743c9d9752aa2e3cfeb27347c4a233ac0c036e45b6527ab73147bd3cec947ee444d42a374161eadb768192652c1cf06f07452e74f947c0b3913849fb62bd04180fd0ac1b7797624d67d83efe641a0a2f1f25082ba9d819bab4f1a060f7bd368819b49bba41a525115728d159e923e15ad82593d0449dd65b10f638f417ff769316f261aa5c3583a5c8e6122e47b52670a6c95a195603971349a8ac2b400e54e76c1ca64213a33e9941b249e1fc584a0f2f72b35d5aa3cc51a39b527d0c5441f3ad85d2480488966a35f010fb6387bc94c6c44812def8f6b4d340d47fe98bde264fd06df29b503b773a31eff139ce0ea0013070e03f6d96bb3d3b9a9a43ff8a1dc78ed1f864948e6eb2ea3f59db95a09f5349d63c088c3cb365ee1d52c839c638a913b6bfecc01fbf24ab97abc57923015172d09cd6df595bd1caf54fc2c51315690184cf905d5fc723d8815d83d2f664704e086906d16d12f5649ad7e02c11228bcab49dfbd6df35250374e5934dab47342de64734fce857654d76818cd920ee85e1dea19bc70e77acbeeada8043b20811a4e2addddc7bb795e820e34546c2d7ebe95b70dca87e1d1f6d7bb2b75f9b55ad4586136dda67a20bc71263960f878d2243c3924af5ae8411817ff4b4ebd78e4b82690e51816cb53b5ce388fb9ddf6ccd83af7c6329004b27bd90170592e73080ddd3f5456bdb4fa92becc9e27c4af5521b6795c1dd13d0a65434a035cf5adaf1da8f7ea5f4340fd9c6b6bcd7255ac5349d8484c36c79c321f7d616a20b92ebf2ead3e0ffa51744418fd9c866137f4b096caeb0046182812f1b0ce0f6d23ff2289149f2bf18f5ab8519ce831bd138f5251b1eade146cea9222041a580bdb27be76069fa60aa4f93f8e6ed6344e908623c1b8ce506a6ce89bfca0ccafc188ae7d3cabc8e90e3959c2169eeef8dc57e00930041ebd0ebf2c13c5ad6c7b58d29d45252aa15ac4f5832a3252b8e52f0fa5eee4c0628dc90ebee4c65283249963fb0077abb262f6817e5d2ab3bd640e61deb9261223276301a4f447b8981249e0d0957b58846a6a84524546e884db43f592523e22e7f5a43fe82d900633ac33f424ec79579ed8e9a708c9ce1995b39472c9a17419395e54719275e865dc5c1e4500edb9d088153b92a7d009707955ca818b8d101f9eca3a3ea8b699fd1c8ad17b6b8082eccb8a28ec37444012b727adc9e100595ba0a11f4f34d7e9f57a9c153f6e8d1ed2ee9e785dc10cbb2ad79304f3d2e298f6c64ccb4b3dc021767ffbb23910fcd3ac79b8f28f4b10c2de620099a667191618983106dbcc5988a7b10f701059b5ea9ff5426027e0389d56dfd6328ba78e18e79fb998a7e88a68b19b40176c51a0aad5e9a388d0856c93bbd67c98499a29e98e624c4856993b07bbc2f76ef701a65d76dd4332304494ed35cf5c938948d3d0336a53df91e754afeeb09a3e5670ad49a9598a28ef2498f4eb53ddeaf3ba7214ff3d3426ffdbbda672ec934f34a69eb897e6e031b62e60ed06e967672ef7effe196559e2497c5e346efe486937ac62f0680bad142d68d423ad1a62d0e30733d6a96a28de16d31fa30a6f23540789df3a4351599afbdcdddd096d36eeb9f325e4d9d20be10fe6e93970c58ad74d45ffdd503f4c8bc8926162426a4c8959c2ac6fcf2769b2dcbfa240c58be7bcb1e9a923b95deeaf3e9049fb7f990a696a7cb2c1b3f0aa1a246634fe3446a1c9da7cc552a333a8cd03e07ef0e883d955952a1e20aeb635e18fe185bce28020c771063ab3384ae0afbf8ae789a7af221682d2d8d5e80074cfc73a7fc1fac0cc7d1d90f28ea029ff1b1b946b0ee1a54b74d87fc7278856ceab71790957a28f0db58720d42b03586edabe08f4c6c1eebe374036d560b640ab3f38a40ac402744b3557c1c8d1886094b452ed69fa6c11e1276101e9c79c477351c1c56c5144f7eec63478b6c957c8d8707c4cb1f20d961e0ce4e7eba35ff28faab7e316468da05e30c64f865c9918a4d8e62cb6f6ca06dcad70f1c43d2aca6512c007f0eb08f8033bb64d20cf76d95fb238955f4ecbe882d3ae255add23565e518438e287da8646afac7a6d6d159270c71990944139c47a46458d96ca721ee22ead7ed4642ed28d534fdf537d9fcb41df32233d183c232bcede31604e40aa5a72e0e1aec82a6541f04883bb463b0c39c22b59431cfb8bfd332117a1afb5832ce5c76a58fcf6c6cb4e3e6f8e1112dec037ab378c929f87583cb5493f36f830c24f0a20ba48bb7d9135daa9b2264cc83e075ac701c54f9ca4b343cf242b32398378510cbdf3a113fd6dc43b11cd10531bfae2108afc3454495e72af36d68a27d62843344747cf0f76bda32c924e8605c0d8e81a107e7636af05ebf35f7e2980252688a2418a6ef963ef20851cf0d769936917ee79943cca3f7256a3866d36cfd73bc95e9405a55a2ec9e24d99fd2b04fd751493af86ae995f6c5ac593e9da99542fae6e26009db93e14928cf0bba96067c38a11989cf62a78ba9f636d3b3d6803cadedce1c37d9efb97d74b09737a04371c1f711e1e3905f325ce84feab86c34ed302b0ac956e91cd1c5a91cc6cc578d7487bba2853a2b336758f312d80de339c14c1f06ec0981b1c69c26621f0b345ad0f47f49d8456bbab728971e2046c3f5653c4a6118a22c35048b8d2f0456cf223392b2767f980a5b9e3654c057d596fe259b2d97c3c3512d17ee4de21b417079f8dce5c6dfa46fac792caca7f34cc4ba9ee3492971df88f08d6ed919c85dd0c8bd4d99b97cfd0413f4561f43671ee5c13d9f2d84a7794c25b177cf44900e58a4ed6f3eacdbf470288c5d2d1137ce62989e493b37d9030333308380d106d5809505bc553f713d3c60adac469fe9cdd3a71d5c02b18b2f56bf973cae6da135d0ff92bf7ddfd149b132d4bdfc5e01afb183475204903230bf1131ed9878d3b1d26b10d3090c707c87459e2ccec9f3e674a3b8c5c14272b994debd10ef6132dbfd5e0cb18753e37816ef66533e625504a58ede21b956a14c708e756113d52316ca5ee2b589348ebef8b6c9dbbbc5898cbcbb13e06d2b524bfa971748964348f4c1c43f698f3ce6a3a5223520d75225e132af16ac4d5f1a5a6b8f0f21e71a08e86c447f37f9bb9fd894b844cd1196ae949fd142cfea604dda7bdcc99796e7d77432563ecb695efec04fff552aeb1188296cd824d5c4bd815e7416c314262b592aac5fda7e5e95a7fd5f5df2e4c4413712220a29585ce539491cc3a8220562f27e42e7feeb39de1fe21b5aba654da45fe1481decb22365fa4cbe49d53bc51d37e18e84f87c8bb6bb013c8bf836e7b957195759db9da8ce38bbd13fd6dbe5b89df6f79d73acd4ae2ded0b5858c4130eb11cc86482556d7c69291e0c399cd7c3991116b7dd16a532dd08304638b76002f27e23b45d83e1ff2016cd3559d91bdcbdd2546ab1246dd34ce523ec346b4f449fbfe1cfd9a396d4e2078751c41b425270bd390c8c70af0df2065ea0c87a41322d549b2d832efc8c236dd4d804fdbbd366345d33cb65d94160de590a614ee65a0fdeb843f6a0938368dc3e4ea8db08cde2ca0966ea8e8d2c1defab9f9b539f2acba0b1b98082fc5926b51c0c0c5db9a08b00f62c86453b1c8dccbec6d342dc32f56d1fd4cd50878be19af6b6bbd04ef9d35b8beb1b4453a134c81b16a5873df0f1766b4c4993d58a3df066d543ed2948304c332915e66748a79439058e8b34e3646f2c8671c756d27047e4ce20fed90a4655946d12b5f6716aa3a129fad94198a2a9cbf9c2559c033d23e927cfafeebe69fa283d7e3d81b9d268ebea76fbf47f50d8d23cd7e9158b08f6fc68cc5adad33fcc5700c4e78990836661cd8f5dce05e35ed7b61edc43e848438717939a1df72c2ea96d833e8e84022eab59b0992edacebe350c03b9a7899f9c21aab1e83898b3a3b7ba45cd0102c32441056718974c97797295230bd10d53634498a3cfab165acdda9d68fd61ab3ae99b673f66a809c21328e7e93d20d2282b7877e5aaf61ea60fba8d895a50dbfdd142d5860dd160d31dc07af2e84786727735aef4249a0019dbbfe1036e3f13708daff6f77894004eebc1d4ac778588c6b8f4d45ba717792ad4535e83939ce027716b31e03170569a2fb57b82759b5789734e5e88bcfec86d6c2d5c6684ead0a72eed2cfcb2e6e2493c03e6116cd9815f289ac407d0a0ac3615a641489cb9536418ae3e99877811e093458ad5b7c084ac6b729b657cbd63296346c3965578f6e2b136ed4329a483d4e7f3005c0100dff59e5e4b0e3b95abbbc79749dc49ba29a79b1fcf7613ecb6aa9c84bcf0b2eaf1cf53c6697e77d9d471c5005a86e3ed6a3748b14bced0b118e613733740580f78ae0e436d42cbea7bcffe2a6c22ae9336f61ca3e8a9dab228fbff66f5d76aeec2f6204dccd7a258104ab57df53c144c2e78b9502ca3ac306570b2a87f1266096f4c5c4e1ec985a320569d638c3fcf68af33915e9e28cfec5cc8dfe0397dc3dfec14f4dcc985004c2a980873a7aa1a8937cb2727a3b5b0168d88c986cb962ed2b7f4ac7253868cb3ad63a936ce17801e6683fd33e3d6f77f76252204abe7e192514fc5a7536a959a176dd22565e4baa8aa12860bb509006785125bf230ef969f56aae2c42f9db53ff70b25b815ae04a870db5437bdd8556f58f4e9c81119a84a268a76817e9c6645cac0167743e008ae6962ea1064a1710750314e1eb2f2b1334f53134796e3132c112126eb7707312ae23daa5e2010edc0195c1b3ead072bdb4fb92b8f2f0e665358a2c97d35a0189e79b027499683261a02d9c3c055c392b2961131e09d7aba6c1fc980a4f6272989ae8ee39b3e94a485ab3eca4c43b46049b0ffc8b478b499d6c509ff0b3f28de6cef1e61ab6eb2038370ffa13afd561f113ec9529327488f13e6e877188711b1c8b9e323f2cd67ada402a0eb04f92549a97e2252054fb2f4a3f3e98b45547e4e1d9d719d19c1121d67cea6fa32bdbe6a632d8f6983586085278a91ce2a2dbb0dec184e4f88f06ddd3f4386715cb16debee9b74eb85b7fd9aef0955922f89747ba4a8ddcdb8c1c7579aefd3c2eb8ad0589c66576a8504c6b09afec989ddde2711e7dda46a31bbbb372b41f3715790623b0d0cbb6919c578609be94217adc24f5b260546d77c44b5d630e88a0f3968b00da0fd1559bc506f15624773ce27ac69c1dfee1988010343cf7c21ebfef98a263b08c609ded55c37699e97b31fd412e2e085c6a0ee686df18d4dacbdb3206b515d94e5ed4b0d4f5db7a168a47f2b8c5731a84d818d0afb2b9a25d753ee3682bdffe5db5430bc803e9a0b28bc8ea67f332fc7d11fe661116e60a54062e2b476c87c7c24b3227bb5768b4c565fa0cd72135554fff08d2367469b3c665f43229e0d5db840ae92b3458205d580226818fb542ce03897e39a6320847bb7ad81f99ef93e3abd8af40bc6ed944714993701719220f9f96a7c6e7ba8c6b3c2d211a1c018786409fce8eda015a111b228b02f8b39dbf2e10cc9e8372bcc94f66194d3c7e7a6d4a468c3c16796c6b5b75545fb9ed7a86b5de35ec02c46209ff0d06de80ce3540d1b53273f83fd7fa3b2a37aee22e830e3ee82ad6ea1744d3510a31f570597da6ded4075a09b96367c22a7c18fcdd7efcd016f384c5d22ccd4f45e2bb95871d47778b551ad050d75af85b6bc48e6434fb7450d71f1a5fe0a200a7615776c1dbcca7c262dad56cfd7ae6a64cda202a6db1317e1fcf722528f86c16f5f29c6d81dd736178c3a1769b7093f366843a97f0c60f8814bb548cce789c7be7b48df5d521e550ddfdbbd47ae3082b02e8651387e31656fb0c48fc98c997bf7fc4d3bfa0410477d9afabf0627c4b34682e2806f8b04fd01fe9d6dd509365c8054bf635a9e4d8beb601fa311be366f8e07f0cd80cd4c1dfc77b8797bc800f80c1707cbdbab36a0eba1c2ffe6cbf605eb20398f18bf874693aeae292a5369ccefb5cefc19956c14d2f28d2c11eb9424d25e154ba3dc37157c15d7037d25d1499fa36d6a80f74e5655b4c6ce1f97813af8242c899eadebf92a4fcb7ec0d9e80cb0727badae4b5df3c87b184c6c5a5db6b114d7df759f066012bf0411a1ca1e74b6a5722bfe0c3b6bcfa7fa2d84ae7a3691a2bfa3d53a26f8b9e61962ac80d51016bed96bfcb4372ccfedd4e7f50e77291e503c7d1a09ce11a44763c82d98ac6d552129e426ce01c53d9f311239e4c50cbbafe6d1d0885c4956658bd8c17c24faf66edc3b08c40bb3bd4ea722cfdbf45ffe0447387530521e34c2fa1af4a5af377f0a78c71f30b576b37eafa0235e85a15a0fc617948c6ffee3e226e5239fdbb15386782ed69eaf9cb4a1a2f0d0e6e96f5424ec05ab06d669d8459aedfad51ad7186562b8cb684a74355a39bb550fa02870e63169253a55ed865fde8bd6efed474229c12b7a1836bbb9fadc663c233a4b44b63ee89f914f0872a36a55444ad35045360bcd4f48c4d1b715f377d2dc286624376cda66a6223931c2b6c0cf706da0a63cab34d754a544b13e1766d594eb07a3cc23d536d3800e28005c54d4eb0ca6f98037e88ed628833cd5c0b990e8028e57f72c5f8cc3e8d5da1eb387f12540d193b33a5ef237ff1bce7f87f6b1400f88954aceefb4d1bd4ecc6064e0a0b99acf29381b0e8e14798cca8dc58493275285002983ec5b977dd78367e8e560128aee1ea1628dded62844c5931219d3287be21d3603fbed7fcaee73a7a81cbbca81bcd861a95351079bd25421e5fcedadfc4e30d29794e715051231a22add203c2fba0b0b47d5812344c3dabcc9c44f3254180f91e73de4d1bce121e9f9cd1a01e5741b00c6aaebb3a387edc625f6744013edfdf64b5d435062b9e8e19d63259633698ce4be39fd33489cf1c09319f9719c2e80726c79aeeb872aeb1b7e15bf739a18d5299719321c94817b5e99954b218d583b88a329643daab29d0a247b6424a9f08831d9af26ea27c40ed291fee5ea47f983cb87d32fb14dcf9330290a9013b38f1ab00e92482662d310df24bd56365c90fd9d930d5dd0d0f0522fe429efeb774301069e39125be63d25c6ba6718905bad0d815d3e6b36e4b35e5bee7fcff645cadfa8112a11f52270b24bdb72b98295bc48193efcf43de9971c36b062bcdeaf751b370fdbd37c980c4ab0f0669577bb2d11b7c0bf7560600a1062d289330f24e02825d2c4b37cc77e53b8a1c948fa3cae0f0f7b0c6b38e88adf42bd49cef2467a9ae7028b5e50213561a5580150849a8da462d65a4241d397dd68e92aed4274c2f80d3786109145cff909aba528a1456a56646b2f96f5b1cfaf37dea31a5a4057a40aba4b96da95ac9e77e53b5ddacdb2b98691f2d5df2380a9521658d2b42987436233523d86a169a652bd2a5c8ba3f5223be35a8b687959602a28a2a2eaa0f04a960b20911fe975c54c9bf8a15e68a04516e7bd342c53c878327e27076837111e38da3d2 +MD = cddb30bb6a47a37a5cab0c25b8ed4c90ba1fe733993a9c5e64c4b868213f965d + +Len = 89728 +Msg = 0647b7c1c7b78b10afbd863f07486561a0bc8d9b1ff5fc41998a7e3c604e24af1c1df2da1dd5d83eefa2e4012f7fb5959ef9339574367deff73723484b5a969c8c23dc251a3b887f34b9ea09c9a1838e8aaabb254445d7556dda257dfd5579737fe1dd6c67f3851ca68b011e7cb7b6958d588f143828f0bb24fceca31b47b77d1ce05e75ab05b55d6c9f9107f0c738f2cf8a1629f7e9b2694324e082503937ff8ca7c5098f770289af7d038dcedcf0ed77c8b82e2a9003a6f3db69e14131e144f6be7cf0bb5353ea96aebd78befbc6ceae9bdde97823cdbc5ca8ef8a993a9d9383aee9f2d6a18fc64ab92990672ea2dc9b89ed248aacf7f1a513da43fe5953335afe76d78867a066f226ae9c727c6c60671c50a50732698ef7a492d51998eb6da5368a667baf6d12b77eb36686ee0ca239dc6f3598be0bda79e47f0891fe4d8989df8c685480de11c148a2b44c8a6bea3a50b09be557c51f545a09a30e9362cf3080e6a6bee3dbad370ce24f6c5a6f8091007ca195057fa3af8f99703a601086c2a1ffe55fde4c2c4153dbff8d6601ab68743c0d50d021b0b3099535ba6c40f866ca3ff0df7c19d709a3f58b57b40ab5e43556a8c0c1938c875267bb39c0db6b45840e8ee7c22bf6b48798bd744f70e42fca343a8bdfbd7f55f275ca5d62c7288756d4861fba68d16d842c5b893c1d8171bb3c8b593387d3426f292ace5cee7753c9f9a12e6bb9af5a24192e4184f7d3d191d862d3c3dace7853eaa235b6369fd164e5a7bddd06daa3eec7fe4130e82478d36f88a0999cba1f251ffb3a7689ea2baf016073193898716a9f933448d7ba8e0968c669bdb7dd5e6e32fd84a6ce9e8632b393f9263532ec2107b4c0d2abdf3abb2de2d63511805eb58a70bc4ded040d76640af60ce7f03b9a682b8dd84ed8a47225a48e0b94ea47828f1c8974cd64e5027d8b13d43519875d2bbe4461a7f0f5b5b8d63a472765405ea9c994225806395e64dff88506f7f7f3b6368d769e6e550d4e3e81efb13771cf403e855f75312f1383ce4c2744d0b4e3735a0f1e1b99eb014fa60c0d1ca9035fbc4403330c2fefa8411fb7c3d6ede5b5c8f4736106bbe01923d483a84f031e9685a3b6a70646a2a5059ce35fa496b3f21fca6047471a5bdd33908cc9328de9fb032347c249bf7093390b750696124621dfa67fd9c7fe85d6e5a4d277ad8f8d169f8b5e8dbee280f8443518bd94abc5ca704e781e6cb1868ba2d6fbbaa850326fbfa5a20e4df6fb5f8ee2728e86a758763a8af21e1f7a8584d3f0b09a0b19fe8fcd37bc4fdf45084d7fd92b80544f29aba52496e2c9a0aa4adeb89820be321cfd2f0a53585a15d04c7fe4ec9be6eb5df419e20b71506c1f642df75c53a9e3b2414fe6102fa8af7be3f6c95de824c31fd6fe8ef9d49e26095a2674a33cb574e9e493939bdeaf5b309b4c51256ef71e95dbbcee0a11991693b533f916e1c82ce86d65d89b6d596017fae944ec364546e78abbcbe4322b83e2fcbb4c5d4ccb54d8642c7eb9e28c08598a356a5c46f8813e6b63ec2f3e3bb721b726361f85a734e0514f4e9c4732991ed3998b1ba8f618c2071d1b943eb0f8766fdb7f0492421429bd380deca3325c8d5c7b6ed16429539ae54f1eba39748f09aa44efb67d863cda304e8653ff7499cfad44dc27807779ef8e63be4b376ec403f3c84eda4e5af31c30f9807762e0980b4e5d9dc406cad4e888bfc3ec4186de8ccfcf631b0ba5831747a1c200d45ea06ac82c7952fd09aaae5dcdf5475da427cbc8c1f71ebe5132f2fcae15975ed6fa14a11b38766e1c446894f31c0496b0e5e96507d28e6e4549d6d78841e40630ef306491a1da60eaea3fb69bffcbf192610e2e07bc1124690fea61980e8ed654c5e796f67d26db5de35b4a2c67427833e360ac2a7d4fe7a5ce572144443ed62ac460c1b19402e85c79e3d80e1c143279b20a66d8dcf2bfe1cc44a0f5aa9b0d9b36c46c2cae148dd0f2ffe9a8e6e7274d1832e57aa39fb40553da6414094e838d613a20ce9307d49f97d904648d6460985b01af769800cff9a940f70729fe40e98feb64ff0a81c5b2b096b1a9d832e440c49e4e3684bd17a5169fe138d2544d9806fec027dd2a67f1856178e090f9bb2f9b314a202e7e95f2e41fa80dccf7b1810e9cbcaed2acc2445d60e26f7d63ee4b28e4299e60ea4fc659e7d6f0de91748bf1ede1fdb2acde9482bb76bf6716847eb2dd7517e0a94f0bbf20f248d2c79fa0f518b67a44d5c4c73a9bbc3816ba85ae8344b5f377649da75cf1857d6e4338a76446c48e52cc7bc7ce283d4252f8fac5e1427299edc33f84798316f77bad4a87849e91a1a23c0b7a86898046e278eaaa15ff33730a6d3f885dfe2d1dc0acda2a9e49a71cfecb7dcaa9e70eaa8fe15d4567a280e8960ba49d5289535907e9f277f96e8e652c21d89e81696dd821db5b7e1e53e160584477aa9e4c0e12160c9956df36cce6f4e724dd543827366010ed3d843cdf4319c1bf968a70e9b1b6bcd8af96c9eb0620c569716b7bc42e13251a6adf8201faa129844b5e1d699cafa1b66a674e732c7662b0410e5bca2704c5ebed7850d0ebb825cfb0627a183cc9643b709aedeac2c06700358400c389f99666ae97ccd37f265da7addeb07df9ccad6fa777d0da2fc47b6235179136bbbb409596841e921eb278142a19e6203c7f235bf8461ccadb4b47dd290d36ac27126c808b866f9531261f1e0f5c458a6bab6f064b4efc432e1c7379f9af19ac34c5c22e76e6e7651e48f9ce44eff542f018397889d896cc9001a63e8e455fbe4a9ee9a740edad894fe1af2bb21a1dd0318e28ba982c12ed69c08835ce17336ad1638af3cfe0ea892ab8e83d3f25e6bd98d5e4d36292992e2122c265a26cbb3931dd4c1b0d0ac5ee19974d0dd45777908bb416cbce52531820effcd7f28e1fb2d3d4d826e1b2673e834485a25af9f9d174f566abc3b36732ceefdd91a7c3885e1d10d51c321ff704d0883905b7539309ba5e7b7a2bfefd0494e90e9da7541ec37858ec05ea9a9ec5672b113cd5ad6ebfc5b8fe40ed7c3f17d8a73703dc89086b4d75c5eaf06b840bb2f5b4519a4fb17bfdca9605f17253f203efffc92da96fde023007d22cdad05d18aecb4bf08085c5ca5eecd21f2b611e7e8a0ef981fe7aa2014f5ac6862fab44011dfd33be8a1226943aa7ae5fee9221b0400d9ac2ce5241b09a68cde6b13c47d50bf310ecb37f25c32770a299020d8500d8a4b5d7621e4379dbd6ef34a9aceefd4055ea6144f54bbfedefb5b5b0fbd1d81c7a51a802072ec3d84f34585f22c1df84caca07849b1ef054cbef9b40848e9fd238761df5358cf55a79a53a1bc749e49ffab7c5bd9a28bf24ad5833facf43bcc3852c1e85cfe47929fc49c325c20d74588eb9833519f192243cf96625057899b70a7c93f8fdbfb60d8129d9c43c95f8782ed8293641ffd21d21d91a0b4db69d766f6d6497e9a414ceb04b65425d6ad6c8811da00639dce8d8030038f2d08330c75b0879aab81bfb3330b950e54c13780d308fceed2a103a1a8b77a923b66aba737654ba7995acd306aa7b80f632184412e2369c353c2132ae614553e626f0a3436959104ba6e0040dc597dfbc3602a49e401bf2249699375b2c722083489f54fcdc1f616a133ef6112a1754818158ff78f245b9046100b0e89407f74145fe336976af971c054f12d98002c68b3aa2bd699fbcd71bc4dc071e430bbf694595a951e01098aaa499be2f70611f248a694539ef8936b2e8b7a3c5de8662436fed1f7bc24a4e5c17a663d9a23b4692993301b08cb3bc10f518eca51081c717ec8dfbb0c2669f7987fe6aa0bd98231d8e8b58951b42537f12884a857e02d62de4fda6b88b6b754b1b27394c6a819e0f92f6b2b2473fe245678e252ed31477cc7ec6895bc361b718fcab3aa550fc9faeccfe77cdb5b151ab1db2e569b5bc923ee26f0b6113504d295112d47218140e44652a10af10a088f95c7cf2fccd040fc93980939122411ec643e26e7d69ced3178402e320fe156e774b75b5afc2f3d6b6ab828bb4993b1436faa5728cec34d66f520f59e82716ed6d1324944c3c91d04d5ffc5a921f4716c39de24768484d0096f7d8dbce35aeec22db11f899e5e7e3d57e7668f35d6c0db3542255d9262137d39ae6cf9bcde254dfccc54a6062fcf8982f781d9ffab2df4f49ec04a72eb9646d63bf9e1799bc0bec0ec7f0675ed9f8dc9b8be15d9f2175dfa1c8bc99071c70ad7bedb10a4143fa91c89f54777f84c9eae9361cf7f4c2b7ab873ee5785a5241db0af86f3c6d7f091623d6dc576d07550a42023633a09c8dfa21d7e70cce64c13f37663f75c47921c246f3f2d1d16a8283ce7697da4cb7e016971a2a1d0c59d6202bc18b7cee3828de597efdab53b33a9fb41aa7b49f1c964512901773bb396ac80e90ba1a94c408b2860065ae9aec64a41d76cf8842d299d0babf14d5840d647d075c34175e26a786f30091a24f1ce8db30137520dce1cfffb6318a0d0fdcac883eac603bf365efa2c806eb4f194cae8c16780342165222192f6ee2e103ae2a31dc08a84dfc89c64d2e9ada7ca1839dfff62ddfb7982c79684cfc821a098bc6bf09f87317209b16d14d45c6f38fc99f7bf9bb73460977bb323665d480c87c687cec052a5f08a2c6744c8e177a8a269b4a47a925b9123cd2c014313edae988f8aeaeb633ee5ba6be7f53fe36da3aa37ab2077f5fd75a82a55a0fe62af213b85e9e7694f78cc2b0e63a8c1b89db484722fc62c688678a511c474f0eff8eef1382946d26de00e5c626ec1d7079445c1b7c6f7f05073249b11fd1fb30257724a14cd7bbf451146bf366de2e826fdf1d25705587c4460040ab963e3bd504755b6aa5b18786b68efd3c8e59e8dbd172346fe7f4a18bac98164669d73984044f3c777368f965763742ab86a3720208c64801c796f6e3a1c4748b81e41ac58dcf6ecfa0453b18fad7e3473604f57f7da302e1fa81ad538d4a0280c4ad092007bb9a7a12907227a936871886c699db97d00a1966fdef64d9f3672f1b792c1edadc6781b391c91bea1bd7275f30859dbd1707b1f554e49ceb874ca06e92ab466efa7eeb6990667a27507a7ba789e24d593ea2af8eccb3862cce58daa63eaf212bdd86c01ed471cfc79b191c481ad773d20e821d18af85a7049034e5a9c660357a4c2808b9a6139f32c55c13282b8d98904f4f027d438189dc9487c96172e50dc1100ccc224e7374cf96ea6731032c43fbc9b367a4d1d0b31aa3fa8eb589672e69f1d9144114bbd508d56c2049ecdbfd7b43545375a099ad2885353d8c550d22dbb738e6fe3f104b444c89475a2cc24d7887daced8fa05006c02dfded01c00707e2ad04c41199c5decc1eae34b0c0abb5a5beee1b5253c3350e1a077682767a0b9124a4df2e8879366fd37fc04d4dbcf89883892f46a65ce3aec22123cbe6b3af6364df1f9f5f9751bc8179b6dcc5c126dd65feb7d11a85994e90ab6342834c79c5f82413e88198c73e932c66e3cb60b6e0c0cf438622e5dc5a1036c38afe9cf13559044a9e90f5fd72a3188ef6b1043f5f4e6b40ea51f6235dcb33b3099b2d8c2e02103235f0476ad51bce6d8a2934068549633e521a3ee4c62c22b042fb86c13c8da849233205a5e277aea1129678c31f5c379a71fe08b72fad9449cb923126dd465d1e0ae8a925374149b8248b3afb69f168f3ae701c00f6ea08fe07f1b5338ce6af2f3156ba6f300310114479f2f6119367c88c12c158b84be13b9c8c7b5dd7c90edb5b3ea1fa5927a25ad6d5596992dcd4877f58a134e05dcd80dde4fc2c2a680cc0ccf3084d3f4970e3603fa6bc5a180fcf1ca4241c0b8a1e7c607dc025016e297e2b0645de4ec2fc49851b9374f3ef99edd897c284a67b647ca8c96fcef935d541e9faf334043ea50b99fb8819ecce039227b624e52d8c20003b5a43808e4990da8e4398c4fc172b983351fd11a13dcd2aae5193d42d46e1b57c92e3e01d23fc968c729f3782d6c07dd5a17af2bda96735c12cc7d8023629fb0125e974425f7914690a7ed26508343ae58c8a439ebb6232049a194768d4594f5d65aca37a5686c2a86dd04bef35d74e0755937ac0ce3ebded1c00c8adabf030e5e4a5f44193b62fcf2f1bfa9dca2a25afaf2f1ec06c5d17ef3526d26d17af3e2f257ded24b177ba41c0ba64fd4fbd5042fbd5961a105e0e9f77f3db13c1b6c5bd9a9d04801a5c00a4c544218a21016c65bdff774a44b1d05256e0693e14d76605d67bd10048d3816caf31a6d10886c88c783538bd93e92bbc4484f3388b61adac4b92b911c76ebb1dd11b7b4e40be032bccff610068746f41e34a1fbfbfe5faf57c8a4331008e2c1cfd69f57e74379ac80eb6769f4ce4196795b835201ce4ec85ebcaf5eaaec242fe6695cbce1d53fde5b002e006bba8c8a1ee57da061ceed0d21bdd57ab0cab9e46bf3764d9a6c3ab19736d43b33f32eb955f9174ee4a54666e7f19cefeb49aac7a59b7370d9ae730b7bb4e08413222f0a66bfdac252fb61bcfa838f262312febfde8add8f6843f1d64ea3da42d4ef986498604d65737a44f5a099338520cdbdb65ce73b110dd4bcf8592a4adc3e0170b13404f99f0ec8f9fb225c1275a921f09369db165e9109dd5be472b9bc1901bfd882d264d9ed8d88b4c8f3b35f88b69e3e4b8ef5debb895be536a3af492d968dc1caf31879d672f70ad9869ea98335cf9e4a2760f955fd3e8099e4b2eb4269e354548f9de9921e50e49f3f5cbd63468b9db0cfdf17250c8f13535d4c0a1f21c87967cd798fe93b9b2960447401ef90db22c3adfba0f55f5585ad37040e8d6745184dd536d5a26edec365bd6edff1bcc616cdea3bfc8b9d98c0ef9a626054e361194cd05b2287612399f6d3d3be2f71555f14ad2893af6f60ab61adef663c3c2464ade671dd5ebc71935aad290573588fe6e11f48cd2b7db62e4b9932890d1b96e1b83eff70f026d199db75fb1e83197c937b672613c66ea131f485b4318e27c079b4018d4205484993bf50ce70275b244f2caf47cb47eb2a9ca59afbc78809a912eb56a4bb65cae4694f682c6329c690003a1c355f779b5857a60091b1c3685995a366cb43d753a704d3e59c5f5003c78feed877351e27334b3fdefe5907edd9eb25588a42248b9c4a93efa7cc63bad1e5900b95b70436c35eb85cc8251c4030fab9556920141cca24d6acd3122b92b7e868dc174bf071117958a4797fc90866aca685f1456fab397ae647ab9970348082bd74865bab7f248568db98ced7ed84e8360fa91afde3f23509e6b4caf948349ad9fb6a4efe0a0468302cae7a0f999195af1c19058669fc3b88b2780b9075dc180298498caeb7ba0cf8bd42eb36b1959d5ad3ca6fd1e85f76abd27ec5fb637ee38173ad7d86304d5708b6dc8817e099e77f5d43c1a70624cdb96e4e6103bb25e59eb51d894d1dc533a74005bb79cca35b66e10c61d06b5227fcb071457025d605a0862218ca252b871f8343ec231dbee15688aeb914c0f16ebabe6edb0a489b2bd10d4392c6f1863bb6a62181de7cef61997ab02f3bad0a893cc0cd8a99cd7b3f7773085f0929de36b5d124e3729140c375de9a2d0cd9a360cadf17b9e45b7f2adbdff9e75b743b62642ed67aa703b8ef33dcf51a50edc7dbab42d3d2b49badd2457a9f92847aa6a60ae2beae457a5fce1a9e485ecf907be22913893cd1350f20fc6c81c94be426eaf01864e813a03e4674491b61516bc95d8a77c15f03d0adfc4adc27f27a5ac4165ff6518eda1a5c408708f78a9e26b834179804a312148d4f75f21a77d78387139da40c0a6293c2a59d0162437d68504f189ed970c5abb9ffc6d8e1be2b0877c7f24b1dc273b1765bfc5ce6f4b8d99a96d5b1c92ee53a39f685b304313d909c1ba8130d20d51c824cec420b0315229df295f75b453a6c131afaae0c36d7c4fff70623638a4f7ded5eb7db58d95deb6249a29b171d8ce651556dee8037bf4ca74453a4a76aab7cc07ba44e55de57dbef8542c3851ea353fb8e259ee89bbecf9ce8d8bd6227afc0028afac48a7acd9b4e8cbe982eb1475917ad6be4cdca9cf6e7cddd971b2924f2bb730264801685d387485e41993c3fa0af9987e8b52c21688fd9a9595ad8d1b9f41e0457be18492aa09f69e64e2954d1ca3cc1d32b2915cd9cf6862ca79c80beb47347c4cceadf48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab44aefdda94681407008ea48d03ff21e9bbb4ae7a9aa37c855fe3537c44106e8079f18c24d2584474bd4a99367660ce6f7e6d7c294961e174366e7babc569d5f80572a21a4bd7086629363e0c9ee2599c8b8863c96613ae6c32cc67ccafc66e1cce79654567ad08e62e9abc99e44d6a79ca4d8de15b7f8a763a4741676af0e1f3bd4e002c8fa1ebfbb3bd3a65ae68a80c230422f98f6e1e9837252e045eafd585ba389958297d59aea1e8e1f665fcbc5f7ff449996aa712dc0faf582cf3caf3dbae80594f9f07fc06de63d9d672d14d7ac4662b4a54f40d4aab2de766910be2fc7f6f679b5708790b5376498d3baf0463dca2f093b51bb7e9f3e7033ba0384af0174becc3bb477bc5e86959a12a5e8924adf0bffdf5e5b9c1cf24d232881ad5c05c5c0f50318ea83d8683339ca6a583c52198c00f7c1abbda282e7fd3b179297338ecf9c923a3a87a130dfc06164e9b4c1fe11d51b382643de44b30a6831dee119241d1b6f84f2484784fdf65e41f78c38e15fb4b00e45df1edc40e3467cdcda351a4c0a0185ac4649e91024377e1c331587a8586cc0a4dfe29e14004c3536d305f5dee0eeb8c2f216c1b8d27375b239f6458e08980badd6d82e9ee9e007578c0a3b48288d9ad0ec3c934a99a8c5741149af937dc82bdb545df26428b87fc935c05f1a4964a8408539f267e23de9bc498e2a4b0083cdb7c8e27de6252bfaf680a6d5b7ec1a6dac6d7d537334a95f1553324a0739414dbdb50445a767b0f589fd4c33b35905577ef5a53b0f097191f9cee4836a908748779941de2a78fe1bde0c2efd9f48cbf232ce101d9df93d3ed40d036ae7aedc3a5ff619abd1c159ca8d2dbda7de13b4ca62576c7f925c52925eae2d7500dc969fe14c0a335ff95a7df1d276a6f242765c781208d59edb5848d412b11638b27ce5a61b8209075976c2a6aae88f6e6d8704fe9e83b425dec4defeeb3cd311b8c5a818d51f917a8a4525361791d5c4fd5d70704d4b9fa9df1ea119882f400e682753a41931712c043c120a98f0fe786a600b47befefc9d64cc5bbe8a16c191490874e258760c9e4fd215bebf848e0b4d35521f53ec5f9308644b785171fc4cc3ff886e034bd833d59dbcacebdae8f00e43c151bcb24d1d226d1cc19ecf349361530a81ba3168af3df5536fbe52b3b93621f57959df298e5b4d3c14928d2ef7b9c977c7dda54242d17f8661978a62d94d565b00abc199790b9b25fbfd4a3ffc35c95ccafe35d9a138a2c24d17f06ae2cc376e822317f16fcbcd56e23f84ec135dc935e58c61b34cfbf5a36cb00350483b6bac786030e5c5045a6b61c9aba7dfaa4f7fb21897539863ee865ae061a77c0359915de3aacb3b5dc8cfe53c4d17b393c2b6bb23652f36390407922969d510cc97b99d1df4361530aef10707d7a021b2d9576b2d49ca88b3cc83ad1baa6d88ef8c81c08f8baaf515637b21ace9d5cc8fd9fe4ca6c3aa129caea7060791d566f4de8662b90f9e5d849cdadf9bd23cf6737b07ca105142663c30de27adcea11d64d433fe1ace84b0f6917c8b655f2a421602f07e0a7127e61ae9859c5e9f652ec82416fd2566f291f417ecdf99bf3231d02864e2e5a1cf34c13f59de9aa2760d8734bbda79576c62f566b8269990e9384a41c1634271acb4c7a8b768f276685c3a8c7f20872e56b683244b1af562c3e7dcf592a9915f44f886cc2ac5f679c07d5aa1fd69cf3a460f25c722073da336a310aa551062d92c7297002060072af2f3500b9310c239bedf45c5e985c2e0d60c7dd68522376dc7b560fb34d1b5089450c32ffcbff07b35a96bb6fe01259a06868d00af697f8bbb238d03d49570a109181c9576c1ea9d2ee02000cc23e63d6c93c6cf3050bbb15b6f73b09c25da62e5abd4c2bdb1110e1f25db39f04885595cd6a388c4726c8d4cdbad87d80d42fcaeae843e2e17f44c9aed25c8f6f9736c7ba1bbd3b839126de40a930024a65aacb872936e446114e706a868444cb140e53d976816983f3dd1d57eeca01eab8211b7aa8ae99d26e35c06ea4b226e0a6e52172a40e7f0df5f67759ae2ee026749ba10b8e33694c3e01a001526f9d75f6c419cdccece3ea3f78d69014e509c741214581034bbc7e2bbaf76db8421154abb2233117a1ffe2786b21424576e295c9baef262e80fa2edb69aff800b3ea436eb827e8adb73abc48d740b86c69d557b16e874038598b25f616afeb4f4a900be7dd0d38b5b6fb4259c51a3aaf4748d7a445f518485ed72b25c7df8ed0906b74bd29bd6a5724ac3a503c990f3697a5db484821f68718470810862728a80ce34599a41fc5bd8bb46dd845a4812ae1532c457ef4211d0e41835e5a6f030247614822571c930c727ba397e723d6b3aeba9244f054e331c82e65b74c9f6504c74b4301499a1a6f6269a3352aff57f88442d4eda42a82ebcf7776c5629f97d6160bffdd8282a40ce2e6375b161e4c22ee53bce7a45f4774aa827e2da657e1a1bc07445f0bbd770b7a5a25b1b469fd58715510dbf8d97af4e1b9459a20b08a8d3fa9d92feb32db95b22d36de0bc8b1c397b09970a6826392fd8392b2d790dcc1295888f42ac81ad213c7328b2324b28be7cc1f4fb8414a7785472f1dd3e11d66017b1756d1697be92490e15f056346d7e9126a1f35fd76cb016fe2841c8996a3507c4fffe7fc45026df10b03b86fb6cf26e8418926a030b5fa62748fbb728fa19dc2f8947468c1477750771e442e4a9d25b76d359211c05df788ade5b7824f8770b5dac0819737dec916ee59b28a49666ee8b7ca81386eec8049542f18a3207e51bdbc291470eeefecac385c096afd558ae1e4f1fcfd828a1d0d3314e6bc48aec942687738db30a366781dce51b5ac8f000cbf510948435e573c103d2ab4103e5faca453f2c04321c1e4655793559f3f58d00f93b301fa91b53eb451ec75c0579c6339654c0770928457d7a0d6311e8b1b949b5eff10ef4ac07be7f932e6a02007cfef544d99ff1e38393c512231709bd0c22c5bf75d6ab2fe5c70dd06eff8c228598dc8fd5c38ec64f15c127f3ddf98ffc18a31a2d1b3f1f94719a46f780f648767dd6b6539632590e9ff89f63db1aa31f97d890852112e39a5a8f776692e2fad63a5e28c18c7f04588ed618e192ff8ecd2cd0b32c9ce9244dfe67d21aa9d4b21b3aed87be2ad760936ed4050b9a1abbbb4415e271f3044a45b9bdf7a24a4df6bc1c0f3387d5ddf675bc9cf42064fea2307a32bef3a806ce1838fc489bd8b1314f3a3dbcdd31f52e45f47b56ee680deae33b9199304053481be89d5555e9910a3b31e3941cb3bf70aab309adc427eafe3a04cd11a6409c20e7353bae6f017fea068fab59d4cf8f760a54b2893038f844ab623fa8c41d23e100cb31a44594d059379fff6e840a07a6eb662059b0ffc856cde083df285a9d10df0729d7883834b0550f5a52a8e79a7bd463bd9fc500ddcd07ec1425317d6a38f8758ec895401fb7e54a4696c1ecca7d4bea04dbead09aeff0017b0b7dfa1db1d392caf7fb60e3b84edd4ebb5d8e0a23b845708ea0d3a267fcad23026c552a1406eb88d6290f433a1834cd30da4ffbf7b0228b3885ae669da46ba69a9b1301f7e8ec22f3bc9f90d5c7ed5c87c6a6f261b9fddf69e7b56a297da9604478b847a6201133d114b66ee3d4737720b127900a3c23c783658d2f73ff030a8093b96dd712f735eedfd8300cd443a7ac18465759cd50fe257d9a19059ef4efef5a9ae6e3581a93ad6c7976b93dea588a7a87bac8d3f1cdb0ae60d966d3fb9ad16be1455355d7f7ad491ec57187d4243c36603cefe682c0c56675c310448395e71600fbbf92cbbc6ef43c8ebe28ad7541fa7440277b8061d4344d788a57196b91078e9c80a5726c530c6744f7b6b2d62c3518771819774b5d965c6c4d8249765faefe8a3ef4488209e0038ac6b8a0c16b54e1442a36d3c7c21b2710c25c9050b37ab5575305da97f42da5b2a384e3c18ff84339e66a2271c22141f8915c6a852d096786556095088223c27f06c1e840fa9dd2cad519efd3ae4711a632f8448e3cc97989ce8af47e6480fe2278e64ada4b9404696ecc9868170b3a8c1fb6bad653395fe416eb9543fbc39d5f62787807e3994ca82bf8c8996cdc012cb02e49e810d7af37d708e403c84a44886beefc24630c30098534dd0240382a0abcb55e5df632dbd787796d284aa3682fedb043ea3a7b430012f7521d11bdf9986df2748263c96a4590a39d4c036d9cd87072dbb3ea54fa2e4db6d45451cc14787c4c390ffa19df249b2df0c972e746f49c8d500be327c9e6ae09c04290e0ff0d3048f8511992aed6ff6f044b29cefb16ba961d6cc56236bbbc5692525fab1dd9527f5ee052c25dff45ed442b88732db162f3a05101a2c52fe123e72e0e78e56f3b35c948262760eff72f3cf52f8243571e4c85531857f9b5c5082b103dd90a215322c40314405c3b9bbb6b228f6af07a54f738ed8a0058efc069cab35e49e0b242bccb8b9d9ba4549c083b5e189ba98d9f8a477ac72a47207bcf6281f05a0d74827a6c4c42a7eded809c39e25b92e313668c1d956034591a4faf7f069477f4fa8ad212ef73d37d48e1fdf369e8ff11ae426347c7d5bd131fc4907cabab321bb6d45a5bdfc1ccf7092893d45f212ec9b0aba6328ca832e9b36308e7fba4f6f63be779a387bcf2cfa0dcf4793c94b07fcd0adb8a5e48246177b38f4d81225518ec4cc69681b5c38ba267a64e7cc402b845f8699ba7560ffecf3e7a29a6a3db086a7cb781585cdd9f70611fb0aa2fb3e7cdfcd703122254364c5c8fe90699d72918efd3006612af9fbd41c76c5f484292c780ba4d095daf9c51a607181b84f81f8a1e8f90556797f0cb9243cde6ae1d5dc50c69d607687095819396434ff5bc3030a163cd80cc45373ddb0b51dab1c29d49289c3a86c325a65ebda3d72e5c722f9ee0f5f482c125d786748494c603d0c5b64d97e7220e5d634b7cb6603129d85247859cc1d5e6c856280746031304a68bbee4036843aa7640ca69545af2fe5d3cacd7ee91f49d9b37b4fbd6296c44d243a594553a76181ec37e0bf443ee4a5f634180620169661cf09fdaab741c34d2821cd713da33d7957fb8cd1c977d8e7d5aa7f77d8c9ec0cc155b1c4c7fad6535cb8714a5c40779a8ba1d2533e23b4b258732a5b7801f4e371a79491fb8ba566a8466e5a1946b7e97170dbce0a0a1f0f67d942396a8656edc747ce9bb9bbd78ef415ec29da7ca470f1b2cfca95f4c204ea22ef9a1520b932ac7c866a6a5115d3286b123d08abe736f4add6cd47a9449cc9975805e197c5bb068fe4847716063e2c9108200c9b284360ab166188f04fdcec80a60236b2238fbfc8117346d253d6e8cff75a4c140ea01ff2ba0dc09388ce3c2500197c3a7bb6bd6f35bf414ca3a4446c077132de415417cae85a575899799fcd8fd31bf87439eacc77eecf4e9fae29b25fef25c06a67327dc8ceb5082ae5fec27bb77bb1b71f2c27008a579eeffe7de7285c8c8431e2565284f3426be21b424aeb4e0530ec706dc7f81b43053a9c2a54893ed1f03dcc6d90415167486a2251ae071e1f3cba3594f58627fa4b288e1641ab1f5bcd372d5e802a6e8a6869021536f9b1329cc97589f9d238e43862de2bf5b58692e2c60d116a64d4159488c47529e68fa719c238341b05d5699490944fbad0fcdef993756e961a0b6e926f6f58d1f93ee47b4d867da34787f1265ab66cd62408a7d8456c5d4b7299ff2ac50ba8745748538a11684cd8bfd4e4b7664e6992d832554885fbc6d294082e2633a14c5b2b355b0db7e589039647aa0f5f632e3615025011fb299173a9e0654d60372cce9b8b63cee6061c6cf365abf6ebfea30a020101fb4efea676d9a70b66f5d83014cfd4d59347d2ed5bffb85034b226b056c8b6cece2782ed234be7873a99894077f09718258251e418e2c7ff905de33d618ea920512dbe4fc228274391f554443d265d944c3e8beaeac31a21d4943d32747d63604d09b9b29a97f0a632b04024af98adb1cf2389e51bca3a1fc6fe3d77d7bd6bf48b627b00f4c1c918e77355c8156f0fd778da52bff121ae5f2f44eaf4d2754946d0e10d1f18ce3a0176e69c18b7d20b6e0d0bee5eb5edfe4bd60e4d92adcd86bce72e76f94ee5cbcaa8b01cfddcea2ade575e66acae59b34a85036c37afeea9c097f0be74de2e05d9457ade5dcedff38f1e79c18f268a54c302cb51cc21003ab9a7cfee7a0fd26f9715ebe822d3d8efea2a0707f163ab6920160f043a4b2ac20fe0750df22bf9926cdfac443234fda45542ae40b9aee27ac889778b677595c8290a8723c378caf4c16d64fa7739779c39301675cf4f57102323aaf03de769d471edb039d73f6e1ffc85bc10d7296e5fffbae8ae1b8e34b299ac513ba3e8cd6e4e50965515c70d9b87f05c903c4e09730da9ccf184b39ee992eb137280c2e91f28fce182655acdeec876eb818dee7162cdc46948f505bf3c76a9999fbebbe66e68ba3ac5af3ed9a229de12ecb252ceb4a5d568ba53cdbf33adae8ac9441cece474504928dbbc573f10f278d892c247efffa2704f8754c6569fc28ff9fa2d2207b586b5b2d21c704be778c64d1785049d42f52a1079dffb2eb5ad5036c835b1629326266b7aa64b501539a35428e52e45d6943e0411b9864255367488967ec17a77f6465cbca211d502fdb8f3ad28ed70234753343829901ae827a4f74c4e79d9c7c0ba8c8157e963168cac348f9768a591d811a6d476413fd746878cd2ee0106ed4a2d03af0efc81b9ad281fb47ac86c880d2264cee9c038895cc64e10a682894f5d45ca2f0f71b7532ad4bb0519344d70b02b760fca368d65300846efbd24eb57c0aae8eaa2718d4cc957106abbd5d1b187d7e27e61cac7d58cf67a557d0eb36b3d0565c70f248c0c535a26ccaad37fb35bcbb202f5a56d3f3637f42b2c6969f59afe4aad9db13bfb8f8406112c55e0def3b2ee85cfee070df774bc5a135c955ca03c9e8695412282477eb7238a837a9b19329cee38ce1ea69755d8c97a10c008176869393ffbca0741ef41e80c86d85093f3c625766d3972de81525fa8ac7161c729b4aee308baf44680ad4af9867f672a9e7311d1f2e0d994a13206e75931cf772886cdc98f7aaf1ed902309baaf946a6dbac9c93859b43805c7ea57d3f87baf10de77e39b993a291a14881381bcc57cf5178ad0250f3186b5b4023b385fb8afb7fdfa97aae8c3367808727190183006da9df2d68786fc01d467f6ad15415a75e267736d595edcc6720c8098683a3ab478be9020b2898a45ec444611fd35e79e2abb60d92963fd45b26120fc6c9b6bf269d9f153486f42af67d96f0e52b5d694eb6a516f9db09b3093d6e2123fc44a4d28a084e2aba0dbbac1a7dff6a839add6cee4a3a5189d3d0390be327e344d3c113f82c9537ed6bc049430176f7049e3e02fcaf5fe4cb2695b53879094fc8ed80b19014d3a147949f969f2b3dd4d5f0f5d987dc6ef8c78869446d38afafb1194873f9c7eeb1 +MD = 5e9bbced21e9cd9f6027b265d817a25a53e065a85a06412dc8fc67855fdfde5e + +Len = 90520 +Msg = 5b64a8343a18dde28579379d3dd0eb8f753bb363c050d804e60390a7dbca8b0bf1ffc9ff4c85ae2696ae58f7f55c30073a67bf8b5c3fc41824d383ae29b15ff5ff6eabc6ac48beed5b0a452e5530de862c4ce2b239a881f6492d15179483b0a9ef7af79142a934c23b55a64a44941c92b3b1c2e141d33a23bedaeee9038aa5b027eb5566f6ef382a9e562254accf12b5376007205b071528eaa2b72c5d0c679111896c4fb064f4afecd66253742ae976201f5a756f8e3a8e344c18e88c521dd4131be553584e8dd88e9d0e4f84edc95dd7b763ea66aed2dd06a2b82677a4f002976b677ad6f62e2dea73cd50c460d9f3c2f0c98626b0059bc76a40ee064908a2043f9bcd12a4fd376920475f1cca42bf4a91345198dcfa52de6d5746218b8c3cc2602953f4a0227d736b258374752b4ad7644e54a479da89b573a638b0b0a5593996b8156531c688711d0fc5b4a7bd1ad22fbc9633d1ccc9b344d5cb9b017a80d1a8f0194ba011dec9feac2bc4a920b9a1bb291f2b2af99940a78b07cac63439f2607b6990362a09e5d6a5c08cc37bafaed03bf876cd8981c46570f52647fa0c0484fe0d1a383a912b6da189f43cf68260359a28fa02a309a7462d9c95cbf5826fdd240bd3f168fc058b4990e55ebbbc1eb4efb7a1106fba52126a05009c4c229b33926da1a8ddd4daf745dc456fefe45213e2ae5141161b2b91ce3650002874f04ef33b6ea4c0a0127a3c75feb8bd83631b1a14f4dbc0b59b8b02396b40b101d7f5ed7b212e3ae915dcd764f6814b20b99440f17127940e0bc7ae163ba40e50b6f22837a28e73364ae5bdb01712c143bc46fb4eb06dbbb0e10e79d3a77368eaf60b4d76d90c920f1b5c966147b24875d4f9f43299f55d2387280b7a96f7e65500090441aef0c0fcef0b0c8070aa083c6974d3a51406a0ed63dd0d12f276b11b3bb3f49f098124862fb8c51379432823e3803faf09e9af98dff527a4a239f0c30ed3c698d208e734412c69254ac2d0afaae5e05960e7b0ac613700378e88ccd6e32f2234f1cd308f8e2fa1bbcb722a6a266b5faa0146ccaf536c41d39eab6ddb2191ae7c4e18281e7e8915dfe49a5bdbbfd964abd44e2a2b1c5c9180bae9fa5a2fbf1577d131f6697a016c987d818e8adef99662c249f3a724cf9947ca8b9cdc7781fd2d635fc4f8e8604eef7e70e900e9919ed9b17d4eacd38d012fb6d97ae860a10fa7eaecb754316e65eacfaf94c44a6a23188a3364c1915d7041661bbd0652e5f2ec4f1ef904bef356945886b85e674cce2536b35c6ec6098e84c2998cbeb5174e047b3eb290f6b7ccf2023d7d57aaff470a9c455f3bda570400b39b1099f2fdcdf85593098140816d0eb31b0a367a4a35cfa33195b135107abd1f68701e6f6015cfc467275d061be1ef546988833ef6417a35be25573ffc97c4f049d5d69507ce91b20034afaf4bd19dce701ec760cb1215393638b561e2041c0c866747ccbca14706a757fca3dae5210775f588479151a796dff554018b69cd5d674dfb7d4535f8a8a4b8ce4990c482e9c334515b10a539360285bb89c06ce0c933b07a0e6b34ac7f3f80ac0b3417c85ba104a70410b7d200e60f725f47b85c3a34b74ae9f6436b75c0d71f509085fb44568d14aa582e7adcd5bc02ede8f34997b08bf574ae0c3e716ee4ae816ab7248e2bf61fb5b1b339b215b4f2996dc6afc8f05303195b372c5c93d0e1048b544b206868518de3ee186aef1ecacd9cd897b43c38fa3fc46c3e1c75c24042bb0576e2550a309ab6861eedab2213f03fd20845dc62644db2527b9a5ce354a3c172afbc39054645f224542191ea546a1c5b0b6217f8c8aded91ebbe925ba4906742fd965e801bf45e6fc0efe99b15a2fc1ca7f33623afc63dd296715e51b86f731e69580aa43510c3106c3ffa60df02a6bce4e1810aa0006abd859907ed19a9aeadf9ea86991e02e9ae60fa0d5f38f1e4e4ca1240d623c33bf9bf1fd6594ea7e098b7341a865e3198f2a3066ac0abd77c3c626fbbaec077792f4cec13badfd0d186ab1f0d937b0498833c4d59acbd1d376bb3e03abb0084ec0635e7063b558b4820dc91a9eaffe5b00b36b6224bf829dd1ac54e04246a535c2781f7f60137420f0e527334b0723baa2f96280cc4e36436f0a19f6212874a913938062d370d5cecf715aef7105a6d4c99668d6040063609964ebd9cadddd252e563fbf1036041a8832e283a3041e55ff1aecc67e6ea0820b3d48efa1cf65469d308bd8b8db6580b5ba4cb4538ae0aaade74cd66df164041f03cfcc3885a369caa323643fe9a0bdc277f7e5f512a44f709c278a852124835f58dee41188fe2b412e64d607e91c1e58ec728d1a33cfb0c1a9fb574686786c469cf4bbaf51fbe79b52eea2c3425e3ec3985b3e4556c97b2b8146c11489c64b5f50bfd77469234b23811f5ed49ddd7bad0c106dd8f4280b18b2785c81c3948d24048ebc0346eaa29469857ece5410617fa8109077b471fd13ce2e8e109c79ce1f38efddde73d8aa485c9f6712edad8ca5fcfa4a93e02dada734d7da439cdc7abb5e51b1586863bec9daebbc34f2fb69da8b2bf0a03fb1a93d76f2d58d4d331f82f562db13ad225c9374f8e2c6ec906567d334273f0bb48c51150de470161429008e81bf92aa8b002fbb258f2b42e31be8558152c2dc9ca38c9f879b7e900623ae9a4cd357f90446190e1ff5e48e8a09d692b217de3ad0ab4a670e7f1b437f9c07a902cad601249ac9fe46db8527fbabbd1b44cae3af06e0150bf0e3d898f6fe862b71ea9f6b727accfc18848fc79e6df63fa7f06591960e670edd8e2908f2c7b4a1e8c7068064629c9823a556c608ed3ca05a3ce69b0472dae032c2af3bf9840d9cf5f4bdf880feb342f6a29cabb195dacdd9e4f913e8b9cb108f15bd7a71c01b8d17d8283c3e8b9b9ce000a3f13ef46b28b5acefa4a93fc220411be66d01e848e2cd05d7b413a5c0069e341f3ef78558316bd96cb5cc914a8ff739bc8c1089204e83f23f08a6e9db007fd160dd71b54c886b1ee2dfc94aeec02ff3a250240f3c20eb11e0924ea4271b135d0b553430928e31d1d48b35c9095149de2a41c306f6fa61094ef991813ed6e73b915ec553e4c36e86c43088a834c3e35dd6d963eceb3b643cec9715fdac9469f175229bab9db87fc234784844fb987af71a9f8d4d738483214c032265db041a2339793da437edc408a7badb3bc83f7f3e780cb5953a363c5aefc66d765486862550ab01da3dd3f9ce8080e7f925396ea871995350b9f10e4e3a494d9ba39c2c8c5d30beca39fb7f887152c5198d06d7a989de1cfc4d25677fce14594242c57bcca1b29ad096c4c3cadcb918f97a3838c6433349149e43d6641da00706bc93027ad0a94ca9eee0751a352c4a35873e009310418e2617ecd99fab84dd556b754efb7c7d3a92acaef1db1d14df3a0e98dd74838142ad3480ff86fa2b42baf9fcbfe2d7b6eb475ab0d891e70b5e93aad91e0f1f6b1d268e90a6ce8c1beda3c289e3a5a4ded514637677d345982ebed66f40a73667540e80ac6dbac3cf24ac6fbd48d8566d9ea661608e239b13f6380bcbf3f18b1eadd1b524c2f043cd9e314bf75def5edbae69ef1f59e76a371b8bc59f96626ff9811c86aa34e38e9f90ef01d8a14f30b16adb470379b3354a25269e2aa67e6770645b9f9d322906add3120bd1a19c7e877a7703ad7bfb8ef59994f02da2aa042bcdfb4a8e59153e80ab66d462dd4b9ab643c9cf8ddf44c9a1ff5355f92969c874249821fe085cb8a0a039f61cb2d117d66d4fe514f21387d7bcee4a1d995216f21e9eb05cce53e7963827eb5fd0c168504d760ee372ec5c2f58c2571b80f7822e029b602b299f5dca099d1ebca5911ecc6ad88769c02388e1597be7736eaeac70770adc0998838dc46b262aa3bfc4ad934be3e928787dc0c6457775a5b0fbd871e2596e4899c4fa1df34f79b57de0975d7724ceaffa4f86169351ac22f663989aeb23a198abc8152f387596526e596e7363279250c41d3b8ac976d59bbd7a8f63e7e6105a5d01718081350b1b0fa3858d9648cecb647b637b6e63ac4064b50f557f1d250e1c1591aa83fa427fe0639f049724ee6069ce9060e8b47ae18a87baf807357a347758f815a751c6e17efdfd60dc287bc0329b44e3cec5cbdfad86f4b416cb6a6ddd50174a71d812f039f7333adbefe15b6d65f37c9734399b3c174f22244b800adc9f71c159d9b11cbfc3c2eb2cc7d9a258c31e83c87c3eb4b4dd4ccac632559bf3ab8a02e5e32bd76f084f0a356caf35a31738a1d8fa35bcb63d5006632c55b190e8d297ac80eda0c6291a108c3aec75dae6e44f5f5ac903aeac1b7d91760acc52fbedf8044f6119639ad676a7bf1be34ec673f4b20a633a0ccde188b7bbdf4cb8393e9c838b40a1a5f1e6d4fe65b81e9d2a9a2a77859eb06f0754c06c7a5dc31f45370da0d0e6ca3bb2cd9426cb4b884477b9691658c61733ecd7ad261e00b0169489b3f2ccde0363521d4c875c30b0b352443924f093def9e30cb75b3362b43c9b8937efbb90dddb543856b6951208883edd0319e962682f8e46779236fe1fdfeec7f1fe4999c9f23dc15b2b026a202191e66f7bafcc435343275661b52d739ef2c88aa4e3634856732ab25b20a3782dfff2c6b0c02c00f3a621dc202a8b5fe84c0d6a8a1597e956a8d704dd7c5870fbdd74b15fa72c218f2bc891740392255a5ef90a144c821d912378cb1881e3bb19bf0ea7ded1371594588deec3dcdc7443a02df1ba14cc659487726da2bdffb706190322c4eac76d9190d47ca602c4cd62b41eaa01fac151cf594664e2ace6e55f7004ba9830678a15894ea38131d581060f4dab726b2b52affd77597ebb43d6745885c7cf6e920b7e865efbebe6a93fcc263d6e91e244f8b50887b3dd85810af336f8d2e0d1c1625b3c87fe4c7d9a7a137d607bc6fcb8a48ceef9fc657848d33aaff0846326901f39f05c23397333907a89494ba826f0f6763530abcd2fe5ffd907ef24ccc968a279663df32963ff437fee6a66bbdd885f3f6fee4a6b08f2c15cf3576c8436c58cb7f2bfe6a2cc77d381f14655689cd95f16e36540d59ff9d814d6cb943feb314e641a64961c2917f12f566f8034f17e76bb54482783516594bf46be64567336581c619e6a1be67a0ce672388fa757e2268b270976fac9c097baa792354e5b3f4a3f5cffdb28a0f88735c953cc465caeff14d01bb7a2658541759df98fae0fd6854b60fb71a8c51e009be023de885c3f50d6e4115220b13e329e8e66fbec0d76a9cf1203b632ef7509974b3b2ee3f31ddc4fd76ceeec3955db83fd3cd28ee0aa2848e4bb214d7c77f2966f0c45ffadb4e1ee2e90d67b6a66bcd46f1dcc1d05eb71376d844b6ee8b16c47c019bc11d8af12405e2fb134c0eb56fe587c410cf9a52528f0f18d0dd09bc6f9e2d5e9f12066edd4fa8c07cee94e2a604dcad9e54881a47c23757ea0b0a1a34b4bd367e40176c52a685832a02029a7a8b39bef1c5eeb8fcf89a288de055d81aa6f94ae80f859389f4bf6ca4f21e87f462e61f938b95d379177eb43fc4b49d295c29c364e7178c8c1f9fa57224b14f1b712bf90c0f4514c4082c238b1fed116abe95c87b3096ff63106d531c02829af8a15074e2b8c522e7b4ec9cf659c9dde4b58582b352cb9314b071a12af25b1191d89cb79feddfa7ea0206470ada10a9a027401897b57bf1a9e6f3b5255e025bf0ff58ebca185948d3d9c14d4e0b8a1ca4fe0fb3acc271c129993ab795ad40211dffcd37eca0fcafac2366d64a52fedffa203a7b7cdf74aa9db38fd00047dd0b1ebe40c48ced90847dc73d098718369aaa7709978e754b540c1b3a27f094a1c0fd26fcb93267dd6e4cad8e0f8cc6f8f4bae9c3306aedbf687eb983e6ecfc54e9c21e483f6776aa1623bda110e1c20d953460b26d99ad988efc75b1327de7bd2d738d6b7eb182c12409dfbd330f763d261fc31c77a21f9e6d8c370e3629bda5351a5dae9d9bf3e83f07fb2ca09d484f4f84fa4a750daa98ae39e7e0177be6d4a9be7559c5aa31e80f23f9348013a20db76aec849063b550f8086d7000f8ca123068bdb41d68a4893d67c11efbfaeb3d07d98312f02aaa8cf403b106172ad127721f1d06ce5cb49271db3b3238d98ba8e6daa63bbcedf0154a319cea849864da18eb7d99ff0ecacd528650b76038ea16fd733d481d31efb3a19a146370cae9f4cad4c5b3d9074c008970e6f79a9f704ff4ae31813a800f2da14702ba0349ca3e2fe3dd9d84cea4f4bea1e6380f97851a7293682e3c61b84df33f4f38649c6d7df01fad9f27eb3871982239c3e6a791401f29cb974a5d52d93f8ae122bc4b3c7cb4911e00eae7723fbffac5e04858fc8aa47842048dfb459a2c31a2c332df9d02243f160af649b925dc3174d65d312ebda988b6bc2cc3f958633b7962efdffad6e8337e03739974ec97d02def4cba8fa4d5620d08503dd7db8cb04d461ad3bac1a7753f3489600d5c97ddd7713e7b8806d10d313021f245ea4e9908b8dc43458b090b3fe55e24eb3d85635ca55afd7faa4491087cc669ac4f51fd91005db803fcb8ff685e1d7076570867a3d3c9c7dd59d7f77c33682a75d03ee4d066c4ba5cdb5959a1e6ecc91672c9f39443b2610bdb3246749f2ebe0636bd56ad323acfb8f2971fd1c6f3b933556f0e173c3e546ff8fc86d70641acc948755c10abe6817f07175be2475cc735c9a3c1140895277378debf8fb1c87c24d00ffde11af15719e38414bbaf4c7c84960d1373edde627e227ffa83e8ecb78194324208c782d9ee4e84534446ed5e8884540c1c34428ef7bf883f9bf3d5e4475e87316dfac2906610bf1f655667f7aa5a21b4f824e8324817a094bf19aa8bdef4b6d5f9fbd803eaf0df800625e2cf50e21b14ed07f8d6d8f27003d7a39434ae1e66339211edbbe0b7897e0ffc856ce4e2eb33e4239c020f189f93cbd9ba681fa63f552186293eb22d672268237858cc233819c6c2fa3f5551d64c830345ae9953eb428fa0b316c61a2173fae2e41b726dabcf792a3a141264bd37e8695c8f84ec0f02c2a8b4ca86465f79ab81f13b3c88ec5ce7a3850aae1afb5be0532892483a569ea4e553e35979c83d6447c642943ba2c8f67703a8913b39c15408d03f4d05651d1ca1b9e8a67a04c60e7e8cb8e14f751c90ecdb76248f1e6f2dd17d1efb14e78711220d61d712bc1d8f6c6a238a8d0f5f9c4c36fccddd536f51f657b8bb3182e46db278d753099848d159890df9ba159902dd3bc3f5ef7fc9aabf8594f322de3d179722d182273f51ba8f10fd95a132d2aae81352058b4b831f73303a0db0a499f71932d7cc335a3f3455287cc6090c137cb4e531637a5fa7975c7f336fa37c01f582d17199f7901b26f2f911f4b94b63608bdae97983623cfcc09b0683c30d7cf918262851398aec77afaa44877a98cb3eb31a01ae70fd4b35e8ab3bafd80012eb255a835cc2efba11d4649de7149b52fe75cc016908d7db2a1cd85b5da9fccbb3ef940b225a688edba94ea57d4ffb0088191871141299f4c3a44aedf4ffaab039bffd460cc89d6fbd7591e3aff360ddc4e727da1657ea9ee8c72879dca2b2c866dcbdbe80d635659f8254dfe6c774f29a2721c4d79f73e281ce9a877c5abb1c2090fbfbe74ad9786916c0228b94dc46f3202eb5bfb1dbc77601caa03eef6db25021df83aaed30b1037afd33042243e1b51b74373657cb56afa8dd4b89287294dfd892e02f87e31756f6329abb394fccca601ed1a457eb96140bfe11c6ce6fcab3fd3c9ae0e099b248d187e016a1a80e1837520c717ae28f8e7253795ba90f5ab6d8043724bffb8bc255258c7f21f7af89e8386e058859490324040bb181f74eceb0134162eeb0a9adc834265d83e4b804bafa81c849f7cd5d6a3a4f301ed2ade5cf914004336115ef73db37188d163070f7bdcd23856522828c1dce40484680e27ba5ba7157b6d5729e43461808361fb7e5acd97c034a505cd2d40f4ac6fbceadfd7739112256f31c9194dbc4bbeb8ec0ccec2d3c8c4f60d183889ab4619b9f2e9d30444c5bea76d793f57e8670de8373f6a851cce81c59cbe960f8e8e1cbfc4da2f8648acc19678aed8eb8c5edb709b8aa06ce92df5843314a85b04c0e35ebf256f61f333b8ccd1de88810eafb1d25772f2e2af838ab26ebef1e4a4aaf817705ff5300af71ebb077ca0b0f5b62b8e198ce49f065bdbf0be020544f498e57a56ee6368c6636dd1982db3e3b81ea314403cf7fa5413439f9fa254f46b1715d7f1553c84dc1510a0e25654a1fc45b3056a17af7d3f366c4f9204536b7e9213e0ce28d31ca268c1b9a48ae57408d7c5c205816da01e51b06123ac9312a5b66a054bede988bfeadb8c2d3ff8c2842165ea911ed4fb87e1ba74c31f96a286e072c608f8c2519b27d8890afa0115e4df1ddfab5457f7f262d50afeb1d06388ace89373fe002fba8c4340bc2d90f6a14d582192a6792de451ba944517d30e317815fe1b42254b94a4a633bf5f2aed5018af5105a9baf5d43ab59124b610eb07de95867d89a46dcffd6be29313215257ad7dde72b29fe8589a60921c210c82725ce1ad09190fdeb2e32eddc5ce36de5e986e3a48758a8dd7dd3607a9cd387d075f84d24c94ba46e4124975c5f4bdd9ab55dae515571d5ee88fc0724c3f27334d62e9a6c671461ed9f7564b223b28ece4625e7f57dbcac3e13e7a5271db5b3dab13aa9af53335cf1b0edfee58f62a70804a53599e6815657845de38c9463704a6ce221f575f0bf01dc530afd8aa251d157a741447a08fbc14426695a0f46d10d71efaa46b592afa68b713303feb9b4b0a7f1b2fe2098c102bc0ade9975a4ffaa2628eeabfb635667250d1efed2f0f72d5c4d31cfc07bd3a453d1ea52b0c621a9f557922b2fa9dccc12f076f6ee8f43d0de8166c043f7572f7042368ca7f46093454241cf39ad695dbae2e1f43adebf229555f8d88f5576297d276a4f4276e4ef7db2a19e01b723a386aa07fe9e2494aaea9390208ddd571ce1462ea36993d445076f5aa06f0f3525dc12921f02abe9f04301d59e25d6238f046728910494581e4a4115dd6cfcc56b25e0275c4eb9e77d0969705c408a010b4e540320fbc19a00aef07a5edec7fcfecadd70bf6a97b5d8a5910862c43f1a1727d465593662bf769b43302aafb9016531d1154f3e8d7d897d4146b69b3e953bf7aef7429ebff2057904e049c518fd28c484be14b2e26419fb43d262abcf9bff26ab60e619205937b0f931c40a2c17d0eabd1217afe0940f865e536ede3954ec1c93484a90cc1c93a8ebcca2643f78e40a46b95f1bcd35f3855971e01ac6e789412e5978ec0c64a1caa158ebbd9747ec8ee55cf4e0f26e4e62fdd5c249bc7d5efe433977132859ea7ce57ea7fc7dad71dd63a3dfe49768a78412271b52643df4b99c904fef6822f5277de6df0939d2fa5f87352711044b8653600ef41d0650d2dbff07096713e84a3432379bcc13dd0f7c1bbbd44d803e7337ae335492eadd81cd3545ab6273d27209cc19e12d53f6389ce5dcef825469f798c53e4399570d87f606f340cace09f4101336bb144047fe27af417f97c9f599de6ed6ca1a97086ebd39b9cd866db458b0cf33306923f5e8853f918c74250ae2716fa3effdf0f5bd8c983e5c7e98fc2750c7bb4814442b7f1e5d751f01b0cf59ba904fbc2aabfcfdcae92bf49a9709e85ac4740cfdeb0f495bd3953e26b46d861f9b7f39890f47b5def5279ec2b10223358e06830c60c9d0a26898f4cb770cf10956dd6d0366fb6d3284db61de2f0f6149ed1ab62aea829c5ce32746d842d223e18b11607ef643ae2d5eef45d6595a28fea958ab3dd36233f20de93e355deaa30d00c31ae30945fe374a0a5292770803bc89676c2e61901fcaae87e3ca107af9f77e9aa41be529e8b811d491fad14477eb56f001e6dd35e84e8ea83d7fa3abae05cc3e050dd218f1187bf709f7af340ef3d89a704c8f7814e574f5553d5da449a1b45845a01a3aa3c05018c26f58004f3cd70ec347be822df6291532ea888e5232fc906dbe04b6851658e2c54c15d1c22e1bf302c1b37abbeb76b1dc706a9051206d8d834ed7b41f835bfa19742ecff0326bf233a1b789442b21715cb54bd3cfd2cff89237dc5efa70200bc6d1eb2160ae91b360cf10d7521ef2fcb9a3757e54b2ea789f635bda9d4370bbd54993f09a0c53dd9032068b6c2cb3fbfb212fba662785b6b4b99b50906613b24dc6706327b27a18ccb4e3ce1bbd2a152b16c0af8f996a59d821e6e95c3fd199362fc8a38e0ace0e1b3cedc7e53920f3506c718456705f0a148382cc88387218996ce4d7577a166485b36e9f55085e3d720a8a6243152d716fc7b8239cb7bdd67d640c280b6c1cc512ffac7df092a99a99d85370dfee9c35f1d6d01321267b7cea0188be3147a6d7cb09f08a4040ccb2cebe13d7b16473ffa29612c69eec74b1e82a9fc051737d42b7b981edcc788d2e18a414be42e07c768bf0c6649b71701e80c79a56f45869afdef8a9cf1ca3b6b680729c4e18c87d43b3cc3314a01d376bb9c1c1aaa15e31c649acae58b92a0df10d10f4aebd853f0d2213a2ff3658903f9cfe5ce1e0ed9f2effbed9af2a735b88c7666408b9808a7de1ab5b4de48a45422f67b326396d7990081772fdf7e86722b65d33819220253bf77ea625331b1c1d7ce40e9f354688936d9dc169a9f0fb68e3dbab43d2ccdaee6c73cbafaa73de788b5eb4745be094e0353a0d1cc7f2dd0255c9127600ee6f3e49711115d1fa53fa62bbeece33a3651e68d5a03ed958d6971410b141a5edadd59562c27c3019424c0be504d546f8c2f60f56c0f66789aecf2996d0cd48315c58582d240e503674168ec23eb01b45741031a4b66cfaed2d549b45b742712244729aba80f3b8bbb2fff13ce3883bf34413d6a9cac919ec1bcb7204adc7a9282cc964f11d53f00ec2af3e3a3d842c6bf7a8064c43354dee3fdfb7bafb8476abde05bdba455581996ccf7da392cd78145876ca756bd71d5b62367151eaa2631320cfaefd3e21f2c27a07b4612b8aa6552e26290c88d8119b4c78a8b0c049f5c8bbcf3ea251e0cbf3b2feed5b50e43f98405f2cfae35fb116c54e64bfc5a0b63277ac7591c6ba9593de5d2f794903ca4457cada25c49586359560ae6643d02db91b0e5bb2e5d6d60ac4cb83a35d0ecfc13b0e3b7672a2175e83558d8d8000e2c6719ff9edf55d19bf2df1efc1d52dd776b4d457d537adecfa59d50a1cc5595ebf3f04562b4076e31ce0767ebbf98a69cd8ac4372b59de8e72dd8a2cfb5a03280e4ee87a520c4abe88a7043579114a0d2d8485e25e215e842cd819fb138725c81966f16e4ca201316b48401ee465984bfe6cc06058d7555692112d7f4a94e8c74a4ec739ff4ac2c52e8cd440e23d9aaca9081cbaffc3eb8d0b526cc189c873ac08d013e3554cb500373b68a35ce078b7942142f73d2d46b0fe617ec8b96defffbab27d7535ef036def1da3503b975bf5287ed91ff95c9147d5070c9cc0c98349cabdacf6867cd491bef92e4e65aa6beccde98a3b1b99f2dbf70cbe46882458109fb9496e323b4ff60d99b0a5c461cf26ec28fd518a2c91f3cc383bcdf7c895dfa16efbe620749d2342c3d25e3f03b02beb04d96c305d9717bc532c39f7fc633b38a46b64386fe5a0c7403c80bdda35813445c791f4742ccf2f2438936f07eaaecc2241f3627350f602d89513282c87b22db36ecabeb877a48d7408e2463251bfc5b1249886ca06ac5d5286206742cd464015771e7672a11d3e0b432e66c5c1f78b19bc5d8cba2e4a3e78b6ad626430c3d435899605ead1c3aab1927fb60861dc8622b2495c8cf1580f10cec501dad8b350d94d385168301c3a2e9dde1e425af81f93ae64df88765f37e3756d2cebec9d1eca6a0e4334e6b254490b5286bdd3d3bc3657b7fbf5e6e71eb954afcbe0940aa5d08920c3951a0d62cb85e4d6bff5f3c7d15649991d68762c5a1292c601fa814db25274bad5f5b3ca7db29bf691e7e2a62d5223a2462596c98d581e0596438a7e3a6c140e3a9e2ef6243b7fcf7bd228c312f44bfcb944ce5d1bce5c70e79aada02e8008a90d3d064c8bc79847c4de4b8448e4cb91beeea650cd1b53f03c25731b5735567195fcc13679ffef47b632d55396c9ab479c4ba70a69e80c6bdc0c63587d3408501c01e91ab58a8bb897f74e97c54cf1089d8258f4b7dc8dca107806bd6825262de874056208127480b0543cb79d14a7bb07bc427481a0e0f62091e2b3dfaeb6ef427e9e753a3cb3894972291de6cad4482320ebf38ddb0dd6547e81a3ac7ac28072473bbb13b24fb9aa799c306815819639d7dddaa4361a51f3686bf3952f51c7c0f6649c5b1c50fa1a901e58eb9eb58f9108a08f8e5911514776260d63766cac74b3a280d921bf33e3df36fd360c781a72dcba7c13ebf9bd96d13c57def61a17d5a87bcf566aa34c4b8f6c871208d21f267bb507fb95db7c29a0353bcd5863f02cfa79f19a9f042c9bc8485f473acc87f30c199a0dfebe78480c971ff9434f1fc1d4244f6d67eabd1ab153eb9d496d3822b76c9c12ceaa983b3dec6d2b60e78ddc5c034f976a5ee612731494dcdebe1bfaa63875d3afa8c4495abb8c29573220c5ba9e5adf51678fc93513c2cba0c518c5fe048c1547bee4bb8b8de4bbcf38c1c3177dd90ec40ea08820d9de33388c18c9ea594ba33ef7e1d9fae9ddab700259209b2932ec6a5a02975ced4edc4d1b015090be19443d58a1ebcc57dfc0e397ce226d29cf41ec539b3e10d77c8e8878bda018bb5ebfeceb0d392c5f52c1d0000a12b60516d5f10154c56520ce1191ad3201abd883ddf2b70d0b408a9e77de43f3389d467170226d1673824fae2c0fc24abd719eee66f8c48aa8305f2baab66a73db4b7347d9279ec7928fec83a9aabdeb1b91940822a51b6a5925676221007c7144e714ffd9a79c5068b680b54e0ba8ff62334339d8a2c397664728a9a66382d4bc9ab103384b709a3e1d92ace4da8a6ddb8131ea5296c4f717bd2c69ff878386898cd3babeba218c5becaacf32be6c1dcea0e881562a2774b3b0fb0bf515876ef3e4018c329cb70d094c5088026055f782bbf068ad06f3f584471bf550b5977444cbc4e15e9b3b078e650d3f1a684de341f8cf051fd13061d0ab1691d80eb980c268a321085db461335e685a437d5dc9517f0fc27333e6a2e003744655c9f77ab7e426b4f98a2a03405fea4245478b91fb79370673d61e9ffc78bb7b8e8d594a6966d503f9cba5d5fd92195fe870e123870ed038e55fe0406c32759a4c03e6d921173974d0c82ebeb11d8019f49d67673d6561c29279326d7758290a57d3a60d261ed9704528cca9a628a4d93078244665a7720b42ca1e0e6612603377a4a1cfc2a43d602193887b22dc0f0565a920a646fb8c7bbcfaab0b818aa17d741ee0083bd1eeaa2cb3691d6e6048075bd86371298a367acab2e14c10e5745015ea6a9edacc73b82e2d7777d2ddd745daacf68d567cf870329ac9ba5b4e611423b0477be7be54f0efacba71957b4529aacde0e415f85ac5bd596a3baaebf13167178085aace1abc36d63bf40161181992e4295cae26e5e13398cdb844e4ab0fa6c81ca66a254c83cd5301e65cb8db7f5c99dadf682f202d5cfef81a72621816ab6b23c571ea72ac7acc1431efa713c2ce93f9548d3b930f0034f5477c8dbeaf3da79ec9054615a106e97dbb02574a4ab17b91a26371c7f0e6e1cc29aa8c27402324949c6f61bcc93951436eddf0077fccf8a7b333fa4339d7ae83a74388db33268b0d25f762ef8cdaad6e30c799d3c9e9b3456e44fe8f509b4224a891a860ee0e84114ce4723652b3a407eb0a7a3590ce5372bbe0a4349ffa47b616da1540dba3b6a9f980b81a838adf1486ecbcb53c448137824d14b98cbc6242d867f60360accadc14115d22872805a0e9b687db3513e59babd477a681a83dcfd680742fe7f367b385e088d7c755bfb0fcaf0230e30326a61fbdf584e5878065f86db74ed73e3634343562bfa9d8b54ea721563bafdced60c450b5da2021d30c2675e6e79856df690a581364967b8e81d252aa84ff65e1d283d5e0309a3edccd48e129839203095aed90c24ef704f352658b27943c67ab0345939d0fbaa646af46f9aaa92d0c5c0ec6269703323c8bc74814f5f2cfabf2fbf0d315fdea20b7bb08058ee1d13b828d7e62bb0db1ebffeb63353b261ef65fc36ddd6f849276d7f8764d00b4e65620dffb8c56f4dad9f6c39e3622b993139a62a5f9d42c186e506e791926a8d426e10d27ec8f3e17cd1959e25ed13295c84ae07f6f6c7ce5d1c725f7b0284703736a1de9ca8f75cf9110b415f770198bdf1746e2865efc6166e726d95b2f19db05661a286d7e2069eb82dc214729f7df1eab9bb887d334f4f75578086263a5c5a37b09ce1e83c84fa417daec972253f84eabe7e8baf2ad074abc236b0deb73271751f4c225c6f4e88478b5602e83b53e37c2325a67e4ee0029c230e9a3ef0b6a2791e2ecca702c9c524d75645675a519a09685f6d6d07f495a0fa66c6e99f6f79ce3dc3455a9f9d3d83d23df5520acf152cfe7a44fdfe948a54c8ddbb40fbb353deee9820d98e1f5dcf1c5bb74ab512e1616614c1939b367d421ed1dbe79e28bd45b11be3b666e6a271166dffb3e1d38b213fad67d05650dad35cf1cd400f36327d15cd0273a289b81440b3332039778ee6dba2ac36c88a1fa313abf3ecc772400f9d3a0193d96eeb132be9f601f475494cca9303395a38d81bc37ee4304f635257b7d17599740cc8184860bcfbdb5356adad0d114a83e380b7fcd912cd0f6005efe631b2e6fae9eb7e26c5fc5036a843a3c36f3b0cfe10a5f220491415901ec752a8b95e2ed69ca1cf376838b19eda7ca9de37f4d30156b474ce4d4cac79e6130a9ff6ebb3bf8ba7860ae5f6928c608e2a3e05e34f361c389a576430f4256c75920c78c027ee3d493d01cdca6587e0d4cf63476ad414e7aeed6c1c658f1af87b63ae9d9fee1b38234ecc7e08cd09c20cf3fe7b1ff4263f83e87cd46ecfc3307109d6f3cf989ef2b255cb75461b9a8a8322602f6741d28a6415fa3a9148c6ab02ef1609c39a11f362cc7f4216e3a2a0d3e528c2c52fb25eabe074ad918c9dbeadadfc5e3074fcb0d12d6872dfb7cabb6bb6c8d3de203e32d7f27cabc40da0e1eda0ea5f8abbb7c179e30776250a7b30d711b0e106c5ee9d84a662c3cd3e78bb2f72808c36d0fb9bc9a7dcca7b4e2c8792708158d3833bf51e86c77401b1adb10f9d2f72c95700b64cc678ee371557462a7dbad9c8dabee0221e2b3af5e99859ea8b6781b6a08f977fe94c600cd293e30b73bdb25b5eefd51bc70e973e58c11c6cc7c967835ff0b5df6ac7ce51186ae4c20d0a910f62374a883bd2073f81c07ef2ccc562b3e7dc97f7d58b67a84934d1ca9431e459972dc6e3c726097df70f080914cc21ccda9bc435a407ea77079a2091c3c42ade504bb0bb036b1c7e1b254e3c3a7e1342aab6b12570bdb541b5f367c40621e2e24019ce7a7b21ceb4707b97f8a83bb599dac5e553a61d669ce6e8fdbdc5eb9b19c91046ae98ea8eb5a99a9bcae8959746dd41e72ccec75ced1ce378fb9d71c1f97da7dfc3d715eaf5f90ab02f660c26ee34a32d3d551c26c6ca6b6019f764d5e5b078e056c034420a11448b92bb0fe2d473722de1d3bc529e71e929855e35658303ec0ed3fed6524674b06491523169be1c277fd6b5085ee896055bba5c53ef360a7991c7bd7c6a4f860701b7c5f119ff814b89788380aa49c9186d455c50e19326ca3faeb6871899d790b95280cf720d5546d133d9c5c3166dcae4a2e8acdb1edb266f056496db99ebf6120e1d3d108c1ab1fdb5024847f30675485f8bd +MD = e95ad1a226d38d32f7ad6eaceb80c879c0e6cd77aed2358a70df22d900cb6b73 + +Len = 91312 +Msg = 3bea6ab03c7273f87e96848f9ae00fefb03b64fea158808f7e51262a408c3210b9e3297aca011422d70f8f0478911d66718abe16e5e7c4f3c61ae2ae900686d2371b68025dc26382c9fb85fa15446276a6beadb0e28b09929c7a1cf7d3e6e5b29ddb50d15e7b08233da08df7d9c38627371d5855000bf775e9b7fd8b72f5f9b6d36b096e33f5ab0a1c48d0852cd532810df0e88ca73137a3931aacf4d3fb67e8c113ba6146f8f3414c39752b76410e8d0e7e84de3fc3712484eb51ba60c0da50501b8c33fe4c88cfb7bba5721fd0c152231155d2308a4c01a2721663800bf8f566caa66bc2b813bc431888e08f4af4d835ef83f0e24e7141d7f721799aa569dfec693091fc053c10da9645ff2e774e282a6135c0bdd788ec0ac19a841857d616cb40542e13fbaad4637f0557651e7849ecaf93cb2aec380b2319aa0a61e7e7a3e99738c96f620610c619ef6e9a0919436121c6988f5729a409477995dd1d438d30b604ea7802f7caebad2cce36feda1f73fff6af55de04c2a6932eacf4c393dc87e4e11996a3260cba82e3ffa2c663e409904a99e54a716ae144f1d80e9f7e98d56bf7df310c3add1be23d8745295b9a0a1debdda56217a6a2a4ec9f937badca04916dc3b106dc46f61362f086ee6a4a60ee0103fff09f7dd1f9448ceb1dc77afb9f6b4e7e59b44d335e79c2cfdf39fbf24bb3945abab0f8578c24247e4d75aea2dc1b0600cd69fdba0baa8387c270b5a87c29171e8af31d1aa5b2f1b5d55f70e192a3759f29a45b73621fbd1560b7806ac88c14b22610f6038c167af67c2cc7a0072b23c4370c7146abfdf7e381b465207904138056ae8bfa887947aa0985bcc785dc97d5bd4a461c2d6fba58ec126bb2d5b89defe475e2e8e203e13a4511553e52dd593c8405e2db319b8ddc6b779b0825d13967960f05b3e3dbcf0cf8799cedb657f15f54e64e6dffa9f8d7c48cfb0bb07670503621fc45d02a998ae96499bdfb72e8a8f59591b8dfc283b1c0f896a1c0d0c9138a56cd84f417c81be27b53946755c47e2eb9b3a6190eb7d3276371b39b07cc165b53825a96cbe326a966d25c44291048c8fabd1ef4b41ba3c177962a8a4201c270c323aefd6d721508cc1efbd81551708c02b607b9dc388a56d90cecd5a9f17f934cb6677226fd4fc455405b6c42115d3f76a64bb1b094f1ad34dbe3c46523b68a96456f3d1e0d3ca8aa3f6247d8d777ac0195d12155b93e8f2e0cf59f9e1fcd1e4ad7ada67c29447b7323fab3fe2c269a498c8154f62fdbc46fa50cad7b6e2e17107509f569dacf0457f40af6dc97d2d0f6924391b97c2e14a0b10f3725973f3d8f266b710ca7450cffbb79599ba0e317b1b0ff1fc62aa1476935e685c4226a5870f2bb638e180e5b1380312463cfc13722ed9d4746c19a24713b79df7f98162f5ae1e11316b592b93a49199f5badd4f8f051055161c7837461cab08d7e80aa8bf6fcc6c9cd073aee1c201912acc18522c3e420853ec6c3ffe0eb73d6ea629034ec4a50cdda956cc1620c19c47d933a7c45afd42a0645c28d97a5aa04ebc62ff2e3d3686666e791fcb41601fef7ac5ccf1cb90a8ae0cde8e62e003d5da835ef8d84a0f7de99861265b944b908429354e3f00aabebf5e59dd14c04142a4a3738cc76b8e37b9af955c51aa02a2a85d089806aab9d966d15491899ba17b2f85272786124168692c8c4e37f323aace9ec626e31a3cad36fe55481bf292f3fdb100559efea7646a87cc6898e01d2d5956e4974eefa18ea23de26d5635942171bf85a37c614ed05059cc27df215dbeeb1dea55c49b97122b28727db30533983df92d7da8ea96209d0b0228851763b3f67c5ddece9e7bcc44468c05dcb1efdcb4f67e50af0b2bc9c32414d72542ddc10ddaa5bed778ce118000a5721dfc2753794feed8e9336e50453d6ab03a240a4a93b1586269ab1c7660ff456f11248880fd6df552f213dc4895af7a403e4ba7d51aa8ec661fb5c58f699ae23930cb7209a3c9386b53fd04175702ca039c1a04e52529e836442987b0fc5c128cf76172421efa1e9e897f5440ebcfe076ee2fcfff25acc25f8166a18fbbbb4cb6ff8717bec1791e58fd1b6b59e67f4416aeed5777aeaa114e51fdc1800a40f763939cc0f43daece174951b7c6b9897b6f58e34a0322ca4b9f306f56167a85b90f7e230c76e6339475d892b82be786dcfd76a206161465d7aea73bddc78ee1f816f9aa58bb4d8007e1358eeadde2f00f2d729a1a2506054c0910d3d717a9fe3b06a0a34435f62caee5ea86ce615e4d888bf73bf4b48a312f4b17d7c09b7e23087afdae4d7b5281dff0522ae16a9bf7bfa55f283458f361e7c126a828a75e08c6d08b1be30ff538419d26dbb23e3e973ae624bf4766d4200c27c7d58defdc082ca3b37c834840a84a48b319bf70b8a480ead291bc72cef412cb75e05eb97ab970711150ccc8e76a708f918577869c980810032fe20136468248ab4919b8ac9558a52f392e163be74ade4c8f69044cfa56e210ea76a69cafd11bf2805d4204143bcc67860594c0c73fc14e98026e6c43e3fd9661e8b7748885b1c6168809f3ce905344d801e91852d5b5024fe2195cfd45bf0e2696d850792696a08c28650e1d0ce661afa167a5329336121776b9a18ee2a2e2992f6da2fa2a570c41cce7b597f7d2286d42b4f9eefed1087f3eb3dc814145be4a110c0e74176f83e7d4068cb7e7c31391844578d08ef23fe7a89c507cf813eba9ca27d57f644c81dedc45e6056315bdcce48db49fba36230152d7cfca5d9a0548d945aa84978aa0a7442a7408e066717fc2123fa507097c2cbbfa8d0208449597bce9f02c27863ad1ba28992ae611f91acb677c690bd885fa52792aac8ea01726f37948ceaadbeade9cc4d7f3fac49f3e5ef1fd842f4feada94d82b32474904770b9816f487f82b3e7a83a2ec84eaee4b0b46256ee7cc154e11abf13bc88bd7f863badd2655776661b1f9ac7d1af160d14ed8a691dbd99fd557493f1189051c3b9a661dec79b646f8f17b374e23749151982dd38551f4e500c454475c1f215ba12e0e5bbf8b512754b79cf5b844e0ea6c75ba4ec210aa7f40e731bc93e18ce0d98d28190800b4821552e34a43e5c2e65276126ac06e66e9263e760121768476354647d85e507d01bb71d2a7899c972fc407aada18e1b69d1148a5b7bd54c47654c7f20c4b10f710a792dfbff1cfd9f131a8f7ff24011615a27435429ff2b95bb8a09b3726b8df296a148ed604f618051be89e5c8a4301dd4a7f992471d6cfa0c16ec7eba9ce81c6839554ac4ba5bdc5f334e274b43e167e899965efbb7793e00f60ec9c2cb88b728483b5852e6547ae481c88da2a48a053e0701006d56b929403459dcb280d58b7ed7e460335ab52389b1dd5ff65095c07df822c0c781948274d8b3feb344375f10ed37a98e9ee49ff6ca77e46ecd68604d75e1e52ec1721344e80679ed9d16fc89921c7d8c3b4bb6d2d47d6533a56dad588526b9cc9dbba2566e39938716da2b8fce7b2255b85030c6d8d72a6c5f0a6f4330d982c99dd7f855713495a934ebb2caaa3ce1109d5dd479dc6d7b4284a96db97ee2894d492fdde7fadfc77d81b159e42d4802e573d96b94eb27a0dd9bb170607829167f2a2919b4102270288495ea826085cdfdc02cbdbe0aede0642c8a40e025977187c72e7365bbe5d9d5c5fd2b4f49dc8a800fbd92a043a78500c09ba5e28e12e18ea8a7b4a203104baacd52e6f0f2358096e5f6b2e19d3dd5d8de4e670eb983afbc56faa412f18b0ccf23fde1106379f865cc3ee52a219719150e0a4d0bb0d3243858910b5e8c3e646d4f64e555a38e3a184bfdf223d59d98ded83820827be8862b36d2b12edd119dacdaf1b967b95e8ed5eb9ca273c3389c5cc53ea81a20ac1dbc79275e28eaedfeb34b0b27efb0d03cc43281bdc3f34e6bb65c85ad7ca9063314a8f7d9f7bdb8ceab2a19f5958dcb8b0faa150bba6bc84e152575f74f1ddd0e5a4ba9eb415e5c56bb0085ec005a39c5dbdbc05301358f8da1a9764d3c851bf7b7eba75cafd3bfde0c53b6d4d91f0130534ceb5f3f598a70816ff179ebe8a736530f58f4e826cbadc6ae1475c7e20b149c85fcf51ddda03fde004c41034e6913553f247a955f660d1096079673ad3fbbe10e5dde43cbbb41dfe2f16e2dc049d6e50373b85d847a441295f7018487856c487074e2582ac2bfad9f46c810442fc62de4ad74e99fee9bf5324c7ca379c56ef932abc805039c016fbfb51655e5032c52693a77e0b7aa5ae1f66ed07889e70a1ddc695af15d334f4ec8a522a3a8ad507f1b8389ebd596c9fd67c6c5aac1d388dcf6155ec4406ef172447eb2a397157ada80ee71b2009a30720fba22e22971305d09199d28b5352e02baa78ffcb924f28b22e4f9dc409ed66776b3b1c7c8aa49c99cdcdfc3c2705027b38a815716c0ffbb89cee7129d8a0405221a3802a6641d4738c6eb3d72079d08b68e4f5cb7d2eb923b1204fb204602749d55803acb88f200643f8b3fcae35ece4b1bc3b2a343fc37c21a1840d0ba18db6fce511840ff111ca8af8571d4eadaa0fa99a302e2f97bd3a64ceb88b6cf8e621eeb72440cafc2c28c7ea27a97055ba74c70b8f37ddeb08d6d12447cd86bab333416ad6537824d1a9914aa031b1d270ac809ca2e7bd9e28ea1d3edc34077b87339b6c823ca5ff94d56da65b3691887f2f7caa15ae4d15afdc9f6ac06f6dcfd4db3328c28cc2d0f834c369b3388e0c3875f1c0420c1b061036ee54aed0080c2e72cf4c11945d6d7e30191132a805b23f08a68bc28195d3dc817078f1f684d4f692b632fa13d419996ff5496415a73ef5600149219f4c036734cc44245362aebfc39e79d66bd569dc4cee5ec201d0f6ee0478a4b9c5ac1962d96842d0670fee0c8dde8d510ccfd2a93f4aedd6ed116e9b7e930b2585448a31d7baf160b20b374f49fce9d48731e8a2efb1531d37e72a8026e708ef6e93da76c85adc6fc4d30f0a80702beb6b9a103bb6b84aff92d0af3ea5cb1a61d2288e8413ce70580005d9c0e9eea0001a66ede63ca622085e6c612973d5ac3760511afc527c39a3f4022bf4bebef2ad1426e634da2174c22af8e4c3098d5ada89dc1431fceaa4fe21567a28a767906d09687d9a27a0bfb76924aebdef6892c5cef7eee78b905ea1187148ef1c8f15aa4a9a28a89dba6f52996e235c8dede083a0531f6f8713a34739f11c9a868bdeff583a8bc2b4c5001e4c33e7317d83c08e9e6c3a4c67db3f5b164469bd8de478d6c2d7fb8af5571e94f2247ecf26c0bf6129a1a400b65d6f572df9c4ea9b3f6fbb0ae11c63e7e717311bae3ea8223b3985c2a2012eeb20dfb5f16f929426e31036a0e442d0050b868d294fbb3ee849cb6709dbb6198ebbfd120134773cc97626b425602371c52ae8f3cb678905f182f1af5fbd5773198533d5cde6c756eb7f0fcdf8d322abb0dbbb2f52a40c9fd65d28b944c559ae0413308bb7d52775155437eeabbbc4f04074897a5f83da6eff5eed0f5992313cd6fc6fae7fadfc09cf9c3b90ae887ee20cabb07f526556f5e50ecb2bfe9272a21a974da855cfd9a782bd875e81d7d4f36de7eca8cbe726b71fc32f99b4549260478a57240ac934b0d74ea792c6285b96fc9f7a814c77be351832a6d30b471519d63c188bdf1881c825b618e7dbd8776f3159069324a581f256d3bd5273e87f115f230e5a733c6550069a57c83386ccce949b0d4904ef1671640ccfb27eb734f93ad5b51a47b343eae241e0be7da1a0479eebeb3d6db2e034c8647a5d9c41db3401da8935cd0ba1fb516340251ab7a65cd8b24ccacf9f73aeec6139ce4d06d6444c98075793a403f3cc7502b68b474390aa849e7b8b13456258998a8f2184cacc6394cbda0c1aee76cbed84cd5fcf1c65bce95cea50acd9d18563e90a8a2a0d1eef672347b6eec5f6d83362e408bd756e6837048190daa58f0b56d1eb078531ce5875ca2b248e3ef669ed0994f6a102fd352421cbcc1b3ced42e8d18b2a24bd5d37470cfed5779df7f981055ada082994bc07313382ed149ed4a064755267244e0461882d3a49776e2f75d29003517de76576bf5325cea0f62904073420eaeb13284bb850c3626fdb4461edef132b5457b9e938a5554e7695c89a4642162e963f4b6c09e41160cbc200abd3c279e4615821d5199461db19f03bb98e199280aa34c6591961a4a33fb4bcda10b4b81b197b55d0eecb0bf2ef97eb085b4526af9b9621895343edc81026016321304e4de133ae53349394348bff6f0d4a3f52f9eed5f57344256d3e018856ed81cfbceb5d0393d267989b0e6389201eb772a80e1866baad68609383787e25cfbedd7471e18dbee5144490ef0ad7b6d34f79864aacead9ae3ca00126d95a168034f41570131477f1b7121654d66d8bc15ede8e3e10b4eaec3d4e2696c8be71a580ae1074664a678ebcab8bee7abd274f81fc1056e86756fdf6c58461bb1dffb62e65e5ed5f920622b15b720a5c4911f4457ccd339874b639d5c0ab0624eae928aab61649638dcc4421bc5946ff83c44615bb1542a56f814666b9faf29ab7f67362091227269032698a48b212d91fc6cb7f317902a3aa30aa360c04b58117803cf0e979f4fd3bc109578b1cfc7d5f81eaee9a6901f7d75cbba04148dd8c6c1edbe3d1ae417bf300ba15edea6260d59e2ae04075bf36595e1151f447c8f1283ad6a75c3f7b075879e241fbaaf308046401f0be2f98c3b2bd41a79f720663fe6cc3a7e3ae2043de8528683eef1ce78e8c169c7de73d446612a33d9d682459411d1981f26adf95f7bae2f522274e93b66ecf400a4d0b1d05d6dc70888a915582d44eb222f5e79226a3a8754fd416712e94a287ddc180d1f47243dcfb69dbcd461ae9a4dfeff6bd0da7ef751285f324599616e082d54cf7c48d8fff408672450d6960f693b97b6aff503e5104bd6301c9dbc2c673f8bdf2f8810743f250e3313b384b13d8e2f4408e350ba5a0daf4bdf1ee0cb63bbc525802e54047ab69ad3672100e8939dcefc22cceddff716f169d54357b4c4490a88b7622c176b6214eb9248931c31137cc647d763baaf0fa4744735a84e529063f31b4e2115dcd28363dd4fc4b5e096418abd2c39b54aa0d1537d1b5b00d539d74bf517ba6793aeef23905f1c1b68ce2630cdf4f7378f707feebf1ef83414eb6f798de88073589d6112f39f22b7916532a1bf5726a74728b62d55660851d84f32652be7faa2f547df1a4e385eef23006ec3db7c4d6f3a6f7ef8861a13bfe90d28f7173cb05c30557422e851582ce54ae07f698cf4f630eee0379c639fe50fcc591898102a0ad36f25130a1399d7a0e892beb0aea3a4f14de3d2dd68362d1234ceaef88bf112a43cfcd3fca6a8561c858c66f90be3e1443390b192525ffeb9ee8ea27dd48cde6c65004b06310d1321c7d4608cca3b15f348edbd0248a3c0cda2a1dd701483d4f291396370dc517477567495b11534a8c43505dc777388dc17f7104619725f5e0069b00481d1fbe3e5db74ecb011540380a2ddf737fa98b85c96e2c4bf17a6e35c956c14823593c735feda4cd0e8268cef367ff78b065bbd67271f41ab2ae3cbcfbc757cbb33a1882d66b09f5ac22facd89af2c2bbbf5853ff51cfa426d49b7d2186d42574f0ae8e96bcfecc96c6f9cb04763e420f4c17e3ebbcfbd5763d58631a9d90f6f597414037a7cabbcc1d0b523c716c5dcfd620d3f411abbbe38ca1e482a6b1d6854ee308dad01e5444eeeda7463382fd4284fc8de2f8e540b7eaff68204c40af6e3d1b4d45de017f45622834ea658b09b17f32777d18b34b387ef957bd344468f68e7178417a7c2419a14360f2af8c6964ee4afb8c1a1cc5b071171a2109c5e966666def964c952b06d2c69224b88f05a3facc80d9a5299465eae1171471cc1a06f0981b0cfb567c551e39344a299bc5b6cb416e2a62e0a1a012e0b75e145fe31d5179646b30c7ff4eac25ad2aa9b991e488312c48f94bd4a8109b62c69c892cf5b499337a92ef9d38a512658de1f051775a2224fb117215c70d9a8116ae4fddd43f7eee02cad63c5d3086c43a7848edb5689ebd0a525b4d4331667a14f5bbde031ab2ffcb7f84c503760b32fb17c94de7db2c5f3f66106265a386b78916d417ca6ebdcc9d5a0221739e281796667c5954da557260f2993e758c829e3cbca270706325bf40035736f5d166dbd40c68fa468e9f5e36a1fcc7bb13e399f78d2ed23f20743e7b218beed0374be67db29516031e948c891843e77e61300f80317f237dce31b3185ca7304ef761a059ff0c96d4b3bc6221027685089df168a0519d4d7394e585dd5eb1e3b53a30722f9cd46301759e49c5059b899ff0af0b1f959136699b171c93ccb4f14e273fc2c930f563d28bc2aa3fc9bcda8c82f062c5a462c8a60a4fe00251b54161e716f9ed6478808f1eb0eb55f7e062177a3fd45a2718e9740a1639f193bebb36a13d8064e064a17f55f176d0371008870121c9a5c5bc8319c3f28f293ad647147e3dbdf64bc1aeeb590cb1773053b4263e20a96f27557dde5c6e4a73ef06cd45a69c1a6a4e988e1b518906148bb14e3a5ac3dd80f4ebbf0bfe0fd2955a55350f40e5fe8a90f02b5766f1dc6def32bf0c7c92cba0d58731e8d05f8f5722cb67bb749dd11cbad16ce7c0ca9a4c05dfede4cd16dc97722fbbbdfbe5ea83ef704c906c4efae973433912869faa7775bfc10a75d6782c72ee45d1a62949df6b4dcad84d7fe3b9644f7a22e1f573b6e6da23c59b5b08297ec9b76dfab415353c69cad942b9f35434fc175df8565dd30139fc5e672bf2543dcaf9d91f0db74b0acc35dd708392818c53f90cf449d0946de3321d02d0a07558f8f35d3cbc95e97e7ff12a0265280a145a0676fc5734c3d2e0af4a94d27856765b8e41794a19d93f89e8081ee71db5731b27e53906f126da39592d44b7e4be40fcb0ccff3eaae2f6f200c1ed92da4b529e459fd2e16f862bf51a0e3b094b745de24247f620afcb4bc3239c96edc59358e946edf06d17aa6d1cd934a14f154176152dfa8679925de50338e0418147572e061417bb344f5c49b77ee89d12a9ed339e572dd5cfba606dba27d618d4c95d7bfd95655abd806266cdf07257d971403b84aa280ead8f9c8af0d8c64070b16ee8d4b31ff69013856e66191af82cd40237cf0d32579879d8e5ae32f7e4dd68521d95548cb6366e8d068ae028a8933aface886795d81ae0de26fb1fb32aa157d1c14862f5c336fb42d8422de38e970bf1a9b6a297bbba2c74f4e087403a46e5b37cf3c4a24418216c8c95e894d3bfb0af7061a5812501c563f76450e73d5479bff8a062db626547d2ca8cfa839e948ffcca91589b40751472d88f63f05b517dbeda5624e845a4d73d392e49f8189d11a05f4fa32c34a07f6b3f69a8a3bbc75879cd1ef210145d38758183be3b69629e62d8a26e7e290a6f14d3fb0748863d72b577ffb49df818d2424b934193b86b9f0bdd93a1d746394d373d4c6926e33c333d800152d5185e0d6c3f67bb4a2d417a6315292480b3b77f9a2564b486fb4b03d8912cb4019db651ba040612a6f26b9932296cdfc1990c6f06314cd2b0f6f24a4d5289c368aea906f5437830f02c716240c064bbe120be83420c0ba9ecfbb970656a1f655474be94e5a3c6fb6f06dc3f55831a9e2a6f5725185ca923823229dde882f6830b167d6352cdf75d6da63297381a9572e2af5fbc4eca2f27b9c4c9f99e411706d6bd6edb0468133d3034fed2b22cdd1d52075cb0adfda49cdbd9212d4e5089d4fd911a65c21d238201d9c5578b61fb89c2a0d868fd9e106c2e98badfc25654d7c8b9086756942d1628bc11908b63f69c79a15a4e06547c7efb2a1b79c0fc81f57f5ec04b86743ce0ed0769e479d7d640c1336bc98fc8efba89b7cc6111ea171869a7cb771b6555c898df56bb1f68a45ce07e924162a17108226656017dc71e27cfbdb055dd1182b6706e5f7e43bc67d71fa9571e45880a500c5f40bfcb3b9f0af9c7f74b931dca92bedc0c93ae7b279bc6dd42c90125c37a90cb1205c5f0a0a92fee29c307343644ca51e563284eec8f1d41dca85e1fa36ef6d2553a318b2cecb95acd24fffcccb5dcf4735679ddbf9b6cfeac24231fb215869b90c5d8b748bbde326bd6441d96cb3ced3dd568cfa7a7fa3b3aa61accf955884f4b10821afefee89f8b419e409c6f3265cb46beccad9b10210f9409cf7f1743150f82f65c559d1dc8b6cdd40de58a0584a612437ed85ff6d8b257b9cf4d4400166283fe265680c6d673e2b02b7902fe7155a2bf8a30dcf487ab58f27569c20779cf7b6020078f2af04be8f84360c16555605dfa9bbdf8525683fe7b69dd7ba067dbd2e5f172b3933fc54775fca2ad825750aabb57889c576ec1b01e52b155130810f155419fd247ea6967efff48b09ca0acf3cc6698b14cf7edd8a1d8eb3aa783f53e78ba94d58f1abfb02ef35ab1fc57fc9ff371f51d791890ddcda49511a501122216025ba5b3f7508bf981de97eba5c916f920a8ca26fa31276a5eb6c255a9f006f6c1fc28fba8a35e1951de4cafb299bfa61ab89e9bc5581e40ae5734ffa41650e1a07d48af564092570a61b790a5f704c1082d831fa08d2a163a7f51eb190c6a9f46e8ec1628b090795470c0d8a6684c14911060fcb359b3b6ad360061315bbaf85d44fc79477abf47d9124fcddf7600655e681c78274321e6ad8429a8148aaab48a9a5f20da26868b3e4f4cb975a8867d163da1dc24d4dc6fe272b409e921a09a77f1ff530a3d4f0b2e2f9fe2938647246297d670d1924c19f6078accd8a90673cc51c35aff4681904fbb31915f99ab21ea7fa37b5707d9ab8e4c91390ba9430730c3937ce0c983e249fae80d01681b3e55fcf047debbecef5547b297a7a9bf1e4c4d5703d54ebfc9c5f5ada0a27cfd414c17a51a8d35ebabf002d630d731e280c8faf735085e9c0d6bb269906a5bbaf376d7ab3d8cfd40a80a85e34ac1ca14f44bcf5c5b9e808275e23b0226808fbb1c7c44e8f8049b51ae49d6c32e8dfbbd447dd66cbcc23dd9cbd39862aa0da06784056645921d97888555ff5c24644d4536081610a29a1c0ad5e5cf6f64381425f2ba46aa55fe7a4cf4d70898736e471493919731534ea57b5cc1ea139b2a755f3042eb0087d0cc04c477f75d65d2719222c362b518076095270ef034990a4a7c04475d2d71ba131abddcd69540b95328ad437e8639edd6c00075eabca4011ce4376ea51b5be5d9f5a7afac274d4a763cfabcf38afe278e65ad9edf92053772fe9161cab08c78a5fd4a9782fbd4ae6138d3d4caabafde10eaf730d79e04d3d434d9c8d4d64e9c009a6e3d5ff91d0c9c82fe330acf9339e5b9a6d4dbc8e8fecaedd94acc74e7797134da484b096f8db0844382bbe0f36194388231f1f8fbdfdd925790b972a036803357614f13145924a46c69e5c5177da5d152f02416839f94891c42a3b7c1fcb5ffad3071ff5297804c3f8f916647b6a1ebe0b8790ac965783bf007922d92f29900a45cbbb5726f4de3869dc7abcb340fedf232fabc155a10109a878fbb5b41b39f038e351dbb0a11d1073a8d7cea1e77415105ae15afa5e471e46ba14963108b42946de6207790577d8b0fedc1ee9c614ec5da9dfbde707cc4945bd1c0f388aa531da2d6a4ec29a451d9c4ee621dd8567c1659d057ebe0617273fe260653d1973867d40d9264fb82b4bb009847c0f7dd330b294e121e1f1ae449fda804cb12da5b3aac94d32531780ef76bf4591e247fdb6df31f12bf552f81deff5fa2a373fc225ed2724d77f10fc856ae097e8185c3dc045e4c4116a928b0f9ad54c9221d84f79aedafeaa463cd48a071e09f2f42319f9813dc866b448edb64af8e5f9138fa41b7a55491f3b13df79d5b7fa57184518af1b9d7c8054ee969e5ac154d38ebe7677ea4672aab00e43d1415f0768f73ac06d6f946f12deebfc2454df27c5f5fd2d3b48ff39c157b4c83cf473bfcd136c97c117b30e82b4c9a4e4b392cd34ebc43ec2411fdd17947fc2f9498661d7ff6305268e69d9547910174c118cb394c29c21a95d08fb01f8f7cab2cb07bc3e0da6af2a4e395e0c9e57d9f6d94d898a3ced8c5ce74b0214e79555d5f3881d53d0bfec28d1921b1f86f9534195359d799d40c5598a6690c4f2d0eaff4d8813bdeb0742cea3148f01d58d19c8bfd59de7763e732bb0ec1596bd42f08b53782dd0bf2559685d2138580c7b93f8c3bdd9585a2f0c5ff53c0f1e79640cf68fe8ca30cf9286a24a5885869e5d685e3b5efe40abaaf742c1d6eba0e9aca6ed6d4a77528ec750f9051b25220daafd75a1296b350d3aca80916d49d2709554cc762dc3ba9f3c5ed917f9659eccdcc9bb7fadbea9d1370ca5fe4f982790a67d1035032ddd5389e6ceed73e5617e6b63bc317c4713aa58240f62fe5524dc68a655145b243f5e08bf47100b132e74ff41d460e5c306faf6a7496a0a1f3eb6545707ae96355501611ede0a3f7d3a52d0eab088aa80f835ab1cc07de344f9b0e205a47e54dfc3000babf0467192398ab8d4bd031b2f7c0cddeb21092a64da5e9a48b7de1781edbc60dd2a5f51e090aeef86767ab81ce6c31798d7b6400d4501f586ce784eda49a91928f8bf40e6c4121d76696a11d7ed0ad0ac50efb49cee6d8c5634c77b377b589d25c7d0df136866ab3b023bb8fed346a1ac292008922ad3b71d97362d27d74d554a244e8d04e21f112add6a0de05df8f30ebce1ac8b8ee71e63725eb53a01f9ea0caa82cb29c5adf7fc579f912ac1b45d5aa8cf20f78f0a1ace32abd3dc7fd0b3f3a7182a008795c7f60d26d34cc2eb490669230654afdf449474a7e98da5745b85c6791a17ac58f9ce6aba54a4c6103e988a97bd3165b9247c94dd76cc0757393975202bdda87a15dbfca485f14fc5b6876997b60c453a22ed3fa6fc2639fbe5952f97cfc1008ba4a53f7ff780c47e396992ad9143c2d4d84cc1aefa1aa1d4e91f725a867048d00ec0afc729f1c8ac4fa59243df76631bad31c75fe127d364ac3ed9e2d059f619eca4da048db2c0c251d1f4e4e122aa712a22ad3451cc434da789c2cb5dfc7cbba6d82aa2a3524162f855171b56c71d67c7a60fc6bc7675d28366c97e5fb65127d5b13e3bfb3ecf009bc59551a0d210721e225b7191b4ffa5988c5a66763627f0e1e6613b0606ce2dd4a9dc223fe24822862e1cef721625298f30f23e31fa45a953ee502a4418d34d0b587807b46608fba82fd07ace089af0b01b2d4003515eb3c41f6774460352d0c877d56c8edbf76ffcbdf2be160ad57da39168167af9c7929b1033b38c44d16b947e90eb3fc287e1ec4f0023daab4932e23a3f4c094204e841573172775be37fe7e326ee37a82f040f6985369c588ab2f48c2f4b2ed8bb076f6aed0b97c6ed804b3c03f016fb7148ce740e80cb90fe7042fd948e5c1c4e827db1c3197e04741f36efb48b4e4ae322b214e87cf8f338fd66152b90218b33dbe4c250169a930baf2384b53a5df4f92442c2cf95a4edaeacc64930fb1fb40f963d13107d6df108a299718267b6b827c008e400554feee410fc206129970536240f3a80c878bd1fac115ca8bdf8d2f3787d1f47566a856dcc60211896382d4c27a39f2d824b55a52e23ac947794f3e0c007caf103753fa031aad1e3eb636ab5f3c2c7733546393dab38d7d25f0b897439318d89d7007c2fe334a94f73b96c082ac529fe5bf9f64d95d964fecedd023246a2cd9e5b8cc96143861db7d9aa9fb72f236d3b50e70b59907dda56317a0c8f6aa4019b0b8ab5e8f517b5b987a774579375d796de9df6e60daebe854172f6f037edd00c517ab02b5a81f7b0f830984dda351fbd3f7f27777fe478185948601910c8af6ee7ed56acf62d5a6ac5e66a2e75d99bfb0e1b3b8269a79d6be37ab64e97ccf63f1952f7f24aa254135b39685df8ebd2fcb4e2a1ab4d70a51c9a8a88253f734af9703c427fea698b57329a2170d5d45b1eee75e836bdc81596d8e854116a54242a871994ba37eb56a2e69913eb8f3baafdf5457dc91d266557191488b7cad8085ec86b8d45c5b04c82e1b6be42a77a490673c1d0e6fe042af9e5afb47cb3776de2beb28a871650e383ae639f0a91289bc4e48b9004d2f9bcebc91a55d4c6dadb62c47f1b12ac35a201c72024a7eecf39b5c1f329973e6fc1a93de4fb44775ac76b8431cd5cf9e71e99a68cedaf12c6995596990c3282eeafbeae700360477fb849787affea71dd9fc7d70a58849fb74120cd0db65b52fefd98a57c0caca9c234a91bab513fb691cbf8c31903cd0809b7a3efa1c666210921c3cd49758e30bab2e6d8433fc13a9c19c915496decce46635b78f5bb077fa5c2cc6068ec995ed1b9af58f33a1370651fa5280c056864e5dab3f389e2a3c14d372f097ac03296afcf5ef80bceaafa85341995e158c46e709449e9defbcf9878154842cfaefe7a9d5a72402d7bfc2b64fd82c969d6854d6f1699b65554ef57aee3b48707e7516d32e185cbb8b08ba58ce29d3cf60d3f7449d800038d9c87916a0900608427eff0f8fb05f53e0adddb8579b58b167b3785996f393c08112cd8221b9849f4ef0eb8681d7f473de9674fb729682e6b9f21f3c63281da2571539e7f9208bdba8b520608bf5e5c38eabc64ca78218135e7634168c89658963b7056dae2be2645ab3e7c43672f8eaf7d51dd17fc8e3e35f29ff0e9a7c351bace1783bca4453e36cd487da09b6f69121fabfb281ceabfbc3f1c84d146b53003a7cdb7ad5d2a400e4fe4acb8c29a65f1503f51836fd370692b8d6fb82bd88e1156e7651553d9e62cc1b76bf4733d2fddad9072b24bd51aad465723f6cda9c6646a191e9d4ec09b22b1254ddc33d401278623d12d577bf8f92e0e4415b2a5736d4fb746ad949ad970acb2c4e87adb947f888dff6d1914a5ed411742ad71581fac76667fbedbb51ba702e463a1bed0544613234fe9e75babfa0e06a226603e15927c9b1c497aabfc26523e9c80863ecb0bb488553c689d75900350d50925c40fcfd0b9bee5f7ebd58f2925e20d57936330fb11a1cd13769d5fbf8a6dde288668a50166da1cda014241d63ee6b0a96aa7664573b8245e637da99117df0deef1bac29d16f046a768ccdf07eded130211221c22130adacfd0a11e368dab20ff9270a8f24e840bd69ecfc73cb7979ce8434dc31f740c48de6aa22e0e5054bfc0f514b8af7227c4ee2fe58ad33068c6c26d84dbac1b5ef7108dfb4997145e22e976218223263e1a647888aa69ccc31926fc81f6467d558dfcb716f14f2e49f2bfb231860bef4974c01533966f01491c9c7cbf838d2e9245f9727fd5b5228ab7da159f44b811dc5c879270ef61526d39896a8813ce8387e79d4ca0376775a2eabf3cf53ec642594a316cbb15df54a21884428617a920c8cb6ea222c6b4bc14f3e574cde494f562b643f09c9a376c8a020391340fab9ab769d42f71d44b4a737bd37973d6c2bf6b3935ea7fed182e77ae8de31c8c3435e65b7421181099c520eb0fa79175dde4e53b9da6efaed00f1d76899499fdc1a6d818a5338fec0ea0bfba008ba142252a6345d1b266202d72cde29d3256d502420f1a0de333c73861a2614c922ddc56d467d078997e115f1e1b8b2f58bdb244bbfde8149cbe42957c7b894a5781a4e1975573f8c881d3035578c8b6544906275916fb3fdc89eeb475ad9a8048672c33d7cea8e8cc3be5a8bd8833d8d1835128cdfcdc063f211c03d1ab0d94e128e2ec1a35d7bf10e6d9cdbaac54fd4ce723a77f11f30e210e6b0225166aeebe516968c32d88f2332d2fd0d167949a130eee41e0f8e89e1ecc5c3dc4522b043c7b104887185508af794850a64c8b45e04521769814255ca4c5402543e0d65be80077f9ca88a488e245b3cb8dcd916721345dc408e621b04f93e7472864f57c5d7c10fb01e0fff9883d12b00c6d5fa4525703a8b801664f7bb29211f640f0ebe9587bcad1c3dfc0eda9c59ca69e3e53f027b39329d88b70b59be12411f75111382008f79ea3bc75af264ceff0e2c61c8710de11d2edd9ca89d +MD = a1a98ae55518fba4fe5665325e56db24e524a98b8b5d3ceb534573d0a49ee381 + +Len = 92104 +Msg = 76734dfe21469bf9ba19865690145fab2caaa11b79283186298ee4fd539f427961348acc29d5f6d75a8a3ffe1aef64d9ed87a82cd952d91ac8a2d8952d2a5619ea58dc9a72e50ebb2aaa304016b5e9c6b19c47b11c1104677bb708bc9d342eacdb884b50429d6d0bf41e6005cb8d77da409088938b8c39d50c757a58eae5539bfa6be0d6e2259a317e91d73382a0957d610c73b86eec00cc418638525d644c4d10aaa2149aa61d9391a99eb38315cb17deb80f090d58e1b4e48f4a933edaa129e4ec9af3b1487f9bf40ebc6e1615a1107d3b646eaff965f5bb3bb602d56edb9940dace59713247af7169394b83c8a0d0073e7ad09ef713f78f2f868669498103ea1b482f208dfd39ce621e3111554fbf43685a15207974222716c20943921bd1ab58105e078029a0d4a0720a09e53646fb620b277ea70edf4d967072ac72326a4b392ccd6e34544c4bcc3dbdb39fdecbf5d395ec00aa6c94c7579aa9ea114d369265a6639cd005a5fb8d883257acceb8fa64014eedaa13ab5e0247954596f49d4885860adb7dc513ab8c5a513d338e73d2bd56348fce8d8ada3f80200729af073440d2a971631bfe2571bb02ad5da76645859c852c3f609b03b54c3176f407dc1f3f9427a7a98fce2fe3b32dee52a0f71b64db2b0d251744a10db3b1dc1c8384d12ad36ec578a9eb928a4bba493901901b041c0d7aa737ef7befbd867fccac6812a8986513f7f2bd160f8a91063a53980f0a6613baed4a035a017399a82a08eeaa61eaf4d94ff1ad821a799a6d7f1d77bd21c2251720d8e806eedcd29e5e217f60fed1035ea72e21a0521ebec52de794edef372bd7686705475c0019ab917f84fd27557aeb283282366083e3586f3a59691ccd0d43ec81c4e5f4e85715eba8634a837f41c8f984390debb0f26c6b9c2df8518cb3a3d5ad8ca75d9b72259326860cbb56413d44adaced9cabd44a49987861367d063f4a74c6563f215423b281530e76e260922e33459d1b7e6f3a32b3a36d72a7ec5e745cd8ba4483e3576f3f34175d2c870ee1a06be70f31ad834e7714e4ae134e4a7bef2b9b12c80908f3ea90ee183b9ffa857b859121ca756fc46b348e91c7154986b527c151f8ad806509ce5c4e188e9e414dfd64f853ae44bd176b32c4cd27a4bd3534f4aa1cb705ee255829a7c93e423e9d3a283dd3424b6004229aee2d6ea349f7bbfbc43b0ee0b6c5951dcd58952ea4f3a4a5975318ccd6b9bf8cb8edd18d5283229f495d9c59e471edff65cc7da99ad7a3a2afda180f46beacd1c91737acff62d3a8de8a48b7a1b2c8991a2eddfd48d29fe92c702a5bd99c4f31cbb28a46791b34de2dcbfa44140e8eb191859c70d76b0040b71d36fab6da127363c7b1a4e836af08de279a46660fa71075d9a44b6f2b2e70f8ea243207005c613b5d940e733babf099a71106be3d7c7e6c33dcd63799924196dedc4cf19794c1fb7c1bcb42b3905c055245cc451f73c31e9a2c58583d927a3a02478f9e26245c4b2c2e257e26c515ca301fe0223df5a635167c1bfa9f97e58b5c4b45363573fad176b5624f1ab4e3914987897e1f6bf056afb46543480a4832f7d1b4e04ce963386198cbdc19c48d02a66610814e3b692b6ebd7f5ebf516cd6d8c226c5f4ee5e26f6bfa84eaa5dddc44ea2bd5251cfd95c5a7db1718cd619200904e10db4eab4443c1241cc56e799804925d81ab08d08917bdd42a538ff16b791812edf15452d393b7add7fa3ca8adda0d5a900f4dfbe71dac57c214a362d45781f54639e6791adfbddc68f1b6f78845a9c782da42cc2a47e1ea50e4ae2246fc6c89dc3d7b9a84a85254223463c2b1c7f618cc948dbddd370ce0693c06ac4df84634f2448a13ab5e0389a63ab9a6a4e180c2efb6856d7a6b6bfe7d93538d53dbad8b3b17a880e9914001678d2f2fec22b84a6eb8d0478c45ad7900731b31f306e0f118ff4d7ed9c2a63fd8a43aab01fc3b33cc23e4d87d6630048463a436961aaefb1e93ef49f66294b99c0872c460de58038a80499ce83da2158beda507d787562dae5e149eca0199f304325de88369bd3e1c466501374c62208969842211cd850d5ab643c9cf202470b3ba52a403fec94803fecda1f502feaa0f7fc821ef5d99feb644f377603ed2a72cf907734d3e1ab5d401ea0bac01e6368088f763cac833861382ba1437ce132ac276c2c2d988001c0f08508ab6c9974a8f2d88742e9db03824e7ee2cb04e746036cc4b3f336d37cf177a87bbcfbab05a7dc601dfa53ebe895cfd362d644064ebdc61d734e56e20537fc0f62b31659ffaeefada12a93bad0e1e2af882ce44633235c01d406a0b385dca743235964ad48055249799b5150a1afb09cbe948bafdb7d57f73ee2bb51e226a1cb28768eaec9f42ebc0f1534b6454761216cd8e14a2f13de8819ac50c1065e122fd7d23b646ac3ab8cca60e4f3a2f11cc7f8be901e172c1a3acd2a060cd7cb22f89a3414d814b9f04311430a0fa2f50914cb0f3d337c123398c225863b3fb7f7add866c011ad1f26684e874e132c9a51924d929292440b5027616477562568bcd6f82ee8171e3d7484e8f45706272a1cc9e61137425960997110b18263702797fc645534f3505b031e4752cef07deb9140ff52d44ba15937fd38d24f6c0a3cb0a683a34bac2ac1fbbed3695ad91526d97ffe1f10b6063d525342908578daef305cbddfd64a93b783edf401a4cad7221b0e4d3e938a6f5611fc94b3cc90c8883fa67ad37cd67584c33112e153caab298076527706cfc3ea9d7f9803cebbbc4e040d2245e657b771e41595d210e27981303e7794118eec421e64b54830019e8aa8181dfebcd541c60e1ee59c8319297352ee235b5bced1a6bb3452499d6a56855250d4c6a559fbcb68d66a075377a3470f0ebd968d975a5d9c76d9cfbbffcd842b3bad6449e9cdc71bc48cdb2904cf458e27af0b4ef16fb1eab2b1a232c7e9d25b6311a251909f044e70b4dfacc996b5f8c0608347e5f8e8cd70428aabca93b609506946655359c82a6348dc85cddede746238c5207add4b6c39f44fce11b4775e881b192c3ce35cd724b29a5b1891092b949f9b80b90622f0942fb842a3325e819591e34f5225087c3b58e1d7b3957e44defdcb0fa85cb5800a5b8eb089f7b39aff316c759d07134231a479a1a5d485e8c8ba1e7652c54b4522e099bfc9e9bed34c657b472672c7508dfc2960f634663fdb3e5c5dbc2a2e676426a1186df2c6520694da6df44c6acfd7cababcaf9f68709ef24d6bf074a40d58966e627cf9153fb4254f8e0f7f45e69875f55fd7fcd4a49a3cb849f589f65f8796c746ffe5f1c3df82a35280f1a0be56659fee7633f2025585679fd3536c86788f766cfda0a3060e129e634e8cc37e9c028314952b0ab35936201492b94daab3ea417b7e11722fc93d07668136f54fefb468773ace64de2eb5ac503ba2e3f2c10df11c8b20a866996ba80622d97f59d9e315bf700348ac5a6cd3fcd6f8748729624ef62ab58cd5040447e9385ca9c3e1f753953cb2fd4567c15cc069a24991734f1fb266b865a19470adb7cba7bbb69058eaa1a8c3ccd0dd1e1143fe88aa37283e2ef744117cf5d118a219e4a2fd596c6ea28abb1ffd7542eab82e9c92dea1cf96416ecea919f74262edb68935b7d5ffa243f87dacd85e208d1a284ca82ff8f0bf21be0b6683cf6fb75838c5483051d15a9495f753a4b0fe6fffda15b2e36413219690033104a6e080a9449dc3b1f668ff5e0630fdab9665f82febff98430cc124678cbff3e2a41e23a9851b8e82eb4efa69f630903336dc9071041242971981305e59469266f0b00a20a04691eb590bb17d0b00f685b8eb9f8ecd579827b2dcad41a0a0f8d8b31e9bd64026b53468258e62eda715e9451a8d4fedd5833a005903d908d60b8014f140920bc4e0a43f26f8df452dd7a605f2c2790d94e91a2b809aee3aefb5a53cb0601ea927fb84079657bebb9b22061ffaa6d7d49db40d5ad9da48ddf3dc9152e36240c357ef1ce7fb12c5f6f8e04fbbbaa130ebf7ca5cb5ed2cae9aeb6a8a7f12b0c1015da2b408df93bd9f4cf8ca03bb1c4bf9aa154f6543f6e919de46d9ebc6b1680a40fe9492c9416d5da052bf1d847df1a7bf7b2d9263a1c201d458c6bd86cdff8708ea04ac42849fd9fbd676319e2eea9d3de64063d696fefbd588981edb6c4c1fbe4d4b7ed1c419bb656c36688f95fe822c3dce01233c68aeeabe99354cf6197b6911b231fe69a4aae6fc49e9e11cf5ff95682094d2fac7c31ae20f2b61d32c42111d81ed51db084e876ef5dd1b2a96bb7f4e7e436c3ae2e16edc4327a26c4d1dbe5900d953830d504faa836cc626aa5ff2d92f36786382b1ec947d52982746b479ad761e8bc77b5847983bbd697af992f6f07d967edd6fda9ef305d3ca6ddeae49012de38110190d752164f98c8d4bfd947bae8b060f71058cdf22d3c0a7dcb4373d6b51bec7b018e32b4747b8c76847d3630b3c996350dabd411d7a033b096d4a497990c9520820999f2dd073901819bc8edcd2be40d30039023eef1a932d828a0d9fc72a1be9ce9d665cbc4850221b55e56974fe0ec4200808cd5b8d15109aff72241f6a881bcaf9661d32bc6f4ff4a850f94be036e9e1333d12e5e52b795eb25e52bf100365bbb589b75a5955674dbdb8d67fec1e0aecc08855b6a93c3175aaba6fcfa4f3914ad7b6745da66b32cd9a034637aa2ff1e8bad0ddf561af0189ef6fc479afc0651e69d59a632b17771d491b929ba3d1657e26fff3cb96eeaf3f8a6499e3b8d1aae072cd729371c200e4d2e602d45e6d2d560efcdf60ce6003418280363547902737fb884416ffd593cb3b4edd0a6369121779afe9db946dc737dfade298e464a6cc0bed58145db6f97a8e3a6d643b2fdc6a700059656d7dc1c8aad2e63418b5ed46aae4f5b414cffa98d391f80b6d2553f6fad77625e3f8ba9dead68a306aecc64ee055641eab875dcd103dc72781b53e641f1c89447d477b5ea7a316b4636ff78cb628ee7baa45ecc34f2522df0046675be7b7dae9c4d0c9b2e920d2ea89a748a73345d9f39a736d1f9731505b713f94845b90b13d3efc6f41b93506f867fc834860956dad0278a98cf1499bc45c0a8e8782905668753333b41ecaf90682d76e1643fef4d26abc68b063554942490e1d0b659d1091f1dedfb321c7f43d649ed3bae769b4895aa77133f83da3fcc1b308b80aa029e0386339e5c9143fc494bb78db51bff6fb5ba18ebeb5e9f11b4b6119377b82e77ed42c0af31e9a22c49a9425228be6024ff41285f9a4427bc670801630c02993934d9f1984283fe565ff93a4369cc820aeae621f8bcc2e8826b778c84adf7f744629263041f0eccfce4a1ebcc18c4c984010f9241d35966263a8b2f72ee26bd4c0f22815d27d8a2928039f34686359b12ca23f5c56e8634fa4cb946b84d0d4f9292f0d91ded7ff3b9ab27dd5d52ad9b59bec9d8fdfec7b9811a987ebf3b2a42ca8693c6c0d07354d4de02067b0e9b3eab47779845f49c885d3c9f441238fc2b565271f6e091412a76914f0b2a0a6cf99a0ca3c047f08315d12b34133bd6f16dc89f11d5f7706809115d7557d4e6b1509866d4fd7e7309d6af5f0d88a695b88e93c4f9e0602e6665279b0b792623f6d848fe918c53ec9f6f2a5071f0dce590023a5ca0a2c50bbab33be277eb7832bbf50e3c501962cdc233e4a808086957466d4ede9ca99098d397c0cc412b55935f3b6a98971115b6f0c960be461bb65b1a2423b354415d664f7758a10db538d68f1fe0abed0ff708d994110ba2c76e71a9cb5b835e1685f49cd656192425bc7c9a1702deb8528163bb289828a487dc3b63d778c7109594b43a396b8d2ad93ae62eb543b98fa54f3833fb489dd1d98a08d6bcfde7125b2425b614eb85985c5eb3ab8f15b4d964baf6c280b4c39139126a80f04d6be9b39ee98f0d689ae33b72659ee90b693c1d4f3fe55d6f429922ffe0e125f9edfd5b7f4023676525a1d3206c8777973f1e3b96742ae5da8320239d0c75a285b5c39f3ffa11c753ce3adfd338e39f4bbf064c0b23f1ce791decb7843dcd1a738be31b7b57e8a1d6ed34ae256b31e49b616adb27cfe85bed6b455b400545e235b8b24c9bea069b410b15ba717400dbf8bee24566f85d328a13c09b4af37e8e6ec4e7af2c30f9f834c064a151d3ced9f63fd327631deec6e17ff4d42f78e5936148c9afa6cd416d248597ef411afa83165cd3fd86a11bad862848a248060985cfacfeea960f6b4e92c325f0c9aa125bdbae5b445c32423adaa532923f3b58da0c89eddc7487d630f21195524611b4c8b89cdf785e321113716f59007f8952049a382cf1bcb720a8d4f97c8060d2405e3fb0e7260740f6bbccff12998360939a1b5022c6e92dc91abdd33207847c5380c382f8c9e1bf71985fdcf5b9e5618c0ee26a65d8844c3dfb1f376c543b705cd4f67b8ac0682e002dac6188de0ffcb9d791ef6c8318a2fdee7bbe7202f04ecacf4b0313c6251d2100255532927da29b88ac47bd6310c2975955a0e9703d782be433c23a37830d62a47d008963b8f3af96840bcef4f71b88c02fb739389d7d0e98333164910c5f238ef60c03ce4c506495dbb417c5462e50c77c49f7d87addd16febd9096f4bb3023432c0183ea24968eaf5d93e30986b7db3cdd19bbc600b12efa001bf2ebb898d18b5d56d31456f1b2a74d398e338636e2996f69b70e795517c0273ec5bc64312b0f1a44942b001f9b8db4bbe39d096a09d6a218d726c0d0bb9858827730690319168c552ef8cd2933a9b9a24c0eb85c393a9dad85d87c2a00c9bb6d700f6c1684eada100940621660428575304d3b13580e89b028ea556cd09d7a891821187352d12dfd8dce6aee0ca23fbcf72339974f9a8da92725f59d125aba5ed82d12216d14ada523698bb91e0f100008585af10726d221ec5101c5ae49a67216fd0528bbfb818f31d86d807ed220c7cdb4472867fa80a0de3624ec8bb263503b57979126cdd24321e4b94b1433969cadffa844565ebeac659b041b93dd1c7db004706395d4c74a59551720c8799a041000244ebe99b4cfe94a495aad11f782dccc39a6ef56892b43f32e0982ee56895e80644d86f48b90d2099cafc1981ce826769a621e9c3f6e4585a70d2ad8efb20047104996b76b7789a1a524b8b8b437f8cc3aa009ee129cc9d52934a88090075c1dcf4ad62a7b0d74da0bc078bae7f5b994c26898932a3c36a95d87e42e5f11dbca49592e94e4d9fc7b768beae6dcacd097d9c0b3d5aed6f4caeb0dc62a8457e515277d863fcd64894e908ef683bce3a79d28b242fac7f36b007acf37bb2862e3c711bfc6715f348419fed085dbae23a56e57452d4b9c1a0312b2d31d2a73b83ba8ae25d673c2d353a56b597d34dbf332d10d815c1056d324ca3d2362c08ce35780a7ba9e8d1dc960ba7d32c8d76bdbb68ff26fb8911ca636eec0c7ecc29c6b9d17a3830606989c121fdc624c0c85639970af162715171ca147e6c5a57bcad677354b8af7285dd6d09e31f1f31a5114443cec7f92e66ebccd9d542773323fae4ca147d6573991fe04fd24e8a34bf8751dbb50b0e24a4a0e22b8b5f5402e227a84243e6f10825f9d15055c4e46e5a20f8db584b3fd8ad39b095faf35f3b89cc38786d95e084bed3a6b7e822bc3317668fdf13090cdee30eae85ceaf17418d510bc8fbfaa29dc635d6e303d8802779d0ad338fb4d39bd8a8428750f30ab96f4e98d06985b597cea8f86e3366cebff3f7d79528df4284108ef3273c6fb807a22d661b50e7a8274aa561b5e15df6610824755078f8c84c0d3b56d1db659db0b8660a162c70d8b0dca3d956a81e95bf391f2d11fa91e3483125d403d8852a492490eb3d66b1f5c8c72c95ccf2293b2f19206536182b120d2ee701599e4eec357926900d9a3b5dd3ccc84d855a1e45350ae094596c34d30f58f7553fb703620a28af8f03317d9f664fdf571c3a6e526580c850e8613fa4c331cf46129d731a3bb5843ecab6e928f4b30a490e3d89c1453d50116f91bc15cd5be76a9ebbfe735e926d25a0a50e9903a8b1a9b7be01303873006c5b783a948239c82920bd161bc76192ea31867e4e17936defc546552dc3d461b8387f2bbf865dfa0844fb4a621a85bde309d588e6a505a781936105f88bd3ec8b83310fe54e3ae58e78110be4dc8146a6861ceec14071f715ce98944ee4f4195cc81867a45e5323324678fb2271d6b5bb22b6f08c5e5ac502c347709f53b770b273afc37b1b292b8a1cad78996f1893778c5e3e966332a9df0e083b487c807b13126193e8293f770c771904b848a968921f5d397e03ac0e112b5544f8b401a0f530c86969ed089e1fe266301d831b9d61584e71b193f97a2f97b93e1e8e9d7aef3b5eb47efb16f95afaff7b27a2e1aa8bb3ac67cfb8dd66b0dfae773880c67157beaee5a5b7dd21440d5f66651c9e2867dde19c26d6ba6c1b6faf90c52f0f1cc51713ad6cc7ed9e41b600525474a39f9c23a87f556202f2e5c4270b42edf9e5cdf1275c329faad8fa618cef843f84688f314b91ea0f59839679bf573041f964c8b9748295a3a759d4bc5f9e62e1d32bb7635564532320a6b3fcd3052bcf90024bfc65a1146865a94712e2ef8eeff241ab4650770f41fac4a4ca0c8583fb5046de2695482d72684fe7f1c14356ce6452e156b74a9ce03a760f7dc668e739bccae5c46dd85f4611a62df5753a5901cbd7e021144f7a8282235a648b1fa41f37d6f94269e2185804549f8a7945043e8b392e11d20636ad4464fc2ad52a691044239f4d03e5e73cb2c3a32d47f3f6b914ff31b58aff3fc503b38b4d3f09a4c174192e30e6644a48af8bdf5a5bb79f160bb28198a9ab146e42878e38234dd5874a205c9a6bedc0105d05aa9e3f106be9d1cb9427b88a531d73595b682c5769f638e170f61ed2d7284dd9ab656c8efb9909d2ffdf222d6a3738c19979a4d70082c2d521b079c3fe04e460485c6e93bc9806311b4b9104c85fe528ced9471d07a16a63d5660721b31ac34217cfbfbf2d8b799e7ce96f90fc0c1b2741f36dba0df6a2260283318c84fe6cf7704bca71dcd7b653ab35285283a04d25b974933e81e71c844fa4a354e20443e9086d395c28f15ef90cab55d9edd0fdac8bc9420ae1f70c170326b72b68e0daaf468066cec08cd60747d8629799029f344f6e14bfccab2346c3a5f7707808b3a29141ed4a01feae06b338f90c13a9b4556adf65cd9077e4ac178eeeb49dd0417b9f0e377e8bcb696ff55963b7fc5aef786499cfa4ebe1b2af656df77858fc1682c661cfacbc777abb74964d2bb18a7315c329bcd61d7d2fe933afcc2c27d0a5608dc9308522976471b78c1fc7b1bd11d61d1bb7e1c3aebeb218e0b75088f2709d7bc0e4783c8fb90b44a7461c9b673e01c8cc4b587cfae1b27b9d5375fad5fa8206d565f688d4db1092847aaacd1d4a515cc7d19a97f62b62d2322b1d0bffb5c6c5733f90960b6d0a378007f2d543d92d5faaf538a3051e3bb34ba8a62ad434c42e26cbd6c2a7c1608a368875227f6cfe37c220b32cbc1cb5a54646b1e5f7fa12a76cb529bd1e8aac212476b25334785c7bc9ee8aa39fb9691ebeafc0abef782ac7b16619e3f42b4592c65d3ae5e78dc0a20eb92f960476be96112e431b0f318515916917b5ad25e53588965f491d0fb3312d0b2272aec72e91ea5cc981eba8aa078938b3c0cdfce3a007dccffb5980bcaf917f03d7e34d5198a6a5b49f19501224155f6e93cb32c958b07aed7b01933583d86f3424365b9010e2b3a4b0fcca55d1a237b88d294a1ed61f0b4856c989c6445e6643e63c8482a10ae10a662a79ddb6cc6c223b5cb55c9eaff8510cf606d767bfeea39c5a5aa1bfabc8662d16d1224a00772c1cfa06fb18dfeca80c3b8cf1646982e3c5144075c321d448843682bbe1cac336b075a172db5b32add2fe7eacd0e7ad74eefec86762299f120a2de11334a7daf28454377c6c7e84e30fa36e5223c6d8e7887e74ff030f83530d518eb0b91448b0071a1b4032c63dd810eede99e3639fbc1017b8b52c601bac2c45ee2cc58c772fb74bdf96d4ced80d652541dc765a6c53145f162254b7d25dd57f81e0009cf0a2234df6c8a8f4ddf39aeb2aa28317c95d03c91fbef2735218a762dc62e0b24fb7c9a4f35e55e4da1b10a51b746038212a7cca27f3bc1ee54d0094603dfc68eee118e547d031fb36e464e776dab4181e5bdde6e158e837366b7f88bfc9aa2d58beaf9376c6e3c48f001636df4de5542b51a5b3be672d48b00472b44dae707c0790ec14129ad1bd4cce92f7b7367a58a2bc729521a6e1cfdca898ab9c44e5d196185d0b7dd48261fad079be812cf9b24efcb32fbd80bc4926b84fe32e3580ca6ea580ce4afc7c3f039618ffefb9c9dd7a82e5c7d48cf32128c406df65e8c7c30bd8e5f0fc8b35c101802f4035359156afef991229344cf45d4c6c14e5e73157e812fb07f4f945848f3efb040458b6aa69b33b830e1f203f2ec1de0820b93405adf44e67d6df01f5e7231adfdf6bc045324e4b9f0596037e37b4db4da8c77638a7fd4eb514a51191a3cd1d18291734b3944147caa2416d1de2a5f239d0aa4e8d708e7a6430d3eae46fad706163c39a71fa1cce8a6699c3baca15a1715aca435092385ff9bdf4046a8534933021f9580cee313e72b517bdb15874677889bfdb4e877b7dea0e7de490af031408f640f3e0fb3f26182043a1be0842c2b3ffe3acb3bad842b9b4ea01f3278961402302f49a8b9703cf4a96162d742131a82fee0e4cc6cf5ced43b0e30e8948199a6ae7e09619c9561c7697817c066032e99c37966615d11b093d7b1e4f6ecf9b6c20383e7040469b8436b08a4649b044ecb748db9c327e0b7204910a4232706539d5ac649579bf529b2d898708b871f62613aa245ba736accc2bab3d636eeb05980d9d0982406409d5ad7b1e3fcd25b53a33c42710ee9b8d8c35223e4f8e800aeb3a8283d31f052fa8591da658125c107d9a3f4a78630d1c16938e73431befd3b7ef0569e46ff342a792d9b5ee02857674b96414febf1bd71fd958730a817b0e829d9e3252ddbed137ed47c36e282275b413eafcf05d385cec6908c3e279c1f9efb8a5639ad2d859fdeae06554fdb39cc02c2c8909c7f30c20e527dc874f554433d2c37418d9d05b5dfe2c024efdd93a0d74b14fa789cc6341b03e23558c957c038e60fa796d2743ccb9933098a2e3fc108011a7660d3500b37c944ed9bc02efe31e165d29075da1ee8fae56de7764515dd0b626a1eccd431a8cf29580583e3e47344c12a432d40427f2e60b9cf5eab869d92743f782e5d8db63b1cde5eba7e594538ab1776a3ad90d75c2c530a8d7bfb92bdd95e37a2f007ab36a2e76d0d0547eee5ac01f37f29f03aadcfa560adbd5b02b5182d23cf9787cde745dbfb228295b7724b508068bc4aee49d3159963779036a1b916035e59f566778c22d0a4fc2be808116ce6066f863c57c00d7c59b38176aa4480a0f63f39bc0dff24b4397cf1c9ce85beec02498c6cff1cf4d23778160af842d3c3404f3c17d227496f8909cfa1ed2fac5c045244c66b713263a4cf3739b23b7632e393e4c1ee8bfac83dabadba8c979ffdb3939792c0462ff749becc4c01b5d3b688131a0188b49d89fd6a735ad4460096b8136b1729245256ce50bd8b0c3a5116d7d6c71ec8289c78704f09caedc335f0badbaa9ecc920547da8af23efc51581c77e4d161d7715d5e3f615752fe96a8d362f13a6fd118b094157654adf883508e11452212dd174a0212a945392f48bf06585f05d2613eb903291bc9202956a1354c02a07901a0c92e8f2dbcc9aa60e453432df10fa48d895dbb813adeb654b4d9d12135dd6c9644a861f7a24894667e80cc61e86dc18c886976b19030c805ef4247adc888468022392e0fe1ff18e2f5569a05d135e0c41ef1ffb2b15e87f0bb3757ab40c0b6e7cba99f7b5f365b5db09d562093b02bbbb4bb018c87b01a9d8181a92587cee452a7c05b450635885f191da7bb1823c8fbb0912248f96daa94a7e8e42284faf9491e460b75bc43c56e979d36dd47d9df0c7c390aedeedf5e5e9734b1ab1f8b1d54980256116ba93a1492e7aa8e081999747e7b6283504c5f82b72db7c740cb77fc7dbde523fab011d872c1acd6432a1dbd2021d21306fdd488719b9f7ecf0030c8353f5fb2519d6f42a0f4e4bee055946ec9f101a3f83ae6f92c4510d8b4736f4128506dc758bb7edb8248f94dc8e22610e0b5983e0e4bbd5b4ff4b3ded76c5dedbeb8b769f751662a8184948ce119fa2acf333ee9307780394470309721322256603ee4a016a64fb806725c8114413944fd349cae4607581872812e0c780fe50474ac9c749d03600b77d8fa364aa40ae7d27f5a9438436c8241ef5543c649ce7e64c889ee74b0c1ad3d7f15b369889699b6de1fa3ee73e5fe19814e46f129074c965b511583f59b26c12f56fe5a3605e5111793e450dfea156200c11de2f7b5f6742c9cf2b31a16fc6aaf642106f67e504bf35f5e47cfa44d843555ce82fb03046405138bea6659b99fc9e92454102964cc3a2b1ab98a3a31e7e5b363b87d17ffd0ac5dea11228de4ca438a0d2bcb2fa8fdb49e1e9059d546f4db83e36bc4196f1fea23171197d90652e6f1e67570b8a444286174b2849d1611de6c57851932dab9870d18d00a66a69f7ac6b71947ebe10a601c240953b928a7b516c6edc489ca064bc2f738c65b4c19c7b086ff98f1e6b82276347b0d52041f292a388b0d48c66efeebbc3012e1812894585d0fabf23bb43717aef2fc8f33df0250b6473b945759672f6d9f3520cb34ab664331c715696867a8995566993c51082f46099898032f4f37146f783fb5a5d281414d3682f73a79d1fe8c9497a7dc0270f3b96a7955587eabb8872367c4e3d2515d4b3e626d943739e47eceb2fde7babac23ffa62d23cbc3262cf7ebf8256737fa11328dd54dd678953155c12c4dcf6b6bd8390790443d174192fd07076667cb3158d3c1a337dd268543885de87227f0ceb6e74e672d6841ae58f63a1287cb794c0a2c14292dc407fedcf923fcb211d6354e6edd2a45b9eccced77d7b21feeacbaa38017cf962797628c3cb5c1a41976301d44465233ce831ddef6726e856de00db3842f1f17744f40dfa785efbeab7b5f921c2c676df27f219bf69c905ea5bda5c8bcdc801836aa1a35de16cf784430144b3ac1e25ae26b68b30ca8c012429013417ea2ab2eeb426f2d44eaf957704eeeb744d94b90fac263928d498636b0f1e6bc6e03f8b20e72b0248064e5d2bc225f54bec51b96c80ea2d90cd15b326d6d90a7ff92e1481ce57dc9f5272d709454e6a1fd07cad2c6ba96f51fe2b7abf46d917297b20d57a305387c37a438c77541053da423e1db7350b0551af003e9d27c79daeaf3c5771d4c60b9ac6e803deb913b7638abf9275a6baf97a28bf8a28414aa1f5ddab21cf8359710e7d8ac4a73a009ea2f02694ce855b53b3b08ee3c85c0b2de64d94bbfd05b4c006e9505838a07f107fbc9ca92a9c9919e39095d3e53fb148694620ae61227e0069506346fbb23716e235485bf1b11955f411fee1e7b3e5fb6612778165a2603921fbea16563ad1b7b3a453318b8d860ecd79ee9636804f4dc5f7c0bc704c017415320e51b3fef4fcda51e4b360f8864d56108f783a6e96466e3e24e8e9e90ab92d3df77e79c849eb3f84246ad8bac119772009115c4463ee4a2eca8c3a41220e5163cc25105e788fcb853add5c9ae17a18ef84e902cc5d4e3f11da30ca1cf27d69edb6cee08828ed649b4f9552618b7821c6278696cc2d6d362d7e5c0142210d5d23dc025110010ff3108b1824d7691c7aed1a727e0d7a5318ccdc99477b58c6154d6748cbbdadfc612a15f038c4236d0cac86352457ed09cb341c6e048e3fb17ab37e29b656d1bc943216a4f8f06173bd4b9355ee722e9639ad6764a0447dd5729d4a2c7aa41858766fb5bdcb23ca377611685c4625e4024881e5028365bb3be652f2d97f6f27d7ee2b1bc2182406c020482ed29339b756e2f6bdd016b9a0e9bf1b9fb82d7ea941e3ac6f3b49bcbe17a1360c3d3c775199ee561856bf07d5e9e3407952ed9b449e3f3cdab1c5b39a42e3232b27aba457d354e71d1de71901433c09a72e258ca0f7e92184abf4d1414bcc59b217478b740cfcf2f5acf7b5cdfdb1bd52d43f1a6653c9a394b13edd5c39461fca9678f34e4dcebec78b55a4e12129a6a1cda10d3ebbc70c334b0ba1921538bc9b2ba6a38d9db295bc436bade4b68e0abda0b52dcf36cba28802c3e38ce689794c5e3964da0590bdfc5ba09a7fc5c732cdd5e142c2ccbdafbc5dce6cf1b4239e06b799fedd8c507fae5b5b325955bc66faf58f13be858579f6e594046a88ed73f0bf2f393d3ada23facb063c1b6e55ee6c8726696c6a0b495f207e729f69cf3f33fd61dda21716f1093408816c187a114a130e0c748238661f98f280375fb14cf6f998b1b62cec31031ec9c9f55c1318bc21aec47dd6f21a5dd559f4db727be0623c3d7e1e80452a100fb1db5d41084bec3a70592f6c22ab415d1c9732ab15449f4db60c851b0725569128814dd041f2ffe5bb92344eb162f4baa131e51168c0d4b46d2391061c6a002b96816d10a65520abf838318485879e74528a9bac5a9b29fac88bea486a41346663a4640920bc75138d13d114886266119669fd85d41fc7a6310b39e9dbf21ac8f7b2dbc3956e26a5e3ebb908a03a751bd498b2a3bf92d6400f6d26f256c4dcdbba737947efb45ce962889467b759f31a76dd630f013d7d51ca77586ac2019f2715afe79c14d63f6872b2083ab4050794e301b8cf8468e560caf2785909ef8e336e2dcccaee1cf6a97c30bd887f87d91383cc58ed2e5b36f576a52dc812d6ce872eb6d1da63cdaa34e6cb5d590027921ebe05ec70e95d9798385a20bdc5008aabbe129ed35d3382921a4b8db61f2c5a3efc761b619cb730d277d7f9430ab4e8288409dabdc394a74a7e78f7a5c4e058f9a5e58ec72fb22a2a9ce55f5fc9391084ea622da07d3940e47c194331d789b5da211bedaa8994ad290d4cfa1bead82b4a57e74185726a76e97bf8195f40709866d8e0df1394a5e05533d4737e55d961ff335ebb738c6f71e0e3db1f39e7dd2a2733fb0c08372fec3976457290f384d92de5904673b28f58511b8b00c6b41793a498361d945a78f95a3f669e5aaa20bc5bd745888ccc1353c48dd0620e9068fa657057babce5c92e42f400a0e363f73112704529c6c3438cc2a071ee1a611687f324278a8ac16ab378ffdb1f34074f61d91857d2297d6728d2bc384bf1116a64d51a6e3605d4a3b184c6bfc4537c71743837452bbee3c7527d49eb219b86acb693bcf4653507bc50efb374374aaca591b735d5db8cddab304aaf531a21aa24a8b67180c02343fcb73f2cc11f217d33e0df7bd08b9b545aeac15738dc8a631a5fc5a0dcefd66ead0fff9b7025ded9628a376ffde2f42e1da96aa7620fde9bd50648b3ce995671157fb46747f08ba77bb7487a26899e553c95ce08985c26399ec3c7111f66ac357c30e8f80f292fcfc68e98051127a1afffd574e3a46b6925bdbecb229700dfa12c4922b68f77d3388b38b17687650626ad92e49e4ce3af477a21db4efd0cf79c6cf3eb0991837ecc12dd1b3650ebd4a190f3a7a3596c00871c1180fd1b35fd108356ca59dbf43872a2a35cae34601307ee21445892b065cdedb84197b720f8e4ba99470e3773091285b5fe45fb6ccc4210434327c154e501333ea6849a78f00059e5ea906ba8fa95013989626cb806393e822d77ac03890b37cb372c8ce3ee4ca8613c473f3a12e15f58836f51ecc9d4c00689af1c6358d341857df85409f8b0ee36c49c7dd25adfe73976d370b01dfbddf6df39d91c5a419997ff4ebc941914758b0af5eb17d877e005e9f691aa0b96de7ab87cabd7973e862745978a295660838997bb53b2969294e365407e859a8d0bbc9ae05a3c18b0515ed83c8772b97c6157f2577b4a9c1649fc7119fee7d3c8ace110cdadf2e48143633fa37b174950571fa32f2b88f0ed487795e9d879bc3009149fab6ea20397a25f02362ec00ec4ac0633ad2d149cfdd97d5918d5e260ab6a7bd1e263f37edcb679aa5c671411c1aa3629384895a8304336460ebdcac422163e2dda55 +MD = 882324abc14ed3b23a9fbd5e6847a4c8212c8bf0d063ab79dd0ee2f8289b5fc2 + +Len = 92896 +Msg = 3e2304e5285fa735ceeacfa01a9850c110ebf050558a113beeee90f84b5fec19841fab21e2e5f996a18c9357f40de3304aab6cacd06d692a37d1b133b7bfde0b54bcae866060aa1d410a054174d2c6f0d2bf2a85123b43d490c3e6764ce3c4623662d7bda9ba00f435caee07a1cf41283091ef8424dae761812cf56913b3e645b279ec6ec5d944400536155184ed9c00ed8786510d349df89275a7b313188bdd5169b641bda7bd2c3ab544c623121ea1900bb693d52fadc14c04c4fd55f8fd529a9afddc980ab5dd5bae410e88271033a18446f285b55ee5364214eedf3d82cb167589ea5eec727ef08bd5d2bb15badda95aff1824adfa8cd9975e2fbbcd63704b60211117343d3581b3c8bac2c264c82ff4a9aabafec7ddbb6c6c67f192e86ac3c48ff9ccca5e2a978ee26da718561cbbbc0c5350920e016627043f877258e1060a994b85961d87b984eb9472fed700d519efb9ec5016206232ef5f8757fdfc9a9808af487fc27170fdaad6295b319c06731b849920296035f3f56ef8281de409d8a3cc1f7094124361e8dcd619aa19d533595d5cea8dec69d4dd15e3cd01c1db30344b114edc92ba186d4d801f8b9fcbbf6fec3f968bea863b71fb4f2df1ba960a81d32602e3195d8a01d230551c556e8025d8490d6b83129277c9443234f7c4cd540d6774eeceb5206c13eda3a46449de45c9823575de9740b826cbc314a1ece173a1db8c48d9494075b7bff16df4e1429569f3f7f1249cadfcbbeac8d7e097aea6368b333863a153e667ae27bd2cc012df5da33c267caa410b2fab2ac6db4c9cb7747d4f059446c285cac32ddd346db8e9509aea5d0f4864ac2b16cf29bb93136c05bbc9f893bff41b8905eb1535709a7ce8e1eade04fe7ea95732a048a7f47b8f8e4d8a598994506f4b7d4aac5752225fcd7f25f18454f7c85a07856ac8f83ce6ba3979709d4e404bb93130ecc19ab65ca87c82deb7d337d2dd9d67d94626be3a2e897d84f8742a757a2b861b9cd0c03921e1e8ecc402a68e87fd2cdb48076952954580dec18e78b6377335820f7ca7bfdfb54164d469adc6012ebeb9f621a6f8957369c7212591d6980f24694327d3b68b00748e0e91b240f23803bb79ffdbf2d61d208540c0dd9d44093a175f58ace6cccb69b29b011fc50324e528f9267209014a8c6045e7c4d3e46961d68c989a164b1d0818a2415a1ddcf94b4a9d20d105be0397a25822ae3f1f3580ecf26e0510b0fe39084cdacd1024bf1c678e7362aeb44f2891a3fa03aa9e777ea2b862559aa276e4c9c153de66837e42c8f4aa8bcc8c3628774bf62bdc0936454007fcf27dc98ef1a42834f7e6a33fa4b5f64ab626eec07d9a7b9f8f9d077bbc0e06c54481ce4d48e1a9067f5a29092a75bcdd4a8580f61043597b95b5404dcb54de44b46d59bcd1c86e50de88c0e5bc526febafb1eddfc9b90d14a6eb5db45a59b601a80b11e175a09c9a7b380eda429237fa4c72db839046c0f22b0806b85166b78589219fc61ab35e6dc034bbf0a47e3b948b90f3eb4e309a9b8ad5e26298c30857c078aa73a947da4f1443702fca5ea440d3d2dc1ee9c0c2992d179ab918b8d300b3d8dbee0ba538cbdf2cd5a09d7a99878d013e244b3e61747a99d5c5b78d3d06cc08da412615a1668ab8914a031943ef1fe5c3065af29eb2db223c8f5e8970f372d24e74e4de3daa7baf4d36e585ca02f24611cb0023a2ddb779771ef6f5944e0cfce08d2c4a331e1bd9b06a2c0455486eecd07b241b947c75672d7b6519d0a0044f3796e59fac4ad2fd63f0bedf0c48fb9fa91fae209d187fb406ac953d4d70c193fc96f926cfb709e50dd0855e188a022643be857be5383c28acbb6ca93346ab90d6964f27c5ec2657571068c8a196e94a486093749364148ac4afd4a4a9aa2a0d6e9dcfeab571931ce8ba4e67cef51ad35d0dbf52d0256fa4f991b478d725a6d46bb361b6c8cfb6fc6ad52181c82efb892ccef15fc301b53cf068f36be63e87ab76e0edd5258df9be826ac85fb7c9f6335daa11e195824e1b543c7bc6fe7e355b372d5b8df633c32cda802b49c24e729b98aa08216d30a309cb1633d1466c19ac55a19327604a7b0c1a1f32861146d78784d5bc6774921acefdfd03d3e790996579457eea8d598b27ea4fc560cd398cc0c93316fbd1301c3194f9d31609721e504a1f0220a5e85a45f019cc1d1eadfb0e10ccfe24ad9212fb35128be0d29b1133713a080fcf7f502ed7842f062b2c8b3801a95d2b304162f48a51147a6d92d8d7959b790134a7d5a94599d6631d3da40843d1195881c476e43bbd542c00dfdd045f4c3b3cfce7517fe35fa97c1b69ae447f4c1cf3c9a3b493f05e343db40b8681765438094ec82c7858de91984e3611b55c234c442f6786c9503d9cf7b09d3d1884bb56af52d1ce5c4c1e7401de2e3623835d9393dc97534d036175a01d1d698f2e897f78328aa0f369283cfdf2d983569b02d827f8bb82e8b2d3a581221371af1ec79aaa137b08055403cfd5b2be61154d1b0349aa5b7d62059916e2e808bf40fc7d8f8e202d6f59b8b717d14765392941aefb411a00ab83a3bdae0b9684ba0a6fb1466c7e273eb83b4dfa38d956715b1ec6aa577131741235465743550dcad4206da68c58f1dbea85cc62548f1a73718c68f7d3d77740d9623df8d34d2d5768b7b89935d414b0b73f3c366b9238a533359ecafc7359779ed3a97903a56bc98cdb9b07b01a1723e711a55ec60a38716bbe6f0b1b6e5f812a2f92c11b864f8909341cd64653829e41a210c1ad1ea33edfd2e4a278ef11c7451f01ba631762fda76b46ef3ca7de888e9b844967f6ff73581703785b1ff8afb64bfc4b23812b8e2d281e3add3db14996a30add3ebbd77a9e35d6730c269ba2475a8e5ca2eb33a46512ae9f703e86492163a9657895b0ba79d5657cd22b8209bef5bcd6297e00a815d2fd073cd1e2eff78369ca5eab149bb19fb67cf756364ae4c3909f00611c00061013588a1f4fa5dfaa52f238268a850d3ad459c1d03ecf816d11a06fbd0f160073f97ca25054d3a3806dc64e2d9be0574fc4fd79c122fe5d9a47c1beba5f51cba3b659cc8b7adf09afc12ee7e9cd1455858f4e66516b413ff33beb347f96182e4952d950f84732dadc56134d82ab89d0853e36d2a6a0fff11ff4041a353bd5f20dd6e375c04534ddb1355bc61fbaa88ff6d99c03eb499f39c77af5b803d7efdf96495e850bfc4ddcd665f09be884d75c8166674246ef8be093d6a75612f1cebd8db334c600f3e69df3eeb81406907ffdceef81d7df192aae2a0f013c8a11da54991c4c81c8b265eaafd99d78a166093b847bd10adf4fe46a352deab292c07b6c638d8efd8ac13489b22d8611e08fdbde4b133f236e1921de5b394cff528419cc920de2846fa9b942a5f25a25ec925faecdbeb369b30049d0453a0e6cf3e81c3dcfa5305c9ff15edf303103fdedf7fc73af841525d78bc4099b3818419d71ec87c25c60ce41218a26faf168e10a4719f49c6d4da00143fb51043c52c677a9f172123a5a227ec1a4e1ac3a71186b0920fa3a82441f5aae546f284ca442aa1793c6684706a07d5a16d6ed1406ec39c5784d31cae0ed0a56382db073f6ff5d433b4a6b8c4d90677347ce66880fa39c0389b52a4d0a5138c3105144b63043b9b64fc7c410153963959f90bf9d7486bb4cbbfacd14ab920d7b42a48b1f3a57e6f739051adb48e49a4786e69f5c1dddbf2776e3c126a9f9b00838ee2eb5fc830b8e5fcc16f6ccd933116496aecbf3f0cf1d2239af8ceece49f258f7d4805e0e51042be460688b60577ba16995f5dc0614b527c43e4c605902bf0c8626894942dfe003149f396bc12e0ea527fcdfc169b677ed4c1770e9e101f9bb65ccd7a365deaa51257b725643df51d9988a938b5fdcebdd99e1ff70b06e27cc5a6d7256c075eb7ce09e1a332f93cda383e8182031ae9a5d724502dc0c72d2a92eb163489bcd29ec0aad39eacd71086cb2be766a27550bd6a1eb80173e3581b9a942b1633e0def096e53d86265a28c9debb3b55088f9c6b1ec7a81088ddebc6492c5648df05ec23bd336fd853f4de19cf76fdeb99ec154541c9b0e9743950c12b3e585b0fae82cea00feb33aa39b8dd39e9bf98fafd63c29f9f52daca784f72bd2481bb3a4d2b47ebe54ff69d8b41aa8a7df0cb9046006964a31e92f00d00717b8962e7e3645e35fd5e0ebfa27bf1085dce2211fe5863b05d9f6470897a4c43f2d78c7f9f8683ff50d497ed6d8e4f5d1034d3fa9997062dd6ced5120b426b509f895ec0c326452a92e37c0e3334d53f4e5c76f3f6a470386ccbd0e5d9e7e62dee397a89f2b60a4e1ff54ba0a7f1fb1564af9b8c99e33a668c10f86a89fd55327b423009a2c85bb06494573340685985ffa8a222f7e5bd4eb128bc2eafd53114a34e4fee57dfa2181d4b5f3470ea58f77bc23b55952e8147789d8c909011f23b12b7fa96866e85eb8684a432de0a71e06596c7a2f6201ef74ec9fa3eff36211c2619f090c2f77f815cdac6accc4b4cd749a0c789af5cfec4a048759821b4364e79dea27b71fce79ffca84700e01f4252944acb780557a93619939f2acc0eba387a9080a527f1669de297a5ed9e18ead8d22f340cbc8296c21735c76532c8156094ba2bac697764e19b0353b17aaaaed08fb8a1a61970400f35999ee61a52e05d74c6040f9af17b21a285e0fafa5726e0396184d2c0a34d63d149861bd741a395873e9a3d50f211c48589ce3891a0cb7e4bc46e21268e176686d00d74fe16c79f48ae6eb41ffbb150b0a98be8d51a0511535bce0fdfb3269dd297a58ff334d4e1357fe2124c60d24cb04faa8a39157c2fcc9214fd40950360313adedb5b4e43f1da4da4c68ad40d1f00f69a9b324589403401e387fdb636541f2429d59aa5ad47a372174f4fc7ca4e2f38dcaa550cc4e91615aa2e5b9927f018de071d35ed69593d87ca1b0fbe8260a780f12615edb790df57e95f0ea050baaad306f0b18810bce5193dc84f1addece66978acf96ac9ce1c4311987b8e591a41ad9a1ea2082bd94690d2c5828f2549784cc38d83f683f74961c3792695a99569c840f56bd02334ee7939a14e6e011ce9b572662a236eb2e33e6f6fa468bac2afbd9c0383829f66294cc2da0749f9cd973df5c56083f267763385fa597a15187fe7fbc79d91e8d3a3861ede41a567d22d40de09db7ab7bb7edba787ca4c311d56f1f0bffe80a803c9bf9e2c91f2e3d0f8689bc1df8a16f569a134b67b41a737d1460b6b4ad1458d2843d1535cd4e630a50faf8c012498cbc32ece04f11ceffe5b5ebc37f70659c63bcd48d116ade777afc099a6d4fcc59527dec3d1a01063d761c673d477824d4560c6852463f0802c7505dac0cf5525e7e42bc6cb2cdeab698107d29f60e7a89153a9e6dbb94f28b58159f35844d0224a94b0375fdbda3f1b458d591737a8f41070e20e557b1c49a9712763ebf9f05323c5e6a5ee518597630bd167ca6048a87945296c204dda7b7eb118bcea43383109d449931512833ce7607e9f377f494e024cca70da961c36bbcd885ed1b50a34736c537f628335a80ecfef5fdce91d4d61f45fccd2d853f3d73310da30c3f8d5e6ea8ecb35482f614fc69e3a2932473f0ee863d0a7a9143b676e2cbf95f496addacb76272bc5d2e130d125aeaaef598b7f75411cc77cdf95c2eb366f6fcb4624d5ab83e3a480b2a0486bf03de074c6cb1a37a201c0c8187ba036e87a3ccc89c35df742b14e0d6136fd1398685877117685abe130121f415555ed9d506b5cf411da3b3cf066c0411dc55488ae814abc06485ea92849e6fccb7a5bef92aa00f788d0e3cd21bd4de4bd47ab3b70d97448f2b8ac444ac6b3ad36742e39a1476d16a0e88d9dd5800aceadea844b6fef982ad47d315d281719d53ed9b1061ce1d5d3e27795098c7d9b6158347c12fc320ae4240c6a4e30b96e074d21a0ff55f7ffb1d61496aaa6f4543f54abff3c962f60f759ccd3b2053c34a5d9d25a700cf83f32f4360efbc582d9db2bb79a22de562ef6fe54fa03160e12437d6269f2726108c9b5526a7758b7a0a735edb9603534b9458a2b49cbd3ad6b6290584c0146d10108a1f045a7e0f12d360bc4e96f2b59b47575c63f76cea8c485cb3a7d26fac6ac5232a60cf7eecdf40a25c3b6ca2123950949ac679e877e922f867f79ddfe906f48ffda3cf1e2bc89861c608debc720df738e444ead6e9d78c24aadce80d2ecce4f520362206d3b425c4831fb5e8deff846bc24511e1493dcd0803be7da182a4df7e1c7f90ddec8d2df41ae6b8cd5cf73e54bd31b7af9e022ecdfa052242ee762b5278e8e14b7f3af91913c7b114f7dd6f1c5c71a4e8f010f79b1719a098782a1198bcd8dcfa92a3d15af7286664b4995dea286ba035474e7099e362be4c2ba8d97971b74a8f30b0fcdf4d73a1669d1350e7a888733eaca4e0f0e54946060cd8cb1c1eecf3b55e49c4d19d0f28c2b934923b6430e4aa26fa91c7a534fe6d25a22faa4be19f1226566f587064c31f10e26a0de4ccbd21be38c947ac8cb02a7def4c4a80fd164e8fbf469b4cda3c25ab061f85b1c2c44d7b47d19881ba22e51ca56b2546a81f12a16c91c3bcd95a7d9189facd527cc2d3650df1e1ad241d450baed462244a8406654598f745c9e4cfca51430a4f607e5e8473704bb63468f251f0cf2aa34b0bd1e233a2607112a3c25f48426731d8c294e16198fd2651cd95f655a4a549147d1b211cf925c71c5fff57553e0a7e4b541d83c0af1f84e212d603c49afaa10ba18e28eae370cf50df2eba5f811bc121fda27276fedb5951005c7f24fa52309941d00183a9661214edf6915051c37fc185cbb76dcd572c055fd0725f0cd480262389b4d1933117d14fffe30ff7294295b43f598b64bb8566f7d9e45c18a9181b106247bae8f966f0cef2b884bb77910452a760ba0a30ecdc8f20de0366f880ded002c428f2e588d732771897e4d2f57626aad5e108deeacff14c673c3eea41d92b133202f71e04f043350c30bc64f553f9f1bfe8a6ec06a7e30688efe7a7e273e93a9a3040cc62a2c9d59b3789551904932326b62c82c9cc2ef64804aa56eb13d121039915152b548bfece9494cde9efbce91235e2cabaa79ac3af63cf1fe423ad707527bd24e6705259ac2f25f3ee7d3ceb8c4c10e9619eee16c5f59e2b560a43cff9c1821f1b5de68e3df083efaf16dad09be3fd0a461af49693a05ea2c9305be4954faa2f53830f4489c0f8eab4235f4148e3f253f28472ec204d59acc3fdbf5a53ba7e7b144a95239985ca0c860a94e59a3237ecec4231bf74e5d56fced936d73be8462ce91a3fd57429427cac353e6599b914febcbef9b8984e1b16712c870354c24a69575bd6ff2292a863ae0a28684d60d1b1eb5e917f937273c7355e7b88a630d15be875234cacaa44e815f31997bf10b52c008cc3bb6d3724aaa0d7da0b391b252923d0eb6119575d346857d89af6af099883af55142f8778e93cff6c3716698cfc90d4f9e971833d6e2f9e2e18fa26151cfc2e1034e049b5a9913ff8b144044ffcb8ea148abc152abff32fe3b9d45e21e1f473bcc08865241525fd4824cbd2b650227803ec03f56d4f3a74bf268b3e750ff3e521632fc20d5283a22236b4bd082156e88fb84e0b4e458fd48a0727ad59cd7fec06c3de4ab88b30974f8f06ac8f96dda08096a33f14c977b70b03b195144322f035889de46ce6b54397d8c98691d83e0a9e2d0c7909057c850bc330ddef9a6359745b7278738b9b0dc1b90535570e018cb02690a1731e25a752efac6d32faca908ce467ef13a36a5f97d9c3a02961af908028379f9b3ffa83a82e2d2d258ae0fb45ca832f9556a8a0dfe10baf4ef9cf7dd4dc0a5bc98e8482d528bc050f732c0366b5ce2141cbdf376278e34a10fde9bb75ea10bd45334a0ca08660dd3adc3710b94f51ad5e2b968ee8475559b59686b22bf952ae5657d58ad2f0229decee878b043d13bc369d560c39f668c486eb2dcabdb1d6144522ab62330d082d6ed1a6da102a1c340f4aa6191c2c2473cb25666bf5bca6d95bbb56fe8b861d7508ac1c67a5bc75ff325a0e1d5a91924fcc6bb9fd99bfcae3dd4b5ec4a202665d01a76f998a9b2503e7f41680bbceb93ed0e6afe87265481c16f9491e402aedcea3ec29d78970342a754047ab078ba22921bdcf9448532a6a4deea1732ca6b9ae34a0d18b68e3ab5a26672804066f53f90519a169e33478b7c951ed2b2f1dd2e7fdeef01cf09b917d409142f48023d694c522aed00aae38ead34bb6ae1138415f46fc0df2e941ee7a0ce51be43c4f33e4a9ff7d2f876974ebb30483639a9e0d0057f2b0751b7ccb39d28c3d3a039a70d0f8d997ef200e33a2b1a3dcb491f73eb077f9620d4ef52fa2daae30609dac973ffcd782799e457ef715514908c0eddd59ef39a9224954229d6b717abcd22eaf1bfb22c834c8b55cd2263553c8ed26f0e208d9101cd540ac12ce00a5b86ac8c14b3ee1f0876807d51b2d78815ae14a823307011c63ba61d6e94c8139ba2c21d4b70d3d83dc44e3f1ba72415c276402983437db575fc060a70a2b1dbc2ce1e2f047b05e089a26efb9973db96b973ef63ccddf8c4878aee5285db3fbb87551b21de36e6b0728d4d6349ad607361336cd75e6463f77174e975fcb2e44b4fd443a6473908d09f0163e6aac84554501152f4c67b51a6da2661f563ae21f392c8222ccdf5eeb9559b6d064b391c821caa3c6c7387445b183bf24159318b5ce6ad2115e0f20ae33cb7a332998438a51d7a837f141cbe9cb20214fa2bf182dfb1ffeaf21eb1efd6bae2c0fc144e3c35d8fec2dcf6b022e44e3544807a52ab048b3cca51d5ca001c66b920e359eb89ace59364e6b9c603ba3331fb64c2c96663e8e059b5a48ede1cb6875d68c8d0c382a9f5042ccbd2e3970774b42773ea37664187138e1994ec6030e9c0fcefb25c5fcc800b2fab7b54f3419a09392c29b0942bad725b9350bd8f4c5d16204cf4c68c93c0f46fe703aa67580e652a49fc44661da000aea066c3e28f6da7635f1c9491b6245a5dfd20865be14e526b6bf675648e2b58d7df2b821270780f56948e49179a46978a5c466b5943d65b8cf09cb607f38bc5979e339a877628b84a8bee5686c694566582d9bbe81632daff7653a8d8f46dd14e6c035fca26dc3cdfb3a13f57b1a9f1801f7f0a70cee06b436bbfa05ff72e267cc71f5443092f07869a5b8612e1d4035a809ad99be46b86f95f354ef572691f934ddc1a9a738d92dfbe51ad30ddbf066534b1abb1dd30b871bf6907320c9b47325eee15391c64793b8e38174a1bc76530ca57e36b3fec7a5d1aaf6bbe1c3117ca88b9c6975a60252a887376c71299ca3daff2331082db370bdf8ceec227b71bdc49c3b14dc3fd213d3ba83e2058828ffc6414fd5a2c99891e9c85f316c5b9bdd810a067b4df97f7e4262acfee642e30ed6534b4a0b3b3eaf5d03f2b045ca5985e7bb45c7503cd03afc68fbea9bc09579141d5fb7cbea6d73208fcf913830715dff98401f6d708ef009b5b8cbac6906e78888d244683ded8439563efdcaf6ac0cd0893fac2dfd814772302bcca2a4fd01397aee1b6c9e858cb33f871c8582d23b62778995174c71e83ec09b1204db446f2fdcf9615f74ff309331f115f03dab91be486703b4c3267a754f52c85a75a1d872973c41c726211ae316c511938ffeb7ebe6211e8acb67a620c496142ddadde40b91ffe12e1eb4f2abd54c37f7e19554f137ff0d23cdfe144506b01e0371c03c01b48a691bc37f5ff156cbb0a3993611d92548f9072fb16befffe80f67a411885ce72402177d4c0abf818da31f21aa96aa974609bc5b49532396850fdeda9a6f241116d4a9b4e19b1c3ed939f4dfb98a6c743f66ccb78e76ebb3d145f27c219a621ca90659d007b91175f699a93d2a9628a67c37bfad47794e3e12da2af06fb11eef22c0af39860ca40e2dedc6a1c761e51445a51ba33e07552091f60e9f4c5b5e72cc2c3458263ddff1c65ad4755694aba6e2d86a0339c6063f96bf27f17f402c8dee6f6f93aff4ca06090a5a20a0d682449af73334015e6b846860fc4fd2098f28cfb4e853e8d86c363d25e00a6dd073d6b62bff9e5e788cd751ff161f0b5e902bb82128019a92cd67acd2ee9b852985447e9b55a917bc6f2197c5fbcaf3e6357ef1deb6038dcaf5829c3a0d3baf8ac1763a70bdbdf6d11e4883d935b9524a880ac2141ac38927ed705685c452b59b2d5532d1bf42c160a1365d634c53f03291b573ebdda75651bc1722da9c485d03d4c7aee7e4a04110fed16d8dc6ff944457684b8a8619bbf16a6147611c85706bbbb5f5d9b33f3e8a3f03fa7d2d27082be20c931a9d8082af00350f44cc71b57aec0850d0b58880756cb34e5b0832128d3a8794c2ab447132857ac0a83475f6d96ea607f470e1ce7a8bc9af50e0887b1368c393ab37cc5123011aa3b7ddf7f92f4979626c6eb3f141a62c66843c910a6473a6dbfcc982e9297cfc00994e6187258568a8613767b271c4c6bb1ea4b48929631ab3dee9cd03edff081f760f1968632b5a23fa5163d7b2ee7ef546a05cbe09400662792015651691264775a989649043391960461128ae2b3c5e26b9ee73ad135131f4f5c3d84d3b3ec2bea3174354d3ecd3ba9ed86f0a83e83ce376d36ebce4e56878f13d243a0438d67a852dcc59e55b9931df1f7271fe6bd8a8607378dfb9a94f2c9aec1184f4fcccd1d832c844806eb3ed9350fa89a5ab7a9bfd3658be9c852d397b3867d41373ecea228e00c0ad0d681541d2cffa7f916ae4d885d80094614cc6198aedd16a837deeeea83973732001d2720db96d9405efac76c6be4da925f2fcfe486c240015c904c1ea3e05da8fc64bad69808aedf0521b6163d34fe4ba6803b1dcad74dd12165525bbd61fea42ffa97a4eebf89138dc5820c2dfab4c06f602baac756a0a60ad09a183c869ac21f4136124c46088c7d28c3b4daa0ceaf2e321a2228fae8ee9d647beabdd8a2715edb2eb53d169db837fde3a6afb18c466798aefa4c2e77193d8370299dd2b630431ad9f43dbbc91562a77a6839b77e54bfe622c9cd5bdbc48fd02f7b690f369d8092d065ca900b2271a7e07ff53d25287bbd4de7191da76ef8bd0256abd8b4077bd5aa60705de47dd981ce346e9d11404f8058f8bbee3a770cbc8131e2e9af0cb955b0aaab5fe5762ec79c4c0251b34a8fd20c652248357b305134938a9c982bad859b7af8207ea9d5ebc31d5d159ba5d114b0c2e8a608f9f81d84f22f7c0fd2ed07b377c34a20876360eb3edb332ac0a7daee887b922561e8640ae42e026690ec3ea107b9376bad5bb96d170954f14978a73e2c57a72b5185d73ed022ba3cf42facdcd12662c07a2367d13c63d57f9eb7dbf825093f8b3734f9894c9a2e136b1bd4df3ab776bf8c5efea015773f364f0a1bd5190cc5b5818a2d82bfe0b85a64554920cad8cdc94272e06248b01cb5c8d3d92d6eeef43acef9e5a3b0b2f3a27e506c3a0806e26e3ae3bf803cbae86e9aa986999d0c25ab8e08d474b57d6a6c2791c09358ce5f2ed435de9267d41cd1330fb68239f0f4583d4b5c6e44ac7717eeade8b5538b9e8bbcfde01160b8347e305aeb7fbc49caf15b160008d4ccc44641e947287eeb1af543804675adb3c9d6012f97fa9a5313e7761d41ccec5abc77afe86e5541696f0c06818447a573376933f24e8b6ac989ab0ca59432f1d2da1ca72fc0d42163052084561bfffe5327b82757619a940986cc8d6399d39bc1a7a5c633d11db57477e33b9290170efff54379a383b0ac8f85cc86cba51730b3afc36b7921aa741a31b49abb63255dc63a8ba97b37562ae8111b7732688667055cd625843502d3d0bd2530252783714261f11552cf03859fb349dd5c36998543295e82c98daf5b1494b57a843fe9cff106246bbeed314312e6c8379da1d93209afdce1dd8e18706232d6084d1ea0f05e91961b040477e9ee1627047b2cbdf3a55ac1e124d8c6ca56221737e4665158e78ec681e6974ff08debe6c27959c020c2b4ce0f23d042bf4cece9a7ee8963802868165ecb2811ed7eb277f01c9b886fce4821aa7f1704c5d2edddc6c01a6ffc9db835f0263976473d145b2bd9746f37447f8d618b1f957474bf54230d7bcf24b3f985f48c4dd584557c10c43476ecfdb1d561b2dc5c7d51aeebfd2b3b2019af07a686ca61c7c82b34743957b215aa4992e43f2ce74014e3ddde296dbdc9d7e21539c8e04b59b6a266872564e6d2ff916426861e307d0481ae10796919cb7274494dccd4ad563990781f756a2721857b9216d7354c65b4d18c1d6d9be39771bc303cf3260c5fc96bc5b799e61793b45ec92f92d09f9cbe49f47f66748fc06e404691ec42ecd8de9afbea13471cac04b175fb499ebe8479617391048192d8c0a718d718c9c343e1b46711722bcadd0f1a04e48bee0dbf8e9e860cb851714301370396e90934439b3eb3e8270286a93c0f0285aa4d11905677b84d0242cf81b896b33c0daf943a33905eb8b249f48303f6fb49554a7eb9798366dc6303f2375f3c9440d72b87aa735fc41d9480890cff785bc9ed54899d60382e256ae37db65daf234fe5eb6316a30370815e34a8b9a6e9b06202f9e6be930c8ac28a8fe6913c54ecb3aa8ddb017b22008e6fe4f7eb72e175cc16b90a8f9a76e93e3257b15a83c45d16a58133ed4411e08f5a0feb44ebf63842990059a2df1de5f302e96264cc73f0d35744224c96799d2e9d13f7488a7e54601a6e787ae957ed8b6ca37e626efa448440651ab20abf92c6b99fa058c70076cf1b61db8a31bb8c61e01469b5f3bdc4a3e152818fe95a7df230117b083a130bca0c68f75350cf3f00fdbab8e1e344fdbccaaafb68dae09b3b8107fbd95c3c700b7e125068cee961f32614e078c6065c396ccceccf57d886fd3cf1874e95d36fedd0cc7b2cf4c0b1b2f9a184dd14987c943836da15e8b8ddd1b44cb1ca8f7e47fbb515dc227abb9acad8fefaa14771bb77bd7747eef5e7ec3397981fff91a394af9b7cf7ebb95089a5446bd647d718b53e8d1cbabd080c4ead4762063054c9d293e46052eb49160accdc968c436bf3d6630785a702a79c81a95419191f41878e23207e71a392829abc020d91264e99bb7fbd50a1525cff11a23e4bdd1ed03323e7e015e8a73e0cb60d451f99632770b10f2eec1e1e80ca6b428678b6b18973305ca3d50c58944ae90b266af98c6f2f737bccd681d9cb751ae49d0e2a69e5be4ffbdc1a714a4d93b060266e25f48e2c6f5027ae812685959d13029accba7d7abf3009749bfec29d8896b5a7c34e1cde0126cfb2705757926e5857ad0225a94f1ab3bc7200e88bbeee09549645fb83dad56a15a0f41ea9f20b2efc936f3e0191fed15571248a117e6d4293b8228f7b995894a9f870df054afff1720c68661ee9b82365109b75ec6262dcf39bed6c3ca00720ed076b0af1e3b96a5866822049ccf3247bceca1e84f18b32e4900b347f656da96f7c6734e882c3d40040411f1aa21c4f0a1a34f663a232def763005a8c8ff898a1b5e9ef617eabd90a0829951a0fb02d80715090110ae65b9c5361511c5634791452679ce55ddde3e64ca034c07c4b2a8f62c17e15723213540fa2ba877eadc537c064bffc96d67f258c4970966e49d0777cfc02d9ae92a0bee658f9565fd0f79c8e65eb0fb03225383599cb145c38b9e90e64d0e5e6848e2d75d88011702a9ab31aef80a7405d50aed6f5c6b2cc944154b5a06ab2d08426204cb5f1416637390c0466235bbdd49bf9eef1d60a45e8f13b011332d8e31e2347c985df5e98632d17c96e45858f146199fc228b734ea3540c6f41cbb0a4bee0047aac7cd18d5b1156e87c59bd4ab94c0f7cec59965d5ff4595eb097e28be2f6d6eebe8c32cb6b7059cff4f27b672fa5daefd3b2ebe87b2ca25df419d70f26d24f8420700ac930b4910e7c82486ad4198cd36d49dc76819767fb60d416a5070cded966bab20d37688d22879bacdc631185a60d60f08e1fbf2aa5ab5929f3eff0f56d15ded10dec06ae8a8aa0f1124928660658aab0a581fe5aeb181b79625e4923ada25ee051cb1995c51a34edd2f2c89e42c389a54364ef894a5b8d9d76ee5ffa1990bd587f510ba360aab9db64fc7caf09d28036ee450d3631da41feb7fcbfe93f657cb1cd1a7787cba0b2426ec2af08ba0a10fe1c8ed1d23008bb259c25d3619d950f74e183c78384b0c0db46e1ea4be1dede6344ced7fdc38b6b9a99d65503a2a3f82a432986571a4f47de93d6b8e90fc52afefd717a097ac6d5d647aa9f3ffd16c93a68783e530ad0b9e4bc1d955092519939bd034295c44f8c611c0f3c86eb61f53dd7fc5a07c4e9b9864632fa2318189b9bfa10cc131e89e1b38d7097792c2a0e9d08325405d6fea93bc89371c11f6ec49e3b167112080a8856127b3a770db367e08f96c6adbf841b6d99db76cb06d886d8f680dc030f45e2b1518bb0012ea2b3a0b4b62c8ffd1e8294505783916cfa74b4c2ec677692c0836db12e82c7fd8c54463dfcf02d0e32715882b422c4c028f0ba16b59ded411eecd3c7d01d0bf8b4dc5971f7bc0561446a22875dded59f088d617878f9c78895819bfc1cf97dbed0ae430722ea99a4d8cf7af4d1023457fdcd435ea305a5e7d8d41ec461a26dae546cab53faf65a377433da51aa4761999d12c83fd04bf8cd6d66e4b74a928c45a479eaef0c79d7a78b19b90436290dc25b1078926d2740c7a7bc865b44643a1365789a4ec3ef9253a1e3afa320f16960bc28cd0ce6420e653c476c16cb71f7a60bcb31e9bdc20aea3d4416a4e76b34f334de4df5e806c2048f8a1e706c56556c0be43a46568bb1c9d1ad969ff5e0d108599363e3cef00c440617060e838bd3e3ea762beb2ac71780f372a7ead8ecce0e9f0ab76d27883d925450cb37cd8ce39c2bd37f5ea6eebc9e0745b31c0cf99c847986b0e87e59e68deed9c68286d414f344aebd07577d017fa19950aa0e91ccf87da9d8ec2fdf87853a1490856bebd887c94a5d8bb8fc96b446eff92b6a4fcfd91fe697eed873a116ca93b1a6d94ebed82e48e93257d7ecca6bac25068c8e15a4d4cf8676f4c0b3b114c9926d5b773852f81ce8b190b9642084705cc1f1c75efa30c72d1b01414ff2ad38bb4f5effc5969b58c4800ffbad5525bf18f44695dc37c85ff4218a6fc649f863b4d37042e6f19c6f0504322918e6c3fae203d7744debe00c5440fcc6c7358adce7802bdb3d128fd232d483cc4743f3b6307740ed04953c5ef5efd4c0c333d906fbebfe330877ca24d677915fa8fb19638cd4ff6a90b211ca3194aef83ac377744a6d43e5097fffd95843d74dce8ab9a56f938f6782c124d09fb5e7d7ae62ca975b8aa96b80b9755240efb231186168de51396d8e5b50d9f4b8ea1be98ea066f2b7ca9b313ea2ef4228d1de84272d8b80ca4d16297adf95c8e5a7c7a86bfab118e7b395d073dab20b6870a8c17b2db63f433515d371cc0cafde65578eb6d05d7c53cc35b3c0bf62208862ad7375005d6c5487d906c0b4931bdba958170fdfa08f947ad765c5cf7424111e5904b534058a66bbfc5df807cdbf95ea55dbd7674ee512561760c3996c789b1a381fac47332bf257ec23886410fd75bebd479e05acff65d4523f6a8bbfb07eccc70edaa86ad39fd23501e2280147f37d1ad4c4394f40f77c344c2b44e24e44dc826cc0d600f3c7c1437395e21331a7dbeb2e0a809a5c5fc42a31862378b4759ff6b3ef6eba0ef28ba3f32410cb4d0b21aa9da16a32a40732a069ebc5e78599ada06eb6b0eaa7b8c7d30b1d32adfc8604c5be59649caa764e236ffc9ab324297bfc17c77b173082dc6d15d1d61fb2b0ebe90a72fe3ce2257d4fbe191070329d81762991fbc44bd95fbebdf269a522045d710c8e95a7edbd5671ced1d583136e64bb2e96d1865c24b8646def7be2ad08cffa2f1cc9422f7650363ca7488059348c1791568ab1e40d7cdaa0396b3cc636b9e10cae17a02a1901096209e7dc76586e37fc4185eb75fc23adff60d6380006a1c20fa2ff466ffddf67e99a421bfd729188b9f861a77469233ac5e64b48ecf12e29b2abeeb9539d41ee3db8d5a350eb8c7674eb9c5a81ed222dbe4a1903df9ea5648019745d878fdee8d8e61127035bb5ad978b948900e076e322fceded6a67be1f128c1ec77e4e1cf435b2930b972ba38aac58f8c773fbb7f7ae8f286a1fd4bec5c4644c6baa4072acfeaec9c58ed3ec9a2df4278a7d875bd7ab6166fe627e4dd520429bde8e1f765f7e2b23e95d0ce75886bdaf36702be90fc424183ed4cce1d9b0a +MD = 3f0c0a42125704b35a6d63a5c7a91a4ded14d433ff3187ac3a5899b89cc3e9d6 + +Len = 93688 +Msg = 84f16c262b73c3c3a647b4ed6f54976bc42ebd189d3d032fe11ca7c5d93f5a97e5d996066efc31601b023361482de5fab48a2a50791b12084234adc2b8261de33d1bef98dd41ac18812baa29667428e5cea59abef65842c0479e0016d09f6bd0f48020e3608a5b714188c44bb3708bb57c46b669fa3ebade5a2149c90bf16ce572d0d1efe01e66f5c1e227d1166b33f1253726596e13a3eae28430e4506647aa20d3a9c54346f62c6a007bc276ab4b21303e91963b20246c47905c6e864425a76450516c734a339da4ac6927bd79f9cd0724a02947ad66edf00d766f97d42d65a71171ec567244d0d8ac9807d21d657e11b0fa197c0291f547c325f06a5e886b52dcb04ed605514d6cc9b26a9ddfb9bbb6ac476ec166cc0ab37912f7e72a5d41cb7ab699da4d849dcacb5c5906071a0d5ede3130fd233fb69cf9e58ff67fd5707cb32cd549900347587a40daf5dcb2fb71105e681a7f13806a0945bd7fa7187fcb4eba0b0d17f6d3809e06f852a7a90d5708761effc370f08672da8b6ae84df6221507420d2a86c9a9fe56b805b027cb798f225894367d8f56fb4d009f8b9c5ee8cebc823111dab23a63d624f63f53be3d6c0a20c12263e4436e462407d72e3d854280d361131c169d9531430e9c556d0c69d57d6ecd4978b6926c0088162b1e6139fc3e8579717b395c0d1d330f56604f4c2b78838058d1152e689b0b8ebb86e47bd8ca858c036b768013bb4edf7e206cdeb617e883b879c90be1fe798904ff76cfbb804991fa6dbcc8ea244855f434cde71b64861e90f83bf1802fb84d31107ffe4d66bad37e0a73fd3a6007b9e124d82f0567439908d4d2a7ed38b222684267d13787be99b5c803e7ad7875536c79f77d1a27083b4a97f5f7cf204d52d11b960d21e83e2aca32d54ee973796abeba919a02acbe4e7bc80ea7cff073249625747db29323cfe3cd4ffa9659fa47fe6f0d4f66fe4b18c6f0848094af0bdfdce86ae8938f53d02923dab35d33e2335521d562ee2699e25196bf4ac765fdccceebde156ce4b875c3bbdf40e6081874eb57509b412b8ef3444227cd0f1b313391b639cde49b3906d91dc46ad8e08452e799e6c408151495c87d24d015d88e5c50d1e4d8a3babdca95d2f3f9dbc30e17716fffa3eaec120e05cd1e1d80a4fe8e31c545fe524c2e0a1d61d2b599ba9e09b362030290b96fa722bd7d7af98769125c18c6079956730e9952cb65b7cc1c72d2f95aa7a18415a847d2a9b0288ab531fa55ceba1fe2741e322e44d3e0027098f9bd6d5ac653eb599e960a87b4b4cb303301c4e08df719820f7ba7c5ba6282c44e34a2e5a730d9014c9008c6460e935a2ea612418a9e4a815ac45b04edf73a3df9e8620feb22c7ea7c480c37859ef5f614cb1fa5bfdeef64388ec85822c6814d2361169f3b329d5a54477ca01a6eda4b0cf953d4d3bff074d363568801d93d3af425245e3e66439afc14c2caac8628a23fb716956f4935f653ca6d5e3137584d93bef6149dc8a2f29d37447de4ecc943d58dd0b23b85a635e04c75a05be8b8ce29b4f288ff60a0a95f396c806aaaa376f503e9f1de7a2c78a070d61726f54705dd8d82840d34260969a1a19de5c8a083c7a2c91b0130ad06bebef88b3b65eb39d8d30dce6f4f1d58e4f74a9afd4ca7b174f1d9f84bb0122860be44c441408eb4410dfb2fccb66bdff7c4d1405b409f4a24797f4f65014426aff92089e18e17bc41c4b36fcc73fae6cb8e9d57a7ab7294fec024e9f62b2a48d2f6f5a3c3586e9a007f9f56188cb0b587e016a7889607d82b50318fa737abd6f13d2cdb8ea67b96a5c626ac580c7793543fa4f7a708465dd3b10c07202cb11736572bf7ea7e26f75921b03833f836ca5a35af11ac09176d1c691f1908122354c7cb5cbf81ea57074319a5c3525ad5a0c0499fbb3ea1624e3102d18f08f2e8d5cc2126fdf8f1f60c8c356e155d393b5eaf04dcbe05d90f4938048930c7d3eae26ee2f077fa9beb4f5bfe71f6fb9e524b4eeccee2abb806a65af5b1c3eebd10c3d49524f62df11e18d9fb172ed49001b1c68bdeeed54730adbe5fb01124b842bf28c2294239fa77af2db4c884911730d63e6972ac2d8d73a68dc9eee212cd681f8ff16723c7bfdf5b81b1edc2da3bc703df0cf4e25b92b8d8eebcd3fd5f036b2c33ab46617f463c65fa7becae5605af80d1feca59075ee88c0abfc72cb463312b3c772ec308997815c2992f11ae7cce953bc75ed9d8fae90a085a3235b9f3a367d2de87130bc079b301931cb28aa90d8a45ed162a766da59a11157ce115bda9271b67b9172fc12987def21d5b909254a619fa5c138abf02844d790df871c92cb2429a2c981da66ed9823c99d26b418c33dc76975dbcf8ea0fe30d4d42741d12516dff485d7c7732f015fcf8e0c1be9b77b9e72ed0b3214484fc59a587c7c3454cc51f7630f53a5c15beb7a14d3b0f6bbbd6d78b341842f82bbfe67b8e11c3abeb71811cd730f9d490a5f7fee1803ee3465bcd15519261ed4c553b3820fb232e7699ada41bd4bb82a9f34376643953ea62715234efca880d2fe5e145052dedb534672c74c489894ea8d024719d0d546a5540ed50d567be3f1c985e08054e29276e0185f69af96a20d463215755a54b4a68ef26d1cc120c6b5a963cebe706dd6e6c8f409065ca66e076d5c29154a83f72e3a685209c7378793206025575ff1371763ae6aceca48576d64d8f8562bf39c90e8f93a30d310d52ec1039ae75ded218d429feb1f830d0ca3cf4119c4792403930cfd7c3e6f5d0dcd0de685db04e234bcd86100751154ec4f0f2cf3ecac85caa9391d9e8f166cb00259517cceef50cf2aa76a416bffc074d396e51d4b50995027dfb227bf42d05a73560cf62f77b98f5b42343450a8d044b619020c4cefff42a373539e2b8f186b7466516879289cc3c30b574fef96f4ca8ae82c378de50800a0968a687055b571aa1cc77a389c7b2b06954c0a9554be74a6969c256aca4428a3abcf2d0a3137fb68ebe771ea2dc5137a626aeace6c8de1bd970a6c802a440931458a42759c006755463a061a671b1ba2e56c670748f380148bcf635a6f7840bdd6544f3f00af53d3de279d25c2ddb224a0a905dc747fde6fc783a05614616dcde0a5b9c319b53f88f638ada8eb9d655426b95dca69936b13ecafb9ffb39fcec5f70708ae118288d93105ce202bcaa3d5ea05c53db2dea4a56dabf6d3c774025a8be0b24cb2c7ce4910f765081df60c1e6d16d2b2caa21998cd111d6eca9ea6d001db4d4b67d58e5d188608dd3caffc8212851cd62b9e38528d77642d27600aeb1b5f40269b3c3789aa4a302c0248f3c58ca8f9f450139f871137819b7878ccf01ad5214ad77c685368ac61610951904d3e2af0b9c2b2adab0ae9ec4638395b8392e57734a7168f4eb6451308ac7a308da963a7831debf112ed070a99e132451a05f89870848b1ad0257cdbaf85f3830b50eb74ecac3ff86309f773130df4082806973b8afa4a998c28dc11b2008dd64ab73aef43081f22101463ac4e08ef1331f739a6f062f599e752eb5bbca689c8c05eda7d42bc1a0cbe8eb42cb77c93f4cc7a68812d68ec8a561613102c0277c900ca32b55822b126a2cb715acbe3733b5be2ac40be76cfe96d04fbe58c9ee865805bec1dfff664fe716d13dd17a81d4564c26d6c0016f045a0820e325ac65c0cc3b65f2da681b5f2bee6142a0764e2b17bbc2479bec3fe1d752fb29d1323334d5f5c145ae86f14b1dfc91aa8379473ee151289d026f859df7f50817c42300ea597afa42c421911aa48787ffe14a14179a587d635f54e941a13b7135664776e8411337718201a2d4aad96bc822b25cbe2c16ec1e196112d4bd6a5b0b20653b387608a05b51edcd821638668ead79c7397dd49a58985fa95e32cbf0225847f7e2dfa15f879aaeba2ad0eda0d8ec67ff9277d9b298441555e8eaa6580177b353ec6326997dc30c10d7bf3f402e4643a9d1016f5a67854dbf78cc43bb30e672f660ecde79c636cf788ecd786e1823d770fc02dcba4cc3cd8f19c0e940380c4c8a45611224e959bf9959e1df541febe9f91d6469fccf665e6cd0aee10fa05008b4a4a90ac56e96a41c3fe3bb17ca0742ef3b0e5e4578d6c8fea77e7451f01c701e84ae0e82de5445a849bc55e2a2ddaaf85fe803c0d07bd3eea518e72eb1d74a70ed576683c0fa6be67d52f5db2ed6e9bc90da9f925ebe47e4d26585cd6ae85f51e88c59f19cf2de7de58ee22af65ac6e5d6cc7ce6aa05eb87374b9557a3b9776a7b3530f4fba36616895866f882d20a1839a6e0e23db98880dbb35ef3e4b15a63b13b34b36375cb596f99c76d5ba47dffc25014ae9e43e676c78629cab638cfe38f84aa575fd0d4eda1374eb0083ae74278b260735509cd1201aa3e04a0b69f921ff9dd07741c4b7b271c43ea11fb108964b50b59eb7505fc9309e5c82b93921a688214ec2cc1f6aa072eee42ff4ec07b8c3f5f87e7ee55db848a663edd3870207208962e0e279d234b5796e1589dbec0fa39a226d1db8758dd14088f410b014f4671acf4a2b70a8efb7e85eea74fd301b68c1d5d32a6611aa59115e3dc750d4ceba79e6671d704921d8b019271ccc7e6c61e185591b6accae4e8d36138df5bc26990b4ae02f052d7bb6553f5407b621634d9db3576732f0fa3018b32dcafb457c91636f1dd6bbd06dcf6c33e9bc66b3a08a4ad266945b492e9c4847d504fe0b312206b5a8bae0dc7892598960b14acf94866d850f39401fabe19086b1d25a77f4c959c0e93230ac1c9da1c2417ceebfcfe09a2da9bc8e0f02ae85d24ca9bd1637f5f11387d317b9da4fd9511475af1ea317454edea49161c3619cccfdf172506b46512fed23f2a0222774c842321866cea8f35b067806e25e9949d95e4036c11f38fe78819b7dd994c2e89a6348b712a30428f4c9ad3afb44c41189d62c66e2b42c5d7ffda005d0a290b949e01017ccb0b75a8e80baba07065088510e1c8f3fdabef2b8b9e8272fcc1f6b49512e96df88310caad43710b023ed22b15e771c32f35f52c53eba5e3171dd832b3f0ac0d58a1fb3bc3c98bb611df8553d5fe29a568e8bf1f804cd17a044497561f22b324946c1f4351256369464e0b4577ad586350cd364f39466efd6b3e1d680230657a53ed622c7fe05fee49954a49247d66c390eb4003a763e435f31450b083a329d63e2aad3c7781e90cc1bc2ca704f4bb8ed04bc682f22a9bea45cd1a76cb026902fc2de9bd5e90688a56c998a63e9cbf8bb7f3b1154123fce40971620101d58cc436fefcf55f954431b1c6758ffbfddb84eeede704bcd76deae609109a4ea5fae594a3d02d9f19e4c97abaadaa629d753f1d4152978dcd57c6849c0b89daf81a2dbd264bac49a4b21a58ae273f9c06f786ebf5d916d98d233e8c323d16cc5956635a8e57bc83bc15ebf4a9cb96d0c0c71f001363c8cba0371ba6d38d894d4d155112e4dba375eb7505f6b381f727514fd205a2daf6888dfd247988e329845ec0bd8e2fbeaa49b83b3105d431a9c943f569a2ab25e83bdcdb23ae58273f9a13bd707677ea1924abcd35c915c3f5dd1e23aa7e352ce60a163bdeec4c4113b6f4753271c54638304d94d9ec7d1f238b68405f4248d7381dc2841fdc6b1aed018a50ca2720ba4e9525f8e713152e7bfdabb44e95ec0e259d681eac26bd9815a35cb70241902ea57bbc6225e8e4d644586ee640202ab9f6b291714d714aa4d2c3f310a0671d8a830998385d13f200c8c73a40fc8b09c0f483c4e5cc651b276e89d5c46d40d0b6316743e3553c47954d7096294c7d920b643989e2f0ab37072f1e8c3c3175b09bf7be45ccd60aec7b1c7b0a09f69ecc8291fb68d080eba62e5eaaa0dfb4adc51f1c36245aa725e89c7d111e49c397bf0ec2f2ea1745cc718242549714bd91182beaf66af4923643deb75a5b4f7b1073953e46961f07f79fed2545fb4516c9b0a8a7279e045de5052b147d4884e6b0f1004e1ef4508d1438564da553d985fc967c9cf049f1d1d9376adaa26e50cb2040383aa28d13a1ca45a4039b2838d3d2d091117af223b6bbe18352f3531cf40868244afce8ce09c1ccc18f4f01cac8f568cd4eec2102d432095dc495814e270e72abc6518eeb8ea2d89439ea66f62b0a651a9a6f5ff6f2e7b9e278b380502ddd65b7f5cc05d0f8156e054994df27c6bcd05f3f2b3267da81f8f9b573d688ce1b492f2092d7e70fc198fc0674f5c25fb0b084834725bd52a9cf8ac5fd0d60d17126fa8fce8b969b4f5d61bab32f30bf910d70afecbd602307447eee7aad3e008605028aa6aa476366c61cab7816d9ae05f00d0a4184b8154262bb79123c8c2103ed2e5942bb6130afd91621ec3025f3b46042de6f012eef032e2aaeec44b1fd8fe76643cb464ccad2a0356637087d584865f7719dbc287bf1b2b3d4314c155cd3fa929169d46ff9762362c1802347a36607140df43e0f7fb5f53f3408dd2006762e9b8c43ec348543698679ef0bec9db84f82f89c0e4cc4f6ffb4179a7e3ac2218b677982160235e37a87d7ae47d50ee644277abcb445125dd9fcc30fb7cb597c1adfa34dda42d2fb5e4f23e25f69be98eeecdd7cb96430928afd818e103b942ee2eb51cdc15a24361dc4a5b6db0f747556b96705a410e83c1aa1983f12f239e0eb74ca2a52b3f339c0d0a4504431fa258377627ffdb0000392ce524b445910393e60578b16b507af4f5a6ad8223616517d0c14124dae4191f96ef5da2ed6e3e2e299401893c8283ed0493d77fb8691a14d62c6e41a71738b5768ca1359d27882df05cdfb53551d8e4d876654598932bcfa60bf20ef615e9cb4a4191f4cb698c23e8e4659dec2af48cdfb2c99c3a7c34b8ced49ec51e6c96a190a2a268fe80b4a061bf25dba79a614598dd96bc2480af50cf3aa70ca687e9d8d82444fabd299c13f931a2c71e0ca99f825b4f4ddd4d16381592bd6e14f43de19f4b0c227da0ad0f2e006f18b61e280b2ab045c9cb3de3cf30714431f03e1d5c448b7a88b6a251e26e9fed28e63b8708f0712cb874df9296be4ade10aec202996669f2960e9b354e3964af7044e121298222668270aecd2efda3dd82c73c7829736b06c2dbf7c1931cf31897489b90ed4e2875b03537ede8ad00e500dfea08ad0a1349a7a534816197cfcb0677e750b4c307fcda38e76f641af667033f771e6488d71dad00fdff2a285f49364940db106f554e690259dc11e5d8e6028c4034107e4b055b55a0956d5d25e5bf3334baa0c174fcd517ebbe828c3ce4974cf1e41168c3932b49c8deab84c852f9cc3f59b6680b8ab6e03981267c96d539d7e898e7c6f549a523e345556d9b038e8acd42f1a16d7a7701afbe8e458b5a52d3b0ed1417349b519a6c640b462269e5e57b00c32c3f3eade2dad11a656ec68ac6d73b26e825faa903d0b52dcd03088872a51dab56d569b40a37736b5ad5bc3a07b81d80a83e0a23f6bca34d509161ee98e7e42acfe46e31fe41fff1a434adf93cf00ec1d5d12c4af99cd8da7f7208a0eec01eb1e5d0cea01586d13dc0201e30cd0b895b0fa3e39672dda065b8196f17eaaa07f1372f0d771672b1b03d0c7f894e6717cc941ab28ef91ba47f78ebf7ebf3224a3942539d2f4791fbe9897e646b279f249731aa3bad02b35f78608e4565bea5401a75e310514f612a5a23ea4f4eef104a3b36d6c17916512be0dd64da4da3cfa4157051e965846cd7829ad4a2bd0b76f3293224f66baa61b4696e0428ec28fdc0ba90249ad48d115de36cc1f12e131fb9f1a2294d0d4551634280e0b3c9d4ac405a73dfa736dffb57fcf836dd2a8c86f925053837c66dccc33cc48efd7f2d778da589f790f4e397304ffba7a92ade495b23e9e6492f8a205e9897637874a9dc030c40e0daa74e51915cb59907b79ee33a8ebeb7e3c120f88fe67802c732c0466b0f473ff6c656d6d593d48f5b5934c121b60231aa03d8b1f1b6e4e13c420743001efb7977cab3738795c6ff1678368fab4a32c80e6007e90e8a7c837a1ae55e8cbbdc01d03cead411c30b6ceb9d2a9b31bbef0f837e450a40c19d7df335f0f54b86778d928543552ebc206d2d4077604f7b856cabb70692330cc6152a2ba0a3d6ef4c61314c739318e194547e0aa39b6f19a453d992c32d5fbc94fd91548af6a956c9112eeae20a7ac3d5d7304445991b06ba79afaa0118216178abcb48f64a5d6d8c31fdf92527ced37349f695c3e5ddd33632905556ff128bef943a81992b4d93f43820ffa3778fb0eb412377a50e21ffb6132e3d2b5ebdac783b6196ea26045a9f983a56e37637bcac4169526f7e81fca89fdbb9f4938d439125c2e14fa71c21ecd6aca76ba0418744bf1abe99b3684a8c3d2b64595a0bd1c8d7e109504affaa7a77ea59b2824781333eca24aa495f79df7f8fc4bffeb3d79db64e77927e2924b6f085f64e98b43af634fa2d27acd20b20db8b439f1e0fe57e656da46cad135130d501f5a65012251c362d20785a6a6eeed5a0698d248a5be959c118657458905699e0e03044ebcff3b6d5b732de8325a7f261bee0aebddb6d07db5c03506362c6c3a54ea2f39bbc3b3b7659edb5a6bfcac631bc601914c487f42ee7dccdce58dfc6b18944c8cc4a51389170ff5c5fade5a5b2ea51e029a7b8b34e344848f3e32027b828bc50d82ac432b994ee5f1860872547a15cb057058da98bd9dc5e6e82267b0bb5600859ae02be514e311a6b880dd972a9d706476e555b9a310f7aa8c651153eb7d67bbb749b4ffb057e3ac3850816c64c673e5532ce4debe2682a3d104eaab398860797ff0c4c09430c1caad80481a50163d51af35704e3666ce996006d902ce0055859adc4471e9f915cabf1619eb1817366f3406df5232594354e073c59ed26dada8b1151d5ad6374672171cdb25e151c60988a91b32da854a9bfa5398c86c55d0aa6ca435c38474bc8b5d997811d64b56e553260a365774493856af39c8c4422653729076f41a37dfdc3996d7f71c8d4ccd3e8396a6d1aeaaf19b8e90e603bb176b6ce1c734c109172f511ae01fde9f1286f0caa6c96fb9d38f71f9856a51490bb901a00fcda171cc4a502d7bd0420a0edb120321e85a1f2eda82f7009bd5726a06dad43805e1f766f6dcd790547055aa934c34f14bba6821997390e9c3b8c19c1a9e852925aa234dfb9d2107f191084d754567fd3ab61a1696efcc282821bb09bdf6bbca74237ee9213d12c8f0cdab5e4ba6a32dfd76bf74979cb4a51239ea19b78a7f033c758fa33061b3bc994bc747db16f169db23dea365224f49cb28d535cf01d8bcc3c7dee1efb30ac93334e36fee3e58991ee5000bc82aa6fa9a1504c3cf04cfdd5342f40c27db22d808af883e4bc6e0a50ce3ac14875cbfa1c628002d7d3a6b4e320d588da08100d25ee53d1cbc559175ee466a266c5fa427988b50d9a14cb4f7a85292ca224cae9d7efe8a71079374f20b35c2a93ddc5d7258637c3105e1b2c1ff362b2d75e43323b021f7a5f52a9002add93d05c37af06c4edb0d9b70a26e927de3aa1d60f2974a3b760d204ebfed8e1a5a62a2c6e267fcc1188a81a936ef546c819702ad1ee2fc6926534bdafd947f9bdfbae80ebbc909fb457b4a79473ded12377b43220f1d208059528c60898cbb7890cc4062ae1f7d4288685ea87a6147b82edd4a886e509ec936904caa0edd2cf99620108b63703fdf09da25fe796248a58e457ea6e2815e8ce697f47e3290b966193ec15281c4371af1590743ec48da237e3b474614ba471191efeaa59dac490640afbc7db1244d3a686b6c3e7a1ce47826480d2eab02439f5d1e98e7f839c62234fa68d49a966989959abcb8cce54dedaff3382750623a7f75ae640beb4017021da72c21e525734da16d5f798aabffca41c530f9abe012faff27b8db1dc724ee223e722a39d653cfb46cbd495b76e15703455e6c6387b456240ffb1d37d9d52e6b48a1b83fb3f157f4203ef0e74fdbdc1efb2848215c08db0bf0959ae07b1209214d20939ec3352c8c104b35d73dd5a0ba6ff7548c69f6d3dd51ee1ac1b7c3c96cd35983ff0e0898a2c54ae1d349b7ecfd2a34594db56784c1bb6e658294d0b47364b3500a9d50e15fc5a5bc827a690812b3451f0b484137e0b57d42ca1b21135f8796c16677f750ea9ac28e8dd8d43c1f92946e6f2b6e3561c7837a41529e2d57c56aa0bca4e32d6ccb0b1f9b6bded04d50870e2165d4c36d79e8d59043304c84a498b3b32dfec00ce1e637553c700bc37488c6c8fe5d2c2c54141b5ff6bdb60eae86c3f4192e50f363bd9d63527336aa86fe600cfff0b6c5df6f1455712eb41c6b9d9726705d2748d9f71a6cb5cd99290e51a2976f74ab61a262881bbe6c8ed66245f9f23b728b34ccfc76186e687c6995e8550e56d3512726533e59e55e8c651be7af008155c5dfc3347911842a2791a22d411cbcf4f140f2abffb6ecebf6f11ee982f74aee1d704607eafcfffde1cabe872d67aabfd2d38fd393daddfd13a1f4b53a809e25da0fdddd9384e8c8f43c705ee297271c3e098331c26ebf7b2c9e24b19f4286e246e6111e3a4f4673a60e401b29553cf37b0a582f541a9b4c8910364778e6090da71a6932a80521e54069b624c849f02cd2fd95341085785a721eb2de8f13308e46d66e81a54f810809745be2871a4baf8b0ac3a7bf585e8c2ff021ddaa72024d6b40a674f9d56fc34b58b6bd30705564ee5b69f2293a56ca07af0bae92aa87325e809b716b3ef2fe4c3c501e89f5173443150f7c16d466fc4483f6b80f64c72666bfd5e1c43213a15649af6b5c4f9805d1633ead4ece990a2c936c63e948cb0fcc25db2dcc5bd995afa65d0e6f26e0c1e16b7ced98cff4dd0808f417e7fd9ad7d9d934bb4b5e4cc09f7de26d8a23f84ebb5554a4be7f815b1f09173cd22c3c64d2046bf509e6740b70f3c4f277ede796a74a4b3a8687476dbbbf5b3a727cbaa002cd0542cd995a5e68328d03fd2db57fed72eb17b98f4efc22524b7a8f961b71b05d8c09611f05a2d162c40ae38b6bf3d4f4bba41f3e9fee9de96c62f12167c123db88b48b217dbdf1aaf26ef2ae10d9a5f843477f3d412d74ac485b5fc6a677a4707faa1447cb9911339e97f23fac18a9a80c69a2333c9fefc466cea32de17b7b44fb53c438f61d782550edabe5489a252a9d7351c9992e56594e2183fd20b5f07e8317629d063070a791d8e449ea4664a67ecb52a75fc1f09289bec8df690d4b47a05eb81d04bc3fe1e7c067139d04ad4538db6d74963f06989e0b3a7ac66bd3c6d8908c61f7a82efcdd0dfaea66bc472e520a6cd94692e0931572a0773eb7d124b615a710e7dc8520f82766764f567b8b54bf157d78a1c6aa7759c37dd9d98d88bf55d1d3dc3f8c74c27672605fbb9181c7643209345400054a2a6c35a0b94f1b7db9d152dfbb8b21c263e8509ed1d13a326089248093d5cd194c61469a3f5f0477a77134f737c94e80548eed158182de1d1be37766468f2a69276b5ad054046c358877222d9c8f2485b22ee0cbb4ee9410fd07a9ed557443c423511648de887b40c5acc388d025cb58e68ed0c8505b85946ebf631da8cd41b1a8dd240cc631581fc4d8c010bcd36a81567766153e12d930d6d14dff28e14bb91ed52c24f5482c5aefc3c0cd48e12a896cb04ab9675bb76d9d060e9abbfa8a62ed02d59652141e7aad346cc85d9632f78f0323bcb27d47d22b264ff74a5e26377d2cc86cc4df570665f56c08e13bab5326369a2706c2b3e7e8f9b71cbe5646bd371aadae35efff8681cc6795be18bc269b1256014d7020343d46ef13fd2a127e81962b628c8e3d8268820578da758ef6555f00526ed0b84290d79ee4f122b301c466ea92b102398382dfefb81f9a484ebce53f23512aa3984a726d95808651ce695393458b931c1037aacd5d73ce13b3386bbc7bdec609bed4e00430949d136ed625ce84048b0eb2efad4670c05b17af31bb1e62fdeb113d94e90abc14b0226875a44256033036f012ae03f7ed877bc90f9b0ee096e3e39cf4542842e807a644ad9898c371ccbd520876acfde29b688a3ad434fe91f4a8635beb05c9f8eac68be5c877d334a5ca6039cde88787de05781b2e37c3d667881b31744a592ca1aac487fd888f350386a30e7a5f9fc49a7b1d1870c0384d84aa4bddb89efa6c737b77faff73fe5c3019a2ed47ba4c8115f1019a647663df92377bc97faab5a0aa612ca696df289273aae53ffaa197a69990aa0ad0024e72db56335c911591b08c836cf38a7416bd1361f56d5cbb861b6c7fa2ce7d0b01efa530fcfeb5889784620abe49a2dbcfc6596759dd35b124c8d6e77150333a823f39ed5d17b5abce04731dab10a7bc5b968de499f94d2a769521f09df6b937db48dfb4df0f57253e1909e5bab062bec314f7ff3e286bcf866b93c1b02ad9a914f4dead084f649fefa96a8a7391988a0e27dee1cfd159485b30768332535938332a8001633da3c0ea9ddf335e1b14c844b98cb2d45edd3cfdce105da9d8028d42d20bd87542de3136deb00804b79d1f6eb14799d636c054752baa789f239c5048d3c859c8c7db99db532532eccbfa3793f658be5cc1c937ca318bfc9b9bef294e17ffade33263a1e2e386d99ec1f4b9bb72074aee67c28d04c6fd1026a8c2be5b85f8fb4eec3ef152781a24a3ff534dee0c9b65149071002cd446dcc7b2dfba7705fa6c925e343033f92a3c82efdf9a35ac5e3657a4a0364842af8906210cc3aa7f4e2836ef0d068d4dfe49c3f75f49973a96e63e0b15d763f8803f6b5e1281fddb3d56c206901d695ede72ef819d011d9f8c9c522d998c82de01257fcfb99e77010d1fbe0d871ace1312df8df45f6bcec188811973f3fdafdc7a64c9ddc8bf21da06aab36bb8a8c554e1b925b86e2fb289d1bd1d43edd1f1da3223d1f0098e014c72202988eb6d550995283f3592f4d1dfb177e6064db051c0728b207142b3224097a8a6ccea11861a745364d3926234ac6ed8fa25dc44d57682c43dc63cd6899fbf6bb49f7c3d6070c7631bfa3822e2d65107e306623287e4aaf5b059bf9e404f3090da696899ecf1d57fed124adce347a22c2913a7256ff33247029193b34e3a3240a19277cc3186e8d06183913740e5a97152b372c3948961e1bad57fbebb460fa38f82717f3718467effb5d5dc009aaefce84d8cb4fe8f80eb608f4c678f5d0de02ea11e59078d38b04f10de732b4df8f5734bbea1b5eed78f7d26c255d366762006584503a8cf068edafd73a3cae6d0857914ce32c28caef39802a9318f49908a9d0db02422c4f84127e25e14e34c7ed48410840e2c534d3f398bc9a2c9eea4477d2925657e5656f1be28656f81694a091ba7aadefb2afb9ce829ea518b3df97e2e156d6ec36c67c52838515ca9247b4cc741064937f802322e44d3e5dc1ed958363850e6f9ed74e6ec78e98265655bc70e4662f8e9a7a82892444d07c5798afd1ff9957529c3c57c9252f78abc14309f7b1e8492191e36a69d91205f4c36559471c206c45ad5a2aea32d411bb71a43ff933134c0cd45f3d6d59314947c3d8245b2fa697b940b53a4a67191de5c5ddc0de0e83c2a0f0429dec4b2f04f5a76593a6c088742df4d1f872385ad7bb5c643f1e9a96377e6431ee6f2577e37f0c92298265628bf4483507fa2d35d99ca3dbfd436dd70505bea1c17e6e884f5451f248a694b139dca952cb3acc26be0a1ab99de50ed2c5c74e1699828cfcb30615ea836bc4f12827a6bfc4cc8ba9dfa44f61a36be3f5f443b104d9240721b914d70f6c4a7caeb175aee07717f23bd8cbb088705083dd0afb860122db73b3cc0103b565db22467037504974b586691410cc72b72b74e4946f2b7fe901391f564b2a9102966c64eeed096f202dbe9e2be411d4da652d990b1f1ff5be4dfdb0f253ca16b4f4a166882758d61bd901577ae62f134c861486f97bd1e6f50a08353adb50ab0f7e77d7d646bcf2ca400521ab7752a29016c02aba05ffe83fde0f086a125ce284bc364543fba469be0b209918184b27479fc6f0f75de85de13268a73ac94d418706831b6b96bd8f6992ea0a5b596705d5798f762be429dcab9fbb9e1740b04cb915e4e6b7a846f84f6fd811efbb44c2cc4c9026b22932d8d17e6e597a1914688d42b213b2b10f28e20a612c4fae52e28e716f8f34ada1c70566f765edc2f8296615914ee7414495c3fb1bd5f5b31fe9ae90741c2de1f54bb9e1ed4fecdeca03e61708d4bfc9a5c367aa7e9b6c5a0a4caf12445a08568bcb6167c673f1bd088c8fcf6f61b6ca91364f90ffd92e13b090028f66d55e7bf3ca9e71098e96ee3237c5975b6266b4a562de57163bb57091384b5041fa8ad2bbcdb3862cdc3702e57a1a1743534a2840ddb665582f9ce12ab9dc1d6c4637fb5249532fb6f96c7b80d81fb7cdb0db95f20b4a344c214ef5fba9574f5c54c04635c1ffd62e72a1b892e629014107857e37701c5c68bd361f726b2f5e8882ce53f4dc1c01f9c4715aaa08d88c43c3f2419fa09f36145ffcce3d93d6d3777caca51ddc3a4bbf5b55c224d4a0a14c728ca089216569f5860da29b97d036bf9f059a0f56cd0bd5c3b99f91be13e8d19fceeb8256e16072dbe31d3b0bce00b75643d347e056cad38a37438f4994db69a823b329c5a5a212ae179e8a5402b9f55ef1c155ed6a214f0b394e6bfbb5f17b384567de0224a76b8915b717f530db000599f4c7f279879ee34a20b648f9b39cac8eaa1d80e0f8d40957e75283baec5de6a6ddfc740766499ed45b0ca5d2aa349189da76b66d1ee28b68cfc8740356657ea2fd92068655d59a826dbdb6d34dd963a17968371b722d9bc2a0f84accb1bd3a08c3f71e98ded962bed977e06e0701bf601760778eab0bc6f02b407c5976dba552d1ba209159bb83f41e99b7256e33e160350dec392203896bcf5f8d5c2e374d1b9749a1125f027accadb1bf7bfbe6960c42bf29ad5fbb4fb00da3f22730669dcd9534349e7734c3a3174e4de438a039eed0f2a45dec89a64746ac5f5d35c023e35bf84f881ac8db11ebcdf6f09ce749625046e0bd30f519ac3ad70950a6fa5be74c045671b2353d838bcf4f13a1223111513a636dd59416593ab294c3fc7bb263e5e6edfde610778287b0caefddf7ad66543ba0c232cd28c8d6dd9609aeaad3c3da2e8a6f1ed0f5995010dec7bbbe0afbc9d93d6ce136cd958fa661a4462e1c9169399047d4fd5432857e1f4db31bd62c22717db059377129c5abac265b7c194743a6a43aa10bffe89846e0e46c67ab820eb2f65f1365b000396bba0246fb467fd9d43aa9fb737515f909e81e4047d797ef1c4bab983806b33b553fbaa14210859c60d8085cca40653845797dc722f6d833fbc2387024f1bd4bf691d1f2d724031bdae0e83d76ee30c6783965798f85bd8df01e8803c2ed78fbde44caa430ed72d88109cc261fcb1334109c77cff410d25d97951ceb886680cb6aed173dd5d95f43119716af1b8376f1bd172742e704911330ea699fec097f2b2aef4a383c7422fc0b3d7a210093f69fcc3df66adefd844f7a72e0897422ae9b9ccfc62beb4a5853bc5149245578fc8ecc7557b052482672d2b32440a76e99bd4f033d7148c879fac377163180bf135f3c51edbbd790e22db84fa75dfc39ead0a02df2b0fb7b0241af1363d118b2a581aa580ad5d54461c0b99cec19f900fca64ea4985379de8bd8edaab47b94005d8684fc41a6e1ff0fec452f653d1470598e890b90e13a7f7120fdc18aa9792495ee6ab31497741d56f0f97b951fd4f48bfa0dd76ee2b3ba4caa5dec48d34eabd919aa211620022bd18f35061e4ac10a0e894b7ca4c07c3b88e58c9f81916ae2b1a8e1aaa8f912a70a07865343364f2d5bbcb08fb5030a5fc053183fc76c74859a0cafc46f6b3c1b5b1a6be7b67b05daedf4db652242d4b35d837f518cbcf1e0fcc54312bbfed4f55f086447da715b9f5fd22aa17ed861b2eae73079440b49a174636a0a113c83c19071fdd841c1d6e70bc53cd92d6c47fae30eba2b7ff002238b57830f21acbf0c69e7972d6ed4fe4e8c5e6060b046ede7c06a9acca2d3a2039c120cb64fb7ed4275c9decbc43338324bfe63cc9a20c9f61d7b50f15f5ebfbe313385841df694e03ea92317e4652b4ee53585915d6262c254b15b1e07d9a1bfe53c7becfed15c721ef602b641d33dd0c29464437c845ec900bd37c73edcfe85229d6e7574e09a84a1410c0b6f15f6847e8b7e577a2f04769bff756156e13caa63b6cba2029cd574601a9dabbe95cbb6738b4241c89b0a57a0f87291028ec29c334911f74a7ea3edd5d3360bc2eb44034c344e970a70c6e89a18ddcaa42e56d72ba4dfe99f0e7c3d7d1b73a01e7ee5d762e6f1cb9248c0a5f2010572ce483fe7975a93fd82b4c50fb043b50d23d937cf4243da54028b8e2c4321982de385044a00faccb7980a24c129fca8a77582a04774bb76c4dda195c807faf450763d3a8b12d5f88c418 +MD = df70d572b5d5992d51ad68843ca1d59d29125e22cf9abfda90f8675b1140359a + +Len = 94480 +Msg = 680e6ffe2a4d5c7d224cf04961e080f77e58ec78f256218fc3dde28860aac928ccc888e0ff5f75458acd46c579f718927de1b7e34b7d195c3fc12bca45fcd114f96a276f0d060ed0eb9fe4a79c2e92cae967ccafc08e94dfd98c00a798423e11361dd5131ceb2d058fed5258922df5860811b4451a319b00d866ea8723231806ca091934f3b5ddccbddd1941239b49ae2408f60b200d34a7867670d2ac4868dafe557b3a5b0d230dbc97c0c91721972983741a6b9ccb6abc29e51af1fc5936771a2a838d1c9b09b0d544cf573566e6e16d7ca8cc541242270ada704adbfd88c466afba95fe06969e500cce5546133ebd2c482996128bc6d0717efb4611dc68a9290da7bac9f7d2bd7516462a12cfa7a5070125309cdefda0a5f9424d659fdd0ead6bd3654415c6f68b8bbf3e61432a8145cf2204bab2ef7df072cdc8a0eeefdb38f2c4fc38097932dc92bff9fb16ce392fd9aa7936afa5509811251d8a70a7f813c904e96d7af357ae54d0c3a8f19cb60d4844f7d77e2602e600d1b6ebce0c4e861a1b92ab113d4e4af979042f7c9ade274379e664c77a79226459f98bb027c3d80a8f61ba765e00f8a84324595ed29ac4f3cfafa631aa9f9468465032bcfe4053c3eabc61505e540089b48bee404cd32d80d0b86565bd5b84311f22a79d9cae3d6db30d69474631a9c556a1b6c90f6fab11046a680bbb9439ea6cd7b3f906f3df2f73bb9b041d813c84b1cf78a2235884cef22d79caad34fcb9b6d71e7946f98132b12ebd2feb2b01ed4b7bfe72907400e0226a5e4a9a2215c68389b0c462a66b9ef5ce9770b9174029ae0f0ee25ead696f1c87e0348a46cc3a5e57308365e4e49ac803f36d8e2d415f62f1719a96e905a269eec7308588683dcca8685d549a354eb03597d172554bb8ed8bef4140121ea29005dbe594d033f657e51efb39b0a7e337cc4c426d77a85cd9434f7f620ffa971936e4fcbe06738e86741b041b0d8081e530da68887b9e72ae835bfe06c8e1a88de8a91c0c12712de1be2721039b084f41c909edca497623f2b2d96333251dfd7282f3ee84dc75f9f12b09faf8418976d300a1763cc978962f379259f20ef5bf536e8a1a314dc71d3d248b3602e7491e233b69aee4e4ebf4ec7c4e864a6bb016b5133647184baebf4e0f737d2975916dbae32a3acc801964b2e8d4924324972922d9bf1d43bf7408aa558a7976d4a98e1f61acc5fc86480f08e3ee26e521f2212128ec46b9925f1fdb5f98d0f0ead9a7da1bb7f57adfc11c76d562ea394b09253b68866782aab82c6994652aa0a069e1747b13725071ccb48426f9854688235ef601552ba7f1c659da5bb8308cdfa06374e887e58626b0ffbb3f7ba014c189f4dd5c21372f4ed3ccb81e5b89be8dc85662caddf622e5b724a286b0e2acdf840e75dfb23622a825ad8a4414de3e9327e1c788db4c2e95274cc26460f415c85ad448f3d0ce88e90525d935acd712da052d298c4a90b120499ea142527d5766536fdd0142a76af8bb5c2c58eb1b4449ac61133df169b46d6543c9864f267b9fb907bc6fd16acfbd8f790b179853dcc763a60a039a803e64c362c29a1f97885dd2c36ea645bfc020c9a4fed97d26e03e712498460b7c57edaa2412e48a778687e8cc7a0f664d4409b0078e07603d5a951f02446e0d0707f064b143ce586e7e05414a6811fbbd63608dc742070a3f51b4b56996e368c657553730ddbe502677bf2564c113ceb6250da80fa34243d5ce837b80170ee4634e046cc9661e3b44799cde420b7fa5e193f849053820d2a7d8e9b8704e554986f5e64aa66855e1738c87b30dd1bc49e6b40ab8d1890a815c77d1b660c4215ed652e11bec6acb0a59b965ebed9832826c91293c9c1e66169db320bb79ffdbecfc70de25c6f5e87e9e071fcf09ea49171b303e1f8e809d5a1195bf10e289e9bb9f54c6b25a901404eb7f9da78a4e69d29d9b32a7ce361815612496fdc4eab59368087f08d0c3b766e827c7bb974dfa7997daeb1d85c83e0f34698dc947a8a53cff93f36f5116396a3c098552596e64d5b4f353c9dabf760f336a8dbe924d237d0bfd0831051202d98f2dc0b5f8390fae99f051f2f6a12adf06317c22ce619620354ea895133e7a7a8b995e2d9b3664ccf1d8cce100f9c14554c6443e226a66eb248fbae2a3220a17d65749006aeec9f662b4aedf214ca30ac52fcb5ab7f2faa780c82661df471876186f67768ee8a7f6948bde32812437f60276fbbeb580bc1cf3ffd45aed340e60fae7a2d92fac6792316544224708e7d0b3a3bab1439d1311233eac14f571529d23c9e16f74c36f93de4bc8f99c811b6280bcf27c89cf674fb88c95d920874ef53d1d0c8286b429c0454352fda71639720fcb8a68b0a1219f5bf27aef95fd6830ede90a588d07fbe30e58ca78914faac90bd76abbe098a7c7b476409f7d5b0a15dd37c539b0454fc2e18f18b081b4d62f1ae97abd403e628f6a23d031002a9b6eb50e246f17f58c2764f224eea0ce256be408a2b8f91abac126fe12ed45f183011c770f41eb9f1ad84288d67915240047123ccaf232b418238f11ee1b75382997bb786ef654cb619d2159179b093ecd894c8ddab41495e27f4e634d02b788f7f73a1c29d77902c940aa6ecd9aa4a5f5fa3904ba46c744829b0afc15eb346754eb4068292c83cbba8784cee2bf0de0e16282a852f072495e3f6ce5301e1460a8397566543d99af9c3c57813c526d77f889cf828afa3e2de0351b2584e37ef85caa831d9351e435d725cd90c59bebf3a136c7984bab52776e44c0c4fb829ab9d6060f95cfb18ce5d30b8c0263e1b0db463312f47b4dd7af723303cb7c42912a7f15c4d7eea6b847f8b53cdf006ee4b74e46599e0426f45e53cb8b41ee6d8bd3bf9e47eada7690e4afed86308388ad102138449ccc7fd20b79d4012e3b49af3dff6b43d679693d435e7912fcd478366c27d07af8bd9f983e4c160c9a4a1f26efa5425ea4b5c9e7ec6f22874bdb86a556c8d8a4babed06f7f3458558e033618711bec405b74dcb56848b08d2580f923536c1669e8b6587f57996484114ed8ac4cc7319203a0ecd03e53ebce93ab1bd7ed7b54728c8f80ef4de300402c134b0a0713d8fca5203f60f6f69bef9c4432eaab5d5866ad3090e8ea7af531e63ad85b2a66ab2547dc1d8c199b879b49338783157aeaee5481d091b4c60a0047abc7c73e2770b6f4bcd07c2ea97878a16062cbb43ad4b2886a871335300955574f6075cac0f056b1a89f59bd88362eacb30aea0f06dd5951d3ff95f51eb8d71f0ceb8e5698f3ae8888d14b4e9f89667215c907af44cc8cb7a47e407bf9e12fa6cbaf396a1741668044af796a5839c8fc6ce54a1a5e6af2c3c54d3b4f2a4a05f475f59f8fa5a125a1c4810c981a0dfb51a2a7dcdaba7f347c1eb4aff917bc0012f005e74caadc93f4f18f2b614ecea8799d57e577c2d3f9eb98fac4012afec80726273a2a8eba5980b120ff4c5a44767d473d8c77dc2dea161969a1f0cada06dbfda3c0b0b9031f4eed7db0e1a7370e6486a1fa647256ae078a476f4e5e1662975fc0a066947f8c648eef65a89d6f173644ca57c5eb17eec6d4dd55a1507b834233c703d485f649cc7abc462aa4b33afb6801ca23af365259dd737c7307d112e461001083f52ffe8e9b2c7cee25cd1fbcda8e7b05267b81ca8f510c4bebe0b686d0b3f0fa4df352b0d7892f7c86836d8182b993f3b8b02421d1be2cb2646f182e6a28cac1f30aed3c1819865d319ecc5048ca3a75cd9be2648a04042fda48dfe716a7c761513c78394526aa188ce6e63314089714cd06649da469bd4ab531b4b6bc770f61cd519bb046f6c33501226031cebcd35720b752d306367f8b5df33fa545e1c949d110fda803d1f83df71ce5525e2e15c72e76530f98b2717b3b5627bb972d1ea2c4424729630171b7d69a1b9faca686ea5f0d0f584227bca1b52115009ba335f20eaf203c51cd572b0565aa1fa06c4e4b1c422fb6ecdb8785341eb07d398a37c4171f31e7b27cd221ee453bdb23c7946fcbdf5b317e17fbb02113a1395a2c4b9d465a22346f570922f80176d91b0180e0d6aa3ad2e02340a9e2c98f3ce4cf9a0705279a2b70a625b58b63022372603c25a36c75a0fb477df8e108238fc1bc4b89bc5041d39db14d630f3188c10e2dedc69cecb3a3b5cbdb2684970539d73b87acd19bc034debfaab3ec34afb9d9afbe4b27f49de4f7f681ba3540dc42109376f6add1bf561c19642d8b342015b930d53dae4adb6aaa12973c5bc950b3520e3ff1b8bae5423d08a25952f982dd98f65a2498b7143eb46547355dfb0b9387f20b255a1ddbff2bd28cc0aa4a7e175d4a76864d03f066ff38b72ca59eb2ea96880119fcc34995ccbf4be9fcf0bccdf07450ed35f619ec71d20fa99a7af0c167184a550475d50d0a19075caeb4e30639bc12e0b85834d7f47d7834a4566a1fe2ea0d61dcf92a6ecc26e7a22a5c9bcb1f6ae1e83ef0ec306f7f1a562bfccb0cef4573c6ea17eec0f9301442d6b08e238dc5e88c2f87e6fec9211c969732b9907673a40b9899ca0b7b7db6c41c7a621668164c54f3e5cd49ecaba67d51c1dcb45fbac7b84d4565583955f4b16380bfac99a538c8f2d2471abf65e292bf71de7f9263045570e568ae1b02f690128b4eee08bad2719416fc782a96f65d4a0964faf7b5846b6b3f7a1609cbe5e99363b6e39d9d42d64278966b15880a665a53192b77fa6f81a51c4497ebf7e9454dd0a0934195b17f62c2bafb688147365815a21cf878ed2086436d39a9cf292aa89ab407daec47f55eba12310bcad454aa18aad5637924cf767e9e042c9bce230c88994651e82bbf9c294614e7abda48ba24d75ca1433f16dd937f015aa3ffb5e164f8588fd2866586d6feace26b819bef01d1bb991e647d234bb7371c2ee56a8ff478467bf27f70828be102e554f0d4b07641fa3254bc8db06eefaf5b85a7c97e01c217fc8f3f67fa0e971dd9ac507b674ccf1f562c6ecdedc4ce6ffdf16f5a17527dd3fcf2edd25528c906a4bcc8187b4b2234eceda2c64014fd81ebb862a6c0b152836264b23afba11fc330cc8134543be340dbe082fe122823ec0e22aa34e2e4e92e162bb6255441405e6324a3565ae4b94c0d4d33ffccc6e9b94d796f8ce6b4e9dcff8f201ec8d0d5de270b5507f50e4d5f697ce051d4b7f7ef8f03d83732e9fb9507da18aabf15854c63cbbfce8d804781d7b4af7a94c3f496be0a0ebc304bc6621552c853a1d9f9afffaa0a338a034eba3f3ec80472b189b7c1d439a347a1f34a124156a0d6e4d80fe2f15ebe545f0a1389625477d84b5d5980a97f75deb52956e4edea19c6fecb75f6e7e2f8535c24939e687b592d571984e3d30bb95f4d118d749fad47d9ef7ae722d6bf68efc1444364986434d99e6440d29903f7313252f7aa9ec6b1787e8c704e041c9791581129c43a388f44e8e796354290b8bc2c959c6e345ee00975aa1562ba220b9fe7344fa6951ef3d6fd498df417d98268038285a9a79d5af69a7be04740f94e833754bdf3f23fe7f7a4332ef76007e09d7ec0b94140aaa9a5b6a8d8e3dec8e8a3101a7a9199c3f30fa74d8026654157c366f8402047ae548090d8051fdcb75f693a2e8e6ad2d19f86cc3e8b6a6db0714283d1232c04d0e4edf2b470e481f03d3c7c370165e59174c4dcaf57a9c17bb5829df4694fbe39e056a2e32018179809839fdedb69192cf9319e47edcdaaccabec7c081a70bf10d022690e1da4e4da4ca86cca2560b8cab735dcaf54bc6ec8dce6e7b63f774d7e3db90fdd707131dc8d12a8a3e731089234395c8e94605599cfd9a8a6de4bb1abae835cf7206645c654291e1327c452adfaa3e78db69fa9670c2e857f02d633beabe81805356a6ac12a5595c0ef01dd4391dd4554c063b0591c4b47eab0ff1ae0bc500aaeb867e6f595fed45246d0f37b7f4d3e8abd93b498869ab68ef2aeb0386a23fb9bb04402891f8ca4723519da7d4e5d9ad7b217fb4bd2819914cfcb3bef3cc9b37425e906a55067cdc8c2c4db72857420e5a9d7cd9b896ab923503f042cbbaafae0203e3a73aff717fbf8b93e82adf99959a9ba74b032bcdf647bf053186d2e9887a72ae518c4a54ab4dce04bd44d56cedebbaa37b155dfd17e5ac770dbdcbe5412c59851bf17d72d9a78214a91edf2841ae68f5dc77b3b581af5aca29c90c0f7297f6dc48e31f68956d36582e0163586b5324f2f192b383be052883283109e4973df9287ad996b268ff5923cea4e879b58a7d3f5d0ed3e44777b4168b9e4be1299ecefe245d79dcceee792c0d620508aab4e03f71349b5398878c18c66948a1a42ae6c1c7e74f3431ab04b56cd11f81c552ec77c0bc805e3ba4feee6b1a86829172ef27f7ff7d752bc58a746f7abe719ff4f08cedff1960ab60ab2bec3a9c206c073675171e8b0c37ce88dd77b75864950baac33b84cd07624b1f45bc41fff7ae485b5db7bd0e55c0167e45282f73b73f1769df4be621ceeaa4a9c06db90874d2b6dc265c635e0e6f4dd96ff33ba6f61898bc15818bae03bf3df91073086c2473f3278377aa20828fc528a26b7458bd9c10202a9efdd8525a577bda6ec88182fc5dcbd98be9cc5ecc2cfa80f3520f5a441e2472d6a517474691b072b371ff1cf68747bd2baad7ff8ee5bd802d6d4178ab033772eb2a014f0e6d257dd38d1b5edce01992b975c9e1527ff0246c2e85852b6fe7cf2ee51cc61c5a495051829cc529f8bffec7d318a0b15c20e2420e41fc6fc4a3dc247ed068ead99a9ebfeac9ec6841b955c93b5aca261ace4e41851d6ac2a1fa2e5e5fb294047ba7cd713e4931124b743c5026f6aa2b3c56dced4b6e4cde88593a5ef039d3f3b0ef4117f5814fa296af16df1e82dd2b2168f29799bb1f1dc85f8488e8ec953309dfae06990874a3839879d89a65efb07a6333f3288a5dfb126b917e9231744ce70778ef91556c9fc2eed9df23363e55a7d4256250628610d71bf5a294aeed9be8e5161596ee73f1a500bb55317a65852a4a2b77a9ca23d996cf059758bb6dba8ff72a2ae23a4743da7c92dd4d88d1c97223daa5ad37b3cfc21355bf66fd81333ccc09823bdf4300b3c104c9f0082f8d2fff976ed321b26de9877aad37dba4608fc258dddc33e3a2c16c65cd917ecb6ab44c0655a41eac3e9d89c8c353ec53fcf9788c707bdec5b493dd5a3ada3331cc9f879bdca8851dbc3e98d4a443861c52fa6d08fc733655b0aba236a412ebef3d5230cc76490b63514d3332b27f5f79fd030e72d45ae110216949af8bd3ff70276cd60cb51e0829a859e757907fded965b3db4e9abb6581716d321974a5f451355ff5f11b8001ed2bd533a7a0bd6ad7278d61f0b1ed1a264b1809f8d101410ec19c1f0e0c279f0a565fa6c785c0a9dfbce0110dac88957af90a2fe2336e9c1566b19fb8296d262db2599f2b9212127f806c86f9fd165dfc15a4125a1e463be19f311693d5e93db3ba43ab48683a1b233c73324a361eda262b865fc4f440c70fd58b0205a3f45c38e8be49a26aa14a572ba49182b9eaa095952176b747b6b3fca43fe0920636f819c81a08ce3bd016a7e87123182b3237a70cf5e5a5ab40894475b040cd9f2997f2d2f757203e5f1681fd59658efc6e05e6dd843b147156cd53d49c912cb134b24093d6b34cf496b071c4cde76b9006a1e1914cd5884c61e6c75b4550140ef0ed8f7528aba8f12f7af3f95f171298848203c2c043759f0a6bfb445b1c37eae6903c116dbec8b671dc84e58d733878702ce9ec7f0370dbb8d38c5a4e43ecd77e50d2d3365b30a7166ba123c99a21b24218f068e9a3eea4e5a3d6f78f65c7772085f044e30f5565759ee53ea3ea82c882cca3e28093536d295387969f003c3c95d5f0d12459cb5427fcad90ace2c03daabe90c3f45053a6ec790ac21d91df8a169761224ab8e705a5eb76b435215e9432753397857943e4b77add045b9915f25b60cd92f6ab5cec6801ed33dd04d24eb27708d7d46cc8a902df7ad809947407acb8a2cd98bf719af6d65d7a153bbfcf933a8cff61a94656671d60a778027e3cb3056d1ca153e973cabf64017e047bb95d363c98adcd319f5ccb2b0d576198f3e6eda90ab10719296c437d54681d9a7e9900941e29373ec64c5f3684083058dfb0c7d3324857850e4409260d73d590a1af10200a6475b27dce501f860b0d3262b92a680dc7b3b1a4fa56ea7711daf2a537fb6ce7d00731184b24428df046b9ff688bf417cfaa137ff7d3274bd27c450bac08e720fc7a3f485b625c26288b54383772f3cab0a94f11b4f488d63657ec3773ef0b605a3d31606790a8c94429a59fbe75e3a12b4fc8ecca417ba0adfc6cdb3814560079debc130825c501a3c0028855eb40259ffbf57390307c55a9c85b4960ff639bcbcd33b2b5984d49f7ed1f94a66995e27f4c6948bf48074fda4a1c147726909cd0874cc1e86e8e1c90ef314728675142499f98de9ffea9198ff043cef320898e189b4be3191f23e40f650c12447b0edf9f840897cadade2d6b6946db5d53aada1487c578e0309b5ad3ece48882fb2b14e1984d26b8531305ccf3b9bc2e56612b54cb5e15a64940cb8ec57f0c7c8e328ca02abaedf10df42d555df103deaf68dc49d45a2c03afd0c080ad203099aac1916bd9f6600d41de2e74d6a124f6a51e7764416e3e60fab7d469f26c7752b734eda524641f55b54d63ac1c3ea20efdfe875480eebf46a062719b43d853406a18dbdc78a89e72dede777b8d2e0d700085766b1170413d476d12a50fe846db09f9f67265284fdd04edd463b7f3b9d2634fdf48818746bd46345217b510e49b2d44c8177857c60cee1804e51b24599e7cba3c5d4f88423f23549a53d1e69f095a75bb3c00db737af0d9838025344f4ce350f819da17c63b654a65e9f4dde89e18296a40bd17eabf939ecab564a81d560da0ad1ebfaa455a92924f5a8c7b53d1cccc3fd5fb918e436cf4550567f446527235b5dc7eb431e521a8a1261723633d0ecab65c5adcf09ed366bcf09dbd5cbaa76cccc385ca3e93990a25cd037a994844c16854395e943a7d626cf78447b30713c23c647350adce7f4327cffff5587c153cc05e459afb9eb173ef8a9a37fbc05de29f5fb5ec11fe3ac0319f6b083350e69948cade2699441617af4a6e12996edc2a6fe5cc010dbb522dddcbc337bc5f3f637c2a8165ffb311ca36877e4c1e7b152628c72413e38e6bc876d58718560f8627e50dcded81744b081ff22968fd6daf5244546ca955dfde4cb73d551e92ea6162ede51231e0f0185dc5fb1dedb8cef12b5d1df445b7382016f9738baee568478121310cb770cf1037c302ba3ec317813ded94595d9a1fe7a3c808b96dd011bf1f19820bf2c369a93291b99cf0becfd5f650581a75710f8b9fad6d6ccfe56f1ea921489e884b4869baac7024980e5075e12fc9a601de7f82571431f44997e90c9be30542dc9af3d85c8de6ef993451d78af6798aa724f8626686d70e6f6a080f73d948875414e45b74b05e6c78c34c81502ed846ca0702b24a9fcd09a5de547ddd7e72daa36ba289bfbe6709bb2d98f9dd537658eed716e87fa99484815756fe254d24cb3ee1a6e979f29175d4e5dfa78eeec43f7a27bd8b824ecded86777806d7bfceb78b2979d150176e0f5a8e7910e15b5269106b5f01def9c9c329b1300e8150e15e1c9593f7ce773d54b08a0ddc8143a174363483e1f22528a3ef97379baeaafcfd67d87db341acbfd48b6b0650cb2221df5ff5b4a2687b5afe5c8bc724bc288233f144afaa5622460d2f93eb143b616418f24179d9be46e130d5219740365401804d7c92337862707d21b724ad6e9bd8afa18a4bee40224be9fddb0064a9b80b60d0e2dde52507bf9316275b72b13c0001c2329356ba980b984b2a9b0882bf00642019db35e86c83ed5176f80acfcc6abde8fce8b97a0290ba2192dfa25de370f8cf7422bc3f1b8dfa881872ec06b789428a2bd47cfb1c8bce359646d897cfedad13a43cde959f1e391eae648ce297ec2e3a61bf17da205d52ebc75901ccdec6dfb10c92238861b527798b45640ff7f3df5e11311083c875c6a8888eb4798aad2f0c2fcb1193fdf3544d418e17db2230e489cca30d847f75c8106c70770a7df119a970302f24de593dfe63a70ed0d133cc31e6bd5558bfcda5a7e586b01c03430dfd9079d2c79d4743016438bf8d7f7cf4db11c89e7d03fe0dd38639f60ac5139a9ce2f0b308954e01fac5bba06d776d0d09b05d3f6dd6875f27b112cf733dd33dfc0a4d365450fe094efa9867fd639463325503bea7b1ea2819189992c1c812769f58d7d3277aa7b77285676cb9ce8395e9722492b72096e72c0f46e6931e41c2fb6139101e5d0bab0a0891352f12ab13839a686218ad2e1ad517a341538af1a184a5e98395827a3279c6be37d9da7b7ab520179348a21031b8c427297fa892a0efb951a41985741c5672470b26708529f2c5eabcd3c9ddda2b875b0593f1b52f90fe19d836d09997048db425a19f58bfa0de3a25266ef762b1e3a77c2ce0c9cbfcf69ab669fe5b51186b9dfde791569a53eb8e82dd1bfd69f07ba4d3a710510498356cb52f5929c916ae5d1a45011f488070605c445b406e4b91dbd29eeaeb57f73cf86af39b956d63c87a0166590348baff57f818a760de47d8a4cf70eae9349e6fd62e63101ecca44c9d29b823b329780ace0cb67aef3859a29840d99aeb2902607e95da6136554c9d1f19a6dbaf592c054af09a504c1b15a23ecd157551b3a7916a37d5f96c95b15c7857defb48566b81475a50c1f7e4f03a00cac104cd531285217ae263320c96ed414abd0d2ebf9b015b90664a83247dec76d078b3ae85b7ae2cd59c19273851d20288cd8bb2e35f07e03947546e58133c1964891c85da2b9ef4de4f95ac97769d24888cf175600bf78dcb707a2a0e44ab60fd9ea9e3bed2ba020b996332b879c12fd077c906c44672bcad7e1636a5a6acd61205e638a231a1ecd3e60c7a09dfd0acd71a8cc76e82ebe575ccc324ccbdc2e1387b5bf522ecc90dcdd1fbb30a1d3df432e1b737fd45d5a0bae90b74d1de902ad74b65c9cf58a1fd5fd9abae37b67bce4a69d2e8cf03b266d35f5997539d771b8512adf6f609bf341059a6ac21301c73a42f6a5a724124b055ac381cc07eea2bb85d9f3d4574933a85fe773d451e828cc68ed7fd75828f05b83c1165b6f78be3e788b3ed2c2da089072497e221e660822814c642574c73ef81ab801295abbecc99208687189979983a68833b260c18fc5f6d9fe9760355d638570e93eae0055e53b171ab995c80f08636b398e0142e43c2d5df23804ba74242eb177a3558f2019db82fcb3ccb591a811bb39bee731300f909feb0d48a0abc47b43535f35b076eeda0fb56617a548e91840da48fcd69ac786698f20152d2bcad6ed247a38ab7feba087eedb5fe25b56e1c2c53626784beb7681867851ab1cbea67892fd45c7629895b14e188ab2f374d209a1904f616a03cab0791de660a62952ad47ef434e487d22577e27815e38cd54dc175c5ed72097e9be1018ba95ef914451e8581c865823ad3f25102d2d51e8d005cfa43b2395303b73f270b7912281e32f2041b7b8bb11a032ecd97569674dac4a706fce8df0552897c82dc49e657e970e94b1fc2b98cf61f87b8c4058a1855274a3c6ff5c5a8f18f13958c802e012c8b5efb0d32918e65a59793078442817284b0fb0b6dafa65734aeef7ad06bdc4deedd74624f863ddf11d8ece0473238b98965d35db4df95fa16a8e155af2211c417ef47cd7e1a03c900b636dcc2ebb6a081f345d56fe7e050a19c2b7b70e36a35a30f059d42cf88c9eeda015b8bc183ae2ac3d310f35b2e0171f32e7aca124e08fcb70e5032192538389edceb06761868d061fb8ee3abc772e4385ac21f5135c49161f294d08971ca6a7f0a19c75bfd371f583fadc54c552b94e640ffe502a9df1daa22c98282e6c71115495642f59abf6401100bfccf5fa1e0976162bfb912deddfa4f7ceca80cd4b8ebfb3f0dd589584b170d181ea73f6c73964cb903e7194a7edcb90d536b4c69ce5da0228c7e31a830e497508f668ce1aa9d5361660f25885ccbf0197b4f3e0cddf4c8af53423c05b2043f53e38fb0b8120725ea3ab3b03f1432952fa8c65a14444bd533d6e3f1274af075809f855346365e34b2065751d521cb189e80531936adcd766eabb609537833ca6537d9dd12741cf0576d7c72c101dfeb04868803ea76e3fcae264aed30a638be80310fc6b377cde958b495aba930fb9ce01fd792964c4a0870fb0505356189c2501f99a89fadeb9024903554e42b989ecfd0c45dc07a4a0a657e96f9d846b166535809eb3d82f0854974ce17187e5171123dd0bdffad7e72ea455323afa21a2b087ed3171393672935c6e26a9c9590b455bb8f4bba3251e27dd3ec2b12205e70fdf877a4c85bca0c882af4b8171de0c908de428f76c55ed99eaea468a63de8e892597a2cb24893afbf058797ee53cc2fba1aace1bbc31fb8db3a2e74e24733e274165d0777f65e7328eb0d72a8e3bd68d80520eaffa7ff10a1fadcd84cf8da0f01b392dd6fc184f7744018e0cd4a3f04f1024113c9008761918551fb4cbf45bec9b5be17204691bd1fa91c5ac203bb7473a67ff4ae59433c186e0066680701823aa1213d30021f34998aaa593d8ccd47fe765005f61ebd00a4f97a92356c97f9e2ea8eb7f56087ee506925648661eeefffd643a056cd4f4fc5cc23172b5c637641063920070e665af2c91ff5330f9aecd66add8c36e1847a095a9c5dc0531e97d398c30deb4834faff3f1c83da025bcf308880021cf7f73fde2938ee8aed03cf2906aec9f8ca7e5ec41f8da8d1c69bf79cd3cdba8f7d11d1b2ccab31e186cd9cafc47efcd5f19cf6e00f05dcb0e8f60659b1390df4fd6ef0359945d06abcc670d676961ef94a2b43d161f7880dd5d46c15c53474f3d5691bc533ab429d0ba8fc3b819698e950a3d626dce5433f19c1995f7452a7e2a18ab4e0003df0eedfcf9f5d79f2f31c91911e4eb44196cb21383e754315ef67fe5e4c24a39073d6c5b4cabab43dc609896d9cb7acbeeb3888c2ac15b5f0e3fa285e41f1822533fb39f31eb1e4d98a46a4b3c1f01a9fb91dbcdb62af41660dffdc0546d5108ec9b2c904fbf17048a83a7fee3e96727698d13a0d02b07a07c60f65edcb5df31f9d93df54f2e7fb2db87b7787531968d603098cb20ca7c438b4af72623fea9e6a3825098d8403c9db23803819bfd75230700d2164d113b48b52367e1d250976e121dcc3f93fe370d381df1e1fd57ec3087872a4b00082cf72175ae5790b391136d3219b3276f584c95beea5f4246e3fe084d0630e0b63897f8c7345006307f1bdd499fbc3d9c88a1f0a357c412d342d3b1d9cf8f9623457261a26094dcce49cf89ebc5217d8bad5371559ed81704f1f8aab3ee2ec9573cce858d9ceab996d8779a9ff5ac8e46b0ab425b2963f6e3d9b51c63c9d5225b06f48c10501c458e125b37ee972319d57af1883d5e2d5a78e0512f71ca4e4836892c9db3e2f029c0e0c2895f114fc53ef26d6e84a7fde9caef160a665860e5f0afbde0ffbb2f0d342bf6b77accf83b8bff6619b76b9d4be1ef4ad6cadad29e925ff17e7b43a198f1d93deac730e623c48b26b45e11d329c5c636ba23ba6d1d22810e9fb0e20d73ffd3e04acfa6e024ef7df3650103682b7f5e22dffb5ff90aabfc5d6a24013c46660226fe1994b0e616bd165429a824f8159d566cd9313e0c32ba26086106f7b82e4d592f2d631c124032d7ab5d68ce39926d198a469803ccc1a2b1a1ef5b0471609bbf04947ced5076c67d8f26ab3095fbb5b561c9fc12f25f9c455c54662b1a04d6a2a6d545ea47bf60522a0bd910b55a5d7018eac5312515902b611a91365b20e5483c7828dda023e89ca4945a3740b64c93d8315b290dea66acd9c843ebdbbeb0faef068c8c02aa47a42549976ddf186c65c82727c153e6060eece7e31443e51fffe706d9c1165d63b2d4b3f6793a87a43011538fc39f115999c1fedb773a9e1aa14b0076428443250dd959e025f80bdc3ada3dfcf598744597819592dd69f08926437ccdd7f36475ff5dc3be37c2acfccd4c6ed721e716b34e5335700d77e354d7f903454a0bc93cce887af6783f73ed2f8f6d860d34ff8c076064ddd10d7f63fc921c4662757960c38105f2b0186795a8cac273822638b60acfad41efd3cd9edd395038e6d97ccb2671ec18a7f491dd8225f6044765c81b9fc995043070d4eec11426849fdedb633f7fb8d2247cf7ad03c990a3269ab7a20e76a68e5c8d9c39f24b2690552d9d1255d4f087f158a3ee75de18b7e56d0e329efd67483bd12e69b607d8c5cf6ecabfb2971c9ed42f9d861e8b17a84d85d4b59987609894e591645670c58bd7486b529cf1c58196a9eb5f47f914dd268b1112453b1ae73170cd1419ad744b336387b25c0a7297ff6f9760375097c03826cd31eb421c9ed81beb5f49e76d6bac6826c93a09ab48d629a97038b728b84aff11fad2c3ee23528ef22f2c4539550aff507e7d16f8fce57f27799056502d26bde45544e719e06770ea6b0cf05f6f15cf0eb96f5be21bf2171b628856968792094f2a87d6243bde6adcfb2f0f67239581676256fdf00dc69c8c1368df832f578b5961e4b7979e8123cfc7decbdad851bc64627b27ab3b29b4837378189e8b3dea0ae2a3b2fb701644cbb6604c3ff512290c9f26ff990be207076c002a6f040bcf6a950cf1d7196674d8b2ffb91ee4a07067029fad44e6bb3e20e5473d7e038be182626799b301395cffa3013a000cc3387d732d5a34357a01d6c7967754ee83c95932fbd5179057a3476faff96bd5432957db192eef5ee8f732f83503782ebc2ef7eb11cb8c2e87f2b9ff511beaa7e7ecfc20ac50ffcbcdc93b616c07722cfeb96577f1a3994392f15b3b2fcb02ea7829742c2be9ece2f11ffaea83accb4f1012aabce386c7374147370b902f3d06bf87c8e5e1203c0d1b9f757cc1190afebce0cea42f9c9d725a9d5558be6f226481afff35151e79b315f4b6fd6f77b7a3c8cbda161c0ca35ca59abb08ffb4396a894921030e0a2a3ba5c4c557d5ed5aa5fd7dd5f9f3ff615dece773059c260b819efc3736150dd80f94b8a8703ba47c6c239bc737fd9c60def52b8535ddec1f11877047b8724f0a96a9776932e9c3a46002d0b9b77f0c2745890ff782092ffd830d4e5c706df74838aeaa108326735be961c1b161c4763efc703bd3d36a162e3df83e7b464e2e1b5d69f8a34d3cdc286f0a19ba1d13032e697256210f46ca39a910e7ae225c1b096da40a2c777125935ac37ed9d3b3da7ef65708e720e672a62e1cf2fcece0e79cd02587b2e90e7724125599186bed25b60ae6fb2fed9237fe33e6066e8c22b95cefb5183e8b5af964ff88117ecd09095f0ce8d4005e9141c82234cc0aeb6abad0301b65d7459fd4da89238e13e24fb00066263e635b2db78c62cfecdaef001180fc211585ff232f0f19f0bae0900642217f65df5eccacc1d35b7f0de6812be8f4bc8dd050a130338915b53aecc078e64abf705ffc99578923750bd7348a3564b5d6284041130c07d2e73bb9405bebc5048e0e6742ab763407183df4cff064af4ab4ba0b5f3dffd572f54adde247a807d654069f3ae851ed04acdb09bc9d01f13bbc0bd9b30753c2efa9aa4edc6ef7d3497921aeeb392fdaa499aec1047753511158e253435a4ef8d36a22b536b61f51e465273d5d865a236e477ec1b068a4f853ef0820191c3a9fa59f7bbaf6096aab2f81e0f399b818f1ea1f13b4c8573a0e89e846e93d375ddeeeb27d04264e1e06b2331379a6b5b26ca1873440522b5fba3bad6256b59100de350af03ccd6d848df6e48a768c6770bb1ae8ab0d58ce5824f2a5240e8b146ac7020f9c09f44de46582fd0b9354b59907ddab3ec4e1277075353856bac7a7e5c0de294914a2d886b9dee45f78058677777336b60df61eeed58dcebe016f31b7f14fc0be05dff5b1af93034ecca7c4503463f3da8f9e9b196b81cf268c8d9c2983df3cc483b38caf6f28c19f3743566d65354874f3e1863b6099a3540328cf839e160523362786c62225851c63df241633729f4ae0c7c79adb5db3100c49b20d697b83a3c742c93ff013b98bf5861692c6a15f26ff59477e0556652452f72d0f0d961f0bde0d3e620078c4b5983d142b454af0cef89eec31060b22567b3a28d0b2ef3f25228ecd767bdf0e62f20e0627d8f6ba0a729e9ffa05045370301a8b997e0f4db73ccf5fc588cdff59ab00d4cfa92b25a4166249202aca5e3818a03eb29c7daf8ad3d8da9550ccff646c1b666bdd7499628bf1d0ec9fe4ad77dcd3296332c1cf6690af282ffb637649dd68a4439f567e0e79541ea689daa6f423bc35f4696413131b5e2fdbb01bccd1a5ee779e155b3c6e8a9119961335b379966148ac68ede5581bedd9e0977a69c46cb6c5c6670a3b4b64b2ab03627c3bccddcc4bd458e4acfe39620c88d90ab5eadcc67801beebe36cafbebb37a137a6b69f0527b460d1cfce1cc7b2199e53190b9b28769842879d9b14be3078f6ef5bff8412c294a9 +MD = d4993e6ff9531a5be854fb6817e136999990ab3ba56554ea829ccf0d80950792 + +Len = 95272 +Msg = 33281031ae4a307d07c7623054ec0b2bc3c261dbdb41d00e04c19d054ab1c9ca5e8b38c4dd071288d5906af286f41d75655ffdaf678a2f407b30d2dd58c2e1a07a5b5ba267f6a1cc37df1fea53672e017ddc39e311b81f008a19d97f47715d8e907fc2f6d47ea4f2349cca4146ad067a12215da0613368f63864fa149f28043ba6dfb5e6aa06e5a1d5afb31ee42e6d862d16b10de064d2c98df97dc4e64e9d50c7637b9a73f82a82210022aab7532bcdd5a37d5315b1252291c0aab6a64af174f8f35e3bb6bb3c3d20775f0d468207f812b00899888328a84da2c9136686c8504377a4f1fcb7e379dafdb16e1924cbafec259b08c243a404c8852102af69e98bafd796e3cc54e6de587862f5b9a23d996cea7ec84a5762dd0a53fbac085b1ece44fb7c3aaefa0f15a1d2b8ccad62265f99e7f900a82927dc1cf29f39f9c42dc10bcb9e1d2a1124c6bdf1fc187dce4da97c0554d8651fbea9054c55d00a0ddf0b0b3043b5c901ee99b5bf7504b24d7c1e1b2ad67908a3eeebcd476599c49cfc554d10b52a1232353490226db5d3467966803fc80b191c7e4a7dcd16bdaeda4c46d7553aa38e0dc14256042a5668230d2ab32d72b521f237701cc5b264512f9687b3e51b48c3f859690f4cf50df94b0012bada1ca0a78ce102b2167fb53304a4bfe9aaa0423b5cc751c4e216020f261ac59f300ef4335444ab48aac6d9debf3c977f8a10b97ea2d1a37daed55f311c23ec6a168fd84db12711e468cef8daca27b77f6fb5d41230400740977a49e895e22e2173e9747e0b53dc9138e138ad8b2dc6f040d5bc8170db2417884ceabbf92034ce3162f14dcb91b5540245c4e16c156ddbe5b99953c86ca30966946a32b0a5a5783743774357a74437ae43c2fed3a9534745a9920ea2b92b1e1a9bf1d522392a286dd42de6185d304125235b8a2aaf213c4aeccf3c658c655f8ca6a62db8a46be5bb5c3cc1767d217a4d2db60fd8f07ec3dbcc796479abf9d3a400b1c1d8ad0fb70925cc59dacdc1eb0fa9fc14453413e2e08fb80f46de8e834bf03b19eb1ebfa63f750438aa17b59b54de5422d94387a3427eb3c434efcc7567bd6cbe5abd22bb45950ce55021a8920215e7c0fce4830ee7e1930baba45db3e1b06b378c53e1fd03cd0de832b440d90296dc7616e1af2ab8007f6c13c7e645a211610ce8a7a37562642fcaba9725773da95ccc8f00b2ff9d22a070d41e1231912875c6d883112948a499124e9400749a968f4bcf0a35957f911e9e56728681953cd0ecc2add2239ed37448587179d900a49c7a3ec6dff54493207f018aed3d9896990610ee8f6b4d3ae7f43ff737ad591cace145fe5926d671ce993e30ed6b817ff99d290ef0073c211b9f6beee3f88c46e6094a784a301b735177732a2e15383d183875d59c0152cf37d0441e24c3816a7379b7fd5b1cfde0d19e0a415942a4181d5f5c0b3c61798e6410324ea31520d07ab9f25534f163027598693d16fbaf5a309a4677772d98a4cae69d4808f651c0245265487cb7341f66ebfae60c4740497b729be2f66f965a90daedd2fa6efc8199cb769edb765a80cc222304e42e402f236ec314612e5df8df748ab52186095c00ac8f1efb37bc6dcec24e5e46b89552531727d55f73d4c6de3ddcb926456099817e17928101422d9455e2bdd8ee28fb31f32ded9845e30cb6bc4ca5b1b4e98046c876c018ddd40a476347e945d7e171e58c3e23b5ac72118e79404369d98d587412137066d25a4a0f72e4aa337ba8fe986ac3405eb0691e8ffd2159f7be326b36e5586c13e8bc36130c23c84be366e87213220d3a5ab07be0cf58b0026bc1ffb2c7ac7bc827e2167cb86b0a341601789a11c54ff2b13070ab784b1033e6235d104377642d98b53271ff2539961c63f639ec12d12dbdcf45157e644032393ecd79de22f0e9421bd11b67b71d1bfe72aa762a735a94877641486b0a0aa66cfc96152213e7a52efd3da27a8a7e69c318db7a554fb1cf160ead6cc6a434388544020b96b311086244bc2dc0062428733cd36cf40d9f85737dd1a8189c878f8efd5784c26a35bbe8d697e4c093d70117c6d8759017ec5ea4adf525e859cb548e11dea72fa11d65c89d16f0029a5e9bb69d33bdb0d46004b384610bbe43c82e8e67df9d64be8faf088080790e8182a058ab2c6bdcacc21ca7ec5c8122c245c695e7a28de92b5440b2661fa66db20bb505d70aa89d07dc5189cc30af9d3e0cc3ab796ea0474e34c2cd3939a0a693c184c609179b794d7448600b23beb61fe3ced8058dfd0591f6da62e0178f418e6bb5a229996dfae653ac34937ed6f6cd938f257345ceab5b64327843019ac60ad3f0a220d945a83b41230e4b891ee4b1e4ad99abdf38c2134472174a3ee9be6fbfdccdd41f4c0ab20655f51b8bbf08319dd13d96a265d1235f4247dd18a5b124f8212b2eb3a9a8b469ecf1ebcee1eab688a2171ad87d60f27d4811e4d5f625934668c416dc850aaa338d0aa398aa13a96bc93220c7a7f7e8662f7c47be03a4237059a175e308b9fa2ce2492c32450a700fed9391b90c1f6de19d91ee1bf5b53c409bc93110593c0e1c93b56ce4d857753cb74453f4d45fe9b73b57c134f3e1467cd74434aba11b4ccb48564cf58c831eb9ce4c50c12640c4b0b0d6a95026aea9edb41b64fc07df1e01a835b4af8815d550dcb36e672a496694a4168cb9b6a6ce5bdb55ab4bb40feb855b598d58f59501c7868197300a02382bc12054b5ca511b8ef3faf0dfd0331a200acbbd39fa8b09e776bfb262ebf3a03dacfbe78d8a36f94da5131b0182d3159a5d912e9ac08057785475a746f8a5079110af2f891fddd16199a613f9f27843bbfbb5c6c36efc5242c7a95e24569fd6f0934512f0b1ce099376bec20f49a90c4a8d3e6ffb2d85620c7865be4430697322ddc47a0c67920ba9e4600f8bafefd811ba35108b25a5efa00fb0b1edac8c48ef97344e236ab03d6b8d96e2b44bd10fd62ba191bb7de361c433931f68f28fbb1f699d767ee2b009a3166723d346d71962878ad9d35ec721418c14eefe2bfa3679fa08d965f61bd6172adcba30c7895f7d77f9d21befda95dfc33e07f47f5620c6f37c611fce770b906ffb9013f77047eea3f463db59a32665801652951529e1cefb02f5f6934f12d68dce8bc4fe133a7fb286745ac3ab3c9d6aa6b72816fee159bba17d306d2852b12d5d948a03faa1f64db4eee15678404d2af51ff4a95a872fdb61e216838c33e9f7ae94af2eaee21c1b88b7b83994983e680b7042f7c73d17024a0af0fe021d4592cc7179a8b667b9c509b8279587ae38cbf1945a28cc6bdbd865de060513788fa7bc1531999a9695f23fd97692d7e903fbae718463f2774107b9469fc145ac8ddd87661e29e3d9774b3303ec570eb066a14af108d0bfca12344e2b055a232108dd364e8a7e18972977ec1cd20db36d2a65cefb2d98bdcc15092d737ef73240c74ed1b4bbc3c137711f720d70db4f8717ee41763de374e5142e5d0853c0fc6f94d95e7ffa1e672318ebcebf0eea6966f5e5ab4c7ed86b7ed54be6d0ccde08173526e7998fb791c2e6820719f46289728cf1146439a02afd2207d1b53079dea173dc73e9c2b7c77ca28d25026a6a3813a4bb85a6b56239ccc10a259ec9b8077316a30b57db4691b916b33164b72afcb104ea05fa3c4721517afdea72ddc40af7e625b6cb218b78e1089d322624cb60b475279d48147769f61788291bb5c56f94ab077c2dddaf035c41f33030f975e984bf1a5478861999225e52e98099e2bfb12cf4656558d9bb93895c346a7e4f2189aa6a3272da56393c19043289d04381b832927a5cd73226eca78044bcfa828f2bfec03f1e5855d2ae0e450c1ea4113d108589c2f8a5e2ced065086b0eb735bbd382c38465483febdf06be80275b747b21ed82452209103ba8899cae48fb912ee7ff1c082df13b0d37c817958c3e93c45332250cc34ae5f3dadce317520fbe6fd13d72d3609c72bf1e1ef7543595979f0e1b191ec1b18880d02686ad143be306f7046eeee4910b89fcce06c30ba8a795ba7107840686216af02f2c7876c6297cc31cb860a3182ff339a1ededf4beec2dbffc96447811da37a4be7e8161fab7589b4cf731837906863d5f54d7d9218eef85846f680199d971539d24cfbb1db622e95dd36a6efbb7c971d0e28ba317b46375d139f78868469f6492c56a6e784d631418f6124be76b453bbb401038e98612f5aa9dfaf4c44a4a4166095b6053a5a1844205310285498004ea166e82df2d836ed943782ff60df951e19aa97bf6e567a1a6abd07a1d7a0435230bad6840d13e4924d2792045b634fcca1d5ca5a8363ad30b8ef59df72559342fc7d6d15699ccec54f306affb6d84aaeb3d7dc8b2c0a4823856ab525b73056bd6f3f1a767aeb4c1314d25c45f5c6fc30aa013cb5caa2c16f6acf781908c9240df3704d1bc387e2e8289e147b8a87faff0ee2696ee1d5bf70d38e312df97881d143a19379d5eb39d114e3f204f7c3cd765d0bf11b040b78d45a176ee90bc6d693ba537c15148da75a44549386cfe2da130ede424ea3cca41668fb8fbeb25cb8c1d1f6757221f7b1e041506755656da761befa0b7e3381c7937acb22237f729ee8251b0e1560b1e00f9677ec057adcbbfec7bf8b2e45d339e819d6b4cbe5d10f732e21a4736334c834ae3ba02b52b89e26c3cf6fd35d299190c0deb5fc67d070ff47bad710ac08c0fc130c121b9f79b4963d7a1801ec0d650a0a23b45987f969e91c472471ad9670c24f79b07ab3a895a99f70124e74f70ad050462e47c8c450cd26470b2ada764e23cdf519ad31bdc7fd5421fcfd7a6f19702dc6826b9cc9dc17c04af980d520bf9d191eac478c31b1fe160026a37eee17661d256f1996625255a4b38e38001e4b9abb46e6be459cea183fab2de4f4ec6b1e88d332f628265a033e212794fdc788b91f1e6795d067d6f84b8381167ef2ab260b607c75d4ae69bce704544c20c4ed54cf059d52cf2b1f0ab419bedc7f994e090f4dba1d2e42f7cf49eda2a20b9ee00a558cf679944f18cc23ee359b7938da342f0b6a50978c9ad6d14d815b30ae17561d25017eb25c6ab8f56193c7ee59c633c52a0bb492f3a94017947ecc128ae9b4b05e5cd6cbcb7b5dc3244806518498847c1a1cbdc300c9b78763097933bddd92a9a957162324c126f796c0cb4541c7a2be5c2bd08a4c62999b29afd716af799c53869eb16ae0d2b10d499c8b3c09ea2b0670a7916b3f1a52dd68d08a2dd8342e5886723d059836689ebd49ca98556669eef82e74e841479fc89119f70bd093c52319902d85a352ca1652470e0cacc2fbc2430f0f740b70cce742faa213211eed4dc076e75daabe61feb922c9eb88966d3af1e7a5a0e63c66b3eee12fe6324c23331b850f0016efacc2425b82c771471ab37546ec0179e0f9b9057bd4f79c91f36d7b49191f605d270b9e5fcd22ef5ba0c65d8b56f83f34f251270945c9b896da7770317a0e2f8d4d351dae1d706b5a7bee1b435b079e7eed26b437f6cf2eb154cb8aecc65ecd06abc950d4d8526dba28852f0d8ca2104546a44d867c9a6777ded43bb97283d14fbf42c852922b6ef123461928507a4d1eab5443532b9deb50e54bf355f30fc4cee44c04a5ef7e07a5f88b5a424ad2ad6167a1464ca85c22e3048d5210ec65201ad72f665d34cca03f04df72d9c05da9c41835b6d15757b694c902d898b3267b99f4678dd6f699c122f4ace36d757ddaad496c256fdd031eec8f56e74bebc62ff2c8aeeba1c957f2f8349e3c6bceb5b88357cf12969e00b460e3f41eb8fac6c58bc04ff05c1199be35410dde533087bbfcefd8fee40eb32f884364df5e649ac4eb77d54c5453d17b50b69659b24f765d606e044ab6c3ace8c94a13b9aabdc4b6886be950292491b2e0e1a23f17701425544efba6ad415068ba54ab2e2c6ad702f8f8c69c48f85d1d4c6ebbeee146c3ac5f2f0963260c3027c1ef75bd61f0444293bb2781424395f329ba6df9be48074ad77ac830cf88eebe76971de7d9f29efe0f2f66bf939acedcdf6112dfecd8719953beb27fe84bce954ed80e2e02c6398dc1d22ea7cb627a42f3df65122b8c75005a6742a13ec96234c12eb0f05affc67a322fc9ca483f2abdfda1bf20c8e894286201135501864c256407c0ef6113a85bf6b4d2a7989552b653348b9c63515169f1188f0bff16eedfbdff987bb38661ab85edc3b03ae984c4ab2474d5797b3f5d9e1a202675dfbcdc2572b215a0ec74d146573784bdb023515bddf58c79bab07bbf827145045558a3311da85dd7aa7475de7d88958f9dc0f4ebed77f1e284473cdbedfcd8392c24bd673ce5b4b634c301a4cd41532ee6e017d1cf86c6528c862979c92d6072a8b3834e6ce4aadb3ff2fd4fb2fc4e2a400342b3f0ac7a4827dfba2f807d6e4f7f87ad4d3a4fa0a51086c125eb1406f01dad0df8fd537e11eac67753b077623e050393ea016146a25af105cdc222ee1ef44fc2274206526e49ccd98ce5a5ecbccdd9cfbb7ed40d6173c433add4939415585e07b56b5f97abc97569417c835e4a5e5cc927ef025540ff62c35c9ef07961ae6a5729d5a9ae68ee32af08019a37752b1f18b5fe96ceff527f4d409dc40e828af738fb1d8f07042c970347014528abb89326fc09ebcacb115c2a003d88d3f6628715bfaf6a423c09151e94f82e728c8b4b7c50bd9be952b08bf2020ab96a4bc98c85de17e5e04f083f496842b0d56617ca915a7601ab14c4a13dcc81c021e12499f1dcc36c51dbae782c379d76a1e6e2730e8fcfb7708fa22e55c64f579b650811f2424e88275070422f8954ea687d7fe73c472747da31ed75d295afca5735f8970f9525a3d14bd23fdbe40576a9984499b347192d589a1b2a5ca14fa2b5d25a9b925bc559d03c68c3a9ce2bc5e5d5d50cfbd611c27c269fbe2c7f8b6b67c8b28232ecca04a490887021be34329da4b5a38e9aadb1a5760fa3fa970faecd97950d59ee905edee6d5c7dc1acb5731934b1fd3fb497574f6df6e2f6e38c757bd867f7fc7a4a2efbdc52d219a3d9e620029b4847e81786b27739f339b935fa6a8eb6b3d1e938b4773cb22aa8317928f99b613e8aac254e8968099bf759bd23af85852fa49d97286a77c4acf8be5be1ace94b098f698757db27af01ba2dec9751a31c93fdfe2f31dc74d08190b348ba3fd2a0d1de88064ab09c734f099c8aff58d2c2086474c778d61b1ed0f876085abc40aabd006f6acf10af9caa6d0e5e02cdf9c0b6626729a45f54f6c2b971636b2a1aaff67c887b8d0448743c6deb3149b7005ec47e3f1b5e80079f7f5a0b21929248f8a4da3a012d934f412d919ccb7b1ecee45a4164664e401c622e63ab0979fbb1cdeda3ecc356c6ac4ca56187f4410a4d9aa2323fd21ba77b87f75cbbe5c86d3f75fc5e088ab1a447ddcb661574438464c8c1d936266ebd0d5603cea27b27f1d93af793f51ee635083bc727ae122893fbb5e2beb22cee8bb8167a41c8933c8d676207cb1b479c81d8b0c22cbb979940fbaa2b6a1caa44186511843b95f7b24bd236538ce2cd7b919d82e4fea2cc3d924aefc464da69176cfd8d4746716e2f3300fe0461b2772d6c41fa5424cd76bd91d1ccd6345631109066d3eee9c4bf5b4cda0241cff30e571aaa603b26a260c04578898963f6c9d78b8a2b9fadf6b3e09e488933600d5ba4a4c2fcc08d8b51efb7286d047824fb13654fdc82186f12633133dd019b6823b9116f150ce0ef10f2eec7c170fb478d6c279f30c1b497a48f0e8144d4086c3141699bf546a7366670f23ecdf474c6488cd8616d8109d730093c1c07d430824ce2b42de2976bc71b11cc76d9b96c0bf418807ddced9d95807cc3ea6e289a103b44fb0d2527b20cf77e83562de76b7d59bb27dac52afb3a5a8eacd5c0f9ce80c7104623061d076cc25f1fc511a5f7843e1bd6627063a82f87e7fec4476e5538b8ee9b57cca1ef4f435ba9adcc1b9a886de095fc24be2ddbcf30c19e49b0b6a2d6850491c1ddf41d431b28f5a772dbf1acb36a902b6313a5f911fd4d0fe67924e87e88b92bf69d3f8a47a485ead24228c43c5f07cb7be2f7cf31bbb8e1392728b8802fb75317721be0862545dd6258937d227b474d2e2038173903c706d147150c3402738166fc1a0d80b41dc74ba49b9e0dc639f9a357cf9ad0db62c8d56153ad4208d5fd0bc2a4d8de58f5f2b4afa8f1a749c516030e26209f4d716d6efe4a63514ac60e2f4d220a481ab5a4c6ff233c950bd4ee75cea4714e60dc3ec3a562f509ce2cfdfa23fa6b65004526a91e724882144cc7221eb154841c8b83fdde032d149ef11393ce96c3de158dc08494ffdd146d17ea3286b592e98a6784433195d117c2fb9523d65cda5a5e75b97fe731c2f31d1b9fcc8e18f326b15688be2780aabd4034ced1c1b67882e5e65bc4a16fc1c82c422d18bf433fe39a41d995472c80ab228205c6190b64feb1c6ec784923a03ba372de3fa09c3ec74b11bdf119011b8c70cf812965c36775caffb5c668b428f38995f869ba8cb87bceac7dfa2668420630028b232e4649903977fed4858a2199e692c4bd937c74a72bfc61d7f5c7bfc16c036bdcfbfbd2f605180fca280d53d4c3518a64b5d23bf268e8b0b10f8758662bba697b544cc94f36c82fd1daa5864d27ba9286a8f8d5048f57b4affa11d69d760fcd29c1a0f845d571a71121ba81ac1ab52349f2540a86a733b3fa40cc000d54eade0dcb60257ee8fac0b188b40d98a42a86d81d50a220b963f6b9681fa05fcd33e550f9f219a27a4bbfd994fbf2b9ce010459b1526479cccfc515fb747c3be9d22a19d4bf9c5a904cefb3cff7f8b89f22e3f534c4193ae85f683680325e47b1aff591e32f764e34e59764c010e63d20756bd3300d890a15fb26437fc00c2e2cb28edfaeab6e256dfefe17efaf86ef57e3e61c2c957c925c8b486581884e9662c43c2dbd994d87447f6df2e53a9e774e529af7b1c4ba7ac4f716c30df1ee285ccb49a09962db1ebf502c1d291bf77c0dabd08d46020a695627d886ab63b28b21b0fb62c96fe08fe95983c143b859a79ad7d00573b736071903d6d5e3466467b95c9b9bd5272485c783ba06bc7b8ca0ffbde288c04b04fd157458d93e03ca662db6707246f16ea663b418131bcb570e44444e3eb6263df35260a5b94300ad2e84a5c410a237889ac4d5e611e80f839a6f565b4edcb0a990d9b1069e7ba6d467c613dd9d7460380af2cf6d27acb1d8eb8ada53e1ba520f7db14dc3b06c5d09bafce7044041d4479ef688f27eed181eaa9cb77c1ed9723862e21e2416a08e12ce2d09812193fa7dfdd7eac03d36ac1d7eaed71f2ec07aede5750a70f99f9fb84d61609c69f13ca1d09ddc1e8d0cd59d10c7218338f7d0f4b171fbf180effac3dca0d69d40e4017dbe50455396f9fb6507ef7df26507de156cded8edd41a05fb25f352cbcdf3b2d770f90fa87f84863e0c2ed3b2dd770a1abfc489ad1ca82a28d061bd7039a6b5788da021657136def0c78d0b0cc7cfbec9512cf579811fd01185f3fdd2ab857328be4b63d293956b43df130e484b9861eccb1d06992b095e7febb0fb394c1954aeab04bd360e2b96fffdc9c2ae93595b49d4a0a35441ed3e3aaaa09fef44e9c1d4fbd217db0980c5ebc8b51086c49a13a915bcb4f3ec54d70a6bcbd23bba7d206057be5907ad1a61d0e9e1e01709e4f3d3357922be53c591b7d63a7a64d65eda1b66ce6b032283d37607551baa88bd6291dddfd3fd9fc8d40892f480b3c21358cdd10c35178f4382a5cb18a78769b0c8a9b5f7b0f8f7e508c64801cd70a324013e3f80a08a1ce0d525dc316ef6d5428ee464c8a1f784a595b99f6a48e3a41a3c35593192a6f3e436bde4ab573ff4fd1a0a935a8f416d8fe4a94036d853ea7c737cc727f4b139d70c37888b49a9ed68d5e3e9b6601fdb2c5b5ed26d670aa0d20dd9306aaff4193fbe5972db2e7de90b27360fe3fed9f602639ffe18dc4eeca572153c03a9b7b9a6b6ec4aa3ed040f6f79cdace94fb7e59b65366c3d1e68f67b09f894f9cc4241935bb7b7e96e83881b316e69d13d00d17fc7e9c3e717a0e7df3c49e054ffdcda8f158462b799457b97b9e2eea2affee134f381ab1bae3de75672d2c71c29ceac214c19f3145691116c77f1e2648cf73e444fc6cee3cb891d6a1459f25a3461ded1683f11098dae7121d562ee20be340f37457fd14656cab2a288a7091607da9827d1be649c26e5c53e39ffb9dd2cfd7d933b765f4d3849ce863784b3568a8404acf05e95d7097e324c0d8eeca3be9ab0e29b711efe574e979f89b79824a5a647e72be74cc21ec1e2d2b8d82e7a5c52cfabcc39b6639c203874e70a618740878c60eb2030644ef5fd58a2a5286bee6e03773696d084ef09d78eb743b6884370f9a099d2eac57f64aa6633bd817d5c3673cd414f1467394f9d73622b3e2d96a9b62e9bc522ed9a541285d3e7e2b98ef24835552e2916603bb1ad518aa280227aec925bc17fe5880e5d3ceaedf3256deaa937daf9b8994e153bc4eb288a89cd2bc3553f8ea9b42fdab214e0955bccdf66bf5c387968f6e925653e97cc9c4f800362feb1f3496279ff39941da8c3b3cdadb12bd776e2371bb255a5bf4083da244bf21518ba07f84dc71c4409edd2e42008a82d20b8cd64cb063380ca4ae5329f4c9a23dca98a7d927880ac0d2e3166bebfcce87906d283e167285820b36b60db4b83af64897bf9325b8f558f318741911a44e64b29999e441e5cb42942bc6bbe93d4411a21817414b871c6f9bf7d7d806039afffeac9bcde73f61c4cc1815b326bb661653b45f720d74e87b1a0bb2372dbd2c9fb0f0ae696ad1e18f4f661381e1a5198ad9d6e893eff4d21219ce83b51d138bea96006235416fe3186ab050b69e9cc6d5b10a533567a961baf7baccb048b921670a7627b00f4bbee6ba614dcfd205069d55c92fc508e52fdc504b1dd73510957b7aac9f6839080d80bb037b1c10704128449dcec1484a950ca009c78866bc50be832e19dc3327375ce9016949de511f3d09f2c0b8ba4c29a263818a52520edb96a075277a922bc501d10588c79049e91222529629b35c6664071cb6b38b9aaeaa5f1c58c1da784ee5ef6a5a13daad476e0a47cf82d81dc3982765dd2a77e232501b8e2e5080af3d9fb0ba7dcd220db2974e5ccd52ace2d9d530e77e25ab781f2e6235089509430985a1703441eaeda3244adc2027865e1191b00c1a439acebd9bcfcb880df8a64b3e5e264e20a9bf91abac70686018e1f364315e21f2da58a63eb09c1d39b37b6b2023370bc7e3162673cfa3f69ab900f7a3115835b1ce98517db1314896ee24f1e1bd3cfdd63b63aa4340d15b460b5da6f4ec84b61f0c1057ef4e158aa3fd2567f978b2a4a9f73ac5609c9326e0743a89d02f5e3388f75321e9f3d363ff550f45bde21290c1cb0dd0723f63b9f8883a08bb666f2e8e34d338242ed564f7aa4513c585d732cc0b5f83eea5cdb4fcbbdebc1d0e1217ad290312f47ba5fe2b51694a96d09b1b275c92384c6c2b887b739b0c7ba2f18f5468853af146cfa008eeee62b85eb8aa4223586601ff17a4e363e1826da187e61267bc28813cbceb2ed736e4908cda70caf424b5a5db2caad30154b659a63fbc75ab2a545aa9e84ffbaee558b5e75aff1033597fae8cb50ab8b07700c61da392ec975256b43afc3f0dda7c279efab4b5c085995c92804b350305ab0a39643dd9e5d0c6a8445c4348c3fe6de9c23392354a5f56a4e86279ba4075632b3a367921ffdbe9b1818a67edbc6f3d07b63e6dee1c250411168fab2b0f8451fc3ef0efeba91d4e1ad241d4ae55b15c19e1579250b48b3409b37479d7bec6d9e5ce2ffc976029663cdd0f140b3e796d98ea3bb9fdb1d668f735cd4070dc918d805e4049c5c364c4aff86e9074c50bc3fd27374f5582ab157213d69966f798cf4465de31f72163ebdccaece48b880d01cf2ef6bce8b57dcc02e44d0f2a8e2111ba7b565f9c28ab4e5baae68aa005d1997777d6ad37a8d2ef121d8d0c4c0eef175b15452d2547bf5e953ef7fd62bd1e1d9e88737ac2fb2f013826030b4c0847229eba372542ecf4af21fd9db7341c36e0acd749b00b2af6b4dda46b969af8bde60de088d255a70fb28a5d5432a4b1a0a50afac5e77096de4c8b0f1338c95ed7b4110ec6aede04450b26d4981a34fc0fbd6149748ba3ed3a6ab8cc966c47b9192f50bb8d255c63590b9ff9e5b85589c89c2879d217159c8f81ff63619ba685f6aa357d28d04162a0564e43d9a796b96fe3d8d26b0446036214c77a01616643f4d747aa463a4d80af5dca38c06269296a06eb09abed95d046a59966f237f77198190fe941cda12bfa948c4f56635d484b97e776113db571a1b6fdc0b099daad54f1e6b0c7f50ce3069d1cfdf834d3a488f946ae377f057607cb5d0dd8f19045bff46477355ae13457d9f4db22617cacb6ad91288b2c064bed454fa4b7f9b8d93d9321c31669beae62cd9c6d5153a8ef39475f6b98bf4861c6d73e2bea0ca4e66250771ae7ac059fbbfa8c0b2195f8ea9548f9fdccc34c5628d3b119fb94f4eba2af0cf5159c56b6c7e33c5b0f92ed1d6f14f935b3b272a787dd40e5493d196793113bd84ca512521b1a35c377f4e5f60b4de5c9ca176bc4685656147f6f92c898298c3af970c9103a01f0eaf71684031e5648209c5c984b4ec1693dea96f1ad465a8693886a0b6f893d0618098237d2fcc088b0871c688abfc112b8376da6840226b388860b29ce9d1dddf13bc281c44b0f301036b18d211fb7bb19d23e31cb70008b707eced4cbfa36f10cea51e2857db4d6b617c656ad0327fad947931402048a76f1df4f6cd6051ae7b1a1aaea64f933d528a6c5656cee942a8cf406ddb624372e6333e7827b623c1a860e480a01621eb3de60392a0f568ef2ab8403ef667368fa6af941963a860d11f06cb3b1d93cd80b4dd09c2502bf6acb9b6404d98166c2637fbbc81881d52056976978826aede243fd7458d6c5adca1df310a41c9572c601f7d7e599eff3f860d16100ec24f9efe673c809cfe6963f8239164c39112bd64e89fa449ae35707b9350fe76f95e5337b37482960d40d0d60d3f177bf92f685b19c8f4f8bea72d0d848b2867d3c346f6ace71324a2c76e6526a1eb100897756d3b5f380fd93dbe64662e578a5966bf64d8fdfbeec4e684cdf520a72bc7302cc1d5ce363504df6aa7c4a35387923005a9c11f019b7b855936032515733ce3d4806f7cb71349757aff2351e405870762ecefb3efd3cf8c36c7d616fb917199b7d192d18251afe736930da0d2ac3ed51c55e9238b40c9e363a8f85c222c6e381bddc43561963e1de68c09f8e425c1807c0e37d59e8870722802f16052ed39a949cc90101a8affffd211a0c1e31818f1ca3c6133ef53cd22cdfd4789527bdcd589c57bca76d6f976424b5863982c49114e0aefa3484ae6d999c0843eec805fa323f00fcb3d2235687d61bc46c80a5ec7509e6a8f6f14c580d5742fe9e6a1c8fa5e76d37c3715b9bfcc7c51d33e5a5efa17205a5e2d5a7200ca40d1f1098821c4837f4f432b588f6177c4a170c1c35294ecb945784ac4f33fbd4df1be1ddd72e8da320c89e393bf38c660338618ed417c1790b5458ef95227f9c217b8ea47c14eabb891b7256d4f2a00798f7e0c81339ae0cf312dc1a2979fc5c8cc47376f18de3e396633ba8e49216f363ebe652731d68e9b4298aa66c88e688796d3cefd7e80dadc14676a9fb40459c0c7b0eb8641186b1f6eee12eeefde2b2600c47598fc1cc9c922b9fc4899bb073eb2bb65476e48bd804097c1e2137656ce8f82f5e8989a512918933a30ff2dc1d988469d11bd4ecde93dfb7fe93d3e31a6cd7516965ce2bb247f5cea00ee44cfb9cfbb598d3812e380ef8214ab741e03d741059f4a50dc4fe1de7cd55f6fe7780512816263e67d476ddd9547d1c0fe1688739b5aab7b715489bd5bc3f688fe05e6d600803acf7540d98f9ae10329c6b0e2ec9d0d62e5871443a4617c6d4372be83a5a07abafce317ec8efbabe8b85e1a0d337581179607d5381cf6c76ba829eb0506c91a8c74b015cd611e6a2974ae9c30d0897e7197dae08fac826d98be0cd49382e326583fc27fa5906de96d669f7d734c43cc18efe67d71dd6d379d8d03c156a05667c56603a09ba44eef5d941707ff2e0a32b5a615f306361fea221df7f975e88aa57cf05abfd8242b43a108ff80fcfe4579f0c54e8c753f0051ce77cec519e2e8a825e5ae2383986baee0ca403192455e697052788ee78079334aa2726d6a17d637674ee915c58876f8c2e0c062e789bccade587d428382f0573da6c9398f0ebd1cea32f2ddc67db4e9f154695b2655c764e1dc44f072ccce86508cbd70b14f061d5799b1c3adff8d48122e2263752ee7ff22e8b5e0dbe67c882b5b355cf7631703568b0e0fa39469dfd074d2c3fc9e84624883b859e7596025751b18438ad15a958e11f108cfc6b074d03063c4e52c0656fcb635a5beace425d7d4506e9121359da83242f75a1ccad0bd69bcac5561d5a3e688140a87676f4ff88fc42535dc12e14bf7e9246b1e1fbb3d28c5c376c35911ad013dd16b13686c81545cb09e89582b2066ced72b5517fdf874665370dcfb67fa2999419137394419290056f3b06f41cf8ada58c1481b5d985587a26b34216f74090ea4215b499f691898605dd9bfebff68f3ee568091a4c2d310f98e5135efc4a885404507004518280c16038db0f3580a02e31283e39a20f7e9a001bd9db0910ee75f23c4c6fecf6144c00e53aa208477f07d1cdb77075ac8fbdfed00c37a84441a47e319039136cc29a6a5b4153928b7a3059d0fb7b3184e2cfe7aa00d1545510840ae8f1fc7f470a110f1375907efd305c2bca80a6601926544cf27e5487b3d9794acad8268b25695451964de527ed2fdfea22dd7e7bd9b8ffb151db2dcce11b18904fb953c1784ee8e46c30ce180bc72ff762688fff57290697308db9ae8d43d69df01be0acc049233a0dd4c7e9b994e0f611c8476511d52d61272ca476e8e237a6448669c78de6b7c4e3904ef777278748b96331478a6bb8c19e2e6ae0b474b05bc57f6b8c41860b0795f9efdbd4ed8761b1cfda01314b5d2b1e1979665089d510eb6d42758bc581948d880701536565f3a364ae4c97027ef02f645c624d801a883ee6ab0dbd13dfde42b14102631da750f6d82a643c1f82c33a95807f1c05f5043861f1df660f6a574e0c0a599474c02c3480daf280f12d16d82382174c79f9275065a3550706b592180eef61580944c7d5053c721635c26d70a4edc54f5a9b641f685bf92098461139205cc43e59a9c660bbdb5d6c4be729ac8000039526504d0df078463332904719e6defcb7d4739a603b143ee3a20ffdd44b754cde7bbc44a49484c6cf7428b632c8d275451816d64c0983712cd6a13c907dca1b5bb943dd7bab0de545cb73e13c5cf3c8667317ec8c8db5ae98684f78698d5af9cd6d6b89dbca704c46b7065a6f09af50bc940b5fba5e0741c6c57f33b7f0c4628416b7dc7d69584642b55484736571b887f945a25df114d5287c94e1045e72e010339d47b91e227dba44f2f1c1e6c76a88f17b56dfcd5ac34e0c3522e71d02ed0242a05e173f6b5d2de44614d3042ce1003af0dfc86935b697e2e45bd8b2e103dad2557230639f6f0e21e2703f441eb6be246acfa05b5209a6af070e41c699aefa5111466d214b2deb7c3c966f3d1955f35c3d88effa2c46faaf31bccabe9958f14d882d55eedb043651d8f9db45b9394030edae0fec20f8f481d8e9dc015c8c40361e995322db9c8f512c0d1bf45aeb4540ffa19897dc8a34b58107ee357fd37789493d1d63d95156e8ca6299df9ae6431ae7f61293bb952bc8bea979d16fa907e59c7afd3830cd1d87287ced5dd5b4ea0d3b3df6464a845a29e651175bb88761a98cc57af69e5a43bacace7ef5b7c1aac66dcbcc5605e240578c714f4ac6f915639ebf2f556ea38a0215d9d74dadb705a4f431fd197a396ee0358c7a052778a39246ca82ab2e1320ebbe218ebc23ef6b476303112723e436326625304156809cb4297a0d8e4933d8e61827fdc7a6e57c1c3ea1a0f57f9d46fc92be0a55e09b51579b3038656c8ff27fb86facf6c3339891fbb0150af9af117d4fc950d9323371eb20af8bd6f4820e17236b34dff54451570e90e5ee3ea4165301d9ac31e7e36efd6e2a80497da49c4acdacfdd9b9b226ca0bd6bc059b16d60c3d6184f65e25b8ecb843be3364822d992ba7908a8ce7896957f3dfe7bb71c10766f373ad2174e057b38d8e2b45852270c1ed7558eb6f19c3977afa1b0c3f77e322f1e0acbe4b65ccc46a78a7ad382b6034d114cb61b338572ede6305f9fa6b1dd60f64aba133c99a8f5d162ee80598f5d90507586c5e6592a280d33f211d0b16048e67f066a87c6f68e7ef3792980b9042fbc59677bb32148714a32d0e21d87a42f173317b240ea9e59d5c384949e3cde727c7fc20742e4b410c5b661da373a905fb0ed55b20e0e879eff5c758a5c21d5a0b96ffd2f3aaa564da8460dc0c3d20b1fda3628349a399ba52446b5d3626fd0039ab282bc437b166f186b3c5e6c58ffb6bd95f8fe8b73c1b56a07ad37572eb6e148cfb7750760dcc03fac567ad7d3536d80922dda8ac4e118fc29c47ee3677183ea4e06242b6090864591c3ddaf4bef8c4cb52f8e3f35e4140034616faf21e831a9b8 +MD = 388bbff315dbb2b93509189b95343842465a2b014a7cfcd02540d576b40cbb6f + +Len = 96064 +Msg = 1472b6bf57e2fc70fa1b299d9526b5307bd7b5369251518962c878ad6b8bd3f9bc41f7f7c172de0d5d4a985c389a3ee85b2028f9fa085fc290b2554132b6d4661c2635779113d2b3e252be36cc7fb31c06434be91bd3732976b91d53bbd736f35ea9d8086ecac0abb1ba02f2f6defb14a7c888ce9eb97505396439acb1f5e0e8a752487200a1903ef30ace5a60be00186438466f2ac34e9f043c0f14ba19ba8d22aaed7df09f2ab1d0cb8934b227a970651aec9568f7e43ffdc808537e4aac29f43830f1e6cc774f6f849a499322de63d3f6e408ff5f202c4c908c30a7909e064884779589315d5ff9bd6b61acb5873ad65595909803eab01a1c0474daf3786a44172b3282d5c52895fe6344a5eb8d3e95bd67f5dbe92b118ff5d6e7c17c229e1078b59078c198f36cd0eab925c9d6b439b9c2fe6f1bc998d2a26c51043284ead52f7b7714fbbc08a6ba6889d4594be7e9ce0e75fda1ae8d0cab2d7a4b1e8795bbc5e7affe8d1baf6a45457c5ca2d41ece86b3202c81c0386499802a3d4611e9e9c160ffdd7e9c30e0f7ea5a62ac5aa0106819c7a5c5e9e003f2cf2882b40b2c88ab4d315ad726d2315bbdeb9180c3b6d6fca934107510cf1041813dc3705ea7bf0c180b1c9fa3df85f627f78e25f9a848cbc92e14971d4bb40bfe31a880f0a2b76b2856ccdefa9d0352914504a3e2be905ce27c5935f79d17daadccd8eeab659750e5d9119d1355d4f6619e99036840d3375de78856880d6035f8d5fcc276378843b75e94e3d64e1f6a01caf54c72753ce5a0374903b7e2b8a54616bb023862b2cd06abfcb82bd20d37d791c186e7a6f0ed153443436c6646b10055beb8db2c3c753a8af224fa27c6e44dbba5b9b11b1ad723a51f1e8fdf33e18c5baceb46de4fc4bbc01e302b9671f9c90f48eeb71ce02c3154849c0996a6bd53f02ea461bf1241f21827e3a66737feb556532de1f16a73a9071bc6c0d3c8cebddbecea1419ae744559b64653e23f7c78586d7c17e1e134f2878ca39ddec09b33e68dc547324ae51d4a725f1a4fb2fb7add3fe541356df8749c7e3b88feb7ac1bd7ba3de2540f1de3b50438e4f5b70123ad716f47363545970d99976a7cd58ade771a5bcdc525a3fd6013d9971d7718db8faa22112962a6c3a486be29a041bce58e5626f1cdb3ffd51348481d0f19c70a4d920788591ba06027edb8afb224ca97e415a734b6e1bad1984b8f5c13c69718add225920d89bdd65f758ee2faa53d5b4000e47fc6d95b5bb6c3b63e71a60e6d781285188cd4848d14c747acc0ed9c9b6cbee7bb47c06ada3458c3aa70e0b67175f92d031f237dee0e8bebf44b236fbe2ef8b8ce7fc16fb6dbb3c087599d178d6e3027390e9e315f146883a2e4703f2c4f565da2b701f356737cb4bf7404b727295f7ba4a16f2749f006169dd3fc924c977fe01d36ab7e24c45aa839093e20a9702d2f2b20bbe715680eaccf60eef388cd1c482946e5968795f6a3dd6072da7909424db5d2adfa2945284d1fd36fe747bbd49ead2dd7c5e7aff8ad93c1c96b01bc47dc2c006ae7ef4efb027573a6f8f22750e99034ab92addb07ce43736b5da753e4e577f21d36cd4d30d2b989bcadefda3831bca386853fdfcb0fd5bf7f38d594c06f7ef0ec702d086ec6d35dd88ea79c337f18c292270683ee7731ed2d82f24984822942ff1c76495ee5ac3723248234e9da8cd8f7ff6a91150f40459fc56638d726602f7fc210d6a8372a5fc5f6e96c034a002fdd96d4cfeadee80efa88982a62640b0094eb6377f3c4361ce58d420a29d75c0d6b72aa0715ec12926954f2e6cd4312fe651ed7f6e795b9b8ab6ff6d7028a88bbc91d55ff3e41a71712b0db36bfcc5d6e1be3d41a2db1997940266e9b376a6d81201f3e800ce68de61d24bbe0e006d49bddc2c2aa6d20c0a8cc3a111e6f7ff1a698fecc5127e2ae47b338fbadd9f960ccd444096f4eeb148c7631462753d2fd745844663c383df081fc75016552ade74828f0113179197f6f679577808b6a7a3189787607e7ff3dde1f6236d0f22b5258004e42b796b2e897c7ed0befbe504e265223637bdb317ca4448802b5627a8a4484e705cb4cbf364dbdc26a3d948a639bdccc9560bddb951c956dcede4aa27654de42c033434653d9719bfc32b7229fd84efb747e34036f8e379b001150acfdd033e8ddb8245226830c002895cc1fec24d139689ce9b3f442559a02171f9f09ffae5fc22297e89793b67959307e8a31c98d0cd98483f20b7f15f03ab85d83812a7431d93943128e50968ff4c9726a560da9ff2ffcabc99c8f9f2712bbb3604c99b0e588c5d1d7f304d5c9622953c742394e97d2cd093e90b81cc7f0eac83f54948804398de840aef59ab00b18c7aadf94a35e2abf445ccd43b4563e0b452780632415535a3153a86b0eca575d761a1468d1dba09905283c788e5e63e7d121b84dada03ef4541ac7b059a2afc20a1fc9fbff969a25f3acc59ed366c7461534e49b4b2e6123f89df40ba2bd790d28c1e69756188129b7ef51feaaf7d2f0b868ed96254626afc5e318c311a51e077a095482fee8be6ef8f9c6e13c98ecac63c5b9836470f45f65f41921d0e10778a8fef9041e8eb7bc5fd30e8db1d17d43be5431ad2f3434fc7dd8e16d04f99b285aa8be67de93d6da94840f4b302aed7e701c3d5baf1b4c4eb89756efd87541de37108bf1677e82923e14b362e12ca4232225c6d40caca51dbb3a62ee72de6364e73d49ece1d722aa058ce01ced5e0bfa7b78b2616d70a73131c9ecb4fabc68801337de9e742720eb93f380bf7c4888cd241ceb4afaedba52c04adb879995b8fb6307345046f4e31d8d517a94b5738462c41957d7ddad474710c719b076f3bb9c7eb4324982c9d3089eaeb6e3c16668820478e0503b38b4d9ca478d76bb5dd92d0d46bfd34e2b58736c131cf4c8a99af58c406dfc3f146bd096d31f238d5c7a74b7c6c534d2a4da289f87940ef1c584830379e5240ecbd2f41b72b7fe1677063b253b2bb538bbc1ede013067a64418cf4122c3210d3e5530c022c3d4e7e36e548feadd99ea5f9758bd7be5a814aa51c0f60603b08b4e855e2f209995ced217f63eb25b63743e45eca2b907869cb7a9b9d961de854d95e403c9412b4708ac13c5694a9acc73a06e5718491487a0e4771665b6b213b6bce7be3904e74d17d9d85e8a044a298b2e7704a8ccab3fe3c9405325853ce0692c1709f8dc6c2c9ef3dc0e0b8fb81f0d20d691be8429f3b7ceac1c934dcd7fe75be86373380879e082a570783d82f18c20236ad4301f67af7cf0cf3980f24683d4d25752c86a999efebb025aae29558ab4e41c843109e03d4ce4e772cf29e8f11f6b51f1de01202cd083502d4219bf7b577f0339076811e3c6cf01e97902bba1a429efeb194a821c90a4c65aa9e2a3f0707adb8d33b8513573358b082eeb43080b849da8eac553d0c785f17d3602876ca86df1db46894294caaeff59416223a6ae11c7b5c2fffa0bddad5e1f86f7fe5257aed2bda0495aa44591db4760f5b20004380a8c426909005b91689c1d415d4416d41aaee176fdc66c94bb7cfe1492a6c68de2b6d98ef560c9b8ad7d596d48b45e6426297aa0c08db81dfc44895d3a0d3d89cca018d043af90b9995ddbda2515a6e581b7ec35375ca0943a48931e0c96019244e250eb783f48eab8980526970a88ceb9c4b6d2c6d5ceadd1f39c05aee38b5dc7e8321f07b27ae287c675c102e56c863aea5ad7f36b9ab17fc0047285786342e24c3d19768b8f278373ae37fd48daa2919348d341908d4580588d0324c701c81068d239493cfe2037fa0f09ea974bba3a5a114345e72ee0700766260151ef73cee8721cf449507311f418955f734823a19944a654d1e808eb675069af9b94cc9a25cd231c331e86bddc6b98c04f487563fb438b02e341254ef2bc3c84169a48feab23ea057cc0e1783d7852b1add5360ddaae5fd48de2cc17240a1d2365586f690326e05498eff9fd71bf71a7f176dbebc1d5a35e442573d095da8a01da67a665a836949e19e4569a23b16417bc95ddaa4b69d3e4a881a307a2ae11a41830847124d3752672568dfabdeea88581bac1b5d1db802c2d9fe028e4e5329e915b9017e3ae10a234aee67bcad7cd85c36e1e8aef9b268945d8a1b0d7206b35c8414fc67f06e585d36616b9b50d317d14284ab60f39457073b46e4bf3d03a1e3f7a2a19417e6235c104852116ef72ffd661ecb3bb265b9649cbac36c5851dcc696e956cf58525569012c84e6aff10629cb36b007df2d75f3a76f21db6af84b4d8a7384de5bb9d5cc319469e2bdc8869c9954c28c21f573fc85ec67d51c01d5c0fbc8948ac7238bcdc70869cd3d8496a0f700699221c49bc75db9fb2216736466106eec9b44985fb4ec10ec6eda2e1d7b0dc30de086a2d59c585f478aff56df88f2eff6d97c2139c8c7355a8e3acd05760424163ff99709c29e65b1d57fb32d6ec9d3190c14c5015281fe1bf5056935d904acec7722ac1f825653a3ca40913860bca0bcfbb78d9f9a41f4976be40b95ec34e1f750a8e8ff24a8b28432e7f8e7a6f3e0496f0b7ffbe8309d36b87eb90df7bd4d9f92345491f0bd08bcd51ff02287971a2730b8a6fe84768461a37d7d8541c7784d046df6be2dbde0b37b8e82d14cd0d7be0667078eb53a2e7ef6865fe51379e9676ffcd86c25d0bfd0ecdcb5dd3ec59e76b9c0ac94c5a425f777446615b5fb28579b8802841e1c2f7defb2922ca29ff7b7106a9cf9faddf032ef5c9afd6f76bd8350ba7aef61ccb7224eb81fa7c3856ae9d40edfa39d0d17992579038689123155563a4a933606e025cf956636e8a08074cd537e7cf55b2292e341aa964af60a3374af7a5ae4f230ef3bf16fc25818c0c0c3e2806b4cf09a87ef5c9616fb4bd38774c1102bb5ba31e8597640315c14b3357e62ed57e8f407df1273cfefe43811b81c1916edef836b78f3cae36d3cbcdf3cc57ccd2a128eef02142e5e074de64e2e355f938adb786508cf95605c4039ce3b62d829cb12e6dc58bd344a487e7c1151863b90e9c1bea7feb780bde8b0b3089c1b1d082230255549d52e9b99be23e389d95314f2e980b9c4703204f8d35113c5b9f37317b473e33d23c35ae157034b3ef452278d9ae424c0c5543d73f23c792004047192e5f70c9c709c8e0a8f43d1d8a0ded1a21e126f5c7d8e6e43559cc213c3f50a7b0dda5bce84603ffbaf0cfdbfa59f1b19bb3322ff5f87a14f44987408c07146ba7243553b27b8759cfe85585bcb3f0cdaba6fc51035e8dd7f07581966c11e2e375c5b844b214c39d5c6d76915da63adce63ede1f9c5582bbbe50538958fa4c9db154a6f6739c3928e4d29b85399b504dbfdd6fd21d88092eb28c75afdf2ac208ce4379ef539c689afdda4ce7ed1dd1cead251a2f035081af716c50606b1de3933104a9a5fe7fc2520bc6f32ff4a83fae4288757cea697cbc7f828c41896e11eb9e2adea0b0b0e6ec932b46c3ccc4ea8af48a0a423f1d5ae4415171c9b675ed704a28516636fa36c938998059f1fe62d357ac31157df6cca54b7bb97f7edfc6afe98fda7cdda6428640745848f0af4915c051827d2380127e0243cbc94f064e18e0b3a24b313f8a926f6e371745720dc0e33c86dfdc43fced1a5c114da383d439b4567157ce309f7bf9c9955b5cc1117324afb6c3e4acbc60d827226328c30990f8caa0290123c1b194290b7bc32704ab093d8aafe9450177e03787a02b5e5ead1292b7457683b1c1a2ff01ff050e47b705688b1a66874ca0b70fb98b37c033ec96413f339adae02acade015b9f016b459db33099c8fdfe69b102209aea7339edf848a059ea83cd6b60288227fd8adfc5569ff384ad13a73182c16545afe1c10fbd3b734ee228e9f1f7711cdaad1525c4c4917c816f52d7a690cff011e4b679f0597c30791e34c65d154a39fa2a3adda24c4a1416ac55f0176f804986454bb50e519d606efb31d30b3e1651fd0166581c620c629ad07791327384da293e2c12d83a116ba705aa909ad6680d59af223561aa5ad0a478422b5641303a712bd203dc776aeaa7d9f99f7a72a1c4969fe8e63089d7f6ba00403f115d34e2d4bad81889ae2c45f7c4b950389765f04a6034faf794e63d5204fc4ce22be55bea57a8c17e22b815fd72644343b92748db7c90d42530182cf2f2c0c55731d41e188ebe8f1899a0c34f4f84f92a6c6816c0618712580ff03e13564838cf037391f5cca3e1e75778e653d895d25b05aaf2af9b8235fe68d0f939abfd27d825666fe8add35a7900a2e7b18a117f64295254efa70caf86ff6ce6ec605a1300fc0f00878ed7693c09a15fdef07250c45c00c60700a0ef9028067f921fe97ab80befec58fc1a8eaef716a7329842e6f9f238be8c34c9969867503bc14725df8be98b8bc372374b504d556662ee0da283a06cb6f5aff1050e51bc94005289b1fb0964775d9d982fbe70f015d66e3d33efcb1f37c9feb1eb606bbe20c5de9f8263d00d378dbac79c4806792e03954beb9cf6b2c98f9d769a4d19c75a9857d1c174f1d834ea7640218b72431770ffd46a29a7e9e4ad08c99212e08ab9de3acb0f9cd36807ea3c9c400749008ab50a411004530701a8dd357360545ac72e13e5cd59e93f29039a268839ff13c036412c7dbb7cacb9096724bea3e9c9fafe6fac7b2ac7c000cd0b995aa2090f808b30f113bda93d63554311c45c155acdd59a99a98de39d27bcfd4f47cdfb56240a663972995d5ba902fda724f76b8fd83a4137c901c119165a0bc2c01c4a8a235a3d500acd0d69e2a9033f711460db7292e0016a04e4e6550aa39e641b8b0e16f132ef4cd73e0ab89dd065192179b05585f3810d35c3675c65513ca45a11647755f361d9367390837801928dad3ab0d969f82112e2f12ea4e09117f146923fbceedb520069229dfbcdf3425f26085f76e56a8c1bbad29eb712efcaeb6f61c26052773a82eddfa559e6421efe1a871ec65ec70c981bfc5a1b52c9cfe34324cef9f74375b1430f2946775a72faf91b71405c9a3d1884e2c34a56cb9189503fa7f263bcbe1bf745bc49e7c8d8d65059e96d5560980d940a7cbc6541ba3e1536dfd22e6f5e3378f7b0ccce09cb00aeb6f9a5df9697f7b7f7e8ea24d89482009ee9219dc7e09856b9b9578099c41a62a734a261b8c7576f1f9a6c0c0cdaf5b0dc56695852efab0ef02872a5f55e742acefccb7253b0bd380603ba813ad7f9a473aa01d49cc5fc002fa096b4a8e4be4582e48987d3ce99913fa74e3b0f261e39f95693a9022dfbe8ec943c1321115971677e7528d57b6d091107af8fd64fc40fd1de872c2f623b17ab85eb77fa4ec60ce11d06cbc561b80e4ea756f64caf9b8491b46504711d2a1ae0f82d29910784968452d6e71ffbfb2f3d08cd14bedff536bd7aa59873b95961116d69ce81c6259cd5b23e1161c4b6ea60ae7a41c96b71a4b993d17eb3b14998d15839cd5925298e39bdc4c127366bae5dfaf733e8bc814d1a92611d9dbf6b10953b05ac638ef0f934c8037cdcdb9a098990cc31995dc4ae64e8ecfbae1e4e76e19865f24d8e2c5c6b8362aaff1eb27a77e251e157b98c270d29ddaf7168542a2af2d325838d2c2622527ae20a9a557fad7230b9a07a686587b7ab9f64282ca8e5dcc5bc821680f50dc7b4a88bb8f397aeb2d1310ffae9e87924ef4212d82871a6b8c63de5a4cb3792559874ff050d40d046cbcdf2c5710e45e4014df9e2e822f2094d101ad25b6c447e9ecdd1091319c6808916f564ae6562979a0975f2ec2b3c50d2d98e09c21188c55019ae3f9561060281729442f28c7392120b336294f90a21e000dbc58fb5f3ac24eef30314d4f34f4d873c0addc1ed85f1c9aecc732acfff0d0c709024c809a5a5c42c1e01e432c955bb6906c0c434c5b1db449b172f124aa282e8f411d63f445b2fc5cafcfd29033285b7d15bf1ddd3eaa69148f174558758daa15be75f090abd886ca466ae6a7f5c8c84f50fe96d5304c2117082a92e57989a365205c0fb5b35746d34cf666ba04c267cec4d0957a588a4418c5b1bf11dda3814510daa8ad85b6a63e6a7c3a11889e9fc21a3d0316dfec3ae06eb7b425ca64ac7e36f8a3be4a7d0dd547034af4a8e5d7f2f94dc6efecfa6b37aa41596867528dd839bde8312a35e35e8c937eab8c1e79270a09c74da83d40e421599624ddf78a1ac2325f4e4c658fa2e034be7d5dd1ec29f578ee7a3b3c1fb17c06539f53db0c0e785df15cd9957b69eceff2b4438698c061a224bdcc7f716463517823f2847c7a044884a5f84d0e7b57cb029665c6e5b4f6904f5d838f9fc67d40edf6e17c40270dfb016fd216b09fcad1d66cec183bcc5d4958a389f30f9f73de9a60494bc2dd3c7c51038f77c99fed08567dff0502d13ed528d706332bb7ec3067ab5277686339d55aa956f9c14167786b13c714a28c403da64121d85ad591403d1d238a9c83ab0e06a84f22014ee129fb746ccd83c20c88b928036903c30a150200e50cc5033a2d3c4aa37def8d0224efe915b80d3e4abe4bd6d46e9047feb7a09abf834aac8f3ce4d57a8ff4c8737030baea5ea9c7a1e84391bb70682a162ffd34da7995465242e592fbe279c5db15a52f1446bd24b90d88a2e0f6f333f98403155e750d992b4829c94ffde44de31c3590bbf8b31e3b3504516c88992c4fbe988772001a6cc05597c29d689e28338cca2406fdf17dcf689ee587aec2dbc2e6a6d03ea12489bc7117c40eac101e726d4b341edce1091caf3ea858f1d60af8021439ebe093b6c5a49118ca50a1f748c79f082b1de989cb11cce008d83d7f991dca0aa145d0bc83f7ed07f8dcb87a5fa3b0e8544973c7839731d6beec5f034e3cb08b87594163a07113d7c1d8bf715c08651cc1e7e689ed4853d2a3b3a55dbf69ae04c6a34f72c11becd04ccd1da2eaffa6eb9b7faa98b12c1b1bdfb7755793abacbc85ab62b390fb5e3cc2433ad5af8f5b9f0a9927bc764b71fb998038b7720b92fcedfae3ecb51c52614ac07ed453c06c7e35bec5bce4ae3eb8fa945746068f480c261738e6d883b1890dce51667f9ac2d14575ec62a45c689b297d38ccf441b634578acb69a03a61fa32f41b52db2643df614704745e5dd9ec4ec34511e729c5bca9dc033db5484cfce2bb44610e6bd8f2b2bb75bbb9ba77f393ece5dc854e5beb43944729c0b558d945a9345bc1716a506059a7ff5e7a2cf81e827ff676b8610a4d3a01f669896fd7824853089b41df4292a90208f5a5df42170d7d28636fc061f157986c57cd7840c2200a2f45e221107034ef9d2544781aa7134638f47c5e385572745333895b5a2cb7bf9a665c16022381d488965ddec8f61e42eed0e625d7a113fd73a4c3006ee997db0fa7b8a860d3181a8ff1fbfb942bb5d914a0b5fc85fec29b9453854fc32048c757b0fdbe71a7822a7bde23b6c56e6173700bf1ca8c9408b67de7d630a3fa50ea3a28333f7ec8466a1304dff7a5e9a878ccbaa379328a6cb6f709bf8b549f39ab7fb76315cf5eec44210c36a67ac11550ee54d3f0c0087703ca6146481f368b74f0069427ac90fd1f6b9d31ac8d212d639e8287177d38af05be96764f4ce7ccac53bdce5d5d860063bb60d6ef262f7a1aa6ecc9d6b3409e249a51548823dc86ba7184199f29697d77d7fd2f588d1383dbcd39a015a848ccc92839eadbec3a400812017ed55a61fcc5871b44cf09f6d00fda1215bca679c05a2ef73f31ee2c83fdfddf04e7369506b495621b3de300ea1f961e2eb3f3fa024175325b7072d8d601fcc4b4bd062e22acc77cbe8864585871c906f5e2d7f41ae4c5934782c066c17cd55994401153d915e70e359ad127a26f3a7172329c8f91ade6c20a4d20ffccd65145af56a12db258bbc3865975945180b308ac8988f2ed039f66acbbdacb807838300ae8fce435db0c40bbaf97c8ec0bfa73abd1e546b94db92736b335f164c852c4afdf6b9fea07a130dc837eeafb7ad95977f0f9b27af5fdafaf1c7a99012f67a6a52136865a444439efbc73230634156219d00d5fba6230a31fe0f2eddd163e81f498a5c20cfbbb03fe44be9b96a179379857687500fc1dae8ee6e21282e3a0fba52a007b8892cf371002a7793229cc80fc6f541bd52b8b7605169533780055bcbec18ed85773487d2ede76e66334d5e44dff1779c05741a38b58527645d3256d4a4498020004ee7c5fc07209b02a5d0c94eefab849e808de2994600373c6d8b64e9b66210baf89ddab90e40ba1732ca0d9264500f846a8cfe6b208038a3f353ed4ae405c01dbe0471a361413be770a47228e407856d9e91dca9a929e10a805aee3656edb69efbc63b59b4a4a909fbfa9790e3349ea0a9370dd3546fb8f6810ad84a837c7cb55e5d983a5ced79e51126fe58e659a3c3f6d7228696b438ee71ee4be5fe548af7423508c3de7e370f6cd416ff61f94d5e140c9b21f4b9d968df7fb9972be859eb43e71d94cdf968ff7b6c61d2ea95f3c59d41d83402c322ec262991dc90ba7207dfde371b8fc1782ba96a7f91f4b22f90ef117a4b2572adeee2966534c13d5bb37294e5d6b878fd1a9348c0baf4d0695675f5e1c5f14ac2e79120c42e42038f94a8a5ca34bc725052b5a1b5ac7f63297cee59bf32dabe0a7cbe630f27778f8611fe8b34d420602a5a7ceffee508fce87aa4d76320663efd04c6c7d6cee643c7b1c0bfb62378a4d398759decf306004ee625d96e0d1850131656e98b7322c2cd0aabbddeb119d2f4a32c3610651b1fa5360dea40576593d537cb22cdb2a18f1e732bf00efba85d05f10d42f9999cad83e0b9747aadc27ccbdfb02dfe1bd70b3481ae00e76198a57008954f193f2f2c737cb5228d5ed37d6f7482459d0d57b997ccbe6ac8916f6edb5050a4ef94373efc708d5ef9190d0828acde043b05982cc0aae99842e990fb907ecbfefd5749377752ae943e3ad3cf8fdf000458a30cd747a2ac03e6f8a1fe47da63b7b2e6c9b87ca9956ccd52dc161d81b4a066544a4b755a6258254d16c95a09b469b0d15d3494dbee4336ef6a8e5a4b5882f497c4fc0228c8ef6e4573ff5f634a8f7795682e386ff5b20b6f139abe82680673ec015b56943c4452702df2c09d728367a17f17dfdc5823ab606bbdc2cd5fb574df840bfb3338f1525bb966161ed9000184069403b79222a751e789ff92cc0a77d0c160586c4b60fe76baabc84dfa6ff5cba3053c7810397fb1fb61dd59299fed7e5e0b06d5e03da74f86466fc1333d84d6b8edf2947ed2a51f3be7d4b6f4c046169e5e7ed693c1ed44c0c8751f3fe36f43ccd0cea31a88b7e80d8e8e02ca26225816fd3904d2a85104dea4609e6d1bf5715340191a9fb618ab04b861e2f63c02b16c49bdd7295b52fe545ccae53721b80df0ae7a616b0557e69617e8ce157c5790e2d695c41455639fb6741c7a4aaf3778098e5b1e08d0e619560f9b2aa451a1953f26296200111377696ccdd4041ef42e226243b6e5b353b1b911e19f3f76713cb5bb01278928e30401b95778fffb6ebebfbcccb2ae17115e33c16482233536d60b07b58b2c1742c403ec51df9acf17a856104ea7be96bf6d5a908c7a1c28631f938eaf134546b335e468458e60f47f5979ef41fc939cae6d91f1d1fd66ca9677d3c266468131d4e827df9aebef1616609fbc5f27d9b37edd7e87dd72bf86415d6045739b5c82f8494294da9e91ae6d4c3c09febfdd45a14b74a4f7706305e45ebd8a3f982394cde7c93a7d1cf527f48ac35a993b2afda62618ebc88d1da40fea400352b392f1a62220330add961d4c9aea20c7104f360e0bdfbeb91f3bfb149e9c333574172411a6fc010c56d0e8c5fb04eef0e5c679394b4db041ad4a75a2da26bc60602ca6a0e49146ea1f52250129b827bf020d51c882c7431abdc5ae2b2b73e15bee4ff3d459a4572cad766c7eb5586d8a1ba03a2c40e1098cd739ff3e01085490a4fd861c7489c46c77d9f9af1c7a22da990b9ce4e43f56107013f32c09687896fab1f7f9c3c610f204d98702dd91ea28e0cc14830b26bb5e2ee0349592f8efe77609a3ecd5fdcf85eb118f2a5744161da94e2b77242bcbce5a2b0e0b3c4e0cfa9d61247609855260810e6c8637e548f1492e3c31add2e9d9886119ed73ec6258d754e4160ce13c4a6d1cb996fe19f57c56d8d15326a0b818300ed2ccc838828aca618d5d2eb5ff8c05e8f0dcf836adf748da855c1d0998f2f790b319a7d6eff8dcf36abc0d681eadf1efacd8d4efd4fa95afc2bd0f921f0235a34564a12c0d3b95a716a3177c1c48a79d381b1289fd0ed3c503d66cceacbe7093043e32cc5cbb6ad91ba2eb666ab4ad7e4d141fb9a8ac69b6d368b313e4904f0c79f6db2c6100e325e45be7bbac9a6a0f36347ae34a4bfdf1cbc471063920175c113f18c0bc9484fa0b0e9ae0346263cc9e2ca29b6465d702377a351a2cd6602e54675a2dc1fed6e1ea6b7378a4a52142ef4d354689a2ab64a11a6dd4322bcfefce104dc813a84f6a1cd31fe97fcb38eea41691791c5ad1a5b2f599a8eba89d1ce8ba3224141954ff1cd5eec7284d013c472945a7af26e021c7cc271cbbd58e223ed5c5c665da9e0d64f47e7620b310c852f5c056c47f6d7579deb4a4153ae9bc3ae367236b5471318fbf2d8b0b95fdff51fca00adeccc02d23ddc0e39a2156376773a4cfa72f74f7e7869a8a5b5e1f6dcebe533850a78e956029ca3fbd514a203f06ed2f9bb41fdd16fb43d87283fb7023bb6863ec983f6aa9432f3cf1234c133c0dced7db9ae83d987d9819e39028c2fb543e21f507490989ca9e5fd81fb26ce908c83cc93c54a5e69e25b3411b1dc2a04962d6fc8d31ee6c20660cc4cf33a9c07847d2f720eba28bcd6b28fd7d40ebcceb7517758290a5dad534e8698a46564cecec4ee7e123bfe29be70f8b4f48cadbcac347f29fcbbc506989671909510f08c723f51de5836aa58a17cb7d098bdc5757fc0ce63d799e674db20d5594ea106ea76d5a0bb6911f2f087be14524809cba238dbae2d3f0c87a026d4fc1e57826f90e470223ccb369f9a791e57628cd889eadd6f65afbe7c7231809a2d053919f325c3f7208a080b79fd7d84c72aed92c5f678633c12db516dd0f25aaf367bd059521c51e2cca8fa47c29ed8adcff29f486d109f7b7e1ff3412582fccbdaa50e6bbef668b02b316ad390e102517c2468daf8ae0b6a1a10cbb6d73a68c9193f3aef115923d2cf2dc3e31050eafb570953423f598f510f383f938f2286f11ad2beaef54e6a8fdf236c40e9f279f3882bc94ae9191377841fb8a2f4413f8a06e5017010db2531849ccfb2c4cf9580381233b89ff67f25a24b9fa9af9f79de04016bfc0a0b3cfee51f530049f027ec8f44f75508f9bba391465a7167441d333dad641c8ce3983f2b3460f41f5c187db44b7fe9cd29af39789853c2c53914d2d97154963e6d1f3b7d635e54ef1b4e7cd0af313c958f442f7fc7f06371854403ffd5a333c7b0ba3c0435b5e96036b3310af67715093160ccd05d9b1e1230970ed762b9bbd0b45288e731ce7b1bb42ee38baab83ed019ec5990e2bbb95043f43a8a9ffff60082cd684fe00fd2c79da6db7a525b7d934fd11eeadcb7fdd5c542d04015dbac0021152464c8e1b50dfa05620077ca9bfad9f56304d5f9b246be6b18204ab6a4779910044d73aded95d232be45a06c60acc142700654e8a04e36565a53c8f9a70ef3a8503369d943062d15377055a993520f9f8c19e2ec8e9336ebde01170a7d6d36c44f3d30cf7c09139617aa1fe9fe93c9f30165066d46bdc512eb50bd53ee3b6a4b4a9452f563458d9da41a84946718f928151148d38e75ecb3cb6b443ac2209727895f57b5bf63a21228e90e129789a625114530872f63b2b6c4783429c0c6c63f54c7c576570a5bdde93e45cc568dd9d23d2b47eff12e1f031fa01387b1d2ff7bf3f4269ff4e3bee63042b0286bcc9917e0e814749b7e3b83240a6bbc5def48c3ad0d019a5e95d616441cd78fa0efeedc43a71f7ef7fd0f1c1adfc3308cc3abffcc3bdfce5dc9a8536ff5426abb9ee009af8ef176cb51a2b74b46a44b06f62f1796a547a3b9273e86f7f57a1f858078866ac511c2e022fc3dfd6895759231dcf35474c18139569f9825430618c63ebd3bbc7507ccfe192694796c1e16fa1cbb7c4dcfd5d0a7ffd36f41086ebb467fb811efc65cfbecdd27a6077bc796045ed398cbdf0cf8c9c9e3f5936b3b72ccec6fee4adf97b674170759eebd195d799f2d3014cbed61675dd6106295f4a4222decbc14e940675c6fcf9778599bd32089cf2d71bc01744b62b4aaf8ae21b80ee93761960be0756d8c8647eb78d660c3c2c3752adace973c8185aa9bdd4a1859c856c7186efe486f1734519041506d28f211f2874cde33016252f8944af82bcb7453d4e13922482ab7e19cafdd936018c2bf8ad03bb9b163ac227c2b1eb2592b9235723b95d4dd66159612907327a35bd9d7274ccee5772a08fe1ea781010a43cd05886caa9d6fead95b9a7a2c929cb9e160b0442eecef1e1dedc6529a6ca6d9cacafdbd9f04667faa361cb7305eb5fa7f630d008256800694f75c72927b95b6348cbb769d922aed3031818da61255e55de726c8f3a991ac1424c85090b640a2b154a9dfcbcd23fc1453af45b637e34423f4e3e4a96f8cd6467df234bda60d64e929af40523fb973fea48f268a54c9dd79922c9bcb2fd84dd109c26541d265c68613b5e05970551c952d097a47f16e7805cae9378272ddd95fd1212d43c2b18e2d1aa30809e75dbd82f5068718973adf72a302fef5bf034195dbf5d2ebff5785884761008a2c3b1f6d046c9723cc95d966265f394d9eb24f1d31289d6210c1733fa1d81003c7550afc6325f0901be72d895ae82fb19752c99fdba0d6d07d5520fa30ee809c411546da1917da880998a48547862a4a334b78c2df47c55dcf7d5360fd8c977f20e29aad2e2c9f33201006fff51f703ff905242f4703b22f8da0d6190f9b9ed1ef23cf1eab4a86b8e7b81ba26d9c4ab972e9958e1bbee4713f256fce6f01ddbd3342add4975bd63fe6f6aa13b6e600e0245d9286615fa4496e76e72723a89c6876a6fc78fa46d8f2a6337dfdd8e3dadb99cae5bf23ce3adfa1fa05cb357623fd3fb784b1ddf3d4f7aed85a06dc7d20d3599954e268f3ee5c60199363ac55b9a217dd0d28474a1176864b0ad6c99b19efea30a89739b607e8333b5796912ca87f85805e844033d998b7f65516a7250e58d6f9a8859dffcfaaa3c81b0debe236be1108406ed0967284c840026e7e024735a55a1e559cb68ccb3728a56fc261ac8443dd7b8e005b25634190db85571c0cafddbdd0ae3ec3877278c4bd651f9052fca467d78bd76a3a5dab50a604395aa5ee088988398c0e08c8ec022d9709576f4bbb0f1c0e5dabf9998de72c922da45919ad260c9e8d7f57f51d4bbcac889e4c9c103b11be9b07aa406fbd35d83ae2725955fc248449ffbb209308314da44d32152c547f4498649479d93a897e68fc36d587739a93c9747e72d49f5521664d67de96c32e475dac006d54c6ef2bbfdbeeb6cbf3357414c8e6126a7af0d1d5843320d6efe670f0c5364467c930874865e123a9e4bccf32e13c28ddffca04f9dbe003753f6f675b997e259bab143b0a835945aaaef84b2ca9c7deb398aa63db3ab5aefa1d90d3a60e203877d463ef0d1e9c4355b9b1910906d15a76ac5995828af94aedf0135cd70e63a783ace54a5a1cf346336dae49d1e2a0c4ada2a043f6b1f5fed71fbeabf8809197479c62f5f867a676ca33b91a8d247d45e1e445154099f1f33f145a68104bf0324c0aa198efe5fdfaa57198ac44b4b00599d910b267283450ad36ae3b2859c9a0195f6bda488040fb499014a8fe7a812b5de9cbc37348083ea9ed84ca47916309360488630a1eb6a040f9f5b6c35d38dfb57c3cef6de0b3e5bca1a2c075db08942c5fc0dc3da9a8121113037d9c481c4b2afa2ddf5cd87e6c6dbad1c3ba1ffe6982dadbedea085e78444506a69020769443cc643b4818b1fc45a0d97b1f458eb1c0dca03d182320fb61f9c5d8a8ce8ee58958a9aa3a8794bccbbc8292ab3600946fccd875cfe236c3f19609bceb3aac648307c6d4380f6fd5877494ad67d89c3916144b3c172de7f77c849afa614c1839b94181624d97896e0131d6775914aac93d1bc13bf9ec7dc0882a403912ed198db36fa4fc7e082bb0c25c11958bd3716b6c49021a7c073e459ff2c3210703f988faf7f549d5489dc3515b0db205fb3a482c06d580a96673af4843ea5b4777fe5115433df2594027ce36989274cd754d8704ba041586f263250c857e8fda3271118cb9439e12d811f9fa796883ed2af2527dcd55821e9158d071214864c91b9aefe8c3d1f609f9a26e246856886d0171ce1da8916f762c98d7017d0d831b19c014afc8ada2458923523ccc262b53e111256fb1808398ac6c6344029894d8162ca76c30a049ce71dcd0ca0d9e13a9b41b7ff851e9678bf71c9cc118b03e08f927d1a4627293ad9a150d579387e97761d70342f095c357f7f0a900281c29b4aaf7bae1c8eb2ae9eb16346ac5a854c3d08ddad4f74d3e059230b38998a5fee410e489aac9d3b38a4b266b8c0dcbfd97e9852b36ccd7809bb223e1e5d213659e15386788cdf1d999a48fda44d2b68bfa94061ff1d9fb32243e125c9b3c2e05eca0397b023c0e411ddd97ab1a7d32a7f5b95ade8c8583fca51e454b3340bd87d59a31eea07ff2961ede8703967407f98e40c78f8f373585283a04d735458a9262e966e7eafc657ea58fa70d4120fd28cf11965b8259db76b47a97282ab35bcf9976218f691c2fa1b8d83eeea2e9dcddc0140f69ee523b7652c645659af1f9e68429a90da44717a962a196d142386bbf683279 +MD = 3d1d1fe1fb2e057be9384e44bcc084bb04070adc1bb2b04afe9899cefbefccf6 + +Len = 96856 +Msg = feb3b44606d001b5f398406ea046551a246a1b715f309da5d3e689feb5b9e1c144bff4575a3b8dab411c6ad4c7c6eff495151c60bc9fbd01913ae0fabbbf8c8a8a0db0348b505a1e598329b8b533059dd9860dbe0a7dd1bd6d76c2971bf5e78677a3d126c097d0d6e2d567619214fede99c5d7d4705043a20ea1161efee3587db48b3d732199579a851a0b1885f2427d7dd860ea17a27a781dc3c4d78b124836e9cdde63d7dd5834ea5bfd25b65439422cc9924827fade0741e5b30aeb09207abd6f9a400aeb396ab8a025d04ec24bf74fa05435c7e1d716230dcdff45504611d87b5b50e14c640597ef6b6175c4e0628d638dfb1fdecd6f6a46f9fec27024c3e3f808dd85873fcd3152b71f52e3604d8f1c27e0587928d8bf951f4e8af0205886ef892d1e2434892bd0f1530ea6337efdd2092d9a3a501aca042838c458a4976867c688d3acaa0330710145d096c1bd7e8e1b290caaaefd329afa04993117493268a638cca60901e63ecf3dc13972d4ba57451ed750a848a05f7efa3001e1368bfb1484329ab84cf53e4383091aaf895a356f5222b4a7c5bb5c9c61b2536a261c26f5b32d1021ac067a465ecfbedea60630810e165f143a2c983d8346ac19e18df3320ee491abe8c1f8be183baf69f16551639adbd855709a1b47a61596582e856ab3dd80a4becacdc295f77774b633209ffe3e98a7d42faeeea41346988fd7ac92606828d2c218d3e0b144a8952f33de2238427655f73e10183a12023b24a2ab7321f605a21f9b7a58fc46f99a3abb48e3faed9c69286767a1f3ea710580582a15dfd03f9c3e1b6b345c47900c419106e92d89326bce705b92b5e5ba800bc1d081803ffd4885604d7cbb8d9573ab7ebf3db75c62e4502296f26a4906342da446beee89672f5d31c93600613155e04a1be582af525b1845bdc9f95f7ca84fca34d40ff6a6d82f57876c130b8b3c48bdc4eb74c92a588da17b204a6f4564d7fc40cccdd0e2cb619b2e25dcd3cdaf4b9f5f5677f4136317fd75fe45c188f02f0015ad0f5d42915dc3666a42011c3751b7972f727635051e23566bd29c6ed5bd9e597fbce7efb18997d94230dca35bc2ce117d4c98b7c50ad9c46fd94a1f9aeba0b54abeb411b34fe12db58bad87a306ac7848efa2c12c44e867134211c2c720ccd017fc0ccf2016670acb3cbcf3978519729942dc7dc13218e95ef53a7fe4c3ec53ed5e39517f45f2198d2b510dc0a7dda7772d8d110c3d30ef59da0c7f7a3ec6e5d5cc82c058464a010240b4fda5d5bfc1ea98ffa595cdfa240adad1ea10f8232fd62e2e443480376b32642cecce758965fa6b7862e54b3c2d7bdbcfe82f59cad8f86c8604995b81ff267d0302c4f1013db08e416f831dbfb5b4c6509f5ec98589436fd229123fef64e5747f660eaff0f113eaa2f5f7ad4b62bb849a3a25b01aeac01d5ada24944b437732e94134191d292b65e21cca62a8dc9afcf5df0c7652a2765f654059c25b43e59e89babf95528c01e84b0b83a39dcc5915abb79c83f55a6e1e3c823831e80d369fa6fa368d55c29c5c23ebaadaf3dafeb903e95c40cbb9ae4028ca494ab948721f89282168ef7405a7b3e3c76e72ad93cf449dd5139b6840ae6f3d1573989da2057b6d098ee84a42b3431c63c7e2ee1f3eb7fd8d652f0e2b51590523154bb4cd39c2f1746708eb5d661bbe054d0b44abf0a42e0e9f4d547810304afb999b34fba2a6dbed5b17005daa82f03668b5583ecc535be027bee22ed23a33266550c6342a7153f9d2dc304b66c2da7d80a7d2e0ba0baa89674a5f5581c1e92be3321181b86983223420242e8221a562fdaa5999a2154393c5b874f6040b94927a08bee935d891efe9ab830ee5e8796d478695726cb94f86abd2c81843605ae4919c74758704a5e85945f6f4795e7d27c6032f72013ff6e8805e04c3260a66a892b4dc2c9736e896ecb625e625cdda17e2e8cfa247ef5f43ac25cfff9550de66e4199d164db581800bc5b7efd17bb7c604ff1c082711b31e97efd2d57879eba7ef93603b91cb992f1c3c551465b13dba920ebfae89ec1902a984b44cb7ceb4f11beacda44cbe582989e1a65fcab7947df6de5f9c56c9ba764aab1e6d3a9762cfd0e58b5864d7e5f8b87d53d7e6d5e3979637a5d974f0be02e22eb83fe91c1cc6764d435fc35e692313d70384a253528edce1396dcda94c2ed9d329caada40b6075ea9cc24f9b0b3300b95f6fe7780bec2fa3c260483c8c8397631a166c78562435843f88f2d5f4afe9e90e9f9b8e3338f646e9baccf0a78884a5322c10e1279a1fe3d3b993564b1f3530b91ca7dbf5fb9b935584430fc5c608631a137f25a34b99ce015e1a64390c4c5608eff4a877bc854faec694df0dc38c6379d3a38cf4be0c0f717d6e48e6fd9623a21f693ce1031c459e86a7a9a809766ef8756260427be16cca21794a797a7b5f30b4ede15c59c83ccbce64b4be20304c3fffa6e7b40b7eaeb54f22b11b0b63d159b76add1044f1fbdda5b34a768e20c5f57c566b73f54d9dd91151c7f339b642c62fc779244eff4b7d147cb1f8ddb0a1c2f15a32a6c1b400df6eeed22a8bdc7a1f24ecfdc0ff5af45321a7326d9447a750689a8476f81da06e6fe21be78a3d410b9fc1b10ede6abe06d71c15fd3c4ca044e8fdab0b21ef462f1a13ea53bc415f32a62ddc337398713f3bc3a2cf5c2955497a6dee8cc492b8c9796a8796ab519b3d441bc85a464ad4a55784210c7c458b0525d294226a6ebfe594cf39d7dfd3bed47e70bba9e0e9b0e13248d9db25080d20f112e6f49aeb222b712b493edf31909e5e15fe48c8decd9ad4f51365dddaa243e6162c2bdc71ab421a64fff433d1d944ebf2d9608690f379467517d12f2311160dc6aeeeb86820d39764a321631d616d2def9319a366ea258fae2d48a04b23406d0ab366b7384a85ee117decf77bf0c22df5769aa6ca7947b78a9df2babaa06a0ecb85ba6049f1012955d57e78554debf2eac80c17236a87c7f0aef604d9503bf9ef6a133b03ddef5017f2ff6e12418f84b8d2967fd8838cc6c7a97d060efa5c3560ab99d1cfd5f5693f1d965f1a9456ec45dc6164538dffbcf9d6ae49c26874ca048f73a913a2be7eb49e6bd5d50eea317b2e9551fb4f87b16d7db2545e602cc1c560ca4c380cf09660bda757ab76f05b400f59cb3893cdae0be6b0af48ab2c218a64c540a7db34ba2ac2726e049613737ec9d55c721f79babb59d1e3ea111bf23ae58d0fc7d731f1faf4f3a04834f9801ca2328b11bc32de651d3d77ab59a13dbf294940ffc89043b89c5378df194a8a02e398e07d32a021f17b1bf3f24d67090079225cb975f8b84c02b97b310daf9a18d32ee41f496c8b47bb93e029b3155ee51c40ea5ca712599f6e4e33a6d8cfb646bc1d1e5dc93e245025cfc5b7545344565cca725026862d97283a27a74154e974e48c17a079bdf5f200f42a04f8c7c43b7fe97dfcbafb3c1d77a4df9a11e3388a94a4555122920516962d9778661ce57ccec492ca2b198f1aa5b4e4e91027ad70148d62d68c655ca52da0957b68f8b0029184392140892d74f894bdfa06c54f0eac6ec6997fdd03850e75ab75c4042bb31050fa69c2f31e15b969f237bb68264ca46f0700c3a201a081d562ce43e7607892515e0b7afe6be32f5e0c07f7b63b1343baaf751f5d5edccde841eead49573a61aeec6d2d531bc8a49892d181579549d374465f5db623233cd5d03dcad417dfc3902df8a69a36ab5e420cff22f43cd89ac852264354575c14c59724622ea850011fa714ac7ac573a68202f8a23539a6e1dc5d319ae0026f9edf1f093cff12766282e42a069bcf0ac480fd24c9c1939defd8eeea29012c43224cef5521f05d3830e26ca07da65c57006685eb5e4152a40ee58eb8ba60dec2e8338f71d9a8927db166c5e0d9437542a25920b52b5c7fa2842bc30313a420d337bd88c32cd0b92f2f377950e21920b3f18358eaf6bb21819ad11834fd76f85e591161b5e210d835f07c105a5fd16792360cb4f28805402898ff12b1407e704c9459a2aec20ff9773d5e10651a1252c7ba1cbc35a9e3e47fc6df3be3a4638f8331bad416957623dd5d0503d8d985e83bc2d9f91c20fd166e6b961a32f1ce5dec775e7e5423ec5f4f9a98701d65d231d4996ef20db7faddddd14f3707ee66e36fb06d28d2341ab4b53a40e09b86a0357b86012f71348342b43e301bc864d428f5220e5af790a82af78624daba0397fd19d0bb39b1603f4cdbfb614ddf1cbf3464176a9d2bfe3dc9fdc66de6e2a6609094c0c3973303d7033a500b55b2dbd010a6d5a978d648819aaf42428c7b35a3f6d69e42d161e5f26fba8456bcab6cafc3a1a4f27460341ea4f641cc55ed790738c5b25f70a2cd399941e16909309603553fce6d17328bb9efb80d32c8a13a355d4b4343fb5d855388b8ad6dc4ab2074cf669a44ecb214fd84dfec9d6efd40d56d4f9a15fafcd3ea440831897683d3ac38004f9c7849998f6a512735cd6a528e71b800fef6e680a3d617b5e6a620775098f436a0455fe01aa9f805216f513a086f70bb267683542845cf81abdcead40bf82a9775da5db3444abad08adc18beec725e13b4023b16219917dc01a049b1825f8aba46bfa9d8b55481ce979a29a7e27f6a52d022769035dbd610107ba5d760d5fce6397dad1716cf34497133eabc91a07cbea45f9c880d12f663fff4660f4b626864769bd03a0fc4bb873f2fc5c7a2dc7ca1554015c751465e1ef794f41feb0fb67d26a17907473afed12a14218ebc3c52410e4e4915a87ff6881fe1b7cfeae3ce76711712486739e46e5a6c65db88c6e7e7f50fa139bac6a6eba06518e9ede7989a7e8602c316c957a8f6befb74ae8421da320d83fd3022568da1a87d339f21fd307676b141fdf33fc527934a21d57ee964eed05827b29ceeb84b314f77a59be37f806d8789c4be820e1472baaca5bb28cb51de8980e73b56b2c688f77baa5d34d0c5f5ec65123309cbe6e3b3dbc843c45882c17cd0780777c33935db08546dd66b6d95489b8f58bc44c46e9d78e31ea753aa019bdf0c083735ccc065e54bd5b3989fd603f4e43783c0d79ce049a155b704f0244d744c477f4ea9b2fcdc389db19f833e8538b9d8478946f4e417a7eedeb27db4f959e0cb3858f59307b3c3cbbac74257362fb541eee53aff12a9a0f402a7783909546f9c4899dbe9f0339369b55a04a97fa0817c621ddb43d0c9326c0d290a39e42ea1c3995a813e1e24517e899ef0bac655c5918978504a873d0560e6815b3ef2af204711e20f19f94ea41320dc2f15741428864d40c29ca0cec2d775f792cf9b9e91309a7bae03e978352f615be83ff2a6526595bb58bf814411daa2d2d87547c49f871b6b8683566cacda346544c1a7d3ec3648333b3d94679970555c54b65eeaf0537bfbbe21a8f0b01c81406b24fa629eff50ee929e40ff03a176db2f1d48d62c9ca4737e6547cde9fe303584f0551d0fca94358668ecd3f675ed98902f6d51fc6a7d1bf0d89ccb00872a8cb8ab1fcae89efc4f3f2502ac1bf5a2dba076362208c6ee3a39010db19dc0558d2edfbf32d0847086e45ce9521a287eec86790913f7b7df1a8468034967af9a800f139f1d7082d8209e96098d9a1767126bc04fea71463801f796e759075ee2ac82d0265370a31c66945aca2543c8469677d47170207ae138ba121faa24d5135ab09dbc9b77ec25a0ef3094e1bf4504c0d13cd56da95bc307f6641504671b16d2c002c9be2d67d916d6a0cf8ab39687d8a280e5a9b7f1c4b5d3152f2e7837d45cdb87b5853b1b210f7233e3e8cac1b926112908ebf045cd8c78acd7f2fe34344029b5e9b54910e6d5ea7038c3aad081f247bea5fcfc5ec7d20eb17416a2171dc5d113cb19fe4f0eae67e036e3fbcac6836cc726a5844498d0bcad6d630bea7934fc2ac47803df82e31109461066b87222a7ccf2ac30002aceab272ca1e1b52fd5d1803d99ffc82bbb0f75ce1192a16c17205671d9a799631402a71898ce7e27f0799f9c459b13f0808aac38af298d9caa00ec0bf692172de9eab5990f784f49cd1b0f4a447fc7b878a934eab2d085ea236f1728c998836f978bda17d0872f7db4e056b05e52ec6ded95974ee2318f3ec9945e301c62e411640c9dfaa1a427abecf0fe355bbd8bf625755dca06f4b680e598498bb59742fa999687ab4b773dbbbe728f400267aa3b69720cc8e8c1ff98bfa260a15ce0a5147d501f9096a77b95728e8f3b1cf9542400b42eaf4e3e746e9fdb2cdbdbe516465a63ed1249dde921506e888d711a8e9934624ae701161cebcd6b349ff94d9c7876f679992ec08e489f37019ec97362824ba5e9d8c9effff5907900567dc140921b324c8e0bf972f0a91483d6ecabd7c78ea492ea6d722675322d196930e8097d8f3fed57a92f9d02b42b959da26bf5504588cd85b7469854f9b0063eda6bff1f1a44e45ed00b186709a4bf5bb25bc505b87822116d135d782e2a4f3f43f12a610669ba0a4734ea05f0a88978e5224ecf2e9d1af658837ecb18c27dd33223932b99d8f6c2d8531bc6b05f7c5c03699994f11e3c9c403c023401a1176170a941661db620f04910b49193f01f6fd4d7ac3e4724116bede6f19a2fefa553c62a3cf8d82ec0fb6312bb4ddf83fa1a1f1591b379d720cc262a54e7ebd3b010f94e8dcb13655f4bee023be4dd4296c3aeca50ddce5ef125b4b032027d75bf00d4be3bc615868448b287393dd5537ad4479fefa290e20cdf601f93d32dfe5a8b1e224ed028b7b85a774abf400fde2eb3b33c78ec058afa63f01f7f42439609199e21cfd3922082e904f3d4d5d20c3bcaba48f2a2777f42182c5aff37066455121d64c5b69ceb6a5d222981e46804287f236c66ac2ce86c65de751a9abf91c5de639338618e3df81e9994cd5517ef7d3cb84fdbf26dee00b4cc1bd953b744e2e5385530bbb041b59431ddc01028f5c3683f9a595b81b9876cbff2424a33a632906452b6ae491c2827b1ac62fee33d816a81f4e9d1b27089f47fa260687edf3f45ae33d122a3f9da40e3a8bc058ff03fac4606913c463c8cb6d4d43893df16916de0a08afd04fe51458d7ad50e7535869555775b8286441a198630d4b49d74ae71c040e828b55317a078cab502de35dc8d78f04f8cbab1ba855c5d3bb4012020b717bcf38bfe21b4b76c3f65c71018ccfc751974422aaaf5622004757953426fa9acbbb30e2690aef43181ec475405db4a1599d28c1d58511998cc8beddb0421ae49e6319a77c78fbe8e395268f12493e020197153dde258108d5e84f7e08cc02db4e5741537efde7c4c0fa014319e7b245e405a7db07192b0c661687eac02d490b65f8469af2f249833aadd325a9b1b7f97b794f4df2d86610d7e3f6c858fe33e17fd6a7c27b0e8790bb311aab542fc5a9225279eb13dbc8c285d12a8b45b779f9f662d38e799b2879cd144648abca51b18331c6570cabc97e0a5e81a808d171b1642d58336130b2aaead7f4721319e2cf1897a3062fb0fecfdfecaaa334d4c1a433b6b475e4679ca08eec93dc1c870f3e5ce49e6d1f93cf14712bf4014c59c04eff7f56ba55986cf733d2b2eb3a9a2dabcaa917103ebcb108686cfc46a1a9241e21e7ed75475baa1b742ac0040fdbc473dc75bb841fa44b08105021e7e77b339e4590b73b2c19ca89ca4549caeec47a431caaea3d24e30380135613698028955bd50a6270966b44dea0c2bea459dca58605e931a000e1712cebef3f4ffe39bfb34aa56db9f8b8af668213ad24f39cdcb9229110511637fa5b049c141fd437194130f2477be59a70ddf8c883d12e7d8658fd3304c4e74f2596f7ed103d84a9489202916e3acf892f817f41d11d7d0748e1e05f8d8ff6af796d2042d24d91f8b40249d3707b18fd321d8020238e61b28ae0967728f6c6c17c4a284dd8a48ebde23e6168ccb1746f3eeea5e3e9887f17d2d16a0a55adca3d84ba7a5e71f6dd51699303a1f18244679c914afd91b027afa730e599a229936c594a91055c98f06ba09c8b1f7d422b7ed191f9ddca89edd27e8b83957cde94e6305706c2f72f8a552dd77241ce957c1d845d4d24e26a5438cf5dee9e64415133c07c3627b01eedb667c053b973d0c8ac0b7f8f3377f5dd3b20046104f7064acd7036c9a435ebad07f4e3a9d6fba883d30d656aba09a0fb62073b95798382042bc5f31bb8e71a4ab24bbdef3ac471500ad0ab59f905f02135eb4ff66cb838ffc7485db6e6522f395de2bb8e457cbf9fbc1bbdc7a0fb68013f52de0e4ef3bfb0386db325acf59f1b53406911976307d58f35194e22587cfde6c4424790d47aa7e7acbfd28d4fee434aeb43139145de93ccb34a57fdbba389b4b6392ce2c8fe596d9bb067f7cf91539d49d60ed363a85d1d2cdd7fb383703731bf1f48b54fbf37329151308d032cced2f2ae6dde6af983f8f82f2fb44e6788d625610588d731e3cf540ed6ad791517746c18ab02ba46cae8bbcbd2a08b0df12abf9aedbe0dfac1ac2a45c4e99ffeb00a1cc150f0e0147454ce4012d8b7b7f297b4498bf5427e6341aa9275c1f62e3b0c9b150a195ae722c5c6086afd631a1fb5c9e95aaf23314b384b7183b70a481ae45da000fca93358c439a1456efb88dafd56f6c45c1eb7ebe8936f59494ab0d239dadf000b599d78d87f873cae0fa8b6e6f20e637c9386b7eaf8e870e9461cf365a94e71d5da6a256b2e46ab4b1dde360b017cb281200251a8127965277ac0f1003f6ac0ecaa3dc104cc5c3bc684bdcac22bde3c2a52df2bb846aea07457614d8203a087a0479cee2db0344890f2bbf7b4d7af5aa89a51b8942bd4ad607a627b73acac309140ec0f5e906b6c4ad64d4f4b8b7cb8bc652e7ab42897f67c42490d5d80da564014cfa70fd35e0144be06340ebda2b0b651aa04a0c37526184d89759826b7633d31ac37ca0fa8c22f086b4866e4dded26de78c8d292d886d4faa846cc04cfd1d925f654158bc8096a43e0fefca76ac89e6a0f59d20d5ec322e829e351b1803cb470526e6b0e485176ff0bba386bf5cd8d82d21a17996455928482edd1a3750e5faf34f942dd8634d5a8401c92a8fb8664c7659c2bdd75a8946e47c8b4612ac12b11127725901e2e16ce329893e4d86dc4962e4287302f46b8f3ed068250fdffa7647f8a9bbc7ca7baef37b0c4b638fe1d8db0cfa237edba60b3e729c4197b046507d0860db93e2c2269d3e7ad9389b1e00c9176155b3d7e3c2cda94e2213e89e489ba1c042cbf35fdecabcfb6e34723bc9124e849209b0cabdd1bfa64ee94fa9648909f177d9c5f9de603bb594bfdbdf3b9ff98c61e82d020333facd4f83ad10ae2f881a022320392c4904d3d2419fb25f5860a04bb818349cdca3ebad47ca7a2e7668636c13ccc7d26b5f7bb022865e3c25cae9d7e1370791b30127ee9f6e90eb44eff53c0f904ad8b093d6b7ca5888daef818e8dcb5324e99f5eaa9cf260faed8367f8fa81366b44feea0b6ea2ddda429ccbb8f5de3332ac8a009c3ea7695f3c1916932fd084d1203faa425e10ddfc7b16f18f9883a1dae25b30245d285168e1f045ef62644324745a1ca50d7d1f968d433a3afd2063c494fa366a80dce0bce3ee3b341ba53a0e4637885905526c4f810df0e2ac1f4297ca4e5a972f2bdd044afd4289e2fb3335a0be3689cef58ccf5e5b59ae2ee606fc8a41e4d3f37d12e71e04a01640cef44189d76d5beed047bf2c14bfc70adf779adeba1b45523a450e68ea9e04bc8647db0a6a77f7ef4965c7f4226854c8705c1acda24916d6ca3f203099847bdf8bf2ab295f9a8659caad8ebd6c9d7ef1037f235fdfb46d0796c8c67cf89aa22f45bd58f09e1f30b2bae8bd8fdaa56d0cffa65e9d5aa4736c04a8a856ef27a2361d728b670f4e1c8481defb7254ca48a1cc9a728efb63508d7da66dc56675a37c79d7eb959b6e73568757f16fc2523838d223083bab382bf26a8bbdd245cacc88c2b6218228c95cb1331b478d0c86645a7808c8aa506a2c24311f4283746f45e261d5d4369fa5001ceff1a4d51baef58e281359e5d3427daa3c2aa1e2dcac3712bcfcadbae94b871f23a3b04dd512125d4a0a64f41d08430cf17485f763c8caa03df55315ec03184235f714ff23f9e44e44b690dd1504a9d3bac494c9f20d25154b87704f9214db0e8eb678f3eead92e97fdf86aaa27dd486fee4766072c171f94d79a971c2c8f90a96a883301c7445b6634dee63aebdefad249ad4c4c92dd5d2ad94a88164659abfb594debe9697253e59c76f0e200a20d096af56fee1997a2ad2a0158a5f34e5b3544331a5455d5908c717b1b5e0ad8f78bbeba314a04d8788246597919d7d0370d97e23ed10100a9c16035d5fd5ee662cfb156411f09025750baad7a005881c7eae0b5c9fdef65f83af541b15e914ca75bef740fab8ac7c78ef397dbe7f9c576339b285c399598144f8d192de0369e5da6c57e0d9e0e7b31938d830f4f302dca9e43d465f287f97675b446bc20b33dfe36dfeebb54f8af3e04e5098494903d4d71672467d73b1ca753f734dc9eabbe0182ab40a97efdc63569a685ec569e56776361b2e24623642f50c28e1fc86490f020940e586a7272c0282ea2a703cf0bc0daefea55ddd58266f2929cf62c8249428736c238a5fb1756c6f9ca353a86efc24e5e4542fcc5d9e6b003ebe0398969812d1fe6dabffc4671dca48727596a54e444394e2a2178ed472f83156e8dfe5434989bf6af270a62a9cf9b43fdeefdedbf330d8f8bea633ed0b79c94018835abc540577c366989fe57166a9b1979961cabc14763e8c619414bfebcd249b6e3d2cbbabee1f1060f9c02577ee70a77e76442457375b1331f86f15b706a97a86d6ba07e5eb27f6b0fae43f964d2516856571b561e3f85bfca92695433c78bcb56c8fbf1a38832271ec79472a8c78ed957578f69b42bc6daced62c7f8363969e249d26bb19bda9c8915a6c69b74103398f0826f6b1b5050270d4b343ebe938af5b3ac9414ddd46ae2be944350cd96f0751cb6a93a385b0c575008637e9a2e26d5f345c1aac61a96632e6b46b35fb12c14423d2b715f86aa2200c2dc1e93b3456c51c47adb1d5428f3af52572bf10af05da93e7d765979317263a0288871caefa11451470fac2a267c8771ff204d4843389be228b3eedba92ec3cbce22fc1a2d5c8616b1ae39429ae5fff1c5fa39142e8d5e51b38ee5551b3e666a5656fc4c0685ed383f208d478b165ffa32227e16b8443bb2a671088e8e8a95a6498b3807830592e27ace70df02f6efb3cdfee4f5e9457a2d8ac31d2f0af997a72e2879f4abc2bd3ae81ea9b2066ff7451ef7325ac97863ece6eceddf9775b6948d9787bb86a5b668137902699f68bed8ad7632ec61c53e14425440473ee63895ef3f2a031c96c495834841acd5ca8d9203e1aa54b81552d02663de0e063266d4da882a74767e30e9bef12f22b17bac9ea7a16339d64ee8461b818eddf8428876d9da4eb79b43438b4ede94743a646322211f2544c45a489ea816195c1afee6a6719d5f7493cf42a4bb75384a796dfa47fac2b71d891fba01568a4832764ec78a2c3926526708785b8b20e24a747fb834b9f1e36b2d878697ac45e108141b754a911768fa1ed82cd948465c1f3580e612e6166fd6b979f38732afac85fa4b360f289df014c026a545794e6c6fc45acc080998240834dc4afa7030735232c853017a34854756d92cc8a7a2dbe327f3b23fabdfcaa6a69ad417ef31fc16c47814470e44ee3be6db098a59a970226835e0de5353295b189ad6073618107ab645c00a6c36f4997b1384b217cbf5d58f069d0e8a5c08cc90c49bf1cd4f77261216a1711d705f091a69e5696a7030a3a25033f7d76231a419006afe3d3cf9c1e0d2fda5a85cf732cdc573d6d800eb35abfae8c0c2cd6a89b8368a550d495ef326631dcd956183bd9b0f7722ebe3ec32b1ec0592d3057c24774e4420c5dd6d66eeb049126de6cd518d2f39742b82fc43bd0ed19493722f1c5d30e084ee5fefbf3fa1c89cb7559b97a90e01f51f43e210d64896ef897c4a1972c5a6ab0f39ada9221ee492fb15b637f99217cc4f8f684004829aca3e8c97c5bff3ddbdb0d26cca9d0fe31cc28ee6d885a4c22343cf547b4fa4274e3808dcc54ba3cfe15992f7cabb5c0e649228f222532d4c1f84696f6bc09683a2015ae2c41fbec24093e1155281eead8ff64ba4bf6e13fbea99c781b65e40f6f021e87168412aff02e5278d0af9ab08c8735fc254db4018ac0a4f5204328aca5d1e1c5159bbd1ce4ed8cc28992a7c663593cc158ca39aea8c606ba9fe425d4513825d49409599764cf338aea81c4911feddfa650ccf0bbbb322824f4b989fb13ad41222c5d56c4126bed4e7ded8fb4f4cd9527a7f677ad149d8fb0d943c3a54f99da5a48f85317501c1069ae465786947103a1b8b71ce76750a40a98134147779647d9747acd05b0885379161cbaaa716091b12d8f7f1ef5f41b8ebb98a1761e2b102c39453303b6091d092fe137850e24c5e250f00ca873004cb9de5462a5c5b0d9cf01f813b5d346d37666344c9aed262691dd895418510dce185ac6e34ae0cfeb3e5903ed808aaa2d6d5376687070fd2a6c1dabd3e302650626db70c1fa01e0eaf6b8e92ef86eab714a6228299a4c0247bdbbe80a9d29be8b61bae27d27ab9c5f84ac186691d1d3458a3ce9ee7cd0ee152312be66ab1962c465737c8358404aaf64ad2212c166ba20c92e0c559c92190928dcaf86a1540a578ebfdf6300628451232696c21b9fb87973c03fcd7e220b9a3b543bd8f48c1dab59da6b9ab474d1eb2cc2d6d304df66e6169dd4d495e33e5ed713d3dc29140536637db198e9099be40dec72e421c83dcd2e016bf9786849ad88b6181ec37e599f17f431fc12937ac2231deb73d6ccb5b526b575aa9a23863ccc95690f383da33c03e87d22c5a4d70c28d1b0e0b86f67249d0482767fa7ac531f5c473c1bd44a9393b4e3bb86b049386ba263d92b22baa1fd8902dbad5704a6fd555303c2d4e84c64041604ba3839cd87fa64cbc3792893c4bd775887d4279ee32afd14e1a1d4bce13084bce4bf3131fa544416f5f549908f1c705bb3819da16d37a5ddecedc86b97d4a042aab7b80c2f5a72695709962ec9206e7394f1df650825fddd38fb1beee46af91450b446c2b34770215b3886b4ef53c23ec0a75540205055817a6c479d736e1fc09b3755fc12d5eded7704a3c97e312bfbab04a7d962516d6915b3e42db15854d5dea37dfeca702c1c3ef065d30242fc58d8bc3f772aa376029f5479e62aa468a28fab27614690bb3c177e5577f803d3c4ce1094c005c12fcc7be0617d4bec9bd54290daba13c22bdb9510fb0eebfe12ddffb4303a6034fb553fca4349a19b9edc8c07106fbe8efe593c6abf3e4a8c59f2d219aa5ce669690b5f8497d1a83bc236c0605108b351935371ce2a5c904919a209a36b9df4e8d97d6fa1b7bbdc47a662845f250b7eb49b58d9bdb50049bed279fb03ec74183dfd19c4945b5eba39dbee4c35f4fe8d1266c7e8dbf7bff357f4c93a9da585bcd3246f02fedb40deaca3388ca759387b05962f038b5af219af213e2ce34f397f42fffbbf23cfe895fabcefca05ba6fa50899fcce6e673d291ec84756771205cbf7d03e3db591dc9cbe896288d3a10ab795f2cfbdd794f7ae415a634bcbc6713f7c45a52326c9933f52994f5db3a5700f38210646597cb8159178107143b512264ae0dee3f9ff831a715ce49d0820563859c53eec8687050b9971dd7b91665f2cee123a14918c42aa7544e0eb63ba13bf952fe834c13c54dcb40838af1762bebfd05a4519aff8486be8f1c2ad38cb4f0154e170a3bc153e159b7ba0a05832c75b9c399e8787dc1acb46e3e87709ec5eaa238a96adb99a07429a7ca3d3d64eff9c9c3094d2cba02065198be0bd4995c9067b7b98d75c4366f05b6bc0de042fdddf6acfc68feddcffb5db6a3a049a4024c2e74515a50699d38b38c97613844dc8b08267a21350eb0f39f6ff62d15e73d85bd1778b9b6b15b39fbd263208b931669c7db8c601b772e56e06cbe99818b98a4dd473792edc4fad9a7302834225633e1fa70390df63dd08de85403ced5b8980f56ac95cd3ec9027f7d4def8445b6b95a6b908a100f8b1ffe7fd0ceb35995c72ff0ef9a53f1e8f99547d2bff83bdb323ce0e18551ae87a2126d882630554bac6c73b84e0a4e4b6982cb66a1784eec25ee220b34b91b59e1317923132d1001cf2fa6aebadb9d17d9aed2b29cecc4111bdaf9b79f2e9d2a64c46d4a9d92d3e0b9de527ae5ae2577d281235eb83ce6749b672c8dcd997d22b4310fa4cd47e610f1e33fc4d76c2f91db638811fd51fc3a2dfd8534c6e3046858e228daaa3591b8ffa4353399fb038d7cbcc77374114e8e5904ca5592f27725d83d7f933c421c016c8bfc6f3245e9943df4a92d24652396a8e4c4973ab02180bdacde788c57ce12bffe5b21aa3129cea773f6e71635c57aa1063ba3c50449a28d960b30a15df01480671cf10aa60a6241a17648506a7a63cdd0f7203bd536b2d363cf64843aca2e382d0586598ed57893e7f0f9dcea8b79b2abbfb7a40d31d9147af2bc3bd8a4896eb8df899fd0d33a26ab2ea2c29f40e3da005c100993823fda453cdfd01dc64caa7071a1e45449ce8156f6ea0870e0cacd3597d2714f710bac2b75764af377a074bd85773102825c2d511179b844b55511b436a5e529466613946428b24101ad5507e1b28dc2c50db00347f8d90505ad30e301336c09487796e8d29e0fefaa9ad4b64efb017c590894d35f0f749a19f9b22cc2210ed7c067bd90878069e4bb907a3294fa94188776602b236590eb39621df63f1ad37bf65d10f24b75c90a7bb6cde37b564e7e977f9d7259a335e0ac10fba841c4c4dd32821877e625364834355732cbb83796d14ad20fca706b61bc2ad3ac90c7e8e6bcfd5c871f39b8862c34a0854bc758497c00876c3e753b56afd82e69f4cc487cdbf7648bbf5957acaddc2e45c42cb87de2c845f07d5aaca7ce449347357bea88d998b9e98f2c1ca3fd548bdbff8e5f1b49cb92034ec6c73c61938aae1a7bd8f3fc07e20b545b0e5164c53fadc196560cfa31f90d7a6193fdb0f09b066d751aa38d6d6757d98d359f2c57d025d5eca4363d21ff76cad418d302814fb7f410b682d3f1d137e56b9a759b31c8aa023751835ac32ea703c75ea4a16e2d2978f5b67718bca7123f9d44bcfb7cafa30f1f66da98400d06f0e16e5ad3e0bec5c0cb2169a2f57150b0ca3b5a925f0b7ac54eea2240c024fc58cb4fdbe1ff88f1963b0042bbc5b858009a8839a9036696ec69e5459a6afcf2022d091113f21516c0ed5ae9a9540294f7b7323f8790475f4c1b602aee671c4eb7ada5e2b0e2ed9d07883746b4c9da6b5cc64156762d373dac0961b984df0c793ff62a3802f696ec33b5a041264dc545f972be65bc02bd98d5def3daa3f955dc62aea0fa4f579a6d0c1b9bc245074d8a9460b054a23861d890401b7595dd7edee87e0f10e02c8187596333b15b20f9a3f63b1f0b70f7ab65a3d8e372a0b40fe6980d8061fd9ed1a1e4346df6aebf51f6e7a914716e6624a8d64d52b90da6915e3b04fad7edd5142573375379860ddeec2f529570e4ae5307f347703324da8bad990a8659faf8d17acf13ec232d3227ee95e0adef19f6c0ebc07046c62c79853b7ac82bd06a2f9108c07140daea55b562e2f861d75667f4bd076ddb5b6faa0770a6e5f12286a4db370ef95887049e0eb1de44bb0ee32976e38ee938db33969ab4e40ae038967c376f80523b13c436bc44516cc27d0863cec71e8a632cc164c56ffedf01fae2e22d18df25f1647245478203187e0c0d3e85cf7ef86638613d1109ba0b5b50b1fc469af319836456f235d2bceff8a439e1226578dc49e55a4905eae137f6234df2095d84d7f8f9b766109e4399372bd5742df0d2de121df6af297a3b0adb59fcedffca5a06580ddfc95f4d61bf438b29212fd855a5cbc77b9805228f2d11dc0715ae473c4fac871442ab47de0925aa7d0eaf84c9da7bcb322b2248a747a092b691a03df45afb4f9ff97bf3821ee4721963355ef6242b116391075649019165508a5d1548ce4d4dc81757bb14a788c9444949cda32ce28056f13cb23e03eb3c1f276b350154aa69d6c4c7065e4b1a9948e874399a9aa80252744ac64df4b6fe69915407e7931b8b1327543d26b3a1c96b673d0aa115857ea142b8f8407dfb9577efa0f1c134a79bc56985c635862541f6ee2da9814582dd89820eb2de45c1e8916ad55d59de578135b1e30a536dafe931a7ca7c02d3a605535dd55beef510dffe2a7db2753a3225ab28f571471045a963b89feceb67fadf46fa945a3934f06208561f58deef406f6ef64364db16f269d549316206a88453ac82d31987ab6a59f51644b75ca68948c8425549d528bb11d0830a44193f4e4acb1c1aff9f0185ac0e947337b6071696ff34b489feedaa899a8db1fbedd360aaedf1f2744bdf4a449bf53440b6b9ee435cf6e78d1e0ec6b97b90aef04a0dc05d5828e2e051edbf07e4640f3a2265193527ad76bcfd321789bdb48a8af795784954ea73ac7ad2eede30078d8dc3b2a056a884ea7d6202a6e2a720cc30be1290582b5f2b3e8e37dfb1c90635a161498a8c27a1c93a17257aaa80fdfc4c652d0e7123ae95ff55c39969f58a90dec4d1dfc1eb2c9e5ae2449bcb9172a245b58dfc7b86003657971f24ecfdbb24adb3f3a7dc3d4eee458c07122b22a8478376da61609a7c98af1bf2882429c07c74f757ebc5652e4362dd15e6b47ac7726e70be4607a84b426daae5cdf8c0c21d9c58a4b364abf6241b9c171f4ce3f6ac6e6adfb258f794bcfb0ca0fc4f0ce8918e9e8305a156cb1ad793b4c6dda35d7ceb2ee5ad3bd1808fbf09ca1d13535b5fb1919beb64b0d7acff8895e24e03256a4d827940987c374223680b362bde420f6cf9956c95ff4262f944627b874b76fefc2f43715741e05d8df30d517ff5c629299d18901c +MD = 9a749a54a2d213341f021e11930b2e709ae027906ae6c73b6c06ff4d9be6b566 + +Len = 97648 +Msg = eacafc64e42b2c183626ae817058b4d67d539ec8d6fccc09f531b00f0daf2716f833096471e0fed083e19485414f8f04b855816822929aee5dbec0b49b91e2c15ae08a46970ab2233e92d9ade60d56afbb3febafbb819d722665c3c22f9d5e6ef819a893bd70f01a5081a482c55ab0df6e5906230a907e9d396ee1bf339c4024ba268bd24ddb5fbc9ff61e8b47fe459db9eafa4e7589e5777e2141350e5733ec884e5a8bae13a71114396f50d4c0bef0843cefb865327909ddc60cab2893ddcd4adb3e4648e071219791be59d569c3e1b7950ce74355e35a3fa469aae91be6cfe8135e8c830a65f51148332fb0c1fb773a3e796575b8cb728a0481b9b9b6f7fa4a3fe3e4c7582a9468a4f859cf900fbaf57f5fba6524d75aa82e7c60002bb85759a6f4d77c93690686ee325f989ea6b2d19fe66c7960b2197f6a81272643d0edfb92baec0a83c954516d0cca75b36968b4e835051b3602b7f900b89793c6e8c419495cabd9f0f385b36bac20cd9600e388a0750db26c703dfd374a37af7ca7e59c14039c51a28ea1932e3aec0810122b3310cd0aa6cba3b272595f8fe32cb6576a3bd748db6043b1d8ffdfb38de947499f8066865e1b441e42ac1e2895a0bc226d06ff36ddf4babb6c26c2ffc6e94944b23767084424fa8a5479b0892f9e624f8bbda4eec1249aca36eb0d571ad7bd24567ff919bfad6efd90073d3a17ef50e5aea7edf9edb98be31e96e544f17d4ef2729e44403780477fdea0ecc4b75b2decbd0d03decb7b37100c6e744db4a1a2b5eddd6f0514632e18268ae5ae75a9a16da0370d25c1314358e8bce2fac90c6175b184a3f0bf1fcbd1500e5180bba3566e3f6d345739a55ac49ac857d39986343aa5db078a9e7cc5b1447458c3f00ff1fa82f7a0fb9a9d225a0bdafa618cd7c30db12ac45a1a41c5c0eb0421fe7bb61d16511c78994ce24324213af32b0bc6b5f5bdb801e89c3872072b06d5b9c66080cc9426e5b9b73c662ac5306bb97c1cb2fbb1cee7bd8a27758dedc19b7d38d4c223335b0ee443723373e0038a9448a1642675b49e604dd7755b1a7e9cd039dc8c2416041ca1584e510758fc7743d81d707ef2b24d594e101b779885ff3d313e86d5256836795e9669ee17635b4e9358810b0e101c31f4990feb511eed4988c3574049d185f3bd13223003805d3ee0193dd6b215346fa63cf8bf2b918e7ea733a76d68853097dd8d25d6069aa69a292a4ce6c70abd9bcebf7ef910250963f45620626bcd60ed26cc19e807fa5dead55157433337de3ed3eb4aa3e7238780d8f468293bf13d7e0197a76cede9abb74c5706f6e0e4c0df1d8804c498d32f5ebcd427cabe39eed1d4b7776ca2adb887f5040006b4598b06145e54650a7d2a8406bf064bdeed9c6e08f530ef0d8eabe53a1fee7b99dd663b2034e08d27699f7a207dacb682546ede06177afe16d6ac568272775e76ba7907a9d45344d6dfb7c970d6c31292b78da835e5ffa0a5cbe56436c344b63236edf117045392ff269af86092f068f55e2054fc2964dda2b77b96bcdbfc8bb79aea82d28d88808a876f8f5678ddbf9591506bc5a954bdf5e099747d8248e5ec2e974042379c15604a5e17bc51321f59984574f72e7549878f6587e17fd0cdb9391db5cfc9345a67b79117f9e5969129ba26f7f9806f883e0b0756519c3b4a0605a469e20dfb5588152d1775fcb21bed411b7c3567eb83039ea86a339f3265bbd853e3e1c99610acae5d9f985e2ec88d734e8c12ab9140bf8e7049f0515c25c1fb52ab36c6b093b9c84738cad2b19df299e4aef81308c95824867df17a6292feb6ca4947ccefe499ac13697322e3a402fa086b4f69f926b8a8138e9de2ebb45b50e3457ea3fb0d32a2eabbfb146ee4a6e0e04a80730b5dc5623e025b50a094c013c42842127d166ef1f4b5ca71f765c79194d3f1fae77869993063958e28391645967afae21d0533e358df480029304b564d8e0bc5347e8a971038b2622dab432f80c110db82e46bbe3fc1de8ba94c1c773304369e9b7812a2070a1a9554f33119ab87ebc555bafdcbd0e4f2d822c1203c6dbcdb4bc46de8033d6034ef4718c64a3e53f3683d90d15234cfeeb13a9841ed243e60955665f402d9c26a37ae22ec0c62ae908ce36dcf9b920a38dc99d865d17f132f44fa691ee604b82337301a8aa53f1f2af8ee59dfed131e3a21e8897631a7c2ae20577f4ef9e5cbc8b57607885efc2e2975075de992df925a4acfb35b55c3d347f016b26c81a582bf7a28f1cd7fc263f5cbd67fd5d01dee021df55ffc85fccf617ede0760c76b66714eede04350b847f6c202c98bf0f5bb9964039541097a3d63905888121360fe46f86dddd119076195213443f339907f87e5a05b122864a5b7ef2b3c6badabd2a74251ef5f21d63938b213f4f6f516c5336975bb572ce28fc463002b51dc766afaf2411fd6b14e58493b48e47a6aaf1207b72abcf85b1e84f2b47f5eade9e64fa8d1e4741c1197452e857a1b68e281f06a996666ddfe3d0ba9a94fdc681c25081aa7e3f61a89d888515852a2a9a3b7e6c4d5d1c2ef5c6aad510b19ad68bd5b1db73ce5adb86139aa187c788023f5777d7e3414d714bfcbf152a284da9714af16e65793a2dfe0e332edb893bdc022e93bfe7ed7ae356d885f1536396adc694a7c11c295dc754ffea837d54b62677137abad7bc14d3bafca7f008fdf651e0354d79f43926363f6b1955d9c4a7500298652f3f27bbe0ccdb9da7c741fd4472bf4adf8a33340921d2580c9d23501729301ba39adad09920f7cf7f2afa1be3e29528884a91f7ae90c82f1e242b70ba7f7cd6ae572fe34b3bd3c5ec8060c2beb4597efaa1ffe194f0aef7010b3769d869d15ea610a1649591e20986842092336c7eb6bd5cb7a26ae619486bbec1abef7ccffc3133d9e4f6b7b512c382b3faf07f675836a7739a7ed579aba4bb64c77e2cdb37c65d23e4fd11cf6a2a28857d6461b5ebfd2e9e3a7f435299528d9b4cf2fe95a9dbe939d50734938830c23f8a1db7ecda775ea212bab43689ebb1df9cec7651cae8546645a394a3f56e0c2cb16ae67ebc4bb419b3dfac8805d6a4ac37c908c203824b43a750b6632a3852e7740a81ee09d0db8f8e4c90e995a9e27bce273a58fc302a5c8aad1e739f3632fa524afead3bad115e029005bd91ec07d8a0758f790d587e1b60073137ecce28cfdccac15eca47121fd1287f86b303614d5f328cb4cf81b2fab80d93326b96a0f263f88e555e253a4f4aa462d75186ab446afc969ebb326584f31eb8e5c3f637ec98529a333fce16670f62541205fc22584422519948e10254b1b926e46e835a28da77996b17b812e17000d7e938ca82e38b423236f12415b4746b4190c3b48431bac5f08f4e69dc591cfe42af72783990a0eaacea5c622c5eabb3ad8d7c005291a9cc23f27c59cf4876b948e73b8bb2ca157a4645e33192add810df3cf00d21b337f8c8470a1e681a1dd03f230c8b8b0a697f82bc1df8f51c8a013b21b8218e20e5ea41ff700e334862c1b9d55dee1ecc0d68e6cf754ed035121365de4ce40465240f258e56dfbd7df60c2d90b83a0aa981d4e6e271a9908230b5d3b516db00fa82e5e77626d96305382e2ec7a3e5cb0d673207b7ab7fd28e46670958be6d205b72fd0c3958a1c098b98621fc9977ec721e1ecd918b57f2b3d3a56b3b9c10df0284b3085a74bf5282ead2aba21166cb7216e9ad1289c89d8d590f9dd0487c897a28a6606c0388955e5c62205a9448f487f2212abd3f282f8556f405b94bf6dc3cef55a8b06da405a58ed32488aa84f42e3053caf4041d25364e0137490f1633c5393f55fa4b883fe2e2942caebcb156cf42000259810e0b1abea5a7220a612cadb6d1dc9c05bb80810833ad4f533478f5b7a475402e816dad195fd9b6e64e2350b89bb1083494941a50102aecf6a4f73c01bf785a750db957fe9e5389fb63b448df1b87d140c9c7196ae82a0a3f893e0c90cfa00aed097ac5deff890de2185c109adfa589b2c1b608a8fa3f296637d9e2154360d40f0b3e512ae1fed512f287226c36be9422f2cd52aae4bebd23573746efb95f485399509472e439520678c1f8d3df2772f9f39991e1263d47ff5df2c590afefca432a6e0a3784ad174511992e622764c8a03a9750dc3d4f5c42c288c8988586ec6644e31cf931ee975763892d87be1ae7ce4e42e9fca8496ca61b65da77d8d921255f6c67287a5254a5d4fe60b4f1ae62dc9528f7d2e5dffb91cf1665af284b0b18f0465355dc9cd1c8fc85728a6093bc43a5b5f4ff74678b8e641714bed2510ca9ae2d7c01c7028129209add78996f769bf6765bc2d2648ef450e44217958fa86fcf6e3bacc847f55f07cb0bffea96046e1de6a6dd9e7b887c3c0a9859b05b50d3faa53cc76ec1a0c30872789102ac0802728360a037010a8e8bf651f5d148a86ea65ee9d21904160db94dcdcc4015d421aad913ab1a998793b734396c66dc119868e7bd6d5583c79780a9561241680b240d543a5ed7a972344450a93def9a2f09a8fc31e9a2c527e8f511bc0375170f8240913f4becb57cd8b9b81bdae9e7430aecf8e1e79f4cd97a9d136a0059b773d4bafcbcf2d841ea099de72bd3d4581044bb6a37d7998f3ee4df1ada997dadba93f3131dd408d35c4f577a33a94d70f92f8accce4a3000da8031c4a84f4f8e56387f50ec701cee46027ccdcddb93a67023d19cffbfd1562f053b7d3d924dbdd94ab6529347830729db847e74eb658d17da265756992bd3cecc62b114f306d0b6333e74ccdac9929a22f4f8b349317942bb0f886d767e1e1c4e3e0cc8f1f94b6f9a8e53d3aa5f24f98144b8f375661fa33ee3bcaec866a9aa1323ecc41f93a287d92c6c5226b242da6f0a5bc00091d49bde4940951f63eafab3caed80cc746a71877f2ac2e07160bf549c4da37b333caf31b6c0aadbf4768098896ba9890a07cf2e1d1ba0580af31acaa10b1845d8ac5fb1a2c96a9ea6b0de49f5f388e5c30ef3257cbb74fded9e6f498f1088d0e0c82fd693a75ed7d94e56307721b9633de470162486ab6297b73f59dcfa8fdcea0482291006f2083a939af4a352a571e92ce8689b09ce06a7c20d640125a7aa52e619119e44bea019251efef122f7a2434caea546b1575a9c635c00a22e4ac9c9f13738950d3f50137754c7f70f0a64eac84544be19d1eec40fada81680e3dbad9a7f06aabcde68a80edee81b73784a3e244edf77afc833dd2b74d2f4aa2d208c5652f435d0268a55500fc7d4ecabc2bbe52dcdf9ff94ba364b3409c3166168c4b94599cce3a21599ef89efc9f71f5ee29f54a8bb65e1e27de37dc4e8624ae50547d95fd663db9ae431bfe8511f6d7f509765f8429f1a6cf288b48cfafa2455cc6690cef8dd2d9ac2cb241a00c200c47481d42515e7b88a52bf7ada716a981b68b9ee6f9abc3295c410492d5f8b639eccc321c7abfc36fb1cdc3335c21000a6889654aa428d650c56b5b17ad3e8109ed7ffd1488b29301faf73601783a71897aaa0560776cd4f7ef90fdf8af4449215147c65302a1b1e68892994083c8c2a6f2d4c851fadf84c5e399335e6473d52c200ed40170f3e6c7638434170333bc08daf1f445b5e9b063a86f45715233efd062bb70455a10fa4c94b74faf82e2275839e8d26331f31e7846f87b5803ed5db52036e2474960b51c22113230873fcb3d18a1aad4f56397adc61e1d3cff07e88462677230c54bdfe0157c25c19bb16f607e04c4c089a3e3aa2fc87244cceb58e52e36682854393f3f75df6f8a45a0dd6873f9674e7619ca1689dec399f4ff757f8e8b0b5680929ee24b2159b40d74dbfe0068dca6432f1499dd475862ffad07fb894ea4e3d0bec4709e2c2b677b9632ca2b396cf1784c88dc32ed79c8735cd50027677bf6cc25799277e72dca186caa73fe545c579ed7f08790b76ef3da73a83771bed8b8fd2f85f0dd3aa6066b5f0aa281a1f7ff3c3a1242ff8d7e0abb5c48486e3b0351ea45af31d80de042fcd81cfebb098412dadcb6b38857f3359f7e7dda27c743e81ccdc0fe704821a7543da630b4724ab70025a68532fd139e0d410f95a248e2a5193181feaed4b25dfaf771df74c69217377da95e0668276a8d0dc523e9a826b16bd7b7da9997db8b766f45b404eba459064c86e70a7e76c4a74a682904cd583499292d393a7ae35a510ce9576bcbc8a7f6fa06c748284ad2e460c052f9a1bf552c8daac4976514f11235276fb14c46268eeff1a6c84fe9bccbb89543d20aa53dab6df523ba41b4794154c5a4df58650056940f2e91d99cabe5b8afa797f250149e30d7fdabf40c1967d08ca0fbd66f5dd64f2705aab0abc7b8c9d6244e4009018e3e18fa706864fa0b11440810adaa64978903d31eba5e37ce54d16201dc182c02ff80c313830443b57fb58723c75f3e20ab6941f2e1fd24afbf690ab7adc5be82dbd6009c2f331ded82a6c33e0bd512f91b22f6300bcfb5e17366c4799d58df963ae45811533ab03c82e16468615609ab43f69be0221d13eed990374e9318b6c78470747cd7612329e72c13aab1284bbd8aacd8080d2f655e58ae0c3e784f6c9c2143fce4a2f09e3d1950780be394ffb7570e54b2b44dd4b7578aeb513243289e792597529e2f4bfe80153a93e0e24e2214e2b8e5ffbf888340ea7a90aa3c1353f4deedcdb26650f68442014a8e5a5f8428f1abaad6cca8497a976402c8845545fb35a75dc6dcd5ad8ea17739d6445b68fb03d60821be5c926d594faf756215fcf4f36d0ac3da03aa04f84267a0e76953f5e0e107c8dbcee581f7e4a0971d7bff49e0e6dd8fa8017550100adcd58cb2cf7e4f73afb36c23ca1e3bcadc17feb1d660c4bbdd138ef896d8b178a15b7b5d63fe193409cbb886c9aceba96bde4ddc09a367941337d4109506a233bd1cfc9398dd06ce1cf6091d6b93d02b56d352272078911785e4c170fb41ade438ff577cf483dee6f01da510373bb2f6a4dd54b8a44909ef3d009e4150f098331bebd33f015869278e29d588b60d59b25de69db71d7d98c24374b3aa1a7d2cc76dcab90547c56f36fd00e1ad6e6f8c088ad5734d117c06399d2948d4e34f3149368351f54d30b7be458c11a6e9ca159f32921fa20aae1bfb5506a5e732ce6f607efee3389b020a656fb3ad9caf87ba215d04e8dd8f7b9eb173f2120a9062aeb54e23b7f5b9a430d3825ffcb6460c443313151826294b5902fdd7d6658473b5f0adda1555307cf1b18677471d38c37a7f5dacf6a75e861297fd9c3a2196694db8a40b448086f415a784e3d6f80d1226ad42b1c985b99492177a2986664eac3eb53a9e8d9d4673635c828bf1704b630e65cb0ddaebbfdda12b7d66025b35a45090777b38d4f560a4798b57e0ad7c1dfb4effa671fffaca067b0d3bf529d2ba4af1638a8d4f1d25a0a5a42fead627a8b610e665d5e9f1c18bae3290a9f7ad54f67f07b4d33345291f89d7fb5913d56c0454883250d22c2bf66cf44d64ee4fdc1ae36adf54abf6d4e9cd2ba3738e0dd1b0c2eef628e23471105f5c5a6f363fb87fc594f456dcb78ec518a90f816c573f80011f97a64090f9a12d719f12f60552edcb8edc22f110bf7d125727cad83b1e3eba23ff1215c82d717e3c0494572a102ca05f7d001089cfd7643fd498f842d6b0940314b488657447fbc3723f80355c03ea0fc13762ab279cb669fc31f4f3cf9f38c6c0d3c2ee35ed4b10cf5999ae9d3b52a78f110efd2d94afdb88def5d771d24d74eab9eaebda29172b052bcc1e3a9c7f2eced43c084a86f89f61e7237425137c167aac29e4cac4071afafd3f0c9dee1aac68c91652e63b39bd6d94a55551286db257f5a7626d86c2e798171a002df9ca2a4438c1656a7c193b962da4ff5fdac7536bdc8bec2b36f19ac5c08682528538ae4a6968c93c0f4023c3f947fcb5f132fe9da8fe0b6c9e3b396b41ab1b74590b4362a33104c6bc577ddc41b7d2bd3558bdd5a32746988449ce71e2b052fb3eecee743044a06f4d064fc84d1b0cdd6ede97fb132f2517b1c260bfebbdb050fc83b96856ca259e88f4a371659c2f7f636f95f8413d3051ed4ff83da4fcbcd95b77ab265eeb19bd37ca80bed162c50addb1bdb2757af0afff989dd35593feff2371cc9790ce0633202fef97d89456e6a44c1912f70dec97b144576945aafe2a1b1825a1339c73680cccf6e4c45a687a80e9b1000e1fac72c9fc2ee7bd6a45c30c15bd2d917ce9c4c249a08ddbdd853039308b6503d8b9a910672b3505fa5a30be0f9d24f097efaf0c4df27b6645346f96c8b1271e5f9aa24e2e553b6583c5dbf9afcb6c99150d91b080f694acbafea0605a2b30a7ddd7c74bf8b5e2252d0f2a859d51efd41dcbd2778bb3c1f76369295f8dff66e679f97fce6e51108c1fbf8729803793e8d7b2da291631eb8d68ff735b0a37b3235c8731a13833aee3825d59ae0083421f6c49118ec879f8b7f248e61c78dbfea5ad09478afd63a5727d7108ddc63fe3bf0418e06d4a92d2bd29cbea6980f12fb59508285265e7db813984fc7c7a725e11c6a8ad9043845fe73410e80cca832d9b3c0b3cc11ac93a58de1d9c53c4259b5ddb80e1bd5c58897d3b9f46cbfd98e29fc99aeb9ec111a93f93c5522c4a5f81eb6b29e5bd3d1536c668016e6fc1393509653d9db305c50f7d800386cdb728fa029d2920588dc3500be1bdc6c0c06d0e20377dbac68bef565bce5f9effb188eeeb990af955f56bbe94ce5bb8859f3c552d68e1aaa0fe966521a561038ae08843ef8853da7e1c1368a95863ab8809aef2781ff2d50904c324172c921d36ee2fe254928d2a99abc63692a75e078fa4ccce498536a4c8457d7b848c7954cb8086b362de3f506f49891096e2d43363189dcfe8c2377da76bcc52b2ec9f111041939e6395f1b6c89f66deff314b99cc0e29de9cfd7dc96c1bb891e7758abaced6608c9dde2cc36c54648813bd4da0912e79e4af5e8ef1e0ff4a206c4fc4b9cdeaf56359e276df22118bf61bae61b07c1f94c7670ef45bcbbf89e789a1d574d523580ddfc85a72b37ee4115e2c1031538a82710d353771f5037ecf85934355ae29937077b95de4e84276bf265ee08bdf164cc8e8fadd9a25722fbeaa4f98c21fa5ae7669dd099e87064ae9b96c5b27e86cf9b64286703d25b4a69d3efa5b25f23faf06fc5be50658716678607f096b36339122610178c4bb72eb558abf15e5ed9ea0077a5c7985252cd45263bf71c090141df38e927b96b05404ccd6c44d6ad96b886329074e84b4de9c610a531b8fbfb7a4131161031bcb01fbec6a318b1c7d4d70015285eb69ce30c48b9d638f3e8cc32e69329797bbd622d89c8d2f5863a3ed5fc93cfdd89d3bca56ba63195637bce1c4dd395cc0de975ea1c388e63aa711f25da331989e89c35359d5a59bf7e01ab86c576dd704ecd85e604ba37dbb5090057377777ec4942e74d6c4ab11faa36df130bf1831ee4d5fc91c1b261c63c6e8cea72d57d6d22543d4d46fbda4e8e77c3318fd80910369f448de1b59edb971e1f403ad19c851a6cb1c5bbe237b471310272bfaed20cda96183ad33841545ba43208fdf057ec87e8ff3749924c0a291f174719ca906d3736d21914beebf8f07d5f952ac631dbf15540225e80a987ec8e7c3f2ccfb6a9d30dfcb924be01120c1602854fa7ad0bed3e5f078931b2d6520babcb7732a74b4498028b91ba2337f51ac549db393bd4e2009667582a0a7de013106c7777f4e9f2418e10da47c4e341d812636bdf60cf664870c239de02e72d3164a2ac2421de62b6f9d96ccb68ac88fa7462602ebe63f0728898acd25e8a7fe2f2fe93abb0c12c54c055d7c970ec20ee55b7568ba73b071b486b2f8b50008ea455e0bc93140aa5978c0699d6803aa01050d2bd9aadad10af3aaa407d99c1a001f7e9856eee43651bc77c315729009d2cd06513c04442a3bac9e67e3d9e567a6873899c8381e3e14ded271cefade65e806ebef7811d8446aa9090372fd0276454334150958164b0aa6787dae4b1549ab78670b7716bfa601b094819e8d1bcf461c19140096f6e49bde12ee9fac5c3a83ea20af205e20d8668ae7e84ed05afb0fda909e9539e3922f4c47cd8864dbc2d825bee25b30246303ffa9406a0fe5810a4540bcb08b07dc2ebac02150bcbb6812f2eaad10d3f2ce3ed68291d992e4e99e24d27539d28a4a00ee25f2e1fc24b499174c162790b4a181d91ce485a180bc3241edd2185794640db01d49226c3d2fd65c8b2889af8f6533ce1c405584e08030623ad936624bb3beca502dfb532f602f8b4fe81c78ada1bb7e2dae31822ec0ff506094793adabe790267a654fb21d00d6a4260c93236dd83b1f53501e58f0107d3080bca29670da7220abc15aa3c05d9c30a97792752a1f22e1cddadf32dcdb0b2da4512751b29b1f0e07827a9a889f95c4f95129d277670bf4bae1ef530ab62b77d4a37671d99fd3592e170408ce4d7fdba637ddde0e3652a2ab13a32c02485a89a22234796e5f5b8c7ffd9b6109cd970f208a32fa371393860edeaf403bf814ed8d6bc5dad96004328db4a555e3b697ca08c6bda98a655b1966a17812404be71e06cecf08b33859c5d7cac639b49eee86cf8bc28e90d1f5d7331a723497ba5d959ef994a5744ee8c0debe529f24cd07dfd53805fbb2b0004a049841f9bad9c4dec64adb13a52a2dbe02edfef89ce7603fca59ec8398a616dc4ba94c041210c9741d50f6e5ce40951804f80fd88564a4210f6feab88b1a861888dc14d635f5e7dff49a7c9e4828bb69255b29a186db301e24f8850d3283fa894c9f10d2bf0f8c8cfc95d09fab490d1c1495c0f6199190a1ab724fe40788c0a8f760e49bf5b4440585c1978c803806bb23266a58a65e4235f37bafff728f94f219dff4a4728a8ac430ac35c73f6c34c1018b7a1bb567d1559d6329921c0ec3ef345ac55ece08ed537db43fe2616c13c8104394e1ef64aa7b19c7415e6c8cfa0ad76fdb5d50a5d84ddd881a607e9e303adfcd3f3d8ccb4a30f9168bb6dc9093df738dab02c2e7d7fdd08669c3ef98f683e0b6dd7146024cf1abef7d2df4b02dd77942b9016d4568ede74d827f4ce2e35d936f043f83b00f57b2a07a463d42248d891d89bbd85507b8822c09051ee29302887427face4b1dbdadd817722eed145c038c91a49c8d30d841c07207ce3e622d3054cd359e3a04adde04e944420779ed890e754e226470b7a6a931c9e35cfd282b8f68727c134092f3a5443f0f27c19c7a11893ae26143e11124ecfde6a4b0adca929e23d05d4e276f37dcb4eed487f3573451dd850a26ef21e1f80650cc19089dfcb2dc437ea9b5b14b07687984397cc0f573c862c5962c595ed765aa39b2d3262c5b1e3e0ddfd85a4d58ac37cd62b317c3435e143a2e43180a2fae6b540a97f3b00b3c38715d09dabd350291f67010fc2c653101ce3badee6255431cc18cc1771637e8bb4fadc4a329410e20b60e30ceaf3dd3b3f85ad75cf5ecc626f8b5ea30cd55964eff4e8353fff1215c82797d0faa51a8c35f1859e4435aaa2270126ca15408b76c16bbe05ddfc9debdc26e504fdc35329858e0a004b9235187ae2ed35938b5de8b1c724631173fa8cd1c39750f835d13ab7c30444ef5db6edf2967b8b8e9e17e34870e3f7e54c721f2f68735bf5e3d9e854fa3a11357e7548178598750f61018e0ccec368606f4bcd7c7c43cefbb5b65ae39a751027ddba5270180c9b1cbc621287498b5f8ac5cdbd4267cd501393aebaec0b7de9cc63cd3285b59ea4c0978496414a05836c3442180890da8a44650b2df7b41a432cf6f511dec6183900daad43c137f77d0da5f00557613124961313dd8dff14c6507f7c1704b14001e66d26418f7a2af4760120adb6419cc511850ff23553321b3fe7a86b7ee0dfa5793837b733796691ad2e1b37ad98e115bea3469478183dea0114c236d4b9bcccc12327cd359e72fcbc1626ccc4cfc9bea45602e9ddb7feda9ff0119f8fa6a11fc71740ad1e5018dcaa9f8c94844c1c65cb84891cec963a942062dfcf360d544592fac87c76f61ed980b393b67478a2b53c1625532d1ebcc08c5172ee51589ee72ab60865c3fa4d9c4539855b1dbb2253fef51bb629b74b05eca7142368ee47ad9831488e8fc36dcd0119a8aa057e66ea1907b66f67caae0b474b0a960437173ee355d01f61b94614bd3b45ccb627342096363da36fbdae7ba5259f70ac9bd6431308e741c2449f178087a3e8b820559d7c69f77dcafa13fd0e1d1ad9e9824b633134d61b39cc428152e50c2791cf910ad3882d22ffe7a5388b1bc2f842543f4744c0e6d74eb9f5f83b3dc6b1cb9eaf0fa47a28bd96ee2bd52307e1f63f797a9754945c9a8973812444771aadedf47953f6292d7418766f7bdfc9bdfa685ac4fa6a98838f7362aeaf747b50438038b57fd17c876f0ce637d3c5499e2d465de5188cb4a2db93ef433ed431b09d0bd42c3a3d5b7cd7faa84c85e070ceb760eba49ac5d000a971800a7c6a8182e0162fa62d43ae56d46a237638352494bf3e6dca281ad4e61f967fc90e40540d372ab1eb00ea5d5b8de5bf7c94ce4e376d69491f6995a89c658952499f5e909ac8cec2c25a3b51d42bf2e42843b2d700ea68e96b063d346aa4d26352d5ca1f71bb8acaf4e33c7008d51afa40eae9a5375ec3b376a61a619804fa18ac588ee7da39e6314a44f7a341b4e4698d347ca224f1031108f235156dac88db1ed1b2d21d6a6b5f892574d3c5f0d89ad7c672b40ec9af6ae892953932c5041371e83cc78175a0bd7c2dbae6deb07ef3e64bd3c53f114f25df2d42b63076f7276d4436ad4f820db1ea05d1c6d11c5fdd8169a7bcfdef6cacb56b4572ace8e881da8ea76ed0bb3ba49a55c159e95e02c172c8f781918b8d6632f6a557f1425f88806d98f14946b1ff55c492896d9bef057f11cafc430e3abb1d736a4c46ade4a4278a101e054bf728e3fa4d3ca4feaf1371ec29155aa0fb13408d9d38f251003d968c17dd4bf396890ca0fa5cd7acc9510f001bb4206859d661ea45053e553abb961cb51662651588985e9fd04fd0c52923f6a8c1db8fdb6c49326a9a72e21b87efe2f3b193cafc8f4edb468051902c027375d824d43c0a3ec00e14dfd61f2a076985d896264ad405f7c0f65428148543c926b4c553986cb28e264cbcb135efa4cbae6dae630c24525bb4b8341b855856ebb1438c9fcb8b317a2119194d4bf2c6df04b9df913974dd42609308710b2ea2a1bd8e6202fcef244da784def08abcd66b30c412faf84d10746b8fb873cd8d8fb5f29b2dc2541ef1cf6294f3e31ad43a38d99630e4723552b87eb42c69f40085edfa74d728faa202c8f751406e22c25c0ea8381f98cfb60cd8410b4d9ba70cec137a21467c1603bd0011c3aed8ca0fa3b545b1c95e3658a49a5b9b01500f3b2ced1da86406d2c78c3f56f3236b3c4276f45709147dcfa283c7756c31d15414ad448813170d5478d64c6ee8886d9de33f948648ea3fc31c11273687c6679d1fd8df666a49dbc49d02f002aac627187a655e7c7732ea3a4eb68147f3a65812e513885db3e1b64bbf7af3ba42c3e1d2905017de9ed4c75bc1db9e4fb8bbecddedc70515f8c7e71165a51d3db769e3f6ac678a57c3b71e4ffce647f7dfeb6d23bf5d1f3840e3b63d17eb3534119f74aa57147e8df0c5373e874142e76f20210fe43b9e6b941d6af75eb40546594cdd1618bfba282ce5594feb5257c6704152c6e3cb4a58fb5d4d69c068531c965a676477ce07d180ffceaaaf83503deb3646734474eba77d8ba5b8c76fe85dd0b057b9fcaa2d30f2fcdc785b3bf4f3e6e7453c909d4800228fbb0ffb328cb20f36f84030bbf4ec8dc2cce178e10a916c3c99494eb02a09f351d794e31706c35cd4911e9a6924ad563ae60c8ddf5bbe821d89c30614596df7b9416f07872037be72697ec31d841d574c7122229caf2332725cd241319dd236b040c9efeba0b73ef8c986313ddde297e1b74abf80cd6783235b9d856fbee1b91c1dca24a94feae34ef95e6e33f7a41edffeadedf37f337e18ce4d5d36834187e721992d2bf579b55d412f02659a0cf5308f72335d8b2f2939fd094eeeb59aa8f7915f92d75a0bbc0be921733d8ec123bab2c21a26ba028e6f2ffae2ff1c962536b843dc1745490141385b4b219a6cb067aec529b6d455b5a0ad48a0d180db058add6e925280da8be87706117b88b5a51dcda2e876a1cfa4b5c01a10cca91150dd47073cefd16862e6ef494eb21e4309c65582dfcce9196597ae98bb595fe10f163f37625801988f25e54d892e25bfe4498f8c972173da002cbfec28de69f3491d0d268df4d814198ba4394a5764d03e8ec3e997de08bb7b5e3d3bdfc590ee06daf9fb442b1d84080273361a95a51f207d39c067697064e0146eb069749c7a4e354bdf10659a8f6571996c7f50ae5491fe383a902c737c37369c704d5555402a164af9780a15de37bf5f0203f048169af9097f998dd8ac86ab0da613ce82e8a1653f720482571986d60d212edd3b0d4256f5b60af6699bd75d09784449ed1abc0a72713c3628e75a9debf0877f4fe291fd42086cceecf13133da0e672d5c7d82ed2b1fa98c4ff0bcfc4098963f4c3d8fd6389c457d2a589d15c79104e298b9fbf6b2a3d2ed96ddb3db5640e383f9c545ca219b206beb7621eb1729a4d069772f0e4e263fc2c35648227311f7b41f23babf432c8200f7f3c89d13fdce5f965f271b49d079719f0282b9e033593b86fff69ee878f5a41578971403360af7e918ea06e9c80764f28a6989e5cd917ef6ff025056a600bf0fad98362ffbe000284b80b87737710184950578c90728e737cee5bcd5df2cb9ab39d2ecde75d9e21c9ff2183a4440b21ccc5f6fd60aa5dd1012a7c9af4bfffab2c54d1f59cc7c058dbd470d7c18fbde84d77e5752fe90c74b7451612a1103eaebf812b5e92751d1434c878183da2aec825d6a16860b720fae9bea6b905ac0f1207b2898d4aee1af05f5ba5b99b35646df062c96ba57d11c02307ace274dbd7817f597ae628bb3059c60e98304cb0653627ccbbd360d38560eda0a74381382e5990f68e1dde3503cd1341ce00c49c27bd5644f7541532c259c42a0440ad397a26e71a2178be13ebd6a19595cfb561226fe69c1a5245137f1720f4726e7b685155ec24d3ab6aa07ef2fb9aade17197fbca73128352831e02259ea040215e4d3a831aa7231a4693239eab9164faabb90a596648c0c9218af20197be1c0dd8409c2aed317e49d44480561c4a595fa63ce4a94abf514ad302d547a69e54987beafca9fe2473beb63d0ba5d806099503abf1168ae6c34c0a1e124445d18835bbc4e2aca82071ed5ef52bfa6954e43f368ed63dc14f854129354f93efe8357a1a36d49f7596175a210577e04ac787c2d14e0a9b685a25cec2d0c3c32f52dada09e958ff00f5c289bed665e3f6de42a44661e49bfab713596979353e6e91f6ea1d24d647c4d001f08af07c71e7f9c36818731adbf2b6dc558fa71a822835f80ec6a1d3062bb5643317dc2216b8ba8892c9fa13b7eb09ef57a7e2ca1b06bf7cdc98c8d5b6b00657a5d8020d5ec380e0a8dd5f45dc3e00dae434a4ea85748ee3c8061264d5fc436add5e0a8496a2fd8a0eb52b47a5763c1d6fd875f24dec24db458106f6f06b1cfc5e2c4e3e6ac170e35903e68f903e2c256ee5ce57d0e821b1f9ac1f127276d3aa8ca5457147c99b6b0c2c099448d0519175ef26a1aaf3060648f9e32de8ca07f40d5ba8e3ca05ddaf8ca00cec2bd73cd00977075658974256b7cccbcfdfbf3a4734d1b10c4e10a81f7f0278fdb5dd5e6f8e0ff8fc563f4711cac7617ea3d0db32b78a263160748b4947b5d65f733d26de980c73ea2065b4c5f66c2c90f1a98b34fa0741198dac17ab7b5c9d67e091369bac0ef0d653b4fbe1cf1d85cd35939adc70bbca2b4221adb48e4946cd8a53fe253e8a08174c878d03b96e1589dc49aa87b01a09cd1a6fedf3051e5af6ecfffe09c40012438758089a49d0543d72163ac53cc4889562f138f5544e526a651fb6c7d0f3b7d190c0cf23f4e6ba7e8393cc237b3ddf0ad8501f2a004bc59e9f2da8dde9f75148053c711f5f03c0b38d4cbf00ffd875a3d707110f9db91d0a079454ca736d872d31456f0accd9ff82fbabb40c3f36d4e6eb80bf2490f8c1431afe3afc01d8c1e7b1564974d2bbdf535b2b2ba3bddb854a824769f76e9d7ac065c5dc1119cb8a0e11f970cc153be8ab28558655f038ff4537d5b1f6ab1972085485a8782fa84816cf99759ee8dc93f0efb574918ac1bb7d78b617b0baff7f9183a830bfc811948836d0d86be21069db1dc546e4c2184249d1631ba432b1dbe26fb805465779f7d9041a19918569e2b03f0fadde4abf1c40be672e4f96c31f71754f86aa7253da9fa3efa9ce375b9716dffee9dc9908a1d8ac2cd0215bb5c2c520a9356a8d31c53292cc19609c67ef855d0dbb6e11879b98374ea1b7e60c5e641e8fa1f52c9640385d39d9071911647242c6731168de3205cc270371ea396ac4bb5d5cd8b4e3c4176fa3791031ea9e743db3a154f35f3d87f75085edccbf407d838cb693dabcc96646b36a1a7b45e5e18a5fd6a745ace6b52555999a022097e503a85f94f293d89b7ec43c8459d5d360d5258386c429f613f290cef52eefd991c83ab88a90eb7a3d746060fc51fcff689a9f28821358c40acbbc869db78f8e0a2dbe41b33a2616a2c41267d0f83dc27f47374617a7dbd9203d1360e210821dc4b0ad8bcd52f64681fa44c1b0c11ab50b57885cc5f615bdeab34fde60de6a0147fd7307277fbe82516391ff0a21065f93680ced0b8288ead0cacc6f987599e10a70c9446014f14287ac64804baca31abde53f7756d1b7d868e00395078aa4359296fab3e5b7310f9b4146e5f3d8538ec15b8a7c3678251f199fafdf2c622b6766fc91e656daf05202aeb3a0a118aa147437986c38ca531769560bbe75b0720efdfe194c0204b1b254612540c20219541d05c3d7cc5cb469eeafb1a381da1a84de381b6595a8e79916f53636d50913c64252a74f6fb3db8f00093c3ecf63a7717e26f2c3704c248ec0c740f358b24bd37a8aad23a1444aef540f05d0bcd18b4d544749d62072dafbc873e026db8204142c2a6004ffa26503310d9919e898488107058 +MD = 6107677139eb3506431bbea3f81bb812a51b7407e9ac98e855154f82e1f9830d + +Len = 98440 +Msg = 5d7bb14fe4476c02634151161c7bbec4758b7a0492d6ecf5290f8b8092fa96381e760585aababf0274df0d232d9f4f1b4f5ceefdb0639121587394c98f79b6043b9e11d36983508b2acb1c7aa0dbd7cd58dd8db1da0b27b97f2ae2808354008f5bfbbe81492b85652d0f64639eb7bea33918406a39551686493d5fed9614dea12796f2d67139c85726b3cf264fbc6c629a15f06ef5c9c7505bb3f157ee40b7014776961b0a35802abdbd440ada714ad522db830735efa0df60948208b660f27862a393993ba814a69937aa58675ebec37a72e37a21500afafee8f94614fdf9ce2026cf952d19ee936328eb59200c31f34ae2f612e3736e6bddb83e5a309e33cb2b06345a071075b9c299ee522b020c2e3933a616a0e032f8a60b398c33cb0836284ba92ff21511e05f919b8eb0c8b53cef6ed9cd8320c06a01ead223450ce0d9c2fe155b16b12acfe118da54d8e796e5159b7980b1ba7e88955cf1698dea237a9f2662279a6b284ff13693ebcae615f153c06d785536d61c0b697ea434ec39e267cb77dba7cc742837f4ae9caf4d9c2750e79dfa951d2fec0a19611d619b8bd9c3f53cbf645b74225a5913afafa59250b517f15199f6f0c23b75821c3d7d7f275bad991afaa09104036eab6cf1755f34295951c48a4983644684c9e8f01c7e93d6fa763690233398d93a5c1a9e456a9b55b4a59a909f4f9ad24f1fcba100f1e6dce5bb594f6dc3a485c50f03dd9e1d4de030d51cd27ebc2e87dc6a0b79af3ee8177550cc5f05a7f1ae17ad6dd706df1173d5c992797132e60f3594f19fb3cf612cb21dd7e7734947fd391ca1b40719b1b6ac6a44acfd198c0f6283c53b940a19c6a40bc10f40106e1a3246e79b2931f350bc9e7994acd9e6326921cf77d859d88b5400d401f3632dac0a1186b4f390a0ea0d4e7a5905dabd1d5454567909236523c9e556e214ac4d5bc967c828ed9e802ba86390229085d87b2b06a469aecf89370ba390dd2b5297d1782ff31f9fc35abc94c30117d64001f2f41eff7050c70c6f2320ca17c1bdd0b31f5150c09268f744d95815625e74fe2ab984b0b67672b67218464cbb5d54c3acc4b427344df3206c80081628b08a98cd8120ff62a8384ee9f2fc5def888137627142c0a358ce9bdc90bd4a9455e8978055da339c6f819e7bba2946dbc9acf37d2de262343c5f303b115efbcbd4f8c3ed3c9a968e51b56cd177b750a9a83bc0a6017c570f8010a9320cd36ff8b521e4bc3e486e5dd83c8192318dc07ead976685f3f9e55dac48cd688704ee4181cac19563cc04348c7fa567f093e1856128adc10e3f5546496e63868dd9c2cebf5d231eb40ea039f4e49ff8bdb1fae34b565d025737eff1deec3433233a32c8f741d20238f68a9498d439ec9fcf52c3f48a3df2d8c9fa87f3290818530f8557b2de96e7f76d096e00b839ec9fd5324be22a163798dec02f108da6dc244004a2769c3776fa5966efb5f6689fc4abe2a39fa0b0799f5c8712be80d8289fb5f7d2cee37c5648a4ea3e3ef88eae163aaaf4b352d361f62d9857846a64a4ca56a60e3f1b2e2fe934da84232473c09d68d266a4aa4796a4373b27ebb313f7af0c587f53ac15abe6f381e8ede4de7e621ea120fc0ed3c1b164b7aa7ac3adca56bd564d91fef97046c72693239f998f6c45604b42e8418a269a5607b903fac4c552e99f8179a226119a10ac4dbc6a9dc3c3580eff9f57980ac35e6730d9c28e06b4579dac86d8765053885cf3a51a4d7082ce92ba9bde9465c618f168aecccf21c9e871998b62080adad6cb9ec171497a680dfefb449d253f8bcccee8ebe1301c7be640d0f2098347174220d5783639e95f5c7b4b025ef4a1fac22538f6c95901b19735da21958f0ff21484213233c4c64e0231303de7a992fb411fe1394cf1d85345753e82ced56b53931e09572e93181c4847345d01eb1b7692e46a1a31a1a748362b847b7bfd62220817154ff04ee7b376e6dfca74624353fe9b5b034210787ab27d357666affd47bb96cd83419c3bfad435b8ec08b7127acb6d3d5b45e652d00393d8da559243aaf4c4ba59e8251dd9a95d472c859290d34181968a03cd3e327096f50f114e3c33fbc8633aaf9294383f8514f0b29ac647aa00f1f8446b428840ae157d628cf0cb17cb508f5c8ba9ffdcd6a8a15878bbbc4c11d30dd06869babc02bf8c0ff4685892f50abeb8b76316c9788aa83fd4771b71ddc6316e6db8b12cbb7ba4e22dabc3b26d18318bbfca664e92426b2f54034d5f8b51cce8223953d800d12da1e0c1f5c05c024e9d4ae6d5b24c5954f0a366395e44fd46042ef38907fa4a8f15b4b3d503e9517fb501c04c3fcf56ca4967a8c6b83050078b3aee3c02d16d320652884ac53d8c2b9d8c5fb43b43c1340449d2deb376d47744ed335212acc27e3c61483e4c7f3bb91b92cbf3efd023fce7f0eb68993f11fef9f0c9b57db3d2dc7e8afb98e2d8e793f8bb0df3a39c0289bb05fb4bb0b28e0570eab84b8b1024b29575aa40cd701720fbb12c9a9fd2e943472f0b7141f8d3f2728409fe86e841694ac95d1d556e53c8ee1930d22a985d92551721c19338682fc766c3b4b466af6a632e1a19c4fb23f3979e22828d16e8deab644823f09bd6223737ee575faff81ca84eeb1b603e1009c0e609921176118f12bf857f9e49a4358a9f93cecdeea3e6e3ced70c7360a1722f99ede9fbdd600d52d0e2bde6695acf8748b80146493932da59e6d243885f97ad60d67196755ec1333e66c610238057f8d768d814e841675695215619dfd0de01e3cd11296692117db2198064a19f37a3f7a83b7ef443ec1f2a8f803c8d7eb0f5c9d9b1fbd88566f7d304d42a083ed6504e8212cb95c82bfdc13939f6b9f1764fba033955f2bd296b4a2eaaa983e69cc984fd4544f2578bb80225678d8baf96d86052927fdcc4c09fbea0eb2a371ef1d54221bc3134787417945df34a2c427a5860cea2c1bf22955bd8607df54f6e3d3b30f760da82b34ee420e9c675c4328897657f5263c35d0e6940784a52f15ee8c4f5861786059182e54dcfc7567a052a5c156e8bac0fff95909def398946775a3839d7ca7ee59976e3c419dd347745c77018a233e6cc90919797ce31e17540fc5fa6f0620b495493a52ccff259e379c69c1723335721966a47d71c1ca3a6423400e2dbc573594841f52ef7ed0be52a91a6bafa7447379b876805e1e11803036be595a0ddfe3fffe999729bb593a5df8f56a82edd00352652c2c9266885b10d0ad4684590f62001f15a9fc234394c2028768ac755c944c0321cc9f29935dbe8779602d4c8a127d4c3005d7551440276c4cc07cec6e98cef8f3fb04d5c6fa71a1cf30d546c497902c55356bbf4feee67cb22c84a17a9343ed2f4243f997a3d2d60b22ece64344113611b2f9c05ad397da53e7443305165326101cdd1389fc6a9aa9d0f4998aaa58dfe1f93206d9a0a40bbe8b4c1f9294655a52e550a21266a14647a58cdf0f5cdfa03282850120d8a3773ea30cd5a78002e064561f33c5750f8f512b163545ce2e1dafe9633dd4de1ea360b8f6e3b88ba45ed0c9c927279a1dcc52dc011ac260ccbea6986d1b6a436e16d127aad849f9d23c04dabf1a9d684493c9330e1e09c723f9b31a0338658b1a57ec898901d06d14fe8ce3918cab422c6c20ba7dbd8063dc5551d8b6033b27cbdd3f59222ee057d51ce58ec0dbe5ca3dbbf5ecd067cac94e580f6f060a7fabcb1d2610f68dfe3c9b2d9b26cda6b162e109b544c6ab5d5a0288484763cc8789c0ae5d3b86cd9eadef970a66287bb2aebeebeb5c90f69ca8915ca8fc6fb8074424f73143535c260e4aefdfa761a95df03fc9049effe81d47635b8df87a5b635d608e4ed2dcb848e025ae7774f9de07e9ec27ad8633ee6398f0eb73b6243520481bd9f23483705bc618496e59617864fe3c9e229d0d77e41fe2a306dffdc3b296af70e812f802f3229b4720cf2916e9afb983105dcd23336e811893b05785becbb3d98ce8aaee8378172e3b30c1280a70eb8d0342f36ec5e78492c6e1d1f99949918a5d100ca1a14914751a48ba2a4bd43af257e720b9103d35c7fceeedadd6b2e0f9d533adaac1282ba24a51849c226c2079aab4d59096b24d2ec2221b00fb7a2aae91ce0e986777c54c47f5b10c228b447968267293ede9131d9345daa18c11d71eff499fc908ba69b99fafbfe8c0c41f881cc698217a64203b0ca4bcfded1c6ed18a30d1db29829190cdda11c091a90a1c251fa6d7c0a60cfd8ad92274a2fc5a5ccf0e553d4e42d5683f2f4711f99cacac3d9c3f15551131eb9a5dbba4422432174a5c9a7deb8d9d967ff9d05b7d316fceb2c6c168ac48277bb79ce91b5f368ea7688601fb85c552a21cd43e0ba0e9dbda2119ce404abd66246f312b383eb5b873c6253c64a18cad117248f0b0e9386985052fb64a94e3667c2d95028985045802cfa49a17d346056b3cb298d9daafa125db5329d62f4cb0f97f42ff9da6a4d5eb01aebba37f73e425c8cb86e4d9a21b53203e99718e6bde12d0c582d33839ca82f88e11861ab8d1d792de4b608ad22083503c75bb16d3366ede972cc8ae159e6110dd2c3e496746d7477576eb5292693cf7f75f017cf55243d5226dfc6cdada1bd7167c4a6001cbcb432b69e3c5754df683d9b5e30544ca586101c6cd18fc05f9d7c47229133ac91a126ac4c857fd5736907e0aee646407131ecfb7e926fb9ab18f61ae58c764d75a31adf8277e9d0d738a3ece71feb580ea4ab6c1af1b5c00a96a68a167e1027ef22d8f747fcdc6e943fd96811c58dbd064918164ad6a8ff067f553dbb514a618786269da4fba2d731e573fc35bf7297e187faa21529919b263ccbdbdfec6c24c537cd799f5d81323691374f5af5e20d25c518b784d2b8bff233d00d8737be97329e95324308c2a72cadef0a884f27475c6d3bfe9dba6591f3cd2c7bbd1a87e35521457095e5ac609aa061d4c7b5886e0de62b1e6ac7e039b072a6cc887d112fb629a7dd9fdc898208d25656200f4caac198b0c0f3e270e0b28b08a8f148a2a4de1f811f68d69f38feab95389a45bc22ffeb928c3ff45fae7f7e18b9fe63836a54699cdef8b938a80593e8213e3f20ff4f47982956e3f3caa1b59fa4b9b6fca8a071c0c3586f9afaa4f215b913e6c06839148c404099755da09664142a2a54864b9db4758fde0d576430e5a92120e38646ba347805fc2c8e028b31af58a5d52ddc57429da5f0dbe7ccb5209970d6d281fda1587aaef6628651fbcc1d4b10c5c5db0630e3a38b4ad164e98e3009f1d680e731c2ee436e5d6c144efe070b546d75d11147ee9099a43eb435f617f35735ab8ad3397aca4b6769d4eb8f15a157156645e24f6774012f5545ff22f636f2372b70ed84c94d77c6a5183c47ee140305c0bfe010f557ab343f9eb0d874dba8262821e96c81d3d9c24768a8ee3b6c3f84aac7735241427ffa2347b1e139e86348c9242db94b6559a5784c974ba3b1f2db4ce603dcf33c65cb2ac96905ee680ae737002333ce0adfb55f4d7127cfec0653cfa3f877b24e45ed7bab3f0b3b6085499a4031a1b3ca533c25f29f4a662562325b87bbeb267f07a940759dbdc7dabcb61969c1cda1ad9d80f1c4877c1162eec01719b200f8d793479eb0eae13bdd9778dc053a7d41bca6caec4a928578ad92472ce1467dd05ed10fbfe38d403e72fed60c9b047a3bfe54613d0c282c420d360dc267df2c551daa49cb96f0a279a0d917d1b4878c367c908f0e92b23a188bc25bff34e6d3301b043ce9517acf936f108452d72a7ada3c439a84659678a12d1e790ecfc13b0960c931429d938e35e78b65b88c580ed04853cbc90c3eab86fd33af15c0da2c86f5df70fe01a3a8071132022a5c760ec0a8aa6a050f109e6e03e7453d90986e52e13041440612e6b0f4eea2d1cded4351622ebf5ff7761802462382adc662c8132ca2ec3c32490ed998a58ed56925752c80c911004ad7e0eaced0b08eeaa20372df1fb81010aee82906400f5db8866cf90962aa10939bbfcda3d4150784bfe716018eefe525aa3e4945a86b914179ef5f06e0d0b657297d53ce19f9411d213ca89ad6d7e6fba6d6e05dc3ea9a8c64c8067e2dcc1a20ebe2255685a6633c30cacfb3e1b83819087997577bd6a021b0bd977930e6657548b5eb430263966a5459345296dc060739ef163ab775ca89c697ba00d165bfdfa8c04c9d7777022ef5b07e82dd8a764ea200040e5f11414b0c1d1619f8934fe573c9f16dcb2bce107b9856489e09b075aa740adc5af02defec1954cf8db63e0f129982bbe8c723984ed964aec1a2dd04b812cfab925ab5fdcd511b277817b3e5ebf8a68db593284fd63b4fbb2f9d258336a3fc83ee9901fe178f142ba1fed7f067ae05ed1ad606bc7b86c077ce42af7b8bef386c56f43a7a3199e7e2f1b2d2b7ee8248e2ffdae468a6815eeb87d8a4741fbe2c6fb2b288f785373b544e7dcbc2e93d17744ce5ebd9bdf5d21e43a92bf45ad87f93ea1c12ff7a33b88aa1a5ea9abea719ace94042992aaac318e8fb6d85a405dae1e77a01197854078bd37359c6d788f791bf3313305368dae25f1792ae650ce55f8f147ccee761d05fca2f3dce9aa8592cb4058324a2f7bf839145c1f805b64717cb31aca43023ba0f7021c13b71cfe583b100bcff7d1e190365cd22e9eccba911841ab925b9626ea2ac910a94c3c446a19f6ae6484ea6906bc2f6de0b8213b254a018cad9ebe5942065c64361f850228b648c28887c58cdc292091de630550be8097107472e76d3928509922b783b224beaaeab466ffa7810bc4e06005c5b5bd5a56d99f7ebdbd3fff3a21f78aa4dede71718970a8f54395e280dc2e370eb4b235e56a87188dd3d6f97d913d3f84d2c6ad511135d4430b6b3be8e7817d2ce83db1a725b3e6f44b9ea59f596c1c90586d90be247c5f6549a1766185122ecccaa05c30bdbe506d8ee792140cfcc863ba43ea1d45ccc0d898b9208f5758e24ac68a7406750eeb7618523d700e77b95b82da07e2d7afaf197312d8c6b0be3e43867cb79cee1e2e9a625f1637e06565f44ca088c35c8d60a4636efdac33ca793364c78568ab647037077e9ad0252e64ca6237db2366fe8c15e3fe1da452f64986fc2b7bfe2f8a86f8723169ed4f6b2c5a8df07d87697b87ca6f70975380da15dab6f8f9c1dcf8a94b3d07d1c3b18433010a6aee63e66cfa4e7037191e6fde749b1fb08d5846277dabc26281081e11ff6a7227bc5d607b4a2e90e21179528bdc44b0f2a525fdaf6a969cf1e63ec78d08035f9755b86a0efdc74be1ff08eb5ab363f53fefcf65e9069837067fbc505de3582d3a591965a09bc50bb750219cd3907566e8bb99017cb82d2b40cc253b2cf7c555911504d5c89a944ae2b377d98f0a05809d972762d325d1e40149fe0a52dbf7832c37ef5cff70b1a3f4776043d57670dcbf110f1c74a602fbf8779b2067f65b107c304d4dadc499815d3a6f4e5f7c53d5dda79470d9df4cdd76d3a12fe4ed6c98017cb32a6becd87d9d6b196b75623af669c97c028b282bf30cfc948b521798844c9ba595a28feae32597e32dcfee72c8f4050a6401170ce73b40e9c5280b8b5fce1b8901f9f44d7c963f5107b777b7c80cd8e3f7c4327c24825f156fdf3fa1a4f65af1e1dad07c845fcfe77bd474567e04b38d505cf106356295abde003a87de65f864c7bd9af4a502c81b1caf8afb557c336ae033d927846c8311a203728a768d6256262aba4258ffc6604c9121f2d8f3c70129d1614cbbf0a5eb5e818e3607ed374a8f9ac4f21ac7395b9e21bff982dbecd4bfbe000226af8c9d65e2d416fd05d5a65696316064f9af7173f9db6bedc5138a04626bd46ef995bc5aafeab9e057cc2e3d959629b1f777268051fac6742fe9658a66db3fff5f6fac9f51387b3c638916872149ca9c515eff25f2a495b07ccd0bc423f4a1424158f2c67f53e77ba9ab03d5b1e2af8e87957ff7345f561d4c4ce144323ea4f26000334272b39b28aa907aabdff765031ad90d569f8184351ec78a8d0a2fb76a0bf3c2a5e3ddf2cdd6e7ef6c03de67948b884bc6acb1ac7254eb6bf1243e5523d58245633b497ac5ceffe6b8b62e43ad4a219fe9e4763b6f8f271a2318e10aba2d5a2ffcf16cbfcaf366d4f47f6d75d7e7339e22cf35bd774de8f9a540be5497a3d9d6e59eee2e27d4bb5eb1b7f27a8ed34cbaf3c576bf43f1cfaeda343caf36b99ffecfac144276e34bc8730873be4c9edb7aef8fcf9d301b498e347bd28731df0afbfda1958932bfb6c6bae957dd9bca4e52786696f3d63ac53c66801688f3a4a952f207d88ed5ca8abdebc32544e6c633d610e2633fa0c0e12dc2d98f01067b09986f5763cffa941632982e4280c8131a6a6b9bcafd2a6e2bd6fbf092abd4e28a30a808bda8fb8d07b95293662dca4170b3caeb2498dd62e3bc546dc7c6097bd9b05ea44cb66345cdb68d9ad68847d1b516c16906bf246fc7626e99a50bfea7469bd5a29774cc3ee6beab9d3a3ccb348617e19df7ccb9e5355dcd0ca0da4ed57f57bf9c346080d8d1365f22f7b7eefa323bade26e4de853cc02e24f41bd54b6d2786ee99a164bb41bb1fab495960d8367f688eed0af4a4bd9f630da0e21aaabee8286233ee2675124b610daaa33c17085ecf50bd58d4a3e1dac4b257ca3db3531ea77d1a9617e209ab7340d9c3d85321a6384d1c354829ad5a993ca03b040d33b34c66d502ffab2dc39d6b5e1ffc358a41ebad950916de2b052ad2049d3960668d5f46ec99a678877b27b7c22172644a153097ad3d076c62c4be9d0a58a256f5962844e8c2d3f01dbc584b8c2f0189690c4f33ee37e3785a809ec53ad40895e7b4ee8950e750bbf96c7a5044b3704cf00d8faadf6072ad1c1f13711c7932c544d1fb3dac6fe3822375d3ed73148854e6ff3a2408207bb0af8b63c939b0ea8f15d4958685c255eda1bdac4ba0ba114a53cc96c8f2e0c82c1baad6f618dff69b61a5058f61486da37d2e4c91530dd3d53f5becbf24061fc76966b62041701f90302c937ecb69f54dbfaffde81475959eb394833126fc4929a0a5496e3dc92d168a51867c488db3926d2705786c5a214db65fa54581280efbc851d9099354e8d778fc28b0621c711b9180ad68e2243d8951a49823bcf435e5ea51ac19cb7718780115bf43a07ef58f32a13de1ff3bb2fa8b4ba5f45fc7888e0c8d0ac56e9c84a42e84945c8a1b07975972fd0a490747496c3c14e0f308cd9f39ed3d35032af5010631ef24a95b71db0ddb340c4af1c61efc602d0eff21cdbf76598c9212893337910417c384a7fa0256c42c0e8a5ff520449d38a70b795097cdb93e04232006efd7e65660a46569b53c152b3990ba9ef84bdc7cd29f781ecf45f59cb2bf5936d1e1bdf2238fff879bc8b67ab4e46b874e190642b84486fe0ee6f5eec56d9b8a84b6733435cfdb1c5d018f61a80ed879c9b701d280810bb9fcb9a27c64b64fcbb15eee64beec63f0a2f089273d966b3b112cb77453df6f1742c5e28db821dbc1ffe218cae56cfdca139b8a169a058b97cf800e7059e51ae088139e6ae936a8341749d7aed3d91373570c7b74e8e39f53abbcf00db91b75dc75a9bf5c1e7d1eeca09b1557b0ba0cb4174b458a4eb611384ce744949c09e6d3b2912ba97f7fa5b043e0b90ea3985053fb5ecea0f508480e5b09f24d2938d68ce7d3cc9935c3a64aa821ab1bd4fa4718aa4f00fe0560ac9d7f2be180892faed0bb75887668d187807666d3c66c6859cdcd26c2eba547a5ac6153fb75e376d467d68149863f32b21b55b51957936aee380be9fbb1fd449b05a88c27746096b219e1fef613e36d8de3ef18651570896e230da2959636dff66efddb4dc42816aeae84f577637c0a829fe9969f492c4c41547b5877e378a01eb0084a56ae627e32ed666db4be3192f819ee37af3bee3ccf93fc1489dfea107c9370e0287a3757a59f306e946e2a8c5717a4047d33dfdf80aa38ddb3d4b5b676dedea5ac70ce276f8c890102ba90800662b304f17927c0bd5fd8bbdd08001a755bf9a2cad75079f87c1a2ce3e98bf66fc2c440f454ed64ec7c84b6efc4f4c5e2d06ade6bf9e4d2a7378bf920444277f9fe7fbe6c0e595577c7e3d7d150b93e2306d861751cb3bce6848370a113de8a0ce08b8843ed951ac4099e256cf4760da2c5ec34d289e4be1d2daa984e9e86b8102e91a65f3ac63b3d095ca8a6f854bbc5d44e5e6888a061b2f8a9790f2c63886db1381eaa3c17404891c66968a37acff6fda5e721600f2b0eae281bcd069d828c3129fa0a3daeb24f67846f9b3f10d19c0699d8e35b58a69917ce876e755b2ed3760b426983b319b9543dc32512404a1eb8d43898bfa45abbfa44c4dcbfc515ab4787fcae574ffbee20996bf06530c1e6dbfb0f27d51acedd2032dafd2c04be7d6d4532c101a9e256934271e27f08be5b37b96678e5e38a65523ed2bb0640b1afb1eceb8ac9eb555975dddce5aaf1c9e593b34473372616bd5613b3fd93a077abd92430f0f73add5f8d15b5e02c136becb994b100120cfb4bf45785aa1d4d97d7ad9708ded2c101d0a48f03ba4e952bd86f02b507c0bdc079f6b350acea6f999df7eb7b39a3a5491482f6ce5d589f92127ea559708760edae22ce1dea422d06647dc891eab2113d93eff01fb0925b2700ae27a423b01d0a514251f34c6faf659308d753d9472b66b5b325fd9b43ef720bc62d9f08821da0cc1ce3dbbab81e3e9460bfc8eeaa1b4be3953f7006b583fb9b9062500847883686792ddc1c64a21ace4d29f812220a74835fe380d92e404b19d26bc109458655e720d6fe5abc627fa997bdec2bf9206affd7bb36fcf74de9eb55f3faf4c63d8457db87495d0887f88d0522ab227584b4bdc66f995858d35d7be1a001b210d84b3e70e8c60b90380ae261013de0df5fda27f3a7b1d398fa30303e1ae02a6b7d3204a8a07c4d9b9e3f107101ab4c7fd865a3280a875601e9e971330a9f432155c2114b58740c72e01e7ffecbfc4d9c18dc9b2b4022cad9c910a8891844e7798782ce21b7b42e5e282f98cf0638cd7f46c776c5f28b1569c12d3c08ebd9fdba3bfba1f166469ca59bfbc1ae5b68b3718baf9cbec8c821f9fac995782c656c2d9bb3f3850c313f8f630963617293e7b80f1a75de69e3d4d19c6b1ba182f11e1acc342da3527efe66a8e1e7b1f2c1509cf99369ed7ee31838ce9c364b9684fac9f906b514e034c070910cb36684fad867719fe0b2aed1d478b8e34e3d1026e88148aff5a05d5b6ff747113148cf47665fa1c842f6a2b4f0d783c8cb4097dfd08be1b9530e72fcf241f278c81e7cafe3ceaf95f7810194539e57d3151cd3b89a2fedac3928c61e3196b8cadfb2323b35fac38e671b747ae7145b8d94996db82fb5940e0eb402c91440c48ee0ca9af2452c063cfa8ca36c9383b87db07e0de87565fd693a7bcd0583863c4c322f5bdcfbab9f26199b35753f31952cd2955a4e558751442545d0db66af498d3da91e013fc1b7d52a12d39ad3671b2060a4fdf4b762b72837dab252a50412d769008b6afab476cf97b724e5386d72e3c4749de2843f589cd8011c7328cdc0b51efb491e12cd039ec653d15d548bc1fd64cde31fa2665c287084b645d7527aacc4630125715487c921ad810a100930f4aa7777b3fb1fea54672927d09bda6946c3005a88fd9129d90e8fddf5552ee952fd3900a676b22aa925b9181c5aaeb40a839afd4ea0cb1255f7bf8c250944119ec4dc2700fa6645ae12fb3032fe1785806df9917f414c69c5430637a21591d361692993ca718563ec96b918196d5b0131e7e4bf24c85a57b25a2c8675625e552253e5ec0cc255abe91ab977d991c252a45a252f431c3e04a3a4f920a5d7f2bf69eadbdcccd51f462f04c4f67b5096a0612f8288e7274097208935ae3a5b973abf96d20914922a5c46bea23d05941d12f1ccc47315d0a739b171a7d73dd893eeaabf911bebe1c014b4ae1bf38244a1d1db9bb397d7ffbd11dfc41844b5352f02b4cde1bb5aaa2796033ef7c0f7486804a702169d349cc84831ea509daa5ab39e65288a9167d5a80bbad5fd4e6e88bad4de6bb62c35901105304b1789252f67ec443854441d4a8b9b62daf642eeebe169073d5cede0c1e071624f35b02c9b9211d966077d81f1186d82b7ab47805b24eaaae0ce873f187db4515f71bbca897e38ac186ae39db297aaa2d3e1032bc0ca8050bcd5a35a7d2ff585e1945204de718746b7461f78764f794b96631ef7001c52803938e937d93f5c853f661ce483b4262eac63d81a2389030368f841ec046289c2bfc100e012f512d9dfafc271608f3eec5e89b78ca38d6f55b1671413b4e44c9eb636915d12993f092b37ebb35d49f709348063d5dca3e6c6d9793e73f8e9c49d866043b4bf730a9d89c640b3632c780c980f85fdb81390e048f66814b9bb18469707bfef03cb9c1e63236978587eea7df100c50d1e24942a67a639ffdda0712151f3ad16c5e81d1420170d0a268874e5a619ca0cf51f1b2c9c505a3b4ee1f7b71debb32fed13b405286ad472b3923fca21233d02274c4c6f50be72d0f2c5d18f61b87c446294897be3e468b7e9e473b7c9e5c5f79bf3507aecb62ac7b39628328622ae5c0eb3c5fdb94c6ee1aec5373106290bf4395c4ed5d6012a27789a2326f5f1f280d8b89014126c91f9ec7fb3c240b5b700e9cf6f09786719f8281bebf515edefb7a8ea1146560a77068a5810f1df5270249393db9d39af9f43ad5fa7264dde4e096692711eedefc810709976464bc8de671ff1b91980a3650feeaf8042078bb67efaf8d7213fe32d2086890c4aeddfaad175313106b7091364d3529ed0aabdd01f4d646cd9b4ae4d3cb472fb842b5f7c6a7e9b6deb45aa514a449228589e3c44f3451e58cdb517d26fe29a6a7d6e0ffb3b20769250924ec5ca29b547634ad0b902cb6dc285a8e761bef84a82bb1fb8d04b440ccbbd06bc1aeb6a0422781841d755c89bd28af7e6a533deca6bc8a422a3a2d3a33ebb09bef6b6f0c7e21f6f5647f322eeb26308dc43d57c624c2c67151b49b38413d1031a0231a146aee0b7d8b1e4c3af87984591e6acba5a4d6dce59e047cef773885c99e56666c8af445990bc3191257cb215cd34c181f9981543b59ba40a4386677c03475d28970cd2bb4311e1769ab638df57d51bb78952ac2df3f46951b273f6cb20d21dcdf9ee1346bc58fc595460b20df872c24650a6b8f4d9929d8a8a63bdb2b82cae3e377d8d62c2388b219ca0a80678b3bf1497bac3ff301e489d147d459792fd186498e0ca781c5995b8ba9ea3329f3f190ba5b654b8bf3f727198ea15e377ee6326664052ee93642205f6842bf934bfd812c4c3f486509e24f05ed1b5ff2fa6986be7c4ab2eef013bf09877c6c301da05103a0929d1a9e26601ad5bae5182cebf1d65955f9ef8d7e661e7a1fef8cc39a7ef50af7e0293b43e8ccfaf8743380ede2326daf6a8758f2d402c2a5a005e83c6964edd787fd6bcb67a0af7c83c180dff6573bcf6b330d01875b03a62437f616aed7cbda1b13aa1d5b1a758faa4eb7429cb9363e926ef43aee9b8f79f2af67b9cdc21748000870ca31aedfca4e279ea653dd0f6566b7b90f7828f8c981b8d78634b872d9dd584a4299d260b4e608a18baa3709ec6e99c5efb297c1fd57f0a01c822f40e8196fa126e2398ac8085e6a630e5bc82c0081955c3c7c6d9dfbf36bdd249b13fb3adb2fd7a928d08c3b9543bcfebfccbcc30bc1e5642b6e13d41d95589a806e9bb80710e56d44b479e649e7fa09d78a072c94b61bc849460776fbb70f5283a34227902ed09cf1a909aee8a1caae4772a3b3b8fc5fe73a87d16b0a3b71faf97476ffe2c419b6d440b3dc0e1b7f5a64390aeef50f323f93961a16b5bd10e26634b2a79b6b2159410e212406afb8acd22fb544b569333fd9033a00aa968ca76e767dc5169ea7e2ec53a9ed7ef8d703f5d93b3b8684c3766f61c9cf456215c856bc40cee0d8ede22ac3e6bed3618afe63b7f559f50c6351eb1441c912aa6cb3d378942b86a493e580d1300eb094250a806e8c266d4aa380c09d2a849ec9f1f8592df061747c0a5b830e4e5372eb35a6f04f58077bda0451848eec88466b36144c6eee1736d9e1b2a5cd7a33b6d14d5227fcf1938d24f662ab4c205aa5e8b986419dd5a34a589a896da14c15e900dcaa9bd9d1513dd60a22a9773e6239dcfccccd4d5fac2b52955e4f3c4c7075d4540ec0788fa6fa47a0200372cf457eb2605643efd4785652829fcec0f3da09e653fd2a4b852b3f1468c95dd13b5af0f384c14a17ecbe67f2b2dc6101cac901914cf45de54a4498a6c4acfd050b391d3aea8c4437f0e4bc9dd672ba6149c3f97fbf92dfb857998379344975a0c7666fd30225c6e29971d0de3e111f51e9315dfc2c47044725808c26381d6c16f84975665c1c468a4eec511e8a36246631b7abb1039f70144c901f18609724ea0678aa6f68de579179ba99e92b304e10bbbd6f18d5eaa7a2254eb8ea1e45549c8a7a9b58a8ea5ebaa26337b891be10e3dfc914ae23d71f635822e5f5f1b65fa0eca5b4acacded048718ca7276e3df152164138eb7de35bfa4da322d65b48ca89b5a072f5e51a60ed3f9d5490111e83de07dc485b347dc1b98e560bf5ebab09d96df172aed22b64fb94fbec9d1afe3d0a2cf0df67f82505339291edff032bb1f28dff2041f4907105fa4ecba8fc4b7148ee054abc39777aeae30d553c326947779e400859ecd7f98ed7fc7e4e2594e52cd3b026a268c3b762082eee4809d23edb075a9740fb608318c69b70e73758fd1866580fc506b83f1b6a5cf5acfa050c8f61b559a1d0d892164e92402ea2062dbe2e73529ea3c36699923e27d57360352725c6cc06ed9e9b19c877686ee62afb6094a88b89c053e24f0848e15c16724d14dc356acaa2212295ccb156327445eab2216e3730dd0826be44e3ae9b43b9b8eaed57b277af0ebd1ce3e6a613ecd580256d1ad20e6a4ea859d0b50c2d9bb50d1be1c44f8864c5cf01767db47db068303cc054d88ce8a5ebc42423768d8ee2ce2a41f17e9753d4dd062ced1dfa5f5c8f6ad392d736e88c656fc7c57a358dd150889665dc0efcca6b7d5fcb5ef45a4102220f6b4a96ea90a9cf240183b018ef48c957a7f469e004fee9878ed40621b41d04ec34af175f213d64d16e2f77d0bb2b6efe2e34327e131bdd4cae39aa56144485e2857142b6dc74c34861da0715c35cec026f37f3577326bb17bfdc4b67d02d279ad43db39210f45d01931fe8887671c2fcf16c16ecb3b425612a5883c7a62b6c7db770b4716d40b485686d968962fe86564b3d27ae43588ec1742ace05d4b3b6f39596ffc55fce4c5c684f9b99074798a6d347b02ca06869a133bf94930a7aa9a5052ce01e570196fef9426247e2018c5720082ae869884898dfa371ffb5d4b6fa6cbeffdce19f16d5b1c2750671a0d3efc7faf251fd1cae00de62e0cc4556617c52a9b9919deb6e89286c5e7534aa01e9219cc109d9b9fc81b67a5b6957743b935d89a7dcda6ae071a38c88e4b98198dbd369f1609dd4d6940e566c575ab2a7e7c3eb450f25b23f37d9cf8ef55ecbfb2043ef2e06a7f1aea03c837e26dd9628e24c3b1bb91e45bd343181cb27c2edbb6ef998b15c8684f74ed79e1b583e93410b5ce5865b0299fd0f216fe7fc546b5c006af325e2b82332e855e2ce5c1c3e82cb5c972f75a12361214fd64fc3a1c95f9d2e9b1639cb4104153e0df1b2f4fc60cae1bc71894876ac0303517d4e299c389daadcfcb22e62cd4df67c4fed47615d5272c1f7168708103cf26dfadc5a38697a664533fc600d110b25ca137b81e1fb2a96442a9ddb5c40278388330ec23284bbf7706668feb451d53253f6de3302ac9bb2bf869fb3e7be6b3d3cd045e02efceac4cb0e9858dd0224a2c66495e957f42e5e90859cbf3eed6085f83d123262448f54d196fb0cfbc4720d8dd7230336646af063b2054bd64fb00446e4144790ee023e108a119994fb65c906e9161f426fda2ea59679f82277c22ea56fac8e2f7bfbd6f4627c7d4d39486bedf4efabf098e45fd2ad5b22c7d82f7b903a4b748250d4b619ca8c2668e0c26c9f950017b552120a8751397a1af35061a3ce81a95e1f1561ecfcc1339c943c5198440811253e0bc5104c856cb04bcd773ca6ef8b07393650eaa3cc134cb64ea1648c57f6b4bf1a0629d9df590c640f22d76dd5981231c0099f4a0d43ede951e280d88056e857c5441093a7eda3be8e0b106dd45f039b4af27749f554148fee8b79a311a0348aa61581046f890addd28664218c5e5fc82fb20f3e24b2452c9d02bb867c712dea24e0d796a6c9a624652b3f433e048b5af6bec3911becf441b5eec2fd213838d8da3ca0e4de1e0a34ce602e2d99f01ad6288f30ed3b629661f1b62c71b063e9e93e9f695985f49b7176dbad5b008f829c4d89e3ad03c1cfffa8ef547eaa82c59dba7f8d7f2efbfe8ce6f429560261674fde55384b1579059d7400e79e60233058e653a9c04972a7c9a7204ea92fe41d534377bb61e106bbadcb71323b81b3cebd3ac23ab756170bca200679cee9a629392547f96be6e966b317d6e0e08fb3054d3021bceee557af00fa0d3721b0162f73ec6c5ed3a79f9b4ff1a85027dabf586b6f28acb177a306008dbb036c23b27496015b78239397cdc6e14c2c7bf3275caa301d86b97d87a53b63767ae8a519bd122c7bc1f64b7082da5f58c2477989667c2b96e7617774113403e5ea31c4aa5d6aa663b8a63fa83edcd444ae24de642a73ca1b2b43e606be6cf78fedc1f2e2ca2207a9e8cdd0ad7650d8a66c9e82360d039410dedb59ae2158b6caf233c051a7bad894ced7bf0eadd8e4e47a1f157d82be022e8e8232d8ce79ba2da3e1bd856aa791dad75e4b3a69d771855320f8a92005acba96e312253a628a2e5f663aec876abbd29ecc05bf1ecf171f844ebc57597cfc4ba4787801e9859f53a13bc9058296bf22819b9f1b51424df989e2c0f6b376696813bcc4fd40757223f5dd085ee0ae34212c5757bd95b37ec9d097b715c2947c86812a8975f3949b15e9c4495726038384fb89c04450a53206f4d80f22eb69be2d593c561a677582afe97c3c8cc74955947bad791e1689f027632e29aca248a6d3287c8b49108ac168617f327e48e202f6393ce2c95bf441a1b804a7118bb3bf0e6b65c9908366cfd60e47cb9a2f50141090a28dc495569f0c4fe5f8000c5d7f359e82717f347c165f3c60787eff36117a2e98daae574370ddb75cace6b8885fef3e5d1 +MD = cb8697752a09e37be6aac1094bda33b795ed3be751da3b29266b8b588ef6840f + +Len = 99232 +Msg = dcc0d931733ddeee18f9ed3df544a0a1915dd0e2a1f105b222df3090a43e9dede9a1238dae999e31c97c9f73746561f1e97cffad2f78e5b4336284fe1a9b4b96d620d2faf70d58c5c4606f8b8b00f60535fe486e1d1ab32c23892cb3fcf540a7ccc64e40f6a0f4f3322cc74fe11c47259e6912eb16df576219dc8e77f1556667f219ff27525a5a033b690e851fc13c984c47c4edc0d0b99e3ee41312a1c2a42071a34e77b443723d069eabf6ecf7bda8661fc83cc3f4c228b928234bb544e21870eca1f7c36425e8bc53086af1c7b29b147a85a0c8545847b33027ebd5e30899187a617028c4594e84118ca9d63803ba80df63e177f66445548585bba8a8ffe990d7f7ab8a6bf7b5875e9f7a4253984dcfd6cac677e4cf68c3aea780d79aad50018bc96d9262e866edc5a9a6dd1f599c2ce7221971267ff92933f30509c1fb18931c4181e8b012a9ddcb12f650a42feebd9bd3a00cc25e3fad9dd311e726d1876d14c6ae335d5fc67ffa432f43ea008daa794524f1c253847873ae6b19d018e7b8fbbfbb1b72b604fcd9a21c5dfab6bf1c0ae16cc72d450eb13decdc46c7b67e9b5796714af6feac7cf0988447db37cd3bd40d42370c1e278184f42c161495953fb2b29865f1210626c88e2ea9956dff2e61326ce966c51510ce302333be9b73cc937bf8176c065a23e8eae329313e9c1e39b9b38443222085a6078842cdb26269835958056d95f09bd8156b72b694ee32e208dfb1ac1d920991e125ee4ac1a83e09b481daffb60fb521788e2a2c563b93e689b817a79eb1c31926c0dc3cb08e74adf43c3c275101994a7a14fa9b6ccc68cda3055f3f8dc7dcc53f22b7ab675c33f7814fd4ef4e0c70db82c4890cbde9da1dbd903079d21a7b1d921325a0cd5aa270c482495e9579625dfa67808633d91160411f335f55f2c9aa885bce21ccd0ea9f239f437c0f90965749c58612b5e6341d967b0ff8ff99eef38ac15c394b05320c076c6c52a2983551d7a644b72c566bdd246c6d4cb6561181fe0e74ed3342a340d9b369e737db66d30cd2617d7e72e02753baf56463705ada4d0ac0476acf65c2ff3ae544b79f52665010866c9482b8838b2c4e47ef30f288e07de84ed9f49f1ae3ca866f082d20910b2a5b8d56ce1e79348b21fd40de01131e2f940a68f97ad1eb2af47214cdf9dda5e687e7ac9d3892b69f158f40c2ae016ee86b8400251d6e8124d855c1c605d1860db3827f392e557930d304d52322dc3a6f15c387c1b0790c7eda1ef9626bf516678667b5e8294be6060264e94b852be98d3bcfe7155d7bf401a1d7a3e754d1bebba99d38f351fa63e84bb86380fe77e30a85b106694afba075d687a79ee7eee4d3c32ceea2cdec59a056072b0bb5478fae9a70ce059f817aa22037edcf4dd3f2757d1dc13cc6a931f4ca592934d3235740231425308595e94f28ee5cc2ad084e6a7f77980b63b751ad50b645428093a28ac7a6f53424c0554696b4debe3016627970425a55cda023938f27677fe320d9522f2d2557a389264d11915a0dfe84946cf987f1632bec0d6d30b377312551626102b19de22a79c52d418eb9f53eda4e0ac14d447da6217905da635da16dafa67fe93b451de31698aecfb2e1bf19a1f71a719c3bea66c9ce21363e0117e4c10d738cd1054ff4eb08976306bbb2b660f665b07cbef4926b748aeb4c4bdab20f0007927ec5c1857d7eb2a4902f183e9fb5b327f6b5e15290d308a2952434fe21e501a4476dbcbf5660c53b5a2637d8e69bcb7d1108fad0bf53620322726bf080252a6936e586c9fd1799cf6c8659adbe10775bd6a08731805c62b5fa1fc8b2b3294a8a521567ccfa0cf609cc39c4e4ae7c7d694b63d0a05b56ce6125119369425829aea3e5a9f0d6a6a3918425c0a63f48a64e7a3a1c43d9a96faeac321440b6198e7e323e935c184c6a0e9c34971bf7dabab36b0db54281bd0d459668935d95d643a106066c39486811291a4d8f6a619b813f25c5e1c6dcfa70cdeb9d57e86af60ec027277daeee6161890857f2bc02f3c39bb048e9f770c95fefb3b8a90abae1b8839e870ee4939f22d66d3c0638644b476e148015fcc890a353f7a1d1ea0ffe099172106603be8a1cba52e314070e09d6615954acfe69b804a0bf4017b2f0b7c893aba8cf32f88a16dbbe3463508897381c88abf824ddaa4a7f117dc287e673bf3052398f99c807dae1b9173d3c5b5b3546a96f3f97abcd3d97f7401c93789bb4116eaaef61b6692e754c74e8f30ebf9487c287ca7e5b88a59178716bfe2e9570de07e337b24a18db3f7d33ad9c29291f89dddbe102754549149cf8f8f090cabb3e26ccafb30d7ca9e6563cd45f34039cf10153cb4b826bf2c96cbd0b9027a25cd9d14d9f8d86fd5f13df77a565b8b4d46a37d7d2800a626857efa8ec067a861d58134e4e673e04c76d1fcd68d63da48f9a864f3cc9939173682ea2e27b11dcc463f1b7056abbf7a79d1e2464da493b9529f6a3524fa762dba12f913617750d1aa175700cbe8740c84ae466e29766e1adc08fbb5c3acd3c67acfc5f31012d82e7bba661ab8a2a45f21d7a792a381bfea1075a7fa2b28e87e1319df21862c1a2f3588c732af62a70ecbde74784e3f0fa37a55ed86bde70ac0fd718343661bad40521308cd02c112880d433b638c16e3d3843a3ac01e6fd11b947770bd2279f82e7be9995e65166d4740767b08df91c2f6b8832e5aaf3bd1fa929c26133dbf8135fd6cf77b490b2de9100891cccb383399a1d1269af2d373ea624ff1da2a64eef3611db18820f7cad9f67a4e13e1929c18ba94b2258bbf3d777e0382767b0277e3419c46298f64ca966e3bde92850983107d5e6f6ecc57950e5067467ca200e272093923c3d6eaa3aad1dde1bd58358efd649eacfb5755213b83ebcc5131e8855c32a4e8dbb9f1fc83ebd0e5f8cd8ef65c0ac5f94f9f10586b82f172989d41f6de684ff3f58b032bbdf6a569d9477e7f98da64e2d01611a13ac828d7b75685ad84f49ad395dc96c7b59ccbcbd3689c81504e1be8115ee19215ede26a31f02c1fec722606312145470748c4ba8ba361820ef02b77a7cc08b1794eceb89cfcbdd4715b721a5beb67203f752084468a5618214b441ff80fef85f1754e315cdea351c03aff7e7aada4e9aacc5fd7a87ff2aa23b9d65f967d0e660afbd1630608852e357b2eb111fa6719f598e3133616bfcea2e652a4e7a5fdf8223cf8dc0d2cdba06da6a040b63426278c755ac553c125ec1b4b599e701d36a2d3d334fae69e0f7eb547c4abdbed7a98fbec177c9611cd88f9435b8ac445410c9c39164e36eea91fc8d93c5107a8dcf4a067a997818b0f2bd978c91858a0857be7e90d54628120e9f4c557eeade8b5b1366291a49a9f635b185622c5b1d1aca7536d9a9bee181f83e5b6a7c3531fad551a77603235b1728d426618f1443b0ee54b314e835df5ed640807bc7d7bc01c56b91085bf0773b548e412fc49a45f34dc4bce89b926cd2310d843068bac7c9b4cbec882a9745893f48a074d3d36b0a6e2e1bfdc9bdce05900d2e3066c4997a2ad8809d78000d2a736809d9c2a9fc1dd9f896fc7a9d4d1e7ba84824c9df7c3badfa15f04e131746785845059b034256178cf68db61c33467a4698b39af2b634c7997228b3b8aa04d47e1ca266c883dbaf5002578621c6a4164fe886e0e4908eff1d60eeb0d7108c1144555529e208d429ae8403f1955061d62bfe44a39f5271ddefa7ea4c588f07b611bac8ee38196a0e0d4238005e17a44342a296eb0a4404ea750fc38f23709d4c4c11a3bcb2fdc4e4d4069fba656496e3fc9e24c10dae70ad1860228120fb755a5f238d9c38fe0c366d96e027927e5e41c2b9952c90d7dcaf4061ae2b3877b868b1b82f94b26267893fbaa24fceaf26e2faba92357b08717656db1094512e8dffaa9831af0872ff67b23c8d3bff3d13500e6ac2e3b689578cc096efc454661da6b28a3af22376fc572ee34af20e714f126491ce3e2aa2b579e85af4c42a688fe53157f267e9b686e21b76817ce49302b066f75d4ebd9bb3c334efc79bb97c0c448fc703154379c38ee1bed9e267eb53b27a63181c58bb7bf40e1c0f51ebe9bc4c34a212041909dee6e883fb2b81c06ba10a9ea6afe44b3293ddaa74efa7f9c68489b0ca3d54acfd6f998c8f5f195c72057d71b10f479303290962a07cd4f25374f4b9d0c7daab49b35aa33c8717058f643ba1de456bdb143dfa0938005c1d8aa5de84cfaa954ee939948eaaa96204ea48acf9d758366b8d57176ae78426c2949eb0da6def6cdc0589b01682d0e4a1ac3838404450928a9700ca4c530e1a2998e7d083529d469fc72c14036c018423fdbd473dcc3666825abe7b7624a92099bf09a84727bc0ddd55a92a1d0f462ad4045e41b918119a99fd1c90b1035a205c318b9eee9455a8dfd788592c14a6befaeaa38e7cd0e91518a89f72c5982b02b815f51c3f406effed765208f7222a29ded614964e9bc6c14785d1897a8a23aef693d08903d412fa4e598ea147e2d851c8f13ac1f721b1856db9393d98814a0d5dd5a34d02f746814caac48be4fcba1fff639c783e0bb149d36f5ff7e627a9053700f6d00452147c2d8e7c2e9617d87bcd53c221ed01cff5c2cdcc1d2d21477fca3f5279d18d83d33a2f3ff225db384e78e93526caaa127280fb0719351a2d6460b83db2304f9b6ebbb5943f58f2e47e494f7ced9eaf82a655229851c6b8619a3f9341e3eb406535f848047df801e4f588aa1fe030b7277a8b6a082fa8a3ed0baff9e672c809e811380e1614cdb33e997d25a7654a6b0ad669fade19a284d89dfa12b3c890522de8c532526c9fadfc5470e59be6b27332a336fba2797e032b3a6705304d0ac23aa4e5da40ed369a260da81583ca3176a7c73b94ddb602c7edc93dfbe5690002192be12f69005a20c2ac6edbe8798f1d722cc0ee1638f7792632c51b5b8538bad2670158540bd2e7da180a5f505b940f9ab80c30d56724c0df5d478e19077c916b3e8c7d89786798753bc4ca46d808f427556983a2ab53451f320a7ba759922fee9accc891ade1db9cfce3444f58b27622ea1d0f066c4ab0ee99580b8ee1423d6262075ff31408575643b1f4f5435b3b925f71fb8812d2a8547a776555095663d07e866a3713a3b5abf87403bf01cbeb7f9cad70b105b3d55abdb0b3843894483fd59112e6147c9ca304759935faca2ff188199507adb5e0074a4b1aa4d5c695b7516f7e877e59b5474dfcdce09620aff10dfd931473a071640990c43c4ab2f141d96ad8a2b903a89ebc51f7473e94128612a09160bd3b2f77e2c7d9d4fe2105e356c845bf2d421cb039bb10f358f000b9804bb871f44fc34abe3780f459da79a7aed2ef6742ddba86ad83506a4efa23913d4630d181a4d4e58329e225c3a7f495cad0fe21609e2927fef2de36867b201632d92008ca020b4e1be527eea44e1eb4920a9a76ef4b119b164ee3de6a3aa250474cb09c3931108f6cb376d86498a00ceec7e9ed57ad1cebdbdf86eb60014f4865e60a1735f88ab060dbf76a6b4d22a5c751160e008cf01e37eff0e4d296cf0572f05301252122b7dea4d42c22354b8803ee476152b0353c11c4485127c2cb8f57b2b6e073727faecd5832a6ef17c4bc8ce7a56fb6e0944e50a7b7bbc74debeffd74593e86b44a9c173d3c613bbd3449488457bf92e6b45bdee065a91affd62c4b7e64a2c6ae2a8aa39b17e46fed4438210c85d94f883f6ba2b779a388a0354e281700959b2ac87f59bceeb7f1709c90fec95946568fda8784741b3179f7af5e7e89559e6deecb8321e7e7632b0ee359c601f98d0ec22fb56c5e75dc55cded62341a8a45a4c4dc9ee3632a6f838ec29b63fd8d36deebe6ff42beac2b84ea96653213c712a872a3d98779e06363bae05fbc053eca30d0a76deedceba76e16536c60bc368ee2c0c73bf57131c83258e6acb96033d06b3b1906590058d67b19cc81a65cfc40b878f1cd1693442458317b8b425896d0f6f2e4d269721b4214baa8abec3c44b09360c896d02642023d0d48033f338c523bbdb1d907795d739fc290f31aa53467dc42f59e0c7452e749b4f41c983a3fdfa16628241c5f46f086fa2b5f18ddf4ecf9e41fedb3c39d5de4ed28de36b5d7fe90b3f0ba8e6afd412f2722face2cadc7540eef8cab5c4beb76818c52ffec7b38706eb2a347e3abee04141cc924dc8781538a0c82de87831a6739c77fdc265414aa5d15e82d12777f6b88c2d60334a9a1601f20d7328c6d701fdb826eb5ad8a1aa449c2902a3e8a7dce4abc28517b3cafe294d09391b23277062f642573c744d2c7f960a325b00b709423b1c7f8fa673441b2c6bfe242fab784ff16aefcbdaac57b37982a05b123de25db49bcdef953b7e441aa630d84ecb702113f113ad7e67a29c9122bb487fa51e93a2d0eedbf27c035092385f9c031ffe62e8854145c1d79377875b1197ab750480805c50b960cd79bd1da2f903ef0179a1e998171967a4b0f0c69c11cd48364aa0c78ea22c42a857e637768b945528884a9199f3bcb2277174d9865a5db8513770f2f831992a8514685a1395c1f7fd80e97b1b759444085b903a7a49cd9e6e817d9d29bd848afc45c0000a862129e929faf08d0b349fafe5cf54187e914cd68f2320837472e6664269b3dc0b167d83b9ebac7f23121786967ec0c1475d5631d70e279614e8cf6bc0d2000863266545d75819525bb16e34e44b0b0552663cf8efab0ce20d5a986517a55f004cd563b7f8bc91b72396e63355a09d652e5083a43f665af7dc4ce3fadd304b6416b81b42a485d00e093721fa711bf26129b0accc5cec9c37e0343495781f3fa45f22de8e51404ed78b16a402bd199479d2eb2ac9be8a4b32e7a50cbd7edeb63194ca3fe3857858a417b9eed4a0260e2fb8848034daebe2692123dedb67eb399c45f2b1fab79a97e43da554f8b0cdc9e358f14f86486dfc5b4b151d97b9b15454e150c73c7e2387286b4d98e7658d524512d5db467dace389b40d5b4aeaed70fc054902113fbfa0d13f370d1934c131b5a496d5fde1154264fa811a9d71ec29e2106fd52182ab6f8f17d63406b515d2c55ca8a2051933938d9cf4ddd7f539e9b79129c2d5cd836da283cfa0585d07dff4c9afd1f49c84515409fd17b2db533add060b5db696e405cc1167c45692f393b46a00e854e183f658cffe4a96aac487d2fd89083c7529d26c3f5332ba0d85a884cc4047ae6ebf1d2c5d6d08fbda0a7b29d62744efcee15df36c065dcb131a89065ee29259ba92102f40edb57aef916f523e6ab6492a96f2f225f5b8324a4eaf89906c3aff4ba989d218e4e26c51f5eeec84c7bec11ea75c090b95d468297ea6bf0f41b3f79861e4c523e71278b7a4744947c2d0eff1bed3787b8b24d52746e8f73a079feb3767bb791068b7f877298a08f5e08f4e6a3a03f1043a4c11ca23f0c29f3241429f07685e5cee65942701ba9c2db56c34dea567e324279ca6989258b1bd366a8635dd85e577ec8db42da960834d95da6bd58d69cf59e7a8fbf91e7b44f2985e2ea2669ecedfe7a2d111ad264ed4167c3bd55ea42613def39a9224f2ecfdecaeb45b1f1d4b136447837969766f6fcba42d54958187f0820efaca423a2a3d87debfc6838c1ab0f6de43ab8acb656f19e4c8d9ce9c556e754da527f2cb7d101e60998b20559e26f3f98a4e7dbfb15075d096eb665f2eec3d522221b321663404d6ea0f622445e4000bdfc8aeadd3c283ea0ffff94465082e9eea4e1fd66607cf9429c9e552b2768f97acb0ba206d23b8839c8e03e6a830ed96661375450d19f33ac151167b646d172f898d1cb1bdf2784fe52bf2a058f4dedb4e086007cbd9043d492b7208cc261b25eeb442dc76cd67a15240521c07d296cfda937ca912c3771e39bf84756a30203d54ccc8fb07f2fb1a6c71beb435489a06c45b07738277c0501b83ca6bbf19bab8544d1bb7e231a73dac16750351c54cf263b5bd218b447465572eb0364b513f3955abb77da5d7f06d89c53183ede744256139fa2dade807d08506d27f8f754232e17f28c6c3746b3c9df460a07a1d0412256e3ae25aa0ff241db2ada20bd45837702dec2dbb858c2d513a8ef386d5013b28b91bfa222dced29998be38411ce5b99a3e8e0cfe89b7b23bfe08f794adc022f3a109df84dd0b6e814f60ccbfad7f2bb8276b0f2d0f826dc6b58b270415c54c1ecc810d033d194a5d4d41b9e8148910628f2f8e977570a27a07720c859b8528f2721e0d2ddc8d1895f8ed9a4ac0980a21cc2815fe6a1702de4a5a0279bd844c27683d4a5529eb3bb3f8a0e86850307b6e65013fa23bca016c24afc360da572815e56b6f29a398363fc3282eb141c6e6a0f0276623892e209bfcefa9cb90523f569024c60be8388ab1cedfc7c603dfce71e4271402c0a7e2e659a6301a7e1a1461eef5f98c5630cb9292246e1714ffa559b77cd3c080bbbae3b14fe0fde22329b0585b641b7c055b5ab3b26c14f38b0dc0e0852fdd37fe3b1c9a5956c66ae1f1ca72d1b049d84acc8289f65c403e266a2005fc82c954d3c5e98b5eec0476fb0f38b4d54897e96591a2ab6cb93943364d2f9e3f770575d0fde2fadd3b4894c2c453a4f2a7762dea4d238e81fd60a15f1927ffca7722097a35916f30aef352cdd3d3a9965775144d518db9d2b346d6f570a1c129fdaf8e342f6d6f15b1a53f909001595cd3054b03316993db556c628dc64578da84fe72932ddf60e90dde99af9b952a9294b720a07f1fd3086e41c2ac9c5b8d68a79f651bc37feb16fdf01f7f58e7a3f436fb43a99d48cde6685785c6657c8530d012c43282c7744c2c9a2f844a714bee145202831e5d0b01ce1e1a6fa420e6df88f92e7bee3e82e4f42d585302da88ecc74c1bd174c500c72a15ff0cfae138c15ca2e25c685d9d7dff3a186ff48bf17cca59cdf9232945b2e6dfa222bc25d192a5b0ae68739d2a739840ee3fa1fe0c0a980bb77ecbf250619ecbb2557a6767a00e92e104a285c06279c248469db93f32aac256e6b1a8a73fbc7a9df9b83e6195f1da08d5779fe5c6fe3ec5194a3601818d2e2aa586c4b0c9ca6cd393e81335d0f9f6a43f6554111da036d33c2a0d0953b99fb15fbdcf138c32f2d1b8ac7e7add716941c6fe4ac8d30a1af103dfa6ad35baa77969b93035e3a0dd36ec57e8973802b24ff094dc7383968bbd24bd8b63a40ac5e1481b809e8c7e6c71838cda216d38524d30db91a7bbcfd985f35623d33b148b879f6748b3d33630f032bddb9fe95cd9b82c34f2ebc830b4ea143c2862478268eac40ef12c5452bb515e5d5569391aa92f373388a645438e67ebc1d1a765bede795a75025e8c7e7c138b0de023c8ec5100e659bb6dcf82c67e0ea9e7f922346cc1c75c04d0e7f3e3953d220436453c51dbbe1a13b8b3790d9ae136a3fde98d84429f066119f37d9274e94c2a470a953c1e22e72a0d8d80c45d080ace2c4814c57a4626bf903b55f92113eedaac95817056b95356d2da547b22d798aeeaba7490d7511f68da2c279838318c8dfd728b8f03e5e132bf164ea28af452cedfbd3786f84463056e525cf018e6a7cca02e1df8b44d133618bde9caf3d2ebb661bcb8084b94840db32a80814197b30f3b34a33dd6335be9765db0650bf7a5fe275570b55fd614fa4f211ccc40d940de3502c5dee84d4db55e623d0121e723fe87041bee836d7853a8e29c51a50fd3b21434f04c690f4b324767da1fe405e8400745043474ef309246cb8991dcbfee135f27bd16e6dde6d8b7db2211a0e8655b2e94b427a2bfd04eaf686f0d666df27a8c7786bed05da3213638bf9707031db8738fb6287b73d9d15935a734b0ae73601280d7c4b3e2f2a4291cdd1084fa93e06c7284c78d8fafd2caafdc9869d5f36c87f04a99002277ca36d4350e89134a5b8ff99a855787e4bb7a5389b8f088f4f8633239cc5380851bb60b41f1a201b382348181d247e0fb03febd1916c34bfa7c1ac33fdf2c81bd014d3e7e6a6e2a621d10b6b53efd2f6544be49052270837690452fb731d99a822352ca54c92c11c854aae5bf3bd5c7b5e63f83f87c86b3ebbd48d45a75095f76ea6d5b6f9e8a4c78f149bb0a59704e5f70f8fa4d755471ec5bbc5d74192a34fddf034e296b072ed64b938321084b27e46d81189ebd8831db040627ae8ecabfa979ab3f1cbf015d72fc1efa9dd8c4e8c7445e6b46a580784a4ecccf64464963ec32cb8aa3fb274cd16b227dcb3b7c058a8df76edfddebb9bc8456b13fe054a64892eadd69bfd7716411647943b0ef02a0b2c2afe4c7187a945d5a899bed4b0b31229f93d86da06fcd974b9991d98c64ac5b668aefe1953f84324e94f2bdbb07586a504a7a94f09c50655e4b3005d2bfffd0599c4bcde07cee9b897feee2133f00d2836dcab6768baef4030aa8c660592db9f26092dc98b745f1b1b6eafae1f6ecd3cf7a336270b23bdbd05456aba3e4b880e7545fae1c732ced5db67158b5e35f168afc6ef99db489754cb4d4261bc722cdaf03fca2fa34f5e6c41b1c8bfd68d9f35c60b80c4be70a68eea8bbb64694fee89fec146b90815366ab413715271c0ff29a43b91b09de512f2cac47eca2b2af7a506911689dcca7f579b57b84d15153bceb11ec96661ed0209d4c3339bec4a6fb67278e1a709b760b9604344b7acd378ac567bd1edf0d19e596e4f81e093f87d42a93e4f197524021a6aa0be981d43e149f91b504d34d9106c012f10a0087c49d313ab09e90a588c012135cdf850ad9b2f04c7ef8f144c7dcaf62c89e3331efcf01887b71fae9d27f7edcc1ae02d59d1e6dd4556ba777410f9b30e94b1fc26be22209901c14b39fb83362b4c579c8ea9f4ee5d2cd64797ee83a29dd8134bdbb6ef93aa8dd9c8752f2d641b0c6685954be39dd91aec6bfe42f02aa0fe1008860de2d982066e0d99ec7ddf640214d0b6e03b5480c702cbf132c6b2e1adb11b6fea805ae9128902ed59fc10ced569653990827a19dc234fb7e68fa4268efd6cde76537fa759318fb99f315d212e6d2c668242766d0054df9a87d2673849fce31bd9e2ae83846e9c44e5a42f24b4290e85df02b244dc9f63e03d1863df85b6696d3ab550473b4811d754deefa010a4f1ddce4b9565170bc3d22fe800e2ea34e41ec155ceb925c8d6ba1466035ee9e6bfb778a4879a5aa0e7b886caa60b217d3e7498498ea2ebf5d3354cc4d523e8f85e5b0595f0a94d67b7da6946bd20d2995db8e419fac935d8f1902481cbbab5e1b8119ca6395b97671c7f01e5adeaa5912b31d04e79f8aa771612c5244feaf7a9b3216560c878e1a9fcf1762ede31406c8e29816f72f5f2dc2b045735c87a565939d2894a06c8d2334176efaab9bd4e3270e622044f89b60f19ae013d9e337cf8316e30ed5b12130fd15794dfa45575ebb8b1d995777c9e16c658ecc338dd0e8e823b81cf30204b4596dc8e5708c35da04ed2ceab529651fb1c4a404f0040b7241682a57aebb823db764c059a4ecdaf591a912bcd489f78c602cb24695d231dc0d48ac476f6a343db5bf1202edc3c131c03361584c15eba7d5f25c09ab74fe86da49d0449b7a9524c2c11089d1cd730f3f408b657259cc02a1d9e3d69778dc1306e01907d9891f937d1f5e56f7468afe5d25036cedc2131d4237fc35f03a350131aff8e9aff25dfa331e5de2a4eb537fa8657bd714eb5b68459107902c4593c1d91df2726562bad9836281b581188713bf86272c9e420f741a79888dd22792d56b9e982ab046c0a1fc708c58025a705af10bc7d5d04299b13f561187586c9cdc77b65c8b071b09f3ecccb042bf2da9a5fb7ac07b5179a4b022bb150545613c177c09a20be05bf13ff2ebaffe0e0ebd851d379385a8639ae1731d15801fc1db46e6ed1b35c28600f6ad31ddf2757a0698f4d6c37d3b8cf6d59ef095904deb04cb56e52a812425d3b86a43ccb88bfc3f2210ecd2da814232fd14ea07be666933153a9652868bb7c3e5b895eec8c801a1e0dfde4416204ff9d8534e0e52efa900c5006525be7fb86c1f16bcd6aba026e925d01f89c88ee295e7f8a0fc064046d85b56c6068166a426b5130cf6c9bad86f919045265a23c6a1bc739763310ebf34389c5d8787d717ae582c2ad1ab5ea2cf947ed3bc539558a7c63285d67bb17eaefd4f802b2a576f4d68c07af9d931f263af1a4f9e4d4a151285d3e0b83ecf01a309fed263f15e379e778e91c1dbab63d651e10d4e9fb8887c8bd65cab02cde4aaff18c8c46551ed1c04d4f3ec1b4153922d71b16fc3672f3038984e01602494414d2bd7cf0ee91c40813205bb207a6e21823ac05470ec75e82cb8296dcf699ce064a683d6567a21a67d246bc183ecf00f00aacebef0aef90ed8a49342b9036b12d627518cc48bb9a8793a8a91adefa5a5294010e1fb35351ebcfc0022a5988b53221cc554d1a430e0d5d2e69e0718eb9e4ca94b7fd8f596924a1cf4802d8f8a1bd90553c1264a23ca439c046937ff3e551b34d2db1286a9f41085e4dda95ec3f75b5f91440ae3fecf22e46865b8e90a63f5714ba6406efbcea0c555adb19cd55039a9e27028184e89f44a8725f28cfc457bfd2a43eaf4e89c6b69cb72ceb04ac0e472dbb7e63d8f75483ce52c8d4170640f26d3466adf1cb7e0d1cacf794f70c3fc28f19dcdfa3e0b9f4a16ebd1bd135a2f8cfb205883e4db919bb81619a103c3e15aa89457a4e6c759e070d6783631927dade6642c69fd620e3627d9487b606b2486852e1be3f63318ae979ee96367a759f849746f17b2d5b72fae9b8e250304461b0bed732df8d94be30f879dcb220344fa88f3890391b11cf690df43448839b6a6913505e96b14744c2d330dc3fd30df33294412c4368ea009931710405c7606a7d9a73cbcd99f12489523c1e465aa79209ef894c00dc900f709d57daefc43a6ad39b6900ea0b3b646cbcc52a2d7eac3417e83778d83ea803d898cd3e6e41d271535e598557d0cc0e525bf2895e07c1e143c674393358dde5b86cfbb9ea08cf87e52a6ce37ab04e292575ecc23fbd90a275d3671579f0d4bcf75f0ad2cbdfdab47149c9a1bd7266becc53db5d3a67c17e9555399612cf38907fba2212798f9b01df019a4787e0bed42f3de6e2b6cffc7e8c95114467bdaf6a37c56a005de0b975179b045e3fc0fe73367a35da1bbbe8a940db18a6de82e15107c70b24dd99dd19025e316d4fdbcea3c954f1cdd0f42d079a6f7544e0e5784dd70a2d066284aef3869449fc1ef9d46dd01142413f4274a0829851a6d6af19668fd4f62f5567d50e8c83739314e2bbd833fa4fc0cf6c657de19fd45526a86ea5186e91261c0bf96ffd75d8bb995d29edda5741d1e83ca7a59dcc25d83a981f11582024732138c320bfb0a0fb1533c7b3ad703ffdf278e320a0676db77847d4b23831d89fcab5da28bc7df2dcf02c3c32958c72ca55e9c0f7d0b8d37b4a7d3491a0ebd431814ce88fda23f6e59210307278f502c27a57e731170780ab1701e7b5799441b1adc3925d03ecd69e64a74d7c40f1166dc78affd65c9b9ccf469c9627a97546a7b5e3829b1e1eb78fccb93857d3c9d652a549b1ef87bd4e6f4116e9ed1ad60c9c037460511302c441330d9c0b1bc56bf97d5da5827fb5be146f378711b2ffba18fe3ed385cae0223b026c1fa1fe2cfdeab58f829a2ecb154538c6199a5b3779a10e0884412a00fc059f9e69206648b3aeb7a5f03c7b477b8b048d4691fcc771c19b9c1b8c1da97828746b23903a5fb6cce96799724e70176d3b52b7fd7df7c9ff0dc03f6f8b24be2be79bf5f962ba2eccb59f22438f8f127345de13e6c50faae3cd3d98f05abaf79662f58664c5a14237821336b826ec93258bf90355be573bf641dbcf1a73b04bf24c427fd84d5b1a93b78c7bd7fccfc30c736a2f504f17a5bfd2618cf2be51e1c50d4a875ee132df6bbed299aaf780caaf66fb3ee260960fc7e899768223e4e29a0dd547fd696cb944fead39390046cf96cd72d910da1da294ec4936d18bb075f6b3ab67bdce52cfa8dfe5038a006bfa4a0e98a7e4a3f485b0443a74e7dcfec36369938ea6f62c4a1ec9419ea8dd35745293355165a463e1a35a34d7cd0016f468975764c1ca42512f248bb39881ed6536c2117e9bc5b2def395ff078add402f8ea3bd931532db0d615889e963d2daf57f05f3d78fef28a32a5c62ad265dc49c5bf68ec0aa1741a63fcd04e912ba464ab4c3a50348080e59cf192671aa67e96459f89195895fba434eecc35aad20778f5d63edabcef9ac276b3313fa1de2f9af101190bab9f48f0c181b90e53aebb6ea034f94772aab4a368512f1f187b83aa407aa51d742bc082a24c33132c3054b832dee620e630530aea51e88fdf0d0f56cc6299e932da16cc5fa4d6fe84f557e8363a81e1981eea6b654bfa0c76112712ed5f83d96818a0504231f12afe7c397122de5923f8d50f376185d00f6e166f813bd7df689465e191026a3e2319237dd57140d84298e1260177c60713379b4d043052293148507f1118b40a7135899997b9f88bd7f8c1c35c10530bb2630e442e5354edade456cd52edb5d280041d114a557bf05e89056ba9b3d35a6760ede9622d56895908e750c8f9d642e9e56c893fec218230ca0a836ceabd7facc1b8a14216eda8ad1680ae05d59bc81959e6461ae6afce194c7faf381d77f7ecf60d1040b870b824adc1397c097cde98e218ec5dcd7d405280a3437dd4a93fb28e499ad07a96344a3f1787adfe0ff2e31e82f06b18f06586f733e4b0a8b7d397eafcc583e5b4a9a83b021d1e3bbba1725fa2d6d541cfca2120900772f22a3007aca504dd725284a921ff7e4f3b1666d13607242ed061cabb8d4620275986f18c43c0fd4fb8f651d7949e0fa38496bf8a220e4cda6d3d03a0add4d3603744748030def35d22269dbe033c55dda0b31807b446d55a50d7f19b02ba759023e9559df46dab783659d4c6ee78f53007f21cd45d3f424123b900e51c65ab4997fc01402eeb7a337e16737cc6c2425d22ea1a6a9d6608016e66de295b74c8ff1bd303e110d6e41151c3066a2ca6e1b799f1ad54f549bb2d9957d5d2605673231834da2b7ace6d946a0619f9709547c1d5af520de558c0182d02846a9b891e482567f079ad109b3f1f560ab5332bd92e5e89850ffe21bb73920d667c9d9b4ee0cc02e346287be173fa197527f4d93a3fad06d2d5901301b280bef862c6fb798f648c2f2b8d3ed4c582e6c5bc360bdf8849ada7e95bdb374741bdb6c7a82822a6977a30944bf7e9b63244990c67523d9aacf490d5a1b8c0b48d803e15c1bfdec8cd33941ad525a4c880995b73193ad8d94f621a05125a428cac9cdac7940102688e6ed629b9467a7f167b899abc3435e6b97ca0021e2e1122276a2977bfca31f84382533b88e8ef3c3c51afedd0ccd92573aacf5735a2c137967eb6807549e20a94f4a7da947b87a29ac23ae6e7633727f682f46ef966e71f7250ee8c852e9711eb5c50819c7cb8249a33b7007095d460ca8bbbd3c9d8d75c33775df63fd6c5a0cf2fc9cae17b1544b32ca0d50ce33562583b8200377736706258615835d10239b8c5901103e503858e1384ef0cc9ee9f3808e38eb2d068fe778ab51ce7bbb13f20d43fee84492759839edf8900b84499e27a5cd9dc630348fb74b5dec5e56733afd225dde325d5532c151d6d794cfbc4d0065a7c04ad7a0256acdff860eca8b9ae25de4990f9b1e4e01ccaf6e6e658b2894378dfdc2e519d2199b004494fda33b465e5cc2e333191682c74afca130fe586a8148fc3541e8be4d1c27cdf7d90345b08c8c00b70d8eb0cba8702a36165c050aaca164abd355108db83eca3f45f3dfa94f3efc9211c54465d9e9a03401ef56fd215dde2c83a7f162d70be27528ba31b80f385e7c2705fbd6c07d05a3d8fd74ca474711c139288853e158bea06ca164653443cd7d3798fca8c7f4028c83cf87f98526a671dd1efee83eeb05c8f8f0a0382627f19e29c4706255153ef6e9adb61345c1444557d27aa9578c60f5b4ef0cba4eac73e6e5d27f8dd1a962e9f4de299feee194438f8c251f9205773088e5d172129afb5e530a50b0a578156d8bac0925e84e3d756e9426d1581df1805c1c16e8dbb8300c5cb30c53384a008b965d7e2d9ad0e8e3da31a647129b77ee18da04a512cfbbfae616dafff2e7ca4afe3aaf406e2f3d94bcaccd0a2648b081a468c3301da74330da7ce33a3b171cb3a98bc5e5cb32e390fd4dc2a1feec4541e80e7a11660871b4212b4f8f7ba19ecc8098e7a519a383df835cae94004fdd36cd1352d153baed90a16c45831a4ef79f6ba83e07c148c48a3821b86c9638216939c172f74e845ecc4486eda080e6d0345305f29329e94f9703e409b02770b8e1155e020bbe306d6ef1c3706d1631d0911ef52ad1ba50cb11cbecc8e81ac04ca64a332c960b84c1809069f67242f6a0c0b6c10e4adc44e1fd7a821e9dd9ee82c1bf88161f9c49030908c1a6386dffe7c901b1c785f88c3965f7ee3355cbc204395ba5e82edb46da124313a94600124eb2e90c7d0a74f17a502a782e9b58067a1608d1cb4b2f45efa228a7272461f87d85551c5762ba3b4dc7fb6838f4e8808b61ad55e7ff000ce9c19fc4475bfa791b4a2c277e14303259d1520578eae3f9e021317963d1b765717790b33172325cd00758761aa8409d477617981704b23a215e7e85674aba162fcde3bd0ef1706b46c6c05152a75146bebe32693ccbbb08f5207bc11df072e7caca802806611e6c228e4cff4e98caf367b28bc010c5672e04701075ab4e47a2eb77503c4049a3280f68e4ca3703156dea590be5bb7c1e72f75525e839e9a20d39da3943e5316767b35a70f83570997ceebc981f6478499e76d8a263f04be9f25dfe24831ca1d2f0b66fd8d26f68bee71be11bb8333f4e7828006f2ef7fb8617fee8fa450e224c8dc1ac04a00e72ec781ad27df6515b97c9b6d575917781df44c5a2a1d1e23b3d047c1bddaa39178bf59397a422e6548a58c75f9ad498665e435933036fc1750d1e8ec3493719de03272d367a8319b091ef04a7c73e813169db64a30767d35724a3a0ac3191d64fbdd691b9e66313f9135415b4e5185b6a6ad38bfa94003f69ea5b59df7efe97f21fca6727cf08fcb67850a18edaaa4d99c8f4784194842e33c80e626316c7845092ca56891fbbfb7027ab503e903c8047eb06d380ee39c73e24836240e334c6f07fa006e6bdc438ae8a2dcccbed161cfb3bd143bd8a6833116783027fcc8c855a4c122046916bdcf8089eba3ddb80483e201c710250589934fad6ea27b819e81763e94cb283f80fd609c5c59d41c12c9702b10556285322304344c140912118ae2aec31307bb2f8d1f56b93f20622f18e4956a6c2fa9ff68cac952fd33eed3da70be578cb61e3c0703558cc4414ebbfab5dd4fc4cae853cd09c90dee6a7c57e8b6c9a +MD = cf6a0a4bf602fe6afc8f1957e4e12be0f0cbc2baeadb421a043947dc8a90a6f3 + +Len = 100024 +Msg = 4b4a5b6833ed987dcece2b695b7488a205b93858cde374b5c411f2647dd9ff50c22fceae8688103d1b40c4cca53951fecfc6d24abcc7b145411577245120e27cb8d6394d0cc7dc3fe1871f2b3d5458dd4cf9371954f256dbead111e367e198719608424eaff2250b896be38d0b0dc6cae41c10cd7bae8c00290f69aaa76348b7c28d94b85650122a79b4b9fbf7acc34afff5046f1b417b3b65952780f9f01bd4a62dd593e92acc231b2a487ce97876e7054ebc051bf44a14072cf26e45ce3952a8b0aee74fc87a7ed6953918c9ba08285eeddf9a630f2213759c727b7346c9b932ddc6bd727245c411bc33d77fbba195729a1633dbda2ac118ad50af6ba0f48fab7dc61c3970557c3668dfc2f3c067b7a91f09da6b9d8ba5582734121524e15e7b58550d8c09d12eac61e4e00e1485156c435f96fb9f6c489ed1c5ad591ab9ad09361c975387e163db6fec3ab6fe213821cdc1707329f6305074ac8720c9a305bfdfc2c27630afa12b5a9cd6d4c564a63286d66ebb8350e7d8d891a8507ac8ed041af096de4d607304e99ebe51b275e90536479bbbf5a4f59cc51a19d3754fed40b14e1c71251f5ecee69afa130d7c8904a5bbfc5cc717e00603f2e18f02618ddc6a835b180212ecf1173790041ea30c959adb9b8440d3327c59bf086e6926563e0e385bbc2a61a4d5441e8a0b2c10fc22de4f7f1ca9007268912a9757f1c5cfcf65142543e6350ee237f7ef0f81ebe0123abeb00d4ac5293171da9531e36781f736c0c0977eb6b381b769c8fa635d41cd73d0373d6b4bde3fc2780ae68733f21f4be3349e3a0b1a188b1c1cb31b8ea6bb542e1b9654ba19fa4babff5d2552acad6a268a42625dcc117cb9f322f0a59744a48064ff4d3963cad61c7a7e05eb370b5c31c9693dd34fd252e8562f2cca9cd02a6d1a5f9df04217297286316f27199fe8abf9fd14962dc5d5504bc215273ec7af9e46a08d0840490e56285eaa2edcd3d83d23e52fcded50cc9addc3f5e10491fbbbf0a965a9e5c84a706aedff27070ef38e4e09d6a118dd016d111a12237796d66b1e626dfab8fca86753c6b63a23b700478251513a35d33a72f1afb5131d3e0856dab3ec24414eefe4ebd21791b738c80fc7a5e7bfcc9a4051846a25d981f258252b842c4e0824e68e3bf769514bf8138f26ede258669adbb1d234ac9e281890801abd73a196e7570e4a1ef6a5685fa86ea611882f8a3ad23ae4f3908a9c1a760ead460a457200080b213004b395d5515550f92269c0e5ef95c1911ac4645ed378ee07396124d5c12ec613dca35ac2d4ec2a8ef7319000f86a71f49275084e6e65e5e9471e35d04c1f43b1c69e3f8efada3fb651ad83f4b660fd0640c41050117e99d27ea32c587085a0f009cccda18bc8945a76052029f1206cad6bda05ce826b12ab241991d4f408e3baef548b644f5d3363af62ef077152c6d35dde6f2f8ad3585d82a7edaea15116f6be5e013d0e4223b744ec79f7fd9d145f5cf9d4dbf15f74cfe076c64d3f08408cbf14b8958f1e6c407dca455f5fa95d39b153be3a7fb66de886ada71996d56a633a9c37d59b9a17e4a225dca85d1fa949a413b4b4fc804b92bb75157a6d5e9b65771e0663fa5e2a8dfa24c43bc0a700777c623fb12f6716b4c8f69ad88d4edb79bdc3aea97411b022cef0877e4fe86bab8367e699e111d735f557bd9bbf4b328756b2b60dd05bae8b66b0acdbd48bf1cdff4b31d4da2696ff8ac1072bc9fda9788814a6f9d8e62eb00a8dbcb915379bc53935a8cae24f59f9cf5bfef1730e47329c1107d45257377902af3e80dc95707b794ed4e3c1342a0b0c4e2c538723159edad060060759d2ce953dba97ef4d78d707bd3c883e7c101d88c119bacbe719a4897a39f7bf9206970d5fb9681606bbc22aab681f23cf14178cdd4b8f09ff5d2df2361a0f42aadbbcb03fc25a1b6842222b40e11236d73ce160c94c380716e91f5e2d8cb6574a5925c7025dd5c51d14e152a32ec7403992644caea41f8ed2c36413871654c81a89ba99d31241dbca39e5e7fdd7a808a01e8698b4d9aa65dbf5e25a6b41515bc1726470d86a07261aba183275651b58b2e7308b02754356da87837a019415d9e81c099239ec8d6eb29e607b345f8af617f54b6ec1005127777f2dbd72970809369092481f213c7a3deda709624d5cab7850bd8918003ca159e7ca69e6d292b554d5e8dab28f7c1461afd42526b7f93f7d01702430ff6b8c29c641c784ce1ca3e9f3f19019c0b602c6edcf17a826c97acd0f4a87318448b08e257a1f75120c9c9ef397b27d3c500d15af802711223424118235fa42183ad4310b5db9e126cc681bdcc1870589b4fdf6fbcf9d8931a204f06218c48b42a9c2b980d2dcef93c2cf07b65758da31489a10dba4c037dd7be313b8da2e358afd40cf8dc1d1c7e058990a8a406d23bc76ac0c56e7d944ad2789218b658068789f171b3812e19295f58dcd5f660e09b0a5fa91748030d7290ebec3e4a0024b95f50f448bad51783b0075f83db083b4973c4d483e570d19da984aa1ca73fb076868eff38e7a6ca059e317332c06134bf8a56dd9bb54b832472ef46245c6b5c3796181cf4862793377053b24355008f65c4722ebf4607849f93685af5d8176a851468b81c14bbf581dceab765f76a8df4a8a3426ef619786761ac62f1b8d87de7780d6b0011f8738d4a62ecfb3613c2b4ad66a34b6415b1248407c8b86d0308c73782a0511c419fa23f58bd837f70b05e4938dba51e60d15f612726aa733b8dbce954e28f824bdc893238b38f5215f93a1296563c63af4b609f66f75849e69f20f3e0cc0be25bbc7ab98f697f5c87efd0801bad41f235a1e08563a5427fa89fabedd2a756cb15a21f3bd949f3ed2b16ca28154b8648b85757b999cae982d611a64d971f108afe4fef3f82cf6d7294008f512fbb59b59bee2eb275d2bdd21397b889aa9d99d069f8534b28844cbb373f88b1d7673ce754d8ddf68457400bc5944b2889ad830a0d4df3d546e321f5a9265ec088e9b04c67a9fdfc41b3109e8089e6a0b0b94cb64ca339644a767dd04e4769e3c0bd546368d4073a3a909fe8c8fb1398bc6b5753acbaac8ecfb8c0d9bb2542b22b5c89baccd97246db5a5e99036a4a67091e4370a1d6c5ab33149b50644261b21531d0b1184cd798a08add1db459f3a2235c918bc09a0d4001345df2de215f4a0af7c9e4bf809fb626ac8bf5704cc7b097a0b2039d76fbf3d672992f8d44940098f8b5d437174305da39ebaebbb51f38d27525767cf00a1d1f69cd74f61e986c3bcf54fe13936a2e47ad8ca7fb1562a170648c62f397c05248847b51ad31d4f36fe607c0e9776d95db81ef7fc2f04a70ddd9374795c0a709ee5d23441700f22ca1c75edb0d25c5c3225174a487d82f2d975db692e81d36ca7d4e45cac81e487e7e0dba9b03312b3c9896cca4ce3f993e196c9ae34f0fe80a71e2536444dc706f5103ab8f702bd668cacc580f0a991128f07044a75f1b435068b3fc9ef1ede285c753c236c8788fde156c8721d1671f84a923545d8cc1d112ce3d71d963a517484d787f1f6099901324e20aab973c2cd79fd04a844c8609e81ee983b22ea4973d6fec32a7fd218fae65d7330ad08ab178611187aa32ea6646e74272a7976eeabb8b199d7ee282e6e654b6a0ae21d5560d8961ac3dc4616ea593c2ff2852667a693bab0ff2b5403e717e0ac423ffae82fd754b18bd758d9b8ab0f569c2c42ddecd0dfb2aa1d9dbeec64e3e2e0abe78b0deb1386db7cac1656cdb5442f58117703d5e944e0ae4d8706b41eb3ea102b66817c9a41bab38af64d25f6a2b3f0dc5e750c9f10aac5ab88bb6f57c86a550fa213f2b289316439a1231d9a1831dcebb9cadbcbbe0f4afee696fd57c86762db674bb523064777023e631c684daf0486b188ac33f618268fcc1cc6e65cea1fd7dcb22db56104d42df5928929ea3850f56e39e6a05fcc3fa660d733cb2cfa744a2acfc32f42706302f03acea596d1a87f1764f1dba1337e8aca4eaad0df9f497e782add5b50940dc854e252a4fa84f46ed49235a96555cb85330994bb1de186b9ef4ce5ff3477b8c94c137deebe581c08cf4a1ad5533b0fddc3915a5590c91344b7bc41e496214d4bfd54b74a895608962d14082512ec30dba16d6266de5ed867f7025bd21c9bb597922d68820384a05f197867634b7018c7f62516b6afa9bd69d8a7999171ecd6f53126f85cd5eccdadb9ff9f55a5d0ade9e942dd0cacb0ab94813265e83b1c9aac03c8d0a1a79675c6353018c4c913d988a34b1e327c7d882e1a2b26a02334e8062f9a5619208881f3b6943a775e4183ee4bc843eec8183e80cd1b4381d03ba749dd25f38be9ccda7c64b16e380d6393610a41b3093887b3d2c0892653eb39c1be37ef0fc0aa6a66a966121acd7e7ff02a083fd64b73d4d16c1bfd36de1b371dad628213810a680fc2e53ca8ff58a084916c49147b22077e9507ffdbea093ba35e89666594b1d0bc0e08b97e9643cb36dd5fe8d563ec26a496ac187d3e5c503b18d2216fc148aa55d6f80f065ae90aee5808a381c97a3b2ab731cf84a3bd7bcd25653d98d277fcc162dcc9a613ef64944890028076734df840bead59e1d4c641cb6b42478de5d0eafadd6cc88800e211f61e8d3a328065f6797d3962c048387f530cb6e6bc3b2db7e62382d382c28a4baadbcd18c4498a0caa94fb0808c2d970056f23dc25201c106dd5932fc9dd662bacee4980f675c4221a2b7bb380e9b2fa28bd1091913da3ddd91b254325fa7e99438089db8ead1b20126b42ccf166ca06061d066dc73acd06701ec2795ec1d87eb8b91692559898eeda7bd7b923e02a7de5b88cd891be9f747b06f1383bd97ec053c0770b13df4274ba84c2e4de00d8450eb62a3ab571230d41fb3be985eb78495cbe34b09029229bfaae8cb3ea6ede48c93e68fbfcfc60ba0c2426f2049eccff1bdad6e8931f3e49e120bc900ed1446c5d78cf832e075e6422a93cbc809b84ccd83de41ae669a067b803dae213d1109b148de63a133926f1ccb305afc189a897da0ee6b04fae50dec77e6e11c2174cbc34a53589723bbf4b526a08338e113e486a7665119796549456ba0185e14bffb706e745d615b43158fcf5cdb1b1db50c6d09de8a586cbb673addf1aa538153274d27c9d8ac24d8502127cdc8ff08ee5fb54aaf7d4e3f27e62141442db911becdae08cc60e42aec22fdb29be3714d206ce3ec61a0678b6b248d281008fb20835d3773e46c95d7ef0c9a022fa0fe551ba27d518daa30bbc5c0f304fdc2764821547e0baa722da6618b7a98f18812ab009ee62c9be1365af839e76a65e0c6f31951c64297083830d40e13e99a0f4ad9afb0b2d004fbe4e3530ddecad0fa69bbfbc3b49b32a531e1c732fa7681bd034b599677ee6130d8df66ab4d98d765db0d1938cd77f5cf9743ab6892b23117c88a9eae89da39466ec9c390b876d1c9a751220f758b68edf4d1013d714f20862711ff677d15e5a3231cca5ca3c7687c3b3276d65127f496c71459101a8fe8ae9b6bfc6fd643febda2530b7d941d0414232bb82bc4e031308a78238ef306f1e79213061609c6fd1c490707620dea2d27dba7465e65469771bb86f118af36d4d7a781bcf8ac216945a3a34eb885a14c0de13fa20c96cdafa0d6db323b83b1f9d54842719611d5bba03ea231cf7ff5095cb04f6bb4fde7e26478cf777624ead98700dfd46cff767cd266ae51356137bd8ae57103c5ff17c822fdde213717540c634db445ebb9662552d8023d88edfc012eed2efade0effd962e2a1d01cbf800ae09b5a56a0c4373d87ff5857185ab45caf33e3c15bc1e28ebad394f495a1f14d85864c871ac46c2e08490b2e825bf328825629e7ddac7260812d321f10432a4cc87b1547b82e778f4a41b53455562b0d5ec08beec22311e75c6c03b03b378da130061f291766ebd9d475c0f8efcdde737b0f6436a7ca639bb32c844864e3adc34293f49b97022b861d51d8fcd0478fe38d9f5d600d06c9f61bdb3e583bdc0d2b76c1202fd584d92cbb6247a09547b1d60cfcd1fb406cc77efce48c501e852e52530a1c465163572605239794bd42e6e36fa46c590060ee9eecf508d08b7383c04dcb538f8932281aa1226349a6cd91642c328719cb87a1fe52794e4a112b901dfda1605beb55ee7305cb252fe04c3400c903acadf05583e5c3ed973d2e11f593b918cd4bf6530cb7a99a47c7f8435121dca457961d3ef71db7ceae1a50cb06ea269df4d048cdf551132c55926d477b4fcda11252a0c88deeb498ed7227bb5689bcad6179410b4af7c8ddd92faddd14f3126667743966bad130d8cfd5016756faf1c3bdb77dbf7fe4314b4ce03858b0b45180c17b35be007dc30adfa37c63aa964c7d440b6d3f06def2e11b64ab5ec0fbf17caac82412f14cd1ab977df714a4145336aef58e2e6210742bdf1d6563d84278a6adeb8329ffb6e33781b5100ee5dd7c9c48f65ef234513ba8128b04ec79106dbb2575e1579e547e4b18f945c6e26a4efacc9e6e1edff9bfd2303de87cf5fe2716bbc7cd106f9e1932e7ab06b12c3330ee845e2a28d7728736b296ae7a01646b45db818508b60c3aab585ae17225c0c8f41aa61194bd7418423435b5881ddb70c4ff13c795341758f0f589547e51bb8d87fa16b2e6e446f9811f8bac1b9dcbfe10a0fef34a5c580ac049a6de3a426be536ad109c940e83917fff18e09913ce59b57bb3a69c8136b675bf33ed2a7a5a667c9e342d207eb2769b3d6df1a5125b1a2fc9d23000555be2ade0d11fe36c1f97b667e1f310c75c1f6f54eb6db41beac5fc15cb5e2a4b0025c538ded4e99a13df9074ba6cf97ac90278f011a34a8305d3870a0f5f5ed4ebe64831edbaa176ffd4875f1e192efbb1b624798130dd0a24d96cf13ed2227577aac3666e2fafa50bed07819d8635ec8ea10e7bba94eff3d02e2a85ba4529cf3be9b330d0a26886e0af9d76b922b2afc869a3511e5e07e290682c120226b9248139944bc5b170af1682b5c8e17d09c7e7666fa43cea9958de1e0e20b70565281000e2f1bdeb3c70161cecd2b6f3cfc7742defdf86c928b911962d5c395fc24c40e62bdd19ae309c47c4af3e9a355920e736908d9c883aa5f387261f199444f39c3feb6879790166541079671b905a56c906ee18ee965381cc6774d3d85151d0aaa48e2e4dea0380a386e7e6abc327fb8215751bed81e7ef349d9624e6059d45c48a9099176fdb4dceae5727db1c6661baf8b20119b98c40a4bff68cd32f7bd5a278af235678dd502ded53c52a2a8a3bdc17216313cb952895353276103d72029ce516679ba3ae2a49ca7a29096c07ec5df74fbc3c26b6f99ea3c66b3dce145f4c5682d0576ea22ecadc16de096f63e5b91f99672369564629622ef6bc4fd73e195350f80a387de00988d65e9a9322da96069b0e39f1f7a0be26d8830c413f418c522d4924af85f08e5715154d75c91d4d32c11c105f0f6bc5386faaae30b0ec2dd9543e47225ea2d1dd7fac8285cb30773aa81b271f2239f73d30c8229cd0a0765f8251e23f6ca96c72629eea51adb68c64cc85ee90c48d9c9bd88609e41300ee6b242e86553456d6bc6a46e557f511f5678ad6f7826ac95ddad34eb4b50c700e82b62e84124a5d7911f33ef41715c55ab97fa8a232998f93809dacc37e01904f1cb4dc9be5130fec299a0196fd945324b127559f4fb542d613a40ab6ada6c438bfaca31e5c22f0a859cb295e9a055ddc04fe784f285285ae0a92f2eed2709e53d20a3c9bd60e9236390300bb7acd17f92b817b325af5ca83ebd6e00c7ad38118fa59e384e11a86fe3dde322dfe7043f47b4cf8d9662373e02ddc7c7005640ef0af18426a0beb2198deb93836b38354669aad5ba4c840245b473002ca1096ba8356c1c3dbc505147e92207d66286abbb8004f2e34ffe06e4dde6e2d6b1aeff64997f3022a9adca2280eb09c2cdbbafc71229eeb0a8b98844049e356e382c454abc9086806fbf68d1d9ac5fefb3be8992a98191c85e9cd38cb103c19b3f6d85832809e8fd176c727c7cced2061c778143cc74a3d4798e2ee56c7d4d06cc58073665501c41a79e2f4df2ba2aaf11cedf03046aeb7b0279e077be74a356ead5128cf9cfeaf52a3ce86ac2d72f9198abeaf9d7cb3266004432692e5089349eccefad6eec1cc1a52ee6fb748ca955bcf6eb4ecfff403c7bd76ce44579c848f225e7c04c11784c225c6e2991435fa282972a29746edda67c1ad60f89572839edc840ee19a5c83fa8aecb1ba0631a21f476efb34d81d14c09f5b713845270b0979e425e5f10d241400c43fb2954a27a197c8213e29ee3d52d505917bed36a54f98d3739a5b95ffbf15e20eeb47dbf54f98f2a72bb2fddeaed130244be40dcce1a7e65a6740a3615c38ca81eca4839579d9831f8619a85325326fbc20c038fc5035a15ce536a2136be7e24b3f21cd72c0c80ddcc5b49a45666718cb830824be2ba0790d8ca41e606eb1cdbd5b561627b4e2d771731a201fd2edcfc4eb227d7cd496f1bed61f84e2f514f17aa9a80a3eb6c8946006c0f66d0b45095ae1b59fd2db7780135a1f52156f8fd1e5d29df5f256d7b94b093f69976ffb39dfdf37f83aa0d0c88d711a12726e90f3a14eae761d159eaa74f2ec1639817ef5d66c00332ed5212fafc3a6427442b6eb0f76600709639c0c904c5d78cde05ea1d0f0c4cd29e8e729dcba2a7eb5bc600cb302493531c14e43ff7e1a0dcefd08e25205ec22b65ca14ba6dd3d03911c3afd2e4ac06d30cf23e545109841b7480c1bcc23fcd04e80de098095549da0e29620c3e87c3b80edbb64f3ac6eb10141e6d2b1c36d527d25fbe81c8ae7896fb0001c2633c30cac9d83477d99f3d8478b179bb58cb425ac9c896bbd268c7348051733d7e53b7d0e6f0a016571ce23f4841cdb19b867c667551508f4e0a9d7e4423a2c2b555bf940c2ce272dbc543092bd7515810f0eb138001d445641d613af07e759c30c9afdce492e2d38e23c6aac979edf7dc90f8288fe10a253e287d312b6ad4111837f171162d898398bdd4e9cb3289d52aee096f4df7da7701b3582b9ef0a76b9527ec1b4902bdc9201bd68fd9070d3b209388ae5f4d2d82d8475af0f117d6f0ce2208a1251b67ec4ec632649a026171e606dbae70ebe98fe96beb47cbe84ae9ecafadcd547f70354b455230b72a6dbfa5cf6c3726d7f8e65ca773f9d469e99d165743657b36beec3f209cbbd7871a6d8577a111291b40cf5a835acfb5a49c5675a1323245493b5952e07acda3224ec2ad85e40322bfab920b88088e16a14c5a3115e3fc57bfcdc3aa0c532dc302f20746819cd6b9c92076963de6019e67dff3713bbc8b5ca05e74722c8ea4de2fef8577f43052954386c4232a5aeff6fe3f665d9c26a6faf4d5b2d0c995fa9cb22b8169650a3f5f34c7c5dcd8cd1fc66e52fe1fbf8a17d9c41ac6ec6acff7a7929046435c9165bea5cabee7cea85ab5bf0202dc2c4ea4a21715f8ef97a462a4d7051b2e612d8c5b9d77fa6c9451686bfa35b9bf6cdc16fdf6ae8f01d87c053e8a714752fd467bdd24b6c094b332119127d56ced069a349168cdd549b6bfa61bb2be13d6b744fbed426f5786b2b11dcf4cc9649182f2c807755a10f0b8d50ee357d3c7e31890d433008a086b193853cc73f9e6d1694b9806253d891d6727053f8198aba0a790ce5665ef1b6b712e7c31a34d3dd5420c6e37815e88f9491b53d739f50636ecadb0ff7a87d8ad41fb60a5e5adb0c6959f104290a554ace81abf5286d222cc6f4f44d54638865a1106c7d1400186cceb6b46ce5bfb375dcc8d12587117458bb9df5081d1eb6f996ab9795cbc31080ecad8da83e84677357bda149301acb89b51c39daa2389d993d27b3def61257eb5bd4e920b41705d5b7f6b8da83e79c323bf65f3f945f80d70d3b5dd3238c630e84935380b6e5f31f760a645423067ad4b8c2c1a163e225357f5cd1fcc48fa65d0f8f5922e75fd3b33a4f50407e05cc03d3f7fd9a816edf270bf2ccc6699aa669551f669196030c235d5bf919f5541421e60c8f957d54334e4b93aaca734bf7c5edca1847737e210257a6bb5b397ff7c19776e43cd840b5fdb6b5f8638201fed53225cadee00fa6b2c1c6338ebaf7cb6530dd97caf2b2dbc7c5e0423c065b4019eaa90aa26c5601c72420ee2eea4a238f7a9706fa8d09093f0198f4ce80c640264fca644c98dfc6b1e74d47a657e58492bd49de35e7d1e2c5f246ac7581c1936d0a104437c61b69f583b1dcaf74685321715c89f7939becef008fb5cb79dbae70720146fe94876024a1d51984d03133ce5f4576ca20d58c3cb4cacd5ae982f5b34013d90b84a24da19a4d8ad0ebde9acbaf9b31281ffd5511978e4f9e41360da7dcde66d916fa870f0581bd1e37cefcdc1ad4459bd1a1bc102150a8f021935ae0a0b79cf1ac0ea0cf5c080cb74490de61f977209fe63135badaa8860afaf961e04435d7efe44d2f650647065682b2b3eff40a6e9eee4a56643bfc53494df6b7193fefa42e30349752acc5465682b311e872e46c233a4ba2cebdc29d258b09cf0dec2b8e3720635d2ab8192941b5007cedfebbc5c75ab38f3ce8a1c04a42b11e30e1aff2852548056fa0a94ba2aa2969630ff6e7f5d020904135006902056b2924a8b37da2bf5104640efc09f3c29c4bea2f0c6f392b013a7e3b74f3f733b6844bb9fc8c1a7f2cfeda4b9800afaee7a8d5c482a7fbdbd402366465fd946e2194289dd1aa56c52a3924fef3bc50bf8a14c878e04ed863276c2c3859f264051aed5dbcd954e221d767c68195896194f1f444a4bbb0394169fca23fc75ee0a921043d9f8a284725c2ff418bf4146c9fcdebace06b78a9071a284ad344af84bad25d4ade5a70e0416b642876a5d9dc506c4f93a476049214b67388ab4870daca8d7d27c1c0eb57f53f3aedca11462b575bb48b7971e0af0add62ee10492f5d58d0d8371263d418b1bce8040edce5f4052aaee6d7c5993a59ed7addbadd5786d64af31b18a9e7ad1772fffdad5f35a0fa47834838079ade72752fea036b65d1d33a42267d09727f96efe74d3e1eb1cca730f62222be6205e4f2f6a57279f6e8c04d69eb9819212ab09232752991f6d18c756c0710408b4b31e56372909f77162de2cefcf24f6018e4f86608086f514a1a93595999348318e9cafad3d62262f49ca8e5cd2412bbd4a480f67842fd6db0e20942bc1600c5e96d22316bcbd9470e7cee42cea61990e88fca783871c2b8807355bc812f4bd0474c798b8cd9fa9fce4f516a83e0ba8bbf07434feb1d65ae433ef72b5b4d6c4ebd083f7dd9992cd9ae9440d18f7c7c08e29b79f1e29e4cdb73b56c23ace8e87db500f29cb471d68149ec5afc43c1d494ddccdd12c18ceeac9c672319e88a5709c9f7215ca00c9e230aa7fe5f33696abc1b0bfb16fa51d1be17d4ca82b0ba2e6f563b4a224ec1ca3b7b67a98ee0db94eb24e942631f958c7c908eb10277f0d50b045deba1f32a0137069bfaefee80e9ae85d541ab83b0755470e574fdb0c6f1893ecf74405fbdd9a256c551169ef1ef82a8607744e94b32f2437994f8fd84ea5670107271c6e5aa19c6644a7774c70ce4171b61c392ce3bc272db8f68b0e355ff32b174dadb49f8e9e00955a72248d85f6c569f9c12a1f641a95bc2e16d4a9ae01132d9dfff434cbf3e24f10a0a2fb860f2a26f530b7ef8fc31aaede795234fa576054ff5c57a2be63b37ab34beb4438544af7f7ccfadca5ec6295eefdb25dabbebb915b0a0570d1b61b1f2ab92aef028fcae3e8df1c6d0e5b157945e719ac29feccee995225266bb3c4445d3285854e8655f2aeaf442b33d9dc62cd82b1aadddf3a72a27cdf4cf32453f43400248d8302912d32859b9c7a2d5f596d15a2de2d29ae255cd05d6bd3cf7334976a308f08cb269b5ca8494a4c2145650de714d182a3cf10b096c40a727cca0e6eb7d11447a9bd45156275bd127b368f95412e094517463a86153fb238f50089a1302ea3a764fe3143f9477b3204dcdeee6b1810dc4bbaacc796f3ea8d01bead181d70c490c39069cfb6e80e1684dc5afeadfb6eb107d46c59610b3ad967ac83bcc6beff6a901cf5a2e180fe24c3e10bae4fffa92a153c8426bead2a84f07112737241dd9e9149dba3c236d1c68891fae7984b4bb13c99fb15f50243f664b563266a21e5928fc025b9a03311639c942e8fd208dcad4393da0d4d310c988b227cbef785a0af5128dbcec59f4562c893af8f435de286f3d328f80f620ed02c5e67215f95945da12a03c977a1f62dd23686d03373e7a31401edbd84bfcf0711112c39ea7b4b05456ea791ff61ab2b8224ba39ec71726e6ec53244f16dd9a600e4d1ece25c4d0d069bce10a508ecc4a20653b1b5800c4ec8c5fe75a197b413c27e60248d6320dfac59812db0be4260f8835a22d5c83babebac5938db63e6b81f89e0c835b54ee1ff52c7d06aaa33674e44d67395708aeea0204b75e6f9f9fcdeaa5ac0207d5f7dc72ba8e119f549416af0cf8c3da17e7dadc9dd140b827546c98bd5f496e1d91acb8f2c4906c60c5714304d551582a1c1da5116fd9226e000a6d4594ce109461fd4245cee7946030f16ac59b6643c7a22f15dff18c30cc4913e2defb0481e2df6aa923fb9b99db6d2370bfa9774f69109b8989e4ee55da861593c9d08124817061582dd9210f2ad093ef639e08bd96fdcf9a7fd85424015d8bfac6d3c88ae8bb7dd9c3f62c46d711af4141c79f20d9b047a3524a620de925e37236734f2791171c9876c0f1e38896f210eae4af1b99dea04e8199ac85fa75b8a4992d898d0319ca2ec6c8366787d6e8d8bf43bcf05fef55e68e64782eadc3780c8f611c1dc74a0307248a4e458d681ff34f835d61a458c525e939796a7ba5ae1459bc5b6c561e63bc2075ce0fe1b0f40b1c11e4c20fa19a67226714bbfc82c756b8addc0b281d48b83b192a192d48019a957e07a3ea603234ba9bcea5a8e1604dfca4225cb5ad3e75e4f2e703d893b4fc4c361a89dd0b291922362bb9f957e554c63da2d3a764c19fbe8179526c3aaadab0c8b1e65008eb8ee9d4a06b764cd31585e8f22245da5e701843758770934fa063a4423bdbeff5f081e5c13ca846c60abc2484ab495481a192b750055e441fd7c567600cd936d5087ae8029ff7bc1aaee97edef0fa89b7aeae6b9d7eadb397fb66608febe06405114559e927ed336d7c9e56557601e08ce1dbceb235e7685485c75e263b8a0e02b571c9e94701332aee3b59acacd7df5e059b6f42dd93d8b201588ec77e2e7b5a6f70a6878fdc41df8e50e73927e4fcc7647dbba3d82b9b4cf89a90e84656528899d28e5864c6d5e7d76f9d8f69c1bf4598e33269b8171681c61df30d069a29f9ef07dfb0586965f053f7db13d4f6ad551d7c6208effed10d145333aa4152583ab9911933fd2c88758e8a2e6b0bec3d725ca9d915f24b612b4dcab144891763d793fec967a59893e3d1870609712ae629f0ebf5f571753d88ecf52a604061d33d08b17eaff4264ec7e77f0053a72b3de854c3474bc014cc826c52dd9209ca2cf7725997916b6def9e1ae29bee0075bb3a02b05b6d6092a4c46674693e37a8e7838b47a2906dd81ce2f652374d2f92d49b854390fef5874cbb45da4bd97c96995d9e0c2e419ded4d12f43e70d596fb209956ed8664d15b2ad394e4f4082b0b99023537a9195e25f6babf17c73bb917059fe22eba239696d599de35002ec5808d0deb2aa18c310ab046917ea8c4088f1a2bc1878adfb7c2b39a8c3aeed1fe8ddbdd2a85861eb913f05335c3a42327cbd4d98f78a6edb7577b4229671e86289c1bfc6db8e53558ca3d4cf68737bd7945ac0576826cd217cd632d206a2dafc633b3e84f353d8482a60db05e49d2179f95265c41256b214bbd21b81b947ad369dd3a2d299b0d70e93fd819f78c11b5ed32da3a69e2105fd57f2d8f7576b48586011537975ab39edee022d63cbe651ce4971e1c4b390ae247bbecffc891393aad37eba412e4fe42e63f8491b8614ab1383a889e7faa996d14dbf6958f74976731fa13df16ca1c1181c663c8d50531174aa5902d71a76a34cf57c0ed24814d9fd6b024553d9abb8f53ed46e82d2ac6b38e60db45cbcffbedc9c7e2734247da48ee02a3b2d1b74b20bf4ca47c1b426a1a85e4b073e884bd0cb6a4b1a44358abf6fa6a08548da0495a464d12f149dca9b0c3b9b63442562bf5f866d51cb204512e8e4ec8d6cbf644b06b6708e41359f42aca48530383c4c75e1196c329090b68640c297b960719bba791330cc1125ad7ccfc292d6e07411d8984ace275d2be401c1692873ee99b1cc47a398514c15fc32bebd49bd0476bad2ce421d97f899d76cb1012722dcdfaf67b68d3085baac954dc2bc334d6eea4f4ac928e0ea2a8397b059b11d2df3ea9c7510fa80d122937fb321e7d6efe576d627d325a087bb912db301a291fefb6380dd9b11119b4e72c24e2367bc0930c559533261e4d8736aa05ff1fc0bfcbcf16387a0fb6a4c04f0670412646d05187ddfb52e0334441ab7f89b70e6138ffe3d4e5b66df134d0db574bf340570496547713511341833771f3d4ec788321f88ef484137e69505316af466d3734c3fdfca16bb211b190d534b78623f0bef1423ae5a21593777db37b7ece135d68c4d4dafd62fa8e1be3b76e2b1be1e97d3d797228be315fc4139e9436618a255b5dd799db979ecad9023a88dee4aac5365ceacf4e36fb35a7c860db769f364185156293dc88236a8162eb1f439ee33682d6229cc6aad7b7baf296cbafe5ac248e72026370a30cdf9d8c458be9992f9feb3fbd8512986b587628ccef52c35030d00a33832886cfbca5e4e6694171e473b80027f2c27e0a8a51d16fb0ffb6c708e234626d6481f06403132a41db97a654a1bdde7056ca59dfe692fbab173e751f4d874bacc542f3785d8dad702898f9b510cf6d88201bbdcbacd3fd4839d8eee66a892babcb486d6c1dbaccaea8f433179dcb41a4eed0cad00d2ae122c804a8e0d1909ef4d6e0a2b1bc312447ed27f6ee9127e740f387e58f8fee53a5524017a11b54121288ca57dbc16730c665a2c9cca36beaf6eebfb24ccdc4a14a5929cfb9904a218f5153e16cc5f37eb492f300143d0db93120d6a5ba1f1466ac5d10457cd8d959b5b12bc3c7223c5a9cf5a75e57d693de8a4a6b243a2c742025ce91fd6d6d88074028a0938d6ec870ea1e2e1929f884c76cbbfbd24f4e5a4a513e3d7c2dc6dcc6993850c522141e4e167cf5e4fd2b67005305e7248c2d3d51b92c6136106d5e243b60cadd17bab44ecc829d3633e7a115c7a8eb9f6321a3e2c809abbfd7d9728c91225d4ff0bb10ff56df927170a5c974452547a756c4146a08668b6dc693b08c550db6922fadbaec5fe4744b35fe46a8560ba9d0e99d0543e4b37ee46f149e9fd173354836fb187242219117f649bf2e74bc70b09e14fd2cf780f4a853d4a333b10377d6a93bc03da817976c242089732bc83aaae6b47271bb4f8b2e076c64d45e3eecd1e8e838aaec46e5bc620b4c22d5af763446040bbeaa8fb0e9ec443a1e337602ae9878e85699300a8d12725d9a1ce2a1f15e7c0f604fb1f46084e4b96dfb4967d11a6665ad39538452c7ee54656bf24c46729514031566d43663d6594000397afdf159273b4731d1b1f4f7c6f14d6ee3b834e7a013861ebeb00b81a030dcc6ba69bf99a36d4d5b810f1bf70bea3bb8f6db17dc4a1e2c3a3271de8f04ccfb61b4c8d7d070dfb610f0decf84b99ca150f4139deb588f7259de006f571d50e6aae88fdc6605ff0c22dfb5622946a528c779e629ad71e3f2ee0fc0406250791902c4132ff2d947c9e17c07864d49804c9ce6e75d9b2cc818774655d43934a22cf9e61754ef714679ed7469ae7928ba6741c98bac2ccf887d7610159d5430787cf0bcf0edb44467969737304d356ab00356a04797eaf0c17c7afba42e4bda489397b7345cf9f9479a8f631fd4fa960dcb2bf9afa34e36efaff67765e978a8bf0b5f63561528d6531026567ce83111200962342840dee88f826911ff717312284ea85fdac8b98226720cafdc098182935879ee461315ac0d8e4339c538c3ad30d812fb36ca34731e4a92cda19b6460d432d3968d7c7af8064e357d5ba1d2e055221fd3feac222fb704694e821042226f232fbb62ff8732f62c804b276f2931f1c73f5896e0eb2e8d29f090e22ab34dd0a3bedb6b1eb30349b3e431bce34f48b331f227a40b27e61d45b933462d3049852f31551a4c96df9d7eb1bf8090bd6b05fcc89f8a7d40fcc3c223a422aa21bc093ff7d6d52b9b3e5dd779431709ec3f6682234eced9deb92d39e0721c24300be950a2df301e48960778bb6ae4b1642c515cb2a3f58349c1c617501b772dc3bf820ba2bccfa7177d26bcf8a58e29adc852f6c73d731c1aad1ae4f31ed829655d8fcb781de858905a382ea17157c53179e7eb0189ebf6e9b1881d59dac3998d5c5f0aa3713e954bc3c848565ce62697e79ca3c207b4c61f95ba4ae4fdae10b4327c63b535270f9230339477d6cdd03967cdbbb93551ec24b01dd834f60c01628654411df8260a1c36169d966d53349e91079d379167eba1a72f5fca3271ee20ae933d5e28d027322bfdbe228f3ac64fe9e6b2cdba5b471ed15b4c055164596741a5a2e655a9e98ca83580bccac927c5d8c7a6fc0ea080e4c54e1786d147c5beb6083c56fd17c374317a8fc59ea2bb88f436e4431cdc2b9bf9646cbf10b0a59f923744108dae37913e1935cd794c1411b2c0f523536299ccf44a962ebe238b725cbf64c385d1d86c44be1d34f929a3f89ae2442d40d86dc03c4d3e462814e9ef7c0d18b08427085debb590bc8ccfed9623077bb163a21a4e47f8cfa5fd09435f86bcda87f71259ee79bc4a94a2937372c1cce6604a5421af9dd9b4ce9b651a5af32b24ba6d383fb6952ea58dd948c8272d9f2eba5373166ca47ca81081ecf15a57e471b834ed4c1eb4893be8af244e2b9cfabf102d635b1df23df42c4ed54ae60b855c121cb5e1bf6e58783582ca87e8b66c020216b9823c1daa336260c29976a46a4e485336b2f11918d50502a007f6f06fb220cdfa0e3f7d5de06356396f94b92fc2db96c4125c4b46fcd78d4940cee17229ccb18961a097b5859fadae2fc89022544c460282697b6f3a1da12ab4e8f01fe396400c2ef8033d8d87b5a57c7ae00e6d0aef56a5a13ffe2747ecd8e6dda2c579ee17e6b8be267282bc2c93b8342f3097a7f154ee8bff703f06aeb86905701f5764979da15ba7e0ef9d711d757cb4354e940a71bf8230720bba856d9df8fe69f67a5db58b68de053eac018736cd35790c5f9931ab4c895ff7d40f4cf8309441f19fc8b2b96e5f4bfa787c857eae19985b8b0c19342350b69df38afb2a44d843b3656719bdc492419d83407caf87e70fa686f19cdcaf2cf26889a6ec869e40cbc63bc75f2b142d82b25cdbf15be3044b87d3d821275884bfe226e195bfb5546694a347f763c5776bb345cd78165827e88a023e7a86a7ee5b952ba97b18228980c93c97771a6106792b0e8375415 +MD = 7b3948eb192d617d64f4d09d34ce72fbda71e1ad7b68cec8346d324f987efca7 + +Len = 100816 +Msg = ad0c2e3d20f4efcc3c89bb06ef8ba0d54d52e76a8fc03bd55c750dd2484136e69bdfdeab53e09d686ce5e1e55e11907ee8beee750c6fc08d5b06b2d47238f6c0c53d2e7d9bcc8c865a4637730532f11103e9f8b8229229d9db516bd7d8bc4b18b38fe45b01a0024c8f158755ebd40db8263bccdbd912bee266bd028380b67f16ee3bc9ec8b4448e292b8973618e02a99da1c348539d5c7d083b23d82740fd8e4fdaba5d943a0a671eb992fbc953f91dca6f4f65e4bc48ccbbb98e679bcad9fa7684540c9319d6321231e198f69d78aaa132bdb0f16c755fa94d8c3135e7a1b8ab87361655c21c919c1b11c589c925c2ba829ab40a2c7698598d89df6645d96b2749cd255cc151e824db9ffbf37575186ed572e98f8aa11954f013bcad53d564a242759408962ab834f9e8b6b410dafe46a1b2bc01f5a955240bb6738ba04a478507ebfcf9ceeb84550c78805c29ebf6ca8de6c601fbd3de3f36fe7e71a99c8648108cba90ca38df0d89ebe34c3f1c9472e09b71f01bd5070f0838481fde40a383e2d4776e16871ab6d8af4a14aee159c8402d5a5cc411823c06106ab6ccdb2191055f9e02324ae9e99f3f4f4627dea9433338e9b8830db22ea6f350f6d3c07317ee8ab8ddbc18af2e34184d410869257c202a9a93e74e295f617d9550b1952a8104e232511264ecfd3dd6de95ef1530cb9d9f076f5f475a56cc0b9254b4cdba64ef02a51cb3b415cf22d76dc53a676dba11f29abb598dc79d5d19e2537bdea52c13487b913e8adc2c79a6955f78e42ed003c1def86485e3bb9b45000d655c7d4f0830404f015d828db8d0dfb538f016a619894eb71ec44109ed0975c30faba55634667da6baa0bb7b46c29776e92f97a499b56477d6cd7220e8d3be24e950afda3e379e58a8f8e97dca086705180744342ad2aaab3b05c9990530339370f00f337c402ca57ada9efdb92ec8f023fb8f0d336d9bc19a11e9dad8ab809f34ee460a74fca34daeaa4e737a9227c8bb90da7859e2c26ba256454eb9a22fc8b3cfe6b7cee98c91a2fc6a97a4cf2def3d4bd90de4de8909b2575e9d5ec09b806c0953d3d0835311f65595a2be5225e437a0fd568abd8a1c68a9a82f0e635e56cc1f2fd72046a15f172a325d3db7ba382924a9bab21c302423a1b48c6f16e2cc6295ed4a44cfd1d9940ed30f996c556b804b70d2e15705b171f4062de767b351bdf1fea5a47b6f01eb57ea3257ec81eeeb89e5079f0a8534e2051f8c0db25a773cb7d661c5d5f3788bba0a7e0fb4ba42b95478f141b3392ed249534f58a342ad6d5c27072f6be99df399964b075188f7785f9f088fcd9c1ff15553c04e970684de53432e57a9dbf2c16b2012054f588da70fd9b5bfd628889dad9387562a006dfe31dd1fc51c250773c33a6b500ab375d3c9cb91885958e955b6951d15b8eaf95b7c37840e4f5f5c692647df9e1024307d21b7244fb3b7c2a804dae9e3e000975496f4d3799005623008cab735fc155e11ac5ed69c91cf95131cc796772bfbc8a8168786bd9aa1a956ef55babe3b214f1fce1530e5600ae11562fd7b15f9371d948f822640dbaea25c4e5b32ad39b294161b6cbbc0aaf4272d7bff2066d43d06c846573a89bf96dd9eaa5db7799453bd92f8d7efa4df05e7c9cc1f2ed0499804a1ff892c1ed2f4cbbc97dfc1a9b78f3bf50ae9450878daa388d80ffef8c5b2a7bfff9a83769232ed347b43e9c43fbf9fdaa613446204ccdad93433f936d5275080eb0dc90799fbc274d94c884f898f49b27ee866580f670e39451dd610f460af83264575684699ec2c463c35a21158c9fae9cb33410533ae379f3ffe1dbff9053555f4010f24a7ba9926a56a7283b6a1326b5e33c362ad4b42b71ce9c3744b0215ee7c0472a0afbe6a1f1aaf174d236fe797f3d035b44e55e911371198cde126b3545ff829671c77fd740e6c36da297698e43ea13e86a16ea922110e043965d39c2c124499d47877f1e9e33a27b72365b4d4812f443620f5f18e2d57ac2323991eda25824a753e2eb5d55b918060cbbdc9ed8db2cd6f477c50a9fe66e737a507d9e32c29c1c5e81cd7cab9fac7636cdf46939704508eaf7254fa06b44bd384704bdb78b3865300c2c62e90ee733b914ac96b4f7c7400b3686d12d8d850732c92e327ada81e8912a11f9562d4fa55d3a0b0d919938e81eddf0778e73b8bb317c04e5c3d8fe0e498383283c256e35e9e41ab7187d2267ec936b290a476540fd088dbedaac373f1fc08ad7e11dcc4927bce07a91cc0c253d0100cfea2e14fe5e16d2a60680b4e4dd892eee8e3eef4bdd6a653f43ad7f8ad8ceb65277524e5d1c4ed9839079fe63498578568bb061a1d496b1ef774902fe87a39698f6db9ac5fe57ac3fc0c19c262c5d6ff5209aaab5d4e7cd7075c71de91028a68ab2f1819eceda53c0de8016934db91cb4952450eda505c0ac855058b33c04f010f2ba8a50527ed4f032ddf514763f857b3178ddb30e999289ef0c3cc4d3e07c13fd613d4353ec39b50401bf106d9ab4333ebbd96ed84b4bf1fa2250849d6350791c0c22df98cb8af99b14ffeffb70b1c20218ca85cbc2f4cbefbb1c5c6236762c97e4c28debc4cda3403d3a18e86a8212c6b53a62afa795ff16fe29b2e900f612b610a4b3127f0c9b3ba4faf5fc2f310ad1bab06c4ca13474b714feeffb6ad615c1b850bbd6a34ec9d472c6edff68c6916d50b50b6a59db141a24247c601c201cff064f0bffd89c1553cf2768b8bc4791e09fd0a7d07691c6875721bfe0bddc0eb920280d55c8fd67ffe2a4cef0d4bef173ce89a847a15f7245d57f2242f510d5372e6327a01979a721d4c5886f5732996e05687797824b009dc5c50c506ec658c15989c3a77318bd01cc12fcfdeeac70196ef67a88c06059d74f7ce5d0cd057f9fc82148337fe391e7f3149362413360bb2eba1ae104a3633b9d2b148bbdd63218a5b31e0ce4e10b1b7152b565f7cf519e703cbf6cf51e0710d45a0349e43f597515c7adfa4b1a14e46d54cbd0b88829085a05d2ef3cd82ea01f9219d2ea4bdcff42e65cc55c97928c0fa33b692e67d142149cb93380d9be31a459beed78ffa3fb54979534be5f6f5981c66ff9ff733194c789de006a2aa10c8b3a5a64366597b47363c0101a7a9194e845cd47d3b531459b55a71ea2d2bd79fdba55fdcb849e71c5d1432117f1e2846fa9bf1d5333ba9fb7877e54cfd9fcbf22631881e064a1797569872f5ecb48733b79ac4126f7b2e844a7ca6b9948442821bc09b71c0e8915a9b3f4029610ada7773dfc7cf5090369693ef32caa267ffa224d916928893c8d8a38f36168c9f869497e1696686f936a4fd3615ca77b947e4f9f195dabdda4293f7fea167cfd1101d9c2645726334c331dee7bc63b4f6bfcce39075c4e13a831f01042e779b4e0b750944d87d85d140bfc17ab310cabecbcc7a3c42eb9322fecc774649d08f64cd3d67939ed25f3d53c14d75964c296ff056366b99b934223a3e932b600d0cc3f9c92fb9052b6ff760c8cb5eb2806198c21c9094d6b844c6b9e81d2a2d77a3da15bada1bb7e3288dfc48d3aca45803b7b562314e7653656ef25b5dd8fecad5258594ff320394297f8ab3eec5e83d704b4ed9610f1534e6b9780addae50512124ddb9e7a284b8e33a90bc8560faab37c1f2d4c84d2fb77904bf692510beb5085682cc5bd3b7bbd64da2a52fd4681beaca5606df8f22557cff3d08cca6b6610b39293ea45c29278327352056b69d19d9b2ccc20f4b99b962f7757c2ce6c3dfaa5b1573698235966a65cc90927e262fb519dbb8e018f24ddb9bfd05de4763ab562aec1d040c89530c77dd785b917fc7ed7e173dfa6dc87d473b3868495f123eaf27219e0c517117d9ebec6a1aa7267ce34de3d3a6c088d22673cc0606845c1405ee4a790ad7a94f63108dc8780596a94707e60c7da7bfe6f9d40c519e5dbdc60adebb2068258e5438a41635cc636cf7894a826b0789da2651ba8ded694193cf1e771846acb19cd0bb153a14b01705c21a744d51aced740aaeb5d53bffe68a89c155d63e5112414f6ac24df79bb6fda38b139b62f658fa2e615466cfeaa31e9093d97989fdbe382ae859e64117b9b1064bb711117c42e8ec29f4a71b820dac7df6a066abfb1bdded844a87a39ca5cc84ecbd32efa731dcde59353a918e9cd0ac7a194236d1b1af21fef2967192f1ac89eec4754fffbc327f9f8485d438c707a68ec280ad3a2628428900b74db323dd9fb23b5cc4ee38763a3d710d564912ddf6b52aa6616cdfe5d9e2e35e9a45b2dc30d7a05df10b3d34b8d379559a1816b0077dc03806125544527d28f0e9f33524e7df81fd26df40ea55f20be3122e391a6359019a0da31cd046b83012af1411542f3a5ecf08c2d9f3ac09b73a4103f09994c78d50da979d16114497387c50ddc66168a528096e6f0d259ae9cfb931e3aa1659c1f11f785c925c72ccd6b412010838fae3ac9b2a76835d264227fd2068c862802e0f2ecde1b182e35f71f8d011a61051a8d1409f96f2ad2c2eb75f682670f3cb4fef9af0b3102f16bd9ebd23860c821d431a9c3636d7a01d2e028261733064aba636e699472abb8d75c16384e4c808be610d0076ecaed099be9df8b4f5831f91af599410245db2a7f66eae6ca4550ea5711d1fda0ef4b8f25efe14db13e58f2de9ec160db1459ef6de0ad0534b202e7301bf3ce84425c3e79d87793c54e45dd0e4530edaa46eeb0a9b3a8bc15fd5c29781880a29f2ce8bb9e8ee98514eebf61b0d22c11f443621539c52334f48d275937efbea07b16b6b19cf77f4d25878d26ce2cfef443727dc52700669459ca2a1e7688f6f19f668fc67cfd8110808278d56f3deebd1e3d06697b4bb805cc1c2f213ccb6fbc93863ba2458736f9ae4548169cec43950e0bc7a83b8d63afd6ebfc0991a0732ae0dc82eeff7ce72d363ac5905c2147a39a45862b71b0adb9fe9f5b7f7def48630dd22c52b2c6dcd7a0c8b6ecb7c440104a510c99249bdf4ccda0112b09a0378ea2ce0075674c5d1d7556e5d1b5be7703a698219b5d36408fca57e9b43c9b88d4273ac70026f6b2273c4e18e85ff534a537828cd923691aab7d2aaac31fc8835c257d499af5ac221e7d1718d9bc52bf1d847817fa7e1cb3c76e821bffb80f704f24ff4eecde56f62ac119ad4bd4bd5f9415e088a77637550c26c80611115996d4aa289e9ee8dc77728ebc9ee6b01f5d327323a88714a246a22c6231a0328c3e14416000571b26ea1f6f68b553575e011e25aa3f435f46ceb008ba64552192b036700f3ebf801d9a58e985b83ad1649381b3dc15826009375e433669d8e8513463c09d1e7f1ea7ce46867b704227175b82a620f1ed1dd4c7d6644007d08fb312c3b772693ffeadcd11cdb2a5146061a14a85e09d2ba090c83df33f05e51c9f917ddff6e6a62618e0e046931f588429ac00d883dfe5f12380be789b2cc099fcfabac0925f5da0ce4fdb7a84a5b59c57c5cd287180c31677387e7cbb44090db495a1e0ac9a0c74b9622cf0ee01d3afd234d9fb11486c197237a88709156781aeaa5bc9ae615aa8c061f8303af95bc584414bdccdfe8901fec7621fec6683fcd2810f03fe7aef46ca936ac3ce56f5e654344c500c6cc1d7022ed4cecc0005860862e61406ad7455c141a73014df481b2a5403e13758bda265b5281b12ac9427389408862cc491de8cb3daff725efd6beeea9916b48b256a11a4838e2430d8e84a609ce1da85ede8133129b95299bbdf883e3577eccda038ed430fb06b547bd0260ecaab77ba317b3e03bce51b5a2b7ee198008d47e5d613e1d9f4084fe222e8b5e6bc6e6b29049ff570bc0b3567f550df4022df2e9d7003d5b05a1f39a07737dd2f97b11d9b0f5d20c151b40888c05d6b7dc2f607bb1610b10e687b8f5822c5873386fdf7d7fabca73fa267fc8734ae6e9908583b086f435d3c46a6bad0cb9a9c38afd960a76cc5722fd8ac792bfa4aceda1d8f334c24a3c2821d2823d119bf02873acdc0d10d7f69dc1a0be73bba3975892923564fdc38c62715873122b43ba3685061801e86f2758d910dae801b8449ed539a0bd8400b5275554d4b8d45166522191e06567f267c89653936c2c6323450c47ebcb1f8234fb20601dbd8745832ffbc8bbb419f246719bd17e7c8634b1df8a456d0a0ab89a3274f2c48cce80af145613107a68ff31f85c1302a5c99d8eb2e1aabaf6e0143381c5955fa314a348a3d3296534ff79b8b159b0b654410df883a4e04c1e3a45bf4d94b0459cf41dce42f544405027d25921170310249716bdb6469e96dc639d8c1a54ec2cd6d760ce963f2c38788cc981ec06b2867336481ccf493e21ee16bc386ca8a15bed590cb802032993fa98afc166bb17afeca902b4331f37839fadf232b8e268894cd382291b03c50972c6059615a6dae2dd69e702865b23227da4000973a4ba0b71e161705593970f5dbf5b8e9d5c54d5e1e355963d6f79950493463b41520e78f90d1b5c264517fc37cf2209524e1def86bfeecddcceb331c0e63536969cee485ea1201b119ab0768d8fe9a4d8eeae96385a1337c91b68bf4f377d89e7c7c1ffff68005babf708f4cb7c22df95c08f70634c536296c7f263ebe15fa3b985321667ac4c8c69fc7a0d7e1e5e182d7628f4b4012fccda46e8e6338e7c229037b71233f8552bb02d9c1711d10bece4421399970328d4e82ad4acc2995374e051b979c0d6cac832ece7a8234ebcdc6ee6c7d598dcaf1964e61e2e059c76193e85b1c3bab21dd046ccd5372ef1d15521c6ce4f15f85308b50b5de068f2449e0f2648767e34bed2803fed5a9144f9e5b1549f5caae085317cfcfc7a89554f61e6d5e60877b92e5d53d8a87906b2871c7222a394c42fe622115d7252d310070339f7130053ca0ccf56099f18dbe5195808b3736dfe30d639068f67efd2cd0c009d1c37d48ee1aaa6fb5529c09d371126c989a76ec58dd604e11535c804d6bed874a7fd2b859ab872b84de0f6d7331f175917881d96a1760425718461e5e7aff9454cbb4bd44f96c111565d21f66393982bdfcdd10e1636c54846ac53f25a4ff1a35cfadbf79ac6009af0e6e897430f27a654b14f785688b6cdf73604b6c92f40036b54426be6d6cfb9b016a1165bf2547d190aef81dcfc572af5b9faaf9ebe62e9fa2025adce497cf22674e21008dd9d049f1317a733f224e3d4a0ac49458de8bb8c06dc39bb8e96d8a68a3200e4316fd159627e54d61abe9d1672a010781e201c8370fcac2916abd1b2bf0765788e4b67ca817a074dd6729b2da86ca190dfd77192f70d51b1923a81fd9bd8aa3054ce3c74f8a15b05a5ff72acca68591a534d6f1cf164e6cf51b14dc9993c6ba61556c3fb207abc880993c7f65139c38f09104993f8b9b7ed05aeb9b94f8916445083929fa16ca86f91fdefacc5475d6971bea59a857261950e913a4f1775368596b33d04e3fdab06af9c7e32af17a3341da7078320055041dcf763fd995758f4489407bd70b430f7e2ddd82a673111697d77f4004109209e014fab474dc5da1af674971bd016e6bdbc50a1e6961a4484019fdf7470f44ee41c1894ae9d37466410f37fb27aac18c29c834019a439a92e5a8d4e62283d27ce7dd0a4b610222a5a388f0613d8ca539113f457162a25bba2e8dea55bef6a67b7b7064fd03f2d0287cda5eeb2931833c3a3124b7e9044f88c2cf298c42ef27b3a48381a9f82ae4b5750e68e11021c15b4ea6b91b56f4dec64a7677d2d7f7bdec0b1c48966732c815362af58a1de2c95ff2a7ece4d1f7703a6d8bbe71a595d0ed5846a10e7993e2106639ef2f75fe010fd03aa55c84976dadd415e5afd351c87f3206745756d49c6dad403d1843fdd335906accc9955b3de8271cd4d58ab30e6a4166a9ba257d5df6b549c78dad65a697da3c49742ccb48b00da9732af14408762e6d297f0f178c71235b75d6dbc0e1ff54ba04a57270f6d02ec2aaf8318b1f6aa123daee3b2993a7a27f2f3af695ee33a9ebe6a48ed1b00e337261857110bb104191a54fd13bd960d8bcdd02266d34fb7fd7d5b8a977dc34c4be801bda5c452eb7be72e9fbd5c6636d1a677792cf1b217f87ba2aebe8e40888b0ef0094f6238daab32a05df80c27a0aa1b5de63430b6b50027e427bae2e53284f967cc666bff5c376b3eba5c3356b575aaf82c0516ca39a500748825124dc4ba35dd99835802eaa11f7e3762787fffb4c3eaad282a68f077a3f8427572c6d9ab52d5d33eacdff068bdd357a3320fe9f7f489dc15d21f83d870d3e934ab0ccbd8cec52bf0d103180ed4c28d86f6930eafcb6a4b46b46a5e47f58bdedb117c25b3084fe6327b08cbf3e2e05b963c85d85ca7107d3327b60a56b0a4a5e15c9171caadbaa48bf15d86c866a144498a64c17f1600e473c29ef28520a2d0efd2e93aa01db9d965da7dd2ecee89da2956cc6497a6a013811b91b143c40ae24f1aefeaa3d6b217489ce63ae1d90e8fae28093c36c7927cd3791ac11319415c979b11fc767727c0accf231937b4a3d75084c7b2ccf74c92f381b6ac93aeea9241e9fbfa786daf781ad7b1086f0fee33b8e36462cac422f869cbe1de15e36b35e67e0a6f2a28ada01b5d1c82f85942373fca8bb6d0acda1f9e9e18c04a6547b9edddc9c51c46a6db16a5c213541f44545db09a394f1fc67b0a9ee80d81830490d06fb696bf262f8ba5684e3412d0691dab1c1c64c69b7c8d4634cc105bfb365d36da6d4ea365ac24401b2d5fa4fb34e5a0938ec3b7be60d8da0631734a0c316179743a773983a1476f24cc009b1e1c6ed68d5dd092e727f02e79b4a0dc549a6010e3ca8b11fea3678b1bc6c155b793fb95802605f8b41635cc05c2137352e5bba59f7a049d3527073c668a1c7536402e960273fe5983c04c2b30e655bf8587e6a00de56e6bc5b0a8fbaba27c7a38857a309aa40425f4ba95d4919de2017b156388b57942ee3eb4bf31318c5bc53cf850fd9f42c1ee857995509e5542f99202d4d83cc20c94feb7cc85cec454e6920d6575a6dca2339461dd17cda8f2f868c49d170a4c3600844e5351a9d6d26ef6290a0147de4f75c027df9286156c9e6dff3ebd847459b17dcce63d79306ecec7ffc158e8d4042597101f697e073a5c20073c3451d6e21839d7f791a36d748695e62db5003a8ad367df1f051c1ac6a21d711823e8e069b546e3fa06ceeaae06de70a1de249e1dffd0d940edc6acac00c4c15504c02d4b0933658005423455f00023b01cdc5b681b6083379c24595518a47c654f5e1a10947df10c05a3d716b2a973faf98e1ee3b675816598bb8d4c2a3b06eb7c493354d7850b00906a4f6acf48e5c50cb0450b41ae485d5bd2d51be5f6f53a03e8058252e717f02e1c09ccc65cfdb0cee95a695d694c815e20bd2ebc76cbd38ed10d239722ac7d472fa2b708643040a8afeb685a450264281ba20f1e290f6a758ac6a304b63cea641b86a425dd01e7326a6492d8b00e98423a20379b9c1451407baeab3c204dea1d76322eaf55f736e4bf52635938c57024f2b422b52e8f1a783a41869def53decbb641b1053d9492480531744c4dcb9e58dbda7aeb7ee438a53d0bcfba71e33b175211d5b8124e9bd4d28e20227d9565465c0f8abf0b983e2ffa8a01025680a158e04f073862a9b603adc5019c3697878609cfec90333f9da10928b5161b908428d745b016ad1a635d0d7292ea075657905b981b1fa43ec970df8446562fb7760fad928ad35035465968235ecc7e6667edd7f490adcd0a6447e4194f630149d965e9a1d1ef0a7eb1815433bf83fa2c3af6f571d7db2c46d07ebd543a9d4eec30d402103fda3a5b475d38305fd1093c43543a7c6b283068a08dd1c1928556f30ed28d5a1f154e5f7a55aab59a143a0b138e1d80d50577e4570dc7ede1bbb812e5d9e1ec1a30d4efcd03221008cdfb0d1dfd253b8003714e5676e6359290f0b03852b6429bad5ca0a1ce14fc267ecad6d539d7f8f6929b0b4141d3353fb58f4f88e560fa2dfb5416ab4f19b66da737ecdbccac35c34383af8a0705694399e2655a0a887f4bab39965beea6fb68c7a0b3941e189e508699afa33ef34e48ae98862e2a835e7f2dabb4163523278260c3cf90a6b38f38ec6b802f323350b964202677dde7f43302f8f46cab34c754f2ef95440f0374e6d567c570b93c2d006b07cab99d2cecf1bbcfdbe1c942575b0ea2a940bf6f0be4e21cf43a1c841fc823cde775c0d8b545c88eeef807e2540f147b7ff9207ca0bd930970cde481c57b1ed1013f1161c9a9a9b48221ff8b49db94e88defeaa2dfcb58abefbe99db9a93ccbfbc77e75eb697efef5a0208a3a55b00585787668815b8b372a58eb4e82bacade85db2cb35e89b0b8dbaeacbc1f307f76971723c72fee0240c56b0be4dd52042f97962257dfc1d7d1e497eb17cbf6cea9a4012d519d7ec3ac757b72e6343892c51a4189e9d5db9b52f7a10422a66f44a4957fbb8e34d2758324d247dcee351ba8f42488f1a89da642fb16206519638a7153d9f5055cb4c1ceb9b6b34f731147e10f8748f8bfd09da9da3c66698a994818c557043e7eea4f941c70dec62b94c07751b2f085843c2b8f7b5cffb562da259fd24110c1003dc6dd3548efc97e852b72a4eca9215ea8f6fdc6bd12d20aeec91064de40174c75cfb1ec850ee0d4ae33dbef7f9b53b5dda6faa3a9c846e89ddd726277bdc7c85a11192971659495d57eb91ab1eda3f2a4e48ffa66499b66af09ceb354af59deb3351cd452196c29c3b4140ccbc8997bc358c3b33dbc58ebebf42b41bd3d55f54ae2c3d57155f1f8407ef4af1453beb902a99eb6764906de1a4791f3fa8f4474e5c11514163fa96b148462ead6b799142b7f28eb591a2ca904a909b152ceaec54d791a7989ff1ee8066d65a5571bb3f504846a3b2e5452b371c399630f22194f4ab3daed11bed8d8dfe106c8e1a892c2575e6b8c3c220164293d4cf177b20f7aa4175e56f7a45ea4678a4c3cba85c0e5eab533c8ccaabf24f3be2744d3a717ae224cad9e84d837b2660d3fe72adcc5c48532cbd52614175b99ee34426a28ba538dfbcfabfd83ee6ca415e7b27bd227c9f27c3a9d92898e71e1767ad4865e7ed1adcbcd67adcc0839e8484d85f391705af83c88065831aece94fe01e36d71ee914a65aeb8dbdc0f80fc4e7849dc4127e15e1abefabf33fedb7a2dd25568888ff92c707a88ceda8baba6d070e47c09d5c5edbde36010b706fe5aacf414bfcbeb721a9539becfef0221af763e401c12016e6dceff1f94e74fa0fd226f06ba638965de7cf4422643fe4adfe7e94403843344a6f41b2190e9602a2c384c15a178f1383eccb3fc1bfd068efdcc79d77b86f4af5fd83d4d4fe5c102ad969228bb31ac55032e7cd4f646a355d3ccf7e3ca40ca176222708b1804fb9248e3492651b74122f54959b2fe455b0727906a4f39db40e47579b9c3326d9541c7c879f9ab323809dbc6517e7c23b90cc2bfda03107fdb7e618522dde64a1776f0ec2b8811c91a707e4c6c20b80742cc6c024fe69753254dedefb2c27cc00a9b8df867bbcba46dc1a784b380fa1a80b0ec01d2e21680a5bae35f71583cf9f5176493337a20ecbc631c152d868a83fa1e0c636aded42de32b097c68886d1d60523e6699ad5ac98cbea6a9e31baf6b387f92d120c31a83680929ef9e3b5953d3b4e218a03cbf62673a0ce5db25b3fac33c47f2fb7730aabbbd095f1b5746c4d7a51a52500f98e0d43f18731f8ddc5722bbf36f03e35ec964ad7275e8c57d98f38dacbcb20f2c6a5c3590fbb73c73abdd665eef40efec09ec432bd90c6e46f6b0d461fdcd22c52985843d24a919bf1d7da44f1bbb842191dae6fe328f39e80695e201beaa31a945da94e797ff0b0ad689dc909b7b88468ab6fdb1297a0dadf22a1f54a64f2521e5e0ce55fcc1fc9afe8978e71688e5a31b09f20d65d4d4dbdff7f4215ec6e47531219851faf5d3b9bc05df1d34eb81806d592cda8fa575bbf785c7328d1758ed52245ba139a578ad388679fa9eab4625a73113e04ef6d895625b014ddc4867d17071800e62d8d2be9b93ae45fcd01ad9f2160fe64bcee5b148010b3bf363fb68b2916d601d97cb360db5e6c8f563e7e6769288b62d358456d0004bc4796ffbfb410b8c5f11e94a5bb5738949326a94925a2ce6169d339dce22df2baf17754fd2456744d3e7d63877bc55ff915bf00926c76d91cf43d1185f672612c6747cdf35e52efc8346667bd049e3b06817fa2ee9e4dbf2a9c616dd52c75e68cf398c936c49e71e38d7a2fcae85a605950e92eb25da006f6bcf0bd4ef690e94930dad53be9a1a11ba4291a35b982564e2e9bf2820d06471df05b6e67d76be00da99e80775004f3dd12e3b591ea9e83615508acd24ef8d61cb1121f94615f6136c844497d7a20f0a4543a9043ee078e4f7eaf9c2775e05a5f89a54f6906f3f351077caeb2da9e1e0dd2ae28d04665cd4506017ef614654a72e4955c6a4ac20ce901a81ebbe3c4e27628beeddb8631c70e859e93c2ccf00cd34c62e4fcaf32246b2147180d484dd479d0dd6dba2fe411f867e79921e209381d4b8e77b496ccb063f0ea290b5a916a85359a16e09605248f477ced78162952ad4c786316b40a674feaf1d04aad281b24f17578037b1d755f8ebf0f59bbc8c2ffd9c1559769738f9b9a0e9c5fb27a7ce58ee01f8721859ad5b83e8d2b55702fa17df9bdab3980bfe36880ebaf0d10f623586a6bd03bd5fb8e4e6bd58165b7ef2ea38219e6a6ca6e93e1095cad1f841d8af884eb932c971de5dbc776d08ef897f3d4dae8ce33a912399e085dfe5c3c6968e9c01d3466417878caf1ffbd13baa09dac94a8c652b55150f9fe6e0755b25069a69c8f389b5da1b3b65bbe9ba6869f88752fd863967792668f5c0b4c9e8e68e9a98aa0141e541023086561f0b9e4eb50d90d062a81585bd6b8c1c452991929858d0b0e6b71bd5a434bbf5850c04e2a6342dca08f85e0144e209017add7eb08b9abae18833801c6a0eaca20305c3ac34c3cef461716976229317783b2cd8c8cf29fe45d0fc3ca0ba880064813d0234c7841d54535d5f6cbf465c887060c762cccd43e4a65c76e9fd685f44e7fdea03c83dc2f5c702676983c5803901bf7207ea4d31c7f399577d9c7773481d8da3a09db765dca6aaaaf7d6d72c93d792023e917371f59dfc06e6fd7de17a0b355493b0baad13d69b4f9d2043089fd8209e902905ab768ecdabac8a4254e29a3d2665680e42a1411d7fe4c9d2bb64edb36f841acc8653ac547055aa8d7287b0ec409d2c7acd8ecd7a6252394ceeeaff919da2cc90ab93e1d97b6bc427e371368bcac366c7f6e264f81f71d879483af4034f72a719c23e14a3f47642d950a81562ee607dbd64a6ede1dfc90f20725bb651ad7d142e725d2dfb04fc8b69613533b9d2fbd924c0e2507bc9e0440b13552bc3e04a799963f61329d387079fbd1f7ad89e1ce2c4b19c750f0640e000d4313da110613f203e14b075889e1e450d6ed1067b4b0065e0de44e4bd714cc85df6d332644bcf8cabbceb264bca3821f82a1f8d91119bcef4afa54417f9ef2b55acd4bf058f8fa451f8ac864691bdfd275c4eb307f51bc8961880753c6230f0645c2a901bb5e932d9cfdbdb9e7e159f410c45c10580e81b6e1fbdc0533479e1330dbcedcd4644fcea4a616e7e16a8cfef40ecfeb5386a8f23cf446d84f531c46ac7721e43c908cc2d6f24870ce3df57d9022bb43da709eb5e2dfdc4f92fbf62b192346aa6c69c684a480d6e706c20fea659ea29c5552ef9c643d00dd7698d83ae77ea1b1ec56a98e8dd046ad339d48bff4e11a776c93f7f0418a68f492c02ee0c7d7c77d24fd926af34f2c45dd364c78be78874778ba646bfb4659375ff866d71add2c7ebeb51d84957bdc535c1367af32e37d8f123c916a020f761836a81c6860dd55290223a785b4e4fb2848bb46bde2b071d0c1a12b74f6342419cf55bc2f2a86b62ea7bfdcc901f8ed671ba4564f5e5de89eff6e8f07385307be8297d295d837d3d217e009d8dd4647825d5502be064a666c342b28ab48fa8568e8d4dc371a8f42c5cb3acb2fd75b8dfc7643f8a46b045faaf83da4ebc88911bb6aa3458d31eb677c3a369d58608715480ef7946cfd2a58edc43c7013078d5138a069baf2eedad667fd5a0ccd097791f78ff662a24d1ac697209e16ebb675b832f2be891281ebf41b8d1b7608429b788d61b6efdedb544d5985e905c035e0bb6d0a185c669b7d64f952018594ac713d7c3ccf986d186541876c93c92b064cdf393eed8169ac3d9d93f49297fc978755366996f8e794dc37b35d24dd96b828981a09c4b496347b027ded4549aaa44c545e80a38dd8d127b46fd012bf9dcbf27a9203344266b4d4381994a00719433ebf570a7bc3bb4db63c1f5df3ebaaa238fb33b392d765bdc7a2f983294cd304ed0ab27f9647096b2633446f3efe47db6aae718386d01dafd3d7804147a76269c5aaf34879643dc9e63e617c5a43eff815e8ce0b76c8f91b774a6057819341d257248c0d9bb7e2ea84b2091dec691d68b94ecba3f92e8281207ffc2e7d9cfbef201c0f3783ce733d6032adcc5bea5aadc354dcf5747d34616decc64e9220eb00aed5df4eb7f479432744c1f02f342247d27f84787f31a93cce15412045cba9b762068ecbaee65f9c484ce831ecc30eb7554354957fe83b93bf9e1f5c2ef9b293c8028026ef00b08931cf72fa0b336a8cca24cfd50d0d75d6b0cb935aa44790066f7e75f8eecff6ca725104b100f1e038bfb848cf9d1dd2a650325f944c11cc8fb6ceb2aa24c0acb08856101f747aea3b946261eda6a5fc530c76d6919cf4c2a04c67e8c3377f4cebf263277dcc5af315e6b7ada7c0123d9d43fd9aeb0d7d0cd88efe6adc8d5851cd2eecbd547f0e8548351c8e96600f30c5a52b1f0913f715b8fce6bb4e9ce855e4cc77344c03023b52ee2587320cd9506c9ea3c564570f779224b57ca1ecabb3b329874ecd0ed26fc6a05719f33d2d17029eec30953d32ad1474ef016f031f05c8e4914f4fe8fbad03ca25d95267571f283458e3143cfd10b08bf80c1e66bec6867c19c84d37ea7d9aea2627e81203b33ded9e5f49ecbb6cf6d864df289e07708c6ea54c6d623b5c0c7ebc982cd3af9dc4291107deb319fc37d8ca0d25ff959e4b2ab83e08fe4ac2d8f66dac8912b7194b75556f2b268559240b7c089f21c59a333ec72fa862a53c70ffbdc79555a6c04460d017c7cd8a0e2bef0f73ecab241ed51956a3d445e73374e9319bca231b1d4f6a15742cfe9475c00208b196d24d76c158fb1d050e6d4245414d7bafe170aabd0faa16d360314a70d2dc54365d8e4c586c08fdc322c3e372a685f9af4743d31dafe2624368ecd6bed01ede43a382fa3ad114e8973967918d775f98509b1130f1e96309059f23b52a9824b2372ab82ac906a35fe9a8e4c6e6325eca3c73454eda4ab05d826972602489a26299798a38839b48b642f7b81e2d75e821bb566c8727223ee2625e65623d230c81e30695be0b0d599e2bac5de1b3a0a01165baf364792e8339fdf45925e502b7729c685725cfbb7a7a1c4d32cc29410b2bb427868140ce01c6ddb1da35bc9757c72e054b0a32440fcc9d40f327eee58dd33f1272480e6f5f1b8a1d752c145f51f22063edd5e335ae28173e0baf84fcacaa5f02633332a0ef9a7bad96538cc93a761c1abc0342eec9ff128ae8ad7bf4ec03ac8db5dd6e0127d63ad8da46a67375e56970322ce1fde7c427be26cc446cc091a00b069110eebc514025ad9fc1dc98a2a12aecbd30d18c19cf4e22567ed2ceb6c200b218bbe8019e042a7ca99f7317404ba1483ec0181b6261c178067bb56af59b1564bedf7b9c1f2f4de40e7fb57640d169e12c10203a3097ae9446db9329c083af8b0dec27e0470a066038e3324a16daeb23ff91885cf6c97c13820eda9fca14359180726b72c83cfa7db37a77e754b0abad33d4bf08378f905262961a1154e54e14b0f2b4c7f520709908a5e4f26cfb31c9734a42a07552a1fd42f1d033135f6f810a0d9254606d3f4e92e607dfd23304250872a1ca32ab2750adb27b8967eb006305f392bc8c6b8d0b0ccb5f1426c0992c9dde6ae9f1f177192d589a78c520b7374f652444fbb4005ab0b66943dd5c776c9dfdec9425ee37933c44bb75dd98ea7a10d2c59210cf2fba394794d3683f15517351c53d50c9df7b45073d24f3ac10b824bd05387e2561a5f0ef90374a10f967c86a836a054ce52de220bdfac9e2c05de594518c965f5cba922eba04055a9a3c07a8858eb5cfdf279e21ac5ba2c58fe7cde93922fbc56744778590be2c748e3abbac6a3fe4cb23f4d38a96ec20dcc5f2583c3a70110027f02b74a2ca22173be04ee6afd204d76a121cabfc10b68108ea1f0dc4186887f52a287c7ebc788b39c95be7a509b87cf80be4364a6df66adf5b8cce647074d5757ef92d7309b268fe524d00083b5214844ed49a005842f2afa32c0eaa1cc8611f4b17d82e364238f017acf037eb743665574847cc643ea0f07d673ee371d5c3693aff3d0ec6ba73b595f618c29e917b31b1b9effd264bfe5836d8efdf142f74d9bb29aca33f8d91c539b2ea26c92c2b6ffac3c320f2fd732d6bfb81cb7827ede74821a77a153e1b958f5df4d2ffb6ff767ed091b66ec5a8167949a5571271a7285e71ce01cc3e89ad1361c955a6d44ffbca8aac4bfe27057a0b4dbaf0777f29038a9480b8d91164824268c83d52e695567a3ca35035a3f3ee8e7243361bb2fc0f48f4502dd06924abb8dd81e88860781cea70f75189cf2bda7f41de7673af88a2262bccdf2688528fc33a86f5bbf460c5b7b218be8f0af5d46a46dd5023e767728ea5472b6ff166b51e0a27c37204d7d75e9a9825a9e9ea42bbfbd05180dd00e6fefb6fb10156e9a215b714f02f0455c83b74f5f55ede91cbf0db47d92f02fd75f39896fe7f0b43dd36dbbf0a6785532efaeba2cc327b54d6a55fb47592fbb5b608f76d725d911ddd1de29650900a685209693f18b922dbe9561396b54129b21dbbb253ab118ad01827662b815cf60e07e3781b4957676f7a6f717ef6ae1f8b236833da073f5af314efc0ff1b02faac871582d7fc91dbb8007e03ddd85e3f994dbb0671253b83ff59d3ad716c466acc761c33e590fce22e21ee4523c8c61c751300a4a9639a887d6d7f6633138bd8f64b63e5d4b4fd0d3a455caff1566a389719f588f370d0eac5b64f95a49f47c7b28d892325b716cf74e135ceb6ffdf1687a8f64ddfab732d90dad0b6567e0eb9799308764935deab668bf60be5238938cf668f4dde91f5c347218f32c92e4520c4124e49cfbfb92377bc39f22c7ffd01c6c91d1360b2ed4e5140e7b56d2e8f801a81d73819a34aba30e86e1bdd43af2416574c39168cae1157bf8698c2fd4269f5484fabc78ee7f21aa70ed3784d13f226878919609dccdec2d3c8675b290240ecfbf42f49d1254dad6e98d39dcad00e8fd0505ecf54dde91b4449aba62043a75a13813d2128973f61a59876be6b47cbaac83e53c34035d2d98766d024819b0fc505534fede39249cfe28a474a9cffdc1fe5afa2dcfe892e75f3cc6f66ab5cdcd66806f1f090caff40bbeacfd2de7c9247af30c68cde3c4e893fd6f3dd2c1da0d6b208add9ce95b27c88467ad7be2290ca9b4e39436db3c57bb202e8088261fe7e59c4ee29eb7715dbee09d2d9aaa65a11106 +MD = 28910d06fc00a2c4c1d7b85a5dfc8ad367fd0a16acf00d34cb69c5319e982469 + +Len = 101608 +Msg = 1f33d257cec48643335bae43079debc710094bf0f481c03d4b06d166f7c49088b84ecc83fb2a87a0f390aa78eb6ff811dbb1414939c0d87811494751584040097e24d7bc4284ef0ccac2f20bf317c65be6d7fc93ecf64ae583cc3bfeb115252e983c5cc94bd9a5cde078edc4c69c3bec5903e496b42cfeccc6171636a94c263f2e1ec173bd31912b5c3a036d0d06410e5dbe61193a69db7505b241c1e8eb2a836a53708240949b7066909ccc6f5dbf071a8edbe625b5cb276626226717fd1b437262cfbe7e0babe2280320ab95aa9c20b7febac31e18b62b11f923f0de87e0c76ed348ee1c9da9cbc71af7d026f5c2a15c936679cd9b82ca2fb6ab23e4936157872f41dcc5537d716e5e8a03cb4418d233d747d0d9451849e8e221c9d228863be4fc244e1f330f1d43553f0e2ca186fa6151c58feb1f60f36307efaa4f4f37baafc5580dd24847166e897fb8f013f46311894980aa2f420fc9ac7c8e040f5c1d0d0f45e187970ea61882b3c8c0a34a5369083969bf7fa7e4415a303d9870ddad28645391e62a4a1369c64107435770139155ff13d11775bbf498737eb47aa2af284beae79608e5a688df933d22394febb2f8014689fd96dc0aeead1b0036936e354d72a94039c5a79e550f310451cd22f47aa9c98f3bf08faae446da23ab993175f153a08bc6d45ed2ae1fad92a5d3027e625e668ad96d1cfc03a684c6e19a3f13bff59420b6f8124d742a7774404ad1793887e322ddf4ca29d236e190e17fe1353fc14da6111b0d362e9858512718d80c858e0900516ce359da5cb82ab2315f04fa1d92c6df2495b665d018d164275f60cfdaa0cc3cbfadb3a181d23b5c9701a777722c2829fbf3f5a03c7f9dfd5dae9ca1d3702da7d47160b10ef86ce8980f463e29e473f7886f1a6743555dfda40ce980e140cc999376889269f0655d1ed00bd8a8804f4fb3504e424d61b869e3c36ff66cda511ae40651cafc82cdc3108d1ccc59c8663b64e0b8bac26c574b0219558adc046332af67e6e32e784d23558ea1a2a3865dc2836581560b3ee2aae857c4c59987aaeadce26d6566998c84d71bc3e3ed80dfecf828d09f8e9f008f7fc4e32d0b2bd04953bf0fd60eac33ee7d7ca916a17f92c2ab71ce1cb4575901aeaadb4c9bb77a58fd46f3c08d7ae9692ff87dc3264b1e4b8488a255e52d96085d4fd3aaaff5521ec0bf42aa4bcb57fed5d86472e4ac2c906cb476d28aeb5fac74fcf4cdb1ab00a38571231db06624b4586588ac436a6497493e6f1c09575bf6dcf9663f07a22cef35a5bfa02415f9949ee411f8ab4c6d6a056eb7bacc3a33ed7b8e50881ba27d0bb6a33dbb0f9e7ea490a027df841cf011868c7634395b8f9a3a03da2e53739bfef2b3c6f6d9ca5aee16e0f0e836a09492b6e0d313ba841503019f2ebb19dc2fd0cf1d82daea61367a19eb979b29a102f77bb2f7ddb67b7032b9ac71b7d4a6e189372898eeaa2bb94e7f0a4280c5e6e148bf490a1d9509462f4870cea8eb995832111d31ba82f08c7432851a207339da8b69ee3358bef6400098346b18c87d3dd3454474c7d87756f418a44602996095ca61e99a189b0a05af903f708ed21a3772bae58a9c1589c0d41bafeeaea124b90c8f8268e4930d3e4417db06937138ef195a489ac2a2ee721e22ed3cadf14dee5adb01c5450ec692c5174e55ae0d9e0ccf0cb5cdbfe56e13da14a75686f3a3debb2dadd8c274feaa3c77e184670e15379db8734b1d48d04b0edb2564c10dee2f376dcfcae32e7d2db01fdcbb46dd65188946cb3b6332dec4c45eaf8fe7a9f589d683afc230a20bc42af68724d4e056569e9f05c51a0b5e2303858dfe7f2e8195a15795e932397017b1e629e49880af9ae1a96913c93a1913d43806db11045afa9fd1c967705b73cd4dd70c261a253a8b5c4d3e4af829d73a3d5f634b25934861d8da92637271de8e06af7610e338bdd21674ce95303f604049e2ed784442137255583a05c1e17704e557b0ca7a1f011617045f1af7e47bcefda9e98af57b82d41d350777e41507d5f1b7027d6744ce0068e73a01d880f28c639da2a9c1a65e30385742de637355a933b7b351330dec381003a773587b8b2182a45ffb2f296f2dafa83265c7652b29b1400d6d65e422651742ed98013e0f3662a767abc76d7d74890e213197524ffc753856fa8530392f868a56975a2f45720c8f03df11da50acce73556d5ba28acb8789d71f1c59fa4064c52898ebb7f77e87427bc096d9af7e87be173f9cbca43eed19d805b1c72a3db9daacc53d3feb01dbaa1775ddd06492bbd7afcfe00a65fcb1d2a1d3cce194d18db12a44d72deaa411ae1f266e28358f72a66546b2f395aedb9a79b2f511ffa2e932ea3d41eabc0f3035dafdd24aeb1eb41281cc97dffbfb715baacab5bf3258d44533d904df29e94029911f909c4ee68a054a881936608c7dfc7a429351f69c57d24f3fa773f9da4a718cb730882590fb6709a3bf618c08066532431830131679c18499b20df38c54f513eb3b753ac3101e074511c64718157e19f4cac4516d42fa1b0cae17e1a4699d6ee338cb5328d013899498ce5964b12f797e34757849ba655bc222f889cd8e51e4c8aff13966432edabbdbe18993e2609808dbac4f54eaeb8ee39618b3adcdf9bec22851b426715841e06368a04eb0f9c0bb49cf9f33d972fa9692df29ec2d7d45f82c528b106377052cb6c9673c24e237bf054830918fe3e9049fb5b233b7c5be93425c88cb20746fc65e6ea3064503453b977dca141527a1554402152a71b974baf3d77100b038c7d6e3bd1f531c44345788d8356472246bb00a2e1b786542ae96c62b0f561caa5586cb20a2ccaf8e4a3d5ebf382aaec48e3d78a18cc59b46b34f43c12a766bb160fca0fef31908c7d112a49c9d0ed2ee542616c330bb19aecc0cf2ff8a07a5373260e9bfdbe12fd90f01dfd62ab7e58a03906cfdce00e96341f55c4ef6b2d32311db2fca22cc2aaa4d2f99d5a8ceef7fe4a503b5303c134c5a340817371ffb5d4695f98990840324d2c75901defaf9b73f8d62541c189d505fee7ec015f528cc18b5cf63ecaec22ee8efa8c296e409195c7011435b3b9159974e47b358dd5f5ad16339c000f56dafd5cf0d8096342a8d827599e9b54ff64e4b79ea56c87eaaeeb8c9c00892fe0e91e29110a3a79161fbfac481adf1f9d516c39aef132d811070140ceba46b74acbb575a399391a3b84b0d8651f9d9e3359b47d7df514e8d9ac92e5743fa53fd50157c5511b81c13366500e3923433b51ec41f584177f44b4edf4ed04f731241018798a71f7b1089e3321e02cbc5c816997992469defe762369bbb9f97776feac7f9f57beb4234acc898ae0c841660afaca2e9c97c20ef7b5ae5bfeda36f339daa53d9f7fe765125ec80f728458ec32862286d086472d43ec0a6a0e2fcc12604b37d8d43df802f9b58d3427f9795b828c0f1632ce04d5d5272c4a7a529d710c7e95f598816c696b71277d73901930857d0e6165c7519546078291c5fb218b98e55e284ee2cb24e212456fe7d0cf07b5f99efcdc1ad3e7f0fd8bb473720ebe900fdec589ca8ab1e809557ff733e15d9e523f5cf830f24a6089c646f56f9ba67c5eb661bbb1218d07d6e6121442268ea9477de65c9233493f3cc0bdee3c8ecfc8627391672f3632abfb65eae183d5276119c94d7bb72d40d776e98da0712e970ebb74b91ead2f3f5ef7535ec16193c44079afd6d83836ddb3c8cf2acea61188b9ba586d44a3730f8b4b4ce24673d8c1d1c7a036f46de68c6eb2d039cb33ce3143ff9d126bbaa82fdb77a119d3231acc9f8438d242f0c2b962c5ab2f18b2cb1d57eb913d165b451ca9fcfe6a1a07e021044fd82d563942013a61ae7f599b8eb9401ef361b6fdc052915bb3576d9abf8baa8b0ccca0dfeae0402758aee0668f71a6fa2214d02ab06dfc147e6650440f48ecb65524b53d33c33e7738425f9c43e2f71dbbcae45a8bdb74a7ae1b64ac560555624fca05d9a3466fe1dbbe29b55289aafa1ef88615b9078595d0eb1d2c3a3d7f0f3b21054dbfd66ef7a186d13a21e25d0fca2217d4ce8e995f6559ec5c225dc42dc5ce4601ffffb6192830d8a3386967df4bdc3c2042ed4a74f9fc44a484e2cf4e6e265a8eca2ecfc6ee50b2891c9b65d9228b4580ac8ff3670d26c8adf868ead192cd855cd4e03691524af1443504d19ddcc3c66e62032eb5fd8deac0e35cc157e23888e476b06508f2a4177d1822358de8fa514219c376e269762d95ec3acd51cadbc7ce461be58e5dd0978c4c6ffc39b5a358c42a6d566cdf940395598f795fcb3bb472b98f32a1e274f40a386ab011e1636f3d1a5d37b5ae5bff37d1c74fc241ece16a4796d6e42ef5af6f629edbb6fa9ee745601fa56d74228305eb8edb39ed43d11d86af3cb5a1d73c346178e9994fda6345a21129f4bfac3177ed2286272bf50624ed44fe96d98e2cf19b7564297f8a55e656fe3fdbff4d8d167d4efb0a6c64f2e8e204771834aef41fa730c5f7f843518fd5234193a18af85a124084544d081a021b4a40ba41ae2426eb27a9755889c8aac32ce9bc44e905cb22c3bca53c72fdd8efa2d5ed9f002f9ffdd669320eb23def9787a2a657ec27e245252e7dc92a1105d58ac1329b4988f345a99fbe89712396c8afe6e26908e127f001343e6191f5f1738e7d19d4eec2b9592db76b673b1c58ed122110e6c3c40499d48877944f1f24301a8413ca746f6abedf3ac916747aae6b5b0b826fb14320c91b75a9dfb5ef2691bb50b0ea5ee18fdd4ab46815b1e10fd9f6e0d75235d0d4f4329655b26af8712eed6d61b312bb814adc9ec8e377c1e59f526b803cd61fc9b1d6550baad2dd8c5e2d54a6c3447fe76e11645c1e3aafc84209e61d8e26625778635c2c3781d0e0a5f791008948813add95afa2148f0d306899faffd48b5b06be65f637d6fca5069cd89d0f73b371f41fc5db2b64c95cb6597f04a79e996c6ffa6acdcf07b7bc76b94ce31420f9b49b8b1e61689d8e30b2bb15bdb54ab508fbc2ce4d52482779b971c10dcf0fafeba9c62bfcea1d520bcdf41a60a96782d3229e1cff5226d07f375cd167909e3a69a7476ae81072995050aae9a7e483773d7cf2d34e5f12573f78e10aaaf96b1dc10c9557cd7c1be8a0f3360ffe072d06ba83479dd4d999103d1694b92269d4ee8442267f17ad97a4701e2bf9dd71a2a5dcae22b90d32398ffa68fe8978729a1125f0713d40f56471304a0333b0c4a2f916861ad16229624aea1864d817a3f92a28900c4ef41410c3840f324a32609c64ea8376537e0fa1c59e7d8e418a6e909dfe996df08b5a1b1fcdc66fa9bce60d7deb2eebdbab6576748a30c1324b42eee13a850cde8167e1da8017e1decac554b87af0e1b694bb6efc3fbab446c4b172984edb7f6570ae13a83d6c5f55e67f30892c71de90a481e9b12173cdeb914aaa37ae151c21c39d1efd784c2ebb8a83ff74721a58e665498537c204749d3b7f1423faca99a014d5624ea32fd65c4164300ede62d7245182bff4a3e55ec82dbf4ef1a7544e4cceb78c10609ffcc485a060ccd3d3efd6f3bdf88c598ed318e28ba935264ac0946bd40af71314f890d1b9001304f5f97ab66bcd43257977fbe484b1430a36872376bb5d473d17502db02eac95c4418a8c241cbccdca2db3fdbe0af5cfc570086679ddf195611faa179b71b4a9a43f1987d7313580aa242d7ad9bee51feabfcac9dfac766601a65cdb1e12b6e317473cfa2a59c61037f53b0fc1e11dd7dc5e54ea32a74a4db143eed4928231b6b0025b6f97e6fcd10609732901420e7c3cd43d33fd6eeb90d270e6b0a360a3b8e0f8fb34ca79386796d94c53123215616ec9ca33aa63e8f3f795baebcb0e8b5e3c83a2f61c7107286d0d4d2a6f31e14bf497a265b416b0db835b01e2741c571b254ad930187ef7b7faedfbfb82d1e08050e64c46c507d1ac2819223128faa5743db7045f48f3788ab323bf62f792a1a3260e3e5337a7da0a3858b2547429e4fdd840caf0286f080538172ddd37e49328d697ef17a687286a46b228c8c03aa41c9770837f315234dbfc60cde6be583385d51bd5007c164b40d58e0c0aa7ad51550ddec478ee3d7d637278f60c155e014eb40286aa22e5c1126764b29694e27b3b8de41469c99140303cc85cb9b7769af7f5d48a71557608736eded309027a80349a18e9ce5dee2bc6ade7586c2f325ef60d0a47027e37bfd87e54e3be9af61ee4d4f5bb0315b4ae9b585e8fbfe701dbdd8c2c42b9f7bb25c5f85f4b43a8b595a0a0f31ec48b753722de86591169657022d5b314246c60f8a07f569014c669831c90a96b7f29b063f173074b0d40fdda4a8c2721be46d9970c75e358ce7e62759d2671579f6af6939be849dc0fe80b78d91200f20411758f6e6e8debbd2b30dbc6d4f339b1d9a8746690d69295d94eba3309c91b7246d5505aebaeef8d7765240e2ea7a832f05654f5ff35f54b9f183d0cc5f7f4a5616978365fdedaabcd7ffcf785f719af4970d3de95d08a7da3f86faaf906140a0bb265a54d861384a7d1b5079d7a04833f986f64f73ea8b8727fd0b1f58c001c8040b70c374d40c4911aeaa2b7990f6b6d2d864d95f8f698a50efea65df22f596984daffaf8cd8d813ac1c7d76ec80a43cb0c6ecf467fa7a964647fc94c1284d420f4fd408dd523baa15a8ec4ddd0eea38c28fb785340afad0865b292c7151648430944df5b7336bbee84e73cef31089ebc37f51dab5ce75de6f86b0a7ab513bbaa936b1d892f2e4dc844ba85cc72c2fb033e4306795bb983a62892778b79e3f6fd9a5a4340917438d7a4efe89b1b83840b47cd7be3c38ce5f0fa0f2222e9eebee327f998a7226e44c4ab6fad85b5b2ff79597bc4111ec74d6a78ca53688e9cde04403066e76985383761201cb1c7b935f87d35282cf3d481bfa9ac5284ef561c09f0e7f327ee21ded7cfeb7d47d9ffee2ebae3f05ccb1a4995959b669f9582429a3c0689903aabfc4dfcb8177173ecf1c3186d65c82d016f954580d8e1068a165e2e756e4ad4895b40f17033551ee808609fbbcc99a1f1b966c044f071ccd461fecd1cea7c4425c359b4f9191b615bf9ad58b570f6af52f1b00ecdf6786fcaea2121e3474e13e6fc404f3d11ecc5ad8d514a449808e08cdd1d3805321d75d27b7033b3cbe9c833cd9cc92363f0d1468cf57d4e8bf7bb07465345d3ec896856da930a72c075eb76ff162b92564e0d8fbe40fabc92eac92cf3fa3d1e6be3cfbdd031ae0a6c1905165a557c74332f01eeebdbc877f5099061aebb29d0f854336f25f2286118fe9d7ba602c4b042ba36ccda6def66fc7d9a0f3d3e10d0db041bd4a1807f610b4c3b0dabc40c2ecb183392549f7870ef6e6f9f692afa065c1a0f540c80bbf18f2a673431445bd6167080a621196a7f15039577fa27ef5ac3bf97572d9de5f8eac0aa58ff29b9906beba6720982cd7ab7659601b8dff8b4571a3c45cd7d046065378be1de1c2e4411b12c5cd482aa481dbcfaa46bf71cfc61548586b4c8201048b7933796c5c3da51e99ace49c308d38f2f47c7da1a641a2994fb82aa2742f0db6748c2efcb7f3a73bb792f31eaef0255e607d4ceeed6f6f70324a1774170e8667034eab1d76b4cbf504fe754a267bdb60ac1320f1b7d7913c98b4ce2c0b4e030fadf18a3908df97cd0a75e7a9179ecfbc3fe49654a5e89c40db5e9b54916c0822cd0b28e9fef27f46306fb6b5f2c786d3845819823830f54f72ce2b6879d70a42e8f223aab99bf6d2ff628eeb5894751921e426f4df3f409b0779dae1f51d8de29a4ce6f5d91aa305ffe4dcd3b9642f2f811f4b371b61e2c601e8464bc3ae178459820f55de1ce8519a7d0ce985d519793a7ff2c36d577042ea9fda2046171b9a9f17e93529115b385771aba74e65d878b67cba24557e6db43a1722e9fcd71ea7e3a5213e4a76604cdf8935879374c0b07dac0dd454452f7c78e4ad13686ca53ebf8033bbc2da8be16b2a3724d5a086b2f8647a4dfa4a5a1e1f6ed537195623c19b5f9d4822ac52a8b2cb3ce985777ef2cf5c6c1bb80c621b963c37cf70123ed2ff89ca5dea7a49051ee2936033483df26afa7fa80df9dbf785c341471d2f4ad564a547876ab2d3893806f6f35fb1382443a5018d6ca12c3466aa8e28611bcc6b6328913f53e4869776beb44d7b40e21af202be367480d744a1387afdfc5657e7638a33f0168dd6d2536077c91655e048fe99e22d861761cade2394323f6d61ebfe40ac44232d48ac6692ade0a18ea730b1b139fd41d3501965c2666fbacf7edb8bf266a62a31509828cbb34ebd49ab64b40f1200185326b2e0bb6e00ff0b0358a5060f906c4893280282444dba2561478dfa06e07a056a49d76527806c9e93c5c1f1e38d89b164ce9c4ccd7838906d7ba8188518f7787f30a2560f889408a4c57b5c9f08033a5a1e4e91bb48b91924538ad11904110ae9f9da14a263f5c7baba299cae9a6911f779a1e79a59ac2e2a71beba3f5c475b4f1807176cad125a4a1675387ebf1bf6a1733eb4e705825df448ac3a646c1ae7f31d81d4eaee6a3ee78cb6c6abe09c470c9d6d802de6fc16f66aebe824cdfc1f9a7d02e389927df3f76f86bda2997a817d4ab6efdb7849e7b53af639fcfc7b8099a8d2b9e523be081e516d83ff643734982db34a8c342c5ec54b43b6597209a96543a9ce7a2ccae9a0b4c3c00ebb42eed198eb369c94e3da8b1e5cd3d6b93708a1bfd097b517f527431c31e87d193e1ebe2eb71a993530e99b26ba18d14c841cc38fefbc227fed3f59ea3063b6f87922b251bf8d1e7f741a69f6e3fbe5b661544f366fa24ecf139079c137c848f394b942a46d0478ee2ddb6bf1530390616f5da935d8c0967ff8d91713b09caf750131038927f7550bdeab35b89fb65dd7fe776620a3bd961d1d67a664434757075f387982a8fc1f4307184bbf228a9aa4af600a6968efca20f1cacc35686edc250f1df9334889544e2781127773f6f331e2760a8290ddaf260670ed098869bb58818016fd9f058067c0a42e740c91e41a4847eb0e941db196cc088d533bce511c66dd57440517203a52cff42764e1d9c8314420501b168dedc2e02194fb0349db1fa43ec92324b0306e830824154d60c64df95f197e6e70a58ba64e512ebf122f2c6341df61c4bce4745bdedc865b059efee5dbad466c265876b9681a7f4826830d98e509596da2b0f4c8ecc3408134acb4884a9dfbb5fb71249813534535137143c3bce962860e306038b66acc667a9a1f5f006e16c28c8a05c0b49e291c45746f621dc225a45bed5749d055925153c18fe8b1901028360daad1d04d835458f6d0f2ac561b5f18424a7aaef63af83ccd96a3b296804da466843a0af3fc73ba931903dcf7ac0ccfd9aa29b6df1ec1a208b41ea803dfa9443f1267a923ecf0e6b3c80414496033ff1e06f59c72b634202d78c7f64a96d191f1d5f95f5fed6259e33e7206adc07b0279e16cb453a9c64386552e21ed4e4d1a296f5d720a663ea0ac1cdc18a755388687b9dd82f461fe68bdc9bfbf6e5e7249301f02a5a5fffc4768c3b0ceb8870307c1f0e6acc767532c3e56fb23304fe7abc095975ed51311bab3c38e9d73ee40e2b33706865f325aea827d7ef1f5bb23be35437a01fa38158727acd4094bf398c3d5fccb942e5b7c4014bda9a000f8acfd18a9292397e77e191ee01f96b32f611794a2947ab73b3db98f8819b1f4b0f9e4e54723582099c1fd03fdcfca4bfa404a89d8ff9e8c5a25a33d7d3dac435c711225ae070446d777af91566318790cacf92ff07b740040cab9b8fd83f37f53c8e1443e32bc5d1915bd21aa8815ccaf0d9ff199769fd58773598c998b3bfb4f67eedb7844e4f5e702825f4a9d26a989f8ab7934af765e86d60f22d1c1ca59a7c4a7560cac2283b9e4bb84b710efa205d4a8114254ac1dd759470626b6432ce555874e3bd6d9892a32a53c8091b548ab58127443248585e1839db118d71ab790c12b2eb6538e988052fc01278e3c0ff2c976fcc78da7494dcb7fbe18b2d5bc226dff61ecb0b61474ec0c6d2c64c86a74cf42254ffe95ba74c77987b6c7e89d22d260a24f6cf4af705472cb0fc40eda99c010883d05b56beeddf7a86384e7cd0a951b4a6ee6aeabfb32bbb5321a63e2da424e802f21aad01495868abf7847de520c7bd4cbcc68ac8dfd43b643d65c25dedc68b786d0ca899e74b2c92b208d4391cf0edbd67ca713a11aa748a5967be5ffe50ba8e4a1b8fae4f1e8ce271c2c9f324340ba2f75de93cd2152d6e7b937d5b5f283bec902ea9670a3b51443a9aa43cc1fbe1a2756938f6a87d30b8aed1467a99b8d639472c3fed9f08435f1778ac3b79ad3566e8d5a7911e4a430ff70960e33367551e77ff996896ef29dc0f442a19d7b2d09558897e35b9e42f1b602314c0b59c7e42298effff7856cc622ae666fd60727ad8cd6c050903b3bb85f008aa36a8c11b4e65c1b9dacba7f59a7146a8109e56fad7506884368320b1f5af9e6a6f933df2e931800e221a496a2beb4c387918c41a39e86442e3c191d712a6ce9b93fe78ccbc97b348ffeaa4f4bfa1e15d615625a0a79e498839466ff785dc8187c971da706e9e42ad98c5205afb99eb61f0e1e255c879fd9e609923d7f5599d743a75cba8a84e15861632256689dd538a4d406101458169cc7f4213400b260bab0e91b33a12b0151aa0ba1bde11750221a1fb0c6cc5be755abfcaa9f96f4ab4746c4efaef53cb28b35fe36a8b3a67df6d139b4a5df1390a8f47b84cccc8cd7f167c33088f14a837977b387a35adbdd1b8cca7829e71f90eb44094637fbfb853db68c845e2fc4d2b0f1b3eb4a3127fc248f4a71ef5ec066b11d1e758dbfb121a0955951aafb4c4ea63677f7e9f10b39967b223852b0a6907ee233792a825e3bbe96d23edc0e3155edb888241ef4f633e5b2ea41f087429cc935d0f79aee4341ec3d8f927db32466dbfa6cf665c7896986c91b15453d24ea047a8f475b4e10c2bdfbe9f31c949610156e8ef53ae335591e403d38cd6cbe16d542c70ee84c373ca84469e7152cf6d01e9776972ad27a71009ab912f5708e81a00100a4ce43371e3fc987d513d6d7355c07bc52a21fd94fe25b273a59f316e8f947d4bf79dd90f5e8dddc43854ca7ae5231b8ce2d15c24417e3f015676ed78b4579ab958775c5423803dfc8e5d8f8a995a7f450486ed60c25c7bc4aba3e410719390ded53965491a1ddfacba2163ab59acd078f708584f69098e430af0bf3dae8e8642d7ad9bf42cabec5c2668efe60d6336ad231f44f91fcc9f06dc2326085392a56bc799a75f3f748b9439fada429dc5d86df0935967caecd6968a05c07748e514e30bc630923cbee5dd5b9ecdc8f11bdf3fc62b40a053b25c7a7a5e369575cffc320dfcdf930cd222bef41e707ff1ac72ac0db0a1aca366593a16f62f67c29a85de33025c6c95f869c06c406a6f86c2ba3b2deb2394a150f45fc59454f7188cd671e7a24e25c177e2692ccd64a096a3df748ea16f5f34b75670ee024d4c5def187390a25dc47799b6449a8c051b0a9808df989d2d1546e5a7f5fb06c16e7b09726a95cb32539fa40dd61f47f6e7cbe95d05b4a604bfbe200e775369596658230de060e575d920e10ea924c4de0cc0de076d48839c6483b1b37d5ef2bc3bde84115c58b8ce5fe498e2440fcc6693d0bf2e9fbefd9e0c7fe0bf8f846b92f5f376a567e50be3ecd211b02f49273683e5d3f9247cdcb2bf99f45a352d9a859d813ff1886fa85f88d293a1f33b9df5e4e6639183ece87f86b937abf8c1493b396f281e475e55e83bcc67dd174cf64bbebab71e4474e8ae68c7efdb5fa83e5cd4a579542c1bdb260ea8d68b23e3f9e21a4b17c7f07ea6e66eac6511f34a4291730b7abac00c02c3084e26d49f6a705fff80cbb40e71e8d09f4ee1763a101c82208973798a9a916432a79fdf1448216d76411a0e26b577140396aa32be6096d6e207abb8122d52b392998bd50ae5d4b286764efdc0b21b59a26c0a6c07a37635c26d6ba0e12e0b58330d30dd07a953d63707ada865d09b4785b9474d9b428549c6a3fb597e0385fb1aecd82095fc658291dd80389c77c187b363aafc04a38bb7f891a30a71168843511cc9c53b46d15e9dde0ed4ee0f53c134547ba1ca30502a6020abdc43cedcd8df874bf582ef601162f3a1a5e2001a9c1172026673509b4805365af67b924863cc13a8d8f05fda44e8057fd300b2dec151a78771896a35b9efbcf980a1cc958c20aa26950ffe079e38faf185d08d67d8fcda51ea94e8e726269bd0a43ee38bfae4330f556735aec859bc3fe3dbfa7c881bf3a9fa1a317737b3b92788d93ff2562096a93f7e6a99695331b116a85fe779b4d9d7c9a5adad939d004654fa489247dabb3d7cde068e2a2f438f46bf256e54d276237ebcc453e3ec577431296633761c8a12330f7256b3f4d9209aa9b5dac17ab1d441e8de2fcea8a5fb47ef019c8aedeb728d9715b9abaadaad3bed75f267b672343caf630bfddad421bdd381962c56c6a3b200567eba5a307e5113cf80ef8da189949cbbad178acb2fbb5e4ee9045d03eec9d29f6f890bc2db03a42a4a0008271c74344eddc5be726c6b16d05db90d8a9bfa935752c0c5780c7927ee1a432dea3502018565af80b122f3856fb9f46b43f26fcde5f007903a58dc2482b66006d31c668ac60c7cd770977b3394c75c81163b4d07b3110475f009542350e6fe9bca18c9577a99d5cc97152ca7a54d9a56ecbdbfca287c627b826508adbf74c5f2b87253f10ad561650ee22d690c1455f2abc1eb9dacfbc7abd8b5214937265f1583732bdfdc88c9acbd46a7012fe4365e3d8ff908a754dc0bdb40c68020c6710c15607aa95a79b4a98d8bc2f87885e5a1886f1293815048a6715020d9e31aa6dd548467d8eb72cb6364f7a5d44ebe09c376a95ec7a3b7b381832b57dce6eba3922a261bf3f639b6e22cd4792018584acdee84042b7351c7a6fa1a9211920013337e8dbd82e5981c2ecb686561401c52c6d7492c485ae6291cbc65f9014f239cc63702760d1f54a5502bfc92212dcfc6b61b4100a4c13d84ebb354b533861ae6553fcd6e1d0c38fa4f32d728e7473c51a5a1b1a5c90e1f7e1cc52fee2f9dae9ae77d36cc39140bc333ca434e3cf62a999c51e4463fab54bfb5dc3dcb7efea76085d985b9ea9f94a704da862ca7a26046a21321098cfea4f0c1dfc775a70fcddf363b015cb7159c4fcb49e9ebb0b3a701c0cfaf163a71d7b945b61514323ae8c0028bf3de28deeb639001b4b3df91c772fd6dd796d16ab4c14b496fcfa8e6bfaaf1b1a366c562498a59e92fabbda4884061d5e1b1d75304b1da801dce907a1b460c96591d170a7e6c30e9a2fcd155b213f4f0158ed6938f30fb43663a7260c43c5a205d2aa53c51b21ce954cda30a0c95bfa4ba5655921de7b57a943bd6ff8233e338f6b6f7618c0426d18e47bc2c5f6cc9da1a30ddb8767e100dedf845bf1dd4b0c76ee996e2f50954899892a32473401a7b7b45f56d619c14e4ba9a47085cc6c8b30bea0925556ab0fabad5e05910babb6d26bd2519a8e9cae74248624208b134e616e2d89473cf420a3c39fc32fe81b39a63bff524110f39ffcf2b20d5e93ffa46d6f88c9619de11a265e57e19043e0ae87a73eef665b36912a76b082ac71624bd9555ac920d4225ab7e01ee75ec99c941b20297f76b806309132fa2a76adeb9329920c0f218a1860bcfb7d5ad7c39f78c54947890ed1b2ecd5b9f77b59a40c28c2c82511d02a43daca02dba2b7dc79cb1a8501a27b12fd245c7e40ebd1ee346b594a3e67b93f25074398b2556b6eac197f65f0426816258589f26ef25bf714d9419aa07749334ca4de1fa9e96f14b6c2886e9bef3235cc7f02a8ca356458fe01105c03c70c911b01ee2a2ae53f492a84b9f15d1f85fc627f4b13fb1b978e705149e0c0ed7fe320ccf82aadcf588667ae88b0bc49bff48814b7c67a1b51f21c6852eb70411fa3ee5470a3ab1e4756fece890f41f46c989dcdfd32afcb104e52b4cfbe8a78685de4470c27cb48983560531f7f86b6087324097feb34917edd93b524ec87d9f67ba3031f1966d4a7ac3cdac083e2f51ffeab55b4428104ea3a8fe7d6e7f10c26779b172e0b06490215d4d410aeff380fa5a4413efb2dabeeef87cb6a534e8584fc3cf1bd8f322c441cd8cd9473240573f2af4a745782dcf9572bee6390f8bcae54293151f862e4ca2ba925a05309c3d9801ce008fa394e962bdcbf37339837ef29b0446fd9210920ccd68ae8d10929acb87d804145a94741b81abc79bda58de3d792b97bc3f51fc47ae15bb27fba7d7a1651c9c1ec6b7d889686748f919905190820ef0a3b478f41a04a16b1a19655ae243a2b1f30e847d74180660d41fb53eb15eb73af91a0de14f7815a4b091538c56c87029dc5c83cca43990f676144e0f69b62e5b0798982bacb178502f8cf9d5c49d90ee21d53d2be0740ef1251fe42b8032793d1557a239fa58d256e031e09ef66a0ae60aa33903f171873b2a68fefabe79a2c66a7fb27500142c9e0ba98f4db2d6e4fbdfeeffbda0d703bbcd1824e4eb34b1e050375146888e8d10f81b8e4cc1892814e7dd18bfb34e8a595557df51ce0aac720da70614586dfd94eeb06601eb2cde186b990b73f28025fd0c4cb5a930a49d64eaf859483a5a841237909ed6f7670cf1b34a60402712db8f38203054d9a98b9e2f52d248f3fd2b7219e2be31afe1bc860716a08d18afb5f722fad8ba91c27f0724dcfa7d4efdf99cddcf4f7cd943f5bfaf2852c48efdb91d120334442097808911bf584f1203f778ca7ed81e3e34c084f2a6fe4c51a4f1ea4f63cc584dcf960b3d22752706b62bef2a17e17fa65d24bd1ab92d8d294d654423412860e113c976f12ed76bf4bf9fe743c4f207d96529526d8865efdea01c15d4c5d1c2a50a22b0750b0885a2c55b495fab941e9ef6d72b343c31da37441e43ab194ee85e5da8a211e090dbd87165fec4f44e2cbeb53731b6fc16b6fee273b7f0622738d7b364340dd5f5d7606bc7edbac8a999024c504a3df19eebf921245aebcbe51cd7b55c4fb014c1df015a89fd8b4f2ccd2f632a5f0f4250e1f1aa3713e4790ffb250b9ad943c27b5d82e6b1187db05f3110a1ce597518b400ad24b7c922972d3c8a5c26bc0e0aacb8acb84925da14ca2b6caf431eb79b53b1f738a966ee4bc749ce5006de5912db584778580be8a2f6240a3491981df2b45a958e17d190bd6689b99044296c0290a51bcee7b4f0836a85b3d9c1adef46606550cd08f25017916412c4e8838e035407ef60fd0739deaeb42f46da4774bedd38f09d85b1757ed142a394f8d6093dade68cd9a2ec0ddc4b1b4622e44df583b53d3da895f6491cad8b32a67e0923d726aabbdfde4bb2a5c820c016e8a7babc6fdaff9340a91219ada788a5810425f944bb421aba0c7160ad2d64c9ec3d0b929479fd098eb2199d59ff6d370aaf57cd9181e9343d18923583a9fbe4fbf7302dab8100b088f9a6cf3af9a90420f2007894657ad270555d4dd0fc4d0e1abd70b43c5ad030356701d7d7fe03b5cbb56925d5cdbb9f59ac1ad01f8d22f053771550d06b35329ee271deb87744f213e0dbfadd227640020510e6f5c64231ad0d6528ee1ef75ec9533f0c66ca3462015b9c1f33cd7160734988b5dc0e757a3167a9651edadd5bc0a3b48868619bae9c0ef4bd5f3475a5b35eca685bcd8273e56d282ee808b0d28bb8167b46a2417eede12dfceac149b7c92e1e25fb6c32c3d3082cacd50e386a307cad0c89f7ee78fabd8e035bdbb73fc0a0cc1442514d13031efb066c553dccb9d6c364b8c76947cd885efb3ae985e59d9b1b5fbae59b0a7b98de653545879f2dad9eaa5b797b916e2ce60b10557c506a09552beb90e351455f1df1b946dd8c95eb8707fb77ecffe38f6e5c638664292fd1c0a35cbbef8f695a00d17fc1093bf877c6a31f288438369b3d16bee40517f2dba4ec95cc856ded70cf2e101cd1535e39a3a54ff40ae56f369d60a6d726c3bd0f4b311e2d6e93db8bd12ff2c1fe7dd0196635134348ad944ad462a5c791d49755fc98804472a83a924ffdaf16586054ff567df47d0439afbe2b45421c0cf38995fe49427b5855136c91bfcf85a6a5f5d3bca2790a0730c77aea31063e60c899b79a6dec39ea416d03df9ed875b2f3b87de0cf2b53193be566594d779655fad1a3182c06e5ee14503e81c2544e42f3a7e50a2a90be0102106ac0c21f8ab2323941c0ad19e92d78c505be52ca771f4cc9f482db32b4892c506e66b786834117d87ad919acac6f13d240e077c35a11a726908f0b999e7762ad5a945532eac852b634ad9748967b8d82d72d58c65edfacc7a27be24be2944b301692c4ad25108adb588250740f1b8fdab3ee1e5beb5302b3138c87d2eaa890e08aa82b7f9ee16850cfa16cb87f15c1e4ba6af00a693352f2c90b23b61c7bd8c69f1eb22ebb02941c7f52129c4e32caa7d5ebf75c4048438dae40dd7de2d4cce83b3b8344e63db54752dd6aa9e43a532bedb75ad8d95a7e8ba972deb1a37d13504748c349865873da2f899d66aaf50379e81742079a31aaf4a1ea4dd9c63c5606ac8d9dc3021c78dcfd9fd35c062b8398b053d76fec9470d180f1537eb5da3d105052373cc4516955a667331161a37a902bb3409a384c78292dcd1827d71f6f781ddfb93b33bff14d1129e60f2426916a437fa610e422690490c6c35c94d29546fa7b4c49b72db6cd262d14deb57c702ddffe30575adbec6a91267da654bd5680ce7018edb86560dccdbae3047e6dbee1e67907f90042a86418336d8b7fa65b30830444af9e2d9883ee1a7e0be5c1238e4238527e401e46f90d37bc957d564c5d0080f817d24e06c971930b7b543f493dda833a6c81366d325878914cb795d0102d2c5eaeba9051b63e6eb3da32b0d5f696a2e74d2a53c615e13f1537932a8f50f24f9bfbbfba21523ef39db2e7dc72bf5edc80a8a53df8ad91d36fde7adf32253732da86499620a65769f28adb8bc6a21a7b2e0659bcacff4e7ec8c9d57a6197e41e41d8c1eaf4b9721ad9eb768579a6b2c518eeae988a15018648810ac4c3afe159f8788d7f4593784c7b5c209134d30e0367e80c9839f69334168d83850174162b28ee171dbc3d4f48ff6541799f32177c427cdb8662aaead05b75a685c2ef6cdef9c3c68b00bee1568e8e410361cab37ad2338328ac3af0a23ec2dd8baf26c9b9927e0193ba1e14bd506088f822a4cb433e946c46c0ad8bf1e8fb8f61702317031ca732fb9266d2c76c627e1f8cc64820af28ffaa450ba50781a823cdacee3c05bec7c08c2f9d02ba0b1d8b42453a10594d75a21be45c252a305103980b8d2207a165130e3acb8cdf54171827f5080d363f05be6045a9f3a31d7f968a370aaf50ec0993495af8577e70da8b97453625ffae60bc420ff9f7ba71b9446ad56ccd2ac83ba805382d4ddf86ee4e5adcce42fbc10c0289eb5519b65488750290bc63db5d84ba097c725549bfd9c73864d74b73a193fafd80c441e1ed7391180d0158acd26b311ecdcd5706432560f9825a28af757d0b65774e578165020075f74396e55079750cd3483c5c39598064e05ec1f766509c8b77fb43dfe3bd2be1f48b04cefe34ee9b37eaea94c9fe8e4326ebfe939c96173529d4ed43902d7823ace08aaf05260492a1bb4af51d9bf45cfc09c7ca3ed6e32c34e03df494d95005c94a10cf8cd720bbb8c444c95ab8197708c104e67599683842281c3c16491c4df0d17e77bccea8dc250cc156abde655ef51a9d2d68660e20f8b270613e0642c4cb7ebcefbd9306be909ba7e6369340d869 +MD = 39afc7b8d40dfabe51f78b41fe6c05ff159796c7e4cc8d26df3cc0fd2f40532c + +Len = 102400 +Msg = 584af1b7aab0ee739bacccaac5058187755e77e1f669e910135891ffd794808397b24deb33a371d9982af25089933f0da0a35b1b8fcb3ea2aca07900ad90181aafcdccf47e8e4a801077eeb45255a4df280f083daedaccc9c5ab5a52cbf2bbd1a985b8fa13da3f110b7a08ffa7b277a5158cc570dcfe5b2e64607e20b92331508cc157247bf01934921b8759111282066f01d9dca09fb27894a72c90008c423e6069f39b3d369f90ab42b5e917dd8bab3f558da882259a505a68abca2794b6442e64d287e1169bce61d7d8d8417c5b3c8d7229fd0af8db5ec08b44f7b6a25409fd9c3c0feff7d395b9c2394d1755ba605f3ff502c1803d49cdf93f3f3520e536d5f87b5bf041118ebdeb207122d170bfbfa438e02e2588ba8998e4c92d753172be60d6946c5b1b61743bd46ce9584402b4893cbeda508358fd517abe26090066c1bc94e2e9afb9b5e6989f65f453ffd146d647c54b67f7cc300d4b45a6441ab9e5f4fe6cf1a4b5321cebc784cc2869d37e73a21c0bd4acbd2ab29d87378e471433f15c5b0ba2d6811d1d95f3f8414ab1634995eda2fd6ad4f429b9ac604f4e1fb199f6d6c011e34af11451d700046a13fe3e675d964cf9b9955be7dbaaeff88169d51306965aa534a1ba435b6ddb919f553b629671272013152f6f3c9bd60de3638efc1317e3e4e834f6b3a4c62d86007329ccc0baf8a88a7d8c98f8bd6c55eca6aafa24cb15670eb2afe8dd936212dc5deeee02fa265ac7d45cab37981a97453a1353613958f84d24cf2b2c5de2fddc1d741085b819fc722286f020b2469d9527af4ff3e9155d4d913dc4b9aa140fa7b9a17a717c39563370f2afdc955a2d857568380263b25fb701e1fbad05620fe63c5f73edcfee32b0c5883092c9bc10bd2d2454b53099c6337ca31730f333c740ab95442137a056942930ba6bd4d60ee457cded35d7305a680b6b6269fef0fd5e102b36363eb78b85a4d2978f400eeea2f94a49aae0e1e3ffb5212281adff7ae772088f546c9b992b3f560d2595ce7aa11d83b03bd413289f83ada0a088c90684da1697a248b4483001a46556597d7886ca606c10392df2f17bf724ec18b668dd4f3c98495a6b6039f3a4e7491682b1fc09c9c4529a99099da8e8f690e42f6a99d962d8712a26a8f11b3fda275347eda9e1a6ff297cbe354a0f665db2759ad2608070a040414ee9fd835b88179933f3355adf66bc69043ea0ba5aa37b516069dc4d4f38e1264ceb0833e137426fae8d497c5c4134e8d3eb49b0ad0e1202eaf7b347e5e87a618676b831ba30cf5d20818d5006d8b8829305eaf945e79f109f448d771bf8347b6652b587ccbbe7ebf198a8ddc37271bdac542e9e0c754c01e61713e3daaf36fb5346a83d011fb2a28a9a432b7c58872487a0baa6e9023f5f293aec950857a969b51c395940a65709514f05431ad3213c8ab13919c3d4a0b1cf73c1958e36b44ef39a0fe57096ffa9af7f972c8329678f1e4f51ff84349880408b3ae9559480307789d3e87b38d1080df1a0eea1a282a4ac41aa61136a4f53e34afe9b44bb349aa8b02c6b48d4f6b0d16ec9925a889a039a50ed4658beecb22277b6b342f2f911eed9c375bfb2952965beba1f9821d6355144c2b73b78972564dc09373980f71fb1ca3f0ec819d7f92fa91a9d42b75fc13ae5d0bba4df7a35123fa03110ae554b594c4a3e4b53e4aa99f7911540905d2fbcfac05a7b3cba69926922a8afc43c1d4e27890e30a6e3c4096fc98e7af4f7083e4d399ca8d7824a4d2238a5fe0ad31ef923a6855f5bfccde9da6710d72d55d22aa4e48a13f8f85fab318a2fe4c743d5c00849acc1b9594fa00016a34282a018e7c8692ba5e744301560bf4e4c45b3cb0c9d19893c0a1fd196a97c50a03a005fdd816f8844eb8f45f175800a1bca4c8646abbf27b99479dc339d411eda9e9c3174969ea7d94e0127a839746c3a9f3590d4fae28b21a18df7dfa30e16d8f69d1514d1a0924d56c15da374447b910c977120522bbf5a7783aa02858b3e828a2a9425f81a51864cf86f49ee974008589aaf907b42ca4e5e847d04095fa0c0a16c350fd4b7ea6e78cde6016e16c188cd65d48e3cceb4e3a0b8f94df832447b848b803a2d1c67ec21694835be6908f7b12168815f7885038446a54519ae30997caefd0fcbf4cfe790f3204ca4371d3f4df5f1d1aae746955156095536796e04cffd35f475e52b490e94f3aee9280646e90af9e5e6c3ff815012aee3153b06a2c5a1af52f59782f9e1744bc255e5cdf6cd880727dbb6b6afc9a01b597f9dfe5da8c2f39211b4dcdf51baaff2af167a354096a4fe506675070328d81d3c46601cbe878a1a92e142e3a88fa8a6c16313ed8b5c56d20e7b437048d36e9914e034c75119fb543fc8baed2c1abd445172a205f703a80cde9e29d5dec86433cf108045a7a0cea6e2114fe52784763528ee2e65cab31f1286772d1b0e30425534804e8008438c7a416406b3dff45be10e7dc0f54c93454dcead5a2b203391660dd8a55fbe2abc372667e93f9d93f5b0cac75f9dc7cca12580e9b5ed5cf8d8ce20bf8eca107ee64557c5ff71a888cb0b267513458185bb0362d248490aa89ff436de0fa94567920c9c2450324afc6558e82fe4d5c3e71c4d3e111a28716a6f4216dd33e4a60c49f4bf2de568c9174c00d99cdb35d51a4b6dda4d3370da67ce1f8a63ff647b9692658687c5fd6e00076cc165ff4dff45d0c9fe2f9c0b8dc747f358187d0f0c2cf6c7bbdaf8d781e01e0368325905899134cb745e5cdfd2b15f2749a6b4cea0f7fc8224d087e04ade1a2c95aaef46ba25fed903837bd6f14da02125b2ac8a801f2cfe8a0f79fe102382511275cbf6dc2ab65d724602d731c4914ab4e76e29f5cb0ea3b43fd61b1dd7ded9a53cf5ff35c7e5be8a4ef8c9dc3eba0abdea019545232bda6c09a71eb720b72c17a773470e2512641344659638e2a4ca0a666db4b8500a097815f3ef272993b22f5d4fb8ae6bc5b7d5cf51258ed9d6f06101bb70987a339aa10ac276b518fdd3b70791395fc2861f9798c55e254bd8e68b63f2af2bc82ff3af901c9ba8167af7754c3fb16752de042347c829475f331250351a5bbb63857e6a510a464a4a948633d5630a0f4254ce3f83636e3a3d6ede771f3c5b8e73bda19af2935fe1ddd2e8b749042b9fbb71e5b4f49d15470e11b1cac85e97ec1f60c6061ec0ceb6f6bc85c9512bfc5fe4bbb149437e06b6faa5f20fd98bf71f8ff554777b987b11bedbc53395df6596e6bc9bc8180e2acf28b10b0ff9c8636eec04b3b5b1234e395db611bcbc284e8ee8fc09f71a5667dac1bd6392d11fc3205e154a8869693078fad6cf2b6f0e9f8d130264a0f25da61eec5162600997ff7e0cb183b84b730714bdc16949559a40dc8e561589482bd0e4d2f670404838ffd01f5fc50cfe48bd56cf0145de17d319c38280827bc3c9cb749a33f5fb360bac5ebea8794d2bf03886581ecdb25cc213891708153d0b3e81166d9159597c17ec6f12130543797462ec7f9e678ccd6d147874773599c992d81273970422c265a84c4328d2b691db21d06d0b7d3511de05d6c2554955a5cebaafd3cd5f1eaffbc93e786f486e1a2d5f794aec7676d11dcfec2828bb3a46f90e36b6bbd015ece3358bd971cf32bd7203303dcaba15b5305802cf7af210551bbcef43eac0ce2125d67b8fb5d0cc22b3f53d6e2cb1da64218a60dfd2569f793dab22a3e19812f5c79258c2c3b102f0f81de8069ac38f87f84c4d7fb94fae5b65c517fd28bea910d353689924dc9dcf4763792d9c58fac5bb8513d7b64507a29ef1167a489c5b1b5000f53d5fb76569aaaf370abbd8e5c7741ff81051a070f7ed176642c898f0be478145d6fcac216328e96bc67eab16352a01455212c8b2025c20507c301c2fa0bfbea08b84229b68c9f95d886e3955b6e61341c48226956af2f21c51098fe16ac09e50847e81991e96c7557911ea6cf2af3d368f2820e0d8b77612e8d959cec3530c9cea7230e42d963b9bc1f22721928d676ada8c1f5df3b494796a2be2be547eedcbe5e899443ed23e768796563e3e887926ce378cd264f0359bfe849179c54b2a269c692380f950b630f387e1899da95bb293b0cd08d2733fbecd6ed0c6bdc2abf5387c3662051a8d0f2f4c2ecb58f7f656507f4cc7e6469c2bfe70076fe4ea5880e0aa3ab00b38a95c606da7cb167a305a2e2d6fd64870322aba139c3ae3cb190ebd7a9733b2b0f45eb172b253803bf2055441a0ff9ff9eb0229ddf8f0626dd7e8f774b6b3a38c545f48e4b9293e4125a1ea43460893eaadfd7258835908d97857b520fdf885d4b3a54d4b2316f795af741abcc8bace4a6261be0ca53c7e16e6a11f07d5c9018ef879e92d58e2533d7ac70a3390ddf521f1773480c7626c2c070e5eb0a7efbfc40b234314c055fc436ce1e2300539b3784287fd3c4f947824c5e89aa3d933667dd4eb8587c33797ae6f0ccb3b8f95ad563dd940c8a7984d050775fa69d55b9ec23a19d40fc94fcf876a8eeddd96bb8ec3cab426ad353691d7b4ffa789012f119a28f45b333a6649d544b06f9d8271fcc7d162d7726338eda2b6ccc98bc779650d83c53f7b7e44b0a0e7ba7904bc809f6b3a297a9f9864086ff42487f88eff422334d4ab6ffdb1aaf13af43599aab021b6ed5237bc3b848b4556510957bd8a51e52369c5981f75dfcf25a5c9e4b5c827b1d2243752b65e1d2dc49a7830bee2395a38ccb57d4d57f94290175d6d45925c62d2e9a2e870bb672e2646fc0cf8cfa38a5c44a4a6ed219d5263901abdc3d465d3d3e7a007d1621050649ebc71d319377e751bba9c699975088659275b9557ed0cbe685736411dc19b67eae1eab7879c3d6c971ee62788296be2baadcf25e39a137cb2f2fd28b22218157292fc0ce37bcf2a01f90c91b561835dfad4a2da4014f2f40d97e4eeeadace577df8313af37b3d96a172970deac459e063c35b1b3504b10dc36f74fb8d92c616543a10a980458e97beb20e05edfaf4543ba382528b1256b11ba134b863f10638408221c25180ca17a1e0f9e087ac5d9fcb9b9fe60ae5ebc75c55ad8b33a098a687f5edeb30d5fafd9325e10680829aab5bd43b3f7a267736cfb565ddc746834971bdfb8de3ec2531daa94cdfa023b55e3376ddc5a37c03e8bce6e617e58cd0084802d311336c539abe93c5d3af38b5a29aa80ee04d9096c46b13b89f561a86ca52ebfedde8fe8c22890bd14a7468a35eda9255f83f0a38b2236261dfe297ad79d9a1035bca49d9b0813bfaacb85c867a395d3a754291f19a2dfb6b3d50ac4efc234c6af2a0f6412df049c76143bb66dd003145bf1ecdca64d1075e236a00703b7812bc0934accd7f1c5dc0d1dd2e4c717635ff3e9b67caf957aec0f8f63c1b1e221e800a4c14848f4ea06e644e5d3e1de592ef5a8007fa3f07171b24bd07578d68963e5cb1d56e45cd3958835def47c9936f9e7c9754601f296bf60f870a2d7091a37f672b989389e3510794d48d6c5dc9f5920aa6f7068104d1da211ceca4afe66cc9938205fc44d610010179deb7c2cf4c556e7697f44ee1724ec24356c532af1aa7487dc3b05cef9dd030158b2fdeed9b6f0ecfdd316c0876da5ac6f097e134d49eeee57bb7bb7621fb8b6f3bdc9a6b0a66547971c5c5c10406516b6122a5bcc338ed82d41a47b3c30b785197c7df90c3c4a73bfab84054445b0ffb526e64900efcad1c77e0eaedac87618146f793a6eb106ede2112c4085f60fc3d6a8408f9df72977b0b118b6e03f7adc8f1749ff3add3132b8ddc3b277d9e80fb526b773d5b23116639b6127cf1e4c4ee4047ecc02f94fde7e61e8cf7c59b04fbb12b9ba4ac9684a7a9d566609ed50ebbda77615499db94ddd6de9fc160e1ee0630cd5a78fa535904027971623152f3f7680ce5f9143140d403265ccc76f8a8e477579eff6ce3f646eda71ac9d3e3db69910f62f5c81c699315fdab622e66985d2dd44e832bcdc535116949dfab112edafe87bf91dc2677e3b56c74c9b0b52839fa49524a5e992c9817c6e6eae2635412577ce41578d7d28c8b799f4a256cbf3f88c0929c2ed09538a6c7da339f62b5d943f7b9c9c6b6e2563e2f142db514c4387c40f5c3c3f967de67720b020b94b9f76afe25f4eb4b10097793bbba8734a1ed81d26506449c0a5001d1629f4e83c933759c13e0121ec26cddaf7c39c454bd233d7dcaacda42e6571decc7518fb74b560cd668d361b86148198a40f193fd80a558490afeac7263ba63c92361f6b7a928d6b60d1600a05665d22ced2b1db5523a7b3e0e44e3b4e9437a725c17ac0b49717c43eaf1185e088bb19e6d2f89079ba94e65bec6a690e0b80bef5cbbd93b95f9a585e7abd17bde825de7a6450078c3bb78c502cb1e8fb0e2bd460995a4cff388fa85ed8e527e42117f0f82b5aa923238a266c39d7238c18939814ded3650cde5234ae2e0c4ef9b02bf1fe8c6aedc51e87351e782cb137b7527a80f0ab7468ad9c7dcb0ea4e57501bc41ebfc135de8692948d58c351a9476d2dc137354e37922c8e443df4193ccb253714f1ee66213a00ac22fca72b818b3af6d6acb623ad4da6228973464d2973e7bf0965956a2cd6f86419bd788224b0a428ee58d55f2f230e28b3382711a3b02b050603fe6887c0436479827c7d181f736c1222da2a467c2e4bcb76e18d34eab7b112b37189bb62a9534a32fd45e73f6f6949f20cab78c0cc31d814baea6389546a365d35f54f23f1d995b74101187760c89bb0b40b5057b182e2fafb50b8f5cad879e993d3cb6ae59f61f891da34310d3010441a7153a9a5e7f210ebe6bc97e1a4e33fd34bb8a14b4db6dd34f8c2d43f4ab19786060b1e70070e3ed4d5f6d561767c483d879d2fec8b9c4e74824ac8bebe858f40f2ff1fd98c416cfc44ef1811f54dea18ac027c90ff1c3397a15574523394158f5cb712a91b9082ac5c2dc9baca5d0eaee56ff0fe543d74e67c6a42c351e712bd6cbc61a85f05682c453a4e249db49d45586df3003008faa93c1199d8c1856c104c95729efda706c4269e1117155b7d262d83ed5c3c83ab2808d2e15a2b760dd121caaf53a07e44bc27df785bda5998998d3a46db1fb870aa0936831236c3db4716e47f8fee930b5b7287edb795b6d4e5a019664581af327966c4e5c58b73c0bc506a49198fed41eb2c1ed7f5ee7b1b548da8b5620c6fd7db4805703ed28ea376fae477ba2c94d0b2802a9edb8caf542c7d6f9cfa66004819d77f8c44b21d6bbe3ada703a6d919ef99435a932185a67b697f781d4376a6e7a3abca29ed32702dc38d59c61f9eb950790c662c139843b3a04c7cdb928b530489a441815deb44f181e5d63f679aa9c269d6630529836ba00eb67e971e0ea75c91e9d58717bcd3aba11f82dc394d79a9ce39b7babdc78cb4f75603bc408112747ef51c87a5178ab093b30628ef37979b289f0ac95ae505671c9392d7a48302d0834e8d2f709bf8a4ec48c6a203d9820b0b7ea29d8b6c844ac117a265a47516f5516e8ddb24aaabfd2d494ad411b3c77de97135b3c9be77b4972ac8e2dae7bd575bddb5071bd4033da91d194b8356e66834ef2aa8906b5e48f1656ccbb24b747b2504895fd0a89ccb126ca854f3235d5e9070f7f869e3b67c825004acc520cad52f8b8131ed88d739eb907e9ccbb9aac56e8f340fc0c80ed3ac6326f28e082ef9edcb2329bcf5511e8731129f877a4d313192557b4f78c5c2f2275a3967521f5de25be5a3e98e88cd87b6fab9b0f5b3268c32d2a7308689eed61504ee0b9f2a75afa64f3cddb4eceb6faa9d97d2ac7b29c0e942304e71b99bcaa4cd8cc56fcee59842d65113f90bdca17481a6571f139f921e1a82e3bad37e625efaa23f147b025eaa019d26db5435bfbd3d51d8be0b0c5259c23b8ac275eb2fcc42aac35dcd704554675d80dc547b2cdd2746b229c0049414efb6be490f8675450c131c7c2493feda5e2eac6c9b018b6ce5e18db2e0fcd9e7e980f88f0ec4e581dd7785201f01dd947c9d240c768d3de4efbec609dc79963b4626c435022af2db2d54b7ca2b2e842b4905624ca562b6cdab3ae59f10ff4b978c149bab782d2fe972170edac79e64f72a13f1ad7626a88faee286d33ce28c8531d6f982df4fef15525af4e272c61290b6254c9f874d65c371420456aee7bb7ccdea783ba607c2e7348d2471cb39ff7073d5fda3474b90d188d5f899e5636af6c6cb72367ae95de79f19f7f92f6e9e2ec9926f4944a59c626c1ade0d7eea0d7b92f67223bc68e29ef8ae09f91dc861244dd73c01edfffade719d1f21e9e03583d9081253f90b2365e7a5b4e214fc0ae96730ce6dc19f2eae5fb95687a4ea55980f5cbd779f5482e4e29d9354b37dddf6bc2b90dd6e17ca6a8d0bfeaf4e6d00309c70fddf3db973845ff21fc167a26cc4a3244dd1320e309b601181f934eca7e606f13e2b52ce87dcd64fd4a8b01e39ebb2b73009bbc703a99f468b05f6fdbf10d53a08cc5ce83256dc033c7b0b45c7c4615101b769f6b62d9137744602f4d8498dd7d832dabb057ae7b8c1c8f7bd88f7458e1d9adaf1ca8fcc50c849f7766618a747470f5a9b73b16fdd0f1303fa1fecc5cafdf46d6ca358c71f118233070ad6b7f4bfb23b2dffa2faec7ed99e6fdf2d78a41d84cfabf301181eca7f440b193c168cbcbc1ad72bc81f738b9d45a35931b48616ac40541c2115cc6d91b9172391696bc89d681b6a8923eedfde981900822ffd53db8de9913166a47589f09fac7f171e6dc6b18f4e7edecac60de45587a741866fa2f6d0f4aa71336c988929366db61106d875973a0176a3e8abd8dd31097f9dc49329aea904dbf5cd7df13833e5bce04e4322c7dfc991f6b248e404bf3150cffd1c84d740c8ed68228ab731376f92088e874795823fc72fad65748064a76b8973bf96ef3e7f5c06e64f49c8b363dbf652156284d3cc8cdb547228c4d3e40646b2ecde5b04807e5e934c27533a8b0146338df22a47083976220f6f467f7fd7a44534d9af3584eaeba401ee652f1d98549d5184da5e6b737ca08dc689e9c3461ea528076043e5181ab2f0fd7323c407be19f079298c7eb17b5a8dad038566e8125d26f5f2a2398c782a99e3019af6e5ff13fb6dac43aa89eeba8fb147e4c3242bd7b203eae2face90858d2d95072ea97425c2d0b7268753433af441db8a7080c79f79dfcd889144d05e1b3bb1fae3c8d9c9f730eea78da415665bfd12e8e784722ebee7ff05a585d41ef49bccd8beda7c6b08fcc74935f2d1d737319272a0b5b800219b13ec9018083289dc5a430844f8a368c2c58e18d614d8168deeda248b05be228790aff961d9434b6bfeac689ecaeda6f15dd89eb43b136a706c61fb8ae7b3322be9b249f9e3dbc9c90e87485e5fb4342714cb4023c103b377afbc9e1bea89e106a3a5fa46a44685822e663ffa439190d27ed8958b531372023d3c74d46a9caf9642fd82ee971dff15b2cba7f903006d61f08317714ddd36be8984284b04761e594c2b8c4838eca6f2501a28d11a7b0a741e5d3e7c2dcb71fb090610c624a08dde23b27efa061d0db67af43b28f68bf8775cc982e28f68a4465054d6fc67a69e736e14c36a8b49a3c097cc4757239dc7fa304a8d6adf3f5e3ee3d2d35429e2c0e78fd5021034dcf9af2b14e5f23e3af95b3d62a67b89a9f0233812ae44080f95790d75a3819f418fd0c9508f7082edfd38d8a4667b3b431ac1c186c0627e676cc66b7930453731d6e3e721bc58ae1154119682660050952e6914c1a225f994e74e3e5230c179185f4708eae5111c6f8e640b7efd91661abba7a635dc150612757eda831d8ce15f9988a33ea2406a331cae8c1cc5b4e84e32fbfa65c6a6205aa7e6d4ae5f1e1c8206175a7f7c5cf4167f5facce36d153aa34d485d40a5fd4f7ef04c1168deb672a3571732fcbcd66843705f215c97d34a931dfdd030fa89054bb57046e227b7db2982591e219282df6c42fd086061f07d5aa6c74655f26ef0bbd6c3307a554bca5beb23b190ce3a708b73bec81754d49ba1f18c09d61414d8745a2c1959efd908e1995e356ef868e1480c89aba8f7e76c0f04365fdce9e3851e499247a77dcb5e6294f0f0e69873fb4a1345f73bd292b74de9ab918ff844be62acdf038b88889186e5c32b1d37c3863a93dcf5fa6e3b4602a8d5e616c99d4ce88afa952d97786cf693be2d3e5cc04abf9135ed0b524cdfd7479aa89ae457f857ebcb45b63203b65aa6c8406f90d20f8217382796062b4b74d0e41d42d2db8857d73a5b4ee191365927cbaad85a619c2b2ccdeac4134252804a9a8f371a90c492572f1e1c2d8ab59c1daeb4a342d5ba61d9dc80bc00f7bba4bea444a044dd76ad7292d7499d56fbcb9059a6f5d09631cc254d2fa755b4508733ea85a6d82c6453314bcffcba5dd08d88b3c8f98d0cc915180840ad9be0d7d2b15399715fe4572a9a424b5e0a08fc8a0ea661d4009f49e4baf6fbf559e2192c41c9ca28616c17dab860969717bd466b291abbb1b2b87be014fda7a81724de3ee9345ef4642e6c0c908bf7ce69e578d8e2f51cb629bd25b22d068ded5e0dedafb37a9efcf2911e682cacb52c86e958784020cd0bef1810020dfaf6edb4051028a784d26992fdf49593ac19d8f82faff44b8316d98c2f0477bdbf28d0a4740d51cc3a4262cddab83ccd716bfa472144f30b063e48866cc9b9443f6cbdb3c2add12a84351029913004e3e5f3bcf926e11e89928f7f67362671aa6009dc6b58b851c94bf59a30882596dceff84498a54c1dcc0d4fa7b6f4e447f80c4956539cf678b275c8296a285e99c076c4baac084e97dc61c7e7fc10cbe2352a7253f3f72fefececf7e55ed9a5b697649d47bbb6af35c2743f68c0f1a3eb69a2cdfad4d22a5d7f96c9f59404c0956aa0cc134f17379e8530ff518aff34099c5ca2747d93b06b745d8882940f78dd40129845ef93ae7a2d7b4ecbe3a246e5d73f39e976a489c1d2287ab3e764953622a24b052492db73c33f76fe5142a0262135d980486b7d06a1dee9b11469df4a17382c7d747c872f4d63bd115e470b758326cb617a5254e2e9691ba3a3881ebe27bc82d26ab97a56d6cf6c2d92194f7a04f858b594bfd5ffb3b059b21c28193d5a16962f8bb17c91636bca79742034dcac94c6a41f1cc902069bea0608b0996db92eb0ba61cd5588fe1f211e8cc5824483e25d55a2d0f896eb1218c6ef8a66f64bec179b7373cce2aed3b743626e005992ca67f1a5432a6169fd291b571d4881193915fb490cab477c6fd6117f8577c4e0352a9fb0dd270b8844662ccad107b629fbf0026c01b8616edbc4b06a70af2c7509ef884c06b63d50d01722cf0e6a3c851cf1d763b8bcd58fffc947ab99703a5a30fed30026a19fca878424ef3c3abc358260a3b69b7e4ee4c32ffecb66829696909fa955a5aed8fd52f45bb0c33fdd3f17858dee11c87277103cfe5141ace731131a32d2eba691f21ab1ee9d0c4148adc1a7be928160e94fcc3a6fc591b7d534a0b695ff605071afc501063b7d08a4876a105d2a550f5c74e16f79b0bd6c0aa61ebdfb646d76213e3c2dcb147f5b9ad3f906933ef49d73ef352442982f902b8f77758b8a78de48a7687c64af7b04d29b56d28857c6d2d5c7b2a0f5084eeee3f892276ef8eb518ff03038fa94d7c9f3e669bc63fc33762b043f2db885824dd7e8571acb362c979e237ba7b44cfd73a6bd1a0b4db6a3501cafc311b3993374b267ae98cbcda5781c473313bb5e53ca922751096d0c7e2951ce289510cbc92c1a7d7fe79644bcbcb1653fc236524395602cf6fcec862cc9716c5501f4a3ac3db733b2505323db2a068487fd4eb1339eb7d4f12df1ac15f8258e329d89aa456f33902f1b2bf3698cc3acf30b2b018dab40282ae4a507a27e153ea7b0f767fa8a339cde90453acea890e56b36f4cdb885a22f89692f1e3922e8839c84666334556260a8f7ca8371461338d7c4d29a1cf486f1f703b87944ad4766f95ffd245c9965e37397e153bc30f7ac1ffeecf221bf94775afb68a129e8d9eda68ae434d81ee72e29b9b334162de24a2b2c6b5c2fb073c89c99661d529847228b4d441b12ac8e47b0a567ade7047d19e3967661ae8dcceca325db752588380d91ef455f700b0238f2a32647987e6f2130833687061f46ec59e7ee320c7f55b59eba0e8a5c02ec09d5fb18888f63606af83dd2599f2e8acfa427c8db6e4446229bf4c8243d5bf4c043f464fa357bfafd250a735ce2823f9d6e2c90f8b2a0b25c71e69ab37bdcc16723d73325f28de2e19d33411a35e20e5f9e3f6f12425b416c06d8adc17e4efc055cecac902f63c31e4aff631a01179f1c1ca88db0853d9c59441228d5ad784ca3d87bf8c352c343bd12b802e4afea99dcd0af115ae30e6b2b12db347872245a487ecc3e46c5760ac5dfa44501a520a5a7a29c2498c49555ea577df9303418cefc3627a7a2ee44c13e980d55f84d846a867ab6edf3909b039ffd3e9e885c1d4fc7e8d35b5e37f41030253959510edd9180404695f2afe81d52eb674c0550fb85b27c19810207509ea46e717a954ff2c19edc94431e8a444a09093f2a31797a19c4db414116c51e14a15afce04b7a8ca3e736e820fd877732ce3f1061933f62b306eb93c423db271930d324b2fbf673de63368a54190f487ea8752018b30b7afa7e955632b1b0335658c12f192d2b6f1b1ac5c106fa8b80d6a093b9781a438b9736c2d4b346ac0a73210a663c6a81480215c9d75e2661e7e1bc8121a94f515d313658536d6c377317939711443960c53a5b2b128527fb45480627a0d2da9bb87184411c8baab937eab75078582330b06cf4d4bba385bf62b2866e801b448b64ff2a637733889a1e96941de2a1af59cf3fe9ab19dfc61706c8433c07ad1487288230a8ab8e8f42f0c032e799466543eb5c41977662746af832457b7fb0d2f9cea39cf602c3461a75129a94e370cd56cb6a04821854161f019794112e4b07481c097837c2fa36887534d30e094770fb39123a5348dc35a0e9a039e85da73adcdb5ccc52345de5f5b7cee53b52f2d598fbfcecf24e22585478f43be653ecf31dd2469e2fa011ddca0487d905089a8497dacf2246724f07a3753ca2f55a41ba73cb6df8b64e41a66d2407b6537166065e9e34e239fc8bcbf5aa1f76fcb8ce18468c79e1cf8513c648dff7840cd77fe2570fd236b233fd2ab2dd46c0e2b6bc94fedf1362628fafc7c1fdff4c1a800ca0e8f452259a61ceae42d75888919c33b7038ae38157b23e314245c61564b536c97b175bb7d7cc25df0e60fed4f0b25a07bd5590489637e88a3280f5e7d2bd25e4773e96f552bc2b447c40e0aee73f5a0e950ac3bf0766d45cf97633ca4ce200794432aae6f37b0865f53ea51d5e8d5b54f16f23ed93862b2effef29c7ba6af0104abb4093a350e3cae223f52a3de284603a4e59da20e11489abb37fe5049e1c32f0a000024882e4fca9b77adb6c87fdbad96d0c8e97bdb8f46789dc2d13c6ad66a0ab913dcb5a3582b4c2d93ad4c4efea3494e512e1633ff79b3be8a5cd2aca35c2a29c4c1520fbe4690cbd4f5be08278b58d8b6de41bd01aad8f4c571b119c26bc4ec8350d1c61ab325ccc21ea25ddedc31fa8a78a2c93e6064eb04be6c54ac1f777be029a958c5e767caeb86ad929d1c511e1c9bae0b1e20e40bb88148cfd8edbe526bba6d5a7859c320c1cc1458daa252ce0d95c7d52972d2c16168eafdd16d15fa7661822d8a80e478e56d9b132024a384de2574c9d8bccdb69fd3d7511e03fafe90dd8c547503383db6c98653f609cfdcfe99595bb4851165b450828c2748e9b95b7cd061e0473ad9c69e8a8dd4d83420ff8fda0d45626a394f7d60e175b27ec536de12c824d368f7852b0c4345067d1b51677b40f3bb14abd1b9171391c7069ca36fb819db2e4ef1831d8ff6bf1b070684ceb1a94815cd57eb720974f3fd3dca31a034b97bbe596230d47a2abb8c6e8d0a1411b8caf8e0a7ed56bc9824db70b8521e2d398f0a24c42efe7f41b2e1200961d61fd1f4eaeb3667c5a4efacd84c019547e61c7da81d81dde9f3fe4dafa8262c8340874e52696ddb5d570de47a1c107bac03c4c00eb045be257c92d44e734dbaba086b4fc5d7c8c87c475564378d6f65b90ae50ea4996a503f7dc1ff542e0aacd8ebd061cbb2c1afa0fa68c4a70c98e40d7fdfb210157a24a68bee274714c7736e7f693cba87030169e4ba5e3f16178707b72742c7d0ffbbe90b79d49de41e9ef917982948c0e76e459accc9763655cf36655e49323865768581178fdef86a8ff768efcfccfcf936b291027ed2f9ee1d27eee72df5d835f4ea8129c170ee55d6e7d7d298dd97b30b3f4c1de6dbbd4b014ad84479792d0bb7a6904311fa224b0458d8d30ce13daf4c5a4051a9f70ce71c1da618a43293312f4812d5e9e130c488b90083a47e3b388a81f25030cb656cbe2edcb646c8c750cc2dad64c1bc865ce486d346e81b2d093644f68c03bf632667ecd0bfd99225e52ee5b46231e2bf7e9840c5af503e9f7be021a187ab4962beb9d64697c5253b58c80ebc70a2fa389424855c1f655eef1b1896a7b580000090247992c091f8744627e749f29d798e5809b30b39a002b86130126db83a69a945285549ece8926d17af2dd17a99d72d14c868576098b067d8d73367e222ece94845e7d05f01798257fe30e77b20a9a164e103c536a7ee9a0c6e682ad5e2103d03fdbfdaa9a524608175aee076ba5767c2d413d92e5623bb56762f1af5f06a0112c03bad5f2c09641ea5e670ffdf66fca9221707ba4be648517ef6dce4c650f1ff3de9dce20ebf19aa1f760d69085eeca24b9bd56cc1accd87f96de504dc7b7c23b748edc4d5bc0d9e42dc2a54adb59428c100d6a88fedb76465e2a7e8cb200c2acce7648a19669c75a0973c4567f19fb712e4600fef3f92615503aa02eb152e6eff33b5b4326562cac925c7bdaf997bd7c1c526056808eb19472f6fe5e4915f7acebc75a5c93edd082d16512ffd23a4f55e117d2b92e02e06ace46df4204b1be8abf00901363987a82cc77d0ec91697ba3857f9e4f84bd79406c138d02698f003276d0449120bef4578d78fecabe8e070e11710b3f0a2744bd52434ec70015884c181ebdfd51c604a71c52e4c0e110bc408cd462b248a80b8a8ac06bb952ac1d7faed144807f1a731b7febcaf7835762defe92eccfc7a9944e1c702cffe6bc86733ed321423121085ac02df8962bcbc1937092eebf0e90a8b20e3dd8c244ae8cd1d30b9c6aef438d0de7feb5c662d4a004e8bcb3a9a5c70f5e6a0eb929f5e8f7417261fd2142e8c8dbfa484bafafdac9dc71f882b615b491f938ca155d80d48f6a25bd8b8eb078836d03f200789a4502c1102ea20de5c1f62b7e5b35856dd91bf5f3078fdac35b846a09e41d4aab7d145ccf465cd89d55059e46a861ca455e6589e527512c03fa947b1506e94c6beac754b528f83cc6d787f79799e0548fcd33cf010619adf7bb7a482e40aea761f4e251cabdbe63e7b145e17a16fc4ad38d4e6f518a2f84270700785c7ab28216042ffd17ebf575884a0402f507fbd49a067e10dd9cdadb1b47ecb3a79c3f06108074fda39be799310a8f021354261c6aa08a5aab2564d75ce107a3188e9b5ad9d27afc77b6daf86b59ad8ad9e6c547cec33cf7c60b13a2713f19eeb6380ea8f96009a0992217babd9f254251a320804bd75a8c33383064e2c7ea3c8a82e215f694e99113c9e606b044c0d182747eed6b44adc4fb92024438e341369a555dcb5ad5e178ed918e04cbb046e0744129b6b572fd442703d36bfafae783f097c9f2ac8abafd2d6459de964c7f1630f36704b1ca12b7bf72e901b073a5cc94326cb1751d3cc7dd298db9997e321cbd7081ffe8b2b3c3c9c68e2de2b841b98c0c8f313cf52f7f04c873c05daf299923a2bfcee193aa104fe90717193083f1e20f799a897a5bccab28531869482a366b70689a24d6bd4758c29fe8dc43351d9e227413e5148857d93375ec45affe9b9cc1c68a3ae1b510ed399dc8b4591de4c62cc6c4d62b7dc896d020627a4e6d6fbe7f1fc7aa1e5912153648de28da05ef6417b8d6e62703c6eae79ea28f8c3e5ada91bc78fcf373f6d8a1ea53c02eb3e67fca92719d70e2f9de6135d50cd03b06f6dfe5c6b9cac9633e62c94e04beef6f202d9cbc826ee20a79242e237a842a181d51e1d9680a250250622df87df083354e281ee01d8acaa1c419d1b35f0fd43b54cffad8911b4d7b15876079b22d35de11a35f05f62a6465c52865ae46d90115a54176ebbd65097595baa9f82bdecf137186a85196b876ff863a343bb44a784e178f9e3c72502399d9e44f9d7169177b77b941ef849ac9160f35848333ca038fb2a1baf03b44618ee8eb9b920b38d6bf2a247205483a255366039eae4ac168807f5f12329da98dfccbb9d5fc81b1d38693b083bc6bfe525e958acae3829770c885b2ed2822e76d8d883445065c3ed879b843bb3b745017dea4b44f4a61b4e30fcd8095fa5166cae7294632d52346ab40a3c663abeb973d7c9967770c718089ff5db350d1b28e6bb2b5d6e6945e3115825c22c333583a8ddf7e8d88513a642a3e3f3167d5cec81a9735cba7699666dee7e93d23fc44a3ccaf5a0dcb4043c68d747be4222d2c7a9d3db00fbe7c514fce195401cb2d3739c59636cf8802140f7b4a17b2c802550ebd4e2e8973f61a53adbda55502efb7643f3a19bb07be35a8bc671d85a37bcfea426fb8210dff76da427ee220126a4e8c01430bb98f9d2ff718759444f9c12478f44a54bfd6beef4c5601154c41c58319d45a15b169c78866571985d713fbdb1e9b870d4b145c0c12b1f145c0d829de7380273d8bde63cb5c40fdf72539527d46fecee8ad100155921bf47b641ebde803cd518d2f349a7d419cc9f218b2ee9157e6c5efce12d353355cb2be205daa282f83810d85b393287c33257f97c8f69fb91b17299461fd8d633bd516dcdb172760695ec476a5775377cdb7a48bc19230d3656a9ee847a58c8582028b80e22d6bff4891bae8506d8799322a6bdae6eccb0f8c6757b30af4d601f7e326f4b8137e72e8c1f7c4fe9e4b4a2924dc6d7f29f8d457b55bdbf311f5416320ee20a5f2e823119784f3f53127f27c4dfe2cd4743f8b8ffcb24a4a2471ab8d61ecedf3f22f788bba685c7d4fa3f9f14fd9ff2cf3299afce665e65757d0a93f4d2641e83adddb1dd4abe6e02048c851cf75cfd1ce3d6a66197b9961d09ca23f8ca606cef379b3918a567b64cb9dc56378db82092e0363953dfc49b2b75cfe56c77422eb448c68ad866f0253792b59f1ef12021d3b04ed51fbf1e0903599244ca6967f88569d623a700162f35178ecc1df2235551cc77161fb61454472da7ee9d01603ec513408ffef11858d7c0ee79dee1405f8fad5558ee454601695a773f5eefb98615cdac4c6aca952682175b04bc4ef5950fcb403a05ed2194dc6886b37a74e252d9f15fd554fd0b1ce6933b1930abb18a34beee15f13e458332f06ce78a416919943701c757f8f8a057cd2513f68802c3a0e0b5992a891050ef5a805808c5bc6ed707087eee4edc55681daf71585477c5d6e91d203c8e2082743f776170826ab714d9fa78827f24b09a0d10ddf0a17f053930ab47819dd49c63f7a8a05c07e286d0384e40bf0a602660341fa639ef97066a4fd66ba438cb13311b9a9115b6b2528b9a7a73ee612d3b5cfb1266aeaf4e4dcc9f35291eff726b5e23c3c0582f58aeb989156eab23da63d2faaf9bb961034fe2c73dfc4c5259195da8ca9a7dc253ffec8c95bd7fc2f644749b3db2049554914f205751d6c1edb1c20305ac012022da970d71ccd6bf1f31b4554345fabcc096646317c628deaea8fddb0b517cb943a34b9440394a78a3d014c156c41657c5d3b4e805c5ccf92a83938952476b0e44fe6ca9776f359022941867feb8e1f6e2ddd32797ed3db1dfc615a650ea368f95508cc58dfb429629e221a19190e80 +MD = 05be6b585d2daed5b9bba5991df1c1405e1695b236e194463dc0368af83a2d8d + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.rsp b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.rsp new file mode 100644 index 000000000000..b942128197fc --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 21.1 +# "SHA-512/256 Monte" information for "sha_values" +# SHA-512/256 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:08:08 2017 + +[L = 32] + +Seed = f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7 + +COUNT = 0 +MD = b1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfaf + +COUNT = 1 +MD = a008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9c + +COUNT = 2 +MD = 8eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d77 + +COUNT = 3 +MD = ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761 + +COUNT = 4 +MD = d47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698d + +COUNT = 5 +MD = 8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a + +COUNT = 6 +MD = 1abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a6 + +COUNT = 7 +MD = 324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7a + +COUNT = 8 +MD = 06d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa111 + +COUNT = 9 +MD = cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb94266 + +COUNT = 10 +MD = 935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a475 + +COUNT = 11 +MD = a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d38505989 + +COUNT = 12 +MD = e5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbf + +COUNT = 13 +MD = 43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f + +COUNT = 14 +MD = c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24 + +COUNT = 15 +MD = a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9 + +COUNT = 16 +MD = 8eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd0 + +COUNT = 17 +MD = 05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc + +COUNT = 18 +MD = 8ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce412 + +COUNT = 19 +MD = c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4 + +COUNT = 20 +MD = eba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662f + +COUNT = 21 +MD = 8f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b2911353 + +COUNT = 22 +MD = 19ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a62 + +COUNT = 23 +MD = 22f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c397 + +COUNT = 24 +MD = 3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bf + +COUNT = 25 +MD = 373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266ad + +COUNT = 26 +MD = 6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d + +COUNT = 27 +MD = b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584 + +COUNT = 28 +MD = 8cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b5 + +COUNT = 29 +MD = 92150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc598 + +COUNT = 30 +MD = 3ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d912 + +COUNT = 31 +MD = 894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e9 + +COUNT = 32 +MD = 7f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb4 + +COUNT = 33 +MD = 092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075 + +COUNT = 34 +MD = 553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249 + +COUNT = 35 +MD = 17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b + +COUNT = 36 +MD = 6d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea856 + +COUNT = 37 +MD = 1a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a608 + +COUNT = 38 +MD = d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531 + +COUNT = 39 +MD = 128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a981 + +COUNT = 40 +MD = 1b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a35 + +COUNT = 41 +MD = 31feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db943 + +COUNT = 42 +MD = c7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ff + +COUNT = 43 +MD = 76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2a + +COUNT = 44 +MD = eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c34 + +COUNT = 45 +MD = 537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145a + +COUNT = 46 +MD = 9000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e18 + +COUNT = 47 +MD = 20c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a4 + +COUNT = 48 +MD = 5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2d + +COUNT = 49 +MD = 53e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a62 + +COUNT = 50 +MD = 4df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c85 + +COUNT = 51 +MD = 503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9 + +COUNT = 52 +MD = 904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc + +COUNT = 53 +MD = 888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3a + +COUNT = 54 +MD = 90c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac4 + +COUNT = 55 +MD = 1efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c8 + +COUNT = 56 +MD = 3f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b0207 + +COUNT = 57 +MD = e021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733e + +COUNT = 58 +MD = a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17 + +COUNT = 59 +MD = 2b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c1628 + +COUNT = 60 +MD = d13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45f + +COUNT = 61 +MD = 0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68d + +COUNT = 62 +MD = d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d6 + +COUNT = 63 +MD = 720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a19 + +COUNT = 64 +MD = 933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e + +COUNT = 65 +MD = f80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bd + +COUNT = 66 +MD = c180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98deb + +COUNT = 67 +MD = 2d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a80 + +COUNT = 68 +MD = 3edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee786 + +COUNT = 69 +MD = 7548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd6 + +COUNT = 70 +MD = a0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1ac + +COUNT = 71 +MD = 7fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b7 + +COUNT = 72 +MD = 48f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac57732 + +COUNT = 73 +MD = f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266 + +COUNT = 74 +MD = fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339 + +COUNT = 75 +MD = 18a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb937633 + +COUNT = 76 +MD = f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2 + +COUNT = 77 +MD = b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1 + +COUNT = 78 +MD = e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b5 + +COUNT = 79 +MD = 54ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e8 + +COUNT = 80 +MD = c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea65 + +COUNT = 81 +MD = 71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fd + +COUNT = 82 +MD = c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75 + +COUNT = 83 +MD = 27401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f7039 + +COUNT = 84 +MD = bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246 + +COUNT = 85 +MD = e3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aa + +COUNT = 86 +MD = e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e1 + +COUNT = 87 +MD = df09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faa + +COUNT = 88 +MD = 123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676c + +COUNT = 89 +MD = 14a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa30 + +COUNT = 90 +MD = ae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76a + +COUNT = 91 +MD = 4966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed65326 + +COUNT = 92 +MD = 8ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea13375 + +COUNT = 93 +MD = 14ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e0 + +COUNT = 94 +MD = 8471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb3 + +COUNT = 95 +MD = 51749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe042 + +COUNT = 96 +MD = 8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360a + +COUNT = 97 +MD = 6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd + +COUNT = 98 +MD = 5fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e35 + +COUNT = 99 +MD = 1822ede971ca1407fbcb1dff487ea9d93d71d756cdf32945703de673f4b3d816 + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.txt b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.txt new file mode 100644 index 000000000000..02f4ebc136a7 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256Monte.txt @@ -0,0 +1,2209 @@ +# CAVS 21.1 +# "SHA-512/256 Monte" information for "sha_values" +# SHA-512/256 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:08:08 2017 + +[L = 32] + +Seed = f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7 + +COUNT = 0 + i = 3 + M = f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7 + MDi = 0ee37469a87aa868bc43999366a957350165047b56e2f06f20e44dae72884ce4 + + i = 4 + M = f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a70ee37469a87aa868bc43999366a957350165047b56e2f06f20e44dae72884ce4 + MDi = 4e1a17e768421a0c81cdddb0d949f1553e26a0b962fbdbd5bb2429be468eb49a + + i = 5 + M = f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a70ee37469a87aa868bc43999366a957350165047b56e2f06f20e44dae72884ce44e1a17e768421a0c81cdddb0d949f1553e26a0b962fbdbd5bb2429be468eb49a + MDi = c727e51e5766088cce1e11c498ba36e1e5f18e213f30d9ac0e7734a1a0ef3f84 + + i = 6 + M = 0ee37469a87aa868bc43999366a957350165047b56e2f06f20e44dae72884ce44e1a17e768421a0c81cdddb0d949f1553e26a0b962fbdbd5bb2429be468eb49ac727e51e5766088cce1e11c498ba36e1e5f18e213f30d9ac0e7734a1a0ef3f84 + MDi = 9bd08d6a91981f729d8f0bd5bfe69a33e103201c59054a5357202ace430d818d + + i = 7 + M = 4e1a17e768421a0c81cdddb0d949f1553e26a0b962fbdbd5bb2429be468eb49ac727e51e5766088cce1e11c498ba36e1e5f18e213f30d9ac0e7734a1a0ef3f849bd08d6a91981f729d8f0bd5bfe69a33e103201c59054a5357202ace430d818d + MDi = ec6aa0f14cd57cc0825a346cd0576695f8314c691808b603c442524e7d693729 +MD = b1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfaf + +COUNT = 1 + i = 3 + M = b1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfafb1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfafb1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfaf + MDi = 08889c9db11b525b97680b3af7375ed20f5c1be2069d8ef75f7573652de54600 + + i = 4 + M = b1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfafb1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfaf08889c9db11b525b97680b3af7375ed20f5c1be2069d8ef75f7573652de54600 + MDi = 3a6b93d1840d4b96bfba3596e4899666018b8a9414f3762269c99b617446455f + + i = 5 + M = b1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfaf08889c9db11b525b97680b3af7375ed20f5c1be2069d8ef75f7573652de546003a6b93d1840d4b96bfba3596e4899666018b8a9414f3762269c99b617446455f + MDi = 4946d8fa3d896aedf9ed71d9c7566a3959d4bc21d5f09bc06440abcff18adb39 + + i = 6 + M = 08889c9db11b525b97680b3af7375ed20f5c1be2069d8ef75f7573652de546003a6b93d1840d4b96bfba3596e4899666018b8a9414f3762269c99b617446455f4946d8fa3d896aedf9ed71d9c7566a3959d4bc21d5f09bc06440abcff18adb39 + MDi = 3543e9736e9098da1b681735683971a538e2235130a6df0d15b3a53439a77502 + + i = 7 + M = 3a6b93d1840d4b96bfba3596e4899666018b8a9414f3762269c99b617446455f4946d8fa3d896aedf9ed71d9c7566a3959d4bc21d5f09bc06440abcff18adb393543e9736e9098da1b681735683971a538e2235130a6df0d15b3a53439a77502 + MDi = 84bb9d852980520edf912a81b7df4d3412930f0da31740e08cfc799c08142c3b +MD = a008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9c + +COUNT = 2 + i = 3 + M = a008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9ca008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9ca008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9c + MDi = 48bc5a7708934b7c8a66dadd50c86a8e9134d67b975b32169679e76a23d26725 + + i = 4 + M = a008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9ca008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9c48bc5a7708934b7c8a66dadd50c86a8e9134d67b975b32169679e76a23d26725 + MDi = c2b4b51f09150b88ec3bc1d88d925627137f131faeb72fa594f8678877d3a4d5 + + i = 5 + M = a008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9c48bc5a7708934b7c8a66dadd50c86a8e9134d67b975b32169679e76a23d26725c2b4b51f09150b88ec3bc1d88d925627137f131faeb72fa594f8678877d3a4d5 + MDi = 3656599c38667f036f034f656e1b1e8c6ad20c0ebb0289c3eb12bb7425b11693 + + i = 6 + M = 48bc5a7708934b7c8a66dadd50c86a8e9134d67b975b32169679e76a23d26725c2b4b51f09150b88ec3bc1d88d925627137f131faeb72fa594f8678877d3a4d53656599c38667f036f034f656e1b1e8c6ad20c0ebb0289c3eb12bb7425b11693 + MDi = c0f7d23a15718dd0dee69057b7c457582965d5aab6f6ed34502b8dc2818f4943 + + i = 7 + M = c2b4b51f09150b88ec3bc1d88d925627137f131faeb72fa594f8678877d3a4d53656599c38667f036f034f656e1b1e8c6ad20c0ebb0289c3eb12bb7425b11693c0f7d23a15718dd0dee69057b7c457582965d5aab6f6ed34502b8dc2818f4943 + MDi = e6e619136f04b137473198ec9a253d03a9c31f196633a448e21645d77fa7bf02 +MD = 8eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d77 + +COUNT = 3 + i = 3 + M = 8eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d778eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d778eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d77 + MDi = e107587f9eba7f1cc3e93460c1d8e8b1f20ef6bd1c619173ecab0464a4fa7427 + + i = 4 + M = 8eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d778eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d77e107587f9eba7f1cc3e93460c1d8e8b1f20ef6bd1c619173ecab0464a4fa7427 + MDi = 59594aa2c1afa831e48c0d31e8f01e40d98c0db029c21dadf9dd9a73e1975948 + + i = 5 + M = 8eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d77e107587f9eba7f1cc3e93460c1d8e8b1f20ef6bd1c619173ecab0464a4fa742759594aa2c1afa831e48c0d31e8f01e40d98c0db029c21dadf9dd9a73e1975948 + MDi = 297a4cf7a4be4cdd68a48af8fafcc89f3d1d4b5665b8f0b566c7fab85d29b123 + + i = 6 + M = e107587f9eba7f1cc3e93460c1d8e8b1f20ef6bd1c619173ecab0464a4fa742759594aa2c1afa831e48c0d31e8f01e40d98c0db029c21dadf9dd9a73e1975948297a4cf7a4be4cdd68a48af8fafcc89f3d1d4b5665b8f0b566c7fab85d29b123 + MDi = 04f1f9a071c7ef06ac8044a8d9b1da7410d0e1970cf3be9fb7e7f1e20a43ef8d + + i = 7 + M = 59594aa2c1afa831e48c0d31e8f01e40d98c0db029c21dadf9dd9a73e1975948297a4cf7a4be4cdd68a48af8fafcc89f3d1d4b5665b8f0b566c7fab85d29b12304f1f9a071c7ef06ac8044a8d9b1da7410d0e1970cf3be9fb7e7f1e20a43ef8d + MDi = a8b2b31838a689cea0f6c72eb68e8c07f737d2f3df1eb2c7f28c7d16097603f3 +MD = ? + +COUNT = 4 + i = 3 + M = ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761 + MDi = 183c8e53fe0b84fa5a1ff9797fca52a1a881fd12179f28b8c5b455857cb6eb21 + + i = 4 + M = ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761183c8e53fe0b84fa5a1ff9797fca52a1a881fd12179f28b8c5b455857cb6eb21 + MDi = 264f67c75a25c3e5c96f60f1c485b3740d94019b52698a6b358fec5cf7e2fc1d + + i = 5 + M = ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761183c8e53fe0b84fa5a1ff9797fca52a1a881fd12179f28b8c5b455857cb6eb21264f67c75a25c3e5c96f60f1c485b3740d94019b52698a6b358fec5cf7e2fc1d + MDi = 021deb97a10e1c19d2d5fde49961138dbbe605997cb8fb92f45c3cceb7eb3e56 + + i = 6 + M = 183c8e53fe0b84fa5a1ff9797fca52a1a881fd12179f28b8c5b455857cb6eb21264f67c75a25c3e5c96f60f1c485b3740d94019b52698a6b358fec5cf7e2fc1d021deb97a10e1c19d2d5fde49961138dbbe605997cb8fb92f45c3cceb7eb3e56 + MDi = 700a5150f0eca87c9dc2d3ffcc05ed0b8700cfb58d2b940e9b1f2041cbc0ddb9 + + i = 7 + M = 264f67c75a25c3e5c96f60f1c485b3740d94019b52698a6b358fec5cf7e2fc1d021deb97a10e1c19d2d5fde49961138dbbe605997cb8fb92f45c3cceb7eb3e56700a5150f0eca87c9dc2d3ffcc05ed0b8700cfb58d2b940e9b1f2041cbc0ddb9 + MDi = 471b9350129b6b8c8c3db610072d758b562fc091e28d095d7a698773b8fc3ee9 +MD = ? + +COUNT = 5 + i = 3 + M = d47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698dd47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698dd47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698d + MDi = 1b77c04ba4986304718a9b806fb735a32ce95c55480b0ba13ea163f701e1755e + + i = 4 + M = d47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698dd47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698d1b77c04ba4986304718a9b806fb735a32ce95c55480b0ba13ea163f701e1755e + MDi = d35b4b82a56fd1387c57c6629d2e25b7b2d299f9bbffdf7be74845b4b978668e + + i = 5 + M = d47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698d1b77c04ba4986304718a9b806fb735a32ce95c55480b0ba13ea163f701e1755ed35b4b82a56fd1387c57c6629d2e25b7b2d299f9bbffdf7be74845b4b978668e + MDi = 489b9b8727a5af55a8536cbbc9155e43c828ab950b05b2b47c72c13f88ec5eee + + i = 6 + M = 1b77c04ba4986304718a9b806fb735a32ce95c55480b0ba13ea163f701e1755ed35b4b82a56fd1387c57c6629d2e25b7b2d299f9bbffdf7be74845b4b978668e489b9b8727a5af55a8536cbbc9155e43c828ab950b05b2b47c72c13f88ec5eee + MDi = 3106256e1647f6d72824375a0691fad2052f9c32a417033009d424d83893bb94 + + i = 7 + M = d35b4b82a56fd1387c57c6629d2e25b7b2d299f9bbffdf7be74845b4b978668e489b9b8727a5af55a8536cbbc9155e43c828ab950b05b2b47c72c13f88ec5eee3106256e1647f6d72824375a0691fad2052f9c32a417033009d424d83893bb94 + MDi = 6605342700c96352c87b384a0d0040988376885a06d418146963ab0b73b43176 +MD = ? + +COUNT = 6 + i = 3 + M = 8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a + MDi = 18e75abff7a28dd089c473cc1cd28eaed8010cef9d4b28583ffda4b04aa5611a + + i = 4 + M = 8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a18e75abff7a28dd089c473cc1cd28eaed8010cef9d4b28583ffda4b04aa5611a + MDi = 0bcf4f8b52a15ef085a9fd038d6a5ca3dd18c77e057932e50cbc6c47e309f717 + + i = 5 + M = 8bc1516ecea32fa3cd4f9f12ac13a2af6763090226e7c1484b2d85757fc9e82a18e75abff7a28dd089c473cc1cd28eaed8010cef9d4b28583ffda4b04aa5611a0bcf4f8b52a15ef085a9fd038d6a5ca3dd18c77e057932e50cbc6c47e309f717 + MDi = 98a9d2265576674e0f294396414274f029b9a7d57d6a2d0ae38d9d8071dcd982 + + i = 6 + M = 18e75abff7a28dd089c473cc1cd28eaed8010cef9d4b28583ffda4b04aa5611a0bcf4f8b52a15ef085a9fd038d6a5ca3dd18c77e057932e50cbc6c47e309f71798a9d2265576674e0f294396414274f029b9a7d57d6a2d0ae38d9d8071dcd982 + MDi = 87ccf1ebe9c10b1912e3224e5e62b00e95897144ba3ecc12422c885f441eeb08 + + i = 7 + M = 0bcf4f8b52a15ef085a9fd038d6a5ca3dd18c77e057932e50cbc6c47e309f71798a9d2265576674e0f294396414274f029b9a7d57d6a2d0ae38d9d8071dcd98287ccf1ebe9c10b1912e3224e5e62b00e95897144ba3ecc12422c885f441eeb08 + MDi = 54bc3f88fc9ecfe379ece1c8b291fa473f303ab2b9d8528e7a5ebaf1e0670159 +MD = ? + +COUNT = 7 + i = 3 + M = 1abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a61abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a61abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a6 + MDi = 0f2ad9a8f8461a94d6dc0296ae31912a4cedad6fa3b8b4fdd127a75e01176365 + + i = 4 + M = 1abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a61abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a60f2ad9a8f8461a94d6dc0296ae31912a4cedad6fa3b8b4fdd127a75e01176365 + MDi = 9d867502e320982ac57de124c0693ed97e1de941136bb4c5b22ae8be71a490b7 + + i = 5 + M = 1abe44379539744d7806f5d3ef7c2202d0b08f575d1899b7a3df737b18e2a2a60f2ad9a8f8461a94d6dc0296ae31912a4cedad6fa3b8b4fdd127a75e011763659d867502e320982ac57de124c0693ed97e1de941136bb4c5b22ae8be71a490b7 + MDi = 329e9414e0b7a338485ccfd1a731d73d6a17e45fcbd7f6047f94367539a9bed4 + + i = 6 + M = 0f2ad9a8f8461a94d6dc0296ae31912a4cedad6fa3b8b4fdd127a75e011763659d867502e320982ac57de124c0693ed97e1de941136bb4c5b22ae8be71a490b7329e9414e0b7a338485ccfd1a731d73d6a17e45fcbd7f6047f94367539a9bed4 + MDi = 0f2404828c05610ab1b241a424b15b6c3ca6580f43696c3b8afc9a4e39b4bc23 + + i = 7 + M = 9d867502e320982ac57de124c0693ed97e1de941136bb4c5b22ae8be71a490b7329e9414e0b7a338485ccfd1a731d73d6a17e45fcbd7f6047f94367539a9bed40f2404828c05610ab1b241a424b15b6c3ca6580f43696c3b8afc9a4e39b4bc23 + MDi = 1fd94d425f057a4ed44a4acaf9f997b0bf53c98ab91ff7f7da6520623fc8158a +MD = ? + +COUNT = 8 + i = 3 + M = 324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7a324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7a324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7a + MDi = b4521bdf8e6193744caf462f18a23f0460964307c5e66975fa876e151ee9e89a + + i = 4 + M = 324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7a324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7ab4521bdf8e6193744caf462f18a23f0460964307c5e66975fa876e151ee9e89a + MDi = c734d7685690c2ea959b491bcef8cf891d52b1ccc048fc01506ff4ce1ca05a42 + + i = 5 + M = 324a7606ee9fc9cb26abd881581e70a06fedf33456f385b370973fcee8d01b7ab4521bdf8e6193744caf462f18a23f0460964307c5e66975fa876e151ee9e89ac734d7685690c2ea959b491bcef8cf891d52b1ccc048fc01506ff4ce1ca05a42 + MDi = 54ff0fee6e03ce4671810cb2f2716cbcc9ff088e84f29740ab933f3143548d02 + + i = 6 + M = b4521bdf8e6193744caf462f18a23f0460964307c5e66975fa876e151ee9e89ac734d7685690c2ea959b491bcef8cf891d52b1ccc048fc01506ff4ce1ca05a4254ff0fee6e03ce4671810cb2f2716cbcc9ff088e84f29740ab933f3143548d02 + MDi = d690621dce715b2d3096e0f4ec3e05e5b112afd58f112941123489c3a9b0060f + + i = 7 + M = c734d7685690c2ea959b491bcef8cf891d52b1ccc048fc01506ff4ce1ca05a4254ff0fee6e03ce4671810cb2f2716cbcc9ff088e84f29740ab933f3143548d02d690621dce715b2d3096e0f4ec3e05e5b112afd58f112941123489c3a9b0060f + MDi = 5f0a7d943a2dbb03deb6c80307bd445fb1693d022a80d41af2acce5e4b5b361e +MD = ? + +COUNT = 9 + i = 3 + M = 06d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa11106d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa11106d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa111 + MDi = 2173fb805c4cfeb8f551ecccf70d9ad49a2c9262b7a2bf6c7117823a4f63d223 + + i = 4 + M = 06d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa11106d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa1112173fb805c4cfeb8f551ecccf70d9ad49a2c9262b7a2bf6c7117823a4f63d223 + MDi = c634e266f623a6d0a2e6f07ee9a8eeac165803b4179eace236fcaf496f5c091c + + i = 5 + M = 06d1ccb978ca4b455ed380bea2e8c3afe24d0b935f5740677927f6f1a96fa1112173fb805c4cfeb8f551ecccf70d9ad49a2c9262b7a2bf6c7117823a4f63d223c634e266f623a6d0a2e6f07ee9a8eeac165803b4179eace236fcaf496f5c091c + MDi = 2ad702bcb3a0a295fd643bfb067a2720e9f358f7ff5016746460a43a041cc7ec + + i = 6 + M = 2173fb805c4cfeb8f551ecccf70d9ad49a2c9262b7a2bf6c7117823a4f63d223c634e266f623a6d0a2e6f07ee9a8eeac165803b4179eace236fcaf496f5c091c2ad702bcb3a0a295fd643bfb067a2720e9f358f7ff5016746460a43a041cc7ec + MDi = a357f80f0495e6c2e86ff713b39b9fae3d3f859018bfa89aab2694409c169ff4 + + i = 7 + M = c634e266f623a6d0a2e6f07ee9a8eeac165803b4179eace236fcaf496f5c091c2ad702bcb3a0a295fd643bfb067a2720e9f358f7ff5016746460a43a041cc7eca357f80f0495e6c2e86ff713b39b9fae3d3f859018bfa89aab2694409c169ff4 + MDi = e83de9a0c96a4a7dda532bf945863acdf8e4d770ea8a0b7b66e46dc9a428a575 +MD = ? + +COUNT = 10 + i = 3 + M = cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb94266cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb94266cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb94266 + MDi = 24a6d0dd52fbb7f8111826a6b9110d9a301df352a94ac0c728d0cf25869664e8 + + i = 4 + M = cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb94266cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb9426624a6d0dd52fbb7f8111826a6b9110d9a301df352a94ac0c728d0cf25869664e8 + MDi = dcd12a34d0c087d28ceb5a9e75b1e1b98c7cedbf91442f3b950c85ab7ee3ebc4 + + i = 5 + M = cc78adb572c8cff2cc84020dfb61c521657baf3bcd8aea9593437cd2cdb9426624a6d0dd52fbb7f8111826a6b9110d9a301df352a94ac0c728d0cf25869664e8dcd12a34d0c087d28ceb5a9e75b1e1b98c7cedbf91442f3b950c85ab7ee3ebc4 + MDi = 13dd813e220654a9fd0da25d682f503c28b55bc87170d4ae2c1ba2ed34e98062 + + i = 6 + M = 24a6d0dd52fbb7f8111826a6b9110d9a301df352a94ac0c728d0cf25869664e8dcd12a34d0c087d28ceb5a9e75b1e1b98c7cedbf91442f3b950c85ab7ee3ebc413dd813e220654a9fd0da25d682f503c28b55bc87170d4ae2c1ba2ed34e98062 + MDi = 293cc6e92fa91ca09b13ba82e2734013e35b45dfecac1988a519aa780e161491 + + i = 7 + M = dcd12a34d0c087d28ceb5a9e75b1e1b98c7cedbf91442f3b950c85ab7ee3ebc413dd813e220654a9fd0da25d682f503c28b55bc87170d4ae2c1ba2ed34e98062293cc6e92fa91ca09b13ba82e2734013e35b45dfecac1988a519aa780e161491 + MDi = 733ce277fcca5462084861d21d5e08c2eba399a0398ffbc5564708c374cc26d4 +MD = ? + +COUNT = 11 + i = 3 + M = 935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a475935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a475935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a475 + MDi = 9ec9c6cbbf47b808241358aaeca27e6ee5eb8a4dc0f68a17212de59e38548c5c + + i = 4 + M = 935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a475935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a4759ec9c6cbbf47b808241358aaeca27e6ee5eb8a4dc0f68a17212de59e38548c5c + MDi = 95e7bfe130c77db5c3a0a54ffdbb7fcc02cf2907ed6de76e5d2b304469c9b228 + + i = 5 + M = 935a43189f019f06a630f7601e1d40d51fc2c2ea602fea2c0da8404730c5a4759ec9c6cbbf47b808241358aaeca27e6ee5eb8a4dc0f68a17212de59e38548c5c95e7bfe130c77db5c3a0a54ffdbb7fcc02cf2907ed6de76e5d2b304469c9b228 + MDi = 03bc4023eb5406e2ce0cc35e467d6789913c6fb7606ecffe6991932bb3ad6bb2 + + i = 6 + M = 9ec9c6cbbf47b808241358aaeca27e6ee5eb8a4dc0f68a17212de59e38548c5c95e7bfe130c77db5c3a0a54ffdbb7fcc02cf2907ed6de76e5d2b304469c9b22803bc4023eb5406e2ce0cc35e467d6789913c6fb7606ecffe6991932bb3ad6bb2 + MDi = 0f9d4d7fa184fca5c3c2a9f3639bf114e42adcaaa18f3ec6785d2397159e4bde + + i = 7 + M = 95e7bfe130c77db5c3a0a54ffdbb7fcc02cf2907ed6de76e5d2b304469c9b22803bc4023eb5406e2ce0cc35e467d6789913c6fb7606ecffe6991932bb3ad6bb20f9d4d7fa184fca5c3c2a9f3639bf114e42adcaaa18f3ec6785d2397159e4bde + MDi = 0eca803a34239358d1d995e35b9c94a476918dd2f6e2762a1d1c4eece42ea051 +MD = ? + +COUNT = 12 + i = 3 + M = a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d38505989a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d38505989a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d38505989 + MDi = 80edb19f4030b6ad306e9c314792f0fbc0e430f67d9e2c17acdc3ddff8da09d9 + + i = 4 + M = a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d38505989a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d3850598980edb19f4030b6ad306e9c314792f0fbc0e430f67d9e2c17acdc3ddff8da09d9 + MDi = 0d9c5602f01c288c17f7e57628fc841164f0b02e218c37a380acb6f6d47094b9 + + i = 5 + M = a99225bcdbbac4a87d8ed9e8e06889e823fc993a9661cedf1af02c6d3850598980edb19f4030b6ad306e9c314792f0fbc0e430f67d9e2c17acdc3ddff8da09d90d9c5602f01c288c17f7e57628fc841164f0b02e218c37a380acb6f6d47094b9 + MDi = 32fc574ae1d713e9602d25334558d7bb7e1be912426e09b8a7c5712b2375fa9c + + i = 6 + M = 80edb19f4030b6ad306e9c314792f0fbc0e430f67d9e2c17acdc3ddff8da09d90d9c5602f01c288c17f7e57628fc841164f0b02e218c37a380acb6f6d47094b932fc574ae1d713e9602d25334558d7bb7e1be912426e09b8a7c5712b2375fa9c + MDi = 31bf392e2fdec137d7e7906593a45f1beb9b8b46ba615391688ab339e1236ea2 + + i = 7 + M = 0d9c5602f01c288c17f7e57628fc841164f0b02e218c37a380acb6f6d47094b932fc574ae1d713e9602d25334558d7bb7e1be912426e09b8a7c5712b2375fa9c31bf392e2fdec137d7e7906593a45f1beb9b8b46ba615391688ab339e1236ea2 + MDi = 0b08387113e97c2521f075c0eab8e64e77bb70f79902f84c9474919bca40c409 +MD = ? + +COUNT = 13 + i = 3 + M = e5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbfe5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbfe5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbf + MDi = 19717533ee6a65a6467d81b3f6f29f48f2969785de53d272a45fe085d32766d7 + + i = 4 + M = e5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbfe5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbf19717533ee6a65a6467d81b3f6f29f48f2969785de53d272a45fe085d32766d7 + MDi = 101a9eb3dfeebceac05a75f914c708bea5eaa32bc39932f7439e4bae9479ee9c + + i = 5 + M = e5e769874da74a143cd49f0a2f7a6cd3ad4c28f55d8719c85063dfdf0e1efbbf19717533ee6a65a6467d81b3f6f29f48f2969785de53d272a45fe085d32766d7101a9eb3dfeebceac05a75f914c708bea5eaa32bc39932f7439e4bae9479ee9c + MDi = 05318c6684bbf681c353b1c9224b8d1d79766c575018dbaa6bf6b28ce8344934 + + i = 6 + M = 19717533ee6a65a6467d81b3f6f29f48f2969785de53d272a45fe085d32766d7101a9eb3dfeebceac05a75f914c708bea5eaa32bc39932f7439e4bae9479ee9c05318c6684bbf681c353b1c9224b8d1d79766c575018dbaa6bf6b28ce8344934 + MDi = 0140641aad40382986ba7120650ae003b15b74faa6a243733e6ff628f6350481 + + i = 7 + M = 101a9eb3dfeebceac05a75f914c708bea5eaa32bc39932f7439e4bae9479ee9c05318c6684bbf681c353b1c9224b8d1d79766c575018dbaa6bf6b28ce83449340140641aad40382986ba7120650ae003b15b74faa6a243733e6ff628f6350481 + MDi = 44036179c5124ff2779b133d40bf5a813a225b63a71730b4ba69b6fdc1b75c7e +MD = ? + +COUNT = 14 + i = 3 + M = 43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f + MDi = 5653fe8c3365fe0d0e0054ef895a53d39e16b2a8c1e6e977316b8a9df0ab6411 + + i = 4 + M = 43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f5653fe8c3365fe0d0e0054ef895a53d39e16b2a8c1e6e977316b8a9df0ab6411 + MDi = fe113dddb6151f562b73ada28ee79e491a211947b39cf4fdd74c6855e67b920a + + i = 5 + M = 43f7ff7effc58dead5f13a47f8ea7e19f83dbcb409b10b3f985c78346817448f5653fe8c3365fe0d0e0054ef895a53d39e16b2a8c1e6e977316b8a9df0ab6411fe113dddb6151f562b73ada28ee79e491a211947b39cf4fdd74c6855e67b920a + MDi = 4b4b5bab015fed91f85081af6c63ef7d57701429ab49803063de65ba6ff993b5 + + i = 6 + M = 5653fe8c3365fe0d0e0054ef895a53d39e16b2a8c1e6e977316b8a9df0ab6411fe113dddb6151f562b73ada28ee79e491a211947b39cf4fdd74c6855e67b920a4b4b5bab015fed91f85081af6c63ef7d57701429ab49803063de65ba6ff993b5 + MDi = 0a793c8a3a0d01e8e3228718fcd2f74b5afee71b43d1d21a4c40448ff3e1dafd + + i = 7 + M = fe113dddb6151f562b73ada28ee79e491a211947b39cf4fdd74c6855e67b920a4b4b5bab015fed91f85081af6c63ef7d57701429ab49803063de65ba6ff993b50a793c8a3a0d01e8e3228718fcd2f74b5afee71b43d1d21a4c40448ff3e1dafd + MDi = cfcd80311afb9a27a0781ed910ca90d5e14aac5fa812ec2ad80b5ae66b6a60c8 +MD = ? + +COUNT = 15 + i = 3 + M = c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24 + MDi = a1cd05aef65612db197e04e9920b67377300cba053fbc38ca3a3e26852c69bdb + + i = 4 + M = c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24a1cd05aef65612db197e04e9920b67377300cba053fbc38ca3a3e26852c69bdb + MDi = dfc1184ce2c2cb73564a0acacc501ec6d80917a6f03e3a806c3ed9424997215f + + i = 5 + M = c1acce072812dfc53682f0c4794b1cc4ae21fca882f4046e6d2c945f6d29dc24a1cd05aef65612db197e04e9920b67377300cba053fbc38ca3a3e26852c69bdbdfc1184ce2c2cb73564a0acacc501ec6d80917a6f03e3a806c3ed9424997215f + MDi = cf4c4accc35069f20926aea174b5d9a8400c9cdeb481a657b6d121c6f155e234 + + i = 6 + M = a1cd05aef65612db197e04e9920b67377300cba053fbc38ca3a3e26852c69bdbdfc1184ce2c2cb73564a0acacc501ec6d80917a6f03e3a806c3ed9424997215fcf4c4accc35069f20926aea174b5d9a8400c9cdeb481a657b6d121c6f155e234 + MDi = 9412c98e3d9b24f4548cd10b55a1e63172a8100e3a274777562c269af04543e4 + + i = 7 + M = dfc1184ce2c2cb73564a0acacc501ec6d80917a6f03e3a806c3ed9424997215fcf4c4accc35069f20926aea174b5d9a8400c9cdeb481a657b6d121c6f155e2349412c98e3d9b24f4548cd10b55a1e63172a8100e3a274777562c269af04543e4 + MDi = 816ce2612b794d46b738c27620d397b30739a8e663fb79afd5268a060c7c4336 +MD = ? + +COUNT = 16 + i = 3 + M = a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9 + MDi = 590a97b0bbbb852d72653030d792bcd4b7e03dd1d0fc93f24c46c1982d233602 + + i = 4 + M = a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9590a97b0bbbb852d72653030d792bcd4b7e03dd1d0fc93f24c46c1982d233602 + MDi = ae9be18da99d4229016c8f401a04d6d68b89e09fc4019f424cf305ecd4631543 + + i = 5 + M = a78313758117cf3319d90decbe3b46bf7ba20c079879f485b3290fbead662ac9590a97b0bbbb852d72653030d792bcd4b7e03dd1d0fc93f24c46c1982d233602ae9be18da99d4229016c8f401a04d6d68b89e09fc4019f424cf305ecd4631543 + MDi = 866e59f90f41c1c113394a93d419ab5f6374450c0bd52985b1be35cf1470bfb0 + + i = 6 + M = 590a97b0bbbb852d72653030d792bcd4b7e03dd1d0fc93f24c46c1982d233602ae9be18da99d4229016c8f401a04d6d68b89e09fc4019f424cf305ecd4631543866e59f90f41c1c113394a93d419ab5f6374450c0bd52985b1be35cf1470bfb0 + MDi = e0ed40324feefac64355585966198e3293138be760ad09b2697707a8dc9fd5fa + + i = 7 + M = ae9be18da99d4229016c8f401a04d6d68b89e09fc4019f424cf305ecd4631543866e59f90f41c1c113394a93d419ab5f6374450c0bd52985b1be35cf1470bfb0e0ed40324feefac64355585966198e3293138be760ad09b2697707a8dc9fd5fa + MDi = 7fd3bc7a7f3e15afb6bc2cb43a0e54abb4abd37e80be9e54f1edbaedb75c31a5 +MD = ? + +COUNT = 17 + i = 3 + M = 8eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd08eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd08eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd0 + MDi = ad4d820e3edae759e8b4cd6d706390eaa8273e85e76d41b0f3bb044d8f58fa8f + + i = 4 + M = 8eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd08eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd0ad4d820e3edae759e8b4cd6d706390eaa8273e85e76d41b0f3bb044d8f58fa8f + MDi = a1214c764a065a220d57585c3d7dbd4c69d9bd81bfdf9d7e856a4cf336c6342b + + i = 5 + M = 8eca6994ac6093c1f7701bec60770293d754e9eb95372f9ab10ca58fe8864bd0ad4d820e3edae759e8b4cd6d706390eaa8273e85e76d41b0f3bb044d8f58fa8fa1214c764a065a220d57585c3d7dbd4c69d9bd81bfdf9d7e856a4cf336c6342b + MDi = 67b329a4fbfea4ccac33eff78a3facfbda947dc704fb8a5fc28b1d9f18c9b944 + + i = 6 + M = ad4d820e3edae759e8b4cd6d706390eaa8273e85e76d41b0f3bb044d8f58fa8fa1214c764a065a220d57585c3d7dbd4c69d9bd81bfdf9d7e856a4cf336c6342b67b329a4fbfea4ccac33eff78a3facfbda947dc704fb8a5fc28b1d9f18c9b944 + MDi = 2d4b04ae9fdca16472b13bb31c4bf2d4499eed538bc572e7108788ffbbf7cdcd + + i = 7 + M = a1214c764a065a220d57585c3d7dbd4c69d9bd81bfdf9d7e856a4cf336c6342b67b329a4fbfea4ccac33eff78a3facfbda947dc704fb8a5fc28b1d9f18c9b9442d4b04ae9fdca16472b13bb31c4bf2d4499eed538bc572e7108788ffbbf7cdcd + MDi = fbd184eca534ea968794b19a3140704936be80aef11b2865c9c22a6f873c3c81 +MD = ? + +COUNT = 18 + i = 3 + M = 05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc + MDi = 06082cfa1320689fffff48a29396cdda9846816930f682b30a0674e59771f484 + + i = 4 + M = 05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc06082cfa1320689fffff48a29396cdda9846816930f682b30a0674e59771f484 + MDi = ccea784a4e237e277e93006eff9d743e42a30a9f24e060d61af221ae8db3d853 + + i = 5 + M = 05457ef20a508c205225b9a836f11964febd60d9dd31943c49b91578741dd7fc06082cfa1320689fffff48a29396cdda9846816930f682b30a0674e59771f484ccea784a4e237e277e93006eff9d743e42a30a9f24e060d61af221ae8db3d853 + MDi = c03e252efecc0ab7a6f471b17892545ca7c7d6962f270fe26b7d67e8551253ab + + i = 6 + M = 06082cfa1320689fffff48a29396cdda9846816930f682b30a0674e59771f484ccea784a4e237e277e93006eff9d743e42a30a9f24e060d61af221ae8db3d853c03e252efecc0ab7a6f471b17892545ca7c7d6962f270fe26b7d67e8551253ab + MDi = d089bde549ab8c333ad480d513601fc1fb4d40892ff2dea2efb084bead6e21be + + i = 7 + M = ccea784a4e237e277e93006eff9d743e42a30a9f24e060d61af221ae8db3d853c03e252efecc0ab7a6f471b17892545ca7c7d6962f270fe26b7d67e8551253abd089bde549ab8c333ad480d513601fc1fb4d40892ff2dea2efb084bead6e21be + MDi = c5d616c61c0630d915ea2aeefdf1aceaf75a2048460686c64831febefbb76188 +MD = ? + +COUNT = 19 + i = 3 + M = 8ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce4128ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce4128ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce412 + MDi = 942e93eb3b700807faae77f1881d1a4b78fce1ed8d56ed6bc5d5d1c24e73df7d + + i = 4 + M = 8ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce4128ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce412942e93eb3b700807faae77f1881d1a4b78fce1ed8d56ed6bc5d5d1c24e73df7d + MDi = 41e670dc5f9a188d235427ef354ddb2817dbe4bcfc1e8fc7ee8d875bc5fec44b + + i = 5 + M = 8ee3ca17f5ad34649a41b3cb6f4c60d24229d3c39b9afdce11725779296ce412942e93eb3b700807faae77f1881d1a4b78fce1ed8d56ed6bc5d5d1c24e73df7d41e670dc5f9a188d235427ef354ddb2817dbe4bcfc1e8fc7ee8d875bc5fec44b + MDi = abd7457aa8beac17bab79dab44301e01e79a37b9f2487432f349e7607e5d4984 + + i = 6 + M = 942e93eb3b700807faae77f1881d1a4b78fce1ed8d56ed6bc5d5d1c24e73df7d41e670dc5f9a188d235427ef354ddb2817dbe4bcfc1e8fc7ee8d875bc5fec44babd7457aa8beac17bab79dab44301e01e79a37b9f2487432f349e7607e5d4984 + MDi = 22ef5aa76c202b88d47db1337e451b2f39bbf6d9267cea6347140170ef1a8797 + + i = 7 + M = 41e670dc5f9a188d235427ef354ddb2817dbe4bcfc1e8fc7ee8d875bc5fec44babd7457aa8beac17bab79dab44301e01e79a37b9f2487432f349e7607e5d498422ef5aa76c202b88d47db1337e451b2f39bbf6d9267cea6347140170ef1a8797 + MDi = d8bb355c19dc49057ad0b8644c5a3e1679199dedc5006004c82884e4d5a1a4d4 +MD = ? + +COUNT = 20 + i = 3 + M = c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4 + MDi = f90a90ef176400c22ba6ad3e95c23e3509e46601ec3f7ca8be6ad08ee52b9a25 + + i = 4 + M = c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4f90a90ef176400c22ba6ad3e95c23e3509e46601ec3f7ca8be6ad08ee52b9a25 + MDi = 5eb0807c63ca655fc2977c7f558d124d7fad69a14510e9cbffab53c0bfcaaf75 + + i = 5 + M = c9873b3341592ea56d0321a6653c350ebab65beb5e37f0a1554e9c07d93924a4f90a90ef176400c22ba6ad3e95c23e3509e46601ec3f7ca8be6ad08ee52b9a255eb0807c63ca655fc2977c7f558d124d7fad69a14510e9cbffab53c0bfcaaf75 + MDi = f5ecfbb357731c43013fe6ed8d6facae0e1ca8b78b65f2844d093dde5f03c4b6 + + i = 6 + M = f90a90ef176400c22ba6ad3e95c23e3509e46601ec3f7ca8be6ad08ee52b9a255eb0807c63ca655fc2977c7f558d124d7fad69a14510e9cbffab53c0bfcaaf75f5ecfbb357731c43013fe6ed8d6facae0e1ca8b78b65f2844d093dde5f03c4b6 + MDi = b94ea4f0e4dcb7b82f89d19564a867a70e6a49a2d90136f982dd7db07e21d3a1 + + i = 7 + M = 5eb0807c63ca655fc2977c7f558d124d7fad69a14510e9cbffab53c0bfcaaf75f5ecfbb357731c43013fe6ed8d6facae0e1ca8b78b65f2844d093dde5f03c4b6b94ea4f0e4dcb7b82f89d19564a867a70e6a49a2d90136f982dd7db07e21d3a1 + MDi = 35804b02c9f308ce4eeaeb03643adc97f233c9bada9bef9606e77704f36ff2d5 +MD = ? + +COUNT = 21 + i = 3 + M = eba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662feba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662feba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662f + MDi = faae03c3df9029295fd52481111d08d0324eeb27b33b4f5e9a73cc30d1dd54d5 + + i = 4 + M = eba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662feba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662ffaae03c3df9029295fd52481111d08d0324eeb27b33b4f5e9a73cc30d1dd54d5 + MDi = 1b35c7d6ad7cef4847dc340403456044df6dc65b3e6805c9e6dcbee8ef2fc0cc + + i = 5 + M = eba87758a57c5f9e3caa8da51b1acdbb2e69be17379f81715a134f5f09c4662ffaae03c3df9029295fd52481111d08d0324eeb27b33b4f5e9a73cc30d1dd54d51b35c7d6ad7cef4847dc340403456044df6dc65b3e6805c9e6dcbee8ef2fc0cc + MDi = 37b12dd1eb501c840592c606d9f495c24bf6b377f94a0d6850b51195aa4f47bc + + i = 6 + M = faae03c3df9029295fd52481111d08d0324eeb27b33b4f5e9a73cc30d1dd54d51b35c7d6ad7cef4847dc340403456044df6dc65b3e6805c9e6dcbee8ef2fc0cc37b12dd1eb501c840592c606d9f495c24bf6b377f94a0d6850b51195aa4f47bc + MDi = 9aa9487264f21a5e865f8088c5b9fea38a061bbe312736f7fc302c85d5fa7a85 + + i = 7 + M = 1b35c7d6ad7cef4847dc340403456044df6dc65b3e6805c9e6dcbee8ef2fc0cc37b12dd1eb501c840592c606d9f495c24bf6b377f94a0d6850b51195aa4f47bc9aa9487264f21a5e865f8088c5b9fea38a061bbe312736f7fc302c85d5fa7a85 + MDi = d3f99b061666441e280118a91be93aa83a205295ae0da99304fc113ae7786250 +MD = ? + +COUNT = 22 + i = 3 + M = 8f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b29113538f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b29113538f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b2911353 + MDi = e0aaffcabc194a378c3a88d183c119fe257a042432c89f027550a6c3cf333862 + + i = 4 + M = 8f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b29113538f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b2911353e0aaffcabc194a378c3a88d183c119fe257a042432c89f027550a6c3cf333862 + MDi = 0feb58a4ba67a04ca4122076f337d67a9a4a26bceecc0397ce735d258ea2d7b3 + + i = 5 + M = 8f70a95573734147b50866372b11673d97a8cd0754013f7f6fb35f96b2911353e0aaffcabc194a378c3a88d183c119fe257a042432c89f027550a6c3cf3338620feb58a4ba67a04ca4122076f337d67a9a4a26bceecc0397ce735d258ea2d7b3 + MDi = 08b8a4503a06cd96dcdd1a9914138dff637e4765a39157c3dfc71a23a8e5d6b3 + + i = 6 + M = e0aaffcabc194a378c3a88d183c119fe257a042432c89f027550a6c3cf3338620feb58a4ba67a04ca4122076f337d67a9a4a26bceecc0397ce735d258ea2d7b308b8a4503a06cd96dcdd1a9914138dff637e4765a39157c3dfc71a23a8e5d6b3 + MDi = 178fd49a63a430af3714428a2f4d1b2defe14a5d911611dfb19d2de179989aff + + i = 7 + M = 0feb58a4ba67a04ca4122076f337d67a9a4a26bceecc0397ce735d258ea2d7b308b8a4503a06cd96dcdd1a9914138dff637e4765a39157c3dfc71a23a8e5d6b3178fd49a63a430af3714428a2f4d1b2defe14a5d911611dfb19d2de179989aff + MDi = 924fd9062ae9e42c54e6fad3c68c84feca038ed563b1af5955710f5f0ae65a4f +MD = ? + +COUNT = 23 + i = 3 + M = 19ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a6219ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a6219ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a62 + MDi = 90fbcedc31e9a9e7cc1b961d92104ab5e8cb19cc9d455d137ba78210253ef80a + + i = 4 + M = 19ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a6219ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a6290fbcedc31e9a9e7cc1b961d92104ab5e8cb19cc9d455d137ba78210253ef80a + MDi = ca11841062a09ef9fa44ec920339626e4057a114f9737df886e6d43e57cff374 + + i = 5 + M = 19ec8b72cf00b934d5bde820566eadc516e0038cb54bfc59349c68b36d079a6290fbcedc31e9a9e7cc1b961d92104ab5e8cb19cc9d455d137ba78210253ef80aca11841062a09ef9fa44ec920339626e4057a114f9737df886e6d43e57cff374 + MDi = 699cddab16318f6f751d8f17ea4485c6e0c7ff2d3038c985eff740367a108000 + + i = 6 + M = 90fbcedc31e9a9e7cc1b961d92104ab5e8cb19cc9d455d137ba78210253ef80aca11841062a09ef9fa44ec920339626e4057a114f9737df886e6d43e57cff374699cddab16318f6f751d8f17ea4485c6e0c7ff2d3038c985eff740367a108000 + MDi = f020f1d4bc79bb4a044fca3b747311d54880469d90bfd367f2739b1f40ad4004 + + i = 7 + M = ca11841062a09ef9fa44ec920339626e4057a114f9737df886e6d43e57cff374699cddab16318f6f751d8f17ea4485c6e0c7ff2d3038c985eff740367a108000f020f1d4bc79bb4a044fca3b747311d54880469d90bfd367f2739b1f40ad4004 + MDi = cff928802d4677ee8f7f8ddd4a8aa8c819957c7901b34274f59c68ce5eddf821 +MD = ? + +COUNT = 24 + i = 3 + M = 22f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c39722f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c39722f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c397 + MDi = acdd624da98e0e27c4aac1a2c4cd8dd05edb880602de80235a329c8299530478 + + i = 4 + M = 22f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c39722f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c397acdd624da98e0e27c4aac1a2c4cd8dd05edb880602de80235a329c8299530478 + MDi = 579b96c88633f6f48c821ea0c6450df1e04d46a59eb5aee071cdbf361f9eed48 + + i = 5 + M = 22f7a748d30425980a9f83298b0b053ff8ac156f304c87aa5d10a01e2e05c397acdd624da98e0e27c4aac1a2c4cd8dd05edb880602de80235a329c8299530478579b96c88633f6f48c821ea0c6450df1e04d46a59eb5aee071cdbf361f9eed48 + MDi = 2bbf6cc4bfe81c157b1ed8b2aef6f25eae2e5a26cba62fadfb4be2ff447ac409 + + i = 6 + M = acdd624da98e0e27c4aac1a2c4cd8dd05edb880602de80235a329c8299530478579b96c88633f6f48c821ea0c6450df1e04d46a59eb5aee071cdbf361f9eed482bbf6cc4bfe81c157b1ed8b2aef6f25eae2e5a26cba62fadfb4be2ff447ac409 + MDi = 859a2227c05af92e852dd0f2a9b117b368f734cf9f516e3169fcb79df8398a43 + + i = 7 + M = 579b96c88633f6f48c821ea0c6450df1e04d46a59eb5aee071cdbf361f9eed482bbf6cc4bfe81c157b1ed8b2aef6f25eae2e5a26cba62fadfb4be2ff447ac409859a2227c05af92e852dd0f2a9b117b368f734cf9f516e3169fcb79df8398a43 + MDi = 3b085068438b074c31c581ea816738ef0be93c09d2f4a5f96b84b8974e545184 +MD = ? + +COUNT = 25 + i = 3 + M = 3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bf3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bf3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bf + MDi = a757f5acf55a4658ca3588aec08e020a5ac12db92338a0f692e0bbf160f68730 + + i = 4 + M = 3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bf3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bfa757f5acf55a4658ca3588aec08e020a5ac12db92338a0f692e0bbf160f68730 + MDi = 94240e0a9a259acc533482ae533f32bf3b86f6a3220bf61d70d401721321a614 + + i = 5 + M = 3429d8880a8862eb6973b245c7d62f2f8078b7defe8eb117e8c787b30df520bfa757f5acf55a4658ca3588aec08e020a5ac12db92338a0f692e0bbf160f6873094240e0a9a259acc533482ae533f32bf3b86f6a3220bf61d70d401721321a614 + MDi = ac8cdf7927fec0c8784e1b626646fb303db4b060b21b02aabf6a1a0ffb60461f + + i = 6 + M = a757f5acf55a4658ca3588aec08e020a5ac12db92338a0f692e0bbf160f6873094240e0a9a259acc533482ae533f32bf3b86f6a3220bf61d70d401721321a614ac8cdf7927fec0c8784e1b626646fb303db4b060b21b02aabf6a1a0ffb60461f + MDi = 6e9780a46803e0f7549fded78d9f5ad3121538c92b17cb5b55dbcad4dadc8aea + + i = 7 + M = 94240e0a9a259acc533482ae533f32bf3b86f6a3220bf61d70d401721321a614ac8cdf7927fec0c8784e1b626646fb303db4b060b21b02aabf6a1a0ffb60461f6e9780a46803e0f7549fded78d9f5ad3121538c92b17cb5b55dbcad4dadc8aea + MDi = 62d0f0f850dfecf9e029a1b59823a3fe8236a2d7c11f82c4d9e42553581baaca +MD = ? + +COUNT = 26 + i = 3 + M = 373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266ad373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266ad373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266ad + MDi = d4b1a605c5c5129efaf415c9a3634db591a410a5efa83e35ea3f04d486dc4908 + + i = 4 + M = 373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266ad373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266add4b1a605c5c5129efaf415c9a3634db591a410a5efa83e35ea3f04d486dc4908 + MDi = d766d9ac3efaba4e0f09a2bf2aa6820d4974dad5c0378119f6f1bec193973023 + + i = 5 + M = 373806e57129e849aa91a208a1f855f9bedfcd9f85b259a70fe481a35f0266add4b1a605c5c5129efaf415c9a3634db591a410a5efa83e35ea3f04d486dc4908d766d9ac3efaba4e0f09a2bf2aa6820d4974dad5c0378119f6f1bec193973023 + MDi = fe93cf405deabb6657a90a6de26a94f30af2fbfb8ff6303c3bee10b8e7a200c1 + + i = 6 + M = d4b1a605c5c5129efaf415c9a3634db591a410a5efa83e35ea3f04d486dc4908d766d9ac3efaba4e0f09a2bf2aa6820d4974dad5c0378119f6f1bec193973023fe93cf405deabb6657a90a6de26a94f30af2fbfb8ff6303c3bee10b8e7a200c1 + MDi = f09a4f23b492fcb85bdbdf5c0ebcee602b8f1bf509760e78b94084464f3a9069 + + i = 7 + M = d766d9ac3efaba4e0f09a2bf2aa6820d4974dad5c0378119f6f1bec193973023fe93cf405deabb6657a90a6de26a94f30af2fbfb8ff6303c3bee10b8e7a200c1f09a4f23b492fcb85bdbdf5c0ebcee602b8f1bf509760e78b94084464f3a9069 + MDi = 526eceee8c420da02c39119045abd7b411366ad37be438d5e5913f0bb9b40c60 +MD = ? + +COUNT = 27 + i = 3 + M = 6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d + MDi = 719f5526880e68325bf59ed6cfbff3e7b1b45f06bd732fd0b814f1906e945aef + + i = 4 + M = 6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d719f5526880e68325bf59ed6cfbff3e7b1b45f06bd732fd0b814f1906e945aef + MDi = 07989fd9625812badbe6d6f719873eb1e3c00de6ed50dae7433d6a290a6e1aac + + i = 5 + M = 6fa0be65b46bfc853be64470cc9cfe46e2001d1345b3eb4ce3e2f881a2c7a56d719f5526880e68325bf59ed6cfbff3e7b1b45f06bd732fd0b814f1906e945aef07989fd9625812badbe6d6f719873eb1e3c00de6ed50dae7433d6a290a6e1aac + MDi = 6765ffa1ea8fa2ba519076c5f050ea126a019ba904aeb8b955c1f6196f10782e + + i = 6 + M = 719f5526880e68325bf59ed6cfbff3e7b1b45f06bd732fd0b814f1906e945aef07989fd9625812badbe6d6f719873eb1e3c00de6ed50dae7433d6a290a6e1aac6765ffa1ea8fa2ba519076c5f050ea126a019ba904aeb8b955c1f6196f10782e + MDi = 870c6bd8ff8a112b6bc578e436123e41e810542fe737b964dc96abe128dbeae2 + + i = 7 + M = 07989fd9625812badbe6d6f719873eb1e3c00de6ed50dae7433d6a290a6e1aac6765ffa1ea8fa2ba519076c5f050ea126a019ba904aeb8b955c1f6196f10782e870c6bd8ff8a112b6bc578e436123e41e810542fe737b964dc96abe128dbeae2 + MDi = 4b799499e40617ab7e0da5605a3565a534e2235e7ec39aff41d10fdfa4eaf15e +MD = ? + +COUNT = 28 + i = 3 + M = b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584 + MDi = 923ec5f1e8be143fed2dc37d49e447c582b5c77128864b12d6114f410bc362b9 + + i = 4 + M = b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584923ec5f1e8be143fed2dc37d49e447c582b5c77128864b12d6114f410bc362b9 + MDi = 2166bdedebb6bbbdddae7fdb0288c0616696782bdb2e08c0b31803a8e91ad885 + + i = 5 + M = b32b578b078f6e3c8c48ca07de123fc7db6b6abe8ec09f6b91263e0353d2c584923ec5f1e8be143fed2dc37d49e447c582b5c77128864b12d6114f410bc362b92166bdedebb6bbbdddae7fdb0288c0616696782bdb2e08c0b31803a8e91ad885 + MDi = 71245d6b976df1131945c96626a723d315ab3d0af556e349879b0fd6f9aedd31 + + i = 6 + M = 923ec5f1e8be143fed2dc37d49e447c582b5c77128864b12d6114f410bc362b92166bdedebb6bbbdddae7fdb0288c0616696782bdb2e08c0b31803a8e91ad88571245d6b976df1131945c96626a723d315ab3d0af556e349879b0fd6f9aedd31 + MDi = 44b4190796d3f2aebef46ba1e3e94fec14521590b12f93c7be31724c361e41fc + + i = 7 + M = 2166bdedebb6bbbdddae7fdb0288c0616696782bdb2e08c0b31803a8e91ad88571245d6b976df1131945c96626a723d315ab3d0af556e349879b0fd6f9aedd3144b4190796d3f2aebef46ba1e3e94fec14521590b12f93c7be31724c361e41fc + MDi = 08787c824927ebb86a7682d54621e863f60357f0e1ec62f132474d0fb81fccce +MD = ? + +COUNT = 29 + i = 3 + M = 8cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b58cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b58cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b5 + MDi = 8e759178b5731e24ba78fdeb964ce69492bac03dbf092d3f09cafc02ffb6c67c + + i = 4 + M = 8cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b58cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b58e759178b5731e24ba78fdeb964ce69492bac03dbf092d3f09cafc02ffb6c67c + MDi = 67d61c3474b7339981aad565f4f43e2efee52eedf8357fa696351678e2b32c12 + + i = 5 + M = 8cb0edd50a485250433188a66758fc8167e07d665aeb1553f53e08169d1842b58e759178b5731e24ba78fdeb964ce69492bac03dbf092d3f09cafc02ffb6c67c67d61c3474b7339981aad565f4f43e2efee52eedf8357fa696351678e2b32c12 + MDi = 63e478ec36bb5d475327bfc0be67c885e2886c06554cf9ffc404d297d128cab6 + + i = 6 + M = 8e759178b5731e24ba78fdeb964ce69492bac03dbf092d3f09cafc02ffb6c67c67d61c3474b7339981aad565f4f43e2efee52eedf8357fa696351678e2b32c1263e478ec36bb5d475327bfc0be67c885e2886c06554cf9ffc404d297d128cab6 + MDi = 25456b373efbb4325a75ebb2f52852a6ed696a5f9575a071069d5410ce439b4d + + i = 7 + M = 67d61c3474b7339981aad565f4f43e2efee52eedf8357fa696351678e2b32c1263e478ec36bb5d475327bfc0be67c885e2886c06554cf9ffc404d297d128cab625456b373efbb4325a75ebb2f52852a6ed696a5f9575a071069d5410ce439b4d + MDi = abe3996b2acf9c2da4db8cc9632cb9745ccc38904cd1a06e06ac808804bb762c +MD = ? + +COUNT = 30 + i = 3 + M = 92150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc59892150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc59892150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc598 + MDi = 6b5dab763769b9e638d29b7c730acfa7ac9d3c2ea3f72ff3fcebbfe85e50e6a6 + + i = 4 + M = 92150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc59892150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc5986b5dab763769b9e638d29b7c730acfa7ac9d3c2ea3f72ff3fcebbfe85e50e6a6 + MDi = 709f02c6487fac7ab47264cc4ebe36508792aba3421bdafc37e18620dac0ac18 + + i = 5 + M = 92150694ff1674bf073856b6df9a6cd015087e9bd366e7387e8c19084e0cc5986b5dab763769b9e638d29b7c730acfa7ac9d3c2ea3f72ff3fcebbfe85e50e6a6709f02c6487fac7ab47264cc4ebe36508792aba3421bdafc37e18620dac0ac18 + MDi = 7f325c2bf85c4314e5f1f5ee938c68bde19ffb57a4609202ae96c875278e4436 + + i = 6 + M = 6b5dab763769b9e638d29b7c730acfa7ac9d3c2ea3f72ff3fcebbfe85e50e6a6709f02c6487fac7ab47264cc4ebe36508792aba3421bdafc37e18620dac0ac187f325c2bf85c4314e5f1f5ee938c68bde19ffb57a4609202ae96c875278e4436 + MDi = 9208071bb322c5243ebc865ec80812dc46d085c05c6380648368250a330d6180 + + i = 7 + M = 709f02c6487fac7ab47264cc4ebe36508792aba3421bdafc37e18620dac0ac187f325c2bf85c4314e5f1f5ee938c68bde19ffb57a4609202ae96c875278e44369208071bb322c5243ebc865ec80812dc46d085c05c6380648368250a330d6180 + MDi = 2f69a916fec2372f2271ec8a0a58ae1d7f65ab4ce0956dec9d61b6ba38d0d573 +MD = ? + +COUNT = 31 + i = 3 + M = 3ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d9123ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d9123ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d912 + MDi = b1512d7ee04628604f6559509279f4e216bf60ee78a9c1c1e96cd2f4233ef3f6 + + i = 4 + M = 3ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d9123ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d912b1512d7ee04628604f6559509279f4e216bf60ee78a9c1c1e96cd2f4233ef3f6 + MDi = a0fd55b6fbbc97cd5f1fd847aaa406f1083195504690672a83adb5c3b8e48931 + + i = 5 + M = 3ec487fd88c8e1321e9279f8d5a82026efee762d686968cd2d801ab7f6b3d912b1512d7ee04628604f6559509279f4e216bf60ee78a9c1c1e96cd2f4233ef3f6a0fd55b6fbbc97cd5f1fd847aaa406f1083195504690672a83adb5c3b8e48931 + MDi = d3541237f649f7a9089035b42a47ad4d40c4cca0e69d24131ea7d654fd687668 + + i = 6 + M = b1512d7ee04628604f6559509279f4e216bf60ee78a9c1c1e96cd2f4233ef3f6a0fd55b6fbbc97cd5f1fd847aaa406f1083195504690672a83adb5c3b8e48931d3541237f649f7a9089035b42a47ad4d40c4cca0e69d24131ea7d654fd687668 + MDi = caa25ec317b6c4c801f0c7667c0396ac015f1eff38099394230bc1582013a70d + + i = 7 + M = a0fd55b6fbbc97cd5f1fd847aaa406f1083195504690672a83adb5c3b8e48931d3541237f649f7a9089035b42a47ad4d40c4cca0e69d24131ea7d654fd687668caa25ec317b6c4c801f0c7667c0396ac015f1eff38099394230bc1582013a70d + MDi = 291098a27321a9ab0784a7dc5c6468076c2ba425c9295514e24c5a58653a3e1e +MD = ? + +COUNT = 32 + i = 3 + M = 894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e9894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e9894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e9 + MDi = 8c28864516d206a57052ea09665db1aa6e596d16aa4306f03d84485285c6d5a3 + + i = 4 + M = 894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e9894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e98c28864516d206a57052ea09665db1aa6e596d16aa4306f03d84485285c6d5a3 + MDi = 692a82f3024c0789031ca9ea8b29e4475b377af3e3effed880e24b2e489347a2 + + i = 5 + M = 894c78e468398414affcf1e9ab8fb14426e1fae964379615a212b744e61b12e98c28864516d206a57052ea09665db1aa6e596d16aa4306f03d84485285c6d5a3692a82f3024c0789031ca9ea8b29e4475b377af3e3effed880e24b2e489347a2 + MDi = 71da203b810f583274f1b81c5b6d784bf6f73f05a08e9f4eb353c70d7446fdc6 + + i = 6 + M = 8c28864516d206a57052ea09665db1aa6e596d16aa4306f03d84485285c6d5a3692a82f3024c0789031ca9ea8b29e4475b377af3e3effed880e24b2e489347a271da203b810f583274f1b81c5b6d784bf6f73f05a08e9f4eb353c70d7446fdc6 + MDi = e6381fef6ec77d7c33ea7a658cf50e074aef083d27469433160512cd2cffb08d + + i = 7 + M = 692a82f3024c0789031ca9ea8b29e4475b377af3e3effed880e24b2e489347a271da203b810f583274f1b81c5b6d784bf6f73f05a08e9f4eb353c70d7446fdc6e6381fef6ec77d7c33ea7a658cf50e074aef083d27469433160512cd2cffb08d + MDi = aad75abf9fb3bc6371ae42dcbbb55f51a44dafcd45a7942a812755c270fc3da3 +MD = ? + +COUNT = 33 + i = 3 + M = 7f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb47f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb47f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb4 + MDi = 30c6cbad4169490fb002a0c82b50f7d4645f8b661f7b2d204858dd9e96d8438f + + i = 4 + M = 7f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb47f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb430c6cbad4169490fb002a0c82b50f7d4645f8b661f7b2d204858dd9e96d8438f + MDi = 11b88f0c62586aedebb7a77dd94bb2079d19a26a9ac87d12a021ac3110528564 + + i = 5 + M = 7f6a9d2c8d476ad79c845f786da4bd4a8de9a4af05ad0cb12af1375077714cb430c6cbad4169490fb002a0c82b50f7d4645f8b661f7b2d204858dd9e96d8438f11b88f0c62586aedebb7a77dd94bb2079d19a26a9ac87d12a021ac3110528564 + MDi = 0ec1fd2f85c703d1466275197ca65cb7c0c48db2bae287a09036222ce309c9ef + + i = 6 + M = 30c6cbad4169490fb002a0c82b50f7d4645f8b661f7b2d204858dd9e96d8438f11b88f0c62586aedebb7a77dd94bb2079d19a26a9ac87d12a021ac31105285640ec1fd2f85c703d1466275197ca65cb7c0c48db2bae287a09036222ce309c9ef + MDi = cf29d516253780f8e6848f7862882fdce7f91a6fe87cd2cf496cf545d7712c99 + + i = 7 + M = 11b88f0c62586aedebb7a77dd94bb2079d19a26a9ac87d12a021ac31105285640ec1fd2f85c703d1466275197ca65cb7c0c48db2bae287a09036222ce309c9efcf29d516253780f8e6848f7862882fdce7f91a6fe87cd2cf496cf545d7712c99 + MDi = b7f59c44d515e2a8a8de0b156266c6abc83009085af9a90e4e29f4ad21a55d67 +MD = ? + +COUNT = 34 + i = 3 + M = 092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075 + MDi = a2546d0443e4a89e193e46d93fdd9e704d3d167d8ef24d7a98fe5250c526d68f + + i = 4 + M = 092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075a2546d0443e4a89e193e46d93fdd9e704d3d167d8ef24d7a98fe5250c526d68f + MDi = 7f6e3ab6c6ba21ef2b90fc042bca8d465d010755e39622c2f71759b857037994 + + i = 5 + M = 092ae9d7a22cff2d6f28cb2ed47c082ef279fc20e2246b638c6c0c941238a075a2546d0443e4a89e193e46d93fdd9e704d3d167d8ef24d7a98fe5250c526d68f7f6e3ab6c6ba21ef2b90fc042bca8d465d010755e39622c2f71759b857037994 + MDi = 5b1351e2c770a71ab6a85f486144e184edf582f2b25d6b58cd61de23d6d047bb + + i = 6 + M = a2546d0443e4a89e193e46d93fdd9e704d3d167d8ef24d7a98fe5250c526d68f7f6e3ab6c6ba21ef2b90fc042bca8d465d010755e39622c2f71759b8570379945b1351e2c770a71ab6a85f486144e184edf582f2b25d6b58cd61de23d6d047bb + MDi = 03458d7595920efa8e59453c0a010410a3d5382feab49897c5ef5e06d5224256 + + i = 7 + M = 7f6e3ab6c6ba21ef2b90fc042bca8d465d010755e39622c2f71759b8570379945b1351e2c770a71ab6a85f486144e184edf582f2b25d6b58cd61de23d6d047bb03458d7595920efa8e59453c0a010410a3d5382feab49897c5ef5e06d5224256 + MDi = d887850b6ee937946aacf718550cd7afc1c14fde8232e52493f82decf7e610de +MD = ? + +COUNT = 35 + i = 3 + M = 553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249 + MDi = bef285cce8dbd7979d827bf69083031ef5bcf7c117fac0f877624868f499a1b9 + + i = 4 + M = 553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249bef285cce8dbd7979d827bf69083031ef5bcf7c117fac0f877624868f499a1b9 + MDi = 935aafb98ec0a7c726c03c8ed6efdbb39542bbaaea484bd03252bb3ca5405b48 + + i = 5 + M = 553d007076a97c6c6566600693cff33fcba2d021c1fb690427823d65076e4249bef285cce8dbd7979d827bf69083031ef5bcf7c117fac0f877624868f499a1b9935aafb98ec0a7c726c03c8ed6efdbb39542bbaaea484bd03252bb3ca5405b48 + MDi = 7be3b09bf757d9e5059a2e458ec655c7f24044244f844929e9144041c043fe74 + + i = 6 + M = bef285cce8dbd7979d827bf69083031ef5bcf7c117fac0f877624868f499a1b9935aafb98ec0a7c726c03c8ed6efdbb39542bbaaea484bd03252bb3ca5405b487be3b09bf757d9e5059a2e458ec655c7f24044244f844929e9144041c043fe74 + MDi = ac040d2e0867fdec19e8f39ed4c921dde4c1f8120083c96dc31f340fa3703f96 + + i = 7 + M = 935aafb98ec0a7c726c03c8ed6efdbb39542bbaaea484bd03252bb3ca5405b487be3b09bf757d9e5059a2e458ec655c7f24044244f844929e9144041c043fe74ac040d2e0867fdec19e8f39ed4c921dde4c1f8120083c96dc31f340fa3703f96 + MDi = 9a1fe0c70bf2d1e918374d516de64c2c399edfc732eb45edd022435d2ac6bc61 +MD = ? + +COUNT = 36 + i = 3 + M = 17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b + MDi = 0ac9461a32f572b667bf537a6c7ce68a3d3e10976ebda3203b1405a539a4de05 + + i = 4 + M = 17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b0ac9461a32f572b667bf537a6c7ce68a3d3e10976ebda3203b1405a539a4de05 + MDi = 917231f71ef8a59e5aefb1f74b867d483817a44828257eea125ffa7e0d2513a6 + + i = 5 + M = 17a8b074390ff2aca2b9cb7bfa17310a293f522b6bfe9b6b6f1429d709f8be7b0ac9461a32f572b667bf537a6c7ce68a3d3e10976ebda3203b1405a539a4de05917231f71ef8a59e5aefb1f74b867d483817a44828257eea125ffa7e0d2513a6 + MDi = afbab3f46930552c02422e457d92179d2b19cde1644122d340a17c0033e3ab18 + + i = 6 + M = 0ac9461a32f572b667bf537a6c7ce68a3d3e10976ebda3203b1405a539a4de05917231f71ef8a59e5aefb1f74b867d483817a44828257eea125ffa7e0d2513a6afbab3f46930552c02422e457d92179d2b19cde1644122d340a17c0033e3ab18 + MDi = 14eb30aecc5becc3b377a414d5b082f8e8bfe46a103422b35640dc120b3437cd + + i = 7 + M = 917231f71ef8a59e5aefb1f74b867d483817a44828257eea125ffa7e0d2513a6afbab3f46930552c02422e457d92179d2b19cde1644122d340a17c0033e3ab1814eb30aecc5becc3b377a414d5b082f8e8bfe46a103422b35640dc120b3437cd + MDi = 57a0cc6c14e1524cfa8c8202addda99c59e22dc987fc7d3e579d4fa1626febc5 +MD = ? + +COUNT = 37 + i = 3 + M = 6d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea8566d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea8566d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea856 + MDi = 0d37a4ee7b1550d16b5e630a04f45534446ad65d909093eee6782e274ff936b8 + + i = 4 + M = 6d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea8566d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea8560d37a4ee7b1550d16b5e630a04f45534446ad65d909093eee6782e274ff936b8 + MDi = 7103fb596447aba64a83b63fe9b1f296e0c8267495ceb46e442a1f62841ebeda + + i = 5 + M = 6d903e776f8edadc19c680fab311dfec6aebf7333dd924dadc21fd0b624ea8560d37a4ee7b1550d16b5e630a04f45534446ad65d909093eee6782e274ff936b87103fb596447aba64a83b63fe9b1f296e0c8267495ceb46e442a1f62841ebeda + MDi = 1fe5afaa9714451fdaadc517f89609768c6cbe8873e8812bb78104cbd1349bdc + + i = 6 + M = 0d37a4ee7b1550d16b5e630a04f45534446ad65d909093eee6782e274ff936b87103fb596447aba64a83b63fe9b1f296e0c8267495ceb46e442a1f62841ebeda1fe5afaa9714451fdaadc517f89609768c6cbe8873e8812bb78104cbd1349bdc + MDi = 4aa0343eeca2c23da3ccff48c01aedb01bdd26945b3e04cf367de1aed9ad25f9 + + i = 7 + M = 7103fb596447aba64a83b63fe9b1f296e0c8267495ceb46e442a1f62841ebeda1fe5afaa9714451fdaadc517f89609768c6cbe8873e8812bb78104cbd1349bdc4aa0343eeca2c23da3ccff48c01aedb01bdd26945b3e04cf367de1aed9ad25f9 + MDi = 52832d80ba46e70298cf0062a6eae24bb1679eb88326f664accb7270cb953e68 +MD = ? + +COUNT = 38 + i = 3 + M = 1a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a6081a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a6081a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a608 + MDi = c3e9db14e06f0d492268cc8826aefe63ad95c7b403724706b7c49e746b2f9262 + + i = 4 + M = 1a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a6081a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a608c3e9db14e06f0d492268cc8826aefe63ad95c7b403724706b7c49e746b2f9262 + MDi = 0877de2b6e53659c7723e2b49a706fe596c6f6998d713bd9ce9eee347959c7f4 + + i = 5 + M = 1a340486e0703cfddf87dbedb73c93b499ed6018ed8a50ae148ec9cb0be1a608c3e9db14e06f0d492268cc8826aefe63ad95c7b403724706b7c49e746b2f92620877de2b6e53659c7723e2b49a706fe596c6f6998d713bd9ce9eee347959c7f4 + MDi = 8ba7490f1764c77bcbc19b904f1f23faa20cb987666a1a529321ab09c1a0d678 + + i = 6 + M = c3e9db14e06f0d492268cc8826aefe63ad95c7b403724706b7c49e746b2f92620877de2b6e53659c7723e2b49a706fe596c6f6998d713bd9ce9eee347959c7f48ba7490f1764c77bcbc19b904f1f23faa20cb987666a1a529321ab09c1a0d678 + MDi = 5792f2b2dbe7fc4d0c8ed7535a7f56c54671a5a2c58ebd0b6ab3a0d1b6fbdf3d + + i = 7 + M = 0877de2b6e53659c7723e2b49a706fe596c6f6998d713bd9ce9eee347959c7f48ba7490f1764c77bcbc19b904f1f23faa20cb987666a1a529321ab09c1a0d6785792f2b2dbe7fc4d0c8ed7535a7f56c54671a5a2c58ebd0b6ab3a0d1b6fbdf3d + MDi = ef0393d1a738917025d17d2fc03ec62d286ae6af0b2d1876db3a7a57a74accb9 +MD = ? + +COUNT = 39 + i = 3 + M = d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531 + MDi = 768a928fb47a4078ff9e64fa56d36a21c9e6bb14350cfffe681d3df778d5a62c + + i = 4 + M = d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531768a928fb47a4078ff9e64fa56d36a21c9e6bb14350cfffe681d3df778d5a62c + MDi = 658ef30cca2477e3205fa41a00c0d54b6da1a674a9936663eacdcd09f3df610c + + i = 5 + M = d694d39fadf623aaf0144abd69d5cb580d050fc4efe49f98f0d910cba5ca3531768a928fb47a4078ff9e64fa56d36a21c9e6bb14350cfffe681d3df778d5a62c658ef30cca2477e3205fa41a00c0d54b6da1a674a9936663eacdcd09f3df610c + MDi = 0aa1a2e1a72fa8eda1785fdd5d5f91d6f615559675821154cda1bfa033fc9bf6 + + i = 6 + M = 768a928fb47a4078ff9e64fa56d36a21c9e6bb14350cfffe681d3df778d5a62c658ef30cca2477e3205fa41a00c0d54b6da1a674a9936663eacdcd09f3df610c0aa1a2e1a72fa8eda1785fdd5d5f91d6f615559675821154cda1bfa033fc9bf6 + MDi = 2747ddad28ae66ac0d3053c68a7b77deec717a982fb5c07eed36733b89a7bf1b + + i = 7 + M = 658ef30cca2477e3205fa41a00c0d54b6da1a674a9936663eacdcd09f3df610c0aa1a2e1a72fa8eda1785fdd5d5f91d6f615559675821154cda1bfa033fc9bf62747ddad28ae66ac0d3053c68a7b77deec717a982fb5c07eed36733b89a7bf1b + MDi = 7079b7d9c88c2e7369441fa6f5fb70a9c06cad9243f5617e5ac5d69505dd07ce +MD = ? + +COUNT = 40 + i = 3 + M = 128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a981128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a981128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a981 + MDi = 40c26f8f894ebb9fadb9a8cfcc353307d6e1b64965b020320239797502c6172b + + i = 4 + M = 128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a981128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a98140c26f8f894ebb9fadb9a8cfcc353307d6e1b64965b020320239797502c6172b + MDi = 13f79c6b11e9c745b6ce9e6a16f17e0e7907adb42d39e7cba836f1f37f5fa813 + + i = 5 + M = 128d31156899fec03b0251cd739f2ee6b5041e9323a5aa31389f67ddf0c5a98140c26f8f894ebb9fadb9a8cfcc353307d6e1b64965b020320239797502c6172b13f79c6b11e9c745b6ce9e6a16f17e0e7907adb42d39e7cba836f1f37f5fa813 + MDi = d5657095c9e4bbdfeb1d49a0975a1ce29cd0b2d901ed5d1259634cbbd648b3e7 + + i = 6 + M = 40c26f8f894ebb9fadb9a8cfcc353307d6e1b64965b020320239797502c6172b13f79c6b11e9c745b6ce9e6a16f17e0e7907adb42d39e7cba836f1f37f5fa813d5657095c9e4bbdfeb1d49a0975a1ce29cd0b2d901ed5d1259634cbbd648b3e7 + MDi = c8947a612a1ba688ace0ae5d3e9fcc8dac26e482d74be2c1fe82210d473b0d46 + + i = 7 + M = 13f79c6b11e9c745b6ce9e6a16f17e0e7907adb42d39e7cba836f1f37f5fa813d5657095c9e4bbdfeb1d49a0975a1ce29cd0b2d901ed5d1259634cbbd648b3e7c8947a612a1ba688ace0ae5d3e9fcc8dac26e482d74be2c1fe82210d473b0d46 + MDi = 082040ea6d8dc86dd3a4ce2cc200cc93210c9748d998fb33ff9c08daf0d35c5f +MD = ? + +COUNT = 41 + i = 3 + M = 1b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a351b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a351b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a35 + MDi = 79f7d3062aecf6d616b17d0ba4ce99b595c4fce18ed910525661263c61b76c92 + + i = 4 + M = 1b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a351b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a3579f7d3062aecf6d616b17d0ba4ce99b595c4fce18ed910525661263c61b76c92 + MDi = 0bd81ab2e26fbe71afee6ad9013780c8121191ff59bae220aace48ae83bd1aa2 + + i = 5 + M = 1b3df866d64c5db4f55a4137e1d88da5b6e8a107a6fbe0022cde5e5c293a6a3579f7d3062aecf6d616b17d0ba4ce99b595c4fce18ed910525661263c61b76c920bd81ab2e26fbe71afee6ad9013780c8121191ff59bae220aace48ae83bd1aa2 + MDi = 11b94224ead8d28e02b7b05a6e587b92c0fa3ed7a4a61c04474dd4146704e13c + + i = 6 + M = 79f7d3062aecf6d616b17d0ba4ce99b595c4fce18ed910525661263c61b76c920bd81ab2e26fbe71afee6ad9013780c8121191ff59bae220aace48ae83bd1aa211b94224ead8d28e02b7b05a6e587b92c0fa3ed7a4a61c04474dd4146704e13c + MDi = f5e3353011fb049d5b3423a6d13fbccfef9b2c95080c225c5236c22aa834a8cc + + i = 7 + M = 0bd81ab2e26fbe71afee6ad9013780c8121191ff59bae220aace48ae83bd1aa211b94224ead8d28e02b7b05a6e587b92c0fa3ed7a4a61c04474dd4146704e13cf5e3353011fb049d5b3423a6d13fbccfef9b2c95080c225c5236c22aa834a8cc + MDi = 98cbe68242651179d17541795324d6b6fad9bb2dd2bc2a76abb03ade12df0675 +MD = ? + +COUNT = 42 + i = 3 + M = 31feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db94331feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db94331feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db943 + MDi = 922bac896f85f49de5de37df2369a3277104c2d5027310b330cf2fe83c13ade9 + + i = 4 + M = 31feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db94331feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db943922bac896f85f49de5de37df2369a3277104c2d5027310b330cf2fe83c13ade9 + MDi = 27fa2af686e7be08bd643e8a2daa4b05c14530f9d02c86f455e5bb5c654f0166 + + i = 5 + M = 31feabe0b78b6a9ab56929570e48afc949e8150e5e1dd11ad7a8c6b43f1db943922bac896f85f49de5de37df2369a3277104c2d5027310b330cf2fe83c13ade927fa2af686e7be08bd643e8a2daa4b05c14530f9d02c86f455e5bb5c654f0166 + MDi = 9adfcd10d7c9ac284a45afda9fbcacf7f1fc466c583e83619e160185cfe29059 + + i = 6 + M = 922bac896f85f49de5de37df2369a3277104c2d5027310b330cf2fe83c13ade927fa2af686e7be08bd643e8a2daa4b05c14530f9d02c86f455e5bb5c654f01669adfcd10d7c9ac284a45afda9fbcacf7f1fc466c583e83619e160185cfe29059 + MDi = 40266b38e1da0816f85b9a1726624a9ef7c8e7f541cc9ef77fb3fc3cd07bdf10 + + i = 7 + M = 27fa2af686e7be08bd643e8a2daa4b05c14530f9d02c86f455e5bb5c654f01669adfcd10d7c9ac284a45afda9fbcacf7f1fc466c583e83619e160185cfe2905940266b38e1da0816f85b9a1726624a9ef7c8e7f541cc9ef77fb3fc3cd07bdf10 + MDi = c834924819431ab35e23a3cef55e8d25f880a5260564eaca704904eaad369561 +MD = ? + +COUNT = 43 + i = 3 + M = c7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ffc7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ffc7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ff + MDi = 168683d371660b1b4a2440c9807e34ac84dfe6091e657e164aa30075e06c16e6 + + i = 4 + M = c7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ffc7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ff168683d371660b1b4a2440c9807e34ac84dfe6091e657e164aa30075e06c16e6 + MDi = b920b7ea06817d99c5b33543efad8d3622360b883bfad0ee345930ad2ecdde3c + + i = 5 + M = c7c08d91944704e9de672577acc1a0cc832cc109e26742a2812822c55dd432ff168683d371660b1b4a2440c9807e34ac84dfe6091e657e164aa30075e06c16e6b920b7ea06817d99c5b33543efad8d3622360b883bfad0ee345930ad2ecdde3c + MDi = 2ba0960bd1aa7c011fa2c9bf329e032039dc8ea95f5b38b169620a8b318334a8 + + i = 6 + M = 168683d371660b1b4a2440c9807e34ac84dfe6091e657e164aa30075e06c16e6b920b7ea06817d99c5b33543efad8d3622360b883bfad0ee345930ad2ecdde3c2ba0960bd1aa7c011fa2c9bf329e032039dc8ea95f5b38b169620a8b318334a8 + MDi = ff58113e3d8e33661dcbb7cf4084a1556604f0d1262a0f7c2ae12a291c9cd510 + + i = 7 + M = b920b7ea06817d99c5b33543efad8d3622360b883bfad0ee345930ad2ecdde3c2ba0960bd1aa7c011fa2c9bf329e032039dc8ea95f5b38b169620a8b318334a8ff58113e3d8e33661dcbb7cf4084a1556604f0d1262a0f7c2ae12a291c9cd510 + MDi = e8f7136853ee5748deac5803df43a0939215f2a0ea8dc764a87dbd5a96765166 +MD = ? + +COUNT = 44 + i = 3 + M = 76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2a76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2a76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2a + MDi = fe45bdbae37389b9bef3cb83a370ce79b23a9655611ad6fe9fdb31d1907ad974 + + i = 4 + M = 76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2a76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2afe45bdbae37389b9bef3cb83a370ce79b23a9655611ad6fe9fdb31d1907ad974 + MDi = b496b8707018f7f695cf6bdb875465a3a5423bc7353aa236182930bd2c140986 + + i = 5 + M = 76b41e08876b881dcf0007746a1a1e275e512b38c0f949cadd0521cc4bb43a2afe45bdbae37389b9bef3cb83a370ce79b23a9655611ad6fe9fdb31d1907ad974b496b8707018f7f695cf6bdb875465a3a5423bc7353aa236182930bd2c140986 + MDi = 97e7dfd69374b596eba276495438e1ceb578e99dbf92dbc5803e9fe3eb4a91bb + + i = 6 + M = fe45bdbae37389b9bef3cb83a370ce79b23a9655611ad6fe9fdb31d1907ad974b496b8707018f7f695cf6bdb875465a3a5423bc7353aa236182930bd2c14098697e7dfd69374b596eba276495438e1ceb578e99dbf92dbc5803e9fe3eb4a91bb + MDi = 89b0bf92e31b587cd25a4d582e9de0edc6e6df82f4297443400a73470f25b0a3 + + i = 7 + M = b496b8707018f7f695cf6bdb875465a3a5423bc7353aa236182930bd2c14098697e7dfd69374b596eba276495438e1ceb578e99dbf92dbc5803e9fe3eb4a91bb89b0bf92e31b587cd25a4d582e9de0edc6e6df82f4297443400a73470f25b0a3 + MDi = 5c1fc55d471e2cbc4b08d112eb0862b3a347561f9867ba24cc6e5ff4495d087b +MD = ? + +COUNT = 45 + i = 3 + M = eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c34eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c34eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c34 + MDi = 1ed3ae77661f70d2621470ebf5401f9da4498e47a4cf1920d35b3f374c2d82a3 + + i = 4 + M = eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c34eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c341ed3ae77661f70d2621470ebf5401f9da4498e47a4cf1920d35b3f374c2d82a3 + MDi = 32620067bb2fa7455af9ee0de0fdd0368555173449c28a05d0412eea1b1ac684 + + i = 5 + M = eb015a3eee8b130cba1f120e41b83eb032124d366f8a40eedb0569124b013c341ed3ae77661f70d2621470ebf5401f9da4498e47a4cf1920d35b3f374c2d82a332620067bb2fa7455af9ee0de0fdd0368555173449c28a05d0412eea1b1ac684 + MDi = 3866ad27535492e4bac3973c505cae1907f107772f823f1f423c5c38a8bcebdb + + i = 6 + M = 1ed3ae77661f70d2621470ebf5401f9da4498e47a4cf1920d35b3f374c2d82a332620067bb2fa7455af9ee0de0fdd0368555173449c28a05d0412eea1b1ac6843866ad27535492e4bac3973c505cae1907f107772f823f1f423c5c38a8bcebdb + MDi = 474ccc739d7bea0240cfc10fd5d350f568a3469108283f50ca54c652b9371e3c + + i = 7 + M = 32620067bb2fa7455af9ee0de0fdd0368555173449c28a05d0412eea1b1ac6843866ad27535492e4bac3973c505cae1907f107772f823f1f423c5c38a8bcebdb474ccc739d7bea0240cfc10fd5d350f568a3469108283f50ca54c652b9371e3c + MDi = f487316ece9945c01cc0686716b2de69d9b50281341d7465bdaaa3f682b4cb42 +MD = ? + +COUNT = 46 + i = 3 + M = 537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145a537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145a537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145a + MDi = bbd477c88d203d28e0e639919e362c99366c4b667e2ac22052b949dc097faab0 + + i = 4 + M = 537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145a537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145abbd477c88d203d28e0e639919e362c99366c4b667e2ac22052b949dc097faab0 + MDi = 0f8d90c89cf29772ef76a72f4233e89faed6cbd2f35b0736cd4fa85773a92fce + + i = 5 + M = 537d4b84f4c9ce3c30723db6ea2dfc3a8df1d2a4fb090c651dee04ebc019145abbd477c88d203d28e0e639919e362c99366c4b667e2ac22052b949dc097faab00f8d90c89cf29772ef76a72f4233e89faed6cbd2f35b0736cd4fa85773a92fce + MDi = f99075c0b94a2d74e9502be7d2182aba81c5fd3dda02b8dbd0089648e054dc59 + + i = 6 + M = bbd477c88d203d28e0e639919e362c99366c4b667e2ac22052b949dc097faab00f8d90c89cf29772ef76a72f4233e89faed6cbd2f35b0736cd4fa85773a92fcef99075c0b94a2d74e9502be7d2182aba81c5fd3dda02b8dbd0089648e054dc59 + MDi = c2c978f47c0d545ad310e84c88c0976b1b8f9e1600df9ad430c4fabceb95a491 + + i = 7 + M = 0f8d90c89cf29772ef76a72f4233e89faed6cbd2f35b0736cd4fa85773a92fcef99075c0b94a2d74e9502be7d2182aba81c5fd3dda02b8dbd0089648e054dc59c2c978f47c0d545ad310e84c88c0976b1b8f9e1600df9ad430c4fabceb95a491 + MDi = ffbfca658a024a3a4a4dfb62f5eb5a860282c19258f93228f4d42a65076b03f6 +MD = ? + +COUNT = 47 + i = 3 + M = 9000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e189000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e189000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e18 + MDi = a87d8091e407b622631ed278d3da29172337e441e394390e53ee25957d39ec38 + + i = 4 + M = 9000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e189000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e18a87d8091e407b622631ed278d3da29172337e441e394390e53ee25957d39ec38 + MDi = bc6e2508462ce7aed9e4b679b1a47f33d1c8fc49d1df285bbda9b11c43ebb2e4 + + i = 5 + M = 9000799092b166e5042f996f9dc4273daee4c96b80716e321ea17f50e3e74e18a87d8091e407b622631ed278d3da29172337e441e394390e53ee25957d39ec38bc6e2508462ce7aed9e4b679b1a47f33d1c8fc49d1df285bbda9b11c43ebb2e4 + MDi = c385f603fe3d90d7c2fe7cad7013308a29b1bf373850d98c47ed9f256be4330a + + i = 6 + M = a87d8091e407b622631ed278d3da29172337e441e394390e53ee25957d39ec38bc6e2508462ce7aed9e4b679b1a47f33d1c8fc49d1df285bbda9b11c43ebb2e4c385f603fe3d90d7c2fe7cad7013308a29b1bf373850d98c47ed9f256be4330a + MDi = a614601a9212150ad3c768382456239de2511dadf2d7e1ab543b13c096fe4715 + + i = 7 + M = bc6e2508462ce7aed9e4b679b1a47f33d1c8fc49d1df285bbda9b11c43ebb2e4c385f603fe3d90d7c2fe7cad7013308a29b1bf373850d98c47ed9f256be4330aa614601a9212150ad3c768382456239de2511dadf2d7e1ab543b13c096fe4715 + MDi = d47885ef61e8cef0421fc51e34495baa3cad19dad9015637313269ae583c2924 +MD = ? + +COUNT = 48 + i = 3 + M = 20c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a420c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a420c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a4 + MDi = c4e25b94247af6d72308fd16baf4c10454e9dc00f2160b217a0c0838427cab16 + + i = 4 + M = 20c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a420c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a4c4e25b94247af6d72308fd16baf4c10454e9dc00f2160b217a0c0838427cab16 + MDi = 70cf473aee9036331b4840cd66fd711ab888daa0b4e0223c5b47feafd7f85cf9 + + i = 5 + M = 20c9c91bf7bfd79ed144cfbf5ea7226f5513ceed5944834c53326dad1a6a77a4c4e25b94247af6d72308fd16baf4c10454e9dc00f2160b217a0c0838427cab1670cf473aee9036331b4840cd66fd711ab888daa0b4e0223c5b47feafd7f85cf9 + MDi = 5a1205337cacb86d5ecc0ca08a6eeaa3d25da247e892cec19f910722b5cb06bc + + i = 6 + M = c4e25b94247af6d72308fd16baf4c10454e9dc00f2160b217a0c0838427cab1670cf473aee9036331b4840cd66fd711ab888daa0b4e0223c5b47feafd7f85cf95a1205337cacb86d5ecc0ca08a6eeaa3d25da247e892cec19f910722b5cb06bc + MDi = 77224dd2e4cf70d9b5ecd1f803c1babd84051d21919cd39b216b3b3853b19f63 + + i = 7 + M = 70cf473aee9036331b4840cd66fd711ab888daa0b4e0223c5b47feafd7f85cf95a1205337cacb86d5ecc0ca08a6eeaa3d25da247e892cec19f910722b5cb06bc77224dd2e4cf70d9b5ecd1f803c1babd84051d21919cd39b216b3b3853b19f63 + MDi = 1c17adad508155580099296b1f20429c10967f395c36f15ab9b7ac6b81756b21 +MD = ? + +COUNT = 49 + i = 3 + M = 5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2d5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2d5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2d + MDi = e6a154c16e2fbd1cf0fa39c869060dd1132cde311330b9c99d5f26d2392f8845 + + i = 4 + M = 5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2d5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2de6a154c16e2fbd1cf0fa39c869060dd1132cde311330b9c99d5f26d2392f8845 + MDi = 5e8761271f8c861ebbd3af73d2d6d5fe215b2e34e281960a044e29b70193a0bc + + i = 5 + M = 5d3b9b8125e1c55ee5dd70548d38ebf9bc706536b6db98f85c48b3072d27cb2de6a154c16e2fbd1cf0fa39c869060dd1132cde311330b9c99d5f26d2392f88455e8761271f8c861ebbd3af73d2d6d5fe215b2e34e281960a044e29b70193a0bc + MDi = 39fbc17c224f1d6dc37a7f194ed487f0b393cced36cedecd603921f9e0df25c7 + + i = 6 + M = e6a154c16e2fbd1cf0fa39c869060dd1132cde311330b9c99d5f26d2392f88455e8761271f8c861ebbd3af73d2d6d5fe215b2e34e281960a044e29b70193a0bc39fbc17c224f1d6dc37a7f194ed487f0b393cced36cedecd603921f9e0df25c7 + MDi = c13f2bfe453283d4c12745828f2f6f421ca30993c40895eb40a425ab0920e955 + + i = 7 + M = 5e8761271f8c861ebbd3af73d2d6d5fe215b2e34e281960a044e29b70193a0bc39fbc17c224f1d6dc37a7f194ed487f0b393cced36cedecd603921f9e0df25c7c13f2bfe453283d4c12745828f2f6f421ca30993c40895eb40a425ab0920e955 + MDi = 0366f602c98a21dbbdb9b281539b29d5497e728c9b1cae30c503c35f09838dbe +MD = ? + +COUNT = 50 + i = 3 + M = 53e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a6253e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a6253e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a62 + MDi = b7924fd56083b881ed99b4a17c842d181f179fc6f3c530cba9384082620139ac + + i = 4 + M = 53e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a6253e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a62b7924fd56083b881ed99b4a17c842d181f179fc6f3c530cba9384082620139ac + MDi = 5b330802b0fef6fc7a569e65303e2a7954a903dbba90c3fc5cce3a594e8321ff + + i = 5 + M = 53e469865c36cddde9a53b29a3ed6b8bcc5e38f2c0f6dd3b356f1354be481a62b7924fd56083b881ed99b4a17c842d181f179fc6f3c530cba9384082620139ac5b330802b0fef6fc7a569e65303e2a7954a903dbba90c3fc5cce3a594e8321ff + MDi = 16ea343fa09273d4f4860c27820bac4e4e68a12be98cd54761809618892d8bfa + + i = 6 + M = b7924fd56083b881ed99b4a17c842d181f179fc6f3c530cba9384082620139ac5b330802b0fef6fc7a569e65303e2a7954a903dbba90c3fc5cce3a594e8321ff16ea343fa09273d4f4860c27820bac4e4e68a12be98cd54761809618892d8bfa + MDi = 79c4a94c8d6688f46596a828e23d4e28a302360db4378a33617609cf4d9ea5ea + + i = 7 + M = 5b330802b0fef6fc7a569e65303e2a7954a903dbba90c3fc5cce3a594e8321ff16ea343fa09273d4f4860c27820bac4e4e68a12be98cd54761809618892d8bfa79c4a94c8d6688f46596a828e23d4e28a302360db4378a33617609cf4d9ea5ea + MDi = be9eaf587ed8a41edcca0cdcb5191f3b2638ff395947912de996e2ea34d20786 +MD = ? + +COUNT = 51 + i = 3 + M = 4df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c854df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c854df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c85 + MDi = b695d089fa1a7e04e678dacb41f83bab286d3cfb51f9e0028b4d2f903e6012a6 + + i = 4 + M = 4df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c854df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c85b695d089fa1a7e04e678dacb41f83bab286d3cfb51f9e0028b4d2f903e6012a6 + MDi = ef5da1bf9d42ee37f6991a36fdfe4d15a80ba62c4215154f6a44b20aef7194b2 + + i = 5 + M = 4df8eb71a1f46ab35861dfcaccb723d372dfe58af9c036e5079f70661a419c85b695d089fa1a7e04e678dacb41f83bab286d3cfb51f9e0028b4d2f903e6012a6ef5da1bf9d42ee37f6991a36fdfe4d15a80ba62c4215154f6a44b20aef7194b2 + MDi = 90f891e52199c3d017af80199f7662111d432f0f9668e5714bf7c3c71ebd8117 + + i = 6 + M = b695d089fa1a7e04e678dacb41f83bab286d3cfb51f9e0028b4d2f903e6012a6ef5da1bf9d42ee37f6991a36fdfe4d15a80ba62c4215154f6a44b20aef7194b290f891e52199c3d017af80199f7662111d432f0f9668e5714bf7c3c71ebd8117 + MDi = a45bb893b73801f09a62bed4e583cb79a32af1e07614c394f120c6bfedd1bfa7 + + i = 7 + M = ef5da1bf9d42ee37f6991a36fdfe4d15a80ba62c4215154f6a44b20aef7194b290f891e52199c3d017af80199f7662111d432f0f9668e5714bf7c3c71ebd8117a45bb893b73801f09a62bed4e583cb79a32af1e07614c394f120c6bfedd1bfa7 + MDi = 3f66b9e3bb4246729aa9de95a2b4bc2229483d6c91dbbd639b6e6a8ff60860d8 +MD = ? + +COUNT = 52 + i = 3 + M = 503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9 + MDi = cf3902f1c97d394d102953ff7d6d0332127c467b898e89eb390082d4bad84fd8 + + i = 4 + M = 503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9cf3902f1c97d394d102953ff7d6d0332127c467b898e89eb390082d4bad84fd8 + MDi = ce9c56a5a8986ac233495dced030c3115fe1c606344c8369c9ad33d2492b61d1 + + i = 5 + M = 503fd9149292f8e65f5a59db63dc8305e527f7e70e9cdc282b9d5075f23f92c9cf3902f1c97d394d102953ff7d6d0332127c467b898e89eb390082d4bad84fd8ce9c56a5a8986ac233495dced030c3115fe1c606344c8369c9ad33d2492b61d1 + MDi = e8c42a6394d628e5157f5a95b422bedd50d2b9778b3c47ab3337019b1b447b55 + + i = 6 + M = cf3902f1c97d394d102953ff7d6d0332127c467b898e89eb390082d4bad84fd8ce9c56a5a8986ac233495dced030c3115fe1c606344c8369c9ad33d2492b61d1e8c42a6394d628e5157f5a95b422bedd50d2b9778b3c47ab3337019b1b447b55 + MDi = 2f680d91f3607eeb1361f311b1fbc87ed82b57cbb3733b9e5470e72dca18cd1a + + i = 7 + M = ce9c56a5a8986ac233495dced030c3115fe1c606344c8369c9ad33d2492b61d1e8c42a6394d628e5157f5a95b422bedd50d2b9778b3c47ab3337019b1b447b552f680d91f3607eeb1361f311b1fbc87ed82b57cbb3733b9e5470e72dca18cd1a + MDi = 0ec4e4312dce4e2ccb9f81825c605667f7731bd8b434b2e49afe63eb494e6907 +MD = ? + +COUNT = 53 + i = 3 + M = 904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc + MDi = 38768e570454d13da72bb576e6effb9d1534b9d76384749b79418b0789d76577 + + i = 4 + M = 904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc38768e570454d13da72bb576e6effb9d1534b9d76384749b79418b0789d76577 + MDi = 60077f96e472ee83ad1a3c21589607d1b1560cd6f12de99179a8f29757e86f51 + + i = 5 + M = 904c87a50b6383843b48cf9ce2a17c945b45c516fb0efa9eed88015fd10bb0dc38768e570454d13da72bb576e6effb9d1534b9d76384749b79418b0789d7657760077f96e472ee83ad1a3c21589607d1b1560cd6f12de99179a8f29757e86f51 + MDi = 7d0a4576bcadc04c03f3e8e2c126aa7e0b97d922ddb4d996d31fb0d91cd41658 + + i = 6 + M = 38768e570454d13da72bb576e6effb9d1534b9d76384749b79418b0789d7657760077f96e472ee83ad1a3c21589607d1b1560cd6f12de99179a8f29757e86f517d0a4576bcadc04c03f3e8e2c126aa7e0b97d922ddb4d996d31fb0d91cd41658 + MDi = 22487b949e58618df754dc00045bba7fd70a7277029c568f5df00f5d5fe55e6b + + i = 7 + M = 60077f96e472ee83ad1a3c21589607d1b1560cd6f12de99179a8f29757e86f517d0a4576bcadc04c03f3e8e2c126aa7e0b97d922ddb4d996d31fb0d91cd4165822487b949e58618df754dc00045bba7fd70a7277029c568f5df00f5d5fe55e6b + MDi = 93b9f86542131e0892ec67fd9311f6a30126c3c6ac097f4b3162bea8ede6e2b7 +MD = ? + +COUNT = 54 + i = 3 + M = 888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3a888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3a888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3a + MDi = cbbcdba088538cf9ce247679dac28a8ad23e4ce2728e37d39a6541ae616def9b + + i = 4 + M = 888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3a888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3acbbcdba088538cf9ce247679dac28a8ad23e4ce2728e37d39a6541ae616def9b + MDi = 59bc7f10649a447b46d338ee4ea97b392df7ad6e7f1bd9ca0b84f454700f6758 + + i = 5 + M = 888062fa782842258cadec93b1bd624bfe392500f5e6d6ef9e71b2963b73bb3acbbcdba088538cf9ce247679dac28a8ad23e4ce2728e37d39a6541ae616def9b59bc7f10649a447b46d338ee4ea97b392df7ad6e7f1bd9ca0b84f454700f6758 + MDi = 0172b016fdd6ed44694245a14e62e0b0f6ea7ca3e00230adc5ac2eed5fb11794 + + i = 6 + M = cbbcdba088538cf9ce247679dac28a8ad23e4ce2728e37d39a6541ae616def9b59bc7f10649a447b46d338ee4ea97b392df7ad6e7f1bd9ca0b84f454700f67580172b016fdd6ed44694245a14e62e0b0f6ea7ca3e00230adc5ac2eed5fb11794 + MDi = a04f3a6bf8e4d7a80b457e373b3a0ccaf78ac52a63ea2839a1c1c305037ad7a4 + + i = 7 + M = 59bc7f10649a447b46d338ee4ea97b392df7ad6e7f1bd9ca0b84f454700f67580172b016fdd6ed44694245a14e62e0b0f6ea7ca3e00230adc5ac2eed5fb11794a04f3a6bf8e4d7a80b457e373b3a0ccaf78ac52a63ea2839a1c1c305037ad7a4 + MDi = dd5c39ee3aa5cecd0a5adbf8a1f5f38707cdfdb994459fddb96314c98f8abba2 +MD = ? + +COUNT = 55 + i = 3 + M = 90c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac490c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac490c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac4 + MDi = 1437956906c49653af72dfa74636074e90179b33849ac33ddf8ae3e256742e56 + + i = 4 + M = 90c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac490c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac41437956906c49653af72dfa74636074e90179b33849ac33ddf8ae3e256742e56 + MDi = cfc42a76a317ae2164cce3ef9ec2925b416233a3ec9cda46043207c7755d0339 + + i = 5 + M = 90c2a13524c81890be3f184cddb2feb44053de85335fb7933c6af8e3ee5d4ac41437956906c49653af72dfa74636074e90179b33849ac33ddf8ae3e256742e56cfc42a76a317ae2164cce3ef9ec2925b416233a3ec9cda46043207c7755d0339 + MDi = bbd95106f19d339a4ff3f1858689028cfa3fb39499cc03ae381c03eea5c44fdf + + i = 6 + M = 1437956906c49653af72dfa74636074e90179b33849ac33ddf8ae3e256742e56cfc42a76a317ae2164cce3ef9ec2925b416233a3ec9cda46043207c7755d0339bbd95106f19d339a4ff3f1858689028cfa3fb39499cc03ae381c03eea5c44fdf + MDi = e9802eab1138bb66fc4ceeebb58adf9f2a5b45f06092eafa322dbc22aa4ad45a + + i = 7 + M = cfc42a76a317ae2164cce3ef9ec2925b416233a3ec9cda46043207c7755d0339bbd95106f19d339a4ff3f1858689028cfa3fb39499cc03ae381c03eea5c44fdfe9802eab1138bb66fc4ceeebb58adf9f2a5b45f06092eafa322dbc22aa4ad45a + MDi = f3230883cb6caa8e822d03ccea0f91527fe58d6e3430a8c2c41a0af59cd29b23 +MD = ? + +COUNT = 56 + i = 3 + M = 1efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c81efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c81efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c8 + MDi = 111fb51193f303b17ce2aedbcf3ff046e19356066c7bd0c3150a275e2bd800d5 + + i = 4 + M = 1efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c81efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c8111fb51193f303b17ce2aedbcf3ff046e19356066c7bd0c3150a275e2bd800d5 + MDi = d3f973e5cb082196728ad7a7e71786f292ae04d9f31ca4b82ee1f7e8a1bb2a14 + + i = 5 + M = 1efd7a3e6331c66b21c40416ce4f27d6aba8099359ad950b752e5491a156d9c8111fb51193f303b17ce2aedbcf3ff046e19356066c7bd0c3150a275e2bd800d5d3f973e5cb082196728ad7a7e71786f292ae04d9f31ca4b82ee1f7e8a1bb2a14 + MDi = a2d3dd4ca4cc469bd49b88fc434103e85e4ccf99f254b572c4d7f1cb1b964a25 + + i = 6 + M = 111fb51193f303b17ce2aedbcf3ff046e19356066c7bd0c3150a275e2bd800d5d3f973e5cb082196728ad7a7e71786f292ae04d9f31ca4b82ee1f7e8a1bb2a14a2d3dd4ca4cc469bd49b88fc434103e85e4ccf99f254b572c4d7f1cb1b964a25 + MDi = 0e5925c561622f35b0ced72bc61a810fa32d6434616c010b40989145469cb568 + + i = 7 + M = d3f973e5cb082196728ad7a7e71786f292ae04d9f31ca4b82ee1f7e8a1bb2a14a2d3dd4ca4cc469bd49b88fc434103e85e4ccf99f254b572c4d7f1cb1b964a250e5925c561622f35b0ced72bc61a810fa32d6434616c010b40989145469cb568 + MDi = d3cfffd028f44c0156c4a01991c3e86a78d6e7488a5112fee3ceb1f20c749868 +MD = ? + +COUNT = 57 + i = 3 + M = 3f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b02073f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b02073f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b0207 + MDi = 54101bc0a3eac7e6db72f0e05d815c86bf624c1822710c4902e2daa6033f6529 + + i = 4 + M = 3f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b02073f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b020754101bc0a3eac7e6db72f0e05d815c86bf624c1822710c4902e2daa6033f6529 + MDi = b2abcd39725e037c3a0531fff94a0a2797243644874dcde5b523e251f4698d21 + + i = 5 + M = 3f2a1f7bdda96ae3abe859e7767a0831ee69971b15d09d9385fac858643b020754101bc0a3eac7e6db72f0e05d815c86bf624c1822710c4902e2daa6033f6529b2abcd39725e037c3a0531fff94a0a2797243644874dcde5b523e251f4698d21 + MDi = 653b25d33588daff5a43c8449192c637830a92b6c0bec4f322bb357677185217 + + i = 6 + M = 54101bc0a3eac7e6db72f0e05d815c86bf624c1822710c4902e2daa6033f6529b2abcd39725e037c3a0531fff94a0a2797243644874dcde5b523e251f4698d21653b25d33588daff5a43c8449192c637830a92b6c0bec4f322bb357677185217 + MDi = a0ba4c144b97a5fbaf11094b36278db7a02a47e39fc8ce90460cb06f6f1899c3 + + i = 7 + M = b2abcd39725e037c3a0531fff94a0a2797243644874dcde5b523e251f4698d21653b25d33588daff5a43c8449192c637830a92b6c0bec4f322bb357677185217a0ba4c144b97a5fbaf11094b36278db7a02a47e39fc8ce90460cb06f6f1899c3 + MDi = f6ac824a6969369a34da111878ff658af6205a3b38ef2707c97f7922f2622e5f +MD = ? + +COUNT = 58 + i = 3 + M = e021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733ee021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733ee021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733e + MDi = 6688a4520bb86ded11934f01bb5aafb515496f7deefd73f1798eee5e51b8c030 + + i = 4 + M = e021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733ee021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733e6688a4520bb86ded11934f01bb5aafb515496f7deefd73f1798eee5e51b8c030 + MDi = 53118be3133f273eef9734a620b29593f535291c76d31b768f58e204d4be11f8 + + i = 5 + M = e021e5b9b812248cf5ea9563b84d753f5230cb1b442b04895871e3d8a7c6733e6688a4520bb86ded11934f01bb5aafb515496f7deefd73f1798eee5e51b8c03053118be3133f273eef9734a620b29593f535291c76d31b768f58e204d4be11f8 + MDi = 35690c82291ea3043b286ff226a135699ab30db8a0d760277094796866d451e0 + + i = 6 + M = 6688a4520bb86ded11934f01bb5aafb515496f7deefd73f1798eee5e51b8c03053118be3133f273eef9734a620b29593f535291c76d31b768f58e204d4be11f835690c82291ea3043b286ff226a135699ab30db8a0d760277094796866d451e0 + MDi = 12b93d1ad36963ab19c55d15a1976fa66e7886d31c6657c0c8666d83e4d70a1c + + i = 7 + M = 53118be3133f273eef9734a620b29593f535291c76d31b768f58e204d4be11f835690c82291ea3043b286ff226a135699ab30db8a0d760277094796866d451e012b93d1ad36963ab19c55d15a1976fa66e7886d31c6657c0c8666d83e4d70a1c + MDi = e3f908e5ec018aa19eed771764b827a811c47df2fd4b6f81a1cad5cf016122d9 +MD = ? + +COUNT = 59 + i = 3 + M = a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17 + MDi = ab22943d56801c14f14bd6b80a61e5ea27857178a5fe4767860f162d3060738d + + i = 4 + M = a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17ab22943d56801c14f14bd6b80a61e5ea27857178a5fe4767860f162d3060738d + MDi = d3b00711000ee707352403f57b455b7d2573b5e160b0ec9e435d7a8632f6eb49 + + i = 5 + M = a54312fe62b278b87bf440ff26703e280a13046071cfed2e23922e23ed7f8b17ab22943d56801c14f14bd6b80a61e5ea27857178a5fe4767860f162d3060738dd3b00711000ee707352403f57b455b7d2573b5e160b0ec9e435d7a8632f6eb49 + MDi = d110e24cbbe02375732baca65ec1bbb2961757cf1de33b55ee5ff43876eba1ce + + i = 6 + M = ab22943d56801c14f14bd6b80a61e5ea27857178a5fe4767860f162d3060738dd3b00711000ee707352403f57b455b7d2573b5e160b0ec9e435d7a8632f6eb49d110e24cbbe02375732baca65ec1bbb2961757cf1de33b55ee5ff43876eba1ce + MDi = f6992c456b61215f9c00889f7c647d97606cf8f3ee3e07ce1fa492e1a64d1b9c + + i = 7 + M = d3b00711000ee707352403f57b455b7d2573b5e160b0ec9e435d7a8632f6eb49d110e24cbbe02375732baca65ec1bbb2961757cf1de33b55ee5ff43876eba1cef6992c456b61215f9c00889f7c647d97606cf8f3ee3e07ce1fa492e1a64d1b9c + MDi = dc1b71f035792f946cdc7c1182d7ff95bb448258d55df0c1cbe27366c62559e4 +MD = ? + +COUNT = 60 + i = 3 + M = 2b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c16282b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c16282b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c1628 + MDi = 93a54bf51ba1d66dbc85b0e02231a6afe53b428ddf8979834111c3a1fe06f68c + + i = 4 + M = 2b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c16282b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c162893a54bf51ba1d66dbc85b0e02231a6afe53b428ddf8979834111c3a1fe06f68c + MDi = d13e865a79aae372b49ca8a70420fcf5b34a10b6ca87b785de8ff48a154a76f8 + + i = 5 + M = 2b9906372367f7704556d4345602337c581917c3d91711466f4d27c8597c162893a54bf51ba1d66dbc85b0e02231a6afe53b428ddf8979834111c3a1fe06f68cd13e865a79aae372b49ca8a70420fcf5b34a10b6ca87b785de8ff48a154a76f8 + MDi = f390f760fb4e0510d1fbf6373564046bfc8b5fbba08a0b9204f8ad154fda173a + + i = 6 + M = 93a54bf51ba1d66dbc85b0e02231a6afe53b428ddf8979834111c3a1fe06f68cd13e865a79aae372b49ca8a70420fcf5b34a10b6ca87b785de8ff48a154a76f8f390f760fb4e0510d1fbf6373564046bfc8b5fbba08a0b9204f8ad154fda173a + MDi = 09132ac3a7eea1c7ca5e0780e17001f65cdb11ce9e2180449f217dc2bff479c0 + + i = 7 + M = d13e865a79aae372b49ca8a70420fcf5b34a10b6ca87b785de8ff48a154a76f8f390f760fb4e0510d1fbf6373564046bfc8b5fbba08a0b9204f8ad154fda173a09132ac3a7eea1c7ca5e0780e17001f65cdb11ce9e2180449f217dc2bff479c0 + MDi = cbe88d278ae23c93079fa3170821c5285d1270bd44ba7cb88107a756b1ad5a7e +MD = ? + +COUNT = 61 + i = 3 + M = d13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45fd13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45fd13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45f + MDi = 5fec6fe157a2840c2ae910a6cf00494c986e73d49b24098d85e3dfae7d82107e + + i = 4 + M = d13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45fd13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45f5fec6fe157a2840c2ae910a6cf00494c986e73d49b24098d85e3dfae7d82107e + MDi = a05331e7a2b368edd2609cb5d22af0f09cecbff93e881b203fea78f5b49a433f + + i = 5 + M = d13e8e889226f72a1cfbb6d77a8cba9238900d148b4d0395e17415efc026a45f5fec6fe157a2840c2ae910a6cf00494c986e73d49b24098d85e3dfae7d82107ea05331e7a2b368edd2609cb5d22af0f09cecbff93e881b203fea78f5b49a433f + MDi = 648b7835ce50bcd0c50543993028fd8d0d802af89c964e7d83cd08c0b76da28d + + i = 6 + M = 5fec6fe157a2840c2ae910a6cf00494c986e73d49b24098d85e3dfae7d82107ea05331e7a2b368edd2609cb5d22af0f09cecbff93e881b203fea78f5b49a433f648b7835ce50bcd0c50543993028fd8d0d802af89c964e7d83cd08c0b76da28d + MDi = bb1994a199dc3d7cb1e91f050f1f51abfe4f14b270f91e5f753f9265f19115de + + i = 7 + M = a05331e7a2b368edd2609cb5d22af0f09cecbff93e881b203fea78f5b49a433f648b7835ce50bcd0c50543993028fd8d0d802af89c964e7d83cd08c0b76da28dbb1994a199dc3d7cb1e91f050f1f51abfe4f14b270f91e5f753f9265f19115de + MDi = 7499dae6a922bec325e72fa7b354c7cfee0bfcb55f920bacac23243c7edaed8d +MD = ? + +COUNT = 62 + i = 3 + M = 0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68d0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68d0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68d + MDi = a6390d2fd318e7ec7586408dda7ef8c7f8f725c48b357e021a94f9d9b8d0b608 + + i = 4 + M = 0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68d0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68da6390d2fd318e7ec7586408dda7ef8c7f8f725c48b357e021a94f9d9b8d0b608 + MDi = 55b7b7d9bfbaf5e232eeb8a5306f8844c1b820f4cde3f91ae2d3e01703a4f759 + + i = 5 + M = 0977ad675ee02c46cc7523a4d617e5c8e69894efe0ad2d159b616eac65fdb68da6390d2fd318e7ec7586408dda7ef8c7f8f725c48b357e021a94f9d9b8d0b60855b7b7d9bfbaf5e232eeb8a5306f8844c1b820f4cde3f91ae2d3e01703a4f759 + MDi = 54672a97ea0dde42ff9185dd352cb43fe03d727b0278b94af76bec3d7758bb3a + + i = 6 + M = a6390d2fd318e7ec7586408dda7ef8c7f8f725c48b357e021a94f9d9b8d0b60855b7b7d9bfbaf5e232eeb8a5306f8844c1b820f4cde3f91ae2d3e01703a4f75954672a97ea0dde42ff9185dd352cb43fe03d727b0278b94af76bec3d7758bb3a + MDi = b7595fda0b058e051a679cf20ee3dc3d0d03783aebbadb791067e0970dbd1a14 + + i = 7 + M = 55b7b7d9bfbaf5e232eeb8a5306f8844c1b820f4cde3f91ae2d3e01703a4f75954672a97ea0dde42ff9185dd352cb43fe03d727b0278b94af76bec3d7758bb3ab7595fda0b058e051a679cf20ee3dc3d0d03783aebbadb791067e0970dbd1a14 + MDi = 5d325992001a4ec59af16a47c9a7802346bff3ba083f720c5ed4e0efd8d2db5e +MD = ? + +COUNT = 63 + i = 3 + M = d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d6d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d6d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d6 + MDi = 7c0aaf4213474241a5b089e429026a402b94566501d98fda6912d954b9a5d42d + + i = 4 + M = d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d6d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d67c0aaf4213474241a5b089e429026a402b94566501d98fda6912d954b9a5d42d + MDi = 510f43083d96726e559bd39a0a06fcd9d3022c38e9db8980c667b74186db0ed6 + + i = 5 + M = d34cd5081453b756bba9a455e0cabe97281fab2c6b5952a69171f8ed60bfb8d67c0aaf4213474241a5b089e429026a402b94566501d98fda6912d954b9a5d42d510f43083d96726e559bd39a0a06fcd9d3022c38e9db8980c667b74186db0ed6 + MDi = 16bce2a4d72e02243318afcee0e4579f6a2cee168783c7a7ffb323af14ce7a7a + + i = 6 + M = 7c0aaf4213474241a5b089e429026a402b94566501d98fda6912d954b9a5d42d510f43083d96726e559bd39a0a06fcd9d3022c38e9db8980c667b74186db0ed616bce2a4d72e02243318afcee0e4579f6a2cee168783c7a7ffb323af14ce7a7a + MDi = 27c9316ce6b37dfaef9392cf3f12fbb6eca4629295e58590e8a6344d511680f5 + + i = 7 + M = 510f43083d96726e559bd39a0a06fcd9d3022c38e9db8980c667b74186db0ed616bce2a4d72e02243318afcee0e4579f6a2cee168783c7a7ffb323af14ce7a7a27c9316ce6b37dfaef9392cf3f12fbb6eca4629295e58590e8a6344d511680f5 + MDi = a3afff08fae9808dc2a9c222b91dfc18b7c24b205a71c38d91c56e84f87c81ec +MD = ? + +COUNT = 64 + i = 3 + M = 720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a19720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a19720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a19 + MDi = 97d7ba33dfeec2b55af3d4d12158423ce1d4d629c7011d5f73eeb0187a3c4134 + + i = 4 + M = 720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a19720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a1997d7ba33dfeec2b55af3d4d12158423ce1d4d629c7011d5f73eeb0187a3c4134 + MDi = 39727dabc8cbb20b94730dbc85ca38a14323af1c9ae74c648a5029b0ef4d06e6 + + i = 5 + M = 720dc85f63580df35589802b1ee71cfa0522e92022382d875fd862bca3e64a1997d7ba33dfeec2b55af3d4d12158423ce1d4d629c7011d5f73eeb0187a3c413439727dabc8cbb20b94730dbc85ca38a14323af1c9ae74c648a5029b0ef4d06e6 + MDi = 3d0f5434abdd4e485a2912795f66dee5776d324ad285ea63f04928c1227f252d + + i = 6 + M = 97d7ba33dfeec2b55af3d4d12158423ce1d4d629c7011d5f73eeb0187a3c413439727dabc8cbb20b94730dbc85ca38a14323af1c9ae74c648a5029b0ef4d06e63d0f5434abdd4e485a2912795f66dee5776d324ad285ea63f04928c1227f252d + MDi = f76d00c9b48ab2c20199db3d1737d98daef84beeacafaa081341976804ab13f9 + + i = 7 + M = 39727dabc8cbb20b94730dbc85ca38a14323af1c9ae74c648a5029b0ef4d06e63d0f5434abdd4e485a2912795f66dee5776d324ad285ea63f04928c1227f252df76d00c9b48ab2c20199db3d1737d98daef84beeacafaa081341976804ab13f9 + MDi = 00d448b924a7c4a1cb2f7ed5e3b4cd52d5ae74a5936f81ed77ec6ae3cffb3e09 +MD = ? + +COUNT = 65 + i = 3 + M = 933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e + MDi = 03fb738c252d00b55ab080d3efd652f38583f0c5ea0164a60a902f338d8685c2 + + i = 4 + M = 933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e03fb738c252d00b55ab080d3efd652f38583f0c5ea0164a60a902f338d8685c2 + MDi = afe2efb10657867222540cafbcd282359d3f39e385a4281a065041b4962b9410 + + i = 5 + M = 933991fa66485b36788447d2f0c8fd0f4d3d815f95a64fb197a1f66e7655ec3e03fb738c252d00b55ab080d3efd652f38583f0c5ea0164a60a902f338d8685c2afe2efb10657867222540cafbcd282359d3f39e385a4281a065041b4962b9410 + MDi = d66d91b5822be5b883013d4faca1d2df95db2574eac5f3d4c9c752a515fe8893 + + i = 6 + M = 03fb738c252d00b55ab080d3efd652f38583f0c5ea0164a60a902f338d8685c2afe2efb10657867222540cafbcd282359d3f39e385a4281a065041b4962b9410d66d91b5822be5b883013d4faca1d2df95db2574eac5f3d4c9c752a515fe8893 + MDi = d28d7dd6b60901527a23dcfd6f0920d13a1d9eb31d7b55190612b7d00c29db53 + + i = 7 + M = afe2efb10657867222540cafbcd282359d3f39e385a4281a065041b4962b9410d66d91b5822be5b883013d4faca1d2df95db2574eac5f3d4c9c752a515fe8893d28d7dd6b60901527a23dcfd6f0920d13a1d9eb31d7b55190612b7d00c29db53 + MDi = 2c21ddb750f77ab02904f2ef77bfeafe635f0e1cedb557d795917c28ece22141 +MD = ? + +COUNT = 66 + i = 3 + M = f80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bdf80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bdf80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bd + MDi = fd6eafb19a5b4d40bfca650a21ef1a5296fc6100a132382fc6ed861aa8784c0f + + i = 4 + M = f80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bdf80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bdfd6eafb19a5b4d40bfca650a21ef1a5296fc6100a132382fc6ed861aa8784c0f + MDi = 2de6e91694f7a2c2bcd1ee5342749f16a95336f993ccc94bddb9c8e87f0139df + + i = 5 + M = f80e89277c950a465d4b8a857efb1200dd7acf6b2dc4842bd6d3edeb1be232bdfd6eafb19a5b4d40bfca650a21ef1a5296fc6100a132382fc6ed861aa8784c0f2de6e91694f7a2c2bcd1ee5342749f16a95336f993ccc94bddb9c8e87f0139df + MDi = 8c07abbcbe92990d53ea77529e16bbd0af90455bc72b662672fcdaeb7ed377ce + + i = 6 + M = fd6eafb19a5b4d40bfca650a21ef1a5296fc6100a132382fc6ed861aa8784c0f2de6e91694f7a2c2bcd1ee5342749f16a95336f993ccc94bddb9c8e87f0139df8c07abbcbe92990d53ea77529e16bbd0af90455bc72b662672fcdaeb7ed377ce + MDi = b41e0f4ef451f328bf03f0e401263687cdf5ad09248ef7376d83df18a25865ba + + i = 7 + M = 2de6e91694f7a2c2bcd1ee5342749f16a95336f993ccc94bddb9c8e87f0139df8c07abbcbe92990d53ea77529e16bbd0af90455bc72b662672fcdaeb7ed377ceb41e0f4ef451f328bf03f0e401263687cdf5ad09248ef7376d83df18a25865ba + MDi = 081bf6de5a03f445373f01c220a92824152283f65eb9ce6aa542974998409464 +MD = ? + +COUNT = 67 + i = 3 + M = c180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98debc180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98debc180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98deb + MDi = 687e05def3de2d747ff55ed866bfef1e3339575387ea55474d1c27d4ae63ed5c + + i = 4 + M = c180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98debc180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98deb687e05def3de2d747ff55ed866bfef1e3339575387ea55474d1c27d4ae63ed5c + MDi = 70f3d724220e778c36b123b962c2ddbb36f94b90fa8d5c883176c118a29a3596 + + i = 5 + M = c180da36f5e94ebc6a41747500728394cf2fbb06c003a14c9c977e20a6d98deb687e05def3de2d747ff55ed866bfef1e3339575387ea55474d1c27d4ae63ed5c70f3d724220e778c36b123b962c2ddbb36f94b90fa8d5c883176c118a29a3596 + MDi = 57045f32fca8f9ee6f95ca3d9611c179e3e239acabb9524110c29986edc17117 + + i = 6 + M = 687e05def3de2d747ff55ed866bfef1e3339575387ea55474d1c27d4ae63ed5c70f3d724220e778c36b123b962c2ddbb36f94b90fa8d5c883176c118a29a359657045f32fca8f9ee6f95ca3d9611c179e3e239acabb9524110c29986edc17117 + MDi = 49053a883780df702b293cb92999b60eb3e4ef79004ae783976e059b8831dc70 + + i = 7 + M = 70f3d724220e778c36b123b962c2ddbb36f94b90fa8d5c883176c118a29a359657045f32fca8f9ee6f95ca3d9611c179e3e239acabb9524110c29986edc1711749053a883780df702b293cb92999b60eb3e4ef79004ae783976e059b8831dc70 + MDi = db892cf527d073aa52ec68280f31416b93b2fa0c97383866371396c448e6b2d9 +MD = ? + +COUNT = 68 + i = 3 + M = 2d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a802d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a802d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a80 + MDi = 74da55e4b831704e3e8e26744eeeb37a27c4dd77779f6d057c662c9bb6750cca + + i = 4 + M = 2d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a802d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a8074da55e4b831704e3e8e26744eeeb37a27c4dd77779f6d057c662c9bb6750cca + MDi = fee6f5cbb4818bea2583b133d22dbe8d1c7ddb7e0ee0f5021d785abd229bb3c6 + + i = 5 + M = 2d3e75cc7f37a6dee320001adc7e0d8811b87f532e126cbd99f13874cd149a8074da55e4b831704e3e8e26744eeeb37a27c4dd77779f6d057c662c9bb6750ccafee6f5cbb4818bea2583b133d22dbe8d1c7ddb7e0ee0f5021d785abd229bb3c6 + MDi = b5d4472e86d9e6d5df0f9fe8d6a3604f43aa06f7c7c7f30a5c701c13538bf5fb + + i = 6 + M = 74da55e4b831704e3e8e26744eeeb37a27c4dd77779f6d057c662c9bb6750ccafee6f5cbb4818bea2583b133d22dbe8d1c7ddb7e0ee0f5021d785abd229bb3c6b5d4472e86d9e6d5df0f9fe8d6a3604f43aa06f7c7c7f30a5c701c13538bf5fb + MDi = 402bcc8ad4fc14de49b4d98abeabbc682b9d5f208478c4bec55b60380312eefb + + i = 7 + M = fee6f5cbb4818bea2583b133d22dbe8d1c7ddb7e0ee0f5021d785abd229bb3c6b5d4472e86d9e6d5df0f9fe8d6a3604f43aa06f7c7c7f30a5c701c13538bf5fb402bcc8ad4fc14de49b4d98abeabbc682b9d5f208478c4bec55b60380312eefb + MDi = 13cea15f73be777c5b7955c8c827202340078246f10ea19b4805e22be21a5225 +MD = ? + +COUNT = 69 + i = 3 + M = 3edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee7863edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee7863edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee786 + MDi = f09ec2cfab62e752c0da62330dbd87cd761e4b64d9b31ca53fbe6d6b51da5e02 + + i = 4 + M = 3edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee7863edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee786f09ec2cfab62e752c0da62330dbd87cd761e4b64d9b31ca53fbe6d6b51da5e02 + MDi = 6d8ace7c02579208e6f70bcb9d20fbadc9d58e6f48e10f2f1c6722dc4a2ade3b + + i = 5 + M = 3edd7afe868f3876cfce54aeb22fb55475aa4df87015c1defed2fb41f13ee786f09ec2cfab62e752c0da62330dbd87cd761e4b64d9b31ca53fbe6d6b51da5e026d8ace7c02579208e6f70bcb9d20fbadc9d58e6f48e10f2f1c6722dc4a2ade3b + MDi = 64f480ab46dffb7fa50b33641e69c0ab168324939de9d384ce2bc197389e0fa5 + + i = 6 + M = f09ec2cfab62e752c0da62330dbd87cd761e4b64d9b31ca53fbe6d6b51da5e026d8ace7c02579208e6f70bcb9d20fbadc9d58e6f48e10f2f1c6722dc4a2ade3b64f480ab46dffb7fa50b33641e69c0ab168324939de9d384ce2bc197389e0fa5 + MDi = f0f6608717d408453aa8a00fbd78153d27452425cdd8f7e068ec028aeea08206 + + i = 7 + M = 6d8ace7c02579208e6f70bcb9d20fbadc9d58e6f48e10f2f1c6722dc4a2ade3b64f480ab46dffb7fa50b33641e69c0ab168324939de9d384ce2bc197389e0fa5f0f6608717d408453aa8a00fbd78153d27452425cdd8f7e068ec028aeea08206 + MDi = 725106fe9f809caf1fb54bf7d395f46366ee5d46fe8977b0bdd77b84488e2558 +MD = ? + +COUNT = 70 + i = 3 + M = 7548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd67548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd67548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd6 + MDi = a82951e92b633a5d8e8e5ad8d0632eecc80447fa19a23c7d25caccf05b65d15b + + i = 4 + M = 7548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd67548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd6a82951e92b633a5d8e8e5ad8d0632eecc80447fa19a23c7d25caccf05b65d15b + MDi = 1dbb4b866d08f2164e8ea345547ec45193a82be7c11cf895d640895607a99019 + + i = 5 + M = 7548c1cc9b96a65a918b37b4817825f32841bbc575ea8e6d12fd9d0c66ce8cd6a82951e92b633a5d8e8e5ad8d0632eecc80447fa19a23c7d25caccf05b65d15b1dbb4b866d08f2164e8ea345547ec45193a82be7c11cf895d640895607a99019 + MDi = 6fcc3ec64ae0f7ad6adf86cd3a5741adcefe21ba2c528544b174c37c8d59598b + + i = 6 + M = a82951e92b633a5d8e8e5ad8d0632eecc80447fa19a23c7d25caccf05b65d15b1dbb4b866d08f2164e8ea345547ec45193a82be7c11cf895d640895607a990196fcc3ec64ae0f7ad6adf86cd3a5741adcefe21ba2c528544b174c37c8d59598b + MDi = de7aae231a9107594f70c275563b6ef44973f6d0732e09586f3a34d6e048b988 + + i = 7 + M = 1dbb4b866d08f2164e8ea345547ec45193a82be7c11cf895d640895607a990196fcc3ec64ae0f7ad6adf86cd3a5741adcefe21ba2c528544b174c37c8d59598bde7aae231a9107594f70c275563b6ef44973f6d0732e09586f3a34d6e048b988 + MDi = 4fb7b2d373ddbd15a23feb38b5b4bcc27297296ae50a22d7282335fae47d29d5 +MD = ? + +COUNT = 71 + i = 3 + M = a0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1aca0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1aca0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1ac + MDi = 636d522f410a1c1598322f7aa0473aef75fca674e0487240bf0e8c5a1a726a5a + + i = 4 + M = a0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1aca0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1ac636d522f410a1c1598322f7aa0473aef75fca674e0487240bf0e8c5a1a726a5a + MDi = 8a3e66856038ca556a07f1cd7161c81fbee98f4d92074e7e6f99d5c28b994e95 + + i = 5 + M = a0ea397e82b8c7639d3594199c517b8f42f5c3dc40d104b51a42b46eb891d1ac636d522f410a1c1598322f7aa0473aef75fca674e0487240bf0e8c5a1a726a5a8a3e66856038ca556a07f1cd7161c81fbee98f4d92074e7e6f99d5c28b994e95 + MDi = 72e172dcfc38237e9469dfe4f66e305f7d7ebf4248cd27223b75597b471d58f6 + + i = 6 + M = 636d522f410a1c1598322f7aa0473aef75fca674e0487240bf0e8c5a1a726a5a8a3e66856038ca556a07f1cd7161c81fbee98f4d92074e7e6f99d5c28b994e9572e172dcfc38237e9469dfe4f66e305f7d7ebf4248cd27223b75597b471d58f6 + MDi = d7066efdcbb883f2f0db65e0d5ffefbfd7f5b009d549e509f05ad087993efad9 + + i = 7 + M = 8a3e66856038ca556a07f1cd7161c81fbee98f4d92074e7e6f99d5c28b994e9572e172dcfc38237e9469dfe4f66e305f7d7ebf4248cd27223b75597b471d58f6d7066efdcbb883f2f0db65e0d5ffefbfd7f5b009d549e509f05ad087993efad9 + MDi = 057296eb3f6a645ee357c0c172dbe5bcdb75085002e0c6406d6884ce3441d49d +MD = ? + +COUNT = 72 + i = 3 + M = 7fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b77fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b77fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b7 + MDi = 1d41a6774852c89be4cf24eff96541db9bec5feb6039e914ab7230ebc40ca156 + + i = 4 + M = 7fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b77fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b71d41a6774852c89be4cf24eff96541db9bec5feb6039e914ab7230ebc40ca156 + MDi = 08e47b8322cdbb3c8cc2c0bc942d48ce31224c888a24d8dc3953c6dd0ca2f753 + + i = 5 + M = 7fce4436abbf5da053cad07e8cf721c24442f926d4cc20cb8ac0a68b9d63b8b71d41a6774852c89be4cf24eff96541db9bec5feb6039e914ab7230ebc40ca15608e47b8322cdbb3c8cc2c0bc942d48ce31224c888a24d8dc3953c6dd0ca2f753 + MDi = 8002258a82d30e879d7ef89b37d827446bc6cd24829c26d7a14b18dd246829c7 + + i = 6 + M = 1d41a6774852c89be4cf24eff96541db9bec5feb6039e914ab7230ebc40ca15608e47b8322cdbb3c8cc2c0bc942d48ce31224c888a24d8dc3953c6dd0ca2f7538002258a82d30e879d7ef89b37d827446bc6cd24829c26d7a14b18dd246829c7 + MDi = 8145f35e2310d5c02a01560280fd21a27240a21e95d7c6cc5226fed42180b3d6 + + i = 7 + M = 08e47b8322cdbb3c8cc2c0bc942d48ce31224c888a24d8dc3953c6dd0ca2f7538002258a82d30e879d7ef89b37d827446bc6cd24829c26d7a14b18dd246829c78145f35e2310d5c02a01560280fd21a27240a21e95d7c6cc5226fed42180b3d6 + MDi = d3dc4b845f3d67c84340ee2f021a38fa05df25d02d079a0c74d225abf065f6e1 +MD = ? + +COUNT = 73 + i = 3 + M = 48f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac5773248f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac5773248f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac57732 + MDi = 645c8ec9026e0fa74a29da730461da510601f3c920d007f6f297acc79bc42c4d + + i = 4 + M = 48f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac5773248f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac57732645c8ec9026e0fa74a29da730461da510601f3c920d007f6f297acc79bc42c4d + MDi = 47ecdacd64e83a635bdcc3a45df8f80390600013d9ea058f5100384589e411b2 + + i = 5 + M = 48f93612a3689b8123fa234251e59a9784dc865dda43186e02a3fa10eac57732645c8ec9026e0fa74a29da730461da510601f3c920d007f6f297acc79bc42c4d47ecdacd64e83a635bdcc3a45df8f80390600013d9ea058f5100384589e411b2 + MDi = 65143049dc7dc7b840d565300866a988514042cd7f843ed92bb0423a17e015e4 + + i = 6 + M = 645c8ec9026e0fa74a29da730461da510601f3c920d007f6f297acc79bc42c4d47ecdacd64e83a635bdcc3a45df8f80390600013d9ea058f5100384589e411b265143049dc7dc7b840d565300866a988514042cd7f843ed92bb0423a17e015e4 + MDi = 015aa54092f442b8e00ae8cc929b73326375052b7ab82901ed2b66145722388e + + i = 7 + M = 47ecdacd64e83a635bdcc3a45df8f80390600013d9ea058f5100384589e411b265143049dc7dc7b840d565300866a988514042cd7f843ed92bb0423a17e015e4015aa54092f442b8e00ae8cc929b73326375052b7ab82901ed2b66145722388e + MDi = 892fd2bac24f856085eb587ebf8719a40d94f0d1bae63642bc4501d899a5ba83 +MD = ? + +COUNT = 74 + i = 3 + M = f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266 + MDi = b94873831806af3f99c589925ea4d95b837174fca7b9cb33536a94423bea6257 + + i = 4 + M = f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266b94873831806af3f99c589925ea4d95b837174fca7b9cb33536a94423bea6257 + MDi = 72a00ae45424ddf876d1e8ef5597550a0dfa77359158421125040880648d503f + + i = 5 + M = f0c29f8e390435a2e233afa958ae208eb5d8eeb38e448df53a6d2e7a8e3a8266b94873831806af3f99c589925ea4d95b837174fca7b9cb33536a94423bea625772a00ae45424ddf876d1e8ef5597550a0dfa77359158421125040880648d503f + MDi = 202d563df4a5654ee9482f9c461fce7cc7bc4a88e8ef54d09d04085310bc239f + + i = 6 + M = b94873831806af3f99c589925ea4d95b837174fca7b9cb33536a94423bea625772a00ae45424ddf876d1e8ef5597550a0dfa77359158421125040880648d503f202d563df4a5654ee9482f9c461fce7cc7bc4a88e8ef54d09d04085310bc239f + MDi = bd3cf0881013cdcf55dff14d7dcd158861a21a4c1e56ac9dfc29d5e0354f80f4 + + i = 7 + M = 72a00ae45424ddf876d1e8ef5597550a0dfa77359158421125040880648d503f202d563df4a5654ee9482f9c461fce7cc7bc4a88e8ef54d09d04085310bc239fbd3cf0881013cdcf55dff14d7dcd158861a21a4c1e56ac9dfc29d5e0354f80f4 + MDi = 48717f976730992ecf3b53dfb76a109af817664539f28b3376b1f207f25e1d38 +MD = ? + +COUNT = 75 + i = 3 + M = fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339 + MDi = b695e19ecc3db9b78b7981c96930b64fd1134a8c344d523d93ec39e650225440 + + i = 4 + M = fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339b695e19ecc3db9b78b7981c96930b64fd1134a8c344d523d93ec39e650225440 + MDi = db9625f92bb65e93ca5aa1e6085fafea9fa2325ac48cebb0a89a402c7e4c8ede + + i = 5 + M = fa43fb8ffa7d953a4da11627e11c51ba4f1cf0a62464b0e9d34cb9f1ca4a2339b695e19ecc3db9b78b7981c96930b64fd1134a8c344d523d93ec39e650225440db9625f92bb65e93ca5aa1e6085fafea9fa2325ac48cebb0a89a402c7e4c8ede + MDi = 7a6c226d55f3703d44bb2f33efa473978a3dd244f40cdcaf567a1a00863a0ff8 + + i = 6 + M = b695e19ecc3db9b78b7981c96930b64fd1134a8c344d523d93ec39e650225440db9625f92bb65e93ca5aa1e6085fafea9fa2325ac48cebb0a89a402c7e4c8ede7a6c226d55f3703d44bb2f33efa473978a3dd244f40cdcaf567a1a00863a0ff8 + MDi = ebe4ff10d9c9542a4b5de1c632a7bc671fea21d443177d09b421394c26c7ea89 + + i = 7 + M = db9625f92bb65e93ca5aa1e6085fafea9fa2325ac48cebb0a89a402c7e4c8ede7a6c226d55f3703d44bb2f33efa473978a3dd244f40cdcaf567a1a00863a0ff8ebe4ff10d9c9542a4b5de1c632a7bc671fea21d443177d09b421394c26c7ea89 + MDi = 9c3a7b3e3fca18b64982e497d9218307e70d9f3a685ff9afb4ebe5e28fbc99e1 +MD = ? + +COUNT = 76 + i = 3 + M = 18a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb93763318a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb93763318a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb937633 + MDi = 789f4815c39f88b1910a4d77d2ed9a3058cc8c6c7550138afb05096e456c3e35 + + i = 4 + M = 18a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb93763318a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb937633789f4815c39f88b1910a4d77d2ed9a3058cc8c6c7550138afb05096e456c3e35 + MDi = 6560bbfd10dcaf8c75a349904d20fcf71820f0e48342af9a4d5654268fcbdfdc + + i = 5 + M = 18a1c86b7c266b55b253f509e6457df10b48e6705bc0c78b638f9ee4eb937633789f4815c39f88b1910a4d77d2ed9a3058cc8c6c7550138afb05096e456c3e356560bbfd10dcaf8c75a349904d20fcf71820f0e48342af9a4d5654268fcbdfdc + MDi = 90fc75b4401d6a8733fca1d43f091738531b00ae32d621ba13df10a025c9bc97 + + i = 6 + M = 789f4815c39f88b1910a4d77d2ed9a3058cc8c6c7550138afb05096e456c3e356560bbfd10dcaf8c75a349904d20fcf71820f0e48342af9a4d5654268fcbdfdc90fc75b4401d6a8733fca1d43f091738531b00ae32d621ba13df10a025c9bc97 + MDi = 5ba1f490a5d3f1d961f0d5c9b3d49e1fb5ae25cb06c545f8db677dd75da35718 + + i = 7 + M = 6560bbfd10dcaf8c75a349904d20fcf71820f0e48342af9a4d5654268fcbdfdc90fc75b4401d6a8733fca1d43f091738531b00ae32d621ba13df10a025c9bc975ba1f490a5d3f1d961f0d5c9b3d49e1fb5ae25cb06c545f8db677dd75da35718 + MDi = b6bd39e7581f8dcdedcd11cd0bca75ff596eda56cb62fa3db898abcd898e802e +MD = ? + +COUNT = 77 + i = 3 + M = f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2 + MDi = abafd818399b2e9705b8461043451dddd22c2f118d6acb8011ff215210c4c003 + + i = 4 + M = f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2abafd818399b2e9705b8461043451dddd22c2f118d6acb8011ff215210c4c003 + MDi = 9887e6eaecec3293ef9be3329db8664fa58eb8af4fd9a9e495c5c62a67a9e86c + + i = 5 + M = f5cd2b6b4a6bd0070942f81d012bdc85cf55c095075578a0404f2273908c20d2abafd818399b2e9705b8461043451dddd22c2f118d6acb8011ff215210c4c0039887e6eaecec3293ef9be3329db8664fa58eb8af4fd9a9e495c5c62a67a9e86c + MDi = 5b8579a979ba84e0811c8282e19bf38ffea5904945965a4f80cdbe954be36899 + + i = 6 + M = abafd818399b2e9705b8461043451dddd22c2f118d6acb8011ff215210c4c0039887e6eaecec3293ef9be3329db8664fa58eb8af4fd9a9e495c5c62a67a9e86c5b8579a979ba84e0811c8282e19bf38ffea5904945965a4f80cdbe954be36899 + MDi = 551f77b34864e15a4d51dfcbbc0c86fbd426bd3981f2e5139a51b6a630132377 + + i = 7 + M = 9887e6eaecec3293ef9be3329db8664fa58eb8af4fd9a9e495c5c62a67a9e86c5b8579a979ba84e0811c8282e19bf38ffea5904945965a4f80cdbe954be36899551f77b34864e15a4d51dfcbbc0c86fbd426bd3981f2e5139a51b6a630132377 + MDi = 6e7e33a7b8f31bd7244619405ff97bf75cf6d54cb5560af30d95ce540c4aa814 +MD = ? + +COUNT = 78 + i = 3 + M = b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1 + MDi = 997db102732c817bedaec703e69c44940326ca6e22e7bed55f6217a6d10a92e2 + + i = 4 + M = b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1997db102732c817bedaec703e69c44940326ca6e22e7bed55f6217a6d10a92e2 + MDi = 9cd383bc91a224a55e4d28898db7362813475a425b6351b99930ee7bb834f79a + + i = 5 + M = b7825bba2320209852668a29f8b0eca4a3a0ad77e0e33cd2a7185761da5061b1997db102732c817bedaec703e69c44940326ca6e22e7bed55f6217a6d10a92e29cd383bc91a224a55e4d28898db7362813475a425b6351b99930ee7bb834f79a + MDi = b1d734686c37428cb0c2e542672d15a3dd4a3069f54932e1fbc13004bfae6f62 + + i = 6 + M = 997db102732c817bedaec703e69c44940326ca6e22e7bed55f6217a6d10a92e29cd383bc91a224a55e4d28898db7362813475a425b6351b99930ee7bb834f79ab1d734686c37428cb0c2e542672d15a3dd4a3069f54932e1fbc13004bfae6f62 + MDi = 9d4233a84572714f4edd6733306463efbd719e26d67a1e6735979b20c2624c83 + + i = 7 + M = 9cd383bc91a224a55e4d28898db7362813475a425b6351b99930ee7bb834f79ab1d734686c37428cb0c2e542672d15a3dd4a3069f54932e1fbc13004bfae6f629d4233a84572714f4edd6733306463efbd719e26d67a1e6735979b20c2624c83 + MDi = d0afda1829f46ef14000e9dfed5d88aed8a97b849879d1bb59e7df114b2d5455 +MD = ? + +COUNT = 79 + i = 3 + M = e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b5e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b5e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b5 + MDi = 73fc290b88ebe36bf37c5297659db6a8af6e419b9cef3f08f6e3642e02d00e15 + + i = 4 + M = e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b5e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b573fc290b88ebe36bf37c5297659db6a8af6e419b9cef3f08f6e3642e02d00e15 + MDi = 3a6e7312c35baccfd3ebcbb59479231d86a552f9d7e4bdb18579ff23805379e8 + + i = 5 + M = e7688883bbc0dbc767dd8d46ce58a0463f29d0781dfe1bde55a83ba9ca54b1b573fc290b88ebe36bf37c5297659db6a8af6e419b9cef3f08f6e3642e02d00e153a6e7312c35baccfd3ebcbb59479231d86a552f9d7e4bdb18579ff23805379e8 + MDi = 8a61ad1453eb484c99b4fbbadf1dbfd835d8fc36dc5ae7abfe6749ec52d461b4 + + i = 6 + M = 73fc290b88ebe36bf37c5297659db6a8af6e419b9cef3f08f6e3642e02d00e153a6e7312c35baccfd3ebcbb59479231d86a552f9d7e4bdb18579ff23805379e88a61ad1453eb484c99b4fbbadf1dbfd835d8fc36dc5ae7abfe6749ec52d461b4 + MDi = db2bf33f3b803df7f27b72131a8ff14cf97d178c9122cb5db7c61d59f9810959 + + i = 7 + M = 3a6e7312c35baccfd3ebcbb59479231d86a552f9d7e4bdb18579ff23805379e88a61ad1453eb484c99b4fbbadf1dbfd835d8fc36dc5ae7abfe6749ec52d461b4db2bf33f3b803df7f27b72131a8ff14cf97d178c9122cb5db7c61d59f9810959 + MDi = 713de3d6ab1c8933c5cbb15e76ef8b6f97ea4498f36552693dc28d1e38688e9a +MD = ? + +COUNT = 80 + i = 3 + M = 54ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e854ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e854ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e8 + MDi = 4d578b48ef3e9ee0c6e70790c2cc00b3d78ab3e63874d1477bf843f515eae1fc + + i = 4 + M = 54ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e854ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e84d578b48ef3e9ee0c6e70790c2cc00b3d78ab3e63874d1477bf843f515eae1fc + MDi = bb783f6e5de7692ae7a377bf1fc07c4f9d45e01c4031944a7f5101bf3fba55e4 + + i = 5 + M = 54ba60a63f82f501435dd8a51d772404e5cfbddf226bcbc47836cf717fadb4e84d578b48ef3e9ee0c6e70790c2cc00b3d78ab3e63874d1477bf843f515eae1fcbb783f6e5de7692ae7a377bf1fc07c4f9d45e01c4031944a7f5101bf3fba55e4 + MDi = 970d7c7c10ddf1972e44d79174a431e429c30a63658c447a66f68dfd15907b46 + + i = 6 + M = 4d578b48ef3e9ee0c6e70790c2cc00b3d78ab3e63874d1477bf843f515eae1fcbb783f6e5de7692ae7a377bf1fc07c4f9d45e01c4031944a7f5101bf3fba55e4970d7c7c10ddf1972e44d79174a431e429c30a63658c447a66f68dfd15907b46 + MDi = 2425731eba8ec69ee9887ecd18f6b169712ca5b88bf8c89e40befc3e0b4cfad7 + + i = 7 + M = bb783f6e5de7692ae7a377bf1fc07c4f9d45e01c4031944a7f5101bf3fba55e4970d7c7c10ddf1972e44d79174a431e429c30a63658c447a66f68dfd15907b462425731eba8ec69ee9887ecd18f6b169712ca5b88bf8c89e40befc3e0b4cfad7 + MDi = 3fe798844d11f5b2d74f3c91fb71b31a53a35cd8bd96b7f1c3af4a680da75742 +MD = ? + +COUNT = 81 + i = 3 + M = c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea65c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea65c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea65 + MDi = 17230867ffb9e5344e8b67d50a12a0efd9fe4ee057c6a1e3cd717f3a1391d7f8 + + i = 4 + M = c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea65c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea6517230867ffb9e5344e8b67d50a12a0efd9fe4ee057c6a1e3cd717f3a1391d7f8 + MDi = ea6a9175a6f2feef6b4e806fc63ad02f3534af213781f3256721271777cf29fd + + i = 5 + M = c533fff054d8dabfd37c4e860761d215954c7bf8f37ab6d6ef7ff9ec4713ea6517230867ffb9e5344e8b67d50a12a0efd9fe4ee057c6a1e3cd717f3a1391d7f8ea6a9175a6f2feef6b4e806fc63ad02f3534af213781f3256721271777cf29fd + MDi = df609daf102ebe21329042aab5d9a3dd6b6acfdc455e9ffa1e3a6397e08f8191 + + i = 6 + M = 17230867ffb9e5344e8b67d50a12a0efd9fe4ee057c6a1e3cd717f3a1391d7f8ea6a9175a6f2feef6b4e806fc63ad02f3534af213781f3256721271777cf29fddf609daf102ebe21329042aab5d9a3dd6b6acfdc455e9ffa1e3a6397e08f8191 + MDi = f75a3e9c9196df53579155b6f1b6727056c48ebe384691dfafa3f2283acaf8a5 + + i = 7 + M = ea6a9175a6f2feef6b4e806fc63ad02f3534af213781f3256721271777cf29fddf609daf102ebe21329042aab5d9a3dd6b6acfdc455e9ffa1e3a6397e08f8191f75a3e9c9196df53579155b6f1b6727056c48ebe384691dfafa3f2283acaf8a5 + MDi = f0e40451f8c0c245ceae3a59b0d6069c2fc73cb223e05e686529729bd28345ef +MD = ? + +COUNT = 82 + i = 3 + M = 71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fd71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fd71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fd + MDi = d87a19f81701ee80ef0eddd7bb4887f070c11414860bbc5192c3c2f925eb5e68 + + i = 4 + M = 71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fd71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fdd87a19f81701ee80ef0eddd7bb4887f070c11414860bbc5192c3c2f925eb5e68 + MDi = 8f41e5e22a6b459117a73c3e910731b405b81dfa66eb17455d8ce675694e5540 + + i = 5 + M = 71f36f26cb92c129f7450d76849a7f2f4bb0554e9ade0a9d5182f435541ca1fdd87a19f81701ee80ef0eddd7bb4887f070c11414860bbc5192c3c2f925eb5e688f41e5e22a6b459117a73c3e910731b405b81dfa66eb17455d8ce675694e5540 + MDi = 288d36d4dda9734f8699e8f4d2d73fdc80528bc1c5cf5ccaf45ac471989c1239 + + i = 6 + M = d87a19f81701ee80ef0eddd7bb4887f070c11414860bbc5192c3c2f925eb5e688f41e5e22a6b459117a73c3e910731b405b81dfa66eb17455d8ce675694e5540288d36d4dda9734f8699e8f4d2d73fdc80528bc1c5cf5ccaf45ac471989c1239 + MDi = 846941092546d620feb11ea7d9881a92907321f13f77c63854b70b3b227fba81 + + i = 7 + M = 8f41e5e22a6b459117a73c3e910731b405b81dfa66eb17455d8ce675694e5540288d36d4dda9734f8699e8f4d2d73fdc80528bc1c5cf5ccaf45ac471989c1239846941092546d620feb11ea7d9881a92907321f13f77c63854b70b3b227fba81 + MDi = 2fe7f0f8800b85aff5006ba6f33d87559f6f2b0a4f985e9a5eef7665d432f2fb +MD = ? + +COUNT = 83 + i = 3 + M = c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75 + MDi = ef191edd93e28fc017eeaa097b139e5636612294521536abd17b41cb3f7d8538 + + i = 4 + M = c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75ef191edd93e28fc017eeaa097b139e5636612294521536abd17b41cb3f7d8538 + MDi = 77bbab69977b83804f8abf2023dda007dbb73f48ffd3f43b4f84b2cc7ef030be + + i = 5 + M = c39f5bfe6c241d0f64c13b05e5fb6725ffda3789ef9946c8af1dfcb424ba3d75ef191edd93e28fc017eeaa097b139e5636612294521536abd17b41cb3f7d853877bbab69977b83804f8abf2023dda007dbb73f48ffd3f43b4f84b2cc7ef030be + MDi = 6545ddc1836f081dde70170092db076044d5ad7bf0c79a10066c285b52879c1d + + i = 6 + M = ef191edd93e28fc017eeaa097b139e5636612294521536abd17b41cb3f7d853877bbab69977b83804f8abf2023dda007dbb73f48ffd3f43b4f84b2cc7ef030be6545ddc1836f081dde70170092db076044d5ad7bf0c79a10066c285b52879c1d + MDi = 3f52f26fd44716a8548059e439b628bcf43ad0f06eddfd113c5178909eb8e980 + + i = 7 + M = 77bbab69977b83804f8abf2023dda007dbb73f48ffd3f43b4f84b2cc7ef030be6545ddc1836f081dde70170092db076044d5ad7bf0c79a10066c285b52879c1d3f52f26fd44716a8548059e439b628bcf43ad0f06eddfd113c5178909eb8e980 + MDi = 372746e3300306dfdbb9c2c537d1d955aa25e821bfbf67e258bcdff27983f06d +MD = ? + +COUNT = 84 + i = 3 + M = 27401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f703927401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f703927401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f7039 + MDi = ebf226ba5842fd11292b214c2205dddee05153bc63df3848c3368ec256e5853b + + i = 4 + M = 27401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f703927401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f7039ebf226ba5842fd11292b214c2205dddee05153bc63df3848c3368ec256e5853b + MDi = 87f2e866db7cd767412eeaf4933b20abfc287e2616dcedfb9e94bb7b78f467e8 + + i = 5 + M = 27401de7cc0d86a8f07e276a9fbf4fe5cdf7b3d73802a5c7edd27b686f6f7039ebf226ba5842fd11292b214c2205dddee05153bc63df3848c3368ec256e5853b87f2e866db7cd767412eeaf4933b20abfc287e2616dcedfb9e94bb7b78f467e8 + MDi = f740ece29ca99e43684538420997c35766ccb580c4f5cb0c02281dcd28986ecc + + i = 6 + M = ebf226ba5842fd11292b214c2205dddee05153bc63df3848c3368ec256e5853b87f2e866db7cd767412eeaf4933b20abfc287e2616dcedfb9e94bb7b78f467e8f740ece29ca99e43684538420997c35766ccb580c4f5cb0c02281dcd28986ecc + MDi = c570c677ed9f0b302bf30b6b006a6b5df6157156e51d17135652d577fb7025c7 + + i = 7 + M = 87f2e866db7cd767412eeaf4933b20abfc287e2616dcedfb9e94bb7b78f467e8f740ece29ca99e43684538420997c35766ccb580c4f5cb0c02281dcd28986eccc570c677ed9f0b302bf30b6b006a6b5df6157156e51d17135652d577fb7025c7 + MDi = b101c2f71e4d62bf86eeadb50889c5d5d484635d1511fe7f46931e7fc7c8e0f6 +MD = ? + +COUNT = 85 + i = 3 + M = bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246 + MDi = afe9e59e2d23eb12acafc3efeec754a5ec3124685ee353e75768c0ff6333244e + + i = 4 + M = bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246afe9e59e2d23eb12acafc3efeec754a5ec3124685ee353e75768c0ff6333244e + MDi = 6c2b04445dac6226a362382ff2a7b57a53467f5d8381081693aeabef8d6e5ff4 + + i = 5 + M = bc56733b8682bab456b8c0819e1c9d6d3bb864b2427ec2a2003a871c44dc0246afe9e59e2d23eb12acafc3efeec754a5ec3124685ee353e75768c0ff6333244e6c2b04445dac6226a362382ff2a7b57a53467f5d8381081693aeabef8d6e5ff4 + MDi = 6babcb851328241f47ab5d085df054ecb598aef42d64437f49290ffe2759292d + + i = 6 + M = afe9e59e2d23eb12acafc3efeec754a5ec3124685ee353e75768c0ff6333244e6c2b04445dac6226a362382ff2a7b57a53467f5d8381081693aeabef8d6e5ff46babcb851328241f47ab5d085df054ecb598aef42d64437f49290ffe2759292d + MDi = c6baf5410e436ea6cfb3cf1f82e07dbc60f055548721a99dc214e81f262569d4 + + i = 7 + M = 6c2b04445dac6226a362382ff2a7b57a53467f5d8381081693aeabef8d6e5ff46babcb851328241f47ab5d085df054ecb598aef42d64437f49290ffe2759292dc6baf5410e436ea6cfb3cf1f82e07dbc60f055548721a99dc214e81f262569d4 + MDi = ed280cf6548604ac146c890b9e83b94542b00693cdcf5266e7ad04683ea2b3bf +MD = ? + +COUNT = 86 + i = 3 + M = e3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aae3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aae3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aa + MDi = 2480b08e53cb321a2d999c2ce030f5a18637acb2607078fca23dd7a4789201bb + + i = 4 + M = e3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aae3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aa2480b08e53cb321a2d999c2ce030f5a18637acb2607078fca23dd7a4789201bb + MDi = 11ee0ec62d8193c09d60fafa4ebed7763025732a315613d1a72408f0cc75ed15 + + i = 5 + M = e3843383a52a8c3d6315d255d1708467f5de61a5372308978b295460220d99aa2480b08e53cb321a2d999c2ce030f5a18637acb2607078fca23dd7a4789201bb11ee0ec62d8193c09d60fafa4ebed7763025732a315613d1a72408f0cc75ed15 + MDi = 265012753d9a106be7269dbb51fe17983ab113385ad687b3289b69db11dd6c4d + + i = 6 + M = 2480b08e53cb321a2d999c2ce030f5a18637acb2607078fca23dd7a4789201bb11ee0ec62d8193c09d60fafa4ebed7763025732a315613d1a72408f0cc75ed15265012753d9a106be7269dbb51fe17983ab113385ad687b3289b69db11dd6c4d + MDi = ae8843b45eaf92b7d02c398203ce2688142de173bc479e6653357b28aa27fad5 + + i = 7 + M = 11ee0ec62d8193c09d60fafa4ebed7763025732a315613d1a72408f0cc75ed15265012753d9a106be7269dbb51fe17983ab113385ad687b3289b69db11dd6c4dae8843b45eaf92b7d02c398203ce2688142de173bc479e6653357b28aa27fad5 + MDi = 65144a5f8598c6ffcccd3b50d474cb2ee50c9748b7e38f52b0ebda76bb3c9e06 +MD = ? + +COUNT = 87 + i = 3 + M = e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e1e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e1e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e1 + MDi = 6e0eecfc91526af7ab8648a2ecad4c541ca50872920e5e354cade05dba63dbf2 + + i = 4 + M = e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e1e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e16e0eecfc91526af7ab8648a2ecad4c541ca50872920e5e354cade05dba63dbf2 + MDi = a3c8cf2284f9c97a2c816c5bf0e26c07839956a4de59783924e192be1d806fad + + i = 5 + M = e03de5004325a1dc96eb709c849bb6ecadc5db9c6152aba480ca10c8fe2573e16e0eecfc91526af7ab8648a2ecad4c541ca50872920e5e354cade05dba63dbf2a3c8cf2284f9c97a2c816c5bf0e26c07839956a4de59783924e192be1d806fad + MDi = bf27e1f2ca58d2fc4a0b4c70aedf3910bdb4171f26909ac27cf58c87dd652c72 + + i = 6 + M = 6e0eecfc91526af7ab8648a2ecad4c541ca50872920e5e354cade05dba63dbf2a3c8cf2284f9c97a2c816c5bf0e26c07839956a4de59783924e192be1d806fadbf27e1f2ca58d2fc4a0b4c70aedf3910bdb4171f26909ac27cf58c87dd652c72 + MDi = e6d90888eec8cd5cb83924f4b6514906f12015060e69ad3c70be46686d1e98e2 + + i = 7 + M = a3c8cf2284f9c97a2c816c5bf0e26c07839956a4de59783924e192be1d806fadbf27e1f2ca58d2fc4a0b4c70aedf3910bdb4171f26909ac27cf58c87dd652c72e6d90888eec8cd5cb83924f4b6514906f12015060e69ad3c70be46686d1e98e2 + MDi = b23ee90dd3e38458f22101f6d0a8596379e6c48d0443f6d41e9b3f32f470e88c +MD = ? + +COUNT = 88 + i = 3 + M = df09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faadf09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faadf09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faa + MDi = 83ec72416b2afe7d85ba5cb7e6ddeb23630c2163c8d06bd3a344e25ae50d9111 + + i = 4 + M = df09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faadf09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faa83ec72416b2afe7d85ba5cb7e6ddeb23630c2163c8d06bd3a344e25ae50d9111 + MDi = 3bbfc08a68b043d3d8da2b005bc789b61bca68f045f133c39214c15981c4285e + + i = 5 + M = df09f2a9bceab29b5c149ec7db23b1c8b1cc849ff2612c4ad9d66e98cc1f1faa83ec72416b2afe7d85ba5cb7e6ddeb23630c2163c8d06bd3a344e25ae50d91113bbfc08a68b043d3d8da2b005bc789b61bca68f045f133c39214c15981c4285e + MDi = f1f5e37676f02ae69aa21c0b19204457a74f7eb8797c0df9bf27e3ef6f1891ed + + i = 6 + M = 83ec72416b2afe7d85ba5cb7e6ddeb23630c2163c8d06bd3a344e25ae50d91113bbfc08a68b043d3d8da2b005bc789b61bca68f045f133c39214c15981c4285ef1f5e37676f02ae69aa21c0b19204457a74f7eb8797c0df9bf27e3ef6f1891ed + MDi = 3f243e9ddc3bd25209fce00fc9760ab7cff05985550e462a0f82f727f3bc90d4 + + i = 7 + M = 3bbfc08a68b043d3d8da2b005bc789b61bca68f045f133c39214c15981c4285ef1f5e37676f02ae69aa21c0b19204457a74f7eb8797c0df9bf27e3ef6f1891ed3f243e9ddc3bd25209fce00fc9760ab7cff05985550e462a0f82f727f3bc90d4 + MDi = 16c7792f5a65ed6e361e17299dcebf0b10d64bb8e8272f6337c751d0da94ffbf +MD = ? + +COUNT = 89 + i = 3 + M = 123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676c123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676c123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676c + MDi = ed3f313056d53735b02a4001f5ee3e90d6244a1cc2963b518140e08404d68b05 + + i = 4 + M = 123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676c123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676ced3f313056d53735b02a4001f5ee3e90d6244a1cc2963b518140e08404d68b05 + MDi = 28979a4fd49832edc44c0aa03cbec97eae939b87f116ee3ba38a81131c454f0c + + i = 5 + M = 123426906e20a02fd517c4cee4e5f5273f894c56ae456ca466c7a0a2d1b0676ced3f313056d53735b02a4001f5ee3e90d6244a1cc2963b518140e08404d68b0528979a4fd49832edc44c0aa03cbec97eae939b87f116ee3ba38a81131c454f0c + MDi = 41fde62c145c2d6f3d432ec0318407ebe5011a5a39c87a54d62535f2d1901e02 + + i = 6 + M = ed3f313056d53735b02a4001f5ee3e90d6244a1cc2963b518140e08404d68b0528979a4fd49832edc44c0aa03cbec97eae939b87f116ee3ba38a81131c454f0c41fde62c145c2d6f3d432ec0318407ebe5011a5a39c87a54d62535f2d1901e02 + MDi = edea6e378098315a0d43a0140ee568271f4c2948ecf11d49846477507151358c + + i = 7 + M = 28979a4fd49832edc44c0aa03cbec97eae939b87f116ee3ba38a81131c454f0c41fde62c145c2d6f3d432ec0318407ebe5011a5a39c87a54d62535f2d1901e02edea6e378098315a0d43a0140ee568271f4c2948ecf11d49846477507151358c + MDi = 2b715f8886b47a31bed512a72237ddec384fc95e5ce378ab5d6125a2498204fc +MD = ? + +COUNT = 90 + i = 3 + M = 14a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa3014a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa3014a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa30 + MDi = f634426535abdd4a1c87bdf079baeaf6e46b9f42ff7322ba80ca897d384dc101 + + i = 4 + M = 14a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa3014a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa30f634426535abdd4a1c87bdf079baeaf6e46b9f42ff7322ba80ca897d384dc101 + MDi = 090a5a299d8c1ff27bf079dd27db1a4571091ccffa33bd119558b37adc039776 + + i = 5 + M = 14a9e07e6280a8c7cf824cd1896ad974c310859eb1bb4bef59b715b25cfaaa30f634426535abdd4a1c87bdf079baeaf6e46b9f42ff7322ba80ca897d384dc101090a5a299d8c1ff27bf079dd27db1a4571091ccffa33bd119558b37adc039776 + MDi = 8f6271386f9d243e1cba29c639f84c14580bcdce6fe3b252970c4f6ae38bba82 + + i = 6 + M = f634426535abdd4a1c87bdf079baeaf6e46b9f42ff7322ba80ca897d384dc101090a5a299d8c1ff27bf079dd27db1a4571091ccffa33bd119558b37adc0397768f6271386f9d243e1cba29c639f84c14580bcdce6fe3b252970c4f6ae38bba82 + MDi = 35a901ec99b2a287f8ba84e49e48bc4afc7fa9c8790b0274d84ea82743524507 + + i = 7 + M = 090a5a299d8c1ff27bf079dd27db1a4571091ccffa33bd119558b37adc0397768f6271386f9d243e1cba29c639f84c14580bcdce6fe3b252970c4f6ae38bba8235a901ec99b2a287f8ba84e49e48bc4afc7fa9c8790b0274d84ea82743524507 + MDi = cf903b9a818e3fb5b81597992fcb68871fe4a4ff2d92d21f051ac79eb93bed12 +MD = ? + +COUNT = 91 + i = 3 + M = ae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76aae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76aae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76a + MDi = 95e13473e16ada9de05f84a28a613de38f86c095e0bc341b15e68a2f33f123bd + + i = 4 + M = ae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76aae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76a95e13473e16ada9de05f84a28a613de38f86c095e0bc341b15e68a2f33f123bd + MDi = 9843aea68a68d0528e853e0a2816dd39049f3070b8e0512dadac61f2e291f09b + + i = 5 + M = ae7febea114679a52c9f7351aa0a207dc40ba8c8394585cc5a0b9bfc7f67d76a95e13473e16ada9de05f84a28a613de38f86c095e0bc341b15e68a2f33f123bd9843aea68a68d0528e853e0a2816dd39049f3070b8e0512dadac61f2e291f09b + MDi = 760487ae256e9c013e678f24a5a6408cdf9aee282bca0040630adc9d038240a2 + + i = 6 + M = 95e13473e16ada9de05f84a28a613de38f86c095e0bc341b15e68a2f33f123bd9843aea68a68d0528e853e0a2816dd39049f3070b8e0512dadac61f2e291f09b760487ae256e9c013e678f24a5a6408cdf9aee282bca0040630adc9d038240a2 + MDi = 660e1f5c1d0c64c5d6ae834ef55d591c918f5ac715b2897d3aa1a282f6c0d09b + + i = 7 + M = 9843aea68a68d0528e853e0a2816dd39049f3070b8e0512dadac61f2e291f09b760487ae256e9c013e678f24a5a6408cdf9aee282bca0040630adc9d038240a2660e1f5c1d0c64c5d6ae834ef55d591c918f5ac715b2897d3aa1a282f6c0d09b + MDi = 279075c7f0a9197a3bd73611fcda828a4d863116fe081ebbc4bd829c080d394e +MD = ? + +COUNT = 92 + i = 3 + M = 4966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed653264966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed653264966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed65326 + MDi = 049ee1b8d7f7116803fe1641de60432fb21df484baced5937609cf7e6d24f472 + + i = 4 + M = 4966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed653264966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed65326049ee1b8d7f7116803fe1641de60432fb21df484baced5937609cf7e6d24f472 + MDi = fca387ab59766796048bdef1d173d0321868c7591d2c3d19d2da85cbfe63a381 + + i = 5 + M = 4966b9ba04ef0590cf0f335798c9b3e15ad32d5ebd2719a0c914c8faeed65326049ee1b8d7f7116803fe1641de60432fb21df484baced5937609cf7e6d24f472fca387ab59766796048bdef1d173d0321868c7591d2c3d19d2da85cbfe63a381 + MDi = 3701b7ecd523af23d9bb752337aaf0e3711095b82389374c143070f850c424d1 + + i = 6 + M = 049ee1b8d7f7116803fe1641de60432fb21df484baced5937609cf7e6d24f472fca387ab59766796048bdef1d173d0321868c7591d2c3d19d2da85cbfe63a3813701b7ecd523af23d9bb752337aaf0e3711095b82389374c143070f850c424d1 + MDi = c3d286ec0a851b92cea91589ce183ed60e2947e9ad65a70cebceb1967869fbb3 + + i = 7 + M = fca387ab59766796048bdef1d173d0321868c7591d2c3d19d2da85cbfe63a3813701b7ecd523af23d9bb752337aaf0e3711095b82389374c143070f850c424d1c3d286ec0a851b92cea91589ce183ed60e2947e9ad65a70cebceb1967869fbb3 + MDi = 2f534725f6549a5536206570fec98751aa9b5adae64614728427f5b3aec2f9fb +MD = ? + +COUNT = 93 + i = 3 + M = 8ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea133758ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea133758ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea13375 + MDi = fca82af793a7ede261e862eba4dfc68ce24173d6a2060db55e563b676f616c98 + + i = 4 + M = 8ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea133758ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea13375fca82af793a7ede261e862eba4dfc68ce24173d6a2060db55e563b676f616c98 + MDi = 4507f64576277cb623388a1402d7d8a4eafa405ebd189eae27a5333140b8ff25 + + i = 5 + M = 8ea5a43cdaf50149c3aef14cb2ff2db42279ca36267355a0e023f3ec2ea13375fca82af793a7ede261e862eba4dfc68ce24173d6a2060db55e563b676f616c984507f64576277cb623388a1402d7d8a4eafa405ebd189eae27a5333140b8ff25 + MDi = f433c63e32244d6884ff4ddcc4f18711a299ffbd2721fe665d9d2beea478069c + + i = 6 + M = fca82af793a7ede261e862eba4dfc68ce24173d6a2060db55e563b676f616c984507f64576277cb623388a1402d7d8a4eafa405ebd189eae27a5333140b8ff25f433c63e32244d6884ff4ddcc4f18711a299ffbd2721fe665d9d2beea478069c + MDi = 938326fd5c2970d667eb65b093fdfd7af72a3d6f141ed084bba02329a584b146 + + i = 7 + M = 4507f64576277cb623388a1402d7d8a4eafa405ebd189eae27a5333140b8ff25f433c63e32244d6884ff4ddcc4f18711a299ffbd2721fe665d9d2beea478069c938326fd5c2970d667eb65b093fdfd7af72a3d6f141ed084bba02329a584b146 + MDi = 0c27dd8309746c8e276a70c279cf6ff44df13fc11cd3423422b09b7bad9980b7 +MD = ? + +COUNT = 94 + i = 3 + M = 14ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e014ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e014ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e0 + MDi = 671ff6c919875ad9b7e95be7d3f8de62303a4f445dfc2af449575605e770362c + + i = 4 + M = 14ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e014ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e0671ff6c919875ad9b7e95be7d3f8de62303a4f445dfc2af449575605e770362c + MDi = 76c483877f36937a39491fa114f8ca646d7dd266b2cd544b9a3dfb761c4f2fd3 + + i = 5 + M = 14ca6c157502aa86c4900086c373c5d2b8789e5cc9863a384938e498fdaa52e0671ff6c919875ad9b7e95be7d3f8de62303a4f445dfc2af449575605e770362c76c483877f36937a39491fa114f8ca646d7dd266b2cd544b9a3dfb761c4f2fd3 + MDi = 90496b488126c6c94365215d914ecb4eed1c1ad7679ba01671c19bf1a4caa826 + + i = 6 + M = 671ff6c919875ad9b7e95be7d3f8de62303a4f445dfc2af449575605e770362c76c483877f36937a39491fa114f8ca646d7dd266b2cd544b9a3dfb761c4f2fd390496b488126c6c94365215d914ecb4eed1c1ad7679ba01671c19bf1a4caa826 + MDi = a5f4e4e2e3fd18f0650accbf119cda041dc780f6b6d313fbc6d0ae82af11be49 + + i = 7 + M = 76c483877f36937a39491fa114f8ca646d7dd266b2cd544b9a3dfb761c4f2fd390496b488126c6c94365215d914ecb4eed1c1ad7679ba01671c19bf1a4caa826a5f4e4e2e3fd18f0650accbf119cda041dc780f6b6d313fbc6d0ae82af11be49 + MDi = 7c8c5acc035143fd8fe18046da4fb357cfb9802032a36e05679c2f6157394bd1 +MD = ? + +COUNT = 95 + i = 3 + M = 8471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb38471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb38471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb3 + MDi = 6871045f84f1e295d8af3d657cac36357227693b52a4adca2a84d1839c4053b5 + + i = 4 + M = 8471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb38471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb36871045f84f1e295d8af3d657cac36357227693b52a4adca2a84d1839c4053b5 + MDi = 2db3a507b8885ab04e3cc3e15c6c8e27024b3408800562dd8cf0df40c540177b + + i = 5 + M = 8471a7d5a2cdc61a8bc885c1b0b79491a54d6610ab19a3cffbe0c83479628cb36871045f84f1e295d8af3d657cac36357227693b52a4adca2a84d1839c4053b52db3a507b8885ab04e3cc3e15c6c8e27024b3408800562dd8cf0df40c540177b + MDi = aa59a16f8909aaea55a34757687e7b19481767c29ee98980c4e9277df322acb8 + + i = 6 + M = 6871045f84f1e295d8af3d657cac36357227693b52a4adca2a84d1839c4053b52db3a507b8885ab04e3cc3e15c6c8e27024b3408800562dd8cf0df40c540177baa59a16f8909aaea55a34757687e7b19481767c29ee98980c4e9277df322acb8 + MDi = 6b49edf2453e234de3608579ba1149264526fc6d7b0d6bd5050091298db85048 + + i = 7 + M = 2db3a507b8885ab04e3cc3e15c6c8e27024b3408800562dd8cf0df40c540177baa59a16f8909aaea55a34757687e7b19481767c29ee98980c4e9277df322acb86b49edf2453e234de3608579ba1149264526fc6d7b0d6bd5050091298db85048 + MDi = ca1630ca0ba376dee5d0e70f4e7a20cbbb290d1dbbd11696426d98c8a09becdd +MD = ? + +COUNT = 96 + i = 3 + M = 51749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe04251749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe04251749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe042 + MDi = 8678ac56e613ddfb815dfec295f7120ed860b245f5ac61fcb7d95b57832944f9 + + i = 4 + M = 51749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe04251749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe0428678ac56e613ddfb815dfec295f7120ed860b245f5ac61fcb7d95b57832944f9 + MDi = 0c18318c964530ccc48268acbee4f2b51a03502b9773477b20fc2b433b18ddc2 + + i = 5 + M = 51749feaa3f2ea9c89b38d77814ea2796a3265e4f6ee7a2c08a1804c6fbfe0428678ac56e613ddfb815dfec295f7120ed860b245f5ac61fcb7d95b57832944f90c18318c964530ccc48268acbee4f2b51a03502b9773477b20fc2b433b18ddc2 + MDi = 371e8b06bd8abd0663afe95bf4911e4ae526d2c82d2664b24d317560ee18ae72 + + i = 6 + M = 8678ac56e613ddfb815dfec295f7120ed860b245f5ac61fcb7d95b57832944f90c18318c964530ccc48268acbee4f2b51a03502b9773477b20fc2b433b18ddc2371e8b06bd8abd0663afe95bf4911e4ae526d2c82d2664b24d317560ee18ae72 + MDi = fcd00e2b504ca4e9149bb2ff8a166bf23d486f531a6f6b426bfd61402b34740d + + i = 7 + M = 0c18318c964530ccc48268acbee4f2b51a03502b9773477b20fc2b433b18ddc2371e8b06bd8abd0663afe95bf4911e4ae526d2c82d2664b24d317560ee18ae72fcd00e2b504ca4e9149bb2ff8a166bf23d486f531a6f6b426bfd61402b34740d + MDi = 3253886e1e858050a633e3cf9dbf952c0eec6790d306bbdfab9e9bbe58b2c905 +MD = ? + +COUNT = 97 + i = 3 + M = 8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360a8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360a8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360a + MDi = e27f5db53b483277de70825997b5e64637cacd1f5c9b1debc4dd2a9ab0459a96 + + i = 4 + M = 8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360a8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360ae27f5db53b483277de70825997b5e64637cacd1f5c9b1debc4dd2a9ab0459a96 + MDi = 01b43ae6b7327f1357f7dc95f9c0ccedf19d88d0d4e005f3b0a672010766cf59 + + i = 5 + M = 8163861f1ca72bbc19cb8ce59bcee8a3d6d28c8ce17e33cea67f04277a68360ae27f5db53b483277de70825997b5e64637cacd1f5c9b1debc4dd2a9ab0459a9601b43ae6b7327f1357f7dc95f9c0ccedf19d88d0d4e005f3b0a672010766cf59 + MDi = 54d7400e3f1a04804f35c9dfda70dae60e7e80aeb8698d0e6cd260ef04b94458 + + i = 6 + M = e27f5db53b483277de70825997b5e64637cacd1f5c9b1debc4dd2a9ab0459a9601b43ae6b7327f1357f7dc95f9c0ccedf19d88d0d4e005f3b0a672010766cf5954d7400e3f1a04804f35c9dfda70dae60e7e80aeb8698d0e6cd260ef04b94458 + MDi = d164d3ab3f436088dae70813da192d61ebfd94abc3e9fd14ceccc69519ccc9bd + + i = 7 + M = 01b43ae6b7327f1357f7dc95f9c0ccedf19d88d0d4e005f3b0a672010766cf5954d7400e3f1a04804f35c9dfda70dae60e7e80aeb8698d0e6cd260ef04b94458d164d3ab3f436088dae70813da192d61ebfd94abc3e9fd14ceccc69519ccc9bd + MDi = 54442925ae309d34a2c1514368b36efb5562ba94ebea0aabc25b9e45ec7dc597 +MD = ? + +COUNT = 98 + i = 3 + M = 6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd + MDi = 71bda9f0f6cb1d06dbaa225b07db6548510f410ec5fadcc94ea86b20bf9afa86 + + i = 4 + M = 6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd71bda9f0f6cb1d06dbaa225b07db6548510f410ec5fadcc94ea86b20bf9afa86 + MDi = acb3f5bed65d2c319b67975dad6f7d699e1cee2efcaafcf73670b8d3ba38fc3c + + i = 5 + M = 6c00f3fae370e7d14504c48cd7199064b3b4828163905af7b7a0593d2b5d06fd71bda9f0f6cb1d06dbaa225b07db6548510f410ec5fadcc94ea86b20bf9afa86acb3f5bed65d2c319b67975dad6f7d699e1cee2efcaafcf73670b8d3ba38fc3c + MDi = a3c412e77907ad0a113901f6b267220c24de4dd4109823384bc9d50e995eb493 + + i = 6 + M = 71bda9f0f6cb1d06dbaa225b07db6548510f410ec5fadcc94ea86b20bf9afa86acb3f5bed65d2c319b67975dad6f7d699e1cee2efcaafcf73670b8d3ba38fc3ca3c412e77907ad0a113901f6b267220c24de4dd4109823384bc9d50e995eb493 + MDi = 8cbc9147ca4b04b1e03928255e55b6065cf18a356b5577a929fb174423b31a75 + + i = 7 + M = acb3f5bed65d2c319b67975dad6f7d699e1cee2efcaafcf73670b8d3ba38fc3ca3c412e77907ad0a113901f6b267220c24de4dd4109823384bc9d50e995eb4938cbc9147ca4b04b1e03928255e55b6065cf18a356b5577a929fb174423b31a75 + MDi = c217c393edb67f66a73f5d1f46f9ea861e9872213a08dfa99a86df0352aa1900 +MD = ? + +COUNT = 99 + i = 3 + M = 5fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e355fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e355fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e35 + MDi = 56fd01bf8ef8de898ccbfd88fa66397e9dc683561c40122a6c7fb97aa49a46dc + + i = 4 + M = 5fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e355fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e3556fd01bf8ef8de898ccbfd88fa66397e9dc683561c40122a6c7fb97aa49a46dc + MDi = d17ce204fd7492602ad89eca839df8dfcd48245bb8859508d2ace869f8a4319a + + i = 5 + M = 5fe007f269a854e2394874f1a95ef7ef3844cf06248deda3af561cfacaed1e3556fd01bf8ef8de898ccbfd88fa66397e9dc683561c40122a6c7fb97aa49a46dcd17ce204fd7492602ad89eca839df8dfcd48245bb8859508d2ace869f8a4319a + MDi = ca797f90cd24324028b4fcb437ede93b9a0280e7ced2c08564f7349199e5a690 + + i = 6 + M = 56fd01bf8ef8de898ccbfd88fa66397e9dc683561c40122a6c7fb97aa49a46dcd17ce204fd7492602ad89eca839df8dfcd48245bb8859508d2ace869f8a4319aca797f90cd24324028b4fcb437ede93b9a0280e7ced2c08564f7349199e5a690 + MDi = 4d17307187a1ab5d6a178a9803939ba1463c7f5653d8c47955b677d75c5cadb4 + + i = 7 + M = d17ce204fd7492602ad89eca839df8dfcd48245bb8859508d2ace869f8a4319aca797f90cd24324028b4fcb437ede93b9a0280e7ced2c08564f7349199e5a6904d17307187a1ab5d6a178a9803939ba1463c7f5653d8c47955b677d75c5cadb4 + MDi = 9da7f87adc0b3ff69347a1022ecc0a97614af0fc7254487c4b661dd1df97ba97 +MD = ? + diff --git a/vectors/cryptography_vectors/hashes/SHA2/SHA512_256ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256ShortMsg.rsp new file mode 100644 index 000000000000..eae9a3edad24 --- /dev/null +++ b/vectors/cryptography_vectors/hashes/SHA2/SHA512_256ShortMsg.rsp @@ -0,0 +1,523 @@ +# CAVS 21.1 +# "SHA-512/256 ShortMsg" information for "sha_values" +# SHA-512/256 tests are configured for BYTE oriented implementations +# Generated on Mon Jul 10 14:34:21 2017 + +[L = 32] + +Len = 0 +Msg = 00 +MD = c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a + +Len = 8 +Msg = fa +MD = c4ef36923c64e51e875720e550298a5ab8a3f2f875b1e1a4c9b95babf7344fef + +Len = 16 +Msg = 74e4 +MD = 0c994228b8d3bd5ea5b5259157a9bba7a193118ad22817e6fbed2df1a32a4148 + +Len = 24 +Msg = 6f63b4 +MD = a9e2427cec314b2814aaba87039485fc8d3ade992fa1d9acbb7f6769460a7317 + +Len = 32 +Msg = 2bf98e7f +MD = 97d455e6881adbb8bf26ddc3ef120df4abb330adf8ed2ac7a4b6cce4a1727068 + +Len = 40 +Msg = 77d2ee3fd1 +MD = 329d0ae26df3646fb7db0b322cf1f3488d5381f66eb376fee40f0596d6d9dc4b + +Len = 48 +Msg = 7dae8fc020d9 +MD = 447044f03bc30e2caa245d26ce4c72c1454f708cfcd9a215841a88cf5ecd2095 + +Len = 56 +Msg = 5b48b8b01a59d5 +MD = 1a86b4d34cd104c13b5b8d419784ce4c6d35594f2a9300e81468f4dc0634832a + +Len = 64 +Msg = b4e2e8501f54be91 +MD = d25265bf9cbc0dd2f108a2f5e8f69db7d15e5b8fe9100fe887dae20b6e054fe8 + +Len = 72 +Msg = 901db0f70f2d10626a +MD = f84ce7a760c85e67872ffca1722b1b7741032d9139211077f963a32d9f84771b + +Len = 80 +Msg = f24d98591ee3c732a172 +MD = da234c1d6d18ad8f53070e4e5b9cff75385c13f3e44b014fc45c3509d0d06adb + +Len = 88 +Msg = bfb272537f021ade9bb330 +MD = 7c49a59a3c3fd8e24de85854f68a3b7ec60c2031742a9a2dabf49199d88c2db5 + +Len = 96 +Msg = 0a5f7424babb5cb85715fb17 +MD = 5cd40c51502600f3a0eec7b3a3addbf6672eeecc50b3de2fd86dd1c0a47e8a3f + +Len = 104 +Msg = 57a10308aa2060aecad05adb2d +MD = a5208ece1de1342d02ea9ab7cfe537a2c81fa0eaedb427a7b3cb6c291959a6a8 + +Len = 112 +Msg = 5e4674e97a257c231d8e91391d0a +MD = a88d7cbb6e31e87a6c99734f599d1588cb9439979b8210800eca0aa2067cd556 + +Len = 120 +Msg = ba10b0da70e2a017cdc63f996dbc1b +MD = f8a5aa22937453719eb40b1dcf68a346e202ba225f4d7acc87e5a736abed3423 + +Len = 128 +Msg = a3481996c109c9efb6692b82173921b6 +MD = fba0f0813ca5c513d0b547419a15e27a7097d3eb280a298c1c693b55e03d2d2c + +Len = 136 +Msg = 0877c20cddcc86b833f7bc2dcf7a709a2e +MD = f4c3a2604e2725e4d179edd1b445ba489979f4ea5937e0c6b20b422c720d8bfa + +Len = 144 +Msg = 69445bd12f022f6a669bebe0467729f4dc7c +MD = 26bf709b3474554ab8dd12d9524faca43034118bd955fc52cb1f355c6df22391 + +Len = 152 +Msg = f751f428a0af0b90a912a3be78daf12a765b43 +MD = 5e0f8a8739f556daba4da4e861f39d1edaaece0204963942a4e66a11ec1fcf13 + +Len = 160 +Msg = 19829a8c723c58ca9580cdf0dad2b6d38cdf60a5 +MD = 3aa791b396ab81df9107278b8dd1c46ee57579db4cf5f9b83c54b37b0a601fc9 + +Len = 168 +Msg = ae43132ac30de180c24dadb88602caea91366b8e51 +MD = b9f0141ba006a3983972dbaa5e2bfe7152e38110e02475f03d84b0a3c743cda9 + +Len = 176 +Msg = 8d2782a7843aa477b8f3bca9f9f2bafb5813db4c8c43 +MD = 5424b31989031809b5fc8969b7c48b5dc0c233fc34ffb5b223cd5f3a9712a8d6 + +Len = 184 +Msg = 72321fffd7918d4f5cea105cb0b884a2356af11ebe1267 +MD = 17e3fb33e7f85b1ad5634fbbce9b5f9909f3329f4d74acad3dd0941c1531cf54 + +Len = 192 +Msg = a7efce3e31433fe68d75145d84bb02960fb968871a3c2f7f +MD = 8ff0be0601e3ae9290715aed30634b13b8eb6f3c8b3294ee9b1fc342c260313e + +Len = 200 +Msg = d4d022cf90e6437aa0bfdb89284244c16dee0b488bc345ab66 +MD = cb3a62feb0484be0ff9b56ea92414c7083f2b5776e883508b3a61e57305ee83c + +Len = 208 +Msg = 95de55287ad3cff69efec6e97c812456e47be25e433470c3259b +MD = 41c7027d16e37259645d0173c86141f38d808e9e27dc2dfeeaf335ed7c99490c + +Len = 216 +Msg = 63d8cfd72768c44920d7b015460489ad578c063be19053889cb809 +MD = 876e59c8a64faf9d665f7cde5d42fbb331ba818ddcd284491ac51ed50e1613be + +Len = 224 +Msg = bd2c5a9116bf0d75b3498ce2ee4ba2868e06e0c047ec40b181540896 +MD = eb537df04d512c2fc844020f8ff32e043c04614b88cea0a4e05e0ff32ccffa06 + +Len = 232 +Msg = 37a45643a280a9d1a1c83e094e01173acd8aa16825252dee4eb3a3678c +MD = 80bca5ba3e632e8bad1589cd02d75d7d3e6a1aa9ff64c2b982d572f3d00d947d + +Len = 240 +Msg = a7be84014e8d09d8d51657789c07f29f7da49c5b5c0f836fffc6baf8206d +MD = c575b2ba075a63c4540084493636deabe9b8df61952f071559394d4dab810e08 + +Len = 248 +Msg = 93c45fb91dcba420820bd3fee334b48fdf7b73d7b431ebdba79b2310a7fe19 +MD = 98151839b8f3574e0a0b9f19e84afeb1c620fb2dcef248149c00613233337997 + +Len = 256 +Msg = 1b77c8dcfd2fc4b54617054fa6b14d6e9d09ce9185a34a7fd2b27923998aab99 +MD = 683b486861e598dabba740ac919522cf3b609c18205b6beca4ccbe6b0f6dc6db + +Len = 264 +Msg = 8d5cb933401b35dc34b15de0f5474d3c9b6aeb9057531b7f4b6b32599f0eaef7d1 +MD = 16c523d2b8830ea90dd6b6b1ca49e4b51673006ca30ff47a4dcd4e7b35ad4f62 + +Len = 272 +Msg = d6a66d66bf546b97ebd033cbed3504931e45296334ae28f4178d3de6f03106aa8221 +MD = 3f607a5c7aef13fe98dc9f6b6a4b52979e7c68781ef5e12f69ded20c497eda47 + +Len = 280 +Msg = ce885ffb340fd7a43e2150699b3f98ef334270036794ec759aa01d29f087ed6b551549 +MD = 1071f8b57328b767209c15a43e1d8452763865ac93d58f93c840876c1a5b21e0 + +Len = 288 +Msg = f2c28d685486be99afe87bf90c9f309357b44f60b688446a1918aa321180bf4fe5be1559 +MD = 35bd192cc10fa24bd7954e0e0ee20c09440efc6416e94ca25a47e765bf32ef1d + +Len = 296 +Msg = 96e8e30c75fec82bef4de7ec8e053ea661cb72bc4eb9c1c1aaa638df07a826794dd8d00f0d +MD = b556798f76ef742cc1eb5d10732a925fd8208b4f079a6c0e1fe0d92fd87564a5 + +Len = 304 +Msg = 2915c9b58835f0ec1e011fe5e6db40ae3ef3d890e268934d1bb024a634394b202e503708b543 +MD = 3868885b4e3ae2172305acaad25ffe9094c72348ee9d7b0acc20029e26a7d013 + +Len = 312 +Msg = 673ccce2807cb47622b7e09ee8efd812b44faeef436c301505cc63cd2ca52db003e652c4827ba2 +MD = c7752098c3b5fcea98425a180a5c96146b443aa8d76a0c79fdcf3716bdd2b906 + +Len = 320 +Msg = c1a6ac69f48008db50958665df9d911b78dfe519d9f34366f6cd691f90f741d1081e592676d093c4 +MD = bd18af5b2b24d769eade525c8fcd535212abf8e5df180d7f3e3d023033fce192 + +Len = 328 +Msg = 3cd123ae7bfd2b31613ecc5ee8b86e8e59a52ff46aeb2bcfa9f4fbe41eba7b2c2c21d0cab98aaa3f8f +MD = 7ce19714e1d3be680dde0e919d90157aabca76439df8f0979d19b3a686df6b28 + +Len = 336 +Msg = a52dde5aea1f04399c5d91fb5c4e62da06b73a5d9bdc5a927fe85298e58e166187f154b69ac1057c01a7 +MD = 035d362a4265031434c3aa153ab4aef6b00d5176227197430bb62884a085c5fe + +Len = 344 +Msg = 381906808394c5f9385a06bc9b6e528095e6f6ac07f0fc755e13594768b7686766e897d662576178c2a17c +MD = 22ea5298af2aa311a5b53f8b2838dfc008ae470bf96d2bb6794735ea72108879 + +Len = 352 +Msg = a04a5d5d613d23703ab8dd0093d354829c5449823bcf09eb49124183fdc014b5a83b6b93a3c78c1b86edefb9 +MD = 8ae688d5e9d0de9de834befe5c0829644def9c5da71ae0da4f79d1890487e25b + +Len = 360 +Msg = 175e1059931a94e6e37ea53c87e3c71d46be2f410b2131f8f285f810a3c679f9df6fa9275838eeb8c6cdd45737 +MD = 5641036ef6221e08e3c795b2ad566aac9a69f85df1a8d35b3ea2b780ced33421 + +Len = 368 +Msg = 3ce38a2e287fda13384cb306237e8c74357848818d340a9488e64a157ddc2975aba9016f6f82418ebbe878f0c388 +MD = bc2041029b16895afb1f59f7280f8a8f09be5dd241c675343f7ad8d75b834b75 + +Len = 376 +Msg = 9628a195ca6e708cfccf9f434dbe6c5105327f0f28ee1cfd4a069d62a39f203366f67d364fa47b677b20439b7d8514 +MD = df6d891d2c204354b827f530c54652940cb483f58d6b433973752c1fd1d2f84d + +Len = 384 +Msg = d85bdb2df5d72f2190e4b3d4fa5b6d848a088bfcf0af52b8c64c584a689ff3fc06e8f1b7f7f0892350489210b6d5f315 +MD = eb2681edf92a1f5559d10177110ad21ffd3fc1296e3cc83ece32e42f56ef7ded + +Len = 392 +Msg = d078a5dc6ec589117119ba3cfb9b11de57fccb563bade8b34a4fd2c7dd6b3f7c0363586cc7a81babb12efee78f1dd5b474 +MD = 0fc7046f02d070642d821c746785f209bb332690bb34335e6c6428051793e1a9 + +Len = 400 +Msg = b7ae6037d9b452994fb755aa0cf57fbc687298060a471f9b0c3d8e9d5a9ae0ad5b3b4fa7d4e3628c09d327c0259bbd76db2f +MD = cd1040a0d94382a6446a691c0a07c4f643edc11e3103e343608603b5bd101be3 + +Len = 408 +Msg = 62f016dfc38a4c70b7f95d669e2d475704909e13c997d3da7e96b6cd11d83aa3adef789ddc49f7bcef042b319f033b15f44208 +MD = 8aee50572b6b155cf40d6ed6c738bdbcaff2ade09bd4d8bc9c2f9a673373c44f + +Len = 416 +Msg = be890898b03f7cb52a9d4300ac2e8a80715102b1538fe37ce92c3165f2fc3e07f67870bd2a1144a395c593bd71ef1475d463234b +MD = ad156f2f416cceeb9a6a2520e79bba5295b584c59606fbdfda6ed13ed9d99af0 + +Len = 424 +Msg = c12149eed4113efa31bb3c4b9aa933639a0e1ca716062ebe251e553a2217e07affe779cedb015bddd7d6bf44269c9780644e7f0e29 +MD = b4941556b37c22c9d841bd0b1c4e5d8778b1c598d8b1ec55c4cff11cc7402d05 + +Len = 432 +Msg = c579bffa9396172aa1d654b47930e65f95c0c74b6abda382a5ab3bd0b4d20bd588ee2a58992873de2b45e27bd01e40e92f5003d70334 +MD = 63f898b4fe7a7d8c7ac776ed7811a922052791406429318fd5386a8f7864cfc6 + +Len = 440 +Msg = 71b58f40e28bd9427f0f7821ece9c6e0f34b7f5cc924222692979a8e28ab1e0018445694ee52bfe0b3485011b3d05e3a84bcbdeb434028 +MD = 7614582f42d5a907d4ceba0025798ee61d38072485f54ba3d742f29503f1911f + +Len = 448 +Msg = 592335639cd4f2f9ae6624e895d6a729b5079ee1f45aba911b7fb98c7f8b2cafe24a7e4c94d63267dd686c25a06fb38138dff541a6cccb28 +MD = 68d64cb4331b71e72b42c88b8f6513f4bc17d995254f04dc2b7cac022ad5edfa + +Len = 456 +Msg = e26e1dc893fdced833eae15ac04ed4624a07e3c89dc3d1d8205be44bfd63327782ff1bc2c8f7175c920eb22e7790d40d442b46349cff72f1e1 +MD = e1470b2f44e3955d2b5496292679d9086b7c0aa94f0d516e53a142e486c6ded8 + +Len = 464 +Msg = 7def4d439a9b7a6c5700bb91688b1ca6c4ecdff263c6646446ab4d2ab947df80d5dbaac648ee6cd6593f339426fdc2c7303a36271a9ee9b6ae58 +MD = a59591e28eb92dfbf290a06772bb145655979cd0fa0df15bf82aa27665abac03 + +Len = 472 +Msg = 283998b5e2394fb1ce1cee355b677e79f89a09aa28fa52d5d993c307f27ea7b32b60995321333c52aa492d2a658d36ca960dc53a31b59c81355dc9 +MD = 82f27f2abbe5fc2184b428eb92551e898a5177e997e337eebdc49320095c605e + +Len = 480 +Msg = 09f352d1ae807b258a9d49873a4c4aa4c63bfb52bf9180728ae7981bfb93d1f5262df8e2714cd4e4ee91143be8e785cdbc0888cbea44c4926c7e18cf +MD = c30efcccacda26ded16e92b0f2f2e667dc98f289a754cac628dfcb421ecc7240 + +Len = 488 +Msg = e6c2b24789348d646a263ffcdb6fcd511e1aac527b227a7a907aecf6e9500806d09394a566b3ce6cf3a85db47b3588fb926ea6897078d5524890ef1fd6 +MD = bf9ae2941d2bb948d33ae2a822e8738f744b5a9d692997719bd1a118743a0731 + +Len = 496 +Msg = b099e1b52348f93a6c22896c72854ab04f2dd3d1f94c5fad21ddd12e5b35f57c80db097150997c4e5cd3f5ac241897b57cf7849334149f29f77b97017433 +MD = 01d582c82ce6e6a8c0cfa81792110bc950fa55e31c101cc6f2df6b2aebc18925 + +Len = 504 +Msg = ac4065c8dcd58031b7475c3debe032168fa9f7ae5ad02d48134dfe3b48c58bf243af82383ab5eeb2c65d54ad96e8fb1b657b8bd7297cda318e3f02a6a2e2b7 +MD = 9fb9d7e6b81e86e441695ca5c762cf3b7735a75dbc4b2b1e3e5667848f6cdd73 + +Len = 512 +Msg = d2bc0ce7217ff2e944e1ae47ad5873bf391f1b0cc07f6151eb4c50bb45b2fb6295326f716ce7e687fa0e3d5d25c5a8a8dd13a541a9292e8386e733f4f2a24728 +MD = 9c1fea5786702d027bb5b66b3fa92de34621a8626982ec21c0ecf8daa79dea05 + +Len = 520 +Msg = a82aa079ad878cf1d699e9612fd3aef603df30c3e8904358fb18a2976d7b91c33f43c0da4976732581c5e00d7a06d8302be4aab4f2d545dbd94d9cd817324fe2da +MD = 46eb49bfc5b2ee3c97b91102525b6666d56bffaab4baa03059b89f24ec4b5622 + +Len = 528 +Msg = 72fee29494c25b119b6c5a600c468ec22e42af5ba93eb79452864ebe469a86f83632c85201800f3288b553f7bec649ddfe704920a27a8f65d13aa755985a238b3cdc +MD = f7eeddf08d3c1ab524167c908bcd8613d581cb0d03520d7b6b64d181bf13bf1e + +Len = 536 +Msg = feb7a094dffb5c0cb6f723c1b5e7d764d4ab5f896b13e409005940a45defb3ebe67bd85e2a21d8d1b800de1434ffcbd2aac92aba211666dd742d3a575da66a32d375b1 +MD = 40cfd88d613bc7d105e178081d2e3c5a09cd629465821909dbc1e9b8cd04a266 + +Len = 544 +Msg = 8ce31ca2ab2e7cff5ff5bcbcee367463cd5eee65b80bdb010116446729d1c31ead8df2a3226024538425538accc35a0dc0b364a50fbca50d9d01480e1c3ea8e9dc4fc2f5 +MD = d61fcf2c3178cbf34042a0fc02869f4670ea400ea384ccf04d8460806fe11dce + +Len = 552 +Msg = 4963a36af562e045ec25e39a0d9c2a035d4f6d62044fc975986d1eaa9eabb6344ef0275e97007a1f63aa8cef1c44b5da6f54a8d350909a4a3e09a701c8a3711b50c80a760f +MD = 69df54c0fbb35859b5fb247c92b5665ed27962f042a790519db8ce27343b9590 + +Len = 560 +Msg = 0663ac246f643427d7198feb54919f97f9e036864dc32c02fc87af50cd26dbeed4b48a18e9f96e9059605d9fdb10eb57c5583e1c7f501e6338bd4cb8d9361506378526138d50 +MD = db458a327dd21bb9c073bd5736a745e467538d9476b7647b74dcd17031bad72d + +Len = 568 +Msg = e70df9ce76334cc2096c0e715d8c96652492b5b6637d3e801961c59421b9a66e59ff4a68047aa52d6d58036fcefc05dd6f99e64f120003448fb69b8fbc4ad34d8fe5fd1a872319 +MD = 229be9deedbd16e948eebf8aa5838d276e0e6e295570c49eadc9f27c0e2e5798 + +Len = 576 +Msg = dddad5815834a99d79abf4ed36af74065b2e70e87cb8483b2ee250d877e8de8b8296a2179768367b4bf0f674f478124360e9e2b0c7eb794ffd4e7c02eca935bf4240e394672b54e8 +MD = 13b11a38ef74ab16bd65b84e83d34848bf3c56e6cab5c56cc0541e783df1d4b7 + +Len = 584 +Msg = 84617bcdea87420cb0e93feebfde3aabbf7cc7178065c81c99e333684f381563b82fd76420f7c024ab31bc733c485c2996011d60c153ede0b078ebdb20446fdbc3b64af89ecd4f4eaf +MD = 5bb51bcfeedc618a28ccf3bbd96be08972eeb1bc22d9bb64883dabdc6c3c6b54 + +Len = 592 +Msg = 970f5a9308f929c5de78e8119b96caf0ad9c4a06f182c73e75a9711c82cd694fda3524863e2c118533b57b78067bb0870e0763aa31354fbfa9e91dda08fe88dc7a7fbf474b1a0a50a9d1 +MD = 930a9c33e393ae8b1c39e072b08f972ad840db5401a4eded1f1fd14f8a0f68c6 + +Len = 600 +Msg = f29ec443a7c4bf4fcbc2cc4e992f3b1e0c70ebf60a2019efdcb676c3e2617cd4853701706c8f0d53f3abe96dd99b78e6385dca60bb49ef7c0bad099f8ab4a5f6448c4cb723c754aa6202fc +MD = 36d1cb5d930d73f01999533b035313a54b1e2cc223f07af829424230b8405177 + +Len = 608 +Msg = 4913709a09e606f0034926f21ce0faeefc0483b5c0ade99fef950fd0b09a6bba3a6415e38b491de85d6d22c3562e20497fbf8af6f71299ede9fce33bbb942f5c88dc8800d1a3900f6fa917ea +MD = 0948d1dc7a0a0172d3dae4ae40d128444f2f6309b443ad6a8ab3849def606a7e + +Len = 616 +Msg = 3365dc87c7f29b50925f2d50b1e437a49ca995caac35fcb3db29dd19cc2e8c130b2ca1e795bd9f1f9be1d3df83f37f7530db383283868d782193e915774fbbcffce4d340b6cd0fe5008d38718a +MD = 579d6c492dcfb032b9272aa0f54d13ece0fb2276619dd7e75f86aef3f58bfaea + +Len = 624 +Msg = 45a899ee24ce1eb7ffe13aa5acb08cabe94ff003957153b72019c6664072d045e5fa096470e6e4331fc3cd44cc597452d8d468836226e7eabca7f5501ffeab349d45d2105868b0def2ce22db443c +MD = 5c088cd0c18bf699edf47ddbbd1e11c9caa9161b852a6024492e7ab7dd5745ee + +Len = 632 +Msg = 389d76c18d8d11eb5b7e6e80d79f93be52c784eb1101b7f35948c752c98f6c34ed05abdb0f964a4250b58700f8590a6e0b45170c1d8d08216656fba219ddc855f2bb36360e676e1a00fcaf92213c44 +MD = b32d1b0acc097eddc13dbba91d2c144774f4bf1ba2275770b52858471de26ca1 + +Len = 640 +Msg = 120b80b44a2435d4783766416ede1784e00d3467c7ed1b6304e75b5846febb812d637fa6b043e693bce4f7ca1df07d75a211519e7cbdd7a2e854cbe30e683ebe285bdbbde6306f0d119ba932705a1ef9 +MD = 200818a7fa963423d0a90bd85475d67befdfa43bb49be7c026b9693743404dcd + +Len = 648 +Msg = 713705674e20066d61bfe9ca763a8705cb6ca1e8cf95c6d729507661fcc687156922c8975645e5f36eba8a3069eccb298e96c498767c7c741259107df0180d15b9461d51ffc8e65035c92fcbfff744eead +MD = 786ea368156477616fd76039f9b1caaa95763adcebc1cfdae8198f82a41182a9 + +Len = 656 +Msg = 123ccaec522c2983b6cc2e06b0900c331db49dc5d5809cdf80cb14aeacbe184b1ddab5de643c2509b4204584f0a54a0408d0af6286d271f9648e7f5021566cf914f568b8fff36ee8e714bf1b23228e01b4ec +MD = 91b3e2463558941d0626936a8d275722fe2e600bb24df78d7c46752675d1c4da + +Len = 664 +Msg = 75d040ddea0428d8231dce4fbc98cc4a2f578a5f47475379d740aed8ab2ceb59bf6cfcf8af7786936fc438f13ceb5c02d207ab68e05e6637b944a2f94c3ce4f65661edb2d604d7b6c2976193f8c9882577f357 +MD = 749bae9322af588495dbc0ce426debd9e9cc4c02f50c52ca246b5582840a86cb + +Len = 672 +Msg = 7c238aafde6aabab177f718e0cfe1386cb1421b4799b15788b862bf03a8072bb30d02303888032baf5be242341822095fa71487c68024aa0c1df31aaa08e82e4b4508440b549df9c9de26844146c3cb82c060cb0 +MD = 36ba7bf53f7d253738f590ee25c6120e0e89b1b89c2a0691db6d38b72c20055b + +Len = 680 +Msg = 470be1ab595f8bfcbe651aafbe58a90cd4d72dba54f3437a50872c16bdc81593d21c9caeb13091874944f9977bca59e77b3031847afac62e82132450a165643549a72b78f77673bc13a88e9e17dd67e8f4560c07b2 +MD = 8ef8d6472e09f566f70e17b454489c193d11fd99855f7e69c0eed389515df577 + +Len = 688 +Msg = 6973b2d5fd42e78a2245c76f25681d704ea194e2b578281e58c6db6f6bbda92fef28bd2c86f4e55186f044824cd147c7d379daad8579dbe950d4ce3ffd06d3a2bd44d69d050606f19cc38880f3fb6c69b47be0759ddd +MD = 226fa54ab31f5a78eab4f92b10972fcfc8ccad25e0ffa49365da83f27220f6cd + +Len = 696 +Msg = c4d0d14c93058865d0fbe2e6e14e99f170cecd75c183f95343ef26bf65925fe9aab464dd005ea3a84eaa63bd4c3c43979711e39f0578e14f355d07986bcdc2819bb7d612c4f05170807abd49d8069a725cb70ccf7429d0 +MD = 88e183a794f478a850856966fdedd71b14d8aba72819fb26f14d2315c67f2deb + +Len = 704 +Msg = 73661799c7d2e24ea484299d8c8c1125739dce5cc307c327a3e5eaa879987757ad74b855b1b840fd3ec444bbe0864521b436ef3770434213a58defaa41d405e65870ccf92443f1f04aede48b5e3e7f4caaf1e8ce2b97b858 +MD = ad1affd1b194bc0afc389a2cb23281244a8d80a524262b2560d58f7f6d226f51 + +Len = 712 +Msg = d49063453b779b18933d233369881617c987fef4b18eea6fc600c1a24672d5643e0dbbcbfd345bf0c86743f2cf68413e609c300d5bb3122ee68c5f0561529dd49dec3139489475f8acc50afb9a5b7097a0f6d311829f2861e8 +MD = 6768946a3a27f46288ddfd4cb7b5fc9e27cd3ba46ec959e6f3d0cb5bff68e226 + +Len = 720 +Msg = 905888121360fe46f86dddd119076195213443f339907f87e5a05b122864a5b7ef2b3c6badabd2a74251ef5f21d63938b213f4f6f516c5336975bb572ce28fc463002b51dc766afaf2411fd6b14e58493b48e47a6aaf1207b72a +MD = 145ff262e203957a88a875ef986ac484204b20d9c4be7d35ad59612764991d49 + +Len = 728 +Msg = b752ac4adc97012119d895a800f318db6ae7e3c70344949d09e0f80550cc2fb48a860a41c570b8343581a261343b937487dd1ccce3d9378daf882af00c1daede13d851be5d7c198bc9026a29798f29f91ea422ab7694a753133c7a +MD = 2f399dc553da607b1c2d490e6461664a5a2c007f1800d76a2aaf7742a86b9617 + +Len = 736 +Msg = 1ef7001c52803938e937d93f5c853f661ce483b4262eac63d81a2389030368f841ec046289c2bfc100e012f512d9dfafc271608f3eec5e89b78ca38d6f55b1671413b4e44c9eb636915d12993f092b37ebb35d49f709348063d5dca3 +MD = 77e371349c466f6c331fac0284987537c15d0430e3f0cca8f1fe2aa7c794ef09 + +Len = 744 +Msg = 284bff3b6a683ff220f5cbfd3c2fb8a72bdb8506fcdd5b2dc50794a3422f7b14c084524739229a50c1e38e072078f1b8c1b9091ccb3aec888d1ffa651f31abe046318be2996c8243e28f593bc7bd7a19aadff737cd3bce2dba496c45e2 +MD = bfaa54963521e6e1ac72b55ee4d654c041f62b73ad5a5305c58f47bb25db7cc2 + +Len = 752 +Msg = 081d08397e1353073f8df24675588ad215e4dc3615a59d2ad9b9815aeecb9a69fa37e036f36f115e909dbb02fd8a96cad3be182947e944e3a281c3cdf1ad35d4fd62c9417dcb0b3c8beffe8e558e6bab154b78ef43117c2808af1255f7c5 +MD = ea8fbe273cd2bb3ab9cc7f3640fb4e3153a028d8ba9a880b3b8219006c28281f + +Len = 760 +Msg = 1ed6244a5996d5a4423c0106a4b8e785d750c7313843f3dfd6ac272c6eaa1dbe9abe5dcd457453e26246a3dfddbdc140d2d9bca0feb35a7f73616a428f1a567b2e9af86b1fc8aec6d597b1b55f2aa2219b3b662fa6bd340796c0ecda6c96ab +MD = 8fc2263517c85d7ab8926595b8047b4b838a075a29b24da712303c3e6e597e49 + +Len = 768 +Msg = 63188781f4e9cbd1e89a54a65da053b93722e1106f00f024ad1582421ab919326f8a6e17536d6596e3cf413a9231141733e37aae540f8711cefafe489a87c4f2e6fd942f6809f3bef3076763487de48c2ee88733c5bc870617a668c6f01471ed +MD = 91a8e285029085e224987078066486b6c605cbac27e49e84f4639710ddd05d33 + +Len = 776 +Msg = 371171b626ccea8b2980dcd33bcbb849fe57d201000bc2443d830a9be6befa2a6117d13f9177252b57c8855159ad5c7c02701876ca3c8cd6b78c931923e3f7f4c1be91e9dbc6b119dd4bc05917ee2387bf9d631f35c58b098bc2d2b5459b7a6a5d +MD = e68655149dc14bc5759b8cacb7c2d2a850456a64a87af41de84f567ffe9c5e60 + +Len = 784 +Msg = 9bf7c7d99059248589b18a3fd3b03f4a72d21d2aacd635b5cc71b86d2043180d440a6a62a2160f5c3afd93659f8fd5f1420c6857f3953adfa5e1731c7231a07cdf86111d60117fe21febf3c7f906e271c9649d0aea86e94bf728e9dad52b45d7f4d3 +MD = 385b95541558ad0a9a20cb91116eda03c5a694ca95eab1caf5c0d1501899d3bd + +Len = 792 +Msg = 1973263a26d4a418c691dd5f5ccb7dd7241ebcae24ccebbe60174c0f4eee279d89cc1a5bc9deb177136437e02d59cb065556b6e132b4fb340bf1301337548da3d5d44321bd370e25b6770e28e969d34495a0b73c059070bcbfefe5e2ff6141fc635346 +MD = 39d8740d56e58f027a6af13cce9b6484b23fa6b3693354175c034ac1778a1a75 + +Len = 800 +Msg = ec8ee65cef05452defe832e0a3a3ba6116a8d5d6a8638e2e566f63fd3c0aef8758c6c61a9182a1a2f899bb774d597a79c5b7525f0a40e74c845371a3d78e651dad865219b5bb0833eccb00171be5f898a081defc724eef9a606c20a899dcbd4e713550fe +MD = 3e7a652d89df9ed7cacf53d033997c87528b8cc37d59b8eafbedbe4e8e9c5c3b + +Len = 808 +Msg = df410a8b65f17139fc8eb8495df813b1f6f9f1b7471c7e628cc36d2e9c74f60311741a68a9972ef5ec5697060f22d3b719f8b90c4436016fa6ad066010f7cb68370a3c4e110eb78e826ccb07382840f4d470571d4a75524f8a7937096029d278982ef9a567 +MD = 294c8788036098f49c23016534d032939d5e9638e3e4e8474533f52b668f2da1 + +Len = 816 +Msg = 27c2ee5f63c114c1f61530685c19c21a4b7d47b3428e6b8265b87bf0884919628a773361e4a536f981e27e5ed1b312d619128ed20db6605ea09537bc1ba8b94c6cee75b0c1b3182c5612e3538bb95ce03aec44e247cdca1c79dafeab88b788e9772e9a922374 +MD = cf027f6017618d970da83865d8da560f454ce2bd86af59624fb87c8e48beb208 + +Len = 824 +Msg = 2f510b72ad1a26fead669ccafe9ad0fe31ce0a12f3d06bee9a6c2750fdebee6d89daabdb910d71aee6e3b2e2a8cab3f95b063ce43daf9427d7f9ad39d3b99b290d244a87edd97182f322c24e937664c94443a25dd4ebe528fe0cdf5a3e050adfe4b6513f68870c +MD = 8969727f522ab392d11c3cfa7d02fa2f9b457a1de2afd360ac9b2b4fece84e32 + +Len = 832 +Msg = 2a81eb0e6f1d13df6544c69321c561a489ff9d77b9ae11d7a604f8a201fc35c25feb945f965753536a0de1df696ee59c130a82b43e70d951b943d0563091124e4f6158a12a8be60eddcd58556f1a9e34fd354695147ff9065e0e496981feaaed440cbd3df460d5f7 +MD = 3818a14b4abd900c823275d45afea6ed1df6cc659eb3ef387445f8ad3903623f + +Len = 840 +Msg = 9aa1fa540acb4d2a59a6a3aa8c2fdbcd0a4a17b6b55508e65a036cb34b68d4f64a50ab05a9d574e1b03153b03fd0cf6db4aad6de0fcf01c655431a5d320ddcfde18bf91e510862848090c2b72b034bb4aa69b6e216858547acad8cfc76d9afde28f9ed87488c9e7d91 +MD = f9424b3dd79d555e2f5f8a185933f77db95864f4b597ee805d5b62fe0396673e + +Len = 848 +Msg = ccf2cc0cd223b80ebbd49db9ede7a22862812dbc4b1aa6c9fad07f8efe01716b9018084e2ea7616f85b7333d945c0c970f8cdd400130b98db67cda61d87ce55bd8f06e4e8f5abff22655d5d93328aca4249bbd76e10ac4a9adb7c6c04d64539d6d2209f53f6459006557 +MD = 06d1cd544f954160ade83a102eb935f7f948009591b3eadaf4765868c63450d8 + +Len = 856 +Msg = 5aa1b85ca84f24f487f69e796268826518154bd6a224583ef6c3f15c2bbb856bdd473599d32697badfefb33e06a55260e18b79a1433930751df0873c9e2bdb739e76562c3c83b5bbc67b4eb3da925111cbde4eb64669f71b36852840e45f24e563d722fd2b8f0860044276 +MD = c760de5612ec9d047848727b261c8876b6c33b2c57ee1ac99da0890c009b9540 + +Len = 864 +Msg = b613eebbad7a1860928ae7329a38cfe86f1174a579740ecc5cff1216c2470fe25accd5cc212cdd80e096e5d1f582db05579ffc73d50d3d519ecdeac706768d478729112106c627525860e99d05efbdde4c457d9a6744d5da104dec3a43fb463d4612e9e3e7b2be7e05d13bc1 +MD = 012499f4e6e2af3b530d264bce97e344405ffe59c04b31432e7f0446a6ef33ae + +Len = 872 +Msg = 823ef09a0a657d28ffe8173b6cf04bf4795a96b39b19339608d5323c6ed8cacfe42bf04121fc28d5eb439ce2d3a66bd42099437309c9326827bbb9fc29b02324cacd14bb0078650e76052f9d3d922620bf2f29c9f44317c9d82be3151c23eb6a1b6a858e11a1dbda8774faf512 +MD = 08042c79507268fdcebf12719610219d1364117e66916b9e0c1a2aedf5b4a8df + +Len = 880 +Msg = 9607cca45873add19a93dccf3d0f790e856ff30b84c8211ad69b8e628ffa142972ecac5264138423208c524c2b17e9250b780938b41d7cff43005eefeecfbdb53b4b62bf71eeedfe4cd028eaf5cb95c731dd4927d9cffdb18a1463209df4b68f5aea95f3684a11e9882605b28473 +MD = 73b4086d690ace6940c01912acb3a57bfc15c4a16c40a90b4329f1fa9f3085d2 + +Len = 888 +Msg = 5731f467c5b923c43af9c5fa849aad21ab8dd7db1ca1a687065571b705ea3ee4febdcd614ad4d98e16b79a4e09818ebb28367918f757ab06e1b481fbda822ef143adbb5b0e704d5d2222a73c0153ef14a817b5c9b7a2313fd115ccce4698e3f0efa9c73d5ab3089a27e3f3adb23759 +MD = f5253b5c69db9c724aebf762ec51c221f8a4d4e2174a4b7f56e4d69aa44adfa3 + +Len = 896 +Msg = 92b23c0bc4d8d07d22e28812710dff06cb9bbecea2c960ac0200f480164fa2e1ee19926c7f0b095cec51d55c040aec990bf9501abd7d355490c366f93a3ae5127347d14dfc3b8d98e0821feefa1cd671b75230ba1da1fa6d0cfbb910c42f491da8a5c455424ea65886db2e735b2d07b9 +MD = 55a0597f11ff71c426201715beb585f254bb31c1dbade533f04e499c3391ff79 + +Len = 904 +Msg = bcc51ea0a66564a171dabfa279e384f4d9fdcba38028215788ee7d78c3a2769596e6b2070a6fa2d1200d6ccb65e52900c7015154a70c736a2f562ac4e61f4c2c81116453fd0e63b9ea2c92cc0afecb541a16e90ef0c77d97c630c38cd675d4f027501ccea6c90f1f784118ed8fb5d2b97b +MD = c16ca79c0ab44f39da1c65e8943ad2e90888c3d80b5e3b3b1bff59408b59d6f3 + +Len = 912 +Msg = 2183bf5465b18359a451cf3030bab07fa761d11926444c7dba88c0a01760a4ec8d32db8837f588da76de234a9d3bcd49ee9fe092c63fcbb0149c1dc10f62df792990276a3edaea82124c12d5fa2fd09cd930347e4ebffb0f2cb6a8972b3bd614dde7cc82e328525960e3c358ae5e6481505e +MD = 7e5b4bd808b900735c0fe665da9437dacaf85249df653c6ee72fb296e8a9b8bb + +Len = 920 +Msg = 959ba94b728a8adf53513521022558183a632e24ad82a3904b47b966c2372a8741524ffa82fe408507423d7aa4344dd43db52482d15b4a03b7af7a3328994965fe1808b1bb36ea90cd3c6aa61122e7de954991bca26d89effad544265ecc312553559b18261bd0272ea7834a51d56f5fc9893d +MD = 85c2f125e6d11f831807820ccf0a53932713dbcef3e23b0e3c0aad8f89139cc4 + +Len = 928 +Msg = 30d62ff4263a731a205069cf7c0a0db0b50d3db13f08c00fb24586862b7e31c5eff1d51f52b6fc83d851eeae99842f9fea67484b39baca933979917340b1467ced9327840dc60b9cbf02a042d7dbf8d881da445527d2df3b94718ec9591606716fe2ae8c1f12a74d1f8c0af3feb77043c190b836 +MD = 4543378ed5a054557889b4634d4aa77bd30726b797235010d6a4920bf9cc3b40 + +Len = 936 +Msg = 3761a4861249c4e0115b997c2c87e85e5ea2bcaf44aea31ae65c1975d5cf45a476a3e3ba9d2e82625d05ef7e1fc2f10df205365222b98e330c9957df30f238b388aa135f19813444c797cf216d2fa9ef2db2150905f72290a3c1130e7b890f59167e1abbadcb444ff61820ae3e5378cbb8b03f1c15 +MD = 088167f12e82a45698cad25b405da5e24a0f4515b28b915bfe799d0990723598 + +Len = 944 +Msg = 6e26e2b41b80f26b87cba9bf5e11b734611e89110c9210157634c5667a89eaca14a612190d42e3f3db0f1baec34bd1924091fe49a8f63b910d51cc3461dade3adef70d5da55229bda62f3ad5bffdc1ae282a41520e3cfe847e1e05ae85b76c1b96c1db662bd94c33afd20e1c9c4f10efe1915c16868d +MD = ad549004c75fa7818dfa6e906062a850589f7a8d17a1c411fc955168215e45cc + +Len = 952 +Msg = fe8b3dca283022daf7022a88dfb8ff61847509c41e9cec4f22e652971fb2ea1ce59cb17ced5070e6f5a185d2ebd5e7ef0c43655d4d212e1dfa9796c69d17177921f196163722e8b0f96d953fcdaedc958d6af794e5aaa09dfc0ad34b560dd662f9b37702ce4e95214b91e1384feae63b4d1247cfade248 +MD = 37a89a63b4a30e6a21549a245a2633ee5fdb618e6749f60522f5ad03a34d4465 + +Len = 960 +Msg = 04c48b4c37a0dafe8ab2c517eeb472385661001376296ac5ca2aaf67db5c30dfbe0b59fcdd8b83c3fa271903705afa30bc421f6d3d517eeb38462e721f5bcb3d13c01c0ba749f373e7645578994ddb5dc28558bb6c80bcd0a79d391ace5ca4240bcc1da11d42f2b75950c19deff5dd686f12f3228c1dee1d +MD = 29a6b04353ea82f3f2a28503a125233f8afc5b601921637a0a24b83436abf9b5 + +Len = 968 +Msg = bc43ae59c1bed74fd4eb61be97b0276ec5adda96c67c3b4680378e026f3b4baff82c16b4fa3af159a7a2b1729277ae4208a2bf9aa42866411eab47986434df7eec2f727248b745f7fb140e3d8b82a9fdd7340ca5ab997db592de0369ebb41a983f53aadcd2bf3af3784a6165aa5a7e67d96ca9000259ea6a83 +MD = 6e1244587179eff28881bb80b02d193908a4c4d014b4da5b7e93c09e2b2964f5 + +Len = 976 +Msg = ddad789728581044ff760f79099e01a2cfc94ba27a070e22de714e28b85f54eb34db50e6b355432bca981cfa8efc21920fdd9147224d88d5640622f47ba2e32c9f0f57eb5a3df5d58b19495bb1bf538f66eb2a362ab1e41f626fbab4a0ff68cf2531d3cfa578eeea4ae3dec5fb4f5d41dddc5c981a9decaae294 +MD = 6e3ff96f4e4a722c912392b3b5fa20ae762ccef244c011268720962184383a66 + +Len = 984 +Msg = 8c7214e14eb6e0ee14de3ca0edcb510aec5079b3d143ff48e5d3268d261b6c99a4f80f432b18d1d82254f80fb3409a3e2d0017cda65de7ebe41896817e7d0c643e3c12cfca75121083121e81ae5934bad2c1c105600563139978f3edad98c32c20e5246d72f42c00ffbfb6e0243fa9e8a33d7e434965fc25ce9c46 +MD = b4b4e5edda4fb4f7c0e734cbcca3c78dbd6f2c9a997ae85a6394108cbc5c567d + +Len = 992 +Msg = 3b766fbba3339959b194163c36b4eb6505ac17e7b24e753e9916e3e1225da41b44d0031648213939d0fc91b3173dca587a60bdad3838403e76e449388600573368180d5091622084ecac74331f9382010ff6fde5a6aab57fd46fbbabd323c656b036d590075e16e30e8c07e3d41edb07cb561fb7850b9da6bb9e8162 +MD = b450e083d9f3f58284ef80023e3bacb1826e560a22f6e6625d14ad1348df96b1 + +Len = 1000 +Msg = 6ed8a9f9f2baf57e659aed127833edee9025a8481cf61d772556c75826a714f01fbc1953e5e184c4bc1cd21d27b3c272ffee09f1c31e470c2fde3adb109931bb564dc43c6b8ec33ac3cd6c49b5dae15789a8d98cd2519575fe5916622b378d0c3c11137b2cc89a27a334235ec7b132e555da7fe2f094eff9b94fc2b61f +MD = 17312a26ef9b41ffebe31ee7ee51162704a2f05a5905ff8b692fd603942e9668 + +Len = 1008 +Msg = dcb458193c4ba82a45bfdf028000841e4a8c671f8e2b841dd4dc2a3d7b0f5d86421478f00ed417bee7bf330e43058faf87095332cb13f744dd44633b89d055ee186702ca17f400225a8a63c7409b27d9376ccedc83c5490e3ced1cf896d6be4466943ecee1132cfea60ab754ff2b1344639d1e4540ab4225f8be9d9f2988 +MD = 9392ce14d344de05e4f87f634b457079343e270fff5b5c7b731e9fef137115dd + +Len = 1016 +Msg = 3e3a52d3261e1194249786d6c0e18d52d92f1c7639f079c26c51aa72d1032e5df13eea1d1006667002ad39de4099c29c3b4719b1f0904557bd2bb0a47374d869ac6b465b5f00c470b18ecb8c0ea53b5d790c4e832006cff534d587a0f77df95117ca4fd43a94935eda422228538d5e5d3a87a436f1db7e63785619ae86a6f9 +MD = b34e72cefefb63d6e309bcfb4f0b1d350f2c5c582de3b93ad137f921a92a7e79 + +Len = 1024 +Msg = bc8173c878ca60e9a0f823f9a589d4ff84547b389b117fb6bb1b614e7e75a9b1db0b21d9f73b42a73e94eccab3de5ae2845a54e5e24ba6c20fb4d245b964023b863040d6f080e953530d5fd944e8ffa525bf5364f65c88e06e6e22df4b8cee48e67738880a9f3f3406e9e6f001b0ac8f8e0ade7c814c0c5800d0b9e4ddf55622 +MD = f691d01ee9ab675f3872313b77e6a4543c71e3e89aa94c48f91d6ee7fa1ab4fb + From ce6fe07632c17f16221f02ad19c6875327cdd10a Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 14 May 2018 12:19:49 -0400 Subject: [PATCH 235/988] Remove unused BIO bindings. (#4220) * Remove unused BIO bindings. This also folds in the const bits from 1.1.0, on the assumption that, now that the function pointer check is gone, it will just cause cffi to generate more conservative pointer types that work for 1.0.2 as well. * Restore some functions used externally. Datagram BIO_CTRL_* constants are intentionally omitted per discussion on the PR. --- src/_cffi_src/openssl/bio.py | 110 +---------------------------------- 1 file changed, 3 insertions(+), 107 deletions(-) diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index d3dd66903770..0955dcd76b16 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -9,136 +9,32 @@ """ TYPES = """ -typedef struct bio_st BIO; -typedef void bio_info_cb(BIO *, int, const char *, int, long, long); -typedef ... bio_st; +typedef ... BIO; typedef ... BIO_METHOD; -typedef ... BUF_MEM; - -static const int BIO_TYPE_MEM; -static const int BIO_TYPE_FILE; -static const int BIO_TYPE_FD; -static const int BIO_TYPE_SOCKET; -static const int BIO_TYPE_CONNECT; -static const int BIO_TYPE_ACCEPT; -static const int BIO_TYPE_NULL; -static const int BIO_CLOSE; -static const int BIO_NOCLOSE; -static const int BIO_TYPE_SOURCE_SINK; -static const int BIO_CTRL_RESET; -static const int BIO_CTRL_EOF; -static const int BIO_CTRL_SET; -static const int BIO_CTRL_SET_CLOSE; -static const int BIO_CTRL_FLUSH; -static const int BIO_CTRL_DUP; -static const int BIO_CTRL_GET_CLOSE; -static const int BIO_CTRL_INFO; -static const int BIO_CTRL_GET; -static const int BIO_CTRL_PENDING; -static const int BIO_CTRL_WPENDING; -static const int BIO_CTRL_DGRAM_SET_CONNECTED; -static const int BIO_CTRL_DGRAM_SET_RECV_TIMEOUT; -static const int BIO_CTRL_DGRAM_GET_RECV_TIMEOUT; -static const int BIO_CTRL_DGRAM_SET_SEND_TIMEOUT; -static const int BIO_CTRL_DGRAM_GET_SEND_TIMEOUT; -static const int BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP; -static const int BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP; -static const int BIO_C_FILE_SEEK; -static const int BIO_C_FILE_TELL; -static const int BIO_TYPE_NONE; -static const int BIO_TYPE_NBIO_TEST; -static const int BIO_TYPE_BIO; -static const int BIO_TYPE_DESCRIPTOR; -static const int BIO_FLAGS_READ; -static const int BIO_FLAGS_WRITE; -static const int BIO_FLAGS_IO_SPECIAL; -static const int BIO_FLAGS_RWS; -static const int BIO_FLAGS_SHOULD_RETRY; -static const int BIO_TYPE_NULL_FILTER; -static const int BIO_TYPE_SSL; -static const int BIO_TYPE_MD; -static const int BIO_TYPE_BUFFER; -static const int BIO_TYPE_CIPHER; -static const int BIO_TYPE_BASE64; -static const int BIO_TYPE_FILTER; """ FUNCTIONS = """ int BIO_free(BIO *); -void BIO_vfree(BIO *); -void BIO_free_all(BIO *); -BIO *BIO_push(BIO *, BIO *); -BIO *BIO_pop(BIO *); -BIO *BIO_next(BIO *); -BIO *BIO_find_type(BIO *, int); BIO *BIO_new_file(const char *, const char *); -BIO *BIO_new_fp(FILE *, int); -BIO *BIO_new_fd(int, int); -BIO *BIO_new_socket(int, int); BIO *BIO_new_dgram(int, int); -long BIO_ctrl(BIO *, int, long, void *); -long BIO_callback_ctrl( - BIO *, - int, - void (*)(struct bio_st *, int, const char *, int, long, long) -); -long BIO_int_ctrl(BIO *, int, long, int); size_t BIO_ctrl_pending(BIO *); -size_t BIO_ctrl_wpending(BIO *); int BIO_read(BIO *, void *, int); int BIO_gets(BIO *, char *, int); int BIO_write(BIO *, const void *, int); -int BIO_puts(BIO *, const char *); -int BIO_method_type(const BIO *); /* Added in 1.1.0 */ int BIO_up_ref(BIO *); -/* These added const to BIO_METHOD in 1.1.0 */ -BIO *BIO_new(BIO_METHOD *); +BIO *BIO_new(const BIO_METHOD *); BIO_METHOD *BIO_s_mem(void); -BIO_METHOD *BIO_s_file(void); -BIO_METHOD *BIO_s_fd(void); -BIO_METHOD *BIO_s_socket(void); BIO_METHOD *BIO_s_datagram(void); -BIO_METHOD *BIO_s_null(void); -BIO_METHOD *BIO_f_null(void); -BIO_METHOD *BIO_f_buffer(void); -/* BIO_new_mem_buf became const void * in 1.0.2g */ -BIO *BIO_new_mem_buf(void *, int); -long BIO_set_fd(BIO *, int, long); -long BIO_get_fd(BIO *, char *); +BIO *BIO_new_mem_buf(const void *, int); long BIO_set_mem_eof_return(BIO *, int); long BIO_get_mem_data(BIO *, char **); -long BIO_set_mem_buf(BIO *, BUF_MEM *, int); -long BIO_get_mem_ptr(BIO *, BUF_MEM **); -long BIO_set_fp(BIO *, FILE *, int); -long BIO_get_fp(BIO *, FILE **); -long BIO_read_filename(BIO *, char *); -long BIO_write_filename(BIO *, char *); -long BIO_append_filename(BIO *, char *); -long BIO_rw_filename(BIO *, char *); int BIO_should_read(BIO *); int BIO_should_write(BIO *); int BIO_should_io_special(BIO *); -int BIO_retry_type(BIO *); int BIO_should_retry(BIO *); int BIO_reset(BIO *); -int BIO_seek(BIO *, int); -int BIO_tell(BIO *); -int BIO_flush(BIO *); -int BIO_eof(BIO *); -int BIO_set_close(BIO *,long); -int BIO_get_close(BIO *); -int BIO_pending(BIO *); -int BIO_wpending(BIO *); -int BIO_get_info_callback(BIO *, bio_info_cb **); -int BIO_set_info_callback(BIO *, bio_info_cb *); -long BIO_get_buffer_num_lines(BIO *); -long BIO_set_read_buffer_size(BIO *, long); -long BIO_set_write_buffer_size(BIO *, long); -long BIO_set_buffer_size(BIO *, long); -long BIO_set_buffer_read_data(BIO *, void *, long); -long BIO_set_nbio(BIO *, long); void BIO_set_retry_read(BIO *); void BIO_clear_retry_flags(BIO *); """ From 6639dd15a7847fae731b29ce01f98cba79757838 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 14 May 2018 13:00:02 -0400 Subject: [PATCH 236/988] Clean up unused EC bindings. (#4225) * Clean up unused EC bindings. A lot of these are really OpenSSL internals, like the EC_METHOD business, support for custom curves which are a bad idea, and weird non-standard serializations like taking the usual point serialization and treating it as a single BIGNUM. I also didn't remove things when they're arguably part of a set. E.g. EC_POINT_add is used, but EC_POINT_dbl isn't. However, they both set at the same abstraction level (basic point operations), so it's strange to have one without the other. I also kept EC_POINT_is_on_curve because, although it is not used, OpenSSL prior to 1.1.0 doesn't perform this important check in EC_POINT_set_affine_coordinates_GFp (though it does in some of the functions which ultimately call it, like EC_KEY_set_public_key_affine_coordinates, what cryptography.io actually uses), so one should not expose the latter without the former. * Fix build issue. --- src/_cffi_src/openssl/ec.py | 79 ------------------- .../hazmat/bindings/openssl/_conditional.py | 4 - 2 files changed, 83 deletions(-) diff --git a/src/_cffi_src/openssl/ec.py b/src/_cffi_src/openssl/ec.py index d3d02307e86c..45cbe3c0c7b3 100644 --- a/src/_cffi_src/openssl/ec.py +++ b/src/_cffi_src/openssl/ec.py @@ -27,34 +27,16 @@ typedef enum { POINT_CONVERSION_COMPRESSED, POINT_CONVERSION_UNCOMPRESSED, - POINT_CONVERSION_HYBRID, ... } point_conversion_form_t; """ FUNCTIONS = """ -EC_GROUP *EC_GROUP_new(const EC_METHOD *); void EC_GROUP_free(EC_GROUP *); -void EC_GROUP_clear_free(EC_GROUP *); -EC_GROUP *EC_GROUP_new_curve_GFp( - const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -EC_GROUP *EC_GROUP_new_curve_GF2m( - const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); EC_GROUP *EC_GROUP_new_by_curve_name(int); -int EC_GROUP_set_curve_GFp( - EC_GROUP *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -int EC_GROUP_get_curve_GFp( - const EC_GROUP *, BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *); -int EC_GROUP_set_curve_GF2m( - EC_GROUP *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); -int EC_GROUP_get_curve_GF2m( - const EC_GROUP *, BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *); - int EC_GROUP_get_degree(const EC_GROUP *); -void EC_GROUP_set_asn1_flag(EC_GROUP *, int); -void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *); const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *); @@ -65,13 +47,7 @@ EC_KEY *EC_KEY_new(void); void EC_KEY_free(EC_KEY *); -int EC_KEY_get_flags(const EC_KEY *); -void EC_KEY_set_flags(EC_KEY *, int); -void EC_KEY_clear_flags(EC_KEY *, int); EC_KEY *EC_KEY_new_by_curve_name(int); -EC_KEY *EC_KEY_copy(EC_KEY *, EC_KEY *); -EC_KEY *EC_KEY_dup(EC_KEY *); -int EC_KEY_up_ref(EC_KEY *); const EC_GROUP *EC_KEY_get0_group(const EC_KEY *); int EC_GROUP_get_order(const EC_GROUP *, BIGNUM *, BN_CTX *); int EC_KEY_set_group(EC_KEY *, const EC_GROUP *); @@ -79,30 +55,14 @@ int EC_KEY_set_private_key(EC_KEY *, const BIGNUM *); const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *); int EC_KEY_set_public_key(EC_KEY *, const EC_POINT *); -unsigned int EC_KEY_get_enc_flags(const EC_KEY *); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *); -void EC_KEY_set_conv_form(EC_KEY *, point_conversion_form_t); void EC_KEY_set_asn1_flag(EC_KEY *, int); -int EC_KEY_precompute_mult(EC_KEY *, BN_CTX *); int EC_KEY_generate_key(EC_KEY *); -int EC_KEY_check_key(const EC_KEY *); int EC_KEY_set_public_key_affine_coordinates(EC_KEY *, BIGNUM *, BIGNUM *); EC_POINT *EC_POINT_new(const EC_GROUP *); void EC_POINT_free(EC_POINT *); void EC_POINT_clear_free(EC_POINT *); -int EC_POINT_copy(EC_POINT *, const EC_POINT *); EC_POINT *EC_POINT_dup(const EC_POINT *, const EC_GROUP *); -const EC_METHOD *EC_POINT_method_of(const EC_POINT *); - -int EC_POINT_set_to_infinity(const EC_GROUP *, EC_POINT *); - -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *, EC_POINT *, - const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); - -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *, - const EC_POINT *, BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *); int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *, EC_POINT *, const BIGNUM *, const BIGNUM *, BN_CTX *); @@ -129,18 +89,6 @@ int EC_POINT_oct2point(const EC_GROUP *, EC_POINT *, const unsigned char *, size_t, BN_CTX *); -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); - -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); - -char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BN_CTX *); - -EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, - EC_POINT *, BN_CTX *); - int EC_POINT_add(const EC_GROUP *, EC_POINT *, const EC_POINT *, const EC_POINT *, BN_CTX *); @@ -152,25 +100,9 @@ int EC_POINT_cmp( const EC_GROUP *, const EC_POINT *, const EC_POINT *, BN_CTX *); -int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); -int EC_POINTs_make_affine(const EC_GROUP *, size_t, EC_POINT *[], BN_CTX *); - -int EC_POINTs_mul( - const EC_GROUP *, EC_POINT *, const BIGNUM *, - size_t, const EC_POINT *[], const BIGNUM *[], BN_CTX *); - int EC_POINT_mul(const EC_GROUP *, EC_POINT *, const BIGNUM *, const EC_POINT *, const BIGNUM *, BN_CTX *); -int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *); -int EC_GROUP_have_precompute_mult(const EC_GROUP *); - -const EC_METHOD *EC_GFp_simple_method(); -const EC_METHOD *EC_GFp_mont_method(); -const EC_METHOD *EC_GFp_nist_method(); - -const EC_METHOD *EC_GF2m_simple_method(); - int EC_METHOD_get_field_type(const EC_METHOD *); const char *EC_curve_nid2nist(int); @@ -182,8 +114,6 @@ #if defined(OPENSSL_NO_EC2M) static const long Cryptography_HAS_EC2M = 0; -const EC_METHOD *(*EC_GF2m_simple_method)() = NULL; - int (*EC_POINT_set_affine_coordinates_GF2m)(const EC_GROUP *, EC_POINT *, const BIGNUM *, const BIGNUM *, BN_CTX *) = NULL; @@ -192,15 +122,6 @@ int (*EC_POINT_set_compressed_coordinates_GF2m)(const EC_GROUP *, EC_POINT *, const BIGNUM *, int, BN_CTX *) = NULL; - -int (*EC_GROUP_set_curve_GF2m)( - EC_GROUP *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); - -int (*EC_GROUP_get_curve_GF2m)( - const EC_GROUP *, BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *); - -EC_GROUP *(*EC_GROUP_new_curve_GF2m)( - const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); #else static const long Cryptography_HAS_EC2M = 1; #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 971e540cb744..761124f5ccda 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -7,13 +7,9 @@ def cryptography_has_ec2m(): return [ - "EC_GF2m_simple_method", "EC_POINT_set_affine_coordinates_GF2m", "EC_POINT_get_affine_coordinates_GF2m", "EC_POINT_set_compressed_coordinates_GF2m", - "EC_GROUP_set_curve_GF2m", - "EC_GROUP_get_curve_GF2m", - "EC_GROUP_new_curve_GF2m", ] From db131983f4e6ae6c2ec34072fbff0e30d967c8c7 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 14 May 2018 16:09:36 -0400 Subject: [PATCH 237/988] Remove some unused RAND bindings. (#4239) These are unused. (And not especially useful.) --- src/_cffi_src/openssl/rand.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/_cffi_src/openssl/rand.py b/src/_cffi_src/openssl/rand.py index 089da8b3b7f6..6865392790ee 100644 --- a/src/_cffi_src/openssl/rand.py +++ b/src/_cffi_src/openssl/rand.py @@ -13,12 +13,8 @@ """ FUNCTIONS = """ -void RAND_seed(const void *, int); void RAND_add(const void *, int, double); int RAND_status(void); -const char *RAND_file_name(char *, size_t); -int RAND_load_file(const char *, long); -int RAND_write_file(const char *); int RAND_bytes(unsigned char *, int); /* ERR_load_RAND_strings started returning an int in 1.1.0. Unfortunately we can't declare a conditional signature like that. Since it always returns From 10cabad73b4e0cc15463e43f9a94855c4db7f032 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 14 May 2018 18:32:22 -0400 Subject: [PATCH 238/988] Fix some stuttering. (#4240) This is a remnant of the function code checking when this logic looked at both encrypt/decrypt versions of this error code. --- src/cryptography/hazmat/backends/openssl/ciphers.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 8e55e28bdff4..462ffea251b4 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -167,9 +167,6 @@ def finalize(self): errors[0]._lib_reason_match( self._backend._lib.ERR_LIB_EVP, self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH - ) or errors[0]._lib_reason_match( - self._backend._lib.ERR_LIB_EVP, - self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH ) ) raise ValueError( From 763990efa6c158d8a4dec8d71693665d026588a2 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 14 May 2018 22:49:24 -0400 Subject: [PATCH 239/988] Validate the public/private halves of EC keys on import. (#4241) * Validate the public/private halves of EC keys on import. OpenSSL's API is a little finicky. If one sets the public key before the private key, it does not validate that they match. If set in the other order, it does validate this. In particular, KASValidityTest_ECCStaticUnified_NOKC_ZZOnly_init.fax describes error code 7 as: Result = F (7 - IUT's Static private key d changed-prikey validity) Reordering the two operations makes those tests to fail on key import, which is what CAVP appears to have intended. * Wrap to 79 rather than 80 columns --- src/cryptography/hazmat/backends/openssl/backend.py | 7 ++++--- tests/hazmat/primitives/test_ec.py | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 9cf969cd7e93..0b7550e5e28e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1355,14 +1355,15 @@ def load_elliptic_curve_private_numbers(self, numbers): self.openssl_assert(ec_cdata != self._ffi.NULL) ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) - ec_cdata = self._ec_key_set_public_key_affine_coordinates( - ec_cdata, public.x, public.y) - private_value = self._ffi.gc( self._int_to_bn(numbers.private_value), self._lib.BN_clear_free ) res = self._lib.EC_KEY_set_private_key(ec_cdata, private_value) self.openssl_assert(res == 1) + + ec_cdata = self._ec_key_set_public_key_affine_coordinates( + ec_cdata, public.x, public.y) + evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 1b491a109512..59e4c9955f5a 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -1068,9 +1068,9 @@ def test_key_exchange_with_vectors(self, backend, vector): ec._CURVE_TYPES[vector['curve']]() ) ) - # Errno 5 and 6 indicates a bad public key, this doesn't test the ECDH - # code at all - if vector['fail'] and vector['errno'] in [5, 6]: + # Errno 5-7 indicates a bad public or private key, this doesn't test + # the ECDH code at all + if vector['fail'] and vector['errno'] in [5, 6, 7]: with pytest.raises(ValueError): private_numbers.private_key(backend) return From b2165c2ef0fdf8d63c3b4780648266e37d39df2d Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 14 May 2018 23:41:27 -0400 Subject: [PATCH 240/988] Remove some unused RSA bindings. (#4243) RSA_blinding_off is a silly function. RSA_SSLV23_PADDING and RSA_X931_PADDING are obsolete. The low-level padding functions appear unused and the EVP_PKEY stuff is probably a bit nicer than expecting callers to RSA_NO_PADDING and do the padding by hand. --- src/_cffi_src/openssl/rsa.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/_cffi_src/openssl/rsa.py b/src/_cffi_src/openssl/rsa.py index 459d5cb92650..13de2aae2c49 100644 --- a/src/_cffi_src/openssl/rsa.py +++ b/src/_cffi_src/openssl/rsa.py @@ -12,10 +12,8 @@ typedef ... RSA; typedef ... BN_GENCB; static const int RSA_PKCS1_PADDING; -static const int RSA_SSLV23_PADDING; static const int RSA_NO_PADDING; static const int RSA_PKCS1_OAEP_PADDING; -static const int RSA_X931_PADDING; static const int RSA_PKCS1_PSS_PADDING; static const int RSA_F4; @@ -32,7 +30,6 @@ int RSA_check_key(const RSA *); RSA *RSAPublicKey_dup(RSA *); int RSA_blinding_on(RSA *, BN_CTX *); -void RSA_blinding_off(RSA *); int RSA_public_encrypt(int, const unsigned char *, unsigned char *, RSA *, int); int RSA_private_encrypt(int, const unsigned char *, unsigned char *, @@ -42,14 +39,6 @@ int RSA_private_decrypt(int, const unsigned char *, unsigned char *, RSA *, int); int RSA_print(BIO *, const RSA *, int); -int RSA_verify_PKCS1_PSS(RSA *, const unsigned char *, const EVP_MD *, - const unsigned char *, int); -int RSA_padding_add_PKCS1_PSS(RSA *, unsigned char *, const unsigned char *, - const EVP_MD *, int); -int RSA_padding_add_PKCS1_OAEP(unsigned char *, int, const unsigned char *, - int, const unsigned char *, int); -int RSA_padding_check_PKCS1_OAEP(unsigned char *, int, const unsigned char *, - int, int, const unsigned char *, int); /* added in 1.1.0 when the RSA struct was opaqued */ int RSA_set0_key(RSA *, BIGNUM *, BIGNUM *, BIGNUM *); From 50bad375f5dd3fbb7c7ea62896e2538dc5734be6 Mon Sep 17 00:00:00 2001 From: Eric Brown Date: Mon, 14 May 2018 20:47:57 -0700 Subject: [PATCH 241/988] Future proofing use of the six python version constants (#4238) * Future proofing use of the six python version constants After reading [1], noticed that cryptography uses a lot of if six.PY3 blocks. The issue with this is that whenever Python 4 is released, this code in the else block will be executed even though it was only intended for Python 2. [1] http://astrofrog.github.io/blog/2016/01/12/stop-writing-python-4-incompatible-code/ Signed-off-by: Eric Brown * Use not PY2 instead --- .../hazmat/backends/openssl/backend.py | 4 +- tests/x509/test_x509.py | 6 +-- tests/x509/test_x509_ext.py | 44 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 0b7550e5e28e..af14bfaaec0e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -298,7 +298,7 @@ def _consume_errors(self): def _bn_to_int(self, bn): assert bn != self._ffi.NULL - if six.PY3: + if not six.PY2: # Python 3 has constant time from_bytes, so use that. bn_num_bytes = self._lib.BN_num_bytes(bn) bin_ptr = self._ffi.new("unsigned char[]", bn_num_bytes) @@ -326,7 +326,7 @@ def _int_to_bn(self, num, bn=None): if bn is None: bn = self._ffi.NULL - if six.PY3: + if not six.PY2: # Python 3 has constant time to_bytes, so use that. binary = num.to_bytes(int(num.bit_length() / 8.0 + 1), "big") diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 720db78eef4b..335a0fbf520f 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1097,7 +1097,7 @@ def test_certificate_repr(self, backend): x509.load_pem_x509_certificate, backend ) - if six.PY3: + if not six.PY2: assert repr(cert) == ( ", value='GT487" @@ -3864,7 +3864,7 @@ def test_ne(self): def test_repr(self): na = x509.NameAttribute(x509.ObjectIdentifier('2.5.4.3'), u'value') - if six.PY3: + if not six.PY2: assert repr(na) == ( ", value='value')>" @@ -4059,7 +4059,7 @@ def test_repr(self): x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), ]) - if six.PY3: + if not six.PY2: assert repr(name) == ( ", value='cryptography.io')>, , value=b'\\x03\\x02\\x01')>" @@ -267,7 +267,7 @@ def test_ne(self): def test_repr(self): ci = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) - if six.PY3: + if not six.PY2: assert repr(ci) == ( "])>)>" @@ -403,7 +403,7 @@ def test_iter_input(self): def test_repr(self): nr = x509.NoticeReference(u"org", [1, 3, 4]) - if six.PY3: + if not six.PY2: assert repr(nr) == ( "" @@ -447,7 +447,7 @@ def test_notice_reference_none(self): def test_repr(self): un = x509.UserNotice(x509.NoticeReference(u"org", [1]), u"text") - if six.PY3: + if not six.PY2: assert repr(un) == ( ", explicit_text='text')>" @@ -513,7 +513,7 @@ def test_iter_input(self): def test_repr(self): pq = [u"string", x509.UserNotice(None, u"hi")] pi = x509.PolicyInformation(x509.ObjectIdentifier("1.2.3"), pq) - if six.PY3: + if not six.PY2: assert repr(pi) == ( ", policy_qualifiers=['string', , policy_qualifi" @@ -1003,7 +1003,7 @@ def test_repr(self): binascii.unhexlify(b"092384932230498bc980aa8098456f6ff7ff3ac9") ) ext = x509.Extension(ExtensionOID.SUBJECT_KEY_IDENTIFIER, False, ski) - if six.PY3: + if not six.PY2: assert repr(ext) == ( ", critical=False, value=, value='value1')>])>)>" @@ -1756,7 +1756,7 @@ def test_hash(self): class TestRFC822Name(object): def test_repr(self): gn = x509.RFC822Name(u"string") - if six.PY3: + if not six.PY2: assert repr(gn) == "" else: assert repr(gn) == "" @@ -1868,7 +1868,7 @@ def test_hash(self): def test_repr(self): gn = x509.UniformResourceIdentifier(u"string") - if six.PY3: + if not six.PY2: assert repr(gn) == ( "" ) @@ -1962,7 +1962,7 @@ def test_invalid_args(self): def test_repr(self): gn = x509.OtherName(x509.ObjectIdentifier("1.2.3.4"), b"derdata") - if six.PY3: + if not six.PY2: assert repr(gn) == ( ", value=b'derdata')>" @@ -1974,7 +1974,7 @@ def test_repr(self): ) gn = x509.OtherName(x509.ObjectIdentifier("2.5.4.65"), b"derdata") - if six.PY3: + if not six.PY2: assert repr(gn) == ( ", value=b'derdata')>" @@ -2058,7 +2058,7 @@ def test_repr(self): x509.DNSName(u"cryptography.io") ] ) - if six.PY3: + if not six.PY2: assert repr(gns) == ( "])>" ) @@ -2136,7 +2136,7 @@ def test_repr(self): x509.DNSName(u"cryptography.io") ] ) - if six.PY3: + if not six.PY2: assert repr(san) == ( "])>)>" @@ -2261,7 +2261,7 @@ def test_repr(self): x509.DNSName(u"cryptography.io") ] ) - if six.PY3: + if not six.PY2: assert repr(san) == ( "])>)>" @@ -2665,7 +2665,7 @@ def test_repr(self): AuthorityInformationAccessOID.OCSP, x509.UniformResourceIdentifier(u"http://ocsp.domain.com") ) - if six.PY3: + if not six.PY2: assert repr(ad) == ( ", access_location=, acces" @@ -3266,7 +3266,7 @@ def test_repr(self): permitted_subtrees=permitted, excluded_subtrees=None ) - if six.PY3: + if not six.PY2: assert repr(nc) == ( ", ], relative" @@ -3947,7 +3947,7 @@ def test_repr(self): None ), ]) - if six.PY3: + if not six.PY2: assert repr(cdp) == ( "], relative" From 7e8ce14b820cffb7fa03bdba0890b2df95e76a2e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 15 May 2018 11:23:21 -0400 Subject: [PATCH 242/988] Remove macOS travis stuff, we don't intend to reenable it (#4244) --- .travis.yml | 40 --------------------- .travis/install.sh | 88 ++++++++++------------------------------------ .travis/run.sh | 35 +++++------------- 3 files changed, 27 insertions(+), 136 deletions(-) diff --git a/.travis.yml b/.travis.yml index ef51e7bab692..5fa92db1c6d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,46 +47,6 @@ matrix: env: TOXENV=pep8 - python: 3.4 env: TOXENV=py3pep8 - # - language: generic - # os: osx - # # 8.3 is macOS 10.12.x - # # see: https://docs.travis-ci.com/user/osx-ci-environment/ - # osx_image: xcode8.3 - # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - # - language: generic - # os: osx - # osx_image: xcode8.3 - # env: TOXENV=py34 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - # - language: generic - # os: osx - # osx_image: xcode8.3 - # env: TOXENV=py35 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - # - language: generic - # os: osx - # osx_image: xcode8.3 - # env: TOXENV=py36 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - # - language: generic - # os: osx - # osx_image: xcode8.3 - # env: TOXENV=pypy-nocoverage CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 PYPY_VERSION=pypy2.7-5.8.0 - # - language: generic - # os: osx - # osx_image: xcode8.3 - # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=0 - # - language: generic - # os: osx - # # 7.3 is OS X 10.11.x - # osx_image: xcode7.3 - # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - # - language: generic - # os: osx - # # 6.4 is OS X 10.10.x - # osx_image: xcode6.4 - # env: TOXENV=py27 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 - # - language: generic - # os: osx - # osx_image: xcode8.3 - # env: TOXENV=docs CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 install: - ./.travis/install.sh diff --git a/.travis/install.sh b/.travis/install.sh index 6090e07696da..dbc03a06b174 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -3,78 +3,26 @@ set -e set -x -if [[ "$(uname -s)" == 'Darwin' ]]; then - sw_vers - brew update || brew update - - brew outdated openssl || brew upgrade openssl - brew install openssl@1.1 - - # install pyenv - git clone --depth 1 https://github.com/pyenv/pyenv ~/.pyenv - PYENV_ROOT="$HOME/.pyenv" - PATH="$PYENV_ROOT/bin:$PATH" - eval "$(pyenv init -)" - - case "${TOXENV}" in - py27) - curl -O https://bootstrap.pypa.io/get-pip.py - python get-pip.py --user - ;; - py33) - pyenv install 3.3.6 - pyenv global 3.3.6 - ;; - py34) - pyenv install 3.4.6 - pyenv global 3.4.6 - ;; - py35) - pyenv install 3.5.3 - pyenv global 3.5.3 - ;; - py36) - pyenv install 3.6.1 - pyenv global 3.6.1 - ;; - pypy*) - pyenv install "$PYPY_VERSION" - pyenv global "$PYPY_VERSION" - ;; - pypy3) - pyenv install pypy3-2.4.0 - pyenv global pypy3-2.4.0 - ;; - docs) - brew install enchant - curl -O https://bootstrap.pypa.io/get-pip.py - python get-pip.py --user - ;; - esac - pyenv rehash - python -m pip install --user virtualenv -else - # download, compile, and install if it's not already present via travis - # cache - if [ -n "${OPENSSL}" ]; then - OPENSSL_DIR="ossl-1/${OPENSSL}" - if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then - curl -O https://www.openssl.org/source/openssl-$OPENSSL.tar.gz - tar zxf openssl-$OPENSSL.tar.gz - cd openssl-$OPENSSL - ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" - # modify the shlib version to a unique one to make sure the dynamic - # linker doesn't load the system one. This isn't required for 1.1.0 at the - # moment since our Travis builders have a diff shlib version, but it doesn't hurt - sed -i "s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=100/" Makefile - sed -i "s/^SHLIB_MINOR=.*/SHLIB_MINOR=0.0/" Makefile - sed -i "s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=100.0.0/" Makefile - make depend - make install - fi +# download, compile, and install if it's not already present via travis +# cache +if [ -n "${OPENSSL}" ]; then + OPENSSL_DIR="ossl-1/${OPENSSL}" + if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then + curl -O https://www.openssl.org/source/openssl-$OPENSSL.tar.gz + tar zxf openssl-$OPENSSL.tar.gz + cd openssl-$OPENSSL + ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" + # modify the shlib version to a unique one to make sure the dynamic + # linker doesn't load the system one. This isn't required for 1.1.0 at the + # moment since our Travis builders have a diff shlib version, but it doesn't hurt + sed -i "s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=100/" Makefile + sed -i "s/^SHLIB_MINOR=.*/SHLIB_MINOR=0.0/" Makefile + sed -i "s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=100.0.0/" Makefile + make depend + make install fi - pip install virtualenv fi +pip install virtualenv python -m virtualenv ~/.venv source ~/.venv/bin/activate diff --git a/.travis/run.sh b/.travis/run.sh index 1e2ba71b3b6c..c190372da00a 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -3,36 +3,19 @@ set -e set -x -if [[ "$(uname -s)" == "Darwin" ]]; then - # initialize our pyenv +if [[ "${TOXENV}" == "pypy" ]]; then PYENV_ROOT="$HOME/.pyenv" PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" +fi +if [ -n "${OPENSSL}" ]; then + OPENSSL_DIR="ossl-1/${OPENSSL}" - # set our flags to use homebrew openssl - # if the build is static we need different LDFLAGS - if [[ "${CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS}" == "1" ]]; then - export LDFLAGS="/usr/local/opt/openssl\@1.1/lib/libssl.a /usr/local/opt/openssl\@1.1/lib/libcrypto.a" - export CFLAGS="-I/usr/local/opt/openssl\@1.1/include" - else - # Compile the dynamic link build against 1.0.2 because the linker refuses to properly load 1.1.0 - export LDFLAGS="-L/usr/local/opt/openssl/lib" - export CFLAGS="-I/usr/local/opt/openssl/include" - fi -else - if [[ "${TOXENV}" == "pypy" ]]; then - PYENV_ROOT="$HOME/.pyenv" - PATH="$PYENV_ROOT/bin:$PATH" - eval "$(pyenv init -)" - fi - if [ -n "${OPENSSL}" ]; then - OPENSSL_DIR="ossl-1/${OPENSSL}" - - export PATH="$HOME/$OPENSSL_DIR/bin:$PATH" - export CFLAGS="-I$HOME/$OPENSSL_DIR/include" - # rpath on linux will cause it to use an absolute path so we don't need to do LD_LIBRARY_PATH - export LDFLAGS="-L$HOME/$OPENSSL_DIR/lib -Wl,-rpath=$HOME/$OPENSSL_DIR/lib" - fi + export PATH="$HOME/$OPENSSL_DIR/bin:$PATH" + export CFLAGS="-I$HOME/$OPENSSL_DIR/include" + # rpath on linux will cause it to use an absolute path so we don't need to do LD_LIBRARY_PATH + export LDFLAGS="-L$HOME/$OPENSSL_DIR/lib -Wl,-rpath=$HOME/$OPENSSL_DIR/lib" fi + source ~/.venv/bin/activate tox From e564aebd759090c35c374085931f3ada693dab1e Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Tue, 15 May 2018 18:12:51 -0400 Subject: [PATCH 243/988] Remove ECDSA_sign_setup and *sign_ex bindings. (#4245) They are unused. These functions have two purposes. They can be used to pass your own value of k, or to amoritize the cost of generating k. Messing up k is catastrophic to ECDSA, so best not to expose that one. ECDSA signing is also quite fast, so there isn't much point in the latter. (The API comes from DSA, which is a bit slower.) Moreover, ECDSA_sign is not the same as ECDSA_sign_setup + ECDSA_sign_ex. OpenSSL has some nonce hardening features that have to get skipped when doing this. --- src/_cffi_src/openssl/ecdsa.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/_cffi_src/openssl/ecdsa.py b/src/_cffi_src/openssl/ecdsa.py index 785013376906..44a778a68690 100644 --- a/src/_cffi_src/openssl/ecdsa.py +++ b/src/_cffi_src/openssl/ecdsa.py @@ -24,14 +24,9 @@ int i2d_ECDSA_SIG(const ECDSA_SIG *, unsigned char **); ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **s, const unsigned char **, long); ECDSA_SIG *ECDSA_do_sign(const unsigned char *, int, EC_KEY *); -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *, int, const BIGNUM *, - const BIGNUM *, EC_KEY *); int ECDSA_do_verify(const unsigned char *, int, const ECDSA_SIG *, EC_KEY *); -int ECDSA_sign_setup(EC_KEY *, BN_CTX *, BIGNUM **, BIGNUM **); int ECDSA_sign(int, const unsigned char *, int, unsigned char *, unsigned int *, EC_KEY *); -int ECDSA_sign_ex(int, const unsigned char *, int dgstlen, unsigned char *, - unsigned int *, const BIGNUM *, const BIGNUM *, EC_KEY *); int ECDSA_verify(int, const unsigned char *, int, const unsigned char *, int, EC_KEY *); int ECDSA_size(const EC_KEY *); From 18370510b5ea1cfeec514b7662b61ac7ebfb33d5 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Tue, 15 May 2018 21:32:05 -0400 Subject: [PATCH 244/988] Cleanup unused err bindings. (#4246) This removes: - ERR_get_state which really shouldn't be public API. - A bunch of functions that are really mostly useful within the library to add new errors. NB: I say mostly because they are also useful when trying to register a new error library, as osrandom does, but osrandom is written in C. Python code is more likely to be consuming errors. - All function codes but EVP_F_EVP_ENCRYPTFINAL_EX because tests still reference it. Per PR #3609, function codes are kind of unstable. This finishes that up and cleans up the bindings. - The "line" versions of querying the error queue, just because no one seems to be using them and there's a lot. - Error-printing functions, which make less sense in Python since you'd probably wrap in an exception. Error codes probably could also do with cleaning, but I've left them alone for now. --- src/_cffi_src/openssl/err.py | 106 ----------------------------------- 1 file changed, 106 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 57704295775b..446cd78ad43f 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -12,13 +12,6 @@ static const int Cryptography_HAS_EC_CODES; static const int Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR; -struct ERR_string_data_st { - unsigned long error; - const char *string; -}; -typedef struct ERR_string_data_st ERR_STRING_DATA; -typedef ... ERR_STATE; - static const int ERR_LIB_DH; static const int ERR_LIB_EVP; static const int ERR_LIB_EC; @@ -29,36 +22,6 @@ static const int ERR_LIB_SSL; static const int ERR_LIB_X509; -static const int ASN1_F_ASN1_EX_C2I; -static const int ASN1_F_ASN1_FIND_END; -static const int ASN1_F_ASN1_GENERATE_V3; -static const int ASN1_F_ASN1_GET_OBJECT; -static const int ASN1_F_ASN1_ITEM_I2D_FP; -static const int ASN1_F_ASN1_ITEM_PACK; -static const int ASN1_F_ASN1_ITEM_SIGN; -static const int ASN1_F_ASN1_ITEM_UNPACK; -static const int ASN1_F_ASN1_ITEM_VERIFY; -static const int ASN1_F_ASN1_MBSTRING_NCOPY; -static const int ASN1_F_ASN1_TEMPLATE_EX_D2I; -static const int ASN1_F_ASN1_TEMPLATE_NEW; -static const int ASN1_F_ASN1_TEMPLATE_NOEXP_D2I; -static const int ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING; -static const int ASN1_F_ASN1_TYPE_GET_OCTETSTRING; -static const int ASN1_F_ASN1_VERIFY; -static const int ASN1_F_BITSTR_CB; -static const int ASN1_F_D2I_ASN1_UINTEGER; -static const int ASN1_F_D2I_PRIVATEKEY; -static const int ASN1_F_I2D_DSA_PUBKEY; -static const int ASN1_F_LONG_C2I; -static const int ASN1_F_OID_MODULE_INIT; -static const int ASN1_F_PARSE_TAGGING; -static const int ASN1_F_PKCS5_PBE_SET; -static const int ASN1_F_B64_READ_ASN1; -static const int ASN1_F_B64_WRITE_ASN1; -static const int ASN1_F_SMIME_READ_ASN1; -static const int ASN1_F_SMIME_TEXT; -static const int ASN1_F_ASN1_CHECK_TLEN; - static const int ASN1_R_BOOLEAN_IS_WRONG_LENGTH; static const int ASN1_R_BUFFER_TOO_SMALL; static const int ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER; @@ -84,33 +47,9 @@ static const int ASN1_R_NO_MULTIPART_BOUNDARY; static const int ASN1_R_HEADER_TOO_LONG; -static const int DH_F_COMPUTE_KEY; - static const int DH_R_INVALID_PUBKEY; -static const int EVP_F_AES_INIT_KEY; -static const int EVP_F_EVP_CIPHER_CTX_CTRL; -static const int EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH; -static const int EVP_F_EVP_CIPHERINIT_EX; -static const int EVP_F_EVP_DECRYPTFINAL_EX; -static const int EVP_F_EVP_DIGESTINIT_EX; static const int EVP_F_EVP_ENCRYPTFINAL_EX; -static const int EVP_F_EVP_MD_CTX_COPY_EX; -static const int EVP_F_EVP_OPENINIT; -static const int EVP_F_EVP_PBE_ALG_ADD; -static const int EVP_F_EVP_PBE_CIPHERINIT; -static const int EVP_F_EVP_PKCS82PKEY; -static const int EVP_F_EVP_PKEY_COPY_PARAMETERS; -static const int EVP_F_EVP_PKEY_DECRYPT; -static const int EVP_F_EVP_PKEY_ENCRYPT; -static const int EVP_F_EVP_PKEY_NEW; -static const int EVP_F_EVP_SIGNFINAL; -static const int EVP_F_EVP_VERIFYFINAL; -static const int EVP_F_PKCS5_PBE_KEYIVGEN; -static const int EVP_F_PKCS5_V2_PBE_KEYIVGEN; -static const int EVP_F_RC2_MAGIC_TO_METH; -static const int EVP_F_RC5_CTRL; -static const int EVP_F_CAMELLIA_INIT_KEY; static const int EVP_R_AES_KEY_SETUP_FAILED; static const int EVP_R_BAD_DECRYPT; @@ -137,33 +76,8 @@ static const int EVP_R_WRONG_FINAL_BLOCK_LENGTH; static const int EVP_R_CAMELLIA_KEY_SETUP_FAILED; -static const int EC_F_EC_GROUP_NEW_BY_CURVE_NAME; - static const int EC_R_UNKNOWN_GROUP; -static const int PEM_F_D2I_PKCS8PRIVATEKEY_BIO; -static const int PEM_F_D2I_PKCS8PRIVATEKEY_FP; -static const int PEM_F_DO_PK8PKEY; -static const int PEM_F_DO_PK8PKEY_FP; -static const int PEM_F_LOAD_IV; -static const int PEM_F_PEM_ASN1_READ; -static const int PEM_F_PEM_ASN1_READ_BIO; -static const int PEM_F_PEM_ASN1_WRITE; -static const int PEM_F_PEM_ASN1_WRITE_BIO; -static const int PEM_F_PEM_DEF_CALLBACK; -static const int PEM_F_PEM_DO_HEADER; -static const int PEM_F_PEM_GET_EVP_CIPHER_INFO; -static const int PEM_F_PEM_READ; -static const int PEM_F_PEM_READ_BIO; -static const int PEM_F_PEM_READ_BIO_PRIVATEKEY; -static const int PEM_F_PEM_READ_PRIVATEKEY; -static const int PEM_F_PEM_SIGNFINAL; -static const int PEM_F_PEM_WRITE; -static const int PEM_F_PEM_WRITE_BIO; -static const int PEM_F_PEM_X509_INFO_READ; -static const int PEM_F_PEM_X509_INFO_READ_BIO; -static const int PEM_F_PEM_X509_INFO_WRITE_BIO; - static const int PEM_R_BAD_BASE64_DECODE; static const int PEM_R_BAD_DECRYPT; static const int PEM_R_BAD_END_LINE; @@ -180,8 +94,6 @@ static const int PEM_R_UNSUPPORTED_CIPHER; static const int PEM_R_UNSUPPORTED_ENCRYPTION; -static const int PKCS12_F_PKCS12_PBE_CRYPT; - static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR; static const int RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE; @@ -191,7 +103,6 @@ static const int RSA_R_BLOCK_TYPE_IS_NOT_02; static const int RSA_R_PKCS_DECODING_ERROR; static const int RSA_R_OAEP_DECODING_ERROR; -static const int RSA_F_RSA_SIGN; static const int SSL_TLSEXT_ERR_OK; static const int SSL_TLSEXT_ERR_ALERT_WARNING; @@ -235,29 +146,12 @@ const char *ERR_lib_error_string(unsigned long); const char *ERR_func_error_string(unsigned long); const char *ERR_reason_error_string(unsigned long); -void ERR_print_errors(BIO *); -void ERR_print_errors_fp(FILE *); unsigned long ERR_get_error(void); unsigned long ERR_peek_error(void); unsigned long ERR_peek_last_error(void); -unsigned long ERR_get_error_line(const char **, int *); -unsigned long ERR_peek_error_line(const char **, int *); -unsigned long ERR_peek_last_error_line(const char **, int *); -unsigned long ERR_get_error_line_data(const char **, int *, - const char **, int *); void ERR_clear_error(void); -unsigned long ERR_peek_error_line_data(const char **, - int *, const char **, int *); -unsigned long ERR_peek_last_error_line_data(const char **, - int *, const char **, int *); void ERR_put_error(int, int, int, const char *, int); -void ERR_add_error_data(int, ...); -int ERR_get_next_error_library(void); -ERR_STATE *ERR_get_state(void); -/* ERR_free_strings became a macro in 1.1.0 */ -void ERR_free_strings(void); -unsigned long ERR_PACK(int, int, int); int ERR_GET_LIB(unsigned long); int ERR_GET_FUNC(unsigned long); int ERR_GET_REASON(unsigned long); From 5f2155df08b01efd90fc144192eefddec251a3fd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 16 May 2018 10:06:42 -0400 Subject: [PATCH 245/988] satisfy shellcheck (#4247) --- .travis/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis/install.sh b/.travis/install.sh index dbc03a06b174..6698b5c9e53d 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -8,9 +8,9 @@ set -x if [ -n "${OPENSSL}" ]; then OPENSSL_DIR="ossl-1/${OPENSSL}" if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then - curl -O https://www.openssl.org/source/openssl-$OPENSSL.tar.gz - tar zxf openssl-$OPENSSL.tar.gz - cd openssl-$OPENSSL + curl -O "https://www.openssl.org/source/openssl-${OPENSSL}.tar.gz" + tar zxf "openssl-${OPENSSL}.tar.gz" + cd "openssl-${OPENSSL}" ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" # modify the shlib version to a unique one to make sure the dynamic # linker doesn't load the system one. This isn't required for 1.1.0 at the From b6cfb331db882a0c2a2d66714e2bd653716959f9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 16 May 2018 10:27:07 -0400 Subject: [PATCH 246/988] Only send coverage for tox builds, in prep for #4228 (#4248) --- .travis/upload_coverage.sh | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index 5790e954cd36..e960907ed8a4 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -3,13 +3,15 @@ set -e set -x -case "${TOXENV}" in - pypy-nocoverage);; - pep8);; - py3pep8);; - docs);; - *) - source ~/.venv/bin/activate - codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL - ;; -esac +if [ -n "${TOXENV}" ]; then + case "${TOXENV}" in + pypy-nocoverage);; + pep8);; + py3pep8);; + docs);; + *) + source ~/.venv/bin/activate + codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL + ;; + esac +fi From 20b57be8d8068c2cd05cd3917e4e99b8a36debe0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 16 May 2018 10:42:10 -0400 Subject: [PATCH 247/988] remove block size as a required part of HashAlgorithm (#4249) Internal block size isn't a particularly useful piece of information and constructions like SHA3 make it even harder to determine what that really means. Accordingly, we're removing it from the interface (but leaving it on all existing hashes) --- docs/hazmat/primitives/cryptographic-hashes.rst | 6 ------ src/cryptography/hazmat/primitives/hashes.py | 6 ------ 2 files changed, 12 deletions(-) diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index 021e433d700a..a73785d476dd 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -183,12 +183,6 @@ Interfaces The size of the resulting digest in bytes. - .. attribute:: block_size - - :type: int - - The internal block size of the hash algorithm in bytes. - .. class:: HashContext diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 1764e9cedb46..3f3aadd6f91c 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -29,12 +29,6 @@ def digest_size(self): The size of the resulting digest in bytes. """ - @abc.abstractproperty - def block_size(self): - """ - The internal block size of the hash algorithm in bytes. - """ - @six.add_metaclass(abc.ABCMeta) class HashContext(object): From 2c9411552d92a1365e9609c98dca2d9910f601f3 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 16 May 2018 21:33:34 -0400 Subject: [PATCH 248/988] Fixes #4228 -- move downstream builders to travis (#4250) * Fixes #4228 -- move downstream builders to travis * Use upstream twisted now that we've confirmed the problem --- .travis.yml | 15 ++++++ .travis/run.sh | 63 +++++++++++++++++++++++- Jenkinsfile | 130 ------------------------------------------------- 3 files changed, 76 insertions(+), 132 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5fa92db1c6d0..cbbff3b6243e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,6 +48,21 @@ matrix: - python: 3.4 env: TOXENV=py3pep8 + - python: 2.7 + env: DOWNSTREAM=pyopenssl + - python: 2.7 + env: DOWNSTREAM=twisted + - python: 2.7 + env: DOWNSTREAM=paramiko + - python: 2.7 + env: DOWNSTREAM=aws-encryption-sdk + - python: 2.7 + env: DOWNSTREAM=certbot + - python: 2.7 + env: DOWNSTREAM=certbot-josepy + - python: 2.7 + env: DOWNSTREAM=urllib3 + install: - ./.travis/install.sh diff --git a/.travis/run.sh b/.travis/run.sh index c190372da00a..ed2372530eb8 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -13,9 +13,68 @@ if [ -n "${OPENSSL}" ]; then export PATH="$HOME/$OPENSSL_DIR/bin:$PATH" export CFLAGS="-I$HOME/$OPENSSL_DIR/include" - # rpath on linux will cause it to use an absolute path so we don't need to do LD_LIBRARY_PATH + # rpath on linux will cause it to use an absolute path so we don't need to + # do LD_LIBRARY_PATH export LDFLAGS="-L$HOME/$OPENSSL_DIR/lib -Wl,-rpath=$HOME/$OPENSSL_DIR/lib" fi source ~/.venv/bin/activate -tox + +if [ -n "${TOXENV}" ]; then + tox +else + pip install . + case "${DOWNSTREAM}" in + pyopenssl) + git clone --depth=1 https://github.com/pyca/pyopenssl + cd pyopenssl + pip install -e ".[test]" + pytest tests + ;; + twisted) + git clone --depth=1 https://github.com/twisted/twisted + cd twisted + pip install -e .[tls,conch,http2] + python -m twisted.trial src/twisted + ;; + paramiko) + git clone --depth=1 https://github.com/paramiko/paramiko + cd paramiko + pip install -e . + pip install -r dev-requirements.txt + inv test + ;; + aws-encryption-sdk) + git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python + cd aws-encryption-sdk-python + pip install -r test/requirements.txt + pip install -e . + pytest -m local -l + ;; + certbot) + git clone --depth=1 https://github.com/certbot/certbot + cd certbot + pip install pytest pytest-mock mock + pip install -e acme + pip install -e . + pytest certbot/tests + pytest acme + ;; + certbot-josepy) + git clone --depth=1 https://github.com/certbot/josepy + cd josepy + pip install -e ".[tests]" + pytest src + ;; + urllib3) + git clone --depth 1 https://github.com/shazow/urllib3 + cd urllib3 + pip install -r ./dev-requirements.txt + pip install -e ".[socks]" + pytest test + ;; + *) + exit 1 + ;; + esac +fi diff --git a/Jenkinsfile b/Jenkinsfile index ca49527caa1a..44e9ab9b275c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -103,114 +103,6 @@ if (env.BRANCH_NAME == "master") { ) } -def downstreams = [ - [ - downstreamName: 'pyOpenSSL', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth=1 https://github.com/pyca/pyopenssl - cd pyopenssl - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install -e .[test] - pytest tests - """ - ], - [ - downstreamName: 'Twisted', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth=1 https://github.com/twisted/twisted - cd twisted - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install pyopenssl service_identity pycrypto - pip install -e . - python -m twisted.trial src/twisted - """ - ], - [ - downstreamName: 'paramiko', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth=1 https://github.com/paramiko/paramiko - cd paramiko - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install -e . - pip install -r dev-requirements.txt - inv test - """ - ], - [ - downstreamName: 'aws-encryption-sdk', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python - cd aws-encryption-sdk-python - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install -r test/requirements.txt - pip install -e . - pytest -m local -l - """ - ], - [ - downstreamName: 'certbot', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth=1 https://github.com/certbot/certbot - cd certbot - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install pytest pytest-mock mock - pip install -e acme - pip install -e . - pytest certbot/tests - pytest acme - """ - ], - [ - downstreamName: 'certbot-josepy', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth=1 https://github.com/certbot/josepy - cd josepy - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install -e .[tests] - pytest src - """ - ], - [ - downstreamName: 'urllib3', - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - script: """#!/bin/bash -xe - git clone --depth 1 https://github.com/shazow/urllib3 - cd urllib3 - virtualenv .venv - source .venv/bin/activate - pip install ../cryptography - pip install -r ./dev-requirements.txt - pip install -e .[socks] - pytest test - """ - ], -] - def checkout_git(label) { retry(3) { def script = "" @@ -423,26 +315,4 @@ builders["setup.py-test"] = { } } -for (downstream in downstreams) { - def downstreamName = downstream["downstreamName"] - def imageName = downstream["imageName"] - def label = downstream["label"] - def script = downstream["script"] - builders[downstreamName] = { - node(label) { - docker.image(imageName).inside { - try { - timeout(time: 30, unit: 'MINUTES') { - checkout_git(label) - sh script - } - } finally { - deleteDir() - } - } - } - } -} - parallel builders - From 488c04830c9dbc876d1a344ea51015ad6a19dd1c Mon Sep 17 00:00:00 2001 From: Thom Dixon Date: Fri, 18 May 2018 03:55:29 -0700 Subject: [PATCH 249/988] Make AuthorityKeyIdentifier docs reflect reality (#4252) The `AuthorityKeyIdentifier.authority_cert_issuer` docs state that it returns a `Name` instance, but it [actually returns a list of `GeneralName` instances or `None`](https://github.com/pyca/cryptography/blob/master/src/cryptography/x509/extensions.py#L157). --- docs/x509/reference.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 279c4c741954..7a41e1f31d11 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1713,7 +1713,7 @@ X.509 Extensions .. attribute:: authority_cert_issuer - :type: :class:`Name` or None + :type: A list of :class:`GeneralName` instances or None The :class:`Name` of the issuer's issuer. From 8ac485d881884764574c60a3c54c7f94308f222e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 21 May 2018 19:07:53 +0800 Subject: [PATCH 250/988] build and test libre on travis (#4256) * build and test libre on travis * remove libressl jenkinsfile data --- .travis.yml | 4 ++++ .travis/install.sh | 25 +++++++++++++++++++------ .travis/run.sh | 3 +++ Jenkinsfile | 19 +------------------ 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/.travis.yml b/.travis.yml index cbbff3b6243e..9b60e644d4b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,6 +37,10 @@ matrix: env: TOXENV=py27 OPENSSL=1.1.0h - python: 3.5 env: TOXENV=py35 OPENSSL=1.1.0h + - python: 3.6 + env: TOXENV=py36 LIBRESSL=2.4.5 + - python: 3.6 + env: TOXENV=py36 LIBRESSL=2.6.4 - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0h addons: diff --git a/.travis/install.sh b/.travis/install.sh index 6698b5c9e53d..2858d25d8e1b 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -3,6 +3,14 @@ set -e set -x +shlib_sed() { + # modify the shlib version to a unique one to make sure the dynamic + # linker doesn't load the system one. + sed -i "s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=100/" Makefile + sed -i "s/^SHLIB_MINOR=.*/SHLIB_MINOR=0.0/" Makefile + sed -i "s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=100.0.0/" Makefile +} + # download, compile, and install if it's not already present via travis # cache if [ -n "${OPENSSL}" ]; then @@ -12,15 +20,20 @@ if [ -n "${OPENSSL}" ]; then tar zxf "openssl-${OPENSSL}.tar.gz" cd "openssl-${OPENSSL}" ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" - # modify the shlib version to a unique one to make sure the dynamic - # linker doesn't load the system one. This isn't required for 1.1.0 at the - # moment since our Travis builders have a diff shlib version, but it doesn't hurt - sed -i "s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=100/" Makefile - sed -i "s/^SHLIB_MINOR=.*/SHLIB_MINOR=0.0/" Makefile - sed -i "s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=100.0.0/" Makefile + shlib_sed make depend make install fi +elif [ -n "${LIBRESSL}" ]; then + LIBRESSL_DIR="ossl-1/${LIBRESSL}" + if [[ ! -f "$HOME/$LIBRESSL_DIR/bin/openssl" ]]; then + curl -O "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL}.tar.gz" + tar zxf "libressl-${LIBRESSL}.tar.gz" + cd "libressl-${LIBRESSL}" + ./config -Wl -Wl,-Bsymbolic-functions -fPIC shared --prefix="$HOME/$LIBRESSL_DIR" + shlib_sed + make -j"$(nproc)" install + fi fi pip install virtualenv diff --git a/.travis/run.sh b/.travis/run.sh index ed2372530eb8..19f8c4838a2b 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -8,6 +8,9 @@ if [[ "${TOXENV}" == "pypy" ]]; then PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" fi +if [ -n "${LIBRESSL}" ]; then + OPENSSL=$LIBRESSL +fi if [ -n "${OPENSSL}" ]; then OPENSSL_DIR="ossl-1/${OPENSSL}" diff --git a/Jenkinsfile b/Jenkinsfile index 44e9ab9b275c..33bce2d2f3e9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -53,16 +53,6 @@ def configs = [ imageName: 'pyca/cryptography-runner-sid', toxenvs: ['py27', 'py36'], ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-jessie-libressl:2.4.5', - toxenvs: ['py27'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-jessie-libressl:2.6.4', - toxenvs: ['py27'], - ], [ label: 'docker', imageName: 'pyca/cryptography-runner-ubuntu-xenial', @@ -227,14 +217,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { sh """#!/usr/bin/env bash set -xe cd cryptography - if [[ "\${IMAGE_NAME}" == *"libressl"* ]]; then - LD_LIBRARY_PATH="/usr/local/libressl/lib:\$LD_LIBRARY_PATH" \ - LDFLAGS="-L/usr/local/libressl/lib" \ - CFLAGS="-I/usr/local/libressl/include" \ - tox -r -- --color=yes - else - tox -r -- --color=yes - fi + tox -r -- --color=yes virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini From 0a22d486ec9175926aed29a5f4ea963843ebccfa Mon Sep 17 00:00:00 2001 From: dumol Date: Tue, 22 May 2018 15:19:02 +0300 Subject: [PATCH 251/988] Fixed build errors on HP-UX. (#4259) * Fixed build errors on HP-UX. * PEP 8 style fix. * No return for void function. * PEP 8 style fix, take 2. --- src/_cffi_src/build_openssl.py | 2 +- src/_cffi_src/openssl/crypto.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 6b15fe4a4c84..180cb7793ca6 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -46,7 +46,7 @@ def _extra_compile_args(platform): When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 we can revisit this. """ - if platform != "win32": + if platform not in ["win32", "hp-ux11"]: return ["-Wconversion", "-Wno-error=sign-conversion"] else: return [] diff --git a/src/_cffi_src/openssl/crypto.py b/src/_cffi_src/openssl/crypto.py index dfff21bb766d..449fff5e6f12 100644 --- a/src/_cffi_src/openssl/crypto.py +++ b/src/_cffi_src/openssl/crypto.py @@ -143,6 +143,6 @@ } void Cryptography_free_wrapper(void *ptr, const char *path, int line) { - return free(ptr); + free(ptr); } """ From afdbfb13780fb78e7b277b9de07e7636ba9c5119 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 25 May 2018 05:45:25 +0800 Subject: [PATCH 252/988] deprecate pythons without hmac.compare_digest (#4261) * deprecate the constant time bytes comparison path old python 2.7.x uses * pep8 --- CHANGELOG.rst | 3 +++ src/cryptography/hazmat/primitives/constant_time.py | 9 +++++++++ src/cryptography/utils.py | 1 + 3 files changed, 13 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4cabaf7f4213..9a3e5b880755 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,9 @@ Changelog * Added :meth:`~cryptography.fernet.Fernet.extract_timestamp` to get the authenticated timestamp of a :doc:`Fernet ` token. +* Support for Python 2.7.x without ``hmac.compare_digest`` has been deprecated. + We will require Python 2.7.7 or higher (or 2.7.6 on Ubuntu) in the next + ``cryptography`` release. .. _v2-2-2: diff --git a/src/cryptography/hazmat/primitives/constant_time.py b/src/cryptography/hazmat/primitives/constant_time.py index 5a682ca9f540..0e987ea75864 100644 --- a/src/cryptography/hazmat/primitives/constant_time.py +++ b/src/cryptography/hazmat/primitives/constant_time.py @@ -5,7 +5,9 @@ from __future__ import absolute_import, division, print_function import hmac +import warnings +from cryptography import utils from cryptography.hazmat.bindings._constant_time import lib @@ -17,6 +19,13 @@ def bytes_eq(a, b): return hmac.compare_digest(a, b) else: + warnings.warn( + "Support for your Python version is deprecated. The next version of " + "cryptography will remove support. Please upgrade to a 2.7.x " + "release that supports hmac.compare_digest as soon as possible.", + utils.DeprecatedIn23, + ) + def bytes_eq(a, b): if not isinstance(a, bytes) or not isinstance(b, bytes): raise TypeError("a and b must be bytes.") diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 14909c66bb6e..3d45a77131a3 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -22,6 +22,7 @@ class CryptographyDeprecationWarning(UserWarning): # cycle ends. PersistentlyDeprecated = CryptographyDeprecationWarning DeprecatedIn21 = CryptographyDeprecationWarning +DeprecatedIn23 = CryptographyDeprecationWarning def _check_bytes(name, value): From 830a172072f5fef8d4b1636d251e098bfd269d96 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 30 May 2018 21:55:40 +0800 Subject: [PATCH 253/988] parametrize a few things in test_ec (#4268) --- tests/hazmat/primitives/test_ec.py | 43 +++++++++--------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 59e4c9955f5a..5c3da5b62e26 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -142,43 +142,26 @@ def test_ec_numbers(): assert numbers.public_numbers.y == 3 assert isinstance(numbers.public_numbers.curve, DummyCurve) - with pytest.raises(TypeError): - ec.EllipticCurvePrivateNumbers( - None, - ec.EllipticCurvePublicNumbers( - 2, 3, DummyCurve() - ) - ) - - with pytest.raises(TypeError): - ec.EllipticCurvePrivateNumbers( - 1, - ec.EllipticCurvePublicNumbers( - None, 3, DummyCurve() - ) - ) +@pytest.mark.parametrize( + ("private_value", "x", "y", "curve"), + [ + (None, 2, 3, DummyCurve()), + (1, None, 3, DummyCurve()), + (1, 2, None, DummyCurve()), + (1, 2, 3, None), + ] +) +def test_invalid_ec_numbers_args(private_value, x, y, curve): with pytest.raises(TypeError): ec.EllipticCurvePrivateNumbers( - 1, - ec.EllipticCurvePublicNumbers( - 2, None, DummyCurve() - ) + private_value, ec.EllipticCurvePublicNumbers(x, y, curve) ) - with pytest.raises(TypeError): - ec.EllipticCurvePrivateNumbers( - 1, - ec.EllipticCurvePublicNumbers( - 2, 3, None - ) - ) +def test_invalid_private_numbers_public_numbers(): with pytest.raises(TypeError): - ec.EllipticCurvePrivateNumbers( - 1, - None - ) + ec.EllipticCurvePrivateNumbers(1, None) def test_encode_point(): From 015483830765fbdd01ce393bd1f02c9f72344a03 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 31 May 2018 04:00:30 +0800 Subject: [PATCH 254/988] simplify and parametrize DSA tests (#4267) --- tests/hazmat/primitives/test_dsa.py | 670 ++++++++++------------------ 1 file changed, 239 insertions(+), 431 deletions(-) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index d6cf2fd370a5..027d6558a81a 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -99,446 +99,254 @@ def test_generate_dsa_private_key_and_parameters(self, backend): skey_parameters.g, numbers.x, skey_parameters.p ) - def test_invalid_parameters_values(self, backend): - # Test a p < 1024 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=2 ** 1000, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ).parameters(backend) - - # Test a p < 2048 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=2 ** 2000, - q=DSA_KEY_2048.public_numbers.parameter_numbers.q, - g=DSA_KEY_2048.public_numbers.parameter_numbers.g, - ).parameters(backend) - - # Test a p < 3072 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=2 ** 3000, - q=DSA_KEY_3072.public_numbers.parameter_numbers.q, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ).parameters(backend) - - # Test a p > 3072 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=2 ** 3100, - q=DSA_KEY_3072.public_numbers.parameter_numbers.q, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ).parameters(backend) - - # Test a q < 160 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=2 ** 150, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ).parameters(backend) - - # Test a q < 256 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=DSA_KEY_2048.public_numbers.parameter_numbers.p, - q=2 ** 250, - g=DSA_KEY_2048.public_numbers.parameter_numbers.g - ).parameters(backend) - - # Test a q > 256 bits in length - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=DSA_KEY_3072.public_numbers.parameter_numbers.p, - q=2 ** 260, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ).parameters(backend) - - # Test a g < 1 - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=0 - ).parameters(backend) - - # Test a g = 1 - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=1 - ).parameters(backend) - - # Test a g > p - with pytest.raises(ValueError): - dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=2 ** 1200 - ).parameters(backend) - - def test_invalid_dsa_private_key_arguments(self, backend): - # Test a p < 1024 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 1000, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=DSA_KEY_1024.x - ).private_key(backend) - - # Test a p < 2048 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 2000, - q=DSA_KEY_2048.public_numbers.parameter_numbers.q, - g=DSA_KEY_2048.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_2048.public_numbers.y - ), - x=DSA_KEY_2048.x, - ).private_key(backend) - - # Test a p < 3072 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 3000, - q=DSA_KEY_3072.public_numbers.parameter_numbers.q, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_3072.public_numbers.y - ), - x=DSA_KEY_3072.x, - ).private_key(backend) - - # Test a p > 3072 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 3100, - q=DSA_KEY_3072.public_numbers.parameter_numbers.q, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_3072.public_numbers.y - ), - x=DSA_KEY_3072.x, - ).private_key(backend) - - # Test a q < 160 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=2 ** 150, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=DSA_KEY_1024.x, - ).private_key(backend) - - # Test a q < 256 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_2048.public_numbers.parameter_numbers.p, - q=2 ** 250, - g=DSA_KEY_2048.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_2048.public_numbers.y - ), - x=DSA_KEY_2048.x, - ).private_key(backend) - - # Test a q > 256 bits in length - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_3072.public_numbers.parameter_numbers.p, - q=2 ** 260, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_3072.public_numbers.y - ), - x=DSA_KEY_3072.x, - ).private_key(backend) - - # Test a g < 1 - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=0, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=DSA_KEY_1024.x, - ).private_key(backend) - - # Test a g = 1 - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=1, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=DSA_KEY_1024.x, - ).private_key(backend) - - # Test a g > p - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=2 ** 1200, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=DSA_KEY_1024.x, - ).private_key(backend) - - # Test x = 0 - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=0, - ).private_key(backend) - - # Test x < 0 - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=-2, - ).private_key(backend) - - # Test x = q - with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=2 ** 159, - ).private_key(backend) - - # Test x > q + @pytest.mark.parametrize( + ("p", "q", "g"), + [ + ( + 2 ** 1000, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + ), + ( + 2 ** 2000, + DSA_KEY_2048.public_numbers.parameter_numbers.q, + DSA_KEY_2048.public_numbers.parameter_numbers.g, + ), + ( + 2 ** 3000, + DSA_KEY_3072.public_numbers.parameter_numbers.q, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + ), + ( + 2 ** 3100, + DSA_KEY_3072.public_numbers.parameter_numbers.q, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + 2 ** 150, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + ), + ( + DSA_KEY_2048.public_numbers.parameter_numbers.p, + 2 ** 250, + DSA_KEY_2048.public_numbers.parameter_numbers.g + ), + ( + DSA_KEY_3072.public_numbers.parameter_numbers.p, + 2 ** 260, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 0 + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 1 + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 2 ** 1200 + ), + ] + ) + def test_invalid_parameters_values(self, p, q, g, backend): with pytest.raises(ValueError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=2 ** 200, - ).private_key(backend) + dsa.DSAParameterNumbers(p, q, g).parameters(backend) - # Test y != (g ** x) % p + @pytest.mark.parametrize( + ("p", "q", "g", "y", "x"), + [ + ( + 2 ** 1000, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + DSA_KEY_1024.x, + ), + ( + 2 ** 2000, + DSA_KEY_2048.public_numbers.parameter_numbers.q, + DSA_KEY_2048.public_numbers.parameter_numbers.g, + DSA_KEY_2048.public_numbers.y, + DSA_KEY_2048.x, + ), + ( + 2 ** 3000, + DSA_KEY_3072.public_numbers.parameter_numbers.q, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + DSA_KEY_3072.public_numbers.y, + DSA_KEY_3072.x, + ), + ( + 2 ** 3100, + DSA_KEY_3072.public_numbers.parameter_numbers.q, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + DSA_KEY_3072.public_numbers.y, + DSA_KEY_3072.x, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + 2 ** 150, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + DSA_KEY_1024.x, + ), + ( + DSA_KEY_2048.public_numbers.parameter_numbers.p, + 2 ** 250, + DSA_KEY_2048.public_numbers.parameter_numbers.g, + DSA_KEY_2048.public_numbers.y, + DSA_KEY_2048.x, + ), + ( + DSA_KEY_3072.public_numbers.parameter_numbers.p, + 2 ** 260, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + DSA_KEY_3072.public_numbers.y, + DSA_KEY_3072.x, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 0, + DSA_KEY_1024.public_numbers.y, + DSA_KEY_1024.x, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 1, + DSA_KEY_1024.public_numbers.y, + DSA_KEY_1024.x, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 2 ** 1200, + DSA_KEY_1024.public_numbers.y, + DSA_KEY_1024.x, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + 0, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + -2, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + 2 ** 159, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + 2 ** 200, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + 2 ** 100, + DSA_KEY_1024.x + ), + ] + ) + def test_invalid_dsa_private_key_arguments(self, p, q, g, y, x, backend): with pytest.raises(ValueError): dsa.DSAPrivateNumbers( public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=2 ** 100 - ), - x=DSA_KEY_1024.x, + parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g), + y=y + ), x=x ).private_key(backend) - # Test a non-integer y value - with pytest.raises(TypeError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=None - ), - x=DSA_KEY_1024.x, - ).private_key(backend) - - # Test a non-integer x value - with pytest.raises(TypeError): - dsa.DSAPrivateNumbers( - public_numbers=dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ), - x=None, - ).private_key(backend) - - def test_invalid_dsa_public_key_arguments(self, backend): - # Test a p < 1024 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 1000, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ).public_key(backend) - - # Test a p < 2048 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 2000, - q=DSA_KEY_2048.public_numbers.parameter_numbers.q, - g=DSA_KEY_2048.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_2048.public_numbers.y - ).public_key(backend) - - # Test a p < 3072 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 3000, - q=DSA_KEY_3072.public_numbers.parameter_numbers.q, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_3072.public_numbers.y - ).public_key(backend) - - # Test a p > 3072 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=2 ** 3100, - q=DSA_KEY_3072.public_numbers.parameter_numbers.q, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_3072.public_numbers.y - ).public_key(backend) - - # Test a q < 160 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=2 ** 150, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_1024.public_numbers.y - ).public_key(backend) - - # Test a q < 256 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_2048.public_numbers.parameter_numbers.p, - q=2 ** 250, - g=DSA_KEY_2048.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_2048.public_numbers.y - ).public_key(backend) - - # Test a q > 256 bits in length - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_3072.public_numbers.parameter_numbers.p, - q=2 ** 260, - g=DSA_KEY_3072.public_numbers.parameter_numbers.g, - ), - y=DSA_KEY_3072.public_numbers.y - ).public_key(backend) - - # Test a g < 1 - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=0, - ), - y=DSA_KEY_1024.public_numbers.y - ).public_key(backend) - - # Test a g = 1 - with pytest.raises(ValueError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=1, - ), - y=DSA_KEY_1024.public_numbers.y - ).public_key(backend) - - # Test a g > p + @pytest.mark.parametrize( + ("p", "q", "g", "y"), + [ + ( + 2 ** 1000, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + ), + ( + 2 ** 2000, + DSA_KEY_2048.public_numbers.parameter_numbers.q, + DSA_KEY_2048.public_numbers.parameter_numbers.g, + DSA_KEY_2048.public_numbers.y, + ), + ( + 2 ** 3000, + DSA_KEY_3072.public_numbers.parameter_numbers.q, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + DSA_KEY_3072.public_numbers.y, + ), + ( + 2 ** 3100, + DSA_KEY_3072.public_numbers.parameter_numbers.q, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + DSA_KEY_3072.public_numbers.y, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + 2 ** 150, + DSA_KEY_1024.public_numbers.parameter_numbers.g, + DSA_KEY_1024.public_numbers.y, + ), + ( + DSA_KEY_2048.public_numbers.parameter_numbers.p, + 2 ** 250, + DSA_KEY_2048.public_numbers.parameter_numbers.g, + DSA_KEY_2048.public_numbers.y, + ), + ( + DSA_KEY_3072.public_numbers.parameter_numbers.p, + 2 ** 260, + DSA_KEY_3072.public_numbers.parameter_numbers.g, + DSA_KEY_3072.public_numbers.y, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 0, + DSA_KEY_1024.public_numbers.y, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 1, + DSA_KEY_1024.public_numbers.y, + ), + ( + DSA_KEY_1024.public_numbers.parameter_numbers.p, + DSA_KEY_1024.public_numbers.parameter_numbers.q, + 2 ** 1200, + DSA_KEY_1024.public_numbers.y, + ), + ] + ) + def test_invalid_dsa_public_key_arguments(self, p, q, g, y, backend): with pytest.raises(ValueError): dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=2 ** 1200, - ), - y=DSA_KEY_1024.public_numbers.y - ).public_key(backend) - - # Test a non-integer y value - with pytest.raises(TypeError): - dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers( - p=DSA_KEY_1024.public_numbers.parameter_numbers.p, - q=DSA_KEY_1024.public_numbers.parameter_numbers.q, - g=DSA_KEY_1024.public_numbers.parameter_numbers.g, - ), - y=None + parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g), + y=y ).public_key(backend) From 8a64f1f2fbea73f0b7a4725768dc9597d240c661 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 30 May 2018 22:31:47 -0400 Subject: [PATCH 255/988] Removes branches in bindings for various OpenSSL 1.1.0 prereleases (#4269) * Remove defines for openssl 1.1.0 pre * Update bio.py * Update dh.py * Update dsa.py * Update rsa.py * Update x509_vfy.py * Compress branches --- src/_cffi_src/openssl/bio.py | 2 +- src/_cffi_src/openssl/cryptography.py | 6 ------ src/_cffi_src/openssl/dh.py | 4 ++-- src/_cffi_src/openssl/dsa.py | 4 ++-- src/_cffi_src/openssl/rsa.py | 4 ++-- src/_cffi_src/openssl/x509_vfy.py | 6 +----- 6 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index 0955dcd76b16..a95dbf479c5f 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -40,7 +40,7 @@ """ CUSTOMIZATIONS = """ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE4 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 int BIO_up_ref(BIO *b) { CRYPTO_add(&b->references, 1, CRYPTO_LOCK_BIO); return 1; diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 4f9378d338b8..137e2f9ebb1a 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -43,12 +43,6 @@ (OPENSSL_VERSION_NUMBER < 0x1000209f || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 \ (OPENSSL_VERSION_NUMBER < 0x10100000 || CRYPTOGRAPHY_IS_LIBRESSL) -#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE4 \ - (OPENSSL_VERSION_NUMBER < 0x10100004 || CRYPTOGRAPHY_IS_LIBRESSL) -#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE5 \ - (OPENSSL_VERSION_NUMBER < 0x10100005 || CRYPTOGRAPHY_IS_LIBRESSL) -#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE6 \ - (OPENSSL_VERSION_NUMBER < 0x10100006 || CRYPTOGRAPHY_IS_LIBRESSL) """ TYPES = """ diff --git a/src/_cffi_src/openssl/dh.py b/src/_cffi_src/openssl/dh.py index 7ab06ae9c8fb..64172eb6aa22 100644 --- a/src/_cffi_src/openssl/dh.py +++ b/src/_cffi_src/openssl/dh.py @@ -45,8 +45,8 @@ """ CUSTOMIZATIONS = """ -/* These functions were added in OpenSSL 1.1.0-pre5 (beta2) */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE5 +/* These functions were added in OpenSSL 1.1.0 */ +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { diff --git a/src/_cffi_src/openssl/dsa.py b/src/_cffi_src/openssl/dsa.py index d61b692e5e3d..f960d59a731e 100644 --- a/src/_cffi_src/openssl/dsa.py +++ b/src/_cffi_src/openssl/dsa.py @@ -34,8 +34,8 @@ """ CUSTOMIZATIONS = """ -/* These functions were added in OpenSSL 1.1.0-pre5 (beta2) */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE5 +/* These functions were added in OpenSSL 1.1.0 */ +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { diff --git a/src/_cffi_src/openssl/rsa.py b/src/_cffi_src/openssl/rsa.py index 13de2aae2c49..9455433eca59 100644 --- a/src/_cffi_src/openssl/rsa.py +++ b/src/_cffi_src/openssl/rsa.py @@ -75,8 +75,8 @@ int) = NULL; #endif -/* These functions were added in OpenSSL 1.1.0-pre5 (beta2) */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE5 +/* These functions were added in OpenSSL 1.1.0 */ +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) { /* If the fields n and e in r are NULL, the corresponding input diff --git a/src/_cffi_src/openssl/x509_vfy.py b/src/_cffi_src/openssl/x509_vfy.py index 58069eb1f6b1..a4b912005ae4 100644 --- a/src/_cffi_src/openssl/x509_vfy.py +++ b/src/_cffi_src/openssl/x509_vfy.py @@ -273,7 +273,7 @@ static const long X509_V_FLAG_TRUSTED_FIRST = 0; #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE6 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 Cryptography_STACK_OF_X509_OBJECT *X509_STORE_get0_objects(X509_STORE *ctx) { return ctx->objs; } @@ -283,9 +283,7 @@ int X509_OBJECT_get_type(const X509_OBJECT *x) { return x->type; } -#endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110PRE5 /* from x509/x509_vfy.c */ X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx) { @@ -295,9 +293,7 @@ X509 *X509_OBJECT_get0_X509(X509_OBJECT *x) { return x->data.x509; } -#endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 static const long Cryptography_HAS_X509_STORE_CTX_GET_ISSUER = 0; typedef void *X509_STORE_CTX_get_issuer_fn; X509_STORE_CTX_get_issuer_fn (*X509_STORE_get_get_issuer)(X509_STORE *) = NULL; From 611fa5a0458a36bb8b13b3e251a5cd359fa34296 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 31 May 2018 11:39:12 +0800 Subject: [PATCH 256/988] LibreSSL 2.7.x support (#4270) * libre 2.7.3 compatibility * add a changelog * actually build against 2.7.3 --- .travis.yml | 2 ++ CHANGELOG.rst | 2 ++ src/_cffi_src/openssl/bio.py | 2 +- src/_cffi_src/openssl/cryptography.py | 3 +++ src/_cffi_src/openssl/dh.py | 2 +- src/_cffi_src/openssl/dsa.py | 2 +- src/_cffi_src/openssl/rsa.py | 2 +- src/_cffi_src/openssl/ssl.py | 2 +- src/_cffi_src/openssl/x509.py | 23 ++++++++++++----------- src/_cffi_src/openssl/x509_vfy.py | 6 +++++- 10 files changed, 29 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9b60e644d4b8..ff4ec0bd90d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,6 +41,8 @@ matrix: env: TOXENV=py36 LIBRESSL=2.4.5 - python: 3.6 env: TOXENV=py36 LIBRESSL=2.6.4 + - python: 3.6 + env: TOXENV=py36 LIBRESSL=2.7.3 - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0h addons: diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9a3e5b880755..57ea2da3ee83 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,8 @@ Changelog * Support for Python 2.7.x without ``hmac.compare_digest`` has been deprecated. We will require Python 2.7.7 or higher (or 2.7.6 on Ubuntu) in the next ``cryptography`` release. +* Fixed multiple issues preventing ``cryptography`` from compiling against + LibreSSL 2.7.x. .. _v2-2-2: diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index a95dbf479c5f..8ae7045c17f8 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -40,7 +40,7 @@ """ CUSTOMIZATIONS = """ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER int BIO_up_ref(BIO *b) { CRYPTO_add(&b->references, 1, CRYPTO_LOCK_BIO); return 1; diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 137e2f9ebb1a..667fbf46cf66 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -28,6 +28,9 @@ #include #endif +#define CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER \ + (CRYPTOGRAPHY_IS_LIBRESSL && LIBRESSL_VERSION_NUMBER >= 0x2070000fL) + #define CRYPTOGRAPHY_OPENSSL_102_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x10002000 && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_102L_OR_GREATER \ diff --git a/src/_cffi_src/openssl/dh.py b/src/_cffi_src/openssl/dh.py index 64172eb6aa22..b0fd21f54079 100644 --- a/src/_cffi_src/openssl/dh.py +++ b/src/_cffi_src/openssl/dh.py @@ -46,7 +46,7 @@ CUSTOMIZATIONS = """ /* These functions were added in OpenSSL 1.1.0 */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { diff --git a/src/_cffi_src/openssl/dsa.py b/src/_cffi_src/openssl/dsa.py index f960d59a731e..a4a87c3660e4 100644 --- a/src/_cffi_src/openssl/dsa.py +++ b/src/_cffi_src/openssl/dsa.py @@ -35,7 +35,7 @@ CUSTOMIZATIONS = """ /* These functions were added in OpenSSL 1.1.0 */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { diff --git a/src/_cffi_src/openssl/rsa.py b/src/_cffi_src/openssl/rsa.py index 9455433eca59..216e633abb79 100644 --- a/src/_cffi_src/openssl/rsa.py +++ b/src/_cffi_src/openssl/rsa.py @@ -76,7 +76,7 @@ #endif /* These functions were added in OpenSSL 1.1.0 */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) { /* If the fields n and e in r are NULL, the corresponding input diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 91cedac08cfc..a9fc2ff3fa18 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -536,7 +536,7 @@ /* Added in 1.1.0 in the great opaquing, but we need to define it for older OpenSSLs. Such is our burden. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER /* from ssl/ssl_lib.c */ size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen) { diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 2b845118d0a3..97ade5bca1ef 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -340,7 +340,7 @@ CUSTOMIZATIONS = """ /* Added in 1.0.2 beta but we need it in all versions now due to the great opaquing. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER /* from x509/x_x509.c version 1.0.2 */ void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, const X509 *x) @@ -387,7 +387,17 @@ /* Added in 1.1.0 but we need it in all versions now due to the great opaquing. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp) +{ + req->req_info->enc.modified = 1; + return i2d_X509_REQ_INFO(req->req_info, pp); +} +int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp) { + crl->crl->enc.modified = 1; + return i2d_X509_CRL_INFO(crl->crl, pp); +} +#if !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER int X509_up_ref(X509 *x) { return CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); } @@ -406,16 +416,6 @@ if (palg != NULL) *palg = req->sig_alg; } -int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp) -{ - req->req_info->enc.modified = 1; - return i2d_X509_REQ_INFO(req->req_info, pp); -} -int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp) { - crl->crl->enc.modified = 1; - return i2d_X509_CRL_INFO(crl->crl, pp); -} - void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg) { @@ -433,4 +433,5 @@ return x->serialNumber; } #endif +#endif """ diff --git a/src/_cffi_src/openssl/x509_vfy.py b/src/_cffi_src/openssl/x509_vfy.py index a4b912005ae4..618b5c215b29 100644 --- a/src/_cffi_src/openssl/x509_vfy.py +++ b/src/_cffi_src/openssl/x509_vfy.py @@ -246,6 +246,7 @@ static const long X509_V_FLAG_SUITEB_192_LOS = 0; static const long X509_V_FLAG_SUITEB_128_LOS = 0; +#if !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER int (*X509_VERIFY_PARAM_set1_host)(X509_VERIFY_PARAM *, const char *, size_t) = NULL; int (*X509_VERIFY_PARAM_set1_email)(X509_VERIFY_PARAM *, const char *, @@ -256,6 +257,7 @@ void (*X509_VERIFY_PARAM_set_hostflags)(X509_VERIFY_PARAM *, unsigned int) = NULL; #endif +#endif /* OpenSSL 1.0.2+ or Solaris's backport */ #ifdef X509_V_FLAG_PARTIAL_CHAIN @@ -273,7 +275,7 @@ static const long X509_V_FLAG_TRUSTED_FIRST = 0; #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER Cryptography_STACK_OF_X509_OBJECT *X509_STORE_get0_objects(X509_STORE *ctx) { return ctx->objs; } @@ -293,7 +295,9 @@ X509 *X509_OBJECT_get0_X509(X509_OBJECT *x) { return x->data.x509; } +#endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 static const long Cryptography_HAS_X509_STORE_CTX_GET_ISSUER = 0; typedef void *X509_STORE_CTX_get_issuer_fn; X509_STORE_CTX_get_issuer_fn (*X509_STORE_get_get_issuer)(X509_STORE *) = NULL; From 4fbb407b6ca5213f36e1e3fd1ec4a0743fa2e089 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 8 Jun 2018 20:55:43 -0400 Subject: [PATCH 257/988] Test certbot with OpenSSL 1.1.0 (#4278) Their tests appear to require ALPN now, and the OpenSSL 1.0.1 that comes with the travis image doesn't have ALPN. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ff4ec0bd90d7..7289e6ba3656 100644 --- a/.travis.yml +++ b/.travis.yml @@ -63,7 +63,7 @@ matrix: - python: 2.7 env: DOWNSTREAM=aws-encryption-sdk - python: 2.7 - env: DOWNSTREAM=certbot + env: DOWNSTREAM=certbot OPENSSL=1.1.0h - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 From 2e57a72133ae90e0ee7489646fe458954da7ec08 Mon Sep 17 00:00:00 2001 From: Matt Bullock Date: Tue, 12 Jun 2018 17:35:50 -0700 Subject: [PATCH 258/988] add downstream tests for awslabs/aws-dynamodb-encryption-python (#4280) * add downstream tests for awslabs/aws-dynamodb-encryption-python * require recent OpenSSL for awslabs/dynamodb-encryption-python downstream tests --- .travis.yml | 2 ++ .travis/run.sh | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 7289e6ba3656..0929be72830e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -62,6 +62,8 @@ matrix: env: DOWNSTREAM=paramiko - python: 2.7 env: DOWNSTREAM=aws-encryption-sdk + - python: 2.7 + env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0h - python: 2.7 env: DOWNSTREAM=certbot OPENSSL=1.1.0h - python: 2.7 diff --git a/.travis/run.sh b/.travis/run.sh index 19f8c4838a2b..a68ad1570343 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -54,6 +54,13 @@ else pip install -e . pytest -m local -l ;; + dynamodb-encryption-sdk) + git clone --depth=1 https://github.com/awslabs/aws-dynamodb-encryption-python + cd aws-dynamodb-encryption-python + pip install -r test/requirements.txt + pip install -e . + pytest -m "local and not slow and not veryslow and not nope" -l + ;; certbot) git clone --depth=1 https://github.com/certbot/certbot cd certbot From 95820b4e4fe23e174cf212639a37df39a157db9d Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sat, 16 Jun 2018 18:33:33 -0700 Subject: [PATCH 259/988] Document project as stable and ready for use in production (#4284) --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 13325896a899..593925e433d9 100644 --- a/setup.py +++ b/setup.py @@ -256,6 +256,7 @@ def run_tests(self): author_email=about["__email__"], classifiers=[ + "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "License :: OSI Approved :: BSD License", From 1b17cb2aa468321c295c181c9fbb6ba6154be340 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 19 Jun 2018 20:36:08 -0700 Subject: [PATCH 260/988] Correct pass bytes; refs #4289 (#4291) --- tests/hazmat/primitives/test_aes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index a2a298810497..d6f83ebc2812 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -85,7 +85,7 @@ class TestAESModeCBC(object): @pytest.mark.supported( only_if=lambda backend: backend.cipher_supported( - algorithms.AES("\x00" * 16), modes.ECB() + algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES ECB", ) From d88d721343828accacefca701a3d542365cd6d59 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 19 Jun 2018 20:36:16 -0700 Subject: [PATCH 261/988] Correctly pass bytes; refs #4289 (#4290) --- tests/hazmat/primitives/test_3des.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/hazmat/primitives/test_3des.py b/tests/hazmat/primitives/test_3des.py index 586afb475b94..f281ba2887b2 100644 --- a/tests/hazmat/primitives/test_3des.py +++ b/tests/hazmat/primitives/test_3des.py @@ -170,7 +170,7 @@ class TestTripleDESModeCFB8(object): @pytest.mark.supported( only_if=lambda backend: backend.cipher_supported( - algorithms.TripleDES("\x00" * 8), modes.ECB() + algorithms.TripleDES(b"\x00" * 8), modes.ECB() ), skip_message="Does not support TripleDES ECB", ) From 2d0afd3485a6349924f921d12dc94a302999ae20 Mon Sep 17 00:00:00 2001 From: Vladyslav Moisieienkov Date: Wed, 20 Jun 2018 14:21:33 +0200 Subject: [PATCH 262/988] Add clearer message when key type is not bytes (#4289) * Add clearer message in Cipher when key is not bytes * Change location of key type check to verify_key_size function * Replace formated error message with static * Add key type check tests to all ciphers constructors * Change key type error message to lowercase --- .../hazmat/primitives/ciphers/algorithms.py | 3 ++ tests/hazmat/primitives/test_chacha20.py | 4 +++ tests/hazmat/primitives/test_ciphers.py | 32 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index 99a837e4e1d0..68a9e33085fe 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -12,6 +12,9 @@ def _verify_key_size(algorithm, key): + # Verify that the key is instance of bytes + utils._check_bytes("key", key) + # Verify that the key size matches the expected key size if len(key) * 8 not in algorithm.key_sizes: raise ValueError("Invalid key size ({0}) for {1}.".format( diff --git a/tests/hazmat/primitives/test_chacha20.py b/tests/hazmat/primitives/test_chacha20.py index 16ef97ed096a..33730d9143ff 100644 --- a/tests/hazmat/primitives/test_chacha20.py +++ b/tests/hazmat/primitives/test_chacha20.py @@ -58,3 +58,7 @@ def test_invalid_nonce(self): with pytest.raises(TypeError): algorithms.ChaCha20(b"0" * 32, object()) + + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + algorithms.ChaCha20(u"0" * 32, b"0" * 16) diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index 2f58c9fc911a..f29ba9a916a1 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -36,6 +36,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): AES(binascii.unhexlify(b"0" * 12)) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + AES(u"0" * 32) + class TestAESXTS(object): @pytest.mark.requires_backend_interface(interface=CipherBackend) @@ -75,6 +79,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): Camellia(binascii.unhexlify(b"0" * 12)) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + Camellia(u"0" * 32) + class TestTripleDES(object): @pytest.mark.parametrize("key", [ @@ -90,6 +98,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): TripleDES(binascii.unhexlify(b"0" * 12)) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + TripleDES(u"0" * 16) + class TestBlowfish(object): @pytest.mark.parametrize(("key", "keysize"), [ @@ -103,6 +115,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): Blowfish(binascii.unhexlify(b"0" * 6)) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + Blowfish(u"0" * 8) + class TestCAST5(object): @pytest.mark.parametrize(("key", "keysize"), [ @@ -116,6 +132,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): CAST5(binascii.unhexlify(b"0" * 34)) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + CAST5(u"0" * 10) + class TestARC4(object): @pytest.mark.parametrize(("key", "keysize"), [ @@ -135,6 +155,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): ARC4(binascii.unhexlify(b"0" * 34)) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + ARC4(u"0" * 10) + class TestIDEA(object): def test_key_size(self): @@ -145,6 +169,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): IDEA(b"\x00" * 17) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + IDEA(u"0" * 16) + class TestSEED(object): def test_key_size(self): @@ -155,6 +183,10 @@ def test_invalid_key_size(self): with pytest.raises(ValueError): SEED(b"\x00" * 17) + def test_invalid_key_type(self): + with pytest.raises(TypeError, match="key must be bytes"): + SEED(u"0" * 16) + def test_invalid_backend(): pretend_backend = object() From 58fd9c412ad8e91f1453f86ba1fc16479f5b11d0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 20 Jun 2018 08:50:33 -0700 Subject: [PATCH 263/988] Perform an OPENSSL_cleanup before checking the heap in our memleak tests (#4293) * Perform an OPENSSL_cleanup before checking the heap in our memleak tests * Make this binding conditional * typo * need to put this call before we reset the function ptrs --- src/_cffi_src/openssl/crypto.py | 9 ++++++++- src/cryptography/hazmat/bindings/openssl/_conditional.py | 7 +++++++ tests/hazmat/backends/test_openssl_memleak.py | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/crypto.py b/src/_cffi_src/openssl/crypto.py index 449fff5e6f12..03672d55ed49 100644 --- a/src/_cffi_src/openssl/crypto.py +++ b/src/_cffi_src/openssl/crypto.py @@ -11,6 +11,7 @@ TYPES = """ static const long Cryptography_HAS_LOCKING_CALLBACKS; static const long Cryptography_HAS_MEM_FUNCTIONS; +static const long Cryptography_HAS_OPENSSL_CLEANUP; static const int SSLEAY_VERSION; static const int SSLEAY_CFLAGS; @@ -34,8 +35,9 @@ FUNCTIONS = """ int CRYPTO_mem_ctrl(int); -/* CRYPTO_cleanup_all_ex_data became a macro in 1.1.0 */ + void CRYPTO_cleanup_all_ex_data(void); +void OPENSSL_cleanup(void); /* as of 1.1.0 OpenSSL does its own locking *angelic chorus*. These functions have become macros that are no ops */ @@ -112,6 +114,10 @@ #endif #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +static const long Cryptography_HAS_OPENSSL_CLEANUP = 0; + +void (*OPENSSL_cleanup)(void) = NULL; + /* This function has a significantly different signature pre-1.1.0. since it is * for testing only, we don't bother to expose it on older OpenSSLs. */ @@ -122,6 +128,7 @@ void (*)(void *, const char *, int)) = NULL; #else +static const long Cryptography_HAS_OPENSSL_CLEANUP = 1; static const long Cryptography_HAS_MEM_FUNCTIONS = 1; int Cryptography_CRYPTO_set_mem_functions( diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 761124f5ccda..b3e4e8bd6ec0 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -240,6 +240,12 @@ def cryptography_has_custom_ext(): ] +def cryptography_has_openssl_cleanup(): + return [ + "OPENSSL_cleanup", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -292,4 +298,5 @@ def cryptography_has_custom_ext(): "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs, "Cryptography_HAS_PSK": cryptography_has_psk, "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext, + "Cryptography_HAS_OPENSSL_CLEANUP": cryptography_has_openssl_cleanup, } diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 74973fe51f75..cd453541e097 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -60,6 +60,9 @@ def free(ptr, path, line): gc.collect() gc.collect() + if lib.Cryptography_HAS_OPENSSL_CLEANUP: + lib.OPENSSL_cleanup() + # Swap back to the original functions so that if OpenSSL tries to free # something from its atexit handle it won't be going through a Python # function, which will be deallocated when this function returns From 0d9fc8ec6d35ec6c4f834a8873e7ca63e9e769d0 Mon Sep 17 00:00:00 2001 From: Quinten Stokkink Date: Fri, 22 Jun 2018 16:32:47 +0200 Subject: [PATCH 264/988] Exposed OpenSSL prime methods (#4292) These are required by the Tribler project. --- src/_cffi_src/openssl/bignum.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/_cffi_src/openssl/bignum.py b/src/_cffi_src/openssl/bignum.py index eab40284c899..a352f5a87cd1 100644 --- a/src/_cffi_src/openssl/bignum.py +++ b/src/_cffi_src/openssl/bignum.py @@ -72,6 +72,12 @@ int BN_num_bytes(const BIGNUM *); int BN_mod(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); + +/* The following 3 prime methods are exposed for Tribler. */ +int BN_generate_prime_ex(BIGNUM *, int, int, const BIGNUM *, + const BIGNUM *, BN_GENCB *); +int BN_is_prime_ex(const BIGNUM *, int, BN_CTX *, BN_GENCB *); +const int BN_prime_checks_for_size(int); """ CUSTOMIZATIONS = """ From 3bab819c558ead888825e33f8df3f17707ff2c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D0=B5=D0=BD=D0=B1=D0=B5=D1=80=D0=B3=20?= =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=BA?= Date: Tue, 26 Jun 2018 23:26:27 +0500 Subject: [PATCH 265/988] Add serialisation output examples (#4286) --- .../primitives/asymmetric/serialization.rst | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 24e2b89c4598..90ec10eb9b0b 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -418,12 +418,24 @@ Serialization Formats Frequently known as PKCS#1 format. Still a widely used format, but generally considered legacy. + A PEM encoded RSA key will look like:: + + -----BEGIN RSA PRIVATE KEY----- + ... + -----END RSA PRIVATE KEY----- + .. attribute:: PKCS8 A more modern format for serializing keys which allows for better encryption. Choose this unless you have explicit legacy compatibility requirements. + A PEM encoded key will look like:: + + -----BEGIN PRIVATE KEY----- + ... + -----END PRIVATE KEY----- + .. class:: PublicFormat .. versionadded:: 0.8 @@ -443,11 +455,23 @@ Serialization Formats identifier and the public key as a bit string. Choose this unless you have specific needs. + A PEM encoded key will look like:: + + -----BEGIN PUBLIC KEY----- + ... + -----END PUBLIC KEY----- + .. attribute:: PKCS1 Just the public key elements (without the algorithm identifier). This format is RSA only, but is used by some older systems. + A PEM encoded key will look like:: + + -----BEGIN RSA PUBLIC KEY----- + ... + -----END RSA PUBLIC KEY----- + .. attribute:: OpenSSH .. versionadded:: 1.4 From 4ee1cb949767a882d56053cde922f260874f00c6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Jun 2018 20:07:14 -0700 Subject: [PATCH 266/988] Add py37 (#4298) * test against python 3.7 for windows * update docs to say we test on 3.7 * more succinct * maybe make this actually work. * link properly * moar changes --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 9 +++++---- CHANGELOG.rst | 1 + Jenkinsfile | 9 +++++---- docs/installation.rst | 2 +- setup.py | 1 + tox.ini | 2 +- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index c46238bd7034..68991da90f62 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -8,11 +8,11 @@ properties([ def configs = [ [ label: 'windows', - versions: ['py27', 'py34', 'py35', 'py36'], + versions: ['py27', 'py34', 'py35', 'py36', 'py37'], ], [ label: 'windows64', - versions: ['py27', 'py34', 'py35', 'py36'], + versions: ['py27', 'py34', 'py35', 'py36', 'py37'], ], [ label: 'sierra', @@ -49,9 +49,10 @@ def build(version, label, imageName) { py27: "C:\\Python27\\python.exe", py34: "C:\\Python34\\python.exe", py35: "C:\\Python35\\python.exe", - py36: "C:\\Python36\\python.exe" + py36: "C:\\Python36\\python.exe", + py37: "C:\\Python36\\python.exe" ] - if (version == "py35" || version == "py36") { + if (version == "py35" || version == "py36" || version == "py37") { opensslPaths = [ "windows": [ "include": "C:\\OpenSSL-Win32-2015\\include", diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 57ea2da3ee83..c3a415c35b05 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ Changelog .. note:: This version is not yet released and is under active development. +* Added support for Python 3.7. * Added :meth:`~cryptography.fernet.Fernet.extract_timestamp` to get the authenticated timestamp of a :doc:`Fernet ` token. * Support for Python 2.7.x without ``hmac.compare_digest`` has been deprecated. diff --git a/Jenkinsfile b/Jenkinsfile index 33bce2d2f3e9..2697b8f60406 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,11 +5,11 @@ if (env.BRANCH_NAME == "master") { def configs = [ [ label: 'windows', - toxenvs: ['py27', 'py34', 'py35', 'py36'], + toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], ], [ label: 'windows64', - toxenvs: ['py27', 'py34', 'py35', 'py36'], + toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], ], [ label: 'freebsd11', @@ -152,9 +152,10 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { py27: "C:\\Python27\\python.exe", py34: "C:\\Python34\\python.exe", py35: "C:\\Python35\\python.exe", - py36: "C:\\Python36\\python.exe" + py36: "C:\\Python36\\python.exe", + py37: "C:\\Python37\\python.exe" ] - if (toxenv == "py35" || toxenv == "py36") { + if (toxenv == "py35" || toxenv == "py36" || toxenv == "py37") { opensslPaths = [ "windows": [ "include": "C:\\OpenSSL-Win32-2015\\include", diff --git a/docs/installation.rst b/docs/installation.rst index f96cc50570d8..13cd75e1fea4 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -10,7 +10,7 @@ You can install ``cryptography`` with ``pip``: Supported platforms ------------------- -Currently we test ``cryptography`` on Python 2.7, 3.4, 3.5, 3.6, and +Currently we test ``cryptography`` on Python 2.7, 3.4+, and PyPy 5.3+ on these operating systems. * x86-64 CentOS 7.x diff --git a/setup.py b/setup.py index 593925e433d9..2fbbd04691ec 100644 --- a/setup.py +++ b/setup.py @@ -273,6 +273,7 @@ def run_tests(self): "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Security :: Cryptography", diff --git a/tox.ini b/tox.ini index 86d23aae1d0e..b76bfc972a85 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] minversion = 2.4 -envlist = py27,pypy,py34,py35,py36,docs,pep8,py3pep8 +envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,py3pep8 [testenv] extras = From 682014558f3521a942cdce3932837659ce24df34 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Jun 2018 21:09:32 -0700 Subject: [PATCH 267/988] 6 and 7 are right next to each other (#4302) --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 68991da90f62..1cd764176e64 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -50,7 +50,7 @@ def build(version, label, imageName) { py34: "C:\\Python34\\python.exe", py35: "C:\\Python35\\python.exe", py36: "C:\\Python36\\python.exe", - py37: "C:\\Python36\\python.exe" + py37: "C:\\Python37\\python.exe" ] if (version == "py35" || version == "py36" || version == "py37") { opensslPaths = [ From 3367806cd464fac96abd1b8416700ad174e8b64d Mon Sep 17 00:00:00 2001 From: Marti Raudsepp Date: Sat, 30 Jun 2018 02:27:28 +0300 Subject: [PATCH 268/988] Add OID for RSASSA-PSS X.509 signature algorithm (RFC 4055) (#4294) In 2005, IETF devised a more secure padding scheme to replace PKCS #1 v1.5. To make sure that nobody can easily support or use it, they mandated lots of complicated parameters in the certificate, unlike any other X.509 signature scheme. https://tools.ietf.org/html/rfc4055 `_SIG_OIDS_TO_HASH` and `Certificate.signature_hash_algorithm` cannot be supported as-is, because the hash algorithm is defined in the signature algorithm parameters, not by the OID itself. --- docs/x509/reference.rst | 9 +++++++++ src/cryptography/x509/__init__.py | 1 + src/cryptography/x509/oid.py | 2 ++ 3 files changed, 12 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 7a41e1f31d11..3fc6507ee859 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2569,6 +2569,15 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.2.840.113549.1.1.13"``. This is a SHA512 digest signed by an RSA key. + .. attribute:: RSASSA_PSS + + .. versionadded:: 2.3 + + Corresponds to the dotted string ``"1.2.840.113549.1.1.10"``. This is + signed by an RSA key using the Probabilistic Signature Scheme (PSS) + padding from RFC 4055. The hash function and padding are defined by + signature algorithm parameters. + .. attribute:: ECDSA_WITH_SHA1 Corresponds to the dotted string ``"1.2.840.10045.4.1"``. This is a SHA1 diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index 224c9af6d79b..d2f9b0496d60 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -74,6 +74,7 @@ OID_RSA_WITH_SHA256 = SignatureAlgorithmOID.RSA_WITH_SHA256 OID_RSA_WITH_SHA384 = SignatureAlgorithmOID.RSA_WITH_SHA384 OID_RSA_WITH_SHA512 = SignatureAlgorithmOID.RSA_WITH_SHA512 +OID_RSASSA_PSS = SignatureAlgorithmOID.RSASSA_PSS OID_COMMON_NAME = NameOID.COMMON_NAME OID_COUNTRY_NAME = NameOID.COUNTRY_NAME diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 8b92d6b389e3..90003d79bcaa 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -137,6 +137,7 @@ class SignatureAlgorithmOID(object): RSA_WITH_SHA256 = ObjectIdentifier("1.2.840.113549.1.1.11") RSA_WITH_SHA384 = ObjectIdentifier("1.2.840.113549.1.1.12") RSA_WITH_SHA512 = ObjectIdentifier("1.2.840.113549.1.1.13") + RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10") ECDSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10045.4.1") ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1") ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2") @@ -221,6 +222,7 @@ class CertificatePoliciesOID(object): SignatureAlgorithmOID.RSA_WITH_SHA256: "sha256WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA384: "sha384WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA512: "sha512WithRSAEncryption", + SignatureAlgorithmOID.RSASSA_PSS: "RSASSA-PSS", SignatureAlgorithmOID.ECDSA_WITH_SHA1: "ecdsa-with-SHA1", SignatureAlgorithmOID.ECDSA_WITH_SHA224: "ecdsa-with-SHA224", SignatureAlgorithmOID.ECDSA_WITH_SHA256: "ecdsa-with-SHA256", From 8bf42606a35611c804c2204106cd84f436550ccb Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Fri, 29 Jun 2018 19:28:33 -0400 Subject: [PATCH 269/988] Revert the const bits of #4220. (#4276) In #4220, I switched BIO_new to take a const pointer (true in 1.1.0, but not 1.0.2) on grounds that: This also folds in the const bits from 1.1.0, on the assumption that, now that the function pointer check is gone, it will just cause cffi to generate more conservative pointer types that work for 1.0.2 as well. But I got this backwards. If the bindings say BIO_METHOD*, cffi will pass a BIO_METHOD* to BIO_new, which works in both OpenSSL versions. If it says const BIO_METHOD*, cffi will pass const BIO_METHD* to BIO_new, which does not work in 1.0.2. (Although cryptography.io's build ignores all these warnings anyway, so it's kind of moot.) --- src/_cffi_src/openssl/bio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index 8ae7045c17f8..d65775a09c0e 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -24,7 +24,7 @@ /* Added in 1.1.0 */ int BIO_up_ref(BIO *); -BIO *BIO_new(const BIO_METHOD *); +BIO *BIO_new(BIO_METHOD *); BIO_METHOD *BIO_s_mem(void); BIO_METHOD *BIO_s_datagram(void); BIO *BIO_new_mem_buf(const void *, int); From d502a1f1e31c4cfb0294f9672390798778ba950c Mon Sep 17 00:00:00 2001 From: Eric Brown Date: Tue, 3 Jul 2018 19:34:10 -0700 Subject: [PATCH 270/988] Add testing support of Python 3.7 (#4305) So pyca/cryptography's Python classifier already claims support of Python 3.7, but there is no testing matrix for it. This patch adds the recently released Python 3.7 to the matrix of testing. It requires sudo:true and xenial to pass. Fixes Issue #4301 Signed-off-by: Eric Brown --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0929be72830e..40a85a13ab2b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,6 +27,10 @@ matrix: env: TOXENV=py35 - python: 3.6 env: TOXENV=py36 + - python: 3.7 + env: TOXENV=py37 + dist: xenial + sudo: true - python: pypy-5.3 env: TOXENV=pypy - python: pypy2.7-5.10.0 From d2e51f98269b332ed74e306e5f3fd40bdf8b3eb9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 4 Jul 2018 19:09:04 +0530 Subject: [PATCH 271/988] since the generator order is 570 bits this should be 570 (#4307) but key_size is nonsense and we'll deprecate it next --- src/cryptography/hazmat/primitives/asymmetric/ec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 83266bb4681c..6cbfcab4c1bd 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -135,7 +135,7 @@ def verify(self, signature, data, signature_algorithm): @utils.register_interface(EllipticCurve) class SECT571R1(object): name = "sect571r1" - key_size = 571 + key_size = 570 @utils.register_interface(EllipticCurve) From e2a0493e9808288ceae7e8d54e0d19d306f89223 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 4 Jul 2018 10:46:36 -0400 Subject: [PATCH 272/988] Fixes #4242 -- added an additional assert to make this test more resillient (#4308) --- tests/hazmat/primitives/test_ec.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 5c3da5b62e26..d015e84d8afd 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -1080,6 +1080,8 @@ def test_key_exchange_with_vectors(self, backend, vector): # At this point fail indicates that one of the underlying keys was # changed. This results in a non-matching derived key. if vector['fail']: + # Errno 8 indicates Z should be changed. + assert vector['errno'] == 8 assert z != vector['Z'] else: assert z == vector['Z'] From 7a5d3716d0f9413a01651d2be5f0adbc5e858bfa Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 5 Jul 2018 19:58:01 -0400 Subject: [PATCH 273/988] Don't change the cwd in travis scripts (#4309) --- .travis/install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis/install.sh b/.travis/install.sh index 2858d25d8e1b..673ac4b8ff73 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -18,21 +18,23 @@ if [ -n "${OPENSSL}" ]; then if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then curl -O "https://www.openssl.org/source/openssl-${OPENSSL}.tar.gz" tar zxf "openssl-${OPENSSL}.tar.gz" - cd "openssl-${OPENSSL}" + pushd "openssl-${OPENSSL}" ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" shlib_sed make depend make install + popd fi elif [ -n "${LIBRESSL}" ]; then LIBRESSL_DIR="ossl-1/${LIBRESSL}" if [[ ! -f "$HOME/$LIBRESSL_DIR/bin/openssl" ]]; then curl -O "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL}.tar.gz" tar zxf "libressl-${LIBRESSL}.tar.gz" - cd "libressl-${LIBRESSL}" + pushd "libressl-${LIBRESSL}" ./config -Wl -Wl,-Bsymbolic-functions -fPIC shared --prefix="$HOME/$LIBRESSL_DIR" shlib_sed make -j"$(nproc)" install + popd fi fi pip install virtualenv From d6256094b26d4563ec9969f2a301dcf671c0f24d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 5 Jul 2018 23:04:46 -0400 Subject: [PATCH 274/988] Make the docs clearer on why truncated tags are a bad idea (#4312) * Make the docs clearer on why truncated tags are a bad idea * clarify --- docs/hazmat/primitives/symmetric-encryption.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 593b880b070c..5ebcca754d5e 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -379,10 +379,10 @@ Modes Cryptography will generate a 128-bit tag when finalizing encryption. You can shorten a tag by truncating it to the desired length but this - is **not recommended** as it lowers the security margins of the - authentication (`NIST SP-800-38D`_ recommends 96-:term:`bits` or - greater). Applications wishing to allow truncation must pass the - ``min_tag_length`` parameter. + is **not recommended** as it makes it easier to forge messages, and + also potentially leaks the key (`NIST SP-800-38D`_ recommends + 96-:term:`bits` or greater). Applications wishing to allow truncation + can pass the ``min_tag_length`` parameter. .. versionchanged:: 0.5 From 000fda7e98cf8b0a8c1fb3b480cff0a5a832ca4f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 6 Jul 2018 18:04:55 +0530 Subject: [PATCH 275/988] set an OPENSSL_API_COMPAT level (#4313) * set an OPENSSL_API_COMPAT level this helps prevent adding deprecated functions and will let us see what we need to/can prune in the distant future when we support only 1.1.0+ * raise the api compat to 1.0.1 (which doesn't matter but is less confusing) --- src/_cffi_src/openssl/cryptography.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 667fbf46cf66..e3e735808a27 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -5,6 +5,11 @@ from __future__ import absolute_import, division, print_function INCLUDES = """ +/* define our OpenSSL API compatibility level to 1.0.1. Any symbols older than + that will raise an error during compilation. We can raise this number again + after we drop 1.0.2 support in the distant future. */ +#define OPENSSL_API_COMPAT 0x10001000L + #include From 0a00eaff40e770c4628c444179aa0038c164c7d3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 6 Jul 2018 18:13:54 +0530 Subject: [PATCH 276/988] reduce number of deprecated signer/verifier calls in test_rsa (#4314) --- tests/hazmat/primitives/test_rsa.py | 208 +++++++++++++--------------- 1 file changed, 95 insertions(+), 113 deletions(-) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 8bab29c48f2a..217c66801b06 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -384,10 +384,11 @@ def test_pkcs1v15_signing(self, pkcs1_example, backend): n=private["modulus"] ) ).private_key(backend) - with pytest.warns(CryptographyDeprecationWarning): - signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) - signer.update(binascii.unhexlify(example["message"])) - signature = signer.finalize() + signature = private_key.sign( + binascii.unhexlify(example["message"]), + padding.PKCS1v15(), + hashes.SHA1() + ) assert binascii.hexlify(signature) == example["signature"] @pytest.mark.supported( @@ -459,12 +460,9 @@ def test_pss_signing_sha2(self, hash_alg, backend): mgf=padding.MGF1(hash_alg), salt_length=padding.PSS.MAX_LENGTH ) - signer = private_key.signer(pss, hash_alg) - signer.update(b"testing signature") - signature = signer.finalize() - verifier = public_key.verifier(signature, pss, hash_alg) - verifier.update(b"testing signature") - verifier.verify() + msg = b"testing signature" + signature = private_key.sign(msg, pss, hash_alg) + public_key.verify(signature, msg, pss, hash_alg) @pytest.mark.supported( only_if=lambda backend: ( @@ -480,15 +478,14 @@ def test_pss_signing_sha2(self, hash_alg, backend): ) def test_pss_minimum_key_size_for_digest(self, backend): private_key = RSA_KEY_522.private_key(backend) - signer = private_key.signer( + private_key.sign( + b"no failure", padding.PSS( mgf=padding.MGF1(hashes.SHA1()), salt_length=padding.PSS.MAX_LENGTH ), hashes.SHA512() ) - signer.update(b"no failure") - signer.finalize() @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -506,7 +503,8 @@ def test_pss_minimum_key_size_for_digest(self, backend): def test_pss_signing_digest_too_large_for_key_size(self, backend): private_key = RSA_KEY_512.private_key(backend) with pytest.raises(ValueError): - private_key.signer( + private_key.sign( + b"msg", padding.PSS( mgf=padding.MGF1(hashes.SHA1()), salt_length=padding.PSS.MAX_LENGTH @@ -525,16 +523,15 @@ def test_pss_signing_digest_too_large_for_key_size(self, backend): ) def test_pss_signing_salt_length_too_long(self, backend): private_key = RSA_KEY_512.private_key(backend) - signer = private_key.signer( - padding.PSS( - mgf=padding.MGF1(hashes.SHA1()), - salt_length=1000000 - ), - hashes.SHA1() - ) - signer.update(b"failure coming") with pytest.raises(ValueError): - signer.finalize() + private_key.sign( + b"failure coming", + padding.PSS( + mgf=padding.MGF1(hashes.SHA1()), + salt_length=1000000 + ), + hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -555,12 +552,12 @@ def test_use_after_finalize(self, backend): def test_unsupported_padding(self, backend): private_key = RSA_KEY_512.private_key(backend) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_PADDING): - private_key.signer(DummyAsymmetricPadding(), hashes.SHA1()) + private_key.sign(b"msg", DummyAsymmetricPadding(), hashes.SHA1()) def test_padding_incorrect_type(self, backend): private_key = RSA_KEY_512.private_key(backend) with pytest.raises(TypeError): - private_key.signer("notpadding", hashes.SHA1()) + private_key.sign(b"msg", "notpadding", hashes.SHA1()) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -571,7 +568,8 @@ def test_padding_incorrect_type(self, backend): def test_unsupported_pss_mgf(self, backend): private_key = RSA_KEY_512.private_key(backend) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_MGF): - private_key.signer( + private_key.sign( + b"msg", padding.PSS( mgf=DummyMGF(), salt_length=padding.PSS.MAX_LENGTH @@ -587,13 +585,12 @@ def test_unsupported_pss_mgf(self, backend): ) def test_pkcs1_digest_too_large_for_key_size(self, backend): private_key = RSA_KEY_599.private_key(backend) - signer = private_key.signer( - padding.PKCS1v15(), - hashes.SHA512() - ) - signer.update(b"failure coming") with pytest.raises(ValueError): - signer.finalize() + private_key.sign( + b"failure coming", + padding.PKCS1v15(), + hashes.SHA512() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -603,12 +600,11 @@ def test_pkcs1_digest_too_large_for_key_size(self, backend): ) def test_pkcs1_minimum_key_size(self, backend): private_key = RSA_KEY_745.private_key(backend) - signer = private_key.signer( + private_key.sign( + b"no failure", padding.PKCS1v15(), hashes.SHA512() ) - signer.update(b"no failure") - signer.finalize() def test_sign(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -617,9 +613,7 @@ def test_sign(self, backend): algorithm = hashes.SHA1() signature = private_key.sign(message, pkcs, algorithm) public_key = private_key.public_key() - verifier = public_key.verifier(signature, pkcs, algorithm) - verifier.update(message) - verifier.verify() + public_key.verify(signature, message, pkcs, algorithm) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -637,9 +631,7 @@ def test_prehashed_sign(self, backend): prehashed_alg = asym_utils.Prehashed(hashes.SHA1()) signature = private_key.sign(digest, pss, prehashed_alg) public_key = private_key.public_key() - verifier = public_key.verifier(signature, pss, hashes.SHA1()) - verifier.update(message) - verifier.verify() + public_key.verify(signature, message, pss, hashes.SHA1()) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -728,17 +720,16 @@ def test_pkcs1v15_verification(self, pkcs1_example, backend): def test_invalid_pkcs1v15_signature_wrong_data(self, backend): private_key = RSA_KEY_512.private_key(backend) public_key = private_key.public_key() - signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) - signer.update(b"sign me") - signature = signer.finalize() - verifier = public_key.verifier( - signature, - padding.PKCS1v15(), - hashes.SHA1() + signature = private_key.sign( + b"sign me", padding.PKCS1v15(), hashes.SHA1() ) - verifier.update(b"incorrect data") with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, + b"incorrect data", + padding.PKCS1v15(), + hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -750,17 +741,12 @@ def test_invalid_pkcs1v15_signature_wrong_key(self, backend): private_key = RSA_KEY_512.private_key(backend) private_key2 = RSA_KEY_512_ALT.private_key(backend) public_key = private_key2.public_key() - signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) - signer.update(b"sign me") - signature = signer.finalize() - verifier = public_key.verifier( - signature, - padding.PKCS1v15(), - hashes.SHA1() - ) - verifier.update(b"sign me") + msg = b"sign me" + signature = private_key.sign(msg, padding.PKCS1v15(), hashes.SHA1()) with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, msg, padding.PKCS1v15(), hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -817,17 +803,16 @@ def test_invalid_pss_signature_wrong_data(self, backend): b"0e68c3649df91c5bc3665f96e157efa75b71934aaa514d91e94ca8418d100f45" b"6f05288e58525f99666bab052adcffdf7186eb40f583bd38d98c97d3d524808b" ) - verifier = public_key.verifier( - signature, - padding.PSS( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH - ), - hashes.SHA1() - ) - verifier.update(b"incorrect data") with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, + b"incorrect data", + padding.PSS( + mgf=padding.MGF1(algorithm=hashes.SHA1()), + salt_length=padding.PSS.MAX_LENGTH + ), + hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -853,17 +838,16 @@ def test_invalid_pss_signature_wrong_key(self, backend): ), e=65537 ).public_key(backend) - verifier = public_key.verifier( - signature, - padding.PSS( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH - ), - hashes.SHA1() - ) - verifier.update(b"sign me") with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, + b"sign me", + padding.PSS( + mgf=padding.MGF1(algorithm=hashes.SHA1()), + salt_length=padding.PSS.MAX_LENGTH + ), + hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -889,17 +873,16 @@ def test_invalid_pss_signature_data_too_large_for_modulus(self, backend): ), e=65537 ).public_key(backend) - verifier = public_key.verifier( - signature, - padding.PSS( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH - ), - hashes.SHA1() - ) - verifier.update(b"sign me") with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, + b"sign me", + padding.PSS( + mgf=padding.MGF1(algorithm=hashes.SHA1()), + salt_length=padding.PSS.MAX_LENGTH + ), + hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -910,9 +893,9 @@ def test_invalid_pss_signature_data_too_large_for_modulus(self, backend): def test_use_after_finalize(self, backend): private_key = RSA_KEY_512.private_key(backend) public_key = private_key.public_key() - signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) - signer.update(b"sign me") - signature = signer.finalize() + signature = private_key.sign( + b"sign me", padding.PKCS1v15(), hashes.SHA1() + ) verifier = public_key.verifier( signature, @@ -930,8 +913,8 @@ def test_unsupported_padding(self, backend): private_key = RSA_KEY_512.private_key(backend) public_key = private_key.public_key() with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_PADDING): - public_key.verifier( - b"sig", DummyAsymmetricPadding(), hashes.SHA1() + public_key.verify( + b"sig", b"msg", DummyAsymmetricPadding(), hashes.SHA1() ) @pytest.mark.supported( @@ -955,7 +938,7 @@ def test_padding_incorrect_type(self, backend): private_key = RSA_KEY_512.private_key(backend) public_key = private_key.public_key() with pytest.raises(TypeError): - public_key.verifier(b"sig", "notpadding", hashes.SHA1()) + public_key.verify(b"sig", b"msg", "notpadding", hashes.SHA1()) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -967,8 +950,9 @@ def test_unsupported_pss_mgf(self, backend): private_key = RSA_KEY_512.private_key(backend) public_key = private_key.public_key() with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_MGF): - public_key.verifier( + public_key.verify( b"sig", + b"msg", padding.PSS( mgf=DummyMGF(), salt_length=padding.PSS.MAX_LENGTH @@ -997,8 +981,9 @@ def test_pss_verify_digest_too_large_for_key_size(self, backend): ) public_key = private_key.public_key() with pytest.raises(ValueError): - public_key.verifier( + public_key.verify( signature, + b"msg doesn't matter", padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), salt_length=padding.PSS.MAX_LENGTH @@ -1028,28 +1013,25 @@ def test_pss_verify_salt_length_too_long(self, backend): ), e=65537 ).public_key(backend) - verifier = public_key.verifier( - signature, - padding.PSS( - mgf=padding.MGF1( - algorithm=hashes.SHA1(), - ), - salt_length=1000000 - ), - hashes.SHA1() - ) - verifier.update(b"sign me") with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify( + signature, + b"sign me", + padding.PSS( + mgf=padding.MGF1( + algorithm=hashes.SHA1(), + ), + salt_length=1000000 + ), + hashes.SHA1() + ) def test_verify(self, backend): private_key = RSA_KEY_512.private_key(backend) message = b"one little message" pkcs = padding.PKCS1v15() algorithm = hashes.SHA1() - signer = private_key.signer(pkcs, algorithm) - signer.update(message) - signature = signer.finalize() + signature = private_key.sign(message, pkcs, algorithm) public_key = private_key.public_key() public_key.verify(signature, message, pkcs, algorithm) From efad55978bd836380e423faa03503c0f537da3c4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 6 Jul 2018 11:43:26 -0400 Subject: [PATCH 277/988] Make our locking setup function compy with our style guide (#4316) And not expose an unprefixed name to anyone who dlopens us. --- src/_cffi_src/openssl/callbacks.py | 4 ++-- src/cryptography/hazmat/bindings/openssl/binding.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/_cffi_src/openssl/callbacks.py b/src/_cffi_src/openssl/callbacks.py index e215ed4ef4d9..13c4e10c071e 100644 --- a/src/_cffi_src/openssl/callbacks.py +++ b/src/_cffi_src/openssl/callbacks.py @@ -33,7 +33,7 @@ """ FUNCTIONS = """ -int _setup_ssl_threads(void); +int Cryptography_setup_ssl_threads(void); int Cryptography_pem_password_cb(char *, int, int, void *); """ @@ -120,7 +120,7 @@ } -int _setup_ssl_threads(void) { +int Cryptography_setup_ssl_threads(void) { if (_ssl_locks == NULL) { _ssl_locks_count = CRYPTO_num_locks(); _ssl_locks = calloc(_ssl_locks_count, sizeof(Cryptography_mutex)); diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 7d528adbbca5..81cf547ac008 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -145,7 +145,7 @@ def init_static_locks(cls): # If nothing else has setup a locking callback already, we set up # our own - res = lib._setup_ssl_threads() + res = lib.Cryptography_setup_ssl_threads() _openssl_assert(cls.lib, res == 1) From dd6f4c2977ff03ba0e45e3528f49f126f587f123 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 8 Jul 2018 21:20:43 -0400 Subject: [PATCH 278/988] Convert a pair of asserts to use openssl_assert (#4318) We have an existence proof that the latter assertion can be triggered, and I bet the former can too. --- src/cryptography/hazmat/backends/openssl/rsa.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 1b6ebfd7751f..e7a77312d03c 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -129,7 +129,7 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): def _handle_rsa_enc_dec_error(backend, key): errors = backend._consume_errors() - assert errors + backend.openssl_assert(errors) assert errors[0].lib == backend._lib.ERR_LIB_RSA if isinstance(key, _RSAPublicKey): assert (errors[0].reason == @@ -265,7 +265,7 @@ def _rsa_sig_verify(backend, padding, algorithm, public_key, signature, data): backend.openssl_assert(res >= 0) if res == 0: errors = backend._consume_errors() - assert errors + backend.openssl_assert(errors) raise InvalidSignature From 9e1873af35a2b530e71e1579b2d62c233b75ba26 Mon Sep 17 00:00:00 2001 From: Marti Raudsepp Date: Mon, 9 Jul 2018 16:11:18 +0300 Subject: [PATCH 279/988] Make RelativeDistinguishedName preserve attribtue order (#4306) Duplicate attributes now raise an error instead of silently discarding duplicates. --- CHANGELOG.rst | 3 +++ docs/x509/reference.rst | 5 +++-- src/cryptography/x509/name.py | 11 ++++++++--- tests/x509/test_x509.py | 15 +++++++++------ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c3a415c35b05..70be0520d81c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,9 @@ Changelog ``cryptography`` release. * Fixed multiple issues preventing ``cryptography`` from compiling against LibreSSL 2.7.x. +* The :class:`~cryptography.x509.RelativeDistinguishedName` class now + preserves the order of attributes. Duplicate attributes now raise an error + instead of silently discarding duplicates. .. _v2-2-2: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 3fc6507ee859..64097bf27b3e 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1117,7 +1117,7 @@ X.509 CSR (Certificate Signing Request) Builder Object Technically, a Name is a list of *sets* of attributes, called *Relative Distinguished Names* or *RDNs*, although multi-valued RDNs are rarely encountered. The iteration order of values within a multi-valued RDN is - undefined. If you need to handle multi-valued RDNs, the ``rdns`` property + preserved. If you need to handle multi-valued RDNs, the ``rdns`` property gives access to an ordered list of :class:`RelativeDistinguishedName` objects. @@ -1203,7 +1203,8 @@ X.509 CSR (Certificate Signing Request) Builder Object .. versionadded:: 1.6 A relative distinguished name is a non-empty set of name attributes. The - object is iterable to get every attribute. + object is iterable to get every attribute, preserving the original order. + Passing duplicate attributes to the constructor raises ``ValueError``. .. method:: get_attributes_for_oid(oid) diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 0daa8bbd4816..5548eda8b7e7 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -101,13 +101,18 @@ def __repr__(self): class RelativeDistinguishedName(object): def __init__(self, attributes): - attributes = frozenset(attributes) + attributes = list(attributes) if not attributes: raise ValueError("a relative distinguished name cannot be empty") if not all(isinstance(x, NameAttribute) for x in attributes): raise TypeError("attributes must be an iterable of NameAttribute") + # Keep list and frozenset to preserve attribute order where it matters self._attributes = attributes + self._attribute_set = frozenset(attributes) + + if len(self._attribute_set) != len(attributes): + raise ValueError("duplicate attributes are not allowed") def get_attributes_for_oid(self, oid): return [i for i in self if i.oid == oid] @@ -116,13 +121,13 @@ def __eq__(self, other): if not isinstance(other, RelativeDistinguishedName): return NotImplemented - return self._attributes == other._attributes + return self._attribute_set == other._attribute_set def __ne__(self, other): return not self == other def __hash__(self): - return hash(self._attributes) + return hash(self._attribute_set) def __iter__(self): return iter(self._attributes) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 335a0fbf520f..7f9f1830c216 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -3886,11 +3886,11 @@ def test_init_not_nameattribute(self): x509.RelativeDistinguishedName(["not-a-NameAttribute"]) def test_init_duplicate_attribute(self): - rdn = x509.RelativeDistinguishedName([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1'), - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1'), - ]) - assert len(rdn) == 1 + with pytest.raises(ValueError): + x509.RelativeDistinguishedName([ + x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'val1'), + x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'val1'), + ]) def test_hash(self): rdn1 = x509.RelativeDistinguishedName([ @@ -3932,8 +3932,11 @@ def test_ne(self): assert rdn1 != object() def test_iter_input(self): + # Order must be preserved too attrs = [ - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1') + x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1'), + x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value2'), + x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value3') ] rdn = x509.RelativeDistinguishedName(iter(attrs)) assert list(rdn) == attrs From 01c9dac7c0ac33fb3dd73ab32322f7fc1699c059 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 9 Jul 2018 20:13:01 +0530 Subject: [PATCH 280/988] document that an ECPublicNumbers object has some unexpected properties (#4319) * document that an ECPublicNumbers object has some unexpected properties It is not guaranteed to be a valid point on the curve as that is not checked until you convert it to a PublicKey object. * different language * move the text, make it a warning, alter the language * new language --- docs/hazmat/primitives/asymmetric/ec.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index bbab2246313a..ab781e922b75 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -152,6 +152,13 @@ Elliptic Curve Signature Algorithms .. class:: EllipticCurvePublicNumbers(x, y, curve) + .. warning:: + The point represented by this object is not validated in any way until + :meth:`EllipticCurvePublicNumbers.public_key` is called and may not + represent a valid point on the curve. You should not attempt to perform + any computations using the values from this class until you have either + validated it yourself or called ``public_key()`` successfully. + .. versionadded:: 0.5 The collection of integers that make up an EC public key. @@ -182,6 +189,7 @@ Elliptic Curve Signature Algorithms :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend`. + :raises ValueError: Raised if the point is invalid for the curve. :returns: A new instance of :class:`EllipticCurvePublicKey`. .. method:: encode_point() From 20ae2c8084812bd218d2b1d2972774963c4d2041 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Jul 2018 04:55:02 +0530 Subject: [PATCH 281/988] fix encoding BMPString in x509 name entries (#4321) Previously we encoded them as UTF-8, but as best I can tell in reality a BMPString is fixed-width basic multilingual plane big endian encoding. This is basically UCS-2 (aka original Unicode). However, Python doesn't support UCS-2 encoding so we need to use utf_16_be. This means you can encode surrogate code points that are invalid in the context of what a BMPString is supposed to be, but in reality I strongly suspect the sane encoding ship has sailed and dozens if not hundreds of implementations both do this and expect other systems to handle their nonsense. --- .../hazmat/backends/openssl/encode_asn1.py | 9 +++++++-- tests/x509/test_x509.py | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 4bea03e6c32d..a2c7ed73dc04 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -14,6 +14,7 @@ _CRL_ENTRY_REASON_ENUM_TO_CODE, _DISTPOINT_TYPE_FULLNAME, _DISTPOINT_TYPE_RELATIVENAME ) +from cryptography.x509.name import _ASN1Type from cryptography.x509.oid import CRLEntryExtensionOID, ExtensionOID @@ -116,11 +117,15 @@ def _encode_sk_name_entry(backend, attributes): def _encode_name_entry(backend, attribute): - value = attribute.value.encode('utf8') + if attribute._type is _ASN1Type.BMPString: + value = attribute.value.encode('utf_16_be') + else: + value = attribute.value.encode('utf8') + obj = _txt2obj_gc(backend, attribute.oid.dotted_string) name_entry = backend._lib.X509_NAME_ENTRY_create_by_OBJ( - backend._ffi.NULL, obj, attribute._type.value, value, -1 + backend._ffi.NULL, obj, attribute._type.value, value, len(value) ) return name_entry diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 7f9f1830c216..fe57784a352c 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -4092,6 +4092,24 @@ def test_bytes(self, backend): b"b060355040a0c0450794341" ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_bmpstring_bytes(self, backend): + # For this test we need an odd length string. BMPString is UCS-2 + # encoded so it will always be even length and OpenSSL will error if + # you pass an odd length string without encoding it properly first. + name = x509.Name([ + x509.NameAttribute( + NameOID.COMMON_NAME, + u'cryptography.io', + _ASN1Type.BMPString + ), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), + ]) + assert name.public_bytes(backend) == binascii.unhexlify( + b"30383127302506035504031e1e00630072007900700074006f00670072006100" + b"7000680079002e0069006f310d300b060355040a0c0450794341" + ) + def test_random_serial_number(monkeypatch): sample_data = os.urandom(20) From 40baa274f979d29310ef54493d05cd2e52043417 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Jul 2018 16:39:00 +0530 Subject: [PATCH 282/988] fix a memory leak when calling X25519PrivateKey.public_key() (#4326) --- src/cryptography/hazmat/backends/openssl/x25519.py | 4 ++++ tests/hazmat/backends/test_openssl_memleak.py | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index f92b184bdec6..5599c2fd5bf5 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -42,6 +42,10 @@ def public_key(self): evp_pkey = self._backend._lib.d2i_PUBKEY_bio( bio, self._backend._ffi.NULL ) + self._backend.openssl_assert(evp_pkey != self._backend._ffi.NULL) + evp_pkey = self._backend._ffi.gc( + evp_pkey, self._backend._lib.EVP_PKEY_free + ) return _X25519PublicKey(self._backend, evp_pkey) def exchange(self, peer_public_key): diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index cd453541e097..5cb7cbc77fa7 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -225,3 +225,11 @@ def func(): from cryptography.hazmat.primitives.asymmetric import ec ec.derive_private_key(1, ec.SECP256R1(), backend) """)) + + def test_x25519_pubkey_from_private_key(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + from cryptography.hazmat.primitives.asymmetric import x25519 + private_key = x25519.X25519PrivateKey.generate() + private_key.public_key() + """)) From 43d02e7eabc13ed5f01a1e68aa595fd597d91729 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Jul 2018 18:44:45 +0530 Subject: [PATCH 283/988] we don't actually care about the errstack here, it's an invalid signature (#4325) * we don't actually care about the errstack here, it's an invalid signature We previously had no cases where we could error without getting errors on the error stack, but wycheproof contains test cases that can error without adding anything to the stack. Accordingly, we should clear the stack but raise InvalidSignature no matter what (rather than InternalError if we have no error msgs) * add a test --- .../hazmat/backends/openssl/rsa.py | 3 +- tests/hazmat/primitives/test_rsa.py | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index e7a77312d03c..9a7bfaa570ed 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -264,8 +264,7 @@ def _rsa_sig_verify(backend, padding, algorithm, public_key, signature, data): # occurs. backend.openssl_assert(res >= 0) if res == 0: - errors = backend._consume_errors() - backend.openssl_assert(errors) + backend._consume_errors() raise InvalidSignature diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 217c66801b06..ec08eadec967 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -731,6 +731,41 @@ def test_invalid_pkcs1v15_signature_wrong_data(self, backend): hashes.SHA1() ) + def test_invalid_signature_sequence_removed(self, backend): + """ + This test comes from wycheproof + """ + key_der = binascii.unhexlify( + b"30820122300d06092a864886f70d01010105000382010f003082010a02820101" + b"00a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224" + b"e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac88450" + b"97b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c9" + b"8e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9" + b"814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece" + b"6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a" + b"1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1" + b"a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9" + b"d50203010001" + ) + sig = binascii.unhexlify( + b"498209f59a0679a1f926eccf3056da2cba553d7ab3064e7c41ad1d739f038249" + b"f02f5ad12ee246073d101bc3cdb563e8b6be61562056422b7e6c16ad53deb12a" + b"f5de744197753a35859833f41bb59c6597f3980132b7478fd0b95fd27dfad64a" + b"20fd5c25312bbd41a85286cd2a83c8df5efa0779158d01b0747ff165b055eb28" + b"80ea27095700a295593196d8c5922cf6aa9d7e29b5056db5ded5eb20aeb31b89" + b"42e26b15a5188a4934cd7e39cfe379a197f49a204343a493452deebca436ee61" + b"4f4daf989e355544489f7e69ffa8ccc6a1e81cf0ab33c3e6d7591091485a6a31" + b"bda3b33946490057b9a3003d3fd9daf7c4778b43fd46144d945d815f12628ff4" + ) + public_key = serialization.load_der_public_key(key_der, backend) + with pytest.raises(InvalidSignature): + public_key.verify( + sig, + binascii.unhexlify(b"313233343030"), + padding.PKCS1v15(), + hashes.SHA256() + ) + @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() From d8aba9f3aa657f1241b7a0de3cb025327723b61d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Jul 2018 21:57:24 +0530 Subject: [PATCH 284/988] don't install docs when we build openssls...and do it parallel (#4327) --- .travis/install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis/install.sh b/.travis/install.sh index 673ac4b8ff73..6cb0a6b5ffff 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -22,7 +22,9 @@ if [ -n "${OPENSSL}" ]; then ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" shlib_sed make depend - make install + # avoid installing the docs + # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 + make -j"$(nproc)" install_sw install_ssldirs popd fi elif [ -n "${LIBRESSL}" ]; then From 05affa665700b7dc0e5aff427c943614a436615e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Jul 2018 22:51:37 +0530 Subject: [PATCH 285/988] try compiling with asm for our custom openssl (#4328) * try compiling with asm for our custom openssl * we also need to update the cache dir * try actually compiling it --- .travis.yml | 2 +- .travis/install.sh | 9 +++++---- .travis/run.sh | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 40a85a13ab2b..0c6862777780 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ language: python cache: directories: - $HOME/.cache/pip - - $HOME/ossl-1/ + - $HOME/ossl-2/ # Only build master, the version branches (e.g. 1.7.x), and # version tags (which are apparently considered branches by travis) diff --git a/.travis/install.sh b/.travis/install.sh index 6cb0a6b5ffff..a4aa9a42a0be 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -14,21 +14,22 @@ shlib_sed() { # download, compile, and install if it's not already present via travis # cache if [ -n "${OPENSSL}" ]; then - OPENSSL_DIR="ossl-1/${OPENSSL}" + OPENSSL_DIR="ossl-2/${OPENSSL}" if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then curl -O "https://www.openssl.org/source/openssl-${OPENSSL}.tar.gz" tar zxf "openssl-${OPENSSL}.tar.gz" pushd "openssl-${OPENSSL}" - ./config shared no-asm no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" + ./config shared no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" shlib_sed make depend + make -j"$(nproc)" # avoid installing the docs # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 - make -j"$(nproc)" install_sw install_ssldirs + make install_sw install_ssldirs popd fi elif [ -n "${LIBRESSL}" ]; then - LIBRESSL_DIR="ossl-1/${LIBRESSL}" + LIBRESSL_DIR="ossl-2/${LIBRESSL}" if [[ ! -f "$HOME/$LIBRESSL_DIR/bin/openssl" ]]; then curl -O "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL}.tar.gz" tar zxf "libressl-${LIBRESSL}.tar.gz" diff --git a/.travis/run.sh b/.travis/run.sh index a68ad1570343..32e9874bee2b 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -12,7 +12,7 @@ if [ -n "${LIBRESSL}" ]; then OPENSSL=$LIBRESSL fi if [ -n "${OPENSSL}" ]; then - OPENSSL_DIR="ossl-1/${OPENSSL}" + OPENSSL_DIR="ossl-2/${OPENSSL}" export PATH="$HOME/$OPENSSL_DIR/bin:$PATH" export CFLAGS="-I$HOME/$OPENSSL_DIR/include" From e74a263112847bf856c12128ce45f8d3ac2d116a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 10 Jul 2018 21:39:11 -0400 Subject: [PATCH 286/988] bump to latest libressl versions (#4329) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0c6862777780..4288eb4e5e4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,9 +44,9 @@ matrix: - python: 3.6 env: TOXENV=py36 LIBRESSL=2.4.5 - python: 3.6 - env: TOXENV=py36 LIBRESSL=2.6.4 + env: TOXENV=py36 LIBRESSL=2.6.5 - python: 3.6 - env: TOXENV=py36 LIBRESSL=2.7.3 + env: TOXENV=py36 LIBRESSL=2.7.4 - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0h addons: From 0fba4e28de2d0b5b8a262f512b65e487ded0c6e1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 12 Jul 2018 22:19:21 +0530 Subject: [PATCH 287/988] raise valueerror for null x25519 derived keys (#4332) * raise valueerror for null x25519 derived keys OpenSSL errors when it hits this edge case and a null shared key is bad anyway so let's raise an error * empty commit --- .../hazmat/backends/openssl/x25519.py | 6 +++++- tests/hazmat/primitives/test_x25519.py | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 5599c2fd5bf5..983ece6a97fe 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -71,5 +71,9 @@ def exchange(self, peer_public_key): self._backend.openssl_assert(keylen[0] > 0) buf = self._backend._ffi.new("unsigned char[]", keylen[0]) res = self._backend._lib.EVP_PKEY_derive(ctx, buf, keylen) - self._backend.openssl_assert(res == 1) + if res != 1: + raise ValueError( + "Null shared key derived from public/private pair." + ) + return self._backend._ffi.buffer(buf, keylen[0])[:] diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index 22a0ae66f722..381be201a63f 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -76,6 +76,23 @@ def test_rfc7748_1000_iteration(self, backend): assert computed_shared_key == shared_key + def test_null_shared_key_raises_error(self, backend): + """ + The vector used here is taken from wycheproof's x25519 test vectors + """ + public = binascii.unhexlify( + "5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157" + ) + private = binascii.unhexlify( + "78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296" + ) + private_key = X25519PrivateKey._from_private_bytes( + private + ) + public_key = X25519PublicKey.from_public_bytes(public) + with pytest.raises(ValueError): + private_key.exchange(public_key) + # These vectors are also from RFC 7748 # https://tools.ietf.org/html/rfc7748#section-6.1 @pytest.mark.parametrize( From 33db1c83b7ccb18e3319dedb5c7eb38edb74d8ab Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 14 Jul 2018 20:13:13 +0530 Subject: [PATCH 288/988] switch cryptography wheel builders back to pip wheel (#4334) --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 1cd764176e64..5f98276ca467 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -111,18 +111,14 @@ def build(version, label, imageName) { source .venv/bin/activate pip install -U wheel # upgrade wheel to latest before we use it to build the wheel pip install cffi six idna asn1crypto ipaddress enum34 - pip download cryptography==$BUILD_VERSION --no-binary cryptography --no-deps - tar zxf cryptography* - pushd cryptography* REGEX="py3([0-9])*" if [[ "${version}" =~ \$REGEX ]]; then - PY_LIMITED_API="--py-limited-api=cp3\${BASH_REMATCH[1]}" + PY_LIMITED_API="--build-option --py-limited-api=cp3\${BASH_REMATCH[1]}" fi CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ - python setup.py bdist_wheel --dist-dir=../wheelhouse \$PY_LIMITED_API - popd + pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography --no-deps \$PY_LIMITED_API pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" otool -L `find .venv -name '_openssl*.so'` @@ -139,8 +135,6 @@ def build(version, label, imageName) { set -x -e $linux32 /opt/python/$version/bin/pip install cffi six idna asn1crypto ipaddress enum34 - $linux32 /opt/python/$version/bin/pip download cryptography==$BUILD_VERSION --no-binary cryptography --no-deps - tar zxf cryptography* # Because we are doing this as root in the container, but we write to a mounted dir that is outside the container # we need to make sure we set these files writable such that the jenkins user can delete them afterwards mkdir -p tmpwheelhouse @@ -148,16 +142,13 @@ def build(version, label, imageName) { chmod -R 777 tmpwheelhouse chmod -R 777 wheelhouse - pushd cryptography* REGEX="cp3([0-9])*" if [[ "${version}" =~ \$REGEX ]]; then - PY_LIMITED_API="--py-limited-api=cp3\${BASH_REMATCH[1]}" + PY_LIMITED_API="--build-option --py-limited-api=cp3\${BASH_REMATCH[1]}" fi LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - $linux32 /opt/python/$version/bin/python setup.py bdist_wheel --dist-dir=../tmpwheelhouse \$PY_LIMITED_API - popd - chmod -R 777 cryptography* + $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse \$PY_LIMITED_API $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ unzip wheelhouse/*.whl -d execstack.check chmod -R 777 execstack.check From bb23c6c7cbb3f62f1b1b2480f9dc07c6beba3398 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 15 Jul 2018 09:15:16 +0530 Subject: [PATCH 289/988] document one shot AEAD length restrictions (#4322) * document one shot AEAD length restrictions * write a test that won't consume infinity ram continue to raise OverflowError since that's what cffi did. * this applies to associated_data too * remove unneeded arg * review feedback on docs --- docs/hazmat/primitives/aead.rst | 6 +++ .../hazmat/primitives/ciphers/aead.py | 24 ++++++++++++ tests/hazmat/primitives/test_aead.py | 38 +++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/docs/hazmat/primitives/aead.rst b/docs/hazmat/primitives/aead.rst index ee4214a1501b..a54cc6fad271 100644 --- a/docs/hazmat/primitives/aead.rst +++ b/docs/hazmat/primitives/aead.rst @@ -60,6 +60,8 @@ also support providing integrity for associated data which is not encrypted. authenticated with the key, but does not need to be encrypted. Can be ``None``. :returns bytes: The ciphertext bytes with the 16 byte tag appended. + :raises OverflowError: If ``data`` or ``associated_data`` is larger + than 2\ :sup:`32` bytes. .. method:: decrypt(nonce, data, associated_data) @@ -128,6 +130,8 @@ also support providing integrity for associated data which is not encrypted. :param bytes associated_data: Additional data that should be authenticated with the key, but is not encrypted. Can be ``None``. :returns bytes: The ciphertext bytes with the 16 byte tag appended. + :raises OverflowError: If ``data`` or ``associated_data`` is larger + than 2\ :sup:`32` bytes. .. method:: decrypt(nonce, data, associated_data) @@ -212,6 +216,8 @@ also support providing integrity for associated data which is not encrypted. :param bytes associated_data: Additional data that should be authenticated with the key, but is not encrypted. Can be ``None``. :returns bytes: The ciphertext bytes with the tag appended. + :raises OverflowError: If ``data`` or ``associated_data`` is larger + than 2\ :sup:`32` bytes. .. method:: decrypt(nonce, data, associated_data) diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index 415a45a9559b..9794d7682abc 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -12,6 +12,8 @@ class ChaCha20Poly1305(object): + _MAX_SIZE = 2 ** 32 + def __init__(self, key): if not backend.aead_cipher_supported(self): raise exceptions.UnsupportedAlgorithm( @@ -33,6 +35,12 @@ def encrypt(self, nonce, data, associated_data): if associated_data is None: associated_data = b"" + if len(data) > self._MAX_SIZE or len(associated_data) > self._MAX_SIZE: + # This is OverflowError to match what cffi would raise + raise OverflowError( + "Data or associated data too long. Max 2**32 bytes" + ) + self._check_params(nonce, data, associated_data) return aead._encrypt( backend, self, nonce, data, associated_data, 16 @@ -56,6 +64,8 @@ def _check_params(self, nonce, data, associated_data): class AESCCM(object): + _MAX_SIZE = 2 ** 32 + def __init__(self, key, tag_length=16): utils._check_bytes("key", key) if len(key) not in (16, 24, 32): @@ -90,6 +100,12 @@ def encrypt(self, nonce, data, associated_data): if associated_data is None: associated_data = b"" + if len(data) > self._MAX_SIZE or len(associated_data) > self._MAX_SIZE: + # This is OverflowError to match what cffi would raise + raise OverflowError( + "Data or associated data too long. Max 2**32 bytes" + ) + self._check_params(nonce, data, associated_data) self._validate_lengths(nonce, len(data)) return aead._encrypt( @@ -121,6 +137,8 @@ def _check_params(self, nonce, data, associated_data): class AESGCM(object): + _MAX_SIZE = 2 ** 32 + def __init__(self, key): utils._check_bytes("key", key) if len(key) not in (16, 24, 32): @@ -142,6 +160,12 @@ def encrypt(self, nonce, data, associated_data): if associated_data is None: associated_data = b"" + if len(data) > self._MAX_SIZE or len(associated_data) > self._MAX_SIZE: + # This is OverflowError to match what cffi would raise + raise OverflowError( + "Data or associated data too long. Max 2**32 bytes" + ) + self._check_params(nonce, data, associated_data) return aead._encrypt( backend, self, nonce, data, associated_data, 16 diff --git a/tests/hazmat/primitives/test_aead.py b/tests/hazmat/primitives/test_aead.py index dc2f357b1e5d..a0cc79e1439b 100644 --- a/tests/hazmat/primitives/test_aead.py +++ b/tests/hazmat/primitives/test_aead.py @@ -22,6 +22,11 @@ ) +class FakeData(object): + def __len__(self): + return 2 ** 32 + 1 + + def _aead_supported(cls): try: cls(b"0" * 32) @@ -46,6 +51,17 @@ def test_chacha20poly1305_unsupported_on_older_openssl(backend): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestChaCha20Poly1305(object): + def test_data_too_large(self): + key = ChaCha20Poly1305.generate_key() + chacha = ChaCha20Poly1305(key) + nonce = b"0" * 12 + + with pytest.raises(OverflowError): + chacha.encrypt(nonce, FakeData(), b"") + + with pytest.raises(OverflowError): + chacha.encrypt(nonce, b"", FakeData()) + def test_generate_key(self): key = ChaCha20Poly1305.generate_key() assert len(key) == 32 @@ -168,6 +184,17 @@ def test_aesccm_unsupported_on_older_openssl(backend): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESCCM(object): + def test_data_too_large(self): + key = AESCCM.generate_key(128) + aesccm = AESCCM(key) + nonce = b"0" * 12 + + with pytest.raises(OverflowError): + aesccm.encrypt(nonce, FakeData(), b"") + + with pytest.raises(OverflowError): + aesccm.encrypt(nonce, b"", FakeData()) + def test_default_tag_length(self, backend): key = AESCCM.generate_key(128) aesccm = AESCCM(key) @@ -309,6 +336,17 @@ def _load_gcm_vectors(): @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESGCM(object): + def test_data_too_large(self): + key = AESGCM.generate_key(128) + aesgcm = AESGCM(key) + nonce = b"0" * 12 + + with pytest.raises(OverflowError): + aesgcm.encrypt(nonce, FakeData(), b"") + + with pytest.raises(OverflowError): + aesgcm.encrypt(nonce, b"", FakeData()) + @pytest.mark.parametrize("vector", _load_gcm_vectors()) def test_vectors(self, vector): key = binascii.unhexlify(vector["key"]) From b09b9ecd695187f323c509aecdf517cadcf728d1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 15 Jul 2018 20:48:57 -0400 Subject: [PATCH 290/988] Change the exception we raise in keywrap unwrapping on invalid length (#4337) I believe this can reasonably be considered backwards compatible since other invalid inputs already lead to InvalidUnwrap, and clients shouldn't be distinguishing between these two conditions, and ValueError wasn't documented anyways. --- CHANGELOG.rst | 4 ++++ src/cryptography/hazmat/primitives/keywrap.py | 6 +++--- tests/hazmat/primitives/test_keywrap.py | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 70be0520d81c..8b4e97439b66 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -19,6 +19,10 @@ Changelog * The :class:`~cryptography.x509.RelativeDistinguishedName` class now preserves the order of attributes. Duplicate attributes now raise an error instead of silently discarding duplicates. +* :func:`~cryptography.hazmat.primitives.keywrap.aes_key_unwrap` and + :func:`~cryptography.hazmat.primitives.keywrap.aes_key_unwrap_with_padding` + now raise :class:`~cryptography.hazmat.primitives.keywrap.InvalidUnwrap` if + the wrapped key is an invalid length, instead of ``ValueError``. .. _v2-2-2: diff --git a/src/cryptography/hazmat/primitives/keywrap.py b/src/cryptography/hazmat/primitives/keywrap.py index 2b7955f8b056..f55c519cff33 100644 --- a/src/cryptography/hazmat/primitives/keywrap.py +++ b/src/cryptography/hazmat/primitives/keywrap.py @@ -89,7 +89,7 @@ def aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend): def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): if len(wrapped_key) < 16: - raise ValueError("Must be at least 16 bytes") + raise InvalidUnwrap("Must be at least 16 bytes") if len(wrapping_key) not in [16, 24, 32]: raise ValueError("The wrapping key must be a valid AES key length") @@ -132,10 +132,10 @@ def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): def aes_key_unwrap(wrapping_key, wrapped_key, backend): if len(wrapped_key) < 24: - raise ValueError("Must be at least 24 bytes") + raise InvalidUnwrap("Must be at least 24 bytes") if len(wrapped_key) % 8 != 0: - raise ValueError("The wrapped key must be a multiple of 8 bytes") + raise InvalidUnwrap("The wrapped key must be a multiple of 8 bytes") if len(wrapping_key) not in [16, 24, 32]: raise ValueError("The wrapping key must be a valid AES key length") diff --git a/tests/hazmat/primitives/test_keywrap.py b/tests/hazmat/primitives/test_keywrap.py index 9b1e43e42f31..c74b144b66fc 100644 --- a/tests/hazmat/primitives/test_keywrap.py +++ b/tests/hazmat/primitives/test_keywrap.py @@ -108,11 +108,11 @@ def test_wrap_invalid_key_to_wrap_length(self, backend): def test_unwrap_invalid_wrapped_key_length(self, backend): # Keys to unwrap must be at least 24 bytes - with pytest.raises(ValueError): + with pytest.raises(keywrap.InvalidUnwrap): keywrap.aes_key_unwrap(b"sixteen_byte_key", b"\x00" * 16, backend) # Keys to unwrap must be a multiple of 8 bytes - with pytest.raises(ValueError): + with pytest.raises(keywrap.InvalidUnwrap): keywrap.aes_key_unwrap(b"sixteen_byte_key", b"\x00" * 27, backend) @@ -189,7 +189,9 @@ def test_unwrap_additional_vectors(self, backend, params): def test_unwrap_invalid_wrapped_key_length(self, backend): # Keys to unwrap must be at least 16 bytes - with pytest.raises(ValueError, match='Must be at least 16 bytes'): + with pytest.raises( + keywrap.InvalidUnwrap, match='Must be at least 16 bytes' + ): keywrap.aes_key_unwrap_with_padding( b"sixteen_byte_key", b"\x00" * 15, backend ) From 2e85a925b49e566776585f35a7c0653510d84262 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 16 Jul 2018 11:18:33 -0400 Subject: [PATCH 291/988] Refs #3331 -- added initial wycheproof integration, starting with x25519, rsa, and keywrap (#4310) * Refs #3331 -- added initial wycheproof integration, starting with x25519 tests --- .travis/install.sh | 3 ++ .travis/run.sh | 2 +- Jenkinsfile | 16 ++++-- tests/conftest.py | 19 ++++++- tests/utils.py | 41 +++++++++++++++ tests/wycheproof/__init__.py | 0 tests/wycheproof/test_keywrap.py | 61 +++++++++++++++++++++++ tests/wycheproof/test_rsa.py | 85 ++++++++++++++++++++++++++++++++ tests/wycheproof/test_utils.py | 21 ++++++++ tests/wycheproof/test_x25519.py | 42 ++++++++++++++++ tox.ini | 1 + 11 files changed, 286 insertions(+), 5 deletions(-) create mode 100644 tests/wycheproof/__init__.py create mode 100644 tests/wycheproof/test_keywrap.py create mode 100644 tests/wycheproof/test_rsa.py create mode 100644 tests/wycheproof/test_utils.py create mode 100644 tests/wycheproof/test_x25519.py diff --git a/.travis/install.sh b/.travis/install.sh index a4aa9a42a0be..e3b20fdb8d6a 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -40,6 +40,9 @@ elif [ -n "${LIBRESSL}" ]; then popd fi fi + +git clone --depth=1 https://github.com/google/wycheproof $HOME/wycheproof + pip install virtualenv python -m virtualenv ~/.venv diff --git a/.travis/run.sh b/.travis/run.sh index 32e9874bee2b..38b66528d7af 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -24,7 +24,7 @@ fi source ~/.venv/bin/activate if [ -n "${TOXENV}" ]; then - tox + tox -- --wycheproof-root=$HOME/wycheproof else pip install . case "${DOWNSTREAM}" in diff --git a/Jenkinsfile b/Jenkinsfile index 2697b8f60406..816e9de84ba8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -144,6 +144,16 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { timeout(time: 30, unit: 'MINUTES') { checkout_git(label) + checkout([ + $class: 'GitSCM', + extensions: [[ + $class: 'RelativeTargetDirectory', + relativeTargetDir: 'wycheproof', + ]], + userRemoteConfigs: [[ + 'url': 'https://github.com/google/wycheproof', + ]] + ]) withCredentials([string(credentialsId: 'cryptography-codecov-token', variable: 'CODECOV_TOKEN')]) { withEnv(["LABEL=$label", "TOXENV=$toxenv", "IMAGE_NAME=$imageName"]) { @@ -185,7 +195,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { @set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE% @set LIB="${opensslPaths[label]['lib']}";%LIB% - tox -r + tox -r -- --wycheproof-root=../wycheproof IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% virtualenv .codecov call .codecov/Scripts/activate @@ -205,7 +215,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ - tox -r -- --color=yes + tox -r -- --color=yes --wycheproof-root=../wycheproof virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini @@ -218,7 +228,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { sh """#!/usr/bin/env bash set -xe cd cryptography - tox -r -- --color=yes + tox -r -- --color=yes --wycheproof-root=../wycheproof virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini diff --git a/tests/conftest.py b/tests/conftest.py index c5efbd36a340..583c4099d9a9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,13 +8,30 @@ from cryptography.hazmat.backends.openssl import backend as openssl_backend -from .utils import check_backend_support +from .utils import ( + check_backend_support, load_wycheproof_tests, skip_if_wycheproof_none +) def pytest_report_header(config): return "OpenSSL: {0}".format(openssl_backend.openssl_version_text()) +def pytest_addoption(parser): + parser.addoption("--wycheproof-root", default=None) + + +def pytest_generate_tests(metafunc): + if "wycheproof" in metafunc.fixturenames: + wycheproof = metafunc.config.getoption("--wycheproof-root") + skip_if_wycheproof_none(wycheproof) + + testcases = [] + for path in metafunc.function.wycheproof_tests.args: + testcases.extend(load_wycheproof_tests(wycheproof, path)) + metafunc.parametrize("wycheproof", testcases) + + @pytest.fixture() def backend(request): required_interfaces = [ diff --git a/tests/utils.py b/tests/utils.py index b721f3440f0a..ccc3b7c1bbea 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -6,7 +6,9 @@ import binascii import collections +import json import math +import os import re from contextlib import contextmanager @@ -884,3 +886,42 @@ def load_nist_ccm_vectors(vector_data): test_data[name.lower()] = value.encode("ascii") return data + + +class WycheproofTest(object): + def __init__(self, testgroup, testcase): + self.testgroup = testgroup + self.testcase = testcase + + def __repr__(self): + return "".format( + self.testgroup, self.testcase, self.testcase["tcId"], + ) + + @property + def valid(self): + return self.testcase["result"] == "valid" + + @property + def acceptable(self): + return self.testcase["result"] == "acceptable" + + def has_flag(self, flag): + return flag in self.testcase["flags"] + + +def skip_if_wycheproof_none(wycheproof): + # This is factored into its own function so we can easily test both + # branches + if wycheproof is None: + pytest.skip("--wycheproof-root not provided") + + +def load_wycheproof_tests(wycheproof, test_file): + path = os.path.join(wycheproof, "testvectors", test_file) + with open(path) as f: + data = json.load(f) + for group in data["testGroups"]: + cases = group.pop("tests") + for c in cases: + yield WycheproofTest(group, c) diff --git a/tests/wycheproof/__init__.py b/tests/wycheproof/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/wycheproof/test_keywrap.py b/tests/wycheproof/test_keywrap.py new file mode 100644 index 000000000000..5f694e4d3346 --- /dev/null +++ b/tests/wycheproof/test_keywrap.py @@ -0,0 +1,61 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.hazmat.backends.interfaces import CipherBackend +from cryptography.hazmat.primitives import keywrap + + +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("kwp_test.json") +def test_keywrap_with_padding(backend, wycheproof): + wrapping_key = binascii.unhexlify(wycheproof.testcase["key"]) + key_to_wrap = binascii.unhexlify(wycheproof.testcase["msg"]) + expected = binascii.unhexlify(wycheproof.testcase["ct"]) + + result = keywrap.aes_key_wrap_with_padding( + wrapping_key, key_to_wrap, backend + ) + if wycheproof.valid or wycheproof.acceptable: + assert result == expected + + if wycheproof.valid or (wycheproof.acceptable and not len(expected) < 16): + result = keywrap.aes_key_unwrap_with_padding( + wrapping_key, expected, backend + ) + assert result == key_to_wrap + else: + with pytest.raises(keywrap.InvalidUnwrap): + keywrap.aes_key_unwrap_with_padding( + wrapping_key, expected, backend + ) + + +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("kw_test.json") +def test_keywrap(backend, wycheproof): + wrapping_key = binascii.unhexlify(wycheproof.testcase["key"]) + key_to_wrap = binascii.unhexlify(wycheproof.testcase["msg"]) + expected = binascii.unhexlify(wycheproof.testcase["ct"]) + + if ( + wycheproof.valid or ( + wycheproof.acceptable and + wycheproof.testcase["comment"] != "invalid size of wrapped key" + ) + ): + result = keywrap.aes_key_wrap(wrapping_key, key_to_wrap, backend) + assert result == expected + + if wycheproof.valid or wycheproof.acceptable: + result = keywrap.aes_key_unwrap(wrapping_key, expected, backend) + assert result == key_to_wrap + else: + with pytest.raises(keywrap.InvalidUnwrap): + keywrap.aes_key_unwrap(wrapping_key, expected, backend) diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py new file mode 100644 index 000000000000..b8f2e19d093c --- /dev/null +++ b/tests/wycheproof/test_rsa.py @@ -0,0 +1,85 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.backends.interfaces import RSABackend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import padding + + +_DIGESTS = { + "SHA-1": hashes.SHA1(), + "SHA-224": hashes.SHA224(), + "SHA-256": hashes.SHA256(), + "SHA-384": hashes.SHA384(), + "SHA-512": hashes.SHA512(), +} + + +def should_verify(backend, wycheproof): + if wycheproof.valid: + return True + + if wycheproof.acceptable: + if ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER and + wycheproof.has_flag("MissingNull") + ): + return False + return True + + return False + + +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.supported( + only_if=lambda backend: ( + # TODO: this also skips on LibreSSL, which is ok for now, since these + # don't pass on Libre, but we'll need to fix this after they resolve + # it. + not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 + ), + skip_message=( + "Many of these tests fail on OpenSSL < 1.0.2 and since upstream isn't" + " maintaining it, they'll never be fixed." + ), +) +@pytest.mark.wycheproof_tests( + "rsa_signature_test.json", + "rsa_signature_2048_sha224_test.json", + "rsa_signature_2048_sha256_test.json", + "rsa_signature_2048_sha512_test.json", + "rsa_signature_3072_sha256_test.json", + "rsa_signature_3072_sha384_test.json", + "rsa_signature_3072_sha512_test.json", + "rsa_signature_4096_sha384_test.json", + "rsa_signature_4096_sha512_test.json", +) +def test_rsa_signature(backend, wycheproof): + key = serialization.load_der_public_key( + binascii.unhexlify(wycheproof.testgroup["keyDer"]), backend + ) + digest = _DIGESTS[wycheproof.testgroup["sha"]] + + if should_verify(backend, wycheproof): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + padding.PKCS1v15(), + digest, + ) + else: + with pytest.raises(InvalidSignature): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + padding.PKCS1v15(), + digest, + ) diff --git a/tests/wycheproof/test_utils.py b/tests/wycheproof/test_utils.py new file mode 100644 index 000000000000..82c0a3596396 --- /dev/null +++ b/tests/wycheproof/test_utils.py @@ -0,0 +1,21 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import pytest + +from ..utils import WycheproofTest, skip_if_wycheproof_none + + +def test_wycheproof_test_repr(): + wycheproof = WycheproofTest({}, {"tcId": 3}) + assert repr(wycheproof) == "" + + +def test_skip_if_wycheproof_none(): + with pytest.raises(pytest.skip.Exception): + skip_if_wycheproof_none(None) + + skip_if_wycheproof_none("abc") diff --git a/tests/wycheproof/test_x25519.py b/tests/wycheproof/test_x25519.py new file mode 100644 index 000000000000..5e6253ce1432 --- /dev/null +++ b/tests/wycheproof/test_x25519.py @@ -0,0 +1,42 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives.asymmetric.x25519 import ( + X25519PrivateKey, X25519PublicKey +) + + +@pytest.mark.supported( + only_if=lambda backend: backend.x25519_supported(), + skip_message="Requires OpenSSL with X25519 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +@pytest.mark.wycheproof_tests("x25519_test.json") +def test_x25519(backend, wycheproof): + assert list(wycheproof.testgroup.items()) == [("curve", "curve25519")] + + private_key = X25519PrivateKey._from_private_bytes( + binascii.unhexlify(wycheproof.testcase["private"]) + ) + public_key = X25519PublicKey.from_public_bytes( + binascii.unhexlify(wycheproof.testcase["public"]) + ) + + assert wycheproof.valid or wycheproof.acceptable + + expected = binascii.unhexlify(wycheproof.testcase["shared"]) + if expected == b"\x00" * 32: + assert wycheproof.acceptable + # OpenSSL returns an error on all zeros shared key + with pytest.raises(ValueError): + private_key.exchange(public_key) + else: + assert private_key.exchange(public_key) == expected diff --git a/tox.ini b/tox.ini index b76bfc972a85..cb882a8aa339 100644 --- a/tox.ini +++ b/tox.ini @@ -89,3 +89,4 @@ addopts = -r s markers = requires_backend_interface: this test requires a specific backend interface supported: parametrized test requiring only_if and skip_message + wycheproof_tests: this test runs a wycheproof fixture From 5d187402775bcb7bc8b0da1d972d36bf9ad9dbff Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 16 Jul 2018 20:49:51 +0530 Subject: [PATCH 292/988] add crl.get_revoked_certificate method (#4331) * add crl.get_revoked_certificate method * lexicographic is the best ographic * rename --- CHANGELOG.rst | 3 +++ docs/x509/reference.rst | 9 +++++++++ src/_cffi_src/openssl/x509.py | 2 ++ .../hazmat/backends/openssl/x509.py | 19 +++++++++++++++++++ src/cryptography/x509/base.py | 7 +++++++ tests/x509/test_x509.py | 12 ++++++++++++ 6 files changed, 52 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8b4e97439b66..c8db7e7de14d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,9 @@ Changelog ``cryptography`` release. * Fixed multiple issues preventing ``cryptography`` from compiling against LibreSSL 2.7.x. +* Added + :class:`~cryptography.x509.CertificateRevocationList.get_revoked_certificate_by_serial_number` + for quick serial number searches in CRLs. * The :class:`~cryptography.x509.RelativeDistinguishedName` class now preserves the order of attributes. Duplicate attributes now raise an error instead of silently discarding duplicates. diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 64097bf27b3e..bc3dd5566f86 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -463,6 +463,15 @@ X.509 CRL (Certificate Revocation List) Object >>> crl.fingerprint(hashes.SHA256()) b'e\xcf.\xc4:\x83?1\xdc\xf3\xfc\x95\xd7\xb3\x87\xb3\x8e\xf8\xb93!\x87\x07\x9d\x1b\xb4!\xb9\xe4W\xf4\x1f' + .. method:: get_revoked_certificate_by_serial_number(serial_number) + + .. versionadded:: 2.3 + + :param serial_number: The serial as a Python integer. + :returns: :class:`~cryptography.x509.RevokedCertificate` if the + ``serial_number`` is present in the CRL or ``None`` if it + is not. + .. attribute:: signature_hash_algorithm :type: :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 97ade5bca1ef..59fdbf7e4c88 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -238,6 +238,8 @@ X509_EXTENSION *X509_CRL_get_ext(X509_CRL *, int); int X509_CRL_get_ext_count(X509_CRL *); +int X509_CRL_get0_by_serial(X509_CRL *, X509_REVOKED **, ASN1_INTEGER *); + /* these CRYPTO_EX_DATA functions became macros in 1.1.0 */ int X509_get_ex_new_index(long, void *, CRYPTO_EX_new *, CRYPTO_EX_dup *, CRYPTO_EX_free *); diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 9637fc0e45bf..b870eeb773e0 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -16,6 +16,9 @@ _REVOKED_CERTIFICATE_EXTENSION_PARSER, _asn1_integer_to_int, _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_time ) +from cryptography.hazmat.backends.openssl.encode_asn1 import ( + _encode_asn1_int_gc +) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa @@ -235,6 +238,22 @@ def fingerprint(self, algorithm): h.update(der) return h.finalize() + def get_revoked_certificate_by_serial_number(self, serial_number): + revoked = self._backend._ffi.new("X509_REVOKED **") + asn1_int = _encode_asn1_int_gc(self._backend, serial_number) + res = self._backend._lib.X509_CRL_get0_by_serial( + self._x509_crl, revoked, asn1_int + ) + if res == 0: + return None + else: + self._backend.openssl_assert( + revoked[0] != self._backend._ffi.NULL + ) + return _RevokedCertificate( + self._backend, self._x509_crl, revoked[0] + ) + @property def signature_hash_algorithm(self): oid = self.signature_algorithm_oid diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 45b603f0b96f..b14499c9de1f 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -189,6 +189,13 @@ def fingerprint(self, algorithm): Returns bytes using digest passed. """ + @abc.abstractmethod + def get_revoked_certificate_by_serial_number(self, serial_number): + """ + Returns an instance of RevokedCertificate or None if the serial_number + is not in the CRL. + """ + @abc.abstractproperty def signature_hash_algorithm(self): """ diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index fe57784a352c..5905e335a237 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -181,6 +181,18 @@ def test_revoked_cert_retrieval(self, backend): # Check that len() works for CRLs. assert len(crl) == 12 + def test_get_revoked_certificate_by_serial_number(self, backend): + crl = _load_cert( + os.path.join( + "x509", "PKITS_data", "crls", "LongSerialNumberCACRL.crl"), + x509.load_der_x509_crl, + backend + ) + serial_number = 725064303890588110203033396814564464046290047507 + revoked = crl.get_revoked_certificate_by_serial_number(serial_number) + assert revoked.serial_number == serial_number + assert crl.get_revoked_certificate_by_serial_number(500) is None + def test_revoked_cert_retrieval_retain_only_revoked(self, backend): """ This test attempts to trigger the crash condition described in From d1c73fd7827ea05505b033a0b126c35749430ea9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 19:33:05 +0800 Subject: [PATCH 293/988] add DSA wycheproof tests (#4346) --- tests/wycheproof/test_dsa.py | 49 ++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/wycheproof/test_dsa.py diff --git a/tests/wycheproof/test_dsa.py b/tests/wycheproof/test_dsa.py new file mode 100644 index 000000000000..3dc3056e1ab7 --- /dev/null +++ b/tests/wycheproof/test_dsa.py @@ -0,0 +1,49 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.backends.interfaces import DSABackend +from cryptography.hazmat.primitives import hashes, serialization + + +_DIGESTS = { + "SHA-1": hashes.SHA1(), + "SHA-224": hashes.SHA224(), + "SHA-256": hashes.SHA256(), +} + + +@pytest.mark.requires_backend_interface(interface=DSABackend) +@pytest.mark.wycheproof_tests( + "dsa_test.json", +) +def test_dsa_signature(backend, wycheproof): + key = serialization.load_der_public_key( + binascii.unhexlify(wycheproof.testgroup["keyDer"]), backend + ) + digest = _DIGESTS[wycheproof.testgroup["sha"]] + + if ( + wycheproof.valid or ( + wycheproof.acceptable and not wycheproof.has_flag("NoLeadingZero") + ) + ): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + digest, + ) + else: + with pytest.raises(InvalidSignature): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + digest, + ) From 160c9b20d47fe11311ce1d89aaa70d1d093e37e0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 20:27:52 +0800 Subject: [PATCH 294/988] add aes cbc pkcs5 wycheproof tests (#4347) --- tests/wycheproof/test_aes.py | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tests/wycheproof/test_aes.py diff --git a/tests/wycheproof/test_aes.py b/tests/wycheproof/test_aes.py new file mode 100644 index 000000000000..65db9cdb22ff --- /dev/null +++ b/tests/wycheproof/test_aes.py @@ -0,0 +1,42 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.hazmat.backends.interfaces import CipherBackend +from cryptography.hazmat.primitives import padding +from cryptography.hazmat.primitives.ciphers import ( + Cipher, algorithms, modes +) + + +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("aes_cbc_pkcs5_test.json") +def test_aes_cbc_pkcs5(backend, wycheproof): + key = binascii.unhexlify(wycheproof.testcase["key"]) + iv = binascii.unhexlify(wycheproof.testcase["iv"]) + msg = binascii.unhexlify(wycheproof.testcase["msg"]) + ct = binascii.unhexlify(wycheproof.testcase["ct"]) + + padder = padding.PKCS7(128).padder() + + cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend) + enc = cipher.encryptor() + computed_ct = enc.update( + padder.update(msg) + padder.finalize()) + enc.finalize() + dec = cipher.decryptor() + padded_msg = dec.update(ct) + dec.finalize() + unpadder = padding.PKCS7(128).unpadder() + if wycheproof.valid or wycheproof.acceptable: + assert computed_ct == ct + computed_msg = unpadder.update(padded_msg) + unpadder.finalize() + assert computed_msg == msg + else: + assert computed_ct != ct + with pytest.raises(ValueError): + unpadder.update(padded_msg) + unpadder.finalize() From c574e7554c7aa27c56f6478258a4e18f79457652 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 17 Jul 2018 09:20:13 -0400 Subject: [PATCH 295/988] Refs #3331 -- integrated wycheproof ECDSA tests (#4341) * Refs #3331 -- integrated wycheproof ECDSA tests * Also handle these key loading errors * review * empty commit to trigger jenkins --- tests/wycheproof/test_ecdsa.py | 76 ++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/wycheproof/test_ecdsa.py diff --git a/tests/wycheproof/test_ecdsa.py b/tests/wycheproof/test_ecdsa.py new file mode 100644 index 000000000000..5214052ec661 --- /dev/null +++ b/tests/wycheproof/test_ecdsa.py @@ -0,0 +1,76 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidSignature, UnsupportedAlgorithm +from cryptography.hazmat.backends.interfaces import EllipticCurveBackend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ec + + +_DIGESTS = { + "SHA-1": hashes.SHA1(), + "SHA-224": hashes.SHA224(), + "SHA-256": hashes.SHA256(), + "SHA-384": hashes.SHA384(), + "SHA-512": hashes.SHA512(), +} + + +@pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) +@pytest.mark.wycheproof_tests( + "ecdsa_test.json", + "ecdsa_brainpoolP224r1_sha224_test.json", + "ecdsa_brainpoolP256r1_sha256_test.json", + "ecdsa_brainpoolP320r1_sha384_test.json", + "ecdsa_brainpoolP384r1_sha384_test.json", + "ecdsa_brainpoolP512r1_sha512_test.json", + "ecdsa_secp224r1_sha224_test.json", + "ecdsa_secp224r1_sha256_test.json", + "ecdsa_secp224r1_sha512_test.json", + "ecdsa_secp256k1_sha256_test.json", + "ecdsa_secp256k1_sha512_test.json", + "ecdsa_secp256r1_sha256_test.json", + "ecdsa_secp256r1_sha512_test.json", + "ecdsa_secp384r1_sha384_test.json", + "ecdsa_secp384r1_sha512_test.json", + "ecdsa_secp521r1_sha512_test.json", +) +def test_ecdsa_signature(backend, wycheproof): + try: + key = serialization.load_der_public_key( + binascii.unhexlify(wycheproof.testgroup["keyDer"]), backend + ) + except (UnsupportedAlgorithm, ValueError): + # In OpenSSL 1.0.1, some keys fail to load with ValueError, instead of + # Unsupported Algorithm. We can remove handling for that exception + # when we drop support. + pytest.skip( + "unable to load key (curve {})".format( + wycheproof.testgroup["key"]["curve"] + ) + ) + digest = _DIGESTS[wycheproof.testgroup["sha"]] + + if ( + wycheproof.valid or + (wycheproof.acceptable and not wycheproof.has_flag("MissingZero")) + ): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + ec.ECDSA(digest), + ) + else: + with pytest.raises(InvalidSignature): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + ec.ECDSA(digest), + ) From d4378e42937b56f473ddade2667f919ce32208cb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 21:49:03 +0800 Subject: [PATCH 296/988] disallow implicit tag truncation with finalize_with_tag (#4342) --- CHANGELOG.rst | 5 +++++ docs/hazmat/primitives/symmetric-encryption.rst | 1 + .../hazmat/backends/openssl/ciphers.py | 5 +++++ .../hazmat/primitives/ciphers/modes.py | 1 + tests/hazmat/primitives/test_aes.py | 16 ++++++++++++++++ 5 files changed, 28 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c8db7e7de14d..5ac43d0dde49 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,11 @@ Changelog .. note:: This version is not yet released and is under active development. +* **SECURITY ISSUE:** + :meth:`~cryptography.hazmat.primitives.ciphers.AEADDecryptionContext.finalize_with_tag` + allowed tag truncation by default which can allow tag forgery in some cases. + The method now enforces the ``min_tag_length`` provided to the + :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM` constructor. * Added support for Python 3.7. * Added :meth:`~cryptography.fernet.Fernet.extract_timestamp` to get the authenticated timestamp of a :doc:`Fernet ` token. diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 5ebcca754d5e..5b6000902768 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -670,6 +670,7 @@ Interfaces :raises ValueError: This is raised when the data provided isn't a multiple of the algorithm's block size, if ``min_tag_length`` is less than 4, or if ``len(tag) < min_tag_length``. + ``min_tag_length`` is an argument to the ``GCM`` constructor. :raises NotImplementedError: This is raised if the version of the OpenSSL backend used is 1.0.1 or earlier. diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 462ffea251b4..e0ee06ee26d8 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -199,6 +199,11 @@ def finalize_with_tag(self, tag): "finalize_with_tag requires OpenSSL >= 1.0.2. To use this " "method please update OpenSSL" ) + if len(tag) < self._mode._min_tag_length: + raise ValueError( + "Authentication tag must be {0} bytes or longer.".format( + self._mode._min_tag_length) + ) res = self._backend._lib.EVP_CIPHER_CTX_ctrl( self._ctx, self._backend._lib.EVP_CTRL_AEAD_SET_TAG, len(tag), tag diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index 598dfaa4a40d..543015fef72c 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -220,6 +220,7 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): min_tag_length) ) self._tag = tag + self._min_tag_length = min_tag_length tag = utils.read_only_property("_tag") initialization_vector = utils.read_only_property("_initialization_vector") diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index d6f83ebc2812..4ceccf1553e8 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -439,3 +439,19 @@ def test_gcm_tag_decrypt_finalize(self, backend): decryptor.finalize() else: decryptor.finalize_with_tag(tag) + + @pytest.mark.supported( + only_if=lambda backend: ( + not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 or + backend._lib.CRYPTOGRAPHY_IS_LIBRESSL + ), + skip_message="Not supported on OpenSSL 1.0.1", + ) + def test_gcm_tag_decrypt_finalize_tag_length(self, backend): + decryptor = base.Cipher( + algorithms.AES(b"0" * 16), + modes.GCM(b"0" * 12), + backend=backend + ).decryptor() + with pytest.raises(ValueError): + decryptor.finalize_with_tag(b"tagtooshort") From 14faf3ca00d39f12bc379518bed66f9169a891d9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 22:39:06 +0800 Subject: [PATCH 297/988] add wycheproof tests for AES CMAC (#4344) * add wycheproof tests for AES CMAC * review feedback --- tests/wycheproof/test_cmac.py | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/wycheproof/test_cmac.py diff --git a/tests/wycheproof/test_cmac.py b/tests/wycheproof/test_cmac.py new file mode 100644 index 000000000000..bef858395c9c --- /dev/null +++ b/tests/wycheproof/test_cmac.py @@ -0,0 +1,36 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.backends.interfaces import CMACBackend +from cryptography.hazmat.primitives.ciphers.algorithms import AES +from cryptography.hazmat.primitives.cmac import CMAC + + +@pytest.mark.requires_backend_interface(interface=CMACBackend) +@pytest.mark.wycheproof_tests("aes_cmac_test.json") +def test_aes_cmac(backend, wycheproof): + key = binascii.unhexlify(wycheproof.testcase["key"]) + msg = binascii.unhexlify(wycheproof.testcase["msg"]) + tag = binascii.unhexlify(wycheproof.testcase["tag"]) + + # skip truncated tags, which we don't support in the API + if wycheproof.valid and len(tag) == 16: + ctx = CMAC(AES(key), backend) + ctx.update(msg) + ctx.verify(tag) + elif len(key) not in [16, 24, 32]: + with pytest.raises(ValueError): + CMAC(AES(key), backend) + else: + ctx = CMAC(AES(key), backend) + ctx.update(msg) + with pytest.raises(InvalidSignature): + ctx.verify(tag) From 7ca0e46d82606b8a12ff323181065a00885d39dc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 22:40:02 +0800 Subject: [PATCH 298/988] add chacha20poly1305 wycheproof tests (#4345) * add chacha20poly1305 wycheproof tests * flake8 * review --- tests/wycheproof/test_chacha20poly1305.py | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/wycheproof/test_chacha20poly1305.py diff --git a/tests/wycheproof/test_chacha20poly1305.py b/tests/wycheproof/test_chacha20poly1305.py new file mode 100644 index 000000000000..deef5a0a7dfe --- /dev/null +++ b/tests/wycheproof/test_chacha20poly1305.py @@ -0,0 +1,47 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidTag +from cryptography.hazmat.backends.interfaces import CipherBackend +from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 + +from ..hazmat.primitives.test_aead import _aead_supported + + +@pytest.mark.skipif( + not _aead_supported(ChaCha20Poly1305), + reason="Requires OpenSSL with ChaCha20Poly1305 support" +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("chacha20_poly1305_test.json") +def test_chacha2poly1305(wycheproof): + key = binascii.unhexlify(wycheproof.testcase["key"]) + iv = binascii.unhexlify(wycheproof.testcase["iv"]) + aad = binascii.unhexlify(wycheproof.testcase["aad"]) + msg = binascii.unhexlify(wycheproof.testcase["msg"]) + ct = binascii.unhexlify(wycheproof.testcase["ct"]) + tag = binascii.unhexlify(wycheproof.testcase["tag"]) + + if wycheproof.valid: + chacha = ChaCha20Poly1305(key) + computed_ct = chacha.encrypt(iv, msg, aad) + assert computed_ct == ct + tag + computed_msg = chacha.decrypt(iv, ct + tag, aad) + assert computed_msg == msg + elif len(iv) != 12: + chacha = ChaCha20Poly1305(key) + with pytest.raises(ValueError): + chacha.encrypt(iv, msg, aad) + with pytest.raises(ValueError): + chacha.decrypt(iv, ct + tag, aad) + else: + chacha = ChaCha20Poly1305(key) + with pytest.raises(InvalidTag): + chacha.decrypt(iv, msg + tag, aad) From 12a1cacb6ae6de51a003dcc884e769854a1345a8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 22:56:12 +0800 Subject: [PATCH 299/988] raise ValueError on zero length GCM IV (#4348) --- docs/hazmat/primitives/symmetric-encryption.rst | 3 ++- src/cryptography/hazmat/primitives/ciphers/modes.py | 2 ++ tests/hazmat/primitives/test_block.py | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 5b6000902768..e74b4d665adb 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -399,7 +399,8 @@ Modes this is ``16``, meaning tag truncation is not allowed. Allowing tag truncation is strongly discouraged for most applications. - :raises ValueError: This is raised if ``len(tag) < min_tag_length``. + :raises ValueError: This is raised if ``len(tag) < min_tag_length`` or the + ``initialization_vector`` is too short. :raises NotImplementedError: This is raised if the version of the OpenSSL backend used is 1.0.1 or earlier. diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index 543015fef72c..e82c1a8d6a7e 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -208,6 +208,8 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): # for it if not isinstance(initialization_vector, bytes): raise TypeError("initialization_vector must be bytes") + if len(initialization_vector) == 0: + raise ValueError("initialization_vector must be at least 1 byte") self._initialization_vector = initialization_vector if tag is not None: if not isinstance(tag, bytes): diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py index c053feafb719..37158f153c7a 100644 --- a/tests/hazmat/primitives/test_block.py +++ b/tests/hazmat/primitives/test_block.py @@ -191,6 +191,10 @@ def test_ctr(self, backend): backend, ) + def test_gcm(self): + with pytest.raises(ValueError): + modes.GCM(b"") + class TestModesRequireBytes(object): def test_cbc(self): From db62ec9967d95e666eb6898766944d9e50532b2d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 18 Jul 2018 00:06:10 +0800 Subject: [PATCH 300/988] also check iv length for GCM nonce in AEAD (#4350) * also check iv length for GCM nonce in AEAD * ugh --- src/cryptography/hazmat/primitives/ciphers/aead.py | 2 ++ tests/hazmat/primitives/test_aead.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index 9794d7682abc..e5197653fb93 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -184,3 +184,5 @@ def _check_params(self, nonce, data, associated_data): utils._check_bytes("nonce", nonce) utils._check_bytes("data", data) utils._check_bytes("associated_data", associated_data) + if len(nonce) == 0: + raise ValueError("Nonce must be at least 1 byte") diff --git a/tests/hazmat/primitives/test_aead.py b/tests/hazmat/primitives/test_aead.py index a0cc79e1439b..5a5185583972 100644 --- a/tests/hazmat/primitives/test_aead.py +++ b/tests/hazmat/primitives/test_aead.py @@ -383,6 +383,12 @@ def test_params_not_bytes(self, nonce, data, associated_data, backend): with pytest.raises(TypeError): aesgcm.decrypt(nonce, data, associated_data) + def test_invalid_nonce_length(self, backend): + key = AESGCM.generate_key(128) + aesgcm = AESGCM(key) + with pytest.raises(ValueError): + aesgcm.encrypt(b"", b"hi", None) + def test_bad_key(self, backend): with pytest.raises(TypeError): AESGCM(object()) From c563b576b3bba4a93f8f47272759b29f182dea13 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 18 Jul 2018 00:15:55 +0800 Subject: [PATCH 301/988] min_tag_length is an int (#4351) --- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index e74b4d665adb..c933d042b7d0 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -395,7 +395,7 @@ Modes :meth:`~cryptography.hazmat.primitives.ciphers.AEADDecryptionContext.finalize_with_tag`. Otherwise, the tag is mandatory. - :param bytes min_tag_length: The minimum length ``tag`` must be. By default + :param int min_tag_length: The minimum length ``tag`` must be. By default this is ``16``, meaning tag truncation is not allowed. Allowing tag truncation is strongly discouraged for most applications. From 4de004955b2d9d0d714fe29ae95b8eff7ee983a1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 18 Jul 2018 00:44:55 +0800 Subject: [PATCH 302/988] add wycheproof gcm tests (#4349) * add wycheproof gcm tests * add AEAD test --- tests/wycheproof/test_aes.py | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/wycheproof/test_aes.py b/tests/wycheproof/test_aes.py index 65db9cdb22ff..929ad8dc9099 100644 --- a/tests/wycheproof/test_aes.py +++ b/tests/wycheproof/test_aes.py @@ -13,6 +13,7 @@ from cryptography.hazmat.primitives.ciphers import ( Cipher, algorithms, modes ) +from cryptography.hazmat.primitives.ciphers.aead import AESGCM @pytest.mark.requires_backend_interface(interface=CipherBackend) @@ -40,3 +41,56 @@ def test_aes_cbc_pkcs5(backend, wycheproof): assert computed_ct != ct with pytest.raises(ValueError): unpadder.update(padded_msg) + unpadder.finalize() + + +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("aes_gcm_test.json") +def test_aes_gcm(backend, wycheproof): + key = binascii.unhexlify(wycheproof.testcase["key"]) + iv = binascii.unhexlify(wycheproof.testcase["iv"]) + aad = binascii.unhexlify(wycheproof.testcase["aad"]) + msg = binascii.unhexlify(wycheproof.testcase["msg"]) + ct = binascii.unhexlify(wycheproof.testcase["ct"]) + tag = binascii.unhexlify(wycheproof.testcase["tag"]) + if wycheproof.valid or wycheproof.acceptable: + enc = Cipher(algorithms.AES(key), modes.GCM(iv), backend).encryptor() + enc.authenticate_additional_data(aad) + computed_ct = enc.update(msg) + enc.finalize() + computed_tag = enc.tag + assert computed_ct == ct + assert computed_tag == tag + dec = Cipher( + algorithms.AES(key), + modes.GCM(iv, tag, min_tag_length=len(tag)), + backend + ).decryptor() + dec.authenticate_additional_data(aad) + computed_msg = dec.update(ct) + dec.finalize() + assert computed_msg == msg + else: + # All invalid GCM tests are IV len 0 right now + assert len(iv) == 0 + with pytest.raises(ValueError): + Cipher(algorithms.AES(key), modes.GCM(iv), backend) + + +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("aes_gcm_test.json") +def test_aes_gcm_aead_api(backend, wycheproof): + key = binascii.unhexlify(wycheproof.testcase["key"]) + iv = binascii.unhexlify(wycheproof.testcase["iv"]) + aad = binascii.unhexlify(wycheproof.testcase["aad"]) + msg = binascii.unhexlify(wycheproof.testcase["msg"]) + ct = binascii.unhexlify(wycheproof.testcase["ct"]) + tag = binascii.unhexlify(wycheproof.testcase["tag"]) + aesgcm = AESGCM(key) + if wycheproof.valid or wycheproof.acceptable: + computed_ct = aesgcm.encrypt(iv, msg, aad) + assert computed_ct == ct + tag + computed_msg = aesgcm.decrypt(iv, ct + tag, aad) + assert computed_msg == msg + else: + # All invalid GCM tests are IV len 0 right now + assert len(iv) == 0 + with pytest.raises(ValueError): + aesgcm.encrypt(iv, msg, aad) From dfb332da50ee9358ef9f46b2e8ffb28f1cfd8751 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 18 Jul 2018 18:12:15 +0800 Subject: [PATCH 303/988] improve skip msg when skipping an ECDH test in test_ec (#4355) --- tests/hazmat/primitives/test_ec.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index d015e84d8afd..4e61b5d4fbd1 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -65,8 +65,8 @@ def _skip_exchange_algorithm_unsupported(backend, algorithm, curve): algorithm, curve ): pytest.skip( - "Exchange algorithm is not supported by this backend {0}".format( - backend + "Exchange with {0} curve is not supported by {1}".format( + curve.name, backend ) ) From feb134586ee6ca56e2c53b35d0ffbb79eb1b5dee Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 18 Jul 2018 05:20:48 -0500 Subject: [PATCH 304/988] Refs #3331 -- integrated wycheproof ECDH tests (#4354) * Refs #3331 -- integrated wycheproof ECDH tests * flake8 + missing assert * Handle this error case * skip on unsupported * shouldn't need to try here any more --- tests/utils.py | 4 ++ tests/wycheproof/test_ecdh.py | 83 +++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 tests/wycheproof/test_ecdh.py diff --git a/tests/utils.py b/tests/utils.py index ccc3b7c1bbea..b950f8bd9996 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -906,6 +906,10 @@ def valid(self): def acceptable(self): return self.testcase["result"] == "acceptable" + @property + def invalid(self): + return self.testcase["result"] == "invalid" + def has_flag(self, flag): return flag in self.testcase["flags"] diff --git a/tests/wycheproof/test_ecdh.py b/tests/wycheproof/test_ecdh.py new file mode 100644 index 000000000000..0850b627ddbd --- /dev/null +++ b/tests/wycheproof/test_ecdh.py @@ -0,0 +1,83 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.backends.interfaces import EllipticCurveBackend +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric import ec + +from ..hazmat.primitives.test_ec import _skip_exchange_algorithm_unsupported + + +_CURVES = { + "secp224r1": ec.SECP224R1(), + "secp256r1": ec.SECP256R1(), + "secp384r1": ec.SECP384R1(), + "secp521r1": ec.SECP521R1(), + "secp256k1": ec.SECP256K1(), + "brainpoolP224r1": None, + "brainpoolP256r1": ec.BrainpoolP256R1(), + "brainpoolP320r1": None, + "brainpoolP384r1": ec.BrainpoolP384R1(), + "brainpoolP512r1": ec.BrainpoolP512R1(), + "brainpoolP224t1": None, + "brainpoolP256t1": None, + "brainpoolP320t1": None, + "brainpoolP384t1": None, + "brainpoolP512t1": None, +} + + +@pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) +@pytest.mark.wycheproof_tests( + "ecdh_test.json", + "ecdh_brainpoolP224r1_test.json", + "ecdh_brainpoolP256r1_test.json", + "ecdh_brainpoolP320r1_test.json", + "ecdh_brainpoolP384r1_test.json", + "ecdh_brainpoolP512r1_test.json", + "ecdh_secp224r1_test.json", + "ecdh_secp256k1_test.json", + "ecdh_secp256r1_test.json", + "ecdh_secp384r1_test.json", + "ecdh_secp521r1_test.json", +) +def test_ecdh(backend, wycheproof): + curve = _CURVES[wycheproof.testcase["curve"]] + if curve is None: + pytest.skip( + "Unsupported curve ({})".format(wycheproof.testcase["curve"]) + ) + _skip_exchange_algorithm_unsupported(backend, ec.ECDH(), curve) + + private_key = ec.derive_private_key( + int(wycheproof.testcase["private"], 16), curve, backend + ) + + try: + public_key = serialization.load_der_public_key( + binascii.unhexlify(wycheproof.testcase["public"]), backend + ) + except NotImplementedError: + assert wycheproof.has_flag("UnnamedCurve") + return + except ValueError: + assert wycheproof.invalid or wycheproof.acceptable + return + except UnsupportedAlgorithm: + return + + if wycheproof.valid or wycheproof.acceptable: + computed_shared = private_key.exchange(ec.ECDH(), public_key) + expected_shared = binascii.unhexlify(wycheproof.testcase["shared"]) + assert computed_shared == expected_shared + else: + with pytest.raises(ValueError): + private_key.exchange(ec.ECDH(), public_key) From 0a846e294806478770469219a26cd49dcb5502d7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 18 Jul 2018 19:12:46 +0800 Subject: [PATCH 305/988] bump version and changelog for 2.3 release (#4356) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5ac43d0dde49..12c4d6522536 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-3: -2.3 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.3 - 2018-07-18 +~~~~~~~~~~~~~~~~ * **SECURITY ISSUE:** :meth:`~cryptography.hazmat.primitives.ciphers.AEADDecryptionContext.finalize_with_tag` diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index b198409d34dd..935e656090a9 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.3.dev1" +__version__ = "2.3" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index d15f1abaf4bf..8f73dc73d87d 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.3.dev1" +__version__ = "2.3" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 39a3efbfafd0f9ebed9d9ea08a885e68c97e8045 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 19 Jul 2018 06:35:38 +0800 Subject: [PATCH 306/988] reopen master (#4359) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 12c4d6522536..41026519b970 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v2-4: + +2.4 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-3: 2.3 - 2018-07-18 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 935e656090a9..8811cc2aba0c 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.3" +__version__ = "2.4.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 8f73dc73d87d..4b46fbee5c0d 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.3" +__version__ = "2.4.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 61114a2e69875eb31e9299913aa26f1627332383 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 19 Jul 2018 06:35:55 +0800 Subject: [PATCH 307/988] add CVE ID to security issue (#4360) --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 41026519b970..dc5ec83cf612 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,6 +18,7 @@ Changelog allowed tag truncation by default which can allow tag forgery in some cases. The method now enforces the ``min_tag_length`` provided to the :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM` constructor. + *CVE-2018-10903* * Added support for Python 3.7. * Added :meth:`~cryptography.fernet.Fernet.extract_timestamp` to get the authenticated timestamp of a :doc:`Fernet ` token. From fcf431a7764fdb93a012466f449a06dc15e53258 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 21 Jul 2018 11:47:58 +0800 Subject: [PATCH 308/988] sign is a method (#4362) --- src/cryptography/hazmat/primitives/asymmetric/ec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 6cbfcab4c1bd..e2e55e9e1369 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -68,7 +68,7 @@ def key_size(self): Bit size of a secret scalar for the curve. """ - @abc.abstractproperty + @abc.abstractmethod def sign(self, data, signature_algorithm): """ Signs the data From eb49820cd0750319eabb79a582f8a98419b819c5 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Mon, 23 Jul 2018 09:14:48 +0200 Subject: [PATCH 309/988] Add more SSL_CIPHER_* functions, necessary to implement ctx.get_ciphers() in PyPy (#4364) * Add more SSL_CIPHER_* functions, necessary to implement ctx.get_ciphers() added by Python 3.6.1. * Add placeholders for other versions * Remove parameter names * LibreSSL 2.7 has the new functions * Add entries in _conditional.py * SSL_CIPHER_get_id returns int, not char* --- src/_cffi_src/openssl/ssl.py | 19 +++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 11 +++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index a9fc2ff3fa18..2aa5d01000da 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -29,6 +29,7 @@ static const long Cryptography_HAS_GENERIC_DTLS_METHOD; static const long Cryptography_HAS_SIGALGS; static const long Cryptography_HAS_PSK; +static const long Cryptography_HAS_CIPHER_DETAILS; /* Internally invented symbol to tell us if SNI is supported */ static const long Cryptography_HAS_TLSEXT_HOSTNAME; @@ -284,6 +285,12 @@ /* Information about actually used cipher */ const char *SSL_CIPHER_get_name(const SSL_CIPHER *); int SSL_CIPHER_get_bits(const SSL_CIPHER *, int *); +uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *); +int SSL_CIPHER_is_aead(const SSL_CIPHER *); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *); +int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *); +int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *); size_t SSL_get_finished(const SSL *, void *, size_t); size_t SSL_get_peer_finished(const SSL *, void *, size_t); @@ -790,4 +797,16 @@ int (*SSL_extension_supported)(unsigned int) = NULL; #endif + +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +int (*SSL_CIPHER_is_aead)(const SSL_CIPHER *) = NULL; +int (*SSL_CIPHER_get_cipher_nid)(const SSL_CIPHER *) = NULL; +int (*SSL_CIPHER_get_digest_nid)(const SSL_CIPHER *) = NULL; +int (*SSL_CIPHER_get_kx_nid)(const SSL_CIPHER *) = NULL; +int (*SSL_CIPHER_get_auth_nid)(const SSL_CIPHER *) = NULL; +static const long Cryptography_HAS_CIPHER_DETAILS = 0; +#else +static const long Cryptography_HAS_CIPHER_DETAILS = 1; +#endif + """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index b3e4e8bd6ec0..eb31c10525df 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -246,6 +246,16 @@ def cryptography_has_openssl_cleanup(): ] +def cryptography_has_cipher_details(): + return [ + "SSL_CIPHER_is_aead", + "SSL_CIPHER_get_cipher_nid", + "SSL_CIPHER_get_digest_nid", + "SSL_CIPHER_get_kx_nid", + "SSL_CIPHER_get_auth_nid", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -299,4 +309,5 @@ def cryptography_has_openssl_cleanup(): "Cryptography_HAS_PSK": cryptography_has_psk, "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext, "Cryptography_HAS_OPENSSL_CLEANUP": cryptography_has_openssl_cleanup, + "Cryptography_HAS_CIPHER_DETAILS": cryptography_has_cipher_details, } From 162a17e246f51c90f61fe135e1db1006965a3385 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 23 Jul 2018 19:55:06 +0800 Subject: [PATCH 310/988] block_size isn't part of our interface and future hashes won't have it (#4366) --- tests/hazmat/primitives/test_hashes.py | 8 -------- tests/hazmat/primitives/utils.py | 7 +++---- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index 60950aed6c89..c2b866f70d34 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -53,7 +53,6 @@ class TestSHA1(object): test_SHA1 = generate_base_hash_test( hashes.SHA1(), digest_size=20, - block_size=64, ) @@ -66,7 +65,6 @@ class TestSHA224(object): test_SHA224 = generate_base_hash_test( hashes.SHA224(), digest_size=28, - block_size=64, ) @@ -79,7 +77,6 @@ class TestSHA256(object): test_SHA256 = generate_base_hash_test( hashes.SHA256(), digest_size=32, - block_size=64, ) @@ -92,7 +89,6 @@ class TestSHA384(object): test_SHA384 = generate_base_hash_test( hashes.SHA384(), digest_size=48, - block_size=128, ) @@ -105,7 +101,6 @@ class TestSHA512(object): test_SHA512 = generate_base_hash_test( hashes.SHA512(), digest_size=64, - block_size=128, ) @@ -118,7 +113,6 @@ class TestMD5(object): test_MD5 = generate_base_hash_test( hashes.MD5(), digest_size=16, - block_size=64, ) @@ -132,7 +126,6 @@ class TestBLAKE2b(object): test_BLAKE2b = generate_base_hash_test( hashes.BLAKE2b(digest_size=64), digest_size=64, - block_size=128, ) def test_invalid_digest_size(self, backend): @@ -156,7 +149,6 @@ class TestBLAKE2s(object): test_BLAKE2s = generate_base_hash_test( hashes.BLAKE2s(digest_size=32), digest_size=32, - block_size=64, ) def test_invalid_digest_size(self, backend): diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py index b0cc0cffcd6d..811dcf905d7f 100644 --- a/tests/hazmat/primitives/utils.py +++ b/tests/hazmat/primitives/utils.py @@ -168,16 +168,15 @@ def hash_test(backend, algorithm, params): assert m.finalize() == binascii.unhexlify(expected_md) -def generate_base_hash_test(algorithm, digest_size, block_size): +def generate_base_hash_test(algorithm, digest_size): def test_base_hash(self, backend): - base_hash_test(backend, algorithm, digest_size, block_size) + base_hash_test(backend, algorithm, digest_size) return test_base_hash -def base_hash_test(backend, algorithm, digest_size, block_size): +def base_hash_test(backend, algorithm, digest_size): m = hashes.Hash(algorithm, backend=backend) assert m.algorithm.digest_size == digest_size - assert m.algorithm.block_size == block_size m_copy = m.copy() assert m != m_copy assert m._ctx != m_copy._ctx From 2af3d4c51bca6a769a681cdfee10c9eda02b0838 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 23 Jul 2018 13:10:13 -0400 Subject: [PATCH 311/988] Fixes #3548 - add a pyproject.toml (#4363) --- MANIFEST.in | 2 ++ pyproject.toml | 7 +++++++ setup.py | 1 + 3 files changed, 10 insertions(+) create mode 100644 pyproject.toml diff --git a/MANIFEST.in b/MANIFEST.in index b05a869c4241..373c242023b8 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,6 +6,8 @@ include LICENSE.APACHE include LICENSE.BSD include README.rst +include pyproject.toml + recursive-include docs * recursive-include src/_cffi_src *.py *.c *.h prune docs/_build diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000000..461675f06848 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,7 @@ +[build-system] +# Must be kept in sync with `setup_requirements` in `setup.py` +requires = [ + "setuptools>=18.5", + "wheel", + "cffi>=1.7,!=1.11.3; python_implementation != 'PyPy'", +] diff --git a/setup.py b/setup.py index 2fbbd04691ec..8bd31bd55f1b 100644 --- a/setup.py +++ b/setup.py @@ -43,6 +43,7 @@ VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__']) +# `setup_requirements` must be kept in sync with `pyproject.toml` setup_requirements = ["cffi>=1.7,!=1.11.3"] if platform.python_implementation() == "PyPy": From e722e557e08171e265008711b824df44d4e9ec7d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 25 Jul 2018 23:27:00 -0400 Subject: [PATCH 312/988] Update comment (#4371) --- tests/wycheproof/test_rsa.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index b8f2e19d093c..9de4bc5fbb5a 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -42,8 +42,8 @@ def should_verify(backend, wycheproof): @pytest.mark.supported( only_if=lambda backend: ( # TODO: this also skips on LibreSSL, which is ok for now, since these - # don't pass on Libre, but we'll need to fix this after they resolve - # it. + # don't pass on Libre, but we'll need to fix this when LibreSSL 2.8 is + # released. not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 ), skip_message=( From 4b958d16569f87cc6499f03ce96a1b6cc9a0ea08 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Sat, 28 Jul 2018 17:58:01 -0700 Subject: [PATCH 313/988] Test for expected CryptographyDeprecationWarnings (#4372) The remaining calls to `signer()` and `verifier()` are exercising the deprecated API intentionally. Let's test that the deprecation warnings are being raised as expected. Closes #4311; see also #4314. --- tests/hazmat/primitives/test_dsa.py | 38 ++++++++++++----------------- tests/hazmat/primitives/test_ec.py | 29 +++++++++------------- tests/hazmat/primitives/test_rsa.py | 37 +++++++++++++++------------- 3 files changed, 48 insertions(+), 56 deletions(-) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 027d6558a81a..fb415732d287 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -383,31 +383,28 @@ def test_dsa_verification(self, vector, backend): y=vector['y'] ).public_key(backend) sig = encode_dss_signature(vector['r'], vector['s']) - with pytest.warns(CryptographyDeprecationWarning): - verifier = public_key.verifier(sig, algorithm()) - verifier.update(vector['msg']) if vector['result'] == "F": with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify(sig, vector['msg'], algorithm()) else: - verifier.verify() + public_key.verify(sig, vector['msg'], algorithm()) def test_dsa_verify_invalid_asn1(self, backend): public_key = DSA_KEY_1024.public_numbers.public_key(backend) - verifier = public_key.verifier(b'fakesig', hashes.SHA1()) - verifier.update(b'fakesig') with pytest.raises(InvalidSignature): - verifier.verify() + public_key.verify(b'fakesig', b'fakemsg', hashes.SHA1()) def test_signature_not_bytes(self, backend): public_key = DSA_KEY_1024.public_numbers.public_key(backend) - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): public_key.verifier(1234, hashes.SHA1()) def test_use_after_finalize(self, backend): public_key = DSA_KEY_1024.public_numbers.public_key(backend) - verifier = public_key.verifier(b'fakesig', hashes.SHA1()) + with pytest.warns(CryptographyDeprecationWarning): + verifier = public_key.verifier(b'fakesig', hashes.SHA1()) verifier.update(b'irrelevant') with pytest.raises(InvalidSignature): verifier.verify() @@ -420,9 +417,7 @@ def test_verify(self, backend): message = b"one little message" algorithm = hashes.SHA1() private_key = DSA_KEY_1024.private_key(backend) - signer = private_key.signer(algorithm) - signer.update(message) - signature = signer.finalize() + signature = private_key.sign(message, algorithm) public_key = private_key.public_key() public_key.verify(signature, message, algorithm) @@ -450,12 +445,14 @@ def test_prehashed_digest_mismatch(self, backend): def test_prehashed_unsupported_in_signer_ctx(self, backend): private_key = DSA_KEY_1024.private_key(backend) - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): private_key.signer(Prehashed(hashes.SHA1())) def test_prehashed_unsupported_in_verifier_ctx(self, backend): public_key = DSA_KEY_1024.private_key(backend).public_key() - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): public_key.verifier( b"0" * 64, Prehashed(hashes.SHA1()) ) @@ -502,7 +499,8 @@ def test_dsa_signing(self, vector, backend): def test_use_after_finalize(self, backend): private_key = DSA_KEY_1024.private_key(backend) - signer = private_key.signer(hashes.SHA1()) + with pytest.warns(CryptographyDeprecationWarning): + signer = private_key.signer(hashes.SHA1()) signer.update(b"data") signer.finalize() with pytest.raises(AlreadyFinalized): @@ -516,9 +514,7 @@ def test_sign(self, backend): algorithm = hashes.SHA1() signature = private_key.sign(message, algorithm) public_key = private_key.public_key() - verifier = public_key.verifier(signature, algorithm) - verifier.update(message) - verifier.verify() + public_key.verify(signature, message, algorithm) def test_prehashed_sign(self, backend): private_key = DSA_KEY_1024.private_key(backend) @@ -529,9 +525,7 @@ def test_prehashed_sign(self, backend): prehashed_alg = Prehashed(hashes.SHA1()) signature = private_key.sign(digest, prehashed_alg) public_key = private_key.public_key() - verifier = public_key.verifier(signature, hashes.SHA1()) - verifier.update(message) - verifier.verify() + public_key.verify(signature, message, hashes.SHA1()) def test_prehashed_digest_mismatch(self, backend): private_key = DSA_KEY_1024.private_key(backend) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 4e61b5d4fbd1..6d4936619818 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -378,7 +378,7 @@ def test_unknown_signature_algoritm(self, backend): with raises_unsupported_algorithm( exceptions._Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM - ): + ), pytest.warns(CryptographyDeprecationWarning): key.signer(DummySignatureAlgorithm()) with raises_unsupported_algorithm( @@ -388,7 +388,7 @@ def test_unknown_signature_algoritm(self, backend): with raises_unsupported_algorithm( exceptions._Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM - ): + ), pytest.warns(CryptographyDeprecationWarning): key.public_key().verifier(b"", DummySignatureAlgorithm()) with raises_unsupported_algorithm( @@ -546,9 +546,7 @@ def test_sign(self, backend): private_key = ec.generate_private_key(ec.SECP256R1(), backend) signature = private_key.sign(message, algorithm) public_key = private_key.public_key() - verifier = public_key.verifier(signature, algorithm) - verifier.update(message) - verifier.verify() + public_key.verify(signature, message, algorithm) def test_sign_prehashed(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) @@ -560,9 +558,7 @@ def test_sign_prehashed(self, backend): private_key = ec.generate_private_key(ec.SECP256R1(), backend) signature = private_key.sign(data, algorithm) public_key = private_key.public_key() - verifier = public_key.verifier(signature, ec.ECDSA(hashes.SHA1())) - verifier.update(message) - verifier.verify() + public_key.verify(signature, message, ec.ECDSA(hashes.SHA1())) def test_sign_prehashed_digest_mismatch(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) @@ -580,9 +576,7 @@ def test_verify(self, backend): message = b"one little message" algorithm = ec.ECDSA(hashes.SHA1()) private_key = ec.generate_private_key(ec.SECP256R1(), backend) - signer = private_key.signer(algorithm) - signer.update(message) - signature = signer.finalize() + signature = private_key.sign(message, algorithm) public_key = private_key.public_key() public_key.verify(signature, message, algorithm) @@ -591,9 +585,7 @@ def test_verify_prehashed(self, backend): message = b"one little message" algorithm = ec.ECDSA(hashes.SHA1()) private_key = ec.generate_private_key(ec.SECP256R1(), backend) - signer = private_key.signer(algorithm) - signer.update(message) - signature = signer.finalize() + signature = private_key.sign(message, algorithm) h = hashes.Hash(hashes.SHA1(), backend) h.update(message) data = h.finalize() @@ -618,14 +610,16 @@ def test_verify_prehashed_digest_mismatch(self, backend): def test_prehashed_unsupported_in_signer_ctx(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) private_key = ec.generate_private_key(ec.SECP256R1(), backend) - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): private_key.signer(ec.ECDSA(Prehashed(hashes.SHA1()))) def test_prehashed_unsupported_in_verifier_ctx(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) private_key = ec.generate_private_key(ec.SECP256R1(), backend) public_key = private_key.public_key() - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): public_key.verifier( b"0" * 64, ec.ECDSA(Prehashed(hashes.SHA1())) @@ -1022,7 +1016,8 @@ def test_signature_not_bytes(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) key = ec.generate_private_key(ec.SECP256R1(), backend) public_key = key.public_key() - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): public_key.verifier(1234, ec.ECDSA(hashes.SHA256())) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index ec08eadec967..4d56bcd438f6 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -541,7 +541,8 @@ def test_pss_signing_salt_length_too_long(self, backend): ) def test_use_after_finalize(self, backend): private_key = RSA_KEY_512.private_key(backend) - signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) + with pytest.warns(CryptographyDeprecationWarning): + signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) signer.update(b"sign me") signer.finalize() with pytest.raises(AlreadyFinalized): @@ -658,7 +659,8 @@ def test_prehashed_digest_mismatch(self, backend): ) def test_prehashed_unsupported_in_signer_ctx(self, backend): private_key = RSA_KEY_512.private_key(backend) - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): private_key.signer( padding.PKCS1v15(), asym_utils.Prehashed(hashes.SHA1()) @@ -672,7 +674,8 @@ def test_prehashed_unsupported_in_signer_ctx(self, backend): ) def test_prehashed_unsupported_in_verifier_ctx(self, backend): public_key = RSA_KEY_512.private_key(backend).public_key() - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): public_key.verifier( b"0" * 64, padding.PKCS1v15(), @@ -702,14 +705,12 @@ def test_pkcs1v15_verification(self, pkcs1_example, backend): e=public["public_exponent"], n=public["modulus"] ).public_key(backend) - with pytest.warns(CryptographyDeprecationWarning): - verifier = public_key.verifier( - binascii.unhexlify(example["signature"]), - padding.PKCS1v15(), - hashes.SHA1() - ) - verifier.update(binascii.unhexlify(example["message"])) - verifier.verify() + public_key.verify( + binascii.unhexlify(example["signature"]), + binascii.unhexlify(example["message"]), + padding.PKCS1v15(), + hashes.SHA1() + ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( @@ -932,11 +933,12 @@ def test_use_after_finalize(self, backend): b"sign me", padding.PKCS1v15(), hashes.SHA1() ) - verifier = public_key.verifier( - signature, - padding.PKCS1v15(), - hashes.SHA1() - ) + with pytest.warns(CryptographyDeprecationWarning): + verifier = public_key.verifier( + signature, + padding.PKCS1v15(), + hashes.SHA1() + ) verifier.update(b"sign me") verifier.verify() with pytest.raises(AlreadyFinalized): @@ -962,7 +964,8 @@ def test_signature_not_bytes(self, backend): public_key = RSA_KEY_512.public_numbers.public_key(backend) signature = 1234 - with pytest.raises(TypeError): + with pytest.raises(TypeError), \ + pytest.warns(CryptographyDeprecationWarning): public_key.verifier( signature, padding.PKCS1v15(), From c37d11e1ac05d70a75b86fcdac0b46cdeda8d455 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Mon, 30 Jul 2018 13:41:34 -0700 Subject: [PATCH 314/988] Use A-label strings in tests (#4374) We already have coverage of the U-label deprecation warnings in test_x509_ext.py; see TestRFC822Name.test_idna and TestUniformResourceIdentifier.test_idna_no_port --- tests/x509/test_x509.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 5905e335a237..a866d81356f4 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -3121,9 +3121,9 @@ def test_subject_alt_names(self, backend): ), x509.RFC822Name(u"test@example.com"), x509.RFC822Name(u"email"), - x509.RFC822Name(u"email@em\xe5\xefl.com"), + x509.RFC822Name(u"email@xn--eml-vla4c.com"), x509.UniformResourceIdentifier( - u"https://\u043f\u044b\u043a\u0430.cryptography" + u"https://xn--80ato2c.cryptography" ), x509.UniformResourceIdentifier( u"gopher://cryptography:70/some/path" From 8d46eafc90793282fb007ed3dde51d761edcf595 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 1 Aug 2018 06:53:39 -0400 Subject: [PATCH 315/988] Updated wycheproof tests for new upstream vectors (#4378) * updated tests for upstream wycheproof changes * Updated AES tests * oops, flake8 --- tests/wycheproof/test_aes.py | 22 ++++++++++++++++------ tests/wycheproof/test_ecdh.py | 4 ++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/tests/wycheproof/test_aes.py b/tests/wycheproof/test_aes.py index 929ad8dc9099..a3d75123e7d5 100644 --- a/tests/wycheproof/test_aes.py +++ b/tests/wycheproof/test_aes.py @@ -8,6 +8,7 @@ import pytest +from cryptography.exceptions import InvalidTag from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives import padding from cryptography.hazmat.primitives.ciphers import ( @@ -67,11 +68,19 @@ def test_aes_gcm(backend, wycheproof): dec.authenticate_additional_data(aad) computed_msg = dec.update(ct) + dec.finalize() assert computed_msg == msg - else: - # All invalid GCM tests are IV len 0 right now - assert len(iv) == 0 + elif len(iv) == 0: with pytest.raises(ValueError): Cipher(algorithms.AES(key), modes.GCM(iv), backend) + else: + dec = Cipher( + algorithms.AES(key), + modes.GCM(iv, tag, min_tag_length=len(tag)), + backend + ).decryptor() + dec.authenticate_additional_data(aad) + dec.update(ct) + with pytest.raises(InvalidTag): + dec.finalize() @pytest.mark.requires_backend_interface(interface=CipherBackend) @@ -89,8 +98,9 @@ def test_aes_gcm_aead_api(backend, wycheproof): assert computed_ct == ct + tag computed_msg = aesgcm.decrypt(iv, ct + tag, aad) assert computed_msg == msg - else: - # All invalid GCM tests are IV len 0 right now - assert len(iv) == 0 + elif len(iv) == 0: with pytest.raises(ValueError): aesgcm.encrypt(iv, msg, aad) + else: + with pytest.raises(InvalidTag): + aesgcm.decrypt(iv, ct + tag, aad) diff --git a/tests/wycheproof/test_ecdh.py b/tests/wycheproof/test_ecdh.py index 0850b627ddbd..55be04eef893 100644 --- a/tests/wycheproof/test_ecdh.py +++ b/tests/wycheproof/test_ecdh.py @@ -50,10 +50,10 @@ "ecdh_secp521r1_test.json", ) def test_ecdh(backend, wycheproof): - curve = _CURVES[wycheproof.testcase["curve"]] + curve = _CURVES[wycheproof.testgroup["curve"]] if curve is None: pytest.skip( - "Unsupported curve ({})".format(wycheproof.testcase["curve"]) + "Unsupported curve ({})".format(wycheproof.testgroup["curve"]) ) _skip_exchange_algorithm_unsupported(backend, ec.ECDH(), curve) From f6ccb2ef6c5d787955c2b25d1d0b542152d8aaeb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 2 Aug 2018 02:13:52 -0400 Subject: [PATCH 316/988] Refs #4375 -- integrate wycheproof AES CCM tests (#4379) * Refs #4375 -- integrate wycheproof AES CCM tests * Skip these tests if we don't have CCM support --- docs/hazmat/primitives/aead.rst | 2 +- .../hazmat/primitives/ciphers/aead.py | 2 +- tests/wycheproof/test_aes.py | 40 ++++++++++++++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/primitives/aead.rst b/docs/hazmat/primitives/aead.rst index a54cc6fad271..06fecc5a7f54 100644 --- a/docs/hazmat/primitives/aead.rst +++ b/docs/hazmat/primitives/aead.rst @@ -169,7 +169,7 @@ also support providing integrity for associated data which is not encrypted. :param int tag_length: The length of the authentication tag. This defaults to 16 bytes and it is **strongly** recommended that you do not make it shorter unless absolutely necessary. Valid tag - lengths are 4, 6, 8, 12, 14, and 16. + lengths are 4, 6, 8, 10, 12, 14, and 16. :raises cryptography.exceptions.UnsupportedAlgorithm: If the version of OpenSSL does not support AES-CCM. diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index e5197653fb93..16899d00fc6c 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -75,7 +75,7 @@ def __init__(self, key, tag_length=16): if not isinstance(tag_length, int): raise TypeError("tag_length must be an integer") - if tag_length not in (4, 6, 8, 12, 14, 16): + if tag_length not in (4, 6, 8, 10, 12, 14, 16): raise ValueError("Invalid tag_length") self._tag_length = tag_length diff --git a/tests/wycheproof/test_aes.py b/tests/wycheproof/test_aes.py index a3d75123e7d5..55e454546c44 100644 --- a/tests/wycheproof/test_aes.py +++ b/tests/wycheproof/test_aes.py @@ -14,7 +14,9 @@ from cryptography.hazmat.primitives.ciphers import ( Cipher, algorithms, modes ) -from cryptography.hazmat.primitives.ciphers.aead import AESGCM +from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESGCM + +from ..hazmat.primitives.test_aead import _aead_supported @pytest.mark.requires_backend_interface(interface=CipherBackend) @@ -104,3 +106,39 @@ def test_aes_gcm_aead_api(backend, wycheproof): else: with pytest.raises(InvalidTag): aesgcm.decrypt(iv, ct + tag, aad) + + +@pytest.mark.skipif( + not _aead_supported(AESCCM), + reason="Requires OpenSSL with AES-CCM support", +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +@pytest.mark.wycheproof_tests("aes_ccm_test.json") +def test_aes_ccm_aead_api(backend, wycheproof): + key = binascii.unhexlify(wycheproof.testcase["key"]) + iv = binascii.unhexlify(wycheproof.testcase["iv"]) + aad = binascii.unhexlify(wycheproof.testcase["aad"]) + msg = binascii.unhexlify(wycheproof.testcase["msg"]) + ct = binascii.unhexlify(wycheproof.testcase["ct"]) + tag = binascii.unhexlify(wycheproof.testcase["tag"]) + + if ( + wycheproof.invalid and + wycheproof.testcase["comment"] == "Invalid tag size" + ): + with pytest.raises(ValueError): + AESCCM(key, tag_length=wycheproof.testgroup["tagSize"] // 8) + return + + aesccm = AESCCM(key, tag_length=wycheproof.testgroup["tagSize"] // 8) + if wycheproof.valid or wycheproof.acceptable: + computed_ct = aesccm.encrypt(iv, msg, aad) + assert computed_ct == ct + tag + computed_msg = aesccm.decrypt(iv, ct + tag, aad) + assert computed_msg == msg + elif not 7 <= len(iv) <= 13: + with pytest.raises(ValueError): + aesccm.decrypt(iv, ct + tag, aad) + else: + with pytest.raises(InvalidTag): + aesccm.decrypt(iv, ct + tag, aad) From ebfa6690437daa9c97c856007e1f1527b4cd7a82 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 2 Aug 2018 18:49:25 -0400 Subject: [PATCH 317/988] Refs #4375 -- added RSA PSS wycheproof tests (#4381) --- tests/wycheproof/test_rsa.py | 42 +++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 9de4bc5fbb5a..3d35f42d7cad 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -62,7 +62,7 @@ def should_verify(backend, wycheproof): "rsa_signature_4096_sha384_test.json", "rsa_signature_4096_sha512_test.json", ) -def test_rsa_signature(backend, wycheproof): +def test_rsa_pkcs1v15_signature(backend, wycheproof): key = serialization.load_der_public_key( binascii.unhexlify(wycheproof.testgroup["keyDer"]), backend ) @@ -83,3 +83,43 @@ def test_rsa_signature(backend, wycheproof): padding.PKCS1v15(), digest, ) + + +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.wycheproof_tests( + "rsa_pss_2048_sha1_mgf1_20_test.json", + "rsa_pss_2048_sha256_mgf1_0_test.json", + "rsa_pss_2048_sha256_mgf1_32_test.json", + "rsa_pss_3072_sha256_mgf1_32_test.json", + "rsa_pss_4096_sha256_mgf1_32_test.json", + "rsa_pss_4096_sha512_mgf1_32_test.json", + "rsa_pss_misc_test.json", +) +def test_rsa_pss_signature(backend, wycheproof): + key = serialization.load_der_public_key( + binascii.unhexlify(wycheproof.testgroup["keyDer"]), backend + ) + digest = _DIGESTS[wycheproof.testgroup["sha"]] + mgf_digest = _DIGESTS[wycheproof.testgroup["mgfSha"]] + + if wycheproof.valid or wycheproof.acceptable: + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + padding.PSS( + mgf=padding.MGF1(mgf_digest), + salt_length=wycheproof.testgroup["sLen"] + ), + digest + ) + else: + with pytest.raises(InvalidSignature): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + padding.PSS( + mgf=padding.MGF1(mgf_digest), + salt_length=wycheproof.testgroup["sLen"] + ), + digest + ) From cdd3585bda2e01fc7245a19ac41fe912d8dc6a3c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 Aug 2018 18:17:35 -0400 Subject: [PATCH 318/988] make a certificate expire a few years in the future, fixes doctests (#4383) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * make a certificate expire a few years in the future, fixes doctests 👋 to future alex when this test breaks in two years * short lived certs are a good idea --- docs/x509/reference.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index bc3dd5566f86..5fa8471b800d 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -615,7 +615,7 @@ X.509 Certificate Builder ... x509.NameAttribute(NameOID.COMMON_NAME, u'cryptography.io'), ... ])) >>> builder = builder.not_valid_before(datetime.datetime.today() - one_day) - >>> builder = builder.not_valid_after(datetime.datetime(2018, 8, 2)) + >>> builder = builder.not_valid_after(datetime.datetime.today() + (one_day * 30)) >>> builder = builder.serial_number(x509.random_serial_number()) >>> builder = builder.public_key(public_key) >>> builder = builder.add_extension( From 3cd630b325372c3ad05d9fb2ea816db13d9d8584 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 Aug 2018 22:12:28 -0400 Subject: [PATCH 319/988] Refs #4375 -- added ECDH EC point wycheproof tests (#4384) --- tests/wycheproof/test_ecdh.py | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tests/wycheproof/test_ecdh.py b/tests/wycheproof/test_ecdh.py index 55be04eef893..a0c3f0d9f8cd 100644 --- a/tests/wycheproof/test_ecdh.py +++ b/tests/wycheproof/test_ecdh.py @@ -81,3 +81,44 @@ def test_ecdh(backend, wycheproof): else: with pytest.raises(ValueError): private_key.exchange(ec.ECDH(), public_key) + + +@pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) +@pytest.mark.wycheproof_tests( + "ecdh_secp224r1_ecpoint_test.json", + "ecdh_secp256r1_ecpoint_test.json", + "ecdh_secp384r1_ecpoint_test.json", + "ecdh_secp521r1_ecpoint_test.json", +) +def test_ecdh_ecpoint(backend, wycheproof): + curve = _CURVES[wycheproof.testgroup["curve"]] + _skip_exchange_algorithm_unsupported(backend, ec.ECDH(), curve) + + private_key = ec.derive_private_key( + int(wycheproof.testcase["private"], 16), curve, backend + ) + # We don't support compressed points + if ( + wycheproof.has_flag("CompressedPoint") or + not wycheproof.testcase["public"] + ): + with pytest.raises(ValueError): + ec.EllipticCurvePublicNumbers.from_encoded_point( + curve, binascii.unhexlify(wycheproof.testcase["public"]) + ) + return + + public_numbers = ec.EllipticCurvePublicNumbers.from_encoded_point( + curve, binascii.unhexlify(wycheproof.testcase["public"]) + ) + if wycheproof.testcase["comment"] == "point is not on curve": + assert wycheproof.invalid + with pytest.raises(ValueError): + public_numbers.public_key(backend) + return + + assert wycheproof.valid or wycheproof.acceptable + public_key = public_numbers.public_key(backend) + computed_shared = private_key.exchange(ec.ECDH(), public_key) + expected_shared = binascii.unhexlify(wycheproof.testcase["shared"]) + assert computed_shared == expected_shared From 747e2e98e9b8fd56c1564ba11bce69ae068c02ea Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Aug 2018 15:38:00 -0400 Subject: [PATCH 320/988] Fixes #4388 -- when running the aws-encryption-sdk tests only point pytest at one directory (#4391) * Fixes #4388 -- when running the aws-encryption-sdk tests only point pytest at one directory * Drop -l, there's no purpose for how we use these --- .travis/run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis/run.sh b/.travis/run.sh index 38b66528d7af..572b9a4d85e5 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -52,14 +52,14 @@ else cd aws-encryption-sdk-python pip install -r test/requirements.txt pip install -e . - pytest -m local -l + pytest -m local test/ ;; dynamodb-encryption-sdk) git clone --depth=1 https://github.com/awslabs/aws-dynamodb-encryption-python cd aws-dynamodb-encryption-python pip install -r test/requirements.txt pip install -e . - pytest -m "local and not slow and not veryslow and not nope" -l + pytest -m "local and not slow and not veryslow and not nope" ;; certbot) git clone --depth=1 https://github.com/certbot/certbot From 525b6547e918e12c45119685d2e208aa0e51c4c9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Aug 2018 15:48:24 -0400 Subject: [PATCH 321/988] Fixed #4380 -- do not assume TLSv1 is available in OpenSSL (#4389) * Fixed #4380 -- do not assume TLSv1 is available in OpenSSL Hallelujah! It's starting to become the case that some OpenSSLs are disabling it. * cover this file as well --- tests/hazmat/backends/test_openssl.py | 2 +- tests/hazmat/bindings/test_openssl.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 31b34cd06d6c..e77f5dc316d2 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -115,7 +115,7 @@ def test_consume_errors(self): assert len(errors) == 10 def test_ssl_ciphers_registered(self): - meth = backend._lib.TLSv1_method() + meth = backend._lib.SSLv23_method() ctx = backend._lib.SSL_CTX_new(meth) assert ctx != backend._ffi.NULL backend._lib.SSL_CTX_free(ctx) diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 488f64e1b04c..c0dbc9ba827a 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -37,7 +37,8 @@ def test_ssl_ctx_options(self): # Test that we're properly handling 32-bit unsigned on all platforms. b = Binding() assert b.lib.SSL_OP_ALL > 0 - ctx = b.lib.SSL_CTX_new(b.lib.TLSv1_method()) + ctx = b.lib.SSL_CTX_new(b.lib.SSLv23_method()) + assert ctx != b.ffi.NULL ctx = b.ffi.gc(ctx, b.lib.SSL_CTX_free) current_options = b.lib.SSL_CTX_get_options(ctx) resp = b.lib.SSL_CTX_set_options(ctx, b.lib.SSL_OP_ALL) @@ -49,7 +50,8 @@ def test_ssl_options(self): # Test that we're properly handling 32-bit unsigned on all platforms. b = Binding() assert b.lib.SSL_OP_ALL > 0 - ctx = b.lib.SSL_CTX_new(b.lib.TLSv1_method()) + ctx = b.lib.SSL_CTX_new(b.lib.SSLv23_method()) + assert ctx != b.ffi.NULL ctx = b.ffi.gc(ctx, b.lib.SSL_CTX_free) ssl = b.lib.SSL_new(ctx) ssl = b.ffi.gc(ssl, b.lib.SSL_free) From 37d2947b441cb20d7cf49af5c179733e6f812e03 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Aug 2018 17:39:10 -0400 Subject: [PATCH 322/988] Document wycheproof revision we're current as of (#4390) * Document wycheproof revision we're current as of * Wycheproof is a real word! * line length --- docs/development/test-vectors.rst | 14 +++++++++++++- docs/spelling_wordlist.txt | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index d28e32323cba..506afd87271f 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -8,12 +8,23 @@ not possible ``cryptography`` has chosen to create a set of custom vectors using an official vector file as input to verify consistency between implemented backends. -Vectors are kept in the `cryptography_vectors` package rather than within our +Vectors are kept in the ``cryptography_vectors`` package rather than within our main test suite. Sources ------- +Project Wycheproof +~~~~~~~~~~~~~~~~~~ + +We run vectors from `Project Wycheproof`_ -- a collection of known edge-cases +for various cryptographic algorithms. These are not included in the repository +(or ``cryptography_vectors`` package), but rather cloned from Git in our +continuous integration environments. + +We have ensured all test vectors are used as of commit +``f89f4c53a8845fcefcdb9f14ee9191dbe167e3e3``. + Asymmetric ciphers ~~~~~~~~~~~~~~~~~~ @@ -511,6 +522,7 @@ header format (substituting the correct information): .. _`NIST`: https://www.nist.gov/ .. _`IETF`: https://www.ietf.org/ +.. _`Project Wycheproof`: https://github.com/google/wycheproof .. _`NIST CAVP`: https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program .. _`Bruce Schneier's vectors`: https://www.schneier.com/code/vectors.txt .. _`Camellia page`: https://info.isl.ntt.co.jp/crypt/eng/camellia/ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 160971d95c31..225ee3afdd66 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -105,5 +105,6 @@ Verisign versioning wildcard WoSign +Wycheproof Xcode XEX From b1aad8f273dfec7641b31bfbeaebfb921e27122a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Aug 2018 17:39:32 -0400 Subject: [PATCH 323/988] sigh, missed one TLSv1 (#4392) --- tests/hazmat/bindings/test_openssl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index c0dbc9ba827a..f317f07f7f15 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -65,7 +65,8 @@ def test_ssl_mode(self): # Test that we're properly handling 32-bit unsigned on all platforms. b = Binding() assert b.lib.SSL_OP_ALL > 0 - ctx = b.lib.SSL_CTX_new(b.lib.TLSv1_method()) + ctx = b.lib.SSL_CTX_new(b.lib.SSLv23_method()) + assert ctx != b.ffi.NULL ctx = b.ffi.gc(ctx, b.lib.SSL_CTX_free) ssl = b.lib.SSL_new(ctx) ssl = b.ffi.gc(ssl, b.lib.SSL_free) From c11f424b34a710b2cf42cd26d391dca53922181c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 14 Aug 2018 13:25:23 -0500 Subject: [PATCH 324/988] port 2.3.1 changelog (#4397) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index dc5ec83cf612..350f85321e98 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,14 @@ Changelog .. note:: This version is not yet released and is under active development. +.. _v2-3-1: + +2.3.1 - 2018-08-14 +~~~~~~~~~~~~~~~~~~ + +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.0i. + .. _v2-3: 2.3 - 2018-07-18 From b3f4df1947575813c89b38a3778d826152d7766a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 15 Aug 2018 09:19:15 -0500 Subject: [PATCH 325/988] add new OCSP request vectors (#4399) --- docs/development/test-vectors.rst | 4 ++++ .../x509/ocsp/req-invalid-hash-alg.der | Bin 0 -> 88 bytes .../x509/ocsp/req-multi-sha1.der | Bin 0 -> 173 bytes 3 files changed, 4 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/req-invalid-hash-alg.der create mode 100644 vectors/cryptography_vectors/x509/ocsp/req-multi-sha1.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 506afd87271f..4ae152be071a 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -409,6 +409,10 @@ Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ``x509/ocsp/req-sha1.der`` - An OCSP request containing a single request and using SHA1 as the hash algorithm. +* ``x509/ocsp/req-multi-sha1.der`` - An OCSP request containing multiple + requests. +* ``x509/ocsp/req-invalid-hash-alg.der`` - An OCSP request containing an + invalid hash algorithm OID. Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ocsp/req-invalid-hash-alg.der b/vectors/cryptography_vectors/x509/ocsp/req-invalid-hash-alg.der new file mode 100644 index 0000000000000000000000000000000000000000..b74fe680f2789a6fd9725d856f28fbfb3864b7e4 GIT binary patch literal 88 zcmV-e0H^;jRxngBQZP_3PB0M$4J!r#1ObAiWCH>LV*v#K1Q0mNMvMnUjr4(*$8Bv) ua8U#hd3C#lI?F8HdI`QU8$-Mt0u=z5+2z2r!*f+F_k3Ls9<>sVNk#clNgeV4 literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/x509/ocsp/req-multi-sha1.der b/vectors/cryptography_vectors/x509/ocsp/req-multi-sha1.der new file mode 100644 index 0000000000000000000000000000000000000000..4a0950ab37dfbefa05f9f08bac91da772bfea0cc GIT binary patch literal 173 zcmXqLTxHO>+@NuZL4bju0Vf-)HXk#S6e|OZh{Y+l9(I@BFOAcV=jQqp1kOuXzL!O$ zvUGQg)oGo3Rh;__rJeW4X!!<5Fo`nExcT(JmczxNy5DPJ`Q^3>^?ADfq`HY80JL#H A8~^|S literal 0 HcmV?d00001 From 962c963f75327f43592d7be31b156837f1f9eff1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 15 Aug 2018 18:52:16 -0400 Subject: [PATCH 326/988] Added missing methods from CRL Interface (#4400) --- src/cryptography/x509/base.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index b14499c9de1f..0b353008d025 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -257,6 +257,24 @@ def __ne__(self, other): Checks not equal. """ + @abc.abstractmethod + def __len__(self): + """ + Number of revoked certificates in the CRL. + """ + + @abc.abstractmethod + def __getitem__(self, idx): + """ + Returns a revoked certificate (or slice of revoked certificates). + """ + + @abc.abstractmethod + def __iter__(self): + """ + Iterator over the revoked certificates + """ + @abc.abstractmethod def is_signature_valid(self, public_key): """ From 732cf642141f57f26db84ec2a4f6122cf7918c9e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 15 Aug 2018 18:04:28 -0500 Subject: [PATCH 327/988] OCSP request parsing (#4393) * add public_bytes to OCSPRequest * review feedback * OCSP request parsing * change some prose * add __len__ as a required method --- docs/x509/index.rst | 1 + docs/x509/ocsp.rst | 94 ++++++++++++++ .../hazmat/backends/openssl/backend.py | 11 ++ .../hazmat/backends/openssl/ocsp.py | 119 ++++++++++++++++++ src/cryptography/x509/ocsp.py | 79 ++++++++++++ tests/x509/test_ocsp.py | 115 +++++++++++++++++ 6 files changed, 419 insertions(+) create mode 100644 docs/x509/ocsp.rst create mode 100644 src/cryptography/hazmat/backends/openssl/ocsp.py create mode 100644 src/cryptography/x509/ocsp.py create mode 100644 tests/x509/test_ocsp.py diff --git a/docs/x509/index.rst b/docs/x509/index.rst index ec47fe627aff..ef51fbf6220f 100644 --- a/docs/x509/index.rst +++ b/docs/x509/index.rst @@ -10,6 +10,7 @@ certificates are commonly used in protocols like `TLS`_. tutorial certificate-transparency + ocsp reference .. _`public key infrastructure`: https://en.wikipedia.org/wiki/Public_key_infrastructure diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst new file mode 100644 index 000000000000..72227f072f32 --- /dev/null +++ b/docs/x509/ocsp.rst @@ -0,0 +1,94 @@ +OCSP +==== + +.. currentmodule:: cryptography.x509.ocsp + +.. testsetup:: + + der_ocsp_req = ( + b"0V0T0R0P0N0\t\x06\x05+\x0e\x03\x02\x1a\x05\x00\x04\x148\xcaF\x8c" + b"\x07D\x8d\xf4\x81\x96\xc7mmLpQ\x9e`\xa7\xbd\x04\x14yu\xbb\x84:\xcb" + b",\xdez\t\xbe1\x1bC\xbc\x1c*MSX\x02\x15\x00\x98\xd9\xe5\xc0\xb4\xc3" + b"sU-\xf7|]\x0f\x1e\xb5\x12\x8eIE\xf9" + ) + +OCSP (Online Certificate Status Protocol) is a method of checking the +revocation status of certificates. It is specified in :rfc:`6960`, as well +as other obsoleted RFCs. + + +Loading Requests +~~~~~~~~~~~~~~~~ + +.. function:: load_der_ocsp_request(data) + + .. versionadded:: 2.4 + + Deserialize an OCSP request from DER encoded data. + + :param bytes data: The DER encoded OCSP request data. + + :returns: An instance of :class:`~cryptography.x509.ocsp.OCSPRequest`. + + .. doctest:: + + >>> from cryptography.x509 import ocsp + >>> ocsp_req = ocsp.load_der_ocsp_request(der_ocsp_req) + >>> for request in ocsp_req: + ... print(request.serial_number) + 872625873161273451176241581705670534707360122361 + + +Interfaces +~~~~~~~~~~ + +.. class:: OCSPRequest + + .. versionadded:: 2.4 + + An ``OCSPRequest`` is an iterable containing one or more + :class:`~cryptography.x509.ocsp.Request` objects. + + .. method:: public_bytes(encoding) + + :param encoding: The encoding to use. Only + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER` + is supported. + + :return bytes: The serialized OCSP request. + +.. class:: Request + + .. versionadded:: 2.4 + + A ``Request`` contains several attributes that create a unique identifier + for a certificate whose status is being checked. It may also contain + additional extensions (currently unsupported). + + .. attribute:: issuer_key_hash + + :type: bytes + + The hash of the certificate issuer's key. The hash algorithm used + is defined by the ``hash_algorithm`` property. + + .. attribute:: issuer_name_hash + + :type: bytes + + The hash of the certificate issuer's name. The hash algorithm used + is defined by the ``hash_algorithm`` property. + + .. attribute:: hash_algorithm + + :type: An instance of a + :class:`~cryptography.hazmat.primitives.hashes.Hash` + + The algorithm used to generate the ``issuer_key_hash`` and + ``issuer_name_hash``. + + .. attribute:: serial_number + + :type: int + + The serial number of the certificate to check. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index af14bfaaec0e..6a0446bcfb92 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -40,6 +40,7 @@ ) from cryptography.hazmat.backends.openssl.hashes import _HashContext from cryptography.hazmat.backends.openssl.hmac import _HMACContext +from cryptography.hazmat.backends.openssl.ocsp import _OCSPRequest from cryptography.hazmat.backends.openssl.rsa import ( _RSAPrivateKey, _RSAPublicKey ) @@ -1419,6 +1420,16 @@ def derive_elliptic_curve_private_key(self, private_value, curve): return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) + def load_der_ocsp_request(self, data): + mem_bio = self._bytes_to_bio(data) + request = self._lib.d2i_OCSP_REQUEST_bio(mem_bio.bio, self._ffi.NULL) + if request == self._ffi.NULL: + self._consume_errors() + raise ValueError("Unable to load OCSP request") + + request = self._ffi.gc(request, self._lib.OCSP_REQUEST_free) + return _OCSPRequest(self, request) + def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve): return ( self.elliptic_curve_supported(curve) and diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py new file mode 100644 index 000000000000..38e871ecef9b --- /dev/null +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -0,0 +1,119 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import operator + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.backends.openssl.decode_asn1 import ( + _asn1_integer_to_int, _asn1_string_to_bytes, _obj2txt +) +from cryptography.hazmat.primitives import serialization +from cryptography.x509.ocsp import OCSPRequest, Request, _OIDS_TO_HASH + + +@utils.register_interface(Request) +class _Request(object): + def __init__(self, backend, ocsp_request, request): + self._backend = backend + self._ocsp_request = ocsp_request + self._request = request + self._cert_id = self._backend._lib.OCSP_onereq_get0_id(self._request) + self._backend.openssl_assert(self._cert_id != self._backend._ffi.NULL) + + @property + def issuer_key_hash(self): + key_hash = self._backend._ffi.new("ASN1_OCTET_STRING **") + res = self._backend._lib.OCSP_id_get0_info( + self._backend._ffi.NULL, self._backend._ffi.NULL, + key_hash, self._backend._ffi.NULL, self._cert_id + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(key_hash[0] != self._backend._ffi.NULL) + return _asn1_string_to_bytes(self._backend, key_hash[0]) + + @property + def issuer_name_hash(self): + name_hash = self._backend._ffi.new("ASN1_OCTET_STRING **") + res = self._backend._lib.OCSP_id_get0_info( + name_hash, self._backend._ffi.NULL, + self._backend._ffi.NULL, self._backend._ffi.NULL, self._cert_id + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(name_hash[0] != self._backend._ffi.NULL) + return _asn1_string_to_bytes(self._backend, name_hash[0]) + + @property + def serial_number(self): + num = self._backend._ffi.new("ASN1_INTEGER **") + res = self._backend._lib.OCSP_id_get0_info( + self._backend._ffi.NULL, self._backend._ffi.NULL, + self._backend._ffi.NULL, num, self._cert_id + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(num[0] != self._backend._ffi.NULL) + return _asn1_integer_to_int(self._backend, num[0]) + + @property + def hash_algorithm(self): + asn1obj = self._backend._ffi.new("ASN1_OBJECT **") + res = self._backend._lib.OCSP_id_get0_info( + self._backend._ffi.NULL, asn1obj, + self._backend._ffi.NULL, self._backend._ffi.NULL, self._cert_id + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(asn1obj[0] != self._backend._ffi.NULL) + oid = _obj2txt(self._backend, asn1obj[0]) + try: + return _OIDS_TO_HASH[oid] + except KeyError: + raise UnsupportedAlgorithm( + "Signature algorithm OID: {0} not recognized".format(oid) + ) + + +@utils.register_interface(OCSPRequest) +class _OCSPRequest(object): + def __init__(self, backend, ocsp_request): + self._backend = backend + self._ocsp_request = ocsp_request + + def __len__(self): + return self._backend._lib.OCSP_request_onereq_count(self._ocsp_request) + + def _request(self, idx): + request = self._backend._lib.OCSP_request_onereq_get0( + self._ocsp_request, idx + ) + self._backend.openssl_assert(request != self._backend._ffi.NULL) + return _Request(self._backend, self._ocsp_request, request) + + def public_bytes(self, encoding): + if encoding is not serialization.Encoding.DER: + raise ValueError( + "The only allowed encoding value is Encoding.DER" + ) + + bio = self._backend._create_mem_bio_gc() + res = self._backend._lib.i2d_OCSP_REQUEST_bio(bio, self._ocsp_request) + self._backend.openssl_assert(res > 0) + return self._backend._read_mem_bio(bio) + + def __iter__(self): + for i in range(len(self)): + yield self._request(i) + + def __getitem__(self, idx): + if isinstance(idx, slice): + start, stop, step = idx.indices(len(self)) + return [self._request(i) for i in range(start, stop, step)] + else: + idx = operator.index(idx) + if idx < 0: + idx += len(self) + if not 0 <= idx < len(self): + raise IndexError + return self._request(idx) diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py new file mode 100644 index 000000000000..22894dde0aee --- /dev/null +++ b/src/cryptography/x509/ocsp.py @@ -0,0 +1,79 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography.hazmat.primitives import hashes + + +_OIDS_TO_HASH = { + "1.3.14.3.2.26": hashes.SHA1(), + "2.16.840.1.101.3.4.2.4": hashes.SHA224(), + "2.16.840.1.101.3.4.2.1": hashes.SHA256(), + "2.16.840.1.101.3.4.2.2": hashes.SHA384(), + "2.16.840.1.101.3.4.2.3": hashes.SHA512(), +} + + +def load_der_ocsp_request(data): + from cryptography.hazmat.backends.openssl.backend import backend + return backend.load_der_ocsp_request(data) + + +@six.add_metaclass(abc.ABCMeta) +class OCSPRequest(object): + @abc.abstractmethod + def __iter__(self): + """ + Iteration of Requests + """ + + @abc.abstractmethod + def __len__(self): + """ + Number of Requests inside the OCSPRequest object + """ + + @abc.abstractmethod + def __getitem__(self, idx): + """ + Returns a Request or range of Requests + """ + + @abc.abstractmethod + def public_bytes(self, encoding): + """ + Serializes the request to DER + """ + + +@six.add_metaclass(abc.ABCMeta) +class Request(object): + @abc.abstractproperty + def issuer_key_hash(self): + """ + The hash of the issuer public key + """ + + @abc.abstractproperty + def issuer_name_hash(self): + """ + The hash of the issuer name + """ + + @abc.abstractproperty + def hash_algorithm(self): + """ + The hash algorithm used in the issuer name and key hashes + """ + + @abc.abstractproperty + def serial_number(self): + """ + The serial number of the cert whose status is being checked + """ diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py new file mode 100644 index 000000000000..22f34df2d20f --- /dev/null +++ b/tests/x509/test_ocsp.py @@ -0,0 +1,115 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import os + +import pytest + +from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.x509 import ocsp + +from ..utils import load_vectors_from_file + + +def _load_data(filename, loader): + return load_vectors_from_file( + filename=filename, + loader=lambda data: loader(data.read()), + mode="rb" + ) + + +class TestOCSPRequest(object): + def test_bad_request(self): + with pytest.raises(ValueError): + ocsp.load_der_ocsp_request(b"invalid") + + def test_load_request_one_item(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-sha1.der"), + ocsp.load_der_ocsp_request, + ) + assert len(req) == 1 + assert req[0].issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" + b"\xc7mmLpQ\x9e`\xa7\xbd") + assert req[0].issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" + b"\x1bC\xbc\x1c*MSX") + assert isinstance(req[0].hash_algorithm, hashes.SHA1) + assert req[0].serial_number == int( + "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F9", 16 + ) + + def test_load_request_multiple_items(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-multi-sha1.der"), + ocsp.load_der_ocsp_request, + ) + assert len(req) == 2 + assert req[0].issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" + b"\xc7mmLpQ\x9e`\xa7\xbd") + assert req[0].issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" + b"\x1bC\xbc\x1c*MSX") + assert isinstance(req[0].hash_algorithm, hashes.SHA1) + assert req[0].serial_number == int( + "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F9", 16 + ) + assert req[1].issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" + b"\xc7mmLpQ\x9e`\xa7\xbd") + assert req[1].issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" + b"\x1bC\xbc\x1c*MSX") + assert isinstance(req[1].hash_algorithm, hashes.SHA1) + assert req[1].serial_number == int( + "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F0", 16 + ) + + def test_iter(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-multi-sha1.der"), + ocsp.load_der_ocsp_request, + ) + for request in req: + assert isinstance(request, ocsp.Request) + + def test_indexing_ocsp_request(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-multi-sha1.der"), + ocsp.load_der_ocsp_request, + ) + assert req[1].serial_number == req[-1].serial_number + assert len(req[0:2]) == 2 + assert req[1:2][0].serial_number == int( + "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F0", 16 + ) + with pytest.raises(IndexError): + req[10] + + def test_invalid_hash_algorithm(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-invalid-hash-alg.der"), + ocsp.load_der_ocsp_request, + ) + with pytest.raises(UnsupportedAlgorithm): + req[0].hash_algorithm + + def test_serialize_request(self): + req_bytes = load_vectors_from_file( + filename=os.path.join("x509", "ocsp", "req-sha1.der"), + loader=lambda data: data.read(), + mode="rb" + ) + req = ocsp.load_der_ocsp_request(req_bytes) + assert req.public_bytes(serialization.Encoding.DER) == req_bytes + + def test_invalid_serialize_encoding(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-sha1.der"), + ocsp.load_der_ocsp_request, + ) + with pytest.raises(ValueError): + req.public_bytes("invalid") + with pytest.raises(ValueError): + req.public_bytes(serialization.Encoding.PEM) From 5b502310fe1bfb3dd96b51918c6cf579d111ad63 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 15 Aug 2018 18:17:26 -0500 Subject: [PATCH 328/988] remove freebsd11 builder (#4401) * remove freebsd11 builder it's out of date, we can't update it, and it is unreliable * we don't test against freebsd for now * what did case sensitivity ever do for me * don't assert on bsd since we don't test on for now --- Jenkinsfile | 4 ---- docs/installation.rst | 2 -- tests/hazmat/backends/test_openssl.py | 2 -- 3 files changed, 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 816e9de84ba8..350d832fbe13 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,10 +11,6 @@ def configs = [ label: 'windows64', toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], ], - [ - label: 'freebsd11', - toxenvs: ['py27'], - ], [ label: 'sierra', toxenvs: ['py27', 'py36'], diff --git a/docs/installation.rst b/docs/installation.rst index 13cd75e1fea4..a4649f51bd42 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -14,7 +14,6 @@ Currently we test ``cryptography`` on Python 2.7, 3.4+, and PyPy 5.3+ on these operating systems. * x86-64 CentOS 7.x -* x86-64 FreeBSD 11 * macOS 10.12 Sierra, 10.11 El Capitan * x86-64 Ubuntu 14.04, 16.04, and rolling * x86-64 Debian Wheezy (7.x), Jessie (8.x), Stretch (9.x), and Sid (unstable) @@ -27,7 +26,6 @@ OpenSSL releases: * ``OpenSSL 1.0.1`` * ``OpenSSL 1.0.1e-fips`` (``RHEL/CentOS 7``) * ``OpenSSL 1.0.1f`` -* ``OpenSSL 1.0.1j-freebsd`` * ``OpenSSL 1.0.2-latest`` * ``OpenSSL 1.1.0-latest`` diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index e77f5dc316d2..0aa72d8904f7 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -277,8 +277,6 @@ def test_osrandom_engine_implementation(self): assert name == 'getentropy' else: assert name == '/dev/urandom' - if 'bsd' in sys.platform: - assert name in ['getentropy', '/dev/urandom'] if sys.platform == 'win32': assert name == 'CryptGenRandom' From 3d271fa4987db3519b244b3b42686fe3d151c2ec Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 16 Aug 2018 20:08:05 -0400 Subject: [PATCH 329/988] Added OCSP to the changelog (#4405) --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 350f85321e98..c6d0d93cea68 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ Changelog .. note:: This version is not yet released and is under active development. +* Added initial :doc:`OCSP ` support. + .. _v2-3-1: 2.3.1 - 2018-08-14 From 45784ea3194e72cc14a83b5b0fb668d3524bb8bc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 20 Aug 2018 10:09:21 -0500 Subject: [PATCH 330/988] add bindings for SCT creation (#4407) --- src/_cffi_src/openssl/ct.py | 15 +++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/src/_cffi_src/openssl/ct.py b/src/_cffi_src/openssl/ct.py index 21018d7e4957..4aa368993478 100644 --- a/src/_cffi_src/openssl/ct.py +++ b/src/_cffi_src/openssl/ct.py @@ -52,6 +52,14 @@ SCT *sk_SCT_value(const Cryptography_STACK_OF_SCT *, int); void SCT_LIST_free(Cryptography_STACK_OF_SCT *); + +int sk_SCT_push(Cryptography_STACK_OF_SCT *, SCT *); +Cryptography_STACK_OF_SCT *sk_SCT_new_null(void); +SCT *SCT_new(void); +int SCT_set1_log_id(SCT *, unsigned char *, size_t); +void SCT_set_timestamp(SCT *, uint64_t); +int SCT_set_version(SCT *, sct_version_t); +int SCT_set_log_entry_type(SCT *, ct_log_entry_type_t); """ CUSTOMIZATIONS = """ @@ -89,5 +97,12 @@ SCT *(*sk_SCT_value)(const Cryptography_STACK_OF_SCT *, int) = NULL; void (*SCT_LIST_free)(Cryptography_STACK_OF_SCT *) = NULL; +int (*sk_SCT_push)(Cryptography_STACK_OF_SCT *, SCT *) = NULL; +Cryptography_STACK_OF_SCT *(*sk_SCT_new_null)(void) = NULL; +SCT *(*SCT_new)(void) = NULL; +int (*SCT_set1_log_id)(SCT *, unsigned char *, size_t) = NULL; +void (*SCT_set_timestamp)(SCT *, uint64_t) = NULL; +int (*SCT_set_version)(SCT *, sct_version_t) = NULL; +int (*SCT_set_log_entry_type)(SCT *, ct_log_entry_type_t) = NULL; #endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index eb31c10525df..6cfd29fc6a07 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -186,6 +186,13 @@ def cryptography_has_sct(): "sk_SCT_num", "sk_SCT_value", "SCT_LIST_free", + "sk_SCT_push", + "sk_SCT_new_null", + "SCT_new", + "SCT_set1_log_id", + "SCT_set_timestamp", + "SCT_set_version", + "SCT_set_log_entry_type", ] From fe33ec8ca04b74479c68806616b0e6a43503d794 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 23 Aug 2018 10:28:15 -0500 Subject: [PATCH 331/988] test to see what coverage pypy is providing (#4411) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4288eb4e5e4b..efee3673d0ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,9 +32,9 @@ matrix: dist: xenial sudo: true - python: pypy-5.3 - env: TOXENV=pypy + env: TOXENV=pypy-nocoverage - python: pypy2.7-5.10.0 - env: TOXENV=pypy + env: TOXENV=pypy-nocoverage - python: pypy3.5-5.10.1 env: TOXENV=pypy3-nocoverage - python: 2.7 From 3ce8883fd62043419b225790cd524b7619b4bb72 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Thu, 23 Aug 2018 14:58:30 -0500 Subject: [PATCH 332/988] Fix encoding errors in RSA test keys. (#4410) * Fix encoding errors in RSA test keys. enc-rsa-pkcs8.pem and unenc-rsa-pkcs8.pem did not encode the RSA key correctly. Per RFC 8017, appendix A.1: The object identifier rsaEncryption identifies RSA public and private keys as defined in Appendices A.1.1 and A.1.2. The parameters field has associated with this OID in a value of type AlgorithmIdentifier SHALL have a value of type NULL. rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } unenc-rsa-pkcs8.pem, however, was missing that NULL, which was, in turn, carried into the encrypted payload of enc-rsa-pkcs8.pem. The DER version, enc-rsa-pkcs8.der, carries this mistake too. Interestingly, unenc-rsa-pkcs8.der does *not* have it. I'm guessing it was converted with the openssl command-line tool which fixed the encoding in conversion. Current versions of OpenSSL are lax and ignore the parameters field, but it's best to test against spec-compliant inputs. Fix unenc-rsa-pkcs8.pem to match unenc-rsa-pkcs8.der and then refresh enc-rsa-pkcs8.{der,pem} with the new encoding but otherwise the same encryption parameters. I've refreshed the dumpasn1 (at least that's what it looks like) preamble at the top of each file, but the current version of dumpasn1 appears to have changed the spacing slightly, so there's some whitespace diff noise. * Update test-vectors.rst. --- docs/development/test-vectors.rst | 6 +- .../DER_Serialization/enc-rsa-pkcs8.der | Bin 678 -> 678 bytes .../asymmetric/PKCS8/enc-rsa-pkcs8.pem | 70 ++++---- .../asymmetric/PKCS8/unenc-rsa-pkcs8.pem | 151 +++++++++--------- 4 files changed, 114 insertions(+), 113 deletions(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 4ae152be071a..5032c5f9c8ca 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -41,8 +41,10 @@ Asymmetric ciphers * PKCS #8 PEM serialization vectors from * GnuTLS: `enc-rsa-pkcs8.pem`_, `enc2-rsa-pkcs8.pem`_, - `unenc-rsa-pkcs8.pem`_, `pkcs12_s2k_pem.c`_. The contents of - `enc2-rsa-pkcs8.pem`_ was re-encrypted using a stronger PKCS#8 cipher. + `unenc-rsa-pkcs8.pem`_, `pkcs12_s2k_pem.c`_. The encoding error in + `unenc-rsa-pkcs8.pem`_ was fixed, and the contents of `enc-rsa-pkcs8.pem`_ + was re-encrypted to include it. The contents of `enc2-rsa-pkcs8.pem`_ + was re-encrypted using a stronger PKCS#8 cipher. * `Botan's ECC private keys`_. * `asymmetric/public/PKCS1/dsa.pub.pem`_ is a PKCS1 DSA public key from the Ruby test suite. diff --git a/vectors/cryptography_vectors/asymmetric/DER_Serialization/enc-rsa-pkcs8.der b/vectors/cryptography_vectors/asymmetric/DER_Serialization/enc-rsa-pkcs8.der index 7c513b8e985447eb79209a45d3b790d8bcdf9302..e6e4891933b5ce9853f9dad1a4db44b0f2ddfd95 100644 GIT binary patch delta 668 zcmV;N0%QHA1*Qd%7Jq8|#H=&|r(6O80U`u~0)XIDp&8^{z}%LjPU8~Ff+4M~?H(f; zyfeQ!2$+z?afgtyd1&Jg8i8K1HY4~Qt?=K!Uk+@(+cjZRH;{g- zl{Y_&@p*wn^t#e6UN6`|YDXgz@;dV>*i>Tj5}vdF9_#ZMBY(9{ST+v(eyUx=EWDVo zK_3b4w1;&FdMlG)TOk#Ec)d{NrdgB3e5`X?)b~Ppo+MbNwO(9by?V3L-%B;Y-5_^v z$>g;z@%X-jbmFmQ<5wdc@X-*3Czo|TG(D+&mu{Iz$T|nLaAEpmByfECD|1HqW(hl# zZh1n1-yev%qko@o?BtOhK8d1GRtCmAHAX;0d!OhtS@V?@>)x$zq_Y(54X&B9A5^M- z$X*{B1a^pFKTog9y+5WtDg#TGCv6Z|oVBF}OI>+!EmW6>=9|J>f`}`+iN&Be_P4zG z{R=Vu2orwn{bC7TCpg#h4)oIFaN#1#aG@)$cOu^6vwzUSJ`mPTG@1_7Tdlc%D1G1X zFk-4DiB@bCx(x$OCySd9qHrm)#-T_g99mAm*p3HxXJ2oA+H!d^E2sl6E92HAab&^* z3%ErFYM2(Ogp1fj3VG^T&klPa3>N6YyNLFW&?9$iN2kf250Qnfu%#OprfG?NDin|% zOkeaf2S6~dl5o4c)_AWQ*N2a1X8sQ z>&U7c%yP?YX`w;^blz!aTs4w6d^sA#&j79rQxyun=L}-XxuM)kUzfK#fRK|@ED|sB ChCR0c delta 668 zcmV;N0%QHA1*Qd%7JqWIGf$AXLj3{)0U`u~0)Wx0;*n$R7e7l*mjF}ESfX7e=*Zd1 z0g|oezDoV^jh@@~+7I=!_Du=vYpTLS3zv*g^V)MgI*eMsBAXtkkIsTLJx~L)T-w$W zgL15S)((#DvHDPt9zumzGh=0EbLg-Od#-wE=#R06ap6!G)_q1BTrMRCJgJo8}afH-L_ zfcZ5&yp|4Wbd`KicFF&Jh4vWCFRqenl;pdo(afwXn?L5{uny;xm^2Eqnc6ofnlNDT zzYigbQe5u%G=F?!n|^l4rYzyaoGO5zUq`lW(0lwjh_xN=40;#L8P> zlo6LgyTGcIIL#%L+58H71QA}AQy({Op=E)!9~0W`pn~Q_Lf2D=zkjY%1_fl^u!uV>&f{|R_>*q zBhy!2by;3i)XnJJZQA39gUa5^pXHJ|m91>_3{JXAhU)rRcnQ9`TK;V|py8do=|i%E zf`O~xK*gZ%5{fUrw$hR1?w;TO%ViVFy1cd3zawn`=q>z^E84g(tah18FvQS2APO*7 z5^uY4Q-2jULFjk3%R%SWYISW|qw{WR{C~I#df~8HA-$pOKa|~}#lplqk-$P(%Yz-y z&}T-BuT8%IG!XruV26a`Z}ppr1CA=#t=< z!E3$O;~xSqnIn$XgAJI1!K+O)L&bxuAu9wsI2DG=?K`DV;J2zKKA;L!_o?DdXpwG= C(OAX+ diff --git a/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-pkcs8.pem b/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-pkcs8.pem index 69417b85d8c6..f5377af97856 100644 --- a/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-pkcs8.pem +++ b/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-pkcs8.pem @@ -1,38 +1,38 @@ - 0 674: SEQUENCE { - 4 28: SEQUENCE { - 6 10: OBJECT IDENTIFIER - : pbeWithSHAAnd3-KeyTripleDES-CBC (1 2 840 113549 1 12 1 3) - 18 14: SEQUENCE { - 20 8: OCTET STRING 72 B4 33 4F 90 B8 42 FD - 30 2: INTEGER 290 - : } - : } - 34 640: OCTET STRING - : D1 AB E2 91 63 ED 17 3F 4B 4E 97 00 53 CD 58 A2 - : 5D 25 E8 C8 D9 CA 01 92 AD E6 BE 4A FD F1 8D 9E - : DB F6 DA 0F F5 B3 F6 4D 09 EB 6B AA C2 43 0B 97 - : 8C 50 F3 DA 73 3D 3A 8C 5A BF 22 9B 1E A7 8F CE - : 82 34 3D 50 03 B3 5C DA D6 12 83 72 AC 79 D6 0E - : 8E EE B2 00 F7 09 6D 26 2B 2A 84 47 8F B0 1B 46 - : 5D 54 C6 ED DC DF 82 24 71 81 F3 98 F3 46 64 13 - : 7E 47 71 D6 B4 96 79 2C 7E 5F 2B 30 1E 7F 04 47 - : [ Another 512 bytes skipped ] - : } + 0 674: SEQUENCE { + 4 28: SEQUENCE { + 6 10: OBJECT IDENTIFIER + : pbeWithSHAAnd3-KeyTripleDES-CBC (1 2 840 113549 1 12 1 3) + 18 14: SEQUENCE { + 20 8: OCTET STRING 6A FC C4 AC 34 02 A7 5C + 30 2: INTEGER 290 + : } + : } + 34 640: OCTET STRING + : E0 54 A1 19 E4 5C C0 DC 96 A3 4E E3 12 CA 82 21 + : AD AD ED 1E 23 19 BC 33 BF 39 08 98 90 C5 71 87 + : 90 B2 79 68 E3 0F 1A 81 5E B1 36 23 F8 1D AD F0 + : DF BF 5F 0E 6C BE DB 35 61 81 40 BE FB 5B 46 79 + : DA 76 5A 79 4E A3 37 90 7E AB 95 37 3F 8B F1 79 + : 81 44 F4 BA D2 2E 5E 2F D8 41 6A 47 23 13 F2 3A + : F3 2A D8 54 62 F2 12 9E B3 FF 1E EB F3 18 23 B5 + : 4E 58 36 0E FB 7E AA 5D C3 2C BC 98 B0 41 1F 09 + : [ Another 512 bytes skipped ] + : } -----BEGIN ENCRYPTED PRIVATE KEY----- -MIICojAcBgoqhkiG9w0BDAEDMA4ECHK0M0+QuEL9AgIBIgSCAoDRq+KRY+0XP0tO -lwBTzViiXSXoyNnKAZKt5r5K/fGNntv22g/1s/ZNCetrqsJDC5eMUPPacz06jFq/ -Ipsep4/OgjQ9UAOzXNrWEoNyrHnWDo7usgD3CW0mKyqER4+wG0ZdVMbt3N+CJHGB -85jzRmQTfkdx1rSWeSx+XyswHn8ER4+hQ+omKWMVm7AFkjjmP/KmhUnLT98J8rhU -ArQoFPHz/6HVkypFccNaPPNg6IA4aS2A+TU9vJYOaXSVfFB2yf99hfYYzC+ukmuU -5Lun0cysK5s/5uSwDueUmDQKspnaNyiaMGDxvw8hilJc7vg0fGObfnbIpizhxJwq -gKBfR7Zt0Hv8OYi1He4MehfMGdbHskztF+yQ40LplBGXQrvAqpU4zShga1BoQ98T -0ekbBmqj7hg47VFsppXR7DKhx7G7rpMmdKbFhAZVCjae7rRGpUtD52cpFdPhMyAX -huhMkoczwUW8B/rM4272lkHo6Br0yk/TQfTEGkvryflNVu6lniPTV151WV5U1M3o -3G3a44eDyt7Ln+WSOpWtbPQMTrpKhur6WXgJvrpa/m02oOGdvOlDsoOCgavgQMWg -7xKKL7620pHl7p7f/8tlE8q6vLXVvyNtAOgt/JAr2rgvrHaZSzDE0DwgCjBXEm+7 -cVMVNkHod7bLQefVanVtWqPzbmr8f7gKeuGwWSG9oew/lN2hxcLEPJHAQlnLgx3P -0GdGjK9NvwA0EP2gYIeE4+UtSder7xQ7bVh25VB20R4TTIIs4aXXCVOoQPagnzaT -6JLgl8FrvdfjHwIvmSOO1YMNmILBq000Q8WDqyErBDs4hsvtO6VQ4LeqJj6gClX3 -qeJNaJFu +MIICojAcBgoqhkiG9w0BDAEDMA4ECGr8xKw0AqdcAgIBIgSCAoDgVKEZ5FzA3Jaj +TuMSyoIhra3tHiMZvDO/OQiYkMVxh5CyeWjjDxqBXrE2I/gdrfDfv18ObL7bNWGB +QL77W0Z52nZaeU6jN5B+q5U3P4vxeYFE9LrSLl4v2EFqRyMT8jrzKthUYvISnrP/ +HuvzGCO1Tlg2Dvt+ql3DLLyYsEEfCe+0h3UIeiuTYFshFXx4vVDlplmTxHysc1rU +90J5niRYprVeXF+9erPT30s1wd0gd27J5LUu8fi+g3TisWbjVyMd8NEQhSeXdT40 +Pal8l26ZSMg6B7VwYfpjJHB8+itzRvlmCTuUbnlCgd8fiLmjn2/s5JEdPomiUFYG +xjw1RkBEe5/oM1nzlRXr3q1vpLMU7Q2umbMfVKp+yF4fGgR2iGE/T6/KvT+mPioD +S5cnbRBYnLWlBktdeXEtVJeH5pvCW4KIK7qJxaA49re8+f0LMf0IE37s/WIJXic4 +1/MO9NLjcOEiynChK613It7is9DCPhDWTTSaDtRbrbl+KH3f8DBiqiWJVmwVug0D +TSeLmxCicCmyxqFIJBxaTsDYjgd3Z19vftpyeTIrqAMvK+PWJHFkwgILuEUGapgW +qYSL2EQKeepZzw57IAwW6MG7iPaP0CN3a0enyZ4PkYWtsKUbF6ZpiX0qFJAd5D9i +7kCvN9huAvC1CCT4zghpQXvQ1W5EnQDHQ/efCFngB5HlKQr4jrfUmjg2yOcAK/ih +aLHjPX5x9+W9fDVXRNMhYTs96JzVVcEg9WP6ID/PuVt/pxbBexFCNXjBokNTbpnI +BFK1DuvIqhzMcstsaaFCAXTeaWdcNZI3fDkaxM8ArgxTCr7nDGLKuaHcS1+XtzuA +kJNTLBIv -----END ENCRYPTED PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/PKCS8/unenc-rsa-pkcs8.pem b/vectors/cryptography_vectors/asymmetric/PKCS8/unenc-rsa-pkcs8.pem index 794dfd7e7ab7..9eff5c6d6aff 100644 --- a/vectors/cryptography_vectors/asymmetric/PKCS8/unenc-rsa-pkcs8.pem +++ b/vectors/cryptography_vectors/asymmetric/PKCS8/unenc-rsa-pkcs8.pem @@ -1,79 +1,78 @@ - 0 629: SEQUENCE { - 4 1: INTEGER 0 - 7 11: SEQUENCE { - 9 9: OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1) - : } - 20 609: OCTET STRING, encapsulates { - 24 605: SEQUENCE { - 28 1: INTEGER 0 - 31 129: INTEGER - : 00 BB 24 7A 09 7E 0E B2 37 32 CC 39 67 AD F1 9E - : 3D 6B 82 83 D1 D0 AC A4 C0 18 BE 8D 98 00 C0 7B - : FF 07 44 C9 CA 1C BA 36 E1 27 69 FF B1 E3 8D 8B - : EE 57 A9 3A AA 16 43 39 54 19 7C AE 69 24 14 F6 - : 64 FF BC 74 C6 67 6C 4C F1 02 49 69 C7 2B E1 E1 - : A1 A3 43 14 F4 77 8F C8 D0 85 5A 35 95 AC 62 A9 - : C1 21 00 77 A0 8B 97 30 B4 5A 2C B8 90 2F 48 A0 - : 05 28 4B F2 0F 8D EC 8B 4D 03 42 75 D6 AD 81 C0 - : [ Another 1 bytes skipped ] - 163 3: INTEGER 65537 - 168 128: INTEGER - : 00 FC B9 4A 26 07 89 51 2B 53 72 91 E0 18 3E A6 - : 5E 31 EF 9C 0C 16 24 42 D0 28 33 F9 FA D0 3C 54 - : 04 06 C0 15 F5 1B 9A B3 24 31 AB 3C 6B 47 43 B0 - : D2 A9 DC 05 E1 81 59 B6 04 E9 66 61 AA D7 0B 00 - : 8F 3D E5 BF A2 F8 5E 25 6C 1E 22 0F B4 FD 41 E2 - : 03 31 5F DA 20 C5 C0 F3 55 0E E1 C9 EC D7 3E 2A - : 0C 01 CA 7B 22 CB AC F4 2B 27 F0 78 5F B5 C2 F9 - : E8 14 5A 6E 7E 86 BD 6A 9B 20 0C BA CC 97 20 11 - 299 65: INTEGER - : 00 C9 59 9F 29 8A 5B 9F E3 2A D8 7E C2 40 9F A8 - : 45 E5 3E 11 8D 3C ED 6E AB CE D0 65 46 D8 C7 07 - : 63 B5 23 34 F4 9F 7E 1C C7 C7 F9 65 D1 F4 04 42 - : 38 BE 3A 0C 9D 08 25 FC A3 71 D9 AE 0C 39 61 F4 - : 89 - 366 65: INTEGER - : 00 ED EF AB A9 D5 39 9C EE 59 1B FF CF 48 44 1B - : B6 32 E7 46 24 F3 04 7F DE 95 08 6D 75 9E 67 17 - : BA 5C A4 D4 E2 E2 4D 77 CE EB 66 29 C5 96 E0 62 - : BB E5 AC DC 44 62 54 86 ED 64 0C CE D0 60 03 9D - : 49 - 433 64: INTEGER - : 54 D9 18 72 27 E4 BE 76 BB 1A 6A 28 2F 95 58 12 - : C4 2C A8 B6 CC E2 FD 0D 17 64 C8 18 D7 C6 DF 3D - : 4C 1A 9E F9 2A B0 B9 2E 12 FD EC C3 51 C1 ED A9 - : FD B7 76 93 41 D8 C8 22 94 1A 77 F6 9C C3 C3 89 - 499 65: INTEGER - : 00 8E F9 A7 08 AD B5 2A 04 DB 8D 04 A1 B5 06 20 - : 34 D2 CF C0 89 B1 72 31 B8 39 8B CF E2 8E A5 DA - : 4F 45 1E 53 42 66 C4 30 4B 29 8E C1 69 17 29 8C - : 8A E6 0F 82 68 A1 41 B3 B6 70 99 75 A9 27 18 E4 - : E9 - 566 65: INTEGER - : 00 89 EA 6E 6D 70 DF 25 5F 18 3F 48 DA 63 10 8B - : FE A8 0C 94 0F DE 97 56 53 89 94 E2 1E 2C 74 3C - : 91 81 34 0B A6 40 F8 CB 2A 60 8C E0 02 B7 89 93 - : CF 18 9F 49 54 FD 7D 3F 9A EF D4 A4 4F C1 45 99 - : 91 - : } - : } - : } - -0 warnings, 0 errors. + 0 631: SEQUENCE { + 4 1: INTEGER 0 + 7 13: SEQUENCE { + 9 9: OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1) + 20 0: NULL + : } + 22 609: OCTET STRING, encapsulates { + 26 605: SEQUENCE { + 30 1: INTEGER 0 + 33 129: INTEGER + : 00 BB 24 7A 09 7E 0E B2 37 32 CC 39 67 AD F1 9E + : 3D 6B 82 83 D1 D0 AC A4 C0 18 BE 8D 98 00 C0 7B + : FF 07 44 C9 CA 1C BA 36 E1 27 69 FF B1 E3 8D 8B + : EE 57 A9 3A AA 16 43 39 54 19 7C AE 69 24 14 F6 + : 64 FF BC 74 C6 67 6C 4C F1 02 49 69 C7 2B E1 E1 + : A1 A3 43 14 F4 77 8F C8 D0 85 5A 35 95 AC 62 A9 + : C1 21 00 77 A0 8B 97 30 B4 5A 2C B8 90 2F 48 A0 + : 05 28 4B F2 0F 8D EC 8B 4D 03 42 75 D6 AD 81 C0 + : 11 +165 3: INTEGER 65537 +170 128: INTEGER + : 00 FC B9 4A 26 07 89 51 2B 53 72 91 E0 18 3E A6 + : 5E 31 EF 9C 0C 16 24 42 D0 28 33 F9 FA D0 3C 54 + : 04 06 C0 15 F5 1B 9A B3 24 31 AB 3C 6B 47 43 B0 + : D2 A9 DC 05 E1 81 59 B6 04 E9 66 61 AA D7 0B 00 + : 8F 3D E5 BF A2 F8 5E 25 6C 1E 22 0F B4 FD 41 E2 + : 03 31 5F DA 20 C5 C0 F3 55 0E E1 C9 EC D7 3E 2A + : 0C 01 CA 7B 22 CB AC F4 2B 27 F0 78 5F B5 C2 F9 + : E8 14 5A 6E 7E 86 BD 6A 9B 20 0C BA CC 97 20 11 +301 65: INTEGER + : 00 C9 59 9F 29 8A 5B 9F E3 2A D8 7E C2 40 9F A8 + : 45 E5 3E 11 8D 3C ED 6E AB CE D0 65 46 D8 C7 07 + : 63 B5 23 34 F4 9F 7E 1C C7 C7 F9 65 D1 F4 04 42 + : 38 BE 3A 0C 9D 08 25 FC A3 71 D9 AE 0C 39 61 F4 + : 89 +368 65: INTEGER + : 00 ED EF AB A9 D5 39 9C EE 59 1B FF CF 48 44 1B + : B6 32 E7 46 24 F3 04 7F DE 95 08 6D 75 9E 67 17 + : BA 5C A4 D4 E2 E2 4D 77 CE EB 66 29 C5 96 E0 62 + : BB E5 AC DC 44 62 54 86 ED 64 0C CE D0 60 03 9D + : 49 +435 64: INTEGER + : 54 D9 18 72 27 E4 BE 76 BB 1A 6A 28 2F 95 58 12 + : C4 2C A8 B6 CC E2 FD 0D 17 64 C8 18 D7 C6 DF 3D + : 4C 1A 9E F9 2A B0 B9 2E 12 FD EC C3 51 C1 ED A9 + : FD B7 76 93 41 D8 C8 22 94 1A 77 F6 9C C3 C3 89 +501 65: INTEGER + : 00 8E F9 A7 08 AD B5 2A 04 DB 8D 04 A1 B5 06 20 + : 34 D2 CF C0 89 B1 72 31 B8 39 8B CF E2 8E A5 DA + : 4F 45 1E 53 42 66 C4 30 4B 29 8E C1 69 17 29 8C + : 8A E6 0F 82 68 A1 41 B3 B6 70 99 75 A9 27 18 E4 + : E9 +568 65: INTEGER + : 00 89 EA 6E 6D 70 DF 25 5F 18 3F 48 DA 63 10 8B + : FE A8 0C 94 0F DE 97 56 53 89 94 E2 1E 2C 74 3C + : 91 81 34 0B A6 40 F8 CB 2A 60 8C E0 02 B7 89 93 + : CF 18 9F 49 54 FD 7D 3F 9A EF D4 A4 4F C1 45 99 + : 91 + : } + : } + : } -----BEGIN PRIVATE KEY----- -MIICdQIBADALBgkqhkiG9w0BAQEEggJhMIICXQIBAAKBgQC7JHoJfg6yNzLMOWet -8Z49a4KD0dCspMAYvo2YAMB7/wdEycocujbhJ2n/seONi+5XqTqqFkM5VBl8rmkk -FPZk/7x0xmdsTPECSWnHK+HhoaNDFPR3j8jQhVo1laxiqcEhAHegi5cwtFosuJAv -SKAFKEvyD43si00DQnXWrYHAEQIDAQABAoGAAPy5SiYHiVErU3KR4Bg+pl4x75wM -FiRC0Cgz+frQPFQEBsAV9RuasyQxqzxrR0Ow0qncBeGBWbYE6WZhqtcLAI895b+i -+F4lbB4iD7T9QeIDMV/aIMXA81UO4cns1z4qDAHKeyLLrPQrJ/B4X7XC+egUWm5+ -hr1qmyAMusyXIBECQQDJWZ8piluf4yrYfsJAn6hF5T4RjTztbqvO0GVG2McHY7Uj -NPSffhzHx/ll0fQEQji+OgydCCX8o3HZrgw5YfSJAkEA7e+rqdU5nO5ZG//PSEQb -tjLnRiTzBH/elQhtdZ5nF7pcpNTi4k13zutmKcWW4GK75azcRGJUhu1kDM7QYAOd -SQJAVNkYcifkvna7GmooL5VYEsQsqLbM4v0NF2TIGNfG3z1MGp75KrC5LhL97MNR -we2p/bd2k0HYyCKUGnf2nMPDiQJBAI75pwittSoE240EobUGIDTSz8CJsXIxuDmL -z+KOpdpPRR5TQmbEMEspjsFpFymMiuYPgmihQbO2cJl1qScY5OkCQQCJ6m5tcN8l -Xxg/SNpjEIv+qAyUD96XVlOJlOIeLHQ8kYE0C6ZA+MsqYIzgAreJk88Yn0lU/X0/ -mu/UpE/BRZmR +MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALskegl+DrI3Msw5 +Z63xnj1rgoPR0KykwBi+jZgAwHv/B0TJyhy6NuEnaf+x442L7lepOqoWQzlUGXyu +aSQU9mT/vHTGZ2xM8QJJaccr4eGho0MU9HePyNCFWjWVrGKpwSEAd6CLlzC0Wiy4 +kC9IoAUoS/IPjeyLTQNCddatgcARAgMBAAECgYAA/LlKJgeJUStTcpHgGD6mXjHv +nAwWJELQKDP5+tA8VAQGwBX1G5qzJDGrPGtHQ7DSqdwF4YFZtgTpZmGq1wsAjz3l +v6L4XiVsHiIPtP1B4gMxX9ogxcDzVQ7hyezXPioMAcp7Isus9Csn8HhftcL56BRa +bn6GvWqbIAy6zJcgEQJBAMlZnymKW5/jKth+wkCfqEXlPhGNPO1uq87QZUbYxwdj +tSM09J9+HMfH+WXR9ARCOL46DJ0IJfyjcdmuDDlh9IkCQQDt76up1Tmc7lkb/89I +RBu2MudGJPMEf96VCG11nmcXulyk1OLiTXfO62YpxZbgYrvlrNxEYlSG7WQMztBg +A51JAkBU2RhyJ+S+drsaaigvlVgSxCyotszi/Q0XZMgY18bfPUwanvkqsLkuEv3s +w1HB7an9t3aTQdjIIpQad/acw8OJAkEAjvmnCK21KgTbjQShtQYgNNLPwImxcjG4 +OYvP4o6l2k9FHlNCZsQwSymOwWkXKYyK5g+CaKFBs7ZwmXWpJxjk6QJBAInqbm1w +3yVfGD9I2mMQi/6oDJQP3pdWU4mU4h4sdDyRgTQLpkD4yypgjOACt4mTzxifSVT9 +fT+a79SkT8FFmZE= -----END PRIVATE KEY----- From 3d0f333deb4ffbc0d05ea096c57d090e46222fe3 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Aug 2018 23:33:18 -0400 Subject: [PATCH 333/988] Don't clone wycheproof if we're doing a downstream test (#4416) * Don't clone wycheproof if we're doing a downstream test * you and your rules --- .travis/install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis/install.sh b/.travis/install.sh index e3b20fdb8d6a..4debde55d27a 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -41,7 +41,9 @@ elif [ -n "${LIBRESSL}" ]; then fi fi -git clone --depth=1 https://github.com/google/wycheproof $HOME/wycheproof +if [ -z "${DOWNSTREAM}" ]; then + git clone --depth=1 https://github.com/google/wycheproof $HOME/wycheproof +fi pip install virtualenv From bc1667791eedfe9d77d56dd9014e26481f571ff5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 29 Aug 2018 20:50:05 -0400 Subject: [PATCH 334/988] 1.1.0 locks (#4420) * Do conditional compiling of Cryptography_setup_ssl_threads * Check Cryptography_HAS_LOCKING_CALLBACKS before initing static locks Check if compiling and initing locking callbacks is necessary PEP8 fix * Make test_crypto_lock_init more complete --- src/_cffi_src/openssl/callbacks.py | 5 ++++- src/cryptography/hazmat/bindings/openssl/_conditional.py | 1 + src/cryptography/hazmat/bindings/openssl/binding.py | 3 ++- tests/hazmat/bindings/test_openssl.py | 9 ++++++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/_cffi_src/openssl/callbacks.py b/src/_cffi_src/openssl/callbacks.py index 13c4e10c071e..75c620165209 100644 --- a/src/_cffi_src/openssl/callbacks.py +++ b/src/_cffi_src/openssl/callbacks.py @@ -47,6 +47,7 @@ using CPython APIs by Armin Rigo of the PyPy project. */ +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 #ifdef _WIN32 typedef CRITICAL_SECTION Cryptography_mutex; static __inline void cryptography_mutex_init(Cryptography_mutex *mutex) { @@ -80,7 +81,6 @@ #endif - static unsigned int _ssl_locks_count = 0; static Cryptography_mutex *_ssl_locks = NULL; @@ -135,6 +135,9 @@ } return 1; } +#else +int (*Cryptography_setup_ssl_threads)(void) = NULL; +#endif typedef struct { char *password; diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 6cfd29fc6a07..f477f6ab8cb3 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -143,6 +143,7 @@ def cryptography_has_locking_callbacks(): "CRYPTO_READ", "CRYPTO_LOCK_SSL", "CRYPTO_lock", + "Cryptography_setup_ssl_threads", ] diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 81cf547ac008..ec74d4cfd2ea 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -140,7 +140,8 @@ def init_static_locks(cls): # the setup for this. __import__("_ssl") - if cls.lib.CRYPTO_get_locking_callback() != cls.ffi.NULL: + if (not cls.lib.Cryptography_HAS_LOCKING_CALLBACKS or + cls.lib.CRYPTO_get_locking_callback() != cls.ffi.NULL): return # If nothing else has setup a locking callback already, we set up diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index f317f07f7f15..fb1e62fa9b3d 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -21,12 +21,15 @@ def test_binding_loads(self): def test_crypto_lock_init(self): b = Binding() - if b.lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER: - pytest.skip("Requires an older OpenSSL. Must be < 1.1.0") b.init_static_locks() lock_cb = b.lib.CRYPTO_get_locking_callback() - assert lock_cb != b.ffi.NULL + if b.lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER: + assert lock_cb == b.ffi.NULL + assert b.lib.Cryptography_HAS_LOCKING_CALLBACKS == 0 + else: + assert lock_cb != b.ffi.NULL + assert b.lib.Cryptography_HAS_LOCKING_CALLBACKS == 1 def test_add_engine_more_than_once(self): b = Binding() From 712797254ecdd8f6531625bd18d4224c2f9fd135 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 29 Aug 2018 21:29:37 -0400 Subject: [PATCH 335/988] openssl 1.1.1 testing (#4112) * test openssl 1.1.1 * let's see what a 1.1.1 pyopenssl does * 1.1.1-pre8 * pre9 * docs and test more things * 3.7 needs xenial --- .travis.yml | 6 ++++++ docs/installation.rst | 1 + 2 files changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index efee3673d0ff..a14ecf4e241f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,6 +41,12 @@ matrix: env: TOXENV=py27 OPENSSL=1.1.0h - python: 3.5 env: TOXENV=py35 OPENSSL=1.1.0h + - python: 2.7 + env: TOXENV=py27 OPENSSL=1.1.1-pre9 + - python: 3.7 + env: TOXENV=py37 OPENSSL=1.1.1-pre9 + dist: xenial + sudo: true - python: 3.6 env: TOXENV=py36 LIBRESSL=2.4.5 - python: 3.6 diff --git a/docs/installation.rst b/docs/installation.rst index a4649f51bd42..d665dbc59dd8 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -28,6 +28,7 @@ OpenSSL releases: * ``OpenSSL 1.0.1f`` * ``OpenSSL 1.0.2-latest`` * ``OpenSSL 1.1.0-latest`` +* ``OpenSSL 1.1.1-latest`` Building cryptography on Windows -------------------------------- From 653470628b6bba2fc5d038b3b811d02c87eca340 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 29 Aug 2018 22:15:49 -0400 Subject: [PATCH 336/988] Remove several very old FAQ entries (#4423) --- docs/faq.rst | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index 4ab518e4bd62..e28f4c404f59 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -55,11 +55,6 @@ If you are using PyPy, we do not currently ship ``cryptography`` wheels for PyPy. You will need to install your own copy of OpenSSL -- we recommend using Homebrew. -Starting ``cryptography`` using ``mod_wsgi`` produces an ``InternalError`` during a call in ``_register_osrandom_engine`` -------------------------------------------------------------------------------------------------------------------------- - -Upgrade to the latest ``cryptography`` and this issue should be resolved. - ``cryptography`` raised an ``InternalError`` and I'm not sure what to do? ------------------------------------------------------------------------- @@ -70,11 +65,6 @@ If you have no other libraries using OpenSSL in your process, or they do not appear to be at fault, it's possible that this is a bug in ``cryptography``. Please file an `issue`_ with instructions on how to reproduce it. -Installing ``cryptography`` fails with ``ImportError: No module named setuptools_ext`` --------------------------------------------------------------------------------------- - -Your ``cffi`` package is out of date. ``pip install -U cffi`` to update it. - error: ``-Werror=sign-conversion``: No option ``-Wsign-conversion`` during installation --------------------------------------------------------------------------------------- @@ -97,7 +87,7 @@ Installing cryptography with OpenSSL 0.9.8 or 1.0.0 fails The OpenSSL project has dropped support for the 0.9.8 and 1.0.0 release series. Since they are no longer receiving security patches from upstream, ``cryptography`` is also dropping support for them. To fix this issue you -should upgrade to a newer version of OpenSSL (1.0.1 or later). This may require +should upgrade to a newer version of OpenSSL (1.0.2 or later). This may require you to upgrade to a newer operating system. .. _`NaCl`: https://nacl.cr.yp.to/ From 3e73724e8fe9d35de80c20036eec5d5d0d375a1e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 29 Aug 2018 22:27:36 -0400 Subject: [PATCH 337/988] Mention that PyCA also maintains pynacl (#4422) * Mention that PyCA also maintains pynacl * line wrap --- docs/faq.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/faq.rst b/docs/faq.rst index e28f4c404f59..b03f2929462e 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -22,7 +22,8 @@ features a collection of hand selected algorithms. ``cryptography``'s :ref:`recipes ` layer has similar goals to NaCl. -If you prefer NaCl's design, we highly recommend `PyNaCl`_. +If you prefer NaCl's design, we highly recommend `PyNaCl`_, which is also +maintained by the PyCA team. Why use ``cryptography``? ------------------------- From 5cc53d8c3b66e6eab60c5be7dd6223b4e7eca8f9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 29 Aug 2018 23:06:16 -0400 Subject: [PATCH 338/988] Fixes #4421 -- use the latest openssl 1.1.0 in travis (#4424) --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index a14ecf4e241f..a85a8b66e82b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,9 +38,9 @@ matrix: - python: pypy3.5-5.10.1 env: TOXENV=pypy3-nocoverage - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.0h + env: TOXENV=py27 OPENSSL=1.1.0i - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0h + env: TOXENV=py35 OPENSSL=1.1.0i - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.1-pre9 - python: 3.7 @@ -54,7 +54,7 @@ matrix: - python: 3.6 env: TOXENV=py36 LIBRESSL=2.7.4 - python: 3.6 - env: TOXENV=docs OPENSSL=1.1.0h + env: TOXENV=docs OPENSSL=1.1.0i addons: apt: packages: @@ -73,9 +73,9 @@ matrix: - python: 2.7 env: DOWNSTREAM=aws-encryption-sdk - python: 2.7 - env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0h + env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0i - python: 2.7 - env: DOWNSTREAM=certbot OPENSSL=1.1.0h + env: DOWNSTREAM=certbot OPENSSL=1.1.0i - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 From f2321848833b54fa668cffb0a1ab9d20e3ba6fba Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 07:40:25 -0400 Subject: [PATCH 339/988] Fixes #4408 -- added an FAQ about abi3 wheels (#4425) * Fixes #4408 -- added an FAQ about abi3 wheels * abi3 is a word, sort of --- docs/faq.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/faq.rst b/docs/faq.rst index b03f2929462e..409f6ce0850f 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -91,6 +91,14 @@ Since they are no longer receiving security patches from upstream, should upgrade to a newer version of OpenSSL (1.0.2 or later). This may require you to upgrade to a newer operating system. +Why are there no wheels for Python 3.5+ on Linux or macOS? +---------------------------------------------------------- + +Our Python3 wheels, for macOS and Linux, are ``abi3`` wheels. This means they +support multiple versions of Python. The Python 3.4 ``abi3`` wheel can be used +with any version of Python greater than or equal to 3.4. Recent versions of +``pip`` will automatically install ``abi3`` wheels. + .. _`NaCl`: https://nacl.cr.yp.to/ .. _`PyNaCl`: https://pynacl.readthedocs.io .. _`WSGIApplicationGroup`: https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIApplicationGroup.html From 2284eea98847bd42d3ddf7dead504baf3d544d98 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 09:40:46 -0400 Subject: [PATCH 340/988] Fixes #4426 -- use modern idiom in our bindings docs (#4428) --- docs/development/c-bindings.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/c-bindings.rst b/docs/development/c-bindings.rst index 8a9bb6de339b..1b58dab6290f 100644 --- a/docs/development/c-bindings.rst +++ b/docs/development/c-bindings.rst @@ -191,7 +191,7 @@ version, and it's impractical to create ``#ifdef`` statements for each one. In that case, it may make sense to either check for a particular version. For example, to check for OpenSSL 1.1.0 or newer:: - #if OPENSSL_VERSION_NUMBER >= 0x10100000L + #if CRYPTOGRAPHY_OPENSSL_110_OR_GREATER Sometimes, the version of a library on a particular platform will have features that you thought it wouldn't, based on its version. From 002fa75d6c57420ed1805e088e1d6ecbce880938 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 30 Aug 2018 10:41:32 -0400 Subject: [PATCH 341/988] make an ocsp request (#4402) * make an ocsp request * update test, add docs * make it an OCSPRequestBuilder * review feedback and more tests * make it a class * empty commit to retrigger * type check --- docs/x509/ocsp.rst | 113 ++++++++++++++++++ src/_cffi_src/openssl/ocsp.py | 2 + .../hazmat/backends/openssl/backend.py | 16 +++ src/cryptography/x509/ocsp.py | 30 +++++ tests/x509/test_ocsp.py | 64 ++++++++++ 5 files changed, 225 insertions(+) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 72227f072f32..afbb2ef752c5 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -5,6 +5,69 @@ OCSP .. testsetup:: + import base64 + pem_cert = b""" + -----BEGIN CERTIFICATE----- + MIIFvTCCBKWgAwIBAgICPyAwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCVVMx + FjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlkU1NMIFNIQTI1 + NiBDQSAtIEczMB4XDTE0MTAxNTEyMDkzMloXDTE4MTExNjAxMTUwM1owgZcxEzAR + BgNVBAsTCkdUNDg3NDI5NjUxMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29t + L3Jlc291cmNlcy9jcHMgKGMpMTQxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZh + bGlkYXRlZCAtIFJhcGlkU1NMKFIpMRwwGgYDVQQDExN3d3cuY3J5cHRvZ3JhcGh5 + LmlvMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAom/FebKJIot7Sp3s + itG1sicpe3thCssjI+g1JDAS7I3GLVNmbms1DOdIIqwf01gZkzzXBN2+9sOnyRaR + PPfCe1jTr3dk2y6rPE559vPa1nZQkhlzlhMhlPyjaT+S7g4Tio4qV2sCBZU01DZJ + CaksfohN+5BNVWoJzTbOcrHOEJ+M8B484KlBCiSxqf9cyNQKru4W3bHaCVNVJ8eu + 6i6KyhzLa0L7yK3LXwwXVs583C0/vwFhccGWsFODqD/9xHUzsBIshE8HKjdjDi7Y + 3BFQzVUQFjBB50NSZfAA/jcdt1blxJouc7z9T8Oklh+V5DDBowgAsrT4b6Z2Fq6/ + r7D1GqivLK/ypUQmxq2WXWAUBb/Q6xHgxASxI4Br+CByIUQJsm8L2jzc7k+mF4hW + ltAIUkbo8fGiVnat0505YJgxWEDKOLc4Gda6d/7GVd5AvKrz242bUqeaWo6e4MTx + diku2Ma3rhdcr044Qvfh9hGyjqNjvhWY/I+VRWgihU7JrYvgwFdJqsQ5eiKT4OHi + gsejvWwkZzDtiQ+aQTrzM1FsY2swJBJsLSX4ofohlVRlIJCn/ME+XErj553431Lu + YQ5SzMd3nXzN78Vj6qzTfMUUY72UoT1/AcFiUMobgIqrrmwuNxfrkbVE2b6Bga74 + FsJX63prvrJ41kuHK/16RQBM7fcCAwEAAaOCAWAwggFcMB8GA1UdIwQYMBaAFMOc + 8/zTRgg0u85Gf6B8W/PiCMtZMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYT + aHR0cDovL2d2LnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL2d2LnN5bWNi + LmNvbS9ndi5jcnQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB + BggrBgEFBQcDAjAvBgNVHREEKDAmghN3d3cuY3J5cHRvZ3JhcGh5Lmlvgg9jcnlw + dG9ncmFwaHkuaW8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2d2LnN5bWNiLmNv + bS9ndi5jcmwwDAYDVR0TAQH/BAIwADBFBgNVHSAEPjA8MDoGCmCGSAGG+EUBBzYw + LDAqBggrBgEFBQcCARYeaHR0cHM6Ly93d3cucmFwaWRzc2wuY29tL2xlZ2FsMA0G + CSqGSIb3DQEBCwUAA4IBAQAzIYO2jx7h17FBT74tJ2zbV9OKqGb7QF8y3wUtP4xc + dH80vprI/Cfji8s86kr77aAvAqjDjaVjHn7UzebhSUivvRPmfzRgyWBacomnXTSt + Xlt2dp2nDQuwGyK2vB7dMfKnQAkxwq1sYUXznB8i0IhhCAoXp01QGPKq51YoIlnF + 7DRMk6iEaL1SJbkIrLsCQyZFDf0xtfW9DqXugMMLoxeCsBhZJQzNyS2ryirrv9LH + aK3+6IZjrcyy9bkpz/gzJucyhU+75c4My/mnRCrtItRbCQuiI5pd5poDowm+HH9i + GVI9+0lAFwxOUnOnwsoI40iOoxjLMGB+CgFLKCGUcWxP + -----END CERTIFICATE----- + """ + pem_issuer = b""" + -----BEGIN CERTIFICATE----- + MIIEJTCCAw2gAwIBAgIDAjp3MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT + MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i + YWwgQ0EwHhcNMTQwODI5MjEzOTMyWhcNMjIwNTIwMjEzOTMyWjBHMQswCQYDVQQG + EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXUmFwaWRTU0wg + U0hBMjU2IENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv + VJvZWF0eLFbG1eh/9H0WA//Qi1rkjqfdVC7UBMBdmJyNkA+8EGVf2prWRHzAn7Xp + SowLBkMEu/SW4ib2YQGRZjEiwzQ0Xz8/kS9EX9zHFLYDn4ZLDqP/oIACg8PTH2lS + 1p1kD8mD5xvEcKyU58Okaiy9uJ5p2L4KjxZjWmhxgHsw3hUEv8zTvz5IBVV6s9cQ + DAP8m/0Ip4yM26eO8R5j3LMBL3+vV8M8SKeDaCGnL+enP/C1DPz1hNFTvA5yT2AM + QriYrRmIV9cE7Ie/fodOoyH5U/02mEiN1vi7SPIpyGTRzFRIU4uvt2UevykzKdkp + YEj4/5G8V1jlNS67abZZAgMBAAGjggEdMIIBGTAfBgNVHSMEGDAWgBTAephojYn7 + qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUw5zz/NNGCDS7zkZ/oHxb8+IIy1kwEgYD + VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0fBC4wLDAqoCig + JoYkaHR0cDovL2cuc3ltY2IuY29tL2NybHMvZ3RnbG9iYWwuY3JsMC4GCCsGAQUF + BwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL2cuc3ltY2QuY29tMEwGA1UdIARF + MEMwQQYKYIZIAYb4RQEHNjAzMDEGCCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdlb3Ry + dXN0LmNvbS9yZXNvdXJjZXMvY3BzMA0GCSqGSIb3DQEBCwUAA4IBAQCjWB7GQzKs + rC+TeLfqrlRARy1+eI1Q9vhmrNZPc9ZE768LzFvB9E+aj0l+YK/CJ8cW8fuTgZCp + fO9vfm5FlBaEvexJ8cQO9K8EWYOHDyw7l8NaEpt7BDV7o5UzCHuTcSJCs6nZb0+B + kvwHtnm8hEqddwnxxYny8LScVKoSew26T++TGezvfU5ho452nFnPjJSxhJf3GrkH + uLLGTxN5279PURt/aQ1RKsHWFf83UTRlUfQevjhq7A6rvz17OQV79PP7GqHQyH5O + ZI3NjGFVkP46yl0lD/gdo0p0Vk8aVUBwdSWmMy66S6VdU5oNMOGNX2Esr8zvsJmh + gP8L8mJMcCaY + -----END CERTIFICATE----- + """ der_ocsp_req = ( b"0V0T0R0P0N0\t\x06\x05+\x0e\x03\x02\x1a\x05\x00\x04\x148\xcaF\x8c" b"\x07D\x8d\xf4\x81\x96\xc7mmLpQ\x9e`\xa7\xbd\x04\x14yu\xbb\x84:\xcb" @@ -39,6 +102,56 @@ Loading Requests 872625873161273451176241581705670534707360122361 +Creating Requests +~~~~~~~~~~~~~~~~~ + +.. class:: OCSPRequestBuilder + + .. versionadded:: 2.4 + + This class is used to create :class:`~cryptography.x509.ocsp.OCSPRequest` + objects. + + + .. method:: add_request(cert, issuer, algorithm) + + Adds a request using a certificate, issuer certificate, and hash + algorithm. + + :param cert: The :class:`~cryptography.x509.Certificate` whose validity + is being checked. + + :param issuer: The issuer :class:`~cryptography.x509.Certificate` of + the certificate that is being checked. + + :param algorithm: A + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + instance. For OCSP only + :class:`~cryptography.hazmat.primitives.hashes.SHA1`, + :class:`~cryptography.hazmat.primitives.hashes.SHA224`, + :class:`~cryptography.hazmat.primitives.hashes.SHA256`, + :class:`~cryptography.hazmat.primitives.hashes.SHA384`, and + :class:`~cryptography.hazmat.primitives.hashes.SHA512` are allowed. + + .. method:: build() + + :returns: A new :class:`~cryptography.x509.ocsp.OCSPRequest`. + + .. doctest:: + + >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import serialization + >>> from cryptography.hazmat.primitives.hashes import SHA256 + >>> from cryptography.x509 import load_pem_x509_certificate, ocsp + >>> cert = load_pem_x509_certificate(pem_cert, default_backend()) + >>> issuer = load_pem_x509_certificate(pem_issuer, default_backend()) + >>> builder = ocsp.OCSPRequestBuilder() + >>> builder = builder.add_request(cert, issuer, SHA256()) + >>> req = builder.build() + >>> base64.b64encode(req.public_bytes(serialization.Encoding.DER)) + b'MF8wXTBbMFkwVzANBglghkgBZQMEAgEFAAQgn3BowBaoh77h17ULfkX6781dUDPD82Taj8wO1jZWhZoEINxPgjoQth3w7q4AouKKerMxIMIuUG4EuWU2pZfwih52AgI/IA==' + + Interfaces ~~~~~~~~~~ diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index 1701f41c61f1..61546027edaa 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -35,6 +35,8 @@ int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *); X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *, int); OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *); +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *, OCSP_CERTID *); +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *, const X509 *, const X509 *); OCSP_BASICRESP *OCSP_BASICRESP_new(void); diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 6a0446bcfb92..bdf8f370f765 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1430,6 +1430,22 @@ def load_der_ocsp_request(self, data): request = self._ffi.gc(request, self._lib.OCSP_REQUEST_free) return _OCSPRequest(self, request) + def create_ocsp_request(self, builder): + ocsp_req = self._lib.OCSP_REQUEST_new() + self.openssl_assert(ocsp_req != self._ffi.NULL) + ocsp_req = self._ffi.gc(ocsp_req, self._lib.OCSP_REQUEST_free) + for cert, issuer, algorithm in builder._requests: + evp_md = self._lib.EVP_get_digestbyname( + algorithm.name.encode("ascii")) + self.openssl_assert(evp_md != self._ffi.NULL) + certid = self._lib.OCSP_cert_to_id( + evp_md, cert._x509, issuer._x509 + ) + self.openssl_assert(certid != self._ffi.NULL) + onereq = self._lib.OCSP_request_add0_id(ocsp_req, certid) + self.openssl_assert(onereq != self._ffi.NULL) + return _OCSPRequest(self, ocsp_req) + def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve): return ( self.elliptic_curve_supported(curve) and diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 22894dde0aee..0567197dbfe9 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -9,6 +9,7 @@ import six from cryptography.hazmat.primitives import hashes +from cryptography.x509 import Certificate _OIDS_TO_HASH = { @@ -25,6 +26,35 @@ def load_der_ocsp_request(data): return backend.load_der_ocsp_request(data) +class OCSPRequestBuilder(object): + def __init__(self, requests=[]): + self._requests = requests + + def add_request(self, cert, issuer, algorithm): + allowed_hashes = ( + hashes.SHA1, hashes.SHA224, hashes.SHA256, + hashes.SHA384, hashes.SHA512 + ) + if not isinstance(algorithm, allowed_hashes): + raise ValueError( + "Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512" + ) + if ( + not isinstance(cert, Certificate) or + not isinstance(issuer, Certificate) + ): + raise TypeError("cert and issuer must be a Certificate") + + return OCSPRequestBuilder(self._requests + [(cert, issuer, algorithm)]) + + def build(self): + from cryptography.hazmat.backends.openssl.backend import backend + if len(self._requests) == 0: + raise ValueError("You must add a request before building") + + return backend.create_ocsp_request(self) + + @six.add_metaclass(abc.ABCMeta) class OCSPRequest(object): @abc.abstractmethod diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 22f34df2d20f..709ef6f49771 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -4,14 +4,17 @@ from __future__ import absolute_import, division, print_function +import base64 import os import pytest +from cryptography import x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.primitives import hashes, serialization from cryptography.x509 import ocsp +from .test_x509 import _load_cert from ..utils import load_vectors_from_file @@ -23,6 +26,21 @@ def _load_data(filename, loader): ) +def _cert_and_issuer(): + from cryptography.hazmat.backends.openssl.backend import backend + cert = _load_cert( + os.path.join("x509", "cryptography.io.pem"), + x509.load_pem_x509_certificate, + backend + ) + issuer = _load_cert( + os.path.join("x509", "rapidssl_sha256_ca_g3.pem"), + x509.load_pem_x509_certificate, + backend + ) + return cert, issuer + + class TestOCSPRequest(object): def test_bad_request(self): with pytest.raises(ValueError): @@ -113,3 +131,49 @@ def test_invalid_serialize_encoding(self): req.public_bytes("invalid") with pytest.raises(ValueError): req.public_bytes(serialization.Encoding.PEM) + + +class TestOCSPRequestBuilder(object): + def test_create_ocsp_request_no_req(self): + builder = ocsp.OCSPRequestBuilder() + with pytest.raises(ValueError): + builder.build() + + def test_create_ocsp_request_invalid_alg(self): + cert, issuer = _cert_and_issuer() + builder = ocsp.OCSPRequestBuilder() + with pytest.raises(ValueError): + builder.add_request(cert, issuer, hashes.MD5()) + + def test_create_ocsp_request_invalid_cert(self): + cert, issuer = _cert_and_issuer() + builder = ocsp.OCSPRequestBuilder() + with pytest.raises(TypeError): + builder.add_request(b"notacert", issuer, hashes.SHA1()) + + with pytest.raises(TypeError): + builder.add_request(cert, b"notacert", hashes.SHA1()) + + def test_create_ocsp_request(self): + cert, issuer = _cert_and_issuer() + builder = ocsp.OCSPRequestBuilder() + builder = builder.add_request(cert, issuer, hashes.SHA1()) + req = builder.build() + serialized = req.public_bytes(serialization.Encoding.DER) + assert serialized == base64.b64decode( + b"MEMwQTA/MD0wOzAJBgUrDgMCGgUABBRAC0Z68eay0wmDug1gfn5ZN0gkxAQUw5zz" + b"/NNGCDS7zkZ/oHxb8+IIy1kCAj8g" + ) + + def test_create_ocsp_request_two_reqs(self): + builder = ocsp.OCSPRequestBuilder() + cert, issuer = _cert_and_issuer() + builder = builder.add_request(cert, issuer, hashes.SHA1()) + builder = builder.add_request(cert, issuer, hashes.SHA1()) + req = builder.build() + serialized = req.public_bytes(serialization.Encoding.DER) + assert serialized == base64.b64decode( + b"MIGDMIGAMH4wPTA7MAkGBSsOAwIaBQAEFEALRnrx5rLTCYO6DWB+flk3SCTEBBTD" + b"nPP800YINLvORn+gfFvz4gjLWQICPyAwPTA7MAkGBSsOAwIaBQAEFEALRnrx5rLT" + b"CYO6DWB+flk3SCTEBBTDnPP800YINLvORn+gfFvz4gjLWQICPyA=" + ) From b7114e96127863a8b28d79adaeba864b0c51a2b0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 11:46:41 -0400 Subject: [PATCH 342/988] Update our security documentation to match what we actually do (#4430) * Update our security documentation to match what we actually do * If you stand for nothing Burr, what will you fall for? --- docs/security.rst | 44 +++++++------------------------------------- 1 file changed, 7 insertions(+), 37 deletions(-) diff --git a/docs/security.rst b/docs/security.rst index 251d2d951926..01845a48cc27 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -82,42 +82,12 @@ strongly recommend that you upgrade as soon as possible. Disclosure Process ------------------ -Our process for taking a security issue from private discussion to public -disclosure involves multiple steps. - -Approximately one week before full public disclosure, we will send advance -notification of the issue to a list of people and organizations, primarily -composed of operating-system vendors and other distributors of -``cryptography``. This notification will consist of an email message -containing: - -* A full description of the issue and the affected versions of - ``cryptography``. -* The steps we will be taking to remedy the issue. -* The patches, if any, that will be applied to ``cryptography``. -* The date on which the ``cryptography`` team will apply these patches, issue - new releases, and publicly disclose the issue. - -Simultaneously, the reporter of the issue will receive notification of the date -on which we plan to take the issue public. - -On the day of disclosure, we will take the following steps: - -* Apply the relevant patches to the ``cryptography`` repository. The commit - messages for these patches will indicate that they are for security issues, - but will not describe the issue in any detail; instead, they will warn of - upcoming disclosure. -* Issue the relevant releases. -* Post a notice to the cryptography mailing list that describes the issue in - detail, point to the new release and crediting the reporter of the issue. - -If a reported issue is believed to be particularly time-sensitive – due to a -known exploit in the wild, for example – the time between advance notification -and public disclosure may be shortened considerably. - -The list of people and organizations who receives advanced notification of -security issues is not and will not be made public. This list generally -consists of high-profile downstream distributors and is entirely at the -discretion of the ``cryptography`` team. +When we become aware of a security bug in ``cryptography``, we will endeavor to +fix it and issue a release as quickly as possible. We will generally issue a new +release for any security issue. + +The steps for issuing a security release are described in our +:doc:`/doing-a-release` documentation. + .. _`master`: https://github.com/pyca/cryptography From ef3b38d2ac381ecce025bea6ec5a9388b0901360 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 12:46:47 -0400 Subject: [PATCH 343/988] Added vector for pre-certificate poison extension (#4432) --- docs/development/test-vectors.rst | 2 ++ .../x509/cryptography.io.precert.pem | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/cryptography.io.precert.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 5032c5f9c8ca..f82e00e3f78f 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -159,6 +159,8 @@ X.509 cryptography website. * ``rapidssl_sha256_ca_g3.pem`` - The intermediate CA that issued the ``cryptography.io.pem`` certificate. +* ``cryptography.io.precert.pem`` - A pre-certificate with the CT poison + extension for the cryptography website. * ``wildcard_san.pem`` - A leaf certificate issued by a public CA for ``langui.sh`` that contains wildcard entries in the SAN extension. * ``san_edipartyname.der`` - A DSA certificate from a `Mozilla bug`_ diff --git a/vectors/cryptography_vectors/x509/cryptography.io.precert.pem b/vectors/cryptography_vectors/x509/cryptography.io.precert.pem new file mode 100644 index 000000000000..015225bd03a2 --- /dev/null +++ b/vectors/cryptography_vectors/x509/cryptography.io.precert.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFFjCCA/6gAwIBAgISAxx4en3JApUAe8XyIgs7UnrwMA0GCSqGSIb3DQEBCwUA +MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD +ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA3MjgxMDE1MDJaFw0x +ODEwMjYxMDE1MDJaMBoxGDAWBgNVBAMTD2NyeXB0b2dyYXBoeS5pbzCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJDpCL99DVo83587MrVp6gunmKRoUfY +vcgk5u2v0tB9OmZkcIY37z6AunHWr18Yj55zHmm6G8Nf35hmu3ql2A26WThCbmOe +WXbxhgarkningZI9opUWnI2dIllguVIsq99GzhpNnDdCb26s5+SRhJI4cr4hYaKC +XGDKooKWyXUX09SJTq7nW/1+pq3y9ZMvldRKjJALeAdwnC7kmUB6pK7q8J2VlpfQ +wqGu6q/WHVdgnhWARw3GEFJWDn9wkxBAF08CpzhVaEj+iK+Ut/1HBgNYwqI47h7S +q+qv0G2qklRVUtEM0zYRsp+y/6vivdbFLlPw8VaerbpJN3gLtpVNcGECAwEAAaOC +AiQwggIgMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUjbe0bE1aZ8HiqtwqUfCe15bF +V8UwHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEE +YzBhMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQu +b3JnMC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQu +b3JnLzAaBgNVHREEEzARgg9jcnlwdG9ncmFwaHkuaW8wgf4GA1UdIASB9jCB8zAI +BgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8v +Y3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRp +ZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGll +cyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBv +bGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5 +LzATBgorBgEEAdZ5AgQDAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAHyAN+pNt +rCc5z5rEReS9YZ6oDIm1KVECwFiNiCJKzSnpVFmTwi8EGsu62624hmGICP5dGXAt +s65UVE9Y8MsF+gNUfYj+52GJg5Hhr+WPKdeT609smpM605hG/eMMLff47Ak7w38D +McnIy7iBp86ji3sJUd8VhWLUtSNMFExBaKvtIHgs5Rjed7zFwKtsO0d0Act+JWDs +3twpwkMkW5DUAOwt5cTIf0jFl4m3du4V+NF5qFN8JvvwxG2/7HS9p8yEZyaEJZ7l +56NjF2nMOpJzHLG3VBm9vxhLDjxlwk7+0XIpsswibLsSvpZ+bRISA5I/1fXmt+J9 +n1TNkyEdwzSZgg== +-----END CERTIFICATE----- From 00c0b237732412c0e360217048178f7952031901 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 12:47:16 -0400 Subject: [PATCH 344/988] Fixes #4357 -- document the additional release steps for a security release (#4429) * Fixes #4357 -- document the additional release steps for a security release * One additional step * Fix a few typos * this is a word * link these --- docs/doing-a-release.rst | 16 ++++++++++++++++ docs/spelling_wordlist.txt | 1 + 2 files changed, 17 insertions(+) diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index 456179855bd0..f87a44995756 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -3,6 +3,20 @@ Doing a release Doing a release of ``cryptography`` requires a few steps. +Security Releases +----------------- + +In addition to the other steps described below, for a release which fixes a +security vulnerability, you should also include the following steps: + +* Request a `CVE from MITRE`_. Once you have received the CVE, it should be + included in the :doc:`changelog`. Ideally you should request the CVE before + starting the release process so that the CVE is available at the time of the + release. +* Ensure that the :doc:`changelog` entry credits whoever reported the issue. +* The release should be announced on the `oss-security`_ mailing list, in + addition to the regular announcement lists. + Verifying OpenSSL version ------------------------- @@ -78,6 +92,8 @@ Post-release tasks * Send an email to the `mailing list`_ and `python-announce`_ announcing the release. +.. _`CVE from MITRE`: https://cveform.mitre.org/ +.. _`oss-security`: http://www.openwall.com/lists/oss-security/ .. _`upgrading OpenSSL issue template`: https://github.com/pyca/cryptography/issues/new?template=openssl-release.md .. _`milestone`: https://github.com/pyca/cryptography/milestones .. _`mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 225ee3afdd66..e8b9098f39b6 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -10,6 +10,7 @@ boolean Botan Brainpool Capitan +changelog Changelog ciphertext codebook From 129348282a41412dfe006443ec0b62da14ec98df Mon Sep 17 00:00:00 2001 From: Matt Bullock Date: Thu, 30 Aug 2018 12:25:33 -0700 Subject: [PATCH 345/988] reorganize downstream tests to avoid dependency squashing (#4418) * reorganize downstream tests * fix run.sh syntax * add instructions for adding more downstream tests * rework downstream CI test guide into rst readme * remove unnecessary example test handler * all test handlers should "exit 1" if an unexpected argument is received --- .travis/downstream.d/README.rst | 13 ++++ .travis/downstream.d/aws-encryption-sdk.sh | 17 +++++ .travis/downstream.d/certbot-josepy.sh | 16 +++++ .travis/downstream.d/certbot.sh | 19 ++++++ .../downstream.d/dynamodb-encryption-sdk.sh | 17 +++++ .travis/downstream.d/paramiko.sh | 17 +++++ .travis/downstream.d/pyopenssl.sh | 16 +++++ .travis/downstream.d/twisted.sh | 16 +++++ .travis/downstream.d/urllib3.sh | 17 +++++ .travis/run.sh | 66 ++----------------- 10 files changed, 154 insertions(+), 60 deletions(-) create mode 100644 .travis/downstream.d/README.rst create mode 100755 .travis/downstream.d/aws-encryption-sdk.sh create mode 100755 .travis/downstream.d/certbot-josepy.sh create mode 100755 .travis/downstream.d/certbot.sh create mode 100755 .travis/downstream.d/dynamodb-encryption-sdk.sh create mode 100755 .travis/downstream.d/paramiko.sh create mode 100755 .travis/downstream.d/pyopenssl.sh create mode 100755 .travis/downstream.d/twisted.sh create mode 100755 .travis/downstream.d/urllib3.sh diff --git a/.travis/downstream.d/README.rst b/.travis/downstream.d/README.rst new file mode 100644 index 000000000000..1553448c327f --- /dev/null +++ b/.travis/downstream.d/README.rst @@ -0,0 +1,13 @@ +To add downstream tests to be run in CI: + +1. Create a test handler for the downstream consumer that you want to test. + + * The test handler should be a single file in the ``.travis/downstream.d/`` directory. + * The file name should be ``{downstream name}.sh`` where ``{downstream name}`` + is the name that you wish to use to identify the consumer. + * The test handler should accept a single argument that can be either ``install`` or ``run``. + These should be used to separate installation of the downstream consumer and + any dependencies from the actual running of the tests. + +2. Add an entry to the test matrix in ``.travis.yml`` that sets the ``DOWNSTREAM`` + environment variable to the downstream name that you selected. diff --git a/.travis/downstream.d/aws-encryption-sdk.sh b/.travis/downstream.d/aws-encryption-sdk.sh new file mode 100755 index 000000000000..e478cd8a5bd0 --- /dev/null +++ b/.travis/downstream.d/aws-encryption-sdk.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python + cd aws-encryption-sdk-python + pip install -r test/requirements.txt + pip install -e . + ;; + run) + cd aws-encryption-sdk-python + pytest -m local test/ + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/certbot-josepy.sh b/.travis/downstream.d/certbot-josepy.sh new file mode 100755 index 000000000000..47de2e2986ef --- /dev/null +++ b/.travis/downstream.d/certbot-josepy.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/certbot/josepy + cd josepy + pip install -e ".[tests]" + ;; + run) + cd josepy + pytest src + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/certbot.sh b/.travis/downstream.d/certbot.sh new file mode 100755 index 000000000000..f255600f5ff4 --- /dev/null +++ b/.travis/downstream.d/certbot.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/certbot/certbot + cd certbot + pip install pytest pytest-mock mock + pip install -e acme + pip install -e . + ;; + run) + cd certbot + pytest certbot/tests + pytest acme + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/dynamodb-encryption-sdk.sh b/.travis/downstream.d/dynamodb-encryption-sdk.sh new file mode 100755 index 000000000000..a7d3885b8f94 --- /dev/null +++ b/.travis/downstream.d/dynamodb-encryption-sdk.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/awslabs/aws-dynamodb-encryption-python + cd aws-dynamodb-encryption-python + pip install -r test/requirements.txt + pip install -e . + ;; + run) + cd aws-dynamodb-encryption-python + pytest -m "local and not slow and not veryslow and not nope" + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/paramiko.sh b/.travis/downstream.d/paramiko.sh new file mode 100755 index 000000000000..ccba686d4fb8 --- /dev/null +++ b/.travis/downstream.d/paramiko.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/paramiko/paramiko + cd paramiko + pip install -e . + pip install -r dev-requirements.txt + ;; + run) + cd paramiko + inv test + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/pyopenssl.sh b/.travis/downstream.d/pyopenssl.sh new file mode 100755 index 000000000000..b95bb28012e8 --- /dev/null +++ b/.travis/downstream.d/pyopenssl.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/pyca/pyopenssl + cd pyopenssl + pip install -e ".[test]" + ;; + run) + cd pyopenssl + pytest tests + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/twisted.sh b/.travis/downstream.d/twisted.sh new file mode 100755 index 000000000000..cb25027a805a --- /dev/null +++ b/.travis/downstream.d/twisted.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth=1 https://github.com/twisted/twisted + cd twisted + pip install -e .[tls,conch,http2] + ;; + run) + cd twisted + python -m twisted.trial src/twisted + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/downstream.d/urllib3.sh b/.travis/downstream.d/urllib3.sh new file mode 100755 index 000000000000..8442d1e79897 --- /dev/null +++ b/.travis/downstream.d/urllib3.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +case "${1}" in + install) + git clone --depth 1 https://github.com/shazow/urllib3 + cd urllib3 + pip install -r ./dev-requirements.txt + pip install -e ".[socks]" + ;; + run) + cd urllib3 + pytest test + ;; + *) + exit 1 + ;; +esac diff --git a/.travis/run.sh b/.travis/run.sh index 572b9a4d85e5..ca0ddac649bb 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -26,65 +26,11 @@ source ~/.venv/bin/activate if [ -n "${TOXENV}" ]; then tox -- --wycheproof-root=$HOME/wycheproof else + downstream_script="${TRAVIS_BUILD_DIR}/.travis/downstream.d/${DOWNSTREAM}.sh" + if [ ! -x $downstream_script ]; then + exit 1 + fi + $downstream_script install pip install . - case "${DOWNSTREAM}" in - pyopenssl) - git clone --depth=1 https://github.com/pyca/pyopenssl - cd pyopenssl - pip install -e ".[test]" - pytest tests - ;; - twisted) - git clone --depth=1 https://github.com/twisted/twisted - cd twisted - pip install -e .[tls,conch,http2] - python -m twisted.trial src/twisted - ;; - paramiko) - git clone --depth=1 https://github.com/paramiko/paramiko - cd paramiko - pip install -e . - pip install -r dev-requirements.txt - inv test - ;; - aws-encryption-sdk) - git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python - cd aws-encryption-sdk-python - pip install -r test/requirements.txt - pip install -e . - pytest -m local test/ - ;; - dynamodb-encryption-sdk) - git clone --depth=1 https://github.com/awslabs/aws-dynamodb-encryption-python - cd aws-dynamodb-encryption-python - pip install -r test/requirements.txt - pip install -e . - pytest -m "local and not slow and not veryslow and not nope" - ;; - certbot) - git clone --depth=1 https://github.com/certbot/certbot - cd certbot - pip install pytest pytest-mock mock - pip install -e acme - pip install -e . - pytest certbot/tests - pytest acme - ;; - certbot-josepy) - git clone --depth=1 https://github.com/certbot/josepy - cd josepy - pip install -e ".[tests]" - pytest src - ;; - urllib3) - git clone --depth 1 https://github.com/shazow/urllib3 - cd urllib3 - pip install -r ./dev-requirements.txt - pip install -e ".[socks]" - pytest test - ;; - *) - exit 1 - ;; - esac + $downstream_script run fi From 18551e282b81e54019f6e32902374ad6ec7704f6 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 15:31:54 -0400 Subject: [PATCH 346/988] fixed test name (#4433) * fixed test name * spelling is hard --- tests/x509/test_x509_ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index fc35cf63e581..c052f859e45d 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4426,7 +4426,7 @@ def test_hash(self): @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestInhibitAnyPolicyExtension(object): - def test_nocheck(self, backend): + def test_inhibit_any_policy(self, backend): cert = _load_cert( os.path.join( "x509", "custom", "inhibit_any_policy_5.pem" From db02f1606e08ee5969677f37a4c8d5660dfa4721 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 18:04:44 -0400 Subject: [PATCH 347/988] Run things with -ex and shellcheck (#4436) --- .travis/downstream.d/aws-encryption-sdk.sh | 2 +- .travis/downstream.d/certbot-josepy.sh | 2 +- .travis/downstream.d/certbot.sh | 2 +- .travis/downstream.d/dynamodb-encryption-sdk.sh | 2 +- .travis/downstream.d/paramiko.sh | 2 +- .travis/downstream.d/pyopenssl.sh | 2 +- .travis/downstream.d/twisted.sh | 4 ++-- .travis/downstream.d/urllib3.sh | 2 +- .travis/install.sh | 2 +- .travis/run.sh | 9 +++------ 10 files changed, 13 insertions(+), 16 deletions(-) diff --git a/.travis/downstream.d/aws-encryption-sdk.sh b/.travis/downstream.d/aws-encryption-sdk.sh index e478cd8a5bd0..7363a83e2e46 100755 --- a/.travis/downstream.d/aws-encryption-sdk.sh +++ b/.travis/downstream.d/aws-encryption-sdk.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/downstream.d/certbot-josepy.sh b/.travis/downstream.d/certbot-josepy.sh index 47de2e2986ef..57e539b2b6dc 100755 --- a/.travis/downstream.d/certbot-josepy.sh +++ b/.travis/downstream.d/certbot-josepy.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/downstream.d/certbot.sh b/.travis/downstream.d/certbot.sh index f255600f5ff4..78ec7f51aaed 100755 --- a/.travis/downstream.d/certbot.sh +++ b/.travis/downstream.d/certbot.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/downstream.d/dynamodb-encryption-sdk.sh b/.travis/downstream.d/dynamodb-encryption-sdk.sh index a7d3885b8f94..891c616ee937 100755 --- a/.travis/downstream.d/dynamodb-encryption-sdk.sh +++ b/.travis/downstream.d/dynamodb-encryption-sdk.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/downstream.d/paramiko.sh b/.travis/downstream.d/paramiko.sh index ccba686d4fb8..55a89265b81e 100755 --- a/.travis/downstream.d/paramiko.sh +++ b/.travis/downstream.d/paramiko.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/downstream.d/pyopenssl.sh b/.travis/downstream.d/pyopenssl.sh index b95bb28012e8..60fc64f589d9 100755 --- a/.travis/downstream.d/pyopenssl.sh +++ b/.travis/downstream.d/pyopenssl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/downstream.d/twisted.sh b/.travis/downstream.d/twisted.sh index cb25027a805a..2710545f916d 100755 --- a/.travis/downstream.d/twisted.sh +++ b/.travis/downstream.d/twisted.sh @@ -1,10 +1,10 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) git clone --depth=1 https://github.com/twisted/twisted cd twisted - pip install -e .[tls,conch,http2] + pip install -e ".[tls,conch,http2]" ;; run) cd twisted diff --git a/.travis/downstream.d/urllib3.sh b/.travis/downstream.d/urllib3.sh index 8442d1e79897..4f5dfafbb098 100755 --- a/.travis/downstream.d/urllib3.sh +++ b/.travis/downstream.d/urllib3.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -ex case "${1}" in install) diff --git a/.travis/install.sh b/.travis/install.sh index 4debde55d27a..4dc9301eaa87 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -42,7 +42,7 @@ elif [ -n "${LIBRESSL}" ]; then fi if [ -z "${DOWNSTREAM}" ]; then - git clone --depth=1 https://github.com/google/wycheproof $HOME/wycheproof + git clone --depth=1 https://github.com/google/wycheproof "$HOME/wycheproof" fi pip install virtualenv diff --git a/.travis/run.sh b/.travis/run.sh index ca0ddac649bb..352c252ea0b4 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -1,7 +1,4 @@ -#!/bin/bash - -set -e -set -x +#!/bin/bash -ex if [[ "${TOXENV}" == "pypy" ]]; then PYENV_ROOT="$HOME/.pyenv" @@ -24,10 +21,10 @@ fi source ~/.venv/bin/activate if [ -n "${TOXENV}" ]; then - tox -- --wycheproof-root=$HOME/wycheproof + tox -- --wycheproof-root="$HOME/wycheproof" else downstream_script="${TRAVIS_BUILD_DIR}/.travis/downstream.d/${DOWNSTREAM}.sh" - if [ ! -x $downstream_script ]; then + if [ ! -x "$downstream_script" ]; then exit 1 fi $downstream_script install From 378a26773b4996ed34ab3e00ef72f8c4986585d7 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Aug 2018 18:04:57 -0400 Subject: [PATCH 348/988] Use a less YOLO debian (#4438) --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 350d832fbe13..26a46f19a7ab 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -83,7 +83,7 @@ if (env.BRANCH_NAME == "master") { configs.add( [ label: 'docker', - imageName: 'pyca/cryptography-runner-sid', + imageName: 'pyca/cryptography-runner-buster', toxenvs: ['docs-linkcheck'], ] ) From 6511f88140da1e948cdaa63a4f8d0fef21003b34 Mon Sep 17 00:00:00 2001 From: Matt Bullock Date: Fri, 31 Aug 2018 05:05:16 -0700 Subject: [PATCH 349/988] Lock aws-encryption-sdk and dynamodb-encryption-sdk downstream test dependencies (#4441) * lock aws-encryption-sdk and dynamodb-encryption-sdk downstream tests to frozen dependencies * explicitly identify test directory in dynanmodb-encryption-sdk downstream tests * install the frozen dependencies after installing the package to force dependencies to the frozen set --- .travis/downstream.d/aws-encryption-sdk.sh | 2 +- .travis/downstream.d/dynamodb-encryption-sdk.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis/downstream.d/aws-encryption-sdk.sh b/.travis/downstream.d/aws-encryption-sdk.sh index 7363a83e2e46..044f70d94385 100755 --- a/.travis/downstream.d/aws-encryption-sdk.sh +++ b/.travis/downstream.d/aws-encryption-sdk.sh @@ -4,8 +4,8 @@ case "${1}" in install) git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python cd aws-encryption-sdk-python - pip install -r test/requirements.txt pip install -e . + pip install -r test/upstream-requirements-py27.txt ;; run) cd aws-encryption-sdk-python diff --git a/.travis/downstream.d/dynamodb-encryption-sdk.sh b/.travis/downstream.d/dynamodb-encryption-sdk.sh index 891c616ee937..196cd5b6e3eb 100755 --- a/.travis/downstream.d/dynamodb-encryption-sdk.sh +++ b/.travis/downstream.d/dynamodb-encryption-sdk.sh @@ -4,12 +4,12 @@ case "${1}" in install) git clone --depth=1 https://github.com/awslabs/aws-dynamodb-encryption-python cd aws-dynamodb-encryption-python - pip install -r test/requirements.txt pip install -e . + pip install -r test/upstream-requirements-py27.txt ;; run) cd aws-dynamodb-encryption-python - pytest -m "local and not slow and not veryslow and not nope" + pytest test/ -m "local and not slow and not veryslow and not nope" ;; *) exit 1 From 9a53a4b9aadb4522d9354d722c3dbdfcb5bbf0bc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 31 Aug 2018 09:04:25 -0400 Subject: [PATCH 350/988] Fixed two memory leaks in x509 csr extensions (#4434) * Fixed a memory leak in x.509 OCSP no check * Fix the _actual_ leak * Speed up symbolizations * Disable backtrace by default, because it doesn't work on Windows * line length --- src/_cffi_src/openssl/x509.py | 3 + .../hazmat/backends/openssl/backend.py | 11 +++- .../hazmat/backends/openssl/x509.py | 8 +++ tests/hazmat/backends/test_openssl_memleak.py | 59 ++++++++++++++++++- 4 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 59fdbf7e4c88..3f2ac90dc4dd 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -76,6 +76,8 @@ static const int XN_FLAG_RFC2253; static const int XN_FLAG_ONELINE; static const int XN_FLAG_MULTILINE; + +typedef void (*sk_X509_EXTENSION_freefunc)(X509_EXTENSION *); """ FUNCTIONS = """ @@ -282,6 +284,7 @@ int sk_X509_EXTENSION_insert(X509_EXTENSIONS *, X509_EXTENSION *, int); X509_EXTENSION *sk_X509_EXTENSION_delete(X509_EXTENSIONS *, int); void sk_X509_EXTENSION_free(X509_EXTENSIONS *); +void sk_X509_EXTENSION_pop_free(X509_EXTENSIONS *, sk_X509_EXTENSION_freefunc); int sk_X509_REVOKED_num(Cryptography_STACK_OF_X509_REVOKED *); X509_REVOKED *sk_X509_REVOKED_value(Cryptography_STACK_OF_X509_REVOKED *, int); diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index bdf8f370f765..cfd7c89fe1ef 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -707,10 +707,15 @@ def create_x509_csr(self, builder, private_key, algorithm): sk_extension = self._lib.sk_X509_EXTENSION_new_null() self.openssl_assert(sk_extension != self._ffi.NULL) sk_extension = self._ffi.gc( - sk_extension, self._lib.sk_X509_EXTENSION_free + sk_extension, + lambda x: self._lib.sk_X509_EXTENSION_pop_free( + x, self._ffi.addressof( + self._lib._original_lib, "X509_EXTENSION_free" + ) + ) ) - # gc is not necessary for CSRs, as sk_X509_EXTENSION_free - # will release all the X509_EXTENSIONs. + # Don't GC individual extensions because the memory is owned by + # sk_extensions and will be freed along with it. self._create_x509_extensions( extensions=builder._extensions, handlers=_EXTENSION_ENCODE_HANDLERS, diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index b870eeb773e0..a7a2c70d90f7 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -429,6 +429,14 @@ def signature_algorithm_oid(self): @utils.cached_property def extensions(self): x509_exts = self._backend._lib.X509_REQ_get_extensions(self._x509_req) + x509_exts = self._backend._ffi.gc( + x509_exts, + lambda x: self._backend._lib.sk_X509_EXTENSION_pop_free( + x, self._backend._ffi.addressof( + self._backend._lib._original_lib, "X509_EXTENSION_free" + ) + ) + ) return _CSR_EXTENSION_PARSER.parse(self._backend, x509_exts) def public_bytes(self, encoding): diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 5cb7cbc77fa7..34ad11ba41a0 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -23,14 +23,46 @@ def main(argv): import gc import json + import cffi + from cryptography.hazmat.bindings._openssl import ffi, lib heap = {} + BACKTRACE_ENABLED = False + if BACKTRACE_ENABLED: + backtrace_ffi = cffi.FFI() + backtrace_ffi.cdef(''' + int backtrace(void **, int); + char **backtrace_symbols(void *const *, int); + ''') + backtrace_lib = backtrace_ffi.dlopen(None) + + def backtrace(): + buf = backtrace_ffi.new("void*[]", 24) + length = backtrace_lib.backtrace(buf, len(buf)) + return (buf, length) + + def symbolize_backtrace(trace): + (buf, length) = trace + symbols = backtrace_lib.backtrace_symbols(buf, length) + stack = [ + backtrace_ffi.string(symbols[i]).decode() + for i in range(length) + ] + lib.Cryptography_free_wrapper(symbols, backtrace_ffi.NULL, 0) + return stack + else: + def backtrace(): + return None + + def symbolize_backtrace(trace): + return None + @ffi.callback("void *(size_t, const char *, int)") def malloc(size, path, line): ptr = lib.Cryptography_malloc_wrapper(size, path, line) - heap[ptr] = (size, path, line) + heap[ptr] = (size, path, line, backtrace()) return ptr @ffi.callback("void *(void *, size_t, const char *, int)") @@ -38,7 +70,7 @@ def realloc(ptr, size, path, line): if ptr != ffi.NULL: del heap[ptr] new_ptr = lib.Cryptography_realloc_wrapper(ptr, size, path, line) - heap[new_ptr] = (size, path, line) + heap[new_ptr] = (size, path, line, backtrace()) return new_ptr @ffi.callback("void(void *, const char *, int)") @@ -81,6 +113,7 @@ def free(ptr, path, line): "size": heap[ptr][0], "path": ffi.string(heap[ptr][1]).decode(), "line": heap[ptr][2], + "backtrace": symbolize_backtrace(heap[ptr][3]), }) for ptr in remaining ))) @@ -177,7 +210,7 @@ class TestOpenSSLMemoryLeaks(object): @pytest.mark.parametrize("path", [ "x509/PKITS_data/certs/ValidcRLIssuerTest28EE.crt", ]) - def test_x509_extensions(self, path): + def test_x509_certificate_extensions(self, path): assert_no_memory_leaks(textwrap.dedent(""" def func(path): from cryptography import x509 @@ -193,6 +226,26 @@ def func(path): cert.extensions """), [path]) + def test_x509_csr_extensions(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives.asymmetric import rsa + + private_key = rsa.generate_private_key( + key_size=2048, public_exponent=65537, backend=backend + ) + cert = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([]) + ).add_extension( + x509.OCSPNoCheck(), critical=False + ).sign(private_key, hashes.SHA256(), backend) + + cert.extensions + """)) + def test_ec_private_numbers_private_key(self): assert_no_memory_leaks(textwrap.dedent(""" def func(): From 5a54f1aec2d9b739c95ed862661efe7b8ff75d31 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 31 Aug 2018 10:46:20 -0400 Subject: [PATCH 351/988] Fixes #3460 -- deprecate OpenSSL 1.0.1 (#4427) * Fixes #3460 -- deprecate OpenSSL 1.0.1 * We need to import warnings * flake8 * words are hard * rephrase --- CHANGELOG.rst | 4 ++++ docs/installation.rst | 4 ++++ .../hazmat/bindings/openssl/binding.py | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c6d0d93cea68..a614df844ebb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,10 @@ Changelog .. note:: This version is not yet released and is under active development. +* Deprecated OpenSSL 1.0.1 support. OpenSSL 1.0.1 is no longer supported by + the OpenSSL project. At this time there is no time table for dropping + support, however we strongly encourage all users to upgrade or install + ``cryptography`` from a wheel. * Added initial :doc:`OCSP ` support. .. _v2-3-1: diff --git a/docs/installation.rst b/docs/installation.rst index d665dbc59dd8..2d9db667eced 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -30,6 +30,10 @@ OpenSSL releases: * ``OpenSSL 1.1.0-latest`` * ``OpenSSL 1.1.1-latest`` +.. warning:: + Cryptography 2.4 has deprecated support for OpenSSL 1.0.1. + + Building cryptography on Windows -------------------------------- diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index ec74d4cfd2ea..d52619dc5a0c 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -7,6 +7,7 @@ import collections import threading import types +import warnings from cryptography import utils from cryptography.exceptions import InternalError @@ -150,9 +151,24 @@ def init_static_locks(cls): _openssl_assert(cls.lib, res == 1) +def _verify_openssl_version(lib): + if ( + lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and + not lib.CRYPTOGRAPHY_IS_LIBRESSL + ): + warnings.warn( + "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " + "project, please upgrade. A future version of cryptography will " + "drop support for it.", + DeprecationWarning + ) + + # OpenSSL is not thread safe until the locks are initialized. We call this # method in module scope so that it executes with the import lock. On # Pythons < 3.4 this import lock is a global lock, which can prevent a race # condition registering the OpenSSL locks. On Python 3.4+ the import lock # is per module so this approach will not work. Binding.init_static_locks() + +_verify_openssl_version(Binding.lib) From 0f629bbdbb7ff595bffe43209490cc2647763fd3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 31 Aug 2018 10:47:56 -0400 Subject: [PATCH 352/988] refactor ocsp request parsing and generation to support only one cert (#4439) * refactor ocsp request parsing and generation to support only one cert * small doc change * notimplementederror --- docs/x509/ocsp.rst | 42 ++++----- .../hazmat/backends/openssl/backend.py | 20 ++-- .../hazmat/backends/openssl/ocsp.py | 52 +++------- src/cryptography/x509/ocsp.py | 47 +++------- tests/x509/test_ocsp.py | 94 +++++-------------- 5 files changed, 78 insertions(+), 177 deletions(-) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index afbb2ef752c5..80abf1660b30 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -97,8 +97,7 @@ Loading Requests >>> from cryptography.x509 import ocsp >>> ocsp_req = ocsp.load_der_ocsp_request(der_ocsp_req) - >>> for request in ocsp_req: - ... print(request.serial_number) + >>> print(ocsp_req.serial_number) 872625873161273451176241581705670534707360122361 @@ -113,10 +112,10 @@ Creating Requests objects. - .. method:: add_request(cert, issuer, algorithm) + .. method:: add_certificate(cert, issuer, algorithm) Adds a request using a certificate, issuer certificate, and hash - algorithm. + algorithm. This can only be called once. :param cert: The :class:`~cryptography.x509.Certificate` whose validity is being checked. @@ -141,15 +140,16 @@ Creating Requests >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import serialization - >>> from cryptography.hazmat.primitives.hashes import SHA256 + >>> from cryptography.hazmat.primitives.hashes import SHA1 >>> from cryptography.x509 import load_pem_x509_certificate, ocsp >>> cert = load_pem_x509_certificate(pem_cert, default_backend()) >>> issuer = load_pem_x509_certificate(pem_issuer, default_backend()) >>> builder = ocsp.OCSPRequestBuilder() - >>> builder = builder.add_request(cert, issuer, SHA256()) + >>> # SHA1 is in this example because RFC 5019 mandates its use. + >>> builder = builder.add_certificate(cert, issuer, SHA1()) >>> req = builder.build() >>> base64.b64encode(req.public_bytes(serialization.Encoding.DER)) - b'MF8wXTBbMFkwVzANBglghkgBZQMEAgEFAAQgn3BowBaoh77h17ULfkX6781dUDPD82Taj8wO1jZWhZoEINxPgjoQth3w7q4AouKKerMxIMIuUG4EuWU2pZfwih52AgI/IA==' + b'MEMwQTA/MD0wOzAJBgUrDgMCGgUABBRAC0Z68eay0wmDug1gfn5ZN0gkxAQUw5zz/NNGCDS7zkZ/oHxb8+IIy1kCAj8g' Interfaces @@ -159,24 +159,8 @@ Interfaces .. versionadded:: 2.4 - An ``OCSPRequest`` is an iterable containing one or more - :class:`~cryptography.x509.ocsp.Request` objects. - - .. method:: public_bytes(encoding) - - :param encoding: The encoding to use. Only - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER` - is supported. - - :return bytes: The serialized OCSP request. - -.. class:: Request - - .. versionadded:: 2.4 - - A ``Request`` contains several attributes that create a unique identifier - for a certificate whose status is being checked. It may also contain - additional extensions (currently unsupported). + An ``OCSPRequest`` is an object containing information about a certificate + whose status is being checked. .. attribute:: issuer_key_hash @@ -205,3 +189,11 @@ Interfaces :type: int The serial number of the certificate to check. + + .. method:: public_bytes(encoding) + + :param encoding: The encoding to use. Only + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER` + is supported. + + :return bytes: The serialized OCSP request. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index cfd7c89fe1ef..64d26afdacfe 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1439,16 +1439,16 @@ def create_ocsp_request(self, builder): ocsp_req = self._lib.OCSP_REQUEST_new() self.openssl_assert(ocsp_req != self._ffi.NULL) ocsp_req = self._ffi.gc(ocsp_req, self._lib.OCSP_REQUEST_free) - for cert, issuer, algorithm in builder._requests: - evp_md = self._lib.EVP_get_digestbyname( - algorithm.name.encode("ascii")) - self.openssl_assert(evp_md != self._ffi.NULL) - certid = self._lib.OCSP_cert_to_id( - evp_md, cert._x509, issuer._x509 - ) - self.openssl_assert(certid != self._ffi.NULL) - onereq = self._lib.OCSP_request_add0_id(ocsp_req, certid) - self.openssl_assert(onereq != self._ffi.NULL) + cert, issuer, algorithm = builder._request + evp_md = self._lib.EVP_get_digestbyname( + algorithm.name.encode("ascii")) + self.openssl_assert(evp_md != self._ffi.NULL) + certid = self._lib.OCSP_cert_to_id( + evp_md, cert._x509, issuer._x509 + ) + self.openssl_assert(certid != self._ffi.NULL) + onereq = self._lib.OCSP_request_add0_id(ocsp_req, certid) + self.openssl_assert(onereq != self._ffi.NULL) return _OCSPRequest(self, ocsp_req) def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve): diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 38e871ecef9b..dd66e36d97e4 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -4,23 +4,28 @@ from __future__ import absolute_import, division, print_function -import operator - from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( _asn1_integer_to_int, _asn1_string_to_bytes, _obj2txt ) from cryptography.hazmat.primitives import serialization -from cryptography.x509.ocsp import OCSPRequest, Request, _OIDS_TO_HASH +from cryptography.x509.ocsp import OCSPRequest, _OIDS_TO_HASH -@utils.register_interface(Request) -class _Request(object): - def __init__(self, backend, ocsp_request, request): +@utils.register_interface(OCSPRequest) +class _OCSPRequest(object): + def __init__(self, backend, ocsp_request): + if backend._lib.OCSP_request_onereq_count(ocsp_request) > 1: + raise NotImplementedError( + 'OCSP request contains more than one request' + ) self._backend = backend self._ocsp_request = ocsp_request - self._request = request + self._request = self._backend._lib.OCSP_request_onereq_get0( + self._ocsp_request, 0 + ) + self._backend.openssl_assert(self._request != self._backend._ffi.NULL) self._cert_id = self._backend._lib.OCSP_onereq_get0_id(self._request) self._backend.openssl_assert(self._cert_id != self._backend._ffi.NULL) @@ -74,23 +79,6 @@ def hash_algorithm(self): "Signature algorithm OID: {0} not recognized".format(oid) ) - -@utils.register_interface(OCSPRequest) -class _OCSPRequest(object): - def __init__(self, backend, ocsp_request): - self._backend = backend - self._ocsp_request = ocsp_request - - def __len__(self): - return self._backend._lib.OCSP_request_onereq_count(self._ocsp_request) - - def _request(self, idx): - request = self._backend._lib.OCSP_request_onereq_get0( - self._ocsp_request, idx - ) - self._backend.openssl_assert(request != self._backend._ffi.NULL) - return _Request(self._backend, self._ocsp_request, request) - def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: raise ValueError( @@ -101,19 +89,3 @@ def public_bytes(self, encoding): res = self._backend._lib.i2d_OCSP_REQUEST_bio(bio, self._ocsp_request) self._backend.openssl_assert(res > 0) return self._backend._read_mem_bio(bio) - - def __iter__(self): - for i in range(len(self)): - yield self._request(i) - - def __getitem__(self, idx): - if isinstance(idx, slice): - start, stop, step = idx.indices(len(self)) - return [self._request(i) for i in range(start, stop, step)] - else: - idx = operator.index(idx) - if idx < 0: - idx += len(self) - if not 0 <= idx < len(self): - raise IndexError - return self._request(idx) diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 0567197dbfe9..c3225daae923 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -27,10 +27,13 @@ def load_der_ocsp_request(data): class OCSPRequestBuilder(object): - def __init__(self, requests=[]): - self._requests = requests + def __init__(self, request=None): + self._request = request + + def add_certificate(self, cert, issuer, algorithm): + if self._request is not None: + raise ValueError("Only one certificate can be added to a request") - def add_request(self, cert, issuer, algorithm): allowed_hashes = ( hashes.SHA1, hashes.SHA224, hashes.SHA256, hashes.SHA384, hashes.SHA512 @@ -45,45 +48,18 @@ def add_request(self, cert, issuer, algorithm): ): raise TypeError("cert and issuer must be a Certificate") - return OCSPRequestBuilder(self._requests + [(cert, issuer, algorithm)]) + return OCSPRequestBuilder((cert, issuer, algorithm)) def build(self): from cryptography.hazmat.backends.openssl.backend import backend - if len(self._requests) == 0: - raise ValueError("You must add a request before building") + if self._request is None: + raise ValueError("You must add a certificate before building") return backend.create_ocsp_request(self) @six.add_metaclass(abc.ABCMeta) class OCSPRequest(object): - @abc.abstractmethod - def __iter__(self): - """ - Iteration of Requests - """ - - @abc.abstractmethod - def __len__(self): - """ - Number of Requests inside the OCSPRequest object - """ - - @abc.abstractmethod - def __getitem__(self, idx): - """ - Returns a Request or range of Requests - """ - - @abc.abstractmethod - def public_bytes(self, encoding): - """ - Serializes the request to DER - """ - - -@six.add_metaclass(abc.ABCMeta) -class Request(object): @abc.abstractproperty def issuer_key_hash(self): """ @@ -107,3 +83,8 @@ def serial_number(self): """ The serial number of the cert whose status is being checked """ + @abc.abstractmethod + def public_bytes(self, encoding): + """ + Serializes the request to DER + """ diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 709ef6f49771..3e6ac9cdeb70 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -46,64 +46,26 @@ def test_bad_request(self): with pytest.raises(ValueError): ocsp.load_der_ocsp_request(b"invalid") - def test_load_request_one_item(self): + def test_load_request(self): req = _load_data( os.path.join("x509", "ocsp", "req-sha1.der"), ocsp.load_der_ocsp_request, ) - assert len(req) == 1 - assert req[0].issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" - b"\xc7mmLpQ\x9e`\xa7\xbd") - assert req[0].issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" - b"\x1bC\xbc\x1c*MSX") - assert isinstance(req[0].hash_algorithm, hashes.SHA1) - assert req[0].serial_number == int( + assert req.issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" + b"\xc7mmLpQ\x9e`\xa7\xbd") + assert req.issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" + b"\x1bC\xbc\x1c*MSX") + assert isinstance(req.hash_algorithm, hashes.SHA1) + assert req.serial_number == int( "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F9", 16 ) - def test_load_request_multiple_items(self): - req = _load_data( - os.path.join("x509", "ocsp", "req-multi-sha1.der"), - ocsp.load_der_ocsp_request, - ) - assert len(req) == 2 - assert req[0].issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" - b"\xc7mmLpQ\x9e`\xa7\xbd") - assert req[0].issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" - b"\x1bC\xbc\x1c*MSX") - assert isinstance(req[0].hash_algorithm, hashes.SHA1) - assert req[0].serial_number == int( - "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F9", 16 - ) - assert req[1].issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" - b"\xc7mmLpQ\x9e`\xa7\xbd") - assert req[1].issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" - b"\x1bC\xbc\x1c*MSX") - assert isinstance(req[1].hash_algorithm, hashes.SHA1) - assert req[1].serial_number == int( - "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F0", 16 - ) - - def test_iter(self): - req = _load_data( - os.path.join("x509", "ocsp", "req-multi-sha1.der"), - ocsp.load_der_ocsp_request, - ) - for request in req: - assert isinstance(request, ocsp.Request) - - def test_indexing_ocsp_request(self): - req = _load_data( - os.path.join("x509", "ocsp", "req-multi-sha1.der"), - ocsp.load_der_ocsp_request, - ) - assert req[1].serial_number == req[-1].serial_number - assert len(req[0:2]) == 2 - assert req[1:2][0].serial_number == int( - "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F0", 16 - ) - with pytest.raises(IndexError): - req[10] + def test_load_request_two_requests(self): + with pytest.raises(NotImplementedError): + _load_data( + os.path.join("x509", "ocsp", "req-multi-sha1.der"), + ocsp.load_der_ocsp_request, + ) def test_invalid_hash_algorithm(self): req = _load_data( @@ -111,7 +73,7 @@ def test_invalid_hash_algorithm(self): ocsp.load_der_ocsp_request, ) with pytest.raises(UnsupportedAlgorithm): - req[0].hash_algorithm + req.hash_algorithm def test_serialize_request(self): req_bytes = load_vectors_from_file( @@ -134,6 +96,13 @@ def test_invalid_serialize_encoding(self): class TestOCSPRequestBuilder(object): + def test_add_two_certs(self): + cert, issuer = _cert_and_issuer() + builder = ocsp.OCSPRequestBuilder() + builder = builder.add_certificate(cert, issuer, hashes.SHA1()) + with pytest.raises(ValueError): + builder.add_certificate(cert, issuer, hashes.SHA1()) + def test_create_ocsp_request_no_req(self): builder = ocsp.OCSPRequestBuilder() with pytest.raises(ValueError): @@ -143,37 +112,24 @@ def test_create_ocsp_request_invalid_alg(self): cert, issuer = _cert_and_issuer() builder = ocsp.OCSPRequestBuilder() with pytest.raises(ValueError): - builder.add_request(cert, issuer, hashes.MD5()) + builder.add_certificate(cert, issuer, hashes.MD5()) def test_create_ocsp_request_invalid_cert(self): cert, issuer = _cert_and_issuer() builder = ocsp.OCSPRequestBuilder() with pytest.raises(TypeError): - builder.add_request(b"notacert", issuer, hashes.SHA1()) + builder.add_certificate(b"notacert", issuer, hashes.SHA1()) with pytest.raises(TypeError): - builder.add_request(cert, b"notacert", hashes.SHA1()) + builder.add_certificate(cert, b"notacert", hashes.SHA1()) def test_create_ocsp_request(self): cert, issuer = _cert_and_issuer() builder = ocsp.OCSPRequestBuilder() - builder = builder.add_request(cert, issuer, hashes.SHA1()) + builder = builder.add_certificate(cert, issuer, hashes.SHA1()) req = builder.build() serialized = req.public_bytes(serialization.Encoding.DER) assert serialized == base64.b64decode( b"MEMwQTA/MD0wOzAJBgUrDgMCGgUABBRAC0Z68eay0wmDug1gfn5ZN0gkxAQUw5zz" b"/NNGCDS7zkZ/oHxb8+IIy1kCAj8g" ) - - def test_create_ocsp_request_two_reqs(self): - builder = ocsp.OCSPRequestBuilder() - cert, issuer = _cert_and_issuer() - builder = builder.add_request(cert, issuer, hashes.SHA1()) - builder = builder.add_request(cert, issuer, hashes.SHA1()) - req = builder.build() - serialized = req.public_bytes(serialization.Encoding.DER) - assert serialized == base64.b64decode( - b"MIGDMIGAMH4wPTA7MAkGBSsOAwIaBQAEFEALRnrx5rLTCYO6DWB+flk3SCTEBBTD" - b"nPP800YINLvORn+gfFvz4gjLWQICPyAwPTA7MAkGBSsOAwIaBQAEFEALRnrx5rLT" - b"CYO6DWB+flk3SCTEBBTDnPP800YINLvORn+gfFvz4gjLWQICPyA=" - ) From c4cd5ba933d26a2602295d3de95d50585523594c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 31 Aug 2018 17:52:00 -0400 Subject: [PATCH 353/988] OCSP response abstract base classes (#4431) * ocsp response abc * collapse SingleReponse into OCSPResponse now that we only support one * split responder_id into two properties, add tbs_response_bytes * typo * rename one method and add a mapping we'll need shortly --- src/cryptography/x509/ocsp.py | 130 ++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index c3225daae923..95e7f35b6e43 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import abc +from enum import Enum import six @@ -21,6 +22,24 @@ } +class OCSPResponseStatus(Enum): + SUCCESSFUL = 0 + MALFORMED_REQUEST = 1 + INTERNAL_ERROR = 2 + TRY_LATER = 3 + SIG_REQUIRED = 5 + UNAUTHORIZED = 6 + + +_RESPONSE_STATUS_TO_ENUM = dict((x.value, x) for x in OCSPResponseStatus) + + +class OCSPCertStatus(Enum): + GOOD = 0 + REVOKED = 1 + UNKNOWN = 2 + + def load_der_ocsp_request(data): from cryptography.hazmat.backends.openssl.backend import backend return backend.load_der_ocsp_request(data) @@ -88,3 +107,114 @@ def public_bytes(self, encoding): """ Serializes the request to DER """ + + +@six.add_metaclass(abc.ABCMeta) +class OCSPResponse(object): + @abc.abstractproperty + def response_status(self): + """ + The status of the response. This is a value from the OCSPResponseStatus + enumeration + """ + + @abc.abstractproperty + def signature_algorithm_oid(self): + """ + The ObjectIdentifier of the signature algorithm + """ + + @abc.abstractproperty + def signature(self): + """ + The signature bytes + """ + + @abc.abstractproperty + def tbs_response_bytes(self): + """ + The tbsResponseData bytes + """ + + @abc.abstractproperty + def certificates(self): + """ + A list of certificates used to help build a chain to verify the OCSP + response. This situation occurs when the OCSP responder uses a delegate + certificate. + """ + + @abc.abstractproperty + def responder_key_hash(self): + """ + The responder's key hash or None + """ + + @abc.abstractproperty + def responder_name(self): + """ + The responder's Name or None + """ + + @abc.abstractproperty + def produced_at(self): + """ + The time the response was produced + """ + + @abc.abstractproperty + def certificate_status(self): + """ + The status of the certificate (an element from the OCSPCertStatus enum) + """ + + @abc.abstractproperty + def revocation_time(self): + """ + The date of when the certificate was revoked or None if not + revoked. + """ + + @abc.abstractproperty + def revocation_reason(self): + """ + The reason the certificate was revoked or None if not specified or + not revoked. + """ + + @abc.abstractproperty + def this_update(self): + """ + The most recent time at which the status being indicated is known by + the responder to have been correct + """ + + @abc.abstractproperty + def next_update(self): + """ + The time when newer information will be available + """ + + @abc.abstractproperty + def issuer_key_hash(self): + """ + The hash of the issuer public key + """ + + @abc.abstractproperty + def issuer_name_hash(self): + """ + The hash of the issuer name + """ + + @abc.abstractproperty + def hash_algorithm(self): + """ + The hash algorithm used in the issuer name and key hashes + """ + + @abc.abstractproperty + def serial_number(self): + """ + The serial number of the cert whose status is being checked + """ From abfd57240cc7f0004eb513520d612dafe282dd16 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 31 Aug 2018 17:43:39 -0500 Subject: [PATCH 354/988] Simplify OCSP no check serialization (#4444) --- src/_cffi_src/openssl/asn1.py | 3 +++ src/cryptography/hazmat/backends/openssl/encode_asn1.py | 7 ++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/_cffi_src/openssl/asn1.py b/src/_cffi_src/openssl/asn1.py index 51acf10cacf8..82bf79792fe2 100644 --- a/src/_cffi_src/openssl/asn1.py +++ b/src/_cffi_src/openssl/asn1.py @@ -30,6 +30,7 @@ typedef ... ASN1_TYPE; typedef ... ASN1_GENERALIZEDTIME; typedef ... ASN1_ENUMERATED; +typedef ... ASN1_NULL; static const int V_ASN1_GENERALIZEDTIME; @@ -97,6 +98,8 @@ int i2d_ASN1_TYPE(ASN1_TYPE *, unsigned char **); ASN1_TYPE *d2i_ASN1_TYPE(ASN1_TYPE **, const unsigned char **, long); + +ASN1_NULL *ASN1_NULL_new(void); """ CUSTOMIZATIONS = """ diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index a2c7ed73dc04..896ea055f0e6 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -245,11 +245,8 @@ def _txt2obj_gc(backend, name): def _encode_ocsp_nocheck(backend, ext): - """ - The OCSP No Check extension is defined as a null ASN.1 value embedded in - an ASN.1 string. - """ - return _encode_asn1_str_gc(backend, b"\x05\x00", 2) + # Doesn't need to be GC'd + return backend._lib.ASN1_NULL_new() def _encode_key_usage(backend, key_usage): From 33dbd9365f4018c6e010d99f702dd9cad3e7c5c6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 31 Aug 2018 18:58:53 -0400 Subject: [PATCH 355/988] OCSP response vector (#4443) * OCSP response vector * oops, wrong name * move ocsp response vector docs * make alex happy --- docs/development/test-vectors.rst | 5 +++++ .../x509/ocsp/resp-sha256.der | Bin 0 -> 527 bytes 2 files changed, 5 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-sha256.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index f82e00e3f78f..41d1f571a7dc 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -409,6 +409,11 @@ Custom X.509 Certificate Revocation List Vectors * ``crl_delta_crl_indicator.pem`` - Contains a CRL with the ``DeltaCRLIndicator`` extension. +X.509 OCSP Test Vectors +~~~~~~~~~~~~~~~~~~~~~~~ +* ``x509/ocsp/resp-sha256.der`` - An OCSP response for ``cryptography.io`` with + a SHA256 signature. + Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ``x509/ocsp/req-sha1.der`` - An OCSP request containing a single request and diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-sha256.der b/vectors/cryptography_vectors/x509/ocsp/resp-sha256.der new file mode 100644 index 0000000000000000000000000000000000000000..4694081edbf26858c1aa82c79db6f51f904874a4 GIT binary patch literal 527 zcmXqLV&djvWLVI|#A49I#K6X>&Bn;e%5K2O$kN34(V&U(twH0pg+2yehTI06Y|No7 zY{E>T!G>Z6A|MWzFt1N)iF&buYhH3uWkHFdvVkHk5n6S(~b>KN#I{_<8hh?hez!%^pchJ=3o% zommm1lg^f_rnuo}%E?nF3)NSul;552Uj4z&V1rHLuERlEZYIBUs*W$8uvFdZqQ@D> z^|xT%X^wgKxueI89<}a?M^5FRJH-dMQ>L%;f8g}>I wi+giW+T4Av&a;i@UjMOv!mudq-nY9U4%1h@e;^imGC*AN_Kb&{_wob)0BS7C5C8xG literal 0 HcmV?d00001 From dd6b78be80e9b31e07a9ef695aaa902ef042dcfd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 31 Aug 2018 18:25:52 -0500 Subject: [PATCH 356/988] Fixes #4333 -- added support for precert poison extension (#4442) * Fixes #4333 -- added support for precert poison extension * Make work on all OpenSSL versions * fixed flake8 + docs * fix for older OpenSSLs * document this * spell --- CHANGELOG.rst | 1 + docs/x509/reference.rst | 23 +++++++++++++++ .../hazmat/backends/openssl/backend.py | 6 ++++ .../hazmat/backends/openssl/decode_asn1.py | 21 ++++++++++---- src/cryptography/x509/__init__.py | 4 ++- src/cryptography/x509/extensions.py | 5 ++++ src/cryptography/x509/oid.py | 3 ++ tests/x509/test_x509_ext.py | 29 +++++++++++++++++++ 8 files changed, 86 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a614df844ebb..8c08fcbc57f2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ Changelog support, however we strongly encourage all users to upgrade or install ``cryptography`` from a wheel. * Added initial :doc:`OCSP ` support. +* Added support for :class:`~cryptography.x509.PrecertPoison`. .. _v2-3-1: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 5fa8471b800d..ede08aa59e36 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1944,6 +1944,23 @@ X.509 Extensions :attr:`~cryptography.x509.oid.ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS`. +.. class:: PrecertPoison() + + .. versionadded:: 2.4 + + This extension indicates that the certificate should not be treated as a + certificate for the purposes of validation, but is instead for submission + to a certificate transparency log in order to obtain SCTs which will be + embedded in a :class:`PrecertificateSignedCertificateTimestamps` extension + on the final certificate. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns :attr:`~cryptography.x509.oid.ExtensionOID.PRECERT_POISON`. + + .. class:: DeltaCRLIndicator(crl_number) .. versionadded:: 2.1 @@ -2804,6 +2821,12 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.3.6.1.4.1.11129.2.4.2"``. + .. attribute:: PRECERT_POISON + + .. versionadded:: 2.4 + + Corresponds to the dotted string ``"1.3.6.1.4.1.11129.2.4.3"``. + .. attribute:: POLICY_CONSTRAINTS Corresponds to the dotted string ``"2.5.29.36"``. The identifier for the diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 64d26afdacfe..58fe492f997b 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -11,6 +11,8 @@ import itertools from contextlib import contextmanager +import asn1crypto.core + import six from cryptography import utils, x509 @@ -965,6 +967,10 @@ def _create_x509_extension(self, handlers, extension): asn1 = _Integers([x.value for x in extension.value]).dump() value = _encode_asn1_str_gc(self, asn1, len(asn1)) return self._create_raw_x509_extension(extension, value) + elif isinstance(extension.value, x509.PrecertPoison): + asn1 = asn1crypto.core.Null().dump() + value = _encode_asn1_str_gc(self, asn1, len(asn1)) + return self._create_raw_x509_extension(extension, value) else: try: encode = handlers[extension.oid] diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 31fb8cfccf55..47fa911e3a09 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -7,7 +7,7 @@ import datetime import ipaddress -from asn1crypto.core import Integer, SequenceOf +import asn1crypto.core from cryptography import x509 from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM @@ -17,8 +17,8 @@ ) -class _Integers(SequenceOf): - _child_spec = Integer +class _Integers(asn1crypto.core.SequenceOf): + _child_spec = asn1crypto.core.Integer def _obj2txt(backend, obj): @@ -202,8 +202,8 @@ def parse(self, backend, x509_obj): "Duplicate {0} extension found".format(oid), oid ) - # This OID is only supported in OpenSSL 1.1.0+ but we want - # to support it in all versions of OpenSSL so we decode it + # These OIDs are only supported in OpenSSL 1.1.0+ but we want + # to support them in all versions of OpenSSL so we decode them # ourselves. if oid == ExtensionOID.TLS_FEATURE: data = backend._lib.X509_EXTENSION_get_data(ext) @@ -214,6 +214,17 @@ def parse(self, backend, x509_obj): extensions.append(x509.Extension(oid, critical, value)) seen_oids.add(oid) continue + elif oid == ExtensionOID.PRECERT_POISON: + data = backend._lib.X509_EXTENSION_get_data(ext) + parsed = asn1crypto.core.Null.load( + _asn1_string_to_bytes(backend, data) + ) + assert parsed == asn1crypto.core.Null() + extensions.append(x509.Extension( + oid, critical, x509.PrecertPoison() + )) + seen_oids.add(oid) + continue try: handler = self.handlers[oid] diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index d2f9b0496d60..15459a12333d 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -22,7 +22,8 @@ Extension, ExtensionNotFound, ExtensionType, Extensions, FreshestCRL, GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, - PolicyInformation, PrecertificateSignedCertificateTimestamps, ReasonFlags, + PolicyInformation, PrecertPoison, + PrecertificateSignedCertificateTimestamps, ReasonFlags, SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice ) @@ -182,4 +183,5 @@ "UnrecognizedExtension", "PolicyConstraints", "PrecertificateSignedCertificateTimestamps", + "PrecertPoison", ] diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index eb4b927fbbbd..08af03c8b406 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -854,6 +854,11 @@ class OCSPNoCheck(object): oid = ExtensionOID.OCSP_NO_CHECK +@utils.register_interface(ExtensionType) +class PrecertPoison(object): + oid = ExtensionOID.PRECERT_POISON + + @utils.register_interface(ExtensionType) class TLSFeature(object): oid = ExtensionOID.TLS_FEATURE diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 90003d79bcaa..77e3fa636e5f 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -91,6 +91,9 @@ class ExtensionOID(object): PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ( ObjectIdentifier("1.3.6.1.4.1.11129.2.4.2") ) + PRECERT_POISON = ( + ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") + ) class CRLEntryExtensionOID(object): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index c052f859e45d..7e0ae2203124 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4440,6 +4440,35 @@ def test_inhibit_any_policy(self, backend): assert iap.skip_certs == 5 +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestPrecertPoisonExtension(object): + def test_load(self, backend): + cert = _load_cert( + os.path.join("x509", "cryptography.io.precert.pem"), + x509.load_pem_x509_certificate, + backend + ) + poison = cert.extensions.get_extension_for_oid( + ExtensionOID.PRECERT_POISON + ).value + assert isinstance(poison, x509.PrecertPoison) + poison = cert.extensions.get_extension_for_class( + x509.PrecertPoison + ).value + assert isinstance(poison, x509.PrecertPoison) + + def test_generate(self, backend): + private_key = RSA_KEY_2048.private_key(backend) + cert = _make_certbuilder(private_key).add_extension( + x509.PrecertPoison(), critical=True + ).sign(private_key, hashes.SHA256(), backend) + poison = cert.extensions.get_extension_for_oid( + ExtensionOID.PRECERT_POISON + ).value + assert isinstance(poison, x509.PrecertPoison) + + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestPrecertificateSignedCertificateTimestampsExtension(object): From 5d9c8e2559578b681f2344c8b5dd654b0f99c96a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 10:41:25 -0400 Subject: [PATCH 357/988] add more OCSP response vectors (#4445) * add more OCSP response vectors * another vector and better docs --- docs/development/test-vectors.rst | 7 +++++++ .../x509/ocsp/resp-delegate-unknown-cert.der | Bin 0 -> 2158 bytes .../x509/ocsp/resp-revoked.der | Bin 0 -> 490 bytes .../x509/ocsp/resp-unauthorized.der | 2 ++ 4 files changed, 9 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-delegate-unknown-cert.der create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-revoked.der create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-unauthorized.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 41d1f571a7dc..0d1eea19f763 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -413,6 +413,13 @@ X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~ * ``x509/ocsp/resp-sha256.der`` - An OCSP response for ``cryptography.io`` with a SHA256 signature. +* ``x509/ocsp/resp-unauthorized.der`` - An OCSP response with an unauthorized + status. +* ``x509/ocsp/resp-revoked.der`` - An OCSP response for ``revoked.badssl.com`` + with a revoked status. +* ``x509/ocsp/resp-delegate-unknown-cert.der`` - An OCSP response for an + unknown cert from ``AC Camerafirma``. This response also contains a delegate + certificate. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-delegate-unknown-cert.der b/vectors/cryptography_vectors/x509/ocsp/resp-delegate-unknown-cert.der new file mode 100644 index 0000000000000000000000000000000000000000..faf3168947dd80d1d87236317c55bafd60086079 GIT binary patch literal 2158 zcma)7YgAKL7S6r7iG)`I38}SbA~0`ytD)!W$p$gibaCWq7}rkt zzgrwWQ?4-lVi1!7yvUT$(iNpYc|ni|i9obN5Mkqv-NTKe_1xVwAM5DZ)b9$`vlvH; z<&k&jCl?EsKlJX%{N1~CgaQUtTC}-X-JtKj|Hlhom+YdlFMYuaE>SrJKMx3+EF;gh z-E$6hOLy`|AJ(R`%c<|5V}A1_@_Lei`R3>;c4e?=pOuXg>=&@+-lY^=+u+vgkD1$|%GIjD;m;GD^mt!l|xKXkEv zKXdF|h5&W4nvL@>ZY;cQ?(7@xj(gI*aMw;RLhsg3E}aijCH`=jf6d)tCszVHx!m=Y0Xxa)Ai@v~QwZJ9 z>tyO1WqxyJ25iHahwJHxs}M3BmMJj-cztT96o|Pqe_8T;Ho8Rq8m?uBclqL zGCeI-DpR1d&q`zpRiZpmB9^ATfDk7GI}|YUJ)sE=Pzf%-JB*9r^!C7r?2yC9^S4~c zavtZZbDe{#>x{?Jh_|or_%UGn()>lt;}M^glt}`sXq#Ep#r*K(MiG^L>u7Ooa^IJJ z4~LvpNs7nI(yOW;rz-9{Wq1FSF(}Qmw+Rv=`;DIKmYOVQ^iWm$;M2C?D{W)jvetcV z>gQxQLYK+%-mm1+TH9j$p?@RZ}a~3706GG-@eKgb2`wc321O zuy%sw96AC60`PWCoI{16=LkZC$?brS+kuEDa3{OH*o8z2;NVVgb;xT7@kIfv!v!vlq^$uTqRk66NSLZMa}De$a!?+GMfh#|niL z8rq~byrVUlbvbzgqbUb_$yOrWU-B}78naP}(cluTMvE$pMvEOHfuhOATsuA&=t2CX z4d7DIO!z6K;qn%0T#_;i=Pm((YiEO?DFmo=vOuH8oIgk9fQ^sI2k`@Rn~z34XMX_d z^v{Qcz$5}F#E&mRjKBayjxYx(6}+rYW6GTa{i?chL4+gRft3oUv#{TkCd2PVkvOmn z#F9N+BtRfrnZTXm26!N3vQ-#ja&Ta?>oM|;xjN03IoLDhIQdK39J_~jD5$Hk`LbbK z`61r^M`N|{wZF04w|Rw<5Bx!O`9vr-|7QEj(vblgRkW+N!Flo>z7yf6hMXyE{=6&s zgZ5J+eH>ABWWZR99(x++TTZR-J>s*5xc8R-*fDA=#`pQ(xrpTL$23Uhqe0ocb<;zUDdQu(qBX~d7mZjxD~)HhV literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-revoked.der b/vectors/cryptography_vectors/x509/ocsp/resp-revoked.der new file mode 100644 index 0000000000000000000000000000000000000000..a7f4e73303b84d1fd57ee818e0794561c7d94262 GIT binary patch literal 490 zcmXqLVtmHM$grS^@xDP5<83xhZ8k<$R(1nMMwTYVGeDse28|mRiLr?AHzdk5875xU z*LdFRX0b)*;jx>KB>0UC3@r>Sj13LVO)L#9qYN5b4H}yaJPkP6She|>nWR`5SVRQk zmsK@z%-yO!-}GEFw{yq5#m9NEo5v);xL)q}-MDp}K}Osv|FT0f77BvxFf*_;FfuYU zvM{lT!mxA!M2!Vdjk%$@feFYRylk9WZ60mkc^MhGSs9p{7#SIMM6c#7FS~p6!j4`S z7uFNJ6D5L7O(X9dS=c7=kGTq-fMmk(i_oOEn@8`AYtzW^MJl)WMrS*dA zqEN>#OMBuMPFS>w!}jv0q)T5NUcc3N7;|@Nzs$$7#n}&^db;JE3H;RHvcacdQ$c(9 z)ppY$!$OOzyPWqH&q-$!K5^~w3#YT`F+m$64YU_=eHJd@WN;HX-ofB-X6g+^iRs?l z?M8PiF4xVK2)&m0{Ny|Cn{7`Z-a7{?e6}_vue$va7PjRn)^24-EGfURxA^>V6 Bz-<5k literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-unauthorized.der b/vectors/cryptography_vectors/x509/ocsp/resp-unauthorized.der new file mode 100644 index 000000000000..d6ea06598760 --- /dev/null +++ b/vectors/cryptography_vectors/x509/ocsp/resp-unauthorized.der @@ -0,0 +1,2 @@ +0 + \ No newline at end of file From 8cf490e8ff3307a5b9ce46fc876a6ead482c1a3f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 11:28:18 -0400 Subject: [PATCH 358/988] small refactor of OCSP request parsing (#4447) This allows us to reuse these functions in the OCSPResponse object in the future --- .../hazmat/backends/openssl/ocsp.py | 92 +++++++++++-------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index dd66e36d97e4..2b07b324aa14 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -13,6 +13,56 @@ from cryptography.x509.ocsp import OCSPRequest, _OIDS_TO_HASH +def _issuer_key_hash(backend, cert_id): + key_hash = backend._ffi.new("ASN1_OCTET_STRING **") + res = backend._lib.OCSP_id_get0_info( + backend._ffi.NULL, backend._ffi.NULL, + key_hash, backend._ffi.NULL, cert_id + ) + backend.openssl_assert(res == 1) + backend.openssl_assert(key_hash[0] != backend._ffi.NULL) + return _asn1_string_to_bytes(backend, key_hash[0]) + + +def _issuer_name_hash(backend, cert_id): + name_hash = backend._ffi.new("ASN1_OCTET_STRING **") + res = backend._lib.OCSP_id_get0_info( + name_hash, backend._ffi.NULL, + backend._ffi.NULL, backend._ffi.NULL, cert_id + ) + backend.openssl_assert(res == 1) + backend.openssl_assert(name_hash[0] != backend._ffi.NULL) + return _asn1_string_to_bytes(backend, name_hash[0]) + + +def _serial_number(backend, cert_id): + num = backend._ffi.new("ASN1_INTEGER **") + res = backend._lib.OCSP_id_get0_info( + backend._ffi.NULL, backend._ffi.NULL, + backend._ffi.NULL, num, cert_id + ) + backend.openssl_assert(res == 1) + backend.openssl_assert(num[0] != backend._ffi.NULL) + return _asn1_integer_to_int(backend, num[0]) + + +def _hash_algorithm(backend, cert_id): + asn1obj = backend._ffi.new("ASN1_OBJECT **") + res = backend._lib.OCSP_id_get0_info( + backend._ffi.NULL, asn1obj, + backend._ffi.NULL, backend._ffi.NULL, cert_id + ) + backend.openssl_assert(res == 1) + backend.openssl_assert(asn1obj[0] != backend._ffi.NULL) + oid = _obj2txt(backend, asn1obj[0]) + try: + return _OIDS_TO_HASH[oid] + except KeyError: + raise UnsupportedAlgorithm( + "Signature algorithm OID: {0} not recognized".format(oid) + ) + + @utils.register_interface(OCSPRequest) class _OCSPRequest(object): def __init__(self, backend, ocsp_request): @@ -31,53 +81,19 @@ def __init__(self, backend, ocsp_request): @property def issuer_key_hash(self): - key_hash = self._backend._ffi.new("ASN1_OCTET_STRING **") - res = self._backend._lib.OCSP_id_get0_info( - self._backend._ffi.NULL, self._backend._ffi.NULL, - key_hash, self._backend._ffi.NULL, self._cert_id - ) - self._backend.openssl_assert(res == 1) - self._backend.openssl_assert(key_hash[0] != self._backend._ffi.NULL) - return _asn1_string_to_bytes(self._backend, key_hash[0]) + return _issuer_key_hash(self._backend, self._cert_id) @property def issuer_name_hash(self): - name_hash = self._backend._ffi.new("ASN1_OCTET_STRING **") - res = self._backend._lib.OCSP_id_get0_info( - name_hash, self._backend._ffi.NULL, - self._backend._ffi.NULL, self._backend._ffi.NULL, self._cert_id - ) - self._backend.openssl_assert(res == 1) - self._backend.openssl_assert(name_hash[0] != self._backend._ffi.NULL) - return _asn1_string_to_bytes(self._backend, name_hash[0]) + return _issuer_name_hash(self._backend, self._cert_id) @property def serial_number(self): - num = self._backend._ffi.new("ASN1_INTEGER **") - res = self._backend._lib.OCSP_id_get0_info( - self._backend._ffi.NULL, self._backend._ffi.NULL, - self._backend._ffi.NULL, num, self._cert_id - ) - self._backend.openssl_assert(res == 1) - self._backend.openssl_assert(num[0] != self._backend._ffi.NULL) - return _asn1_integer_to_int(self._backend, num[0]) + return _serial_number(self._backend, self._cert_id) @property def hash_algorithm(self): - asn1obj = self._backend._ffi.new("ASN1_OBJECT **") - res = self._backend._lib.OCSP_id_get0_info( - self._backend._ffi.NULL, asn1obj, - self._backend._ffi.NULL, self._backend._ffi.NULL, self._cert_id - ) - self._backend.openssl_assert(res == 1) - self._backend.openssl_assert(asn1obj[0] != self._backend._ffi.NULL) - oid = _obj2txt(self._backend, asn1obj[0]) - try: - return _OIDS_TO_HASH[oid] - except KeyError: - raise UnsupportedAlgorithm( - "Signature algorithm OID: {0} not recognized".format(oid) - ) + return _hash_algorithm(self._backend, self._cert_id) def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: From d3601b1ab171bdcaf5cb4377e4394ebd31d49a92 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 11:58:24 -0400 Subject: [PATCH 359/988] initial OCSP response docs (#4448) --- docs/x509/ocsp.rst | 179 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 80abf1660b30..edf4f5ae3357 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -197,3 +197,182 @@ Interfaces is supported. :return bytes: The serialized OCSP request. + +.. class:: OCSPResponse + + .. versionadded:: 2.4 + + An ``OCSPResponse`` is the data provided by an OCSP responder in response + to an ``OCSPRequest``. + + .. attribute:: response_status + + :type: :class:`~cryptography.x509.ocsp.OCSPResponseStatus` + + The status of the response. + + .. attribute:: signature_algorithm_oid + + :type: :class:`~cryptography.x509.ObjectIdentifier` + + Returns the object identifier of the signature algorithm used + to sign the response. This will be one of the OIDs from + :class:`~cryptography.x509.oid.SignatureAlgorithmOID`. + + .. attribute:: signature + + :type: bytes + + The signature bytes. + + .. attribute:: tbs_response_bytes + + :type: bytes + + The DER encoded bytes payload that is hashed and then signed. This + data may be used to validate the signature on the OCSP response. + + .. attribute:: certificates + + :type: list + + A list of zero or more :class:`~cryptography.x509.Certificate` objects + used to help build a chain to verify the OCSP response. This situation + occurs when the OCSP responder uses a delegate certificate. + + .. attribute:: responder_key_hash + + :type: bytes or None + + The responder's key hash or ``None`` if the response has a + ``responder_name``. + + .. attribute:: responder_name + + :type: :class:`~cryptography.x509.Name` or None + + The responder's ``Name`` or ``None`` if the response has a + ``responder_key_hash``. + + .. attribute:: produced_at + + :type: :class:`datetime.datetime` + + A naïve datetime representing the time when the response was produced. + + .. attribute:: certificate_status + + :type: :class:`~cryptography.x509.ocsp.OCSPCertStatus` + + The status of the certificate being checked. + + .. attribute:: revocation_time + + :type: :class:`datetime.datetime` or None + + A naïve datetime representing the time when the certificate was revoked + or ``None`` if the certificate has not been revoked. + + .. attribute:: revocation_reason + + :type: :class:`~cryptography.x509.ReasonFlags` or None + + The reason the certificate was revoked or ``None`` if not specified or + not revoked. + + .. attribute:: this_update + + :type: :class:`datetime.datetime` + + A naïve datetime representing the most recent time at which the status + being indicated is known by the responder to have been correct. + + .. attribute:: next_update + + :type: :class:`datetime.datetime` + + A naïve datetime representing the time when newer information will + be available. + + .. attribute:: issuer_key_hash + + :type: bytes + + The hash of the certificate issuer's key. The hash algorithm used + is defined by the ``hash_algorithm`` property. + + .. attribute:: issuer_name_hash + + :type: bytes + + The hash of the certificate issuer's name. The hash algorithm used + is defined by the ``hash_algorithm`` property. + + .. attribute:: hash_algorithm + + :type: An instance of a + :class:`~cryptography.hazmat.primitives.hashes.Hash` + + The algorithm used to generate the ``issuer_key_hash`` and + ``issuer_name_hash``. + + .. attribute:: serial_number + + :type: int + + The serial number of the certificate that was checked. + + +.. class:: OCSPResponseStatus + + .. versionadded:: 2.4 + + An enumeration of response statuses. + + .. attribute:: SUCCESSFUL + + Represents a successful OCSP response. + + .. attribute:: MALFORMED_REQUEST + + May be returned by an OCSP responder that is unable to parse a + given request. + + .. attribute:: INTERNAL_ERROR + + May be returned by an OCSP responder that is currently experiencing + operational problems. + + .. attribute:: TRY_LATER + + May be returned by an OCSP responder that is overloaded. + + .. attribute:: SIG_REQUIRED + + May be returned by an OCSP responder that requires signed OCSP + requests. + + .. attribute:: UNAUTHORIZED + + May be returned by an OCSP responder when queried for a certificate for + which the responder is unaware or an issuer for which the responder is + not authoritative. + + +.. class:: OCSPCertStatus + + .. versionadded:: 2.4 + + An enumeration of certificate statuses in an OCSP response. + + .. attribute:: GOOD + + The value for a certificate that is not revoked. + + .. attribute:: REVOKED + + The certificate being checked is revoked. + + .. attribute:: UNKNOWN + + The certificate being checked is not known to the OCSP responder. From b41903740723d90be152a8a8e2a161b5c0110122 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 14:53:12 -0400 Subject: [PATCH 360/988] OCSP bindings (#4449) * add many OCSP bindings Much of OCSP was opaqued in 1.1.0 so this also adds a bunch of getters for older OpenSSL. However, 1.1.0 itself made it impossible to access certain fields in the opaque struct, so we're forced to de-opaque them for 1.1.0 through 1.1.0i as well as 1.1.1-pre1 through 1.1.1-pre9. There is a patch (openssl/openssl#7082) that fixes this and should be in 1.1.0j and 1.1.1-pre10 (or 1.1.1 final, whichever they choose to issue) * backslashes are sometimes useful * comments --- src/_cffi_src/openssl/cryptography.py | 5 ++ src/_cffi_src/openssl/ocsp.py | 92 +++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index e3e735808a27..3ebe3c5b4820 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -44,6 +44,9 @@ (OPENSSL_VERSION_NUMBER >= 0x10100000 && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x1010006f && !CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 \ + (OPENSSL_VERSION_NUMBER >= 0x10101000 && \ + OPENSSL_VERSION_NUMBER <= 0x10101009) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 \ (OPENSSL_VERSION_NUMBER < 0x10002000 || CRYPTOGRAPHY_IS_LIBRESSL) @@ -51,6 +54,8 @@ (OPENSSL_VERSION_NUMBER < 0x1000209f || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 \ (OPENSSL_VERSION_NUMBER < 0x10100000 || CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J \ + (OPENSSL_VERSION_NUMBER < 0x101000af || CRYPTOGRAPHY_IS_LIBRESSL) """ TYPES = """ diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index 61546027edaa..dbe0367f65d6 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -15,12 +15,22 @@ typedef ... OCSP_BASICRESP; typedef ... OCSP_SINGLERESP; typedef ... OCSP_CERTID; +typedef ... OCSP_RESPDATA; """ FUNCTIONS = """ int OCSP_response_status(OCSP_RESPONSE *); OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *); int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *); +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *); +Cryptography_STACK_OF_X509 *OCSP_resp_get0_certs(const OCSP_BASICRESP *); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at( + const OCSP_BASICRESP *); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *); +int OCSP_resp_get0_id(const OCSP_BASICRESP *, const ASN1_OCTET_STRING **, + const X509_NAME **); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *); X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *, int); int OCSP_resp_count(OCSP_BASICRESP *); OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *, int); @@ -51,6 +61,7 @@ int OCSP_basic_sign(OCSP_BASICRESP *, X509 *, EVP_PKEY *, const EVP_MD *, Cryptography_STACK_OF_X509 *, unsigned long); OCSP_RESPONSE *OCSP_response_create(int, OCSP_BASICRESP *); +void OCSP_RESPONSE_free(OCSP_RESPONSE *); OCSP_REQUEST *OCSP_REQUEST_new(void); void OCSP_REQUEST_free(OCSP_REQUEST *); @@ -62,7 +73,88 @@ OCSP_RESPONSE *d2i_OCSP_RESPONSE_bio(BIO *, OCSP_RESPONSE **); int i2d_OCSP_REQUEST_bio(BIO *, OCSP_REQUEST *); int i2d_OCSP_RESPONSE_bio(BIO *, OCSP_RESPONSE *); +int i2d_OCSP_RESPDATA(OCSP_RESPDATA *, unsigned char **); """ CUSTOMIZATIONS = """ +#if ( \ + CRYPTOGRAPHY_OPENSSL_110_OR_GREATER && \ + CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J \ + ) || CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 +/* These structs come from ocsp_lcl.h and are needed to de-opaque the struct + for the getters in OpenSSL 1.1.0 through 1.1.0i, as well as 1.1.1-pre1 to + 1.1.1-pre9 */ +struct ocsp_responder_id_st { + int type; + union { + X509_NAME *byName; + ASN1_OCTET_STRING *byKey; + } value; +}; +struct ocsp_response_data_st { + ASN1_INTEGER *version; + OCSP_RESPID responderId; + ASN1_GENERALIZEDTIME *producedAt; + STACK_OF(OCSP_SINGLERESP) *responses; + STACK_OF(X509_EXTENSION) *responseExtensions; +}; +struct ocsp_basic_response_st { + OCSP_RESPDATA tbsResponseData; + X509_ALGOR signatureAlgorithm; + ASN1_BIT_STRING *signature; + STACK_OF(X509) *certs; +}; +#endif + +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +/* These functions are all taken from ocsp_cl.c in OpenSSL 1.1.0 */ +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *single) +{ + return single->certId; +} +const Cryptography_STACK_OF_X509 *OCSP_resp_get0_certs( + const OCSP_BASICRESP *bs) +{ + return bs->certs; +} +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname) +{ + const OCSP_RESPID *rid = bs->tbsResponseData->responderId; + + if (rid->type == V_OCSP_RESPID_NAME) { + *pname = rid->value.byName; + *pid = NULL; + } else if (rid->type == V_OCSP_RESPID_KEY) { + *pid = rid->value.byKey; + *pname = NULL; + } else { + return 0; + } + return 1; +} +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at( + const OCSP_BASICRESP* bs) +{ + return bs->tbsResponseData->producedAt; +} +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs) +{ + return bs->signature; +} +#endif + +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J || \ + CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs) +{ + return &bs->signatureAlgorithm; +} + +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs) +{ + return &bs->tbsResponseData; +} +#endif """ From 8e499b2dfa821657f8e3f5f8fdb4eb4153fb6d89 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 15:07:44 -0400 Subject: [PATCH 361/988] add LE subordinate certificate to test vectors (#4450) --- docs/development/test-vectors.rst | 2 ++ .../x509/letsencryptx3.pem | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/letsencryptx3.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 0d1eea19f763..b189bc93a892 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -193,6 +193,8 @@ X.509 DNS name entries of the SAN extension. * ``badasn1time.pem`` - A certificate containing an incorrectly specified UTCTime in its validity->not_after. +* ``letsencryptx3.pem`` - A subordinate certificate used by Let's Encrypt to + issue end entity certificates. Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/letsencryptx3.pem b/vectors/cryptography_vectors/x509/letsencryptx3.pem new file mode 100644 index 000000000000..0002462ce85d --- /dev/null +++ b/vectors/cryptography_vectors/x509/letsencryptx3.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- From 1ded08113949407b20ca54053a199d238b6b13e2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 16:09:10 -0400 Subject: [PATCH 362/988] More OCSP vectors (#4451) * yet another ocsp response vector. and yet there will be at least one more after this * add one more --- docs/development/test-vectors.rst | 5 +++++ .../x509/ocsp/resp-responder-key-hash.der | Bin 0 -> 490 bytes .../x509/ocsp/resp-revoked-reason.der | Bin 0 -> 1892 bytes 3 files changed, 5 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-responder-key-hash.der create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-revoked-reason.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index b189bc93a892..3465a7740d46 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -422,6 +422,11 @@ X.509 OCSP Test Vectors * ``x509/ocsp/resp-delegate-unknown-cert.der`` - An OCSP response for an unknown cert from ``AC Camerafirma``. This response also contains a delegate certificate. +* ``x509/ocsp/resp-responder-key-hash.der`` - An OCSP response from the + ``DigiCert`` OCSP responder that uses a key hash for the responder ID. +* ``x509/ocsp/resp-revoked-reason.der`` - An OCSP response from the + ``QuoVadis`` OCSP responder that contains a revoked certificate with a + revocation reason. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-responder-key-hash.der b/vectors/cryptography_vectors/x509/ocsp/resp-responder-key-hash.der new file mode 100644 index 0000000000000000000000000000000000000000..35e6389074766646838507b00c70273dd18f6c51 GIT binary patch literal 490 zcmXqLVtmHM$grS^@xDP5<83xhZ8k<$R(1nMMwTYVGeDse28|mRiLr?AHzdk5875xU z*LdFRX0b)*;jx>KB>0UC3@r>S4Gay9O-zjpq6`{a4H}yaJPkP6She|>nWR`5SVRQk zmsK@z%-yO!-}GEFw{yq5#m9NEo5v);zhIG^=ppWXvKg=XpBJQ=E)+!AVPIltXlfFL z5P({`0HMah(AdBLOg_ys5u1vqtE9Q_@IN^fd zCeP3XC;#X6diuPIoiS;zi8$9*QTLpVaP61A_olyk8`NQZd7`MpvP}n`pF3mSwl3uG zd`;tXt4r1_jc0%5_irb&(m~y$j#YlQKY#c0u=R2L%eElzF=EMt3{1t9r6D3i2sPpUP wH4d>C9S(-h{LbF4w@!Wcsdxp~$4B;OTzj?t#q%neHS^k!=z4ygqmcU&03DCVA^-pY literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-revoked-reason.der b/vectors/cryptography_vectors/x509/ocsp/resp-revoked-reason.der new file mode 100644 index 0000000000000000000000000000000000000000..f94edb37f240c3079102c2be62f3a86d639f5acd GIT binary patch literal 1892 zcmXqLVo%^=WLVI|9%<0T9?Hh4&Bn;e%5K2O$kN2_1{88KXkxTjm~W74$Zf#M#vIDR zCd}mIYba?T4&rbL3j~(thb5+D7AyE<=4O_prWlGFh=QcJh57uQg98+TQi}`n^HNfa z47Ch2KoZQtif}z(6^^AP8Tmz-C6x-nndy0nC8b5F68uI6h86~v28M=~CKiU~Q3j2D z294bYzCbsyYV$EONwG4ph-9tfEnLZdF3Eg?T>D#}-e1!fv0q{l*(}t#b)~oI9#Mu5 z4KHt0w0{(?DPt1hknNr^Z_=-4ond#LX>}TLF5IJXd7&889y23zLnC7Y1H-5V%v_8t z7`87EgbNu%9kfu{K+!-R5nfCzLM#HNQ_bfmGB>w(7KQh(oB3VIfR~L^tIebBJ1-+6 zH!A~k6C)!-Nali@Dl=KiJ^r6hW)MDl;dMOA)h!10hb(eupDnqye$T~?JGf33Z=WF; zcIx)SN1~c@?(ZxxdhfV_*HvKMf}@AbbrQEl`t*FamtS+trkY>5tyPgZ=kBf+o%)|k z{=ewdUG4HCbYf8Rfw)%F$lGpOPESh?mRRzu-eo1iBQ}t z_RCA{@9EtTn(*x3Gj2}do1dO|9ZCID-?Z`Bs^Y^3J@#q_EqgGt<|6-xTbGZ<-|yJ` z#$ScT>untWTe_AlN_!|WJO9j~u2bIs z`j?2_va?(Mx#COb_x;B&Z@JZJ*_ShQ!P&jpt5fb5HGD2jUU09XRaQAS{g!C1sg-(& z+JmKA@AK}ubhy6tIm`BI7mH08=ecFOSoI!Q*EnS463L#r$L(kFhC>(5_YUCqSI z$iTR`ajrq*EO1FAE6l=Vz+k|S$b+mbOsovxf=O0^MZkd1fQO9>Se~&k?u%e-(lOuz zCJ9-7M#ldvEX+*o4FzA6ik0T&wwq}XHT1ZHWVpfZbufmj39lEgq3q=1h_j75ZT zf(-NgSJ5vW+J8Pi#m4BbZuxH|T9RdMVq#=qS+DZo-ofDSJLGCamG{I~`QG&93_P{J zmC3Eb+UQbGGvfizk2jwGjCs_nbN7Re+DlHeH!rID+FKL;WN-QN@5gs{k6VgrE8^BO zdreH6tGKKq*XZ(^r<`dD?yPQNtw*w>*W~S-dZg{BlRD4JC0cI5x-QJ6Z3$J6Holpi zYq;0kTQbF;J>%m-9&xyVUJS_!uG2k{?Za=#3lS@Ys|@MyKSyN zd%*qb#2ter?e6y~?zXB4Y+C-~**>8>6Xu70MVyxu&g!}fA6RHD7SXSK#y;!vpZS%S z&shGGUirk(wqfqwhm+Ucc2UjOy373M($LFf zC5gOzTKxY>yib-yhTL=e+fIe%3r{&nWzH+?$tYTI%wC2$vg|6)DuGxng##x{UJHHg zH}2ouw`TdX0K=;pX`jx0x-P%F^8G|RhvV04js6x~r>s(V$`i1Yk2M{YUJ_nwK@jAL&6KC##j0Alsn AhX4Qo literal 0 HcmV?d00001 From 26c425dd74d941b0d010325f8f150d898585a015 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Sep 2018 16:58:26 -0400 Subject: [PATCH 363/988] document that OCSPResponse attributes can raise valuerror (#4453) --- docs/x509/ocsp.rst | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index edf4f5ae3357..b706b323817f 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -219,12 +219,18 @@ Interfaces to sign the response. This will be one of the OIDs from :class:`~cryptography.x509.oid.SignatureAlgorithmOID`. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: signature :type: bytes The signature bytes. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: tbs_response_bytes :type: bytes @@ -232,6 +238,9 @@ Interfaces The DER encoded bytes payload that is hashed and then signed. This data may be used to validate the signature on the OCSP response. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: certificates :type: list @@ -240,6 +249,9 @@ Interfaces used to help build a chain to verify the OCSP response. This situation occurs when the OCSP responder uses a delegate certificate. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: responder_key_hash :type: bytes or None @@ -247,6 +259,9 @@ Interfaces The responder's key hash or ``None`` if the response has a ``responder_name``. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: responder_name :type: :class:`~cryptography.x509.Name` or None @@ -254,18 +269,27 @@ Interfaces The responder's ``Name`` or ``None`` if the response has a ``responder_key_hash``. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: produced_at :type: :class:`datetime.datetime` A naïve datetime representing the time when the response was produced. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: certificate_status :type: :class:`~cryptography.x509.ocsp.OCSPCertStatus` The status of the certificate being checked. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: revocation_time :type: :class:`datetime.datetime` or None @@ -273,6 +297,9 @@ Interfaces A naïve datetime representing the time when the certificate was revoked or ``None`` if the certificate has not been revoked. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: revocation_reason :type: :class:`~cryptography.x509.ReasonFlags` or None @@ -280,6 +307,9 @@ Interfaces The reason the certificate was revoked or ``None`` if not specified or not revoked. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: this_update :type: :class:`datetime.datetime` @@ -287,6 +317,9 @@ Interfaces A naïve datetime representing the most recent time at which the status being indicated is known by the responder to have been correct. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: next_update :type: :class:`datetime.datetime` @@ -294,6 +327,9 @@ Interfaces A naïve datetime representing the time when newer information will be available. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: issuer_key_hash :type: bytes @@ -301,6 +337,9 @@ Interfaces The hash of the certificate issuer's key. The hash algorithm used is defined by the ``hash_algorithm`` property. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: issuer_name_hash :type: bytes @@ -308,6 +347,9 @@ Interfaces The hash of the certificate issuer's name. The hash algorithm used is defined by the ``hash_algorithm`` property. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: hash_algorithm :type: An instance of a @@ -316,12 +358,18 @@ Interfaces The algorithm used to generate the ``issuer_key_hash`` and ``issuer_name_hash``. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: serial_number :type: int The serial number of the certificate that was checked. + :raises ValueError: If ``response_status`` is not + :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. class:: OCSPResponseStatus From 636ad6052ef0d51dc55ae4dc2b38af15d06ea220 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 4 Sep 2018 09:45:17 -0500 Subject: [PATCH 364/988] unpin coverage (#4458) of course, if this works it might just be luck --- .travis/install.sh | 4 ++-- Jenkinsfile | 6 +++--- tox.ini | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis/install.sh b/.travis/install.sh index 4dc9301eaa87..0aecb2bd49da 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -49,5 +49,5 @@ pip install virtualenv python -m virtualenv ~/.venv source ~/.venv/bin/activate -# This coverage pin must be kept in sync with tox.ini -pip install tox codecov coverage==4.3.4 +# If we pin coverage it must be kept in sync with tox.ini and Jenkinsfile +pip install tox codecov coverage diff --git a/Jenkinsfile b/Jenkinsfile index 26a46f19a7ab..f89728f3a8d2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -196,7 +196,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .codecov call .codecov/Scripts/activate REM this pin must be kept in sync with tox.ini - pip install coverage==4.3.4 + pip install coverage pip install codecov codecov -e JOB_BASE_NAME,LABEL,TOXENV """ @@ -215,7 +215,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini - pip install coverage==4.3.4 + pip install coverage bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV """ } @@ -228,7 +228,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { virtualenv .venv source .venv/bin/activate # This pin must be kept in sync with tox.ini - pip install coverage==4.3.4 + pip install coverage bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME """ } diff --git a/tox.ini b/tox.ini index cb882a8aa339..a6227c0fc07c 100644 --- a/tox.ini +++ b/tox.ini @@ -7,7 +7,7 @@ extras = test deps = # This must be kept in sync with Jenkinsfile and .travis/install.sh - coverage==4.3.4 + coverage ./vectors passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME commands = From 18d49d0c6cd117e82934f65e641c1d830edd20df Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 4 Sep 2018 15:29:34 -0500 Subject: [PATCH 365/988] don't sort the serial numbers in a parsed CRL (#4457) * don't sort the serial numbers in a parsed CRL OpenSSL sorts them in place and this breaks the signature and more. fixes #4456 * cache the sorted CRL (but create it lazily) * use the cache decorator --- .../hazmat/backends/openssl/x509.py | 14 +++++++-- tests/x509/test_x509.py | 29 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index a7a2c70d90f7..ad838b7f250d 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -238,11 +238,21 @@ def fingerprint(self, algorithm): h.update(der) return h.finalize() + @utils.cached_property + def _sorted_crl(self): + # X509_CRL_get0_by_serial sorts in place, which breaks a variety of + # things we don't want to break (like iteration and the signature). + # Let's dupe it and sort that instead. + dup = self._backend._lib.X509_CRL_dup(self._x509_crl) + self._backend.openssl_assert(dup != self._backend._ffi.NULL) + dup = self._backend._ffi.gc(dup, self._backend._lib.X509_CRL_free) + return dup + def get_revoked_certificate_by_serial_number(self, serial_number): revoked = self._backend._ffi.new("X509_REVOKED **") asn1_int = _encode_asn1_int_gc(self._backend, serial_number) res = self._backend._lib.X509_CRL_get0_by_serial( - self._x509_crl, revoked, asn1_int + self._sorted_crl, revoked, asn1_int ) if res == 0: return None @@ -251,7 +261,7 @@ def get_revoked_certificate_by_serial_number(self, serial_number): revoked[0] != self._backend._ffi.NULL ) return _RevokedCertificate( - self._backend, self._x509_crl, revoked[0] + self._backend, self._sorted_crl, revoked[0] ) @property diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index a866d81356f4..4ce4d95872e5 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -550,6 +550,35 @@ def test_indexing(self, backend): assert crl[2:4][0].serial_number == crl[2].serial_number assert crl[2:4][1].serial_number == crl[3].serial_number + def test_get_revoked_certificate_doesnt_reorder(self, backend): + private_key = RSA_KEY_2048.private_key(backend) + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ) + for i in [2, 500, 3, 49, 7, 1]: + revoked_cert = x509.RevokedCertificateBuilder().serial_number( + i + ).revocation_date( + datetime.datetime(2012, 1, 1, 1, 1) + ).build(backend) + builder = builder.add_revoked_certificate(revoked_cert) + crl = builder.sign(private_key, hashes.SHA256(), backend) + assert crl[0].serial_number == 2 + assert crl[2].serial_number == 3 + # make sure get_revoked_certificate_by_serial_number doesn't affect + # ordering after being invoked + crl.get_revoked_certificate_by_serial_number(500) + assert crl[0].serial_number == 2 + assert crl[2].serial_number == 3 + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From f88aea5d8b9452677bd23a9bba917b900cd634c0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 5 Sep 2018 21:44:29 -0500 Subject: [PATCH 366/988] Add flags to error on compile with incompatible pointer type (#4455) * try something a bit different. * newer compiler plz * permute * fix some warnings * fix getters on OpenSSL < 1.1.0 * this is getting involved * given our compiler flags we can't have SSL_CTX_set_cookie_verify_cb --- .travis.yml | 18 ++++++++++++------ .travis/run.sh | 4 +++- Jenkinsfile | 2 +- src/_cffi_src/openssl/ocsp.py | 8 ++++++++ src/_cffi_src/openssl/src/osrandom_engine.c | 12 ++++++------ src/_cffi_src/openssl/ssl.py | 19 ++++++++----------- src/_cffi_src/openssl/x509.py | 8 ++++---- 7 files changed, 42 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index a85a8b66e82b..a34c50e94977 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,12 +47,18 @@ matrix: env: TOXENV=py37 OPENSSL=1.1.1-pre9 dist: xenial sudo: true - - python: 3.6 - env: TOXENV=py36 LIBRESSL=2.4.5 - - python: 3.6 - env: TOXENV=py36 LIBRESSL=2.6.5 - - python: 3.6 - env: TOXENV=py36 LIBRESSL=2.7.4 + - python: 3.7 + env: TOXENV=py37 LIBRESSL=2.4.5 + dist: xenial + sudo: true + - python: 3.7 + env: TOXENV=py37 LIBRESSL=2.6.5 + dist: xenial + sudo: true + - python: 3.7 + env: TOXENV=py37 LIBRESSL=2.7.4 + dist: xenial + sudo: true - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0i addons: diff --git a/.travis/run.sh b/.travis/run.sh index 352c252ea0b4..5e0e56df7f74 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -7,12 +7,14 @@ if [[ "${TOXENV}" == "pypy" ]]; then fi if [ -n "${LIBRESSL}" ]; then OPENSSL=$LIBRESSL + export CFLAGS="-Werror -Wno-error=deprecated-declarations -Wno-error=discarded-qualifiers -Wno-error=unused-function" fi + if [ -n "${OPENSSL}" ]; then OPENSSL_DIR="ossl-2/${OPENSSL}" export PATH="$HOME/$OPENSSL_DIR/bin:$PATH" - export CFLAGS="-I$HOME/$OPENSSL_DIR/include" + export CFLAGS="${CFLAGS} -I$HOME/$OPENSSL_DIR/include" # rpath on linux will cause it to use an absolute path so we don't need to # do LD_LIBRARY_PATH export LDFLAGS="-L$HOME/$OPENSSL_DIR/lib -Wl,-rpath=$HOME/$OPENSSL_DIR/lib" diff --git a/Jenkinsfile b/Jenkinsfile index f89728f3a8d2..8bb15d627d62 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -210,7 +210,7 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { cd cryptography CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ + CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ tox -r -- --color=yes --wycheproof-root=../wycheproof virtualenv .venv source .venv/bin/activate diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index dbe0367f65d6..db8597af69f8 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -149,12 +149,20 @@ CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs) { +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 + return bs->signatureAlgorithm; +#else return &bs->signatureAlgorithm; +#endif } const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs) { +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 + return bs->tbsResponseData; +#else return &bs->tbsResponseData; +#endif } #endif """ diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 4fcd34fbfe44..947c79aac0e3 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -149,7 +149,7 @@ static int dev_urandom_fd(void) { static int dev_urandom_read(unsigned char *buffer, int size) { int fd; - ssize_t n; + int n; fd = dev_urandom_fd(); if (fd < 0) { @@ -158,7 +158,7 @@ static int dev_urandom_read(unsigned char *buffer, int size) { while (size > 0) { do { - n = read(fd, buffer, (size_t)size); + n = (int)read(fd, buffer, (size_t)size); } while (n < 0 && errno == EINTR); if (n <= 0) { @@ -219,7 +219,7 @@ static int osrandom_init(ENGINE *e) { } static int osrandom_rand_bytes(unsigned char *buffer, int size) { - size_t len; + int len; int res; switch(getentropy_works) { @@ -230,8 +230,8 @@ static int osrandom_rand_bytes(unsigned char *buffer, int size) { case CRYPTOGRAPHY_OSRANDOM_GETENTROPY_WORKS: while (size > 0) { /* OpenBSD and macOS restrict maximum buffer size to 256. */ - len = size > 256 ? 256 : (size_t)size; - res = getentropy(buffer, len); + len = size > 256 ? 256 : size; + res = getentropy(buffer, (size_t)len); if (res < 0) { ERR_Cryptography_OSRandom_error( CRYPTOGRAPHY_OSRANDOM_F_RAND_BYTES, @@ -362,7 +362,7 @@ static int osrandom_rand_bytes(unsigned char *buffer, int size) { return 0; } buffer += n; - size -= n; + size -= (int)n; } return 1; } diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 2aa5d01000da..2e32b8f35af9 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -238,12 +238,6 @@ unsigned char *, unsigned int * )); -void SSL_CTX_set_cookie_verify_cb(SSL_CTX *, - int (*)( - SSL *, - const unsigned char *, - unsigned int - )); long SSL_CTX_get_read_ahead(SSL_CTX *); long SSL_CTX_set_read_ahead(SSL_CTX *, long); @@ -285,7 +279,10 @@ /* Information about actually used cipher */ const char *SSL_CIPHER_get_name(const SSL_CIPHER *); int SSL_CIPHER_get_bits(const SSL_CIPHER *, int *); -uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *); +/* the modern signature of this is uint32_t, but older openssl declared it + as unsigned long. To make our compiler flags happy we'll declare it as a + 64-bit wide value, which should always be safe */ +uint64_t SSL_CIPHER_get_id(const SSL_CIPHER *); int SSL_CIPHER_is_aead(const SSL_CIPHER *); int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *); int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *); @@ -700,10 +697,10 @@ const SSL_METHOD *(*DTLS_method)(void) = NULL; const SSL_METHOD *(*DTLS_server_method)(void) = NULL; const SSL_METHOD *(*DTLS_client_method)(void) = NULL; -static const long SSL_OP_NO_DTLSv1 = NULL; -static const long SSL_OP_NO_DTLSv1_2 = NULL; -long *(*DTLS_set_link_mtu)(SSL *, long) = NULL; -long *(*DTLS_get_link_min_mtu)(SSL *) = NULL; +static const long SSL_OP_NO_DTLSv1 = 0; +static const long SSL_OP_NO_DTLSv1_2 = 0; +long (*DTLS_set_link_mtu)(SSL *, long) = NULL; +long (*DTLS_get_link_min_mtu)(SSL *) = NULL; #else static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; #endif diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 3f2ac90dc4dd..748c6c8c72d0 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -260,8 +260,8 @@ const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *); -/* in 1.1.0 becomes const ASN1_BIT_STRING, const X509_ALGOR */ -void X509_get0_signature(ASN1_BIT_STRING **, X509_ALGOR **, X509 *); +void X509_get0_signature(const ASN1_BIT_STRING **, + const X509_ALGOR **, const X509 *); long X509_get_version(X509 *); @@ -347,8 +347,8 @@ opaquing. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER /* from x509/x_x509.c version 1.0.2 */ -void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, - const X509 *x) +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x) { if (psig) *psig = x->signature; From 0322962e143798fa5228f4505eeb606cdf773b87 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 6 Sep 2018 22:56:46 -0500 Subject: [PATCH 367/988] update pytest config (#4463) * update pytest config pytest 3.8.0 was just released and officially deprecates some of the way we do pytest marks. They introduced a new way to do this in 3.6 so this PR switches to that mechanism and updates our minimum pytest requirement * update the stubs * also update wycheproof test config to remove deprecated paths * don't need this any more --- setup.py | 2 +- tests/conftest.py | 5 +++-- tests/test_utils.py | 6 ++++-- tests/utils.py | 12 +++++------- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/setup.py b/setup.py index 8bd31bd55f1b..0c793e321bd0 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ ) test_requirements = [ - "pytest>=3.2.1,!=3.3.0", + "pytest>=3.6.0", "pretend", "iso8601", "pytz", diff --git a/tests/conftest.py b/tests/conftest.py index 583c4099d9a9..d858b4f7011e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -27,7 +27,8 @@ def pytest_generate_tests(metafunc): skip_if_wycheproof_none(wycheproof) testcases = [] - for path in metafunc.function.wycheproof_tests.args: + marker = metafunc.definition.get_closest_marker("wycheproof_tests") + for path in marker.args: testcases.extend(load_wycheproof_tests(wycheproof, path)) metafunc.parametrize("wycheproof", testcases) @@ -36,7 +37,7 @@ def pytest_generate_tests(metafunc): def backend(request): required_interfaces = [ mark.kwargs["interface"] - for mark in request.node.get_marker("requires_backend_interface") + for mark in request.node.iter_markers("requires_backend_interface") ] if not all( isinstance(openssl_backend, iface) for iface in required_interfaces diff --git a/tests/test_utils.py b/tests/test_utils.py index 181d9833c917..81656eb9f001 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -32,7 +32,8 @@ def test_check_backend_support_skip(): supported = pretend.stub( kwargs={"only_if": lambda backend: False, "skip_message": "Nope"} ) - item = pretend.stub(keywords={"supported": [supported]}) + node = pretend.stub(iter_markers=lambda x: [supported]) + item = pretend.stub(node=node) with pytest.raises(pytest.skip.Exception) as exc_info: check_backend_support(True, item) assert exc_info.value.args[0] == "Nope (True)" @@ -42,7 +43,8 @@ def test_check_backend_support_no_skip(): supported = pretend.stub( kwargs={"only_if": lambda backend: True, "skip_message": "Nope"} ) - item = pretend.stub(keywords={"supported": [supported]}) + node = pretend.stub(iter_markers=lambda x: [supported]) + item = pretend.stub(node=node) assert check_backend_support(None, item) is None diff --git a/tests/utils.py b/tests/utils.py index b950f8bd9996..af7f766cc08d 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -28,13 +28,11 @@ def check_backend_support(backend, item): - supported = item.keywords.get("supported") - if supported: - for mark in supported: - if not mark.kwargs["only_if"](backend): - pytest.skip("{0} ({1})".format( - mark.kwargs["skip_message"], backend - )) + for mark in item.node.iter_markers("supported"): + if not mark.kwargs["only_if"](backend): + pytest.skip("{0} ({1})".format( + mark.kwargs["skip_message"], backend + )) @contextmanager From 3cc007902467f3f8b8d9de1972a575fa977b5bd3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 7 Sep 2018 08:06:17 -0500 Subject: [PATCH 368/988] add OCSP request with a request extension (nonce) (#4462) --- docs/development/test-vectors.rst | 2 ++ .../x509/ocsp/req-ext-nonce.der | Bin 0 -> 120 bytes 2 files changed, 2 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/req-ext-nonce.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 3465a7740d46..b56a4c563e66 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -436,6 +436,8 @@ Custom X.509 OCSP Test Vectors requests. * ``x509/ocsp/req-invalid-hash-alg.der`` - An OCSP request containing an invalid hash algorithm OID. +* ``x509/ocsp/req-ext-nonce.der`` - An OCSP request containing a nonce + extension. Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ocsp/req-ext-nonce.der b/vectors/cryptography_vectors/x509/ocsp/req-ext-nonce.der new file mode 100644 index 0000000000000000000000000000000000000000..facb63e77e2efefb6b72ff52b979ca4c81ce52d9 GIT binary patch literal 120 zcmV-;0EhoDb})1>O)yI^NiYcp1uG5%0vZJX1QZZorh0$~owX;QHO_+zLx`TE#|;D& z4}f7Df-zy$FDU1YMmV%A;l|nG0uTYO9{b&1t_e~y3ncz)RcN9kFd;A>1_>($0R;sI aFaZJt5(E%?fLa|lCb+myNYePf*Dd{uV Date: Sun, 9 Sep 2018 18:07:11 -0500 Subject: [PATCH 369/988] refactor asn1_time_set to be useful in a future PR (#4465) --- .../hazmat/backends/openssl/backend.py | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 58fe492f997b..8b4792b42b48 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -791,20 +791,16 @@ def create_x509_certificate(self, builder, private_key, algorithm): self.openssl_assert(res == 1) # Set the "not before" time. - res = self._lib.ASN1_TIME_set( + self._set_asn1_time( self._lib.X509_get_notBefore(x509_cert), calendar.timegm(builder._not_valid_before.timetuple()) ) - if res == self._ffi.NULL: - self._raise_time_set_error() # Set the "not after" time. - res = self._lib.ASN1_TIME_set( + self._set_asn1_time( self._lib.X509_get_notAfter(x509_cert), calendar.timegm(builder._not_valid_after.timetuple()) ) - if res == self._ffi.NULL: - self._raise_time_set_error() # Add extensions. self._create_x509_extensions( @@ -837,18 +833,20 @@ def create_x509_certificate(self, builder, private_key, algorithm): return _Certificate(self, x509_cert) - def _raise_time_set_error(self): - errors = self._consume_errors() - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_ASN1, - self._lib.ASN1_R_ERROR_GETTING_TIME + def _set_asn1_time(self, asn1_time, time): + res = self._lib.ASN1_TIME_set(asn1_time, time) + if res == self._ffi.NULL: + errors = self._consume_errors() + self.openssl_assert( + errors[0]._lib_reason_match( + self._lib.ERR_LIB_ASN1, + self._lib.ASN1_R_ERROR_GETTING_TIME + ) + ) + raise ValueError( + "Invalid time. This error can occur if you set a time too far " + "in the future on Windows." ) - ) - raise ValueError( - "Invalid time. This error can occur if you set a time too far in " - "the future on Windows." - ) def create_x509_crl(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateRevocationListBuilder): @@ -884,20 +882,22 @@ def create_x509_crl(self, builder, private_key, algorithm): self.openssl_assert(res == 1) # Set the last update time. - last_update = self._lib.ASN1_TIME_set( - self._ffi.NULL, calendar.timegm(builder._last_update.timetuple()) - ) + last_update = self._lib.ASN1_TIME_new() self.openssl_assert(last_update != self._ffi.NULL) last_update = self._ffi.gc(last_update, self._lib.ASN1_TIME_free) + self._set_asn1_time( + last_update, calendar.timegm(builder._last_update.timetuple()) + ) res = self._lib.X509_CRL_set_lastUpdate(x509_crl, last_update) self.openssl_assert(res == 1) # Set the next update time. - next_update = self._lib.ASN1_TIME_set( - self._ffi.NULL, calendar.timegm(builder._next_update.timetuple()) - ) + next_update = self._lib.ASN1_TIME_new() self.openssl_assert(next_update != self._ffi.NULL) next_update = self._ffi.gc(next_update, self._lib.ASN1_TIME_free) + self._set_asn1_time( + next_update, calendar.timegm(builder._next_update.timetuple()) + ) res = self._lib.X509_CRL_set_nextUpdate(x509_crl, next_update) self.openssl_assert(res == 1) @@ -1000,12 +1000,12 @@ def create_x509_revoked_certificate(self, builder): x509_revoked, serial_number ) self.openssl_assert(res == 1) - rev_date = self._lib.ASN1_TIME_set( - self._ffi.NULL, - calendar.timegm(builder._revocation_date.timetuple()) - ) + rev_date = self._lib.ASN1_TIME_new() self.openssl_assert(rev_date != self._ffi.NULL) rev_date = self._ffi.gc(rev_date, self._lib.ASN1_TIME_free) + self._set_asn1_time( + rev_date, calendar.timegm(builder._revocation_date.timetuple()) + ) res = self._lib.X509_REVOKED_set_revocationDate(x509_revoked, rev_date) self.openssl_assert(res == 1) # add CRL entry extensions From 09403100de2f6f1cdd0d484dcb8e620f1c335c8f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 9 Sep 2018 21:57:21 -0500 Subject: [PATCH 370/988] OCSP request extension parsing (#4464) * add OCSP request parsing support with OCSPNonce * add docs * reprs man * make extensions a cached property --- docs/spelling_wordlist.txt | 1 + docs/x509/ocsp.rst | 6 ++++ docs/x509/reference.rst | 33 +++++++++++++++++++ src/_cffi_src/openssl/ocsp.py | 2 ++ .../hazmat/backends/openssl/decode_asn1.py | 19 ++++++++++- .../hazmat/backends/openssl/ocsp.py | 6 +++- src/cryptography/x509/__init__.py | 5 +-- src/cryptography/x509/extensions.py | 30 ++++++++++++++++- src/cryptography/x509/ocsp.py | 6 ++++ src/cryptography/x509/oid.py | 5 +++ tests/x509/test_ocsp.py | 13 ++++++++ tests/x509/test_x509_ext.py | 31 +++++++++++++++++ 12 files changed, 152 insertions(+), 5 deletions(-) diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index e8b9098f39b6..ed189248f8a0 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -76,6 +76,7 @@ personalization pickleable plaintext pre +precompute preprocessor preprocessors presentational diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index b706b323817f..163a6a8abca7 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -190,6 +190,12 @@ Interfaces The serial number of the certificate to check. + .. attribute:: extensions + + :type: :class:`~cryptography.x509.Extensions` + + The extensions encoded in the request. + .. method:: public_bytes(encoding) :param encoding: The encoding to use. Only diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index ede08aa59e36..079fef920418 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2432,6 +2432,30 @@ These extensions are only valid within a :class:`RevokedCertificate` object. :type: :class:`datetime.datetime` +OCSP Extensions +~~~~~~~~~~~~~~~ + +.. class:: OCSPNonce(nonce) + + .. versionadded:: 2.4 + + OCSP nonce is an extension that is only valid inside + :class:`~cryptography.x509.ocsp.OCSPRequest` and + :class:`~cryptography.x509.ocsp.OCSPResponse` objects. The nonce + cryptographically binds a request and a response to prevent replay attacks. + In practice nonces are rarely used in OCSP due to the desire to precompute + OCSP responses at large scale. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns + :attr:`~cryptography.x509.oid.OCSPExtensionOID.NONCE`. + + .. attribute:: nonce + + :type: bytes Object Identifiers ~~~~~~~~~~~~~~~~~~ @@ -2854,6 +2878,15 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"2.5.29.24"``. + +.. class:: OCSPExtensionOID + + .. versionadded:: 2.4 + + .. attribute:: NONCE + + Corresponds to the dotted string ``"1.3.6.1.5.5.7.48.1.2"``. + Helper Functions ~~~~~~~~~~~~~~~~ .. currentmodule:: cryptography.x509 diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index db8597af69f8..a466458d1662 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -40,6 +40,8 @@ int OCSP_single_get0_status(OCSP_SINGLERESP *, int *, ASN1_GENERALIZEDTIME **, ASN1_GENERALIZEDTIME **, ASN1_GENERALIZEDTIME **); +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *, int); int OCSP_request_onereq_count(OCSP_REQUEST *); OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *, int); int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *); diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 47fa911e3a09..803099809ea7 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -13,7 +13,8 @@ from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM from cryptography.x509.name import _ASN1_TYPE_TO_ENUM from cryptography.x509.oid import ( - CRLEntryExtensionOID, CertificatePoliciesOID, ExtensionOID + CRLEntryExtensionOID, CertificatePoliciesOID, ExtensionOID, + OCSPExtensionOID, ) @@ -765,6 +766,12 @@ def _parse_asn1_generalized_time(backend, generalized_time): return datetime.datetime.strptime(time, "%Y%m%d%H%M%SZ") +def _decode_nonce(backend, nonce): + nonce = backend._ffi.cast("ASN1_OCTET_STRING *", nonce) + nonce = backend._ffi.gc(nonce, backend._lib.ASN1_OCTET_STRING_free) + return x509.OCSPNonce(_asn1_string_to_bytes(backend, nonce)) + + _EXTENSION_HANDLERS_NO_SCT = { ExtensionOID.BASIC_CONSTRAINTS: _decode_basic_constraints, ExtensionOID.SUBJECT_KEY_IDENTIFIER: _decode_subject_key_identifier, @@ -806,6 +813,10 @@ def _parse_asn1_generalized_time(backend, generalized_time): ), } +_OCSP_REQ_EXTENSION_HANDLERS = { + OCSPExtensionOID.NONCE: _decode_nonce, +} + _CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), @@ -835,3 +846,9 @@ def _parse_asn1_generalized_time(backend, generalized_time): get_ext=lambda backend, x, i: backend._lib.X509_CRL_get_ext(x, i), handlers=_CRL_EXTENSION_HANDLERS, ) + +_OCSP_REQ_EXT_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.OCSP_REQUEST_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.OCSP_REQUEST_get_ext(x, i), + handlers=_OCSP_REQ_EXTENSION_HANDLERS, +) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 2b07b324aa14..420d7eb6afd0 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -7,7 +7,7 @@ from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _asn1_integer_to_int, _asn1_string_to_bytes, _obj2txt + _OCSP_REQ_EXT_PARSER, _asn1_integer_to_int, _asn1_string_to_bytes, _obj2txt ) from cryptography.hazmat.primitives import serialization from cryptography.x509.ocsp import OCSPRequest, _OIDS_TO_HASH @@ -95,6 +95,10 @@ def serial_number(self): def hash_algorithm(self): return _hash_algorithm(self._backend, self._cert_id) + @utils.cached_property + def extensions(self): + return _OCSP_REQ_EXT_PARSER.parse(self._backend, self._ocsp_request) + def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: raise ValueError( diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index 15459a12333d..fd0194555ebb 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -21,8 +21,8 @@ DeltaCRLIndicator, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, Extension, ExtensionNotFound, ExtensionType, Extensions, FreshestCRL, GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, - KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, PolicyConstraints, - PolicyInformation, PrecertPoison, + KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, OCSPNonce, + PolicyConstraints, PolicyInformation, PrecertPoison, PrecertificateSignedCertificateTimestamps, ReasonFlags, SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice @@ -184,4 +184,5 @@ "PolicyConstraints", "PrecertificateSignedCertificateTimestamps", "PrecertPoison", + "OCSPNonce", ] diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 08af03c8b406..b2d9908e7cfd 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -24,7 +24,7 @@ from cryptography.x509.general_name import GeneralName, IPAddress, OtherName from cryptography.x509.name import RelativeDistinguishedName from cryptography.x509.oid import ( - CRLEntryExtensionOID, ExtensionOID, ObjectIdentifier + CRLEntryExtensionOID, ExtensionOID, OCSPExtensionOID, ObjectIdentifier, ) @@ -1403,6 +1403,34 @@ def __repr__(self): ) +@utils.register_interface(ExtensionType) +class OCSPNonce(object): + oid = OCSPExtensionOID.NONCE + + def __init__(self, nonce): + if not isinstance(nonce, bytes): + raise TypeError("nonce must be bytes") + + self._nonce = nonce + + def __eq__(self, other): + if not isinstance(other, OCSPNonce): + return NotImplemented + + return self.nonce == other.nonce + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.nonce) + + def __repr__(self): + return "".format(self) + + nonce = utils.read_only_property("_nonce") + + @utils.register_interface(ExtensionType) class UnrecognizedExtension(object): def __init__(self, oid, value): diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 95e7f35b6e43..7535a0b3391c 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -108,6 +108,12 @@ def public_bytes(self, encoding): Serializes the request to DER """ + @abc.abstractproperty + def extensions(self): + """ + The list of request extensions. Not single request extensions. + """ + @six.add_metaclass(abc.ABCMeta) class OCSPResponse(object): diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 77e3fa636e5f..bc654640d258 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -96,6 +96,10 @@ class ExtensionOID(object): ) +class OCSPExtensionOID(object): + NONCE = ObjectIdentifier("1.3.6.1.5.5.7.48.1.2") + + class CRLEntryExtensionOID(object): CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29") CRL_REASON = ObjectIdentifier("2.5.29.21") @@ -271,4 +275,5 @@ class CertificatePoliciesOID(object): AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers", CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice", + OCSPExtensionOID.NONCE: "OCSPNonce", } diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 3e6ac9cdeb70..a646f4b7eef7 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -59,6 +59,19 @@ def test_load_request(self): assert req.serial_number == int( "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F9", 16 ) + assert len(req.extensions) == 0 + + def test_load_request_with_extensions(self): + req = _load_data( + os.path.join("x509", "ocsp", "req-ext-nonce.der"), + ocsp.load_der_ocsp_request, + ) + assert len(req.extensions) == 1 + ext = req.extensions[0] + assert ext.critical is False + assert ext.value == x509.OCSPNonce( + b"\x04\x10{\x80Z\x1d7&\xb8\xb8OH\xd2\xf8\xbf\xd7-\xfd" + ) def test_load_request_two_requests(self): with pytest.raises(NotImplementedError): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 7e0ae2203124..7a43c851a43f 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4547,3 +4547,34 @@ def test_invalid_certificate_policies_data(self, backend): ) with pytest.raises(ValueError): cert.extensions + + +class TestOCSPNonce(object): + def test_non_bytes(self): + with pytest.raises(TypeError): + x509.OCSPNonce(38) + + def test_eq(self): + nonce1 = x509.OCSPNonce(b"0" * 5) + nonce2 = x509.OCSPNonce(b"0" * 5) + assert nonce1 == nonce2 + + def test_ne(self): + nonce1 = x509.OCSPNonce(b"0" * 5) + nonce2 = x509.OCSPNonce(b"0" * 6) + assert nonce1 != nonce2 + assert nonce1 != object() + + def test_repr(self): + nonce1 = x509.OCSPNonce(b"nonce") + if not six.PY2: + assert repr(nonce1) == "" + else: + assert repr(nonce1) == "" + + def test_hash(self): + nonce1 = x509.OCSPNonce(b"0" * 5) + nonce2 = x509.OCSPNonce(b"0" * 5) + nonce3 = x509.OCSPNonce(b"1" * 5) + assert hash(nonce1) == hash(nonce2) + assert hash(nonce1) != hash(nonce3) From 245fbdfc76b33547ea8eada515c520286ed656e4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 11 Sep 2018 11:48:47 -0400 Subject: [PATCH 371/988] 1.1.1 is out! (#4466) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a34c50e94977..de78953f4e56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,9 +42,9 @@ matrix: - python: 3.5 env: TOXENV=py35 OPENSSL=1.1.0i - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1-pre9 + env: TOXENV=py27 OPENSSL=1.1.1 - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1-pre9 + env: TOXENV=py37 OPENSSL=1.1.1 dist: xenial sudo: true - python: 3.7 From 7700251f26c39c38dbf2be8924be46fec08ac2cb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 14 Sep 2018 13:01:12 -0400 Subject: [PATCH 372/988] block sphinx 1.8.0 since it fails our docs job (#4469) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0c793e321bd0..5c8c58435242 100644 --- a/setup.py +++ b/setup.py @@ -297,7 +297,7 @@ def run_tests(self): "test": test_requirements, "docs": [ - "sphinx >= 1.6.5", + "sphinx >= 1.6.5,!=1.8.0", "sphinx_rtd_theme", ], "docstest": [ From edfedc135cbce685e96e7386654e99eb1c43362b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 14 Sep 2018 18:24:20 -0400 Subject: [PATCH 373/988] a few docs fixes and language improvements (#4472) --- docs/hazmat/primitives/asymmetric/ec.rst | 2 +- docs/hazmat/primitives/twofactor.rst | 12 ++++++------ docs/x509/ocsp.rst | 6 ++---- docs/x509/reference.rst | 4 ++-- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index ab781e922b75..226dea8c04e0 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -455,7 +455,7 @@ Key Interfaces .. attribute:: name - :type: string + :type: str The name of the curve. Usually the name used for the ASN.1 OID such as ``secp256k1``. diff --git a/docs/hazmat/primitives/twofactor.rst b/docs/hazmat/primitives/twofactor.rst index 3b4f396128a7..b48db5995ab7 100644 --- a/docs/hazmat/primitives/twofactor.rst +++ b/docs/hazmat/primitives/twofactor.rst @@ -212,7 +212,7 @@ similar to the following code. :param account_name: The display name of account, such as ``'Alice Smith'`` or ``'alice@example.com'``. - :type: :term:`text` + :type account_name: :term:`text` :param issuer: The optional display name of issuer. This is typically the provider or service the user wants to access using the OTP token. @@ -222,11 +222,11 @@ similar to the following code. Provisioning URI ~~~~~~~~~~~~~~~~ -The provisioning URI of HOTP and TOTP is not actual the part of RFC 4226 and -RFC 6238, but a `spec of Google Authenticator`_. It is widely supported by web -sites and mobile applications which are using Two-Factor authentication. +The provisioning URI of HOTP and TOTP is a `feature of Google Authenticator`_ +and not actually part of the HOTP or TOTP RFCs. However, it is widely supported +by web sites and mobile applications which are using Two-Factor authentication. -For generating a provisioning URI, you could use the ``get_provisioning_uri`` +For generating a provisioning URI you can use the ``get_provisioning_uri`` method of HOTP/TOTP instances. .. code-block:: python @@ -241,5 +241,5 @@ method of HOTP/TOTP instances. A common usage is encoding the provisioning URI into QR code and guiding users to scan it with Two-Factor authentication applications in their mobile devices. -.. _`spec of Google Authenticator`: https://github.com/google/google-authenticator/wiki/Key-Uri-Format +.. _`feature of Google Authenticator`: https://github.com/google/google-authenticator/wiki/Key-Uri-Format .. _`Issue #2915`: https://github.com/pyca/cryptography/issues/2915 diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 163a6a8abca7..14d9bb849530 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -178,8 +178,7 @@ Interfaces .. attribute:: hash_algorithm - :type: An instance of a - :class:`~cryptography.hazmat.primitives.hashes.Hash` + :type: :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` The algorithm used to generate the ``issuer_key_hash`` and ``issuer_name_hash``. @@ -358,8 +357,7 @@ Interfaces .. attribute:: hash_algorithm - :type: An instance of a - :class:`~cryptography.hazmat.primitives.hashes.Hash` + :type: :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` The algorithm used to generate the ``issuer_key_hash`` and ``issuer_name_hash``. diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 079fef920418..8330b2ac5a47 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1371,7 +1371,7 @@ General Name Classes .. attribute:: value - :type: `bytes` + :type: bytes X.509 Extensions ~~~~~~~~~~~~~~~~ @@ -2261,7 +2261,7 @@ X.509 Extensions .. attribute:: value - :type: byte + :type: bytes Returns the DER encoded bytes payload of the extension. From 9aefda919b1c135a8220ca76339e586e58b3e10e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 14 Sep 2018 19:44:47 -0400 Subject: [PATCH 374/988] Move linkcheck tox env to use setup.py to get docs dependencies (#4473) --- tox.ini | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index a6227c0fc07c..c313e9c20e4d 100644 --- a/tox.ini +++ b/tox.ini @@ -50,8 +50,7 @@ commands = [testenv:docs-linkcheck] extras = -deps = - sphinx + docs basepython = python2.7 commands = sphinx-build -W -b linkcheck docs docs/_build/html From 0a7bebfaf710d3691cec311d13be7725af4b93cc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Sep 2018 00:23:01 -0400 Subject: [PATCH 375/988] Remove conditionals for OpenSSL 1.1.1 pre-releases (#4467) --- src/_cffi_src/openssl/cryptography.py | 3 --- src/_cffi_src/openssl/ocsp.py | 8 +++----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 3ebe3c5b4820..114998841184 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -44,9 +44,6 @@ (OPENSSL_VERSION_NUMBER >= 0x10100000 && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x1010006f && !CRYPTOGRAPHY_IS_LIBRESSL) -#define CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 \ - (OPENSSL_VERSION_NUMBER >= 0x10101000 && \ - OPENSSL_VERSION_NUMBER <= 0x10101009) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 \ (OPENSSL_VERSION_NUMBER < 0x10002000 || CRYPTOGRAPHY_IS_LIBRESSL) diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index a466458d1662..1f535a7bdcb9 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -82,10 +82,9 @@ #if ( \ CRYPTOGRAPHY_OPENSSL_110_OR_GREATER && \ CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J \ - ) || CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 + ) /* These structs come from ocsp_lcl.h and are needed to de-opaque the struct - for the getters in OpenSSL 1.1.0 through 1.1.0i, as well as 1.1.1-pre1 to - 1.1.1-pre9 */ + for the getters in OpenSSL 1.1.0 through 1.1.0i */ struct ocsp_responder_id_st { int type; union { @@ -147,8 +146,7 @@ } #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J || \ - CRYPTOGRAPHY_OPENSSL_BETWEEN_111_and_111PRE9 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs) { #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 From 1717f8c998b22fbbebec4b5514aee42fb3a2f68d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 26 Sep 2018 13:38:36 -0500 Subject: [PATCH 376/988] add ed25519 bindings (#4476) * add ed25519 bindings * var name --- src/_cffi_src/openssl/cryptography.py | 3 +++ src/_cffi_src/openssl/evp.py | 22 +++++++++++++++++++ src/_cffi_src/openssl/nid.py | 8 +++++++ .../hazmat/bindings/openssl/_conditional.py | 17 ++++++++++++++ 4 files changed, 50 insertions(+) diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 114998841184..e16fc57d91a1 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -53,6 +53,8 @@ (OPENSSL_VERSION_NUMBER < 0x10100000 || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110J \ (OPENSSL_VERSION_NUMBER < 0x101000af || CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 \ + (OPENSSL_VERSION_NUMBER < 0x10101000 || CRYPTOGRAPHY_IS_LIBRESSL) """ TYPES = """ @@ -62,6 +64,7 @@ static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102; +static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111; static const int CRYPTOGRAPHY_IS_LIBRESSL; """ diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 715bfe19ead2..2fb724d251ef 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -33,6 +33,7 @@ static const int Cryptography_HAS_SCRYPT; static const int Cryptography_HAS_EVP_PKEY_DHX; static const int Cryptography_HAS_EVP_PKEY_get_set_tls_encodedpoint; +static const int Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY; """ FUNCTIONS = """ @@ -98,6 +99,12 @@ const EVP_MD *EVP_sha384(void); const EVP_MD *EVP_sha512(void); +int EVP_DigestSignInit(EVP_MD_CTX *, EVP_PKEY_CTX **, const EVP_MD *, + ENGINE *, EVP_PKEY *); +int EVP_DigestVerifyInit(EVP_MD_CTX *, EVP_PKEY_CTX **, const EVP_MD *, + ENGINE *, EVP_PKEY *); + + int PKCS5_PBKDF2_HMAC_SHA1(const char *, int, const unsigned char *, int, int, int, unsigned char *); @@ -147,6 +154,11 @@ without worrying about what OpenSSL we're running against. */ EVP_MD_CTX *Cryptography_EVP_MD_CTX_new(void); void Cryptography_EVP_MD_CTX_free(EVP_MD_CTX *); +/* Added in 1.1.1 */ +int EVP_DigestSign(EVP_MD_CTX *, unsigned char *, size_t *, + const unsigned char *, size_t); +int EVP_DigestVerify(EVP_MD_CTX *, const unsigned char *, size_t, + const unsigned char *, size_t); /* Added in 1.1.0 */ size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *, unsigned char **); int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *, const unsigned char *, @@ -232,6 +244,16 @@ size_t) = NULL; #endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 +static const long Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY = 0; +int (*EVP_DigestSign)(EVP_MD_CTX *, unsigned char *, size_t *, + const unsigned char *tbs, size_t) = NULL; +int (*EVP_DigestVerify)(EVP_MD_CTX *, const unsigned char *, size_t, + const unsigned char *, size_t) = NULL; +#else +static const long Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY = 1; +#endif + /* OpenSSL 1.1.0+ does this define for us, but if not present we'll do it */ #if !defined(EVP_CTRL_AEAD_SET_IVLEN) # define EVP_CTRL_AEAD_SET_IVLEN EVP_CTRL_GCM_SET_IVLEN diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index ee739c1bf998..03aaee9278ac 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -10,6 +10,7 @@ TYPES = """ static const int Cryptography_HAS_X25519; +static const int Cryptography_HAS_ED25519; static const int NID_undef; static const int NID_dsa; @@ -92,6 +93,7 @@ static const int NID_sect571k1; static const int NID_sect571r1; static const int NID_X25519; +static const int NID_ED25519; static const int NID_wap_wsg_idm_ecid_wtls1; static const int NID_wap_wsg_idm_ecid_wtls3; static const int NID_wap_wsg_idm_ecid_wtls4; @@ -233,4 +235,10 @@ #else static const long Cryptography_HAS_X25519 = 1; #endif +#ifndef NID_ED25519 +static const long Cryptography_HAS_ED25519 = 0; +static const int NID_ED25519 = 0; +#else +static const long Cryptography_HAS_ED25519 = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index f477f6ab8cb3..4170f3a1a2ad 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -211,6 +211,19 @@ def cryptography_has_x25519(): ] +def cryptography_has_ed25519(): + return [ + "NID_ED25519", + ] + + +def cryptography_has_oneshot_evp_digest_sign_verify(): + return [ + "EVP_DigestSign", + "EVP_DigestVerify", + ] + + def cryptography_has_evp_pkey_get_set_tls_encodedpoint(): return [ "EVP_PKEY_get1_tls_encodedpoint", @@ -309,6 +322,10 @@ def cryptography_has_cipher_details(): cryptography_has_x509_store_ctx_get_issuer ), "Cryptography_HAS_X25519": cryptography_has_x25519, + "Cryptography_HAS_ED25519": cryptography_has_ed25519, + "Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY": ( + cryptography_has_oneshot_evp_digest_sign_verify + ), "Cryptography_HAS_EVP_PKEY_get_set_tls_encodedpoint": ( cryptography_has_evp_pkey_get_set_tls_encodedpoint ), From a07de31096767abd3b4529ae29c0487c8f21310b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 2 Oct 2018 07:54:31 +0800 Subject: [PATCH 377/988] support OCSP response parsing (#4452) * support OCSP response parsing * move the decorator to make pep8 happy * add some missing docs * review feedback * more review feedback --- docs/x509/ocsp.rst | 21 ++ .../hazmat/backends/openssl/backend.py | 14 +- .../hazmat/backends/openssl/ocsp.py | 244 +++++++++++++++++- src/cryptography/x509/ocsp.py | 8 + tests/x509/test_ocsp.py | 137 ++++++++++ 5 files changed, 420 insertions(+), 4 deletions(-) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 14d9bb849530..b20302260c01 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -74,6 +74,7 @@ OCSP b",\xdez\t\xbe1\x1bC\xbc\x1c*MSX\x02\x15\x00\x98\xd9\xe5\xc0\xb4\xc3" b"sU-\xf7|]\x0f\x1e\xb5\x12\x8eIE\xf9" ) + der_ocsp_resp_unauth = b"0\x03\n\x01\x06" OCSP (Online Certificate Status Protocol) is a method of checking the revocation status of certificates. It is specified in :rfc:`6960`, as well @@ -151,6 +152,26 @@ Creating Requests >>> base64.b64encode(req.public_bytes(serialization.Encoding.DER)) b'MEMwQTA/MD0wOzAJBgUrDgMCGgUABBRAC0Z68eay0wmDug1gfn5ZN0gkxAQUw5zz/NNGCDS7zkZ/oHxb8+IIy1kCAj8g' +Loading Responses +~~~~~~~~~~~~~~~~~ + +.. function:: load_der_ocsp_response(data) + + .. versionadded:: 2.4 + + Deserialize an OCSP response from DER encoded data. + + :param bytes data: The DER encoded OCSP response data. + + :returns: An instance of :class:`~cryptography.x509.ocsp.OCSPResponse`. + + .. doctest:: + + >>> from cryptography.x509 import ocsp + >>> ocsp_resp = ocsp.load_der_ocsp_response(der_ocsp_resp_unauth) + >>> print(ocsp_resp.response_status) + OCSPResponseStatus.UNAUTHORIZED + Interfaces ~~~~~~~~~~ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 8b4792b42b48..f374a8e388ee 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -42,7 +42,9 @@ ) from cryptography.hazmat.backends.openssl.hashes import _HashContext from cryptography.hazmat.backends.openssl.hmac import _HMACContext -from cryptography.hazmat.backends.openssl.ocsp import _OCSPRequest +from cryptography.hazmat.backends.openssl.ocsp import ( + _OCSPRequest, _OCSPResponse +) from cryptography.hazmat.backends.openssl.rsa import ( _RSAPrivateKey, _RSAPublicKey ) @@ -1441,6 +1443,16 @@ def load_der_ocsp_request(self, data): request = self._ffi.gc(request, self._lib.OCSP_REQUEST_free) return _OCSPRequest(self, request) + def load_der_ocsp_response(self, data): + mem_bio = self._bytes_to_bio(data) + response = self._lib.d2i_OCSP_RESPONSE_bio(mem_bio.bio, self._ffi.NULL) + if response == self._ffi.NULL: + self._consume_errors() + raise ValueError("Unable to load OCSP response") + + response = self._ffi.gc(response, self._lib.OCSP_RESPONSE_free) + return _OCSPResponse(self, response) + def create_ocsp_request(self, builder): ocsp_req = self._lib.OCSP_REQUEST_new() self.openssl_assert(ocsp_req != self._ffi.NULL) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 420d7eb6afd0..f3f18cb08f57 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -4,13 +4,35 @@ from __future__ import absolute_import, division, print_function -from cryptography import utils +import functools + +from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _OCSP_REQ_EXT_PARSER, _asn1_integer_to_int, _asn1_string_to_bytes, _obj2txt + _CRL_ENTRY_REASON_CODE_TO_ENUM, _OCSP_REQ_EXT_PARSER, _asn1_integer_to_int, + _asn1_string_to_bytes, _decode_x509_name, _obj2txt, + _parse_asn1_generalized_time, ) +from cryptography.hazmat.backends.openssl.x509 import _Certificate from cryptography.hazmat.primitives import serialization -from cryptography.x509.ocsp import OCSPRequest, _OIDS_TO_HASH +from cryptography.x509.ocsp import ( + OCSPCertStatus, OCSPRequest, OCSPResponse, OCSPResponseStatus, + _CERT_STATUS_TO_ENUM, _OIDS_TO_HASH, _RESPONSE_STATUS_TO_ENUM, +) + + +def _requires_successful_response(func): + @functools.wraps(func) + def wrapper(self, *args): + if self.response_status != OCSPResponseStatus.SUCCESSFUL: + raise ValueError( + "OCSP response status is not successful so the property " + "has no value" + ) + else: + return func(self, *args) + + return wrapper def _issuer_key_hash(backend, cert_id): @@ -63,6 +85,222 @@ def _hash_algorithm(backend, cert_id): ) +@utils.register_interface(OCSPResponse) +class _OCSPResponse(object): + def __init__(self, backend, ocsp_response): + self._backend = backend + self._ocsp_response = ocsp_response + status = self._backend._lib.OCSP_response_status(self._ocsp_response) + self._backend.openssl_assert(status in _RESPONSE_STATUS_TO_ENUM) + self._status = _RESPONSE_STATUS_TO_ENUM[status] + if self._status is OCSPResponseStatus.SUCCESSFUL: + basic = self._backend._lib.OCSP_response_get1_basic( + self._ocsp_response + ) + self._backend.openssl_assert(basic != self._backend._ffi.NULL) + self._basic = self._backend._ffi.gc( + basic, self._backend._lib.OCSP_BASICRESP_free + ) + self._backend.openssl_assert( + self._backend._lib.OCSP_resp_count(self._basic) == 1 + ) + self._single = self._backend._lib.OCSP_resp_get0(self._basic, 0) + self._backend.openssl_assert( + self._single != self._backend._ffi.NULL + ) + self._cert_id = self._backend._lib.OCSP_SINGLERESP_get0_id( + self._single + ) + self._backend.openssl_assert( + self._cert_id != self._backend._ffi.NULL + ) + + response_status = utils.read_only_property("_status") + + @property + @_requires_successful_response + def signature_algorithm_oid(self): + alg = self._backend._lib.OCSP_resp_get0_tbs_sigalg(self._basic) + self._backend.openssl_assert(alg != self._backend._ffi.NULL) + oid = _obj2txt(self._backend, alg.algorithm) + return x509.ObjectIdentifier(oid) + + @property + @_requires_successful_response + def signature(self): + sig = self._backend._lib.OCSP_resp_get0_signature(self._basic) + self._backend.openssl_assert(sig != self._backend._ffi.NULL) + return _asn1_string_to_bytes(self._backend, sig) + + @property + @_requires_successful_response + def tbs_response_bytes(self): + respdata = self._backend._lib.OCSP_resp_get0_respdata(self._basic) + self._backend.openssl_assert(respdata != self._backend._ffi.NULL) + pp = self._backend._ffi.new("unsigned char **") + res = self._backend._lib.i2d_OCSP_RESPDATA(respdata, pp) + self._backend.openssl_assert(pp[0] != self._backend._ffi.NULL) + pp = self._backend._ffi.gc( + pp, lambda pointer: self._backend._lib.OPENSSL_free(pointer[0]) + ) + self._backend.openssl_assert(res > 0) + return self._backend._ffi.buffer(pp[0], res)[:] + + @property + @_requires_successful_response + def certificates(self): + sk_x509 = self._backend._lib.OCSP_resp_get0_certs(self._basic) + num = self._backend._lib.sk_X509_num(sk_x509) + certs = [] + for i in range(num): + x509 = self._backend._lib.sk_X509_value(sk_x509, i) + self._backend.openssl_assert(x509 != self._backend._ffi.NULL) + cert = _Certificate(self._backend, x509) + # We need to keep the OCSP response that the certificate came from + # alive until the Certificate object itself goes out of scope, so + # we give it a private reference. + cert._ocsp_resp = self + certs.append(cert) + + return certs + + @property + @_requires_successful_response + def responder_key_hash(self): + _, asn1_string = self._responder_key_name() + if asn1_string == self._backend._ffi.NULL: + return None + else: + return _asn1_string_to_bytes(self._backend, asn1_string) + + @property + @_requires_successful_response + def responder_name(self): + x509_name, _ = self._responder_key_name() + if x509_name == self._backend._ffi.NULL: + return None + else: + return _decode_x509_name(self._backend, x509_name) + + def _responder_key_name(self): + asn1_string = self._backend._ffi.new("ASN1_OCTET_STRING **") + x509_name = self._backend._ffi.new("X509_NAME **") + res = self._backend._lib.OCSP_resp_get0_id( + self._basic, asn1_string, x509_name + ) + self._backend.openssl_assert(res == 1) + return x509_name[0], asn1_string[0] + + @property + @_requires_successful_response + def produced_at(self): + produced_at = self._backend._lib.OCSP_resp_get0_produced_at( + self._basic + ) + return _parse_asn1_generalized_time(self._backend, produced_at) + + @property + @_requires_successful_response + def certificate_status(self): + status = self._backend._lib.OCSP_single_get0_status( + self._single, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + ) + self._backend.openssl_assert(status in _CERT_STATUS_TO_ENUM) + return _CERT_STATUS_TO_ENUM[status] + + @property + @_requires_successful_response + def revocation_time(self): + if self.certificate_status is not OCSPCertStatus.REVOKED: + return None + + asn1_time = self._backend._ffi.new("ASN1_GENERALIZEDTIME **") + self._backend._lib.OCSP_single_get0_status( + self._single, + self._backend._ffi.NULL, + asn1_time, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + ) + self._backend.openssl_assert(asn1_time[0] != self._backend._ffi.NULL) + return _parse_asn1_generalized_time(self._backend, asn1_time[0]) + + @property + @_requires_successful_response + def revocation_reason(self): + if self.certificate_status is not OCSPCertStatus.REVOKED: + return None + + reason_ptr = self._backend._ffi.new("int *") + self._backend._lib.OCSP_single_get0_status( + self._single, + reason_ptr, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + ) + # If no reason is encoded OpenSSL returns -1 + if reason_ptr[0] == -1: + return None + else: + self._backend.openssl_assert( + reason_ptr[0] in _CRL_ENTRY_REASON_CODE_TO_ENUM + ) + return _CRL_ENTRY_REASON_CODE_TO_ENUM[reason_ptr[0]] + + @property + @_requires_successful_response + def this_update(self): + asn1_time = self._backend._ffi.new("ASN1_GENERALIZEDTIME **") + self._backend._lib.OCSP_single_get0_status( + self._single, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + asn1_time, + self._backend._ffi.NULL, + ) + self._backend.openssl_assert(asn1_time[0] != self._backend._ffi.NULL) + return _parse_asn1_generalized_time(self._backend, asn1_time[0]) + + @property + @_requires_successful_response + def next_update(self): + asn1_time = self._backend._ffi.new("ASN1_GENERALIZEDTIME **") + self._backend._lib.OCSP_single_get0_status( + self._single, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + asn1_time, + ) + self._backend.openssl_assert(asn1_time[0] != self._backend._ffi.NULL) + return _parse_asn1_generalized_time(self._backend, asn1_time[0]) + + @property + @_requires_successful_response + def issuer_key_hash(self): + return _issuer_key_hash(self._backend, self._cert_id) + + @property + @_requires_successful_response + def issuer_name_hash(self): + return _issuer_name_hash(self._backend, self._cert_id) + + @property + @_requires_successful_response + def hash_algorithm(self): + return _hash_algorithm(self._backend, self._cert_id) + + @property + @_requires_successful_response + def serial_number(self): + return _serial_number(self._backend, self._cert_id) + + @utils.register_interface(OCSPRequest) class _OCSPRequest(object): def __init__(self, backend, ocsp_request): diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 7535a0b3391c..7907bcae44e6 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -40,11 +40,19 @@ class OCSPCertStatus(Enum): UNKNOWN = 2 +_CERT_STATUS_TO_ENUM = dict((x.value, x) for x in OCSPCertStatus) + + def load_der_ocsp_request(data): from cryptography.hazmat.backends.openssl.backend import backend return backend.load_der_ocsp_request(data) +def load_der_ocsp_response(data): + from cryptography.hazmat.backends.openssl.backend import backend + return backend.load_der_ocsp_response(data) + + class OCSPRequestBuilder(object): def __init__(self, request=None): self._request = request diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index a646f4b7eef7..aeaa6e6c064c 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import base64 +import datetime import os import pytest @@ -12,6 +13,7 @@ from cryptography import x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15 from cryptography.x509 import ocsp from .test_x509 import _load_cert @@ -146,3 +148,138 @@ def test_create_ocsp_request(self): b"MEMwQTA/MD0wOzAJBgUrDgMCGgUABBRAC0Z68eay0wmDug1gfn5ZN0gkxAQUw5zz" b"/NNGCDS7zkZ/oHxb8+IIy1kCAj8g" ) + + +class TestOCSPResponse(object): + def test_bad_response(self): + with pytest.raises(ValueError): + ocsp.load_der_ocsp_response(b"invalid") + + def test_load_response(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-sha256.der"), + ocsp.load_der_ocsp_response, + ) + from cryptography.hazmat.backends.openssl.backend import backend + issuer = _load_cert( + os.path.join("x509", "letsencryptx3.pem"), + x509.load_pem_x509_certificate, + backend + ) + assert resp.response_status == ocsp.OCSPResponseStatus.SUCCESSFUL + assert (resp.signature_algorithm_oid == + x509.SignatureAlgorithmOID.RSA_WITH_SHA256) + assert resp.signature == base64.b64decode( + b"I9KUlyLV/2LbNCVu1BQphxdNlU/jBzXsPYVscPjW5E93pCrSO84GkIWoOJtqsnt" + b"78DLcQPnF3W24NXGzSGKlSWfXIsyoXCxnBm0mIbD5ZMnKyXEnqSR33Z9He/A+ML" + b"A8gbrDUipGNPosesenkKUnOtFIzEGv29hV5E6AMP2ORPVsVlTAZegPJFbbVIWc0" + b"rZGFCXKxijDxtUtgWzBhpBAI50JbPHi+IVuaOe4aDJLYgZ0BIBNa6bDI+rScyoy" + b"5U0DToV7SZn6CoJ3U19X7BHdYn6TLX0xi43eXuzBGzdHnSzmsc7r/DvkAKJm3vb" + b"dVECXqe/gFlXJUBcZ25jhs70MUA==" + ) + assert resp.tbs_response_bytes == base64.b64decode( + b"MIHWoUwwSjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzA" + b"hBgNVBAMTGkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzGA8yMDE4MDgzMDExMT" + b"UwMFowdTBzMEswCQYFKw4DAhoFAAQUfuZq53Kas/z4oiBkbBahLWBxCF0EFKhKa" + b"mMEfd265tE5t6ZFZe/zqOyhAhIDHHh6fckClQB7xfIiCztSevCAABgPMjAxODA4" + b"MzAxMTAwMDBaoBEYDzIwMTgwOTA2MTEwMDAwWg==" + ) + issuer.public_key().verify( + resp.signature, + resp.tbs_response_bytes, + PKCS1v15(), + hashes.SHA256() + ) + assert resp.certificates == [] + assert resp.responder_key_hash is None + assert resp.responder_name == issuer.subject + assert resp.produced_at == datetime.datetime(2018, 8, 30, 11, 15) + assert resp.certificate_status == ocsp.OCSPCertStatus.GOOD + assert resp.revocation_time is None + assert resp.revocation_reason is None + assert resp.this_update == datetime.datetime(2018, 8, 30, 11, 0) + assert resp.next_update == datetime.datetime(2018, 9, 6, 11, 0) + assert resp.issuer_key_hash == ( + b'\xa8Jjc\x04}\xdd\xba\xe6\xd19\xb7\xa6Ee\xef\xf3\xa8\xec\xa1' + ) + assert resp.issuer_name_hash == ( + b'~\xe6j\xe7r\x9a\xb3\xfc\xf8\xa2 dl\x16\xa1-`q\x08]' + ) + assert isinstance(resp.hash_algorithm, hashes.SHA1) + assert resp.serial_number == 271024907440004808294641238224534273948400 + + def test_load_unauthorized(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-unauthorized.der"), + ocsp.load_der_ocsp_response, + ) + assert resp.response_status == ocsp.OCSPResponseStatus.UNAUTHORIZED + with pytest.raises(ValueError): + assert resp.signature_algorithm_oid + with pytest.raises(ValueError): + assert resp.signature + with pytest.raises(ValueError): + assert resp.tbs_response_bytes + with pytest.raises(ValueError): + assert resp.certificates + with pytest.raises(ValueError): + assert resp.responder_key_hash + with pytest.raises(ValueError): + assert resp.responder_name + with pytest.raises(ValueError): + assert resp.produced_at + with pytest.raises(ValueError): + assert resp.certificate_status + with pytest.raises(ValueError): + assert resp.revocation_time + with pytest.raises(ValueError): + assert resp.revocation_reason + with pytest.raises(ValueError): + assert resp.this_update + with pytest.raises(ValueError): + assert resp.next_update + with pytest.raises(ValueError): + assert resp.issuer_key_hash + with pytest.raises(ValueError): + assert resp.issuer_name_hash + with pytest.raises(ValueError): + assert resp.hash_algorithm + with pytest.raises(ValueError): + assert resp.serial_number + + def test_load_revoked(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-revoked.der"), + ocsp.load_der_ocsp_response, + ) + assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED + assert resp.revocation_time == datetime.datetime( + 2016, 9, 2, 21, 28, 48 + ) + assert resp.revocation_reason is None + + def test_load_delegate_unknown_cert(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-delegate-unknown-cert.der"), + ocsp.load_der_ocsp_response, + ) + assert len(resp.certificates) == 1 + assert isinstance(resp.certificates[0], x509.Certificate) + assert resp.certificate_status == ocsp.OCSPCertStatus.UNKNOWN + + def test_load_responder_key_hash(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-responder-key-hash.der"), + ocsp.load_der_ocsp_response, + ) + assert resp.responder_name is None + assert resp.responder_key_hash == ( + b'\x0f\x80a\x1c\x821a\xd5/(\xe7\x8dF8\xb4,\xe1\xc6\xd9\xe2' + ) + + def test_load_revoked_reason(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-revoked-reason.der"), + ocsp.load_der_ocsp_response, + ) + assert resp.revocation_reason is x509.ReasonFlags.superseded From cdb7a2d7262ee016d39a7a59d29fc0437f7422e6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 7 Oct 2018 03:36:39 +0800 Subject: [PATCH 378/988] additional OCSP bindings for the response builder (#4480) * additional OCSP bindings for the response builder * use the OCSP extension funcs that match the rest of x509 --- src/_cffi_src/openssl/ocsp.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index 1f535a7bdcb9..829314a32563 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -16,6 +16,8 @@ typedef ... OCSP_SINGLERESP; typedef ... OCSP_CERTID; typedef ... OCSP_RESPDATA; +static const long OCSP_NOCERTS; +static const long OCSP_RESPID_KEY; """ FUNCTIONS = """ @@ -49,6 +51,7 @@ OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *); OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *, OCSP_CERTID *); OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *, const X509 *, const X509 *); +void OCSP_CERTID_free(OCSP_CERTID *); OCSP_BASICRESP *OCSP_BASICRESP_new(void); @@ -58,8 +61,7 @@ ASN1_TIME *); int OCSP_basic_add1_nonce(OCSP_BASICRESP *, unsigned char *, int); int OCSP_basic_add1_cert(OCSP_BASICRESP *, X509 *); -int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *, int, void *, int, - unsigned long); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *, X509_EXTENSION *, int); int OCSP_basic_sign(OCSP_BASICRESP *, X509 *, EVP_PKEY *, const EVP_MD *, Cryptography_STACK_OF_X509 *, unsigned long); OCSP_RESPONSE *OCSP_response_create(int, OCSP_BASICRESP *); @@ -68,7 +70,7 @@ OCSP_REQUEST *OCSP_REQUEST_new(void); void OCSP_REQUEST_free(OCSP_REQUEST *); int OCSP_request_add1_nonce(OCSP_REQUEST *, unsigned char *, int); -int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *, int, void *, int, unsigned long); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *, X509_EXTENSION *, int); int OCSP_id_get0_info(ASN1_OCTET_STRING **, ASN1_OBJECT **, ASN1_OCTET_STRING **, ASN1_INTEGER **, OCSP_CERTID *); OCSP_REQUEST *d2i_OCSP_REQUEST_bio(BIO *, OCSP_REQUEST **); From 55c33109b92b0e8ec38e4d19f3f2c6c203a0694e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 7 Oct 2018 03:37:13 +0800 Subject: [PATCH 379/988] consolidate the duplicate extension check (#4483) --- src/cryptography/x509/base.py | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 0b353008d025..a3b334a149c4 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -20,6 +20,13 @@ _UNIX_EPOCH = datetime.datetime(1970, 1, 1) +def _reject_duplicate_extension(extension, extensions): + # This is quadratic in the number of extensions + for e in extensions: + if e.oid == extension.oid: + raise ValueError('This extension has already been set.') + + def _convert_to_naive_utc_time(time): """Normalizes a datetime to a naive datetime in UTC. @@ -406,11 +413,8 @@ def add_extension(self, extension, critical): raise TypeError("extension must be an ExtensionType") extension = Extension(extension.oid, critical, extension) + _reject_duplicate_extension(extension, self._extensions) - # TODO: This is quadratic in the number of extensions - for e in self._extensions: - if e.oid == extension.oid: - raise ValueError('This extension has already been set.') return CertificateSigningRequestBuilder( self._subject_name, self._extensions + [extension] ) @@ -558,11 +562,7 @@ def add_extension(self, extension, critical): raise TypeError("extension must be an ExtensionType") extension = Extension(extension.oid, critical, extension) - - # TODO: This is quadratic in the number of extensions - for e in self._extensions: - if e.oid == extension.oid: - raise ValueError('This extension has already been set.') + _reject_duplicate_extension(extension, self._extensions) return CertificateBuilder( self._issuer_name, self._subject_name, @@ -658,11 +658,7 @@ def add_extension(self, extension, critical): raise TypeError("extension must be an ExtensionType") extension = Extension(extension.oid, critical, extension) - - # TODO: This is quadratic in the number of extensions - for e in self._extensions: - if e.oid == extension.oid: - raise ValueError('This extension has already been set.') + _reject_duplicate_extension(extension, self._extensions) return CertificateRevocationListBuilder( self._issuer_name, self._last_update, self._next_update, self._extensions + [extension], self._revoked_certificates @@ -736,11 +732,7 @@ def add_extension(self, extension, critical): raise TypeError("extension must be an ExtensionType") extension = Extension(extension.oid, critical, extension) - - # TODO: This is quadratic in the number of extensions - for e in self._extensions: - if e.oid == extension.oid: - raise ValueError('This extension has already been set.') + _reject_duplicate_extension(extension, self._extensions) return RevokedCertificateBuilder( self._serial_number, self._revocation_date, self._extensions + [extension] From b8db66811158ea2222c866173dd6c772f93c74f1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 7 Oct 2018 03:44:30 +0800 Subject: [PATCH 380/988] add OCSP basic response extension parsing (#4479) * add OCSP basic response extension parsing Just nonce for now. This does not support SINGLERESP extension parsing. * also raises on extensions for non-successful * empty commit --- docs/x509/ocsp.rst | 5 +++++ .../hazmat/backends/openssl/decode_asn1.py | 10 ++++++++++ src/cryptography/hazmat/backends/openssl/ocsp.py | 8 +++++++- src/cryptography/x509/ocsp.py | 6 ++++++ tests/x509/test_ocsp.py | 15 +++++++++++++++ 5 files changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index b20302260c01..bf0641342cc1 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -395,6 +395,11 @@ Interfaces :raises ValueError: If ``response_status`` is not :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: extensions + + :type: :class:`~cryptography.x509.Extensions` + + The extensions encoded in the response. .. class:: OCSPResponseStatus diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 803099809ea7..b13fa056b0b7 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -817,6 +817,10 @@ def _decode_nonce(backend, nonce): OCSPExtensionOID.NONCE: _decode_nonce, } +_OCSP_BASICRESP_EXTENSION_HANDLERS = { + OCSPExtensionOID.NONCE: _decode_nonce, +} + _CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), @@ -852,3 +856,9 @@ def _decode_nonce(backend, nonce): get_ext=lambda backend, x, i: backend._lib.OCSP_REQUEST_get_ext(x, i), handlers=_OCSP_REQ_EXTENSION_HANDLERS, ) + +_OCSP_BASICRESP_EXT_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.OCSP_BASICRESP_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.OCSP_BASICRESP_get_ext(x, i), + handlers=_OCSP_BASICRESP_EXTENSION_HANDLERS, +) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index f3f18cb08f57..413214e7224f 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -9,7 +9,8 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CRL_ENTRY_REASON_CODE_TO_ENUM, _OCSP_REQ_EXT_PARSER, _asn1_integer_to_int, + _CRL_ENTRY_REASON_CODE_TO_ENUM, _OCSP_BASICRESP_EXT_PARSER, + _OCSP_REQ_EXT_PARSER, _asn1_integer_to_int, _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_generalized_time, ) @@ -300,6 +301,11 @@ def hash_algorithm(self): def serial_number(self): return _serial_number(self._backend, self._cert_id) + @utils.cached_property + @_requires_successful_response + def extensions(self): + return _OCSP_BASICRESP_EXT_PARSER.parse(self._backend, self._basic) + @utils.register_interface(OCSPRequest) class _OCSPRequest(object): diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 7907bcae44e6..fbf11336177d 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -232,3 +232,9 @@ def serial_number(self): """ The serial number of the cert whose status is being checked """ + + @abc.abstractproperty + def extensions(self): + """ + The list of response extensions. Not single response extensions. + """ diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index aeaa6e6c064c..0d98ac291c5e 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -207,6 +207,7 @@ def test_load_response(self): ) assert isinstance(resp.hash_algorithm, hashes.SHA1) assert resp.serial_number == 271024907440004808294641238224534273948400 + assert len(resp.extensions) == 0 def test_load_unauthorized(self): resp = _load_data( @@ -246,6 +247,8 @@ def test_load_unauthorized(self): assert resp.hash_algorithm with pytest.raises(ValueError): assert resp.serial_number + with pytest.raises(ValueError): + assert resp.extensions def test_load_revoked(self): resp = _load_data( @@ -283,3 +286,15 @@ def test_load_revoked_reason(self): ocsp.load_der_ocsp_response, ) assert resp.revocation_reason is x509.ReasonFlags.superseded + + def test_response_extensions(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-revoked-reason.der"), + ocsp.load_der_ocsp_response, + ) + assert len(resp.extensions) == 1 + ext = resp.extensions[0] + assert ext.critical is False + assert ext.value == x509.OCSPNonce( + b'\x04\x105\x957\x9fa\x03\x83\x87\x89rW\x8f\xae\x99\xf7"' + ) From ff7e3971d8d1106a4377f6c8d436c4005c883066 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 6 Oct 2018 21:35:12 -0400 Subject: [PATCH 381/988] Cleanup _encode_asn1_str_gc: don't require the length as an argument (#4484) * Cleanup _encode_asn1_str_gc: don't require the length as an argument * Apply the same cleanup to _encode_asn1_str --- .../hazmat/backends/openssl/backend.py | 8 +++----- .../hazmat/backends/openssl/encode_asn1.py | 18 ++++++++---------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index f374a8e388ee..8118cad0b07c 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -961,17 +961,15 @@ def _create_raw_x509_extension(self, extension, value): def _create_x509_extension(self, handlers, extension): if isinstance(extension.value, x509.UnrecognizedExtension): - value = _encode_asn1_str_gc( - self, extension.value.value, len(extension.value.value) - ) + value = _encode_asn1_str_gc(self, extension.value.value) return self._create_raw_x509_extension(extension, value) elif isinstance(extension.value, x509.TLSFeature): asn1 = _Integers([x.value for x in extension.value]).dump() - value = _encode_asn1_str_gc(self, asn1, len(asn1)) + value = _encode_asn1_str_gc(self, asn1) return self._create_raw_x509_extension(extension, value) elif isinstance(extension.value, x509.PrecertPoison): asn1 = asn1crypto.core.Null().dump() - value = _encode_asn1_str_gc(self, asn1, len(asn1)) + value = _encode_asn1_str_gc(self, asn1) return self._create_raw_x509_extension(extension, value) else: try: diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 896ea055f0e6..91852dff63fb 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -44,12 +44,12 @@ def _encode_asn1_int_gc(backend, x): return i -def _encode_asn1_str(backend, data, length): +def _encode_asn1_str(backend, data): """ Create an ASN1_OCTET_STRING from a Python byte string. """ s = backend._lib.ASN1_OCTET_STRING_new() - res = backend._lib.ASN1_OCTET_STRING_set(s, data, length) + res = backend._lib.ASN1_OCTET_STRING_set(s, data, len(data)) backend.openssl_assert(res == 1) return s @@ -68,8 +68,8 @@ def _encode_asn1_utf8_str(backend, string): return s -def _encode_asn1_str_gc(backend, data, length): - s = _encode_asn1_str(backend, data, length) +def _encode_asn1_str_gc(backend, data): + s = _encode_asn1_str(backend, data) s = backend._ffi.gc(s, backend._lib.ASN1_OCTET_STRING_free) return s @@ -184,7 +184,6 @@ def _encode_certificate_policies(backend, certificate_policies): pqi.d.cpsuri = _encode_asn1_str( backend, qualifier.encode("ascii"), - len(qualifier.encode("ascii")) ) else: assert isinstance(qualifier, x509.UserNotice) @@ -289,7 +288,6 @@ def _encode_authority_key_identifier(backend, authority_keyid): akid.keyid = _encode_asn1_str( backend, authority_keyid.key_identifier, - len(authority_keyid.key_identifier) ) if authority_keyid.authority_cert_issuer is not None: @@ -359,7 +357,7 @@ def _encode_alt_name(backend, san): def _encode_subject_key_identifier(backend, ski): - return _encode_asn1_str_gc(backend, ski.digest, len(ski.digest)) + return _encode_asn1_str_gc(backend, ski.digest) def _encode_general_name(backend, name): @@ -407,7 +405,7 @@ def _encode_general_name(backend, name): ) else: packed = name.value.packed - ipaddr = _encode_asn1_str(backend, packed, len(packed)) + ipaddr = _encode_asn1_str(backend, packed) gn.type = backend._lib.GEN_IPADD gn.d.iPAddress = ipaddr elif isinstance(name, x509.OtherName): @@ -439,7 +437,7 @@ def _encode_general_name(backend, name): # ia5strings are supposed to be ITU T.50 but to allow round-tripping # of broken certs that encode utf8 we'll encode utf8 here too. data = name.value.encode("utf8") - asn1_str = _encode_asn1_str(backend, data, len(data)) + asn1_str = _encode_asn1_str(backend, data) gn.type = backend._lib.GEN_EMAIL gn.d.rfc822Name = asn1_str elif isinstance(name, x509.UniformResourceIdentifier): @@ -448,7 +446,7 @@ def _encode_general_name(backend, name): # ia5strings are supposed to be ITU T.50 but to allow round-tripping # of broken certs that encode utf8 we'll encode utf8 here too. data = name.value.encode("utf8") - asn1_str = _encode_asn1_str(backend, data, len(data)) + asn1_str = _encode_asn1_str(backend, data) gn.type = backend._lib.GEN_URI gn.d.uniformResourceIdentifier = asn1_str else: From 0c07580a216d4b75bfdca22254803cf48c602079 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 7 Oct 2018 10:10:09 +0800 Subject: [PATCH 382/988] support extensions in the OCSP request builder (#4481) * support extensions in the OCSP request builder * cover a missed branch * refactor to use new func * review feedback --- docs/x509/ocsp.rst | 10 ++++++ .../hazmat/backends/openssl/backend.py | 8 +++++ .../hazmat/backends/openssl/encode_asn1.py | 12 ++++++- src/cryptography/x509/ocsp.py | 23 ++++++++++--- tests/hazmat/backends/test_openssl_memleak.py | 21 ++++++++++++ tests/x509/test_ocsp.py | 32 +++++++++++++++++++ 6 files changed, 100 insertions(+), 6 deletions(-) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index bf0641342cc1..528502a7d929 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -133,6 +133,16 @@ Creating Requests :class:`~cryptography.hazmat.primitives.hashes.SHA384`, and :class:`~cryptography.hazmat.primitives.hashes.SHA512` are allowed. + .. method:: add_extension(extension, critical) + + Adds an extension to the request. + + :param extension: An extension conforming to the + :class:`~cryptography.x509.ExtensionType` interface. + + :param critical: Set to ``True`` if the extension must be understood and + handled. + .. method:: build() :returns: A new :class:`~cryptography.x509.ocsp.OCSPRequest`. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 8118cad0b07c..5d0a4446efcb 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -38,6 +38,7 @@ from cryptography.hazmat.backends.openssl.encode_asn1 import ( _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, _CRL_EXTENSION_ENCODE_HANDLERS, _EXTENSION_ENCODE_HANDLERS, + _OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS, _encode_asn1_int_gc, _encode_asn1_str_gc, _encode_name_gc, _txt2obj_gc, ) from cryptography.hazmat.backends.openssl.hashes import _HashContext @@ -1465,6 +1466,13 @@ def create_ocsp_request(self, builder): self.openssl_assert(certid != self._ffi.NULL) onereq = self._lib.OCSP_request_add0_id(ocsp_req, certid) self.openssl_assert(onereq != self._ffi.NULL) + self._create_x509_extensions( + extensions=builder._extensions, + handlers=_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS, + x509_obj=ocsp_req, + add_func=self._lib.OCSP_REQUEST_add_ext, + gc=True, + ) return _OCSPRequest(self, ocsp_req) def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve): diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 91852dff63fb..c8b41a81f20a 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -15,7 +15,9 @@ _DISTPOINT_TYPE_RELATIVENAME ) from cryptography.x509.name import _ASN1Type -from cryptography.x509.oid import CRLEntryExtensionOID, ExtensionOID +from cryptography.x509.oid import ( + CRLEntryExtensionOID, ExtensionOID, OCSPExtensionOID, +) def _encode_asn1_int(backend, x): @@ -569,6 +571,10 @@ def _encode_general_subtree(backend, subtrees): return general_subtrees +def _encode_nonce(backend, nonce): + return _encode_asn1_str_gc(backend, nonce.nonce) + + _EXTENSION_ENCODE_HANDLERS = { ExtensionOID.BASIC_CONSTRAINTS: _encode_basic_constraints, ExtensionOID.SUBJECT_KEY_IDENTIFIER: _encode_subject_key_identifier, @@ -604,3 +610,7 @@ def _encode_general_subtree(backend, subtrees): CRLEntryExtensionOID.CRL_REASON: _encode_crl_reason, CRLEntryExtensionOID.INVALIDITY_DATE: _encode_invalidity_date, } + +_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS = { + OCSPExtensionOID.NONCE: _encode_nonce, +} diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index fbf11336177d..c89f12ce9470 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -9,8 +9,9 @@ import six +from cryptography import x509 from cryptography.hazmat.primitives import hashes -from cryptography.x509 import Certificate +from cryptography.x509.base import _reject_duplicate_extension _OIDS_TO_HASH = { @@ -54,8 +55,9 @@ def load_der_ocsp_response(data): class OCSPRequestBuilder(object): - def __init__(self, request=None): + def __init__(self, request=None, extensions=[]): self._request = request + self._extensions = extensions def add_certificate(self, cert, issuer, algorithm): if self._request is not None: @@ -70,12 +72,23 @@ def add_certificate(self, cert, issuer, algorithm): "Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512" ) if ( - not isinstance(cert, Certificate) or - not isinstance(issuer, Certificate) + not isinstance(cert, x509.Certificate) or + not isinstance(issuer, x509.Certificate) ): raise TypeError("cert and issuer must be a Certificate") - return OCSPRequestBuilder((cert, issuer, algorithm)) + return OCSPRequestBuilder((cert, issuer, algorithm), self._extensions) + + def add_extension(self, extension, critical): + if not isinstance(extension, x509.ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = x509.Extension(extension.oid, critical, extension) + _reject_duplicate_extension(extension, self._extensions) + + return OCSPRequestBuilder( + self._request, self._extensions + [extension] + ) def build(self): from cryptography.hazmat.backends.openssl.backend import backend diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 34ad11ba41a0..483387af1f70 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -286,3 +286,24 @@ def func(): private_key = x25519.X25519PrivateKey.generate() private_key.public_key() """)) + + def test_create_ocsp_request(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives import hashes + from cryptography.x509 import ocsp + import cryptography_vectors + + path = "x509/PKITS_data/certs/ValidcRLIssuerTest28EE.crt" + with cryptography_vectors.open_vector_file(path, "rb") as f: + cert = x509.load_der_x509_certificate( + f.read(), backend + ) + builder = ocsp.OCSPRequestBuilder() + builder = builder.add_certificate( + cert, cert, hashes.SHA1() + ).add_extension(x509.OCSPNonce(b"0000"), False) + req = builder.build() + """)) diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 0d98ac291c5e..d680e07fa6c5 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -129,6 +129,17 @@ def test_create_ocsp_request_invalid_alg(self): with pytest.raises(ValueError): builder.add_certificate(cert, issuer, hashes.MD5()) + def test_add_extension_twice(self): + builder = ocsp.OCSPRequestBuilder() + builder = builder.add_extension(x509.OCSPNonce(b"123"), False) + with pytest.raises(ValueError): + builder.add_extension(x509.OCSPNonce(b"123"), False) + + def test_add_invalid_extension(self): + builder = ocsp.OCSPRequestBuilder() + with pytest.raises(TypeError): + builder.add_extension("notanext", False) + def test_create_ocsp_request_invalid_cert(self): cert, issuer = _cert_and_issuer() builder = ocsp.OCSPRequestBuilder() @@ -149,6 +160,27 @@ def test_create_ocsp_request(self): b"/NNGCDS7zkZ/oHxb8+IIy1kCAj8g" ) + @pytest.mark.parametrize( + ("ext", "critical"), + [ + [x509.OCSPNonce(b"0000"), False], + [x509.OCSPNonce(b"\x00\x01\x02"), True], + ] + ) + def test_create_ocsp_request_with_extension(self, ext, critical): + cert, issuer = _cert_and_issuer() + builder = ocsp.OCSPRequestBuilder() + builder = builder.add_certificate( + cert, issuer, hashes.SHA1() + ).add_extension( + ext, critical + ) + req = builder.build() + assert len(req.extensions) == 1 + assert req.extensions[0].value == ext + assert req.extensions[0].oid == ext.oid + assert req.extensions[0].critical is critical + class TestOCSPResponse(object): def test_bad_response(self): From 788b859efd679b5df90475b32eeccf593d7eb38e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 7 Oct 2018 11:07:14 +0800 Subject: [PATCH 383/988] OCSP response serialization (#4482) * support OCSP response serialization * empty commit, good times --- docs/x509/ocsp.rst | 8 ++++++++ .../hazmat/backends/openssl/ocsp.py | 13 +++++++++++++ tests/x509/test_ocsp.py | 19 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 528502a7d929..499e7a912d3e 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -411,6 +411,14 @@ Interfaces The extensions encoded in the response. + .. method:: public_bytes(encoding) + + :param encoding: The encoding to use. Only + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER` + is supported. + + :return bytes: The serialized OCSP response. + .. class:: OCSPResponseStatus .. versionadded:: 2.4 diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 413214e7224f..cd3650ae4ffd 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -306,6 +306,19 @@ def serial_number(self): def extensions(self): return _OCSP_BASICRESP_EXT_PARSER.parse(self._backend, self._basic) + def public_bytes(self, encoding): + if encoding is not serialization.Encoding.DER: + raise ValueError( + "The only allowed encoding value is Encoding.DER" + ) + + bio = self._backend._create_mem_bio_gc() + res = self._backend._lib.i2d_OCSP_RESPONSE_bio( + bio, self._ocsp_response + ) + self._backend.openssl_assert(res > 0) + return self._backend._read_mem_bio(bio) + @utils.register_interface(OCSPRequest) class _OCSPRequest(object): diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index d680e07fa6c5..0d44b6daf37b 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -330,3 +330,22 @@ def test_response_extensions(self): assert ext.value == x509.OCSPNonce( b'\x04\x105\x957\x9fa\x03\x83\x87\x89rW\x8f\xae\x99\xf7"' ) + + def test_serialize_reponse(self): + resp_bytes = load_vectors_from_file( + filename=os.path.join("x509", "ocsp", "resp-revoked.der"), + loader=lambda data: data.read(), + mode="rb" + ) + resp = ocsp.load_der_ocsp_response(resp_bytes) + assert resp.public_bytes(serialization.Encoding.DER) == resp_bytes + + def test_invalid_serialize_encoding(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-revoked.der"), + ocsp.load_der_ocsp_response, + ) + with pytest.raises(ValueError): + resp.public_bytes("invalid") + with pytest.raises(ValueError): + resp.public_bytes(serialization.Encoding.PEM) From 338b0b073d0bac8451e9d180edcfbba81888d010 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 8 Oct 2018 21:24:33 -0400 Subject: [PATCH 384/988] Fixes #4459 -- switch all our builds to xenial on travis (#4486) * Fixes #4459 -- switch all our builds to xenial on travis * Attempt to fix tests * Try disabling sudo? * typo * try this? * shellcheck --- .travis.yml | 26 ++++++++++++++------------ .travis/install.sh | 11 ++++++++--- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index de78953f4e56..51a51f6ec78d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ -sudo: false -dist: trusty +sudo: true +dist: xenial language: python @@ -29,14 +29,18 @@ matrix: env: TOXENV=py36 - python: 3.7 env: TOXENV=py37 - dist: xenial - sudo: true - python: pypy-5.3 env: TOXENV=pypy-nocoverage + # PyPy 5.3 isn't available for xenial + dist: trusty - python: pypy2.7-5.10.0 env: TOXENV=pypy-nocoverage - python: pypy3.5-5.10.1 env: TOXENV=pypy3-nocoverage + - python: 2.7 + env: TOXENV=py27 OPENSSL=1.0.1u + - python: 3.7 + env: TOXENV=py37 OPENSSL=1.0.1u - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0i - python: 3.5 @@ -45,20 +49,12 @@ matrix: env: TOXENV=py27 OPENSSL=1.1.1 - python: 3.7 env: TOXENV=py37 OPENSSL=1.1.1 - dist: xenial - sudo: true - python: 3.7 env: TOXENV=py37 LIBRESSL=2.4.5 - dist: xenial - sudo: true - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - dist: xenial - sudo: true - python: 3.7 env: TOXENV=py37 LIBRESSL=2.7.4 - dist: xenial - sudo: true - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0i addons: @@ -80,12 +76,18 @@ matrix: env: DOWNSTREAM=aws-encryption-sdk - python: 2.7 env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0i + # dynamodb-encryption-sdk tests fail on xenial for whatever reason + dist: trusty + sudo: false - python: 2.7 env: DOWNSTREAM=certbot OPENSSL=1.1.0i - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 env: DOWNSTREAM=urllib3 + # urllib3 tests fail on xenial for whatever reason + dist: trusty + sudo: false install: - ./.travis/install.sh diff --git a/.travis/install.sh b/.travis/install.sh index 0aecb2bd49da..20a883121cac 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -23,9 +23,14 @@ if [ -n "${OPENSSL}" ]; then shlib_sed make depend make -j"$(nproc)" - # avoid installing the docs - # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 - make install_sw install_ssldirs + if [[ "${OPENSSL}" =~ 1.0.1 ]]; then + # OpenSSL 1.0.1 doesn't support installing without the docs. + make install + else + # avoid installing the docs + # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 + make install_sw install_ssldirs + fi popd fi elif [ -n "${LIBRESSL}" ]; then From 16f746f52a9310c3cc62b4f2b6e376aab2000a64 Mon Sep 17 00:00:00 2001 From: g_goessel Date: Wed, 10 Oct 2018 04:13:41 +0200 Subject: [PATCH 385/988] Add a tutorial explaining how to check the signature of a certificate (#4478) --- docs/x509/reference.rst | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 8330b2ac5a47..1ff23b3cbf5e 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -101,6 +101,53 @@ X.509 Reference -----END CERTIFICATE----- """.strip() + pem_issuer_public_key = b""" + -----BEGIN RSA PUBLIC KEY----- + MIICCgKCAgEAyYcqyuT6oQxpvg/VSn2Zc68wZ823D0VAJ2woramFx+2KPWB7B7Ot + tVSNRfm0OxJOU3TFAoep54Z2wgOoz0zRmeW6/7gvIuBKp2TW0qZAt3l9sgpE29iw + CsoZQlMrLKiDPzCC6Fptk+YPSST9sqwhWDKK1QvOg68DKRxTpEek1hBpC0XRsnuX + fvJJQqP39vxzpA0PsicI/wrvWX3vO8z+j9+botPerbeamoeHCsc0xgTLyIygWysB + rNskxlzC2U4Kw6mQhGghlLReo1rFsO2/hLTnvLs+Y1lQhnFeOKCx1WVXhzBIyO9B + dVVH5Cinb5wBNKvxbevRf4icdWcwtknmgKf69xj7yvFjt/vft74BB1Y5ltLYFmEb + 0JBxm5MAJfW4YnMQr0AxdjOhjHq4MN7X4ZzwEpJaYJdRmvMsMGN88cyjYPxsaOG+ + dZ/E9MmTjh0gnTjyD4gmsvR/gtTR/XFJ2wkbnnL1RyxNi6j2UW8C7tpNv0TIuArx + 3SHGPZN0WsaKTxZPb0L/ob1WBT0mhiq1GzB431cXgbxyh8EdKk+xSptA3V+ca2V2 + NuXlJIJaOoPMj/qjDW4I/peKGnk9tLknJ0hpRzz11j77pJsV0dGoGKVHIR2oZqT5 + 0ZJJb5DXNbiTnspKLNmBt0YlNiXtlCIPxVUkhL141FuCLc8h6FjD6E0CAwEAAQ== + -----END RSA PUBLIC KEY----- + """.strip() + + pem_data_to_check = b""" + -----BEGIN CERTIFICATE----- + MIIErjCCApagAwIBAgIUUrUZsZrrBmRD2hvRuspp+lPsZXcwDQYJKoZIhvcNAQEN + BQAwETEPMA0GA1UEAwwGSXNzdWVyMB4XDTE4MTAwODEzNDg1NFoXDTE4MTAxODEz + NDg1NFowETEPMA0GA1UEAwwGSXNzdWVyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A + MIICCgKCAgEAyYcqyuT6oQxpvg/VSn2Zc68wZ823D0VAJ2woramFx+2KPWB7B7Ot + tVSNRfm0OxJOU3TFAoep54Z2wgOoz0zRmeW6/7gvIuBKp2TW0qZAt3l9sgpE29iw + CsoZQlMrLKiDPzCC6Fptk+YPSST9sqwhWDKK1QvOg68DKRxTpEek1hBpC0XRsnuX + fvJJQqP39vxzpA0PsicI/wrvWX3vO8z+j9+botPerbeamoeHCsc0xgTLyIygWysB + rNskxlzC2U4Kw6mQhGghlLReo1rFsO2/hLTnvLs+Y1lQhnFeOKCx1WVXhzBIyO9B + dVVH5Cinb5wBNKvxbevRf4icdWcwtknmgKf69xj7yvFjt/vft74BB1Y5ltLYFmEb + 0JBxm5MAJfW4YnMQr0AxdjOhjHq4MN7X4ZzwEpJaYJdRmvMsMGN88cyjYPxsaOG+ + dZ/E9MmTjh0gnTjyD4gmsvR/gtTR/XFJ2wkbnnL1RyxNi6j2UW8C7tpNv0TIuArx + 3SHGPZN0WsaKTxZPb0L/ob1WBT0mhiq1GzB431cXgbxyh8EdKk+xSptA3V+ca2V2 + NuXlJIJaOoPMj/qjDW4I/peKGnk9tLknJ0hpRzz11j77pJsV0dGoGKVHIR2oZqT5 + 0ZJJb5DXNbiTnspKLNmBt0YlNiXtlCIPxVUkhL141FuCLc8h6FjD6E0CAwEAATAN + BgkqhkiG9w0BAQ0FAAOCAgEAVFzNKhEpkH8V8l0NEBAZHNi1e+lcg35fZZ9plqcw + Pvk+6M7LW0KD0QWYQWm/dJme4DFsM7lh5u4/m+H4yS7/RP9pads9YwBudchvGR1c + S4CCrRAmO8/A0vpQJcEwdS7fdYShBsqMrZ2TvzceVn2dvQbxB6pLkK7KIbDPVJA2 + HXFFXe2npHmdc80iTz2ShbdVSvyPvk6vc6NFFCg6lSQFuif3vV0+aYqi6DXv4h92 + 9qAdES8ZLDfDulxyajyPbtF35f2Of99CumP5UzG4RQbvtI8gShuK1YFYe2sWJFE0 + MgSsqGCbl5mcrWxm9YxysRKMZ+Hc4tnkvfmG6GsKtp8u/5pG11XgxXaQl4fZ7JNa + QFuD5gEXkEC1mCnhWlnguJgjQlpKadMOORmVTqG9dNQ6GEsha+XWpinm5L9fEZuA + F88nNyubKLwEl68N7WWWKQlIl4q8Pe5FEp1pd9rLjOW4gzgYBccIfBK3oMC7uFJg + a/9GeOKPiq90UMrCI+CAsIbzuPOaAp3g69JonuDwcs4cu8ui1udxs9q7ox3qSWGZ + G1U/hmwvZH9kfIv5BKIzNLy4oxXPDJ7MZIBsxVxaNv8KUQ/JLtpVJa3oYqEx18+V + JNr8Pr3y61X8pLmJnaCu+ixshiy2gjxXxDFBVEEt1G9JHrSs3R+yvcHxCrM3+ian + Nh4= + -----END CERTIFICATE----- + """.strip() + Loading Certificates ~~~~~~~~~~~~~~~~~~~~ @@ -415,6 +462,27 @@ X.509 Certificate Object certificate validation is a complex problem that involves much more than just signature checks. + An example on how to check if a certificate signature is correct with a method + on the public key (this does not mean that the cert should be trusted): + + .. doctest:: + + >>> from cryptography.hazmat.primitives.serialization import load_pem_public_key + >>> from cryptography.hazmat.primitives.asymmetric import padding + >>> issuer_public_key = load_pem_public_key(pem_issuer_public_key, default_backend()) + >>> cert_to_check = x509.load_pem_x509_certificate(pem_data_to_check, default_backend()) + >>> issuer_public_key.verify( + ... cert_to_check.signature, + ... cert_to_check.tbs_certificate_bytes, + ... #Depends on the algorithm used to create the certificate + ... padding.PKCS1v15(), + ... cert_to_check.signature_hash_algorithm, + ... ) + + An + :class:`~cryptography.exceptions.InvalidSignature` + exception will be raised if the signature fails to verify. + .. method:: public_bytes(encoding) .. versionadded:: 1.0 From 2a3c691975aafd7e80b8ba557c6631b2df867345 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 9 Oct 2018 22:32:01 -0400 Subject: [PATCH 386/988] Use our cryptography-specific warning class (#4493) --- src/cryptography/hazmat/bindings/openssl/binding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index d52619dc5a0c..0824ea88c994 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -160,7 +160,7 @@ def _verify_openssl_version(lib): "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " "project, please upgrade. A future version of cryptography will " "drop support for it.", - DeprecationWarning + utils.CryptographyDeprecationWarning ) From 6460228b4651de8cdabf30f25335b9693e306c1f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 9 Oct 2018 23:03:55 -0400 Subject: [PATCH 387/988] Style nits for docs (#4494) --- docs/x509/reference.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 1ff23b3cbf5e..ef734f88fe90 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -472,11 +472,11 @@ X.509 Certificate Object >>> issuer_public_key = load_pem_public_key(pem_issuer_public_key, default_backend()) >>> cert_to_check = x509.load_pem_x509_certificate(pem_data_to_check, default_backend()) >>> issuer_public_key.verify( - ... cert_to_check.signature, - ... cert_to_check.tbs_certificate_bytes, - ... #Depends on the algorithm used to create the certificate - ... padding.PKCS1v15(), - ... cert_to_check.signature_hash_algorithm, + ... cert_to_check.signature, + ... cert_to_check.tbs_certificate_bytes, + ... # Depends on the algorithm used to create the certificate + ... padding.PKCS1v15(), + ... cert_to_check.signature_hash_algorithm, ... ) An From 838bc4a95cd2d027fc5c165c07e8ac1039dd7192 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 10 Oct 2018 12:02:55 +0800 Subject: [PATCH 388/988] simplify some language (#4495) * simplify some language * Update reference.rst * wrap * remove trailing whitespace the github web editor is bad and should feel bad --- docs/x509/reference.rst | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index ef734f88fe90..07a692a8ac23 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -462,8 +462,13 @@ X.509 Certificate Object certificate validation is a complex problem that involves much more than just signature checks. - An example on how to check if a certificate signature is correct with a method - on the public key (this does not mean that the cert should be trusted): + To validate the signature on a certificate you can do the following. + Note: This only verifies that the certificate was signed with the + private key associated with the public key provided and does not + perform any of the other checks needed for secure certificate + validation. Additionally, this example will only work for RSA public + keys with ``PKCS1v15`` signatures, and so it can't be used for general + purpose signature verification. .. doctest:: From ef18e61594572e7f1f479d66c68dfbdfd9b49859 Mon Sep 17 00:00:00 2001 From: Kai Engert Date: Wed, 10 Oct 2018 17:23:54 +0200 Subject: [PATCH 389/988] Add definitions that help with hostname checking (#4492) * Add definitions for SSL_get0_param and X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS * remove unnecessary parameter name * Add version conditionals and more flags * extend cryptography_has_102_verification_params * X509_CHECK_FLAG_NEVER_CHECK_SUBJECT only available with openssl 1.1.0+ * add missing declaration --- src/_cffi_src/openssl/ssl.py | 9 ++++++ src/_cffi_src/openssl/x509_vfy.py | 32 +++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 15 +++++++++ 3 files changed, 56 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 2e32b8f35af9..f9481af190fb 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -185,6 +185,9 @@ X509 *SSL_get_peer_certificate(const SSL *); int SSL_get_ex_data_X509_STORE_CTX_idx(void); +/* Added in 1.0.2 */ +X509_VERIFY_PARAM *SSL_get0_param(SSL *); + int SSL_use_certificate(SSL *, X509 *); int SSL_use_certificate_ASN1(SSL *, const unsigned char *, int); int SSL_use_certificate_file(SSL *, const char *, int); @@ -620,6 +623,12 @@ static const long Cryptography_HAS_SSL_SET_SSL_CTX = 1; static const long Cryptography_HAS_NEXTPROTONEG = 1; +/* SSL_get0_param was added in OpenSSL 1.0.2. */ +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +X509_VERIFY_PARAM *(*SSL_get0_param)(SSL *) = NULL; +#else +#endif + /* ALPN was added in OpenSSL 1.0.2. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL int (*SSL_CTX_set_alpn_protos)(SSL_CTX *, diff --git a/src/_cffi_src/openssl/x509_vfy.py b/src/_cffi_src/openssl/x509_vfy.py index 618b5c215b29..42da3b1e1132 100644 --- a/src/_cffi_src/openssl/x509_vfy.py +++ b/src/_cffi_src/openssl/x509_vfy.py @@ -21,6 +21,7 @@ TYPES = """ static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES; static const long Cryptography_HAS_102_VERIFICATION_PARAMS; +static const long Cryptography_HAS_110_VERIFICATION_PARAMS; static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST; static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN; static const long Cryptography_HAS_X509_STORE_CTX_GET_ISSUER; @@ -128,6 +129,13 @@ static const long X509_LU_X509; static const long X509_LU_CRL; + +static const long X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT; +static const long X509_CHECK_FLAG_NO_WILDCARDS; +static const long X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS; +static const long X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS; +static const long X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS; +static const long X509_CHECK_FLAG_NEVER_CHECK_SUBJECT; """ FUNCTIONS = """ @@ -239,6 +247,21 @@ #ifndef X509_V_ERR_IP_ADDRESS_MISMATCH static const long X509_V_ERR_IP_ADDRESS_MISMATCH = 0; #endif +#ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT +static const long X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT = 0; +#endif +#ifndef X509_CHECK_FLAG_NO_WILDCARDS +static const long X509_CHECK_FLAG_NO_WILDCARDS = 0; +#endif +#ifndef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS +static const long X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS = 0; +#endif +#ifndef X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS +static const long X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS = 0; +#endif +#ifndef X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS +static const long X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS = 0; +#endif /* X509_V_FLAG_TRUSTED_FIRST is also new in 1.0.2+, but it is added separately below because it shows up in some earlier 3rd party OpenSSL packages. */ @@ -259,6 +282,15 @@ #endif #endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 || CRYPTOGRAPHY_IS_LIBRESSL +static const long Cryptography_HAS_110_VERIFICATION_PARAMS = 0; +#ifndef X509_CHECK_FLAG_NEVER_CHECK_SUBJECT +static const long X509_CHECK_FLAG_NEVER_CHECK_SUBJECT = 0; +#endif +#else +static const long Cryptography_HAS_110_VERIFICATION_PARAMS = 1; +#endif + /* OpenSSL 1.0.2+ or Solaris's backport */ #ifdef X509_V_FLAG_PARTIAL_CHAIN static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN = 1; diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 4170f3a1a2ad..19acdaefc88d 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -98,6 +98,18 @@ def cryptography_has_102_verification_params(): "X509_VERIFY_PARAM_set1_ip", "X509_VERIFY_PARAM_set1_ip_asc", "X509_VERIFY_PARAM_set_hostflags", + "SSL_get0_param", + "X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT", + "X509_CHECK_FLAG_NO_WILDCARDS", + "X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS", + "X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS", + "X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS" + ] + + +def cryptography_has_110_verification_params(): + return [ + "X509_CHECK_FLAG_NEVER_CHECK_SUBJECT" ] @@ -301,6 +313,9 @@ def cryptography_has_cipher_details(): "Cryptography_HAS_102_VERIFICATION_PARAMS": ( cryptography_has_102_verification_params ), + "Cryptography_HAS_110_VERIFICATION_PARAMS": ( + cryptography_has_110_verification_params + ), "Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST": ( cryptography_has_x509_v_flag_trusted_first ), From 8a35a20045aff90c92f82b50b0f55eb9fb3f8d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Almeida?= Date: Thu, 18 Oct 2018 23:20:03 -0300 Subject: [PATCH 390/988] Enhance info on pip requirements intallation (#4499) * Enhance info on pip requirements intallation * Remove virtualenv files from remote * Fix "pacakges" typo * Removing trailling whitespaces --- docs/development/getting-started.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index 953ae9597790..e01ee277acdb 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -19,6 +19,10 @@ mode. For example: $ pip install --requirement dev-requirements.txt $ pip install --editable . +Make sure that ``pip install --requirement ...`` has installed the Python +package ``vectors/`` and packages on ``tests/`` . If it didn't, you may +install them manually by using ``pip`` on each directory. + You will also need to install ``enchant`` using your system's package manager to check spelling in the documentation. From d2df398bcdcfa1e5aae0ca0291251aa66a751e55 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 19 Oct 2018 21:29:42 +0800 Subject: [PATCH 391/988] blacklist some pytests (#4502) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5c8c58435242..24c3b97a4fa6 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ ) test_requirements = [ - "pytest>=3.6.0", + "pytest>=3.6.0,!=3.9.0,!=3.9.1", "pretend", "iso8601", "pytz", From 36fca964f36ee14b508efc182f074e6946e7cb83 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 19 Oct 2018 20:06:19 -0400 Subject: [PATCH 392/988] Add testing with LibreSSL 2.8.2 (#4501) * Add testing with LibreSSL 2.8.2 * Drop librsesl 2.4.5 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 51a51f6ec78d..faa3527b642b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,12 +49,12 @@ matrix: env: TOXENV=py27 OPENSSL=1.1.1 - python: 3.7 env: TOXENV=py37 OPENSSL=1.1.1 - - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.4.5 - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 env: TOXENV=py37 LIBRESSL=2.7.4 + - python: 3.7 + env: TOXENV=py37 LIBRESSL=2.8.2 - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0i addons: From c07b5e719765b9ea03df8fde504fc38d0c777d6e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 19 Oct 2018 20:51:56 -0400 Subject: [PATCH 393/988] Remove branch for old libressl versions that we don't support any more (#4505) --- src/_cffi_src/openssl/ec.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/_cffi_src/openssl/ec.py b/src/_cffi_src/openssl/ec.py index 45cbe3c0c7b3..66bcadc2372d 100644 --- a/src/_cffi_src/openssl/ec.py +++ b/src/_cffi_src/openssl/ec.py @@ -126,8 +126,7 @@ static const long Cryptography_HAS_EC2M = 1; #endif -#if (!CRYPTOGRAPHY_IS_LIBRESSL && CRYPTOGRAPHY_OPENSSL_LESS_THAN_102) || \ - (CRYPTOGRAPHY_IS_LIBRESSL && LIBRESSL_VERSION_NUMBER < 0x20020002L) +#if (!CRYPTOGRAPHY_IS_LIBRESSL && CRYPTOGRAPHY_OPENSSL_LESS_THAN_102) static const long Cryptography_HAS_EC_1_0_2 = 0; const char *(*EC_curve_nid2nist)(int) = NULL; #else From 555524140b2faac25564ca828d810ece4e22f1cc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 20 Oct 2018 09:02:19 +0800 Subject: [PATCH 394/988] add note about dropping LibreSSL 2.4.x support (#4506) --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8c08fcbc57f2..c8952c2791b2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL 2.4.x. * Deprecated OpenSSL 1.0.1 support. OpenSSL 1.0.1 is no longer supported by the OpenSSL project. At this time there is no time table for dropping support, however we strongly encourage all users to upgrade or install From a476453299c4a55014a0560d9f913f35d9b248fe Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 22 Oct 2018 19:56:16 -0400 Subject: [PATCH 395/988] Fixes #4500 -- use O_CLOEXEC when opening the /dev/urandom file descriptor (#4507) * Fixes #4500 -- use O_CLOEXEC when opening the /dev/urandom file descriptor * Unused variable --- src/_cffi_src/openssl/src/osrandom_engine.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 947c79aac0e3..24dedda481e1 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -92,7 +92,7 @@ static struct { /* return -1 on error */ static int dev_urandom_fd(void) { - int fd, n, flags; + int fd, n; struct stat st; /* Check that fd still points to the correct device */ @@ -106,20 +106,13 @@ static int dev_urandom_fd(void) { } } if (urandom_cache.fd < 0) { - fd = open("/dev/urandom", O_RDONLY); + fd = open("/dev/urandom", O_RDONLY | O_CLOEXEC); if (fd < 0) { goto error; } if (fstat(fd, &st)) { goto error; } - /* set CLOEXEC flag */ - flags = fcntl(fd, F_GETFD); - if (flags == -1) { - goto error; - } else if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { - goto error; - } /* Another thread initialized the fd */ if (urandom_cache.fd >= 0) { do { From 71e4251d83a3a954dbcc83cc4ccf6745608a54b9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 23 Oct 2018 19:34:01 +0800 Subject: [PATCH 396/988] blacklist latest hypothesis and pytest (#4510) * ci is suffering again, is it the new pytest or hypothesis? * now try 3.79.2 hypothesis * it's a blacklist party --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 24c3b97a4fa6..886d932670b2 100644 --- a/setup.py +++ b/setup.py @@ -54,11 +54,11 @@ ) test_requirements = [ - "pytest>=3.6.0,!=3.9.0,!=3.9.1", + "pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2", "pretend", "iso8601", "pytz", - "hypothesis>=1.11.4", + "hypothesis>=1.11.4,!=3.79.2", ] From a9feff3d4347dd956572d4b01474d6930ddd9860 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 23 Oct 2018 19:59:55 -0400 Subject: [PATCH 397/988] Update the linkcheck ignores (#4511) * Update the linkcheck ignores * Hack? * Ok, this should work --- docs/conf.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 80ac59fc6000..66dae738feac 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -179,6 +179,9 @@ linkcheck_retries = 5 linkcheck_ignore = [ - # Certificate is issued by a Japanese CA that isn't publicly trusted - "https://www.cryptrec.go.jp", + # Returns a 404 if you're not logged in + ( + "https://ci.cryptography.io/" + "job/cryptography-support-jobs/job/openssl-release-1.1/" + ), ] From f6f2d7ebd5b4370be74e8dc267e9b76621147f29 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 23 Oct 2018 20:39:19 -0400 Subject: [PATCH 398/988] Another URL goes https! (#4512) --- docs/development/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/index.rst b/docs/development/index.rst index f9bc9eea8ab1..81befe431069 100644 --- a/docs/development/index.rst +++ b/docs/development/index.rst @@ -17,4 +17,4 @@ bug check out `what to put in your bug report`_. c-bindings .. _`GitHub`: https://github.com/pyca/cryptography -.. _`what to put in your bug report`: http://www.contribution-guide.org/#what-to-put-in-your-bug-report +.. _`what to put in your bug report`: https://www.contribution-guide.org/#what-to-put-in-your-bug-report From a9b4f86de8a0de2e846a42d9b35c39e88d621bb7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 24 Oct 2018 08:58:07 +0800 Subject: [PATCH 399/988] next_update is not a required field on OCSP responses (#4513) --- docs/development/test-vectors.rst | 2 ++ src/cryptography/hazmat/backends/openssl/ocsp.py | 6 ++++-- tests/x509/test_ocsp.py | 8 ++++++++ .../x509/ocsp/resp-revoked-no-next-update.der | Bin 0 -> 283 bytes 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-revoked-no-next-update.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index b56a4c563e66..e512a902fce1 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -427,6 +427,8 @@ X.509 OCSP Test Vectors * ``x509/ocsp/resp-revoked-reason.der`` - An OCSP response from the ``QuoVadis`` OCSP responder that contains a revoked certificate with a revocation reason. +* ``x509/ocsp/resp-revoked-no-next-update.der`` - An OCSP response that + contains a revoked certificate and no ``nextUpdate`` value. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index cd3650ae4ffd..32e26a0a290c 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -278,8 +278,10 @@ def next_update(self): self._backend._ffi.NULL, asn1_time, ) - self._backend.openssl_assert(asn1_time[0] != self._backend._ffi.NULL) - return _parse_asn1_generalized_time(self._backend, asn1_time[0]) + if asn1_time[0] != self._backend._ffi.NULL: + return _parse_asn1_generalized_time(self._backend, asn1_time[0]) + else: + return None @property @_requires_successful_response diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 0d44b6daf37b..3ee6a26eb836 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -319,6 +319,14 @@ def test_load_revoked_reason(self): ) assert resp.revocation_reason is x509.ReasonFlags.superseded + def test_load_revoked_no_next_update(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-revoked-no-next-update.der"), + ocsp.load_der_ocsp_response, + ) + assert resp.serial_number == 16160 + assert resp.next_update is None + def test_response_extensions(self): resp = _load_data( os.path.join("x509", "ocsp", "resp-revoked-reason.der"), diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-revoked-no-next-update.der b/vectors/cryptography_vectors/x509/ocsp/resp-revoked-no-next-update.der new file mode 100644 index 0000000000000000000000000000000000000000..c9bb9d6f0725f598cb9e949ff064c44389ce1213 GIT binary patch literal 283 zcmXqLVif0MWLVI|C}7aU$iv2|&Bn;e%5K2O$kO=Fpz*gs7nTgqx!N844kzxCtiC^9_9(yw7 zl>FJYB-M@?4e_A{JsuC6YTh1{)n~m6RI+~S19i*g%yJXnyB$^e#uD89?$@4-AG=?> M1a6$Lb;mye0PJvCGXMYp literal 0 HcmV?d00001 From 6345364bbd96cae93939d88c4bdfc2a3854d2f82 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 24 Oct 2018 09:21:48 +0800 Subject: [PATCH 400/988] bind a constant for an error check (#4514) I hate it when we have to do this. --- src/_cffi_src/openssl/err.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 446cd78ad43f..59751355e997 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -139,6 +139,7 @@ static const int SSL_AD_UNKNOWN_PSK_IDENTITY; static const int X509_R_CERT_ALREADY_IN_HASH_TABLE; +static const int X509_R_KEY_VALUES_MISMATCH; """ FUNCTIONS = """ From 5e5990abcc196c37594a5a9da2e9046a289c0ee4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 23 Oct 2018 21:34:44 -0400 Subject: [PATCH 401/988] Colin's website went HTTPS! (#4515) --- docs/hazmat/primitives/asymmetric/rsa.rst | 4 ++-- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index 635a46260b94..fee51153131f 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -719,10 +719,10 @@ Key interfaces .. _`RSA`: https://en.wikipedia.org/wiki/RSA_(cryptosystem) .. _`public-key`: https://en.wikipedia.org/wiki/Public-key_cryptography .. _`specific mathematical properties`: https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Key_generation -.. _`use 65537`: http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html +.. _`use 65537`: https://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html .. _`at least 2048`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf .. _`OpenPGP`: https://en.wikipedia.org/wiki/Pretty_Good_Privacy .. _`Chinese Remainder Theorem`: https://en.wikipedia.org/wiki/RSA_%28cryptosystem%29#Using_the_Chinese_remainder_algorithm .. _`security proof`: https://eprint.iacr.org/2001/062.pdf -.. _`recommended padding algorithm`: http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html +.. _`recommended padding algorithm`: https://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html .. _`proven secure`: https://cseweb.ucsd.edu/~mihir/papers/oae.pdf diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index c933d042b7d0..cd4059fb1843 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -803,7 +803,7 @@ Exceptions -.. _`described by Colin Percival`: http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html +.. _`described by Colin Percival`: https://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html .. _`recommends a 96-bit IV length`: https://csrc.nist.gov/publications/detail/sp/800-38d/final .. _`NIST SP-800-38D`: https://csrc.nist.gov/publications/detail/sp/800-38d/final .. _`Communications Security Establishment`: https://www.cse-cst.gc.ca From df57af0c07186c7bc617c4e3c3ad4ed4b2f9aeed Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 23 Oct 2018 22:52:53 -0400 Subject: [PATCH 402/988] oss-security page is https too! (#4517) --- docs/doing-a-release.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index f87a44995756..e7ee88fa0c12 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -93,7 +93,7 @@ Post-release tasks release. .. _`CVE from MITRE`: https://cveform.mitre.org/ -.. _`oss-security`: http://www.openwall.com/lists/oss-security/ +.. _`oss-security`: https://www.openwall.com/lists/oss-security/ .. _`upgrading OpenSSL issue template`: https://github.com/pyca/cryptography/issues/new?template=openssl-release.md .. _`milestone`: https://github.com/pyca/cryptography/milestones .. _`mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev From 4b840d5ed980056a286a80a2cf5a86e9b636ad88 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 24 Oct 2018 11:09:27 +0800 Subject: [PATCH 403/988] refactor set_asn1_time to take a datetime (#4516) --- .../hazmat/backends/openssl/backend.py | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 5d0a4446efcb..58cb694107e0 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -795,14 +795,12 @@ def create_x509_certificate(self, builder, private_key, algorithm): # Set the "not before" time. self._set_asn1_time( - self._lib.X509_get_notBefore(x509_cert), - calendar.timegm(builder._not_valid_before.timetuple()) + self._lib.X509_get_notBefore(x509_cert), builder._not_valid_before ) # Set the "not after" time. self._set_asn1_time( - self._lib.X509_get_notAfter(x509_cert), - calendar.timegm(builder._not_valid_after.timetuple()) + self._lib.X509_get_notAfter(x509_cert), builder._not_valid_after ) # Add extensions. @@ -837,7 +835,8 @@ def create_x509_certificate(self, builder, private_key, algorithm): return _Certificate(self, x509_cert) def _set_asn1_time(self, asn1_time, time): - res = self._lib.ASN1_TIME_set(asn1_time, time) + timestamp = calendar.timegm(time.timetuple()) + res = self._lib.ASN1_TIME_set(asn1_time, timestamp) if res == self._ffi.NULL: errors = self._consume_errors() self.openssl_assert( @@ -888,9 +887,7 @@ def create_x509_crl(self, builder, private_key, algorithm): last_update = self._lib.ASN1_TIME_new() self.openssl_assert(last_update != self._ffi.NULL) last_update = self._ffi.gc(last_update, self._lib.ASN1_TIME_free) - self._set_asn1_time( - last_update, calendar.timegm(builder._last_update.timetuple()) - ) + self._set_asn1_time(last_update, builder._last_update) res = self._lib.X509_CRL_set_lastUpdate(x509_crl, last_update) self.openssl_assert(res == 1) @@ -898,9 +895,7 @@ def create_x509_crl(self, builder, private_key, algorithm): next_update = self._lib.ASN1_TIME_new() self.openssl_assert(next_update != self._ffi.NULL) next_update = self._ffi.gc(next_update, self._lib.ASN1_TIME_free) - self._set_asn1_time( - next_update, calendar.timegm(builder._next_update.timetuple()) - ) + self._set_asn1_time(next_update, builder._next_update) res = self._lib.X509_CRL_set_nextUpdate(x509_crl, next_update) self.openssl_assert(res == 1) @@ -1004,9 +999,7 @@ def create_x509_revoked_certificate(self, builder): rev_date = self._lib.ASN1_TIME_new() self.openssl_assert(rev_date != self._ffi.NULL) rev_date = self._ffi.gc(rev_date, self._lib.ASN1_TIME_free) - self._set_asn1_time( - rev_date, calendar.timegm(builder._revocation_date.timetuple()) - ) + self._set_asn1_time(rev_date, builder._revocation_date) res = self._lib.X509_REVOKED_set_revocationDate(x509_revoked, rev_date) self.openssl_assert(res == 1) # add CRL entry extensions From 9569f5cbde11c730d78b2082bcca4d4e36ba9f23 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 23 Oct 2018 23:47:29 -0400 Subject: [PATCH 404/988] OpenPGP's website is also HTTPS! (#4518) --- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index cd4059fb1843..31f240c4eea0 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -811,5 +811,5 @@ Exceptions .. _`CRYPTREC`: https://www.cryptrec.go.jp/english/ .. _`significant patterns in the output`: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29 .. _`International Data Encryption Algorithm`: https://en.wikipedia.org/wiki/International_Data_Encryption_Algorithm -.. _`OpenPGP`: http://openpgp.org +.. _`OpenPGP`: https://www.openpgp.org/ .. _`disk encryption`: https://en.wikipedia.org/wiki/Disk_encryption_theory#XTS From 1478d0bc5c4edb1129b0823156a0e02811366b2c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 25 Oct 2018 09:40:02 +0800 Subject: [PATCH 405/988] ignore new W504 from flake8/pycodestyle (#4521) * ignore new W504 from flake8/pycodestyle * allow josepy to fail for the moment --- .travis.yml | 5 +++++ tox.ini | 1 + 2 files changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index faa3527b642b..6ed017d9b2f9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -88,6 +88,11 @@ matrix: # urllib3 tests fail on xenial for whatever reason dist: trusty sudo: false + allow_failures: + # Remove allow_failures as soon as josepy's flake8 issue is resolved + # https://github.com/certbot/josepy/pull/39 + - python: 2.7 + env: DOWNSTREAM=certbot-josepy install: - ./.travis/install.sh diff --git a/tox.ini b/tox.ini index c313e9c20e4d..ea5995e94e56 100644 --- a/tox.ini +++ b/tox.ini @@ -76,6 +76,7 @@ commands = pytest --capture=no --strict --random {posargs} [flake8] +ignore = W504 exclude = .tox,*.egg,.git,_build,.hypothesis select = E,W,F,N,I application-import-names = cryptography,cryptography_vectors,tests From dc30b8e5d272cd45d107139c68bd396c3ed9f147 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 25 Oct 2018 10:49:49 +0800 Subject: [PATCH 406/988] add _create_asn1_time (#4524) --- .../hazmat/backends/openssl/backend.py | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 58cb694107e0..11d24b12356e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -850,6 +850,13 @@ def _set_asn1_time(self, asn1_time, time): "in the future on Windows." ) + def _create_asn1_time(self, time): + asn1_time = self._lib.ASN1_TIME_new() + self.openssl_assert(asn1_time != self._ffi.NULL) + asn1_time = self._ffi.gc(asn1_time, self._lib.ASN1_TIME_free) + self._set_asn1_time(asn1_time, time) + return asn1_time + def create_x509_crl(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateRevocationListBuilder): raise TypeError('Builder type mismatch.') @@ -884,18 +891,12 @@ def create_x509_crl(self, builder, private_key, algorithm): self.openssl_assert(res == 1) # Set the last update time. - last_update = self._lib.ASN1_TIME_new() - self.openssl_assert(last_update != self._ffi.NULL) - last_update = self._ffi.gc(last_update, self._lib.ASN1_TIME_free) - self._set_asn1_time(last_update, builder._last_update) + last_update = self._create_asn1_time(builder._last_update) res = self._lib.X509_CRL_set_lastUpdate(x509_crl, last_update) self.openssl_assert(res == 1) # Set the next update time. - next_update = self._lib.ASN1_TIME_new() - self.openssl_assert(next_update != self._ffi.NULL) - next_update = self._ffi.gc(next_update, self._lib.ASN1_TIME_free) - self._set_asn1_time(next_update, builder._next_update) + next_update = self._create_asn1_time(builder._next_update) res = self._lib.X509_CRL_set_nextUpdate(x509_crl, next_update) self.openssl_assert(res == 1) @@ -996,10 +997,7 @@ def create_x509_revoked_certificate(self, builder): x509_revoked, serial_number ) self.openssl_assert(res == 1) - rev_date = self._lib.ASN1_TIME_new() - self.openssl_assert(rev_date != self._ffi.NULL) - rev_date = self._ffi.gc(rev_date, self._lib.ASN1_TIME_free) - self._set_asn1_time(rev_date, builder._revocation_date) + rev_date = self._create_asn1_time(builder._revocation_date) res = self._lib.X509_REVOKED_set_revocationDate(x509_revoked, rev_date) self.openssl_assert(res == 1) # add CRL entry extensions From 2d9f8e88cbb2706219d3f9781f5fa5f8ee51e775 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 24 Oct 2018 23:40:58 -0400 Subject: [PATCH 407/988] HTTPS one last URL (#4522) --- docs/hazmat/primitives/asymmetric/ec.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 226dea8c04e0..7f27b5f37dd2 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -726,7 +726,7 @@ in PEM format. .. _`800-56Ar2`: https://csrc.nist.gov/publications/detail/sp/800-56a/rev-2/final .. _`some concern`: https://crypto.stackexchange.com/questions/10263/should-we-trust-the-nist-recommended-ecc-parameters .. _`less than 224 bits`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf -.. _`elliptic curve diffie-hellman is faster than diffie-hellman`: http://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1100&context=cseconfwork +.. _`elliptic curve diffie-hellman is faster than diffie-hellman`: https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1100&context=cseconfwork .. _`minimize the number of security concerns for elliptic-curve cryptography`: https://cr.yp.to/ecdh/curve25519-20060209.pdf .. _`SafeCurves`: https://safecurves.cr.yp.to/ .. _`ECDSA`: https://en.wikipedia.org/wiki/ECDSA From b7bd0000e10b471aa5f50501a58be5c5cf73fd55 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 25 Oct 2018 23:07:28 +0800 Subject: [PATCH 408/988] don't limit hypothesis's time to generate valid test permutations (#4525) * don't limit hypothesis's time to generate valid test permutations * add a comment * lol --- tests/hypothesis/test_fernet.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/hypothesis/test_fernet.py b/tests/hypothesis/test_fernet.py index c65286960ca0..5f8f5f517bf8 100644 --- a/tests/hypothesis/test_fernet.py +++ b/tests/hypothesis/test_fernet.py @@ -2,12 +2,17 @@ # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. -from hypothesis import given +from hypothesis import given, settings, unlimited from hypothesis.strategies import binary from cryptography.fernet import Fernet +# Unlimited timeout will become the default in the future. When it does +# we should remove this. See: +# https://hypothesis.readthedocs.io/en/latest/settings.html +# #hypothesis.settings.timeout +@settings(deadline=None, timeout=unlimited) @given(binary()) def test_fernet(data): f = Fernet(Fernet.generate_key()) From 57c3a18a1eae4364dbd55b14478030fc1dc586b3 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 25 Oct 2018 20:01:32 -0400 Subject: [PATCH 409/988] Failure is not an option (#4527) --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6ed017d9b2f9..faa3527b642b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -88,11 +88,6 @@ matrix: # urllib3 tests fail on xenial for whatever reason dist: trusty sudo: false - allow_failures: - # Remove allow_failures as soon as josepy's flake8 issue is resolved - # https://github.com/certbot/josepy/pull/39 - - python: 2.7 - env: DOWNSTREAM=certbot-josepy install: - ./.travis/install.sh From cf0082478d6dfa2d7f42df52bb2a2c6de9ebb333 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 26 Oct 2018 10:39:35 +0800 Subject: [PATCH 410/988] run docker builds in travis instead of jenkins (#4526) * docker experiment in travis * let's run 'em all * okay run as travis * fine just use a number * remove xenial since we test that elsewhere * suspicion * review feedback * more comments * use workdir * heavy sigh --- .travis.yml | 50 ++++++++++++++++++++++++++++++++++++++ .travis/install.sh | 8 ++++++ .travis/run.sh | 11 ++++++++- .travis/upload_coverage.sh | 2 +- Jenkinsfile | 50 -------------------------------------- 5 files changed, 69 insertions(+), 52 deletions(-) diff --git a/.travis.yml b/.travis.yml index faa3527b642b..87edf43522dc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,6 +55,56 @@ matrix: env: TOXENV=py37 LIBRESSL=2.7.4 - python: 3.7 env: TOXENV=py37 LIBRESSL=2.8.2 + + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7 + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-wheezy + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-jessie + - python: 3.4 + services: docker + env: TOXENV=py34 DOCKER=pyca/cryptography-runner-jessie + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-stretch + - python: 3.5 + services: docker + env: TOXENV=py35 DOCKER=pyca/cryptography-runner-stretch + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-buster + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-buster + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-sid + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-sid + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-ubuntu-rolling + - python: 2.7 + services: docker + env: TOXENV=randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-fedora + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-fedora + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-alpine:latest + - python: 3.6 env: TOXENV=docs OPENSSL=1.1.0i addons: diff --git a/.travis/install.sh b/.travis/install.sh index 20a883121cac..def7343be5bd 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -46,6 +46,14 @@ elif [ -n "${LIBRESSL}" ]; then fi fi +if [ -n "${DOCKER}" ]; then + if [ -n "${OPENSSL}" ] || [ -n "${LIBRESSL}" ]; then + echo "OPENSSL and LIBRESSL are not allowed when DOCKER is set." + exit 1 + fi + docker pull "$DOCKER" +fi + if [ -z "${DOWNSTREAM}" ]; then git clone --depth=1 https://github.com/google/wycheproof "$HOME/wycheproof" fi diff --git a/.travis/run.sh b/.travis/run.sh index 5e0e56df7f74..8f8dd6871bd4 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -22,7 +22,16 @@ fi source ~/.venv/bin/activate -if [ -n "${TOXENV}" ]; then +if [ -n "${DOCKER}" ]; then + # We will be able to drop the -u once we switch the default container user in the + # dockerfiles. + docker run --rm -u 2000:2000 \ + -v "${TRAVIS_BUILD_DIR}":"${TRAVIS_BUILD_DIR}" \ + -v "${HOME}/wycheproof":/wycheproof \ + -w "${TRAVIS_BUILD_DIR}" \ + -e TOXENV "${DOCKER}" \ + /bin/sh -c "tox -- --wycheproof-root='/wycheproof'" +elif [ -n "${TOXENV}" ]; then tox -- --wycheproof-root="$HOME/wycheproof" else downstream_script="${TRAVIS_BUILD_DIR}/.travis/downstream.d/${DOWNSTREAM}.sh" diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index e960907ed8a4..2f2cb3c180e0 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -11,7 +11,7 @@ if [ -n "${TOXENV}" ]; then docs);; *) source ~/.venv/bin/activate - codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL + codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER ;; esac fi diff --git a/Jenkinsfile b/Jenkinsfile index 8bb15d627d62..b9d869867293 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,46 +19,6 @@ def configs = [ label: 'yosemite', toxenvs: ['py27'], ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-centos7', - toxenvs: ['py27'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-wheezy', - toxenvs: ['py27'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-jessie', - toxenvs: ['py27', 'py34'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-stretch', - toxenvs: ['py27', 'py35'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-buster', - toxenvs: ['py27', 'py36'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-sid', - toxenvs: ['py27', 'py36'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-xenial', - toxenvs: ['py27', 'py35'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-ubuntu-rolling', - toxenvs: ['py27', 'py36', 'randomorder'], - ], [ label: 'docker', imageName: 'pyca/cryptography-runner-sid', @@ -66,16 +26,6 @@ def configs = [ artifacts: 'cryptography/docs/_build/html/**', artifactExcludes: '**/*.doctree', ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-fedora', - toxenvs: ['py27', 'py36'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-alpine:latest', - toxenvs: ['py36'], - ], ] /* Add the linkcheck job to our config list if we're on master */ From 03eab03b882eae798d6c77fd16df7af539064d1a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 28 Oct 2018 10:12:49 +0800 Subject: [PATCH 411/988] add a new SCT vector (#4528) * add a new SCT vector * ridiculous --- docs/development/test-vectors.rst | 2 ++ docs/spelling_wordlist.txt | 1 + .../x509/cryptography-scts.pem | 35 +++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/cryptography-scts.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index e512a902fce1..d68e1e933f9a 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -161,6 +161,8 @@ X.509 ``cryptography.io.pem`` certificate. * ``cryptography.io.precert.pem`` - A pre-certificate with the CT poison extension for the cryptography website. +* ``cryptography-scts.io.pem`` - A leaf certificate issued by Let's Encrypt for + the cryptography website which contains signed certificate timestamps. * ``wildcard_san.pem`` - A leaf certificate issued by a public CA for ``langui.sh`` that contains wildcard entries in the SAN extension. * ``san_edipartyname.der`` - A DSA certificate from a `Mozilla bug`_ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index ed189248f8a0..4614421466b9 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -95,6 +95,7 @@ syscall Tanja testability timestamp +timestamps tunable Ubuntu unencrypted diff --git a/vectors/cryptography_vectors/x509/cryptography-scts.pem b/vectors/cryptography_vectors/x509/cryptography-scts.pem new file mode 100644 index 000000000000..77f0b560c5ff --- /dev/null +++ b/vectors/cryptography_vectors/x509/cryptography-scts.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGCzCCBPOgAwIBAgISA9MzcqjnMT3tsDXK3Lry4uRIMA0GCSqGSIb3DQEBCwUA +MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD +ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA5MjYxOTU2MzNaFw0x +ODEyMjUxOTU2MzNaMBoxGDAWBgNVBAMTD2NyeXB0b2dyYXBoeS5pbzCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJDpCL99DVo83587MrVp6gunmKRoUfY +vcgk5u2v0tB9OmZkcIY37z6AunHWr18Yj55zHmm6G8Nf35hmu3ql2A26WThCbmOe +WXbxhgarkningZI9opUWnI2dIllguVIsq99GzhpNnDdCb26s5+SRhJI4cr4hYaKC +XGDKooKWyXUX09SJTq7nW/1+pq3y9ZMvldRKjJALeAdwnC7kmUB6pK7q8J2VlpfQ +wqGu6q/WHVdgnhWARw3GEFJWDn9wkxBAF08CpzhVaEj+iK+Ut/1HBgNYwqI47h7S +q+qv0G2qklRVUtEM0zYRsp+y/6vivdbFLlPw8VaerbpJN3gLtpVNcGECAwEAAaOC +AxkwggMVMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUjbe0bE1aZ8HiqtwqUfCe15bF +V8UwHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEE +YzBhMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQu +b3JnMC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQu +b3JnLzAaBgNVHREEEzARgg9jcnlwdG9ncmFwaHkuaW8wgf4GA1UdIASB9jCB8zAI +BgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRwOi8v +Y3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENlcnRp +ZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFydGll +cyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRlIFBv +bGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0b3J5 +LzCCAQYGCisGAQQB1nkCBAIEgfcEgfQA8gB3ACk8UZZUyDlluqpQ/FgH1Ldvv1h6 +KXLcpMMM9OVFR/R4AAABZherSukAAAQDAEgwRgIhAKXOqHxQbnGMJuNIu/QLwQ51 +6E195jqLTR5+iQpy2qRAAiEA3qnx0MNT/NM34VtxX4AohXWAXUt3AsAnAu7Y9xVO +fHIAdwBvU3asMfAxGdiZAKRRFf93FRwR2QLBACkGjbIImjfZEwAAAWYXq0twAAAE +AwBIMEYCIQCi4Nn+Y5QU+L3N1/adsJDVuJIHtIDHisLFxA42HpKjpgIhALznDcOE +Mfr8hR8lwCNOXN5LkGTgjTx7yttkY+90h2cQMA0GCSqGSIb3DQEBCwUAA4IBAQAq +uKFBh6Rc4kH9yEVNYMu+tv/xCluzCKHvCAmxUF6eF5K9nTFB4gkWjsBCiC+WlCJh +OX53Xg6ZQVCt7dpIk6C2RatNrZt+TnNevDZ04x0+YhMoDUREZay0cZ3h62GsdbQQ +1UCqDipcNfm1Lr3noCzQJlTejK5cjc/8WozMIxAZorJnIf0kBHXCniRepu5gCmjn +0WDCj1uLmFr3jRXRiQ8E+ygXh7PclxMHXsVooeZvkBjGoYJCKKirWaDUzw/1bmbG +ZnA/tGyBdUMMyDzd7qcnBYDOIH8UyXo1ySOYyt9sH0OJXBfmxwHkShvD1VbxCmOT +DJbhFMA/rdWmsV8a/ZiD +-----END CERTIFICATE----- From 38a3c414cdb9c8d02904b857ba5932b114de0c5b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 28 Oct 2018 10:14:03 +0800 Subject: [PATCH 412/988] add bindings for supporting the issuing distribution point CRL extension (#4532) --- src/_cffi_src/openssl/x509v3.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/_cffi_src/openssl/x509v3.py b/src/_cffi_src/openssl/x509v3.py index 25c4fed87a4e..193d2e233bde 100644 --- a/src/_cffi_src/openssl/x509v3.py +++ b/src/_cffi_src/openssl/x509v3.py @@ -141,6 +141,15 @@ ...; } DIST_POINT; +typedef struct { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +} ISSUING_DIST_POINT; + typedef struct { ASN1_STRING *organization; Cryptography_STACK_OF_ASN1_INTEGER *noticenos; @@ -293,6 +302,9 @@ GENERAL_NAME *GENERAL_NAME_new(void); void GENERAL_NAME_free(GENERAL_NAME *); + +ISSUING_DIST_POINT *ISSUING_DIST_POINT_new(void); +void ISSUING_DIST_POINT_free(ISSUING_DIST_POINT *); """ CUSTOMIZATIONS = """ From 44ccbf0bc1f416899f3625d6e408d39951218a27 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 28 Oct 2018 22:00:10 +0800 Subject: [PATCH 413/988] refactor _decode_dist_points (#4536) * separate refactor _decode_dist_points We need to be able to parse reasons and distpoint for the CRL extension IssuingDistributionPoint * move comment, rename a variable * review feedback --- .../hazmat/backends/openssl/decode_asn1.py | 131 +++++++++--------- 1 file changed, 67 insertions(+), 64 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index b13fa056b0b7..e06e8cd6d745 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -9,6 +9,8 @@ import asn1crypto.core +import six + from cryptography import x509 from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM from cryptography.x509.name import _ASN1_TYPE_TO_ENUM @@ -510,44 +512,7 @@ def _decode_dist_points(backend, cdps): reasons = None cdp = backend._lib.sk_DIST_POINT_value(cdps, i) if cdp.reasons != backend._ffi.NULL: - # We will check each bit from RFC 5280 - # ReasonFlags ::= BIT STRING { - # unused (0), - # keyCompromise (1), - # cACompromise (2), - # affiliationChanged (3), - # superseded (4), - # cessationOfOperation (5), - # certificateHold (6), - # privilegeWithdrawn (7), - # aACompromise (8) } - reasons = [] - get_bit = backend._lib.ASN1_BIT_STRING_get_bit - if get_bit(cdp.reasons, 1): - reasons.append(x509.ReasonFlags.key_compromise) - - if get_bit(cdp.reasons, 2): - reasons.append(x509.ReasonFlags.ca_compromise) - - if get_bit(cdp.reasons, 3): - reasons.append(x509.ReasonFlags.affiliation_changed) - - if get_bit(cdp.reasons, 4): - reasons.append(x509.ReasonFlags.superseded) - - if get_bit(cdp.reasons, 5): - reasons.append(x509.ReasonFlags.cessation_of_operation) - - if get_bit(cdp.reasons, 6): - reasons.append(x509.ReasonFlags.certificate_hold) - - if get_bit(cdp.reasons, 7): - reasons.append(x509.ReasonFlags.privilege_withdrawn) - - if get_bit(cdp.reasons, 8): - reasons.append(x509.ReasonFlags.aa_compromise) - - reasons = frozenset(reasons) + reasons = _decode_reasons(backend, cdp.reasons) if cdp.CRLissuer != backend._ffi.NULL: crl_issuer = _decode_general_names(backend, cdp.CRLissuer) @@ -555,32 +520,9 @@ def _decode_dist_points(backend, cdps): # Certificates may have a crl_issuer/reasons and no distribution # point so make sure it's not null. if cdp.distpoint != backend._ffi.NULL: - # Type 0 is fullName, there is no #define for it in the code. - if cdp.distpoint.type == _DISTPOINT_TYPE_FULLNAME: - full_name = _decode_general_names( - backend, cdp.distpoint.name.fullname - ) - # OpenSSL code doesn't test for a specific type for - # relativename, everything that isn't fullname is considered - # relativename. Per RFC 5280: - # - # DistributionPointName ::= CHOICE { - # fullName [0] GeneralNames, - # nameRelativeToCRLIssuer [1] RelativeDistinguishedName } - else: - rns = cdp.distpoint.name.relativename - rnum = backend._lib.sk_X509_NAME_ENTRY_num(rns) - attributes = set() - for i in range(rnum): - rn = backend._lib.sk_X509_NAME_ENTRY_value( - rns, i - ) - backend.openssl_assert(rn != backend._ffi.NULL) - attributes.add( - _decode_x509_name_entry(backend, rn) - ) - - relative_name = x509.RelativeDistinguishedName(attributes) + full_name, relative_name = _decode_distpoint( + backend, cdp.distpoint + ) dist_points.append( x509.DistributionPoint( @@ -591,6 +533,67 @@ def _decode_dist_points(backend, cdps): return dist_points +# ReasonFlags ::= BIT STRING { +# unused (0), +# keyCompromise (1), +# cACompromise (2), +# affiliationChanged (3), +# superseded (4), +# cessationOfOperation (5), +# certificateHold (6), +# privilegeWithdrawn (7), +# aACompromise (8) } +_REASON_BIT_MAPPING = { + 1: x509.ReasonFlags.key_compromise, + 2: x509.ReasonFlags.ca_compromise, + 3: x509.ReasonFlags.affiliation_changed, + 4: x509.ReasonFlags.superseded, + 5: x509.ReasonFlags.cessation_of_operation, + 6: x509.ReasonFlags.certificate_hold, + 7: x509.ReasonFlags.privilege_withdrawn, + 8: x509.ReasonFlags.aa_compromise, +} + + +def _decode_reasons(backend, reasons): + # We will check each bit from RFC 5280 + enum_reasons = [] + for bit_position, reason in six.iteritems(_REASON_BIT_MAPPING): + if backend._lib.ASN1_BIT_STRING_get_bit(reasons, bit_position): + enum_reasons.append(reason) + + return frozenset(enum_reasons) + + +def _decode_distpoint(backend, distpoint): + if distpoint.type == _DISTPOINT_TYPE_FULLNAME: + full_name = _decode_general_names(backend, distpoint.name.fullname) + return full_name, None + + # OpenSSL code doesn't test for a specific type for + # relativename, everything that isn't fullname is considered + # relativename. Per RFC 5280: + # + # DistributionPointName ::= CHOICE { + # fullName [0] GeneralNames, + # nameRelativeToCRLIssuer [1] RelativeDistinguishedName } + rns = distpoint.name.relativename + rnum = backend._lib.sk_X509_NAME_ENTRY_num(rns) + attributes = set() + for i in range(rnum): + rn = backend._lib.sk_X509_NAME_ENTRY_value( + rns, i + ) + backend.openssl_assert(rn != backend._ffi.NULL) + attributes.add( + _decode_x509_name_entry(backend, rn) + ) + + relative_name = x509.RelativeDistinguishedName(attributes) + + return None, relative_name + + def _decode_crl_distribution_points(backend, cdps): dist_points = _decode_dist_points(backend, cdps) return x509.CRLDistributionPoints(dist_points) From ece7442a50c016631d912d558add9d07147ddfe4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 02:06:02 +0800 Subject: [PATCH 414/988] reorder curves to put binary (SECT) curves down at the bottom (#4529) also add a disclaimer that you shouldn't use them --- docs/hazmat/primitives/asymmetric/ec.rst | 107 +++++++++++++---------- 1 file changed, 59 insertions(+), 48 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 7f27b5f37dd2..8d03a0939222 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -310,138 +310,149 @@ Tanja Lange. All named curves are instances of :class:`EllipticCurve`. -.. class:: SECT571K1 +.. class:: SECP256R1 .. versionadded:: 0.5 - SECG curve ``sect571k1``. Also called NIST K-571. + SECG curve ``secp256r1``. Also called NIST P-256. -.. class:: SECT409K1 +.. class:: SECP384R1 .. versionadded:: 0.5 - SECG curve ``sect409k1``. Also called NIST K-409. + SECG curve ``secp384r1``. Also called NIST P-384. -.. class:: SECT283K1 +.. class:: SECP521R1 .. versionadded:: 0.5 - SECG curve ``sect283k1``. Also called NIST K-283. + SECG curve ``secp521r1``. Also called NIST P-521. -.. class:: SECT233K1 +.. class:: SECP224R1 .. versionadded:: 0.5 - SECG curve ``sect233k1``. Also called NIST K-233. + SECG curve ``secp224r1``. Also called NIST P-224. -.. class:: SECT163K1 +.. class:: SECP192R1 .. versionadded:: 0.5 - SECG curve ``sect163k1``. Also called NIST K-163. + SECG curve ``secp192r1``. Also called NIST P-192. -.. class:: SECT571R1 +.. class:: SECP256K1 - .. versionadded:: 0.5 + .. versionadded:: 0.9 - SECG curve ``sect571r1``. Also called NIST B-571. + SECG curve ``secp256k1``. -.. class:: SECT409R1 +.. class:: BrainpoolP256R1 - .. versionadded:: 0.5 + .. versionadded:: 2.2 - SECG curve ``sect409r1``. Also called NIST B-409. + Brainpool curve specified in :rfc:`5639`. These curves are discouraged + for new systems. +.. class:: BrainpoolP384R1 -.. class:: SECT283R1 + .. versionadded:: 2.2 - .. versionadded:: 0.5 + Brainpool curve specified in :rfc:`5639`. These curves are discouraged + for new systems. - SECG curve ``sect283r1``. Also called NIST B-283. +.. class:: BrainpoolP512R1 + .. versionadded:: 2.2 -.. class:: SECT233R1 + Brainpool curve specified in :rfc:`5639`. These curves are discouraged + for new systems. + +.. class:: SECT571K1 .. versionadded:: 0.5 - SECG curve ``sect233r1``. Also called NIST B-233. + SECG curve ``sect571k1``. Also called NIST K-571. These binary curves are + discouraged for new systems. -.. class:: SECT163R2 +.. class:: SECT409K1 .. versionadded:: 0.5 - SECG curve ``sect163r2``. Also called NIST B-163. + SECG curve ``sect409k1``. Also called NIST K-409. These binary curves are + discouraged for new systems. -.. class:: SECP521R1 +.. class:: SECT283K1 .. versionadded:: 0.5 - SECG curve ``secp521r1``. Also called NIST P-521. + SECG curve ``sect283k1``. Also called NIST K-283. These binary curves are + discouraged for new systems. -.. class:: SECP384R1 +.. class:: SECT233K1 .. versionadded:: 0.5 - SECG curve ``secp384r1``. Also called NIST P-384. + SECG curve ``sect233k1``. Also called NIST K-233. These binary curves are + discouraged for new systems. -.. class:: SECP256R1 +.. class:: SECT163K1 .. versionadded:: 0.5 - SECG curve ``secp256r1``. Also called NIST P-256. + SECG curve ``sect163k1``. Also called NIST K-163. These binary curves are + discouraged for new systems. -.. class:: SECP224R1 +.. class:: SECT571R1 .. versionadded:: 0.5 - SECG curve ``secp224r1``. Also called NIST P-224. + SECG curve ``sect571r1``. Also called NIST B-571. These binary curves are + discouraged for new systems. -.. class:: SECP192R1 +.. class:: SECT409R1 .. versionadded:: 0.5 - SECG curve ``secp192r1``. Also called NIST P-192. + SECG curve ``sect409r1``. Also called NIST B-409. These binary curves are + discouraged for new systems. -.. class:: SECP256K1 +.. class:: SECT283R1 - .. versionadded:: 0.9 + .. versionadded:: 0.5 - SECG curve ``secp256k1``. + SECG curve ``sect283r1``. Also called NIST B-283. These binary curves are + discouraged for new systems. -.. class:: BrainpoolP256R1 +.. class:: SECT233R1 - .. versionadded:: 2.2 + .. versionadded:: 0.5 - Brainpool curve specified in :rfc:`5639`. These curves are discouraged - for new systems. + SECG curve ``sect233r1``. Also called NIST B-233. These binary curves are + discouraged for new systems. -.. class:: BrainpoolP384R1 - .. versionadded:: 2.2 +.. class:: SECT163R2 - Brainpool curve specified in :rfc:`5639`. These curves are discouraged - for new systems. + .. versionadded:: 0.5 -.. class:: BrainpoolP512R1 + SECG curve ``sect163r2``. Also called NIST B-163. These binary curves are + discouraged for new systems. - .. versionadded:: 2.2 - Brainpool curve specified in :rfc:`5639`. These curves are discouraged - for new systems. Key Interfaces From 80a0ab454f4e6a8a76ac9d45481522bcc22535c7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 02:07:16 +0800 Subject: [PATCH 415/988] change ECDH documentation to show both classical ECDH and ECDHE (#4530) --- docs/hazmat/primitives/asymmetric/ec.rst | 58 +++++++++++++++++++++--- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 8d03a0939222..e36a5a144544 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -238,6 +238,58 @@ Elliptic Curve Key Exchange algorithm key, derivation of multiple keys, and destroys any structure that may be present. + .. warning:: + + This example does not give `forward secrecy`_ and is only provided as a + demonstration of the basic Diffie-Hellman construction. For real world + applications always use the ephemeral form described after this example. + + .. doctest:: + + >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes + >>> from cryptography.hazmat.primitives.asymmetric import ec + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF + >>> # Generate a private key for use in the exchange. + >>> server_private_key = ec.generate_private_key( + ... ec.SECP384R1(), default_backend() + ... ) + >>> # In a real handshake the peer is a remote client. For this + >>> # example we'll generate another local private key though. + >>> peer_private_key = ec.generate_private_key( + ... ec.SECP384R1(), default_backend() + ... ) + >>> shared_key = server_private_key.exchange( + ... ec.ECDH(), peer_private_key.public_key()) + >>> # Perform key derivation. + >>> derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key) + >>> # And now we can demonstrate that the handshake performed in the + >>> # opposite direction gives the same final value + >>> same_shared_key = peer_private_key.exchange( + ... ec.ECDH(), server_private_key.public_key()) + >>> # Perform key derivation. + >>> same_derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(same_shared_key) + >>> derived_key == same_derived_key + True + + ECDHE (or EECDH), the ephemeral form of this exchange, is **strongly + preferred** over simple ECDH and provides `forward secrecy`_ when used. + You must generate a new private key using :func:`generate_private_key` for + each :meth:`~EllipticCurvePrivateKey.exchange` when performing an ECDHE key + exchange. An example of the ephemeral form: + .. doctest:: >>> from cryptography.hazmat.backends import default_backend @@ -279,12 +331,6 @@ Elliptic Curve Key Exchange algorithm ... backend=default_backend() ... ).derive(shared_key_2) - ECDHE (or EECDH), the ephemeral form of this exchange, is **strongly - preferred** over simple ECDH and provides `forward secrecy`_ when used. - You must generate a new private key using :func:`generate_private_key` for - each :meth:`~EllipticCurvePrivateKey.exchange` when performing an ECDHE key - exchange. - Elliptic Curves --------------- From 6e756aec9c91a8350208050b0a3775ea63891cfd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 02:07:40 +0800 Subject: [PATCH 416/988] add IDP OID and docs (#4533) --- docs/x509/reference.rst | 6 ++++++ src/cryptography/x509/oid.py | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 07a692a8ac23..5e81491683f3 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2934,6 +2934,12 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"2.5.29.46"``. The identifier for the :class:`~cryptography.x509.FreshestCRL` extension type. + .. attribute:: ISSUING_DISTRIBUTION_POINT + + .. versionadded:: 2.4 + + Corresponds to the dotted string ``"2.5.29.28"``. + .. class:: CRLEntryExtensionOID diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index bc654640d258..d121a8077382 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -82,6 +82,7 @@ class ExtensionOID(object): EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37") FRESHEST_CRL = ObjectIdentifier("2.5.29.46") INHIBIT_ANY_POLICY = ObjectIdentifier("2.5.29.54") + ISSUING_DISTRIBUTION_POINT = ObjectIdentifier("2.5.29.28") AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1") SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11") OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5") @@ -265,6 +266,9 @@ class CertificatePoliciesOID(object): ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage", ExtensionOID.FRESHEST_CRL: "freshestCRL", ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy", + ExtensionOID.ISSUING_DISTRIBUTION_POINT: ( + "issuingDistributionPoint" + ), ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess", ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", From e617c5a047b60204ab049a1ffe432310bb406055 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 05:36:34 +0800 Subject: [PATCH 417/988] OCSP response builder (#4485) * ocsp response builder * better prose * review changes --- docs/x509/ocsp.rst | 185 +++++++++ .../hazmat/backends/openssl/backend.py | 104 ++++- .../hazmat/backends/openssl/encode_asn1.py | 4 + src/cryptography/x509/ocsp.py | 181 ++++++++- tests/x509/test_ocsp.py | 382 ++++++++++++++++++ 5 files changed, 846 insertions(+), 10 deletions(-) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 499e7a912d3e..535ffddac29c 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -68,6 +68,24 @@ OCSP gP8L8mJMcCaY -----END CERTIFICATE----- """ + pem_responder_cert = b""" + -----BEGIN CERTIFICATE----- + MIIBPjCB5KADAgECAgQHW80VMAoGCCqGSM49BAMCMCcxCzAJBgNVBAYTAlVTMRgw + FgYDVQQDDA9DcnlwdG9ncmFwaHkgQ0EwHhcNMTgxMDA3MTIzNTEwWhcNMjgxMDA0 + MTIzNTEwWjAnMQswCQYDVQQGEwJVUzEYMBYGA1UEAwwPQ3J5cHRvZ3JhcGh5IENB + MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbQ2E0N/E3R0zEG+qa+yAFXBY6Fte + QzyvFdq7EZHDktlyUllaVJBrbX1ItV0MlayFwwQPhZmuLPpQBzuVKyrUfTAKBggq + hkjOPQQDAgNJADBGAiEAo0NQRmfPvhWQpSvJzV+2Ag441Zeckk+bib7swduQIjIC + IQCqYD9pArB2SWfmhQCSZkNEATlsPIML8lvlSkbNcrmrqQ== + -----END CERTIFICATE----- + """ + pem_responder_key = b""" + -----BEGIN PRIVATE KEY----- + MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgO+vsRu8xDIVZE+xh + s8ESqJqcpJlwmj8CtF8HPHxrDSGhRANCAARtDYTQ38TdHTMQb6pr7IAVcFjoW15D + PK8V2rsRkcOS2XJSWVpUkGttfUi1XQyVrIXDBA+Fma4s+lAHO5UrKtR9 + -----END PRIVATE KEY----- + """ der_ocsp_req = ( b"0V0T0R0P0N0\t\x06\x05+\x0e\x03\x02\x1a\x05\x00\x04\x148\xcaF\x8c" b"\x07D\x8d\xf4\x81\x96\xc7mmLpQ\x9e`\xa7\xbd\x04\x14yu\xbb\x84:\xcb" @@ -183,6 +201,156 @@ Loading Responses OCSPResponseStatus.UNAUTHORIZED +Creating Responses +~~~~~~~~~~~~~~~~~~ + +.. class:: OCSPResponseBuilder + + .. versionadded:: 2.4 + + This class is used to create :class:`~cryptography.x509.ocsp.OCSPResponse` + objects. You cannot set ``produced_at`` on OCSP responses at this time. + Instead the field is set to current UTC time when calling ``sign``. For + unsuccessful statuses call the class method + :meth:`~cryptography.x509.ocsp.OCSPResponseBuilder.build_unsuccessful`. + + .. method:: add_response(cert, issuer, algorithm, cert_status, this_update, next_update, revocation_time, revocation_reason) + + This method adds status information about the certificate that was + requested to the response. + + :param cert: The :class:`~cryptography.x509.Certificate` whose validity + is being checked. + + :param issuer: The issuer :class:`~cryptography.x509.Certificate` of + the certificate that is being checked. + + :param algorithm: A + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + instance. For OCSP only + :class:`~cryptography.hazmat.primitives.hashes.SHA1`, + :class:`~cryptography.hazmat.primitives.hashes.SHA224`, + :class:`~cryptography.hazmat.primitives.hashes.SHA256`, + :class:`~cryptography.hazmat.primitives.hashes.SHA384`, and + :class:`~cryptography.hazmat.primitives.hashes.SHA512` are allowed. + + :param cert_status: An item from the + :class:`~cryptography.x509.ocsp.OCSPCertStatus` enumeration. + + :param this_update: A naïve :class:`datetime.datetime` object + representing the most recent time in UTC at which the status being + indicated is known by the responder to be correct. + + :param next_update: A naïve :class:`datetime.datetime` object or + ``None``. The time in UTC at or before which newer information will + be available about the status of the certificate. + + :param revocation_time: A naïve :class:`datetime.datetime` object or + ``None`` if the ``cert`` is not revoked. The time in UTC at which + the certificate was revoked. + + :param revocation_reason: An item from the + :class:`~cryptography.x509.ReasonFlags` enumeration or ``None`` if + the ``cert`` is not revoked. + + .. method:: certificates(certs) + + Add additional certificates that should be used to verify the + signature on the response. This is typically used when the responder + utilizes an OCSP delegate. + + :param list certs: A list of :class:`~cryptography.x509.Certificate` + objects. + + .. method:: responder_id(encoding, responder_cert) + + Set the ``responderID`` on the OCSP response. This is the data a + client will use to determine what certificate signed the response. + + :param responder_cert: The :class:`~cryptography.x509.Certificate` + object for the certificate whose private key will sign the + OCSP response. If the certificate and key do not match an + error will be raised when calling ``sign``. + :param encoding: Either + :attr:`~cryptography.x509.ocsp.OCSPResponderEncoding.HASH` or + :attr:`~cryptography.x509.ocsp.OCSPResponderEncoding.NAME`. + + .. method:: add_extension(extension, critical) + + Adds an extension to the response. + + :param extension: An extension conforming to the + :class:`~cryptography.x509.ExtensionType` interface. + + :param critical: Set to ``True`` if the extension must be understood and + handled. + + .. method:: sign(private_key, algorithm) + + Creates the OCSP response that can then be serialized and sent to + clients. This method will create a + :attr:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL` response. + + :param private_key: The + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey` + or + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + that will be used to sign the certificate. + + :param algorithm: The + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that + will be used to generate the signature. + + :returns: A new :class:`~cryptography.x509.ocsp.OCSPResponse`. + + .. doctest:: + + >>> import datetime + >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes, serialization + >>> from cryptography.x509 import load_pem_x509_certificate, ocsp + >>> cert = load_pem_x509_certificate(pem_cert, default_backend()) + >>> issuer = load_pem_x509_certificate(pem_issuer, default_backend()) + >>> responder_cert = load_pem_x509_certificate(pem_responder_cert, default_backend()) + >>> responder_key = serialization.load_pem_private_key(pem_responder_key, None, default_backend()) + >>> builder = ocsp.OCSPResponseBuilder() + >>> # SHA1 is in this example because RFC 5019 mandates its use. + >>> builder = builder.add_response( + ... cert=cert, issuer=issuer, algorithm=hashes.SHA1(), + ... cert_status=ocsp.OCSPCertStatus.GOOD, + ... this_update=datetime.datetime.now(), + ... next_update=datetime.datetime.now(), + ... revocation_time=None, revocation_reason=None + ... ).responder_id( + ... ocsp.OCSPResponderEncoding.HASH, responder_cert + ... ) + >>> response = builder.sign(responder_key, hashes.SHA256()) + >>> response.certificate_status + + + .. classmethod:: build_unsuccessful(response_status) + + Creates an unsigned OCSP response which can then be serialized and + sent to clients. ``build_unsuccessful`` may only be called with a + :class:`~cryptography.x509.ocsp.OCSPResponseStatus` that is not + ``SUCCESSFUL``. Since this is a class method note that no other + methods can or should be called as unsuccessful statuses do not + encode additional data. + + :returns: A new :class:`~cryptography.x509.ocsp.OCSPResponse`. + + .. doctest:: + + >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes, serialization + >>> from cryptography.x509 import load_pem_x509_certificate, ocsp + >>> response = ocsp.OCSPResponseBuilder.build_unsuccessful( + ... ocsp.OCSPResponseStatus.UNAUTHORIZED + ... ) + >>> response.response_status + + + Interfaces ~~~~~~~~~~ @@ -472,3 +640,20 @@ Interfaces .. attribute:: UNKNOWN The certificate being checked is not known to the OCSP responder. + +.. class:: OCSPResponderEncoding + + .. versionadded:: 2.4 + + An enumeration of ``responderID`` encodings that can be passed to + :meth:`~cryptography.x509.ocsp.OCSPResponseBuilder.responder_id`. + + .. attribute:: HASH + + Encode the hash of the public key whose corresponding private key + signed the response. + + .. attribute:: NAME + + Encode the X.509 ``Name`` of the certificate whose private key signed + the response. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 11d24b12356e..bd414fdec2ad 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -25,7 +25,9 @@ from cryptography.hazmat.backends.openssl import aead from cryptography.hazmat.backends.openssl.ciphers import _CipherContext from cryptography.hazmat.backends.openssl.cmac import _CMACContext -from cryptography.hazmat.backends.openssl.decode_asn1 import _Integers +from cryptography.hazmat.backends.openssl.decode_asn1 import ( + _CRL_ENTRY_REASON_ENUM_TO_CODE, _Integers +) from cryptography.hazmat.backends.openssl.dh import ( _DHParameters, _DHPrivateKey, _DHPublicKey, _dh_params_dup ) @@ -38,6 +40,7 @@ from cryptography.hazmat.backends.openssl.encode_asn1 import ( _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, _CRL_EXTENSION_ENCODE_HANDLERS, _EXTENSION_ENCODE_HANDLERS, + _OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS, _OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS, _encode_asn1_int_gc, _encode_asn1_str_gc, _encode_name_gc, _txt2obj_gc, ) @@ -69,6 +72,7 @@ CBC, CFB, CFB8, CTR, ECB, GCM, OFB, XTS ) from cryptography.hazmat.primitives.kdf import scrypt +from cryptography.x509 import ocsp _MemoryBIO = collections.namedtuple("_MemoryBIO", ["bio", "char_ptr"]) @@ -1466,6 +1470,104 @@ def create_ocsp_request(self, builder): ) return _OCSPRequest(self, ocsp_req) + def _create_ocsp_basic_response(self, builder, private_key, algorithm): + basic = self._lib.OCSP_BASICRESP_new() + self.openssl_assert(basic != self._ffi.NULL) + basic = self._ffi.gc(basic, self._lib.OCSP_BASICRESP_free) + evp_md = self._lib.EVP_get_digestbyname( + builder._response._algorithm.name.encode("ascii") + ) + self.openssl_assert(evp_md != self._ffi.NULL) + certid = self._lib.OCSP_cert_to_id( + evp_md, builder._response._cert._x509, + builder._response._issuer._x509 + ) + self.openssl_assert(certid != self._ffi.NULL) + certid = self._ffi.gc(certid, self._lib.OCSP_CERTID_free) + if builder._response._revocation_reason is None: + reason = -1 + else: + reason = _CRL_ENTRY_REASON_ENUM_TO_CODE[ + builder._response._revocation_reason + ] + if builder._response._revocation_time is None: + rev_time = self._ffi.NULL + else: + rev_time = self._create_asn1_time( + builder._response._revocation_time + ) + + next_update = self._ffi.NULL + if builder._response._next_update is not None: + next_update = self._create_asn1_time( + builder._response._next_update + ) + + this_update = self._create_asn1_time(builder._response._this_update) + + res = self._lib.OCSP_basic_add1_status( + basic, + certid, + builder._response._cert_status.value, + reason, + rev_time, + this_update, + next_update + ) + self.openssl_assert(res != self._ffi.NULL) + # okay, now sign the basic structure + evp_md = self._lib.EVP_get_digestbyname(algorithm.name.encode("ascii")) + self.openssl_assert(evp_md != self._ffi.NULL) + responder_cert, responder_encoding = builder._responder_id + flags = self._lib.OCSP_NOCERTS + if responder_encoding is ocsp.OCSPResponderEncoding.HASH: + flags |= self._lib.OCSP_RESPID_KEY + + if builder._certs is not None: + for cert in builder._certs: + res = self._lib.OCSP_basic_add1_cert(basic, cert._x509) + self.openssl_assert(res == 1) + + self._create_x509_extensions( + extensions=builder._extensions, + handlers=_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS, + x509_obj=basic, + add_func=self._lib.OCSP_BASICRESP_add_ext, + gc=True, + ) + + res = self._lib.OCSP_basic_sign( + basic, responder_cert._x509, private_key._evp_pkey, + evp_md, self._ffi.NULL, flags + ) + if res != 1: + errors = self._consume_errors() + self.openssl_assert( + errors[0]._lib_reason_match( + self._lib.ERR_LIB_X509, + self._lib.X509_R_KEY_VALUES_MISMATCH + ) + ) + raise ValueError("responder_cert must be signed by private_key") + + return basic + + def create_ocsp_response(self, response_status, builder, private_key, + algorithm): + if response_status is ocsp.OCSPResponseStatus.SUCCESSFUL: + basic = self._create_ocsp_basic_response( + builder, private_key, algorithm + ) + else: + basic = self._ffi.NULL + + ocsp_resp = self._lib.OCSP_response_create( + response_status.value, basic + ) + self.openssl_assert(ocsp_resp != self._ffi.NULL) + ocsp_resp = self._ffi.gc(ocsp_resp, self._lib.OCSP_RESPONSE_free) + return _OCSPResponse(self, ocsp_resp) + def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve): return ( self.elliptic_curve_supported(curve) and diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index c8b41a81f20a..6ff1a9a45af4 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -614,3 +614,7 @@ def _encode_nonce(backend, nonce): _OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS = { OCSPExtensionOID.NONCE: _encode_nonce, } + +_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS = { + OCSPExtensionOID.NONCE: _encode_nonce, +} diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index c89f12ce9470..2b0b1dc3cc49 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -5,13 +5,16 @@ from __future__ import absolute_import, division, print_function import abc +import datetime from enum import Enum import six from cryptography import x509 from cryptography.hazmat.primitives import hashes -from cryptography.x509.base import _reject_duplicate_extension +from cryptography.x509.base import ( + _UNIX_EPOCH, _convert_to_naive_utc_time, _reject_duplicate_extension +) _OIDS_TO_HASH = { @@ -23,6 +26,11 @@ } +class OCSPResponderEncoding(Enum): + HASH = "By Hash" + NAME = "By Name" + + class OCSPResponseStatus(Enum): SUCCESSFUL = 0 MALFORMED_REQUEST = 1 @@ -33,6 +41,17 @@ class OCSPResponseStatus(Enum): _RESPONSE_STATUS_TO_ENUM = dict((x.value, x) for x in OCSPResponseStatus) +_ALLOWED_HASHES = ( + hashes.SHA1, hashes.SHA224, hashes.SHA256, + hashes.SHA384, hashes.SHA512 +) + + +def _verify_algorithm(algorithm): + if not isinstance(algorithm, _ALLOWED_HASHES): + raise ValueError( + "Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512" + ) class OCSPCertStatus(Enum): @@ -63,14 +82,7 @@ def add_certificate(self, cert, issuer, algorithm): if self._request is not None: raise ValueError("Only one certificate can be added to a request") - allowed_hashes = ( - hashes.SHA1, hashes.SHA224, hashes.SHA256, - hashes.SHA384, hashes.SHA512 - ) - if not isinstance(algorithm, allowed_hashes): - raise ValueError( - "Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512" - ) + _verify_algorithm(algorithm) if ( not isinstance(cert, x509.Certificate) or not isinstance(issuer, x509.Certificate) @@ -98,6 +110,157 @@ def build(self): return backend.create_ocsp_request(self) +class _SingleResponse(object): + def __init__(self, cert, issuer, algorithm, cert_status, this_update, + next_update, revocation_time, revocation_reason): + if ( + not isinstance(cert, x509.Certificate) or + not isinstance(issuer, x509.Certificate) + ): + raise TypeError("cert and issuer must be a Certificate") + + _verify_algorithm(algorithm) + if not isinstance(this_update, datetime.datetime): + raise TypeError("this_update must be a datetime object") + if ( + next_update is not None and + not isinstance(next_update, datetime.datetime) + ): + raise TypeError("next_update must be a datetime object or None") + + self._cert = cert + self._issuer = issuer + self._algorithm = algorithm + self._this_update = this_update + self._next_update = next_update + + if not isinstance(cert_status, OCSPCertStatus): + raise TypeError( + "cert_status must be an item from the OCSPCertStatus enum" + ) + if cert_status is not OCSPCertStatus.REVOKED: + if revocation_time is not None: + raise ValueError( + "revocation_time can only be provided if the certificate " + "is revoked" + ) + if revocation_reason is not None: + raise ValueError( + "revocation_reason can only be provided if the certificate" + " is revoked" + ) + else: + if not isinstance(revocation_time, datetime.datetime): + raise TypeError("revocation_time must be a datetime object") + + revocation_time = _convert_to_naive_utc_time(revocation_time) + if revocation_time <= _UNIX_EPOCH: + raise ValueError('The revocation_time must be after the unix' + ' epoch (1970 January 1).') + + if ( + revocation_reason is not None and + not isinstance(revocation_reason, x509.ReasonFlags) + ): + raise TypeError( + "revocation_reason must be an item from the ReasonFlags " + "enum or None" + ) + + self._cert_status = cert_status + self._revocation_time = revocation_time + self._revocation_reason = revocation_reason + + +class OCSPResponseBuilder(object): + def __init__(self, response=None, responder_id=None, certs=None, + extensions=[]): + self._response = response + self._responder_id = responder_id + self._certs = certs + self._extensions = extensions + + def add_response(self, cert, issuer, algorithm, cert_status, this_update, + next_update, revocation_time, revocation_reason): + if self._response is not None: + raise ValueError("Only one response per OCSPResponse.") + + singleresp = _SingleResponse( + cert, issuer, algorithm, cert_status, this_update, next_update, + revocation_time, revocation_reason + ) + return OCSPResponseBuilder( + singleresp, self._responder_id, + self._certs, self._extensions, + ) + + def responder_id(self, encoding, responder_cert): + if self._responder_id is not None: + raise ValueError("responder_id can only be set once") + if not isinstance(responder_cert, x509.Certificate): + raise TypeError("responder_cert must be a Certificate") + if not isinstance(encoding, OCSPResponderEncoding): + raise TypeError( + "encoding must be an element from OCSPResponderEncoding" + ) + + return OCSPResponseBuilder( + self._response, (responder_cert, encoding), + self._certs, self._extensions, + ) + + def certificates(self, certs): + if self._certs is not None: + raise ValueError("certificates may only be set once") + certs = list(certs) + if len(certs) == 0: + raise ValueError("certs must not be an empty list") + if not all(isinstance(x, x509.Certificate) for x in certs): + raise TypeError("certs must be a list of Certificates") + return OCSPResponseBuilder( + self._response, self._responder_id, + certs, self._extensions, + ) + + def add_extension(self, extension, critical): + if not isinstance(extension, x509.ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = x509.Extension(extension.oid, critical, extension) + _reject_duplicate_extension(extension, self._extensions) + + return OCSPResponseBuilder( + self._response, self._responder_id, + self._certs, self._extensions + [extension], + ) + + def sign(self, private_key, algorithm): + from cryptography.hazmat.backends.openssl.backend import backend + if self._response is None: + raise ValueError("You must add a response before signing") + if self._responder_id is None: + raise ValueError("You must add a responder_id before signing") + + if not isinstance(algorithm, hashes.HashAlgorithm): + raise TypeError("Algorithm must be a registered hash algorithm.") + + return backend.create_ocsp_response( + OCSPResponseStatus.SUCCESSFUL, self, private_key, algorithm + ) + + @classmethod + def build_unsuccessful(cls, response_status): + from cryptography.hazmat.backends.openssl.backend import backend + if not isinstance(response_status, OCSPResponseStatus): + raise TypeError( + "response_status must be an item from OCSPResponseStatus" + ) + if response_status is OCSPResponseStatus.SUCCESSFUL: + raise ValueError("response_status cannot be SUCCESSFUL") + + return backend.create_ocsp_response(response_status, None, None, None) + + @six.add_metaclass(abc.ABCMeta) class OCSPRequest(object): @abc.abstractproperty diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 3ee6a26eb836..fad48dab84be 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -13,10 +13,12 @@ from cryptography import x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15 from cryptography.x509 import ocsp from .test_x509 import _load_cert +from ..hazmat.primitives.fixtures_ec import EC_KEY_SECP256R1 from ..utils import load_vectors_from_file @@ -43,6 +45,33 @@ def _cert_and_issuer(): return cert, issuer +def _generate_root(): + from cryptography.hazmat.backends.openssl.backend import backend + + private_key = EC_KEY_SECP256R1.private_key(backend) + subject = x509.Name([ + x509.NameAttribute(x509.NameOID.COUNTRY_NAME, u'US'), + x509.NameAttribute(x509.NameOID.COMMON_NAME, u'Cryptography CA'), + ]) + + builder = x509.CertificateBuilder().serial_number( + 123456789 + ).issuer_name( + subject + ).subject_name( + subject + ).public_key( + private_key.public_key() + ).not_valid_before( + datetime.datetime.now() + ).not_valid_after( + datetime.datetime.now() + datetime.timedelta(days=3650) + ) + + cert = builder.sign(private_key, hashes.SHA256(), backend) + return cert, private_key + + class TestOCSPRequest(object): def test_bad_request(self): with pytest.raises(ValueError): @@ -182,6 +211,359 @@ def test_create_ocsp_request_with_extension(self, ext, critical): assert req.extensions[0].critical is critical +class TestOCSPResponseBuilder(object): + def test_add_response_twice(self): + cert, issuer = _cert_and_issuer() + time = datetime.datetime.now() + builder = ocsp.OCSPResponseBuilder() + builder = builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, time, + time, None, None + ) + with pytest.raises(ValueError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, time, + time, None, None + ) + + def test_invalid_add_response(self): + cert, issuer = _cert_and_issuer() + time = datetime.datetime.utcnow() + reason = x509.ReasonFlags.cessation_of_operation + builder = ocsp.OCSPResponseBuilder() + with pytest.raises(TypeError): + builder.add_response( + 'bad', issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, + time, time, None, None + ) + with pytest.raises(TypeError): + builder.add_response( + cert, 'bad', hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, + time, time, None, None + ) + with pytest.raises(ValueError): + builder.add_response( + cert, issuer, 'notahash', ocsp.OCSPCertStatus.GOOD, + time, time, None, None + ) + with pytest.raises(TypeError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, + 'bad', time, None, None + ) + with pytest.raises(TypeError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, + time, 'bad', None, None + ) + + with pytest.raises(TypeError): + builder.add_response( + cert, issuer, hashes.SHA256(), 0, time, time, None, None + ) + with pytest.raises(ValueError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, + time, time, time, None + ) + with pytest.raises(ValueError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, + time, time, None, reason + ) + with pytest.raises(TypeError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.REVOKED, + time, time, None, reason + ) + with pytest.raises(TypeError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.REVOKED, + time, time, time, 0 + ) + with pytest.raises(ValueError): + builder.add_response( + cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.REVOKED, + time, time, time - datetime.timedelta(days=36500), None + ) + + def test_invalid_certificates(self): + builder = ocsp.OCSPResponseBuilder() + with pytest.raises(ValueError): + builder.certificates([]) + with pytest.raises(TypeError): + builder.certificates(['notacert']) + with pytest.raises(TypeError): + builder.certificates('invalid') + + _, issuer = _cert_and_issuer() + builder = builder.certificates([issuer]) + with pytest.raises(ValueError): + builder.certificates([issuer]) + + def test_invalid_responder_id(self): + builder = ocsp.OCSPResponseBuilder() + cert, _ = _cert_and_issuer() + with pytest.raises(TypeError): + builder.responder_id(ocsp.OCSPResponderEncoding.HASH, 'invalid') + with pytest.raises(TypeError): + builder.responder_id('notanenum', cert) + + builder = builder.responder_id(ocsp.OCSPResponderEncoding.NAME, cert) + with pytest.raises(ValueError): + builder.responder_id(ocsp.OCSPResponderEncoding.NAME, cert) + + def test_invalid_extension(self): + builder = ocsp.OCSPResponseBuilder() + with pytest.raises(TypeError): + builder.add_extension("notanextension", True) + + def test_sign_no_response(self): + builder = ocsp.OCSPResponseBuilder() + root_cert, private_key = _generate_root() + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ) + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256()) + + def test_sign_no_responder_id(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + _, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ) + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256()) + + def test_sign_invalid_hash_algorithm(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ) + with pytest.raises(TypeError): + builder.sign(private_key, 'notahash') + + def test_sign_good_cert(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert resp.responder_name == root_cert.subject + assert resp.responder_key_hash is None + assert (current_time - resp.produced_at).total_seconds() < 10 + assert (resp.signature_algorithm_oid == + x509.SignatureAlgorithmOID.ECDSA_WITH_SHA256) + assert resp.certificate_status == ocsp.OCSPCertStatus.GOOD + assert resp.revocation_time is None + assert resp.revocation_reason is None + assert resp.this_update == this_update + assert resp.next_update == next_update + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) + ) + + def test_sign_revoked_cert(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + revoked_date = this_update - datetime.timedelta(days=300) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, + this_update, next_update, revoked_date, None + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED + assert resp.revocation_time == revoked_date + assert resp.revocation_reason is None + assert resp.this_update == this_update + assert resp.next_update == next_update + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) + ) + + def test_sign_with_appended_certs(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ).certificates( + [root_cert] + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert resp.certificates == [root_cert] + + def test_sign_revoked_no_next_update(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + revoked_date = this_update - datetime.timedelta(days=300) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, + this_update, None, revoked_date, None + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED + assert resp.revocation_time == revoked_date + assert resp.revocation_reason is None + assert resp.this_update == this_update + assert resp.next_update is None + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) + ) + + def test_sign_revoked_with_reason(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + revoked_date = this_update - datetime.timedelta(days=300) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, + this_update, next_update, revoked_date, + x509.ReasonFlags.key_compromise + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED + assert resp.revocation_time == revoked_date + assert resp.revocation_reason is x509.ReasonFlags.key_compromise + assert resp.this_update == this_update + assert resp.next_update == next_update + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) + ) + + def test_sign_responder_id_key_hash(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.HASH, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert resp.responder_name is None + assert resp.responder_key_hash == ( + b'\x8ca\x94\xe0\x948\xed\x89\xd8\xd4N\x89p\t\xd6\xf9^_\xec}' + ) + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) + ) + + def test_invalid_sign_responder_cert_does_not_match_private_key(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.HASH, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ) + from cryptography.hazmat.backends.openssl.backend import backend + diff_key = ec.generate_private_key(ec.SECP256R1(), backend) + with pytest.raises(ValueError): + builder.sign(diff_key, hashes.SHA256()) + + def test_sign_with_extension(self): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + root_cert, private_key = _generate_root() + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.HASH, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, + next_update, None, None + ).add_extension( + x509.OCSPNonce(b"012345"), False + ) + resp = builder.sign(private_key, hashes.SHA256()) + assert len(resp.extensions) == 1 + assert resp.extensions[0].value == x509.OCSPNonce(b"012345") + assert resp.extensions[0].critical is False + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) + ) + + @pytest.mark.parametrize( + ("status", "der"), + [ + (ocsp.OCSPResponseStatus.MALFORMED_REQUEST, b"0\x03\n\x01\x01"), + (ocsp.OCSPResponseStatus.INTERNAL_ERROR, b"0\x03\n\x01\x02"), + (ocsp.OCSPResponseStatus.TRY_LATER, b"0\x03\n\x01\x03"), + (ocsp.OCSPResponseStatus.SIG_REQUIRED, b"0\x03\n\x01\x05"), + (ocsp.OCSPResponseStatus.UNAUTHORIZED, b"0\x03\n\x01\x06"), + ] + ) + def test_build_non_successful_statuses(self, status, der): + resp = ocsp.OCSPResponseBuilder.build_unsuccessful(status) + assert resp.response_status is status + assert resp.public_bytes(serialization.Encoding.DER) == der + + def test_invalid_build_not_a_status(self): + with pytest.raises(TypeError): + ocsp.OCSPResponseBuilder.build_unsuccessful("notastatus") + + def test_invalid_build_successful_status(self): + with pytest.raises(ValueError): + ocsp.OCSPResponseBuilder.build_unsuccessful( + ocsp.OCSPResponseStatus.SUCCESSFUL + ) + + class TestOCSPResponse(object): def test_bad_response(self): with pytest.raises(ValueError): From d9451fb17f2827378db6d34050fa93916754b58a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 08:45:51 +0800 Subject: [PATCH 418/988] add SCT_get0_signature (#4540) --- src/_cffi_src/openssl/ct.py | 3 +++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 1 + 2 files changed, 4 insertions(+) diff --git a/src/_cffi_src/openssl/ct.py b/src/_cffi_src/openssl/ct.py index 4aa368993478..71125dd17e09 100644 --- a/src/_cffi_src/openssl/ct.py +++ b/src/_cffi_src/openssl/ct.py @@ -44,6 +44,8 @@ size_t SCT_get0_log_id(const SCT *, unsigned char **); +size_t SCT_get0_signature(const SCT *, unsigned char **); + uint64_t SCT_get_timestamp(const SCT *); int SCT_set_source(SCT *, sct_source_t); @@ -89,6 +91,7 @@ sct_version_t (*SCT_get_version)(const SCT *) = NULL; ct_log_entry_type_t (*SCT_get_log_entry_type)(const SCT *) = NULL; size_t (*SCT_get0_log_id)(const SCT *, unsigned char **) = NULL; +size_t (*SCT_get0_signature)(const SCT *, unsigned char **) = NULL; uint64_t (*SCT_get_timestamp)(const SCT *) = NULL; int (*SCT_set_source)(SCT *, sct_source_t) = NULL; diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 19acdaefc88d..78b9b279f173 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -194,6 +194,7 @@ def cryptography_has_sct(): "SCT_get_version", "SCT_get_log_entry_type", "SCT_get0_log_id", + "SCT_get0_signature", "SCT_get_timestamp", "SCT_set_source", "sk_SCT_num", From 328c314d5b003fb4cc8ddd419a73d58f710956ae Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 12:05:31 +0800 Subject: [PATCH 419/988] add issuingDistributionPoint vectors (#4537) --- docs/development/test-vectors.rst | 24 +++++++++++++++++++ .../custom/crl_idp_fullname_indirect_crl.pem | 11 +++++++++ .../x509/custom/crl_idp_fullname_only.pem | 11 +++++++++ .../x509/custom/crl_idp_fullname_only_aa.pem | 11 +++++++++ .../custom/crl_idp_fullname_only_user.pem | 11 +++++++++ .../x509/custom/crl_idp_only_ca.pem | 11 +++++++++ .../x509/custom/crl_idp_reasons_only.pem | 10 ++++++++ .../crl_idp_relative_user_all_reasons.pem | 11 +++++++++ .../x509/custom/crl_idp_relativename_only.pem | 11 +++++++++ 9 files changed, 111 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_fullname_indirect_crl.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_aa.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_user.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_only_ca.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_reasons_only.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_relative_user_all_reasons.pem create mode 100644 vectors/cryptography_vectors/x509/custom/crl_idp_relativename_only.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index d68e1e933f9a..f585412d9814 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -412,6 +412,30 @@ Custom X.509 Certificate Revocation List Vectors was used to generate it. * ``crl_delta_crl_indicator.pem`` - Contains a CRL with the ``DeltaCRLIndicator`` extension. +* ``crl_idp_fullname_only.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension with only a ``fullname`` for the + distribution point. +* ``crl_idp_only_ca.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension that is only valid for CA certificate + revocation. +* ``crl_idp_fullname_only_aa.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension that sets a ``fullname`` and is only + valid for attribute certificate revocation. +* ``crl_idp_fullname_only_user.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension that sets a ``fullname`` and is only + valid for user certificate revocation. +* ``crl_idp_fullname_indirect_crl.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension that sets a ``fullname`` and the + indirect CRL flag. +* ``crl_idp_reasons_only.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension that is only valid for revocations + with the ``keyCompromise`` reason. +* ``crl_idp_relative_user_all_reasons.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension that sets all revocation reasons as + allowed. +* ``crl_idp_relativename_only.pem`` - Contains a CRL with an + ``IssuingDistributionPoints`` extension with only a ``relativename`` for + the distribution point. X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_indirect_crl.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_indirect_crl.pem new file mode 100644 index 000000000000..f743ec5db886 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_indirect_crl.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBkDB6AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxNDAzNThaFw0xODExMjcxNDAzNThaoDMwMTAvBgNVHRwBAf8EJTAjoB6g +HIYaaHR0cDovL215aG9zdC5jb20vbXljYS5jcmyEAf8wDQYJKoZIhvcNAQELBQAD +ggEBAHczDFKX4Tjem+TnOtb84pMrFeTPGpE+tVDuB78IPM1F6gSFtnc/2a5oMJlk +qmWOFpwJ2+Z7NxTbY3mTzCIUcaCyMg77HCMjHxZYwpcxOZ1e0zrY6s9AskgWMS85 +mu14D8kPRZya/XUZ58FQAkNmNkVvzBccptVYOv9Zm8KH10UMmFICOElVRNyAcxas +2xKnJLuv3dWIVeAiqjC/KDd7bvMNGPC9eg+skhjaSPLmSyIn3B3cRm//NcG4GUPV +NrnmVM+jdYN9MnmtUemONLBWGLOkmQ3QwXCygfrb98ARIu/HgWAJiNm8Yg04tlgJ +rxxjq8OD9hopYk8v5t1abI/7/ks= +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only.pem new file mode 100644 index 000000000000..cf16cdf14408 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBjTB3AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxMzUyNDRaFw0xODExMjcxMzUyNDRaoDAwLjAsBgNVHRwBAf8EIjAgoB6g +HIYaaHR0cDovL215aG9zdC5jb20vbXljYS5jcmwwDQYJKoZIhvcNAQELBQADggEB +AGAoZLMgnYAkHgBTmBj/wB8Nbj6U7KEg4RTHLc+bafrWj7OZLd9R+F+MDdFFBmPt +kMNFn4erU7D5GAU809Dy7wkVZpeM+ea3m5cAq/bZqP2MrgDHsMC9IYRJte9KSpml +TXl2yclQAv3yAsCsB2SiABSs+IZoJeGfVVcHVZqv4xbtkLb1YWk9bwdZYp3J/07z +QFMI+1VqXQMsTI8Eqrk1nzCBdkY8cxoNugpNgiRpsZOIpGx5hjAiE8Q8Z/T85IAP +3V8fMizh/QLzoa2H7goF+92fzipDU6CSFoF8OPT/GAMcjcCIXi+1NNjJZ4MMp6Lk +VapAn4w4p5fhG8SJmlPqixY= +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_aa.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_aa.pem new file mode 100644 index 000000000000..291c4c6b4f42 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_aa.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBkDB6AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxNDAxMzVaFw0xODExMjcxNDAxMzVaoDMwMTAvBgNVHRwBAf8EJTAjoB6g +HIYaaHR0cDovL215aG9zdC5jb20vbXljYS5jcmyFAf8wDQYJKoZIhvcNAQELBQAD +ggEBAHWqHGveY4Ay9LazXsBOMx2ZleRcCe+L9gnI5H+91ALdQblswyKUielBleno +gsfHDzdeFoAQU6b6NtJcV/3N8fx7c6nlyXx1W+0aq5Tsog8YRP3YYq1hyPprz7N4 +dJjgRgbX0udmjQ89g/nroq/g2E9obAYioFGy768pmUQHCRPHkLynRF4xb5BUBzC5 +Wan5McPOFtDjK/YrFFu8oVp0kwD3F2QQf8V8fSnw7z41faxfQtoziVfAdsXLO78c +Mquxy6/xXNqzI0aG/mssv3kZdpsLEu2g9Du0LmwDQoskEocerayFTRY2ut+ud9iB +iYYANAtnza3XUz81mvmR3tM0Aug= +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_user.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_user.pem new file mode 100644 index 000000000000..bd98bdd6bf27 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_fullname_only_user.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBkDB6AgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxNDAzNDBaFw0xODExMjcxNDAzNDBaoDMwMTAvBgNVHRwBAf8EJTAjoB6g +HIYaaHR0cDovL215aG9zdC5jb20vbXljYS5jcmyBAf8wDQYJKoZIhvcNAQELBQAD +ggEBACwZM15oNYnuDA9dGCxnR54Y3iZBENa/ucvp3FrycqgfFcvvbSdZQvRg3KEi +H6E6REJWhllTGqjIn/sthUzuGwb2MT3QKtjXjQAhai4vhoDXJVq+kL1kTNP/W0H+ ++SmJa4VIdDJF3Hs8M86JlUwbP29ZLKHbc3NuMoNXO5h/+hYLtnFBexEDNneD22p3 +GXh3IwG7+rpY9gSAbE5xUuO17lqufYCHR86xmDA9EPdO2xAyVK9+0LxlT5FkDt21 +3tJIA4QOq0dhninVy2QNJj3I5M3ncltPF++3h7gPyYKW5GYkh1xxd9SsFb4ZkSuQ +VbcLbmKmPzyDuMubE3oDCAvbveQ= +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_only_ca.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_only_ca.pem new file mode 100644 index 000000000000..57a8cb8bb5c6 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_only_ca.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBgTBrAgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxMzU1MTZaFw0xODExMjcxMzU1MTZaoCQwIjAgBgNVHRwBAf8EFjAUoA+h +DTALBgNVBAoMBFB5Q0GCAf8wDQYJKoZIhvcNAQELBQADggEBAK9YZZDXmWJLMUc0 +rDkGHpg0+PFPA/adyRCs9bJBSbFcnjS/cPdFM/42VTkMCMWJv+TUjYp5Pb0hZHSI +Kl4SGJWV+GC0utREvmJp6PRq4ppxSAYXqTHZMKha7kV24JAx82Q2cmjvi+Dmx4b1 +pSwvgrr5NFp6AhIKmll/7SgKavMMkfXYRG/phzsrukfb4PnE3GASNJw2h0y66Kp/ +LM2702PELTEAHq5WdAMEpboJIKeeWH13WvYm/mYoyPOzbUyh4rJbaTfCd4s5pY+8 +LAKB43b8Sp62AidbTKtFFRiY8xXMK6bx3/D0f2wncCynTXBNKRp+QMzan4YH9m9u +sBPg5Bw= +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_reasons_only.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_reasons_only.pem new file mode 100644 index 000000000000..8e2a7ad8535a --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_reasons_only.pem @@ -0,0 +1,10 @@ +-----BEGIN X509 CRL----- +MIIBcTBbAgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxMzU0MTFaFw0xODExMjcxMzU0MTFaoBQwEjAQBgNVHRwBAf8EBjAEgwIG +QDANBgkqhkiG9w0BAQsFAAOCAQEAihy3KDcm1eqLogUo+mLnY7b8/om7JHf7n8Sv +dxFCzqEVHTLNMXf1dHGeTFWzJp4fhi62G/tWcrZCQSf1//e2kH7nvsaayWADeSRF +tDYOaictiMWUktQxUUtSDEFPmmuNONNumKR02b7Z3xlzX5l7yyhA8CLHZnSgTvbt +WGJLIiYX2zA46xUe/uHTCVSb2Hrxvjo0mBKyX16piiCLSD6Y8jQHGNjK8ODMn9k8 +r44V9HnU44fbCHpNQAR6fruD1l7kevsMyuDzLi2XoniWyCpd4zlzU2wGewVu5wtr +2WlLlgeYLcUEsDwt697XAjFjQVgka6yxxL+rTJm451ebBuRXiA== +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_relative_user_all_reasons.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_relative_user_all_reasons.pem new file mode 100644 index 000000000000..a2212e608f9a --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_relative_user_all_reasons.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBhjBwAgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxMzU0NDhaFw0xODExMjcxMzU0NDhaoCkwJzAlBgNVHRwBAf8EGzAZoA+h +DTALBgNVBAoMBFB5Q0GBAf+DAwd/gDANBgkqhkiG9w0BAQsFAAOCAQEAKLEFLscW +6p4LXMGlew6eNN/pAweAjGeGLh6QkLqfve1MnZh++/rZkX+lPRcSr8KgJy0ZbaMj +2aEC+ErDrrrrigkNb5TqotR/vB+W5bpyDJWeWPMoA36qNE843a6YSfledU0mQaxy +ISkDGMpepTx3s9K5sHUzkZmuNQtTd9ra14KYG9rsZ6N8yxUhrzEtcw7oxF/Z10I7 +prKLcdg1MbV2/ehjbcC7GeHr84XltZoAOZ+cPaAhoOek5W3NEvpQC6istYKD9vWg +KlgcetwLAdwdsmjTK2g6FI3K5Ek+fMOnTdOzganXYijZrFp1U9syxytPnR1q0uns +/mVgrEaswa8mxA== +-----END X509 CRL----- diff --git a/vectors/cryptography_vectors/x509/custom/crl_idp_relativename_only.pem b/vectors/cryptography_vectors/x509/custom/crl_idp_relativename_only.pem new file mode 100644 index 000000000000..60319c7ee7a8 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/crl_idp_relativename_only.pem @@ -0,0 +1,11 @@ +-----BEGIN X509 CRL----- +MIIBfjBoAgEBMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCElyaW5hIENBFw0x +ODEwMjgxMzUzNTBaFw0xODExMjcxMzUzNTBaoCEwHzAdBgNVHRwBAf8EEzARoA+h +DTALBgNVBAoMBFB5Q0EwDQYJKoZIhvcNAQELBQADggEBAGF3uiDmZ7VVyfHmC1ph +MhbSJobnF0Fuaz2womMIsLja+jWDOW5SjO+Qo2tqjU9E/1XGI5eferUGY3155TFt +Bh9YrZ/AtCMpKbdBo49AJWj0Z5qxUMAN8OTOzUpgloA9wb5PVTtndve/s1wr3jV5 +XOFYFxLpnWsuQavTnqhMPWkCbnsLz0QixvflhaVb3+bc46hJFUxwIccjjJNFLxsO +20u5rOPcS5bOIQY9pIP04/oqthJpw5GgINRFXJ0brF01he9t8dM+vgttmGwklihk +09X/LO+YiXE4SmCubwX2xHpWPZAeLNq+O7VbzU2vhqqw1X3MjBvO6CEKIH0zZ/ar +XuQ= +-----END X509 CRL----- From 983b35e7b0b76e687889f755d62c3a95dd485944 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 29 Oct 2018 21:10:54 +0800 Subject: [PATCH 420/988] create & use _evp_md_from_algorithm and _evp_md_non_null_from_algorithm (#4542) * create & use _evp_md_from_algorithm and _evp_md_non_null_from_algorithm * remove unused import --- .../hazmat/backends/openssl/backend.py | 46 ++++++++----------- .../hazmat/backends/openssl/hashes.py | 5 +- .../hazmat/backends/openssl/hmac.py | 6 +-- .../hazmat/backends/openssl/rsa.py | 27 +++++------ tests/hazmat/primitives/test_rsa.py | 18 ++++++++ 5 files changed, 55 insertions(+), 47 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index bd414fdec2ad..19734a54c5fc 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -181,7 +181,7 @@ def openssl_version_number(self): def create_hmac_ctx(self, key, algorithm): return _HMACContext(self, key, algorithm) - def _build_openssl_digest_name(self, algorithm): + def _evp_md_from_algorithm(self, algorithm): if algorithm.name == "blake2b" or algorithm.name == "blake2s": alg = "{0}{1}".format( algorithm.name, algorithm.digest_size * 8 @@ -189,12 +189,17 @@ def _build_openssl_digest_name(self, algorithm): else: alg = algorithm.name.encode("ascii") - return alg + evp_md = self._lib.EVP_get_digestbyname(alg) + return evp_md + + def _evp_md_non_null_from_algorithm(self, algorithm): + evp_md = self._evp_md_from_algorithm(algorithm) + self.openssl_assert(evp_md != self._ffi.NULL) + return evp_md def hash_supported(self, algorithm): - name = self._build_openssl_digest_name(algorithm) - digest = self._lib.EVP_get_digestbyname(name) - return digest != self._ffi.NULL + evp_md = self._evp_md_from_algorithm(algorithm) + return evp_md != self._ffi.NULL def hmac_supported(self, algorithm): return self.hash_supported(algorithm) @@ -286,9 +291,7 @@ def pbkdf2_hmac_supported(self, algorithm): def derive_pbkdf2_hmac(self, algorithm, length, salt, iterations, key_material): buf = self._ffi.new("unsigned char[]", length) - evp_md = self._lib.EVP_get_digestbyname( - algorithm.name.encode("ascii")) - self.openssl_assert(evp_md != self._ffi.NULL) + evp_md = self._evp_md_non_null_from_algorithm(algorithm) res = self._lib.PKCS5_PBKDF2_HMAC( key_material, len(key_material), @@ -685,10 +688,7 @@ def create_x509_csr(self, builder, private_key, algorithm): ) # Resolve the signature algorithm. - evp_md = self._lib.EVP_get_digestbyname( - algorithm.name.encode('ascii') - ) - self.openssl_assert(evp_md != self._ffi.NULL) + evp_md = self._evp_md_non_null_from_algorithm(algorithm) # Create an empty request. x509_req = self._lib.X509_REQ_new() @@ -767,10 +767,7 @@ def create_x509_certificate(self, builder, private_key, algorithm): ) # Resolve the signature algorithm. - evp_md = self._lib.EVP_get_digestbyname( - algorithm.name.encode('ascii') - ) - self.openssl_assert(evp_md != self._ffi.NULL) + evp_md = self._evp_md_non_null_from_algorithm(algorithm) # Create an empty certificate. x509_cert = self._lib.X509_new() @@ -875,10 +872,7 @@ def create_x509_crl(self, builder, private_key, algorithm): "MD5 is not a supported hash algorithm for EC/DSA CRLs" ) - evp_md = self._lib.EVP_get_digestbyname( - algorithm.name.encode('ascii') - ) - self.openssl_assert(evp_md != self._ffi.NULL) + evp_md = self._evp_md_non_null_from_algorithm(algorithm) # Create an empty CRL. x509_crl = self._lib.X509_CRL_new() @@ -1452,9 +1446,7 @@ def create_ocsp_request(self, builder): self.openssl_assert(ocsp_req != self._ffi.NULL) ocsp_req = self._ffi.gc(ocsp_req, self._lib.OCSP_REQUEST_free) cert, issuer, algorithm = builder._request - evp_md = self._lib.EVP_get_digestbyname( - algorithm.name.encode("ascii")) - self.openssl_assert(evp_md != self._ffi.NULL) + evp_md = self._evp_md_non_null_from_algorithm(algorithm) certid = self._lib.OCSP_cert_to_id( evp_md, cert._x509, issuer._x509 ) @@ -1474,10 +1466,9 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): basic = self._lib.OCSP_BASICRESP_new() self.openssl_assert(basic != self._ffi.NULL) basic = self._ffi.gc(basic, self._lib.OCSP_BASICRESP_free) - evp_md = self._lib.EVP_get_digestbyname( - builder._response._algorithm.name.encode("ascii") + evp_md = self._evp_md_non_null_from_algorithm( + builder._response._algorithm ) - self.openssl_assert(evp_md != self._ffi.NULL) certid = self._lib.OCSP_cert_to_id( evp_md, builder._response._cert._x509, builder._response._issuer._x509 @@ -1516,8 +1507,7 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): ) self.openssl_assert(res != self._ffi.NULL) # okay, now sign the basic structure - evp_md = self._lib.EVP_get_digestbyname(algorithm.name.encode("ascii")) - self.openssl_assert(evp_md != self._ffi.NULL) + evp_md = self._evp_md_non_null_from_algorithm(algorithm) responder_cert, responder_encoding = builder._responder_id flags = self._lib.OCSP_NOCERTS if responder_encoding is ocsp.OCSPResponderEncoding.HASH: diff --git a/src/cryptography/hazmat/backends/openssl/hashes.py b/src/cryptography/hazmat/backends/openssl/hashes.py index 92ea53bb2e28..c39f57dcdcfe 100644 --- a/src/cryptography/hazmat/backends/openssl/hashes.py +++ b/src/cryptography/hazmat/backends/openssl/hashes.py @@ -22,12 +22,11 @@ def __init__(self, backend, algorithm, ctx=None): ctx = self._backend._ffi.gc( ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free ) - name = self._backend._build_openssl_digest_name(algorithm) - evp_md = self._backend._lib.EVP_get_digestbyname(name) + evp_md = self._backend._evp_md_from_algorithm(algorithm) if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( "{0} is not a supported hash on this backend.".format( - name), + algorithm.name), _Reasons.UNSUPPORTED_HASH ) res = self._backend._lib.EVP_DigestInit_ex(ctx, evp_md, diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index 3577f477cb19..99c43f2a91e7 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -25,11 +25,11 @@ def __init__(self, backend, key, algorithm, ctx=None): ctx = self._backend._ffi.gc( ctx, self._backend._lib.Cryptography_HMAC_CTX_free ) - name = self._backend._build_openssl_digest_name(algorithm) - evp_md = self._backend._lib.EVP_get_digestbyname(name) + evp_md = self._backend._evp_md_from_algorithm(algorithm) if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( - "{0} is not a supported hash on this backend".format(name), + "{0} is not a supported hash on this backend".format( + algorithm.name), _Reasons.UNSUPPORTED_HASH ) res = self._backend._lib.HMAC_Init_ex( diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 9a7bfaa570ed..00f5e377427b 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -92,14 +92,11 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): isinstance(padding, OAEP) and backend._lib.Cryptography_HAS_RSA_OAEP_MD ): - mgf1_md = backend._lib.EVP_get_digestbyname( - padding._mgf._algorithm.name.encode("ascii")) - backend.openssl_assert(mgf1_md != backend._ffi.NULL) + mgf1_md = backend._evp_md_non_null_from_algorithm( + padding._mgf._algorithm) res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) backend.openssl_assert(res > 0) - oaep_md = backend._lib.EVP_get_digestbyname( - padding._algorithm.name.encode("ascii")) - backend.openssl_assert(oaep_md != backend._ffi.NULL) + oaep_md = backend._evp_md_non_null_from_algorithm(padding._algorithm) res = backend._lib.EVP_PKEY_CTX_set_rsa_oaep_md(pkey_ctx, oaep_md) backend.openssl_assert(res > 0) @@ -189,15 +186,21 @@ def _rsa_sig_determine_padding(backend, key, padding, algorithm): def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): padding_enum = _rsa_sig_determine_padding(backend, key, padding, algorithm) - evp_md = backend._lib.EVP_get_digestbyname(algorithm.name.encode("ascii")) - backend.openssl_assert(evp_md != backend._ffi.NULL) + evp_md = backend._evp_md_non_null_from_algorithm(algorithm) pkey_ctx = backend._lib.EVP_PKEY_CTX_new(key._evp_pkey, backend._ffi.NULL) backend.openssl_assert(pkey_ctx != backend._ffi.NULL) pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) res = init_func(pkey_ctx) backend.openssl_assert(res == 1) res = backend._lib.EVP_PKEY_CTX_set_signature_md(pkey_ctx, evp_md) - backend.openssl_assert(res > 0) + if res == 0: + backend._consume_errors() + raise UnsupportedAlgorithm( + "{0} is not supported by this backend for RSA signing.".format( + algorithm.name + ), + _Reasons.UNSUPPORTED_HASH + ) res = backend._lib.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding_enum) backend.openssl_assert(res > 0) if isinstance(padding, PSS): @@ -206,10 +209,8 @@ def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): ) backend.openssl_assert(res > 0) - mgf1_md = backend._lib.EVP_get_digestbyname( - padding._mgf._algorithm.name.encode("ascii") - ) - backend.openssl_assert(mgf1_md != backend._ffi.NULL) + mgf1_md = backend._evp_md_non_null_from_algorithm( + padding._mgf._algorithm) res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) backend.openssl_assert(res > 0) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 4d56bcd438f6..ffe62594cd5b 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -634,6 +634,24 @@ def test_prehashed_sign(self, backend): public_key = private_key.public_key() public_key.verify(signature, message, pss, hashes.SHA1()) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported( + hashes.BLAKE2s(digest_size=32)), + skip_message="Does not support BLAKE2s", + ) + @pytest.mark.supported( + only_if=lambda backend: backend.rsa_padding_supported( + padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) + ), + skip_message="Does not support PSS." + ) + def test_unsupported_hash(self, backend): + private_key = RSA_KEY_512.private_key(backend) + message = b"one little message" + pss = padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=0) + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): + private_key.sign(message, pss, hashes.BLAKE2s(32)) + @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) From 2f15dfbd5b49ef44bc61ab8e614a48a9579d2420 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 30 Oct 2018 04:53:33 +0800 Subject: [PATCH 421/988] move linkcheck to travis (#4544) * move linkcheck to travis only run it on master merges just like we do on jenkins * don't build for a PR --- .travis.yml | 4 ++++ Jenkinsfile | 11 ----------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 87edf43522dc..5b8bbbbce084 100644 --- a/.travis.yml +++ b/.travis.yml @@ -138,6 +138,10 @@ matrix: # urllib3 tests fail on xenial for whatever reason dist: trusty sudo: false + - python: 2.7 + services: docker + env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster + if: branch = master AND type != pull_request install: - ./.travis/install.sh diff --git a/Jenkinsfile b/Jenkinsfile index b9d869867293..14a1ed7fd37c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -28,17 +28,6 @@ def configs = [ ], ] -/* Add the linkcheck job to our config list if we're on master */ -if (env.BRANCH_NAME == "master") { - configs.add( - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-buster', - toxenvs: ['docs-linkcheck'], - ] - ) -} - def checkout_git(label) { retry(3) { def script = "" From aa5f7a69b0af7242d3505752daac816240247c64 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 30 Oct 2018 05:01:35 +0800 Subject: [PATCH 422/988] Simplify build matrix (#4543) * simplify pep8 * remove buster/sid 2.7 jobs --- .travis.yml | 10 +--------- tox.ini | 6 ------ 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5b8bbbbce084..de90b06d0001 100644 --- a/.travis.yml +++ b/.travis.yml @@ -74,15 +74,9 @@ matrix: - python: 3.5 services: docker env: TOXENV=py35 DOCKER=pyca/cryptography-runner-stretch - - python: 2.7 - services: docker - env: TOXENV=py27 DOCKER=pyca/cryptography-runner-buster - python: 3.6 services: docker env: TOXENV=py36 DOCKER=pyca/cryptography-runner-buster - - python: 2.7 - services: docker - env: TOXENV=py27 DOCKER=pyca/cryptography-runner-sid - python: 3.6 services: docker env: TOXENV=py36 DOCKER=pyca/cryptography-runner-sid @@ -111,10 +105,8 @@ matrix: apt: packages: - libenchant-dev - - python: 2.7 - env: TOXENV=pep8 - python: 3.4 - env: TOXENV=py3pep8 + env: TOXENV=pep8 - python: 2.7 env: DOWNSTREAM=pyopenssl diff --git a/tox.ini b/tox.ini index ea5995e94e56..7e6b56ca1eac 100644 --- a/tox.ini +++ b/tox.ini @@ -56,12 +56,6 @@ commands = sphinx-build -W -b linkcheck docs docs/_build/html [testenv:pep8] -extras = - pep8test -commands = - flake8 . - -[testenv:py3pep8] basepython = python3 extras = pep8test From f216775ca281906b742b632ba5166e354d2f1fc5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 29 Oct 2018 19:38:39 -0400 Subject: [PATCH 423/988] Put the linkcheck build next to the other docs build (#4546) --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index de90b06d0001..b2f0d4735c18 100644 --- a/.travis.yml +++ b/.travis.yml @@ -105,6 +105,10 @@ matrix: apt: packages: - libenchant-dev + - python: 2.7 + services: docker + env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster + if: branch = master AND type != pull_request - python: 3.4 env: TOXENV=pep8 @@ -130,10 +134,6 @@ matrix: # urllib3 tests fail on xenial for whatever reason dist: trusty sudo: false - - python: 2.7 - services: docker - env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster - if: branch = master AND type != pull_request install: - ./.travis/install.sh From d91401d4d38d7f738392a69df43b4fd8b8e6c6e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Tue, 30 Oct 2018 00:28:05 +0000 Subject: [PATCH 424/988] do not pass conversion on Solaris (#4545) --- src/_cffi_src/build_openssl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 180cb7793ca6..5676144da699 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -46,7 +46,7 @@ def _extra_compile_args(platform): When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 we can revisit this. """ - if platform not in ["win32", "hp-ux11"]: + if platform not in ["win32", "hp-ux11", "sunos5"]: return ["-Wconversion", "-Wno-error=sign-conversion"] else: return [] From 74ce48c5d00e4846740d248a65d35b874f15afe2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 30 Oct 2018 10:23:30 +0800 Subject: [PATCH 425/988] Add eq/ne/hash to PrecertificateSignedCertificateTimestamps (#4534) * Add eq/ne/hash to PrecertificateSignedCertificateTimestamps This requires adding it to SignedCertificateTimestamps as well * slightly more consistent * right, these need to be conditional * compare by signature * don't use private API --- .../hazmat/backends/openssl/x509.py | 20 +++ src/cryptography/x509/extensions.py | 15 ++ tests/x509/test_x509_ext.py | 154 ++++++++++++++++++ 3 files changed, 189 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index ad838b7f250d..ac1838c6d131 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -534,3 +534,23 @@ def entry_type(self): # we only have precerts. assert entry_type == self._backend._lib.CT_LOG_ENTRY_TYPE_PRECERT return x509.certificate_transparency.LogEntryType.PRE_CERTIFICATE + + @property + def _signature(self): + ptrptr = self._backend._ffi.new("unsigned char **") + res = self._backend._lib.SCT_get0_signature(self._sct, ptrptr) + self._backend.openssl_assert(res > 0) + self._backend.openssl_assert(ptrptr[0] != self._backend._ffi.NULL) + return self._backend._ffi.buffer(ptrptr[0], res)[:] + + def __hash__(self): + return hash(self._signature) + + def __eq__(self, other): + if not isinstance(other, _SignedCertificateTimestamp): + return NotImplemented + + return self._signature == other._signature + + def __ne__(self, other): + return not self == other diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index b2d9908e7cfd..6301af5a29e7 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1402,6 +1402,21 @@ def __repr__(self): ) ) + def __hash__(self): + return hash(tuple(self._signed_certificate_timestamps)) + + def __eq__(self, other): + if not isinstance(other, PrecertificateSignedCertificateTimestamps): + return NotImplemented + + return ( + self._signed_certificate_timestamps == + other._signed_certificate_timestamps + ) + + def __ne__(self, other): + return not self == other + @utils.register_interface(ExtensionType) class OCSPNonce(object): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 7a43c851a43f..9eac9a27c670 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4469,6 +4469,85 @@ def test_generate(self, backend): assert isinstance(poison, x509.PrecertPoison) +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestSignedCertificateTimestamps(object): + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_eq(self, backend): + sct = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + sct2 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + assert sct == sct2 + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_ne(self, backend): + sct = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + sct2 = _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + assert sct != sct2 + assert sct != object() + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_hash(self, backend): + sct = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + sct2 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + sct3 = _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value[0] + assert hash(sct) == hash(sct2) + assert hash(sct) != hash(sct3) + + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestPrecertificateSignedCertificateTimestampsExtension(object): @@ -4481,6 +4560,81 @@ def test_repr(self): "" ) + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_eq(self, backend): + psct1 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + psct2 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + assert psct1 == psct2 + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_ne(self, backend): + psct1 = _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + psct2 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + assert psct1 != psct2 + assert psct1 != object() + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_hash(self, backend): + psct1 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + psct2 = _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + psct3 = _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend + ).extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ).value + assert hash(psct1) == hash(psct2) + assert hash(psct1) != hash(psct3) + @pytest.mark.supported( only_if=lambda backend: ( backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), From 84f6c1b20609d81a5c2184cedcea7776b9188790 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 29 Oct 2018 23:18:41 -0400 Subject: [PATCH 426/988] Whitelist NTT for linkcheck (#4547) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 66dae738feac..d6ad9490c479 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -184,4 +184,6 @@ "https://ci.cryptography.io/" "job/cryptography-support-jobs/job/openssl-release-1.1/" ), + # Small DH key results in a TLS failure on modern OpenSSL + "https://info.isl.ntt.co.jp/crypt/eng/camellia/", ] From f5ab0deff99c8c73e3a8ef46a4b6e567844b2555 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 30 Oct 2018 12:48:53 +0800 Subject: [PATCH 427/988] add pkcs12 test vectors (#4535) * add pkcs12 test vectors * add more explanatino --- docs/development/test-vectors.rst | 20 ++++++++++++++++++ .../pkcs12/cert-key-aes256cbc.p12 | Bin 0 -> 948 bytes .../pkcs12/cert-none-key-none.p12 | Bin 0 -> 756 bytes .../pkcs12/cert-rc2-key-3des.p12 | Bin 0 -> 854 bytes .../x509/custom/ca/ca.pem | 10 +++++++++ .../x509/custom/ca/ca_key.pem | 5 +++++ 6 files changed, 35 insertions(+) create mode 100644 vectors/cryptography_vectors/pkcs12/cert-key-aes256cbc.p12 create mode 100644 vectors/cryptography_vectors/pkcs12/cert-none-key-none.p12 create mode 100644 vectors/cryptography_vectors/pkcs12/cert-rc2-key-3des.p12 create mode 100644 vectors/cryptography_vectors/x509/custom/ca/ca.pem create mode 100644 vectors/cryptography_vectors/x509/custom/ca/ca_key.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index f585412d9814..083283b7e4ed 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -98,6 +98,9 @@ Custom asymmetric vectors * ``asymmetric/public/PKCS1/rsa.pub.pem`` and ``asymmetric/public/PKCS1/rsa.pub.der`` are PKCS1 conversions of the public key from ``asymmetric/PKCS8/unenc-rsa-pkcs8.pem`` using PEM and DER encoding. +* ``x509/custom/ca/ca_key.pem`` - An unencrypted PCKS8 ``secp256r1`` key. It is + the private key for the certificate ``x509/custom/ca/ca.pem``. This key is + encoded in several of the PKCS12 custom vectors. Key exchange @@ -351,6 +354,9 @@ Custom X.509 Vectors a ``policyConstraints`` extension with a ``requireExplicitPolicy`` value. * ``freshestcrl.pem`` - A self-signed certificate containing a ``freshestCRL`` extension. +* ``ca/ca.pem`` - A self-signed certificate with ``basicConstraints`` set to + true. Its private key is ``ca/ca_key.pem``. This certificate is encoded in + several of the PKCS12 custom vectors. Custom X.509 Request Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -467,6 +473,20 @@ Custom X.509 OCSP Test Vectors * ``x509/ocsp/req-ext-nonce.der`` - An OCSP request containing a nonce extension. +Custom PKCS12 Test Vectors +~~~~~~~~~~~~~~~~~~~~~~~~~~ +* ``pkcs12/cert-key-aes256cbc.p12`` - A PKCS12 file containing a cert + (``x509/custom/ca/ca.pem``) and key (``x509/custom/ca/ca_key.pem``) + both encrypted with AES 256 CBC with the password ``cryptography``. +* ``pkcs12/cert-none-key-none.p12`` - A PKCS12 file containing a cert + (``x509/custom/ca/ca.pem``) and key (``x509/custom/ca/ca_key.pem``) + with no encryption. The password (used for integrity checking only) is + ``cryptography``. +* ``cert-rc2-key-3des.p12`` - A PKCS12 file containing a cert + (``x509/custom/ca/ca.pem``) encrypted with RC2 and key + (``x509/custom/ca/ca_key.pem``) encrypted via 3DES with the password + ``cryptography``. + Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/pkcs12/cert-key-aes256cbc.p12 b/vectors/cryptography_vectors/pkcs12/cert-key-aes256cbc.p12 new file mode 100644 index 0000000000000000000000000000000000000000..5bb25fa0b671512f6a0d418443b9b1ea559b4af4 GIT binary patch literal 948 zcmXqLV&1^S$ZXKWT*k(!)#lOmotKfFaX}MvI!hCCGEg|)povKZA;q?!iAfYFB*?_b z0HnAOGK>bEa1JZ4fsKJQg3DvT$HJkpXU+3pJsNwNm^c^=WZ5_q+B_IjnOPXMSOnDf zDlXn_diILoqPCS8cW!QKXky&3s%q2DjkDO2GZt4DR!3He50Y6 zBDebU^~k$FvOaBJwbF#u$70FzLvx=dI;QNpQ6+ydZ1Iw1v65MrvMVx@=KM`kpKf6bg%|B&a zU+r1JBOn-B{cp!F0ll?#`KKPeUNz~%>f_5-Hi#}!OcuL0-Qe=`W{zD#mab<)OXkFs zF_?rl^5~umx+%_cBBgryydz73EaQ3&itZUoGp;+gH225mm+24wuJHc0}u-# zN-6Z7?z1$lBl3NMx&PSsEL^|1t=e&5tLUdk!VWK-OqY9~U3)0KeCo+v#R5xTboN`_ zTBMRxy4Fs|KjkD3%l^1{-G~aUW8!>?eh#yqZY_ulJM#By9IJ}_mh!3d9+ldkdw*;t z8^@akWsX{r22G5{@E8XrAx0IJCPoFIunZ7OuyI3E7Y`RB(}Ko_295U!C780{S*O$G zM6o59+j(g`%TG2b-PrtCvgc{Z0+z-J7C#;0t>QkO(BaWzY35eDQ2Bc8!7to3YDTjc zh5GDx_tt&;i>fJY#Tm~+nrt(aAGq0<7io~)keD@>ZWI$%W z@DazI?Kf*4zF$@7nKf_I8#eb{`2kTImwWtXP>w7LwU1WGpL;^>nvYOWVc=DjE{{J8 z^rUhWPh5Om7qWH2{?G3&wFCe-H)#RH^|CFAm9_rr;ZmL}U)A(zl zj)9?pq5&rxt2Q4qlN2ihi%1;HGU2lV?>yZcHy*BXTNrF6qW7AGBeuSl`_-qp_d%Hl E0Biq=yZ`_I literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/pkcs12/cert-none-key-none.p12 b/vectors/cryptography_vectors/pkcs12/cert-none-key-none.p12 new file mode 100644 index 0000000000000000000000000000000000000000..b3f5c2a84f446a9ccd238fc7d091fd1d18bfb8e6 GIT binary patch literal 756 zcmXqLV*0?u$ZXKWw2h5ZtIebBJ1-+Uwg1^0IzcLa@(%>u(znKo?o8TieV!+OpVap)3;DO~Je}9JIpAkb;QoV6 z*Y_R$$+}qBK+u36=zdvYM#ldvtOm?L3fZ^Jo(u+VOo|K_h2Hm0kILJz&2jnp1J9S_ zt-BTYBqc=qUfa|?-{ofgj0P!5Y&(}`_(VTs@7ELBn_bSS{8-9eB&cYzQ`9S-Pu*yx zp{jv0JaRZi4aHbQR879w^iSz|>Y@Iv;HJveKaIZ@>KHWMfU5$=ZsRGI#^VN!M+_Pd zB1a!kqRXJMor#eFYuK>l8e}suGO{QzAImyF`*fwOob6P(9`U;;PA;F*C-Uq8C)3o) z8&3Xrd%Dnt8o@}c*9;95fk}r|n~#}Eij{#yL-u(&OX~= z;iTyEX#a^@Jo}i0pOoHVTXyu+`nk)J4f<8` z)h|u(;y<)p`IU(1Q9&J@WhZw2j1(=CmE%=nH|?H(;Q7gI*EjB&I3d68MO2naOT5y< zDz5xBd9m|C zk;akPhfB`9dn|ur`JM-p%AY<7xBC2I>;BSLKLYxvnz*vxvA=5EBsq z`+S~lFZXXVd(s?ndDb_BXXiIee`Bh+XnQN8PqY0M$Naa)j;U@~P_=}u)aGT%^v^~9 z8*O*-_4Gv^Tdwpi%_H{k&kqJWcS@uHBbW&(f)_M?VQKtm(D=@v@iiMaEULK}nHDr| zF=*U~693Gg_-Eb9bn4wV&X=J0XK9@9&G7MKw#CbWCa=5rG<)Uj{!31qmMf(B<)r0a z{BGlB?|H{l>q)lQkw=e&8!Rou7MJ?3RsAQNwnJPwsy^`b&H7M=a<3I9Qy(u{;4=Hm zkEPO#=Qrrd|9IB5`ds{!h1Cax=U#bxHTTj2?;Q`+td@Oty0*giUhM0$cf;miE}FLN zmRzQ0PwYv76 z3v~<(4HOMH*;uvtn3<$l8CXO#875A6A>etqwA?22%AMt|zO~NMEF9bKnZ+-hdRGzT FSpeIMcN+iz literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/x509/custom/ca/ca.pem b/vectors/cryptography_vectors/x509/custom/ca/ca.pem new file mode 100644 index 000000000000..5ca80286ecc5 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/ca/ca.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBUTCB96ADAgECAgIDCTAKBggqhkjOPQQDAjAnMQswCQYDVQQGEwJVUzEYMBYG +A1UEAwwPY3J5cHRvZ3JhcGh5IENBMB4XDTE3MDEwMTEyMDEwMFoXDTM4MTIzMTA4 +MzAwMFowJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD2NyeXB0b2dyYXBoeSBDQTBZ +MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBj/z7v5Obj13cPuwECLBnUGq0/N2CxS +JE4f4BBGZ7VfFblivTvPDG++Gve0oQ+0uctuhrNQ+WxRv8GC177F+QWjEzARMA8G +A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANES742XWm64tkGnz8Dn +pG6u2lHkZFQr3oaVvPcemvlbAiEA0WGGzmYx5C9UvfXIK7NEziT4pQtyESE0uRVK +Xw4nMqk= +-----END CERTIFICATE----- diff --git a/vectors/cryptography_vectors/x509/custom/ca/ca_key.pem b/vectors/cryptography_vectors/x509/custom/ca/ca_key.pem new file mode 100644 index 000000000000..2fb5394195cb --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/ca/ca_key.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgA8Zqz5vLeR0ePZUe +jBfdyMmnnI4U5uAJApWTsMn/RuWhRANCAAQY/8+7+Tm49d3D7sBAiwZ1BqtPzdgs +UiROH+AQRme1XxW5Yr07zwxvvhr3tKEPtLnLboazUPlsUb/Bgte+xfkF +-----END PRIVATE KEY----- From 836250e06b07cac034138786ed455d997dfe93ae Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 30 Oct 2018 12:55:43 +0800 Subject: [PATCH 428/988] suppress healthcheck too slow error (#4548) --- tests/hypothesis/test_fernet.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/hypothesis/test_fernet.py b/tests/hypothesis/test_fernet.py index 5f8f5f517bf8..53e7c54ee3fa 100644 --- a/tests/hypothesis/test_fernet.py +++ b/tests/hypothesis/test_fernet.py @@ -2,17 +2,13 @@ # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. -from hypothesis import given, settings, unlimited +from hypothesis import HealthCheck, given, settings from hypothesis.strategies import binary from cryptography.fernet import Fernet -# Unlimited timeout will become the default in the future. When it does -# we should remove this. See: -# https://hypothesis.readthedocs.io/en/latest/settings.html -# #hypothesis.settings.timeout -@settings(deadline=None, timeout=unlimited) +@settings(suppress_health_check=[HealthCheck.too_slow]) @given(binary()) def test_fernet(data): f = Fernet(Fernet.generate_key()) From 8f24aefd5d136ab47cb68a9bcfbff3a171602077 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 30 Oct 2018 22:10:49 +0800 Subject: [PATCH 429/988] move ObjectIdentifier to break an upcoming import cycle (#4550) --- src/cryptography/hazmat/_oid.py | 67 +++++++++++++++++++++++++++++++++ src/cryptography/x509/oid.py | 60 +---------------------------- 2 files changed, 68 insertions(+), 59 deletions(-) create mode 100644 src/cryptography/hazmat/_oid.py diff --git a/src/cryptography/hazmat/_oid.py b/src/cryptography/hazmat/_oid.py new file mode 100644 index 000000000000..cfe906cd3e84 --- /dev/null +++ b/src/cryptography/hazmat/_oid.py @@ -0,0 +1,67 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography import utils + + +class ObjectIdentifier(object): + def __init__(self, dotted_string): + self._dotted_string = dotted_string + + nodes = self._dotted_string.split(".") + intnodes = [] + + # There must be at least 2 nodes, the first node must be 0..2, and + # if less than 2, the second node cannot have a value outside the + # range 0..39. All nodes must be integers. + for node in nodes: + try: + intnodes.append(int(node, 0)) + except ValueError: + raise ValueError( + "Malformed OID: %s (non-integer nodes)" % ( + self._dotted_string)) + + if len(nodes) < 2: + raise ValueError( + "Malformed OID: %s (insufficient number of nodes)" % ( + self._dotted_string)) + + if intnodes[0] > 2: + raise ValueError( + "Malformed OID: %s (first node outside valid range)" % ( + self._dotted_string)) + + if intnodes[0] < 2 and intnodes[1] >= 40: + raise ValueError( + "Malformed OID: %s (second node outside valid range)" % ( + self._dotted_string)) + + def __eq__(self, other): + if not isinstance(other, ObjectIdentifier): + return NotImplemented + + return self.dotted_string == other.dotted_string + + def __ne__(self, other): + return not self == other + + def __repr__(self): + return "".format( + self.dotted_string, + self._name + ) + + def __hash__(self): + return hash(self.dotted_string) + + @property + def _name(self): + # Lazy import to avoid an import cycle + from cryptography.x509.oid import _OID_NAMES + return _OID_NAMES.get(self, "Unknown OID") + + dotted_string = utils.read_only_property("_dotted_string") diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index d121a8077382..ec19007fe322 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -4,68 +4,10 @@ from __future__ import absolute_import, division, print_function -from cryptography import utils +from cryptography.hazmat._oid import ObjectIdentifier from cryptography.hazmat.primitives import hashes -class ObjectIdentifier(object): - def __init__(self, dotted_string): - self._dotted_string = dotted_string - - nodes = self._dotted_string.split(".") - intnodes = [] - - # There must be at least 2 nodes, the first node must be 0..2, and - # if less than 2, the second node cannot have a value outside the - # range 0..39. All nodes must be integers. - for node in nodes: - try: - intnodes.append(int(node, 0)) - except ValueError: - raise ValueError( - "Malformed OID: %s (non-integer nodes)" % ( - self._dotted_string)) - - if len(nodes) < 2: - raise ValueError( - "Malformed OID: %s (insufficient number of nodes)" % ( - self._dotted_string)) - - if intnodes[0] > 2: - raise ValueError( - "Malformed OID: %s (first node outside valid range)" % ( - self._dotted_string)) - - if intnodes[0] < 2 and intnodes[1] >= 40: - raise ValueError( - "Malformed OID: %s (second node outside valid range)" % ( - self._dotted_string)) - - def __eq__(self, other): - if not isinstance(other, ObjectIdentifier): - return NotImplemented - - return self.dotted_string == other.dotted_string - - def __ne__(self, other): - return not self == other - - def __repr__(self): - return "".format( - self.dotted_string, - self._name - ) - - def __hash__(self): - return hash(self.dotted_string) - - @property - def _name(self): - return _OID_NAMES.get(self, "Unknown OID") - - dotted_string = utils.read_only_property("_dotted_string") - - class ExtensionOID(object): SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9") SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14") From 95af1e391b7155ebffd962b58f0a2b213af33ec3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 31 Oct 2018 09:23:29 +0800 Subject: [PATCH 430/988] add EC OIDs (#4435) * add EC OIDs * move ec oid docs to bottom --- docs/hazmat/primitives/asymmetric/ec.rst | 32 +++++++++++++++++++ .../hazmat/primitives/asymmetric/ec.py | 10 ++++++ 2 files changed, 42 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index e36a5a144544..08a4999bd7ea 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -777,6 +777,38 @@ in PEM format. ... ) +Elliptic Curve Object Identifiers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. class:: EllipticCurveOID + + .. versionadded:: 2.4 + + .. attribute:: SECP192R1 + + Corresponds to the dotted string ``"1.2.840.10045.3.1.1"``. + + .. attribute:: SECP224R1 + + Corresponds to the dotted string ``"1.3.132.0.33"``. + + .. attribute:: SECP256K1 + + Corresponds to the dotted string ``"1.3.132.0.10"``. + + .. attribute:: SECP256R1 + + Corresponds to the dotted string ``"1.2.840.10045.3.1.7"``. + + .. attribute:: SECP384R1 + + Corresponds to the dotted string ``"1.3.132.0.34"``. + + .. attribute:: SECP521R1 + + Corresponds to the dotted string ``"1.3.132.0.35"``. + + .. _`FIPS 186-3`: https://csrc.nist.gov/csrc/media/publications/fips/186/3/archive/2009-06-25/documents/fips_186-3.pdf .. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final .. _`800-56A`: https://csrc.nist.gov/publications/detail/sp/800-56a/revised/archive/2007-03-14 diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index e2e55e9e1369..431ecb7971bd 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -9,6 +9,16 @@ import six from cryptography import utils +from cryptography.hazmat._oid import ObjectIdentifier + + +class EllipticCurveOID(object): + SECP192R1 = ObjectIdentifier("1.2.840.10045.3.1.1") + SECP224R1 = ObjectIdentifier("1.3.132.0.33") + SECP256K1 = ObjectIdentifier("1.3.132.0.10") + SECP256R1 = ObjectIdentifier("1.2.840.10045.3.1.7") + SECP384R1 = ObjectIdentifier("1.3.132.0.34") + SECP521R1 = ObjectIdentifier("1.3.132.0.35") @six.add_metaclass(abc.ABCMeta) From ea34c1a9821545b99b6864af211dead662e75dfc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 3 Nov 2018 19:48:29 +0800 Subject: [PATCH 431/988] add various new TLS bindings (#4555) * add SSL_OP_NO_TLSv1_3 * compiling now * bind SSL_CTX_set_ciphersuites as well * add some more --- src/_cffi_src/openssl/ssl.py | 19 +++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index f9481af190fb..e18807123228 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -17,6 +17,7 @@ static const long Cryptography_HAS_SSL3_METHOD; static const long Cryptography_HAS_TLSv1_1; static const long Cryptography_HAS_TLSv1_2; +static const long Cryptography_HAS_TLSv1_3; static const long Cryptography_HAS_SECURE_RENEGOTIATION; static const long Cryptography_HAS_COMPRESSION; static const long Cryptography_HAS_TLSEXT_STATUS_REQ_CB; @@ -68,6 +69,7 @@ static const long SSL_OP_NO_TLSv1; static const long SSL_OP_NO_TLSv1_1; static const long SSL_OP_NO_TLSv1_2; +static const long SSL_OP_NO_TLSv1_3; static const long SSL_OP_NO_DTLSv1; static const long SSL_OP_NO_DTLSv1_2; static const long SSL_OP_NO_COMPRESSION; @@ -100,6 +102,7 @@ static const long SSL_VERIFY_FAIL_IF_NO_PEER_CERT; static const long SSL_VERIFY_CLIENT_ONCE; static const long SSL_VERIFY_NONE; +static const long SSL_VERIFY_POST_HANDSHAKE; static const long SSL_SESS_CACHE_OFF; static const long SSL_SESS_CACHE_CLIENT; static const long SSL_SESS_CACHE_SERVER; @@ -529,6 +532,11 @@ void *); int SSL_extension_supported(unsigned int); + +int SSL_CTX_set_ciphersuites(SSL_CTX *, const char *); +int SSL_verify_client_post_handshake(SSL *); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *, int); +void SSL_set_post_handshake_auth(SSL *, int); """ CUSTOMIZATIONS = """ @@ -815,4 +823,15 @@ static const long Cryptography_HAS_CIPHER_DETAILS = 1; #endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 +static const long Cryptography_HAS_TLSv1_3 = 0; +static const long SSL_OP_NO_TLSv1_3 = 0; +static const long SSL_VERIFY_POST_HANDSHAKE = 0; +int (*SSL_CTX_set_ciphersuites)(SSL_CTX *, const char *) = NULL; +int (*SSL_verify_client_post_handshake)(SSL *) = NULL; +void (*SSL_CTX_set_post_handshake_auth)(SSL_CTX *, int) = NULL; +void (*SSL_set_post_handshake_auth)(SSL *, int) = NULL; +#else +static const long Cryptography_HAS_TLSv1_3 = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 78b9b279f173..219f163ebdfa 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -290,6 +290,17 @@ def cryptography_has_cipher_details(): ] +def cryptography_has_tlsv13(): + return [ + "SSL_OP_NO_TLSv1_3", + "SSL_VERIFY_POST_HANDSHAKE", + "SSL_CTX_set_ciphersuites", + "SSL_verify_client_post_handshake", + "SSL_CTX_set_post_handshake_auth", + "SSL_set_post_handshake_auth", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -351,4 +362,5 @@ def cryptography_has_cipher_details(): "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext, "Cryptography_HAS_OPENSSL_CLEANUP": cryptography_has_openssl_cleanup, "Cryptography_HAS_CIPHER_DETAILS": cryptography_has_cipher_details, + "Cryptography_HAS_TLSv1_3": cryptography_has_tlsv13, } From 94c13bb5de37006ee69e7dfa376c1a6beed67efc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 3 Nov 2018 23:30:57 +0800 Subject: [PATCH 432/988] additional pkcs12 test vector (#4554) --- docs/development/test-vectors.rst | 3 +++ .../cryptography_vectors/pkcs12/no-password.p12 | Bin 0 -> 948 bytes 2 files changed, 3 insertions(+) create mode 100644 vectors/cryptography_vectors/pkcs12/no-password.p12 diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 083283b7e4ed..12def6c6e2ed 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -486,6 +486,9 @@ Custom PKCS12 Test Vectors (``x509/custom/ca/ca.pem``) encrypted with RC2 and key (``x509/custom/ca/ca_key.pem``) encrypted via 3DES with the password ``cryptography``. +* ``no-password.p12`` - A PKCS12 file containing a cert + (``x509/custom/ca/ca.pem``) and key (``x509/custom/ca/ca_key.pem``) with no + encryption and no password. Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/pkcs12/no-password.p12 b/vectors/cryptography_vectors/pkcs12/no-password.p12 new file mode 100644 index 0000000000000000000000000000000000000000..994dabb2ab46c823ce6c28d6619eb4c6f9edd0cb GIT binary patch literal 948 zcmXqLV&1^S$ZXKWT+YU+)#lOmotKfFaX}Mv21^rj3Q#z~povKxA;q?!iAe$|B*MhV z0Hk;kGK>Z?Y+O(ico^9X_*ghtr%KqfXdN|YV&Y(EXkvWeZ+c*zX2;?`-eLxVAHH9T zxyRglO*~AlrA(Ro_m0HUWj>!L7e8ZR=ziYTF=0Wu#-%w~69alury24!nSWW+x2wqJ zZrX!H#(>~oK}ozH4UgYE9KTCAt;^@4kJu@{JsrYp{kGJ8QEFpQ>OQJ@Cc{{lYM?oNOsb;%ghmtX0uPtES5D?SNyfy zWD;Ag>kr)>xd%7?;(IOs@9~=zIZK~5US|KsQOt2|vSjx4OZU1gPkScZ$zOlR{=AiR zNy4&ZQ81g z3jLYo<`XjdeC}tNS1o!wZKu!^q4LFdlivO~`te7gMYa39vZe2)RxML44LS2%@6E^8 zCfnq1Yb>9}RO1$)=1_LvV9U|n)794qzWUN(d+WPGR~jDN~noCiMedM!*f617=wI#K2Itf@k$j>&MB?eXC%5OF;6 zbI)B3CR3Z-tJ{?y+)JIFKZR9Gb>DP@CPqV~1hJrrQHiCAQ4T091;k=(+_2=q#mKav zagRacPLwpm3`#TWr+w6%#U{QQlxA2OXS_2gQ=Tm7XuEa2m`v>z=9u`x+4t(XP2#Uk zZLCkTu}^7y;bH7ZIx5D$s8PA>Gr=l({*!*<8g!q}mQcV{o zemSrDcc0_7ZZS2~>N)oEn?UKJ^SY0I|- zbD!0EYuQVN2Ay`AS@=F{%K8gJC(UjJzPYu9_m!cCfg;?ioFaxIazYGd3{DKr42D43 zh{1)yk%7TL8KFefP>e<7&+9EWgg%|Loq5nWR`5 pSVVGt{@gpBdFSsHwut0iCOiYPr{;V9MqCOu*IyR}S=i~t!Hll}kz literal 0 HcmV?d00001 From 98420eac4525345cd95c2afa71a04089db8ac8e6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 4 Nov 2018 23:19:22 +0800 Subject: [PATCH 433/988] another pkcs12 vector (#4557) * another pkcs12 vector also fixed the pathing to be consistent in the docs for PKCS12 vectors * add a cert with no key pkcs12 as well --- docs/development/test-vectors.rst | 10 ++++++++-- .../pkcs12/cert-aes256cbc-no-key.p12 | Bin 0 -> 605 bytes .../pkcs12/no-cert-key-aes256cbc.p12 | Bin 0 -> 353 bytes 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 vectors/cryptography_vectors/pkcs12/cert-aes256cbc-no-key.p12 create mode 100644 vectors/cryptography_vectors/pkcs12/no-cert-key-aes256cbc.p12 diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 12def6c6e2ed..e5ff70bb08a4 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -482,13 +482,19 @@ Custom PKCS12 Test Vectors (``x509/custom/ca/ca.pem``) and key (``x509/custom/ca/ca_key.pem``) with no encryption. The password (used for integrity checking only) is ``cryptography``. -* ``cert-rc2-key-3des.p12`` - A PKCS12 file containing a cert +* ``pkcs12/cert-rc2-key-3des.p12`` - A PKCS12 file containing a cert (``x509/custom/ca/ca.pem``) encrypted with RC2 and key (``x509/custom/ca/ca_key.pem``) encrypted via 3DES with the password ``cryptography``. -* ``no-password.p12`` - A PKCS12 file containing a cert +* ``pkcs12/no-password.p12`` - A PKCS12 file containing a cert (``x509/custom/ca/ca.pem``) and key (``x509/custom/ca/ca_key.pem``) with no encryption and no password. +* ``pkcs12/no-cert-key-aes256cbc.p12`` - A PKCS12 file containing a key + (``x509/custom/ca/ca_key.pem``) encrypted via AES 256 CBC with the + password ``cryptography`` and no certificate. +* ``pkcs12/cert-aes256cbc-no-key.p12`` - A PKCS12 file containing a cert + (``x509/custom/ca/ca.pem``) encrypted via AES 256 CBC with the + password ``cryptography`` and no private key. Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/pkcs12/cert-aes256cbc-no-key.p12 b/vectors/cryptography_vectors/pkcs12/cert-aes256cbc-no-key.p12 new file mode 100644 index 0000000000000000000000000000000000000000..2550c8e317bfb7c04d3c15a90a187887c3f6e6d4 GIT binary patch literal 605 zcmXqLVv1y9WHxAGl4s-8YV&CO&dbQoxS)wifTf9v2Pn(|#4HFYwgpX$Uk#cVKQb{g z0I6398Abz7IER(jz{Wrt!R0aFW8rAi=zd?(R?x%5#KB-7%f^||=E0cC%)+R}B2Z^{ zh5e08YRP?7s}q~74TBn*7$>MEne1U&uICYcZrO$a#4t9ma~Or9uXdcJR!!8KWSmahd@`C0T^ zn|(LS33-aGonU42>uk<{Ta87VKNsxJozi3T(>+8v=un_k;ZZy7(26GuL=M>mxtVpl zDQ*;=!De3nn8$=|stxMzh5VYj>>BCoUY`a-xJlnv~K+%Acja8eEnMsP3fkmV`_*wWq>2FLu?JaxX YxGxIze$SJ~!lBCgp#HaHbTKHF0d}MDw*UYD literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/pkcs12/no-cert-key-aes256cbc.p12 b/vectors/cryptography_vectors/pkcs12/no-cert-key-aes256cbc.p12 new file mode 100644 index 0000000000000000000000000000000000000000..7c56b45047055546e52285298930cd25dd14ea70 GIT binary patch literal 353 zcmXqLVvJ>CWHxAGRA%GUYV&CO&dbQoxS)wqgr$j504U4@#2m;{jlWnLzZ*1uF=+hA z#tqfM!^Oz7pz)zW<2?gUxLQ_T0~-Tr1eeEvkA=f}((A^Q<>FyXOdJdbvTU3QZ61uN z%q)yrECS2q{{I)4^(}$-X^b_e6?YIzv Zx$ypXj}@HESvXG2wJAGlq8kVDBmn5Qh0p*1 literal 0 HcmV?d00001 From 7d3daefc4db664cd7c344a59c0cad99c4bcd82eb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 5 Nov 2018 07:20:26 +0800 Subject: [PATCH 434/988] parametrize a bunch of tests (#4365) --- tests/hazmat/primitives/test_rsa.py | 339 +++++----------------------- 1 file changed, 58 insertions(+), 281 deletions(-) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index ffe62594cd5b..268ee9d92f40 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -1853,304 +1853,81 @@ def test_public_numbers_invalid_types(self): with pytest.raises(TypeError): rsa.RSAPublicNumbers(e=1, n=None) - def test_private_numbers_invalid_types(self): - public_numbers = rsa.RSAPublicNumbers(e=1, n=15) - - with pytest.raises(TypeError): - rsa.RSAPrivateNumbers( - p=None, - q=5, - d=1, - dmp1=1, - dmq1=1, - iqmp=2, - public_numbers=public_numbers - ) - - with pytest.raises(TypeError): - rsa.RSAPrivateNumbers( - p=3, - q=None, - d=1, - dmp1=1, - dmq1=1, - iqmp=2, - public_numbers=public_numbers - ) - - with pytest.raises(TypeError): - rsa.RSAPrivateNumbers( - p=3, - q=5, - d=None, - dmp1=1, - dmq1=1, - iqmp=2, - public_numbers=public_numbers - ) - - with pytest.raises(TypeError): - rsa.RSAPrivateNumbers( - p=3, - q=5, - d=1, - dmp1=None, - dmq1=1, - iqmp=2, - public_numbers=public_numbers - ) - - with pytest.raises(TypeError): - rsa.RSAPrivateNumbers( - p=3, - q=5, - d=1, - dmp1=1, - dmq1=None, - iqmp=2, - public_numbers=public_numbers - ) - + @pytest.mark.parametrize( + ("p", "q", "d", "dmp1", "dmq1", "iqmp", "public_numbers"), + [ + (None, 5, 1, 1, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)), + (3, None, 1, 1, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)), + (3, 5, None, 1, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)), + (3, 5, 1, None, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)), + (3, 5, 1, 1, None, 2, rsa.RSAPublicNumbers(e=1, n=15)), + (3, 5, 1, 1, 1, None, rsa.RSAPublicNumbers(e=1, n=15)), + (3, 5, 1, 1, 1, 2, None), + ] + ) + def test_private_numbers_invalid_types(self, p, q, d, dmp1, dmq1, iqmp, + public_numbers): with pytest.raises(TypeError): rsa.RSAPrivateNumbers( - p=3, - q=5, - d=1, - dmp1=1, - dmq1=1, - iqmp=None, + p=p, q=q, + d=d, + dmp1=dmp1, + dmq1=dmq1, + iqmp=iqmp, public_numbers=public_numbers ) - with pytest.raises(TypeError): - rsa.RSAPrivateNumbers( - p=3, - q=5, - d=1, - dmp1=1, - dmq1=1, - iqmp=2, - public_numbers=None - ) - - def test_invalid_public_numbers_argument_values(self, backend): + @pytest.mark.parametrize( + ("e", "n"), + [ + (7, 2), # modulus < 3 + (1, 15), # public_exponent < 3 + (17, 15), # public_exponent > modulus + (14, 15), # public_exponent not odd + ] + ) + def test_invalid_public_numbers_argument_values(self, e, n, backend): # Start with public_exponent=7, modulus=15. Then change one value at a # time to test the bounds. - # Test a modulus < 3. - - with pytest.raises(ValueError): - rsa.RSAPublicNumbers(e=7, n=2).public_key(backend) - - # Test a public_exponent < 3 - with pytest.raises(ValueError): - rsa.RSAPublicNumbers(e=1, n=15).public_key(backend) - - # Test a public_exponent > modulus - with pytest.raises(ValueError): - rsa.RSAPublicNumbers(e=17, n=15).public_key(backend) - - # Test a public_exponent that is not odd. with pytest.raises(ValueError): - rsa.RSAPublicNumbers(e=14, n=15).public_key(backend) + rsa.RSAPublicNumbers(e=e, n=n).public_key(backend) - def test_invalid_private_numbers_argument_values(self, backend): + @pytest.mark.parametrize( + ("p", "q", "d", "dmp1", "dmq1", "iqmp", "e", "n"), + [ + (3, 11, 3, 1, 3, 2, 7, 2), # modulus < 3 + (3, 11, 3, 1, 3, 2, 7, 35), # modulus != p * q + (37, 11, 3, 1, 3, 2, 7, 33), # p > modulus + (3, 37, 3, 1, 3, 2, 7, 33), # q > modulus + (3, 11, 3, 35, 3, 2, 7, 33), # dmp1 > modulus + (3, 11, 3, 1, 35, 2, 7, 33), # dmq1 > modulus + (3, 11, 3, 1, 3, 35, 7, 33), # iqmp > modulus + (3, 11, 37, 1, 3, 2, 7, 33), # d > modulus + (3, 11, 3, 1, 3, 2, 1, 33), # public_exponent < 3 + (3, 11, 3, 1, 3, 35, 65537, 33), # public_exponent > modulus + (3, 11, 3, 1, 3, 2, 6, 33), # public_exponent is not odd + (3, 11, 3, 2, 3, 2, 7, 33), # dmp1 is not odd + (3, 11, 3, 1, 4, 2, 7, 33), # dmq1 is not odd + ] + ) + def test_invalid_private_numbers_argument_values(self, p, q, d, dmp1, dmq1, + iqmp, e, n, backend): # Start with p=3, q=11, private_exponent=3, public_exponent=7, # modulus=33, dmp1=1, dmq1=3, iqmp=2. Then change one value at # a time to test the bounds. - # Test a modulus < 3. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=2 - ) - ).private_key(backend) - - # Test a modulus != p * q. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=35 - ) - ).private_key(backend) - - # Test a p > modulus. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=37, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test a q > modulus. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=37, - d=3, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test a dmp1 > modulus. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=35, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test a dmq1 > modulus. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=35, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test an iqmp > modulus. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=35, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test a private_exponent > modulus - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=37, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test a public_exponent < 3 - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=1, - n=33 - ) - ).private_key(backend) - - # Test a public_exponent > modulus - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=35, - public_numbers=rsa.RSAPublicNumbers( - e=65537, - n=33 - ) - ).private_key(backend) - - # Test a public_exponent that is not odd. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=6, - n=33 - ) - ).private_key(backend) - - # Test a dmp1 that is not odd. - with pytest.raises(ValueError): - rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=2, - dmq1=3, - iqmp=2, - public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 - ) - ).private_key(backend) - - # Test a dmq1 that is not odd. with pytest.raises(ValueError): rsa.RSAPrivateNumbers( - p=3, - q=11, - d=3, - dmp1=1, - dmq1=4, - iqmp=2, + p=p, + q=q, + d=d, + dmp1=dmp1, + dmq1=dmq1, + iqmp=iqmp, public_numbers=rsa.RSAPublicNumbers( - e=7, - n=33 + e=e, + n=n ) ).private_key(backend) From 5e52fdc5f8f3b6c970051c1bf3325b2d0ed8a5db Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 11 Nov 2018 17:48:23 -0500 Subject: [PATCH 435/988] bump versions and update changelog for 2.4 release (#4568) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c8952c2791b2..ac3b4e176c2b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-4: -2.4 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.4 - 2018-11-11 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL 2.4.x. * Deprecated OpenSSL 1.0.1 support. OpenSSL 1.0.1 is no longer supported by diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 8811cc2aba0c..e27f8c06710d 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.4.dev1" +__version__ = "2.4" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 4b46fbee5c0d..74c77b1ae1e4 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.4.dev1" +__version__ = "2.4" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From db08466131a2d495e4bf58e34bf8d0090be04a2d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 11 Nov 2018 19:50:10 -0500 Subject: [PATCH 436/988] Revert O_CLOEXEC change to fix builds (#4570) --- CHANGELOG.rst | 7 +++++++ src/_cffi_src/openssl/src/osrandom_engine.c | 11 +++++++++-- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ac3b4e176c2b..6ea810cbfc2e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v2-4-1: + +2.4.1 - 2018-11-11 +~~~~~~~~~~~~~~~~~~ + +* Fixed a build breakage in our ``manylinux1`` wheels. + .. _v2-4: 2.4 - 2018-11-11 diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 24dedda481e1..947c79aac0e3 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -92,7 +92,7 @@ static struct { /* return -1 on error */ static int dev_urandom_fd(void) { - int fd, n; + int fd, n, flags; struct stat st; /* Check that fd still points to the correct device */ @@ -106,13 +106,20 @@ static int dev_urandom_fd(void) { } } if (urandom_cache.fd < 0) { - fd = open("/dev/urandom", O_RDONLY | O_CLOEXEC); + fd = open("/dev/urandom", O_RDONLY); if (fd < 0) { goto error; } if (fstat(fd, &st)) { goto error; } + /* set CLOEXEC flag */ + flags = fcntl(fd, F_GETFD); + if (flags == -1) { + goto error; + } else if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { + goto error; + } /* Another thread initialized the fd */ if (urandom_cache.fd >= 0) { do { diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index e27f8c06710d..adedd76247f5 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.4" +__version__ = "2.4.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 74c77b1ae1e4..a235572f53db 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.4" +__version__ = "2.4.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 5edac0c32baa8b9241284f3f9eebd4271bf7c57b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 11 Nov 2018 21:21:16 -0500 Subject: [PATCH 437/988] reopen master for 2.5 development (#4571) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6ea810cbfc2e..262c1f27690b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v2-5: + +2.5 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-4-1: 2.4.1 - 2018-11-11 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index adedd76247f5..75a5418a85cd 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.4.1" +__version__ = "2.5.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index a235572f53db..07ca6c7b56dc 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.4.1" +__version__ = "2.5.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 6654329097ad35e451453f14391c04e44c1d060e Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sun, 11 Nov 2018 18:21:27 -0800 Subject: [PATCH 438/988] Remove unnecessary use of six.binary_type (#4569) All supported Pythons have type bytes. On Python 2, it is an alias of str, same as six.binary_type. Makes the code slightly more forward compatible and removes some indirection. --- src/cryptography/x509/extensions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 6301af5a29e7..fc5c17a9ff6b 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -43,7 +43,7 @@ def _key_identifier_from_public_key(public_key): serialization.PublicFormat.SubjectPublicKeyInfo ) - data = six.binary_type(PublicKeyInfo.load(serialized)['public_key']) + data = bytes(PublicKeyInfo.load(serialized)['public_key']) return hashlib.sha1(data).digest() From a30013b4dc53729ca48abee682106a2ed27819a5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 11 Nov 2018 23:07:54 -0500 Subject: [PATCH 439/988] add a few more EC OIDs (#4572) * add a few more EC OIDs * spaces matter --- docs/hazmat/primitives/asymmetric/ec.rst | 78 +++++++++++++++++++ .../hazmat/primitives/asymmetric/ec.py | 13 ++++ 2 files changed, 91 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 08a4999bd7ea..5936cf443b94 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -808,6 +808,84 @@ Elliptic Curve Object Identifiers Corresponds to the dotted string ``"1.3.132.0.35"``. + .. attribute:: BRAINPOOLP256R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.36.3.3.2.8.1.1.7"``. + + .. attribute:: BRAINPOOLP384R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.36.3.3.2.8.1.1.11"``. + + .. attribute:: BRAINPOOLP512R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.36.3.3.2.8.1.1.13"``. + + .. attribute:: SECT163K1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.1"``. + + .. attribute:: SECT163R2 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.15"``. + + .. attribute:: SECT233K1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.26"``. + + .. attribute:: SECT233R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.27"``. + + .. attribute:: SECT283K1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.16"``. + + .. attribute:: SECT283R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.17"``. + + .. attribute:: SECT409K1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.36"``. + + .. attribute:: SECT409R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.37"``. + + .. attribute:: SECT571K1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.38"``. + + .. attribute:: SECT571R1 + + .. versionadded:: 2.5 + + Corresponds to the dotted string ``"1.3.132.0.39"``. + .. _`FIPS 186-3`: https://csrc.nist.gov/csrc/media/publications/fips/186/3/archive/2009-06-25/documents/fips_186-3.pdf .. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 431ecb7971bd..1d709d338fd6 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -19,6 +19,19 @@ class EllipticCurveOID(object): SECP256R1 = ObjectIdentifier("1.2.840.10045.3.1.7") SECP384R1 = ObjectIdentifier("1.3.132.0.34") SECP521R1 = ObjectIdentifier("1.3.132.0.35") + BRAINPOOLP256R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.7") + BRAINPOOLP384R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.11") + BRAINPOOLP512R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.13") + SECT163K1 = ObjectIdentifier("1.3.132.0.1") + SECT163R2 = ObjectIdentifier("1.3.132.0.15") + SECT233K1 = ObjectIdentifier("1.3.132.0.26") + SECT233R1 = ObjectIdentifier("1.3.132.0.27") + SECT283K1 = ObjectIdentifier("1.3.132.0.16") + SECT283R1 = ObjectIdentifier("1.3.132.0.17") + SECT409K1 = ObjectIdentifier("1.3.132.0.36") + SECT409R1 = ObjectIdentifier("1.3.132.0.37") + SECT571K1 = ObjectIdentifier("1.3.132.0.38") + SECT571R1 = ObjectIdentifier("1.3.132.0.39") @six.add_metaclass(abc.ABCMeta) From fec083e32fb748d03537a15b5037eaa81bb16386 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 08:02:52 -0500 Subject: [PATCH 440/988] disable healthchecks on the rest of the hypothesis tests (#4579) * disable healthchecks on the rest of the hypothesis tests * import the right thing --- tests/hypothesis/test_padding.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/hypothesis/test_padding.py b/tests/hypothesis/test_padding.py index a433391767a5..fa06bb7bff06 100644 --- a/tests/hypothesis/test_padding.py +++ b/tests/hypothesis/test_padding.py @@ -2,12 +2,13 @@ # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. -from hypothesis import given +from hypothesis import HealthCheck, given, settings from hypothesis.strategies import binary, integers from cryptography.hazmat.primitives.padding import ANSIX923, PKCS7 +@settings(suppress_health_check=[HealthCheck.too_slow]) @given(integers(min_value=1, max_value=255), binary()) def test_pkcs7(block_size, data): # Generate in [1, 31] so we can easily get block_size in bits by @@ -21,6 +22,7 @@ def test_pkcs7(block_size, data): assert unpadder.update(padded) + unpadder.finalize() == data +@settings(suppress_health_check=[HealthCheck.too_slow]) @given(integers(min_value=1, max_value=255), binary()) def test_ansix923(block_size, data): a = ANSIX923(block_size=block_size * 8) From 3666786771f99d62ccff23ddcfe613e8c2d7e852 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 08:04:06 -0500 Subject: [PATCH 441/988] add EVP raw key bindings (#4578) --- src/_cffi_src/openssl/evp.py | 18 ++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 2fb724d251ef..227ec35a69da 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -34,6 +34,7 @@ static const int Cryptography_HAS_EVP_PKEY_DHX; static const int Cryptography_HAS_EVP_PKEY_get_set_tls_encodedpoint; static const int Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY; +static const long Cryptography_HAS_RAW_KEY; """ FUNCTIONS = """ @@ -193,6 +194,13 @@ int EVP_PBE_scrypt(const char *, size_t, const unsigned char *, size_t, uint64_t, uint64_t, uint64_t, uint64_t, unsigned char *, size_t); + +EVP_PKEY *EVP_PKEY_new_raw_private_key(int, ENGINE *, const unsigned char *, + size_t); +EVP_PKEY *EVP_PKEY_new_raw_public_key(int, ENGINE *, const unsigned char *, + size_t); +int EVP_PKEY_get_raw_private_key(const EVP_PKEY *, unsigned char *, size_t *); +int EVP_PKEY_get_raw_public_key(const EVP_PKEY *, unsigned char *, size_t *); """ CUSTOMIZATIONS = """ @@ -246,12 +254,22 @@ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 static const long Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY = 0; +static const long Cryptography_HAS_RAW_KEY = 0; int (*EVP_DigestSign)(EVP_MD_CTX *, unsigned char *, size_t *, const unsigned char *tbs, size_t) = NULL; int (*EVP_DigestVerify)(EVP_MD_CTX *, const unsigned char *, size_t, const unsigned char *, size_t) = NULL; +EVP_PKEY *(*EVP_PKEY_new_raw_private_key)(int, ENGINE *, const unsigned char *, + size_t) = NULL; +EVP_PKEY *(*EVP_PKEY_new_raw_public_key)(int, ENGINE *, const unsigned char *, + size_t) = NULL; +int (*EVP_PKEY_get_raw_private_key)(const EVP_PKEY *, unsigned char *, + size_t *) = NULL; +int (*EVP_PKEY_get_raw_public_key)(const EVP_PKEY *, unsigned char *, + size_t *) = NULL; #else static const long Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY = 1; +static const long Cryptography_HAS_RAW_KEY = 1; #endif /* OpenSSL 1.1.0+ does this define for us, but if not present we'll do it */ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 219f163ebdfa..959a1abbc57d 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -301,6 +301,15 @@ def cryptography_has_tlsv13(): ] +def cryptography_has_raw_key(): + return [ + "EVP_PKEY_new_raw_private_key", + "EVP_PKEY_new_raw_public_key", + "EVP_PKEY_get_raw_private_key", + "EVP_PKEY_get_raw_public_key", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -363,4 +372,5 @@ def cryptography_has_tlsv13(): "Cryptography_HAS_OPENSSL_CLEANUP": cryptography_has_openssl_cleanup, "Cryptography_HAS_CIPHER_DETAILS": cryptography_has_cipher_details, "Cryptography_HAS_TLSv1_3": cryptography_has_tlsv13, + "Cryptography_HAS_RAW_KEY": cryptography_has_raw_key, } From 1cd33bc4f0010c934b39f85a9d9edc0a5656dae4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 08:18:07 -0500 Subject: [PATCH 442/988] x448 test vectors (#4576) --- docs/development/test-vectors.rst | 2 +- .../asymmetric/X448/rfc7748.txt | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 vectors/cryptography_vectors/asymmetric/X448/rfc7748.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index e5ff70bb08a4..a3ffc9abe79c 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -48,7 +48,7 @@ Asymmetric ciphers * `Botan's ECC private keys`_. * `asymmetric/public/PKCS1/dsa.pub.pem`_ is a PKCS1 DSA public key from the Ruby test suite. -* X25519 test vectors from :rfc:`7748`. +* X25519 and X448 test vectors from :rfc:`7748`. * RSA OAEP with custom label from the `BoringSSL evp tests`_. diff --git a/vectors/cryptography_vectors/asymmetric/X448/rfc7748.txt b/vectors/cryptography_vectors/asymmetric/X448/rfc7748.txt new file mode 100644 index 000000000000..613ea1d93ceb --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X448/rfc7748.txt @@ -0,0 +1,16 @@ +# From https://tools.ietf.org/html/rfc7748#section-5.2 + +COUNT = 1 +INPUT_SCALAR = 3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3 +INPUT_U = 06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086 +OUTPUT_U = ce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f + +COUNT = 2 +INPUT_SCALAR = 203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095f +INPUT_U = 0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157db +OUTPUT_U = 884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179d + +COUNT = 3 +INPUT_SCALAR = 0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +INPUT_U = 0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +OUTPUT_U = 3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113 From 7b57fe1fd4e31e57fb0840fdd2ae32710fd1060c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 08:42:09 -0500 Subject: [PATCH 443/988] x448 bindings (#4577) --- src/_cffi_src/openssl/evp.py | 8 ++++++++ src/_cffi_src/openssl/nid.py | 8 ++++++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 227ec35a69da..84b91086d096 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -22,6 +22,7 @@ static const int EVP_PKEY_DHX; static const int EVP_PKEY_EC; static const int EVP_PKEY_X25519; +static const int EVP_PKEY_X448; static const int EVP_MAX_MD_SIZE; static const int EVP_CTRL_AEAD_SET_IVLEN; static const int EVP_CTRL_AEAD_GET_TAG; @@ -290,4 +291,11 @@ #ifndef EVP_PKEY_X25519 #define EVP_PKEY_X25519 NID_X25519 #endif + +/* This is tied to X448 support so we reuse the Cryptography_HAS_X448 + conditional to remove it. OpenSSL 1.1.1 adds this define. We can remove + this in the distant future when we drop 1.1.0 support. */ +#ifndef EVP_PKEY_X448 +#define EVP_PKEY_X448 NID_X448 +#endif """ diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index 03aaee9278ac..226229e92545 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -10,6 +10,7 @@ TYPES = """ static const int Cryptography_HAS_X25519; +static const int Cryptography_HAS_X448; static const int Cryptography_HAS_ED25519; static const int NID_undef; @@ -93,6 +94,7 @@ static const int NID_sect571k1; static const int NID_sect571r1; static const int NID_X25519; +static const int NID_X448; static const int NID_ED25519; static const int NID_wap_wsg_idm_ecid_wtls1; static const int NID_wap_wsg_idm_ecid_wtls3; @@ -241,4 +243,10 @@ #else static const long Cryptography_HAS_ED25519 = 1; #endif +#ifndef NID_X448 +static const long Cryptography_HAS_X448 = 0; +static const int NID_X448 = 0; +#else +static const long Cryptography_HAS_X448 = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 959a1abbc57d..330a718c1492 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -224,6 +224,13 @@ def cryptography_has_x25519(): ] +def cryptography_has_x448(): + return [ + "EVP_PKEY_X448", + "NID_X448", + ] + + def cryptography_has_ed25519(): return [ "NID_ED25519", @@ -358,6 +365,7 @@ def cryptography_has_raw_key(): cryptography_has_x509_store_ctx_get_issuer ), "Cryptography_HAS_X25519": cryptography_has_x25519, + "Cryptography_HAS_X448": cryptography_has_x448, "Cryptography_HAS_ED25519": cryptography_has_ed25519, "Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY": ( cryptography_has_oneshot_evp_digest_sign_verify From 192ad8de3615bf5ceed97224416a2673c38e95de Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 09:43:21 -0500 Subject: [PATCH 444/988] upgrade docs to 1.1.1 (#4581) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b2f0d4735c18..58c56154b01c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -100,7 +100,7 @@ matrix: env: TOXENV=py36 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.6 - env: TOXENV=docs OPENSSL=1.1.0i + env: TOXENV=docs OPENSSL=1.1.1 addons: apt: packages: From bcd3e8c1eb4111d9583636bb1e713b1d7808e38f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 09:57:08 -0500 Subject: [PATCH 445/988] add a little bit of x25519 interface docs we missed (#4574) --- .../hazmat/primitives/asymmetric/x25519.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/cryptography/hazmat/primitives/asymmetric/x25519.py b/src/cryptography/hazmat/primitives/asymmetric/x25519.py index 5c4652ae6bfa..e0329f9d38f5 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -25,7 +25,9 @@ def from_public_bytes(cls, data): @abc.abstractmethod def public_bytes(self): - pass + """ + The serialized bytes of the public key. + """ @six.add_metaclass(abc.ABCMeta) @@ -47,8 +49,12 @@ def _from_private_bytes(cls, data): @abc.abstractmethod def public_key(self): - pass + """ + The serialized bytes of the public key. + """ @abc.abstractmethod def exchange(self, peer_public_key): - pass + """ + Performs a key exchange operation using the provided peer's public key. + """ From 13365ef858bc045ef2d3358c27f8a8bc6cf9cb0b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 10:24:10 -0500 Subject: [PATCH 446/988] add bindings for early data (#4582) * add bindings for early data * remove final var name --- src/_cffi_src/openssl/ssl.py | 9 +++++++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index e18807123228..c921dbeed0b0 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -537,6 +537,11 @@ int SSL_verify_client_post_handshake(SSL *); void SSL_CTX_set_post_handshake_auth(SSL_CTX *, int); void SSL_set_post_handshake_auth(SSL *, int); + +uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *); +int SSL_write_early_data(SSL *, const void *, size_t, size_t *); +int SSL_read_early_data(SSL *, void *, size_t, size_t *); +int SSL_CTX_set_max_early_data(SSL_CTX *, uint32_t); """ CUSTOMIZATIONS = """ @@ -831,6 +836,10 @@ int (*SSL_verify_client_post_handshake)(SSL *) = NULL; void (*SSL_CTX_set_post_handshake_auth)(SSL_CTX *, int) = NULL; void (*SSL_set_post_handshake_auth)(SSL *, int) = NULL; +uint32_t (*SSL_SESSION_get_max_early_data)(const SSL_SESSION *) = NULL; +int (*SSL_write_early_data)(SSL *, const void *, size_t, size_t *) = NULL; +int (*SSL_read_early_data)(SSL *, void *, size_t, size_t *) = NULL; +int (*SSL_CTX_set_max_early_data)(SSL_CTX *, uint32_t) = NULL; #else static const long Cryptography_HAS_TLSv1_3 = 1; #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 330a718c1492..6da48a56b553 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -305,6 +305,10 @@ def cryptography_has_tlsv13(): "SSL_verify_client_post_handshake", "SSL_CTX_set_post_handshake_auth", "SSL_set_post_handshake_auth", + "SSL_SESSION_get_max_early_data", + "SSL_write_early_data", + "SSL_read_early_data", + "SSL_CTX_set_max_early_data", ] From d67fa8251f71f7cf5e9709f1e6be27ee7fbf028a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 21:41:26 -0500 Subject: [PATCH 447/988] add SHA512/224 and SHA512/256 support (#4575) * add SHA512/224 and SHA512/256 support * add missing docs --- CHANGELOG.rst | 4 +++ .../primitives/cryptographic-hashes.rst | 14 ++++++++ src/cryptography/hazmat/primitives/hashes.py | 14 ++++++++ tests/hazmat/primitives/test_hash_vectors.py | 34 +++++++++++++++++++ 4 files changed, 66 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 262c1f27690b..b95df955d4e2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,10 @@ Changelog .. note:: This version is not yet released and is under active development. +* Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA512_224` + and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using + OpenSSL 1.1.1. + .. _v2-4-1: 2.4.1 - 2018-11-11 diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index a73785d476dd..1a96fc2dd22f 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -102,6 +102,20 @@ SHA-2 family SHA-512 is a cryptographic hash function from the SHA-2 family and is standardized by NIST. It produces a 512-bit message digest. +.. class:: SHA512_224() + + .. versionadded:: 2.5 + + SHA-512/224 is a cryptographic hash function from the SHA-2 family and is + standardized by NIST. It produces a 224-bit message digest. + +.. class:: SHA512_256() + + .. versionadded:: 2.5 + + SHA-512/256 is a cryptographic hash function from the SHA-2 family and is + standardized by NIST. It produces a 256-bit message digest. + BLAKE2 ~~~~~~ diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 3f3aadd6f91c..79029937c25c 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -108,6 +108,20 @@ class SHA1(object): block_size = 64 +@utils.register_interface(HashAlgorithm) +class SHA512_224(object): # noqa: N801 + name = "sha512-224" + digest_size = 28 + block_size = 128 + + +@utils.register_interface(HashAlgorithm) +class SHA512_256(object): # noqa: N801 + name = "sha512-256" + digest_size = 32 + block_size = 128 + + @utils.register_interface(HashAlgorithm) class SHA224(object): name = "sha224" diff --git a/tests/hazmat/primitives/test_hash_vectors.py b/tests/hazmat/primitives/test_hash_vectors.py index 2db9e906b406..33c5f8e1f892 100644 --- a/tests/hazmat/primitives/test_hash_vectors.py +++ b/tests/hazmat/primitives/test_hash_vectors.py @@ -100,6 +100,40 @@ class TestSHA512(object): ) +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.SHA512_224()), + skip_message="Does not support SHA512/224", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHA512224(object): + test_SHA512_224 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHA2"), + [ + "SHA512_224LongMsg.rsp", + "SHA512_224ShortMsg.rsp", + ], + hashes.SHA512_224(), + ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.SHA512_256()), + skip_message="Does not support SHA512/256", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHA512256(object): + test_SHA512_256 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHA2"), + [ + "SHA512_256LongMsg.rsp", + "SHA512_256ShortMsg.rsp", + ], + hashes.SHA512_256(), + ) + + @pytest.mark.supported( only_if=lambda backend: backend.hash_supported(hashes.MD5()), skip_message="Does not support MD5", From d3b1804f6ce6f1a2b517a562246447d41ed0ffae Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 22:47:57 -0500 Subject: [PATCH 448/988] error if the key length for x25519 isn't 32 bytes (#4584) * error if the key length for x25519 isn't 32 bytes * also test 33 --- src/cryptography/hazmat/primitives/asymmetric/x25519.py | 4 ++++ tests/hazmat/primitives/test_x25519.py | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/cryptography/hazmat/primitives/asymmetric/x25519.py b/src/cryptography/hazmat/primitives/asymmetric/x25519.py index e0329f9d38f5..f4bdf3db4f66 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -21,6 +21,10 @@ def from_public_bytes(cls, data): "X25519 is not supported by this version of OpenSSL.", _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM ) + + if len(data) != 32: + raise ValueError("An X25519 public key is 32 bytes long") + return backend.x25519_load_public_bytes(data) @abc.abstractmethod diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index 381be201a63f..0f83eb6e82ec 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -135,3 +135,10 @@ def test_invalid_type_exchange(self, backend): key = X25519PrivateKey.generate() with pytest.raises(TypeError): key.exchange(object()) + + def test_invalid_length_from_public_bytes(self, backend): + with pytest.raises(ValueError): + X25519PublicKey.from_public_bytes(b"a" * 31) + + with pytest.raises(ValueError): + X25519PublicKey.from_public_bytes(b"a" * 33) From fd64302f08dfb3a296f6da7ec3286872b1d9fce3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 12 Nov 2018 23:21:12 -0500 Subject: [PATCH 449/988] this hasn't worked in...years (#4585) --- .mention-bot | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .mention-bot diff --git a/.mention-bot b/.mention-bot deleted file mode 100644 index a05018e61846..000000000000 --- a/.mention-bot +++ /dev/null @@ -1,3 +0,0 @@ -{ - "userBlacklist": ["dreid", "exarkun", "dstufft"] -} From b5d07b7f723ca101bbe4b78584df367c014eed96 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 13 Nov 2018 07:46:34 -0500 Subject: [PATCH 450/988] Ed bindings (#4586) * add evp_pkey_ed25519 * ed448 bindings --- src/_cffi_src/openssl/evp.py | 14 ++++++++++++++ src/_cffi_src/openssl/nid.py | 7 +++++++ .../hazmat/bindings/openssl/_conditional.py | 9 +++++++++ 3 files changed, 30 insertions(+) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 84b91086d096..3c10aabf2b95 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -22,7 +22,9 @@ static const int EVP_PKEY_DHX; static const int EVP_PKEY_EC; static const int EVP_PKEY_X25519; +static const int EVP_PKEY_ED25519; static const int EVP_PKEY_X448; +static const int EVP_PKEY_ED448; static const int EVP_MAX_MD_SIZE; static const int EVP_CTRL_AEAD_SET_IVLEN; static const int EVP_CTRL_AEAD_GET_TAG; @@ -298,4 +300,16 @@ #ifndef EVP_PKEY_X448 #define EVP_PKEY_X448 NID_X448 #endif + +/* This is tied to ED25519 support so we reuse the Cryptography_HAS_ED25519 + conditional to remove it. */ +#ifndef EVP_PKEY_ED25519 +#define EVP_PKEY_ED25519 NID_ED25519 +#endif + +/* This is tied to ED448 support so we reuse the Cryptography_HAS_ED448 + conditional to remove it. */ +#ifndef EVP_PKEY_ED448 +#define EVP_PKEY_ED448 NID_ED448 +#endif """ diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index 226229e92545..bf445aa86e17 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -11,6 +11,7 @@ TYPES = """ static const int Cryptography_HAS_X25519; static const int Cryptography_HAS_X448; +static const int Cryptography_HAS_ED448; static const int Cryptography_HAS_ED25519; static const int NID_undef; @@ -249,4 +250,10 @@ #else static const long Cryptography_HAS_X448 = 1; #endif +#ifndef NID_ED448 +static const long Cryptography_HAS_ED448 = 0; +static const int NID_ED448 = 0; +#else +static const long Cryptography_HAS_ED448 = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 6da48a56b553..06199f4a7efc 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -231,9 +231,17 @@ def cryptography_has_x448(): ] +def cryptography_has_ed448(): + return [ + "EVP_PKEY_ED448", + "NID_ED448", + ] + + def cryptography_has_ed25519(): return [ "NID_ED25519", + "EVP_PKEY_ED25519", ] @@ -370,6 +378,7 @@ def cryptography_has_raw_key(): ), "Cryptography_HAS_X25519": cryptography_has_x25519, "Cryptography_HAS_X448": cryptography_has_x448, + "Cryptography_HAS_ED448": cryptography_has_ed448, "Cryptography_HAS_ED25519": cryptography_has_ed25519, "Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY": ( cryptography_has_oneshot_evp_digest_sign_verify From 0dc5e3cce5deeb05c507643dc6c36845a085684f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 13 Nov 2018 07:46:57 -0500 Subject: [PATCH 451/988] refactor x25519 keygen into evp_pkey_keygen (#4587) this allows us to use the same code for ed25519, x448, and ed448 --- .../hazmat/backends/openssl/backend.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 19734a54c5fc..d00f61337baa 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2060,14 +2060,10 @@ def x25519_load_private_bytes(self, data): ) return _X25519PrivateKey(self, evp_pkey) - def x25519_generate_key(self): - evp_pkey_ctx = self._lib.EVP_PKEY_CTX_new_id( - self._lib.NID_X25519, self._ffi.NULL - ) + def _evp_pkey_keygen_gc(self, nid): + evp_pkey_ctx = self._lib.EVP_PKEY_CTX_new_id(nid, self._ffi.NULL) self.openssl_assert(evp_pkey_ctx != self._ffi.NULL) - evp_pkey_ctx = self._ffi.gc( - evp_pkey_ctx, self._lib.EVP_PKEY_CTX_free - ) + evp_pkey_ctx = self._ffi.gc(evp_pkey_ctx, self._lib.EVP_PKEY_CTX_free) res = self._lib.EVP_PKEY_keygen_init(evp_pkey_ctx) self.openssl_assert(res == 1) evp_ppkey = self._ffi.new("EVP_PKEY **") @@ -2075,6 +2071,10 @@ def x25519_generate_key(self): self.openssl_assert(res == 1) self.openssl_assert(evp_ppkey[0] != self._ffi.NULL) evp_pkey = self._ffi.gc(evp_ppkey[0], self._lib.EVP_PKEY_free) + return evp_pkey + + def x25519_generate_key(self): + evp_pkey = self._evp_pkey_keygen_gc(self._lib.NID_X25519) return _X25519PrivateKey(self, evp_pkey) def x25519_supported(self): From d37346651bc4b9ebc0b8c7cfdc7c1f21de6a751d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 13 Nov 2018 22:47:34 -0500 Subject: [PATCH 452/988] add EVPDigestFinalXOF for extendable output functions (#4589) --- src/_cffi_src/openssl/evp.py | 5 +++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 3c10aabf2b95..9ae6025a4057 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -38,6 +38,7 @@ static const int Cryptography_HAS_EVP_PKEY_get_set_tls_encodedpoint; static const int Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY; static const long Cryptography_HAS_RAW_KEY; +static const long Cryptography_HAS_EVP_DIGESTFINAL_XOF; """ FUNCTIONS = """ @@ -69,6 +70,7 @@ int EVP_DigestInit_ex(EVP_MD_CTX *, const EVP_MD *, ENGINE *); int EVP_DigestUpdate(EVP_MD_CTX *, const void *, size_t); int EVP_DigestFinal_ex(EVP_MD_CTX *, unsigned char *, unsigned int *); +int EVP_DigestFinalXOF(EVP_MD_CTX *, unsigned char *, size_t); const EVP_MD *EVP_get_digestbyname(const char *); const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *); int EVP_MD_size(const EVP_MD *); @@ -258,6 +260,8 @@ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 static const long Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY = 0; static const long Cryptography_HAS_RAW_KEY = 0; +static const long Cryptography_HAS_EVP_DIGESTFINAL_XOF = 0; +int (*EVP_DigestFinalXOF)(EVP_MD_CTX *, unsigned char *, size_t) = NULL; int (*EVP_DigestSign)(EVP_MD_CTX *, unsigned char *, size_t *, const unsigned char *tbs, size_t) = NULL; int (*EVP_DigestVerify)(EVP_MD_CTX *, const unsigned char *, size_t, @@ -273,6 +277,7 @@ #else static const long Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY = 1; static const long Cryptography_HAS_RAW_KEY = 1; +static const long Cryptography_HAS_EVP_DIGESTFINAL_XOF = 1; #endif /* OpenSSL 1.1.0+ does this define for us, but if not present we'll do it */ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 06199f4a7efc..76417934796e 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -252,6 +252,12 @@ def cryptography_has_oneshot_evp_digest_sign_verify(): ] +def cryptography_has_evp_digestfinal_xof(): + return [ + "EVP_DigestFinalXOF", + ] + + def cryptography_has_evp_pkey_get_set_tls_encodedpoint(): return [ "EVP_PKEY_get1_tls_encodedpoint", @@ -394,4 +400,7 @@ def cryptography_has_raw_key(): "Cryptography_HAS_CIPHER_DETAILS": cryptography_has_cipher_details, "Cryptography_HAS_TLSv1_3": cryptography_has_tlsv13, "Cryptography_HAS_RAW_KEY": cryptography_has_raw_key, + "Cryptography_HAS_EVP_DIGESTFINAL_XOF": ( + cryptography_has_evp_digestfinal_xof + ), } From e7a6229b332969d621aaf25f3fc5cdd99e3c9072 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sun, 18 Nov 2018 18:04:01 -0800 Subject: [PATCH 453/988] Adjust DTLS check (#4593) OpenSSL defines these even with OPENSSL_NO_DTLS. --- src/_cffi_src/openssl/ssl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index c921dbeed0b0..f0b8939cb784 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -714,7 +714,7 @@ static const long TLS_ST_OK = 0; #endif -#if defined(OPENSSL_NO_DTLS) || CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 0; const SSL_METHOD *(*DTLS_method)(void) = NULL; const SSL_METHOD *(*DTLS_server_method)(void) = NULL; From 8dc8264570e650cef3b698e4dec004e4b5879f12 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 20 Nov 2018 17:37:13 -0600 Subject: [PATCH 454/988] Bump 1.1.0 in travis to j (#4595) --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 58c56154b01c..5400e00b8890 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,9 +42,9 @@ matrix: - python: 3.7 env: TOXENV=py37 OPENSSL=1.0.1u - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.0i + env: TOXENV=py27 OPENSSL=1.1.0j - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0i + env: TOXENV=py35 OPENSSL=1.1.0j - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.1 - python: 3.7 @@ -121,12 +121,12 @@ matrix: - python: 2.7 env: DOWNSTREAM=aws-encryption-sdk - python: 2.7 - env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0i + env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0j # dynamodb-encryption-sdk tests fail on xenial for whatever reason dist: trusty sudo: false - python: 2.7 - env: DOWNSTREAM=certbot OPENSSL=1.1.0i + env: DOWNSTREAM=certbot OPENSSL=1.1.0j - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 From ef70fc22431fe09c2d514824a62e6500a50f7ec0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 20 Nov 2018 17:38:34 -0600 Subject: [PATCH 455/988] Bump 1.1.1 to a in travis (#4597) --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5400e00b8890..a71e0c7cea77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,9 +46,9 @@ matrix: - python: 3.5 env: TOXENV=py35 OPENSSL=1.1.0j - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1 + env: TOXENV=py27 OPENSSL=1.1.1a - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1 + env: TOXENV=py37 OPENSSL=1.1.1a - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 @@ -100,7 +100,7 @@ matrix: env: TOXENV=py36 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.6 - env: TOXENV=docs OPENSSL=1.1.1 + env: TOXENV=docs OPENSSL=1.1.1a addons: apt: packages: From cd4de3ce6dc2a0dd4171b869e187857e4125853b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 21 Nov 2018 11:42:41 +0800 Subject: [PATCH 456/988] port 2.4.2 changelog (#4599) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b95df955d4e2..345c71e2520a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,14 @@ Changelog and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using OpenSSL 1.1.1. +.. _v2-4-2: + +2.4.2 - 2018-11-21 +~~~~~~~~~~~~~~~~~~ + +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.0j. + .. _v2-4-1: 2.4.1 - 2018-11-11 From 3065e16bcc05ddde3af87484a38b67b06471670e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 22 Nov 2018 23:42:42 +0800 Subject: [PATCH 457/988] add sha3 support (#4573) * add sha3 support * missed versionadded * add prose, remove block_size --- CHANGELOG.rst | 5 ++ .../primitives/cryptographic-hashes.rst | 37 ++++++++++ src/cryptography/hazmat/primitives/hashes.py | 24 +++++++ tests/hazmat/primitives/test_hash_vectors.py | 68 +++++++++++++++++++ 4 files changed, 134 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 345c71e2520a..6f2c964a7499 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -11,6 +11,11 @@ Changelog * Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA512_224` and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using OpenSSL 1.1.1. +* Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA3_224`, + :class:`~cryptography.hazmat.primitives.hashes.SHA3_256`, + :class:`~cryptography.hazmat.primitives.hashes.SHA3_384`, and + :class:`~cryptography.hazmat.primitives.hashes.SHA3_512` when using OpenSSL + 1.1.1. .. _v2-4-2: diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index 1a96fc2dd22f..bc9793656604 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -148,6 +148,43 @@ SHA-family of hashes. :raises ValueError: If the ``digest_size`` is invalid. +SHA-3 family +~~~~~~~~~~~~ + +SHA-3 is the most recent NIST secure hash algorithm standard. Despite the +larger number SHA-3 is not considered to be better than SHA-2. Instead, it uses +a significantly different internal structure so that **if** an attack appears +against SHA-2 it is unlikely to apply to SHA-3. SHA-3 is significantly slower +than SHA-2 so at this time most users should choose SHA-2. + +.. class:: SHA3_224() + + .. versionadded:: 2.5 + + SHA3/224 is a cryptographic hash function from the SHA-3 family and is + standardized by NIST. It produces a 224-bit message digest. + +.. class:: SHA3_256() + + .. versionadded:: 2.5 + + SHA3/256 is a cryptographic hash function from the SHA-3 family and is + standardized by NIST. It produces a 256-bit message digest. + +.. class:: SHA3_384() + + .. versionadded:: 2.5 + + SHA3/384 is a cryptographic hash function from the SHA-3 family and is + standardized by NIST. It produces a 384-bit message digest. + +.. class:: SHA3_512() + + .. versionadded:: 2.5 + + SHA3/512 is a cryptographic hash function from the SHA-3 family and is + standardized by NIST. It produces a 512-bit message digest. + SHA-1 ~~~~~ diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 79029937c25c..259a2c01ab41 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -150,6 +150,30 @@ class SHA512(object): block_size = 128 +@utils.register_interface(HashAlgorithm) +class SHA3_224(object): # noqa: N801 + name = "sha3-224" + digest_size = 28 + + +@utils.register_interface(HashAlgorithm) +class SHA3_256(object): # noqa: N801 + name = "sha3-256" + digest_size = 32 + + +@utils.register_interface(HashAlgorithm) +class SHA3_384(object): # noqa: N801 + name = "sha3-384" + digest_size = 48 + + +@utils.register_interface(HashAlgorithm) +class SHA3_512(object): # noqa: N801 + name = "sha3-512" + digest_size = 64 + + @utils.register_interface(HashAlgorithm) class MD5(object): name = "md5" diff --git a/tests/hazmat/primitives/test_hash_vectors.py b/tests/hazmat/primitives/test_hash_vectors.py index 33c5f8e1f892..f8561fcd4d85 100644 --- a/tests/hazmat/primitives/test_hash_vectors.py +++ b/tests/hazmat/primitives/test_hash_vectors.py @@ -182,3 +182,71 @@ class TestBLAKE2s256(object): ], hashes.BLAKE2s(digest_size=32), ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.SHA3_224()), + skip_message="Does not support SHA3_224", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHA3224(object): + test_SHA3_224 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHA3"), + [ + "SHA3_224LongMsg.rsp", + "SHA3_224ShortMsg.rsp", + ], + hashes.SHA3_224(), + ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.SHA3_256()), + skip_message="Does not support SHA3_256", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHA3256(object): + test_SHA3_256 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHA3"), + [ + "SHA3_256LongMsg.rsp", + "SHA3_256ShortMsg.rsp", + ], + hashes.SHA3_256(), + ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.SHA3_384()), + skip_message="Does not support SHA3_384", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHA3384(object): + test_SHA3_384 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHA3"), + [ + "SHA3_384LongMsg.rsp", + "SHA3_384ShortMsg.rsp", + ], + hashes.SHA3_384(), + ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.SHA3_512()), + skip_message="Does not support SHA3_512", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHA3512(object): + test_SHA3_512 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHA3"), + [ + "SHA3_512LongMsg.rsp", + "SHA3_512ShortMsg.rsp", + ], + hashes.SHA3_512(), + ) From 3bd6159893cc8325f54a41d4108a6f4131aa65c4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 22 Nov 2018 13:48:57 -0600 Subject: [PATCH 458/988] Debian sid is now Python 3.7 (#4602) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a71e0c7cea77..8fda6709134e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -77,9 +77,9 @@ matrix: - python: 3.6 services: docker env: TOXENV=py36 DOCKER=pyca/cryptography-runner-buster - - python: 3.6 + - python: 3.7 services: docker - env: TOXENV=py36 DOCKER=pyca/cryptography-runner-sid + env: TOXENV=py37 DOCKER=pyca/cryptography-runner-sid - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling From eda8a4156fbf66b29eb99fecc62cb2f55602d0fa Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 22 Nov 2018 17:47:20 -0600 Subject: [PATCH 459/988] Import idna lazily to reduce our memory consumption (#4601) We only use idna in deprecated paths at this point, so we shouldn't make people pay for it. --- src/cryptography/x509/general_name.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 26f389a51838..42082746a369 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -9,8 +9,6 @@ import warnings from email.utils import parseaddr -import idna - import six from six.moves import urllib_parse @@ -83,6 +81,10 @@ def _init_without_validation(cls, value): return instance def _idna_encode(self, value): + # Import idna lazily becase it allocates a decent amoutn of memory, and + # we're only using it in deprecated paths. + import idna + _, address = parseaddr(value) parts = address.split(u"@") return parts[0] + "@" + idna.encode(parts[1]).decode("ascii") @@ -104,6 +106,10 @@ def __hash__(self): def _idna_encode(value): + # Import idna lazily becase it allocates a decent amoutn of memory, and + # we're only using it in deprecated paths. + import idna + # Retain prefixes '*.' for common/alt names and '.' for name constraints for prefix in ['*.', '.']: if value.startswith(prefix): @@ -187,6 +193,10 @@ def _init_without_validation(cls, value): return instance def _idna_encode(self, value): + # Import idna lazily becase it allocates a decent amoutn of memory, and + # we're only using it in deprecated paths. + import idna + parsed = urllib_parse.urlparse(value) if parsed.port: netloc = ( From 579dfcf48f013dddfd3447e6dc38cfdc0b17145c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 23 Nov 2018 09:05:23 +0800 Subject: [PATCH 460/988] refactor x25519 exchange into utils (#4603) --- .../hazmat/backends/openssl/utils.py | 24 +++++++++++++++++ .../hazmat/backends/openssl/x25519.py | 27 +++---------------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/utils.py b/src/cryptography/hazmat/backends/openssl/utils.py index 05d0fe589158..363f3d2c25db 100644 --- a/src/cryptography/hazmat/backends/openssl/utils.py +++ b/src/cryptography/hazmat/backends/openssl/utils.py @@ -11,6 +11,30 @@ from cryptography.hazmat.primitives.asymmetric.utils import Prehashed +def _evp_pkey_derive(backend, evp_pkey, peer_public_key): + ctx = backend._lib.EVP_PKEY_CTX_new(evp_pkey, backend._ffi.NULL) + backend.openssl_assert(ctx != backend._ffi.NULL) + ctx = backend._ffi.gc(ctx, backend._lib.EVP_PKEY_CTX_free) + res = backend._lib.EVP_PKEY_derive_init(ctx) + backend.openssl_assert(res == 1) + res = backend._lib.EVP_PKEY_derive_set_peer( + ctx, peer_public_key._evp_pkey + ) + backend.openssl_assert(res == 1) + keylen = backend._ffi.new("size_t *") + res = backend._lib.EVP_PKEY_derive(ctx, backend._ffi.NULL, keylen) + backend.openssl_assert(res == 1) + backend.openssl_assert(keylen[0] > 0) + buf = backend._ffi.new("unsigned char[]", keylen[0]) + res = backend._lib.EVP_PKEY_derive(ctx, buf, keylen) + if res != 1: + raise ValueError( + "Null shared key derived from public/private pair." + ) + + return backend._ffi.buffer(buf, keylen[0])[:] + + def _calculate_digest_and_algorithm(backend, data, algorithm): if not isinstance(algorithm, Prehashed): hash_ctx = hashes.Hash(algorithm, backend) diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 983ece6a97fe..06f3985d3821 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function from cryptography import utils +from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive from cryptography.hazmat.primitives.asymmetric.x25519 import ( X25519PrivateKey, X25519PublicKey ) @@ -52,28 +53,6 @@ def exchange(self, peer_public_key): if not isinstance(peer_public_key, X25519PublicKey): raise TypeError("peer_public_key must be X25519PublicKey.") - ctx = self._backend._lib.EVP_PKEY_CTX_new( - self._evp_pkey, self._backend._ffi.NULL + return _evp_pkey_derive( + self._backend, self._evp_pkey, peer_public_key ) - self._backend.openssl_assert(ctx != self._backend._ffi.NULL) - ctx = self._backend._ffi.gc(ctx, self._backend._lib.EVP_PKEY_CTX_free) - res = self._backend._lib.EVP_PKEY_derive_init(ctx) - self._backend.openssl_assert(res == 1) - res = self._backend._lib.EVP_PKEY_derive_set_peer( - ctx, peer_public_key._evp_pkey - ) - self._backend.openssl_assert(res == 1) - keylen = self._backend._ffi.new("size_t *") - res = self._backend._lib.EVP_PKEY_derive( - ctx, self._backend._ffi.NULL, keylen - ) - self._backend.openssl_assert(res == 1) - self._backend.openssl_assert(keylen[0] > 0) - buf = self._backend._ffi.new("unsigned char[]", keylen[0]) - res = self._backend._lib.EVP_PKEY_derive(ctx, buf, keylen) - if res != 1: - raise ValueError( - "Null shared key derived from public/private pair." - ) - - return self._backend._ffi.buffer(buf, keylen[0])[:] From 6f88e01af8f5d6db7082d155f3faf88dfb48e864 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 23 Nov 2018 10:44:37 +0800 Subject: [PATCH 461/988] X448 support (#4580) * x448 support This work was originally authored by derwolfe * update docs to have a more useful derived key length * error if key is not a valid length in from_public_bytes * one more * switch to using evp_pkey_keygen_gc for x448 keygen * review feedback * switch to using evp_pkey_derive * nit fix --- docs/hazmat/primitives/asymmetric/index.rst | 1 + docs/hazmat/primitives/asymmetric/x448.rst | 104 ++++++++++++++ .../hazmat/backends/openssl/backend.py | 29 ++++ .../hazmat/backends/openssl/x448.py | 55 ++++++++ .../hazmat/primitives/asymmetric/x448.py | 61 +++++++++ tests/hazmat/primitives/test_x448.py | 127 ++++++++++++++++++ 6 files changed, 377 insertions(+) create mode 100644 docs/hazmat/primitives/asymmetric/x448.rst create mode 100644 src/cryptography/hazmat/backends/openssl/x448.py create mode 100644 src/cryptography/hazmat/primitives/asymmetric/x448.py create mode 100644 tests/hazmat/primitives/test_x448.py diff --git a/docs/hazmat/primitives/asymmetric/index.rst b/docs/hazmat/primitives/asymmetric/index.rst index 173faa9ef05a..1561c59f1be0 100644 --- a/docs/hazmat/primitives/asymmetric/index.rst +++ b/docs/hazmat/primitives/asymmetric/index.rst @@ -24,6 +24,7 @@ private key is able to decrypt it. :maxdepth: 1 x25519 + x448 ec rsa dh diff --git a/docs/hazmat/primitives/asymmetric/x448.rst b/docs/hazmat/primitives/asymmetric/x448.rst new file mode 100644 index 000000000000..057b7b50a2c3 --- /dev/null +++ b/docs/hazmat/primitives/asymmetric/x448.rst @@ -0,0 +1,104 @@ +.. hazmat:: + +X448 key exchange +=================== + +.. currentmodule:: cryptography.hazmat.primitives.asymmetric.x448 + + +X448 is an elliptic curve `Diffie-Hellman key exchange`_ using `Curve448`_. +It allows two parties to jointly agree on a shared secret using an insecure +channel. + + +Exchange Algorithm +~~~~~~~~~~~~~~~~~~ + +For most applications the ``shared_key`` should be passed to a key +derivation function. This allows mixing of additional information into the +key, derivation of multiple keys, and destroys any structure that may be +present. + +.. doctest:: + + >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes + >>> from cryptography.hazmat.primitives.asymmetric.x448 import X448PrivateKey + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF + >>> # Generate a private key for use in the exchange. + >>> private_key = X448PrivateKey.generate() + >>> # In a real handshake the peer_public_key will be received from the + >>> # other party. For this example we'll generate another private key and + >>> # get a public key from that. Note that in a DH handshake both peers + >>> # must agree on a common set of parameters. + >>> peer_public_key = X448PrivateKey.generate().public_key() + >>> shared_key = private_key.exchange(peer_public_key) + >>> # Perform key derivation. + >>> derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key) + >>> # For the next handshake we MUST generate another private key. + >>> private_key_2 = X448PrivateKey.generate() + >>> peer_public_key_2 = X448PrivateKey.generate().public_key() + >>> shared_key_2 = private_key_2.exchange(peer_public_key_2) + >>> derived_key_2 = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key_2) + +Key interfaces +~~~~~~~~~~~~~~ + +.. class:: X448PrivateKey + + .. versionadded:: 2.5 + + .. classmethod:: generate() + + Generate an X448 private key. + + :returns: :class:`X448PrivateKey` + + .. method:: public_key() + + :returns: :class:`X448PublicKey` + + .. method:: exchange(peer_public_key) + + :param X448PublicKey peer_public_key: The public key for the + peer. + + :returns bytes: A shared key. + +.. class:: X448PublicKey + + .. versionadded:: 2.5 + + .. classmethod:: from_public_bytes(data) + + :param bytes data: 56 byte public key. + + :returns: :class:`X448PublicKey` + + .. doctest:: + + >>> from cryptography.hazmat.primitives.asymmetric import x448 + >>> private_key = x448.X448PrivateKey.generate() + >>> public_key = private_key.public_key() + >>> public_bytes = public_key.public_bytes() + >>> loaded_public_key = x448.X448PublicKey.from_public_bytes(public_bytes) + + .. method:: public_bytes() + + :returns bytes: The raw bytes of the public key. + + +.. _`Diffie-Hellman key exchange`: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange +.. _`Curve448`: https://en.wikipedia.org/wiki/Curve448 diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index d00f61337baa..f0b09daca34a 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -55,6 +55,9 @@ from cryptography.hazmat.backends.openssl.x25519 import ( _X25519PrivateKey, _X25519PublicKey ) +from cryptography.hazmat.backends.openssl.x448 import ( + _X448PrivateKey, _X448PublicKey +) from cryptography.hazmat.backends.openssl.x509 import ( _Certificate, _CertificateRevocationList, _CertificateSigningRequest, _RevokedCertificate @@ -2080,6 +2083,32 @@ def x25519_generate_key(self): def x25519_supported(self): return self._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER + def x448_load_public_bytes(self, data): + if len(data) != 56: + raise ValueError("An X448 public key is 56 bytes long") + + evp_pkey = self._lib.EVP_PKEY_new_raw_public_key( + self._lib.NID_X448, self._ffi.NULL, data, len(data) + ) + self.openssl_assert(evp_pkey != self._ffi.NULL) + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + return _X448PublicKey(self, evp_pkey) + + def x448_load_private_bytes(self, data): + evp_pkey = self._lib.EVP_PKEY_new_raw_private_key( + self._lib.NID_X448, self._ffi.NULL, data, len(data) + ) + self.openssl_assert(evp_pkey != self._ffi.NULL) + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + return _X448PrivateKey(self, evp_pkey) + + def x448_generate_key(self): + evp_pkey = self._evp_pkey_keygen_gc(self._lib.NID_X448) + return _X448PrivateKey(self, evp_pkey) + + def x448_supported(self): + return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 + def derive_scrypt(self, key_material, salt, length, n, r, p): buf = self._ffi.new("unsigned char[]", length) res = self._lib.EVP_PBE_scrypt( diff --git a/src/cryptography/hazmat/backends/openssl/x448.py b/src/cryptography/hazmat/backends/openssl/x448.py new file mode 100644 index 000000000000..a10aa82176a2 --- /dev/null +++ b/src/cryptography/hazmat/backends/openssl/x448.py @@ -0,0 +1,55 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography import utils +from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive +from cryptography.hazmat.primitives.asymmetric.x448 import ( + X448PrivateKey, X448PublicKey +) + +_X448_KEY_SIZE = 56 + + +@utils.register_interface(X448PublicKey) +class _X448PublicKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_bytes(self): + buf = self._backend._ffi.new("unsigned char []", _X448_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _X448_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_public_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _X448_KEY_SIZE) + return self._backend._ffi.buffer(buf, _X448_KEY_SIZE)[:] + + +@utils.register_interface(X448PrivateKey) +class _X448PrivateKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_key(self): + buf = self._backend._ffi.new("unsigned char []", _X448_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _X448_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_public_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _X448_KEY_SIZE) + return self._backend.x448_load_public_bytes(buf) + + def exchange(self, peer_public_key): + if not isinstance(peer_public_key, X448PublicKey): + raise TypeError("peer_public_key must be X448PublicKey.") + + return _evp_pkey_derive( + self._backend, self._evp_pkey, peer_public_key + ) diff --git a/src/cryptography/hazmat/primitives/asymmetric/x448.py b/src/cryptography/hazmat/primitives/asymmetric/x448.py new file mode 100644 index 000000000000..69bfa408f6d1 --- /dev/null +++ b/src/cryptography/hazmat/primitives/asymmetric/x448.py @@ -0,0 +1,61 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons + + +@six.add_metaclass(abc.ABCMeta) +class X448PublicKey(object): + @classmethod + def from_public_bytes(cls, data): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x448_supported(): + raise UnsupportedAlgorithm( + "X448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + ) + + return backend.x448_load_public_bytes(data) + + @abc.abstractmethod + def public_bytes(self): + """ + The serialized bytes of the public key. + """ + + +@six.add_metaclass(abc.ABCMeta) +class X448PrivateKey(object): + @classmethod + def generate(cls): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x448_supported(): + raise UnsupportedAlgorithm( + "X448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + ) + return backend.x448_generate_key() + + @classmethod + def _from_private_bytes(cls, data): + from cryptography.hazmat.backends.openssl.backend import backend + return backend.x448_load_private_bytes(data) + + @abc.abstractmethod + def public_key(self): + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def exchange(self, peer_public_key): + """ + Performs a key exchange operation using the provided peer's public key. + """ diff --git a/tests/hazmat/primitives/test_x448.py b/tests/hazmat/primitives/test_x448.py new file mode 100644 index 000000000000..71b25341e26b --- /dev/null +++ b/tests/hazmat/primitives/test_x448.py @@ -0,0 +1,127 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii +import os + +import pytest + +from cryptography.exceptions import _Reasons +from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives.asymmetric.x448 import ( + X448PrivateKey, X448PublicKey +) + +from ...utils import ( + load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm +) + + +@pytest.mark.supported( + only_if=lambda backend: not backend.x448_supported(), + skip_message="Requires OpenSSL without X448 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +def test_x448_unsupported(backend): + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): + X448PublicKey.from_public_bytes(b"0" * 32) + + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): + X448PrivateKey.generate() + + +@pytest.mark.supported( + only_if=lambda backend: backend.x448_supported(), + skip_message="Requires OpenSSL with X448 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +class TestX448Exchange(object): + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "X448", "rfc7748.txt"), + load_nist_vectors + ) + ) + def test_rfc7748(self, vector, backend): + private = binascii.unhexlify(vector["input_scalar"]) + public = binascii.unhexlify(vector["input_u"]) + shared_key = binascii.unhexlify(vector["output_u"]) + private_key = X448PrivateKey._from_private_bytes(private) + public_key = X448PublicKey.from_public_bytes(public) + computed_shared_key = private_key.exchange(public_key) + assert computed_shared_key == shared_key + + def test_rfc7748_1000_iteration(self, backend): + old_private = private = public = binascii.unhexlify( + b"05000000000000000000000000000000000000000000000000000000" + b"00000000000000000000000000000000000000000000000000000000" + ) + shared_key = binascii.unhexlify( + b"aa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4" + b"af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38" + ) + private_key = X448PrivateKey._from_private_bytes(private) + public_key = X448PublicKey.from_public_bytes(public) + for _ in range(1000): + computed_shared_key = private_key.exchange(public_key) + private_key = X448PrivateKey._from_private_bytes( + computed_shared_key + ) + public_key = X448PublicKey.from_public_bytes(old_private) + old_private = computed_shared_key + + assert computed_shared_key == shared_key + + # These vectors are also from RFC 7748 + # https://tools.ietf.org/html/rfc7748#section-6.2 + @pytest.mark.parametrize( + ("private_bytes", "public_bytes"), + [ + ( + binascii.unhexlify( + b"9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28d" + b"d9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b" + ), + binascii.unhexlify( + b"9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c" + b"22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0" + ) + ), + ( + binascii.unhexlify( + b"1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d" + b"6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d" + ), + binascii.unhexlify( + b"3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b430" + b"27d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609" + ) + ) + ] + ) + def test_public_bytes(self, private_bytes, public_bytes, backend): + private_key = X448PrivateKey._from_private_bytes(private_bytes) + assert private_key.public_key().public_bytes() == public_bytes + public_key = X448PublicKey.from_public_bytes(public_bytes) + assert public_key.public_bytes() == public_bytes + + def test_generate(self, backend): + key = X448PrivateKey.generate() + assert key + assert key.public_key() + + def test_invalid_type_exchange(self, backend): + key = X448PrivateKey.generate() + with pytest.raises(TypeError): + key.exchange(object()) + + def test_invalid_length_from_public_bytes(self, backend): + with pytest.raises(ValueError): + X448PublicKey.from_public_bytes(b"a" * 55) + + with pytest.raises(ValueError): + X448PublicKey.from_public_bytes(b"a" * 57) From 8ec59bef65914d340b19106068a2063a60b12139 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 22 Nov 2018 21:02:05 -0600 Subject: [PATCH 462/988] Added comments reminding us to improve this code when we go 1.1.1+ only (#4605) --- src/cryptography/hazmat/backends/openssl/backend.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index f0b09daca34a..c8a46b986b4e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2030,6 +2030,8 @@ def x509_name_bytes(self, name): return self._ffi.buffer(pp[0], res)[:] def x25519_load_public_bytes(self, data): + # When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 we can + # switch this to EVP_PKEY_new_raw_public_key evp_pkey = self._create_evp_pkey_gc() res = self._lib.EVP_PKEY_set_type(evp_pkey, self._lib.NID_X25519) backend.openssl_assert(res == 1) @@ -2040,6 +2042,8 @@ def x25519_load_public_bytes(self, data): return _X25519PublicKey(self, evp_pkey) def x25519_load_private_bytes(self, data): + # When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 we can + # switch this to EVP_PKEY_new_raw_private_key # OpenSSL only has facilities for loading PKCS8 formatted private # keys using the algorithm identifiers specified in # https://tools.ietf.org/html/draft-ietf-curdle-pkix-09. From bf621bafc55f225f9532ea29a0a88702a93c232e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 23 Nov 2018 22:17:44 +0800 Subject: [PATCH 463/988] refactor serialization module into package (#4606) * refactor serialization into a package so we can add a pkcs12 module * oops --- .../hazmat/backends/openssl/backend.py | 25 +++++++++++-------- .../primitives/serialization/__init__.py | 21 ++++++++++++++++ .../base.py} | 0 3 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 src/cryptography/hazmat/primitives/serialization/__init__.py rename src/cryptography/hazmat/primitives/{serialization.py => serialization/base.py} (100%) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index c8a46b986b4e..5d73a7e8606f 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -75,6 +75,9 @@ CBC, CFB, CFB8, CTR, ECB, GCM, OFB, XTS ) from cryptography.hazmat.primitives.kdf import scrypt +from cryptography.hazmat.primitives.serialization.base import ( + _ssh_write_mpint, _ssh_write_string +) from cryptography.x509 import ocsp @@ -1795,19 +1798,19 @@ def _openssh_public_key_bytes(self, key): if isinstance(key, rsa.RSAPublicKey): public_numbers = key.public_numbers() return b"ssh-rsa " + base64.b64encode( - serialization._ssh_write_string(b"ssh-rsa") + - serialization._ssh_write_mpint(public_numbers.e) + - serialization._ssh_write_mpint(public_numbers.n) + _ssh_write_string(b"ssh-rsa") + + _ssh_write_mpint(public_numbers.e) + + _ssh_write_mpint(public_numbers.n) ) elif isinstance(key, dsa.DSAPublicKey): public_numbers = key.public_numbers() parameter_numbers = public_numbers.parameter_numbers return b"ssh-dss " + base64.b64encode( - serialization._ssh_write_string(b"ssh-dss") + - serialization._ssh_write_mpint(parameter_numbers.p) + - serialization._ssh_write_mpint(parameter_numbers.q) + - serialization._ssh_write_mpint(parameter_numbers.g) + - serialization._ssh_write_mpint(public_numbers.y) + _ssh_write_string(b"ssh-dss") + + _ssh_write_mpint(parameter_numbers.p) + + _ssh_write_mpint(parameter_numbers.q) + + _ssh_write_mpint(parameter_numbers.g) + + _ssh_write_mpint(public_numbers.y) ) else: assert isinstance(key, ec.EllipticCurvePublicKey) @@ -1824,9 +1827,9 @@ def _openssh_public_key_bytes(self, key): "supported by the SSH public key format" ) return b"ecdsa-sha2-" + curve_name + b" " + base64.b64encode( - serialization._ssh_write_string(b"ecdsa-sha2-" + curve_name) + - serialization._ssh_write_string(curve_name) + - serialization._ssh_write_string(public_numbers.encode_point()) + _ssh_write_string(b"ecdsa-sha2-" + curve_name) + + _ssh_write_string(curve_name) + + _ssh_write_string(public_numbers.encode_point()) ) def _parameter_bytes(self, encoding, format, cdata): diff --git a/src/cryptography/hazmat/primitives/serialization/__init__.py b/src/cryptography/hazmat/primitives/serialization/__init__.py new file mode 100644 index 000000000000..cff775b8fc63 --- /dev/null +++ b/src/cryptography/hazmat/primitives/serialization/__init__.py @@ -0,0 +1,21 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.hazmat.primitives.serialization.base import ( + BestAvailableEncryption, Encoding, KeySerializationEncryption, + NoEncryption, ParameterFormat, PrivateFormat, PublicFormat, + load_der_parameters, load_der_private_key, load_der_public_key, + load_pem_parameters, load_pem_private_key, load_pem_public_key, + load_ssh_public_key, +) + +__all__ = [ + "load_der_parameters", "load_der_private_key", "load_der_public_key", + "load_pem_parameters", "load_pem_private_key", "load_pem_public_key", + "load_ssh_public_key", "Encoding", "PrivateFormat", "PublicFormat", + "ParameterFormat", "KeySerializationEncryption", "BestAvailableEncryption", + "NoEncryption", +] diff --git a/src/cryptography/hazmat/primitives/serialization.py b/src/cryptography/hazmat/primitives/serialization/base.py similarity index 100% rename from src/cryptography/hazmat/primitives/serialization.py rename to src/cryptography/hazmat/primitives/serialization/base.py From c8dd3c02e5ea1cbccd0df9c2cfa29582c8d25ed6 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 23 Nov 2018 18:43:06 -0600 Subject: [PATCH 464/988] Move SSH serialization to it's own file (#4607) * Move SSH serialization to it's own file * flake8 --- .../hazmat/backends/openssl/backend.py | 26 ++-- .../primitives/serialization/__init__.py | 4 +- .../hazmat/primitives/serialization/base.py | 133 ---------------- .../hazmat/primitives/serialization/ssh.py | 143 ++++++++++++++++++ 4 files changed, 158 insertions(+), 148 deletions(-) create mode 100644 src/cryptography/hazmat/primitives/serialization/ssh.py diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 5d73a7e8606f..44c2e3cd379e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -75,9 +75,7 @@ CBC, CFB, CFB8, CTR, ECB, GCM, OFB, XTS ) from cryptography.hazmat.primitives.kdf import scrypt -from cryptography.hazmat.primitives.serialization.base import ( - _ssh_write_mpint, _ssh_write_string -) +from cryptography.hazmat.primitives.serialization import ssh from cryptography.x509 import ocsp @@ -1798,19 +1796,19 @@ def _openssh_public_key_bytes(self, key): if isinstance(key, rsa.RSAPublicKey): public_numbers = key.public_numbers() return b"ssh-rsa " + base64.b64encode( - _ssh_write_string(b"ssh-rsa") + - _ssh_write_mpint(public_numbers.e) + - _ssh_write_mpint(public_numbers.n) + ssh._ssh_write_string(b"ssh-rsa") + + ssh._ssh_write_mpint(public_numbers.e) + + ssh._ssh_write_mpint(public_numbers.n) ) elif isinstance(key, dsa.DSAPublicKey): public_numbers = key.public_numbers() parameter_numbers = public_numbers.parameter_numbers return b"ssh-dss " + base64.b64encode( - _ssh_write_string(b"ssh-dss") + - _ssh_write_mpint(parameter_numbers.p) + - _ssh_write_mpint(parameter_numbers.q) + - _ssh_write_mpint(parameter_numbers.g) + - _ssh_write_mpint(public_numbers.y) + ssh._ssh_write_string(b"ssh-dss") + + ssh._ssh_write_mpint(parameter_numbers.p) + + ssh._ssh_write_mpint(parameter_numbers.q) + + ssh._ssh_write_mpint(parameter_numbers.g) + + ssh._ssh_write_mpint(public_numbers.y) ) else: assert isinstance(key, ec.EllipticCurvePublicKey) @@ -1827,9 +1825,9 @@ def _openssh_public_key_bytes(self, key): "supported by the SSH public key format" ) return b"ecdsa-sha2-" + curve_name + b" " + base64.b64encode( - _ssh_write_string(b"ecdsa-sha2-" + curve_name) + - _ssh_write_string(curve_name) + - _ssh_write_string(public_numbers.encode_point()) + ssh._ssh_write_string(b"ecdsa-sha2-" + curve_name) + + ssh._ssh_write_string(curve_name) + + ssh._ssh_write_string(public_numbers.encode_point()) ) def _parameter_bytes(self, encoding, format, cdata): diff --git a/src/cryptography/hazmat/primitives/serialization/__init__.py b/src/cryptography/hazmat/primitives/serialization/__init__.py index cff775b8fc63..3a34bf8f5648 100644 --- a/src/cryptography/hazmat/primitives/serialization/__init__.py +++ b/src/cryptography/hazmat/primitives/serialization/__init__.py @@ -9,7 +9,9 @@ NoEncryption, ParameterFormat, PrivateFormat, PublicFormat, load_der_parameters, load_der_private_key, load_der_public_key, load_pem_parameters, load_pem_private_key, load_pem_public_key, - load_ssh_public_key, +) +from cryptography.hazmat.primitives.serialization.ssh import ( + load_ssh_public_key ) __all__ = [ diff --git a/src/cryptography/hazmat/primitives/serialization/base.py b/src/cryptography/hazmat/primitives/serialization/base.py index bd09e6e3a7dc..5dd0c63979ef 100644 --- a/src/cryptography/hazmat/primitives/serialization/base.py +++ b/src/cryptography/hazmat/primitives/serialization/base.py @@ -5,15 +5,11 @@ from __future__ import absolute_import, division, print_function import abc -import base64 -import struct from enum import Enum import six from cryptography import utils -from cryptography.exceptions import UnsupportedAlgorithm -from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa def load_pem_private_key(data, password, backend): @@ -40,135 +36,6 @@ def load_der_parameters(data, backend): return backend.load_der_parameters(data) -def load_ssh_public_key(data, backend): - key_parts = data.split(b' ', 2) - - if len(key_parts) < 2: - raise ValueError( - 'Key is not in the proper format or contains extra data.') - - key_type = key_parts[0] - - if key_type == b'ssh-rsa': - loader = _load_ssh_rsa_public_key - elif key_type == b'ssh-dss': - loader = _load_ssh_dss_public_key - elif key_type in [ - b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', - ]: - loader = _load_ssh_ecdsa_public_key - else: - raise UnsupportedAlgorithm('Key type is not supported.') - - key_body = key_parts[1] - - try: - decoded_data = base64.b64decode(key_body) - except TypeError: - raise ValueError('Key is not in the proper format.') - - inner_key_type, rest = _ssh_read_next_string(decoded_data) - - if inner_key_type != key_type: - raise ValueError( - 'Key header and key body contain different key type values.' - ) - - return loader(key_type, rest, backend) - - -def _load_ssh_rsa_public_key(key_type, decoded_data, backend): - e, rest = _ssh_read_next_mpint(decoded_data) - n, rest = _ssh_read_next_mpint(rest) - - if rest: - raise ValueError('Key body contains extra bytes.') - - return rsa.RSAPublicNumbers(e, n).public_key(backend) - - -def _load_ssh_dss_public_key(key_type, decoded_data, backend): - p, rest = _ssh_read_next_mpint(decoded_data) - q, rest = _ssh_read_next_mpint(rest) - g, rest = _ssh_read_next_mpint(rest) - y, rest = _ssh_read_next_mpint(rest) - - if rest: - raise ValueError('Key body contains extra bytes.') - - parameter_numbers = dsa.DSAParameterNumbers(p, q, g) - public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) - - return public_numbers.public_key(backend) - - -def _load_ssh_ecdsa_public_key(expected_key_type, decoded_data, backend): - curve_name, rest = _ssh_read_next_string(decoded_data) - data, rest = _ssh_read_next_string(rest) - - if expected_key_type != b"ecdsa-sha2-" + curve_name: - raise ValueError( - 'Key header and key body contain different key type values.' - ) - - if rest: - raise ValueError('Key body contains extra bytes.') - - curve = { - b"nistp256": ec.SECP256R1, - b"nistp384": ec.SECP384R1, - b"nistp521": ec.SECP521R1, - }[curve_name]() - - if six.indexbytes(data, 0) != 4: - raise NotImplementedError( - "Compressed elliptic curve points are not supported" - ) - - numbers = ec.EllipticCurvePublicNumbers.from_encoded_point(curve, data) - return numbers.public_key(backend) - - -def _ssh_read_next_string(data): - """ - Retrieves the next RFC 4251 string value from the data. - - While the RFC calls these strings, in Python they are bytes objects. - """ - if len(data) < 4: - raise ValueError("Key is not in the proper format") - - str_len, = struct.unpack('>I', data[:4]) - if len(data) < str_len + 4: - raise ValueError("Key is not in the proper format") - - return data[4:4 + str_len], data[4 + str_len:] - - -def _ssh_read_next_mpint(data): - """ - Reads the next mpint from the data. - - Currently, all mpints are interpreted as unsigned. - """ - mpint_data, rest = _ssh_read_next_string(data) - - return ( - utils.int_from_bytes(mpint_data, byteorder='big', signed=False), rest - ) - - -def _ssh_write_string(data): - return struct.pack(">I", len(data)) + data - - -def _ssh_write_mpint(value): - data = utils.int_to_bytes(value) - if six.indexbytes(data, 0) & 0x80: - data = b"\x00" + data - return _ssh_write_string(data) - - class Encoding(Enum): PEM = "PEM" DER = "DER" diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py new file mode 100644 index 000000000000..f58ff0743297 --- /dev/null +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -0,0 +1,143 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import base64 +import struct + +import six + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa + + +def load_ssh_public_key(data, backend): + key_parts = data.split(b' ', 2) + + if len(key_parts) < 2: + raise ValueError( + 'Key is not in the proper format or contains extra data.') + + key_type = key_parts[0] + + if key_type == b'ssh-rsa': + loader = _load_ssh_rsa_public_key + elif key_type == b'ssh-dss': + loader = _load_ssh_dss_public_key + elif key_type in [ + b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', + ]: + loader = _load_ssh_ecdsa_public_key + else: + raise UnsupportedAlgorithm('Key type is not supported.') + + key_body = key_parts[1] + + try: + decoded_data = base64.b64decode(key_body) + except TypeError: + raise ValueError('Key is not in the proper format.') + + inner_key_type, rest = _ssh_read_next_string(decoded_data) + + if inner_key_type != key_type: + raise ValueError( + 'Key header and key body contain different key type values.' + ) + + return loader(key_type, rest, backend) + + +def _load_ssh_rsa_public_key(key_type, decoded_data, backend): + e, rest = _ssh_read_next_mpint(decoded_data) + n, rest = _ssh_read_next_mpint(rest) + + if rest: + raise ValueError('Key body contains extra bytes.') + + return rsa.RSAPublicNumbers(e, n).public_key(backend) + + +def _load_ssh_dss_public_key(key_type, decoded_data, backend): + p, rest = _ssh_read_next_mpint(decoded_data) + q, rest = _ssh_read_next_mpint(rest) + g, rest = _ssh_read_next_mpint(rest) + y, rest = _ssh_read_next_mpint(rest) + + if rest: + raise ValueError('Key body contains extra bytes.') + + parameter_numbers = dsa.DSAParameterNumbers(p, q, g) + public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) + + return public_numbers.public_key(backend) + + +def _load_ssh_ecdsa_public_key(expected_key_type, decoded_data, backend): + curve_name, rest = _ssh_read_next_string(decoded_data) + data, rest = _ssh_read_next_string(rest) + + if expected_key_type != b"ecdsa-sha2-" + curve_name: + raise ValueError( + 'Key header and key body contain different key type values.' + ) + + if rest: + raise ValueError('Key body contains extra bytes.') + + curve = { + b"nistp256": ec.SECP256R1, + b"nistp384": ec.SECP384R1, + b"nistp521": ec.SECP521R1, + }[curve_name]() + + if six.indexbytes(data, 0) != 4: + raise NotImplementedError( + "Compressed elliptic curve points are not supported" + ) + + numbers = ec.EllipticCurvePublicNumbers.from_encoded_point(curve, data) + return numbers.public_key(backend) + + +def _ssh_read_next_string(data): + """ + Retrieves the next RFC 4251 string value from the data. + + While the RFC calls these strings, in Python they are bytes objects. + """ + if len(data) < 4: + raise ValueError("Key is not in the proper format") + + str_len, = struct.unpack('>I', data[:4]) + if len(data) < str_len + 4: + raise ValueError("Key is not in the proper format") + + return data[4:4 + str_len], data[4 + str_len:] + + +def _ssh_read_next_mpint(data): + """ + Reads the next mpint from the data. + + Currently, all mpints are interpreted as unsigned. + """ + mpint_data, rest = _ssh_read_next_string(data) + + return ( + utils.int_from_bytes(mpint_data, byteorder='big', signed=False), rest + ) + + +def _ssh_write_string(data): + return struct.pack(">I", len(data)) + data + + +def _ssh_write_mpint(value): + data = utils.int_to_bytes(value) + if six.indexbytes(data, 0) & 0x80: + data = b"\x00" + data + return _ssh_write_string(data) From 8f3d259bd8b02e1d33fe1dd98ecfc173cee24516 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 24 Nov 2018 23:30:39 +0800 Subject: [PATCH 465/988] add ed448 test vectors (#4608) --- docs/development/test-vectors.rst | 1 + .../asymmetric/Ed448/rfc8032.txt | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/rfc8032.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index a3ffc9abe79c..10a15b23afaa 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -50,6 +50,7 @@ Asymmetric ciphers Ruby test suite. * X25519 and X448 test vectors from :rfc:`7748`. * RSA OAEP with custom label from the `BoringSSL evp tests`_. +* Ed448 test vectors from :rfc:`8032`. Custom asymmetric vectors diff --git a/vectors/cryptography_vectors/asymmetric/Ed448/rfc8032.txt b/vectors/cryptography_vectors/asymmetric/Ed448/rfc8032.txt new file mode 100644 index 000000000000..28126a33ade6 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/Ed448/rfc8032.txt @@ -0,0 +1,58 @@ +# Converted to NIST style from RFC 8032 + +COUNT = 0 +SECRET = 6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b +PUBLIC = 5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180 +MESSAGE = +SIGNATURE = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600 + + +COUNT = 1 +SECRET = c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463afbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e +PUBLIC = 43ba28f430cdff456ae531545f7ecd0ac834a55d9358c0372bfa0c6c6798c0866aea01eb00742802b8438ea4cb82169c235160627b4c3a9480 +MESSAGE = 03 +SIGNATURE = 26b8f91727bd62897af15e41eb43c377efb9c610d48f2335cb0bd0087810f4352541b143c4b981b7e18f62de8ccdf633fc1bf037ab7cd779805e0dbcc0aae1cbcee1afb2e027df36bc04dcecbf154336c19f0af7e0a6472905e799f1953d2a0ff3348ab21aa4adafd1d234441cf807c03a00 + + +COUNT = 2 +SECRET = c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463afbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e +PUBLIC = 43ba28f430cdff456ae531545f7ecd0ac834a55d9358c0372bfa0c6c6798c0866aea01eb00742802b8438ea4cb82169c235160627b4c3a9480 +MESSAGE = 03 +CONTEXT = 666f6f +SIGNATURE = d4f8f6131770dd46f40867d6fd5d5055de43541f8c5e35abbcd001b32a89f7d2151f7647f11d8ca2ae279fb842d607217fce6e042f6815ea000c85741de5c8da1144a6a1aba7f96de42505d7a7298524fda538fccbbb754f578c1cad10d54d0d5428407e85dcbc98a49155c13764e66c3c00 + +COUNT = 3 +SECRET = cd23d24f714274e744343237b93290f511f6425f98e64459ff203e8985083ffdf60500553abc0e05cd02184bdb89c4ccd67e187951267eb328 +PUBLIC = dcea9e78f35a1bf3499a831b10b86c90aac01cd84b67a0109b55a36e9328b1e365fce161d71ce7131a543ea4cb5f7e9f1d8b00696447001400 +MESSAGE = 0c3e544074ec63b0265e0c +SIGNATURE = 1f0a8888ce25e8d458a21130879b840a9089d999aaba039eaf3e3afa090a09d389dba82c4ff2ae8ac5cdfb7c55e94d5d961a29fe0109941e00b8dbdeea6d3b051068df7254c0cdc129cbe62db2dc957dbb47b51fd3f213fb8698f064774250a5028961c9bf8ffd973fe5d5c206492b140e00 + +COUNT = 4 +SECRET = 258cdd4ada32ed9c9ff54e63756ae582fb8fab2ac721f2c8e676a72768513d939f63dddb55609133f29adf86ec9929dccb52c1c5fd2ff7e21b +PUBLIC = 3ba16da0c6f2cc1f30187740756f5e798d6bc5fc015d7c63cc9510ee3fd44adc24d8e968b6e46e6f94d19b945361726bd75e149ef09817f580 +MESSAGE = 64a65f3cdedcdd66811e2915 +SIGNATURE = 7eeeab7c4e50fb799b418ee5e3197ff6bf15d43a14c34389b59dd1a7b1b85b4ae90438aca634bea45e3a2695f1270f07fdcdf7c62b8efeaf00b45c2c96ba457eb1a8bf075a3db28e5c24f6b923ed4ad747c3c9e03c7079efb87cb110d3a99861e72003cbae6d6b8b827e4e6c143064ff3c00 + +COUNT = 5 +SECRET = 7ef4e84544236752fbb56b8f31a23a10e42814f5f55ca037cdcc11c64c9a3b2949c1bb60700314611732a6c2fea98eebc0266a11a93970100e +PUBLIC = b3da079b0aa493a5772029f0467baebee5a8112d9d3a22532361da294f7bb3815c5dc59e176b4d9f381ca0938e13c6c07b174be65dfa578e80 +MESSAGE = 64a65f3cdedcdd66811e2915e7 +SIGNATURE = 6a12066f55331b6c22acd5d5bfc5d71228fbda80ae8dec26bdd306743c5027cb4890810c162c027468675ecf645a83176c0d7323a2ccde2d80efe5a1268e8aca1d6fbc194d3f77c44986eb4ab4177919ad8bec33eb47bbb5fc6e28196fd1caf56b4e7e0ba5519234d047155ac727a1053100 + +COUNT = 6 +SECRET = d65df341ad13e008567688baedda8e9dcdc17dc024974ea5b4227b6530e339bff21f99e68ca6968f3cca6dfe0fb9f4fab4fa135d5542ea3f01 +PUBLIC = df9705f58edbab802c7f8363cfe5560ab1c6132c20a9f1dd163483a26f8ac53a39d6808bf4a1dfbd261b099bb03b3fb50906cb28bd8a081f00 +MESSAGE = bd0f6a3747cd561bdddf4640a332461a4a30a12a434cd0bf40d766d9c6d458e5512204a30c17d1f50b5079631f64eb3112182da3005835461113718d1a5ef944 +SIGNATURE = 554bc2480860b49eab8532d2a533b7d578ef473eeb58c98bb2d0e1ce488a98b18dfde9b9b90775e67f47d4a1c3482058efc9f40d2ca033a0801b63d45b3b722ef552bad3b4ccb667da350192b61c508cf7b6b5adadc2c8d9a446ef003fb05cba5f30e88e36ec2703b349ca229c2670833900 + +COUNT = 7 +SECRET = 2ec5fe3c17045abdb136a5e6a913e32ab75ae68b53d2fc149b77e504132d37569b7e766ba74a19bd6162343a21c8590aa9cebca9014c636df5 +PUBLIC = 79756f014dcfe2079f5dd9e718be4171e2ef2486a08f25186f6bff43a9936b9bfe12402b08ae65798a3d81e22e9ec80e7690862ef3d4ed3a00 +MESSAGE = 15777532b0bdd0d1389f636c5f6b9ba734c90af572877e2d272dd078aa1e567cfa80e12928bb542330e8409f3174504107ecd5efac61ae7504dabe2a602ede89e5cca6257a7c77e27a702b3ae39fc769fc54f2395ae6a1178cab4738e543072fc1c177fe71e92e25bf03e4ecb72f47b64d0465aaea4c7fad372536c8ba516a6039c3c2a39f0e4d832be432dfa9a706a6e5c7e19f397964ca4258002f7c0541b590316dbc5622b6b2a6fe7a4abffd96105eca76ea7b98816af0748c10df048ce012d901015a51f189f3888145c03650aa23ce894c3bd889e030d565071c59f409a9981b51878fd6fc110624dcbcde0bf7a69ccce38fabdf86f3bef6044819de11 +SIGNATURE = c650ddbb0601c19ca11439e1640dd931f43c518ea5bea70d3dcde5f4191fe53f00cf966546b72bcc7d58be2b9badef28743954e3a44a23f880e8d4f1cfce2d7a61452d26da05896f0a50da66a239a8a188b6d825b3305ad77b73fbac0836ecc60987fd08527c1a8e80d5823e65cafe2a3d00 + +COUNT = 8 +SECRET = 872d093780f5d3730df7c212664b37b8a0f24f56810daa8382cd4fa3f77634ec44dc54f1c2ed9bea86fafb7632d8be199ea165f5ad55dd9ce8 +PUBLIC = a81b2e8a70a5ac94ffdbcc9badfc3feb0801f258578bb114ad44ece1ec0e799da08effb81c5d685c0c56f64eecaef8cdf11cc38737838cf400 +MESSAGE = 6ddf802e1aae4986935f7f981ba3f0351d6273c0a0c22c9c0e8339168e675412a3debfaf435ed651558007db4384b650fcc07e3b586a27a4f7a00ac8a6fec2cd86ae4bf1570c41e6a40c931db27b2faa15a8cedd52cff7362c4e6e23daec0fbc3a79b6806e316efcc7b68119bf46bc76a26067a53f296dafdbdc11c77f7777e972660cf4b6a9b369a6665f02e0cc9b6edfad136b4fabe723d2813db3136cfde9b6d044322fee2947952e031b73ab5c603349b307bdc27bc6cb8b8bbd7bd323219b8033a581b59eadebb09b3c4f3d2277d4f0343624acc817804728b25ab797172b4c5c21a22f9c7839d64300232eb66e53f31c723fa37fe387c7d3e50bdf9813a30e5bb12cf4cd930c40cfb4e1fc622592a49588794494d56d24ea4b40c89fc0596cc9ebb961c8cb10adde976a5d602b1c3f85b9b9a001ed3c6a4d3b1437f52096cd1956d042a597d561a596ecd3d1735a8d570ea0ec27225a2c4aaff26306d1526c1af3ca6d9cf5a2c98f47e1c46db9a33234cfd4d81f2c98538a09ebe76998d0d8fd25997c7d255c6d66ece6fa56f11144950f027795e653008f4bd7ca2dee85d8e90f3dc315130ce2a00375a318c7c3d97be2c8ce5b6db41a6254ff264fa6155baee3b0773c0f497c573f19bb4f4240281f0b1f4f7be857a4e59d416c06b4c50fa09e1810ddc6b1467baeac5a3668d11b6ecaa901440016f389f80acc4db977025e7f5924388c7e340a732e554440e76570f8dd71b7d640b3450d1fd5f0410a18f9a3494f707c717b79b4bf75c98400b096b21653b5d217cf3565c9597456f70703497a078763829bc01bb1cbc8fa04eadc9a6e3f6699587a9e75c94e5bab0036e0b2e711392cff0047d0d6b05bd2a588bc109718954259f1d86678a579a3120f19cfb2963f177aeb70f2d4844826262e51b80271272068ef5b3856fa8535aa2a88b2d41f2a0e2fda7624c2850272ac4a2f561f8f2f7a318bfd5caf9696149e4ac824ad3460538fdc25421beec2cc6818162d06bbed0c40a387192349db67a118bada6cd5ab0140ee273204f628aad1c135f770279a651e24d8c14d75a6059d76b96a6fd857def5e0b354b27ab937a5815d16b5fae407ff18222c6d1ed263be68c95f32d908bd895cd76207ae726487567f9a67dad79abec316f683b17f2d02bf07e0ac8b5bc6162cf94697b3c27cd1fea49b27f23ba2901871962506520c392da8b6ad0d99f7013fbc06c2c17a569500c8a7696481c1cd33e9b14e40b82e79a5f5db82571ba97bae3ad3e0479515bb0e2b0f3bfcd1fd33034efc6245eddd7ee2086ddae2600d8ca73e214e8c2b0bdb2b047c6a464a562ed77b73d2d841c4b34973551257713b753632efba348169abc90a68f42611a40126d7cb21b58695568186f7e569d2ff0f9e745d0487dd2eb997cafc5abf9dd102e62ff66cba87 +SIGNATURE = e301345a41a39a4d72fff8df69c98075a0cc082b802fc9b2b6bc503f926b65bddf7f4c8f1cb49f6396afc8a70abe6d8aef0db478d4c6b2970076c6a0484fe76d76b3a97625d79f1ce240e7c576750d295528286f719b413de9ada3e8eb78ed573603ce30d8bb761785dc30dbc320869e1a00 From b318e3719caa98523ea0020c9997171abb85dff4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 24 Nov 2018 16:16:43 -0600 Subject: [PATCH 466/988] Add a retry on docker pull to be more resilient to intermittent failures (#4609) --- .travis/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/install.sh b/.travis/install.sh index def7343be5bd..a4bc3c978fdd 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -51,7 +51,7 @@ if [ -n "${DOCKER}" ]; then echo "OPENSSL and LIBRESSL are not allowed when DOCKER is set." exit 1 fi - docker pull "$DOCKER" + docker pull "$DOCKER" || docker pull "$DOCKER" || docker pull "$DOCKER" fi if [ -z "${DOWNSTREAM}" ]; then From 2f2f3d2e414a0167ae3a98b9b608904b2c76a35f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 29 Nov 2018 11:06:14 +0800 Subject: [PATCH 467/988] fix certbot downstream, show commit hash for all downstreams (#4614) * fix certbot downstream, show commit hash for all downstreams * Update aws-encryption-sdk.sh * lol --- .travis/downstream.d/aws-encryption-sdk.sh | 1 + .travis/downstream.d/certbot-josepy.sh | 1 + .travis/downstream.d/certbot.sh | 11 +++++++---- .travis/downstream.d/dynamodb-encryption-sdk.sh | 1 + .travis/downstream.d/paramiko.sh | 1 + .travis/downstream.d/pyopenssl.sh | 1 + .travis/downstream.d/twisted.sh | 1 + .travis/downstream.d/urllib3.sh | 1 + 8 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.travis/downstream.d/aws-encryption-sdk.sh b/.travis/downstream.d/aws-encryption-sdk.sh index 044f70d94385..d986c7490382 100755 --- a/.travis/downstream.d/aws-encryption-sdk.sh +++ b/.travis/downstream.d/aws-encryption-sdk.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth=1 https://github.com/awslabs/aws-encryption-sdk-python cd aws-encryption-sdk-python + git rev-parse HEAD pip install -e . pip install -r test/upstream-requirements-py27.txt ;; diff --git a/.travis/downstream.d/certbot-josepy.sh b/.travis/downstream.d/certbot-josepy.sh index 57e539b2b6dc..0acf9547390d 100755 --- a/.travis/downstream.d/certbot-josepy.sh +++ b/.travis/downstream.d/certbot-josepy.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth=1 https://github.com/certbot/josepy cd josepy + git rev-parse HEAD pip install -e ".[tests]" ;; run) diff --git a/.travis/downstream.d/certbot.sh b/.travis/downstream.d/certbot.sh index 78ec7f51aaed..6061e31076fd 100755 --- a/.travis/downstream.d/certbot.sh +++ b/.travis/downstream.d/certbot.sh @@ -4,13 +4,16 @@ case "${1}" in install) git clone --depth=1 https://github.com/certbot/certbot cd certbot - pip install pytest pytest-mock mock - pip install -e acme - pip install -e . + git rev-parse HEAD + pip install -e acme[dev] + pip install -e .[dev] ;; run) cd certbot - pytest certbot/tests + # Ignore some warnings for now since they're now automatically promoted + # to errors. We can probably remove this when acme gets split into + # its own repo + pytest -Wignore certbot/tests pytest acme ;; *) diff --git a/.travis/downstream.d/dynamodb-encryption-sdk.sh b/.travis/downstream.d/dynamodb-encryption-sdk.sh index 196cd5b6e3eb..7ceff16d319f 100755 --- a/.travis/downstream.d/dynamodb-encryption-sdk.sh +++ b/.travis/downstream.d/dynamodb-encryption-sdk.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth=1 https://github.com/awslabs/aws-dynamodb-encryption-python cd aws-dynamodb-encryption-python + git rev-parse HEAD pip install -e . pip install -r test/upstream-requirements-py27.txt ;; diff --git a/.travis/downstream.d/paramiko.sh b/.travis/downstream.d/paramiko.sh index 55a89265b81e..c994defb0f90 100755 --- a/.travis/downstream.d/paramiko.sh +++ b/.travis/downstream.d/paramiko.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth=1 https://github.com/paramiko/paramiko cd paramiko + git rev-parse HEAD pip install -e . pip install -r dev-requirements.txt ;; diff --git a/.travis/downstream.d/pyopenssl.sh b/.travis/downstream.d/pyopenssl.sh index 60fc64f589d9..89e4e3e7ec33 100755 --- a/.travis/downstream.d/pyopenssl.sh +++ b/.travis/downstream.d/pyopenssl.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth=1 https://github.com/pyca/pyopenssl cd pyopenssl + git rev-parse HEAD pip install -e ".[test]" ;; run) diff --git a/.travis/downstream.d/twisted.sh b/.travis/downstream.d/twisted.sh index 2710545f916d..9b98d82b0525 100755 --- a/.travis/downstream.d/twisted.sh +++ b/.travis/downstream.d/twisted.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth=1 https://github.com/twisted/twisted cd twisted + git rev-parse HEAD pip install -e ".[tls,conch,http2]" ;; run) diff --git a/.travis/downstream.d/urllib3.sh b/.travis/downstream.d/urllib3.sh index 4f5dfafbb098..dad06159846f 100755 --- a/.travis/downstream.d/urllib3.sh +++ b/.travis/downstream.d/urllib3.sh @@ -4,6 +4,7 @@ case "${1}" in install) git clone --depth 1 https://github.com/shazow/urllib3 cd urllib3 + git rev-parse HEAD pip install -r ./dev-requirements.txt pip install -e ".[socks]" ;; From e4e7b89fb627b372cde4158ceb7078d8769497cb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 29 Nov 2018 11:51:38 +0800 Subject: [PATCH 468/988] PKCS12 Basic Parsing (#4553) * PKCS12 parsing support * running all the tests is so gauche * rename func * various significant fixes * dangerous idiot here * move pkcs12 * docs updates * a bit more prose --- CHANGELOG.rst | 2 + .../primitives/asymmetric/serialization.rst | 37 ++++++ .../hazmat/backends/openssl/backend.py | 46 ++++++++ .../hazmat/primitives/serialization/pkcs12.py | 9 ++ tests/hazmat/backends/test_openssl_memleak.py | 18 +++ tests/hazmat/primitives/test_pkcs12.py | 110 ++++++++++++++++++ 6 files changed, 222 insertions(+) create mode 100644 src/cryptography/hazmat/primitives/serialization/pkcs12.py create mode 100644 tests/hazmat/primitives/test_pkcs12.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6f2c964a7499..0cc468c5ddd8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,8 @@ Changelog :class:`~cryptography.hazmat.primitives.hashes.SHA3_384`, and :class:`~cryptography.hazmat.primitives.hashes.SHA3_512` when using OpenSSL 1.1.1. +* Added initial support for parsing PKCS12 files with + :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_key_and_certificates`. .. _v2-4-2: diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 90ec10eb9b0b..7b3fb1d69ebe 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -397,9 +397,46 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than :raises cryptography.exceptions.UnsupportedAlgorithm: If the serialized key is of a type that is not supported. +PKCS12 +~~~~~~ + +.. currentmodule:: cryptography.hazmat.primitives.serialization.pkcs12 + +PKCS12 is a binary format described in :rfc:`7292`. It can contain +certificates, keys, and more. PKCS12 files commonly have a ``pfx`` or ``p12`` +file suffix. + +.. note:: + + ``cryptography`` only supports a single private key and associated + certificates when parsing PKCS12 files at this time. + +.. function:: load_key_and_certificates(data, password, backend) + + .. versionadded:: 2.5 + + Deserialize a PKCS12 blob. + + :param bytes data: The binary data. + + :param bytes password: The password to use to decrypt the data. ``None`` + if the PKCS12 is not encrypted. + + :param backend: A backend instance. + + :returns: A tuple of + ``(private_key, certificate, additional_certificates)``. + ``private_key`` is a private key type or ``None``, ``certificate`` + is either the :class:`~cryptography.x509.Certificate` whose public key + matches the private key in the PKCS 12 object or ``None``, and + ``additional_certificates`` is a list of all other + :class:`~cryptography.x509.Certificate` instances in the PKCS12 object. + Serialization Formats ~~~~~~~~~~~~~~~~~~~~~ +.. currentmodule:: cryptography.hazmat.primitives.serialization + .. class:: PrivateFormat .. versionadded:: 0.8 diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 44c2e3cd379e..5a22a555da79 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2129,6 +2129,52 @@ def aead_cipher_supported(self, cipher): self._lib.EVP_get_cipherbyname(cipher_name) != self._ffi.NULL ) + def load_key_and_certificates_from_pkcs12(self, data, password): + if password is None: + password = self._ffi.NULL + elif not isinstance(password, bytes): + raise TypeError("Password must be a byte string or None") + + bio = self._bytes_to_bio(data) + p12 = self._lib.d2i_PKCS12_bio(bio.bio, self._ffi.NULL) + if p12 == self._ffi.NULL: + self._consume_errors() + raise ValueError("Could not deserialize PKCS12 data") + + p12 = self._ffi.gc(p12, self._lib.PKCS12_free) + evp_pkey_ptr = self._ffi.new("EVP_PKEY **") + x509_ptr = self._ffi.new("X509 **") + sk_x509_ptr = self._ffi.new("Cryptography_STACK_OF_X509 **") + res = self._lib.PKCS12_parse( + p12, password, evp_pkey_ptr, x509_ptr, sk_x509_ptr + ) + if res == 0: + self._consume_errors() + raise ValueError("Invalid password or PKCS12 data") + + cert = None + key = None + additional_certificates = [] + + if evp_pkey_ptr[0] != self._ffi.NULL: + evp_pkey = self._ffi.gc(evp_pkey_ptr[0], self._lib.EVP_PKEY_free) + key = self._evp_pkey_to_private_key(evp_pkey) + + if x509_ptr[0] != self._ffi.NULL: + x509 = self._ffi.gc(x509_ptr[0], self._lib.X509_free) + cert = _Certificate(self, x509) + + if sk_x509_ptr[0] != self._ffi.NULL: + sk_x509 = self._ffi.gc(sk_x509_ptr[0], self._lib.sk_X509_free) + num = self._lib.sk_X509_num(sk_x509_ptr[0]) + for i in range(num): + x509 = self._lib.sk_X509_value(sk_x509, i) + x509 = self._ffi.gc(x509, self._lib.X509_free) + self.openssl_assert(x509 != self._ffi.NULL) + additional_certificates.append(_Certificate(self, x509)) + + return (key, cert, additional_certificates) + class GetCipherByName(object): def __init__(self, fmt): diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs12.py b/src/cryptography/hazmat/primitives/serialization/pkcs12.py new file mode 100644 index 000000000000..98161d57a330 --- /dev/null +++ b/src/cryptography/hazmat/primitives/serialization/pkcs12.py @@ -0,0 +1,9 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + + +def load_key_and_certificates(data, password, backend): + return backend.load_key_and_certificates_from_pkcs12(data, password) diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 483387af1f70..6f42ed79c75e 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -307,3 +307,21 @@ def func(): ).add_extension(x509.OCSPNonce(b"0000"), False) req = builder.build() """)) + + @pytest.mark.parametrize("path", [ + "pkcs12/cert-aes256cbc-no-key.p12", + "pkcs12/cert-key-aes256cbc.p12", + ]) + def test_load_pkcs12_key_and_certificates(self, path): + assert_no_memory_leaks(textwrap.dedent(""" + def func(path): + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives.serialization import pkcs12 + import cryptography_vectors + + with cryptography_vectors.open_vector_file(path, "rb") as f: + pkcs12.load_key_and_certificates( + f.read(), b"cryptography", backend + ) + """), [path]) diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py new file mode 100644 index 000000000000..85be3b517eea --- /dev/null +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -0,0 +1,110 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import os + +import pytest + +from cryptography import x509 +from cryptography.hazmat.backends.interfaces import DERSerializationBackend +from cryptography.hazmat.primitives.serialization import load_pem_private_key +from cryptography.hazmat.primitives.serialization.pkcs12 import ( + load_key_and_certificates +) + +from .utils import load_vectors_from_file + + +@pytest.mark.requires_backend_interface(interface=DERSerializationBackend) +class TestPKCS12(object): + @pytest.mark.parametrize( + ("filename", "password"), + [ + ("cert-key-aes256cbc.p12", b"cryptography"), + ("cert-none-key-none.p12", b"cryptography"), + ("cert-rc2-key-3des.p12", b"cryptography"), + ("no-password.p12", None), + ] + ) + def test_load_pkcs12_ec_keys(self, filename, password, backend): + cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca.pem"), + lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read(), backend + ), mode="rb" + ) + key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca_key.pem"), + lambda pemfile: load_pem_private_key( + pemfile.read(), None, backend + ), mode="rb" + ) + parsed_key, parsed_cert, parsed_more_certs = load_vectors_from_file( + os.path.join("pkcs12", filename), + lambda derfile: load_key_and_certificates( + derfile.read(), password, backend + ), mode="rb" + ) + assert parsed_cert == cert + assert parsed_key.private_numbers() == key.private_numbers() + assert parsed_more_certs == [] + + def test_load_pkcs12_cert_only(self, backend): + cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca.pem"), + lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read(), backend + ), mode="rb" + ) + parsed_key, parsed_cert, parsed_more_certs = load_vectors_from_file( + os.path.join("pkcs12", "cert-aes256cbc-no-key.p12"), + lambda data: load_key_and_certificates( + data.read(), b"cryptography", backend + ), + mode="rb" + ) + assert parsed_cert is None + assert parsed_key is None + assert parsed_more_certs == [cert] + + def test_load_pkcs12_key_only(self, backend): + key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca_key.pem"), + lambda pemfile: load_pem_private_key( + pemfile.read(), None, backend + ), mode="rb" + ) + parsed_key, parsed_cert, parsed_more_certs = load_vectors_from_file( + os.path.join("pkcs12", "no-cert-key-aes256cbc.p12"), + lambda data: load_key_and_certificates( + data.read(), b"cryptography", backend + ), + mode="rb" + ) + assert parsed_key.private_numbers() == key.private_numbers() + assert parsed_cert is None + assert parsed_more_certs == [] + + def test_non_bytes(self, backend): + with pytest.raises(TypeError): + load_key_and_certificates( + b"irrelevant", object(), backend + ) + + def test_not_a_pkcs12(self, backend): + with pytest.raises(ValueError): + load_key_and_certificates( + b"invalid", b"pass", backend + ) + + def test_invalid_password(self, backend): + with pytest.raises(ValueError): + load_vectors_from_file( + os.path.join("pkcs12", "cert-key-aes256cbc.p12"), + lambda derfile: load_key_and_certificates( + derfile.read(), b"invalid", backend + ), mode="rb" + ) From eb3e2e0d73c86d876d48aa6bde9fcf01c761c98f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Dec 2018 12:15:20 +0800 Subject: [PATCH 469/988] IssuingDistributionPoint support (parse only) (#4552) * IssuingDistributionPoint support h/t to Irina Renteria for the initial work here * python 2 unfortunately still exists * py2 repr * typo caught by flake8 * add docs * review feedback * reorder args, other fixes * use the alex name * add changelog --- CHANGELOG.rst | 1 + docs/x509/reference.rst | 71 +++++ .../hazmat/backends/openssl/decode_asn1.py | 25 ++ src/cryptography/x509/__init__.py | 7 +- src/cryptography/x509/extensions.py | 130 ++++++++ tests/x509/test_x509_ext.py | 288 ++++++++++++++++++ 6 files changed, 519 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0cc468c5ddd8..b75836d46f38 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,6 +18,7 @@ Changelog 1.1.1. * Added initial support for parsing PKCS12 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_key_and_certificates`. +* Added support for :class:`~cryptography.x509.IssuingDistributionPoint`. .. _v2-4-2: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 5e81491683f3..1589105938e6 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2319,6 +2319,77 @@ X.509 Extensions :type: int +.. class:: IssuingDistributionPoint(full_name, relative_name,\ + only_contains_user_certs, only_contains_ca_certs, only_some_reasons,\ + indirect_crl, only_contains_attribute_certs) + + .. versionadded:: 2.5 + + Issuing distribution point is a CRL extension that identifies the CRL + distribution point and scope for a particular CRL. It indicates whether + the CRL covers revocation for end entity certificates only, CA certificates + only, attribute certificates only, or a limited set of reason codes. For + specific details on the way this extension should be processed see + :rfc:`5280`. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns + :attr:`~cryptography.x509.oid.ExtensionOID.ISSUING_DISTRIBUTION_POINT`. + + .. attribute:: only_contains_user_certs + + :type: bool + + Set to ``True`` if the CRL this extension is embedded within only + contains information about user certificates. + + .. attribute:: only_contains_ca_certs + + :type: bool + + Set to ``True`` if the CRL this extension is embedded within only + contains information about CA certificates. + + .. attribute:: indirect_crl + + :type: bool + + Set to ``True`` if the CRL this extension is embedded within includes + certificates issued by one or more authorities other than the CRL + issuer. + + .. attribute:: only_contains_attribute_certs + + :type: bool + + Set to ``True`` if the CRL this extension is embedded within only + contains information about attribute certificates. + + .. attribute:: only_some_reasons + + :type: frozenset of :class:`ReasonFlags` or None + + The reasons for which the issuing distribution point is valid. None + indicates that it is valid for all reasons. + + .. attribute:: full_name + + :type: list of :class:`GeneralName` instances or None + + This field describes methods to retrieve the CRL. At most one of + ``full_name`` or ``relative_name`` will be non-None. + + .. attribute:: relative_name + + :type: :class:`RelativeDistinguishedName` or None + + This field describes methods to retrieve the CRL relative to the CRL + issuer. At most one of ``full_name`` or ``relative_name`` will be + non-None. + .. class:: UnrecognizedExtension .. versionadded:: 1.2 diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index e06e8cd6d745..007675d4e6eb 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -464,6 +464,30 @@ def _decode_general_subtrees(backend, stack_subtrees): return subtrees +def _decode_issuing_dist_point(backend, idp): + idp = backend._ffi.cast("ISSUING_DIST_POINT *", idp) + idp = backend._ffi.gc(idp, backend._lib.ISSUING_DIST_POINT_free) + if idp.distpoint != backend._ffi.NULL: + full_name, relative_name = _decode_distpoint(backend, idp.distpoint) + else: + full_name = None + relative_name = None + + only_user = idp.onlyuser == 255 + only_ca = idp.onlyCA == 255 + indirect_crl = idp.indirectCRL == 255 + only_attr = idp.onlyattr == 255 + if idp.onlysomereasons != backend._ffi.NULL: + only_some_reasons = _decode_reasons(backend, idp.onlysomereasons) + else: + only_some_reasons = None + + return x509.IssuingDistributionPoint( + full_name, relative_name, only_user, only_ca, only_some_reasons, + indirect_crl, only_attr + ) + + def _decode_policy_constraints(backend, pc): pc = backend._ffi.cast("POLICY_CONSTRAINTS *", pc) pc = backend._ffi.gc(pc, backend._lib.POLICY_CONSTRAINTS_free) @@ -814,6 +838,7 @@ def _decode_nonce(backend, nonce): ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( _decode_authority_information_access ), + ExtensionOID.ISSUING_DISTRIBUTION_POINT: _decode_issuing_dist_point, } _OCSP_REQ_EXTENSION_HANDLERS = { diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index fd0194555ebb..b761e264aaca 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -21,9 +21,9 @@ DeltaCRLIndicator, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, Extension, ExtensionNotFound, ExtensionType, Extensions, FreshestCRL, GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, - KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, OCSPNonce, - PolicyConstraints, PolicyInformation, PrecertPoison, - PrecertificateSignedCertificateTimestamps, ReasonFlags, + IssuingDistributionPoint, KeyUsage, NameConstraints, NoticeReference, + OCSPNoCheck, OCSPNonce, PolicyConstraints, PolicyInformation, + PrecertPoison, PrecertificateSignedCertificateTimestamps, ReasonFlags, SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice ) @@ -134,6 +134,7 @@ "Extension", "ExtendedKeyUsage", "FreshestCRL", + "IssuingDistributionPoint", "TLSFeature", "TLSFeatureType", "OCSPNoCheck", diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index fc5c17a9ff6b..12071b662fdd 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1446,6 +1446,136 @@ def __repr__(self): nonce = utils.read_only_property("_nonce") +@utils.register_interface(ExtensionType) +class IssuingDistributionPoint(object): + oid = ExtensionOID.ISSUING_DISTRIBUTION_POINT + + def __init__(self, full_name, relative_name, only_contains_user_certs, + only_contains_ca_certs, only_some_reasons, indirect_crl, + only_contains_attribute_certs): + if ( + only_some_reasons and ( + not isinstance(only_some_reasons, frozenset) or not all( + isinstance(x, ReasonFlags) for x in only_some_reasons + ) + ) + ): + raise TypeError( + "only_some_reasons must be None or frozenset of ReasonFlags" + ) + + if only_some_reasons and ( + ReasonFlags.unspecified in only_some_reasons or + ReasonFlags.remove_from_crl in only_some_reasons + ): + raise ValueError( + "unspecified and remove_from_crl are not valid reasons in an " + "IssuingDistributionPoint" + ) + + if not ( + isinstance(only_contains_user_certs, bool) and + isinstance(only_contains_ca_certs, bool) and + isinstance(indirect_crl, bool) and + isinstance(only_contains_attribute_certs, bool) + ): + raise TypeError( + "only_contains_user_certs, only_contains_ca_certs, " + "indirect_crl and only_contains_attribute_certs " + "must all be boolean." + ) + + crl_constraints = [ + only_contains_user_certs, only_contains_ca_certs, + indirect_crl, only_contains_attribute_certs + ] + + if len([x for x in crl_constraints if x]) > 1: + raise ValueError( + "Only one of the following can be set to True: " + "only_contains_user_certs, only_contains_ca_certs, " + "indirect_crl, only_contains_attribute_certs" + ) + + if ( + not any([ + only_contains_user_certs, only_contains_ca_certs, + indirect_crl, only_contains_attribute_certs, full_name, + relative_name, only_some_reasons + ]) + ): + raise ValueError( + "Cannot create empty extension: " + "if only_contains_user_certs, only_contains_ca_certs, " + "indirect_crl, and only_contains_attribute_certs are all False" + ", then either full_name, relative_name, or only_some_reasons " + "must have a value." + ) + + self._only_contains_user_certs = only_contains_user_certs + self._only_contains_ca_certs = only_contains_ca_certs + self._indirect_crl = indirect_crl + self._only_contains_attribute_certs = only_contains_attribute_certs + self._only_some_reasons = only_some_reasons + self._full_name = full_name + self._relative_name = relative_name + + def __repr__(self): + return ( + "".format(self) + ) + + def __eq__(self, other): + if not isinstance(other, IssuingDistributionPoint): + return NotImplemented + + return ( + self.full_name == other.full_name and + self.relative_name == other.relative_name and + self.only_contains_user_certs == other.only_contains_user_certs and + self.only_contains_ca_certs == other.only_contains_ca_certs and + self.only_some_reasons == other.only_some_reasons and + self.indirect_crl == other.indirect_crl and + self.only_contains_attribute_certs == + other.only_contains_attribute_certs + ) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(( + self.full_name, + self.relative_name, + self.only_contains_user_certs, + self.only_contains_ca_certs, + self.only_some_reasons, + self.indirect_crl, + self.only_contains_attribute_certs, + )) + + full_name = utils.read_only_property("_full_name") + relative_name = utils.read_only_property("_relative_name") + only_contains_user_certs = utils.read_only_property( + "_only_contains_user_certs" + ) + only_contains_ca_certs = utils.read_only_property( + "_only_contains_ca_certs" + ) + only_some_reasons = utils.read_only_property("_only_some_reasons") + indirect_crl = utils.read_only_property("_indirect_crl") + only_contains_attribute_certs = utils.read_only_property( + "_only_contains_attribute_certs" + ) + + @utils.register_interface(ExtensionType) class UnrecognizedExtension(object): def __init__(self, oid, value): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 9eac9a27c670..5ff3bdd6f9d9 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4440,6 +4440,294 @@ def test_inhibit_any_policy(self, backend): assert iap.skip_certs == 5 +class TestIssuingDistributionPointExtension(object): + @pytest.mark.parametrize( + ("filename", "expected"), + [ + ( + "crl_idp_fullname_indirect_crl.pem", + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl") + ], + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=True, + only_contains_attribute_certs=False, + ) + ), + ( + "crl_idp_fullname_only.pem", + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl") + ], + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ) + ), + ( + "crl_idp_fullname_only_aa.pem", + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl") + ], + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=True, + ) + ), + ( + "crl_idp_fullname_only_user.pem", + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl") + ], + relative_name=None, + only_contains_user_certs=True, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ) + ), + ( + "crl_idp_only_ca.pem", + x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ]), + only_contains_user_certs=False, + only_contains_ca_certs=True, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ) + ), + ( + "crl_idp_reasons_only.pem", + x509.IssuingDistributionPoint( + full_name=None, + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=frozenset([ + x509.ReasonFlags.key_compromise + ]), + indirect_crl=False, + only_contains_attribute_certs=False, + ) + ), + ( + "crl_idp_relative_user_all_reasons.pem", + x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ]), + only_contains_user_certs=True, + only_contains_ca_certs=False, + only_some_reasons=frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.affiliation_changed, + x509.ReasonFlags.superseded, + x509.ReasonFlags.cessation_of_operation, + x509.ReasonFlags.certificate_hold, + x509.ReasonFlags.privilege_withdrawn, + x509.ReasonFlags.aa_compromise, + ]), + indirect_crl=False, + only_contains_attribute_certs=False, + ) + ), + ( + "crl_idp_relativename_only.pem", + x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ]), + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ) + ), + ] + ) + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_vectors(self, filename, expected, backend): + crl = _load_cert( + os.path.join("x509", "custom", filename), + x509.load_pem_x509_crl, backend + ) + idp = crl.extensions.get_extension_for_class( + x509.IssuingDistributionPoint + ).value + assert idp == expected + + @pytest.mark.parametrize( + ( + "error", "only_contains_user_certs", "only_contains_ca_certs", + "indirect_crl", "only_contains_attribute_certs", + "only_some_reasons", "full_name", "relative_name" + ), + [ + ( + TypeError, False, False, False, False, 'notafrozenset', None, + None + ), + ( + TypeError, False, False, False, False, frozenset(['bad']), + None, None + ), + ( + ValueError, False, False, False, False, + frozenset([x509.ReasonFlags.unspecified]), None, None + ), + ( + ValueError, False, False, False, False, + frozenset([x509.ReasonFlags.remove_from_crl]), None, None + ), + (TypeError, 'notabool', False, False, False, None, None, None), + (TypeError, False, 'notabool', False, False, None, None, None), + (TypeError, False, False, 'notabool', False, None, None, None), + (TypeError, False, False, False, 'notabool', None, None, None), + (ValueError, True, True, False, False, None, None, None), + (ValueError, False, False, True, True, None, None, None), + (ValueError, False, False, False, False, None, None, None), + ] + ) + def test_invalid_init(self, error, only_contains_user_certs, + only_contains_ca_certs, indirect_crl, + only_contains_attribute_certs, only_some_reasons, + full_name, relative_name): + with pytest.raises(error): + x509.IssuingDistributionPoint( + full_name, relative_name, only_contains_user_certs, + only_contains_ca_certs, only_some_reasons, indirect_crl, + only_contains_attribute_certs + ) + + def test_repr(self): + idp = x509.IssuingDistributionPoint( + None, None, False, False, + frozenset([x509.ReasonFlags.key_compromise]), False, False + ) + if not six.PY2: + assert repr(idp) == ( + "}), indirect_crl=False, only_contains_attribut" + "e_certs=False)>" + ) + else: + assert repr(idp) == ( + "]), indirect_crl=False, only_contains_attribut" + "e_certs=False)>" + ) + + def test_eq(self): + idp1 = x509.IssuingDistributionPoint( + only_contains_user_certs=False, + only_contains_ca_certs=False, + indirect_crl=False, + only_contains_attribute_certs=False, + only_some_reasons=None, + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") + ]) + ) + idp2 = x509.IssuingDistributionPoint( + only_contains_user_certs=False, + only_contains_ca_certs=False, + indirect_crl=False, + only_contains_attribute_certs=False, + only_some_reasons=None, + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") + ]) + ) + assert idp1 == idp2 + + def test_ne(self): + idp1 = x509.IssuingDistributionPoint( + only_contains_user_certs=False, + only_contains_ca_certs=False, + indirect_crl=False, + only_contains_attribute_certs=False, + only_some_reasons=None, + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") + ]) + ) + idp2 = x509.IssuingDistributionPoint( + only_contains_user_certs=True, + only_contains_ca_certs=False, + indirect_crl=False, + only_contains_attribute_certs=False, + only_some_reasons=None, + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") + ]) + ) + assert idp1 != idp2 + assert idp1 != object() + + def test_hash(self): + idp1 = x509.IssuingDistributionPoint( + None, None, True, False, None, False, False + ) + idp2 = x509.IssuingDistributionPoint( + None, None, True, False, None, False, False + ) + idp3 = x509.IssuingDistributionPoint( + None, + x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") + ]), + True, False, None, False, False + ) + assert hash(idp1) == hash(idp2) + assert hash(idp1) != hash(idp3) + + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestPrecertPoisonExtension(object): From a84c5cdab80730bfe708379d29a2e357541cc00b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Dec 2018 12:26:54 +0800 Subject: [PATCH 470/988] allow multi-valued RDNs (#4616) RDNs can have multiple values. This allows them in FreshestCRL and upcoming IssuingDistributionPoint encoding support. --- .../hazmat/backends/openssl/encode_asn1.py | 2 +- tests/x509/test_x509.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 6ff1a9a45af4..0e92bfce28d3 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -114,7 +114,7 @@ def _encode_sk_name_entry(backend, attributes): for attribute in attributes: name_entry = _encode_name_entry(backend, attribute) res = backend._lib.sk_X509_NAME_ENTRY_push(stack, name_entry) - backend.openssl_assert(res == 1) + backend.openssl_assert(res >= 1) return stack diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 4ce4d95872e5..15cfe43d0f4a 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2598,6 +2598,23 @@ def test_build_cert_with_rsa_key_too_small(self, backend): crl_issuer=None, ) ]), + x509.FreshestCRL([ + x509.DistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + NameOID.COMMON_NAME, + u"indirect CRL for indirectCRL CA3" + ), + x509.NameAttribute( + NameOID.COUNTRY_NAME, + u"US" + ), + ]), + reasons=None, + crl_issuer=None, + ) + ]), ] ) def test_ext(self, add_ext, backend): From 76e92e6bc6ff83c952f6e9a22cbd8cb59b64b247 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 1 Dec 2018 22:05:07 +0800 Subject: [PATCH 471/988] refactor some code into separate functions in asn1 encode (#4617) * refactor some code into separate functions in asn1 encode this will be useful in IDP encoding * review feedback --- .../hazmat/backends/openssl/encode_asn1.py | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 0e92bfce28d3..8bc8cb4b7e72 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -482,6 +482,34 @@ def _encode_extended_key_usage(backend, extended_key_usage): } +def _encode_reasonflags(backend, reasons): + bitmask = backend._lib.ASN1_BIT_STRING_new() + backend.openssl_assert(bitmask != backend._ffi.NULL) + for reason in reasons: + res = backend._lib.ASN1_BIT_STRING_set_bit( + bitmask, _CRLREASONFLAGS[reason], 1 + ) + backend.openssl_assert(res == 1) + + return bitmask + + +def _encode_full_name(backend, full_name): + dpn = backend._lib.DIST_POINT_NAME_new() + backend.openssl_assert(dpn != backend._ffi.NULL) + dpn.type = _DISTPOINT_TYPE_FULLNAME + dpn.name.fullname = _encode_general_names(backend, full_name) + return dpn + + +def _encode_relative_name(backend, relative_name): + dpn = backend._lib.DIST_POINT_NAME_new() + backend.openssl_assert(dpn != backend._ffi.NULL) + dpn.type = _DISTPOINT_TYPE_RELATIVENAME + dpn.name.relativename = _encode_sk_name_entry(backend, relative_name) + return dpn + + def _encode_cdps_freshest_crl(backend, cdps): cdp = backend._lib.sk_DIST_POINT_new_null() cdp = backend._ffi.gc(cdp, backend._lib.sk_DIST_POINT_free) @@ -490,30 +518,13 @@ def _encode_cdps_freshest_crl(backend, cdps): backend.openssl_assert(dp != backend._ffi.NULL) if point.reasons: - bitmask = backend._lib.ASN1_BIT_STRING_new() - backend.openssl_assert(bitmask != backend._ffi.NULL) - dp.reasons = bitmask - for reason in point.reasons: - res = backend._lib.ASN1_BIT_STRING_set_bit( - bitmask, _CRLREASONFLAGS[reason], 1 - ) - backend.openssl_assert(res == 1) + dp.reasons = _encode_reasonflags(backend, point.reasons) if point.full_name: - dpn = backend._lib.DIST_POINT_NAME_new() - backend.openssl_assert(dpn != backend._ffi.NULL) - dpn.type = _DISTPOINT_TYPE_FULLNAME - dpn.name.fullname = _encode_general_names(backend, point.full_name) - dp.distpoint = dpn + dp.distpoint = _encode_full_name(backend, point.full_name) if point.relative_name: - dpn = backend._lib.DIST_POINT_NAME_new() - backend.openssl_assert(dpn != backend._ffi.NULL) - dpn.type = _DISTPOINT_TYPE_RELATIVENAME - relativename = _encode_sk_name_entry(backend, point.relative_name) - backend.openssl_assert(relativename != backend._ffi.NULL) - dpn.name.relativename = relativename - dp.distpoint = dpn + dp.distpoint = _encode_relative_name(backend, point.relative_name) if point.crl_issuer: dp.CRLissuer = _encode_general_names(backend, point.crl_issuer) From eb4e7b103530907311af4027280a48231a2f17be Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Dec 2018 12:29:00 +0800 Subject: [PATCH 472/988] reuse the libressl branch for OpenSSL built with OPENSSL_NO_PSK (#4619) --- src/_cffi_src/openssl/ssl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index f0b8939cb784..82639a5d6bcf 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -756,7 +756,7 @@ static const long Cryptography_HAS_SIGALGS = 1; #endif -#if CRYPTOGRAPHY_IS_LIBRESSL +#if CRYPTOGRAPHY_IS_LIBRESSL || defined(OPENSSL_NO_PSK) static const long Cryptography_HAS_PSK = 0; int (*SSL_CTX_use_psk_identity_hint)(SSL_CTX *, const char *) = NULL; void (*SSL_CTX_set_psk_server_callback)(SSL_CTX *, From 3531439f8a09dd40102ac0e336cb962e86d8bf57 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Dec 2018 13:13:02 +0800 Subject: [PATCH 473/988] switch osrandom engine to blocking mode when getting entropy (#4620) * switch osrandom engine to blocking mode when getting entropy * review feedback * we can remove this too --- src/_cffi_src/openssl/src/osrandom_engine.c | 17 +++-------------- src/_cffi_src/openssl/src/osrandom_engine.h | 1 - 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 947c79aac0e3..e6a76a3469b6 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -281,7 +281,8 @@ static int osrandom_init(ENGINE *e) { if (getrandom_works != CRYPTOGRAPHY_OSRANDOM_GETRANDOM_WORKS) { long n; char dest[1]; - n = syscall(SYS_getrandom, dest, sizeof(dest), GRND_NONBLOCK); + /* if the kernel CSPRNG is not initialized this will block */ + n = syscall(SYS_getrandom, dest, sizeof(dest), 0); if (n == sizeof(dest)) { getrandom_works = CRYPTOGRAPHY_OSRANDOM_GETRANDOM_WORKS; } else { @@ -295,15 +296,6 @@ static int osrandom_init(ENGINE *e) { /* Fallback: seccomp prevents syscall */ getrandom_works = CRYPTOGRAPHY_OSRANDOM_GETRANDOM_FALLBACK; break; - case EAGAIN: - /* Failure: Kernel CRPNG has not been seeded yet */ - ERR_Cryptography_OSRandom_error( - CRYPTOGRAPHY_OSRANDOM_F_INIT, - CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_EAGAIN, - __FILE__, __LINE__ - ); - getrandom_works = CRYPTOGRAPHY_OSRANDOM_GETRANDOM_INIT_FAILED; - break; default: /* EINTR cannot occur for buflen < 256. */ ERR_Cryptography_OSRandom_error( @@ -350,7 +342,7 @@ static int osrandom_rand_bytes(unsigned char *buffer, int size) { case CRYPTOGRAPHY_OSRANDOM_GETRANDOM_WORKS: while (size > 0) { do { - n = syscall(SYS_getrandom, buffer, size, GRND_NONBLOCK); + n = syscall(SYS_getrandom, buffer, size, 0); } while (n < 0 && errno == EINTR); if (n <= 0) { @@ -532,9 +524,6 @@ static ERR_STRING_DATA CRYPTOGRAPHY_OSRANDOM_str_reasons[] = { "Reading from /dev/urandom fd failed."}, {ERR_REASON(CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED), "getrandom() initialization failed."}, - {ERR_REASON(CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_EAGAIN), - "getrandom() initialization failed with EAGAIN. Most likely Kernel " - "CPRNG is not seeded yet."}, {ERR_REASON(CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_UNEXPECTED), "getrandom() initialization failed with unexpected errno."}, {ERR_REASON(CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_FAILED), diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index 077046d97898..e7a55c5eefc6 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -94,7 +94,6 @@ static void ERR_Cryptography_OSRandom_error(int function, int reason, #define CRYPTOGRAPHY_OSRANDOM_R_DEV_URANDOM_READ_FAILED 301 #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED 400 -#define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_EAGAIN 401 #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_UNEXPECTED 402 #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_FAILED 403 #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_NOT_INIT 404 From afaa4c65b58e31f36a8162f88ad79829f68d0a86 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Dec 2018 19:20:33 +0800 Subject: [PATCH 474/988] centralize our bytes check (#4622) this will make life a bit easier when we support bytearrays --- src/cryptography/fernet.py | 8 ++--- .../hazmat/backends/openssl/backend.py | 8 ++--- .../hazmat/backends/openssl/dsa.py | 3 +- .../hazmat/backends/openssl/ec.py | 3 +- .../hazmat/backends/openssl/rsa.py | 3 +- .../hazmat/primitives/ciphers/algorithms.py | 3 +- .../hazmat/primitives/ciphers/modes.py | 29 +++++-------------- src/cryptography/hazmat/primitives/cmac.py | 7 ++--- src/cryptography/hazmat/primitives/hashes.py | 3 +- src/cryptography/hazmat/primitives/hmac.py | 6 ++-- .../hazmat/primitives/kdf/concatkdf.py | 13 ++++----- .../hazmat/primitives/kdf/hkdf.py | 18 ++++-------- .../hazmat/primitives/kdf/kbkdf.py | 9 ++---- .../hazmat/primitives/kdf/pbkdf2.py | 6 ++-- .../hazmat/primitives/kdf/scrypt.py | 7 ++--- .../hazmat/primitives/kdf/x963kdf.py | 10 +++---- src/cryptography/hazmat/primitives/padding.py | 6 ++-- 17 files changed, 50 insertions(+), 92 deletions(-) diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index ac2dd0b63536..b990defaaf88 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -12,6 +12,7 @@ import six +from cryptography import utils from cryptography.exceptions import InvalidSignature from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes, padding @@ -51,8 +52,7 @@ def encrypt(self, data): return self._encrypt_from_parts(data, current_time, iv) def _encrypt_from_parts(self, data, current_time, iv): - if not isinstance(data, bytes): - raise TypeError("data must be bytes.") + utils._check_bytes("data", data) padder = padding.PKCS7(algorithms.AES.block_size).padder() padded_data = padder.update(data) + padder.finalize() @@ -82,9 +82,7 @@ def extract_timestamp(self, token): @staticmethod def _get_unverified_token_data(token): - if not isinstance(token, bytes): - raise TypeError("token must be bytes.") - + utils._check_bytes("token", token) try: data = base64.urlsafe_b64decode(token) except (TypeError, binascii.Error): diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 5a22a555da79..ae966cd0ec6f 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1203,8 +1203,8 @@ def load_der_x509_csr(self, data): def _load_key(self, openssl_read_func, convert_func, data, password): mem_bio = self._bytes_to_bio(data) - if password is not None and not isinstance(password, bytes): - raise TypeError("Password must be bytes") + if password is not None: + utils._check_bytes("password", password) userdata = self._ffi.new("CRYPTOGRAPHY_PASSWORD_DATA *") if password is not None: @@ -2132,8 +2132,8 @@ def aead_cipher_supported(self, cipher): def load_key_and_certificates_from_pkcs12(self, data, password): if password is None: password = self._ffi.NULL - elif not isinstance(password, bytes): - raise TypeError("Password must be a byte string or None") + else: + utils._check_bytes("password", password) bio = self._bytes_to_bio(data) p12 = self._lib.d2i_PKCS12_bio(bio.bio, self._ffi.NULL) diff --git a/src/cryptography/hazmat/backends/openssl/dsa.py b/src/cryptography/hazmat/backends/openssl/dsa.py index 48886e45dfc5..de61f08949ba 100644 --- a/src/cryptography/hazmat/backends/openssl/dsa.py +++ b/src/cryptography/hazmat/backends/openssl/dsa.py @@ -211,8 +211,7 @@ def __init__(self, backend, dsa_cdata, evp_pkey): def verifier(self, signature, signature_algorithm): _warn_sign_verify_deprecated() - if not isinstance(signature, bytes): - raise TypeError("signature must be bytes.") + utils._check_bytes("signature", signature) _check_not_prehashed(signature_algorithm) return _DSAVerificationContext( diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index 69da2344e638..852b49186697 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -244,8 +244,7 @@ def key_size(self): def verifier(self, signature, signature_algorithm): _warn_sign_verify_deprecated() - if not isinstance(signature, bytes): - raise TypeError("signature must be bytes.") + utils._check_bytes("signature", signature) _check_signature_algorithm(signature_algorithm) _check_not_prehashed(signature_algorithm.algorithm) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 00f5e377427b..b7d2173fa59a 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -434,8 +434,7 @@ def __init__(self, backend, rsa_cdata, evp_pkey): def verifier(self, signature, padding, algorithm): _warn_sign_verify_deprecated() - if not isinstance(signature, bytes): - raise TypeError("signature must be bytes.") + utils._check_bytes("signature", signature) _check_not_prehashed(algorithm) return _RSAVerificationContext( diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index 68a9e33085fe..21d9ecf08e46 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -153,8 +153,7 @@ class ChaCha20(object): def __init__(self, key, nonce): self.key = _verify_key_size(self, key) - if not isinstance(nonce, bytes): - raise TypeError("nonce must be bytes") + utils._check_bytes("nonce", nonce) if len(nonce) != 16: raise ValueError("nonce must be 128-bits (16 bytes)") diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index e82c1a8d6a7e..d24445804a9a 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -88,9 +88,7 @@ class CBC(object): name = "CBC" def __init__(self, initialization_vector): - if not isinstance(initialization_vector, bytes): - raise TypeError("initialization_vector must be bytes") - + utils._check_bytes("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -103,8 +101,7 @@ class XTS(object): name = "XTS" def __init__(self, tweak): - if not isinstance(tweak, bytes): - raise TypeError("tweak must be bytes") + utils._check_bytes("tweak", tweak) if len(tweak) != 16: raise ValueError("tweak must be 128-bits (16 bytes)") @@ -134,9 +131,7 @@ class OFB(object): name = "OFB" def __init__(self, initialization_vector): - if not isinstance(initialization_vector, bytes): - raise TypeError("initialization_vector must be bytes") - + utils._check_bytes("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -149,9 +144,7 @@ class CFB(object): name = "CFB" def __init__(self, initialization_vector): - if not isinstance(initialization_vector, bytes): - raise TypeError("initialization_vector must be bytes") - + utils._check_bytes("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -164,9 +157,7 @@ class CFB8(object): name = "CFB8" def __init__(self, initialization_vector): - if not isinstance(initialization_vector, bytes): - raise TypeError("initialization_vector must be bytes") - + utils._check_bytes("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -179,9 +170,7 @@ class CTR(object): name = "CTR" def __init__(self, nonce): - if not isinstance(nonce, bytes): - raise TypeError("nonce must be bytes") - + utils._check_bytes("nonce", nonce) self._nonce = nonce nonce = utils.read_only_property("_nonce") @@ -206,14 +195,12 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): # len(initialization_vector) must in [1, 2 ** 64), but it's impossible # to actually construct a bytes object that large, so we don't check # for it - if not isinstance(initialization_vector, bytes): - raise TypeError("initialization_vector must be bytes") + utils._check_bytes("initialization_vector", initialization_vector) if len(initialization_vector) == 0: raise ValueError("initialization_vector must be at least 1 byte") self._initialization_vector = initialization_vector if tag is not None: - if not isinstance(tag, bytes): - raise TypeError("tag must be bytes or None") + utils._check_bytes("tag", tag) if min_tag_length < 4: raise ValueError("min_tag_length must be >= 4") if len(tag) < min_tag_length: diff --git a/src/cryptography/hazmat/primitives/cmac.py b/src/cryptography/hazmat/primitives/cmac.py index 77537f047c76..1404eac3db35 100644 --- a/src/cryptography/hazmat/primitives/cmac.py +++ b/src/cryptography/hazmat/primitives/cmac.py @@ -36,8 +36,8 @@ def __init__(self, algorithm, backend, ctx=None): def update(self, data): if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") - if not isinstance(data, bytes): - raise TypeError("data must be bytes.") + + utils._check_bytes("data", data) self._ctx.update(data) def finalize(self): @@ -48,8 +48,7 @@ def finalize(self): return digest def verify(self, signature): - if not isinstance(signature, bytes): - raise TypeError("signature must be bytes.") + utils._check_bytes("signature", signature) if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 259a2c01ab41..89e66ab7cfa2 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -82,8 +82,7 @@ def __init__(self, algorithm, backend, ctx=None): def update(self, data): if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") - if not isinstance(data, bytes): - raise TypeError("data must be bytes.") + utils._check_bytes("data", data) self._ctx.update(data) def copy(self): diff --git a/src/cryptography/hazmat/primitives/hmac.py b/src/cryptography/hazmat/primitives/hmac.py index 2e9a4e2fe60c..590555d92565 100644 --- a/src/cryptography/hazmat/primitives/hmac.py +++ b/src/cryptography/hazmat/primitives/hmac.py @@ -38,8 +38,7 @@ def __init__(self, key, algorithm, backend, ctx=None): def update(self, data): if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") - if not isinstance(data, bytes): - raise TypeError("data must be bytes.") + utils._check_bytes("data", data) self._ctx.update(data) def copy(self): @@ -60,8 +59,7 @@ def finalize(self): return digest def verify(self, signature): - if not isinstance(signature, bytes): - raise TypeError("signature must be bytes.") + utils._check_bytes("signature", signature) if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") diff --git a/src/cryptography/hazmat/primitives/kdf/concatkdf.py b/src/cryptography/hazmat/primitives/kdf/concatkdf.py index c6399e4f76d8..89c3b282969a 100644 --- a/src/cryptography/hazmat/primitives/kdf/concatkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/concatkdf.py @@ -27,14 +27,12 @@ def _common_args_checks(algorithm, length, otherinfo): "Can not derive keys larger than {0} bits.".format( max_length )) - if not (otherinfo is None or isinstance(otherinfo, bytes)): - raise TypeError("otherinfo must be bytes.") + if otherinfo is not None: + utils._check_bytes("otherinfo", otherinfo) def _concatkdf_derive(key_material, length, auxfn, otherinfo): - if not isinstance(key_material, bytes): - raise TypeError("key_material must be bytes.") - + utils._check_bytes("key_material", key_material) output = [b""] outlen = 0 counter = 1 @@ -96,10 +94,11 @@ def __init__(self, algorithm, length, salt, otherinfo, backend): if self._otherinfo is None: self._otherinfo = b"" - if not (salt is None or isinstance(salt, bytes)): - raise TypeError("salt must be bytes.") if salt is None: salt = b"\x00" * algorithm.block_size + else: + utils._check_bytes("salt", salt) + self._salt = salt if not isinstance(backend, HMACBackend): diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 917b4e9c4cfe..27dc9c93af3b 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -26,11 +26,10 @@ def __init__(self, algorithm, length, salt, info, backend): self._algorithm = algorithm - if not (salt is None or isinstance(salt, bytes)): - raise TypeError("salt must be bytes.") - if salt is None: salt = b"\x00" * self._algorithm.digest_size + else: + utils._check_bytes("salt", salt) self._salt = salt @@ -44,9 +43,7 @@ def _extract(self, key_material): return h.finalize() def derive(self, key_material): - if not isinstance(key_material, bytes): - raise TypeError("key_material must be bytes.") - + utils._check_bytes("key_material", key_material) return self._hkdf_expand.derive(self._extract(key_material)) def verify(self, key_material, expected_key): @@ -77,11 +74,10 @@ def __init__(self, algorithm, length, info, backend): self._length = length - if not (info is None or isinstance(info, bytes)): - raise TypeError("info must be bytes.") - if info is None: info = b"" + else: + utils._check_bytes("info", info) self._info = info @@ -102,9 +98,7 @@ def _expand(self, key_material): return b"".join(output)[:self._length] def derive(self, key_material): - if not isinstance(key_material, bytes): - raise TypeError("key_material must be bytes.") - + utils._check_bytes("key_material", key_material) if self._used: raise AlreadyFinalized diff --git a/src/cryptography/hazmat/primitives/kdf/kbkdf.py b/src/cryptography/hazmat/primitives/kdf/kbkdf.py index 14de56ebff09..74fe9e2940d0 100644 --- a/src/cryptography/hazmat/primitives/kdf/kbkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/kbkdf.py @@ -73,10 +73,8 @@ def __init__(self, algorithm, mode, length, rlen, llen, if context is None: context = b'' - if (not isinstance(label, bytes) or - not isinstance(context, bytes)): - raise TypeError('label and context must be of type bytes') - + utils._check_bytes("label", label) + utils._check_bytes("context", context) self._algorithm = algorithm self._mode = mode self._length = length @@ -102,8 +100,7 @@ def derive(self, key_material): if self._used: raise AlreadyFinalized - if not isinstance(key_material, bytes): - raise TypeError('key_material must be bytes') + utils._check_bytes("key_material", key_material) self._used = True # inverse floor division (equivalent to ceiling) diff --git a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py index f8ce7a3b3262..fbe8964d5547 100644 --- a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -31,8 +31,7 @@ def __init__(self, algorithm, length, salt, iterations, backend): self._used = False self._algorithm = algorithm self._length = length - if not isinstance(salt, bytes): - raise TypeError("salt must be bytes.") + utils._check_bytes("salt", salt) self._salt = salt self._iterations = iterations self._backend = backend @@ -42,8 +41,7 @@ def derive(self, key_material): raise AlreadyFinalized("PBKDF2 instances can only be used once.") self._used = True - if not isinstance(key_material, bytes): - raise TypeError("key_material must be bytes.") + utils._check_bytes("key_material", key_material) return self._backend.derive_pbkdf2_hmac( self._algorithm, self._length, diff --git a/src/cryptography/hazmat/primitives/kdf/scrypt.py b/src/cryptography/hazmat/primitives/kdf/scrypt.py index 77dcf9ab13b9..44e369fba3d3 100644 --- a/src/cryptography/hazmat/primitives/kdf/scrypt.py +++ b/src/cryptography/hazmat/primitives/kdf/scrypt.py @@ -30,9 +30,7 @@ def __init__(self, salt, length, n, r, p, backend): ) self._length = length - if not isinstance(salt, bytes): - raise TypeError("salt must be bytes.") - + utils._check_bytes("salt", salt) if n < 2 or (n & (n - 1)) != 0: raise ValueError("n must be greater than 1 and be a power of 2.") @@ -54,8 +52,7 @@ def derive(self, key_material): raise AlreadyFinalized("Scrypt instances can only be used once.") self._used = True - if not isinstance(key_material, bytes): - raise TypeError("key_material must be bytes.") + utils._check_bytes("key_material", key_material) return self._backend.derive_scrypt( key_material, self._salt, self._length, self._n, self._r, self._p ) diff --git a/src/cryptography/hazmat/primitives/kdf/x963kdf.py b/src/cryptography/hazmat/primitives/kdf/x963kdf.py index 83789b31af83..a8c077519168 100644 --- a/src/cryptography/hazmat/primitives/kdf/x963kdf.py +++ b/src/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -27,8 +27,9 @@ def __init__(self, algorithm, length, sharedinfo, backend): if length > max_len: raise ValueError( "Can not derive keys larger than {0} bits.".format(max_len)) - if not (sharedinfo is None or isinstance(sharedinfo, bytes)): - raise TypeError("sharedinfo must be bytes.") + if sharedinfo is not None: + utils._check_bytes("sharedinfo", sharedinfo) + self._algorithm = algorithm self._length = length self._sharedinfo = sharedinfo @@ -45,10 +46,7 @@ def derive(self, key_material): if self._used: raise AlreadyFinalized self._used = True - - if not isinstance(key_material, bytes): - raise TypeError("key_material must be bytes.") - + utils._check_bytes("key_material", key_material) output = [b""] outlen = 0 counter = 1 diff --git a/src/cryptography/hazmat/primitives/padding.py b/src/cryptography/hazmat/primitives/padding.py index a081976edd7c..170c80218b12 100644 --- a/src/cryptography/hazmat/primitives/padding.py +++ b/src/cryptography/hazmat/primitives/padding.py @@ -40,8 +40,7 @@ def _byte_padding_update(buffer_, data, block_size): if buffer_ is None: raise AlreadyFinalized("Context was already finalized.") - if not isinstance(data, bytes): - raise TypeError("data must be bytes.") + utils._check_bytes("data", data) buffer_ += data @@ -65,8 +64,7 @@ def _byte_unpadding_update(buffer_, data, block_size): if buffer_ is None: raise AlreadyFinalized("Context was already finalized.") - if not isinstance(data, bytes): - raise TypeError("data must be bytes.") + utils._check_bytes("data", data) buffer_ += data From 6d7b70e8f2da0da39f85fdc03d0a7e693351cc06 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Dec 2018 23:50:54 +0800 Subject: [PATCH 475/988] switch to twine check for verifying our readme renders on pypi (#4623) --- setup.py | 2 +- tox.ini | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 886d932670b2..937d1ac502f4 100644 --- a/setup.py +++ b/setup.py @@ -303,7 +303,7 @@ def run_tests(self): "docstest": [ "doc8", "pyenchant >= 1.6.11", - "readme_renderer >= 16.0", + "twine >= 1.12.0", "sphinxcontrib-spelling >= 4.0.1", ], "pep8test": [ diff --git a/tox.ini b/tox.ini index 7e6b56ca1eac..f6e1b6e170cd 100644 --- a/tox.ini +++ b/tox.ini @@ -46,7 +46,8 @@ commands = sphinx-build -j4 -T -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html sphinx-build -j4 -T -W -b spelling docs docs/_build/html doc8 --allow-long-titles README.rst CHANGELOG.rst docs/ --ignore-path docs/_build/ - python setup.py check --restructuredtext --strict + python setup.py sdist + twine check dist/* [testenv:docs-linkcheck] extras = From fec719b60441b1e69bcca26446b8025bb69ee1fd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 3 Dec 2018 00:42:44 +0800 Subject: [PATCH 476/988] encode IssuingDistributionPoint (#4618) --- .../hazmat/backends/openssl/encode_asn1.py | 23 +++ tests/hazmat/backends/test_openssl_memleak.py | 45 ++++++ tests/x509/test_x509_ext.py | 137 ++++++++++++++++++ 3 files changed, 205 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 8bc8cb4b7e72..3557576241fd 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -136,6 +136,28 @@ def _encode_crl_number_delta_crl_indicator(backend, ext): return _encode_asn1_int_gc(backend, ext.crl_number) +def _encode_issuing_dist_point(backend, ext): + idp = backend._lib.ISSUING_DIST_POINT_new() + backend.openssl_assert(idp != backend._ffi.NULL) + idp = backend._ffi.gc(idp, backend._lib.ISSUING_DIST_POINT_free) + idp.onlyuser = 255 if ext.only_contains_user_certs else 0 + idp.onlyCA = 255 if ext.only_contains_ca_certs else 0 + idp.indirectCRL = 255 if ext.indirect_crl else 0 + idp.onlyattr = 255 if ext.only_contains_attribute_certs else 0 + if ext.only_some_reasons: + idp.onlysomereasons = _encode_reasonflags( + backend, ext.only_some_reasons + ) + + if ext.full_name: + idp.distpoint = _encode_full_name(backend, ext.full_name) + + if ext.relative_name: + idp.distpoint = _encode_relative_name(backend, ext.relative_name) + + return idp + + def _encode_crl_reason(backend, crl_reason): asn1enum = backend._lib.ASN1_ENUMERATED_new() backend.openssl_assert(asn1enum != backend._ffi.NULL) @@ -614,6 +636,7 @@ def _encode_nonce(backend, nonce): ), ExtensionOID.CRL_NUMBER: _encode_crl_number_delta_crl_indicator, ExtensionOID.DELTA_CRL_INDICATOR: _encode_crl_number_delta_crl_indicator, + ExtensionOID.ISSUING_DISTRIBUTION_POINT: _encode_issuing_dist_point, } _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS = { diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 6f42ed79c75e..1db103b5e77b 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -325,3 +325,48 @@ def func(path): f.read(), b"cryptography", backend ) """), [path]) + + def test_create_crl_with_idp(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + import datetime + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives.asymmetric import ec + from cryptography.x509.oid import NameOID + + key = ec.generate_private_key(ec.SECP256R1(), backend) + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + idp = x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") + ]), + only_contains_user_certs=False, + only_contains_ca_certs=True, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ]) + ).last_update( + last_update + ).next_update( + next_update + ).add_extension( + idp, True + ) + + crl = builder.sign(key, hashes.SHA256(), backend) + crl.extensions.get_extension_for_class( + x509.IssuingDistributionPoint + ) + """)) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 5ff3bdd6f9d9..bfa378470d1f 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4727,6 +4727,143 @@ def test_hash(self): assert hash(idp1) == hash(idp2) assert hash(idp1) != hash(idp3) + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.parametrize( + "idp", + [ + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl" + ) + ], + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=True, + only_contains_attribute_certs=False, + ), + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl" + ) + ], + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ), + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl" + ) + ], + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=True, + ), + x509.IssuingDistributionPoint( + full_name=[ + x509.UniformResourceIdentifier( + u"http://myhost.com/myca.crl" + ) + ], + relative_name=None, + only_contains_user_certs=True, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ), + x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ]), + only_contains_user_certs=False, + only_contains_ca_certs=True, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ), + x509.IssuingDistributionPoint( + full_name=None, + relative_name=None, + only_contains_user_certs=False, + only_contains_ca_certs=True, + only_some_reasons=frozenset([x509.ReasonFlags.key_compromise]), + indirect_crl=False, + only_contains_attribute_certs=False, + ), + x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA"), + x509.NameAttribute( + oid=x509.NameOID.COMMON_NAME, value=u"cryptography") + ]), + only_contains_user_certs=True, + only_contains_ca_certs=False, + only_some_reasons=frozenset([ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.affiliation_changed, + x509.ReasonFlags.privilege_withdrawn, + x509.ReasonFlags.aa_compromise, + ]), + indirect_crl=False, + only_contains_attribute_certs=False, + ), + x509.IssuingDistributionPoint( + full_name=None, + relative_name=x509.RelativeDistinguishedName([ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ]), + only_contains_user_certs=False, + only_contains_ca_certs=False, + only_some_reasons=None, + indirect_crl=False, + only_contains_attribute_certs=False, + ), + ] + ) + def test_generate(self, idp, backend): + key = RSA_KEY_2048.private_key(backend) + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ).add_extension( + idp, True + ) + + crl = builder.sign(key, hashes.SHA256(), backend) + ext = crl.extensions.get_extension_for_class( + x509.IssuingDistributionPoint + ) + assert ext.critical is True + assert ext.value == idp + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 7e422821b9f800f5345c37011c510dc9e76f552c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 7 Dec 2018 11:43:38 +0800 Subject: [PATCH 477/988] remove idna as a primary dependency (#4624) * remove idna as a primary dependency * empty commit * dynamodb test fix (thanks to Matt Bullock) * review feedback --- .travis.yml | 9 +++++---- CHANGELOG.rst | 4 ++++ docs/faq.rst | 12 +++++++++++ setup.py | 7 ++++++- src/cryptography/x509/general_name.py | 29 ++++++++++++++++----------- tests/x509/test_x509_ext.py | 26 ++++++++++++++++++++---- tox.ini | 1 + 7 files changed, 67 insertions(+), 21 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8fda6709134e..2a636ad11d7b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,8 @@ matrix: env: TOXENV=py36 - python: 3.7 env: TOXENV=py37 + - python: 3.7 + env: TOXENV=py37-idna - python: pypy-5.3 env: TOXENV=pypy-nocoverage # PyPy 5.3 isn't available for xenial @@ -121,10 +123,9 @@ matrix: - python: 2.7 env: DOWNSTREAM=aws-encryption-sdk - python: 2.7 - env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0j - # dynamodb-encryption-sdk tests fail on xenial for whatever reason - dist: trusty - sudo: false + # BOTO_CONFIG works around this boto issue on travis: + # https://github.com/boto/boto/issues/3717 + env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0j BOTO_CONFIG=/dev/null - python: 2.7 env: DOWNSTREAM=certbot OPENSSL=1.1.0j - python: 2.7 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b75836d46f38..eb7a4d891765 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,10 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** :term:`U-label` strings were deprecated in + version 2.1, but this version removes the default ``idna`` dependency as + well. If you still need this deprecated path please install cryptography + with the ``idna`` extra: ``pip install cryptography[idna]``. * Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA512_224` and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using OpenSSL 1.1.1. diff --git a/docs/faq.rst b/docs/faq.rst index 409f6ce0850f..dce94b732528 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -99,6 +99,18 @@ support multiple versions of Python. The Python 3.4 ``abi3`` wheel can be used with any version of Python greater than or equal to 3.4. Recent versions of ``pip`` will automatically install ``abi3`` wheels. +``ImportError``: ``idna`` is not installed +------------------------------------------ + +``cryptography`` deprecated passing :term:`U-label` strings to various X.509 +constructors in version 2.1 and in version 2.5 moved the ``idna`` dependency +to a ``setuptools`` extra. If you see this exception you should upgrade your +software so that it no longer depends on this deprecated feature. If that is +not yet possible you can also install ``cryptography`` with +``pip install cryptography[idna]`` to automatically install the missing +dependency. This workaround will be available until the feature is fully +removed. + .. _`NaCl`: https://nacl.cr.yp.to/ .. _`PyNaCl`: https://pynacl.readthedocs.io .. _`WSGIApplicationGroup`: https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIApplicationGroup.html diff --git a/setup.py b/setup.py index 937d1ac502f4..bd98fd5e7351 100644 --- a/setup.py +++ b/setup.py @@ -287,7 +287,6 @@ def run_tests(self): python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', install_requires=[ - "idna >= 2.1", "asn1crypto >= 0.21.0", "six >= 1.4.1", ] + setup_requirements, @@ -311,6 +310,12 @@ def run_tests(self): "flake8-import-order", "pep8-naming", ], + # This extra is for the U-label support that was deprecated in + # cryptography 2.1. If you need this deprecated path install with + # pip install cryptography[idna] + "idna": [ + "idna >= 2.1", + ] }, # for cffi diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 42082746a369..1b0f8c8f9bcf 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -30,6 +30,20 @@ } +def _lazy_import_idna(): + # Import idna lazily becase it allocates a decent amount of memory, and + # we're only using it in deprecated paths. + try: + import idna + return idna + except ImportError: + raise ImportError( + "idna is not installed, but a deprecated feature that requires it" + " was used. See: https://cryptography.io/en/latest/faq/#importe" + "rror-idna-is-not-installed" + ) + + class UnsupportedGeneralNameType(Exception): def __init__(self, msg, type): super(UnsupportedGeneralNameType, self).__init__(msg) @@ -81,10 +95,7 @@ def _init_without_validation(cls, value): return instance def _idna_encode(self, value): - # Import idna lazily becase it allocates a decent amoutn of memory, and - # we're only using it in deprecated paths. - import idna - + idna = _lazy_import_idna() _, address = parseaddr(value) parts = address.split(u"@") return parts[0] + "@" + idna.encode(parts[1]).decode("ascii") @@ -106,10 +117,7 @@ def __hash__(self): def _idna_encode(value): - # Import idna lazily becase it allocates a decent amoutn of memory, and - # we're only using it in deprecated paths. - import idna - + idna = _lazy_import_idna() # Retain prefixes '*.' for common/alt names and '.' for name constraints for prefix in ['*.', '.']: if value.startswith(prefix): @@ -193,10 +201,7 @@ def _init_without_validation(cls, value): return instance def _idna_encode(self, value): - # Import idna lazily becase it allocates a decent amoutn of memory, and - # we're only using it in deprecated paths. - import idna - + idna = _lazy_import_idna() parsed = urllib_parse.urlparse(value) if parsed.port: netloc = ( diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index bfa378470d1f..152db9648f98 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -20,6 +20,7 @@ from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec from cryptography.x509 import DNSName, NameConstraints, SubjectAlternativeName +from cryptography.x509.general_name import _lazy_import_idna from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, NameOID, ObjectIdentifier @@ -44,6 +45,17 @@ def _make_certbuilder(private_key): ) +def test_lazy_idna_import(): + try: + __import__("idna") + pytest.skip("idna is installed") + except ImportError: + pass + + with pytest.raises(ImportError): + _lazy_import_idna() + + class TestExtension(object): def test_not_an_oid(self): bc = x509.BasicConstraints(ca=False, path_length=None) @@ -1661,10 +1673,8 @@ def test_key_cert_sign_crl_sign(self, backend): class TestDNSName(object): - def test_init(self): - name = x509.DNSName(u"*.xn--4ca7aey.example.com") - assert name.value == u"*.xn--4ca7aey.example.com" - + def test_init_deprecated(self): + pytest.importorskip("idna") with pytest.warns(utils.DeprecatedIn21): name = x509.DNSName(u".\xf5\xe4\xf6\xfc.example.com") assert name.value == u".xn--4ca7aey.example.com" @@ -1673,6 +1683,10 @@ def test_init(self): name = x509.DNSName(u"\xf5\xe4\xf6\xfc.example.com") assert name.value == u"xn--4ca7aey.example.com" + def test_init(self): + name = x509.DNSName(u"*.xn--4ca7aey.example.com") + assert name.value == u"*.xn--4ca7aey.example.com" + with pytest.raises(TypeError): x509.DNSName(1.3) @@ -1788,6 +1802,7 @@ def test_single_label(self): assert gn.value == u"administrator" def test_idna(self): + pytest.importorskip("idna") with pytest.warns(utils.DeprecatedIn21): gn = x509.RFC822Name(u"email@em\xe5\xefl.com") @@ -1827,6 +1842,7 @@ def test_with_port(self): assert gn.value == u"singlelabel:443/test" def test_idna_no_port(self): + pytest.importorskip("idna") with pytest.warns(utils.DeprecatedIn21): gn = x509.UniformResourceIdentifier( u"http://\u043f\u044b\u043a\u0430.cryptography" @@ -1835,6 +1851,7 @@ def test_idna_no_port(self): assert gn.value == u"http://xn--80ato2c.cryptography" def test_idna_with_port(self): + pytest.importorskip("idna") with pytest.warns(utils.DeprecatedIn21): gn = x509.UniformResourceIdentifier( u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" @@ -1849,6 +1866,7 @@ def test_empty_hostname(self): assert gn.value == "ldap:///some-nonsense" def test_query_and_fragment(self): + pytest.importorskip("idna") with pytest.warns(utils.DeprecatedIn21): gn = x509.UniformResourceIdentifier( u"ldap://\u043f\u044b\u043a\u0430.cryptography:90/path?query=" diff --git a/tox.ini b/tox.ini index f6e1b6e170cd..d4c3022bc12e 100644 --- a/tox.ini +++ b/tox.ini @@ -5,6 +5,7 @@ envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,py3pep8 [testenv] extras = test + idna: idna deps = # This must be kept in sync with Jenkinsfile and .travis/install.sh coverage From c3d38b5d80a955aee4b160bb97464a20c4992da7 Mon Sep 17 00:00:00 2001 From: Marti Raudsepp Date: Sat, 8 Dec 2018 03:26:07 +0200 Subject: [PATCH 478/988] Add RFC 4514 Distinguished Name formatting for Name, RDN and NameAttribute (#4304) --- AUTHORS.rst | 1 + CHANGELOG.rst | 4 ++ docs/x509/reference.rst | 26 ++++++++++- src/cryptography/x509/extensions.py | 4 +- src/cryptography/x509/name.py | 70 +++++++++++++++++++++++++++- tests/x509/test_x509.py | 72 ++++++++++++++--------------- tests/x509/test_x509_ext.py | 41 +++++----------- 7 files changed, 146 insertions(+), 72 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index ed9ac84ed34d..8ba7e0ed32e9 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -41,3 +41,4 @@ PGP key fingerprints are enclosed in parentheses. * Jeremy Lainé * Denis Gladkikh * John Pacific (2CF6 0381 B5EF 29B7 D48C 2020 7BB9 71A0 E891 44D9) +* Marti Raudsepp diff --git a/CHANGELOG.rst b/CHANGELOG.rst index eb7a4d891765..25c7c8c376e0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -23,6 +23,10 @@ Changelog * Added initial support for parsing PKCS12 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_key_and_certificates`. * Added support for :class:`~cryptography.x509.IssuingDistributionPoint`. +* Added `rfc4514_string()` method to :class:`~cryptography.x509.Name`, + :class:`~cryptography.x509.RelativeDistinguishedName` and + :class:`~cryptography.x509.NameAttribute` to format the name or component as + a RFC 4514 Distinguished Name string. .. _v2-4-2: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 1589105938e6..ac6bbcdccdfa 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -583,7 +583,7 @@ X.509 CRL (Certificate Revocation List) Object .. doctest:: >>> crl.issuer - , value='US')>, , value='cryptography.io')>])> + .. attribute:: next_update @@ -1246,6 +1246,14 @@ X.509 CSR (Certificate Signing Request) Builder Object :return bytes: The DER encoded name. + .. method:: rfc4514_string() + + .. versionadded:: 2.5 + + :return str: Format the given name as a `RFC 4514`_ Distinguished Name + string, for example ``CN=mydomain.com, O=My Org, C=US``. + + .. class:: Version .. versionadded:: 0.7 @@ -1279,6 +1287,13 @@ X.509 CSR (Certificate Signing Request) Builder Object The value of the attribute. + .. method:: rfc4514_string() + + .. versionadded:: 2.5 + + :return str: Format the given attribute as a `RFC 4514`_ Distinguished + Name string. + .. class:: RelativeDistinguishedName(attributes) @@ -1295,6 +1310,13 @@ X.509 CSR (Certificate Signing Request) Builder Object :returns: A list of :class:`NameAttribute` instances that match the OID provided. The list should contain zero or one values. + .. method:: rfc4514_string() + + .. versionadded:: 2.5 + + :return str: Format the given RDN set as a `RFC 4514`_ Distinguished + Name string. + .. class:: ObjectIdentifier @@ -1309,6 +1331,8 @@ X.509 CSR (Certificate Signing Request) Builder Object The dotted string value of the OID (e.g. ``"2.5.4.3"``) +.. _`RFC 4514`: https://tools.ietf.org/html/rfc4514 + .. _general_name_classes: General Name Classes diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 12071b662fdd..bdd445d94889 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -541,8 +541,8 @@ def __init__(self, full_name, relative_name, reasons, crl_issuer): def __repr__(self): return ( "".format(self) + "tive_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>" + .format(self) ) def __eq__(self, other): diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 5548eda8b7e7..470862c24211 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -36,6 +36,41 @@ class _ASN1Type(Enum): NameOID.DOMAIN_COMPONENT: _ASN1Type.IA5String, } +#: Short attribute names from RFC 4514: +#: https://tools.ietf.org/html/rfc4514#page-7 +_NAMEOID_TO_NAME = { + NameOID.COMMON_NAME: 'CN', + NameOID.LOCALITY_NAME: 'L', + NameOID.STATE_OR_PROVINCE_NAME: 'ST', + NameOID.ORGANIZATION_NAME: 'O', + NameOID.ORGANIZATIONAL_UNIT_NAME: 'OU', + NameOID.COUNTRY_NAME: 'C', + NameOID.STREET_ADDRESS: 'STREET', + NameOID.DOMAIN_COMPONENT: 'DC', + NameOID.USER_ID: 'UID', +} + + +def _escape_dn_value(val): + """Escape special characters in RFC4514 Distinguished Name value.""" + + # See https://tools.ietf.org/html/rfc4514#section-2.4 + val = val.replace('\\', '\\\\') + val = val.replace('"', '\\"') + val = val.replace('+', '\\+') + val = val.replace(',', '\\,') + val = val.replace(';', '\\;') + val = val.replace('<', '\\<') + val = val.replace('>', '\\>') + val = val.replace('\0', '\\00') + + if val[0] in ('#', ' '): + val = '\\' + val + if val[-1] == ' ': + val = val[:-1] + '\\ ' + + return val + class NameAttribute(object): def __init__(self, oid, value, _type=_SENTINEL): @@ -80,6 +115,16 @@ def __init__(self, oid, value, _type=_SENTINEL): oid = utils.read_only_property("_oid") value = utils.read_only_property("_value") + def rfc4514_string(self): + """ + Format as RFC4514 Distinguished Name string. + + Use short attribute name if available, otherwise fall back to OID + dotted string. + """ + key = _NAMEOID_TO_NAME.get(self.oid, self.oid.dotted_string) + return '%s=%s' % (key, _escape_dn_value(self.value)) + def __eq__(self, other): if not isinstance(other, NameAttribute): return NotImplemented @@ -117,6 +162,15 @@ def __init__(self, attributes): def get_attributes_for_oid(self, oid): return [i for i in self if i.oid == oid] + def rfc4514_string(self): + """ + Format as RFC4514 Distinguished Name string. + + Within each RDN, attributes are joined by '+', although that is rarely + used in certificates. + """ + return '+'.join(attr.rfc4514_string() for attr in self._attributes) + def __eq__(self, other): if not isinstance(other, RelativeDistinguishedName): return NotImplemented @@ -136,7 +190,7 @@ def __len__(self): return len(self._attributes) def __repr__(self): - return "".format(list(self)) + return "".format(self.rfc4514_string()) class Name(object): @@ -154,6 +208,18 @@ def __init__(self, attributes): " or a list RelativeDistinguishedName" ) + def rfc4514_string(self): + """ + Format as RFC4514 Distinguished Name string. + For example 'CN=foobar.com,O=Foo Corp,C=US' + + An X.509 name is a two-level structure: a list of sets of attributes. + Each list element is separated by ',' and within each list element, set + elements are separated by '+'. The latter is almost never used in + real world certificates. + """ + return ', '.join(attr.rfc4514_string() for attr in self._attributes) + def get_attributes_for_oid(self, oid): return [i for i in self if i.oid == oid] @@ -187,4 +253,4 @@ def __len__(self): return sum(len(rdn) for rdn in self._attributes) def __repr__(self): - return "".format(list(self)) + return "".format(self.rfc4514_string()) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 15cfe43d0f4a..f4520811f7a5 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1138,30 +1138,11 @@ def test_certificate_repr(self, backend): x509.load_pem_x509_certificate, backend ) - if not six.PY2: - assert repr(cert) == ( - ", value='GT487" - "42965')>, , value='See www.rapidssl.com/re" - "sources/cps (c)14')>, , value='Domain Cont" - "rol Validated - RapidSSL(R)')>, , value='www.cryptograp" - "hy.io')>])>, ...)>" - ) - else: - assert repr(cert) == ( - ", value=u'GT48" - "742965')>, , value=u'See www.rapidssl.com/" - "resources/cps (c)14')>, , value=u'Domain C" - "ontrol Validated - RapidSSL(R)')>, , value=u'www.crypto" - "graphy.io')>])>, ...)>" - ) + assert repr(cert) == ( + ", ...)>" + ) def test_parse_tls_feature_extension(self, backend): cert = _load_cert( @@ -3933,6 +3914,18 @@ def test_repr(self): "nName)>, value=u'value')>" ) + def test_distinugished_name(self): + # Escaping + na = x509.NameAttribute(NameOID.COMMON_NAME, u'James "Jim" Smith, III') + assert na.rfc4514_string() == r'CN=James \"Jim\" Smith\, III' + na = x509.NameAttribute(NameOID.USER_ID, u'# escape+,;\0this ') + assert na.rfc4514_string() == r'UID=\# escape\+\,\;\00this\ ' + + # Nonstandard attribute OID + na = x509.NameAttribute(NameOID.EMAIL_ADDRESS, u'somebody@example.com') + assert (na.rfc4514_string() == + '1.2.840.113549.1.9.1=somebody@example.com') + class TestRelativeDistinguishedName(object): def test_init_empty(self): @@ -4120,20 +4113,23 @@ def test_repr(self): x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), ]) - if not six.PY2: - assert repr(name) == ( - ", value='cryptography.io')>, , valu" - "e='PyCA')>])>" - ) - else: - assert repr(name) == ( - ", value=u'cryptography.io')>, , val" - "ue=u'PyCA')>])>" - ) + assert repr(name) == "" + + def test_rfc4514_string(self): + n = x509.Name([ + x509.RelativeDistinguishedName([ + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u'Sales'), + x509.NameAttribute(NameOID.COMMON_NAME, u'J. Smith'), + ]), + x509.RelativeDistinguishedName([ + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'example'), + ]), + x509.RelativeDistinguishedName([ + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'net'), + ]), + ]) + assert (n.rfc4514_string() == + 'OU=Sales+CN=J. Smith, DC=example, DC=net') def test_not_nameattribute(self): with pytest.raises(TypeError): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 152db9648f98..6de105fad272 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -1135,16 +1135,14 @@ def test_repr(self): if not six.PY2: assert repr(aki) == ( ", value='myC" - "N')>])>)>], authority_cert_serial_number=1234)>" + "cert_issuer=[)>], author" + "ity_cert_serial_number=1234)>" ) else: assert repr(aki) == ( - ", value=u'myCN')" - ">])>)>], authority_cert_serial_number=1234)>" + ")>], author" + "ity_cert_serial_number=1234)>" ) def test_eq(self): @@ -1719,16 +1717,7 @@ def test_not_name(self): def test_repr(self): name = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'value1')]) gn = x509.DirectoryName(name) - if not six.PY2: - assert repr(gn) == ( - ", value='value1')>])>)>" - ) - else: - assert repr(gn) == ( - ", value=u'value1')>])>)>" - ) + assert repr(gn) == ")>" def test_eq(self): name = x509.Name([ @@ -3656,22 +3645,16 @@ def test_repr(self): if not six.PY2: assert repr(dp) == ( ", value='myCN')>])>, reasons=frozenset(" - "{}), crl_issuer=[<" - "DirectoryName(value=, value='Important CA')>])>)" - ">])>" + "tinguishedName(CN=myCN)>, reasons=frozenset({}), crl_issuer=[)>])>" ) else: assert repr(dp) == ( ", value=u'myCN')>])>, reasons=frozenset" - "([]), crl_issuer=[" - ", value=u'Important CA')>])" - ">)>])>" + "tinguishedName(CN=myCN)>, reasons=frozenset([]), crl_issuer=[)>])>" ) def test_hash(self): From fbbd54fe017717706ffe48b168ff0639e88f4b43 Mon Sep 17 00:00:00 2001 From: Tux Date: Sat, 8 Dec 2018 18:15:51 -0700 Subject: [PATCH 479/988] Raise MemoryError when backend.derive_scrypt can't malloc enough (#4592) * Raise MemoryError when backend.derive_scrypt can't malloc enough * Expose ERR_R_MALLOC_FAILURE and use the reason_match pattern to catch it * Add test_scrypt_malloc_failure in test_scrypt * let's see if this passes * add comment to filippo's blog post about scrypt's params --- src/_cffi_src/openssl/err.py | 2 ++ .../hazmat/backends/openssl/backend.py | 19 ++++++++++++++++++- tests/hazmat/primitives/test_scrypt.py | 14 ++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 59751355e997..b4d053c6a900 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -22,6 +22,8 @@ static const int ERR_LIB_SSL; static const int ERR_LIB_X509; +static const int ERR_R_MALLOC_FAILURE; + static const int ASN1_R_BOOLEAN_IS_WRONG_LENGTH; static const int ASN1_R_BUFFER_TOO_SMALL; static const int ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER; diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ae966cd0ec6f..fda6293c1a0f 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2120,7 +2120,24 @@ def derive_scrypt(self, key_material, salt, length, n, r, p): key_material, len(key_material), salt, len(salt), n, r, p, scrypt._MEM_LIMIT, buf, length ) - self.openssl_assert(res == 1) + if res != 1: + errors = self._consume_errors() + if not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111: + # This error is only added to the stack in 1.1.1+ + self.openssl_assert( + errors[0]._lib_reason_match( + self._lib.ERR_LIB_EVP, + self._lib.ERR_R_MALLOC_FAILURE + ) + ) + + # memory required formula explained here: + # https://blog.filippo.io/the-scrypt-parameters/ + min_memory = 128 * n * r // (1024**2) + raise MemoryError( + "Not enough memory to derive key. These parameters require" + " {} MB of memory.".format(min_memory) + ) return self._ffi.buffer(buf)[:] def aead_cipher_supported(self, cipher): diff --git a/tests/hazmat/primitives/test_scrypt.py b/tests/hazmat/primitives/test_scrypt.py index 64abfe7985e5..25d2c6152946 100644 --- a/tests/hazmat/primitives/test_scrypt.py +++ b/tests/hazmat/primitives/test_scrypt.py @@ -80,6 +80,20 @@ def test_salt_not_bytes(self, backend): Scrypt(salt, length, work_factor, block_size, parallelization_factor, backend) + def test_scrypt_malloc_failure(self, backend): + password = b"NaCl" + work_factor = 1024 ** 3 + block_size = 589824 + parallelization_factor = 16 + length = 64 + salt = b"NaCl" + + scrypt = Scrypt(salt, length, work_factor, block_size, + parallelization_factor, backend) + + with pytest.raises(MemoryError): + scrypt.derive(password) + def test_password_not_bytes(self, backend): password = 1 work_factor = 1024 From bddcd52eadba275770bbc2070799314c1b5b179b Mon Sep 17 00:00:00 2001 From: Colin Metcalf Date: Sat, 8 Dec 2018 17:25:18 -0800 Subject: [PATCH 480/988] =?UTF-8?q?Updated=20BLAKE2s=20and=20BLAKE2b=20err?= =?UTF-8?q?or=20messages=20from=20unsupportedalgorithm=20=E2=80=A6=20(#451?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated BLAKE2s and BLAKE2b error messages from unsupportedalgorithm exception to an explicit error. The error is now "ValueError: Digest size must be 32" (or 64 for BLAKE2b) This was done to give a more contextual error message and should be in place until OpenSSL supports variable lengths. * Updated if statements in hashes.py so that they no longer wrap to separate line. Updated test_hashes.py to unclude a test for non 32 or 64 digest_sizes that fall between 0-32/64. * Removed the new tests in test_hashes.py as the old ones were satisfactory. This also solved misaligned tabs and spaces. * Removed dead code in hashes.py that could no longer be reached after error message updates. * pep8 fix * remove superfluous parens --- src/cryptography/hazmat/primitives/hashes.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 89e66ab7cfa2..35b7d64686d1 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -188,13 +188,9 @@ class BLAKE2b(object): block_size = 128 def __init__(self, digest_size): - if ( - digest_size > self._max_digest_size or - digest_size < self._min_digest_size - ): - raise ValueError("Digest size must be {0}-{1}".format( - self._min_digest_size, self._max_digest_size) - ) + + if digest_size != 64: + raise ValueError("Digest size must be 64") self._digest_size = digest_size @@ -209,13 +205,9 @@ class BLAKE2s(object): _min_digest_size = 1 def __init__(self, digest_size): - if ( - digest_size > self._max_digest_size or - digest_size < self._min_digest_size - ): - raise ValueError("Digest size must be {0}-{1}".format( - self._min_digest_size, self._max_digest_size) - ) + + if digest_size != 32: + raise ValueError("Digest size must be 32") self._digest_size = digest_size From 5bc3bf7d36d872af5ab79c7531c80a7793c76307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Almeida?= Date: Sat, 8 Dec 2018 23:53:10 -0200 Subject: [PATCH 481/988] Adds a more descriptive error msg for wrong wrapping (#4504) * PoC code for check PEM wrap * Remove PoC check wrap code * Add PEM file info to FAQ * Add FAQ/PEM link in exception message * Fix flake8 style issues * refactor, update language * it's really amazing how bad the spell checker is * review feedback * change to etc --- docs/faq.rst | 32 +++++++++++++++++++ .../hazmat/backends/openssl/backend.py | 15 +++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index dce94b732528..6d876610f7fe 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -111,6 +111,38 @@ not yet possible you can also install ``cryptography`` with dependency. This workaround will be available until the feature is fully removed. +Why can't I import my PEM file? +------------------------------- + +PEM is a format (defined by several RFCs, but originally :rfc:`1421`) for +encoding keys, certificates and others cryptographic data into a regular form. +The data is encoded as base64 and wrapped with a header and footer. + +If you are having trouble importing PEM files, make sure your file fits +the following rules: + +* has a one-line header like this: ``-----BEGIN [FILE TYPE]-----`` + (where ``[FILE TYPE]`` is ``CERTIFICATE``, ``PUBLIC KEY``, ``PRIVATE KEY``, + etc.) + +* has a one-line footer like this: ``-----END [FILE TYPE]-----`` + +* all lines, except for the final one, must consist of exactly 64 + characters. + +For example, this is a PEM file for a RSA Public Key: :: + + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7CsKFSzq20NLb2VQDXma + 9DsDXtKADv0ziI5hT1KG6Bex5seE9pUoEcUxNv4uXo2jzAUgyRweRl/DLU8SoN8+ + WWd6YWik4GZvNv7j0z28h9Q5jRySxy4dmElFtIRHGiKhqd1Z06z4AzrmKEzgxkOk + LJjY9cvwD+iXjpK2oJwNNyavvjb5YZq6V60RhpyNtKpMh2+zRLgIk9sROEPQeYfK + 22zj2CnGBMg5Gm2uPOsGDltl/I/Fdh1aO3X4i1GXwCuPf1kSAg6lPJD0batftkSG + v0X0heUaV0j1HSNlBWamT4IR9+iJfKJHekOqvHQBcaCu7Ja4kXzx6GZ3M2j/Ja3A + 2QIDAQAB + -----END PUBLIC KEY----- + + .. _`NaCl`: https://nacl.cr.yp.to/ .. _`PyNaCl`: https://pynacl.readthedocs.io .. _`WSGIApplicationGroup`: https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIApplicationGroup.html diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index fda6293c1a0f..b2fdf78b584d 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1141,7 +1141,10 @@ def load_pem_x509_certificate(self, data): ) if x509 == self._ffi.NULL: self._consume_errors() - raise ValueError("Unable to load certificate") + raise ValueError( + "Unable to load certificate. See https://cryptography.io/en/la" + "test/faq/#why-can-t-i-import-my-pem-file for more details." + ) x509 = self._ffi.gc(x509, self._lib.X509_free) return _Certificate(self, x509) @@ -1163,7 +1166,10 @@ def load_pem_x509_crl(self, data): ) if x509_crl == self._ffi.NULL: self._consume_errors() - raise ValueError("Unable to load CRL") + raise ValueError( + "Unable to load CRL. See https://cryptography.io/en/la" + "test/faq/#why-can-t-i-import-my-pem-file for more details." + ) x509_crl = self._ffi.gc(x509_crl, self._lib.X509_CRL_free) return _CertificateRevocationList(self, x509_crl) @@ -1185,7 +1191,10 @@ def load_pem_x509_csr(self, data): ) if x509_req == self._ffi.NULL: self._consume_errors() - raise ValueError("Unable to load request") + raise ValueError( + "Unable to load request. See https://cryptography.io/en/la" + "test/faq/#why-can-t-i-import-my-pem-file for more details." + ) x509_req = self._ffi.gc(x509_req, self._lib.X509_REQ_free) return _CertificateSigningRequest(self, x509_req) From c73367a61c7e9d7878c91ee3b5a94837cc344049 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 8 Dec 2018 22:18:07 -0500 Subject: [PATCH 482/988] Jenkins is fixed! (#4630) --- docs/conf.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index d6ad9490c479..2264affd7217 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -179,11 +179,6 @@ linkcheck_retries = 5 linkcheck_ignore = [ - # Returns a 404 if you're not logged in - ( - "https://ci.cryptography.io/" - "job/cryptography-support-jobs/job/openssl-release-1.1/" - ), # Small DH key results in a TLS failure on modern OpenSSL "https://info.isl.ntt.co.jp/crypt/eng/camellia/", ] From 31af768dc250b598e0ad5b8b01d18054f3438d7f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 9 Dec 2018 00:03:32 -0500 Subject: [PATCH 483/988] Update link to MS docs (#4632) --- docs/hazmat/backends/openssl.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/backends/openssl.rst b/docs/hazmat/backends/openssl.rst index 805a85fd6acd..52aeeafb57ab 100644 --- a/docs/hazmat/backends/openssl.rst +++ b/docs/hazmat/backends/openssl.rst @@ -123,4 +123,4 @@ seeded from the same pool as ``/dev/random``. .. _`initializing the RNG`: https://en.wikipedia.org/wiki/OpenSSL#Predictable_private_keys_.28Debian-specific.29 .. _`Fortuna`: https://en.wikipedia.org/wiki/Fortuna_(PRNG) .. _`Yarrow`: https://en.wikipedia.org/wiki/Yarrow_algorithm -.. _`Microsoft documentation`: https://msdn.microsoft.com/en-us/library/windows/desktop/aa379942(v=vs.85).aspx +.. _`Microsoft documentation`: https://docs.microsoft.com/en-us/windows/desktop/api/wincrypt/nf-wincrypt-cryptgenrandom From c2d16370f00e42fae13e492c0b1c7b3a83a5e495 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 10 Dec 2018 07:18:09 +0800 Subject: [PATCH 484/988] make the same doc changes to DH as we did for ECDH (#4631) --- docs/hazmat/primitives/asymmetric/dh.rst | 56 +++++++++++++++++++++--- 1 file changed, 50 insertions(+), 6 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/dh.rst b/docs/hazmat/primitives/asymmetric/dh.rst index 04da3e40dec5..edfe614362a4 100644 --- a/docs/hazmat/primitives/asymmetric/dh.rst +++ b/docs/hazmat/primitives/asymmetric/dh.rst @@ -23,6 +23,56 @@ derivation function. This allows mixing of additional information into the key, derivation of multiple keys, and destroys any structure that may be present. +.. warning:: + + This example does not give `forward secrecy`_ and is only provided as a + demonstration of the basic Diffie-Hellman construction. For real world + applications always use the ephemeral form described after this example. + +.. code-block:: pycon + + >>> from cryptography.hazmat.backends import default_backend + >>> from cryptography.hazmat.primitives import hashes + >>> from cryptography.hazmat.primitives.asymmetric import dh + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF + >>> # Generate some parameters. These can be reused. + >>> parameters = dh.generate_parameters(generator=2, key_size=2048, + ... backend=default_backend()) + >>> # Generate a private key for use in the exchange. + >>> server_private_key = parameters.generate_private_key() + >>> # In a real handshake the peer is a remote client. For this + >>> # example we'll generate another local private key though. Note that in + >>> # a DH handshake both peers must agree on a common set of parameters. + >>> peer_private_key = parameters.generate_private_key() + >>> shared_key = server_private_key.exchange(peer_private_key.public_key()) + >>> # Perform key derivation. + >>> derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(shared_key) + >>> # And now we can demonstrate that the handshake performed in the + >>> # opposite direction gives the same final value + >>> same_shared_key = peer_private_key.exchange( + ... server_private_key.public_key() + ... ) + >>> same_derived_key = HKDF( + ... algorithm=hashes.SHA256(), + ... length=32, + ... salt=None, + ... info=b'handshake data', + ... backend=default_backend() + ... ).derive(same_shared_key) + >>> derived_key == same_derived_key + +DHE (or EDH), the ephemeral form of this exchange, is **strongly +preferred** over simple DH and provides `forward secrecy`_ when used. You must +generate a new private key using :func:`~DHParameters.generate_private_key` for +each :meth:`~DHPrivateKey.exchange` when performing an DHE key exchange. An +example of the ephemeral form: + .. code-block:: pycon >>> from cryptography.hazmat.backends import default_backend @@ -61,12 +111,6 @@ present. ... backend=default_backend() ... ).derive(shared_key_2) -DHE (or EDH), the ephemeral form of this exchange, is **strongly -preferred** over simple DH and provides `forward secrecy`_ when used. You must -generate a new private key using :func:`~DHParameters.generate_private_key` for -each :meth:`~DHPrivateKey.exchange` when performing an DHE key exchange. This -is demonstrated in the previous example. - To assemble a :class:`~DHParameters` and a :class:`~DHPublicKey` from primitive integers, you must first create the :class:`~DHParameterNumbers` and :class:`~DHPublicNumbers` objects. For From 3c68250ad9bfb275c760fcce4c72c78c99b57c34 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 10 Dec 2018 12:13:31 +0800 Subject: [PATCH 485/988] allow bytes-like for key/iv/data for symmetric encryption (#4621) * allow bytearrays for key/iv for symmetric encryption * bump pypy/cffi requirements * update docs, fix some tests * old openssl is naught but pain * revert a typo * use trusty for old pypy * better error msg again * restore match --- .travis.yml | 4 +- CHANGELOG.rst | 1 + docs/glossary.rst | 6 ++ .../primitives/symmetric-encryption.rst | 69 ++++++++++++------- docs/installation.rst | 2 +- pyproject.toml | 2 +- setup.py | 6 +- .../hazmat/backends/openssl/ciphers.py | 21 +++--- .../hazmat/primitives/ciphers/algorithms.py | 4 +- .../hazmat/primitives/ciphers/modes.py | 14 ++-- src/cryptography/utils.py | 7 ++ tests/hazmat/primitives/test_aes.py | 42 +++++++++++ tests/hazmat/primitives/test_chacha20.py | 12 ++++ 13 files changed, 141 insertions(+), 49 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2a636ad11d7b..b8ecb7d65520 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,9 +31,9 @@ matrix: env: TOXENV=py37 - python: 3.7 env: TOXENV=py37-idna - - python: pypy-5.3 + - python: pypy-5.4 env: TOXENV=pypy-nocoverage - # PyPy 5.3 isn't available for xenial + # PyPy 5.4 isn't available for xenial dist: trusty - python: pypy2.7-5.10.0 env: TOXENV=pypy-nocoverage diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 25c7c8c376e0..54004b488a45 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,7 @@ Changelog version 2.1, but this version removes the default ``idna`` dependency as well. If you still need this deprecated path please install cryptography with the ``idna`` extra: ``pip install cryptography[idna]``. +* **BACKWARDS INCOMPATIBLE:** The minimum supported PyPy version is now 5.4. * Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA512_224` and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using OpenSSL 1.1.1. diff --git a/docs/glossary.rst b/docs/glossary.rst index ce08dbaa4a60..95b893c8fee6 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -94,6 +94,11 @@ Glossary bit key, you can calculate the number of bytes by dividing by 8. 128 divided by 8 is 16, so a 128 bit key is a 16 byte key. + bytes-like + A bytes-like object contains binary data and supports the + `buffer protocol`_. This includes ``bytes``, ``bytearray``, and + ``memoryview`` objects. + U-label The presentational unicode form of an internationalized domain name. U-labels use unicode characters outside the ASCII range and @@ -101,3 +106,4 @@ Glossary .. _`hardware security module`: https://en.wikipedia.org/wiki/Hardware_security_module .. _`idna`: https://pypi.org/project/idna/ +.. _`buffer protocol`: https://docs.python.org/3/c-api/buffer.html diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 31f240c4eea0..4924ddd6e398 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -92,8 +92,9 @@ Algorithms AES is both fast, and cryptographically strong. It is a good default choice for encryption. - :param bytes key: The secret key. This must be kept secret. Either ``128``, + :param key: The secret key. This must be kept secret. Either ``128``, ``192``, or ``256`` :term:`bits` long. + :type key: :term:`bytes-like` .. class:: Camellia(key) @@ -101,8 +102,9 @@ Algorithms It is considered to have comparable security and performance to AES but is not as widely studied or deployed. - :param bytes key: The secret key. This must be kept secret. Either ``128``, + :param key: The secret key. This must be kept secret. Either ``128``, ``192``, or ``256`` :term:`bits` long. + :type key: :term:`bytes-like` .. class:: ChaCha20(key) @@ -120,15 +122,17 @@ Algorithms ChaCha20 is a stream cipher used in several IETF protocols. It is standardized in :rfc:`7539`. - :param bytes key: The secret key. This must be kept secret. ``256`` + :param key: The secret key. This must be kept secret. ``256`` :term:`bits` (32 bytes) in length. + :type key: :term:`bytes-like` - :param bytes nonce: Should be unique, a :term:`nonce`. It is + :param nonce: Should be unique, a :term:`nonce`. It is critical to never reuse a ``nonce`` with a given key. Any reuse of a nonce with the same key compromises the security of every message encrypted with that key. The nonce does not need to be kept secret and may be included with the ciphertext. This must be ``128`` :term:`bits` in length. + :type nonce: :term:`bytes-like` .. note:: @@ -161,12 +165,13 @@ Algorithms Nonetheless, Triple DES is not recommended for new applications because it is incredibly slow; old applications should consider moving away from it. - :param bytes key: The secret key. This must be kept secret. Either ``64``, + :param key: The secret key. This must be kept secret. Either ``64``, ``128``, or ``192`` :term:`bits` long. DES only uses ``56``, ``112``, or ``168`` bits of the key as there is a parity byte in each component of the key. Some writing refers to there being up to three separate keys that are each ``56`` bits long, they can simply be concatenated to produce the full key. + :type key: :term:`bytes-like` .. class:: CAST5(key) @@ -177,8 +182,9 @@ Algorithms a variable key length cipher and supports keys from 40-128 :term:`bits` in length. - :param bytes key: The secret key, This must be kept secret. 40 to 128 + :param key: The secret key, This must be kept secret. 40 to 128 :term:`bits` in length in increments of 8 bits. + :type key: :term:`bytes-like` .. class:: SEED(key) @@ -188,8 +194,9 @@ Algorithms (KISA). It is defined in :rfc:`4269` and is used broadly throughout South Korean industry, but rarely found elsewhere. - :param bytes key: The secret key. This must be kept secret. ``128`` + :param key: The secret key. This must be kept secret. ``128`` :term:`bits` in length. + :type key: :term:`bytes-like` Weak ciphers ------------ @@ -206,8 +213,9 @@ Weak ciphers susceptible to attacks when using weak keys. The author has recommended that users of Blowfish move to newer algorithms such as :class:`AES`. - :param bytes key: The secret key. This must be kept secret. 32 to 448 + :param key: The secret key. This must be kept secret. 32 to 448 :term:`bits` in length in increments of 8 bits. + :type key: :term:`bytes-like` .. class:: ARC4(key) @@ -215,9 +223,10 @@ Weak ciphers initial stream output. Its use is strongly discouraged. ARC4 does not use mode constructions. - :param bytes key: The secret key. This must be kept secret. Either ``40``, + :param key: The secret key. This must be kept secret. Either ``40``, ``56``, ``64``, ``80``, ``128``, ``192``, or ``256`` :term:`bits` in length. + :type key: :term:`bytes-like` .. doctest:: @@ -238,8 +247,9 @@ Weak ciphers is susceptible to attacks when using weak keys. It is recommended that you do not use this cipher for new applications. - :param bytes key: The secret key. This must be kept secret. ``128`` + :param key: The secret key. This must be kept secret. ``128`` :term:`bits` in length. + :type key: :term:`bytes-like` .. _symmetric-encryption-modes: @@ -256,13 +266,14 @@ Modes **Padding is required when using this mode.** - :param bytes initialization_vector: Must be :doc:`random bytes + :param initialization_vector: Must be :doc:`random bytes `. They do not need to be kept secret and they can be included in a transmitted message. Must be the same number of bytes as the ``block_size`` of the cipher. Each time something is encrypted a new ``initialization_vector`` should be generated. Do not reuse an ``initialization_vector`` with a given ``key``, and particularly do not use a constant ``initialization_vector``. + :type initialization_vector: :term:`bytes-like` A good construction looks like: @@ -295,12 +306,13 @@ Modes **This mode does not require padding.** - :param bytes nonce: Should be unique, a :term:`nonce`. It is + :param nonce: Should be unique, a :term:`nonce`. It is critical to never reuse a ``nonce`` with a given key. Any reuse of a nonce with the same key compromises the security of every message encrypted with that key. Must be the same number of bytes as the ``block_size`` of the cipher with a given key. The nonce does not need to be kept secret and may be included with the ciphertext. + :type nonce: :term:`bytes-like` .. class:: OFB(initialization_vector) @@ -309,11 +321,12 @@ Modes **This mode does not require padding.** - :param bytes initialization_vector: Must be :doc:`random bytes + :param initialization_vector: Must be :doc:`random bytes `. They do not need to be kept secret and they can be included in a transmitted message. Must be the same number of bytes as the ``block_size`` of the cipher. Do not reuse an ``initialization_vector`` with a given ``key``. + :type initialization_vector: :term:`bytes-like` .. class:: CFB(initialization_vector) @@ -322,11 +335,12 @@ Modes **This mode does not require padding.** - :param bytes initialization_vector: Must be :doc:`random bytes + :param initialization_vector: Must be :doc:`random bytes `. They do not need to be kept secret and they can be included in a transmitted message. Must be the same number of bytes as the ``block_size`` of the cipher. Do not reuse an ``initialization_vector`` with a given ``key``. + :type initialization_vector: :term:`bytes-like` .. class:: CFB8(initialization_vector) @@ -336,11 +350,12 @@ Modes **This mode does not require padding.** - :param bytes initialization_vector: Must be :doc:`random bytes + :param initialization_vector: Must be :doc:`random bytes `. They do not need to be kept secret and they can be included in a transmitted message. Must be the same number of bytes as the ``block_size`` of the cipher. Do not reuse an ``initialization_vector`` with a given ``key``. + :type initialization_vector: :term:`bytes-like` .. class:: GCM(initialization_vector, tag=None, min_tag_length=16) @@ -368,12 +383,13 @@ Modes **This mode does not require padding.** - :param bytes initialization_vector: Must be unique, a :term:`nonce`. + :param initialization_vector: Must be unique, a :term:`nonce`. They do not need to be kept secret and they can be included in a transmitted message. NIST `recommends a 96-bit IV length`_ for performance critical situations but it can be up to 2\ :sup:`64` - 1 :term:`bits`. Do not reuse an ``initialization_vector`` with a given ``key``. + :type initialization_vector: :term:`bytes-like` .. note:: @@ -495,11 +511,11 @@ Modes **This mode does not require padding.** - :param bytes tweak: The tweak is a 16 byte value typically derived from + :param tweak: The tweak is a 16 byte value typically derived from something like the disk sector number. A given ``(tweak, key)`` pair should not be reused, although doing so is less catastrophic than in CTR mode. - + :type tweak: :term:`bytes-like` Insecure modes -------------- @@ -544,7 +560,8 @@ Interfaces .. method:: update(data) - :param bytes data: The data you wish to pass into the context. + :param data: The data you wish to pass into the context. + :type data: :term:`bytes-like` :return bytes: Returns the data that was encrypted or decrypted. :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize` @@ -567,7 +584,8 @@ Interfaces requirement and you will be making many small calls to ``update_into``. - :param bytes data: The data you wish to pass into the context. + :param data: The data you wish to pass into the context. + :type data: :term:`bytes-like` :param buf: A writable Python buffer that the data will be written into. This buffer should be ``len(data) + n - 1`` bytes where ``n`` is the block size (in bytes) of the cipher and mode combination. @@ -629,7 +647,8 @@ Interfaces .. method:: authenticate_additional_data(data) - :param bytes data: Any data you wish to authenticate but not encrypt. + :param data: Any data you wish to authenticate but not encrypt. + :type data: :term:`bytes-like` :raises: :class:`~cryptography.exceptions.AlreadyFinalized` .. class:: AEADEncryptionContext @@ -747,7 +766,7 @@ Interfaces used by the symmetric cipher modes described in .. attribute:: initialization_vector - :type: bytes + :type: :term:`bytes-like` Exact requirements of the initialization are described by the documentation of individual modes. @@ -759,7 +778,7 @@ Interfaces used by the symmetric cipher modes described in .. attribute:: nonce - :type: bytes + :type: :term:`bytes-like` Exact requirements of the nonce are described by the documentation of individual modes. @@ -771,7 +790,7 @@ Interfaces used by the symmetric cipher modes described in .. attribute:: tag - :type: bytes + :type: :term:`bytes-like` Exact requirements of the tag are described by the documentation of individual modes. @@ -785,7 +804,7 @@ Interfaces used by the symmetric cipher modes described in .. attribute:: tweak - :type: bytes + :type: :term:`bytes-like` Exact requirements of the tweak are described by the documentation of individual modes. diff --git a/docs/installation.rst b/docs/installation.rst index 2d9db667eced..5b2854d96b87 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -11,7 +11,7 @@ Supported platforms ------------------- Currently we test ``cryptography`` on Python 2.7, 3.4+, and -PyPy 5.3+ on these operating systems. +PyPy 5.4+ on these operating systems. * x86-64 CentOS 7.x * macOS 10.12 Sierra, 10.11 El Capitan diff --git a/pyproject.toml b/pyproject.toml index 461675f06848..7d64f993a3ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,5 +3,5 @@ requires = [ "setuptools>=18.5", "wheel", - "cffi>=1.7,!=1.11.3; python_implementation != 'PyPy'", + "cffi>=1.8,!=1.11.3; python_implementation != 'PyPy'", ] diff --git a/setup.py b/setup.py index bd98fd5e7351..5b29d32e636f 100644 --- a/setup.py +++ b/setup.py @@ -44,12 +44,12 @@ VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__']) # `setup_requirements` must be kept in sync with `pyproject.toml` -setup_requirements = ["cffi>=1.7,!=1.11.3"] +setup_requirements = ["cffi>=1.8,!=1.11.3"] if platform.python_implementation() == "PyPy": - if sys.pypy_version_info < (5, 3): + if sys.pypy_version_info < (5, 4): raise RuntimeError( - "cryptography is not compatible with PyPy < 5.3. Please upgrade " + "cryptography is not compatible with PyPy < 5.4. Please upgrade " "PyPy to use this library." ) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index e0ee06ee26d8..fe5715b26cf8 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -56,13 +56,15 @@ def __init__(self, backend, cipher, mode, operation): ) if isinstance(mode, modes.ModeWithInitializationVector): - iv_nonce = mode.initialization_vector + iv_nonce = self._backend._ffi.from_buffer( + mode.initialization_vector + ) elif isinstance(mode, modes.ModeWithTweak): - iv_nonce = mode.tweak + iv_nonce = self._backend._ffi.from_buffer(mode.tweak) elif isinstance(mode, modes.ModeWithNonce): - iv_nonce = mode.nonce + iv_nonce = self._backend._ffi.from_buffer(mode.nonce) elif isinstance(cipher, modes.ModeWithNonce): - iv_nonce = cipher.nonce + iv_nonce = self._backend._ffi.from_buffer(cipher.nonce) else: iv_nonce = self._backend._ffi.NULL # begin init with cipher and operation type @@ -105,7 +107,7 @@ def __init__(self, backend, cipher, mode, operation): ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, - cipher.key, + self._backend._ffi.from_buffer(cipher.key), iv_nonce, operation ) @@ -131,8 +133,10 @@ def update_into(self, data, buf): "unsigned char *", self._backend._ffi.from_buffer(buf) ) outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherUpdate(self._ctx, buf, outlen, - data, len(data)) + res = self._backend._lib.EVP_CipherUpdate( + self._ctx, buf, outlen, + self._backend._ffi.from_buffer(data), len(data) + ) self._backend.openssl_assert(res != 0) return outlen[0] @@ -215,7 +219,8 @@ def finalize_with_tag(self, tag): def authenticate_additional_data(self, data): outlen = self._backend._ffi.new("int *") res = self._backend._lib.EVP_CipherUpdate( - self._ctx, self._backend._ffi.NULL, outlen, data, len(data) + self._ctx, self._backend._ffi.NULL, outlen, + self._backend._ffi.from_buffer(data), len(data) ) self._backend.openssl_assert(res != 0) diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index 21d9ecf08e46..1f49fd9dedbd 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -13,7 +13,7 @@ def _verify_key_size(algorithm, key): # Verify that the key is instance of bytes - utils._check_bytes("key", key) + utils._check_byteslike("key", key) # Verify that the key size matches the expected key size if len(key) * 8 not in algorithm.key_sizes: @@ -153,7 +153,7 @@ class ChaCha20(object): def __init__(self, key, nonce): self.key = _verify_key_size(self, key) - utils._check_bytes("nonce", nonce) + utils._check_byteslike("nonce", nonce) if len(nonce) != 16: raise ValueError("nonce must be 128-bits (16 bytes)") diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index d24445804a9a..ad91a6e142cb 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -88,7 +88,7 @@ class CBC(object): name = "CBC" def __init__(self, initialization_vector): - utils._check_bytes("initialization_vector", initialization_vector) + utils._check_byteslike("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -101,7 +101,7 @@ class XTS(object): name = "XTS" def __init__(self, tweak): - utils._check_bytes("tweak", tweak) + utils._check_byteslike("tweak", tweak) if len(tweak) != 16: raise ValueError("tweak must be 128-bits (16 bytes)") @@ -131,7 +131,7 @@ class OFB(object): name = "OFB" def __init__(self, initialization_vector): - utils._check_bytes("initialization_vector", initialization_vector) + utils._check_byteslike("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -144,7 +144,7 @@ class CFB(object): name = "CFB" def __init__(self, initialization_vector): - utils._check_bytes("initialization_vector", initialization_vector) + utils._check_byteslike("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -157,7 +157,7 @@ class CFB8(object): name = "CFB8" def __init__(self, initialization_vector): - utils._check_bytes("initialization_vector", initialization_vector) + utils._check_byteslike("initialization_vector", initialization_vector) self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -170,7 +170,7 @@ class CTR(object): name = "CTR" def __init__(self, nonce): - utils._check_bytes("nonce", nonce) + utils._check_byteslike("nonce", nonce) self._nonce = nonce nonce = utils.read_only_property("_nonce") @@ -195,7 +195,7 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): # len(initialization_vector) must in [1, 2 ** 64), but it's impossible # to actually construct a bytes object that large, so we don't check # for it - utils._check_bytes("initialization_vector", initialization_vector) + utils._check_byteslike("initialization_vector", initialization_vector) if len(initialization_vector) == 0: raise ValueError("initialization_vector must be at least 1 byte") self._initialization_vector = initialization_vector diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 3d45a77131a3..65a4ee71b0ed 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -30,6 +30,13 @@ def _check_bytes(name, value): raise TypeError("{0} must be bytes".format(name)) +def _check_byteslike(name, value): + try: + memoryview(value) + except TypeError: + raise TypeError("{0} must be bytes-like".format(name)) + + def read_only_property(name): return property(lambda self: getattr(self, name)) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index 4ceccf1553e8..90a6b3b0a067 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -455,3 +455,45 @@ def test_gcm_tag_decrypt_finalize_tag_length(self, backend): ).decryptor() with pytest.raises(ValueError): decryptor.finalize_with_tag(b"tagtooshort") + + def test_buffer_protocol(self, backend): + data = bytearray(b"helloworld") + enc = base.Cipher( + algorithms.AES(bytearray(b"\x00" * 16)), + modes.GCM(bytearray(b"\x00" * 12)), + backend + ).encryptor() + enc.authenticate_additional_data(bytearray(b"foo")) + ct = enc.update(data) + enc.finalize() + dec = base.Cipher( + algorithms.AES(bytearray(b"\x00" * 16)), + modes.GCM(bytearray(b"\x00" * 12), enc.tag), + backend + ).decryptor() + dec.authenticate_additional_data(bytearray(b"foo")) + pt = dec.update(ct) + dec.finalize() + assert pt == data + + +@pytest.mark.parametrize( + "mode", + [ + modes.CBC(bytearray(b"\x00" * 16)), + modes.CTR(bytearray(b"\x00" * 16)), + modes.OFB(bytearray(b"\x00" * 16)), + modes.CFB(bytearray(b"\x00" * 16)), + modes.CFB8(bytearray(b"\x00" * 16)), + modes.XTS(bytearray(b"\x00" * 16)), + ] +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +def test_buffer_protocol_alternate_modes(mode, backend): + data = bytearray(b"sixteen_byte_msg") + cipher = base.Cipher( + algorithms.AES(bytearray(b"\x00" * 32)), mode, backend + ) + enc = cipher.encryptor() + ct = enc.update(data) + enc.finalize() + dec = cipher.decryptor() + pt = dec.update(ct) + dec.finalize() + assert pt == data diff --git a/tests/hazmat/primitives/test_chacha20.py b/tests/hazmat/primitives/test_chacha20.py index 33730d9143ff..7c475c0f70a1 100644 --- a/tests/hazmat/primitives/test_chacha20.py +++ b/tests/hazmat/primitives/test_chacha20.py @@ -44,6 +44,18 @@ def test_vectors(self, vector, backend): computed_ct = encryptor.update(pt) + encryptor.finalize() assert binascii.hexlify(computed_ct) == vector["ciphertext"] + def test_buffer_protocol(self, backend): + key = bytearray(os.urandom(32)) + nonce = bytearray(os.urandom(16)) + cipher = Cipher( + algorithms.ChaCha20(key, nonce), None, backend + ) + enc = cipher.encryptor() + ct = enc.update(bytearray(b"hello")) + enc.finalize() + dec = cipher.decryptor() + pt = dec.update(ct) + dec.finalize() + assert pt == b"hello" + def test_key_size(self): chacha = algorithms.ChaCha20(b"0" * 32, b"0" * 16) assert chacha.key_size == 256 From 621429601f906902d4e98c11f6c05fdbac423699 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 11 Dec 2018 10:19:51 +0800 Subject: [PATCH 486/988] ec key creation by curve name refactored into a method (#4634) * ec key creation by curve name refactored into a method * typo --- .../hazmat/backends/openssl/backend.py | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index b2fdf78b584d..99f6ccf69dec 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1343,11 +1343,7 @@ def generate_elliptic_curve_private_key(self, curve): """ if self.elliptic_curve_supported(curve): - curve_nid = self._elliptic_curve_to_nid(curve) - - ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) - self.openssl_assert(ec_cdata != self._ffi.NULL) - ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) + ec_cdata = self._ec_key_new_by_curve(curve) res = self._lib.EC_KEY_generate_key(ec_cdata) self.openssl_assert(res == 1) @@ -1364,11 +1360,7 @@ def generate_elliptic_curve_private_key(self, curve): def load_elliptic_curve_private_numbers(self, numbers): public = numbers.public_numbers - curve_nid = self._elliptic_curve_to_nid(public.curve) - - ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) - self.openssl_assert(ec_cdata != self._ffi.NULL) - ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) + ec_cdata = self._ec_key_new_by_curve(public.curve) private_value = self._ffi.gc( self._int_to_bn(numbers.private_value), self._lib.BN_clear_free @@ -1384,12 +1376,7 @@ def load_elliptic_curve_private_numbers(self, numbers): return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) def load_elliptic_curve_public_numbers(self, numbers): - curve_nid = self._elliptic_curve_to_nid(numbers.curve) - - ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) - self.openssl_assert(ec_cdata != self._ffi.NULL) - ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) - + ec_cdata = self._ec_key_new_by_curve(numbers.curve) ec_cdata = self._ec_key_set_public_key_affine_coordinates( ec_cdata, numbers.x, numbers.y) evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) @@ -1397,11 +1384,7 @@ def load_elliptic_curve_public_numbers(self, numbers): return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) def derive_elliptic_curve_private_key(self, private_value, curve): - curve_nid = self._elliptic_curve_to_nid(curve) - - ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) - self.openssl_assert(ec_cdata != self._ffi.NULL) - ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) + ec_cdata = self._ec_key_new_by_curve(curve) get_func, group = self._ec_key_determine_group_get_func(ec_cdata) @@ -1434,6 +1417,12 @@ def derive_elliptic_curve_private_key(self, private_value, curve): return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) + def _ec_key_new_by_curve(self, curve): + curve_nid = self._elliptic_curve_to_nid(curve) + ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) + self.openssl_assert(ec_cdata != self._ffi.NULL) + return self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) + def load_der_ocsp_request(self, data): mem_bio = self._bytes_to_bio(data) request = self._lib.d2i_OCSP_REQUEST_bio(mem_bio.bio, self._ffi.NULL) From 75cce2299b30a8d10d032155de7e4489966813fd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 11 Dec 2018 10:36:29 +0800 Subject: [PATCH 487/988] convert some asserts to function calls (#4636) --- .../hazmat/backends/openssl/rsa.py | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index b7d2173fa59a..0bcc47125e36 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -127,10 +127,11 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): def _handle_rsa_enc_dec_error(backend, key): errors = backend._consume_errors() backend.openssl_assert(errors) - assert errors[0].lib == backend._lib.ERR_LIB_RSA + backend.openssl_assert(errors[0].lib == backend._lib.ERR_LIB_RSA) if isinstance(key, _RSAPublicKey): - assert (errors[0].reason == - backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE) + backend.openssl_assert( + errors[0].reason == backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE + ) raise ValueError( "Data too long for key size. Encrypt less data or use a " "larger key size." @@ -148,7 +149,7 @@ def _handle_rsa_enc_dec_error(backend, key): if backend._lib.Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR: decoding_errors.append(backend._lib.RSA_R_PKCS_DECODING_ERROR) - assert errors[0].reason in decoding_errors + backend.openssl_assert(errors[0].reason in decoding_errors) raise ValueError("Decryption failed.") @@ -236,17 +237,20 @@ def _rsa_sig_sign(backend, padding, algorithm, private_key, data): pkey_ctx, buf, buflen, data, len(data)) if res != 1: errors = backend._consume_errors() - assert errors[0].lib == backend._lib.ERR_LIB_RSA + backend.openssl_assert(errors[0].lib == backend._lib.ERR_LIB_RSA) reason = None - if (errors[0].reason == - backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE): + if ( + errors[0].reason == + backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE + ): reason = ("Salt length too long for key size. Try using " "MAX_LENGTH instead.") else: - assert (errors[0].reason == - backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY) + backend.openssl_assert( + errors[0].reason == + backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + ) reason = "Digest too large for key size. Use a larger key." - assert reason is not None raise ValueError(reason) return backend._ffi.buffer(buf)[:] From 489bae980a8e1f2ae7d98933c8b8ff8120ba0841 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 11 Dec 2018 11:26:48 +0800 Subject: [PATCH 488/988] add compressed point EC vectors (#4637) --- docs/development/test-vectors.rst | 2 ++ .../asymmetric/EC/compressed_points.txt | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 10a15b23afaa..b1c51de31782 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -102,6 +102,8 @@ Custom asymmetric vectors * ``x509/custom/ca/ca_key.pem`` - An unencrypted PCKS8 ``secp256r1`` key. It is the private key for the certificate ``x509/custom/ca/ca.pem``. This key is encoded in several of the PKCS12 custom vectors. +* ``asymmetric/EC/compressed_points.txt`` - Contains compressed public points + generated using OpenSSL. Key exchange diff --git a/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt b/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt new file mode 100644 index 000000000000..8df0a9b5277f --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt @@ -0,0 +1,25 @@ +# Vectors generated by OpenSSL + +COUNT = 0 +CURVE = SECP256R1 +POINT = 037399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac68 +X = 7399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac68 +Y = 6699ececc4f5f0d756d3c450708a0694eb0a07a68b805070b40b058d27271f6d + +COUNT = 1 +CURVE = SECP256R1 +POINT = 02d13b763988943682267deb6298ad3bdfec192459f9e9bf2d2227c8ec3e8ced91 +X = d13b763988943682267deb6298ad3bdfec192459f9e9bf2d2227c8ec3e8ced91 +Y = badeb7ee4662680c587a84de3f2d1ca7284b65790597408836eea3207e2f3a22 + +COUNT = 2 +CURVE = SECP256K1 +POINT = 032cac5ae983fcb88bc502dd48d561c810e2b40edc7b6b67ea52ceb415093be0d0 +X = 2cac5ae983fcb88bc502dd48d561c810e2b40edc7b6b67ea52ceb415093be0d0 +Y = 1445c276b193e10679bbdf638717c8db78021e79639e171e8cd37057b7798d0d + +COUNT = 3 +CURVE = SECP256K1 +POINT = 02e836ff83c6ab4d7ea391f4897cb926b16cbe6eb0991dd81b4a294c65fe9a9691 +X = e836ff83c6ab4d7ea391f4897cb926b16cbe6eb0991dd81b4a294c65fe9a9691 +Y = 8cb0f15636148db6f54ad50c7da4aa2920519391678c24ad8db8097c6bf168b0 From 0143367da8896d4c188df390ba3fad868b770d02 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 12 Dec 2018 08:02:02 +0800 Subject: [PATCH 489/988] document what the vector format is a little better (#4639) --- vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt b/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt index 8df0a9b5277f..d9bf5c04910b 100644 --- a/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt +++ b/vectors/cryptography_vectors/asymmetric/EC/compressed_points.txt @@ -1,4 +1,5 @@ # Vectors generated by OpenSSL +# POINT is hex encoded binary data while X and Y are hexadecimal integers COUNT = 0 CURVE = SECP256R1 From 4c5740a6747b78502f432b662024e5bf6a4ae8c4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 12 Dec 2018 08:08:27 +0800 Subject: [PATCH 490/988] Compressed point support (#4629) * compressed point support * refactor to use oct2point directly * small docs change * remove deprecation for the moment and a bit of review feedback * no backend arg, implicitly import it * missed a spot * double oops * remove superfluous call * use refactored method * use vector file * one last item --- CHANGELOG.rst | 4 + docs/hazmat/primitives/asymmetric/ec.rst | 21 +++++ .../hazmat/backends/openssl/backend.py | 20 +++++ .../hazmat/primitives/asymmetric/ec.py | 12 +++ .../hazmat/primitives/serialization/ssh.py | 3 +- tests/hazmat/primitives/test_ec.py | 76 ++++++++++++++++++- 6 files changed, 133 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 54004b488a45..7780c6ba5148 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -28,6 +28,10 @@ Changelog :class:`~cryptography.x509.RelativeDistinguishedName` and :class:`~cryptography.x509.NameAttribute` to format the name or component as a RFC 4514 Distinguished Name string. +* Added + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.from_encoded_point`, + which immediately checks if the point is on the curve and supports compressed + points. .. _v2-4-2: diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 5936cf443b94..728c5159accc 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -704,6 +704,27 @@ Key Interfaces Size (in :term:`bits`) of a secret scalar for the curve (as generated by :func:`generate_private_key`). + .. classmethod:: from_encoded_point(curve, data) + + .. versionadded:: 2.5 + + Decodes a byte string as described in `SEC 1 v2.0`_ section 2.3.3 and + returns an :class:`EllipticCurvePublicKey`. This class method supports + compressed points. + + :param curve: An + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurve` + instance. + + :param bytes data: The serialized point byte string. + + :returns: An :class:`EllipticCurvePublicKey` instance. + + :raises ValueError: Raised when an invalid point is supplied. + + :raises TypeError: Raised when curve is not an + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurve`. + .. class:: EllipticCurvePublicKeyWithSerialization diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 99f6ccf69dec..cfe146f26ed7 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1383,6 +1383,26 @@ def load_elliptic_curve_public_numbers(self, numbers): return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) + def load_elliptic_curve_public_bytes(self, curve, point_bytes): + ec_cdata = self._ec_key_new_by_curve(curve) + group = self._lib.EC_KEY_get0_group(ec_cdata) + self.openssl_assert(group != self._ffi.NULL) + point = self._lib.EC_POINT_new(group) + self.openssl_assert(point != self._ffi.NULL) + point = self._ffi.gc(point, self._lib.EC_POINT_free) + with self._tmp_bn_ctx() as bn_ctx: + res = self._lib.EC_POINT_oct2point( + group, point, point_bytes, len(point_bytes), bn_ctx + ) + if res != 1: + self._consume_errors() + raise ValueError("Invalid public bytes for the given curve") + + res = self._lib.EC_KEY_set_public_key(ec_cdata, point) + self.openssl_assert(res == 1) + evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) + return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) + def derive_elliptic_curve_private_key(self, private_value, curve): ec_cdata = self._ec_key_new_by_curve(curve) diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 1d709d338fd6..6b1de7c5bf79 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -151,6 +151,18 @@ def verify(self, signature, data, signature_algorithm): Verifies the signature of the data. """ + @classmethod + def from_encoded_point(cls, curve, data): + utils._check_bytes("data", data) + if not isinstance(curve, EllipticCurve): + raise TypeError("curve must be an EllipticCurve instance") + + if six.indexbytes(data, 0) not in [0x02, 0x03, 0x04]: + raise ValueError("Unsupported elliptic curve point type") + + from cryptography.hazmat.backends.openssl.backend import backend + return backend.load_elliptic_curve_public_bytes(curve, data) + EllipticCurvePublicKeyWithSerialization = EllipticCurvePublicKey diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index f58ff0743297..cb838927d33d 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -99,8 +99,7 @@ def _load_ssh_ecdsa_public_key(expected_key_type, decoded_data, backend): "Compressed elliptic curve points are not supported" ) - numbers = ec.EllipticCurvePublicNumbers.from_encoded_point(curve, data) - return numbers.public_key(backend) + return ec.EllipticCurvePublicKey.from_encoded_point(curve, data) def _ssh_read_next_string(data): diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 6d4936619818..9a8ddf600f6b 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -212,7 +212,7 @@ def test_from_encoded_point_invalid_length(): ) -def test_from_encoded_point_unsupported_point_type(): +def test_from_encoded_point_unsupported_point_no_backend(): # set to point type 2. unsupported_type = binascii.unhexlify( "02233ea3b0027127084cd2cd336a13aeef69c598d8af61369a36454a17c6c22a" @@ -1009,6 +1009,80 @@ def test_public_bytes_pkcs1_unsupported(self, backend): serialization.Encoding.PEM, serialization.PublicFormat.PKCS1 ) + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "EC", "compressed_points.txt"), + load_nist_vectors + ) + ) + def test_from_encoded_point_compressed(self, vector): + curve = { + b"SECP256R1": ec.SECP256R1(), + b"SECP256K1": ec.SECP256K1(), + }[vector["curve"]] + point = binascii.unhexlify(vector["point"]) + pn = ec.EllipticCurvePublicKey.from_encoded_point(curve, point) + public_num = pn.public_numbers() + assert public_num.x == int(vector["x"], 16) + assert public_num.y == int(vector["y"], 16) + + def test_from_encoded_point_notoncurve(self): + uncompressed_point = binascii.unhexlify( + "047399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac" + "686699ececc4f5f0d756d3c450708a0694eb0a07a68b805070b40b058d27271f" + "6e" + ) + with pytest.raises(ValueError): + ec.EllipticCurvePublicKey.from_encoded_point( + ec.SECP256R1(), uncompressed_point + ) + + def test_from_encoded_point_uncompressed(self): + uncompressed_point = binascii.unhexlify( + "047399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac" + "686699ececc4f5f0d756d3c450708a0694eb0a07a68b805070b40b058d27271f" + "6d" + ) + pn = ec.EllipticCurvePublicKey.from_encoded_point( + ec.SECP256R1(), uncompressed_point + ) + assert pn.public_numbers().x == int( + '7399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac68', + 16 + ) + assert pn.public_numbers().y == int( + '6699ececc4f5f0d756d3c450708a0694eb0a07a68b805070b40b058d27271f6d', + 16 + ) + + def test_from_encoded_point_invalid_length(self): + bad_data = binascii.unhexlify( + "047399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac" + "686699ececc4f5f0d756d3c450708a0694eb0a07a68b805070b40b058d27271f" + "6d" + ) + with pytest.raises(ValueError): + ec.EllipticCurvePublicKey.from_encoded_point( + ec.SECP384R1(), bad_data + ) + + def test_from_encoded_point_not_a_curve(self): + with pytest.raises(TypeError): + ec.EllipticCurvePublicKey.from_encoded_point( + "notacurve", b"\x04data" + ) + + def test_from_encoded_point_unsupported_encoding(self): + unsupported_type = binascii.unhexlify( + "057399336a9edf2197c2f8eb3d39aed9c34a66e45d918a07dc7684c42c9b37ac6" + "8" + ) + with pytest.raises(ValueError): + ec.EllipticCurvePublicKey.from_encoded_point( + ec.SECP256R1(), unsupported_type + ) + @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) class TestECDSAVerification(object): From 89e1e34d977e565171329c26de6ce9c8f12340e7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 12 Dec 2018 10:35:27 +0800 Subject: [PATCH 491/988] deprecate old from_encoded_point (#4640) --- CHANGELOG.rst | 4 ++- docs/hazmat/primitives/asymmetric/ec.rst | 5 ++++ .../hazmat/primitives/asymmetric/ec.py | 9 ++++++ src/cryptography/utils.py | 1 + tests/hazmat/primitives/test_ec.py | 28 +++++++++++-------- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7780c6ba5148..1801e04eef01 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -31,7 +31,9 @@ Changelog * Added :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.from_encoded_point`, which immediately checks if the point is on the curve and supports compressed - points. + points. Deprecated the previous method + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicNumbers.from_encoded_point`. + .. _v2-4-2: diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 728c5159accc..168cdfd8e287 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -206,6 +206,11 @@ Elliptic Curve Signature Algorithms .. versionadded:: 1.1 + .. note:: + + This has been deprecated in favor of + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.from_encoded_point` + Decodes a byte string as described in `SEC 1 v2.0`_ section 2.3.3 and returns an :class:`EllipticCurvePublicNumbers`. This method only supports uncompressed points. diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 6b1de7c5bf79..125235f8bf21 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import abc +import warnings import six @@ -366,6 +367,14 @@ def from_encoded_point(cls, curve, data): if not isinstance(curve, EllipticCurve): raise TypeError("curve must be an EllipticCurve instance") + warnings.warn( + "Support for unsafe construction of public numbers from " + "encoded data will be removed in a future version. " + "Please use EllipticCurvePublicKey.from_encoded_point", + utils.DeprecatedIn25, + stacklevel=2, + ) + if data.startswith(b'\x04'): # key_size is in bits. Convert to bytes and round up byte_length = (curve.key_size + 7) // 8 diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 65a4ee71b0ed..cbbae3a79355 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -23,6 +23,7 @@ class CryptographyDeprecationWarning(UserWarning): PersistentlyDeprecated = CryptographyDeprecationWarning DeprecatedIn21 = CryptographyDeprecationWarning DeprecatedIn23 = CryptographyDeprecationWarning +DeprecatedIn25 = CryptographyDeprecationWarning def _check_bytes(name, value): diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 9a8ddf600f6b..7cf9a09afbee 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -188,9 +188,10 @@ def test_from_encoded_point(): "04233ea3b0027127084cd2cd336a13aeef69c598d8af61369a36454a17c6c22ae" "c3ea2c10a84153862be4ec82940f0543f9ba866af9751a6ee79d38460b35f442e" ) - pn = ec.EllipticCurvePublicNumbers.from_encoded_point( - ec.SECP256R1(), data - ) + with pytest.warns(CryptographyDeprecationWarning): + pn = ec.EllipticCurvePublicNumbers.from_encoded_point( + ec.SECP256R1(), data + ) assert pn.x == int( '233ea3b0027127084cd2cd336a13aeef69c598d8af61369a36454a17c6c22aec', 16 @@ -207,9 +208,10 @@ def test_from_encoded_point_invalid_length(): "c3ea2c10a84153862be4ec82940f0543f9ba866af9751a6ee79d38460" ) with pytest.raises(ValueError): - ec.EllipticCurvePublicNumbers.from_encoded_point( - ec.SECP384R1(), bad_data - ) + with pytest.warns(CryptographyDeprecationWarning): + ec.EllipticCurvePublicNumbers.from_encoded_point( + ec.SECP384R1(), bad_data + ) def test_from_encoded_point_unsupported_point_no_backend(): @@ -218,16 +220,18 @@ def test_from_encoded_point_unsupported_point_no_backend(): "02233ea3b0027127084cd2cd336a13aeef69c598d8af61369a36454a17c6c22a" ) with pytest.raises(ValueError): - ec.EllipticCurvePublicNumbers.from_encoded_point( - ec.SECP256R1(), unsupported_type - ) + with pytest.warns(CryptographyDeprecationWarning): + ec.EllipticCurvePublicNumbers.from_encoded_point( + ec.SECP256R1(), unsupported_type + ) def test_from_encoded_point_not_a_curve(): with pytest.raises(TypeError): - ec.EllipticCurvePublicNumbers.from_encoded_point( - "notacurve", b"\x04data" - ) + with pytest.warns(CryptographyDeprecationWarning): + ec.EllipticCurvePublicNumbers.from_encoded_point( + "notacurve", b"\x04data" + ) def test_ec_public_numbers_repr(): From 824155743fe3087bb2b2116ad3a8a363f550f9ab Mon Sep 17 00:00:00 2001 From: Marti Raudsepp Date: Tue, 18 Dec 2018 01:26:40 +0200 Subject: [PATCH 492/988] Remove spaces from RFC 4514 strings for better compliance (#4643) (#4646) RFC 4514 does not explicitly allow whitespace between separators: https://tools.ietf.org/html/rfc4514 Reported-by: David Arnold --- docs/x509/reference.rst | 6 +++--- src/cryptography/x509/name.py | 2 +- tests/x509/test_x509.py | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index ac6bbcdccdfa..6b2f74cfd01b 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -583,7 +583,7 @@ X.509 CRL (Certificate Revocation List) Object .. doctest:: >>> crl.issuer - + .. attribute:: next_update @@ -1194,7 +1194,7 @@ X.509 CSR (Certificate Signing Request) Builder Object get every attribute or you can use :meth:`Name.get_attributes_for_oid` to obtain the specific type you want. Names are sometimes represented as a slash or comma delimited string (e.g. ``/CN=mydomain.com/O=My Org/C=US`` or - ``CN=mydomain.com, O=My Org, C=US``). + ``CN=mydomain.com,O=My Org,C=US``). Technically, a Name is a list of *sets* of attributes, called *Relative Distinguished Names* or *RDNs*, although multi-valued RDNs are rarely @@ -1251,7 +1251,7 @@ X.509 CSR (Certificate Signing Request) Builder Object .. versionadded:: 2.5 :return str: Format the given name as a `RFC 4514`_ Distinguished Name - string, for example ``CN=mydomain.com, O=My Org, C=US``. + string, for example ``CN=mydomain.com,O=My Org,C=US``. .. class:: Version diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 470862c24211..026b79c2cae2 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -218,7 +218,7 @@ def rfc4514_string(self): elements are separated by '+'. The latter is almost never used in real world certificates. """ - return ', '.join(attr.rfc4514_string() for attr in self._attributes) + return ','.join(attr.rfc4514_string() for attr in self._attributes) def get_attributes_for_oid(self, oid): return [i for i in self if i.oid == oid] diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index f4520811f7a5..1d483ac2a22d 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1139,8 +1139,8 @@ def test_certificate_repr(self, backend): backend ) assert repr(cert) == ( - ", ...)>" ) @@ -4113,7 +4113,7 @@ def test_repr(self): x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), ]) - assert repr(name) == "" + assert repr(name) == "" def test_rfc4514_string(self): n = x509.Name([ @@ -4129,7 +4129,7 @@ def test_rfc4514_string(self): ]), ]) assert (n.rfc4514_string() == - 'OU=Sales+CN=J. Smith, DC=example, DC=net') + 'OU=Sales+CN=J. Smith,DC=example,DC=net') def test_not_nameattribute(self): with pytest.raises(TypeError): From 3c137d909dc004fbcab4a1593c3a6430882fd853 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 17 Dec 2018 19:10:55 -0500 Subject: [PATCH 493/988] Fedora has rev'd its Python to 3.7 (#4647) * Fedora has rev'd it's Python to 3.7 * here too --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b8ecb7d65520..8bc93d46db99 100644 --- a/.travis.yml +++ b/.travis.yml @@ -94,9 +94,9 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-fedora - - python: 3.6 + - python: 3.7 services: docker - env: TOXENV=py36 DOCKER=pyca/cryptography-runner-fedora + env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora - python: 3.6 services: docker env: TOXENV=py36 DOCKER=pyca/cryptography-runner-alpine:latest From 7deaf5a8397b3c1fae5e6e3ffb788146f24c4af4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 18 Dec 2018 09:48:51 +0800 Subject: [PATCH 494/988] handle empty byte string in from_encoded_point (#4649) * handle empty byte string in from_encoded_point * move the error --- src/cryptography/hazmat/primitives/asymmetric/ec.py | 4 ++++ tests/hazmat/primitives/test_ec.py | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 125235f8bf21..c93cc090d113 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -155,9 +155,13 @@ def verify(self, signature, data, signature_algorithm): @classmethod def from_encoded_point(cls, curve, data): utils._check_bytes("data", data) + if not isinstance(curve, EllipticCurve): raise TypeError("curve must be an EllipticCurve instance") + if len(data) == 0: + raise ValueError("data must not be an empty byte string") + if six.indexbytes(data, 0) not in [0x02, 0x03, 0x04]: raise ValueError("Unsupported elliptic curve point type") diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 7cf9a09afbee..f883d0653ea9 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -1071,6 +1071,12 @@ def test_from_encoded_point_invalid_length(self): ec.SECP384R1(), bad_data ) + def test_from_encoded_point_empty_byte_string(self): + with pytest.raises(ValueError): + ec.EllipticCurvePublicKey.from_encoded_point( + ec.SECP384R1(), b"" + ) + def test_from_encoded_point_not_a_curve(self): with pytest.raises(TypeError): ec.EllipticCurvePublicKey.from_encoded_point( From d13fd93ddde42c806929f334ae03c02b954aa64a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 17 Dec 2018 21:44:15 -0500 Subject: [PATCH 495/988] Support compressed points in the wycheproof tests (#4648) * Support compressed points in the wycheproof tests * Handle entries with no public key * Ok, let's try this --- tests/wycheproof/test_ecdh.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/tests/wycheproof/test_ecdh.py b/tests/wycheproof/test_ecdh.py index a0c3f0d9f8cd..5fcc45b76273 100644 --- a/tests/wycheproof/test_ecdh.py +++ b/tests/wycheproof/test_ecdh.py @@ -97,28 +97,18 @@ def test_ecdh_ecpoint(backend, wycheproof): private_key = ec.derive_private_key( int(wycheproof.testcase["private"], 16), curve, backend ) - # We don't support compressed points - if ( - wycheproof.has_flag("CompressedPoint") or - not wycheproof.testcase["public"] - ): + + if wycheproof.invalid: with pytest.raises(ValueError): - ec.EllipticCurvePublicNumbers.from_encoded_point( + ec.EllipticCurvePublicKey.from_encoded_point( curve, binascii.unhexlify(wycheproof.testcase["public"]) ) return - public_numbers = ec.EllipticCurvePublicNumbers.from_encoded_point( + assert wycheproof.valid or wycheproof.acceptable + public_key = ec.EllipticCurvePublicKey.from_encoded_point( curve, binascii.unhexlify(wycheproof.testcase["public"]) ) - if wycheproof.testcase["comment"] == "point is not on curve": - assert wycheproof.invalid - with pytest.raises(ValueError): - public_numbers.public_key(backend) - return - - assert wycheproof.valid or wycheproof.acceptable - public_key = public_numbers.public_key(backend) computed_shared = private_key.exchange(ec.ECDH(), public_key) expected_shared = binascii.unhexlify(wycheproof.testcase["shared"]) assert computed_shared == expected_shared From 815301ab4f7b794c091a8435741d7f57436f87d9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 18 Dec 2018 02:03:19 -0500 Subject: [PATCH 496/988] Improve error message for unsupported ciphers (#4650) * Improve error message for unsupported ciphers * fix spacing * include the openssl version number in the message * backwards * pep8 --- .../hazmat/backends/openssl/ciphers.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index fe5715b26cf8..66ac5fd69aa6 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -48,12 +48,14 @@ def __init__(self, backend, cipher, mode, operation): evp_cipher = adapter(self._backend, cipher, mode) if evp_cipher == self._backend._ffi.NULL: - raise UnsupportedAlgorithm( - "cipher {0} in {1} mode is not supported " - "by this backend.".format( - cipher.name, mode.name if mode else mode), - _Reasons.UNSUPPORTED_CIPHER - ) + msg = "cipher {0.name} ".format(cipher) + if mode is not None: + msg += "in {0.name} mode ".format(mode) + msg += ( + "is not supported by this backend (Your version of OpenSSL " + "may be too old. Current version: {0}.)" + ).format(self._backend.openssl_version_text()) + raise UnsupportedAlgorithm(msg, _Reasons.UNSUPPORTED_CIPHER) if isinstance(mode, modes.ModeWithInitializationVector): iv_nonce = self._backend._ffi.from_buffer( From f86696fea79a9cc53e262afdcd5088e1505d337e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 22 Dec 2018 15:54:53 -0600 Subject: [PATCH 497/988] add x448 to changelog (#4652) --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1801e04eef01..191d8042b1f4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,6 +21,8 @@ Changelog :class:`~cryptography.hazmat.primitives.hashes.SHA3_384`, and :class:`~cryptography.hazmat.primitives.hashes.SHA3_512` when using OpenSSL 1.1.1. +* Added support for :doc:`/hazmat/primitives/asymmetric/x448` when using + OpenSSL 1.1.1. * Added initial support for parsing PKCS12 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_key_and_certificates`. * Added support for :class:`~cryptography.x509.IssuingDistributionPoint`. From 4bf93b7b18a99cdbf625161a7910ba5640fcdd9d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 24 Dec 2018 12:09:15 -0500 Subject: [PATCH 498/988] Bump libressl versions in travis (#4654) --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8bc93d46db99..5710fb6b3341 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,9 +54,11 @@ matrix: - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.7.4 + env: TOXENV=py37 LIBRESSL=2.7.5 - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.8.2 + env: TOXENV=py37 LIBRESSL=2.8.3 + - python: 3.7 + env: TOXENV=py37 LIBRESSL=2.9.0 - python: 2.7 services: docker From 8f75d0779740d7221445ebd2da66ececb49cc05b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 29 Dec 2018 08:04:32 -0600 Subject: [PATCH 499/988] Fixes #4645 -- poll() on /dev/random before reading from /dev/urandom on Linux (#4656) * Fixes #4645 -- select() on /dev/random before reading from /dev/urandom on linux * whoops * Missing header * whoops * Review notes * Potential uninitialized fix * Signals are literally impossible --- src/_cffi_src/openssl/src/osrandom_engine.c | 72 ++++++++++++++++----- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index e6a76a3469b6..315d5f1f7a90 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -13,6 +13,10 @@ * Copyright 2001-2016 Python Software Foundation; All Rights Reserved. */ +#ifdef __linux__ +#include +#endif + static const char *Cryptography_osrandom_engine_id = "osrandom"; /**************************************************************************** @@ -90,9 +94,47 @@ static struct { ino_t st_ino; } urandom_cache = { -1 }; +static int set_cloexec(int fd) { + int flags = fcntl(fd, F_GETFD); + if (flags == -1) { + return -1; + } + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { + return -1; + } + return 0; +} + +#ifdef __linux__ +/* On Linux, we open("/dev/random") and use poll() to wait until it's readable + * before we read from /dev/urandom, this ensures that we don't read from + * /dev/urandom before the kernel CSPRNG is initialized. This isn't necessary on + * other platforms because they don't have the same _bug_ as Linux does with + * /dev/urandom and early boot. */ +static int wait_on_devrandom(void) { + struct pollfd pfd = {}; + int ret = 0; + int random_fd = open("/dev/random", O_RDONLY); + if (random_fd < 0) { + return -1; + } + if (set_cloexec(random_fd) < 0) { + return -1; + } + pfd.fd = random_fd; + pfd.events = POLLIN; + pfd.revents = 0; + do { + ret = poll(&pfd, 1, -1); + } while (ret < 0 && (errno == EINTR || errno == EAGAIN)); + close(random_fd); + return ret; +} +#endif + /* return -1 on error */ static int dev_urandom_fd(void) { - int fd, n, flags; + int fd = -1; struct stat st; /* Check that fd still points to the correct device */ @@ -106,25 +148,25 @@ static int dev_urandom_fd(void) { } } if (urandom_cache.fd < 0) { +#ifdef __linux__ + if (wait_on_devrandom() < 0) { + goto error; + } +#endif + fd = open("/dev/urandom", O_RDONLY); if (fd < 0) { goto error; } - if (fstat(fd, &st)) { + if (set_cloexec(fd) < 0) { goto error; } - /* set CLOEXEC flag */ - flags = fcntl(fd, F_GETFD); - if (flags == -1) { - goto error; - } else if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { + if (fstat(fd, &st)) { goto error; } /* Another thread initialized the fd */ if (urandom_cache.fd >= 0) { - do { - n = close(fd); - } while (n < 0 && errno == EINTR); + close(fd); return urandom_cache.fd; } urandom_cache.st_dev = st.st_dev; @@ -135,9 +177,7 @@ static int dev_urandom_fd(void) { error: if (fd != -1) { - do { - n = close(fd); - } while (n < 0 && errno == EINTR); + close(fd); } ERR_Cryptography_OSRandom_error( CRYPTOGRAPHY_OSRANDOM_F_DEV_URANDOM_FD, @@ -177,7 +217,7 @@ static int dev_urandom_read(unsigned char *buffer, int size) { static void dev_urandom_close(void) { if (urandom_cache.fd >= 0) { - int fd, n; + int fd; struct stat st; if (fstat(urandom_cache.fd, &st) @@ -185,9 +225,7 @@ static void dev_urandom_close(void) { && st.st_ino == urandom_cache.st_ino) { fd = urandom_cache.fd; urandom_cache.fd = -1; - do { - n = close(fd); - } while (n < 0 && errno == EINTR); + close(fd); } } } From 3c3f71402c29d29c56af2d4d07ef0c365c9cd9ef Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 30 Dec 2018 13:41:50 -0600 Subject: [PATCH 500/988] Debian buster goes py3.7 (#4663) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5710fb6b3341..3285437789bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -78,9 +78,9 @@ matrix: - python: 3.5 services: docker env: TOXENV=py35 DOCKER=pyca/cryptography-runner-stretch - - python: 3.6 + - python: 3.7 services: docker - env: TOXENV=py36 DOCKER=pyca/cryptography-runner-buster + env: TOXENV=py37 DOCKER=pyca/cryptography-runner-buster - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-sid From 9aeabd9d2abea2e6cf7fc2240f1d4f34f57a24bd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 30 Dec 2018 14:28:19 -0600 Subject: [PATCH 501/988] DigiCert's root is now available over https (#4664) --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index b1c51de31782..9e26627b5621 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -638,7 +638,7 @@ header format (substituting the correct information): .. _`NIST SP-800-38B`: https://csrc.nist.gov/publications/detail/sp/800-38b/archive/2005-05-01 .. _`NIST PKI Testing`: https://csrc.nist.gov/Projects/PKI-Testing .. _`testx509.pem`: https://github.com/openssl/openssl/blob/master/test/testx509.pem -.. _`DigiCert Global Root G3`: http://cacerts.digicert.com/DigiCertGlobalRootG3.crt +.. _`DigiCert Global Root G3`: https://cacerts.digicert.com/DigiCertGlobalRootG3.crt .. _`root data`: https://hg.mozilla.org/projects/nss/file/25b2922cc564/security/nss/lib/ckfw/builtins/certdata.txt#l2053 .. _`asymmetric/public/PKCS1/dsa.pub.pem`: https://github.com/ruby/ruby/blob/4ccb387f3bc436a08fc6d72c4931994f5de95110/test/openssl/test_pkey_dsa.rb#L53 .. _`Mozilla bug`: https://bugzilla.mozilla.org/show_bug.cgi?id=233586 From ebaa5706976ced25a89b89b49a570c22c1da1b87 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 30 Dec 2018 14:28:48 -0600 Subject: [PATCH 502/988] Sphinx's website is now https (#4662) * Sphinx's website is now https * Sphinx's website is now https --- docs/development/getting-started.rst | 2 +- docs/development/submitting-patches.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index e01ee277acdb..cc333e4d3898 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -115,5 +115,5 @@ The HTML documentation index can now be found at .. _`virtualenv`: https://pypi.org/project/virtualenv/ .. _`pip`: https://pypi.org/project/pip/ .. _`sphinx`: https://pypi.org/project/Sphinx/ -.. _`reStructured Text`: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html +.. _`reStructured Text`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html .. _`this Github issue`: https://github.com/rfk/pyenchant/issues/42 diff --git a/docs/development/submitting-patches.rst b/docs/development/submitting-patches.rst index 2e9bb0fd66b2..ec00aa528650 100644 --- a/docs/development/submitting-patches.rst +++ b/docs/development/submitting-patches.rst @@ -155,7 +155,7 @@ So, specifically: .. _`Write comments as complete sentences.`: https://nedbatchelder.com/blog/201401/comments_should_be_sentences.html -.. _`syntax`: http://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#info-field-lists +.. _`syntax`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#info-field-lists .. _`Studies have shown`: https://smartbear.com/SmartBear/media/pdfs/11_Best_Practices_for_Peer_Code_Review.pdf .. _`our mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev .. _`doc8`: https://github.com/openstack/doc8 From f7567f62075f2e80762834e6d71c79cd50bb4529 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 31 Dec 2018 10:10:09 -0600 Subject: [PATCH 503/988] HTTPS a bunch of links in random places (#4666) * HTTPS a bunch of links in random places * What the heck happened here? --- LICENSE.APACHE | 4 ++-- src/_cffi_src/build_openssl.py | 2 +- tests/test_utils.py | 8 ++++---- tests/utils.py | 2 +- vectors/LICENSE.APACHE | 4 ++-- vectors/cryptography_vectors/KDF/rfc-6070-PBKDF2-SHA1.txt | 2 +- .../ciphers/Camellia/camellia-128-ecb.txt | 2 +- .../ciphers/Camellia/camellia-192-ecb.txt | 2 +- .../ciphers/Camellia/camellia-256-ecb.txt | 2 +- vectors/cryptography_vectors/hashes/MD5/rfc-1321.txt | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/LICENSE.APACHE b/LICENSE.APACHE index d64569567334..62589edd12a3 100644 --- a/LICENSE.APACHE +++ b/LICENSE.APACHE @@ -1,7 +1,7 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -193,7 +193,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 5676144da699..456b8692604d 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -32,7 +32,7 @@ def _get_openssl_libraries(platform): # In some circumstances, the order in which these libs are # specified on the linker command-line is significant; # libssl must come before libcrypto - # (http://marc.info/?l=openssl-users&m=135361825921871) + # (https://marc.info/?l=openssl-users&m=135361825921871) return ["ssl", "crypto"] diff --git a/tests/test_utils.py b/tests/test_utils.py index 81656eb9f001..ecd257bda5e6 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -227,7 +227,7 @@ def test_load_ed25519_vectors(): def test_load_cryptrec_vectors(): vector_data = textwrap.dedent(""" - # Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ + # Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key @@ -267,7 +267,7 @@ def test_load_cryptrec_vectors(): def test_load_cryptrec_vectors_invalid(): vector_data = textwrap.dedent(""" - # Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ + # Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key @@ -282,7 +282,7 @@ def test_load_cryptrec_vectors_invalid(): def test_load_hash_vectors(): vector_data = textwrap.dedent(""" - # http://tools.ietf.org/html/rfc1321 + # https://tools.ietf.org/html/rfc1321 [irrelevant] Len = 0 @@ -327,7 +327,7 @@ def test_load_hmac_vectors(): def test_load_hash_vectors_bad_data(): vector_data = textwrap.dedent(""" - # http://tools.ietf.org/html/rfc1321 + # https://tools.ietf.org/html/rfc1321 Len = 0 Msg = 00 diff --git a/tests/utils.py b/tests/utils.py index af7f766cc08d..364a349b0bbf 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -435,7 +435,7 @@ def load_fips_dsa_sig_vectors(vector_data): return vectors -# http://tools.ietf.org/html/rfc4492#appendix-A +# https://tools.ietf.org/html/rfc4492#appendix-A _ECDSA_CURVE_NAMES = { "P-192": "secp192r1", "P-224": "secp224r1", diff --git a/vectors/LICENSE.APACHE b/vectors/LICENSE.APACHE index d64569567334..62589edd12a3 100644 --- a/vectors/LICENSE.APACHE +++ b/vectors/LICENSE.APACHE @@ -1,7 +1,7 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -193,7 +193,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/vectors/cryptography_vectors/KDF/rfc-6070-PBKDF2-SHA1.txt b/vectors/cryptography_vectors/KDF/rfc-6070-PBKDF2-SHA1.txt index 739f3f36dc83..d495789b89db 100644 --- a/vectors/cryptography_vectors/KDF/rfc-6070-PBKDF2-SHA1.txt +++ b/vectors/cryptography_vectors/KDF/rfc-6070-PBKDF2-SHA1.txt @@ -1,4 +1,4 @@ -# PBKDF2 SHA1 vectors from http://www.ietf.org/rfc/rfc6070.txt +# PBKDF2 SHA1 vectors from https://www.ietf.org/rfc/rfc6070.txt COUNT = 0 PASSWORD = password diff --git a/vectors/cryptography_vectors/ciphers/Camellia/camellia-128-ecb.txt b/vectors/cryptography_vectors/ciphers/Camellia/camellia-128-ecb.txt index ec8c1a1f36af..56f56d8c38a3 100644 --- a/vectors/cryptography_vectors/ciphers/Camellia/camellia-128-ecb.txt +++ b/vectors/cryptography_vectors/ciphers/Camellia/camellia-128-ecb.txt @@ -1,4 +1,4 @@ -# Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ +# Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 128-bit key diff --git a/vectors/cryptography_vectors/ciphers/Camellia/camellia-192-ecb.txt b/vectors/cryptography_vectors/ciphers/Camellia/camellia-192-ecb.txt index b3e264355102..f54e9623f4c7 100644 --- a/vectors/cryptography_vectors/ciphers/Camellia/camellia-192-ecb.txt +++ b/vectors/cryptography_vectors/ciphers/Camellia/camellia-192-ecb.txt @@ -1,4 +1,4 @@ -# Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ +# Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 192-bit key diff --git a/vectors/cryptography_vectors/ciphers/Camellia/camellia-256-ecb.txt b/vectors/cryptography_vectors/ciphers/Camellia/camellia-256-ecb.txt index e28c089cd21d..b8400bd37f5b 100644 --- a/vectors/cryptography_vectors/ciphers/Camellia/camellia-256-ecb.txt +++ b/vectors/cryptography_vectors/ciphers/Camellia/camellia-256-ecb.txt @@ -1,4 +1,4 @@ -# Vectors taken from http://info.isl.ntt.co.jp/crypt/eng/camellia/ +# Vectors taken from https://info.isl.ntt.co.jp/crypt/eng/camellia/ # Download is t_camelia.txt # Camellia with 256-bit key diff --git a/vectors/cryptography_vectors/hashes/MD5/rfc-1321.txt b/vectors/cryptography_vectors/hashes/MD5/rfc-1321.txt index 1ca16a3c74e4..d3f10847bb4b 100644 --- a/vectors/cryptography_vectors/hashes/MD5/rfc-1321.txt +++ b/vectors/cryptography_vectors/hashes/MD5/rfc-1321.txt @@ -1,4 +1,4 @@ -# http://tools.ietf.org/html/rfc1321 +# https://tools.ietf.org/html/rfc1321 Len = 0 Msg = 00 From e57c63c34c285689e7b100a19612ec5d7c5b9fec Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 1 Jan 2019 17:11:33 -0600 Subject: [PATCH 504/988] add x448 private/public PEM/DER pkcs8/subjectpublickeyinfo vectors (#4667) --- docs/development/test-vectors.rst | 7 +++++++ .../asymmetric/X448/x448-pkcs8-enc.der | Bin 0 -> 174 bytes .../asymmetric/X448/x448-pkcs8-enc.pem | 6 ++++++ .../asymmetric/X448/x448-pkcs8.der | Bin 0 -> 72 bytes .../asymmetric/X448/x448-pkcs8.pem | 4 ++++ .../asymmetric/X448/x448-pub.der | Bin 0 -> 68 bytes .../asymmetric/X448/x448-pub.pem | 4 ++++ 7 files changed, 21 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.der create mode 100644 vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.pem create mode 100644 vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.der create mode 100644 vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.pem create mode 100644 vectors/cryptography_vectors/asymmetric/X448/x448-pub.der create mode 100644 vectors/cryptography_vectors/asymmetric/X448/x448-pub.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 9e26627b5621..eb9ba4b4e29d 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -104,6 +104,13 @@ Custom asymmetric vectors encoded in several of the PKCS12 custom vectors. * ``asymmetric/EC/compressed_points.txt`` - Contains compressed public points generated using OpenSSL. +* ``asymmetric/X448/x448-pkcs8-enc.pem`` and + ``asymmetric/X448/x448-pkcs8-enc.der`` contain an X448 key encrypted with + AES 256 CBC with the password ``password``. +* ``asymmetric/X448/x448-pkcs8.pem`` and ``asymmetric/X448/x448-pkcs8.der`` + contain an unencrypted X448 key. +* ``asymmetric/X448/x448-pub.pem`` and ``asymmetric/X448/x448-pub.der`` contain + an X448 public key. Key exchange diff --git a/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.der b/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.der new file mode 100644 index 0000000000000000000000000000000000000000..d576f17574cb15a8bdc0bf5e080694f9ce955beb GIT binary patch literal 174 zcmXqLTx}4}#;Mij(e|B}k(JlL%Rm#sGWd+U%^^9w+y)1l)Wl@g&u9Vfyc_UPcCf^(AZ1 zcrU&oD5q{0^kbirwr1Mw(~%3#PJ7?Dkd?ugwPNDRmmzPbtvjeL@pjf1?!%kz^ghxn S)R#61dG%`c61A(7eH#Hcus)Ii literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.pem b/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.pem new file mode 100644 index 000000000000..6e72dc4ebade --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8-enc.pem @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIGrMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAhfQQBzuXcjogICCAAw +DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEELhCu0RzKBjEmWe6F30A2cEEUI2y +J54COuDdt/4p1lT4gTwPuFKkqrhRP5JvygIdxG/M8nMNCZS5j2wXwvFVg7MlXV0u +r6ZCsUspfQmjqhagoHEMgWyee/b4gcJcRvg+y9HB +-----END ENCRYPTED PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.der b/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.der new file mode 100644 index 0000000000000000000000000000000000000000..d8cecc27bf6bbbf910b9997d645d9592b9c1f39b GIT binary patch literal 72 zcmV-O0Jr}zMgjory)pqDqm)8XrXf literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.pem b/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.pem new file mode 100644 index 000000000000..13603972614a --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X448/x448-pkcs8.pem @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEYCAQAwBQYDK2VvBDoEONAHJqfHUJRF6ws+5Bf6Q1WX0oTyi2kbu9Lo85mLCAEi +rLpN6PS/UUS+Tvm51RU5fNbrUjsPokqR +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/X448/x448-pub.der b/vectors/cryptography_vectors/asymmetric/X448/x448-pub.der new file mode 100644 index 0000000000000000000000000000000000000000..b7313caaf5ef92d56224d57cbf0f3d2d9859b667 GIT binary patch literal 68 zcmV-K0K5M%LNEme11n{3133WL)J%#lvRSEKat|d{K}n=m4(4i0A?r8VRvs8hTR0$9 aqnK`={jbR~kM4#EO|D|u{~$gKfY5?6^&2|? literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/X448/x448-pub.pem b/vectors/cryptography_vectors/asymmetric/X448/x448-pub.pem new file mode 100644 index 000000000000..9ccea2fbaa79 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X448/x448-pub.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MEIwBQYDK2VvAzkA2NRMii6yWalecg8lVUFJpFYO5mpLIes32lYeGElbOCBVo5hu +n/2vyTKP7oYJTa5i2f8gPguA0II= +-----END PUBLIC KEY----- From a2156b0b8e55259dc82b7d9fd55ce4215fae26b9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 1 Jan 2019 20:06:01 -0500 Subject: [PATCH 505/988] Don't try to linkcheck nist links for the time being (#4668) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 2264affd7217..39fa4f18661b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -181,4 +181,6 @@ linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL "https://info.isl.ntt.co.jp/crypt/eng/camellia/", + # Federal government shutdown, and the anti-deficiency act + r"^https://[\w\.]+?\.nist\.gov/.*", ] From e6f8d79ba4000e33cb022725e26762264654018b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 1 Jan 2019 20:46:13 -0500 Subject: [PATCH 506/988] Fixed anchor for URL (#4670) --- docs/hazmat/primitives/padding.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/padding.rst b/docs/hazmat/primitives/padding.rst index 245b554780fb..9581df88bd70 100644 --- a/docs/hazmat/primitives/padding.rst +++ b/docs/hazmat/primitives/padding.rst @@ -126,4 +126,4 @@ multiple of the block size. :raises ValueError: When trying to remove padding from incorrectly padded data. -.. _`ANSI X.923`: https://en.wikipedia.org/wiki/Padding_%28cryptography%29#ANSI_X.923 +.. _`ANSI X.923`: https://en.wikipedia.org/wiki/Padding_%28cryptography%29#ANSI_X9.23 From 042dce40fc12f6554ee22a96d7362fb22a2e39d8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 1 Jan 2019 21:26:00 -0500 Subject: [PATCH 507/988] Update URL to EFF (#4672) --- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 4924ddd6e398..21d12a385104 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -826,7 +826,7 @@ Exceptions .. _`recommends a 96-bit IV length`: https://csrc.nist.gov/publications/detail/sp/800-38d/final .. _`NIST SP-800-38D`: https://csrc.nist.gov/publications/detail/sp/800-38d/final .. _`Communications Security Establishment`: https://www.cse-cst.gc.ca -.. _`encrypt`: https://ssd.eff.org/en/module/what-encryption +.. _`encrypt`: https://ssd.eff.org/en/module/what-should-i-know-about-encryption .. _`CRYPTREC`: https://www.cryptrec.go.jp/english/ .. _`significant patterns in the output`: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29 .. _`International Data Encryption Algorithm`: https://en.wikipedia.org/wiki/International_Data_Encryption_Algorithm From 3d9b2640d764fba5001d21582b76823927d1b6fb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 2 Jan 2019 13:00:21 -0500 Subject: [PATCH 508/988] Use the contents of the ecrypt docs from the University website (#4673) --- docs/hazmat/primitives/asymmetric/dsa.rst | 2 +- docs/hazmat/primitives/asymmetric/ec.rst | 2 +- docs/hazmat/primitives/asymmetric/rsa.rst | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index 9da7273e386e..7b0598693f3c 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -444,4 +444,4 @@ Key interfaces .. _`DSA`: https://en.wikipedia.org/wiki/Digital_Signature_Algorithm .. _`public-key`: https://en.wikipedia.org/wiki/Public-key_cryptography .. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final -.. _`at least 2048`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf +.. _`at least 2048`: https://www.cosic.esat.kuleuven.be/ecrypt/ecrypt2/documents/D.SPA.20.pdf diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 168cdfd8e287..bd618551fc31 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -918,7 +918,7 @@ Elliptic Curve Object Identifiers .. _`800-56A`: https://csrc.nist.gov/publications/detail/sp/800-56a/revised/archive/2007-03-14 .. _`800-56Ar2`: https://csrc.nist.gov/publications/detail/sp/800-56a/rev-2/final .. _`some concern`: https://crypto.stackexchange.com/questions/10263/should-we-trust-the-nist-recommended-ecc-parameters -.. _`less than 224 bits`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf +.. _`less than 224 bits`: https://www.cosic.esat.kuleuven.be/ecrypt/ecrypt2/documents/D.SPA.20.pdf .. _`elliptic curve diffie-hellman is faster than diffie-hellman`: https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1100&context=cseconfwork .. _`minimize the number of security concerns for elliptic-curve cryptography`: https://cr.yp.to/ecdh/curve25519-20060209.pdf .. _`SafeCurves`: https://safecurves.cr.yp.to/ diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index fee51153131f..dab909646795 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -720,7 +720,7 @@ Key interfaces .. _`public-key`: https://en.wikipedia.org/wiki/Public-key_cryptography .. _`specific mathematical properties`: https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Key_generation .. _`use 65537`: https://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html -.. _`at least 2048`: http://www.ecrypt.eu.org/ecrypt2/documents/D.SPA.20.pdf +.. _`at least 2048`: https://www.cosic.esat.kuleuven.be/ecrypt/ecrypt2/documents/D.SPA.20.pdf .. _`OpenPGP`: https://en.wikipedia.org/wiki/Pretty_Good_Privacy .. _`Chinese Remainder Theorem`: https://en.wikipedia.org/wiki/RSA_%28cryptosystem%29#Using_the_Chinese_remainder_algorithm .. _`security proof`: https://eprint.iacr.org/2001/062.pdf From 90a557764542f2d939a8b0a61c74b299870fca6c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 2 Jan 2019 21:18:25 -0500 Subject: [PATCH 509/988] Another HTTPS (#4674) --- vectors/cryptography_vectors/hashes/ripemd160/ripevectors.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vectors/cryptography_vectors/hashes/ripemd160/ripevectors.txt b/vectors/cryptography_vectors/hashes/ripemd160/ripevectors.txt index 4f880023f1e5..fd1e2dd7c82e 100644 --- a/vectors/cryptography_vectors/hashes/ripemd160/ripevectors.txt +++ b/vectors/cryptography_vectors/hashes/ripemd160/ripevectors.txt @@ -1,4 +1,4 @@ -# from the RIPEMD homepage: http://homes.esat.kuleuven.be/~bosselae/ripemd160.html +# from the RIPEMD homepage: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html # formatted to use the hash loader Len = 0 From 60f264b0f293bfded7a0b4395715669d355a6185 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 10 Jan 2019 15:37:03 -0800 Subject: [PATCH 510/988] add signature_hash_algorithm to OCSPResponse (#4681) * add signature_hash_algorithm to OCSPResponse * fix pointless asserts --- CHANGELOG.rst | 2 + docs/development/test-vectors.rst | 2 + docs/x509/ocsp.rst | 10 ++++ .../hazmat/backends/openssl/ocsp.py | 11 ++++ src/cryptography/x509/ocsp.py | 6 +++ tests/x509/test_ocsp.py | 50 +++++++++++------- .../x509/ocsp/resp-invalid-signature-oid.der | Bin 0 -> 527 bytes 7 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-invalid-signature-oid.der diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 191d8042b1f4..42772af0e9dd 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -35,6 +35,8 @@ Changelog which immediately checks if the point is on the curve and supports compressed points. Deprecated the previous method :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicNumbers.from_encoded_point`. +* Added :attr:`~cryptography.x509.ocsp.OCSPResponse.signature_hash_algorithm` + to ``OCSPResponse``. .. _v2-4-2: diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index eb9ba4b4e29d..a10125ac88f3 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -471,6 +471,8 @@ X.509 OCSP Test Vectors revocation reason. * ``x509/ocsp/resp-revoked-no-next-update.der`` - An OCSP response that contains a revoked certificate and no ``nextUpdate`` value. +* ``x509/ocsp/resp-invalid-signature-oid.der`` - An OCSP response that was + modified to contain an MD2 signature algorithm object identifier. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 535ffddac29c..d3815d6f3a32 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -426,6 +426,16 @@ Interfaces :raises ValueError: If ``response_status`` is not :class:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL`. + .. attribute:: signature_hash_algorithm + + .. versionadded:: 2.5 + + :type: :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + + Returns the + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` which + was used in signing this response. + .. attribute:: signature :type: bytes diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 32e26a0a290c..16dbbc2ae0a9 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -126,6 +126,17 @@ def signature_algorithm_oid(self): oid = _obj2txt(self._backend, alg.algorithm) return x509.ObjectIdentifier(oid) + @property + @_requires_successful_response + def signature_hash_algorithm(self): + oid = self.signature_algorithm_oid + try: + return x509._SIG_OIDS_TO_HASH[oid] + except KeyError: + raise UnsupportedAlgorithm( + "Signature algorithm OID:{0} not recognized".format(oid) + ) + @property @_requires_successful_response def signature(self): diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 2b0b1dc3cc49..97933b1fc137 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -314,6 +314,12 @@ def signature_algorithm_oid(self): The ObjectIdentifier of the signature algorithm """ + @abc.abstractproperty + def signature_hash_algorithm(self): + """ + Returns a HashAlgorithm corresponding to the type of the digest signed + """ + @abc.abstractproperty def signature(self): """ diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index fad48dab84be..3abaff506a8a 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -583,6 +583,7 @@ def test_load_response(self): assert resp.response_status == ocsp.OCSPResponseStatus.SUCCESSFUL assert (resp.signature_algorithm_oid == x509.SignatureAlgorithmOID.RSA_WITH_SHA256) + assert isinstance(resp.signature_hash_algorithm, hashes.SHA256) assert resp.signature == base64.b64decode( b"I9KUlyLV/2LbNCVu1BQphxdNlU/jBzXsPYVscPjW5E93pCrSO84GkIWoOJtqsnt" b"78DLcQPnF3W24NXGzSGKlSWfXIsyoXCxnBm0mIbD5ZMnKyXEnqSR33Z9He/A+ML" @@ -602,7 +603,7 @@ def test_load_response(self): resp.signature, resp.tbs_response_bytes, PKCS1v15(), - hashes.SHA256() + resp.signature_hash_algorithm ) assert resp.certificates == [] assert resp.responder_key_hash is None @@ -630,39 +631,41 @@ def test_load_unauthorized(self): ) assert resp.response_status == ocsp.OCSPResponseStatus.UNAUTHORIZED with pytest.raises(ValueError): - assert resp.signature_algorithm_oid + resp.signature_algorithm_oid with pytest.raises(ValueError): - assert resp.signature + resp.signature_hash_algorithm with pytest.raises(ValueError): - assert resp.tbs_response_bytes + resp.signature with pytest.raises(ValueError): - assert resp.certificates + resp.tbs_response_bytes with pytest.raises(ValueError): - assert resp.responder_key_hash + resp.certificates with pytest.raises(ValueError): - assert resp.responder_name + resp.responder_key_hash with pytest.raises(ValueError): - assert resp.produced_at + resp.responder_name with pytest.raises(ValueError): - assert resp.certificate_status + resp.produced_at with pytest.raises(ValueError): - assert resp.revocation_time + resp.certificate_status with pytest.raises(ValueError): - assert resp.revocation_reason + resp.revocation_time with pytest.raises(ValueError): - assert resp.this_update + resp.revocation_reason with pytest.raises(ValueError): - assert resp.next_update + resp.this_update with pytest.raises(ValueError): - assert resp.issuer_key_hash + resp.next_update with pytest.raises(ValueError): - assert resp.issuer_name_hash + resp.issuer_key_hash with pytest.raises(ValueError): - assert resp.hash_algorithm + resp.issuer_name_hash with pytest.raises(ValueError): - assert resp.serial_number + resp.hash_algorithm with pytest.raises(ValueError): - assert resp.extensions + resp.serial_number + with pytest.raises(ValueError): + resp.extensions def test_load_revoked(self): resp = _load_data( @@ -684,6 +687,17 @@ def test_load_delegate_unknown_cert(self): assert isinstance(resp.certificates[0], x509.Certificate) assert resp.certificate_status == ocsp.OCSPCertStatus.UNKNOWN + def test_load_invalid_signature_oid(self): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-invalid-signature-oid.der"), + ocsp.load_der_ocsp_response, + ) + assert resp.signature_algorithm_oid == x509.ObjectIdentifier( + "1.2.840.113549.1.1.2" + ) + with pytest.raises(UnsupportedAlgorithm): + resp.signature_hash_algorithm + def test_load_responder_key_hash(self): resp = _load_data( os.path.join("x509", "ocsp", "resp-responder-key-hash.der"), diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-invalid-signature-oid.der b/vectors/cryptography_vectors/x509/ocsp/resp-invalid-signature-oid.der new file mode 100644 index 0000000000000000000000000000000000000000..e2c7dd87690162b1bc894d7b8b4c1fefcfe030ba GIT binary patch literal 527 zcmXqLV&djvWLVI|#A49I#K6X>&Bn;e%5K2O$kN34(V&U(twH0pg+2yehTI06Y|No7 zY{E>T!G>Z6A|MWzFt1N)iF&buYhH3uWkHFdvVkHk5n6S(~b>KN#I{_<8hh?hez!%^pchJ=3o% zommm1lg^f_rnuo}%E?nF3)NSul;552Uj4z&V1rHLuERlEZYIBUs*W$8uvFdZqQ@D> z^|xT%X^wgKxueI89<}a?M^5FRJH-dMQ>L%;f8g}>I wi+giW+T4Av&a;i@UjMOv!mudq-nY9U4%1h@e;^imGC*AN_Kb&{_wob)0AS?G2LJ#7 literal 0 HcmV?d00001 From 19b5d248f2122ace443d2d3596f9dd14f78a4d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Fri, 11 Jan 2019 18:46:16 +0100 Subject: [PATCH 511/988] Add bindings to get SRTP protection profile (#4679) This adds the ability to retrieve the selected SRTP protection profile after the DTLS handshake completes. This is needed to perform the correct key derivation if multiple profiles were offered. --- src/_cffi_src/openssl/ssl.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 82639a5d6bcf..2218095cca9b 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -154,6 +154,11 @@ typedef ... SSL_CIPHER; typedef ... Cryptography_STACK_OF_SSL_CIPHER; typedef ... COMP_METHOD; + +typedef struct { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; """ FUNCTIONS = """ @@ -423,6 +428,7 @@ int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *, const char *); int SSL_set_tlsext_use_srtp(SSL *, const char *); +SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *); long SSL_session_reused(SSL *); From 9b198104db8b53178212b5849919b6a61ca794ab Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 12 Jan 2019 12:47:05 -0500 Subject: [PATCH 512/988] Fixes #4683 -- fixed linux kernel version that has getrandom (#4684) --- docs/hazmat/backends/openssl.rst | 2 +- src/_cffi_src/openssl/src/osrandom_engine.c | 2 +- src/_cffi_src/openssl/src/osrandom_engine.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/backends/openssl.rst b/docs/hazmat/backends/openssl.rst index 52aeeafb57ab..07ae74a27469 100644 --- a/docs/hazmat/backends/openssl.rst +++ b/docs/hazmat/backends/openssl.rst @@ -106,7 +106,7 @@ seeded from the same pool as ``/dev/random``. +------------------------------------------+------------------------------+ | Windows | ``CryptGenRandom()`` | +------------------------------------------+------------------------------+ -| Linux >= 3.4.17 with working | ``getrandom(GRND_NONBLOCK)`` | +| Linux >= 3.17 with working | ``getrandom(GRND_NONBLOCK)`` | | ``SYS_getrandom`` syscall | | +------------------------------------------+------------------------------+ | OpenBSD >= 5.6 | ``getentropy()`` | diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 315d5f1f7a90..697381c853d9 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -4,7 +4,7 @@ * macOS >= 10.12 getentropy() * OpenBSD 5.6+ getentropy() * other BSD getentropy() if SYS_getentropy is defined - * Linux 3.4.17+ getrandom() with fallback to /dev/urandom + * Linux 3.17+ getrandom() with fallback to /dev/urandom * other /dev/urandom with cached fd * * The /dev/urandom, getrandom and getentropy code is derived from Python's diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index e7a55c5eefc6..53f957fa6f18 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -41,7 +41,7 @@ * to urandom */ #define CRYPTOGRAPHY_OSRANDOM_ENGINE CRYPTOGRAPHY_OSRANDOM_ENGINE_GETENTROPY #elif defined(__linux__) && defined(SYS_getrandom) - /* Linux 3.4.17+ */ + /* Linux 3.17+ */ #define CRYPTOGRAPHY_OSRANDOM_ENGINE CRYPTOGRAPHY_OSRANDOM_ENGINE_GETRANDOM #else /* Keep this as last entry, fall back to /dev/urandom */ From dbcbffa06c9930a687010ca816596ca3f5cc78e9 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 12 Jan 2019 21:18:21 -0800 Subject: [PATCH 513/988] support x448 public/private serialization both raw and pkcs8 (#4653) * support x448 public/private serialization both raw and pkcs8 * add tests for all other asym key types to prevent Raw * more tests * better tests * fix a test * funny story, I'm actually illiterate. * pep8 * require PrivateFormat.Raw or PublicFormat.Raw with Encoding.Raw * missing docs * parametrize * docs fixes * remove dupe line * assert something --- .../primitives/asymmetric/serialization.rst | 33 +++++- docs/hazmat/primitives/asymmetric/x448.rst | 82 +++++++++++++- .../hazmat/backends/openssl/backend.py | 28 ++++- .../hazmat/backends/openssl/x448.py | 73 +++++++++++- .../hazmat/primitives/asymmetric/x448.py | 10 +- .../hazmat/primitives/serialization/base.py | 3 + tests/hazmat/primitives/test_dh.py | 31 +++++ tests/hazmat/primitives/test_dsa.py | 29 +++++ tests/hazmat/primitives/test_ec.py | 28 +++++ tests/hazmat/primitives/test_rsa.py | 26 +++++ tests/hazmat/primitives/test_serialization.py | 68 ++++++++++- tests/hazmat/primitives/test_x448.py | 107 ++++++++++++++++-- 12 files changed, 497 insertions(+), 21 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 7b3fb1d69ebe..04bc705a4855 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -473,6 +473,13 @@ Serialization Formats ... -----END PRIVATE KEY----- + .. attribute:: Raw + + .. versionadded:: 2.5 + + A raw format used by :doc:`/hazmat/primitives/asymmetric/x448`. It is a + binary format and is invalid for other key types. + .. class:: PublicFormat .. versionadded:: 0.8 @@ -516,6 +523,13 @@ Serialization Formats The public key format used by OpenSSH (e.g. as found in ``~/.ssh/id_rsa.pub`` or ``~/.ssh/authorized_keys``). + .. attribute:: Raw + + .. versionadded:: 2.5 + + A raw format used by :doc:`/hazmat/primitives/asymmetric/x448`. It is a + binary format and is invalid for other key types. + .. class:: ParameterFormat .. versionadded:: 2.0 @@ -538,14 +552,16 @@ Serialization Encodings :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKeyWithSerialization` , :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKeyWithSerialization` - , :class:`~cryptography.hazmat.primitives.asymmetric.dh.DHPrivateKeyWithSerialization` + , :class:`~cryptography.hazmat.primitives.asymmetric.dh.DHPrivateKeyWithSerialization`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKeyWithSerialization`, and - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKeyWithSerialization` + :class:`~cryptography.hazmat.primitives.asymmetric.x448.X448PrivateKey` as well as ``public_bytes`` on - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKeyWithSerialization`, - :class:`~cryptography.hazmat.primitives.asymmetric.dh.DHPublicKeyWithSerialization` + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dh.DHPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`, and - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKeyWithSerialization`. + :class:`~cryptography.hazmat.primitives.asymmetric.x448.X448PublicKey`. .. attribute:: PEM @@ -565,6 +581,13 @@ Serialization Encodings The format used by OpenSSH public keys. This is a text format. + .. attribute:: Raw + + .. versionadded:: 2.5 + + A raw format used by :doc:`/hazmat/primitives/asymmetric/x448`. It is a + binary format and is invalid for other key types. + Serialization Encryption Types ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/hazmat/primitives/asymmetric/x448.rst b/docs/hazmat/primitives/asymmetric/x448.rst index 057b7b50a2c3..9b00c6afef5a 100644 --- a/docs/hazmat/primitives/asymmetric/x448.rst +++ b/docs/hazmat/primitives/asymmetric/x448.rst @@ -66,6 +66,24 @@ Key interfaces :returns: :class:`X448PrivateKey` + .. classmethod:: from_private_bytes(data) + + :param bytes data: 56 byte private key. + + :returns: :class:`X448PrivateKey` + + .. doctest:: + + >>> from cryptography.hazmat.primitives import serialization + >>> from cryptography.hazmat.primitives.asymmetric import x448 + >>> private_key = x448.X448PrivateKey.generate() + >>> private_bytes = private_key.private_bytes( + ... encoding=serialization.Encoding.Raw, + ... format=serialization.PrivateFormat.Raw, + ... encryption_algorithm=serialization.NoEncryption() + ... ) + >>> loaded_private_key = x448.X448PrivateKey.from_private_bytes(private_bytes) + .. method:: public_key() :returns: :class:`X448PublicKey` @@ -77,6 +95,36 @@ Key interfaces :returns bytes: A shared key. + .. method:: private_bytes(encoding, format, encryption_algorithm) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8` + or + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PrivateFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`. + + :param encryption_algorithm: An instance of an object conforming to the + :class:`~cryptography.hazmat.primitives.serialization.KeySerializationEncryption` + interface. + + :return bytes: Serialized key. + .. class:: X448PublicKey .. versionadded:: 2.5 @@ -89,15 +137,41 @@ Key interfaces .. doctest:: + >>> from cryptography.hazmat.primitives import serialization >>> from cryptography.hazmat.primitives.asymmetric import x448 >>> private_key = x448.X448PrivateKey.generate() >>> public_key = private_key.public_key() - >>> public_bytes = public_key.public_bytes() + >>> public_bytes = public_key.public_bytes( + ... encoding=serialization.Encoding.Raw, + ... format=serialization.PublicFormat.Raw + ... ) >>> loaded_public_key = x448.X448PublicKey.from_public_bytes(public_bytes) - .. method:: public_bytes() - - :returns bytes: The raw bytes of the public key. + .. method:: public_bytes(encoding, format) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo` + or + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PublicFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`. + + :returns bytes: The public key bytes. .. _`Diffie-Hellman key exchange`: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index cfe146f26ed7..ecebe7b8356a 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -508,6 +508,9 @@ def _evp_pkey_to_private_key(self, evp_pkey): self.openssl_assert(dh_cdata != self._ffi.NULL) dh_cdata = self._ffi.gc(dh_cdata, self._lib.DH_free) return _DHPrivateKey(self, dh_cdata, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): + # EVP_PKEY_X448 is not present in OpenSSL < 1.1.1 + return _X448PrivateKey(self, evp_pkey) else: raise UnsupportedAlgorithm("Unsupported key type.") @@ -539,6 +542,9 @@ def _evp_pkey_to_public_key(self, evp_pkey): self.openssl_assert(dh_cdata != self._ffi.NULL) dh_cdata = self._ffi.gc(dh_cdata, self._lib.DH_free) return _DHPublicKey(self, dh_cdata, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): + # EVP_PKEY_X448 is not present in OpenSSL < 1.1.1 + return _X448PublicKey(self, evp_pkey) else: raise UnsupportedAlgorithm("Unsupported key type.") @@ -1678,6 +1684,16 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, "format must be an item from the PrivateFormat enum" ) + # Raw format and encoding are only valid for X25519, Ed25519, X448, and + # Ed448 keys. We capture those cases before this method is called so if + # we see those enum values here it means the caller has passed them to + # a key that doesn't support raw type + if format is serialization.PrivateFormat.Raw: + raise ValueError("raw format is invalid with this key or encoding") + + if encoding is serialization.Encoding.Raw: + raise ValueError("raw encoding is invalid with this key or format") + if not isinstance(encryption_algorithm, serialization.KeySerializationEncryption): raise TypeError( @@ -1737,7 +1753,7 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, write_bio = self._lib.i2d_PKCS8PrivateKey_bio key = evp_pkey else: - raise TypeError("encoding must be an item from the Encoding enum") + raise TypeError("encoding must be Encoding.PEM or Encoding.DER") bio = self._create_mem_bio_gc() res = write_bio( @@ -1770,6 +1786,16 @@ def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): if not isinstance(encoding, serialization.Encoding): raise TypeError("encoding must be an item from the Encoding enum") + # Raw format and encoding are only valid for X25519, Ed25519, X448, and + # Ed448 keys. We capture those cases before this method is called so if + # we see those enum values here it means the caller has passed them to + # a key that doesn't support raw type + if format is serialization.PublicFormat.Raw: + raise ValueError("raw format is invalid with this key or encoding") + + if encoding is serialization.Encoding.Raw: + raise ValueError("raw encoding is invalid with this key or format") + if ( format is serialization.PublicFormat.OpenSSH or encoding is serialization.Encoding.OpenSSH diff --git a/src/cryptography/hazmat/backends/openssl/x448.py b/src/cryptography/hazmat/backends/openssl/x448.py index a10aa82176a2..3792fd795e82 100644 --- a/src/cryptography/hazmat/backends/openssl/x448.py +++ b/src/cryptography/hazmat/backends/openssl/x448.py @@ -6,11 +6,15 @@ from cryptography import utils from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive +from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x448 import ( X448PrivateKey, X448PublicKey ) _X448_KEY_SIZE = 56 +_PEM_DER = ( + serialization.Encoding.PEM, serialization.Encoding.DER +) @utils.register_interface(X448PublicKey) @@ -19,7 +23,35 @@ def __init__(self, backend, evp_pkey): self._backend = backend self._evp_pkey = evp_pkey - def public_bytes(self): + def public_bytes(self, encoding, format): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + encoding is not serialization.Encoding.Raw or + format is not serialization.PublicFormat.Raw + ): + raise ValueError( + "When using Raw both encoding and format must be Raw" + ) + + return self._raw_public_bytes() + + if ( + encoding in _PEM_DER and + format is not serialization.PublicFormat.SubjectPublicKeyInfo + ): + raise ValueError( + "format must be SubjectPublicKeyInfo when encoding is PEM or " + "DER" + ) + + return self._backend._public_key_bytes( + encoding, format, self, self._evp_pkey, None + ) + + def _raw_public_bytes(self): buf = self._backend._ffi.new("unsigned char []", _X448_KEY_SIZE) buflen = self._backend._ffi.new("size_t *", _X448_KEY_SIZE) res = self._backend._lib.EVP_PKEY_get_raw_public_key( @@ -53,3 +85,42 @@ def exchange(self, peer_public_key): return _evp_pkey_derive( self._backend, self._evp_pkey, peer_public_key ) + + def private_bytes(self, encoding, format, encryption_algorithm): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + format is not serialization.PrivateFormat.Raw or + encoding is not serialization.Encoding.Raw or not + isinstance(encryption_algorithm, serialization.NoEncryption) + ): + raise ValueError( + "When using Raw both encoding and format must be Raw " + "and encryption_algorithm must be NoEncryption" + ) + + return self._raw_private_bytes() + + if ( + encoding in _PEM_DER and + format is not serialization.PrivateFormat.PKCS8 + ): + raise ValueError( + "format must be PKCS8 when encoding is PEM or DER" + ) + + return self._backend._private_key_bytes( + encoding, format, encryption_algorithm, self._evp_pkey, None + ) + + def _raw_private_bytes(self): + buf = self._backend._ffi.new("unsigned char []", _X448_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _X448_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_private_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _X448_KEY_SIZE) + return self._backend._ffi.buffer(buf, _X448_KEY_SIZE)[:] diff --git a/src/cryptography/hazmat/primitives/asymmetric/x448.py b/src/cryptography/hazmat/primitives/asymmetric/x448.py index 69bfa408f6d1..992ec0fd68e3 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x448.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x448.py @@ -25,7 +25,7 @@ def from_public_bytes(cls, data): return backend.x448_load_public_bytes(data) @abc.abstractmethod - def public_bytes(self): + def public_bytes(self, encoding, format): """ The serialized bytes of the public key. """ @@ -44,7 +44,7 @@ def generate(cls): return backend.x448_generate_key() @classmethod - def _from_private_bytes(cls, data): + def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend return backend.x448_load_private_bytes(data) @@ -54,6 +54,12 @@ def public_key(self): The serialized bytes of the public key. """ + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + The serialized bytes of the private key. + """ + @abc.abstractmethod def exchange(self, peer_public_key): """ diff --git a/src/cryptography/hazmat/primitives/serialization/base.py b/src/cryptography/hazmat/primitives/serialization/base.py index 5dd0c63979ef..1670fd18b660 100644 --- a/src/cryptography/hazmat/primitives/serialization/base.py +++ b/src/cryptography/hazmat/primitives/serialization/base.py @@ -40,17 +40,20 @@ class Encoding(Enum): PEM = "PEM" DER = "DER" OpenSSH = "OpenSSH" + Raw = "Raw" class PrivateFormat(Enum): PKCS8 = "PKCS8" TraditionalOpenSSL = "TraditionalOpenSSL" + Raw = "Raw" class PublicFormat(Enum): SubjectPublicKeyInfo = "X.509 subjectPublicKeyInfo with PKCS#1" PKCS1 = "Raw PKCS#1" OpenSSH = "OpenSSH" + Raw = "Raw" class ParameterFormat(Enum): diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index a70ae745c148..c63e520f8d07 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -424,6 +424,20 @@ def test_private_bytes_unencrypted(self, backend, encoding, priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), + (serialization.Encoding.DER, serialization.PrivateFormat.Raw), + (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + ] + ) + def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + parameters = dh.generate_parameters(2, 512, backend) + key = parameters.generate_private_key() + with pytest.raises(ValueError): + key.private_bytes(encoding, fmt, serialization.NoEncryption()) + @pytest.mark.parametrize( ("key_path", "loader_func", "encoding", "is_dhx"), [ @@ -806,6 +820,23 @@ def test_public_bytes_values(self, param_path, loader_func, else: assert parameter_numbers.q is None + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PublicFormat.Raw), + (serialization.Encoding.PEM, serialization.PublicFormat.Raw), + ( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ), + ] + ) + def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + parameters = dh.generate_parameters(2, 512, backend) + key = parameters.generate_private_key().public_key() + with pytest.raises(ValueError): + key.public_bytes(encoding, fmt) + def test_parameter_bytes_invalid_encoding(self, backend): parameters = dh.generate_parameters(2, 512, backend) with pytest.raises(TypeError): diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index fb415732d287..5d2f1bd8d704 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -713,6 +713,19 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), + (serialization.Encoding.DER, serialization.PrivateFormat.Raw), + (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + ] + ) + def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + key = DSA_KEY_1024.private_key(backend) + with pytest.raises(ValueError): + key.private_bytes(encoding, fmt, serialization.NoEncryption()) + @pytest.mark.parametrize( ("fmt", "password"), [ @@ -951,3 +964,19 @@ def test_public_bytes_pkcs1_unsupported(self, backend): key.public_bytes( serialization.Encoding.PEM, serialization.PublicFormat.PKCS1 ) + + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PublicFormat.Raw), + (serialization.Encoding.PEM, serialization.PublicFormat.Raw), + ( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ), + ] + ) + def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + key = DSA_KEY_2048.private_key(backend).public_key() + with pytest.raises(ValueError): + key.public_bytes(encoding, fmt) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index f883d0653ea9..830d89a0a57b 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -705,6 +705,20 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), + (serialization.Encoding.DER, serialization.PrivateFormat.Raw), + (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + ] + ) + def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + _skip_curve_unsupported(backend, ec.SECP256R1()) + key = ec.generate_private_key(ec.SECP256R1(), backend) + with pytest.raises(ValueError): + key.private_bytes(encoding, fmt, serialization.NoEncryption()) + @pytest.mark.parametrize( ("fmt", "password"), [ @@ -985,6 +999,20 @@ def test_public_bytes_invalid_encoding(self, backend): serialization.PublicFormat.SubjectPublicKeyInfo ) + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PublicFormat.Raw), + (serialization.Encoding.PEM, serialization.PublicFormat.Raw), + (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), + ] + ) + def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + _skip_curve_unsupported(backend, ec.SECP256R1()) + key = ec.generate_private_key(ec.SECP256R1(), backend).public_key() + with pytest.raises(ValueError): + key.public_bytes(encoding, fmt) + def test_public_bytes_invalid_format(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) key = load_vectors_from_file( diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 268ee9d92f40..0c25bdbbec7d 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -2061,6 +2061,19 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), + (serialization.Encoding.DER, serialization.PrivateFormat.Raw), + (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + ] + ) + def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + key = RSA_KEY_2048.private_key(backend) + with pytest.raises(ValueError): + key.private_bytes(encoding, fmt, serialization.NoEncryption()) + @pytest.mark.parametrize( ("fmt", "password"), [ @@ -2286,3 +2299,16 @@ def test_public_bytes_invalid_format(self, backend): key = RSA_KEY_2048.private_key(backend).public_key() with pytest.raises(TypeError): key.public_bytes(serialization.Encoding.PEM, "invalidformat") + + @pytest.mark.parametrize( + ("encoding", "fmt"), + [ + (serialization.Encoding.Raw, serialization.PublicFormat.Raw), + (serialization.Encoding.PEM, serialization.PublicFormat.Raw), + (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), + ] + ) + def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + key = RSA_KEY_2048.private_key(backend).public_key() + with pytest.raises(ValueError): + key.public_bytes(encoding, fmt) diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index a7355221e747..81d372fc70ee 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -18,7 +18,9 @@ ) from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa from cryptography.hazmat.primitives.serialization import ( - BestAvailableEncryption, load_der_parameters, load_der_private_key, + BestAvailableEncryption, Encoding, NoEncryption, + PrivateFormat, PublicFormat, + load_der_parameters, load_der_private_key, load_der_public_key, load_pem_parameters, load_pem_private_key, load_pem_public_key, load_ssh_public_key ) @@ -1231,3 +1233,67 @@ def test_non_bytes_password(self): def test_encryption_with_zero_length_password(self): with pytest.raises(ValueError): BestAvailableEncryption(b"") + + +@pytest.mark.supported( + only_if=lambda backend: backend.x448_supported(), + skip_message="Requires OpenSSL with X448 support" +) +class TestX448Serialization(object): + def test_load_der_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "X448", "x448-pkcs8-enc.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "X448", "x448-pkcs8.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + key = load_der_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.DER, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + def test_load_pem_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "X448", "x448-pkcs8-enc.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "X448", "x448-pkcs8.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + key = load_pem_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.PEM, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + @pytest.mark.parametrize( + ("key_path", "encoding", "loader"), + [ + ( + ["X448", "x448-pub.pem"], + Encoding.PEM, + load_pem_public_key + ), + ( + ["X448", "x448-pub.der"], + Encoding.DER, + load_der_public_key + ), + ] + ) + def test_load_public_key(self, key_path, encoding, loader, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda pemfile: pemfile.read(), + mode="rb" + ) + public_key = loader(data, backend) + assert public_key.public_bytes( + encoding, PublicFormat.SubjectPublicKeyInfo + ) == data diff --git a/tests/hazmat/primitives/test_x448.py b/tests/hazmat/primitives/test_x448.py index 71b25341e26b..1833b03d81c7 100644 --- a/tests/hazmat/primitives/test_x448.py +++ b/tests/hazmat/primitives/test_x448.py @@ -11,6 +11,7 @@ from cryptography.exceptions import _Reasons from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x448 import ( X448PrivateKey, X448PublicKey ) @@ -50,7 +51,7 @@ def test_rfc7748(self, vector, backend): private = binascii.unhexlify(vector["input_scalar"]) public = binascii.unhexlify(vector["input_u"]) shared_key = binascii.unhexlify(vector["output_u"]) - private_key = X448PrivateKey._from_private_bytes(private) + private_key = X448PrivateKey.from_private_bytes(private) public_key = X448PublicKey.from_public_bytes(public) computed_shared_key = private_key.exchange(public_key) assert computed_shared_key == shared_key @@ -64,11 +65,11 @@ def test_rfc7748_1000_iteration(self, backend): b"aa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4" b"af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38" ) - private_key = X448PrivateKey._from_private_bytes(private) + private_key = X448PrivateKey.from_private_bytes(private) public_key = X448PublicKey.from_public_bytes(public) for _ in range(1000): computed_shared_key = private_key.exchange(public_key) - private_key = X448PrivateKey._from_private_bytes( + private_key = X448PrivateKey.from_private_bytes( computed_shared_key ) public_key = X448PublicKey.from_public_bytes(old_private) @@ -103,11 +104,60 @@ def test_rfc7748_1000_iteration(self, backend): ) ] ) - def test_public_bytes(self, private_bytes, public_bytes, backend): - private_key = X448PrivateKey._from_private_bytes(private_bytes) - assert private_key.public_key().public_bytes() == public_bytes + def test_pub_priv_bytes_raw(self, private_bytes, public_bytes, backend): + private_key = X448PrivateKey.from_private_bytes(private_bytes) + assert private_key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == private_bytes + assert private_key.public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == public_bytes public_key = X448PublicKey.from_public_bytes(public_bytes) - assert public_key.public_bytes() == public_bytes + assert public_key.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == public_bytes + + @pytest.mark.parametrize( + ("encoding", "fmt", "encryption", "passwd", "load_func"), + [ + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_der_private_key + ), + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_der_private_key + ), + ] + ) + def test_round_trip_private_serialization(self, encoding, fmt, encryption, + passwd, load_func, backend): + key = X448PrivateKey.generate() + serialized = key.private_bytes(encoding, fmt, encryption) + loaded_key = load_func(serialized, passwd, backend) + assert isinstance(loaded_key, X448PrivateKey) def test_generate(self, backend): key = X448PrivateKey.generate() @@ -125,3 +175,46 @@ def test_invalid_length_from_public_bytes(self, backend): with pytest.raises(ValueError): X448PublicKey.from_public_bytes(b"a" * 57) + + def test_invalid_private_bytes(self, backend): + key = X448PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.PKCS8, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.PEM, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) + + def test_invalid_public_bytes(self, backend): + key = X448PrivateKey.generate().public_key() + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.PKCS1 + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.Raw + ) From 638ab4ac77d75076ebf10013e1e7d1ec63cd0796 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 13 Jan 2019 10:09:38 -0800 Subject: [PATCH 514/988] add x25519 pkcs8/subjectpublickeyinfo vectors (#4685) --- docs/development/test-vectors.rst | 7 +++++++ .../asymmetric/X25519/x25519-pkcs8-enc.der | Bin 0 -> 158 bytes .../asymmetric/X25519/x25519-pkcs8-enc.pem | 6 ++++++ .../asymmetric/X25519/x25519-pkcs8.der | Bin 0 -> 48 bytes .../asymmetric/X25519/x25519-pkcs8.pem | 3 +++ .../asymmetric/X25519/x25519-pub.der | Bin 0 -> 44 bytes .../asymmetric/X25519/x25519-pub.pem | 3 +++ 7 files changed, 19 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.der create mode 100644 vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.pem create mode 100644 vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.der create mode 100644 vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.pem create mode 100644 vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.der create mode 100644 vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index a10125ac88f3..2b043744b5f5 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -111,6 +111,13 @@ Custom asymmetric vectors contain an unencrypted X448 key. * ``asymmetric/X448/x448-pub.pem`` and ``asymmetric/X448/x448-pub.der`` contain an X448 public key. +* ``asymmetric/X25519/x25519-pkcs8-enc.pem`` and + ``asymmetric/X25519/x25519-pkcs8-enc.der`` contain an X25519 key encrypted + with AES 256 CBC with the password ``password``. +* ``asymmetric/X25519/x25519-pkcs8.pem`` and + ``asymmetric/X25519/x25519-pkcs8.der`` contain an unencrypted X25519 key. +* ``asymmetric/X25519/x25519-pub.pem`` and ``asymmetric/X25519/x25519-pub.der`` + contain an X25519 public key. Key exchange diff --git a/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.der b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.der new file mode 100644 index 0000000000000000000000000000000000000000..6ccb9c68f7fe3a675f350ede80d2555c4d7106f5 GIT binary patch literal 158 zcmXqLoNW-!#;Mij(e|B}k(JlL%Rm#s0h+<)$H$GMW5EDln3heReO3eB1I-pf(K&b`dN z=oN#2q^H)j*f!VBp2?Athj!1|eO{bRsCas98qdm!x77n&3(S^Z-qvk@z2be@D*)(P BHWmN? literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.pem b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.pem new file mode 100644 index 000000000000..41a0cb6cf743 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8-enc.pem @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAhpD/eDDlJWogICCAAw +DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEHiZSub6jPq6Jomsf+C+mLwEQN6y +nINcwdu7jZprFHSqHp6APSr2vlm+cD3vJEAZTdUmqCVC5xuROZnbmrdZKyvvsBsI +dWwG/swfbSkyfKs7EqM= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.der b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.der new file mode 100644 index 0000000000000000000000000000000000000000..bf9858fe4dd30fafea28b9fb87150b4b85adb025 GIT binary patch literal 48 zcmXreV`5}5U}a<0PR(OcVo}&}ibd^;_uBor?Vev;XRx@=Ei5ma)_MBiHP>8@do5<^ E08>N}s{jB1 literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.pem b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.pem new file mode 100644 index 000000000000..3a56d90954a6 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pkcs8.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VuBCIEILjKBCbUS62/bYdJ9EWYBEWdcXd2lonLwdZFbQjehDZn +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.der b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.der new file mode 100644 index 0000000000000000000000000000000000000000..7541f220ab4787814b3a9cebd5fd93aab0a05fcb GIT binary patch literal 44 zcmXreGGJw6)=tf1R%BStqBQ+O7-#*xAR{?(G1c33d+MK7ZC$KqDX%CZw{A@k02o^i Aj{pDw literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.pem b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.pem new file mode 100644 index 000000000000..a63e7236fb87 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/X25519/x25519-pub.pem @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VuAyEApwQil/BWCX/eUjIeFxYl2368f+V6taMuOR8hFB6urFI= +-----END PUBLIC KEY----- From aeb3acbe9abffba68da3cc8b6bc0f3c2acb9bd9d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 13 Jan 2019 21:11:33 -0500 Subject: [PATCH 515/988] Update wycheproof commit in docs (#4687) --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 2b043744b5f5..6d4d3d1fafe6 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -23,7 +23,7 @@ for various cryptographic algorithms. These are not included in the repository continuous integration environments. We have ensured all test vectors are used as of commit -``f89f4c53a8845fcefcdb9f14ee9191dbe167e3e3``. +``c313761979d74b0417230eddd0f87d0cfab2b46b``. Asymmetric ciphers ~~~~~~~~~~~~~~~~~~ From c6c25c21496858271fbc4c89fb102074fd3d5f60 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 14 Jan 2019 21:50:17 -0600 Subject: [PATCH 516/988] Serialization x25519 (#4688) * modify x25519 serialization to match x448 supports raw and pkcs8 encoding on private_bytes supports raw and subjectpublickeyinfo on public_bytes deprecates zero argument call to public_bytes * add docs * this is public now * don't need that * review feedback --- CHANGELOG.rst | 4 + docs/hazmat/primitives/asymmetric/x25519.rst | 88 ++++++++++++- .../hazmat/backends/openssl/backend.py | 6 + .../hazmat/backends/openssl/x25519.py | 93 ++++++++++++- .../hazmat/backends/openssl/x448.py | 7 +- .../hazmat/primitives/asymmetric/x25519.py | 10 +- .../primitives/serialization/__init__.py | 3 + tests/hazmat/primitives/test_serialization.py | 64 +++++++++ tests/hazmat/primitives/test_x25519.py | 122 ++++++++++++++++-- tests/wycheproof/test_x25519.py | 2 +- 10 files changed, 378 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 42772af0e9dd..307f15510c3c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,6 +37,10 @@ Changelog :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicNumbers.from_encoded_point`. * Added :attr:`~cryptography.x509.ocsp.OCSPResponse.signature_hash_algorithm` to ``OCSPResponse``. +* Updated :doc:`/hazmat/primitives/asymmetric/x25519` support to allow + additional serialization methods. Calling + :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` + with no arguments has been deprecated. .. _v2-4-2: diff --git a/docs/hazmat/primitives/asymmetric/x25519.rst b/docs/hazmat/primitives/asymmetric/x25519.rst index 67ed280929ed..ea01fbaa08e7 100644 --- a/docs/hazmat/primitives/asymmetric/x25519.rst +++ b/docs/hazmat/primitives/asymmetric/x25519.rst @@ -66,6 +66,29 @@ Key interfaces :returns: :class:`X25519PrivateKey` + .. classmethod:: from_private_bytes(data) + + .. versionadded:: 2.5 + + A class method for loading an X25519 key encoded as + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`. + + :param bytes data: 32 byte private key. + + :returns: :class:`X25519PrivateKey` + + .. doctest:: + + >>> from cryptography.hazmat.primitives import serialization + >>> from cryptography.hazmat.primitives.asymmetric import x25519 + >>> private_key = x25519.X25519PrivateKey.generate() + >>> private_bytes = private_key.private_bytes( + ... encoding=serialization.Encoding.Raw, + ... format=serialization.PrivateFormat.Raw, + ... encryption_algorithm=serialization.NoEncryption() + ... ) + >>> loaded_private_key = x25519.X25519PrivateKey.from_private_bytes(private_bytes) + .. method:: public_key() :returns: :class:`X25519PublicKey` @@ -77,6 +100,38 @@ Key interfaces :returns bytes: A shared key. + .. method:: private_bytes(encoding, format, encryption_algorithm) + + .. versionadded:: 2.5 + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8` + or + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PrivateFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`. + + :param encryption_algorithm: An instance of an object conforming to the + :class:`~cryptography.hazmat.primitives.serialization.KeySerializationEncryption` + interface. + + :return bytes: Serialized key. + .. class:: X25519PublicKey .. versionadded:: 2.0 @@ -92,12 +147,37 @@ Key interfaces >>> from cryptography.hazmat.primitives.asymmetric import x25519 >>> private_key = x25519.X25519PrivateKey.generate() >>> public_key = private_key.public_key() - >>> public_bytes = public_key.public_bytes() + >>> public_bytes = public_key.public_bytes( + ... encoding=serialization.Encoding.Raw, + ... format=serialization.PublicFormat.Raw + ... ) >>> loaded_public_key = x25519.X25519PublicKey.from_public_bytes(public_bytes) - .. method:: public_bytes() - - :returns bytes: The raw bytes of the public key. + .. method:: public_bytes(encoding, format) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo` + or + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PublicFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`. + + :returns bytes: The public key bytes. .. _`Diffie-Hellman key exchange`: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ecebe7b8356a..9eca5f8a25c7 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -511,6 +511,9 @@ def _evp_pkey_to_private_key(self, evp_pkey): elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): # EVP_PKEY_X448 is not present in OpenSSL < 1.1.1 return _X448PrivateKey(self, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_X25519", None): + # EVP_PKEY_X25519 is not present in OpenSSL < 1.1.0 + return _X25519PrivateKey(self, evp_pkey) else: raise UnsupportedAlgorithm("Unsupported key type.") @@ -545,6 +548,9 @@ def _evp_pkey_to_public_key(self, evp_pkey): elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): # EVP_PKEY_X448 is not present in OpenSSL < 1.1.1 return _X448PublicKey(self, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_X25519", None): + # EVP_PKEY_X25519 is not present in OpenSSL < 1.1.0 + return _X25519PublicKey(self, evp_pkey) else: raise UnsupportedAlgorithm("Unsupported key type.") diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 06f3985d3821..914f59413a2d 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -4,20 +4,66 @@ from __future__ import absolute_import, division, print_function +import warnings + from cryptography import utils from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive +from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x25519 import ( X25519PrivateKey, X25519PublicKey ) +_X25519_KEY_SIZE = 32 + + @utils.register_interface(X25519PublicKey) class _X25519PublicKey(object): def __init__(self, backend, evp_pkey): self._backend = backend self._evp_pkey = evp_pkey - def public_bytes(self): + def public_bytes(self, encoding=None, format=None): + if encoding is None or format is None: + if encoding is not None or format is not None: + raise ValueError("Both encoding and format are required") + else: + warnings.warn( + "public_bytes now requires encoding and format arguments. " + "Support for calling without arguments will be removed in " + "cryptography 2.7", + utils.DeprecatedIn25, + ) + encoding = serialization.Encoding.Raw + format = serialization.PublicFormat.Raw + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + encoding is not serialization.Encoding.Raw or + format is not serialization.PublicFormat.Raw + ): + raise ValueError( + "When using Raw both encoding and format must be Raw" + ) + + return self._raw_public_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PublicFormat.SubjectPublicKeyInfo + ): + raise ValueError( + "format must be SubjectPublicKeyInfo when encoding is PEM or " + "DER" + ) + + return self._backend._public_key_bytes( + encoding, format, self, self._evp_pkey, None + ) + + def _raw_public_bytes(self): ucharpp = self._backend._ffi.new("unsigned char **") res = self._backend._lib.EVP_PKEY_get1_tls_encodedpoint( self._evp_pkey, ucharpp @@ -56,3 +102,48 @@ def exchange(self, peer_public_key): return _evp_pkey_derive( self._backend, self._evp_pkey, peer_public_key ) + + def private_bytes(self, encoding, format, encryption_algorithm): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + format is not serialization.PrivateFormat.Raw or + encoding is not serialization.Encoding.Raw or not + isinstance(encryption_algorithm, serialization.NoEncryption) + ): + raise ValueError( + "When using Raw both encoding and format must be Raw " + "and encryption_algorithm must be NoEncryption" + ) + + return self._raw_private_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PrivateFormat.PKCS8 + ): + raise ValueError( + "format must be PKCS8 when encoding is PEM or DER" + ) + + return self._backend._private_key_bytes( + encoding, format, encryption_algorithm, self._evp_pkey, None + ) + + def _raw_private_bytes(self): + # When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 we can + # switch this to EVP_PKEY_new_raw_private_key + # The trick we use here is serializing to a PKCS8 key and just + # using the last 32 bytes, which is the key itself. + bio = self._backend._create_mem_bio_gc() + res = self._backend._lib.i2d_PKCS8PrivateKey_bio( + bio, self._evp_pkey, + self._backend._ffi.NULL, self._backend._ffi.NULL, + 0, self._backend._ffi.NULL, self._backend._ffi.NULL + ) + self._backend.openssl_assert(res == 1) + pkcs8 = self._backend._read_mem_bio(bio) + self._backend.openssl_assert(len(pkcs8) == 48) + return pkcs8[-_X25519_KEY_SIZE:] diff --git a/src/cryptography/hazmat/backends/openssl/x448.py b/src/cryptography/hazmat/backends/openssl/x448.py index 3792fd795e82..13e4ce15e01b 100644 --- a/src/cryptography/hazmat/backends/openssl/x448.py +++ b/src/cryptography/hazmat/backends/openssl/x448.py @@ -12,9 +12,6 @@ ) _X448_KEY_SIZE = 56 -_PEM_DER = ( - serialization.Encoding.PEM, serialization.Encoding.DER -) @utils.register_interface(X448PublicKey) @@ -39,7 +36,7 @@ def public_bytes(self, encoding, format): return self._raw_public_bytes() if ( - encoding in _PEM_DER and + encoding in serialization._PEM_DER and format is not serialization.PublicFormat.SubjectPublicKeyInfo ): raise ValueError( @@ -104,7 +101,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): return self._raw_private_bytes() if ( - encoding in _PEM_DER and + encoding in serialization._PEM_DER and format is not serialization.PrivateFormat.PKCS8 ): raise ValueError( diff --git a/src/cryptography/hazmat/primitives/asymmetric/x25519.py b/src/cryptography/hazmat/primitives/asymmetric/x25519.py index f4bdf3db4f66..9460226102f7 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -28,7 +28,7 @@ def from_public_bytes(cls, data): return backend.x25519_load_public_bytes(data) @abc.abstractmethod - def public_bytes(self): + def public_bytes(self, encoding=None, format=None): """ The serialized bytes of the public key. """ @@ -47,7 +47,7 @@ def generate(cls): return backend.x25519_generate_key() @classmethod - def _from_private_bytes(cls, data): + def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend return backend.x25519_load_private_bytes(data) @@ -57,6 +57,12 @@ def public_key(self): The serialized bytes of the public key. """ + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + The serialized bytes of the private key. + """ + @abc.abstractmethod def exchange(self, peer_public_key): """ diff --git a/src/cryptography/hazmat/primitives/serialization/__init__.py b/src/cryptography/hazmat/primitives/serialization/__init__.py index 3a34bf8f5648..f6d4ce9942fb 100644 --- a/src/cryptography/hazmat/primitives/serialization/__init__.py +++ b/src/cryptography/hazmat/primitives/serialization/__init__.py @@ -14,6 +14,9 @@ load_ssh_public_key ) + +_PEM_DER = (Encoding.PEM, Encoding.DER) + __all__ = [ "load_der_parameters", "load_der_private_key", "load_der_public_key", "load_pem_parameters", "load_pem_private_key", "load_pem_public_key", diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 81d372fc70ee..2bc490785b69 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -1297,3 +1297,67 @@ def test_load_public_key(self, key_path, encoding, loader, backend): assert public_key.public_bytes( encoding, PublicFormat.SubjectPublicKeyInfo ) == data + + +@pytest.mark.supported( + only_if=lambda backend: backend.x25519_supported(), + skip_message="Requires OpenSSL with X25519 support" +) +class TestX25519Serialization(object): + def test_load_der_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "X25519", "x25519-pkcs8-enc.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "X25519", "x25519-pkcs8.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + key = load_der_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.DER, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + def test_load_pem_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "X25519", "x25519-pkcs8-enc.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "X25519", "x25519-pkcs8.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + key = load_pem_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.PEM, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + @pytest.mark.parametrize( + ("key_path", "encoding", "loader"), + [ + ( + ["X25519", "x25519-pub.pem"], + Encoding.PEM, + load_pem_public_key + ), + ( + ["X25519", "x25519-pub.der"], + Encoding.DER, + load_der_public_key + ), + ] + ) + def test_load_public_key(self, key_path, encoding, loader, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda pemfile: pemfile.read(), + mode="rb" + ) + public_key = loader(data, backend) + assert public_key.public_bytes( + encoding, PublicFormat.SubjectPublicKeyInfo + ) == data diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index 0f83eb6e82ec..682c3125b4dc 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -9,8 +9,10 @@ import pytest +from cryptography import utils from cryptography.exceptions import _Reasons from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x25519 import ( X25519PrivateKey, X25519PublicKey ) @@ -50,7 +52,7 @@ def test_rfc7748(self, vector, backend): private = binascii.unhexlify(vector["input_scalar"]) public = binascii.unhexlify(vector["input_u"]) shared_key = binascii.unhexlify(vector["output_u"]) - private_key = X25519PrivateKey._from_private_bytes(private) + private_key = X25519PrivateKey.from_private_bytes(private) public_key = X25519PublicKey.from_public_bytes(public) computed_shared_key = private_key.exchange(public_key) assert computed_shared_key == shared_key @@ -64,11 +66,11 @@ def test_rfc7748_1000_iteration(self, backend): b"684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d9953" b"2c51" ) - private_key = X25519PrivateKey._from_private_bytes(private) + private_key = X25519PrivateKey.from_private_bytes(private) public_key = X25519PublicKey.from_public_bytes(public) for _ in range(1000): computed_shared_key = private_key.exchange(public_key) - private_key = X25519PrivateKey._from_private_bytes( + private_key = X25519PrivateKey.from_private_bytes( computed_shared_key ) public_key = X25519PublicKey.from_public_bytes(old_private) @@ -86,13 +88,25 @@ def test_null_shared_key_raises_error(self, backend): private = binascii.unhexlify( "78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296" ) - private_key = X25519PrivateKey._from_private_bytes( + private_key = X25519PrivateKey.from_private_bytes( private ) public_key = X25519PublicKey.from_public_bytes(public) with pytest.raises(ValueError): private_key.exchange(public_key) + def test_deprecated_public_bytes(self, backend): + key = X25519PrivateKey.generate().public_key() + with pytest.warns(utils.DeprecatedIn25): + key.public_bytes() + + def test_public_bytes_bad_args(self, backend): + key = X25519PrivateKey.generate().public_key() + with pytest.raises(ValueError): + key.public_bytes(None, serialization.PublicFormat.Raw) + with pytest.raises(ValueError): + key.public_bytes(serialization.Encoding.Raw) + # These vectors are also from RFC 7748 # https://tools.ietf.org/html/rfc7748#section-6.1 @pytest.mark.parametrize( @@ -120,11 +134,20 @@ def test_null_shared_key_raises_error(self, backend): ) ] ) - def test_public_bytes(self, private_bytes, public_bytes, backend): - private_key = X25519PrivateKey._from_private_bytes(private_bytes) - assert private_key.public_key().public_bytes() == public_bytes + def test_pub_priv_bytes_raw(self, private_bytes, public_bytes, backend): + private_key = X25519PrivateKey.from_private_bytes(private_bytes) + assert private_key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == private_bytes + assert private_key.public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == public_bytes public_key = X25519PublicKey.from_public_bytes(public_bytes) - assert public_key.public_bytes() == public_bytes + assert public_key.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == public_bytes def test_generate(self, backend): key = X25519PrivateKey.generate() @@ -142,3 +165,86 @@ def test_invalid_length_from_public_bytes(self, backend): with pytest.raises(ValueError): X25519PublicKey.from_public_bytes(b"a" * 33) + + def test_invalid_private_bytes(self, backend): + key = X25519PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.PKCS8, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.PEM, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) + + def test_invalid_public_bytes(self, backend): + key = X25519PrivateKey.generate().public_key() + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.PKCS1 + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.Raw + ) + + @pytest.mark.parametrize( + ("encoding", "fmt", "encryption", "passwd", "load_func"), + [ + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_der_private_key + ), + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_der_private_key + ), + ] + ) + def test_round_trip_private_serialization(self, encoding, fmt, encryption, + passwd, load_func, backend): + key = X25519PrivateKey.generate() + serialized = key.private_bytes(encoding, fmt, encryption) + loaded_key = load_func(serialized, passwd, backend) + assert isinstance(loaded_key, X25519PrivateKey) diff --git a/tests/wycheproof/test_x25519.py b/tests/wycheproof/test_x25519.py index 5e6253ce1432..0727ec39de2e 100644 --- a/tests/wycheproof/test_x25519.py +++ b/tests/wycheproof/test_x25519.py @@ -23,7 +23,7 @@ def test_x25519(backend, wycheproof): assert list(wycheproof.testgroup.items()) == [("curve", "curve25519")] - private_key = X25519PrivateKey._from_private_bytes( + private_key = X25519PrivateKey.from_private_bytes( binascii.unhexlify(wycheproof.testcase["private"]) ) public_key = X25519PublicKey.from_public_bytes( From 9b49a87e469d7366798b29d0f4259b08b2fbd5de Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 15 Jan 2019 12:24:48 -0500 Subject: [PATCH 517/988] Remove a dead assignment (#4692) --- src/cryptography/hazmat/backends/openssl/rsa.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 0bcc47125e36..30d59bd80787 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -238,7 +238,6 @@ def _rsa_sig_sign(backend, padding, algorithm, private_key, data): if res != 1: errors = backend._consume_errors() backend.openssl_assert(errors[0].lib == backend._lib.ERR_LIB_RSA) - reason = None if ( errors[0].reason == backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE From 2f34994fe909d8862225c03427c7b4525fff4190 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 15 Jan 2019 20:52:38 -0600 Subject: [PATCH 518/988] add support for byteslike on password and data for pkcs12 loading (#4690) * add support for byteslike on password and data for pkcs12 loading * use a contextmanager to yield a null terminated buffer we can zero * review feedback * updated text * one last change --- .../primitives/asymmetric/serialization.rst | 6 ++- .../hazmat/backends/openssl/backend.py | 50 ++++++++++++++----- tests/hazmat/primitives/test_pkcs12.py | 13 +++++ 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 04bc705a4855..85aeced366e6 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -417,10 +417,12 @@ file suffix. Deserialize a PKCS12 blob. - :param bytes data: The binary data. + :param data: The binary data. + :type data: :term:`bytes-like` - :param bytes password: The password to use to decrypt the data. ``None`` + :param password: The password to use to decrypt the data. ``None`` if the PKCS12 is not encrypted. + :type password: :term:`bytes-like` :param backend: A backend instance. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 9eca5f8a25c7..89356d3c8975 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -450,13 +450,13 @@ def _bytes_to_bio(self, data): The char* is the storage for the BIO and it must stay alive until the BIO is finished with. """ - data_char_p = self._ffi.new("char[]", data) + data_ptr = self._ffi.from_buffer(data) bio = self._lib.BIO_new_mem_buf( - data_char_p, len(data) + data_ptr, len(data) ) self.openssl_assert(bio != self._ffi.NULL) - return _MemoryBIO(self._ffi.gc(bio, self._lib.BIO_free), data_char_p) + return _MemoryBIO(self._ffi.gc(bio, self._lib.BIO_free), data_ptr) def _create_mem_bio_gc(self): """ @@ -1225,12 +1225,12 @@ def _load_key(self, openssl_read_func, convert_func, data, password): mem_bio = self._bytes_to_bio(data) if password is not None: - utils._check_bytes("password", password) + utils._check_byteslike("password", password) userdata = self._ffi.new("CRYPTOGRAPHY_PASSWORD_DATA *") if password is not None: - password_buf = self._ffi.new("char []", password) - userdata.password = password_buf + password_ptr = self._ffi.from_buffer(password) + userdata.password = password_ptr userdata.length = len(password) evp_pkey = openssl_read_func( @@ -2196,11 +2196,33 @@ def aead_cipher_supported(self, cipher): self._lib.EVP_get_cipherbyname(cipher_name) != self._ffi.NULL ) - def load_key_and_certificates_from_pkcs12(self, data, password): - if password is None: - password = self._ffi.NULL + @contextlib.contextmanager + def _zeroed_null_terminated_buf(self, data): + """ + This method takes bytes, which can be a bytestring or a mutable + buffer like a bytearray, and yields a null-terminated version of that + data. This is required because PKCS12_parse doesn't take a length with + its password char * and ffi.from_buffer doesn't provide null + termination. So, to support zeroing the data via bytearray we + need to build this ridiculous construct that copies the memory, but + zeroes it after use. + """ + if data is None: + yield self._ffi.NULL else: - utils._check_bytes("password", password) + data_len = len(data) + buf = self._ffi.new("char[]", data_len + 1) + self._ffi.memmove(buf, data, data_len) + try: + yield buf + finally: + # TODO: this could be done with memset to avoid the Python + # bytestring alloc. + self._ffi.memmove(buf, b"\x00" * data_len, data_len) + + def load_key_and_certificates_from_pkcs12(self, data, password): + if password is not None: + utils._check_byteslike("password", password) bio = self._bytes_to_bio(data) p12 = self._lib.d2i_PKCS12_bio(bio.bio, self._ffi.NULL) @@ -2212,9 +2234,11 @@ def load_key_and_certificates_from_pkcs12(self, data, password): evp_pkey_ptr = self._ffi.new("EVP_PKEY **") x509_ptr = self._ffi.new("X509 **") sk_x509_ptr = self._ffi.new("Cryptography_STACK_OF_X509 **") - res = self._lib.PKCS12_parse( - p12, password, evp_pkey_ptr, x509_ptr, sk_x509_ptr - ) + with self._zeroed_null_terminated_buf(password) as password_buf: + res = self._lib.PKCS12_parse( + p12, password_buf, evp_pkey_ptr, x509_ptr, sk_x509_ptr + ) + if res == 0: self._consume_errors() raise ValueError("Invalid password or PKCS12 data") diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py index 85be3b517eea..f084d578c44f 100644 --- a/tests/hazmat/primitives/test_pkcs12.py +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -108,3 +108,16 @@ def test_invalid_password(self, backend): derfile.read(), b"invalid", backend ), mode="rb" ) + + def test_buffer_protocol(self, backend): + p12 = load_vectors_from_file( + os.path.join("pkcs12", "cert-key-aes256cbc.p12"), + lambda derfile: derfile.read(), mode="rb" + ) + p12buffer = bytearray(p12) + parsed_key, parsed_cert, parsed_more_certs = load_key_and_certificates( + p12buffer, bytearray(b"cryptography"), backend + ) + assert parsed_key is not None + assert parsed_cert is not None + assert parsed_more_certs == [] From 9c2f3d6a05b117247b37323e1f8ed1cf6fa263d1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 15 Jan 2019 21:52:08 -0600 Subject: [PATCH 519/988] support byteslike in X448PrivateKey.from_private_bytes (#4694) --- docs/hazmat/primitives/asymmetric/x448.rst | 3 ++- src/cryptography/hazmat/backends/openssl/backend.py | 3 ++- tests/hazmat/primitives/test_x448.py | 12 ++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/x448.rst b/docs/hazmat/primitives/asymmetric/x448.rst index 9b00c6afef5a..4e1f0421f542 100644 --- a/docs/hazmat/primitives/asymmetric/x448.rst +++ b/docs/hazmat/primitives/asymmetric/x448.rst @@ -68,7 +68,8 @@ Key interfaces .. classmethod:: from_private_bytes(data) - :param bytes data: 56 byte private key. + :param data: 56 byte private key. + :type data: :term:`bytes-like` :returns: :class:`X448PrivateKey` diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 89356d3c8975..3ab34c17fe4c 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2150,8 +2150,9 @@ def x448_load_public_bytes(self, data): return _X448PublicKey(self, evp_pkey) def x448_load_private_bytes(self, data): + data_ptr = self._ffi.from_buffer(data) evp_pkey = self._lib.EVP_PKEY_new_raw_private_key( - self._lib.NID_X448, self._ffi.NULL, data, len(data) + self._lib.NID_X448, self._ffi.NULL, data_ptr, len(data) ) self.openssl_assert(evp_pkey != self._ffi.NULL) evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) diff --git a/tests/hazmat/primitives/test_x448.py b/tests/hazmat/primitives/test_x448.py index 1833b03d81c7..51be0e105192 100644 --- a/tests/hazmat/primitives/test_x448.py +++ b/tests/hazmat/primitives/test_x448.py @@ -218,3 +218,15 @@ def test_invalid_public_bytes(self, backend): serialization.Encoding.PEM, serialization.PublicFormat.Raw ) + + def test_buffer_protocol(self, backend): + private_bytes = binascii.unhexlify( + b"9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28d" + b"d9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b" + ) + key = X448PrivateKey.from_private_bytes(bytearray(private_bytes)) + assert key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == private_bytes From 82177c2c5ba1f16af2157275108cf7c39d31854a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 15 Jan 2019 22:52:30 -0600 Subject: [PATCH 520/988] support byteslike in aead for key and nonce (#4695) --- docs/hazmat/primitives/aead.rst | 28 +++++++----- .../hazmat/backends/openssl/aead.py | 6 ++- .../hazmat/primitives/ciphers/aead.py | 12 ++--- tests/hazmat/primitives/test_aead.py | 45 +++++++++++++++++++ 4 files changed, 73 insertions(+), 18 deletions(-) diff --git a/docs/hazmat/primitives/aead.rst b/docs/hazmat/primitives/aead.rst index 06fecc5a7f54..d318367bc4ba 100644 --- a/docs/hazmat/primitives/aead.rst +++ b/docs/hazmat/primitives/aead.rst @@ -18,7 +18,8 @@ also support providing integrity for associated data which is not encrypted. It is a stream cipher combined with a MAC that offers strong integrity guarantees. - :param bytes key: A 32-byte key. This **must** be kept secret. + :param key: A 32-byte key. This **must** be kept secret. + :type key: :term:`bytes-like` :raises cryptography.exceptions.UnsupportedAlgorithm: If the version of OpenSSL does not support ChaCha20Poly1305. @@ -53,8 +54,8 @@ also support providing integrity for associated data which is not encrypted. ``associated_data``. The output of this can be passed directly to the ``decrypt`` method. - :param bytes nonce: A 12 byte value. **NEVER REUSE A NONCE** with a - key. + :param nonce: A 12 byte value. **NEVER REUSE A NONCE** with a key. + :type nonce: :term:`bytes-like` :param bytes data: The data to encrypt. :param bytes associated_data: Additional data that should be authenticated with the key, but does not need to be encrypted. Can @@ -69,8 +70,9 @@ also support providing integrity for associated data which is not encrypted. called encrypt with ``associated_data`` you must pass the same ``associated_data`` in decrypt or the integrity check will fail. - :param bytes nonce: A 12 byte value. **NEVER REUSE A NONCE** with a + :param nonce: A 12 byte value. **NEVER REUSE A NONCE** with a key. + :type nonce: :term:`bytes-like` :param bytes data: The data to decrypt (with tag appended). :param bytes associated_data: Additional data to authenticate. Can be ``None`` if none was passed during encryption. @@ -88,7 +90,8 @@ also support providing integrity for associated data which is not encrypted. :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES` block cipher utilizing Galois Counter Mode (GCM). - :param bytes key: A 128, 192, or 256-bit key. This **must** be kept secret. + :param key: A 128, 192, or 256-bit key. This **must** be kept secret. + :type key: :term:`bytes-like` .. doctest:: @@ -123,9 +126,10 @@ also support providing integrity for associated data which is not encrypted. authenticating the ``associated_data``. The output of this can be passed directly to the ``decrypt`` method. - :param bytes nonce: NIST `recommends a 96-bit IV length`_ for best + :param nonce: NIST `recommends a 96-bit IV length`_ for best performance but it can be up to 2\ :sup:`64` - 1 :term:`bits`. **NEVER REUSE A NONCE** with a key. + :type nonce: :term:`bytes-like` :param bytes data: The data to encrypt. :param bytes associated_data: Additional data that should be authenticated with the key, but is not encrypted. Can be ``None``. @@ -139,9 +143,10 @@ also support providing integrity for associated data which is not encrypted. called encrypt with ``associated_data`` you must pass the same ``associated_data`` in decrypt or the integrity check will fail. - :param bytes nonce: NIST `recommends a 96-bit IV length`_ for best + :param nonce: NIST `recommends a 96-bit IV length`_ for best performance but it can be up to 2\ :sup:`64` - 1 :term:`bits`. **NEVER REUSE A NONCE** with a key. + :type nonce: :term:`bytes-like` :param bytes data: The data to decrypt (with tag appended). :param bytes associated_data: Additional data to authenticate. Can be ``None`` if none was passed during encryption. @@ -165,7 +170,8 @@ also support providing integrity for associated data which is not encrypted. :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES` block cipher utilizing Counter with CBC-MAC (CCM) (specified in :rfc:`3610`). - :param bytes key: A 128, 192, or 256-bit key. This **must** be kept secret. + :param key: A 128, 192, or 256-bit key. This **must** be kept secret. + :type key: :term:`bytes-like` :param int tag_length: The length of the authentication tag. This defaults to 16 bytes and it is **strongly** recommended that you do not make it shorter unless absolutely necessary. Valid tag @@ -207,11 +213,12 @@ also support providing integrity for associated data which is not encrypted. authenticating the ``associated_data``. The output of this can be passed directly to the ``decrypt`` method. - :param bytes nonce: A value of between 7 and 13 bytes. The maximum + :param nonce: A value of between 7 and 13 bytes. The maximum length is determined by the length of the ciphertext you are encrypting and must satisfy the condition: ``len(data) < 2 ** (8 * (15 - len(nonce)))`` **NEVER REUSE A NONCE** with a key. + :type nonce: :term:`bytes-like` :param bytes data: The data to encrypt. :param bytes associated_data: Additional data that should be authenticated with the key, but is not encrypted. Can be ``None``. @@ -225,9 +232,10 @@ also support providing integrity for associated data which is not encrypted. called encrypt with ``associated_data`` you must pass the same ``associated_data`` in decrypt or the integrity check will fail. - :param bytes nonce: A value of between 7 and 13 bytes. This + :param nonce: A value of between 7 and 13 bytes. This is the same value used when you originally called encrypt. **NEVER REUSE A NONCE** with a key. + :type nonce: :term:`bytes-like` :param bytes data: The data to decrypt (with tag appended). :param bytes associated_data: Additional data to authenticate. Can be ``None`` if none was passed during encryption. diff --git a/src/cryptography/hazmat/backends/openssl/aead.py b/src/cryptography/hazmat/backends/openssl/aead.py index 9cec3e23b3ea..73195ff3e265 100644 --- a/src/cryptography/hazmat/backends/openssl/aead.py +++ b/src/cryptography/hazmat/backends/openssl/aead.py @@ -54,12 +54,14 @@ def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): ctx, backend._lib.EVP_CTRL_AEAD_SET_TAG, tag_len, backend._ffi.NULL ) + nonce_ptr = backend._ffi.from_buffer(nonce) + key_ptr = backend._ffi.from_buffer(key) res = backend._lib.EVP_CipherInit_ex( ctx, backend._ffi.NULL, backend._ffi.NULL, - key, - nonce, + key_ptr, + nonce_ptr, int(operation == _ENCRYPT) ) backend.openssl_assert(res != 0) diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index 16899d00fc6c..42e19adb11d2 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -20,7 +20,7 @@ def __init__(self, key): "ChaCha20Poly1305 is not supported by this version of OpenSSL", exceptions._Reasons.UNSUPPORTED_CIPHER ) - utils._check_bytes("key", key) + utils._check_byteslike("key", key) if len(key) != 32: raise ValueError("ChaCha20Poly1305 key must be 32 bytes.") @@ -56,7 +56,7 @@ def decrypt(self, nonce, data, associated_data): ) def _check_params(self, nonce, data, associated_data): - utils._check_bytes("nonce", nonce) + utils._check_byteslike("nonce", nonce) utils._check_bytes("data", data) utils._check_bytes("associated_data", associated_data) if len(nonce) != 12: @@ -67,7 +67,7 @@ class AESCCM(object): _MAX_SIZE = 2 ** 32 def __init__(self, key, tag_length=16): - utils._check_bytes("key", key) + utils._check_byteslike("key", key) if len(key) not in (16, 24, 32): raise ValueError("AESCCM key must be 128, 192, or 256 bits.") @@ -129,7 +129,7 @@ def _validate_lengths(self, nonce, data_len): raise ValueError("Nonce too long for data") def _check_params(self, nonce, data, associated_data): - utils._check_bytes("nonce", nonce) + utils._check_byteslike("nonce", nonce) utils._check_bytes("data", data) utils._check_bytes("associated_data", associated_data) if not 7 <= len(nonce) <= 13: @@ -140,7 +140,7 @@ class AESGCM(object): _MAX_SIZE = 2 ** 32 def __init__(self, key): - utils._check_bytes("key", key) + utils._check_byteslike("key", key) if len(key) not in (16, 24, 32): raise ValueError("AESGCM key must be 128, 192, or 256 bits.") @@ -181,7 +181,7 @@ def decrypt(self, nonce, data, associated_data): ) def _check_params(self, nonce, data, associated_data): - utils._check_bytes("nonce", nonce) + utils._check_byteslike("nonce", nonce) utils._check_bytes("data", data) utils._check_bytes("associated_data", associated_data) if len(nonce) == 0: diff --git a/tests/hazmat/primitives/test_aead.py b/tests/hazmat/primitives/test_aead.py index 5a5185583972..e1a17a974461 100644 --- a/tests/hazmat/primitives/test_aead.py +++ b/tests/hazmat/primitives/test_aead.py @@ -167,6 +167,21 @@ def test_boringssl_vectors(self, vector, backend): computed_ct = chacha.encrypt(nonce, pt, aad) assert computed_ct == ct + tag + def test_buffer_protocol(self, backend): + key = ChaCha20Poly1305.generate_key() + chacha = ChaCha20Poly1305(key) + pt = b"encrypt me" + ad = b"additional" + nonce = os.urandom(12) + ct = chacha.encrypt(nonce, pt, ad) + computed_pt = chacha.decrypt(nonce, ct, ad) + assert computed_pt == pt + chacha2 = ChaCha20Poly1305(bytearray(key)) + ct2 = chacha2.encrypt(bytearray(nonce), pt, ad) + assert ct2 == ct + computed_pt2 = chacha2.decrypt(bytearray(nonce), ct2, ad) + assert computed_pt2 == pt + @pytest.mark.skipif( _aead_supported(AESCCM), @@ -317,6 +332,21 @@ def test_decrypt_data_too_short(self, backend): with pytest.raises(InvalidTag): aesccm.decrypt(b"0" * 12, b"0", None) + def test_buffer_protocol(self, backend): + key = AESCCM.generate_key(128) + aesccm = AESCCM(key) + pt = b"encrypt me" + ad = b"additional" + nonce = os.urandom(12) + ct = aesccm.encrypt(nonce, pt, ad) + computed_pt = aesccm.decrypt(nonce, ct, ad) + assert computed_pt == pt + aesccm2 = AESCCM(bytearray(key)) + ct2 = aesccm2.encrypt(bytearray(nonce), pt, ad) + assert ct2 == ct + computed_pt2 = aesccm2.decrypt(bytearray(nonce), ct2, ad) + assert computed_pt2 == pt + def _load_gcm_vectors(): vectors = _load_all_params( @@ -413,3 +443,18 @@ def test_associated_data_none_equal_to_empty_bytestring(self, backend): pt1 = aesgcm.decrypt(nonce, ct1, None) pt2 = aesgcm.decrypt(nonce, ct2, b"") assert pt1 == pt2 + + def test_buffer_protocol(self, backend): + key = AESGCM.generate_key(128) + aesgcm = AESGCM(key) + pt = b"encrypt me" + ad = b"additional" + nonce = os.urandom(12) + ct = aesgcm.encrypt(nonce, pt, ad) + computed_pt = aesgcm.decrypt(nonce, ct, ad) + assert computed_pt == pt + aesgcm2 = AESGCM(bytearray(key)) + ct2 = aesgcm2.encrypt(bytearray(nonce), pt, ad) + assert ct2 == ct + computed_pt2 = aesgcm2.decrypt(bytearray(nonce), ct2, ad) + assert computed_pt2 == pt From c33ef91143c93fa7d59214f88fd5954b1bb3df09 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 15 Jan 2019 23:56:42 -0600 Subject: [PATCH 521/988] turn off hypothesis deadlines, enforced by default in 4.0 (#4696) we don't care about exceeding a deadline in CI because our infra has wild variability and this can just randomly happen. --- tests/hypothesis/test_fernet.py | 2 +- tests/hypothesis/test_padding.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/hypothesis/test_fernet.py b/tests/hypothesis/test_fernet.py index 53e7c54ee3fa..75195f5304a5 100644 --- a/tests/hypothesis/test_fernet.py +++ b/tests/hypothesis/test_fernet.py @@ -8,7 +8,7 @@ from cryptography.fernet import Fernet -@settings(suppress_health_check=[HealthCheck.too_slow]) +@settings(suppress_health_check=[HealthCheck.too_slow], deadline=None) @given(binary()) def test_fernet(data): f = Fernet(Fernet.generate_key()) diff --git a/tests/hypothesis/test_padding.py b/tests/hypothesis/test_padding.py index fa06bb7bff06..74a58eb8c2c5 100644 --- a/tests/hypothesis/test_padding.py +++ b/tests/hypothesis/test_padding.py @@ -8,7 +8,7 @@ from cryptography.hazmat.primitives.padding import ANSIX923, PKCS7 -@settings(suppress_health_check=[HealthCheck.too_slow]) +@settings(suppress_health_check=[HealthCheck.too_slow], deadline=None) @given(integers(min_value=1, max_value=255), binary()) def test_pkcs7(block_size, data): # Generate in [1, 31] so we can easily get block_size in bits by From c6656af81d3b4440d0d1032fd82e64d717541d62 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 16 Jan 2019 19:08:12 -0600 Subject: [PATCH 522/988] add support for byteslike password/data to load_{pem,der}_private_key (#4693) * add support for byteslike password/data to load_{pem,der}_private_key * pypy 5.4 can't do memoryview from_buffer --- .../primitives/asymmetric/serialization.rst | 12 +++-- .../hazmat/backends/openssl/backend.py | 4 +- tests/hazmat/primitives/test_serialization.py | 49 +++++++++++++++++++ 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 85aeced366e6..4c2e5f2a883e 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -133,10 +133,12 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END Deserialize a private key from PEM encoded data to one of the supported asymmetric private key types. - :param bytes data: The PEM encoded key data. + :param data: The PEM encoded key data. + :type data: :term:`bytes-like` - :param bytes password: The password to use to decrypt the data. Should + :param password: The password to use to decrypt the data. Should be ``None`` if the private key is not encrypted. + :type data: :term:`bytes-like` :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.PEMSerializationBackend`. @@ -241,10 +243,12 @@ the rest. Deserialize a private key from DER encoded data to one of the supported asymmetric private key types. - :param bytes data: The DER encoded key data. + :param data: The DER encoded key data. + :type data: :term:`bytes-like` - :param bytes password: The password to use to decrypt the data. Should + :param password: The password to use to decrypt the data. Should be ``None`` if the private key is not encrypted. + :type password: :term:`bytes-like` :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.DERSerializationBackend`. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 3ab34c17fe4c..fd6057f847d1 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1224,11 +1224,9 @@ def load_der_x509_csr(self, data): def _load_key(self, openssl_read_func, convert_func, data, password): mem_bio = self._bytes_to_bio(data) - if password is not None: - utils._check_byteslike("password", password) - userdata = self._ffi.new("CRYPTOGRAPHY_PASSWORD_DATA *") if password is not None: + utils._check_byteslike("password", password) password_ptr = self._ffi.from_buffer(password) userdata.password = password_ptr userdata.length = len(password) diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 2bc490785b69..5dd724894c5c 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -34,6 +34,55 @@ from ...utils import raises_unsupported_algorithm +class TestBufferProtocolSerialization(object): + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.parametrize( + ("key_path", "password"), + [ + (["DER_Serialization", "enc-rsa-pkcs8.der"], bytearray(b"foobar")), + (["DER_Serialization", "enc2-rsa-pkcs8.der"], bytearray(b"baz")), + (["DER_Serialization", "unenc-rsa-pkcs8.der"], None), + (["DER_Serialization", "testrsa.der"], None), + ] + ) + def test_load_der_rsa_private_key(self, key_path, password, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda derfile: derfile.read(), mode="rb" + ) + key = load_der_private_key(bytearray(data), password, backend) + assert key + assert isinstance(key, rsa.RSAPrivateKey) + _check_rsa_private_numbers(key.private_numbers()) + + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.parametrize( + ("key_path", "password"), + [ + ( + ["PEM_Serialization", "rsa_private_key.pem"], + bytearray(b"123456") + ), + (["PKCS8", "unenc-rsa-pkcs8.pem"], None), + (["PKCS8", "enc-rsa-pkcs8.pem"], bytearray(b"foobar")), + (["PKCS8", "enc2-rsa-pkcs8.pem"], bytearray(b"baz")), + ( + ["Traditional_OpenSSL_Serialization", "key1.pem"], + bytearray(b"123456") + ), + ] + ) + def test_load_pem_rsa_private_key(self, key_path, password, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda pemfile: pemfile.read(), mode="rb" + ) + key = load_pem_private_key(bytearray(data), password, backend) + assert key + assert isinstance(key, rsa.RSAPrivateKey) + _check_rsa_private_numbers(key.private_numbers()) + + @pytest.mark.requires_backend_interface(interface=DERSerializationBackend) class TestDERSerialization(object): @pytest.mark.requires_backend_interface(interface=RSABackend) From bfc6fae472457c37abafb3818b44f0bd639be6cc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 16 Jan 2019 19:10:48 -0600 Subject: [PATCH 523/988] support bytes-like keys in CMAC and HMAC contexts (#4701) --- docs/hazmat/primitives/mac/hmac.rst | 3 ++- src/cryptography/hazmat/backends/openssl/cmac.py | 3 ++- src/cryptography/hazmat/backends/openssl/hmac.py | 3 ++- tests/hazmat/primitives/test_cmac.py | 13 +++++++++++++ tests/hazmat/primitives/test_hmac.py | 10 ++++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/primitives/mac/hmac.rst b/docs/hazmat/primitives/mac/hmac.rst index c605e58c825f..4c2f21c8cbd3 100644 --- a/docs/hazmat/primitives/mac/hmac.rst +++ b/docs/hazmat/primitives/mac/hmac.rst @@ -54,7 +54,8 @@ of a message. ... cryptography.exceptions.InvalidSignature: Signature did not match digest. - :param bytes key: Secret key as ``bytes``. + :param key: Secret key as ``bytes``. + :type key: :term:`bytes-like` :param algorithm: An :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` instance such as those described in diff --git a/src/cryptography/hazmat/backends/openssl/cmac.py b/src/cryptography/hazmat/backends/openssl/cmac.py index e20f66d3c543..bc88f3364495 100644 --- a/src/cryptography/hazmat/backends/openssl/cmac.py +++ b/src/cryptography/hazmat/backends/openssl/cmac.py @@ -36,8 +36,9 @@ def __init__(self, backend, algorithm, ctx=None): self._backend.openssl_assert(ctx != self._backend._ffi.NULL) ctx = self._backend._ffi.gc(ctx, self._backend._lib.CMAC_CTX_free) + key_ptr = self._backend._ffi.from_buffer(self._key) res = self._backend._lib.CMAC_Init( - ctx, self._key, len(self._key), + ctx, key_ptr, len(self._key), evp_cipher, self._backend._ffi.NULL ) self._backend.openssl_assert(res == 1) diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index 99c43f2a91e7..b606e111c5c4 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -32,8 +32,9 @@ def __init__(self, backend, key, algorithm, ctx=None): algorithm.name), _Reasons.UNSUPPORTED_HASH ) + key_ptr = self._backend._ffi.from_buffer(key) res = self._backend._lib.HMAC_Init_ex( - ctx, key, len(key), evp_md, self._backend._ffi.NULL + ctx, key_ptr, len(key), evp_md, self._backend._ffi.NULL ) self._backend.openssl_assert(res != 0) diff --git a/tests/hazmat/primitives/test_cmac.py b/tests/hazmat/primitives/test_cmac.py index 2ca05d6d81af..e319396d6865 100644 --- a/tests/hazmat/primitives/test_cmac.py +++ b/tests/hazmat/primitives/test_cmac.py @@ -183,6 +183,19 @@ def test_copy_with_backend(self, backend): copy_cmac = cmac.copy() assert cmac.finalize() == copy_cmac.finalize() + @pytest.mark.supported( + only_if=lambda backend: backend.cmac_algorithm_supported( + AES(fake_key)), + skip_message="Does not support CMAC." + ) + def test_buffer_protocol(self, backend): + key = bytearray(b"2b7e151628aed2a6abf7158809cf4f3c") + cmac = CMAC(AES(key), backend) + cmac.update(b"6bc1bee22e409f96e93d7e117393172a") + assert cmac.finalize() == binascii.unhexlify( + b"a21e6e647bfeaf5ca0a5e1bcd957dfad" + ) + def test_invalid_backend(): key = b"2b7e151628aed2a6abf7158809cf4f3c" diff --git a/tests/hazmat/primitives/test_hmac.py b/tests/hazmat/primitives/test_hmac.py index 50aa9cc27594..b6d18ff19c85 100644 --- a/tests/hazmat/primitives/test_hmac.py +++ b/tests/hazmat/primitives/test_hmac.py @@ -4,6 +4,8 @@ from __future__ import absolute_import, division, print_function +import binascii + import pytest from cryptography.exceptions import ( @@ -79,6 +81,14 @@ def test_unsupported_hash(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): hmac.HMAC(b"key", DummyHashAlgorithm(), backend) + def test_buffer_protocol(self, backend): + key = bytearray(b"2b7e151628aed2a6abf7158809cf4f3c") + h = hmac.HMAC(key, hashes.SHA256(), backend) + h.update(b"6bc1bee22e409f96e93d7e117393172a") + assert h.finalize() == binascii.unhexlify( + b"a1bf7169c56a501c6585190ff4f07cad6e492a3ee187c0372614fb444b9fc3f0" + ) + def test_invalid_backend(): pretend_backend = object() From b480d2d4dbc6339f476d49faa0900eae2f4c1d07 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 16 Jan 2019 22:07:17 -0600 Subject: [PATCH 524/988] support byteslike in hash updates (#4702) This is needed to handle keying material in some of the KDFs --- src/cryptography/hazmat/backends/openssl/hashes.py | 5 ++++- src/cryptography/hazmat/primitives/hashes.py | 2 +- tests/hazmat/primitives/test_hashes.py | 12 ++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/hashes.py b/src/cryptography/hazmat/backends/openssl/hashes.py index c39f57dcdcfe..e9a50705bf2e 100644 --- a/src/cryptography/hazmat/backends/openssl/hashes.py +++ b/src/cryptography/hazmat/backends/openssl/hashes.py @@ -47,7 +47,10 @@ def copy(self): return _HashContext(self._backend, self.algorithm, ctx=copied_ctx) def update(self, data): - res = self._backend._lib.EVP_DigestUpdate(self._ctx, data, len(data)) + data_ptr = self._backend._ffi.from_buffer(data) + res = self._backend._lib.EVP_DigestUpdate( + self._ctx, data_ptr, len(data) + ) self._backend.openssl_assert(res != 0) def finalize(self): diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 35b7d64686d1..0d6e47fb7eb6 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -82,7 +82,7 @@ def __init__(self, algorithm, backend, ctx=None): def update(self, data): if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") - utils._check_bytes("data", data) + utils._check_byteslike("data", data) self._ctx.update(data) def copy(self): diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index c2b866f70d34..6cba84b5e960 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -4,6 +4,8 @@ from __future__ import absolute_import, division, print_function +import binascii + import pytest from cryptography.exceptions import AlreadyFinalized, _Reasons @@ -167,3 +169,13 @@ def test_invalid_backend(): with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE): hashes.Hash(hashes.SHA1(), pretend_backend) + + +@pytest.mark.requires_backend_interface(interface=HashBackend) +def test_buffer_protocol_hash(backend): + data = binascii.unhexlify(b"b4190e") + h = hashes.Hash(hashes.SHA256(), backend) + h.update(bytearray(data)) + assert h.finalize() == binascii.unhexlify( + b"dff2e73091f6c05e528896c4c831b9448653dc2ff043528f6769437bc7b975c2" + ) From 8d9ea52be9e7de1373641d3afaed9b292cb03f43 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 09:41:25 -0600 Subject: [PATCH 525/988] support byteslike in hmac update (#4705) needed for some KDF keying material --- docs/hazmat/primitives/mac/hmac.rst | 3 ++- src/cryptography/hazmat/backends/openssl/hmac.py | 3 ++- src/cryptography/hazmat/primitives/hmac.py | 2 +- tests/hazmat/primitives/test_hmac.py | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/hazmat/primitives/mac/hmac.rst b/docs/hazmat/primitives/mac/hmac.rst index 4c2f21c8cbd3..9d11694bd569 100644 --- a/docs/hazmat/primitives/mac/hmac.rst +++ b/docs/hazmat/primitives/mac/hmac.rst @@ -70,7 +70,8 @@ of a message. .. method:: update(msg) - :param bytes msg: The bytes to hash and authenticate. + :param msg: The bytes to hash and authenticate. + :type msg: :term:`bytes-like` :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize` :raises TypeError: This exception is raised if ``msg`` is not ``bytes``. diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index b606e111c5c4..b23ac6498cbf 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -56,7 +56,8 @@ def copy(self): ) def update(self, data): - res = self._backend._lib.HMAC_Update(self._ctx, data, len(data)) + data_ptr = self._backend._ffi.from_buffer(data) + res = self._backend._lib.HMAC_Update(self._ctx, data_ptr, len(data)) self._backend.openssl_assert(res != 0) def finalize(self): diff --git a/src/cryptography/hazmat/primitives/hmac.py b/src/cryptography/hazmat/primitives/hmac.py index 590555d92565..f7f401d2b6f6 100644 --- a/src/cryptography/hazmat/primitives/hmac.py +++ b/src/cryptography/hazmat/primitives/hmac.py @@ -38,7 +38,7 @@ def __init__(self, key, algorithm, backend, ctx=None): def update(self, data): if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") - utils._check_bytes("data", data) + utils._check_byteslike("data", data) self._ctx.update(data) def copy(self): diff --git a/tests/hazmat/primitives/test_hmac.py b/tests/hazmat/primitives/test_hmac.py index b6d18ff19c85..0e2fe688ac82 100644 --- a/tests/hazmat/primitives/test_hmac.py +++ b/tests/hazmat/primitives/test_hmac.py @@ -84,7 +84,7 @@ def test_unsupported_hash(self, backend): def test_buffer_protocol(self, backend): key = bytearray(b"2b7e151628aed2a6abf7158809cf4f3c") h = hmac.HMAC(key, hashes.SHA256(), backend) - h.update(b"6bc1bee22e409f96e93d7e117393172a") + h.update(bytearray(b"6bc1bee22e409f96e93d7e117393172a")) assert h.finalize() == binascii.unhexlify( b"a1bf7169c56a501c6585190ff4f07cad6e492a3ee187c0372614fb444b9fc3f0" ) From 5b4c81e39622fc13895bf5df7d0f4f6bd067e7a0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 09:43:47 -0600 Subject: [PATCH 526/988] x448 and x25519 should enforce key lengths in backend (#4703) * x448 and x25519 should enforce key lengths in from_private_bytes they should also check if the algorithm is supported like the public bytes class methods do * oops * move the checks --- src/cryptography/hazmat/backends/openssl/backend.py | 9 +++++++++ .../hazmat/primitives/asymmetric/x25519.py | 9 ++++++--- .../hazmat/primitives/asymmetric/x448.py | 6 ++++++ tests/hazmat/primitives/test_x25519.py | 10 ++++++++++ tests/hazmat/primitives/test_x448.py | 12 +++++++++++- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index fd6057f847d1..8cec64d68273 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2081,6 +2081,9 @@ def x509_name_bytes(self, name): def x25519_load_public_bytes(self, data): # When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 we can # switch this to EVP_PKEY_new_raw_public_key + if len(data) != 32: + raise ValueError("An X25519 public key is 32 bytes long") + evp_pkey = self._create_evp_pkey_gc() res = self._lib.EVP_PKEY_set_type(evp_pkey, self._lib.NID_X25519) backend.openssl_assert(res == 1) @@ -2106,6 +2109,9 @@ def x25519_load_private_bytes(self, data): # Of course there's a bit more complexity. In reality OCTET STRING # contains an OCTET STRING of length 32! So the last two bytes here # are \x04\x20, which is an OCTET STRING of length 32. + if len(data) != 32: + raise ValueError("An X25519 private key is 32 bytes long") + pkcs8_prefix = b'0.\x02\x01\x000\x05\x06\x03+en\x04"\x04 ' bio = self._bytes_to_bio(pkcs8_prefix + data) evp_pkey = backend._lib.d2i_PrivateKey_bio(bio.bio, self._ffi.NULL) @@ -2148,6 +2154,9 @@ def x448_load_public_bytes(self, data): return _X448PublicKey(self, evp_pkey) def x448_load_private_bytes(self, data): + if len(data) != 56: + raise ValueError("An X448 private key is 56 bytes long") + data_ptr = self._ffi.from_buffer(data) evp_pkey = self._lib.EVP_PKEY_new_raw_private_key( self._lib.NID_X448, self._ffi.NULL, data_ptr, len(data) diff --git a/src/cryptography/hazmat/primitives/asymmetric/x25519.py b/src/cryptography/hazmat/primitives/asymmetric/x25519.py index 9460226102f7..4e8badf43344 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -22,9 +22,6 @@ def from_public_bytes(cls, data): _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM ) - if len(data) != 32: - raise ValueError("An X25519 public key is 32 bytes long") - return backend.x25519_load_public_bytes(data) @abc.abstractmethod @@ -49,6 +46,12 @@ def generate(cls): @classmethod def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x25519_supported(): + raise UnsupportedAlgorithm( + "X25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + ) + return backend.x25519_load_private_bytes(data) @abc.abstractmethod diff --git a/src/cryptography/hazmat/primitives/asymmetric/x448.py b/src/cryptography/hazmat/primitives/asymmetric/x448.py index 992ec0fd68e3..475e678ff98c 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x448.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x448.py @@ -46,6 +46,12 @@ def generate(cls): @classmethod def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x448_supported(): + raise UnsupportedAlgorithm( + "X448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + ) + return backend.x448_load_private_bytes(data) @abc.abstractmethod diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index 682c3125b4dc..f412f2e8835c 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -31,6 +31,9 @@ def test_x25519_unsupported(backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): X25519PublicKey.from_public_bytes(b"0" * 32) + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): + X25519PrivateKey.from_private_bytes(b"0" * 32) + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): X25519PrivateKey.generate() @@ -166,6 +169,13 @@ def test_invalid_length_from_public_bytes(self, backend): with pytest.raises(ValueError): X25519PublicKey.from_public_bytes(b"a" * 33) + def test_invalid_length_from_private_bytes(self, backend): + with pytest.raises(ValueError): + X25519PrivateKey.from_private_bytes(b"a" * 31) + + with pytest.raises(ValueError): + X25519PrivateKey.from_private_bytes(b"a" * 33) + def test_invalid_private_bytes(self, backend): key = X25519PrivateKey.generate() with pytest.raises(ValueError): diff --git a/tests/hazmat/primitives/test_x448.py b/tests/hazmat/primitives/test_x448.py index 51be0e105192..817de76f26c6 100644 --- a/tests/hazmat/primitives/test_x448.py +++ b/tests/hazmat/primitives/test_x448.py @@ -28,7 +28,10 @@ @pytest.mark.requires_backend_interface(interface=DHBackend) def test_x448_unsupported(backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): - X448PublicKey.from_public_bytes(b"0" * 32) + X448PublicKey.from_public_bytes(b"0" * 56) + + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): + X448PrivateKey.from_private_bytes(b"0" * 56) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): X448PrivateKey.generate() @@ -176,6 +179,13 @@ def test_invalid_length_from_public_bytes(self, backend): with pytest.raises(ValueError): X448PublicKey.from_public_bytes(b"a" * 57) + def test_invalid_length_from_private_bytes(self, backend): + with pytest.raises(ValueError): + X448PrivateKey.from_private_bytes(b"a" * 55) + + with pytest.raises(ValueError): + X448PrivateKey.from_private_bytes(b"a" * 57) + def test_invalid_private_bytes(self, backend): key = X448PrivateKey.generate() with pytest.raises(ValueError): From 7f63e5b65d14dca6c4783d62fa5937a5a5c705e7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 15:52:36 -0600 Subject: [PATCH 527/988] support bytes-like for X25519PrivateKey.from_private_bytes (#4698) yuck. --- .../hazmat/backends/openssl/backend.py | 37 ++++++++++++++++--- tests/hazmat/primitives/test_x25519.py | 9 +++++ 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 8cec64d68273..2db63a271f8b 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -14,6 +14,7 @@ import asn1crypto.core import six +from six.moves import range from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm, _Reasons @@ -2095,7 +2096,8 @@ def x25519_load_public_bytes(self, data): def x25519_load_private_bytes(self, data): # When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 we can - # switch this to EVP_PKEY_new_raw_private_key + # switch this to EVP_PKEY_new_raw_private_key and drop the + # zeroed_bytearray garbage. # OpenSSL only has facilities for loading PKCS8 formatted private # keys using the algorithm identifiers specified in # https://tools.ietf.org/html/draft-ietf-curdle-pkix-09. @@ -2113,8 +2115,12 @@ def x25519_load_private_bytes(self, data): raise ValueError("An X25519 private key is 32 bytes long") pkcs8_prefix = b'0.\x02\x01\x000\x05\x06\x03+en\x04"\x04 ' - bio = self._bytes_to_bio(pkcs8_prefix + data) - evp_pkey = backend._lib.d2i_PrivateKey_bio(bio.bio, self._ffi.NULL) + with self._zeroed_bytearray(48) as ba: + ba[0:16] = pkcs8_prefix + ba[16:] = data + bio = self._bytes_to_bio(ba) + evp_pkey = backend._lib.d2i_PrivateKey_bio(bio.bio, self._ffi.NULL) + self.openssl_assert(evp_pkey != self._ffi.NULL) evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) self.openssl_assert( @@ -2204,6 +2210,26 @@ def aead_cipher_supported(self, cipher): self._lib.EVP_get_cipherbyname(cipher_name) != self._ffi.NULL ) + @contextlib.contextmanager + def _zeroed_bytearray(self, length): + """ + This method creates a bytearray, which we copy data into (hopefully + also from a mutable buffer that can be dynamically erased!), and then + zero when we're done. + """ + ba = bytearray(length) + try: + yield ba + finally: + self._zero_data(ba, length) + + def _zero_data(self, data, length): + # We clear things this way because at the moment we're not + # sure of a better way that can guarantee it overwrites the + # memory of a bytearray and doesn't just replace the underlying char *. + for i in range(length): + data[i] = 0 + @contextlib.contextmanager def _zeroed_null_terminated_buf(self, data): """ @@ -2224,9 +2250,8 @@ def _zeroed_null_terminated_buf(self, data): try: yield buf finally: - # TODO: this could be done with memset to avoid the Python - # bytestring alloc. - self._ffi.memmove(buf, b"\x00" * data_len, data_len) + # Cast to a uint8_t * so we can assign by integer + self._zero_data(self._ffi.cast("uint8_t *", buf), data_len) def load_key_and_certificates_from_pkcs12(self, data, password): if password is not None: diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index f412f2e8835c..17a911548a31 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -258,3 +258,12 @@ def test_round_trip_private_serialization(self, encoding, fmt, encryption, serialized = key.private_bytes(encoding, fmt, encryption) loaded_key = load_func(serialized, passwd, backend) assert isinstance(loaded_key, X25519PrivateKey) + + def test_buffer_protocol(self, backend): + private_bytes = bytearray(os.urandom(32)) + key = X25519PrivateKey.from_private_bytes(private_bytes) + assert key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == private_bytes From 62e22a5fb9d3e093f44b4075c7ddb5807d66409b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 15:53:16 -0600 Subject: [PATCH 528/988] Support byteslike in HKDF and PBKDF2HMAC (#4707) * support byteslike in HKDF * support byteslike in PBKDF2HMAC * add missing docs --- .../primitives/key-derivation-functions.rst | 6 ++-- .../hazmat/backends/openssl/backend.py | 3 +- .../hazmat/primitives/kdf/hkdf.py | 4 +-- .../hazmat/primitives/kdf/pbkdf2.py | 2 +- tests/hazmat/primitives/test_hkdf.py | 28 +++++++++++++++++++ tests/hazmat/primitives/test_pbkdf2hmac.py | 5 ++++ 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index 0f3d1afe0756..373fdbff4f15 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -92,8 +92,9 @@ Different KDFs are suitable for different tasks such as: .. method:: derive(key_material) - :param bytes key_material: The input key material. For PBKDF2 this + :param key_material: The input key material. For PBKDF2 this should be a password. + :type key_material: :term:`bytes-like` :return bytes: the derived key. :raises cryptography.exceptions.AlreadyFinalized: This is raised when :meth:`derive` or @@ -199,7 +200,8 @@ Different KDFs are suitable for different tasks such as: .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 2db63a271f8b..f74c955aa78d 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -297,8 +297,9 @@ def derive_pbkdf2_hmac(self, algorithm, length, salt, iterations, key_material): buf = self._ffi.new("unsigned char[]", length) evp_md = self._evp_md_non_null_from_algorithm(algorithm) + key_material_ptr = self._ffi.from_buffer(key_material) res = self._lib.PKCS5_PBKDF2_HMAC( - key_material, + key_material_ptr, len(key_material), salt, len(salt), diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 27dc9c93af3b..307f91cca777 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -43,7 +43,7 @@ def _extract(self, key_material): return h.finalize() def derive(self, key_material): - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) return self._hkdf_expand.derive(self._extract(key_material)) def verify(self, key_material, expected_key): @@ -98,7 +98,7 @@ def _expand(self, key_material): return b"".join(output)[:self._length] def derive(self, key_material): - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) if self._used: raise AlreadyFinalized diff --git a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py index fbe8964d5547..a47b7bbcb6bb 100644 --- a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -41,7 +41,7 @@ def derive(self, key_material): raise AlreadyFinalized("PBKDF2 instances can only be used once.") self._used = True - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) return self._backend.derive_pbkdf2_hmac( self._algorithm, self._length, diff --git a/tests/hazmat/primitives/test_hkdf.py b/tests/hazmat/primitives/test_hkdf.py index 5d2d18676bd9..195bfb3a4f71 100644 --- a/tests/hazmat/primitives/test_hkdf.py +++ b/tests/hazmat/primitives/test_hkdf.py @@ -171,6 +171,21 @@ def test_derive_long_output(self, backend): assert hkdf.derive(ikm) == binascii.unhexlify(vector["okm"]) + def test_buffer_protocol(self, backend): + vector = load_vectors_from_file( + os.path.join("KDF", "hkdf-generated.txt"), load_nist_vectors + )[0] + hkdf = HKDF( + hashes.SHA256(), + int(vector["l"]), + salt=vector["salt"], + info=vector["info"], + backend=backend + ) + ikm = bytearray(binascii.unhexlify(vector["ikm"])) + + assert hkdf.derive(ikm) == binascii.unhexlify(vector["okm"]) + @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDFExpand(object): @@ -187,6 +202,19 @@ def test_derive(self, backend): assert binascii.hexlify(hkdf.derive(prk)) == okm + def test_buffer_protocol(self, backend): + prk = bytearray(binascii.unhexlify( + b"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5" + )) + + okm = (b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" + b"5bf34007208d5b887185865") + + info = binascii.unhexlify(b"f0f1f2f3f4f5f6f7f8f9") + hkdf = HKDFExpand(hashes.SHA256(), 42, info, backend) + + assert binascii.hexlify(hkdf.derive(prk)) == okm + def test_verify(self, backend): prk = binascii.unhexlify( b"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5" diff --git a/tests/hazmat/primitives/test_pbkdf2hmac.py b/tests/hazmat/primitives/test_pbkdf2hmac.py index d971ebd038ea..0254b2168313 100644 --- a/tests/hazmat/primitives/test_pbkdf2hmac.py +++ b/tests/hazmat/primitives/test_pbkdf2hmac.py @@ -57,6 +57,11 @@ def test_unicode_error_with_key_material(self): with pytest.raises(TypeError): kdf.derive(u"unicode here") + def test_buffer_protocol(self, backend): + kdf = PBKDF2HMAC(hashes.SHA1(), 10, b"salt", 10, default_backend()) + data = bytearray(b"data") + assert kdf.derive(data) == b"\xe9n\xaa\x81\xbbt\xa4\xf6\x08\xce" + def test_invalid_backend(): pretend_backend = object() From 27585690ac8379b711391eb24c466d6ea1786609 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 15:54:00 -0600 Subject: [PATCH 529/988] normalize KBKDF tests (#4708) --- tests/hazmat/primitives/test_kbkdf.py | 75 +++++++++++++-------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/tests/hazmat/primitives/test_kbkdf.py b/tests/hazmat/primitives/test_kbkdf.py index 45a53ac0b3bd..875cd6921b0b 100644 --- a/tests/hazmat/primitives/test_kbkdf.py +++ b/tests/hazmat/primitives/test_kbkdf.py @@ -9,7 +9,7 @@ from cryptography.exceptions import ( AlreadyFinalized, InvalidKey, _Reasons ) -from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.kbkdf import ( CounterLocation, KBKDFHMAC, Mode @@ -19,25 +19,26 @@ from ...utils import raises_unsupported_algorithm +@pytest.mark.requires_backend_interface(interface=HMACBackend) class TestKBKDFHMAC(object): - def test_invalid_key(self): + def test_invalid_key(self, backend): kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) key = kdf.derive(b"material") kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) with pytest.raises(InvalidKey): kdf.verify(b"material2", key) - def test_already_finalized(self): + def test_already_finalized(self, backend): kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) kdf.derive(b'material') @@ -46,7 +47,7 @@ def test_already_finalized(self): kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) key = kdf.derive(b'material') @@ -55,97 +56,95 @@ def test_already_finalized(self): kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) kdf.verify(b'material', key) with pytest.raises(AlreadyFinalized): kdf.verify(b"material", key) - def test_key_length(self): + def test_key_length(self, backend): kdf = KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 85899345920, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) with pytest.raises(ValueError): kdf.derive(b'material') - def test_rlen(self): + def test_rlen(self, backend): with pytest.raises(ValueError): KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 5, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) - def test_r_type(self): + def test_r_type(self, backend): with pytest.raises(TypeError): KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 32, b'r', 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) - def test_l_type(self): + def test_l_type(self, backend): with pytest.raises(TypeError): KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 32, 4, b'l', CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) - def test_l(self): + def test_l(self, backend): with pytest.raises(ValueError): KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 32, 4, None, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) - def test_unsupported_mode(self): + def test_unsupported_mode(self, backend): with pytest.raises(TypeError): KBKDFHMAC(hashes.SHA256(), None, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) - def test_unsupported_location(self): + def test_unsupported_location(self, backend): with pytest.raises(TypeError): KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, None, b'label', b'context', None, - backend=default_backend()) + backend=backend) - def test_unsupported_parameters(self): + def test_unsupported_parameters(self, backend): with pytest.raises(ValueError): KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - b'fixed', backend=default_backend()) + b'fixed', backend=backend) - def test_unsupported_hash(self): + def test_unsupported_hash(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): KBKDFHMAC(object(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) + None, backend=backend) - def test_unsupported_algorithm(self): + def test_unsupported_algorithm(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): KBKDFHMAC(DummyHashAlgorithm(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=default_backend()) - - def test_invalid_backend(self): - mock_backend = object + None, backend=backend) + def test_invalid_backend(self, backend): with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE): KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', b'context', - None, backend=mock_backend()) + None, backend=object()) - def test_unicode_error_label(self): + def test_unicode_error_label(self, backend): with pytest.raises(TypeError): KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, u'label', b'context', - backend=default_backend()) + backend=backend) - def test_unicode_error_context(self): + def test_unicode_error_context(self, backend): with pytest.raises(TypeError): KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', u'context', - None, backend=default_backend()) + None, backend=backend) - def test_unicode_error_key_material(self): + def test_unicode_error_key_material(self, backend): with pytest.raises(TypeError): kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, CounterLocation.BeforeFixed, b'label', - b'context', None, backend=default_backend()) + b'context', None, backend=backend) kdf.derive(u'material') From 2b40f493bf6f9eb131b46d7ab582b89033bcda64 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 15:55:33 -0600 Subject: [PATCH 530/988] support byteslike for OTP (#4710) --- docs/hazmat/primitives/twofactor.rst | 14 ++++++++------ tests/hazmat/primitives/twofactor/test_hotp.py | 5 +++++ tests/hazmat/primitives/twofactor/test_totp.py | 6 ++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/hazmat/primitives/twofactor.rst b/docs/hazmat/primitives/twofactor.rst index b48db5995ab7..51625dfc28e2 100644 --- a/docs/hazmat/primitives/twofactor.rst +++ b/docs/hazmat/primitives/twofactor.rst @@ -41,9 +41,10 @@ codes (HMAC). >>> hotp_value = hotp.generate(0) >>> hotp.verify(hotp_value, 0) - :param bytes key: Per-user secret key. This value must be kept secret - and be at least 128 :term:`bits`. It is recommended that - the key be 160 bits. + :param key: Per-user secret key. This value must be kept secret + and be at least 128 :term:`bits`. It is recommended that + the key be 160 bits. + :type key: :term:`bytes-like` :param int length: Length of generated one time password as ``int``. :param cryptography.hazmat.primitives.hashes.HashAlgorithm algorithm: A :class:`~cryptography.hazmat.primitives.hashes` @@ -163,9 +164,10 @@ similar to the following code. >>> totp_value = totp.generate(time_value) >>> totp.verify(totp_value, time_value) - :param bytes key: Per-user secret key. This value must be kept secret - and be at least 128 :term:`bits`. It is recommended that the - key be 160 bits. + :param key: Per-user secret key. This value must be kept secret + and be at least 128 :term:`bits`. It is recommended that the + key be 160 bits. + :type key: :term:`bytes-like` :param int length: Length of generated one time password as ``int``. :param cryptography.hazmat.primitives.hashes.HashAlgorithm algorithm: A :class:`~cryptography.hazmat.primitives.hashes` diff --git a/tests/hazmat/primitives/twofactor/test_hotp.py b/tests/hazmat/primitives/twofactor/test_hotp.py index 4c561f70f866..14cb08a894f3 100644 --- a/tests/hazmat/primitives/twofactor/test_hotp.py +++ b/tests/hazmat/primitives/twofactor/test_hotp.py @@ -109,6 +109,11 @@ def test_get_provisioning_uri(self, backend): "GNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&issuer=Foo" "&counter=1") + def test_buffer_protocol(self, backend): + key = bytearray(b"a long key with lots of entropy goes here") + hotp = HOTP(key, 6, SHA1(), backend) + assert hotp.generate(10) == b"559978" + def test_invalid_backend(): secret = b"12345678901234567890" diff --git a/tests/hazmat/primitives/twofactor/test_totp.py b/tests/hazmat/primitives/twofactor/test_totp.py index 95829713c621..59d875afe455 100644 --- a/tests/hazmat/primitives/twofactor/test_totp.py +++ b/tests/hazmat/primitives/twofactor/test_totp.py @@ -139,6 +139,12 @@ def test_get_provisioning_uri(self, backend): "DGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&algorithm=SHA1&issuer=World" "&period=30") + def test_buffer_protocol(self, backend): + key = bytearray(b"a long key with lots of entropy goes here") + totp = TOTP(key, 8, hashes.SHA512(), 30, backend) + time = 60 + assert totp.generate(time) == b"53049576" + def test_invalid_backend(): secret = b"12345678901234567890" From a77994408da328e6b0fba331211be9ad2db5c5b6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 15:56:23 -0600 Subject: [PATCH 531/988] support byteslike in ConcatKDF{HMAC,Hash}, Scrypt, and X963KDF (#4709) * byteslike concatkdf * byteslike scrypt * byteslike x963kdf --- .../primitives/key-derivation-functions.rst | 9 +++-- .../hazmat/backends/openssl/backend.py | 3 +- .../hazmat/primitives/kdf/concatkdf.py | 2 +- .../hazmat/primitives/kdf/scrypt.py | 2 +- .../hazmat/primitives/kdf/x963kdf.py | 2 +- tests/hazmat/primitives/test_concatkdf.py | 35 +++++++++++++++++++ tests/hazmat/primitives/test_scrypt.py | 13 +++++++ tests/hazmat/primitives/test_x963kdf.py | 11 ++++++ 8 files changed, 70 insertions(+), 7 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index 373fdbff4f15..64a22c0e34c8 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -377,7 +377,8 @@ Different KDFs are suitable for different tasks such as: .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. @@ -562,7 +563,8 @@ Different KDFs are suitable for different tasks such as: .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. @@ -813,7 +815,8 @@ Different KDFs are suitable for different tasks such as: .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: the derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index f74c955aa78d..ab0daa288970 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2181,8 +2181,9 @@ def x448_supported(self): def derive_scrypt(self, key_material, salt, length, n, r, p): buf = self._ffi.new("unsigned char[]", length) + key_material_ptr = self._ffi.from_buffer(key_material) res = self._lib.EVP_PBE_scrypt( - key_material, len(key_material), salt, len(salt), n, r, p, + key_material_ptr, len(key_material), salt, len(salt), n, r, p, scrypt._MEM_LIMIT, buf, length ) if res != 1: diff --git a/src/cryptography/hazmat/primitives/kdf/concatkdf.py b/src/cryptography/hazmat/primitives/kdf/concatkdf.py index 89c3b282969a..65b25cdc2329 100644 --- a/src/cryptography/hazmat/primitives/kdf/concatkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/concatkdf.py @@ -32,7 +32,7 @@ def _common_args_checks(algorithm, length, otherinfo): def _concatkdf_derive(key_material, length, auxfn, otherinfo): - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) output = [b""] outlen = 0 counter = 1 diff --git a/src/cryptography/hazmat/primitives/kdf/scrypt.py b/src/cryptography/hazmat/primitives/kdf/scrypt.py index 44e369fba3d3..df9745e68917 100644 --- a/src/cryptography/hazmat/primitives/kdf/scrypt.py +++ b/src/cryptography/hazmat/primitives/kdf/scrypt.py @@ -52,7 +52,7 @@ def derive(self, key_material): raise AlreadyFinalized("Scrypt instances can only be used once.") self._used = True - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) return self._backend.derive_scrypt( key_material, self._salt, self._length, self._n, self._r, self._p ) diff --git a/src/cryptography/hazmat/primitives/kdf/x963kdf.py b/src/cryptography/hazmat/primitives/kdf/x963kdf.py index a8c077519168..fd9d125e79c7 100644 --- a/src/cryptography/hazmat/primitives/kdf/x963kdf.py +++ b/src/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -46,7 +46,7 @@ def derive(self, key_material): if self._used: raise AlreadyFinalized self._used = True - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) output = [b""] outlen = 0 counter = 1 diff --git a/tests/hazmat/primitives/test_concatkdf.py b/tests/hazmat/primitives/test_concatkdf.py index aa568c1faa3a..673150999865 100644 --- a/tests/hazmat/primitives/test_concatkdf.py +++ b/tests/hazmat/primitives/test_concatkdf.py @@ -52,6 +52,22 @@ def test_derive(self, backend): assert ckdf.derive(prk) == okm + def test_buffer_protocol(self, backend): + prk = binascii.unhexlify( + b"52169af5c485dcc2321eb8d26d5efa21fb9b93c98e38412ee2484cf14f0d0d23" + ) + + okm = binascii.unhexlify(b"1c3bc9e7c4547c5191c0d478cccaed55") + + oinfo = binascii.unhexlify( + b"a1b2c3d4e53728157e634612c12d6d5223e204aeea4341565369647bd184bcd2" + b"46f72971f292badaa2fe4124612cba" + ) + + ckdf = ConcatKDFHash(hashes.SHA256(), 16, oinfo, backend) + + assert ckdf.derive(bytearray(prk)) == okm + def test_verify(self, backend): prk = binascii.unhexlify( b"52169af5c485dcc2321eb8d26d5efa21fb9b93c98e38412ee2484cf14f0d0d23" @@ -158,6 +174,25 @@ def test_derive(self, backend): assert ckdf.derive(prk) == okm + def test_buffer_protocol(self, backend): + prk = binascii.unhexlify( + b"013951627c1dea63ea2d7702dd24e963eef5faac6b4af7e4" + b"b831cde499dff1ce45f6179f741c728aa733583b02409208" + b"8f0af7fce1d045edbc5790931e8d5ca79c73" + ) + + okm = binascii.unhexlify(b"64ce901db10d558661f10b6836a122a7" + b"605323ce2f39bf27eaaac8b34cf89f2f") + + oinfo = binascii.unhexlify( + b"a1b2c3d4e55e600be5f367e0e8a465f4bf2704db00c9325c" + b"9fbd216d12b49160b2ae5157650f43415653696421e68e" + ) + + ckdf = ConcatKDFHMAC(hashes.SHA512(), 32, None, oinfo, backend) + + assert ckdf.derive(bytearray(prk)) == okm + def test_derive_explicit_salt(self, backend): prk = binascii.unhexlify( b"013951627c1dea63ea2d7702dd24e963eef5faac6b4af7e4" diff --git a/tests/hazmat/primitives/test_scrypt.py b/tests/hazmat/primitives/test_scrypt.py index 25d2c6152946..8f3a14edc569 100644 --- a/tests/hazmat/primitives/test_scrypt.py +++ b/tests/hazmat/primitives/test_scrypt.py @@ -108,6 +108,19 @@ def test_password_not_bytes(self, backend): with pytest.raises(TypeError): scrypt.derive(password) + def test_buffer_protocol(self, backend): + password = bytearray(b"password") + work_factor = 256 + block_size = 8 + parallelization_factor = 16 + length = 10 + salt = b"NaCl" + + scrypt = Scrypt(salt, length, work_factor, block_size, + parallelization_factor, backend) + + assert scrypt.derive(password) == b'\xf4\x92\x86\xb2\x06\x0c\x848W\x87' + @pytest.mark.parametrize("params", vectors) def test_verify(self, backend, params): _skip_if_memory_limited(_MEM_LIMIT, params) diff --git a/tests/hazmat/primitives/test_x963kdf.py b/tests/hazmat/primitives/test_x963kdf.py index d87a46b831d9..c4dd892522c4 100644 --- a/tests/hazmat/primitives/test_x963kdf.py +++ b/tests/hazmat/primitives/test_x963kdf.py @@ -45,6 +45,17 @@ def test_derive(self, backend): assert xkdf.derive(key) == derivedkey + def test_buffer_protocol(self, backend): + key = bytearray(binascii.unhexlify( + b"96c05619d56c328ab95fe84b18264b08725b85e33fd34f08" + )) + + derivedkey = binascii.unhexlify(b"443024c3dae66b95e6f5670601558f71") + + xkdf = X963KDF(hashes.SHA256(), 16, None, backend) + + assert xkdf.derive(key) == derivedkey + def test_verify(self, backend): key = binascii.unhexlify( b"22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d" From 7f8d9c06ef386a9187aed3eaa4d29a88f11f8c7c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 18:13:11 -0600 Subject: [PATCH 532/988] support byteslike in KBKDFHMAC (#4711) --- docs/hazmat/primitives/key-derivation-functions.rst | 3 ++- src/cryptography/hazmat/primitives/kdf/kbkdf.py | 2 +- tests/hazmat/primitives/test_kbkdf.py | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index 64a22c0e34c8..be03b19cb8c7 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -690,7 +690,8 @@ Different KDFs are suitable for different tasks such as: .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. diff --git a/src/cryptography/hazmat/primitives/kdf/kbkdf.py b/src/cryptography/hazmat/primitives/kdf/kbkdf.py index 74fe9e2940d0..56783a85cc5d 100644 --- a/src/cryptography/hazmat/primitives/kdf/kbkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/kbkdf.py @@ -100,7 +100,7 @@ def derive(self, key_material): if self._used: raise AlreadyFinalized - utils._check_bytes("key_material", key_material) + utils._check_byteslike("key_material", key_material) self._used = True # inverse floor division (equivalent to ceiling) diff --git a/tests/hazmat/primitives/test_kbkdf.py b/tests/hazmat/primitives/test_kbkdf.py index 875cd6921b0b..a16f1768dd50 100644 --- a/tests/hazmat/primitives/test_kbkdf.py +++ b/tests/hazmat/primitives/test_kbkdf.py @@ -148,3 +148,11 @@ def test_unicode_error_key_material(self, backend): CounterLocation.BeforeFixed, b'label', b'context', None, backend=backend) kdf.derive(u'material') + + def test_buffer_protocol(self, backend): + kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 10, 4, 4, + CounterLocation.BeforeFixed, b'label', b'context', + None, backend=backend) + + key = kdf.derive(bytearray(b"material")) + assert key == b'\xb7\x01\x05\x98\xf5\x1a\x12L\xc7.' From 610ad37a3043e173b32161614d406de31bdf6b12 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Jan 2019 18:24:14 -0600 Subject: [PATCH 533/988] changelog for byteslike (#4712) * changelog for byteslike * bertter prose --- CHANGELOG.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 307f15510c3c..bf4278c8b7a3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,9 @@ Changelog well. If you still need this deprecated path please install cryptography with the ``idna`` extra: ``pip install cryptography[idna]``. * **BACKWARDS INCOMPATIBLE:** The minimum supported PyPy version is now 5.4. +* Numerous classes and functions have been updated to allow :term:`bytes-like` + types for keying material and passwords, including symmetric algorithms, AEAD + ciphers, KDFs, loading asymmetric keys, and one time password classes. * Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA512_224` and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using OpenSSL 1.1.1. From d7c0c14922d4abab1e7ecd3de1b7f3ce08e77ef5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 17 Jan 2019 21:32:08 -0500 Subject: [PATCH 534/988] Bump this way up and see if it helps (#4713) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 39fa4f18661b..b152bf11ebbe 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -176,7 +176,7 @@ # Retry requests in the linkcheck builder so that we're resillient against # transient network errors. -linkcheck_retries = 5 +linkcheck_retries = 10 linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL From bef31146c3b12443fafdd1ef1a6a3c4519c60661 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 18 Jan 2019 13:14:59 -0500 Subject: [PATCH 535/988] Fixed #4700 -- linkify method in changelog (#4715) * Fixed #4700 -- linkify method in changelog * fixed linkification * oxford comma * line length --- CHANGELOG.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index bf4278c8b7a3..5acc0503ebbe 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -29,10 +29,12 @@ Changelog * Added initial support for parsing PKCS12 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_key_and_certificates`. * Added support for :class:`~cryptography.x509.IssuingDistributionPoint`. -* Added `rfc4514_string()` method to :class:`~cryptography.x509.Name`, - :class:`~cryptography.x509.RelativeDistinguishedName` and - :class:`~cryptography.x509.NameAttribute` to format the name or component as - a RFC 4514 Distinguished Name string. +* Added ``rfc4514_string()`` method to + :meth:`x509.Name `, + :meth:`x509.RelativeDistinguishedName + `, and + :meth:`x509.NameAttribute ` + to format the name or component an :rfc:`4514` Distinguished Name string. * Added :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.from_encoded_point`, which immediately checks if the point is on the curve and supports compressed From e5463ccb335149da72e455473af920b1dea453cf Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 18 Jan 2019 15:19:34 -0600 Subject: [PATCH 536/988] consistently linky RFC in the docs (#4716) * consistently linky RFC in the docs * oops --- docs/development/custom-vectors/arc4.rst | 4 ++-- docs/development/custom-vectors/hkdf.rst | 2 +- docs/development/test-vectors.rst | 2 +- docs/x509/reference.rst | 9 ++++----- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/development/custom-vectors/arc4.rst b/docs/development/custom-vectors/arc4.rst index ed8cd5483810..5b1b65d56d85 100644 --- a/docs/development/custom-vectors/arc4.rst +++ b/docs/development/custom-vectors/arc4.rst @@ -2,14 +2,14 @@ ARC4 vector creation ==================== This page documents the code that was used to generate the ARC4 test -vectors for key lengths not available in RFC 6229. All the vectors +vectors for key lengths not available in :rfc:`6229`. All the vectors were generated using OpenSSL and verified with Go. Creation -------- ``cryptography`` was modified to support ARC4 key lengths not listed -in RFC 6229. Then the following Python script was run to generate the +in :rfc:`6229`. Then the following Python script was run to generate the vector files. .. literalinclude:: /development/custom-vectors/arc4/generate_arc4.py diff --git a/docs/development/custom-vectors/hkdf.rst b/docs/development/custom-vectors/hkdf.rst index 0e1a729ab900..6d7e8618bf8a 100644 --- a/docs/development/custom-vectors/hkdf.rst +++ b/docs/development/custom-vectors/hkdf.rst @@ -2,7 +2,7 @@ HKDF vector creation ==================== This page documents the code that was used to generate a longer -HKDF test vector (1200 bytes) than is available in RFC 5869. All +HKDF test vector (1200 bytes) than is available in :rfc:`5869`. All the vectors were generated using OpenSSL and verified with Go. Creation diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 6d4d3d1fafe6..df1ecfa20505 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -154,7 +154,7 @@ Key exchange Diffie-Hellman parameters and key respectively. The keys were generated using OpenSSL following `DHKE`_ guide. When creating the parameters we added the `-pkeyopt dh_rfc5114:2` option to use - RFC5114 2048 bit DH parameters with 224 bit subgroup. + :rfc:`5114` 2048 bit DH parameters with 224 bit subgroup. ``vectors/cryptography_vectors/asymmetric/DH/dhkey_rfc5114_2.txt`` contains all parameter in text. ``vectors/cryptography_vectors/asymmetric/DH/dhp_rfc5114_2.der``, diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 6b2f74cfd01b..b2278d57f768 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1250,7 +1250,7 @@ X.509 CSR (Certificate Signing Request) Builder Object .. versionadded:: 2.5 - :return str: Format the given name as a `RFC 4514`_ Distinguished Name + :return str: Format the given name as a :rfc:`4514` Distinguished Name string, for example ``CN=mydomain.com,O=My Org,C=US``. @@ -1291,7 +1291,7 @@ X.509 CSR (Certificate Signing Request) Builder Object .. versionadded:: 2.5 - :return str: Format the given attribute as a `RFC 4514`_ Distinguished + :return str: Format the given attribute as a :rfc:`4514` Distinguished Name string. @@ -1314,7 +1314,7 @@ X.509 CSR (Certificate Signing Request) Builder Object .. versionadded:: 2.5 - :return str: Format the given RDN set as a `RFC 4514`_ Distinguished + :return str: Format the given RDN set as a :rfc:`4514` Distinguished Name string. @@ -1331,7 +1331,6 @@ X.509 CSR (Certificate Signing Request) Builder Object The dotted string value of the OID (e.g. ``"2.5.4.3"``) -.. _`RFC 4514`: https://tools.ietf.org/html/rfc4514 .. _general_name_classes: @@ -2794,7 +2793,7 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.2.840.113549.1.1.10"``. This is signed by an RSA key using the Probabilistic Signature Scheme (PSS) - padding from RFC 4055. The hash function and padding are defined by + padding from :rfc:`4055`. The hash function and padding are defined by signature algorithm parameters. .. attribute:: ECDSA_WITH_SHA1 From fdc61a26ea32e2563dfcbe17484b6e662d7f1e0a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 19 Jan 2019 00:50:48 -0600 Subject: [PATCH 537/988] expose the ed448 nid (#4717) we already did all the conditional binding, but forgot to actually expose it. --- src/_cffi_src/openssl/nid.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index bf445aa86e17..4117b933a151 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -97,6 +97,7 @@ static const int NID_X25519; static const int NID_X448; static const int NID_ED25519; +static const int NID_ED448; static const int NID_wap_wsg_idm_ecid_wtls1; static const int NID_wap_wsg_idm_ecid_wtls3; static const int NID_wap_wsg_idm_ecid_wtls4; From 5fe88ea0500c6e418492f4b166c0d4a24e9632cc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 19 Jan 2019 00:52:43 -0600 Subject: [PATCH 538/988] shake128/256 support (#4611) * shake128/256 support * remove block_size * doc an exception * change how we detect XOF by adding _xof attribute * interface! * review feedback --- CHANGELOG.rst | 3 + .../primitives/cryptographic-hashes.rst | 30 ++++++++ docs/spelling_wordlist.txt | 1 + .../hazmat/backends/openssl/hashes.py | 25 ++++-- src/cryptography/hazmat/primitives/hashes.py | 41 ++++++++++ tests/hazmat/primitives/test_hash_vectors.py | 77 ++++++++++++++++++- tests/hazmat/primitives/test_hashes.py | 21 +++++ tests/utils.py | 2 +- 8 files changed, 192 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5acc0503ebbe..2f5c802e27e6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -26,6 +26,9 @@ Changelog 1.1.1. * Added support for :doc:`/hazmat/primitives/asymmetric/x448` when using OpenSSL 1.1.1. +* Added support for :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` + and :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` when using + OpenSSL 1.1.1. * Added initial support for parsing PKCS12 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_key_and_certificates`. * Added support for :class:`~cryptography.x509.IssuingDistributionPoint`. diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index bc9793656604..24cc70b5e436 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -185,6 +185,36 @@ than SHA-2 so at this time most users should choose SHA-2. SHA3/512 is a cryptographic hash function from the SHA-3 family and is standardized by NIST. It produces a 512-bit message digest. +.. class:: SHAKE128(digest_size) + + .. versionadded:: 2.5 + + SHAKE128 is an extendable output function (XOF) based on the same core + permutations as SHA3. It allows the caller to obtain an arbitrarily long + digest length. Longer lengths, however, do not increase security or + collision resistance and lengths shorter than 128 bit (16 bytes) will + decrease it. + + :param int digest_size: The length of output desired. Must be greater than + zero. + + :raises ValueError: If the ``digest_size`` is invalid. + +.. class:: SHAKE256(digest_size) + + .. versionadded:: 2.5 + + SHAKE256 is an extendable output function (XOF) based on the same core + permutations as SHA3. It allows the caller to obtain an arbitrarily long + digest length. Longer lengths, however, do not increase security or + collision resistance and lengths shorter than 256 bit (32 bytes) will + decrease it. + + :param int digest_size: The length of output desired. Must be greater than + zero. + + :raises ValueError: If the ``digest_size`` is invalid. + SHA-1 ~~~~~ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 4614421466b9..7e08f1241342 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -41,6 +41,7 @@ Docstrings El Encodings endian +extendable fallback Fernet fernet diff --git a/src/cryptography/hazmat/backends/openssl/hashes.py b/src/cryptography/hazmat/backends/openssl/hashes.py index e9a50705bf2e..549fa2bf5dee 100644 --- a/src/cryptography/hazmat/backends/openssl/hashes.py +++ b/src/cryptography/hazmat/backends/openssl/hashes.py @@ -54,10 +54,25 @@ def update(self, data): self._backend.openssl_assert(res != 0) def finalize(self): + if isinstance(self.algorithm, hashes.ExtendableOutputFunction): + # extendable output functions use a different finalize + return self._finalize_xof() + else: + buf = self._backend._ffi.new("unsigned char[]", + self._backend._lib.EVP_MAX_MD_SIZE) + outlen = self._backend._ffi.new("unsigned int *") + res = self._backend._lib.EVP_DigestFinal_ex(self._ctx, buf, outlen) + self._backend.openssl_assert(res != 0) + self._backend.openssl_assert( + outlen[0] == self.algorithm.digest_size + ) + return self._backend._ffi.buffer(buf)[:outlen[0]] + + def _finalize_xof(self): buf = self._backend._ffi.new("unsigned char[]", - self._backend._lib.EVP_MAX_MD_SIZE) - outlen = self._backend._ffi.new("unsigned int *") - res = self._backend._lib.EVP_DigestFinal_ex(self._ctx, buf, outlen) + self.algorithm.digest_size) + res = self._backend._lib.EVP_DigestFinalXOF( + self._ctx, buf, self.algorithm.digest_size + ) self._backend.openssl_assert(res != 0) - self._backend.openssl_assert(outlen[0] == self.algorithm.digest_size) - return self._backend._ffi.buffer(buf)[:outlen[0]] + return self._backend._ffi.buffer(buf)[:self.algorithm.digest_size] diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 0d6e47fb7eb6..9be2b60090a5 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -57,6 +57,13 @@ def copy(self): """ +@six.add_metaclass(abc.ABCMeta) +class ExtendableOutputFunction(object): + """ + An interface for extendable output functions. + """ + + @utils.register_interface(HashContext) class Hash(object): def __init__(self, algorithm, backend, ctx=None): @@ -173,6 +180,40 @@ class SHA3_512(object): # noqa: N801 digest_size = 64 +@utils.register_interface(HashAlgorithm) +@utils.register_interface(ExtendableOutputFunction) +class SHAKE128(object): + name = "shake128" + + def __init__(self, digest_size): + if not isinstance(digest_size, six.integer_types): + raise TypeError("digest_size must be an integer") + + if digest_size < 1: + raise ValueError("digest_size must be a positive integer") + + self._digest_size = digest_size + + digest_size = utils.read_only_property("_digest_size") + + +@utils.register_interface(HashAlgorithm) +@utils.register_interface(ExtendableOutputFunction) +class SHAKE256(object): + name = "shake256" + + def __init__(self, digest_size): + if not isinstance(digest_size, six.integer_types): + raise TypeError("digest_size must be an integer") + + if digest_size < 1: + raise ValueError("digest_size must be a positive integer") + + self._digest_size = digest_size + + digest_size = utils.read_only_property("_digest_size") + + @utils.register_interface(HashAlgorithm) class MD5(object): name = "md5" diff --git a/tests/hazmat/primitives/test_hash_vectors.py b/tests/hazmat/primitives/test_hash_vectors.py index f8561fcd4d85..5225a00be87b 100644 --- a/tests/hazmat/primitives/test_hash_vectors.py +++ b/tests/hazmat/primitives/test_hash_vectors.py @@ -4,6 +4,7 @@ from __future__ import absolute_import, division, print_function +import binascii import os import pytest @@ -11,8 +12,8 @@ from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import hashes -from .utils import generate_hash_test -from ...utils import load_hash_vectors +from .utils import _load_all_params, generate_hash_test +from ...utils import load_hash_vectors, load_nist_vectors @pytest.mark.supported( @@ -250,3 +251,75 @@ class TestSHA3512(object): ], hashes.SHA3_512(), ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported( + hashes.SHAKE128(digest_size=16)), + skip_message="Does not support SHAKE128", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHAKE128(object): + test_shake128 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHAKE"), + [ + "SHAKE128LongMsg.rsp", + "SHAKE128ShortMsg.rsp", + ], + hashes.SHAKE128(digest_size=16), + ) + + @pytest.mark.parametrize( + "vector", + _load_all_params( + os.path.join("hashes", "SHAKE"), + [ + "SHAKE128VariableOut.rsp", + ], + load_nist_vectors, + ) + ) + def test_shake128_variable(self, vector, backend): + output_length = int(vector['outputlen']) // 8 + msg = binascii.unhexlify(vector['msg']) + shake = hashes.SHAKE128(digest_size=output_length) + m = hashes.Hash(shake, backend=backend) + m.update(msg) + assert m.finalize() == binascii.unhexlify(vector['output']) + + +@pytest.mark.supported( + only_if=lambda backend: backend.hash_supported( + hashes.SHAKE256(digest_size=32)), + skip_message="Does not support SHAKE256", +) +@pytest.mark.requires_backend_interface(interface=HashBackend) +class TestSHAKE256(object): + test_shake256 = generate_hash_test( + load_hash_vectors, + os.path.join("hashes", "SHAKE"), + [ + "SHAKE256LongMsg.rsp", + "SHAKE256ShortMsg.rsp", + ], + hashes.SHAKE256(digest_size=32), + ) + + @pytest.mark.parametrize( + "vector", + _load_all_params( + os.path.join("hashes", "SHAKE"), + [ + "SHAKE256VariableOut.rsp", + ], + load_nist_vectors, + ) + ) + def test_shake256_variable(self, vector, backend): + output_length = int(vector['outputlen']) // 8 + msg = binascii.unhexlify(vector['msg']) + shake = hashes.SHAKE256(digest_size=output_length) + m = hashes.Hash(shake, backend=backend) + m.update(msg) + assert m.finalize() == binascii.unhexlify(vector['output']) diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index 6cba84b5e960..b10fadcdcc75 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -179,3 +179,24 @@ def test_buffer_protocol_hash(backend): assert h.finalize() == binascii.unhexlify( b"dff2e73091f6c05e528896c4c831b9448653dc2ff043528f6769437bc7b975c2" ) + + +class TestSHAKE(object): + @pytest.mark.parametrize( + "xof", + [hashes.SHAKE128, hashes.SHAKE256] + ) + def test_invalid_digest_type(self, xof): + with pytest.raises(TypeError): + xof(digest_size=object()) + + @pytest.mark.parametrize( + "xof", + [hashes.SHAKE128, hashes.SHAKE256] + ) + def test_invalid_digest_size(self, xof): + with pytest.raises(ValueError): + xof(digest_size=-5) + + with pytest.raises(ValueError): + xof(digest_size=0) diff --git a/tests/utils.py b/tests/utils.py index 364a349b0bbf..b48128083fda 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -134,7 +134,7 @@ def load_hash_vectors(vector_data): # string as hex 00, which is of course not actually an empty # string. So we parse the provided length and catch this edge case. msg = line.split(" = ")[1].encode("ascii") if length > 0 else b"" - elif line.startswith("MD"): + elif line.startswith("MD") or line.startswith("Output"): md = line.split(" = ")[1] # after MD is found the Msg+MD (+ potential key) tuple is complete if key is not None: From a07b1f5463361570c3248c1096ffd8b3bff0bfa5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 20 Jan 2019 15:02:59 -0600 Subject: [PATCH 539/988] add support for encoding compressed points (#4638) * add support for encoding compressed points * review feedback --- CHANGELOG.rst | 2 + docs/hazmat/primitives/asymmetric/ec.rst | 16 +++-- .../primitives/asymmetric/serialization.rst | 22 +++++++ .../hazmat/backends/openssl/backend.py | 11 ++++ .../hazmat/backends/openssl/ec.py | 57 +++++++++++++++--- .../hazmat/primitives/serialization/base.py | 3 + tests/hazmat/primitives/test_dh.py | 23 ++++++-- tests/hazmat/primitives/test_dsa.py | 22 +++++-- tests/hazmat/primitives/test_ec.py | 59 ++++++++++++++++--- tests/hazmat/primitives/test_rsa.py | 25 ++++++-- 10 files changed, 207 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2f5c802e27e6..88e2aaf58d60 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -49,6 +49,8 @@ Changelog additional serialization methods. Calling :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` with no arguments has been deprecated. +* Added support for encoding compressed and uncompressed points via + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.public_bytes`. .. _v2-4-2: diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index bd618551fc31..a356dcaa17cb 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -668,12 +668,20 @@ Key Interfaces .. method:: public_bytes(encoding, format) - Allows serialization of the key to bytes. Encoding ( - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` or + Allows serialization of the key data to bytes. When encoding the public + key the encodings ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`) and format ( :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`) - are chosen to define the exact serialization. + are chosen to define the exact serialization. When encoding the point + the encoding + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.X962` + should be used with the formats ( + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.UncompressedPoint` + or + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.CompressedPoint` + ). :param encoding: A value from the :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. @@ -681,7 +689,7 @@ Key Interfaces :param format: A value from the :class:`~cryptography.hazmat.primitives.serialization.PublicFormat` enum. - :return bytes: Serialized key. + :return bytes: Serialized data. .. method:: verify(signature, data, signature_algorithm) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 4c2e5f2a883e..87a6372ca46b 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -536,6 +536,20 @@ Serialization Formats A raw format used by :doc:`/hazmat/primitives/asymmetric/x448`. It is a binary format and is invalid for other key types. + .. attribute:: CompressedPoint + + .. versionadded:: 2.5 + + A compressed elliptic curve public key as defined in ANSI X9.62 section + 4.3.6 (as well as `SEC 1 v2.0`_). + + .. attribute:: UncompressedPoint + + .. versionadded:: 2.5 + + An uncompressed elliptic curve public key as defined in ANSI X9.62 + section 4.3.6 (as well as `SEC 1 v2.0`_). + .. class:: ParameterFormat .. versionadded:: 2.0 @@ -594,6 +608,13 @@ Serialization Encodings A raw format used by :doc:`/hazmat/primitives/asymmetric/x448`. It is a binary format and is invalid for other key types. + .. attribute:: X962 + + .. versionadded:: 2.5 + + The format used by elliptic curve point encodings. This is a binary + format. + Serialization Encryption Types ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -626,3 +647,4 @@ Serialization Encryption Types .. _`PKCS3`: https://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-3-diffie-hellman-key-agreement-standar.htm +.. _`SEC 1 v2.0`: http://www.secg.org/sec1-v2.pdf diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ab0daa288970..b5232ba0329a 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1690,6 +1690,10 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, "format must be an item from the PrivateFormat enum" ) + # X9.62 encoding is only valid for EC public keys + if encoding is serialization.Encoding.X962: + raise ValueError("X9.62 format is only valid for EC public keys") + # Raw format and encoding are only valid for X25519, Ed25519, X448, and # Ed448 keys. We capture those cases before this method is called so if # we see those enum values here it means the caller has passed them to @@ -1792,6 +1796,13 @@ def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): if not isinstance(encoding, serialization.Encoding): raise TypeError("encoding must be an item from the Encoding enum") + # Compressed/UncompressedPoint are only valid for EC keys and those + # cases are handled by the ECPublicKey public_bytes method before this + # method is called + if format in (serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint): + raise ValueError("Point formats are not valid for this key type") + # Raw format and encoding are only valid for X25519, Ed25519, X448, and # Ed448 keys. We capture those cases before this method is called so if # we see those enum values here it means the caller has passed them to diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index 852b49186697..a8d69bdf9f84 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -275,19 +275,62 @@ def public_numbers(self): curve=self._curve ) + def _encode_point(self, format): + if format is serialization.PublicFormat.CompressedPoint: + conversion = self._backend._lib.POINT_CONVERSION_COMPRESSED + else: + assert format is serialization.PublicFormat.UncompressedPoint + conversion = self._backend._lib.POINT_CONVERSION_UNCOMPRESSED + + group = self._backend._lib.EC_KEY_get0_group(self._ec_key) + self._backend.openssl_assert(group != self._backend._ffi.NULL) + point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) + self._backend.openssl_assert(point != self._backend._ffi.NULL) + with self._backend._tmp_bn_ctx() as bn_ctx: + buflen = self._backend._lib.EC_POINT_point2oct( + group, point, conversion, self._backend._ffi.NULL, 0, bn_ctx + ) + self._backend.openssl_assert(buflen > 0) + buf = self._backend._ffi.new("char[]", buflen) + res = self._backend._lib.EC_POINT_point2oct( + group, point, conversion, buf, buflen, bn_ctx + ) + self._backend.openssl_assert(buflen == res) + + return self._backend._ffi.buffer(buf)[:] + def public_bytes(self, encoding, format): if format is serialization.PublicFormat.PKCS1: raise ValueError( "EC public keys do not support PKCS1 serialization" ) - return self._backend._public_key_bytes( - encoding, - format, - self, - self._evp_pkey, - None - ) + if ( + encoding is serialization.Encoding.X962 or + format is serialization.PublicFormat.CompressedPoint or + format is serialization.PublicFormat.UncompressedPoint + ): + if ( + encoding is not serialization.Encoding.X962 or + format not in ( + serialization.PublicFormat.CompressedPoint, + serialization.PublicFormat.UncompressedPoint + ) + ): + raise ValueError( + "X962 encoding must be used with CompressedPoint or " + "UncompressedPoint format" + ) + + return self._encode_point(format) + else: + return self._backend._public_key_bytes( + encoding, + format, + self, + self._evp_pkey, + None + ) def verify(self, signature, data, signature_algorithm): _check_signature_algorithm(signature_algorithm) diff --git a/src/cryptography/hazmat/primitives/serialization/base.py b/src/cryptography/hazmat/primitives/serialization/base.py index 1670fd18b660..4218ea8244ee 100644 --- a/src/cryptography/hazmat/primitives/serialization/base.py +++ b/src/cryptography/hazmat/primitives/serialization/base.py @@ -41,6 +41,7 @@ class Encoding(Enum): DER = "DER" OpenSSH = "OpenSSH" Raw = "Raw" + X962 = "ANSI X9.62" class PrivateFormat(Enum): @@ -54,6 +55,8 @@ class PublicFormat(Enum): PKCS1 = "Raw PKCS#1" OpenSSH = "OpenSSH" Raw = "Raw" + CompressedPoint = "X9.62 Compressed Point" + UncompressedPoint = "X9.62 Uncompressed Point" class ParameterFormat(Enum): diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index c63e520f8d07..c667cd16e1a6 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import binascii +import itertools import os import pytest @@ -430,9 +431,10 @@ def test_private_bytes_unencrypted(self, backend, encoding, (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), (serialization.Encoding.DER, serialization.PrivateFormat.Raw), (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + (serialization.Encoding.X962, serialization.PrivateFormat.PKCS8), ] ) - def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): parameters = dh.generate_parameters(2, 512, backend) key = parameters.generate_private_key() with pytest.raises(ValueError): @@ -823,15 +825,26 @@ def test_public_bytes_values(self, param_path, loader_func, @pytest.mark.parametrize( ("encoding", "fmt"), [ - (serialization.Encoding.Raw, serialization.PublicFormat.Raw), - (serialization.Encoding.PEM, serialization.PublicFormat.Raw), ( serialization.Encoding.Raw, serialization.PublicFormat.SubjectPublicKeyInfo ), - ] + (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), + ] + list(itertools.product( + [ + serialization.Encoding.Raw, + serialization.Encoding.X962, + serialization.Encoding.PEM, + serialization.Encoding.DER + ], + [ + serialization.PublicFormat.Raw, + serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint + ] + )) ) - def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): parameters = dh.generate_parameters(2, 512, backend) key = parameters.generate_private_key().public_key() with pytest.raises(ValueError): diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 5d2f1bd8d704..efd2239c162d 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -719,9 +719,10 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), (serialization.Encoding.DER, serialization.PrivateFormat.Raw), (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + (serialization.Encoding.X962, serialization.PrivateFormat.PKCS8), ] ) - def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): key = DSA_KEY_1024.private_key(backend) with pytest.raises(ValueError): key.private_bytes(encoding, fmt, serialization.NoEncryption()) @@ -968,15 +969,26 @@ def test_public_bytes_pkcs1_unsupported(self, backend): @pytest.mark.parametrize( ("encoding", "fmt"), [ - (serialization.Encoding.Raw, serialization.PublicFormat.Raw), - (serialization.Encoding.PEM, serialization.PublicFormat.Raw), ( serialization.Encoding.Raw, serialization.PublicFormat.SubjectPublicKeyInfo ), - ] + (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), + ] + list(itertools.product( + [ + serialization.Encoding.Raw, + serialization.Encoding.X962, + serialization.Encoding.PEM, + serialization.Encoding.DER + ], + [ + serialization.PublicFormat.Raw, + serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint + ] + )) ) - def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): key = DSA_KEY_2048.private_key(backend).public_key() with pytest.raises(ValueError): key.public_bytes(encoding, fmt) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 830d89a0a57b..471ef267db8b 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -711,9 +711,10 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), (serialization.Encoding.DER, serialization.PrivateFormat.Raw), (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + (serialization.Encoding.X962, serialization.PrivateFormat.PKCS8), ] ) - def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) key = ec.generate_private_key(ec.SECP256R1(), backend) with pytest.raises(ValueError): @@ -1001,13 +1002,27 @@ def test_public_bytes_invalid_encoding(self, backend): @pytest.mark.parametrize( ("encoding", "fmt"), - [ - (serialization.Encoding.Raw, serialization.PublicFormat.Raw), - (serialization.Encoding.PEM, serialization.PublicFormat.Raw), - (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), - ] + list(itertools.product( + [ + serialization.Encoding.Raw, + serialization.Encoding.X962, + serialization.Encoding.PEM, + serialization.Encoding.DER + ], + [ + serialization.PublicFormat.Raw, + ] + )) + list(itertools.product( + [serialization.Encoding.Raw], + [ + serialization.PublicFormat.SubjectPublicKeyInfo, + serialization.PublicFormat.PKCS1, + serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint, + ] + )) ) - def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) key = ec.generate_private_key(ec.SECP256R1(), backend).public_key() with pytest.raises(ValueError): @@ -1121,6 +1136,36 @@ def test_from_encoded_point_unsupported_encoding(self): ec.SECP256R1(), unsupported_type ) + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "EC", "compressed_points.txt"), + load_nist_vectors + ) + ) + def test_serialize_point(self, vector, backend): + curve = { + b"SECP256R1": ec.SECP256R1(), + b"SECP256K1": ec.SECP256K1(), + }[vector["curve"]] + point = binascii.unhexlify(vector["point"]) + key = ec.EllipticCurvePublicKey.from_encoded_point(curve, point) + key2 = ec.EllipticCurvePublicKey.from_encoded_point( + curve, + key.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint + ) + ) + assert key.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.CompressedPoint + ) == point + assert key2.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.CompressedPoint + ) == point + @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) class TestECDSAVerification(object): diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 0c25bdbbec7d..65d88f547f82 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -2067,9 +2067,10 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): (serialization.Encoding.Raw, serialization.PrivateFormat.PKCS8), (serialization.Encoding.DER, serialization.PrivateFormat.Raw), (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), + (serialization.Encoding.X962, serialization.PrivateFormat.PKCS8), ] ) - def test_private_bytes_rejects_raw(self, encoding, fmt, backend): + def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): key = RSA_KEY_2048.private_key(backend) with pytest.raises(ValueError): key.private_bytes(encoding, fmt, serialization.NoEncryption()) @@ -2303,12 +2304,26 @@ def test_public_bytes_invalid_format(self, backend): @pytest.mark.parametrize( ("encoding", "fmt"), [ - (serialization.Encoding.Raw, serialization.PublicFormat.Raw), - (serialization.Encoding.PEM, serialization.PublicFormat.Raw), + ( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ), (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), - ] + ] + list(itertools.product( + [ + serialization.Encoding.Raw, + serialization.Encoding.X962, + serialization.Encoding.PEM, + serialization.Encoding.DER + ], + [ + serialization.PublicFormat.Raw, + serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint + ] + )) ) - def test_public_bytes_rejects_raw(self, encoding, fmt, backend): + def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): key = RSA_KEY_2048.private_key(backend).public_key() with pytest.raises(ValueError): key.public_bytes(encoding, fmt) From 2de450a2166e6a390f2d9e121b3d660b049b1807 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 20 Jan 2019 17:24:41 -0600 Subject: [PATCH 540/988] deprecate encode_point and migrate all internal callers (#4720) --- CHANGELOG.rst | 3 ++- docs/hazmat/primitives/asymmetric/ec.rst | 6 ++++++ src/cryptography/hazmat/backends/openssl/backend.py | 7 ++++++- src/cryptography/hazmat/primitives/asymmetric/ec.py | 8 ++++++++ src/cryptography/x509/extensions.py | 5 ++++- tests/hazmat/primitives/test_ec.py | 3 ++- 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 88e2aaf58d60..d77cf15ce211 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -50,7 +50,8 @@ Changelog :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` with no arguments has been deprecated. * Added support for encoding compressed and uncompressed points via - :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.public_bytes`. + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.public_bytes`. Deprecated the previous method + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicNumbers.encode_point`. .. _v2-4-2: diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index a356dcaa17cb..d89fde3da505 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -194,6 +194,12 @@ Elliptic Curve Signature Algorithms .. method:: encode_point() + .. warning:: + + This method is deprecated as of version 2.5. Callers should migrate + to using + :meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey.public_bytes`. + .. versionadded:: 1.1 Encodes an elliptic curve point to a byte string as described in diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index b5232ba0329a..64a91f03cd95 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1885,10 +1885,15 @@ def _openssh_public_key_bytes(self, key): "Only SECP256R1, SECP384R1, and SECP521R1 curves are " "supported by the SSH public key format" ) + + point = key.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint + ) return b"ecdsa-sha2-" + curve_name + b" " + base64.b64encode( ssh._ssh_write_string(b"ecdsa-sha2-" + curve_name) + ssh._ssh_write_string(curve_name) + - ssh._ssh_write_string(public_numbers.encode_point()) + ssh._ssh_write_string(point) ) def _parameter_bytes(self, encoding, format, cdata): diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index c93cc090d113..1de0976a60b5 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -359,6 +359,14 @@ def public_key(self, backend): return backend.load_elliptic_curve_public_numbers(self) def encode_point(self): + warnings.warn( + "encode_point has been deprecated on EllipticCurvePublicNumbers" + " and will be removed in a future version. Please use " + "EllipticCurvePublicKey.public_bytes to obtain both " + "compressed and uncompressed point encoding.", + utils.DeprecatedIn25, + stacklevel=2, + ) # key_size is in bits. Convert to bytes and round up byte_length = (self.curve.key_size + 7) // 8 return ( diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index bdd445d94889..88afa3100774 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -35,7 +35,10 @@ def _key_identifier_from_public_key(public_key): serialization.PublicFormat.PKCS1, ) elif isinstance(public_key, EllipticCurvePublicKey): - data = public_key.public_numbers().encode_point() + data = public_key.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint + ) else: # This is a very slow way to do this. serialized = public_key.public_bytes( diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 471ef267db8b..7a6d6affb6ea 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -175,7 +175,8 @@ def test_encode_point(): 16 ) pn = ec.EllipticCurvePublicNumbers(x, y, ec.SECP256R1()) - data = pn.encode_point() + with pytest.warns(utils.DeprecatedIn25): + data = pn.encode_point() assert data == binascii.unhexlify( "04233ea3b0027127084cd2cd336a13aeef69c598d8af61369a36454a17c6c22ae" "c3ea2c10a84153862be4ec82940f0543f9ba866af9751a6ee79d38460b35f442e" From 46cec4d935c6aec6a3ae94cb88c575965844814f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 20 Jan 2019 20:31:22 -0600 Subject: [PATCH 541/988] Apparently NIST crypto resources are essential to life and property (#4721) --- docs/conf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index b152bf11ebbe..4349b0587ea3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -181,6 +181,4 @@ linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL "https://info.isl.ntt.co.jp/crypt/eng/camellia/", - # Federal government shutdown, and the anti-deficiency act - r"^https://[\w\.]+?\.nist\.gov/.*", ] From d90982ef946df00d83b8a5c105fa5bf099e53f7f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 21 Jan 2019 16:46:02 -0500 Subject: [PATCH 542/988] See if urllib3 tests pass on xenial nowadays (#4724) --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3285437789bc..7ed660a8e975 100644 --- a/.travis.yml +++ b/.travis.yml @@ -134,9 +134,6 @@ matrix: env: DOWNSTREAM=certbot-josepy - python: 2.7 env: DOWNSTREAM=urllib3 - # urllib3 tests fail on xenial for whatever reason - dist: trusty - sudo: false install: - ./.travis/install.sh From 54e49ef90d64b6672e9264b205c6f258e8d231e2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 21 Jan 2019 16:33:30 -0600 Subject: [PATCH 543/988] update jenkinsfile to compile openssl 1.1.1 on windows (#4725) --- .jenkins/Jenkinsfile-OpenSSL-1.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/Jenkinsfile-OpenSSL-1.1 b/.jenkins/Jenkinsfile-OpenSSL-1.1 index 2ce1446dcbc8..62ec956001c9 100644 --- a/.jenkins/Jenkinsfile-OpenSSL-1.1 +++ b/.jenkins/Jenkinsfile-OpenSSL-1.1 @@ -15,7 +15,7 @@ def configs = [ script = """ wmic qfe - powershell "[Net.ServicePointManager]::SecurityProtocol = 'tls12'; wget 'https://www.openssl.org/source/openssl-1.1.0-latest.tar.gz' -OutFile 'openssl-latest.tar.gz'" + powershell "[Net.ServicePointManager]::SecurityProtocol = 'tls12'; wget 'https://www.openssl.org/source/openssl-1.1.1-latest.tar.gz' -OutFile 'openssl-latest.tar.gz'" REM Next decompress the tarball using winrar. INUL disables error msgs, which are GUI prompts and therefore undesirable "C:\\Program Files\\WinRAR\\WinRAR.exe" -INUL x openssl-latest.tar.gz cd openssl-1* From 7a127a5d0a5c6018affc9c4bdf03f4be7e6e25f8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 21 Jan 2019 18:27:23 -0500 Subject: [PATCH 544/988] Updated link to PKCS#3 -- fixes #4671 (#4722) --- docs/hazmat/primitives/asymmetric/serialization.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 87a6372ca46b..dbb2bb63eb22 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -646,5 +646,5 @@ Serialization Encryption Types Do not encrypt. -.. _`PKCS3`: https://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-3-diffie-hellman-key-agreement-standar.htm +.. _`PKCS3`: https://www.teletrust.de/fileadmin/files/oid/oid_pkcs-3v1-4.pdf .. _`SEC 1 v2.0`: http://www.secg.org/sec1-v2.pdf From 5b3e735253d4cc1c7f51dedc11c9ca5eeb6f451f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 21 Jan 2019 21:17:19 -0600 Subject: [PATCH 545/988] bind EVP_R_MEMORY_LIMIT_EXCEEDED and update a test (#4726) * bind EVP_R_MEMORY_LIMIT_EXCEEDED and update a test This will allow OpenSSL 1.1.1 on 32-bit (including our Windows 32-bit builders) to fail as expected. Technically this isn't a malloc error, but rather failing because the allocation requested is larger than 32-bits, but raising a MemoryError still seems appropriate * what you want an endif too? --- src/_cffi_src/openssl/err.py | 9 +++++++++ src/cryptography/hazmat/backends/openssl/backend.py | 4 ++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index b4d053c6a900..d4033f5a48e8 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -11,6 +11,7 @@ TYPES = """ static const int Cryptography_HAS_EC_CODES; static const int Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR; +static const int Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED; static const int ERR_LIB_DH; static const int ERR_LIB_EVP; @@ -23,6 +24,7 @@ static const int ERR_LIB_X509; static const int ERR_R_MALLOC_FAILURE; +static const int EVP_R_MEMORY_LIMIT_EXCEEDED; static const int ASN1_R_BOOLEAN_IS_WRONG_LENGTH; static const int ASN1_R_BUFFER_TOO_SMALL; @@ -170,4 +172,11 @@ static const long Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR = 0; static const long RSA_R_PKCS_DECODING_ERROR = 0; #endif + +#ifdef EVP_R_MEMORY_LIMIT_EXCEEDED +static const long Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED = 1; +#else +static const long EVP_R_MEMORY_LIMIT_EXCEEDED = 0; +static const long Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED = 0; +#endif """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 64a91f03cd95..1d1e04466d16 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2210,6 +2210,10 @@ def derive_scrypt(self, key_material, salt, length, n, r, p): errors[0]._lib_reason_match( self._lib.ERR_LIB_EVP, self._lib.ERR_R_MALLOC_FAILURE + ) or + errors[0]._lib_reason_match( + self._lib.ERR_LIB_EVP, + self._lib.EVP_R_MEMORY_LIMIT_EXCEEDED ) ) diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 76417934796e..c0238dcc2028 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -335,6 +335,12 @@ def cryptography_has_raw_key(): ] +def cryptography_has_evp_r_memory_limit_exceeded(): + return [ + "EVP_R_MEMORY_LIMIT_EXCEEDED", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -403,4 +409,7 @@ def cryptography_has_raw_key(): "Cryptography_HAS_EVP_DIGESTFINAL_XOF": ( cryptography_has_evp_digestfinal_xof ), + "Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED": ( + cryptography_has_evp_r_memory_limit_exceeded + ), } From 767fa8511caade795457b23ea9d3d85af1ed12bb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 21 Jan 2019 22:36:25 -0600 Subject: [PATCH 546/988] allow 32-bit platforms to encode certs with dates > unix epoch (#4727) Previously we used unix timestamps, but now we are switching to using ASN1_TIME_set_string and automatically formatting the string based on the year. The rule is as follows: Per RFC 5280 (section 4.1.2.5.), the valid input time strings should be encoded with the following rules: 1. UTC: YYMMDDHHMMSSZ, if YY < 50 (20YY) --> UTC: YYMMDDHHMMSSZ 2. UTC: YYMMDDHHMMSSZ, if YY >= 50 (19YY) --> UTC: YYMMDDHHMMSSZ 3. G'd: YYYYMMDDHHMMSSZ, if YYYY >= 2050 --> G'd: YYYYMMDDHHMMSSZ 4. G'd: YYYYMMDDHHMMSSZ, if YYYY < 2050 --> UTC: YYMMDDHHMMSSZ Notably, Dates < 1950 are not valid UTCTime. At the moment we still reject dates < Jan 1, 1970 in all cases but a followup PR can fix that. --- .../hazmat/backends/openssl/backend.py | 21 ++++++------------- tests/x509/test_x509.py | 21 ++++++++++++------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 1d1e04466d16..0a9bc53aebdb 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -5,7 +5,6 @@ from __future__ import absolute_import, division, print_function import base64 -import calendar import collections import contextlib import itertools @@ -854,20 +853,12 @@ def create_x509_certificate(self, builder, private_key, algorithm): return _Certificate(self, x509_cert) def _set_asn1_time(self, asn1_time, time): - timestamp = calendar.timegm(time.timetuple()) - res = self._lib.ASN1_TIME_set(asn1_time, timestamp) - if res == self._ffi.NULL: - errors = self._consume_errors() - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_ASN1, - self._lib.ASN1_R_ERROR_GETTING_TIME - ) - ) - raise ValueError( - "Invalid time. This error can occur if you set a time too far " - "in the future on Windows." - ) + if time.year >= 2050: + asn1_str = time.strftime('%Y%m%d%H%M%SZ').encode('ascii') + else: + asn1_str = time.strftime('%y%m%d%H%M%SZ').encode('ascii') + res = self._lib.ASN1_TIME_set_string(asn1_time, asn1_str) + self.openssl_assert(res == 1) def _create_asn1_time(self, time): asn1_time = self._lib.ASN1_TIME_new() diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 1d483ac2a22d..55f5ddda5ba7 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -8,7 +8,6 @@ import datetime import ipaddress import os -import sys from asn1crypto.x509 import Certificate @@ -1722,18 +1721,16 @@ def test_subject_dn_asn1_types(self, backend): oid )[0]._type == asn1_type - @pytest.mark.skipif(sys.platform != "win32", reason="Requires windows") @pytest.mark.parametrize( ("not_valid_before", "not_valid_after"), [ - [datetime.datetime(1999, 1, 1), datetime.datetime(9999, 1, 1)], - [datetime.datetime(9999, 1, 1), datetime.datetime(9999, 12, 31)], + [datetime.datetime(1970, 2, 1), datetime.datetime(9999, 1, 1)], + [datetime.datetime(1970, 2, 1), datetime.datetime(9999, 12, 31)], ] ) @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_invalid_time_windows(self, not_valid_before, not_valid_after, - backend): + def test_extreme_times(self, not_valid_before, not_valid_after, backend): private_key = RSA_KEY_2048.private_key(backend) builder = x509.CertificateBuilder().subject_name(x509.Name([ x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), @@ -1748,8 +1745,16 @@ def test_invalid_time_windows(self, not_valid_before, not_valid_after, ).not_valid_after( not_valid_after ) - with pytest.raises(ValueError): - builder.sign(private_key, hashes.SHA256(), backend) + cert = builder.sign(private_key, hashes.SHA256(), backend) + assert cert.not_valid_before == not_valid_before + assert cert.not_valid_after == not_valid_after + parsed = Certificate.load( + cert.public_bytes(serialization.Encoding.DER) + ) + not_before = parsed['tbs_certificate']['validity']['not_before'] + not_after = parsed['tbs_certificate']['validity']['not_after'] + assert not_before.chosen.tag == 23 # UTCTime + assert not_after.chosen.tag == 24 # GeneralizedTime @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 2e9c7df922edbc59981a2c0fdb6ea4f15fdd8afc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 22 Jan 2019 06:59:06 -0600 Subject: [PATCH 547/988] allow asn1 times of 1950-01-01 and later. (#4728) * allow asn1 times of 1950-01-01 and later. * add a test * pretty up the test --- src/cryptography/x509/base.py | 32 ++++++++++----------- src/cryptography/x509/ocsp.py | 8 +++--- tests/x509/test_x509.py | 33 ++++++++++++++++++++-- tests/x509/test_x509_crlbuilder.py | 8 +++--- tests/x509/test_x509_revokedcertbuilder.py | 4 +-- 5 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index a3b334a149c4..63c2e3c6343e 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -17,7 +17,7 @@ from cryptography.x509.name import Name -_UNIX_EPOCH = datetime.datetime(1970, 1, 1) +_EARLIEST_UTC_TIME = datetime.datetime(1950, 1, 1) def _reject_duplicate_extension(extension, extensions): @@ -516,9 +516,9 @@ def not_valid_before(self, time): if self._not_valid_before is not None: raise ValueError('The not valid before may only be set once.') time = _convert_to_naive_utc_time(time) - if time <= _UNIX_EPOCH: - raise ValueError('The not valid before date must be after the unix' - ' epoch (1970 January 1).') + if time < _EARLIEST_UTC_TIME: + raise ValueError('The not valid before date must be on or after' + ' 1950 January 1).') if self._not_valid_after is not None and time > self._not_valid_after: raise ValueError( 'The not valid before date must be before the not valid after ' @@ -539,9 +539,9 @@ def not_valid_after(self, time): if self._not_valid_after is not None: raise ValueError('The not valid after may only be set once.') time = _convert_to_naive_utc_time(time) - if time <= _UNIX_EPOCH: - raise ValueError('The not valid after date must be after the unix' - ' epoch (1970 January 1).') + if time < _EARLIEST_UTC_TIME: + raise ValueError('The not valid after date must be on or after' + ' 1950 January 1.') if (self._not_valid_before is not None and time < self._not_valid_before): raise ValueError( @@ -620,9 +620,9 @@ def last_update(self, last_update): if self._last_update is not None: raise ValueError('Last update may only be set once.') last_update = _convert_to_naive_utc_time(last_update) - if last_update <= _UNIX_EPOCH: - raise ValueError('The last update date must be after the unix' - ' epoch (1970 January 1).') + if last_update < _EARLIEST_UTC_TIME: + raise ValueError('The last update date must be on or after' + ' 1950 January 1.') if self._next_update is not None and last_update > self._next_update: raise ValueError( 'The last update date must be before the next update date.' @@ -638,9 +638,9 @@ def next_update(self, next_update): if self._next_update is not None: raise ValueError('Last update may only be set once.') next_update = _convert_to_naive_utc_time(next_update) - if next_update <= _UNIX_EPOCH: - raise ValueError('The last update date must be after the unix' - ' epoch (1970 January 1).') + if next_update < _EARLIEST_UTC_TIME: + raise ValueError('The last update date must be on or after' + ' 1950 January 1.') if self._last_update is not None and next_update < self._last_update: raise ValueError( 'The next update date must be after the last update date.' @@ -720,9 +720,9 @@ def revocation_date(self, time): if self._revocation_date is not None: raise ValueError('The revocation date may only be set once.') time = _convert_to_naive_utc_time(time) - if time <= _UNIX_EPOCH: - raise ValueError('The revocation date must be after the unix' - ' epoch (1970 January 1).') + if time < _EARLIEST_UTC_TIME: + raise ValueError('The revocation date must be on or after' + ' 1950 January 1.') return RevokedCertificateBuilder( self._serial_number, time, self._extensions ) diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 97933b1fc137..aae9b626260c 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -13,7 +13,7 @@ from cryptography import x509 from cryptography.hazmat.primitives import hashes from cryptography.x509.base import ( - _UNIX_EPOCH, _convert_to_naive_utc_time, _reject_duplicate_extension + _EARLIEST_UTC_TIME, _convert_to_naive_utc_time, _reject_duplicate_extension ) @@ -154,9 +154,9 @@ def __init__(self, cert, issuer, algorithm, cert_status, this_update, raise TypeError("revocation_time must be a datetime object") revocation_time = _convert_to_naive_utc_time(revocation_time) - if revocation_time <= _UNIX_EPOCH: - raise ValueError('The revocation_time must be after the unix' - ' epoch (1970 January 1).') + if revocation_time < _EARLIEST_UTC_TIME: + raise ValueError('The revocation_time must be on or after' + ' 1950 January 1.') if ( revocation_reason is not None and diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 55f5ddda5ba7..c8c863fb0a07 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2027,6 +2027,35 @@ def test_aware_not_valid_after(self, backend): cert = cert_builder.sign(private_key, hashes.SHA256(), backend) assert cert.not_valid_after == utc_time + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_earliest_time(self, backend): + time = datetime.datetime(1950, 1, 1) + private_key = RSA_KEY_2048.private_key(backend) + cert_builder = x509.CertificateBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).serial_number( + 1 + ).public_key( + private_key.public_key() + ).not_valid_before( + time + ).not_valid_after( + time + ) + cert = cert_builder.sign(private_key, hashes.SHA256(), backend) + assert cert.not_valid_before == time + assert cert.not_valid_after == time + parsed = Certificate.load( + cert.public_bytes(serialization.Encoding.DER) + ) + not_before = parsed['tbs_certificate']['validity']['not_before'] + not_after = parsed['tbs_certificate']['validity']['not_after'] + assert not_before.chosen.tag == 23 # UTCTime + assert not_after.chosen.tag == 23 # UTCTime + def test_invalid_not_valid_after(self): with pytest.raises(TypeError): x509.CertificateBuilder().not_valid_after(104204304504) @@ -2036,7 +2065,7 @@ def test_invalid_not_valid_after(self): with pytest.raises(ValueError): x509.CertificateBuilder().not_valid_after( - datetime.datetime(1960, 8, 10) + datetime.datetime(1940, 8, 10) ) def test_not_valid_after_may_only_be_set_once(self): @@ -2082,7 +2111,7 @@ def test_invalid_not_valid_before(self): with pytest.raises(ValueError): x509.CertificateBuilder().not_valid_before( - datetime.datetime(1960, 8, 10) + datetime.datetime(1940, 8, 10) ) def test_not_valid_before_may_only_be_set_once(self): diff --git a/tests/x509/test_x509_crlbuilder.py b/tests/x509/test_x509_crlbuilder.py index e90fd3fd8300..5f220bcae896 100644 --- a/tests/x509/test_x509_crlbuilder.py +++ b/tests/x509/test_x509_crlbuilder.py @@ -62,10 +62,10 @@ def test_last_update_invalid(self): with pytest.raises(TypeError): builder.last_update("notadatetime") - def test_last_update_before_unix_epoch(self): + def test_last_update_before_1950(self): builder = x509.CertificateRevocationListBuilder() with pytest.raises(ValueError): - builder.last_update(datetime.datetime(1960, 8, 10)) + builder.last_update(datetime.datetime(1940, 8, 10)) def test_set_last_update_twice(self): builder = x509.CertificateRevocationListBuilder().last_update( @@ -97,10 +97,10 @@ def test_next_update_invalid(self): with pytest.raises(TypeError): builder.next_update("notadatetime") - def test_next_update_before_unix_epoch(self): + def test_next_update_before_1950(self): builder = x509.CertificateRevocationListBuilder() with pytest.raises(ValueError): - builder.next_update(datetime.datetime(1960, 8, 10)) + builder.next_update(datetime.datetime(1940, 8, 10)) def test_set_next_update_twice(self): builder = x509.CertificateRevocationListBuilder().next_update( diff --git a/tests/x509/test_x509_revokedcertbuilder.py b/tests/x509/test_x509_revokedcertbuilder.py index e3a06509fe23..75c6b2697180 100644 --- a/tests/x509/test_x509_revokedcertbuilder.py +++ b/tests/x509/test_x509_revokedcertbuilder.py @@ -80,10 +80,10 @@ def test_revocation_date_invalid(self): with pytest.raises(TypeError): x509.RevokedCertificateBuilder().revocation_date("notadatetime") - def test_revocation_date_before_unix_epoch(self): + def test_revocation_date_before_1950(self): with pytest.raises(ValueError): x509.RevokedCertificateBuilder().revocation_date( - datetime.datetime(1960, 8, 10) + datetime.datetime(1940, 8, 10) ) def test_set_revocation_date_twice(self): From 83aa36dd407d0eb9a10e20cc35c51274174cd5bc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 22 Jan 2019 09:35:05 -0600 Subject: [PATCH 548/988] changelog and version bump for 2.5 (#4729) --- CHANGELOG.rst | 8 ++++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d77cf15ce211..7ee6d4d93d59 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-5: -2.5 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.5 - 2019-01-22 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** :term:`U-label` strings were deprecated in version 2.1, but this version removes the default ``idna`` dependency as @@ -16,6 +14,8 @@ Changelog * Numerous classes and functions have been updated to allow :term:`bytes-like` types for keying material and passwords, including symmetric algorithms, AEAD ciphers, KDFs, loading asymmetric keys, and one time password classes. +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.1a. * Added support for :class:`~cryptography.hazmat.primitives.hashes.SHA512_224` and :class:`~cryptography.hazmat.primitives.hashes.SHA512_256` when using OpenSSL 1.1.1. diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 75a5418a85cd..02f81f6e8ed1 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.5.dev1" +__version__ = "2.5" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 07ca6c7b56dc..6fcb314e28a0 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.5.dev1" +__version__ = "2.5" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From ccf8ef3eb73bac73629dc95334df0ececb6853d3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 22 Jan 2019 11:25:41 -0600 Subject: [PATCH 549/988] reopen master for 2.6 work (#4730) --- CHANGELOG.rst | 8 ++++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7ee6d4d93d59..cbf032ebcfbd 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,14 @@ Changelog ========= +.. _v2-6: + +2.6 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + + .. _v2-5: 2.5 - 2019-01-22 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 02f81f6e8ed1..87890823e25f 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.5" +__version__ = "2.6.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 6fcb314e28a0..330fa0d29c63 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.5" +__version__ = "2.6.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 543226c1a00f9a775358d8028b462e99b1bdb60a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 22 Jan 2019 13:33:37 -0600 Subject: [PATCH 550/988] pypy 5.4+ (#4732) --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 13f2d7d11189..f680dd04a413 100644 --- a/README.rst +++ b/README.rst @@ -18,7 +18,7 @@ pyca/cryptography ``cryptography`` is a package which provides cryptographic recipes and primitives to Python developers. Our goal is for it to be your "cryptographic -standard library". It supports Python 2.7, Python 3.4+, and PyPy 5.3+. +standard library". It supports Python 2.7, Python 3.4+, and PyPy 5.4+. ``cryptography`` includes both high level recipes and low level interfaces to common cryptographic algorithms such as symmetric ciphers, message digests, and From 908121176f037c618b1f774ab969ad7f67ea3020 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 23 Jan 2019 19:51:32 -0500 Subject: [PATCH 551/988] Use O_CLOEXEC when it's available (#4733) * Use O_CLOEXEC when it's available * Don't have two vars with the same name * A normal person would be emberassed --- src/_cffi_src/openssl/src/osrandom_engine.c | 26 +++++++++++++-------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 697381c853d9..1a660f0bfd81 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -94,7 +94,18 @@ static struct { ino_t st_ino; } urandom_cache = { -1 }; -static int set_cloexec(int fd) { +static int open_cloexec(const char *path) { + int open_flags = O_RDONLY; +#ifdef O_CLOEXEC + open_flags |= O_CLOEXEC; +#endif + + int fd = open(path, open_flags); + if (fd == -1) { + return -1; + } + +#ifndef O_CLOEXEC int flags = fcntl(fd, F_GETFD); if (flags == -1) { return -1; @@ -102,7 +113,8 @@ static int set_cloexec(int fd) { if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { return -1; } - return 0; +#endif + return fd; } #ifdef __linux__ @@ -114,13 +126,10 @@ static int set_cloexec(int fd) { static int wait_on_devrandom(void) { struct pollfd pfd = {}; int ret = 0; - int random_fd = open("/dev/random", O_RDONLY); + int random_fd = open_cloexec("/dev/random"); if (random_fd < 0) { return -1; } - if (set_cloexec(random_fd) < 0) { - return -1; - } pfd.fd = random_fd; pfd.events = POLLIN; pfd.revents = 0; @@ -154,13 +163,10 @@ static int dev_urandom_fd(void) { } #endif - fd = open("/dev/urandom", O_RDONLY); + fd = open_cloexec("/dev/urandom"); if (fd < 0) { goto error; } - if (set_cloexec(fd) < 0) { - goto error; - } if (fstat(fd, &st)) { goto error; } From 5c07d7a87c54a8532b49ba41febe8d526e5734d8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 23 Jan 2019 22:00:14 -0500 Subject: [PATCH 552/988] Fixes #4734 -- Deal with deprecated things (#4736) * Fixes #4734 -- Deal with deprecated things - Make year based aliases of PersistentlyDeprecated so we can easily assess age - Removed encode/decode rfc6979 signature - Removed Certificate.serial * Unused import --- CHANGELOG.rst | 12 ++++++++++ .../hazmat/backends/openssl/utils.py | 2 +- .../hazmat/backends/openssl/x509.py | 10 --------- .../hazmat/primitives/asymmetric/utils.py | 22 ------------------- .../hazmat/primitives/constant_time.py | 2 +- src/cryptography/utils.py | 5 ++--- src/cryptography/x509/general_name.py | 6 ++--- tests/hazmat/primitives/test_asym_utils.py | 13 +---------- tests/x509/test_x509.py | 21 ------------------ tests/x509/test_x509_ext.py | 12 +++++----- 10 files changed, 26 insertions(+), 79 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cbf032ebcfbd..5a6d4b54f497 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,18 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** Removed + ``cryptography.hazmat.primitives.asymmetric.utils.encode_rfc6979_signature`` + and + ``cryptography.hazmat.primitives.asymmetric.utils.decode_rfc6979_signature``, + which had been deprecated for nearly 4 years. Use + :func:`~cryptography.hazmat.primitives.asymmetric.utils.encode_dss_signature` + and + :func:`~cryptography.hazmat.primitives.asymmetric.utils.decode_dss_signature` + instead. +* **BACKWARDS INCOMPATIBLE**: Removed ``cryptography.x509.Certificate.serial``, + which had been deprecated for nearly 3 years. Use + :attr:`~cryptography.x509.Certificate.serial_number` instead. .. _v2-5: diff --git a/src/cryptography/hazmat/backends/openssl/utils.py b/src/cryptography/hazmat/backends/openssl/utils.py index 363f3d2c25db..ee472c0e665c 100644 --- a/src/cryptography/hazmat/backends/openssl/utils.py +++ b/src/cryptography/hazmat/backends/openssl/utils.py @@ -64,6 +64,6 @@ def _warn_sign_verify_deprecated(): warnings.warn( "signer and verifier have been deprecated. Please use sign " "and verify instead.", - utils.PersistentlyDeprecated, + utils.PersistentlyDeprecated2017, stacklevel=3 ) diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index ac1838c6d131..b3eb797d7cdb 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -6,7 +6,6 @@ import datetime import operator -import warnings from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm @@ -62,15 +61,6 @@ def version(self): "{0} is not a valid X509 version".format(version), version ) - @property - def serial(self): - warnings.warn( - "Certificate serial is deprecated, use serial_number instead.", - utils.PersistentlyDeprecated, - stacklevel=2 - ) - return self.serial_number - @property def serial_number(self): asn1_int = self._backend._lib.X509_get_serialNumber(self._x509) diff --git a/src/cryptography/hazmat/primitives/asymmetric/utils.py b/src/cryptography/hazmat/primitives/asymmetric/utils.py index ef1e7eb928d9..274c1f412065 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/utils.py +++ b/src/cryptography/hazmat/primitives/asymmetric/utils.py @@ -4,8 +4,6 @@ from __future__ import absolute_import, division, print_function -import warnings - from asn1crypto.algos import DSASignature import six @@ -14,31 +12,11 @@ from cryptography.hazmat.primitives import hashes -def decode_rfc6979_signature(signature): - warnings.warn( - "decode_rfc6979_signature is deprecated and will " - "be removed in a future version, use decode_dss_signature instead.", - utils.PersistentlyDeprecated, - stacklevel=2 - ) - return decode_dss_signature(signature) - - def decode_dss_signature(signature): data = DSASignature.load(signature, strict=True).native return data['r'], data['s'] -def encode_rfc6979_signature(r, s): - warnings.warn( - "encode_rfc6979_signature is deprecated and will " - "be removed in a future version, use encode_dss_signature instead.", - utils.PersistentlyDeprecated, - stacklevel=2 - ) - return encode_dss_signature(r, s) - - def encode_dss_signature(r, s): if ( not isinstance(r, six.integer_types) or diff --git a/src/cryptography/hazmat/primitives/constant_time.py b/src/cryptography/hazmat/primitives/constant_time.py index 0e987ea75864..99a114e242ef 100644 --- a/src/cryptography/hazmat/primitives/constant_time.py +++ b/src/cryptography/hazmat/primitives/constant_time.py @@ -23,7 +23,7 @@ def bytes_eq(a, b): "Support for your Python version is deprecated. The next version of " "cryptography will remove support. Please upgrade to a 2.7.x " "release that supports hmac.compare_digest as soon as possible.", - utils.DeprecatedIn23, + utils.PersistentlyDeprecated2018, ) def bytes_eq(a, b): diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index cbbae3a79355..567600fb62fa 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -20,9 +20,8 @@ class CryptographyDeprecationWarning(UserWarning): # Several APIs were deprecated with no specific end-of-life date because of the # ubiquity of their use. They should not be removed until we agree on when that # cycle ends. -PersistentlyDeprecated = CryptographyDeprecationWarning -DeprecatedIn21 = CryptographyDeprecationWarning -DeprecatedIn23 = CryptographyDeprecationWarning +PersistentlyDeprecated2017 = CryptographyDeprecationWarning +PersistentlyDeprecated2018 = CryptographyDeprecationWarning DeprecatedIn25 = CryptographyDeprecationWarning diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 1b0f8c8f9bcf..fef29c8cdf15 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -72,7 +72,7 @@ def __init__(self, value): "This means unicode characters should be encoded via " "idna. Support for passing unicode strings (aka U-label) " "will be removed in a future version.", - utils.DeprecatedIn21, + utils.PersistentlyDeprecated2017, stacklevel=2, ) else: @@ -139,7 +139,7 @@ def __init__(self, value): "This means unicode characters should be encoded via " "idna. Support for passing unicode strings (aka U-label) " "will be removed in a future version.", - utils.DeprecatedIn21, + utils.PersistentlyDeprecated2017, stacklevel=2, ) else: @@ -184,7 +184,7 @@ def __init__(self, value): "This means unicode characters should be encoded via " "idna. Support for passing unicode strings (aka U-label) " " will be removed in a future version.", - utils.DeprecatedIn21, + utils.PersistentlyDeprecated2017, stacklevel=2, ) else: diff --git a/tests/hazmat/primitives/test_asym_utils.py b/tests/hazmat/primitives/test_asym_utils.py index fc9e9fd886b2..d817c651c0d8 100644 --- a/tests/hazmat/primitives/test_asym_utils.py +++ b/tests/hazmat/primitives/test_asym_utils.py @@ -7,19 +7,8 @@ import pytest from cryptography.hazmat.primitives.asymmetric.utils import ( - Prehashed, decode_dss_signature, decode_rfc6979_signature, - encode_dss_signature, encode_rfc6979_signature, + Prehashed, decode_dss_signature, encode_dss_signature ) -from cryptography.utils import CryptographyDeprecationWarning - - -def test_deprecated_rfc6979_signature(): - with pytest.warns(CryptographyDeprecationWarning): - sig = encode_rfc6979_signature(1, 1) - assert sig == b"0\x06\x02\x01\x01\x02\x01\x01" - with pytest.warns(CryptographyDeprecationWarning): - decoded = decode_rfc6979_signature(sig) - assert decoded == (1, 1) def test_dss_signature(): diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index c8c863fb0a07..1ead594797ed 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -609,27 +609,6 @@ def test_alternate_rsa_with_sha1_oid(self, backend): SignatureAlgorithmOID._RSA_WITH_SHA1 ) - def test_cert_serial_number(self, backend): - cert = _load_cert( - os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), - x509.load_der_x509_certificate, - backend - ) - - with pytest.warns(utils.CryptographyDeprecationWarning): - assert cert.serial == 2 - assert cert.serial_number == 2 - - def test_cert_serial_warning(self, backend): - cert = _load_cert( - os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), - x509.load_der_x509_certificate, - backend - ) - - with pytest.warns(utils.CryptographyDeprecationWarning): - cert.serial - def test_load_der_cert(self, backend): cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 6de105fad272..6cf388da4c40 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -1673,11 +1673,11 @@ def test_key_cert_sign_crl_sign(self, backend): class TestDNSName(object): def test_init_deprecated(self): pytest.importorskip("idna") - with pytest.warns(utils.DeprecatedIn21): + with pytest.warns(utils.CryptographyDeprecationWarning): name = x509.DNSName(u".\xf5\xe4\xf6\xfc.example.com") assert name.value == u".xn--4ca7aey.example.com" - with pytest.warns(utils.DeprecatedIn21): + with pytest.warns(utils.CryptographyDeprecationWarning): name = x509.DNSName(u"\xf5\xe4\xf6\xfc.example.com") assert name.value == u"xn--4ca7aey.example.com" @@ -1792,7 +1792,7 @@ def test_single_label(self): def test_idna(self): pytest.importorskip("idna") - with pytest.warns(utils.DeprecatedIn21): + with pytest.warns(utils.CryptographyDeprecationWarning): gn = x509.RFC822Name(u"email@em\xe5\xefl.com") assert gn.value == u"email@xn--eml-vla4c.com" @@ -1832,7 +1832,7 @@ def test_with_port(self): def test_idna_no_port(self): pytest.importorskip("idna") - with pytest.warns(utils.DeprecatedIn21): + with pytest.warns(utils.CryptographyDeprecationWarning): gn = x509.UniformResourceIdentifier( u"http://\u043f\u044b\u043a\u0430.cryptography" ) @@ -1841,7 +1841,7 @@ def test_idna_no_port(self): def test_idna_with_port(self): pytest.importorskip("idna") - with pytest.warns(utils.DeprecatedIn21): + with pytest.warns(utils.CryptographyDeprecationWarning): gn = x509.UniformResourceIdentifier( u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" ) @@ -1856,7 +1856,7 @@ def test_empty_hostname(self): def test_query_and_fragment(self): pytest.importorskip("idna") - with pytest.warns(utils.DeprecatedIn21): + with pytest.warns(utils.CryptographyDeprecationWarning): gn = x509.UniformResourceIdentifier( u"ldap://\u043f\u044b\u043a\u0430.cryptography:90/path?query=" u"true#somedata" From d2e85573d6bcdd23a9c719dacf182165bafa22c9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 24 Jan 2019 10:48:19 -0500 Subject: [PATCH 553/988] Run wycheproof RSA tests on LibreSSL>=2.8 (#4737) * Run wycheproof RSA tests on LibreSSL>=2.8 * Define it this way * These are errors on libressl --- src/_cffi_src/openssl/cryptography.py | 11 ++++++++++- tests/wycheproof/test_rsa.py | 12 ++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index e16fc57d91a1..23ce87cf45bd 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -33,8 +33,15 @@ #include #endif +#if CRYPTOGRAPHY_IS_LIBRESSL #define CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER \ - (CRYPTOGRAPHY_IS_LIBRESSL && LIBRESSL_VERSION_NUMBER >= 0x2070000fL) + (LIBRESSL_VERSION_NUMBER >= 0x2070000f) +#define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER \ + (LIBRESSL_VERSION_NUMBER >= 0x2080000f) +#else +#define CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER (0) +#define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER (0) +#endif #define CRYPTOGRAPHY_OPENSSL_102_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x10002000 && !CRYPTOGRAPHY_IS_LIBRESSL) @@ -67,6 +74,8 @@ static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111; static const int CRYPTOGRAPHY_IS_LIBRESSL; + +static const int CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER; """ FUNCTIONS = """ diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 3d35f42d7cad..112805b41dde 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -29,8 +29,10 @@ def should_verify(backend, wycheproof): if wycheproof.acceptable: if ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER and - wycheproof.has_flag("MissingNull") + ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER or + backend._lib.CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER + ) and wycheproof.has_flag("MissingNull") ): return False return True @@ -41,10 +43,8 @@ def should_verify(backend, wycheproof): @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.supported( only_if=lambda backend: ( - # TODO: this also skips on LibreSSL, which is ok for now, since these - # don't pass on Libre, but we'll need to fix this when LibreSSL 2.8 is - # released. - not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 + not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 or + backend._lib.CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER ), skip_message=( "Many of these tests fail on OpenSSL < 1.0.2 and since upstream isn't" From c03cc5183d1ec3540f0b22613aedba161beeec97 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 2 Feb 2019 23:23:52 -0500 Subject: [PATCH 554/988] Fixes for the latest pep8-naming (#4744) --- tests/hazmat/primitives/test_3des.py | 20 ++++++++--------- tests/hazmat/primitives/test_aes.py | 14 ++++++------ tests/hazmat/primitives/test_blowfish.py | 8 +++---- tests/hazmat/primitives/test_camellia.py | 8 +++---- tests/hazmat/primitives/test_cast5.py | 8 +++---- tests/hazmat/primitives/test_hash_vectors.py | 22 +++++++++---------- tests/hazmat/primitives/test_hashes.py | 16 +++++++------- tests/hazmat/primitives/test_hkdf_vectors.py | 4 ++-- tests/hazmat/primitives/test_idea.py | 8 +++---- tests/hazmat/primitives/test_kbkdf_vectors.py | 2 +- tests/hazmat/primitives/test_seed.py | 8 +++---- tests/x509/test_x509.py | 2 +- 12 files changed, 60 insertions(+), 60 deletions(-) diff --git a/tests/hazmat/primitives/test_3des.py b/tests/hazmat/primitives/test_3des.py index f281ba2887b2..0f0f147095df 100644 --- a/tests/hazmat/primitives/test_3des.py +++ b/tests/hazmat/primitives/test_3des.py @@ -28,7 +28,7 @@ ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestTripleDESModeCBC(object): - test_KAT = generate_encrypt_test( + test_kat = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CBC"), [ @@ -42,7 +42,7 @@ class TestTripleDESModeCBC(object): lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)), ) - test_MMT = generate_encrypt_test( + test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CBC"), [ @@ -65,7 +65,7 @@ class TestTripleDESModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestTripleDESModeOFB(object): - test_KAT = generate_encrypt_test( + test_kat = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "OFB"), [ @@ -79,7 +79,7 @@ class TestTripleDESModeOFB(object): lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)), ) - test_MMT = generate_encrypt_test( + test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "OFB"), [ @@ -102,7 +102,7 @@ class TestTripleDESModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestTripleDESModeCFB(object): - test_KAT = generate_encrypt_test( + test_kat = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CFB"), [ @@ -116,7 +116,7 @@ class TestTripleDESModeCFB(object): lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)), ) - test_MMT = generate_encrypt_test( + test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CFB"), [ @@ -139,7 +139,7 @@ class TestTripleDESModeCFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestTripleDESModeCFB8(object): - test_KAT = generate_encrypt_test( + test_kat = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CFB"), [ @@ -153,7 +153,7 @@ class TestTripleDESModeCFB8(object): lambda iv, **kwargs: modes.CFB8(binascii.unhexlify(iv)), ) - test_MMT = generate_encrypt_test( + test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CFB"), [ @@ -176,7 +176,7 @@ class TestTripleDESModeCFB8(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestTripleDESModeECB(object): - test_KAT = generate_encrypt_test( + test_kat = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "ECB"), [ @@ -190,7 +190,7 @@ class TestTripleDESModeECB(object): lambda **kwargs: modes.ECB(), ) - test_MMT = generate_encrypt_test( + test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "ECB"), [ diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index 90a6b3b0a067..f083f31978ee 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -58,7 +58,7 @@ def test_xts_vectors(self, vector, backend): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeCBC(object): - test_CBC = generate_encrypt_test( + test_cbc = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "AES", "CBC"), [ @@ -91,7 +91,7 @@ class TestAESModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeECB(object): - test_ECB = generate_encrypt_test( + test_ecb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "AES", "ECB"), [ @@ -124,7 +124,7 @@ class TestAESModeECB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeOFB(object): - test_OFB = generate_encrypt_test( + test_ofb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "AES", "OFB"), [ @@ -157,7 +157,7 @@ class TestAESModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeCFB(object): - test_CFB = generate_encrypt_test( + test_cfb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "AES", "CFB"), [ @@ -190,7 +190,7 @@ class TestAESModeCFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeCFB8(object): - test_CFB8 = generate_encrypt_test( + test_cfb8 = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "AES", "CFB"), [ @@ -223,7 +223,7 @@ class TestAESModeCFB8(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeCTR(object): - test_CTR = generate_encrypt_test( + test_ctr = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "AES", "CTR"), ["aes-128-ctr.txt", "aes-192-ctr.txt", "aes-256-ctr.txt"], @@ -240,7 +240,7 @@ class TestAESModeCTR(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESModeGCM(object): - test_GCM = generate_aead_test( + test_gcm = generate_aead_test( load_nist_vectors, os.path.join("ciphers", "AES", "GCM"), [ diff --git a/tests/hazmat/primitives/test_blowfish.py b/tests/hazmat/primitives/test_blowfish.py index 0c38b9816e4f..5f7480ec9234 100644 --- a/tests/hazmat/primitives/test_blowfish.py +++ b/tests/hazmat/primitives/test_blowfish.py @@ -24,7 +24,7 @@ ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestBlowfishModeECB(object): - test_ECB = generate_encrypt_test( + test_ecb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Blowfish"), ["bf-ecb.txt"], @@ -41,7 +41,7 @@ class TestBlowfishModeECB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestBlowfishModeCBC(object): - test_CBC = generate_encrypt_test( + test_cbc = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Blowfish"), ["bf-cbc.txt"], @@ -58,7 +58,7 @@ class TestBlowfishModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestBlowfishModeOFB(object): - test_OFB = generate_encrypt_test( + test_ofb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Blowfish"), ["bf-ofb.txt"], @@ -75,7 +75,7 @@ class TestBlowfishModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestBlowfishModeCFB(object): - test_CFB = generate_encrypt_test( + test_cfb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Blowfish"), ["bf-cfb.txt"], diff --git a/tests/hazmat/primitives/test_camellia.py b/tests/hazmat/primitives/test_camellia.py index 87fcfe3d1072..07a735ad3158 100644 --- a/tests/hazmat/primitives/test_camellia.py +++ b/tests/hazmat/primitives/test_camellia.py @@ -26,7 +26,7 @@ ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCamelliaModeECB(object): - test_ECB = generate_encrypt_test( + test_ecb = generate_encrypt_test( load_cryptrec_vectors, os.path.join("ciphers", "Camellia"), [ @@ -47,7 +47,7 @@ class TestCamelliaModeECB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCamelliaModeCBC(object): - test_CBC = generate_encrypt_test( + test_cbc = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Camellia"), ["camellia-cbc.txt"], @@ -64,7 +64,7 @@ class TestCamelliaModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCamelliaModeOFB(object): - test_OFB = generate_encrypt_test( + test_ofb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Camellia"), ["camellia-ofb.txt"], @@ -81,7 +81,7 @@ class TestCamelliaModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCamelliaModeCFB(object): - test_CFB = generate_encrypt_test( + test_cfb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "Camellia"), ["camellia-cfb.txt"], diff --git a/tests/hazmat/primitives/test_cast5.py b/tests/hazmat/primitives/test_cast5.py index ec51659d07ad..87e12a33a846 100644 --- a/tests/hazmat/primitives/test_cast5.py +++ b/tests/hazmat/primitives/test_cast5.py @@ -24,7 +24,7 @@ ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCAST5ModeECB(object): - test_ECB = generate_encrypt_test( + test_ecb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "CAST5"), ["cast5-ecb.txt"], @@ -41,7 +41,7 @@ class TestCAST5ModeECB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCAST5ModeCBC(object): - test_CBC = generate_encrypt_test( + test_cbc = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "CAST5"), ["cast5-cbc.txt"], @@ -58,7 +58,7 @@ class TestCAST5ModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCAST5ModeOFB(object): - test_OFB = generate_encrypt_test( + test_ofb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "CAST5"), ["cast5-ofb.txt"], @@ -75,7 +75,7 @@ class TestCAST5ModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestCAST5ModeCFB(object): - test_CFB = generate_encrypt_test( + test_cfb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "CAST5"), ["cast5-cfb.txt"], diff --git a/tests/hazmat/primitives/test_hash_vectors.py b/tests/hazmat/primitives/test_hash_vectors.py index 5225a00be87b..0698f4134fc8 100644 --- a/tests/hazmat/primitives/test_hash_vectors.py +++ b/tests/hazmat/primitives/test_hash_vectors.py @@ -22,7 +22,7 @@ ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA1(object): - test_SHA1 = generate_hash_test( + test_sha1 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA1"), [ @@ -39,7 +39,7 @@ class TestSHA1(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA224(object): - test_SHA224 = generate_hash_test( + test_sha224 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), [ @@ -56,7 +56,7 @@ class TestSHA224(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA256(object): - test_SHA256 = generate_hash_test( + test_sha256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), [ @@ -73,7 +73,7 @@ class TestSHA256(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA384(object): - test_SHA384 = generate_hash_test( + test_sha384 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), [ @@ -90,7 +90,7 @@ class TestSHA384(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA512(object): - test_SHA512 = generate_hash_test( + test_sha512 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), [ @@ -107,7 +107,7 @@ class TestSHA512(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA512224(object): - test_SHA512_224 = generate_hash_test( + test_sha512_224 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), [ @@ -124,7 +124,7 @@ class TestSHA512224(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA512256(object): - test_SHA512_256 = generate_hash_test( + test_sha512_256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), [ @@ -191,7 +191,7 @@ class TestBLAKE2s256(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA3224(object): - test_SHA3_224 = generate_hash_test( + test_sha3_224 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), [ @@ -208,7 +208,7 @@ class TestSHA3224(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA3256(object): - test_SHA3_256 = generate_hash_test( + test_sha3_256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), [ @@ -225,7 +225,7 @@ class TestSHA3256(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA3384(object): - test_SHA3_384 = generate_hash_test( + test_sha3_384 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), [ @@ -242,7 +242,7 @@ class TestSHA3384(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA3512(object): - test_SHA3_512 = generate_hash_test( + test_sha3_512 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), [ diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index b10fadcdcc75..a743045cb9be 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -52,7 +52,7 @@ def test_unsupported_hash(self, backend): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA1(object): - test_SHA1 = generate_base_hash_test( + test_sha1 = generate_base_hash_test( hashes.SHA1(), digest_size=20, ) @@ -64,7 +64,7 @@ class TestSHA1(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA224(object): - test_SHA224 = generate_base_hash_test( + test_sha224 = generate_base_hash_test( hashes.SHA224(), digest_size=28, ) @@ -76,7 +76,7 @@ class TestSHA224(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA256(object): - test_SHA256 = generate_base_hash_test( + test_sha256 = generate_base_hash_test( hashes.SHA256(), digest_size=32, ) @@ -88,7 +88,7 @@ class TestSHA256(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA384(object): - test_SHA384 = generate_base_hash_test( + test_sha384 = generate_base_hash_test( hashes.SHA384(), digest_size=48, ) @@ -100,7 +100,7 @@ class TestSHA384(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA512(object): - test_SHA512 = generate_base_hash_test( + test_sha512 = generate_base_hash_test( hashes.SHA512(), digest_size=64, ) @@ -112,7 +112,7 @@ class TestSHA512(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestMD5(object): - test_MD5 = generate_base_hash_test( + test_md5 = generate_base_hash_test( hashes.MD5(), digest_size=16, ) @@ -125,7 +125,7 @@ class TestMD5(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestBLAKE2b(object): - test_BLAKE2b = generate_base_hash_test( + test_blake2b = generate_base_hash_test( hashes.BLAKE2b(digest_size=64), digest_size=64, ) @@ -148,7 +148,7 @@ def test_invalid_digest_size(self, backend): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestBLAKE2s(object): - test_BLAKE2s = generate_base_hash_test( + test_blake2s = generate_base_hash_test( hashes.BLAKE2s(digest_size=32), digest_size=32, ) diff --git a/tests/hazmat/primitives/test_hkdf_vectors.py b/tests/hazmat/primitives/test_hkdf_vectors.py index 74bf9291bc5d..290cefbf6c28 100644 --- a/tests/hazmat/primitives/test_hkdf_vectors.py +++ b/tests/hazmat/primitives/test_hkdf_vectors.py @@ -21,7 +21,7 @@ ) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDFSHA1(object): - test_HKDFSHA1 = generate_hkdf_test( + test_hkdfsha1 = generate_hkdf_test( load_nist_vectors, os.path.join("KDF"), ["rfc-5869-HKDF-SHA1.txt"], @@ -35,7 +35,7 @@ class TestHKDFSHA1(object): ) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDFSHA256(object): - test_HKDFSHA1 = generate_hkdf_test( + test_hkdfsha256 = generate_hkdf_test( load_nist_vectors, os.path.join("KDF"), ["rfc-5869-HKDF-SHA256.txt"], diff --git a/tests/hazmat/primitives/test_idea.py b/tests/hazmat/primitives/test_idea.py index 75116dc1866a..6b8a2a870e27 100644 --- a/tests/hazmat/primitives/test_idea.py +++ b/tests/hazmat/primitives/test_idea.py @@ -24,7 +24,7 @@ ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestIDEAModeECB(object): - test_ECB = generate_encrypt_test( + test_ecb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "IDEA"), ["idea-ecb.txt"], @@ -41,7 +41,7 @@ class TestIDEAModeECB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestIDEAModeCBC(object): - test_CBC = generate_encrypt_test( + test_cbc = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "IDEA"), ["idea-cbc.txt"], @@ -58,7 +58,7 @@ class TestIDEAModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestIDEAModeOFB(object): - test_OFB = generate_encrypt_test( + test_ofb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "IDEA"), ["idea-ofb.txt"], @@ -75,7 +75,7 @@ class TestIDEAModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestIDEAModeCFB(object): - test_CFB = generate_encrypt_test( + test_cfb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "IDEA"), ["idea-cfb.txt"], diff --git a/tests/hazmat/primitives/test_kbkdf_vectors.py b/tests/hazmat/primitives/test_kbkdf_vectors.py index c8263e2b2716..7bdbbdc765d4 100644 --- a/tests/hazmat/primitives/test_kbkdf_vectors.py +++ b/tests/hazmat/primitives/test_kbkdf_vectors.py @@ -16,7 +16,7 @@ @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestCounterKDFCounterMode(object): - test_HKDFSHA1 = generate_kbkdf_counter_mode_test( + test_kbkdfctr = generate_kbkdf_counter_mode_test( load_nist_kbkdf_vectors, os.path.join("KDF"), ["nist-800-108-KBKDF-CTR.txt"] diff --git a/tests/hazmat/primitives/test_seed.py b/tests/hazmat/primitives/test_seed.py index 29cae4fe9f36..2d03d774948a 100644 --- a/tests/hazmat/primitives/test_seed.py +++ b/tests/hazmat/primitives/test_seed.py @@ -24,7 +24,7 @@ ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestSEEDModeECB(object): - test_ECB = generate_encrypt_test( + test_ecb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "SEED"), ["rfc-4269.txt"], @@ -41,7 +41,7 @@ class TestSEEDModeECB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestSEEDModeCBC(object): - test_CBC = generate_encrypt_test( + test_cbc = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "SEED"), ["rfc-4196.txt"], @@ -58,7 +58,7 @@ class TestSEEDModeCBC(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestSEEDModeOFB(object): - test_OFB = generate_encrypt_test( + test_ofb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "SEED"), ["seed-ofb.txt"], @@ -75,7 +75,7 @@ class TestSEEDModeOFB(object): ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestSEEDModeCFB(object): - test_CFB = generate_encrypt_test( + test_cfb = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "SEED"), ["seed-cfb.txt"], diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 1ead594797ed..72cd49e79226 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -110,7 +110,7 @@ def test_unknown_signature_algorithm(self, backend): ) with pytest.raises(UnsupportedAlgorithm): - crl.signature_hash_algorithm() + crl.signature_hash_algorithm() def test_issuer(self, backend): crl = _load_cert( From 0cf2552613c96051c7233300ac7880ae0c5476e1 Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sun, 3 Feb 2019 06:30:09 -0800 Subject: [PATCH 555/988] Rename [wheel] section to [bdist_wheel] as the former is legacy (#4743) For additional details, see: https://github.com/pypa/wheel/blob/3dc261abc98a5e43bc7fcf5783d080aaf8f9f0cf/wheel/bdist_wheel.py#L127-L133 http://pythonwheels.com/ --- vectors/setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vectors/setup.cfg b/vectors/setup.cfg index 5e4090017a9b..2a9acf13daa9 100644 --- a/vectors/setup.cfg +++ b/vectors/setup.cfg @@ -1,2 +1,2 @@ -[wheel] +[bdist_wheel] universal = 1 From 58840a7f8269ed68b0189447adf816f58fba51ac Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 3 Feb 2019 10:25:27 -0500 Subject: [PATCH 556/988] Also suggest cryptopals to learn crypo (#4745) --- docs/index.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index 9ff8664e17c5..396ed0b6e9d5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -19,7 +19,8 @@ key derivation functions. For example, to encrypt something with 'A really secret message. Not for prying eyes.' If you are interested in learning more about the field of cryptography, we -recommend `Crypto 101, by Laurens Van Houtven`_. +recommend `Crypto 101, by Laurens Van Houtven`_ and `The Cryptopals Crypto +Challenges`_. Installation ------------ @@ -92,3 +93,4 @@ hazmat layer only when necessary. :doc:`get in touch `. .. _`Crypto 101, by Laurens Van Houtven`: https://www.crypto101.io/ +.. _`The Cryptopals Crypto Challenges`: https://cryptopals.com/ From 57f8a533c3615e7df110561d1be56621a129e4e4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 3 Feb 2019 11:49:36 -0600 Subject: [PATCH 557/988] concede to digicert's garbage CDN (#4747) Which, despite supporting HTTPS, is non-deterministically providing 404s and DigiCert has asserted that http is the only "supported" protocol. --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index df1ecfa20505..829a78421846 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -654,7 +654,7 @@ header format (substituting the correct information): .. _`NIST SP-800-38B`: https://csrc.nist.gov/publications/detail/sp/800-38b/archive/2005-05-01 .. _`NIST PKI Testing`: https://csrc.nist.gov/Projects/PKI-Testing .. _`testx509.pem`: https://github.com/openssl/openssl/blob/master/test/testx509.pem -.. _`DigiCert Global Root G3`: https://cacerts.digicert.com/DigiCertGlobalRootG3.crt +.. _`DigiCert Global Root G3`: http://cacerts.digicert.com/DigiCertGlobalRootG3.crt .. _`root data`: https://hg.mozilla.org/projects/nss/file/25b2922cc564/security/nss/lib/ckfw/builtins/certdata.txt#l2053 .. _`asymmetric/public/PKCS1/dsa.pub.pem`: https://github.com/ruby/ruby/blob/4ccb387f3bc436a08fc6d72c4931994f5de95110/test/openssl/test_pkey_dsa.rb#L53 .. _`Mozilla bug`: https://bugzilla.mozilla.org/show_bug.cgi?id=233586 From 91e69f3b47aea16c4cbd0beb9a220b1bb760dfbe Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 3 Feb 2019 15:01:52 -0600 Subject: [PATCH 558/988] update the thread link (#4748) * update the thread link linkcheck doing its job! * update our locking information --- docs/hazmat/bindings/openssl.rst | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/hazmat/bindings/openssl.rst b/docs/hazmat/bindings/openssl.rst index ac65aa97b09b..ac9ccedf0632 100644 --- a/docs/hazmat/bindings/openssl.rst +++ b/docs/hazmat/bindings/openssl.rst @@ -33,16 +33,15 @@ OpenSSL version 1.0.1 and greater. Threading --------- -``cryptography`` enables OpenSSLs `thread safety facilities`_ in two different -ways depending on the configuration of your system. Normally the locking -callbacks provided by your Python implementation specifically for OpenSSL will -be used. However, if you have linked ``cryptography`` to a different version of -OpenSSL than that used by your Python implementation we enable an alternative -locking callback. This version is implemented in Python and so may result in -lower performance in some situations. In particular parallelism is reduced -because it has to acquire the GIL whenever any lock operations occur within -OpenSSL. +``cryptography`` enables OpenSSLs `thread safety facilities`_ in several +different ways depending on the configuration of your system. For users on +OpenSSL 1.1.0 or newer (including anyone who uses a binary wheel) the OpenSSL +internal locking callbacks are automatically used. Otherwise, we first attempt +to use the callbacks provided by your Python implementation specifically for +OpenSSL. This will work in every case except where ``cryptography`` is linked +against a different version of OpenSSL than the one used by your Python +implementation. For this final case we have a C-based locking callback. .. _`CFFI`: https://cffi.readthedocs.io .. _`OpenSSL`: https://www.openssl.org/ -.. _`thread safety facilities`: https://www.openssl.org/docs/man1.0.2/crypto/threads.html +.. _`thread safety facilities`: https://www.openssl.org/docs/man1.0.2/man3/CRYPTO_THREADID_set_callback.html From ac1d13f43dea5ebee0506dc229cd431660916c73 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 19 Feb 2019 23:38:32 -0500 Subject: [PATCH 559/988] Simplify string formatting (#4757) --- src/cryptography/__about__.py | 2 +- src/cryptography/hazmat/_oid.py | 2 +- .../hazmat/backends/openssl/aead.py | 4 +-- .../hazmat/backends/openssl/backend.py | 14 ++++---- .../hazmat/backends/openssl/ciphers.py | 8 ++--- .../hazmat/backends/openssl/decode_asn1.py | 12 +++---- .../hazmat/backends/openssl/ec.py | 2 +- .../hazmat/backends/openssl/encode_asn1.py | 2 +- .../hazmat/backends/openssl/hashes.py | 2 +- .../hazmat/backends/openssl/hmac.py | 2 +- .../hazmat/backends/openssl/ocsp.py | 4 +-- .../hazmat/backends/openssl/rsa.py | 6 ++-- .../hazmat/backends/openssl/x509.py | 10 +++--- .../hazmat/primitives/ciphers/algorithms.py | 2 +- .../hazmat/primitives/ciphers/base.py | 4 +-- .../hazmat/primitives/ciphers/modes.py | 6 ++-- .../hazmat/primitives/kdf/concatkdf.py | 2 +- .../hazmat/primitives/kdf/hkdf.py | 2 +- .../hazmat/primitives/kdf/pbkdf2.py | 2 +- .../hazmat/primitives/kdf/x963kdf.py | 2 +- src/cryptography/utils.py | 12 +++---- src/cryptography/x509/extensions.py | 32 +++++++++---------- src/cryptography/x509/general_name.py | 10 +++--- src/cryptography/x509/name.py | 4 +-- tests/conftest.py | 4 +-- tests/hazmat/backends/test_openssl_memleak.py | 2 +- tests/hazmat/primitives/test_dsa.py | 2 +- tests/hazmat/primitives/test_ec.py | 6 ++-- tests/hazmat/primitives/test_rsa.py | 4 +-- tests/hazmat/primitives/test_x963_vectors.py | 2 +- tests/hazmat/primitives/utils.py | 4 +-- tests/utils.py | 6 ++-- 32 files changed, 89 insertions(+), 89 deletions(-) diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 87890823e25f..759c3037071a 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -20,4 +20,4 @@ __email__ = "cryptography-dev@python.org" __license__ = "BSD or Apache License, Version 2.0" -__copyright__ = "Copyright 2013-2017 {0}".format(__author__) +__copyright__ = "Copyright 2013-2017 {}".format(__author__) diff --git a/src/cryptography/hazmat/_oid.py b/src/cryptography/hazmat/_oid.py index cfe906cd3e84..4b08722f1e2b 100644 --- a/src/cryptography/hazmat/_oid.py +++ b/src/cryptography/hazmat/_oid.py @@ -50,7 +50,7 @@ def __ne__(self, other): return not self == other def __repr__(self): - return "".format( + return "".format( self.dotted_string, self._name ) diff --git a/src/cryptography/hazmat/backends/openssl/aead.py b/src/cryptography/hazmat/backends/openssl/aead.py index 73195ff3e265..1335b4f95980 100644 --- a/src/cryptography/hazmat/backends/openssl/aead.py +++ b/src/cryptography/hazmat/backends/openssl/aead.py @@ -18,10 +18,10 @@ def _aead_cipher_name(cipher): if isinstance(cipher, ChaCha20Poly1305): return b"chacha20-poly1305" elif isinstance(cipher, AESCCM): - return "aes-{0}-ccm".format(len(cipher._key) * 8).encode("ascii") + return "aes-{}-ccm".format(len(cipher._key) * 8).encode("ascii") else: assert isinstance(cipher, AESGCM) - return "aes-{0}-gcm".format(len(cipher._key) * 8).encode("ascii") + return "aes-{}-gcm".format(len(cipher._key) * 8).encode("ascii") def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 0a9bc53aebdb..33a96af26a33 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -187,7 +187,7 @@ def create_hmac_ctx(self, key, algorithm): def _evp_md_from_algorithm(self, algorithm): if algorithm.name == "blake2b" or algorithm.name == "blake2s": - alg = "{0}{1}".format( + alg = "{}{}".format( algorithm.name, algorithm.digest_size * 8 ).encode("ascii") else: @@ -221,7 +221,7 @@ def cipher_supported(self, cipher, mode): def register_cipher_adapter(self, cipher_cls, mode_cls, adapter): if (cipher_cls, mode_cls) in self._cipher_registry: - raise ValueError("Duplicate registration for: {0} {1}.".format( + raise ValueError("Duplicate registration for: {} {}.".format( cipher_cls, mode_cls) ) self._cipher_registry[cipher_cls, mode_cls] = adapter @@ -980,7 +980,7 @@ def _create_x509_extension(self, handlers, extension): encode = handlers[extension.oid] except KeyError: raise NotImplementedError( - 'Extension not supported: {0}'.format(extension.oid) + 'Extension not supported: {}'.format(extension.oid) ) ext_struct = encode(self, extension.value) @@ -1244,7 +1244,7 @@ def _load_key(self, openssl_read_func, convert_func, data, password): else: assert userdata.error == -2 raise ValueError( - "Passwords longer than {0} bytes are not supported " + "Passwords longer than {} bytes are not supported " "by this backend.".format(userdata.maxsize - 1) ) else: @@ -1356,7 +1356,7 @@ def generate_elliptic_curve_private_key(self, curve): return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) else: raise UnsupportedAlgorithm( - "Backend object does not support {0}.".format(curve.name), + "Backend object does not support {}.".format(curve.name), _Reasons.UNSUPPORTED_ELLIPTIC_CURVE ) @@ -1610,7 +1610,7 @@ def _elliptic_curve_to_nid(self, curve): curve_nid = self._lib.OBJ_sn2nid(curve_name.encode()) if curve_nid == self._lib.NID_undef: raise UnsupportedAlgorithm( - "{0} is not a supported elliptic curve".format(curve.name), + "{} is not a supported elliptic curve".format(curve.name), _Reasons.UNSUPPORTED_ELLIPTIC_CURVE ) return curve_nid @@ -2323,7 +2323,7 @@ def __call__(self, backend, cipher, mode): def _get_xts_cipher(backend, cipher, mode): - cipher_name = "aes-{0}-xts".format(cipher.key_size // 2) + cipher_name = "aes-{}-xts".format(cipher.key_size // 2) return backend._lib.EVP_get_cipherbyname(cipher_name.encode("ascii")) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 66ac5fd69aa6..94b48f527403 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -40,7 +40,7 @@ def __init__(self, backend, cipher, mode, operation): adapter = registry[type(cipher), type(mode)] except KeyError: raise UnsupportedAlgorithm( - "cipher {0} in {1} mode is not supported " + "cipher {} in {} mode is not supported " "by this backend.".format( cipher.name, mode.name if mode else mode), _Reasons.UNSUPPORTED_CIPHER @@ -53,7 +53,7 @@ def __init__(self, backend, cipher, mode, operation): msg += "in {0.name} mode ".format(mode) msg += ( "is not supported by this backend (Your version of OpenSSL " - "may be too old. Current version: {0}.)" + "may be too old. Current version: {}.)" ).format(self._backend.openssl_version_text()) raise UnsupportedAlgorithm(msg, _Reasons.UNSUPPORTED_CIPHER) @@ -127,7 +127,7 @@ def update(self, data): def update_into(self, data, buf): if len(buf) < (len(data) + self._block_size_bytes - 1): raise ValueError( - "buffer must be at least {0} bytes for this " + "buffer must be at least {} bytes for this " "payload".format(len(data) + self._block_size_bytes - 1) ) @@ -207,7 +207,7 @@ def finalize_with_tag(self, tag): ) if len(tag) < self._mode._min_tag_length: raise ValueError( - "Authentication tag must be {0} bytes or longer.".format( + "Authentication tag must be {} bytes or longer.".format( self._mode._min_tag_length) ) res = self._backend._lib.EVP_CIPHER_CTX_ctrl( diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 007675d4e6eb..773189d4f8b5 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -135,7 +135,7 @@ def _decode_general_name(backend, gn): if "1" in bits[prefix:]: raise ValueError("Invalid netmask") - ip = ipaddress.ip_network(base.exploded + u"/{0}".format(prefix)) + ip = ipaddress.ip_network(base.exploded + u"/{}".format(prefix)) else: ip = ipaddress.ip_address(data) @@ -160,7 +160,7 @@ def _decode_general_name(backend, gn): else: # x400Address or ediPartyName raise x509.UnsupportedGeneralNameType( - "{0} is not a supported type".format( + "{} is not a supported type".format( x509._GENERAL_NAMES.get(gn.type, gn.type) ), gn.type @@ -202,7 +202,7 @@ def parse(self, backend, x509_obj): ) if oid in seen_oids: raise x509.DuplicateExtension( - "Duplicate {0} extension found".format(oid), oid + "Duplicate {} extension found".format(oid), oid ) # These OIDs are only supported in OpenSSL 1.1.0+ but we want @@ -245,7 +245,7 @@ def parse(self, backend, x509_obj): if ext_data == backend._ffi.NULL: backend._consume_errors() raise ValueError( - "The {0} extension is invalid and can't be " + "The {} extension is invalid and can't be " "parsed".format(oid) ) @@ -698,7 +698,7 @@ def _decode_crl_reason(backend, enum): try: return x509.CRLReason(_CRL_ENTRY_REASON_CODE_TO_ENUM[code]) except KeyError: - raise ValueError("Unsupported reason code: {0}".format(code)) + raise ValueError("Unsupported reason code: {}".format(code)) def _decode_invalidity_date(backend, inv_date): @@ -758,7 +758,7 @@ def _asn1_string_to_utf8(backend, asn1_string): res = backend._lib.ASN1_STRING_to_UTF8(buf, asn1_string) if res == -1: raise ValueError( - "Unsupported ASN1 string type. Type: {0}".format(asn1_string.type) + "Unsupported ASN1 string type. Type: {}".format(asn1_string.type) ) backend.openssl_assert(buf[0] != backend._ffi.NULL) diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index a8d69bdf9f84..2ca48091da1d 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -62,7 +62,7 @@ def _sn_to_elliptic_curve(backend, sn): return ec._CURVE_TYPES[sn]() except KeyError: raise UnsupportedAlgorithm( - "{0} is not a supported elliptic curve".format(sn), + "{} is not a supported elliptic curve".format(sn), _Reasons.UNSUPPORTED_ELLIPTIC_CURVE ) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 3557576241fd..61cfd14de0f9 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -475,7 +475,7 @@ def _encode_general_name(backend, name): gn.d.uniformResourceIdentifier = asn1_str else: raise ValueError( - "{0} is an unknown GeneralName type".format(name) + "{} is an unknown GeneralName type".format(name) ) return gn diff --git a/src/cryptography/hazmat/backends/openssl/hashes.py b/src/cryptography/hazmat/backends/openssl/hashes.py index 549fa2bf5dee..7f9d840b3809 100644 --- a/src/cryptography/hazmat/backends/openssl/hashes.py +++ b/src/cryptography/hazmat/backends/openssl/hashes.py @@ -25,7 +25,7 @@ def __init__(self, backend, algorithm, ctx=None): evp_md = self._backend._evp_md_from_algorithm(algorithm) if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( - "{0} is not a supported hash on this backend.".format( + "{} is not a supported hash on this backend.".format( algorithm.name), _Reasons.UNSUPPORTED_HASH ) diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index b23ac6498cbf..4b66a610c441 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -28,7 +28,7 @@ def __init__(self, backend, key, algorithm, ctx=None): evp_md = self._backend._evp_md_from_algorithm(algorithm) if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( - "{0} is not a supported hash on this backend".format( + "{} is not a supported hash on this backend".format( algorithm.name), _Reasons.UNSUPPORTED_HASH ) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 16dbbc2ae0a9..7420f657ec68 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -82,7 +82,7 @@ def _hash_algorithm(backend, cert_id): return _OIDS_TO_HASH[oid] except KeyError: raise UnsupportedAlgorithm( - "Signature algorithm OID: {0} not recognized".format(oid) + "Signature algorithm OID: {} not recognized".format(oid) ) @@ -134,7 +134,7 @@ def signature_hash_algorithm(self): return x509._SIG_OIDS_TO_HASH[oid] except KeyError: raise UnsupportedAlgorithm( - "Signature algorithm OID:{0} not recognized".format(oid) + "Signature algorithm OID:{} not recognized".format(oid) ) @property diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 30d59bd80787..3e4c2fd255e6 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -59,7 +59,7 @@ def _enc_dec_rsa(backend, key, data, padding): else: raise UnsupportedAlgorithm( - "{0} is not supported by this backend.".format( + "{} is not supported by this backend.".format( padding.name ), _Reasons.UNSUPPORTED_PADDING @@ -178,7 +178,7 @@ def _rsa_sig_determine_padding(backend, key, padding, algorithm): padding_enum = backend._lib.RSA_PKCS1_PSS_PADDING else: raise UnsupportedAlgorithm( - "{0} is not supported by this backend.".format(padding.name), + "{} is not supported by this backend.".format(padding.name), _Reasons.UNSUPPORTED_PADDING ) @@ -197,7 +197,7 @@ def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): if res == 0: backend._consume_errors() raise UnsupportedAlgorithm( - "{0} is not supported by this backend for RSA signing.".format( + "{} is not supported by this backend for RSA signing.".format( algorithm.name ), _Reasons.UNSUPPORTED_HASH diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index b3eb797d7cdb..920eaf52bebc 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -29,7 +29,7 @@ def __init__(self, backend, x509): self._x509 = x509 def __repr__(self): - return "".format(self.subject) + return "".format(self.subject) def __eq__(self, other): if not isinstance(other, x509.Certificate): @@ -58,7 +58,7 @@ def version(self): return x509.Version.v3 else: raise x509.InvalidVersion( - "{0} is not a valid X509 version".format(version), version + "{} is not a valid X509 version".format(version), version ) @property @@ -107,7 +107,7 @@ def signature_hash_algorithm(self): return x509._SIG_OIDS_TO_HASH[oid] except KeyError: raise UnsupportedAlgorithm( - "Signature algorithm OID:{0} not recognized".format(oid) + "Signature algorithm OID:{} not recognized".format(oid) ) @property @@ -261,7 +261,7 @@ def signature_hash_algorithm(self): return x509._SIG_OIDS_TO_HASH[oid] except KeyError: raise UnsupportedAlgorithm( - "Signature algorithm OID:{0} not recognized".format(oid) + "Signature algorithm OID:{} not recognized".format(oid) ) @property @@ -413,7 +413,7 @@ def signature_hash_algorithm(self): return x509._SIG_OIDS_TO_HASH[oid] except KeyError: raise UnsupportedAlgorithm( - "Signature algorithm OID:{0} not recognized".format(oid) + "Signature algorithm OID:{} not recognized".format(oid) ) @property diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index 1f49fd9dedbd..f4d5160bb7e5 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -17,7 +17,7 @@ def _verify_key_size(algorithm, key): # Verify that the key size matches the expected key size if len(key) * 8 not in algorithm.key_sizes: - raise ValueError("Invalid key size ({0}) for {1}.".format( + raise ValueError("Invalid key size ({}) for {}.".format( len(key) * 8, algorithm.name )) return key diff --git a/src/cryptography/hazmat/primitives/ciphers/base.py b/src/cryptography/hazmat/primitives/ciphers/base.py index f85704142126..4d5f8d60ff49 100644 --- a/src/cryptography/hazmat/primitives/ciphers/base.py +++ b/src/cryptography/hazmat/primitives/ciphers/base.py @@ -179,7 +179,7 @@ def _check_limit(self, data_size): self._bytes_processed += data_size if self._bytes_processed > self._ctx._mode._MAX_ENCRYPTED_BYTES: raise ValueError( - "{0} has a maximum encrypted byte limit of {1}".format( + "{} has a maximum encrypted byte limit of {}".format( self._ctx._mode.name, self._ctx._mode._MAX_ENCRYPTED_BYTES ) ) @@ -217,7 +217,7 @@ def authenticate_additional_data(self, data): self._aad_bytes_processed += len(data) if self._aad_bytes_processed > self._ctx._mode._MAX_AAD_BYTES: raise ValueError( - "{0} has a maximum AAD byte limit of {1}".format( + "{} has a maximum AAD byte limit of {}".format( self._ctx._mode.name, self._ctx._mode._MAX_AAD_BYTES ) ) diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index ad91a6e142cb..78fa1c48a53b 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -72,7 +72,7 @@ def _check_aes_key_length(self, algorithm): def _check_iv_length(self, algorithm): if len(self.initialization_vector) * 8 != algorithm.block_size: - raise ValueError("Invalid IV size ({0}) for {1}.".format( + raise ValueError("Invalid IV size ({}) for {}.".format( len(self.initialization_vector), self.name )) @@ -178,7 +178,7 @@ def __init__(self, nonce): def validate_for_algorithm(self, algorithm): _check_aes_key_length(self, algorithm) if len(self.nonce) * 8 != algorithm.block_size: - raise ValueError("Invalid nonce size ({0}) for {1}.".format( + raise ValueError("Invalid nonce size ({}) for {}.".format( len(self.nonce), self.name )) @@ -205,7 +205,7 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): raise ValueError("min_tag_length must be >= 4") if len(tag) < min_tag_length: raise ValueError( - "Authentication tag must be {0} bytes or longer.".format( + "Authentication tag must be {} bytes or longer.".format( min_tag_length) ) self._tag = tag diff --git a/src/cryptography/hazmat/primitives/kdf/concatkdf.py b/src/cryptography/hazmat/primitives/kdf/concatkdf.py index 65b25cdc2329..7cb63856b11f 100644 --- a/src/cryptography/hazmat/primitives/kdf/concatkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/concatkdf.py @@ -24,7 +24,7 @@ def _common_args_checks(algorithm, length, otherinfo): max_length = algorithm.digest_size * (2 ** 32 - 1) if length > max_length: raise ValueError( - "Can not derive keys larger than {0} bits.".format( + "Can not derive keys larger than {} bits.".format( max_length )) if otherinfo is not None: diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 307f91cca777..01f0f288b439 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -68,7 +68,7 @@ def __init__(self, algorithm, length, info, backend): if length > max_length: raise ValueError( - "Can not derive keys larger than {0} octets.".format( + "Can not derive keys larger than {} octets.".format( max_length )) diff --git a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py index a47b7bbcb6bb..07d8ac676866 100644 --- a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -24,7 +24,7 @@ def __init__(self, algorithm, length, salt, iterations, backend): if not backend.pbkdf2_hmac_supported(algorithm): raise UnsupportedAlgorithm( - "{0} is not supported for PBKDF2 by this backend.".format( + "{} is not supported for PBKDF2 by this backend.".format( algorithm.name), _Reasons.UNSUPPORTED_HASH ) diff --git a/src/cryptography/hazmat/primitives/kdf/x963kdf.py b/src/cryptography/hazmat/primitives/kdf/x963kdf.py index fd9d125e79c7..9eb50b0f85fc 100644 --- a/src/cryptography/hazmat/primitives/kdf/x963kdf.py +++ b/src/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -26,7 +26,7 @@ def __init__(self, algorithm, length, sharedinfo, backend): max_len = algorithm.digest_size * (2 ** 32 - 1) if length > max_len: raise ValueError( - "Can not derive keys larger than {0} bits.".format(max_len)) + "Can not derive keys larger than {} bits.".format(max_len)) if sharedinfo is not None: utils._check_bytes("sharedinfo", sharedinfo) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 567600fb62fa..18c2ab3bc20a 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -27,14 +27,14 @@ class CryptographyDeprecationWarning(UserWarning): def _check_bytes(name, value): if not isinstance(value, bytes): - raise TypeError("{0} must be bytes".format(name)) + raise TypeError("{} must be bytes".format(name)) def _check_byteslike(name, value): try: memoryview(value) except TypeError: - raise TypeError("{0} must be bytes-like".format(name)) + raise TypeError("{} must be bytes-like".format(name)) def read_only_property(name): @@ -97,7 +97,7 @@ def verify_interface(iface, klass): for method in iface.__abstractmethods__: if not hasattr(klass, method): raise InterfaceNotImplemented( - "{0} is missing a {1!r} method".format(klass, method) + "{} is missing a {!r} method".format(klass, method) ) if isinstance(getattr(iface, method), abc.abstractproperty): # Can't properly verify these yet. @@ -106,8 +106,8 @@ def verify_interface(iface, klass): actual = signature(getattr(klass, method)) if sig != actual: raise InterfaceNotImplemented( - "{0}.{1}'s signature differs from the expected. Expected: " - "{2!r}. Received: {3!r}".format( + "{}.{}'s signature differs from the expected. Expected: " + "{!r}. Received: {!r}".format( klass, method, sig, actual ) ) @@ -159,7 +159,7 @@ def deprecated(value, module_name, message, warning_class): def cached_property(func): - cached_name = "_cached_{0}".format(func) + cached_name = "_cached_{}".format(func) sentinel = object() def inner(instance): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 88afa3100774..f027247e1818 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -81,7 +81,7 @@ def get_extension_for_oid(self, oid): if ext.oid == oid: return ext - raise ExtensionNotFound("No {0} extension was found".format(oid), oid) + raise ExtensionNotFound("No {} extension was found".format(oid), oid) def get_extension_for_class(self, extclass): if extclass is UnrecognizedExtension: @@ -96,7 +96,7 @@ def get_extension_for_class(self, extclass): return ext raise ExtensionNotFound( - "No {0} extension was found".format(extclass), extclass.oid + "No {} extension was found".format(extclass), extclass.oid ) def __iter__(self): @@ -110,7 +110,7 @@ def __getitem__(self, idx): def __repr__(self): return ( - "".format(self._extensions) + "".format(self._extensions) ) @@ -137,7 +137,7 @@ def __hash__(self): return hash(self.crl_number) def __repr__(self): - return "".format(self.crl_number) + return "".format(self.crl_number) crl_number = utils.read_only_property("_crl_number") @@ -282,7 +282,7 @@ def __len__(self): return len(self._descriptions) def __repr__(self): - return "".format(self._descriptions) + return "".format(self._descriptions) def __eq__(self, other): if not isinstance(other, AuthorityInformationAccess): @@ -429,7 +429,7 @@ def __len__(self): return len(self._distribution_points) def __repr__(self): - return "".format(self._distribution_points) + return "".format(self._distribution_points) def __eq__(self, other): if not isinstance(other, CRLDistributionPoints): @@ -470,7 +470,7 @@ def __len__(self): return len(self._distribution_points) def __repr__(self): - return "".format(self._distribution_points) + return "".format(self._distribution_points) def __eq__(self, other): if not isinstance(other, FreshestCRL): @@ -676,7 +676,7 @@ def __len__(self): return len(self._policies) def __repr__(self): - return "".format(self._policies) + return "".format(self._policies) def __eq__(self, other): if not isinstance(other, CertificatePolicies): @@ -837,7 +837,7 @@ def __len__(self): return len(self._usages) def __repr__(self): - return "".format(self._usages) + return "".format(self._usages) def __eq__(self, other): if not isinstance(other, ExtendedKeyUsage): @@ -1192,7 +1192,7 @@ def get_values_for_type(self, type): return list(objs) def __repr__(self): - return "".format(self._general_names) + return "".format(self._general_names) def __eq__(self, other): if not isinstance(other, GeneralNames): @@ -1227,7 +1227,7 @@ def get_values_for_type(self, type): return self._general_names.get_values_for_type(type) def __repr__(self): - return "".format(self._general_names) + return "".format(self._general_names) def __eq__(self, other): if not isinstance(other, SubjectAlternativeName): @@ -1262,7 +1262,7 @@ def get_values_for_type(self, type): return self._general_names.get_values_for_type(type) def __repr__(self): - return "".format(self._general_names) + return "".format(self._general_names) def __eq__(self, other): if not isinstance(other, IssuerAlternativeName): @@ -1297,7 +1297,7 @@ def get_values_for_type(self, type): return self._general_names.get_values_for_type(type) def __repr__(self): - return "".format(self._general_names) + return "".format(self._general_names) def __eq__(self, other): if not isinstance(other, CertificateIssuer): @@ -1326,7 +1326,7 @@ def __init__(self, reason): self._reason = reason def __repr__(self): - return "".format(self._reason) + return "".format(self._reason) def __eq__(self, other): if not isinstance(other, CRLReason): @@ -1354,7 +1354,7 @@ def __init__(self, invalidity_date): self._invalidity_date = invalidity_date def __repr__(self): - return "".format( + return "".format( self._invalidity_date ) @@ -1400,7 +1400,7 @@ def __getitem__(self, idx): def __repr__(self): return ( - "".format( + "".format( list(self) ) ) diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index fef29c8cdf15..1233841507eb 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -206,7 +206,7 @@ def _idna_encode(self, value): if parsed.port: netloc = ( idna.encode(parsed.hostname) + - ":{0}".format(parsed.port).encode("ascii") + ":{}".format(parsed.port).encode("ascii") ).decode("ascii") else: netloc = idna.encode(parsed.hostname).decode("ascii") @@ -250,7 +250,7 @@ def __init__(self, value): value = utils.read_only_property("_value") def __repr__(self): - return "".format(self.value) + return "".format(self.value) def __eq__(self, other): if not isinstance(other, DirectoryName): @@ -276,7 +276,7 @@ def __init__(self, value): value = utils.read_only_property("_value") def __repr__(self): - return "".format(self.value) + return "".format(self.value) def __eq__(self, other): if not isinstance(other, RegisteredID): @@ -314,7 +314,7 @@ def __init__(self, value): value = utils.read_only_property("_value") def __repr__(self): - return "".format(self.value) + return "".format(self.value) def __eq__(self, other): if not isinstance(other, IPAddress): @@ -344,7 +344,7 @@ def __init__(self, type_id, value): value = utils.read_only_property("_value") def __repr__(self): - return "".format( + return "".format( self.type_id, self.value) def __eq__(self, other): diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 026b79c2cae2..dac5639ee64b 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -190,7 +190,7 @@ def __len__(self): return len(self._attributes) def __repr__(self): - return "".format(self.rfc4514_string()) + return "".format(self.rfc4514_string()) class Name(object): @@ -253,4 +253,4 @@ def __len__(self): return sum(len(rdn) for rdn in self._attributes) def __repr__(self): - return "".format(self.rfc4514_string()) + return "".format(self.rfc4514_string()) diff --git a/tests/conftest.py b/tests/conftest.py index d858b4f7011e..fd690ce70db9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,7 +14,7 @@ def pytest_report_header(config): - return "OpenSSL: {0}".format(openssl_backend.openssl_version_text()) + return "OpenSSL: {}".format(openssl_backend.openssl_version_text()) def pytest_addoption(parser): @@ -43,7 +43,7 @@ def backend(request): isinstance(openssl_backend, iface) for iface in required_interfaces ): pytest.skip( - "OpenSSL doesn't implement required interfaces: {0}".format( + "OpenSSL doesn't implement required interfaces: {}".format( required_interfaces ) ) diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 1db103b5e77b..ed22b5db9ee2 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -128,7 +128,7 @@ def assert_no_memory_leaks(s, argv=[]): env = os.environ.copy() env["PYTHONPATH"] = os.pathsep.join(sys.path) argv = [ - sys.executable, "-c", "{0}\n\n{1}".format(s, MEMORY_LEAK_SCRIPT) + sys.executable, "-c", "{}\n\n{}".format(s, MEMORY_LEAK_SCRIPT) ] + argv # Shell out to a fresh Python process because OpenSSL does not allow you to # install new memory hooks after the first malloc/free occurs. diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index efd2239c162d..9e1acf935968 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -36,7 +36,7 @@ def _skip_if_dsa_not_supported(backend, algorithm, p, q, g): not backend.dsa_hash_supported(algorithm) ): pytest.skip( - "{0} does not support the provided parameters".format(backend) + "{} does not support the provided parameters".format(backend) ) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 7a6d6affb6ea..1f3a67d32aab 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -45,7 +45,7 @@ def _skip_ecdsa_vector(backend, curve_type, hash_type): curve_type() ): pytest.skip( - "ECDSA not supported with this hash {0} and curve {1}".format( + "ECDSA not supported with this hash {} and curve {}".format( hash_type().name, curve_type().name ) ) @@ -54,7 +54,7 @@ def _skip_ecdsa_vector(backend, curve_type, hash_type): def _skip_curve_unsupported(backend, curve): if not backend.elliptic_curve_supported(curve): pytest.skip( - "Curve {0} is not supported by this backend {1}".format( + "Curve {} is not supported by this backend {}".format( curve.name, backend ) ) @@ -65,7 +65,7 @@ def _skip_exchange_algorithm_unsupported(backend, algorithm, curve): algorithm, curve ): pytest.skip( - "Exchange with {0} curve is not supported by {1}".format( + "Exchange with {} curve is not supported by {}".format( curve.name, backend ) ) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 65d88f547f82..9a0aaf1a5d7c 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -89,7 +89,7 @@ def _build_oaep_sha2_vectors(): load_vectors_from_file( os.path.join( base_path, - "oaep-{0}-{1}.txt".format( + "oaep-{}-{}.txt".format( mgf1alg.name, oaepalg.name ) ), @@ -112,7 +112,7 @@ def _skip_pss_hash_algorithm_unsupported(backend, hash_alg): ) ): pytest.skip( - "Does not support {0} in MGF1 using PSS.".format(hash_alg.name) + "Does not support {} in MGF1 using PSS.".format(hash_alg.name) ) diff --git a/tests/hazmat/primitives/test_x963_vectors.py b/tests/hazmat/primitives/test_x963_vectors.py index 4a945d470f72..c75afa419349 100644 --- a/tests/hazmat/primitives/test_x963_vectors.py +++ b/tests/hazmat/primitives/test_x963_vectors.py @@ -21,7 +21,7 @@ def _skip_hashfn_unsupported(backend, hashfn): if not backend.hash_supported(hashfn): pytest.skip( - "Hash {0} is not supported by this backend {1}".format( + "Hash {} is not supported by this backend {}".format( hashfn.name, backend ) ) diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py index 811dcf905d7f..4aa5ce71ddf2 100644 --- a/tests/hazmat/primitives/utils.py +++ b/tests/hazmat/primitives/utils.py @@ -387,13 +387,13 @@ def kbkdf_counter_mode_test(backend, params): algorithm = supported_algorithms.get(params.get('prf')) if algorithm is None or not backend.hmac_supported(algorithm()): - pytest.skip("KBKDF does not support algorithm: {0}".format( + pytest.skip("KBKDF does not support algorithm: {}".format( params.get('prf') )) ctr_loc = supported_counter_locations.get(params.get("ctrlocation")) if ctr_loc is None or not isinstance(ctr_loc, CounterLocation): - pytest.skip("Does not support counter location: {0}".format( + pytest.skip("Does not support counter location: {}".format( params.get('ctrlocation') )) diff --git a/tests/utils.py b/tests/utils.py index b48128083fda..1362e9060035 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -30,7 +30,7 @@ def check_backend_support(backend, item): for mark in item.node.iter_markers("supported"): if not mark.kwargs["only_if"](backend): - pytest.skip("{0} ({1})".format( + pytest.skip("{} ({})".format( mark.kwargs["skip_message"], backend )) @@ -396,7 +396,7 @@ def load_fips_dsa_sig_vectors(vector_data): sha_match = sha_regex.match(line) if sha_match: - digest_algorithm = "SHA-{0}".format(sha_match.group("sha")) + digest_algorithm = "SHA-{}".format(sha_match.group("sha")) if line.startswith("[mod"): continue @@ -511,7 +511,7 @@ def load_fips_ecdsa_signing_vectors(vector_data): curve_match = curve_rx.match(line) if curve_match: curve_name = _ECDSA_CURVE_NAMES[curve_match.group("curve")] - digest_name = "SHA-{0}".format(curve_match.group("sha")) + digest_name = "SHA-{}".format(curve_match.group("sha")) elif line.startswith("Msg = "): if data is not None: From ffae50797e09d19563f1ece884e8c139e6f55013 Mon Sep 17 00:00:00 2001 From: itinerarium Date: Wed, 20 Feb 2019 05:33:48 -0500 Subject: [PATCH 560/988] full state or province name (#4758) CA -> California 6.3.5 of ITU-T X.520 (10/2016) provides a spelled out sample state. In other contexts, hints generally suggest the "full name" of a state or province. A spelled out state in the sample code might be more consistent with general usage. --- docs/x509/tutorial.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/x509/tutorial.rst b/docs/x509/tutorial.rst index d34b3504384d..cc2ffb770683 100644 --- a/docs/x509/tutorial.rst +++ b/docs/x509/tutorial.rst @@ -63,7 +63,7 @@ a few details: >>> csr = x509.CertificateSigningRequestBuilder().subject_name(x509.Name([ ... # Provide various details about who we are. ... x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - ... x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"CA"), + ... x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"California"), ... x509.NameAttribute(NameOID.LOCALITY_NAME, u"San Francisco"), ... x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"My Company"), ... x509.NameAttribute(NameOID.COMMON_NAME, u"mysite.com"), @@ -123,7 +123,7 @@ Then we generate the certificate itself: >>> # subject and issuer are always the same. >>> subject = issuer = x509.Name([ ... x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - ... x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"CA"), + ... x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"California"), ... x509.NameAttribute(NameOID.LOCALITY_NAME, u"San Francisco"), ... x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"My Company"), ... x509.NameAttribute(NameOID.COMMON_NAME, u"mysite.com"), From 3ffa0e216afc480bd00a577a41f21b7d00c80f0c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 20 Feb 2019 23:44:17 +0800 Subject: [PATCH 561/988] add ed448 PKCS8 and subjectPublicKeyInfo vectors (#4718) --- docs/development/test-vectors.rst | 7 +++++++ .../asymmetric/Ed448/ed448-pkcs8-enc.der | Bin 0 -> 174 bytes .../asymmetric/Ed448/ed448-pkcs8-enc.pem | 6 ++++++ .../asymmetric/Ed448/ed448-pkcs8.der | Bin 0 -> 73 bytes .../asymmetric/Ed448/ed448-pkcs8.pem | 4 ++++ .../asymmetric/Ed448/ed448-pub.der | Bin 0 -> 69 bytes .../asymmetric/Ed448/ed448-pub.pem | 4 ++++ 7 files changed, 21 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8-enc.der create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8-enc.pem create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8.der create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8.pem create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/ed448-pub.der create mode 100644 vectors/cryptography_vectors/asymmetric/Ed448/ed448-pub.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 829a78421846..d8014159d6e9 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -118,6 +118,13 @@ Custom asymmetric vectors ``asymmetric/X25519/x25519-pkcs8.der`` contain an unencrypted X25519 key. * ``asymmetric/X25519/x25519-pub.pem`` and ``asymmetric/X25519/x25519-pub.der`` contain an X25519 public key. +* ``asymmetric/Ed448/ed448-pkcs8-enc.pem`` and + ``asymmetric/Ed448/ed448-pkcs8-enc.der`` contain an Ed448 key encrypted + with AES 256 CBC with the password ``password``. +* ``asymmetric/Ed448/ed448-pkcs8.pem`` and + ``asymmetric/Ed448/ed448-pkcs8.der`` contain an unencrypted Ed448 key. +* ``asymmetric/Ed448/ed448-pub.pem`` and ``asymmetric/Ed448/ed448-pub.der`` + contain an Ed448 public key. Key exchange diff --git a/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8-enc.der b/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8-enc.der new file mode 100644 index 0000000000000000000000000000000000000000..0ac1c2662160a0cf4df916c21ab21d1df4066ca2 GIT binary patch literal 174 zcmXqLTx}4}#;Mij(e|B}k(JlL%Rm#sYM(`W zwH#R1?oeD~o>a!;*6;n&STW+&k+{s7j@50>ryY%t+>)H9nJ*ZBG2_SWY>~Dv6|ZOB SYP! literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8.pem b/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8.pem new file mode 100644 index 000000000000..98af16420ad4 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pkcs8.pem @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEcCAQAwBQYDK2VxBDsEOWyCpWLLgI0Q1jK+ichRPr9skp803fqMn2PJlg7240ij +UoyKP8wvBE45o/xblEkvjwMudUmiAJj5Ww== +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pub.der b/vectors/cryptography_vectors/asymmetric/Ed448/ed448-pub.der new file mode 100644 index 0000000000000000000000000000000000000000..bd2a95530bb2b8192f922496bd364a0e08362c23 GIT binary patch literal 69 zcmV-L0J{G$Lofvf11n{513Ca-*F>9Hv|;@$=ZEZJYSd~Sp)@3grw$*A4yRp!>1TND b@g#PeM#lyl)_6Vf Date: Wed, 20 Feb 2019 23:48:45 +0800 Subject: [PATCH 562/988] add ed25519 PKCS8 and subjectPublicKeyInfo vectors (#4719) * add ed25519 PKCS8 and subjectPublicKeyInfo vectors * line length fix --- docs/development/test-vectors.rst | 7 +++++++ .../asymmetric/Ed25519/ed25519-pkcs8-enc.der | Bin 0 -> 158 bytes .../asymmetric/Ed25519/ed25519-pkcs8-enc.pem | 6 ++++++ .../asymmetric/Ed25519/ed25519-pkcs8.der | Bin 0 -> 48 bytes .../asymmetric/Ed25519/ed25519-pkcs8.pem | 3 +++ .../asymmetric/Ed25519/ed25519-pub.der | Bin 0 -> 44 bytes .../asymmetric/Ed25519/ed25519-pub.pem | 3 +++ 7 files changed, 19 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.der create mode 100644 vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.pem create mode 100644 vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8.der create mode 100644 vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8.pem create mode 100644 vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pub.der create mode 100644 vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pub.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index d8014159d6e9..0ad94b2497e5 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -111,6 +111,13 @@ Custom asymmetric vectors contain an unencrypted X448 key. * ``asymmetric/X448/x448-pub.pem`` and ``asymmetric/X448/x448-pub.der`` contain an X448 public key. +* ``asymmetric/Ed25519/ed25519-pkcs8-enc.pem`` and + ``asymmetric/Ed25519/ed25519-pkcs8-enc.der`` contain an Ed25519 key encrypted + with AES 256 CBC with the password ``password``. +* ``asymmetric/Ed25519/ed25519-pkcs8.pem`` and + ``asymmetric/Ed25519/ed25519-pkcs8.der`` contain an unencrypted Ed25519 key. +* ``asymmetric/Ed25519/ed25519-pub.pem`` and + ``asymmetric/Ed25519/ed25519-pub.der`` contain an Ed25519 public key. * ``asymmetric/X25519/x25519-pkcs8-enc.pem`` and ``asymmetric/X25519/x25519-pkcs8-enc.der`` contain an X25519 key encrypted with AES 256 CBC with the password ``password``. diff --git a/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.der b/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.der new file mode 100644 index 0000000000000000000000000000000000000000..f268ed1bfe1a110adb4939b27d45b3efac84ef48 GIT binary patch literal 158 zcmXqLoNW-!#;Mij(e|B}k(JlL%Rm#sg ztC_pkYd^1V44kYPtde>tgGF!MI)}%VpLtR~sjqr7MRK)yn$+96mH&dW-~aahdlmrp C7dtEf literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.pem b/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.pem new file mode 100644 index 000000000000..d4bcdb2a43f8 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8-enc.pem @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAhDgfwSFbYckgICCAAw +DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEFR6pN0F5UEPFF/Z8RB0maoEQG0i +za5Fgv9/c8H9med7ttjbbh8T73t+Rq2dcFT2kcUM2HJWGrWMvDpTEPEy0hduYFDh +YMcDjtOCKyUTwPovQI0= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8.der b/vectors/cryptography_vectors/asymmetric/Ed25519/ed25519-pkcs8.der new file mode 100644 index 0000000000000000000000000000000000000000..71783b74d3d4d4eadf425a724ec0fcdd26c08f89 GIT binary patch literal 48 zcmXreV`5}5U}a<0PAy Date: Thu, 21 Feb 2019 09:52:10 +0800 Subject: [PATCH 563/988] encode the package version in the shared object (#4756) * encode the package version in the shared object * review feedback * move into build_ffi so the symbol is in all shared objects * review feedback --- src/_cffi_src/utils.py | 13 ++++++++++ .../hazmat/bindings/openssl/binding.py | 24 +++++++++++++++++++ tests/hazmat/bindings/test_openssl.py | 6 ++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/utils.py b/src/_cffi_src/utils.py index d3dd18a4ea91..eecd6ea12367 100644 --- a/src/_cffi_src/utils.py +++ b/src/_cffi_src/utils.py @@ -4,6 +4,7 @@ from __future__ import absolute_import, division, print_function +import os import sys from distutils.ccompiler import new_compiler from distutils.dist import Distribution @@ -11,6 +12,13 @@ from cffi import FFI +# Load the cryptography __about__ to get the current package version +base_src = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +about = {} +with open(os.path.join(base_src, "cryptography", "__about__.py")) as f: + exec(f.read(), about) + + def build_ffi_for_binding(module_name, module_prefix, modules, libraries=[], extra_compile_args=[], extra_link_args=[]): """ @@ -55,6 +63,11 @@ def build_ffi_for_binding(module_name, module_prefix, modules, libraries=[], def build_ffi(module_name, cdef_source, verify_source, libraries=[], extra_compile_args=[], extra_link_args=[]): ffi = FFI() + # Always add the CRYPTOGRAPHY_PACKAGE_VERSION to the shared object + cdef_source += "\nstatic const char *const CRYPTOGRAPHY_PACKAGE_VERSION;" + verify_source += '\n#define CRYPTOGRAPHY_PACKAGE_VERSION "{}"'.format( + about["__version__"] + ) ffi.cdef(cdef_source) ffi.set_source( module_name, diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 0824ea88c994..1115acbfa2a8 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -9,6 +9,7 @@ import types import warnings +import cryptography from cryptography import utils from cryptography.exceptions import InternalError from cryptography.hazmat.bindings._openssl import ffi, lib @@ -164,6 +165,29 @@ def _verify_openssl_version(lib): ) +def _verify_package_version(version): + # Occasionally we run into situations where the version of the Python + # package does not match the version of the shared object that is loaded. + # This may occur in environments where multiple versions of cryptography + # are installed and available in the python path. To avoid errors cropping + # up later this code checks that the currently imported package and the + # shared object that were loaded have the same version and raise an + # ImportError if they do not + so_package_version = ffi.string(lib.CRYPTOGRAPHY_PACKAGE_VERSION) + if version.encode("ascii") != so_package_version: + raise ImportError( + "The version of cryptography does not match the loaded " + "shared object. This can happen if you have multiple copies of " + "cryptography installed in your Python path. Please try creating " + "a new virtual environment to resolve this issue. " + "Loaded python version: {}, shared object version: {}".format( + version, so_package_version + ) + ) + + +_verify_package_version(cryptography.__version__) + # OpenSSL is not thread safe until the locks are initialized. We call this # method in module scope so that it executes with the import lock. On # Pythons < 3.4 this import lock is a global lock, which can prevent a race diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index fb1e62fa9b3d..29a1c459fa96 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -8,7 +8,7 @@ from cryptography.exceptions import InternalError from cryptography.hazmat.bindings.openssl.binding import ( - Binding, _consume_errors, _openssl_assert + Binding, _consume_errors, _openssl_assert, _verify_package_version ) @@ -118,3 +118,7 @@ def test_check_startup_errors_are_allowed(self): ) b._register_osrandom_engine() assert _consume_errors(b.lib) == [] + + def test_version_mismatch(self): + with pytest.raises(ImportError): + _verify_package_version("nottherightversion") From e1f7e0978231f73382f95b864200fdeca7d37bb7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 21 Feb 2019 12:53:45 +0800 Subject: [PATCH 564/988] add an EC OID to curve dictionary mapping (#4759) * add an EC OID to curve dictionary mapping * oid_to_curve function * changelog and docs fix * rename to get_curve_for_oid --- CHANGELOG.rst | 2 ++ docs/hazmat/primitives/asymmetric/ec.rst | 15 +++++++++ .../hazmat/primitives/asymmetric/ec.py | 33 +++++++++++++++++++ tests/hazmat/primitives/test_ec.py | 8 ++++- 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5a6d4b54f497..e4c747c87bfa 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,8 @@ Changelog * **BACKWARDS INCOMPATIBLE**: Removed ``cryptography.x509.Certificate.serial``, which had been deprecated for nearly 3 years. Use :attr:`~cryptography.x509.Certificate.serial_number` instead. +* Add support for easily mapping an object identifier to its elliptic curve + class via :func:`~cryptography.hazmat.primitives.asymmetric.ec.get_curve_for_oid`. .. _v2-5: diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index d89fde3da505..0035e5b0775c 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -926,6 +926,21 @@ Elliptic Curve Object Identifiers Corresponds to the dotted string ``"1.3.132.0.39"``. +.. function:: get_curve_for_oid(oid) + + .. versionadded:: 2.6 + + A function that takes an :class:`~cryptography.x509.ObjectIdentifier` + and returns the associated elliptic curve class. + + :param oid: An instance of + :class:`~cryptography.x509.ObjectIdentifier`. + + :returns: The matching elliptic curve class. The returned class conforms + to the :class:`EllipticCurve` interface. + + :raises LookupError: Raised if no elliptic curve is found that matches + the provided object identifier. .. _`FIPS 186-3`: https://csrc.nist.gov/csrc/media/publications/fips/186/3/archive/2009-06-25/documents/fips_186-3.pdf .. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 1de0976a60b5..529391f97136 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -465,3 +465,36 @@ def __hash__(self): class ECDH(object): pass + + +_OID_TO_CURVE = { + EllipticCurveOID.SECP192R1: SECP192R1, + EllipticCurveOID.SECP224R1: SECP224R1, + EllipticCurveOID.SECP256K1: SECP256K1, + EllipticCurveOID.SECP256R1: SECP256R1, + EllipticCurveOID.SECP384R1: SECP384R1, + EllipticCurveOID.SECP521R1: SECP521R1, + EllipticCurveOID.BRAINPOOLP256R1: BrainpoolP256R1, + EllipticCurveOID.BRAINPOOLP384R1: BrainpoolP384R1, + EllipticCurveOID.BRAINPOOLP512R1: BrainpoolP512R1, + EllipticCurveOID.SECT163K1: SECT163K1, + EllipticCurveOID.SECT163R2: SECT163R2, + EllipticCurveOID.SECT233K1: SECT233K1, + EllipticCurveOID.SECT233R1: SECT233R1, + EllipticCurveOID.SECT283K1: SECT283K1, + EllipticCurveOID.SECT283R1: SECT283R1, + EllipticCurveOID.SECT409K1: SECT409K1, + EllipticCurveOID.SECT409R1: SECT409R1, + EllipticCurveOID.SECT571K1: SECT571K1, + EllipticCurveOID.SECT571R1: SECT571R1, +} + + +def get_curve_for_oid(oid): + try: + return _OID_TO_CURVE[oid] + except KeyError: + raise LookupError( + "The provided object identifier has no matching elliptic " + "curve class" + ) diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 1f3a67d32aab..cd30223c3426 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -11,7 +11,7 @@ import pytest -from cryptography import exceptions, utils +from cryptography import exceptions, utils, x509 from cryptography.hazmat.backends.interfaces import ( EllipticCurveBackend, PEMSerializationBackend ) @@ -71,6 +71,12 @@ def _skip_exchange_algorithm_unsupported(backend, algorithm, curve): ) +def test_get_curve_for_oid(): + assert ec.get_curve_for_oid(ec.EllipticCurveOID.SECP256R1) == ec.SECP256R1 + with pytest.raises(LookupError): + ec.get_curve_for_oid(x509.ObjectIdentifier("1.1.1.1")) + + @utils.register_interface(ec.EllipticCurve) class DummyCurve(object): name = "dummy-curve" From 135bed6a4c12bfa602b3ee8ce9e1ce25333c738b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 25 Feb 2019 10:13:32 +0800 Subject: [PATCH 565/988] why did we have these variables (#4764) --- .../hazmat/backends/openssl/backend.py | 2 +- .../hazmat/bindings/openssl/binding.py | 2 -- tests/hazmat/backends/test_openssl.py | 14 +++++++------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 33a96af26a33..73491726bf86 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -133,7 +133,7 @@ def activate_builtin_random(self): def _get_osurandom_engine(self): # Fetches an engine by id and returns it. This creates a structural # reference. - e = self._lib.ENGINE_by_id(self._binding._osrandom_engine_id) + e = self._lib.ENGINE_by_id(self._lib.Cryptography_osrandom_engine_id) self.openssl_assert(e != self._ffi.NULL) # Initialize the engine for use. This adds a functional reference. res = self._lib.ENGINE_init(e) diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 1115acbfa2a8..c937afd43ed7 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -115,8 +115,6 @@ def _register_osrandom_engine(cls): # reliably clear the error queue. Once we clear it here we will # error on any subsequent unexpected item in the stack. cls.lib.ERR_clear_error() - cls._osrandom_engine_id = cls.lib.Cryptography_osrandom_engine_id - cls._osrandom_engine_name = cls.lib.Cryptography_osrandom_engine_name result = cls.lib.Cryptography_add_osrandom_engine() _openssl_assert(cls.lib, result in (1, 2)) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 0aa72d8904f7..6768e70f740f 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -178,7 +178,7 @@ def setup(self): # that engine in teardown. current_default = backend._lib.ENGINE_get_default_RAND() name = backend._lib.ENGINE_get_name(current_default) - assert name == backend._binding._osrandom_engine_name + assert name == backend._lib.Cryptography_osrandom_engine_name def teardown(self): # we need to reset state to being default. backend is a shared global @@ -186,7 +186,7 @@ def teardown(self): backend.activate_osrandom_engine() current_default = backend._lib.ENGINE_get_default_RAND() name = backend._lib.ENGINE_get_name(current_default) - assert name == backend._binding._osrandom_engine_name + assert name == backend._lib.Cryptography_osrandom_engine_name @pytest.mark.skipif(sys.executable is None, reason="No Python interpreter available.") @@ -223,7 +223,7 @@ def test_osrandom_engine_is_default(self, tmpdir): ) osrandom_engine_name = backend._ffi.string( - backend._binding._osrandom_engine_name + backend._lib.Cryptography_osrandom_engine_name ) assert engine_name.read().encode('ascii') == osrandom_engine_name @@ -242,7 +242,7 @@ def test_activate_osrandom_no_default(self): backend.activate_osrandom_engine() e = backend._lib.ENGINE_get_default_RAND() name = backend._lib.ENGINE_get_name(e) - assert name == backend._binding._osrandom_engine_name + assert name == backend._lib.Cryptography_osrandom_engine_name res = backend._lib.ENGINE_free(e) assert res == 1 @@ -250,7 +250,7 @@ def test_activate_builtin_random(self): e = backend._lib.ENGINE_get_default_RAND() assert e != backend._ffi.NULL name = backend._lib.ENGINE_get_name(e) - assert name == backend._binding._osrandom_engine_name + assert name == backend._lib.Cryptography_osrandom_engine_name res = backend._lib.ENGINE_free(e) assert res == 1 backend.activate_builtin_random() @@ -283,13 +283,13 @@ def test_osrandom_engine_implementation(self): def test_activate_osrandom_already_default(self): e = backend._lib.ENGINE_get_default_RAND() name = backend._lib.ENGINE_get_name(e) - assert name == backend._binding._osrandom_engine_name + assert name == backend._lib.Cryptography_osrandom_engine_name res = backend._lib.ENGINE_free(e) assert res == 1 backend.activate_osrandom_engine() e = backend._lib.ENGINE_get_default_RAND() name = backend._lib.ENGINE_get_name(e) - assert name == backend._binding._osrandom_engine_name + assert name == backend._lib.Cryptography_osrandom_engine_name res = backend._lib.ENGINE_free(e) assert res == 1 From 01a517919ce16cc9dd75db9d02dae00a4cc390bb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 24 Feb 2019 23:03:16 -0500 Subject: [PATCH 566/988] Remove a bunch of unused engine bindings (#4766) --- src/_cffi_src/openssl/engine.py | 61 --------------------------------- 1 file changed, 61 deletions(-) diff --git a/src/_cffi_src/openssl/engine.py b/src/_cffi_src/openssl/engine.py index 45ce952691a1..c255bbbc89e2 100644 --- a/src/_cffi_src/openssl/engine.py +++ b/src/_cffi_src/openssl/engine.py @@ -10,9 +10,6 @@ TYPES = """ typedef ... ENGINE; -typedef ... RSA_METHOD; -typedef ... DSA_METHOD; -typedef ... DH_METHOD; typedef struct { int (*bytes)(unsigned char *, int); int (*pseudorand)(unsigned char *, int); @@ -27,13 +24,7 @@ typedef ... ENGINE_CMD_DEFN; typedef ... UI_METHOD; -static const unsigned int ENGINE_METHOD_RSA; -static const unsigned int ENGINE_METHOD_DSA; static const unsigned int ENGINE_METHOD_RAND; -static const unsigned int ENGINE_METHOD_CIPHERS; -static const unsigned int ENGINE_METHOD_DIGESTS; -static const unsigned int ENGINE_METHOD_ALL; -static const unsigned int ENGINE_METHOD_NONE; static const int ENGINE_R_CONFLICTING_ENGINE_ID; """ @@ -41,52 +32,18 @@ FUNCTIONS = """ ENGINE *ENGINE_get_first(void); ENGINE *ENGINE_get_last(void); -ENGINE *ENGINE_get_next(ENGINE *); -ENGINE *ENGINE_get_prev(ENGINE *); int ENGINE_add(ENGINE *); int ENGINE_remove(ENGINE *); ENGINE *ENGINE_by_id(const char *); int ENGINE_init(ENGINE *); int ENGINE_finish(ENGINE *); void ENGINE_load_builtin_engines(void); -ENGINE *ENGINE_get_default_RSA(void); -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_DH(void); ENGINE *ENGINE_get_default_RAND(void); -ENGINE *ENGINE_get_cipher_engine(int); -ENGINE *ENGINE_get_digest_engine(int); -int ENGINE_set_default_RSA(ENGINE *); -int ENGINE_set_default_DSA(ENGINE *); -int ENGINE_set_default_DH(ENGINE *); int ENGINE_set_default_RAND(ENGINE *); -int ENGINE_set_default_ciphers(ENGINE *); -int ENGINE_set_default_digests(ENGINE *); -int ENGINE_set_default_string(ENGINE *, const char *); -int ENGINE_set_default(ENGINE *, unsigned int); -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int); -int ENGINE_register_RSA(ENGINE *); -void ENGINE_unregister_RSA(ENGINE *); -void ENGINE_register_all_RSA(void); -int ENGINE_register_DSA(ENGINE *); -void ENGINE_unregister_DSA(ENGINE *); -void ENGINE_register_all_DSA(void); -int ENGINE_register_DH(ENGINE *); -void ENGINE_unregister_DH(ENGINE *); -void ENGINE_register_all_DH(void); int ENGINE_register_RAND(ENGINE *); void ENGINE_unregister_RAND(ENGINE *); void ENGINE_register_all_RAND(void); -int ENGINE_register_ciphers(ENGINE *); -void ENGINE_unregister_ciphers(ENGINE *); -void ENGINE_register_all_ciphers(void); -int ENGINE_register_digests(ENGINE *); -void ENGINE_unregister_digests(ENGINE *); -void ENGINE_register_all_digests(void); -int ENGINE_register_complete(ENGINE *); -int ENGINE_register_all_complete(void); int ENGINE_ctrl(ENGINE *, int, long, void *, void (*)(void)); -int ENGINE_cmd_is_executable(ENGINE *, int); int ENGINE_ctrl_cmd(ENGINE *, const char *, long, void *, void (*)(void), int); int ENGINE_ctrl_cmd_string(ENGINE *, const char *, const char *, int); @@ -95,33 +52,15 @@ int ENGINE_up_ref(ENGINE *); int ENGINE_set_id(ENGINE *, const char *); int ENGINE_set_name(ENGINE *, const char *); -int ENGINE_set_RSA(ENGINE *, const RSA_METHOD *); -int ENGINE_set_DSA(ENGINE *, const DSA_METHOD *); -int ENGINE_set_DH(ENGINE *, const DH_METHOD *); int ENGINE_set_RAND(ENGINE *, const RAND_METHOD *); int ENGINE_set_destroy_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR); int ENGINE_set_init_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR); int ENGINE_set_finish_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR); int ENGINE_set_ctrl_function(ENGINE *, ENGINE_CTRL_FUNC_PTR); -int ENGINE_set_load_privkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR); -int ENGINE_set_load_pubkey_function(ENGINE *, ENGINE_LOAD_KEY_PTR); -int ENGINE_set_ciphers(ENGINE *, ENGINE_CIPHERS_PTR); -int ENGINE_set_digests(ENGINE *, ENGINE_DIGESTS_PTR); -int ENGINE_set_flags(ENGINE *, int); -int ENGINE_set_cmd_defns(ENGINE *, const ENGINE_CMD_DEFN *); const char *ENGINE_get_id(const ENGINE *); const char *ENGINE_get_name(const ENGINE *); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *); -const DH_METHOD *ENGINE_get_DH(const ENGINE *); const RAND_METHOD *ENGINE_get_RAND(const ENGINE *); -const EVP_CIPHER *ENGINE_get_cipher(ENGINE *, int); -const EVP_MD *ENGINE_get_digest(ENGINE *, int); -int ENGINE_get_flags(const ENGINE *); -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *); -EVP_PKEY *ENGINE_load_private_key(ENGINE *, const char *, UI_METHOD *, void *); -EVP_PKEY *ENGINE_load_public_key(ENGINE *, const char *, UI_METHOD *, void *); void ENGINE_add_conf_module(void); /* these became macros in 1.1.0 */ void ENGINE_load_openssl(void); From 76c784340c3851f402abc38dff8fa5f008cdc4d4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 25 Feb 2019 13:32:05 +0800 Subject: [PATCH 567/988] support NO_ENGINE (#4763) * support OPENSSL_NO_ENGINE * support some new openssl config args * sigh --- .travis.yml | 2 + .travis/install.sh | 6 +- .travis/openssl_config.sh | 13 ++++ .travis/run.sh | 11 +-- CHANGELOG.rst | 5 +- src/_cffi_src/openssl/engine.py | 68 +++++++++++++++++++ src/_cffi_src/openssl/ssl.py | 1 - .../hazmat/backends/openssl/backend.py | 17 ++--- .../hazmat/bindings/openssl/_conditional.py | 42 ++++++++++++ .../hazmat/bindings/openssl/binding.py | 5 +- tests/hazmat/backends/test_openssl.py | 3 + 11 files changed, 155 insertions(+), 18 deletions(-) create mode 100755 .travis/openssl_config.sh diff --git a/.travis.yml b/.travis.yml index 7ed660a8e975..fa45f134023b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,6 +51,8 @@ matrix: env: TOXENV=py27 OPENSSL=1.1.1a - python: 3.7 env: TOXENV=py37 OPENSSL=1.1.1a + - python: 3.7 + env: TOXENV=py37 OPENSSL=1.1.1a OPENSSL_CONFIG_FLAGS=no-engine - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 diff --git a/.travis/install.sh b/.travis/install.sh index a4bc3c978fdd..ed69e4683c4a 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -3,6 +3,8 @@ set -e set -x +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") + shlib_sed() { # modify the shlib version to a unique one to make sure the dynamic # linker doesn't load the system one. @@ -14,12 +16,12 @@ shlib_sed() { # download, compile, and install if it's not already present via travis # cache if [ -n "${OPENSSL}" ]; then - OPENSSL_DIR="ossl-2/${OPENSSL}" + . "$SCRIPT_DIR/openssl_config.sh" if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then curl -O "https://www.openssl.org/source/openssl-${OPENSSL}.tar.gz" tar zxf "openssl-${OPENSSL}.tar.gz" pushd "openssl-${OPENSSL}" - ./config shared no-ssl2 no-ssl3 -fPIC --prefix="$HOME/$OPENSSL_DIR" + ./config $OPENSSL_CONFIG_FLAGS -fPIC --prefix="$HOME/$OPENSSL_DIR" shlib_sed make depend make -j"$(nproc)" diff --git a/.travis/openssl_config.sh b/.travis/openssl_config.sh new file mode 100755 index 000000000000..83f16d2bfea8 --- /dev/null +++ b/.travis/openssl_config.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -e +set -x + +DEFAULT_CONFIG_FLAGS="shared no-ssl2 no-ssl3" +if [ -n "${OPENSSL_CONFIG_FLAGS}" ]; then + OPENSSL_CONFIG_FLAGS="$DEFAULT_CONFIG_FLAGS $OPENSSL_CONFIG_FLAGS" +else + OPENSSL_CONFIG_FLAGS=$DEFAULT_CONFIG_FLAGS +fi +CONFIG_HASH=$(echo "$OPENSSL_CONFIG_FLAGS" | sha1sum | sed 's/ .*$//') +OPENSSL_DIR="ossl-2/${OPENSSL}${CONFIG_HASH}" diff --git a/.travis/run.sh b/.travis/run.sh index 8f8dd6871bd4..ab12ac3c8eea 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -1,18 +1,21 @@ #!/bin/bash -ex +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") + if [[ "${TOXENV}" == "pypy" ]]; then PYENV_ROOT="$HOME/.pyenv" PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" fi if [ -n "${LIBRESSL}" ]; then - OPENSSL=$LIBRESSL - export CFLAGS="-Werror -Wno-error=deprecated-declarations -Wno-error=discarded-qualifiers -Wno-error=unused-function" + LIBRESSL_DIR="ossl-2/${LIBRESSL}" + export CFLAGS="-Werror -Wno-error=deprecated-declarations -Wno-error=discarded-qualifiers -Wno-error=unused-function -I$HOME/$LIBRESSL_DIR/include" + export PATH="$HOME/$LIBRESSL_DIR/bin:$PATH" + export LDFLAGS="-L$HOME/$LIBRESSL_DIR/lib -Wl,-rpath=$HOME/$LIBRESSL_DIR/lib" fi if [ -n "${OPENSSL}" ]; then - OPENSSL_DIR="ossl-2/${OPENSSL}" - + . "$SCRIPT_DIR/openssl_config.sh" export PATH="$HOME/$OPENSSL_DIR/bin:$PATH" export CFLAGS="${CFLAGS} -I$HOME/$OPENSSL_DIR/include" # rpath on linux will cause it to use an absolute path so we don't need to diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e4c747c87bfa..7c3f3bfeb16d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,7 +21,10 @@ Changelog which had been deprecated for nearly 3 years. Use :attr:`~cryptography.x509.Certificate.serial_number` instead. * Add support for easily mapping an object identifier to its elliptic curve - class via :func:`~cryptography.hazmat.primitives.asymmetric.ec.get_curve_for_oid`. + class via + :func:`~cryptography.hazmat.primitives.asymmetric.ec.get_curve_for_oid`. +* Add support for OpenSSL when compiled with the ``no-engine`` + (``OPENSSL_NO_ENGINE``) flag. .. _v2-5: diff --git a/src/_cffi_src/openssl/engine.py b/src/_cffi_src/openssl/engine.py index c255bbbc89e2..8996f0c816c7 100644 --- a/src/_cffi_src/openssl/engine.py +++ b/src/_cffi_src/openssl/engine.py @@ -27,6 +27,7 @@ static const unsigned int ENGINE_METHOD_RAND; static const int ENGINE_R_CONFLICTING_ENGINE_ID; +static const long Cryptography_HAS_ENGINE; """ FUNCTIONS = """ @@ -69,4 +70,71 @@ """ CUSTOMIZATIONS = """ +#ifdef OPENSSL_NO_ENGINE +static const long Cryptography_HAS_ENGINE = 0; +typedef int (*ENGINE_GEN_INT_FUNC_PTR)(ENGINE *); +typedef void *ENGINE_CTRL_FUNC_PTR; +typedef void *ENGINE_LOAD_KEY_PTR; +typedef void *ENGINE_CIPHERS_PTR; +typedef void *ENGINE_DIGESTS_PTR; +typedef struct ENGINE_CMD_DEFN_st { + unsigned int cmd_num; + const char *cmd_name; + const char *cmd_desc; + unsigned int cmd_flags; +} ENGINE_CMD_DEFN; + +/* This section is so osrandom_engine.c can successfully compile even + when engine support is disabled */ +#define ENGINE_CMD_BASE 0 +#define ENGINE_CMD_FLAG_NO_INPUT 0 +#define ENGINE_F_ENGINE_CTRL 0 +#define ENGINE_R_INVALID_ARGUMENT 0 +#define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 0 +int (*ENGINE_set_cmd_defns)(ENGINE *, const ENGINE_CMD_DEFN *) = NULL; + +static const unsigned int ENGINE_METHOD_RAND = 0; +static const int ENGINE_R_CONFLICTING_ENGINE_ID = 0; + +ENGINE *(*ENGINE_get_first)(void) = NULL; +ENGINE *(*ENGINE_get_last)(void) = NULL; +int (*ENGINE_add)(ENGINE *) = NULL; +int (*ENGINE_remove)(ENGINE *) = NULL; +ENGINE *(*ENGINE_by_id)(const char *) = NULL; +int (*ENGINE_init)(ENGINE *) = NULL; +int (*ENGINE_finish)(ENGINE *) = NULL; +void (*ENGINE_load_builtin_engines)(void) = NULL; +ENGINE *(*ENGINE_get_default_RAND)(void) = NULL; +int (*ENGINE_set_default_RAND)(ENGINE *) = NULL; +int (*ENGINE_register_RAND)(ENGINE *) = NULL; +void (*ENGINE_unregister_RAND)(ENGINE *) = NULL; +void (*ENGINE_register_all_RAND)(void) = NULL; +int (*ENGINE_ctrl)(ENGINE *, int, long, void *, void (*)(void)) = NULL; +int (*ENGINE_ctrl_cmd)(ENGINE *, const char *, long, void *, + void (*)(void), int) = NULL; +int (*ENGINE_ctrl_cmd_string)(ENGINE *, const char *, const char *, + int) = NULL; + +ENGINE *(*ENGINE_new)(void) = NULL; +int (*ENGINE_free)(ENGINE *) = NULL; +int (*ENGINE_up_ref)(ENGINE *) = NULL; +int (*ENGINE_set_id)(ENGINE *, const char *) = NULL; +int (*ENGINE_set_name)(ENGINE *, const char *) = NULL; +int (*ENGINE_set_RAND)(ENGINE *, const RAND_METHOD *) = NULL; +int (*ENGINE_set_destroy_function)(ENGINE *, ENGINE_GEN_INT_FUNC_PTR) = NULL; +int (*ENGINE_set_init_function)(ENGINE *, ENGINE_GEN_INT_FUNC_PTR) = NULL; +int (*ENGINE_set_finish_function)(ENGINE *, ENGINE_GEN_INT_FUNC_PTR) = NULL; +int (*ENGINE_set_ctrl_function)(ENGINE *, ENGINE_CTRL_FUNC_PTR) = NULL; +const char *(*ENGINE_get_id)(const ENGINE *) = NULL; +const char *(*ENGINE_get_name)(const ENGINE *) = NULL; +const RAND_METHOD *(*ENGINE_get_RAND)(const ENGINE *) = NULL; + +void (*ENGINE_add_conf_module)(void) = NULL; +/* these became macros in 1.1.0 */ +void (*ENGINE_load_openssl)(void) = NULL; +void (*ENGINE_load_dynamic)(void) = NULL; +void (*ENGINE_cleanup)(void) = NULL; +#else +static const long Cryptography_HAS_ENGINE = 1; +#endif """ diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 2218095cca9b..92fd1e3ec8ca 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -334,7 +334,6 @@ const COMP_METHOD *SSL_get_current_compression(SSL *); const COMP_METHOD *SSL_get_current_expansion(SSL *); const char *SSL_COMP_get_name(const COMP_METHOD *); -int SSL_CTX_set_client_cert_engine(SSL_CTX *, ENGINE *); unsigned long SSL_set_mode(SSL *, unsigned long); unsigned long SSL_get_mode(SSL *); diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 73491726bf86..d7bba2248878 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -150,14 +150,15 @@ def _get_osurandom_engine(self): self.openssl_assert(res == 1) def activate_osrandom_engine(self): - # Unregister and free the current engine. - self.activate_builtin_random() - with self._get_osurandom_engine() as e: - # Set the engine as the default RAND provider. - res = self._lib.ENGINE_set_default_RAND(e) - self.openssl_assert(res == 1) - # Reset the RNG to use the new engine. - self._lib.RAND_cleanup() + if self._lib.Cryptography_HAS_ENGINE: + # Unregister and free the current engine. + self.activate_builtin_random() + with self._get_osurandom_engine() as e: + # Set the engine as the default RAND provider. + res = self._lib.ENGINE_set_default_RAND(e) + self.openssl_assert(res == 1) + # Reset the RNG to use the new engine. + self._lib.RAND_cleanup() def osrandom_engine_implementation(self): buf = self._ffi.new("char[]", 64) diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index c0238dcc2028..3fecfe59d69c 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -341,6 +341,47 @@ def cryptography_has_evp_r_memory_limit_exceeded(): ] +def cryptography_has_engine(): + return [ + "ENGINE_get_first", + "ENGINE_get_last", + "ENGINE_add", + "ENGINE_remove", + "ENGINE_by_id", + "ENGINE_init", + "ENGINE_finish", + "ENGINE_load_builtin_engines", + "ENGINE_get_default_RAND", + "ENGINE_set_default_RAND", + "ENGINE_register_RAND", + "ENGINE_unregister_RAND", + "ENGINE_register_all_RAND", + "ENGINE_ctrl", + "ENGINE_ctrl_cmd", + "ENGINE_ctrl_cmd_string", + "ENGINE_new", + "ENGINE_free", + "ENGINE_up_ref", + "ENGINE_set_id", + "ENGINE_set_name", + "ENGINE_set_RAND", + "ENGINE_set_destroy_function", + "ENGINE_set_init_function", + "ENGINE_set_finish_function", + "ENGINE_set_ctrl_function", + "ENGINE_get_id", + "ENGINE_get_name", + "ENGINE_get_RAND", + "ENGINE_add_conf_module", + "ENGINE_load_openssl", + "ENGINE_load_dynamic", + "ENGINE_cleanup", + "ENGINE_METHOD_RAND", + "ENGINE_R_CONFLICTING_ENGINE_ID", + "Cryptography_add_osrandom_engine", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -412,4 +453,5 @@ def cryptography_has_evp_r_memory_limit_exceeded(): "Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED": ( cryptography_has_evp_r_memory_limit_exceeded ), + "Cryptography_HAS_ENGINE": cryptography_has_engine, } diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index c937afd43ed7..ca4e33fa586f 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -115,8 +115,9 @@ def _register_osrandom_engine(cls): # reliably clear the error queue. Once we clear it here we will # error on any subsequent unexpected item in the stack. cls.lib.ERR_clear_error() - result = cls.lib.Cryptography_add_osrandom_engine() - _openssl_assert(cls.lib, result in (1, 2)) + if cls.lib.Cryptography_HAS_ENGINE: + result = cls.lib.Cryptography_add_osrandom_engine() + _openssl_assert(cls.lib, result in (1, 2)) @classmethod def _ensure_ffi_initialized(cls): diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 6768e70f740f..20923792a53e 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -170,6 +170,9 @@ def test_bn_to_int(self): assert backend._bn_to_int(bn) == 0 +@pytest.mark.skipif( + backend._lib.Cryptography_HAS_ENGINE == 0, + reason="Requires OpenSSL with ENGINE support") class TestOpenSSLRandomEngine(object): def setup(self): # The default RAND engine is global and shared between From cc31c4f99e9ff1c2fa5acd0eabbf19a671b06b1d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 25 Feb 2019 20:43:45 +0800 Subject: [PATCH 568/988] reduce our engine bindings even more (#4768) --- src/_cffi_src/openssl/engine.py | 78 ------------------- src/_cffi_src/openssl/src/osrandom_engine.c | 15 ++++ src/_cffi_src/openssl/src/osrandom_engine.h | 3 + .../hazmat/backends/openssl/backend.py | 19 ++--- .../hazmat/bindings/openssl/_conditional.py | 23 ------ tests/hazmat/backends/test_openssl.py | 19 +++++ 6 files changed, 47 insertions(+), 110 deletions(-) diff --git a/src/_cffi_src/openssl/engine.py b/src/_cffi_src/openssl/engine.py index 8996f0c816c7..048f4ad5dab5 100644 --- a/src/_cffi_src/openssl/engine.py +++ b/src/_cffi_src/openssl/engine.py @@ -10,130 +10,52 @@ TYPES = """ typedef ... ENGINE; -typedef struct { - int (*bytes)(unsigned char *, int); - int (*pseudorand)(unsigned char *, int); - int (*status)(); - ...; -} RAND_METHOD; -typedef int (*ENGINE_GEN_INT_FUNC_PTR)(ENGINE *); -typedef ... *ENGINE_CTRL_FUNC_PTR; -typedef ... *ENGINE_LOAD_KEY_PTR; -typedef ... *ENGINE_CIPHERS_PTR; -typedef ... *ENGINE_DIGESTS_PTR; -typedef ... ENGINE_CMD_DEFN; -typedef ... UI_METHOD; - -static const unsigned int ENGINE_METHOD_RAND; static const int ENGINE_R_CONFLICTING_ENGINE_ID; static const long Cryptography_HAS_ENGINE; """ FUNCTIONS = """ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); int ENGINE_add(ENGINE *); -int ENGINE_remove(ENGINE *); ENGINE *ENGINE_by_id(const char *); int ENGINE_init(ENGINE *); int ENGINE_finish(ENGINE *); -void ENGINE_load_builtin_engines(void); ENGINE *ENGINE_get_default_RAND(void); int ENGINE_set_default_RAND(ENGINE *); -int ENGINE_register_RAND(ENGINE *); void ENGINE_unregister_RAND(ENGINE *); -void ENGINE_register_all_RAND(void); -int ENGINE_ctrl(ENGINE *, int, long, void *, void (*)(void)); int ENGINE_ctrl_cmd(ENGINE *, const char *, long, void *, void (*)(void), int); -int ENGINE_ctrl_cmd_string(ENGINE *, const char *, const char *, int); - -ENGINE *ENGINE_new(void); int ENGINE_free(ENGINE *); -int ENGINE_up_ref(ENGINE *); -int ENGINE_set_id(ENGINE *, const char *); -int ENGINE_set_name(ENGINE *, const char *); -int ENGINE_set_RAND(ENGINE *, const RAND_METHOD *); -int ENGINE_set_destroy_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR); -int ENGINE_set_init_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR); -int ENGINE_set_finish_function(ENGINE *, ENGINE_GEN_INT_FUNC_PTR); -int ENGINE_set_ctrl_function(ENGINE *, ENGINE_CTRL_FUNC_PTR); -const char *ENGINE_get_id(const ENGINE *); const char *ENGINE_get_name(const ENGINE *); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *); -void ENGINE_add_conf_module(void); /* these became macros in 1.1.0 */ -void ENGINE_load_openssl(void); void ENGINE_load_dynamic(void); -void ENGINE_cleanup(void); """ CUSTOMIZATIONS = """ #ifdef OPENSSL_NO_ENGINE static const long Cryptography_HAS_ENGINE = 0; -typedef int (*ENGINE_GEN_INT_FUNC_PTR)(ENGINE *); -typedef void *ENGINE_CTRL_FUNC_PTR; -typedef void *ENGINE_LOAD_KEY_PTR; -typedef void *ENGINE_CIPHERS_PTR; -typedef void *ENGINE_DIGESTS_PTR; -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; - const char *cmd_name; - const char *cmd_desc; - unsigned int cmd_flags; -} ENGINE_CMD_DEFN; - -/* This section is so osrandom_engine.c can successfully compile even - when engine support is disabled */ -#define ENGINE_CMD_BASE 0 -#define ENGINE_CMD_FLAG_NO_INPUT 0 -#define ENGINE_F_ENGINE_CTRL 0 -#define ENGINE_R_INVALID_ARGUMENT 0 -#define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 0 -int (*ENGINE_set_cmd_defns)(ENGINE *, const ENGINE_CMD_DEFN *) = NULL; -static const unsigned int ENGINE_METHOD_RAND = 0; static const int ENGINE_R_CONFLICTING_ENGINE_ID = 0; -ENGINE *(*ENGINE_get_first)(void) = NULL; -ENGINE *(*ENGINE_get_last)(void) = NULL; int (*ENGINE_add)(ENGINE *) = NULL; -int (*ENGINE_remove)(ENGINE *) = NULL; ENGINE *(*ENGINE_by_id)(const char *) = NULL; int (*ENGINE_init)(ENGINE *) = NULL; int (*ENGINE_finish)(ENGINE *) = NULL; -void (*ENGINE_load_builtin_engines)(void) = NULL; ENGINE *(*ENGINE_get_default_RAND)(void) = NULL; int (*ENGINE_set_default_RAND)(ENGINE *) = NULL; -int (*ENGINE_register_RAND)(ENGINE *) = NULL; void (*ENGINE_unregister_RAND)(ENGINE *) = NULL; -void (*ENGINE_register_all_RAND)(void) = NULL; int (*ENGINE_ctrl)(ENGINE *, int, long, void *, void (*)(void)) = NULL; int (*ENGINE_ctrl_cmd)(ENGINE *, const char *, long, void *, void (*)(void), int) = NULL; int (*ENGINE_ctrl_cmd_string)(ENGINE *, const char *, const char *, int) = NULL; -ENGINE *(*ENGINE_new)(void) = NULL; int (*ENGINE_free)(ENGINE *) = NULL; -int (*ENGINE_up_ref)(ENGINE *) = NULL; -int (*ENGINE_set_id)(ENGINE *, const char *) = NULL; -int (*ENGINE_set_name)(ENGINE *, const char *) = NULL; -int (*ENGINE_set_RAND)(ENGINE *, const RAND_METHOD *) = NULL; -int (*ENGINE_set_destroy_function)(ENGINE *, ENGINE_GEN_INT_FUNC_PTR) = NULL; -int (*ENGINE_set_init_function)(ENGINE *, ENGINE_GEN_INT_FUNC_PTR) = NULL; -int (*ENGINE_set_finish_function)(ENGINE *, ENGINE_GEN_INT_FUNC_PTR) = NULL; -int (*ENGINE_set_ctrl_function)(ENGINE *, ENGINE_CTRL_FUNC_PTR) = NULL; const char *(*ENGINE_get_id)(const ENGINE *) = NULL; const char *(*ENGINE_get_name)(const ENGINE *) = NULL; -const RAND_METHOD *(*ENGINE_get_RAND)(const ENGINE *) = NULL; -void (*ENGINE_add_conf_module)(void) = NULL; /* these became macros in 1.1.0 */ -void (*ENGINE_load_openssl)(void) = NULL; void (*ENGINE_load_dynamic)(void) = NULL; -void (*ENGINE_cleanup)(void) = NULL; #else static const long Cryptography_HAS_ENGINE = 1; #endif diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 1a660f0bfd81..1b893ec774bb 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -17,6 +17,8 @@ #include #endif +#ifndef OPENSSL_NO_ENGINE +/* OpenSSL has ENGINE support so build the engine. */ static const char *Cryptography_osrandom_engine_id = "osrandom"; /**************************************************************************** @@ -638,3 +640,16 @@ int Cryptography_add_osrandom_engine(void) { return 1; } + +#else +/* If OpenSSL has no ENGINE support then we don't want + * to compile the osrandom engine, but we do need some + * placeholders */ +static const char *Cryptography_osrandom_engine_id = "no-engine-support"; +static const char *Cryptography_osrandom_engine_name = "osrandom_engine disabled due to no engine support"; + +int Cryptography_add_osrandom_engine(void) { + return 0; +} + +#endif diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index 53f957fa6f18..7a48787dd3e7 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -1,3 +1,5 @@ +#ifndef OPENSSL_NO_ENGINE +/* OpenSSL has ENGINE support so include all of this. */ #ifdef _WIN32 #include #else @@ -97,3 +99,4 @@ static void ERR_Cryptography_OSRandom_error(int function, int reason, #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_UNEXPECTED 402 #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_FAILED 403 #define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_NOT_INIT 404 +#endif diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index d7bba2248878..e2a5fd783041 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -119,15 +119,16 @@ def openssl_assert(self, ok): return binding._openssl_assert(self._lib, ok) def activate_builtin_random(self): - # Obtain a new structural reference. - e = self._lib.ENGINE_get_default_RAND() - if e != self._ffi.NULL: - self._lib.ENGINE_unregister_RAND(e) - # Reset the RNG to use the new engine. - self._lib.RAND_cleanup() - # decrement the structural reference from get_default_RAND - res = self._lib.ENGINE_finish(e) - self.openssl_assert(res == 1) + if self._lib.Cryptography_HAS_ENGINE: + # Obtain a new structural reference. + e = self._lib.ENGINE_get_default_RAND() + if e != self._ffi.NULL: + self._lib.ENGINE_unregister_RAND(e) + # Reset the RNG to use the new engine. + self._lib.RAND_cleanup() + # decrement the structural reference from get_default_RAND + res = self._lib.ENGINE_finish(e) + self.openssl_assert(res == 1) @contextlib.contextmanager def _get_osurandom_engine(self): diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 3fecfe59d69c..044a6a4606a4 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -343,40 +343,17 @@ def cryptography_has_evp_r_memory_limit_exceeded(): def cryptography_has_engine(): return [ - "ENGINE_get_first", - "ENGINE_get_last", "ENGINE_add", - "ENGINE_remove", "ENGINE_by_id", "ENGINE_init", "ENGINE_finish", - "ENGINE_load_builtin_engines", "ENGINE_get_default_RAND", "ENGINE_set_default_RAND", - "ENGINE_register_RAND", "ENGINE_unregister_RAND", - "ENGINE_register_all_RAND", - "ENGINE_ctrl", "ENGINE_ctrl_cmd", - "ENGINE_ctrl_cmd_string", - "ENGINE_new", "ENGINE_free", - "ENGINE_up_ref", - "ENGINE_set_id", - "ENGINE_set_name", - "ENGINE_set_RAND", - "ENGINE_set_destroy_function", - "ENGINE_set_init_function", - "ENGINE_set_finish_function", - "ENGINE_set_ctrl_function", - "ENGINE_get_id", "ENGINE_get_name", - "ENGINE_get_RAND", - "ENGINE_add_conf_module", - "ENGINE_load_openssl", "ENGINE_load_dynamic", - "ENGINE_cleanup", - "ENGINE_METHOD_RAND", "ENGINE_R_CONFLICTING_ENGINE_ID", "Cryptography_add_osrandom_engine", ] diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 20923792a53e..b7c7e598e3f5 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -297,6 +297,25 @@ def test_activate_osrandom_already_default(self): assert res == 1 +@pytest.mark.skipif( + backend._lib.Cryptography_HAS_ENGINE == 1, + reason="Requires OpenSSL without ENGINE support") +class TestOpenSSLNoEngine(object): + def test_no_engine_support(self): + assert backend._ffi.string( + backend._lib.Cryptography_osrandom_engine_id + ) == b"no-engine-support" + assert backend._ffi.string( + backend._lib.Cryptography_osrandom_engine_name + ) == b"osrandom_engine disabled due to no engine support" + + def test_activate_builtin_random_does_nothing(self): + backend.activate_builtin_random() + + def test_activate_osrandom_does_nothing(self): + backend.activate_osrandom_engine() + + class TestOpenSSLRSA(object): def test_generate_rsa_parameters_supported(self): assert backend.generate_rsa_parameters_supported(1, 1024) is False From d01b44edf5ca0240e433028ddf9995005ba1c9c0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 25 Feb 2019 08:21:17 -0500 Subject: [PATCH 569/988] Polish off removal of unused engine bindings (#4769) --- src/_cffi_src/openssl/engine.py | 12 ------------ .../hazmat/bindings/openssl/_conditional.py | 3 --- 2 files changed, 15 deletions(-) diff --git a/src/_cffi_src/openssl/engine.py b/src/_cffi_src/openssl/engine.py index 048f4ad5dab5..fa503a2644b5 100644 --- a/src/_cffi_src/openssl/engine.py +++ b/src/_cffi_src/openssl/engine.py @@ -11,12 +11,10 @@ TYPES = """ typedef ... ENGINE; -static const int ENGINE_R_CONFLICTING_ENGINE_ID; static const long Cryptography_HAS_ENGINE; """ FUNCTIONS = """ -int ENGINE_add(ENGINE *); ENGINE *ENGINE_by_id(const char *); int ENGINE_init(ENGINE *); int ENGINE_finish(ENGINE *); @@ -27,35 +25,25 @@ int ENGINE_free(ENGINE *); const char *ENGINE_get_name(const ENGINE *); -/* these became macros in 1.1.0 */ -void ENGINE_load_dynamic(void); """ CUSTOMIZATIONS = """ #ifdef OPENSSL_NO_ENGINE static const long Cryptography_HAS_ENGINE = 0; -static const int ENGINE_R_CONFLICTING_ENGINE_ID = 0; - -int (*ENGINE_add)(ENGINE *) = NULL; ENGINE *(*ENGINE_by_id)(const char *) = NULL; int (*ENGINE_init)(ENGINE *) = NULL; int (*ENGINE_finish)(ENGINE *) = NULL; ENGINE *(*ENGINE_get_default_RAND)(void) = NULL; int (*ENGINE_set_default_RAND)(ENGINE *) = NULL; void (*ENGINE_unregister_RAND)(ENGINE *) = NULL; -int (*ENGINE_ctrl)(ENGINE *, int, long, void *, void (*)(void)) = NULL; int (*ENGINE_ctrl_cmd)(ENGINE *, const char *, long, void *, void (*)(void), int) = NULL; -int (*ENGINE_ctrl_cmd_string)(ENGINE *, const char *, const char *, - int) = NULL; int (*ENGINE_free)(ENGINE *) = NULL; const char *(*ENGINE_get_id)(const ENGINE *) = NULL; const char *(*ENGINE_get_name)(const ENGINE *) = NULL; -/* these became macros in 1.1.0 */ -void (*ENGINE_load_dynamic)(void) = NULL; #else static const long Cryptography_HAS_ENGINE = 1; #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 044a6a4606a4..7187b69f4a15 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -343,7 +343,6 @@ def cryptography_has_evp_r_memory_limit_exceeded(): def cryptography_has_engine(): return [ - "ENGINE_add", "ENGINE_by_id", "ENGINE_init", "ENGINE_finish", @@ -353,8 +352,6 @@ def cryptography_has_engine(): "ENGINE_ctrl_cmd", "ENGINE_free", "ENGINE_get_name", - "ENGINE_load_dynamic", - "ENGINE_R_CONFLICTING_ENGINE_ID", "Cryptography_add_osrandom_engine", ] From 857b90dda53a4341ec16a7f2c4c7556af6a8c732 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 25 Feb 2019 23:58:40 -0500 Subject: [PATCH 570/988] Removed unused constant from bindings (#4771) --- src/_cffi_src/openssl/cmac.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/_cffi_src/openssl/cmac.py b/src/_cffi_src/openssl/cmac.py index f976647f7585..557abd1ca8f9 100644 --- a/src/_cffi_src/openssl/cmac.py +++ b/src/_cffi_src/openssl/cmac.py @@ -11,7 +11,6 @@ """ TYPES = """ -static const int Cryptography_HAS_CMAC; typedef ... CMAC_CTX; """ @@ -25,5 +24,4 @@ """ CUSTOMIZATIONS = """ -static const long Cryptography_HAS_CMAC = 1; """ From 75a7a36abb4165ff33482a1f22be5da0b83b63df Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 26 Feb 2019 00:48:11 -0500 Subject: [PATCH 571/988] Remove unused bindings from aes.py (#4772) --- src/_cffi_src/openssl/aes.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/_cffi_src/openssl/aes.py b/src/_cffi_src/openssl/aes.py index 028c92ce222a..5c9dee6df0ec 100644 --- a/src/_cffi_src/openssl/aes.py +++ b/src/_cffi_src/openssl/aes.py @@ -9,12 +9,7 @@ """ TYPES = """ -static const int Cryptography_HAS_AES_WRAP; - -struct aes_key_st { - ...; -}; -typedef struct aes_key_st AES_KEY; +typedef ... AES_KEY; """ FUNCTIONS = """ @@ -28,5 +23,4 @@ """ CUSTOMIZATIONS = """ -static const long Cryptography_HAS_AES_WRAP = 1; """ From fbf3b9a15ac87dce14de37bea21d321284a064e7 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 26 Feb 2019 00:48:41 -0500 Subject: [PATCH 572/988] Remove unused constant from ec.py bindings (#4773) --- src/_cffi_src/openssl/ec.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/_cffi_src/openssl/ec.py b/src/_cffi_src/openssl/ec.py index 66bcadc2372d..258afa21174e 100644 --- a/src/_cffi_src/openssl/ec.py +++ b/src/_cffi_src/openssl/ec.py @@ -10,7 +10,6 @@ """ TYPES = """ -static const int Cryptography_HAS_EC; static const int Cryptography_HAS_EC2M; static const int Cryptography_HAS_EC_1_0_2; @@ -109,8 +108,6 @@ """ CUSTOMIZATIONS = """ -static const long Cryptography_HAS_EC = 1; - #if defined(OPENSSL_NO_EC2M) static const long Cryptography_HAS_EC2M = 0; From feefd33dd9194c24b4b7ef0a9d63daf53aa85a91 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 26 Feb 2019 01:29:52 -0500 Subject: [PATCH 573/988] Remove unused constant binding from ecdh.py (#4774) --- src/_cffi_src/openssl/ecdh.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/_cffi_src/openssl/ecdh.py b/src/_cffi_src/openssl/ecdh.py index 043635c41a1e..5db125714739 100644 --- a/src/_cffi_src/openssl/ecdh.py +++ b/src/_cffi_src/openssl/ecdh.py @@ -9,7 +9,6 @@ """ TYPES = """ -static const int Cryptography_HAS_ECDH; static const int Cryptography_HAS_SET_ECDH_AUTO; """ @@ -20,8 +19,6 @@ """ CUSTOMIZATIONS = """ -static const long Cryptography_HAS_ECDH = 1; - #ifndef SSL_CTX_set_ecdh_auto static const long Cryptography_HAS_SET_ECDH_AUTO = 0; long (*SSL_CTX_set_ecdh_auto)(SSL_CTX *, int) = NULL; From 7f40793b87478a928d540335417f0a19b39baf7c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 26 Feb 2019 21:27:49 +0800 Subject: [PATCH 574/988] strip out unused EVP functions (#4775) --- src/_cffi_src/openssl/evp.py | 51 ------------------------------------ 1 file changed, 51 deletions(-) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index 9ae6025a4057..e4d3f0578ba4 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -30,9 +30,6 @@ static const int EVP_CTRL_AEAD_GET_TAG; static const int EVP_CTRL_AEAD_SET_TAG; -static const int Cryptography_HAS_GCM; -static const int Cryptography_HAS_PBKDF2_HMAC; -static const int Cryptography_HAS_PKEY_CTX; static const int Cryptography_HAS_SCRYPT; static const int Cryptography_HAS_EVP_PKEY_DHX; static const int Cryptography_HAS_EVP_PKEY_get_set_tls_encodedpoint; @@ -43,23 +40,12 @@ FUNCTIONS = """ const EVP_CIPHER *EVP_get_cipherbyname(const char *); -int EVP_EncryptInit_ex(EVP_CIPHER_CTX *, const EVP_CIPHER *, ENGINE *, - const unsigned char *, const unsigned char *); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *, int); -int EVP_EncryptUpdate(EVP_CIPHER_CTX *, unsigned char *, int *, - const unsigned char *, int); -int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *, unsigned char *, int *); -int EVP_DecryptInit_ex(EVP_CIPHER_CTX *, const EVP_CIPHER *, ENGINE *, - const unsigned char *, const unsigned char *); -int EVP_DecryptUpdate(EVP_CIPHER_CTX *, unsigned char *, int *, - const unsigned char *, int); -int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *, unsigned char *, int *); int EVP_CipherInit_ex(EVP_CIPHER_CTX *, const EVP_CIPHER *, ENGINE *, const unsigned char *, const unsigned char *, int); int EVP_CipherUpdate(EVP_CIPHER_CTX *, unsigned char *, int *, const unsigned char *, int); int EVP_CipherFinal_ex(EVP_CIPHER_CTX *, unsigned char *, int *); -int EVP_CIPHER_block_size(const EVP_CIPHER *); int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *); EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *); @@ -72,8 +58,6 @@ int EVP_DigestFinal_ex(EVP_MD_CTX *, unsigned char *, unsigned int *); int EVP_DigestFinalXOF(EVP_MD_CTX *, unsigned char *, size_t); const EVP_MD *EVP_get_digestbyname(const char *); -const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *); -int EVP_MD_size(const EVP_MD *); EVP_PKEY *EVP_PKEY_new(void); void EVP_PKEY_free(EVP_PKEY *); @@ -97,14 +81,6 @@ int EVP_VerifyFinal(EVP_MD_CTX *, const unsigned char *, unsigned int, EVP_PKEY *); -const EVP_MD *EVP_md5(void); -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_ripemd160(void); -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); - int EVP_DigestSignInit(EVP_MD_CTX *, EVP_PKEY_CTX **, const EVP_MD *, ENGINE *, EVP_PKEY *); int EVP_DigestVerifyInit(EVP_MD_CTX *, EVP_PKEY_CTX **, const EVP_MD *, @@ -131,18 +107,6 @@ int EVP_PKEY_set1_DSA(EVP_PKEY *, DSA *); int EVP_PKEY_set1_DH(EVP_PKEY *, DH *); -int EVP_PKEY_get_attr_count(const EVP_PKEY *); -int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *, int, int); -X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *, int); -X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *, int); -int EVP_PKEY_add1_attr(EVP_PKEY *, X509_ATTRIBUTE *); -int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *, const ASN1_OBJECT *, int, - const unsigned char *, int); -int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *, int, int, - const unsigned char *, int); -int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *, const char *, int, - const unsigned char *, int); - int EVP_PKEY_cmp(const EVP_PKEY *, const EVP_PKEY *); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *); @@ -170,25 +134,15 @@ int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *, const unsigned char *, size_t); -/* PKCS8_PRIV_KEY_INFO * became const in 1.1.0 */ -EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *); - /* EVP_PKEY * became const in 1.1.0 */ int EVP_PKEY_bits(EVP_PKEY *); -/* became a macro in 1.1.0 */ -void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *); - void OpenSSL_add_all_algorithms(void); int EVP_PKEY_assign_RSA(EVP_PKEY *, RSA *); -int EVP_PKEY_assign_DSA(EVP_PKEY *, DSA *); -int EVP_PKEY_assign_EC_KEY(EVP_PKEY *, EC_KEY *); EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *); int EVP_PKEY_set1_EC_KEY(EVP_PKEY *, EC_KEY *); -int EVP_MD_CTX_block_size(const EVP_MD_CTX *); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *, int, int, void *); int PKCS5_PBKDF2_HMAC(const char *, int, const unsigned char *, int, int, @@ -209,11 +163,6 @@ """ CUSTOMIZATIONS = """ -const long Cryptography_HAS_GCM = 1; - -const long Cryptography_HAS_PBKDF2_HMAC = 1; -const long Cryptography_HAS_PKEY_CTX = 1; - #ifdef EVP_PKEY_DHX const long Cryptography_HAS_EVP_PKEY_DHX = 1; #else From fceb02e8993ff0e7aa6389f65defeff629c17240 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 26 Feb 2019 21:28:10 +0800 Subject: [PATCH 575/988] how about we have less NIDs (#4777) * how about we have less NIDs * pyopenssl needs these two NIDs still --- src/_cffi_src/openssl/nid.py | 204 ----------------------------------- 1 file changed, 204 deletions(-) diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index 4117b933a151..8408d6b31995 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -15,218 +15,14 @@ static const int Cryptography_HAS_ED25519; static const int NID_undef; -static const int NID_dsa; -static const int NID_dsaWithSHA; -static const int NID_dsaWithSHA1; -static const int NID_md2; -static const int NID_md4; -static const int NID_md5; -static const int NID_mdc2; -static const int NID_ripemd160; -static const int NID_sha; -static const int NID_sha1; -static const int NID_sha256; -static const int NID_sha384; -static const int NID_sha512; -static const int NID_sha224; -static const int NID_sha; -static const int NID_ecdsa_with_SHA1; -static const int NID_ecdsa_with_SHA224; -static const int NID_ecdsa_with_SHA256; -static const int NID_ecdsa_with_SHA384; -static const int NID_ecdsa_with_SHA512; static const int NID_pbe_WithSHA1And3_Key_TripleDES_CBC; -static const int NID_X9_62_c2pnb163v1; -static const int NID_X9_62_c2pnb163v2; -static const int NID_X9_62_c2pnb163v3; -static const int NID_X9_62_c2pnb176v1; -static const int NID_X9_62_c2tnb191v1; -static const int NID_X9_62_c2tnb191v2; -static const int NID_X9_62_c2tnb191v3; -static const int NID_X9_62_c2onb191v4; -static const int NID_X9_62_c2onb191v5; -static const int NID_X9_62_c2pnb208w1; -static const int NID_X9_62_c2tnb239v1; -static const int NID_X9_62_c2tnb239v2; -static const int NID_X9_62_c2tnb239v3; -static const int NID_X9_62_c2onb239v4; -static const int NID_X9_62_c2onb239v5; -static const int NID_X9_62_c2pnb272w1; -static const int NID_X9_62_c2pnb304w1; -static const int NID_X9_62_c2tnb359v1; -static const int NID_X9_62_c2pnb368w1; -static const int NID_X9_62_c2tnb431r1; -static const int NID_X9_62_prime192v1; -static const int NID_X9_62_prime192v2; -static const int NID_X9_62_prime192v3; -static const int NID_X9_62_prime239v1; -static const int NID_X9_62_prime239v2; -static const int NID_X9_62_prime239v3; -static const int NID_X9_62_prime256v1; -static const int NID_secp112r1; -static const int NID_secp112r2; -static const int NID_secp128r1; -static const int NID_secp128r2; -static const int NID_secp160k1; -static const int NID_secp160r1; -static const int NID_secp160r2; -static const int NID_sect163k1; -static const int NID_sect163r1; -static const int NID_sect163r2; -static const int NID_secp192k1; -static const int NID_secp224k1; -static const int NID_secp224r1; -static const int NID_secp256k1; -static const int NID_secp384r1; -static const int NID_secp521r1; -static const int NID_sect113r1; -static const int NID_sect113r2; -static const int NID_sect131r1; -static const int NID_sect131r2; -static const int NID_sect193r1; -static const int NID_sect193r2; -static const int NID_sect233k1; -static const int NID_sect233r1; -static const int NID_sect239k1; -static const int NID_sect283k1; -static const int NID_sect283r1; -static const int NID_sect409k1; -static const int NID_sect409r1; -static const int NID_sect571k1; -static const int NID_sect571r1; static const int NID_X25519; static const int NID_X448; static const int NID_ED25519; static const int NID_ED448; -static const int NID_wap_wsg_idm_ecid_wtls1; -static const int NID_wap_wsg_idm_ecid_wtls3; -static const int NID_wap_wsg_idm_ecid_wtls4; -static const int NID_wap_wsg_idm_ecid_wtls5; -static const int NID_wap_wsg_idm_ecid_wtls6; -static const int NID_wap_wsg_idm_ecid_wtls7; -static const int NID_wap_wsg_idm_ecid_wtls8; -static const int NID_wap_wsg_idm_ecid_wtls9; -static const int NID_wap_wsg_idm_ecid_wtls10; -static const int NID_wap_wsg_idm_ecid_wtls11; -static const int NID_wap_wsg_idm_ecid_wtls12; -static const int NID_ipsec3; -static const int NID_ipsec4; -static const char *const SN_X9_62_c2pnb163v1; -static const char *const SN_X9_62_c2pnb163v2; -static const char *const SN_X9_62_c2pnb163v3; -static const char *const SN_X9_62_c2pnb176v1; -static const char *const SN_X9_62_c2tnb191v1; -static const char *const SN_X9_62_c2tnb191v2; -static const char *const SN_X9_62_c2tnb191v3; -static const char *const SN_X9_62_c2onb191v4; -static const char *const SN_X9_62_c2onb191v5; -static const char *const SN_X9_62_c2pnb208w1; -static const char *const SN_X9_62_c2tnb239v1; -static const char *const SN_X9_62_c2tnb239v2; -static const char *const SN_X9_62_c2tnb239v3; -static const char *const SN_X9_62_c2onb239v4; -static const char *const SN_X9_62_c2onb239v5; -static const char *const SN_X9_62_c2pnb272w1; -static const char *const SN_X9_62_c2pnb304w1; -static const char *const SN_X9_62_c2tnb359v1; -static const char *const SN_X9_62_c2pnb368w1; -static const char *const SN_X9_62_c2tnb431r1; -static const char *const SN_X9_62_prime192v1; -static const char *const SN_X9_62_prime192v2; -static const char *const SN_X9_62_prime192v3; -static const char *const SN_X9_62_prime239v1; -static const char *const SN_X9_62_prime239v2; -static const char *const SN_X9_62_prime239v3; -static const char *const SN_X9_62_prime256v1; -static const char *const SN_secp112r1; -static const char *const SN_secp112r2; -static const char *const SN_secp128r1; -static const char *const SN_secp128r2; -static const char *const SN_secp160k1; -static const char *const SN_secp160r1; -static const char *const SN_secp160r2; -static const char *const SN_sect163k1; -static const char *const SN_sect163r1; -static const char *const SN_sect163r2; -static const char *const SN_secp192k1; -static const char *const SN_secp224k1; -static const char *const SN_secp224r1; -static const char *const SN_secp256k1; -static const char *const SN_secp384r1; -static const char *const SN_secp521r1; -static const char *const SN_sect113r1; -static const char *const SN_sect113r2; -static const char *const SN_sect131r1; -static const char *const SN_sect131r2; -static const char *const SN_sect193r1; -static const char *const SN_sect193r2; -static const char *const SN_sect233k1; -static const char *const SN_sect233r1; -static const char *const SN_sect239k1; -static const char *const SN_sect283k1; -static const char *const SN_sect283r1; -static const char *const SN_sect409k1; -static const char *const SN_sect409r1; -static const char *const SN_sect571k1; -static const char *const SN_sect571r1; -static const char *const SN_wap_wsg_idm_ecid_wtls1; -static const char *const SN_wap_wsg_idm_ecid_wtls3; -static const char *const SN_wap_wsg_idm_ecid_wtls4; -static const char *const SN_wap_wsg_idm_ecid_wtls5; -static const char *const SN_wap_wsg_idm_ecid_wtls6; -static const char *const SN_wap_wsg_idm_ecid_wtls7; -static const char *const SN_wap_wsg_idm_ecid_wtls8; -static const char *const SN_wap_wsg_idm_ecid_wtls9; -static const char *const SN_wap_wsg_idm_ecid_wtls10; -static const char *const SN_wap_wsg_idm_ecid_wtls11; -static const char *const SN_wap_wsg_idm_ecid_wtls12; -static const char *const SN_ipsec3; -static const char *const SN_ipsec4; -static const int NID_subject_key_identifier; -static const int NID_authority_key_identifier; -static const int NID_policy_constraints; -static const int NID_ext_key_usage; -static const int NID_info_access; -static const int NID_key_usage; static const int NID_subject_alt_name; -static const int NID_issuer_alt_name; -static const int NID_basic_constraints; -static const int NID_issuing_distribution_point; -static const int NID_certificate_issuer; -static const int NID_name_constraints; -static const int NID_crl_distribution_points; -static const int NID_certificate_policies; -static const int NID_inhibit_any_policy; - -static const int NID_private_key_usage_period; -static const int NID_crl_number; static const int NID_crl_reason; -static const int NID_invalidity_date; -static const int NID_delta_crl; -static const int NID_any_policy; -static const int NID_policy_mappings; -static const int NID_target_information; -static const int NID_no_rev_avail; - -static const int NID_commonName; -static const int NID_countryName; -static const int NID_localityName; -static const int NID_stateOrProvinceName; -static const int NID_organizationName; -static const int NID_organizationalUnitName; -static const int NID_serialNumber; -static const int NID_surname; -static const int NID_givenName; -static const int NID_title; -static const int NID_generationQualifier; -static const int NID_dnQualifier; -static const int NID_pseudonym; -static const int NID_domainComponent; -static const int NID_pkcs9_emailAddress; - -static const int NID_ad_OCSP; -static const int NID_ad_ca_issuers; """ FUNCTIONS = """ From 50cd8009d8e5fda8d771f41ecd60ca08f3fc84cc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 26 Feb 2019 21:28:29 +0800 Subject: [PATCH 576/988] remove unused PEM bindings (#4778) --- src/_cffi_src/openssl/pem.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/_cffi_src/openssl/pem.py b/src/_cffi_src/openssl/pem.py index 55519bb1bbcd..09b523d604ac 100644 --- a/src/_cffi_src/openssl/pem.py +++ b/src/_cffi_src/openssl/pem.py @@ -46,17 +46,11 @@ int PEM_write_bio_X509_CRL(BIO *, X509_CRL *); -X509 *PEM_read_bio_X509_AUX(BIO *, X509 **, pem_password_cb *, void *); - PKCS7 *PEM_read_bio_PKCS7(BIO *, PKCS7 **, pem_password_cb *, void *); int PEM_write_bio_PKCS7(BIO *, PKCS7 *); DH *PEM_read_bio_DHparams(BIO *, DH **, pem_password_cb *, void *); -DSA *PEM_read_bio_DSAPrivateKey(BIO *, DSA **, pem_password_cb *, void *); - -RSA *PEM_read_bio_RSAPrivateKey(BIO *, RSA **, pem_password_cb *, void *); - int PEM_write_bio_DSAPrivateKey(BIO *, DSA *, const EVP_CIPHER *, unsigned char *, int, pem_password_cb *, void *); @@ -65,12 +59,8 @@ unsigned char *, int, pem_password_cb *, void *); -DSA *PEM_read_bio_DSA_PUBKEY(BIO *, DSA **, pem_password_cb *, void *); - RSA *PEM_read_bio_RSAPublicKey(BIO *, RSA **, pem_password_cb *, void *); -int PEM_write_bio_DSA_PUBKEY(BIO *, DSA *); - int PEM_write_bio_RSAPublicKey(BIO *, const RSA *); EVP_PKEY *PEM_read_bio_PUBKEY(BIO *, EVP_PKEY **, pem_password_cb *, void *); From 177ba1cca189f7065f1577deee04f0ba503be5c3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 26 Feb 2019 21:28:45 +0800 Subject: [PATCH 577/988] remove unused DH bindings (#4779) --- src/_cffi_src/openssl/dh.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/_cffi_src/openssl/dh.py b/src/_cffi_src/openssl/dh.py index b0fd21f54079..6fdc7dd6cce3 100644 --- a/src/_cffi_src/openssl/dh.py +++ b/src/_cffi_src/openssl/dh.py @@ -18,15 +18,8 @@ DH *DH_new(void); void DH_free(DH *); int DH_size(const DH *); -int DH_check_pub_key(const DH *, const BIGNUM *, int *); int DH_generate_key(DH *); int DH_compute_key(unsigned char *, const BIGNUM *, DH *); -int DH_set_ex_data(DH *, int, void *); -void *DH_get_ex_data(DH *, int); -DH *d2i_DHparams(DH **, const unsigned char **, long); -int i2d_DHparams(const DH *, unsigned char **); -int DHparams_print_fp(FILE *, const DH *); -int DHparams_print(BIO *, const DH *); DH *DHparams_dup(DH *); /* added in 1.1.0 when the DH struct was opaqued */ From 8b2f5485d3ce673b8cd6e6934004915b1aa82cff Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 26 Feb 2019 21:29:26 +0800 Subject: [PATCH 578/988] remove unused locking functions (#4780) * remove unused locking functions we do all this in C when necessary * oops, need this --- src/_cffi_src/openssl/crypto.py | 26 ++----------------- .../hazmat/bindings/openssl/_conditional.py | 5 ---- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/src/_cffi_src/openssl/crypto.py b/src/_cffi_src/openssl/crypto.py index 03672d55ed49..d88354420530 100644 --- a/src/_cffi_src/openssl/crypto.py +++ b/src/_cffi_src/openssl/crypto.py @@ -27,22 +27,15 @@ static const int CRYPTO_MEM_CHECK_OFF; static const int CRYPTO_MEM_CHECK_ENABLE; static const int CRYPTO_MEM_CHECK_DISABLE; -static const int CRYPTO_LOCK; -static const int CRYPTO_UNLOCK; -static const int CRYPTO_READ; -static const int CRYPTO_LOCK_SSL; """ FUNCTIONS = """ int CRYPTO_mem_ctrl(int); -void CRYPTO_cleanup_all_ex_data(void); void OPENSSL_cleanup(void); -/* as of 1.1.0 OpenSSL does its own locking *angelic chorus*. These functions - have become macros that are no ops */ -int CRYPTO_num_locks(void); -void CRYPTO_set_locking_callback(void(*)(int, int, const char *, int)); +/* as of 1.1.0 OpenSSL does its own locking *angelic chorus*. This function + is now a noop macro. We can delete this once we drop 1.0.2 support. */ void (*CRYPTO_get_locking_callback(void))(int, int, const char *, int); /* SSLeay was removed in 1.1.0 */ @@ -56,8 +49,6 @@ void *OPENSSL_malloc(size_t); void OPENSSL_free(void *); -/* This was removed in 1.1.0 */ -void CRYPTO_lock(int, int, const char *, int); /* Signature changed significantly in 1.1.0, only expose there for sanity */ int Cryptography_CRYPTO_set_mem_functions( @@ -98,19 +89,6 @@ static const long Cryptography_HAS_LOCKING_CALLBACKS = 1; #else static const long Cryptography_HAS_LOCKING_CALLBACKS = 0; -#if !defined(CRYPTO_LOCK) -static const long CRYPTO_LOCK = 0; -#endif -#if !defined(CRYPTO_UNLOCK) -static const long CRYPTO_UNLOCK = 0; -#endif -#if !defined(CRYPTO_READ) -static const long CRYPTO_READ = 0; -#endif -#if !defined(CRYPTO_LOCK_SSL) -static const long CRYPTO_LOCK_SSL = 0; -#endif -void (*CRYPTO_lock)(int, int, const char *, int) = NULL; #endif #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 7187b69f4a15..f1694684a4a2 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -150,11 +150,6 @@ def cryptography_has_tls_st(): def cryptography_has_locking_callbacks(): return [ - "CRYPTO_LOCK", - "CRYPTO_UNLOCK", - "CRYPTO_READ", - "CRYPTO_LOCK_SSL", - "CRYPTO_lock", "Cryptography_setup_ssl_threads", ] From b44fc561537af0e1369f92870cedc7e6bc625883 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Feb 2019 11:01:07 +0800 Subject: [PATCH 579/988] update travis builders to newer versions of openssl (#4784) --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index fa45f134023b..cc749667a84a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,11 +48,11 @@ matrix: - python: 3.5 env: TOXENV=py35 OPENSSL=1.1.0j - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1a + env: TOXENV=py27 OPENSSL=1.1.1b - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1a + env: TOXENV=py37 OPENSSL=1.1.1b - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1a OPENSSL_CONFIG_FLAGS=no-engine + env: TOXENV=py37 OPENSSL=1.1.1b OPENSSL_CONFIG_FLAGS=no-engine - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 @@ -106,7 +106,7 @@ matrix: env: TOXENV=py36 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.6 - env: TOXENV=docs OPENSSL=1.1.1a + env: TOXENV=docs OPENSSL=1.1.1b addons: apt: packages: From 6a022794b0b9cc7940e860f76eb450e05d883b15 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Feb 2019 11:03:50 +0800 Subject: [PATCH 580/988] remove unused x509 bindings (#4776) --- src/_cffi_src/openssl/x509.py | 88 +---------------------------------- 1 file changed, 1 insertion(+), 87 deletions(-) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 748c6c8c72d0..079833efcc8e 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -29,14 +29,10 @@ ...; } X509_ALGOR; -typedef ... X509_ATTRIBUTE; -typedef ... X509_CINF; typedef ... X509_EXTENSION; typedef ... X509_EXTENSIONS; typedef ... X509_REQ; -typedef ... X509_REQ_INFO; typedef ... X509_REVOKED; -typedef ... X509_CRL_INFO; typedef ... X509_CRL; typedef ... X509; @@ -44,39 +40,6 @@ typedef ... PKCS8_PRIV_KEY_INFO; -static const int X509_FLAG_COMPAT; -static const int X509_FLAG_NO_HEADER; -static const int X509_FLAG_NO_VERSION; -static const int X509_FLAG_NO_SERIAL; -static const int X509_FLAG_NO_SIGNAME; -static const int X509_FLAG_NO_ISSUER; -static const int X509_FLAG_NO_VALIDITY; -static const int X509_FLAG_NO_SUBJECT; -static const int X509_FLAG_NO_PUBKEY; -static const int X509_FLAG_NO_EXTENSIONS; -static const int X509_FLAG_NO_SIGDUMP; -static const int X509_FLAG_NO_AUX; -static const int X509_FLAG_NO_ATTRIBUTES; - -static const int XN_FLAG_SEP_MASK; -static const int XN_FLAG_COMPAT; -static const int XN_FLAG_SEP_COMMA_PLUS; -static const int XN_FLAG_SEP_CPLUS_SPC; -static const int XN_FLAG_SEP_SPLUS_SPC; -static const int XN_FLAG_SEP_MULTILINE; -static const int XN_FLAG_DN_REV; -static const int XN_FLAG_FN_MASK; -static const int XN_FLAG_FN_SN; -static const int XN_FLAG_FN_LN; -static const int XN_FLAG_FN_OID; -static const int XN_FLAG_FN_NONE; -static const int XN_FLAG_SPC_EQ; -static const int XN_FLAG_DUMP_UNKNOWN_FIELDS; -static const int XN_FLAG_FN_ALIGN; -static const int XN_FLAG_RFC2253; -static const int XN_FLAG_ONELINE; -static const int XN_FLAG_MULTILINE; - typedef void (*sk_X509_EXTENSION_freefunc)(X509_EXTENSION *); """ @@ -108,14 +71,11 @@ int X509_set_issuer_name(X509 *, X509_NAME *); int X509_add_ext(X509 *, X509_EXTENSION *, int); -X509_EXTENSION *X509_delete_ext(X509 *, int); X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *); ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *); void X509_EXTENSION_free(X509_EXTENSION *); -int i2d_X509(X509 *, unsigned char **); - int X509_REQ_set_version(X509_REQ *, long); X509_REQ *X509_REQ_new(void); void X509_REQ_free(X509_REQ *); @@ -123,10 +83,7 @@ int X509_REQ_set_subject_name(X509_REQ *, X509_NAME *); int X509_REQ_sign(X509_REQ *, EVP_PKEY *, const EVP_MD *); int X509_REQ_verify(X509_REQ *, EVP_PKEY *); -int X509_REQ_digest(const X509_REQ *, const EVP_MD *, - unsigned char *, unsigned int *); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *); -int X509_REQ_print(BIO *, X509_REQ *); int X509_REQ_print_ex(BIO *, X509_REQ *, unsigned long, unsigned long); int X509_REQ_add_extensions(X509_REQ *, X509_EXTENSIONS *); X509_EXTENSIONS *X509_REQ_get_extensions(X509_REQ *); @@ -186,40 +143,19 @@ const char *X509_verify_cert_error_string(long); -const char *X509_get_default_cert_area(void); const char *X509_get_default_cert_dir(void); const char *X509_get_default_cert_file(void); const char *X509_get_default_cert_dir_env(void); const char *X509_get_default_cert_file_env(void); -const char *X509_get_default_private_dir(void); - -int i2d_RSA_PUBKEY(RSA *, unsigned char **); -RSA *d2i_RSA_PUBKEY(RSA **, const unsigned char **, long); -RSA *d2i_RSAPublicKey(RSA **, const unsigned char **, long); -RSA *d2i_RSAPrivateKey(RSA **, const unsigned char **, long); -int i2d_DSA_PUBKEY(DSA *, unsigned char **); -DSA *d2i_DSA_PUBKEY(DSA **, const unsigned char **, long); -DSA *d2i_DSAPublicKey(DSA **, const unsigned char **, long); -DSA *d2i_DSAPrivateKey(DSA **, const unsigned char **, long); - -RSA *d2i_RSAPrivateKey_bio(BIO *, RSA **); + int i2d_RSAPrivateKey_bio(BIO *, RSA *); RSA *d2i_RSAPublicKey_bio(BIO *, RSA **); int i2d_RSAPublicKey_bio(BIO *, RSA *); -RSA *d2i_RSA_PUBKEY_bio(BIO *, RSA **); -int i2d_RSA_PUBKEY_bio(BIO *, RSA *); -DSA *d2i_DSA_PUBKEY_bio(BIO *, DSA **); -int i2d_DSA_PUBKEY_bio(BIO *, DSA *); -DSA *d2i_DSAPrivateKey_bio(BIO *, DSA **); int i2d_DSAPrivateKey_bio(BIO *, DSA *); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *, - PKCS8_PRIV_KEY_INFO **); -void PKCS8_PRIV_KEY_INFO_free(PKCS8_PRIV_KEY_INFO *); /* These became const X509 in 1.1.0 */ int X509_get_ext_count(X509 *); X509_EXTENSION *X509_get_ext(X509 *, int); -int X509_get_ext_by_NID(X509 *, int, int); X509_NAME *X509_get_subject_name(X509 *); X509_NAME *X509_get_issuer_name(X509 *); @@ -242,18 +178,8 @@ int X509_CRL_get0_by_serial(X509_CRL *, X509_REVOKED **, ASN1_INTEGER *); -/* these CRYPTO_EX_DATA functions became macros in 1.1.0 */ -int X509_get_ex_new_index(long, void *, CRYPTO_EX_new *, CRYPTO_EX_dup *, - CRYPTO_EX_free *); -int X509_set_ex_data(X509 *, int, void *); -void *X509_get_ex_data(X509 *, int); - X509_REVOKED *Cryptography_X509_REVOKED_dup(X509_REVOKED *); -int i2d_X509_CINF(X509_CINF *, unsigned char **); -int i2d_X509_CRL_INFO(X509_CRL_INFO *, unsigned char **); -int i2d_X509_REQ_INFO(X509_REQ_INFO *, unsigned char **); - /* new in 1.0.2 */ int i2d_re_X509_tbs(X509 *, unsigned char **); int X509_get_signature_nid(const X509 *); @@ -295,11 +221,6 @@ int sk_X509_CRL_push(Cryptography_STACK_OF_X509_CRL *, X509_CRL *); X509_CRL *sk_X509_CRL_value(Cryptography_STACK_OF_X509_CRL *, int); -int i2d_RSAPublicKey(RSA *, unsigned char **); -int i2d_RSAPrivateKey(RSA *, unsigned char **); -int i2d_DSAPublicKey(DSA *, unsigned char **); -int i2d_DSAPrivateKey(DSA *, unsigned char **); - long X509_CRL_get_version(X509_CRL *); ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *); ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *); @@ -312,18 +233,11 @@ int X509_set_notBefore(X509 *, ASN1_TIME *); int X509_set_notAfter(X509 *, ASN1_TIME *); -int i2d_EC_PUBKEY(EC_KEY *, unsigned char **); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **, const unsigned char **, long); EC_KEY *d2i_EC_PUBKEY_bio(BIO *, EC_KEY **); int i2d_EC_PUBKEY_bio(BIO *, EC_KEY *); -EC_KEY *d2i_ECPrivateKey(EC_KEY **, const unsigned char **, long); EC_KEY *d2i_ECPrivateKey_bio(BIO *, EC_KEY **); -int i2d_ECPrivateKey(EC_KEY *, unsigned char **); int i2d_ECPrivateKey_bio(BIO *, EC_KEY *); -EC_KEY *o2i_ECPublicKey(EC_KEY **, const unsigned char **, long); -int i2o_ECPublicKey(EC_KEY *, unsigned char **); - // declared in safestack int sk_ASN1_OBJECT_num(Cryptography_STACK_OF_ASN1_OBJECT *); ASN1_OBJECT *sk_ASN1_OBJECT_value(Cryptography_STACK_OF_ASN1_OBJECT *, int); From cd05e2ac5b8336dac78a0dd73ec9a7baa06208c6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Feb 2019 12:33:07 +0800 Subject: [PATCH 581/988] ed25519 support (#4114) * ed25519 support * review feedback --- CHANGELOG.rst | 2 + docs/hazmat/primitives/asymmetric/ed25519.rst | 159 ++++++++++++ docs/hazmat/primitives/asymmetric/index.rst | 1 + docs/spelling_wordlist.txt | 1 + src/_cffi_src/openssl/cryptography.py | 3 + .../hazmat/backends/openssl/backend.py | 44 ++++ .../hazmat/backends/openssl/ed25519.py | 154 ++++++++++++ .../hazmat/primitives/asymmetric/ed25519.py | 80 ++++++ tests/hazmat/primitives/test_ed25519.py | 229 ++++++++++++++++++ tests/hazmat/primitives/test_serialization.py | 64 +++++ tests/wycheproof/test_eddsa.py | 45 ++++ 11 files changed, 782 insertions(+) create mode 100644 docs/hazmat/primitives/asymmetric/ed25519.rst create mode 100644 src/cryptography/hazmat/backends/openssl/ed25519.py create mode 100644 src/cryptography/hazmat/primitives/asymmetric/ed25519.py create mode 100644 tests/hazmat/primitives/test_ed25519.py create mode 100644 tests/wycheproof/test_eddsa.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7c3f3bfeb16d..8bca9b2b36eb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,8 @@ Changelog * **BACKWARDS INCOMPATIBLE**: Removed ``cryptography.x509.Certificate.serial``, which had been deprecated for nearly 3 years. Use :attr:`~cryptography.x509.Certificate.serial_number` instead. +* Added support for :doc:`/hazmat/primitives/asymmetric/ed25519` when using + OpenSSL 1.1.1. * Add support for easily mapping an object identifier to its elliptic curve class via :func:`~cryptography.hazmat.primitives.asymmetric.ec.get_curve_for_oid`. diff --git a/docs/hazmat/primitives/asymmetric/ed25519.rst b/docs/hazmat/primitives/asymmetric/ed25519.rst new file mode 100644 index 000000000000..8893fbbdb188 --- /dev/null +++ b/docs/hazmat/primitives/asymmetric/ed25519.rst @@ -0,0 +1,159 @@ +.. hazmat:: + +Ed25519 signing +=============== + +.. currentmodule:: cryptography.hazmat.primitives.asymmetric.ed25519 + + +Ed25519 is an elliptic curve signing algorithm using `EdDSA`_ and +`Curve25519`_. If you do not have legacy interoperability concerns then you +should strongly consider using this signature algorithm. + + +Signing & Verification +~~~~~~~~~~~~~~~~~~~~~~ + +.. doctest:: + + >>> from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey + >>> private_key = Ed25519PrivateKey.generate() + >>> signature = private_key.sign(b"my authenticated message") + >>> public_key = private_key.public_key() + >>> # Raises InvalidSignature if verification fails + >>> public_key.verify(signature, b"my authenticated message") + +Key interfaces +~~~~~~~~~~~~~~ + +.. class:: Ed25519PrivateKey + + .. versionadded:: 2.6 + + .. classmethod:: generate() + + Generate an Ed25519 private key. + + :returns: :class:`Ed25519PrivateKey` + + .. classmethod:: from_private_bytes(data) + + :param data: 32 byte private key. + :type data: :term:`bytes-like` + + :returns: :class:`Ed25519PrivateKey` + + .. doctest:: + + >>> from cryptography.hazmat.primitives import serialization + >>> from cryptography.hazmat.primitives.asymmetric import ed25519 + >>> private_key = ed25519.Ed25519PrivateKey.generate() + >>> private_bytes = private_key.private_bytes( + ... encoding=serialization.Encoding.Raw, + ... format=serialization.PrivateFormat.Raw, + ... encryption_algorithm=serialization.NoEncryption() + ... ) + >>> loaded_private_key = ed25519.Ed25519PrivateKey.from_private_bytes(private_bytes) + + + .. method:: public_key() + + :returns: :class:`Ed25519PublicKey` + + .. method:: sign(data) + + :param bytes data: The data to sign. + + :returns bytes: The 64 byte signature. + + .. method:: private_bytes(encoding, format, encryption_algorithm) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8` + or + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PrivateFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`. + + :param encryption_algorithm: An instance of an object conforming to the + :class:`~cryptography.hazmat.primitives.serialization.KeySerializationEncryption` + interface. + + :return bytes: Serialized key. + +.. class:: Ed25519PublicKey + + .. versionadded:: 2.6 + + .. classmethod:: from_public_bytes(data) + + :param bytes data: 32 byte public key. + + :returns: :class:`Ed25519PublicKey` + + .. doctest:: + + >>> from cryptography.hazmat.primitives import serialization + >>> from cryptography.hazmat.primitives.asymmetric import ed25519 + >>> private_key = ed25519.Ed25519PrivateKey.generate() + >>> public_key = private_key.public_key() + >>> public_bytes = public_key.public_bytes( + ... encoding=serialization.Encoding.Raw, + ... format=serialization.PublicFormat.Raw + ... ) + >>> loaded_public_key = ed25519.Ed25519PublicKey.from_public_bytes(public_bytes) + + .. method:: public_bytes(encoding, format) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo` + or + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PublicFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`. + + :returns bytes: The public key bytes. + + .. method:: verify(signature, data) + + :param bytes signature: The signature to verify. + + :param bytes data: The data to verify. + + :raises cryptography.exceptions.InvalidSignature: Raised when the + signature cannot be verified. + + + +.. _`EdDSA`: https://en.wikipedia.org/wiki/EdDSA +.. _`Curve25519`: https://en.wikipedia.org/wiki/Curve25519 diff --git a/docs/hazmat/primitives/asymmetric/index.rst b/docs/hazmat/primitives/asymmetric/index.rst index 1561c59f1be0..5e5bdb9a774c 100644 --- a/docs/hazmat/primitives/asymmetric/index.rst +++ b/docs/hazmat/primitives/asymmetric/index.rst @@ -23,6 +23,7 @@ private key is able to decrypt it. .. toctree:: :maxdepth: 1 + ed25519 x25519 x448 ec diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 7e08f1241342..c9b4777eb9ae 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -53,6 +53,7 @@ hostname idna indistinguishability initialisms +interoperability interoperable introspectability invariants diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 23ce87cf45bd..4124dcb87963 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -62,6 +62,8 @@ (OPENSSL_VERSION_NUMBER < 0x101000af || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 \ (OPENSSL_VERSION_NUMBER < 0x10101000 || CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B \ + (OPENSSL_VERSION_NUMBER < 0x10101020 || CRYPTOGRAPHY_IS_LIBRESSL) """ TYPES = """ @@ -72,6 +74,7 @@ static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111; +static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B; static const int CRYPTOGRAPHY_IS_LIBRESSL; diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index e2a5fd783041..61f597a3e9c3 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -37,6 +37,9 @@ from cryptography.hazmat.backends.openssl.ec import ( _EllipticCurvePrivateKey, _EllipticCurvePublicKey ) +from cryptography.hazmat.backends.openssl.ed25519 import ( + _ED25519_KEY_SIZE, _Ed25519PrivateKey, _Ed25519PublicKey +) from cryptography.hazmat.backends.openssl.encode_asn1 import ( _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, _CRL_EXTENSION_ENCODE_HANDLERS, _EXTENSION_ENCODE_HANDLERS, @@ -511,6 +514,9 @@ def _evp_pkey_to_private_key(self, evp_pkey): self.openssl_assert(dh_cdata != self._ffi.NULL) dh_cdata = self._ffi.gc(dh_cdata, self._lib.DH_free) return _DHPrivateKey(self, dh_cdata, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_ED25519", None): + # EVP_PKEY_ED25519 is not present in OpenSSL < 1.1.1 + return _Ed25519PrivateKey(self, evp_pkey) elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): # EVP_PKEY_X448 is not present in OpenSSL < 1.1.1 return _X448PrivateKey(self, evp_pkey) @@ -548,6 +554,9 @@ def _evp_pkey_to_public_key(self, evp_pkey): self.openssl_assert(dh_cdata != self._ffi.NULL) dh_cdata = self._ffi.gc(dh_cdata, self._lib.DH_free) return _DHPublicKey(self, dh_cdata, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_ED25519", None): + # EVP_PKEY_ED25519 is not present in OpenSSL < 1.1.1 + return _Ed25519PublicKey(self, evp_pkey) elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): # EVP_PKEY_X448 is not present in OpenSSL < 1.1.1 return _X448PublicKey(self, evp_pkey) @@ -2188,6 +2197,41 @@ def x448_generate_key(self): def x448_supported(self): return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 + def ed25519_supported(self): + return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B + + def ed25519_load_public_bytes(self, data): + utils._check_bytes("data", data) + + if len(data) != _ED25519_KEY_SIZE: + raise ValueError("An Ed25519 public key is 32 bytes long") + + evp_pkey = self._lib.EVP_PKEY_new_raw_public_key( + self._lib.NID_ED25519, self._ffi.NULL, data, len(data) + ) + self.openssl_assert(evp_pkey != self._ffi.NULL) + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + + return _Ed25519PublicKey(self, evp_pkey) + + def ed25519_load_private_bytes(self, data): + if len(data) != _ED25519_KEY_SIZE: + raise ValueError("An Ed25519 private key is 32 bytes long") + + utils._check_byteslike("data", data) + data_ptr = self._ffi.from_buffer(data) + evp_pkey = self._lib.EVP_PKEY_new_raw_private_key( + self._lib.NID_ED25519, self._ffi.NULL, data_ptr, len(data) + ) + self.openssl_assert(evp_pkey != self._ffi.NULL) + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + + return _Ed25519PrivateKey(self, evp_pkey) + + def ed25519_generate_key(self): + evp_pkey = self._evp_pkey_keygen_gc(self._lib.NID_ED25519) + return _Ed25519PrivateKey(self, evp_pkey) + def derive_scrypt(self, key_material, salt, length, n, r, p): buf = self._ffi.new("unsigned char[]", length) key_material_ptr = self._ffi.from_buffer(key_material) diff --git a/src/cryptography/hazmat/backends/openssl/ed25519.py b/src/cryptography/hazmat/backends/openssl/ed25519.py new file mode 100644 index 000000000000..15c1b1ec8a9c --- /dev/null +++ b/src/cryptography/hazmat/backends/openssl/ed25519.py @@ -0,0 +1,154 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography import exceptions, utils +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric.ed25519 import ( + Ed25519PrivateKey, Ed25519PublicKey +) + +_ED25519_KEY_SIZE = 32 +_ED25519_SIG_SIZE = 64 + + +@utils.register_interface(Ed25519PublicKey) +class _Ed25519PublicKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_bytes(self, encoding, format): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + encoding is not serialization.Encoding.Raw or + format is not serialization.PublicFormat.Raw + ): + raise ValueError( + "When using Raw both encoding and format must be Raw" + ) + + return self._raw_public_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PublicFormat.SubjectPublicKeyInfo + ): + raise ValueError( + "format must be SubjectPublicKeyInfo when encoding is PEM or " + "DER" + ) + + return self._backend._public_key_bytes( + encoding, format, self, self._evp_pkey, None + ) + + def _raw_public_bytes(self): + buf = self._backend._ffi.new("unsigned char []", _ED25519_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _ED25519_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_public_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED25519_KEY_SIZE) + return self._backend._ffi.buffer(buf, _ED25519_KEY_SIZE)[:] + + def verify(self, signature, data): + evp_md_ctx = self._backend._lib.Cryptography_EVP_MD_CTX_new() + self._backend.openssl_assert(evp_md_ctx != self._backend._ffi.NULL) + evp_md_ctx = self._backend._ffi.gc( + evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free + ) + res = self._backend._lib.EVP_DigestVerifyInit( + evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, + self._backend._ffi.NULL, self._evp_pkey + ) + self._backend.openssl_assert(res == 1) + res = self._backend._lib.EVP_DigestVerify( + evp_md_ctx, signature, len(signature), data, len(data) + ) + if res != 1: + self._backend._consume_errors() + raise exceptions.InvalidSignature + + +@utils.register_interface(Ed25519PrivateKey) +class _Ed25519PrivateKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_key(self): + buf = self._backend._ffi.new("unsigned char []", _ED25519_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _ED25519_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_public_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED25519_KEY_SIZE) + public_bytes = self._backend._ffi.buffer(buf)[:] + return self._backend.ed25519_load_public_bytes(public_bytes) + + def sign(self, data): + evp_md_ctx = self._backend._lib.Cryptography_EVP_MD_CTX_new() + self._backend.openssl_assert(evp_md_ctx != self._backend._ffi.NULL) + evp_md_ctx = self._backend._ffi.gc( + evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free + ) + res = self._backend._lib.EVP_DigestSignInit( + evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, + self._backend._ffi.NULL, self._evp_pkey + ) + self._backend.openssl_assert(res == 1) + buf = self._backend._ffi.new("unsigned char[]", _ED25519_SIG_SIZE) + buflen = self._backend._ffi.new("size_t *", len(buf)) + res = self._backend._lib.EVP_DigestSign( + evp_md_ctx, buf, buflen, data, len(data) + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED25519_SIG_SIZE) + return self._backend._ffi.buffer(buf, buflen[0])[:] + + def private_bytes(self, encoding, format, encryption_algorithm): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + format is not serialization.PrivateFormat.Raw or + encoding is not serialization.Encoding.Raw or not + isinstance(encryption_algorithm, serialization.NoEncryption) + ): + raise ValueError( + "When using Raw both encoding and format must be Raw " + "and encryption_algorithm must be NoEncryption" + ) + + return self._raw_private_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PrivateFormat.PKCS8 + ): + raise ValueError( + "format must be PKCS8 when encoding is PEM or DER" + ) + + return self._backend._private_key_bytes( + encoding, format, encryption_algorithm, self._evp_pkey, None + ) + + def _raw_private_bytes(self): + buf = self._backend._ffi.new("unsigned char []", _ED25519_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _ED25519_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_private_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED25519_KEY_SIZE) + return self._backend._ffi.buffer(buf, _ED25519_KEY_SIZE)[:] diff --git a/src/cryptography/hazmat/primitives/asymmetric/ed25519.py b/src/cryptography/hazmat/primitives/asymmetric/ed25519.py new file mode 100644 index 000000000000..96be9c582c98 --- /dev/null +++ b/src/cryptography/hazmat/primitives/asymmetric/ed25519.py @@ -0,0 +1,80 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons + + +@six.add_metaclass(abc.ABCMeta) +class Ed25519PublicKey(object): + @classmethod + def from_public_bytes(cls, data): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed25519_supported(): + raise UnsupportedAlgorithm( + "ed25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + + return backend.ed25519_load_public_bytes(data) + + @abc.abstractmethod + def public_bytes(self, encoding, format): + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def verify(self, signature, data): + """ + Verify the signature. + """ + + +@six.add_metaclass(abc.ABCMeta) +class Ed25519PrivateKey(object): + @classmethod + def generate(cls): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed25519_supported(): + raise UnsupportedAlgorithm( + "ed25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + + return backend.ed25519_generate_key() + + @classmethod + def from_private_bytes(cls, data): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed25519_supported(): + raise UnsupportedAlgorithm( + "ed25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + + return backend.ed25519_load_private_bytes(data) + + @abc.abstractmethod + def public_key(self): + """ + The Ed25519PublicKey derived from the private key. + """ + + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + The serialized bytes of the private key. + """ + + @abc.abstractmethod + def sign(self, data): + """ + Signs the data. + """ diff --git a/tests/hazmat/primitives/test_ed25519.py b/tests/hazmat/primitives/test_ed25519.py new file mode 100644 index 000000000000..8a2d3b07a652 --- /dev/null +++ b/tests/hazmat/primitives/test_ed25519.py @@ -0,0 +1,229 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii +import os + +import pytest + +from cryptography.exceptions import InvalidSignature, _Reasons +from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric.ed25519 import ( + Ed25519PrivateKey, Ed25519PublicKey +) + +from ...utils import ( + load_vectors_from_file, raises_unsupported_algorithm +) + + +def load_ed25519_vectors(vector_data): + """ + djb's ed25519 vectors are structured as a colon delimited array: + 0: secret key (32 bytes) + public key (32 bytes) + 1: public key (32 bytes) + 2: message (0+ bytes) + 3: signature + message (64+ bytes) + """ + data = [] + for line in vector_data: + secret_key, public_key, message, signature, _ = line.split(':') + secret_key = secret_key[0:64] + signature = signature[0:128] + data.append({ + "secret_key": secret_key, + "public_key": public_key, + "message": message, + "signature": signature + }) + return data + + +@pytest.mark.supported( + only_if=lambda backend: not backend.ed25519_supported(), + skip_message="Requires OpenSSL without Ed25519 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +def test_ed25519_unsupported(backend): + with raises_unsupported_algorithm( + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ): + Ed25519PublicKey.from_public_bytes(b"0" * 32) + + with raises_unsupported_algorithm( + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ): + Ed25519PrivateKey.from_private_bytes(b"0" * 32) + + with raises_unsupported_algorithm( + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ): + Ed25519PrivateKey.generate() + + +@pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +class TestEd25519Signing(object): + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "Ed25519", "sign.input"), + load_ed25519_vectors + ) + ) + def test_sign_verify_input(self, vector, backend): + sk = binascii.unhexlify(vector["secret_key"]) + pk = binascii.unhexlify(vector["public_key"]) + message = binascii.unhexlify(vector["message"]) + signature = binascii.unhexlify(vector["signature"]) + private_key = Ed25519PrivateKey.from_private_bytes(sk) + computed_sig = private_key.sign(message) + assert computed_sig == signature + public_key = private_key.public_key() + assert public_key.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == pk + public_key.verify(signature, message) + + def test_invalid_signature(self, backend): + key = Ed25519PrivateKey.generate() + signature = key.sign(b"test data") + with pytest.raises(InvalidSignature): + key.public_key().verify(signature, b"wrong data") + + with pytest.raises(InvalidSignature): + key.public_key().verify(b"0" * 64, b"test data") + + def test_generate(self, backend): + key = Ed25519PrivateKey.generate() + assert key + assert key.public_key() + + def test_load_public_bytes(self, backend): + public_key = Ed25519PrivateKey.generate().public_key() + public_bytes = public_key.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) + public_key2 = Ed25519PublicKey.from_public_bytes(public_bytes) + assert public_bytes == public_key2.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) + + def test_invalid_type_public_bytes(self, backend): + with pytest.raises(TypeError): + Ed25519PublicKey.from_public_bytes(object()) + + def test_invalid_type_private_bytes(self, backend): + with pytest.raises(TypeError): + Ed25519PrivateKey.from_private_bytes(object()) + + def test_invalid_length_from_public_bytes(self, backend): + with pytest.raises(ValueError): + Ed25519PublicKey.from_public_bytes(b"a" * 31) + with pytest.raises(ValueError): + Ed25519PublicKey.from_public_bytes(b"a" * 33) + + def test_invalid_length_from_private_bytes(self, backend): + with pytest.raises(ValueError): + Ed25519PrivateKey.from_private_bytes(b"a" * 31) + with pytest.raises(ValueError): + Ed25519PrivateKey.from_private_bytes(b"a" * 33) + + def test_invalid_private_bytes(self, backend): + key = Ed25519PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.PKCS8, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.PEM, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) + + def test_invalid_public_bytes(self, backend): + key = Ed25519PrivateKey.generate().public_key() + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.PKCS1 + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.Raw + ) + + @pytest.mark.parametrize( + ("encoding", "fmt", "encryption", "passwd", "load_func"), + [ + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_der_private_key + ), + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_der_private_key + ), + ] + ) + def test_round_trip_private_serialization(self, encoding, fmt, encryption, + passwd, load_func, backend): + key = Ed25519PrivateKey.generate() + serialized = key.private_bytes(encoding, fmt, encryption) + loaded_key = load_func(serialized, passwd, backend) + assert isinstance(loaded_key, Ed25519PrivateKey) + + def test_buffer_protocol(self, backend): + private_bytes = os.urandom(32) + key = Ed25519PrivateKey.from_private_bytes(bytearray(private_bytes)) + assert key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == private_bytes diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 5dd724894c5c..52074bf939d3 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -1284,6 +1284,70 @@ def test_encryption_with_zero_length_password(self): BestAvailableEncryption(b"") +@pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" +) +class TestEd25519Serialization(object): + def test_load_der_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "Ed25519", "ed25519-pkcs8-enc.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "Ed25519", "ed25519-pkcs8.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + key = load_der_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.DER, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + def test_load_pem_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "Ed25519", "ed25519-pkcs8-enc.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "Ed25519", "ed25519-pkcs8.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + key = load_pem_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.PEM, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + @pytest.mark.parametrize( + ("key_path", "encoding", "loader"), + [ + ( + ["Ed25519", "ed25519-pub.pem"], + Encoding.PEM, + load_pem_public_key + ), + ( + ["Ed25519", "ed25519-pub.der"], + Encoding.DER, + load_der_public_key + ), + ] + ) + def test_load_public_key(self, key_path, encoding, loader, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda pemfile: pemfile.read(), + mode="rb" + ) + public_key = loader(data, backend) + assert public_key.public_bytes( + encoding, PublicFormat.SubjectPublicKeyInfo + ) == data + + @pytest.mark.supported( only_if=lambda backend: backend.x448_supported(), skip_message="Requires OpenSSL with X448 support" diff --git a/tests/wycheproof/test_eddsa.py b/tests/wycheproof/test_eddsa.py new file mode 100644 index 000000000000..40cb49a323eb --- /dev/null +++ b/tests/wycheproof/test_eddsa.py @@ -0,0 +1,45 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives.asymmetric.ed25519 import ( + Ed25519PublicKey +) + + +@pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +@pytest.mark.wycheproof_tests( + "eddsa_test.json", +) +def test_ed25519_signature(backend, wycheproof): + # We want to fail if/when wycheproof adds more edwards curve tests + # so we can add them as well. + assert wycheproof.testgroup["key"]["curve"] == "edwards25519" + + key = Ed25519PublicKey.from_public_bytes( + binascii.unhexlify(wycheproof.testgroup["key"]["pk"]) + ) + + if wycheproof.valid or wycheproof.acceptable: + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + ) + else: + with pytest.raises(InvalidSignature): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + ) From 4c77bf37ae15064b74ee7db304b27c8779223678 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Feb 2019 13:50:21 +0800 Subject: [PATCH 582/988] homebrew switched from --build-bottle to --build-from-source (#4786) --- .jenkins/Jenkinsfile-Update-Homebrew-OpenSSL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL b/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL index 75beee82afeb..0617759ee6c2 100644 --- a/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL +++ b/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL @@ -9,7 +9,7 @@ def _build(label) { set -xe /usr/local/bin/brew update - /usr/local/bin/brew reinstall openssl@1.1 --build-bottle + /usr/local/bin/brew reinstall openssl@1.1 --build-from-source """ } } From 871e97a89f0276e57c01f7692111fca42e819b59 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Feb 2019 20:43:55 +0800 Subject: [PATCH 583/988] ed448 support (#4610) * ed448 support * move the changelog entry * flake8 --- CHANGELOG.rst | 2 + docs/hazmat/primitives/asymmetric/ed448.rst | 131 ++++++++++ docs/hazmat/primitives/asymmetric/index.rst | 1 + .../hazmat/backends/openssl/backend.py | 43 ++++ .../hazmat/backends/openssl/ed448.py | 154 +++++++++++ .../hazmat/primitives/asymmetric/ed448.py | 79 ++++++ tests/hazmat/primitives/test_ed448.py | 242 ++++++++++++++++++ tests/hazmat/primitives/test_serialization.py | 64 +++++ 8 files changed, 716 insertions(+) create mode 100644 docs/hazmat/primitives/asymmetric/ed448.rst create mode 100644 src/cryptography/hazmat/backends/openssl/ed448.py create mode 100644 src/cryptography/hazmat/primitives/asymmetric/ed448.py create mode 100644 tests/hazmat/primitives/test_ed448.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8bca9b2b36eb..3d3233ff76a4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,8 @@ Changelog * **BACKWARDS INCOMPATIBLE**: Removed ``cryptography.x509.Certificate.serial``, which had been deprecated for nearly 3 years. Use :attr:`~cryptography.x509.Certificate.serial_number` instead. +* Added support for :doc:`/hazmat/primitives/asymmetric/ed448` when using + OpenSSL 1.1.1. * Added support for :doc:`/hazmat/primitives/asymmetric/ed25519` when using OpenSSL 1.1.1. * Add support for easily mapping an object identifier to its elliptic curve diff --git a/docs/hazmat/primitives/asymmetric/ed448.rst b/docs/hazmat/primitives/asymmetric/ed448.rst new file mode 100644 index 000000000000..a4f37e5d8d43 --- /dev/null +++ b/docs/hazmat/primitives/asymmetric/ed448.rst @@ -0,0 +1,131 @@ +.. hazmat:: + +Ed448 signing +============= + +.. currentmodule:: cryptography.hazmat.primitives.asymmetric.ed448 + + +Ed448 is an elliptic curve signing algorithm using `EdDSA`_. + + +Signing & Verification +~~~~~~~~~~~~~~~~~~~~~~ + +.. doctest:: + + >>> from cryptography.hazmat.primitives.asymmetric.ed448 import Ed448PrivateKey + >>> private_key = Ed448PrivateKey.generate() + >>> signature = private_key.sign(b"my authenticated message") + >>> public_key = private_key.public_key() + >>> # Raises InvalidSignature if verification fails + >>> public_key.verify(signature, b"my authenticated message") + +Key interfaces +~~~~~~~~~~~~~~ + +.. class:: Ed448PrivateKey + + .. versionadded:: 2.6 + + .. classmethod:: generate() + + Generate an Ed448 private key. + + :returns: :class:`Ed448PrivateKey` + + .. classmethod:: from_private_bytes(data) + + :param data: 57 byte private key. + :type data: :term:`bytes-like` + + :returns: :class:`Ed448PrivateKey` + + .. method:: public_key() + + :returns: :class:`Ed448PublicKey` + + .. method:: sign(data) + + :param bytes data: The data to sign. + + :returns bytes: The 64 byte signature. + + .. method:: private_bytes(encoding, format, encryption_algorithm) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8` + or + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PrivateFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`. + + :param encryption_algorithm: An instance of an object conforming to the + :class:`~cryptography.hazmat.primitives.serialization.KeySerializationEncryption` + interface. + + :return bytes: Serialized key. + +.. class:: Ed448PublicKey + + .. versionadded:: 2.6 + + .. classmethod:: from_public_bytes(data) + + :param bytes data: 57 byte public key. + + :returns: :class:`Ed448PublicKey` + + .. method:: public_bytes(encoding, format) + + Allows serialization of the key to bytes. Encoding ( + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and + format ( + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo` + or + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + ) are chosen to define the exact serialization. + + :param encoding: A value from the + :class:`~cryptography.hazmat.primitives.serialization.Encoding` enum. + + :param format: A value from the + :class:`~cryptography.hazmat.primitives.serialization.PublicFormat` + enum. If the ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` + , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`. + + :returns bytes: The public key bytes. + + .. method:: verify(signature, data) + + :param bytes signature: The signature to verify. + + :param bytes data: The data to verify. + + :raises cryptography.exceptions.InvalidSignature: Raised when the + signature cannot be verified. + + + +.. _`EdDSA`: https://en.wikipedia.org/wiki/EdDSA diff --git a/docs/hazmat/primitives/asymmetric/index.rst b/docs/hazmat/primitives/asymmetric/index.rst index 5e5bdb9a774c..c27e1781e46e 100644 --- a/docs/hazmat/primitives/asymmetric/index.rst +++ b/docs/hazmat/primitives/asymmetric/index.rst @@ -25,6 +25,7 @@ private key is able to decrypt it. ed25519 x25519 + ed448 x448 ec rsa diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 61f597a3e9c3..eab60778744e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -40,6 +40,9 @@ from cryptography.hazmat.backends.openssl.ed25519 import ( _ED25519_KEY_SIZE, _Ed25519PrivateKey, _Ed25519PublicKey ) +from cryptography.hazmat.backends.openssl.ed448 import ( + _ED448_KEY_SIZE, _Ed448PrivateKey, _Ed448PublicKey +) from cryptography.hazmat.backends.openssl.encode_asn1 import ( _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, _CRL_EXTENSION_ENCODE_HANDLERS, _EXTENSION_ENCODE_HANDLERS, @@ -523,6 +526,9 @@ def _evp_pkey_to_private_key(self, evp_pkey): elif key_type == getattr(self._lib, "EVP_PKEY_X25519", None): # EVP_PKEY_X25519 is not present in OpenSSL < 1.1.0 return _X25519PrivateKey(self, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_ED448", None): + # EVP_PKEY_ED448 is not present in OpenSSL < 1.1.1 + return _Ed448PrivateKey(self, evp_pkey) else: raise UnsupportedAlgorithm("Unsupported key type.") @@ -563,6 +569,9 @@ def _evp_pkey_to_public_key(self, evp_pkey): elif key_type == getattr(self._lib, "EVP_PKEY_X25519", None): # EVP_PKEY_X25519 is not present in OpenSSL < 1.1.0 return _X25519PublicKey(self, evp_pkey) + elif key_type == getattr(self._lib, "EVP_PKEY_ED448", None): + # EVP_PKEY_X25519 is not present in OpenSSL < 1.1.1 + return _Ed448PublicKey(self, evp_pkey) else: raise UnsupportedAlgorithm("Unsupported key type.") @@ -2232,6 +2241,40 @@ def ed25519_generate_key(self): evp_pkey = self._evp_pkey_keygen_gc(self._lib.NID_ED25519) return _Ed25519PrivateKey(self, evp_pkey) + def ed448_supported(self): + return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B + + def ed448_load_public_bytes(self, data): + utils._check_bytes("data", data) + if len(data) != _ED448_KEY_SIZE: + raise ValueError("An Ed448 public key is 57 bytes long") + + evp_pkey = self._lib.EVP_PKEY_new_raw_public_key( + self._lib.NID_ED448, self._ffi.NULL, data, len(data) + ) + self.openssl_assert(evp_pkey != self._ffi.NULL) + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + + return _Ed448PublicKey(self, evp_pkey) + + def ed448_load_private_bytes(self, data): + utils._check_byteslike("data", data) + if len(data) != _ED448_KEY_SIZE: + raise ValueError("An Ed448 private key is 57 bytes long") + + data_ptr = self._ffi.from_buffer(data) + evp_pkey = self._lib.EVP_PKEY_new_raw_private_key( + self._lib.NID_ED448, self._ffi.NULL, data_ptr, len(data) + ) + self.openssl_assert(evp_pkey != self._ffi.NULL) + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + + return _Ed448PrivateKey(self, evp_pkey) + + def ed448_generate_key(self): + evp_pkey = self._evp_pkey_keygen_gc(self._lib.NID_ED448) + return _Ed448PrivateKey(self, evp_pkey) + def derive_scrypt(self, key_material, salt, length, n, r, p): buf = self._ffi.new("unsigned char[]", length) key_material_ptr = self._ffi.from_buffer(key_material) diff --git a/src/cryptography/hazmat/backends/openssl/ed448.py b/src/cryptography/hazmat/backends/openssl/ed448.py new file mode 100644 index 000000000000..cf2acf831bb0 --- /dev/null +++ b/src/cryptography/hazmat/backends/openssl/ed448.py @@ -0,0 +1,154 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography import exceptions, utils +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric.ed448 import ( + Ed448PrivateKey, Ed448PublicKey +) + +_ED448_KEY_SIZE = 57 +_ED448_SIG_SIZE = 114 + + +@utils.register_interface(Ed448PublicKey) +class _Ed448PublicKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_bytes(self, encoding, format): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + encoding is not serialization.Encoding.Raw or + format is not serialization.PublicFormat.Raw + ): + raise ValueError( + "When using Raw both encoding and format must be Raw" + ) + + return self._raw_public_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PublicFormat.SubjectPublicKeyInfo + ): + raise ValueError( + "format must be SubjectPublicKeyInfo when encoding is PEM or " + "DER" + ) + + return self._backend._public_key_bytes( + encoding, format, self, self._evp_pkey, None + ) + + def _raw_public_bytes(self): + buf = self._backend._ffi.new("unsigned char []", _ED448_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _ED448_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_public_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED448_KEY_SIZE) + return self._backend._ffi.buffer(buf, _ED448_KEY_SIZE)[:] + + def verify(self, signature, data): + evp_md_ctx = self._backend._lib.Cryptography_EVP_MD_CTX_new() + self._backend.openssl_assert(evp_md_ctx != self._backend._ffi.NULL) + evp_md_ctx = self._backend._ffi.gc( + evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free + ) + res = self._backend._lib.EVP_DigestVerifyInit( + evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, + self._backend._ffi.NULL, self._evp_pkey + ) + self._backend.openssl_assert(res == 1) + res = self._backend._lib.EVP_DigestVerify( + evp_md_ctx, signature, len(signature), data, len(data) + ) + if res != 1: + self._backend._consume_errors() + raise exceptions.InvalidSignature + + +@utils.register_interface(Ed448PrivateKey) +class _Ed448PrivateKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_key(self): + buf = self._backend._ffi.new("unsigned char []", _ED448_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _ED448_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_public_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED448_KEY_SIZE) + public_bytes = self._backend._ffi.buffer(buf)[:] + return self._backend.ed448_load_public_bytes(public_bytes) + + def sign(self, data): + evp_md_ctx = self._backend._lib.Cryptography_EVP_MD_CTX_new() + self._backend.openssl_assert(evp_md_ctx != self._backend._ffi.NULL) + evp_md_ctx = self._backend._ffi.gc( + evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free + ) + res = self._backend._lib.EVP_DigestSignInit( + evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, + self._backend._ffi.NULL, self._evp_pkey + ) + self._backend.openssl_assert(res == 1) + buf = self._backend._ffi.new("unsigned char[]", _ED448_SIG_SIZE) + buflen = self._backend._ffi.new("size_t *", len(buf)) + res = self._backend._lib.EVP_DigestSign( + evp_md_ctx, buf, buflen, data, len(data) + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED448_SIG_SIZE) + return self._backend._ffi.buffer(buf, buflen[0])[:] + + def private_bytes(self, encoding, format, encryption_algorithm): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + format is not serialization.PrivateFormat.Raw or + encoding is not serialization.Encoding.Raw or not + isinstance(encryption_algorithm, serialization.NoEncryption) + ): + raise ValueError( + "When using Raw both encoding and format must be Raw " + "and encryption_algorithm must be NoEncryption" + ) + + return self._raw_private_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PrivateFormat.PKCS8 + ): + raise ValueError( + "format must be PKCS8 when encoding is PEM or DER" + ) + + return self._backend._private_key_bytes( + encoding, format, encryption_algorithm, self._evp_pkey, None + ) + + def _raw_private_bytes(self): + buf = self._backend._ffi.new("unsigned char []", _ED448_KEY_SIZE) + buflen = self._backend._ffi.new("size_t *", _ED448_KEY_SIZE) + res = self._backend._lib.EVP_PKEY_get_raw_private_key( + self._evp_pkey, buf, buflen + ) + self._backend.openssl_assert(res == 1) + self._backend.openssl_assert(buflen[0] == _ED448_KEY_SIZE) + return self._backend._ffi.buffer(buf, _ED448_KEY_SIZE)[:] diff --git a/src/cryptography/hazmat/primitives/asymmetric/ed448.py b/src/cryptography/hazmat/primitives/asymmetric/ed448.py new file mode 100644 index 000000000000..939157ab5901 --- /dev/null +++ b/src/cryptography/hazmat/primitives/asymmetric/ed448.py @@ -0,0 +1,79 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons + + +@six.add_metaclass(abc.ABCMeta) +class Ed448PublicKey(object): + @classmethod + def from_public_bytes(cls, data): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed448_supported(): + raise UnsupportedAlgorithm( + "ed448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + + return backend.ed448_load_public_bytes(data) + + @abc.abstractmethod + def public_bytes(self, encoding, format): + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def verify(self, signature, data): + """ + Verify the signature. + """ + + +@six.add_metaclass(abc.ABCMeta) +class Ed448PrivateKey(object): + @classmethod + def generate(cls): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed448_supported(): + raise UnsupportedAlgorithm( + "ed448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + return backend.ed448_generate_key() + + @classmethod + def from_private_bytes(cls, data): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed448_supported(): + raise UnsupportedAlgorithm( + "ed448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + + return backend.ed448_load_private_bytes(data) + + @abc.abstractmethod + def public_key(self): + """ + The Ed448PublicKey derived from the private key. + """ + + @abc.abstractmethod + def sign(self, data): + """ + Signs the data. + """ + + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + The serialized bytes of the private key. + """ diff --git a/tests/hazmat/primitives/test_ed448.py b/tests/hazmat/primitives/test_ed448.py new file mode 100644 index 000000000000..28d92c70ca28 --- /dev/null +++ b/tests/hazmat/primitives/test_ed448.py @@ -0,0 +1,242 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii +import os + +import pytest + +from cryptography.exceptions import InvalidSignature, _Reasons +from cryptography.hazmat.backends.interfaces import DHBackend +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric.ed448 import ( + Ed448PrivateKey, Ed448PublicKey +) + +from ...utils import ( + load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm +) + + +@pytest.mark.supported( + only_if=lambda backend: not backend.ed448_supported(), + skip_message="Requires OpenSSL without Ed448 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +def test_ed448_unsupported(backend): + with raises_unsupported_algorithm( + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ): + Ed448PublicKey.from_public_bytes(b"0" * 57) + + with raises_unsupported_algorithm( + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ): + Ed448PrivateKey.from_private_bytes(b"0" * 57) + + with raises_unsupported_algorithm( + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ): + Ed448PrivateKey.generate() + + +@pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" +) +@pytest.mark.requires_backend_interface(interface=DHBackend) +class TestEd448Signing(object): + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "Ed448", "rfc8032.txt"), + load_nist_vectors + ) + ) + def test_sign_input(self, vector, backend): + if vector.get("context") is not None: + pytest.skip("ed448 contexts are not currently supported") + + sk = binascii.unhexlify(vector["secret"]) + pk = binascii.unhexlify(vector["public"]) + message = binascii.unhexlify(vector["message"]) + signature = binascii.unhexlify(vector["signature"]) + private_key = Ed448PrivateKey.from_private_bytes(sk) + computed_sig = private_key.sign(message) + assert computed_sig == signature + public_key = private_key.public_key() + assert public_key.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == pk + public_key.verify(signature, message) + + def test_invalid_signature(self, backend): + key = Ed448PrivateKey.generate() + signature = key.sign(b"test data") + with pytest.raises(InvalidSignature): + key.public_key().verify(signature, b"wrong data") + + with pytest.raises(InvalidSignature): + key.public_key().verify(b"0" * 64, b"test data") + + def test_generate(self, backend): + key = Ed448PrivateKey.generate() + assert key + assert key.public_key() + + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("asymmetric", "Ed448", "rfc8032.txt"), + load_nist_vectors + ) + ) + def test_pub_priv_bytes_raw(self, vector, backend): + sk = binascii.unhexlify(vector["secret"]) + pk = binascii.unhexlify(vector["public"]) + private_key = Ed448PrivateKey.from_private_bytes(sk) + assert private_key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == sk + assert private_key.public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == pk + public_key = Ed448PublicKey.from_public_bytes(pk) + assert public_key.public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) == pk + + @pytest.mark.parametrize( + ("encoding", "fmt", "encryption", "passwd", "load_func"), + [ + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.BestAvailableEncryption(b"password"), + b"password", + serialization.load_der_private_key + ), + ( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_pem_private_key + ), + ( + serialization.Encoding.DER, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + None, + serialization.load_der_private_key + ), + ] + ) + def test_round_trip_private_serialization(self, encoding, fmt, encryption, + passwd, load_func, backend): + key = Ed448PrivateKey.generate() + serialized = key.private_bytes(encoding, fmt, encryption) + loaded_key = load_func(serialized, passwd, backend) + assert isinstance(loaded_key, Ed448PrivateKey) + + def test_invalid_type_public_bytes(self, backend): + with pytest.raises(TypeError): + Ed448PublicKey.from_public_bytes(object()) + + def test_invalid_type_private_bytes(self, backend): + with pytest.raises(TypeError): + Ed448PrivateKey.from_private_bytes(object()) + + def test_invalid_length_from_public_bytes(self, backend): + with pytest.raises(ValueError): + Ed448PublicKey.from_public_bytes(b"a" * 56) + with pytest.raises(ValueError): + Ed448PublicKey.from_public_bytes(b"a" * 58) + + def test_invalid_length_from_private_bytes(self, backend): + with pytest.raises(ValueError): + Ed448PrivateKey.from_private_bytes(b"a" * 56) + with pytest.raises(ValueError): + Ed448PrivateKey.from_private_bytes(b"a" * 58) + + def test_invalid_private_bytes(self, backend): + key = Ed448PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.PKCS8, + None + ) + + with pytest.raises(ValueError): + key.private_bytes( + serialization.Encoding.PEM, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) + + def test_invalid_public_bytes(self, backend): + key = Ed448PrivateKey.generate().public_key() + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.Raw, + serialization.PublicFormat.SubjectPublicKeyInfo + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.PKCS1 + ) + + with pytest.raises(ValueError): + key.public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.Raw + ) + + def test_buffer_protocol(self, backend): + private_bytes = os.urandom(57) + key = Ed448PrivateKey.from_private_bytes(bytearray(private_bytes)) + assert key.private_bytes( + serialization.Encoding.Raw, + serialization.PrivateFormat.Raw, + serialization.NoEncryption() + ) == private_bytes + + def test_malleability(self, backend): + # This is a signature where r > the group order. It should be + # rejected to prevent signature malleability issues. This test can + # be removed when wycheproof grows ed448 vectors + public_bytes = binascii.unhexlify( + "fedb02a658d74990244d9d10cf338e977565cbbda6b24c716829ed6ee1e4f28cf" + "2620c052db8d878f6243bffc22242816c1aaa67d2f3603600" + ) + signature = binascii.unhexlify( + "0cc16ba24d69277f927c1554b0f08a2a711bbdd20b058ccc660d00ca13542a3ce" + "f9e5c44c54ab23a2eb14f947e167b990b080863e28b399380f30db6e54d5d1406" + "d23378ffde11b1fb81b2b438a3b8e8aa7f7f4e1befcc905023fab5a5465053844" + "f04cf0c1b51d84760f869588687f57500" + ) + key = Ed448PublicKey.from_public_bytes(public_bytes) + with pytest.raises(InvalidSignature): + key.verify(signature, b"8") diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 52074bf939d3..ce3a49433266 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -1474,3 +1474,67 @@ def test_load_public_key(self, key_path, encoding, loader, backend): assert public_key.public_bytes( encoding, PublicFormat.SubjectPublicKeyInfo ) == data + + +@pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" +) +class TestEd448Serialization(object): + def test_load_der_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "Ed448", "ed448-pkcs8-enc.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "Ed448", "ed448-pkcs8.der"), + lambda derfile: derfile.read(), + mode="rb" + ) + key = load_der_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.DER, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + def test_load_pem_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "Ed448", "ed448-pkcs8-enc.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + unencrypted = load_vectors_from_file( + os.path.join("asymmetric", "Ed448", "ed448-pkcs8.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + key = load_pem_private_key(data, b"password", backend) + assert key.private_bytes( + Encoding.PEM, PrivateFormat.PKCS8, NoEncryption() + ) == unencrypted + + @pytest.mark.parametrize( + ("key_path", "encoding", "loader"), + [ + ( + ["Ed448", "ed448-pub.pem"], + Encoding.PEM, + load_pem_public_key + ), + ( + ["Ed448", "ed448-pub.der"], + Encoding.DER, + load_der_public_key + ), + ] + ) + def test_load_public_key(self, key_path, encoding, loader, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda pemfile: pemfile.read(), + mode="rb" + ) + public_key = loader(data, backend) + assert public_key.public_bytes( + encoding, PublicFormat.SubjectPublicKeyInfo + ) == data From 1f4e64615836dc59968ca104b19461caee477f3f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 27 Feb 2019 20:44:06 +0800 Subject: [PATCH 584/988] support ed25519 openssh public keys (#4785) * support ed25519 openssh public keys * don't need this check --- CHANGELOG.rst | 2 + .../primitives/asymmetric/serialization.rst | 7 +--- .../hazmat/backends/openssl/backend.py | 8 ++-- .../hazmat/backends/openssl/ed25519.py | 5 +-- .../hazmat/primitives/asymmetric/ed25519.py | 4 ++ .../hazmat/primitives/serialization/ssh.py | 13 ++++++- tests/hazmat/primitives/test_serialization.py | 38 ++++++++++++++++++- 7 files changed, 62 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3d3233ff76a4..0670d75bb857 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -24,6 +24,8 @@ Changelog OpenSSL 1.1.1. * Added support for :doc:`/hazmat/primitives/asymmetric/ed25519` when using OpenSSL 1.1.1. +* :func:`~cryptography.hazmat.primitives.serialization.load_ssh_public_key` can + now load ``ed25519`` public keys. * Add support for easily mapping an object identifier to its elliptic curve class via :func:`~cryptography.hazmat.primitives.asymmetric.ec.get_curve_for_oid`. diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index dbb2bb63eb22..84867efba9c2 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -376,10 +376,6 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than Deserialize a public key from OpenSSH (:rfc:`4253`) encoded data to an instance of the public key type for the specified backend. - .. note:: - - Currently Ed25519 keys are not supported. - :param bytes data: The OpenSSH encoded key data. :param backend: A backend which implements @@ -391,8 +387,9 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than :returns: One of :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, - or :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` + , or + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey`, depending on the contents of ``data``. :raises ValueError: If the OpenSSH data could not be properly decoded or diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index eab60778744e..b040b80965b2 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -38,7 +38,7 @@ _EllipticCurvePrivateKey, _EllipticCurvePublicKey ) from cryptography.hazmat.backends.openssl.ed25519 import ( - _ED25519_KEY_SIZE, _Ed25519PrivateKey, _Ed25519PublicKey + _Ed25519PrivateKey, _Ed25519PublicKey ) from cryptography.hazmat.backends.openssl.ed448 import ( _ED448_KEY_SIZE, _Ed448PrivateKey, _Ed448PublicKey @@ -70,7 +70,7 @@ ) from cryptography.hazmat.bindings.openssl import binding from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa +from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa from cryptography.hazmat.primitives.asymmetric.padding import ( MGF1, OAEP, PKCS1v15, PSS ) @@ -2212,7 +2212,7 @@ def ed25519_supported(self): def ed25519_load_public_bytes(self, data): utils._check_bytes("data", data) - if len(data) != _ED25519_KEY_SIZE: + if len(data) != ed25519._ED25519_KEY_SIZE: raise ValueError("An Ed25519 public key is 32 bytes long") evp_pkey = self._lib.EVP_PKEY_new_raw_public_key( @@ -2224,7 +2224,7 @@ def ed25519_load_public_bytes(self, data): return _Ed25519PublicKey(self, evp_pkey) def ed25519_load_private_bytes(self, data): - if len(data) != _ED25519_KEY_SIZE: + if len(data) != ed25519._ED25519_KEY_SIZE: raise ValueError("An Ed25519 private key is 32 bytes long") utils._check_byteslike("data", data) diff --git a/src/cryptography/hazmat/backends/openssl/ed25519.py b/src/cryptography/hazmat/backends/openssl/ed25519.py index 15c1b1ec8a9c..f02f56222501 100644 --- a/src/cryptography/hazmat/backends/openssl/ed25519.py +++ b/src/cryptography/hazmat/backends/openssl/ed25519.py @@ -7,12 +7,9 @@ from cryptography import exceptions, utils from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.ed25519 import ( - Ed25519PrivateKey, Ed25519PublicKey + Ed25519PrivateKey, Ed25519PublicKey, _ED25519_KEY_SIZE, _ED25519_SIG_SIZE ) -_ED25519_KEY_SIZE = 32 -_ED25519_SIG_SIZE = 64 - @utils.register_interface(Ed25519PublicKey) class _Ed25519PublicKey(object): diff --git a/src/cryptography/hazmat/primitives/asymmetric/ed25519.py b/src/cryptography/hazmat/primitives/asymmetric/ed25519.py index 96be9c582c98..d89445fa29d9 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ed25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ed25519.py @@ -11,6 +11,10 @@ from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +_ED25519_KEY_SIZE = 32 +_ED25519_SIG_SIZE = 64 + + @six.add_metaclass(abc.ABCMeta) class Ed25519PublicKey(object): @classmethod diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index cb838927d33d..a1d6c8c9fcc2 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -11,7 +11,7 @@ from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm -from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa +from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa def load_ssh_public_key(data, backend): @@ -31,6 +31,8 @@ def load_ssh_public_key(data, backend): b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', ]: loader = _load_ssh_ecdsa_public_key + elif key_type == b'ssh-ed25519': + loader = _load_ssh_ed25519_public_key else: raise UnsupportedAlgorithm('Key type is not supported.') @@ -102,6 +104,15 @@ def _load_ssh_ecdsa_public_key(expected_key_type, decoded_data, backend): return ec.EllipticCurvePublicKey.from_encoded_point(curve, data) +def _load_ssh_ed25519_public_key(expected_key_type, decoded_data, backend): + data, rest = _ssh_read_next_string(decoded_data) + + if rest: + raise ValueError('Key body contains extra bytes.') + + return ed25519.Ed25519PublicKey.from_public_bytes(data) + + def _ssh_read_next_string(data): """ Retrieves the next RFC 4251 string value from the data. diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index ce3a49433266..c5ce258cb68a 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -16,7 +16,7 @@ DERSerializationBackend, DSABackend, EllipticCurveBackend, PEMSerializationBackend, RSABackend ) -from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa +from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa from cryptography.hazmat.primitives.serialization import ( BestAvailableEncryption, Encoding, NoEncryption, PrivateFormat, PublicFormat, @@ -1274,6 +1274,42 @@ def test_load_ssh_public_key_ecdsa_nist_p256_bad_curve_name(self, backend): load_ssh_public_key(ssh_key, backend) +@pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" +) +class TestEd25519SSHSerialization(object): + def test_load_ssh_public_key(self, backend): + ssh_key = ( + b"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG2fgpmpYO61qeAxGd0wgRaN/E4" + b"GR+xWvBmvxjxrB1vG user@chiron.local" + ) + key = load_ssh_public_key(ssh_key, backend) + assert isinstance(key, ed25519.Ed25519PublicKey) + assert key.public_bytes( + Encoding.Raw, PublicFormat.Raw + ) == ( + b"m\x9f\x82\x99\xa9`\xee\xb5\xa9\xe01\x19\xdd0\x81\x16\x8d\xfc" + b"N\x06G\xecV\xbc\x19\xaf\xc6 Date: Wed, 27 Feb 2019 21:32:31 +0800 Subject: [PATCH 585/988] bump version and update changelog for 2.6 release (#4787) * bump version and update changelog for 2.6 release * 1.1.1b wheels for 2.6 --- CHANGELOG.rst | 12 ++++++------ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0670d75bb857..393e84a4854a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-6: -2.6 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.6 - 2019-02-27 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Removed ``cryptography.hazmat.primitives.asymmetric.utils.encode_rfc6979_signature`` @@ -20,10 +18,12 @@ Changelog * **BACKWARDS INCOMPATIBLE**: Removed ``cryptography.x509.Certificate.serial``, which had been deprecated for nearly 3 years. Use :attr:`~cryptography.x509.Certificate.serial_number` instead. +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.1b. * Added support for :doc:`/hazmat/primitives/asymmetric/ed448` when using - OpenSSL 1.1.1. + OpenSSL 1.1.1b or newer. * Added support for :doc:`/hazmat/primitives/asymmetric/ed25519` when using - OpenSSL 1.1.1. + OpenSSL 1.1.1b or newer. * :func:`~cryptography.hazmat.primitives.serialization.load_ssh_public_key` can now load ``ed25519`` public keys. * Add support for easily mapping an object identifier to its elliptic curve diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 759c3037071a..bde9b8bd0c9f 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.6.dev1" +__version__ = "2.6" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 330fa0d29c63..477c7f10a2a4 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.6.dev1" +__version__ = "2.6" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 659cffe7db4b81e3b81f6228ab50e6d589e173e1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 27 Feb 2019 17:41:14 -0500 Subject: [PATCH 586/988] Don't use pep517 when building our wheel (#4790) Refs #4789, https://github.com/pypa/pip/issues/6304 --- .jenkins/Jenkinsfile-cryptography-wheel-builder | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 5f98276ca467..72158f3c0450 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -85,7 +85,7 @@ def build(version, label, imageName) { virtualenv -p %PYTHON% .release call .release\\Scripts\\activate pip install wheel virtualenv - pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography + pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" """ @@ -118,7 +118,7 @@ def build(version, label, imageName) { CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ - pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography --no-deps \$PY_LIMITED_API + pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography --no-deps \$PY_LIMITED_API pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" otool -L `find .venv -name '_openssl*.so'` @@ -148,7 +148,7 @@ def build(version, label, imageName) { fi LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse \$PY_LIMITED_API + $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse \$PY_LIMITED_API $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ unzip wheelhouse/*.whl -d execstack.check chmod -R 777 execstack.check From e4570532541be7284f7d6660a429eb12edf8b027 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 27 Feb 2019 18:27:06 -0500 Subject: [PATCH 587/988] 2.6.1 release with fixed wheels (#4792) --- CHANGELOG.rst | 8 ++++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 393e84a4854a..511f1b2262ca 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,14 @@ Changelog ========= +.. _v2-6-1: + +2.6.1 - 2019-02-27 +~~~~~~~~~~~~~~~~~~ + +* Resolved an error in our build infrastructure that broke our Python3 wheels + for macOS and Linux. + .. _v2-6: 2.6 - 2019-02-27 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index bde9b8bd0c9f..62006c231823 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.6" +__version__ = "2.6.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 477c7f10a2a4..94487ef8b498 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.6" +__version__ = "2.6.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 2130f898633861c621955eca8473a4d74076cae2 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 27 Feb 2019 20:21:09 -0500 Subject: [PATCH 588/988] Reopen master for 2.7 (#4788) --- CHANGELOG.rst | 5 +++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 511f1b2262ca..668c46eb623e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ Changelog ========= +2.7 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-6-1: 2.6.1 - 2019-02-27 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 62006c231823..97132bdf531e 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.6.1" +__version__ = "2.7.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 94487ef8b498..08837c281d22 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.6.1" +__version__ = "2.7.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 0d30f5d5ba23c51e63681309b2acd09b9b998bb3 Mon Sep 17 00:00:00 2001 From: Paul Ganssle Date: Wed, 27 Feb 2019 20:22:18 -0500 Subject: [PATCH 589/988] Add PEP 517 to pyproject.toml (#4783) This puts a new minimum on the PEP 518 requirement for `setuptools` because older versions of setuptools' PEP 517 backend will fail to include `setup.py` in an sdist. --- pyproject.toml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7d64f993a3ec..21475bbb9664 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,10 @@ [build-system] -# Must be kept in sync with `setup_requirements` in `setup.py` requires = [ - "setuptools>=18.5", + # The minimum setuptools version is specific to the PEP 517 backend, + # and may be stricter than the version required in `setup.py` + "setuptools>=40.6.0", "wheel", + # Must be kept in sync with the `setup_requirements` in `setup.py` "cffi>=1.8,!=1.11.3; python_implementation != 'PyPy'", ] +build-backend = "setuptools.build_meta" From bc6f74f046ac3a2b41edbfba1529b6b32d893761 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 8 Mar 2019 01:06:30 +0800 Subject: [PATCH 590/988] add poly1305 NID/EVP, and EVP_DigestSign{Update,Final} for incremental (#4799) --- src/_cffi_src/openssl/evp.py | 9 +++++++++ src/_cffi_src/openssl/nid.py | 8 ++++++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 8 ++++++++ 3 files changed, 25 insertions(+) diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index e4d3f0578ba4..a0767021d18c 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -25,6 +25,7 @@ static const int EVP_PKEY_ED25519; static const int EVP_PKEY_X448; static const int EVP_PKEY_ED448; +static const int EVP_PKEY_POLY1305; static const int EVP_MAX_MD_SIZE; static const int EVP_CTRL_AEAD_SET_IVLEN; static const int EVP_CTRL_AEAD_GET_TAG; @@ -83,6 +84,8 @@ int EVP_DigestSignInit(EVP_MD_CTX *, EVP_PKEY_CTX **, const EVP_MD *, ENGINE *, EVP_PKEY *); +int EVP_DigestSignUpdate(EVP_MD_CTX *, const void *, size_t); +int EVP_DigestSignFinal(EVP_MD_CTX *, unsigned char *, size_t *); int EVP_DigestVerifyInit(EVP_MD_CTX *, EVP_PKEY_CTX **, const EVP_MD *, ENGINE *, EVP_PKEY *); @@ -266,4 +269,10 @@ #ifndef EVP_PKEY_ED448 #define EVP_PKEY_ED448 NID_ED448 #endif + +/* This is tied to poly1305 support so we reuse the Cryptography_HAS_POLY1305 + conditional to remove it. */ +#ifndef EVP_PKEY_POLY1305 +#define EVP_PKEY_POLY1305 NID_poly1305 +#endif """ diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index 8408d6b31995..cdd4c0dbfa68 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -13,6 +13,7 @@ static const int Cryptography_HAS_X448; static const int Cryptography_HAS_ED448; static const int Cryptography_HAS_ED25519; +static const int Cryptography_HAS_POLY1305; static const int NID_undef; static const int NID_pbe_WithSHA1And3_Key_TripleDES_CBC; @@ -20,6 +21,7 @@ static const int NID_X448; static const int NID_ED25519; static const int NID_ED448; +static const int NID_poly1305; static const int NID_subject_alt_name; static const int NID_crl_reason; @@ -53,4 +55,10 @@ #else static const long Cryptography_HAS_ED448 = 1; #endif +#ifndef NID_poly1305 +static const long Cryptography_HAS_POLY1305 = 0; +static const int NID_poly1305 = 0; +#else +static const long Cryptography_HAS_POLY1305 = 1; +#endif """ diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index f1694684a4a2..a1f78193cec1 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -240,6 +240,13 @@ def cryptography_has_ed25519(): ] +def cryptography_has_poly1305(): + return [ + "NID_poly1305", + "EVP_PKEY_POLY1305", + ] + + def cryptography_has_oneshot_evp_digest_sign_verify(): return [ "EVP_DigestSign", @@ -402,6 +409,7 @@ def cryptography_has_engine(): "Cryptography_HAS_X448": cryptography_has_x448, "Cryptography_HAS_ED448": cryptography_has_ed448, "Cryptography_HAS_ED25519": cryptography_has_ed25519, + "Cryptography_HAS_POLY1305": cryptography_has_poly1305, "Cryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFY": ( cryptography_has_oneshot_evp_digest_sign_verify ), From 88d836e10d090dfedc4b88a0fe302c77382a8211 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 8 Mar 2019 09:23:08 +0800 Subject: [PATCH 591/988] add poly1305 test vectors from rfc 7539 (#4800) --- docs/development/test-vectors.rst | 5 ++ .../cryptography_vectors/poly1305/rfc7539.txt | 56 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 vectors/cryptography_vectors/poly1305/rfc7539.txt diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 0ad94b2497e5..1f4a8dffd690 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -607,6 +607,11 @@ CMAC * AES-128, AES-192, AES-256, 3DES from `NIST SP-800-38B`_ +Poly1305 +~~~~~~~~ + +* Test vectors from :rfc:`7539`. + Creating test vectors --------------------- diff --git a/vectors/cryptography_vectors/poly1305/rfc7539.txt b/vectors/cryptography_vectors/poly1305/rfc7539.txt new file mode 100644 index 000000000000..9ad13a5693d2 --- /dev/null +++ b/vectors/cryptography_vectors/poly1305/rfc7539.txt @@ -0,0 +1,56 @@ +# These vectors converted into NIST form from RFC 7539 + +COUNT = 0 +KEY = 0000000000000000000000000000000000000000000000000000000000000000 +MSG = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +TAG = 00000000000000000000000000000000 + +COUNT = 1 +KEY = 0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e +MSG = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f +TAG = 36e5f6b5c5e06070f0efca96227a863e + +COUNT = 2 +KEY = 36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000 +MSG = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f +TAG = f3477e7cd95417af89a6b8794c310cf0 + +COUNT = 3 +KEY = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0 +MSG = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e +TAG = 4541669a7eaaee61e708dc7cbcc5eb62 + +COUNT = 4 +KEY = 0200000000000000000000000000000000000000000000000000000000000000 +MSG = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +TAG = 03000000000000000000000000000000 + +COUNT = 5 +KEY = 02000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +MSG = 02000000000000000000000000000000 +TAG = 03000000000000000000000000000000 + +COUNT = 6 +KEY = 0100000000000000000000000000000000000000000000000000000000000000 +MSG = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11000000000000000000000000000000 +TAG = 05000000000000000000000000000000 + +COUNT = 7 +KEY = 0100000000000000000000000000000000000000000000000000000000000000 +MSG = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE01010101010101010101010101010101 +TAG = 00000000000000000000000000000000 + +COUNT = 8 +KEY = 0200000000000000000000000000000000000000000000000000000000000000 +MSG = FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +TAG = FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + +COUNT = 9 +KEY = 0100000000000000040000000000000000000000000000000000000000000000 +MSG = E33594D7505E43B900000000000000003394D7505E4379CD01000000000000000000000000000000000000000000000001000000000000000000000000000000 +TAG = 14000000000000005500000000000000 + +COUNT = 10 +KEY = 0100000000000000040000000000000000000000000000000000000000000000 +MSG = E33594D7505E43B900000000000000003394D7505E4379CD010000000000000000000000000000000000000000000000 +TAG = 13000000000000000000000000000000 From 6d04e958abef078042c9a82ddbaa2d3c384db4fa Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 8 Mar 2019 09:53:09 +0800 Subject: [PATCH 592/988] remove maccontext (#4803) --- CHANGELOG.rst | 11 ++++- docs/hazmat/backends/interfaces.rst | 5 +-- docs/hazmat/primitives/mac/index.rst | 40 ++----------------- .../hazmat/backends/interfaces.py | 4 +- .../hazmat/backends/openssl/cmac.py | 3 +- .../hazmat/backends/openssl/hmac.py | 3 +- src/cryptography/hazmat/primitives/cmac.py | 3 +- src/cryptography/hazmat/primitives/hmac.py | 3 +- src/cryptography/hazmat/primitives/mac.py | 37 ----------------- 9 files changed, 21 insertions(+), 88 deletions(-) delete mode 100644 src/cryptography/hazmat/primitives/mac.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 668c46eb623e..019d257741b7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,11 +1,18 @@ Changelog ========= +.. _v2-7: + 2.7 - `master`_ ~~~~~~~~~~~~~~~ .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** Removed the + ``cryptography.hazmat.primitives.mac.MACContext`` interface. The ``CMAC`` and + ``HMAC`` APIs have not changed, but they are no longer registered as + ``MACContext`` instances. + .. _v2-6-1: 2.6.1 - 2019-02-27 @@ -1143,8 +1150,8 @@ Changelog :class:`~cryptography.fernet.MultiFernet`. * More bit-lengths are now supported for ``p`` and ``q`` when loading DSA keys from numbers. -* Added :class:`~cryptography.hazmat.primitives.mac.MACContext` as a - common interface for CMAC and HMAC and deprecated ``CMACContext``. +* Added ``MACContext`` as a common interface for CMAC and HMAC and + deprecated ``CMACContext``. * Added support for encoding and decoding :rfc:`6979` signatures in :doc:`/hazmat/primitives/asymmetric/utils`. * Added diff --git a/docs/hazmat/backends/interfaces.rst b/docs/hazmat/backends/interfaces.rst index 2c2d70ec8140..36dd3a7a5a1e 100644 --- a/docs/hazmat/backends/interfaces.rst +++ b/docs/hazmat/backends/interfaces.rst @@ -159,14 +159,13 @@ A specific ``backend`` may provide one or more of these interfaces. .. method:: create_cmac_ctx(algorithm) Create a - :class:`~cryptography.hazmat.primitives.mac.MACContext` that + context that uses the specified ``algorithm`` to calculate a message authentication code. :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`. - :returns: - :class:`~cryptography.hazmat.primitives.mac.MACContext` + :returns: CMAC object. .. class:: PBKDF2HMACBackend diff --git a/docs/hazmat/primitives/mac/index.rst b/docs/hazmat/primitives/mac/index.rst index 86c407c43456..f85eaa0e16c2 100644 --- a/docs/hazmat/primitives/mac/index.rst +++ b/docs/hazmat/primitives/mac/index.rst @@ -3,48 +3,16 @@ Message authentication codes ============================ -While cryptography supports both the CMAC and HMAC algorithms, we strongly -recommend that HMAC should be used unless you have a good reason otherwise. +While cryptography supports multiple MAC algorithms, we strongly +recommend that HMAC should be used unless you have a very specific need. For more information on why HMAC is preferred, see `Use cases for CMAC vs. HMAC?`_ -HMAC and CMAC both use the ``MACContext`` interface: - -.. currentmodule:: cryptography.hazmat.primitives.mac - -.. class:: MACContext - - .. versionadded:: 0.7 - - .. method:: update(data) - - :param bytes data: The data you want to authenticate. - - .. method:: finalize() - - :return: The message authentication code. - - .. method:: copy() - - :return: A - :class:`~cryptography.hazmat.primitives.mac.MACContext` that - is a copy of the current context. - - .. method:: verify(signature) - - :param bytes signature: The signature to verify. - - :raises cryptography.exceptions.InvalidSignature: This is raised when - the provided signature does not match the expected signature. - - - -.. _`CMAC`: https://en.wikipedia.org/wiki/CMAC -.. _`Use cases for CMAC vs. HMAC?`: https://crypto.stackexchange.com/questions/15721/use-cases-for-cmac-vs-hmac - .. toctree:: :maxdepth: 1 cmac hmac + +.. _`Use cases for CMAC vs. HMAC?`: https://crypto.stackexchange.com/questions/15721/use-cases-for-cmac-vs-hmac diff --git a/src/cryptography/hazmat/backends/interfaces.py b/src/cryptography/hazmat/backends/interfaces.py index 0a476b991c74..20f4164ea850 100644 --- a/src/cryptography/hazmat/backends/interfaces.py +++ b/src/cryptography/hazmat/backends/interfaces.py @@ -57,7 +57,7 @@ def hmac_supported(self, algorithm): @abc.abstractmethod def create_hmac_ctx(self, key, algorithm): """ - Create a MACContext for calculating a message authentication code. + Create a context for calculating a message authentication code. """ @@ -72,7 +72,7 @@ def cmac_algorithm_supported(self, algorithm): @abc.abstractmethod def create_cmac_ctx(self, algorithm): """ - Create a MACContext for calculating a message authentication code. + Create a context for calculating a message authentication code. """ diff --git a/src/cryptography/hazmat/backends/openssl/cmac.py b/src/cryptography/hazmat/backends/openssl/cmac.py index bc88f3364495..d4d46f55f3cb 100644 --- a/src/cryptography/hazmat/backends/openssl/cmac.py +++ b/src/cryptography/hazmat/backends/openssl/cmac.py @@ -9,11 +9,10 @@ from cryptography.exceptions import ( InvalidSignature, UnsupportedAlgorithm, _Reasons ) -from cryptography.hazmat.primitives import constant_time, mac +from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.primitives.ciphers.modes import CBC -@utils.register_interface(mac.MACContext) class _CMACContext(object): def __init__(self, backend, algorithm, ctx=None): if not backend.cmac_algorithm_supported(algorithm): diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index 4b66a610c441..2e09cbc8a98f 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -9,10 +9,9 @@ from cryptography.exceptions import ( InvalidSignature, UnsupportedAlgorithm, _Reasons ) -from cryptography.hazmat.primitives import constant_time, hashes, mac +from cryptography.hazmat.primitives import constant_time, hashes -@utils.register_interface(mac.MACContext) @utils.register_interface(hashes.HashContext) class _HMACContext(object): def __init__(self, backend, key, algorithm, ctx=None): diff --git a/src/cryptography/hazmat/primitives/cmac.py b/src/cryptography/hazmat/primitives/cmac.py index 1404eac3db35..95a8d9756e45 100644 --- a/src/cryptography/hazmat/primitives/cmac.py +++ b/src/cryptography/hazmat/primitives/cmac.py @@ -9,10 +9,9 @@ AlreadyFinalized, UnsupportedAlgorithm, _Reasons ) from cryptography.hazmat.backends.interfaces import CMACBackend -from cryptography.hazmat.primitives import ciphers, mac +from cryptography.hazmat.primitives import ciphers -@utils.register_interface(mac.MACContext) class CMAC(object): def __init__(self, algorithm, backend, ctx=None): if not isinstance(backend, CMACBackend): diff --git a/src/cryptography/hazmat/primitives/hmac.py b/src/cryptography/hazmat/primitives/hmac.py index f7f401d2b6f6..9eceeac2a136 100644 --- a/src/cryptography/hazmat/primitives/hmac.py +++ b/src/cryptography/hazmat/primitives/hmac.py @@ -9,10 +9,9 @@ AlreadyFinalized, UnsupportedAlgorithm, _Reasons ) from cryptography.hazmat.backends.interfaces import HMACBackend -from cryptography.hazmat.primitives import hashes, mac +from cryptography.hazmat.primitives import hashes -@utils.register_interface(mac.MACContext) @utils.register_interface(hashes.HashContext) class HMAC(object): def __init__(self, key, algorithm, backend, ctx=None): diff --git a/src/cryptography/hazmat/primitives/mac.py b/src/cryptography/hazmat/primitives/mac.py deleted file mode 100644 index 4c95190ba110..000000000000 --- a/src/cryptography/hazmat/primitives/mac.py +++ /dev/null @@ -1,37 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -import abc - -import six - - -@six.add_metaclass(abc.ABCMeta) -class MACContext(object): - @abc.abstractmethod - def update(self, data): - """ - Processes the provided bytes. - """ - - @abc.abstractmethod - def finalize(self): - """ - Returns the message authentication code as bytes. - """ - - @abc.abstractmethod - def copy(self): - """ - Return a MACContext that is a copy of the current context. - """ - - @abc.abstractmethod - def verify(self, signature): - """ - Checks if the generated message authentication code matches the - signature. - """ From 3a300e6c8ed64503f3ef6cc22e5dda403fe8751a Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Fri, 8 Mar 2019 18:55:30 -0500 Subject: [PATCH 593/988] Improve deprecation warning to specify the release (#4804) --- src/cryptography/hazmat/primitives/constant_time.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/primitives/constant_time.py b/src/cryptography/hazmat/primitives/constant_time.py index 99a114e242ef..35ceafe080b1 100644 --- a/src/cryptography/hazmat/primitives/constant_time.py +++ b/src/cryptography/hazmat/primitives/constant_time.py @@ -21,8 +21,8 @@ def bytes_eq(a, b): else: warnings.warn( "Support for your Python version is deprecated. The next version of " - "cryptography will remove support. Please upgrade to a 2.7.x " - "release that supports hmac.compare_digest as soon as possible.", + "cryptography will remove support. Please upgrade to a release " + "(2.7.7+) that supports hmac.compare_digest as soon as possible.", utils.PersistentlyDeprecated2018, ) From b73ed5a6a3067c832413a6b4c987667a9d545153 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 10 Mar 2019 10:12:00 +0800 Subject: [PATCH 594/988] poly1305 support (#4802) * poly1305 support * some more tests * have I mentioned how bad the spellchecker is? * doc improvements * EVP_PKEY_new_raw_private_key copies the key but that's not documented Let's assume that might change and be very defensive * review feedback * add a test that fails on a tag of the correct length but wrong value * docs improvements --- CHANGELOG.rst | 2 + docs/hazmat/primitives/mac/index.rst | 1 + docs/hazmat/primitives/mac/poly1305.rst | 87 ++++++++++++ docs/spelling_wordlist.txt | 2 + src/cryptography/exceptions.py | 1 + .../hazmat/backends/openssl/backend.py | 13 ++ .../hazmat/backends/openssl/poly1305.py | 60 +++++++++ .../hazmat/primitives/poly1305.py | 43 ++++++ tests/hazmat/primitives/test_poly1305.py | 125 ++++++++++++++++++ 9 files changed, 334 insertions(+) create mode 100644 docs/hazmat/primitives/mac/poly1305.rst create mode 100644 src/cryptography/hazmat/backends/openssl/poly1305.py create mode 100644 src/cryptography/hazmat/primitives/poly1305.py create mode 100644 tests/hazmat/primitives/test_poly1305.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 019d257741b7..525c48139ce0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,8 @@ Changelog ``cryptography.hazmat.primitives.mac.MACContext`` interface. The ``CMAC`` and ``HMAC`` APIs have not changed, but they are no longer registered as ``MACContext`` instances. +* Add support for :class:`~cryptography.hazmat.primitives.poly1305.Poly1305` + when using OpenSSL 1.1.1 or newer. .. _v2-6-1: diff --git a/docs/hazmat/primitives/mac/index.rst b/docs/hazmat/primitives/mac/index.rst index f85eaa0e16c2..8bfe29e30bdf 100644 --- a/docs/hazmat/primitives/mac/index.rst +++ b/docs/hazmat/primitives/mac/index.rst @@ -14,5 +14,6 @@ HMAC?`_ cmac hmac + poly1305 .. _`Use cases for CMAC vs. HMAC?`: https://crypto.stackexchange.com/questions/15721/use-cases-for-cmac-vs-hmac diff --git a/docs/hazmat/primitives/mac/poly1305.rst b/docs/hazmat/primitives/mac/poly1305.rst new file mode 100644 index 000000000000..1d0753c6e831 --- /dev/null +++ b/docs/hazmat/primitives/mac/poly1305.rst @@ -0,0 +1,87 @@ +.. hazmat:: + +Poly1305 +======== + +.. currentmodule:: cryptography.hazmat.primitives.poly1305 + +.. testsetup:: + + key = b"\x01" * 32 + +Poly1305 is an authenticator that takes a 32-byte key and a message and +produces a 16-byte tag. This tag is used to authenticate the message. Each key +**must** only be used once. Using the same key to generate tags for multiple +messages allows an attacker to forge tags. Poly1305 is described in +:rfc:`7539`. + +.. class:: Poly1305(key) + + .. versionadded:: 2.7 + + .. warning:: + + Using the same key to generate tags for multiple messages allows an + attacker to forge tags. Always generate a new key per message you want + to authenticate. If you are using this as a MAC for + symmetric encryption please use + :class:`~cryptography.hazmat.primitives.ciphers.aead.ChaCha20Poly1305` + instead. + + .. doctest:: + + >>> from cryptography.hazmat.primitives import poly1305 + >>> p = poly1305.Poly1305(key) + >>> p.update(b"message to authenticate") + >>> p.finalize() + b'T\xae\xff3\xbdW\xef\xd5r\x01\xe2n=\xb7\xd2h' + + To check that a given tag is correct use the :meth:`verify` method. + You will receive an exception if the tag is wrong: + + .. doctest:: + + >>> p = poly1305.Poly1305(key) + >>> p.update(b"message to authenticate") + >>> p.verify(b"an incorrect tag") + Traceback (most recent call last): + ... + cryptography.exceptions.InvalidSignature: Value did not match computed tag. + + :param key: Secret key as ``bytes``. + :type key: :term:`bytes-like` + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if + the version of OpenSSL ``cryptography`` is compiled against does not + support this algorithm. + + .. method:: update(data) + + :param data: The bytes to hash and authenticate. + :type data: :term:`bytes-like` + :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize` + :raises TypeError: This exception is raised if ``data`` is not ``bytes``. + + .. method:: verify(tag) + + Finalize the current context and securely compare the MAC to + ``tag``. + + :param bytes tag: The bytes to compare against. + :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize` + :raises cryptography.exceptions.InvalidSignature: If tag does not + match. + :raises TypeError: This exception is raised if ``tag`` is not + ``bytes``. + + .. method:: finalize() + + Finalize the current context and return the message authentication code + as bytes. + + After ``finalize`` has been called this object can no longer be used + and :meth:`update`, :meth:`verify`, and :meth:`finalize` + will raise an :class:`~cryptography.exceptions.AlreadyFinalized` + exception. + + :return bytes: The message authentication code as bytes. + :raises cryptography.exceptions.AlreadyFinalized: diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index c9b4777eb9ae..47d3730150ac 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -1,6 +1,7 @@ accessor affine Authenticator +authenticator backend Backends backends @@ -77,6 +78,7 @@ Parallelization personalization pickleable plaintext +Poly pre precompute preprocessor diff --git a/src/cryptography/exceptions.py b/src/cryptography/exceptions.py index 648cf9dfe6bc..1d52d7dcfc5e 100644 --- a/src/cryptography/exceptions.py +++ b/src/cryptography/exceptions.py @@ -19,6 +19,7 @@ class _Reasons(Enum): UNSUPPORTED_X509 = 8 UNSUPPORTED_EXCHANGE_ALGORITHM = 9 UNSUPPORTED_DIFFIE_HELLMAN = 10 + UNSUPPORTED_MAC = 11 class UnsupportedAlgorithm(Exception): diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index b040b80965b2..15eff8379eac 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -55,6 +55,9 @@ from cryptography.hazmat.backends.openssl.ocsp import ( _OCSPRequest, _OCSPResponse ) +from cryptography.hazmat.backends.openssl.poly1305 import ( + _POLY1305_KEY_SIZE, _Poly1305Context +) from cryptography.hazmat.backends.openssl.rsa import ( _RSAPrivateKey, _RSAPublicKey ) @@ -2401,6 +2404,16 @@ def load_key_and_certificates_from_pkcs12(self, data, password): return (key, cert, additional_certificates) + def poly1305_supported(self): + return self._lib.Cryptography_HAS_POLY1305 == 1 + + def create_poly1305_ctx(self, key): + utils._check_byteslike("key", key) + if len(key) != _POLY1305_KEY_SIZE: + raise ValueError("A poly1305 key is 32 bytes long") + + return _Poly1305Context(self, key) + class GetCipherByName(object): def __init__(self, fmt): diff --git a/src/cryptography/hazmat/backends/openssl/poly1305.py b/src/cryptography/hazmat/backends/openssl/poly1305.py new file mode 100644 index 000000000000..25448dd02597 --- /dev/null +++ b/src/cryptography/hazmat/backends/openssl/poly1305.py @@ -0,0 +1,60 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.primitives import constant_time + + +_POLY1305_TAG_SIZE = 16 +_POLY1305_KEY_SIZE = 32 + + +class _Poly1305Context(object): + def __init__(self, backend, key): + self._backend = backend + + key_ptr = self._backend._ffi.from_buffer(key) + # This function copies the key into OpenSSL-owned memory so we don't + # need to retain it ourselves + evp_pkey = self._backend._lib.EVP_PKEY_new_raw_private_key( + self._backend._lib.NID_poly1305, + self._backend._ffi.NULL, key_ptr, len(key) + ) + self._backend.openssl_assert(evp_pkey != self._backend._ffi.NULL) + self._evp_pkey = self._backend._ffi.gc( + evp_pkey, self._backend._lib.EVP_PKEY_free + ) + ctx = self._backend._lib.Cryptography_EVP_MD_CTX_new() + self._backend.openssl_assert(ctx != self._backend._ffi.NULL) + self._ctx = self._backend._ffi.gc( + ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free + ) + res = self._backend._lib.EVP_DigestSignInit( + self._ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, + self._backend._ffi.NULL, self._evp_pkey + ) + self._backend.openssl_assert(res == 1) + + def update(self, data): + data_ptr = self._backend._ffi.from_buffer(data) + res = self._backend._lib.EVP_DigestSignUpdate( + self._ctx, data_ptr, len(data) + ) + self._backend.openssl_assert(res != 0) + + def finalize(self): + buf = self._backend._ffi.new("unsigned char[]", _POLY1305_TAG_SIZE) + outlen = self._backend._ffi.new("size_t *") + res = self._backend._lib.EVP_DigestSignFinal(self._ctx, buf, outlen) + self._backend.openssl_assert(res != 0) + self._backend.openssl_assert(outlen[0] == _POLY1305_TAG_SIZE) + return self._backend._ffi.buffer(buf)[:outlen[0]] + + def verify(self, tag): + mac = self.finalize() + if not constant_time.bytes_eq(mac, tag): + raise InvalidSignature("Value did not match computed tag.") diff --git a/src/cryptography/hazmat/primitives/poly1305.py b/src/cryptography/hazmat/primitives/poly1305.py new file mode 100644 index 000000000000..02b6629dee53 --- /dev/null +++ b/src/cryptography/hazmat/primitives/poly1305.py @@ -0,0 +1,43 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, UnsupportedAlgorithm, _Reasons +) + + +class Poly1305(object): + def __init__(self, key): + from cryptography.hazmat.backends.openssl.backend import backend + if not backend.poly1305_supported(): + raise UnsupportedAlgorithm( + "poly1305 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_MAC + ) + self._ctx = backend.create_poly1305_ctx(key) + + def update(self, data): + if self._ctx is None: + raise AlreadyFinalized("Context was already finalized.") + utils._check_byteslike("data", data) + self._ctx.update(data) + + def finalize(self): + if self._ctx is None: + raise AlreadyFinalized("Context was already finalized.") + mac = self._ctx.finalize() + self._ctx = None + return mac + + def verify(self, tag): + utils._check_bytes("tag", tag) + if self._ctx is None: + raise AlreadyFinalized("Context was already finalized.") + + ctx, self._ctx = self._ctx, None + ctx.verify(tag) diff --git a/tests/hazmat/primitives/test_poly1305.py b/tests/hazmat/primitives/test_poly1305.py new file mode 100644 index 000000000000..71495ff7e08e --- /dev/null +++ b/tests/hazmat/primitives/test_poly1305.py @@ -0,0 +1,125 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii +import os + +import pytest + +from cryptography.exceptions import ( + AlreadyFinalized, InvalidSignature, _Reasons +) +from cryptography.hazmat.primitives.poly1305 import Poly1305 + +from ...utils import ( + load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm +) + + +@pytest.mark.supported( + only_if=lambda backend: not backend.poly1305_supported(), + skip_message="Requires OpenSSL without poly1305 support" +) +def test_poly1305_unsupported(backend): + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_MAC): + Poly1305(b"0" * 32) + + +@pytest.mark.supported( + only_if=lambda backend: backend.poly1305_supported(), + skip_message="Requires OpenSSL with poly1305 support" +) +class TestPoly1305(object): + @pytest.mark.parametrize( + "vector", + load_vectors_from_file( + os.path.join("poly1305", "rfc7539.txt"), load_nist_vectors + ) + ) + def test_vectors(self, vector, backend): + key = binascii.unhexlify(vector["key"]) + msg = binascii.unhexlify(vector["msg"]) + tag = binascii.unhexlify(vector["tag"]) + poly = Poly1305(key) + poly.update(msg) + assert poly.finalize() == tag + + def test_key_with_no_additional_references(self, backend): + poly = Poly1305(os.urandom(32)) + assert len(poly.finalize()) == 16 + + def test_raises_after_finalize(self, backend): + poly = Poly1305(b"0" * 32) + poly.finalize() + + with pytest.raises(AlreadyFinalized): + poly.update(b"foo") + + with pytest.raises(AlreadyFinalized): + poly.finalize() + + def test_reject_unicode(self, backend): + poly = Poly1305(b"0" * 32) + with pytest.raises(TypeError): + poly.update(u'') + + def test_verify(self, backend): + poly = Poly1305(b"0" * 32) + poly.update(b"msg") + tag = poly.finalize() + + with pytest.raises(AlreadyFinalized): + poly.verify(b"") + + poly2 = Poly1305(b"0" * 32) + poly2.update(b"msg") + poly2.verify(tag) + + def test_invalid_verify(self, backend): + poly = Poly1305(b"0" * 32) + poly.update(b"msg") + with pytest.raises(InvalidSignature): + poly.verify(b"") + + p2 = Poly1305(b"0" * 32) + p2.update(b"msg") + with pytest.raises(InvalidSignature): + p2.verify(b"\x00" * 16) + + def test_verify_reject_unicode(self, backend): + poly = Poly1305(b"0" * 32) + with pytest.raises(TypeError): + poly.verify(u'') + + def test_invalid_key_type(self, backend): + with pytest.raises(TypeError): + Poly1305(object()) + + def test_invalid_key_length(self, backend): + with pytest.raises(ValueError): + Poly1305(b"0" * 31) + + with pytest.raises(ValueError): + Poly1305(b"0" * 33) + + def test_buffer_protocol(self, backend): + key = binascii.unhexlify( + b"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cb" + b"c207075c0" + ) + msg = binascii.unhexlify( + b"2754776173206272696c6c69672c20616e642074686520736c69746" + b"87920746f7665730a446964206779726520616e642067696d626c65" + b"20696e2074686520776162653a0a416c6c206d696d7379207765726" + b"52074686520626f726f676f7665732c0a416e6420746865206d6f6d" + b"65207261746873206f757467726162652e" + ) + key = bytearray(key) + poly = Poly1305(key) + poly.update(bytearray(msg)) + assert poly.finalize() == binascii.unhexlify( + b"4541669a7eaaee61e708dc7cbcc5eb62" + ) From a453d8709763badde325568c13961bb6745f333c Mon Sep 17 00:00:00 2001 From: bernhl <15350042+bernhl@users.noreply.github.com> Date: Mon, 18 Mar 2019 03:03:16 +0100 Subject: [PATCH 595/988] add OpenSSH serialization for ed25519 keys (#4808) (#4811) * add OpenSSH serialization for ed25519 keys (#4808) * address review comments --- src/cryptography/hazmat/backends/openssl/backend.py | 7 +++++++ tests/hazmat/primitives/test_serialization.py | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 15eff8379eac..779d2ee16fbc 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1885,6 +1885,13 @@ def _openssh_public_key_bytes(self, key): ssh._ssh_write_mpint(parameter_numbers.g) + ssh._ssh_write_mpint(public_numbers.y) ) + elif isinstance(key, ed25519.Ed25519PublicKey): + raw_bytes = key.public_bytes(serialization.Encoding.Raw, + serialization.PublicFormat.Raw) + return b"ssh-ed25519 " + base64.b64encode( + ssh._ssh_write_string(b"ssh-ed25519") + + ssh._ssh_write_string(raw_bytes) + ) else: assert isinstance(key, ec.EllipticCurvePublicKey) public_numbers = key.public_numbers() diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index c5ce258cb68a..f7d186e87740 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -1293,6 +1293,17 @@ def test_load_ssh_public_key(self, backend): b"N\x06G\xecV\xbc\x19\xaf\xc6 Date: Sun, 17 Mar 2019 23:23:55 -0400 Subject: [PATCH 596/988] Added a CHANGELOG entry for #4811 (#4812) * Added a CHANGELOG entry for #4811 * linewrap * linky nicely --- CHANGELOG.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 525c48139ce0..d6b3ac28ae30 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,9 @@ Changelog ``MACContext`` instances. * Add support for :class:`~cryptography.hazmat.primitives.poly1305.Poly1305` when using OpenSSL 1.1.1 or newer. +* Support serialization with ``Encoding.OpenSSH`` and ``PublicFormat.OpenSSH`` + in + :meth:`Ed25519PublicKey.public_bytes `. .. _v2-6-1: From f2c2dfd7ce179b1763a98747282ea2ce019d6c1a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 19 Mar 2019 09:23:54 +0800 Subject: [PATCH 597/988] add new branch for unsupported openssh serialization (#4813) we don't support ed448 openssh keys so we'll use that to test this branch. if we ever do support ed448 keys we can always just call this private method directly to keep coverage. --- src/cryptography/hazmat/backends/openssl/backend.py | 7 +++++-- tests/hazmat/primitives/test_serialization.py | 11 ++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 779d2ee16fbc..74dedbe01ed5 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1892,8 +1892,7 @@ def _openssh_public_key_bytes(self, key): ssh._ssh_write_string(b"ssh-ed25519") + ssh._ssh_write_string(raw_bytes) ) - else: - assert isinstance(key, ec.EllipticCurvePublicKey) + elif isinstance(key, ec.EllipticCurvePublicKey): public_numbers = key.public_numbers() try: curve_name = { @@ -1916,6 +1915,10 @@ def _openssh_public_key_bytes(self, key): ssh._ssh_write_string(curve_name) + ssh._ssh_write_string(point) ) + else: + raise ValueError( + "OpenSSH encoding is not supported for this key type" + ) def _parameter_bytes(self, encoding, format, cdata): if encoding is serialization.Encoding.OpenSSH: diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index f7d186e87740..6c86927a9a8d 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -16,7 +16,9 @@ DERSerializationBackend, DSABackend, EllipticCurveBackend, PEMSerializationBackend, RSABackend ) -from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa +from cryptography.hazmat.primitives.asymmetric import ( + dsa, ec, ed25519, ed448, rsa +) from cryptography.hazmat.primitives.serialization import ( BestAvailableEncryption, Encoding, NoEncryption, PrivateFormat, PublicFormat, @@ -1585,3 +1587,10 @@ def test_load_public_key(self, key_path, encoding, loader, backend): assert public_key.public_bytes( encoding, PublicFormat.SubjectPublicKeyInfo ) == data + + def test_openssh_serialization_unsupported(self, backend): + key = ed448.Ed448PrivateKey.generate().public_key() + with pytest.raises(ValueError): + key.public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) From 054f5791dd0b603bbaca028da48fff23930e0741 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 19 Mar 2019 10:24:19 +0800 Subject: [PATCH 598/988] update ed25519 docs to note we support openssh serialization (#4814) --- docs/hazmat/primitives/asymmetric/ed25519.rst | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ed25519.rst b/docs/hazmat/primitives/asymmetric/ed25519.rst index 8893fbbdb188..f9e007c54d7e 100644 --- a/docs/hazmat/primitives/asymmetric/ed25519.rst +++ b/docs/hazmat/primitives/asymmetric/ed25519.rst @@ -122,11 +122,14 @@ Key interfaces Allows serialization of the key to bytes. Encoding ( :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.OpenSSH`, + or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and format ( - :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo` - or + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`, + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.OpenSSH` + , or :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` ) are chosen to define the exact serialization. @@ -138,8 +141,12 @@ Key interfaces enum. If the ``encoding`` is :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw` then ``format`` must be - :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw` - , otherwise it must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.Raw`. + If ``encoding`` is + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.OpenSSH` + then ``format`` must be + :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.OpenSSH`. + In all other cases ``format`` must be :attr:`~cryptography.hazmat.primitives.serialization.PublicFormat.SubjectPublicKeyInfo`. :returns bytes: The public key bytes. From d21f8815a11972b804a776b4201dc4867bf8ce4c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 19 Mar 2019 08:43:53 -0400 Subject: [PATCH 599/988] Try to use getrandom even in manylinux1 wheels (#4816) * Try to use getrandom even in manylinux1 wheels * typo --- src/_cffi_src/openssl/src/osrandom_engine.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index 7a48787dd3e7..cf394f22a2fd 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -26,6 +26,18 @@ #ifndef GRND_NONBLOCK #define GRND_NONBLOCK 0x0001 #endif /* GRND_NONBLOCK */ + + #ifndef SYS_getrandom + /* We only bother to define the constants for platforms where we ship + * wheels, since that's the predominant way you get a situation where + * you don't have SYS_getrandom at compile time but do have the syscall + * at runtime */ + #if defined __x86_64__ + #define SYS_getrandom 318 + #elif defined(__i386__) + #define SYS_getrandom 355 + #endif + #endif #endif /* __linux__ */ #endif /* _WIN32 */ From 5c037cc8eb800b0da4a6c475cecbdec3b182422b Mon Sep 17 00:00:00 2001 From: Mathias Ertl Date: Mon, 25 Mar 2019 13:20:55 +0100 Subject: [PATCH 600/988] implement eq__, __hash__ and __repr__ for OCSPNoCheck and PrecertPoison (#4819) --- src/cryptography/x509/extensions.py | 24 ++++++++++++++++ tests/x509/test_x509_ext.py | 44 +++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index f027247e1818..7884afbd83c2 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -856,11 +856,35 @@ def __hash__(self): class OCSPNoCheck(object): oid = ExtensionOID.OCSP_NO_CHECK + def __eq__(self, other): + if not isinstance(other, OCSPNoCheck): + return NotImplemented + + return True + + def __hash__(self): + return hash(OCSPNoCheck) + + def __repr__(self): + return "" + @utils.register_interface(ExtensionType) class PrecertPoison(object): oid = ExtensionOID.PRECERT_POISON + def __eq__(self, other): + if not isinstance(other, PrecertPoison): + return NotImplemented + + return True + + def __hash__(self): + return hash(PrecertPoison) + + def __repr__(self): + return "" + @utils.register_interface(ExtensionType) class TLSFeature(object): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 6cf388da4c40..fabf41067e7d 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4391,6 +4391,28 @@ def test_nocheck(self, backend): ) assert isinstance(ext.value, x509.OCSPNoCheck) + def test_eq(self): + onc1 = x509.OCSPNoCheck() + onc2 = x509.OCSPNoCheck() + + assert onc1 == onc2 + + def test_hash(self): + onc1 = x509.OCSPNoCheck() + onc2 = x509.OCSPNoCheck() + + assert hash(onc1) == hash(onc2) + + def test_ne(self): + onc = x509.OCSPNoCheck() + + assert onc != object() + + def test_repr(self): + onc = x509.OCSPNoCheck() + + assert repr(onc) == '' + class TestInhibitAnyPolicy(object): def test_not_int(self): @@ -4894,6 +4916,28 @@ def test_generate(self, backend): ).value assert isinstance(poison, x509.PrecertPoison) + def test_eq(self): + pcp1 = x509.PrecertPoison() + pcp2 = x509.PrecertPoison() + + assert pcp1 == pcp2 + + def test_hash(self): + pcp1 = x509.PrecertPoison() + pcp2 = x509.PrecertPoison() + + assert hash(pcp1) == hash(pcp2) + + def test_ne(self): + pcp = x509.PrecertPoison() + + assert pcp != object() + + def test_repr(self): + pcp = x509.PrecertPoison() + + assert repr(pcp) == '' + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) From 91105952739442a74582d3e62b3d2111365b0dc7 Mon Sep 17 00:00:00 2001 From: Mathias Ertl Date: Mon, 25 Mar 2019 22:25:49 +0100 Subject: [PATCH 601/988] fix != comparison in py2 (fixes #4821) (#4822) * fix != comparison in py2 (fixes #4821) * remove blank line b/c pep8 * move __ne__ next to __eq__ as per review request --- src/cryptography/x509/extensions.py | 6 ++++++ tests/x509/test_x509_ext.py | 14 ++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 7884afbd83c2..e64e09c56fcb 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -862,6 +862,9 @@ def __eq__(self, other): return True + def __ne__(self, other): + return not self == other + def __hash__(self): return hash(OCSPNoCheck) @@ -879,6 +882,9 @@ def __eq__(self, other): return True + def __ne__(self, other): + return not self == other + def __hash__(self): return hash(PrecertPoison) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index fabf41067e7d..ec618d9a1841 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -4404,9 +4404,12 @@ def test_hash(self): assert hash(onc1) == hash(onc2) def test_ne(self): - onc = x509.OCSPNoCheck() + onc1 = x509.OCSPNoCheck() + onc2 = x509.OCSPNoCheck() - assert onc != object() + assert onc1 == onc2 + assert (onc1 != onc2) is False + assert onc1 != object() def test_repr(self): onc = x509.OCSPNoCheck() @@ -4929,9 +4932,12 @@ def test_hash(self): assert hash(pcp1) == hash(pcp2) def test_ne(self): - pcp = x509.PrecertPoison() + pcp1 = x509.PrecertPoison() + pcp2 = x509.PrecertPoison() - assert pcp != object() + assert pcp1 == pcp2 + assert (pcp1 != pcp2) is False + assert pcp1 != object() def test_repr(self): pcp = x509.PrecertPoison() From 5fbc54ec0521730b646df8066bcff1ac9b4be5bf Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 31 Mar 2019 20:04:04 -0400 Subject: [PATCH 602/988] Added an explicit content type for long_description (#4826) It already defaults to x-rst, but this silences a warning --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 5b29d32e636f..482ec596937a 100644 --- a/setup.py +++ b/setup.py @@ -250,6 +250,7 @@ def run_tests(self): description=about["__summary__"], long_description=long_description, + long_description_content_type="text/x-rst", license=about["__license__"], url=about["__uri__"], From 9fba77113aac0b444df9418442d314b8230e4140 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 1 Apr 2019 00:57:52 -0400 Subject: [PATCH 603/988] Ignore the Russian CA for now (#4827) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 4349b0587ea3..32d5d26260d4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -181,4 +181,6 @@ linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL "https://info.isl.ntt.co.jp/crypt/eng/camellia/", + # Serving an incomplete chain + "https://e-trust.gosuslugi.ru/MainCA", ] From 8be924fa68ca6dd360d5f3df4206817b953290fc Mon Sep 17 00:00:00 2001 From: Ofek Lev Date: Tue, 2 Apr 2019 21:02:17 -0400 Subject: [PATCH 604/988] Fix typo (#4829) --- docs/x509/reference.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index b2278d57f768..6333a2630b00 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -601,7 +601,7 @@ X.509 CRL (Certificate Revocation List) Object :type: :class:`datetime.datetime` - A naïve datetime representing when the this CRL was last updated. + A naïve datetime representing when this CRL was last updated. .. doctest:: From b839786c26e3d01691d476bf2895f73784256801 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 4 Apr 2019 13:57:52 -0400 Subject: [PATCH 605/988] Added BN_is_negative -- refs #4830 (#4831) --- src/_cffi_src/openssl/bignum.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/bignum.py b/src/_cffi_src/openssl/bignum.py index a352f5a87cd1..751018391d94 100644 --- a/src/_cffi_src/openssl/bignum.py +++ b/src/_cffi_src/openssl/bignum.py @@ -52,6 +52,7 @@ int BN_num_bits(const BIGNUM *); int BN_cmp(const BIGNUM *, const BIGNUM *); +int BN_is_negative(const BIGNUM *); int BN_add(BIGNUM *, const BIGNUM *, const BIGNUM *); int BN_sub(BIGNUM *, const BIGNUM *, const BIGNUM *); int BN_nnmod(BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); From 92241410b5b0591d849443b3023992334a4be0a2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 11 Apr 2019 20:57:13 +0800 Subject: [PATCH 606/988] fix a memory leak in AIA parsing (#4836) * fix a memory leak in AIA parsing * oops can't remove that --- src/_cffi_src/openssl/x509v3.py | 3 +++ .../hazmat/backends/openssl/decode_asn1.py | 9 +++++++- tests/hazmat/backends/test_openssl_memleak.py | 21 ++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/_cffi_src/openssl/x509v3.py b/src/_cffi_src/openssl/x509v3.py index 193d2e233bde..59681206524b 100644 --- a/src/_cffi_src/openssl/x509v3.py +++ b/src/_cffi_src/openssl/x509v3.py @@ -177,6 +177,7 @@ typedef void (*sk_GENERAL_NAME_freefunc)(GENERAL_NAME *); typedef void (*sk_DIST_POINT_freefunc)(DIST_POINT *); typedef void (*sk_POLICYINFO_freefunc)(POLICYINFO *); +typedef void (*sk_ACCESS_DESCRIPTION_freefunc)(ACCESS_DESCRIPTION *); """ @@ -228,6 +229,8 @@ Cryptography_STACK_OF_ACCESS_DESCRIPTION *, int ); void sk_ACCESS_DESCRIPTION_free(Cryptography_STACK_OF_ACCESS_DESCRIPTION *); +void sk_ACCESS_DESCRIPTION_pop_free(Cryptography_STACK_OF_ACCESS_DESCRIPTION *, + sk_ACCESS_DESCRIPTION_freefunc); int sk_ACCESS_DESCRIPTION_push(Cryptography_STACK_OF_ACCESS_DESCRIPTION *, ACCESS_DESCRIPTION *); diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 773189d4f8b5..75d5844bc110 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -379,7 +379,14 @@ def _decode_authority_key_identifier(backend, akid): def _decode_authority_information_access(backend, aia): aia = backend._ffi.cast("Cryptography_STACK_OF_ACCESS_DESCRIPTION *", aia) - aia = backend._ffi.gc(aia, backend._lib.sk_ACCESS_DESCRIPTION_free) + aia = backend._ffi.gc( + aia, + lambda x: backend._lib.sk_ACCESS_DESCRIPTION_pop_free( + x, backend._ffi.addressof( + backend._lib._original_lib, "ACCESS_DESCRIPTION_free" + ) + ) + ) num = backend._lib.sk_ACCESS_DESCRIPTION_num(aia) access_descriptions = [] for i in range(num): diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index ed22b5db9ee2..f9ae1c46b9a6 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -210,7 +210,7 @@ class TestOpenSSLMemoryLeaks(object): @pytest.mark.parametrize("path", [ "x509/PKITS_data/certs/ValidcRLIssuerTest28EE.crt", ]) - def test_x509_certificate_extensions(self, path): + def test_der_x509_certificate_extensions(self, path): assert_no_memory_leaks(textwrap.dedent(""" def func(path): from cryptography import x509 @@ -226,6 +226,25 @@ def func(path): cert.extensions """), [path]) + @pytest.mark.parametrize("path", [ + "x509/cryptography.io.pem", + ]) + def test_pem_x509_certificate_extensions(self, path): + assert_no_memory_leaks(textwrap.dedent(""" + def func(path): + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + + import cryptography_vectors + + with cryptography_vectors.open_vector_file(path, "rb") as f: + cert = x509.load_pem_x509_certificate( + f.read(), backend + ) + + cert.extensions + """), [path]) + def test_x509_csr_extensions(self): assert_no_memory_leaks(textwrap.dedent(""" def func(): From 95c460bb0a86f976442bccabe3f9e9251670a70b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 11 Apr 2019 20:11:33 -0400 Subject: [PATCH 607/988] Update linkcheck ignores for the latest nonsense (#4838) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 32d5d26260d4..fb1537e48867 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -182,5 +182,5 @@ # Small DH key results in a TLS failure on modern OpenSSL "https://info.isl.ntt.co.jp/crypt/eng/camellia/", # Serving an incomplete chain - "https://e-trust.gosuslugi.ru/MainCA", + "https://www.cosic.esat.kuleuven.be", ] From e34037253c805a8da865016af88e202076b04908 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 11 Apr 2019 21:31:52 -0400 Subject: [PATCH 608/988] Add a mention of our security reporting guidelines in our ISSUE_TEMPLATE (#4839) --- .github/ISSUE_TEMPLATE.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/ISSUE_TEMPLATE.rst b/.github/ISSUE_TEMPLATE.rst index 2fb07b1b937b..011d571c9f19 100644 --- a/.github/ISSUE_TEMPLATE.rst +++ b/.github/ISSUE_TEMPLATE.rst @@ -12,3 +12,7 @@ your bug report: you're using * How you installed ``cryptography`` * Clear steps for reproducing your bug + +Please do not report security issues on Github! Follow the instructions in our +documentation for reporting security issues: +https://cryptography.io/en/latest/security/ From 9c7aa17ef920c9495e7a705637cf84d0f4e6163d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 12 Apr 2019 22:38:00 -0400 Subject: [PATCH 609/988] =?UTF-8?q?Refs=20#4830=20--=20added=20a=20vector?= =?UTF-8?q?=20of=20an=20x.509=20certificate=20with=20a=20negative=20?= =?UTF-8?q?=E2=80=A6=20(#4842)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refs #4830 -- added a vector of an x.509 certificate with a negative serial number * Line wrap --- docs/development/test-vectors.rst | 2 ++ .../x509/custom/negative_serial.pem | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/custom/negative_serial.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 1f4a8dffd690..32d387183681 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -388,6 +388,8 @@ Custom X.509 Vectors * ``ca/ca.pem`` - A self-signed certificate with ``basicConstraints`` set to true. Its private key is ``ca/ca_key.pem``. This certificate is encoded in several of the PKCS12 custom vectors. +* ``negative_serial.pem`` - A certificate with a serial number that is a + negative number. Custom X.509 Request Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/custom/negative_serial.pem b/vectors/cryptography_vectors/x509/custom/negative_serial.pem new file mode 100644 index 000000000000..0994f9a25115 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/negative_serial.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIELDCCAxSgAwIBAgIF+86ZbBMwDQYJKoZIhvcNAQELBQAwUjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDU1vdGhlciBOYXR1cmUxEzARBgNVBAsTCkV2ZXJ5dGhpbmcx +FjAUBgNVBAMTDU1vdGhlciBOYXR1cmUwHhcNMTYwNzA2MTgzNDA2WhcNMTYwOTE4 +MTgzNDA2WjCBmTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkZMMRQwEgYDVQQHEwtU +YWxsYWhhc3NlZTEcMBoGA1UECRMTMzIxMCBIb2xseSBNaWxsIFJ1bjEOMAwGA1UE +ERMFMzAwNjIxGDAWBgNVBAoTD0V4dHJlbWUgRGlzY29yZDEOMAwGA1UECxMFQ2hh +b3MxDzANBgNVBAMTBmdvdi51czCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6VH/JvcG/foNel5R3NHz/OeI9fqHyoPB6d/wQ1k/aVGNotSzVaDCJPY3J +xmr1KCnNjzGmViuaLXyZWZEMum2R8D0+LX1PHBQl2vbrXSOMDu97c323QOdTUwMY +C2LmaFP3fa5SV5Q+8+4f/B97wXExOjp1z5z7VafYj2MoY72GitoSfJ/LrkKEksey +fTflVxKEvZqW3wUN6F2Kj4Jo1N45Ym+lIrz/VQKDOSpc/p0dJ1PghDZZ2d2b3iuj +5rCMTw9533WS3wueYfn70jJY9DKoFj9Ly6AG0AB2o7cqTv8j+3slVfAR3ufwgyx2 +ckUDBWCZaZdnhRxaj/G9MMYGEV0CAwEAAaOBwDCBvTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdIwQHMAWAAwECAzANBgNVHQ4EBgQEBAMCATAbBgNVHREEFDASgggqLmdv +di51c4IGZ292LnVzMAsGA1UdDwQEAwIBhjAgBgNVHSUBAf8EFjAUBggrBgEFBQcD +AQYIKwYBBQUHAwIwPwYDVR0fAQH/BDUwMzAxoC+gLYYraHR0cDovL2NybC5zdGFy +ZmllbGR0ZWNoLmNvbS9zZmlnMnMxLTE3LmNybDANBgkqhkiG9w0BAQsFAAOCAQEA +bfqYztTkJPRPAJ1WItmU3RZIGRx1VkCABouAor6tVH6wGVCwWgaG8li6AujHMfYv +y6QUPhhIyNjTe21ne72BY1XXd9haGdMwXtUCNfeGBXKsR9EN0kDyOAXGZWj3Fqpu +S9WjluPAjQWHFoRwlQBSxCVuRgIrjXhJndvW9ySAaI51epRAr5kwylvTD7qy363C +xDANx5XVFEktclI25DSrxmiJyawVGFjnwaYBFTe2ZINoZvs68EEl1b18+VGF21e9 +BAQGlcsIfbDAAEQFJ+5A+o8zy9M7CVsNVgw3TRJbjVTZSEg5PAEX+3C5V6wzrQi1 +nqzaNa/5DxGWILelZclgvA== +-----END CERTIFICATE----- From 020caf99a704e84217a61a99f15245edc7406239 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 12 Apr 2019 23:34:31 -0400 Subject: [PATCH 610/988] More linkcheck ignores (#4844) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index fb1537e48867..ba48138c9336 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -183,4 +183,6 @@ "https://info.isl.ntt.co.jp/crypt/eng/camellia/", # Serving an incomplete chain "https://www.cosic.esat.kuleuven.be", + # 502ing + "http://www.secg.org/sec1-v2.pdf", ] From 19db013fa66fb4eb38e105e7fd46599aad51bf30 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 12 Apr 2019 23:36:20 -0400 Subject: [PATCH 611/988] Fixes #4830 -- handle negative serial numbers (#4843) --- src/cryptography/hazmat/backends/openssl/backend.py | 5 ++++- tests/x509/test_x509.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 74dedbe01ed5..ee86413710c8 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -334,7 +334,10 @@ def _bn_to_int(self, bn): bin_len = self._lib.BN_bn2bin(bn, bin_ptr) # A zero length means the BN has value 0 self.openssl_assert(bin_len >= 0) - return int.from_bytes(self._ffi.buffer(bin_ptr)[:bin_len], "big") + val = int.from_bytes(self._ffi.buffer(bin_ptr)[:bin_len], "big") + if self._lib.BN_is_negative(bn): + val = -val + return val else: # Under Python 2 the best we can do is hex() hex_cdata = self._lib.BN_bn2hex(bn) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 72cd49e79226..afca9c5bd121 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -597,6 +597,14 @@ def test_load_pem_cert(self, backend): cert.signature_algorithm_oid == SignatureAlgorithmOID.RSA_WITH_SHA1 ) + def test_negative_serial_number(self, backend): + cert = _load_cert( + os.path.join("x509", "custom", "negative_serial.pem"), + x509.load_pem_x509_certificate, + backend, + ) + assert cert.serial_number == -18008675309 + def test_alternate_rsa_with_sha1_oid(self, backend): cert = _load_cert( os.path.join("x509", "alternate-rsa-sha1-oid.pem"), From 276f5c49d55b5ff7694f2f35ae538282ec360e7d Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 15 Apr 2019 22:46:57 -0700 Subject: [PATCH 612/988] 4810 bugfix: avoid UnicodeEncodeError on python 2 (#4846) * test: regression test for UnicodeEncodeError in x509 name in #4810 added utf8 encoding at the top of the file due to PEP 263 * bugfix: #4810 resolve UnicodeEncodeError in x509 name --- src/cryptography/x509/name.py | 5 ++++- tests/x509/test_x509.py | 23 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index dac5639ee64b..ca2a1754ee6e 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -253,4 +253,7 @@ def __len__(self): return sum(len(rdn) for rdn in self._attributes) def __repr__(self): - return "".format(self.rfc4514_string()) + if six.PY2: + return "".format(self.rfc4514_string().encode('utf8')) + else: + return "".format(self.rfc4514_string()) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index afca9c5bd121..a4cd70bcc71d 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # This file is dual licensed under the terms of the Apache License, Version # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. @@ -4128,13 +4129,27 @@ def test_rdns(self): name2 = x509.Name([x509.RelativeDistinguishedName([rdn1, rdn2])]) assert name2.rdns == [x509.RelativeDistinguishedName([rdn1, rdn2])] - def test_repr(self): + @pytest.mark.parametrize( + ("common_name", "org_name", "expected_repr"), + [ + ( + u'cryptography.io', + u'PyCA', + "", + ), + ( + u'Certificación', + u'Certificación', + "", + ), + ]) + def test_repr(self, common_name, org_name, expected_repr): name = x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u'cryptography.io'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), + x509.NameAttribute(NameOID.COMMON_NAME, common_name), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, org_name), ]) - assert repr(name) == "" + assert repr(name) == expected_repr def test_rfc4514_string(self): n = x509.Name([ From 0b6fba25ff9b9f6522af680707d62b497c1b8715 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 16 Apr 2019 20:13:49 +0800 Subject: [PATCH 613/988] update a link since MS redid all their MSDN blogs (#4847) --- docs/limitations.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/limitations.rst b/docs/limitations.rst index 503bdfe48c87..6c58262f8bae 100644 --- a/docs/limitations.rst +++ b/docs/limitations.rst @@ -15,5 +15,5 @@ software in Python is potentially vulnerable to this attack. The Likelihood: unlikely, Remediation Cost: expensive to repair" and we do not consider this a high risk for most users. -.. _`Memory wiping`: https://blogs.msdn.microsoft.com/oldnewthing/20130529-00/?p=4223/ +.. _`Memory wiping`: https://devblogs.microsoft.com/oldnewthing/?p=4223 .. _`CERT secure coding guidelines`: https://www.securecoding.cert.org/confluence/display/c/MEM03-C.+Clear+sensitive+information+stored+in+reusable+resources From f5e7855481e5d34b979629d2bd128fa37756e7eb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 16 Apr 2019 10:21:58 -0400 Subject: [PATCH 614/988] Yet Another Broken Webserver (#4848) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index ba48138c9336..4f390eb4c3a4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -185,4 +185,6 @@ "https://www.cosic.esat.kuleuven.be", # 502ing "http://www.secg.org/sec1-v2.pdf", + # 403ing from Travis + "https://devblogs.microsoft.com/oldnewthing/?p=4223", ] From 6b98a5275656d35aa33029630023d46b670ff333 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 16 Apr 2019 20:01:33 -0400 Subject: [PATCH 615/988] It's fixed! (#4851) --- docs/conf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 4f390eb4c3a4..3eb6000c5a81 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -183,8 +183,6 @@ "https://info.isl.ntt.co.jp/crypt/eng/camellia/", # Serving an incomplete chain "https://www.cosic.esat.kuleuven.be", - # 502ing - "http://www.secg.org/sec1-v2.pdf", # 403ing from Travis "https://devblogs.microsoft.com/oldnewthing/?p=4223", ] From 33b3b3eb4a02a6f8b0e0ce5a7ca9a29372b59ac0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 16 Apr 2019 20:01:59 -0400 Subject: [PATCH 616/988] Crypto Docs Get Cryptography (#4850) --- docs/hazmat/primitives/asymmetric/ec.rst | 2 +- docs/hazmat/primitives/asymmetric/serialization.rst | 2 +- docs/hazmat/primitives/key-derivation-functions.rst | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 0035e5b0775c..3025f334683c 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -954,4 +954,4 @@ Elliptic Curve Object Identifiers .. _`ECDSA`: https://en.wikipedia.org/wiki/ECDSA .. _`EdDSA`: https://en.wikipedia.org/wiki/EdDSA .. _`forward secrecy`: https://en.wikipedia.org/wiki/Forward_secrecy -.. _`SEC 1 v2.0`: http://www.secg.org/sec1-v2.pdf +.. _`SEC 1 v2.0`: https://www.secg.org/sec1-v2.pdf diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 84867efba9c2..7c1fc82e5c5b 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -644,4 +644,4 @@ Serialization Encryption Types .. _`PKCS3`: https://www.teletrust.de/fileadmin/files/oid/oid_pkcs-3v1-4.pdf -.. _`SEC 1 v2.0`: http://www.secg.org/sec1-v2.pdf +.. _`SEC 1 v2.0`: https://www.secg.org/sec1-v2.pdf diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index be03b19cb8c7..af7fb40a33d5 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -904,7 +904,7 @@ Interface .. _`NIST SP 800-108`: https://csrc.nist.gov/publications/detail/sp/800-108/final .. _`NIST SP 800-56Ar2`: https://csrc.nist.gov/publications/detail/sp/800-56a/rev-2/final .. _`ANSI X9.63:2001`: https://webstore.ansi.org -.. _`SEC 1 v2.0`: http://www.secg.org/sec1-v2.pdf +.. _`SEC 1 v2.0`: https://www.secg.org/sec1-v2.pdf .. _`Password Storage Cheat Sheet`: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet .. _`PBKDF2`: https://en.wikipedia.org/wiki/PBKDF2 .. _`key stretching`: https://en.wikipedia.org/wiki/Key_stretching From f709ce5c5ccd4eb96a5551b21293b04909122bf5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 17 Apr 2019 00:11:49 -0400 Subject: [PATCH 617/988] ... regular expressions... what can you do? (#4849) * ... regular expressions... what can you do? * These are raw strings --- docs/conf.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 3eb6000c5a81..4f1a5092541e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -180,9 +180,9 @@ linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL - "https://info.isl.ntt.co.jp/crypt/eng/camellia/", + r"https://info.isl.ntt.co.jp/crypt/eng/camellia/", # Serving an incomplete chain - "https://www.cosic.esat.kuleuven.be", + r"https://www.cosic.esat.kuleuven.be", # 403ing from Travis - "https://devblogs.microsoft.com/oldnewthing/?p=4223", + r"https://devblogs.microsoft.com/oldnewthing/\?p=4223", ] From 87550626ff995ae61abf441e5e89076cc5a7dd45 Mon Sep 17 00:00:00 2001 From: Charlie Li Date: Tue, 23 Apr 2019 11:07:00 -0400 Subject: [PATCH 618/988] Use generic DTLS functions added in LibreSSL 2.9.1 (#4855) * Use generic DTLS functions added in LibreSSL 2.9.1 While here, bump travis. * Remove LibreSSL 2.9.0 from travis now that 2.9.1 exists. Requested by: @reaperhulk --- .travis.yml | 2 +- src/_cffi_src/openssl/cryptography.py | 3 +++ src/_cffi_src/openssl/ssl.py | 9 ++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index cc749667a84a..c031e66fea44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,7 +60,7 @@ matrix: - python: 3.7 env: TOXENV=py37 LIBRESSL=2.8.3 - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.9.0 + env: TOXENV=py37 LIBRESSL=2.9.1 - python: 2.7 services: docker diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 4124dcb87963..ac32fdffde3b 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -38,9 +38,12 @@ (LIBRESSL_VERSION_NUMBER >= 0x2070000f) #define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER \ (LIBRESSL_VERSION_NUMBER >= 0x2080000f) +#define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER \ + (LIBRESSL_VERSION_NUMBER >= 0x2090100f) #else #define CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER (0) #define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER (0) +#define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER (0) #endif #define CRYPTOGRAPHY_OPENSSL_102_OR_GREATER \ diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 92fd1e3ec8ca..da21f3ce90ad 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -719,17 +719,20 @@ static const long TLS_ST_OK = 0; #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +/* LibreSSL 2.9.1 added only the DTLS_*_method functions */ +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 0; const SSL_METHOD *(*DTLS_method)(void) = NULL; const SSL_METHOD *(*DTLS_server_method)(void) = NULL; const SSL_METHOD *(*DTLS_client_method)(void) = NULL; +#else +static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; +#endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 static const long SSL_OP_NO_DTLSv1 = 0; static const long SSL_OP_NO_DTLSv1_2 = 0; long (*DTLS_set_link_mtu)(SSL *, long) = NULL; long (*DTLS_get_link_min_mtu)(SSL *) = NULL; -#else -static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; #endif static const long Cryptography_HAS_DTLS = 1; From 6c3f1b383f2d5c45eea694439753711c1ae6649b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 27 Apr 2019 00:04:14 -0400 Subject: [PATCH 619/988] Fix failing twisted downstream (#4860) --- .travis/downstream.d/twisted.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/downstream.d/twisted.sh b/.travis/downstream.d/twisted.sh index 9b98d82b0525..3d45413bbe21 100755 --- a/.travis/downstream.d/twisted.sh +++ b/.travis/downstream.d/twisted.sh @@ -5,7 +5,7 @@ case "${1}" in git clone --depth=1 https://github.com/twisted/twisted cd twisted git rev-parse HEAD - pip install -e ".[tls,conch,http2]" + pip install ".[tls,conch,http2]" ;; run) cd twisted From 7a079b0a854cbef2ba9d838a58f5858618b81160 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 27 Apr 2019 08:36:12 -0400 Subject: [PATCH 620/988] fixed ubuntu rolling build for disco release (#4861) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c031e66fea44..ed400eb940e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -89,9 +89,9 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling - - python: 3.6 + - python: 3.7 services: docker - env: TOXENV=py36 DOCKER=pyca/cryptography-runner-ubuntu-rolling + env: TOXENV=py37 DOCKER=pyca/cryptography-runner-ubuntu-rolling - python: 2.7 services: docker env: TOXENV=randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling From 2a5eddcc7a62f770310ab71dbdf8a0419e9678df Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 27 Apr 2019 15:03:49 -0400 Subject: [PATCH 621/988] Un-linkcheck-ignore a domain that's now properly serving a chain (#4859) --- docs/conf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 4f1a5092541e..e57e133ede32 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -181,8 +181,6 @@ linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL r"https://info.isl.ntt.co.jp/crypt/eng/camellia/", - # Serving an incomplete chain - r"https://www.cosic.esat.kuleuven.be", # 403ing from Travis r"https://devblogs.microsoft.com/oldnewthing/\?p=4223", ] From bc081087c8d079597787ad0b36245a03de346681 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 29 Apr 2019 10:03:11 -0400 Subject: [PATCH 622/988] Run linkcheck builds when the commit message mentions linkcheck (#4862) * Run linkcheck builds when the commit message mentions linkcheck * syntax fix --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ed400eb940e4..760f97b94ee1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -114,7 +114,7 @@ matrix: - python: 2.7 services: docker env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster - if: branch = master AND type != pull_request + if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/ - python: 3.4 env: TOXENV=pep8 From 68ee59962a1a65452b7f36378c56ed1a80858961 Mon Sep 17 00:00:00 2001 From: "azure-pipelines[bot]" Date: Fri, 3 May 2019 19:58:46 -0400 Subject: [PATCH 623/988] Set up CI with Azure Pipelines (#4471) * Set up CI with Azure Pipelines * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Update azure-pipelines.yml * Moving TOXENV to matrix (#4474) * Update azure-pipelines.yml * Update azure-pipelines.yml --- azure-pipelines.yml | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000000..03c8306c06ab --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,54 @@ +jobs: +- job: 'mac' + pool: + vmImage: $[variables.vmImage] + strategy: + matrix: + Python27-macOS1013: + python.version: '2.7' + TOXENV: py27 + vmImage: 'macOS-10.13' + MACOS_VERSION: '10.13' + Python37-macOS1013: + python.version: '3.7' + TOXENV: py37 + vmImage: 'macOS-10.13' + MACOS_VERSION: '10.13' + Python27-macOS1014: + python.version: '2.7' + TOXENV: py27 + vmImage: 'macOS-10.14' + MACOS_VERSION: '10.14' + Python37-macOS1014: + python.version: '3.7' + TOXENV: py37 + vmImage: 'macOS-10.14' + MACOS_VERSION: '10.14' + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(python.version)' + architecture: 'x64' + + - script: brew install openssl@1.1 + displayName: 'Install OpenSSL' + + - script: pip install tox codecov + displayName: 'Install tox & codecov' + + - script: git clone https://github.com/google/wycheproof + displayName: 'Clone wycheproof' + + - script: | + set -e + set -x + + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ + LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ + CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ + tox -r -- --color=yes --wycheproof-root=wycheproof + displayName: 'Run tests' + + - script: codecov -e MACOS_VERSION,AGENT_OS,TOXENV + displayName: 'Submit coverage' + condition: succeeded() From 0fa09311e06c63ef6c5db3b923dde8d624e7f606 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 3 May 2019 22:41:48 -0400 Subject: [PATCH 624/988] Add the start of an azure pipeline for building macOS wheels (#4867) * Add the start of an azure pipeline for building macOS wheels * Split this into multiple lines * No display name on upload * Be verbose when building OpenSSL * We don't need to reinstall * Bash correctly * Use a virtualenv * Do more things in the venv * Fix order of commands * fixed pip command * Give uploads a name * Fixed key name * fixed regex and escaping * Crazy shenangins * sudo * Don't install enum34 on python3 * Fix for python2.7 * logging to the request * Use curl correctly --- .azure-pipelines/macos-wheels.yml | 68 +++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 .azure-pipelines/macos-wheels.yml diff --git a/.azure-pipelines/macos-wheels.yml b/.azure-pipelines/macos-wheels.yml new file mode 100644 index 000000000000..7770757d5d92 --- /dev/null +++ b/.azure-pipelines/macos-wheels.yml @@ -0,0 +1,68 @@ +trigger: none +pr: none + +jobs: + - job: 'mac' + pool: + vmImage: 'macOS-10.14' + strategy: + matrix: + Python27: + python.version: '2.7' + PYTHON_DOWNLOAD_URL: "https://www.python.org/ftp/python/2.7.16/python-2.7.16-macosx10.6.pkg" + PYTHON_BIN_PATH: /Library/Frameworks/Python.framework/Versions/2.7/bin/python + Python3: + python.version: '3.4' + PYTHON_DOWNLOAD_URL: "https://www.python.org/ftp/python/3.7.3/python-3.7.3-macosx10.6.pkg" + PYTHON_BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 + steps: + - script: | + set -e + set -x + + curl "$PYTHON_DOWNLOAD_URL" -o python.pkg + sudo installer -pkg python.pkg -target / + displayName: Download and install Python + + - script: brew update + displayName: Update brew + - script: brew install openssl@1.1 + displayName: Install OpenSSL with brew + + - script: $PYTHON_BIN_PATH -m pip install -U virtualenv + displayName: Install virtualenv + - script: $PYTHON_BIN_PATH -m virtualenv .venv + displayName: Create virtualenv + - script: .venv/bin/pip install -U wheel + displayName: Update wheel to the latest version + - script: .venv/bin/pip install cffi six idna asn1crypto ipaddress "enum34; python_version < '3'" + displayName: Install our Python dependencies + + - script: | + set -e + set -x + + REGEX="3\.([0-9])*" + if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then + PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" + fi + + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ + LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ + CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ + .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API + displayName: Build the wheel + - script: .venv/bin/pip install --no-index -f wheelhouse cryptography + displayName: Test installing the wheel + - script: | + .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + displayName: Print the OpenSSL we built and linked against + - script: otool -L `find .venv -name '_openssl*.so'` + displayName: Print everything we link against + - script: lipo -info `find .venv -name '*.so'` + displayName: Print the architectures in our fat mach-o binary + - script: otool -L `find .venv -name '_openssl*.so'` | grep -vG "libcrypto\\|libssl" + displayName: Verify that we did not link against OpenSSL + + - upload: wheelhouse/ + artifact: cryptography-python$(python.version) From 020f6534b9170d217b97afe861ebc4790f03aaa4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 3 May 2019 23:35:49 -0400 Subject: [PATCH 625/988] azure badge (#4869) --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index f680dd04a413..140b374e5a91 100644 --- a/README.rst +++ b/README.rst @@ -12,6 +12,9 @@ pyca/cryptography .. image:: https://travis-ci.org/pyca/cryptography.svg?branch=master :target: https://travis-ci.org/pyca/cryptography +.. image:: https://dev.azure.com/pyca/cryptography/_apis/build/status/Azure%20CI?branchName=master + :target: https://dev.azure.com/pyca/cryptography/_build/latest?definitionId=3&branchName=master + .. image:: https://codecov.io/github/pyca/cryptography/coverage.svg?branch=master :target: https://codecov.io/github/pyca/cryptography?branch=master From b5e34e499042a0dce3d60da89169b006fb5cae26 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 4 May 2019 12:15:44 -0400 Subject: [PATCH 626/988] Set a timeout for linkcheck (#4870) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index e57e133ede32..75fa9fe17a40 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -178,6 +178,8 @@ # transient network errors. linkcheck_retries = 10 +linkcheck_timeout = 5 + linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL r"https://info.isl.ntt.co.jp/crypt/eng/camellia/", From 81233de59df126c8b21f359661f3204924c9d67b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 4 May 2019 13:34:29 -0400 Subject: [PATCH 627/988] fix from_issuer_subject_key_identifier to take the right type (#4864) * fix from_issuer_subject_key_identifier to take the right type deprecate passing the old Extension wrapper object * don't use a try:except: * hilarious contortions to satisfy doc8 --- CHANGELOG.rst | 9 ++++++++- src/cryptography/utils.py | 1 + src/cryptography/x509/extensions.py | 16 +++++++++++++++- tests/x509/test_x509_ext.py | 11 +++++++++-- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d6b3ac28ae30..df1a1fea1630 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,7 +16,14 @@ Changelog when using OpenSSL 1.1.1 or newer. * Support serialization with ``Encoding.OpenSSH`` and ``PublicFormat.OpenSSH`` in - :meth:`Ed25519PublicKey.public_bytes `. + :meth:`Ed25519PublicKey.public_bytes + ` + . +* Correctly allow passing a ``SubjectKeyIdentifier`` to + :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier` + and deprecate passing an ``Extension`` object. The documentation always + required ``SubjectKeyIdentifier`` but the implementation previously + required an ``Extension``. .. _v2-6-1: diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 18c2ab3bc20a..0b36f6370e21 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -23,6 +23,7 @@ class CryptographyDeprecationWarning(UserWarning): PersistentlyDeprecated2017 = CryptographyDeprecationWarning PersistentlyDeprecated2018 = CryptographyDeprecationWarning DeprecatedIn25 = CryptographyDeprecationWarning +DeprecatedIn27 = CryptographyDeprecationWarning def _check_bytes(name, value): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index e64e09c56fcb..d25131b8860c 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -8,6 +8,7 @@ import datetime import hashlib import ipaddress +import warnings from enum import Enum from asn1crypto.keys import PublicKeyInfo @@ -188,8 +189,21 @@ def from_issuer_public_key(cls, public_key): @classmethod def from_issuer_subject_key_identifier(cls, ski): + if isinstance(ski, SubjectKeyIdentifier): + digest = ski.digest + else: + digest = ski.value.digest + warnings.warn( + "Extension objects are deprecated as arguments to " + "from_issuer_subject_key_identifier and support will be " + "removed soon. Please migrate to passing a " + "SubjectKeyIdentifier directly.", + utils.DeprecatedIn27, + stacklevel=2, + ) + return cls( - key_identifier=ski.value.digest, + key_identifier=digest, authority_cert_issuer=None, authority_cert_serial_number=None ) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index ec618d9a1841..654bd13b267a 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -3196,11 +3196,18 @@ def test_from_issuer_subject_key_identifier(self, backend): ext = cert.extensions.get_extension_for_oid( ExtensionOID.AUTHORITY_KEY_IDENTIFIER ) - ski = issuer_cert.extensions.get_extension_for_class( + ski_ext = issuer_cert.extensions.get_extension_for_class( x509.SubjectKeyIdentifier ) + # This was the incorrect arg we want to deprecate and remove + with pytest.warns(utils.CryptographyDeprecationWarning): + aki = x509.AuthorityKeyIdentifier.\ + from_issuer_subject_key_identifier(ski_ext) + assert ext.value == aki + + # Here's what we actually documented and want to do aki = x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier( - ski + ski_ext.value ) assert ext.value == aki From 6ec71fd04502e3fa43183fa8ecb0916e8fb3a1fd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 4 May 2019 14:42:28 -0400 Subject: [PATCH 628/988] add RSA PSS certificate (#4865) * add RSA PSS certificate * i still maintain that 257 is slightly better than 256 --- docs/development/test-vectors.rst | 1 + .../x509/custom/rsa_pss.pem | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/custom/rsa_pss.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 32d387183681..a34de3930618 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -390,6 +390,7 @@ Custom X.509 Vectors several of the PKCS12 custom vectors. * ``negative_serial.pem`` - A certificate with a serial number that is a negative number. +* ``rsa_pss.pem`` - A certificate with an RSA PSS signature. Custom X.509 Request Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/custom/rsa_pss.pem b/vectors/cryptography_vectors/x509/custom/rsa_pss.pem new file mode 100644 index 000000000000..cdbc34d5cbb3 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/rsa_pss.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDLTCCAhWgAwIBAgIUCD6ZpVYd5vCgzRh5ZIqYupE2VKIwDQYJKoZIhvcNAQEK +MAAwJTESMBAGA1UECgwJYm9vdHN0cmFwMQ8wDQYDVQQDDAZyb290Y2EwHhcNMTYw +MTAxMDAwMDAwWhcNNDAwMTAxMDAwMDAwWjAlMRIwEAYDVQQKDAlib290c3RyYXAx +DzANBgNVBAMMBnJvb3RjYTCCAVYwQQYJKoZIhvcNAQEKMDSgDzANBglghkgBZQME +AgEFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgEFAKIDAgEgA4IBDwAwggEK +AoIBAQCuXwLURTDREKWTeBxUQWQvj/hDVc0+PruZtBF5voNAZCjKSOKHFLasmCDw +JuEHjj7ZHDF1JWZVGUbz3p5P+TiFmO/c1Wgb5IyAxdiDUGZvSVX3uC/X8EG/1MQz +bwcDpqiadoIjL59jUJ0g2BJnx81NvpNgpe0rmK7aU52sPKJme31Ttd/lO8VJ3Mps +lzpH0qzDJEcE3+lBF+AOJf2XDbPTFlbuPvDZHE5tVmdYC2IOad8U0Q/FLOhpMFOX +j0n6tKf+Z14+7+xu7RV3gj/NMm0CXWG3ibTSOSrbyvreI0dHgZL57RdqCSE9scjA +/1tD0a7UINhPBDZc6HaUqQUsQCPhAgMBAAGjITAfMB0GA1UdDgQWBBSpiALqV+wo +zwcvMEvwYFLKe/vDPzANBgkqhkiG9w0BAQowAAOCAQEAEdp7sFyQA9g3Vk1KsrAB +UFKqEe1a0azE4TRz2SRktRCswgv7iae0CiBGtPrzBNS6MlketixTfF1npEi7wuDn +/00XRdgHCBIRGvemATx8oSP4qVrHUud2y/DLZOZBGYiasSHHgybsnikFZppGFp7m +1D3Tti+GEsaANwRH5GW7h8f9hTMluwXlnNwyT/83yKq9Uih0eFEWHtf8hFswpCEK +4swEBwBHUiCZs1O702H36xEnoayOWnIWAkV8ZccEjfbCHs+rnU+nGI5UfXg86VRb +9iqcII7xyzPxb/HZRBusI9Uu/xiiqLjWqmx/ZMeadhiQndCoOj2yR8YT+G1BqcLa +pA== +-----END CERTIFICATE----- From ef0ed84180f9247e7cf2402b780536c359c4778e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 May 2019 18:49:44 -0400 Subject: [PATCH 629/988] Replace debian wheezy with ubuntu trusty (#4871) * Try running tests without wheezy * Added a trusty builder * Update our supported versions in docs --- .travis.yml | 6 +++--- docs/installation.rst | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 760f97b94ee1..930f6ea16bff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,9 +65,6 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7 - - python: 2.7 - services: docker - env: TOXENV=py27 DOCKER=pyca/cryptography-runner-wheezy - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-jessie @@ -86,6 +83,9 @@ matrix: - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-sid + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-trusty - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling diff --git a/docs/installation.rst b/docs/installation.rst index 5b2854d96b87..65d24da5f054 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -14,9 +14,9 @@ Currently we test ``cryptography`` on Python 2.7, 3.4+, and PyPy 5.4+ on these operating systems. * x86-64 CentOS 7.x -* macOS 10.12 Sierra, 10.11 El Capitan +* macOS 10.12 Sierra, 10.10 Yosemite * x86-64 Ubuntu 14.04, 16.04, and rolling -* x86-64 Debian Wheezy (7.x), Jessie (8.x), Stretch (9.x), and Sid (unstable) +* x86-64 Debian Jessie (8.x), Stretch (9.x), Buster (10.x), and Sid (unstable) * x86-64 Alpine (latest) * 32-bit and 64-bit Python on 64-bit Windows Server 2012 From a4d272a54e85bdca8f9dfdea9c03b16a701e1a93 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 May 2019 22:02:24 -0400 Subject: [PATCH 630/988] Rename macos-wheels.yml to wheel-builder.yml (#4872) --- .azure-pipelines/{macos-wheels.yml => wheel-builder.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .azure-pipelines/{macos-wheels.yml => wheel-builder.yml} (100%) diff --git a/.azure-pipelines/macos-wheels.yml b/.azure-pipelines/wheel-builder.yml similarity index 100% rename from .azure-pipelines/macos-wheels.yml rename to .azure-pipelines/wheel-builder.yml From acada96664f0b226b8fa3e7192eb0d008367e1f1 Mon Sep 17 00:00:00 2001 From: Dominic Chen <1108560+ddcc@users.noreply.github.com> Date: Mon, 6 May 2019 07:47:02 -0400 Subject: [PATCH 631/988] add BIO_free_all (#4874) --- src/_cffi_src/openssl/bio.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index d65775a09c0e..0e6cb38c5afc 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -15,6 +15,7 @@ FUNCTIONS = """ int BIO_free(BIO *); +void BIO_free_all(BIO *); BIO *BIO_new_file(const char *, const char *); BIO *BIO_new_dgram(int, int); size_t BIO_ctrl_pending(BIO *); From 305eb9a7d51824d0e98089521b63a2513282dbef Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 6 May 2019 13:50:00 -0400 Subject: [PATCH 632/988] only build tags, *.x branches, master, and PRs (#4875) no alex-patch-* :P --- azure-pipelines.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 03c8306c06ab..75b012a86d59 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,3 +1,12 @@ +trigger: + branches: + include: + - "master" + - "*.x" + tags: + include: + - "*" + jobs: - job: 'mac' pool: @@ -42,7 +51,7 @@ jobs: - script: | set -e set -x - + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ From 5a4d26e597933458053c4d1489528e2f48954448 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 6 May 2019 20:44:20 -0400 Subject: [PATCH 633/988] passthrough PYTHONIOENCODING in tox (#4876) this will fix issues in py27 in windows docker containers when running tox for our future glorious CI --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index d4c3022bc12e..45df87229d50 100644 --- a/tox.ini +++ b/tox.ini @@ -10,7 +10,7 @@ deps = # This must be kept in sync with Jenkinsfile and .travis/install.sh coverage ./vectors -passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME +passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING commands = pip list # We use parallel mode and then combine here so that coverage.py will take From a7e09d8b4f7c25fec4e270d9549dff521648ca3c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 6 May 2019 20:48:51 -0400 Subject: [PATCH 634/988] Add manylinux1 wheel builder to azure (#4873) * Add manylinux1 wheel builder to azure * ? * Drop 32-bit manylinux1 * cleanup * fix * Run as root * fix? * Do it in a venv * typo * Added an extra step * For debugging * Fix * computers are stupid * gibberish * fix? --- .azure-pipelines/wheel-builder.yml | 57 ++++++++++++++++++++++++++++-- CHANGELOG.rst | 2 ++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 7770757d5d92..1507b4b4f8ba 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -2,7 +2,7 @@ trigger: none pr: none jobs: - - job: 'mac' + - job: 'macOS' pool: vmImage: 'macOS-10.14' strategy: @@ -65,4 +65,57 @@ jobs: displayName: Verify that we did not link against OpenSSL - upload: wheelhouse/ - artifact: cryptography-python$(python.version) + artifact: cryptography-macos-python$(python.version) + + - job: 'manylinux1' + pool: + vmImage: 'ubuntu-16.04' + container: 'pyca/cryptography-manylinux1:x86_64' + strategy: + matrix: + Python27m: + PYTHON_VERSION: 'cp27-cp27m' + Python27mu: + PYTHON_VERSION: 'cp27-cp27mu' + Python3m: + PYTHON_VERSION: 'cp34-cp34m' + steps: + - script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv + displayName: Create virtualenv + - script: .venv/bin/pip install cffi six idna asn1crypto ipaddress enum34 + displayName: Install our Python dependencies + - script: | + set -e + set -x + + REGEX="cp3([0-9])*" + if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then + PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" + fi + LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ + CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ + .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API + displayName: Build the wheel + - script: auditwheel repair tmpwheelhouse/cryptograph*.whl -w wheelhouse/ + displayName: Run auditwheel + - script: unzip wheelhouse/*.whl -d execstack.check + displayName: Unzip the wheel + - script: | + set -e + set -x + + results=$(execstack execstack.check/cryptography/hazmat/bindings/*.so) + count=$(echo "$results" | grep -c '^X' || true) + if [ "$count" -ne 0 ]; then + exit 1 + else + exit 0 + fi + displayName: Run execstack on the wheel + - script: .venv/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ + displayName: Test installing the wheel + - script: | + .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + displayName: Print the OpenSSL we built and linked against + - upload: wheelhouse/ + artifact: cryptography-manylinux1-$(PYTHON_VERSION) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index df1a1fea1630..76e7a52afa20 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** We no longer distribute 32-bit ``manylinux1`` + wheels. Continuing to produce them was a maintenance burden. * **BACKWARDS INCOMPATIBLE:** Removed the ``cryptography.hazmat.primitives.mac.MACContext`` interface. The ``CMAC`` and ``HMAC`` APIs have not changed, but they are no longer registered as From ab115a9d1953f4e71be818b614beba96fd96df22 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 7 May 2019 15:52:49 -0400 Subject: [PATCH 635/988] Drop setup.py test support. (#4879) * Drop setup.py test support. It's fragile and relies on eggs. While our downstream redistributors don't love this (sorry!), it seems like the right tradeoff. * Remove unused * Added a changelog entry * typo * line length --- CHANGELOG.rst | 3 +++ Jenkinsfile | 23 ------------------ setup.py | 64 ++++++--------------------------------------------- 3 files changed, 10 insertions(+), 80 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 76e7a52afa20..92050d275218 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,9 @@ Changelog ``cryptography.hazmat.primitives.mac.MACContext`` interface. The ``CMAC`` and ``HMAC`` APIs have not changed, but they are no longer registered as ``MACContext`` instances. +* Removed support for running our tests with ``setup.py test``. Users + interested in running our tests can continue to follow the directions in our + :doc:`development documentation`. * Add support for :class:`~cryptography.hazmat.primitives.poly1305.Poly1305` when using OpenSSL 1.1.1 or newer. * Support serialization with ``Encoding.OpenSSH`` and ``PublicFormat.OpenSSH`` diff --git a/Jenkinsfile b/Jenkinsfile index 14a1ed7fd37c..e44757417ff8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -221,27 +221,4 @@ for (config in configs) { } } -/* Add the python setup.py test builder */ -builders["setup.py-test"] = { - node("docker") { - stage("python setup.py test") { - docker.image("pyca/cryptography-runner-ubuntu-rolling").inside { - try { - checkout_git("docker") - sh """#!/usr/bin/env bash - set -xe - cd cryptography - virtualenv .venv - source .venv/bin/activate - python setup.py test - """ - } finally { - deleteDir() - } - - } - } - } -} - parallel builders diff --git a/setup.py b/setup.py index 482ec596937a..bf560dd9de6a 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,6 @@ import os import platform -import subprocess import sys from distutils.command.build import build @@ -17,7 +16,6 @@ import setuptools from setuptools import find_packages, setup from setuptools.command.install import install -from setuptools.command.test import test if ( @@ -41,8 +39,6 @@ exec(f.read(), about) -VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__']) - # `setup_requirements` must be kept in sync with `pyproject.toml` setup_requirements = ["cffi>=1.8,!=1.11.3"] @@ -53,42 +49,6 @@ "PyPy to use this library." ) -test_requirements = [ - "pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2", - "pretend", - "iso8601", - "pytz", - "hypothesis>=1.11.4,!=3.79.2", -] - - -# If there's no vectors locally that probably means we are in a tarball and -# need to go and get the matching vectors package from PyPi -if not os.path.exists(os.path.join(base_dir, "vectors/setup.py")): - test_requirements.append(VECTORS_DEPENDENCY) - - -class PyTest(test): - def finalize_options(self): - test.finalize_options(self) - self.test_args = [] - self.test_suite = True - - # This means there's a vectors/ folder with the package in here. - # cd into it, install the vectors package and then refresh sys.path - if VECTORS_DEPENDENCY not in test_requirements: - subprocess.check_call( - [sys.executable, "setup.py", "install"], cwd="vectors" - ) - pkg_resources.get_distribution("cryptography_vectors").activate() - - def run_tests(self): - # Import here because in module scope the eggs are not loaded. - import pytest - test_args = [os.path.join(base_dir, "tests")] - errno = pytest.main(test_args) - sys.exit(errno) - def keywords_with_side_effects(argv): """ @@ -183,7 +143,6 @@ def argument_without_setup_requirements(argv, i): "cmdclass": { "build": DummyBuild, "install": DummyInstall, - "test": DummyPyTest, } } else: @@ -195,9 +154,6 @@ def argument_without_setup_requirements(argv, i): return { "setup_requires": setup_requirements, - "cmdclass": { - "test": PyTest, - }, "cffi_modules": cffi_modules } @@ -229,17 +185,6 @@ def run(self): raise RuntimeError(setup_requires_error) -class DummyPyTest(test): - """ - This class makes it very obvious when ``keywords_with_side_effects()`` has - incorrectly interpreted the command line arguments to ``setup.py test`` as - one of the 'side effect free' commands or options. - """ - - def run_tests(self): - raise RuntimeError(setup_requires_error) - - with open(os.path.join(base_dir, "README.rst")) as f: long_description = f.read() @@ -291,11 +236,16 @@ def run_tests(self): "asn1crypto >= 0.21.0", "six >= 1.4.1", ] + setup_requirements, - tests_require=test_requirements, extras_require={ ":python_version < '3'": ["enum34", "ipaddress"], - "test": test_requirements, + "test": [ + "pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2", + "pretend", + "iso8601", + "pytz", + "hypothesis>=1.11.4,!=3.79.2", + ], "docs": [ "sphinx >= 1.6.5,!=1.8.0", "sphinx_rtd_theme", From 630b0062976d57d84532b090fb6359abf4af82b6 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 8 May 2019 14:44:25 -0400 Subject: [PATCH 636/988] Use a different azure task for uploading and stop installing idna (#4882) --- .azure-pipelines/wheel-builder.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 1507b4b4f8ba..1504aae72636 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -35,7 +35,7 @@ jobs: displayName: Create virtualenv - script: .venv/bin/pip install -U wheel displayName: Update wheel to the latest version - - script: .venv/bin/pip install cffi six idna asn1crypto ipaddress "enum34; python_version < '3'" + - script: .venv/bin/pip install cffi six asn1crypto ipaddress "enum34; python_version < '3'" displayName: Install our Python dependencies - script: | @@ -64,8 +64,10 @@ jobs: - script: otool -L `find .venv -name '_openssl*.so'` | grep -vG "libcrypto\\|libssl" displayName: Verify that we did not link against OpenSSL - - upload: wheelhouse/ - artifact: cryptography-macos-python$(python.version) + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: wheelhouse/ + artifactName: cryptography-macos-python$(python.version) - job: 'manylinux1' pool: @@ -82,7 +84,7 @@ jobs: steps: - script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv displayName: Create virtualenv - - script: .venv/bin/pip install cffi six idna asn1crypto ipaddress enum34 + - script: .venv/bin/pip install cffi six asn1crypto ipaddress enum34 displayName: Install our Python dependencies - script: | set -e @@ -117,5 +119,7 @@ jobs: - script: | .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" displayName: Print the OpenSSL we built and linked against - - upload: wheelhouse/ - artifact: cryptography-manylinux1-$(PYTHON_VERSION) + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: wheelhouse/ + artifactName: cryptography-manylinux1-$(PYTHON_VERSION) From fccbfc0fb97485f27f271fdccc60a7e8a01dc771 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 8 May 2019 18:29:42 -0400 Subject: [PATCH 637/988] test py27 with windows container on azure (#4880) * test py27 with windows container on azure * refactor a bit * oops missed this * show me some autocrlf * wat * add a gitattributes to force LF endings. can't use autocrlf false because we don't control the git clone in azure * remove thing we don't need * more things --- .gitattributes | 1 + azure-pipelines.yml | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..dab8975ebb06 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pem text eol=lf diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 75b012a86d59..c068f1c1ff79 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -61,3 +61,38 @@ jobs: - script: codecov -e MACOS_VERSION,AGENT_OS,TOXENV displayName: 'Submit coverage' condition: succeeded() +- job: 'win' + pool: + vmImage: 'windows-2019' + container: $[variables.containerImage] + strategy: + matrix: + Python27-x86: + TOXENV: py27 + containerImage: 'pyca/cryptography-runner-windows:py27-x86' + OPENSSL_DIR: 'OpenSSL-Win32-2010' + PYTHON_DIR: 'Python27' + WINDOWS_ARCH: 'x86' + Python27-x86-64: + TOXENV: py27 + containerImage: 'pyca/cryptography-runner-windows:py27-x86_64' + OPENSSL_DIR: 'OpenSSL-Win64-2010' + PYTHON_DIR: 'Python27' + WINDOWS_ARCH: 'x86_64' + steps: + - script: C:/%PYTHON_DIR%/Scripts/pip install codecov + displayName: 'Install codecov' + + - script: git clone https://github.com/google/wycheproof + displayName: 'Clone wycheproof' + + - script: | + set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% + set LIB=C:/%OPENSSL_DIR%/lib;%LIB% + C:/%PYTHON_DIR%/Scripts/tox -r -- --color=yes --wycheproof-root=wycheproof + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + displayName: 'Run tests' + + - script: C:/%PYTHON_DIR%/Scripts/codecov -e AGENT_OS,TOXENV,WINDOWS_ARCH + displayName: 'Submit coverage' + condition: succeeded() From ea4d1ee3fa6c052aa0ef4af9b2be6d6aabdd852b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 9 May 2019 19:11:21 -0400 Subject: [PATCH 638/988] Order the elements in reviewing patches reasonably (#4883) --- docs/development/reviewing-patches.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/development/reviewing-patches.rst b/docs/development/reviewing-patches.rst index bd3ee96ac84d..084461830be3 100644 --- a/docs/development/reviewing-patches.rst +++ b/docs/development/reviewing-patches.rst @@ -7,18 +7,18 @@ review is our opportunity to share knowledge, design ideas and make friends. When reviewing a patch try to keep each of these concepts in mind: -Architecture ------------- - -* Is the proposed change being made in the correct place? Is it a fix in a - backend when it should be in the primitives? - Intent ------ * What is the change being proposed? * Do we want this feature or is the bug they're fixing really a bug? +Architecture +------------ + +* Is the proposed change being made in the correct place? Is it a fix in a + backend when it should be in the primitives? + Implementation -------------- From 857d401f3c5d158e5c53ec891d73849bf114c89b Mon Sep 17 00:00:00 2001 From: "Stephen.Y" Date: Sat, 11 May 2019 05:08:06 +0800 Subject: [PATCH 639/988] Fix typo in docs hazmat Ed448 (#4886) --- docs/hazmat/primitives/asymmetric/ed448.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/asymmetric/ed448.rst b/docs/hazmat/primitives/asymmetric/ed448.rst index a4f37e5d8d43..fb79dcb61ba3 100644 --- a/docs/hazmat/primitives/asymmetric/ed448.rst +++ b/docs/hazmat/primitives/asymmetric/ed448.rst @@ -49,7 +49,7 @@ Key interfaces :param bytes data: The data to sign. - :returns bytes: The 64 byte signature. + :returns bytes: The 114 byte signature. .. method:: private_bytes(encoding, format, encryption_algorithm) From 97af501780534065739a251dc6bafd74b6bf7f19 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 May 2019 09:04:37 -0400 Subject: [PATCH 640/988] use a random key for these tests (#4887) Using an all 0 key causes failures in OpenSSL master (and Fedora has cherry-picked the commit that causes it). The change requires that the key/tweak for XTS mode not be the same value, so let's just use a random key. --- tests/hazmat/primitives/test_aes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index f083f31978ee..565cc11dd4df 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -490,7 +490,7 @@ def test_buffer_protocol(self, backend): def test_buffer_protocol_alternate_modes(mode, backend): data = bytearray(b"sixteen_byte_msg") cipher = base.Cipher( - algorithms.AES(bytearray(b"\x00" * 32)), mode, backend + algorithms.AES(bytearray(os.urandom(32))), mode, backend ) enc = cipher.encryptor() ct = enc.update(data) + enc.finalize() From 9a22851fab924fd58482fdad3f8dd23dc3987f91 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 May 2019 16:37:54 -0400 Subject: [PATCH 641/988] fix aia encoding memory leak (#4889) * fix aia encoding memory leak * don't return anything from the prealloc func --- .../hazmat/backends/openssl/encode_asn1.py | 27 +++++---- tests/hazmat/backends/test_openssl_memleak.py | 60 +++++++++++++++++++ 2 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 61cfd14de0f9..a774daa788b6 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -345,16 +345,22 @@ def _encode_authority_information_access(backend, authority_info_access): aia = backend._lib.sk_ACCESS_DESCRIPTION_new_null() backend.openssl_assert(aia != backend._ffi.NULL) aia = backend._ffi.gc( - aia, backend._lib.sk_ACCESS_DESCRIPTION_free + aia, + lambda x: backend._lib.sk_ACCESS_DESCRIPTION_pop_free( + x, backend._ffi.addressof( + backend._lib._original_lib, "ACCESS_DESCRIPTION_free" + ) + ) ) for access_description in authority_info_access: ad = backend._lib.ACCESS_DESCRIPTION_new() method = _txt2obj( backend, access_description.access_method.dotted_string ) - gn = _encode_general_name(backend, access_description.access_location) + _encode_general_name_preallocated( + backend, access_description.access_location, ad.location + ) ad.method = method - ad.location = gn res = backend._lib.sk_ACCESS_DESCRIPTION_push(aia, ad) backend.openssl_assert(res >= 1) @@ -385,8 +391,13 @@ def _encode_subject_key_identifier(backend, ski): def _encode_general_name(backend, name): + gn = backend._lib.GENERAL_NAME_new() + _encode_general_name_preallocated(backend, name, gn) + return gn + + +def _encode_general_name_preallocated(backend, name, gn): if isinstance(name, x509.DNSName): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) gn.type = backend._lib.GEN_DNS @@ -400,7 +411,6 @@ def _encode_general_name(backend, name): backend.openssl_assert(res == 1) gn.d.dNSName = ia5 elif isinstance(name, x509.RegisteredID): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) gn.type = backend._lib.GEN_RID obj = backend._lib.OBJ_txt2obj( @@ -409,13 +419,11 @@ def _encode_general_name(backend, name): backend.openssl_assert(obj != backend._ffi.NULL) gn.d.registeredID = obj elif isinstance(name, x509.DirectoryName): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) dir_name = _encode_name(backend, name.value) gn.type = backend._lib.GEN_DIRNAME gn.d.directoryName = dir_name elif isinstance(name, x509.IPAddress): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) if isinstance(name.value, ipaddress.IPv4Network): packed = ( @@ -433,7 +441,6 @@ def _encode_general_name(backend, name): gn.type = backend._lib.GEN_IPADD gn.d.iPAddress = ipaddr elif isinstance(name, x509.OtherName): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) other_name = backend._lib.OTHERNAME_new() backend.openssl_assert(other_name != backend._ffi.NULL) @@ -456,7 +463,6 @@ def _encode_general_name(backend, name): gn.type = backend._lib.GEN_OTHERNAME gn.d.otherName = other_name elif isinstance(name, x509.RFC822Name): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) # ia5strings are supposed to be ITU T.50 but to allow round-tripping # of broken certs that encode utf8 we'll encode utf8 here too. @@ -465,7 +471,6 @@ def _encode_general_name(backend, name): gn.type = backend._lib.GEN_EMAIL gn.d.rfc822Name = asn1_str elif isinstance(name, x509.UniformResourceIdentifier): - gn = backend._lib.GENERAL_NAME_new() backend.openssl_assert(gn != backend._ffi.NULL) # ia5strings are supposed to be ITU T.50 but to allow round-tripping # of broken certs that encode utf8 we'll encode utf8 here too. @@ -478,8 +483,6 @@ def _encode_general_name(backend, name): "{} is an unknown GeneralName type".format(name) ) - return gn - def _encode_extended_key_usage(backend, extended_key_usage): eku = backend._lib.sk_ASN1_OBJECT_new_null() diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index f9ae1c46b9a6..935ea3dfe319 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -389,3 +389,63 @@ def func(): x509.IssuingDistributionPoint ) """)) + + def test_create_certificate_with_extensions(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + import datetime + + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives.asymmetric import ec + from cryptography.x509.oid import ( + AuthorityInformationAccessOID, ExtendedKeyUsageOID, NameOID + ) + + private_key = ec.generate_private_key(ec.SECP256R1(), backend) + + not_valid_before = datetime.datetime.now() + not_valid_after = not_valid_before + datetime.timedelta(days=365) + + aia = x509.AuthorityInformationAccess([ + x509.AccessDescription( + AuthorityInformationAccessOID.OCSP, + x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + ), + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") + ) + ]) + sans = [u'*.example.org', u'foobar.example.net'] + san = x509.SubjectAlternativeName(list(map(x509.DNSName, sans))) + + ski = x509.SubjectKeyIdentifier.from_public_key( + private_key.public_key() + ) + eku = x509.ExtendedKeyUsage([ + ExtendedKeyUsageOID.CLIENT_AUTH, + ExtendedKeyUsageOID.SERVER_AUTH, + ExtendedKeyUsageOID.CODE_SIGNING, + ]) + + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + private_key.public_key() + ).add_extension( + aia, critical=False + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + cert = builder.sign(private_key, hashes.SHA256(), backend) + cert.extensions + """)) From 347351f5b6cef7fbaa33ab8c7a72999deed9de26 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Sun, 19 May 2019 05:54:37 -0700 Subject: [PATCH 642/988] add name for ExtensionOID.PRECERT_POISON (#4853) * test: ensure all public members of ExtensionOID have names defined * add name for ExtensionOID.PRECERT_POISON ref: https://github.com/google/certificate-transparency/blob/5fce65cb60cfe7808afc98de23c7dd5ddbfa1509/python/ct/crypto/asn1/oid.py#L338 --- src/cryptography/x509/oid.py | 1 + tests/x509/test_x509_ext.py | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index ec19007fe322..1bfe58cabad7 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -196,6 +196,7 @@ class CertificatePoliciesOID(object): ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: ( "signedCertificateTimestampList" ), + ExtensionOID.PRECERT_POISON: "ctPoison", CRLEntryExtensionOID.CRL_REASON: "cRLReason", CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate", CRLEntryExtensionOID.CERTIFICATE_ISSUER: "certificateIssuer", diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 654bd13b267a..6a64e4aa5a34 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -23,7 +23,7 @@ from cryptography.x509.general_name import _lazy_import_idna from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, - NameOID, ObjectIdentifier + NameOID, ObjectIdentifier, _OID_NAMES ) from .test_x509 import _load_cert @@ -5215,3 +5215,10 @@ def test_hash(self): nonce3 = x509.OCSPNonce(b"1" * 5) assert hash(nonce1) == hash(nonce2) assert hash(nonce1) != hash(nonce3) + + +def test_all_extension_oid_members_have_names_defined(): + for oid in dir(ExtensionOID): + if oid[:2] == '__': + continue + assert getattr(ExtensionOID, oid) in _OID_NAMES From 98d06e7c0814f91a6ffd06b80996814b4789ff64 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 19 May 2019 09:30:10 -0400 Subject: [PATCH 643/988] Small style cleanup (#4891) --- tests/x509/test_x509_ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 6a64e4aa5a34..11e352071a9b 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -5219,6 +5219,6 @@ def test_hash(self): def test_all_extension_oid_members_have_names_defined(): for oid in dir(ExtensionOID): - if oid[:2] == '__': + if oid.startswith('__'): continue assert getattr(ExtensionOID, oid) in _OID_NAMES From 551abfadc9e9375daf4354c76020595ad9b34c41 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 25 May 2019 10:25:13 -0400 Subject: [PATCH 644/988] we don't have these mac builders any more (#4892) * we don't have these mac builders any more let's see if we get coverage from azure like we should! * remove a branch we can't cover in tests * remove unused import --- Jenkinsfile | 8 -------- tests/hazmat/backends/test_openssl.py | 8 +------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index e44757417ff8..9fb9ad158440 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,14 +11,6 @@ def configs = [ label: 'windows64', toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], ], - [ - label: 'sierra', - toxenvs: ['py27', 'py36'], - ], - [ - label: 'yosemite', - toxenvs: ['py27'], - ], [ label: 'docker', imageName: 'pyca/cryptography-runner-sid', diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index b7c7e598e3f5..8e765dd47b62 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -10,8 +10,6 @@ import sys import textwrap -from pkg_resources import parse_version - import pytest from cryptography import x509 @@ -275,11 +273,7 @@ def test_osrandom_engine_implementation(self): if sys.platform.startswith('linux'): assert name in ['getrandom', '/dev/urandom'] if sys.platform == 'darwin': - # macOS 10.12+ supports getentropy - if parse_version(os.uname()[2]) >= parse_version("16.0"): - assert name == 'getentropy' - else: - assert name == '/dev/urandom' + assert name in ['getentropy', '/dev/urandom'] if sys.platform == 'win32': assert name == 'CryptGenRandom' From 37b9ac0c8acf769335cbff49540a13fdaeb2b9bf Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 May 2019 11:11:49 -0400 Subject: [PATCH 645/988] Update release.py to use azure for wheel building (#4878) * Initial stab at this script * Convert to the old style artifact publish * Update script based on some testing * Remove this * Adapt release.py to combine azure and jenkins wheels --- .../Jenkinsfile-cryptography-wheel-builder | 118 +----------------- dev-requirements.txt | 2 +- release.py | 109 ++++++++++++---- 3 files changed, 90 insertions(+), 139 deletions(-) diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder index 72158f3c0450..907f06e9ab37 100644 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ b/.jenkins/Jenkinsfile-cryptography-wheel-builder @@ -14,30 +14,6 @@ def configs = [ label: 'windows64', versions: ['py27', 'py34', 'py35', 'py36', 'py37'], ], - [ - label: 'sierra', - // The py3x version listed here corresponds to the minimum ABI version - // the wheels will support. e.g. py34 supports py34+ - versions: ['py27', 'py34'], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-manylinux1:i686', - // The py3x version listed here corresponds to the minimum ABI version - // the wheels will support. e.g. cp34-cp34m supports py34+ - versions: [ - 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', - ], - ], - [ - label: 'docker', - imageName: 'pyca/cryptography-manylinux1:x86_64', - // The py3x version listed here corresponds to the minimum ABI version - // the wheels will support. e.g. cp34-cp34m supports py34+ - versions: [ - 'cp27-cp27m', 'cp27-cp27mu', 'cp34-cp34m', - ], - ], ] @@ -89,73 +65,6 @@ def build(version, label, imageName) { pip install -f wheelhouse cryptography --no-index python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" """ - } else if (label.contains("sierra")) { - def pythonPath = [ - py27: "/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7", - py34: "/Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4", - ] - ansiColor { - sh """#!/usr/bin/env bash - set -xe - # output the list of things we've installed as a point in time check of how up - # to date the builder is - /usr/sbin/system_profiler SPInstallHistoryDataType - - # Jenkins logs in as a non-interactive shell, so we don't even have /usr/local/bin in PATH - export PATH="/usr/local/bin:\${PATH}" - export PATH="/Users/jenkins/.pyenv/shims:\${PATH}" - - printenv - - virtualenv .venv -p ${pythonPath[version]} - source .venv/bin/activate - pip install -U wheel # upgrade wheel to latest before we use it to build the wheel - pip install cffi six idna asn1crypto ipaddress enum34 - REGEX="py3([0-9])*" - if [[ "${version}" =~ \$REGEX ]]; then - PY_LIMITED_API="--build-option --py-limited-api=cp3\${BASH_REMATCH[1]}" - fi - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ - LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ - pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography --no-deps \$PY_LIMITED_API - pip install -f wheelhouse cryptography --no-index - python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - otool -L `find .venv -name '_openssl*.so'` - lipo -info `find .venv -name '*.so'` - otool -L `find .venv -name '_openssl*.so'` | grep -vG "libcrypto\\|libssl" - """ - } - } else if (label.contains("docker")) { - linux32 = "" - if (imageName.contains("i686")) { - linux32 = "linux32" - } - sh """#!/usr/bin/env bash - set -x -e - - $linux32 /opt/python/$version/bin/pip install cffi six idna asn1crypto ipaddress enum34 - # Because we are doing this as root in the container, but we write to a mounted dir that is outside the container - # we need to make sure we set these files writable such that the jenkins user can delete them afterwards - mkdir -p tmpwheelhouse - mkdir -p wheelhouse - chmod -R 777 tmpwheelhouse - chmod -R 777 wheelhouse - - REGEX="cp3([0-9])*" - if [[ "${version}" =~ \$REGEX ]]; then - PY_LIMITED_API="--build-option --py-limited-api=cp3\${BASH_REMATCH[1]}" - fi - LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ - CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - $linux32 /opt/python/$version/bin/pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse \$PY_LIMITED_API - $linux32 auditwheel repair tmpwheelhouse/cryptography*.whl -w wheelhouse/ - unzip wheelhouse/*.whl -d execstack.check - chmod -R 777 execstack.check - (execstack execstack.check/cryptography/hazmat/bindings/*.so | grep '^X') && exit 1 - $linux32 /opt/python/$version/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ - $linux32 /opt/python/$version/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - """ } archiveArtifacts artifacts: "wheelhouse/cryptography*.whl" } @@ -172,28 +81,11 @@ for (config in configs) { for (_version in versions) { def version = _version - - if (label.contains("docker")) { - def imageName = config["imageName"] - def combinedName = "${imageName}-${version}" - builders[combinedName] = { - node(label) { - stage(combinedName) { - def buildImage = docker.image(imageName) - buildImage.pull() - buildImage.inside("-u root") { - build(version, label, imageName) - } - } - } - } - } else { - def combinedName = "${label}-${version}" - builders[combinedName] = { - node(label) { - stage(combinedName) { - build(version, label, "") - } + def combinedName = "${label}-${version}" + builders[combinedName] = { + node(label) { + stage(combinedName) { + build(version, label, "") } } } diff --git a/dev-requirements.txt b/dev-requirements.txt index 58827ed47f35..608197391b24 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,5 @@ +azure-devops click -clint coverage requests tox >= 2.4.1 diff --git a/release.py b/release.py index d7c18d1050fd..b8269114189c 100644 --- a/release.py +++ b/release.py @@ -7,13 +7,19 @@ import getpass import glob import io +import json import os import subprocess +import tempfile import time +import zipfile + +from azure.devops.connection import Connection +from azure.devops.v5_1.build.models import Build import click -from clint.textui.progress import Bar as ProgressBar +from msrest.authentication import BasicAuthentication import requests @@ -29,7 +35,63 @@ def run(*args, **kwargs): subprocess.check_call(list(args), **kwargs) -def wait_for_build_completed(session): +def wait_for_build_completed_azure(build_client, build_id): + while True: + build = build_client.get_build("cryptography", build_id) + if build.finish_time is not None: + break + time.sleep(3) + + +def download_artifacts_azure(build_client, build_id): + artifacts = build_client.get_artifacts("cryptography", build_id) + paths = [] + for artifact in artifacts: + contents = build_client.get_artifact_content_zip( + "cryptography", build_id, artifact.name + ) + with tempfile.NamedTemporaryFile() as f: + for chunk in contents: + f.write(chunk) + f.flush() + with zipfile.ZipFile(f.name) as z: + for name in z.namelist(): + if not name.endswith(".whl"): + continue + p = z.open(name) + out_path = os.path.join( + os.path.dirname(__file__), + "dist", + os.path.basename(name), + ) + with open(out_path, "wb") as f: + f.write(p.read()) + paths.append(out_path) + return paths + + +def build_wheels_azure(version): + token = getpass.getpass("Azure personal access token: ") + credentials = BasicAuthentication("", token) + connection = Connection( + base_url="https://dev.azure.com/pyca", creds=credentials + ) + build_client = connection.clients.get_build_client() + [definition] = build_client.get_definitions( + "cryptography", "wheel builder" + ) + build_description = Build( + definition=definition, + parameters=json.dumps({"BUILD_VERSION": version}), + ) + build = build_client.queue_build( + project="cryptography", build=build_description + ) + wait_for_build_completed_azure(build_client, build.id) + return download_artifacts_azure(build_client, build.id) + + +def wait_for_build_completed_jenkins(session): # Wait 20 seconds before actually checking if the build is complete, to # ensure that it had time to really start. time.sleep(20) @@ -47,7 +109,7 @@ def wait_for_build_completed(session): time.sleep(0.1) -def download_artifacts(session): +def download_artifacts_jenkins(session): response = session.get( "{0}/lastBuild/api/json/".format(JENKINS_URL), headers={ @@ -69,16 +131,9 @@ def download_artifacts(session): ) assert response.headers["content-length"] print("Downloading {0}".format(artifact["fileName"])) - bar = ProgressBar( - expected_size=int(response.headers["content-length"]), - filled_char="=" - ) content = io.BytesIO() for data in response.iter_content(chunk_size=8192): content.write(data) - bar.show(content.tell()) - assert bar.expected_size == content.tell() - bar.done() out_path = os.path.join( os.path.dirname(__file__), "dist", @@ -90,6 +145,22 @@ def download_artifacts(session): return paths +def build_wheels_jenkins(version): + token = getpass.getpass("Input the Jenkins token: ") + session = requests.Session() + response = session.get( + "{0}/buildWithParameters".format(JENKINS_URL), + params={ + "token": token, + "BUILD_VERSION": version, + "cause": "Building wheels for {0}".format(version) + } + ) + response.raise_for_status() + wait_for_build_completed_jenkins(session) + return download_artifacts_jenkins(session) + + @click.command() @click.argument("version") def release(version): @@ -108,21 +179,9 @@ def release(version): ) run("twine", "upload", "-s", *packages) - session = requests.Session() - - token = getpass.getpass("Input the Jenkins token: ") - response = session.get( - "{0}/buildWithParameters".format(JENKINS_URL), - params={ - "token": token, - "BUILD_VERSION": version, - "cause": "Building wheels for {0}".format(version) - } - ) - response.raise_for_status() - wait_for_build_completed(session) - paths = download_artifacts(session) - run("twine", "upload", *paths) + azure_wheel_paths = build_wheels_azure(version) + jenkins_wheel_paths = build_wheels_jenkins(version) + run("twine", "upload", *(azure_wheel_paths + jenkins_wheel_paths)) if __name__ == "__main__": From eb03d29c9bfb00be68181ecd0505a9dd6cb42691 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 May 2019 11:20:10 -0400 Subject: [PATCH 646/988] Delete Jenkinsfile-Update-Homebrew-OpenSSL (#4893) --- .jenkins/Jenkinsfile-Update-Homebrew-OpenSSL | 33 -------------------- 1 file changed, 33 deletions(-) delete mode 100644 .jenkins/Jenkinsfile-Update-Homebrew-OpenSSL diff --git a/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL b/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL deleted file mode 100644 index 0617759ee6c2..000000000000 --- a/.jenkins/Jenkinsfile-Update-Homebrew-OpenSSL +++ /dev/null @@ -1,33 +0,0 @@ -def configs = ["sierra", "yosemite"] - -def _build(label) { - node(label) { - try { - timeout(time: 30, unit: 'MINUTES') { - stage("Compile") { - sh """ - set -xe - - /usr/local/bin/brew update - /usr/local/bin/brew reinstall openssl@1.1 --build-from-source - """ - } - } - } finally { - deleteDir() - } - } -} - -def builders = [:] - -for (_label in configs) { - def label = _label - builders[label] = { - _build(label) - } -} - -parallel builders - -build job: 'pyca/cryptography/master', wait: false From ff4a8788ec5b24981031c394a88f88b2f382d8c3 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 May 2019 11:36:15 -0400 Subject: [PATCH 647/988] Strip out unused paths for Jenkinsfile (#4894) This includes removing the docs-upload builder. I was the only one using it, and it will be hard to port to Azure. --- Jenkinsfile | 172 ++++++++++++++++------------------------------------ 1 file changed, 52 insertions(+), 120 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 9fb9ad158440..8a989bf1035f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,13 +11,6 @@ def configs = [ label: 'windows64', toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], ], - [ - label: 'docker', - imageName: 'pyca/cryptography-runner-sid', - toxenvs: ['docs'], - artifacts: 'cryptography/docs/_build/html/**', - artifactExcludes: '**/*.doctree', - ], ] def checkout_git(label) { @@ -54,17 +47,10 @@ def checkout_git(label) { ]) } } - if (label.contains("windows")) { - bat """ - cd cryptography - git rev-parse HEAD - """ - } else { - sh """ - cd cryptography - git rev-parse HEAD - """ - } + bat """ + cd cryptography + git rev-parse HEAD + """ } def build(toxenv, label, imageName, artifacts, artifactExcludes) { try { @@ -84,89 +70,52 @@ def build(toxenv, label, imageName, artifacts, artifactExcludes) { withCredentials([string(credentialsId: 'cryptography-codecov-token', variable: 'CODECOV_TOKEN')]) { withEnv(["LABEL=$label", "TOXENV=$toxenv", "IMAGE_NAME=$imageName"]) { - if (label.contains("windows")) { - def pythonPath = [ - py27: "C:\\Python27\\python.exe", - py34: "C:\\Python34\\python.exe", - py35: "C:\\Python35\\python.exe", - py36: "C:\\Python36\\python.exe", - py37: "C:\\Python37\\python.exe" - ] - if (toxenv == "py35" || toxenv == "py36" || toxenv == "py37") { - opensslPaths = [ - "windows": [ - "include": "C:\\OpenSSL-Win32-2015\\include", - "lib": "C:\\OpenSSL-Win32-2015\\lib" - ], - "windows64": [ - "include": "C:\\OpenSSL-Win64-2015\\include", - "lib": "C:\\OpenSSL-Win64-2015\\lib" - ] - ] - } else { - opensslPaths = [ - "windows": [ - "include": "C:\\OpenSSL-Win32-2010\\include", - "lib": "C:\\OpenSSL-Win32-2010\\lib" - ], - "windows64": [ - "include": "C:\\OpenSSL-Win64-2010\\include", - "lib": "C:\\OpenSSL-Win64-2010\\lib" - ] + def pythonPath = [ + py27: "C:\\Python27\\python.exe", + py34: "C:\\Python34\\python.exe", + py35: "C:\\Python35\\python.exe", + py36: "C:\\Python36\\python.exe", + py37: "C:\\Python37\\python.exe" + ] + if (toxenv == "py35" || toxenv == "py36" || toxenv == "py37") { + opensslPaths = [ + "windows": [ + "include": "C:\\OpenSSL-Win32-2015\\include", + "lib": "C:\\OpenSSL-Win32-2015\\lib" + ], + "windows64": [ + "include": "C:\\OpenSSL-Win64-2015\\include", + "lib": "C:\\OpenSSL-Win64-2015\\lib" ] - } - bat """ - cd cryptography - @set PATH="C:\\Python27";"C:\\Python27\\Scripts";%PATH% - @set PYTHON="${pythonPath[toxenv]}" - - @set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE% - @set LIB="${opensslPaths[label]['lib']}";%LIB% - tox -r -- --wycheproof-root=../wycheproof - IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% - virtualenv .codecov - call .codecov/Scripts/activate - REM this pin must be kept in sync with tox.ini - pip install coverage - pip install codecov - codecov -e JOB_BASE_NAME,LABEL,TOXENV - """ - } else if (label.contains("sierra") || label.contains("yosemite")) { - ansiColor { - sh """#!/usr/bin/env bash - set -xe - # Jenkins logs in as a non-interactive shell, so we don't even have /usr/local/bin in PATH - export PATH="/usr/local/bin:\${PATH}" - export PATH="/Users/jenkins/.pyenv/shims:\${PATH}" - cd cryptography - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ - LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ - tox -r -- --color=yes --wycheproof-root=../wycheproof - virtualenv .venv - source .venv/bin/activate - # This pin must be kept in sync with tox.ini - pip install coverage - bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV - """ - } + ] } else { - ansiColor { - sh """#!/usr/bin/env bash - set -xe - cd cryptography - tox -r -- --color=yes --wycheproof-root=../wycheproof - virtualenv .venv - source .venv/bin/activate - # This pin must be kept in sync with tox.ini - pip install coverage - bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME - """ - } - if (artifacts) { - archiveArtifacts artifacts: artifacts, excludes: artifactExcludes - } + opensslPaths = [ + "windows": [ + "include": "C:\\OpenSSL-Win32-2010\\include", + "lib": "C:\\OpenSSL-Win32-2010\\lib" + ], + "windows64": [ + "include": "C:\\OpenSSL-Win64-2010\\include", + "lib": "C:\\OpenSSL-Win64-2010\\lib" + ] + ] } + bat """ + cd cryptography + @set PATH="C:\\Python27";"C:\\Python27\\Scripts";%PATH% + @set PYTHON="${pythonPath[toxenv]}" + + @set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE% + @set LIB="${opensslPaths[label]['lib']}";%LIB% + tox -r -- --wycheproof-root=../wycheproof + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + virtualenv .codecov + call .codecov/Scripts/activate + REM this pin must be kept in sync with tox.ini + pip install coverage + pip install codecov + codecov -e JOB_BASE_NAME,LABEL,TOXENV + """ } } } @@ -185,28 +134,11 @@ for (config in configs) { for (_toxenv in toxenvs) { def toxenv = _toxenv - - if (label.contains("docker")) { - def imageName = config["imageName"] - def combinedName = "${imageName}-${toxenv}" - builders[combinedName] = { - node(label) { - stage(combinedName) { - def buildImage = docker.image(imageName) - buildImage.pull() - buildImage.inside { - build(toxenv, label, imageName, artifacts, artifactExcludes) - } - } - } - } - } else { - def combinedName = "${label}-${toxenv}" - builders[combinedName] = { - node(label) { - stage(combinedName) { - build(toxenv, label, '', null, null) - } + def combinedName = "${label}-${toxenv}" + builders[combinedName] = { + node(label) { + stage(combinedName) { + build(toxenv, label, '', null, null) } } } From 9517e7fd9011d100a99e361766d04f54c6cffeab Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 25 May 2019 22:02:04 -0400 Subject: [PATCH 648/988] set the path so codecov can find coverage on windows (#4896) * set the path so codecov can find coverage on windows * don't clobber the existing path --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c068f1c1ff79..919c04b983d6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -93,6 +93,6 @@ jobs: IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% displayName: 'Run tests' - - script: C:/%PYTHON_DIR%/Scripts/codecov -e AGENT_OS,TOXENV,WINDOWS_ARCH + - script: set PATH=%PATH%;C:/%PYTHON_DIR%/Scripts; & codecov -e AGENT_OS,TOXENV,WINDOWS_ARCH displayName: 'Submit coverage' condition: succeeded() From ca6a03a5d55463254f8ab1c9e9ca392b55d57446 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 May 2019 23:29:06 -0400 Subject: [PATCH 649/988] Added Windows tests for 3.4-3.7 (#4895) * Added Windows tests for 3.5-3.7 * Ooops, fix image * Fixes * Added Python 3.5 --- azure-pipelines.yml | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 919c04b983d6..0257d4d688a6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -79,6 +79,54 @@ jobs: OPENSSL_DIR: 'OpenSSL-Win64-2010' PYTHON_DIR: 'Python27' WINDOWS_ARCH: 'x86_64' + Python34-x86: + TOXENV: py34 + containerImage: 'pyca/cryptography-runner-windows:py34-x86' + OPENSSL_DIR: 'OpenSSL-Win32-2010' + PYTHON_DIR: 'Python34' + WINDOWS_ARCH: 'x86' + Python34-x86-64: + TOXENV: py34 + containerImage: 'pyca/cryptography-runner-windows:py34-x86_64' + OPENSSL_DIR: 'OpenSSL-Win64-2010' + PYTHON_DIR: 'Python34' + WINDOWS_ARCH: 'x86_64' + Python35-x86: + TOXENV: py35 + containerImage: 'pyca/cryptography-runner-windows:py35-x86' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + PYTHON_DIR: 'Python35' + WINDOWS_ARCH: 'x86' + Python35-x86-64: + TOXENV: py35 + containerImage: 'pyca/cryptography-runner-windows:py35-x86_64' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + PYTHON_DIR: 'Python35' + WINDOWS_ARCH: 'x86_64' + Python36-x86: + TOXENV: py36 + containerImage: 'pyca/cryptography-runner-windows:py3-x86' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + PYTHON_DIR: 'Python36' + WINDOWS_ARCH: 'x86' + Python36-x86-64: + TOXENV: py36 + containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + PYTHON_DIR: 'Python36' + WINDOWS_ARCH: 'x86_64' + Python37-x86: + TOXENV: py37 + containerImage: 'pyca/cryptography-runner-windows:py3-x86' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + PYTHON_DIR: 'Python37' + WINDOWS_ARCH: 'x86' + Python37-x86-64: + TOXENV: py37 + containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + PYTHON_DIR: 'Python37' + WINDOWS_ARCH: 'x86_64' steps: - script: C:/%PYTHON_DIR%/Scripts/pip install codecov displayName: 'Install codecov' From 98cd156241d35851655f0b98fe5f785c65c7e39a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 May 2019 07:34:50 -0400 Subject: [PATCH 650/988] Add windows to azure wheel builder (#4881) * Add windows to azure wheel builder * whoops syntax fix * syntax fix * Added missing container image * Drop the virtualenv * Quotes * Update wheel-builder.yml * Update wheel-builder.yml * Update wheel-builder.yml * Update wheel-builder.yml * Windows. * Update wheel-builder.yml * Update wheel-builder.yml * Update wheel-builder.yml * Update wheel-builder.yml * Update wheel-builder.yml * Added 3.4,3.6,3.7 windows wheels * fix * Update wheel-builder.yml * py35 wheel builder --- .azure-pipelines/wheel-builder.yml | 78 ++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 1504aae72636..2d82cb34366d 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -123,3 +123,81 @@ jobs: inputs: pathToPublish: wheelhouse/ artifactName: cryptography-manylinux1-$(PYTHON_VERSION) + + - job: 'windows' + pool: + vmImage: 'windows-2019' + container: $[variables.containerImage] + strategy: + matrix: + Python27-x86: + containerImage: 'pyca/cryptography-runner-windows:py27-x86' + PYTHON_VERSION: '27' + OPENSSL_DIR: 'OpenSSL-Win32-2010' + WINDOWS_ARCH: 'x86' + Python27-x86-64: + containerImage: 'pyca/cryptography-runner-windows:py27-x86_64' + PYTHON_VERSION: '27' + OPENSSL_DIR: 'OpenSSL-Win64-2010' + WINDOWS_ARCH: 'x86_64' + Python34-x86: + containerImage: 'pyca/cryptography-runner-windows:py34-x86' + PYTHON_VERSION: '34' + OPENSSL_DIR: 'OpenSSL-Win32-2010' + WINDOWS_ARCH: 'x86' + Python34-x86-64: + containerImage: 'pyca/cryptography-runner-windows:py34-x86_64' + PYTHON_VERSION: '34' + OPENSSL_DIR: 'OpenSSL-Win64-2010' + WINDOWS_ARCH: 'x86_64' + Python35-x86: + containerImage: 'pyca/cryptography-runner-windows:py35-x86' + PYTHON_VERSION: '35' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + WINDOWS_ARCH: 'x86' + Python35-x86-64: + containerImage: 'pyca/cryptography-runner-windows:py35-x86_64' + PYTHON_VERSION: '35' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + WINDOWS_ARCH: 'x86_64' + Python36-x86: + containerImage: 'pyca/cryptography-runner-windows:py3-x86' + PYTHON_VERSION: '36' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + WINDOWS_ARCH: 'x86' + Python36-x86-64: + containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' + PYTHON_VERSION: '36' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + WINDOWS_ARCH: 'x86_64' + Python37-x86: + containerImage: 'pyca/cryptography-runner-windows:py3-x86' + PYTHON_VERSION: '37' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + WINDOWS_ARCH: 'x86' + Python37-x86-64: + containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' + PYTHON_VERSION: '37' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + WINDOWS_ARCH: 'x86_64' + steps: + - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install wheel cffi six asn1crypto ipaddress enum34' + displayName: Install wheel and our Python dependencies + - script: | + set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% + set LIB=C:/%OPENSSL_DIR%/lib;%LIB% + C:/Python%PYTHON_VERSION%/Scripts/pip wheel cryptography==%BUILD_VERSION% --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography + displayName: Build the wheel + - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install -f wheelhouse cryptography --no-index' + displayName: Test installing the wheel + - script: | + "C:/Python%PYTHON_VERSION%/python" -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + displayName: Print the OpenSSL we built and linked against + - script: mkdir cryptography-wheelhouse + displayName: Create a directory for placing the final wheel in + - script: move wheelhouse\cryptography*.whl cryptography-wheelhouse\ + displayName: Move the cryptography wheel into the final wheel house + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: cryptography-wheelhouse/ + artifactName: cryptography-windows-$(WINDOWS_ARCH)-python$(PYTHON_VERSION) From 4f7715b6e6e6d9ee8a41e2e3615d5187d64ae013 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 May 2019 07:35:49 -0400 Subject: [PATCH 651/988] Remove the final vestigates of Jenkins (#4897) * Remove the final vestigates of Jenkins * flake8 --- .github/ISSUE_TEMPLATE/openssl-release.md | 4 +- .jenkins/Jenkinsfile-OpenSSL-1.1 | 86 ---------- .../Jenkinsfile-cryptography-wheel-builder | 95 ----------- .travis/install.sh | 2 +- Jenkinsfile | 148 ------------------ dev-requirements.txt | 1 - docs/doing-a-release.rst | 2 +- release.py | 82 +--------- tox.ini | 2 +- 9 files changed, 5 insertions(+), 417 deletions(-) delete mode 100644 .jenkins/Jenkinsfile-OpenSSL-1.1 delete mode 100644 .jenkins/Jenkinsfile-cryptography-wheel-builder delete mode 100644 Jenkinsfile diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index 6167739f16a5..074d9fb0ab4f 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -1,9 +1,7 @@ - [ ] Windows - - [ ] Run the `openssl-release-1.1` Jenkins job - - [ ] Copy the resulting artifacts to the Windows builders and unzip them in the root of the file system + - [ ] Run the `windows-openssl` Azure Pipelines job - [ ] macOS - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula - [ ] Wait for it to be merged - - [ ] Run the `update-brew-openssl` Jenkins job - [ ] manylinux1 - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux1/install_openssl.sh#L5-L6) diff --git a/.jenkins/Jenkinsfile-OpenSSL-1.1 b/.jenkins/Jenkinsfile-OpenSSL-1.1 deleted file mode 100644 index 62ec956001c9..000000000000 --- a/.jenkins/Jenkinsfile-OpenSSL-1.1 +++ /dev/null @@ -1,86 +0,0 @@ -def configs = [ - [ - label: "windows2012-openssl", arch: "x86", "vsversion": 2010 - ], - [ - label: "windows2012-openssl", arch: "x86_64", "vsversion": 2010 - ], - [ - label: "windows2012-openssl", arch: "x86", "vsversion": 2015 - ], - [ - label: "windows2012-openssl", arch: "x86_64", "vsversion": 2015 - ], -] - -script = """ - wmic qfe - powershell "[Net.ServicePointManager]::SecurityProtocol = 'tls12'; wget 'https://www.openssl.org/source/openssl-1.1.1-latest.tar.gz' -OutFile 'openssl-latest.tar.gz'" - REM Next decompress the tarball using winrar. INUL disables error msgs, which are GUI prompts and therefore undesirable - "C:\\Program Files\\WinRAR\\WinRAR.exe" -INUL x openssl-latest.tar.gz - cd openssl-1* - REM The next line determines the name of the current directory. Batch is great. - FOR %%I IN (.) DO @SET CURRENTDIR=%%~nI%%~xI - if "%BUILDARCH%" == "x86" ( - @SET BUILDARCHFLAG=x86 - @SET OPENSSLARCHFLAG="VC-WIN32" - ) else ( - @SET BUILDARCHFLAG=amd64 - @SET OPENSSLARCHFLAG="VC-WIN64A" - ) - if "%BUILDVSVERSION%" == "2010" ( - call "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat" %BUILDARCHFLAG% - echo "Building with VS 2010" - ) else ( - call "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" %BUILDARCHFLAG% - echo "Building with VS 2015" - ) - SET - perl Configure no-comp no-shared %OPENSSLARCHFLAG% - nmake - nmake test - - if "%BUILDARCH%" == "x86" ( - @SET FINALDIR="openssl-win32-%BUILDVSVERSION%" - ) else ( - @SET FINALDIR="openssl-win64-%BUILDVSVERSION%" - ) - mkdir %FINALDIR% - mkdir %FINALDIR%\\lib - move include %FINALDIR%\\include - move libcrypto.lib %FINALDIR%\\lib\\ - move libssl.lib %FINALDIR%\\lib\\ - "C:\\Program Files\\WinRAR\\WinRAR.exe" -INUL a %CURRENTDIR%-%BUILDVSVERSION%-%BUILDARCH%.zip %FINALDIR%\\include %FINALDIR%\\lib\\libcrypto.lib %FINALDIR%\\lib\\libssl.lib -""" - -def build(label, vsversion, arch) { - node(label) { - try { - timeout(time: 30, unit: 'MINUTES') { - stage("Compile") { - withEnv(["BUILDARCH=$arch", "BUILDVSVERSION=$vsversion"]) { - bat script - } - } - stage("Archive") { - archiveArtifacts artifacts: "**/openssl-*.zip" - } - } - } finally { - deleteDir() - } - } -} - -def builders = [:] - -for (config in configs) { - def vsversion = config["vsversion"] - def arch = config["arch"] - def label = config["label"] - builders["${vsversion}-${arch}"] = { - build(label, vsversion, arch) - } -} - -parallel builders diff --git a/.jenkins/Jenkinsfile-cryptography-wheel-builder b/.jenkins/Jenkinsfile-cryptography-wheel-builder deleted file mode 100644 index 907f06e9ab37..000000000000 --- a/.jenkins/Jenkinsfile-cryptography-wheel-builder +++ /dev/null @@ -1,95 +0,0 @@ -properties([ - parameters([ - string(defaultValue: '', description: 'The version from PyPI to build', name: 'BUILD_VERSION') - ]), - pipelineTriggers([]) -]) - -def configs = [ - [ - label: 'windows', - versions: ['py27', 'py34', 'py35', 'py36', 'py37'], - ], - [ - label: 'windows64', - versions: ['py27', 'py34', 'py35', 'py36', 'py37'], - ], -] - - -def build(version, label, imageName) { - try { - timeout(time: 30, unit: 'MINUTES') { - if (label.contains("windows")) { - def pythonPath = [ - py27: "C:\\Python27\\python.exe", - py34: "C:\\Python34\\python.exe", - py35: "C:\\Python35\\python.exe", - py36: "C:\\Python36\\python.exe", - py37: "C:\\Python37\\python.exe" - ] - if (version == "py35" || version == "py36" || version == "py37") { - opensslPaths = [ - "windows": [ - "include": "C:\\OpenSSL-Win32-2015\\include", - "lib": "C:\\OpenSSL-Win32-2015\\lib" - ], - "windows64": [ - "include": "C:\\OpenSSL-Win64-2015\\include", - "lib": "C:\\OpenSSL-Win64-2015\\lib" - ] - ] - } else { - opensslPaths = [ - "windows": [ - "include": "C:\\OpenSSL-Win32-2010\\include", - "lib": "C:\\OpenSSL-Win32-2010\\lib" - ], - "windows64": [ - "include": "C:\\OpenSSL-Win64-2010\\include", - "lib": "C:\\OpenSSL-Win64-2010\\lib" - ] - ] - } - bat """ - wmic qfe - @set PATH="C:\\Python27";"C:\\Python27\\Scripts";%PATH% - @set PYTHON="${pythonPath[version]}" - - @set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE% - @set LIB="${opensslPaths[label]['lib']}";%LIB% - virtualenv -p %PYTHON% .release - call .release\\Scripts\\activate - pip install wheel virtualenv - pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography - pip install -f wheelhouse cryptography --no-index - python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - """ - } - archiveArtifacts artifacts: "wheelhouse/cryptography*.whl" - } - } finally { - deleteDir() - } - -} - -def builders = [:] -for (config in configs) { - def label = config["label"] - def versions = config["versions"] - - for (_version in versions) { - def version = _version - def combinedName = "${label}-${version}" - builders[combinedName] = { - node(label) { - stage(combinedName) { - build(version, label, "") - } - } - } - } -} - -parallel builders diff --git a/.travis/install.sh b/.travis/install.sh index ed69e4683c4a..f49569ed3a83 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -64,5 +64,5 @@ pip install virtualenv python -m virtualenv ~/.venv source ~/.venv/bin/activate -# If we pin coverage it must be kept in sync with tox.ini and Jenkinsfile +# If we pin coverage it must be kept in sync with tox.ini and azure-pipelines.yml pip install tox codecov coverage diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 8a989bf1035f..000000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,148 +0,0 @@ -if (env.BRANCH_NAME == "master") { - properties([pipelineTriggers([cron('@daily')])]) -} - -def configs = [ - [ - label: 'windows', - toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], - ], - [ - label: 'windows64', - toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'], - ], -] - -def checkout_git(label) { - retry(3) { - def script = "" - if (env.BRANCH_NAME.startsWith('PR-')) { - script = """ - git clone --depth=1 https://github.com/pyca/cryptography - cd cryptography - git fetch origin +refs/pull/${env.CHANGE_ID}/merge: - git checkout -qf FETCH_HEAD - """ - if (label.contains("windows")) { - bat script - } else { - sh """#!/bin/sh - set -xe - ${script} - """ - } - } else { - checkout([ - $class: 'GitSCM', - branches: [[name: "*/${env.BRANCH_NAME}"]], - doGenerateSubmoduleConfigurations: false, - extensions: [[ - $class: 'RelativeTargetDirectory', - relativeTargetDir: 'cryptography' - ]], - submoduleCfg: [], - userRemoteConfigs: [[ - 'url': 'https://github.com/pyca/cryptography' - ]] - ]) - } - } - bat """ - cd cryptography - git rev-parse HEAD - """ -} -def build(toxenv, label, imageName, artifacts, artifactExcludes) { - try { - timeout(time: 30, unit: 'MINUTES') { - - checkout_git(label) - checkout([ - $class: 'GitSCM', - extensions: [[ - $class: 'RelativeTargetDirectory', - relativeTargetDir: 'wycheproof', - ]], - userRemoteConfigs: [[ - 'url': 'https://github.com/google/wycheproof', - ]] - ]) - - withCredentials([string(credentialsId: 'cryptography-codecov-token', variable: 'CODECOV_TOKEN')]) { - withEnv(["LABEL=$label", "TOXENV=$toxenv", "IMAGE_NAME=$imageName"]) { - def pythonPath = [ - py27: "C:\\Python27\\python.exe", - py34: "C:\\Python34\\python.exe", - py35: "C:\\Python35\\python.exe", - py36: "C:\\Python36\\python.exe", - py37: "C:\\Python37\\python.exe" - ] - if (toxenv == "py35" || toxenv == "py36" || toxenv == "py37") { - opensslPaths = [ - "windows": [ - "include": "C:\\OpenSSL-Win32-2015\\include", - "lib": "C:\\OpenSSL-Win32-2015\\lib" - ], - "windows64": [ - "include": "C:\\OpenSSL-Win64-2015\\include", - "lib": "C:\\OpenSSL-Win64-2015\\lib" - ] - ] - } else { - opensslPaths = [ - "windows": [ - "include": "C:\\OpenSSL-Win32-2010\\include", - "lib": "C:\\OpenSSL-Win32-2010\\lib" - ], - "windows64": [ - "include": "C:\\OpenSSL-Win64-2010\\include", - "lib": "C:\\OpenSSL-Win64-2010\\lib" - ] - ] - } - bat """ - cd cryptography - @set PATH="C:\\Python27";"C:\\Python27\\Scripts";%PATH% - @set PYTHON="${pythonPath[toxenv]}" - - @set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE% - @set LIB="${opensslPaths[label]['lib']}";%LIB% - tox -r -- --wycheproof-root=../wycheproof - IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% - virtualenv .codecov - call .codecov/Scripts/activate - REM this pin must be kept in sync with tox.ini - pip install coverage - pip install codecov - codecov -e JOB_BASE_NAME,LABEL,TOXENV - """ - } - } - } - } finally { - deleteDir() - } - -} - -def builders = [:] -for (config in configs) { - def label = config["label"] - def toxenvs = config["toxenvs"] - def artifacts = config["artifacts"] - def artifactExcludes = config["artifactExcludes"] - - for (_toxenv in toxenvs) { - def toxenv = _toxenv - def combinedName = "${label}-${toxenv}" - builders[combinedName] = { - node(label) { - stage(combinedName) { - build(toxenv, label, '', null, null) - } - } - } - } -} - -parallel builders diff --git a/dev-requirements.txt b/dev-requirements.txt index 608197391b24..6b7f482af297 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,7 +1,6 @@ azure-devops click coverage -requests tox >= 2.4.1 twine >= 1.8.0 -e .[test,docs,docstest,pep8test] diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index e7ee88fa0c12..6c309d357fc7 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -21,7 +21,7 @@ Verifying OpenSSL version ------------------------- The release process creates wheels bundling OpenSSL for Windows, macOS, and -Linux. Check that the Windows and macOS Jenkins builders have the latest +Linux. Check that the Windows and macOS Azure Pipelines builders have the latest version of OpenSSL installed and verify that the latest version is present in the ``pyca/cryptography-manylinux1`` docker containers. If anything is out of date follow the instructions for upgrading OpenSSL. diff --git a/release.py b/release.py index b8269114189c..c03d22d5fa80 100644 --- a/release.py +++ b/release.py @@ -6,7 +6,6 @@ import getpass import glob -import io import json import os import subprocess @@ -21,14 +20,6 @@ from msrest.authentication import BasicAuthentication -import requests - - -JENKINS_URL = ( - "https://ci.cryptography.io/job/cryptography-support-jobs/" - "job/wheel-builder" -) - def run(*args, **kwargs): print("[running] {0}".format(list(args))) @@ -91,76 +82,6 @@ def build_wheels_azure(version): return download_artifacts_azure(build_client, build.id) -def wait_for_build_completed_jenkins(session): - # Wait 20 seconds before actually checking if the build is complete, to - # ensure that it had time to really start. - time.sleep(20) - while True: - response = session.get( - "{0}/lastBuild/api/json/".format(JENKINS_URL), - headers={ - "Accept": "application/json", - } - ) - response.raise_for_status() - if not response.json()["building"]: - assert response.json()["result"] == "SUCCESS" - break - time.sleep(0.1) - - -def download_artifacts_jenkins(session): - response = session.get( - "{0}/lastBuild/api/json/".format(JENKINS_URL), - headers={ - "Accept": "application/json" - } - ) - response.raise_for_status() - json_response = response.json() - assert not json_response["building"] - assert json_response["result"] == "SUCCESS" - - paths = [] - - for artifact in json_response["artifacts"]: - response = session.get( - "{0}artifact/{1}".format( - json_response["url"], artifact["relativePath"] - ), stream=True - ) - assert response.headers["content-length"] - print("Downloading {0}".format(artifact["fileName"])) - content = io.BytesIO() - for data in response.iter_content(chunk_size=8192): - content.write(data) - out_path = os.path.join( - os.path.dirname(__file__), - "dist", - artifact["fileName"], - ) - with open(out_path, "wb") as f: - f.write(content.getvalue()) - paths.append(out_path) - return paths - - -def build_wheels_jenkins(version): - token = getpass.getpass("Input the Jenkins token: ") - session = requests.Session() - response = session.get( - "{0}/buildWithParameters".format(JENKINS_URL), - params={ - "token": token, - "BUILD_VERSION": version, - "cause": "Building wheels for {0}".format(version) - } - ) - response.raise_for_status() - wait_for_build_completed_jenkins(session) - return download_artifacts_jenkins(session) - - @click.command() @click.argument("version") def release(version): @@ -180,8 +101,7 @@ def release(version): run("twine", "upload", "-s", *packages) azure_wheel_paths = build_wheels_azure(version) - jenkins_wheel_paths = build_wheels_jenkins(version) - run("twine", "upload", *(azure_wheel_paths + jenkins_wheel_paths)) + run("twine", "upload", *azure_wheel_paths) if __name__ == "__main__": diff --git a/tox.ini b/tox.ini index 45df87229d50..ba9e083377b2 100644 --- a/tox.ini +++ b/tox.ini @@ -7,7 +7,7 @@ extras = test idna: idna deps = - # This must be kept in sync with Jenkinsfile and .travis/install.sh + # This must be kept in sync with .travis/install.sh and azure-pipelines.yml coverage ./vectors passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING From 463348bc71b8737b6c620e97286468f3a5c1322f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 26 May 2019 10:35:00 -0400 Subject: [PATCH 652/988] update docs with latest info & remove the last ci.cryptography.io stuff (#4898) --- docs/installation.rst | 9 +++++---- docs/security.rst | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 65d24da5f054..e006fc250e0a 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -14,11 +14,12 @@ Currently we test ``cryptography`` on Python 2.7, 3.4+, and PyPy 5.4+ on these operating systems. * x86-64 CentOS 7.x -* macOS 10.12 Sierra, 10.10 Yosemite +* x86-64 Fedora (latest) +* macOS 10.13 High Sierra, 10.14 Mojave * x86-64 Ubuntu 14.04, 16.04, and rolling * x86-64 Debian Jessie (8.x), Stretch (9.x), Buster (10.x), and Sid (unstable) * x86-64 Alpine (latest) -* 32-bit and 64-bit Python on 64-bit Windows Server 2012 +* 32-bit and 64-bit Python on 64-bit Windows Server 2019 We test compiling with ``clang`` as well as ``gcc`` and use the following OpenSSL releases: @@ -47,7 +48,7 @@ just run If you prefer to compile it yourself you'll need to have OpenSSL installed. You can compile OpenSSL yourself as well or use the binaries we build for our -release infrastructure (`openssl-release`_). Be sure to download the proper +own `infrastructure`_. Be sure to download the proper version for your architecture and Python (2010 works for Python 2.7, 3.3, and 3.4 while 2015 is required for 3.5 and above). Wherever you place your copy of OpenSSL you'll need to set the ``LIB`` and ``INCLUDE`` environment variables @@ -279,7 +280,7 @@ local `wheel cache`_. .. _`Homebrew`: https://brew.sh .. _`MacPorts`: https://www.macports.org -.. _`openssl-release`: https://ci.cryptography.io/job/cryptography-support-jobs/job/openssl-release-1.1/ +.. _`infrastructure`: https://github.com/pyca/infra/tree/master/windows/openssl .. _virtualenv: https://virtualenv.pypa.io/en/latest/ .. _openssl.org: https://www.openssl.org/source/ .. _`wheel cache`: https://pip.pypa.io/en/stable/reference/pip_install/#caching diff --git a/docs/security.rst b/docs/security.rst index 01845a48cc27..affe43483b87 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -9,9 +9,9 @@ Infrastructure -------------- In addition to ``cryptography``'s code, we're also concerned with the security -of the infrastructure we run (primarily ``cryptography.io`` and -``ci.cryptography.io``). If you discover a security vulnerability in our -infrastructure, we ask you to report it using the same procedure. +of the infrastructure we run (primarily ``cryptography.io``). If you discover +a security vulnerability in our infrastructure, we ask you to report it using +the same procedure. What is a security issue? ------------------------- From 828581d6eaf6123f93d5ccadd630340be66206dd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 27 May 2019 14:08:07 -0400 Subject: [PATCH 653/988] Added a new packaging test (#4899) * Added a new packaging test * Fixed packaging job * typo * more fixes * one more --- .travis.yml | 2 ++ MANIFEST.in | 8 ++++++++ tox.ini | 10 ++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 930f6ea16bff..a0511cf6228d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -117,6 +117,8 @@ matrix: if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/ - python: 3.4 env: TOXENV=pep8 + - python: 3.7 + env: TOXENV=packaging - python: 2.7 env: DOWNSTREAM=pyopenssl diff --git a/MANIFEST.in b/MANIFEST.in index 373c242023b8..2da8d15259c3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,6 +4,7 @@ include CONTRIBUTING.rst include LICENSE include LICENSE.APACHE include LICENSE.BSD +include LICENSE.PSF include README.rst include pyproject.toml @@ -12,4 +13,11 @@ recursive-include docs * recursive-include src/_cffi_src *.py *.c *.h prune docs/_build recursive-include tests *.py +exclude vectors recursive-exclude vectors * + +exclude azure-pipelines.yml .azure-pipelines .travis.yml .travis +recursive-exclude .azure-pipelines * +recursive-exclude .travis * + +exclude release.py .coveragerc codecov.yml dev-requirements.txt rtd-requirements.txt tox.ini diff --git a/tox.ini b/tox.ini index ba9e083377b2..e2243bbfe39b 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] minversion = 2.4 -envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,py3pep8 +envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,packaging [testenv] extras = @@ -60,7 +60,7 @@ commands = [testenv:pep8] basepython = python3 extras = - pep8test + pep8test commands = flake8 . @@ -71,6 +71,12 @@ deps = commands = pytest --capture=no --strict --random {posargs} +[testenv:packaging] +deps = + check-manifest +commands = + check-manifest + [flake8] ignore = W504 exclude = .tox,*.egg,.git,_build,.hypothesis From 770a514aea598366cc40e3ee14df273cd1763825 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 28 May 2019 11:26:21 -0400 Subject: [PATCH 654/988] update to latest openssl on travis builders where appropriate (#4900) --- .travis.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0511cf6228d..bf1f01e6ee0f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,15 +44,15 @@ matrix: - python: 3.7 env: TOXENV=py37 OPENSSL=1.0.1u - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.0j + env: TOXENV=py27 OPENSSL=1.1.0k - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0j + env: TOXENV=py35 OPENSSL=1.1.0k - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1b + env: TOXENV=py27 OPENSSL=1.1.1c - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1b + env: TOXENV=py37 OPENSSL=1.1.1c - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1b OPENSSL_CONFIG_FLAGS=no-engine + env: TOXENV=py37 OPENSSL=1.1.1c OPENSSL_CONFIG_FLAGS=no-engine - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 @@ -131,9 +131,9 @@ matrix: - python: 2.7 # BOTO_CONFIG works around this boto issue on travis: # https://github.com/boto/boto/issues/3717 - env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0j BOTO_CONFIG=/dev/null + env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0k BOTO_CONFIG=/dev/null - python: 2.7 - env: DOWNSTREAM=certbot OPENSSL=1.1.0j + env: DOWNSTREAM=certbot OPENSSL=1.1.0k - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 From c242991fc290d963dbed33c8ac84b328b4bad71f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 May 2019 16:25:04 -0700 Subject: [PATCH 655/988] brew update (#4904) --- azure-pipelines.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0257d4d688a6..dcb5050be1c8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -39,6 +39,9 @@ jobs: versionSpec: '$(python.version)' architecture: 'x64' + - script: brew update + displayName: 'brew update' + - script: brew install openssl@1.1 displayName: 'Install OpenSSL' From 9c2637d7ee1e5e7ce66fb8838f6b3f1e8c106242 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 30 May 2019 19:27:42 -0400 Subject: [PATCH 656/988] bump for 2.7 release (#4903) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 92050d275218..4d2b7ccc2d9e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-7: -2.7 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.7 - 2019-05-30 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** We no longer distribute 32-bit ``manylinux1`` wheels. Continuing to produce them was a maintenance burden. diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 97132bdf531e..3bd1fb8764b6 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.7.dev1" +__version__ = "2.7" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 08837c281d22..0cbb80036ab4 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.7.dev1" +__version__ = "2.7" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From b6940968ced4314f728202d65d9965670dce8637 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 31 May 2019 00:27:01 -0400 Subject: [PATCH 657/988] reopen master for 2.8 (#4906) * reopen master for 2.8 also add the missing changelog * sigh, empty commit to trigger azure pipelines --- CHANGELOG.rst | 9 +++++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4d2b7ccc2d9e..5722e7b6e624 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v2-8: + +2.8 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-7: 2.7 - 2019-05-30 @@ -12,6 +19,8 @@ Changelog ``cryptography.hazmat.primitives.mac.MACContext`` interface. The ``CMAC`` and ``HMAC`` APIs have not changed, but they are no longer registered as ``MACContext`` instances. +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.1c. * Removed support for running our tests with ``setup.py test``. Users interested in running our tests can continue to follow the directions in our :doc:`development documentation`. diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 3bd1fb8764b6..703a4a5ef606 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.7" +__version__ = "2.8.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 0cbb80036ab4..c550032d8890 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.7" +__version__ = "2.8.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 631179531dd4e57c41d88288174dcf91ea2dcc6c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 31 May 2019 00:27:50 -0400 Subject: [PATCH 658/988] hack workaround so wheel builder works (#4905) * remove don't use pep517 flags now that we have an explicit backend * lol --- .azure-pipelines/wheel-builder.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 2d82cb34366d..3d867c7f45ad 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -35,6 +35,8 @@ jobs: displayName: Create virtualenv - script: .venv/bin/pip install -U wheel displayName: Update wheel to the latest version + - script: .venv/bin/pip install -U pip==10.0.1 + displayName: Downgrade pip lol - script: .venv/bin/pip install cffi six asn1crypto ipaddress "enum34; python_version < '3'" displayName: Install our Python dependencies @@ -50,7 +52,7 @@ jobs: CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ - .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API + .venv/bin/pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API displayName: Build the wheel - script: .venv/bin/pip install --no-index -f wheelhouse cryptography displayName: Test installing the wheel @@ -84,6 +86,8 @@ jobs: steps: - script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv displayName: Create virtualenv + - script: .venv/bin/pip install -U pip==10.0.1 + displayName: Downgrade pip lol - script: .venv/bin/pip install cffi six asn1crypto ipaddress enum34 displayName: Install our Python dependencies - script: | @@ -96,7 +100,7 @@ jobs: fi LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-use-pep517 --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API + .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API displayName: Build the wheel - script: auditwheel repair tmpwheelhouse/cryptograph*.whl -w wheelhouse/ displayName: Run auditwheel @@ -181,12 +185,14 @@ jobs: OPENSSL_DIR: 'OpenSSL-Win64-2015' WINDOWS_ARCH: 'x86_64' steps: + - script: '"C:/Python%PYTHON_VERSION%/python.exe" -m pip install -U pip==10.0.1' + displayName: Downgrade pip lol - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install wheel cffi six asn1crypto ipaddress enum34' displayName: Install wheel and our Python dependencies - script: | set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% set LIB=C:/%OPENSSL_DIR%/lib;%LIB% - C:/Python%PYTHON_VERSION%/Scripts/pip wheel cryptography==%BUILD_VERSION% --no-use-pep517 --wheel-dir=wheelhouse --no-binary cryptography + C:/Python%PYTHON_VERSION%/Scripts/pip wheel cryptography==%BUILD_VERSION% --wheel-dir=wheelhouse --no-binary cryptography displayName: Build the wheel - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install -f wheelhouse cryptography --no-index' displayName: Test installing the wheel From 5af23ed2798448f9c0975ceaeff65a73dfb59ffb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 2 Jun 2019 16:42:07 -0700 Subject: [PATCH 659/988] Use the official pytest random order plugin (#4911) --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index e2243bbfe39b..f242779c6571 100644 --- a/tox.ini +++ b/tox.ini @@ -67,9 +67,9 @@ commands = [testenv:randomorder] deps = {[testenv]deps} - pytest-random + pytest-randomly commands = - pytest --capture=no --strict --random {posargs} + pytest --capture=no --strict {posargs} [testenv:packaging] deps = From 75b4eaac47bc13f68a4838219f095ebf6d416eaf Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Jun 2019 20:42:20 -0400 Subject: [PATCH 660/988] Manylinux2010 wheel (#4910) * add manylinux2010 wheel builder * various updates * empty commit * need to pass a plat tag * hacks need hacks --- .azure-pipelines/wheel-builder.yml | 34 ++++++++++++++++++----- .github/ISSUE_TEMPLATE/openssl-release.md | 5 ++-- CHANGELOG.rst | 3 ++ docs/doing-a-release.rst | 3 +- docs/installation.rst | 16 +++++------ 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 3d867c7f45ad..edd1dd51ecdb 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -71,18 +71,36 @@ jobs: pathToPublish: wheelhouse/ artifactName: cryptography-macos-python$(python.version) - - job: 'manylinux1' + - job: 'manylinux' pool: vmImage: 'ubuntu-16.04' - container: 'pyca/cryptography-manylinux1:x86_64' + container: $[variables.containerImage] strategy: matrix: - Python27m: + Python27m-manylinux1: + containerImage: 'pyca/cryptography-manylinux1:x86_64' + PYTHON_VERSION: 'cp27-cp27m' + PLATFORM: 'manylinux1_x86_64' + Python27mu-manylinux1: + containerImage: 'pyca/cryptography-manylinux1:x86_64' + PYTHON_VERSION: 'cp27-cp27mu' + PLATFORM: 'manylinux1_x86_64' + Python3m-manylinux1: + containerImage: 'pyca/cryptography-manylinux1:x86_64' + PYTHON_VERSION: 'cp34-cp34m' + PLATFORM: 'manylinux1_x86_64' + Python27m-manylinux2010: + containerImage: 'pyca/cryptography-manylinux2010:x86_64' PYTHON_VERSION: 'cp27-cp27m' - Python27mu: + PLATFORM: 'manylinux2010_x86_64' + Python27mu-manylinux2010: + containerImage: 'pyca/cryptography-manylinux2010:x86_64' PYTHON_VERSION: 'cp27-cp27mu' - Python3m: + PLATFORM: 'manylinux2010_x86_64' + Python3m-manylinux2010: + containerImage: 'pyca/cryptography-manylinux2010:x86_64' PYTHON_VERSION: 'cp34-cp34m' + PLATFORM: 'manylinux2010_x86_64' steps: - script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv displayName: Create virtualenv @@ -102,7 +120,7 @@ jobs: CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API displayName: Build the wheel - - script: auditwheel repair tmpwheelhouse/cryptograph*.whl -w wheelhouse/ + - script: auditwheel repair --plat $PLATFORM tmpwheelhouse/cryptograph*.whl -w wheelhouse/ displayName: Run auditwheel - script: unzip wheelhouse/*.whl -d execstack.check displayName: Unzip the wheel @@ -118,6 +136,8 @@ jobs: exit 0 fi displayName: Run execstack on the wheel + - script: .venv/bin/pip install -U pip + displayName: Upgrade pip again so we can actually use manylinux2010 - script: .venv/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ displayName: Test installing the wheel - script: | @@ -126,7 +146,7 @@ jobs: - task: PublishBuildArtifacts@1 inputs: pathToPublish: wheelhouse/ - artifactName: cryptography-manylinux1-$(PYTHON_VERSION) + artifactName: cryptography-$(PLATFORM)-$(PYTHON_VERSION) - job: 'windows' pool: diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index 074d9fb0ab4f..c2fcae3db567 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -3,5 +3,6 @@ - [ ] macOS - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula - [ ] Wait for it to be merged -- [ ] manylinux1 - - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux1/install_openssl.sh#L5-L6) +- [ ] manylinux + - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux1/install_openssl.sh#L5-L6) for `manylinux1` + - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux2010/install_openssl.sh#L5-L6) for `manylinux2010` diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5722e7b6e624..4231d2b6449e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,9 @@ Changelog .. note:: This version is not yet released and is under active development. +* We now ship ``manylinux2010`` wheels in addition to our ``manylinux1`` + wheels. + .. _v2-7: 2.7 - 2019-05-30 diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index 6c309d357fc7..733d67f43cc3 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -23,7 +23,8 @@ Verifying OpenSSL version The release process creates wheels bundling OpenSSL for Windows, macOS, and Linux. Check that the Windows and macOS Azure Pipelines builders have the latest version of OpenSSL installed and verify that the latest version is present in -the ``pyca/cryptography-manylinux1`` docker containers. If anything is out +both the ``pyca/cryptography-manylinux1`` and +``pyca/cryptography-manylinux2010`` docker containers. If anything is out of date follow the instructions for upgrading OpenSSL. Upgrading OpenSSL diff --git a/docs/installation.rst b/docs/installation.rst index e006fc250e0a..7118cb1ea3e3 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -75,10 +75,10 @@ local `wheel cache`_. Building cryptography on Linux ------------------------------ -``cryptography`` ships a ``manylinux1`` wheel (as of 2.0) so all dependencies -are included. For users on pip 8.1 or above running on a ``manylinux1`` -compatible distribution (almost everything except Alpine) all you should -need to do is: +``cryptography`` ships ``manylinux`` wheels (as of 2.0) so all dependencies +are included. For users on pip 8.1 or above running on a ``manylinux1`` or +``manylinux2010`` compatible distribution (almost everything except Alpine) +all you should need to do is: .. code-block:: console @@ -122,8 +122,8 @@ Building ~~~~~~~~ You should now be able to build and install cryptography. To avoid getting -the pre-built wheel on ``manylinux1`` distributions you'll need to use -``--no-binary``. +the pre-built wheel on ``manylinux`` compatible distributions you'll need to +use ``--no-binary``. .. code-block:: console @@ -163,9 +163,9 @@ Static Wheels ~~~~~~~~~~~~~ Cryptography ships statically-linked wheels for macOS, Windows, and Linux (via -``manylinux1``). This allows compatible environments to use the most recent +``manylinux``). This allows compatible environments to use the most recent OpenSSL, regardless of what is shipped by default on those platforms. Some -Linux distributions (most notably Alpine) are not ``manylinux1`` compatible so +Linux distributions (most notably Alpine) are not ``manylinux`` compatible so we cannot distribute wheels for them. However, you can build your own statically-linked wheels that will work on your From 38ce1fac552525c08621d1cc5410cd20cfddfd82 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 2 Jun 2019 21:13:45 -0500 Subject: [PATCH 661/988] Simplify how we define random order tests in tox (#4912) --- .travis.yml | 2 +- tox.ini | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index bf1f01e6ee0f..5c0aa1944b44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -94,7 +94,7 @@ matrix: env: TOXENV=py37 DOCKER=pyca/cryptography-runner-ubuntu-rolling - python: 2.7 services: docker - env: TOXENV=randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling + env: TOXENV=py27-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-fedora diff --git a/tox.ini b/tox.ini index f242779c6571..b64f85bb0f2c 100644 --- a/tox.ini +++ b/tox.ini @@ -4,8 +4,9 @@ envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,packaging [testenv] extras = - test - idna: idna + test + idna: idna + randomorder: pytest-random deps = # This must be kept in sync with .travis/install.sh and azure-pipelines.yml coverage @@ -64,13 +65,6 @@ extras = commands = flake8 . -[testenv:randomorder] -deps = - {[testenv]deps} - pytest-randomly -commands = - pytest --capture=no --strict {posargs} - [testenv:packaging] deps = check-manifest From e41cf751e6a220923e6b82762d6c9384073a16fb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 3 Jun 2019 07:05:44 -0500 Subject: [PATCH 662/988] fixed broken random order (#4913) * fixed broken random order * Err, fix --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index b64f85bb0f2c..ffa62a39c6b1 100644 --- a/tox.ini +++ b/tox.ini @@ -6,11 +6,11 @@ envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,packaging extras = test idna: idna - randomorder: pytest-random deps = # This must be kept in sync with .travis/install.sh and azure-pipelines.yml coverage ./vectors + randomorder: pytest-randomly passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING commands = pip list From 1a868f39cb79273ca24bba8235f31ac4cf962d25 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 5 Jun 2019 14:58:18 +0200 Subject: [PATCH 663/988] Only EVP_CTRL_AEAD_SET_TAG in _aead_setup for CCM mode (#4916) --- src/cryptography/hazmat/backends/openssl/aead.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/aead.py b/src/cryptography/hazmat/backends/openssl/aead.py index 1335b4f95980..0cad15ccd7cc 100644 --- a/src/cryptography/hazmat/backends/openssl/aead.py +++ b/src/cryptography/hazmat/backends/openssl/aead.py @@ -49,10 +49,11 @@ def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): ctx, backend._lib.EVP_CTRL_AEAD_SET_TAG, len(tag), tag ) backend.openssl_assert(res != 0) - else: + elif cipher_name.endswith(b"-ccm"): res = backend._lib.EVP_CIPHER_CTX_ctrl( ctx, backend._lib.EVP_CTRL_AEAD_SET_TAG, tag_len, backend._ffi.NULL ) + backend.openssl_assert(res != 0) nonce_ptr = backend._ffi.from_buffer(nonce) key_ptr = backend._ffi.from_buffer(key) From f5735cf25acd08222368a1db615bbf61d36b8007 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 7 Jun 2019 18:07:08 -0700 Subject: [PATCH 664/988] Switch to new notBefore/After APIs (#4914) Introduced in OpenSSL 1.1. Added compatibility for older versions. --- src/_cffi_src/openssl/x509.py | 9 +++++++++ src/cryptography/hazmat/backends/openssl/backend.py | 4 ++-- src/cryptography/hazmat/backends/openssl/x509.py | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 079833efcc8e..d1c8699ff71c 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -193,6 +193,8 @@ ASN1_TIME *X509_get_notBefore(X509 *); ASN1_TIME *X509_get_notAfter(X509 *); +ASN1_TIME *X509_getm_notBefore(X509 *); +ASN1_TIME *X509_getm_notAfter(X509 *); long X509_REQ_get_version(X509_REQ *); X509_NAME *X509_REQ_get_subject_name(X509_REQ *); @@ -232,6 +234,8 @@ int X509_CRL_set_nextUpdate(X509_CRL *, ASN1_TIME *); int X509_set_notBefore(X509 *, ASN1_TIME *); int X509_set_notAfter(X509 *, ASN1_TIME *); +int X509_set1_notBefore(X509 *, ASN1_TIME *); +int X509_set1_notAfter(X509 *, ASN1_TIME *); EC_KEY *d2i_EC_PUBKEY_bio(BIO *, EC_KEY **); int i2d_EC_PUBKEY_bio(BIO *, EC_KEY *); @@ -351,6 +355,11 @@ { return x->serialNumber; } + +#define X509_set1_notBefore X509_set_notBefore +#define X509_set1_notAfter X509_set_notAfter +#define X509_getm_notAfter X509_get_notAfter +#define X509_getm_notBefore X509_get_notBefore #endif #endif """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ee86413710c8..ca0a11bd3ba6 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -839,12 +839,12 @@ def create_x509_certificate(self, builder, private_key, algorithm): # Set the "not before" time. self._set_asn1_time( - self._lib.X509_get_notBefore(x509_cert), builder._not_valid_before + self._lib.X509_getm_notBefore(x509_cert), builder._not_valid_before ) # Set the "not after" time. self._set_asn1_time( - self._lib.X509_get_notAfter(x509_cert), builder._not_valid_after + self._lib.X509_getm_notAfter(x509_cert), builder._not_valid_after ) # Add extensions. diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 920eaf52bebc..efbb1793098f 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -80,12 +80,12 @@ def public_key(self): @property def not_valid_before(self): - asn1_time = self._backend._lib.X509_get_notBefore(self._x509) + asn1_time = self._backend._lib.X509_getm_notBefore(self._x509) return _parse_asn1_time(self._backend, asn1_time) @property def not_valid_after(self): - asn1_time = self._backend._lib.X509_get_notAfter(self._x509) + asn1_time = self._backend._lib.X509_getm_notAfter(self._x509) return _parse_asn1_time(self._backend, asn1_time) @property From 5f8c8a31a7adef224436f8acc3f04147a92b3029 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Jun 2019 19:54:42 -0400 Subject: [PATCH 665/988] Refs #4923; deprecate OpenSSL 1.0.1 (#4924) * Refs #4923; deprecate OpenSSL 1.0.1 * changelog --- CHANGELOG.rst | 2 ++ docs/installation.rst | 4 ++-- src/cryptography/hazmat/bindings/openssl/binding.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4231d2b6449e..a8ef5d229b87 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ Changelog .. note:: This version is not yet released and is under active development. +* Deprecated support for OpenSSL 1.0.1. Support will be removed in + ``cryptography`` 2.9. * We now ship ``manylinux2010`` wheels in addition to our ``manylinux1`` wheels. diff --git a/docs/installation.rst b/docs/installation.rst index 7118cb1ea3e3..2c83f33a9dfe 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -32,8 +32,8 @@ OpenSSL releases: * ``OpenSSL 1.1.1-latest`` .. warning:: - Cryptography 2.4 has deprecated support for OpenSSL 1.0.1. - + OpenSSL 1.0.1 is no longer supported by the OpenSSL project. Cryptography + will drop support for it in the next release. Building cryptography on Windows -------------------------------- diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index ca4e33fa586f..974051621892 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -158,7 +158,7 @@ def _verify_openssl_version(lib): ): warnings.warn( "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " - "project, please upgrade. A future version of cryptography will " + "project, please upgrade. The next version of cryptography will " "drop support for it.", utils.CryptographyDeprecationWarning ) From a869061d764604967e4cddd0311e1b11bd736920 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Jun 2019 23:26:31 -0400 Subject: [PATCH 666/988] Fixes #4731 -- update the secure memory wiping docs (#4925) * Fixes #4731 -- update the secure memory wiping docs * It's a word! --- docs/limitations.rst | 19 ++++++++++++------- docs/spelling_wordlist.txt | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/limitations.rst b/docs/limitations.rst index 6c58262f8bae..5479a155e04e 100644 --- a/docs/limitations.rst +++ b/docs/limitations.rst @@ -1,16 +1,21 @@ Known security limitations -------------------------- -Lack of secure memory wiping -============================ +Secure memory wiping +==================== `Memory wiping`_ is used to protect secret data or key material from attackers -with access to uninitialized memory. This can be either because the attacker -has some kind of local user access or because of how other software uses -uninitialized memory. +with access to deallocated memory. This is a defense-in-depth measure against +vulnerabilities that leak application memory. -Python exposes no API for us to implement this reliably and as such almost all -software in Python is potentially vulnerable to this attack. The +Many ``cryptography`` APIs which accept ``bytes`` also accept types which +implement the buffer interface. Thus, users wishing to do so can pass +``memoryview`` or another mutable type to ``cryptography`` APIs, and overwrite +the contents once the data is no longer needed. + +However, ``cryptography`` does not clear memory by default, as there is no way +to clear immutable structures such as ``bytes``. As a result, ``cryptography``, +like almost all software in Python is potentially vulnerable to this attack. The `CERT secure coding guidelines`_ assesses this issue as "Severity: medium, Likelihood: unlikely, Remediation Cost: expensive to repair" and we do not consider this a high risk for most users. diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 47d3730150ac..6e4675da058f 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -23,6 +23,7 @@ crypto cryptographic cryptographically Debian +deallocated decrypt decrypts Decrypts From fadd16d10246e2e2a59c54d32abef5301d5e5708 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 16 Jun 2019 09:36:35 -0400 Subject: [PATCH 667/988] Make the rst headers in limitations.rst consistent (#4926) --- docs/limitations.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/limitations.rst b/docs/limitations.rst index 5479a155e04e..cdbf6d2dac88 100644 --- a/docs/limitations.rst +++ b/docs/limitations.rst @@ -1,8 +1,8 @@ Known security limitations --------------------------- +========================== Secure memory wiping -==================== +-------------------- `Memory wiping`_ is used to protect secret data or key material from attackers with access to deallocated memory. This is a defense-in-depth measure against From 503ed06d6d9a7f520cbc1a36c03b5ee61cae0a75 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 22 Jun 2019 16:32:26 -0500 Subject: [PATCH 668/988] Alpine linux now contains python 3.7 (#4929) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5c0aa1944b44..40be4fb5d5d8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -101,9 +101,9 @@ matrix: - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora - - python: 3.6 + - python: 3.7 services: docker - env: TOXENV=py36 DOCKER=pyca/cryptography-runner-alpine:latest + env: TOXENV=py37 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.6 env: TOXENV=docs OPENSSL=1.1.1b From 977f00349d6e0b72325af683c461fd08614e7186 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 3 Jul 2019 18:29:47 -0400 Subject: [PATCH 669/988] we do not use getrandom in nonblocking mode any more (#4934) --- docs/hazmat/backends/openssl.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/backends/openssl.rst b/docs/hazmat/backends/openssl.rst index 07ae74a27469..d31dcae24970 100644 --- a/docs/hazmat/backends/openssl.rst +++ b/docs/hazmat/backends/openssl.rst @@ -106,7 +106,7 @@ seeded from the same pool as ``/dev/random``. +------------------------------------------+------------------------------+ | Windows | ``CryptGenRandom()`` | +------------------------------------------+------------------------------+ -| Linux >= 3.17 with working | ``getrandom(GRND_NONBLOCK)`` | +| Linux >= 3.17 with working | ``getrandom()`` | | ``SYS_getrandom`` syscall | | +------------------------------------------+------------------------------+ | OpenBSD >= 5.6 | ``getentropy()`` | From de7c5e6d539014690d4c0ca445a9b0d13aab7423 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 3 Jul 2019 19:05:03 -0400 Subject: [PATCH 670/988] add ed25519ph x509 test vector (#4933) --- docs/development/test-vectors.rst | 2 ++ vectors/cryptography_vectors/x509/ed25519-rfc8410.pem | 9 +++++++++ 2 files changed, 11 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ed25519-rfc8410.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index a34de3930618..f39e4d3bb189 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -231,6 +231,8 @@ X.509 UTCTime in its validity->not_after. * ``letsencryptx3.pem`` - A subordinate certificate used by Let's Encrypt to issue end entity certificates. +* ``ed25519-rfc8410.pem`` - A certificate containing an ``ed25519ph`` signature + taken from :rfc:`8410`. Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ed25519-rfc8410.pem b/vectors/cryptography_vectors/x509/ed25519-rfc8410.pem new file mode 100644 index 000000000000..3f4b5b2ac79d --- /dev/null +++ b/vectors/cryptography_vectors/x509/ed25519-rfc8410.pem @@ -0,0 +1,9 @@ +-----BEGIN CERTIFICATE----- +MIIBLDCB36ADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBUZX +N0IERlbW8wHhcNMTYwODAxMTIxOTI0WhcNNDAxMjMxMjM1OTU5WjAZMRcwFQYDVQQD +DA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlbgMhAIUg8AmJMKdUdIt93LQ+91oNvzoNJj +ga9OukqY6qm05qo0UwQzAPBgNVHRMBAf8EBTADAQEAMA4GA1UdDwEBAAQEAwIDCDAg +BgNVHQ4BAQAEFgQUmx9e7e0EM4Xk97xiPFl1uQvIuzswBQYDK2VwA0EAryMB/t3J5v +/BzKc9dNZIpDmAgs3babFOTQbs+BolzlDUwsPrdGxO3YNGhW7Ibz3OGhhlxXrCe1Cg +w1AH9efZBw== +-----END CERTIFICATE----- From 60e83b2452ca824006605114b568050cdf3b137d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 6 Jul 2019 16:04:15 -0400 Subject: [PATCH 671/988] more ed25519 vectors, better description of RFC 8410 vector (#4936) * more ed25519 vectors, better description of RFC 8410 vector * typo * oops, doc'd wrong --- docs/development/test-vectors.rst | 12 ++++++++++-- .../x509/{ => ed25519}/ed25519-rfc8410.pem | 0 .../x509/ed25519/root-ed25519.pem | 9 +++++++++ .../x509/ed25519/server-ed25519-cert.pem | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) rename vectors/cryptography_vectors/x509/{ => ed25519}/ed25519-rfc8410.pem (100%) create mode 100644 vectors/cryptography_vectors/x509/ed25519/root-ed25519.pem create mode 100644 vectors/cryptography_vectors/x509/ed25519/server-ed25519-cert.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index f39e4d3bb189..106a81663510 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -231,8 +231,14 @@ X.509 UTCTime in its validity->not_after. * ``letsencryptx3.pem`` - A subordinate certificate used by Let's Encrypt to issue end entity certificates. -* ``ed25519-rfc8410.pem`` - A certificate containing an ``ed25519ph`` signature - taken from :rfc:`8410`. +* ``ed25519-rfc8410.pem`` - A certificate containing an X25519 public key with + an ``ed25519ph`` signature taken from :rfc:`8410`. +* ``root-ed25519.pem`` - An ``ed25519`` root certificate (``ed25519`` signature + with ``ed25519`` public key) from the OpenSSL test suite. + (`root-ed25519.pem`_) +* ``server-ed25519-cert.pem`` - An ``ed25519`` server certificate (RSA + signature with ``ed25519`` public key) from the OpenSSL test suite. + (`server-ed25519-cert.pem`_) Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ @@ -688,3 +694,5 @@ header format (substituting the correct information): .. _`botan`: https://github.com/randombit/botan/blob/57789bdfc55061002b2727d0b32587612829a37c/src/tests/data/pubkey/dh.vec .. _`DHKE`: https://sandilands.info/sgordon/diffie-hellman-secret-key-exchange-with-openssl .. _`Botan's key wrap vectors`: https://github.com/randombit/botan/blob/737f33c09a18500e044dca3e2ae13bd2c08bafdd/src/tests/data/keywrap/nist_key_wrap.vec +.. _`root-ed25519.pem`: https://github.com/openssl/openssl/blob/2a1e2fe145c6eb8e75aa2e1b3a8c3a49384b2852/test/certs/root-ed25519.pem +.. _`server-ed25519-cert.pem`: https://github.com/openssl/openssl/blob/2a1e2fe145c6eb8e75aa2e1b3a8c3a49384b2852/test/certs/server-ed25519-cert.pem diff --git a/vectors/cryptography_vectors/x509/ed25519-rfc8410.pem b/vectors/cryptography_vectors/x509/ed25519/ed25519-rfc8410.pem similarity index 100% rename from vectors/cryptography_vectors/x509/ed25519-rfc8410.pem rename to vectors/cryptography_vectors/x509/ed25519/ed25519-rfc8410.pem diff --git a/vectors/cryptography_vectors/x509/ed25519/root-ed25519.pem b/vectors/cryptography_vectors/x509/ed25519/root-ed25519.pem new file mode 100644 index 000000000000..e509d540110f --- /dev/null +++ b/vectors/cryptography_vectors/x509/ed25519/root-ed25519.pem @@ -0,0 +1,9 @@ +-----BEGIN CERTIFICATE----- +MIIBODCB66ADAgECAgkAhPEIPRzjLZUwBQYDK2VwMBkxFzAVBgNVBAMMDklFVEYg +VGVzdCBEZW1vMB4XDTE3MDQxOTIxMzYzOVoXDTQxMDIxMjIxMzYzOVowGTEXMBUG +A1UEAwwOSUVURiBUZXN0IERlbW8wKjAFBgMrZXADIQAZv0QJaYTN/oVBusFn3DuW +yFCGqjC2tssMXDitcDFm4aNQME4wHQYDVR0OBBYEFKKMwfhuWWDT4DrnXJYsl6jU +SCk8MB8GA1UdIwQYMBaAFKKMwfhuWWDT4DrnXJYsl6jUSCk8MAwGA1UdEwQFMAMB +Af8wBQYDK2VwA0EAa6iEoQZBWB1MhCzASv5HuFM7fR5Nz2/KM7GxYjQWsfvK2Ds1 +jaPSG7Lx4uywIndMafp5CoPoFr6yLBkt+NZLAg== +-----END CERTIFICATE----- diff --git a/vectors/cryptography_vectors/x509/ed25519/server-ed25519-cert.pem b/vectors/cryptography_vectors/x509/ed25519/server-ed25519-cert.pem new file mode 100644 index 000000000000..729ccfbd06f1 --- /dev/null +++ b/vectors/cryptography_vectors/x509/ed25519/server-ed25519-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHTCCAQWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290 +IENBMCAXDTE3MDYxNDIzMzExOVoYDzIxMTcwNjE1MjMzMTE5WjASMRAwDgYDVQQD +DAdFZDI1NTE5MCowBQYDK2VwAyEACkEMj+SRLjZSth3SIrG013cyYVN9frrVnfbN +M2IqaT6jdjB0MB0GA1UdDgQWBBQqd22ipNHF0d+yJjFDgI/Jruq3rjAfBgNVHSME +GDAWgBRwfy6ug2hZmAQjKs3rPhfNJN0BSTAJBgNVHRMEAjAAMBMGA1UdJQQMMAoG +CCsGAQUFBwMBMBIGA1UdEQQLMAmCB0VkMjU1MTkwDQYJKoZIhvcNAQELBQADggEB +AIdNMPRa2sgUW/qtCBWxmi0iVRoazl5pjU35cRl/ahBpI4pL5+fDVYuBzSOgEh7W +6FUVix9mGvY9CK3ZkqrXCGRKeWnKrmdql5jrra5Qew43B+aZqa63639TGWqtm7Rk +rWT14P7gma4K9Ea8eiXcT5NJ8sT7D2BOL0sL2alUmRT+k3YDUxiih7AiTkpo7f2Q +x5l9f8qoRb6Skec+kuMQ4hIjBIe/3C+j4nqq9kDkJs8+VEaW7+7shSQzv0tnzBOl +v5ty89x7LYAbGKvZNi8Z3814AWBWbYTskF0kW2/f6aZDpt239llYDazdErU1dEsS +cc1gKHOG3zgz9wfih55M0dE= +-----END CERTIFICATE----- From 7c2cec85975d8bc79ff09af92d7d7d7077c7b18f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 6 Jul 2019 17:01:54 -0400 Subject: [PATCH 672/988] fix inaccurate ed25519 vector docs (#4938) --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 106a81663510..41fb9dfb6533 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -232,7 +232,7 @@ X.509 * ``letsencryptx3.pem`` - A subordinate certificate used by Let's Encrypt to issue end entity certificates. * ``ed25519-rfc8410.pem`` - A certificate containing an X25519 public key with - an ``ed25519ph`` signature taken from :rfc:`8410`. + an ``ed25519`` signature taken from :rfc:`8410`. * ``root-ed25519.pem`` - An ``ed25519`` root certificate (``ed25519`` signature with ``ed25519`` public key) from the OpenSSL test suite. (`root-ed25519.pem`_) From 7b1391bfd4949140432bd003a8e43e32bfe968c5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 6 Jul 2019 19:01:33 -0400 Subject: [PATCH 673/988] ed25519 support in x509 certificate builder (#4937) * ed25519 support in x509 certificate builder This adds minimal ed25519 support. More to come. * Apply suggestions from code review Co-Authored-By: Alex Gaynor --- CHANGELOG.rst | 2 + docs/x509/reference.rst | 25 +++- .../hazmat/backends/openssl/backend.py | 18 ++- src/cryptography/x509/base.py | 7 +- src/cryptography/x509/oid.py | 5 +- tests/x509/test_x509.py | 125 +++++++++++++++++- 6 files changed, 168 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a8ef5d229b87..9ece6d1db493 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,8 @@ Changelog ``cryptography`` 2.9. * We now ship ``manylinux2010`` wheels in addition to our ``manylinux1`` wheels. +* Added support for ``ed25519`` keys in the + :class:`~cryptography.x509.CertificateBuilder`. .. _v2-7: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 6333a2630b00..38901c7ccf4b 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -338,7 +338,8 @@ X.509 Certificate Object :returns: :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` or :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` .. doctest:: @@ -727,8 +728,10 @@ X.509 Certificate Builder :param public_key: The subject's public key. This can be one of :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` + or + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` .. method:: serial_number(serial_number) @@ -781,13 +784,20 @@ X.509 Certificate Builder :param private_key: The :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`, - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`, :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + , or + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` that will be used to sign the certificate. :param algorithm: The :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that - will be used to generate the signature. + will be used to generate the signature. This must be ``None`` if + the ``private_key`` is an + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` + and an instance of a + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + otherwise. :param backend: Backend that will be used to build the certificate. Must support the @@ -2836,6 +2846,13 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"2.16.840.1.101.3.4.3.2"``. This is a SHA256 digest signed by a DSA key. + .. attribute:: ED25519 + + .. versionadded:: 2.8 + + Corresponds to the dotted string ``"1.3.101.112"``. This is a signature + using an ed25519 key. + .. class:: ExtendedKeyUsageOID diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ca0a11bd3ba6..c24d334abf6f 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -798,7 +798,12 @@ def create_x509_csr(self, builder, private_key, algorithm): def create_x509_certificate(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateBuilder): raise TypeError('Builder type mismatch.') - if not isinstance(algorithm, hashes.HashAlgorithm): + if isinstance(private_key, ed25519.Ed25519PrivateKey): + if algorithm is not None: + raise ValueError( + "algorithm must be None when signing via ed25519" + ) + elif not isinstance(algorithm, hashes.HashAlgorithm): raise TypeError('Algorithm must be a registered hash algorithm.') if ( @@ -806,11 +811,11 @@ def create_x509_certificate(self, builder, private_key, algorithm): isinstance(private_key, rsa.RSAPrivateKey) ): raise ValueError( - "MD5 is not a supported hash algorithm for EC/DSA certificates" + "MD5 is only (reluctantly) supported for RSA certificates" ) # Resolve the signature algorithm. - evp_md = self._evp_md_non_null_from_algorithm(algorithm) + evp_md = self._evp_md_x509_null_if_ed25519(private_key, algorithm) # Create an empty certificate. x509_cert = self._lib.X509_new() @@ -878,6 +883,13 @@ def create_x509_certificate(self, builder, private_key, algorithm): return _Certificate(self, x509_cert) + def _evp_md_x509_null_if_ed25519(self, private_key, algorithm): + if isinstance(private_key, ed25519.Ed25519PrivateKey): + # OpenSSL requires us to pass NULL for EVP_MD for ed25519 signing + return self._ffi.NULL + else: + return self._evp_md_non_null_from_algorithm(algorithm) + def _set_asn1_time(self, asn1_time, time): if time.year >= 2050: asn1_str = time.strftime('%Y%m%d%H%M%SZ').encode('ascii') diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 63c2e3c6343e..dc7eee9416ef 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -12,7 +12,7 @@ import six from cryptography import utils -from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa +from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa from cryptography.x509.extensions import Extension, ExtensionType from cryptography.x509.name import Name @@ -474,9 +474,10 @@ def public_key(self, key): Sets the requestor's public key (as found in the signing request). """ if not isinstance(key, (dsa.DSAPublicKey, rsa.RSAPublicKey, - ec.EllipticCurvePublicKey)): + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey)): raise TypeError('Expecting one of DSAPublicKey, RSAPublicKey,' - ' or EllipticCurvePublicKey.') + ' EllipticCurvePublicKey, or Ed25519PublicKey.') if self._public_key is not None: raise ValueError('The public key may only be set once.') return CertificateBuilder( diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 1bfe58cabad7..ab01d67b24bd 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -96,6 +96,7 @@ class SignatureAlgorithmOID(object): DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3") DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1") DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2") + ED25519 = ObjectIdentifier("1.3.101.112") _SIG_OIDS_TO_HASH = { @@ -113,7 +114,8 @@ class SignatureAlgorithmOID(object): SignatureAlgorithmOID.ECDSA_WITH_SHA512: hashes.SHA512(), SignatureAlgorithmOID.DSA_WITH_SHA1: hashes.SHA1(), SignatureAlgorithmOID.DSA_WITH_SHA224: hashes.SHA224(), - SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256() + SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(), + SignatureAlgorithmOID.ED25519: None, } @@ -181,6 +183,7 @@ class CertificatePoliciesOID(object): SignatureAlgorithmOID.DSA_WITH_SHA1: "dsa-with-sha1", SignatureAlgorithmOID.DSA_WITH_SHA224: "dsa-with-sha224", SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256", + SignatureAlgorithmOID.ED25519: "ed25519", ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index a4cd70bcc71d..270629183f43 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -24,7 +24,9 @@ DSABackend, EllipticCurveBackend, RSABackend, X509Backend ) from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import dsa, ec, padding, rsa +from cryptography.hazmat.primitives.asymmetric import ( + dsa, ec, ed25519, padding, rsa +) from cryptography.hazmat.primitives.asymmetric.utils import ( decode_dss_signature ) @@ -2130,7 +2132,13 @@ def test_add_invalid_extension_type(self): @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_sign_with_unsupported_hash(self, backend): + @pytest.mark.parametrize( + "algorithm", + [ + object(), None + ] + ) + def test_sign_with_unsupported_hash(self, algorithm, backend): private_key = RSA_KEY_2048.private_key(backend) builder = x509.CertificateBuilder() builder = builder.subject_name( @@ -2148,7 +2156,7 @@ def test_sign_with_unsupported_hash(self, backend): ) with pytest.raises(TypeError): - builder.sign(private_key, object(), backend) + builder.sign(private_key, algorithm, backend) @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @@ -2305,6 +2313,97 @@ def test_build_cert_with_ec_private_key(self, backend): x509.DNSName(u"cryptography.io"), ] + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_build_cert_with_ed25519(self, backend): + issuer_private_key = ed25519.Ed25519PrivateKey.generate() + subject_private_key = ed25519.Ed25519PrivateKey.generate() + + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + subject_private_key.public_key() + ).add_extension( + x509.BasicConstraints(ca=False, path_length=None), True, + ).add_extension( + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + critical=False, + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + cert = builder.sign(issuer_private_key, None, backend) + issuer_private_key.public_key().verify( + cert.signature, cert.tbs_certificate_bytes + ) + assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED25519 + assert cert.signature_hash_algorithm is None + assert isinstance(cert.public_key(), ed25519.Ed25519PublicKey) + assert cert.version is x509.Version.v3 + assert cert.not_valid_before == not_valid_before + assert cert.not_valid_after == not_valid_after + basic_constraints = cert.extensions.get_extension_for_oid( + ExtensionOID.BASIC_CONSTRAINTS + ) + assert basic_constraints.value.ca is False + assert basic_constraints.value.path_length is None + subject_alternative_name = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_ALTERNATIVE_NAME + ) + assert list(subject_alternative_name.value) == [ + x509.DNSName(u"cryptography.io"), + ] + + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) + def test_build_cert_with_public_ed25519_rsa_sig(self, backend): + issuer_private_key = RSA_KEY_2048.private_key(backend) + subject_private_key = ed25519.Ed25519PrivateKey.generate() + + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + subject_private_key.public_key() + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + cert = builder.sign(issuer_private_key, hashes.SHA256(), backend) + issuer_private_key.public_key().verify( + cert.signature, cert.tbs_certificate_bytes, padding.PKCS1v15(), + cert.signature_hash_algorithm + ) + assert cert.signature_algorithm_oid == ( + SignatureAlgorithmOID.RSA_WITH_SHA256 + ) + assert isinstance(cert.signature_hash_algorithm, hashes.SHA256) + assert isinstance(cert.public_key(), ed25519.Ed25519PublicKey) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_build_cert_with_rsa_key_too_small(self, backend): @@ -4201,6 +4300,26 @@ def test_bmpstring_bytes(self, backend): ) +@pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" +) +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestEd25519Certificate(object): + def test_load_pem_cert(self, backend): + cert = _load_cert( + os.path.join("x509", "ed25519", "root-ed25519.pem"), + x509.load_pem_x509_certificate, + backend + ) + # self-signed, so this will work + cert.public_key().verify(cert.signature, cert.tbs_certificate_bytes) + assert isinstance(cert, x509.Certificate) + assert cert.serial_number == 9579446940964433301 + assert cert.signature_hash_algorithm is None + assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED25519 + + def test_random_serial_number(monkeypatch): sample_data = os.urandom(20) From a15986844e3ebd71efb7b8183733dd661ce75768 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 6 Jul 2019 19:11:36 -0400 Subject: [PATCH 674/988] prevaricate more about anyextendedkeyusage (#4939) --- docs/x509/reference.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 38901c7ccf4b..7156ab8cb65f 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2895,7 +2895,12 @@ instances. The following common OIDs are available as constants. .. versionadded:: 2.0 Corresponds to the dotted string ``"2.5.29.37.0"``. This is used to - denote that a certificate may be used for _any_ purposes. + denote that a certificate may be used for _any_ purposes. However, + :rfc:`5280` additionally notes that applications that require the + presence of a particular purpose _MAY_ reject certificates that include + the ``anyExtendedKeyUsage`` OID but not the particular OID expected for + the application. Therefore, the presence of this OID does not mean a + given application will accept the certificate for all purposes. .. class:: AuthorityInformationAccessOID From 1e8c5a64190db6611889f45f7f8af543b291383b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 6 Jul 2019 21:20:45 -0400 Subject: [PATCH 675/988] Write a test for an uncovered line (#4940) --- tests/x509/test_x509.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 270629183f43..cd756b6b8633 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2158,6 +2158,30 @@ def test_sign_with_unsupported_hash(self, algorithm, backend): with pytest.raises(TypeError): builder.sign(private_key, algorithm, backend) + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_sign_with_unsupported_hash_ed25519(self, backend): + private_key = ed25519.Ed25519PrivateKey.generate() + builder = x509.CertificateBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).serial_number( + 1 + ).public_key( + private_key.public_key() + ).not_valid_before( + datetime.datetime(2002, 1, 1, 12, 1) + ).not_valid_after( + datetime.datetime(2032, 1, 1, 12, 1) + ) + + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_sign_rsa_with_md5(self, backend): From 9a09f9690890c4b6fa6d4d1625e78dcbaffbf734 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Mon, 8 Jul 2019 16:42:01 -0400 Subject: [PATCH 676/988] Fix some backend feature checks in tests (#4931) * Remove irrelevant DHBackend test conditions DHBackend provides functions for plain finite-field Diffie-Hellman. X25519 and X448 are their own algorithms, and Ed25519 and Ed448 aren't even Diffie-Hellman primitives. * Add missing backend support checks. Some new AES and EC tests did not check for whether the corresponding mode or curve was supported by the backend. * Add a DummyMode for coverage --- tests/hazmat/primitives/test_aes.py | 10 +++++++--- tests/hazmat/primitives/test_ec.py | 4 +++- tests/hazmat/primitives/test_ed25519.py | 3 --- tests/hazmat/primitives/test_ed448.py | 3 --- tests/hazmat/primitives/test_x25519.py | 3 --- tests/hazmat/primitives/test_x448.py | 3 --- tests/wycheproof/test_eddsa.py | 2 -- tests/wycheproof/test_x25519.py | 2 -- 8 files changed, 10 insertions(+), 20 deletions(-) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index 565cc11dd4df..f1d434f18516 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -13,6 +13,7 @@ from cryptography.hazmat.primitives.ciphers import algorithms, base, modes from .utils import _load_all_params, generate_aead_test, generate_encrypt_test +from ...doubles import DummyMode from ...utils import load_nist_vectors @@ -484,14 +485,17 @@ def test_buffer_protocol(self, backend): modes.CFB(bytearray(b"\x00" * 16)), modes.CFB8(bytearray(b"\x00" * 16)), modes.XTS(bytearray(b"\x00" * 16)), + # Add a dummy mode for coverage of the cipher_supported check. + DummyMode(), ] ) @pytest.mark.requires_backend_interface(interface=CipherBackend) def test_buffer_protocol_alternate_modes(mode, backend): data = bytearray(b"sixteen_byte_msg") - cipher = base.Cipher( - algorithms.AES(bytearray(os.urandom(32))), mode, backend - ) + key = algorithms.AES(bytearray(os.urandom(32))) + if not backend.cipher_supported(key, mode): + pytest.skip("AES in {} mode not supported".format(mode.name)) + cipher = base.Cipher(key, mode, backend) enc = cipher.encryptor() ct = enc.update(data) + enc.finalize() dec = cipher.decryptor() diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index cd30223c3426..922a25f09437 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -1070,11 +1070,12 @@ def test_public_bytes_pkcs1_unsupported(self, backend): load_nist_vectors ) ) - def test_from_encoded_point_compressed(self, vector): + def test_from_encoded_point_compressed(self, vector, backend): curve = { b"SECP256R1": ec.SECP256R1(), b"SECP256K1": ec.SECP256K1(), }[vector["curve"]] + _skip_curve_unsupported(backend, curve) point = binascii.unhexlify(vector["point"]) pn = ec.EllipticCurvePublicKey.from_encoded_point(curve, point) public_num = pn.public_numbers() @@ -1155,6 +1156,7 @@ def test_serialize_point(self, vector, backend): b"SECP256R1": ec.SECP256R1(), b"SECP256K1": ec.SECP256K1(), }[vector["curve"]] + _skip_curve_unsupported(backend, curve) point = binascii.unhexlify(vector["point"]) key = ec.EllipticCurvePublicKey.from_encoded_point(curve, point) key2 = ec.EllipticCurvePublicKey.from_encoded_point( diff --git a/tests/hazmat/primitives/test_ed25519.py b/tests/hazmat/primitives/test_ed25519.py index 8a2d3b07a652..aecc85721641 100644 --- a/tests/hazmat/primitives/test_ed25519.py +++ b/tests/hazmat/primitives/test_ed25519.py @@ -10,7 +10,6 @@ import pytest from cryptography.exceptions import InvalidSignature, _Reasons -from cryptography.hazmat.backends.interfaces import DHBackend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.ed25519 import ( Ed25519PrivateKey, Ed25519PublicKey @@ -47,7 +46,6 @@ def load_ed25519_vectors(vector_data): only_if=lambda backend: not backend.ed25519_supported(), skip_message="Requires OpenSSL without Ed25519 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) def test_ed25519_unsupported(backend): with raises_unsupported_algorithm( _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM @@ -69,7 +67,6 @@ def test_ed25519_unsupported(backend): only_if=lambda backend: backend.ed25519_supported(), skip_message="Requires OpenSSL with Ed25519 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) class TestEd25519Signing(object): @pytest.mark.parametrize( "vector", diff --git a/tests/hazmat/primitives/test_ed448.py b/tests/hazmat/primitives/test_ed448.py index 28d92c70ca28..b02f821a80cb 100644 --- a/tests/hazmat/primitives/test_ed448.py +++ b/tests/hazmat/primitives/test_ed448.py @@ -10,7 +10,6 @@ import pytest from cryptography.exceptions import InvalidSignature, _Reasons -from cryptography.hazmat.backends.interfaces import DHBackend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.ed448 import ( Ed448PrivateKey, Ed448PublicKey @@ -25,7 +24,6 @@ only_if=lambda backend: not backend.ed448_supported(), skip_message="Requires OpenSSL without Ed448 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) def test_ed448_unsupported(backend): with raises_unsupported_algorithm( _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM @@ -47,7 +45,6 @@ def test_ed448_unsupported(backend): only_if=lambda backend: backend.ed448_supported(), skip_message="Requires OpenSSL with Ed448 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) class TestEd448Signing(object): @pytest.mark.parametrize( "vector", diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index 17a911548a31..8bdc6b49c7d7 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -11,7 +11,6 @@ from cryptography import utils from cryptography.exceptions import _Reasons -from cryptography.hazmat.backends.interfaces import DHBackend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x25519 import ( X25519PrivateKey, X25519PublicKey @@ -26,7 +25,6 @@ only_if=lambda backend: not backend.x25519_supported(), skip_message="Requires OpenSSL without X25519 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) def test_x25519_unsupported(backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): X25519PublicKey.from_public_bytes(b"0" * 32) @@ -42,7 +40,6 @@ def test_x25519_unsupported(backend): only_if=lambda backend: backend.x25519_supported(), skip_message="Requires OpenSSL with X25519 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) class TestX25519Exchange(object): @pytest.mark.parametrize( "vector", diff --git a/tests/hazmat/primitives/test_x448.py b/tests/hazmat/primitives/test_x448.py index 817de76f26c6..472d49cda67b 100644 --- a/tests/hazmat/primitives/test_x448.py +++ b/tests/hazmat/primitives/test_x448.py @@ -10,7 +10,6 @@ import pytest from cryptography.exceptions import _Reasons -from cryptography.hazmat.backends.interfaces import DHBackend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x448 import ( X448PrivateKey, X448PublicKey @@ -25,7 +24,6 @@ only_if=lambda backend: not backend.x448_supported(), skip_message="Requires OpenSSL without X448 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) def test_x448_unsupported(backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM): X448PublicKey.from_public_bytes(b"0" * 56) @@ -41,7 +39,6 @@ def test_x448_unsupported(backend): only_if=lambda backend: backend.x448_supported(), skip_message="Requires OpenSSL with X448 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) class TestX448Exchange(object): @pytest.mark.parametrize( "vector", diff --git a/tests/wycheproof/test_eddsa.py b/tests/wycheproof/test_eddsa.py index 40cb49a323eb..5ae87e09c93a 100644 --- a/tests/wycheproof/test_eddsa.py +++ b/tests/wycheproof/test_eddsa.py @@ -9,7 +9,6 @@ import pytest from cryptography.exceptions import InvalidSignature -from cryptography.hazmat.backends.interfaces import DHBackend from cryptography.hazmat.primitives.asymmetric.ed25519 import ( Ed25519PublicKey ) @@ -19,7 +18,6 @@ only_if=lambda backend: backend.ed25519_supported(), skip_message="Requires OpenSSL with Ed25519 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) @pytest.mark.wycheproof_tests( "eddsa_test.json", ) diff --git a/tests/wycheproof/test_x25519.py b/tests/wycheproof/test_x25519.py index 0727ec39de2e..991daaa44141 100644 --- a/tests/wycheproof/test_x25519.py +++ b/tests/wycheproof/test_x25519.py @@ -8,7 +8,6 @@ import pytest -from cryptography.hazmat.backends.interfaces import DHBackend from cryptography.hazmat.primitives.asymmetric.x25519 import ( X25519PrivateKey, X25519PublicKey ) @@ -18,7 +17,6 @@ only_if=lambda backend: backend.x25519_supported(), skip_message="Requires OpenSSL with X25519 support" ) -@pytest.mark.requires_backend_interface(interface=DHBackend) @pytest.mark.wycheproof_tests("x25519_test.json") def test_x25519(backend, wycheproof): assert list(wycheproof.testgroup.items()) == [("curve", "curve25519")] From cd59bd275ecc484b1662c86ae9ef0a64eb17d00f Mon Sep 17 00:00:00 2001 From: Jeff Yang Date: Mon, 8 Jul 2019 16:44:11 -0400 Subject: [PATCH 677/988] add class methods for poly1305 sign verify operations (#4932) --- CHANGELOG.rst | 7 +++ docs/hazmat/primitives/mac/poly1305.rst | 45 +++++++++++++++++++ .../hazmat/primitives/poly1305.py | 12 +++++ tests/hazmat/primitives/test_poly1305.py | 27 +++++++++++ 4 files changed, 91 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9ece6d1db493..2421efeef456 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,13 @@ Changelog .. note:: This version is not yet released and is under active development. +* Added class methods + :meth:`Poly1305.generate_tag + ` + and + :meth:`Poly1305.verify_tag + ` + for Poly1305 sign and verify operations. * Deprecated support for OpenSSL 1.0.1. Support will be removed in ``cryptography`` 2.9. * We now ship ``manylinux2010`` wheels in addition to our ``manylinux1`` diff --git a/docs/hazmat/primitives/mac/poly1305.rst b/docs/hazmat/primitives/mac/poly1305.rst index 1d0753c6e831..7504a076e81b 100644 --- a/docs/hazmat/primitives/mac/poly1305.rst +++ b/docs/hazmat/primitives/mac/poly1305.rst @@ -85,3 +85,48 @@ messages allows an attacker to forge tags. Poly1305 is described in :return bytes: The message authentication code as bytes. :raises cryptography.exceptions.AlreadyFinalized: + + .. classmethod:: generate_tag(key, data) + + A single step alternative to do sign operations. Returns the message + authentication code as ``bytes`` for the given ``key`` and ``data``. + + :param key: Secret key as ``bytes``. + :type key: :term:`bytes-like` + :param data: The bytes to hash and authenticate. + :type data: :term:`bytes-like` + :return bytes: The message authentication code as bytes. + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if + the version of OpenSSL ``cryptography`` is compiled against does not + support this algorithm. + :raises TypeError: This exception is raised if ``key`` or ``data`` are + not ``bytes``. + + .. doctest:: + + >>> poly1305.Poly1305.generate_tag(key, b"message to authenticate") + b'T\xae\xff3\xbdW\xef\xd5r\x01\xe2n=\xb7\xd2h' + + .. classmethod:: verify_tag(key, data, tag) + + A single step alternative to do verify operations. Securely compares the + MAC to ``tag``, using the given ``key`` and ``data``. + + :param key: Secret key as ``bytes``. + :type key: :term:`bytes-like` + :param data: The bytes to hash and authenticate. + :type data: :term:`bytes-like` + :param bytes tag: The bytes to compare against. + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if + the version of OpenSSL ``cryptography`` is compiled against does not + support this algorithm. + :raises TypeError: This exception is raised if ``key``, ``data`` or + ``tag`` are not ``bytes``. + :raises cryptography.exceptions.InvalidSignature: If tag does not match. + + .. doctest:: + + >>> poly1305.Poly1305.verify_tag(key, b"message to authenticate", b"an incorrect tag") + Traceback (most recent call last): + ... + cryptography.exceptions.InvalidSignature: Value did not match computed tag. diff --git a/src/cryptography/hazmat/primitives/poly1305.py b/src/cryptography/hazmat/primitives/poly1305.py index 02b6629dee53..d92f62ad4339 100644 --- a/src/cryptography/hazmat/primitives/poly1305.py +++ b/src/cryptography/hazmat/primitives/poly1305.py @@ -41,3 +41,15 @@ def verify(self, tag): ctx, self._ctx = self._ctx, None ctx.verify(tag) + + @classmethod + def generate_tag(cls, key, data): + p = Poly1305(key) + p.update(data) + return p.finalize() + + @classmethod + def verify_tag(cls, key, data, tag): + p = Poly1305(key) + p.update(data) + p.verify(tag) diff --git a/tests/hazmat/primitives/test_poly1305.py b/tests/hazmat/primitives/test_poly1305.py index 71495ff7e08e..edca46230fe7 100644 --- a/tests/hazmat/primitives/test_poly1305.py +++ b/tests/hazmat/primitives/test_poly1305.py @@ -47,6 +47,9 @@ def test_vectors(self, vector, backend): poly.update(msg) assert poly.finalize() == tag + assert Poly1305.generate_tag(key, msg) == tag + Poly1305.verify_tag(key, msg, tag) + def test_key_with_no_additional_references(self, backend): poly = Poly1305(os.urandom(32)) assert len(poly.finalize()) == 16 @@ -66,6 +69,9 @@ def test_reject_unicode(self, backend): with pytest.raises(TypeError): poly.update(u'') + with pytest.raises(TypeError): + Poly1305.generate_tag(b"0" * 32, u'') + def test_verify(self, backend): poly = Poly1305(b"0" * 32) poly.update(b"msg") @@ -78,6 +84,8 @@ def test_verify(self, backend): poly2.update(b"msg") poly2.verify(tag) + Poly1305.verify_tag(b"0" * 32, b"msg", tag) + def test_invalid_verify(self, backend): poly = Poly1305(b"0" * 32) poly.update(b"msg") @@ -89,22 +97,37 @@ def test_invalid_verify(self, backend): with pytest.raises(InvalidSignature): p2.verify(b"\x00" * 16) + with pytest.raises(InvalidSignature): + Poly1305.verify_tag(b"0" * 32, b"msg", b"\x00" * 16) + def test_verify_reject_unicode(self, backend): poly = Poly1305(b"0" * 32) with pytest.raises(TypeError): poly.verify(u'') + with pytest.raises(TypeError): + Poly1305.verify_tag(b"0" * 32, b"msg", u'') + def test_invalid_key_type(self, backend): with pytest.raises(TypeError): Poly1305(object()) + with pytest.raises(TypeError): + Poly1305.generate_tag(object(), b"msg") + def test_invalid_key_length(self, backend): with pytest.raises(ValueError): Poly1305(b"0" * 31) + with pytest.raises(ValueError): + Poly1305.generate_tag(b"0" * 31, b"msg") + with pytest.raises(ValueError): Poly1305(b"0" * 33) + with pytest.raises(ValueError): + Poly1305.generate_tag(b"0" * 33, b"msg") + def test_buffer_protocol(self, backend): key = binascii.unhexlify( b"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cb" @@ -123,3 +146,7 @@ def test_buffer_protocol(self, backend): assert poly.finalize() == binascii.unhexlify( b"4541669a7eaaee61e708dc7cbcc5eb62" ) + + assert Poly1305.generate_tag(key, msg) == binascii.unhexlify( + b"4541669a7eaaee61e708dc7cbcc5eb62" + ) From e1fcc6e34ef3136fbabaf2e7a21307d4b8784025 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 9 Jul 2019 08:00:43 -0400 Subject: [PATCH 678/988] add bindings to parse and create challenge passwords in X509 CSRs (#4943) * add bindings to parse and create challenge passwords in X509 CSRs * moved away from the 1.1.0 section --- src/_cffi_src/openssl/asn1.py | 5 ++++- src/_cffi_src/openssl/x509.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/asn1.py b/src/_cffi_src/openssl/asn1.py index 82bf79792fe2..3e148ce0f355 100644 --- a/src/_cffi_src/openssl/asn1.py +++ b/src/_cffi_src/openssl/asn1.py @@ -27,7 +27,10 @@ typedef ... ASN1_OBJECT; typedef struct asn1_string_st ASN1_STRING; typedef struct asn1_string_st ASN1_UTF8STRING; -typedef ... ASN1_TYPE; +typedef struct { + int type; + ...; +} ASN1_TYPE; typedef ... ASN1_GENERALIZEDTIME; typedef ... ASN1_ENUMERATED; typedef ... ASN1_NULL; diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index d1c8699ff71c..b48f3179df53 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -29,6 +29,7 @@ ...; } X509_ALGOR; +typedef ... X509_ATTRIBUTE; typedef ... X509_EXTENSION; typedef ... X509_EXTENSIONS; typedef ... X509_REQ; @@ -87,6 +88,12 @@ int X509_REQ_print_ex(BIO *, X509_REQ *, unsigned long, unsigned long); int X509_REQ_add_extensions(X509_REQ *, X509_EXTENSIONS *); X509_EXTENSIONS *X509_REQ_get_extensions(X509_REQ *); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *, int); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *, const ASN1_OBJECT *, int); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *, int, int, void *); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *, int); +int X509_REQ_add1_attr_by_txt(X509_REQ *, const char *, int, + const unsigned char *, int); int X509V3_EXT_print(BIO *, X509_EXTENSION *, unsigned long, int); ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *); From 784676de3381f039f95f998505d45fb9d56bd300 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 9 Jul 2019 08:10:06 -0400 Subject: [PATCH 679/988] add x509 CSR with challenge password (#4942) --- docs/development/test-vectors.rst | 2 ++ .../x509/requests/challenge.pem | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/requests/challenge.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 41fb9dfb6533..f43872155a9c 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -431,6 +431,8 @@ Custom X.509 Request Vectors critical. * ``invalid_signature.pem`` - A certificate signing request for an RSA 1024 bit key containing an invalid signature with correct padding. +* ``challenge.pem`` - A certificate signing request for an RSA 2048 bit key + containing a challenge password. Custom X.509 Certificate Revocation List Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/requests/challenge.pem b/vectors/cryptography_vectors/x509/requests/challenge.pem new file mode 100644 index 000000000000..71ff39f24daa --- /dev/null +++ b/vectors/cryptography_vectors/x509/requests/challenge.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICcDCCAVgCAQAwDTELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCb+ec0zYAYLzk/MDdDJYvzdvEO2ZUrBYM6z1r8NedwpJfxUWqC +hvK1cpc9EbQeCwS1eooTIGoNveeCrwL+pWdmf1sh6gz7SsxdN/07nyhSM8M6Xkec ++tGrjyi1H/N1afwWXox3WcvBNbxu3Df5RKLDb0yt9aqhmJylbl/tbvgJesXymwmp +Rc1vXL0fOedUtuAJ3xQ15M0pgLF8qDn4lySJz25x76pMYPeN5/a7x+SR/jj81kep +VaVpuh/2hePV5uwUX3uWoj5sAkrBCifi4NPge0Npd6KeKVvXytLOymH/4+WvV719 +wCO+MyrkhpdHSakJDTIaQIxsqVeVVKdPLAPJAgMBAAGgHjAcBgkqhkiG9w0BCQcx +DwwNY2hhbGxlbmdlIG1lITANBgkqhkiG9w0BAQsFAAOCAQEAMmgeSa8szbjPFD/4 +vcPBr/vBEROFGgL8mX3o5pF9gpr7nRjhLKBkgJvlRm6Ma3Xvdfc/r5Hp2ZBTA7sZ +ZYhyeezGfCQN/Qhda1v+sCwG58IjvGfCSS7Y5tGlEBQ4MDf0Q7PYPSxaNUEBH7vo ++M7U+nFuNSmyWlt6SFBSkohZkWoVSGx3KsAO+SAHYZ7JtqsAS/dm7Dflp8KxeDg7 +wzGBDQRpGF4CpI1VQjGSJQXSEdD+J7mtvBEOD34abRfV6zOUGzOOo3NWE6wNpYgt +0A7gVlzSYpdwqjBdvACfXR2r/mu+4KkAvYh8WwCiTcYgGjl2pT1bO4hEmcJ0RSWy +/fGD8Q== +-----END CERTIFICATE REQUEST----- From 25efc646152c3b9e3e4d2ffcd81ccb52055782f3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 27 Jul 2019 14:42:42 -0500 Subject: [PATCH 680/988] some test improvements (#4954) detect md5 and don't generate short RSA keys these changes will help if we actually try to run FIPS enabled --- tests/x509/test_x509.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index cd756b6b8633..20e23d5f769a 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2184,6 +2184,10 @@ def test_sign_with_unsupported_hash_ed25519(self, backend): @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.MD5()), + skip_message="Requires OpenSSL with MD5 support" + ) def test_sign_rsa_with_md5(self, backend): private_key = RSA_KEY_2048.private_key(backend) builder = x509.CertificateBuilder() @@ -2205,6 +2209,10 @@ def test_sign_rsa_with_md5(self, backend): @pytest.mark.requires_backend_interface(interface=DSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.MD5()), + skip_message="Requires OpenSSL with MD5 support" + ) def test_sign_dsa_with_md5(self, backend): private_key = DSA_KEY_2048.private_key(backend) builder = x509.CertificateBuilder() @@ -2226,6 +2234,10 @@ def test_sign_dsa_with_md5(self, backend): @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.MD5()), + skip_message="Requires OpenSSL with MD5 support" + ) def test_sign_ec_with_md5(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) private_key = EC_KEY_SECP256R1.private_key(backend) @@ -2891,6 +2903,10 @@ def test_sign_invalid_hash_algorithm(self, backend): builder.sign(private_key, 'NotAHash', backend) @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.MD5()), + skip_message="Requires OpenSSL with MD5 support" + ) def test_sign_rsa_with_md5(self, backend): private_key = RSA_KEY_2048.private_key(backend) @@ -2903,6 +2919,10 @@ def test_sign_rsa_with_md5(self, backend): assert isinstance(request.signature_hash_algorithm, hashes.MD5) @pytest.mark.requires_backend_interface(interface=DSABackend) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.MD5()), + skip_message="Requires OpenSSL with MD5 support" + ) def test_sign_dsa_with_md5(self, backend): private_key = DSA_KEY_2048.private_key(backend) builder = x509.CertificateSigningRequestBuilder().subject_name( @@ -2914,6 +2934,10 @@ def test_sign_dsa_with_md5(self, backend): builder.sign(private_key, hashes.MD5(), backend) @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) + @pytest.mark.supported( + only_if=lambda backend: backend.hash_supported(hashes.MD5()), + skip_message="Requires OpenSSL with MD5 support" + ) def test_sign_ec_with_md5(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) private_key = EC_KEY_SECP256R1.private_key(backend) @@ -3375,7 +3399,7 @@ def test_extended_key_usage(self, backend): @pytest.mark.requires_backend_interface(interface=RSABackend) def test_rsa_key_too_small(self, backend): - private_key = rsa.generate_private_key(65537, 512, backend) + private_key = RSA_KEY_512.private_key(backend) builder = x509.CertificateSigningRequestBuilder() builder = builder.subject_name( x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) From 85d6043f21bbc8bc3f97f8a8be25581f8bc7f376 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 27 Jul 2019 16:44:53 -0500 Subject: [PATCH 681/988] fix osrandom/builtin switching methods for 1.1.0+ (#4955) * fix osrandom/builtin switching methods for 1.1.0+ In 1.1.0 RAND_cleanup became a no-op. This broke changing to the builtin random engine via activate_builtin_random(). Fixed by directly calling RAND_set_rand_method. This works on 1.0.x and 1.1.x * missed an assert --- src/_cffi_src/openssl/rand.py | 6 +++--- src/cryptography/hazmat/backends/openssl/backend.py | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/_cffi_src/openssl/rand.py b/src/_cffi_src/openssl/rand.py index 6865392790ee..c0cd68365960 100644 --- a/src/_cffi_src/openssl/rand.py +++ b/src/_cffi_src/openssl/rand.py @@ -9,10 +9,13 @@ """ TYPES = """ +typedef ... RAND_METHOD; + static const long Cryptography_HAS_EGD; """ FUNCTIONS = """ +int RAND_set_rand_method(const RAND_METHOD *); void RAND_add(const void *, int, double); int RAND_status(void); int RAND_bytes(unsigned char *, int); @@ -21,9 +24,6 @@ 1 we'll just lie about the signature to preserve compatibility for pyOpenSSL (which calls this in its rand.py as of mid-2016) */ void ERR_load_RAND_strings(void); - -/* RAND_cleanup became a macro in 1.1.0 */ -void RAND_cleanup(void); """ CUSTOMIZATIONS = """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index c24d334abf6f..ca8b1b62d05a 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -133,8 +133,9 @@ def activate_builtin_random(self): e = self._lib.ENGINE_get_default_RAND() if e != self._ffi.NULL: self._lib.ENGINE_unregister_RAND(e) - # Reset the RNG to use the new engine. - self._lib.RAND_cleanup() + # Reset the RNG to use the built-in. + res = self._lib.RAND_set_rand_method(self._ffi.NULL) + self.openssl_assert(res == 1) # decrement the structural reference from get_default_RAND res = self._lib.ENGINE_finish(e) self.openssl_assert(res == 1) @@ -167,8 +168,9 @@ def activate_osrandom_engine(self): # Set the engine as the default RAND provider. res = self._lib.ENGINE_set_default_RAND(e) self.openssl_assert(res == 1) - # Reset the RNG to use the new engine. - self._lib.RAND_cleanup() + # Reset the RNG to use the engine + res = self._lib.RAND_set_rand_method(self._ffi.NULL) + self.openssl_assert(res == 1) def osrandom_engine_implementation(self): buf = self._ffi.new("char[]", 64) From 2d3b420383fc6aa16675e04caec56ca6b16069a1 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Sun, 28 Jul 2019 13:06:40 -0400 Subject: [PATCH 682/988] Remove asn1crypto dependency (#4941) * Remove non-test dependencies on asn1crypto. cryptography.io actually contains two OpenSSL bindings right now, the expected cffi one, and an optional one hidden in asn1crypto. asn1crypto contains a lot of things that cryptography.io doesn't use, including a BER parser and a hand-rolled and not constant-time EC implementation. Instead, check in a much small DER-only parser in cryptography/hazmat. A quick benchmark suggests this parser is also faster than asn1crypto: from __future__ import absolute_import, division, print_function import timeit print(timeit.timeit( "decode_dss_signature(sig)", setup=r""" from cryptography.hazmat.primitives.asymmetric.utils import decode_dss_signature sig=b"\x30\x2d\x02\x15\x00\xb5\xaf\x30\x78\x67\xfb\x8b\x54\x39\x00\x13\xcc\x67\x02\x0d\xdf\x1f\x2c\x0b\x81\x02\x14\x62\x0d\x3b\x22\xab\x50\x31\x44\x0c\x3e\x35\xea\xb6\xf4\x81\x29\x8f\x9e\x9f\x08" """, number=10000)) Python 2.7: asn1crypto: 0.25 _der.py: 0.098 Python 3.5: asn1crypto: 0.17 _der.py: 0.10 * Remove test dependencies on asn1crypto. The remaining use of asn1crypto was some sanity-checking of Certificates. Add a minimal X.509 parser to extract the relevant fields. * Add a read_single_element helper function. The outermost read is a little tedious. * Address flake8 warnings * Fix test for long-form vs short-form lengths. Testing a zero length trips both this check and the non-minimal long form check. Use a one-byte length to cover the missing branch. * Remove support for negative integers. These never come up in valid signatures. Note, however, this does change public API. * Update src/cryptography/hazmat/primitives/asymmetric/utils.py Co-Authored-By: Alex Gaynor * Review comments * Avoid hardcoding the serialization of NULL in decode_asn1.py too. --- .azure-pipelines/wheel-builder.yml | 6 +- setup.py | 1 - src/cryptography/hazmat/_der.py | 150 ++++++++++++ .../hazmat/backends/openssl/backend.py | 18 +- .../hazmat/backends/openssl/decode_asn1.py | 24 +- .../hazmat/primitives/asymmetric/utils.py | 26 +-- src/cryptography/x509/extensions.py | 24 +- tests/hazmat/primitives/test_asym_utils.py | 9 +- tests/hazmat/test_der.py | 217 ++++++++++++++++++ tests/x509/test_x509.py | 98 ++++++-- 10 files changed, 509 insertions(+), 64 deletions(-) create mode 100644 src/cryptography/hazmat/_der.py create mode 100644 tests/hazmat/test_der.py diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index edd1dd51ecdb..b3ec8ee0d181 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -37,7 +37,7 @@ jobs: displayName: Update wheel to the latest version - script: .venv/bin/pip install -U pip==10.0.1 displayName: Downgrade pip lol - - script: .venv/bin/pip install cffi six asn1crypto ipaddress "enum34; python_version < '3'" + - script: .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" displayName: Install our Python dependencies - script: | @@ -106,7 +106,7 @@ jobs: displayName: Create virtualenv - script: .venv/bin/pip install -U pip==10.0.1 displayName: Downgrade pip lol - - script: .venv/bin/pip install cffi six asn1crypto ipaddress enum34 + - script: .venv/bin/pip install cffi six ipaddress enum34 displayName: Install our Python dependencies - script: | set -e @@ -207,7 +207,7 @@ jobs: steps: - script: '"C:/Python%PYTHON_VERSION%/python.exe" -m pip install -U pip==10.0.1' displayName: Downgrade pip lol - - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install wheel cffi six asn1crypto ipaddress enum34' + - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install wheel cffi six ipaddress enum34' displayName: Install wheel and our Python dependencies - script: | set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% diff --git a/setup.py b/setup.py index bf560dd9de6a..8ca985dd6373 100644 --- a/setup.py +++ b/setup.py @@ -233,7 +233,6 @@ def run(self): python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', install_requires=[ - "asn1crypto >= 0.21.0", "six >= 1.4.1", ] + setup_requirements, extras_require={ diff --git a/src/cryptography/hazmat/_der.py b/src/cryptography/hazmat/_der.py new file mode 100644 index 000000000000..3a121a85d22e --- /dev/null +++ b/src/cryptography/hazmat/_der.py @@ -0,0 +1,150 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import six + +from cryptography.utils import int_from_bytes, int_to_bytes + + +# This module contains a lightweight DER encoder and decoder. See X.690 for the +# specification. This module intentionally does not implement the more complex +# BER encoding, only DER. +# +# Note this implementation treats an element's constructed bit as part of the +# tag. This is fine for DER, where the bit is always computable from the type. + + +CONSTRUCTED = 0x20 +CONTEXT_SPECIFIC = 0x80 + +INTEGER = 0x02 +BIT_STRING = 0x03 +OCTET_STRING = 0x04 +NULL = 0x05 +OBJECT_IDENTIFIER = 0x06 +SEQUENCE = 0x10 | CONSTRUCTED +SET = 0x11 | CONSTRUCTED +PRINTABLE_STRING = 0x13 +UTC_TIME = 0x17 +GENERALIZED_TIME = 0x18 + + +class DERReader(object): + def __init__(self, data): + self.data = memoryview(data) + + def is_empty(self): + return len(self.data) == 0 + + def check_empty(self): + if not self.is_empty(): + raise ValueError("Invalid DER input: trailing data") + + def read_byte(self): + if len(self.data) < 1: + raise ValueError("Invalid DER input: insufficient data") + ret = six.indexbytes(self.data, 0) + self.data = self.data[1:] + return ret + + def read_bytes(self, n): + if len(self.data) < n: + raise ValueError("Invalid DER input: insufficient data") + ret = self.data[:n] + self.data = self.data[n:] + return ret + + def read_any_element(self): + tag = self.read_byte() + # Tag numbers 31 or higher are stored in multiple bytes. No supported + # ASN.1 types use such tags, so reject these. + if tag & 0x1f == 0x1f: + raise ValueError("Invalid DER input: unexpected high tag number") + length_byte = self.read_byte() + if length_byte & 0x80 == 0: + # If the high bit is clear, the first length byte is the length. + length = length_byte + else: + # If the high bit is set, the first length byte encodes the length + # of the length. + length_byte &= 0x7f + if length_byte == 0: + raise ValueError( + "Invalid DER input: indefinite length form is not allowed " + "in DER" + ) + length = 0 + for i in range(length_byte): + length <<= 8 + length |= self.read_byte() + if length == 0: + raise ValueError( + "Invalid DER input: length was not minimally-encoded" + ) + if length < 0x80: + # If the length could have been encoded in short form, it must + # not use long form. + raise ValueError( + "Invalid DER input: length was not minimally-encoded" + ) + body = self.read_bytes(length) + return tag, DERReader(body) + + def read_element(self, expected_tag): + tag, body = self.read_any_element() + if tag != expected_tag: + raise ValueError("Invalid DER input: unexpected tag") + return body + + def read_single_element(self, expected_tag): + ret = self.read_element(expected_tag) + self.check_empty() + return ret + + def read_optional_element(self, expected_tag): + if len(self.data) > 0 and six.indexbytes(self.data, 0) == expected_tag: + return self.read_element(expected_tag) + return None + + def as_integer(self): + if len(self.data) == 0: + raise ValueError("Invalid DER input: empty integer contents") + first = six.indexbytes(self.data, 0) + if first & 0x80 == 0x80: + raise ValueError("Negative DER integers are not supported") + # The first 9 bits must not all be zero or all be ones. Otherwise, the + # encoding should have been one byte shorter. + if len(self.data) > 1: + second = six.indexbytes(self.data, 1) + if first == 0 and second & 0x80 == 0: + raise ValueError( + "Invalid DER input: integer not minimally-encoded" + ) + return int_from_bytes(self.data, "big") + + +def encode_der_integer(x): + if not isinstance(x, six.integer_types): + raise ValueError("Value must be an integer") + if x < 0: + raise ValueError("Negative integers are not supported") + n = x.bit_length() // 8 + 1 + return int_to_bytes(x, n) + + +def encode_der(tag, *children): + length = 0 + for child in children: + length += len(child) + chunks = [six.int2byte(tag)] + if length < 0x80: + chunks.append(six.int2byte(length)) + else: + length_bytes = int_to_bytes(length) + chunks.append(six.int2byte(0x80 | len(length_bytes))) + chunks.append(length_bytes) + chunks.extend(children) + return b"".join(chunks) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ca8b1b62d05a..eb6654b0f6b4 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -10,13 +10,14 @@ import itertools from contextlib import contextmanager -import asn1crypto.core - import six from six.moves import range from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat._der import ( + INTEGER, NULL, SEQUENCE, encode_der, encode_der_integer +) from cryptography.hazmat.backends.interfaces import ( CMACBackend, CipherBackend, DERSerializationBackend, DHBackend, DSABackend, EllipticCurveBackend, HMACBackend, HashBackend, PBKDF2HMACBackend, @@ -26,7 +27,7 @@ from cryptography.hazmat.backends.openssl.ciphers import _CipherContext from cryptography.hazmat.backends.openssl.cmac import _CMACContext from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CRL_ENTRY_REASON_ENUM_TO_CODE, _Integers + _CRL_ENTRY_REASON_ENUM_TO_CODE ) from cryptography.hazmat.backends.openssl.dh import ( _DHParameters, _DHPrivateKey, _DHPublicKey, _dh_params_dup @@ -1008,12 +1009,17 @@ def _create_x509_extension(self, handlers, extension): value = _encode_asn1_str_gc(self, extension.value.value) return self._create_raw_x509_extension(extension, value) elif isinstance(extension.value, x509.TLSFeature): - asn1 = _Integers([x.value for x in extension.value]).dump() + asn1 = encode_der( + SEQUENCE, + *[ + encode_der(INTEGER, encode_der_integer(x.value)) + for x in extension.value + ] + ) value = _encode_asn1_str_gc(self, asn1) return self._create_raw_x509_extension(extension, value) elif isinstance(extension.value, x509.PrecertPoison): - asn1 = asn1crypto.core.Null().dump() - value = _encode_asn1_str_gc(self, asn1) + value = _encode_asn1_str_gc(self, encode_der(NULL)) return self._create_raw_x509_extension(extension, value) else: try: diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 75d5844bc110..35295ce392d9 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -7,11 +7,10 @@ import datetime import ipaddress -import asn1crypto.core - import six from cryptography import x509 +from cryptography.hazmat._der import DERReader, INTEGER, NULL, SEQUENCE from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM from cryptography.x509.name import _ASN1_TYPE_TO_ENUM from cryptography.x509.oid import ( @@ -20,10 +19,6 @@ ) -class _Integers(asn1crypto.core.SequenceOf): - _child_spec = asn1crypto.core.Integer - - def _obj2txt(backend, obj): # Set to 80 on the recommendation of # https://www.openssl.org/docs/crypto/OBJ_nid2ln.html#return_values @@ -209,20 +204,25 @@ def parse(self, backend, x509_obj): # to support them in all versions of OpenSSL so we decode them # ourselves. if oid == ExtensionOID.TLS_FEATURE: + # The extension contents are a SEQUENCE OF INTEGERs. data = backend._lib.X509_EXTENSION_get_data(ext) - parsed = _Integers.load(_asn1_string_to_bytes(backend, data)) + data_bytes = _asn1_string_to_bytes(backend, data) + features = DERReader(data_bytes).read_single_element(SEQUENCE) + parsed = [] + while not features.is_empty(): + parsed.append(features.read_element(INTEGER).as_integer()) + # Map the features to their enum value. value = x509.TLSFeature( - [_TLS_FEATURE_TYPE_TO_ENUM[x.native] for x in parsed] + [_TLS_FEATURE_TYPE_TO_ENUM[x] for x in parsed] ) extensions.append(x509.Extension(oid, critical, value)) seen_oids.add(oid) continue elif oid == ExtensionOID.PRECERT_POISON: data = backend._lib.X509_EXTENSION_get_data(ext) - parsed = asn1crypto.core.Null.load( - _asn1_string_to_bytes(backend, data) - ) - assert parsed == asn1crypto.core.Null() + # The contents of the extension must be an ASN.1 NULL. + reader = DERReader(_asn1_string_to_bytes(backend, data)) + reader.read_single_element(NULL).check_empty() extensions.append(x509.Extension( oid, critical, x509.PrecertPoison() )) diff --git a/src/cryptography/hazmat/primitives/asymmetric/utils.py b/src/cryptography/hazmat/primitives/asymmetric/utils.py index 274c1f412065..43d5b9bfcc82 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/utils.py +++ b/src/cryptography/hazmat/primitives/asymmetric/utils.py @@ -4,27 +4,27 @@ from __future__ import absolute_import, division, print_function -from asn1crypto.algos import DSASignature - -import six - from cryptography import utils +from cryptography.hazmat._der import ( + DERReader, INTEGER, SEQUENCE, encode_der, encode_der_integer +) from cryptography.hazmat.primitives import hashes def decode_dss_signature(signature): - data = DSASignature.load(signature, strict=True).native - return data['r'], data['s'] + seq = DERReader(signature).read_single_element(SEQUENCE) + r = seq.read_element(INTEGER).as_integer() + s = seq.read_element(INTEGER).as_integer() + seq.check_empty() + return r, s def encode_dss_signature(r, s): - if ( - not isinstance(r, six.integer_types) or - not isinstance(s, six.integer_types) - ): - raise ValueError("Both r and s must be integers") - - return DSASignature({'r': r, 's': s}).dump() + return encode_der( + SEQUENCE, + encode_der(INTEGER, encode_der_integer(r)), + encode_der(INTEGER, encode_der_integer(s)), + ) class Prehashed(object): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index d25131b8860c..c78c76c2a31a 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -11,11 +11,12 @@ import warnings from enum import Enum -from asn1crypto.keys import PublicKeyInfo - import six from cryptography import utils +from cryptography.hazmat._der import ( + BIT_STRING, DERReader, OBJECT_IDENTIFIER, SEQUENCE +) from cryptography.hazmat.primitives import constant_time, serialization from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePublicKey from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey @@ -47,7 +48,24 @@ def _key_identifier_from_public_key(public_key): serialization.PublicFormat.SubjectPublicKeyInfo ) - data = bytes(PublicKeyInfo.load(serialized)['public_key']) + public_key_info = DERReader(serialized).read_single_element(SEQUENCE) + algorithm = public_key_info.read_element(SEQUENCE) + public_key = public_key_info.read_element(BIT_STRING) + public_key_info.check_empty() + + # Double-check the algorithm structure. + algorithm.read_element(OBJECT_IDENTIFIER) + if not algorithm.is_empty(): + # Skip the optional parameters field. + algorithm.read_any_element() + algorithm.check_empty() + + # BIT STRING contents begin with the number of padding bytes added. It + # must be zero for SubjectPublicKeyInfo structures. + if public_key.read_byte() != 0: + raise ValueError('Invalid public key encoding') + + data = public_key.data return hashlib.sha1(data).digest() diff --git a/tests/hazmat/primitives/test_asym_utils.py b/tests/hazmat/primitives/test_asym_utils.py index d817c651c0d8..b49ca3f2f84a 100644 --- a/tests/hazmat/primitives/test_asym_utils.py +++ b/tests/hazmat/primitives/test_asym_utils.py @@ -31,10 +31,6 @@ def test_dss_signature(): assert sig3 == b"0\x06\x02\x01\x00\x02\x01\x00" assert decode_dss_signature(sig3) == (0, 0) - sig4 = encode_dss_signature(-1, 0) - assert sig4 == b"0\x06\x02\x01\xFF\x02\x01\x00" - assert decode_dss_signature(sig4) == (-1, 0) - def test_encode_dss_non_integer(): with pytest.raises(ValueError): @@ -53,6 +49,11 @@ def test_encode_dss_non_integer(): encode_dss_signature("hello", "world") +def test_encode_dss_negative(): + with pytest.raises(ValueError): + encode_dss_signature(-1, 0) + + def test_decode_dss_trailing_bytes(): with pytest.raises(ValueError): decode_dss_signature(b"0\x06\x02\x01\x01\x02\x01\x01\x00\x00\x00") diff --git a/tests/hazmat/test_der.py b/tests/hazmat/test_der.py new file mode 100644 index 000000000000..d81c0d3e5e02 --- /dev/null +++ b/tests/hazmat/test_der.py @@ -0,0 +1,217 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import pytest + +from cryptography.hazmat._der import ( + DERReader, INTEGER, NULL, OCTET_STRING, SEQUENCE, encode_der, + encode_der_integer +) + + +def test_der_reader_basic(): + reader = DERReader(b"123456789") + assert reader.read_byte() == ord(b"1") + assert reader.read_bytes(1).tobytes() == b"2" + assert reader.read_bytes(4).tobytes() == b"3456" + + with pytest.raises(ValueError): + reader.read_bytes(4) + + assert reader.read_bytes(3).tobytes() == b"789" + + # The input is now empty. + with pytest.raises(ValueError): + reader.read_bytes(1) + with pytest.raises(ValueError): + reader.read_byte() + + +def test_der(): + # This input is the following structure, using + # https://github.com/google/der-ascii + # + # SEQUENCE { + # SEQUENCE { + # NULL {} + # INTEGER { 42 } + # OCTET_STRING { "hello" } + # } + # } + der = b"\x30\x0e\x30\x0c\x05\x00\x02\x01\x2a\x04\x05\x68\x65\x6c\x6c\x6f" + reader = DERReader(der) + with pytest.raises(ValueError): + reader.check_empty() + + # Parse the outer element. + outer = reader.read_element(SEQUENCE) + reader.check_empty() + assert outer.data.tobytes() == der[2:] + + # Parse the outer element with read_any_element. + reader = DERReader(der) + tag, outer2 = reader.read_any_element() + reader.check_empty() + assert tag == SEQUENCE + assert outer2.data.tobytes() == der[2:] + + # Parse the outer element with read_single_element. + outer3 = DERReader(der).read_single_element(SEQUENCE) + assert outer3.data.tobytes() == der[2:] + + # read_single_element rejects trailing data. + with pytest.raises(ValueError): + DERReader(der + der).read_single_element(SEQUENCE) + + # Continue parsing the structure. + inner = outer.read_element(SEQUENCE) + outer.check_empty() + + # Parsing a missing optional element should work. + assert inner.read_optional_element(INTEGER) is None + + null = inner.read_element(NULL) + null.check_empty() + + # Parsing a present optional element should work. + integer = inner.read_optional_element(INTEGER) + assert integer.as_integer() == 42 + + octet_string = inner.read_element(OCTET_STRING) + assert octet_string.data.tobytes() == b"hello" + + # Parsing a missing optional element should work when the input is empty. + inner.check_empty() + assert inner.read_optional_element(INTEGER) is None + + # Re-encode the same structure. + der2 = encode_der( + SEQUENCE, + encode_der( + SEQUENCE, + encode_der(NULL), + encode_der(INTEGER, encode_der_integer(42)), + encode_der(OCTET_STRING, b"hello"), + ) + ) + assert der2 == der + + +@pytest.mark.parametrize( + "length,header", + [ + # Single-byte lengths. + (0, b"\x04\x00"), + (1, b"\x04\x01"), + (2, b"\x04\x02"), + (127, b"\x04\x7f"), + # Long-form lengths. + (128, b"\x04\x81\x80"), + (129, b"\x04\x81\x81"), + (255, b"\x04\x81\xff"), + (0x100, b"\x04\x82\x01\x00"), + (0x101, b"\x04\x82\x01\x01"), + (0xffff, b"\x04\x82\xff\xff"), + (0x10000, b"\x04\x83\x01\x00\x00"), + ] +) +def test_der_lengths(length, header): + body = length * b"a" + der = header + body + + reader = DERReader(der) + element = reader.read_element(OCTET_STRING) + reader.check_empty() + assert element.data.tobytes() == body + + assert encode_der(OCTET_STRING, body) == der + + +@pytest.mark.parametrize( + "bad_input", + [ + # The input ended before the tag. + b"", + # The input ended before the length. + b"\x30", + # The input ended before the second byte of the length. + b"\x30\x81", + # The input ended before the body. + b"\x30\x01", + # The length used long form when it should be short form. + b"\x30\x81\x01\x00", + # The length was not minimally-encoded. + b"\x30\x82\x00\x80" + (0x80 * b"a"), + # Indefinite-length encoding is not valid DER. + b"\x30\x80\x00\x00" + # Tag number (the bottom 5 bits) 31 indicates long form tags, which we + # do not support. + b"\x1f\x00", + b"\x9f\x00", + b"\xbf\x00", + b"\xff\x00", + ] +) +def test_der_reader_bad_input(bad_input): + reader = DERReader(bad_input) + with pytest.raises(ValueError): + reader.read_any_element() + + +def test_der_reader_wrong_tag(): + reader = DERReader(b"\x04\x00") + with pytest.raises(ValueError): + reader.read_element(SEQUENCE) + + +@pytest.mark.parametrize( + "value,der", + [ + (0, b'\x00'), + (1, b'\x01'), + (2, b'\x02'), + (3, b'\x03'), + (127, b'\x7f'), + (128, b'\x00\x80'), + (0x112233445566778899aabbccddeeff, + b'\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff'), + ] +) +def test_integer(value, der): + assert encode_der_integer(value) == der + assert DERReader(der).as_integer() == value + + +@pytest.mark.parametrize( + "bad_input", + [ + # Zero is encoded as b"\x00", not the empty string. + b"", + # Too many leading zeros. + b"\x00\x00", + b"\x00\x7f", + # Too many leading ones. + b"\xff\xff", + b"\xff\x80", + # Negative integers are not supported. + b"\x80", + b"\x81", + b"\x80\x00\x00", + b"\xff", + ] +) +def test_invalid_integer(bad_input): + reader = DERReader(bad_input) + with pytest.raises(ValueError): + reader.as_integer() + + +def test_invalid_integer_encode(): + with pytest.raises(ValueError): + encode_der_integer(-1) + + with pytest.raises(ValueError): + encode_der_integer("not an integer") diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 20e23d5f769a..bb0ad022f3e7 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -6,12 +6,11 @@ from __future__ import absolute_import, division, print_function import binascii +import collections import datetime import ipaddress import os -from asn1crypto.x509 import Certificate - import pytest import pytz @@ -20,6 +19,10 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat._der import ( + BIT_STRING, CONSTRUCTED, CONTEXT_SPECIFIC, DERReader, GENERALIZED_TIME, + INTEGER, OBJECT_IDENTIFIER, PRINTABLE_STRING, SEQUENCE, SET, UTC_TIME +) from cryptography.hazmat.backends.interfaces import ( DSABackend, EllipticCurveBackend, RSABackend, X509Backend ) @@ -65,6 +68,53 @@ def _load_cert(filename, loader, backend): return cert +ParsedCertificate = collections.namedtuple( + "ParsedCertificate", + ["not_before_tag", "not_after_tag", "issuer", "subject"] +) + + +def _parse_cert(der): + # See the Certificate structured, defined in RFC 5280. + cert = DERReader(der).read_single_element(SEQUENCE) + tbs_cert = cert.read_element(SEQUENCE) + # Skip outer signature algorithm + _ = cert.read_element(SEQUENCE) + # Skip signature + _ = cert.read_element(BIT_STRING) + cert.check_empty() + + # Skip version + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 0) + # Skip serialNumber + _ = tbs_cert.read_element(INTEGER) + # Skip inner signature algorithm + _ = tbs_cert.read_element(SEQUENCE) + issuer = tbs_cert.read_element(SEQUENCE) + validity = tbs_cert.read_element(SEQUENCE) + subject = tbs_cert.read_element(SEQUENCE) + # Skip subjectPublicKeyInfo + _ = tbs_cert.read_element(SEQUENCE) + # Skip issuerUniqueID + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 1) + # Skip subjectUniqueID + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 2) + # Skip extensions + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 3) + tbs_cert.check_empty() + + not_before_tag, _ = validity.read_any_element() + not_after_tag, _ = validity.read_any_element() + validity.check_empty() + + return ParsedCertificate( + not_before_tag=not_before_tag, + not_after_tag=not_after_tag, + issuer=issuer, + subject=subject, + ) + + @pytest.mark.requires_backend_interface(interface=X509Backend) class TestCertificateRevocationList(object): def test_load_pem_crl(self, backend): @@ -1587,12 +1637,24 @@ def test_build_cert_printable_string_country_name(self, backend): cert = builder.sign(issuer_private_key, hashes.SHA256(), backend) - parsed = Certificate.load( - cert.public_bytes(serialization.Encoding.DER)) + parsed = _parse_cert(cert.public_bytes(serialization.Encoding.DER)) + subject = parsed.subject + issuer = parsed.issuer + + def read_next_rdn_value_tag(reader): + rdn = reader.read_element(SET) + attribute = rdn.read_element(SEQUENCE) + # Assume each RDN has a single attribute. + rdn.check_empty() + + _ = attribute.read_element(OBJECT_IDENTIFIER) + tag, value = attribute.read_any_element() + attribute.check_empty() + return tag # Check that each value was encoded as an ASN.1 PRINTABLESTRING. - assert parsed.subject.chosen[0][0]['value'].chosen.tag == 19 - assert parsed.issuer.chosen[0][0]['value'].chosen.tag == 19 + assert read_next_rdn_value_tag(subject) == PRINTABLE_STRING + assert read_next_rdn_value_tag(issuer) == PRINTABLE_STRING if ( # This only works correctly in OpenSSL 1.1.0f+ and 1.0.2l+ backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER or ( @@ -1600,8 +1662,8 @@ def test_build_cert_printable_string_country_name(self, backend): not backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER ) ): - assert parsed.subject.chosen[1][0]['value'].chosen.tag == 19 - assert parsed.issuer.chosen[1][0]['value'].chosen.tag == 19 + assert read_next_rdn_value_tag(subject) == PRINTABLE_STRING + assert read_next_rdn_value_tag(issuer) == PRINTABLE_STRING class TestCertificateBuilder(object): @@ -1738,13 +1800,9 @@ def test_extreme_times(self, not_valid_before, not_valid_after, backend): cert = builder.sign(private_key, hashes.SHA256(), backend) assert cert.not_valid_before == not_valid_before assert cert.not_valid_after == not_valid_after - parsed = Certificate.load( - cert.public_bytes(serialization.Encoding.DER) - ) - not_before = parsed['tbs_certificate']['validity']['not_before'] - not_after = parsed['tbs_certificate']['validity']['not_after'] - assert not_before.chosen.tag == 23 # UTCTime - assert not_after.chosen.tag == 24 # GeneralizedTime + parsed = _parse_cert(cert.public_bytes(serialization.Encoding.DER)) + assert parsed.not_before_tag == UTC_TIME + assert parsed.not_after_tag == GENERALIZED_TIME @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @@ -2038,13 +2096,9 @@ def test_earliest_time(self, backend): cert = cert_builder.sign(private_key, hashes.SHA256(), backend) assert cert.not_valid_before == time assert cert.not_valid_after == time - parsed = Certificate.load( - cert.public_bytes(serialization.Encoding.DER) - ) - not_before = parsed['tbs_certificate']['validity']['not_before'] - not_after = parsed['tbs_certificate']['validity']['not_after'] - assert not_before.chosen.tag == 23 # UTCTime - assert not_after.chosen.tag == 23 # UTCTime + parsed = _parse_cert(cert.public_bytes(serialization.Encoding.DER)) + assert parsed.not_before_tag == UTC_TIME + assert parsed.not_after_tag == UTC_TIME def test_invalid_not_valid_after(self): with pytest.raises(TypeError): From 2c83570f6310cb36553af274eb41dd8e2b96b58e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 28 Jul 2019 17:25:25 -0400 Subject: [PATCH 683/988] Run pep8 tests first in travis (#4958) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 40be4fb5d5d8..ae6f57492a4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,8 @@ branches: matrix: include: + - python: 3.4 + env: TOXENV=pep8 # these are just to make travis's UI a bit prettier - python: 2.7 env: TOXENV=py27 @@ -115,8 +117,6 @@ matrix: services: docker env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/ - - python: 3.4 - env: TOXENV=pep8 - python: 3.7 env: TOXENV=packaging From 9cd41ac714d9bff819ece6d8cdcde064d403c671 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 28 Jul 2019 22:58:04 -0400 Subject: [PATCH 684/988] Make DER reader into a context manager (#4957) * Make DER reader into a context manager * Added another test case * flake8 --- src/cryptography/hazmat/_der.py | 12 +++- .../hazmat/primitives/asymmetric/utils.py | 9 ++- src/cryptography/x509/extensions.py | 18 ++--- tests/hazmat/test_der.py | 8 +++ tests/x509/test_x509.py | 72 +++++++++---------- 5 files changed, 65 insertions(+), 54 deletions(-) diff --git a/src/cryptography/hazmat/_der.py b/src/cryptography/hazmat/_der.py index 3a121a85d22e..51518d641ff5 100644 --- a/src/cryptography/hazmat/_der.py +++ b/src/cryptography/hazmat/_der.py @@ -36,6 +36,13 @@ class DERReader(object): def __init__(self, data): self.data = memoryview(data) + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + if exc_value is None: + self.check_empty() + def is_empty(self): return len(self.data) == 0 @@ -100,9 +107,8 @@ def read_element(self, expected_tag): return body def read_single_element(self, expected_tag): - ret = self.read_element(expected_tag) - self.check_empty() - return ret + with self: + return self.read_element(expected_tag) def read_optional_element(self, expected_tag): if len(self.data) > 0 and six.indexbytes(self.data, 0) == expected_tag: diff --git a/src/cryptography/hazmat/primitives/asymmetric/utils.py b/src/cryptography/hazmat/primitives/asymmetric/utils.py index 43d5b9bfcc82..14d2abee9a9c 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/utils.py +++ b/src/cryptography/hazmat/primitives/asymmetric/utils.py @@ -12,11 +12,10 @@ def decode_dss_signature(signature): - seq = DERReader(signature).read_single_element(SEQUENCE) - r = seq.read_element(INTEGER).as_integer() - s = seq.read_element(INTEGER).as_integer() - seq.check_empty() - return r, s + with DERReader(signature).read_single_element(SEQUENCE) as seq: + r = seq.read_element(INTEGER).as_integer() + s = seq.read_element(INTEGER).as_integer() + return r, s def encode_dss_signature(r, s): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index c78c76c2a31a..5bef99453de0 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -48,17 +48,17 @@ def _key_identifier_from_public_key(public_key): serialization.PublicFormat.SubjectPublicKeyInfo ) - public_key_info = DERReader(serialized).read_single_element(SEQUENCE) - algorithm = public_key_info.read_element(SEQUENCE) - public_key = public_key_info.read_element(BIT_STRING) - public_key_info.check_empty() + reader = DERReader(serialized) + with reader.read_single_element(SEQUENCE) as public_key_info: + algorithm = public_key_info.read_element(SEQUENCE) + public_key = public_key_info.read_element(BIT_STRING) # Double-check the algorithm structure. - algorithm.read_element(OBJECT_IDENTIFIER) - if not algorithm.is_empty(): - # Skip the optional parameters field. - algorithm.read_any_element() - algorithm.check_empty() + with algorithm: + algorithm.read_element(OBJECT_IDENTIFIER) + if not algorithm.is_empty(): + # Skip the optional parameters field. + algorithm.read_any_element() # BIT STRING contents begin with the number of padding bytes added. It # must be zero for SubjectPublicKeyInfo structures. diff --git a/tests/hazmat/test_der.py b/tests/hazmat/test_der.py index d81c0d3e5e02..d052802c9e58 100644 --- a/tests/hazmat/test_der.py +++ b/tests/hazmat/test_der.py @@ -46,6 +46,14 @@ def test_der(): with pytest.raises(ValueError): reader.check_empty() + with pytest.raises(ValueError): + with reader: + pass + + with pytest.raises(ZeroDivisionError): + with DERReader(der): + raise ZeroDivisionError + # Parse the outer element. outer = reader.read_element(SEQUENCE) reader.check_empty() diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index bb0ad022f3e7..540a814a9f6b 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -76,36 +76,35 @@ def _load_cert(filename, loader, backend): def _parse_cert(der): # See the Certificate structured, defined in RFC 5280. - cert = DERReader(der).read_single_element(SEQUENCE) - tbs_cert = cert.read_element(SEQUENCE) - # Skip outer signature algorithm - _ = cert.read_element(SEQUENCE) - # Skip signature - _ = cert.read_element(BIT_STRING) - cert.check_empty() - - # Skip version - _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 0) - # Skip serialNumber - _ = tbs_cert.read_element(INTEGER) - # Skip inner signature algorithm - _ = tbs_cert.read_element(SEQUENCE) - issuer = tbs_cert.read_element(SEQUENCE) - validity = tbs_cert.read_element(SEQUENCE) - subject = tbs_cert.read_element(SEQUENCE) - # Skip subjectPublicKeyInfo - _ = tbs_cert.read_element(SEQUENCE) - # Skip issuerUniqueID - _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 1) - # Skip subjectUniqueID - _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 2) - # Skip extensions - _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 3) - tbs_cert.check_empty() - - not_before_tag, _ = validity.read_any_element() - not_after_tag, _ = validity.read_any_element() - validity.check_empty() + with DERReader(der).read_single_element(SEQUENCE) as cert: + tbs_cert = cert.read_element(SEQUENCE) + # Skip outer signature algorithm + _ = cert.read_element(SEQUENCE) + # Skip signature + _ = cert.read_element(BIT_STRING) + + with tbs_cert: + # Skip version + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 0) + # Skip serialNumber + _ = tbs_cert.read_element(INTEGER) + # Skip inner signature algorithm + _ = tbs_cert.read_element(SEQUENCE) + issuer = tbs_cert.read_element(SEQUENCE) + validity = tbs_cert.read_element(SEQUENCE) + subject = tbs_cert.read_element(SEQUENCE) + # Skip subjectPublicKeyInfo + _ = tbs_cert.read_element(SEQUENCE) + # Skip issuerUniqueID + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 1) + # Skip subjectUniqueID + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 2) + # Skip extensions + _ = tbs_cert.read_optional_element(CONTEXT_SPECIFIC | CONSTRUCTED | 3) + + with validity: + not_before_tag, _ = validity.read_any_element() + not_after_tag, _ = validity.read_any_element() return ParsedCertificate( not_before_tag=not_before_tag, @@ -1642,15 +1641,14 @@ def test_build_cert_printable_string_country_name(self, backend): issuer = parsed.issuer def read_next_rdn_value_tag(reader): - rdn = reader.read_element(SET) - attribute = rdn.read_element(SEQUENCE) # Assume each RDN has a single attribute. - rdn.check_empty() + with reader.read_element(SET) as rdn: + attribute = rdn.read_element(SEQUENCE) - _ = attribute.read_element(OBJECT_IDENTIFIER) - tag, value = attribute.read_any_element() - attribute.check_empty() - return tag + with attribute: + _ = attribute.read_element(OBJECT_IDENTIFIER) + tag, value = attribute.read_any_element() + return tag # Check that each value was encoded as an ASN.1 PRINTABLESTRING. assert read_next_rdn_value_tag(subject) == PRINTABLE_STRING From c7681e80a68a97ba56453e7fbb960f0e59f4acad Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 28 Jul 2019 23:33:52 -0400 Subject: [PATCH 685/988] Fixes #4956 -- added a changelog entry for the removal of the asn1crypto dep (#4959) --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2421efeef456..3248bc273200 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,6 +21,7 @@ Changelog wheels. * Added support for ``ed25519`` keys in the :class:`~cryptography.x509.CertificateBuilder`. +* ``cryptography`` no longer depends on ``asn1crypto``. .. _v2-7: From 5231663da7a7832ebeec070ea9d4c97f734ffa9e Mon Sep 17 00:00:00 2001 From: arjenzorgdoc <42434363+arjenzorgdoc@users.noreply.github.com> Date: Wed, 14 Aug 2019 18:46:09 +0200 Subject: [PATCH 686/988] Add SSL_get0_verified_chain to cffi lib (#4965) * Add SSL_get0_verified_chain to cffi lib OpenSSL 1.1.0 supports SSL_get0_verified_chain. This gives the full chain from the peer cert including your trusted CA cert. * Work around no support for #if in cdef in old cffi --- src/_cffi_src/openssl/ssl.py | 9 +++++++++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index da21f3ce90ad..071ac76a43ee 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -31,6 +31,7 @@ static const long Cryptography_HAS_SIGALGS; static const long Cryptography_HAS_PSK; static const long Cryptography_HAS_CIPHER_DETAILS; +static const long Cryptography_HAS_VERIFIED_CHAIN; /* Internally invented symbol to tell us if SNI is supported */ static const long Cryptography_HAS_TLSEXT_HOSTNAME; @@ -208,6 +209,7 @@ unsigned char *); Cryptography_STACK_OF_X509 *SSL_get_peer_cert_chain(const SSL *); +Cryptography_STACK_OF_X509 *SSL_get0_verified_chain(const SSL *); Cryptography_STACK_OF_X509_NAME *SSL_get_client_CA_list(const SSL *); int SSL_get_error(const SSL *, int); @@ -559,6 +561,13 @@ } #endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 +static const long Cryptography_HAS_VERIFIED_CHAIN = 0; +Cryptography_STACK_OF_X509 *(*SSL_get0_verified_chain)(const SSL *) = NULL; +#else +static const long Cryptography_HAS_VERIFIED_CHAIN = 1; +#endif + /* Added in 1.1.0 in the great opaquing, but we need to define it for older OpenSSLs. Such is our burden. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index a1f78193cec1..a2eee181d06a 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -358,6 +358,12 @@ def cryptography_has_engine(): ] +def cryptography_has_verified_chain(): + return [ + "SSL_get0_verified_chain", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -431,4 +437,5 @@ def cryptography_has_engine(): cryptography_has_evp_r_memory_limit_exceeded ), "Cryptography_HAS_ENGINE": cryptography_has_engine, + "Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain, } From ca723c42d0e48c4a17aaed2505c2a5be80e1165f Mon Sep 17 00:00:00 2001 From: Harry Stern Date: Thu, 15 Aug 2019 21:53:56 -0400 Subject: [PATCH 687/988] Improve documentation for ECDSA sign and verify (#4970) - Note that signatures are DER-encoded - Note that signatures can be encoded from r,s using util function --- docs/hazmat/primitives/asymmetric/ec.rst | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 3025f334683c..d8b8c052752c 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -64,7 +64,7 @@ Elliptic Curve Signature Algorithms ... ec.ECDSA(hashes.SHA256()) ... ) - The ``signature`` is a ``bytes`` object, whose contents is DER encoded as + The ``signature`` is a ``bytes`` object, whose contents are DER encoded as described in :rfc:`3279`. This can be decoded using :func:`~cryptography.hazmat.primitives.asymmetric.utils.decode_dss_signature`. @@ -86,13 +86,18 @@ Elliptic Curve Signature Algorithms ... ) - Verification requires the public key, the signature itself, the signed - data, and knowledge of the hashing algorithm that was used when producing - the signature: + Verification requires the public key, the DER-encoded signature itself, the + signed data, and knowledge of the hashing algorithm that was used when + producing the signature: >>> public_key = private_key.public_key() >>> public_key.verify(signature, data, ec.ECDSA(hashes.SHA256())) + As above, the ``signature`` is a ``bytes`` object whose contents are DER + encoded as described in :rfc:`3279`. It can be created from a raw ``(r,s)`` + pair by using + :func:`~cryptography.hazmat.primitives.asymmetric.utils.encode_dss_signature`. + If the signature is not valid, an :class:`~cryptography.exceptions.InvalidSignature` exception will be raised. @@ -601,7 +606,10 @@ Key Interfaces :param signature_algorithm: An instance of :class:`EllipticCurveSignatureAlgorithm`, such as :class:`ECDSA`. - :return bytes: Signature. + :return bytes: The signature as a ``bytes`` object, whose contents are + DER encoded as described in :rfc:`3279`. This can be decoded using + :func:`~cryptography.hazmat.primitives.asymmetric.utils.decode_dss_signature`, + which returns the decoded tuple ``(r, s)``. .. attribute:: key_size @@ -704,7 +712,10 @@ Key Interfaces Verify one block of data was signed by the private key associated with this public key. - :param bytes signature: The signature to verify. + :param bytes signature: The DER-encoded signature to verify. + A raw signature may be DER-encoded by splitting it into the ``r`` + and ``s`` components and passing them into + :func:`~cryptography.hazmat.primitives.asymmetric.utils.encode_dss_signature`. :param bytes data: The message string that was signed. From b5b6bd13a22ee48eec55817867a2c8737addeee0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 7 Sep 2019 11:22:51 +0800 Subject: [PATCH 688/988] fix coverage by adding two artificial DSA public keys (#4984) * fix coverage by adding two artificial DSA public keys One key removes the optional parameters from the structure to cover a branch conditional, and the other key has its BITSTRING padding value set to a non-zero value. * lexicographic? never heard of it --- docs/development/test-vectors.rst | 5 +++ tests/x509/test_x509_ext.py | 32 ++++++++++++++++++ .../dsa_public_key_invalid_bit_string.der | Bin 0 -> 830 bytes .../dsa_public_key_no_params.der | Bin 0 -> 280 bytes 4 files changed, 37 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/DER_Serialization/dsa_public_key_invalid_bit_string.der create mode 100644 vectors/cryptography_vectors/asymmetric/DER_Serialization/dsa_public_key_no_params.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index f43872155a9c..7584881ab84f 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -86,6 +86,11 @@ Custom asymmetric vectors * ``asymmetric/PEM_Serialization/dsa_public_key.pem`` and ``asymmetric/DER_Serialization/dsa_public_key.der`` - Contains a DSA 2048 bit key generated using OpenSSL from ``dsa_private_key.pem``. +* ``asymmetric/DER_Serialization/dsa_public_key_no_params.der`` - Contains a + DSA public key with the optional parameters removed. +* ``asymmetric/DER_Serialization/dsa_public_key_invalid_bit_string.der`` - + Contains a DSA public key with the bit string padding value set to 2 rather + than the required 0. * ``asymmetric/PKCS8/unenc-dsa-pkcs8.pem`` and ``asymmetric/DER_Serialization/unenc-dsa-pkcs8.der`` - Contains a DSA 1024 bit key generated using OpenSSL. diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 11e352071a9b..cf757abddb37 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -9,6 +9,8 @@ import ipaddress import os +import pretend + import pytest import six @@ -20,6 +22,7 @@ from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec from cryptography.x509 import DNSName, NameConstraints, SubjectAlternativeName +from cryptography.x509.extensions import _key_identifier_from_public_key from cryptography.x509.general_name import _lazy_import_idna from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, @@ -29,6 +32,7 @@ from .test_x509 import _load_cert from ..hazmat.primitives.fixtures_rsa import RSA_KEY_2048 from ..hazmat.primitives.test_ec import _skip_curve_unsupported +from ..utils import load_vectors_from_file def _make_certbuilder(private_key): @@ -1591,6 +1595,34 @@ def test_from_dsa_public_key(self, backend): ) assert ext.value == ski + @pytest.mark.requires_backend_interface(interface=DSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_invalid_bit_string_padding_from_public_key(self, backend): + data = load_vectors_from_file( + filename=os.path.join( + "asymmetric", "DER_Serialization", + "dsa_public_key_invalid_bit_string.der" + ), loader=lambda data: data.read(), mode="rb" + ) + pretend_key = pretend.stub(public_bytes=lambda x, y: data) + with pytest.raises(ValueError): + _key_identifier_from_public_key(pretend_key) + + @pytest.mark.requires_backend_interface(interface=DSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_no_optional_params_allowed_from_public_key(self, backend): + data = load_vectors_from_file( + filename=os.path.join( + "asymmetric", "DER_Serialization", + "dsa_public_key_no_params.der" + ), loader=lambda data: data.read(), mode="rb" + ) + pretend_key = pretend.stub(public_bytes=lambda x, y: data) + key_identifier = _key_identifier_from_public_key(pretend_key) + assert key_identifier == binascii.unhexlify( + b"24c0133a6a492f2c48a18c7648e515db5ac76749" + ) + @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_from_ec_public_key(self, backend): diff --git a/vectors/cryptography_vectors/asymmetric/DER_Serialization/dsa_public_key_invalid_bit_string.der b/vectors/cryptography_vectors/asymmetric/DER_Serialization/dsa_public_key_invalid_bit_string.der new file mode 100644 index 0000000000000000000000000000000000000000..7358bc1def8eef97e48775f697256c02e7a0609f GIT binary patch literal 830 zcmV-E1Ht?-f&)4*f&wiD2P%e0&Nu`CFoFUg0)hbn0G+y@ju+zT#CQ+`yNjrC?6Epc zHn_fwT|BL#NSiWN0^~R|^R!BaZUTmfedvY}Rqs-7K2*7m%AWd5x4ia+jt~Q$yR@te z;(&@AI(#ArsktsKygrt{kRFH>p?dJ@SLz=h;-@rHsn-`40I7Uc#_CG7bUv=e1Wv$0 zp(h00a~JcnQO&ukTy=tE5W9Xle~fp#pi)oi%7#pIAju<1{p&j^j8%7%c`4) zHI;L(cR!bYyTKN0o{T#1&tiFYO|73RDM}>FlR?*XZjG3`i#fd(=L!u~&6`zoXr9Uxc5V)6S-EV6L8s#SKN;{|yMbK<3tkiojAXM8^X~wD(B7p8>}sLo2OCbL2=m+N+TXg*(DPKI56aJ& z-DdFG=T|^J0S4^Myrt@WLe+FzvD;E_z#Kfs?4C%z@*+>1lX94kx0Zay(c$CVLbiJ2 zfb|}|q^lBI23w)Dw-RV0_d8uR!R_Ye&qV8Ve%WZw7-FrGo=3i;Quj-% I{u27+uYnYiV*mgE literal 0 HcmV?d00001 diff --git a/vectors/cryptography_vectors/asymmetric/DER_Serialization/dsa_public_key_no_params.der b/vectors/cryptography_vectors/asymmetric/DER_Serialization/dsa_public_key_no_params.der new file mode 100644 index 0000000000000000000000000000000000000000..0270ac158a02731f63a3b76bafb7d9ebac6bbdc6 GIT binary patch literal 280 zcmV+z0q6cOf&mmT2?hr$hDgph1OWqr0R;d8f&l;@2J?`4XZ&3Sm}3b7ePb)%B^hCx zrii*K_`ab0#-DCM3s1~%2-Xnia2a4WZWF<#M3k08F$=7dY{Q3fYF8Mp6iII>Oe7oc zV_S7mw6sSkb0uNGPJxwNp-c#+L?r!_3@^h%A>V(Y`4PcgP2P-Tvkvp`0DjQkr3mb5 zq2mV|PNWF)+v(chy3f$_RHF~d&zRk2@Y?5BKt2Hm?99BS>U~1hbX&38Qg6T~FdgFlg9=)Wi5?TgZp|rOWXe0MRfs6t#@OKqz;1I#> e=H|~t>vVqEXwDd7t&*NczN1q2ORN48`sA Date: Sat, 7 Sep 2019 10:32:13 +0300 Subject: [PATCH 689/988] Allow FreshestCRL extension in CRL (#4975) Per RFC5280 it is allowed in both certificates and CRL-s. --- .../hazmat/backends/openssl/decode_asn1.py | 1 + .../hazmat/backends/openssl/encode_asn1.py | 1 + tests/x509/test_x509_crlbuilder.py | 33 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 35295ce392d9..47c6c6546732 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -846,6 +846,7 @@ def _decode_nonce(backend, nonce): _decode_authority_information_access ), ExtensionOID.ISSUING_DISTRIBUTION_POINT: _decode_issuing_dist_point, + ExtensionOID.FRESHEST_CRL: _decode_freshest_crl, } _OCSP_REQ_EXTENSION_HANDLERS = { diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index a774daa788b6..fc16a58ba8ee 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -640,6 +640,7 @@ def _encode_nonce(backend, nonce): ExtensionOID.CRL_NUMBER: _encode_crl_number_delta_crl_indicator, ExtensionOID.DELTA_CRL_INDICATOR: _encode_crl_number_delta_crl_indicator, ExtensionOID.ISSUING_DISTRIBUTION_POINT: _encode_issuing_dist_point, + ExtensionOID.FRESHEST_CRL: _encode_cdps_freshest_crl, } _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS = { diff --git a/tests/x509/test_x509_crlbuilder.py b/tests/x509/test_x509_crlbuilder.py index 5f220bcae896..b9afa7023f9b 100644 --- a/tests/x509/test_x509_crlbuilder.py +++ b/tests/x509/test_x509_crlbuilder.py @@ -288,6 +288,39 @@ def test_sign_multiple_extensions_critical(self, backend): assert ext2.critical is True assert ext2.value == ian + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_freshestcrl_extension(self, backend): + private_key = RSA_KEY_2048.private_key(backend) + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + freshest = x509.FreshestCRL([ + x509.DistributionPoint([ + x509.UniformResourceIdentifier(u"http://d.om/delta"), + ], None, None, None) + ]) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ).add_extension( + freshest, False + ) + + crl = builder.sign(private_key, hashes.SHA256(), backend) + assert len(crl) == 0 + assert len(crl.extensions) == 1 + ext1 = crl.extensions.get_extension_for_class(x509.FreshestCRL) + assert ext1.critical is False + assert isinstance(ext1.value[0], x509.DistributionPoint) + uri = ext1.value[0].full_name[0] + assert isinstance(uri, x509.UniformResourceIdentifier) + assert uri.value == u"http://d.om/delta" + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_add_unsupported_extension(self, backend): From f853fbf945cf95dec89da82f2f3d1ebeccd14615 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 7 Sep 2019 19:49:53 +0800 Subject: [PATCH 690/988] changelog addition for freshestcrl in CRLs (#4986) --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3248bc273200..56d955e1c1c6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -22,6 +22,8 @@ Changelog * Added support for ``ed25519`` keys in the :class:`~cryptography.x509.CertificateBuilder`. * ``cryptography`` no longer depends on ``asn1crypto``. +* :class:`~cryptography.x509.FreshestCRL` is now allowed as a + :class:`~cryptography.x509.CertificateRevocationList` extension. .. _v2-7: From c918fef88670fc46433d3edd91957231c654ff05 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 7 Sep 2019 21:40:00 +0800 Subject: [PATCH 691/988] be clear that NoEncryption must be an instance in the exception (#4985) --- src/cryptography/hazmat/backends/openssl/ed25519.py | 2 +- src/cryptography/hazmat/backends/openssl/ed448.py | 2 +- src/cryptography/hazmat/backends/openssl/x25519.py | 2 +- src/cryptography/hazmat/backends/openssl/x448.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/ed25519.py b/src/cryptography/hazmat/backends/openssl/ed25519.py index f02f56222501..f38f11d1b052 100644 --- a/src/cryptography/hazmat/backends/openssl/ed25519.py +++ b/src/cryptography/hazmat/backends/openssl/ed25519.py @@ -123,7 +123,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): ): raise ValueError( "When using Raw both encoding and format must be Raw " - "and encryption_algorithm must be NoEncryption" + "and encryption_algorithm must be NoEncryption()" ) return self._raw_private_bytes() diff --git a/src/cryptography/hazmat/backends/openssl/ed448.py b/src/cryptography/hazmat/backends/openssl/ed448.py index cf2acf831bb0..f541f05d231b 100644 --- a/src/cryptography/hazmat/backends/openssl/ed448.py +++ b/src/cryptography/hazmat/backends/openssl/ed448.py @@ -126,7 +126,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): ): raise ValueError( "When using Raw both encoding and format must be Raw " - "and encryption_algorithm must be NoEncryption" + "and encryption_algorithm must be NoEncryption()" ) return self._raw_private_bytes() diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 914f59413a2d..9aab25b86adb 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -115,7 +115,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): ): raise ValueError( "When using Raw both encoding and format must be Raw " - "and encryption_algorithm must be NoEncryption" + "and encryption_algorithm must be NoEncryption()" ) return self._raw_private_bytes() diff --git a/src/cryptography/hazmat/backends/openssl/x448.py b/src/cryptography/hazmat/backends/openssl/x448.py index 13e4ce15e01b..fe0dcd9cfeb5 100644 --- a/src/cryptography/hazmat/backends/openssl/x448.py +++ b/src/cryptography/hazmat/backends/openssl/x448.py @@ -95,7 +95,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): ): raise ValueError( "When using Raw both encoding and format must be Raw " - "and encryption_algorithm must be NoEncryption" + "and encryption_algorithm must be NoEncryption()" ) return self._raw_private_bytes() From f7c77712d6611dc72cb2ef6fb1fe72fee4ab88de Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Mon, 9 Sep 2019 02:44:02 +0300 Subject: [PATCH 692/988] Finish ed25519 and ed448 support in x509 module (#4972) * Support ed25519 in csr/crl creation * Tests for ed25519/x509 * Support ed448 in crt/csr/crl creation * Tests for ed448/x509 * Support ed25519/ed448 in OCSPResponseBuilder * Tests for eddsa in OCSPResponseBuilder * Builder check missing in create_x509_csr * Documentation update for ed25519+ed448 in x509 --- CHANGELOG.rst | 7 +- docs/development/test-vectors.rst | 6 + docs/x509/ocsp.rst | 22 +- docs/x509/reference.rst | 103 +++++--- .../hazmat/backends/openssl/backend.py | 46 ++-- src/cryptography/x509/base.py | 10 +- src/cryptography/x509/ocsp.py | 9 +- src/cryptography/x509/oid.py | 3 + tests/x509/test_ocsp.py | 78 +++++- tests/x509/test_x509.py | 225 +++++++++++++++++- tests/x509/test_x509_crlbuilder.py | 152 +++++++++++- tests/x509/test_x509_ext.py | 40 ++++ .../x509/ed448/root-ed448.pem | 11 + .../x509/ed448/server-ed448-cert.pem | 14 ++ 14 files changed, 662 insertions(+), 64 deletions(-) create mode 100644 vectors/cryptography_vectors/x509/ed448/root-ed448.pem create mode 100644 vectors/cryptography_vectors/x509/ed448/server-ed448-cert.pem diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 56d955e1c1c6..9a4a79ba8619 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -19,8 +19,11 @@ Changelog ``cryptography`` 2.9. * We now ship ``manylinux2010`` wheels in addition to our ``manylinux1`` wheels. -* Added support for ``ed25519`` keys in the - :class:`~cryptography.x509.CertificateBuilder`. +* Added support for ``ed25519`` and ``ed448`` keys in the + :class:`~cryptography.x509.CertificateBuilder`, + :class:`~cryptography.x509.CertificateSigningRequestBuilder`, + :class:`~cryptography.x509.CertificateRevocationListBuilder` and + :class:`~cryptography.x509.ocsp.OCSPResponseBuilder`. * ``cryptography`` no longer depends on ``asn1crypto``. * :class:`~cryptography.x509.FreshestCRL` is now allowed as a :class:`~cryptography.x509.CertificateRevocationList` extension. diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 7584881ab84f..9976d138382c 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -244,6 +244,9 @@ X.509 * ``server-ed25519-cert.pem`` - An ``ed25519`` server certificate (RSA signature with ``ed25519`` public key) from the OpenSSL test suite. (`server-ed25519-cert.pem`_) +* ``server-ed448-cert.pem`` - An ``ed448`` server certificate (RSA + signature with ``ed448`` public key) from the OpenSSL test suite. + (`server-ed448-cert.pem`_) Custom X.509 Vectors ~~~~~~~~~~~~~~~~~~~~ @@ -404,6 +407,8 @@ Custom X.509 Vectors * ``negative_serial.pem`` - A certificate with a serial number that is a negative number. * ``rsa_pss.pem`` - A certificate with an RSA PSS signature. +* ``root-ed448.pem`` - An ``ed448`` self-signed CA certificate + using ``ed448-pkcs8.pem`` as key. Custom X.509 Request Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -703,3 +708,4 @@ header format (substituting the correct information): .. _`Botan's key wrap vectors`: https://github.com/randombit/botan/blob/737f33c09a18500e044dca3e2ae13bd2c08bafdd/src/tests/data/keywrap/nist_key_wrap.vec .. _`root-ed25519.pem`: https://github.com/openssl/openssl/blob/2a1e2fe145c6eb8e75aa2e1b3a8c3a49384b2852/test/certs/root-ed25519.pem .. _`server-ed25519-cert.pem`: https://github.com/openssl/openssl/blob/2a1e2fe145c6eb8e75aa2e1b3a8c3a49384b2852/test/certs/server-ed25519-cert.pem +.. _`server-ed448-cert.pem`: https://github.com/openssl/openssl/blob/2a1e2fe145c6eb8e75aa2e1b3a8c3a49384b2852/test/certs/server-ed448-cert.pem diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index d3815d6f3a32..e28c05a7867e 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -292,14 +292,23 @@ Creating Responses :attr:`~cryptography.x509.ocsp.OCSPResponseStatus.SUCCESSFUL` response. :param private_key: The - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey` - or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` that will be used to sign the certificate. :param algorithm: The :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that - will be used to generate the signature. + will be used to generate the signature. This must be ``None`` if + the ``private_key`` is an + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` + or an + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` + and an instance of a + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + otherwise. :returns: A new :class:`~cryptography.x509.ocsp.OCSPResponse`. @@ -434,7 +443,10 @@ Interfaces Returns the :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` which - was used in signing this response. + was used in signing this response. Can be ``None`` if signature + did not use separate hash + (:attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED25519`, + :attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED448`). .. attribute:: signature diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 7156ab8cb65f..46cc0d27d8c2 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -335,11 +335,12 @@ X.509 Certificate Object The public key associated with the certificate. - :returns: - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` + :returns: One of + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PublicKey` .. doctest:: @@ -394,7 +395,10 @@ X.509 Certificate Object Returns the :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` which - was used in signing this certificate. + was used in signing this certificate. Can be ``None`` if signature + did not use separate hash + (:attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED25519`, + :attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED448`). .. doctest:: @@ -552,7 +556,10 @@ X.509 CRL (Certificate Revocation List) Object Returns the :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` which - was used in signing this CRL. + was used in signing this CRL. Can be ``None`` if signature + did not use separate hash + (:attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED25519`, + :attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED448`). .. doctest:: @@ -729,9 +736,9 @@ X.509 Certificate Builder :param public_key: The subject's public key. This can be one of :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` - or - :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PublicKey`. .. method:: serial_number(serial_number) @@ -785,9 +792,9 @@ X.509 Certificate Builder :param private_key: The :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`, :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`, - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` - , or - :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` that will be used to sign the certificate. :param algorithm: The @@ -795,6 +802,8 @@ X.509 Certificate Builder will be used to generate the signature. This must be ``None`` if the ``private_key`` is an :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` + or an + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` and an instance of a :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` otherwise. @@ -818,10 +827,12 @@ X.509 CSR (Certificate Signing Request) Object The public key associated with the request. - :returns: - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` + :returns: One of + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PublicKey`. .. doctest:: @@ -842,7 +853,10 @@ X.509 CSR (Certificate Signing Request) Object Returns the :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` which - was used in signing this request. + was used in signing this request. Can be ``None`` if signature + did not use separate hash + (:attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED25519`, + :attr:`~cryptography.x509.oid.SignatureAlgorithmOID.ED448`). .. doctest:: @@ -1010,13 +1024,22 @@ X.509 Certificate Revocation List Builder :param private_key: The :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`, - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` that will be used to sign the certificate. :param algorithm: The :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that will be used to generate the signature. + This must be ``None`` if the ``private_key`` is an + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` + or an + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` + and an instance of a + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + otherwise. :param backend: Backend that will be used to build the CRL. Must support the @@ -1182,8 +1205,10 @@ X.509 CSR (Certificate Signing Request) Builder Object :param private_key: The :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`, - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` that will be used to sign the request. When the request is signed by a certificate authority, the private key's associated public key will be stored in the resulting certificate. @@ -1191,6 +1216,13 @@ X.509 CSR (Certificate Signing Request) Builder Object :param algorithm: The :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that will be used to generate the request signature. + This must be ``None`` if the ``private_key`` is an + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey` + or an + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey` + and an instance of a + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` + otherwise. :returns: A new :class:`~cryptography.x509.CertificateSigningRequest`. @@ -1863,11 +1895,11 @@ X.509 Extensions section 4.2.1.2. :param public_key: One of - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` - , - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` - , or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`. + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PublicKey`. .. doctest:: @@ -1941,11 +1973,11 @@ X.509 Extensions recommendation in :rfc:`5280` section 4.2.1.2. :param public_key: One of - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` - , - :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` - , or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`. + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PublicKey`. .. doctest:: @@ -2853,6 +2885,13 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.3.101.112"``. This is a signature using an ed25519 key. + .. attribute:: ED448 + + .. versionadded:: 2.8 + + Corresponds to the dotted string ``"1.3.101.113"``. This is a signature + using an ed448 key. + .. class:: ExtendedKeyUsageOID diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index eb6654b0f6b4..7e9fa202e757 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -74,7 +74,9 @@ ) from cryptography.hazmat.bindings.openssl import binding from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa +from cryptography.hazmat.primitives.asymmetric import ( + dsa, ec, ed25519, ed448, rsa +) from cryptography.hazmat.primitives.asymmetric.padding import ( MGF1, OAEP, PKCS1v15, PSS ) @@ -722,10 +724,18 @@ def create_cmac_ctx(self, algorithm): return _CMACContext(self, algorithm) def create_x509_csr(self, builder, private_key, algorithm): - if not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError('Algorithm must be a registered hash algorithm.') + if not isinstance(builder, x509.CertificateSigningRequestBuilder): + raise TypeError('Builder type mismatch.') - if ( + if isinstance(private_key, + (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): + if algorithm is not None: + raise ValueError( + "algorithm must be None when signing via ed25519 or ed448" + ) + elif not isinstance(algorithm, hashes.HashAlgorithm): + raise TypeError('Algorithm must be a registered hash algorithm.') + elif ( isinstance(algorithm, hashes.MD5) and not isinstance(private_key, rsa.RSAPrivateKey) ): @@ -734,7 +744,7 @@ def create_x509_csr(self, builder, private_key, algorithm): ) # Resolve the signature algorithm. - evp_md = self._evp_md_non_null_from_algorithm(algorithm) + evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) # Create an empty request. x509_req = self._lib.X509_REQ_new() @@ -801,10 +811,11 @@ def create_x509_csr(self, builder, private_key, algorithm): def create_x509_certificate(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateBuilder): raise TypeError('Builder type mismatch.') - if isinstance(private_key, ed25519.Ed25519PrivateKey): + if isinstance(private_key, + (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): if algorithm is not None: raise ValueError( - "algorithm must be None when signing via ed25519" + "algorithm must be None when signing via ed25519 or ed448" ) elif not isinstance(algorithm, hashes.HashAlgorithm): raise TypeError('Algorithm must be a registered hash algorithm.') @@ -818,7 +829,7 @@ def create_x509_certificate(self, builder, private_key, algorithm): ) # Resolve the signature algorithm. - evp_md = self._evp_md_x509_null_if_ed25519(private_key, algorithm) + evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) # Create an empty certificate. x509_cert = self._lib.X509_new() @@ -886,9 +897,10 @@ def create_x509_certificate(self, builder, private_key, algorithm): return _Certificate(self, x509_cert) - def _evp_md_x509_null_if_ed25519(self, private_key, algorithm): - if isinstance(private_key, ed25519.Ed25519PrivateKey): - # OpenSSL requires us to pass NULL for EVP_MD for ed25519 signing + def _evp_md_x509_null_if_eddsa(self, private_key, algorithm): + if isinstance(private_key, + (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): + # OpenSSL requires us to pass NULL for EVP_MD for ed25519/ed448 return self._ffi.NULL else: return self._evp_md_non_null_from_algorithm(algorithm) @@ -911,7 +923,13 @@ def _create_asn1_time(self, time): def create_x509_crl(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateRevocationListBuilder): raise TypeError('Builder type mismatch.') - if not isinstance(algorithm, hashes.HashAlgorithm): + if isinstance(private_key, + (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): + if algorithm is not None: + raise ValueError( + "algorithm must be None when signing via ed25519 or ed448" + ) + elif not isinstance(algorithm, hashes.HashAlgorithm): raise TypeError('Algorithm must be a registered hash algorithm.') if ( @@ -922,7 +940,7 @@ def create_x509_crl(self, builder, private_key, algorithm): "MD5 is not a supported hash algorithm for EC/DSA CRLs" ) - evp_md = self._evp_md_non_null_from_algorithm(algorithm) + evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) # Create an empty CRL. x509_crl = self._lib.X509_CRL_new() @@ -1578,7 +1596,7 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): ) self.openssl_assert(res != self._ffi.NULL) # okay, now sign the basic structure - evp_md = self._evp_md_non_null_from_algorithm(algorithm) + evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) responder_cert, responder_encoding = builder._responder_id flags = self._lib.OCSP_NOCERTS if responder_encoding is ocsp.OCSPResponderEncoding.HASH: diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index dc7eee9416ef..3983c9b38b2f 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -12,7 +12,9 @@ import six from cryptography import utils -from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa +from cryptography.hazmat.primitives.asymmetric import ( + dsa, ec, ed25519, ed448, rsa +) from cryptography.x509.extensions import Extension, ExtensionType from cryptography.x509.name import Name @@ -475,9 +477,11 @@ def public_key(self, key): """ if not isinstance(key, (dsa.DSAPublicKey, rsa.RSAPublicKey, ec.EllipticCurvePublicKey, - ed25519.Ed25519PublicKey)): + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey)): raise TypeError('Expecting one of DSAPublicKey, RSAPublicKey,' - ' EllipticCurvePublicKey, or Ed25519PublicKey.') + ' EllipticCurvePublicKey, Ed25519PublicKey or' + ' Ed448PublicKey.') if self._public_key is not None: raise ValueError('The public key may only be set once.') return CertificateBuilder( diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index aae9b626260c..b15063d1b36e 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -12,6 +12,7 @@ from cryptography import x509 from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.asymmetric import ed25519, ed448 from cryptography.x509.base import ( _EARLIEST_UTC_TIME, _convert_to_naive_utc_time, _reject_duplicate_extension ) @@ -241,7 +242,13 @@ def sign(self, private_key, algorithm): if self._responder_id is None: raise ValueError("You must add a responder_id before signing") - if not isinstance(algorithm, hashes.HashAlgorithm): + if isinstance(private_key, + (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): + if algorithm is not None: + raise ValueError( + "algorithm must be None when signing via ed25519 or ed448" + ) + elif not isinstance(algorithm, hashes.HashAlgorithm): raise TypeError("Algorithm must be a registered hash algorithm.") return backend.create_ocsp_response( diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index ab01d67b24bd..c1e5dc539ec3 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -97,6 +97,7 @@ class SignatureAlgorithmOID(object): DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1") DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2") ED25519 = ObjectIdentifier("1.3.101.112") + ED448 = ObjectIdentifier("1.3.101.113") _SIG_OIDS_TO_HASH = { @@ -116,6 +117,7 @@ class SignatureAlgorithmOID(object): SignatureAlgorithmOID.DSA_WITH_SHA224: hashes.SHA224(), SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(), SignatureAlgorithmOID.ED25519: None, + SignatureAlgorithmOID.ED448: None, } @@ -184,6 +186,7 @@ class CertificatePoliciesOID(object): SignatureAlgorithmOID.DSA_WITH_SHA224: "dsa-with-sha224", SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256", SignatureAlgorithmOID.ED25519: "ed25519", + SignatureAlgorithmOID.ED448: "ed448", ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 3abaff506a8a..ab3752a2e2f5 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -13,7 +13,7 @@ from cryptography import x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives.asymmetric import ec, ed25519, ed448 from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15 from cryptography.x509 import ocsp @@ -45,10 +45,12 @@ def _cert_and_issuer(): return cert, issuer -def _generate_root(): +def _generate_root(private_key=None, algorithm=hashes.SHA256()): from cryptography.hazmat.backends.openssl.backend import backend - private_key = EC_KEY_SECP256R1.private_key(backend) + if private_key is None: + private_key = EC_KEY_SECP256R1.private_key(backend) + subject = x509.Name([ x509.NameAttribute(x509.NameOID.COUNTRY_NAME, u'US'), x509.NameAttribute(x509.NameOID.COMMON_NAME, u'Cryptography CA'), @@ -68,7 +70,7 @@ def _generate_root(): datetime.datetime.now() + datetime.timedelta(days=3650) ) - cert = builder.sign(private_key, hashes.SHA256(), backend) + cert = builder.sign(private_key, algorithm, backend) return cert, private_key @@ -753,3 +755,71 @@ def test_invalid_serialize_encoding(self): resp.public_bytes("invalid") with pytest.raises(ValueError): resp.public_bytes(serialization.Encoding.PEM) + + +class TestOCSPEdDSA(object): + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support / OCSP" + ) + def test_sign_ed25519(self, backend): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + private_key = ed25519.Ed25519PrivateKey.generate() + root_cert, private_key = _generate_root(private_key, None) + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + revoked_date = this_update - datetime.timedelta(days=300) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, + this_update, next_update, revoked_date, + x509.ReasonFlags.key_compromise + ) + resp = builder.sign(private_key, None) + assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED + assert resp.revocation_time == revoked_date + assert resp.revocation_reason is x509.ReasonFlags.key_compromise + assert resp.this_update == this_update + assert resp.next_update == next_update + assert resp.signature_hash_algorithm is None + assert (resp.signature_algorithm_oid == + x509.SignatureAlgorithmOID.ED25519) + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes + ) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support / OCSP" + ) + def test_sign_ed448(self, backend): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + private_key = ed448.Ed448PrivateKey.generate() + root_cert = _generate_root(private_key, None)[0] + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + revoked_date = this_update - datetime.timedelta(days=300) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, + this_update, next_update, revoked_date, + x509.ReasonFlags.key_compromise + ) + resp = builder.sign(private_key, None) + assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED + assert resp.revocation_time == revoked_date + assert resp.revocation_reason is x509.ReasonFlags.key_compromise + assert resp.this_update == this_update + assert resp.next_update == next_update + assert resp.signature_hash_algorithm is None + assert (resp.signature_algorithm_oid == + x509.SignatureAlgorithmOID.ED448) + private_key.public_key().verify( + resp.signature, resp.tbs_response_bytes + ) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 540a814a9f6b..8a8507bdaca8 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -28,7 +28,7 @@ ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ( - dsa, ec, ed25519, padding, rsa + dsa, ec, ed25519, ed448, padding, rsa ) from cryptography.hazmat.primitives.asymmetric.utils import ( decode_dss_signature @@ -2234,6 +2234,58 @@ def test_sign_with_unsupported_hash_ed25519(self, backend): with pytest.raises(ValueError): builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_request_with_unsupported_hash_ed25519(self, backend): + private_key = ed25519.Ed25519PrivateKey.generate() + builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ) + + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_sign_with_unsupported_hash_ed448(self, backend): + private_key = ed448.Ed448PrivateKey.generate() + builder = x509.CertificateBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ).serial_number( + 1 + ).public_key( + private_key.public_key() + ).not_valid_before( + datetime.datetime(2002, 1, 1, 12, 1) + ).not_valid_after( + datetime.datetime(2032, 1, 1, 12, 1) + ) + + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_request_with_unsupported_hash_ed448(self, backend): + private_key = ed448.Ed448PrivateKey.generate() + builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ) + + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @pytest.mark.supported( @@ -2492,6 +2544,97 @@ def test_build_cert_with_public_ed25519_rsa_sig(self, backend): assert isinstance(cert.signature_hash_algorithm, hashes.SHA256) assert isinstance(cert.public_key(), ed25519.Ed25519PublicKey) + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_build_cert_with_ed448(self, backend): + issuer_private_key = ed448.Ed448PrivateKey.generate() + subject_private_key = ed448.Ed448PrivateKey.generate() + + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + subject_private_key.public_key() + ).add_extension( + x509.BasicConstraints(ca=False, path_length=None), True, + ).add_extension( + x509.SubjectAlternativeName([x509.DNSName(u"cryptography.io")]), + critical=False, + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + cert = builder.sign(issuer_private_key, None, backend) + issuer_private_key.public_key().verify( + cert.signature, cert.tbs_certificate_bytes + ) + assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED448 + assert cert.signature_hash_algorithm is None + assert isinstance(cert.public_key(), ed448.Ed448PublicKey) + assert cert.version is x509.Version.v3 + assert cert.not_valid_before == not_valid_before + assert cert.not_valid_after == not_valid_after + basic_constraints = cert.extensions.get_extension_for_oid( + ExtensionOID.BASIC_CONSTRAINTS + ) + assert basic_constraints.value.ca is False + assert basic_constraints.value.path_length is None + subject_alternative_name = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_ALTERNATIVE_NAME + ) + assert list(subject_alternative_name.value) == [ + x509.DNSName(u"cryptography.io"), + ] + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) + def test_build_cert_with_public_ed448_rsa_sig(self, backend): + issuer_private_key = RSA_KEY_2048.private_key(backend) + subject_private_key = ed448.Ed448PrivateKey.generate() + + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + subject_private_key.public_key() + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + cert = builder.sign(issuer_private_key, hashes.SHA256(), backend) + issuer_private_key.public_key().verify( + cert.signature, cert.tbs_certificate_bytes, padding.PKCS1v15(), + cert.signature_hash_algorithm + ) + assert cert.signature_algorithm_oid == ( + SignatureAlgorithmOID.RSA_WITH_SHA256 + ) + assert isinstance(cert.signature_hash_algorithm, hashes.SHA256) + assert isinstance(cert.public_key(), ed448.Ed448PublicKey) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_build_cert_with_rsa_key_too_small(self, backend): @@ -3175,6 +3318,66 @@ def test_build_ca_request_with_ec(self, backend): assert basic_constraints.value.ca is True assert basic_constraints.value.path_length == 2 + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_build_ca_request_with_ed25519(self, backend): + private_key = ed25519.Ed25519PrivateKey.generate() + + request = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([ + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Texas'), + ]) + ).add_extension( + x509.BasicConstraints(ca=True, path_length=2), critical=True + ).sign(private_key, None, backend) + + assert request.signature_hash_algorithm is None + public_key = request.public_key() + assert isinstance(public_key, ed25519.Ed25519PublicKey) + subject = request.subject + assert isinstance(subject, x509.Name) + assert list(subject) == [ + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Texas'), + ] + basic_constraints = request.extensions.get_extension_for_oid( + ExtensionOID.BASIC_CONSTRAINTS + ) + assert basic_constraints.value.ca is True + assert basic_constraints.value.path_length == 2 + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_build_ca_request_with_ed448(self, backend): + private_key = ed448.Ed448PrivateKey.generate() + + request = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([ + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Texas'), + ]) + ).add_extension( + x509.BasicConstraints(ca=True, path_length=2), critical=True + ).sign(private_key, None, backend) + + assert request.signature_hash_algorithm is None + public_key = request.public_key() + assert isinstance(public_key, ed448.Ed448PublicKey) + subject = request.subject + assert isinstance(subject, x509.Name) + assert list(subject) == [ + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Texas'), + ] + basic_constraints = request.extensions.get_extension_for_oid( + ExtensionOID.BASIC_CONSTRAINTS + ) + assert basic_constraints.value.ca is True + assert basic_constraints.value.path_length == 2 + @pytest.mark.requires_backend_interface(interface=DSABackend) def test_build_ca_request_with_dsa(self, backend): private_key = DSA_KEY_2048.private_key(backend) @@ -4420,6 +4623,26 @@ def test_load_pem_cert(self, backend): assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED25519 +@pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" +) +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestEd448Certificate(object): + def test_load_pem_cert(self, backend): + cert = _load_cert( + os.path.join("x509", "ed448", "root-ed448.pem"), + x509.load_pem_x509_certificate, + backend + ) + # self-signed, so this will work + cert.public_key().verify(cert.signature, cert.tbs_certificate_bytes) + assert isinstance(cert, x509.Certificate) + assert cert.serial_number == 448 + assert cert.signature_hash_algorithm is None + assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED448 + + def test_random_serial_number(monkeypatch): sample_data = os.urandom(20) diff --git a/tests/x509/test_x509_crlbuilder.py b/tests/x509/test_x509_crlbuilder.py index b9afa7023f9b..04244c1baa7f 100644 --- a/tests/x509/test_x509_crlbuilder.py +++ b/tests/x509/test_x509_crlbuilder.py @@ -15,8 +15,10 @@ DSABackend, EllipticCurveBackend, RSABackend, X509Backend ) from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric import ec -from cryptography.x509.oid import AuthorityInformationAccessOID, NameOID +from cryptography.hazmat.primitives.asymmetric import ec, ed25519, ed448 +from cryptography.x509.oid import ( + AuthorityInformationAccessOID, NameOID, SignatureAlgorithmOID +) from ..hazmat.primitives.fixtures_dsa import DSA_KEY_2048 from ..hazmat.primitives.fixtures_ec import EC_KEY_SECP256R1 @@ -379,6 +381,54 @@ def test_sign_with_invalid_hash(self, backend): with pytest.raises(TypeError): builder.sign(private_key, object(), backend) + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_sign_with_invalid_hash_ed25519(self, backend): + private_key = ed25519.Ed25519PrivateKey.generate() + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ) + + with pytest.raises(ValueError): + builder.sign(private_key, object(), backend) + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_sign_with_invalid_hash_ed448(self, backend): + private_key = ed448.Ed448PrivateKey.generate() + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ) + + with pytest.raises(ValueError): + builder.sign(private_key, object(), backend) + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.requires_backend_interface(interface=DSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_sign_dsa_key(self, backend): @@ -468,6 +518,104 @@ def test_sign_ec_key(self, backend): assert ext.critical is False assert ext.value == invalidity_date + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_sign_ed25519_key(self, backend): + private_key = ed25519.Ed25519PrivateKey.generate() + invalidity_date = x509.InvalidityDate( + datetime.datetime(2002, 1, 1, 0, 0) + ) + ian = x509.IssuerAlternativeName([ + x509.UniformResourceIdentifier(u"https://cryptography.io"), + ]) + revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( + 2 + ).revocation_date( + datetime.datetime(2012, 1, 1, 1, 1) + ).add_extension( + invalidity_date, False + ).build(backend) + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ).add_revoked_certificate( + revoked_cert0 + ).add_extension( + ian, False + ) + + crl = builder.sign(private_key, None, backend) + assert crl.signature_hash_algorithm is None + assert crl.signature_algorithm_oid == SignatureAlgorithmOID.ED25519 + assert crl.extensions.get_extension_for_class( + x509.IssuerAlternativeName + ).value == ian + assert crl[0].serial_number == revoked_cert0.serial_number + assert crl[0].revocation_date == revoked_cert0.revocation_date + assert len(crl[0].extensions) == 1 + ext = crl[0].extensions.get_extension_for_class(x509.InvalidityDate) + assert ext.critical is False + assert ext.value == invalidity_date + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_sign_ed448_key(self, backend): + private_key = ed448.Ed448PrivateKey.generate() + invalidity_date = x509.InvalidityDate( + datetime.datetime(2002, 1, 1, 0, 0) + ) + ian = x509.IssuerAlternativeName([ + x509.UniformResourceIdentifier(u"https://cryptography.io"), + ]) + revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( + 2 + ).revocation_date( + datetime.datetime(2012, 1, 1, 1, 1) + ).add_extension( + invalidity_date, False + ).build(backend) + last_update = datetime.datetime(2002, 1, 1, 12, 1) + next_update = datetime.datetime(2030, 1, 1, 12, 1) + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") + ]) + ).last_update( + last_update + ).next_update( + next_update + ).add_revoked_certificate( + revoked_cert0 + ).add_extension( + ian, False + ) + + crl = builder.sign(private_key, None, backend) + assert crl.signature_hash_algorithm is None + assert crl.signature_algorithm_oid == SignatureAlgorithmOID.ED448 + assert crl.extensions.get_extension_for_class( + x509.IssuerAlternativeName + ).value == ian + assert crl[0].serial_number == revoked_cert0.serial_number + assert crl[0].revocation_date == revoked_cert0.revocation_date + assert len(crl[0].extensions) == 1 + ext = crl[0].extensions.get_extension_for_class(x509.InvalidityDate) + assert ext.critical is False + assert ext.value == invalidity_date + @pytest.mark.requires_backend_interface(interface=DSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_dsa_key_sign_md5(self, backend): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index cf757abddb37..10d217ab6434 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -1641,6 +1641,46 @@ def test_from_ec_public_key(self, backend): ) assert ext.value == ski + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_from_ed25519_public_key(self, backend): + cert = _load_cert( + os.path.join("x509", "ed25519", "root-ed25519.pem"), + x509.load_pem_x509_certificate, + backend + ) + + ext = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_KEY_IDENTIFIER + ) + ski = x509.SubjectKeyIdentifier.from_public_key( + cert.public_key() + ) + assert ext.value == ski + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_from_ed448_public_key(self, backend): + cert = _load_cert( + os.path.join("x509", "ed448", "root-ed448.pem"), + x509.load_pem_x509_certificate, + backend + ) + + ext = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_KEY_IDENTIFIER + ) + ski = x509.SubjectKeyIdentifier.from_public_key( + cert.public_key() + ) + assert ext.value == ski + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) diff --git a/vectors/cryptography_vectors/x509/ed448/root-ed448.pem b/vectors/cryptography_vectors/x509/ed448/root-ed448.pem new file mode 100644 index 000000000000..d1d4eaa9295b --- /dev/null +++ b/vectors/cryptography_vectors/x509/ed448/root-ed448.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBgDCCAQCgAwIBAgICAcAwBQYDK2VxMBgxFjAUBgNVBAMMDUVkNDQ4IERlbW8g +Q0EwIBcNMTkwODE1MTkzNzU2WhgPMjExOTA3MjIxOTM3NTZaMBgxFjAUBgNVBAMM +DUVkNDQ4IERlbW8gQ0EwQzAFBgMrZXEDOgBf10SbWbRh/Sznh+xhatRqHaE0JIWn +Dh+KDqddgOlneO3xJHabRscGG9Z4PfHlD2zR+hq+r+glYYCjUzBRMB0GA1UdDgQW +BBRt4IpyNR7xrevKLNfx/aaRVK36TzAfBgNVHSMEGDAWgBRt4IpyNR7xrevKLNfx +/aaRVK36TzAPBgNVHRMBAf8EBTADAQH/MAUGAytlcQNzAHx1CfZgc40PRGSiZTWC +P8HQAFgAMwIh34cE4WSrb1m8fxv8/uMG0bIvIez/+PMx/ErKPMtyBC2+ACJCCL0Q +In1OC28cIlpXIcQUFXamiGdg1Pd4NqAYl1BVNGWymHxf1AM/NNBPUhYxs1Qw1ape +dJIjAA== +-----END CERTIFICATE----- diff --git a/vectors/cryptography_vectors/x509/ed448/server-ed448-cert.pem b/vectors/cryptography_vectors/x509/ed448/server-ed448-cert.pem new file mode 100644 index 000000000000..740f27554977 --- /dev/null +++ b/vectors/cryptography_vectors/x509/ed448/server-ed448-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHTCCAQWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290 +IENBMCAXDTE4MDIyNzE1MDcxM1oYDzIxMTgwMjI4MTUwNzEzWjAQMQ4wDAYDVQQD +DAVFZDQ0ODBDMAUGAytlcQM6ABBicYlhG1s3AoG5BFmY3r50lJzjQoER4zwuieEe +QTvKxLEV06vGh79UWO6yQ5FxqmxvM1F/Xw7RAKNfMF0wHQYDVR0OBBYEFAwa1L4m +3pwA8+IEJ7K/4izrjJIHMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJ +MAkGA1UdEwQCMAAwEAYDVR0RBAkwB4IFRWQ0NDgwDQYJKoZIhvcNAQELBQADggEB +AAugH2aE6VvArnOVjKBtalqtHlx+NCC3+S65sdWc9A9sNgI1ZiN7dn76TKn5d0T7 +NqV8nY1rwQg6WPGrCD6Eh63qhotytqYIxltppb4MOUJcz/Zf0ZwhB5bUfwNB//Ih +5aZT86FpXVuyMnwUTWPcISJqpZiBv95yzZFMpniHFvecvV445ly4TFW5y6VURh40 +Tg4tMgjPTE7ADw+dX4FvnTWY3blxT1GzGxGvqWW4HgP8dOETnjmAwCzN0nUVmH9s +7ybHORcSljcpe0XH6L/K7mbI+r8mVLsAoIzUeDwUdKKJZ2uGEtdhQDmJBp4EjOXE +3qIn3wEQQ6ax4NIwkZihdLI= +-----END CERTIFICATE----- From 73114b39c1afe6061cc45acf02d185934ae08b04 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 9 Sep 2019 13:23:35 +0800 Subject: [PATCH 693/988] fix coverage, small cleanups in tests (#4990) --- tests/hazmat/backends/test_openssl.py | 10 +++++ tests/x509/test_ocsp.py | 4 +- tests/x509/test_x509.py | 56 +++++++++++++-------------- 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 8e765dd47b62..44fd3db4210d 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -453,6 +453,16 @@ def test_requires_certificate_builder(self): ) +class TestOpenSSLSignX509CSR(object): + def test_requires_csr_builder(self): + private_key = RSA_KEY_2048.private_key(backend) + + with pytest.raises(TypeError): + backend.create_x509_csr( + object(), private_key, DummyHashAlgorithm() + ) + + class TestOpenSSLSignX509CertificateRevocationList(object): def test_invalid_builder(self): private_key = RSA_KEY_2048.private_key(backend) diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index ab3752a2e2f5..0b86943a11a2 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -766,7 +766,7 @@ def test_sign_ed25519(self, backend): builder = ocsp.OCSPResponseBuilder() cert, issuer = _cert_and_issuer() private_key = ed25519.Ed25519PrivateKey.generate() - root_cert, private_key = _generate_root(private_key, None) + root_cert, _ = _generate_root(private_key, None) current_time = datetime.datetime.utcnow().replace(microsecond=0) this_update = current_time - datetime.timedelta(days=1) next_update = this_update + datetime.timedelta(days=7) @@ -799,7 +799,7 @@ def test_sign_ed448(self, backend): builder = ocsp.OCSPResponseBuilder() cert, issuer = _cert_and_issuer() private_key = ed448.Ed448PrivateKey.generate() - root_cert = _generate_root(private_key, None)[0] + root_cert, _ = _generate_root(private_key, None) current_time = datetime.datetime.utcnow().replace(microsecond=0) this_update = current_time - datetime.timedelta(days=1) next_update = this_update + datetime.timedelta(days=7) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 8a8507bdaca8..07a6019bd139 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -2234,20 +2234,6 @@ def test_sign_with_unsupported_hash_ed25519(self, backend): with pytest.raises(ValueError): builder.sign(private_key, hashes.SHA256(), backend) - @pytest.mark.supported( - only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support" - ) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_request_with_unsupported_hash_ed25519(self, backend): - private_key = ed25519.Ed25519PrivateKey.generate() - builder = x509.CertificateSigningRequestBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ) - - with pytest.raises(ValueError): - builder.sign(private_key, hashes.SHA256(), backend) - @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), skip_message="Requires OpenSSL with Ed448 support" @@ -2272,20 +2258,6 @@ def test_sign_with_unsupported_hash_ed448(self, backend): with pytest.raises(ValueError): builder.sign(private_key, hashes.SHA256(), backend) - @pytest.mark.supported( - only_if=lambda backend: backend.ed448_supported(), - skip_message="Requires OpenSSL with Ed448 support" - ) - @pytest.mark.requires_backend_interface(interface=X509Backend) - def test_request_with_unsupported_hash_ed448(self, backend): - private_key = ed448.Ed448PrivateKey.generate() - builder = x509.CertificateSigningRequestBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ) - - with pytest.raises(ValueError): - builder.sign(private_key, hashes.SHA256(), backend) - @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @pytest.mark.supported( @@ -3097,6 +3069,34 @@ def test_sign_invalid_hash_algorithm(self, backend): with pytest.raises(TypeError): builder.sign(private_key, 'NotAHash', backend) + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_request_with_unsupported_hash_ed25519(self, backend): + private_key = ed25519.Ed25519PrivateKey.generate() + builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ) + + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" + ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_request_with_unsupported_hash_ed448(self, backend): + private_key = ed448.Ed448PrivateKey.generate() + builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ) + + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported(hashes.MD5()), From 91f81c514d2d4426ba94cda4f6bcb5719843b760 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 9 Sep 2019 20:15:44 +0800 Subject: [PATCH 694/988] one more missing branch (#4992) --- tests/x509/test_ocsp.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 0b86943a11a2..3e2923e15ae4 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -758,6 +758,29 @@ def test_invalid_serialize_encoding(self): class TestOCSPEdDSA(object): + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Requires OpenSSL with Ed25519 support / OCSP" + ) + def test_invalid_algorithm(self, backend): + builder = ocsp.OCSPResponseBuilder() + cert, issuer = _cert_and_issuer() + private_key = ed25519.Ed25519PrivateKey.generate() + root_cert, _ = _generate_root(private_key, None) + current_time = datetime.datetime.utcnow().replace(microsecond=0) + this_update = current_time - datetime.timedelta(days=1) + next_update = this_update + datetime.timedelta(days=7) + revoked_date = this_update - datetime.timedelta(days=300) + builder = builder.responder_id( + ocsp.OCSPResponderEncoding.NAME, root_cert + ).add_response( + cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, + this_update, next_update, revoked_date, + x509.ReasonFlags.key_compromise + ) + with pytest.raises(ValueError): + builder.sign(private_key, hashes.SHA256()) + @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), skip_message="Requires OpenSSL with Ed25519 support / OCSP" From 5e671cd7471ba98d55fc425b38abe3d346a46ee1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 9 Sep 2019 20:16:49 +0800 Subject: [PATCH 695/988] it's called FIPS_mode_set, not FIPS_set_mode (#4988) --- src/cryptography/hazmat/bindings/openssl/_conditional.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index a2eee181d06a..a39bb6683db1 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -269,7 +269,7 @@ def cryptography_has_evp_pkey_get_set_tls_encodedpoint(): def cryptography_has_fips(): return [ - "FIPS_set_mode", + "FIPS_mode_set", "FIPS_mode", ] From 97570e64456a98d6b34258fac4857126c24c5235 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 9 Sep 2019 20:17:44 +0800 Subject: [PATCH 696/988] we're done here (#4991) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 75fa9fe17a40..a3e40b7c6294 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -183,6 +183,8 @@ linkcheck_ignore = [ # Small DH key results in a TLS failure on modern OpenSSL r"https://info.isl.ntt.co.jp/crypt/eng/camellia/", + # Inconsistent small DH params they seem incapable of fixing + r"https://www.secg.org/sec1-v2.pdf", # 403ing from Travis r"https://devblogs.microsoft.com/oldnewthing/\?p=4223", ] From 3bf44b7c847cc5983834355af84b19e96c535652 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 10 Sep 2019 01:28:33 +0800 Subject: [PATCH 697/988] update libressl and pypy2.7 and pypy3.5 (#4989) * update libressl and pypy2.7 and pypy3.5 * okay can't get 7.1, let's try to at least do 7.0 * 7.1.1 does actually exist * also an empty commit to appease the codecov gods --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae6f57492a4b..472ba032156a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,9 +37,11 @@ matrix: env: TOXENV=pypy-nocoverage # PyPy 5.4 isn't available for xenial dist: trusty - - python: pypy2.7-5.10.0 + - python: pypy2.7-7.1.1 + # I don't know how to enumerate pypy versions in Travis other than to look at + # https://github.com/travis-ci/travis-nightly-builder/blob/build/Rakefile#L74-L106 env: TOXENV=pypy-nocoverage - - python: pypy3.5-5.10.1 + - python: pypy3.5-7.0 env: TOXENV=pypy3-nocoverage - python: 2.7 env: TOXENV=py27 OPENSSL=1.0.1u @@ -62,7 +64,7 @@ matrix: - python: 3.7 env: TOXENV=py37 LIBRESSL=2.8.3 - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.9.1 + env: TOXENV=py37 LIBRESSL=2.9.2 - python: 2.7 services: docker From 7b2b3a65800b7c004399da5b3b6f431aa30946cc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 9 Sep 2019 16:32:59 -0500 Subject: [PATCH 698/988] Simplify implementing sequence methods (#4987) * Simplify implementing sequence methods * flake8 --- src/cryptography/x509/extensions.py | 125 +++++++--------------------- 1 file changed, 31 insertions(+), 94 deletions(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 5bef99453de0..f60075a8fbe1 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -70,6 +70,19 @@ def _key_identifier_from_public_key(public_key): return hashlib.sha1(data).digest() +def _make_sequence_methods(field_name): + def len_method(self): + return len(getattr(self, field_name)) + + def iter_method(self): + return iter(getattr(self, field_name)) + + def getitem_method(self, idx): + return getattr(self, field_name)[idx] + + return len_method, iter_method, getitem_method + + class DuplicateExtension(Exception): def __init__(self, msg, oid): super(DuplicateExtension, self).__init__(msg) @@ -118,14 +131,7 @@ def get_extension_for_class(self, extclass): "No {} extension was found".format(extclass), extclass.oid ) - def __iter__(self): - return iter(self._extensions) - - def __len__(self): - return len(self._extensions) - - def __getitem__(self, idx): - return self._extensions[idx] + __len__, __iter__, __getitem__ = _make_sequence_methods("_extensions") def __repr__(self): return ( @@ -307,11 +313,7 @@ def __init__(self, descriptions): self._descriptions = descriptions - def __iter__(self): - return iter(self._descriptions) - - def __len__(self): - return len(self._descriptions) + __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions") def __repr__(self): return "".format(self._descriptions) @@ -325,9 +327,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._descriptions[idx] - def __hash__(self): return hash(tuple(self._descriptions)) @@ -454,11 +453,9 @@ def __init__(self, distribution_points): self._distribution_points = distribution_points - def __iter__(self): - return iter(self._distribution_points) - - def __len__(self): - return len(self._distribution_points) + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_distribution_points" + ) def __repr__(self): return "".format(self._distribution_points) @@ -472,9 +469,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._distribution_points[idx] - def __hash__(self): return hash(tuple(self._distribution_points)) @@ -495,11 +489,9 @@ def __init__(self, distribution_points): self._distribution_points = distribution_points - def __iter__(self): - return iter(self._distribution_points) - - def __len__(self): - return len(self._distribution_points) + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_distribution_points" + ) def __repr__(self): return "".format(self._distribution_points) @@ -513,9 +505,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._distribution_points[idx] - def __hash__(self): return hash(tuple(self._distribution_points)) @@ -701,11 +690,7 @@ def __init__(self, policies): self._policies = policies - def __iter__(self): - return iter(self._policies) - - def __len__(self): - return len(self._policies) + __len__, __iter__, __getitem__ = _make_sequence_methods("_policies") def __repr__(self): return "".format(self._policies) @@ -719,9 +704,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._policies[idx] - def __hash__(self): return hash(tuple(self._policies)) @@ -862,11 +844,7 @@ def __init__(self, usages): self._usages = usages - def __iter__(self): - return iter(self._usages) - - def __len__(self): - return len(self._usages) + __len__, __iter__, __getitem__ = _make_sequence_methods("_usages") def __repr__(self): return "".format(self._usages) @@ -941,11 +919,7 @@ def __init__(self, features): self._features = features - def __iter__(self): - return iter(self._features) - - def __len__(self): - return len(self._features) + __len__, __iter__, __getitem__ = _make_sequence_methods("_features") def __repr__(self): return "".format(self) @@ -956,9 +930,6 @@ def __eq__(self, other): return self._features == other._features - def __getitem__(self, idx): - return self._features[idx] - def __ne__(self, other): return not self == other @@ -1237,12 +1208,7 @@ def __init__(self, general_names): ) self._general_names = general_names - - def __iter__(self): - return iter(self._general_names) - - def __len__(self): - return len(self._general_names) + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") def get_values_for_type(self, type): # Return the value of each GeneralName, except for OtherName instances @@ -1265,9 +1231,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._general_names[idx] - def __hash__(self): return hash(tuple(self._general_names)) @@ -1279,11 +1242,7 @@ class SubjectAlternativeName(object): def __init__(self, general_names): self._general_names = GeneralNames(general_names) - def __iter__(self): - return iter(self._general_names) - - def __len__(self): - return len(self._general_names) + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") def get_values_for_type(self, type): return self._general_names.get_values_for_type(type) @@ -1297,9 +1256,6 @@ def __eq__(self, other): return self._general_names == other._general_names - def __getitem__(self, idx): - return self._general_names[idx] - def __ne__(self, other): return not self == other @@ -1314,11 +1270,7 @@ class IssuerAlternativeName(object): def __init__(self, general_names): self._general_names = GeneralNames(general_names) - def __iter__(self): - return iter(self._general_names) - - def __len__(self): - return len(self._general_names) + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") def get_values_for_type(self, type): return self._general_names.get_values_for_type(type) @@ -1335,9 +1287,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._general_names[idx] - def __hash__(self): return hash(self._general_names) @@ -1349,11 +1298,7 @@ class CertificateIssuer(object): def __init__(self, general_names): self._general_names = GeneralNames(general_names) - def __iter__(self): - return iter(self._general_names) - - def __len__(self): - return len(self._general_names) + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") def get_values_for_type(self, type): return self._general_names.get_values_for_type(type) @@ -1370,9 +1315,6 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def __getitem__(self, idx): - return self._general_names[idx] - def __hash__(self): return hash(self._general_names) @@ -1451,14 +1393,9 @@ def __init__(self, signed_certificate_timestamps): ) self._signed_certificate_timestamps = signed_certificate_timestamps - def __iter__(self): - return iter(self._signed_certificate_timestamps) - - def __len__(self): - return len(self._signed_certificate_timestamps) - - def __getitem__(self, idx): - return self._signed_certificate_timestamps[idx] + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_signed_certificate_timestamps" + ) def __repr__(self): return ( From e575e3d482f976c4a1f3203d63ea0f5007a49a2a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 11 Sep 2019 12:12:30 +0800 Subject: [PATCH 699/988] update our test to be more robust wrt some changes from upstream (#4993) --- tests/hazmat/primitives/test_dh.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index c667cd16e1a6..43f2ce5c0318 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -157,8 +157,15 @@ def test_unsupported_generator_generate_dh(self, backend): dh.generate_parameters(7, 512, backend) def test_dh_parameters_supported(self, backend): - assert backend.dh_parameters_supported(23, 5) - assert not backend.dh_parameters_supported(23, 18) + valid_p = int( + b"907c7211ae61aaaba1825ff53b6cb71ac6df9f1a424c033f4a0a41ac42fad3a9" + b"bcfc7f938a269710ed69e330523e4039029b7900977c740990d46efed79b9bbe" + b"73505ae878808944ce4d9c6c52daecc0a87dc889c53499be93db8551ee685f30" + b"349bf1b443d4ebaee0d5e8b441a40d4e8178f8f612f657a5eb91e0a8e" + b"107755f", 16 + ) + assert backend.dh_parameters_supported(valid_p, 5) + assert not backend.dh_parameters_supported(23, 22) @pytest.mark.parametrize( "vector", From 9c759d08870d972f1d84e8543130bfb26be4e442 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 16 Oct 2019 11:51:09 +0800 Subject: [PATCH 700/988] update openssls (#4995) * update openssls * missed one * what will this do * only do this check for 1.1.0+ --- .travis.yml | 16 ++++++++-------- src/_cffi_src/openssl/ec.py | 2 ++ src/cryptography/hazmat/backends/openssl/ec.py | 18 +++++++++++++++--- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 472ba032156a..1a9919a95cb7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,15 +48,15 @@ matrix: - python: 3.7 env: TOXENV=py37 OPENSSL=1.0.1u - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.0k + env: TOXENV=py27 OPENSSL=1.1.0l - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0k + env: TOXENV=py35 OPENSSL=1.1.0l - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1c + env: TOXENV=py27 OPENSSL=1.1.1d - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1c + env: TOXENV=py37 OPENSSL=1.1.1d - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1c OPENSSL_CONFIG_FLAGS=no-engine + env: TOXENV=py37 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS=no-engine - python: 3.7 env: TOXENV=py37 LIBRESSL=2.6.5 - python: 3.7 @@ -110,7 +110,7 @@ matrix: env: TOXENV=py37 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.6 - env: TOXENV=docs OPENSSL=1.1.1b + env: TOXENV=docs OPENSSL=1.1.1d addons: apt: packages: @@ -133,9 +133,9 @@ matrix: - python: 2.7 # BOTO_CONFIG works around this boto issue on travis: # https://github.com/boto/boto/issues/3717 - env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0k BOTO_CONFIG=/dev/null + env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0l BOTO_CONFIG=/dev/null - python: 2.7 - env: DOWNSTREAM=certbot OPENSSL=1.1.0k + env: DOWNSTREAM=certbot OPENSSL=1.1.0l - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 diff --git a/src/_cffi_src/openssl/ec.py b/src/_cffi_src/openssl/ec.py index 258afa21174e..52f6001438d0 100644 --- a/src/_cffi_src/openssl/ec.py +++ b/src/_cffi_src/openssl/ec.py @@ -105,6 +105,8 @@ int EC_METHOD_get_field_type(const EC_METHOD *); const char *EC_curve_nid2nist(int); + +int EC_GROUP_get_asn1_flag(const EC_GROUP *); """ CUSTOMIZATIONS = """ diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index 2ca48091da1d..3d8681b43e72 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -34,7 +34,19 @@ def _ec_key_curve_sn(backend, ec_key): # an error for now. if nid == backend._lib.NID_undef: raise NotImplementedError( - "ECDSA certificates with unnamed curves are unsupported " + "ECDSA keys with unnamed curves are unsupported " + "at this time" + ) + + # This is like the above check, but it also catches the case where you + # explicitly encoded a curve with the same parameters as a named curve. + # Don't do that. + if ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER and + backend._lib.EC_GROUP_get_asn1_flag(group) == 0 + ): + raise NotImplementedError( + "ECDSA keys with unnamed curves are unsupported " "at this time" ) @@ -127,12 +139,12 @@ def verify(self): class _EllipticCurvePrivateKey(object): def __init__(self, backend, ec_key_cdata, evp_pkey): self._backend = backend - _mark_asn1_named_ec_curve(backend, ec_key_cdata) self._ec_key = ec_key_cdata self._evp_pkey = evp_pkey sn = _ec_key_curve_sn(backend, ec_key_cdata) self._curve = _sn_to_elliptic_curve(backend, sn) + _mark_asn1_named_ec_curve(backend, ec_key_cdata) curve = utils.read_only_property("_curve") @@ -229,12 +241,12 @@ def sign(self, data, signature_algorithm): class _EllipticCurvePublicKey(object): def __init__(self, backend, ec_key_cdata, evp_pkey): self._backend = backend - _mark_asn1_named_ec_curve(backend, ec_key_cdata) self._ec_key = ec_key_cdata self._evp_pkey = evp_pkey sn = _ec_key_curve_sn(backend, ec_key_cdata) self._curve = _sn_to_elliptic_curve(backend, sn) + _mark_asn1_named_ec_curve(backend, ec_key_cdata) curve = utils.read_only_property("_curve") From ae13fec7fcf795afc198a14daaaf6e33b0513647 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 16 Oct 2019 20:32:04 -0400 Subject: [PATCH 701/988] Fixes #5010 -- test and build 3.8 wheels (#5013) * Fixes #5010 -- test and build 3.8 wheels * try using isolated_build = True to work around a failure --- .azure-pipelines/wheel-builder.yml | 10 ++++++++++ .travis.yml | 2 ++ CHANGELOG.rst | 3 +++ azure-pipelines.yml | 12 ++++++++++++ setup.py | 1 + tox.ini | 3 ++- 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index b3ec8ee0d181..a93ec836971d 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -204,6 +204,16 @@ jobs: PYTHON_VERSION: '37' OPENSSL_DIR: 'OpenSSL-Win64-2015' WINDOWS_ARCH: 'x86_64' + Python38-x86: + containerImage: 'pyca/cryptography-runner-windows:py3-x86' + PYTHON_VERSION: '38' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + WINDOWS_ARCH: 'x86' + Python38-x86-64: + containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' + PYTHON_VERSION: '38' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + WINDOWS_ARCH: 'x86_64' steps: - script: '"C:/Python%PYTHON_VERSION%/python.exe" -m pip install -U pip==10.0.1' displayName: Downgrade pip lol diff --git a/.travis.yml b/.travis.yml index 1a9919a95cb7..5348f4c638d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,8 @@ matrix: env: TOXENV=py36 - python: 3.7 env: TOXENV=py37 + - python: 3.8 + env: TOXENV=py38 - python: 3.7 env: TOXENV=py37-idna - python: pypy-5.4 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9a4a79ba8619..f413f0649044 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,9 @@ Changelog .. note:: This version is not yet released and is under active development. +* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with + OpenSSL 1.1.1d. +* Added support for Python 3.8. * Added class methods :meth:`Poly1305.generate_tag ` diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dcb5050be1c8..ba04498dafd9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -130,6 +130,18 @@ jobs: OPENSSL_DIR: 'OpenSSL-Win64-2015' PYTHON_DIR: 'Python37' WINDOWS_ARCH: 'x86_64' + Python38-x86: + TOXENV: py38 + containerImage: 'pyca/cryptography-runner-windows:py3-x86' + OPENSSL_DIR: 'OpenSSL-Win32-2015' + PYTHON_DIR: 'Python38' + WINDOWS_ARCH: 'x86' + Python38-x86-64: + TOXENV: py38 + containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' + OPENSSL_DIR: 'OpenSSL-Win64-2015' + PYTHON_DIR: 'Python38' + WINDOWS_ARCH: 'x86_64' steps: - script: C:/%PYTHON_DIR%/Scripts/pip install codecov displayName: 'Install codecov' diff --git a/setup.py b/setup.py index 8ca985dd6373..ae01916b6086 100644 --- a/setup.py +++ b/setup.py @@ -221,6 +221,7 @@ def run(self): "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Security :: Cryptography", diff --git a/tox.ini b/tox.ini index ffa62a39c6b1..7de764f7c004 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,7 @@ [tox] minversion = 2.4 -envlist = py27,pypy,py34,py35,py36,py37,docs,pep8,packaging +envlist = py27,pypy,py34,py35,py36,py37,py38,docs,pep8,packaging +isolated_build = True [testenv] extras = From 16d3ae1b8e96b4c112c0f17911b5d14f0ed20385 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Thu, 17 Oct 2019 04:07:56 +0300 Subject: [PATCH 702/988] UniversalString needs to be encoded as UCS-4 (#5000) --- .../hazmat/backends/openssl/encode_asn1.py | 2 ++ tests/x509/test_x509.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index fc16a58ba8ee..ca35f0e77b0a 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -121,6 +121,8 @@ def _encode_sk_name_entry(backend, attributes): def _encode_name_entry(backend, attribute): if attribute._type is _ASN1Type.BMPString: value = attribute.value.encode('utf_16_be') + elif attribute._type is _ASN1Type.UniversalString: + value = attribute.value.encode('utf_32_be') else: value = attribute.value.encode('utf8') diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 07a6019bd139..fa3a41a70780 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -4602,6 +4602,23 @@ def test_bmpstring_bytes(self, backend): b"7000680079002e0069006f310d300b060355040a0c0450794341" ) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_universalstring_bytes(self, backend): + # UniversalString is UCS-4 + name = x509.Name([ + x509.NameAttribute( + NameOID.COMMON_NAME, + u'cryptography.io', + _ASN1Type.UniversalString + ), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), + ]) + assert name.public_bytes(backend) == binascii.unhexlify( + b"30563145304306035504031c3c00000063000000720000007900000070000000" + b"740000006f000000670000007200000061000000700000006800000079000000" + b"2e000000690000006f310d300b060355040a0c0450794341" + ) + @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), From dc7f138ea6ac12e5ab7275f1284665a529175cbf Mon Sep 17 00:00:00 2001 From: Sebastian Jordan Date: Thu, 17 Oct 2019 04:32:28 +0200 Subject: [PATCH 703/988] Comply with PEP 508 by using platform_python_implementation (#5006) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 21475bbb9664..e4d893fcba8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,6 @@ requires = [ "setuptools>=40.6.0", "wheel", # Must be kept in sync with the `setup_requirements` in `setup.py` - "cffi>=1.8,!=1.11.3; python_implementation != 'PyPy'", + "cffi>=1.8,!=1.11.3; platform_python_implementation != 'PyPy'", ] build-backend = "setuptools.build_meta" From d220d7ba56e1559b2b2fb7ff7dabf62202466eb7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 17 Oct 2019 19:30:23 +0800 Subject: [PATCH 704/988] =?UTF-8?q?Don=E2=80=99t=20downgrade=20pip=20on=20?= =?UTF-8?q?windows=20wheel=20building=20(#5015)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Don’t downgrade pip on windows wheel building * Conditionally install enum34 * Syntax --- .azure-pipelines/wheel-builder.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index a93ec836971d..d07967da03ab 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -106,7 +106,7 @@ jobs: displayName: Create virtualenv - script: .venv/bin/pip install -U pip==10.0.1 displayName: Downgrade pip lol - - script: .venv/bin/pip install cffi six ipaddress enum34 + - script: .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" displayName: Install our Python dependencies - script: | set -e @@ -215,9 +215,8 @@ jobs: OPENSSL_DIR: 'OpenSSL-Win64-2015' WINDOWS_ARCH: 'x86_64' steps: - - script: '"C:/Python%PYTHON_VERSION%/python.exe" -m pip install -U pip==10.0.1' - displayName: Downgrade pip lol - - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install wheel cffi six ipaddress enum34' + - script: | + "C:/Python%PYTHON_VERSION%/Scripts/pip" install cffi six ipaddress "enum34; python_version < '3'" displayName: Install wheel and our Python dependencies - script: | set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% From 25494f96d57b8995ee2fde099146b1192582ee1b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 17 Oct 2019 08:58:06 -0400 Subject: [PATCH 705/988] Bump versions for 2.8 release (#5014) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 4 ++-- vectors/cryptography_vectors/__about__.py | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f413f0649044..e3d2b9feae75 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-8: -2.8 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.8 - 2019-10-16 +~~~~~~~~~~~~~~~~ * Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with OpenSSL 1.1.1d. diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 703a4a5ef606..4055e2945620 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,10 +14,10 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.8.dev1" +__version__ = "2.8" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" __license__ = "BSD or Apache License, Version 2.0" -__copyright__ = "Copyright 2013-2017 {}".format(__author__) +__copyright__ = "Copyright 2013-2019 {}".format(__author__) diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index c550032d8890..464caf07b30c 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,10 +14,10 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.8.dev1" +__version__ = "2.8" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" __license__ = "BSD or Apache License, Version 2.0" -__copyright__ = "Copyright 2013-2017 %s" % __author__ +__copyright__ = "Copyright 2013-2019 %s" % __author__ From a1307a1f34e4f6f8f124cde92ec53c4cd0580078 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2019 05:55:12 +0800 Subject: [PATCH 706/988] reopen master for the 2.9 release (#5017) --- CHANGELOG.rst | 9 ++++++++- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e3d2b9feae75..228c5f43405d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,12 +1,19 @@ Changelog ========= +.. _v2-9: + +2.9 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-8: 2.8 - 2019-10-16 ~~~~~~~~~~~~~~~~ -* Updated Windows, macOS, and ``manylinux1`` wheels to be compiled with +* Updated Windows, macOS, and ``manylinux`` wheels to be compiled with OpenSSL 1.1.1d. * Added support for Python 3.8. * Added class methods diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 4055e2945620..f0abdca8cef3 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.8" +__version__ = "2.9.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 464caf07b30c..2eb1f834fafc 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.8" +__version__ = "2.9.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 1c186772f6fd64180bd3387de2e1ef1a6d1ba58e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 18 Oct 2019 08:47:15 -0400 Subject: [PATCH 707/988] Fixes #5018 -- break users on OpenSSL 1.0.1 (#5022) * Fixes #5018 -- break users on OpenSSL 1.0.1 * Grammar * Syntax error * Missing import * Missing import --- CHANGELOG.rst | 3 +++ docs/faq.rst | 13 ++++++++++++ docs/installation.rst | 4 ++-- .../hazmat/bindings/openssl/binding.py | 20 +++++++++++++------ tests/hazmat/bindings/test_openssl.py | 14 ++++++++++++- tox.ini | 2 ++ 6 files changed, 47 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 228c5f43405d..607f67b8b48d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,9 @@ Changelog .. note:: This version is not yet released and is under active development. +* Support for OpenSSL 1.0.1 has been removed. Users on older version of OpenSSL + will need to upgrade. + .. _v2-8: 2.8 - 2019-10-16 diff --git a/docs/faq.rst b/docs/faq.rst index 6d876610f7fe..235da672b08c 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -82,6 +82,19 @@ Your ``pip`` and/or ``setuptools`` are outdated. Please upgrade to the latest versions with ``pip install -U pip setuptools`` (or on Windows ``python -m pip install -U pip setuptools``). +Importing cryptography causes a ``RuntimeError`` about OpenSSL 1.0.1 +-------------------------------------------------------------------- + +The OpenSSL project has dropped support for the 1.0.1 release series. Since it +is no longer receiving security patches from upstream, ``cryptography`` is also +dropping support for it. To fix this issue you should upgrade to a newer +version of OpenSSL (1.0.2 or later). This may require you to upgrade to a newer +operating system. + +For the 2.9 release, you can set the ``CRYPTOGRAPHY_ALLOW_OPENSSL_101`` +environment variable. Please note that this is *temporary* and will be removed +in ``cryptography`` 3.0. + Installing cryptography with OpenSSL 0.9.8 or 1.0.0 fails --------------------------------------------------------- diff --git a/docs/installation.rst b/docs/installation.rst index 2c83f33a9dfe..fc3fa8946594 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -32,8 +32,8 @@ OpenSSL releases: * ``OpenSSL 1.1.1-latest`` .. warning:: - OpenSSL 1.0.1 is no longer supported by the OpenSSL project. Cryptography - will drop support for it in the next release. + Cryptography 2.9 has dropped support for OpenSSL 1.0.1, see the + :doc:`FAQ ` for more details Building cryptography on Windows -------------------------------- diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 974051621892..1e0f34c9d470 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import collections +import os import threading import types import warnings @@ -156,12 +157,19 @@ def _verify_openssl_version(lib): lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and not lib.CRYPTOGRAPHY_IS_LIBRESSL ): - warnings.warn( - "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " - "project, please upgrade. The next version of cryptography will " - "drop support for it.", - utils.CryptographyDeprecationWarning - ) + if os.environ.get("CRYPTOGRAPHY_ALLOW_OPENSSL_101"): + warnings.warn( + "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " + "project, please upgrade. The next version of cryptography " + "will completely remove support for it.", + utils.CryptographyDeprecationWarning + ) + else: + raise RuntimeError( + "You are linking against OpenSSL 1.0.1, which is no longer " + "supported by the OpenSSL project. You need to upgrade to a " + "newer version of OpenSSL." + ) def _verify_package_version(version): diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 29a1c459fa96..e9bcc18e5495 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -4,11 +4,14 @@ from __future__ import absolute_import, division, print_function +import pretend + import pytest from cryptography.exceptions import InternalError from cryptography.hazmat.bindings.openssl.binding import ( - Binding, _consume_errors, _openssl_assert, _verify_package_version + Binding, _consume_errors, _openssl_assert, _verify_openssl_version, + _verify_package_version ) @@ -122,3 +125,12 @@ def test_check_startup_errors_are_allowed(self): def test_version_mismatch(self): with pytest.raises(ImportError): _verify_package_version("nottherightversion") + + def test_verify_openssl_version(self, monkeypatch): + monkeypatch.delenv("CRYPTOGRAPHY_ALLOW_OPENSSL_101", raising=False) + lib = pretend.stub( + CRYPTOGRAPHY_OPENSSL_LESS_THAN_102=True, + CRYPTOGRAPHY_IS_LIBRESSL=False + ) + with pytest.raises(RuntimeError): + _verify_openssl_version(lib) diff --git a/tox.ini b/tox.ini index 7de764f7c004..6c414973f71d 100644 --- a/tox.ini +++ b/tox.ini @@ -13,6 +13,8 @@ deps = ./vectors randomorder: pytest-randomly passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING +setenv = + CRYPTOGRAPHY_ALLOW_OPENSSL_101=1 commands = pip list # We use parallel mode and then combine here so that coverage.py will take From 2620fd85d82308401ab6888ef178496b07263b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Sat, 19 Oct 2019 01:12:03 +0200 Subject: [PATCH 708/988] Correctly document `backend` argument of KBKDFHMAC (#5026) The documentation states that `backend` should be a `HashBackend` instance when in fact it should be a `HMACBackend` instance. --- docs/hazmat/primitives/key-derivation-functions.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index af7fb40a33d5..fe9f0b0d77f0 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -674,12 +674,12 @@ Different KDFs are suitable for different tasks such as: and ``context`` is ignored. :param backend: A cryptography backend - :class:`~cryptography.hazmat.backends.interfaces.HashBackend` + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` instance. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the provided ``backend`` does not implement - :class:`~cryptography.hazmat.backends.interfaces.HashBackend` + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` :raises TypeError: This exception is raised if ``label`` or ``context`` is not ``bytes``. Also raised if ``rlen`` or ``llen`` is not ``int``. From b53ecefbf54323b623d2ec4803c48edadfa8d6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Sat, 19 Oct 2019 01:23:26 +0200 Subject: [PATCH 709/988] Move `backend` argument in Scrypt documentation (#5027) Move the `backend` argument up with the rest of the constructor arguments, otherwise it's easy to miss it. --- docs/hazmat/primitives/key-derivation-functions.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index fe9f0b0d77f0..40a0c3db0e0d 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -789,6 +789,8 @@ Different KDFs are suitable for different tasks such as: power of 2. :param int r: Block size parameter. :param int p: Parallelization parameter. + :param backend: An instance of + :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend`. The computational and memory cost of Scrypt can be adjusted by manipulating the 3 parameters: ``n``, ``r``, and ``p``. In general, the memory cost of @@ -802,9 +804,6 @@ Different KDFs are suitable for different tasks such as: minimum value of ``n=2**14`` for interactive logins (t < 100ms), or ``n=2**20`` for more sensitive files (t < 5s). - :param backend: An instance of - :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend`. - :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the provided ``backend`` does not implement :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend` From c453041ad2fc0e36592ea200618e7db50df65a9e Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Sat, 19 Oct 2019 01:26:03 +0200 Subject: [PATCH 710/988] Fix documentation of AuthorityKeyIdentifier.authority_cert_issuer. (#5001) --- docs/x509/reference.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 46cc0d27d8c2..6eca950b09d4 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1863,7 +1863,7 @@ X.509 Extensions :type: A list of :class:`GeneralName` instances or None - The :class:`Name` of the issuer's issuer. + The :class:`GeneralName` (one or multiple) of the issuer's issuer. .. attribute:: authority_cert_serial_number From dbe203a37b8956f4d194798859d41a421d02542e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 19 Oct 2019 19:50:21 -0400 Subject: [PATCH 711/988] Test against libressl 3.0 (#5031) * Test against libressl 3.0 * Correctly type these ints --- .travis.yml | 2 ++ src/_cffi_src/openssl/callbacks.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5348f4c638d5..4992eb7e0d14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -67,6 +67,8 @@ matrix: env: TOXENV=py37 LIBRESSL=2.8.3 - python: 3.7 env: TOXENV=py37 LIBRESSL=2.9.2 + - python: 3.8 + env: TOXENV=py38 LIBRESSL=3.0.2 - python: 2.7 services: docker diff --git a/src/_cffi_src/openssl/callbacks.py b/src/_cffi_src/openssl/callbacks.py index 75c620165209..8ee01e0ed1a1 100644 --- a/src/_cffi_src/openssl/callbacks.py +++ b/src/_cffi_src/openssl/callbacks.py @@ -81,7 +81,7 @@ #endif -static unsigned int _ssl_locks_count = 0; +static int _ssl_locks_count = 0; static Cryptography_mutex *_ssl_locks = NULL; static void _ssl_thread_locking_function(int mode, int n, const char *file, @@ -101,7 +101,7 @@ */ if ((_ssl_locks == NULL) || - (n < 0) || ((unsigned)n >= _ssl_locks_count)) { + (n < 0) || (n >= _ssl_locks_count)) { return; } From 8406100cea0ec2e67e63d2676a88973250c2e9b9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 19 Oct 2019 23:21:59 -0400 Subject: [PATCH 712/988] Use 3.8 in CI where we want 'the latest 3.x' (#5021) * Use 3.8 in CI where we want 'the latest 3.x' * Revert macOS changes for now --- .travis.yml | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4992eb7e0d14..eef11ac88895 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ matrix: include: - python: 3.4 env: TOXENV=pep8 - # these are just to make travis's UI a bit prettier + # Setting 'python' is just to make travis's UI a bit prettier - python: 2.7 env: TOXENV=py27 - python: 3.4 @@ -33,8 +33,8 @@ matrix: env: TOXENV=py37 - python: 3.8 env: TOXENV=py38 - - python: 3.7 - env: TOXENV=py37-idna + - python: 3.8 + env: TOXENV=py38-idna - python: pypy-5.4 env: TOXENV=pypy-nocoverage # PyPy 5.4 isn't available for xenial @@ -47,26 +47,26 @@ matrix: env: TOXENV=pypy3-nocoverage - python: 2.7 env: TOXENV=py27 OPENSSL=1.0.1u - - python: 3.7 - env: TOXENV=py37 OPENSSL=1.0.1u + - python: 3.8 + env: TOXENV=py38 OPENSSL=1.0.1u - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l - - python: 3.5 - env: TOXENV=py35 OPENSSL=1.1.0l + - python: 3.8 + env: TOXENV=py38 OPENSSL=1.1.0l - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.1d - - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1d - - python: 3.7 - env: TOXENV=py37 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS=no-engine - - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.6.5 - - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.7.5 - - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.8.3 - - python: 3.7 - env: TOXENV=py37 LIBRESSL=2.9.2 + - python: 3.8 + env: TOXENV=py38 OPENSSL=1.1.1d + - python: 3.8 + env: TOXENV=py38 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS=no-engine + - python: 3.8 + env: TOXENV=py38 LIBRESSL=2.6.5 + - python: 3.8 + env: TOXENV=py38 LIBRESSL=2.7.5 + - python: 3.8 + env: TOXENV=py38 LIBRESSL=2.8.3 + - python: 3.8 + env: TOXENV=py38 LIBRESSL=2.9.2 - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 @@ -113,7 +113,7 @@ matrix: services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-alpine:latest - - python: 3.6 + - python: 3.8 env: TOXENV=docs OPENSSL=1.1.1d addons: apt: @@ -123,7 +123,7 @@ matrix: services: docker env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/ - - python: 3.7 + - python: 3.8 env: TOXENV=packaging - python: 2.7 From 95a886a807aa6c8a7eb5cfcc1327e954b3402b62 Mon Sep 17 00:00:00 2001 From: Ofek Lev Date: Wed, 23 Oct 2019 08:26:36 -0400 Subject: [PATCH 713/988] fix copy pasta in example snippet (#5033) --- docs/hazmat/primitives/asymmetric/ec.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index d8b8c052752c..05dd846c0491 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -773,9 +773,8 @@ This sample demonstrates how to generate a private key and serialize it. .. doctest:: >>> from cryptography.hazmat.backends import default_backend - >>> from cryptography.hazmat.primitives import hashes - >>> from cryptography.hazmat.primitives.asymmetric import ec >>> from cryptography.hazmat.primitives import serialization + >>> from cryptography.hazmat.primitives.asymmetric import ec >>> private_key = ec.generate_private_key(ec.SECP384R1(), default_backend()) From e400dc061ddbd505bbb4f3fe9797682e314717fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20B=C3=A9langer?= Date: Wed, 23 Oct 2019 15:40:42 -0700 Subject: [PATCH 714/988] Silence unguarded availability warnings for `getentropy` when targeting macOS 10.12 (#5019) * silence `Wunguarded-availability` when building with a `MACOSX_DEPLOYMENT_TARGET < 10.12` * use `__builtin_available` rather than a `NULL` echo upon init on mac --- src/_cffi_src/openssl/src/osrandom_engine.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index 1b893ec774bb..dc7b1d5e938a 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -251,7 +251,7 @@ static int osrandom_init(ENGINE *e) { #if !defined(__APPLE__) getentropy_works = CRYPTOGRAPHY_OSRANDOM_GETENTROPY_WORKS; #else - if (&getentropy != NULL) { + if (__builtin_available(macOS 10.12, *)) { getentropy_works = CRYPTOGRAPHY_OSRANDOM_GETENTROPY_WORKS; } else { getentropy_works = CRYPTOGRAPHY_OSRANDOM_GETENTROPY_FALLBACK; @@ -277,7 +277,11 @@ static int osrandom_rand_bytes(unsigned char *buffer, int size) { while (size > 0) { /* OpenBSD and macOS restrict maximum buffer size to 256. */ len = size > 256 ? 256 : size; +/* on mac, availability is already checked using `__builtin_available` above */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" res = getentropy(buffer, (size_t)len); +#pragma clang diagnostic pop if (res < 0) { ERR_Cryptography_OSRandom_error( CRYPTOGRAPHY_OSRANDOM_F_RAND_BYTES, From fdd594cd5d0024f67e51694687e290c3b6f58460 Mon Sep 17 00:00:00 2001 From: Clayton Smith Date: Tue, 29 Oct 2019 08:19:34 -0400 Subject: [PATCH 715/988] Don't bother computing y coefficient in _modinv (#5037) --- src/cryptography/hazmat/primitives/asymmetric/rsa.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cryptography/hazmat/primitives/asymmetric/rsa.py b/src/cryptography/hazmat/primitives/asymmetric/rsa.py index 27db671af8cb..f20cdf9c929d 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -184,12 +184,12 @@ def _modinv(e, m): """ Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1 """ - x1, y1, x2, y2 = 1, 0, 0, 1 + x1, x2 = 1, 0 a, b = e, m while b > 0: q, r = divmod(a, b) - xn, yn = x1 - q * x2, y1 - q * y2 - a, b, x1, y1, x2, y2 = b, r, x2, y2, xn, yn + xn = x1 - q * x2 + a, b, x1, x2 = b, r, x2, xn return x1 % m From 1ac31deb19dff6b3155115ac10059d23eab1529e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 31 Oct 2019 21:10:29 -0400 Subject: [PATCH 716/988] Add a comment so we can easily find a place to update later (#5043) * Add a comment so we can easily find a place to update later * flake8 --- src/_cffi_src/build_openssl.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 456b8692604d..d3d27df6bb04 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -22,6 +22,7 @@ def _get_openssl_libraries(platform): ) if windows_link_legacy_openssl is None: # Link against the 1.1.0 names + # CRYPTOGRAPHY_OPENSSL_110_OR_GREATER libs = ["libssl", "libcrypto"] else: # Link against the 1.0.2 and lower names From 6d450f7fdc6be790443d82aa5aff8572ba3965bf Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 1 Nov 2019 02:10:56 -0400 Subject: [PATCH 717/988] Fixed link for linkcheck (#5047) --- docs/development/submitting-patches.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/submitting-patches.rst b/docs/development/submitting-patches.rst index ec00aa528650..ac1986a33004 100644 --- a/docs/development/submitting-patches.rst +++ b/docs/development/submitting-patches.rst @@ -156,6 +156,6 @@ So, specifically: .. _`Write comments as complete sentences.`: https://nedbatchelder.com/blog/201401/comments_should_be_sentences.html .. _`syntax`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#info-field-lists -.. _`Studies have shown`: https://smartbear.com/SmartBear/media/pdfs/11_Best_Practices_for_Peer_Code_Review.pdf +.. _`Studies have shown`: https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/ .. _`our mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev .. _`doc8`: https://github.com/openstack/doc8 From 9668b000326585339267a42176facd9ff81481ee Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 3 Nov 2019 01:47:13 -0400 Subject: [PATCH 718/988] Deal with the 2.5 deprecations (#5048) * Deal with the 2.5 deprecations * pep8 + test fixes * docs typo * Why did I do this? * typo --- CHANGELOG.rst | 4 ++++ .../hazmat/backends/openssl/x25519.py | 16 +--------------- .../hazmat/primitives/asymmetric/ec.py | 4 ++-- .../hazmat/primitives/asymmetric/x25519.py | 2 +- src/cryptography/utils.py | 2 +- tests/hazmat/primitives/test_ec.py | 2 +- tests/hazmat/primitives/test_x25519.py | 8 +------- 7 files changed, 11 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 607f67b8b48d..b727c8aaa89e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,10 @@ Changelog * Support for OpenSSL 1.0.1 has been removed. Users on older version of OpenSSL will need to upgrade. +* Removed support for calling + :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` + with no arguments, as per our deprecation policy. You must now pass + ``encoding`` and ``format``. .. _v2-8: diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 9aab25b86adb..8708834e8880 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -4,8 +4,6 @@ from __future__ import absolute_import, division, print_function -import warnings - from cryptography import utils from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive from cryptography.hazmat.primitives import serialization @@ -23,19 +21,7 @@ def __init__(self, backend, evp_pkey): self._backend = backend self._evp_pkey = evp_pkey - def public_bytes(self, encoding=None, format=None): - if encoding is None or format is None: - if encoding is not None or format is not None: - raise ValueError("Both encoding and format are required") - else: - warnings.warn( - "public_bytes now requires encoding and format arguments. " - "Support for calling without arguments will be removed in " - "cryptography 2.7", - utils.DeprecatedIn25, - ) - encoding = serialization.Encoding.Raw - format = serialization.PublicFormat.Raw + def public_bytes(self, encoding, format): if ( encoding is serialization.Encoding.Raw or format is serialization.PublicFormat.Raw diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index 529391f97136..eef922dccbd1 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -364,7 +364,7 @@ def encode_point(self): " and will be removed in a future version. Please use " "EllipticCurvePublicKey.public_bytes to obtain both " "compressed and uncompressed point encoding.", - utils.DeprecatedIn25, + utils.PersistentlyDeprecated2019, stacklevel=2, ) # key_size is in bits. Convert to bytes and round up @@ -383,7 +383,7 @@ def from_encoded_point(cls, curve, data): "Support for unsafe construction of public numbers from " "encoded data will be removed in a future version. " "Please use EllipticCurvePublicKey.from_encoded_point", - utils.DeprecatedIn25, + utils.PersistentlyDeprecated2019, stacklevel=2, ) diff --git a/src/cryptography/hazmat/primitives/asymmetric/x25519.py b/src/cryptography/hazmat/primitives/asymmetric/x25519.py index 4e8badf43344..61a95ffa9847 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -25,7 +25,7 @@ def from_public_bytes(cls, data): return backend.x25519_load_public_bytes(data) @abc.abstractmethod - def public_bytes(self, encoding=None, format=None): + def public_bytes(self, encoding, format): """ The serialized bytes of the public key. """ diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 0b36f6370e21..e895aa056118 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -22,7 +22,7 @@ class CryptographyDeprecationWarning(UserWarning): # cycle ends. PersistentlyDeprecated2017 = CryptographyDeprecationWarning PersistentlyDeprecated2018 = CryptographyDeprecationWarning -DeprecatedIn25 = CryptographyDeprecationWarning +PersistentlyDeprecated2019 = CryptographyDeprecationWarning DeprecatedIn27 = CryptographyDeprecationWarning diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 922a25f09437..987c0ff02cac 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -181,7 +181,7 @@ def test_encode_point(): 16 ) pn = ec.EllipticCurvePublicNumbers(x, y, ec.SECP256R1()) - with pytest.warns(utils.DeprecatedIn25): + with pytest.warns(utils.PersistentlyDeprecated2019): data = pn.encode_point() assert data == binascii.unhexlify( "04233ea3b0027127084cd2cd336a13aeef69c598d8af61369a36454a17c6c22ae" diff --git a/tests/hazmat/primitives/test_x25519.py b/tests/hazmat/primitives/test_x25519.py index 8bdc6b49c7d7..30dc2818d865 100644 --- a/tests/hazmat/primitives/test_x25519.py +++ b/tests/hazmat/primitives/test_x25519.py @@ -9,7 +9,6 @@ import pytest -from cryptography import utils from cryptography.exceptions import _Reasons from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x25519 import ( @@ -95,16 +94,11 @@ def test_null_shared_key_raises_error(self, backend): with pytest.raises(ValueError): private_key.exchange(public_key) - def test_deprecated_public_bytes(self, backend): - key = X25519PrivateKey.generate().public_key() - with pytest.warns(utils.DeprecatedIn25): - key.public_bytes() - def test_public_bytes_bad_args(self, backend): key = X25519PrivateKey.generate().public_key() with pytest.raises(ValueError): key.public_bytes(None, serialization.PublicFormat.Raw) - with pytest.raises(ValueError): + with pytest.raises(TypeError): key.public_bytes(serialization.Encoding.Raw) # These vectors are also from RFC 7748 From d169a51b27e68f817f94d84137baa4219c2800dc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 4 Nov 2019 19:38:27 -0500 Subject: [PATCH 719/988] Stop testing 2.7 on fedora (#5052) --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index eef11ac88895..82d533edfdef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -103,9 +103,6 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling - - python: 2.7 - services: docker - env: TOXENV=py27 DOCKER=pyca/cryptography-runner-fedora - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora From d06a3a8f9cfbdb04c091017bef15f10cc5fc0f45 Mon Sep 17 00:00:00 2001 From: jschmidtlein <49664532+jschmidtlein@users.noreply.github.com> Date: Mon, 4 Nov 2019 17:48:12 -0800 Subject: [PATCH 720/988] =?UTF-8?q?issue-5039:=20added=20documentation=20f?= =?UTF-8?q?or=20curve=20attribute=20on=20EllipticCurveP=E2=80=A6=20(#5045)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * issue-5039: added documentation for curve attribute on EllipticCurvePrivateKey based on existing docs * issue-5039: changed indentation --- docs/hazmat/primitives/asymmetric/ec.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 05dd846c0491..bd52aeee5e3e 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -611,6 +611,12 @@ Key Interfaces :func:`~cryptography.hazmat.primitives.asymmetric.utils.decode_dss_signature`, which returns the decoded tuple ``(r, s)``. + .. attribute:: curve + + :type: :class:`EllipticCurve` + + The EllipticCurve that this key is on. + .. attribute:: key_size .. versionadded:: 1.9 From 68e49ae4400c0ff68aac2e7c5f95725e7af0de40 Mon Sep 17 00:00:00 2001 From: Noel Remy Date: Sun, 10 Nov 2019 16:45:30 +0100 Subject: [PATCH 721/988] Let Oid enforce positive decimal integers (#5053) Failing that would lead to an OpenSSL error when calling OBJ_txt2obj at serialization. Adds basic tests for oids. --- src/cryptography/hazmat/_oid.py | 7 +++++- tests/hazmat/test_oid.py | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/hazmat/test_oid.py diff --git a/src/cryptography/hazmat/_oid.py b/src/cryptography/hazmat/_oid.py index 4b08722f1e2b..f98912f96285 100644 --- a/src/cryptography/hazmat/_oid.py +++ b/src/cryptography/hazmat/_oid.py @@ -19,11 +19,16 @@ def __init__(self, dotted_string): # range 0..39. All nodes must be integers. for node in nodes: try: - intnodes.append(int(node, 0)) + node_value = int(node, 10) except ValueError: raise ValueError( "Malformed OID: %s (non-integer nodes)" % ( self._dotted_string)) + if node_value < 0: + raise ValueError( + "Malformed OID: %s (negative-integer nodes)" % ( + self._dotted_string)) + intnodes.append(node_value) if len(nodes) < 2: raise ValueError( diff --git a/tests/hazmat/test_oid.py b/tests/hazmat/test_oid.py new file mode 100644 index 000000000000..d1a34f8eb711 --- /dev/null +++ b/tests/hazmat/test_oid.py @@ -0,0 +1,39 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import pytest + +from cryptography.hazmat._oid import ObjectIdentifier + + +def test_basic_oid(): + assert ObjectIdentifier('1.2.3.4').dotted_string == '1.2.3.4' + + +def test_oid_constraint(): + # Too short + with pytest.raises(ValueError): + ObjectIdentifier('1') + + # First node too big + with pytest.raises(ValueError): + ObjectIdentifier('3.2.1') + + # Outside range + with pytest.raises(ValueError): + ObjectIdentifier('1.40') + with pytest.raises(ValueError): + ObjectIdentifier('0.42') + + # non-decimal oid + with pytest.raises(ValueError): + ObjectIdentifier('1.2.foo.bar') + with pytest.raises(ValueError): + ObjectIdentifier('1.2.0xf00.0xba4') + + # negative oid + with pytest.raises(ValueError): + ObjectIdentifier('1.2.-3.-4') From 3e7ce97cb1e3d7c9fafd51760de2ecf4491061c0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Nov 2019 18:14:54 -0500 Subject: [PATCH 722/988] Run py3.8 as our py3 in macOS CI (#5032) --- azure-pipelines.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ba04498dafd9..398267d27159 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -18,9 +18,9 @@ jobs: TOXENV: py27 vmImage: 'macOS-10.13' MACOS_VERSION: '10.13' - Python37-macOS1013: - python.version: '3.7' - TOXENV: py37 + Python38-macOS1013: + python.version: '3.8' + TOXENV: py38 vmImage: 'macOS-10.13' MACOS_VERSION: '10.13' Python27-macOS1014: @@ -28,9 +28,9 @@ jobs: TOXENV: py27 vmImage: 'macOS-10.14' MACOS_VERSION: '10.14' - Python37-macOS1014: - python.version: '3.7' - TOXENV: py37 + Python38-macOS1014: + python.version: '3.8' + TOXENV: py38 vmImage: 'macOS-10.14' MACOS_VERSION: '10.14' steps: From 251321301546a8683099a42381e56d6230eda3a4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Nov 2019 18:15:11 -0500 Subject: [PATCH 723/988] Retry failed code coverage uploads (#5054) --- .travis/upload_coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index 2f2cb3c180e0..90b849f9e7c7 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -11,7 +11,7 @@ if [ -n "${TOXENV}" ]; then docs);; *) source ~/.venv/bin/activate - codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER + codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER || codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER ;; esac fi From 1a73704b8cf432fb74fc9f52ed4a0ac6637e078f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Nov 2019 19:16:56 -0500 Subject: [PATCH 724/988] Fixed #5050 -- dropped support for an old LibresSSL release (#5056) * Fixed #5050 -- dropped support for an old LibresSSL release * Changelog --- .travis.yml | 2 -- CHANGELOG.rst | 1 + src/_cffi_src/openssl/bio.py | 2 +- src/_cffi_src/openssl/cryptography.py | 3 --- src/_cffi_src/openssl/dh.py | 2 +- src/_cffi_src/openssl/dsa.py | 2 +- src/_cffi_src/openssl/rsa.py | 2 +- src/_cffi_src/openssl/ssl.py | 6 +++--- src/_cffi_src/openssl/x509.py | 4 ++-- src/_cffi_src/openssl/x509_vfy.py | 4 ++-- 10 files changed, 12 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 82d533edfdef..eac49d98623c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -59,8 +59,6 @@ matrix: env: TOXENV=py38 OPENSSL=1.1.1d - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS=no-engine - - python: 3.8 - env: TOXENV=py38 LIBRESSL=2.6.5 - python: 3.8 env: TOXENV=py38 LIBRESSL=2.7.5 - python: 3.8 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b727c8aaa89e..964f43daa738 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,7 @@ Changelog * Support for OpenSSL 1.0.1 has been removed. Users on older version of OpenSSL will need to upgrade. +* Support for LibreSSL 2.6.x has been removed. * Removed support for calling :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` with no arguments, as per our deprecation policy. You must now pass diff --git a/src/_cffi_src/openssl/bio.py b/src/_cffi_src/openssl/bio.py index 0e6cb38c5afc..8f5a3e6a2b6f 100644 --- a/src/_cffi_src/openssl/bio.py +++ b/src/_cffi_src/openssl/bio.py @@ -41,7 +41,7 @@ """ CUSTOMIZATIONS = """ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL int BIO_up_ref(BIO *b) { CRYPTO_add(&b->references, 1, CRYPTO_LOCK_BIO); return 1; diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index ac32fdffde3b..ddcbf2bd5a11 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -34,14 +34,11 @@ #endif #if CRYPTOGRAPHY_IS_LIBRESSL -#define CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER \ - (LIBRESSL_VERSION_NUMBER >= 0x2070000f) #define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER \ (LIBRESSL_VERSION_NUMBER >= 0x2080000f) #define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER \ (LIBRESSL_VERSION_NUMBER >= 0x2090100f) #else -#define CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER (0) #define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER (0) #define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER (0) #endif diff --git a/src/_cffi_src/openssl/dh.py b/src/_cffi_src/openssl/dh.py index 6fdc7dd6cce3..0e1df23a6ac9 100644 --- a/src/_cffi_src/openssl/dh.py +++ b/src/_cffi_src/openssl/dh.py @@ -39,7 +39,7 @@ CUSTOMIZATIONS = """ /* These functions were added in OpenSSL 1.1.0 */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { diff --git a/src/_cffi_src/openssl/dsa.py b/src/_cffi_src/openssl/dsa.py index a4a87c3660e4..938c18fcf1b1 100644 --- a/src/_cffi_src/openssl/dsa.py +++ b/src/_cffi_src/openssl/dsa.py @@ -35,7 +35,7 @@ CUSTOMIZATIONS = """ /* These functions were added in OpenSSL 1.1.0 */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { diff --git a/src/_cffi_src/openssl/rsa.py b/src/_cffi_src/openssl/rsa.py index 216e633abb79..4b9154635a6d 100644 --- a/src/_cffi_src/openssl/rsa.py +++ b/src/_cffi_src/openssl/rsa.py @@ -76,7 +76,7 @@ #endif /* These functions were added in OpenSSL 1.1.0 */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) { /* If the fields n and e in r are NULL, the corresponding input diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 071ac76a43ee..307cce467346 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -570,7 +570,7 @@ /* Added in 1.1.0 in the great opaquing, but we need to define it for older OpenSSLs. Such is our burden. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL /* from ssl/ssl_lib.c */ size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen) { @@ -651,7 +651,7 @@ static const long Cryptography_HAS_NEXTPROTONEG = 1; /* SSL_get0_param was added in OpenSSL 1.0.2. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL X509_VERIFY_PARAM *(*SSL_get0_param)(SSL *) = NULL; #else #endif @@ -834,7 +834,7 @@ int (*SSL_extension_supported)(unsigned int) = NULL; #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL int (*SSL_CIPHER_is_aead)(const SSL_CIPHER *) = NULL; int (*SSL_CIPHER_get_cipher_nid)(const SSL_CIPHER *) = NULL; int (*SSL_CIPHER_get_digest_nid)(const SSL_CIPHER *) = NULL; diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index b48f3179df53..991e1f094436 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -270,7 +270,7 @@ CUSTOMIZATIONS = """ /* Added in 1.0.2 beta but we need it in all versions now due to the great opaquing. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL /* from x509/x_x509.c version 1.0.2 */ void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x) @@ -327,7 +327,7 @@ return i2d_X509_CRL_INFO(crl->crl, pp); } -#if !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if !CRYPTOGRAPHY_IS_LIBRESSL int X509_up_ref(X509 *x) { return CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); } diff --git a/src/_cffi_src/openssl/x509_vfy.py b/src/_cffi_src/openssl/x509_vfy.py index 42da3b1e1132..675ce8232718 100644 --- a/src/_cffi_src/openssl/x509_vfy.py +++ b/src/_cffi_src/openssl/x509_vfy.py @@ -269,7 +269,7 @@ static const long X509_V_FLAG_SUITEB_192_LOS = 0; static const long X509_V_FLAG_SUITEB_128_LOS = 0; -#if !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if !CRYPTOGRAPHY_IS_LIBRESSL int (*X509_VERIFY_PARAM_set1_host)(X509_VERIFY_PARAM *, const char *, size_t) = NULL; int (*X509_VERIFY_PARAM_set1_email)(X509_VERIFY_PARAM *, const char *, @@ -307,7 +307,7 @@ static const long X509_V_FLAG_TRUSTED_FIRST = 0; #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_LIBRESSL_27_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL Cryptography_STACK_OF_X509_OBJECT *X509_STORE_get0_objects(X509_STORE *ctx) { return ctx->objs; } From 1396f388c8311b70386445f1bbf4b20b3e1f66b0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Nov 2019 20:36:45 -0500 Subject: [PATCH 725/988] Fixed #4377 -- document certificate policies with an example (#5058) --- docs/x509/reference.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 6eca950b09d4..7f75f69d0849 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2483,6 +2483,18 @@ X.509 Extensions :param list policies: A list of :class:`PolicyInformation` instances. + As an example of how ``CertificatePolicies`` might be used, if you wanted + to check if a certificated contained the CAB Forum's "domain-validated" + policy, you might write code like: + + .. code-block:: python + + def contains_domain_validated(policies): + return any( + policy.oid.dotted_string == "2.23.140.1.2.1" + for policy in policies + ) + .. attribute:: oid .. versionadded:: 1.0 From c7ba7be8fe67c099339fcbcd90012fc257308628 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 10 Nov 2019 21:19:44 -0500 Subject: [PATCH 726/988] Fixes #4699 -- document that UnrecognizedExtension can be used in generation (#5057) --- docs/x509/reference.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 7f75f69d0849..0bac61eb958f 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2460,7 +2460,9 @@ X.509 Extensions .. versionadded:: 1.2 A generic extension class used to hold the raw value of extensions that - ``cryptography`` does not know how to parse. + ``cryptography`` does not know how to parse. This can also be used when + creating new certificates, CRLs, or OCSP requests and responses to encode + extensions that ``cryptography`` does not know how to generate. .. attribute:: oid From 2e86983a77d02a38ef0485ebe7ab05c1c98a7685 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 11 Nov 2019 13:40:11 +0800 Subject: [PATCH 727/988] Parse single_extensions in OCSP responses (#5059) * add single_extensions to OCSPResponse (#4753) * new vector, updateed docs, more stringent parser, changelog, etc * simplify PR (no SCT for now) * add a comment * finish pulling out the sct stuff so tests might actually run --- CHANGELOG.rst | 3 +++ docs/development/test-vectors.rst | 2 ++ docs/x509/ocsp.rst | 8 ++++++++ .../hazmat/backends/openssl/decode_asn1.py | 10 ++++++++++ src/cryptography/hazmat/backends/openssl/ocsp.py | 10 +++++++++- src/cryptography/x509/ocsp.py | 6 ++++++ tests/x509/test_ocsp.py | 10 ++++++++++ .../x509/ocsp/resp-single-extension-reason.der | Bin 0 -> 280 bytes 8 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-single-extension-reason.der diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 964f43daa738..f142dde55558 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,9 @@ Changelog :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` with no arguments, as per our deprecation policy. You must now pass ``encoding`` and ``format``. +* Added support for parsing + :attr:`~cryptography.x509.ocsp.OCSPResponse.single_extensions` in an OCSP + response. .. _v2-8: diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 9976d138382c..5b20b827908d 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -517,6 +517,8 @@ X.509 OCSP Test Vectors contains a revoked certificate and no ``nextUpdate`` value. * ``x509/ocsp/resp-invalid-signature-oid.der`` - An OCSP response that was modified to contain an MD2 signature algorithm object identifier. +* ``x509/ocsp/resp-single-extension-reason.der`` - An OCSP response that + contains a ``CRLReason`` single extension. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index e28c05a7867e..80ff99087c78 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -601,6 +601,14 @@ Interfaces The extensions encoded in the response. + .. attribute:: single_extensions + + .. versionadded:: 2.9 + + :type: :class:`~cryptography.x509.Extensions` + + The single extensions encoded in the response. + .. method:: public_bytes(encoding) :param encoding: The encoding to use. Only diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 47c6c6546732..87a3cc7307fd 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -857,6 +857,10 @@ def _decode_nonce(backend, nonce): OCSPExtensionOID.NONCE: _decode_nonce, } +# All revoked extensions are valid single response extensions, see: +# https://tools.ietf.org/html/rfc6960#section-4.4.5 +_OCSP_SINGLERESP_EXTENSION_HANDLERS = _REVOKED_EXTENSION_HANDLERS.copy() + _CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), @@ -898,3 +902,9 @@ def _decode_nonce(backend, nonce): get_ext=lambda backend, x, i: backend._lib.OCSP_BASICRESP_get_ext(x, i), handlers=_OCSP_BASICRESP_EXTENSION_HANDLERS, ) + +_OCSP_SINGLERESP_EXT_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.OCSP_SINGLERESP_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.OCSP_SINGLERESP_get_ext(x, i), + handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS, +) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 7420f657ec68..e42565eff9b7 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -10,7 +10,8 @@ from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( _CRL_ENTRY_REASON_CODE_TO_ENUM, _OCSP_BASICRESP_EXT_PARSER, - _OCSP_REQ_EXT_PARSER, _asn1_integer_to_int, + _OCSP_REQ_EXT_PARSER, _OCSP_SINGLERESP_EXT_PARSER, + _asn1_integer_to_int, _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_generalized_time, ) @@ -319,6 +320,13 @@ def serial_number(self): def extensions(self): return _OCSP_BASICRESP_EXT_PARSER.parse(self._backend, self._basic) + @utils.cached_property + @_requires_successful_response + def single_extensions(self): + return _OCSP_SINGLERESP_EXT_PARSER.parse( + self._backend, self._single + ) + def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: raise ValueError( diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index b15063d1b36e..fb35733493c5 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -427,3 +427,9 @@ def extensions(self): """ The list of response extensions. Not single response extensions. """ + + @abc.abstractproperty + def single_extensions(self): + """ + The list of single response extensions. Not response extensions. + """ diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 3e2923e15ae4..2b6ec569b9b7 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -756,6 +756,16 @@ def test_invalid_serialize_encoding(self): with pytest.raises(ValueError): resp.public_bytes(serialization.Encoding.PEM) + def test_single_extensions(self, backend): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-single-extension-reason.der"), + ocsp.load_der_ocsp_response, + ) + assert len(resp.single_extensions) == 1 + ext = resp.single_extensions[0] + assert ext.oid == x509.CRLReason.oid + assert ext.value == x509.CRLReason(x509.ReasonFlags.unspecified) + class TestOCSPEdDSA(object): @pytest.mark.supported( diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-single-extension-reason.der b/vectors/cryptography_vectors/x509/ocsp/resp-single-extension-reason.der new file mode 100644 index 0000000000000000000000000000000000000000..f89060d6457716e3ec67273c6994a4d57e055fad GIT binary patch literal 280 zcmXqLVie(GWLVI|$ZOEV$jQd3&Bn;e%5K2O$kO=Rpz()6BwFckw3F)kT_ns2pJtIXvg{pUZ9>CcDqM)i0=t{``pJbR-j#y+Q*6+)M+gnF|Er zLgrARg?t7)23%~+p|YYZ%s{sT*&JGJ9_MUXn3 Date: Tue, 12 Nov 2019 02:37:58 +0100 Subject: [PATCH 728/988] Windows Installation: fix link to binaries (#5061) * Windows Installation: fix link to binaries While https://github.com/pyca/infra/tree/master/windows/openssl points a trusted source (which would be preferable), pyca/infra currently does not provide any Windows binaries for download. Linking to the official OpenSSL wiki seems to be a reasonable compromise. * fix whitespace --- docs/installation.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index fc3fa8946594..a5881bd901ce 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -47,12 +47,11 @@ just run $ pip install cryptography If you prefer to compile it yourself you'll need to have OpenSSL installed. -You can compile OpenSSL yourself as well or use the binaries we build for our -own `infrastructure`_. Be sure to download the proper -version for your architecture and Python (2010 works for Python 2.7, 3.3, -and 3.4 while 2015 is required for 3.5 and above). Wherever you place your copy -of OpenSSL you'll need to set the ``LIB`` and ``INCLUDE`` environment variables -to include the proper locations. For example: +You can compile OpenSSL yourself as well or use `a binary distribution`_. +Be sure to download the proper version for your architecture and Python +(VC2010 works for Python 2.7, 3.3, and 3.4 while VC2015 is required for 3.5 and above). +Wherever you place your copy of OpenSSL you'll need to set the ``LIB`` and ``INCLUDE`` +environment variables to include the proper locations. For example: .. code-block:: console @@ -280,7 +279,7 @@ local `wheel cache`_. .. _`Homebrew`: https://brew.sh .. _`MacPorts`: https://www.macports.org -.. _`infrastructure`: https://github.com/pyca/infra/tree/master/windows/openssl +.. _`a binary distribution`: https://wiki.openssl.org/index.php/Binaries .. _virtualenv: https://virtualenv.pypa.io/en/latest/ .. _openssl.org: https://www.openssl.org/source/ .. _`wheel cache`: https://pip.pypa.io/en/stable/reference/pip_install/#caching From 9481b8f483c5a477e2de70935cf30080be95fe54 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 12 Nov 2019 04:06:39 +0100 Subject: [PATCH 729/988] add SSL[_CTX]_clear_mode (#5062) --- src/_cffi_src/openssl/ssl.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 307cce467346..4e91823c658b 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -338,6 +338,7 @@ const char *SSL_COMP_get_name(const COMP_METHOD *); unsigned long SSL_set_mode(SSL *, unsigned long); +unsigned long SSL_clear_mode(SSL *, unsigned long); unsigned long SSL_get_mode(SSL *); unsigned long SSL_set_options(SSL *, unsigned long); @@ -359,6 +360,7 @@ unsigned long SSL_CTX_clear_options(SSL_CTX *, unsigned long); unsigned long SSL_CTX_get_options(SSL_CTX *); unsigned long SSL_CTX_set_mode(SSL_CTX *, unsigned long); +unsigned long SSL_CTX_clear_mode(SSL_CTX *, unsigned long); unsigned long SSL_CTX_get_mode(SSL_CTX *); unsigned long SSL_CTX_set_session_cache_mode(SSL_CTX *, unsigned long); unsigned long SSL_CTX_get_session_cache_mode(SSL_CTX *); From 2bc47fe2fd244236f3d33b507c11f1b146650ea4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 15 Nov 2019 22:25:20 -0500 Subject: [PATCH 730/988] Added a test vector of an OCSP response with SCT extension (#5066) --- docs/development/test-vectors.rst | 2 ++ .../x509/ocsp/resp-sct-extension.der | Bin 0 -> 2125 bytes 2 files changed, 2 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/ocsp/resp-sct-extension.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 5b20b827908d..217237ab16a8 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -519,6 +519,8 @@ X.509 OCSP Test Vectors modified to contain an MD2 signature algorithm object identifier. * ``x509/ocsp/resp-single-extension-reason.der`` - An OCSP response that contains a ``CRLReason`` single extension. +* ``x509/ocsp/resp-sct-extension.der`` - An OCSP response containing a + ``CT Certificate SCTs`` single extension, from the SwissSign OCSP responder. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/ocsp/resp-sct-extension.der b/vectors/cryptography_vectors/x509/ocsp/resp-sct-extension.der new file mode 100644 index 0000000000000000000000000000000000000000..8018e2b82cc4d42e3283442071ba6bea2542f8b1 GIT binary patch literal 2125 zcmc(gc{E&E9>?E%wNV`@rAi_~ER~)S>#I^R$`VV_wrEX73!?3@#1cy(Y6O)aXml!q zvBbW`u8~C2w%A4qouyF;S#*dbB4UZ4!#u4sab~9fo^#Ld+;_kCp7VL8FJd334!{ zl3?Q24vvI3@pBCgbqi*Dc~Qk-(w2xP?P7)dgoLnsyaHqmOsG^?ZA(Ux6s(x6Z)9ye zLrw<*Bf)_! zkw3yH?M6Y87ywP~9G@OwH;6Jer8wwo{r@3uod}_1aef5myme>ja00RPVt9t_g z8U>ibUqNy}L6muUgME|uH=~#B#nua-cxSMS3C`fcN4}+5PUz$YawO4sH2!OyBQv<} zfk#$a*Ycf=Z%IZ@c~^b;kbUY{(n==+4rGN@Q|GDs#{L16Sc`9li%Ss&P$zH*o6;zh z{Wk&W53v6Z@Pnrs_uic4 zM(TmPaob?J*ADQK*6jYr)*>HRxeIfiI>S9$1j6g&uzXDq)yQ0ViyR^Xe&O=cIAZ0H zq0Y((&26oyPp-R_&9B)VY3x8G6)Gi~Bj7oUpRTcoTw0$Q`p8s0yK=IaaMrm#cbu=Qn9VArz;dw6=W2n_VrbFR?|jT!bmYSZu+?@A zVa%tn2v%4z-ZXwi1O&gp04Od90>#mtF0liC28GG}=G6m4^Rdp0A8zD~cQlFpXpy$w zV^1@PTV910=lcz!0plc5OUNfsudqWjYngrVeZ_FT=neXa;A~4UW6&ruo%w2w|2(49 zO@Ka0ejesOFMML07m{#i<)uZ|?r*3h8}|kd=F^g`(l_sR5oE6# z@ZuHde6^bgZ1!l;4mx`dIGv1mP;=2kMp=kadf!d$%BY5A^E}Quz09j;T#S`sXT&eC zsK3yd;37HID?Z~oeYL$I1k3rY-0}EJMy1$aSuqiI_uC7IKTpQhd$oplC#0pHA21D$ zj4rDxdJW81{iP-y%RE-w9$vsj2@ps51&O;z4c{n0K_CQ?+22w$e-J+?Vh~v~=kI$R zE`K*n`H%F$HlIvq+kyVXUzB0RZGWMBww*t<7Wlwk5h?@Lq#mZK(~;q@SA<60vHU-} z9^xuB@?7i;mu=gvvxHHMh zc8*Vm!rvd8r52~yD~bnK2o&0CFq*HVh^D}04$Dx!{FV>g-a7aa1)J2LAaRT`;PRN=v^=#E41CtP{OeE z)}h_#J!rBksO=w<<9M!c&4Zq2c<;xeJ4+KtEhF0$v;@2-=6|*fnDDvSF=z+_?7W*# z#VsG&OKe?}FOYd0v54U{4Awq)Z(~;{z>A;i?0r4oG(4*-S$yV{t)J<%;KFeUtq_#z zGvB2PA_;Q;T-PhjNp(H4+_NVwVa=@cZS4~{ixD6d93(eB^Q26>kREjym?ZMDT_V~A zLvPb`mo-sszXmq3*hp z?xoG>q+dI9P~U4!zA0tgVLBT&Ggnz7l_h13?SWsn;G9T#W!JNWW7<=5trD)0%6h)V z+1eeSD(`Y1LFb0d(p_Zroa&RHR*5#nltcNwB2FHe{j{?jF Date: Sat, 23 Nov 2019 01:24:20 +0100 Subject: [PATCH 731/988] add SSL_CTX_get0_param (#5070) --- src/_cffi_src/openssl/ssl.py | 2 ++ src/cryptography/hazmat/bindings/openssl/_conditional.py | 1 + 2 files changed, 3 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 4e91823c658b..59ff35ad33d9 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -196,6 +196,7 @@ /* Added in 1.0.2 */ X509_VERIFY_PARAM *SSL_get0_param(SSL *); +X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *); int SSL_use_certificate(SSL *, X509 *); int SSL_use_certificate_ASN1(SSL *, const unsigned char *, int); @@ -655,6 +656,7 @@ /* SSL_get0_param was added in OpenSSL 1.0.2. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL X509_VERIFY_PARAM *(*SSL_get0_param)(SSL *) = NULL; +X509_VERIFY_PARAM *(*SSL_CTX_get0_param)(SSL_CTX *) = NULL; #else #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index a39bb6683db1..a293fb096042 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -99,6 +99,7 @@ def cryptography_has_102_verification_params(): "X509_VERIFY_PARAM_set1_ip_asc", "X509_VERIFY_PARAM_set_hostflags", "SSL_get0_param", + "SSL_CTX_get0_param", "X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT", "X509_CHECK_FLAG_NO_WILDCARDS", "X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS", From 7247665f76cf849fb5b3020a28cfc86c400374cc Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 24 Nov 2019 05:54:51 +0100 Subject: [PATCH 732/988] add SSL_get_verify_result (#5071) --- src/_cffi_src/openssl/ssl.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 59ff35ad33d9..1b7d02f33d8b 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -214,6 +214,7 @@ Cryptography_STACK_OF_X509_NAME *SSL_get_client_CA_list(const SSL *); int SSL_get_error(const SSL *, int); +long SSL_get_verify_result(const SSL *ssl); int SSL_do_handshake(SSL *); int SSL_shutdown(SSL *); int SSL_renegotiate(SSL *); From e45fd8040f4352ff97431cffc8d1da9f19ea6d8e Mon Sep 17 00:00:00 2001 From: Michael Felt Date: Sun, 24 Nov 2019 17:17:09 +0100 Subject: [PATCH 733/988] issue-5041: do not add extra flags when compiler or platform does not support them (#5042) * check for suitable compiler (platform) before adding special flags * pep8 corrections * later pep8 messages * add clang to auto accepted compilers * modify syntax so multi-line is accepted --- src/_cffi_src/build_openssl.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index d3d27df6bb04..1740cc59c2ad 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -6,6 +6,9 @@ import os import sys +from distutils import dist +from distutils.ccompiler import get_default_compiler +from distutils.command.config import config from _cffi_src.utils import ( build_ffi_for_binding, compiler_type, extra_link_args @@ -47,7 +50,16 @@ def _extra_compile_args(platform): When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 we can revisit this. """ - if platform not in ["win32", "hp-ux11", "sunos5"]: + # make sure the compiler used supports the flags to be added + is_gcc = False + if get_default_compiler() == "unix": + d = dist.Distribution() + cmd = config(d) + cmd._check_compiler() + is_gcc = ("gcc" in cmd.compiler.compiler[0] or + "clang" in cmd.compiler.compiler[0]) + if is_gcc or not (platform in ["win32", "hp-ux11", "sunos5"] or + platform.startswith("aix")): return ["-Wconversion", "-Wno-error=sign-conversion"] else: return [] From 86b4b391edbb1de734c2baed0939a111a420a6f4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 24 Nov 2019 18:13:55 -0500 Subject: [PATCH 734/988] Skip coverage uploads on pypy3-nocoverage builds (#5074) --- .travis/upload_coverage.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index 90b849f9e7c7..37a5eba79921 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -6,6 +6,7 @@ set -x if [ -n "${TOXENV}" ]; then case "${TOXENV}" in pypy-nocoverage);; + pypy3-nocoverage);; pep8);; py3pep8);; docs);; From aa7c2992c91ea90dc967e6acc6b2fb190aed0000 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 24 Nov 2019 18:16:14 -0500 Subject: [PATCH 735/988] Fixes #5065 -- skip serialization tests which use RC2 if OpenSSL doesn't have RC2 (#5072) * Refs #5065 -- have a CI job with OpenSSL built with no-rc2 * Fixes #5065 -- skip serialization tests which use RC2 if OpenSSL doesn't have RC2 --- .travis.yml | 2 +- .../hazmat/backends/openssl/backend.py | 9 +++++ tests/hazmat/primitives/test_pkcs12.py | 36 +++++++++++++------ 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index eac49d98623c..1cb3f655031e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,7 +58,7 @@ matrix: - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.1d - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS=no-engine + env: TOXENV=py38 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS="no-engine no-rc2" - python: 3.8 env: TOXENV=py38 LIBRESSL=2.7.5 - python: 3.8 diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 7e9fa202e757..96fa9ff6a50e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -94,6 +94,11 @@ _MemoryBIO = collections.namedtuple("_MemoryBIO", ["bio", "char_ptr"]) +# Not actually supported, just used as a marker for some serialization tests. +class _RC2(object): + pass + + @utils.register_interface(CipherBackend) @utils.register_interface(CMACBackend) @utils.register_interface(DERSerializationBackend) @@ -292,6 +297,10 @@ def _register_default_ciphers(self): type(None), GetCipherByName("rc4") ) + # We don't actually support RC2, this is just used by some tests. + self.register_cipher_adapter( + _RC2, type(None), GetCipherByName("rc2") + ) self.register_cipher_adapter( ChaCha20, type(None), diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py index f084d578c44f..0bb76e25f001 100644 --- a/tests/hazmat/primitives/test_pkcs12.py +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -10,6 +10,7 @@ from cryptography import x509 from cryptography.hazmat.backends.interfaces import DERSerializationBackend +from cryptography.hazmat.backends.openssl.backend import _RC2 from cryptography.hazmat.primitives.serialization import load_pem_private_key from cryptography.hazmat.primitives.serialization.pkcs12 import ( load_key_and_certificates @@ -20,16 +21,7 @@ @pytest.mark.requires_backend_interface(interface=DERSerializationBackend) class TestPKCS12(object): - @pytest.mark.parametrize( - ("filename", "password"), - [ - ("cert-key-aes256cbc.p12", b"cryptography"), - ("cert-none-key-none.p12", b"cryptography"), - ("cert-rc2-key-3des.p12", b"cryptography"), - ("no-password.p12", None), - ] - ) - def test_load_pkcs12_ec_keys(self, filename, password, backend): + def _test_load_pkcs12_ec_keys(self, filename, password, backend): cert = load_vectors_from_file( os.path.join("x509", "custom", "ca", "ca.pem"), lambda pemfile: x509.load_pem_x509_certificate( @@ -52,6 +44,30 @@ def test_load_pkcs12_ec_keys(self, filename, password, backend): assert parsed_key.private_numbers() == key.private_numbers() assert parsed_more_certs == [] + @pytest.mark.parametrize( + ("filename", "password"), + [ + ("cert-key-aes256cbc.p12", b"cryptography"), + ("cert-none-key-none.p12", b"cryptography"), + ] + ) + def test_load_pkcs12_ec_keys(self, filename, password, backend): + self._test_load_pkcs12_ec_keys(filename, password, backend) + + @pytest.mark.parametrize( + ("filename", "password"), + [ + ("cert-rc2-key-3des.p12", b"cryptography"), + ("no-password.p12", None), + ] + ) + @pytest.mark.supported( + only_if=lambda backend: backend.cipher_supported(_RC2(), None), + skip_message="Does not support RC2" + ) + def test_load_pkcs12_ec_keys_rc2(self, filename, password, backend): + self._test_load_pkcs12_ec_keys(filename, password, backend) + def test_load_pkcs12_cert_only(self, backend): cert = load_vectors_from_file( os.path.join("x509", "custom", "ca", "ca.pem"), From 21eb6f4c8b91aa3dabc85c91ee4e0be65e8e061e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 24 Nov 2019 18:18:30 -0500 Subject: [PATCH 736/988] Run codecov in required mode so it exits with non-zero on failure (#5073) --- .travis/upload_coverage.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index 37a5eba79921..e29bc20f22e2 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -12,7 +12,8 @@ if [ -n "${TOXENV}" ]; then docs);; *) source ~/.venv/bin/activate - codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER || codecov --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER + codecov --required --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER || \ + codecov --required --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER ;; esac fi From 9dc710e65ae08de8ad510a985ad1258aa76a26b3 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 25 Nov 2019 22:48:35 -0500 Subject: [PATCH 737/988] Get tests passing with latest wycheproof clone (#5076) * Get tests passing with latest wycheproof clone * Fix x25519 wycheproof tests * Fix for acme repo changes --- .travis/downstream.d/certbot.sh | 4 ++-- tests/wycheproof/test_ecdh.py | 1 + tests/wycheproof/test_x25519.py | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.travis/downstream.d/certbot.sh b/.travis/downstream.d/certbot.sh index 6061e31076fd..12425fb87a9e 100755 --- a/.travis/downstream.d/certbot.sh +++ b/.travis/downstream.d/certbot.sh @@ -5,8 +5,8 @@ case "${1}" in git clone --depth=1 https://github.com/certbot/certbot cd certbot git rev-parse HEAD - pip install -e acme[dev] - pip install -e .[dev] + pip install -e ./acme[dev] + pip install -e ./certbot[dev] ;; run) cd certbot diff --git a/tests/wycheproof/test_ecdh.py b/tests/wycheproof/test_ecdh.py index 5fcc45b76273..b89dc68ce7fc 100644 --- a/tests/wycheproof/test_ecdh.py +++ b/tests/wycheproof/test_ecdh.py @@ -21,6 +21,7 @@ "secp256r1": ec.SECP256R1(), "secp384r1": ec.SECP384R1(), "secp521r1": ec.SECP521R1(), + "secp224k1": None, "secp256k1": ec.SECP256K1(), "brainpoolP224r1": None, "brainpoolP256r1": ec.BrainpoolP256R1(), diff --git a/tests/wycheproof/test_x25519.py b/tests/wycheproof/test_x25519.py index 991daaa44141..295794670825 100644 --- a/tests/wycheproof/test_x25519.py +++ b/tests/wycheproof/test_x25519.py @@ -19,7 +19,9 @@ ) @pytest.mark.wycheproof_tests("x25519_test.json") def test_x25519(backend, wycheproof): - assert list(wycheproof.testgroup.items()) == [("curve", "curve25519")] + assert set(wycheproof.testgroup.items()) == { + ("curve", "curve25519"), ("type", "XdhComp") + } private_key = X25519PrivateKey.from_private_bytes( binascii.unhexlify(wycheproof.testcase["private"]) From 1340c0080c750867297b3f20bbecbad707c18157 Mon Sep 17 00:00:00 2001 From: Mads Jensen Date: Mon, 2 Dec 2019 15:02:30 +0100 Subject: [PATCH 738/988] Use dict literals. (#5080) --- src/cryptography/x509/extensions.py | 2 +- tests/utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index f60075a8fbe1..ad90e9b7edcb 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -948,7 +948,7 @@ class TLSFeatureType(Enum): status_request_v2 = 17 -_TLS_FEATURE_TYPE_TO_ENUM = dict((x.value, x) for x in TLSFeatureType) +_TLS_FEATURE_TYPE_TO_ENUM = {x.value: x for x in TLSFeatureType} @utils.register_interface(ExtensionType) diff --git a/tests/utils.py b/tests/utils.py index 1362e9060035..ca3245b0a808 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -783,7 +783,7 @@ def load_nist_kbkdf_vectors(vector_data): tag.update({name.lower(): value.lower()}) elif line.startswith("COUNT="): - test_data = dict() + test_data = {} test_data.update(tag) vectors.append(test_data) elif line.startswith("L"): From d75335a7de77d4294bea29d03928229a83a77493 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 9 Dec 2019 12:42:55 +0800 Subject: [PATCH 739/988] drop python 3.4 support (#5087) * drop python 3.4 support Our dependencies have started dropping support so it is becoming difficult to test. Additionally, Python 3.4 represents <2% of our downloads, so taking on a large maintenance burden to maintain support isn't a good use of limited time. Accordingly, we're dropping testing infrastructure and migrating our abi3 wheels to py35+. * use removed instead of dropped --- .azure-pipelines/wheel-builder.yml | 16 +++------------- .travis.yml | 7 +------ CHANGELOG.rst | 8 +++++--- azure-pipelines.yml | 12 ------------ docs/development/getting-started.rst | 2 +- docs/faq.rst | 6 +++--- docs/installation.rst | 4 ++-- setup.py | 3 +-- tox.ini | 4 ++-- 9 files changed, 18 insertions(+), 44 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index d07967da03ab..3f7e4d1a6077 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -12,7 +12,7 @@ jobs: PYTHON_DOWNLOAD_URL: "https://www.python.org/ftp/python/2.7.16/python-2.7.16-macosx10.6.pkg" PYTHON_BIN_PATH: /Library/Frameworks/Python.framework/Versions/2.7/bin/python Python3: - python.version: '3.4' + python.version: '3.5' PYTHON_DOWNLOAD_URL: "https://www.python.org/ftp/python/3.7.3/python-3.7.3-macosx10.6.pkg" PYTHON_BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 steps: @@ -87,7 +87,7 @@ jobs: PLATFORM: 'manylinux1_x86_64' Python3m-manylinux1: containerImage: 'pyca/cryptography-manylinux1:x86_64' - PYTHON_VERSION: 'cp34-cp34m' + PYTHON_VERSION: 'cp35-cp35m' PLATFORM: 'manylinux1_x86_64' Python27m-manylinux2010: containerImage: 'pyca/cryptography-manylinux2010:x86_64' @@ -99,7 +99,7 @@ jobs: PLATFORM: 'manylinux2010_x86_64' Python3m-manylinux2010: containerImage: 'pyca/cryptography-manylinux2010:x86_64' - PYTHON_VERSION: 'cp34-cp34m' + PYTHON_VERSION: 'cp35-cp35m' PLATFORM: 'manylinux2010_x86_64' steps: - script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv @@ -164,16 +164,6 @@ jobs: PYTHON_VERSION: '27' OPENSSL_DIR: 'OpenSSL-Win64-2010' WINDOWS_ARCH: 'x86_64' - Python34-x86: - containerImage: 'pyca/cryptography-runner-windows:py34-x86' - PYTHON_VERSION: '34' - OPENSSL_DIR: 'OpenSSL-Win32-2010' - WINDOWS_ARCH: 'x86' - Python34-x86-64: - containerImage: 'pyca/cryptography-runner-windows:py34-x86_64' - PYTHON_VERSION: '34' - OPENSSL_DIR: 'OpenSSL-Win64-2010' - WINDOWS_ARCH: 'x86_64' Python35-x86: containerImage: 'pyca/cryptography-runner-windows:py35-x86' PYTHON_VERSION: '35' diff --git a/.travis.yml b/.travis.yml index 1cb3f655031e..8d4bd4076d9f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,13 +18,11 @@ branches: matrix: include: - - python: 3.4 + - python: 3.8 env: TOXENV=pep8 # Setting 'python' is just to make travis's UI a bit prettier - python: 2.7 env: TOXENV=py27 - - python: 3.4 - env: TOXENV=py34 - python: 3.5 env: TOXENV=py35 - python: 3.6 @@ -74,9 +72,6 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-jessie - - python: 3.4 - services: docker - env: TOXENV=py34 DOCKER=pyca/cryptography-runner-jessie - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-stretch diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f142dde55558..31430d752c2f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,9 +8,11 @@ Changelog .. note:: This version is not yet released and is under active development. -* Support for OpenSSL 1.0.1 has been removed. Users on older version of OpenSSL - will need to upgrade. -* Support for LibreSSL 2.6.x has been removed. +* **BACKWARDS INCOMPATIBLE:** Support for Python 3.4 has been removed due to + low usage and maintenance burden. +* **BACKWARDS INCOMPATIBLE:** Support for OpenSSL 1.0.1 has been removed. + Users on older version of OpenSSL will need to upgrade. +* **BACKWARDS INCOMPATIBLE:** Support for LibreSSL 2.6.x has been removed. * Removed support for calling :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` with no arguments, as per our deprecation policy. You must now pass diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 398267d27159..3b279344fbae 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -82,18 +82,6 @@ jobs: OPENSSL_DIR: 'OpenSSL-Win64-2010' PYTHON_DIR: 'Python27' WINDOWS_ARCH: 'x86_64' - Python34-x86: - TOXENV: py34 - containerImage: 'pyca/cryptography-runner-windows:py34-x86' - OPENSSL_DIR: 'OpenSSL-Win32-2010' - PYTHON_DIR: 'Python34' - WINDOWS_ARCH: 'x86' - Python34-x86-64: - TOXENV: py34 - containerImage: 'pyca/cryptography-runner-windows:py34-x86_64' - OPENSSL_DIR: 'OpenSSL-Win64-2010' - PYTHON_DIR: 'Python34' - WINDOWS_ARCH: 'x86_64' Python35-x86: TOXENV: py35 containerImage: 'pyca/cryptography-runner-windows:py35-x86' diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst index cc333e4d3898..1d939a9c3786 100644 --- a/docs/development/getting-started.rst +++ b/docs/development/getting-started.rst @@ -81,7 +81,7 @@ each supported Python version and run the tests. For example: ... py27: commands succeeded ERROR: pypy: InterpreterNotFound: pypy - py34: commands succeeded + py38: commands succeeded docs: commands succeeded pep8: commands succeeded diff --git a/docs/faq.rst b/docs/faq.rst index 235da672b08c..de131f6714fc 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -104,12 +104,12 @@ Since they are no longer receiving security patches from upstream, should upgrade to a newer version of OpenSSL (1.0.2 or later). This may require you to upgrade to a newer operating system. -Why are there no wheels for Python 3.5+ on Linux or macOS? +Why are there no wheels for Python 3.6+ on Linux or macOS? ---------------------------------------------------------- Our Python3 wheels, for macOS and Linux, are ``abi3`` wheels. This means they -support multiple versions of Python. The Python 3.4 ``abi3`` wheel can be used -with any version of Python greater than or equal to 3.4. Recent versions of +support multiple versions of Python. The Python 3.5 ``abi3`` wheel can be used +with any version of Python greater than or equal to 3.5. Recent versions of ``pip`` will automatically install ``abi3`` wheels. ``ImportError``: ``idna`` is not installed diff --git a/docs/installation.rst b/docs/installation.rst index a5881bd901ce..655adf2deedd 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -10,7 +10,7 @@ You can install ``cryptography`` with ``pip``: Supported platforms ------------------- -Currently we test ``cryptography`` on Python 2.7, 3.4+, and +Currently we test ``cryptography`` on Python 2.7, 3.5+, and PyPy 5.4+ on these operating systems. * x86-64 CentOS 7.x @@ -49,7 +49,7 @@ just run If you prefer to compile it yourself you'll need to have OpenSSL installed. You can compile OpenSSL yourself as well or use `a binary distribution`_. Be sure to download the proper version for your architecture and Python -(VC2010 works for Python 2.7, 3.3, and 3.4 while VC2015 is required for 3.5 and above). +(VC2010 works for Python 2.7 while VC2015 is required for 3.5 and above). Wherever you place your copy of OpenSSL you'll need to set the ``LIB`` and ``INCLUDE`` environment variables to include the proper locations. For example: diff --git a/setup.py b/setup.py index ae01916b6086..a5bbfa1eeaa8 100644 --- a/setup.py +++ b/setup.py @@ -217,7 +217,6 @@ def run(self): "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", @@ -231,7 +230,7 @@ def run(self): packages=find_packages(where="src", exclude=["_cffi_src", "_cffi_src.*"]), include_package_data=True, - python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', + python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*', install_requires=[ "six >= 1.4.1", diff --git a/tox.ini b/tox.ini index 6c414973f71d..ee7793f8bcc7 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] minversion = 2.4 -envlist = py27,pypy,py34,py35,py36,py37,py38,docs,pep8,packaging +envlist = py27,pypy,py35,py36,py37,py38,docs,pep8,packaging isolated_build = True [testenv] @@ -18,7 +18,7 @@ setenv = commands = pip list # We use parallel mode and then combine here so that coverage.py will take - # the paths like .tox/py34/lib/python3.4/site-packages/cryptography/__init__.py + # the paths like .tox/py38/lib/python3.8/site-packages/cryptography/__init__.py # and collapse them into src/cryptography/__init__.py. coverage run --parallel-mode -m pytest --capture=no --strict {posargs} coverage combine From 085382fb17a560dd11e4710077b63a26d5dcf05c Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 24 Dec 2019 00:03:13 +0100 Subject: [PATCH 740/988] Add pthread linking on non-win32 (#5086) Required to link in static part of pthread, e.g. pthread_atfork Fixes https://github.com/pyca/cryptography/issues/5084 --- src/_cffi_src/build_openssl.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 1740cc59c2ad..a09d6d8e8005 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -37,7 +37,10 @@ def _get_openssl_libraries(platform): # specified on the linker command-line is significant; # libssl must come before libcrypto # (https://marc.info/?l=openssl-users&m=135361825921871) - return ["ssl", "crypto"] + # -lpthread required due to usage of pthread an potential + # existance of a static part containing e.g. pthread_atfork + # (https://github.com/pyca/cryptography/issues/5084) + return ["ssl", "crypto", "pthread"] def _extra_compile_args(platform): From f956ab40866cda71eb83dc603703770d79d1bbf9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Jan 2020 12:03:31 -0600 Subject: [PATCH 741/988] Update for new alpine release (#5097) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8d4bd4076d9f..c9d0c5a10c21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -99,9 +99,9 @@ matrix: - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora - - python: 3.7 + - python: 3.8 services: docker - env: TOXENV=py37 DOCKER=pyca/cryptography-runner-alpine:latest + env: TOXENV=py38 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.8 env: TOXENV=docs OPENSSL=1.1.1d From 1d6ef10910b17fded7f1c7fbd6f20e485697e6e9 Mon Sep 17 00:00:00 2001 From: Mads Jensen Date: Sun, 12 Jan 2020 19:36:56 +0100 Subject: [PATCH 742/988] Updates Python version in README (#5094) --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 140b374e5a91..cb2a0d66652d 100644 --- a/README.rst +++ b/README.rst @@ -21,7 +21,7 @@ pyca/cryptography ``cryptography`` is a package which provides cryptographic recipes and primitives to Python developers. Our goal is for it to be your "cryptographic -standard library". It supports Python 2.7, Python 3.4+, and PyPy 5.4+. +standard library". It supports Python 2.7, Python 3.5+, and PyPy 5.4+. ``cryptography`` includes both high level recipes and low level interfaces to common cryptographic algorithms such as symmetric ciphers, message digests, and From a849f40556bd022c7478a44e935359c5fac83193 Mon Sep 17 00:00:00 2001 From: Mads Jensen Date: Sun, 12 Jan 2020 23:29:17 +0100 Subject: [PATCH 743/988] Use literals for collections and comprehensions. (#5091) --- .../custom-vectors/hkdf/generate_hkdf.py | 16 ++++++++-------- .../hazmat/backends/openssl/decode_asn1.py | 2 +- src/cryptography/x509/name.py | 2 +- src/cryptography/x509/ocsp.py | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/development/custom-vectors/hkdf/generate_hkdf.py b/docs/development/custom-vectors/hkdf/generate_hkdf.py index 767aedd835ee..8976effdd7e2 100644 --- a/docs/development/custom-vectors/hkdf/generate_hkdf.py +++ b/docs/development/custom-vectors/hkdf/generate_hkdf.py @@ -19,14 +19,14 @@ def _build_vectors(): - output = [] - output.append("COUNT = 0") - output.append("Hash = SHA-256") - output.append("IKM = " + binascii.hexlify(IKM).decode("ascii")) - output.append("salt = ") - output.append("info = ") - output.append("L = {}".format(L)) - output.append("OKM = " + binascii.hexlify(OKM).decode("ascii")) + output = [ + "COUNT = 0", + "Hash = SHA-256", + "IKM = " + binascii.hexlify(IKM).decode("ascii"), + "salt = ", "info = ", + "L = {}".format(L), + "OKM = " + binascii.hexlify(OKM).decode("ascii"), + ] return "\n".join(output) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 87a3cc7307fd..7639e6890284 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -64,7 +64,7 @@ def _decode_x509_name(backend, x509_name): attribute = _decode_x509_name_entry(backend, entry) set_id = backend._lib.Cryptography_X509_NAME_ENTRY_set(entry) if set_id != prev_set_id: - attributes.append(set([attribute])) + attributes.append({attribute}) else: # is in the same RDN a previous entry attributes[-1].add(attribute) diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index ca2a1754ee6e..0d58acdd0121 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -25,7 +25,7 @@ class _ASN1Type(Enum): BMPString = 30 -_ASN1_TYPE_TO_ENUM = dict((i.value, i) for i in _ASN1Type) +_ASN1_TYPE_TO_ENUM = {i.value: i for i in _ASN1Type} _SENTINEL = object() _NAMEOID_DEFAULT_TYPE = { NameOID.COUNTRY_NAME: _ASN1Type.PrintableString, diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index fb35733493c5..4e0c985a2025 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -41,7 +41,7 @@ class OCSPResponseStatus(Enum): UNAUTHORIZED = 6 -_RESPONSE_STATUS_TO_ENUM = dict((x.value, x) for x in OCSPResponseStatus) +_RESPONSE_STATUS_TO_ENUM = {x.value: x for x in OCSPResponseStatus} _ALLOWED_HASHES = ( hashes.SHA1, hashes.SHA224, hashes.SHA256, hashes.SHA384, hashes.SHA512 @@ -61,7 +61,7 @@ class OCSPCertStatus(Enum): UNKNOWN = 2 -_CERT_STATUS_TO_ENUM = dict((x.value, x) for x in OCSPCertStatus) +_CERT_STATUS_TO_ENUM = {x.value: x for x in OCSPCertStatus} def load_der_ocsp_request(data): From f89ce40b621c88c5bcb48e45ea26aa5ecc08964d Mon Sep 17 00:00:00 2001 From: Mads Jensen Date: Sun, 12 Jan 2020 23:32:21 +0100 Subject: [PATCH 744/988] Replace legacy file handling with a context manager. (#5092) * Replace legacy file handling with a context manager. * flake8 fix Co-authored-by: Alex Gaynor --- .../custom-vectors/cast5/generate_cast5.py | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/docs/development/custom-vectors/cast5/generate_cast5.py b/docs/development/custom-vectors/cast5/generate_cast5.py index a0e28e36e266..ce046b0f01f3 100644 --- a/docs/development/custom-vectors/cast5/generate_cast5.py +++ b/docs/development/custom-vectors/cast5/generate_cast5.py @@ -23,33 +23,34 @@ def encrypt(mode, key, iv, plaintext): def build_vectors(mode, filename): - vector_file = open(filename, "r") - count = 0 output = [] key = None iv = None plaintext = None - for line in vector_file: - line = line.strip() - if line.startswith("KEY"): - if count != 0: - output.append("CIPHERTEXT = {}".format( - encrypt(mode, key, iv, plaintext)) - ) - output.append("\nCOUNT = {}".format(count)) - count += 1 - name, key = line.split(" = ") - output.append("KEY = {}".format(key)) - elif line.startswith("IV"): - name, iv = line.split(" = ") - iv = iv[0:16] - output.append("IV = {}".format(iv)) - elif line.startswith("PLAINTEXT"): - name, plaintext = line.split(" = ") - output.append("PLAINTEXT = {}".format(plaintext)) - output.append("CIPHERTEXT = {}".format(encrypt(mode, key, iv, plaintext))) + with open(filename, "r") as vector_file: + for line in vector_file: + line = line.strip() + if line.startswith("KEY"): + if count != 0: + output.append("CIPHERTEXT = {}".format( + encrypt(mode, key, iv, plaintext)) + ) + output.append("\nCOUNT = {}".format(count)) + count += 1 + name, key = line.split(" = ") + output.append("KEY = {}".format(key)) + elif line.startswith("IV"): + name, iv = line.split(" = ") + iv = iv[0:16] + output.append("IV = {}".format(iv)) + elif line.startswith("PLAINTEXT"): + name, plaintext = line.split(" = ") + output.append("PLAINTEXT = {}".format(plaintext)) + output.append( + "CIPHERTEXT = {}".format(encrypt(mode, key, iv, plaintext)) + ) return "\n".join(output) From fdd80ec89aa8f58b2d3bc6aaa51d74f4ea17d541 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Jan 2020 18:35:16 -0600 Subject: [PATCH 745/988] Refs #5075 -- use x448_test.json from wycheproof (#5077) * Refs #5075 -- use x448_test.json from wycheproof * Fixed test * crypto libraries from people who can't math, it's fine * Skip teh weirdo 57 byte public keys --- tests/wycheproof/test_x448.py | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tests/wycheproof/test_x448.py diff --git a/tests/wycheproof/test_x448.py b/tests/wycheproof/test_x448.py new file mode 100644 index 000000000000..094bf57c48c8 --- /dev/null +++ b/tests/wycheproof/test_x448.py @@ -0,0 +1,48 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.hazmat.primitives.asymmetric.x448 import ( + X448PrivateKey, X448PublicKey +) + + +@pytest.mark.supported( + only_if=lambda backend: backend.x448_supported(), + skip_message="Requires OpenSSL with X448 support" +) +@pytest.mark.wycheproof_tests("x448_test.json") +def test_x448(backend, wycheproof): + assert set(wycheproof.testgroup.items()) == { + ("curve", "curve448"), ("type", "XdhComp") + } + + private_key = X448PrivateKey.from_private_bytes( + binascii.unhexlify(wycheproof.testcase["private"]) + ) + public_key_bytes = binascii.unhexlify(wycheproof.testcase["public"]) + if len(public_key_bytes) == 57: + assert wycheproof.acceptable + assert wycheproof.has_flag("NonCanonicalPublic") + with pytest.raises(ValueError): + X448PublicKey.from_public_bytes(public_key_bytes) + return + + public_key = X448PublicKey.from_public_bytes(public_key_bytes) + + assert wycheproof.valid or wycheproof.acceptable + + expected = binascii.unhexlify(wycheproof.testcase["shared"]) + if expected == b"\x00" * 56: + assert wycheproof.acceptable + # OpenSSL returns an error on all zeros shared key + with pytest.raises(ValueError): + private_key.exchange(public_key) + else: + assert private_key.exchange(public_key) == expected From f95abfeb6103a75741fe0b497bbc0fee24eddb6a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Jan 2020 18:35:52 -0600 Subject: [PATCH 746/988] Refs #5075 -- use rsa_signature_*.json from wycheproof (#5078) * Refs #5075 -- use rsa_signature_*.json from wycheproof * for azure --- tests/wycheproof/test_rsa.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 112805b41dde..92fed2b0629e 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -20,6 +20,13 @@ "SHA-256": hashes.SHA256(), "SHA-384": hashes.SHA384(), "SHA-512": hashes.SHA512(), + # Not supported by OpenSSL for RSA signing + "SHA-512/224": None, + "SHA-512/256": None, + "SHA3-224": hashes.SHA3_224(), + "SHA3-256": hashes.SHA3_256(), + "SHA3-384": hashes.SHA3_384(), + "SHA3-512": hashes.SHA3_512(), } @@ -55,12 +62,24 @@ def should_verify(backend, wycheproof): "rsa_signature_test.json", "rsa_signature_2048_sha224_test.json", "rsa_signature_2048_sha256_test.json", + "rsa_signature_2048_sha384_test.json", "rsa_signature_2048_sha512_test.json", + "rsa_signature_2048_sha512_224_test.json", + "rsa_signature_2048_sha512_256_test.json", + "rsa_signature_2048_sha3_224_test.json", + "rsa_signature_2048_sha3_256_test.json", + "rsa_signature_2048_sha3_384_test.json", + "rsa_signature_2048_sha3_512_test.json", "rsa_signature_3072_sha256_test.json", "rsa_signature_3072_sha384_test.json", "rsa_signature_3072_sha512_test.json", + "rsa_signature_3072_sha512_256_test.json", + "rsa_signature_3072_sha3_256_test.json", + "rsa_signature_3072_sha3_384_test.json", + "rsa_signature_3072_sha3_512_test.json", "rsa_signature_4096_sha384_test.json", "rsa_signature_4096_sha512_test.json", + "rsa_signature_4096_sha512_256_test.json", ) def test_rsa_pkcs1v15_signature(backend, wycheproof): key = serialization.load_der_public_key( @@ -68,6 +87,9 @@ def test_rsa_pkcs1v15_signature(backend, wycheproof): ) digest = _DIGESTS[wycheproof.testgroup["sha"]] + if digest is None or not backend.hash_supported(digest): + pytest.skip("Hash {} not supported".format(digest)) + if should_verify(backend, wycheproof): key.verify( binascii.unhexlify(wycheproof.testcase["sig"]), From c8c78bb4c57b3be68b3779c2ad5bab0c7122fbf2 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Jan 2020 20:33:25 -0600 Subject: [PATCH 747/988] Refs #5075 -- use dsa_*.json from wycheproof (#5098) --- tests/wycheproof/test_dsa.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/wycheproof/test_dsa.py b/tests/wycheproof/test_dsa.py index 3dc3056e1ab7..5019dc6addb6 100644 --- a/tests/wycheproof/test_dsa.py +++ b/tests/wycheproof/test_dsa.py @@ -23,6 +23,10 @@ @pytest.mark.requires_backend_interface(interface=DSABackend) @pytest.mark.wycheproof_tests( "dsa_test.json", + "dsa_2048_224_sha224_test.json", + "dsa_2048_224_sha256_test.json", + "dsa_2048_256_sha256_test.json", + "dsa_3072_256_sha256_test.json", ) def test_dsa_signature(backend, wycheproof): key = serialization.load_der_public_key( From c0dbbb52fbcae313a566285f44e6e4b2820baaf7 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Jan 2020 21:42:21 -0600 Subject: [PATCH 748/988] Refs #5075 -- use ecdsa_*.json from wycheproof (#5099) --- tests/wycheproof/test_ecdsa.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/wycheproof/test_ecdsa.py b/tests/wycheproof/test_ecdsa.py index 5214052ec661..14542ed74d8e 100644 --- a/tests/wycheproof/test_ecdsa.py +++ b/tests/wycheproof/test_ecdsa.py @@ -20,6 +20,10 @@ "SHA-256": hashes.SHA256(), "SHA-384": hashes.SHA384(), "SHA-512": hashes.SHA512(), + "SHA3-224": hashes.SHA3_224(), + "SHA3-256": hashes.SHA3_256(), + "SHA3-384": hashes.SHA3_384(), + "SHA3-512": hashes.SHA3_512(), } @@ -34,13 +38,23 @@ "ecdsa_secp224r1_sha224_test.json", "ecdsa_secp224r1_sha256_test.json", "ecdsa_secp224r1_sha512_test.json", + "ecdsa_secp224r1_sha3_224_test.json", + "ecdsa_secp224r1_sha3_256_test.json", + "ecdsa_secp224r1_sha3_512_test.json", "ecdsa_secp256k1_sha256_test.json", "ecdsa_secp256k1_sha512_test.json", + "ecdsa_secp256k1_sha3_256_test.json", + "ecdsa_secp256k1_sha3_512_test.json", "ecdsa_secp256r1_sha256_test.json", "ecdsa_secp256r1_sha512_test.json", + "ecdsa_secp256r1_sha3_256_test.json", + "ecdsa_secp256r1_sha3_512_test.json", "ecdsa_secp384r1_sha384_test.json", "ecdsa_secp384r1_sha512_test.json", + "ecdsa_secp384r1_sha3_384_test.json", + "ecdsa_secp384r1_sha3_512_test.json", "ecdsa_secp521r1_sha512_test.json", + "ecdsa_secp521r1_sha3_512_test.json", ) def test_ecdsa_signature(backend, wycheproof): try: @@ -58,6 +72,9 @@ def test_ecdsa_signature(backend, wycheproof): ) digest = _DIGESTS[wycheproof.testgroup["sha"]] + if not backend.hash_supported(digest): + pytest.skip("Hash {} not supported".format(digest)) + if ( wycheproof.valid or (wycheproof.acceptable and not wycheproof.has_flag("MissingZero")) From d12fd8d1c2851cec4af76d77b9ef7beaa83e837c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Feb 2020 18:43:37 -0500 Subject: [PATCH 749/988] Update pip before installing virtualenv in travis (#5121) --- .travis/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis/install.sh b/.travis/install.sh index f49569ed3a83..3083b411f1a5 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -60,6 +60,7 @@ if [ -z "${DOWNSTREAM}" ]; then git clone --depth=1 https://github.com/google/wycheproof "$HOME/wycheproof" fi +pip install -U pip pip install virtualenv python -m virtualenv ~/.venv From ed71c5cc07e4a0bb7a58f4e0731e5af3d4d4aa53 Mon Sep 17 00:00:00 2001 From: Thomas Erbesdobler Date: Tue, 3 Mar 2020 03:26:07 +0100 Subject: [PATCH 750/988] Reversed the order of RDNs in x509.Name.rfc4514_string() (#5120) RFC4514 requires in section 2.1 that RDNs are converted to string representation in reversed order. --- CHANGELOG.rst | 3 +++ src/cryptography/x509/name.py | 12 ++++++++---- tests/x509/test_x509.py | 6 +++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 31430d752c2f..d7e1770ba486 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,9 @@ Changelog * Added support for parsing :attr:`~cryptography.x509.ocsp.OCSPResponse.single_extensions` in an OCSP response. +* **BACKWARDS INCOMPATIBLE:** Reversed the order in which + :meth:`~cryptography.x509.Name.rfc4514_string` returns the RDNs as required by + RFC4514. .. _v2-8: diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 0d58acdd0121..922cab5a43c2 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -216,9 +216,11 @@ def rfc4514_string(self): An X.509 name is a two-level structure: a list of sets of attributes. Each list element is separated by ',' and within each list element, set elements are separated by '+'. The latter is almost never used in - real world certificates. + real world certificates. According to RFC4514 section 2.1 the + RDNSequence must be reversed when converting to string representation. """ - return ','.join(attr.rfc4514_string() for attr in self._attributes) + return ','.join( + attr.rfc4514_string() for attr in reversed(self._attributes)) def get_attributes_for_oid(self, oid): return [i for i in self if i.oid == oid] @@ -253,7 +255,9 @@ def __len__(self): return sum(len(rdn) for rdn in self._attributes) def __repr__(self): + rdns = ','.join(attr.rfc4514_string() for attr in self._attributes) + if six.PY2: - return "".format(self.rfc4514_string().encode('utf8')) + return "".format(rdns.encode('utf8')) else: - return "".format(self.rfc4514_string()) + return "".format(rdns) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index fa3a41a70780..fb0c96abf397 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -4556,14 +4556,14 @@ def test_repr(self, common_name, org_name, expected_repr): def test_rfc4514_string(self): n = x509.Name([ x509.RelativeDistinguishedName([ - x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u'Sales'), - x509.NameAttribute(NameOID.COMMON_NAME, u'J. Smith'), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'net'), ]), x509.RelativeDistinguishedName([ x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'example'), ]), x509.RelativeDistinguishedName([ - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'net'), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u'Sales'), + x509.NameAttribute(NameOID.COMMON_NAME, u'J. Smith'), ]), ]) assert (n.rfc4514_string() == From 2ca0fe12e3ada1f7e558338065f1412080ba065c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 2 Mar 2020 21:57:44 -0500 Subject: [PATCH 751/988] Linkify RFC in changelog (#5131) --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d7e1770ba486..144dc1043a1f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -22,7 +22,7 @@ Changelog response. * **BACKWARDS INCOMPATIBLE:** Reversed the order in which :meth:`~cryptography.x509.Name.rfc4514_string` returns the RDNs as required by - RFC4514. + :rfc:`4514`. .. _v2-8: From 382253ea0e1dd5b6c700a50cedb57ec24dd5907b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 2 Mar 2020 22:57:28 -0500 Subject: [PATCH 752/988] Update azure images for their deprecation of 10.13 (#5132) --- azure-pipelines.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3b279344fbae..f74de2ede544 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -13,16 +13,6 @@ jobs: vmImage: $[variables.vmImage] strategy: matrix: - Python27-macOS1013: - python.version: '2.7' - TOXENV: py27 - vmImage: 'macOS-10.13' - MACOS_VERSION: '10.13' - Python38-macOS1013: - python.version: '3.8' - TOXENV: py38 - vmImage: 'macOS-10.13' - MACOS_VERSION: '10.13' Python27-macOS1014: python.version: '2.7' TOXENV: py27 @@ -33,6 +23,16 @@ jobs: TOXENV: py38 vmImage: 'macOS-10.14' MACOS_VERSION: '10.14' + Python27-macOS1015: + python.version: '2.7' + TOXENV: py27 + vmImage: 'macOS-10.15' + MACOS_VERSION: '10.15' + Python38-macOS1015: + python.version: '3.8' + TOXENV: py38 + vmImage: 'macOS-10.15' + MACOS_VERSION: '10.15' steps: - task: UsePythonVersion@0 inputs: From e320adfe3e44394b59bab4f3b60a52d593a9bad0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 19 Mar 2020 12:54:34 -0400 Subject: [PATCH 753/988] Fix several CI breakages (#5138) * Replace dead link * Explicitly run for all PRs * Update azure-pipelines.yml * Update wheel-builder.yml --- .azure-pipelines/wheel-builder.yml | 3 +++ azure-pipelines.yml | 5 +++++ docs/hazmat/primitives/key-derivation-functions.rst | 6 +++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 3f7e4d1a6077..476682630ff4 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -1,3 +1,6 @@ +variables: + agent.preferPowerShellOnContainers: true + trigger: none pr: none diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f74de2ede544..749bc712f506 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,3 +1,6 @@ +variables: + agent.preferPowerShellOnContainers: true + trigger: branches: include: @@ -6,6 +9,8 @@ trigger: tags: include: - "*" +pr: + - "*" jobs: - job: 'mac' diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index 40a0c3db0e0d..b5466240d969 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -79,8 +79,8 @@ Different KDFs are suitable for different tasks such as: :param int iterations: The number of iterations to perform of the hash function. This can be used to control the length of time the operation takes. Higher numbers help mitigate brute force attacks against derived - keys. See OWASP's `Password Storage Cheat Sheet`_ for more - detailed recommendations if you intend to use this for password storage. + keys. A `more detailed description`_ can be consulted for additional + information. :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.PBKDF2HMACBackend`. @@ -904,7 +904,7 @@ Interface .. _`NIST SP 800-56Ar2`: https://csrc.nist.gov/publications/detail/sp/800-56a/rev-2/final .. _`ANSI X9.63:2001`: https://webstore.ansi.org .. _`SEC 1 v2.0`: https://www.secg.org/sec1-v2.pdf -.. _`Password Storage Cheat Sheet`: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet +.. _`more detailed description`: https://security.stackexchange.com/a/3993/43116 .. _`PBKDF2`: https://en.wikipedia.org/wiki/PBKDF2 .. _`key stretching`: https://en.wikipedia.org/wiki/Key_stretching .. _`HKDF`: https://en.wikipedia.org/wiki/HKDF From 7f19d61e4f3f927681f604ed87f72aa723b8cd40 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 19 Mar 2020 13:45:43 -0400 Subject: [PATCH 754/988] Fixed issue template for manylinux1 structure (#5140) --- .github/ISSUE_TEMPLATE/openssl-release.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index c2fcae3db567..edcfe1108457 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -4,5 +4,4 @@ - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula - [ ] Wait for it to be merged - [ ] manylinux - - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux1/install_openssl.sh#L5-L6) for `manylinux1` - - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux2010/install_openssl.sh#L5-L6) for `manylinux2010` + - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux/install_openssl.sh#L5-L6) for `manylinux` From 416d6856f19121c0102575a50bba6360c4708bb0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 19 Mar 2020 15:18:04 -0400 Subject: [PATCH 755/988] Fixed linkcheck (#5142) * Fixed linkcheck * linkcheck --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index a3e40b7c6294..11c3b33963d2 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -187,4 +187,6 @@ r"https://www.secg.org/sec1-v2.pdf", # 403ing from Travis r"https://devblogs.microsoft.com/oldnewthing/\?p=4223", + # Expired certificate + r"https://www.cosic.esat.kuleuven.be/.*", ] From 87b2749c52e688c809f1861e55d958c64147493c Mon Sep 17 00:00:00 2001 From: Andrea De Pasquale <447065+adepasquale@users.noreply.github.com> Date: Thu, 19 Mar 2020 20:23:35 +0100 Subject: [PATCH 756/988] Allow NameAttribute.value to be an empty string (#5109) * Allow NameAttribute.value to be an empty string RFC 4514 https://tools.ietf.org/html/rfc4514 does not mention that "AttributeValue" can not be an empty (zero-length) string. Fixes #5106 * reverse order to match fix from another PR Co-authored-by: Paul Kehrer --- src/cryptography/x509/name.py | 6 +++--- tests/x509/test_x509.py | 22 ++++++++++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 922cab5a43c2..6816e0639ff3 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -54,6 +54,9 @@ class _ASN1Type(Enum): def _escape_dn_value(val): """Escape special characters in RFC4514 Distinguished Name value.""" + if not val: + return '' + # See https://tools.ietf.org/html/rfc4514#section-2.4 val = val.replace('\\', '\\\\') val = val.replace('"', '\\"') @@ -93,9 +96,6 @@ def __init__(self, oid, value, _type=_SENTINEL): "Country name must be a 2 character country code" ) - if len(value) == 0: - raise ValueError("Value cannot be an empty string") - # The appropriate ASN1 string type varies by OID and is defined across # multiple RFCs including 2459, 3280, and 5280. In general UTF8String # is preferred (2459), but 3280 and 5280 specify several OIDs with diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index fb0c96abf397..7c45660fbf28 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -4281,6 +4281,10 @@ def test_init_bad_value(self): b'bytes' ) + def test_init_none_value(self): + with pytest.raises(TypeError): + x509.NameAttribute(NameOID.ORGANIZATION_NAME, None) + def test_init_bad_country_code_value(self): with pytest.raises(ValueError): x509.NameAttribute( @@ -4295,10 +4299,6 @@ def test_init_bad_country_code_value(self): u'\U0001F37A\U0001F37A' ) - def test_init_empty_value(self): - with pytest.raises(ValueError): - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'') - def test_invalid_type(self): with pytest.raises(TypeError): x509.NameAttribute(NameOID.COMMON_NAME, u"common", "notanenum") @@ -4350,6 +4350,10 @@ def test_distinugished_name(self): assert (na.rfc4514_string() == '1.2.840.113549.1.9.1=somebody@example.com') + def test_empty_value(self): + na = x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'') + assert na.rfc4514_string() == r'ST=' + class TestRelativeDistinguishedName(object): def test_init_empty(self): @@ -4569,6 +4573,16 @@ def test_rfc4514_string(self): assert (n.rfc4514_string() == 'OU=Sales+CN=J. Smith,DC=example,DC=net') + def test_rfc4514_string_empty_values(self): + n = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u''), + x509.NameAttribute(NameOID.LOCALITY_NAME, u''), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), + x509.NameAttribute(NameOID.COMMON_NAME, u'cryptography.io'), + ]) + assert (n.rfc4514_string() == 'CN=cryptography.io,O=PyCA,L=,ST=,C=US') + def test_not_nameattribute(self): with pytest.raises(TypeError): x509.Name(["not-a-NameAttribute"]) From 0ecb4c564496622fd5b87996c4599f7d147caf5e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 19 Mar 2020 23:34:30 -0400 Subject: [PATCH 757/988] linkcheck: remove domain that fixed it's tls from ignore (#5144) --- docs/conf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 11c3b33963d2..a3e40b7c6294 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -187,6 +187,4 @@ r"https://www.secg.org/sec1-v2.pdf", # 403ing from Travis r"https://devblogs.microsoft.com/oldnewthing/\?p=4223", - # Expired certificate - r"https://www.cosic.esat.kuleuven.be/.*", ] From 1ac825f28d0c4956c309b4470ec85430b1bbf3dc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Mar 2020 14:38:45 -0400 Subject: [PATCH 758/988] First pass at moving windows CI to github actions (#5145) * First pass at moving windows CI to github actions * Install coverage * Remove bonus http request --- .github/workflows/ci.yml | 57 ++++++++++++++++++ .github/workflows/download_openssl.py | 46 +++++++++++++++ azure-pipelines.yml | 83 --------------------------- 3 files changed, 103 insertions(+), 83 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/download_openssl.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000000..80fcc4f7a642 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,57 @@ +on: + pull_request: {} + push: + branches: + - master + - '*.*.x' + tags: + - '*.*.*' + +jobs: + windows: + runs-on: windows-latest + strategy: + matrix: + WINDOWS: + - {ARCH: 'x86', WINDOWS: 'win32'} + - {ARCH: 'x64', WINDOWS: 'win64'} + PYTHON: + - {VERSION: "2.7", TOXENV: "py27", MSVC_VERSION: "2010"} + - {VERSION: "3.5", TOXENV: "py35", MSVC_VERSION: "2019"} + - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019"} + - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019"} + - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019"} + name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" + steps: + - uses: actions/checkout@master + - name: Setup python + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.PYTHON.VERSION }} + architecture: ${{ matrix.WINDOWS.ARCH }} + + - name: Install MSVC for Python 2.7 + run: | + Invoke-WebRequest -Uri https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi -OutFile VCForPython27.msi + Start-Process msiexec -Wait -ArgumentList @('/i', 'VCForPython27.msi', '/qn', 'ALLUSERS=1') + Remove-Item VCForPython27.msi -Force + shell: powershell + if: matrix.PYTHON.VERSION == '2.7' + - run: pip install tox requests coverage + - name: Download OpenSSL + run: | + python .github/workflows/download_openssl.py openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} + echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" + echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - run: git clone https://github.com/google/wycheproof + + - run: tox -r -- --color=yes --wycheproof-root=wycheproof + env: + TOXENV: ${{ matrix.PYTHON.TOXENV }} + + - uses: codecov/codecov-action@v1 + with: + name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" + fail_ci_if_error: true diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py new file mode 100644 index 000000000000..64967cdeae01 --- /dev/null +++ b/.github/workflows/download_openssl.py @@ -0,0 +1,46 @@ +import io +import os +import sys +import zipfile + +import requests + + +# TODO: Switch to master +BRANCH = "openssl-windows-github-actions" +RUNS_URL = ( + "https://api.github.com/repos/pyca/infra/actions/workflows/" + "build-openssl.yml/runs?branch={}&status=success".format(BRANCH) +) + + +def get_response(url, token): + response = requests.get(url, headers={"Authorization": "token " + token}) + if response.status_code != 200: + raise ValueError("Got HTTP {} fetching {}: ".format( + response.code, url, response.content + )) + return response + + +def main(target): + token = os.environ["GITHUB_TOKEN"] + print("Looking for: {}".format(target)) + + response = get_response(RUNS_URL, token).json() + artifacts_url = response["workflow_runs"][0]["artifacts_url"] + response = get_response(artifacts_url, token).json() + for artifact in response["artifacts"]: + if artifact["name"] == target: + print("Found artifact") + response = get_response( + artifact["archive_download_url"], token + ) + zipfile.ZipFile(io.BytesIO(response.content)).extractall( + "C:/{}".format(artifact["name"]) + ) + return + + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 749bc712f506..cd979e027c33 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -69,86 +69,3 @@ jobs: - script: codecov -e MACOS_VERSION,AGENT_OS,TOXENV displayName: 'Submit coverage' condition: succeeded() -- job: 'win' - pool: - vmImage: 'windows-2019' - container: $[variables.containerImage] - strategy: - matrix: - Python27-x86: - TOXENV: py27 - containerImage: 'pyca/cryptography-runner-windows:py27-x86' - OPENSSL_DIR: 'OpenSSL-Win32-2010' - PYTHON_DIR: 'Python27' - WINDOWS_ARCH: 'x86' - Python27-x86-64: - TOXENV: py27 - containerImage: 'pyca/cryptography-runner-windows:py27-x86_64' - OPENSSL_DIR: 'OpenSSL-Win64-2010' - PYTHON_DIR: 'Python27' - WINDOWS_ARCH: 'x86_64' - Python35-x86: - TOXENV: py35 - containerImage: 'pyca/cryptography-runner-windows:py35-x86' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - PYTHON_DIR: 'Python35' - WINDOWS_ARCH: 'x86' - Python35-x86-64: - TOXENV: py35 - containerImage: 'pyca/cryptography-runner-windows:py35-x86_64' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - PYTHON_DIR: 'Python35' - WINDOWS_ARCH: 'x86_64' - Python36-x86: - TOXENV: py36 - containerImage: 'pyca/cryptography-runner-windows:py3-x86' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - PYTHON_DIR: 'Python36' - WINDOWS_ARCH: 'x86' - Python36-x86-64: - TOXENV: py36 - containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - PYTHON_DIR: 'Python36' - WINDOWS_ARCH: 'x86_64' - Python37-x86: - TOXENV: py37 - containerImage: 'pyca/cryptography-runner-windows:py3-x86' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - PYTHON_DIR: 'Python37' - WINDOWS_ARCH: 'x86' - Python37-x86-64: - TOXENV: py37 - containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - PYTHON_DIR: 'Python37' - WINDOWS_ARCH: 'x86_64' - Python38-x86: - TOXENV: py38 - containerImage: 'pyca/cryptography-runner-windows:py3-x86' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - PYTHON_DIR: 'Python38' - WINDOWS_ARCH: 'x86' - Python38-x86-64: - TOXENV: py38 - containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - PYTHON_DIR: 'Python38' - WINDOWS_ARCH: 'x86_64' - steps: - - script: C:/%PYTHON_DIR%/Scripts/pip install codecov - displayName: 'Install codecov' - - - script: git clone https://github.com/google/wycheproof - displayName: 'Clone wycheproof' - - - script: | - set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% - set LIB=C:/%OPENSSL_DIR%/lib;%LIB% - C:/%PYTHON_DIR%/Scripts/tox -r -- --color=yes --wycheproof-root=wycheproof - IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% - displayName: 'Run tests' - - - script: set PATH=%PATH%;C:/%PYTHON_DIR%/Scripts; & codecov -e AGENT_OS,TOXENV,WINDOWS_ARCH - displayName: 'Submit coverage' - condition: succeeded() From 937a7daf1ffbec28e06ecda9be28b17d776fc442 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Mar 2020 15:14:46 -0400 Subject: [PATCH 759/988] Move wheel builer to github actions (#5147) --- .azure-pipelines/wheel-builder.yml | 79 ----------------------- .github/workflows/wheel-builder.yml | 54 ++++++++++++++++ release.py | 97 +++++++++++++++++++++++++++-- 3 files changed, 147 insertions(+), 83 deletions(-) create mode 100644 .github/workflows/wheel-builder.yml diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 476682630ff4..6fcb3bc1e5fc 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -150,82 +150,3 @@ jobs: inputs: pathToPublish: wheelhouse/ artifactName: cryptography-$(PLATFORM)-$(PYTHON_VERSION) - - - job: 'windows' - pool: - vmImage: 'windows-2019' - container: $[variables.containerImage] - strategy: - matrix: - Python27-x86: - containerImage: 'pyca/cryptography-runner-windows:py27-x86' - PYTHON_VERSION: '27' - OPENSSL_DIR: 'OpenSSL-Win32-2010' - WINDOWS_ARCH: 'x86' - Python27-x86-64: - containerImage: 'pyca/cryptography-runner-windows:py27-x86_64' - PYTHON_VERSION: '27' - OPENSSL_DIR: 'OpenSSL-Win64-2010' - WINDOWS_ARCH: 'x86_64' - Python35-x86: - containerImage: 'pyca/cryptography-runner-windows:py35-x86' - PYTHON_VERSION: '35' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - WINDOWS_ARCH: 'x86' - Python35-x86-64: - containerImage: 'pyca/cryptography-runner-windows:py35-x86_64' - PYTHON_VERSION: '35' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - WINDOWS_ARCH: 'x86_64' - Python36-x86: - containerImage: 'pyca/cryptography-runner-windows:py3-x86' - PYTHON_VERSION: '36' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - WINDOWS_ARCH: 'x86' - Python36-x86-64: - containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' - PYTHON_VERSION: '36' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - WINDOWS_ARCH: 'x86_64' - Python37-x86: - containerImage: 'pyca/cryptography-runner-windows:py3-x86' - PYTHON_VERSION: '37' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - WINDOWS_ARCH: 'x86' - Python37-x86-64: - containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' - PYTHON_VERSION: '37' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - WINDOWS_ARCH: 'x86_64' - Python38-x86: - containerImage: 'pyca/cryptography-runner-windows:py3-x86' - PYTHON_VERSION: '38' - OPENSSL_DIR: 'OpenSSL-Win32-2015' - WINDOWS_ARCH: 'x86' - Python38-x86-64: - containerImage: 'pyca/cryptography-runner-windows:py3-x86_64' - PYTHON_VERSION: '38' - OPENSSL_DIR: 'OpenSSL-Win64-2015' - WINDOWS_ARCH: 'x86_64' - steps: - - script: | - "C:/Python%PYTHON_VERSION%/Scripts/pip" install cffi six ipaddress "enum34; python_version < '3'" - displayName: Install wheel and our Python dependencies - - script: | - set INCLUDE=C:/%OPENSSL_DIR%/include;%INCLUDE% - set LIB=C:/%OPENSSL_DIR%/lib;%LIB% - C:/Python%PYTHON_VERSION%/Scripts/pip wheel cryptography==%BUILD_VERSION% --wheel-dir=wheelhouse --no-binary cryptography - displayName: Build the wheel - - script: '"C:/Python%PYTHON_VERSION%/Scripts/pip" install -f wheelhouse cryptography --no-index' - displayName: Test installing the wheel - - script: | - "C:/Python%PYTHON_VERSION%/python" -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - displayName: Print the OpenSSL we built and linked against - - script: mkdir cryptography-wheelhouse - displayName: Create a directory for placing the final wheel in - - script: move wheelhouse\cryptography*.whl cryptography-wheelhouse\ - displayName: Move the cryptography wheel into the final wheel house - - task: PublishBuildArtifacts@1 - inputs: - pathToPublish: cryptography-wheelhouse/ - artifactName: cryptography-windows-$(WINDOWS_ARCH)-python$(PYTHON_VERSION) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml new file mode 100644 index 000000000000..888546cfe2d7 --- /dev/null +++ b/.github/workflows/wheel-builder.yml @@ -0,0 +1,54 @@ +on: + repository_dispatch: + types: [wheel-builder] + +jobs: + windows: + strategy: + matrix: + WINDOWS: + - {ARCH: 'x86', WINDOWS: 'win32'} + - {ARCH: 'x64', WINDOWS: 'win64'} + PYTHON: + - {VERSION: "2.7", TOXENV: "py27", MSVC_VERSION: "2010"} + - {VERSION: "3.5", TOXENV: "py35", MSVC_VERSION: "2019"} + - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019"} + - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019"} + - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019"} + name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" + steps: + - uses: actions/checkout@master + - name: Setup python + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.PYTHON.VERSION }} + architecture: ${{ matrix.WINDOWS.ARCH }} + - name: Install MSVC for Python 2.7 + run: | + Invoke-WebRequest -Uri https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi -OutFile VCForPython27.msi + Start-Process msiexec -Wait -ArgumentList @('/i', 'VCForPython27.msi', '/qn', 'ALLUSERS=1') + Remove-Item VCForPython27.msi -Force + shell: powershell + if: matrix.PYTHON.VERSION == '2.7' + - run: pip install requests + - name: Download OpenSSL + run: | + python .github/workflows/download_openssl.py openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} + echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" + echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - run: pip install cffi six ipaddress "enum34; python_version < '3'" + - run: pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --wheel-dir=wheelhouse --no-binary cryptography + - run: pip install -f wheelhouse --no-index cryptography + - name: Print the OpenSSL we built and linked against + run: | + python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + + - run: mkdir cryptography-wheelhouse + - run: move wheelhouse\cryptography*.whl cryptography-wheelhouse\ + - uses: actions/upload-artifact@v1 + with: + name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.VERSION }}" + path: cryptography-wheelhouse\ diff --git a/release.py b/release.py index c03d22d5fa80..a2219e6e0660 100644 --- a/release.py +++ b/release.py @@ -6,6 +6,7 @@ import getpass import glob +import io import json import os import subprocess @@ -20,6 +21,8 @@ from msrest.authentication import BasicAuthentication +import requests + def run(*args, **kwargs): print("[running] {0}".format(list(args))) @@ -61,8 +64,7 @@ def download_artifacts_azure(build_client, build_id): return paths -def build_wheels_azure(version): - token = getpass.getpass("Azure personal access token: ") +def build_wheels_azure(token, version): credentials = BasicAuthentication("", token) connection = Connection( base_url="https://dev.azure.com/pyca", creds=credentials @@ -82,12 +84,96 @@ def build_wheels_azure(version): return download_artifacts_azure(build_client, build.id) +def wait_for_build_complete_github_actions(session, token, run_url): + while True: + response = session.get(run_url, headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }) + response.raise_for_status() + if response.json()["conclusion"] is not None: + break + time.sleep(3) + + +def download_artifacts_github_actions(session, token, run_url): + response = session.get(run_url, headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }) + response.raise_for_status() + + response = session.get(response.json()["artifacts_url"], headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }) + response.raise_for_status() + paths = [] + for artifact in response.json()["artifacts"]: + response = session.get(artifact["archive_download_url"], headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }) + with zipfile.ZipFile(io.BytesIO(response.content)) as z: + for name in z.namelist(): + if not name.endswith(".whl"): + continue + p = z.open(name) + out_path = os.path.join( + os.path.dirname(__file__), + "dist", + os.path.basename(name), + ) + with open(out_path, "wb") as f: + f.write(p.read()) + paths.append(out_path) + return paths + + +def build_github_actions_wheels(token, version): + session = requests.Session() + + response = session.post( + "https://api.github.com/repos/pyca/cryptography/dispatches", + headers={ + "Content-Type": "application/json", + "Accept": "application/vnd.github.everest-preview+json", + "Authorization": "token {}".format(token), + }, + data=json.dumps({ + "event_type": "wheel-builder", + "client_payload": { + "BUILD_VERSION": version, + }, + }), + ) + response.raise_for_status() + + response = session.get( + ( + "https://api.github.com/repos/pyca/cryptography/actions/workflows/" + "wheel-builder.yml/runs?event=repository_dispatch" + ), + headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }, + ) + response.raise_for_status() + run_url = response.json()["workflow_runs"][0]["url"] + wait_for_build_complete_github_actions(session, token, run_url) + return download_artifacts_github_actions(session, token, run_url) + + @click.command() @click.argument("version") def release(version): """ ``version`` should be a string like '0.4' or '1.0'. """ + azure_token = getpass.getpass("Azure personal access token: ") + github_token = getpass.getpass("Github person access token: ") + run("git", "tag", "-s", version, "-m", "{0} release".format(version)) run("git", "push", "--tags") @@ -100,8 +186,11 @@ def release(version): ) run("twine", "upload", "-s", *packages) - azure_wheel_paths = build_wheels_azure(version) - run("twine", "upload", *azure_wheel_paths) + azure_wheel_paths = build_wheels_azure(azure_token, version) + github_actions_wheel_paths = build_github_actions_wheels( + github_token, version + ) + run("twine", "upload", *(azure_wheel_paths, github_actions_wheel_paths)) if __name__ == "__main__": From 6de73eebf7cee7c26f9f14f3a1d73544036a2c63 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Mar 2020 16:20:20 -0400 Subject: [PATCH 760/988] Add required key to wheel-builder config (#5148) --- .github/workflows/wheel-builder.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index 888546cfe2d7..67ea99291aac 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -4,6 +4,7 @@ on: jobs: windows: + runs-on: windows-latest strategy: matrix: WINDOWS: From 6c790b6199e45233e17b8a3e0a770394d0d1be6a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Mar 2020 20:38:37 -0400 Subject: [PATCH 761/988] Update openssl-release.md (#5153) * Update openssl-release.md * Update openssl-release.md --- .github/ISSUE_TEMPLATE/openssl-release.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index edcfe1108457..13da8b14381e 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -1,7 +1,9 @@ - [ ] Windows - - [ ] Run the `windows-openssl` Azure Pipelines job + - [ ] Run `build-openssl.sh` in the `pyca/infra` repository + - [ ] Wait for the Github Actions job to complete - [ ] macOS - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula - [ ] Wait for it to be merged - [ ] manylinux - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux/install_openssl.sh#L5-L6) for `manylinux` + - [ ] Wait for it to be merged From 00651a7eb6051a6dd08533df27960d4e1eb606a5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Mar 2020 20:39:10 -0400 Subject: [PATCH 762/988] Use openssl from infra master (#5154) --- .github/workflows/download_openssl.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index 64967cdeae01..f665e7f0ec83 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -6,11 +6,9 @@ import requests -# TODO: Switch to master -BRANCH = "openssl-windows-github-actions" RUNS_URL = ( "https://api.github.com/repos/pyca/infra/actions/workflows/" - "build-openssl.yml/runs?branch={}&status=success".format(BRANCH) + "build-openssl.yml/runs?branch=master&status=success" ) From 2c4fccceff80300b0dd974542b5b5b4ab156a941 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 21 Mar 2020 20:39:29 -0400 Subject: [PATCH 763/988] Extra paranoia in the release script (#5152) --- release.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release.py b/release.py index a2219e6e0660..2079a3bcfebc 100644 --- a/release.py +++ b/release.py @@ -149,6 +149,8 @@ def build_github_actions_wheels(token, version): ) response.raise_for_status() + # Give it a few seconds for the run to kick off. + time.sleep(5) response = session.get( ( "https://api.github.com/repos/pyca/cryptography/actions/workflows/" From 757454a9b0029b8982e0603ba706984c4023e6e8 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Sun, 22 Mar 2020 02:41:05 +0200 Subject: [PATCH 764/988] Fix silly linter problem with CHANGELOG (#5150) This line triggers warning: CHANGELOG.rst:24: D001 Line too long but only when an item is added after it. Eg. "* Foo" is enough to trigger it. --- CHANGELOG.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 144dc1043a1f..070e8e42f7ee 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,8 +21,8 @@ Changelog :attr:`~cryptography.x509.ocsp.OCSPResponse.single_extensions` in an OCSP response. * **BACKWARDS INCOMPATIBLE:** Reversed the order in which - :meth:`~cryptography.x509.Name.rfc4514_string` returns the RDNs as required by - :rfc:`4514`. + :meth:`~cryptography.x509.Name.rfc4514_string` returns the RDNs + as required by :rfc:`4514`. .. _v2-8: From 2cc6bd61bace94f43f416d0ce549171c14fbd658 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 21 Mar 2020 21:41:20 -0500 Subject: [PATCH 765/988] reorder 2.9 changelog, add a missing entry (#5156) --- CHANGELOG.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 070e8e42f7ee..965855d08fbd 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,12 +17,13 @@ Changelog :meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey.public_bytes` with no arguments, as per our deprecation policy. You must now pass ``encoding`` and ``format``. -* Added support for parsing - :attr:`~cryptography.x509.ocsp.OCSPResponse.single_extensions` in an OCSP - response. * **BACKWARDS INCOMPATIBLE:** Reversed the order in which :meth:`~cryptography.x509.Name.rfc4514_string` returns the RDNs as required by :rfc:`4514`. +* Added support for parsing + :attr:`~cryptography.x509.ocsp.OCSPResponse.single_extensions` in an OCSP + response. +* :class:`~cryptography.x509.NameAttribute` values can now be empty strings. .. _v2-8: From 0833e93cd2ffaba708aca4050a319153325692a1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 28 Mar 2020 11:49:29 -0400 Subject: [PATCH 766/988] Run twisted under a newer openssl (#5158) * Run twisted under a newer openssl * yet newer --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c9d0c5a10c21..23cddfcedbc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -119,7 +119,7 @@ matrix: - python: 2.7 env: DOWNSTREAM=pyopenssl - python: 2.7 - env: DOWNSTREAM=twisted + env: DOWNSTREAM=twisted OPENSSL=1.1.1d - python: 2.7 env: DOWNSTREAM=paramiko - python: 2.7 From 62287ae18383447585606b9d0765c0f1b8a9777c Mon Sep 17 00:00:00 2001 From: Maciej Jurczak Date: Sat, 28 Mar 2020 17:41:40 +0100 Subject: [PATCH 767/988] Fixed error message in AES-CCM data length validation to reflect the error reason more accurately. (#5157) --- src/cryptography/hazmat/primitives/ciphers/aead.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index 42e19adb11d2..a20a80f36ff4 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -126,7 +126,7 @@ def _validate_lengths(self, nonce, data_len): # https://tools.ietf.org/html/rfc3610#section-2.1 l_val = 15 - len(nonce) if 2 ** (8 * l_val) < data_len: - raise ValueError("Nonce too long for data") + raise ValueError("Data too long for nonce") def _check_params(self, nonce, data, associated_data): utils._check_byteslike("nonce", nonce) From f0a14a5c047cc90cd04cb4b87d5de09f9d53456b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 29 Mar 2020 15:23:51 -0500 Subject: [PATCH 768/988] twisted is dropping 2.7 support. test on 3.7 (3.8 is not supported yet) (#5159) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 23cddfcedbc4..61e59a3efd8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -118,7 +118,7 @@ matrix: - python: 2.7 env: DOWNSTREAM=pyopenssl - - python: 2.7 + - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1d - python: 2.7 env: DOWNSTREAM=paramiko From 005360f90140dcd2245966eca3fbdf91c2d8492b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 29 Mar 2020 18:34:22 -0400 Subject: [PATCH 769/988] Move macOS CI to Github Actions (#5155) --- .github/workflows/ci.yml | 47 +++++++++++++++++++++++--- azure-pipelines.yml | 71 ---------------------------------------- 2 files changed, 42 insertions(+), 76 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80fcc4f7a642..1a2eb1834dd5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,43 @@ on: - '*.*.*' jobs: + macos: + runs-on: macos-latest + strategy: + matrix: + PYTHON: + - {VERSION: "2.7", TOXENV: "py27"} + - {VERSION: "3.5", TOXENV: "py35"} + - {VERSION: "3.6", TOXENV: "py36"} + - {VERSION: "3.7", TOXENV: "py37"} + - {VERSION: "3.8", TOXENV: "py38"} + name: "Python ${{ matrix.PYTHON.VERSION }} on macOS" + steps: + - uses: actions/checkout@master + - name: Setup python + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.PYTHON.VERSION }} + + - run: brew update + - run: brew install openssl@1.1 + - run: python -m pip install tox coverage + + - run: git clone https://github.com/google/wycheproof + + - run: | + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ + LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ + CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ + tox -r -- --color=yes --wycheproof-root=wycheproof + env: + TOXENV: ${{ matrix.PYTHON.TOXENV }} + + - name: Upload coverage + run: | + curl -o codecov.sh -f https://codecov.io/bash + bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on macOS" -Z + windows: runs-on: windows-latest strategy: @@ -37,7 +74,7 @@ jobs: Remove-Item VCForPython27.msi -Force shell: powershell if: matrix.PYTHON.VERSION == '2.7' - - run: pip install tox requests coverage + - run: python -m pip install tox requests coverage - name: Download OpenSSL run: | python .github/workflows/download_openssl.py openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} @@ -51,7 +88,7 @@ jobs: env: TOXENV: ${{ matrix.PYTHON.TOXENV }} - - uses: codecov/codecov-action@v1 - with: - name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" - fail_ci_if_error: true + - name: Upload coverage + run: | + curl -o codecov.sh -f https://codecov.io/bash + bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" -Z diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index cd979e027c33..000000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,71 +0,0 @@ -variables: - agent.preferPowerShellOnContainers: true - -trigger: - branches: - include: - - "master" - - "*.x" - tags: - include: - - "*" -pr: - - "*" - -jobs: -- job: 'mac' - pool: - vmImage: $[variables.vmImage] - strategy: - matrix: - Python27-macOS1014: - python.version: '2.7' - TOXENV: py27 - vmImage: 'macOS-10.14' - MACOS_VERSION: '10.14' - Python38-macOS1014: - python.version: '3.8' - TOXENV: py38 - vmImage: 'macOS-10.14' - MACOS_VERSION: '10.14' - Python27-macOS1015: - python.version: '2.7' - TOXENV: py27 - vmImage: 'macOS-10.15' - MACOS_VERSION: '10.15' - Python38-macOS1015: - python.version: '3.8' - TOXENV: py38 - vmImage: 'macOS-10.15' - MACOS_VERSION: '10.15' - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - architecture: 'x64' - - - script: brew update - displayName: 'brew update' - - - script: brew install openssl@1.1 - displayName: 'Install OpenSSL' - - - script: pip install tox codecov - displayName: 'Install tox & codecov' - - - script: git clone https://github.com/google/wycheproof - displayName: 'Clone wycheproof' - - - script: | - set -e - set -x - - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ - LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ - tox -r -- --color=yes --wycheproof-root=wycheproof - displayName: 'Run tests' - - - script: codecov -e MACOS_VERSION,AGENT_OS,TOXENV - displayName: 'Submit coverage' - condition: succeeded() From b94706416abb0972cfccab9baccea71c99efb2ff Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 30 Mar 2020 21:17:01 -0400 Subject: [PATCH 770/988] Update README for the move to github actions (#5160) --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index cb2a0d66652d..4a8d20d1725f 100644 --- a/README.rst +++ b/README.rst @@ -12,8 +12,8 @@ pyca/cryptography .. image:: https://travis-ci.org/pyca/cryptography.svg?branch=master :target: https://travis-ci.org/pyca/cryptography -.. image:: https://dev.azure.com/pyca/cryptography/_apis/build/status/Azure%20CI?branchName=master - :target: https://dev.azure.com/pyca/cryptography/_build/latest?definitionId=3&branchName=master +.. image:: https://github.com/pyca/cryptography/workflows/.github/workflows/ci.yml/badge.svg + :target: https://github.com/pyca/cryptography/actions?query=workflow%3A.github%2Fworkflows%2Fci.yml+branch%3Amaster .. image:: https://codecov.io/github/pyca/cryptography/coverage.svg?branch=master :target: https://codecov.io/github/pyca/cryptography?branch=master From 3a41e003cf13f47c5902748c9031b38f4694e368 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 30 Mar 2020 20:17:31 -0500 Subject: [PATCH 771/988] name the CI GH workflow (#5161) * name the CI GH workflow this will make the GH status info prettier * nonsense commit, codecov is trash --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a2eb1834dd5..14418789322e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,4 @@ +name: CI on: pull_request: {} push: From 6648ac0775bfe9f3aeb4aa26a68930c9f53244ad Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 30 Mar 2020 21:40:45 -0500 Subject: [PATCH 772/988] fix CI badge again since naming it breaks the link (#5162) * fix CI badge again since naming it breaks the link * we want master's status --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 4a8d20d1725f..fddde9878581 100644 --- a/README.rst +++ b/README.rst @@ -12,8 +12,8 @@ pyca/cryptography .. image:: https://travis-ci.org/pyca/cryptography.svg?branch=master :target: https://travis-ci.org/pyca/cryptography -.. image:: https://github.com/pyca/cryptography/workflows/.github/workflows/ci.yml/badge.svg - :target: https://github.com/pyca/cryptography/actions?query=workflow%3A.github%2Fworkflows%2Fci.yml+branch%3Amaster +.. image:: https://github.com/pyca/cryptography/workflows/CI/badge.svg?branch=master + :target: https://github.com/pyca/cryptography/actions?query=workflow%3ACI+branch%3Amaster .. image:: https://codecov.io/github/pyca/cryptography/coverage.svg?branch=master :target: https://codecov.io/github/pyca/cryptography?branch=master From b76fdd592a9d77aafeb161aa201a421de8692789 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 31 Mar 2020 12:29:55 -0400 Subject: [PATCH 773/988] sid now has 3.8 (#5167) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 61e59a3efd8c..bc02ef63b126 100644 --- a/.travis.yml +++ b/.travis.yml @@ -81,9 +81,9 @@ matrix: - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-buster - - python: 3.7 + - python: 3.8 services: docker - env: TOXENV=py37 DOCKER=pyca/cryptography-runner-sid + env: TOXENV=py38 DOCKER=pyca/cryptography-runner-sid - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-trusty From 6bb9d5ad9d6d0b4223f72bf3162e4983d608be86 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 31 Mar 2020 13:36:04 -0400 Subject: [PATCH 774/988] Update the openssl release (#5166) --- .github/ISSUE_TEMPLATE/openssl-release.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index 13da8b14381e..3c0629f4dd89 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -1,5 +1,6 @@ - [ ] Windows - - [ ] Run `build-openssl.sh` in the `pyca/infra` repository + - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/.github/workflows/build-openssl.yml#L36-L37) + - [ ] Wait for it to be merged - [ ] Wait for the Github Actions job to complete - [ ] macOS - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula @@ -7,3 +8,4 @@ - [ ] manylinux - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux/install_openssl.sh#L5-L6) for `manylinux` - [ ] Wait for it to be merged + - [ ] Wait for the Github Actions job to complete From 90f5bc005f5df1808cc701c41ad7a9b867e5e81b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 31 Mar 2020 14:46:46 -0400 Subject: [PATCH 775/988] Added a new checkbox to openssl-release.md (#5168) --- .github/ISSUE_TEMPLATE/openssl-release.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index 3c0629f4dd89..21c5b2564cfb 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -9,3 +9,4 @@ - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux/install_openssl.sh#L5-L6) for `manylinux` - [ ] Wait for it to be merged - [ ] Wait for the Github Actions job to complete +- [ ] Changelog entry From 7a2523eca44ddf02249562f38dfd0823962f0da9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 31 Mar 2020 20:24:42 -0400 Subject: [PATCH 776/988] fixed linkcheck for CVE website configuration failure (#5169) --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index a3e40b7c6294..fc0079ac0f7b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -187,4 +187,6 @@ r"https://www.secg.org/sec1-v2.pdf", # 403ing from Travis r"https://devblogs.microsoft.com/oldnewthing/\?p=4223", + # Incomplete cert chain + r"https://cveform.mitre.org/", ] From 3584a931932f6289fe8deb6ab89ef7ced37fd0e5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 2 Apr 2020 11:18:18 -0400 Subject: [PATCH 777/988] Added changelog for OpenSSL 1.1.1f (#5170) --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 965855d08fbd..d1790d8e50ac 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,8 @@ Changelog * **BACKWARDS INCOMPATIBLE:** Reversed the order in which :meth:`~cryptography.x509.Name.rfc4514_string` returns the RDNs as required by :rfc:`4514`. +* Updated Windows, macOS, and ``manylinux`` wheels to be compiled with + OpenSSL 1.1.1f. * Added support for parsing :attr:`~cryptography.x509.ocsp.OCSPResponse.single_extensions` in an OCSP response. From 0e8941a079cbf5587441adacec671c2f1f23995c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 2 Apr 2020 12:12:50 -0500 Subject: [PATCH 778/988] 2.9 version and changelog bump (#5172) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d1790d8e50ac..9f3cea0fc1eb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v2-9: -2.9 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +2.9 - 2020-04-02 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Support for Python 3.4 has been removed due to low usage and maintenance burden. diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index f0abdca8cef3..a3a1a502e798 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.9.dev1" +__version__ = "2.9" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 2eb1f834fafc..430af2b518f2 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.9.dev1" +__version__ = "2.9" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 81b7fc65460247c4212efd9484779d8b3e516c26 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 2 Apr 2020 14:38:13 -0500 Subject: [PATCH 779/988] need to upgrade, not install, to update openssl in homebrew (#5174) --- .azure-pipelines/wheel-builder.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index 6fcb3bc1e5fc..f7683d458f56 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -29,7 +29,7 @@ jobs: - script: brew update displayName: Update brew - - script: brew install openssl@1.1 + - script: brew upgrade openssl@1.1 displayName: Install OpenSSL with brew - script: $PYTHON_BIN_PATH -m pip install -U virtualenv From e687b8f7f40e30ef88e9de889c55cd7fdec99762 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 2 Apr 2020 17:16:18 -0500 Subject: [PATCH 780/988] reopen master for 3.0 dev (#5175) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9f3cea0fc1eb..0f31c61c2855 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v3-0: + +3.0 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v2-9: 2.9 - 2020-04-02 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index a3a1a502e798..92d5042e5a3d 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -14,7 +14,7 @@ " and primitives to Python developers.") __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.9" +__version__ = "3.0.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 430af2b518f2..420632e6e4f2 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -14,7 +14,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "2.9" +__version__ = "3.0.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From aece5b3d47282beed31f7119e273b65816a0cf93 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 4 Apr 2020 17:08:08 -0400 Subject: [PATCH 781/988] Drop support for OpenSSL 1.0.1 (#5178) --- .travis.yml | 14 ---- docs/faq.rst | 21 +---- docs/hazmat/backends/openssl.rst | 2 +- docs/hazmat/bindings/openssl.rst | 2 +- .../primitives/symmetric-encryption.rst | 9 --- docs/installation.rst | 7 -- src/_cffi_src/openssl/cryptography.py | 5 -- src/_cffi_src/openssl/ec.py | 8 -- src/_cffi_src/openssl/ecdh.py | 7 -- src/_cffi_src/openssl/ssl.py | 63 ++------------- src/_cffi_src/openssl/x509.py | 35 +-------- src/_cffi_src/openssl/x509_vfy.py | 72 +---------------- .../hazmat/backends/openssl/backend.py | 6 +- .../hazmat/backends/openssl/ciphers.py | 17 ---- .../hazmat/backends/openssl/dh.py | 4 +- .../hazmat/bindings/openssl/_conditional.py | 78 +------------------ .../hazmat/bindings/openssl/binding.py | 24 ------ .../hazmat/primitives/constant_time.py | 29 +------ src/cryptography/utils.py | 1 - tests/hazmat/bindings/test_openssl.py | 14 +--- tests/hazmat/primitives/test_aes.py | 72 ++++------------- tests/wycheproof/test_ecdsa.py | 6 +- tests/wycheproof/test_rsa.py | 2 +- tox.ini | 2 - 24 files changed, 49 insertions(+), 451 deletions(-) diff --git a/.travis.yml b/.travis.yml index bc02ef63b126..86de890046d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,20 +33,12 @@ matrix: env: TOXENV=py38 - python: 3.8 env: TOXENV=py38-idna - - python: pypy-5.4 - env: TOXENV=pypy-nocoverage - # PyPy 5.4 isn't available for xenial - dist: trusty - python: pypy2.7-7.1.1 # I don't know how to enumerate pypy versions in Travis other than to look at # https://github.com/travis-ci/travis-nightly-builder/blob/build/Rakefile#L74-L106 env: TOXENV=pypy-nocoverage - python: pypy3.5-7.0 env: TOXENV=pypy3-nocoverage - - python: 2.7 - env: TOXENV=py27 OPENSSL=1.0.1u - - python: 3.8 - env: TOXENV=py38 OPENSSL=1.0.1u - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l - python: 3.8 @@ -69,9 +61,6 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7 - - python: 2.7 - services: docker - env: TOXENV=py27 DOCKER=pyca/cryptography-runner-jessie - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-stretch @@ -84,9 +73,6 @@ matrix: - python: 3.8 services: docker env: TOXENV=py38 DOCKER=pyca/cryptography-runner-sid - - python: 2.7 - services: docker - env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-trusty - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling diff --git a/docs/faq.rst b/docs/faq.rst index de131f6714fc..38a895d84db5 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -82,24 +82,11 @@ Your ``pip`` and/or ``setuptools`` are outdated. Please upgrade to the latest versions with ``pip install -U pip setuptools`` (or on Windows ``python -m pip install -U pip setuptools``). -Importing cryptography causes a ``RuntimeError`` about OpenSSL 1.0.1 --------------------------------------------------------------------- +Installing cryptography with OpenSSL 0.9.8, 1.0.0, 1.0.1 fails +-------------------------------------------------------------- -The OpenSSL project has dropped support for the 1.0.1 release series. Since it -is no longer receiving security patches from upstream, ``cryptography`` is also -dropping support for it. To fix this issue you should upgrade to a newer -version of OpenSSL (1.0.2 or later). This may require you to upgrade to a newer -operating system. - -For the 2.9 release, you can set the ``CRYPTOGRAPHY_ALLOW_OPENSSL_101`` -environment variable. Please note that this is *temporary* and will be removed -in ``cryptography`` 3.0. - -Installing cryptography with OpenSSL 0.9.8 or 1.0.0 fails ---------------------------------------------------------- - -The OpenSSL project has dropped support for the 0.9.8 and 1.0.0 release series. -Since they are no longer receiving security patches from upstream, +The OpenSSL project has dropped support for the 0.9.8, 1.0.0, and 1.0.1 release +series. Since they are no longer receiving security patches from upstream, ``cryptography`` is also dropping support for them. To fix this issue you should upgrade to a newer version of OpenSSL (1.0.2 or later). This may require you to upgrade to a newer operating system. diff --git a/docs/hazmat/backends/openssl.rst b/docs/hazmat/backends/openssl.rst index d31dcae24970..56121cb55d96 100644 --- a/docs/hazmat/backends/openssl.rst +++ b/docs/hazmat/backends/openssl.rst @@ -3,7 +3,7 @@ OpenSSL backend =============== -The `OpenSSL`_ C library. Cryptography supports OpenSSL version 1.0.1 and +The `OpenSSL`_ C library. Cryptography supports OpenSSL version 1.0.2 and greater. .. data:: cryptography.hazmat.backends.openssl.backend diff --git a/docs/hazmat/bindings/openssl.rst b/docs/hazmat/bindings/openssl.rst index ac9ccedf0632..bc7ec2d916b6 100644 --- a/docs/hazmat/bindings/openssl.rst +++ b/docs/hazmat/bindings/openssl.rst @@ -6,7 +6,7 @@ OpenSSL binding .. currentmodule:: cryptography.hazmat.bindings.openssl.binding These are `CFFI`_ bindings to the `OpenSSL`_ C library. Cryptography supports -OpenSSL version 1.0.1 and greater. +OpenSSL version 1.0.2 and greater. .. class:: cryptography.hazmat.bindings.openssl.binding.Binding() diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 21d12a385104..519e8c57ac25 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -418,9 +418,6 @@ Modes :raises ValueError: This is raised if ``len(tag) < min_tag_length`` or the ``initialization_vector`` is too short. - :raises NotImplementedError: This is raised if the version of the OpenSSL - backend used is 1.0.1 or earlier. - An example of securely encrypting and decrypting data with ``AES`` in the ``GCM`` mode looks like: @@ -681,18 +678,12 @@ Interfaces .. method:: finalize_with_tag(tag) - .. note:: - - This method is not supported when compiled against OpenSSL 1.0.1. - :param bytes tag: The tag bytes to verify after decryption. :return bytes: Returns the remainder of the data. :raises ValueError: This is raised when the data provided isn't a multiple of the algorithm's block size, if ``min_tag_length`` is less than 4, or if ``len(tag) < min_tag_length``. ``min_tag_length`` is an argument to the ``GCM`` constructor. - :raises NotImplementedError: This is raised if the version of the - OpenSSL backend used is 1.0.1 or earlier. If the authentication tag was not already supplied to the constructor of the :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM` mode diff --git a/docs/installation.rst b/docs/installation.rst index 655adf2deedd..80b606c90edb 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -24,17 +24,10 @@ PyPy 5.4+ on these operating systems. We test compiling with ``clang`` as well as ``gcc`` and use the following OpenSSL releases: -* ``OpenSSL 1.0.1`` -* ``OpenSSL 1.0.1e-fips`` (``RHEL/CentOS 7``) -* ``OpenSSL 1.0.1f`` * ``OpenSSL 1.0.2-latest`` * ``OpenSSL 1.1.0-latest`` * ``OpenSSL 1.1.1-latest`` -.. warning:: - Cryptography 2.9 has dropped support for OpenSSL 1.0.1, see the - :doc:`FAQ ` for more details - Building cryptography on Windows -------------------------------- diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index ddcbf2bd5a11..0da882c6395e 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -43,8 +43,6 @@ #define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER (0) #endif -#define CRYPTOGRAPHY_OPENSSL_102_OR_GREATER \ - (OPENSSL_VERSION_NUMBER >= 0x10002000 && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_102L_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x100020cf && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110_OR_GREATER \ @@ -52,8 +50,6 @@ #define CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x1010006f && !CRYPTOGRAPHY_IS_LIBRESSL) -#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 \ - (OPENSSL_VERSION_NUMBER < 0x10002000 || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I \ (OPENSSL_VERSION_NUMBER < 0x1000209f || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 \ @@ -72,7 +68,6 @@ static const int CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I; -static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B; diff --git a/src/_cffi_src/openssl/ec.py b/src/_cffi_src/openssl/ec.py index 52f6001438d0..6432fc22e9e0 100644 --- a/src/_cffi_src/openssl/ec.py +++ b/src/_cffi_src/openssl/ec.py @@ -11,7 +11,6 @@ TYPES = """ static const int Cryptography_HAS_EC2M; -static const int Cryptography_HAS_EC_1_0_2; static const int OPENSSL_EC_NAMED_CURVE; @@ -124,11 +123,4 @@ #else static const long Cryptography_HAS_EC2M = 1; #endif - -#if (!CRYPTOGRAPHY_IS_LIBRESSL && CRYPTOGRAPHY_OPENSSL_LESS_THAN_102) -static const long Cryptography_HAS_EC_1_0_2 = 0; -const char *(*EC_curve_nid2nist)(int) = NULL; -#else -static const long Cryptography_HAS_EC_1_0_2 = 1; -#endif """ diff --git a/src/_cffi_src/openssl/ecdh.py b/src/_cffi_src/openssl/ecdh.py index 5db125714739..c73cc9f36fdd 100644 --- a/src/_cffi_src/openssl/ecdh.py +++ b/src/_cffi_src/openssl/ecdh.py @@ -9,7 +9,6 @@ """ TYPES = """ -static const int Cryptography_HAS_SET_ECDH_AUTO; """ FUNCTIONS = """ @@ -19,10 +18,4 @@ """ CUSTOMIZATIONS = """ -#ifndef SSL_CTX_set_ecdh_auto -static const long Cryptography_HAS_SET_ECDH_AUTO = 0; -long (*SSL_CTX_set_ecdh_auto)(SSL_CTX *, int) = NULL; -#else -static const long Cryptography_HAS_SET_ECDH_AUTO = 1; -#endif """ diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 1b7d02f33d8b..faad5605c123 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -23,7 +23,6 @@ static const long Cryptography_HAS_TLSEXT_STATUS_REQ_CB; static const long Cryptography_HAS_STATUS_REQ_OCSP_RESP; static const long Cryptography_HAS_TLSEXT_STATUS_REQ_TYPE; -static const long Cryptography_HAS_GET_SERVER_TMP_KEY; static const long Cryptography_HAS_SSL_CTX_SET_CLIENT_CERT_ENGINE; static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS; static const long Cryptography_HAS_DTLS; @@ -556,10 +555,7 @@ """ CUSTOMIZATIONS = """ -/* Added in 1.0.2 but we need it in all versions now due to the great - opaquing. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 -/* from ssl/ssl_lib.c */ +#if CRYPTOGRAPHY_IS_LIBRESSL const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx) { return ctx->method; } @@ -653,38 +649,9 @@ static const long Cryptography_HAS_SSL_OP_NO_TICKET = 1; static const long Cryptography_HAS_SSL_SET_SSL_CTX = 1; static const long Cryptography_HAS_NEXTPROTONEG = 1; - -/* SSL_get0_param was added in OpenSSL 1.0.2. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL -X509_VERIFY_PARAM *(*SSL_get0_param)(SSL *) = NULL; -X509_VERIFY_PARAM *(*SSL_CTX_get0_param)(SSL_CTX *) = NULL; -#else -#endif - -/* ALPN was added in OpenSSL 1.0.2. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL -int (*SSL_CTX_set_alpn_protos)(SSL_CTX *, - const unsigned char *, - unsigned) = NULL; -int (*SSL_set_alpn_protos)(SSL *, const unsigned char *, unsigned) = NULL; -void (*SSL_CTX_set_alpn_select_cb)(SSL_CTX *, - int (*) (SSL *, - const unsigned char **, - unsigned char *, - const unsigned char *, - unsigned int, - void *), - void *) = NULL; -void (*SSL_get0_alpn_selected)(const SSL *, - const unsigned char **, - unsigned *) = NULL; -static const long Cryptography_HAS_ALPN = 0; -#else static const long Cryptography_HAS_ALPN = 1; -#endif -/* SSL_CTX_set_cert_cb was added in OpenSSL 1.0.2. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +#if CRYPTOGRAPHY_IS_LIBRESSL void (*SSL_CTX_set_cert_cb)(SSL_CTX *, int (*)(SSL *, void *), void *) = NULL; void (*SSL_set_cert_cb)(SSL *, int (*)(SSL *, void *), void *) = NULL; static const long Cryptography_HAS_SET_CERT_CB = 0; @@ -692,7 +659,6 @@ static const long Cryptography_HAS_SET_CERT_CB = 1; #endif - /* In OpenSSL 1.0.2i+ the handling of COMP_METHOD when OPENSSL_NO_COMP was changed and we no longer need to typedef void */ #if (defined(OPENSSL_NO_COMP) && CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I) || \ @@ -703,13 +669,6 @@ static const long Cryptography_HAS_COMPRESSION = 1; #endif -#if defined(SSL_CTRL_GET_SERVER_TMP_KEY) -static const long Cryptography_HAS_GET_SERVER_TMP_KEY = 1; -#else -static const long Cryptography_HAS_GET_SERVER_TMP_KEY = 0; -long (*SSL_get_server_tmp_key)(SSL *, EVP_PKEY **) = NULL; -#endif - static const long Cryptography_HAS_SSL_CTX_SET_CLIENT_CERT_ENGINE = 1; static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS = 1; @@ -734,7 +693,7 @@ #endif /* LibreSSL 2.9.1 added only the DTLS_*_method functions */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER +#if CRYPTOGRAPHY_IS_LIBRESSL && !CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 0; const SSL_METHOD *(*DTLS_method)(void) = NULL; const SSL_METHOD *(*DTLS_server_method)(void) = NULL; @@ -742,7 +701,7 @@ #else static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; #endif -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +#if CRYPTOGRAPHY_IS_LIBRESSL static const long SSL_OP_NO_DTLSv1 = 0; static const long SSL_OP_NO_DTLSv1_2 = 0; long (*DTLS_set_link_mtu)(SSL *, long) = NULL; @@ -769,7 +728,7 @@ return r; } -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 +#if CRYPTOGRAPHY_IS_LIBRESSL static const long Cryptography_HAS_SIGALGS = 0; const int (*SSL_get_sigalgs)(SSL *, int, int *, int *, int *, unsigned char *, unsigned char *) = NULL; @@ -801,41 +760,31 @@ static const long Cryptography_HAS_PSK = 1; #endif -/* - * Custom extensions were added in 1.0.2. 1.1.1 is adding a more general - * SSL_CTX_add_custom_ext function, but we're not binding that yet. - */ -#if CRYPTOGRAPHY_OPENSSL_102_OR_GREATER +#if !CRYPTOGRAPHY_IS_LIBRESSL static const long Cryptography_HAS_CUSTOM_EXT = 1; #else static const long Cryptography_HAS_CUSTOM_EXT = 0; - typedef int (*custom_ext_add_cb)(SSL *, unsigned int, const unsigned char **, size_t *, int *, void *); - typedef void (*custom_ext_free_cb)(SSL *, unsigned int, const unsigned char *, void *); - typedef int (*custom_ext_parse_cb)(SSL *, unsigned int, const unsigned char *, size_t, int *, void *); - int (*SSL_CTX_add_client_custom_ext)(SSL_CTX *, unsigned int, custom_ext_add_cb, custom_ext_free_cb, void *, custom_ext_parse_cb, void *) = NULL; - int (*SSL_CTX_add_server_custom_ext)(SSL_CTX *, unsigned int, custom_ext_add_cb, custom_ext_free_cb, void *, custom_ext_parse_cb, void *) = NULL; - int (*SSL_extension_supported)(unsigned int) = NULL; #endif diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 991e1f094436..0135a89a7456 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -185,6 +185,7 @@ int X509_CRL_get0_by_serial(X509_CRL *, X509_REVOKED **, ASN1_INTEGER *); +X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *); X509_REVOKED *Cryptography_X509_REVOKED_dup(X509_REVOKED *); /* new in 1.0.2 */ @@ -268,30 +269,7 @@ """ CUSTOMIZATIONS = """ -/* Added in 1.0.2 beta but we need it in all versions now due to the great - opaquing. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 && !CRYPTOGRAPHY_IS_LIBRESSL -/* from x509/x_x509.c version 1.0.2 */ -void X509_get0_signature(const ASN1_BIT_STRING **psig, - const X509_ALGOR **palg, const X509 *x) -{ - if (psig) - *psig = x->signature; - if (palg) - *palg = x->sig_alg; -} - -int X509_get_signature_nid(const X509 *x) -{ - return OBJ_obj2nid(x->sig_alg->algorithm); -} - -#endif - -/* Added in 1.0.2 but we need it in all versions now due to the great - opaquing. */ -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 -/* from x509/x_x509.c */ +#if CRYPTOGRAPHY_IS_LIBRESSL int i2d_re_X509_tbs(X509 *x, unsigned char **pp) { /* in 1.0.2+ this function also sets x->cert_info->enc.modified = 1 @@ -303,17 +281,10 @@ } #endif -/* X509_REVOKED_dup only exists on 1.0.2+. It is implemented using - IMPLEMENT_ASN1_DUP_FUNCTION. The below is the equivalent so we have - it available on all OpenSSLs. */ +/* Being kept around for pyOpenSSL */ X509_REVOKED *Cryptography_X509_REVOKED_dup(X509_REVOKED *rev) { -#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 - return ASN1_item_dup(ASN1_ITEM_rptr(X509_REVOKED), rev); -#else return X509_REVOKED_dup(rev); -#endif } - /* Added in 1.1.0 but we need it in all versions now due to the great opaquing. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 diff --git a/src/_cffi_src/openssl/x509_vfy.py b/src/_cffi_src/openssl/x509_vfy.py index 675ce8232718..d2bc5f4ec6e1 100644 --- a/src/_cffi_src/openssl/x509_vfy.py +++ b/src/_cffi_src/openssl/x509_vfy.py @@ -19,11 +19,8 @@ """ TYPES = """ -static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES; -static const long Cryptography_HAS_102_VERIFICATION_PARAMS; +static const long Cryptography_HAS_102_VERIFICATION; static const long Cryptography_HAS_110_VERIFICATION_PARAMS; -static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST; -static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN; static const long Cryptography_HAS_X509_STORE_CTX_GET_ISSUER; typedef ... Cryptography_STACK_OF_ASN1_OBJECT; @@ -222,64 +219,19 @@ """ CUSTOMIZATIONS = """ -/* OpenSSL 1.0.2+ verification parameters and error codes */ -#if CRYPTOGRAPHY_OPENSSL_102_OR_GREATER -static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES = 1; -static const long Cryptography_HAS_102_VERIFICATION_PARAMS = 1; +#if !CRYPTOGRAPHY_IS_LIBRESSL +static const long Cryptography_HAS_102_VERIFICATION = 1; #else -static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES = 0; -static const long Cryptography_HAS_102_VERIFICATION_PARAMS = 0; - +static const long Cryptography_HAS_102_VERIFICATION = 0; static const long X509_V_ERR_SUITE_B_INVALID_VERSION = 0; static const long X509_V_ERR_SUITE_B_INVALID_ALGORITHM = 0; static const long X509_V_ERR_SUITE_B_INVALID_CURVE = 0; static const long X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM = 0; static const long X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED = 0; static const long X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 = 0; -/* These 3 defines are unavailable in LibreSSL 2.5.x, but may be added - in the future... */ -#ifndef X509_V_ERR_HOSTNAME_MISMATCH -static const long X509_V_ERR_HOSTNAME_MISMATCH = 0; -#endif -#ifndef X509_V_ERR_EMAIL_MISMATCH -static const long X509_V_ERR_EMAIL_MISMATCH = 0; -#endif -#ifndef X509_V_ERR_IP_ADDRESS_MISMATCH -static const long X509_V_ERR_IP_ADDRESS_MISMATCH = 0; -#endif -#ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT -static const long X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT = 0; -#endif -#ifndef X509_CHECK_FLAG_NO_WILDCARDS -static const long X509_CHECK_FLAG_NO_WILDCARDS = 0; -#endif -#ifndef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS -static const long X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS = 0; -#endif -#ifndef X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS -static const long X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS = 0; -#endif -#ifndef X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS -static const long X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS = 0; -#endif - -/* X509_V_FLAG_TRUSTED_FIRST is also new in 1.0.2+, but it is added separately - below because it shows up in some earlier 3rd party OpenSSL packages. */ static const long X509_V_FLAG_SUITEB_128_LOS_ONLY = 0; static const long X509_V_FLAG_SUITEB_192_LOS = 0; static const long X509_V_FLAG_SUITEB_128_LOS = 0; - -#if !CRYPTOGRAPHY_IS_LIBRESSL -int (*X509_VERIFY_PARAM_set1_host)(X509_VERIFY_PARAM *, const char *, - size_t) = NULL; -int (*X509_VERIFY_PARAM_set1_email)(X509_VERIFY_PARAM *, const char *, - size_t) = NULL; -int (*X509_VERIFY_PARAM_set1_ip)(X509_VERIFY_PARAM *, const unsigned char *, - size_t) = NULL; -int (*X509_VERIFY_PARAM_set1_ip_asc)(X509_VERIFY_PARAM *, const char *) = NULL; -void (*X509_VERIFY_PARAM_set_hostflags)(X509_VERIFY_PARAM *, - unsigned int) = NULL; -#endif #endif #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 || CRYPTOGRAPHY_IS_LIBRESSL @@ -291,22 +243,6 @@ static const long Cryptography_HAS_110_VERIFICATION_PARAMS = 1; #endif -/* OpenSSL 1.0.2+ or Solaris's backport */ -#ifdef X509_V_FLAG_PARTIAL_CHAIN -static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN = 1; -#else -static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN = 0; -static const long X509_V_FLAG_PARTIAL_CHAIN = 0; -#endif - -/* OpenSSL 1.0.2+, *or* Fedora 20's flavor of OpenSSL 1.0.1e... */ -#ifdef X509_V_FLAG_TRUSTED_FIRST -static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST = 1; -#else -static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST = 0; -static const long X509_V_FLAG_TRUSTED_FIRST = 0; -#endif - #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL Cryptography_STACK_OF_X509_OBJECT *X509_STORE_get0_objects(X509_STORE *ctx) { return ctx->objs; diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 96fa9ff6a50e..6fd191f09f62 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -194,7 +194,7 @@ def openssl_version_text(self): Friendly string name of the loaded OpenSSL library. This is not necessarily the same version as it was compiled against. - Example: OpenSSL 1.0.1e 11 Feb 2013 + Example: OpenSSL 1.1.1d 10 Sep 2019 """ return self._ffi.string( self._lib.OpenSSL_version(self._lib.OPENSSL_VERSION) @@ -988,9 +988,7 @@ def create_x509_crl(self, builder, private_key, algorithm): for revoked_cert in builder._revoked_certificates: # Duplicating because the X509_CRL takes ownership and will free # this memory when X509_CRL_free is called. - revoked = self._lib.Cryptography_X509_REVOKED_dup( - revoked_cert._x509_revoked - ) + revoked = self._lib.X509_REVOKED_dup(revoked_cert._x509_revoked) self.openssl_assert(revoked != self._ffi.NULL) res = self._lib.X509_CRL_add0_revoked(x509_crl, revoked) self.openssl_assert(res == 1) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 94b48f527403..4568f71f3a30 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -94,15 +94,6 @@ def __init__(self, backend, cipher, mode, operation): ) self._backend.openssl_assert(res != 0) self._tag = mode.tag - elif ( - self._operation == self._DECRYPT and - self._backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and - not self._backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ): - raise NotImplementedError( - "delayed passing of GCM tag requires OpenSSL >= 1.0.2." - " To use this feature please update OpenSSL" - ) # pass key/iv res = self._backend._lib.EVP_CipherInit_ex( @@ -197,14 +188,6 @@ def finalize(self): return self._backend._ffi.buffer(buf)[:outlen[0]] def finalize_with_tag(self, tag): - if ( - self._backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and - not self._backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ): - raise NotImplementedError( - "finalize_with_tag requires OpenSSL >= 1.0.2. To use this " - "method please update OpenSSL" - ) if len(tag) < self._mode._min_tag_length: raise ValueError( "Authentication tag must be {} bytes or longer.".format( diff --git a/src/cryptography/hazmat/backends/openssl/dh.py b/src/cryptography/hazmat/backends/openssl/dh.py index 095f062339e6..961f17690339 100644 --- a/src/cryptography/hazmat/backends/openssl/dh.py +++ b/src/cryptography/hazmat/backends/openssl/dh.py @@ -17,8 +17,8 @@ def _dh_params_dup(dh_cdata, backend): param_cdata = lib.DHparams_dup(dh_cdata) backend.openssl_assert(param_cdata != ffi.NULL) param_cdata = ffi.gc(param_cdata, lib.DH_free) - if lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102: - # In OpenSSL versions < 1.0.2 or libressl DHparams_dup don't copy q + if lib.CRYPTOGRAPHY_IS_LIBRESSL: + # In libressl DHparams_dup don't copy q q = ffi.new("BIGNUM **") lib.DH_get0_pqg(dh_cdata, ffi.NULL, q, ffi.NULL) q_dup = lib.BN_dup(q[0]) diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index a293fb096042..ea4ae4c6bf91 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -13,18 +13,6 @@ def cryptography_has_ec2m(): ] -def cryptography_has_ec_1_0_2(): - return [ - "EC_curve_nid2nist", - ] - - -def cryptography_has_set_ecdh_auto(): - return [ - "SSL_CTX_set_ecdh_auto", - ] - - def cryptography_has_rsa_r_pkcs_decoding_error(): return [ "RSA_R_PKCS_DECODING_ERROR" @@ -51,15 +39,6 @@ def cryptography_has_ssl3_method(): ] -def cryptography_has_alpn(): - return [ - "SSL_CTX_set_alpn_protos", - "SSL_set_alpn_protos", - "SSL_CTX_set_alpn_select_cb", - "SSL_get0_alpn_selected", - ] - - def cryptography_has_compression(): return [ "SSL_get_current_compression", @@ -68,13 +47,7 @@ def cryptography_has_compression(): ] -def cryptography_has_get_server_tmp_key(): - return [ - "SSL_get_server_tmp_key", - ] - - -def cryptography_has_102_verification_error_codes(): +def cryptography_has_102_verification(): return [ 'X509_V_ERR_SUITE_B_INVALID_VERSION', 'X509_V_ERR_SUITE_B_INVALID_ALGORITHM', @@ -82,29 +55,9 @@ def cryptography_has_102_verification_error_codes(): 'X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM', 'X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED', 'X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256', - 'X509_V_ERR_HOSTNAME_MISMATCH', - 'X509_V_ERR_EMAIL_MISMATCH', - 'X509_V_ERR_IP_ADDRESS_MISMATCH' - ] - - -def cryptography_has_102_verification_params(): - return [ "X509_V_FLAG_SUITEB_128_LOS_ONLY", "X509_V_FLAG_SUITEB_192_LOS", "X509_V_FLAG_SUITEB_128_LOS", - "X509_VERIFY_PARAM_set1_host", - "X509_VERIFY_PARAM_set1_email", - "X509_VERIFY_PARAM_set1_ip", - "X509_VERIFY_PARAM_set1_ip_asc", - "X509_VERIFY_PARAM_set_hostflags", - "SSL_get0_param", - "SSL_CTX_get0_param", - "X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT", - "X509_CHECK_FLAG_NO_WILDCARDS", - "X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS", - "X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS", - "X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS" ] @@ -114,18 +67,6 @@ def cryptography_has_110_verification_params(): ] -def cryptography_has_x509_v_flag_trusted_first(): - return [ - "X509_V_FLAG_TRUSTED_FIRST", - ] - - -def cryptography_has_x509_v_flag_partial_chain(): - return [ - "X509_V_FLAG_PARTIAL_CHAIN", - ] - - def cryptography_has_set_cert_cb(): return [ "SSL_CTX_set_cert_cb", @@ -372,32 +313,17 @@ def cryptography_has_verified_chain(): # lists so we can use coverage to measure which are used. CONDITIONAL_NAMES = { "Cryptography_HAS_EC2M": cryptography_has_ec2m, - "Cryptography_HAS_EC_1_0_2": cryptography_has_ec_1_0_2, - "Cryptography_HAS_SET_ECDH_AUTO": cryptography_has_set_ecdh_auto, "Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR": ( cryptography_has_rsa_r_pkcs_decoding_error ), "Cryptography_HAS_RSA_OAEP_MD": cryptography_has_rsa_oaep_md, "Cryptography_HAS_RSA_OAEP_LABEL": cryptography_has_rsa_oaep_label, "Cryptography_HAS_SSL3_METHOD": cryptography_has_ssl3_method, - "Cryptography_HAS_ALPN": cryptography_has_alpn, "Cryptography_HAS_COMPRESSION": cryptography_has_compression, - "Cryptography_HAS_GET_SERVER_TMP_KEY": cryptography_has_get_server_tmp_key, - "Cryptography_HAS_102_VERIFICATION_ERROR_CODES": ( - cryptography_has_102_verification_error_codes - ), - "Cryptography_HAS_102_VERIFICATION_PARAMS": ( - cryptography_has_102_verification_params - ), + "Cryptography_HAS_102_VERIFICATION": cryptography_has_102_verification, "Cryptography_HAS_110_VERIFICATION_PARAMS": ( cryptography_has_110_verification_params ), - "Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST": ( - cryptography_has_x509_v_flag_trusted_first - ), - "Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN": ( - cryptography_has_x509_v_flag_partial_chain - ), "Cryptography_HAS_SET_CERT_CB": cryptography_has_set_cert_cb, "Cryptography_HAS_SSL_ST": cryptography_has_ssl_st, "Cryptography_HAS_TLS_ST": cryptography_has_tls_st, diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 1e0f34c9d470..4e23cd53f7d0 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -5,10 +5,8 @@ from __future__ import absolute_import, division, print_function import collections -import os import threading import types -import warnings import cryptography from cryptography import utils @@ -152,26 +150,6 @@ def init_static_locks(cls): _openssl_assert(cls.lib, res == 1) -def _verify_openssl_version(lib): - if ( - lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and - not lib.CRYPTOGRAPHY_IS_LIBRESSL - ): - if os.environ.get("CRYPTOGRAPHY_ALLOW_OPENSSL_101"): - warnings.warn( - "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " - "project, please upgrade. The next version of cryptography " - "will completely remove support for it.", - utils.CryptographyDeprecationWarning - ) - else: - raise RuntimeError( - "You are linking against OpenSSL 1.0.1, which is no longer " - "supported by the OpenSSL project. You need to upgrade to a " - "newer version of OpenSSL." - ) - - def _verify_package_version(version): # Occasionally we run into situations where the version of the Python # package does not match the version of the shared object that is loaded. @@ -201,5 +179,3 @@ def _verify_package_version(version): # condition registering the OpenSSL locks. On Python 3.4+ the import lock # is per module so this approach will not work. Binding.init_static_locks() - -_verify_openssl_version(Binding.lib) diff --git a/src/cryptography/hazmat/primitives/constant_time.py b/src/cryptography/hazmat/primitives/constant_time.py index 35ceafe080b1..7f41b9efa5f7 100644 --- a/src/cryptography/hazmat/primitives/constant_time.py +++ b/src/cryptography/hazmat/primitives/constant_time.py @@ -5,31 +5,10 @@ from __future__ import absolute_import, division, print_function import hmac -import warnings -from cryptography import utils -from cryptography.hazmat.bindings._constant_time import lib +def bytes_eq(a, b): + if not isinstance(a, bytes) or not isinstance(b, bytes): + raise TypeError("a and b must be bytes.") -if hasattr(hmac, "compare_digest"): - def bytes_eq(a, b): - if not isinstance(a, bytes) or not isinstance(b, bytes): - raise TypeError("a and b must be bytes.") - - return hmac.compare_digest(a, b) - -else: - warnings.warn( - "Support for your Python version is deprecated. The next version of " - "cryptography will remove support. Please upgrade to a release " - "(2.7.7+) that supports hmac.compare_digest as soon as possible.", - utils.PersistentlyDeprecated2018, - ) - - def bytes_eq(a, b): - if not isinstance(a, bytes) or not isinstance(b, bytes): - raise TypeError("a and b must be bytes.") - - return lib.Cryptography_constant_time_bytes_eq( - a, len(a), b, len(b) - ) == 1 + return hmac.compare_digest(a, b) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index e895aa056118..698b492db2d4 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -21,7 +21,6 @@ class CryptographyDeprecationWarning(UserWarning): # ubiquity of their use. They should not be removed until we agree on when that # cycle ends. PersistentlyDeprecated2017 = CryptographyDeprecationWarning -PersistentlyDeprecated2018 = CryptographyDeprecationWarning PersistentlyDeprecated2019 = CryptographyDeprecationWarning DeprecatedIn27 = CryptographyDeprecationWarning diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index e9bcc18e5495..29a1c459fa96 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -4,14 +4,11 @@ from __future__ import absolute_import, division, print_function -import pretend - import pytest from cryptography.exceptions import InternalError from cryptography.hazmat.bindings.openssl.binding import ( - Binding, _consume_errors, _openssl_assert, _verify_openssl_version, - _verify_package_version + Binding, _consume_errors, _openssl_assert, _verify_package_version ) @@ -125,12 +122,3 @@ def test_check_startup_errors_are_allowed(self): def test_version_mismatch(self): with pytest.raises(ImportError): _verify_package_version("nottherightversion") - - def test_verify_openssl_version(self, monkeypatch): - monkeypatch.delenv("CRYPTOGRAPHY_ALLOW_OPENSSL_101", raising=False) - lib = pretend.stub( - CRYPTOGRAPHY_OPENSSL_LESS_THAN_102=True, - CRYPTOGRAPHY_IS_LIBRESSL=False - ) - with pytest.raises(RuntimeError): - _verify_openssl_version(lib) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index f1d434f18516..d99ba406d050 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -352,25 +352,14 @@ def test_gcm_tag_decrypt_none(self, backend): encryptor.authenticate_additional_data(aad) encryptor.finalize() - if ( - backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and - not backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ): - with pytest.raises(NotImplementedError): - decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend - ).decryptor() - else: - decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend - ).decryptor() - decryptor.authenticate_additional_data(aad) - with pytest.raises(ValueError): - decryptor.finalize() + decryptor = base.Cipher( + algorithms.AES(key), + modes.GCM(iv), + backend=backend + ).decryptor() + decryptor.authenticate_additional_data(aad) + with pytest.raises(ValueError): + decryptor.finalize() def test_gcm_tag_decrypt_mode(self, backend): key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") @@ -408,46 +397,15 @@ def test_gcm_tag_decrypt_finalize(self, backend): encryptor.finalize() tag = encryptor.tag - if ( - backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and - not backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ): - with pytest.raises(NotImplementedError): - decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend - ).decryptor() - decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv, tag=encryptor.tag), - backend=backend - ).decryptor() - else: - decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend - ).decryptor() + decryptor = base.Cipher( + algorithms.AES(key), + modes.GCM(iv), + backend=backend + ).decryptor() decryptor.authenticate_additional_data(aad) - if ( - backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and - not backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ): - with pytest.raises(NotImplementedError): - decryptor.finalize_with_tag(tag) - decryptor.finalize() - else: - decryptor.finalize_with_tag(tag) - - @pytest.mark.supported( - only_if=lambda backend: ( - not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 or - backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ), - skip_message="Not supported on OpenSSL 1.0.1", - ) + decryptor.finalize_with_tag(tag) + def test_gcm_tag_decrypt_finalize_tag_length(self, backend): decryptor = base.Cipher( algorithms.AES(b"0" * 16), diff --git a/tests/wycheproof/test_ecdsa.py b/tests/wycheproof/test_ecdsa.py index 14542ed74d8e..49a3388d095b 100644 --- a/tests/wycheproof/test_ecdsa.py +++ b/tests/wycheproof/test_ecdsa.py @@ -62,9 +62,9 @@ def test_ecdsa_signature(backend, wycheproof): binascii.unhexlify(wycheproof.testgroup["keyDer"]), backend ) except (UnsupportedAlgorithm, ValueError): - # In OpenSSL 1.0.1, some keys fail to load with ValueError, instead of - # Unsupported Algorithm. We can remove handling for that exception - # when we drop support. + # In some OpenSSL 1.0.2s, some keys fail to load with ValueError, + # instead of Unsupported Algorithm. We can remove handling for that + # exception when we drop support. pytest.skip( "unable to load key (curve {})".format( wycheproof.testgroup["key"]["curve"] diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 92fed2b0629e..064cc7cf0c7c 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -50,7 +50,7 @@ def should_verify(backend, wycheproof): @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.supported( only_if=lambda backend: ( - not backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 or + not backend._lib.CRYPTOGRAPHY_IS_LIBRESSL or backend._lib.CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER ), skip_message=( diff --git a/tox.ini b/tox.ini index ee7793f8bcc7..4103a94e2b0d 100644 --- a/tox.ini +++ b/tox.ini @@ -13,8 +13,6 @@ deps = ./vectors randomorder: pytest-randomly passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING -setenv = - CRYPTOGRAPHY_ALLOW_OPENSSL_101=1 commands = pip list # We use parallel mode and then combine here so that coverage.py will take From e94a9f493b208b83982ff2378272879e74829f4f Mon Sep 17 00:00:00 2001 From: Torin Carey Date: Sat, 4 Apr 2020 22:30:59 +0100 Subject: [PATCH 782/988] Replace floating point arithmetic with integer arithmetic (#5181) --- src/cryptography/hazmat/backends/openssl/rsa.py | 4 +--- .../hazmat/primitives/asymmetric/padding.py | 3 +-- tests/hazmat/primitives/test_rsa.py | 11 +++++------ tests/utils.py | 7 +++---- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 3e4c2fd255e6..458071ca54db 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -4,8 +4,6 @@ from __future__ import absolute_import, division, print_function -import math - from cryptography import utils from cryptography.exceptions import ( InvalidSignature, UnsupportedAlgorithm, _Reasons @@ -352,7 +350,7 @@ def signer(self, padding, algorithm): return _RSASignatureContext(self._backend, self, padding, algorithm) def decrypt(self, ciphertext, padding): - key_size_bytes = int(math.ceil(self.key_size / 8.0)) + key_size_bytes = (self.key_size + 7) // 8 if key_size_bytes != len(ciphertext): raise ValueError("Ciphertext length must be equal to key size.") diff --git a/src/cryptography/hazmat/primitives/asymmetric/padding.py b/src/cryptography/hazmat/primitives/asymmetric/padding.py index a37c3f90ca72..828e03bc2394 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/padding.py +++ b/src/cryptography/hazmat/primitives/asymmetric/padding.py @@ -5,7 +5,6 @@ from __future__ import absolute_import, division, print_function import abc -import math import six @@ -73,7 +72,7 @@ def calculate_max_pss_salt_length(key, hash_algorithm): if not isinstance(key, (rsa.RSAPrivateKey, rsa.RSAPublicKey)): raise TypeError("key must be an RSA public or private key") # bit length - 1 per RFC 3447 - emlen = int(math.ceil((key.key_size - 1) / 8.0)) + emlen = (key.key_size + 6) // 8 salt_length = emlen - hash_algorithm.digest_size - 2 assert salt_length >= 0 return salt_length diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 9a0aaf1a5d7c..e6482651dc5f 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -6,7 +6,6 @@ import binascii import itertools -import math import os import pytest @@ -434,7 +433,7 @@ def test_pss_signing(self, pkcs1_example, backend): ), hashes.SHA1() ) - assert len(signature) == math.ceil(private_key.key_size / 8.0) + assert len(signature) == (private_key.key_size + 7) // 8 # PSS signatures contain randomness so we can't do an exact # signature check. Instead we'll verify that the signature created # successfully verifies. @@ -1428,7 +1427,7 @@ def test_decrypt_pkcs1v15_vectors(self, vector, backend): ) ).private_key(backend) ciphertext = binascii.unhexlify(example["encryption"]) - assert len(ciphertext) == math.ceil(skey.key_size / 8.0) + assert len(ciphertext) == (skey.key_size + 7) // 8 message = skey.decrypt(ciphertext, padding.PKCS1v15()) assert message == binascii.unhexlify(example["message"]) @@ -1684,7 +1683,7 @@ def test_rsa_encrypt_oaep(self, key_data, pad, backend): public_key = private_key.public_key() ct = public_key.encrypt(pt, pad) assert ct != pt - assert len(ct) == math.ceil(public_key.key_size / 8.0) + assert len(ct) == (public_key.key_size + 7) // 8 recovered_pt = private_key.decrypt(ct, pad) assert recovered_pt == pt @@ -1725,7 +1724,7 @@ def test_rsa_encrypt_oaep_sha2(self, mgf1hash, oaephash, backend): public_key = private_key.public_key() ct = public_key.encrypt(pt, pad) assert ct != pt - assert len(ct) == math.ceil(public_key.key_size / 8.0) + assert len(ct) == (public_key.key_size + 7) // 8 recovered_pt = private_key.decrypt(ct, pad) assert recovered_pt == pt @@ -1750,7 +1749,7 @@ def test_rsa_encrypt_pkcs1v15(self, key_data, pad, backend): public_key = private_key.public_key() ct = public_key.encrypt(pt, pad) assert ct != pt - assert len(ct) == math.ceil(public_key.key_size / 8.0) + assert len(ct) == (public_key.key_size + 7) // 8 recovered_pt = private_key.decrypt(ct, pad) assert recovered_pt == pt diff --git a/tests/utils.py b/tests/utils.py index ca3245b0a808..7e79830bbbf4 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -7,7 +7,6 @@ import binascii import collections import json -import math import os import re from contextlib import contextmanager @@ -744,15 +743,15 @@ def load_x963_vectors(vector_data): vector["key_data_length"] = key_data_len elif line.startswith("Z"): vector["Z"] = line.split("=")[1].strip() - assert math.ceil(shared_secret_len / 8) * 2 == len(vector["Z"]) + assert ((shared_secret_len + 7) // 8) * 2 == len(vector["Z"]) elif line.startswith("SharedInfo"): if shared_info_len != 0: vector["sharedinfo"] = line.split("=")[1].strip() silen = len(vector["sharedinfo"]) - assert math.ceil(shared_info_len / 8) * 2 == silen + assert ((shared_info_len + 7) // 8) * 2 == silen elif line.startswith("key_data"): vector["key_data"] = line.split("=")[1].strip() - assert math.ceil(key_data_len / 8) * 2 == len(vector["key_data"]) + assert ((key_data_len + 7) // 8) * 2 == len(vector["key_data"]) vectors.append(vector) vector = {} From 3b2102af549c1095d5478bb1243ee4cf76b9762b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 Apr 2020 21:00:55 -0400 Subject: [PATCH 783/988] Removed deprecated behavior in AKI.from_issuer_subject_key_identifier (#5182) --- CHANGELOG.rst | 5 +++++ docs/x509/reference.rst | 4 ++-- src/cryptography/utils.py | 1 - src/cryptography/x509/extensions.py | 16 +--------------- tests/x509/test_x509_ext.py | 7 ------- 5 files changed, 8 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0f31c61c2855..cb8cd2812ebf 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,11 @@ Changelog .. _v2-9: +* **BACKWARDS INCOMPATIBLE:** Removed support for passing an + :class:`~cryptography.x509.Extension` instance to + :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier`, + as per our deprecation policy. + 2.9 - 2020-04-02 ~~~~~~~~~~~~~~~~ diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 0bac61eb958f..fac2a3513a01 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1936,8 +1936,8 @@ X.509 Extensions >>> from cryptography import x509 >>> from cryptography.hazmat.backends import default_backend >>> issuer_cert = x509.load_pem_x509_certificate(pem_data, default_backend()) - >>> ski = issuer_cert.extensions.get_extension_for_class(x509.SubjectKeyIdentifier) - >>> x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier(ski) + >>> ski_ext = issuer_cert.extensions.get_extension_for_class(x509.SubjectKeyIdentifier) + >>> x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier(ski_ext.value) .. class:: SubjectKeyIdentifier(digest) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index 698b492db2d4..ff4f81d24887 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -22,7 +22,6 @@ class CryptographyDeprecationWarning(UserWarning): # cycle ends. PersistentlyDeprecated2017 = CryptographyDeprecationWarning PersistentlyDeprecated2019 = CryptographyDeprecationWarning -DeprecatedIn27 = CryptographyDeprecationWarning def _check_bytes(name, value): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index ad90e9b7edcb..1b96ffd78834 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -8,7 +8,6 @@ import datetime import hashlib import ipaddress -import warnings from enum import Enum import six @@ -213,21 +212,8 @@ def from_issuer_public_key(cls, public_key): @classmethod def from_issuer_subject_key_identifier(cls, ski): - if isinstance(ski, SubjectKeyIdentifier): - digest = ski.digest - else: - digest = ski.value.digest - warnings.warn( - "Extension objects are deprecated as arguments to " - "from_issuer_subject_key_identifier and support will be " - "removed soon. Please migrate to passing a " - "SubjectKeyIdentifier directly.", - utils.DeprecatedIn27, - stacklevel=2, - ) - return cls( - key_identifier=digest, + key_identifier=ski.digest, authority_cert_issuer=None, authority_cert_serial_number=None ) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 10d217ab6434..19ce4363f483 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -3271,13 +3271,6 @@ def test_from_issuer_subject_key_identifier(self, backend): ski_ext = issuer_cert.extensions.get_extension_for_class( x509.SubjectKeyIdentifier ) - # This was the incorrect arg we want to deprecate and remove - with pytest.warns(utils.CryptographyDeprecationWarning): - aki = x509.AuthorityKeyIdentifier.\ - from_issuer_subject_key_identifier(ski_ext) - assert ext.value == aki - - # Here's what we actually documented and want to do aki = x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier( ski_ext.value ) From 56143e1adb273e332e19f91e019d42ba14ab1b3a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 Apr 2020 23:03:44 -0400 Subject: [PATCH 784/988] Update insallation.rst to reflect our current test matrix (#5183) * Update insallation.rst to reflect our current test matrix * Update installation.rst * Update installation.rst * Update installation.rst --- docs/installation.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 80b606c90edb..22c85681600b 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -10,14 +10,14 @@ You can install ``cryptography`` with ``pip``: Supported platforms ------------------- -Currently we test ``cryptography`` on Python 2.7, 3.5+, and -PyPy 5.4+ on these operating systems. +Currently we test ``cryptography`` on Python 2.7, 3.5+, +PyPy 7.1+, and PyPy3 7.0 on these operating systems. * x86-64 CentOS 7.x * x86-64 Fedora (latest) -* macOS 10.13 High Sierra, 10.14 Mojave -* x86-64 Ubuntu 14.04, 16.04, and rolling -* x86-64 Debian Jessie (8.x), Stretch (9.x), Buster (10.x), and Sid (unstable) +* macOS 10.15 Catalina +* x86-64 Ubuntu 16.04 and rolling +* x86-64 Debian Stretch (9.x), Buster (10.x), and Sid (unstable) * x86-64 Alpine (latest) * 32-bit and 64-bit Python on 64-bit Windows Server 2019 From c93c4934996139ed390d90d6b82e1c4af962dc8c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 6 Apr 2020 22:32:25 -0400 Subject: [PATCH 785/988] See if we can remove an OpenSSL 1.0.1 workaround (#5184) --- src/cryptography/hazmat/backends/openssl/ciphers.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 4568f71f3a30..1de814193455 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -134,14 +134,6 @@ def update_into(self, data, buf): return outlen[0] def finalize(self): - # OpenSSL 1.0.1 on Ubuntu 12.04 (and possibly other distributions) - # appears to have a bug where you must make at least one call to update - # even if you are only using authenticate_additional_data or the - # GCM tag will be wrong. An (empty) call to update resolves this - # and is harmless for all other versions of OpenSSL. - if isinstance(self._mode, modes.GCM): - self.update(b"") - if ( self._operation == self._DECRYPT and isinstance(self._mode, modes.ModeWithAuthenticationTag) and From 55f3b7d71b448c5a7f4dd98acfc6f349412bc934 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 11 Apr 2020 18:21:48 -0400 Subject: [PATCH 786/988] fixed linkcheck (#5188) --- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 519e8c57ac25..9eacc5b4cdbd 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -819,7 +819,7 @@ Exceptions .. _`Communications Security Establishment`: https://www.cse-cst.gc.ca .. _`encrypt`: https://ssd.eff.org/en/module/what-should-i-know-about-encryption .. _`CRYPTREC`: https://www.cryptrec.go.jp/english/ -.. _`significant patterns in the output`: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29 +.. _`significant patterns in the output`: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_(ECB) .. _`International Data Encryption Algorithm`: https://en.wikipedia.org/wiki/International_Data_Encryption_Algorithm .. _`OpenPGP`: https://www.openpgp.org/ .. _`disk encryption`: https://en.wikipedia.org/wiki/Disk_encryption_theory#XTS From f69225d1240fb378b48f363083e51b0cebb961d0 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 12 Apr 2020 03:34:32 +0200 Subject: [PATCH 787/988] add SSL_CTX_(get|set)_keylog_callback (#5187) * add SSL_CTX_(get|set)_keylog_callback * For travis Co-authored-by: Alex Gaynor --- src/_cffi_src/openssl/ssl.py | 18 ++++++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index faad5605c123..c803ae7a2420 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -31,6 +31,7 @@ static const long Cryptography_HAS_PSK; static const long Cryptography_HAS_CIPHER_DETAILS; static const long Cryptography_HAS_VERIFIED_CHAIN; +static const long Cryptography_HAS_KEYLOG; /* Internally invented symbol to tell us if SNI is supported */ static const long Cryptography_HAS_TLSEXT_HOSTNAME; @@ -285,6 +286,10 @@ void SSL_CTX_set_info_callback(SSL_CTX *, void (*)(const SSL *, int, int)); void (*SSL_CTX_get_info_callback(SSL_CTX *))(const SSL *, int, int); +void SSL_CTX_set_keylog_callback(SSL_CTX *, + void (*)(const SSL *, const char *)); +void (*SSL_CTX_get_keylog_callback(SSL_CTX *))(const SSL *, const char *); + long SSL_CTX_set1_sigalgs_list(SSL_CTX *, const char *); /* SSL_SESSION */ @@ -568,6 +573,19 @@ static const long Cryptography_HAS_VERIFIED_CHAIN = 1; #endif +#if CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 +static const long Cryptography_HAS_KEYLOG = 0; +void (*SSL_CTX_set_keylog_callback)(SSL_CTX *, + void (*) (const SSL *, const char *) + ) = NULL; +void (*(*SSL_CTX_get_keylog_callback)(SSL_CTX *))( + const SSL *, + const char * + ) = NULL; +#else +static const long Cryptography_HAS_KEYLOG = 1; +#endif + /* Added in 1.1.0 in the great opaquing, but we need to define it for older OpenSSLs. Such is our burden. */ #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index ea4ae4c6bf91..b089f65b9800 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -270,6 +270,13 @@ def cryptography_has_tlsv13(): ] +def cryptography_has_keylog(): + return [ + "SSL_CTX_set_keylog_callback", + "SSL_CTX_get_keylog_callback", + ] + + def cryptography_has_raw_key(): return [ "EVP_PKEY_new_raw_private_key", @@ -356,6 +363,7 @@ def cryptography_has_verified_chain(): "Cryptography_HAS_OPENSSL_CLEANUP": cryptography_has_openssl_cleanup, "Cryptography_HAS_CIPHER_DETAILS": cryptography_has_cipher_details, "Cryptography_HAS_TLSv1_3": cryptography_has_tlsv13, + "Cryptography_HAS_KEYLOG": cryptography_has_keylog, "Cryptography_HAS_RAW_KEY": cryptography_has_raw_key, "Cryptography_HAS_EVP_DIGESTFINAL_XOF": ( cryptography_has_evp_digestfinal_xof From b77145a009b232f5b68c5f2f2a76370e793a8c1c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 11 Apr 2020 21:57:56 -0400 Subject: [PATCH 788/988] Refs #5075 -- use rsa_oaep_*.json from wycheproof (#5100) --- tests/wycheproof/test_rsa.py | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 064cc7cf0c7c..12f2901b6e04 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -145,3 +145,66 @@ def test_rsa_pss_signature(backend, wycheproof): ), digest ) + + +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER or + backend._lib.CRYPTOGRAPHY_IS_LIBRESSL + ), + skip_message=( + "A handful of these tests fail on OpenSSL 1.0.2 and since upstream " + "isn't maintaining it, they'll never be fixed." + ), +) +@pytest.mark.wycheproof_tests( + "rsa_oaep_2048_sha1_mgf1sha1_test.json", + "rsa_oaep_2048_sha224_mgf1sha1_test.json", + "rsa_oaep_2048_sha224_mgf1sha224_test.json", + "rsa_oaep_2048_sha256_mgf1sha1_test.json", + "rsa_oaep_2048_sha256_mgf1sha256_test.json", + "rsa_oaep_2048_sha384_mgf1sha1_test.json", + "rsa_oaep_2048_sha384_mgf1sha384_test.json", + "rsa_oaep_2048_sha512_mgf1sha1_test.json", + "rsa_oaep_2048_sha512_mgf1sha512_test.json", + "rsa_oaep_3072_sha256_mgf1sha1_test.json", + "rsa_oaep_3072_sha256_mgf1sha256_test.json", + "rsa_oaep_3072_sha512_mgf1sha1_test.json", + "rsa_oaep_3072_sha512_mgf1sha512_test.json", + "rsa_oaep_4096_sha256_mgf1sha1_test.json", + "rsa_oaep_4096_sha256_mgf1sha256_test.json", + "rsa_oaep_4096_sha512_mgf1sha1_test.json", + "rsa_oaep_4096_sha512_mgf1sha512_test.json", + "rsa_oaep_misc_test.json", +) +def test_rsa_oaep_encryption(backend, wycheproof): + key = serialization.load_pem_private_key( + wycheproof.testgroup["privateKeyPem"].encode("ascii"), + password=None, + backend=backend, + ) + digest = _DIGESTS[wycheproof.testgroup["sha"]] + mgf_digest = _DIGESTS[wycheproof.testgroup["mgfSha"]] + + padding_algo = padding.OAEP( + mgf=padding.MGF1(algorithm=mgf_digest), + algorithm=digest, + label=binascii.unhexlify(wycheproof.testcase["label"]) + ) + + if not backend.rsa_padding_supported(padding_algo): + pytest.skip("Padding {} not supported".format(padding_algo)) + + if wycheproof.valid or wycheproof.acceptable: + pt = key.decrypt( + binascii.unhexlify(wycheproof.testcase["ct"]), + padding_algo + ) + assert pt == binascii.unhexlify(wycheproof.testcase["msg"]) + else: + with pytest.raises(ValueError): + key.decrypt( + binascii.unhexlify(wycheproof.testcase["ct"]), + padding_algo + ) From ebb04592d2286118d3368d939d8a53a4a42be59d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Apr 2020 10:58:07 -0400 Subject: [PATCH 789/988] Refs #5075 -- use hkdf_*.json from wycheproof (#5190) --- tests/utils.py | 14 ++++++---- tests/wycheproof/test_hkdf.py | 50 ++++++++++++++++++++++++++++++++++ tests/wycheproof/test_utils.py | 4 +-- 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 tests/wycheproof/test_hkdf.py diff --git a/tests/utils.py b/tests/utils.py index 7e79830bbbf4..401b4e33871c 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -886,13 +886,17 @@ def load_nist_ccm_vectors(vector_data): class WycheproofTest(object): - def __init__(self, testgroup, testcase): + def __init__(self, testfiledata, testgroup, testcase): + self.testfiledata = testfiledata self.testgroup = testgroup self.testcase = testcase def __repr__(self): - return "".format( - self.testgroup, self.testcase, self.testcase["tcId"], + return "".format( + self.testfiledata, + self.testgroup, + self.testcase, + self.testcase["tcId"], ) @property @@ -922,7 +926,7 @@ def load_wycheproof_tests(wycheproof, test_file): path = os.path.join(wycheproof, "testvectors", test_file) with open(path) as f: data = json.load(f) - for group in data["testGroups"]: + for group in data.pop("testGroups"): cases = group.pop("tests") for c in cases: - yield WycheproofTest(group, c) + yield WycheproofTest(data, group, c) diff --git a/tests/wycheproof/test_hkdf.py b/tests/wycheproof/test_hkdf.py new file mode 100644 index 000000000000..7038d6232c8e --- /dev/null +++ b/tests/wycheproof/test_hkdf.py @@ -0,0 +1,50 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.kdf.hkdf import HKDF + + +_HASH_ALGORITHMS = { + "HKDF-SHA-1": hashes.SHA1(), + "HKDF-SHA-256": hashes.SHA256(), + "HKDF-SHA-384": hashes.SHA384(), + "HKDF-SHA-512": hashes.SHA512(), +} + + +@pytest.mark.wycheproof_tests( + "hkdf_sha1_test.json", + "hkdf_sha256_test.json", + "hkdf_sha384_test.json", + "hkdf_sha512_test.json", +) +def test_hkdf(backend, wycheproof): + hash_algo = _HASH_ALGORITHMS[wycheproof.testfiledata["algorithm"]] + if wycheproof.invalid: + with pytest.raises(ValueError): + HKDF( + algorithm=hash_algo, + length=wycheproof.testcase["size"], + salt=binascii.unhexlify(wycheproof.testcase["salt"]), + info=binascii.unhexlify(wycheproof.testcase["info"]), + backend=backend + ) + return + + h = HKDF( + algorithm=hash_algo, + length=wycheproof.testcase["size"], + salt=binascii.unhexlify(wycheproof.testcase["salt"]), + info=binascii.unhexlify(wycheproof.testcase["info"]), + backend=backend + ) + result = h.derive(binascii.unhexlify(wycheproof.testcase["ikm"])) + assert result == binascii.unhexlify(wycheproof.testcase["okm"]) diff --git a/tests/wycheproof/test_utils.py b/tests/wycheproof/test_utils.py index 82c0a3596396..2cf3be08e97c 100644 --- a/tests/wycheproof/test_utils.py +++ b/tests/wycheproof/test_utils.py @@ -10,8 +10,8 @@ def test_wycheproof_test_repr(): - wycheproof = WycheproofTest({}, {"tcId": 3}) - assert repr(wycheproof) == "" + wycheproof = WycheproofTest({}, {}, {"tcId": 3}) + assert repr(wycheproof) == "" def test_skip_if_wycheproof_none(): From 37e11ccb998781928bea5b17b13266005261c15f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Apr 2020 11:02:02 -0400 Subject: [PATCH 790/988] Refs #5075 -- use ed448_test.json from wycheproof (#5191) --- tests/wycheproof/test_eddsa.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/tests/wycheproof/test_eddsa.py b/tests/wycheproof/test_eddsa.py index 5ae87e09c93a..5beca130438d 100644 --- a/tests/wycheproof/test_eddsa.py +++ b/tests/wycheproof/test_eddsa.py @@ -9,9 +9,8 @@ import pytest from cryptography.exceptions import InvalidSignature -from cryptography.hazmat.primitives.asymmetric.ed25519 import ( - Ed25519PublicKey -) +from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey +from cryptography.hazmat.primitives.asymmetric.ed448 import Ed448PublicKey @pytest.mark.supported( @@ -41,3 +40,28 @@ def test_ed25519_signature(backend, wycheproof): binascii.unhexlify(wycheproof.testcase["sig"]), binascii.unhexlify(wycheproof.testcase["msg"]), ) + + +@pytest.mark.supported( + only_if=lambda backend: backend.ed448_supported(), + skip_message="Requires OpenSSL with Ed448 support" +) +@pytest.mark.wycheproof_tests( + "ed448_test.json", +) +def test_ed448_signature(backend, wycheproof): + key = Ed448PublicKey.from_public_bytes( + binascii.unhexlify(wycheproof.testgroup["key"]["pk"]) + ) + + if wycheproof.valid or wycheproof.acceptable: + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + ) + else: + with pytest.raises(InvalidSignature): + key.verify( + binascii.unhexlify(wycheproof.testcase["sig"]), + binascii.unhexlify(wycheproof.testcase["msg"]), + ) From 1e307e5e8aaa1f67f0654f9adb018b725481a481 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Apr 2020 19:27:26 -0400 Subject: [PATCH 791/988] Remove some remaining 1.0.1 cruft (#5193) --- .travis/install.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.travis/install.sh b/.travis/install.sh index 3083b411f1a5..59aa1f28f5b7 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -25,14 +25,9 @@ if [ -n "${OPENSSL}" ]; then shlib_sed make depend make -j"$(nproc)" - if [[ "${OPENSSL}" =~ 1.0.1 ]]; then - # OpenSSL 1.0.1 doesn't support installing without the docs. - make install - else - # avoid installing the docs - # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 - make install_sw install_ssldirs - fi + # avoid installing the docs + # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 + make install_sw install_ssldirs popd fi elif [ -n "${LIBRESSL}" ]; then From 84e3e6213d1de84893bd07c00e3616d420295511 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 12 Apr 2020 23:04:25 -0400 Subject: [PATCH 792/988] Run tests on aarch64, ppc, and s390x (#5192) * Run tests on aarch64, ppc, and s390x * Update .travis.yml * Try disabling it this way * Update .travis.yml * Update .travis.yml --- .travis.yml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 86de890046d9..9ea9b952c9d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,11 +44,11 @@ matrix: - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.0l - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1d + env: TOXENV=py27 OPENSSL=1.1.1f - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1d + env: TOXENV=py38 OPENSSL=1.1.1f - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1d OPENSSL_CONFIG_FLAGS="no-engine no-rc2" + env: TOXENV=py38 OPENSSL=1.1.1f OPENSSL_CONFIG_FLAGS="no-engine no-rc2" - python: 3.8 env: TOXENV=py38 LIBRESSL=2.7.5 - python: 3.8 @@ -58,6 +58,20 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 + # Non-x86_64 builds - cache disabled because it's broken ATM + - python: 3.8 + env: TOXENV=py38 PIP_NO_CACHE_DIR=off + arch: arm64 + - python: 3.8 + env: TOXENV=py38 OPENSSL=1.1.1f PIP_NO_CACHE_DIR=off + arch: arm64 + - python: 3.8 + env: TOXENV=py38 PIP_NO_CACHE_DIR=off + arch: ppc64le + - python: 3.8 + env: TOXENV=py38 PIP_NO_CACHE_DIR=off + arch: s390x + - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7 From 586cb7773d9cb94c3da4c00fe64ec2bcc186a0d0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 15 Apr 2020 15:10:35 -0400 Subject: [PATCH 793/988] Added CI for Debian bullseye (#5196) --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9ea9b952c9d5..93548dbc5865 100644 --- a/.travis.yml +++ b/.travis.yml @@ -84,6 +84,9 @@ matrix: - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-buster + - python: 3.8 + services: docker + env: TOXENV=py38 DOCKER=pyca/cryptography-runner-bullseye - python: 3.8 services: docker env: TOXENV=py38 DOCKER=pyca/cryptography-runner-sid From 59d8bc6fb97a20496e33b9a7133a1a5e8b2ed712 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 17 Apr 2020 21:14:19 -0400 Subject: [PATCH 794/988] Document that we test on bullseye (#5197) * Document that we test on bullseye * Update spelling_wordlist.txt * Update installation.rst --- docs/installation.rst | 3 ++- docs/spelling_wordlist.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 22c85681600b..a9b0f3af6158 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -17,7 +17,8 @@ PyPy 7.1+, and PyPy3 7.0 on these operating systems. * x86-64 Fedora (latest) * macOS 10.15 Catalina * x86-64 Ubuntu 16.04 and rolling -* x86-64 Debian Stretch (9.x), Buster (10.x), and Sid (unstable) +* x86-64 Debian Stretch (9.x), Buster (10.x), Bullseye (11.x), and Sid + (unstable) * x86-64 Alpine (latest) * 32-bit and 64-bit Python on 64-bit Windows Server 2019 diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 6e4675da058f..68711533b404 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -10,6 +10,7 @@ Blowfish boolean Botan Brainpool +Bullseye Capitan changelog Changelog From ea5d466839672a80a9b95bfe8adbd228b60eeb73 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 18 Apr 2020 14:45:12 -0400 Subject: [PATCH 795/988] Bumped docs and twisted CI jobs to latest 1.1.1 builder (#5199) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 93548dbc5865..f0f8a49dbb75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -107,7 +107,7 @@ matrix: env: TOXENV=py38 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.8 - env: TOXENV=docs OPENSSL=1.1.1d + env: TOXENV=docs OPENSSL=1.1.1f addons: apt: packages: @@ -122,7 +122,7 @@ matrix: - python: 2.7 env: DOWNSTREAM=pyopenssl - python: 3.7 - env: DOWNSTREAM=twisted OPENSSL=1.1.1d + env: DOWNSTREAM=twisted OPENSSL=1.1.1f - python: 2.7 env: DOWNSTREAM=paramiko - python: 2.7 From 78fc8798da17dbc3b83e09bbf73c9ea84d427073 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 18 Apr 2020 19:24:14 -0400 Subject: [PATCH 796/988] Use Ubuntu bionic for travis CI (#5200) * Use Ubuntu bionic for travis CI * Update .travis.yml --- .travis.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f0f8a49dbb75..58d72ff7758e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ sudo: true -dist: xenial +dist: bionic language: python @@ -37,8 +37,10 @@ matrix: # I don't know how to enumerate pypy versions in Travis other than to look at # https://github.com/travis-ci/travis-nightly-builder/blob/build/Rakefile#L74-L106 env: TOXENV=pypy-nocoverage + dist: xenial - python: pypy3.5-7.0 env: TOXENV=pypy3-nocoverage + dist: xenial - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l - python: 3.8 @@ -130,13 +132,15 @@ matrix: - python: 2.7 # BOTO_CONFIG works around this boto issue on travis: # https://github.com/boto/boto/issues/3717 - env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0l BOTO_CONFIG=/dev/null + env: DOWNSTREAM=dynamodb-encryption-sdk BOTO_CONFIG=/dev/null - python: 2.7 - env: DOWNSTREAM=certbot OPENSSL=1.1.0l + env: DOWNSTREAM=certbot - python: 2.7 env: DOWNSTREAM=certbot-josepy - python: 2.7 env: DOWNSTREAM=urllib3 + # Tests hangs when run under bionic + dist: xenial install: - ./.travis/install.sh From ffd72a6f403fe50b6122cd964bae0bfc08eefa9f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 18 Apr 2020 20:23:02 -0400 Subject: [PATCH 797/988] fixed anchor in changelog (#5201) --- CHANGELOG.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cb8cd2812ebf..0547ed57c527 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,13 +8,13 @@ Changelog .. note:: This version is not yet released and is under active development. -.. _v2-9: - * **BACKWARDS INCOMPATIBLE:** Removed support for passing an :class:`~cryptography.x509.Extension` instance to :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier`, as per our deprecation policy. +.. _v2-9: + 2.9 - 2020-04-02 ~~~~~~~~~~~~~~~~ From b13ad5697d9684231c1c20a83f960e384b337aec Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 19 Apr 2020 13:11:49 -0400 Subject: [PATCH 798/988] Migrate the manylinux wheel builder to GHA (#5202) --- .azure-pipelines/wheel-builder.yml | 77 ----------------------------- .github/workflows/wheel-builder.yml | 49 ++++++++++++++++++ 2 files changed, 49 insertions(+), 77 deletions(-) diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml index f7683d458f56..ba30bd1f003d 100644 --- a/.azure-pipelines/wheel-builder.yml +++ b/.azure-pipelines/wheel-builder.yml @@ -73,80 +73,3 @@ jobs: inputs: pathToPublish: wheelhouse/ artifactName: cryptography-macos-python$(python.version) - - - job: 'manylinux' - pool: - vmImage: 'ubuntu-16.04' - container: $[variables.containerImage] - strategy: - matrix: - Python27m-manylinux1: - containerImage: 'pyca/cryptography-manylinux1:x86_64' - PYTHON_VERSION: 'cp27-cp27m' - PLATFORM: 'manylinux1_x86_64' - Python27mu-manylinux1: - containerImage: 'pyca/cryptography-manylinux1:x86_64' - PYTHON_VERSION: 'cp27-cp27mu' - PLATFORM: 'manylinux1_x86_64' - Python3m-manylinux1: - containerImage: 'pyca/cryptography-manylinux1:x86_64' - PYTHON_VERSION: 'cp35-cp35m' - PLATFORM: 'manylinux1_x86_64' - Python27m-manylinux2010: - containerImage: 'pyca/cryptography-manylinux2010:x86_64' - PYTHON_VERSION: 'cp27-cp27m' - PLATFORM: 'manylinux2010_x86_64' - Python27mu-manylinux2010: - containerImage: 'pyca/cryptography-manylinux2010:x86_64' - PYTHON_VERSION: 'cp27-cp27mu' - PLATFORM: 'manylinux2010_x86_64' - Python3m-manylinux2010: - containerImage: 'pyca/cryptography-manylinux2010:x86_64' - PYTHON_VERSION: 'cp35-cp35m' - PLATFORM: 'manylinux2010_x86_64' - steps: - - script: /opt/python/$PYTHON_VERSION/bin/python -m virtualenv .venv - displayName: Create virtualenv - - script: .venv/bin/pip install -U pip==10.0.1 - displayName: Downgrade pip lol - - script: .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" - displayName: Install our Python dependencies - - script: | - set -e - set -x - - REGEX="cp3([0-9])*" - if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then - PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" - fi - LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ - CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - .venv/bin/pip wheel cryptography==$BUILD_VERSION --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API - displayName: Build the wheel - - script: auditwheel repair --plat $PLATFORM tmpwheelhouse/cryptograph*.whl -w wheelhouse/ - displayName: Run auditwheel - - script: unzip wheelhouse/*.whl -d execstack.check - displayName: Unzip the wheel - - script: | - set -e - set -x - - results=$(execstack execstack.check/cryptography/hazmat/bindings/*.so) - count=$(echo "$results" | grep -c '^X' || true) - if [ "$count" -ne 0 ]; then - exit 1 - else - exit 0 - fi - displayName: Run execstack on the wheel - - script: .venv/bin/pip install -U pip - displayName: Upgrade pip again so we can actually use manylinux2010 - - script: .venv/bin/pip install cryptography==$BUILD_VERSION --no-index -f wheelhouse/ - displayName: Test installing the wheel - - script: | - .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - displayName: Print the OpenSSL we built and linked against - - task: PublishBuildArtifacts@1 - inputs: - pathToPublish: wheelhouse/ - artifactName: cryptography-$(PLATFORM)-$(PYTHON_VERSION) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index 67ea99291aac..455779c734b2 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -1,8 +1,57 @@ +name: Wheel Builder on: repository_dispatch: types: [wheel-builder] jobs: + manylinux: + runs-on: ubuntu-latest + container: ${{ matrix.MANYLINUX.CONTAINER }} + strategy: + matrix: + PYTHON: ["cp27-cp27m", "cp27-cp27mu", "cp35-cp35m"] + MANYLINUX: + - NAME: manylinux1_x86_64 + CONTAINER: "pyca/cryptography-manylinux1:x86_64" + - NAME: manylinux2010_x86_64 + CONTAINER: "pyca/cryptography-manylinux2010:x86_64" + name: "Python ${{ matrix.PYTHON }} for ${{ matrix.MANYLINUX.NAME }}" + steps: + - run: /opt/python/${{ matrix.PYTHON }}/bin/python -m virtualenv .venv + - name: Downgrade pip, can't remember why + run: .venv/bin/pip install -U pip==10.0.1 + - name: Install Python dependencies + run: .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" + - run: | + REGEX="cp3([0-9])*" + if [[ "${{ matrix.PYTHON }}" =~ $REGEX ]]; then + PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" + fi + LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ + CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ + .venv/bin/pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API + - run: auditwheel repair --plat ${{ matrix.MANYLINUX.NAME }} tmpwheelhouse/cryptograph*.whl -w wheelhouse/ + - run: unzip wheelhouse/*.whl -d execstack.check + - run: | + results=$(execstack execstack.check/cryptography/hazmat/bindings/*.so) + count=$(echo "$results" | grep -c '^X' || true) + if [ "$count" -ne 0 ]; then + exit 1 + else + exit 0 + fi + - name: Upgrade pip again so we can actually use manylinux2010 + run: .venv/bin/pip install -U pip + - run: .venv/bin/pip install cryptography --no-index -f wheelhouse/ + - run: | + .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + - run: mkdir cryptography-wheelhouse + - run: mv wheelhouse/cryptography*.whl cryptography-wheelhouse/ + - uses: actions/upload-artifact@v1 + with: + name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-${{ matrix.MANYLINUX.NAME }}-${{ matrix.PYTHON }}" + path: cryptography-wheelhouse/ + windows: runs-on: windows-latest strategy: From 3e0f9d44b6191c412c42cf81fb219a5a8037ba74 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 19 Apr 2020 17:15:08 -0500 Subject: [PATCH 799/988] macos wheel builder (#5205) * macos wheel builder * review comments --- .github/workflows/wheel-builder.yml | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index 455779c734b2..641906700054 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -52,6 +52,60 @@ jobs: name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-${{ matrix.MANYLINUX.NAME }}-${{ matrix.PYTHON }}" path: cryptography-wheelhouse/ + macos: + runs-on: macos-latest + strategy: + matrix: + PYTHON: + - VERSION: '2.7', + ABI_VERSION: '2.7', + DOWNLOAD_URL: 'https://www.python.org/ftp/python/2.7.17/python-2.7.17-macosx10.9.pkg', + BIN_PATH: '/Library/Frameworks/Python.framework/Versions/2.7/bin/python' + - VERSION: '3.8', + ABI_VERSION: '3.5', + DOWNLOAD_URL: 'https://www.python.org/ftp/python/3.8.2/python-3.8.2-macosx10.9.pkg', + BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3' + name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS" + steps: + - run: | + curl "$PYTHON_DOWNLOAD_URL" -o python.pkg + sudo installer -pkg python.pkg -target / + env: + PYTHON_DOWNLOAD_URL: ${{ matrix.PYTHON.DOWNLOAD_URL }} + + - run: brew update + - run: brew upgrade openssl@1.1 + - run: ${{ matrix.PYTHON.BIN_PATH }} -m pip install -U virtualenv + - run: ${{ matrix.PYTHON.BIN_PATH }} -m virtualenv venv + # Downgrade pip, I can't remember why + - run: venv/bin/pip install -U pip==10.0.1 + - run: venv/bin/pip install -U wheel + - run: venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" + + - name: Build the wheel + run: | + REGEX="3\.([0-9])*" + if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then + PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" + fi + + CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ + LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ + CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ + venv/bin/pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API + env: + PYTHON_VERSION: ${{ matrix.PYTHON.ABI_VERSION }} + - run: venv/bin/pip install -f wheelhouse --no-index cryptography + - run: | + venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + + - run: mkdir cryptography-wheelhouse + - run: mv wheelhouse/cryptography*.whl cryptography-wheelhouse/ + - uses: actions/upload-artifact@v1 + with: + name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}" + path: cryptography-wheelhouse/ + windows: runs-on: windows-latest strategy: From def74d90f17904c0808669091bab4d3bb041d8b8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 19 Apr 2020 19:15:14 -0400 Subject: [PATCH 800/988] yaml syntax error fix (#5206) --- .github/workflows/wheel-builder.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index 641906700054..db30f53d2e83 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -57,13 +57,13 @@ jobs: strategy: matrix: PYTHON: - - VERSION: '2.7', - ABI_VERSION: '2.7', - DOWNLOAD_URL: 'https://www.python.org/ftp/python/2.7.17/python-2.7.17-macosx10.9.pkg', + - VERSION: '2.7' + ABI_VERSION: '2.7' + DOWNLOAD_URL: 'https://www.python.org/ftp/python/2.7.17/python-2.7.17-macosx10.9.pkg' BIN_PATH: '/Library/Frameworks/Python.framework/Versions/2.7/bin/python' - - VERSION: '3.8', - ABI_VERSION: '3.5', - DOWNLOAD_URL: 'https://www.python.org/ftp/python/3.8.2/python-3.8.2-macosx10.9.pkg', + - VERSION: '3.8' + ABI_VERSION: '3.5' + DOWNLOAD_URL: 'https://www.python.org/ftp/python/3.8.2/python-3.8.2-macosx10.9.pkg' BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3' name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS" steps: From 5526dca15bded0687e507a065b141694ee5f1530 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 19 Apr 2020 19:32:28 -0500 Subject: [PATCH 801/988] goodbye azure (#5207) * goodbye azure * Update tox.ini Co-Authored-By: Alex Gaynor * review comments * update a comment * delete final azure yaml * linting Co-authored-by: Alex Gaynor --- .azure-pipelines/wheel-builder.yml | 75 ------------------------------ .travis/install.sh | 2 +- MANIFEST.in | 4 +- dev-requirements.txt | 1 - docs/doing-a-release.rst | 9 ++-- release.py | 65 +------------------------- tox.ini | 2 +- 7 files changed, 9 insertions(+), 149 deletions(-) delete mode 100644 .azure-pipelines/wheel-builder.yml diff --git a/.azure-pipelines/wheel-builder.yml b/.azure-pipelines/wheel-builder.yml deleted file mode 100644 index ba30bd1f003d..000000000000 --- a/.azure-pipelines/wheel-builder.yml +++ /dev/null @@ -1,75 +0,0 @@ -variables: - agent.preferPowerShellOnContainers: true - -trigger: none -pr: none - -jobs: - - job: 'macOS' - pool: - vmImage: 'macOS-10.14' - strategy: - matrix: - Python27: - python.version: '2.7' - PYTHON_DOWNLOAD_URL: "https://www.python.org/ftp/python/2.7.16/python-2.7.16-macosx10.6.pkg" - PYTHON_BIN_PATH: /Library/Frameworks/Python.framework/Versions/2.7/bin/python - Python3: - python.version: '3.5' - PYTHON_DOWNLOAD_URL: "https://www.python.org/ftp/python/3.7.3/python-3.7.3-macosx10.6.pkg" - PYTHON_BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 - steps: - - script: | - set -e - set -x - - curl "$PYTHON_DOWNLOAD_URL" -o python.pkg - sudo installer -pkg python.pkg -target / - displayName: Download and install Python - - - script: brew update - displayName: Update brew - - script: brew upgrade openssl@1.1 - displayName: Install OpenSSL with brew - - - script: $PYTHON_BIN_PATH -m pip install -U virtualenv - displayName: Install virtualenv - - script: $PYTHON_BIN_PATH -m virtualenv .venv - displayName: Create virtualenv - - script: .venv/bin/pip install -U wheel - displayName: Update wheel to the latest version - - script: .venv/bin/pip install -U pip==10.0.1 - displayName: Downgrade pip lol - - script: .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" - displayName: Install our Python dependencies - - - script: | - set -e - set -x - - REGEX="3\.([0-9])*" - if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then - PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" - fi - - CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ - LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ - .venv/bin/pip wheel cryptography==$BUILD_VERSION --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API - displayName: Build the wheel - - script: .venv/bin/pip install --no-index -f wheelhouse cryptography - displayName: Test installing the wheel - - script: | - .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - displayName: Print the OpenSSL we built and linked against - - script: otool -L `find .venv -name '_openssl*.so'` - displayName: Print everything we link against - - script: lipo -info `find .venv -name '*.so'` - displayName: Print the architectures in our fat mach-o binary - - script: otool -L `find .venv -name '_openssl*.so'` | grep -vG "libcrypto\\|libssl" - displayName: Verify that we did not link against OpenSSL - - - task: PublishBuildArtifacts@1 - inputs: - pathToPublish: wheelhouse/ - artifactName: cryptography-macos-python$(python.version) diff --git a/.travis/install.sh b/.travis/install.sh index 59aa1f28f5b7..377da1d6e34c 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -60,5 +60,5 @@ pip install virtualenv python -m virtualenv ~/.venv source ~/.venv/bin/activate -# If we pin coverage it must be kept in sync with tox.ini and azure-pipelines.yml +# If we pin coverage it must be kept in sync with tox.ini and .github/workflows/ci.yml pip install tox codecov coverage diff --git a/MANIFEST.in b/MANIFEST.in index 2da8d15259c3..f1fc294be5fa 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -16,8 +16,8 @@ recursive-include tests *.py exclude vectors recursive-exclude vectors * -exclude azure-pipelines.yml .azure-pipelines .travis.yml .travis -recursive-exclude .azure-pipelines * +exclude .travis.yml .travis recursive-exclude .travis * +recursive-exclude .github * exclude release.py .coveragerc codecov.yml dev-requirements.txt rtd-requirements.txt tox.ini diff --git a/dev-requirements.txt b/dev-requirements.txt index 6b7f482af297..333faaddf8fe 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,4 +1,3 @@ -azure-devops click coverage tox >= 2.4.1 diff --git a/docs/doing-a-release.rst b/docs/doing-a-release.rst index 733d67f43cc3..043d52d28da6 100644 --- a/docs/doing-a-release.rst +++ b/docs/doing-a-release.rst @@ -21,11 +21,10 @@ Verifying OpenSSL version ------------------------- The release process creates wheels bundling OpenSSL for Windows, macOS, and -Linux. Check that the Windows and macOS Azure Pipelines builders have the latest -version of OpenSSL installed and verify that the latest version is present in -both the ``pyca/cryptography-manylinux1`` and -``pyca/cryptography-manylinux2010`` docker containers. If anything is out -of date follow the instructions for upgrading OpenSSL. +Linux. Check that the Windows, macOS, and Linux builders (both +``pyca/cryptography-manylinux1`` and ``pyca/cryptography-manylinux2010``) have +the latest OpenSSL. If anything is out of date follow the instructions for +upgrading OpenSSL. Upgrading OpenSSL ----------------- diff --git a/release.py b/release.py index 2079a3bcfebc..fdde7d680c8b 100644 --- a/release.py +++ b/release.py @@ -10,17 +10,11 @@ import json import os import subprocess -import tempfile import time import zipfile -from azure.devops.connection import Connection -from azure.devops.v5_1.build.models import Build - import click -from msrest.authentication import BasicAuthentication - import requests @@ -29,61 +23,6 @@ def run(*args, **kwargs): subprocess.check_call(list(args), **kwargs) -def wait_for_build_completed_azure(build_client, build_id): - while True: - build = build_client.get_build("cryptography", build_id) - if build.finish_time is not None: - break - time.sleep(3) - - -def download_artifacts_azure(build_client, build_id): - artifacts = build_client.get_artifacts("cryptography", build_id) - paths = [] - for artifact in artifacts: - contents = build_client.get_artifact_content_zip( - "cryptography", build_id, artifact.name - ) - with tempfile.NamedTemporaryFile() as f: - for chunk in contents: - f.write(chunk) - f.flush() - with zipfile.ZipFile(f.name) as z: - for name in z.namelist(): - if not name.endswith(".whl"): - continue - p = z.open(name) - out_path = os.path.join( - os.path.dirname(__file__), - "dist", - os.path.basename(name), - ) - with open(out_path, "wb") as f: - f.write(p.read()) - paths.append(out_path) - return paths - - -def build_wheels_azure(token, version): - credentials = BasicAuthentication("", token) - connection = Connection( - base_url="https://dev.azure.com/pyca", creds=credentials - ) - build_client = connection.clients.get_build_client() - [definition] = build_client.get_definitions( - "cryptography", "wheel builder" - ) - build_description = Build( - definition=definition, - parameters=json.dumps({"BUILD_VERSION": version}), - ) - build = build_client.queue_build( - project="cryptography", build=build_description - ) - wait_for_build_completed_azure(build_client, build.id) - return download_artifacts_azure(build_client, build.id) - - def wait_for_build_complete_github_actions(session, token, run_url): while True: response = session.get(run_url, headers={ @@ -173,7 +112,6 @@ def release(version): """ ``version`` should be a string like '0.4' or '1.0'. """ - azure_token = getpass.getpass("Azure personal access token: ") github_token = getpass.getpass("Github person access token: ") run("git", "tag", "-s", version, "-m", "{0} release".format(version)) @@ -188,11 +126,10 @@ def release(version): ) run("twine", "upload", "-s", *packages) - azure_wheel_paths = build_wheels_azure(azure_token, version) github_actions_wheel_paths = build_github_actions_wheels( github_token, version ) - run("twine", "upload", *(azure_wheel_paths, github_actions_wheel_paths)) + run("twine", "upload", *github_actions_wheel_paths) if __name__ == "__main__": diff --git a/tox.ini b/tox.ini index 4103a94e2b0d..48cfc4513fc6 100644 --- a/tox.ini +++ b/tox.ini @@ -8,7 +8,7 @@ extras = test idna: idna deps = - # This must be kept in sync with .travis/install.sh and azure-pipelines.yml + # This must be kept in sync with .travis/install.sh and .github/workflows/ci.yml coverage ./vectors randomorder: pytest-randomly From a7f846e0d694b1d007adb09d86482b909a8ab9f5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 21 Apr 2020 15:31:33 -0400 Subject: [PATCH 802/988] Forward port the 2.9.1 changelog (#5214) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0547ed57c527..fac9375325f4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,14 @@ Changelog :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier`, as per our deprecation policy. +.. _v2-9-1: + +2.9.1 - 2020-04-21 +~~~~~~~~~~~~~~~~~~ + +* Updated Windows, macOS, and ``manylinux`` wheels to be compiled with + OpenSSL 1.1.1g. + .. _v2-9: 2.9 - 2020-04-02 From 23648a4236acd5e7e18e82bee71f43146e09c857 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 22 Apr 2020 14:52:20 -0500 Subject: [PATCH 803/988] use our infra built openssl on the macos side now too (#5217) * use our infra built openssl on the macos side now too * remove no longer required brew updates * need requests * need this env var * update the wheel-builders too --- .github/workflows/ci.yml | 18 +++++++++++------- .github/workflows/download_openssl.py | 27 +++++++++++++++++---------- .github/workflows/wheel-builder.yml | 15 +++++++++------ 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14418789322e..d49ee7192eb3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,16 +27,20 @@ jobs: with: python-version: ${{ matrix.PYTHON.VERSION }} - - run: brew update - - run: brew install openssl@1.1 - - run: python -m pip install tox coverage + - run: python -m pip install tox requests coverage - run: git clone https://github.com/google/wycheproof - - run: | + - name: Download OpenSSL + run: | + python .github/workflows/download_openssl.py macos openssl-macos + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Tests + run: | CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ - LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \ + LDFLAGS="${HOME}/openssl-macos/lib/libcrypto.a ${HOME}/openssl-macos/lib/libssl.a" \ + CFLAGS="-I${HOME}/openssl-macos/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9 -march=core2" \ tox -r -- --color=yes --wycheproof-root=wycheproof env: TOXENV: ${{ matrix.PYTHON.TOXENV }} @@ -78,7 +82,7 @@ jobs: - run: python -m pip install tox requests coverage - name: Download OpenSSL run: | - python .github/workflows/download_openssl.py openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} + python .github/workflows/download_openssl.py windows openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" env: diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index f665e7f0ec83..78e5135caf96 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -6,12 +6,6 @@ import requests -RUNS_URL = ( - "https://api.github.com/repos/pyca/infra/actions/workflows/" - "build-openssl.yml/runs?branch=master&status=success" -) - - def get_response(url, token): response = requests.get(url, headers={"Authorization": "token " + token}) if response.status_code != 200: @@ -21,11 +15,24 @@ def get_response(url, token): return response -def main(target): +def main(platform, target): + if platform == "windows": + workflow = "build-openssl.yml" + path = "C:/" + elif platform == "macos": + workflow = "build-macos-openssl.yml" + path = os.environ["HOME"] + else: + raise ValueError("Invalid platform") + token = os.environ["GITHUB_TOKEN"] print("Looking for: {}".format(target)) + runs_url = ( + "https://api.github.com/repos/pyca/infra/actions/workflows/" + "{}/runs?branch=master&status=success".format(workflow) + ) - response = get_response(RUNS_URL, token).json() + response = get_response(runs_url, token).json() artifacts_url = response["workflow_runs"][0]["artifacts_url"] response = get_response(artifacts_url, token).json() for artifact in response["artifacts"]: @@ -35,10 +42,10 @@ def main(target): artifact["archive_download_url"], token ) zipfile.ZipFile(io.BytesIO(response.content)).extractall( - "C:/{}".format(artifact["name"]) + os.path.join(path, artifact["name"]) ) return if __name__ == "__main__": - main(sys.argv[1]) + main(sys.argv[1], sys.argv[2]) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index db30f53d2e83..5452d9666fe3 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -72,10 +72,13 @@ jobs: sudo installer -pkg python.pkg -target / env: PYTHON_DOWNLOAD_URL: ${{ matrix.PYTHON.DOWNLOAD_URL }} + - run: ${{ matrix.PYTHON.BIN_PATH }} -m pip install -U virtualenv requests + - name: Download OpenSSL + run: | + ${{ matrix.PYTHON.BIN_PATH }} .github/workflows/download_openssl.py macos openssl-macos + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: brew update - - run: brew upgrade openssl@1.1 - - run: ${{ matrix.PYTHON.BIN_PATH }} -m pip install -U virtualenv - run: ${{ matrix.PYTHON.BIN_PATH }} -m virtualenv venv # Downgrade pip, I can't remember why - run: venv/bin/pip install -U pip==10.0.1 @@ -90,8 +93,8 @@ jobs: fi CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ - LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a /usr/local/opt/openssl@1.1/lib/libssl.a" \ - CFLAGS="-I/usr/local/opt/openssl@1.1/include -mmacosx-version-min=10.9" \ + LDFLAGS="${HOME}/openssl-macos/lib/libcrypto.a ${HOME}/openssl-macos/lib/libssl.a" \ + CFLAGS="-I${HOME}/openssl-macos/include -mmacosx-version-min=10.9 -march=core2" \ venv/bin/pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API env: PYTHON_VERSION: ${{ matrix.PYTHON.ABI_VERSION }} @@ -137,7 +140,7 @@ jobs: - run: pip install requests - name: Download OpenSSL run: | - python .github/workflows/download_openssl.py openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} + python .github/workflows/download_openssl.py windows openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" env: From e0ed99cdbe86e8da7dc1421e56ba322d4f1c02c4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 22 Apr 2020 16:38:13 -0500 Subject: [PATCH 804/988] we need to check out the code in the wheel builder for macos now (#5220) can't download openssl without the script to do it --- .github/workflows/wheel-builder.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index 5452d9666fe3..daeaf4e162af 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -67,6 +67,7 @@ jobs: BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3' name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS" steps: + - uses: actions/checkout@master - run: | curl "$PYTHON_DOWNLOAD_URL" -o python.pkg sudo installer -pkg python.pkg -target / From 331bcf6b2c47afe877d01d6293f0f13fa3dd2a58 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 22 Apr 2020 18:30:40 -0500 Subject: [PATCH 805/988] upgrade to 1.1.1g across our CI (#5218) --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 58d72ff7758e..132975fef8c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,11 +46,11 @@ matrix: - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.0l - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1f + env: TOXENV=py27 OPENSSL=1.1.1g - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1f + env: TOXENV=py38 OPENSSL=1.1.1g - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1f OPENSSL_CONFIG_FLAGS="no-engine no-rc2" + env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2" - python: 3.8 env: TOXENV=py38 LIBRESSL=2.7.5 - python: 3.8 @@ -65,7 +65,7 @@ matrix: env: TOXENV=py38 PIP_NO_CACHE_DIR=off arch: arm64 - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1f PIP_NO_CACHE_DIR=off + env: TOXENV=py38 OPENSSL=1.1.1g PIP_NO_CACHE_DIR=off arch: arm64 - python: 3.8 env: TOXENV=py38 PIP_NO_CACHE_DIR=off @@ -109,7 +109,7 @@ matrix: env: TOXENV=py38 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.8 - env: TOXENV=docs OPENSSL=1.1.1f + env: TOXENV=docs OPENSSL=1.1.1g addons: apt: packages: @@ -124,7 +124,7 @@ matrix: - python: 2.7 env: DOWNSTREAM=pyopenssl - python: 3.7 - env: DOWNSTREAM=twisted OPENSSL=1.1.1f + env: DOWNSTREAM=twisted OPENSSL=1.1.1g - python: 2.7 env: DOWNSTREAM=paramiko - python: 2.7 From 311722e330f9a7d89bb17943846b13e3b9e010bf Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 22 Apr 2020 19:03:59 -0500 Subject: [PATCH 806/988] port 2.9.2 changelog to master (#5222) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fac9375325f4..6da06409af6c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,14 @@ Changelog :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier`, as per our deprecation policy. +.. _v2-9-2: + +2.9.2 - 2020-04-22 +~~~~~~~~~~~~~~~~~~ + +* Updated the macOS wheel to fix an issue where it would not run on macOS + versions older than 10.15. + .. _v2-9-1: 2.9.1 - 2020-04-21 From 579b4320bcd18327aa32248697e64d68a780bdd2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 22 Apr 2020 19:13:04 -0500 Subject: [PATCH 807/988] fix typo in error msg for download openssl (#5223) --- .github/workflows/download_openssl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index 78e5135caf96..d5a49a3ce9ab 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -10,7 +10,7 @@ def get_response(url, token): response = requests.get(url, headers={"Authorization": "token " + token}) if response.status_code != 200: raise ValueError("Got HTTP {} fetching {}: ".format( - response.code, url, response.content + response.status_code, url, response.content )) return response From c38c4d29241e3b6ecefcfcfda0c6789e5d126556 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 24 Apr 2020 13:15:12 -0400 Subject: [PATCH 808/988] Ubuntu rolling is now on py3.8 (#5226) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 132975fef8c2..6127745a71a4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -95,9 +95,9 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling - - python: 3.7 + - python: 3.8 services: docker - env: TOXENV=py37 DOCKER=pyca/cryptography-runner-ubuntu-rolling + env: TOXENV=py38 DOCKER=pyca/cryptography-runner-ubuntu-rolling - python: 2.7 services: docker env: TOXENV=py27-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling From f9ab38e6b274d7ad83bd1ea306be360468d80e71 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 Apr 2020 14:32:01 -0400 Subject: [PATCH 809/988] Update release procedure for infra changes (#5228) --- .github/ISSUE_TEMPLATE/openssl-release.md | 13 ++++--------- .github/workflows/download_openssl.py | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/openssl-release.md b/.github/ISSUE_TEMPLATE/openssl-release.md index 21c5b2564cfb..336953722fb2 100644 --- a/.github/ISSUE_TEMPLATE/openssl-release.md +++ b/.github/ISSUE_TEMPLATE/openssl-release.md @@ -1,12 +1,7 @@ -- [ ] Windows - - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/.github/workflows/build-openssl.yml#L36-L37) - - [ ] Wait for it to be merged - - [ ] Wait for the Github Actions job to complete -- [ ] macOS - - [ ] Send a pull request to `homebrew` upgrading the `openssl@1.1` formula - - [ ] Wait for it to be merged -- [ ] manylinux - - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux/install_openssl.sh#L5-L6) for `manylinux` +- [ ] Windows, macOS, `manylinux` + - [ ] Send a pull request to `pyca/infra` updating the [version and hash](https://github.com/pyca/infra/blob/master/cryptography-manylinux/openssl-version.sh) - [ ] Wait for it to be merged - [ ] Wait for the Github Actions job to complete - [ ] Changelog entry +- [ ] Release +- [ ] Forward port changelog entry (if releasing from release branch) \ No newline at end of file diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index d5a49a3ce9ab..a1446cfb6379 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -17,7 +17,7 @@ def get_response(url, token): def main(platform, target): if platform == "windows": - workflow = "build-openssl.yml" + workflow = "build-windows-openssl.yml" path = "C:/" elif platform == "macos": workflow = "build-macos-openssl.yml" From e978ba79dc384517c1576ffc5abd55498d1485b1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 Apr 2020 17:48:57 -0400 Subject: [PATCH 810/988] Removed non-x86 builds from CI -- they're quite simply too slow (#5230) --- .travis.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6127745a71a4..741269f66ccb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,20 +60,6 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 - # Non-x86_64 builds - cache disabled because it's broken ATM - - python: 3.8 - env: TOXENV=py38 PIP_NO_CACHE_DIR=off - arch: arm64 - - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1g PIP_NO_CACHE_DIR=off - arch: arm64 - - python: 3.8 - env: TOXENV=py38 PIP_NO_CACHE_DIR=off - arch: ppc64le - - python: 3.8 - env: TOXENV=py38 PIP_NO_CACHE_DIR=off - arch: s390x - - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7 From 33faef3bb0574878a20489c2a374d09e82508093 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 Apr 2020 19:31:32 -0400 Subject: [PATCH 811/988] Make codecov upload errors in GHA pass silently (#5232) The spurious failure rate on codecov uploads is high enough that this is a cure worse than the disease --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d49ee7192eb3..ca1e36d3b461 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,7 +48,7 @@ jobs: - name: Upload coverage run: | curl -o codecov.sh -f https://codecov.io/bash - bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on macOS" -Z + bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on macOS" windows: runs-on: windows-latest @@ -96,4 +96,4 @@ jobs: - name: Upload coverage run: | curl -o codecov.sh -f https://codecov.io/bash - bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" -Z + bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" From 31c33c1c54db8b5b2e1d55ae49c52ea2884c325e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 25 Apr 2020 19:12:07 -0500 Subject: [PATCH 812/988] remove four builds (#5229) --- .travis.yml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 741269f66ccb..ebfc818daf72 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,16 +21,8 @@ matrix: - python: 3.8 env: TOXENV=pep8 # Setting 'python' is just to make travis's UI a bit prettier - - python: 2.7 - env: TOXENV=py27 - - python: 3.5 - env: TOXENV=py35 - python: 3.6 env: TOXENV=py36 - - python: 3.7 - env: TOXENV=py37 - - python: 3.8 - env: TOXENV=py38 - python: 3.8 env: TOXENV=py38-idna - python: pypy2.7-7.1.1 @@ -84,9 +76,9 @@ matrix: - python: 3.8 services: docker env: TOXENV=py38 DOCKER=pyca/cryptography-runner-ubuntu-rolling - - python: 2.7 + - python: 3.8 services: docker - env: TOXENV=py27-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling + env: TOXENV=py38-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling - python: 3.7 services: docker env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora From b87a238dc10f46daddd8616efd8a9b0237a858c6 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 Apr 2020 22:18:36 -0400 Subject: [PATCH 813/988] retry when downloading codecov.sh (#5233) --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ca1e36d3b461..c4bb335c0ae7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,7 +47,7 @@ jobs: - name: Upload coverage run: | - curl -o codecov.sh -f https://codecov.io/bash + curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on macOS" windows: @@ -95,5 +95,5 @@ jobs: - name: Upload coverage run: | - curl -o codecov.sh -f https://codecov.io/bash + curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash bash codecov.sh -n "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" From 01eb304b082b4ae5769eb0b2e1184dbca010961a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 25 Apr 2020 23:42:20 -0400 Subject: [PATCH 814/988] Dropped support for LibreSSL 2.7, 2.8, and 2.9.0 (2.9.1+ are still supported) (#5231) --- .travis.yml | 4 ---- CHANGELOG.rst | 2 ++ src/_cffi_src/openssl/cryptography.py | 12 ------------ src/_cffi_src/openssl/ssl.py | 10 ---------- .../hazmat/bindings/openssl/_conditional.py | 15 --------------- .../hazmat/primitives/ciphers/aead.py | 6 ------ tests/hazmat/primitives/test_aead.py | 14 -------------- tests/wycheproof/test_rsa.py | 12 +----------- 8 files changed, 3 insertions(+), 72 deletions(-) diff --git a/.travis.yml b/.travis.yml index ebfc818daf72..e8dff4c3438f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,10 +43,6 @@ matrix: env: TOXENV=py38 OPENSSL=1.1.1g - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2" - - python: 3.8 - env: TOXENV=py38 LIBRESSL=2.7.5 - - python: 3.8 - env: TOXENV=py38 LIBRESSL=2.8.3 - python: 3.8 env: TOXENV=py38 LIBRESSL=2.9.2 - python: 3.8 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6da06409af6c..7dc2b99284f8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,8 @@ Changelog :class:`~cryptography.x509.Extension` instance to :meth:`~cryptography.x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier`, as per our deprecation policy. +* **BACKWARDS INCOMPATIBLE:** Support for LibreSSL 2.7.x, 2.8.x, and 2.9.0 has + been removed (2.9.1+ is still supported). .. _v2-9-2: diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 0da882c6395e..cd583313b431 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -33,16 +33,6 @@ #include #endif -#if CRYPTOGRAPHY_IS_LIBRESSL -#define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER \ - (LIBRESSL_VERSION_NUMBER >= 0x2080000f) -#define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER \ - (LIBRESSL_VERSION_NUMBER >= 0x2090100f) -#else -#define CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER (0) -#define CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER (0) -#endif - #define CRYPTOGRAPHY_OPENSSL_102L_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x100020cf && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110_OR_GREATER \ @@ -72,8 +62,6 @@ static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B; static const int CRYPTOGRAPHY_IS_LIBRESSL; - -static const int CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER; """ FUNCTIONS = """ diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index c803ae7a2420..4ba8669307ea 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -26,7 +26,6 @@ static const long Cryptography_HAS_SSL_CTX_SET_CLIENT_CERT_ENGINE; static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS; static const long Cryptography_HAS_DTLS; -static const long Cryptography_HAS_GENERIC_DTLS_METHOD; static const long Cryptography_HAS_SIGALGS; static const long Cryptography_HAS_PSK; static const long Cryptography_HAS_CIPHER_DETAILS; @@ -710,15 +709,6 @@ static const long TLS_ST_OK = 0; #endif -/* LibreSSL 2.9.1 added only the DTLS_*_method functions */ -#if CRYPTOGRAPHY_IS_LIBRESSL && !CRYPTOGRAPHY_LIBRESSL_291_OR_GREATER -static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 0; -const SSL_METHOD *(*DTLS_method)(void) = NULL; -const SSL_METHOD *(*DTLS_server_method)(void) = NULL; -const SSL_METHOD *(*DTLS_client_method)(void) = NULL; -#else -static const long Cryptography_HAS_GENERIC_DTLS_METHOD = 1; -#endif #if CRYPTOGRAPHY_IS_LIBRESSL static const long SSL_OP_NO_DTLSv1 = 0; static const long SSL_OP_NO_DTLSv1_2 = 0; diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index b089f65b9800..3bc879c43c0e 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -102,18 +102,6 @@ def cryptography_has_scrypt(): ] -def cryptography_has_generic_dtls_method(): - return [ - "DTLS_method", - "DTLS_server_method", - "DTLS_client_method", - "SSL_OP_NO_DTLSv1", - "SSL_OP_NO_DTLSv1_2", - "DTLS_set_link_mtu", - "DTLS_get_link_min_mtu", - ] - - def cryptography_has_evp_pkey_dhx(): return [ "EVP_PKEY_DHX", @@ -336,9 +324,6 @@ def cryptography_has_verified_chain(): "Cryptography_HAS_TLS_ST": cryptography_has_tls_st, "Cryptography_HAS_LOCKING_CALLBACKS": cryptography_has_locking_callbacks, "Cryptography_HAS_SCRYPT": cryptography_has_scrypt, - "Cryptography_HAS_GENERIC_DTLS_METHOD": ( - cryptography_has_generic_dtls_method - ), "Cryptography_HAS_EVP_PKEY_DHX": cryptography_has_evp_pkey_dhx, "Cryptography_HAS_MEM_FUNCTIONS": cryptography_has_mem_functions, "Cryptography_HAS_SCT": cryptography_has_sct, diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index a20a80f36ff4..72cb30c390cf 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -80,12 +80,6 @@ def __init__(self, key, tag_length=16): self._tag_length = tag_length - if not backend.aead_cipher_supported(self): - raise exceptions.UnsupportedAlgorithm( - "AESCCM is not supported by this version of OpenSSL", - exceptions._Reasons.UNSUPPORTED_CIPHER - ) - @classmethod def generate_key(cls, bit_length): if not isinstance(bit_length, int): diff --git a/tests/hazmat/primitives/test_aead.py b/tests/hazmat/primitives/test_aead.py index e1a17a974461..4f6bc7f4e81d 100644 --- a/tests/hazmat/primitives/test_aead.py +++ b/tests/hazmat/primitives/test_aead.py @@ -183,20 +183,6 @@ def test_buffer_protocol(self, backend): assert computed_pt2 == pt -@pytest.mark.skipif( - _aead_supported(AESCCM), - reason="Requires OpenSSL without AES-CCM support" -) -@pytest.mark.requires_backend_interface(interface=CipherBackend) -def test_aesccm_unsupported_on_older_openssl(backend): - with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_CIPHER): - AESCCM(AESCCM.generate_key(128)) - - -@pytest.mark.skipif( - not _aead_supported(AESCCM), - reason="Does not support AESCCM" -) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESCCM(object): def test_data_too_large(self): diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 12f2901b6e04..8a971d98579e 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -38,7 +38,7 @@ def should_verify(backend, wycheproof): if ( ( backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER or - backend._lib.CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER + backend._lib.CRYPTOGRAPHY_IS_LIBRESSL ) and wycheproof.has_flag("MissingNull") ): return False @@ -48,16 +48,6 @@ def should_verify(backend, wycheproof): @pytest.mark.requires_backend_interface(interface=RSABackend) -@pytest.mark.supported( - only_if=lambda backend: ( - not backend._lib.CRYPTOGRAPHY_IS_LIBRESSL or - backend._lib.CRYPTOGRAPHY_LIBRESSL_28_OR_GREATER - ), - skip_message=( - "Many of these tests fail on OpenSSL < 1.0.2 and since upstream isn't" - " maintaining it, they'll never be fixed." - ), -) @pytest.mark.wycheproof_tests( "rsa_signature_test.json", "rsa_signature_2048_sha224_test.json", From 33460885b92eb68753489af96f49315ae0bea7fc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Apr 2020 09:11:35 -0400 Subject: [PATCH 815/988] Test against LibreSSL 3.1.0 (#5235) --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index e8dff4c3438f..be99d473c9bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,6 +47,8 @@ matrix: env: TOXENV=py38 LIBRESSL=2.9.2 - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 + - python: 3.8 + env: TOXENV=py38 LIBRESSL=3.1.0 - python: 2.7 services: docker From 8aa8665eaa0691acb84df627f86296e6e225773d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Apr 2020 11:04:39 -0400 Subject: [PATCH 816/988] Perform retries when downloading OpenSSL in GHA (#5236) --- .github/workflows/download_openssl.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index a1446cfb6379..c7dbe9270cbc 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -5,9 +5,11 @@ import requests +from urllib3.util.retry import Retry -def get_response(url, token): - response = requests.get(url, headers={"Authorization": "token " + token}) + +def get_response(session, url, token): + response = session.get(url, headers={"Authorization": "token " + token}) if response.status_code != 200: raise ValueError("Got HTTP {} fetching {}: ".format( response.status_code, url, response.content @@ -25,6 +27,13 @@ def main(platform, target): else: raise ValueError("Invalid platform") + session = requests.Session() + adapter = requests.adapters.HTTPAdapter( + max_retries=Retry() + ) + session.mount("https://", adapter) + session.mount("http://", adapter) + token = os.environ["GITHUB_TOKEN"] print("Looking for: {}".format(target)) runs_url = ( @@ -32,14 +41,14 @@ def main(platform, target): "{}/runs?branch=master&status=success".format(workflow) ) - response = get_response(runs_url, token).json() + response = get_response(session, runs_url, token).json() artifacts_url = response["workflow_runs"][0]["artifacts_url"] - response = get_response(artifacts_url, token).json() + response = get_response(session, artifacts_url, token).json() for artifact in response["artifacts"]: if artifact["name"] == target: print("Found artifact") response = get_response( - artifact["archive_download_url"], token + session, artifact["archive_download_url"], token ) zipfile.ZipFile(io.BytesIO(response.content)).extractall( os.path.join(path, artifact["name"]) From 069691a27b98bbca13faa843a1408d631b691bea Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Apr 2020 11:44:49 -0400 Subject: [PATCH 817/988] Added wycheproof RSA PKCSv1 encryption tests (#5234) --- src/_cffi_src/openssl/err.py | 1 + .../hazmat/backends/openssl/rsa.py | 1 + tests/wycheproof/test_rsa.py | 36 +++++++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index d4033f5a48e8..ecdc6e3dea39 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -100,6 +100,7 @@ static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR; +static const int RSA_R_BAD_PAD_BYTE_COUNT; static const int RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE; static const int RSA_R_DATA_TOO_LARGE_FOR_MODULUS; static const int RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY; diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 458071ca54db..bd4a1bea4b55 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -136,6 +136,7 @@ def _handle_rsa_enc_dec_error(backend, key): ) else: decoding_errors = [ + backend._lib.RSA_R_BAD_PAD_BYTE_COUNT, backend._lib.RSA_R_BLOCK_TYPE_IS_NOT_01, backend._lib.RSA_R_BLOCK_TYPE_IS_NOT_02, backend._lib.RSA_R_OAEP_DECODING_ERROR, diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index 8a971d98579e..f17eff69bcb0 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -78,7 +78,9 @@ def test_rsa_pkcs1v15_signature(backend, wycheproof): digest = _DIGESTS[wycheproof.testgroup["sha"]] if digest is None or not backend.hash_supported(digest): - pytest.skip("Hash {} not supported".format(digest)) + pytest.skip( + "Hash {} not supported".format(wycheproof.testgroup["sha"]) + ) if should_verify(backend, wycheproof): key.verify( @@ -184,7 +186,11 @@ def test_rsa_oaep_encryption(backend, wycheproof): ) if not backend.rsa_padding_supported(padding_algo): - pytest.skip("Padding {} not supported".format(padding_algo)) + pytest.skip( + "OAEP with digest={} and MGF digest={} not supported".format( + wycheproof.testgroup["sha"], wycheproof.testgroup["mgfSha"], + ) + ) if wycheproof.valid or wycheproof.acceptable: pt = key.decrypt( @@ -198,3 +204,29 @@ def test_rsa_oaep_encryption(backend, wycheproof): binascii.unhexlify(wycheproof.testcase["ct"]), padding_algo ) + + +@pytest.mark.wycheproof_tests( + "rsa_pkcs1_2048_test.json", + "rsa_pkcs1_3072_test.json", + "rsa_pkcs1_4096_test.json", +) +def test_rsa_pkcs1_encryption(backend, wycheproof): + key = serialization.load_pem_private_key( + wycheproof.testgroup["privateKeyPem"].encode("ascii"), + password=None, + backend=backend, + ) + + if wycheproof.valid: + pt = key.decrypt( + binascii.unhexlify(wycheproof.testcase["ct"]), + padding.PKCS1v15() + ) + assert pt == binascii.unhexlify(wycheproof.testcase["msg"]) + else: + with pytest.raises(ValueError): + key.decrypt( + binascii.unhexlify(wycheproof.testcase["ct"]), + padding.PKCS1v15() + ) From 263bad82edd237ec32863068f4a76e24c083a61d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Apr 2020 13:36:11 -0400 Subject: [PATCH 818/988] Refs #5075 -- added the remainder of the wycheproof rsa tests (#5237) --- tests/wycheproof/test_rsa.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index f17eff69bcb0..a7c26e6aae47 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -99,11 +99,32 @@ def test_rsa_pkcs1v15_signature(backend, wycheproof): ) +@pytest.mark.wycheproof_tests( + "rsa_sig_gen_misc_test.json" +) +def test_rsa_pkcs1v15_signature_generation(backend, wycheproof): + key = serialization.load_pem_private_key( + wycheproof.testgroup["privateKeyPem"].encode(), + password=None, + backend=backend, + ) + digest = _DIGESTS[wycheproof.testgroup["sha"]] + + sig = key.sign( + binascii.unhexlify(wycheproof.testcase["msg"]), + padding.PKCS1v15(), + digest, + ) + assert sig == binascii.unhexlify(wycheproof.testcase["sig"]) + + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.wycheproof_tests( "rsa_pss_2048_sha1_mgf1_20_test.json", "rsa_pss_2048_sha256_mgf1_0_test.json", "rsa_pss_2048_sha256_mgf1_32_test.json", + "rsa_pss_2048_sha512_256_mgf1_28_test.json", + "rsa_pss_2048_sha512_256_mgf1_32_test.json", "rsa_pss_3072_sha256_mgf1_32_test.json", "rsa_pss_4096_sha256_mgf1_32_test.json", "rsa_pss_4096_sha512_mgf1_32_test.json", @@ -116,6 +137,13 @@ def test_rsa_pss_signature(backend, wycheproof): digest = _DIGESTS[wycheproof.testgroup["sha"]] mgf_digest = _DIGESTS[wycheproof.testgroup["mgfSha"]] + if digest is None or mgf_digest is None: + pytest.skip( + "PSS with digest={} and MGF digest={} not supported".format( + wycheproof.testgroup["sha"], wycheproof.testgroup["mgfSha"], + ) + ) + if wycheproof.valid or wycheproof.acceptable: key.verify( binascii.unhexlify(wycheproof.testcase["sig"]), From 12e85b59165da0c05270e8db84941b18291220db Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Apr 2020 16:53:58 -0400 Subject: [PATCH 819/988] Added wycheproof hmac vectors (#5238) --- docs/development/test-vectors.rst | 2 +- tests/wycheproof/test_hmac.py | 66 +++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 tests/wycheproof/test_hmac.py diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 217237ab16a8..95e608b2e6ce 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -23,7 +23,7 @@ for various cryptographic algorithms. These are not included in the repository continuous integration environments. We have ensured all test vectors are used as of commit -``c313761979d74b0417230eddd0f87d0cfab2b46b``. +``2196000605e45d91097147c9c71f26b72af58003``. Asymmetric ciphers ~~~~~~~~~~~~~~~~~~ diff --git a/tests/wycheproof/test_hmac.py b/tests/wycheproof/test_hmac.py new file mode 100644 index 000000000000..0cf908fe90c1 --- /dev/null +++ b/tests/wycheproof/test_hmac.py @@ -0,0 +1,66 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii + +import pytest + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.primitives import hashes, hmac + + +_HMAC_ALGORITHMS = { + "HMACSHA1": hashes.SHA1(), + "HMACSHA224": hashes.SHA224(), + "HMACSHA256": hashes.SHA256(), + "HMACSHA384": hashes.SHA384(), + "HMACSHA512": hashes.SHA512(), + "HMACSHA3-224": hashes.SHA3_224(), + "HMACSHA3-256": hashes.SHA3_256(), + "HMACSHA3-384": hashes.SHA3_384(), + "HMACSHA3-512": hashes.SHA3_512(), +} + + +@pytest.mark.wycheproof_tests( + "hmac_sha1_test.json", + "hmac_sha224_test.json", + "hmac_sha256_test.json", + "hmac_sha384_test.json", + "hmac_sha3_224_test.json", + "hmac_sha3_256_test.json", + "hmac_sha3_384_test.json", + "hmac_sha3_512_test.json", + "hmac_sha512_test.json", +) +def test_hmac(backend, wycheproof): + hash_algo = _HMAC_ALGORITHMS[wycheproof.testfiledata["algorithm"]] + if wycheproof.testgroup["tagSize"] // 8 != hash_algo.digest_size: + pytest.skip("Truncated HMAC not supported") + if not backend.hash_supported(hash_algo): + pytest.skip("Hash {} not supported".format(hash_algo.name)) + + h = hmac.HMAC( + key=binascii.unhexlify(wycheproof.testcase["key"]), + algorithm=hash_algo, + backend=backend, + ) + h.update(binascii.unhexlify(wycheproof.testcase["msg"])) + + if wycheproof.invalid: + with pytest.raises(InvalidSignature): + h.verify(binascii.unhexlify(wycheproof.testcase["tag"])) + else: + tag = h.finalize() + assert tag == binascii.unhexlify(wycheproof.testcase["tag"]) + + h = hmac.HMAC( + key=binascii.unhexlify(wycheproof.testcase["key"]), + algorithm=hash_algo, + backend=backend, + ) + h.update(binascii.unhexlify(wycheproof.testcase["msg"])) + h.verify(binascii.unhexlify(wycheproof.testcase["tag"])) From 7dcd284c6e586aa0658016902be7eb612dacb7cb Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 26 Apr 2020 18:19:57 -0400 Subject: [PATCH 820/988] Remove dead constant time code (#5239) --- setup.py | 1 - src/_cffi_src/build_constant_time.py | 27 ------------------------ src/_cffi_src/hazmat_src/constant_time.c | 22 ------------------- src/_cffi_src/hazmat_src/constant_time.h | 6 ------ 4 files changed, 56 deletions(-) delete mode 100644 src/_cffi_src/build_constant_time.py delete mode 100644 src/_cffi_src/hazmat_src/constant_time.c delete mode 100644 src/_cffi_src/hazmat_src/constant_time.h diff --git a/setup.py b/setup.py index a5bbfa1eeaa8..e82464aa1252 100644 --- a/setup.py +++ b/setup.py @@ -148,7 +148,6 @@ def argument_without_setup_requirements(argv, i): else: cffi_modules = [ "src/_cffi_src/build_openssl.py:ffi", - "src/_cffi_src/build_constant_time.py:ffi", "src/_cffi_src/build_padding.py:ffi", ] diff --git a/src/_cffi_src/build_constant_time.py b/src/_cffi_src/build_constant_time.py deleted file mode 100644 index 7a11f7b581e5..000000000000 --- a/src/_cffi_src/build_constant_time.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -import os - -from _cffi_src.utils import build_ffi, compiler_type, extra_link_args - - -with open(os.path.join( - os.path.dirname(__file__), "hazmat_src/constant_time.h" -)) as f: - types = f.read() - -with open(os.path.join( - os.path.dirname(__file__), "hazmat_src/constant_time.c" -)) as f: - functions = f.read() - -ffi = build_ffi( - module_name="_constant_time", - cdef_source=types, - verify_source=functions, - extra_link_args=extra_link_args(compiler_type()), -) diff --git a/src/_cffi_src/hazmat_src/constant_time.c b/src/_cffi_src/hazmat_src/constant_time.c deleted file mode 100644 index 0a48fe83a462..000000000000 --- a/src/_cffi_src/hazmat_src/constant_time.c +++ /dev/null @@ -1,22 +0,0 @@ -// This file is dual licensed under the terms of the Apache License, Version -// 2.0, and the BSD License. See the LICENSE file in the root of this -// repository for complete details. - -uint8_t Cryptography_constant_time_bytes_eq(uint8_t *a, size_t len_a, - uint8_t *b, size_t len_b) { - size_t i = 0; - uint8_t mismatch = 0; - if (len_a != len_b) { - return 0; - } - for (i = 0; i < len_a; i++) { - mismatch |= a[i] ^ b[i]; - } - - /* Make sure any bits set are copied to the lowest bit */ - mismatch |= mismatch >> 4; - mismatch |= mismatch >> 2; - mismatch |= mismatch >> 1; - /* Now check the low bit to see if it's set */ - return (mismatch & 1) == 0; -} diff --git a/src/_cffi_src/hazmat_src/constant_time.h b/src/_cffi_src/hazmat_src/constant_time.h deleted file mode 100644 index 593479f66ca5..000000000000 --- a/src/_cffi_src/hazmat_src/constant_time.h +++ /dev/null @@ -1,6 +0,0 @@ -// This file is dual licensed under the terms of the Apache License, Version -// 2.0, and the BSD License. See the LICENSE file in the root of this -// repository for complete details. - -uint8_t Cryptography_constant_time_bytes_eq(uint8_t *, size_t, uint8_t *, - size_t); From e05795897c7b723e134da5085fd60fa710fb5081 Mon Sep 17 00:00:00 2001 From: Charles Y Date: Wed, 29 Apr 2020 15:41:56 -0400 Subject: [PATCH 821/988] Update symmetric-encryption.rst (#5240) mis-named parameter --- docs/hazmat/primitives/symmetric-encryption.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 9eacc5b4cdbd..46f0786d67ee 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -44,7 +44,7 @@ it fits your needs before implementing anything using this module.** >>> decryptor.update(ct) + decryptor.finalize() b'a secret message' - :param algorithms: A + :param algorithm: A :class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm` instance such as those described :ref:`below `. From 0726d01e7333e2c1497a211f21bb0339b4225306 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 6 May 2020 11:31:38 -0500 Subject: [PATCH 822/988] fedora now has python 3.8 (#5244) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index be99d473c9bc..3f0b1e17b4b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -77,9 +77,9 @@ matrix: - python: 3.8 services: docker env: TOXENV=py38-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling - - python: 3.7 + - python: 3.8 services: docker - env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora + env: TOXENV=py38 DOCKER=pyca/cryptography-runner-fedora - python: 3.8 services: docker env: TOXENV=py38 DOCKER=pyca/cryptography-runner-alpine:latest From e42c885d45c4ca09d1057ea42da7656fe134654e Mon Sep 17 00:00:00 2001 From: Nikolay Morozov <41895756+NMorozxov@users.noreply.github.com> Date: Fri, 8 May 2020 22:35:55 +0300 Subject: [PATCH 823/988] GOST certificates support in cryptography (#5195) --- src/cryptography/x509/oid.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index c1e5dc539ec3..284db54f980c 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -76,6 +76,9 @@ class NameOID(object): BUSINESS_CATEGORY = ObjectIdentifier("2.5.4.15") POSTAL_ADDRESS = ObjectIdentifier("2.5.4.16") POSTAL_CODE = ObjectIdentifier("2.5.4.17") + INN = ObjectIdentifier("1.2.643.3.131.1.1") + OGRN = ObjectIdentifier("1.2.643.100.1") + SNILS = ObjectIdentifier("1.2.643.100.3") class SignatureAlgorithmOID(object): @@ -98,6 +101,13 @@ class SignatureAlgorithmOID(object): DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2") ED25519 = ObjectIdentifier("1.3.101.112") ED448 = ObjectIdentifier("1.3.101.113") + GOSTR3411_94_WITH_3410_2001 = ObjectIdentifier("1.2.643.2.2.3") + GOSTR3410_2012_WITH_3411_2012_256 = ObjectIdentifier( + "1.2.643.7.1.1.3.2" + ) + GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier( + "1.2.643.7.1.1.3.3" + ) _SIG_OIDS_TO_HASH = { @@ -118,6 +128,9 @@ class SignatureAlgorithmOID(object): SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(), SignatureAlgorithmOID.ED25519: None, SignatureAlgorithmOID.ED448: None, + SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: None, + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: None, + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: None, } @@ -169,6 +182,9 @@ class CertificatePoliciesOID(object): NameOID.BUSINESS_CATEGORY: "businessCategory", NameOID.POSTAL_ADDRESS: "postalAddress", NameOID.POSTAL_CODE: "postalCode", + NameOID.INN: "INN", + NameOID.OGRN: "OGRN", + NameOID.SNILS: "SNILS", SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption", @@ -187,6 +203,15 @@ class CertificatePoliciesOID(object): SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256", SignatureAlgorithmOID.ED25519: "ed25519", SignatureAlgorithmOID.ED448: "ed448", + SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: ( + "GOST R 34.11-94 with GOST R 34.10-2001" + ), + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: ( + "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" + ), + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: ( + "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" + ), ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", From 0476431fa0bbc177362ebe4e6888230dd395e9f0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 12 May 2020 21:06:06 -0400 Subject: [PATCH 824/988] fixed new flake8 error (#5248) --- .github/workflows/download_openssl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index c7dbe9270cbc..559e68192b07 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -12,7 +12,7 @@ def get_response(session, url, token): response = session.get(url, headers={"Authorization": "token " + token}) if response.status_code != 200: raise ValueError("Got HTTP {} fetching {}: ".format( - response.status_code, url, response.content + response.status_code, url )) return response From cace5c40c7a58692b1c5cd8c40040123690af848 Mon Sep 17 00:00:00 2001 From: ohemorange Date: Tue, 12 May 2020 18:41:16 -0700 Subject: [PATCH 825/988] Install deps using josepy's constraints.txt file (#5247) --- .travis/downstream.d/certbot-josepy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/downstream.d/certbot-josepy.sh b/.travis/downstream.d/certbot-josepy.sh index 0acf9547390d..2253edc1e9a6 100755 --- a/.travis/downstream.d/certbot-josepy.sh +++ b/.travis/downstream.d/certbot-josepy.sh @@ -5,7 +5,7 @@ case "${1}" in git clone --depth=1 https://github.com/certbot/josepy cd josepy git rev-parse HEAD - pip install -e ".[tests]" + pip install -e ".[tests]" -c constraints.txt ;; run) cd josepy From 1fcd120c32114aa96f89e307255c7c07a87419f8 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 16 May 2020 22:13:45 -0400 Subject: [PATCH 826/988] Use codecov-bash on travis (#5252) --- .travis/install.sh | 2 +- .travis/upload_coverage.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis/install.sh b/.travis/install.sh index 377da1d6e34c..599eee0d2907 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -61,4 +61,4 @@ pip install virtualenv python -m virtualenv ~/.venv source ~/.venv/bin/activate # If we pin coverage it must be kept in sync with tox.ini and .github/workflows/ci.yml -pip install tox codecov coverage +pip install tox coverage diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index e29bc20f22e2..7be892e31f31 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -12,8 +12,10 @@ if [ -n "${TOXENV}" ]; then docs);; *) source ~/.venv/bin/activate - codecov --required --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER || \ - codecov --required --env TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER + curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash + + bash codecov.sh -Z -e TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER || \ + bash codecov.sh -Z -e TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER ;; esac fi From eceea9d912994dbd84bfc7b27031c1254e675e28 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 16 May 2020 22:58:30 -0400 Subject: [PATCH 827/988] Deprecate support for Python 2 (#5251) --- CHANGELOG.rst | 4 ++++ src/cryptography/__init__.py | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7dc2b99284f8..d1715df37dc5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,10 @@ Changelog as per our deprecation policy. * **BACKWARDS INCOMPATIBLE:** Support for LibreSSL 2.7.x, 2.8.x, and 2.9.0 has been removed (2.9.1+ is still supported). +* Deprecated support for Python 2. At the time there is no time table for + actually dropping support, however we strongly encourage all users to upgrade + their Python, as Python 2 no longer receives support from the Python core + team. .. _v2-9-2: diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index 6da0b3830d2b..bd2a8102f9a9 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -4,13 +4,25 @@ from __future__ import absolute_import, division, print_function +import sys +import warnings + from cryptography.__about__ import ( __author__, __copyright__, __email__, __license__, __summary__, __title__, __uri__, __version__ ) +from cryptography.utils import CryptographyDeprecationWarning __all__ = [ "__title__", "__summary__", "__uri__", "__version__", "__author__", "__email__", "__license__", "__copyright__", ] + +if sys.version_info[0] == 2: + warnings.warn( + "Python 2 is no longer supported by the Python core team. Support for " + "it is now deprecated in cryptography, and will be removed in a " + "future release.", + CryptographyDeprecationWarning + ) From 27f04412b5874374f00aab388c9a8c37d257f1ef Mon Sep 17 00:00:00 2001 From: Jakub Stasiak Date: Mon, 25 May 2020 20:13:35 +0200 Subject: [PATCH 828/988] Document that Fernet accepts text keys (#5255) Keys are passed to base64.urlsafe_b64decode for decoding and it accepts text as well as bytes. --- docs/fernet.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/fernet.rst b/docs/fernet.rst index 9b95621ef888..c01d18ca2baf 100644 --- a/docs/fernet.rst +++ b/docs/fernet.rst @@ -23,9 +23,10 @@ has support for implementing key rotation via :class:`MultiFernet`. >>> f.decrypt(token) b'my deep dark secret' - :param bytes key: A URL-safe base64-encoded 32-byte key. This **must** be - kept secret. Anyone with this key is able to create and - read messages. + :param key: A URL-safe base64-encoded 32-byte key. This **must** be + kept secret. Anyone with this key is able to create and + read messages. + :type key: bytes or str .. classmethod:: generate_key() From 9470f67a3086e4c003ab27ca6a2209dae9b1a9e6 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Mon, 25 May 2020 21:17:25 +0300 Subject: [PATCH 829/988] Cleanup serialize (#5149) * Additional tests for public/private_bytes They expose few places that raise TypeError and AssertionError! before, and ValueError later. * Cleanup of private_bytes() backend Also pass key itself down to backend. * Cleanup of public_bytes() backend * Test handling of unsupported key type --- .../hazmat/backends/openssl/backend.py | 200 +++++++++--------- .../hazmat/backends/openssl/dh.py | 1 + .../hazmat/backends/openssl/dsa.py | 8 +- .../hazmat/backends/openssl/ec.py | 5 +- .../hazmat/backends/openssl/ed25519.py | 19 +- .../hazmat/backends/openssl/ed448.py | 19 +- .../hazmat/backends/openssl/rsa.py | 1 + .../hazmat/backends/openssl/x25519.py | 19 +- .../hazmat/backends/openssl/x448.py | 19 +- .../primitives/serialization/__init__.py | 2 - tests/hazmat/primitives/test_serialization.py | 123 ++++++++++- 11 files changed, 223 insertions(+), 193 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 6fd191f09f62..e5b64e3ddbea 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1746,26 +1746,14 @@ def _ec_key_set_public_key_affine_coordinates(self, ctx, x, y): return ctx def _private_key_bytes(self, encoding, format, encryption_algorithm, - evp_pkey, cdata): + key, evp_pkey, cdata): + # validate argument types + if not isinstance(encoding, serialization.Encoding): + raise TypeError("encoding must be an item from the Encoding enum") if not isinstance(format, serialization.PrivateFormat): raise TypeError( "format must be an item from the PrivateFormat enum" ) - - # X9.62 encoding is only valid for EC public keys - if encoding is serialization.Encoding.X962: - raise ValueError("X9.62 format is only valid for EC public keys") - - # Raw format and encoding are only valid for X25519, Ed25519, X448, and - # Ed448 keys. We capture those cases before this method is called so if - # we see those enum values here it means the caller has passed them to - # a key that doesn't support raw type - if format is serialization.PrivateFormat.Raw: - raise ValueError("raw format is invalid with this key or encoding") - - if encoding is serialization.Encoding.Raw: - raise ValueError("raw encoding is invalid with this key or format") - if not isinstance(encryption_algorithm, serialization.KeySerializationEncryption): raise TypeError( @@ -1773,19 +1761,13 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, "instance" ) + # validate password if isinstance(encryption_algorithm, serialization.NoEncryption): password = b"" - passlen = 0 - evp_cipher = self._ffi.NULL elif isinstance(encryption_algorithm, serialization.BestAvailableEncryption): - # This is a curated value that we will update over time. - evp_cipher = self._lib.EVP_get_cipherbyname( - b"aes-256-cbc" - ) password = encryption_algorithm.password - passlen = len(password) - if passlen > 1023: + if len(password) > 1023: raise ValueError( "Passwords longer than 1023 bytes are not supported by " "this backend" @@ -1793,127 +1775,135 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, else: raise ValueError("Unsupported encryption type") - key_type = self._lib.EVP_PKEY_id(evp_pkey) - if encoding is serialization.Encoding.PEM: - if format is serialization.PrivateFormat.PKCS8: + # PKCS8 + PEM/DER + if format is serialization.PrivateFormat.PKCS8: + if encoding is serialization.Encoding.PEM: write_bio = self._lib.PEM_write_bio_PKCS8PrivateKey - key = evp_pkey + elif encoding is serialization.Encoding.DER: + write_bio = self._lib.i2d_PKCS8PrivateKey_bio else: - assert format is serialization.PrivateFormat.TraditionalOpenSSL + raise ValueError("Unsupported encoding for PKCS8") + return self._private_key_bytes_via_bio( + write_bio, evp_pkey, password + ) + + # TraditionalOpenSSL + PEM/DER + if format is serialization.PrivateFormat.TraditionalOpenSSL: + key_type = self._lib.EVP_PKEY_id(evp_pkey) + + if encoding is serialization.Encoding.PEM: if key_type == self._lib.EVP_PKEY_RSA: write_bio = self._lib.PEM_write_bio_RSAPrivateKey elif key_type == self._lib.EVP_PKEY_DSA: write_bio = self._lib.PEM_write_bio_DSAPrivateKey - else: - assert key_type == self._lib.EVP_PKEY_EC + elif key_type == self._lib.EVP_PKEY_EC: write_bio = self._lib.PEM_write_bio_ECPrivateKey + else: + raise ValueError( + "Unsupported key type for TraditionalOpenSSL" + ) + return self._private_key_bytes_via_bio( + write_bio, cdata, password + ) - key = cdata - elif encoding is serialization.Encoding.DER: - if format is serialization.PrivateFormat.TraditionalOpenSSL: - if not isinstance( - encryption_algorithm, serialization.NoEncryption - ): + if encoding is serialization.Encoding.DER: + if password: raise ValueError( "Encryption is not supported for DER encoded " "traditional OpenSSL keys" ) + if key_type == self._lib.EVP_PKEY_RSA: + write_bio = self._lib.i2d_RSAPrivateKey_bio + elif key_type == self._lib.EVP_PKEY_EC: + write_bio = self._lib.i2d_ECPrivateKey_bio + elif key_type == self._lib.EVP_PKEY_DSA: + write_bio = self._lib.i2d_DSAPrivateKey_bio + else: + raise ValueError( + "Unsupported key type for TraditionalOpenSSL" + ) + return self._bio_func_output(write_bio, cdata) - return self._private_key_bytes_traditional_der(key_type, cdata) - else: - assert format is serialization.PrivateFormat.PKCS8 - write_bio = self._lib.i2d_PKCS8PrivateKey_bio - key = evp_pkey + raise ValueError( + "Unsupported encoding for TraditionalOpenSSL" + ) + + # Anything that key-specific code was supposed to handle earlier, + # like Raw. + raise ValueError("format is invalid with this key") + + def _private_key_bytes_via_bio(self, write_bio, evp_pkey, password): + if not password: + evp_cipher = self._ffi.NULL else: - raise TypeError("encoding must be Encoding.PEM or Encoding.DER") + # This is a curated value that we will update over time. + evp_cipher = self._lib.EVP_get_cipherbyname(b"aes-256-cbc") - bio = self._create_mem_bio_gc() - res = write_bio( - bio, - key, + return self._bio_func_output( + write_bio, + evp_pkey, evp_cipher, password, - passlen, + len(password), self._ffi.NULL, self._ffi.NULL ) - self.openssl_assert(res == 1) - return self._read_mem_bio(bio) - - def _private_key_bytes_traditional_der(self, key_type, cdata): - if key_type == self._lib.EVP_PKEY_RSA: - write_bio = self._lib.i2d_RSAPrivateKey_bio - elif key_type == self._lib.EVP_PKEY_EC: - write_bio = self._lib.i2d_ECPrivateKey_bio - else: - self.openssl_assert(key_type == self._lib.EVP_PKEY_DSA) - write_bio = self._lib.i2d_DSAPrivateKey_bio + def _bio_func_output(self, write_bio, *args): bio = self._create_mem_bio_gc() - res = write_bio(bio, cdata) + res = write_bio(bio, *args) self.openssl_assert(res == 1) return self._read_mem_bio(bio) def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): if not isinstance(encoding, serialization.Encoding): raise TypeError("encoding must be an item from the Encoding enum") + if not isinstance(format, serialization.PublicFormat): + raise TypeError( + "format must be an item from the PublicFormat enum" + ) - # Compressed/UncompressedPoint are only valid for EC keys and those - # cases are handled by the ECPublicKey public_bytes method before this - # method is called - if format in (serialization.PublicFormat.UncompressedPoint, - serialization.PublicFormat.CompressedPoint): - raise ValueError("Point formats are not valid for this key type") - - # Raw format and encoding are only valid for X25519, Ed25519, X448, and - # Ed448 keys. We capture those cases before this method is called so if - # we see those enum values here it means the caller has passed them to - # a key that doesn't support raw type - if format is serialization.PublicFormat.Raw: - raise ValueError("raw format is invalid with this key or encoding") - - if encoding is serialization.Encoding.Raw: - raise ValueError("raw encoding is invalid with this key or format") - - if ( - format is serialization.PublicFormat.OpenSSH or - encoding is serialization.Encoding.OpenSSH - ): - if ( - format is not serialization.PublicFormat.OpenSSH or - encoding is not serialization.Encoding.OpenSSH - ): - raise ValueError( - "OpenSSH format must be used with OpenSSH encoding" - ) - return self._openssh_public_key_bytes(key) - elif format is serialization.PublicFormat.SubjectPublicKeyInfo: + # SubjectPublicKeyInfo + PEM/DER + if format is serialization.PublicFormat.SubjectPublicKeyInfo: if encoding is serialization.Encoding.PEM: write_bio = self._lib.PEM_write_bio_PUBKEY - else: - assert encoding is serialization.Encoding.DER + elif encoding is serialization.Encoding.DER: write_bio = self._lib.i2d_PUBKEY_bio + else: + raise ValueError( + "SubjectPublicKeyInfo works only with PEM or DER encoding" + ) + return self._bio_func_output(write_bio, evp_pkey) - key = evp_pkey - elif format is serialization.PublicFormat.PKCS1: + # PKCS1 + PEM/DER + if format is serialization.PublicFormat.PKCS1: # Only RSA is supported here. - assert self._lib.EVP_PKEY_id(evp_pkey) == self._lib.EVP_PKEY_RSA + key_type = self._lib.EVP_PKEY_id(evp_pkey) + if key_type != self._lib.EVP_PKEY_RSA: + raise ValueError("PKCS1 format is supported only for RSA keys") + if encoding is serialization.Encoding.PEM: write_bio = self._lib.PEM_write_bio_RSAPublicKey - else: - assert encoding is serialization.Encoding.DER + elif encoding is serialization.Encoding.DER: write_bio = self._lib.i2d_RSAPublicKey_bio + else: + raise ValueError( + "PKCS1 works only with PEM or DER encoding" + ) + return self._bio_func_output(write_bio, cdata) - key = cdata - else: - raise TypeError( - "format must be an item from the PublicFormat enum" + # OpenSSH + OpenSSH + if format is serialization.PublicFormat.OpenSSH: + if encoding is serialization.Encoding.OpenSSH: + return self._openssh_public_key_bytes(key) + + raise ValueError( + "OpenSSH format must be used with OpenSSH encoding" ) - bio = self._create_mem_bio_gc() - res = write_bio(bio, key) - self.openssl_assert(res == 1) - return self._read_mem_bio(bio) + # Anything that key-specific code was supposed to handle earlier, + # like Raw, CompressedPoint, UncompressedPoint + raise ValueError("format is invalid with this key") def _openssh_public_key_bytes(self, key): if isinstance(key, rsa.RSAPublicKey): diff --git a/src/cryptography/hazmat/backends/openssl/dh.py b/src/cryptography/hazmat/backends/openssl/dh.py index 961f17690339..1d5065c26bec 100644 --- a/src/cryptography/hazmat/backends/openssl/dh.py +++ b/src/cryptography/hazmat/backends/openssl/dh.py @@ -209,6 +209,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encoding, format, encryption_algorithm, + self, self._evp_pkey, self._dh_cdata ) diff --git a/src/cryptography/hazmat/backends/openssl/dsa.py b/src/cryptography/hazmat/backends/openssl/dsa.py index de61f08949ba..79142bf6fa68 100644 --- a/src/cryptography/hazmat/backends/openssl/dsa.py +++ b/src/cryptography/hazmat/backends/openssl/dsa.py @@ -10,7 +10,7 @@ _calculate_digest_and_algorithm, _check_not_prehashed, _warn_sign_verify_deprecated ) -from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ( AsymmetricSignatureContext, AsymmetricVerificationContext, dsa ) @@ -183,6 +183,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encoding, format, encryption_algorithm, + self, self._evp_pkey, self._dsa_cdata ) @@ -248,11 +249,6 @@ def parameters(self): return _DSAParameters(self._backend, dsa_cdata) def public_bytes(self, encoding, format): - if format is serialization.PublicFormat.PKCS1: - raise ValueError( - "DSA public keys do not support PKCS1 serialization" - ) - return self._backend._public_key_bytes( encoding, format, diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index 3d8681b43e72..e70a3410548a 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -225,6 +225,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encoding, format, encryption_algorithm, + self, self._evp_pkey, self._ec_key ) @@ -312,10 +313,6 @@ def _encode_point(self, format): return self._backend._ffi.buffer(buf)[:] def public_bytes(self, encoding, format): - if format is serialization.PublicFormat.PKCS1: - raise ValueError( - "EC public keys do not support PKCS1 serialization" - ) if ( encoding is serialization.Encoding.X962 or diff --git a/src/cryptography/hazmat/backends/openssl/ed25519.py b/src/cryptography/hazmat/backends/openssl/ed25519.py index f38f11d1b052..1632ec371eaa 100644 --- a/src/cryptography/hazmat/backends/openssl/ed25519.py +++ b/src/cryptography/hazmat/backends/openssl/ed25519.py @@ -32,15 +32,6 @@ def public_bytes(self, encoding, format): return self._raw_public_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PublicFormat.SubjectPublicKeyInfo - ): - raise ValueError( - "format must be SubjectPublicKeyInfo when encoding is PEM or " - "DER" - ) - return self._backend._public_key_bytes( encoding, format, self, self._evp_pkey, None ) @@ -128,16 +119,8 @@ def private_bytes(self, encoding, format, encryption_algorithm): return self._raw_private_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PrivateFormat.PKCS8 - ): - raise ValueError( - "format must be PKCS8 when encoding is PEM or DER" - ) - return self._backend._private_key_bytes( - encoding, format, encryption_algorithm, self._evp_pkey, None + encoding, format, encryption_algorithm, self, self._evp_pkey, None ) def _raw_private_bytes(self): diff --git a/src/cryptography/hazmat/backends/openssl/ed448.py b/src/cryptography/hazmat/backends/openssl/ed448.py index f541f05d231b..4845a1f2d2b8 100644 --- a/src/cryptography/hazmat/backends/openssl/ed448.py +++ b/src/cryptography/hazmat/backends/openssl/ed448.py @@ -35,15 +35,6 @@ def public_bytes(self, encoding, format): return self._raw_public_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PublicFormat.SubjectPublicKeyInfo - ): - raise ValueError( - "format must be SubjectPublicKeyInfo when encoding is PEM or " - "DER" - ) - return self._backend._public_key_bytes( encoding, format, self, self._evp_pkey, None ) @@ -131,16 +122,8 @@ def private_bytes(self, encoding, format, encryption_algorithm): return self._raw_private_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PrivateFormat.PKCS8 - ): - raise ValueError( - "format must be PKCS8 when encoding is PEM or DER" - ) - return self._backend._private_key_bytes( - encoding, format, encryption_algorithm, self._evp_pkey, None + encoding, format, encryption_algorithm, self, self._evp_pkey, None ) def _raw_private_bytes(self): diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index bd4a1bea4b55..a9e07b52fb97 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -406,6 +406,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encoding, format, encryption_algorithm, + self, self._evp_pkey, self._rsa_cdata ) diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 8708834e8880..665acf2fffc8 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -36,15 +36,6 @@ def public_bytes(self, encoding, format): return self._raw_public_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PublicFormat.SubjectPublicKeyInfo - ): - raise ValueError( - "format must be SubjectPublicKeyInfo when encoding is PEM or " - "DER" - ) - return self._backend._public_key_bytes( encoding, format, self, self._evp_pkey, None ) @@ -106,16 +97,8 @@ def private_bytes(self, encoding, format, encryption_algorithm): return self._raw_private_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PrivateFormat.PKCS8 - ): - raise ValueError( - "format must be PKCS8 when encoding is PEM or DER" - ) - return self._backend._private_key_bytes( - encoding, format, encryption_algorithm, self._evp_pkey, None + encoding, format, encryption_algorithm, self, self._evp_pkey, None ) def _raw_private_bytes(self): diff --git a/src/cryptography/hazmat/backends/openssl/x448.py b/src/cryptography/hazmat/backends/openssl/x448.py index fe0dcd9cfeb5..3de35b433493 100644 --- a/src/cryptography/hazmat/backends/openssl/x448.py +++ b/src/cryptography/hazmat/backends/openssl/x448.py @@ -35,15 +35,6 @@ def public_bytes(self, encoding, format): return self._raw_public_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PublicFormat.SubjectPublicKeyInfo - ): - raise ValueError( - "format must be SubjectPublicKeyInfo when encoding is PEM or " - "DER" - ) - return self._backend._public_key_bytes( encoding, format, self, self._evp_pkey, None ) @@ -100,16 +91,8 @@ def private_bytes(self, encoding, format, encryption_algorithm): return self._raw_private_bytes() - if ( - encoding in serialization._PEM_DER and - format is not serialization.PrivateFormat.PKCS8 - ): - raise ValueError( - "format must be PKCS8 when encoding is PEM or DER" - ) - return self._backend._private_key_bytes( - encoding, format, encryption_algorithm, self._evp_pkey, None + encoding, format, encryption_algorithm, self, self._evp_pkey, None ) def _raw_private_bytes(self): diff --git a/src/cryptography/hazmat/primitives/serialization/__init__.py b/src/cryptography/hazmat/primitives/serialization/__init__.py index f6d4ce9942fb..b910751b0422 100644 --- a/src/cryptography/hazmat/primitives/serialization/__init__.py +++ b/src/cryptography/hazmat/primitives/serialization/__init__.py @@ -15,8 +15,6 @@ ) -_PEM_DER = (Encoding.PEM, Encoding.DER) - __all__ = [ "load_der_parameters", "load_der_private_key", "load_der_public_key", "load_pem_parameters", "load_pem_private_key", "load_pem_public_key", diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 6c86927a9a8d..8e8e15af2c24 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -17,7 +17,7 @@ PEMSerializationBackend, RSABackend ) from cryptography.hazmat.primitives.asymmetric import ( - dsa, ec, ed25519, ed448, rsa + dsa, ec, ed25519, ed448, rsa, x25519, x448 ) from cryptography.hazmat.primitives.serialization import ( BestAvailableEncryption, Encoding, NoEncryption, @@ -574,6 +574,24 @@ def test_unused_password(self, key_path, backend): ) ) + def test_invalid_encoding_with_traditional(self, backend): + key_file = os.path.join( + "asymmetric", "Traditional_OpenSSL_Serialization", "testrsa.pem" + ) + key = load_vectors_from_file( + key_file, + lambda pemfile: load_pem_private_key( + pemfile.read(), None, backend + ), + mode="rb" + ) + + for enc in (Encoding.OpenSSH, Encoding.Raw, Encoding.X962): + with pytest.raises(ValueError): + key.private_bytes( + enc, PrivateFormat.TraditionalOpenSSL, NoEncryption() + ) + @pytest.mark.parametrize( "key_path", [ @@ -1396,6 +1414,17 @@ def test_load_public_key(self, key_path, encoding, loader, backend): encoding, PublicFormat.SubjectPublicKeyInfo ) == data + def test_openssl_serialization_unsupported(self, backend): + key = ed25519.Ed25519PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + @pytest.mark.supported( only_if=lambda backend: backend.x448_supported(), @@ -1460,6 +1489,17 @@ def test_load_public_key(self, key_path, encoding, loader, backend): encoding, PublicFormat.SubjectPublicKeyInfo ) == data + def test_openssl_serialization_unsupported(self, backend): + key = x448.X448PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + @pytest.mark.supported( only_if=lambda backend: backend.x25519_supported(), @@ -1524,6 +1564,17 @@ def test_load_public_key(self, key_path, encoding, loader, backend): encoding, PublicFormat.SubjectPublicKeyInfo ) == data + def test_openssl_serialization_unsupported(self, backend): + key = x25519.X25519PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), @@ -1588,9 +1639,73 @@ def test_load_public_key(self, key_path, encoding, loader, backend): encoding, PublicFormat.SubjectPublicKeyInfo ) == data + def test_openssl_serialization_unsupported(self, backend): + key = ed448.Ed448PrivateKey.generate() + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + ) + def test_openssh_serialization_unsupported(self, backend): - key = ed448.Ed448PrivateKey.generate().public_key() + key = ed448.Ed448PrivateKey.generate() with pytest.raises(ValueError): - key.public_bytes( - Encoding.OpenSSH, PublicFormat.OpenSSH + key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH, ) + + +class TestDHSerialization(object): + """Test all options with least-supported key type. + """ + def test_dh_public_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "DH", "dhkey.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + public_key = load_pem_private_key(data, None, backend).public_key() + for enc in ( + Encoding.PEM, Encoding.DER, Encoding.OpenSSH, + Encoding.Raw, Encoding.X962 + ): + for fmt in ( + PublicFormat.SubjectPublicKeyInfo, PublicFormat.PKCS1, + PublicFormat.OpenSSH, PublicFormat.Raw, + PublicFormat.CompressedPoint, PublicFormat.UncompressedPoint, + ): + if ( + enc in (Encoding.PEM, Encoding.DER) and + fmt == PublicFormat.SubjectPublicKeyInfo + ): + # tested elsewhere + continue + with pytest.raises(ValueError): + public_key.public_bytes(enc, fmt) + + def test_dh_private_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "DH", "dhkey.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + private_key = load_pem_private_key(data, None, backend) + for enc in ( + Encoding.PEM, Encoding.DER, Encoding.OpenSSH, + Encoding.Raw, Encoding.X962 + ): + for fmt in ( + PrivateFormat.PKCS8, PrivateFormat.TraditionalOpenSSL, + PrivateFormat.Raw + ): + if ( + enc in (Encoding.PEM, Encoding.DER) and + fmt is PrivateFormat.PKCS8 + ): + # tested elsewhere + continue + with pytest.raises(ValueError): + private_key.private_bytes(enc, fmt, NoEncryption()) From bf175454a85177dc48933d59f64820e580a711ac Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Mon, 25 May 2020 21:24:17 +0300 Subject: [PATCH 830/988] Test vectors for OpenSSH serialization format (#5151) --- docs/development/test-vectors.rst | 35 +++++++++++ .../asymmetric/OpenSSH/dsa-nopsw.key | 21 +++++++ .../asymmetric/OpenSSH/dsa-nopsw.key-cert.pub | 1 + .../asymmetric/OpenSSH/dsa-nopsw.key.pub | 1 + .../asymmetric/OpenSSH/dsa-psw.key | 22 +++++++ .../asymmetric/OpenSSH/dsa-psw.key.pub | 1 + .../asymmetric/OpenSSH/ecdsa-nopsw.key | 9 +++ .../OpenSSH/ecdsa-nopsw.key-cert.pub | 1 + .../asymmetric/OpenSSH/ecdsa-nopsw.key.pub | 1 + .../asymmetric/OpenSSH/ecdsa-psw.key | 11 ++++ .../asymmetric/OpenSSH/ecdsa-psw.key.pub | 1 + .../asymmetric/OpenSSH/ed25519-nopsw.key | 7 +++ .../OpenSSH/ed25519-nopsw.key-cert.pub | 1 + .../asymmetric/OpenSSH/ed25519-nopsw.key.pub | 1 + .../asymmetric/OpenSSH/ed25519-psw.key | 8 +++ .../asymmetric/OpenSSH/ed25519-psw.key.pub | 1 + .../asymmetric/OpenSSH/gen.sh | 62 +++++++++++++++++++ .../asymmetric/OpenSSH/rsa-nopsw.key | 27 ++++++++ .../asymmetric/OpenSSH/rsa-nopsw.key-cert.pub | 1 + .../asymmetric/OpenSSH/rsa-nopsw.key.pub | 1 + .../asymmetric/OpenSSH/rsa-psw.key | 28 +++++++++ .../asymmetric/OpenSSH/rsa-psw.key.pub | 1 + 22 files changed, 242 insertions(+) create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key-cert.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key-cert.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key-cert.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key.pub create mode 100755 vectors/cryptography_vectors/asymmetric/OpenSSH/gen.sh create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key-cert.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key.pub create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key create mode 100644 vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key.pub diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 95e608b2e6ce..182df18877e4 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -556,6 +556,41 @@ Custom PKCS12 Test Vectors (``x509/custom/ca/ca.pem``) encrypted via AES 256 CBC with the password ``cryptography`` and no private key. +Custom OpenSSH Test Vectors +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Generated by +``asymmetric/OpenSSH/gen.sh`` +using command-line tools from OpenSSH_7.6p1 package. + +* ``dsa-nopsw.key``, ``dsa-nopsw.key.pub``, ``dsa-nopsw.key-cert.pub`` - + DSA-1024 private key; and corresponding public key in plain format + and with self-signed certificate. +* ``dsa-psw.key``, ``dsa-psw.key.pub`` - + Password-protected DSA-1024 private key and corresponding public key. + Password is "password". +* ``ecdsa-nopsw.key``, ``ecdsa-nopsw.key.pub``, + ``ecdsa-nopsw.key-cert.pub`` - + SECP256R1 private key; and corresponding public key in plain format + and with self-signed certificate. +* ``ecdsa-psw.key``, ``ecdsa-psw.key.pub`` - + Password-protected SECP384R1 private key and corresponding public key. + Password is "password". +* ``ed25519-nopsw.key``, ``ed25519-nopsw.key.pub``, + ``ed25519-nopsw.key-cert.pub`` - + Ed25519 private key; and corresponding public key in plain format + and with self-signed certificate. +* ``ed25519-psw.key``, ``ed25519-psw.key.pub`` - + Password-protected Ed25519 private key and corresponding public key. + Password is "password". +* ``rsa-nopsw.key``, ``rsa-nopsw.key.pub``, + ``rsa-nopsw.key-cert.pub`` - + RSA-2048 private key; and corresponding public key in plain format + and with self-signed certificate. +* ``rsa-psw.key``, ``rsa-psw.key.pub`` - + Password-protected RSA-2048 private key and corresponding public key. + Password is "password". + Hashes ~~~~~~ diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key new file mode 100644 index 000000000000..edb69615f74d --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key @@ -0,0 +1,21 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH +NzAAAAgQDRqiBQV8QY6a/5fUvFCs5koeJgXj1v2D6dlSqEBEEu8aRA/sJQZmSx6Xzoi9gl +nvyrS0/Sjf0Y4J5iU1D0gYsNzBhxZFFyrg6LExwSfqMcWWBw8pdcMcOjVfrcWohvqF/Na2 +EnzTZgSOX3WbXA8ikw1Irak5MvD7luNDLX2ZKi7wAAABUA9x8+++PeaLuNjNUvbaDXhvmw +jbcAAACBAKlkeJEdFVDpZDmMG2Ob8KXy8hrqfEwZHR1B0HPWmZoOpw+TpY/oYEwuA9mXSG +0EeDVcQlBIaAtu4ZfmZQnRQ5cZ+cBX8VnxAAR6JUQw5R00U6cbiDSYXDn93sLW+D27f1jn +NShsyz43F66LrsXWTLmoFtMKXw+YBL5cL7Mfk6OcAAAAgHqgOmrZJRmNiRJAY/0ylOB9pc +S0OfYSj3MXIgbkS0qRvR+Llv1QpFCqykzTEFONosZb75Jb3FuIqw1WdZBOM8ZF5dIBdHAs +Q01NoTZiHJRQlFwBqMZ4DCs3txDuM1GZmDaYWIRdzVnrq8USqBSo2t1BvXbZXFLcmHsIyh +xh9CusAAAB6BxKLVkcSi1ZAAAAB3NzaC1kc3MAAACBANGqIFBXxBjpr/l9S8UKzmSh4mBe +PW/YPp2VKoQEQS7xpED+wlBmZLHpfOiL2CWe/KtLT9KN/RjgnmJTUPSBiw3MGHFkUXKuDo +sTHBJ+oxxZYHDyl1wxw6NV+txaiG+oX81rYSfNNmBI5fdZtcDyKTDUitqTky8PuW40MtfZ +kqLvAAAAFQD3Hz77495ou42M1S9toNeG+bCNtwAAAIEAqWR4kR0VUOlkOYwbY5vwpfLyGu +p8TBkdHUHQc9aZmg6nD5Olj+hgTC4D2ZdIbQR4NVxCUEhoC27hl+ZlCdFDlxn5wFfxWfEA +BHolRDDlHTRTpxuINJhcOf3ewtb4Pbt/WOc1KGzLPjcXrouuxdZMuagW0wpfD5gEvlwvsx ++To5wAAACAeqA6atklGY2JEkBj/TKU4H2lxLQ59hKPcxciBuRLSpG9H4uW/VCkUKrKTNMQ +U42ixlvvklvcW4irDVZ1kE4zxkXl0gF0cCxDTU2hNmIclFCUXAGoxngMKze3EO4zUZmYNp +hYhF3NWeurxRKoFKja3UG9dtlcUtyYewjKHGH0K6wAAAAVAMS2BFSZWFdWHlyYZscEHEEv +TkRNAAAADWRzYS1ub3Bzdy5rZXkBAgME +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key-cert.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key-cert.pub new file mode 100644 index 000000000000..753989db5752 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key-cert.pub @@ -0,0 +1 @@ +ssh-dss-cert-v01@openssh.com AAAAHHNzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgT/srHasDLk3rB8bDZK7rP6miircgVvnVrTghYfkmZsEAAACBANGqIFBXxBjpr/l9S8UKzmSh4mBePW/YPp2VKoQEQS7xpED+wlBmZLHpfOiL2CWe/KtLT9KN/RjgnmJTUPSBiw3MGHFkUXKuDosTHBJ+oxxZYHDyl1wxw6NV+txaiG+oX81rYSfNNmBI5fdZtcDyKTDUitqTky8PuW40MtfZkqLvAAAAFQD3Hz77495ou42M1S9toNeG+bCNtwAAAIEAqWR4kR0VUOlkOYwbY5vwpfLyGup8TBkdHUHQc9aZmg6nD5Olj+hgTC4D2ZdIbQR4NVxCUEhoC27hl+ZlCdFDlxn5wFfxWfEABHolRDDlHTRTpxuINJhcOf3ewtb4Pbt/WOc1KGzLPjcXrouuxdZMuagW0wpfD5gEvlwvsx+To5wAAACAeqA6atklGY2JEkBj/TKU4H2lxLQ59hKPcxciBuRLSpG9H4uW/VCkUKrKTNMQU42ixlvvklvcW4irDVZ1kE4zxkXl0gF0cCxDTU2hNmIclFCUXAGoxngMKze3EO4zUZmYNphYhF3NWeurxRKoFKja3UG9dtlcUtyYewjKHGH0K6wAAAAAAAAAAQAAAAEAAAAEbmFtZQAAAAAAAAAASz3OqAAAAAEFdF0oAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAbIAAAAHc3NoLWRzcwAAAIEA0aogUFfEGOmv+X1LxQrOZKHiYF49b9g+nZUqhARBLvGkQP7CUGZksel86IvYJZ78q0tP0o39GOCeYlNQ9IGLDcwYcWRRcq4OixMcEn6jHFlgcPKXXDHDo1X63FqIb6hfzWthJ802YEjl91m1wPIpMNSK2pOTLw+5bjQy19mSou8AAAAVAPcfPvvj3mi7jYzVL22g14b5sI23AAAAgQCpZHiRHRVQ6WQ5jBtjm/Cl8vIa6nxMGR0dQdBz1pmaDqcPk6WP6GBMLgPZl0htBHg1XEJQSGgLbuGX5mUJ0UOXGfnAV/FZ8QAEeiVEMOUdNFOnG4g0mFw5/d7C1vg9u39Y5zUobMs+Nxeui67F1ky5qBbTCl8PmAS+XC+zH5OjnAAAAIB6oDpq2SUZjYkSQGP9MpTgfaXEtDn2Eo9zFyIG5EtKkb0fi5b9UKRQqspM0xBTjaLGW++SW9xbiKsNVnWQTjPGReXSAXRwLENNTaE2YhyUUJRcAajGeAwrN7cQ7jNRmZg2mFiEXc1Z66vFEqgUqNrdQb122VxS3Jh7CMocYfQrrAAAADcAAAAHc3NoLWRzcwAAAChGJhskBvKjziUaQuE3Kd3A+3WqQduqROikisQyJqTEmD9CqCrV2tuQ dsa-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key.pub new file mode 100644 index 000000000000..b50e534c1cba --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-nopsw.key.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBANGqIFBXxBjpr/l9S8UKzmSh4mBePW/YPp2VKoQEQS7xpED+wlBmZLHpfOiL2CWe/KtLT9KN/RjgnmJTUPSBiw3MGHFkUXKuDosTHBJ+oxxZYHDyl1wxw6NV+txaiG+oX81rYSfNNmBI5fdZtcDyKTDUitqTky8PuW40MtfZkqLvAAAAFQD3Hz77495ou42M1S9toNeG+bCNtwAAAIEAqWR4kR0VUOlkOYwbY5vwpfLyGup8TBkdHUHQc9aZmg6nD5Olj+hgTC4D2ZdIbQR4NVxCUEhoC27hl+ZlCdFDlxn5wFfxWfEABHolRDDlHTRTpxuINJhcOf3ewtb4Pbt/WOc1KGzLPjcXrouuxdZMuagW0wpfD5gEvlwvsx+To5wAAACAeqA6atklGY2JEkBj/TKU4H2lxLQ59hKPcxciBuRLSpG9H4uW/VCkUKrKTNMQU42ixlvvklvcW4irDVZ1kE4zxkXl0gF0cCxDTU2hNmIclFCUXAGoxngMKze3EO4zUZmYNphYhF3NWeurxRKoFKja3UG9dtlcUtyYewjKHGH0K6w= dsa-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key new file mode 100644 index 000000000000..ee6d1e12bb3c --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key @@ -0,0 +1,22 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCOodUQio +9QarE9NbbQUAuXAAAAEAAAAAEAAAGyAAAAB3NzaC1kc3MAAACBAMHOI6HG+xy8RLV6C1JS +k3dldozdE3SJjK1n0UTdBFo/r1ZMnnH/IZOk5+TkRXplfkVAcmmH++Zm4yb4SzxiDMY8XB +Tn0COzgPOfJJUV6TKLgAF8QsvlhDrbRgLk1ANPQRY3YIPrVGcF4oUZcyUkIcjl4kycGwMy +E8wm0FckDKitAAAAFQC5WH7VkaACexO69dQapzGy05mb0QAAAIASiv/QUqr9zGVgiLj/Ge +KlF7nZLJNCTRoIYGEdARQM23052a/aPMoxaHk3SKHZZmGU87Gp0vl4z6zwRYTp7pzwLqU3 +6gprOqcrFDrPhEq0xkU8+AKClLZ31BUyxN2u6kpBiwQI4Mme3z3PDLVSME+NMEn+sdZKQp +L0Y0ctXBMtSQAAAIEAmahTrRyoQ32qVX3GKqHElryPfMjWIJsrGByxUNf3hn+IhTs4u858 +oHTiLsZWqrkxFqIGHSSrXclxVkvz9WxKO7D6tcECK7nCqmtEmgXGW+ayVUkeMRlv1VYHKx +ePsLxOOip14A00vqY5MkZJ8zFFrHxFV0Ej8cKaxJ4SLmvAkM0AAAHwvffrsyCVDHxWqAg2 +KQEm+3ebumLdoLkGgDiSaO1jwJr3R1VnzQTtqveg4rm5agmeHKvUmDTd1lTyTWWk6zX6Bx +Ww+63V+c3Byv0DlexJToQKo99ZayioWyJjF0/bRXJE34aIYzbDFCQTJdGQ2pEXAnyWBVOB +j44w/P6VvdhTDvfIYk2ZLpnEPbBi38Hs3n2a2VSp/dNctfE4yfnf2aVntXPoJPRbOYNZs6 +AmcPacbkBXNV2LJeTP2dnXFM4mnReBRVF9Eqd4SsfEXDvC1beBBf9rZN3c/JKXohG97iPi +PO4Bv34xMKVw64+RtyIN8gTE4Sp/ChqgESIGqCo034YQ5PYLlSX7JxzbfOkBZHAcg2MVsO +npL1HizQp/l5JzxNrFhjg9ZtIwa5mmPapQ1T/IWQQ5lrtev5cWcfEYonhyvjn2F9Rd5Eem +jajVfzUS37IGEN2vZaNyLmvMdemJMSkIQwHiHpsdcDfdR7m4hAIWnBYpj2+z5C4WuAFAqE +UeHjiw9PIMNFK6JTo3QbEUddJw5jgdlx9nctM26JWwKBAOYINCOv5f/2gjR13DzkLL5Xca +dSO1zHzdIZzrNpD/SFJFeHxlVuaCg6MefhYRMfxVZUAKYdw0qNhhTLecCfChQL6t2NdEOm +q9f9gN2+a0fnO2lA== +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key.pub new file mode 100644 index 000000000000..a9a8d56599a3 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/dsa-psw.key.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAMHOI6HG+xy8RLV6C1JSk3dldozdE3SJjK1n0UTdBFo/r1ZMnnH/IZOk5+TkRXplfkVAcmmH++Zm4yb4SzxiDMY8XBTn0COzgPOfJJUV6TKLgAF8QsvlhDrbRgLk1ANPQRY3YIPrVGcF4oUZcyUkIcjl4kycGwMyE8wm0FckDKitAAAAFQC5WH7VkaACexO69dQapzGy05mb0QAAAIASiv/QUqr9zGVgiLj/GeKlF7nZLJNCTRoIYGEdARQM23052a/aPMoxaHk3SKHZZmGU87Gp0vl4z6zwRYTp7pzwLqU36gprOqcrFDrPhEq0xkU8+AKClLZ31BUyxN2u6kpBiwQI4Mme3z3PDLVSME+NMEn+sdZKQpL0Y0ctXBMtSQAAAIEAmahTrRyoQ32qVX3GKqHElryPfMjWIJsrGByxUNf3hn+IhTs4u858oHTiLsZWqrkxFqIGHSSrXclxVkvz9WxKO7D6tcECK7nCqmtEmgXGW+ayVUkeMRlv1VYHKxePsLxOOip14A00vqY5MkZJ8zFFrHxFV0Ej8cKaxJ4SLmvAkM0= dsa-psw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key new file mode 100644 index 000000000000..4c0a8bf6103f --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key @@ -0,0 +1,9 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS +1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQQmVkbOBmCBxiacl7qr3xRljePXZyUZ +GSSw5Bax3+pjR4SDCN77ay3wmcMT0n5wmFiumKH7LGdRWAOk5FSavF4vAAAAqGb/L/dm/y +/3AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCZWRs4GYIHGJpyX +uqvfFGWN49dnJRkZJLDkFrHf6mNHhIMI3vtrLfCZwxPSfnCYWK6YofssZ1FYA6TkVJq8Xi +8AAAAgcFJtJbq8YCNzbVBuGxtFkMo6E7L6thbRA0FqV4+2MbAAAAAPZWNkc2Etbm9wc3cu +a2V5AQ== +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key-cert.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key-cert.pub new file mode 100644 index 000000000000..ce1626bad8ec --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key-cert.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg7ohu2h3ZSjGNlNGn5wmDHarKBT8q+6Yl23V+s3MNjzEAAAAIbmlzdHAyNTYAAABBBCZWRs4GYIHGJpyXuqvfFGWN49dnJRkZJLDkFrHf6mNHhIMI3vtrLfCZwxPSfnCYWK6YofssZ1FYA6TkVJq8Xi8AAAAAAAAAAAAAAAIAAAAEbmFtZQAAABYAAAAHZG9tYWluMQAAAAdkb21haW4yAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAGgAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAAhuaXN0cDI1NgAAAEEEJlZGzgZggcYmnJe6q98UZY3j12clGRkksOQWsd/qY0eEgwje+2st8JnDE9J+cJhYrpih+yxnUVgDpORUmrxeLwAAAGMAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAEgAAAAhAOSy1UooQNXaxG4cbZTQVnC7uSJlLuk4w9Z5XvbfzzmSAAAAH2QDu0n+WcXzDEsXeaH6IV0drX99PYLeiabxYeUha/o= ecdsa-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key.pub new file mode 100644 index 000000000000..17f28a63556b --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-nopsw.key.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCZWRs4GYIHGJpyXuqvfFGWN49dnJRkZJLDkFrHf6mNHhIMI3vtrLfCZwxPSfnCYWK6YofssZ1FYA6TkVJq8Xi8= ecdsa-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key new file mode 100644 index 000000000000..35eb8814eff9 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key @@ -0,0 +1,11 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBNPqCdPL +3HMhcAs6vsUbVEAAAAEAAAAAEAAACIAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlz +dHAzODQAAABhBKoqSCpmO6pLIjBokwga14onc/XOkRZ9WPKfFf/d0Aq6HOjL5Vm4ZxxRP3 +mjyLI/flOjrx5aMVAed5xkX6shh+zN4mb2xajuPTwqbvsVvIyglrFbKKQO3DQnkbbeqBHL +PAAAAOCTdP9vi3Go06Z/wni2pxYNgJK9V8nFfmVceblZYMdAfP0WFAKK/i84Nodl2t72g0 +xAkCOimLPGI7xHL6ZVPe6IOzvaW3wx7L8DSXfoqhKLzJwPVG+iH1m4AyUTU7osswSHzVHv +nZsU+HPcetVahWWfbswLB4hjbyoQpxc2B0qk0UQJ8E1FsPpjMcpgHOtKEWrmbpHChSI9p3 +KyVGlMtL9CII0hTu61KKm1AgcX+WykIFLjqTpG2PY2X/uuW56nhYrDJqPXL4CPYTwxTRCN +MOV9toMiqAQHz1JqadMsbdviEQ== +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key.pub new file mode 100644 index 000000000000..3ea1b8e5bf7f --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ecdsa-psw.key.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBKoqSCpmO6pLIjBokwga14onc/XOkRZ9WPKfFf/d0Aq6HOjL5Vm4ZxxRP3mjyLI/flOjrx5aMVAed5xkX6shh+zN4mb2xajuPTwqbvsVvIyglrFbKKQO3DQnkbbeqBHLPA== ecdsa-psw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key new file mode 100644 index 000000000000..34565dbf8610 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACDdZgztgAFFC7T5PifrUy/kMu0Pnwq1au3vStKHe7FFMAAAAJhNWbUCTVm1 +AgAAAAtzc2gtZWQyNTUxOQAAACDdZgztgAFFC7T5PifrUy/kMu0Pnwq1au3vStKHe7FFMA +AAAECQxzIh6s9TpOOlHcnFpjQIdZWmrhsU3eTq05iGHQejl91mDO2AAUULtPk+J+tTL+Qy +7Q+fCrVq7e9K0od7sUUwAAAAEWVkMjU1MTktbm9wc3cua2V5AQIDBA== +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key-cert.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key-cert.pub new file mode 100644 index 000000000000..b0240b366acc --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key-cert.pub @@ -0,0 +1 @@ +ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJjE7jTtIuJ68m5zBEtn0bCWKUXcMdAOau0hO3FTMpeAAAAAIN1mDO2AAUULtPk+J+tTL+Qy7Q+fCrVq7e9K0od7sUUwAAAAAAAAAAAAAAABAAAABG5hbWUAAAAAAAAAAAAAAAD//////////wAAAAAAAABkAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIN1mDO2AAUULtPk+J+tTL+Qy7Q+fCrVq7e9K0od7sUUwAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEAqewM0LFjD4qQUdGNmF/W512ogcjh5xDchw9h2GjhFstttkQVfEOATyafZ5/vWGegMjSnGWHHTxv1A5bqzA+UE ed25519-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key.pub new file mode 100644 index 000000000000..21ead374197d --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-nopsw.key.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN1mDO2AAUULtPk+J+tTL+Qy7Q+fCrVq7e9K0od7sUUw ed25519-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key new file mode 100644 index 000000000000..f1c75637838c --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key @@ -0,0 +1,8 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCX39wD02 +J9++SP9d3vlnxuAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIFpz5PWWlJVx/imA +hJjv57fg4eTGFVHf4WcFfbXPNo+/AAAAoM+Bu9OvuVW6elNfhl4AxM/p7Oy02ptuWR+LNV +Y9Sjp/ADM+aTHb77DbZFD8WqzXhioUcOcej1EdAr4NFP7YRC1TIDHuzKgePDjewMMK7lCw +9qZgZbBUYN8q0/V42L9Tc9w8rjkewtd6r5u+5UOLv7Ct7WxSESAAC1KC5TnnU0CCZ1ZFXN +NOsxE0VLn5e+SDyILFF8fGt3mGk0S1D50zVzY= +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key.pub new file mode 100644 index 000000000000..4c3d949e4cac --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/ed25519-psw.key.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFpz5PWWlJVx/imAhJjv57fg4eTGFVHf4WcFfbXPNo+/ ed25519-psw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/gen.sh b/vectors/cryptography_vectors/asymmetric/OpenSSH/gen.sh new file mode 100755 index 000000000000..b18c338b3803 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/gen.sh @@ -0,0 +1,62 @@ +#! /bin/sh + +rm *.key *.pub + +# avoid having too many files +ecbits="ecbits.txt" +echo 521 > "$ecbits" +getecbits() { + last=$(cat $ecbits) + case "$last" in + 256) last=384;; + 384) last=521;; + 521) last=256;; + esac + echo $last > "$ecbits" + echo $last +} + +genkey() { + fn="$1" + args="-f $fn -C $fn" + case "$fn" in + ecdsa-*) args="$args -t ecdsa -b $(getecbits)" ;; + rsa-*) args="$args -t rsa" ;; + dsa-*) args="$args -t dsa" ;; + ed25519-*) args="$args -t ed25519" ;; + esac + password='' + case "$fn" in + *-psw.*) password="password" ;; + esac + ssh-keygen -q -o $args -N "$password" +} + +# generate private key files +for ktype in rsa dsa ecdsa ed25519; do + for psw in nopsw psw; do + genkey "${ktype}-${psw}.key" + done +done + +# generate public key files +for fn in *.key; do + ssh-keygen -q -y -f "$fn" > /dev/null +done + +rm -f "$ecbits" + +# generate public key files with certificate +ssh-keygen -q -s "dsa-nopsw.key" -I "name" \ + -z 1 -V 20100101123000:21090101123000 \ + "dsa-nopsw.key.pub" +ssh-keygen -q -s "rsa-nopsw.key" -I "name" \ + -z 2 -n user1,user2 -t rsa-sha2-512 \ + "rsa-nopsw.key.pub" +ssh-keygen -q -s "ecdsa-nopsw.key" -I "name" \ + -h -n domain1,domain2 \ + "ecdsa-nopsw.key.pub" +ssh-keygen -q -s "ed25519-nopsw.key" -I "name" \ + -O no-port-forwarding \ + "ed25519-nopsw.key.pub" + diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key new file mode 100644 index 000000000000..9d755e818058 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key @@ -0,0 +1,27 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAQEAq2QdSm22QEsm+GtpAwN4qk0exDIxwxUb8jJ6LLLo19KJR9ySQw+d +Ajp9WIUumXM2OPYi0qqtN6JKMsDrVSR87RoK7V2W4lHYljZBODGYA8bfpqaLt5HMvkJpsk +MEBqJkZtwO8G/J3QDOFByiGOxeeL4/2vnM5XwN/ff6SKABxfU60gDmlofFlZqCD9exWO52 +dg5BQ/gN5qJLBKBZmC3jWnAkrblvfPxwfp9WC3gMrFIILytCWvRu9YKM+nQZoqo0yCbzDy +7GRK5XZJlHfw+jV3MWMSXS7GSirOmTtmyygCtkphA3Y8HAQlibhdg+5jZDWRdDXIU2uOET +iHc8qvxM8wAAA8jQzBt60MwbegAAAAdzc2gtcnNhAAABAQCrZB1KbbZASyb4a2kDA3iqTR +7EMjHDFRvyMnossujX0olH3JJDD50COn1YhS6ZczY49iLSqq03okoywOtVJHztGgrtXZbi +UdiWNkE4MZgDxt+mpou3kcy+QmmyQwQGomRm3A7wb8ndAM4UHKIY7F54vj/a+czlfA399/ +pIoAHF9TrSAOaWh8WVmoIP17FY7nZ2DkFD+A3moksEoFmYLeNacCStuW98/HB+n1YLeAys +UggvK0Ja9G71goz6dBmiqjTIJvMPLsZErldkmUd/D6NXcxYxJdLsZKKs6ZO2bLKAK2SmED +djwcBCWJuF2D7mNkNZF0NchTa44ROIdzyq/EzzAAAAAwEAAQAAAQAYxAivfpb9R17EOtEb +zF6dTTOK6i3ioKQ/JSgeWWPn+9Y2ehrwccsgTU9bgTMwnUNSi86QXnVVOrA6EUJwNSuQH1 +lA32s0HNuNKR3XfuMWeKBMtngt+HV7cKFRTvm/86tKabYG7EBhHQKqSVDrBQzJqcQUYlBH +QNvMvQ5/fA+FiSN5RT/Hv0iJy9WFQyqN8W1KwWUnFnXgEw9ZFBlhjugcKDS1l+fyoDN0p8 +/Lm0ojn2I7I9SH9tXKb330zhO3CfXMVtjnpyi8wQALT6nEarfBwzGK6R0xWX3Xm+i2fQBb +sIBDr5r3WWpQlnPnFx1lSntQeoUVLJEimRklQJVL41fhAAAAgG923QGfsC61Fp22Q+rVb8 +0N66qxCfnXnQDbtT7ZdFK7tjXdKVA/GU+vU/pgFarixYcGS5gDKbAJM2R6XLz9cE5UVzaw +TrJab6bHG9bX8xh2kSKcY0GW1/QWp9pv6IWrCQziXiDP7uxDndxolfnHXsjT3QVfNQV+J8 +gtkjP3aCy1AAAAgQDZOcREo87MzWwbEoVAETZ8uVqWspTwJtAvIuqHePvHa1wvc5fWqr1Z +1wUN/Wl/DKhOjydBXQSa/SfKdsIx0JRkia06bYvS1eoL08+y3aHFkIR+WOp6bVYH/p3HzH +9qdMx7IHpAco7ZtBmQ4O2nZamVBRX5FnxkcmkCHccENSh9OwAAAIEAyfvp/f6ka1FH/mW0 +MqRxAhzB8SoUGbvnGhgBxTWgCH7iMbtUwVsi3TbJr0gYBYQoFH61rAGvOfUTb9cd9+bowR +j9m3oBOwSJBJG25hrmsqyFuZQlSMAv/AXjjLNUF1AQkpRZZMcEd6rTffprogiwkGdrRTMe ++tjRZCCgQaN+06kAAAANcnNhLW5vcHN3LmtleQECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key-cert.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key-cert.pub new file mode 100644 index 000000000000..35b0c2bbb075 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key-cert.pub @@ -0,0 +1 @@ +ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgtL8iJdlD7w2obBZdlxyqu06uLR78fvDASlnR3RRk/eMAAAADAQABAAABAQCrZB1KbbZASyb4a2kDA3iqTR7EMjHDFRvyMnossujX0olH3JJDD50COn1YhS6ZczY49iLSqq03okoywOtVJHztGgrtXZbiUdiWNkE4MZgDxt+mpou3kcy+QmmyQwQGomRm3A7wb8ndAM4UHKIY7F54vj/a+czlfA399/pIoAHF9TrSAOaWh8WVmoIP17FY7nZ2DkFD+A3moksEoFmYLeNacCStuW98/HB+n1YLeAysUggvK0Ja9G71goz6dBmiqjTIJvMPLsZErldkmUd/D6NXcxYxJdLsZKKs6ZO2bLKAK2SmEDdjwcBCWJuF2D7mNkNZF0NchTa44ROIdzyq/EzzAAAAAAAAAAIAAAABAAAABG5hbWUAAAASAAAABXVzZXIxAAAABXVzZXIyAAAAAAAAAAD//////////wAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQCrZB1KbbZASyb4a2kDA3iqTR7EMjHDFRvyMnossujX0olH3JJDD50COn1YhS6ZczY49iLSqq03okoywOtVJHztGgrtXZbiUdiWNkE4MZgDxt+mpou3kcy+QmmyQwQGomRm3A7wb8ndAM4UHKIY7F54vj/a+czlfA399/pIoAHF9TrSAOaWh8WVmoIP17FY7nZ2DkFD+A3moksEoFmYLeNacCStuW98/HB+n1YLeAysUggvK0Ja9G71goz6dBmiqjTIJvMPLsZErldkmUd/D6NXcxYxJdLsZKKs6ZO2bLKAK2SmEDdjwcBCWJuF2D7mNkNZF0NchTa44ROIdzyq/EzzAAABFAAAAAxyc2Etc2hhMi01MTIAAAEAC13gJgpzMrO3fGM7lNpLLBDUa6GxB4Lr/RSHLxG5v9+Ym7z5aIYmneYifbNQ9qIPDxpuBQvN97NgV4ImSMjfIaaQi/PxyHKC+mxMXAonT5c5d+zhZHQ95/uxIt6iba1ej3MRVYw+biQlnIHhOUeJNV3W8UOry0XQlJzjTBR2/1Y+Xk89NbZ3F6QQ9UZpT/FvbERghElBauTz1UhtSlMCrn66tEOGxreVHraoM92pJaygginwb5iVU0SPWhWG3Qyh8P6uKzqSKIr+6BfaiIoWJXOLLEtSfmuK8dTuE8fNeU4PQlkJBqfcWbpD934QsP1dXWhan5Y4iFMK4IjcPNu7iA== rsa-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key.pub new file mode 100644 index 000000000000..00c01e299395 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-nopsw.key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrZB1KbbZASyb4a2kDA3iqTR7EMjHDFRvyMnossujX0olH3JJDD50COn1YhS6ZczY49iLSqq03okoywOtVJHztGgrtXZbiUdiWNkE4MZgDxt+mpou3kcy+QmmyQwQGomRm3A7wb8ndAM4UHKIY7F54vj/a+czlfA399/pIoAHF9TrSAOaWh8WVmoIP17FY7nZ2DkFD+A3moksEoFmYLeNacCStuW98/HB+n1YLeAysUggvK0Ja9G71goz6dBmiqjTIJvMPLsZErldkmUd/D6NXcxYxJdLsZKKs6ZO2bLKAK2SmEDdjwcBCWJuF2D7mNkNZF0NchTa44ROIdzyq/Ezz rsa-nopsw.key diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key new file mode 100644 index 000000000000..cd1f38f3c938 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key @@ -0,0 +1,28 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABChvLeROo +MQfWAC6b7jds47AAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQCek3p8wNo1 +5l7Ihy4yaGjWScJpjh/Lq7WS7f64KxXKodBe35fLl8lu9Ds4Y06XWeHZdGxC+qp4QoxGYI +Ft2Awm8sz2wRbPY7d322tG9VnT59bQlvKtq77y9ZYefsdVwh2Uf7otdUZOEz6KuKc1CXXb +FfBFY6YB1lZ4YkQ2YHsYau22RHDjaHi55VoFokyk7cVnuhaIXCrppAH5+AMoqVtrAb/48G +2gGdQSo90heqglW7QLXPx2sCijp+62coXzbfViYzARdc5rbcih7zAfxEHMi+1HZmdvNKvd +2Vy+jPFD+FvvHUDl58XChAjJVmgrsqbZanpgIDD4/48dSnHSH0OxAAADwOuiaWL5LLLt5D +8bC7i0soG4LUSlwn0GlYhYyeMTBDswEcm+BGt+S1vgHO6f6oA+v+A/npxgwN7OrCJoq5Ls +iJZ//KCB+GCXXF0wXldwFcNtMoylG2FVo8Gx+Jckm+wSy+Uk73Sk+D+4UiHNGeFuQ85PbX +ceyne4iayry3PkiWHkfCVUy2UgW2L3YKtoDfXZ5QK3JVPxfMvQnDnP47r3L48rVCfvYVVy +SX+YnKgwMJPa4DX6mF8E6MPtntzZoN2MUwIJRlRZl1KqzmsIKl/XWsxsQuosvMT1wdDGIf +uT3uVtabeMyybM4tzPwXdzgnh9Mv2PmcOV15XCmxBFQP81yB8AkuUTWuekEbgypIvppQiL +vlmiSdWsAZvBqYN7lpuIJloRH3PCyzKSBLDJ6gSpb+ysX9s+Z2of3arBo0wAipZzl+S65R +guK7IxZu4fynOKojRjL97w6FN0GpaMOC0QiDNfSIg3wk3FJ8c6DFRjKDgaXSk90aMNEGLX +kOidZ3lQJI3K3KODDt28F9mKfOS6lyUWe9+4CQO+oJkY9EdUgiT3ZSbbQAWjCGSh4A6/Z8 +VHKYb7UCBHYf431VF95yY+2u31Amr76iHuhVZ+G5tcwytvHjuheZQttXSkvvst7J5fxPBT +kLXfm75RUH9ajveDR9mZq4SmJzlOHPkAn8qZ6QeLGvtsp0Lde8dKu6bo2eqtilbVMr6fi1 +9U+il6J+K+DiAcMh1vOAp0nhecstlabMN+NnENnWy2s+zyQYLKMUACYge7vWxbgJ0PFNkF +8RM6vC8/IIP81VSp/ako1Dsjh26uhAF92/HHCkAgFiUeBXACjvDo8/FSFbdbutlyl4bvOE +miKQfSLWqh5lxjDySYOzhGerAivmRCNUviseFTTGP/qE/+s0VZjuMt3afE4H/9baftyt+O +Iz1OGaMKXPD40mWhj4LUdD+opzGtjexojUPCCzYMzKsEz+WFE3//TWmcM3jq6lSDwbgbVI +82MGXf0htD7RtB9Gy3pE793LiRecCMygp/gF0ViPa6mwIxMOTy1mp0F5bCddRsNWGA91kF +XcSjUo/1mpFADMgUcrEsUCK69oxl1D/hPrkvvGEG/U/6z0gS9/cTeIim/6wg+XSULNfOgG +l0Ate1oHdrZ8XVjHq8e05L5VbYvXMvc9ETnB786kxAuJKc+60KPQS5KHZFiZEAvEcFnd7s +vCjY0NEf8s8Ofn0jI50UiMn5Ge0YEhtypQOb11kawG1L9UIgL3HJsm7e8osYdGig3ejFHL +teHHc5kg== +-----END OPENSSH PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key.pub b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key.pub new file mode 100644 index 000000000000..ad94f9594102 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/OpenSSH/rsa-psw.key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCek3p8wNo15l7Ihy4yaGjWScJpjh/Lq7WS7f64KxXKodBe35fLl8lu9Ds4Y06XWeHZdGxC+qp4QoxGYIFt2Awm8sz2wRbPY7d322tG9VnT59bQlvKtq77y9ZYefsdVwh2Uf7otdUZOEz6KuKc1CXXbFfBFY6YB1lZ4YkQ2YHsYau22RHDjaHi55VoFokyk7cVnuhaIXCrppAH5+AMoqVtrAb/48G2gGdQSo90heqglW7QLXPx2sCijp+62coXzbfViYzARdc5rbcih7zAfxEHMi+1HZmdvNKvd2Vy+jPFD+FvvHUDl58XChAjJVmgrsqbZanpgIDD4/48dSnHSH0Ox rsa-psw.key From dbe247cc8958e6cc434c328810e87d7567609696 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Wed, 27 May 2020 15:31:51 +0300 Subject: [PATCH 831/988] Consistently use 'self' in backend.py (#5261) There happens to be global var named 'backend' so backend._lib works, but is confusing. --- src/cryptography/hazmat/backends/openssl/backend.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index e5b64e3ddbea..0a6b7bc3c164 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -842,7 +842,7 @@ def create_x509_certificate(self, builder, private_key, algorithm): # Create an empty certificate. x509_cert = self._lib.X509_new() - x509_cert = self._ffi.gc(x509_cert, backend._lib.X509_free) + x509_cert = self._ffi.gc(x509_cert, self._lib.X509_free) # Set the x509 version. res = self._lib.X509_set_version(x509_cert, builder._version.value) @@ -953,7 +953,7 @@ def create_x509_crl(self, builder, private_key, algorithm): # Create an empty CRL. x509_crl = self._lib.X509_CRL_new() - x509_crl = self._ffi.gc(x509_crl, backend._lib.X509_CRL_free) + x509_crl = self._ffi.gc(x509_crl, self._lib.X509_CRL_free) # Set the x509 CRL version. We only support v2 (integer value 1). res = self._lib.X509_CRL_set_version(x509_crl, 1) @@ -1058,7 +1058,7 @@ def _create_x509_extension(self, handlers, extension): nid = self._lib.OBJ_txt2nid( extension.oid.dotted_string.encode("ascii") ) - backend.openssl_assert(nid != self._lib.NID_undef) + self.openssl_assert(nid != self._lib.NID_undef) return self._lib.X509V3_EXT_i2d( nid, 1 if extension.critical else 0, ext_struct ) @@ -2166,11 +2166,11 @@ def x25519_load_public_bytes(self, data): evp_pkey = self._create_evp_pkey_gc() res = self._lib.EVP_PKEY_set_type(evp_pkey, self._lib.NID_X25519) - backend.openssl_assert(res == 1) + self.openssl_assert(res == 1) res = self._lib.EVP_PKEY_set1_tls_encodedpoint( evp_pkey, data, len(data) ) - backend.openssl_assert(res == 1) + self.openssl_assert(res == 1) return _X25519PublicKey(self, evp_pkey) def x25519_load_private_bytes(self, data): @@ -2198,7 +2198,7 @@ def x25519_load_private_bytes(self, data): ba[0:16] = pkcs8_prefix ba[16:] = data bio = self._bytes_to_bio(ba) - evp_pkey = backend._lib.d2i_PrivateKey_bio(bio.bio, self._ffi.NULL) + evp_pkey = self._lib.d2i_PrivateKey_bio(bio.bio, self._ffi.NULL) self.openssl_assert(evp_pkey != self._ffi.NULL) evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) From 85fbb0367864e6fc0b860e47ea413d107f98cc13 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Mon, 1 Jun 2020 13:19:51 -0700 Subject: [PATCH 832/988] pin certbot deps (#5264) --- .travis/downstream.d/certbot.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis/downstream.d/certbot.sh b/.travis/downstream.d/certbot.sh index 12425fb87a9e..e2890a3a100c 100755 --- a/.travis/downstream.d/certbot.sh +++ b/.travis/downstream.d/certbot.sh @@ -5,8 +5,8 @@ case "${1}" in git clone --depth=1 https://github.com/certbot/certbot cd certbot git rev-parse HEAD - pip install -e ./acme[dev] - pip install -e ./certbot[dev] + tools/pip_install_editable.py ./acme[dev] + tools/pip_install_editable.py ./certbot[dev] ;; run) cd certbot From a02fdd60d98273ca34427235c4ca96687a12b239 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 1 Jun 2020 18:08:49 -0400 Subject: [PATCH 833/988] Test on LibreSSL 3.2.0 (#5263) --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3f0b1e17b4b4..0271c0ded955 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,7 +48,9 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 - python: 3.8 - env: TOXENV=py38 LIBRESSL=3.1.0 + env: TOXENV=py38 LIBRESSL=3.1.2 + - python: 3.8 + env: TOXENV=py38 LIBRESSL=3.2.0 - python: 2.7 services: docker From 03c5d84036b5cc04f783082b29d6260ed9886109 Mon Sep 17 00:00:00 2001 From: twosigmajab Date: Wed, 3 Jun 2020 12:15:28 -0400 Subject: [PATCH 834/988] Clarify that static linkage only applies to wheels (#5265) --- docs/security.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/security.rst b/docs/security.rst index affe43483b87..8cdd2d114d9a 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -72,9 +72,9 @@ New releases for OpenSSL updates -------------------------------- As of versions 0.5, 1.0.1, and 2.0.0, ``cryptography`` statically links OpenSSL -on Windows, macOS, and Linux respectively, to ease installation. Due to this, -``cryptography`` will release a new version whenever OpenSSL has a security or -bug fix release to avoid shipping insecure software. +in binary distributions for Windows, macOS, and Linux respectively, to ease +installation. Due to this, ``cryptography`` will release a new version whenever +OpenSSL has a security or bug fix release to avoid shipping insecure software. Like all our other releases, this will be announced on the mailing list and we strongly recommend that you upgrade as soon as possible. From 9dd4e1f2ce885a08420c4036f81de6bbd36c8836 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 12 Jun 2020 09:50:55 -0400 Subject: [PATCH 835/988] Block a sphinx version that's broken (#5272) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e82464aa1252..a708bab08a05 100644 --- a/setup.py +++ b/setup.py @@ -245,7 +245,7 @@ def run(self): "hypothesis>=1.11.4,!=3.79.2", ], "docs": [ - "sphinx >= 1.6.5,!=1.8.0", + "sphinx >= 1.6.5,!=1.8.0,!=3.1.0", "sphinx_rtd_theme", ], "docstest": [ From bf7def7424e597b3be2c84377aa0d210e3953c9a Mon Sep 17 00:00:00 2001 From: Henry Turner Date: Sat, 13 Jun 2020 04:09:47 +0100 Subject: [PATCH 836/988] Add missing exceptions to documentation in key derivation function primitives (#5271) * Update key-derivation-functions.rst Add missing exception to documentation * Update key-derivation-functions.rst Adding missing exception documentation for AlreadyFinalized to all the derive() functions missing it * Removed trailing whitespace --- .../primitives/key-derivation-functions.rst | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index b5466240d969..4b474124a240 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -205,6 +205,11 @@ Different KDFs are suitable for different tasks such as: :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. + :raises cryptography.exceptions.AlreadyFinalized: This is raised when + :meth:`derive` or + :meth:`verify` is + called more than + once. Derives a new key from the input key material by performing both the extract and expand operations. @@ -293,6 +298,11 @@ Different KDFs are suitable for different tasks such as: :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. + :raises cryptography.exceptions.AlreadyFinalized: This is raised when + :meth:`derive` or + :meth:`verify` is + called more than + once. Derives a new key from the input key material by performing both the extract and expand operations. @@ -382,6 +392,11 @@ Different KDFs are suitable for different tasks such as: :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. + :raises cryptography.exceptions.AlreadyFinalized: This is raised when + :meth:`derive` or + :meth:`verify` is + called more than + once. Derives a new key from the input key material. @@ -475,6 +490,11 @@ Different KDFs are suitable for different tasks such as: :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. + :raises cryptography.exceptions.AlreadyFinalized: This is raised when + :meth:`derive` or + :meth:`verify` is + called more than + once. Derives a new key from the input key material. @@ -568,6 +588,11 @@ Different KDFs are suitable for different tasks such as: :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. + :raises cryptography.exceptions.AlreadyFinalized: This is raised when + :meth:`derive` or + :meth:`verify` is + called more than + once. Derives a new key from the input key material. @@ -695,6 +720,11 @@ Different KDFs are suitable for different tasks such as: :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. + :raises cryptography.exceptions.AlreadyFinalized: This is raised when + :meth:`derive` or + :meth:`verify` is + called more than + once. Derives a new key from the input key material. From 170599b87cc3179244de91cdb90a6e24d1b6a7b7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 14 Jun 2020 12:11:07 -0500 Subject: [PATCH 837/988] block another broken sphinx version (#5277) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a708bab08a05..87a47c15e51a 100644 --- a/setup.py +++ b/setup.py @@ -245,7 +245,7 @@ def run(self): "hypothesis>=1.11.4,!=3.79.2", ], "docs": [ - "sphinx >= 1.6.5,!=1.8.0,!=3.1.0", + "sphinx >= 1.6.5,!=1.8.0,!=3.1.0,!=3.1.1", "sphinx_rtd_theme", ], "docstest": [ From 09b9fd924d7714883683d534f65585c4f5986b1e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 14 Jun 2020 14:29:16 -0400 Subject: [PATCH 838/988] Update the link to CERT's website for linkcheck (#5278) --- docs/limitations.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/limitations.rst b/docs/limitations.rst index cdbf6d2dac88..092d8a7cff91 100644 --- a/docs/limitations.rst +++ b/docs/limitations.rst @@ -21,4 +21,4 @@ Likelihood: unlikely, Remediation Cost: expensive to repair" and we do not consider this a high risk for most users. .. _`Memory wiping`: https://devblogs.microsoft.com/oldnewthing/?p=4223 -.. _`CERT secure coding guidelines`: https://www.securecoding.cert.org/confluence/display/c/MEM03-C.+Clear+sensitive+information+stored+in+reusable+resources +.. _`CERT secure coding guidelines`: https://wiki.sei.cmu.edu/confluence/display/c/MEM03-C.+Clear+sensitive+information+stored+in+reusable+resources From 0d0d70bd78f432397b91eee4d9743000686037a6 Mon Sep 17 00:00:00 2001 From: Jakub Stasiak Date: Sun, 14 Jun 2020 20:30:18 +0200 Subject: [PATCH 839/988] Add a way to pass current time to Fernet (#5256) * Add a way to pass current time to Fernet The motivation behind this is to be able to unit test code using Fernet easily without having to monkey patch global state. * Reformat to satisfy flake8 * Trigger a Fernet.encrypt() branch missing from coverage * Revert specifying explicit current time in MultiFernet.rotate() Message's timestamp is not verified anyway since ttl is None. * Change the Fernet's explicit current time API slightly This's been suggested in code review. * Fix a typo * Fix a typo * Restore full MultiFernet test coverage and fix a typo * Restore more coverage time.time() is not called by MultiFernet.rotate() anymore so the monkey patching and lambda need to go, because the patched function is not used and coverage calculation will rightfully notice it. * Remove an unused import * Document when the *_at_time Fernet methods were added --- docs/fernet.rst | 39 ++++++++++++++++++++++++++++++++++++++ src/cryptography/fernet.py | 24 ++++++++++++++++------- tests/test_fernet.py | 24 +++++++++++++---------- 3 files changed, 70 insertions(+), 17 deletions(-) diff --git a/docs/fernet.rst b/docs/fernet.rst index c01d18ca2baf..dd9d75bd1dc6 100644 --- a/docs/fernet.rst +++ b/docs/fernet.rst @@ -54,6 +54,28 @@ has support for implementing key rotation via :class:`MultiFernet`. generated in *plaintext*, the time a message was created will therefore be visible to a possible attacker. + .. method:: encrypt_at_time(data, current_time) + + .. versionadded:: 3.0 + + Encrypts data passed using explicitly passed current time. See + :meth:`encrypt` for the documentation of the ``data`` parameter, the + return type and the exceptions raised. + + The motivation behind this method is for the client code to be able to + test token expiration. Since this method can be used in an insecure + manner one should make sure the correct time (``int(time.time())``) + is passed as ``current_time`` outside testing. + + :param int current_time: The current time. + + .. note:: + + Similarly to :meth:`encrypt` the encrypted message contains the + timestamp in *plaintext*, in this case the timestamp is the value + of the ``current_time`` parameter. + + .. method:: decrypt(token, ttl=None) Decrypts a Fernet token. If successfully decrypted you will receive the @@ -81,6 +103,23 @@ has support for implementing key rotation via :class:`MultiFernet`. :raises TypeError: This exception is raised if ``token`` is not ``bytes``. + .. method:: decrypt_at_time(token, ttl, current_time) + + .. versionadded:: 3.0 + + Decrypts a token using explicitly passed current time. See + :meth:`decrypt` for the documentation of the ``token`` and ``ttl`` + parameters (``ttl`` is required here), the return type and the exceptions + raised. + + The motivation behind this method is for the client code to be able to + test token expiration. Since this method can be used in an insecure + manner one should make sure the correct time (``int(time.time())``) + is passed as ``current_time`` outside testing. + + :param int current_time: The current time. + + .. method:: extract_timestamp(token) .. versionadded:: 2.3 diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index b990defaaf88..862d9466132e 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -47,7 +47,9 @@ def generate_key(cls): return base64.urlsafe_b64encode(os.urandom(32)) def encrypt(self, data): - current_time = int(time.time()) + return self.encrypt_at_time(data, int(time.time())) + + def encrypt_at_time(self, data, current_time): iv = os.urandom(16) return self._encrypt_from_parts(data, current_time, iv) @@ -71,8 +73,11 @@ def _encrypt_from_parts(self, data, current_time, iv): return base64.urlsafe_b64encode(basic_parts + hmac) def decrypt(self, token, ttl=None): + return self.decrypt_at_time(token, ttl, int(time.time())) + + def decrypt_at_time(self, token, ttl, current_time): timestamp, data = Fernet._get_unverified_token_data(token) - return self._decrypt_data(data, timestamp, ttl) + return self._decrypt_data(data, timestamp, ttl, current_time) def extract_timestamp(self, token): timestamp, data = Fernet._get_unverified_token_data(token) @@ -105,8 +110,7 @@ def _verify_signature(self, data): except InvalidSignature: raise InvalidToken - def _decrypt_data(self, data, timestamp, ttl): - current_time = int(time.time()) + def _decrypt_data(self, data, timestamp, ttl, current_time): if ttl is not None: if timestamp + ttl < current_time: raise InvalidToken @@ -146,13 +150,16 @@ def __init__(self, fernets): self._fernets = fernets def encrypt(self, msg): - return self._fernets[0].encrypt(msg) + return self.encrypt_at_time(msg, int(time.time())) + + def encrypt_at_time(self, msg, current_time): + return self._fernets[0].encrypt_at_time(msg, current_time) def rotate(self, msg): timestamp, data = Fernet._get_unverified_token_data(msg) for f in self._fernets: try: - p = f._decrypt_data(data, timestamp, None) + p = f._decrypt_data(data, timestamp, None, None) break except InvalidToken: pass @@ -163,9 +170,12 @@ def rotate(self, msg): return self._fernets[0]._encrypt_from_parts(p, timestamp, iv) def decrypt(self, msg, ttl=None): + return self.decrypt_at_time(msg, ttl, int(time.time())) + + def decrypt_at_time(self, msg, ttl, current_time): for f in self._fernets: try: - return f.decrypt(msg, ttl) + return f.decrypt_at_time(msg, ttl, current_time) except InvalidToken: pass raise InvalidToken diff --git a/tests/test_fernet.py b/tests/test_fernet.py index 75ecc356a913..da2096fb8fe1 100644 --- a/tests/test_fernet.py +++ b/tests/test_fernet.py @@ -6,7 +6,6 @@ import base64 import calendar -import datetime import json import os import time @@ -70,6 +69,10 @@ def test_verify(self, secret, now, src, ttl_sec, token, backend, monkeypatch): f = Fernet(secret.encode("ascii"), backend=backend) current_time = calendar.timegm(iso8601.parse_date(now).utctimetuple()) + payload = f.decrypt_at_time( + token.encode("ascii"), ttl=ttl_sec, current_time=current_time, + ) + assert payload == src.encode("ascii") monkeypatch.setattr(time, "time", lambda: current_time) payload = f.decrypt(token.encode("ascii"), ttl=ttl_sec) assert payload == src.encode("ascii") @@ -78,6 +81,10 @@ def test_verify(self, secret, now, src, ttl_sec, token, backend, def test_invalid(self, secret, token, now, ttl_sec, backend, monkeypatch): f = Fernet(secret.encode("ascii"), backend=backend) current_time = calendar.timegm(iso8601.parse_date(now).utctimetuple()) + with pytest.raises(InvalidToken): + f.decrypt_at_time( + token.encode("ascii"), ttl=ttl_sec, current_time=current_time, + ) monkeypatch.setattr(time, "time", lambda: current_time) with pytest.raises(InvalidToken): f.decrypt(token.encode("ascii"), ttl=ttl_sec) @@ -110,6 +117,8 @@ def test_timestamp_ignored_no_ttl(self, monkeypatch, backend): token = f.encrypt(pt) ts = "1985-10-26T01:20:01-07:00" current_time = calendar.timegm(iso8601.parse_date(ts).utctimetuple()) + assert f.decrypt_at_time( + token, ttl=None, current_time=current_time) == pt monkeypatch.setattr(time, "time", lambda: current_time) assert f.decrypt(token, ttl=None) == pt @@ -125,8 +134,7 @@ def test_bad_key(self, backend): def test_extract_timestamp(self, monkeypatch, backend): f = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) current_time = 1526138327 - monkeypatch.setattr(time, "time", lambda: current_time) - token = f.encrypt(b'encrypt me') + token = f.encrypt_at_time(b'encrypt me', current_time) assert f.extract_timestamp(token) == current_time with pytest.raises(InvalidToken): f.extract_timestamp(b"nonsensetoken") @@ -195,18 +203,14 @@ def test_rotate_preserves_timestamp(self, backend, monkeypatch): mf2 = MultiFernet([f2, f1]) plaintext = b"abc" - mf1_ciphertext = mf1.encrypt(plaintext) - - later = datetime.datetime.now() + datetime.timedelta(minutes=5) - later_time = time.mktime(later.timetuple()) - monkeypatch.setattr(time, "time", lambda: later_time) + original_time = int(time.time()) - 5 * 60 + mf1_ciphertext = mf1.encrypt_at_time(plaintext, original_time) - original_time, _ = Fernet._get_unverified_token_data(mf1_ciphertext) rotated_time, _ = Fernet._get_unverified_token_data( mf2.rotate(mf1_ciphertext) ) - assert later_time != rotated_time + assert int(time.time()) != rotated_time assert original_time == rotated_time def test_rotate_decrypt_no_shared_keys(self, backend): From 0b036170842e33c98f2132c9ba00ff97f07c709f Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Mon, 15 Jun 2020 00:12:06 +0300 Subject: [PATCH 840/988] Unify X.509 signature algorithm validation (#5276) - Use common implementation - OCSP signing was using different validation - Check if private key is usable for signing --- .../hazmat/backends/openssl/backend.py | 55 ++++++------------- src/cryptography/x509/ocsp.py | 10 ---- tests/x509/test_x509.py | 55 +++++++++++++++++++ 3 files changed, 72 insertions(+), 48 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 0a6b7bc3c164..952c0f653080 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -732,26 +732,33 @@ def cmac_algorithm_supported(self, algorithm): def create_cmac_ctx(self, algorithm): return _CMACContext(self, algorithm) - def create_x509_csr(self, builder, private_key, algorithm): - if not isinstance(builder, x509.CertificateSigningRequestBuilder): - raise TypeError('Builder type mismatch.') - + def _x509_check_signature_params(self, private_key, algorithm): if isinstance(private_key, (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): if algorithm is not None: raise ValueError( "algorithm must be None when signing via ed25519 or ed448" ) + elif not isinstance(private_key, (rsa.RSAPrivateKey, dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey)): + raise TypeError( + "Key must be rsa, dsa, ec, ed25519 or ed448 private key." + ) elif not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError('Algorithm must be a registered hash algorithm.') + raise TypeError("Algorithm must be a registered hash algorithm.") elif ( isinstance(algorithm, hashes.MD5) and not isinstance(private_key, rsa.RSAPrivateKey) ): raise ValueError( - "MD5 is not a supported hash algorithm for EC/DSA CSRs" + "MD5 hash algorithm is only supported with RSA keys" ) + def create_x509_csr(self, builder, private_key, algorithm): + if not isinstance(builder, x509.CertificateSigningRequestBuilder): + raise TypeError('Builder type mismatch.') + self._x509_check_signature_params(private_key, algorithm) + # Resolve the signature algorithm. evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) @@ -820,22 +827,7 @@ def create_x509_csr(self, builder, private_key, algorithm): def create_x509_certificate(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateBuilder): raise TypeError('Builder type mismatch.') - if isinstance(private_key, - (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): - if algorithm is not None: - raise ValueError( - "algorithm must be None when signing via ed25519 or ed448" - ) - elif not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError('Algorithm must be a registered hash algorithm.') - - if ( - isinstance(algorithm, hashes.MD5) and not - isinstance(private_key, rsa.RSAPrivateKey) - ): - raise ValueError( - "MD5 is only (reluctantly) supported for RSA certificates" - ) + self._x509_check_signature_params(private_key, algorithm) # Resolve the signature algorithm. evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) @@ -932,22 +924,7 @@ def _create_asn1_time(self, time): def create_x509_crl(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateRevocationListBuilder): raise TypeError('Builder type mismatch.') - if isinstance(private_key, - (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): - if algorithm is not None: - raise ValueError( - "algorithm must be None when signing via ed25519 or ed448" - ) - elif not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError('Algorithm must be a registered hash algorithm.') - - if ( - isinstance(algorithm, hashes.MD5) and not - isinstance(private_key, rsa.RSAPrivateKey) - ): - raise ValueError( - "MD5 is not a supported hash algorithm for EC/DSA CRLs" - ) + self._x509_check_signature_params(private_key, algorithm) evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) @@ -1559,6 +1536,8 @@ def create_ocsp_request(self, builder): return _OCSPRequest(self, ocsp_req) def _create_ocsp_basic_response(self, builder, private_key, algorithm): + self._x509_check_signature_params(private_key, algorithm) + basic = self._lib.OCSP_BASICRESP_new() self.openssl_assert(basic != self._ffi.NULL) basic = self._ffi.gc(basic, self._lib.OCSP_BASICRESP_free) diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 4e0c985a2025..7db92b905a25 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -12,7 +12,6 @@ from cryptography import x509 from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric import ed25519, ed448 from cryptography.x509.base import ( _EARLIEST_UTC_TIME, _convert_to_naive_utc_time, _reject_duplicate_extension ) @@ -242,15 +241,6 @@ def sign(self, private_key, algorithm): if self._responder_id is None: raise ValueError("You must add a responder_id before signing") - if isinstance(private_key, - (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): - if algorithm is not None: - raise ValueError( - "algorithm must be None when signing via ed25519 or ed448" - ) - elif not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError("Algorithm must be a registered hash algorithm.") - return backend.create_ocsp_response( OCSPResponseStatus.SUCCESSFUL, self, private_key, algorithm ) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 7c45660fbf28..38fe6bf8b20b 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -4674,6 +4674,61 @@ def test_load_pem_cert(self, backend): assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED448 +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestSignatureRejection(object): + """Test if signing rejects DH keys properly. + """ + def load_key(self, backend): + data = load_vectors_from_file( + os.path.join("asymmetric", "DH", "dhkey.pem"), + lambda pemfile: pemfile.read(), + mode="rb" + ) + return serialization.load_pem_private_key(data, None, backend) + + def test_crt_signing_check(self, backend): + issuer_private_key = self.load_key(backend) + public_key = RSA_KEY_2048.private_key(backend).public_key() + not_valid_before = datetime.datetime(2020, 1, 1, 1, 1) + not_valid_after = datetime.datetime(2050, 12, 31, 8, 30) + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + public_key + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + with pytest.raises(TypeError): + builder.sign(issuer_private_key, hashes.SHA256(), backend) + + def test_csr_signing_check(self, backend): + private_key = self.load_key(backend) + builder = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + ) + + with pytest.raises(TypeError): + builder.sign(private_key, hashes.SHA256(), backend) + + def test_crl_signing_check(self, backend): + private_key = self.load_key(backend) + last_time = datetime.datetime.utcnow().replace(microsecond=0) + next_time = last_time + builder = x509.CertificateRevocationListBuilder().issuer_name( + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"CA")]) + ).last_update(last_time).next_update(next_time) + + with pytest.raises(TypeError): + builder.sign(private_key, hashes.SHA256(), backend) + + def test_random_serial_number(monkeypatch): sample_data = os.urandom(20) From f0bc6620d9c6b3959c5830f65e149e4d044b7080 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 20 Jun 2020 18:39:22 -0400 Subject: [PATCH 841/988] Fix for linkcheck (#5281) * Fix for linkcheck * attempted linkcheck fix --- docs/development/test-vectors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 182df18877e4..9fca681b26b0 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -739,7 +739,7 @@ header format (substituting the correct information): .. _`root data`: https://hg.mozilla.org/projects/nss/file/25b2922cc564/security/nss/lib/ckfw/builtins/certdata.txt#l2053 .. _`asymmetric/public/PKCS1/dsa.pub.pem`: https://github.com/ruby/ruby/blob/4ccb387f3bc436a08fc6d72c4931994f5de95110/test/openssl/test_pkey_dsa.rb#L53 .. _`Mozilla bug`: https://bugzilla.mozilla.org/show_bug.cgi?id=233586 -.. _`Russian CA`: https://e-trust.gosuslugi.ru/MainCA +.. _`Russian CA`: https://e-trust.gosuslugi.ru/ .. _`test/evptests.txt`: https://github.com/openssl/openssl/blob/2d0b44126763f989a4cbffbffe9d0c7518158bb7/test/evptests.txt .. _`unknown signature OID`: https://bugzilla.mozilla.org/show_bug.cgi?id=405966 .. _`botan`: https://github.com/randombit/botan/blob/57789bdfc55061002b2727d0b32587612829a37c/src/tests/data/pubkey/dh.vec From 0f8626093cb90d7db97b37505a021b7a65ad5aeb Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Sun, 21 Jun 2020 03:06:26 +0300 Subject: [PATCH 842/988] Support OpenSSH private key serialization format (#5146) * ssh.py contains load/serialize code. * Add PrivateFormat.OpenSSH to .private_bytes() format. * Add load_ssh_private_key(). * Use new code for PublicFormat.OpenSSH too. * load_ssh_public_key() now supports reading signed public keys. * Supported algorithms: rsa, dsa, ec, ed25519. * Optional dependency on 'bcrypt' package via [ssh] extra --- .travis.yml | 4 + CHANGELOG.rst | 8 + docs/hazmat/primitives/asymmetric/dsa.rst | 3 +- docs/hazmat/primitives/asymmetric/ec.rst | 3 +- docs/hazmat/primitives/asymmetric/ed25519.rst | 6 +- docs/hazmat/primitives/asymmetric/rsa.rst | 3 +- .../primitives/asymmetric/serialization.rst | 76 +- setup.py | 3 + .../hazmat/backends/openssl/backend.py | 66 +- .../primitives/serialization/__init__.py | 5 +- .../hazmat/primitives/serialization/base.py | 1 + .../hazmat/primitives/serialization/ssh.py | 722 +++++++++++++++--- tests/hazmat/primitives/test_serialization.py | 539 ++++++++++++- tox.ini | 1 + 14 files changed, 1280 insertions(+), 160 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0271c0ded955..95485e6dc8ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,8 @@ matrix: dist: xenial - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l + - python: 2.7 + env: TOXENV=py27-ssh OPENSSL=1.1.0l - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.0l - python: 2.7 @@ -43,6 +45,8 @@ matrix: env: TOXENV=py38 OPENSSL=1.1.1g - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2" + - python: 3.8 + env: TOXENV=py38-ssh OPENSSL=1.1.1g - python: 3.8 env: TOXENV=py38 LIBRESSL=2.9.2 - python: 3.8 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d1715df37dc5..2211095634d4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,6 +18,14 @@ Changelog actually dropping support, however we strongly encourage all users to upgrade their Python, as Python 2 no longer receives support from the Python core team. +* Added support for ``OpenSSH`` serialization format for + ``ec``, ``ed25519``, ``rsa`` and ``dsa`` private keys: + :func:`~cryptography.hazmat.primitives.serialization.load_ssh_private_key` + for loading and + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.OpenSSH` + for writing. +* Added support for ``OpenSSH`` certificates to + :func:`~cryptography.hazmat.primitives.serialization.load_ssh_public_key`. .. _v2-9-2: diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index 7b0598693f3c..1456de4541dd 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -344,7 +344,8 @@ Key interfaces :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`), format ( - :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.TraditionalOpenSSL` + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.TraditionalOpenSSL`, + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.OpenSSH` or :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`) and encryption algorithm (such as diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index bd52aeee5e3e..3b344f66b739 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -647,7 +647,8 @@ Key Interfaces :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`), format ( - :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.TraditionalOpenSSL` + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.TraditionalOpenSSL`, + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.OpenSSH` or :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`) and encryption algorithm (such as diff --git a/docs/hazmat/primitives/asymmetric/ed25519.rst b/docs/hazmat/primitives/asymmetric/ed25519.rst index f9e007c54d7e..47d95ec1b9da 100644 --- a/docs/hazmat/primitives/asymmetric/ed25519.rst +++ b/docs/hazmat/primitives/asymmetric/ed25519.rst @@ -73,7 +73,8 @@ Key interfaces :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.Raw`) and format ( - :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8` + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`, + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.OpenSSH` or :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` ) are chosen to define the exact serialization. @@ -88,7 +89,8 @@ Key interfaces then ``format`` must be :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.Raw` , otherwise it must be - :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`. + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8` or + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.OpenSSH`. :param encryption_algorithm: An instance of an object conforming to the :class:`~cryptography.hazmat.primitives.serialization.KeySerializationEncryption` diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index dab909646795..031acb9b978f 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -607,7 +607,8 @@ Key interfaces :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`), format ( - :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.TraditionalOpenSSL` + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.TraditionalOpenSSL`, + :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.OpenSSH` or :attr:`~cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8`) and encryption algorithm (such as diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 7c1fc82e5c5b..529f2a79e74d 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -373,10 +373,12 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than .. versionadded:: 0.7 - Deserialize a public key from OpenSSH (:rfc:`4253`) encoded data to an + Deserialize a public key from OpenSSH (:rfc:`4253` and + `PROTOCOL.certkeys`_) encoded data to an instance of the public key type for the specified backend. - :param bytes data: The OpenSSH encoded key data. + :param data: The OpenSSH encoded key data. + :type data: :term:`bytes-like` :param backend: A backend which implements :class:`~cryptography.hazmat.backends.interfaces.RSABackend`, @@ -398,6 +400,58 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than :raises cryptography.exceptions.UnsupportedAlgorithm: If the serialized key is of a type that is not supported. +OpenSSH Private Key +~~~~~~~~~~~~~~~~~~~ + +The format used by OpenSSH to store private keys, as approximately specified +in `PROTOCOL.key`_. + +An example ECDSA key in OpenSSH format:: + + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS + 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQRI0fWnI1CxX7qYqp0ih6bxjhGmUrZK + /Axf8vhM8Db3oH7CFR+JdL715lUdu4XCWvQZKVf60/h3kBFhuxQC23XjAAAAqKPzVaOj81 + WjAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEjR9acjULFfupiq + nSKHpvGOEaZStkr8DF/y+EzwNvegfsIVH4l0vvXmVR27hcJa9BkpV/rT+HeQEWG7FALbde + MAAAAga/VGV2asRlL3kXXao0aochQ59nXHA2xEGeAoQd952r0AAAAJbWFya29AdmZmAQID + BAUGBw== + -----END OPENSSH PRIVATE KEY----- + +.. function:: load_ssh_private_key(data, password, backend) + + .. versionadded:: 3.0 + + Deserialize a private key from OpenSSH encoded data to an + instance of the private key type for the specified backend. + + :param data: The PEM encoded OpenSSH private key data. + :type data: :term:`bytes-like` + + :param bytes password: Password bytes to use to decrypt + password-protected key. Or ``None`` if not needed. + + :param backend: A backend which implements + :class:`~cryptography.hazmat.backends.interfaces.RSABackend`, + :class:`~cryptography.hazmat.backends.interfaces.DSABackend`, or + :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend` + depending on the key's type. + + :returns: One of + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`, + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` + or + :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey`, + depending on the contents of ``data``. + + :raises ValueError: If the OpenSSH data could not be properly decoded, + if the key is not in the proper format or the incorrect password + was provided. + + :raises cryptography.exceptions.UnsupportedAlgorithm: If the serialized + key is of a type that is not supported. + PKCS12 ~~~~~~ @@ -483,6 +537,22 @@ Serialization Formats A raw format used by :doc:`/hazmat/primitives/asymmetric/x448`. It is a binary format and is invalid for other key types. + .. attribute:: OpenSSH + + .. versionadded:: 3.0 + + Custom private key format for OpenSSH, internals are based on SSH protocol + and not ASN1. Requires + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` + encoding. + + A PEM encoded OpenSSH key will look like:: + + -----BEGIN OPENSSH PRIVATE KEY----- + ... + -----END OPENSSH PRIVATE KEY----- + + .. class:: PublicFormat .. versionadded:: 0.8 @@ -645,3 +715,5 @@ Serialization Encryption Types .. _`PKCS3`: https://www.teletrust.de/fileadmin/files/oid/oid_pkcs-3v1-4.pdf .. _`SEC 1 v2.0`: https://www.secg.org/sec1-v2.pdf +.. _`PROTOCOL.key`: https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key +.. _`PROTOCOL.certkeys`: https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.certkeys diff --git a/setup.py b/setup.py index 87a47c15e51a..acefbbf930b4 100644 --- a/setup.py +++ b/setup.py @@ -259,6 +259,9 @@ def run(self): "flake8-import-order", "pep8-naming", ], + # This extra is for OpenSSH private keys that use bcrypt KDF + # Versions: v3.1.3 - ignore_few_rounds, v3.1.5 - abi3 + "ssh": ["bcrypt >= 3.1.5"], # This extra is for the U-label support that was deprecated in # cryptography 2.1. If you need this deprecated path install with # pip install cryptography[idna] diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 952c0f653080..9ca75d8b96ba 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -4,7 +4,6 @@ from __future__ import absolute_import, division, print_function -import base64 import collections import contextlib import itertools @@ -1807,6 +1806,16 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, "Unsupported encoding for TraditionalOpenSSL" ) + # OpenSSH + PEM + if format is serialization.PrivateFormat.OpenSSH: + if encoding is serialization.Encoding.PEM: + return ssh.serialize_ssh_private_key(key, password) + + raise ValueError( + "OpenSSH private key format can only be used" + " with PEM encoding" + ) + # Anything that key-specific code was supposed to handle earlier, # like Raw. raise ValueError("format is invalid with this key") @@ -1874,7 +1883,7 @@ def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): # OpenSSH + OpenSSH if format is serialization.PublicFormat.OpenSSH: if encoding is serialization.Encoding.OpenSSH: - return self._openssh_public_key_bytes(key) + return ssh.serialize_ssh_public_key(key) raise ValueError( "OpenSSH format must be used with OpenSSH encoding" @@ -1884,59 +1893,6 @@ def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): # like Raw, CompressedPoint, UncompressedPoint raise ValueError("format is invalid with this key") - def _openssh_public_key_bytes(self, key): - if isinstance(key, rsa.RSAPublicKey): - public_numbers = key.public_numbers() - return b"ssh-rsa " + base64.b64encode( - ssh._ssh_write_string(b"ssh-rsa") + - ssh._ssh_write_mpint(public_numbers.e) + - ssh._ssh_write_mpint(public_numbers.n) - ) - elif isinstance(key, dsa.DSAPublicKey): - public_numbers = key.public_numbers() - parameter_numbers = public_numbers.parameter_numbers - return b"ssh-dss " + base64.b64encode( - ssh._ssh_write_string(b"ssh-dss") + - ssh._ssh_write_mpint(parameter_numbers.p) + - ssh._ssh_write_mpint(parameter_numbers.q) + - ssh._ssh_write_mpint(parameter_numbers.g) + - ssh._ssh_write_mpint(public_numbers.y) - ) - elif isinstance(key, ed25519.Ed25519PublicKey): - raw_bytes = key.public_bytes(serialization.Encoding.Raw, - serialization.PublicFormat.Raw) - return b"ssh-ed25519 " + base64.b64encode( - ssh._ssh_write_string(b"ssh-ed25519") + - ssh._ssh_write_string(raw_bytes) - ) - elif isinstance(key, ec.EllipticCurvePublicKey): - public_numbers = key.public_numbers() - try: - curve_name = { - ec.SECP256R1: b"nistp256", - ec.SECP384R1: b"nistp384", - ec.SECP521R1: b"nistp521", - }[type(public_numbers.curve)] - except KeyError: - raise ValueError( - "Only SECP256R1, SECP384R1, and SECP521R1 curves are " - "supported by the SSH public key format" - ) - - point = key.public_bytes( - serialization.Encoding.X962, - serialization.PublicFormat.UncompressedPoint - ) - return b"ecdsa-sha2-" + curve_name + b" " + base64.b64encode( - ssh._ssh_write_string(b"ecdsa-sha2-" + curve_name) + - ssh._ssh_write_string(curve_name) + - ssh._ssh_write_string(point) - ) - else: - raise ValueError( - "OpenSSH encoding is not supported for this key type" - ) - def _parameter_bytes(self, encoding, format, cdata): if encoding is serialization.Encoding.OpenSSH: raise TypeError( diff --git a/src/cryptography/hazmat/primitives/serialization/__init__.py b/src/cryptography/hazmat/primitives/serialization/__init__.py index b910751b0422..87e89c1f8cf5 100644 --- a/src/cryptography/hazmat/primitives/serialization/__init__.py +++ b/src/cryptography/hazmat/primitives/serialization/__init__.py @@ -11,14 +11,15 @@ load_pem_parameters, load_pem_private_key, load_pem_public_key, ) from cryptography.hazmat.primitives.serialization.ssh import ( - load_ssh_public_key + load_ssh_private_key, load_ssh_public_key, ) __all__ = [ "load_der_parameters", "load_der_private_key", "load_der_public_key", "load_pem_parameters", "load_pem_private_key", "load_pem_public_key", - "load_ssh_public_key", "Encoding", "PrivateFormat", "PublicFormat", + "load_ssh_private_key", "load_ssh_public_key", + "Encoding", "PrivateFormat", "PublicFormat", "ParameterFormat", "KeySerializationEncryption", "BestAvailableEncryption", "NoEncryption", ] diff --git a/src/cryptography/hazmat/primitives/serialization/base.py b/src/cryptography/hazmat/primitives/serialization/base.py index 4218ea8244ee..b8cca0f0a2a1 100644 --- a/src/cryptography/hazmat/primitives/serialization/base.py +++ b/src/cryptography/hazmat/primitives/serialization/base.py @@ -48,6 +48,7 @@ class PrivateFormat(Enum): PKCS8 = "PKCS8" TraditionalOpenSSL = "TraditionalOpenSSL" Raw = "Raw" + OpenSSH = "OpenSSH" class PublicFormat(Enum): diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index a1d6c8c9fcc2..3971a8b84eda 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -4,150 +4,682 @@ from __future__ import absolute_import, division, print_function -import base64 +import binascii +import os +import re import struct import six from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes +from cryptography.hazmat.primitives.serialization import ( + Encoding, NoEncryption, PrivateFormat, PublicFormat, +) +try: + from bcrypt import kdf as _bcrypt_kdf + _bcrypt_supported = True +except ImportError: + _bcrypt_supported = False + + def _bcrypt_kdf(*args, **kwargs): + raise UnsupportedAlgorithm("Need bcrypt module") + +try: + from base64 import encodebytes as _base64_encode +except ImportError: + from base64 import encodestring as _base64_encode + +_SSH_ED25519 = b"ssh-ed25519" +_SSH_RSA = b"ssh-rsa" +_SSH_DSA = b"ssh-dss" +_ECDSA_NISTP256 = b"ecdsa-sha2-nistp256" +_ECDSA_NISTP384 = b"ecdsa-sha2-nistp384" +_ECDSA_NISTP521 = b"ecdsa-sha2-nistp521" +_CERT_SUFFIX = b"-cert-v01@openssh.com" + +_SSH_PUBKEY_RC = re.compile(br"\A(\S+)[ \t]+(\S+)") +_SK_MAGIC = b"openssh-key-v1\0" +_SK_START = b"-----BEGIN OPENSSH PRIVATE KEY-----" +_SK_END = b"-----END OPENSSH PRIVATE KEY-----" +_BCRYPT = b"bcrypt" +_NONE = b"none" +_DEFAULT_CIPHER = b"aes256-ctr" +_DEFAULT_ROUNDS = 16 +_MAX_PASSWORD = 72 + +# re is only way to work on bytes-like data +_PEM_RC = re.compile(_SK_START + b"(.*?)" + _SK_END, re.DOTALL) + +# padding for max blocksize +_PADDING = memoryview(bytearray(range(1, 1 + 16))) + +# ciphers that are actually used in key wrapping +_SSH_CIPHERS = { + b"aes256-ctr": (algorithms.AES, 32, modes.CTR, 16), + b"aes256-cbc": (algorithms.AES, 32, modes.CBC, 16), +} + +# map local curve name to key type +_ECDSA_KEY_TYPE = { + "secp256r1": _ECDSA_NISTP256, + "secp384r1": _ECDSA_NISTP384, + "secp521r1": _ECDSA_NISTP521, +} + +_U32 = struct.Struct(b">I") +_U64 = struct.Struct(b">Q") + + +def _ecdsa_key_type(public_key): + """Return SSH key_type and curve_name for private key.""" + curve = public_key.curve + if curve.name not in _ECDSA_KEY_TYPE: + raise ValueError( + "Unsupported curve for ssh private key: %r" % curve.name + ) + return _ECDSA_KEY_TYPE[curve.name] -def load_ssh_public_key(data, backend): - key_parts = data.split(b' ', 2) +def _ssh_pem_encode(data, prefix=_SK_START + b"\n", suffix=_SK_END + b"\n"): + return b"".join([prefix, _base64_encode(data), suffix]) - if len(key_parts) < 2: - raise ValueError( - 'Key is not in the proper format or contains extra data.') - - key_type = key_parts[0] - - if key_type == b'ssh-rsa': - loader = _load_ssh_rsa_public_key - elif key_type == b'ssh-dss': - loader = _load_ssh_dss_public_key - elif key_type in [ - b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', - ]: - loader = _load_ssh_ecdsa_public_key - elif key_type == b'ssh-ed25519': - loader = _load_ssh_ed25519_public_key - else: - raise UnsupportedAlgorithm('Key type is not supported.') - - key_body = key_parts[1] - try: - decoded_data = base64.b64decode(key_body) - except TypeError: - raise ValueError('Key is not in the proper format.') +def _check_block_size(data, block_len): + """Require data to be full blocks + """ + if not data or len(data) % block_len != 0: + raise ValueError("Corrupt data: missing padding") - inner_key_type, rest = _ssh_read_next_string(decoded_data) - if inner_key_type != key_type: - raise ValueError( - 'Key header and key body contain different key type values.' - ) +def _check_empty(data): + """All data should have been parsed. + """ + if data: + raise ValueError("Corrupt data: unparsed data") - return loader(key_type, rest, backend) +def _init_cipher(ciphername, password, salt, rounds, backend): + """Generate key + iv and return cipher. + """ + if not password: + raise ValueError("Key is password-protected.") -def _load_ssh_rsa_public_key(key_type, decoded_data, backend): - e, rest = _ssh_read_next_mpint(decoded_data) - n, rest = _ssh_read_next_mpint(rest) + algo, key_len, mode, iv_len = _SSH_CIPHERS[ciphername] + seed = _bcrypt_kdf(password, salt, key_len + iv_len, rounds, True) + return Cipher(algo(seed[:key_len]), mode(seed[key_len:]), backend) - if rest: - raise ValueError('Key body contains extra bytes.') - return rsa.RSAPublicNumbers(e, n).public_key(backend) +def _get_u32(data): + """Uint32""" + if len(data) < 4: + raise ValueError("Invalid data") + return _U32.unpack(data[:4])[0], data[4:] -def _load_ssh_dss_public_key(key_type, decoded_data, backend): - p, rest = _ssh_read_next_mpint(decoded_data) - q, rest = _ssh_read_next_mpint(rest) - g, rest = _ssh_read_next_mpint(rest) - y, rest = _ssh_read_next_mpint(rest) +def _get_u64(data): + """Uint64""" + if len(data) < 8: + raise ValueError("Invalid data") + return _U64.unpack(data[:8])[0], data[8:] - if rest: - raise ValueError('Key body contains extra bytes.') - parameter_numbers = dsa.DSAParameterNumbers(p, q, g) - public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) +def _get_sshstr(data): + """Bytes with u32 length prefix""" + n, data = _get_u32(data) + if n > len(data): + raise ValueError("Invalid data") + return data[:n], data[n:] - return public_numbers.public_key(backend) +def _get_mpint(data): + """Big integer.""" + val, data = _get_sshstr(data) + if val and six.indexbytes(val, 0) > 0x7F: + raise ValueError("Invalid data") + return utils.int_from_bytes(val, 'big'), data -def _load_ssh_ecdsa_public_key(expected_key_type, decoded_data, backend): - curve_name, rest = _ssh_read_next_string(decoded_data) - data, rest = _ssh_read_next_string(rest) - if expected_key_type != b"ecdsa-sha2-" + curve_name: - raise ValueError( - 'Key header and key body contain different key type values.' - ) +def _to_mpint(val): + """Storage format for signed bigint. + """ + if val < 0: + raise ValueError("negative mpint not allowed") + if not val: + return b"" + nbytes = (val.bit_length() + 8) // 8 + return utils.int_to_bytes(val, nbytes) - if rest: - raise ValueError('Key body contains extra bytes.') - curve = { - b"nistp256": ec.SECP256R1, - b"nistp384": ec.SECP384R1, - b"nistp521": ec.SECP521R1, - }[curve_name]() +class _FragList(object): + """Build recursive structure without data copy. + """ + def __init__(self, init=None): + self.flist = [] + if init: + self.flist.extend(init) + + def put_raw(self, val): + """Add plain bytes""" + self.flist.append(val) + + def put_u32(self, val): + """Big-endian uint32""" + self.flist.append(_U32.pack(val)) + + def put_sshstr(self, val): + """Bytes prefixed with u32 length""" + if isinstance(val, (bytes, memoryview, bytearray)): + self.put_u32(len(val)) + self.flist.append(val) + else: + self.put_u32(val.size()) + self.flist.extend(val.flist) + + def put_mpint(self, val): + """Big-endian bigint prefixed with u32 length""" + self.put_sshstr(_to_mpint(val)) + + def size(self): + """Current number of bytes""" + return sum(map(len, self.flist)) + + def render(self, dstbuf, pos=0): + """Write into bytearray""" + for frag in self.flist: + flen = len(frag) + start, pos = pos, pos + flen + dstbuf[start:pos] = frag + return pos + + def tobytes(self): + """Return as bytes""" + buf = memoryview(bytearray(self.size())) + self.render(buf) + return buf.tobytes() + + +class _SSHFormatRSA(object): + """Format for RSA keys. + + Public: + mpint e, n + Private: + mpint n, e, d, iqmp, p, q + """ - if six.indexbytes(data, 0) != 4: - raise NotImplementedError( - "Compressed elliptic curve points are not supported" + def get_public(self, data): + """RSA public fields""" + e, data = _get_mpint(data) + n, data = _get_mpint(data) + return (e, n), data + + def load_public(self, key_type, data, backend): + """Make RSA public key from data.""" + (e, n), data = self.get_public(data) + public_numbers = rsa.RSAPublicNumbers(e, n) + public_key = public_numbers.public_key(backend) + return public_key, data + + def load_private(self, data, pubfields, backend): + """Make RSA private key from data.""" + n, data = _get_mpint(data) + e, data = _get_mpint(data) + d, data = _get_mpint(data) + iqmp, data = _get_mpint(data) + p, data = _get_mpint(data) + q, data = _get_mpint(data) + + if (e, n) != pubfields: + raise ValueError("Corrupt data: rsa field mismatch") + dmp1 = rsa.rsa_crt_dmp1(d, p) + dmq1 = rsa.rsa_crt_dmq1(d, q) + public_numbers = rsa.RSAPublicNumbers(e, n) + private_numbers = rsa.RSAPrivateNumbers( + p, q, d, dmp1, dmq1, iqmp, public_numbers ) + private_key = private_numbers.private_key(backend) + return private_key, data - return ec.EllipticCurvePublicKey.from_encoded_point(curve, data) + def encode_public(self, public_key, f_pub): + """Write RSA public key""" + pubn = public_key.public_numbers() + f_pub.put_mpint(pubn.e) + f_pub.put_mpint(pubn.n) + def encode_private(self, private_key, f_priv): + """Write RSA private key""" + private_numbers = private_key.private_numbers() + public_numbers = private_numbers.public_numbers -def _load_ssh_ed25519_public_key(expected_key_type, decoded_data, backend): - data, rest = _ssh_read_next_string(decoded_data) + f_priv.put_mpint(public_numbers.n) + f_priv.put_mpint(public_numbers.e) - if rest: - raise ValueError('Key body contains extra bytes.') + f_priv.put_mpint(private_numbers.d) + f_priv.put_mpint(private_numbers.iqmp) + f_priv.put_mpint(private_numbers.p) + f_priv.put_mpint(private_numbers.q) - return ed25519.Ed25519PublicKey.from_public_bytes(data) +class _SSHFormatDSA(object): + """Format for DSA keys. -def _ssh_read_next_string(data): + Public: + mpint p, q, g, y + Private: + mpint p, q, g, y, x """ - Retrieves the next RFC 4251 string value from the data. - While the RFC calls these strings, in Python they are bytes objects. + def get_public(self, data): + """DSA public fields""" + p, data = _get_mpint(data) + q, data = _get_mpint(data) + g, data = _get_mpint(data) + y, data = _get_mpint(data) + return (p, q, g, y), data + + def load_public(self, key_type, data, backend): + """Make DSA public key from data.""" + (p, q, g, y), data = self.get_public(data) + parameter_numbers = dsa.DSAParameterNumbers(p, q, g) + public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) + self._validate(public_numbers) + public_key = public_numbers.public_key(backend) + return public_key, data + + def load_private(self, data, pubfields, backend): + """Make DSA private key from data.""" + (p, q, g, y), data = self.get_public(data) + x, data = _get_mpint(data) + + if (p, q, g, y) != pubfields: + raise ValueError("Corrupt data: dsa field mismatch") + parameter_numbers = dsa.DSAParameterNumbers(p, q, g) + public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) + self._validate(public_numbers) + private_numbers = dsa.DSAPrivateNumbers(x, public_numbers) + private_key = private_numbers.private_key(backend) + return private_key, data + + def encode_public(self, public_key, f_pub): + """Write DSA public key""" + public_numbers = public_key.public_numbers() + parameter_numbers = public_numbers.parameter_numbers + self._validate(public_numbers) + + f_pub.put_mpint(parameter_numbers.p) + f_pub.put_mpint(parameter_numbers.q) + f_pub.put_mpint(parameter_numbers.g) + f_pub.put_mpint(public_numbers.y) + + def encode_private(self, private_key, f_priv): + """Write DSA private key""" + self.encode_public(private_key.public_key(), f_priv) + f_priv.put_mpint(private_key.private_numbers().x) + + def _validate(self, public_numbers): + parameter_numbers = public_numbers.parameter_numbers + if parameter_numbers.p.bit_length() != 1024: + raise ValueError("SSH supports only 1024 bit DSA keys") + + +class _SSHFormatECDSA(object): + """Format for ECDSA keys. + + Public: + str curve + bytes point + Private: + str curve + bytes point + mpint secret """ - if len(data) < 4: - raise ValueError("Key is not in the proper format") - str_len, = struct.unpack('>I', data[:4]) - if len(data) < str_len + 4: - raise ValueError("Key is not in the proper format") + def __init__(self, ssh_curve_name, curve): + self.ssh_curve_name = ssh_curve_name + self.curve = curve + + def get_public(self, data): + """ECDSA public fields""" + curve, data = _get_sshstr(data) + point, data = _get_sshstr(data) + if curve != self.ssh_curve_name: + raise ValueError("Curve name mismatch") + if six.indexbytes(point, 0) != 4: + raise NotImplementedError("Need uncompressed point") + return (curve, point), data + + def load_public(self, key_type, data, backend): + """Make ECDSA public key from data.""" + (curve_name, point), data = self.get_public(data) + public_key = ec.EllipticCurvePublicKey.from_encoded_point( + self.curve, point.tobytes() + ) + return public_key, data + + def load_private(self, data, pubfields, backend): + """Make ECDSA private key from data.""" + (curve_name, point), data = self.get_public(data) + secret, data = _get_mpint(data) + + if (curve_name, point) != pubfields: + raise ValueError("Corrupt data: ecdsa field mismatch") + private_key = ec.derive_private_key(secret, self.curve, backend) + return private_key, data + + def encode_public(self, public_key, f_pub): + """Write ECDSA public key""" + point = public_key.public_bytes( + Encoding.X962, PublicFormat.UncompressedPoint + ) + f_pub.put_sshstr(self.ssh_curve_name) + f_pub.put_sshstr(point) + + def encode_private(self, private_key, f_priv): + """Write ECDSA private key""" + public_key = private_key.public_key() + private_numbers = private_key.private_numbers() + + self.encode_public(public_key, f_priv) + f_priv.put_mpint(private_numbers.private_value) - return data[4:4 + str_len], data[4 + str_len:] +class _SSHFormatEd25519(object): + """Format for Ed25519 keys. -def _ssh_read_next_mpint(data): + Public: + bytes point + Private: + bytes point + bytes secret_and_point """ - Reads the next mpint from the data. - Currently, all mpints are interpreted as unsigned. + def get_public(self, data): + """Ed25519 public fields""" + point, data = _get_sshstr(data) + return (point,), data + + def load_public(self, key_type, data, backend): + """Make Ed25519 public key from data.""" + (point,), data = self.get_public(data) + public_key = ed25519.Ed25519PublicKey.from_public_bytes( + point.tobytes() + ) + return public_key, data + + def load_private(self, data, pubfields, backend): + """Make Ed25519 private key from data.""" + (point,), data = self.get_public(data) + keypair, data = _get_sshstr(data) + + secret = keypair[:32] + point2 = keypair[32:] + if point != point2 or (point,) != pubfields: + raise ValueError("Corrupt data: ed25519 field mismatch") + private_key = ed25519.Ed25519PrivateKey.from_private_bytes(secret) + return private_key, data + + def encode_public(self, public_key, f_pub): + """Write Ed25519 public key""" + raw_public_key = public_key.public_bytes( + Encoding.Raw, PublicFormat.Raw + ) + f_pub.put_sshstr(raw_public_key) + + def encode_private(self, private_key, f_priv): + """Write Ed25519 private key""" + public_key = private_key.public_key() + raw_private_key = private_key.private_bytes( + Encoding.Raw, PrivateFormat.Raw, NoEncryption() + ) + raw_public_key = public_key.public_bytes( + Encoding.Raw, PublicFormat.Raw + ) + f_keypair = _FragList([raw_private_key, raw_public_key]) + + self.encode_public(public_key, f_priv) + f_priv.put_sshstr(f_keypair) + + +_KEY_FORMATS = { + _SSH_RSA: _SSHFormatRSA(), + _SSH_DSA: _SSHFormatDSA(), + _SSH_ED25519: _SSHFormatEd25519(), + _ECDSA_NISTP256: _SSHFormatECDSA(b"nistp256", ec.SECP256R1()), + _ECDSA_NISTP384: _SSHFormatECDSA(b"nistp384", ec.SECP384R1()), + _ECDSA_NISTP521: _SSHFormatECDSA(b"nistp521", ec.SECP521R1()), +} + + +def _lookup_kformat(key_type): + """Return valid format or throw error """ - mpint_data, rest = _ssh_read_next_string(data) + if not isinstance(key_type, bytes): + key_type = memoryview(key_type).tobytes() + if key_type in _KEY_FORMATS: + return _KEY_FORMATS[key_type] + raise UnsupportedAlgorithm("Unsupported key type: %r" % key_type) - return ( - utils.int_from_bytes(mpint_data, byteorder='big', signed=False), rest - ) + +def load_ssh_private_key(data, password, backend): + """Load private key from OpenSSH custom encoding. + """ + utils._check_byteslike("data", data) + if password is not None: + utils._check_bytes("password", password) + + m = _PEM_RC.search(data) + if not m: + raise ValueError("Not OpenSSH private key format") + p1 = m.start(1) + p2 = m.end(1) + data = binascii.a2b_base64(memoryview(data)[p1:p2]) + if not data.startswith(_SK_MAGIC): + raise ValueError("Not OpenSSH private key format") + data = memoryview(data)[len(_SK_MAGIC):] + + # parse header + ciphername, data = _get_sshstr(data) + kdfname, data = _get_sshstr(data) + kdfoptions, data = _get_sshstr(data) + nkeys, data = _get_u32(data) + if nkeys != 1: + raise ValueError("Only one key supported") + + # load public key data + pubdata, data = _get_sshstr(data) + pub_key_type, pubdata = _get_sshstr(pubdata) + kformat = _lookup_kformat(pub_key_type) + pubfields, pubdata = kformat.get_public(pubdata) + _check_empty(pubdata) + + # load secret data + edata, data = _get_sshstr(data) + _check_empty(data) + + if (ciphername, kdfname) != (_NONE, _NONE): + ciphername = ciphername.tobytes() + if ciphername not in _SSH_CIPHERS: + raise UnsupportedAlgorithm("Unsupported cipher: %r" % ciphername) + if kdfname != _BCRYPT: + raise UnsupportedAlgorithm("Unsupported KDF: %r" % kdfname) + blklen = _SSH_CIPHERS[ciphername][3] + _check_block_size(edata, blklen) + salt, kbuf = _get_sshstr(kdfoptions) + rounds, kbuf = _get_u32(kbuf) + _check_empty(kbuf) + ciph = _init_cipher( + ciphername, password, salt.tobytes(), rounds, backend + ) + edata = memoryview(ciph.decryptor().update(edata)) + else: + blklen = 8 + _check_block_size(edata, blklen) + ck1, edata = _get_u32(edata) + ck2, edata = _get_u32(edata) + if ck1 != ck2: + raise ValueError("Corrupt data: broken checksum") + + # load per-key struct + key_type, edata = _get_sshstr(edata) + if key_type != pub_key_type: + raise ValueError("Corrupt data: key type mismatch") + private_key, edata = kformat.load_private(edata, pubfields, backend) + comment, edata = _get_sshstr(edata) + + # yes, SSH does padding check *after* all other parsing is done. + # need to follow as it writes zero-byte padding too. + if edata != _PADDING[:len(edata)]: + raise ValueError("Corrupt data: invalid padding") + + return private_key + + +def serialize_ssh_private_key(private_key, password=None): + """Serialize private key with OpenSSH custom encoding. + """ + if password is not None: + utils._check_bytes("password", password) + if password and len(password) > _MAX_PASSWORD: + raise ValueError( + "Passwords longer than 72 bytes are not supported by " + "OpenSSH private key format" + ) + + if isinstance(private_key, ec.EllipticCurvePrivateKey): + key_type = _ecdsa_key_type(private_key.public_key()) + elif isinstance(private_key, rsa.RSAPrivateKey): + key_type = _SSH_RSA + elif isinstance(private_key, dsa.DSAPrivateKey): + key_type = _SSH_DSA + elif isinstance(private_key, ed25519.Ed25519PrivateKey): + key_type = _SSH_ED25519 + else: + raise ValueError("Unsupported key type") + kformat = _lookup_kformat(key_type) + + # setup parameters + f_kdfoptions = _FragList() + if password: + ciphername = _DEFAULT_CIPHER + blklen = _SSH_CIPHERS[ciphername][3] + kdfname = _BCRYPT + rounds = _DEFAULT_ROUNDS + salt = os.urandom(16) + f_kdfoptions.put_sshstr(salt) + f_kdfoptions.put_u32(rounds) + ciph = _init_cipher( + ciphername, password, salt, rounds, default_backend() + ) + else: + ciphername = kdfname = _NONE + blklen = 8 + ciph = None + nkeys = 1 + checkval = os.urandom(4) + comment = b"" + + # encode public and private parts together + f_public_key = _FragList() + f_public_key.put_sshstr(key_type) + kformat.encode_public(private_key.public_key(), f_public_key) + + f_secrets = _FragList([checkval, checkval]) + f_secrets.put_sshstr(key_type) + kformat.encode_private(private_key, f_secrets) + f_secrets.put_sshstr(comment) + f_secrets.put_raw(_PADDING[:blklen - (f_secrets.size() % blklen)]) + + # top-level structure + f_main = _FragList() + f_main.put_raw(_SK_MAGIC) + f_main.put_sshstr(ciphername) + f_main.put_sshstr(kdfname) + f_main.put_sshstr(f_kdfoptions) + f_main.put_u32(nkeys) + f_main.put_sshstr(f_public_key) + f_main.put_sshstr(f_secrets) + + # copy result info bytearray + slen = f_secrets.size() + mlen = f_main.size() + buf = memoryview(bytearray(mlen + blklen)) + f_main.render(buf) + ofs = mlen - slen + + # encrypt in-place + if ciph is not None: + ciph.encryptor().update_into(buf[ofs:mlen], buf[ofs:]) + + txt = _ssh_pem_encode(buf[:mlen]) + buf[ofs:mlen] = bytearray(slen) + return txt -def _ssh_write_string(data): - return struct.pack(">I", len(data)) + data +def load_ssh_public_key(data, backend): + """Load public key from OpenSSH one-line format. + """ + utils._check_byteslike("data", data) + + m = _SSH_PUBKEY_RC.match(data) + if not m: + raise ValueError("Invalid line format") + key_type = orig_key_type = m.group(1) + key_body = m.group(2) + with_cert = False + if _CERT_SUFFIX == key_type[-len(_CERT_SUFFIX):]: + with_cert = True + key_type = key_type[:-len(_CERT_SUFFIX)] + kformat = _lookup_kformat(key_type) + + try: + data = memoryview(binascii.a2b_base64(key_body)) + except (TypeError, binascii.Error): + raise ValueError("Invalid key format") + + inner_key_type, data = _get_sshstr(data) + if inner_key_type != orig_key_type: + raise ValueError("Invalid key format") + if with_cert: + nonce, data = _get_sshstr(data) + public_key, data = kformat.load_public(key_type, data, backend) + if with_cert: + serial, data = _get_u64(data) + cctype, data = _get_u32(data) + key_id, data = _get_sshstr(data) + principals, data = _get_sshstr(data) + valid_after, data = _get_u64(data) + valid_before, data = _get_u64(data) + crit_options, data = _get_sshstr(data) + extensions, data = _get_sshstr(data) + reserved, data = _get_sshstr(data) + sig_key, data = _get_sshstr(data) + signature, data = _get_sshstr(data) + _check_empty(data) + return public_key + + +def serialize_ssh_public_key(public_key): + """One-line public key format for OpenSSH + """ + if isinstance(public_key, ec.EllipticCurvePublicKey): + key_type = _ecdsa_key_type(public_key) + elif isinstance(public_key, rsa.RSAPublicKey): + key_type = _SSH_RSA + elif isinstance(public_key, dsa.DSAPublicKey): + key_type = _SSH_DSA + elif isinstance(public_key, ed25519.Ed25519PublicKey): + key_type = _SSH_ED25519 + else: + raise ValueError("Unsupported key type") + kformat = _lookup_kformat(key_type) + f_pub = _FragList() + f_pub.put_sshstr(key_type) + kformat.encode_public(public_key, f_pub) -def _ssh_write_mpint(value): - data = utils.int_to_bytes(value) - if six.indexbytes(data, 0) & 0x80: - data = b"\x00" + data - return _ssh_write_string(data) + pub = binascii.b2a_base64(f_pub.tobytes()).strip() + return b"".join([key_type, b" ", pub]) diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 8e8e15af2c24..77f791abe324 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -11,6 +11,8 @@ import pytest +import six + from cryptography.exceptions import UnsupportedAlgorithm, _Reasons from cryptography.hazmat.backends.interfaces import ( DERSerializationBackend, DSABackend, EllipticCurveBackend, @@ -24,7 +26,8 @@ PrivateFormat, PublicFormat, load_der_parameters, load_der_private_key, load_der_public_key, load_pem_parameters, load_pem_private_key, - load_pem_public_key, load_ssh_public_key + load_pem_public_key, + load_ssh_private_key, load_ssh_public_key, ssh, ) @@ -33,6 +36,7 @@ _check_dsa_private_numbers, _check_rsa_private_numbers, load_vectors_from_file ) +from ...doubles import DummyKeySerializationEncryption from ...utils import raises_unsupported_algorithm @@ -1205,6 +1209,19 @@ def test_load_ssh_public_key_ecdsa_nist_p256(self, backend): expected_x, expected_y, ec.SECP256R1() ) + def test_load_ssh_public_key_byteslike(self, backend): + _skip_curve_unsupported(backend, ec.SECP256R1()) + + ssh_key = ( + b"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAy" + b"NTYAAABBBGG2MfkHXp0UkxUyllDzWNBAImsvt5t7pFtTXegZK2WbGxml8zMrgWi5" + b"teIg1TO03/FD9hbpBFgBeix3NrCFPls= root@cloud-server-01" + ) + assert load_ssh_public_key(bytearray(ssh_key), backend) + if six.PY3: + assert load_ssh_public_key(memoryview(ssh_key), backend) + assert load_ssh_public_key(memoryview(bytearray(ssh_key)), backend) + def test_load_ssh_public_key_ecdsa_nist_p384(self, backend): _skip_curve_unsupported(backend, ec.SECP384R1()) ssh_key = ( @@ -1500,6 +1517,17 @@ def test_openssl_serialization_unsupported(self, backend): Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), ) + def test_openssh_serialization_unsupported(self, backend): + key = x448.X448PrivateKey.generate() + with pytest.raises(ValueError): + key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption() + ) + @pytest.mark.supported( only_if=lambda backend: backend.x25519_supported(), @@ -1575,6 +1603,17 @@ def test_openssl_serialization_unsupported(self, backend): Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), ) + def test_openssh_serialization_unsupported(self, backend): + key = x25519.X25519PrivateKey.generate() + with pytest.raises(ValueError): + key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption() + ) + @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), @@ -1656,6 +1695,10 @@ def test_openssh_serialization_unsupported(self, backend): key.public_key().public_bytes( Encoding.OpenSSH, PublicFormat.OpenSSH, ) + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption(), + ) class TestDHSerialization(object): @@ -1709,3 +1752,497 @@ def test_dh_private_key(self, backend): continue with pytest.raises(ValueError): private_key.private_bytes(enc, fmt, NoEncryption()) + + +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.requires_backend_interface(interface=DSABackend) +@pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) +class TestOpenSSHSerialization(object): + @pytest.mark.parametrize( + ("key_file", "cert_file"), + [ + ("rsa-psw.key.pub", None), + ("rsa-nopsw.key.pub", "rsa-nopsw.key-cert.pub"), + ("dsa-psw.key.pub", None), + ("dsa-nopsw.key.pub", "dsa-nopsw.key-cert.pub"), + ("ecdsa-psw.key.pub", None), + ("ecdsa-nopsw.key.pub", "ecdsa-nopsw.key-cert.pub"), + ("ed25519-psw.key.pub", None), + ("ed25519-nopsw.key.pub", "ed25519-nopsw.key-cert.pub"), + ] + ) + def test_load_ssh_public_key(self, key_file, cert_file, backend): + if "ed25519" in key_file and not backend.ed25519_supported(): + pytest.skip("Requires OpenSSL with Ed25519 support") + + # normal public key + pub_data = load_vectors_from_file( + os.path.join("asymmetric", "OpenSSH", key_file), + lambda f: f.read(), + mode="rb" + ) + public_key = load_ssh_public_key(pub_data, backend) + nocomment_data = b" ".join(pub_data.split()[:2]) + assert public_key.public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + self.run_partial_pubkey(pub_data, backend) + + # parse public key with ssh certificate + if cert_file: + cert_data = load_vectors_from_file( + os.path.join("asymmetric", "OpenSSH", cert_file), + lambda f: f.read(), + mode="rb" + ) + cert_key = load_ssh_public_key(cert_data, backend) + assert cert_key.public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + # try with more spaces + cert_data = b" \t ".join(cert_data.split()) + cert_key = load_ssh_public_key(cert_data, backend) + assert cert_key.public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + self.run_partial_pubkey(cert_data, backend) + + def run_partial_pubkey(self, pubdata, backend): + parts = pubdata.split() + raw = base64.b64decode(parts[1]) + for i in range(1, len(raw)): + frag = base64.b64encode(raw[:i]) + new_pub = b" ".join([parts[0], frag]) + with pytest.raises(ValueError): + load_ssh_public_key(new_pub, backend) + + @pytest.mark.parametrize( + ("key_file",), + [ + ("rsa-nopsw.key", ), + ("rsa-psw.key", ), + ("dsa-nopsw.key", ), + ("dsa-psw.key", ), + ("ecdsa-nopsw.key", ), + ("ecdsa-psw.key", ), + ("ed25519-nopsw.key", ), + ("ed25519-psw.key", ), + ] + ) + def test_load_ssh_private_key(self, key_file, backend): + if "ed25519" in key_file and not backend.ed25519_supported(): + pytest.skip("Requires OpenSSL with Ed25519 support") + if "-psw" in key_file and not ssh._bcrypt_supported: + pytest.skip("Requires bcrypt module") + + # read public and private key from ssh-keygen + priv_data = load_vectors_from_file( + os.path.join("asymmetric", "OpenSSH", key_file), + lambda f: f.read(), + mode="rb" + ) + pub_data = load_vectors_from_file( + os.path.join("asymmetric", "OpenSSH", key_file + ".pub"), + lambda f: f.read(), + mode="rb" + ) + nocomment_data = b" ".join(pub_data.split()[:2]) + + # load and compare + password = None + if "-psw" in key_file: + password = b"password" + private_key = load_ssh_private_key(priv_data, password, backend) + assert private_key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + # bytearray + private_key = load_ssh_private_key( + bytearray(priv_data), password, backend + ) + assert private_key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + if six.PY3: + # memoryview(bytes) + private_key = load_ssh_private_key( + memoryview(priv_data), password, backend + ) + assert private_key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + # memoryview(bytearray) + private_key = load_ssh_private_key( + memoryview(bytearray(priv_data)), password, backend + ) + assert private_key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + # serialize with own code and reload + encryption = NoEncryption() + if password: + encryption = BestAvailableEncryption(password) + priv_data2 = private_key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, encryption, + ) + private_key2 = load_ssh_private_key(priv_data2, password, backend) + assert private_key2.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) == nocomment_data + + # make sure multi-line base64 is used + maxline = max(map(len, priv_data2.split(b"\n"))) + assert maxline < 80 + + @pytest.mark.supported( + only_if=lambda backend: ssh._bcrypt_supported, + skip_message="Requires that bcrypt exists" + ) + def test_bcrypt_encryption(self, backend): + private_key = ec.generate_private_key(ec.SECP256R1(), backend) + pub1 = private_key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + + for psw in ( + b"1", + b"1234", + b"1234" * 4, + b"x" * 72, + ): + # BestAvailableEncryption does not handle bytes-like? + best = BestAvailableEncryption(psw) + encdata = private_key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, best + ) + decoded_key = load_ssh_private_key( + encdata, psw, backend + ) + pub2 = decoded_key.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + assert pub1 == pub2 + + # bytearray + decoded_key2 = load_ssh_private_key( + bytearray(encdata), psw, backend + ) + pub2 = decoded_key2.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + assert pub1 == pub2 + + if six.PY3: + # memoryview(bytes) + decoded_key2 = load_ssh_private_key( + memoryview(encdata), psw, backend + ) + pub2 = decoded_key2.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + assert pub1 == pub2 + + # memoryview(bytearray) + decoded_key2 = load_ssh_private_key( + memoryview(bytearray(encdata)), psw, backend + ) + pub2 = decoded_key2.public_key().public_bytes( + Encoding.OpenSSH, PublicFormat.OpenSSH + ) + assert pub1 == pub2 + + with pytest.raises(ValueError): + decoded_key = load_ssh_private_key( + encdata, None, backend + ) + with pytest.raises(ValueError): + decoded_key = load_ssh_private_key( + encdata, b"wrong", backend + ) + + @pytest.mark.supported( + only_if=lambda backend: not ssh._bcrypt_supported, + skip_message="Requires that bcrypt is missing" + ) + def test_missing_bcrypt(self, backend): + priv_data = load_vectors_from_file( + os.path.join("asymmetric", "OpenSSH", "ecdsa-psw.key"), + lambda f: f.read(), + mode="rb" + ) + with pytest.raises(UnsupportedAlgorithm): + load_ssh_private_key(priv_data, b"password", backend) + + private_key = ec.generate_private_key(ec.SECP256R1(), backend) + with pytest.raises(UnsupportedAlgorithm): + private_key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, + BestAvailableEncryption(b"x") + ) + + def test_fraglist_corners(self): + f = ssh._FragList() + with pytest.raises(ValueError): + f.put_mpint(-1) + f.put_mpint(0) + f.put_mpint(0x80) + assert f.tobytes() == b"\0\0\0\0" + b"\0\0\0\x02" + b"\0\x80" + + def make_file(self, magic=b"openssh-key-v1\0", ciphername=b"none", + kdfname=b"none", kdfoptions=b"", nkeys=1, + pub_type=b"ecdsa-sha2-nistp256", + pub_fields=(b"nistp256", b"\x04" * 65,), + priv_type=None, + priv_fields=(b"nistp256", b"\x04" * 65, b"\x7F" * 32), + comment=b"comment", + checkval1=b"1234", checkval2=b"1234", pad=None, + header=b"-----BEGIN OPENSSH PRIVATE KEY-----\n", + footer=b"-----END OPENSSH PRIVATE KEY-----\n", + cut=8192): + """Create private key file + """ + if not priv_type: + priv_type = pub_type + + pub = ssh._FragList() + for elem in (pub_type,) + pub_fields: + pub.put_sshstr(elem) + + secret = ssh._FragList([checkval1, checkval2]) + for i in range(nkeys): + for elem in (priv_type,) + priv_fields + (comment,): + secret.put_sshstr(elem) + + if pad is None: + pad_len = 8 - (secret.size() % 8) + pad = bytearray(range(1, 1 + pad_len)) + secret.put_raw(pad) + + main = ssh._FragList([magic]) + main.put_sshstr(ciphername) + main.put_sshstr(kdfname) + main.put_sshstr(kdfoptions) + main.put_u32(nkeys) + for i in range(nkeys): + main.put_sshstr(pub) + main.put_sshstr(secret) + + res = main.tobytes() + return ssh._ssh_pem_encode(res[:cut], header, footer) + + def test_ssh_make_file(self, backend): + # check if works by default + data = self.make_file() + key = load_ssh_private_key(data, None, backend) + assert isinstance(key, ec.EllipticCurvePrivateKey) + + def test_load_ssh_private_key_errors(self, backend): + # bad kdf + data = self.make_file(kdfname=b"unknown", ciphername=b"aes256-ctr") + with pytest.raises(UnsupportedAlgorithm): + load_ssh_private_key(data, None, backend) + + # bad cipher + data = self.make_file(ciphername=b"unknown", kdfname=b"bcrypt") + with pytest.raises(UnsupportedAlgorithm): + load_ssh_private_key(data, None, backend) + + # bad magic + data = self.make_file(magic=b"unknown") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # too few keys + data = self.make_file(nkeys=0) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # too many keys + data = self.make_file(nkeys=2) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + def test_ssh_errors_bad_values(self, backend): + # bad curve + data = self.make_file(pub_type=b"ecdsa-sha2-nistp444") + with pytest.raises(UnsupportedAlgorithm): + load_ssh_private_key(data, None, backend) + + # curve mismatch + data = self.make_file(priv_type=b"ecdsa-sha2-nistp384") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # invalid bigint + data = self.make_file( + priv_fields=(b"nistp256", b"\x04" * 65, b"\x80" * 32) + ) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + def test_ssh_errors_pubpriv_mismatch(self, backend): + # ecdsa public-private mismatch + data = self.make_file( + pub_fields=(b"nistp256", b"\x04" + b"\x05" * 64,) + ) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # rsa public-private mismatch + data = self.make_file( + pub_type=b"ssh-rsa", + pub_fields=(b"x" * 32,) * 2, + priv_fields=(b"z" * 32,) * 6, + ) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # dsa public-private mismatch + data = self.make_file( + pub_type=b"ssh-dss", + pub_fields=(b"x" * 32,) * 4, + priv_fields=(b"z" * 32,) * 5, + ) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # ed25519 public-private mismatch + sk = b'x' * 32 + pk1 = b'y' * 32 + pk2 = b'z' * 32 + data = self.make_file( + pub_type=b"ssh-ed25519", + pub_fields=(pk1,), + priv_fields=(pk1, sk + pk2,), + ) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + data = self.make_file( + pub_type=b"ssh-ed25519", + pub_fields=(pk1,), + priv_fields=(pk2, sk + pk1,), + ) + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + def test_ssh_errors_bad_wrapper(self, backend): + # wrong header + data = self.make_file(header=b"-----BEGIN RSA PRIVATE KEY-----\n") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # wring footer + data = self.make_file(footer=b"-----END RSA PRIVATE KEY-----\n") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + def test_ssh_no_padding(self, backend): + # no padding must work, if data is on block boundary + data = self.make_file(pad=b"", comment=b"") + key = load_ssh_private_key(data, None, backend) + assert isinstance(key, ec.EllipticCurvePrivateKey) + + # no padding with right last byte + data = self.make_file(pad=b"", comment=b"\x08" * 8) + key = load_ssh_private_key(data, None, backend) + assert isinstance(key, ec.EllipticCurvePrivateKey) + + # avoid unexpected padding removal + data = self.make_file(pad=b"", comment=b"1234\x01\x02\x03\x04") + key = load_ssh_private_key(data, None, backend) + assert isinstance(key, ec.EllipticCurvePrivateKey) + + # bad padding with right size + data = self.make_file(pad=b"\x08" * 8, comment=b"") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + def test_ssh_errors_bad_secrets(self, backend): + # checkval mismatch + data = self.make_file(checkval2=b"4321") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + # bad padding, correct=1 + data = self.make_file(pad=b"\x01\x02") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + data = self.make_file(pad=b"") + with pytest.raises(ValueError): + load_ssh_private_key(data, None, backend) + + @pytest.mark.supported( + only_if=lambda backend: backend.elliptic_curve_supported( + ec.SECP192R1() + ), + skip_message="Requires backend support for ec.SECP192R1", + ) + def test_serialize_ssh_private_key_errors_bad_curve(self, backend): + private_key = ec.generate_private_key(ec.SECP192R1(), backend) + with pytest.raises(ValueError): + private_key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption() + ) + + def test_serialize_ssh_private_key_errors(self, backend): + # bad encoding + private_key = ec.generate_private_key(ec.SECP256R1(), backend) + with pytest.raises(ValueError): + private_key.private_bytes( + Encoding.DER, PrivateFormat.OpenSSH, NoEncryption() + ) + + # bad object type + with pytest.raises(ValueError): + ssh.serialize_ssh_private_key(object(), None) + + private_key = ec.generate_private_key(ec.SECP256R1(), backend) + + # too long password + with pytest.raises(ValueError): + private_key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, + BestAvailableEncryption(b"p" * 73) + ) + + # unknown encryption class + with pytest.raises(ValueError): + private_key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, + DummyKeySerializationEncryption() + ) + + @pytest.mark.parametrize( + ("key_path", "supported"), + [ + (["Traditional_OpenSSL_Serialization", "dsa.1024.pem"], True), + (["Traditional_OpenSSL_Serialization", "dsa.2048.pem"], False), + (["Traditional_OpenSSL_Serialization", "dsa.3072.pem"], False), + ] + ) + def test_dsa_private_key_sizes(self, key_path, supported, backend): + key = load_vectors_from_file( + os.path.join("asymmetric", *key_path), + lambda pemfile: load_pem_private_key( + pemfile.read(), None, backend + ), + mode="rb" + ) + assert isinstance(key, dsa.DSAPrivateKey) + if supported: + res = key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption() + ) + assert isinstance(res, bytes) + else: + with pytest.raises(ValueError): + key.private_bytes( + Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption() + ) diff --git a/tox.ini b/tox.ini index 48cfc4513fc6..afc95730c832 100644 --- a/tox.ini +++ b/tox.ini @@ -7,6 +7,7 @@ isolated_build = True extras = test idna: idna + ssh: ssh deps = # This must be kept in sync with .travis/install.sh and .github/workflows/ci.yml coverage From 33c2e55930c16fa77147ef89672a588cfe03e9d9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 24 Jun 2020 21:16:01 -0400 Subject: [PATCH 843/988] ban a sphinxcontrib-spelling version that breaks things (#5284) * ban a sphinxcontrib-spelling version that breaks things * try bumping the pypy3 version --- .travis.yml | 3 +-- setup.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 95485e6dc8ff..ce3a527b505f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,9 +30,8 @@ matrix: # https://github.com/travis-ci/travis-nightly-builder/blob/build/Rakefile#L74-L106 env: TOXENV=pypy-nocoverage dist: xenial - - python: pypy3.5-7.0 + - python: pypy3.6-7.2.0 env: TOXENV=pypy3-nocoverage - dist: xenial - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l - python: 2.7 diff --git a/setup.py b/setup.py index acefbbf930b4..f685219b1a99 100644 --- a/setup.py +++ b/setup.py @@ -252,7 +252,7 @@ def run(self): "doc8", "pyenchant >= 1.6.11", "twine >= 1.12.0", - "sphinxcontrib-spelling >= 4.0.1", + "sphinxcontrib-spelling >= 4.0.1,!=5.1.2", ], "pep8test": [ "flake8", From 3f4944d4e5836bd87e6a9193eb37d651eafd8b68 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Wed, 24 Jun 2020 21:50:49 -0400 Subject: [PATCH 844/988] Fix up crl_delta_crl_indicator.pem. (#5283) The CRL is missing a CRL number and should mark the delta CRL extension as critical. RFC 5280 says the following: Section 5.2.3: > CRL issuers conforming to this profile MUST include this extension > [CRL number] in all CRLs and MUST mark this extension as > non-critical. Section 5.2.4: > The delta CRL indicator is a critical CRL extension that identifies a > CRL as being a delta CRL. > When a conforming CRL issuer generates a delta CRL, the delta CRL > MUST include a critical delta CRL indicator extension. Sadly, RFC 5280 is often unclear about the difference between issuer requirements and verifier requirements, but test certificates should conform to issuer requirements where possible, in case the underly library becomes stricter. Section 5.2.4 includes further text which implies a delta CRL without a CRL number is unusable for a verifier anyway: > A complete CRL and a delta CRL MAY be combined if the following four > conditions are satisfied: > > [...] > > (d) The CRL number of the complete CRL is less than the CRL number > of the delta CRL. That is, the delta CRL follows the complete > CRL in the numbering sequence. Note I have not updated the signature in crl_delta_crl_indicator.pem. The test does not care, and it is unclear which key to sign it with. --- tests/x509/test_x509.py | 2 +- .../x509/custom/crl_delta_crl_indicator.pem | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 38fe6bf8b20b..35089c5080e9 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -307,7 +307,7 @@ def test_delta_crl_indicator(self, backend): ExtensionOID.DELTA_CRL_INDICATOR ) assert dci.value == x509.DeltaCRLIndicator(12345678901234567890) - assert dci.critical is False + assert dci.critical is True def test_signature(self, backend): crl = _load_cert( diff --git a/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem b/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem index f49da4c8b60a..d919c37061e7 100644 --- a/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem +++ b/vectors/cryptography_vectors/x509/custom/crl_delta_crl_indicator.pem @@ -1,11 +1,11 @@ -----BEGIN X509 CRL----- -MIIBfTBnAgEBMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEmNyeXB0b2dyYXBo -eS5pbyBDQRcNMDIwMTAxMTIwMTAwWhcNMzAwMTAxMTIwMTAwWqAWMBQwEgYDVR0b -BAsCCQCrVKmM6x8K0jANBgkqhkiG9w0BAQsFAAOCAQEAUEE3Z8rgIZYo1YK0wZ2X -bz9NnnE/X1YZQZ/IO/mSsz/k2d5XhLwa53zMlvX7J3UFEjEp+82b+gCMvgpJzTBq -a/XnifnA8lnFJmPiLB1JgRm2/GsXxkws3ziH5D/6yRdV3MDRQzRg610GayF+LfrF -74kMns0a1TaOfRhw1APiDvJLngElvcutBS3/mgr+SPPdDgFJ++PSrWOdAw4vo4HH -TTxduelWWDag2Bg0L90Td8Cdv57jgbCjSwWPSLqfwq674cDxotYABqtLg1Q5jeg2 -GIzEZqYXWvxMc87pQLRwrxG2+U4p+hDpx3TTIn2uyxDTihXvWKmiqzpOiXJKixe5 -Jw== +MIIBlDB+AgEBMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEmNyeXB0b2dyYXBo +eS5pbyBDQRcNMDIwMTAxMTIwMTAwWhcNMzAwMTAxMTIwMTAwWqAtMCswEgYDVR0U +BAsCCQCrVKmM6x8K0zAVBgNVHRsBAf8ECwIJAKtUqYzrHwrSMA0GCSqGSIb3DQEB +CwUAA4IBAQBQQTdnyuAhlijVgrTBnZdvP02ecT9fVhlBn8g7+ZKzP+TZ3leEvBrn +fMyW9fsndQUSMSn7zZv6AIy+CknNMGpr9eeJ+cDyWcUmY+IsHUmBGbb8axfGTCzf +OIfkP/rJF1XcwNFDNGDrXQZrIX4t+sXviQyezRrVNo59GHDUA+IO8kueASW9y60F +Lf+aCv5I890OAUn749KtY50DDi+jgcdNPF256VZYNqDYGDQv3RN3wJ2/nuOBsKNL +BY9Iup/CrrvhwPGi1gAGq0uDVDmN6DYYjMRmphda/ExzzulAtHCvEbb5Tin6EOnH +dNMifa7LENOKFe9YqaKrOk6JckqLF7kn -----END X509 CRL----- From 97193752945cd62eef4371f7c8c04e7806d9e37b Mon Sep 17 00:00:00 2001 From: Jakub Stasiak Date: Thu, 25 Jun 2020 03:51:54 +0200 Subject: [PATCH 845/988] Disallow ttl=None in (Multi)Fernet.decrypt_at_time() (#5280) * Disallow ttl=None in (Multi)Fernet.decrypt_at_time() Since the introduction of the _at_time() methods in #5256[1] there's been this little voice in the back of my mind telling me that maybe it's not the best idea to allow ttl=None in decrypt_at_time(). It's been like this for convenience and code reuse reasons. Then I submitted a patch for cryptography stubs in typeshed[2] and I had to decide whether to define decrypt_at_time()'s ttl as int and be incompatible with cryptography's behavior or Optional[int] and advertise an API that can be misused much too easily. I went ahead with int. Considering the above I decided to propose this patch. Some amount of redundancy (and a new test to properly cover the MultiFernet.decrypt_at_time() implementation) is a price to prevent clients from shooting themselves in the foot with the tll=None gun since setting ttl to None disabled timestamp checks even if current_time was provided. [1] https://github.com/pyca/cryptography/pull/5256 [2] https://github.com/python/typeshed/pull/4238 * Actually test the return value here * Fix formatting --- src/cryptography/fernet.py | 14 ++++++++++++-- tests/test_fernet.py | 20 ++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index 862d9466132e..8528d85a91a5 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -73,9 +73,14 @@ def _encrypt_from_parts(self, data, current_time, iv): return base64.urlsafe_b64encode(basic_parts + hmac) def decrypt(self, token, ttl=None): - return self.decrypt_at_time(token, ttl, int(time.time())) + timestamp, data = Fernet._get_unverified_token_data(token) + return self._decrypt_data(data, timestamp, ttl, int(time.time())) def decrypt_at_time(self, token, ttl, current_time): + if ttl is None: + raise ValueError( + "decrypt_at_time() can only be used with a non-None ttl" + ) timestamp, data = Fernet._get_unverified_token_data(token) return self._decrypt_data(data, timestamp, ttl, current_time) @@ -170,7 +175,12 @@ def rotate(self, msg): return self._fernets[0]._encrypt_from_parts(p, timestamp, iv) def decrypt(self, msg, ttl=None): - return self.decrypt_at_time(msg, ttl, int(time.time())) + for f in self._fernets: + try: + return f.decrypt(msg, ttl) + except InvalidToken: + pass + raise InvalidToken def decrypt_at_time(self, msg, ttl, current_time): for f in self._fernets: diff --git a/tests/test_fernet.py b/tests/test_fernet.py index da2096fb8fe1..c6b0a41dfb06 100644 --- a/tests/test_fernet.py +++ b/tests/test_fernet.py @@ -117,11 +117,16 @@ def test_timestamp_ignored_no_ttl(self, monkeypatch, backend): token = f.encrypt(pt) ts = "1985-10-26T01:20:01-07:00" current_time = calendar.timegm(iso8601.parse_date(ts).utctimetuple()) - assert f.decrypt_at_time( - token, ttl=None, current_time=current_time) == pt monkeypatch.setattr(time, "time", lambda: current_time) assert f.decrypt(token, ttl=None) == pt + def test_ttl_required_in_decrypt_at_time(self, monkeypatch, backend): + f = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) + pt = b"encrypt me" + token = f.encrypt(pt) + with pytest.raises(ValueError): + f.decrypt_at_time(token, ttl=None, current_time=int(time.time())) + @pytest.mark.parametrize("message", [b"", b"Abc!", b"\x00\xFF\x00\x80"]) def test_roundtrips(self, message, backend): f = Fernet(Fernet.generate_key(), backend=backend) @@ -167,6 +172,17 @@ def test_decrypt(self, backend): with pytest.raises(InvalidToken): f.decrypt(b"\x00" * 16) + def test_decrypt_at_time(self, backend): + f1 = Fernet(base64.urlsafe_b64encode(b"\x00" * 32), backend=backend) + f = MultiFernet([f1]) + pt = b"encrypt me" + token = f.encrypt_at_time(pt, current_time=100) + assert f.decrypt_at_time(token, ttl=1, current_time=100) == pt + with pytest.raises(InvalidToken): + f.decrypt_at_time(token, ttl=1, current_time=102) + with pytest.raises(ValueError): + f.decrypt_at_time(token, ttl=None, current_time=100) + def test_no_fernets(self, backend): with pytest.raises(ValueError): MultiFernet([]) From b249ef30b3f80efe818634ca0d31cd338c2df98f Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 25 Jun 2020 20:13:02 -0400 Subject: [PATCH 846/988] Added a changelog entry for the new fernet methods (#5285) --- CHANGELOG.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2211095634d4..5ecaa2b20960 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -26,6 +26,9 @@ Changelog for writing. * Added support for ``OpenSSH`` certificates to :func:`~cryptography.hazmat.primitives.serialization.load_ssh_public_key`. +* Added :meth:`~cryptography.fernet.Fernet.encrypt_at_time` and + :meth:`~cryptography.fernet.Fernet.decrypt_at_time` to + :class:`~cryptography.fernet.Fernet`. .. _v2-9-2: From 51fe7e659c34d9569d015ff6a078063957f38bad Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 25 Jun 2020 20:59:15 -0400 Subject: [PATCH 847/988] Bumped the minimum macOS version to 10.10 (#5286) --- .github/workflows/ci.yml | 2 +- .github/workflows/wheel-builder.yml | 2 +- CHANGELOG.rst | 2 ++ docs/installation.rst | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4bb335c0ae7..1e91b725b558 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: run: | CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ LDFLAGS="${HOME}/openssl-macos/lib/libcrypto.a ${HOME}/openssl-macos/lib/libssl.a" \ - CFLAGS="-I${HOME}/openssl-macos/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9 -march=core2" \ + CFLAGS="-I${HOME}/openssl-macos/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.10 -march=core2" \ tox -r -- --color=yes --wycheproof-root=wycheproof env: TOXENV: ${{ matrix.PYTHON.TOXENV }} diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index daeaf4e162af..d57e2a83277b 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -95,7 +95,7 @@ jobs: CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ LDFLAGS="${HOME}/openssl-macos/lib/libcrypto.a ${HOME}/openssl-macos/lib/libssl.a" \ - CFLAGS="-I${HOME}/openssl-macos/include -mmacosx-version-min=10.9 -march=core2" \ + CFLAGS="-I${HOME}/openssl-macos/include -mmacosx-version-min=10.10 -march=core2" \ venv/bin/pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API env: PYTHON_VERSION: ${{ matrix.PYTHON.ABI_VERSION }} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5ecaa2b20960..41c5783055af 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,8 @@ Changelog as per our deprecation policy. * **BACKWARDS INCOMPATIBLE:** Support for LibreSSL 2.7.x, 2.8.x, and 2.9.0 has been removed (2.9.1+ is still supported). +* **BACKWARDS INCOMPATIBLE:** Dropped support for macOS 10.9, macOS users must + upgrade to 10.10 or newer. * Deprecated support for Python 2. At the time there is no time table for actually dropping support, however we strongly encourage all users to upgrade their Python, as Python 2 no longer receives support from the Python core diff --git a/docs/installation.rst b/docs/installation.rst index a9b0f3af6158..900d52d0121c 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -222,7 +222,7 @@ users with pip 8 or above you only need one step: If you want to build cryptography yourself or are on an older macOS version, cryptography requires the presence of a C compiler, development headers, and the proper libraries. On macOS much of this is provided by Apple's Xcode -development tools. To install the Xcode command line tools (on macOS 10.9+) +development tools. To install the Xcode command line tools (on macOS 10.10+) open a terminal window and run: .. code-block:: console From 907ec96ee8160c1c68d53f2635fd753438612d95 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 26 Jun 2020 10:01:52 -0400 Subject: [PATCH 848/988] Disable parallel docs builds to fix spellcheck (#5287) --- setup.py | 2 +- tox.ini | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index f685219b1a99..acefbbf930b4 100644 --- a/setup.py +++ b/setup.py @@ -252,7 +252,7 @@ def run(self): "doc8", "pyenchant >= 1.6.11", "twine >= 1.12.0", - "sphinxcontrib-spelling >= 4.0.1,!=5.1.2", + "sphinxcontrib-spelling >= 4.0.1", ], "pep8test": [ "flake8", diff --git a/tox.ini b/tox.ini index afc95730c832..ca3579e7a378 100644 --- a/tox.ini +++ b/tox.ini @@ -45,10 +45,10 @@ extras = docstest basepython = python3 commands = - sphinx-build -j4 -T -W -b html -d {envtmpdir}/doctrees docs docs/_build/html - sphinx-build -j4 -T -W -b latex -d {envtmpdir}/doctrees docs docs/_build/latex - sphinx-build -j4 -T -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html - sphinx-build -j4 -T -W -b spelling docs docs/_build/html + sphinx-build -T -W -b html -d {envtmpdir}/doctrees docs docs/_build/html + sphinx-build -T -W -b latex -d {envtmpdir}/doctrees docs docs/_build/latex + sphinx-build -T -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html + sphinx-build -T -W -b spelling docs docs/_build/html doc8 --allow-long-titles README.rst CHANGELOG.rst docs/ --ignore-path docs/_build/ python setup.py sdist twine check dist/* From 63d337e5cc01c026e16b51a1c0b7aba40d9108ef Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 27 Jun 2020 23:18:00 -0500 Subject: [PATCH 849/988] constrain RSA key generation more heavily (#5288) * constrain RSA key generation more heavily * constraint to just 3 & 65537 * explain change --- CHANGELOG.rst | 4 ++++ docs/hazmat/primitives/asymmetric/rsa.rst | 8 ++++++-- src/cryptography/hazmat/primitives/asymmetric/rsa.py | 10 +++++----- tests/hazmat/primitives/test_rsa.py | 7 ++++++- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 41c5783055af..45600a2ec01d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,10 @@ Changelog been removed (2.9.1+ is still supported). * **BACKWARDS INCOMPATIBLE:** Dropped support for macOS 10.9, macOS users must upgrade to 10.10 or newer. +* **BACKWARDS INCOMPATIBLE:** RSA + :meth:`~cryptography.hazmat.primitives.asymmetric.rsa.generate_private_key` + no longer accepts ``public_exponent`` values except 65537 and 3 (the latter + for legacy purposes). * Deprecated support for Python 2. At the time there is no time table for actually dropping support, however we strongly encourage all users to upgrade their Python, as Python 2 no longer receives support from the Python core diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index 031acb9b978f..ea4cce90542c 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -18,6 +18,10 @@ mathematical properties`_. .. versionadded:: 0.5 + .. versionchanged:: 3.0 + + Tightened restrictions on ``public_exponent``. + Generates a new RSA private key using the provided ``backend``. ``key_size`` describes how many :term:`bits` long the key should be. Larger keys provide more security; currently ``1024`` and below are considered @@ -37,8 +41,8 @@ mathematical properties`_. ... ) :param int public_exponent: The public exponent of the new key. - Usually one of the small Fermat primes 3, 5, 17, 257, 65537. If in - doubt you should `use 65537`_. + Either 65537 or 3 (for legacy purposes). Almost everyone should + `use 65537`_. :param int key_size: The length of the modulus in :term:`bits`. For keys generated in 2015 it is strongly recommended to be diff --git a/src/cryptography/hazmat/primitives/asymmetric/rsa.py b/src/cryptography/hazmat/primitives/asymmetric/rsa.py index f20cdf9c929d..640577ad3f2f 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -120,11 +120,11 @@ def generate_private_key(public_exponent, key_size, backend): def _verify_rsa_parameters(public_exponent, key_size): - if public_exponent < 3: - raise ValueError("public_exponent must be >= 3.") - - if public_exponent & 1 == 0: - raise ValueError("public_exponent must be odd.") + if public_exponent not in (3, 65537): + raise ValueError( + "public_exponent must be either 3 (for legacy compatibility) or " + "65537. Almost everyone should choose 65537 here!" + ) if key_size < 512: raise ValueError("key_size must be at least 512-bits.") diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index e6482651dc5f..0e7bb6446561 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -147,7 +147,7 @@ class TestRSA(object): @pytest.mark.parametrize( ("public_exponent", "key_size"), itertools.product( - (3, 5, 65537), + (3, 65537), (1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1536, 2048) ) ) @@ -170,6 +170,11 @@ def test_generate_bad_public_exponent(self, backend): key_size=2048, backend=backend) + with pytest.raises(ValueError): + rsa.generate_private_key(public_exponent=65535, + key_size=2048, + backend=backend) + def test_cant_generate_insecure_tiny_key(self, backend): with pytest.raises(ValueError): rsa.generate_private_key(public_exponent=65537, From 13fae162da9637009c3f21080e7d2fdbdffe8f36 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 2 Jul 2020 00:13:33 -0500 Subject: [PATCH 850/988] add SubjectInformationAccess extension support (#5295) * add SubjectInformationAccess extension support * fixes --- CHANGELOG.rst | 2 + docs/development/test-vectors.rst | 3 + docs/x509/reference.rst | 55 ++++- .../hazmat/backends/openssl/decode_asn1.py | 25 ++- .../hazmat/backends/openssl/encode_asn1.py | 13 +- src/cryptography/x509/__init__.py | 5 +- src/cryptography/x509/extensions.py | 32 +++ src/cryptography/x509/oid.py | 5 + tests/x509/test_x509.py | 75 ++++++- tests/x509/test_x509_ext.py | 194 +++++++++++++++++- .../cryptography_vectors/x509/custom/sia.pem | 18 ++ 11 files changed, 406 insertions(+), 21 deletions(-) create mode 100644 vectors/cryptography_vectors/x509/custom/sia.pem diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 45600a2ec01d..d1852eb6d8ba 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -35,6 +35,8 @@ Changelog * Added :meth:`~cryptography.fernet.Fernet.encrypt_at_time` and :meth:`~cryptography.fernet.Fernet.decrypt_at_time` to :class:`~cryptography.fernet.Fernet`. +* Added support for the :class:`~cryptography.x509.SubjectInformationAccess` + X.509 extension. .. _v2-9-2: diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 9fca681b26b0..4573e217272e 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -401,6 +401,9 @@ Custom X.509 Vectors a ``policyConstraints`` extension with a ``requireExplicitPolicy`` value. * ``freshestcrl.pem`` - A self-signed certificate containing a ``freshestCRL`` extension. +* ``sia.pem`` - An RSA 2048 bit self-signed certificate containing a subject + information access extension with both a CA repository entry and a custom + OID entry. * ``ca/ca.pem`` - A self-signed certificate with ``basicConstraints`` set to true. Its private key is ``ca/ca_key.pem``. This certificate is encoded in several of the PKCS12 custom vectors. diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index fac2a3513a01..25f404991871 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2146,6 +2146,29 @@ X.509 Extensions :attr:`~cryptography.x509.oid.ExtensionOID.AUTHORITY_INFORMATION_ACCESS`. +.. class:: SubjectInformationAccess(descriptions) + + .. versionadded:: 3.0 + + The subject information access extension indicates how to access + information and services for the subject of the certificate in which + the extension appears. When the subject is a CA, information and + services may include certificate validation services and CA policy + data. When the subject is an end entity, the information describes + the type of services offered and how to access them. It is an iterable, + containing one or more :class:`~cryptography.x509.AccessDescription` + instances. + + :param list descriptions: A list of :class:`AccessDescription` objects. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns + :attr:`~cryptography.x509.oid.ExtensionOID.SUBJECT_INFORMATION_ACCESS`. + + .. class:: AccessDescription(access_method, access_location) .. versionadded:: 0.9 @@ -2155,16 +2178,23 @@ X.509 Extensions :type: :class:`ObjectIdentifier` The access method defines what the ``access_location`` means. It must - be either + be :attr:`~cryptography.x509.oid.AuthorityInformationAccessOID.OCSP` or - :attr:`~cryptography.x509.oid.AuthorityInformationAccessOID.CA_ISSUERS`. + :attr:`~cryptography.x509.oid.AuthorityInformationAccessOID.CA_ISSUERS` + when used with :class:`~cryptography.x509.AuthorityInformationAccess` + or + :attr:`~cryptography.x509.oid.SubjectInformationAccessOID.CA_REPOSITORY` + when used with :class:`~cryptography.x509.SubjectInformationAccess`. + If it is :attr:`~cryptography.x509.oid.AuthorityInformationAccessOID.OCSP` the access location will be where to obtain OCSP information for the certificate. If it is :attr:`~cryptography.x509.oid.AuthorityInformationAccessOID.CA_ISSUERS` the access location will provide additional information about the - issuing certificate. + issuing certificate. Finally, if it is + :attr:`~cryptography.x509.oid.SubjectInformationAccessOID.CA_REPOSITORY` + the access location will be the location of the CA's repository. .. attribute:: access_location @@ -2973,6 +3003,17 @@ instances. The following common OIDs are available as constants. :class:`~cryptography.x509.AccessDescription` objects. +.. class:: SubjectInformationAccessOID + + .. versionadded:: 3.0 + + .. attribute:: CA_REPOSITORY + + Corresponds to the dotted string ``"1.3.6.1.5.5.7.48.5"``. Used as the + identifier for CA repository data in + :class:`~cryptography.x509.AccessDescription` objects. + + .. class:: CertificatePoliciesOID .. versionadded:: 1.0 @@ -3050,6 +3091,14 @@ instances. The following common OIDs are available as constants. for the :class:`~cryptography.x509.AuthorityInformationAccess` extension type. + .. attribute:: SUBJECT_INFORMATION_ACCESS + + .. versionadded:: 3.0 + + Corresponds to the dotted string ``"1.3.6.1.5.5.7.1.11"``. The + identifier for the :class:`~cryptography.x509.SubjectInformationAccess` + extension type. + .. attribute:: INHIBIT_ANY_POLICY Corresponds to the dotted string ``"2.5.29.54"``. The identifier diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 7639e6890284..8bb5d542c72a 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -377,29 +377,39 @@ def _decode_authority_key_identifier(backend, akid): ) -def _decode_authority_information_access(backend, aia): - aia = backend._ffi.cast("Cryptography_STACK_OF_ACCESS_DESCRIPTION *", aia) - aia = backend._ffi.gc( - aia, +def _decode_information_access(backend, ia): + ia = backend._ffi.cast("Cryptography_STACK_OF_ACCESS_DESCRIPTION *", ia) + ia = backend._ffi.gc( + ia, lambda x: backend._lib.sk_ACCESS_DESCRIPTION_pop_free( x, backend._ffi.addressof( backend._lib._original_lib, "ACCESS_DESCRIPTION_free" ) ) ) - num = backend._lib.sk_ACCESS_DESCRIPTION_num(aia) + num = backend._lib.sk_ACCESS_DESCRIPTION_num(ia) access_descriptions = [] for i in range(num): - ad = backend._lib.sk_ACCESS_DESCRIPTION_value(aia, i) + ad = backend._lib.sk_ACCESS_DESCRIPTION_value(ia, i) backend.openssl_assert(ad.method != backend._ffi.NULL) oid = x509.ObjectIdentifier(_obj2txt(backend, ad.method)) backend.openssl_assert(ad.location != backend._ffi.NULL) gn = _decode_general_name(backend, ad.location) access_descriptions.append(x509.AccessDescription(oid, gn)) + return access_descriptions + + +def _decode_authority_information_access(backend, aia): + access_descriptions = _decode_information_access(backend, aia) return x509.AuthorityInformationAccess(access_descriptions) +def _decode_subject_information_access(backend, aia): + access_descriptions = _decode_information_access(backend, aia) + return x509.SubjectInformationAccess(access_descriptions) + + def _decode_key_usage(backend, bit_string): bit_string = backend._ffi.cast("ASN1_BIT_STRING *", bit_string) bit_string = backend._ffi.gc(bit_string, backend._lib.ASN1_BIT_STRING_free) @@ -816,6 +826,9 @@ def _decode_nonce(backend, nonce): ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( _decode_authority_information_access ), + ExtensionOID.SUBJECT_INFORMATION_ACCESS: ( + _decode_subject_information_access + ), ExtensionOID.CERTIFICATE_POLICIES: _decode_certificate_policies, ExtensionOID.CRL_DISTRIBUTION_POINTS: _decode_crl_distribution_points, ExtensionOID.FRESHEST_CRL: _decode_freshest_crl, diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index ca35f0e77b0a..e12431cfc626 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -343,7 +343,7 @@ def _encode_basic_constraints(backend, basic_constraints): return constraints -def _encode_authority_information_access(backend, authority_info_access): +def _encode_information_access(backend, info_access): aia = backend._lib.sk_ACCESS_DESCRIPTION_new_null() backend.openssl_assert(aia != backend._ffi.NULL) aia = backend._ffi.gc( @@ -354,7 +354,7 @@ def _encode_authority_information_access(backend, authority_info_access): ) ) ) - for access_description in authority_info_access: + for access_description in info_access: ad = backend._lib.ACCESS_DESCRIPTION_new() method = _txt2obj( backend, access_description.access_method.dotted_string @@ -622,9 +622,8 @@ def _encode_nonce(backend, nonce): ExtensionOID.EXTENDED_KEY_USAGE: _encode_extended_key_usage, ExtensionOID.AUTHORITY_KEY_IDENTIFIER: _encode_authority_key_identifier, ExtensionOID.CERTIFICATE_POLICIES: _encode_certificate_policies, - ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( - _encode_authority_information_access - ), + ExtensionOID.AUTHORITY_INFORMATION_ACCESS: _encode_information_access, + ExtensionOID.SUBJECT_INFORMATION_ACCESS: _encode_information_access, ExtensionOID.CRL_DISTRIBUTION_POINTS: _encode_cdps_freshest_crl, ExtensionOID.FRESHEST_CRL: _encode_cdps_freshest_crl, ExtensionOID.INHIBIT_ANY_POLICY: _encode_inhibit_any_policy, @@ -636,9 +635,7 @@ def _encode_nonce(backend, nonce): _CRL_EXTENSION_ENCODE_HANDLERS = { ExtensionOID.ISSUER_ALTERNATIVE_NAME: _encode_alt_name, ExtensionOID.AUTHORITY_KEY_IDENTIFIER: _encode_authority_key_identifier, - ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( - _encode_authority_information_access - ), + ExtensionOID.AUTHORITY_INFORMATION_ACCESS: _encode_information_access, ExtensionOID.CRL_NUMBER: _encode_crl_number_delta_crl_indicator, ExtensionOID.DELTA_CRL_INDICATOR: _encode_crl_number_delta_crl_indicator, ExtensionOID.ISSUING_DISTRIBUTION_POINT: _encode_issuing_dist_point, diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index b761e264aaca..fb4d7929c3b6 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -24,8 +24,8 @@ IssuingDistributionPoint, KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, OCSPNonce, PolicyConstraints, PolicyInformation, PrecertPoison, PrecertificateSignedCertificateTimestamps, ReasonFlags, - SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, - UnrecognizedExtension, UserNotice + SubjectAlternativeName, SubjectInformationAccess, SubjectKeyIdentifier, + TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice ) from cryptography.x509.general_name import ( DNSName, DirectoryName, GeneralName, IPAddress, OtherName, RFC822Name, @@ -142,6 +142,7 @@ "CRLNumber", "KeyUsage", "AuthorityInformationAccess", + "SubjectInformationAccess", "AccessDescription", "CertificatePolicies", "PolicyInformation", diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 1b96ffd78834..ad728afaf0c7 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -317,6 +317,38 @@ def __hash__(self): return hash(tuple(self._descriptions)) +@utils.register_interface(ExtensionType) +class SubjectInformationAccess(object): + oid = ExtensionOID.SUBJECT_INFORMATION_ACCESS + + def __init__(self, descriptions): + descriptions = list(descriptions) + if not all(isinstance(x, AccessDescription) for x in descriptions): + raise TypeError( + "Every item in the descriptions list must be an " + "AccessDescription" + ) + + self._descriptions = descriptions + + __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions") + + def __repr__(self): + return "".format(self._descriptions) + + def __eq__(self, other): + if not isinstance(other, SubjectInformationAccess): + return NotImplemented + + return self._descriptions == other._descriptions + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._descriptions)) + + class AccessDescription(object): def __init__(self, access_method, access_location): if not isinstance(access_method, ObjectIdentifier): diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 284db54f980c..31be0e6b0b38 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -149,6 +149,10 @@ class AuthorityInformationAccessOID(object): OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1") +class SubjectInformationAccessOID(object): + CA_REPOSITORY = ObjectIdentifier("1.3.6.1.5.5.7.48.5") + + class CertificatePoliciesOID(object): CPS_QUALIFIER = ObjectIdentifier("1.3.6.1.5.5.7.2.1") CPS_USER_NOTICE = ObjectIdentifier("1.3.6.1.5.5.7.2.2") @@ -251,6 +255,7 @@ class CertificatePoliciesOID(object): ExtensionOID.TLS_FEATURE: "TLSFeature", AuthorityInformationAccessOID.OCSP: "OCSP", AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers", + SubjectInformationAccessOID.CA_REPOSITORY: "caRepository", CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice", OCSPExtensionOID.NONCE: "OCSPNonce", diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 35089c5080e9..89d20c3b2c35 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -36,7 +36,7 @@ from cryptography.x509.name import _ASN1Type from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, - NameOID, SignatureAlgorithmOID + NameOID, SignatureAlgorithmOID, SubjectInformationAccessOID, ) from ..hazmat.primitives.fixtures_dsa import DSA_KEY_2048 @@ -1718,6 +1718,40 @@ def test_encode_nonstandard_aia(self, backend): builder.sign(private_key, hashes.SHA256(), backend) + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_encode_nonstandard_sia(self, backend): + private_key = RSA_KEY_2048.private_key(backend) + + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + x509.ObjectIdentifier("2.999.7"), + x509.UniformResourceIdentifier(u"http://example.com") + ), + ]) + + builder = x509.CertificateBuilder().subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + private_key.public_key() + ).serial_number( + 777 + ).not_valid_before( + datetime.datetime(2015, 1, 1) + ).not_valid_after( + datetime.datetime(2040, 1, 1) + ).add_extension( + sia, False + ) + + cert = builder.sign(private_key, hashes.SHA256(), backend) + ext = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_INFORMATION_ACCESS + ) + assert ext.value == sia + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_subject_dn_asn1_types(self, backend): @@ -3708,6 +3742,45 @@ def test_build_cert_with_aia(self, backend): ) assert ext.value == aia + @pytest.mark.requires_backend_interface(interface=RSABackend) + @pytest.mark.requires_backend_interface(interface=X509Backend) + def test_build_cert_with_sia(self, backend): + issuer_private_key = RSA_KEY_2048.private_key(backend) + subject_private_key = RSA_KEY_2048.private_key(backend) + + not_valid_before = datetime.datetime(2002, 1, 1, 12, 1) + not_valid_after = datetime.datetime(2030, 12, 31, 8, 30) + + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + ]) + + builder = x509.CertificateBuilder().serial_number( + 777 + ).issuer_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).subject_name(x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + ])).public_key( + subject_private_key.public_key() + ).add_extension( + sia, critical=False + ).not_valid_before( + not_valid_before + ).not_valid_after( + not_valid_after + ) + + cert = builder.sign(issuer_private_key, hashes.SHA256(), backend) + + ext = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_INFORMATION_ACCESS + ) + assert ext.value == sia + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_build_cert_with_ski(self, backend): diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 19ce4363f483..760cba5d9b89 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -26,7 +26,7 @@ from cryptography.x509.general_name import _lazy_import_idna from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, - NameOID, ObjectIdentifier, _OID_NAMES + NameOID, ObjectIdentifier, SubjectInformationAccessOID, _OID_NAMES ) from .test_x509 import _load_cert @@ -3052,6 +3052,198 @@ def test_hash(self): assert hash(aia) != hash(aia3) +class TestSubjectInformationAccess(object): + def test_invalid_descriptions(self): + with pytest.raises(TypeError): + x509.SubjectInformationAccess(["notanAccessDescription"]) + + def test_iter_len(self): + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ) + ]) + assert len(sia) == 2 + assert list(sia) == [ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ) + ] + + def test_iter_input(self): + desc = [ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ) + ] + sia = x509.SubjectInformationAccess(iter(desc)) + assert list(sia) == desc + + def test_repr(self): + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ) + ]) + if not six.PY2: + assert repr(sia) == ( + ", access_location=)>])>" + ) + else: + assert repr(sia) == ( + ", access_location=)>])>" + ) + + def test_eq(self): + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ) + ]) + sia2 = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ) + ]) + assert sia == sia2 + + def test_ne(self): + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ) + ]) + sia2 = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + ]) + + assert sia != sia2 + assert sia != object() + + def test_indexing(self): + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca3.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca4.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca5.domain.com") + ), + ]) + assert sia[-1] == sia[4] + assert sia[2:6:2] == [sia[2], sia[4]] + + def test_hash(self): + sia = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ), + ]) + sia2 = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca2.domain.com") + ), + ]) + sia3 = x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca.domain.com") + ), + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"http://ca3.domain.com") + ), + ]) + assert hash(sia) == hash(sia2) + assert hash(sia) != hash(sia3) + + +@pytest.mark.requires_backend_interface(interface=RSABackend) +@pytest.mark.requires_backend_interface(interface=X509Backend) +class TestSubjectInformationAccessExtension(object): + def test_sia(self, backend): + cert = _load_cert( + os.path.join("x509", "custom", "sia.pem"), + x509.load_pem_x509_certificate, + backend + ) + ext = cert.extensions.get_extension_for_oid( + ExtensionOID.SUBJECT_INFORMATION_ACCESS + ) + assert ext is not None + assert ext.critical is False + + assert ext.value == x509.SubjectInformationAccess([ + x509.AccessDescription( + SubjectInformationAccessOID.CA_REPOSITORY, + x509.UniformResourceIdentifier(u"https://my.ca.issuer/") + ), + x509.AccessDescription( + x509.ObjectIdentifier("2.999.7"), + x509.UniformResourceIdentifier(u"gopher://info-mac-archive") + ), + ]) + + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestAuthorityInformationAccessExtension(object): diff --git a/vectors/cryptography_vectors/x509/custom/sia.pem b/vectors/cryptography_vectors/x509/custom/sia.pem new file mode 100644 index 000000000000..f745674f99af --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/sia.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC7TCCAdWgAwIBAgICAwkwDQYJKoZIhvcNAQELBQAwDTELMAkGA1UEBhMCVVMw +HhcNMTUwMTAxMDAwMDAwWhcNNDAwMTAxMDAwMDAwWjANMQswCQYDVQQGEwJVUzCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMF6/H53R0yqWqgwNhWKP/v3 +tSFoUboiMOXWq/zBxs/vWekj6hMwvFk7c4Aqtgim5KMwZSOjEWulqjlmFFF04Tts +Sem3gGLkSdcu+xD9SekfoIuW0FHngun1q8W1pveYSCetuOc9oA8isu/c23bqtG7a +2Y7WVmJ0P9xsDjNqXQzbqn3CnlNjXiTIelssQhWWgGPN62ipcrq7wePP8A+5qA43 +Kk0MLJINHozuMzzkcNwugUWtsFvymu4dJPFB6Mx4SYnFh/xvus2Xnz8hY8HXKZs2 +W8cv/ihI6Weu0eSNzFFbOlDtTeBP0FOEbKEKIjsQzIQcyA/evuRPMRTBPohq9YMC +AwEAAaNXMFUwUwYIKwYBBQUHAQsERzBFMCEGCCsGAQUFBzAFhhVodHRwczovL215 +LmNhLmlzc3Vlci8wIAYDiDcHhhlnb3BoZXI6Ly9pbmZvLW1hYy1hcmNoaXZlMA0G +CSqGSIb3DQEBCwUAA4IBAQB4AdYx02aXDJURPbZNi3j7FnK3LRVvJcq8vRHaG9b4 +soD/7qA8RJX11WTFNDY7g5OQhYT+WBc8OUinJaqJOPvEzgp5Prgq5AlAtcImvNX7 +dI3lr9esZ5gBWbsMK9saNEERhEZDUCSYW/GRMN4yxdUgTDPsfNr8N6bwfnGRR0xM +EBr+p+fT1xth4uren7J/edYrY9a171y6bMdZQ1iVnFH2dFO25D+3k9sM6FRWWsWu +mmrcg79QAl6jqC/6SkqVzpBPzi7dgGYluaKJjREC8e/cMcpphW1TP+8rZ161BmDk +hk5/PrWguFuguWUyEkPH5oqFqoZuqeM0fULxHh2JiqOx +-----END CERTIFICATE----- From 5d0c8e0b5f1cc71edf8163ce4e4ee1cc5311e5e4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 4 Jul 2020 19:17:35 -0400 Subject: [PATCH 851/988] Run tests on centos8 (#5051) * Run tests on centos8 * Document that we test this * debugging * Try adding this? * Remove this --- .travis.yml | 6 ++++++ docs/installation.rst | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ce3a527b505f..a7dec16c9747 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,6 +58,12 @@ matrix: - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7 + - python: 2.7 + services: docker + env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos8 + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-centos8 - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-stretch diff --git a/docs/installation.rst b/docs/installation.rst index 900d52d0121c..4fec22972f65 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -13,7 +13,7 @@ Supported platforms Currently we test ``cryptography`` on Python 2.7, 3.5+, PyPy 7.1+, and PyPy3 7.0 on these operating systems. -* x86-64 CentOS 7.x +* x86-64 CentOS 7.x, 8.x * x86-64 Fedora (latest) * macOS 10.15 Catalina * x86-64 Ubuntu 16.04 and rolling From 8fa84f50f697e5a24d4d3577ce598e27fa0240a3 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Sun, 5 Jul 2020 17:33:56 +0300 Subject: [PATCH 852/988] Reorganize KDF docs (#5297) * Add variable/fixed cost section * Add subtitle to each algorithm * Reorder alphabetically --- .../primitives/key-derivation-functions.rst | 470 ++++++++++-------- 1 file changed, 250 insertions(+), 220 deletions(-) diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index 4b474124a240..e2714465be2d 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -26,6 +26,14 @@ Different KDFs are suitable for different tasks such as: Ideal password storage KDFs will be demanding on both computational and memory resources. + +Variable cost algorithms +~~~~~~~~~~~~~~~~~~~~~~~~ + + +PBKDF2 +------ + .. currentmodule:: cryptography.hazmat.primitives.kdf.pbkdf2 .. class:: PBKDF2HMAC(algorithm, length, salt, iterations, backend) @@ -130,79 +138,86 @@ Different KDFs are suitable for different tasks such as: key. -.. currentmodule:: cryptography.hazmat.primitives.kdf.hkdf +Scrypt +------ -.. class:: HKDF(algorithm, length, salt, info, backend) +.. currentmodule:: cryptography.hazmat.primitives.kdf.scrypt - .. versionadded:: 0.2 +.. class:: Scrypt(salt, length, n, r, p, backend) - `HKDF`_ (HMAC-based Extract-and-Expand Key Derivation Function) is suitable - for deriving keys of a fixed size used for other cryptographic operations. + .. versionadded:: 1.6 - .. warning:: + Scrypt is a KDF designed for password storage by Colin Percival to be + resistant against hardware-assisted attackers by having a tunable memory + cost. It is described in :rfc:`7914`. - HKDF should not be used for password storage. + This class conforms to the + :class:`~cryptography.hazmat.primitives.kdf.KeyDerivationFunction` + interface. .. doctest:: >>> import os - >>> from cryptography.hazmat.primitives import hashes - >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF + >>> from cryptography.hazmat.primitives.kdf.scrypt import Scrypt >>> from cryptography.hazmat.backends import default_backend >>> backend = default_backend() >>> salt = os.urandom(16) - >>> info = b"hkdf-example" - >>> hkdf = HKDF( - ... algorithm=hashes.SHA256(), - ... length=32, + >>> # derive + >>> kdf = Scrypt( ... salt=salt, - ... info=info, + ... length=32, + ... n=2**14, + ... r=8, + ... p=1, ... backend=backend ... ) - >>> key = hkdf.derive(b"input key") - >>> hkdf = HKDF( - ... algorithm=hashes.SHA256(), - ... length=32, + >>> key = kdf.derive(b"my great password") + >>> # verify + >>> kdf = Scrypt( ... salt=salt, - ... info=info, + ... length=32, + ... n=2**14, + ... r=8, + ... p=1, ... backend=backend ... ) - >>> hkdf.verify(b"input key", key) - - :param algorithm: An instance of - :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. - - :param int length: The desired length of the derived key in bytes. Maximum - is ``255 * (algorithm.digest_size // 8)``. + >>> kdf.verify(b"my great password", key) - :param bytes salt: A salt. Randomizes the KDF's output. Optional, but - highly recommended. Ideally as many bits of entropy as the security - level of the hash: often that means cryptographically random and as - long as the hash output. Worse (shorter, less entropy) salt values can - still meaningfully contribute to security. May be reused. Does not have - to be secret, but may cause stronger security guarantees if secret; see - :rfc:`5869` and the `HKDF paper`_ for more details. If ``None`` is - explicitly passed a default salt of ``algorithm.digest_size // 8`` null - bytes will be used. + :param bytes salt: A salt. + :param int length: The desired length of the derived key in bytes. + :param int n: CPU/Memory cost parameter. It must be larger than 1 and be a + power of 2. + :param int r: Block size parameter. + :param int p: Parallelization parameter. + :param backend: An instance of + :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend`. - :param bytes info: Application specific context information. If ``None`` - is explicitly passed an empty byte string will be used. + The computational and memory cost of Scrypt can be adjusted by manipulating + the 3 parameters: ``n``, ``r``, and ``p``. In general, the memory cost of + Scrypt is affected by the values of both ``n`` and ``r``, while ``n`` also + determines the number of iterations performed. ``p`` increases the + computational cost without affecting memory usage. A more in-depth + explanation of the 3 parameters can be found `here`_. - :param backend: An instance of - :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. + :rfc:`7914` `recommends`_ values of ``r=8`` and ``p=1`` while scaling ``n`` + to a number appropriate for your system. `The scrypt paper`_ suggests a + minimum value of ``n=2**14`` for interactive logins (t < 100ms), or + ``n=2**20`` for more sensitive files (t < 5s). :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the provided ``backend`` does not implement - :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` + :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend` - :raises TypeError: This exception is raised if ``salt`` or ``info`` is not - ``bytes``. + :raises TypeError: This exception is raised if ``salt`` is not ``bytes``. + :raises ValueError: This exception is raised if ``n`` is less than 2, if + ``n`` is not a power of 2, if ``r`` is less than 1 or if ``p`` is less + than 1. .. method:: derive(key_material) :param key_material: The input key material. :type key_material: :term:`bytes-like` - :return bytes: The derived key. + :return bytes: the derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. :raises cryptography.exceptions.AlreadyFinalized: This is raised when @@ -211,8 +226,7 @@ Different KDFs are suitable for different tasks such as: called more than once. - Derives a new key from the input key material by performing both the - extract and expand operations. + This generates and returns a new key from the supplied password. .. method:: verify(key_material, expected_key) @@ -232,80 +246,87 @@ Different KDFs are suitable for different tasks such as: This checks whether deriving a new key from the supplied ``key_material`` generates the same key as the ``expected_key``, and - raises an exception if they do not match. + raises an exception if they do not match. This can be used for + checking whether the password a user provides matches the stored derived + key. +Fixed cost algorithms +~~~~~~~~~~~~~~~~~~~~~ -.. class:: HKDFExpand(algorithm, length, info, backend) - .. versionadded:: 0.5 +ConcatKDF +--------- - HKDF consists of two stages, extract and expand. This class exposes an - expand only version of HKDF that is suitable when the key material is - already cryptographically strong. +.. currentmodule:: cryptography.hazmat.primitives.kdf.concatkdf + +.. class:: ConcatKDFHash(algorithm, length, otherinfo, backend) + + .. versionadded:: 1.0 + + ConcatKDFHash (Concatenation Key Derivation Function) is defined by the + NIST Special Publication `NIST SP 800-56Ar2`_ document, to be used to + derive keys for use after a Key Exchange negotiation operation. .. warning:: - HKDFExpand should only be used if the key material is - cryptographically strong. You should use - :class:`~cryptography.hazmat.primitives.kdf.hkdf.HKDF` if - you are unsure. + ConcatKDFHash should not be used for password storage. .. doctest:: >>> import os >>> from cryptography.hazmat.primitives import hashes - >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDFExpand + >>> from cryptography.hazmat.primitives.kdf.concatkdf import ConcatKDFHash >>> from cryptography.hazmat.backends import default_backend >>> backend = default_backend() - >>> info = b"hkdf-example" - >>> key_material = os.urandom(16) - >>> hkdf = HKDFExpand( + >>> otherinfo = b"concatkdf-example" + >>> ckdf = ConcatKDFHash( ... algorithm=hashes.SHA256(), ... length=32, - ... info=info, + ... otherinfo=otherinfo, ... backend=backend ... ) - >>> key = hkdf.derive(key_material) - >>> hkdf = HKDFExpand( + >>> key = ckdf.derive(b"input key") + >>> ckdf = ConcatKDFHash( ... algorithm=hashes.SHA256(), ... length=32, - ... info=info, + ... otherinfo=otherinfo, ... backend=backend ... ) - >>> hkdf.verify(key_material, key) + >>> ckdf.verify(b"input key", key) :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. - :param int length: The desired length of the derived key in bytes. Maximum - is ``255 * (algorithm.digest_size // 8)``. + :param int length: The desired length of the derived key in bytes. + Maximum is ``hashlen * (2^32 -1)``. - :param bytes info: Application specific context information. If ``None`` - is explicitly passed an empty byte string will be used. + :param bytes otherinfo: Application specific context information. + If ``None`` is explicitly passed an empty byte string will be used. :param backend: An instance of - :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. + :class:`~cryptography.hazmat.backends.interfaces.HashBackend`. - :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the - provided ``backend`` does not implement - :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` - :raises TypeError: This exception is raised if ``info`` is not ``bytes``. + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised + if the provided ``backend`` does not implement + :class:`~cryptography.hazmat.backends.interfaces.HashBackend` + + :raises TypeError: This exception is raised if ``otherinfo`` is not + ``bytes``. .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: The derived key. - - :raises TypeError: This exception is raised if ``key_material`` is not - ``bytes``. + :raises TypeError: This exception is raised if ``key_material`` is + not ``bytes``. :raises cryptography.exceptions.AlreadyFinalized: This is raised when :meth:`derive` or :meth:`verify` is called more than once. - Derives a new key from the input key material by performing both the - extract and expand operations. + Derives a new key from the input key material. .. method:: verify(key_material, expected_key) @@ -322,45 +343,43 @@ Different KDFs are suitable for different tasks such as: :meth:`verify` is called more than once. - :raises TypeError: This is raised if the provided ``key_material`` is - a ``unicode`` object This checks whether deriving a new key from the supplied ``key_material`` generates the same key as the ``expected_key``, and raises an exception if they do not match. -.. currentmodule:: cryptography.hazmat.primitives.kdf.concatkdf -.. class:: ConcatKDFHash(algorithm, length, otherinfo, backend) +.. class:: ConcatKDFHMAC(algorithm, length, salt, otherinfo, backend) .. versionadded:: 1.0 - ConcatKDFHash (Concatenation Key Derivation Function) is defined by the - NIST Special Publication `NIST SP 800-56Ar2`_ document, to be used to - derive keys for use after a Key Exchange negotiation operation. + Similar to ConcatKFDHash but uses an HMAC function instead. .. warning:: - ConcatKDFHash should not be used for password storage. + ConcatKDFHMAC should not be used for password storage. .. doctest:: >>> import os >>> from cryptography.hazmat.primitives import hashes - >>> from cryptography.hazmat.primitives.kdf.concatkdf import ConcatKDFHash + >>> from cryptography.hazmat.primitives.kdf.concatkdf import ConcatKDFHMAC >>> from cryptography.hazmat.backends import default_backend >>> backend = default_backend() + >>> salt = os.urandom(16) >>> otherinfo = b"concatkdf-example" - >>> ckdf = ConcatKDFHash( + >>> ckdf = ConcatKDFHMAC( ... algorithm=hashes.SHA256(), ... length=32, + ... salt=salt, ... otherinfo=otherinfo, ... backend=backend ... ) >>> key = ckdf.derive(b"input key") - >>> ckdf = ConcatKDFHash( + >>> ckdf = ConcatKDFHMAC( ... algorithm=hashes.SHA256(), ... length=32, + ... salt=salt, ... otherinfo=otherinfo, ... backend=backend ... ) @@ -369,29 +388,36 @@ Different KDFs are suitable for different tasks such as: :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. - :param int length: The desired length of the derived key in bytes. - Maximum is ``hashlen * (2^32 -1)``. + :param int length: The desired length of the derived key in bytes. Maximum + is ``hashlen * (2^32 -1)``. + + :param bytes salt: A salt. Randomizes the KDF's output. Optional, but + highly recommended. Ideally as many bits of entropy as the security + level of the hash: often that means cryptographically random and as + long as the hash output. Does not have to be secret, but may cause + stronger security guarantees if secret; If ``None`` is explicitly + passed a default salt of ``algorithm.block_size`` null bytes will be + used. :param bytes otherinfo: Application specific context information. If ``None`` is explicitly passed an empty byte string will be used. :param backend: An instance of - :class:`~cryptography.hazmat.backends.interfaces.HashBackend`. + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. - :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised - if the provided ``backend`` does not implement - :class:`~cryptography.hazmat.backends.interfaces.HashBackend` + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the + provided ``backend`` does not implement + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` - :raises TypeError: This exception is raised if ``otherinfo`` is not - ``bytes``. + :raises TypeError: This exception is raised if ``salt`` or ``otherinfo`` + is not ``bytes``. .. method:: derive(key_material) - :param key_material: The input key material. - :type key_material: :term:`bytes-like` + :param bytes key_material: The input key material. :return bytes: The derived key. - :raises TypeError: This exception is raised if ``key_material`` is - not ``bytes``. + :raises TypeError: This exception is raised if ``key_material`` is not + ``bytes``. :raises cryptography.exceptions.AlreadyFinalized: This is raised when :meth:`derive` or :meth:`verify` is @@ -421,58 +447,66 @@ Different KDFs are suitable for different tasks such as: raises an exception if they do not match. -.. class:: ConcatKDFHMAC(algorithm, length, salt, otherinfo, backend) +HKDF +---- - .. versionadded:: 1.0 +.. currentmodule:: cryptography.hazmat.primitives.kdf.hkdf - Similar to ConcatKFDHash but uses an HMAC function instead. +.. class:: HKDF(algorithm, length, salt, info, backend) + + .. versionadded:: 0.2 + + `HKDF`_ (HMAC-based Extract-and-Expand Key Derivation Function) is suitable + for deriving keys of a fixed size used for other cryptographic operations. .. warning:: - ConcatKDFHMAC should not be used for password storage. + HKDF should not be used for password storage. .. doctest:: >>> import os >>> from cryptography.hazmat.primitives import hashes - >>> from cryptography.hazmat.primitives.kdf.concatkdf import ConcatKDFHMAC + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> from cryptography.hazmat.backends import default_backend >>> backend = default_backend() >>> salt = os.urandom(16) - >>> otherinfo = b"concatkdf-example" - >>> ckdf = ConcatKDFHMAC( + >>> info = b"hkdf-example" + >>> hkdf = HKDF( ... algorithm=hashes.SHA256(), ... length=32, ... salt=salt, - ... otherinfo=otherinfo, + ... info=info, ... backend=backend ... ) - >>> key = ckdf.derive(b"input key") - >>> ckdf = ConcatKDFHMAC( + >>> key = hkdf.derive(b"input key") + >>> hkdf = HKDF( ... algorithm=hashes.SHA256(), ... length=32, ... salt=salt, - ... otherinfo=otherinfo, + ... info=info, ... backend=backend ... ) - >>> ckdf.verify(b"input key", key) + >>> hkdf.verify(b"input key", key) :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. :param int length: The desired length of the derived key in bytes. Maximum - is ``hashlen * (2^32 -1)``. + is ``255 * (algorithm.digest_size // 8)``. :param bytes salt: A salt. Randomizes the KDF's output. Optional, but highly recommended. Ideally as many bits of entropy as the security level of the hash: often that means cryptographically random and as - long as the hash output. Does not have to be secret, but may cause - stronger security guarantees if secret; If ``None`` is explicitly - passed a default salt of ``algorithm.block_size`` null bytes will be - used. + long as the hash output. Worse (shorter, less entropy) salt values can + still meaningfully contribute to security. May be reused. Does not have + to be secret, but may cause stronger security guarantees if secret; see + :rfc:`5869` and the `HKDF paper`_ for more details. If ``None`` is + explicitly passed a default salt of ``algorithm.digest_size // 8`` null + bytes will be used. - :param bytes otherinfo: Application specific context information. - If ``None`` is explicitly passed an empty byte string will be used. + :param bytes info: Application specific context information. If ``None`` + is explicitly passed an empty byte string will be used. :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. @@ -481,12 +515,13 @@ Different KDFs are suitable for different tasks such as: provided ``backend`` does not implement :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` - :raises TypeError: This exception is raised if ``salt`` or ``otherinfo`` - is not ``bytes``. + :raises TypeError: This exception is raised if ``salt`` or ``info`` is not + ``bytes``. .. method:: derive(key_material) - :param bytes key_material: The input key material. + :param key_material: The input key material. + :type key_material: :term:`bytes-like` :return bytes: The derived key. :raises TypeError: This exception is raised if ``key_material`` is not ``bytes``. @@ -496,7 +531,8 @@ Different KDFs are suitable for different tasks such as: called more than once. - Derives a new key from the input key material. + Derives a new key from the input key material by performing both the + extract and expand operations. .. method:: verify(key_material, expected_key) @@ -518,83 +554,78 @@ Different KDFs are suitable for different tasks such as: ``key_material`` generates the same key as the ``expected_key``, and raises an exception if they do not match. -.. currentmodule:: cryptography.hazmat.primitives.kdf.x963kdf - -.. class:: X963KDF(algorithm, length, otherinfo, backend) - - .. versionadded:: 1.1 - X963KDF (ANSI X9.63 Key Derivation Function) is defined by ANSI - in the `ANSI X9.63:2001`_ document, to be used to derive keys for use - after a Key Exchange negotiation operation. +.. class:: HKDFExpand(algorithm, length, info, backend) - SECG in `SEC 1 v2.0`_ recommends that - :class:`~cryptography.hazmat.primitives.kdf.concatkdf.ConcatKDFHash` be - used for new projects. This KDF should only be used for backwards - compatibility with pre-existing protocols. + .. versionadded:: 0.5 + HKDF consists of two stages, extract and expand. This class exposes an + expand only version of HKDF that is suitable when the key material is + already cryptographically strong. .. warning:: - X963KDF should not be used for password storage. + HKDFExpand should only be used if the key material is + cryptographically strong. You should use + :class:`~cryptography.hazmat.primitives.kdf.hkdf.HKDF` if + you are unsure. .. doctest:: >>> import os >>> from cryptography.hazmat.primitives import hashes - >>> from cryptography.hazmat.primitives.kdf.x963kdf import X963KDF + >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDFExpand >>> from cryptography.hazmat.backends import default_backend >>> backend = default_backend() - >>> sharedinfo = b"ANSI X9.63 Example" - >>> xkdf = X963KDF( + >>> info = b"hkdf-example" + >>> key_material = os.urandom(16) + >>> hkdf = HKDFExpand( ... algorithm=hashes.SHA256(), ... length=32, - ... sharedinfo=sharedinfo, + ... info=info, ... backend=backend ... ) - >>> key = xkdf.derive(b"input key") - >>> xkdf = X963KDF( + >>> key = hkdf.derive(key_material) + >>> hkdf = HKDFExpand( ... algorithm=hashes.SHA256(), ... length=32, - ... sharedinfo=sharedinfo, + ... info=info, ... backend=backend ... ) - >>> xkdf.verify(b"input key", key) + >>> hkdf.verify(key_material, key) :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. - :param int length: The desired length of the derived key in bytes. - Maximum is ``hashlen * (2^32 -1)``. - - :param bytes sharedinfo: Application specific context information. - If ``None`` is explicitly passed an empty byte string will be used. + :param int length: The desired length of the derived key in bytes. Maximum + is ``255 * (algorithm.digest_size // 8)``. - :param backend: A cryptography backend - :class:`~cryptography.hazmat.backends.interfaces.HashBackend` - instance. + :param bytes info: Application specific context information. If ``None`` + is explicitly passed an empty byte string will be used. - :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised - if the provided ``backend`` does not implement - :class:`~cryptography.hazmat.backends.interfaces.HashBackend` + :param backend: An instance of + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. - :raises TypeError: This exception is raised if ``sharedinfo`` is not - ``bytes``. + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the + provided ``backend`` does not implement + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` + :raises TypeError: This exception is raised if ``info`` is not ``bytes``. .. method:: derive(key_material) - :param key_material: The input key material. - :type key_material: :term:`bytes-like` + :param bytes key_material: The input key material. :return bytes: The derived key. - :raises TypeError: This exception is raised if ``key_material`` is - not ``bytes``. + + :raises TypeError: This exception is raised if ``key_material`` is not + ``bytes``. :raises cryptography.exceptions.AlreadyFinalized: This is raised when :meth:`derive` or :meth:`verify` is called more than once. - Derives a new key from the input key material. + Derives a new key from the input key material by performing both the + extract and expand operations. .. method:: verify(key_material, expected_key) @@ -611,12 +642,17 @@ Different KDFs are suitable for different tasks such as: :meth:`verify` is called more than once. + :raises TypeError: This is raised if the provided ``key_material`` is + a ``unicode`` object This checks whether deriving a new key from the supplied ``key_material`` generates the same key as the ``expected_key``, and raises an exception if they do not match. +KBKDF +----- + .. currentmodule:: cryptography.hazmat.primitives.kdf.kbkdf .. class:: KBKDFHMAC(algorithm, mode, length, rlen, llen, location,\ @@ -771,92 +807,87 @@ Different KDFs are suitable for different tasks such as: The counter iteration variable will be concatenated after the fixed input data. -.. currentmodule:: cryptography.hazmat.primitives.kdf.scrypt -.. class:: Scrypt(salt, length, n, r, p, backend) +X963KDF +------- - .. versionadded:: 1.6 +.. currentmodule:: cryptography.hazmat.primitives.kdf.x963kdf - Scrypt is a KDF designed for password storage by Colin Percival to be - resistant against hardware-assisted attackers by having a tunable memory - cost. It is described in :rfc:`7914`. +.. class:: X963KDF(algorithm, length, otherinfo, backend) - This class conforms to the - :class:`~cryptography.hazmat.primitives.kdf.KeyDerivationFunction` - interface. + .. versionadded:: 1.1 + + X963KDF (ANSI X9.63 Key Derivation Function) is defined by ANSI + in the `ANSI X9.63:2001`_ document, to be used to derive keys for use + after a Key Exchange negotiation operation. + + SECG in `SEC 1 v2.0`_ recommends that + :class:`~cryptography.hazmat.primitives.kdf.concatkdf.ConcatKDFHash` be + used for new projects. This KDF should only be used for backwards + compatibility with pre-existing protocols. + + + .. warning:: + + X963KDF should not be used for password storage. .. doctest:: >>> import os - >>> from cryptography.hazmat.primitives.kdf.scrypt import Scrypt + >>> from cryptography.hazmat.primitives import hashes + >>> from cryptography.hazmat.primitives.kdf.x963kdf import X963KDF >>> from cryptography.hazmat.backends import default_backend >>> backend = default_backend() - >>> salt = os.urandom(16) - >>> # derive - >>> kdf = Scrypt( - ... salt=salt, + >>> sharedinfo = b"ANSI X9.63 Example" + >>> xkdf = X963KDF( + ... algorithm=hashes.SHA256(), ... length=32, - ... n=2**14, - ... r=8, - ... p=1, + ... sharedinfo=sharedinfo, ... backend=backend ... ) - >>> key = kdf.derive(b"my great password") - >>> # verify - >>> kdf = Scrypt( - ... salt=salt, + >>> key = xkdf.derive(b"input key") + >>> xkdf = X963KDF( + ... algorithm=hashes.SHA256(), ... length=32, - ... n=2**14, - ... r=8, - ... p=1, + ... sharedinfo=sharedinfo, ... backend=backend ... ) - >>> kdf.verify(b"my great password", key) + >>> xkdf.verify(b"input key", key) + + :param algorithm: An instance of + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. - :param bytes salt: A salt. :param int length: The desired length of the derived key in bytes. - :param int n: CPU/Memory cost parameter. It must be larger than 1 and be a - power of 2. - :param int r: Block size parameter. - :param int p: Parallelization parameter. - :param backend: An instance of - :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend`. + Maximum is ``hashlen * (2^32 -1)``. - The computational and memory cost of Scrypt can be adjusted by manipulating - the 3 parameters: ``n``, ``r``, and ``p``. In general, the memory cost of - Scrypt is affected by the values of both ``n`` and ``r``, while ``n`` also - determines the number of iterations performed. ``p`` increases the - computational cost without affecting memory usage. A more in-depth - explanation of the 3 parameters can be found `here`_. + :param bytes sharedinfo: Application specific context information. + If ``None`` is explicitly passed an empty byte string will be used. - :rfc:`7914` `recommends`_ values of ``r=8`` and ``p=1`` while scaling ``n`` - to a number appropriate for your system. `The scrypt paper`_ suggests a - minimum value of ``n=2**14`` for interactive logins (t < 100ms), or - ``n=2**20`` for more sensitive files (t < 5s). + :param backend: A cryptography backend + :class:`~cryptography.hazmat.backends.interfaces.HashBackend` + instance. - :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the - provided ``backend`` does not implement - :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend` + :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised + if the provided ``backend`` does not implement + :class:`~cryptography.hazmat.backends.interfaces.HashBackend` - :raises TypeError: This exception is raised if ``salt`` is not ``bytes``. - :raises ValueError: This exception is raised if ``n`` is less than 2, if - ``n`` is not a power of 2, if ``r`` is less than 1 or if ``p`` is less - than 1. + :raises TypeError: This exception is raised if ``sharedinfo`` is not + ``bytes``. .. method:: derive(key_material) :param key_material: The input key material. :type key_material: :term:`bytes-like` - :return bytes: the derived key. - :raises TypeError: This exception is raised if ``key_material`` is not - ``bytes``. + :return bytes: The derived key. + :raises TypeError: This exception is raised if ``key_material`` is + not ``bytes``. :raises cryptography.exceptions.AlreadyFinalized: This is raised when :meth:`derive` or :meth:`verify` is called more than once. - This generates and returns a new key from the supplied password. + Derives a new key from the input key material. .. method:: verify(key_material, expected_key) @@ -876,9 +907,8 @@ Different KDFs are suitable for different tasks such as: This checks whether deriving a new key from the supplied ``key_material`` generates the same key as the ``expected_key``, and - raises an exception if they do not match. This can be used for - checking whether the password a user provides matches the stored derived - key. + raises an exception if they do not match. + Interface ~~~~~~~~~ From 210dc866280dd83c6d8f04cd4b6607150ba783db Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 10:01:07 -0500 Subject: [PATCH 853/988] Support parsing SCTs in OCSPResponse (#5298) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Support parsing SCTs in OCSPResponse * s/typically/only and pep8 * remove unused vector Co-authored-by: Szilárd Pfeiffer --- CHANGELOG.rst | 2 + docs/x509/reference.rst | 33 ++++++ .../hazmat/backends/openssl/decode_asn1.py | 30 ++++- .../hazmat/backends/openssl/ocsp.py | 12 +- src/cryptography/x509/__init__.py | 4 +- src/cryptography/x509/extensions.py | 43 +++++++ src/cryptography/x509/oid.py | 6 + tests/x509/test_ocsp.py | 111 ++++++++++++++++++ 8 files changed, 234 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d1852eb6d8ba..8dadc15e399c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,6 +37,8 @@ Changelog :class:`~cryptography.fernet.Fernet`. * Added support for the :class:`~cryptography.x509.SubjectInformationAccess` X.509 extension. +* Added support for parsing + :class:`~cryptography.x509.SignedCertificateTimestamps` in OCSP responses. .. _v2-9-2: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 25f404991871..402851d43cd7 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2099,6 +2099,33 @@ X.509 Extensions Returns :attr:`~cryptography.x509.oid.ExtensionOID.PRECERT_POISON`. +.. class:: SignedCertificateTimestamps(scts) + + .. versionadded:: 3.0 + + This extension contains + :class:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp` + instances. These can be used to verify that the certificate is included + in a public Certificate Transparency log. This extension is only found + in OCSP responses. For SCTs in an X.509 certificate see + :class:`~cryptography.x509.PrecertificateSignedCertificateTimestamps`. + + It is an iterable containing one or more + :class:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp` + objects. + + :param list scts: A ``list`` of + :class:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp` + objects. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns + :attr:`~cryptography.x509.oid.ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS`. + + .. class:: DeltaCRLIndicator(crl_number) .. versionadded:: 2.1 @@ -3142,6 +3169,12 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.3.6.1.4.1.11129.2.4.3"``. + .. attribute:: SIGNED_CERTIFICATE_TIMESTAMPS + + .. versionadded:: 3.0 + + Corresponds to the dotted string ``"1.3.6.1.4.1.11129.2.4.5"``. + .. attribute:: POLICY_CONSTRAINTS Corresponds to the dotted string ``"2.5.29.36"``. The identifier for the diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 8bb5d542c72a..5543b57a4871 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -652,7 +652,7 @@ def _decode_inhibit_any_policy(backend, asn1_int): return x509.InhibitAnyPolicy(skip_certs) -def _decode_precert_signed_certificate_timestamps(backend, asn1_scts): +def _decode_scts(backend, asn1_scts): from cryptography.hazmat.backends.openssl.x509 import ( _SignedCertificateTimestamp ) @@ -664,7 +664,19 @@ def _decode_precert_signed_certificate_timestamps(backend, asn1_scts): sct = backend._lib.sk_SCT_value(asn1_scts, i) scts.append(_SignedCertificateTimestamp(backend, asn1_scts, sct)) - return x509.PrecertificateSignedCertificateTimestamps(scts) + return scts + + +def _decode_precert_signed_certificate_timestamps(backend, asn1_scts): + return x509.PrecertificateSignedCertificateTimestamps( + _decode_scts(backend, asn1_scts) + ) + + +def _decode_signed_certificate_timestamps(backend, asn1_scts): + return x509.SignedCertificateTimestamps( + _decode_scts(backend, asn1_scts) + ) # CRLReason ::= ENUMERATED { @@ -872,7 +884,13 @@ def _decode_nonce(backend, nonce): # All revoked extensions are valid single response extensions, see: # https://tools.ietf.org/html/rfc6960#section-4.4.5 -_OCSP_SINGLERESP_EXTENSION_HANDLERS = _REVOKED_EXTENSION_HANDLERS.copy() +_OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT = _REVOKED_EXTENSION_HANDLERS.copy() +_OCSP_SINGLERESP_EXTENSION_HANDLERS = ( + _OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT.copy() +) +_OCSP_SINGLERESP_EXTENSION_HANDLERS[ + ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS +] = _decode_signed_certificate_timestamps _CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), @@ -921,3 +939,9 @@ def _decode_nonce(backend, nonce): get_ext=lambda backend, x, i: backend._lib.OCSP_SINGLERESP_get_ext(x, i), handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS, ) + +_OCSP_SINGLERESP_EXT_PARSER_NO_SCT = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.OCSP_SINGLERESP_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.OCSP_SINGLERESP_get_ext(x, i), + handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT +) diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index e42565eff9b7..b413a190ce9a 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -11,6 +11,7 @@ from cryptography.hazmat.backends.openssl.decode_asn1 import ( _CRL_ENTRY_REASON_CODE_TO_ENUM, _OCSP_BASICRESP_EXT_PARSER, _OCSP_REQ_EXT_PARSER, _OCSP_SINGLERESP_EXT_PARSER, + _OCSP_SINGLERESP_EXT_PARSER_NO_SCT, _asn1_integer_to_int, _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_generalized_time, @@ -323,9 +324,14 @@ def extensions(self): @utils.cached_property @_requires_successful_response def single_extensions(self): - return _OCSP_SINGLERESP_EXT_PARSER.parse( - self._backend, self._single - ) + if self._backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER: + return _OCSP_SINGLERESP_EXT_PARSER.parse( + self._backend, self._single + ) + else: + return _OCSP_SINGLERESP_EXT_PARSER_NO_SCT.parse( + self._backend, self._single + ) def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index fb4d7929c3b6..b935f6a4efc2 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -24,7 +24,8 @@ IssuingDistributionPoint, KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, OCSPNonce, PolicyConstraints, PolicyInformation, PrecertPoison, PrecertificateSignedCertificateTimestamps, ReasonFlags, - SubjectAlternativeName, SubjectInformationAccess, SubjectKeyIdentifier, + SignedCertificateTimestamps, SubjectAlternativeName, + SubjectInformationAccess, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice ) from cryptography.x509.general_name import ( @@ -187,4 +188,5 @@ "PrecertificateSignedCertificateTimestamps", "PrecertPoison", "OCSPNonce", + "SignedCertificateTimestamps", ] diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index ad728afaf0c7..712d377744cd 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1438,6 +1438,49 @@ def __ne__(self, other): return not self == other +@utils.register_interface(ExtensionType) +class SignedCertificateTimestamps(object): + oid = ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS + + def __init__(self, signed_certificate_timestamps): + signed_certificate_timestamps = list(signed_certificate_timestamps) + if not all( + isinstance(sct, SignedCertificateTimestamp) + for sct in signed_certificate_timestamps + ): + raise TypeError( + "Every item in the signed_certificate_timestamps list must be " + "a SignedCertificateTimestamp" + ) + self._signed_certificate_timestamps = signed_certificate_timestamps + + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_signed_certificate_timestamps" + ) + + def __repr__(self): + return ( + "".format( + list(self) + ) + ) + + def __hash__(self): + return hash(tuple(self._signed_certificate_timestamps)) + + def __eq__(self, other): + if not isinstance(other, SignedCertificateTimestamps): + return NotImplemented + + return ( + self._signed_certificate_timestamps == + other._signed_certificate_timestamps + ) + + def __ne__(self, other): + return not self == other + + @utils.register_interface(ExtensionType) class OCSPNonce(object): oid = OCSPExtensionOID.NONCE diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 31be0e6b0b38..5893754ece37 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -37,6 +37,9 @@ class ExtensionOID(object): PRECERT_POISON = ( ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") ) + SIGNED_CERTIFICATE_TIMESTAMPS = ( + ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") + ) class OCSPExtensionOID(object): @@ -231,6 +234,9 @@ class CertificatePoliciesOID(object): ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: ( "signedCertificateTimestampList" ), + ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS: ( + "signedCertificateTimestampList" + ), ExtensionOID.PRECERT_POISON: "ctPoison", CRLEntryExtensionOID.CRL_REASON: "cRLReason", CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate", diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 2b6ec569b9b7..48c012f2cded 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -566,6 +566,75 @@ def test_invalid_build_successful_status(self): ) +class TestSignedCertificateTimestampsExtension(object): + def test_init(self): + with pytest.raises(TypeError): + x509.SignedCertificateTimestamps([object()]) + + def test_repr(self): + assert repr(x509.SignedCertificateTimestamps([])) == ( + "" + ) + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_eq(self, backend): + sct1 = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ).single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ).value + sct2 = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ).single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ).value + assert sct1 == sct2 + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_ne(self, backend): + sct1 = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ).single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ).value + sct2 = x509.SignedCertificateTimestamps([]) + assert sct1 != sct2 + assert sct1 != object() + + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_hash(self, backend): + sct1 = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ).single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ).value + sct2 = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ).single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ).value + sct3 = x509.SignedCertificateTimestamps([]) + assert hash(sct1) == hash(sct2) + assert hash(sct1) != hash(sct3) + + class TestOCSPResponse(object): def test_bad_response(self): with pytest.raises(ValueError): @@ -756,6 +825,48 @@ def test_invalid_serialize_encoding(self): with pytest.raises(ValueError): resp.public_bytes(serialization.Encoding.PEM) + @pytest.mark.supported( + only_if=lambda backend: ( + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL 1.1.0f+", + ) + def test_single_extensions_sct(self, backend): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + assert len(resp.single_extensions) == 1 + ext = resp.single_extensions[0] + assert ext.oid == x509.ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") + assert len(ext.value) == 4 + log_ids = [base64.b64encode(sct.log_id) for sct in ext.value] + assert log_ids == [ + b'RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=', + b'b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=', + b'u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=', + b'7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/cs=' + ] + + @pytest.mark.supported( + only_if=lambda backend: ( + not backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + skip_message="Requires OpenSSL < 1.1.0f", + ) + def test_skips_single_extensions_scts_if_unsupported(self, backend): + resp = _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + with pytest.raises(x509.ExtensionNotFound): + resp.single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ) + + ext = resp.single_extensions.get_extension_for_oid( + x509.ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS + ) + assert isinstance(ext.value, x509.UnrecognizedExtension) + def test_single_extensions(self, backend): resp = _load_data( os.path.join("x509", "ocsp", "resp-single-extension-reason.der"), From 7d915fa4f91dc619182e449c9bffac667040d474 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 5 Jul 2020 15:51:59 -0400 Subject: [PATCH 854/988] Enforce that X.509 versions on valid on parse. (#5299) Closes #5290 --- CHANGELOG.rst | 3 +++ .../hazmat/backends/openssl/x509.py | 26 +++++++++---------- tests/x509/test_x509.py | 11 ++++---- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8dadc15e399c..ef54d0de83f9 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,9 @@ Changelog :meth:`~cryptography.hazmat.primitives.asymmetric.rsa.generate_private_key` no longer accepts ``public_exponent`` values except 65537 and 3 (the latter for legacy purposes). +* **BACKWARDS INCOMPATIBLE:** X.509 certificate parsing now enforces that the + ``version`` field contains a valid value, rather than deferring this check + until :attr:`~cryptography.x509.Certificate.version` is accessed. * Deprecated support for Python 2. At the time there is no time table for actually dropping support, however we strongly encourage all users to upgrade their Python, as Python 2 no longer receives support from the Python core diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index efbb1793098f..bf4fb22abd2e 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -24,9 +24,19 @@ @utils.register_interface(x509.Certificate) class _Certificate(object): - def __init__(self, backend, x509): + def __init__(self, backend, x509_cert): self._backend = backend - self._x509 = x509 + self._x509 = x509_cert + + version = self._backend._lib.X509_get_version(self._x509) + if version == 0: + self._version = x509.Version.v1 + elif version == 2: + self._version = x509.Version.v3 + else: + raise x509.InvalidVersion( + "{} is not a valid X509 version".format(version), version + ) def __repr__(self): return "".format(self.subject) @@ -49,17 +59,7 @@ def fingerprint(self, algorithm): h.update(self.public_bytes(serialization.Encoding.DER)) return h.finalize() - @property - def version(self): - version = self._backend._lib.X509_get_version(self._x509) - if version == 0: - return x509.Version.v1 - elif version == 2: - return x509.Version.v3 - else: - raise x509.InvalidVersion( - "{} is not a valid X509 version".format(version), version - ) + version = utils.read_only_property("_version") @property def serial_number(self): diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 89d20c3b2c35..c561f87191a1 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1000,13 +1000,12 @@ def test_generalized_time_not_after_cert(self, backend): assert cert.version is x509.Version.v3 def test_invalid_version_cert(self, backend): - cert = _load_cert( - os.path.join("x509", "custom", "invalid_version.pem"), - x509.load_pem_x509_certificate, - backend - ) with pytest.raises(x509.InvalidVersion) as exc: - cert.version + _load_cert( + os.path.join("x509", "custom", "invalid_version.pem"), + x509.load_pem_x509_certificate, + backend + ) assert exc.value.parsed_version == 7 From bd48e0f693ae8e0012219ea287467bb76623bb43 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 15:55:24 -0500 Subject: [PATCH 855/988] invalid challenge value csr (#5300) --- docs/development/test-vectors.rst | 3 +++ .../x509/requests/challenge-invalid.der | Bin 0 -> 633 bytes 2 files changed, 3 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/requests/challenge-invalid.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 4573e217272e..bfc4f3094bbd 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -446,6 +446,9 @@ Custom X.509 Request Vectors 1024 bit key containing an invalid signature with correct padding. * ``challenge.pem`` - A certificate signing request for an RSA 2048 bit key containing a challenge password. +* ``challenge-invalid.der`` - A certificate signing request for an RSA 2048 bit + key containing a challenge password attribute that has been encoded as an + ASN.1 integer rather than a string. Custom X.509 Certificate Revocation List Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/requests/challenge-invalid.der b/vectors/cryptography_vectors/x509/requests/challenge-invalid.der new file mode 100644 index 0000000000000000000000000000000000000000..dfea50244c31876b09ec1d781c71ab4ca5cce057 GIT binary patch literal 633 zcmXqLVk$LgVvJ>CWH8`0f@Un4gwRyCC=VfGMWMyD(V&rE4 zigPhFF)}jD{`uVGY=eZprM-cr)sk{Tb+;kWBR;c$@GtbSxs%9wiZpd z72G1n&9b$sOIRU`cklD2^-TYkrl-|ME573S?R6&B{IB(VjUeO0R&nlgeqCJMud!AB zb7|%uvACY{$kPW+_vGC%|LL;maK6vlud5c$n6or5{%zh5&Z?uIW^=A|J)0l1SKjh@ z$hHTZ_eD&foYidDShK?N$8?p>^Ld5uSNSA-?|uGl_wgqa|5^OG=Dsp?Y345ZZ>^87 zK6@h)Up;M+T@I7iK`!-24=z8bcFrtcG*2`7`l(CjP9^?-{B(Wz-r57o`;4`ov`u&S zT*=96B<0YPvod^Y$Z~%j=95g!j0}tmlnoT&VZ_O9D8eKpz<>rAk%N&N9E^+%Mj3LR z>vhiVI4@%VWAEXE>wg~<6mFGb`ZKfk#j}aEO|yQ_m3XMLAf;jUQ@6aH?9%t8-|g2= ze0g(1F!OH7)Q+OcH^*vJc>i+5W=H?qpu_h3kn*1NL!Np!o?TojAYx%){>6Fo4O^Wk zQ%6Sm-7kKeyYj0r&s1|$RCJX`K+vR)$cb5^9y#S&2l##}uqVztxotIr_xH3n=1-R& z+E`&>eb}&(mnBmoj%i76sFUF&Rn|*_7yha5T)Rh*kH1bTSN!U0<0;a{eT$33gxByc z?a;lz_aH3hQquH-RR*zp80N>yuKt(3@4-rjy&W~t42yh^DM(qCEwzod?r@oTsKixu J)8CKH9|3v}4@&?5 literal 0 HcmV?d00001 From c8689610332ff444580f1cdf08d50909290af008 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 20:06:39 -0500 Subject: [PATCH 856/988] add unstructured name x509 csr attribute vector (#5302) * add unstructured name x509 csr attribute vector * Update docs/development/test-vectors.rst Co-authored-by: Alex Gaynor Co-authored-by: Alex Gaynor --- docs/development/test-vectors.rst | 3 +++ .../x509/requests/challenge-unstructured.pem | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/requests/challenge-unstructured.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index bfc4f3094bbd..48f7bb3a9a26 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -449,6 +449,9 @@ Custom X.509 Request Vectors * ``challenge-invalid.der`` - A certificate signing request for an RSA 2048 bit key containing a challenge password attribute that has been encoded as an ASN.1 integer rather than a string. +* ``challenge-unstructured.pem`` - A certificate signing request for an RSA + 2048 bit key containing a challenge password attribute and an unstructured + name attribute. Custom X.509 Certificate Revocation List Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/requests/challenge-unstructured.pem b/vectors/cryptography_vectors/x509/requests/challenge-unstructured.pem new file mode 100644 index 000000000000..95a92ecb0983 --- /dev/null +++ b/vectors/cryptography_vectors/x509/requests/challenge-unstructured.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICljCCAX4CAQAwFDESMBAGA1UEAwwJc29tZXRoaW5nMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEApDAVEIXi90VT6Q8sCYl0sdzZaxIW5fGtk5M8Vmoe +iQbpWJtYZwQzOjOhgo9/+f/+Heg5gUI4+zUWyZMjh90KB5WrdTGO1x0yEUGjT15/ +VARFPmhyVniClEXPj4pANYVR00jMyvlLJuigKZbYR7VBTuE8oKOn2lu3eXuPFf6s +8bLjSHLuTS7t13LDlrO1jh2RvSKeQDwQP7ZHWzjTASW3H6bZla8lSx/6Xhvk5aJQ +JSMcEIYwPp7tP6+HV8E+FNjU19UZ3TsvGm60ZdoaCyFocgRFFju2wNSegmKzm00k +bAum7RR4dcso58vrkUz5AbZchdQ3dh9rRsggxgV/F5lMkwIDAQABoD0wFQYJKoZI +hvcNAQkHMQgMBmJlYXV0eTAkBgkqhkiG9w0BCQIxFwwVYW4gdW5zdHJ1Y3R1cmVk +IGZpZWxkMA0GCSqGSIb3DQEBCwUAA4IBAQA3lwNp3HtDQjzkqxv9SvUCH6C9UEh0 +6+SWklP2ce2IWmoHHnfYW2SyPAhzR1q2gSu7IVZhM3WMEJRoiqN2ZFQed++0b91n +LdUdCnDob8EFuX0AP7I4A9LI7G2bMS6mpzQBDXoo5hAlJV8I7Zq7NIby54bQiTgn +B8cYopnmrLfCn1H8Su8oBgPNg3glOQSAkvZfqhHNTJyAnN+5+boFWpReAe8p/cfr +kZh+fS8TcP7GbSLMnDlNwCAEIYRfAW7MVXJZ0l0tuDo7XdPImQgjjHYCk0tKPbeb +LVyIAPNkMYLu7II79OOi8h1cZfU6wWwUIIhjMzjLpdZBPyhhGnUQzfuZ +-----END CERTIFICATE REQUEST----- + From 7a233b9a602d76684e17d509d9a5378eeee6a362 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 20:19:39 -0500 Subject: [PATCH 857/988] support 4096 bit DSA parsing from numbers classes (#5301) * support 4096 bit DSA parsing from numbers classes * need to get local linting fixed. * reorder * add a link to more reasons why DSA sucks --- docs/development/test-vectors.rst | 2 ++ docs/hazmat/primitives/asymmetric/dsa.rst | 34 ++++++++++++------ .../hazmat/backends/openssl/backend.py | 6 ++-- .../hazmat/primitives/asymmetric/dsa.py | 6 ++-- tests/hazmat/primitives/test_dsa.py | 22 ++++++++++++ .../asymmetric/PEM_Serialization/dsa_4096.pem | 36 +++++++++++++++++++ 6 files changed, 92 insertions(+), 14 deletions(-) create mode 100644 vectors/cryptography_vectors/asymmetric/PEM_Serialization/dsa_4096.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 48f7bb3a9a26..2e3acaab4ffd 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -78,6 +78,8 @@ Custom asymmetric vectors * ``asymmetric/PEM_Serialization/rsa_public_key.pem`` and ``asymmetric/DER_Serialization/rsa_public_key.der``- Contains an RSA 2048 bit public generated using OpenSSL from ``rsa_private_key.pem``. +* ``asymmetric/PEM_Serialization/dsa_4096.pem`` - Contains a 4096-bit DSA + private key generated using OpenSSL. * ``asymmetric/PEM_Serialization/dsaparam.pem`` - Contains 2048-bit DSA parameters generated using OpenSSL; contains no keys. * ``asymmetric/PEM_Serialization/dsa_private_key.pem`` - Contains a DSA 2048 diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index 1456de4541dd..142ce1aeb010 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -5,6 +5,13 @@ DSA .. module:: cryptography.hazmat.primitives.asymmetric.dsa +.. note:: + + DSA is a **legacy algorithm** and should generally be avoided in favor of + choices like + :doc:`EdDSA using curve25519` or + :doc:`ECDSA`. + `DSA`_ is a `public-key`_ algorithm for signing messages. Generation @@ -14,15 +21,18 @@ Generation .. versionadded:: 0.5 + .. versionchanged:: 3.0 + + Added support for 4096-bit keys for some legacy applications that + continue to use DSA despite the wider cryptographic community's + `ongoing protestations`_. + Generate a DSA private key from the given key size. This function will generate a new set of parameters and key in one step. :param int key_size: The length of the modulus in :term:`bits`. It should - be either 1024, 2048 or 3072. For keys generated in 2015 this should - be `at least 2048`_ (See page 41). Note that some applications - (such as SSH) have not yet gained support for larger key sizes - specified in FIPS 186-3 and are still restricted to only the - 1024-bit keys specified in FIPS 186-2. + be either 1024, 2048, 3072, or 4096. For keys generated in 2015 this + should be `at least 2048`_ (See page 41). :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. @@ -38,14 +48,17 @@ Generation .. versionadded:: 0.5 + .. versionchanged:: 3.0 + + Added support for 4096-bit keys for some legacy applications that + continue to use DSA despite the wider cryptographic community's + `ongoing protestations`_. + Generate DSA parameters using the provided ``backend``. :param int key_size: The length of :attr:`~DSAParameterNumbers.q`. It - should be either 1024, 2048 or 3072. For keys generated in 2015 this - should be `at least 2048`_ (See page 41). Note that some applications - (such as SSH) have not yet gained support for larger key sizes - specified in FIPS 186-3 and are still restricted to only the - 1024-bit keys specified in FIPS 186-2. + should be either 1024, 2048, 3072, or 4096. For keys generated in 2015 + this should be `at least 2048`_ (See page 41). :param backend: An instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. @@ -446,3 +459,4 @@ Key interfaces .. _`public-key`: https://en.wikipedia.org/wiki/Public-key_cryptography .. _`FIPS 186-4`: https://csrc.nist.gov/publications/detail/fips/186/4/final .. _`at least 2048`: https://www.cosic.esat.kuleuven.be/ecrypt/ecrypt2/documents/D.SPA.20.pdf +.. _`ongoing protestations`: https://buttondown.email/cryptography-dispatches/archive/cryptography-dispatches-dsa-is-past-its-prime/ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 9ca75d8b96ba..83b64411d2c2 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -626,8 +626,10 @@ def rsa_padding_supported(self, padding): return False def generate_dsa_parameters(self, key_size): - if key_size not in (1024, 2048, 3072): - raise ValueError("Key size must be 1024 or 2048 or 3072 bits.") + if key_size not in (1024, 2048, 3072, 4096): + raise ValueError( + "Key size must be 1024, 2048, 3072, or 4096 bits." + ) ctx = self._lib.DSA_new() self.openssl_assert(ctx != self._ffi.NULL) diff --git a/src/cryptography/hazmat/primitives/asymmetric/dsa.py b/src/cryptography/hazmat/primitives/asymmetric/dsa.py index e380a441f1ff..678b9d4943f4 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -128,8 +128,10 @@ def generate_private_key(key_size, backend): def _check_dsa_parameters(parameters): - if parameters.p.bit_length() not in [1024, 2048, 3072]: - raise ValueError("p must be exactly 1024, 2048, or 3072 bits long") + if parameters.p.bit_length() not in [1024, 2048, 3072, 4096]: + raise ValueError( + "p must be exactly 1024, 2048, 3072, or 4096 bits long" + ) if parameters.q.bit_length() not in [160, 224, 256]: raise ValueError("q must be exactly 160, 224, or 256 bits long") diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 9e1acf935968..4287ad2a0620 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -349,6 +349,28 @@ def test_invalid_dsa_public_key_arguments(self, p, q, g, y, backend): y=y ).public_key(backend) + def test_large_p(self, backend): + key = load_vectors_from_file( + os.path.join("asymmetric", "PEM_Serialization", "dsa_4096.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None, backend + ), mode="rb" + ) + pn = key.private_numbers() + assert pn.public_numbers.parameter_numbers.p.bit_length() == 4096 + # Turn it back into a key to confirm that values this large pass + # verification + dsa.DSAPrivateNumbers( + public_numbers=dsa.DSAPublicNumbers( + parameter_numbers=dsa.DSAParameterNumbers( + p=pn.public_numbers.parameter_numbers.p, + q=pn.public_numbers.parameter_numbers.q, + g=pn.public_numbers.parameter_numbers.g, + ), + y=pn.public_numbers.y + ), x=pn.x + ).private_key(backend) + @pytest.mark.requires_backend_interface(interface=DSABackend) class TestDSAVerification(object): diff --git a/vectors/cryptography_vectors/asymmetric/PEM_Serialization/dsa_4096.pem b/vectors/cryptography_vectors/asymmetric/PEM_Serialization/dsa_4096.pem new file mode 100644 index 000000000000..af14d247bf14 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/PEM_Serialization/dsa_4096.pem @@ -0,0 +1,36 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIGVQIBAAKCAgEAy8x5LsdCM2fSykikHtoZZPXcZIRm6ZQQTdpkOHyX9AAqVVpc +kXqUltbd1rLCPLrii/Syg1XBwsna7fUEci13xUHDk/97TLG9Z0qIH7NgdBQSFGTL +GWLRbp83nE1Hc+/b0htaABTT5AV5q54xoDED8AuP1b2l7SxrgJz/uDsvZcmHM0y3 +AxTiFkPCqNM+nHN7w3A5NJmFlvm3pl/8B9DCvLXILqiFYpKwewa4f3RUIqCuKlgJ +y1Yj5BtjiWzJV6153vuAuFaD86G7Pck6VQDEpaY8u0LrjAAgzjaUvD45uDgkw2HT +/sJDAkIWjpyPEEvXNUmgC8Eh52GCeJkT5iG04a83k67VPbbS3dENRgzrfYpmRIlJ +lfoxtIpFEkDT8jpioDIzven7JNIhNND0Y/bs3pxnkIjrs3jPGpW9dtoeP2RYSlle +QGqhu/B8lIEpruy94/Ujz7nVYnNSHZGY/Xk2pLR78B1tzk/mojcgTGtq76GHuY4+ +p2I49qThgWOGBT8b9ysYgI2momHcDkauYDq+l0dLg6h6XPPsXU/8qHL2e5bCW1ub +uMb0T4NwbLwl9rHc2gcKxfdqnK0S4hgfWR5nhDsLyBl04mBqnZaoQ/1Re5Kp1ZPU +a8/CR0oktwh8ZP0TmUbExSd8s/kAUJl49Fp2EGxFX3pF2u+mucbd7iDLVzMCIQC8 +2B6GLZaBrH0OZX2UWz8A10CuSHAqib45GIwrcEqVawKCAgALNtzq+Ap3IPQrjnsv +H9VLVoLx2X37UF6DQbX9ZMcnKNwooVNxkLPXokMIbVPcsegavw1ECgiCu/Ung+aM +Whd5w4iMMxq82I9nd8M2GUvg2QYYz5WOLsbJTk1kcV0WF+MzMrWCAuXiuCfYj90X +/TT4Dhd037fVfktjwzJFtox/NKKAM96/wm1MHfwy4s7L1cTe1IZZocZDB/4l9Ciw +zNAc/VlNfmheAp2RlrdY2waHVCdU/AJt3SNghUqLAn5dJELKyY37Kl9OHxlnWhTl +dTBzC6VFo4Gkro28/C2kY/PYkShEXPT1c8D63lbYdUt5dgnfkDpddjRvgXGLOltJ +1/iogrMq2EKYECoXtNzM7xXu4vxMNERjbyuhWg9qw0mczFgel1R7UWeMAz5a7J5S +fHs2p94/iyQZPHHzR4DEXC/dcuUer5koPJvdIO6hbqMtfcWEusOEdOxRapjrzaLN +bCaL4c33j8y7FOK2JC+FAz4ljI9AIsomt73tyrRK0PFUrlh147cuOKZAGYHQJlaX +z6R/W8z71vO00/VvIZuzHOYiGZQdQ9FUiilQfrhGTF+SOyjBMSSantUUVUoYRC7E +Tc83vQEQnpe5VjX+naSCk/zv1JFGSSpmWn45aDSswmA9EjyKxg1Ae0MrshB8a80M +eqRrfGtlLuGT0KiYKse9z90VTAKCAgBFBTIdD1g7KRadTcyhoXw5+zMv9vVb4kDx +UAyuqPulh3xadD1FUMukQWjCzJDtx8xDSOj1U9Tal/DsUBtzS+MyPAQdsXhs4oYq +ska/OWc8287dtX2U511de2bd5GS9rI++HKLHES9RBkAhuo7l5cc+TGJ8XeFgbmdF +DStjyLy4ABLG0Fkk70nMHIIGal/axBz0kYhSf1W1XO2y2PAY8/sNwdHwI7TimEcL +qxakgneBjLn7L+SO3N5IRI1eLwl/0sj6ZUoaV6ZpPuTNDTo+7PQlMP+OqIL77R/M +2rsJSE186CI8IR99K7PylS2Gk+RWv6NcYnZCOcP4UdXEg7/cECjWaSKqn20q2Jrs +ZuVrRoVF4XsHmcItYj8JyeFcGUgUSlPVNMvO9L11IMvvgo9EQ5OU0UHiBZRoWWu6 +GWx7VqqNU078z2jL+q8MFcqNzqXM64DtVDc1sjdZSLcNzKRWiMrnek4MB+aL1l7G +hXdDRkj3qTRrkvzHBfxDm2u4lpMInFci1Lu0oxgqLEISYAGdyb1we+OMeqR12YUr +QP5/DtJdntE0hKMIWGkAYHvIowu2ZOUPs6mdgJZ/IL3qJsvLG2ZFpe3aBnbL8qj7 +/ezCts5E509IwRiVhvEik6ZKUjSYojkcWL88p4PGZsP1/iG8KQgMnCrPIOjYVTVM +Qs3D7GFsYAIgAhium9LrIx3luKDOsxS4nX9f8xChr+Z1Ej8xgaqp96Y= +-----END DSA PRIVATE KEY----- From 28e2783a81c28e1fa2f812027916298294dc2fe7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 21:29:32 -0500 Subject: [PATCH 858/988] support x509 request challenge password parsing (#4944) * support x509 request challenge password parsing * switch to a more generic (but not too generic) attribute parsing * make it raise a valueerror * Update tests/x509/test_x509.py Co-authored-by: Alex Gaynor Co-authored-by: Alex Gaynor --- CHANGELOG.rst | 2 + docs/x509/reference.rst | 32 +++++++++++++++ .../hazmat/backends/openssl/x509.py | 38 +++++++++++++++++- src/cryptography/x509/__init__.py | 5 ++- src/cryptography/x509/base.py | 12 ++++++ src/cryptography/x509/oid.py | 5 +++ tests/x509/test_x509.py | 39 +++++++++++++++++++ 7 files changed, 130 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ef54d0de83f9..d130bbe0ab5d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -42,6 +42,8 @@ Changelog X.509 extension. * Added support for parsing :class:`~cryptography.x509.SignedCertificateTimestamps` in OCSP responses. +* Added support for parsing attributes in certificate signing requests via + :meth:`~cryptography.x509.CertificateSigningRequest.get_attribute_for_oid`. .. _v2-9-2: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 402851d43cd7..cab877174773 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -894,6 +894,17 @@ X.509 CSR (Certificate Signing Request) Object :raises UnicodeError: If an extension contains IDNA encoding that is invalid or not compliant with IDNA 2008. + .. method:: get_attribute_for_oid(oid) + + .. versionadded:: 3.0 + + :param oid: An :class:`ObjectIdentifier` instance. + + :returns: The bytes value of the attribute or an exception if not + found. + + :raises cryptography.x509.AttributeNotFound: If the request does + not have the attribute requested. .. method:: public_bytes(encoding) @@ -3217,6 +3228,15 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.3.6.1.5.5.7.48.1.2"``. + +.. class:: AttributeOID + + .. versionadded:: 3.0 + + .. attribute:: CHALLENGE_PASSWORD + + Corresponds to the dotted string ``"1.2.840.113549.1.9.7"``. + Helper Functions ~~~~~~~~~~~~~~~~ .. currentmodule:: cryptography.x509 @@ -3264,6 +3284,18 @@ Exceptions Returns the OID. +.. class:: AttributeNotFound + + This is raised when calling + :meth:`CertificateSigningRequest.get_attribute_for_oid` with + an attribute OID that is not present in the request. + + .. attribute:: oid + + :type: :class:`ObjectIdentifier` + + Returns the OID. + .. class:: UnsupportedGeneralNameType This is raised when a certificate contains an unsupported general name diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index bf4fb22abd2e..1bae5c01358a 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -16,10 +16,11 @@ _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_time ) from cryptography.hazmat.backends.openssl.encode_asn1 import ( - _encode_asn1_int_gc + _encode_asn1_int_gc, _txt2obj_gc ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa +from cryptography.x509.name import _ASN1Type @utils.register_interface(x509.Certificate) @@ -485,6 +486,41 @@ def is_signature_valid(self): return True + def get_attribute_for_oid(self, oid): + obj = _txt2obj_gc(self._backend, oid.dotted_string) + pos = self._backend._lib.X509_REQ_get_attr_by_OBJ( + self._x509_req, obj, -1 + ) + if pos == -1: + raise x509.AttributeNotFound( + "No {} attribute was found".format(oid), oid + ) + + attr = self._backend._lib.X509_REQ_get_attr(self._x509_req, pos) + self._backend.openssl_assert(attr != self._backend._ffi.NULL) + asn1_type = self._backend._lib.X509_ATTRIBUTE_get0_type(attr, pos) + self._backend.openssl_assert(asn1_type != self._backend._ffi.NULL) + # We need this to ensure that our C type cast is safe. + # Also this should always be a sane string type, but we'll see if + # that is true in the real world... + if asn1_type.type not in ( + _ASN1Type.UTF8String.value, + _ASN1Type.PrintableString.value, + _ASN1Type.IA5String.value, + ): + raise ValueError("OID {} has a disallowed ASN.1 type: {}".format( + oid, asn1_type.type + )) + + data = self._backend._lib.X509_ATTRIBUTE_get0_data( + attr, pos, asn1_type.type, self._backend._ffi.NULL + ) + self._backend.openssl_assert(data != self._backend._ffi.NULL) + # This cast is safe iff we assert on the type above to ensure + # that it is always a type of ASN1_STRING + data = self._backend._ffi.cast("ASN1_STRING *", data) + return _asn1_string_to_bytes(self._backend, data) + @utils.register_interface( x509.certificate_transparency.SignedCertificateTimestamp diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index b935f6a4efc2..47b790089d27 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -6,8 +6,8 @@ from cryptography.x509 import certificate_transparency from cryptography.x509.base import ( - Certificate, CertificateBuilder, CertificateRevocationList, - CertificateRevocationListBuilder, + AttributeNotFound, Certificate, CertificateBuilder, + CertificateRevocationList, CertificateRevocationListBuilder, CertificateSigningRequest, CertificateSigningRequestBuilder, InvalidVersion, RevokedCertificate, RevokedCertificateBuilder, Version, load_der_x509_certificate, load_der_x509_crl, load_der_x509_csr, @@ -121,6 +121,7 @@ "load_pem_x509_crl", "load_der_x509_crl", "random_serial_number", + "AttributeNotFound", "InvalidVersion", "DeltaCRLIndicator", "DuplicateExtension", diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 3983c9b38b2f..aefaef2e9e3a 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -22,6 +22,12 @@ _EARLIEST_UTC_TIME = datetime.datetime(1950, 1, 1) +class AttributeNotFound(Exception): + def __init__(self, msg, oid): + super(AttributeNotFound, self).__init__(msg) + self.oid = oid + + def _reject_duplicate_extension(extension, extensions): # This is quadratic in the number of extensions for e in extensions: @@ -367,6 +373,12 @@ def is_signature_valid(self): Verifies signature of signing request. """ + @abc.abstractproperty + def get_attribute_for_oid(self): + """ + Get the attribute value for a given OID. + """ + @six.add_metaclass(abc.ABCMeta) class RevokedCertificate(object): diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 5893754ece37..7553f97701fe 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -162,6 +162,10 @@ class CertificatePoliciesOID(object): ANY_POLICY = ObjectIdentifier("2.5.29.32.0") +class AttributeOID(object): + CHALLENGE_PASSWORD = ObjectIdentifier("1.2.840.113549.1.9.7") + + _OID_NAMES = { NameOID.COMMON_NAME: "commonName", NameOID.COUNTRY_NAME: "countryName", @@ -265,4 +269,5 @@ class CertificatePoliciesOID(object): CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice", OCSPExtensionOID.NONCE: "OCSPNonce", + AttributeOID.CHALLENGE_PASSWORD: "challengePassword", } diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index c561f87191a1..e515e0e74297 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1232,6 +1232,45 @@ def test_load_rsa_certificate_request(self, path, loader_func, backend): assert isinstance(extensions, x509.Extensions) assert list(extensions) == [] + def test_get_attribute_for_oid(self, backend): + request = _load_cert( + os.path.join( + "x509", "requests", "challenge.pem" + ), x509.load_pem_x509_csr, backend + ) + assert request.get_attribute_for_oid( + x509.oid.AttributeOID.CHALLENGE_PASSWORD + ) == b"challenge me!" + + def test_invalid_attribute_for_oid(self, backend): + """ + This test deliberately triggers a ValueError because to parse + CSR attributes we need to do a C cast. If we're wrong about the + type that would be Very Bad so this test confirms we properly explode + in the presence of the wrong types. + """ + request = _load_cert( + os.path.join( + "x509", "requests", "challenge-invalid.der" + ), x509.load_der_x509_csr, backend + ) + with pytest.raises(ValueError): + request.get_attribute_for_oid( + x509.oid.AttributeOID.CHALLENGE_PASSWORD + ) + + def test_no_challenge_password(self, backend): + request = _load_cert( + os.path.join( + "x509", "requests", "rsa_sha256.pem" + ), x509.load_pem_x509_csr, backend + ) + with pytest.raises(x509.AttributeNotFound) as exc: + request.get_attribute_for_oid( + x509.oid.AttributeOID.CHALLENGE_PASSWORD + ) + assert exc.value.oid == x509.oid.AttributeOID.CHALLENGE_PASSWORD + @pytest.mark.parametrize( "loader_func", [x509.load_pem_x509_csr, x509.load_der_x509_csr] From 99bf4e4605cbe54bad597da1ebe4cc323909083c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 21:43:31 -0500 Subject: [PATCH 859/988] remove NPN bindings -- you should be using ALPN! (#4765) * remove NPN bindings -- you should be using ALPN! pyOpenSSL consumed these, but we've marked it as deprecated and it already handles the case where the bindings are not available. * set Cryptography_HAS_NEXTPROTONEG to 0 for pyOpenSSL we can remove this symbol in like...5 years. * remove another NPN related definition * suspicious * Revert "remove another NPN related definition" This reverts commit d872a7d1d776858c77b8c607f63cc9b5fef1ae39. Revert "suspicious" This reverts commit 5b767484f1cde132f686600a46e61a18e33cbdae. --- src/_cffi_src/openssl/ssl.py | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 4ba8669307ea..a00a0595bddc 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -139,8 +139,6 @@ static const long TLS_ST_BEFORE; static const long TLS_ST_OK; -static const long OPENSSL_NPN_NEGOTIATED; - typedef ... SSL_METHOD; typedef ... SSL_CTX; @@ -440,25 +438,9 @@ long SSL_session_reused(SSL *); -void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *, - int (*)(SSL *, - const unsigned char **, - unsigned int *, - void *), - void *); -void SSL_CTX_set_next_proto_select_cb(SSL_CTX *, - int (*)(SSL *, - unsigned char **, - unsigned char *, - const unsigned char *, - unsigned int, - void *), - void *); int SSL_select_next_proto(unsigned char **, unsigned char *, const unsigned char *, unsigned int, const unsigned char *, unsigned int); -void SSL_get0_next_proto_negotiated(const SSL *, - const unsigned char **, unsigned *); int sk_SSL_CIPHER_num(Cryptography_STACK_OF_SSL_CIPHER *); const SSL_CIPHER *sk_SSL_CIPHER_value(Cryptography_STACK_OF_SSL_CIPHER *, int); @@ -665,7 +647,7 @@ static const long Cryptography_HAS_SSL_OP_MSIE_SSLV2_RSA_PADDING = 1; static const long Cryptography_HAS_SSL_OP_NO_TICKET = 1; static const long Cryptography_HAS_SSL_SET_SSL_CTX = 1; -static const long Cryptography_HAS_NEXTPROTONEG = 1; +static const long Cryptography_HAS_NEXTPROTONEG = 0; static const long Cryptography_HAS_ALPN = 1; #if CRYPTOGRAPHY_IS_LIBRESSL From 84514ee6ee999b29f5640b28ce87e984a710619d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 5 Jul 2020 21:56:39 -0500 Subject: [PATCH 860/988] switch to a newer CSR with SHA256 and a challenge password (#5303) we'll parse the challenge password in a doctest after another PR lands --- docs/x509/reference.rst | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index cab877174773..a94b1cd789b3 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -22,22 +22,20 @@ X.509 Reference pem_req_data = b""" -----BEGIN CERTIFICATE REQUEST----- - MIIC0zCCAbsCAQAwWTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAw - DgYDVQQHDAdDaGljYWdvMREwDwYDVQQKDAhyNTA5IExMQzESMBAGA1UEAwwJaGVs - bG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqhZx+Mo9VRd9 - vsnWWa6NBCws21rZ0+1B/JGgB4hDsZS7iDE4Bj5z4idheFRtl8bBbdjPknq7BfoF - 8v15Zq/Zv7i2xMSDL+LUrTBZezRd4bRTGqCm6YJ5EYkhqdcqeZleHCFImguHoq1J - Fh0+kObQrTHXw3ZP57a3o1IvyIUA3nNoCBL0QQhwBXaDXOojMKNR+bqB5ve8GS1y - Elr0AM/+cJsfaIahNQUgFKx3Eu3GeEOMKYOAG1lycgdQdmTUybLrT3U7vkClTseM - xHg1r5En7ALjONIhqRuq3rddYahrP8HXozb3zUy3cJ7P6IeaosuvNzvMXOX9P6HD - Ha9urDAJ1wIDAQABoDUwMwYJKoZIhvcNAQkOMSYwJDAiBgNVHREEGzAZggl3b3Js - ZC5jb22CDHdoYXRldmVyLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAS4Ro6h+z52SK - YSLCYARpnEu/rmh4jdqndt8naqcNb6uLx9mlKZ2W9on9XDjnSdQD9q+ZP5aZfESw - R0+rJhW9ZrNa/g1pt6M24ihclHYDAxYMWxT1z/TXXGM3TmZZ6gfYlNE1kkBuODHa - UYsR/1Ht1E1EsmmUimt2n+zQR2K8T9Coa+boaUW/GsTEuz1aaJAkj5ZvTDiIhRG4 - AOCqFZOLAQmCCNgJnnspD9hDz/Ons085LF5wnYjN4/Nsk5tS6AGs3xjZ3jPoOGGn - 82WQ9m4dBGoVDZXsobVTaN592JEYwN5iu72zRn7Einb4V4H5y3yD2dD4yWPlt4pk - 5wFkeYsZEA== + MIICcDCCAVgCAQAwDTELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IB + DwAwggEKAoIBAQCb+ec0zYAYLzk/MDdDJYvzdvEO2ZUrBYM6z1r8NedwpJfxUWqC + hvK1cpc9EbQeCwS1eooTIGoNveeCrwL+pWdmf1sh6gz7SsxdN/07nyhSM8M6Xkec + +tGrjyi1H/N1afwWXox3WcvBNbxu3Df5RKLDb0yt9aqhmJylbl/tbvgJesXymwmp + Rc1vXL0fOedUtuAJ3xQ15M0pgLF8qDn4lySJz25x76pMYPeN5/a7x+SR/jj81kep + VaVpuh/2hePV5uwUX3uWoj5sAkrBCifi4NPge0Npd6KeKVvXytLOymH/4+WvV719 + wCO+MyrkhpdHSakJDTIaQIxsqVeVVKdPLAPJAgMBAAGgHjAcBgkqhkiG9w0BCQcx + DwwNY2hhbGxlbmdlIG1lITANBgkqhkiG9w0BAQsFAAOCAQEAMmgeSa8szbjPFD/4 + vcPBr/vBEROFGgL8mX3o5pF9gpr7nRjhLKBkgJvlRm6Ma3Xvdfc/r5Hp2ZBTA7sZ + ZYhyeezGfCQN/Qhda1v+sCwG58IjvGfCSS7Y5tGlEBQ4MDf0Q7PYPSxaNUEBH7vo + +M7U+nFuNSmyWlt6SFBSkohZkWoVSGx3KsAO+SAHYZ7JtqsAS/dm7Dflp8KxeDg7 + wzGBDQRpGF4CpI1VQjGSJQXSEdD+J7mtvBEOD34abRfV6zOUGzOOo3NWE6wNpYgt + 0A7gVlzSYpdwqjBdvACfXR2r/mu+4KkAvYh8WwCiTcYgGjl2pT1bO4hEmcJ0RSWy + /fGD8Q== -----END CERTIFICATE REQUEST----- """.strip() @@ -263,7 +261,7 @@ Loading Certificate Signing Requests >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> csr = x509.load_pem_x509_csr(pem_req_data, default_backend()) - >>> isinstance(csr.signature_hash_algorithm, hashes.SHA1) + >>> isinstance(csr.signature_hash_algorithm, hashes.SHA256) True .. function:: load_der_x509_csr(data, backend) @@ -861,7 +859,7 @@ X.509 CSR (Certificate Signing Request) Object .. doctest:: >>> from cryptography.hazmat.primitives import hashes - >>> isinstance(csr.signature_hash_algorithm, hashes.SHA1) + >>> isinstance(csr.signature_hash_algorithm, hashes.SHA256) True .. attribute:: signature_algorithm_oid @@ -877,7 +875,7 @@ X.509 CSR (Certificate Signing Request) Object .. doctest:: >>> csr.signature_algorithm_oid - + .. attribute:: extensions @@ -1996,7 +1994,7 @@ X.509 Extensions >>> from cryptography.hazmat.backends import default_backend >>> csr = x509.load_pem_x509_csr(pem_req_data, default_backend()) >>> x509.SubjectKeyIdentifier.from_public_key(csr.public_key()) - + .. class:: SubjectAlternativeName(general_names) From 87b660d5802e22d56a8d17a18bdadfc1082739fd Mon Sep 17 00:00:00 2001 From: Steven Pitman <54860889+pitmanst@users.noreply.github.com> Date: Wed, 15 Jul 2020 10:17:56 -0400 Subject: [PATCH 861/988] Add support for IBM z/OS (#5304) --- src/_cffi_src/build_openssl.py | 5 ++++- src/_cffi_src/openssl/callbacks.py | 18 +++++++++++++++++- src/_cffi_src/openssl/src/osrandom_engine.h | 4 +++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index a09d6d8e8005..8cc1066ad338 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -40,7 +40,10 @@ def _get_openssl_libraries(platform): # -lpthread required due to usage of pthread an potential # existance of a static part containing e.g. pthread_atfork # (https://github.com/pyca/cryptography/issues/5084) - return ["ssl", "crypto", "pthread"] + if sys.platform == 'zos': + return ["ssl", "crypto"] + else: + return ["ssl", "crypto", "pthread"] def _extra_compile_args(platform): diff --git a/src/_cffi_src/openssl/callbacks.py b/src/_cffi_src/openssl/callbacks.py index 8ee01e0ed1a1..33ebf4df400f 100644 --- a/src/_cffi_src/openssl/callbacks.py +++ b/src/_cffi_src/openssl/callbacks.py @@ -20,6 +20,10 @@ #include #include #endif + +#ifdef __MVS__ +#include +#endif """ TYPES = """ @@ -66,11 +70,23 @@ perror("Fatal error in callback initialization: " #call); \ abort(); \ } +#ifdef __MVS__ +/* When pthread_mutex_init is called more than once on the same mutex, + on z/OS this throws an EBUSY error. +*/ +#define ASSERT_STATUS_INIT(call) \ + if ((call) != 0 && errno != EBUSY) { \ + perror("Fatal error in callback initialization: " #call); \ + abort(); \ + } +#else +#define ASSERT_STATUS_INIT ASSERT_STATUS +#endif static inline void cryptography_mutex_init(Cryptography_mutex *mutex) { #if !defined(pthread_mutexattr_default) # define pthread_mutexattr_default ((pthread_mutexattr_t *)NULL) #endif - ASSERT_STATUS(pthread_mutex_init(mutex, pthread_mutexattr_default)); + ASSERT_STATUS_INIT(pthread_mutex_init(mutex, pthread_mutexattr_default)); } static inline void cryptography_mutex_lock(Cryptography_mutex *mutex) { ASSERT_STATUS(pthread_mutex_lock(mutex)); diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index cf394f22a2fd..47089b2eb1bc 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -6,7 +6,9 @@ #include #include /* for defined(BSD) */ - #include + #ifndef __MVS__ + #include + #endif #ifdef BSD /* for SYS_getentropy */ From 0064ce63c31ee8cfde235de33ae9d9f0b7461fba Mon Sep 17 00:00:00 2001 From: Tristan Seligmann Date: Sat, 18 Jul 2020 16:15:10 +0200 Subject: [PATCH 862/988] Set vectors -x. (#5310) --- vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp | 0 vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp | 0 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp | 0 20 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp mode change 100755 => 100644 vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224LongMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224Monte.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_224ShortMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256LongMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256Monte.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_256ShortMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384LongMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384Monte.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_384ShortMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512LongMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512Monte.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHA3/SHA3_512ShortMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128LongMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128Monte.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128ShortMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE128VariableOut.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256LongMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256Monte.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256ShortMsg.rsp old mode 100755 new mode 100644 diff --git a/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp b/vectors/cryptography_vectors/hashes/SHAKE/SHAKE256VariableOut.rsp old mode 100755 new mode 100644 From 68104923de3d4c537c650c6676af50d0d93cfae1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 18 Jul 2020 12:08:30 -0400 Subject: [PATCH 863/988] Avoid passing the wrong size to strncpy - simply use strcpy (#5311) We have already validated that `p` is large enough to store `name`. In `strncpy` the `len` parameter should generally be the length of the target buffer, not the source buffer. --- src/_cffi_src/openssl/src/osrandom_engine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index dc7b1d5e938a..a0b6685217e2 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -528,7 +528,7 @@ static int osrandom_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)) ENGINEerr(ENGINE_F_ENGINE_CTRL, ENGINE_R_INVALID_ARGUMENT); return 0; } - strncpy((char *)p, name, len); + strcpy((char *)p, name); return (int)len; default: ENGINEerr(ENGINE_F_ENGINE_CTRL, ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED); From 40e42fa65fade9d701dd2d3cf908e67c1e0aa916 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 Jul 2020 16:32:13 -0500 Subject: [PATCH 864/988] fix indexing on X509 request attribute value (#5312) --- src/_cffi_src/openssl/x509.py | 1 + src/cryptography/hazmat/backends/openssl/x509.py | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 0135a89a7456..315393698d6b 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -92,6 +92,7 @@ int X509_REQ_get_attr_by_OBJ(const X509_REQ *, const ASN1_OBJECT *, int); void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *, int, int, void *); ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *, int); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *); int X509_REQ_add1_attr_by_txt(X509_REQ *, const char *, int, const unsigned char *, int); diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 1bae5c01358a..efa4a8752761 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -498,7 +498,11 @@ def get_attribute_for_oid(self, oid): attr = self._backend._lib.X509_REQ_get_attr(self._x509_req, pos) self._backend.openssl_assert(attr != self._backend._ffi.NULL) - asn1_type = self._backend._lib.X509_ATTRIBUTE_get0_type(attr, pos) + # We don't support multiple valued attributes for now. + self._backend.openssl_assert( + self._backend._lib.X509_ATTRIBUTE_count(attr) == 1 + ) + asn1_type = self._backend._lib.X509_ATTRIBUTE_get0_type(attr, 0) self._backend.openssl_assert(asn1_type != self._backend._ffi.NULL) # We need this to ensure that our C type cast is safe. # Also this should always be a sane string type, but we'll see if @@ -513,7 +517,7 @@ def get_attribute_for_oid(self, oid): )) data = self._backend._lib.X509_ATTRIBUTE_get0_data( - attr, pos, asn1_type.type, self._backend._ffi.NULL + attr, 0, asn1_type.type, self._backend._ffi.NULL ) self._backend.openssl_assert(data != self._backend._ffi.NULL) # This cast is safe iff we assert on the type above to ensure From b8146690ecade63f9e6f3926891fcfdf77ede369 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 Jul 2020 17:35:25 -0500 Subject: [PATCH 865/988] support unstructured name x509 attributes (#5313) --- docs/x509/reference.rst | 10 ++++++++++ src/cryptography/x509/oid.py | 3 +++ tests/x509/test_x509.py | 15 ++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index a94b1cd789b3..625c3f3af025 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -2874,6 +2874,12 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"2.5.4.17"``. + .. attribute:: UNSTRUCTURED_NAME + + .. versionadded:: 3.0 + + Corresponds to the dotted string ``"1.2.840.113549.1.9.2"``. + .. class:: SignatureAlgorithmOID @@ -3235,6 +3241,10 @@ instances. The following common OIDs are available as constants. Corresponds to the dotted string ``"1.2.840.113549.1.9.7"``. + .. attribute:: UNSTRUCTURED_NAME + + Corresponds to the dotted string ``"1.2.840.113549.1.9.2"``. + Helper Functions ~~~~~~~~~~~~~~~~ .. currentmodule:: cryptography.x509 diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 7553f97701fe..544904329f08 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -82,6 +82,7 @@ class NameOID(object): INN = ObjectIdentifier("1.2.643.3.131.1.1") OGRN = ObjectIdentifier("1.2.643.100.1") SNILS = ObjectIdentifier("1.2.643.100.3") + UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2") class SignatureAlgorithmOID(object): @@ -164,6 +165,7 @@ class CertificatePoliciesOID(object): class AttributeOID(object): CHALLENGE_PASSWORD = ObjectIdentifier("1.2.840.113549.1.9.7") + UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2") _OID_NAMES = { @@ -196,6 +198,7 @@ class AttributeOID(object): NameOID.INN: "INN", NameOID.OGRN: "OGRN", NameOID.SNILS: "SNILS", + NameOID.UNSTRUCTURED_NAME: "unstructuredName", SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption", diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index e515e0e74297..a6a9ff9ca338 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1232,7 +1232,7 @@ def test_load_rsa_certificate_request(self, path, loader_func, backend): assert isinstance(extensions, x509.Extensions) assert list(extensions) == [] - def test_get_attribute_for_oid(self, backend): + def test_get_attribute_for_oid_challenge(self, backend): request = _load_cert( os.path.join( "x509", "requests", "challenge.pem" @@ -1242,6 +1242,19 @@ def test_get_attribute_for_oid(self, backend): x509.oid.AttributeOID.CHALLENGE_PASSWORD ) == b"challenge me!" + def test_get_attribute_for_oid_multiple(self, backend): + request = _load_cert( + os.path.join( + "x509", "requests", "challenge-unstructured.pem" + ), x509.load_pem_x509_csr, backend + ) + assert request.get_attribute_for_oid( + x509.oid.AttributeOID.CHALLENGE_PASSWORD + ) == b"beauty" + assert request.get_attribute_for_oid( + x509.oid.AttributeOID.UNSTRUCTURED_NAME + ) == b"an unstructured field" + def test_invalid_attribute_for_oid(self, backend): """ This test deliberately triggers a ValueError because to parse From e41177372f74ebda24da689ab67bbfe52436d219 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 Jul 2020 17:40:06 -0500 Subject: [PATCH 866/988] change KeyUsage repr to be less confusing (#5314) fixes #5127 --- docs/x509/reference.rst | 2 +- src/cryptography/x509/extensions.py | 7 +++++-- tests/x509/test_x509_ext.py | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 625c3f3af025..60566c177bb2 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -441,7 +441,7 @@ X.509 Certificate Object ... print(ext) , critical=False, value=)> , critical=False, value=)> - , critical=True, value=)> + , critical=True, value=)> , critical=False, value=, policy_qualifiers=None)>])>)> , critical=True, value=)> diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 712d377744cd..e4a6e821d63e 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -1054,8 +1054,11 @@ def __repr__(self): encipher_only = self.encipher_only decipher_only = self.decipher_only except ValueError: - encipher_only = None - decipher_only = None + # Users found None confusing because even though encipher/decipher + # have no meaning unless key_agreement is true, to construct an + # instance of the class you still need to pass False. + encipher_only = False + decipher_only = False return ("" + "ey_cert_sign=True, crl_sign=False, encipher_only=False, decipher_" + "only=False)>" ) def test_repr_key_agreement_true(self): From aded1cd02f6bf1c499a8d4d3805706c85068925e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 Jul 2020 19:55:25 -0500 Subject: [PATCH 867/988] support encoding attributes via CertificateSigningRequestBuilder (#5315) * support encoding attributes via CertificateSigningRequestBuilder * use a constant. now you know what 12 means! * pep8 --- CHANGELOG.rst | 2 ++ docs/x509/reference.rst | 15 +++++++++- src/_cffi_src/openssl/x509.py | 4 +-- .../hazmat/backends/openssl/backend.py | 8 +++++ src/cryptography/x509/base.py | 26 ++++++++++++++-- tests/x509/test_x509.py | 30 +++++++++++++++++++ 6 files changed, 79 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d130bbe0ab5d..fe5e6b1652d6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -44,6 +44,8 @@ Changelog :class:`~cryptography.x509.SignedCertificateTimestamps` in OCSP responses. * Added support for parsing attributes in certificate signing requests via :meth:`~cryptography.x509.CertificateSigningRequest.get_attribute_for_oid`. +* Added support for encoding attributes in certificate signing requests via + :meth:`~cryptography.x509.CertificateSigningRequestBuilder.add_attribute`. .. _v2-9-2: diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 60566c177bb2..1198bc43f310 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -1170,7 +1170,7 @@ X.509 CSR (Certificate Signing Request) Builder Object >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import rsa - >>> from cryptography.x509.oid import NameOID + >>> from cryptography.x509.oid import AttributeOID, NameOID >>> private_key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, @@ -1183,6 +1183,9 @@ X.509 CSR (Certificate Signing Request) Builder Object >>> builder = builder.add_extension( ... x509.BasicConstraints(ca=False, path_length=None), critical=True, ... ) + >>> builder = builder.add_attribute( + ... AttributeOID.CHALLENGE_PASSWORD, b"changeit" + ... ) >>> request = builder.sign( ... private_key, hashes.SHA256(), default_backend() ... ) @@ -1205,6 +1208,16 @@ X.509 CSR (Certificate Signing Request) Builder Object :returns: A new :class:`~cryptography.x509.CertificateSigningRequestBuilder`. + .. method:: add_attribute(oid, value) + + .. versionadded:: 3.0 + + :param oid: An :class:`ObjectIdentifier` instance. + :param value: The value of the attribute. + :type value: bytes + :returns: A new + :class:`~cryptography.x509.CertificateSigningRequestBuilder`. + .. method:: sign(private_key, algorithm, backend) :param backend: Backend that will be used to sign the request. diff --git a/src/_cffi_src/openssl/x509.py b/src/_cffi_src/openssl/x509.py index 315393698d6b..b88daa1f213d 100644 --- a/src/_cffi_src/openssl/x509.py +++ b/src/_cffi_src/openssl/x509.py @@ -93,8 +93,8 @@ void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *, int, int, void *); ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *, int); int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *); -int X509_REQ_add1_attr_by_txt(X509_REQ *, const char *, int, - const unsigned char *, int); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *, const ASN1_OBJECT *, + int, const unsigned char *, int); int X509V3_EXT_print(BIO *, X509_EXTENSION *, unsigned long, int); ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *); diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 83b64411d2c2..f8f59bbbde75 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -808,6 +808,14 @@ def create_x509_csr(self, builder, private_key, algorithm): res = self._lib.X509_REQ_add_extensions(x509_req, sk_extension) self.openssl_assert(res == 1) + # Add attributes (all bytes encoded as ASN1 UTF8_STRING) + for attr_oid, attr_val in builder._attributes: + obj = _txt2obj_gc(self, attr_oid.dotted_string) + res = self._lib.X509_REQ_add1_attr_by_OBJ( + x509_req, obj, x509.name._ASN1Type.UTF8String.value, + attr_val, len(attr_val)) + self.openssl_assert(res == 1) + # Sign the request using the requester's private key. res = self._lib.X509_REQ_sign( x509_req, private_key._evp_pkey, evp_md diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index aefaef2e9e3a..43c8305bfa74 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -17,6 +17,7 @@ ) from cryptography.x509.extensions import Extension, ExtensionType from cryptography.x509.name import Name +from cryptography.x509.oid import ObjectIdentifier _EARLIEST_UTC_TIME = datetime.datetime(1950, 1, 1) @@ -402,12 +403,13 @@ def extensions(self): class CertificateSigningRequestBuilder(object): - def __init__(self, subject_name=None, extensions=[]): + def __init__(self, subject_name=None, extensions=[], attributes=[]): """ Creates an empty X.509 certificate request (v1). """ self._subject_name = subject_name self._extensions = extensions + self._attributes = attributes def subject_name(self, name): """ @@ -417,7 +419,9 @@ def subject_name(self, name): raise TypeError('Expecting x509.Name object.') if self._subject_name is not None: raise ValueError('The subject name may only be set once.') - return CertificateSigningRequestBuilder(name, self._extensions) + return CertificateSigningRequestBuilder( + name, self._extensions, self._attributes + ) def add_extension(self, extension, critical): """ @@ -430,7 +434,23 @@ def add_extension(self, extension, critical): _reject_duplicate_extension(extension, self._extensions) return CertificateSigningRequestBuilder( - self._subject_name, self._extensions + [extension] + self._subject_name, self._extensions + [extension], + self._attributes + ) + + def add_attribute(self, oid, value): + """ + Adds an X.509 attribute with an OID and associated value. + """ + if not isinstance(oid, ObjectIdentifier): + raise TypeError("oid must be an ObjectIdentifier") + + if not isinstance(value, bytes): + raise TypeError("value must be bytes") + + return CertificateSigningRequestBuilder( + self._subject_name, self._extensions, + self._attributes + [(oid, value)] ) def sign(self, private_key, algorithm, backend): diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index a6a9ff9ca338..6a1fc59dc2e4 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -3622,6 +3622,36 @@ def test_add_two_extensions(self, backend): ) assert list(ext.value) == [x509.DNSName(u"cryptography.io")] + @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) + def test_add_attributes(self, backend): + _skip_curve_unsupported(backend, ec.SECP256R1()) + private_key = ec.generate_private_key(ec.SECP256R1(), backend) + challenge_password = b"challenge me!" + unstructured_name = b"no structure, for shame" + locality = b"this shouldn't even be an X509 attribute" + + request = x509.CertificateSigningRequestBuilder().subject_name( + x509.Name([ + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Texas'), + ]) + ).add_attribute( + x509.oid.AttributeOID.CHALLENGE_PASSWORD, challenge_password + ).add_attribute( + x509.oid.AttributeOID.UNSTRUCTURED_NAME, unstructured_name + ).add_attribute( + x509.oid.NameOID.LOCALITY_NAME, locality + ).sign(private_key, hashes.SHA256(), backend) + + assert request.get_attribute_for_oid( + x509.oid.AttributeOID.CHALLENGE_PASSWORD + ) == challenge_password + assert request.get_attribute_for_oid( + x509.oid.AttributeOID.UNSTRUCTURED_NAME + ) == unstructured_name + assert request.get_attribute_for_oid( + x509.oid.NameOID.LOCALITY_NAME + ) == locality + def test_set_subject_twice(self): builder = x509.CertificateSigningRequestBuilder() builder = builder.subject_name( From c51f7957ddf0ba85d45673bd336c532bce413602 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 Jul 2020 19:59:56 -0500 Subject: [PATCH 868/988] raise a valueerror on multi-SINGLERESP valued OCSP responses (#5316) InternalErrors are bad when we know they're reachable --- docs/development/test-vectors.rst | 2 ++ src/cryptography/hazmat/backends/openssl/ocsp.py | 10 +++++++--- tests/x509/test_ocsp.py | 7 +++++++ .../x509/ocsp/ocsp-army.deps.mil-resp.der | Bin 0 -> 3587 bytes 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 vectors/cryptography_vectors/x509/ocsp/ocsp-army.deps.mil-resp.der diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 2e3acaab4ffd..d2508203c7a6 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -532,6 +532,8 @@ X.509 OCSP Test Vectors contains a ``CRLReason`` single extension. * ``x509/ocsp/resp-sct-extension.der`` - An OCSP response containing a ``CT Certificate SCTs`` single extension, from the SwissSign OCSP responder. +* ``x509/ocsp/ocsp-army.deps.mil-resp.der`` - An OCSP response containing + multiple ``SINGLERESP`` values. Custom X.509 OCSP Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index b413a190ce9a..3b5528929cb5 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -104,9 +104,13 @@ def __init__(self, backend, ocsp_response): self._basic = self._backend._ffi.gc( basic, self._backend._lib.OCSP_BASICRESP_free ) - self._backend.openssl_assert( - self._backend._lib.OCSP_resp_count(self._basic) == 1 - ) + num_resp = self._backend._lib.OCSP_resp_count(self._basic) + if num_resp != 1: + raise ValueError( + "OCSP response contains more than one SINGLERESP structure" + ", which this library does not support. " + "{} found".format(num_resp) + ) self._single = self._backend._lib.OCSP_resp_get0(self._basic, 0) self._backend.openssl_assert( self._single != self._backend._ffi.NULL diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 48c012f2cded..98371a62cf53 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -695,6 +695,13 @@ def test_load_response(self): assert resp.serial_number == 271024907440004808294641238224534273948400 assert len(resp.extensions) == 0 + def test_load_multi_valued_response(self): + with pytest.raises(ValueError): + _load_data( + os.path.join("x509", "ocsp", "ocsp-army.deps.mil-resp.der"), + ocsp.load_der_ocsp_response, + ) + def test_load_unauthorized(self): resp = _load_data( os.path.join("x509", "ocsp", "resp-unauthorized.der"), diff --git a/vectors/cryptography_vectors/x509/ocsp/ocsp-army.deps.mil-resp.der b/vectors/cryptography_vectors/x509/ocsp/ocsp-army.deps.mil-resp.der new file mode 100644 index 0000000000000000000000000000000000000000..08125f0a9d48339b6b32f2620f51e25a2d3a7b36 GIT binary patch literal 3587 zcmXqL;{DIX$grS^_lH3f?-w>sZ8k<$R(1nMMwTYtr$C{H22C7!i^Nz&UbmJAF^0?Z z1vYUXSaiPrg8!cj+a>so42%p6jEsy74UH`f4WodH9SuqiYz#QrShe|>nWR`5SVU&( zA9;NA)x5q1u}^j`J7raF-C}f*MWpZO&NF|`^#yOyI`=|Q>-=oZob*#n%*+$#FBAkB zYiMC$Y78{o$k@;#3So}{7(^`qs{vbWX40ddx*P!!0E8W@NQQ_5^vOcz_0(8ZRebg^X_U2IuS7h6`)#g>(Hv1Juq zY*|egTh`FUmbFCMQbkcYwr-&qqOveFF)%c?j9S3V#mGvB(rrDFKBTM+-9Q&xHqynG zO+?zl&Bm$K=F#?@mywa1xrvdHA;hNmBo9MysAb>htYbAA$Nd^L&M3~9(s}Sg;hJav zI!bL8dM-LBquDCeJ6Yw(t@evSwQUXM$1+xYZk;5u#w}&{yDIOx?6#K^0%bo@N`iK4p(q?)HSv+kQ3(xHM)R}GXr2=GmipuO$>~o zT!Un4STAQF19BR(uqeoSKhJ<5Ki3cif9K!;1tS*)Q-dZ(C1h_ivN8Y@2|oi+oQnyR zS~k3GT%LMrbAN8^q^;X)=ZO@oynMx#?fklco;fXBOs=Y%IG^fJ&)v1?^Uh84npryv z?mgJLF_K}+q!W8@e3gm)e8xldySVU?qr&zv=E8Tng5R6mEEp56 z^B$k;;x|d0Yp(j=^3~z*tDsh`d)FH; zu)n#!X5#vf_n#bUl&;i5Hox*0WrDq+au8R*u)imA?-EeB-`> zt5@ZA%Jl^oRV4Pnu8{73BBr!JFx)*DUQUuRa+O z6PP;d_p8b4*wU)G1(}!`85kEgF$w`ggwH@87?!fiEWnh|fVItS;L64UY4iiz{FVmh z2Bt8+0aKf1MoCG5mA-y*QI1|pW^tlkZf1^tab|j+J}_!LU4p}%9pjBH^paDHzzI!O zm67p33n*zpjb!FD-~-vu4-#i#W@2wJ;79Z^SXr2WNmdr5fR6=77sJ2@B(1>WYT#@D zEEf{mJQ!1%7`auDIqJw9Edw4lF0e9SCSm49;RzzA8*XsAVPx?1?l@m3k#XFotoYr| z_@`=;iVmjJHcASJ1z5xP4XF|&9*rkDr1k92Bw*4t2)nG z_vb>J^6C$ZcgiUzJW>plRA0TSDj}iUl{f49i?f%%-^`o3BG2|^`g-ka=2bW1odi9; z{#|6>-W+wep1Wtw%>pqO<#|(Au2@xSR`AkPT=?tt|94xrY<9bm@%CNZ!#4^sR&#uQ z{9D3SzT*6WtG5jf+Pih Date: Sat, 18 Jul 2020 21:55:38 -0400 Subject: [PATCH 869/988] Implement __deepcopy__ for x509 certificates (#5318) fixes #5129 --- src/cryptography/hazmat/backends/openssl/x509.py | 3 +++ tests/x509/test_x509.py | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index efa4a8752761..9b3982707856 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -55,6 +55,9 @@ def __ne__(self, other): def __hash__(self): return hash(self.public_bytes(serialization.Encoding.DER)) + def __deepcopy__(self, memo): + return self + def fingerprint(self, algorithm): h = hashes.Hash(algorithm, self._backend) h.update(self.public_bytes(serialization.Encoding.DER)) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 6a1fc59dc2e4..febf00692f3a 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -7,6 +7,7 @@ import binascii import collections +import copy import datetime import ipaddress import os @@ -4807,6 +4808,14 @@ def test_load_pem_cert(self, backend): assert cert.signature_hash_algorithm is None assert cert.signature_algorithm_oid == SignatureAlgorithmOID.ED25519 + def test_deepcopy(self, backend): + cert = _load_cert( + os.path.join("x509", "ed25519", "root-ed25519.pem"), + x509.load_pem_x509_certificate, + backend + ) + assert copy.deepcopy(cert) is cert + @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), From 1604ea7ec0156a750c005a2d0cbddac83eebd14a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 18 Jul 2020 21:11:23 -0500 Subject: [PATCH 870/988] test exceptions and properly reject duplicate attributes in csrbuilder (#5319) --- src/cryptography/x509/base.py | 9 +++++++++ tests/x509/test_x509.py | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 43c8305bfa74..526fb5d6d582 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -36,6 +36,13 @@ def _reject_duplicate_extension(extension, extensions): raise ValueError('This extension has already been set.') +def _reject_duplicate_attribute(oid, attributes): + # This is quadratic in the number of attributes + for attr_oid, _ in attributes: + if attr_oid == oid: + raise ValueError('This attribute has already been set.') + + def _convert_to_naive_utc_time(time): """Normalizes a datetime to a naive datetime in UTC. @@ -448,6 +455,8 @@ def add_attribute(self, oid, value): if not isinstance(value, bytes): raise TypeError("value must be bytes") + _reject_duplicate_attribute(oid, self._attributes) + return CertificateSigningRequestBuilder( self._subject_name, self._extensions, self._attributes + [(oid, value)] diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index febf00692f3a..ced646506e62 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -3653,6 +3653,27 @@ def test_add_attributes(self, backend): x509.oid.NameOID.LOCALITY_NAME ) == locality + def test_add_attribute_bad_types(self, backend): + request = x509.CertificateSigningRequestBuilder() + with pytest.raises(TypeError): + request.add_attribute( + b"not an oid", b"val" + ) + + with pytest.raises(TypeError): + request.add_attribute( + x509.oid.AttributeOID.CHALLENGE_PASSWORD, 383 + ) + + def test_duplicate_attribute(self, backend): + request = x509.CertificateSigningRequestBuilder().add_attribute( + x509.oid.AttributeOID.CHALLENGE_PASSWORD, b"val" + ) + with pytest.raises(ValueError): + request.add_attribute( + x509.oid.AttributeOID.CHALLENGE_PASSWORD, b"val2" + ) + def test_set_subject_twice(self): builder = x509.CertificateSigningRequestBuilder() builder = builder.subject_name( From 084da16ebc272276557ac31f78b363b33d5e5335 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 19 Jul 2020 11:33:18 -0500 Subject: [PATCH 871/988] disable the osrandom engine on 1.1.1d+ (#5317) * disable the osrandom engine on 1.1.1d+ * skip (and run) some tests on 1.1.1d+ * simplify our conditionals * Update src/_cffi_src/openssl/src/osrandom_engine.c Co-authored-by: Alex Gaynor * words * more words * language * get coverage more cleverly * a word * Update .github/workflows/ci.yml Co-authored-by: Alex Gaynor Co-authored-by: Alex Gaynor --- .github/workflows/ci.yml | 24 ++++++++++--------- CHANGELOG.rst | 3 +++ docs/hazmat/backends/openssl.rst | 6 +++++ src/_cffi_src/openssl/cryptography.py | 9 +++++++ src/_cffi_src/openssl/src/osrandom_engine.c | 7 +++--- .../hazmat/backends/openssl/backend.py | 4 ++-- .../hazmat/bindings/openssl/binding.py | 2 +- tests/hazmat/backends/test_openssl.py | 10 ++++---- 8 files changed, 43 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e91b725b558..2a91b52ce837 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,11 +14,11 @@ jobs: strategy: matrix: PYTHON: - - {VERSION: "2.7", TOXENV: "py27"} - - {VERSION: "3.5", TOXENV: "py35"} - - {VERSION: "3.6", TOXENV: "py36"} - - {VERSION: "3.7", TOXENV: "py37"} - - {VERSION: "3.8", TOXENV: "py38"} + - {VERSION: "2.7", TOXENV: "py27", EXTRA_CFLAGS: ""} + - {VERSION: "3.5", TOXENV: "py35", EXTRA_CFLAGS: ""} + - {VERSION: "3.6", TOXENV: "py36", EXTRA_CFLAGS: ""} + - {VERSION: "3.7", TOXENV: "py37", EXTRA_CFLAGS: ""} + - {VERSION: "3.8", TOXENV: "py38", EXTRA_CFLAGS: "-DUSE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on macOS" steps: - uses: actions/checkout@master @@ -40,10 +40,11 @@ jobs: run: | CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \ LDFLAGS="${HOME}/openssl-macos/lib/libcrypto.a ${HOME}/openssl-macos/lib/libssl.a" \ - CFLAGS="-I${HOME}/openssl-macos/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.10 -march=core2" \ + CFLAGS="-I${HOME}/openssl-macos/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.10 -march=core2 $EXTRA_CFLAGS" \ tox -r -- --color=yes --wycheproof-root=wycheproof env: TOXENV: ${{ matrix.PYTHON.TOXENV }} + EXTRA_CFLAGS: ${{ matrix.PYTHON.EXTRA_CFLAGS }} - name: Upload coverage run: | @@ -58,11 +59,11 @@ jobs: - {ARCH: 'x86', WINDOWS: 'win32'} - {ARCH: 'x64', WINDOWS: 'win64'} PYTHON: - - {VERSION: "2.7", TOXENV: "py27", MSVC_VERSION: "2010"} - - {VERSION: "3.5", TOXENV: "py35", MSVC_VERSION: "2019"} - - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019"} - - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019"} - - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019"} + - {VERSION: "2.7", TOXENV: "py27", MSVC_VERSION: "2010", CL_FLAGS: ""} + - {VERSION: "3.5", TOXENV: "py35", MSVC_VERSION: "2019", CL_FLAGS: ""} + - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019", CL_FLAGS: ""} + - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019", CL_FLAGS: ""} + - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019", CL_FLAGS: "/D USE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" steps: - uses: actions/checkout@master @@ -85,6 +86,7 @@ jobs: python .github/workflows/download_openssl.py windows openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" + echo "::set-env name=CL::${{ matrix.PYTHON.CL_FLAGS }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: git clone https://github.com/google/wycheproof diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fe5e6b1652d6..456155a287ab 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -46,6 +46,9 @@ Changelog :meth:`~cryptography.x509.CertificateSigningRequest.get_attribute_for_oid`. * Added support for encoding attributes in certificate signing requests via :meth:`~cryptography.x509.CertificateSigningRequestBuilder.add_attribute`. +* On OpenSSL 1.1.1d and higher ``cryptography`` now uses OpenSSL's + built-in CSPRNG instead of its own OS random engine because these versions of + OpenSSL properly reseed on fork. .. _v2-9-2: diff --git a/docs/hazmat/backends/openssl.rst b/docs/hazmat/backends/openssl.rst index 56121cb55d96..0e695279dbe4 100644 --- a/docs/hazmat/backends/openssl.rst +++ b/docs/hazmat/backends/openssl.rst @@ -68,6 +68,12 @@ greater. OS random engine ---------------- +.. note:: + + As of OpenSSL 1.1.1d its CSPRNG is fork-safe by default. + ``cryptography`` does not compile or load the custom engine on + these versions. + By default OpenSSL uses a user-space CSPRNG that is seeded from system random ( ``/dev/urandom`` or ``CryptGenRandom``). This CSPRNG is not reseeded automatically when a process calls ``fork()``. This can result in situations diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index cd583313b431..369c23c74a5c 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -50,6 +50,14 @@ (OPENSSL_VERSION_NUMBER < 0x10101000 || CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B \ (OPENSSL_VERSION_NUMBER < 0x10101020 || CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_LESS_THAN_111D \ + (OPENSSL_VERSION_NUMBER < 0x10101040 || CRYPTOGRAPHY_IS_LIBRESSL) +#if (CRYPTOGRAPHY_OPENSSL_LESS_THAN_111D && !defined(OPENSSL_NO_ENGINE)) || \ + defined(USE_OSRANDOM_RNG_FOR_TESTING) +#define CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE 1 +#else +#define CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE 0 +#endif """ TYPES = """ @@ -60,6 +68,7 @@ static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B; +static const int CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE; static const int CRYPTOGRAPHY_IS_LIBRESSL; """ diff --git a/src/_cffi_src/openssl/src/osrandom_engine.c b/src/_cffi_src/openssl/src/osrandom_engine.c index a0b6685217e2..a84857b86df4 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.c +++ b/src/_cffi_src/openssl/src/osrandom_engine.c @@ -17,8 +17,9 @@ #include #endif -#ifndef OPENSSL_NO_ENGINE -/* OpenSSL has ENGINE support so build the engine. */ +#if CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE +/* OpenSSL has ENGINE support and is older than 1.1.1d (the first version that + * properly implements fork safety in its RNG) so build the engine. */ static const char *Cryptography_osrandom_engine_id = "osrandom"; /**************************************************************************** @@ -650,7 +651,7 @@ int Cryptography_add_osrandom_engine(void) { * to compile the osrandom engine, but we do need some * placeholders */ static const char *Cryptography_osrandom_engine_id = "no-engine-support"; -static const char *Cryptography_osrandom_engine_name = "osrandom_engine disabled due to no engine support"; +static const char *Cryptography_osrandom_engine_name = "osrandom_engine disabled"; int Cryptography_add_osrandom_engine(void) { return 0; diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index f8f59bbbde75..7e21b3366f85 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -135,7 +135,7 @@ def openssl_assert(self, ok): return binding._openssl_assert(self._lib, ok) def activate_builtin_random(self): - if self._lib.Cryptography_HAS_ENGINE: + if self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: # Obtain a new structural reference. e = self._lib.ENGINE_get_default_RAND() if e != self._ffi.NULL: @@ -168,7 +168,7 @@ def _get_osurandom_engine(self): self.openssl_assert(res == 1) def activate_osrandom_engine(self): - if self._lib.Cryptography_HAS_ENGINE: + if self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: # Unregister and free the current engine. self.activate_builtin_random() with self._get_osurandom_engine() as e: diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 4e23cd53f7d0..6c025433d179 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -114,7 +114,7 @@ def _register_osrandom_engine(cls): # reliably clear the error queue. Once we clear it here we will # error on any subsequent unexpected item in the stack. cls.lib.ERR_clear_error() - if cls.lib.Cryptography_HAS_ENGINE: + if cls.lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: result = cls.lib.Cryptography_add_osrandom_engine() _openssl_assert(cls.lib, result in (1, 2)) diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 44fd3db4210d..14b4fb9e6e96 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -169,8 +169,8 @@ def test_bn_to_int(self): @pytest.mark.skipif( - backend._lib.Cryptography_HAS_ENGINE == 0, - reason="Requires OpenSSL with ENGINE support") + not backend._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE, + reason="Requires OpenSSL with ENGINE support and OpenSSL < 1.1.1d") class TestOpenSSLRandomEngine(object): def setup(self): # The default RAND engine is global and shared between @@ -292,8 +292,8 @@ def test_activate_osrandom_already_default(self): @pytest.mark.skipif( - backend._lib.Cryptography_HAS_ENGINE == 1, - reason="Requires OpenSSL without ENGINE support") + backend._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE, + reason="Requires OpenSSL without ENGINE support or OpenSSL >=1.1.1d") class TestOpenSSLNoEngine(object): def test_no_engine_support(self): assert backend._ffi.string( @@ -301,7 +301,7 @@ def test_no_engine_support(self): ) == b"no-engine-support" assert backend._ffi.string( backend._lib.Cryptography_osrandom_engine_name - ) == b"osrandom_engine disabled due to no engine support" + ) == b"osrandom_engine disabled" def test_activate_builtin_random_does_nothing(self): backend.activate_builtin_random() From 31359f36c0678b6efcf66dd3fd6df000d8d093cd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 19 Jul 2020 13:31:29 -0400 Subject: [PATCH 872/988] fix grammar in error message (#5322) --- src/cryptography/hazmat/backends/openssl/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 7e21b3366f85..00b61e19c9ac 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -743,7 +743,7 @@ def _x509_check_signature_params(self, private_key, algorithm): elif not isinstance(private_key, (rsa.RSAPrivateKey, dsa.DSAPrivateKey, ec.EllipticCurvePrivateKey)): raise TypeError( - "Key must be rsa, dsa, ec, ed25519 or ed448 private key." + "Key must be an rsa, dsa, ec, ed25519, or ed448 private key." ) elif not isinstance(algorithm, hashes.HashAlgorithm): raise TypeError("Algorithm must be a registered hash algorithm.") From 972c886f6f8260052265fd68d5565d3ea0e40945 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 19 Jul 2020 21:46:20 -0500 Subject: [PATCH 873/988] refactor DH a bit to generate less parameters (#5326) speeds things up a bit and makes it easier to do the FIPS PR --- tests/hazmat/primitives/fixtures_dh.py | 24 +++++++++++++ tests/hazmat/primitives/test_dh.py | 47 ++++++++++++-------------- 2 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 tests/hazmat/primitives/fixtures_dh.py diff --git a/tests/hazmat/primitives/fixtures_dh.py b/tests/hazmat/primitives/fixtures_dh.py new file mode 100644 index 000000000000..f4698bc0c30b --- /dev/null +++ b/tests/hazmat/primitives/fixtures_dh.py @@ -0,0 +1,24 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.hazmat.primitives.asymmetric import dh + +FFDH3072_P = dh.DHParameterNumbers( + p=int( + "ffffffffffffffffadf85458a2bb4a9aafdc5620273d3cf1d8b9c583ce2d3695a9e" + "13641146433fbcc939dce249b3ef97d2fe363630c75d8f681b202aec4617ad3df1e" + "d5d5fd65612433f51f5f066ed0856365553ded1af3b557135e7f57c935984f0c70e" + "0e68b77e2a689daf3efe8721df158a136ade73530acca4f483a797abc0ab182b324" + "fb61d108a94bb2c8e3fbb96adab760d7f4681d4f42a3de394df4ae56ede76372bb1" + "90b07a7c8ee0a6d709e02fce1cdf7e2ecc03404cd28342f619172fe9ce98583ff8e" + "4f1232eef28183c3fe3b1b4c6fad733bb5fcbc2ec22005c58ef1837d1683b2c6f34" + "a26c1b2effa886b4238611fcfdcde355b3b6519035bbc34f4def99c023861b46fc9" + "d6e6c9077ad91d2691f7f7ee598cb0fac186d91caefe130985139270b4130c93bc4" + "37944f4fd4452e2d74dd364f2e21e71f54bff5cae82ab9c9df69ee86d2bc522363a" + "0dabc521979b0deada1dbf9a42d5c4484e0abcd06bfa53ddef3c1b20ee3fd59d7c2" + "5e41d2b66c62e37ffffffffffffffff", 16 + ), g=2 +) diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index 43f2ce5c0318..569989e0eccc 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -16,6 +16,7 @@ from cryptography.hazmat.primitives.asymmetric import dh from cryptography.utils import int_from_bytes +from .fixtures_dh import FFDH3072_P from ...doubles import DummyKeySerializationEncryption from ...utils import load_nist_vectors, load_vectors_from_file @@ -281,7 +282,7 @@ def test_generate_dh(self, backend, with_q): assert isinstance(key.parameters(), dh.DHParameters) def test_exchange(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) assert isinstance(parameters, dh.DHParameters) key1 = parameters.generate_private_key() @@ -289,14 +290,13 @@ def test_exchange(self, backend): symkey1 = key1.exchange(key2.public_key()) assert symkey1 - assert len(symkey1) == 512 // 8 + assert len(symkey1) == 3072 // 8 symkey2 = key2.exchange(key1.public_key()) assert symkey1 == symkey2 def test_exchange_algorithm(self, backend): - parameters = dh.generate_parameters(2, 512, backend) - + parameters = FFDH3072_P.parameters(backend) key1 = parameters.generate_private_key() key2 = parameters.generate_private_key() @@ -419,9 +419,8 @@ class TestDHPrivateKeySerialization(object): ], ] ) - def test_private_bytes_unencrypted(self, backend, encoding, - loader_func): - parameters = dh.generate_parameters(2, 512, backend) + def test_private_bytes_unencrypted(self, backend, encoding, loader_func): + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() serialized = key.private_bytes( encoding, serialization.PrivateFormat.PKCS8, @@ -442,7 +441,7 @@ def test_private_bytes_unencrypted(self, backend, encoding, ] ) def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() with pytest.raises(ValueError): key.private_bytes(encoding, fmt, serialization.NoEncryption()) @@ -536,7 +535,7 @@ def test_private_bytes_values(self, key_path, loader_func, assert private_numbers.public_numbers.parameter_numbers.q is None def test_private_bytes_traditional_openssl_invalid(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() with pytest.raises(ValueError): key.private_bytes( @@ -546,7 +545,7 @@ def test_private_bytes_traditional_openssl_invalid(self, backend): ) def test_private_bytes_invalid_encoding(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() with pytest.raises(TypeError): key.private_bytes( @@ -556,7 +555,7 @@ def test_private_bytes_invalid_encoding(self, backend): ) def test_private_bytes_invalid_format(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() with pytest.raises(ValueError): key.private_bytes( @@ -566,7 +565,7 @@ def test_private_bytes_invalid_format(self, backend): ) def test_private_bytes_invalid_encryption_algorithm(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() with pytest.raises(TypeError): key.private_bytes( @@ -576,7 +575,7 @@ def test_private_bytes_invalid_encryption_algorithm(self, backend): ) def test_private_bytes_unsupported_encryption_type(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() with pytest.raises(ValueError): key.private_bytes( @@ -604,9 +603,8 @@ class TestDHPublicKeySerialization(object): ], ] ) - def test_public_bytes(self, backend, encoding, - loader_func): - parameters = dh.generate_parameters(2, 512, backend) + def test_public_bytes(self, backend, encoding, loader_func): + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key().public_key() serialized = key.public_bytes( encoding, serialization.PublicFormat.SubjectPublicKeyInfo @@ -701,7 +699,7 @@ def test_public_bytes_values(self, key_path, loader_func, assert public_numbers.parameter_numbers.q is None def test_public_bytes_invalid_encoding(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key().public_key() with pytest.raises(TypeError): key.public_bytes( @@ -710,7 +708,7 @@ def test_public_bytes_invalid_encoding(self, backend): ) def test_public_bytes_pkcs1_unsupported(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key().public_key() with pytest.raises(ValueError): key.public_bytes( @@ -736,9 +734,8 @@ class TestDHParameterSerialization(object): ], ] ) - def test_parameter_bytes(self, backend, encoding, - loader_func): - parameters = dh.generate_parameters(2, 512, backend) + def test_parameter_bytes(self, backend, encoding, loader_func): + parameters = FFDH3072_P.parameters(backend) serialized = parameters.parameter_bytes( encoding, serialization.ParameterFormat.PKCS3 ) @@ -852,13 +849,13 @@ def test_public_bytes_values(self, param_path, loader_func, )) ) def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key().public_key() with pytest.raises(ValueError): key.public_bytes(encoding, fmt) def test_parameter_bytes_invalid_encoding(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) with pytest.raises(TypeError): parameters.parameter_bytes( "notencoding", @@ -866,7 +863,7 @@ def test_parameter_bytes_invalid_encoding(self, backend): ) def test_parameter_bytes_invalid_format(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) with pytest.raises(ValueError): parameters.parameter_bytes( serialization.Encoding.PEM, @@ -874,7 +871,7 @@ def test_parameter_bytes_invalid_format(self, backend): ) def test_parameter_bytes_openssh_unsupported(self, backend): - parameters = dh.generate_parameters(2, 512, backend) + parameters = FFDH3072_P.parameters(backend) with pytest.raises(TypeError): parameters.parameter_bytes( serialization.Encoding.OpenSSH, From 2fdb7472af5ec0c604c70356341535731a5aa926 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 20 Jul 2020 09:26:43 -0500 Subject: [PATCH 874/988] PKCS12 support (#5325) * generate_pkcs12 (#4952) * pkcs12 support * simplify * remove fixtures * reorg and other improvements. memleak check * ugh * more fixes * last changes hopefully Co-authored-by: Tomer Shalev --- CHANGELOG.rst | 2 + .../primitives/asymmetric/serialization.rst | 39 ++++++ .../hazmat/backends/openssl/backend.py | 55 +++++++++ .../hazmat/primitives/serialization/pkcs12.py | 37 ++++++ tests/hazmat/backends/test_openssl_memleak.py | 35 ++++++ tests/hazmat/primitives/test_pkcs12.py | 116 +++++++++++++++++- 6 files changed, 282 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 456155a287ab..efec7d08547b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -49,6 +49,8 @@ Changelog * On OpenSSL 1.1.1d and higher ``cryptography`` now uses OpenSSL's built-in CSPRNG instead of its own OS random engine because these versions of OpenSSL properly reseed on fork. +* Added initial support for creating PKCS12 files with + :func:`~cryptography.hazmat.primitives.serialization.pkcs12.serialize_key_and_certificates`. .. _v2-9-2: diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 529f2a79e74d..b2030609a4ce 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -489,6 +489,45 @@ file suffix. ``additional_certificates`` is a list of all other :class:`~cryptography.x509.Certificate` instances in the PKCS12 object. +.. function:: serialize_key_and_certificates(name, key, cert, cas, encryption_algorithm) + + .. versionadded:: 3.0 + + .. warning:: + + PKCS12 encryption is not secure and should not be used as a security + mechanism. Wrap a PKCS12 blob in a more secure envelope if you need + to store or send it safely. Encryption is provided for compatibility + reasons only. + + Serialize a PKCS12 blob. + + :param name: The friendly name to use for the supplied certificate and key. + :type name: bytes + + :param key: The private key to include in the structure. + :type key: An + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKeyWithSerialization` + , + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKeyWithSerialization` + , or + :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKeyWithSerialization` + object. + + :param cert: The certificate associated with the private key. + :type cert: :class:`~cryptography.x509.Certificate` or ``None`` + + :param cas: An optional set of certificates to also include in the structure. + :type cas: list of :class:`~cryptography.x509.Certificate` or ``None`` + + :param encryption_algorithm: The encryption algorithm that should be used + for the key and certificate. An instance of an object conforming to the + :class:`~cryptography.hazmat.primitives.serialization.KeySerializationEncryption` + interface. PKCS12 encryption is **very weak** and should not be used + as a security boundary. + + :return bytes: Serialized PKCS12. + Serialization Formats ~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 00b61e19c9ac..dc9c1557ada9 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2397,6 +2397,61 @@ def load_key_and_certificates_from_pkcs12(self, data, password): return (key, cert, additional_certificates) + def serialize_key_and_certificates_to_pkcs12(self, name, key, cert, cas, + encryption_algorithm): + password = None + if name is not None: + utils._check_bytes("name", name) + + if isinstance(encryption_algorithm, serialization.NoEncryption): + nid_cert = -1 + nid_key = -1 + pkcs12_iter = 0 + mac_iter = 0 + elif isinstance(encryption_algorithm, + serialization.BestAvailableEncryption): + # PKCS12 encryption is hopeless trash and can never be fixed. + # This is the least terrible option. + nid_cert = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC + nid_key = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC + # At least we can set this higher than OpenSSL's default + pkcs12_iter = 20000 + # mac_iter chosen for compatibility reasons, see: + # https://www.openssl.org/docs/man1.1.1/man3/PKCS12_create.html + # Did we mention how lousy PKCS12 encryption is? + mac_iter = 1 + password = encryption_algorithm.password + else: + raise ValueError("Unsupported key encryption type") + + if cas is None or len(cas) == 0: + sk_x509 = self._ffi.NULL + else: + sk_x509 = self._lib.sk_X509_new_null() + sk_x509 = self._ffi.gc(sk_x509, self._lib.sk_X509_free) + + # reverse the list when building the stack so that they're encoded + # in the order they were originally provided. it is a mystery + for ca in reversed(cas): + res = self._lib.sk_X509_push(sk_x509, ca._x509) + backend.openssl_assert(res >= 1) + + with self._zeroed_null_terminated_buf(password) as password_buf: + with self._zeroed_null_terminated_buf(name) as name_buf: + p12 = self._lib.PKCS12_create( + password_buf, name_buf, + key._evp_pkey if key else self._ffi.NULL, + cert._x509 if cert else self._ffi.NULL, + sk_x509, nid_key, nid_cert, pkcs12_iter, mac_iter, 0) + + self.openssl_assert(p12 != self._ffi.NULL) + p12 = self._ffi.gc(p12, self._lib.PKCS12_free) + + bio = self._create_mem_bio_gc() + res = self._lib.i2d_PKCS12_bio(bio, p12) + self.openssl_assert(res > 0) + return self._read_mem_bio(bio) + def poly1305_supported(self): return self._lib.Cryptography_HAS_POLY1305 == 1 diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs12.py b/src/cryptography/hazmat/primitives/serialization/pkcs12.py index 98161d57a330..32adef71993b 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs12.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs12.py @@ -4,6 +4,43 @@ from __future__ import absolute_import, division, print_function +from cryptography import x509 +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa + def load_key_and_certificates(data, password, backend): return backend.load_key_and_certificates_from_pkcs12(data, password) + + +def serialize_key_and_certificates(name, key, cert, cas, encryption_algorithm): + if key is not None and not isinstance( + key, (rsa.RSAPrivateKeyWithSerialization, + dsa.DSAPrivateKeyWithSerialization, + ec.EllipticCurvePrivateKeyWithSerialization)): + raise TypeError( + "Key must be RSA, DSA, or EllipticCurve private key." + ) + if cert is not None and not isinstance(cert, x509.Certificate): + raise TypeError("cert must be a certificate") + + if cas is not None: + cas = list(cas) + if not all(isinstance(val, x509.Certificate) for val in cas): + raise TypeError("all values in cas must be certificates") + + if not isinstance( + encryption_algorithm, serialization.KeySerializationEncryption + ): + raise TypeError( + "Key encryption algorithm must be a " + "KeySerializationEncryption instance" + ) + + if key is None and cert is None and not cas: + raise ValueError("You must supply at least one of key, cert, or cas") + + return default_backend().serialize_key_and_certificates_to_pkcs12( + name, key, cert, cas, encryption_algorithm + ) diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 935ea3dfe319..2b21a89ff02c 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -449,3 +449,38 @@ def func(): cert = builder.sign(private_key, hashes.SHA256(), backend) cert.extensions """)) + + def test_write_pkcs12_key_and_certificates(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + import os + from cryptography import x509 + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives import serialization + from cryptography.hazmat.primitives.serialization import pkcs12 + import cryptography_vectors + + path = os.path.join('x509', 'custom', 'ca', 'ca.pem') + with cryptography_vectors.open_vector_file(path, "rb") as f: + cert = x509.load_pem_x509_certificate( + f.read(), backend + ) + path2 = os.path.join('x509', 'custom', 'dsa_selfsigned_ca.pem') + with cryptography_vectors.open_vector_file(path2, "rb") as f: + cert2 = x509.load_pem_x509_certificate( + f.read(), backend + ) + path3 = os.path.join('x509', 'letsencryptx3.pem') + with cryptography_vectors.open_vector_file(path3, "rb") as f: + cert3 = x509.load_pem_x509_certificate( + f.read(), backend + ) + key_path = os.path.join("x509", "custom", "ca", "ca_key.pem") + with cryptography_vectors.open_vector_file(key_path, "rb") as f: + key = serialization.load_pem_private_key( + f.read(), None, backend + ) + encryption = serialization.NoEncryption() + pkcs12.serialize_key_and_certificates( + b"name", key, cert, [cert2, cert3], encryption) + """)) diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py index 0bb76e25f001..d7c8b92abded 100644 --- a/tests/hazmat/primitives/test_pkcs12.py +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -11,16 +11,18 @@ from cryptography import x509 from cryptography.hazmat.backends.interfaces import DERSerializationBackend from cryptography.hazmat.backends.openssl.backend import _RC2 +from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.serialization import load_pem_private_key from cryptography.hazmat.primitives.serialization.pkcs12 import ( - load_key_and_certificates + load_key_and_certificates, serialize_key_and_certificates ) from .utils import load_vectors_from_file +from ...doubles import DummyKeySerializationEncryption @pytest.mark.requires_backend_interface(interface=DERSerializationBackend) -class TestPKCS12(object): +class TestPKCS12Loading(object): def _test_load_pkcs12_ec_keys(self, filename, password, backend): cert = load_vectors_from_file( os.path.join("x509", "custom", "ca", "ca.pem"), @@ -137,3 +139,113 @@ def test_buffer_protocol(self, backend): assert parsed_key is not None assert parsed_cert is not None assert parsed_more_certs == [] + + +def _load_cert(backend, path): + return load_vectors_from_file( + path, + lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read(), backend + ), mode='rb' + ) + + +def _load_ca(backend): + cert = _load_cert(backend, os.path.join('x509', 'custom', 'ca', 'ca.pem')) + key = load_vectors_from_file( + os.path.join('x509', 'custom', 'ca', 'ca_key.pem'), + lambda pemfile: load_pem_private_key( + pemfile.read(), None, backend + ), mode='rb' + ) + return cert, key + + +class TestPKCS12Creation(object): + @pytest.mark.parametrize('name', [None, b'name']) + @pytest.mark.parametrize(('encryption_algorithm', 'password'), [ + (serialization.BestAvailableEncryption(b'password'), b'password'), + (serialization.NoEncryption(), None) + ]) + def test_generate(self, backend, name, encryption_algorithm, password): + cert, key = _load_ca(backend) + p12 = serialize_key_and_certificates( + name, key, cert, None, encryption_algorithm) + + parsed_key, parsed_cert, parsed_more_certs = \ + load_key_and_certificates(p12, password, backend) + assert parsed_cert == cert + assert parsed_key.private_numbers() == key.private_numbers() + assert parsed_more_certs == [] + + def test_generate_with_cert_key_ca(self, backend): + cert, key = _load_ca(backend) + cert2 = _load_cert( + backend, os.path.join('x509', 'custom', 'dsa_selfsigned_ca.pem') + ) + cert3 = _load_cert(backend, os.path.join('x509', 'letsencryptx3.pem')) + encryption = serialization.NoEncryption() + p12 = serialize_key_and_certificates( + None, key, cert, [cert2, cert3], encryption) + + parsed_key, parsed_cert, parsed_more_certs = \ + load_key_and_certificates(p12, None, backend) + assert parsed_cert == cert + assert parsed_key.private_numbers() == key.private_numbers() + assert parsed_more_certs == [cert2, cert3] + + def test_generate_wrong_types(self, backend): + cert, key = _load_ca(backend) + cert2 = _load_cert(backend, os.path.join('x509', 'letsencryptx3.pem')) + encryption = serialization.NoEncryption() + with pytest.raises(TypeError) as exc: + serialize_key_and_certificates( + b'name', cert, cert, None, encryption) + assert str(exc.value) == \ + 'Key must be RSA, DSA, or EllipticCurve private key.' + + with pytest.raises(TypeError) as exc: + serialize_key_and_certificates(b'name', key, key, None, encryption) + assert str(exc.value) == 'cert must be a certificate' + + with pytest.raises(TypeError) as exc: + serialize_key_and_certificates( + b'name', key, cert, None, key) + assert str( + exc.value) == ('Key encryption algorithm must be a ' + 'KeySerializationEncryption instance') + + with pytest.raises(TypeError) as exc: + serialize_key_and_certificates(None, key, cert, cert2, encryption) + + with pytest.raises(TypeError) as exc: + serialize_key_and_certificates(None, key, cert, [key], encryption) + assert str(exc.value) == 'all values in cas must be certificates' + + def test_generate_no_cert(self, backend): + _, key = _load_ca(backend) + p12 = serialize_key_and_certificates( + None, key, None, None, serialization.NoEncryption()) + parsed_key, parsed_cert, parsed_more_certs = \ + load_key_and_certificates(p12, None, backend) + assert parsed_cert is None + assert parsed_key.private_numbers() == key.private_numbers() + assert parsed_more_certs == [] + + def test_must_supply_something(self): + with pytest.raises(ValueError) as exc: + serialize_key_and_certificates( + None, None, None, None, serialization.NoEncryption() + ) + assert str(exc.value) == ( + 'You must supply at least one of key, cert, or cas' + ) + + def test_generate_unsupported_encryption_type(self, backend): + cert, key = _load_ca(backend) + with pytest.raises(ValueError) as exc: + serialize_key_and_certificates( + None, key, cert, None, + DummyKeySerializationEncryption(), + ) + assert str(exc.value) == 'Unsupported key encryption type' From 4a245a657a071dff959d30eff1d214c7ff88eada Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 20 Jul 2020 11:10:29 -0500 Subject: [PATCH 875/988] test FIPS mode on centos8 (#5323) * test FIPS mode on centos8 * remove branch we don't take * simpler * better comment * rename * revert some things that don't matter * small cleanups --- .travis.yml | 3 + .travis/run.sh | 1 + .travis/upload_coverage.sh | 4 +- src/_cffi_src/openssl/err.py | 1 + .../hazmat/backends/openssl/backend.py | 73 ++++++++++++++++++- tests/conftest.py | 11 ++- tests/hazmat/backends/test_openssl.py | 1 + tests/hazmat/backends/test_openssl_memleak.py | 2 + tests/hazmat/primitives/test_aead.py | 10 ++- tests/hazmat/primitives/test_dh.py | 13 ++++ tests/hazmat/primitives/test_dsa.py | 14 +++- tests/hazmat/primitives/test_ec.py | 7 +- tests/hazmat/primitives/test_pkcs12.py | 1 + tests/hazmat/primitives/test_rsa.py | 14 +++- tests/hazmat/primitives/test_serialization.py | 15 ++++ tests/hazmat/primitives/utils.py | 22 +++++- tests/wycheproof/test_aes.py | 8 ++ tox.ini | 3 +- 18 files changed, 191 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index a7dec16c9747..9c203101ae4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -64,6 +64,9 @@ matrix: - python: 3.6 services: docker env: TOXENV=py36 DOCKER=pyca/cryptography-runner-centos8 + - python: 3.6 + services: docker + env: TOXENV=py36 OPENSSL_FORCE_FIPS_MODE=1 DOCKER=pyca/cryptography-runner-centos8-fips - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-stretch diff --git a/.travis/run.sh b/.travis/run.sh index ab12ac3c8eea..53065609b54a 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -32,6 +32,7 @@ if [ -n "${DOCKER}" ]; then -v "${TRAVIS_BUILD_DIR}":"${TRAVIS_BUILD_DIR}" \ -v "${HOME}/wycheproof":/wycheproof \ -w "${TRAVIS_BUILD_DIR}" \ + -e OPENSSL_FORCE_FIPS_MODE \ -e TOXENV "${DOCKER}" \ /bin/sh -c "tox -- --wycheproof-root='/wycheproof'" elif [ -n "${TOXENV}" ]; then diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh index 7be892e31f31..2999bb7e6b25 100755 --- a/.travis/upload_coverage.sh +++ b/.travis/upload_coverage.sh @@ -14,8 +14,8 @@ if [ -n "${TOXENV}" ]; then source ~/.venv/bin/activate curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash || curl -o codecov.sh -f https://codecov.io/bash - bash codecov.sh -Z -e TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER || \ - bash codecov.sh -Z -e TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER + bash codecov.sh -Z -e TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER,OPENSSL_FORCE_FIPS_MODE || \ + bash codecov.sh -Z -e TRAVIS_OS_NAME,TOXENV,OPENSSL,DOCKER,OPENSSL_FORCE_FIPS_MODE ;; esac fi diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index ecdc6e3dea39..c0697f5d469b 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -81,6 +81,7 @@ static const int EVP_R_CAMELLIA_KEY_SETUP_FAILED; static const int EC_R_UNKNOWN_GROUP; +static const int EC_R_NOT_A_NIST_PRIME; static const int PEM_R_BAD_BASE64_DECODE; static const int PEM_R_BAD_DECRYPT; diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index dc9c1557ada9..0daea2d27468 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -7,6 +7,7 @@ import collections import contextlib import itertools +import warnings from contextlib import contextmanager import six @@ -119,14 +120,44 @@ class Backend(object): """ name = "openssl" + # FIPS has opinions about acceptable algorithms and key sizes, but the + # disallowed algorithms are still present in OpenSSL. They just error if + # you try to use them. To avoid that we allowlist the algorithms in + # FIPS 140-3. This isn't ideal, but FIPS 140-3 is trash so here we are. + _fips_aead = { + b'aes-128-ccm', b'aes-192-ccm', b'aes-256-ccm', + b'aes-128-gcm', b'aes-192-gcm', b'aes-256-gcm', + } + _fips_ciphers = ( + AES, TripleDES + ) + _fips_hashes = ( + hashes.SHA1, hashes.SHA224, hashes.SHA256, hashes.SHA384, + hashes.SHA512, hashes.SHA512_224, hashes.SHA512_256, hashes.SHA3_224, + hashes.SHA3_256, hashes.SHA3_384, hashes.SHA3_512, hashes.SHAKE128, + hashes.SHAKE256, + ) + _fips_rsa_min_key_size = 2048 + _fips_rsa_min_public_exponent = 65537 + _fips_dsa_min_modulus = 1 << 2048 + _fips_dh_min_key_size = 2048 + _fips_dh_min_modulus = 1 << _fips_dh_min_key_size + def __init__(self): self._binding = binding.Binding() self._ffi = self._binding.ffi self._lib = self._binding.lib + self._fips_enabled = self._is_fips_enabled() self._cipher_registry = {} self._register_default_ciphers() - self.activate_osrandom_engine() + if self._fips_enabled and self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: + warnings.warn( + "OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.", + UserWarning + ) + else: + self.activate_osrandom_engine() self._dh_types = [self._lib.EVP_PKEY_DH] if self._lib.Cryptography_HAS_EVP_PKEY_DHX: self._dh_types.append(self._lib.EVP_PKEY_DHX) @@ -134,6 +165,14 @@ def __init__(self): def openssl_assert(self, ok): return binding._openssl_assert(self._lib, ok) + def _is_fips_enabled(self): + fips_mode = getattr(self._lib, "FIPS_mode", lambda: 0) + mode = fips_mode() + if mode == 0: + # OpenSSL without FIPS pushes an error on the error stack + self._lib.ERR_clear_error() + return bool(mode) + def activate_builtin_random(self): if self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: # Obtain a new structural reference. @@ -222,6 +261,9 @@ def _evp_md_non_null_from_algorithm(self, algorithm): return evp_md def hash_supported(self, algorithm): + if self._fips_enabled and not isinstance(algorithm, self._fips_hashes): + return False + evp_md = self._evp_md_from_algorithm(algorithm) return evp_md != self._ffi.NULL @@ -232,6 +274,8 @@ def create_hash_ctx(self, algorithm): return _HashContext(self, algorithm) def cipher_supported(self, cipher, mode): + if self._fips_enabled and not isinstance(cipher, self._fips_ciphers): + return False try: adapter = self._cipher_registry[type(cipher), type(mode)] except KeyError: @@ -1380,6 +1424,11 @@ def elliptic_curve_supported(self, curve): errors[0]._lib_reason_match( self._lib.ERR_LIB_EC, self._lib.EC_R_UNKNOWN_GROUP + ) or + # This occurs in FIPS mode for unsupported curves on RHEL + errors[0]._lib_reason_match( + self._lib.ERR_LIB_EC, + self._lib.EC_R_NOT_A_NIST_PRIME ) ) return False @@ -1777,6 +1826,16 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, # TraditionalOpenSSL + PEM/DER if format is serialization.PrivateFormat.TraditionalOpenSSL: + if ( + self._fips_enabled and + not isinstance( + encryption_algorithm, serialization.NoEncryption + ) + ): + raise ValueError( + "Encrypted traditional OpenSSL format is not " + "supported in FIPS mode." + ) key_type = self._lib.EVP_PKEY_id(evp_pkey) if encoding is serialization.Encoding.PEM: @@ -2170,6 +2229,8 @@ def x25519_generate_key(self): return _X25519PrivateKey(self, evp_pkey) def x25519_supported(self): + if self._fips_enabled: + return False return self._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER def x448_load_public_bytes(self, data): @@ -2200,9 +2261,13 @@ def x448_generate_key(self): return _X448PrivateKey(self, evp_pkey) def x448_supported(self): + if self._fips_enabled: + return False return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 def ed25519_supported(self): + if self._fips_enabled: + return False return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B def ed25519_load_public_bytes(self, data): @@ -2238,6 +2303,8 @@ def ed25519_generate_key(self): return _Ed25519PrivateKey(self, evp_pkey) def ed448_supported(self): + if self._fips_enabled: + return False return not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B def ed448_load_public_bytes(self, data): @@ -2304,6 +2371,8 @@ def derive_scrypt(self, key_material, salt, length, n, r, p): def aead_cipher_supported(self, cipher): cipher_name = aead._aead_cipher_name(cipher) + if self._fips_enabled and cipher_name not in self._fips_aead: + return False return ( self._lib.EVP_get_cipherbyname(cipher_name) != self._ffi.NULL ) @@ -2453,6 +2522,8 @@ def serialize_key_and_certificates_to_pkcs12(self, name, key, cert, cas, return self._read_mem_bio(bio) def poly1305_supported(self): + if self._fips_enabled: + return False return self._lib.Cryptography_HAS_POLY1305 == 1 def create_poly1305_ctx(self, key): diff --git a/tests/conftest.py b/tests/conftest.py index fd690ce70db9..d159affc8cc1 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,7 +14,10 @@ def pytest_report_header(config): - return "OpenSSL: {}".format(openssl_backend.openssl_version_text()) + return "\n".join([ + "OpenSSL: {}".format(openssl_backend.openssl_version_text()), + "FIPS Enabled: {}".format(openssl_backend._fips_enabled), + ]) def pytest_addoption(parser): @@ -33,6 +36,12 @@ def pytest_generate_tests(metafunc): metafunc.parametrize("wycheproof", testcases) +def pytest_runtest_setup(item): + if openssl_backend._fips_enabled: + for marker in item.iter_markers(name="skip_fips"): + pytest.skip(marker.kwargs["reason"]) + + @pytest.fixture() def backend(request): required_interfaces = [ diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 14b4fb9e6e96..9d5d6fb4c327 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -171,6 +171,7 @@ def test_bn_to_int(self): @pytest.mark.skipif( not backend._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE, reason="Requires OpenSSL with ENGINE support and OpenSSL < 1.1.1d") +@pytest.mark.skip_fips(reason="osrandom engine disabled for FIPS") class TestOpenSSLRandomEngine(object): def setup(self): # The default RAND engine is global and shared between diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 2b21a89ff02c..b188fe5babaf 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -160,6 +160,7 @@ def skip_if_memtesting_not_supported(): ) +@pytest.mark.skip_fips(reason="FIPS self-test sets allow_customize = 0") @skip_if_memtesting_not_supported() class TestAssertNoMemoryLeaks(object): def test_no_leak_no_malloc(self): @@ -205,6 +206,7 @@ def func(): """)) +@pytest.mark.skip_fips(reason="FIPS self-test sets allow_customize = 0") @skip_if_memtesting_not_supported() class TestOpenSSLMemoryLeaks(object): @pytest.mark.parametrize("path", [ diff --git a/tests/hazmat/primitives/test_aead.py b/tests/hazmat/primitives/test_aead.py index 4f6bc7f4e81d..f8cf648ed45c 100644 --- a/tests/hazmat/primitives/test_aead.py +++ b/tests/hazmat/primitives/test_aead.py @@ -364,9 +364,15 @@ def test_data_too_large(self): aesgcm.encrypt(nonce, b"", FakeData()) @pytest.mark.parametrize("vector", _load_gcm_vectors()) - def test_vectors(self, vector): - key = binascii.unhexlify(vector["key"]) + def test_vectors(self, backend, vector): nonce = binascii.unhexlify(vector["iv"]) + + if backend._fips_enabled and len(nonce) != 12: + # Red Hat disables non-96-bit IV support as part of its FIPS + # patches. + pytest.skip("Non-96-bit IVs unsupported in FIPS mode.") + + key = binascii.unhexlify(vector["key"]) aad = binascii.unhexlify(vector["aad"]) ct = binascii.unhexlify(vector["ct"]) pt = binascii.unhexlify(vector.get("pt", b"")) diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index 569989e0eccc..98d1b5337f94 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -196,6 +196,7 @@ def test_dh_parameters_supported_with_q(self, backend, vector): int(vector["g"], 16), int(vector["q"], 16)) + @pytest.mark.skip_fips(reason="modulus too small for FIPS") @pytest.mark.parametrize("with_q", [False, True]) def test_convert_to_numbers(self, backend, with_q): if with_q: @@ -242,6 +243,7 @@ def test_numbers_unsupported_parameters(self, backend): with pytest.raises(ValueError): private.private_key(backend) + @pytest.mark.skip_fips(reason="FIPS requires key size >= 2048") @pytest.mark.parametrize("with_q", [False, True]) def test_generate_dh(self, backend, with_q): if with_q: @@ -309,6 +311,7 @@ def test_exchange_algorithm(self, backend): assert symkey == symkey_manual + @pytest.mark.skip_fips(reason="key_size too small for FIPS") def test_symmetric_key_padding(self, backend): """ This test has specific parameters that produce a symmetric key @@ -339,6 +342,11 @@ def test_symmetric_key_padding(self, backend): os.path.join("asymmetric", "DH", "bad_exchange.txt"), load_nist_vectors)) def test_bad_exchange(self, backend, vector): + if ( + backend._fips_enabled and + int(vector["p1"]) < backend._fips_dh_min_modulus + ): + pytest.skip("modulus too small for FIPS mode") parameters1 = dh.DHParameterNumbers(int(vector["p1"]), int(vector["g"])) public1 = dh.DHPublicNumbers(int(vector["y1"]), parameters1) @@ -370,6 +378,11 @@ def test_bad_exchange(self, backend, vector): os.path.join("asymmetric", "DH", "vec.txt"), load_nist_vectors)) def test_dh_vectors(self, backend, vector): + if ( + backend._fips_enabled and + int(vector["p"]) < backend._fips_dh_min_modulus + ): + pytest.skip("modulus too small for FIPS mode") parameters = dh.DHParameterNumbers(int(vector["p"]), int(vector["g"])) public = dh.DHPublicNumbers(int(vector["y"]), parameters) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 4287ad2a0620..fd1aa6ea5f30 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -23,6 +23,7 @@ from .fixtures_dsa import ( DSA_KEY_1024, DSA_KEY_2048, DSA_KEY_3072 ) +from .utils import skip_fips_traditional_openssl from ...doubles import DummyHashAlgorithm, DummyKeySerializationEncryption from ...utils import ( load_fips_dsa_key_pair_vectors, load_fips_dsa_sig_vectors, @@ -49,7 +50,7 @@ def test_skip_if_dsa_not_supported(backend): @pytest.mark.requires_backend_interface(interface=DSABackend) class TestDSA(object): def test_generate_dsa_parameters(self, backend): - parameters = dsa.generate_parameters(1024, backend) + parameters = dsa.generate_parameters(2048, backend) assert isinstance(parameters, dsa.DSAParameters) def test_generate_invalid_dsa_parameters(self, backend): @@ -65,6 +66,11 @@ def test_generate_invalid_dsa_parameters(self, backend): ) ) def test_generate_dsa_keys(self, vector, backend): + if ( + backend._fips_enabled and + vector['p'] < backend._fips_dsa_min_modulus + ): + pytest.skip("Small modulus blocked in FIPS mode") parameters = dsa.DSAParameterNumbers( p=vector['p'], q=vector['q'], @@ -91,7 +97,7 @@ def test_generate_dsa_keys(self, vector, backend): ) def test_generate_dsa_private_key_and_parameters(self, backend): - skey = dsa.generate_private_key(1024, backend) + skey = dsa.generate_private_key(2048, backend) assert skey numbers = skey.private_numbers() skey_parameters = numbers.public_numbers.parameter_numbers @@ -718,6 +724,7 @@ class TestDSASerialization(object): ) ) def test_private_bytes_encrypted_pem(self, backend, fmt, password): + skip_fips_traditional_openssl(backend, fmt) key_bytes = load_vectors_from_file( os.path.join("asymmetric", "PKCS8", "unenc-dsa-pkcs8.pem"), lambda pemfile: pemfile.read().encode() @@ -812,6 +819,9 @@ def test_private_bytes_unencrypted(self, backend, encoding, fmt, priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.skip_fips( + reason="Traditional OpenSSL key format is not supported in FIPS mode." + ) @pytest.mark.parametrize( ("key_path", "encoding", "loader_func"), [ diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 987c0ff02cac..5cfd3820e1e5 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -23,6 +23,7 @@ from cryptography.utils import CryptographyDeprecationWarning from .fixtures_ec import EC_KEY_SECP384R1 +from .utils import skip_fips_traditional_openssl from ...doubles import DummyKeySerializationEncryption from ...utils import ( load_fips_ecdsa_key_pair_vectors, load_fips_ecdsa_signing_vectors, @@ -45,7 +46,7 @@ def _skip_ecdsa_vector(backend, curve_type, hash_type): curve_type() ): pytest.skip( - "ECDSA not supported with this hash {} and curve {}".format( + "ECDSA not supported with this hash {} and curve {}.".format( hash_type().name, curve_type().name ) ) @@ -693,6 +694,7 @@ class TestECSerialization(object): ) ) def test_private_bytes_encrypted_pem(self, backend, fmt, password): + skip_fips_traditional_openssl(backend, fmt) _skip_curve_unsupported(backend, ec.SECP256R1()) key_bytes = load_vectors_from_file( os.path.join( @@ -798,6 +800,9 @@ def test_private_bytes_unencrypted(self, backend, encoding, fmt, priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.skip_fips( + reason="Traditional OpenSSL key format is not supported in FIPS mode." + ) @pytest.mark.parametrize( ("key_path", "encoding", "loader_func"), [ diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py index d7c8b92abded..61c5342394f9 100644 --- a/tests/hazmat/primitives/test_pkcs12.py +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -67,6 +67,7 @@ def test_load_pkcs12_ec_keys(self, filename, password, backend): only_if=lambda backend: backend.cipher_supported(_RC2(), None), skip_message="Does not support RC2" ) + @pytest.mark.skip_fips(reason="Unsupported algorithm in FIPS mode") def test_load_pkcs12_ec_keys_rc2(self, filename, password, backend): self._test_load_pkcs12_ec_keys(filename, password, backend) diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 0e7bb6446561..bde8b2095b7d 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -32,7 +32,8 @@ RSA_KEY_745, RSA_KEY_768, ) from .utils import ( - _check_rsa_private_numbers, generate_rsa_verification_test + _check_rsa_private_numbers, generate_rsa_verification_test, + skip_fips_traditional_openssl ) from ...doubles import ( DummyAsymmetricPadding, DummyHashAlgorithm, DummyKeySerializationEncryption @@ -152,6 +153,13 @@ class TestRSA(object): ) ) def test_generate_rsa_keys(self, backend, public_exponent, key_size): + if backend._fips_enabled: + if key_size < backend._fips_rsa_min_key_size: + pytest.skip("Key size not FIPS compliant: {}".format(key_size)) + if public_exponent < backend._fips_rsa_min_public_exponent: + pytest.skip("Exponent not FIPS compliant: {}".format( + public_exponent) + ) skey = rsa.generate_private_key(public_exponent, key_size, backend) assert skey.key_size == key_size @@ -2052,6 +2060,7 @@ class TestRSAPrivateKeySerialization(object): ) ) def test_private_bytes_encrypted_pem(self, backend, fmt, password): + skip_fips_traditional_openssl(backend, fmt) key = RSA_KEY_2048.private_key(backend) serialized = key.private_bytes( serialization.Encoding.PEM, @@ -2138,6 +2147,9 @@ def test_private_bytes_unencrypted(self, backend, encoding, fmt, priv_num = key.private_numbers() assert loaded_priv_num == priv_num + @pytest.mark.skip_fips( + reason="Traditional OpenSSL key format is not supported in FIPS mode." + ) @pytest.mark.parametrize( ("key_path", "encoding", "loader_func"), [ diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 77f791abe324..44f5cec6a507 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -40,6 +40,14 @@ from ...utils import raises_unsupported_algorithm +def _skip_fips_format(key_path, password, backend): + if backend._fips_enabled: + if key_path[0] == "Traditional_OpenSSL_Serialization": + pytest.skip("Traditional OpenSSL format blocked in FIPS mode") + if key_path[0] == "PEM_Serialization" and password is not None: + pytest.skip("Encrypted PEM_Serialization blocked in FIPS mode") + + class TestBufferProtocolSerialization(object): @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.parametrize( @@ -79,6 +87,7 @@ def test_load_der_rsa_private_key(self, key_path, password, backend): ] ) def test_load_pem_rsa_private_key(self, key_path, password, backend): + _skip_fips_format(key_path, password, backend) data = load_vectors_from_file( os.path.join("asymmetric", *key_path), lambda pemfile: pemfile.read(), mode="rb" @@ -404,6 +413,7 @@ class TestPEMSerialization(object): ] ) def test_load_pem_rsa_private_key(self, key_file, password, backend): + _skip_fips_format(key_file, password, backend) key = load_vectors_from_file( os.path.join("asymmetric", *key_file), lambda pemfile: load_pem_private_key( @@ -426,6 +436,7 @@ def test_load_pem_rsa_private_key(self, key_file, password, backend): ] ) def test_load_dsa_private_key(self, key_path, password, backend): + _skip_fips_format(key_path, password, backend) key = load_vectors_from_file( os.path.join("asymmetric", *key_path), lambda pemfile: load_pem_private_key( @@ -448,6 +459,7 @@ def test_load_dsa_private_key(self, key_path, password, backend): @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) def test_load_pem_ec_private_key(self, key_path, password, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) + _skip_fips_format(key_path, password, backend) key = load_vectors_from_file( os.path.join("asymmetric", *key_path), lambda pemfile: load_pem_private_key( @@ -516,6 +528,9 @@ def test_load_ec_public_key(self, backend): assert key.curve.name == "secp256r1" assert key.curve.key_size == 256 + @pytest.mark.skip_fips( + reason="Traditional OpenSSL format blocked in FIPS mode" + ) def test_rsa_traditional_encrypted_values(self, backend): pkey = load_vectors_from_file( os.path.join( diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py index 4aa5ce71ddf2..7e5fc0eefdec 100644 --- a/tests/hazmat/primitives/utils.py +++ b/tests/hazmat/primitives/utils.py @@ -14,9 +14,10 @@ AlreadyFinalized, AlreadyUpdated, InvalidSignature, InvalidTag, NotYetFinalized ) -from cryptography.hazmat.primitives import hashes, hmac +from cryptography.hazmat.primitives import hashes, hmac, serialization from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.ciphers import Cipher +from cryptography.hazmat.primitives.ciphers.modes import GCM from cryptography.hazmat.primitives.kdf.hkdf import HKDF, HKDFExpand from cryptography.hazmat.primitives.kdf.kbkdf import ( CounterLocation, KBKDFHMAC, Mode @@ -80,6 +81,15 @@ def test_aead(self, backend, params): def aead_test(backend, cipher_factory, mode_factory, params): + if ( + mode_factory is GCM and backend._fips_enabled and + len(params["iv"]) != 24 + ): + # Red Hat disables non-96-bit IV support as part of its FIPS + # patches. The check is for a byte length of 24 because the value is + # hex encoded. + pytest.skip("Non-96-bit IVs unsupported in FIPS mode.") + if params.get("pt") is not None: plaintext = params["pt"] ciphertext = params["ct"] @@ -470,3 +480,13 @@ def _check_dsa_private_numbers(skey): pkey = skey.public_numbers params = pkey.parameter_numbers assert pow(params.g, skey.x, params.p) == pkey.y + + +def skip_fips_traditional_openssl(backend, fmt): + if ( + fmt is serialization.PrivateFormat.TraditionalOpenSSL and + backend._fips_enabled + ): + pytest.skip( + "Traditional OpenSSL key format is not supported in FIPS mode." + ) diff --git a/tests/wycheproof/test_aes.py b/tests/wycheproof/test_aes.py index 55e454546c44..2b1ed77d019b 100644 --- a/tests/wycheproof/test_aes.py +++ b/tests/wycheproof/test_aes.py @@ -55,6 +55,10 @@ def test_aes_gcm(backend, wycheproof): msg = binascii.unhexlify(wycheproof.testcase["msg"]) ct = binascii.unhexlify(wycheproof.testcase["ct"]) tag = binascii.unhexlify(wycheproof.testcase["tag"]) + if backend._fips_enabled and len(iv) != 12: + # Red Hat disables non-96-bit IV support as part of its FIPS + # patches. + pytest.skip("Non-96-bit IVs unsupported in FIPS mode.") if wycheproof.valid or wycheproof.acceptable: enc = Cipher(algorithms.AES(key), modes.GCM(iv), backend).encryptor() enc.authenticate_additional_data(aad) @@ -94,6 +98,10 @@ def test_aes_gcm_aead_api(backend, wycheproof): msg = binascii.unhexlify(wycheproof.testcase["msg"]) ct = binascii.unhexlify(wycheproof.testcase["ct"]) tag = binascii.unhexlify(wycheproof.testcase["tag"]) + if backend._fips_enabled and len(iv) != 12: + # Red Hat disables non-96-bit IV support as part of its FIPS + # patches. + pytest.skip("Non-96-bit IVs unsupported in FIPS mode.") aesgcm = AESGCM(key) if wycheproof.valid or wycheproof.acceptable: computed_ct = aesgcm.encrypt(iv, msg, aad) diff --git a/tox.ini b/tox.ini index ca3579e7a378..989adf6ccc3b 100644 --- a/tox.ini +++ b/tox.ini @@ -13,7 +13,7 @@ deps = coverage ./vectors randomorder: pytest-randomly -passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING +passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING OPENSSL_FORCE_FIPS_MODE commands = pip list # We use parallel mode and then combine here so that coverage.py will take @@ -86,5 +86,6 @@ extensions = rst addopts = -r s markers = requires_backend_interface: this test requires a specific backend interface + skip_fips: this test is not executed in FIPS mode supported: parametrized test requiring only_if and skip_message wycheproof_tests: this test runs a wycheproof fixture From 60aa04481fb187334a783c2d9facc3fe814af5d1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 20 Jul 2020 14:06:29 -0400 Subject: [PATCH 876/988] Paint it Black by the Rolling Stones (#5324) --- .github/workflows/download_openssl.py | 10 +- docs/conf.py | 72 +- .../custom-vectors/arc4/generate_arc4.py | 51 +- .../custom-vectors/cast5/generate_cast5.py | 8 +- .../custom-vectors/hkdf/generate_hkdf.py | 16 +- .../custom-vectors/idea/generate_idea.py | 8 +- .../custom-vectors/idea/verify_idea.py | 17 +- .../rsa-oaep-sha2/generate_rsa_oaep_sha2.py | 20 +- .../secp256k1/generate_secp256k1.py | 21 +- .../secp256k1/verify_secp256k1.py | 29 +- .../custom-vectors/seed/generate_seed.py | 8 +- .../custom-vectors/seed/verify_seed.py | 17 +- pyproject.toml | 4 + release.py | 65 +- setup.py | 138 +- src/_cffi_src/build_openssl.py | 19 +- src/_cffi_src/build_padding.py | 12 +- src/_cffi_src/utils.py | 33 +- src/cryptography/__about__.py | 16 +- src/cryptography/__init__.py | 22 +- src/cryptography/fernet.py | 2 +- src/cryptography/hazmat/_der.py | 4 +- src/cryptography/hazmat/_oid.py | 29 +- src/cryptography/hazmat/backends/__init__.py | 1 + .../hazmat/backends/interfaces.py | 5 +- .../hazmat/backends/openssl/aead.py | 26 +- .../hazmat/backends/openssl/backend.py | 528 ++- .../hazmat/backends/openssl/ciphers.py | 74 +- .../hazmat/backends/openssl/cmac.py | 29 +- .../hazmat/backends/openssl/decode_asn1.py | 101 +- .../hazmat/backends/openssl/dh.py | 102 +- .../hazmat/backends/openssl/dsa.py | 31 +- .../hazmat/backends/openssl/ec.py | 69 +- .../hazmat/backends/openssl/ed25519.py | 39 +- .../hazmat/backends/openssl/ed448.py | 37 +- .../hazmat/backends/openssl/encode_asn1.py | 58 +- .../hazmat/backends/openssl/hashes.py | 24 +- .../hazmat/backends/openssl/hmac.py | 16 +- .../hazmat/backends/openssl/ocsp.py | 53 +- .../hazmat/backends/openssl/poly1305.py | 13 +- .../hazmat/backends/openssl/rsa.py | 140 +- .../hazmat/backends/openssl/utils.py | 10 +- .../hazmat/backends/openssl/x25519.py | 37 +- .../hazmat/backends/openssl/x448.py | 27 +- .../hazmat/backends/openssl/x509.py | 60 +- .../hazmat/bindings/openssl/_conditional.py | 20 +- .../hazmat/bindings/openssl/binding.py | 9 +- .../hazmat/primitives/asymmetric/dh.py | 25 +- .../hazmat/primitives/asymmetric/dsa.py | 15 +- .../hazmat/primitives/asymmetric/ec.py | 37 +- .../hazmat/primitives/asymmetric/ed25519.py | 9 +- .../hazmat/primitives/asymmetric/ed448.py | 9 +- .../hazmat/primitives/asymmetric/padding.py | 6 +- .../hazmat/primitives/asymmetric/rsa.py | 62 +- .../hazmat/primitives/asymmetric/utils.py | 6 +- .../hazmat/primitives/asymmetric/x25519.py | 9 +- .../hazmat/primitives/asymmetric/x448.py | 9 +- .../hazmat/primitives/ciphers/__init__.py | 9 +- .../hazmat/primitives/ciphers/aead.py | 18 +- .../hazmat/primitives/ciphers/algorithms.py | 11 +- .../hazmat/primitives/ciphers/base.py | 14 +- .../hazmat/primitives/ciphers/modes.py | 19 +- src/cryptography/hazmat/primitives/cmac.py | 14 +- src/cryptography/hazmat/primitives/hashes.py | 6 +- src/cryptography/hazmat/primitives/hmac.py | 8 +- .../hazmat/primitives/kdf/concatkdf.py | 28 +- .../hazmat/primitives/kdf/hkdf.py | 16 +- .../hazmat/primitives/kdf/kbkdf.py | 43 +- .../hazmat/primitives/kdf/pbkdf2.py | 14 +- .../hazmat/primitives/kdf/scrypt.py | 7 +- .../hazmat/primitives/kdf/x963kdf.py | 14 +- src/cryptography/hazmat/primitives/keywrap.py | 24 +- src/cryptography/hazmat/primitives/padding.py | 36 +- .../hazmat/primitives/poly1305.py | 7 +- .../primitives/serialization/__init__.py | 39 +- .../hazmat/primitives/serialization/pkcs12.py | 14 +- .../hazmat/primitives/serialization/ssh.py | 21 +- .../hazmat/primitives/twofactor/hotp.py | 21 +- .../hazmat/primitives/twofactor/totp.py | 27 +- .../hazmat/primitives/twofactor/utils.py | 7 +- src/cryptography/utils.py | 18 +- src/cryptography/x509/__init__.py | 105 +- src/cryptography/x509/base.py | 286 +- src/cryptography/x509/extensions.py | 342 +- src/cryptography/x509/general_name.py | 34 +- src/cryptography/x509/name.py | 70 +- src/cryptography/x509/ocsp.py | 102 +- src/cryptography/x509/oid.py | 25 +- tests/conftest.py | 14 +- tests/hazmat/backends/test_openssl.py | 265 +- tests/hazmat/backends/test_openssl_memleak.py | 160 +- tests/hazmat/bindings/test_openssl.py | 9 +- tests/hazmat/primitives/fixtures_dh.py | 6 +- tests/hazmat/primitives/fixtures_dsa.py | 217 +- tests/hazmat/primitives/fixtures_ec.py | 266 +- tests/hazmat/primitives/fixtures_rsa.py | 447 +- tests/hazmat/primitives/test_3des.py | 30 +- tests/hazmat/primitives/test_aead.py | 65 +- tests/hazmat/primitives/test_aes.py | 68 +- tests/hazmat/primitives/test_arc4.py | 2 +- tests/hazmat/primitives/test_asym_utils.py | 8 +- tests/hazmat/primitives/test_block.py | 58 +- tests/hazmat/primitives/test_camellia.py | 6 +- tests/hazmat/primitives/test_cast5.py | 6 +- tests/hazmat/primitives/test_chacha20.py | 8 +- tests/hazmat/primitives/test_ciphers.py | 83 +- tests/hazmat/primitives/test_cmac.py | 78 +- tests/hazmat/primitives/test_concatkdf.py | 73 +- tests/hazmat/primitives/test_dh.py | 440 +- tests/hazmat/primitives/test_dsa.py | 318 +- tests/hazmat/primitives/test_ec.py | 543 ++- tests/hazmat/primitives/test_ed25519.py | 82 +- tests/hazmat/primitives/test_ed448.py | 101 +- tests/hazmat/primitives/test_hash_vectors.py | 113 +- tests/hazmat/primitives/test_hashes.py | 52 +- tests/hazmat/primitives/test_hkdf.py | 123 +- tests/hazmat/primitives/test_hkdf_vectors.py | 8 +- tests/hazmat/primitives/test_hmac.py | 24 +- tests/hazmat/primitives/test_hmac_vectors.py | 48 +- tests/hazmat/primitives/test_idea.py | 6 +- tests/hazmat/primitives/test_kbkdf.py | 327 +- tests/hazmat/primitives/test_kbkdf_vectors.py | 2 +- tests/hazmat/primitives/test_keywrap.py | 38 +- tests/hazmat/primitives/test_padding.py | 156 +- tests/hazmat/primitives/test_pbkdf2hmac.py | 4 +- .../primitives/test_pbkdf2hmac_vectors.py | 7 +- tests/hazmat/primitives/test_pkcs12.py | 129 +- tests/hazmat/primitives/test_poly1305.py | 22 +- tests/hazmat/primitives/test_rsa.py | 1199 ++--- tests/hazmat/primitives/test_scrypt.py | 105 +- tests/hazmat/primitives/test_seed.py | 6 +- tests/hazmat/primitives/test_serialization.py | 850 ++-- tests/hazmat/primitives/test_x25519.py | 100 +- tests/hazmat/primitives/test_x448.py | 96 +- tests/hazmat/primitives/test_x963_vectors.py | 25 +- tests/hazmat/primitives/test_x963kdf.py | 34 +- .../hazmat/primitives/twofactor/test_hotp.py | 17 +- .../hazmat/primitives/twofactor/test_totp.py | 45 +- tests/hazmat/primitives/utils.py | 153 +- tests/hazmat/test_der.py | 39 +- tests/hazmat/test_oid.py | 16 +- tests/test_fernet.py | 18 +- tests/test_interfaces.py | 4 +- tests/test_utils.py | 3342 ++++++++------ tests/test_warnings.py | 4 +- tests/utils.py | 161 +- tests/wycheproof/test_aes.py | 17 +- tests/wycheproof/test_chacha20poly1305.py | 2 +- tests/wycheproof/test_dsa.py | 6 +- tests/wycheproof/test_ecdsa.py | 5 +- tests/wycheproof/test_eddsa.py | 12 +- tests/wycheproof/test_hkdf.py | 4 +- tests/wycheproof/test_keywrap.py | 8 +- tests/wycheproof/test_rsa.py | 37 +- tests/wycheproof/test_x25519.py | 8 +- tests/wycheproof/test_x448.py | 8 +- tests/x509/test_ocsp.py | 492 ++- tests/x509/test_x509.py | 3897 +++++++++-------- tests/x509/test_x509_crlbuilder.py | 660 +-- tests/x509/test_x509_ext.py | 3523 ++++++++------- tests/x509/test_x509_revokedcertbuilder.py | 72 +- tox.ini | 3 +- vectors/cryptography_vectors/__about__.py | 10 +- vectors/cryptography_vectors/__init__.py | 20 +- vectors/setup.py | 6 +- 165 files changed, 12847 insertions(+), 10285 deletions(-) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index 559e68192b07..cb3a494cb1f8 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -11,9 +11,9 @@ def get_response(session, url, token): response = session.get(url, headers={"Authorization": "token " + token}) if response.status_code != 200: - raise ValueError("Got HTTP {} fetching {}: ".format( - response.status_code, url - )) + raise ValueError( + "Got HTTP {} fetching {}: ".format(response.status_code, url) + ) return response @@ -28,9 +28,7 @@ def main(platform, target): raise ValueError("Invalid platform") session = requests.Session() - adapter = requests.adapters.HTTPAdapter( - max_retries=Retry() - ) + adapter = requests.adapters.HTTPAdapter(max_retries=Retry()) session.mount("https://", adapter) session.mount("http://", adapter) diff --git a/docs/conf.py b/docs/conf.py index fc0079ac0f7b..91bdf25f135c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -35,7 +35,7 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('.')) +sys.path.insert(0, os.path.abspath(".")) # -- General configuration ---------------------------------------------------- @@ -45,33 +45,33 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.viewcode', - 'cryptography-docs', + "sphinx.ext.autodoc", + "sphinx.ext.doctest", + "sphinx.ext.intersphinx", + "sphinx.ext.viewcode", + "cryptography-docs", ] if spelling is not None: - extensions.append('sphinxcontrib.spelling') + extensions.append("sphinxcontrib.spelling") # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] nitpicky = True # The suffix of source filenames. -source_suffix = '.rst' +source_suffix = ".rst" # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'Cryptography' -copyright = '2013-2017, Individual Contributors' +project = "Cryptography" +copyright = "2013-2017, Individual Contributors" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -81,7 +81,7 @@ base_dir = os.path.join(os.path.dirname(__file__), os.pardir) about = {} with open(os.path.join(base_dir, "src", "cryptography", "__about__.py")) as f: - exec(f.read(), about) + exec (f.read(), about) version = release = about["__version__"] @@ -97,7 +97,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -exclude_patterns = ['_build'] +exclude_patterns = ["_build"] # The reST default role (used for this markup: `text`) to use for all documents # default_role = None @@ -114,7 +114,7 @@ # show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # -- Options for HTML output -------------------------------------------------- @@ -130,22 +130,26 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # Output file base name for HTML help builder. -htmlhelp_basename = 'Cryptographydoc' +htmlhelp_basename = "Cryptographydoc" # -- Options for LaTeX output ------------------------------------------------- -latex_elements = { -} +latex_elements = {} # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]) latex_documents = [ - ('index', 'Cryptography.tex', 'Cryptography Documentation', - 'Individual Contributors', 'manual'), + ( + "index", + "Cryptography.tex", + "Cryptography Documentation", + "Individual Contributors", + "manual", + ), ] # -- Options for manual page output ------------------------------------------- @@ -153,8 +157,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'cryptography', 'Cryptography Documentation', - ['Individual Contributors'], 1) + ( + "index", + "cryptography", + "Cryptography Documentation", + ["Individual Contributors"], + 1, + ) ] # -- Options for Texinfo output ----------------------------------------------- @@ -163,16 +172,21 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'Cryptography', 'Cryptography Documentation', - 'Individual Contributors', 'Cryptography', - 'One line description of project.', - 'Miscellaneous'), + ( + "index", + "Cryptography", + "Cryptography Documentation", + "Individual Contributors", + "Cryptography", + "One line description of project.", + "Miscellaneous", + ), ] # Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/3': None} +intersphinx_mapping = {"https://docs.python.org/3": None} -epub_theme = 'epub' +epub_theme = "epub" # Retry requests in the linkcheck builder so that we're resillient against # transient network errors. diff --git a/docs/development/custom-vectors/arc4/generate_arc4.py b/docs/development/custom-vectors/arc4/generate_arc4.py index 3dee44a305a4..2ca85c98dbe7 100644 --- a/docs/development/custom-vectors/arc4/generate_arc4.py +++ b/docs/development/custom-vectors/arc4/generate_arc4.py @@ -12,10 +12,14 @@ _RFC6229_KEY_MATERIALS = [ - (True, - 8 * '0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20'), - (False, - 8 * '1ada31d5cf688221c109163908ebe51debb46227c6cc8b37641910833222772a') + ( + True, + 8 * "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20", + ), + ( + False, + 8 * "1ada31d5cf688221c109163908ebe51debb46227c6cc8b37641910833222772a", + ), ] @@ -37,42 +41,43 @@ 3056, 3072, 4080, - 4096 + 4096, ] -_SIZES_TO_GENERATE = [ - 160 -] +_SIZES_TO_GENERATE = [160] def _key_for_size(size, keyinfo): msb, key = keyinfo if msb: - return key[:size // 4] + return key[: size // 4] else: - return key[-size // 4:] + return key[-size // 4 :] def _build_vectors(): count = 0 output = [] key = None - plaintext = binascii.unhexlify(32 * '0') + plaintext = binascii.unhexlify(32 * "0") for size in _SIZES_TO_GENERATE: for keyinfo in _RFC6229_KEY_MATERIALS: key = _key_for_size(size, keyinfo) cipher = ciphers.Cipher( algorithms.ARC4(binascii.unhexlify(key)), None, - default_backend()) + default_backend(), + ) encryptor = cipher.encryptor() current_offset = 0 for offset in _RFC6229_OFFSETS: if offset % 16 != 0: raise ValueError( - "Offset {} is not evenly divisible by 16" - .format(offset)) + "Offset {} is not evenly divisible by 16".format( + offset + ) + ) while current_offset < offset: encryptor.update(plaintext) current_offset += len(plaintext) @@ -80,19 +85,23 @@ def _build_vectors(): count += 1 output.append("KEY = {}".format(key)) output.append("OFFSET = {}".format(offset)) - output.append("PLAINTEXT = {}".format( - binascii.hexlify(plaintext))) - output.append("CIPHERTEXT = {}".format( - binascii.hexlify(encryptor.update(plaintext)))) + output.append( + "PLAINTEXT = {}".format(binascii.hexlify(plaintext)) + ) + output.append( + "CIPHERTEXT = {}".format( + binascii.hexlify(encryptor.update(plaintext)) + ) + ) current_offset += len(plaintext) assert not encryptor.finalize() return "\n".join(output) def _write_file(data, filename): - with open(filename, 'w') as f: + with open(filename, "w") as f: f.write(data) -if __name__ == '__main__': - _write_file(_build_vectors(), 'arc4.txt') +if __name__ == "__main__": + _write_file(_build_vectors(), "arc4.txt") diff --git a/docs/development/custom-vectors/cast5/generate_cast5.py b/docs/development/custom-vectors/cast5/generate_cast5.py index ce046b0f01f3..5208b90d8440 100644 --- a/docs/development/custom-vectors/cast5/generate_cast5.py +++ b/docs/development/custom-vectors/cast5/generate_cast5.py @@ -14,7 +14,7 @@ def encrypt(mode, key, iv, plaintext): cipher = base.Cipher( algorithms.CAST5(binascii.unhexlify(key)), mode(binascii.unhexlify(iv)), - default_backend() + default_backend(), ) encryptor = cipher.encryptor() ct = encryptor.update(binascii.unhexlify(plaintext)) @@ -34,8 +34,10 @@ def build_vectors(mode, filename): line = line.strip() if line.startswith("KEY"): if count != 0: - output.append("CIPHERTEXT = {}".format( - encrypt(mode, key, iv, plaintext)) + output.append( + "CIPHERTEXT = {}".format( + encrypt(mode, key, iv, plaintext) + ) ) output.append("\nCOUNT = {}".format(count)) count += 1 diff --git a/docs/development/custom-vectors/hkdf/generate_hkdf.py b/docs/development/custom-vectors/hkdf/generate_hkdf.py index 8976effdd7e2..aa2fc274f9ae 100644 --- a/docs/development/custom-vectors/hkdf/generate_hkdf.py +++ b/docs/development/custom-vectors/hkdf/generate_hkdf.py @@ -13,8 +13,11 @@ IKM = binascii.unhexlify(b"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b") L = 1200 OKM = HKDF( - algorithm=hashes.SHA256(), length=L, salt=None, info=None, - backend=default_backend() + algorithm=hashes.SHA256(), + length=L, + salt=None, + info=None, + backend=default_backend(), ).derive(IKM) @@ -23,7 +26,8 @@ def _build_vectors(): "COUNT = 0", "Hash = SHA-256", "IKM = " + binascii.hexlify(IKM).decode("ascii"), - "salt = ", "info = ", + "salt = ", + "info = ", "L = {}".format(L), "OKM = " + binascii.hexlify(OKM).decode("ascii"), ] @@ -31,9 +35,9 @@ def _build_vectors(): def _write_file(data, filename): - with open(filename, 'w') as f: + with open(filename, "w") as f: f.write(data) -if __name__ == '__main__': - _write_file(_build_vectors(), 'hkdf.txt') +if __name__ == "__main__": + _write_file(_build_vectors(), "hkdf.txt") diff --git a/docs/development/custom-vectors/idea/generate_idea.py b/docs/development/custom-vectors/idea/generate_idea.py index 2eb6996ef651..00309567b959 100644 --- a/docs/development/custom-vectors/idea/generate_idea.py +++ b/docs/development/custom-vectors/idea/generate_idea.py @@ -8,7 +8,7 @@ def encrypt(mode, key, iv, plaintext): cipher = base.Cipher( algorithms.IDEA(binascii.unhexlify(key)), mode(binascii.unhexlify(iv)), - backend + backend, ) encryptor = cipher.encryptor() ct = encryptor.update(binascii.unhexlify(plaintext)) @@ -29,8 +29,10 @@ def build_vectors(mode, filename): line = line.strip() if line.startswith("KEY"): if count != 0: - output.append("CIPHERTEXT = {0}".format( - encrypt(mode, key, iv, plaintext)) + output.append( + "CIPHERTEXT = {0}".format( + encrypt(mode, key, iv, plaintext) + ) ) output.append("\nCOUNT = {0}".format(count)) count += 1 diff --git a/docs/development/custom-vectors/idea/verify_idea.py b/docs/development/custom-vectors/idea/verify_idea.py index 89713c801dba..d356de0ba7f3 100644 --- a/docs/development/custom-vectors/idea/verify_idea.py +++ b/docs/development/custom-vectors/idea/verify_idea.py @@ -8,11 +8,13 @@ def encrypt(mode, key, iv, plaintext): - encryptor = botan.Cipher("IDEA/{0}/NoPadding".format(mode), "encrypt", - binascii.unhexlify(key)) + encryptor = botan.Cipher( + "IDEA/{0}/NoPadding".format(mode), "encrypt", binascii.unhexlify(key) + ) - cipher_text = encryptor.cipher(binascii.unhexlify(plaintext), - binascii.unhexlify(iv)) + cipher_text = encryptor.cipher( + binascii.unhexlify(plaintext), binascii.unhexlify(iv) + ) return binascii.hexlify(cipher_text) @@ -22,12 +24,7 @@ def verify_vectors(mode, filename): vectors = load_nist_vectors(vector_file) for vector in vectors: - ct = encrypt( - mode, - vector["key"], - vector["iv"], - vector["plaintext"] - ) + ct = encrypt(mode, vector["key"], vector["iv"], vector["plaintext"]) assert ct == vector["ciphertext"] diff --git a/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py b/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py index bd5148f54cbd..a43e1506d53d 100644 --- a/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py +++ b/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py @@ -62,9 +62,8 @@ def build_vectors(mgf1alg, hashalg, filename): dmq1=private["dmq1"], iqmp=private["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=private["public_exponent"], - n=private["modulus"] - ) + e=private["public_exponent"], n=private["modulus"] + ), ).private_key(backend) count = 1 @@ -74,8 +73,8 @@ def build_vectors(mgf1alg, hashalg, filename): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None - ) + label=None, + ), ) assert message == binascii.unhexlify(example["message"]) ct = pkey.encrypt( @@ -83,8 +82,8 @@ def build_vectors(mgf1alg, hashalg, filename): padding.OAEP( mgf=padding.MGF1(algorithm=mgf1alg), algorithm=hashalg, - label=None - ) + label=None, + ), ) output.append( b"# OAEP Example {0} alg={1} mgf1={2}".format( @@ -116,13 +115,12 @@ def write_file(data, filename): hashes.SHA512(), ] for hashtuple in itertools.product(hashalgs, hashalgs): - if ( - isinstance(hashtuple[0], hashes.SHA1) and - isinstance(hashtuple[1], hashes.SHA1) + if isinstance(hashtuple[0], hashes.SHA1) and isinstance( + hashtuple[1], hashes.SHA1 ): continue write_file( build_vectors(hashtuple[0], hashtuple[1], oaep_path), - "oaep-{0}-{1}.txt".format(hashtuple[0].name, hashtuple[1].name) + "oaep-{0}-{1}.txt".format(hashtuple[0].name, hashtuple[1].name), ) diff --git a/docs/development/custom-vectors/secp256k1/generate_secp256k1.py b/docs/development/custom-vectors/secp256k1/generate_secp256k1.py index d6a2071ac22c..bfb150ba6fcc 100644 --- a/docs/development/custom-vectors/secp256k1/generate_secp256k1.py +++ b/docs/development/custom-vectors/secp256k1/generate_secp256k1.py @@ -10,9 +10,7 @@ from cryptography_vectors import open_vector_file -from tests.utils import ( - load_fips_ecdsa_signing_vectors, load_vectors_from_file -) +from tests.utils import load_fips_ecdsa_signing_vectors, load_vectors_from_file HASHLIB_HASH_TYPES = { "SHA-1": hashlib.sha1, @@ -32,13 +30,13 @@ def __call__(self, data): return self def digest(self): - return self.hasher.digest()[:256 // 8] + return self.hasher.digest()[: 256 // 8] def build_vectors(fips_vectors): vectors = defaultdict(list) for vector in fips_vectors: - vectors[vector['digest_algorithm']].append(vector['message']) + vectors[vector["digest_algorithm"]].append(vector["message"]) for digest_algorithm, messages in vectors.items(): if digest_algorithm not in HASHLIB_HASH_TYPES: @@ -55,8 +53,9 @@ def build_vectors(fips_vectors): # Sign the message using warner/ecdsa secret_key = SigningKey.generate(curve=SECP256k1) public_key = secret_key.get_verifying_key() - signature = secret_key.sign(message, hashfunc=hash_func, - sigencode=sigencode_der) + signature = secret_key.sign( + message, hashfunc=hash_func, sigencode=sigencode_der + ) r, s = sigdecode_der(signature, None) @@ -79,12 +78,8 @@ def write_file(lines, dest): dest_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt") fips_vectors = load_vectors_from_file( - source_path, - load_fips_ecdsa_signing_vectors + source_path, load_fips_ecdsa_signing_vectors ) with open_vector_file(dest_path, "w") as dest_file: - write_file( - build_vectors(fips_vectors), - dest_file - ) + write_file(build_vectors(fips_vectors), dest_file) diff --git a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py index b236d77fcf07..485f0718bc02 100644 --- a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py +++ b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py @@ -6,12 +6,10 @@ from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives.asymmetric.utils import ( - encode_dss_signature + encode_dss_signature, ) -from tests.utils import ( - load_fips_ecdsa_signing_vectors, load_vectors_from_file -) +from tests.utils import load_fips_ecdsa_signing_vectors, load_vectors_from_file CRYPTOGRAPHY_HASH_TYPES = { "SHA-1": hashes.SHA1, @@ -23,22 +21,18 @@ def verify_one_vector(vector): - digest_algorithm = vector['digest_algorithm'] - message = vector['message'] - x = vector['x'] - y = vector['y'] - signature = encode_dss_signature(vector['r'], vector['s']) - - numbers = ec.EllipticCurvePublicNumbers( - x, y, - ec.SECP256K1() - ) + digest_algorithm = vector["digest_algorithm"] + message = vector["message"] + x = vector["x"] + y = vector["y"] + signature = encode_dss_signature(vector["r"], vector["s"]) + + numbers = ec.EllipticCurvePublicNumbers(x, y, ec.SECP256K1()) key = numbers.public_key(default_backend()) verifier = key.verifier( - signature, - ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]()) + signature, ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]()) ) verifier.update(message) return verifier.verify() @@ -52,8 +46,7 @@ def verify_vectors(vectors): vector_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt") secp256k1_vectors = load_vectors_from_file( - vector_path, - load_fips_ecdsa_signing_vectors + vector_path, load_fips_ecdsa_signing_vectors ) verify_vectors(secp256k1_vectors) diff --git a/docs/development/custom-vectors/seed/generate_seed.py b/docs/development/custom-vectors/seed/generate_seed.py index 5c62d6713398..046fcfb87b48 100644 --- a/docs/development/custom-vectors/seed/generate_seed.py +++ b/docs/development/custom-vectors/seed/generate_seed.py @@ -8,7 +8,7 @@ def encrypt(mode, key, iv, plaintext): cipher = base.Cipher( algorithms.SEED(binascii.unhexlify(key)), mode(binascii.unhexlify(iv)), - backend + backend, ) encryptor = cipher.encryptor() ct = encryptor.update(binascii.unhexlify(plaintext)) @@ -29,8 +29,10 @@ def build_vectors(mode, filename): line = line.strip() if line.startswith("KEY"): if count != 0: - output.append("CIPHERTEXT = {0}".format( - encrypt(mode, key, iv, plaintext)) + output.append( + "CIPHERTEXT = {0}".format( + encrypt(mode, key, iv, plaintext) + ) ) output.append("\nCOUNT = {0}".format(count)) count += 1 diff --git a/docs/development/custom-vectors/seed/verify_seed.py b/docs/development/custom-vectors/seed/verify_seed.py index e626428cb0c2..252088d083e1 100644 --- a/docs/development/custom-vectors/seed/verify_seed.py +++ b/docs/development/custom-vectors/seed/verify_seed.py @@ -6,11 +6,13 @@ def encrypt(mode, key, iv, plaintext): - encryptor = botan.Cipher("SEED/{0}/NoPadding".format(mode), "encrypt", - binascii.unhexlify(key)) + encryptor = botan.Cipher( + "SEED/{0}/NoPadding".format(mode), "encrypt", binascii.unhexlify(key) + ) - cipher_text = encryptor.cipher(binascii.unhexlify(plaintext), - binascii.unhexlify(iv)) + cipher_text = encryptor.cipher( + binascii.unhexlify(plaintext), binascii.unhexlify(iv) + ) return binascii.hexlify(cipher_text) @@ -20,12 +22,7 @@ def verify_vectors(mode, filename): vectors = load_nist_vectors(vector_file) for vector in vectors: - ct = encrypt( - mode, - vector["key"], - vector["iv"], - vector["plaintext"] - ) + ct = encrypt(mode, vector["key"], vector["iv"], vector["plaintext"]) assert ct == vector["ciphertext"] diff --git a/pyproject.toml b/pyproject.toml index e4d893fcba8b..957b1fd04bb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,3 +8,7 @@ requires = [ "cffi>=1.8,!=1.11.3; platform_python_implementation != 'PyPy'", ] build-backend = "setuptools.build_meta" + +[tool.black] +line-length = 79 +target-version = ["py27"] diff --git a/release.py b/release.py index fdde7d680c8b..a5eea848e0b0 100644 --- a/release.py +++ b/release.py @@ -25,10 +25,13 @@ def run(*args, **kwargs): def wait_for_build_complete_github_actions(session, token, run_url): while True: - response = session.get(run_url, headers={ - "Content-Type": "application/json", - "Authorization": "token {}".format(token), - }) + response = session.get( + run_url, + headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }, + ) response.raise_for_status() if response.json()["conclusion"] is not None: break @@ -36,32 +39,39 @@ def wait_for_build_complete_github_actions(session, token, run_url): def download_artifacts_github_actions(session, token, run_url): - response = session.get(run_url, headers={ - "Content-Type": "application/json", - "Authorization": "token {}".format(token), - }) + response = session.get( + run_url, + headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }, + ) response.raise_for_status() - response = session.get(response.json()["artifacts_url"], headers={ - "Content-Type": "application/json", - "Authorization": "token {}".format(token), - }) + response = session.get( + response.json()["artifacts_url"], + headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }, + ) response.raise_for_status() paths = [] for artifact in response.json()["artifacts"]: - response = session.get(artifact["archive_download_url"], headers={ - "Content-Type": "application/json", - "Authorization": "token {}".format(token), - }) + response = session.get( + artifact["archive_download_url"], + headers={ + "Content-Type": "application/json", + "Authorization": "token {}".format(token), + }, + ) with zipfile.ZipFile(io.BytesIO(response.content)) as z: for name in z.namelist(): if not name.endswith(".whl"): continue p = z.open(name) out_path = os.path.join( - os.path.dirname(__file__), - "dist", - os.path.basename(name), + os.path.dirname(__file__), "dist", os.path.basename(name), ) with open(out_path, "wb") as f: f.write(p.read()) @@ -79,12 +89,12 @@ def build_github_actions_wheels(token, version): "Accept": "application/vnd.github.everest-preview+json", "Authorization": "token {}".format(token), }, - data=json.dumps({ - "event_type": "wheel-builder", - "client_payload": { - "BUILD_VERSION": version, - }, - }), + data=json.dumps( + { + "event_type": "wheel-builder", + "client_payload": {"BUILD_VERSION": version}, + } + ), ) response.raise_for_status() @@ -120,9 +130,8 @@ def release(version): run("python", "setup.py", "sdist") run("python", "setup.py", "sdist", "bdist_wheel", cwd="vectors/") - packages = ( - glob.glob("dist/cryptography-{0}*".format(version)) + - glob.glob("vectors/dist/cryptography_vectors-{0}*".format(version)) + packages = glob.glob("dist/cryptography-{0}*".format(version)) + glob.glob( + "vectors/dist/cryptography_vectors-{0}*".format(version) ) run("twine", "upload", "-s", *packages) diff --git a/setup.py b/setup.py index acefbbf930b4..450279142e3d 100644 --- a/setup.py +++ b/setup.py @@ -18,10 +18,9 @@ from setuptools.command.install import install -if ( - pkg_resources.parse_version(setuptools.__version__) < - pkg_resources.parse_version("18.5") -): +if pkg_resources.parse_version( + setuptools.__version__ +) < pkg_resources.parse_version("18.5"): raise RuntimeError( "cryptography requires setuptools 18.5 or newer, please upgrade to a " "newer version of setuptools" @@ -36,7 +35,7 @@ about = {} with open(os.path.join(src_dir, "cryptography", "__about__.py")) as f: - exec(f.read(), about) + exec (f.read(), about) # `setup_requirements` must be kept in sync with `pyproject.toml` @@ -76,47 +75,52 @@ def keywords_with_side_effects(argv): .. _setup.py script: https://github.com/scipy/scipy/blob/master/setup.py """ no_setup_requires_arguments = ( - '-h', '--help', - '-n', '--dry-run', - '-q', '--quiet', - '-v', '--verbose', - '-V', '--version', - '--author', - '--author-email', - '--classifiers', - '--contact', - '--contact-email', - '--description', - '--egg-base', - '--fullname', - '--help-commands', - '--keywords', - '--licence', - '--license', - '--long-description', - '--maintainer', - '--maintainer-email', - '--name', - '--no-user-cfg', - '--obsoletes', - '--platforms', - '--provides', - '--requires', - '--url', - 'clean', - 'egg_info', - 'register', - 'sdist', - 'upload', + "-h", + "--help", + "-n", + "--dry-run", + "-q", + "--quiet", + "-v", + "--verbose", + "-V", + "--version", + "--author", + "--author-email", + "--classifiers", + "--contact", + "--contact-email", + "--description", + "--egg-base", + "--fullname", + "--help-commands", + "--keywords", + "--licence", + "--license", + "--long-description", + "--maintainer", + "--maintainer-email", + "--name", + "--no-user-cfg", + "--obsoletes", + "--platforms", + "--provides", + "--requires", + "--url", + "clean", + "egg_info", + "register", + "sdist", + "upload", ) def is_short_option(argument): """Check whether a command line argument is a short option.""" - return len(argument) >= 2 and argument[0] == '-' and argument[1] != '-' + return len(argument) >= 2 and argument[0] == "-" and argument[1] != "-" def expand_short_options(argument): """Expand combined short options into canonical short options.""" - return ('-' + char for char in argument[1:]) + return ("-" + char for char in argument[1:]) def argument_without_setup_requirements(argv, i): """Check whether a command line argument needs setup requirements.""" @@ -124,27 +128,25 @@ def argument_without_setup_requirements(argv, i): # Simple case: An argument which is either an option or a command # which doesn't need setup requirements. return True - elif (is_short_option(argv[i]) and - all(option in no_setup_requires_arguments - for option in expand_short_options(argv[i]))): + elif is_short_option(argv[i]) and all( + option in no_setup_requires_arguments + for option in expand_short_options(argv[i]) + ): # Not so simple case: Combined short options none of which need # setup requirements. return True - elif argv[i - 1:i] == ['--egg-base']: + elif argv[i - 1 : i] == ["--egg-base"]: # Tricky case: --egg-info takes an argument which should not make # us use setup_requires (defeating the purpose of this code). return True else: return False - if all(argument_without_setup_requirements(argv, i) - for i in range(1, len(argv))): - return { - "cmdclass": { - "build": DummyBuild, - "install": DummyInstall, - } - } + if all( + argument_without_setup_requirements(argv, i) + for i in range(1, len(argv)) + ): + return {"cmdclass": {"build": DummyBuild, "install": DummyInstall}} else: cffi_modules = [ "src/_cffi_src/build_openssl.py:ffi", @@ -153,13 +155,15 @@ def argument_without_setup_requirements(argv, i): return { "setup_requires": setup_requirements, - "cffi_modules": cffi_modules + "cffi_modules": cffi_modules, } -setup_requires_error = ("Requested setup command that needs 'setup_requires' " - "while command line arguments implied a side effect " - "free command or option.") +setup_requires_error = ( + "Requested setup command that needs 'setup_requires' " + "while command line arguments implied a side effect " + "free command or option." +) class DummyBuild(build): @@ -191,16 +195,13 @@ def run(self): setup( name=about["__title__"], version=about["__version__"], - description=about["__summary__"], long_description=long_description, long_description_content_type="text/x-rst", license=about["__license__"], url=about["__uri__"], - author=about["__author__"], author_email=about["__email__"], - classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", @@ -224,19 +225,13 @@ def run(self): "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Security :: Cryptography", ], - package_dir={"": "src"}, packages=find_packages(where="src", exclude=["_cffi_src", "_cffi_src.*"]), include_package_data=True, - - python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*', - - install_requires=[ - "six >= 1.4.1", - ] + setup_requirements, + python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*", + install_requires=["six >= 1.4.1"] + setup_requirements, extras_require={ ":python_version < '3'": ["enum34", "ipaddress"], - "test": [ "pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2", "pretend", @@ -254,22 +249,15 @@ def run(self): "twine >= 1.12.0", "sphinxcontrib-spelling >= 4.0.1", ], - "pep8test": [ - "flake8", - "flake8-import-order", - "pep8-naming", - ], + "pep8test": ["black", "flake8", "flake8-import-order", "pep8-naming"], # This extra is for OpenSSH private keys that use bcrypt KDF # Versions: v3.1.3 - ignore_few_rounds, v3.1.5 - abi3 "ssh": ["bcrypt >= 3.1.5"], # This extra is for the U-label support that was deprecated in # cryptography 2.1. If you need this deprecated path install with # pip install cryptography[idna] - "idna": [ - "idna >= 2.1", - ] + "idna": ["idna >= 2.1"], }, - # for cffi zip_safe=False, ext_package="cryptography.hazmat.bindings", diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index 8cc1066ad338..35ccd6b9be0a 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -11,7 +11,9 @@ from distutils.command.config import config from _cffi_src.utils import ( - build_ffi_for_binding, compiler_type, extra_link_args + build_ffi_for_binding, + compiler_type, + extra_link_args, ) @@ -40,7 +42,7 @@ def _get_openssl_libraries(platform): # -lpthread required due to usage of pthread an potential # existance of a static part containing e.g. pthread_atfork # (https://github.com/pyca/cryptography/issues/5084) - if sys.platform == 'zos': + if sys.platform == "zos": return ["ssl", "crypto"] else: return ["ssl", "crypto", "pthread"] @@ -62,10 +64,14 @@ def _extra_compile_args(platform): d = dist.Distribution() cmd = config(d) cmd._check_compiler() - is_gcc = ("gcc" in cmd.compiler.compiler[0] or - "clang" in cmd.compiler.compiler[0]) - if is_gcc or not (platform in ["win32", "hp-ux11", "sunos5"] or - platform.startswith("aix")): + is_gcc = ( + "gcc" in cmd.compiler.compiler[0] + or "clang" in cmd.compiler.compiler[0] + ) + if is_gcc or not ( + platform in ["win32", "hp-ux11", "sunos5"] + or platform.startswith("aix") + ): return ["-Wconversion", "-Wno-error=sign-conversion"] else: return [] @@ -77,7 +83,6 @@ def _extra_compile_args(platform): modules=[ # This goes first so we can define some cryptography-wide symbols. "cryptography", - "aes", "asn1", "bignum", diff --git a/src/_cffi_src/build_padding.py b/src/_cffi_src/build_padding.py index 4c5096a19435..207f4a658ea2 100644 --- a/src/_cffi_src/build_padding.py +++ b/src/_cffi_src/build_padding.py @@ -9,14 +9,14 @@ from _cffi_src.utils import build_ffi, compiler_type, extra_link_args -with open(os.path.join( - os.path.dirname(__file__), "hazmat_src/padding.h" -)) as f: +with open( + os.path.join(os.path.dirname(__file__), "hazmat_src/padding.h") +) as f: types = f.read() -with open(os.path.join( - os.path.dirname(__file__), "hazmat_src/padding.c" -)) as f: +with open( + os.path.join(os.path.dirname(__file__), "hazmat_src/padding.c") +) as f: functions = f.read() ffi = build_ffi( diff --git a/src/_cffi_src/utils.py b/src/_cffi_src/utils.py index eecd6ea12367..56745a3e5b2e 100644 --- a/src/_cffi_src/utils.py +++ b/src/_cffi_src/utils.py @@ -16,11 +16,17 @@ base_src = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) about = {} with open(os.path.join(base_src, "cryptography", "__about__.py")) as f: - exec(f.read(), about) + exec (f.read(), about) -def build_ffi_for_binding(module_name, module_prefix, modules, libraries=[], - extra_compile_args=[], extra_link_args=[]): +def build_ffi_for_binding( + module_name, + module_prefix, + modules, + libraries=[], + extra_compile_args=[], + extra_link_args=[], +): """ Modules listed in ``modules`` should have the following attributes: @@ -44,10 +50,7 @@ def build_ffi_for_binding(module_name, module_prefix, modules, libraries=[], includes.append(module.INCLUDES) customizations.append(module.CUSTOMIZATIONS) - verify_source = "\n".join( - includes + - customizations - ) + verify_source = "\n".join(includes + customizations) ffi = build_ffi( module_name, cdef_source="\n".join(types + functions), @@ -60,8 +63,14 @@ def build_ffi_for_binding(module_name, module_prefix, modules, libraries=[], return ffi -def build_ffi(module_name, cdef_source, verify_source, libraries=[], - extra_compile_args=[], extra_link_args=[]): +def build_ffi( + module_name, + cdef_source, + verify_source, + libraries=[], + extra_compile_args=[], + extra_link_args=[], +): ffi = FFI() # Always add the CRYPTOGRAPHY_PACKAGE_VERSION to the shared object cdef_source += "\nstatic const char *const CRYPTOGRAPHY_PACKAGE_VERSION;" @@ -80,10 +89,10 @@ def build_ffi(module_name, cdef_source, verify_source, libraries=[], def extra_link_args(compiler_type): - if compiler_type == 'msvc': + if compiler_type == "msvc": # Enable NX and ASLR for Windows builds on MSVC. These are enabled by # default on Python 3.3+ but not on 2.x. - return ['/NXCOMPAT', '/DYNAMICBASE'] + return ["/NXCOMPAT", "/DYNAMICBASE"] else: return [] @@ -95,7 +104,7 @@ def compiler_type(): """ dist = Distribution() dist.parse_config_files() - cmd = dist.get_command_obj('build') + cmd = dist.get_command_obj("build") cmd.ensure_finalized() compiler = new_compiler(compiler=cmd.compiler) return compiler.compiler_type diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 92d5042e5a3d..54292526a831 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -5,13 +5,21 @@ from __future__ import absolute_import, division, print_function __all__ = [ - "__title__", "__summary__", "__uri__", "__version__", "__author__", - "__email__", "__license__", "__copyright__", + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", ] __title__ = "cryptography" -__summary__ = ("cryptography is a package which provides cryptographic recipes" - " and primitives to Python developers.") +__summary__ = ( + "cryptography is a package which provides cryptographic recipes" + " and primitives to Python developers." +) __uri__ = "https://github.com/pyca/cryptography" __version__ = "3.0.dev1" diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index bd2a8102f9a9..b666506386b1 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -8,15 +8,27 @@ import warnings from cryptography.__about__ import ( - __author__, __copyright__, __email__, __license__, __summary__, __title__, - __uri__, __version__ + __author__, + __copyright__, + __email__, + __license__, + __summary__, + __title__, + __uri__, + __version__, ) from cryptography.utils import CryptographyDeprecationWarning __all__ = [ - "__title__", "__summary__", "__uri__", "__version__", "__author__", - "__email__", "__license__", "__copyright__", + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", ] if sys.version_info[0] == 2: @@ -24,5 +36,5 @@ "Python 2 is no longer supported by the Python core team. Support for " "it is now deprecated in cryptography, and will be removed in a " "future release.", - CryptographyDeprecationWarning + CryptographyDeprecationWarning, ) diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index 8528d85a91a5..b5641965913e 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -102,7 +102,7 @@ def _get_unverified_token_data(token): raise InvalidToken try: - timestamp, = struct.unpack(">Q", data[1:9]) + (timestamp,) = struct.unpack(">Q", data[1:9]) except struct.error: raise InvalidToken return timestamp, data diff --git a/src/cryptography/hazmat/_der.py b/src/cryptography/hazmat/_der.py index 51518d641ff5..462b911b4532 100644 --- a/src/cryptography/hazmat/_der.py +++ b/src/cryptography/hazmat/_der.py @@ -68,7 +68,7 @@ def read_any_element(self): tag = self.read_byte() # Tag numbers 31 or higher are stored in multiple bytes. No supported # ASN.1 types use such tags, so reject these. - if tag & 0x1f == 0x1f: + if tag & 0x1F == 0x1F: raise ValueError("Invalid DER input: unexpected high tag number") length_byte = self.read_byte() if length_byte & 0x80 == 0: @@ -77,7 +77,7 @@ def read_any_element(self): else: # If the high bit is set, the first length byte encodes the length # of the length. - length_byte &= 0x7f + length_byte &= 0x7F if length_byte == 0: raise ValueError( "Invalid DER input: indefinite length form is not allowed " diff --git a/src/cryptography/hazmat/_oid.py b/src/cryptography/hazmat/_oid.py index f98912f96285..de2771a7379a 100644 --- a/src/cryptography/hazmat/_oid.py +++ b/src/cryptography/hazmat/_oid.py @@ -22,28 +22,33 @@ def __init__(self, dotted_string): node_value = int(node, 10) except ValueError: raise ValueError( - "Malformed OID: %s (non-integer nodes)" % ( - self._dotted_string)) + "Malformed OID: %s (non-integer nodes)" + % (self._dotted_string) + ) if node_value < 0: raise ValueError( - "Malformed OID: %s (negative-integer nodes)" % ( - self._dotted_string)) + "Malformed OID: %s (negative-integer nodes)" + % (self._dotted_string) + ) intnodes.append(node_value) if len(nodes) < 2: raise ValueError( - "Malformed OID: %s (insufficient number of nodes)" % ( - self._dotted_string)) + "Malformed OID: %s (insufficient number of nodes)" + % (self._dotted_string) + ) if intnodes[0] > 2: raise ValueError( - "Malformed OID: %s (first node outside valid range)" % ( - self._dotted_string)) + "Malformed OID: %s (first node outside valid range)" + % (self._dotted_string) + ) if intnodes[0] < 2 and intnodes[1] >= 40: raise ValueError( - "Malformed OID: %s (second node outside valid range)" % ( - self._dotted_string)) + "Malformed OID: %s (second node outside valid range)" + % (self._dotted_string) + ) def __eq__(self, other): if not isinstance(other, ObjectIdentifier): @@ -56,8 +61,7 @@ def __ne__(self, other): def __repr__(self): return "".format( - self.dotted_string, - self._name + self.dotted_string, self._name ) def __hash__(self): @@ -67,6 +71,7 @@ def __hash__(self): def _name(self): # Lazy import to avoid an import cycle from cryptography.x509.oid import _OID_NAMES + return _OID_NAMES.get(self, "Unknown OID") dotted_string = utils.read_only_property("_dotted_string") diff --git a/src/cryptography/hazmat/backends/__init__.py b/src/cryptography/hazmat/backends/__init__.py index 565bde788bab..50af41a8c598 100644 --- a/src/cryptography/hazmat/backends/__init__.py +++ b/src/cryptography/hazmat/backends/__init__.py @@ -13,6 +13,7 @@ def default_backend(): if _default_backend is None: from cryptography.hazmat.backends.openssl.backend import backend + _default_backend = backend return _default_backend diff --git a/src/cryptography/hazmat/backends/interfaces.py b/src/cryptography/hazmat/backends/interfaces.py index 20f4164ea850..418980a34e0d 100644 --- a/src/cryptography/hazmat/backends/interfaces.py +++ b/src/cryptography/hazmat/backends/interfaces.py @@ -86,8 +86,9 @@ def pbkdf2_hmac_supported(self, algorithm): """ @abc.abstractmethod - def derive_pbkdf2_hmac(self, algorithm, length, salt, iterations, - key_material): + def derive_pbkdf2_hmac( + self, algorithm, length, salt, iterations, key_material + ): """ Return length bytes derived from provided PBKDF2 parameters. """ diff --git a/src/cryptography/hazmat/backends/openssl/aead.py b/src/cryptography/hazmat/backends/openssl/aead.py index 0cad15ccd7cc..4494916852ae 100644 --- a/src/cryptography/hazmat/backends/openssl/aead.py +++ b/src/cryptography/hazmat/backends/openssl/aead.py @@ -13,8 +13,11 @@ def _aead_cipher_name(cipher): from cryptography.hazmat.primitives.ciphers.aead import ( - AESCCM, AESGCM, ChaCha20Poly1305 + AESCCM, + AESGCM, + ChaCha20Poly1305, ) + if isinstance(cipher, ChaCha20Poly1305): return b"chacha20-poly1305" elif isinstance(cipher, AESCCM): @@ -30,18 +33,21 @@ def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): ctx = backend._lib.EVP_CIPHER_CTX_new() ctx = backend._ffi.gc(ctx, backend._lib.EVP_CIPHER_CTX_free) res = backend._lib.EVP_CipherInit_ex( - ctx, evp_cipher, + ctx, + evp_cipher, backend._ffi.NULL, backend._ffi.NULL, backend._ffi.NULL, - int(operation == _ENCRYPT) + int(operation == _ENCRYPT), ) backend.openssl_assert(res != 0) res = backend._lib.EVP_CIPHER_CTX_set_key_length(ctx, len(key)) backend.openssl_assert(res != 0) res = backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, backend._lib.EVP_CTRL_AEAD_SET_IVLEN, len(nonce), - backend._ffi.NULL + ctx, + backend._lib.EVP_CTRL_AEAD_SET_IVLEN, + len(nonce), + backend._ffi.NULL, ) backend.openssl_assert(res != 0) if operation == _DECRYPT: @@ -63,7 +69,7 @@ def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): backend._ffi.NULL, key_ptr, nonce_ptr, - int(operation == _ENCRYPT) + int(operation == _ENCRYPT), ) backend.openssl_assert(res != 0) return ctx @@ -72,11 +78,7 @@ def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): def _set_length(backend, ctx, data_len): intptr = backend._ffi.new("int *") res = backend._lib.EVP_CipherUpdate( - ctx, - backend._ffi.NULL, - intptr, - backend._ffi.NULL, - data_len + ctx, backend._ffi.NULL, intptr, backend._ffi.NULL, data_len ) backend.openssl_assert(res != 0) @@ -99,6 +101,7 @@ def _process_data(backend, ctx, data): def _encrypt(backend, cipher, nonce, data, associated_data, tag_length): from cryptography.hazmat.primitives.ciphers.aead import AESCCM + cipher_name = _aead_cipher_name(cipher) ctx = _aead_setup( backend, cipher_name, cipher._key, nonce, None, tag_length, _ENCRYPT @@ -126,6 +129,7 @@ def _encrypt(backend, cipher, nonce, data, associated_data, tag_length): def _decrypt(backend, cipher, nonce, data, associated_data, tag_length): from cryptography.hazmat.primitives.ciphers.aead import AESCCM + if len(data) < tag_length: raise InvalidTag tag = data[-tag_length:] diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 0daea2d27468..a98d3e26f5b9 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -16,75 +16,131 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm, _Reasons from cryptography.hazmat._der import ( - INTEGER, NULL, SEQUENCE, encode_der, encode_der_integer + INTEGER, + NULL, + SEQUENCE, + encode_der, + encode_der_integer, ) from cryptography.hazmat.backends.interfaces import ( - CMACBackend, CipherBackend, DERSerializationBackend, DHBackend, DSABackend, - EllipticCurveBackend, HMACBackend, HashBackend, PBKDF2HMACBackend, - PEMSerializationBackend, RSABackend, ScryptBackend, X509Backend + CMACBackend, + CipherBackend, + DERSerializationBackend, + DHBackend, + DSABackend, + EllipticCurveBackend, + HMACBackend, + HashBackend, + PBKDF2HMACBackend, + PEMSerializationBackend, + RSABackend, + ScryptBackend, + X509Backend, ) from cryptography.hazmat.backends.openssl import aead from cryptography.hazmat.backends.openssl.ciphers import _CipherContext from cryptography.hazmat.backends.openssl.cmac import _CMACContext from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CRL_ENTRY_REASON_ENUM_TO_CODE + _CRL_ENTRY_REASON_ENUM_TO_CODE, ) from cryptography.hazmat.backends.openssl.dh import ( - _DHParameters, _DHPrivateKey, _DHPublicKey, _dh_params_dup + _DHParameters, + _DHPrivateKey, + _DHPublicKey, + _dh_params_dup, ) from cryptography.hazmat.backends.openssl.dsa import ( - _DSAParameters, _DSAPrivateKey, _DSAPublicKey + _DSAParameters, + _DSAPrivateKey, + _DSAPublicKey, ) from cryptography.hazmat.backends.openssl.ec import ( - _EllipticCurvePrivateKey, _EllipticCurvePublicKey + _EllipticCurvePrivateKey, + _EllipticCurvePublicKey, ) from cryptography.hazmat.backends.openssl.ed25519 import ( - _Ed25519PrivateKey, _Ed25519PublicKey + _Ed25519PrivateKey, + _Ed25519PublicKey, ) from cryptography.hazmat.backends.openssl.ed448 import ( - _ED448_KEY_SIZE, _Ed448PrivateKey, _Ed448PublicKey + _ED448_KEY_SIZE, + _Ed448PrivateKey, + _Ed448PublicKey, ) from cryptography.hazmat.backends.openssl.encode_asn1 import ( _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, - _CRL_EXTENSION_ENCODE_HANDLERS, _EXTENSION_ENCODE_HANDLERS, + _CRL_EXTENSION_ENCODE_HANDLERS, + _EXTENSION_ENCODE_HANDLERS, _OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS, _OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS, - _encode_asn1_int_gc, _encode_asn1_str_gc, _encode_name_gc, _txt2obj_gc, + _encode_asn1_int_gc, + _encode_asn1_str_gc, + _encode_name_gc, + _txt2obj_gc, ) from cryptography.hazmat.backends.openssl.hashes import _HashContext from cryptography.hazmat.backends.openssl.hmac import _HMACContext from cryptography.hazmat.backends.openssl.ocsp import ( - _OCSPRequest, _OCSPResponse + _OCSPRequest, + _OCSPResponse, ) from cryptography.hazmat.backends.openssl.poly1305 import ( - _POLY1305_KEY_SIZE, _Poly1305Context + _POLY1305_KEY_SIZE, + _Poly1305Context, ) from cryptography.hazmat.backends.openssl.rsa import ( - _RSAPrivateKey, _RSAPublicKey + _RSAPrivateKey, + _RSAPublicKey, ) from cryptography.hazmat.backends.openssl.x25519 import ( - _X25519PrivateKey, _X25519PublicKey + _X25519PrivateKey, + _X25519PublicKey, ) from cryptography.hazmat.backends.openssl.x448 import ( - _X448PrivateKey, _X448PublicKey + _X448PrivateKey, + _X448PublicKey, ) from cryptography.hazmat.backends.openssl.x509 import ( - _Certificate, _CertificateRevocationList, - _CertificateSigningRequest, _RevokedCertificate + _Certificate, + _CertificateRevocationList, + _CertificateSigningRequest, + _RevokedCertificate, ) from cryptography.hazmat.bindings.openssl import binding from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ( - dsa, ec, ed25519, ed448, rsa + dsa, + ec, + ed25519, + ed448, + rsa, ) from cryptography.hazmat.primitives.asymmetric.padding import ( - MGF1, OAEP, PKCS1v15, PSS + MGF1, + OAEP, + PKCS1v15, + PSS, ) from cryptography.hazmat.primitives.ciphers.algorithms import ( - AES, ARC4, Blowfish, CAST5, Camellia, ChaCha20, IDEA, SEED, TripleDES + AES, + ARC4, + Blowfish, + CAST5, + Camellia, + ChaCha20, + IDEA, + SEED, + TripleDES, ) from cryptography.hazmat.primitives.ciphers.modes import ( - CBC, CFB, CFB8, CTR, ECB, GCM, OFB, XTS + CBC, + CFB, + CFB8, + CTR, + ECB, + GCM, + OFB, + XTS, ) from cryptography.hazmat.primitives.kdf import scrypt from cryptography.hazmat.primitives.serialization import ssh @@ -118,6 +174,7 @@ class Backend(object): """ OpenSSL API binding interfaces. """ + name = "openssl" # FIPS has opinions about acceptable algorithms and key sizes, but the @@ -125,16 +182,27 @@ class Backend(object): # you try to use them. To avoid that we allowlist the algorithms in # FIPS 140-3. This isn't ideal, but FIPS 140-3 is trash so here we are. _fips_aead = { - b'aes-128-ccm', b'aes-192-ccm', b'aes-256-ccm', - b'aes-128-gcm', b'aes-192-gcm', b'aes-256-gcm', + b"aes-128-ccm", + b"aes-192-ccm", + b"aes-256-ccm", + b"aes-128-gcm", + b"aes-192-gcm", + b"aes-256-gcm", } - _fips_ciphers = ( - AES, TripleDES - ) + _fips_ciphers = (AES, TripleDES) _fips_hashes = ( - hashes.SHA1, hashes.SHA224, hashes.SHA256, hashes.SHA384, - hashes.SHA512, hashes.SHA512_224, hashes.SHA512_256, hashes.SHA3_224, - hashes.SHA3_256, hashes.SHA3_384, hashes.SHA3_512, hashes.SHAKE128, + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + hashes.SHA512_224, + hashes.SHA512_256, + hashes.SHA3_224, + hashes.SHA3_256, + hashes.SHA3_384, + hashes.SHA3_512, + hashes.SHAKE128, hashes.SHAKE256, ) _fips_rsa_min_key_size = 2048 @@ -154,7 +222,7 @@ def __init__(self): if self._fips_enabled and self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: warnings.warn( "OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.", - UserWarning + UserWarning, ) else: self.activate_osrandom_engine() @@ -221,11 +289,11 @@ def activate_osrandom_engine(self): def osrandom_engine_implementation(self): buf = self._ffi.new("char[]", 64) with self._get_osurandom_engine() as e: - res = self._lib.ENGINE_ctrl_cmd(e, b"get_implementation", - len(buf), buf, - self._ffi.NULL, 0) + res = self._lib.ENGINE_ctrl_cmd( + e, b"get_implementation", len(buf), buf, self._ffi.NULL, 0 + ) self.openssl_assert(res > 0) - return self._ffi.string(buf).decode('ascii') + return self._ffi.string(buf).decode("ascii") def openssl_version_text(self): """ @@ -285,8 +353,10 @@ def cipher_supported(self, cipher, mode): def register_cipher_adapter(self, cipher_cls, mode_cls, adapter): if (cipher_cls, mode_cls) in self._cipher_registry: - raise ValueError("Duplicate registration for: {} {}.".format( - cipher_cls, mode_cls) + raise ValueError( + "Duplicate registration for: {} {}.".format( + cipher_cls, mode_cls + ) ) self._cipher_registry[cipher_cls, mode_cls] = adapter @@ -295,59 +365,42 @@ def _register_default_ciphers(self): self.register_cipher_adapter( AES, mode_cls, - GetCipherByName("{cipher.name}-{cipher.key_size}-{mode.name}") + GetCipherByName("{cipher.name}-{cipher.key_size}-{mode.name}"), ) for mode_cls in [CBC, CTR, ECB, OFB, CFB]: self.register_cipher_adapter( Camellia, mode_cls, - GetCipherByName("{cipher.name}-{cipher.key_size}-{mode.name}") + GetCipherByName("{cipher.name}-{cipher.key_size}-{mode.name}"), ) for mode_cls in [CBC, CFB, CFB8, OFB]: self.register_cipher_adapter( - TripleDES, - mode_cls, - GetCipherByName("des-ede3-{mode.name}") + TripleDES, mode_cls, GetCipherByName("des-ede3-{mode.name}") ) self.register_cipher_adapter( - TripleDES, - ECB, - GetCipherByName("des-ede3") + TripleDES, ECB, GetCipherByName("des-ede3") ) for mode_cls in [CBC, CFB, OFB, ECB]: self.register_cipher_adapter( - Blowfish, - mode_cls, - GetCipherByName("bf-{mode.name}") + Blowfish, mode_cls, GetCipherByName("bf-{mode.name}") ) for mode_cls in [CBC, CFB, OFB, ECB]: self.register_cipher_adapter( - SEED, - mode_cls, - GetCipherByName("seed-{mode.name}") + SEED, mode_cls, GetCipherByName("seed-{mode.name}") ) for cipher_cls, mode_cls in itertools.product( - [CAST5, IDEA], - [CBC, OFB, CFB, ECB], + [CAST5, IDEA], [CBC, OFB, CFB, ECB], ): self.register_cipher_adapter( cipher_cls, mode_cls, - GetCipherByName("{cipher.name}-{mode.name}") + GetCipherByName("{cipher.name}-{mode.name}"), ) - self.register_cipher_adapter( - ARC4, - type(None), - GetCipherByName("rc4") - ) + self.register_cipher_adapter(ARC4, type(None), GetCipherByName("rc4")) # We don't actually support RC2, this is just used by some tests. + self.register_cipher_adapter(_RC2, type(None), GetCipherByName("rc2")) self.register_cipher_adapter( - _RC2, type(None), GetCipherByName("rc2") - ) - self.register_cipher_adapter( - ChaCha20, - type(None), - GetCipherByName("chacha20") + ChaCha20, type(None), GetCipherByName("chacha20") ) self.register_cipher_adapter(AES, XTS, _get_xts_cipher) @@ -360,8 +413,9 @@ def create_symmetric_decryption_ctx(self, cipher, mode): def pbkdf2_hmac_supported(self, algorithm): return self.hmac_supported(algorithm) - def derive_pbkdf2_hmac(self, algorithm, length, salt, iterations, - key_material): + def derive_pbkdf2_hmac( + self, algorithm, length, salt, iterations, key_material + ): buf = self._ffi.new("unsigned char[]", length) evp_md = self._evp_md_non_null_from_algorithm(algorithm) key_material_ptr = self._ffi.from_buffer(key_material) @@ -373,7 +427,7 @@ def derive_pbkdf2_hmac(self, algorithm, length, salt, iterations, iterations, evp_md, length, - buf + buf, ) self.openssl_assert(res == 1) return self._ffi.buffer(buf)[:] @@ -453,8 +507,11 @@ def generate_rsa_private_key(self, public_exponent, key_size): return _RSAPrivateKey(self, rsa_cdata, evp_pkey) def generate_rsa_parameters_supported(self, public_exponent, key_size): - return (public_exponent >= 3 and public_exponent & 1 != 0 and - key_size >= 512) + return ( + public_exponent >= 3 + and public_exponent & 1 != 0 + and key_size >= 512 + ) def load_rsa_private_numbers(self, numbers): rsa._check_private_key_components( @@ -465,7 +522,7 @@ def load_rsa_private_numbers(self, numbers): numbers.dmq1, numbers.iqmp, numbers.public_numbers.e, - numbers.public_numbers.n + numbers.public_numbers.n, ) rsa_cdata = self._lib.RSA_new() self.openssl_assert(rsa_cdata != self._ffi.NULL) @@ -523,9 +580,7 @@ def _bytes_to_bio(self, data): BIO is finished with. """ data_ptr = self._ffi.from_buffer(data) - bio = self._lib.BIO_new_mem_buf( - data_ptr, len(data) - ) + bio = self._lib.BIO_new_mem_buf(data_ptr, len(data)) self.openssl_assert(bio != self._ffi.NULL) return _MemoryBIO(self._ffi.gc(bio, self._lib.BIO_free), data_ptr) @@ -641,13 +696,14 @@ def _evp_pkey_to_public_key(self, evp_pkey): def _oaep_hash_supported(self, algorithm): if self._lib.Cryptography_HAS_RSA_OAEP_MD: return isinstance( - algorithm, ( + algorithm, + ( hashes.SHA1, hashes.SHA224, hashes.SHA256, hashes.SHA384, hashes.SHA512, - ) + ), ) else: return isinstance(algorithm, hashes.SHA1) @@ -659,11 +715,11 @@ def rsa_padding_supported(self, padding): return self.hash_supported(padding._mgf._algorithm) elif isinstance(padding, OAEP) and isinstance(padding._mgf, MGF1): return ( - self._oaep_hash_supported(padding._mgf._algorithm) and - self._oaep_hash_supported(padding._algorithm) and - ( - (padding._label is None or len(padding._label) == 0) or - self._lib.Cryptography_HAS_RSA_OAEP_LABEL == 1 + self._oaep_hash_supported(padding._mgf._algorithm) + and self._oaep_hash_supported(padding._algorithm) + and ( + (padding._label is None or len(padding._label) == 0) + or self._lib.Cryptography_HAS_RSA_OAEP_LABEL == 1 ) ) else: @@ -680,8 +736,13 @@ def generate_dsa_parameters(self, key_size): ctx = self._ffi.gc(ctx, self._lib.DSA_free) res = self._lib.DSA_generate_parameters_ex( - ctx, key_size, self._ffi.NULL, 0, - self._ffi.NULL, self._ffi.NULL, self._ffi.NULL + ctx, + key_size, + self._ffi.NULL, + 0, + self._ffi.NULL, + self._ffi.NULL, + self._ffi.NULL, ) self.openssl_assert(res == 1) @@ -778,22 +839,24 @@ def create_cmac_ctx(self, algorithm): return _CMACContext(self, algorithm) def _x509_check_signature_params(self, private_key, algorithm): - if isinstance(private_key, - (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): + if isinstance( + private_key, (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey) + ): if algorithm is not None: raise ValueError( "algorithm must be None when signing via ed25519 or ed448" ) - elif not isinstance(private_key, (rsa.RSAPrivateKey, dsa.DSAPrivateKey, - ec.EllipticCurvePrivateKey)): + elif not isinstance( + private_key, + (rsa.RSAPrivateKey, dsa.DSAPrivateKey, ec.EllipticCurvePrivateKey), + ): raise TypeError( "Key must be an rsa, dsa, ec, ed25519, or ed448 private key." ) elif not isinstance(algorithm, hashes.HashAlgorithm): raise TypeError("Algorithm must be a registered hash algorithm.") - elif ( - isinstance(algorithm, hashes.MD5) and not - isinstance(private_key, rsa.RSAPrivateKey) + elif isinstance(algorithm, hashes.MD5) and not isinstance( + private_key, rsa.RSAPrivateKey ): raise ValueError( "MD5 hash algorithm is only supported with RSA keys" @@ -801,7 +864,7 @@ def _x509_check_signature_params(self, private_key, algorithm): def create_x509_csr(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateSigningRequestBuilder): - raise TypeError('Builder type mismatch.') + raise TypeError("Builder type mismatch.") self._x509_check_signature_params(private_key, algorithm) # Resolve the signature algorithm. @@ -824,9 +887,7 @@ def create_x509_csr(self, builder, private_key, algorithm): # Set subject public key. public_key = private_key.public_key() - res = self._lib.X509_REQ_set_pubkey( - x509_req, public_key._evp_pkey - ) + res = self._lib.X509_REQ_set_pubkey(x509_req, public_key._evp_pkey) self.openssl_assert(res == 1) # Add extensions. @@ -835,10 +896,11 @@ def create_x509_csr(self, builder, private_key, algorithm): sk_extension = self._ffi.gc( sk_extension, lambda x: self._lib.sk_X509_EXTENSION_pop_free( - x, self._ffi.addressof( + x, + self._ffi.addressof( self._lib._original_lib, "X509_EXTENSION_free" - ) - ) + ), + ), ) # Don't GC individual extensions because the memory is owned by # sk_extensions and will be freed along with it. @@ -847,7 +909,7 @@ def create_x509_csr(self, builder, private_key, algorithm): handlers=_EXTENSION_ENCODE_HANDLERS, x509_obj=sk_extension, add_func=self._lib.sk_X509_EXTENSION_insert, - gc=False + gc=False, ) res = self._lib.X509_REQ_add_extensions(x509_req, sk_extension) self.openssl_assert(res == 1) @@ -856,20 +918,22 @@ def create_x509_csr(self, builder, private_key, algorithm): for attr_oid, attr_val in builder._attributes: obj = _txt2obj_gc(self, attr_oid.dotted_string) res = self._lib.X509_REQ_add1_attr_by_OBJ( - x509_req, obj, x509.name._ASN1Type.UTF8String.value, - attr_val, len(attr_val)) + x509_req, + obj, + x509.name._ASN1Type.UTF8String.value, + attr_val, + len(attr_val), + ) self.openssl_assert(res == 1) # Sign the request using the requester's private key. - res = self._lib.X509_REQ_sign( - x509_req, private_key._evp_pkey, evp_md - ) + res = self._lib.X509_REQ_sign(x509_req, private_key._evp_pkey, evp_md) if res == 0: errors = self._consume_errors() self.openssl_assert( errors[0]._lib_reason_match( self._lib.ERR_LIB_RSA, - self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY, ) ) @@ -879,7 +943,7 @@ def create_x509_csr(self, builder, private_key, algorithm): def create_x509_certificate(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateBuilder): - raise TypeError('Builder type mismatch.') + raise TypeError("Builder type mismatch.") self._x509_check_signature_params(private_key, algorithm) # Resolve the signature algorithm. @@ -926,7 +990,7 @@ def create_x509_certificate(self, builder, private_key, algorithm): handlers=_EXTENSION_ENCODE_HANDLERS, x509_obj=x509_cert, add_func=self._lib.X509_add_ext, - gc=True + gc=True, ) # Set the issuer name. @@ -936,15 +1000,13 @@ def create_x509_certificate(self, builder, private_key, algorithm): self.openssl_assert(res == 1) # Sign the certificate with the issuer's private key. - res = self._lib.X509_sign( - x509_cert, private_key._evp_pkey, evp_md - ) + res = self._lib.X509_sign(x509_cert, private_key._evp_pkey, evp_md) if res == 0: errors = self._consume_errors() self.openssl_assert( errors[0]._lib_reason_match( self._lib.ERR_LIB_RSA, - self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY, ) ) raise ValueError("Digest too big for RSA key") @@ -952,8 +1014,9 @@ def create_x509_certificate(self, builder, private_key, algorithm): return _Certificate(self, x509_cert) def _evp_md_x509_null_if_eddsa(self, private_key, algorithm): - if isinstance(private_key, - (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey)): + if isinstance( + private_key, (ed25519.Ed25519PrivateKey, ed448.Ed448PrivateKey) + ): # OpenSSL requires us to pass NULL for EVP_MD for ed25519/ed448 return self._ffi.NULL else: @@ -961,9 +1024,9 @@ def _evp_md_x509_null_if_eddsa(self, private_key, algorithm): def _set_asn1_time(self, asn1_time, time): if time.year >= 2050: - asn1_str = time.strftime('%Y%m%d%H%M%SZ').encode('ascii') + asn1_str = time.strftime("%Y%m%d%H%M%SZ").encode("ascii") else: - asn1_str = time.strftime('%y%m%d%H%M%SZ').encode('ascii') + asn1_str = time.strftime("%y%m%d%H%M%SZ").encode("ascii") res = self._lib.ASN1_TIME_set_string(asn1_time, asn1_str) self.openssl_assert(res == 1) @@ -976,7 +1039,7 @@ def _create_asn1_time(self, time): def create_x509_crl(self, builder, private_key, algorithm): if not isinstance(builder, x509.CertificateRevocationListBuilder): - raise TypeError('Builder type mismatch.') + raise TypeError("Builder type mismatch.") self._x509_check_signature_params(private_key, algorithm) evp_md = self._evp_md_x509_null_if_eddsa(private_key, algorithm) @@ -1011,7 +1074,7 @@ def create_x509_crl(self, builder, private_key, algorithm): handlers=_CRL_EXTENSION_ENCODE_HANDLERS, x509_obj=x509_crl, add_func=self._lib.X509_CRL_add_ext, - gc=True + gc=True, ) # add revoked certificates @@ -1023,27 +1086,24 @@ def create_x509_crl(self, builder, private_key, algorithm): res = self._lib.X509_CRL_add0_revoked(x509_crl, revoked) self.openssl_assert(res == 1) - res = self._lib.X509_CRL_sign( - x509_crl, private_key._evp_pkey, evp_md - ) + res = self._lib.X509_CRL_sign(x509_crl, private_key._evp_pkey, evp_md) if res == 0: errors = self._consume_errors() self.openssl_assert( errors[0]._lib_reason_match( self._lib.ERR_LIB_RSA, - self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY, ) ) raise ValueError("Digest too big for RSA key") return _CertificateRevocationList(self, x509_crl) - def _create_x509_extensions(self, extensions, handlers, x509_obj, - add_func, gc): + def _create_x509_extensions( + self, extensions, handlers, x509_obj, add_func, gc + ): for i, extension in enumerate(extensions): - x509_extension = self._create_x509_extension( - handlers, extension - ) + x509_extension = self._create_x509_extension(handlers, extension) self.openssl_assert(x509_extension != self._ffi.NULL) if gc: @@ -1081,7 +1141,7 @@ def _create_x509_extension(self, handlers, extension): encode = handlers[extension.oid] except KeyError: raise NotImplementedError( - 'Extension not supported: {}'.format(extension.oid) + "Extension not supported: {}".format(extension.oid) ) ext_struct = encode(self, extension.value) @@ -1095,7 +1155,7 @@ def _create_x509_extension(self, handlers, extension): def create_x509_revoked_certificate(self, builder): if not isinstance(builder, x509.RevokedCertificateBuilder): - raise TypeError('Builder type mismatch.') + raise TypeError("Builder type mismatch.") x509_revoked = self._lib.X509_REVOKED_new() self.openssl_assert(x509_revoked != self._ffi.NULL) @@ -1114,7 +1174,7 @@ def create_x509_revoked_certificate(self, builder): handlers=_CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, x509_obj=x509_revoked, add_func=self._lib.X509_REVOKED_add_ext, - gc=True + gc=True, ) return _RevokedCertificate(self, None, x509_revoked) @@ -1155,7 +1215,8 @@ def load_pem_parameters(self, data): mem_bio = self._bytes_to_bio(data) # only DH is supported currently dh_cdata = self._lib.PEM_read_bio_DHparams( - mem_bio.bio, self._ffi.NULL, self._ffi.NULL, self._ffi.NULL) + mem_bio.bio, self._ffi.NULL, self._ffi.NULL, self._ffi.NULL + ) if dh_cdata != self._ffi.NULL: dh_cdata = self._ffi.gc(dh_cdata, self._lib.DH_free) return _DHParameters(self, dh_cdata) @@ -1220,9 +1281,7 @@ def load_der_public_key(self, data): def load_der_parameters(self, data): mem_bio = self._bytes_to_bio(data) - dh_cdata = self._lib.d2i_DHparams_bio( - mem_bio.bio, self._ffi.NULL - ) + dh_cdata = self._lib.d2i_DHparams_bio(mem_bio.bio, self._ffi.NULL) if dh_cdata != self._ffi.NULL: dh_cdata = self._ffi.gc(dh_cdata, self._lib.DH_free) return _DHParameters(self, dh_cdata) @@ -1355,12 +1414,12 @@ def _load_key(self, openssl_read_func, convert_func, data, password): if password is not None and userdata.called == 0: raise TypeError( - "Password was given but private key is not encrypted.") + "Password was given but private key is not encrypted." + ) assert ( - (password is not None and userdata.called == 1) or - password is None - ) + password is not None and userdata.called == 1 + ) or password is None return convert_func(evp_pkey) @@ -1370,32 +1429,28 @@ def _handle_key_loading_error(self): if not errors: raise ValueError("Could not deserialize key data.") - elif ( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EVP, self._lib.EVP_R_BAD_DECRYPT - ) or errors[0]._lib_reason_match( - self._lib.ERR_LIB_PKCS12, - self._lib.PKCS12_R_PKCS12_CIPHERFINAL_ERROR - ) + elif errors[0]._lib_reason_match( + self._lib.ERR_LIB_EVP, self._lib.EVP_R_BAD_DECRYPT + ) or errors[0]._lib_reason_match( + self._lib.ERR_LIB_PKCS12, + self._lib.PKCS12_R_PKCS12_CIPHERFINAL_ERROR, ): raise ValueError("Bad decrypt. Incorrect password?") - elif ( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EVP, self._lib.EVP_R_UNKNOWN_PBE_ALGORITHM - ) or errors[0]._lib_reason_match( - self._lib.ERR_LIB_PEM, self._lib.PEM_R_UNSUPPORTED_ENCRYPTION - ) + elif errors[0]._lib_reason_match( + self._lib.ERR_LIB_EVP, self._lib.EVP_R_UNKNOWN_PBE_ALGORITHM + ) or errors[0]._lib_reason_match( + self._lib.ERR_LIB_PEM, self._lib.PEM_R_UNSUPPORTED_ENCRYPTION ): raise UnsupportedAlgorithm( "PEM data is encrypted with an unsupported cipher", - _Reasons.UNSUPPORTED_CIPHER + _Reasons.UNSUPPORTED_CIPHER, ) elif any( error._lib_reason_match( self._lib.ERR_LIB_EVP, - self._lib.EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM + self._lib.EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM, ) for error in errors ): @@ -1420,15 +1475,14 @@ def elliptic_curve_supported(self, curve): if group == self._ffi.NULL: errors = self._consume_errors() self.openssl_assert( - curve_nid == self._lib.NID_undef or - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EC, - self._lib.EC_R_UNKNOWN_GROUP - ) or + curve_nid == self._lib.NID_undef + or errors[0]._lib_reason_match( + self._lib.ERR_LIB_EC, self._lib.EC_R_UNKNOWN_GROUP + ) + or # This occurs in FIPS mode for unsupported curves on RHEL errors[0]._lib_reason_match( - self._lib.ERR_LIB_EC, - self._lib.EC_R_NOT_A_NIST_PRIME + self._lib.ERR_LIB_EC, self._lib.EC_R_NOT_A_NIST_PRIME ) ) return False @@ -1463,7 +1517,7 @@ def generate_elliptic_curve_private_key(self, curve): else: raise UnsupportedAlgorithm( "Backend object does not support {}.".format(curve.name), - _Reasons.UNSUPPORTED_ELLIPTIC_CURVE + _Reasons.UNSUPPORTED_ELLIPTIC_CURVE, ) def load_elliptic_curve_private_numbers(self, numbers): @@ -1478,7 +1532,8 @@ def load_elliptic_curve_private_numbers(self, numbers): self.openssl_assert(res == 1) ec_cdata = self._ec_key_set_public_key_affine_coordinates( - ec_cdata, public.x, public.y) + ec_cdata, public.x, public.y + ) evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) @@ -1487,7 +1542,8 @@ def load_elliptic_curve_private_numbers(self, numbers): def load_elliptic_curve_public_numbers(self, numbers): ec_cdata = self._ec_key_new_by_curve(numbers.curve) ec_cdata = self._ec_key_set_public_key_affine_coordinates( - ec_cdata, numbers.x, numbers.y) + ec_cdata, numbers.x, numbers.y + ) evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) @@ -1525,8 +1581,9 @@ def derive_elliptic_curve_private_key(self, private_value, curve): value = self._ffi.gc(value, self._lib.BN_clear_free) with self._tmp_bn_ctx() as bn_ctx: - res = self._lib.EC_POINT_mul(group, point, value, self._ffi.NULL, - self._ffi.NULL, bn_ctx) + res = self._lib.EC_POINT_mul( + group, point, value, self._ffi.NULL, self._ffi.NULL, bn_ctx + ) self.openssl_assert(res == 1) bn_x = self._lib.BN_CTX_get(bn_ctx) @@ -1578,9 +1635,7 @@ def create_ocsp_request(self, builder): ocsp_req = self._ffi.gc(ocsp_req, self._lib.OCSP_REQUEST_free) cert, issuer, algorithm = builder._request evp_md = self._evp_md_non_null_from_algorithm(algorithm) - certid = self._lib.OCSP_cert_to_id( - evp_md, cert._x509, issuer._x509 - ) + certid = self._lib.OCSP_cert_to_id(evp_md, cert._x509, issuer._x509) self.openssl_assert(certid != self._ffi.NULL) onereq = self._lib.OCSP_request_add0_id(ocsp_req, certid) self.openssl_assert(onereq != self._ffi.NULL) @@ -1603,8 +1658,9 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): builder._response._algorithm ) certid = self._lib.OCSP_cert_to_id( - evp_md, builder._response._cert._x509, - builder._response._issuer._x509 + evp_md, + builder._response._cert._x509, + builder._response._issuer._x509, ) self.openssl_assert(certid != self._ffi.NULL) certid = self._ffi.gc(certid, self._lib.OCSP_CERTID_free) @@ -1636,7 +1692,7 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): reason, rev_time, this_update, - next_update + next_update, ) self.openssl_assert(res != self._ffi.NULL) # okay, now sign the basic structure @@ -1660,23 +1716,28 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): ) res = self._lib.OCSP_basic_sign( - basic, responder_cert._x509, private_key._evp_pkey, - evp_md, self._ffi.NULL, flags + basic, + responder_cert._x509, + private_key._evp_pkey, + evp_md, + self._ffi.NULL, + flags, ) if res != 1: errors = self._consume_errors() self.openssl_assert( errors[0]._lib_reason_match( self._lib.ERR_LIB_X509, - self._lib.X509_R_KEY_VALUES_MISMATCH + self._lib.X509_R_KEY_VALUES_MISMATCH, ) ) raise ValueError("responder_cert must be signed by private_key") return basic - def create_ocsp_response(self, response_status, builder, private_key, - algorithm): + def create_ocsp_response( + self, response_status, builder, private_key, algorithm + ): if response_status is ocsp.OCSPResponseStatus.SUCCESSFUL: basic = self._create_ocsp_basic_response( builder, private_key, algorithm @@ -1692,9 +1753,8 @@ def create_ocsp_response(self, response_status, builder, private_key, return _OCSPResponse(self, ocsp_resp) def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve): - return ( - self.elliptic_curve_supported(curve) and - isinstance(algorithm, ec.ECDH) + return self.elliptic_curve_supported(curve) and isinstance( + algorithm, ec.ECDH ) def _ec_cdata_to_evp_pkey(self, ec_cdata): @@ -1708,10 +1768,7 @@ def _elliptic_curve_to_nid(self, curve): Get the NID for a curve name. """ - curve_aliases = { - "secp192r1": "prime192v1", - "secp256r1": "prime256v1" - } + curve_aliases = {"secp192r1": "prime192v1", "secp256r1": "prime256v1"} curve_name = curve_aliases.get(curve.name, curve.name) @@ -1719,7 +1776,7 @@ def _elliptic_curve_to_nid(self, curve): if curve_nid == self._lib.NID_undef: raise UnsupportedAlgorithm( "{} is not a supported elliptic curve".format(curve.name), - _Reasons.UNSUPPORTED_ELLIPTIC_CURVE + _Reasons.UNSUPPORTED_ELLIPTIC_CURVE, ) return curve_nid @@ -1782,8 +1839,9 @@ def _ec_key_set_public_key_affine_coordinates(self, ctx, x, y): return ctx - def _private_key_bytes(self, encoding, format, encryption_algorithm, - key, evp_pkey, cdata): + def _private_key_bytes( + self, encoding, format, encryption_algorithm, key, evp_pkey, cdata + ): # validate argument types if not isinstance(encoding, serialization.Encoding): raise TypeError("encoding must be an item from the Encoding enum") @@ -1791,8 +1849,9 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, raise TypeError( "format must be an item from the PrivateFormat enum" ) - if not isinstance(encryption_algorithm, - serialization.KeySerializationEncryption): + if not isinstance( + encryption_algorithm, serialization.KeySerializationEncryption + ): raise TypeError( "Encryption algorithm must be a KeySerializationEncryption " "instance" @@ -1801,8 +1860,9 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, # validate password if isinstance(encryption_algorithm, serialization.NoEncryption): password = b"" - elif isinstance(encryption_algorithm, - serialization.BestAvailableEncryption): + elif isinstance( + encryption_algorithm, serialization.BestAvailableEncryption + ): password = encryption_algorithm.password if len(password) > 1023: raise ValueError( @@ -1826,11 +1886,8 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, # TraditionalOpenSSL + PEM/DER if format is serialization.PrivateFormat.TraditionalOpenSSL: - if ( - self._fips_enabled and - not isinstance( - encryption_algorithm, serialization.NoEncryption - ) + if self._fips_enabled and not isinstance( + encryption_algorithm, serialization.NoEncryption ): raise ValueError( "Encrypted traditional OpenSSL format is not " @@ -1871,9 +1928,7 @@ def _private_key_bytes(self, encoding, format, encryption_algorithm, ) return self._bio_func_output(write_bio, cdata) - raise ValueError( - "Unsupported encoding for TraditionalOpenSSL" - ) + raise ValueError("Unsupported encoding for TraditionalOpenSSL") # OpenSSH + PEM if format is serialization.PrivateFormat.OpenSSH: @@ -1903,7 +1958,7 @@ def _private_key_bytes_via_bio(self, write_bio, evp_pkey, password): password, len(password), self._ffi.NULL, - self._ffi.NULL + self._ffi.NULL, ) def _bio_func_output(self, write_bio, *args): @@ -1944,9 +1999,7 @@ def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): elif encoding is serialization.Encoding.DER: write_bio = self._lib.i2d_RSAPublicKey_bio else: - raise ValueError( - "PKCS1 works only with PEM or DER encoding" - ) + raise ValueError("PKCS1 works only with PEM or DER encoding") return self._bio_func_output(write_bio, cdata) # OpenSSH + OpenSSH @@ -1964,16 +2017,11 @@ def _public_key_bytes(self, encoding, format, key, evp_pkey, cdata): def _parameter_bytes(self, encoding, format, cdata): if encoding is serialization.Encoding.OpenSSH: - raise TypeError( - "OpenSSH encoding is not supported" - ) + raise TypeError("OpenSSH encoding is not supported") # Only DH is supported here currently. q = self._ffi.new("BIGNUM **") - self._lib.DH_get0_pqg(cdata, - self._ffi.NULL, - q, - self._ffi.NULL) + self._lib.DH_get0_pqg(cdata, self._ffi.NULL, q, self._ffi.NULL) if encoding is serialization.Encoding.PEM: if q[0] != self._ffi.NULL: write_bio = self._lib.PEM_write_bio_DHxparams @@ -2004,10 +2052,7 @@ def generate_dh_parameters(self, generator, key_size): dh_param_cdata = self._ffi.gc(dh_param_cdata, self._lib.DH_free) res = self._lib.DH_generate_parameters_ex( - dh_param_cdata, - key_size, - generator, - self._ffi.NULL + dh_param_cdata, key_size, generator, self._ffi.NULL ) self.openssl_assert(res == 1) @@ -2031,7 +2076,8 @@ def generate_dh_private_key(self, parameters): def generate_dh_private_key_and_parameters(self, generator, key_size): return self.generate_dh_private_key( - self.generate_dh_parameters(generator, key_size)) + self.generate_dh_parameters(generator, key_size) + ) def load_dh_private_numbers(self, numbers): parameter_numbers = numbers.public_numbers.parameter_numbers @@ -2070,12 +2116,10 @@ def load_dh_private_numbers(self, numbers): # the key to the attacker in exchange for having the full key space # available. See: https://crypto.stackexchange.com/questions/12961 if codes[0] != 0 and not ( - parameter_numbers.g == 2 and - codes[0] ^ self._lib.DH_NOT_SUITABLE_GENERATOR == 0 + parameter_numbers.g == 2 + and codes[0] ^ self._lib.DH_NOT_SUITABLE_GENERATOR == 0 ): - raise ValueError( - "DH private numbers did not pass safety checks." - ) + raise ValueError("DH private numbers did not pass safety checks.") evp_pkey = self._dh_cdata_to_evp_pkey(dh_cdata) @@ -2342,8 +2386,16 @@ def derive_scrypt(self, key_material, salt, length, n, r, p): buf = self._ffi.new("unsigned char[]", length) key_material_ptr = self._ffi.from_buffer(key_material) res = self._lib.EVP_PBE_scrypt( - key_material_ptr, len(key_material), salt, len(salt), n, r, p, - scrypt._MEM_LIMIT, buf, length + key_material_ptr, + len(key_material), + salt, + len(salt), + n, + r, + p, + scrypt._MEM_LIMIT, + buf, + length, ) if res != 1: errors = self._consume_errors() @@ -2351,18 +2403,17 @@ def derive_scrypt(self, key_material, salt, length, n, r, p): # This error is only added to the stack in 1.1.1+ self.openssl_assert( errors[0]._lib_reason_match( + self._lib.ERR_LIB_EVP, self._lib.ERR_R_MALLOC_FAILURE + ) + or errors[0]._lib_reason_match( self._lib.ERR_LIB_EVP, - self._lib.ERR_R_MALLOC_FAILURE - ) or - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EVP, - self._lib.EVP_R_MEMORY_LIMIT_EXCEEDED + self._lib.EVP_R_MEMORY_LIMIT_EXCEEDED, ) ) # memory required formula explained here: # https://blog.filippo.io/the-scrypt-parameters/ - min_memory = 128 * n * r // (1024**2) + min_memory = 128 * n * r // (1024 ** 2) raise MemoryError( "Not enough memory to derive key. These parameters require" " {} MB of memory.".format(min_memory) @@ -2373,9 +2424,7 @@ def aead_cipher_supported(self, cipher): cipher_name = aead._aead_cipher_name(cipher) if self._fips_enabled and cipher_name not in self._fips_aead: return False - return ( - self._lib.EVP_get_cipherbyname(cipher_name) != self._ffi.NULL - ) + return self._lib.EVP_get_cipherbyname(cipher_name) != self._ffi.NULL @contextlib.contextmanager def _zeroed_bytearray(self, length): @@ -2466,8 +2515,9 @@ def load_key_and_certificates_from_pkcs12(self, data, password): return (key, cert, additional_certificates) - def serialize_key_and_certificates_to_pkcs12(self, name, key, cert, cas, - encryption_algorithm): + def serialize_key_and_certificates_to_pkcs12( + self, name, key, cert, cas, encryption_algorithm + ): password = None if name is not None: utils._check_bytes("name", name) @@ -2477,8 +2527,9 @@ def serialize_key_and_certificates_to_pkcs12(self, name, key, cert, cas, nid_key = -1 pkcs12_iter = 0 mac_iter = 0 - elif isinstance(encryption_algorithm, - serialization.BestAvailableEncryption): + elif isinstance( + encryption_algorithm, serialization.BestAvailableEncryption + ): # PKCS12 encryption is hopeless trash and can never be fixed. # This is the least terrible option. nid_cert = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC @@ -2508,10 +2559,17 @@ def serialize_key_and_certificates_to_pkcs12(self, name, key, cert, cas, with self._zeroed_null_terminated_buf(password) as password_buf: with self._zeroed_null_terminated_buf(name) as name_buf: p12 = self._lib.PKCS12_create( - password_buf, name_buf, + password_buf, + name_buf, key._evp_pkey if key else self._ffi.NULL, cert._x509 if cert else self._ffi.NULL, - sk_x509, nid_key, nid_cert, pkcs12_iter, mac_iter, 0) + sk_x509, + nid_key, + nid_cert, + pkcs12_iter, + mac_iter, + 0, + ) self.openssl_assert(p12 != self._ffi.NULL) p12 = self._ffi.gc(p12, self._lib.PKCS12_free) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 1de814193455..8e9b58cd2a4f 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -42,8 +42,9 @@ def __init__(self, backend, cipher, mode, operation): raise UnsupportedAlgorithm( "cipher {} in {} mode is not supported " "by this backend.".format( - cipher.name, mode.name if mode else mode), - _Reasons.UNSUPPORTED_CIPHER + cipher.name, mode.name if mode else mode + ), + _Reasons.UNSUPPORTED_CIPHER, ) evp_cipher = adapter(self._backend, cipher, mode) @@ -70,11 +71,14 @@ def __init__(self, backend, cipher, mode, operation): else: iv_nonce = self._backend._ffi.NULL # begin init with cipher and operation type - res = self._backend._lib.EVP_CipherInit_ex(ctx, evp_cipher, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - operation) + res = self._backend._lib.EVP_CipherInit_ex( + ctx, + evp_cipher, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + operation, + ) self._backend.openssl_assert(res != 0) # set the key length to handle variable key ciphers res = self._backend._lib.EVP_CIPHER_CTX_set_key_length( @@ -83,14 +87,18 @@ def __init__(self, backend, cipher, mode, operation): self._backend.openssl_assert(res != 0) if isinstance(mode, modes.GCM): res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, self._backend._lib.EVP_CTRL_AEAD_SET_IVLEN, - len(iv_nonce), self._backend._ffi.NULL + ctx, + self._backend._lib.EVP_CTRL_AEAD_SET_IVLEN, + len(iv_nonce), + self._backend._ffi.NULL, ) self._backend.openssl_assert(res != 0) if mode.tag is not None: res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, self._backend._lib.EVP_CTRL_AEAD_SET_TAG, - len(mode.tag), mode.tag + ctx, + self._backend._lib.EVP_CTRL_AEAD_SET_TAG, + len(mode.tag), + mode.tag, ) self._backend.openssl_assert(res != 0) self._tag = mode.tag @@ -102,7 +110,7 @@ def __init__(self, backend, cipher, mode, operation): self._backend._ffi.NULL, self._backend._ffi.from_buffer(cipher.key), iv_nonce, - operation + operation, ) self._backend.openssl_assert(res != 0) # We purposely disable padding here as it's handled higher up in the @@ -127,17 +135,20 @@ def update_into(self, data, buf): ) outlen = self._backend._ffi.new("int *") res = self._backend._lib.EVP_CipherUpdate( - self._ctx, buf, outlen, - self._backend._ffi.from_buffer(data), len(data) + self._ctx, + buf, + outlen, + self._backend._ffi.from_buffer(data), + len(data), ) self._backend.openssl_assert(res != 0) return outlen[0] def finalize(self): if ( - self._operation == self._DECRYPT and - isinstance(self._mode, modes.ModeWithAuthenticationTag) and - self.tag is None + self._operation == self._DECRYPT + and isinstance(self._mode, modes.ModeWithAuthenticationTag) + and self.tag is None ): raise ValueError( "Authentication tag must be provided when decrypting." @@ -155,7 +166,7 @@ def finalize(self): self._backend.openssl_assert( errors[0]._lib_reason_match( self._backend._lib.ERR_LIB_EVP, - self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH, ) ) raise ValueError( @@ -163,31 +174,35 @@ def finalize(self): "the block length." ) - if (isinstance(self._mode, modes.GCM) and - self._operation == self._ENCRYPT): + if ( + isinstance(self._mode, modes.GCM) + and self._operation == self._ENCRYPT + ): tag_buf = self._backend._ffi.new( "unsigned char[]", self._block_size_bytes ) res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - self._ctx, self._backend._lib.EVP_CTRL_AEAD_GET_TAG, - self._block_size_bytes, tag_buf + self._ctx, + self._backend._lib.EVP_CTRL_AEAD_GET_TAG, + self._block_size_bytes, + tag_buf, ) self._backend.openssl_assert(res != 0) self._tag = self._backend._ffi.buffer(tag_buf)[:] res = self._backend._lib.EVP_CIPHER_CTX_cleanup(self._ctx) self._backend.openssl_assert(res == 1) - return self._backend._ffi.buffer(buf)[:outlen[0]] + return self._backend._ffi.buffer(buf)[: outlen[0]] def finalize_with_tag(self, tag): if len(tag) < self._mode._min_tag_length: raise ValueError( "Authentication tag must be {} bytes or longer.".format( - self._mode._min_tag_length) + self._mode._min_tag_length + ) ) res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - self._ctx, self._backend._lib.EVP_CTRL_AEAD_SET_TAG, - len(tag), tag + self._ctx, self._backend._lib.EVP_CTRL_AEAD_SET_TAG, len(tag), tag ) self._backend.openssl_assert(res != 0) self._tag = tag @@ -196,8 +211,11 @@ def finalize_with_tag(self, tag): def authenticate_additional_data(self, data): outlen = self._backend._ffi.new("int *") res = self._backend._lib.EVP_CipherUpdate( - self._ctx, self._backend._ffi.NULL, outlen, - self._backend._ffi.from_buffer(data), len(data) + self._ctx, + self._backend._ffi.NULL, + outlen, + self._backend._ffi.from_buffer(data), + len(data), ) self._backend.openssl_assert(res != 0) diff --git a/src/cryptography/hazmat/backends/openssl/cmac.py b/src/cryptography/hazmat/backends/openssl/cmac.py index d4d46f55f3cb..195fc230f2b2 100644 --- a/src/cryptography/hazmat/backends/openssl/cmac.py +++ b/src/cryptography/hazmat/backends/openssl/cmac.py @@ -7,7 +7,9 @@ from cryptography import utils from cryptography.exceptions import ( - InvalidSignature, UnsupportedAlgorithm, _Reasons + InvalidSignature, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.primitives.ciphers.modes import CBC @@ -16,8 +18,10 @@ class _CMACContext(object): def __init__(self, backend, algorithm, ctx=None): if not backend.cmac_algorithm_supported(algorithm): - raise UnsupportedAlgorithm("This backend does not support CMAC.", - _Reasons.UNSUPPORTED_CIPHER) + raise UnsupportedAlgorithm( + "This backend does not support CMAC.", + _Reasons.UNSUPPORTED_CIPHER, + ) self._backend = backend self._key = algorithm.key @@ -37,8 +41,11 @@ def __init__(self, backend, algorithm, ctx=None): key_ptr = self._backend._ffi.from_buffer(self._key) res = self._backend._lib.CMAC_Init( - ctx, key_ptr, len(self._key), - evp_cipher, self._backend._ffi.NULL + ctx, + key_ptr, + len(self._key), + evp_cipher, + self._backend._ffi.NULL, ) self._backend.openssl_assert(res == 1) @@ -53,9 +60,7 @@ def update(self, data): def finalize(self): buf = self._backend._ffi.new("unsigned char[]", self._output_length) length = self._backend._ffi.new("size_t *", self._output_length) - res = self._backend._lib.CMAC_Final( - self._ctx, buf, length - ) + res = self._backend._lib.CMAC_Final(self._ctx, buf, length) self._backend.openssl_assert(res == 1) self._ctx = None @@ -67,13 +72,9 @@ def copy(self): copied_ctx = self._backend._ffi.gc( copied_ctx, self._backend._lib.CMAC_CTX_free ) - res = self._backend._lib.CMAC_CTX_copy( - copied_ctx, self._ctx - ) + res = self._backend._lib.CMAC_CTX_copy(copied_ctx, self._ctx) self._backend.openssl_assert(res == 1) - return _CMACContext( - self._backend, self._algorithm, ctx=copied_ctx - ) + return _CMACContext(self._backend, self._algorithm, ctx=copied_ctx) def verify(self, signature): digest = self.finalize() diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 5543b57a4871..56dcf26c1b54 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -14,7 +14,9 @@ from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM from cryptography.x509.name import _ASN1_TYPE_TO_ENUM from cryptography.x509.oid import ( - CRLEntryExtensionOID, CertificatePoliciesOID, ExtensionOID, + CRLEntryExtensionOID, + CertificatePoliciesOID, + ExtensionOID, OCSPExtensionOID, ) @@ -119,10 +121,10 @@ def _decode_general_name(backend, gn): # netmask. To handle this we convert the netmask to integer, then # find the first 0 bit, which will be the prefix. If another 1 # bit is present after that the netmask is invalid. - base = ipaddress.ip_address(data[:data_len // 2]) - netmask = ipaddress.ip_address(data[data_len // 2:]) + base = ipaddress.ip_address(data[: data_len // 2]) + netmask = ipaddress.ip_address(data[data_len // 2 :]) bits = bin(int(netmask))[2:] - prefix = bits.find('0') + prefix = bits.find("0") # If no 0 bits are found it is a /32 or /128 if prefix == -1: prefix = len(bits) @@ -158,7 +160,7 @@ def _decode_general_name(backend, gn): "{} is not a supported type".format( x509._GENERAL_NAMES.get(gn.type, gn.type) ), - gn.type + gn.type, ) @@ -223,9 +225,9 @@ def parse(self, backend, x509_obj): # The contents of the extension must be an ASN.1 NULL. reader = DERReader(_asn1_string_to_bytes(backend, data)) reader.read_single_element(NULL).check_empty() - extensions.append(x509.Extension( - oid, critical, x509.PrecertPoison() - )) + extensions.append( + x509.Extension(oid, critical, x509.PrecertPoison()) + ) seen_oids.add(oid) continue @@ -237,9 +239,7 @@ def parse(self, backend, x509_obj): backend.openssl_assert(data != backend._ffi.NULL) der = backend._ffi.buffer(data.data, data.length)[:] unrecognized = x509.UnrecognizedExtension(oid, der) - extensions.append( - x509.Extension(oid, critical, unrecognized) - ) + extensions.append(x509.Extension(oid, critical, unrecognized)) else: ext_data = backend._lib.X509V3_EXT_d2i(ext) if ext_data == backend._ffi.NULL: @@ -271,16 +271,12 @@ def _decode_certificate_policies(backend, cp): qnum = backend._lib.sk_POLICYQUALINFO_num(pi.qualifiers) qualifiers = [] for j in range(qnum): - pqi = backend._lib.sk_POLICYQUALINFO_value( - pi.qualifiers, j - ) - pqualid = x509.ObjectIdentifier( - _obj2txt(backend, pqi.pqualid) - ) + pqi = backend._lib.sk_POLICYQUALINFO_value(pi.qualifiers, j) + pqualid = x509.ObjectIdentifier(_obj2txt(backend, pqi.pqualid)) if pqualid == CertificatePoliciesOID.CPS_QUALIFIER: cpsuri = backend._ffi.buffer( pqi.d.cpsuri.data, pqi.d.cpsuri.length - )[:].decode('ascii') + )[:].decode("ascii") qualifiers.append(cpsuri) else: assert pqualid == CertificatePoliciesOID.CPS_USER_NOTICE @@ -289,9 +285,7 @@ def _decode_certificate_policies(backend, cp): ) qualifiers.append(user_notice) - certificate_policies.append( - x509.PolicyInformation(oid, qualifiers) - ) + certificate_policies.append(x509.PolicyInformation(oid, qualifiers)) return x509.CertificatePolicies(certificate_policies) @@ -304,13 +298,9 @@ def _decode_user_notice(backend, un): explicit_text = _asn1_string_to_utf8(backend, un.exptext) if un.noticeref != backend._ffi.NULL: - organization = _asn1_string_to_utf8( - backend, un.noticeref.organization - ) + organization = _asn1_string_to_utf8(backend, un.noticeref.organization) - num = backend._lib.sk_ASN1_INTEGER_num( - un.noticeref.noticenos - ) + num = backend._lib.sk_ASN1_INTEGER_num(un.noticeref.noticenos) notice_numbers = [] for i in range(num): asn1_int = backend._lib.sk_ASN1_INTEGER_value( @@ -319,9 +309,7 @@ def _decode_user_notice(backend, un): notice_num = _asn1_integer_to_int(backend, asn1_int) notice_numbers.append(notice_num) - notice_reference = x509.NoticeReference( - organization, notice_numbers - ) + notice_reference = x509.NoticeReference(organization, notice_numbers) return x509.UserNotice(notice_reference, explicit_text) @@ -364,9 +352,7 @@ def _decode_authority_key_identifier(backend, akid): )[:] if akid.issuer != backend._ffi.NULL: - authority_cert_issuer = _decode_general_names( - backend, akid.issuer - ) + authority_cert_issuer = _decode_general_names(backend, akid.issuer) authority_cert_serial_number = _asn1_integer_to_int_or_none( backend, akid.serial @@ -382,10 +368,11 @@ def _decode_information_access(backend, ia): ia = backend._ffi.gc( ia, lambda x: backend._lib.sk_ACCESS_DESCRIPTION_pop_free( - x, backend._ffi.addressof( + x, + backend._ffi.addressof( backend._lib._original_lib, "ACCESS_DESCRIPTION_free" - ) - ) + ), + ), ) num = backend._lib.sk_ACCESS_DESCRIPTION_num(ia) access_descriptions = [] @@ -432,7 +419,7 @@ def _decode_key_usage(backend, bit_string): key_cert_sign, crl_sign, encipher_only, - decipher_only + decipher_only, ) @@ -500,8 +487,13 @@ def _decode_issuing_dist_point(backend, idp): only_some_reasons = None return x509.IssuingDistributionPoint( - full_name, relative_name, only_user, only_ca, only_some_reasons, - indirect_crl, only_attr + full_name, + relative_name, + only_user, + only_ca, + only_some_reasons, + indirect_crl, + only_attr, ) @@ -622,13 +614,9 @@ def _decode_distpoint(backend, distpoint): rnum = backend._lib.sk_X509_NAME_ENTRY_num(rns) attributes = set() for i in range(rnum): - rn = backend._lib.sk_X509_NAME_ENTRY_value( - rns, i - ) + rn = backend._lib.sk_X509_NAME_ENTRY_value(rns, i) backend.openssl_assert(rn != backend._ffi.NULL) - attributes.add( - _decode_x509_name_entry(backend, rn) - ) + attributes.add(_decode_x509_name_entry(backend, rn)) relative_name = x509.RelativeDistinguishedName(attributes) @@ -654,8 +642,9 @@ def _decode_inhibit_any_policy(backend, asn1_int): def _decode_scts(backend, asn1_scts): from cryptography.hazmat.backends.openssl.x509 import ( - _SignedCertificateTimestamp + _SignedCertificateTimestamp, ) + asn1_scts = backend._ffi.cast("Cryptography_STACK_OF_SCT *", asn1_scts) asn1_scts = backend._ffi.gc(asn1_scts, backend._lib.SCT_LIST_free) @@ -674,9 +663,7 @@ def _decode_precert_signed_certificate_timestamps(backend, asn1_scts): def _decode_signed_certificate_timestamps(backend, asn1_scts): - return x509.SignedCertificateTimestamps( - _decode_scts(backend, asn1_scts) - ) + return x509.SignedCertificateTimestamps(_decode_scts(backend, asn1_scts)) # CRLReason ::= ENUMERATED { @@ -715,7 +702,7 @@ def _decode_signed_certificate_timestamps(backend, asn1_scts): x509.ReasonFlags.certificate_hold: 6, x509.ReasonFlags.remove_from_crl: 8, x509.ReasonFlags.privilege_withdrawn: 9, - x509.ReasonFlags.aa_compromise: 10 + x509.ReasonFlags.aa_compromise: 10, } @@ -731,9 +718,7 @@ def _decode_crl_reason(backend, enum): def _decode_invalidity_date(backend, inv_date): - generalized_time = backend._ffi.cast( - "ASN1_GENERALIZEDTIME *", inv_date - ) + generalized_time = backend._ffi.cast("ASN1_GENERALIZEDTIME *", inv_date) generalized_time = backend._ffi.gc( generalized_time, backend._lib.ASN1_GENERALIZEDTIME_free ) @@ -794,7 +779,7 @@ def _asn1_string_to_utf8(backend, asn1_string): buf = backend._ffi.gc( buf, lambda buffer: backend._lib.OPENSSL_free(buffer[0]) ) - return backend._ffi.buffer(buf[0], res)[:].decode('utf8') + return backend._ffi.buffer(buf[0], res)[:].decode("utf8") def _parse_asn1_time(backend, asn1_time): @@ -895,19 +880,19 @@ def _decode_nonce(backend, nonce): _CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), - handlers=_EXTENSION_HANDLERS_NO_SCT + handlers=_EXTENSION_HANDLERS_NO_SCT, ) _CERTIFICATE_EXTENSION_PARSER = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), - handlers=_EXTENSION_HANDLERS + handlers=_EXTENSION_HANDLERS, ) _CSR_EXTENSION_PARSER = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.sk_X509_EXTENSION_num(x), get_ext=lambda backend, x, i: backend._lib.sk_X509_EXTENSION_value(x, i), - handlers=_EXTENSION_HANDLERS + handlers=_EXTENSION_HANDLERS, ) _REVOKED_CERTIFICATE_EXTENSION_PARSER = _X509ExtensionParser( @@ -943,5 +928,5 @@ def _decode_nonce(backend, nonce): _OCSP_SINGLERESP_EXT_PARSER_NO_SCT = _X509ExtensionParser( ext_count=lambda backend, x: backend._lib.OCSP_SINGLERESP_get_ext_count(x), get_ext=lambda backend, x, i: backend._lib.OCSP_SINGLERESP_get_ext(x, i), - handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT + handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT, ) diff --git a/src/cryptography/hazmat/backends/openssl/dh.py b/src/cryptography/hazmat/backends/openssl/dh.py index 1d5065c26bec..95179d374e4c 100644 --- a/src/cryptography/hazmat/backends/openssl/dh.py +++ b/src/cryptography/hazmat/backends/openssl/dh.py @@ -53,7 +53,7 @@ def parameter_numbers(self): return dh.DHParameterNumbers( p=self._backend._bn_to_int(p[0]), g=self._backend._bn_to_int(g[0]), - q=q_val + q=q_val, ) def generate_private_key(self): @@ -61,34 +61,29 @@ def generate_private_key(self): def parameter_bytes(self, encoding, format): if format is not serialization.ParameterFormat.PKCS3: - raise ValueError( - "Only PKCS3 serialization is supported" - ) + raise ValueError("Only PKCS3 serialization is supported") if not self._backend._lib.Cryptography_HAS_EVP_PKEY_DHX: q = self._backend._ffi.new("BIGNUM **") - self._backend._lib.DH_get0_pqg(self._dh_cdata, - self._backend._ffi.NULL, - q, - self._backend._ffi.NULL) + self._backend._lib.DH_get0_pqg( + self._dh_cdata, + self._backend._ffi.NULL, + q, + self._backend._ffi.NULL, + ) if q[0] != self._backend._ffi.NULL: raise UnsupportedAlgorithm( "DH X9.42 serialization is not supported", - _Reasons.UNSUPPORTED_SERIALIZATION) + _Reasons.UNSUPPORTED_SERIALIZATION, + ) - return self._backend._parameter_bytes( - encoding, - format, - self._dh_cdata - ) + return self._backend._parameter_bytes(encoding, format, self._dh_cdata) def _handle_dh_compute_key_error(errors, backend): lib = backend._lib backend.openssl_assert( - errors[0]._lib_reason_match( - lib.ERR_LIB_DH, lib.DH_R_INVALID_PUBKEY - ) + errors[0]._lib_reason_match(lib.ERR_LIB_DH, lib.DH_R_INVALID_PUBKEY) ) raise ValueError("Public key value is invalid for this exchange.") @@ -96,9 +91,7 @@ def _handle_dh_compute_key_error(errors, backend): def _get_dh_num_bits(backend, dh_cdata): p = backend._ffi.new("BIGNUM **") - backend._lib.DH_get0_pqg(dh_cdata, p, - backend._ffi.NULL, - backend._ffi.NULL) + backend._lib.DH_get0_pqg(dh_cdata, p, backend._ffi.NULL, backend._ffi.NULL) backend.openssl_assert(p[0] != backend._ffi.NULL) return backend._lib.BN_num_bits(p[0]) @@ -136,24 +129,23 @@ def private_numbers(self): parameter_numbers=dh.DHParameterNumbers( p=self._backend._bn_to_int(p[0]), g=self._backend._bn_to_int(g[0]), - q=q_val + q=q_val, ), - y=self._backend._bn_to_int(pub_key[0]) + y=self._backend._bn_to_int(pub_key[0]), ), - x=self._backend._bn_to_int(priv_key[0]) + x=self._backend._bn_to_int(priv_key[0]), ) def exchange(self, peer_public_key): buf = self._backend._ffi.new("unsigned char[]", self._key_size_bytes) pub_key = self._backend._ffi.new("BIGNUM **") - self._backend._lib.DH_get0_key(peer_public_key._dh_cdata, pub_key, - self._backend._ffi.NULL) + self._backend._lib.DH_get0_key( + peer_public_key._dh_cdata, pub_key, self._backend._ffi.NULL + ) self._backend.openssl_assert(pub_key[0] != self._backend._ffi.NULL) res = self._backend._lib.DH_compute_key( - buf, - pub_key[0], - self._dh_cdata + buf, pub_key[0], self._dh_cdata ) if res == -1: @@ -173,15 +165,16 @@ def exchange(self, peer_public_key): def public_key(self): dh_cdata = _dh_params_dup(self._dh_cdata, self._backend) pub_key = self._backend._ffi.new("BIGNUM **") - self._backend._lib.DH_get0_key(self._dh_cdata, - pub_key, self._backend._ffi.NULL) + self._backend._lib.DH_get0_key( + self._dh_cdata, pub_key, self._backend._ffi.NULL + ) self._backend.openssl_assert(pub_key[0] != self._backend._ffi.NULL) pub_key_dup = self._backend._lib.BN_dup(pub_key[0]) self._backend.openssl_assert(pub_key_dup != self._backend._ffi.NULL) - res = self._backend._lib.DH_set0_key(dh_cdata, - pub_key_dup, - self._backend._ffi.NULL) + res = self._backend._lib.DH_set0_key( + dh_cdata, pub_key_dup, self._backend._ffi.NULL + ) self._backend.openssl_assert(res == 1) evp_pkey = self._backend._dh_cdata_to_evp_pkey(dh_cdata) return _DHPublicKey(self._backend, dh_cdata, evp_pkey) @@ -196,14 +189,17 @@ def private_bytes(self, encoding, format, encryption_algorithm): ) if not self._backend._lib.Cryptography_HAS_EVP_PKEY_DHX: q = self._backend._ffi.new("BIGNUM **") - self._backend._lib.DH_get0_pqg(self._dh_cdata, - self._backend._ffi.NULL, - q, - self._backend._ffi.NULL) + self._backend._lib.DH_get0_pqg( + self._dh_cdata, + self._backend._ffi.NULL, + q, + self._backend._ffi.NULL, + ) if q[0] != self._backend._ffi.NULL: raise UnsupportedAlgorithm( "DH X9.42 serialization is not supported", - _Reasons.UNSUPPORTED_SERIALIZATION) + _Reasons.UNSUPPORTED_SERIALIZATION, + ) return self._backend._private_key_bytes( encoding, @@ -211,7 +207,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encryption_algorithm, self, self._evp_pkey, - self._dh_cdata + self._dh_cdata, ) @@ -239,16 +235,17 @@ def public_numbers(self): else: q_val = self._backend._bn_to_int(q[0]) pub_key = self._backend._ffi.new("BIGNUM **") - self._backend._lib.DH_get0_key(self._dh_cdata, - pub_key, self._backend._ffi.NULL) + self._backend._lib.DH_get0_key( + self._dh_cdata, pub_key, self._backend._ffi.NULL + ) self._backend.openssl_assert(pub_key[0] != self._backend._ffi.NULL) return dh.DHPublicNumbers( parameter_numbers=dh.DHParameterNumbers( p=self._backend._bn_to_int(p[0]), g=self._backend._bn_to_int(g[0]), - q=q_val + q=q_val, ), - y=self._backend._bn_to_int(pub_key[0]) + y=self._backend._bn_to_int(pub_key[0]), ) def parameters(self): @@ -263,19 +260,18 @@ def public_bytes(self, encoding, format): if not self._backend._lib.Cryptography_HAS_EVP_PKEY_DHX: q = self._backend._ffi.new("BIGNUM **") - self._backend._lib.DH_get0_pqg(self._dh_cdata, - self._backend._ffi.NULL, - q, - self._backend._ffi.NULL) + self._backend._lib.DH_get0_pqg( + self._dh_cdata, + self._backend._ffi.NULL, + q, + self._backend._ffi.NULL, + ) if q[0] != self._backend._ffi.NULL: raise UnsupportedAlgorithm( "DH X9.42 serialization is not supported", - _Reasons.UNSUPPORTED_SERIALIZATION) + _Reasons.UNSUPPORTED_SERIALIZATION, + ) return self._backend._public_key_bytes( - encoding, - format, - self, - self._evp_pkey, - None + encoding, format, self, self._evp_pkey, None ) diff --git a/src/cryptography/hazmat/backends/openssl/dsa.py b/src/cryptography/hazmat/backends/openssl/dsa.py index 79142bf6fa68..0c5faba18ac9 100644 --- a/src/cryptography/hazmat/backends/openssl/dsa.py +++ b/src/cryptography/hazmat/backends/openssl/dsa.py @@ -7,12 +7,15 @@ from cryptography import utils from cryptography.exceptions import InvalidSignature from cryptography.hazmat.backends.openssl.utils import ( - _calculate_digest_and_algorithm, _check_not_prehashed, - _warn_sign_verify_deprecated + _calculate_digest_and_algorithm, + _check_not_prehashed, + _warn_sign_verify_deprecated, ) from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ( - AsymmetricSignatureContext, AsymmetricVerificationContext, dsa + AsymmetricSignatureContext, + AsymmetricVerificationContext, + dsa, ) @@ -29,7 +32,7 @@ def _dsa_sig_sign(backend, private_key, data): backend.openssl_assert(res == 1) backend.openssl_assert(buflen[0]) - return backend._ffi.buffer(sig_buf)[:buflen[0]] + return backend._ffi.buffer(sig_buf)[: buflen[0]] def _dsa_sig_verify(backend, public_key, signature, data): @@ -98,7 +101,7 @@ def parameter_numbers(self): return dsa.DSAParameterNumbers( p=self._backend._bn_to_int(p[0]), q=self._backend._bn_to_int(q[0]), - g=self._backend._bn_to_int(g[0]) + g=self._backend._bn_to_int(g[0]), ) def generate_private_key(self): @@ -144,11 +147,11 @@ def private_numbers(self): parameter_numbers=dsa.DSAParameterNumbers( p=self._backend._bn_to_int(p[0]), q=self._backend._bn_to_int(q[0]), - g=self._backend._bn_to_int(g[0]) + g=self._backend._bn_to_int(g[0]), ), - y=self._backend._bn_to_int(pub_key[0]) + y=self._backend._bn_to_int(pub_key[0]), ), - x=self._backend._bn_to_int(priv_key[0]) + x=self._backend._bn_to_int(priv_key[0]), ) def public_key(self): @@ -185,7 +188,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encryption_algorithm, self, self._evp_pkey, - self._dsa_cdata + self._dsa_cdata, ) def sign(self, data, algorithm): @@ -236,9 +239,9 @@ def public_numbers(self): parameter_numbers=dsa.DSAParameterNumbers( p=self._backend._bn_to_int(p[0]), q=self._backend._bn_to_int(q[0]), - g=self._backend._bn_to_int(g[0]) + g=self._backend._bn_to_int(g[0]), ), - y=self._backend._bn_to_int(pub_key[0]) + y=self._backend._bn_to_int(pub_key[0]), ) def parameters(self): @@ -250,11 +253,7 @@ def parameters(self): def public_bytes(self, encoding, format): return self._backend._public_key_bytes( - encoding, - format, - self, - self._evp_pkey, - None + encoding, format, self, self._evp_pkey, None ) def verify(self, signature, data, algorithm): diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index e70a3410548a..3ecec0da2009 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -6,15 +6,20 @@ from cryptography import utils from cryptography.exceptions import ( - InvalidSignature, UnsupportedAlgorithm, _Reasons + InvalidSignature, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.openssl.utils import ( - _calculate_digest_and_algorithm, _check_not_prehashed, - _warn_sign_verify_deprecated + _calculate_digest_and_algorithm, + _check_not_prehashed, + _warn_sign_verify_deprecated, ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ( - AsymmetricSignatureContext, AsymmetricVerificationContext, ec + AsymmetricSignatureContext, + AsymmetricVerificationContext, + ec, ) @@ -22,7 +27,8 @@ def _check_signature_algorithm(signature_algorithm): if not isinstance(signature_algorithm, ec.ECDSA): raise UnsupportedAlgorithm( "Unsupported elliptic curve signature algorithm.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM) + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) def _ec_key_curve_sn(backend, ec_key): @@ -34,26 +40,24 @@ def _ec_key_curve_sn(backend, ec_key): # an error for now. if nid == backend._lib.NID_undef: raise NotImplementedError( - "ECDSA keys with unnamed curves are unsupported " - "at this time" + "ECDSA keys with unnamed curves are unsupported " "at this time" ) # This is like the above check, but it also catches the case where you # explicitly encoded a curve with the same parameters as a named curve. # Don't do that. if ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER and - backend._lib.EC_GROUP_get_asn1_flag(group) == 0 + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER + and backend._lib.EC_GROUP_get_asn1_flag(group) == 0 ): raise NotImplementedError( - "ECDSA keys with unnamed curves are unsupported " - "at this time" + "ECDSA keys with unnamed curves are unsupported " "at this time" ) curve_name = backend._lib.OBJ_nid2sn(nid) backend.openssl_assert(curve_name != backend._ffi.NULL) - sn = backend._ffi.string(curve_name).decode('ascii') + sn = backend._ffi.string(curve_name).decode("ascii") return sn @@ -75,7 +79,7 @@ def _sn_to_elliptic_curve(backend, sn): except KeyError: raise UnsupportedAlgorithm( "{} is not a supported elliptic curve".format(sn), - _Reasons.UNSUPPORTED_ELLIPTIC_CURVE + _Reasons.UNSUPPORTED_ELLIPTIC_CURVE, ) @@ -89,7 +93,7 @@ def _ecdsa_sig_sign(backend, private_key, data): 0, data, len(data), sigbuf, siglen_ptr, private_key._ec_key ) backend.openssl_assert(res == 1) - return backend._ffi.buffer(sigbuf)[:siglen_ptr[0]] + return backend._ffi.buffer(sigbuf)[: siglen_ptr[0]] def _ecdsa_sig_verify(backend, public_key, signature, data): @@ -168,7 +172,7 @@ def exchange(self, algorithm, peer_public_key): ): raise UnsupportedAlgorithm( "This backend does not support the ECDH algorithm.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) if peer_public_key.curve.name != self.curve.name: @@ -217,7 +221,7 @@ def private_numbers(self): private_value = self._backend._bn_to_int(bn) return ec.EllipticCurvePrivateNumbers( private_value=private_value, - public_numbers=self.public_key().public_numbers() + public_numbers=self.public_key().public_numbers(), ) def private_bytes(self, encoding, format, encryption_algorithm): @@ -227,7 +231,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encryption_algorithm, self, self._evp_pkey, - self._ec_key + self._ec_key, ) def sign(self, data, signature_algorithm): @@ -266,8 +270,8 @@ def verifier(self, signature, signature_algorithm): ) def public_numbers(self): - get_func, group = ( - self._backend._ec_key_determine_group_get_func(self._ec_key) + get_func, group = self._backend._ec_key_determine_group_get_func( + self._ec_key ) point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) self._backend.openssl_assert(point != self._backend._ffi.NULL) @@ -282,11 +286,7 @@ def public_numbers(self): x = self._backend._bn_to_int(bn_x) y = self._backend._bn_to_int(bn_y) - return ec.EllipticCurvePublicNumbers( - x=x, - y=y, - curve=self._curve - ) + return ec.EllipticCurvePublicNumbers(x=x, y=y, curve=self._curve) def _encode_point(self, format): if format is serialization.PublicFormat.CompressedPoint: @@ -315,16 +315,13 @@ def _encode_point(self, format): def public_bytes(self, encoding, format): if ( - encoding is serialization.Encoding.X962 or - format is serialization.PublicFormat.CompressedPoint or - format is serialization.PublicFormat.UncompressedPoint + encoding is serialization.Encoding.X962 + or format is serialization.PublicFormat.CompressedPoint + or format is serialization.PublicFormat.UncompressedPoint ): - if ( - encoding is not serialization.Encoding.X962 or - format not in ( - serialization.PublicFormat.CompressedPoint, - serialization.PublicFormat.UncompressedPoint - ) + if encoding is not serialization.Encoding.X962 or format not in ( + serialization.PublicFormat.CompressedPoint, + serialization.PublicFormat.UncompressedPoint, ): raise ValueError( "X962 encoding must be used with CompressedPoint or " @@ -334,11 +331,7 @@ def public_bytes(self, encoding, format): return self._encode_point(format) else: return self._backend._public_key_bytes( - encoding, - format, - self, - self._evp_pkey, - None + encoding, format, self, self._evp_pkey, None ) def verify(self, signature, data, signature_algorithm): diff --git a/src/cryptography/hazmat/backends/openssl/ed25519.py b/src/cryptography/hazmat/backends/openssl/ed25519.py index 1632ec371eaa..75653373b3cf 100644 --- a/src/cryptography/hazmat/backends/openssl/ed25519.py +++ b/src/cryptography/hazmat/backends/openssl/ed25519.py @@ -7,7 +7,10 @@ from cryptography import exceptions, utils from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.ed25519 import ( - Ed25519PrivateKey, Ed25519PublicKey, _ED25519_KEY_SIZE, _ED25519_SIG_SIZE + Ed25519PrivateKey, + Ed25519PublicKey, + _ED25519_KEY_SIZE, + _ED25519_SIG_SIZE, ) @@ -19,12 +22,12 @@ def __init__(self, backend, evp_pkey): def public_bytes(self, encoding, format): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - encoding is not serialization.Encoding.Raw or - format is not serialization.PublicFormat.Raw + encoding is not serialization.Encoding.Raw + or format is not serialization.PublicFormat.Raw ): raise ValueError( "When using Raw both encoding and format must be Raw" @@ -53,8 +56,11 @@ def verify(self, signature, data): evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free ) res = self._backend._lib.EVP_DigestVerifyInit( - evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, - self._backend._ffi.NULL, self._evp_pkey + evp_md_ctx, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._evp_pkey, ) self._backend.openssl_assert(res == 1) res = self._backend._lib.EVP_DigestVerify( @@ -89,8 +95,11 @@ def sign(self, data): evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free ) res = self._backend._lib.EVP_DigestSignInit( - evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, - self._backend._ffi.NULL, self._evp_pkey + evp_md_ctx, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._evp_pkey, ) self._backend.openssl_assert(res == 1) buf = self._backend._ffi.new("unsigned char[]", _ED25519_SIG_SIZE) @@ -104,13 +113,15 @@ def sign(self, data): def private_bytes(self, encoding, format, encryption_algorithm): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - format is not serialization.PrivateFormat.Raw or - encoding is not serialization.Encoding.Raw or not - isinstance(encryption_algorithm, serialization.NoEncryption) + format is not serialization.PrivateFormat.Raw + or encoding is not serialization.Encoding.Raw + or not isinstance( + encryption_algorithm, serialization.NoEncryption + ) ): raise ValueError( "When using Raw both encoding and format must be Raw " diff --git a/src/cryptography/hazmat/backends/openssl/ed448.py b/src/cryptography/hazmat/backends/openssl/ed448.py index 4845a1f2d2b8..4a8dab1a8115 100644 --- a/src/cryptography/hazmat/backends/openssl/ed448.py +++ b/src/cryptography/hazmat/backends/openssl/ed448.py @@ -7,7 +7,8 @@ from cryptography import exceptions, utils from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.ed448 import ( - Ed448PrivateKey, Ed448PublicKey + Ed448PrivateKey, + Ed448PublicKey, ) _ED448_KEY_SIZE = 57 @@ -22,12 +23,12 @@ def __init__(self, backend, evp_pkey): def public_bytes(self, encoding, format): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - encoding is not serialization.Encoding.Raw or - format is not serialization.PublicFormat.Raw + encoding is not serialization.Encoding.Raw + or format is not serialization.PublicFormat.Raw ): raise ValueError( "When using Raw both encoding and format must be Raw" @@ -56,8 +57,11 @@ def verify(self, signature, data): evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free ) res = self._backend._lib.EVP_DigestVerifyInit( - evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, - self._backend._ffi.NULL, self._evp_pkey + evp_md_ctx, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._evp_pkey, ) self._backend.openssl_assert(res == 1) res = self._backend._lib.EVP_DigestVerify( @@ -92,8 +96,11 @@ def sign(self, data): evp_md_ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free ) res = self._backend._lib.EVP_DigestSignInit( - evp_md_ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, - self._backend._ffi.NULL, self._evp_pkey + evp_md_ctx, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._evp_pkey, ) self._backend.openssl_assert(res == 1) buf = self._backend._ffi.new("unsigned char[]", _ED448_SIG_SIZE) @@ -107,13 +114,15 @@ def sign(self, data): def private_bytes(self, encoding, format, encryption_algorithm): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - format is not serialization.PrivateFormat.Raw or - encoding is not serialization.Encoding.Raw or not - isinstance(encryption_algorithm, serialization.NoEncryption) + format is not serialization.PrivateFormat.Raw + or encoding is not serialization.Encoding.Raw + or not isinstance( + encryption_algorithm, serialization.NoEncryption + ) ): raise ValueError( "When using Raw both encoding and format must be Raw " diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index e12431cfc626..154f6764cad8 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -11,12 +11,15 @@ from cryptography import utils, x509 from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CRL_ENTRY_REASON_ENUM_TO_CODE, _DISTPOINT_TYPE_FULLNAME, - _DISTPOINT_TYPE_RELATIVENAME + _CRL_ENTRY_REASON_ENUM_TO_CODE, + _DISTPOINT_TYPE_FULLNAME, + _DISTPOINT_TYPE_RELATIVENAME, ) from cryptography.x509.name import _ASN1Type from cryptography.x509.oid import ( - CRLEntryExtensionOID, ExtensionOID, OCSPExtensionOID, + CRLEntryExtensionOID, + ExtensionOID, + OCSPExtensionOID, ) @@ -94,7 +97,8 @@ def _encode_name(backend, name): name_entry, backend._lib.X509_NAME_ENTRY_free ) res = backend._lib.X509_NAME_add_entry( - subject, name_entry, -1, set_flag) + subject, name_entry, -1, set_flag + ) backend.openssl_assert(res == 1) set_flag = -1 return subject @@ -120,11 +124,11 @@ def _encode_sk_name_entry(backend, attributes): def _encode_name_entry(backend, attribute): if attribute._type is _ASN1Type.BMPString: - value = attribute.value.encode('utf_16_be') + value = attribute.value.encode("utf_16_be") elif attribute._type is _ASN1Type.UniversalString: - value = attribute.value.encode('utf_32_be') + value = attribute.value.encode("utf_32_be") else: - value = attribute.value.encode('utf8') + value = attribute.value.encode("utf8") obj = _txt2obj_gc(backend, attribute.oid.dotted_string) @@ -174,9 +178,8 @@ def _encode_crl_reason(backend, crl_reason): def _encode_invalidity_date(backend, invalidity_date): time = backend._lib.ASN1_GENERALIZEDTIME_set( - backend._ffi.NULL, calendar.timegm( - invalidity_date.invalidity_date.timetuple() - ) + backend._ffi.NULL, + calendar.timegm(invalidity_date.invalidity_date.timetuple()), ) backend.openssl_assert(time != backend._ffi.NULL) time = backend._ffi.gc(time, backend._lib.ASN1_GENERALIZEDTIME_free) @@ -208,8 +211,7 @@ def _encode_certificate_policies(backend, certificate_policies): backend, x509.OID_CPS_QUALIFIER.dotted_string ) pqi.d.cpsuri = _encode_asn1_str( - backend, - qualifier.encode("ascii"), + backend, qualifier.encode("ascii"), ) else: assert isinstance(qualifier, x509.UserNotice) @@ -257,7 +259,7 @@ def _txt2obj(backend, name): Converts a Python string with an ASN.1 object ID in dotted form to a ASN1_OBJECT. """ - name = name.encode('ascii') + name = name.encode("ascii") obj = backend._lib.OBJ_txt2obj(name, 1) backend.openssl_assert(obj != backend._ffi.NULL) return obj @@ -311,10 +313,7 @@ def _encode_authority_key_identifier(backend, authority_keyid): backend.openssl_assert(akid != backend._ffi.NULL) akid = backend._ffi.gc(akid, backend._lib.AUTHORITY_KEYID_free) if authority_keyid.key_identifier is not None: - akid.keyid = _encode_asn1_str( - backend, - authority_keyid.key_identifier, - ) + akid.keyid = _encode_asn1_str(backend, authority_keyid.key_identifier,) if authority_keyid.authority_cert_issuer is not None: akid.issuer = _encode_general_names( @@ -349,10 +348,11 @@ def _encode_information_access(backend, info_access): aia = backend._ffi.gc( aia, lambda x: backend._lib.sk_ACCESS_DESCRIPTION_pop_free( - x, backend._ffi.addressof( + x, + backend._ffi.addressof( backend._lib._original_lib, "ACCESS_DESCRIPTION_free" - ) - ) + ), + ), ) for access_description in info_access: ad = backend._lib.ACCESS_DESCRIPTION_new() @@ -416,7 +416,7 @@ def _encode_general_name_preallocated(backend, name, gn): backend.openssl_assert(gn != backend._ffi.NULL) gn.type = backend._lib.GEN_RID obj = backend._lib.OBJ_txt2obj( - name.value.dotted_string.encode('ascii'), 1 + name.value.dotted_string.encode("ascii"), 1 ) backend.openssl_assert(obj != backend._ffi.NULL) gn.d.registeredID = obj @@ -428,14 +428,12 @@ def _encode_general_name_preallocated(backend, name, gn): elif isinstance(name, x509.IPAddress): backend.openssl_assert(gn != backend._ffi.NULL) if isinstance(name.value, ipaddress.IPv4Network): - packed = ( - name.value.network_address.packed + - utils.int_to_bytes(((1 << 32) - name.value.num_addresses), 4) + packed = name.value.network_address.packed + utils.int_to_bytes( + ((1 << 32) - name.value.num_addresses), 4 ) elif isinstance(name.value, ipaddress.IPv6Network): - packed = ( - name.value.network_address.packed + - utils.int_to_bytes((1 << 128) - name.value.num_addresses, 16) + packed = name.value.network_address.packed + utils.int_to_bytes( + (1 << 128) - name.value.num_addresses, 16 ) else: packed = name.value.packed @@ -448,7 +446,7 @@ def _encode_general_name_preallocated(backend, name, gn): backend.openssl_assert(other_name != backend._ffi.NULL) type_id = backend._lib.OBJ_txt2obj( - name.type_id.dotted_string.encode('ascii'), 1 + name.type_id.dotted_string.encode("ascii"), 1 ) backend.openssl_assert(type_id != backend._ffi.NULL) data = backend._ffi.new("unsigned char[]", name.value) @@ -481,9 +479,7 @@ def _encode_general_name_preallocated(backend, name, gn): gn.type = backend._lib.GEN_URI gn.d.uniformResourceIdentifier = asn1_str else: - raise ValueError( - "{} is an unknown GeneralName type".format(name) - ) + raise ValueError("{} is an unknown GeneralName type".format(name)) def _encode_extended_key_usage(backend, extended_key_usage): diff --git a/src/cryptography/hazmat/backends/openssl/hashes.py b/src/cryptography/hazmat/backends/openssl/hashes.py index 7f9d840b3809..44033993e166 100644 --- a/src/cryptography/hazmat/backends/openssl/hashes.py +++ b/src/cryptography/hazmat/backends/openssl/hashes.py @@ -26,11 +26,13 @@ def __init__(self, backend, algorithm, ctx=None): if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( "{} is not a supported hash on this backend.".format( - algorithm.name), - _Reasons.UNSUPPORTED_HASH + algorithm.name + ), + _Reasons.UNSUPPORTED_HASH, ) - res = self._backend._lib.EVP_DigestInit_ex(ctx, evp_md, - self._backend._ffi.NULL) + res = self._backend._lib.EVP_DigestInit_ex( + ctx, evp_md, self._backend._ffi.NULL + ) self._backend.openssl_assert(res != 0) self._ctx = ctx @@ -58,21 +60,23 @@ def finalize(self): # extendable output functions use a different finalize return self._finalize_xof() else: - buf = self._backend._ffi.new("unsigned char[]", - self._backend._lib.EVP_MAX_MD_SIZE) + buf = self._backend._ffi.new( + "unsigned char[]", self._backend._lib.EVP_MAX_MD_SIZE + ) outlen = self._backend._ffi.new("unsigned int *") res = self._backend._lib.EVP_DigestFinal_ex(self._ctx, buf, outlen) self._backend.openssl_assert(res != 0) self._backend.openssl_assert( outlen[0] == self.algorithm.digest_size ) - return self._backend._ffi.buffer(buf)[:outlen[0]] + return self._backend._ffi.buffer(buf)[: outlen[0]] def _finalize_xof(self): - buf = self._backend._ffi.new("unsigned char[]", - self.algorithm.digest_size) + buf = self._backend._ffi.new( + "unsigned char[]", self.algorithm.digest_size + ) res = self._backend._lib.EVP_DigestFinalXOF( self._ctx, buf, self.algorithm.digest_size ) self._backend.openssl_assert(res != 0) - return self._backend._ffi.buffer(buf)[:self.algorithm.digest_size] + return self._backend._ffi.buffer(buf)[: self.algorithm.digest_size] diff --git a/src/cryptography/hazmat/backends/openssl/hmac.py b/src/cryptography/hazmat/backends/openssl/hmac.py index 2e09cbc8a98f..5024223b219b 100644 --- a/src/cryptography/hazmat/backends/openssl/hmac.py +++ b/src/cryptography/hazmat/backends/openssl/hmac.py @@ -7,7 +7,9 @@ from cryptography import utils from cryptography.exceptions import ( - InvalidSignature, UnsupportedAlgorithm, _Reasons + InvalidSignature, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.primitives import constant_time, hashes @@ -28,8 +30,9 @@ def __init__(self, backend, key, algorithm, ctx=None): if evp_md == self._backend._ffi.NULL: raise UnsupportedAlgorithm( "{} is not a supported hash on this backend".format( - algorithm.name), - _Reasons.UNSUPPORTED_HASH + algorithm.name + ), + _Reasons.UNSUPPORTED_HASH, ) key_ptr = self._backend._ffi.from_buffer(key) res = self._backend._lib.HMAC_Init_ex( @@ -60,13 +63,14 @@ def update(self, data): self._backend.openssl_assert(res != 0) def finalize(self): - buf = self._backend._ffi.new("unsigned char[]", - self._backend._lib.EVP_MAX_MD_SIZE) + buf = self._backend._ffi.new( + "unsigned char[]", self._backend._lib.EVP_MAX_MD_SIZE + ) outlen = self._backend._ffi.new("unsigned int *") res = self._backend._lib.HMAC_Final(self._ctx, buf, outlen) self._backend.openssl_assert(res != 0) self._backend.openssl_assert(outlen[0] == self.algorithm.digest_size) - return self._backend._ffi.buffer(buf)[:outlen[0]] + return self._backend._ffi.buffer(buf)[: outlen[0]] def verify(self, signature): digest = self.finalize() diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 3b5528929cb5..1de75a26ca64 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -9,18 +9,27 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CRL_ENTRY_REASON_CODE_TO_ENUM, _OCSP_BASICRESP_EXT_PARSER, - _OCSP_REQ_EXT_PARSER, _OCSP_SINGLERESP_EXT_PARSER, + _CRL_ENTRY_REASON_CODE_TO_ENUM, + _OCSP_BASICRESP_EXT_PARSER, + _OCSP_REQ_EXT_PARSER, + _OCSP_SINGLERESP_EXT_PARSER, _OCSP_SINGLERESP_EXT_PARSER_NO_SCT, _asn1_integer_to_int, - _asn1_string_to_bytes, _decode_x509_name, _obj2txt, + _asn1_string_to_bytes, + _decode_x509_name, + _obj2txt, _parse_asn1_generalized_time, ) from cryptography.hazmat.backends.openssl.x509 import _Certificate from cryptography.hazmat.primitives import serialization from cryptography.x509.ocsp import ( - OCSPCertStatus, OCSPRequest, OCSPResponse, OCSPResponseStatus, - _CERT_STATUS_TO_ENUM, _OIDS_TO_HASH, _RESPONSE_STATUS_TO_ENUM, + OCSPCertStatus, + OCSPRequest, + OCSPResponse, + OCSPResponseStatus, + _CERT_STATUS_TO_ENUM, + _OIDS_TO_HASH, + _RESPONSE_STATUS_TO_ENUM, ) @@ -41,8 +50,11 @@ def wrapper(self, *args): def _issuer_key_hash(backend, cert_id): key_hash = backend._ffi.new("ASN1_OCTET_STRING **") res = backend._lib.OCSP_id_get0_info( - backend._ffi.NULL, backend._ffi.NULL, - key_hash, backend._ffi.NULL, cert_id + backend._ffi.NULL, + backend._ffi.NULL, + key_hash, + backend._ffi.NULL, + cert_id, ) backend.openssl_assert(res == 1) backend.openssl_assert(key_hash[0] != backend._ffi.NULL) @@ -52,8 +64,11 @@ def _issuer_key_hash(backend, cert_id): def _issuer_name_hash(backend, cert_id): name_hash = backend._ffi.new("ASN1_OCTET_STRING **") res = backend._lib.OCSP_id_get0_info( - name_hash, backend._ffi.NULL, - backend._ffi.NULL, backend._ffi.NULL, cert_id + name_hash, + backend._ffi.NULL, + backend._ffi.NULL, + backend._ffi.NULL, + cert_id, ) backend.openssl_assert(res == 1) backend.openssl_assert(name_hash[0] != backend._ffi.NULL) @@ -63,8 +78,7 @@ def _issuer_name_hash(backend, cert_id): def _serial_number(backend, cert_id): num = backend._ffi.new("ASN1_INTEGER **") res = backend._lib.OCSP_id_get0_info( - backend._ffi.NULL, backend._ffi.NULL, - backend._ffi.NULL, num, cert_id + backend._ffi.NULL, backend._ffi.NULL, backend._ffi.NULL, num, cert_id ) backend.openssl_assert(res == 1) backend.openssl_assert(num[0] != backend._ffi.NULL) @@ -74,8 +88,11 @@ def _serial_number(backend, cert_id): def _hash_algorithm(backend, cert_id): asn1obj = backend._ffi.new("ASN1_OBJECT **") res = backend._lib.OCSP_id_get0_info( - backend._ffi.NULL, asn1obj, - backend._ffi.NULL, backend._ffi.NULL, cert_id + backend._ffi.NULL, + asn1obj, + backend._ffi.NULL, + backend._ffi.NULL, + cert_id, ) backend.openssl_assert(res == 1) backend.openssl_assert(asn1obj[0] != backend._ffi.NULL) @@ -339,9 +356,7 @@ def single_extensions(self): def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: - raise ValueError( - "The only allowed encoding value is Encoding.DER" - ) + raise ValueError("The only allowed encoding value is Encoding.DER") bio = self._backend._create_mem_bio_gc() res = self._backend._lib.i2d_OCSP_RESPONSE_bio( @@ -356,7 +371,7 @@ class _OCSPRequest(object): def __init__(self, backend, ocsp_request): if backend._lib.OCSP_request_onereq_count(ocsp_request) > 1: raise NotImplementedError( - 'OCSP request contains more than one request' + "OCSP request contains more than one request" ) self._backend = backend self._ocsp_request = ocsp_request @@ -389,9 +404,7 @@ def extensions(self): def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: - raise ValueError( - "The only allowed encoding value is Encoding.DER" - ) + raise ValueError("The only allowed encoding value is Encoding.DER") bio = self._backend._create_mem_bio_gc() res = self._backend._lib.i2d_OCSP_REQUEST_bio(bio, self._ocsp_request) diff --git a/src/cryptography/hazmat/backends/openssl/poly1305.py b/src/cryptography/hazmat/backends/openssl/poly1305.py index 25448dd02597..17493ca60ce8 100644 --- a/src/cryptography/hazmat/backends/openssl/poly1305.py +++ b/src/cryptography/hazmat/backends/openssl/poly1305.py @@ -22,7 +22,9 @@ def __init__(self, backend, key): # need to retain it ourselves evp_pkey = self._backend._lib.EVP_PKEY_new_raw_private_key( self._backend._lib.NID_poly1305, - self._backend._ffi.NULL, key_ptr, len(key) + self._backend._ffi.NULL, + key_ptr, + len(key), ) self._backend.openssl_assert(evp_pkey != self._backend._ffi.NULL) self._evp_pkey = self._backend._ffi.gc( @@ -34,8 +36,11 @@ def __init__(self, backend, key): ctx, self._backend._lib.Cryptography_EVP_MD_CTX_free ) res = self._backend._lib.EVP_DigestSignInit( - self._ctx, self._backend._ffi.NULL, self._backend._ffi.NULL, - self._backend._ffi.NULL, self._evp_pkey + self._ctx, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._evp_pkey, ) self._backend.openssl_assert(res == 1) @@ -52,7 +57,7 @@ def finalize(self): res = self._backend._lib.EVP_DigestSignFinal(self._ctx, buf, outlen) self._backend.openssl_assert(res != 0) self._backend.openssl_assert(outlen[0] == _POLY1305_TAG_SIZE) - return self._backend._ffi.buffer(buf)[:outlen[0]] + return self._backend._ffi.buffer(buf)[: outlen[0]] def verify(self, tag): mac = self.finalize() diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index a9e07b52fb97..5c1fda51749d 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -6,21 +6,32 @@ from cryptography import utils from cryptography.exceptions import ( - InvalidSignature, UnsupportedAlgorithm, _Reasons + InvalidSignature, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.openssl.utils import ( - _calculate_digest_and_algorithm, _check_not_prehashed, - _warn_sign_verify_deprecated + _calculate_digest_and_algorithm, + _check_not_prehashed, + _warn_sign_verify_deprecated, ) from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ( - AsymmetricSignatureContext, AsymmetricVerificationContext, rsa + AsymmetricSignatureContext, + AsymmetricVerificationContext, + rsa, ) from cryptography.hazmat.primitives.asymmetric.padding import ( - AsymmetricPadding, MGF1, OAEP, PKCS1v15, PSS, calculate_max_pss_salt_length + AsymmetricPadding, + MGF1, + OAEP, + PKCS1v15, + PSS, + calculate_max_pss_salt_length, ) from cryptography.hazmat.primitives.asymmetric.rsa import ( - RSAPrivateKeyWithSerialization, RSAPublicKeyWithSerialization + RSAPrivateKeyWithSerialization, + RSAPublicKeyWithSerialization, ) @@ -45,22 +56,20 @@ def _enc_dec_rsa(backend, key, data, padding): if not isinstance(padding._mgf, MGF1): raise UnsupportedAlgorithm( "Only MGF1 is supported by this backend.", - _Reasons.UNSUPPORTED_MGF + _Reasons.UNSUPPORTED_MGF, ) if not backend.rsa_padding_supported(padding): raise UnsupportedAlgorithm( "This combination of padding and hash algorithm is not " "supported by this backend.", - _Reasons.UNSUPPORTED_PADDING + _Reasons.UNSUPPORTED_PADDING, ) else: raise UnsupportedAlgorithm( - "{} is not supported by this backend.".format( - padding.name - ), - _Reasons.UNSUPPORTED_PADDING + "{} is not supported by this backend.".format(padding.name), + _Reasons.UNSUPPORTED_PADDING, ) return _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding) @@ -74,24 +83,19 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): init = backend._lib.EVP_PKEY_decrypt_init crypt = backend._lib.EVP_PKEY_decrypt - pkey_ctx = backend._lib.EVP_PKEY_CTX_new( - key._evp_pkey, backend._ffi.NULL - ) + pkey_ctx = backend._lib.EVP_PKEY_CTX_new(key._evp_pkey, backend._ffi.NULL) backend.openssl_assert(pkey_ctx != backend._ffi.NULL) pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) res = init(pkey_ctx) backend.openssl_assert(res == 1) - res = backend._lib.EVP_PKEY_CTX_set_rsa_padding( - pkey_ctx, padding_enum) + res = backend._lib.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding_enum) backend.openssl_assert(res > 0) buf_size = backend._lib.EVP_PKEY_size(key._evp_pkey) backend.openssl_assert(buf_size > 0) - if ( - isinstance(padding, OAEP) and - backend._lib.Cryptography_HAS_RSA_OAEP_MD - ): + if isinstance(padding, OAEP) and backend._lib.Cryptography_HAS_RSA_OAEP_MD: mgf1_md = backend._evp_md_non_null_from_algorithm( - padding._mgf._algorithm) + padding._mgf._algorithm + ) res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) backend.openssl_assert(res > 0) oaep_md = backend._evp_md_non_null_from_algorithm(padding._algorithm) @@ -99,9 +103,9 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): backend.openssl_assert(res > 0) if ( - isinstance(padding, OAEP) and - padding._label is not None and - len(padding._label) > 0 + isinstance(padding, OAEP) + and padding._label is not None + and len(padding._label) > 0 ): # set0_rsa_oaep_label takes ownership of the char * so we need to # copy it into some new memory @@ -119,7 +123,7 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): if res <= 0: _handle_rsa_enc_dec_error(backend, key) - return backend._ffi.buffer(buf)[:outlen[0]] + return backend._ffi.buffer(buf)[: outlen[0]] def _handle_rsa_enc_dec_error(backend, key): @@ -165,20 +169,22 @@ def _rsa_sig_determine_padding(backend, key, padding, algorithm): if not isinstance(padding._mgf, MGF1): raise UnsupportedAlgorithm( "Only MGF1 is supported by this backend.", - _Reasons.UNSUPPORTED_MGF + _Reasons.UNSUPPORTED_MGF, ) # Size of key in bytes - 2 is the maximum # PSS signature length (salt length is checked later) if pkey_size - algorithm.digest_size - 2 < 0: - raise ValueError("Digest too large for key size. Use a larger " - "key or different digest.") + raise ValueError( + "Digest too large for key size. Use a larger " + "key or different digest." + ) padding_enum = backend._lib.RSA_PKCS1_PSS_PADDING else: raise UnsupportedAlgorithm( "{} is not supported by this backend.".format(padding.name), - _Reasons.UNSUPPORTED_PADDING + _Reasons.UNSUPPORTED_PADDING, ) return padding_enum @@ -199,7 +205,7 @@ def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): "{} is not supported by this backend for RSA signing.".format( algorithm.name ), - _Reasons.UNSUPPORTED_HASH + _Reasons.UNSUPPORTED_HASH, ) res = backend._lib.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding_enum) backend.openssl_assert(res > 0) @@ -210,7 +216,8 @@ def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): backend.openssl_assert(res > 0) mgf1_md = backend._evp_md_non_null_from_algorithm( - padding._mgf._algorithm) + padding._mgf._algorithm + ) res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) backend.openssl_assert(res > 0) @@ -219,34 +226,32 @@ def _rsa_sig_setup(backend, padding, algorithm, key, data, init_func): def _rsa_sig_sign(backend, padding, algorithm, private_key, data): pkey_ctx = _rsa_sig_setup( - backend, padding, algorithm, private_key, data, - backend._lib.EVP_PKEY_sign_init + backend, + padding, + algorithm, + private_key, + data, + backend._lib.EVP_PKEY_sign_init, ) buflen = backend._ffi.new("size_t *") res = backend._lib.EVP_PKEY_sign( - pkey_ctx, - backend._ffi.NULL, - buflen, - data, - len(data) + pkey_ctx, backend._ffi.NULL, buflen, data, len(data) ) backend.openssl_assert(res == 1) buf = backend._ffi.new("unsigned char[]", buflen[0]) - res = backend._lib.EVP_PKEY_sign( - pkey_ctx, buf, buflen, data, len(data)) + res = backend._lib.EVP_PKEY_sign(pkey_ctx, buf, buflen, data, len(data)) if res != 1: errors = backend._consume_errors() backend.openssl_assert(errors[0].lib == backend._lib.ERR_LIB_RSA) - if ( - errors[0].reason == - backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE - ): - reason = ("Salt length too long for key size. Try using " - "MAX_LENGTH instead.") + if errors[0].reason == backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE: + reason = ( + "Salt length too long for key size. Try using " + "MAX_LENGTH instead." + ) else: backend.openssl_assert( - errors[0].reason == - backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + errors[0].reason + == backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY ) reason = "Digest too large for key size. Use a larger key." raise ValueError(reason) @@ -256,8 +261,12 @@ def _rsa_sig_sign(backend, padding, algorithm, private_key, data): def _rsa_sig_verify(backend, padding, algorithm, public_key, signature, data): pkey_ctx = _rsa_sig_setup( - backend, padding, algorithm, public_key, data, - backend._lib.EVP_PKEY_verify_init + backend, + padding, + algorithm, + public_key, + data, + backend._lib.EVP_PKEY_verify_init, ) res = backend._lib.EVP_PKEY_verify( pkey_ctx, signature, len(signature), data, len(data) @@ -294,7 +303,7 @@ def finalize(self): self._padding, self._algorithm, self._private_key, - self._hash_ctx.finalize() + self._hash_ctx.finalize(), ) @@ -324,7 +333,7 @@ def verify(self): self._algorithm, self._public_key, self._signature, - self._hash_ctx.finalize() + self._hash_ctx.finalize(), ) @@ -337,8 +346,10 @@ def __init__(self, backend, rsa_cdata, evp_pkey): n = self._backend._ffi.new("BIGNUM **") self._backend._lib.RSA_get0_key( - self._rsa_cdata, n, self._backend._ffi.NULL, - self._backend._ffi.NULL + self._rsa_cdata, + n, + self._backend._ffi.NULL, + self._backend._ffi.NULL, ) self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) self._key_size = self._backend._lib.BN_num_bits(n[0]) @@ -398,7 +409,7 @@ def private_numbers(self): public_numbers=rsa.RSAPublicNumbers( e=self._backend._bn_to_int(e[0]), n=self._backend._bn_to_int(n[0]), - ) + ), ) def private_bytes(self, encoding, format, encryption_algorithm): @@ -408,7 +419,7 @@ def private_bytes(self, encoding, format, encryption_algorithm): encryption_algorithm, self, self._evp_pkey, - self._rsa_cdata + self._rsa_cdata, ) def sign(self, data, padding, algorithm): @@ -427,8 +438,10 @@ def __init__(self, backend, rsa_cdata, evp_pkey): n = self._backend._ffi.new("BIGNUM **") self._backend._lib.RSA_get0_key( - self._rsa_cdata, n, self._backend._ffi.NULL, - self._backend._ffi.NULL + self._rsa_cdata, + n, + self._backend._ffi.NULL, + self._backend._ffi.NULL, ) self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) self._key_size = self._backend._lib.BN_num_bits(n[0]) @@ -456,17 +469,12 @@ def public_numbers(self): self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) self._backend.openssl_assert(e[0] != self._backend._ffi.NULL) return rsa.RSAPublicNumbers( - e=self._backend._bn_to_int(e[0]), - n=self._backend._bn_to_int(n[0]), + e=self._backend._bn_to_int(e[0]), n=self._backend._bn_to_int(n[0]), ) def public_bytes(self, encoding, format): return self._backend._public_key_bytes( - encoding, - format, - self, - self._evp_pkey, - self._rsa_cdata + encoding, format, self, self._evp_pkey, self._rsa_cdata ) def verify(self, signature, data, padding, algorithm): diff --git a/src/cryptography/hazmat/backends/openssl/utils.py b/src/cryptography/hazmat/backends/openssl/utils.py index ee472c0e665c..ec0b947a44c6 100644 --- a/src/cryptography/hazmat/backends/openssl/utils.py +++ b/src/cryptography/hazmat/backends/openssl/utils.py @@ -17,9 +17,7 @@ def _evp_pkey_derive(backend, evp_pkey, peer_public_key): ctx = backend._ffi.gc(ctx, backend._lib.EVP_PKEY_CTX_free) res = backend._lib.EVP_PKEY_derive_init(ctx) backend.openssl_assert(res == 1) - res = backend._lib.EVP_PKEY_derive_set_peer( - ctx, peer_public_key._evp_pkey - ) + res = backend._lib.EVP_PKEY_derive_set_peer(ctx, peer_public_key._evp_pkey) backend.openssl_assert(res == 1) keylen = backend._ffi.new("size_t *") res = backend._lib.EVP_PKEY_derive(ctx, backend._ffi.NULL, keylen) @@ -28,9 +26,7 @@ def _evp_pkey_derive(backend, evp_pkey, peer_public_key): buf = backend._ffi.new("unsigned char[]", keylen[0]) res = backend._lib.EVP_PKEY_derive(ctx, buf, keylen) if res != 1: - raise ValueError( - "Null shared key derived from public/private pair." - ) + raise ValueError("Null shared key derived from public/private pair.") return backend._ffi.buffer(buf, keylen[0])[:] @@ -65,5 +61,5 @@ def _warn_sign_verify_deprecated(): "signer and verifier have been deprecated. Please use sign " "and verify instead.", utils.PersistentlyDeprecated2017, - stacklevel=3 + stacklevel=3, ) diff --git a/src/cryptography/hazmat/backends/openssl/x25519.py b/src/cryptography/hazmat/backends/openssl/x25519.py index 665acf2fffc8..4971c5481402 100644 --- a/src/cryptography/hazmat/backends/openssl/x25519.py +++ b/src/cryptography/hazmat/backends/openssl/x25519.py @@ -8,7 +8,8 @@ from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x25519 import ( - X25519PrivateKey, X25519PublicKey + X25519PrivateKey, + X25519PublicKey, ) @@ -23,12 +24,12 @@ def __init__(self, backend, evp_pkey): def public_bytes(self, encoding, format): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - encoding is not serialization.Encoding.Raw or - format is not serialization.PublicFormat.Raw + encoding is not serialization.Encoding.Raw + or format is not serialization.PublicFormat.Raw ): raise ValueError( "When using Raw both encoding and format must be Raw" @@ -76,19 +77,19 @@ def exchange(self, peer_public_key): if not isinstance(peer_public_key, X25519PublicKey): raise TypeError("peer_public_key must be X25519PublicKey.") - return _evp_pkey_derive( - self._backend, self._evp_pkey, peer_public_key - ) + return _evp_pkey_derive(self._backend, self._evp_pkey, peer_public_key) def private_bytes(self, encoding, format, encryption_algorithm): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - format is not serialization.PrivateFormat.Raw or - encoding is not serialization.Encoding.Raw or not - isinstance(encryption_algorithm, serialization.NoEncryption) + format is not serialization.PrivateFormat.Raw + or encoding is not serialization.Encoding.Raw + or not isinstance( + encryption_algorithm, serialization.NoEncryption + ) ): raise ValueError( "When using Raw both encoding and format must be Raw " @@ -108,9 +109,13 @@ def _raw_private_bytes(self): # using the last 32 bytes, which is the key itself. bio = self._backend._create_mem_bio_gc() res = self._backend._lib.i2d_PKCS8PrivateKey_bio( - bio, self._evp_pkey, - self._backend._ffi.NULL, self._backend._ffi.NULL, - 0, self._backend._ffi.NULL, self._backend._ffi.NULL + bio, + self._evp_pkey, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + 0, + self._backend._ffi.NULL, + self._backend._ffi.NULL, ) self._backend.openssl_assert(res == 1) pkcs8 = self._backend._read_mem_bio(bio) diff --git a/src/cryptography/hazmat/backends/openssl/x448.py b/src/cryptography/hazmat/backends/openssl/x448.py index 3de35b433493..7ebcdf84bcc2 100644 --- a/src/cryptography/hazmat/backends/openssl/x448.py +++ b/src/cryptography/hazmat/backends/openssl/x448.py @@ -8,7 +8,8 @@ from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric.x448 import ( - X448PrivateKey, X448PublicKey + X448PrivateKey, + X448PublicKey, ) _X448_KEY_SIZE = 56 @@ -22,12 +23,12 @@ def __init__(self, backend, evp_pkey): def public_bytes(self, encoding, format): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - encoding is not serialization.Encoding.Raw or - format is not serialization.PublicFormat.Raw + encoding is not serialization.Encoding.Raw + or format is not serialization.PublicFormat.Raw ): raise ValueError( "When using Raw both encoding and format must be Raw" @@ -70,19 +71,19 @@ def exchange(self, peer_public_key): if not isinstance(peer_public_key, X448PublicKey): raise TypeError("peer_public_key must be X448PublicKey.") - return _evp_pkey_derive( - self._backend, self._evp_pkey, peer_public_key - ) + return _evp_pkey_derive(self._backend, self._evp_pkey, peer_public_key) def private_bytes(self, encoding, format, encryption_algorithm): if ( - encoding is serialization.Encoding.Raw or - format is serialization.PublicFormat.Raw + encoding is serialization.Encoding.Raw + or format is serialization.PublicFormat.Raw ): if ( - format is not serialization.PrivateFormat.Raw or - encoding is not serialization.Encoding.Raw or not - isinstance(encryption_algorithm, serialization.NoEncryption) + format is not serialization.PrivateFormat.Raw + or encoding is not serialization.Encoding.Raw + or not isinstance( + encryption_algorithm, serialization.NoEncryption + ) ): raise ValueError( "When using Raw both encoding and format must be Raw " diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 9b3982707856..ce643254f2a6 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -10,13 +10,20 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CERTIFICATE_EXTENSION_PARSER, _CERTIFICATE_EXTENSION_PARSER_NO_SCT, - _CRL_EXTENSION_PARSER, _CSR_EXTENSION_PARSER, - _REVOKED_CERTIFICATE_EXTENSION_PARSER, _asn1_integer_to_int, - _asn1_string_to_bytes, _decode_x509_name, _obj2txt, _parse_asn1_time + _CERTIFICATE_EXTENSION_PARSER, + _CERTIFICATE_EXTENSION_PARSER_NO_SCT, + _CRL_EXTENSION_PARSER, + _CSR_EXTENSION_PARSER, + _REVOKED_CERTIFICATE_EXTENSION_PARSER, + _asn1_integer_to_int, + _asn1_string_to_bytes, + _decode_x509_name, + _obj2txt, + _parse_asn1_time, ) from cryptography.hazmat.backends.openssl.encode_asn1 import ( - _encode_asn1_int_gc, _txt2obj_gc + _encode_asn1_int_gc, + _txt2obj_gc, ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa @@ -195,7 +202,7 @@ def revocation_date(self): self._backend, self._backend._lib.X509_REVOKED_get0_revocationDate( self._x509_revoked - ) + ), ) @utils.cached_property @@ -224,9 +231,7 @@ def __ne__(self, other): def fingerprint(self, algorithm): h = hashes.Hash(algorithm, self._backend) bio = self._backend._create_mem_bio_gc() - res = self._backend._lib.i2d_X509_CRL_bio( - bio, self._x509_crl - ) + res = self._backend._lib.i2d_X509_CRL_bio(bio, self._x509_crl) self._backend.openssl_assert(res == 1) der = self._backend._read_mem_bio(bio) h.update(der) @@ -251,9 +256,7 @@ def get_revoked_certificate_by_serial_number(self, serial_number): if res == 0: return None else: - self._backend.openssl_assert( - revoked[0] != self._backend._ffi.NULL - ) + self._backend.openssl_assert(revoked[0] != self._backend._ffi.NULL) return _RevokedCertificate( self._backend, self._sorted_crl, revoked[0] ) @@ -363,10 +366,14 @@ def extensions(self): return _CRL_EXTENSION_PARSER.parse(self._backend, self._x509_crl) def is_signature_valid(self, public_key): - if not isinstance(public_key, (dsa.DSAPublicKey, rsa.RSAPublicKey, - ec.EllipticCurvePublicKey)): - raise TypeError('Expecting one of DSAPublicKey, RSAPublicKey,' - ' or EllipticCurvePublicKey.') + if not isinstance( + public_key, + (dsa.DSAPublicKey, rsa.RSAPublicKey, ec.EllipticCurvePublicKey), + ): + raise TypeError( + "Expecting one of DSAPublicKey, RSAPublicKey," + " or EllipticCurvePublicKey." + ) res = self._backend._lib.X509_CRL_verify( self._x509_crl, public_key._evp_pkey ) @@ -436,10 +443,11 @@ def extensions(self): x509_exts = self._backend._ffi.gc( x509_exts, lambda x: self._backend._lib.sk_X509_EXTENSION_pop_free( - x, self._backend._ffi.addressof( + x, + self._backend._ffi.addressof( self._backend._lib._original_lib, "X509_EXTENSION_free" - ) - ) + ), + ), ) return _CSR_EXTENSION_PARSER.parse(self._backend, x509_exts) @@ -515,9 +523,11 @@ def get_attribute_for_oid(self, oid): _ASN1Type.PrintableString.value, _ASN1Type.IA5String.value, ): - raise ValueError("OID {} has a disallowed ASN.1 type: {}".format( - oid, asn1_type.type - )) + raise ValueError( + "OID {} has a disallowed ASN.1 type: {}".format( + oid, asn1_type.type + ) + ) data = self._backend._lib.X509_ATTRIBUTE_get0_data( attr, 0, asn1_type.type, self._backend._ffi.NULL @@ -556,9 +566,9 @@ def log_id(self): def timestamp(self): timestamp = self._backend._lib.SCT_get_timestamp(self._sct) milliseconds = timestamp % 1000 - return datetime.datetime.utcfromtimestamp( - timestamp // 1000 - ).replace(microsecond=milliseconds * 1000) + return datetime.datetime.utcfromtimestamp(timestamp // 1000).replace( + microsecond=milliseconds * 1000 + ) @property def entry_type(self): diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 3bc879c43c0e..3e0c235cb499 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -14,9 +14,7 @@ def cryptography_has_ec2m(): def cryptography_has_rsa_r_pkcs_decoding_error(): - return [ - "RSA_R_PKCS_DECODING_ERROR" - ] + return ["RSA_R_PKCS_DECODING_ERROR"] def cryptography_has_rsa_oaep_md(): @@ -49,12 +47,12 @@ def cryptography_has_compression(): def cryptography_has_102_verification(): return [ - 'X509_V_ERR_SUITE_B_INVALID_VERSION', - 'X509_V_ERR_SUITE_B_INVALID_ALGORITHM', - 'X509_V_ERR_SUITE_B_INVALID_CURVE', - 'X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM', - 'X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED', - 'X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256', + "X509_V_ERR_SUITE_B_INVALID_VERSION", + "X509_V_ERR_SUITE_B_INVALID_ALGORITHM", + "X509_V_ERR_SUITE_B_INVALID_CURVE", + "X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM", + "X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED", + "X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256", "X509_V_FLAG_SUITEB_128_LOS_ONLY", "X509_V_FLAG_SUITEB_192_LOS", "X509_V_FLAG_SUITEB_128_LOS", @@ -62,9 +60,7 @@ def cryptography_has_102_verification(): def cryptography_has_110_verification_params(): - return [ - "X509_CHECK_FLAG_NEVER_CHECK_SUBJECT" - ] + return ["X509_CHECK_FLAG_NEVER_CHECK_SUBJECT"] def cryptography_has_set_cert_cb(): diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 6c025433d179..fbe5ca9a5dad 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -74,7 +74,7 @@ def _openssl_assert(lib, ok): "please file an issue at https://github.com/pyca/cryptography/" "issues with information on how to reproduce " "this. ({0!r})".format(errors_with_text), - errors_with_text + errors_with_text, ) @@ -97,6 +97,7 @@ class Binding(object): """ OpenSSL API wrapper. """ + lib = None ffi = ffi _lib_loaded = False @@ -140,8 +141,10 @@ def init_static_locks(cls): # the setup for this. __import__("_ssl") - if (not cls.lib.Cryptography_HAS_LOCKING_CALLBACKS or - cls.lib.CRYPTO_get_locking_callback() != cls.ffi.NULL): + if ( + not cls.lib.Cryptography_HAS_LOCKING_CALLBACKS + or cls.lib.CRYPTO_get_locking_callback() != cls.ffi.NULL + ): return # If nothing else has setup a locking callback already, we set up diff --git a/src/cryptography/hazmat/primitives/asymmetric/dh.py b/src/cryptography/hazmat/primitives/asymmetric/dh.py index 4fc995245d95..4e583f3c957a 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dh.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dh.py @@ -21,8 +21,9 @@ def __init__(self, x, public_numbers): raise TypeError("x must be an integer.") if not isinstance(public_numbers, DHPublicNumbers): - raise TypeError("public_numbers must be an instance of " - "DHPublicNumbers.") + raise TypeError( + "public_numbers must be an instance of " "DHPublicNumbers." + ) self._x = x self._public_numbers = public_numbers @@ -32,8 +33,8 @@ def __eq__(self, other): return NotImplemented return ( - self._x == other._x and - self._public_numbers == other._public_numbers + self._x == other._x + and self._public_numbers == other._public_numbers ) def __ne__(self, other): @@ -53,7 +54,8 @@ def __init__(self, y, parameter_numbers): if not isinstance(parameter_numbers, DHParameterNumbers): raise TypeError( - "parameters must be an instance of DHParameterNumbers.") + "parameters must be an instance of DHParameterNumbers." + ) self._y = y self._parameter_numbers = parameter_numbers @@ -63,8 +65,8 @@ def __eq__(self, other): return NotImplemented return ( - self._y == other._y and - self._parameter_numbers == other._parameter_numbers + self._y == other._y + and self._parameter_numbers == other._parameter_numbers ) def __ne__(self, other): @@ -79,9 +81,8 @@ def public_key(self, backend): class DHParameterNumbers(object): def __init__(self, p, g, q=None): - if ( - not isinstance(p, six.integer_types) or - not isinstance(g, six.integer_types) + if not isinstance(p, six.integer_types) or not isinstance( + g, six.integer_types ): raise TypeError("p and g must be integers") if q is not None and not isinstance(q, six.integer_types): @@ -99,9 +100,7 @@ def __eq__(self, other): return NotImplemented return ( - self._p == other._p and - self._g == other._g and - self._q == other._q + self._p == other._p and self._g == other._g and self._q == other._q ) def __ne__(self, other): diff --git a/src/cryptography/hazmat/primitives/asymmetric/dsa.py b/src/cryptography/hazmat/primitives/asymmetric/dsa.py index 678b9d4943f4..fadedfa46ff4 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -152,9 +152,9 @@ def _check_dsa_private_numbers(numbers): class DSAParameterNumbers(object): def __init__(self, p, q, g): if ( - not isinstance(p, six.integer_types) or - not isinstance(q, six.integer_types) or - not isinstance(g, six.integer_types) + not isinstance(p, six.integer_types) + or not isinstance(q, six.integer_types) + or not isinstance(g, six.integer_types) ): raise TypeError( "DSAParameterNumbers p, q, and g arguments must be integers." @@ -182,9 +182,8 @@ def __ne__(self, other): def __repr__(self): return ( - "".format( - self=self - ) + "".format(self=self) ) @@ -212,8 +211,8 @@ def __eq__(self, other): return NotImplemented return ( - self.y == other.y and - self.parameter_numbers == other.parameter_numbers + self.y == other.y + and self.parameter_numbers == other.parameter_numbers ) def __ne__(self, other): diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index eef922dccbd1..aaa415107f6f 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -166,6 +166,7 @@ def from_encoded_point(cls, curve, data): raise ValueError("Unsupported elliptic curve point type") from cryptography.hazmat.backends.openssl.backend import backend + return backend.load_elliptic_curve_public_bytes(curve, data) @@ -289,26 +290,22 @@ class BrainpoolP512R1(object): _CURVE_TYPES = { "prime192v1": SECP192R1, "prime256v1": SECP256R1, - "secp192r1": SECP192R1, "secp224r1": SECP224R1, "secp256r1": SECP256R1, "secp384r1": SECP384R1, "secp521r1": SECP521R1, "secp256k1": SECP256K1, - "sect163k1": SECT163K1, "sect233k1": SECT233K1, "sect283k1": SECT283K1, "sect409k1": SECT409K1, "sect571k1": SECT571K1, - "sect163r2": SECT163R2, "sect233r1": SECT233R1, "sect283r1": SECT283R1, "sect409r1": SECT409R1, "sect571r1": SECT571R1, - "brainpoolP256r1": BrainpoolP256R1, "brainpoolP384r1": BrainpoolP384R1, "brainpoolP512r1": BrainpoolP512R1, @@ -342,9 +339,8 @@ def derive_private_key(private_value, curve, backend): class EllipticCurvePublicNumbers(object): def __init__(self, x, y, curve): - if ( - not isinstance(x, six.integer_types) or - not isinstance(y, six.integer_types) + if not isinstance(x, six.integer_types) or not isinstance( + y, six.integer_types ): raise TypeError("x and y must be integers.") @@ -370,8 +366,9 @@ def encode_point(self): # key_size is in bits. Convert to bytes and round up byte_length = (self.curve.key_size + 7) // 8 return ( - b'\x04' + utils.int_to_bytes(self.x, byte_length) + - utils.int_to_bytes(self.y, byte_length) + b"\x04" + + utils.int_to_bytes(self.x, byte_length) + + utils.int_to_bytes(self.y, byte_length) ) @classmethod @@ -387,17 +384,17 @@ def from_encoded_point(cls, curve, data): stacklevel=2, ) - if data.startswith(b'\x04'): + if data.startswith(b"\x04"): # key_size is in bits. Convert to bytes and round up byte_length = (curve.key_size + 7) // 8 if len(data) == 2 * byte_length + 1: - x = utils.int_from_bytes(data[1:byte_length + 1], 'big') - y = utils.int_from_bytes(data[byte_length + 1:], 'big') + x = utils.int_from_bytes(data[1 : byte_length + 1], "big") + y = utils.int_from_bytes(data[byte_length + 1 :], "big") return cls(x, y, curve) else: - raise ValueError('Invalid elliptic curve point data length') + raise ValueError("Invalid elliptic curve point data length") else: - raise ValueError('Unsupported elliptic curve point type') + raise ValueError("Unsupported elliptic curve point type") curve = utils.read_only_property("_curve") x = utils.read_only_property("_x") @@ -408,10 +405,10 @@ def __eq__(self, other): return NotImplemented return ( - self.x == other.x and - self.y == other.y and - self.curve.name == other.curve.name and - self.curve.key_size == other.curve.key_size + self.x == other.x + and self.y == other.y + and self.curve.name == other.curve.name + and self.curve.key_size == other.curve.key_size ) def __ne__(self, other): @@ -452,8 +449,8 @@ def __eq__(self, other): return NotImplemented return ( - self.private_value == other.private_value and - self.public_numbers == other.public_numbers + self.private_value == other.private_value + and self.public_numbers == other.public_numbers ) def __ne__(self, other): diff --git a/src/cryptography/hazmat/primitives/asymmetric/ed25519.py b/src/cryptography/hazmat/primitives/asymmetric/ed25519.py index d89445fa29d9..2d07a029bc73 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ed25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ed25519.py @@ -20,10 +20,11 @@ class Ed25519PublicKey(object): @classmethod def from_public_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed25519_supported(): raise UnsupportedAlgorithm( "ed25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, ) return backend.ed25519_load_public_bytes(data) @@ -46,10 +47,11 @@ class Ed25519PrivateKey(object): @classmethod def generate(cls): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed25519_supported(): raise UnsupportedAlgorithm( "ed25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, ) return backend.ed25519_generate_key() @@ -57,10 +59,11 @@ def generate(cls): @classmethod def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed25519_supported(): raise UnsupportedAlgorithm( "ed25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, ) return backend.ed25519_load_private_bytes(data) diff --git a/src/cryptography/hazmat/primitives/asymmetric/ed448.py b/src/cryptography/hazmat/primitives/asymmetric/ed448.py index 939157ab5901..520ffcbcbcb6 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ed448.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ed448.py @@ -16,10 +16,11 @@ class Ed448PublicKey(object): @classmethod def from_public_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed448_supported(): raise UnsupportedAlgorithm( "ed448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, ) return backend.ed448_load_public_bytes(data) @@ -42,20 +43,22 @@ class Ed448PrivateKey(object): @classmethod def generate(cls): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed448_supported(): raise UnsupportedAlgorithm( "ed448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, ) return backend.ed448_generate_key() @classmethod def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.ed448_supported(): raise UnsupportedAlgorithm( "ed448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, ) return backend.ed448_load_private_bytes(data) diff --git a/src/cryptography/hazmat/primitives/asymmetric/padding.py b/src/cryptography/hazmat/primitives/asymmetric/padding.py index 828e03bc2394..fc8f6e26a917 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/padding.py +++ b/src/cryptography/hazmat/primitives/asymmetric/padding.py @@ -35,8 +35,10 @@ class PSS(object): def __init__(self, mgf, salt_length): self._mgf = mgf - if (not isinstance(salt_length, six.integer_types) and - salt_length is not self.MAX_LENGTH): + if ( + not isinstance(salt_length, six.integer_types) + and salt_length is not self.MAX_LENGTH + ): raise TypeError("salt_length must be an integer.") if salt_length is not self.MAX_LENGTH and salt_length < 0: diff --git a/src/cryptography/hazmat/primitives/asymmetric/rsa.py b/src/cryptography/hazmat/primitives/asymmetric/rsa.py index 640577ad3f2f..ea8b523d0967 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import abc + try: # Only available in math in 3.5+ from math import gcd @@ -112,7 +113,7 @@ def generate_private_key(public_exponent, key_size, backend): if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( "Backend object does not implement RSABackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) _verify_rsa_parameters(public_exponent, key_size) @@ -130,8 +131,9 @@ def _verify_rsa_parameters(public_exponent, key_size): raise ValueError("key_size must be at least 512-bits.") -def _check_private_key_components(p, q, private_exponent, dmp1, dmq1, iqmp, - public_exponent, modulus): +def _check_private_key_components( + p, q, private_exponent, dmp1, dmq1, iqmp, public_exponent, modulus +): if modulus < 3: raise ValueError("modulus must be >= 3.") @@ -266,15 +268,14 @@ def rsa_recover_prime_factors(n, e, d): class RSAPrivateNumbers(object): - def __init__(self, p, q, d, dmp1, dmq1, iqmp, - public_numbers): + def __init__(self, p, q, d, dmp1, dmq1, iqmp, public_numbers): if ( - not isinstance(p, six.integer_types) or - not isinstance(q, six.integer_types) or - not isinstance(d, six.integer_types) or - not isinstance(dmp1, six.integer_types) or - not isinstance(dmq1, six.integer_types) or - not isinstance(iqmp, six.integer_types) + not isinstance(p, six.integer_types) + or not isinstance(q, six.integer_types) + or not isinstance(d, six.integer_types) + or not isinstance(dmp1, six.integer_types) + or not isinstance(dmq1, six.integer_types) + or not isinstance(iqmp, six.integer_types) ): raise TypeError( "RSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must" @@ -311,35 +312,36 @@ def __eq__(self, other): return NotImplemented return ( - self.p == other.p and - self.q == other.q and - self.d == other.d and - self.dmp1 == other.dmp1 and - self.dmq1 == other.dmq1 and - self.iqmp == other.iqmp and - self.public_numbers == other.public_numbers + self.p == other.p + and self.q == other.q + and self.d == other.d + and self.dmp1 == other.dmp1 + and self.dmq1 == other.dmq1 + and self.iqmp == other.iqmp + and self.public_numbers == other.public_numbers ) def __ne__(self, other): return not self == other def __hash__(self): - return hash(( - self.p, - self.q, - self.d, - self.dmp1, - self.dmq1, - self.iqmp, - self.public_numbers, - )) + return hash( + ( + self.p, + self.q, + self.d, + self.dmp1, + self.dmq1, + self.iqmp, + self.public_numbers, + ) + ) class RSAPublicNumbers(object): def __init__(self, e, n): - if ( - not isinstance(e, six.integer_types) or - not isinstance(n, six.integer_types) + if not isinstance(e, six.integer_types) or not isinstance( + n, six.integer_types ): raise TypeError("RSAPublicNumbers arguments must be integers.") diff --git a/src/cryptography/hazmat/primitives/asymmetric/utils.py b/src/cryptography/hazmat/primitives/asymmetric/utils.py index 14d2abee9a9c..5f9b677868db 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/utils.py +++ b/src/cryptography/hazmat/primitives/asymmetric/utils.py @@ -6,7 +6,11 @@ from cryptography import utils from cryptography.hazmat._der import ( - DERReader, INTEGER, SEQUENCE, encode_der, encode_der_integer + DERReader, + INTEGER, + SEQUENCE, + encode_der, + encode_der_integer, ) from cryptography.hazmat.primitives import hashes diff --git a/src/cryptography/hazmat/primitives/asymmetric/x25519.py b/src/cryptography/hazmat/primitives/asymmetric/x25519.py index 61a95ffa9847..fc63691536e9 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x25519.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -16,10 +16,11 @@ class X25519PublicKey(object): @classmethod def from_public_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x25519_supported(): raise UnsupportedAlgorithm( "X25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) return backend.x25519_load_public_bytes(data) @@ -36,20 +37,22 @@ class X25519PrivateKey(object): @classmethod def generate(cls): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x25519_supported(): raise UnsupportedAlgorithm( "X25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) return backend.x25519_generate_key() @classmethod def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x25519_supported(): raise UnsupportedAlgorithm( "X25519 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) return backend.x25519_load_private_bytes(data) diff --git a/src/cryptography/hazmat/primitives/asymmetric/x448.py b/src/cryptography/hazmat/primitives/asymmetric/x448.py index 475e678ff98c..3ac067bfd5e0 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/x448.py +++ b/src/cryptography/hazmat/primitives/asymmetric/x448.py @@ -16,10 +16,11 @@ class X448PublicKey(object): @classmethod def from_public_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x448_supported(): raise UnsupportedAlgorithm( "X448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) return backend.x448_load_public_bytes(data) @@ -36,20 +37,22 @@ class X448PrivateKey(object): @classmethod def generate(cls): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x448_supported(): raise UnsupportedAlgorithm( "X448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) return backend.x448_generate_key() @classmethod def from_private_bytes(cls, data): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.x448_supported(): raise UnsupportedAlgorithm( "X448 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, ) return backend.x448_load_private_bytes(data) diff --git a/src/cryptography/hazmat/primitives/ciphers/__init__.py b/src/cryptography/hazmat/primitives/ciphers/__init__.py index 171b1c693b31..4380f72b2e2e 100644 --- a/src/cryptography/hazmat/primitives/ciphers/__init__.py +++ b/src/cryptography/hazmat/primitives/ciphers/__init__.py @@ -5,8 +5,13 @@ from __future__ import absolute_import, division, print_function from cryptography.hazmat.primitives.ciphers.base import ( - AEADCipherContext, AEADDecryptionContext, AEADEncryptionContext, - BlockCipherAlgorithm, Cipher, CipherAlgorithm, CipherContext + AEADCipherContext, + AEADDecryptionContext, + AEADEncryptionContext, + BlockCipherAlgorithm, + Cipher, + CipherAlgorithm, + CipherContext, ) diff --git a/src/cryptography/hazmat/primitives/ciphers/aead.py b/src/cryptography/hazmat/primitives/ciphers/aead.py index 72cb30c390cf..4eddc1ee6e37 100644 --- a/src/cryptography/hazmat/primitives/ciphers/aead.py +++ b/src/cryptography/hazmat/primitives/ciphers/aead.py @@ -18,7 +18,7 @@ def __init__(self, key): if not backend.aead_cipher_supported(self): raise exceptions.UnsupportedAlgorithm( "ChaCha20Poly1305 is not supported by this version of OpenSSL", - exceptions._Reasons.UNSUPPORTED_CIPHER + exceptions._Reasons.UNSUPPORTED_CIPHER, ) utils._check_byteslike("key", key) @@ -42,18 +42,14 @@ def encrypt(self, nonce, data, associated_data): ) self._check_params(nonce, data, associated_data) - return aead._encrypt( - backend, self, nonce, data, associated_data, 16 - ) + return aead._encrypt(backend, self, nonce, data, associated_data, 16) def decrypt(self, nonce, data, associated_data): if associated_data is None: associated_data = b"" self._check_params(nonce, data, associated_data) - return aead._decrypt( - backend, self, nonce, data, associated_data, 16 - ) + return aead._decrypt(backend, self, nonce, data, associated_data, 16) def _check_params(self, nonce, data, associated_data): utils._check_byteslike("nonce", nonce) @@ -161,18 +157,14 @@ def encrypt(self, nonce, data, associated_data): ) self._check_params(nonce, data, associated_data) - return aead._encrypt( - backend, self, nonce, data, associated_data, 16 - ) + return aead._encrypt(backend, self, nonce, data, associated_data, 16) def decrypt(self, nonce, data, associated_data): if associated_data is None: associated_data = b"" self._check_params(nonce, data, associated_data) - return aead._decrypt( - backend, self, nonce, data, associated_data, 16 - ) + return aead._decrypt(backend, self, nonce, data, associated_data, 16) def _check_params(self, nonce, data, associated_data): utils._check_byteslike("nonce", nonce) diff --git a/src/cryptography/hazmat/primitives/ciphers/algorithms.py b/src/cryptography/hazmat/primitives/ciphers/algorithms.py index f4d5160bb7e5..8072cedd1714 100644 --- a/src/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/src/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -6,7 +6,8 @@ from cryptography import utils from cryptography.hazmat.primitives.ciphers import ( - BlockCipherAlgorithm, CipherAlgorithm + BlockCipherAlgorithm, + CipherAlgorithm, ) from cryptography.hazmat.primitives.ciphers.modes import ModeWithNonce @@ -17,9 +18,11 @@ def _verify_key_size(algorithm, key): # Verify that the key size matches the expected key size if len(key) * 8 not in algorithm.key_sizes: - raise ValueError("Invalid key size ({}) for {}.".format( - len(key) * 8, algorithm.name - )) + raise ValueError( + "Invalid key size ({}) for {}.".format( + len(key) * 8, algorithm.name + ) + ) return key diff --git a/src/cryptography/hazmat/primitives/ciphers/base.py b/src/cryptography/hazmat/primitives/ciphers/base.py index 4d5f8d60ff49..8adfa9d62120 100644 --- a/src/cryptography/hazmat/primitives/ciphers/base.py +++ b/src/cryptography/hazmat/primitives/ciphers/base.py @@ -10,8 +10,11 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, AlreadyUpdated, NotYetFinalized, UnsupportedAlgorithm, - _Reasons + AlreadyFinalized, + AlreadyUpdated, + NotYetFinalized, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives.ciphers import modes @@ -98,7 +101,7 @@ def __init__(self, algorithm, mode, backend): if not isinstance(backend, CipherBackend): raise UnsupportedAlgorithm( "Backend object does not implement CipherBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if not isinstance(algorithm, CipherAlgorithm): @@ -230,6 +233,7 @@ class _AEADEncryptionContext(_AEADCipherContext): @property def tag(self): if self._ctx is not None: - raise NotYetFinalized("You must finalize encryption before " - "getting the tag.") + raise NotYetFinalized( + "You must finalize encryption before " "getting the tag." + ) return self._tag diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index 78fa1c48a53b..dcb24444214f 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -72,9 +72,11 @@ def _check_aes_key_length(self, algorithm): def _check_iv_length(self, algorithm): if len(self.initialization_vector) * 8 != algorithm.block_size: - raise ValueError("Invalid IV size ({}) for {}.".format( - len(self.initialization_vector), self.name - )) + raise ValueError( + "Invalid IV size ({}) for {}.".format( + len(self.initialization_vector), self.name + ) + ) def _check_iv_and_key_length(self, algorithm): @@ -178,9 +180,11 @@ def __init__(self, nonce): def validate_for_algorithm(self, algorithm): _check_aes_key_length(self, algorithm) if len(self.nonce) * 8 != algorithm.block_size: - raise ValueError("Invalid nonce size ({}) for {}.".format( - len(self.nonce), self.name - )) + raise ValueError( + "Invalid nonce size ({}) for {}.".format( + len(self.nonce), self.name + ) + ) @utils.register_interface(Mode) @@ -206,7 +210,8 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): if len(tag) < min_tag_length: raise ValueError( "Authentication tag must be {} bytes or longer.".format( - min_tag_length) + min_tag_length + ) ) self._tag = tag self._min_tag_length = min_tag_length diff --git a/src/cryptography/hazmat/primitives/cmac.py b/src/cryptography/hazmat/primitives/cmac.py index 95a8d9756e45..edf9d5364df4 100644 --- a/src/cryptography/hazmat/primitives/cmac.py +++ b/src/cryptography/hazmat/primitives/cmac.py @@ -6,7 +6,9 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import CMACBackend from cryptography.hazmat.primitives import ciphers @@ -17,13 +19,11 @@ def __init__(self, algorithm, backend, ctx=None): if not isinstance(backend, CMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement CMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if not isinstance(algorithm, ciphers.BlockCipherAlgorithm): - raise TypeError( - "Expected instance of BlockCipherAlgorithm." - ) + raise TypeError("Expected instance of BlockCipherAlgorithm.") self._algorithm = algorithm self._backend = backend @@ -58,7 +58,5 @@ def copy(self): if self._ctx is None: raise AlreadyFinalized("Context was already finalized.") return CMAC( - self._algorithm, - backend=self._backend, - ctx=self._ctx.copy() + self._algorithm, backend=self._backend, ctx=self._ctx.copy() ) diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index 9be2b60090a5..a39e5df4834a 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -10,7 +10,9 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HashBackend @@ -70,7 +72,7 @@ def __init__(self, algorithm, backend, ctx=None): if not isinstance(backend, HashBackend): raise UnsupportedAlgorithm( "Backend object does not implement HashBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if not isinstance(algorithm, HashAlgorithm): diff --git a/src/cryptography/hazmat/primitives/hmac.py b/src/cryptography/hazmat/primitives/hmac.py index 9eceeac2a136..1dd32457f375 100644 --- a/src/cryptography/hazmat/primitives/hmac.py +++ b/src/cryptography/hazmat/primitives/hmac.py @@ -6,7 +6,9 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import hashes @@ -18,7 +20,7 @@ def __init__(self, key, algorithm, backend, ctx=None): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if not isinstance(algorithm, hashes.HashAlgorithm): @@ -47,7 +49,7 @@ def copy(self): self._key, self.algorithm, backend=self._backend, - ctx=self._ctx.copy() + ctx=self._ctx.copy(), ) def finalize(self): diff --git a/src/cryptography/hazmat/primitives/kdf/concatkdf.py b/src/cryptography/hazmat/primitives/kdf/concatkdf.py index 7cb63856b11f..f424689c9737 100644 --- a/src/cryptography/hazmat/primitives/kdf/concatkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/concatkdf.py @@ -8,7 +8,10 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.backends.interfaces import HashBackend @@ -17,16 +20,15 @@ def _int_to_u32be(n): - return struct.pack('>I', n) + return struct.pack(">I", n) def _common_args_checks(algorithm, length, otherinfo): max_length = algorithm.digest_size * (2 ** 32 - 1) if length > max_length: raise ValueError( - "Can not derive keys larger than {} bits.".format( - max_length - )) + "Can not derive keys larger than {} bits.".format(max_length) + ) if otherinfo is not None: utils._check_bytes("otherinfo", otherinfo) @@ -37,7 +39,7 @@ def _concatkdf_derive(key_material, length, auxfn, otherinfo): outlen = 0 counter = 1 - while (length > outlen): + while length > outlen: h = auxfn() h.update(_int_to_u32be(counter)) h.update(key_material) @@ -63,7 +65,7 @@ def __init__(self, algorithm, length, otherinfo, backend): if not isinstance(backend, HashBackend): raise UnsupportedAlgorithm( "Backend object does not implement HashBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._backend = backend self._used = False @@ -75,8 +77,9 @@ def derive(self, key_material): if self._used: raise AlreadyFinalized self._used = True - return _concatkdf_derive(key_material, self._length, - self._hash, self._otherinfo) + return _concatkdf_derive( + key_material, self._length, self._hash, self._otherinfo + ) def verify(self, key_material, expected_key): if not constant_time.bytes_eq(self.derive(key_material), expected_key): @@ -104,7 +107,7 @@ def __init__(self, algorithm, length, salt, otherinfo, backend): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._backend = backend self._used = False @@ -116,8 +119,9 @@ def derive(self, key_material): if self._used: raise AlreadyFinalized self._used = True - return _concatkdf_derive(key_material, self._length, - self._hmac, self._otherinfo) + return _concatkdf_derive( + key_material, self._length, self._hmac, self._otherinfo + ) def verify(self, key_material, expected_key): if not constant_time.bytes_eq(self.derive(key_material), expected_key): diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 01f0f288b439..0a758044227e 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -8,7 +8,10 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time, hmac @@ -21,7 +24,7 @@ def __init__(self, algorithm, length, salt, info, backend): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._algorithm = algorithm @@ -57,7 +60,7 @@ def __init__(self, algorithm, length, info, backend): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._algorithm = algorithm @@ -68,9 +71,8 @@ def __init__(self, algorithm, length, info, backend): if length > max_length: raise ValueError( - "Can not derive keys larger than {} octets.".format( - max_length - )) + "Can not derive keys larger than {} octets.".format(max_length) + ) self._length = length @@ -95,7 +97,7 @@ def _expand(self, key_material): output.append(h.finalize()) counter += 1 - return b"".join(output)[:self._length] + return b"".join(output)[: self._length] def derive(self, key_material): utils._check_byteslike("key_material", key_material) diff --git a/src/cryptography/hazmat/primitives/kdf/kbkdf.py b/src/cryptography/hazmat/primitives/kdf/kbkdf.py index 56783a85cc5d..deb428919192 100644 --- a/src/cryptography/hazmat/primitives/kdf/kbkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/kbkdf.py @@ -10,7 +10,10 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time, hashes, hmac @@ -28,24 +31,35 @@ class CounterLocation(Enum): @utils.register_interface(KeyDerivationFunction) class KBKDFHMAC(object): - def __init__(self, algorithm, mode, length, rlen, llen, - location, label, context, fixed, backend): + def __init__( + self, + algorithm, + mode, + length, + rlen, + llen, + location, + label, + context, + fixed, + backend, + ): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if not isinstance(algorithm, hashes.HashAlgorithm): raise UnsupportedAlgorithm( "Algorithm supplied is not a supported hash algorithm.", - _Reasons.UNSUPPORTED_HASH + _Reasons.UNSUPPORTED_HASH, ) if not backend.hmac_supported(algorithm): raise UnsupportedAlgorithm( "Algorithm supplied is not a supported hmac algorithm.", - _Reasons.UNSUPPORTED_HASH + _Reasons.UNSUPPORTED_HASH, ) if not isinstance(mode, Mode): @@ -55,8 +69,9 @@ def __init__(self, algorithm, mode, length, rlen, llen, raise TypeError("location must be of type CounterLocation") if (label or context) and fixed: - raise ValueError("When supplying fixed data, " - "label and context are ignored.") + raise ValueError( + "When supplying fixed data, " "label and context are ignored." + ) if rlen is None or not self._valid_byte_length(rlen): raise ValueError("rlen must be between 1 and 4") @@ -68,10 +83,10 @@ def __init__(self, algorithm, mode, length, rlen, llen, raise TypeError("llen must be an integer") if label is None: - label = b'' + label = b"" if context is None: - context = b'' + context = b"" utils._check_bytes("label", label) utils._check_bytes("context", context) @@ -89,7 +104,7 @@ def __init__(self, algorithm, mode, length, rlen, llen, def _valid_byte_length(self, value): if not isinstance(value, int): - raise TypeError('value must be of type int') + raise TypeError("value must be of type int") value_bin = utils.int_to_bytes(1, value) if not 1 <= len(value_bin) <= 4: @@ -106,7 +121,7 @@ def derive(self, key_material): # inverse floor division (equivalent to ceiling) rounds = -(-self._length // self._algorithm.digest_size) - output = [b''] + output = [b""] # For counter mode, the number of iterations shall not be # larger than 2^r-1, where r <= 32 is the binary length of the counter @@ -114,7 +129,7 @@ def derive(self, key_material): # PRF will not repeat during a particular call to the KDF function. r_bin = utils.int_to_bytes(1, self._rlen) if rounds > pow(2, len(r_bin) * 8) - 1: - raise ValueError('There are too many iterations.') + raise ValueError("There are too many iterations.") for i in range(1, rounds + 1): h = hmac.HMAC(key_material, self._algorithm, backend=self._backend) @@ -130,7 +145,7 @@ def derive(self, key_material): output.append(h.finalize()) - return b''.join(output)[:self._length] + return b"".join(output)[: self._length] def _generate_fixed_input(self): if self._fixed_data and isinstance(self._fixed_data, bytes): diff --git a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py index 07d8ac676866..1d82f2a64b77 100644 --- a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -6,7 +6,10 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import PBKDF2HMACBackend from cryptography.hazmat.primitives import constant_time @@ -19,14 +22,15 @@ def __init__(self, algorithm, length, salt, iterations, backend): if not isinstance(backend, PBKDF2HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement PBKDF2HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if not backend.pbkdf2_hmac_supported(algorithm): raise UnsupportedAlgorithm( "{} is not supported for PBKDF2 by this backend.".format( - algorithm.name), - _Reasons.UNSUPPORTED_HASH + algorithm.name + ), + _Reasons.UNSUPPORTED_HASH, ) self._used = False self._algorithm = algorithm @@ -47,7 +51,7 @@ def derive(self, key_material): self._length, self._salt, self._iterations, - key_material + key_material, ) def verify(self, key_material, expected_key): diff --git a/src/cryptography/hazmat/primitives/kdf/scrypt.py b/src/cryptography/hazmat/primitives/kdf/scrypt.py index df9745e68917..1fcc8f9d3643 100644 --- a/src/cryptography/hazmat/primitives/kdf/scrypt.py +++ b/src/cryptography/hazmat/primitives/kdf/scrypt.py @@ -8,7 +8,10 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import ScryptBackend from cryptography.hazmat.primitives import constant_time @@ -26,7 +29,7 @@ def __init__(self, salt, length, n, r, p, backend): if not isinstance(backend, ScryptBackend): raise UnsupportedAlgorithm( "Backend object does not implement ScryptBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._length = length diff --git a/src/cryptography/hazmat/primitives/kdf/x963kdf.py b/src/cryptography/hazmat/primitives/kdf/x963kdf.py index 9eb50b0f85fc..50c30b33d9fe 100644 --- a/src/cryptography/hazmat/primitives/kdf/x963kdf.py +++ b/src/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -8,7 +8,10 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import constant_time, hashes @@ -16,7 +19,7 @@ def _int_to_u32be(n): - return struct.pack('>I', n) + return struct.pack(">I", n) @utils.register_interface(KeyDerivationFunction) @@ -26,7 +29,8 @@ def __init__(self, algorithm, length, sharedinfo, backend): max_len = algorithm.digest_size * (2 ** 32 - 1) if length > max_len: raise ValueError( - "Can not derive keys larger than {} bits.".format(max_len)) + "Can not derive keys larger than {} bits.".format(max_len) + ) if sharedinfo is not None: utils._check_bytes("sharedinfo", sharedinfo) @@ -37,7 +41,7 @@ def __init__(self, algorithm, length, sharedinfo, backend): if not isinstance(backend, HashBackend): raise UnsupportedAlgorithm( "Backend object does not implement HashBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._backend = backend self._used = False @@ -61,7 +65,7 @@ def derive(self, key_material): outlen += len(output[-1]) counter += 1 - return b"".join(output)[:self._length] + return b"".join(output)[: self._length] def verify(self, key_material, expected_key): if not constant_time.bytes_eq(self.derive(key_material), expected_key): diff --git a/src/cryptography/hazmat/primitives/keywrap.py b/src/cryptography/hazmat/primitives/keywrap.py index f55c519cff33..7ea16d876e45 100644 --- a/src/cryptography/hazmat/primitives/keywrap.py +++ b/src/cryptography/hazmat/primitives/keywrap.py @@ -44,7 +44,7 @@ def aes_key_wrap(wrapping_key, key_to_wrap, backend): raise ValueError("The key to wrap must be a multiple of 8 bytes") a = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" - r = [key_to_wrap[i:i + 8] for i in range(0, len(key_to_wrap), 8)] + r = [key_to_wrap[i : i + 8] for i in range(0, len(key_to_wrap), 8)] return _wrap_core(wrapping_key, a, r, backend) @@ -55,9 +55,12 @@ def _unwrap_core(wrapping_key, a, r, backend): for j in reversed(range(6)): for i in reversed(range(n)): # pack/unpack are safe as these are always 64-bit chunks - atr = struct.pack( - ">Q", struct.unpack(">Q", a)[0] ^ ((n * j) + i + 1) - ) + r[i] + atr = ( + struct.pack( + ">Q", struct.unpack(">Q", a)[0] ^ ((n * j) + i + 1) + ) + + r[i] + ) # every decryption operation is a discrete 16 byte chunk so # it is safe to reuse the decryptor for the entire operation b = decryptor.update(atr) @@ -83,7 +86,7 @@ def aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend): assert encryptor.finalize() == b"" return b else: - r = [key_to_wrap[i:i + 8] for i in range(0, len(key_to_wrap), 8)] + r = [key_to_wrap[i : i + 8] for i in range(0, len(key_to_wrap), 8)] return _wrap_core(wrapping_key, aiv, r, backend) @@ -103,7 +106,7 @@ def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): data = b[8:] n = 1 else: - r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)] + r = [wrapped_key[i : i + 8] for i in range(0, len(wrapped_key), 8)] encrypted_aiv = r.pop(0) n = len(r) a, r = _unwrap_core(wrapping_key, encrypted_aiv, r, backend) @@ -117,10 +120,9 @@ def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): (mli,) = struct.unpack(">I", a[4:]) b = (8 * n) - mli if ( - not bytes_eq(a[:4], b"\xa6\x59\x59\xa6") or not - 8 * (n - 1) < mli <= 8 * n or ( - b != 0 and not bytes_eq(data[-b:], b"\x00" * b) - ) + not bytes_eq(a[:4], b"\xa6\x59\x59\xa6") + or not 8 * (n - 1) < mli <= 8 * n + or (b != 0 and not bytes_eq(data[-b:], b"\x00" * b)) ): raise InvalidUnwrap() @@ -141,7 +143,7 @@ def aes_key_unwrap(wrapping_key, wrapped_key, backend): raise ValueError("The wrapping key must be a valid AES key length") aiv = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" - r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)] + r = [wrapped_key[i : i + 8] for i in range(0, len(wrapped_key), 8)] a = r.pop(0) a, r = _unwrap_core(wrapping_key, a, r, backend) if not bytes_eq(a, aiv): diff --git a/src/cryptography/hazmat/primitives/padding.py b/src/cryptography/hazmat/primitives/padding.py index 170c80218b12..95913614cb2d 100644 --- a/src/cryptography/hazmat/primitives/padding.py +++ b/src/cryptography/hazmat/primitives/padding.py @@ -46,8 +46,8 @@ def _byte_padding_update(buffer_, data, block_size): finished_blocks = len(buffer_) // (block_size // 8) - result = buffer_[:finished_blocks * (block_size // 8)] - buffer_ = buffer_[finished_blocks * (block_size // 8):] + result = buffer_[: finished_blocks * (block_size // 8)] + buffer_ = buffer_[finished_blocks * (block_size // 8) :] return buffer_, result @@ -70,8 +70,8 @@ def _byte_unpadding_update(buffer_, data, block_size): finished_blocks = max(len(buffer_) // (block_size // 8) - 1, 0) - result = buffer_[:finished_blocks * (block_size // 8)] - buffer_ = buffer_[finished_blocks * (block_size // 8):] + result = buffer_[: finished_blocks * (block_size // 8)] + buffer_ = buffer_[finished_blocks * (block_size // 8) :] return buffer_, result @@ -113,7 +113,8 @@ def __init__(self, block_size): def update(self, data): self._buffer, result = _byte_padding_update( - self._buffer, data, self.block_size) + self._buffer, data, self.block_size + ) return result def _padding(self, size): @@ -121,7 +122,8 @@ def _padding(self, size): def finalize(self): result = _byte_padding_pad( - self._buffer, self.block_size, self._padding) + self._buffer, self.block_size, self._padding + ) self._buffer = None return result @@ -135,13 +137,14 @@ def __init__(self, block_size): def update(self, data): self._buffer, result = _byte_unpadding_update( - self._buffer, data, self.block_size) + self._buffer, data, self.block_size + ) return result def finalize(self): result = _byte_unpadding_check( - self._buffer, self.block_size, - lib.Cryptography_check_pkcs7_padding) + self._buffer, self.block_size, lib.Cryptography_check_pkcs7_padding + ) self._buffer = None return result @@ -167,7 +170,8 @@ def __init__(self, block_size): def update(self, data): self._buffer, result = _byte_padding_update( - self._buffer, data, self.block_size) + self._buffer, data, self.block_size + ) return result def _padding(self, size): @@ -175,7 +179,8 @@ def _padding(self, size): def finalize(self): result = _byte_padding_pad( - self._buffer, self.block_size, self._padding) + self._buffer, self.block_size, self._padding + ) self._buffer = None return result @@ -189,12 +194,15 @@ def __init__(self, block_size): def update(self, data): self._buffer, result = _byte_unpadding_update( - self._buffer, data, self.block_size) + self._buffer, data, self.block_size + ) return result def finalize(self): result = _byte_unpadding_check( - self._buffer, self.block_size, - lib.Cryptography_check_ansix923_padding) + self._buffer, + self.block_size, + lib.Cryptography_check_ansix923_padding, + ) self._buffer = None return result diff --git a/src/cryptography/hazmat/primitives/poly1305.py b/src/cryptography/hazmat/primitives/poly1305.py index d92f62ad4339..6439686202de 100644 --- a/src/cryptography/hazmat/primitives/poly1305.py +++ b/src/cryptography/hazmat/primitives/poly1305.py @@ -7,17 +7,20 @@ from cryptography import utils from cryptography.exceptions import ( - AlreadyFinalized, UnsupportedAlgorithm, _Reasons + AlreadyFinalized, + UnsupportedAlgorithm, + _Reasons, ) class Poly1305(object): def __init__(self, key): from cryptography.hazmat.backends.openssl.backend import backend + if not backend.poly1305_supported(): raise UnsupportedAlgorithm( "poly1305 is not supported by this version of OpenSSL.", - _Reasons.UNSUPPORTED_MAC + _Reasons.UNSUPPORTED_MAC, ) self._ctx = backend.create_poly1305_ctx(key) diff --git a/src/cryptography/hazmat/primitives/serialization/__init__.py b/src/cryptography/hazmat/primitives/serialization/__init__.py index 87e89c1f8cf5..c2f9b014a62d 100644 --- a/src/cryptography/hazmat/primitives/serialization/__init__.py +++ b/src/cryptography/hazmat/primitives/serialization/__init__.py @@ -5,21 +5,40 @@ from __future__ import absolute_import, division, print_function from cryptography.hazmat.primitives.serialization.base import ( - BestAvailableEncryption, Encoding, KeySerializationEncryption, - NoEncryption, ParameterFormat, PrivateFormat, PublicFormat, - load_der_parameters, load_der_private_key, load_der_public_key, - load_pem_parameters, load_pem_private_key, load_pem_public_key, + BestAvailableEncryption, + Encoding, + KeySerializationEncryption, + NoEncryption, + ParameterFormat, + PrivateFormat, + PublicFormat, + load_der_parameters, + load_der_private_key, + load_der_public_key, + load_pem_parameters, + load_pem_private_key, + load_pem_public_key, ) from cryptography.hazmat.primitives.serialization.ssh import ( - load_ssh_private_key, load_ssh_public_key, + load_ssh_private_key, + load_ssh_public_key, ) __all__ = [ - "load_der_parameters", "load_der_private_key", "load_der_public_key", - "load_pem_parameters", "load_pem_private_key", "load_pem_public_key", - "load_ssh_private_key", "load_ssh_public_key", - "Encoding", "PrivateFormat", "PublicFormat", - "ParameterFormat", "KeySerializationEncryption", "BestAvailableEncryption", + "load_der_parameters", + "load_der_private_key", + "load_der_public_key", + "load_pem_parameters", + "load_pem_private_key", + "load_pem_public_key", + "load_ssh_private_key", + "load_ssh_public_key", + "Encoding", + "PrivateFormat", + "PublicFormat", + "ParameterFormat", + "KeySerializationEncryption", + "BestAvailableEncryption", "NoEncryption", ] diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs12.py b/src/cryptography/hazmat/primitives/serialization/pkcs12.py index 32adef71993b..d4e5015256f0 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs12.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs12.py @@ -16,12 +16,14 @@ def load_key_and_certificates(data, password, backend): def serialize_key_and_certificates(name, key, cert, cas, encryption_algorithm): if key is not None and not isinstance( - key, (rsa.RSAPrivateKeyWithSerialization, - dsa.DSAPrivateKeyWithSerialization, - ec.EllipticCurvePrivateKeyWithSerialization)): - raise TypeError( - "Key must be RSA, DSA, or EllipticCurve private key." - ) + key, + ( + rsa.RSAPrivateKeyWithSerialization, + dsa.DSAPrivateKeyWithSerialization, + ec.EllipticCurvePrivateKeyWithSerialization, + ), + ): + raise TypeError("Key must be RSA, DSA, or EllipticCurve private key.") if cert is not None and not isinstance(cert, x509.Certificate): raise TypeError("cert must be a certificate") diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index 3971a8b84eda..35091ed309ea 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -17,10 +17,15 @@ from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.serialization import ( - Encoding, NoEncryption, PrivateFormat, PublicFormat, + Encoding, + NoEncryption, + PrivateFormat, + PublicFormat, ) + try: from bcrypt import kdf as _bcrypt_kdf + _bcrypt_supported = True except ImportError: _bcrypt_supported = False @@ -28,6 +33,7 @@ def _bcrypt_kdf(*args, **kwargs): raise UnsupportedAlgorithm("Need bcrypt module") + try: from base64 import encodebytes as _base64_encode except ImportError: @@ -140,7 +146,7 @@ def _get_mpint(data): val, data = _get_sshstr(data) if val and six.indexbytes(val, 0) > 0x7F: raise ValueError("Invalid data") - return utils.int_from_bytes(val, 'big'), data + return utils.int_from_bytes(val, "big"), data def _to_mpint(val): @@ -157,6 +163,7 @@ def _to_mpint(val): class _FragList(object): """Build recursive structure without data copy. """ + def __init__(self, init=None): self.flist = [] if init: @@ -479,7 +486,7 @@ def load_ssh_private_key(data, password, backend): data = binascii.a2b_base64(memoryview(data)[p1:p2]) if not data.startswith(_SK_MAGIC): raise ValueError("Not OpenSSH private key format") - data = memoryview(data)[len(_SK_MAGIC):] + data = memoryview(data)[len(_SK_MAGIC) :] # parse header ciphername, data = _get_sshstr(data) @@ -532,7 +539,7 @@ def load_ssh_private_key(data, password, backend): # yes, SSH does padding check *after* all other parsing is done. # need to follow as it writes zero-byte padding too. - if edata != _PADDING[:len(edata)]: + if edata != _PADDING[: len(edata)]: raise ValueError("Corrupt data: invalid padding") return private_key @@ -591,7 +598,7 @@ def serialize_ssh_private_key(private_key, password=None): f_secrets.put_sshstr(key_type) kformat.encode_private(private_key, f_secrets) f_secrets.put_sshstr(comment) - f_secrets.put_raw(_PADDING[:blklen - (f_secrets.size() % blklen)]) + f_secrets.put_raw(_PADDING[: blklen - (f_secrets.size() % blklen)]) # top-level structure f_main = _FragList() @@ -630,9 +637,9 @@ def load_ssh_public_key(data, backend): key_type = orig_key_type = m.group(1) key_body = m.group(2) with_cert = False - if _CERT_SUFFIX == key_type[-len(_CERT_SUFFIX):]: + if _CERT_SUFFIX == key_type[-len(_CERT_SUFFIX) :]: with_cert = True - key_type = key_type[:-len(_CERT_SUFFIX)] + key_type = key_type[: -len(_CERT_SUFFIX)] kformat = _lookup_kformat(key_type) try: diff --git a/src/cryptography/hazmat/primitives/twofactor/hotp.py b/src/cryptography/hazmat/primitives/twofactor/hotp.py index 4ad1bdc2f08d..ed385502e3df 100644 --- a/src/cryptography/hazmat/primitives/twofactor/hotp.py +++ b/src/cryptography/hazmat/primitives/twofactor/hotp.py @@ -8,9 +8,7 @@ import six -from cryptography.exceptions import ( - UnsupportedAlgorithm, _Reasons -) +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time, hmac from cryptography.hazmat.primitives.hashes import SHA1, SHA256, SHA512 @@ -19,12 +17,13 @@ class HOTP(object): - def __init__(self, key, length, algorithm, backend, - enforce_key_length=True): + def __init__( + self, key, length, algorithm, backend, enforce_key_length=True + ): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) if len(key) < 16 and enforce_key_length is True: @@ -59,10 +58,10 @@ def _dynamic_truncate(self, counter): hmac_value = ctx.finalize() offset = six.indexbytes(hmac_value, len(hmac_value) - 1) & 0b1111 - p = hmac_value[offset:offset + 4] - return struct.unpack(">I", p)[0] & 0x7fffffff + p = hmac_value[offset : offset + 4] + return struct.unpack(">I", p)[0] & 0x7FFFFFFF def get_provisioning_uri(self, account_name, counter, issuer): - return _generate_uri(self, "hotp", account_name, issuer, [ - ("counter", int(counter)), - ]) + return _generate_uri( + self, "hotp", account_name, issuer, [("counter", int(counter))] + ) diff --git a/src/cryptography/hazmat/primitives/twofactor/totp.py b/src/cryptography/hazmat/primitives/twofactor/totp.py index 499f2824a8e9..6056321eacba 100644 --- a/src/cryptography/hazmat/primitives/twofactor/totp.py +++ b/src/cryptography/hazmat/primitives/twofactor/totp.py @@ -4,9 +4,7 @@ from __future__ import absolute_import, division, print_function -from cryptography.exceptions import ( - UnsupportedAlgorithm, _Reasons -) +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.primitives.twofactor import InvalidToken @@ -15,12 +13,19 @@ class TOTP(object): - def __init__(self, key, length, algorithm, time_step, backend, - enforce_key_length=True): + def __init__( + self, + key, + length, + algorithm, + time_step, + backend, + enforce_key_length=True, + ): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", - _Reasons.BACKEND_MISSING_INTERFACE + _Reasons.BACKEND_MISSING_INTERFACE, ) self._time_step = time_step @@ -35,6 +40,10 @@ def verify(self, totp, time): raise InvalidToken("Supplied TOTP value does not match.") def get_provisioning_uri(self, account_name, issuer): - return _generate_uri(self._hotp, "totp", account_name, issuer, [ - ("period", int(self._time_step)), - ]) + return _generate_uri( + self._hotp, + "totp", + account_name, + issuer, + [("period", int(self._time_step))], + ) diff --git a/src/cryptography/hazmat/primitives/twofactor/utils.py b/src/cryptography/hazmat/primitives/twofactor/utils.py index 0ed8c4c89d57..0afa1ccc04b0 100644 --- a/src/cryptography/hazmat/primitives/twofactor/utils.py +++ b/src/cryptography/hazmat/primitives/twofactor/utils.py @@ -23,8 +23,11 @@ def _generate_uri(hotp, type_name, account_name, issuer, extra_parameters): uriparts = { "type": type_name, - "label": ("%s:%s" % (quote(issuer), quote(account_name)) if issuer - else quote(account_name)), + "label": ( + "%s:%s" % (quote(issuer), quote(account_name)) + if issuer + else quote(account_name) + ), "parameters": urlencode(parameters), } return "otpauth://{type}/{label}?{parameters}".format(**uriparts) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index ff4f81d24887..c65768363267 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -45,6 +45,7 @@ def register_decorator(klass): verify_interface(iface, klass) iface.register(klass) return klass + return register_decorator @@ -54,27 +55,33 @@ def register_decorator(klass): verify_interface(iface, klass) iface.register(klass) return klass + return register_decorator if hasattr(int, "from_bytes"): int_from_bytes = int.from_bytes else: + def int_from_bytes(data, byteorder, signed=False): - assert byteorder == 'big' + assert byteorder == "big" assert not signed return int(binascii.hexlify(data), 16) if hasattr(int, "to_bytes"): + def int_to_bytes(integer, length=None): return integer.to_bytes( - length or (integer.bit_length() + 7) // 8 or 1, 'big' + length or (integer.bit_length() + 7) // 8 or 1, "big" ) + + else: + def int_to_bytes(integer, length=None): - hex_string = '%x' % integer + hex_string = "%x" % integer if length is None: n = len(hex_string) else: @@ -106,9 +113,7 @@ def verify_interface(iface, klass): if sig != actual: raise InterfaceNotImplemented( "{}.{}'s signature differs from the expected. Expected: " - "{!r}. Received: {!r}".format( - klass, method, sig, actual - ) + "{!r}. Received: {!r}".format(klass, method, sig, actual) ) @@ -168,4 +173,5 @@ def inner(instance): result = func(instance) setattr(instance, cached_name, result) return result + return property(inner) diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index 47b790089d27..69630e4cba8b 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -6,40 +6,95 @@ from cryptography.x509 import certificate_transparency from cryptography.x509.base import ( - AttributeNotFound, Certificate, CertificateBuilder, - CertificateRevocationList, CertificateRevocationListBuilder, - CertificateSigningRequest, CertificateSigningRequestBuilder, - InvalidVersion, RevokedCertificate, RevokedCertificateBuilder, - Version, load_der_x509_certificate, load_der_x509_crl, load_der_x509_csr, - load_pem_x509_certificate, load_pem_x509_crl, load_pem_x509_csr, + AttributeNotFound, + Certificate, + CertificateBuilder, + CertificateRevocationList, + CertificateRevocationListBuilder, + CertificateSigningRequest, + CertificateSigningRequestBuilder, + InvalidVersion, + RevokedCertificate, + RevokedCertificateBuilder, + Version, + load_der_x509_certificate, + load_der_x509_crl, + load_der_x509_csr, + load_pem_x509_certificate, + load_pem_x509_crl, + load_pem_x509_csr, random_serial_number, ) from cryptography.x509.extensions import ( - AccessDescription, AuthorityInformationAccess, - AuthorityKeyIdentifier, BasicConstraints, CRLDistributionPoints, - CRLNumber, CRLReason, CertificateIssuer, CertificatePolicies, - DeltaCRLIndicator, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, - Extension, ExtensionNotFound, ExtensionType, Extensions, FreshestCRL, - GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, - IssuingDistributionPoint, KeyUsage, NameConstraints, NoticeReference, - OCSPNoCheck, OCSPNonce, PolicyConstraints, PolicyInformation, - PrecertPoison, PrecertificateSignedCertificateTimestamps, ReasonFlags, - SignedCertificateTimestamps, SubjectAlternativeName, - SubjectInformationAccess, SubjectKeyIdentifier, - TLSFeature, TLSFeatureType, UnrecognizedExtension, UserNotice + AccessDescription, + AuthorityInformationAccess, + AuthorityKeyIdentifier, + BasicConstraints, + CRLDistributionPoints, + CRLNumber, + CRLReason, + CertificateIssuer, + CertificatePolicies, + DeltaCRLIndicator, + DistributionPoint, + DuplicateExtension, + ExtendedKeyUsage, + Extension, + ExtensionNotFound, + ExtensionType, + Extensions, + FreshestCRL, + GeneralNames, + InhibitAnyPolicy, + InvalidityDate, + IssuerAlternativeName, + IssuingDistributionPoint, + KeyUsage, + NameConstraints, + NoticeReference, + OCSPNoCheck, + OCSPNonce, + PolicyConstraints, + PolicyInformation, + PrecertPoison, + PrecertificateSignedCertificateTimestamps, + ReasonFlags, + SignedCertificateTimestamps, + SubjectAlternativeName, + SubjectInformationAccess, + SubjectKeyIdentifier, + TLSFeature, + TLSFeatureType, + UnrecognizedExtension, + UserNotice, ) from cryptography.x509.general_name import ( - DNSName, DirectoryName, GeneralName, IPAddress, OtherName, RFC822Name, - RegisteredID, UniformResourceIdentifier, UnsupportedGeneralNameType, - _GENERAL_NAMES + DNSName, + DirectoryName, + GeneralName, + IPAddress, + OtherName, + RFC822Name, + RegisteredID, + UniformResourceIdentifier, + UnsupportedGeneralNameType, + _GENERAL_NAMES, ) from cryptography.x509.name import ( - Name, NameAttribute, RelativeDistinguishedName + Name, + NameAttribute, + RelativeDistinguishedName, ) from cryptography.x509.oid import ( - AuthorityInformationAccessOID, CRLEntryExtensionOID, - CertificatePoliciesOID, ExtendedKeyUsageOID, ExtensionOID, NameOID, - ObjectIdentifier, SignatureAlgorithmOID, _SIG_OIDS_TO_HASH + AuthorityInformationAccessOID, + CRLEntryExtensionOID, + CertificatePoliciesOID, + ExtendedKeyUsageOID, + ExtensionOID, + NameOID, + ObjectIdentifier, + SignatureAlgorithmOID, + _SIG_OIDS_TO_HASH, ) diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 526fb5d6d582..102468a45bb5 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -13,7 +13,11 @@ from cryptography import utils from cryptography.hazmat.primitives.asymmetric import ( - dsa, ec, ed25519, ed448, rsa + dsa, + ec, + ed25519, + ed448, + rsa, ) from cryptography.x509.extensions import Extension, ExtensionType from cryptography.x509.name import Name @@ -33,14 +37,14 @@ def _reject_duplicate_extension(extension, extensions): # This is quadratic in the number of extensions for e in extensions: if e.oid == extension.oid: - raise ValueError('This extension has already been set.') + raise ValueError("This extension has already been set.") def _reject_duplicate_attribute(oid, attributes): # This is quadratic in the number of attributes for attr_oid, _ in attributes: if attr_oid == oid: - raise ValueError('This attribute has already been set.') + raise ValueError("This attribute has already been set.") def _convert_to_naive_utc_time(time): @@ -423,9 +427,9 @@ def subject_name(self, name): Sets the certificate requestor's distinguished name. """ if not isinstance(name, Name): - raise TypeError('Expecting x509.Name object.') + raise TypeError("Expecting x509.Name object.") if self._subject_name is not None: - raise ValueError('The subject name may only be set once.') + raise ValueError("The subject name may only be set once.") return CertificateSigningRequestBuilder( name, self._extensions, self._attributes ) @@ -441,8 +445,9 @@ def add_extension(self, extension, critical): _reject_duplicate_extension(extension, self._extensions) return CertificateSigningRequestBuilder( - self._subject_name, self._extensions + [extension], - self._attributes + self._subject_name, + self._extensions + [extension], + self._attributes, ) def add_attribute(self, oid, value): @@ -458,8 +463,9 @@ def add_attribute(self, oid, value): _reject_duplicate_attribute(oid, self._attributes) return CertificateSigningRequestBuilder( - self._subject_name, self._extensions, - self._attributes + [(oid, value)] + self._subject_name, + self._extensions, + self._attributes + [(oid, value)], ) def sign(self, private_key, algorithm, backend): @@ -472,9 +478,16 @@ def sign(self, private_key, algorithm, backend): class CertificateBuilder(object): - def __init__(self, issuer_name=None, subject_name=None, - public_key=None, serial_number=None, not_valid_before=None, - not_valid_after=None, extensions=[]): + def __init__( + self, + issuer_name=None, + subject_name=None, + public_key=None, + serial_number=None, + not_valid_before=None, + not_valid_after=None, + extensions=[], + ): self._version = Version.v3 self._issuer_name = issuer_name self._subject_name = subject_name @@ -489,13 +502,17 @@ def issuer_name(self, name): Sets the CA's distinguished name. """ if not isinstance(name, Name): - raise TypeError('Expecting x509.Name object.') + raise TypeError("Expecting x509.Name object.") if self._issuer_name is not None: - raise ValueError('The issuer name may only be set once.') + raise ValueError("The issuer name may only be set once.") return CertificateBuilder( - name, self._subject_name, self._public_key, - self._serial_number, self._not_valid_before, - self._not_valid_after, self._extensions + name, + self._subject_name, + self._public_key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions, ) def subject_name(self, name): @@ -503,32 +520,48 @@ def subject_name(self, name): Sets the requestor's distinguished name. """ if not isinstance(name, Name): - raise TypeError('Expecting x509.Name object.') + raise TypeError("Expecting x509.Name object.") if self._subject_name is not None: - raise ValueError('The subject name may only be set once.') + raise ValueError("The subject name may only be set once.") return CertificateBuilder( - self._issuer_name, name, self._public_key, - self._serial_number, self._not_valid_before, - self._not_valid_after, self._extensions + self._issuer_name, + name, + self._public_key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions, ) def public_key(self, key): """ Sets the requestor's public key (as found in the signing request). """ - if not isinstance(key, (dsa.DSAPublicKey, rsa.RSAPublicKey, - ec.EllipticCurvePublicKey, - ed25519.Ed25519PublicKey, - ed448.Ed448PublicKey)): - raise TypeError('Expecting one of DSAPublicKey, RSAPublicKey,' - ' EllipticCurvePublicKey, Ed25519PublicKey or' - ' Ed448PublicKey.') + if not isinstance( + key, + ( + dsa.DSAPublicKey, + rsa.RSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, + ), + ): + raise TypeError( + "Expecting one of DSAPublicKey, RSAPublicKey," + " EllipticCurvePublicKey, Ed25519PublicKey or" + " Ed448PublicKey." + ) if self._public_key is not None: - raise ValueError('The public key may only be set once.') + raise ValueError("The public key may only be set once.") return CertificateBuilder( - self._issuer_name, self._subject_name, key, - self._serial_number, self._not_valid_before, - self._not_valid_after, self._extensions + self._issuer_name, + self._subject_name, + key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions, ) def serial_number(self, number): @@ -536,21 +569,26 @@ def serial_number(self, number): Sets the certificate serial number. """ if not isinstance(number, six.integer_types): - raise TypeError('Serial number must be of integral type.') + raise TypeError("Serial number must be of integral type.") if self._serial_number is not None: - raise ValueError('The serial number may only be set once.') + raise ValueError("The serial number may only be set once.") if number <= 0: - raise ValueError('The serial number should be positive.') + raise ValueError("The serial number should be positive.") # ASN.1 integers are always signed, so most significant bit must be # zero. if number.bit_length() >= 160: # As defined in RFC 5280 - raise ValueError('The serial number should not be more than 159 ' - 'bits.') + raise ValueError( + "The serial number should not be more than 159 " "bits." + ) return CertificateBuilder( - self._issuer_name, self._subject_name, - self._public_key, number, self._not_valid_before, - self._not_valid_after, self._extensions + self._issuer_name, + self._subject_name, + self._public_key, + number, + self._not_valid_before, + self._not_valid_after, + self._extensions, ) def not_valid_before(self, time): @@ -558,22 +596,28 @@ def not_valid_before(self, time): Sets the certificate activation time. """ if not isinstance(time, datetime.datetime): - raise TypeError('Expecting datetime object.') + raise TypeError("Expecting datetime object.") if self._not_valid_before is not None: - raise ValueError('The not valid before may only be set once.') + raise ValueError("The not valid before may only be set once.") time = _convert_to_naive_utc_time(time) if time < _EARLIEST_UTC_TIME: - raise ValueError('The not valid before date must be on or after' - ' 1950 January 1).') + raise ValueError( + "The not valid before date must be on or after" + " 1950 January 1)." + ) if self._not_valid_after is not None and time > self._not_valid_after: raise ValueError( - 'The not valid before date must be before the not valid after ' - 'date.' + "The not valid before date must be before the not valid after " + "date." ) return CertificateBuilder( - self._issuer_name, self._subject_name, - self._public_key, self._serial_number, time, - self._not_valid_after, self._extensions + self._issuer_name, + self._subject_name, + self._public_key, + self._serial_number, + time, + self._not_valid_after, + self._extensions, ) def not_valid_after(self, time): @@ -581,23 +625,31 @@ def not_valid_after(self, time): Sets the certificate expiration time. """ if not isinstance(time, datetime.datetime): - raise TypeError('Expecting datetime object.') + raise TypeError("Expecting datetime object.") if self._not_valid_after is not None: - raise ValueError('The not valid after may only be set once.') + raise ValueError("The not valid after may only be set once.") time = _convert_to_naive_utc_time(time) if time < _EARLIEST_UTC_TIME: - raise ValueError('The not valid after date must be on or after' - ' 1950 January 1.') - if (self._not_valid_before is not None and - time < self._not_valid_before): raise ValueError( - 'The not valid after date must be after the not valid before ' - 'date.' + "The not valid after date must be on or after" + " 1950 January 1." + ) + if ( + self._not_valid_before is not None + and time < self._not_valid_before + ): + raise ValueError( + "The not valid after date must be after the not valid before " + "date." ) return CertificateBuilder( - self._issuer_name, self._subject_name, - self._public_key, self._serial_number, self._not_valid_before, - time, self._extensions + self._issuer_name, + self._subject_name, + self._public_key, + self._serial_number, + self._not_valid_before, + time, + self._extensions, ) def add_extension(self, extension, critical): @@ -611,9 +663,13 @@ def add_extension(self, extension, critical): _reject_duplicate_extension(extension, self._extensions) return CertificateBuilder( - self._issuer_name, self._subject_name, - self._public_key, self._serial_number, self._not_valid_before, - self._not_valid_after, self._extensions + [extension] + self._issuer_name, + self._subject_name, + self._public_key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions + [extension], ) def sign(self, private_key, algorithm, backend): @@ -642,8 +698,14 @@ def sign(self, private_key, algorithm, backend): class CertificateRevocationListBuilder(object): - def __init__(self, issuer_name=None, last_update=None, next_update=None, - extensions=[], revoked_certificates=[]): + def __init__( + self, + issuer_name=None, + last_update=None, + next_update=None, + extensions=[], + revoked_certificates=[], + ): self._issuer_name = issuer_name self._last_update = last_update self._next_update = next_update @@ -652,48 +714,59 @@ def __init__(self, issuer_name=None, last_update=None, next_update=None, def issuer_name(self, issuer_name): if not isinstance(issuer_name, Name): - raise TypeError('Expecting x509.Name object.') + raise TypeError("Expecting x509.Name object.") if self._issuer_name is not None: - raise ValueError('The issuer name may only be set once.') + raise ValueError("The issuer name may only be set once.") return CertificateRevocationListBuilder( - issuer_name, self._last_update, self._next_update, - self._extensions, self._revoked_certificates + issuer_name, + self._last_update, + self._next_update, + self._extensions, + self._revoked_certificates, ) def last_update(self, last_update): if not isinstance(last_update, datetime.datetime): - raise TypeError('Expecting datetime object.') + raise TypeError("Expecting datetime object.") if self._last_update is not None: - raise ValueError('Last update may only be set once.') + raise ValueError("Last update may only be set once.") last_update = _convert_to_naive_utc_time(last_update) if last_update < _EARLIEST_UTC_TIME: - raise ValueError('The last update date must be on or after' - ' 1950 January 1.') + raise ValueError( + "The last update date must be on or after" " 1950 January 1." + ) if self._next_update is not None and last_update > self._next_update: raise ValueError( - 'The last update date must be before the next update date.' + "The last update date must be before the next update date." ) return CertificateRevocationListBuilder( - self._issuer_name, last_update, self._next_update, - self._extensions, self._revoked_certificates + self._issuer_name, + last_update, + self._next_update, + self._extensions, + self._revoked_certificates, ) def next_update(self, next_update): if not isinstance(next_update, datetime.datetime): - raise TypeError('Expecting datetime object.') + raise TypeError("Expecting datetime object.") if self._next_update is not None: - raise ValueError('Last update may only be set once.') + raise ValueError("Last update may only be set once.") next_update = _convert_to_naive_utc_time(next_update) if next_update < _EARLIEST_UTC_TIME: - raise ValueError('The last update date must be on or after' - ' 1950 January 1.') + raise ValueError( + "The last update date must be on or after" " 1950 January 1." + ) if self._last_update is not None and next_update < self._last_update: raise ValueError( - 'The next update date must be after the last update date.' + "The next update date must be after the last update date." ) return CertificateRevocationListBuilder( - self._issuer_name, self._last_update, next_update, - self._extensions, self._revoked_certificates + self._issuer_name, + self._last_update, + next_update, + self._extensions, + self._revoked_certificates, ) def add_extension(self, extension, critical): @@ -706,8 +779,11 @@ def add_extension(self, extension, critical): extension = Extension(extension.oid, critical, extension) _reject_duplicate_extension(extension, self._extensions) return CertificateRevocationListBuilder( - self._issuer_name, self._last_update, self._next_update, - self._extensions + [extension], self._revoked_certificates + self._issuer_name, + self._last_update, + self._next_update, + self._extensions + [extension], + self._revoked_certificates, ) def add_revoked_certificate(self, revoked_certificate): @@ -718,9 +794,11 @@ def add_revoked_certificate(self, revoked_certificate): raise TypeError("Must be an instance of RevokedCertificate") return CertificateRevocationListBuilder( - self._issuer_name, self._last_update, - self._next_update, self._extensions, - self._revoked_certificates + [revoked_certificate] + self._issuer_name, + self._last_update, + self._next_update, + self._extensions, + self._revoked_certificates + [revoked_certificate], ) def sign(self, private_key, algorithm, backend): @@ -737,38 +815,41 @@ def sign(self, private_key, algorithm, backend): class RevokedCertificateBuilder(object): - def __init__(self, serial_number=None, revocation_date=None, - extensions=[]): + def __init__( + self, serial_number=None, revocation_date=None, extensions=[] + ): self._serial_number = serial_number self._revocation_date = revocation_date self._extensions = extensions def serial_number(self, number): if not isinstance(number, six.integer_types): - raise TypeError('Serial number must be of integral type.') + raise TypeError("Serial number must be of integral type.") if self._serial_number is not None: - raise ValueError('The serial number may only be set once.') + raise ValueError("The serial number may only be set once.") if number <= 0: - raise ValueError('The serial number should be positive') + raise ValueError("The serial number should be positive") # ASN.1 integers are always signed, so most significant bit must be # zero. if number.bit_length() >= 160: # As defined in RFC 5280 - raise ValueError('The serial number should not be more than 159 ' - 'bits.') + raise ValueError( + "The serial number should not be more than 159 " "bits." + ) return RevokedCertificateBuilder( number, self._revocation_date, self._extensions ) def revocation_date(self, time): if not isinstance(time, datetime.datetime): - raise TypeError('Expecting datetime object.') + raise TypeError("Expecting datetime object.") if self._revocation_date is not None: - raise ValueError('The revocation date may only be set once.') + raise ValueError("The revocation date may only be set once.") time = _convert_to_naive_utc_time(time) if time < _EARLIEST_UTC_TIME: - raise ValueError('The revocation date must be on or after' - ' 1950 January 1.') + raise ValueError( + "The revocation date must be on or after" " 1950 January 1." + ) return RevokedCertificateBuilder( self._serial_number, time, self._extensions ) @@ -780,8 +861,9 @@ def add_extension(self, extension, critical): extension = Extension(extension.oid, critical, extension) _reject_duplicate_extension(extension, self._extensions) return RevokedCertificateBuilder( - self._serial_number, self._revocation_date, - self._extensions + [extension] + self._serial_number, + self._revocation_date, + self._extensions + [extension], ) def build(self, backend): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index e4a6e821d63e..6a9ead51f0a8 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -14,37 +14,42 @@ from cryptography import utils from cryptography.hazmat._der import ( - BIT_STRING, DERReader, OBJECT_IDENTIFIER, SEQUENCE + BIT_STRING, + DERReader, + OBJECT_IDENTIFIER, + SEQUENCE, ) from cryptography.hazmat.primitives import constant_time, serialization from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePublicKey from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey from cryptography.x509.certificate_transparency import ( - SignedCertificateTimestamp + SignedCertificateTimestamp, ) from cryptography.x509.general_name import GeneralName, IPAddress, OtherName from cryptography.x509.name import RelativeDistinguishedName from cryptography.x509.oid import ( - CRLEntryExtensionOID, ExtensionOID, OCSPExtensionOID, ObjectIdentifier, + CRLEntryExtensionOID, + ExtensionOID, + OCSPExtensionOID, + ObjectIdentifier, ) def _key_identifier_from_public_key(public_key): if isinstance(public_key, RSAPublicKey): data = public_key.public_bytes( - serialization.Encoding.DER, - serialization.PublicFormat.PKCS1, + serialization.Encoding.DER, serialization.PublicFormat.PKCS1, ) elif isinstance(public_key, EllipticCurvePublicKey): data = public_key.public_bytes( serialization.Encoding.X962, - serialization.PublicFormat.UncompressedPoint + serialization.PublicFormat.UncompressedPoint, ) else: # This is a very slow way to do this. serialized = public_key.public_bytes( serialization.Encoding.DER, - serialization.PublicFormat.SubjectPublicKeyInfo + serialization.PublicFormat.SubjectPublicKeyInfo, ) reader = DERReader(serialized) @@ -62,7 +67,7 @@ def _key_identifier_from_public_key(public_key): # BIT STRING contents begin with the number of padding bytes added. It # must be zero for SubjectPublicKeyInfo structures. if public_key.read_byte() != 0: - raise ValueError('Invalid public key encoding') + raise ValueError("Invalid public key encoding") data = public_key.data @@ -133,9 +138,7 @@ def get_extension_for_class(self, extclass): __len__, __iter__, __getitem__ = _make_sequence_methods("_extensions") def __repr__(self): - return ( - "".format(self._extensions) - ) + return "".format(self._extensions) @utils.register_interface(ExtensionType) @@ -170,8 +173,12 @@ def __repr__(self): class AuthorityKeyIdentifier(object): oid = ExtensionOID.AUTHORITY_KEY_IDENTIFIER - def __init__(self, key_identifier, authority_cert_issuer, - authority_cert_serial_number): + def __init__( + self, + key_identifier, + authority_cert_issuer, + authority_cert_serial_number, + ): if (authority_cert_issuer is None) != ( authority_cert_serial_number is None ): @@ -193,9 +200,7 @@ def __init__(self, key_identifier, authority_cert_issuer, if authority_cert_serial_number is not None and not isinstance( authority_cert_serial_number, six.integer_types ): - raise TypeError( - "authority_cert_serial_number must be an integer" - ) + raise TypeError("authority_cert_serial_number must be an integer") self._key_identifier = key_identifier self._authority_cert_issuer = authority_cert_issuer @@ -207,7 +212,7 @@ def from_issuer_public_key(cls, public_key): return cls( key_identifier=digest, authority_cert_issuer=None, - authority_cert_serial_number=None + authority_cert_serial_number=None, ) @classmethod @@ -215,7 +220,7 @@ def from_issuer_subject_key_identifier(cls, ski): return cls( key_identifier=ski.digest, authority_cert_issuer=None, - authority_cert_serial_number=None + authority_cert_serial_number=None, ) def __repr__(self): @@ -231,10 +236,10 @@ def __eq__(self, other): return NotImplemented return ( - self.key_identifier == other.key_identifier and - self.authority_cert_issuer == other.authority_cert_issuer and - self.authority_cert_serial_number == - other.authority_cert_serial_number + self.key_identifier == other.key_identifier + and self.authority_cert_issuer == other.authority_cert_issuer + and self.authority_cert_serial_number + == other.authority_cert_serial_number ) def __ne__(self, other): @@ -245,9 +250,9 @@ def __hash__(self): aci = None else: aci = tuple(self.authority_cert_issuer) - return hash(( - self.key_identifier, aci, self.authority_cert_serial_number - )) + return hash( + (self.key_identifier, aci, self.authority_cert_serial_number) + ) key_identifier = utils.read_only_property("_key_identifier") authority_cert_issuer = utils.read_only_property("_authority_cert_issuer") @@ -371,8 +376,8 @@ def __eq__(self, other): return NotImplemented return ( - self.access_method == other.access_method and - self.access_location == other.access_location + self.access_method == other.access_method + and self.access_location == other.access_location ) def __ne__(self, other): @@ -396,9 +401,8 @@ def __init__(self, ca, path_length): if path_length is not None and not ca: raise ValueError("path_length must be None when ca is False") - if ( - path_length is not None and - (not isinstance(path_length, six.integer_types) or path_length < 0) + if path_length is not None and ( + not isinstance(path_length, six.integer_types) or path_length < 0 ): raise TypeError( "path_length must be a non-negative integer or None" @@ -411,8 +415,9 @@ def __init__(self, ca, path_length): path_length = utils.read_only_property("_path_length") def __repr__(self): - return ("").format(self) + return ( + "" + ).format(self) def __eq__(self, other): if not isinstance(other, BasicConstraints): @@ -555,14 +560,15 @@ def __init__(self, full_name, relative_name, reasons, crl_issuer): "crl_issuer must be None or a list of general names" ) - if reasons and (not isinstance(reasons, frozenset) or not all( - isinstance(x, ReasonFlags) for x in reasons - )): + if reasons and ( + not isinstance(reasons, frozenset) + or not all(isinstance(x, ReasonFlags) for x in reasons) + ): raise TypeError("reasons must be None or frozenset of ReasonFlags") if reasons and ( - ReasonFlags.unspecified in reasons or - ReasonFlags.remove_from_crl in reasons + ReasonFlags.unspecified in reasons + or ReasonFlags.remove_from_crl in reasons ): raise ValueError( "unspecified and remove_from_crl are not valid reasons in a " @@ -583,8 +589,8 @@ def __init__(self, full_name, relative_name, reasons, crl_issuer): def __repr__(self): return ( "" - .format(self) + "tive_name}, reasons={0.reasons}, " + "crl_issuer={0.crl_issuer})>".format(self) ) def __eq__(self, other): @@ -592,10 +598,10 @@ def __eq__(self, other): return NotImplemented return ( - self.full_name == other.full_name and - self.relative_name == other.relative_name and - self.reasons == other.reasons and - self.crl_issuer == other.crl_issuer + self.full_name == other.full_name + and self.relative_name == other.relative_name + and self.reasons == other.reasons + and self.crl_issuer == other.crl_issuer ) def __ne__(self, other): @@ -674,8 +680,8 @@ def __eq__(self, other): return NotImplemented return ( - self.require_explicit_policy == other.require_explicit_policy and - self.inhibit_policy_mapping == other.inhibit_policy_mapping + self.require_explicit_policy == other.require_explicit_policy + and self.inhibit_policy_mapping == other.inhibit_policy_mapping ) def __ne__(self, other): @@ -736,8 +742,8 @@ def __init__(self, policy_identifier, policy_qualifiers): if policy_qualifiers: policy_qualifiers = list(policy_qualifiers) if not all( - isinstance(x, (six.text_type, UserNotice)) - for x in policy_qualifiers + isinstance(x, (six.text_type, UserNotice)) + for x in policy_qualifiers ): raise TypeError( "policy_qualifiers must be a list of strings and/or " @@ -757,8 +763,8 @@ def __eq__(self, other): return NotImplemented return ( - self.policy_identifier == other.policy_identifier and - self.policy_qualifiers == other.policy_qualifiers + self.policy_identifier == other.policy_identifier + and self.policy_qualifiers == other.policy_qualifiers ) def __ne__(self, other): @@ -799,8 +805,8 @@ def __eq__(self, other): return NotImplemented return ( - self.notice_reference == other.notice_reference and - self.explicit_text == other.explicit_text + self.notice_reference == other.notice_reference + and self.explicit_text == other.explicit_text ) def __ne__(self, other): @@ -818,9 +824,7 @@ def __init__(self, organization, notice_numbers): self._organization = organization notice_numbers = list(notice_numbers) if not all(isinstance(x, int) for x in notice_numbers): - raise TypeError( - "notice_numbers must be a list of integers" - ) + raise TypeError("notice_numbers must be a list of integers") self._notice_numbers = notice_numbers @@ -835,8 +839,8 @@ def __eq__(self, other): return NotImplemented return ( - self.organization == other.organization and - self.notice_numbers == other.notice_numbers + self.organization == other.organization + and self.notice_numbers == other.notice_numbers ) def __ne__(self, other): @@ -927,8 +931,8 @@ class TLSFeature(object): def __init__(self, features): features = list(features) if ( - not all(isinstance(x, TLSFeatureType) for x in features) or - len(features) == 0 + not all(isinstance(x, TLSFeatureType) for x in features) + or len(features) == 0 ): raise TypeError( "features must be a list of elements from the TLSFeatureType " @@ -1004,9 +1008,18 @@ def __hash__(self): class KeyUsage(object): oid = ExtensionOID.KEY_USAGE - def __init__(self, digital_signature, content_commitment, key_encipherment, - data_encipherment, key_agreement, key_cert_sign, crl_sign, - encipher_only, decipher_only): + def __init__( + self, + digital_signature, + content_commitment, + key_encipherment, + data_encipherment, + key_agreement, + key_cert_sign, + crl_sign, + encipher_only, + decipher_only, + ): if not key_agreement and (encipher_only or decipher_only): raise ValueError( "encipher_only and decipher_only can only be true when " @@ -1060,42 +1073,49 @@ def __repr__(self): encipher_only = False decipher_only = False - return ("").format( - self, encipher_only, decipher_only) + return ( + "" + ).format(self, encipher_only, decipher_only) def __eq__(self, other): if not isinstance(other, KeyUsage): return NotImplemented return ( - self.digital_signature == other.digital_signature and - self.content_commitment == other.content_commitment and - self.key_encipherment == other.key_encipherment and - self.data_encipherment == other.data_encipherment and - self.key_agreement == other.key_agreement and - self.key_cert_sign == other.key_cert_sign and - self.crl_sign == other.crl_sign and - self._encipher_only == other._encipher_only and - self._decipher_only == other._decipher_only + self.digital_signature == other.digital_signature + and self.content_commitment == other.content_commitment + and self.key_encipherment == other.key_encipherment + and self.data_encipherment == other.data_encipherment + and self.key_agreement == other.key_agreement + and self.key_cert_sign == other.key_cert_sign + and self.crl_sign == other.crl_sign + and self._encipher_only == other._encipher_only + and self._decipher_only == other._decipher_only ) def __ne__(self, other): return not self == other def __hash__(self): - return hash(( - self.digital_signature, self.content_commitment, - self.key_encipherment, self.data_encipherment, - self.key_agreement, self.key_cert_sign, - self.crl_sign, self._encipher_only, - self._decipher_only - )) + return hash( + ( + self.digital_signature, + self.content_commitment, + self.key_encipherment, + self.data_encipherment, + self.key_agreement, + self.key_cert_sign, + self.crl_sign, + self._encipher_only, + self._decipher_only, + ) + ) @utils.register_interface(ExtensionType) @@ -1105,9 +1125,7 @@ class NameConstraints(object): def __init__(self, permitted_subtrees, excluded_subtrees): if permitted_subtrees is not None: permitted_subtrees = list(permitted_subtrees) - if not all( - isinstance(x, GeneralName) for x in permitted_subtrees - ): + if not all(isinstance(x, GeneralName) for x in permitted_subtrees): raise TypeError( "permitted_subtrees must be a list of GeneralName objects " "or None" @@ -1117,9 +1135,7 @@ def __init__(self, permitted_subtrees, excluded_subtrees): if excluded_subtrees is not None: excluded_subtrees = list(excluded_subtrees) - if not all( - isinstance(x, GeneralName) for x in excluded_subtrees - ): + if not all(isinstance(x, GeneralName) for x in excluded_subtrees): raise TypeError( "excluded_subtrees must be a list of GeneralName objects " "or None" @@ -1141,17 +1157,21 @@ def __eq__(self, other): return NotImplemented return ( - self.excluded_subtrees == other.excluded_subtrees and - self.permitted_subtrees == other.permitted_subtrees + self.excluded_subtrees == other.excluded_subtrees + and self.permitted_subtrees == other.permitted_subtrees ) def __ne__(self, other): return not self == other def _validate_ip_name(self, tree): - if any(isinstance(name, IPAddress) and not isinstance( - name.value, (ipaddress.IPv4Network, ipaddress.IPv6Network) - ) for name in tree): + if any( + isinstance(name, IPAddress) + and not isinstance( + name.value, (ipaddress.IPv4Network, ipaddress.IPv6Network) + ) + for name in tree + ): raise TypeError( "IPAddress name constraints must be an IPv4Network or" " IPv6Network object" @@ -1199,17 +1219,19 @@ def __init__(self, oid, critical, value): value = utils.read_only_property("_value") def __repr__(self): - return ("").format(self) + return ( + "" + ).format(self) def __eq__(self, other): if not isinstance(other, Extension): return NotImplemented return ( - self.oid == other.oid and - self.critical == other.critical and - self.value == other.value + self.oid == other.oid + and self.critical == other.critical + and self.value == other.value ) def __ne__(self, other): @@ -1229,6 +1251,7 @@ def __init__(self, general_names): ) self._general_names = general_names + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") def get_values_for_type(self, type): @@ -1419,10 +1442,8 @@ def __init__(self, signed_certificate_timestamps): ) def __repr__(self): - return ( - "".format( - list(self) - ) + return "".format( + list(self) ) def __hash__(self): @@ -1433,8 +1454,8 @@ def __eq__(self, other): return NotImplemented return ( - self._signed_certificate_timestamps == - other._signed_certificate_timestamps + self._signed_certificate_timestamps + == other._signed_certificate_timestamps ) def __ne__(self, other): @@ -1462,11 +1483,7 @@ def __init__(self, signed_certificate_timestamps): ) def __repr__(self): - return ( - "".format( - list(self) - ) - ) + return "".format(list(self)) def __hash__(self): return hash(tuple(self._signed_certificate_timestamps)) @@ -1476,8 +1493,8 @@ def __eq__(self, other): return NotImplemented return ( - self._signed_certificate_timestamps == - other._signed_certificate_timestamps + self._signed_certificate_timestamps + == other._signed_certificate_timestamps ) def __ne__(self, other): @@ -1516,23 +1533,27 @@ def __repr__(self): class IssuingDistributionPoint(object): oid = ExtensionOID.ISSUING_DISTRIBUTION_POINT - def __init__(self, full_name, relative_name, only_contains_user_certs, - only_contains_ca_certs, only_some_reasons, indirect_crl, - only_contains_attribute_certs): - if ( - only_some_reasons and ( - not isinstance(only_some_reasons, frozenset) or not all( - isinstance(x, ReasonFlags) for x in only_some_reasons - ) - ) + def __init__( + self, + full_name, + relative_name, + only_contains_user_certs, + only_contains_ca_certs, + only_some_reasons, + indirect_crl, + only_contains_attribute_certs, + ): + if only_some_reasons and ( + not isinstance(only_some_reasons, frozenset) + or not all(isinstance(x, ReasonFlags) for x in only_some_reasons) ): raise TypeError( "only_some_reasons must be None or frozenset of ReasonFlags" ) if only_some_reasons and ( - ReasonFlags.unspecified in only_some_reasons or - ReasonFlags.remove_from_crl in only_some_reasons + ReasonFlags.unspecified in only_some_reasons + or ReasonFlags.remove_from_crl in only_some_reasons ): raise ValueError( "unspecified and remove_from_crl are not valid reasons in an " @@ -1540,10 +1561,10 @@ def __init__(self, full_name, relative_name, only_contains_user_certs, ) if not ( - isinstance(only_contains_user_certs, bool) and - isinstance(only_contains_ca_certs, bool) and - isinstance(indirect_crl, bool) and - isinstance(only_contains_attribute_certs, bool) + isinstance(only_contains_user_certs, bool) + and isinstance(only_contains_ca_certs, bool) + and isinstance(indirect_crl, bool) + and isinstance(only_contains_attribute_certs, bool) ): raise TypeError( "only_contains_user_certs, only_contains_ca_certs, " @@ -1552,8 +1573,10 @@ def __init__(self, full_name, relative_name, only_contains_user_certs, ) crl_constraints = [ - only_contains_user_certs, only_contains_ca_certs, - indirect_crl, only_contains_attribute_certs + only_contains_user_certs, + only_contains_ca_certs, + indirect_crl, + only_contains_attribute_certs, ] if len([x for x in crl_constraints if x]) > 1: @@ -1563,12 +1586,16 @@ def __init__(self, full_name, relative_name, only_contains_user_certs, "indirect_crl, only_contains_attribute_certs" ) - if ( - not any([ - only_contains_user_certs, only_contains_ca_certs, - indirect_crl, only_contains_attribute_certs, full_name, - relative_name, only_some_reasons - ]) + if not any( + [ + only_contains_user_certs, + only_contains_ca_certs, + indirect_crl, + only_contains_attribute_certs, + full_name, + relative_name, + only_some_reasons, + ] ): raise ValueError( "Cannot create empty extension: " @@ -1603,29 +1630,31 @@ def __eq__(self, other): return NotImplemented return ( - self.full_name == other.full_name and - self.relative_name == other.relative_name and - self.only_contains_user_certs == other.only_contains_user_certs and - self.only_contains_ca_certs == other.only_contains_ca_certs and - self.only_some_reasons == other.only_some_reasons and - self.indirect_crl == other.indirect_crl and - self.only_contains_attribute_certs == - other.only_contains_attribute_certs + self.full_name == other.full_name + and self.relative_name == other.relative_name + and self.only_contains_user_certs == other.only_contains_user_certs + and self.only_contains_ca_certs == other.only_contains_ca_certs + and self.only_some_reasons == other.only_some_reasons + and self.indirect_crl == other.indirect_crl + and self.only_contains_attribute_certs + == other.only_contains_attribute_certs ) def __ne__(self, other): return not self == other def __hash__(self): - return hash(( - self.full_name, - self.relative_name, - self.only_contains_user_certs, - self.only_contains_ca_certs, - self.only_some_reasons, - self.indirect_crl, - self.only_contains_attribute_certs, - )) + return hash( + ( + self.full_name, + self.relative_name, + self.only_contains_user_certs, + self.only_contains_ca_certs, + self.only_some_reasons, + self.indirect_crl, + self.only_contains_attribute_certs, + ) + ) full_name = utils.read_only_property("_full_name") relative_name = utils.read_only_property("_relative_name") @@ -1655,9 +1684,8 @@ def __init__(self, oid, value): def __repr__(self): return ( - "".format( - self - ) + "".format(self) ) def __eq__(self, other): diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 1233841507eb..5336a10f603d 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -35,6 +35,7 @@ def _lazy_import_idna(): # we're only using it in deprecated paths. try: import idna + return idna except ImportError: raise ImportError( @@ -119,9 +120,9 @@ def __hash__(self): def _idna_encode(value): idna = _lazy_import_idna() # Retain prefixes '*.' for common/alt names and '.' for name constraints - for prefix in ['*.', '.']: + for prefix in ["*.", "."]: if value.startswith(prefix): - value = value[len(prefix):] + value = value[len(prefix) :] return prefix + idna.encode(value).decode("ascii") return idna.encode(value).decode("ascii") @@ -205,8 +206,8 @@ def _idna_encode(self, value): parsed = urllib_parse.urlparse(value) if parsed.port: netloc = ( - idna.encode(parsed.hostname) + - ":{}".format(parsed.port).encode("ascii") + idna.encode(parsed.hostname) + + ":{}".format(parsed.port).encode("ascii") ).decode("ascii") else: netloc = idna.encode(parsed.hostname).decode("ascii") @@ -214,14 +215,16 @@ def _idna_encode(self, value): # Note that building a URL in this fashion means it should be # semantically indistinguishable from the original but is not # guaranteed to be exactly the same. - return urllib_parse.urlunparse(( - parsed.scheme, - netloc, - parsed.path, - parsed.params, - parsed.query, - parsed.fragment - )) + return urllib_parse.urlunparse( + ( + parsed.scheme, + netloc, + parsed.path, + parsed.params, + parsed.query, + parsed.fragment, + ) + ) def __repr__(self): return "".format(self.value) @@ -300,8 +303,8 @@ def __init__(self, value): ipaddress.IPv4Address, ipaddress.IPv6Address, ipaddress.IPv4Network, - ipaddress.IPv6Network - ) + ipaddress.IPv6Network, + ), ): raise TypeError( "value must be an instance of ipaddress.IPv4Address, " @@ -345,7 +348,8 @@ def __init__(self, type_id, value): def __repr__(self): return "".format( - self.type_id, self.value) + self.type_id, self.value + ) def __eq__(self, other): if not isinstance(other, OtherName): diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 6816e0639ff3..6848b7a31ed4 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -39,15 +39,15 @@ class _ASN1Type(Enum): #: Short attribute names from RFC 4514: #: https://tools.ietf.org/html/rfc4514#page-7 _NAMEOID_TO_NAME = { - NameOID.COMMON_NAME: 'CN', - NameOID.LOCALITY_NAME: 'L', - NameOID.STATE_OR_PROVINCE_NAME: 'ST', - NameOID.ORGANIZATION_NAME: 'O', - NameOID.ORGANIZATIONAL_UNIT_NAME: 'OU', - NameOID.COUNTRY_NAME: 'C', - NameOID.STREET_ADDRESS: 'STREET', - NameOID.DOMAIN_COMPONENT: 'DC', - NameOID.USER_ID: 'UID', + NameOID.COMMON_NAME: "CN", + NameOID.LOCALITY_NAME: "L", + NameOID.STATE_OR_PROVINCE_NAME: "ST", + NameOID.ORGANIZATION_NAME: "O", + NameOID.ORGANIZATIONAL_UNIT_NAME: "OU", + NameOID.COUNTRY_NAME: "C", + NameOID.STREET_ADDRESS: "STREET", + NameOID.DOMAIN_COMPONENT: "DC", + NameOID.USER_ID: "UID", } @@ -55,22 +55,22 @@ def _escape_dn_value(val): """Escape special characters in RFC4514 Distinguished Name value.""" if not val: - return '' + return "" # See https://tools.ietf.org/html/rfc4514#section-2.4 - val = val.replace('\\', '\\\\') + val = val.replace("\\", "\\\\") val = val.replace('"', '\\"') - val = val.replace('+', '\\+') - val = val.replace(',', '\\,') - val = val.replace(';', '\\;') - val = val.replace('<', '\\<') - val = val.replace('>', '\\>') - val = val.replace('\0', '\\00') - - if val[0] in ('#', ' '): - val = '\\' + val - if val[-1] == ' ': - val = val[:-1] + '\\ ' + val = val.replace("+", "\\+") + val = val.replace(",", "\\,") + val = val.replace(";", "\\;") + val = val.replace("<", "\\<") + val = val.replace(">", "\\>") + val = val.replace("\0", "\\00") + + if val[0] in ("#", " "): + val = "\\" + val + if val[-1] == " ": + val = val[:-1] + "\\ " return val @@ -83,13 +83,11 @@ def __init__(self, oid, value, _type=_SENTINEL): ) if not isinstance(value, six.text_type): - raise TypeError( - "value argument must be a text type." - ) + raise TypeError("value argument must be a text type.") if ( - oid == NameOID.COUNTRY_NAME or - oid == NameOID.JURISDICTION_COUNTRY_NAME + oid == NameOID.COUNTRY_NAME + or oid == NameOID.JURISDICTION_COUNTRY_NAME ): if len(value.encode("utf8")) != 2: raise ValueError( @@ -123,16 +121,13 @@ def rfc4514_string(self): dotted string. """ key = _NAMEOID_TO_NAME.get(self.oid, self.oid.dotted_string) - return '%s=%s' % (key, _escape_dn_value(self.value)) + return "%s=%s" % (key, _escape_dn_value(self.value)) def __eq__(self, other): if not isinstance(other, NameAttribute): return NotImplemented - return ( - self.oid == other.oid and - self.value == other.value - ) + return self.oid == other.oid and self.value == other.value def __ne__(self, other): return not self == other @@ -169,7 +164,7 @@ def rfc4514_string(self): Within each RDN, attributes are joined by '+', although that is rarely used in certificates. """ - return '+'.join(attr.rfc4514_string() for attr in self._attributes) + return "+".join(attr.rfc4514_string() for attr in self._attributes) def __eq__(self, other): if not isinstance(other, RelativeDistinguishedName): @@ -219,8 +214,9 @@ def rfc4514_string(self): real world certificates. According to RFC4514 section 2.1 the RDNSequence must be reversed when converting to string representation. """ - return ','.join( - attr.rfc4514_string() for attr in reversed(self._attributes)) + return ",".join( + attr.rfc4514_string() for attr in reversed(self._attributes) + ) def get_attributes_for_oid(self, oid): return [i for i in self if i.oid == oid] @@ -255,9 +251,9 @@ def __len__(self): return sum(len(rdn) for rdn in self._attributes) def __repr__(self): - rdns = ','.join(attr.rfc4514_string() for attr in self._attributes) + rdns = ",".join(attr.rfc4514_string() for attr in self._attributes) if six.PY2: - return "".format(rdns.encode('utf8')) + return "".format(rdns.encode("utf8")) else: return "".format(rdns) diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index 7db92b905a25..c9ec86713b03 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -13,7 +13,9 @@ from cryptography import x509 from cryptography.hazmat.primitives import hashes from cryptography.x509.base import ( - _EARLIEST_UTC_TIME, _convert_to_naive_utc_time, _reject_duplicate_extension + _EARLIEST_UTC_TIME, + _convert_to_naive_utc_time, + _reject_duplicate_extension, ) @@ -42,8 +44,11 @@ class OCSPResponseStatus(Enum): _RESPONSE_STATUS_TO_ENUM = {x.value: x for x in OCSPResponseStatus} _ALLOWED_HASHES = ( - hashes.SHA1, hashes.SHA224, hashes.SHA256, - hashes.SHA384, hashes.SHA512 + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, ) @@ -65,11 +70,13 @@ class OCSPCertStatus(Enum): def load_der_ocsp_request(data): from cryptography.hazmat.backends.openssl.backend import backend + return backend.load_der_ocsp_request(data) def load_der_ocsp_response(data): from cryptography.hazmat.backends.openssl.backend import backend + return backend.load_der_ocsp_response(data) @@ -83,9 +90,8 @@ def add_certificate(self, cert, issuer, algorithm): raise ValueError("Only one certificate can be added to a request") _verify_algorithm(algorithm) - if ( - not isinstance(cert, x509.Certificate) or - not isinstance(issuer, x509.Certificate) + if not isinstance(cert, x509.Certificate) or not isinstance( + issuer, x509.Certificate ): raise TypeError("cert and issuer must be a Certificate") @@ -104,6 +110,7 @@ def add_extension(self, extension, critical): def build(self): from cryptography.hazmat.backends.openssl.backend import backend + if self._request is None: raise ValueError("You must add a certificate before building") @@ -111,20 +118,27 @@ def build(self): class _SingleResponse(object): - def __init__(self, cert, issuer, algorithm, cert_status, this_update, - next_update, revocation_time, revocation_reason): - if ( - not isinstance(cert, x509.Certificate) or - not isinstance(issuer, x509.Certificate) + def __init__( + self, + cert, + issuer, + algorithm, + cert_status, + this_update, + next_update, + revocation_time, + revocation_reason, + ): + if not isinstance(cert, x509.Certificate) or not isinstance( + issuer, x509.Certificate ): raise TypeError("cert and issuer must be a Certificate") _verify_algorithm(algorithm) if not isinstance(this_update, datetime.datetime): raise TypeError("this_update must be a datetime object") - if ( - next_update is not None and - not isinstance(next_update, datetime.datetime) + if next_update is not None and not isinstance( + next_update, datetime.datetime ): raise TypeError("next_update must be a datetime object or None") @@ -155,12 +169,13 @@ def __init__(self, cert, issuer, algorithm, cert_status, this_update, revocation_time = _convert_to_naive_utc_time(revocation_time) if revocation_time < _EARLIEST_UTC_TIME: - raise ValueError('The revocation_time must be on or after' - ' 1950 January 1.') + raise ValueError( + "The revocation_time must be on or after" + " 1950 January 1." + ) - if ( - revocation_reason is not None and - not isinstance(revocation_reason, x509.ReasonFlags) + if revocation_reason is not None and not isinstance( + revocation_reason, x509.ReasonFlags ): raise TypeError( "revocation_reason must be an item from the ReasonFlags " @@ -173,25 +188,40 @@ def __init__(self, cert, issuer, algorithm, cert_status, this_update, class OCSPResponseBuilder(object): - def __init__(self, response=None, responder_id=None, certs=None, - extensions=[]): + def __init__( + self, response=None, responder_id=None, certs=None, extensions=[] + ): self._response = response self._responder_id = responder_id self._certs = certs self._extensions = extensions - def add_response(self, cert, issuer, algorithm, cert_status, this_update, - next_update, revocation_time, revocation_reason): + def add_response( + self, + cert, + issuer, + algorithm, + cert_status, + this_update, + next_update, + revocation_time, + revocation_reason, + ): if self._response is not None: raise ValueError("Only one response per OCSPResponse.") singleresp = _SingleResponse( - cert, issuer, algorithm, cert_status, this_update, next_update, - revocation_time, revocation_reason + cert, + issuer, + algorithm, + cert_status, + this_update, + next_update, + revocation_time, + revocation_reason, ) return OCSPResponseBuilder( - singleresp, self._responder_id, - self._certs, self._extensions, + singleresp, self._responder_id, self._certs, self._extensions, ) def responder_id(self, encoding, responder_cert): @@ -205,8 +235,10 @@ def responder_id(self, encoding, responder_cert): ) return OCSPResponseBuilder( - self._response, (responder_cert, encoding), - self._certs, self._extensions, + self._response, + (responder_cert, encoding), + self._certs, + self._extensions, ) def certificates(self, certs): @@ -218,8 +250,7 @@ def certificates(self, certs): if not all(isinstance(x, x509.Certificate) for x in certs): raise TypeError("certs must be a list of Certificates") return OCSPResponseBuilder( - self._response, self._responder_id, - certs, self._extensions, + self._response, self._responder_id, certs, self._extensions, ) def add_extension(self, extension, critical): @@ -230,12 +261,15 @@ def add_extension(self, extension, critical): _reject_duplicate_extension(extension, self._extensions) return OCSPResponseBuilder( - self._response, self._responder_id, - self._certs, self._extensions + [extension], + self._response, + self._responder_id, + self._certs, + self._extensions + [extension], ) def sign(self, private_key, algorithm): from cryptography.hazmat.backends.openssl.backend import backend + if self._response is None: raise ValueError("You must add a response before signing") if self._responder_id is None: @@ -248,6 +282,7 @@ def sign(self, private_key, algorithm): @classmethod def build_unsuccessful(cls, response_status): from cryptography.hazmat.backends.openssl.backend import backend + if not isinstance(response_status, OCSPResponseStatus): raise TypeError( "response_status must be an item from OCSPResponseStatus" @@ -283,6 +318,7 @@ def serial_number(self): """ The serial number of the cert whose status is being checked """ + @abc.abstractmethod def public_bytes(self, encoding): """ diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py index 544904329f08..2bf606e50d6b 100644 --- a/src/cryptography/x509/oid.py +++ b/src/cryptography/x509/oid.py @@ -31,15 +31,11 @@ class ExtensionOID(object): TLS_FEATURE = ObjectIdentifier("1.3.6.1.5.5.7.1.24") CRL_NUMBER = ObjectIdentifier("2.5.29.20") DELTA_CRL_INDICATOR = ObjectIdentifier("2.5.29.27") - PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ( - ObjectIdentifier("1.3.6.1.4.1.11129.2.4.2") - ) - PRECERT_POISON = ( - ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") - ) - SIGNED_CERTIFICATE_TIMESTAMPS = ( - ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") + PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier( + "1.3.6.1.4.1.11129.2.4.2" ) + PRECERT_POISON = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") + SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") class OCSPExtensionOID(object): @@ -106,12 +102,8 @@ class SignatureAlgorithmOID(object): ED25519 = ObjectIdentifier("1.3.101.112") ED448 = ObjectIdentifier("1.3.101.113") GOSTR3411_94_WITH_3410_2001 = ObjectIdentifier("1.2.643.2.2.3") - GOSTR3410_2012_WITH_3411_2012_256 = ObjectIdentifier( - "1.2.643.7.1.1.3.2" - ) - GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier( - "1.2.643.7.1.1.3.3" - ) + GOSTR3410_2012_WITH_3411_2012_256 = ObjectIdentifier("1.2.643.7.1.1.3.2") + GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier("1.2.643.7.1.1.3.3") _SIG_OIDS_TO_HASH = { @@ -199,7 +191,6 @@ class AttributeOID(object): NameOID.OGRN: "OGRN", NameOID.SNILS: "SNILS", NameOID.UNSTRUCTURED_NAME: "unstructuredName", - SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA224: "sha224WithRSAEncryption", @@ -257,9 +248,7 @@ class AttributeOID(object): ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage", ExtensionOID.FRESHEST_CRL: "freshestCRL", ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy", - ExtensionOID.ISSUING_DISTRIBUTION_POINT: ( - "issuingDistributionPoint" - ), + ExtensionOID.ISSUING_DISTRIBUTION_POINT: ("issuingDistributionPoint"), ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess", ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", diff --git a/tests/conftest.py b/tests/conftest.py index d159affc8cc1..4e3124fa76ea 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,15 +9,19 @@ from cryptography.hazmat.backends.openssl import backend as openssl_backend from .utils import ( - check_backend_support, load_wycheproof_tests, skip_if_wycheproof_none + check_backend_support, + load_wycheproof_tests, + skip_if_wycheproof_none, ) def pytest_report_header(config): - return "\n".join([ - "OpenSSL: {}".format(openssl_backend.openssl_version_text()), - "FIPS Enabled: {}".format(openssl_backend._fips_enabled), - ]) + return "\n".join( + [ + "OpenSSL: {}".format(openssl_backend.openssl_version_text()), + "FIPS Enabled: {}".format(openssl_backend._fips_enabled), + ] + ) def pytest_addoption(parser): diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index 9d5d6fb4c327..acec247df4a9 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -15,9 +15,7 @@ from cryptography import x509 from cryptography.exceptions import InternalError, _Reasons from cryptography.hazmat.backends.interfaces import DHBackend, RSABackend -from cryptography.hazmat.backends.openssl.backend import ( - Backend, backend -) +from cryptography.hazmat.backends.openssl.backend import Backend, backend from cryptography.hazmat.backends.openssl.ec import _sn_to_elliptic_curve from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import dh, dsa, padding @@ -27,16 +25,21 @@ from ..primitives.fixtures_rsa import RSA_KEY_2048, RSA_KEY_512 from ...doubles import ( - DummyAsymmetricPadding, DummyCipherAlgorithm, DummyHashAlgorithm, DummyMode + DummyAsymmetricPadding, + DummyCipherAlgorithm, + DummyHashAlgorithm, + DummyMode, ) from ...utils import ( - load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm + load_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) from ...x509.test_x509 import _load_cert def skip_if_libre_ssl(openssl_version): - if u'LibreSSL' in openssl_version: + if u"LibreSSL" in openssl_version: pytest.skip("LibreSSL hard-codes RAND_bytes to use arc4random.") @@ -66,10 +69,9 @@ def test_openssl_version_text(self): if it starts with OpenSSL or LibreSSL as that appears to be true for every OpenSSL-alike. """ - assert ( - backend.openssl_version_text().startswith("OpenSSL") or - backend.openssl_version_text().startswith("LibreSSL") - ) + assert backend.openssl_version_text().startswith( + "OpenSSL" + ) or backend.openssl_version_text().startswith("LibreSSL") def test_openssl_version_number(self): assert backend.openssl_version_number() > 0 @@ -87,11 +89,9 @@ def test_nonexistent_cipher(self, mode): b.register_cipher_adapter( DummyCipherAlgorithm, type(mode), - lambda backend, cipher, mode: backend._ffi.NULL - ) - cipher = Cipher( - DummyCipherAlgorithm(), mode, backend=b, + lambda backend, cipher, mode: backend._ffi.NULL, ) + cipher = Cipher(DummyCipherAlgorithm(), mode, backend=b,) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_CIPHER): cipher.encryptor() @@ -102,8 +102,9 @@ def test_openssl_assert(self): def test_consume_errors(self): for i in range(10): - backend._lib.ERR_put_error(backend._lib.ERR_LIB_EVP, 0, 0, - b"test_openssl.py", -1) + backend._lib.ERR_put_error( + backend._lib.ERR_LIB_EVP, 0, 0, b"test_openssl.py", -1 + ) assert backend._lib.ERR_peek_error() != 0 @@ -131,8 +132,7 @@ def test_unknown_error_in_cipher_finalize(self): cipher = Cipher(AES(b"\0" * 16), CBC(b"\0" * 16), backend=backend) enc = cipher.encryptor() enc.update(b"\0") - backend._lib.ERR_put_error(0, 0, 1, - b"test_openssl.py", -1) + backend._lib.ERR_put_error(0, 0, 1, b"test_openssl.py", -1) with pytest.raises(InternalError): enc.finalize() @@ -170,7 +170,8 @@ def test_bn_to_int(self): @pytest.mark.skipif( not backend._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE, - reason="Requires OpenSSL with ENGINE support and OpenSSL < 1.1.1d") + reason="Requires OpenSSL with ENGINE support and OpenSSL < 1.1.1d", +) @pytest.mark.skip_fips(reason="osrandom engine disabled for FIPS") class TestOpenSSLRandomEngine(object): def setup(self): @@ -190,8 +191,9 @@ def teardown(self): name = backend._lib.ENGINE_get_name(current_default) assert name == backend._lib.Cryptography_osrandom_engine_name - @pytest.mark.skipif(sys.executable is None, - reason="No Python interpreter available.") + @pytest.mark.skipif( + sys.executable is None, reason="No Python interpreter available." + ) def test_osrandom_engine_is_default(self, tmpdir): engine_printer = textwrap.dedent( """ @@ -205,7 +207,7 @@ def test_osrandom_engine_is_default(self, tmpdir): assert res == 1 """ ) - engine_name = tmpdir.join('engine_name') + engine_name = tmpdir.join("engine_name") # If we're running tests via ``python setup.py test`` in a clean # environment then all of our dependencies are going to be installed @@ -216,7 +218,7 @@ def test_osrandom_engine_is_default(self, tmpdir): env = os.environ.copy() env["PYTHONPATH"] = os.pathsep.join(sys.path) - with engine_name.open('w') as out: + with engine_name.open("w") as out: subprocess.check_call( [sys.executable, "-c", engine_printer], env=env, @@ -228,7 +230,7 @@ def test_osrandom_engine_is_default(self, tmpdir): backend._lib.Cryptography_osrandom_engine_name ) - assert engine_name.read().encode('ascii') == osrandom_engine_name + assert engine_name.read().encode("ascii") == osrandom_engine_name def test_osrandom_sanity_check(self): # This test serves as a check against catastrophic failure. @@ -269,14 +271,18 @@ def test_activate_builtin_random_already_active(self): def test_osrandom_engine_implementation(self): name = backend.osrandom_engine_implementation() - assert name in ['/dev/urandom', 'CryptGenRandom', 'getentropy', - 'getrandom'] - if sys.platform.startswith('linux'): - assert name in ['getrandom', '/dev/urandom'] - if sys.platform == 'darwin': - assert name in ['getentropy', '/dev/urandom'] - if sys.platform == 'win32': - assert name == 'CryptGenRandom' + assert name in [ + "/dev/urandom", + "CryptGenRandom", + "getentropy", + "getrandom", + ] + if sys.platform.startswith("linux"): + assert name in ["getrandom", "/dev/urandom"] + if sys.platform == "darwin": + assert name in ["getentropy", "/dev/urandom"] + if sys.platform == "win32": + assert name == "CryptGenRandom" def test_activate_osrandom_already_default(self): e = backend._lib.ENGINE_get_default_RAND() @@ -294,15 +300,18 @@ def test_activate_osrandom_already_default(self): @pytest.mark.skipif( backend._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE, - reason="Requires OpenSSL without ENGINE support or OpenSSL >=1.1.1d") + reason="Requires OpenSSL without ENGINE support or OpenSSL >=1.1.1d", +) class TestOpenSSLNoEngine(object): def test_no_engine_support(self): - assert backend._ffi.string( - backend._lib.Cryptography_osrandom_engine_id - ) == b"no-engine-support" - assert backend._ffi.string( - backend._lib.Cryptography_osrandom_engine_name - ) == b"osrandom_engine disabled" + assert ( + backend._ffi.string(backend._lib.Cryptography_osrandom_engine_id) + == b"no-engine-support" + ) + assert ( + backend._ffi.string(backend._lib.Cryptography_osrandom_engine_name) + == b"osrandom_engine disabled" + ) def test_activate_builtin_random_does_nothing(self): backend.activate_builtin_random() @@ -327,17 +336,24 @@ def test_generate_bad_public_exponent(self): def test_cant_generate_insecure_tiny_key(self): with pytest.raises(ValueError): - backend.generate_rsa_private_key(public_exponent=65537, - key_size=511) + backend.generate_rsa_private_key( + public_exponent=65537, key_size=511 + ) with pytest.raises(ValueError): - backend.generate_rsa_private_key(public_exponent=65537, - key_size=256) + backend.generate_rsa_private_key( + public_exponent=65537, key_size=256 + ) def test_rsa_padding_unsupported_pss_mgf1_hash(self): - assert backend.rsa_padding_supported( - padding.PSS(mgf=padding.MGF1(DummyHashAlgorithm()), salt_length=0) - ) is False + assert ( + backend.rsa_padding_supported( + padding.PSS( + mgf=padding.MGF1(DummyHashAlgorithm()), salt_length=0 + ) + ) + is False + ) def test_rsa_padding_unsupported(self): assert backend.rsa_padding_supported(DummyAsymmetricPadding()) is False @@ -346,22 +362,28 @@ def test_rsa_padding_supported_pkcs1v15(self): assert backend.rsa_padding_supported(padding.PKCS1v15()) is True def test_rsa_padding_supported_pss(self): - assert backend.rsa_padding_supported( - padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) - ) is True + assert ( + backend.rsa_padding_supported( + padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) + ) + is True + ) def test_rsa_padding_supported_oaep(self): - assert backend.rsa_padding_supported( - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - algorithm=hashes.SHA1(), - label=None - ), - ) is True + assert ( + backend.rsa_padding_supported( + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA1()), + algorithm=hashes.SHA1(), + label=None, + ), + ) + is True + ) @pytest.mark.skipif( backend._lib.Cryptography_HAS_RSA_OAEP_MD == 0, - reason="Requires OpenSSL with rsa_oaep_md (1.0.2+)" + reason="Requires OpenSSL with rsa_oaep_md (1.0.2+)", ) def test_rsa_padding_supported_oaep_sha2_combinations(self): hashalgs = [ @@ -372,30 +394,37 @@ def test_rsa_padding_supported_oaep_sha2_combinations(self): hashes.SHA512(), ] for mgf1alg, oaepalg in itertools.product(hashalgs, hashalgs): - assert backend.rsa_padding_supported( - padding.OAEP( - mgf=padding.MGF1(algorithm=mgf1alg), - algorithm=oaepalg, - label=None - ), - ) is True + assert ( + backend.rsa_padding_supported( + padding.OAEP( + mgf=padding.MGF1(algorithm=mgf1alg), + algorithm=oaepalg, + label=None, + ), + ) + is True + ) def test_rsa_padding_unsupported_mgf(self): - assert backend.rsa_padding_supported( - padding.OAEP( - mgf=DummyMGF(), - algorithm=hashes.SHA1(), - label=None - ), - ) is False + assert ( + backend.rsa_padding_supported( + padding.OAEP( + mgf=DummyMGF(), algorithm=hashes.SHA1(), label=None + ), + ) + is False + ) - assert backend.rsa_padding_supported( - padding.PSS(mgf=DummyMGF(), salt_length=0) - ) is False + assert ( + backend.rsa_padding_supported( + padding.PSS(mgf=DummyMGF(), salt_length=0) + ) + is False + ) @pytest.mark.skipif( backend._lib.Cryptography_HAS_RSA_OAEP_MD == 1, - reason="Requires OpenSSL without rsa_oaep_md (< 1.0.2)" + reason="Requires OpenSSL without rsa_oaep_md (< 1.0.2)", ) def test_unsupported_mgf1_hash_algorithm_decrypt(self): private_key = RSA_KEY_512.private_key(backend) @@ -405,13 +434,13 @@ def test_unsupported_mgf1_hash_algorithm_decrypt(self): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA1(), - label=None - ) + label=None, + ), ) @pytest.mark.skipif( backend._lib.Cryptography_HAS_RSA_OAEP_MD == 1, - reason="Requires OpenSSL without rsa_oaep_md (< 1.0.2)" + reason="Requires OpenSSL without rsa_oaep_md (< 1.0.2)", ) def test_unsupported_oaep_hash_algorithm_decrypt(self): private_key = RSA_KEY_512.private_key(backend) @@ -421,8 +450,8 @@ def test_unsupported_oaep_hash_algorithm_decrypt(self): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA256(), - label=None - ) + label=None, + ), ) def test_unsupported_mgf1_hash_algorithm_md5_decrypt(self): @@ -433,8 +462,8 @@ def test_unsupported_mgf1_hash_algorithm_md5_decrypt(self): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.MD5()), algorithm=hashes.MD5(), - label=None - ) + label=None, + ), ) @@ -519,14 +548,15 @@ def test_very_long_pem_serialization_password(self): with pytest.raises(ValueError): load_vectors_from_file( os.path.join( - "asymmetric", "Traditional_OpenSSL_Serialization", - "key1.pem" + "asymmetric", + "Traditional_OpenSSL_Serialization", + "key1.pem", ), lambda pemfile: ( backend.load_pem_private_key( pemfile.read().encode(), password ) - ) + ), ) @@ -545,7 +575,7 @@ def test_password_length_limit(self): key.private_bytes( serialization.Encoding.PEM, serialization.PrivateFormat.PKCS8, - serialization.BestAvailableEncryption(password) + serialization.BestAvailableEncryption(password), ) @@ -554,7 +584,7 @@ def test_numeric_string_x509_name_entry(self): cert = _load_cert( os.path.join("x509", "e-trust.ru.der"), x509.load_der_x509_certificate, - backend + backend, ) if backend._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I: with pytest.raises(ValueError) as exc: @@ -565,42 +595,49 @@ def test_numeric_string_x509_name_entry(self): # erroneously pass. assert str(exc.value) == "Unsupported ASN1 string type. Type: 18" else: - assert cert.subject.get_attributes_for_oid( - x509.ObjectIdentifier("1.2.643.3.131.1.1") - )[0].value == "007710474375" + assert ( + cert.subject.get_attributes_for_oid( + x509.ObjectIdentifier("1.2.643.3.131.1.1") + )[0].value + == "007710474375" + ) @pytest.mark.skipif( backend._lib.Cryptography_HAS_EVP_PKEY_DHX == 1, - reason="Requires OpenSSL without EVP_PKEY_DHX (< 1.0.2)") + reason="Requires OpenSSL without EVP_PKEY_DHX (< 1.0.2)", +) @pytest.mark.requires_backend_interface(interface=DHBackend) class TestOpenSSLDHSerialization(object): - @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join("asymmetric", "DH", "RFC5114.txt"), - load_nist_vectors)) + os.path.join("asymmetric", "DH", "RFC5114.txt"), load_nist_vectors + ), + ) def test_dh_serialization_with_q_unsupported(self, backend, vector): - parameters = dh.DHParameterNumbers(int(vector["p"], 16), - int(vector["g"], 16), - int(vector["q"], 16)) + parameters = dh.DHParameterNumbers( + int(vector["p"], 16), int(vector["g"], 16), int(vector["q"], 16) + ) public = dh.DHPublicNumbers(int(vector["ystatcavs"], 16), parameters) private = dh.DHPrivateNumbers(int(vector["xstatcavs"], 16), public) private_key = private.private_key(backend) public_key = private_key.public_key() with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_SERIALIZATION): - private_key.private_bytes(serialization.Encoding.PEM, - serialization.PrivateFormat.PKCS8, - serialization.NoEncryption()) + private_key.private_bytes( + serialization.Encoding.PEM, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), + ) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_SERIALIZATION): public_key.public_bytes( serialization.Encoding.PEM, - serialization.PublicFormat.SubjectPublicKeyInfo) + serialization.PublicFormat.SubjectPublicKeyInfo, + ) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_SERIALIZATION): parameters.parameters(backend).parameter_bytes( - serialization.Encoding.PEM, - serialization.ParameterFormat.PKCS3) + serialization.Encoding.PEM, serialization.ParameterFormat.PKCS3 + ) @pytest.mark.parametrize( ("key_path", "loader_func"), @@ -612,14 +649,14 @@ def test_dh_serialization_with_q_unsupported(self, backend, vector): ( os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.der"), serialization.load_der_private_key, - ) - ] + ), + ], ) - def test_private_load_dhx_unsupported(self, key_path, loader_func, - backend): + def test_private_load_dhx_unsupported( + self, key_path, loader_func, backend + ): key_bytes = load_vectors_from_file( - key_path, - lambda pemfile: pemfile.read(), mode="rb" + key_path, lambda pemfile: pemfile.read(), mode="rb" ) with pytest.raises(ValueError): loader_func(key_bytes, None, backend) @@ -634,14 +671,12 @@ def test_private_load_dhx_unsupported(self, key_path, loader_func, ( os.path.join("asymmetric", "DH", "dhpub_rfc5114_2.der"), serialization.load_der_public_key, - ) - ] + ), + ], ) - def test_public_load_dhx_unsupported(self, key_path, loader_func, - backend): + def test_public_load_dhx_unsupported(self, key_path, loader_func, backend): key_bytes = load_vectors_from_file( - key_path, - lambda pemfile: pemfile.read(), mode="rb" + key_path, lambda pemfile: pemfile.read(), mode="rb" ) with pytest.raises(ValueError): loader_func(key_bytes, backend) diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index b188fe5babaf..96b5f2ae0930 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -128,15 +128,14 @@ def assert_no_memory_leaks(s, argv=[]): env = os.environ.copy() env["PYTHONPATH"] = os.pathsep.join(sys.path) argv = [ - sys.executable, "-c", "{}\n\n{}".format(s, MEMORY_LEAK_SCRIPT) + sys.executable, + "-c", + "{}\n\n{}".format(s, MEMORY_LEAK_SCRIPT), ] + argv # Shell out to a fresh Python process because OpenSSL does not allow you to # install new memory hooks after the first malloc/free occurs. proc = subprocess.Popen( - argv, - env=env, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, + argv, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) try: proc.wait() @@ -156,7 +155,7 @@ def assert_no_memory_leaks(s, argv=[]): def skip_if_memtesting_not_supported(): return pytest.mark.skipif( not Binding().lib.Cryptography_HAS_MEM_FUNCTIONS, - reason="Requires OpenSSL memory functions (>=1.1.0)" + reason="Requires OpenSSL memory functions (>=1.1.0)", ) @@ -164,56 +163,78 @@ def skip_if_memtesting_not_supported(): @skip_if_memtesting_not_supported() class TestAssertNoMemoryLeaks(object): def test_no_leak_no_malloc(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): pass - """)) + """ + ) + ) def test_no_leak_free(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography.hazmat.bindings.openssl.binding import Binding b = Binding() name = b.lib.X509_NAME_new() b.lib.X509_NAME_free(name) - """)) + """ + ) + ) def test_no_leak_gc(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography.hazmat.bindings.openssl.binding import Binding b = Binding() name = b.lib.X509_NAME_new() b.ffi.gc(name, b.lib.X509_NAME_free) - """)) + """ + ) + ) def test_leak(self): with pytest.raises(AssertionError): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography.hazmat.bindings.openssl.binding import ( Binding ) b = Binding() b.lib.X509_NAME_new() - """)) + """ + ) + ) def test_errors(self): with pytest.raises(ValueError): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): raise ZeroDivisionError - """)) + """ + ) + ) @pytest.mark.skip_fips(reason="FIPS self-test sets allow_customize = 0") @skip_if_memtesting_not_supported() class TestOpenSSLMemoryLeaks(object): - @pytest.mark.parametrize("path", [ - "x509/PKITS_data/certs/ValidcRLIssuerTest28EE.crt", - ]) + @pytest.mark.parametrize( + "path", ["x509/PKITS_data/certs/ValidcRLIssuerTest28EE.crt"] + ) def test_der_x509_certificate_extensions(self, path): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(path): from cryptography import x509 from cryptography.hazmat.backends.openssl import backend @@ -226,13 +247,16 @@ def func(path): ) cert.extensions - """), [path]) + """ + ), + [path], + ) - @pytest.mark.parametrize("path", [ - "x509/cryptography.io.pem", - ]) + @pytest.mark.parametrize("path", ["x509/cryptography.io.pem"]) def test_pem_x509_certificate_extensions(self, path): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(path): from cryptography import x509 from cryptography.hazmat.backends.openssl import backend @@ -245,10 +269,15 @@ def func(path): ) cert.extensions - """), [path]) + """ + ), + [path], + ) def test_x509_csr_extensions(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography import x509 from cryptography.hazmat.backends.openssl import backend @@ -265,10 +294,14 @@ def func(): ).sign(private_key, hashes.SHA256(), backend) cert.extensions - """)) + """ + ) + ) def test_ec_private_numbers_private_key(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography.hazmat.backends.openssl import backend from cryptography.hazmat.primitives.asymmetric import ec @@ -290,26 +323,38 @@ def func(): ) ) ).private_key(backend) - """)) + """ + ) + ) def test_ec_derive_private_key(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography.hazmat.backends.openssl import backend from cryptography.hazmat.primitives.asymmetric import ec ec.derive_private_key(1, ec.SECP256R1(), backend) - """)) + """ + ) + ) def test_x25519_pubkey_from_private_key(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography.hazmat.primitives.asymmetric import x25519 private_key = x25519.X25519PrivateKey.generate() private_key.public_key() - """)) + """ + ) + ) def test_create_ocsp_request(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): from cryptography import x509 from cryptography.hazmat.backends.openssl import backend @@ -327,14 +372,18 @@ def func(): cert, cert, hashes.SHA1() ).add_extension(x509.OCSPNonce(b"0000"), False) req = builder.build() - """)) + """ + ) + ) - @pytest.mark.parametrize("path", [ - "pkcs12/cert-aes256cbc-no-key.p12", - "pkcs12/cert-key-aes256cbc.p12", - ]) + @pytest.mark.parametrize( + "path", + ["pkcs12/cert-aes256cbc-no-key.p12", "pkcs12/cert-key-aes256cbc.p12"], + ) def test_load_pkcs12_key_and_certificates(self, path): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(path): from cryptography import x509 from cryptography.hazmat.backends.openssl import backend @@ -345,10 +394,15 @@ def func(path): pkcs12.load_key_and_certificates( f.read(), b"cryptography", backend ) - """), [path]) + """ + ), + [path], + ) def test_create_crl_with_idp(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): import datetime from cryptography import x509 @@ -390,10 +444,14 @@ def func(): crl.extensions.get_extension_for_class( x509.IssuingDistributionPoint ) - """)) + """ + ) + ) def test_create_certificate_with_extensions(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): import datetime @@ -450,10 +508,14 @@ def func(): cert = builder.sign(private_key, hashes.SHA256(), backend) cert.extensions - """)) + """ + ) + ) def test_write_pkcs12_key_and_certificates(self): - assert_no_memory_leaks(textwrap.dedent(""" + assert_no_memory_leaks( + textwrap.dedent( + """ def func(): import os from cryptography import x509 @@ -485,4 +547,6 @@ def func(): encryption = serialization.NoEncryption() pkcs12.serialize_key_and_certificates( b"name", key, cert, [cert2, cert3], encryption) - """)) + """ + ) + ) diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 29a1c459fa96..a4f6ac015695 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -8,7 +8,10 @@ from cryptography.exceptions import InternalError from cryptography.hazmat.bindings.openssl.binding import ( - Binding, _consume_errors, _openssl_assert, _verify_package_version + Binding, + _consume_errors, + _openssl_assert, + _verify_package_version, ) @@ -95,7 +98,7 @@ def test_openssl_assert_error_on_stack(self): b.lib.EVP_F_EVP_ENCRYPTFINAL_EX, b.lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH, b"", - -1 + -1, ) with pytest.raises(InternalError) as exc_info: _openssl_assert(b.lib, False) @@ -114,7 +117,7 @@ def test_check_startup_errors_are_allowed(self): b.lib.EVP_F_EVP_ENCRYPTFINAL_EX, b.lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH, b"", - -1 + -1, ) b._register_osrandom_engine() assert _consume_errors(b.lib) == [] diff --git a/tests/hazmat/primitives/fixtures_dh.py b/tests/hazmat/primitives/fixtures_dh.py index f4698bc0c30b..b766c4265837 100644 --- a/tests/hazmat/primitives/fixtures_dh.py +++ b/tests/hazmat/primitives/fixtures_dh.py @@ -19,6 +19,8 @@ "d6e6c9077ad91d2691f7f7ee598cb0fac186d91caefe130985139270b4130c93bc4" "37944f4fd4452e2d74dd364f2e21e71f54bff5cae82ab9c9df69ee86d2bc522363a" "0dabc521979b0deada1dbf9a42d5c4484e0abcd06bfa53ddef3c1b20ee3fd59d7c2" - "5e41d2b66c62e37ffffffffffffffff", 16 - ), g=2 + "5e41d2b66c62e37ffffffffffffffff", + 16, + ), + g=2, ) diff --git a/tests/hazmat/primitives/fixtures_dsa.py b/tests/hazmat/primitives/fixtures_dsa.py index dd947ae82257..d4568ead7306 100644 --- a/tests/hazmat/primitives/fixtures_dsa.py +++ b/tests/hazmat/primitives/fixtures_dsa.py @@ -5,7 +5,9 @@ from __future__ import absolute_import, division, print_function from cryptography.hazmat.primitives.asymmetric.dsa import ( - DSAParameterNumbers, DSAPrivateNumbers, DSAPublicNumbers + DSAParameterNumbers, + DSAPrivateNumbers, + DSAPublicNumbers, ) @@ -13,140 +15,147 @@ public_numbers=DSAPublicNumbers( parameter_numbers=DSAParameterNumbers( p=int( - 'd38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef34' - '1eabb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6' - 'b502e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189cef' - '1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097f7' - '19076640e20980a0093113a8bd73', 16 + "d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef34" + "1eabb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6" + "b502e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189cef" + "1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097f7" + "19076640e20980a0093113a8bd73", + 16, ), - q=int('96c5390a8b612c0e422bb2b0ea194a3ec935a281', 16), + q=int("96c5390a8b612c0e422bb2b0ea194a3ec935a281", 16), g=int( - '06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce499' - '1d2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d30' - '0042bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34c' - 'd12615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f4' - 'fd9f93cd6f4f17fc076341a7e7d9', 16 - ) + "06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce499" + "1d2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d30" + "0042bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34c" + "d12615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f4" + "fd9f93cd6f4f17fc076341a7e7d9", + 16, + ), ), y=int( - '6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422070edb71d' - 'b44ff568280fdb1709f8fc3feab39f1f824adaeb2a298088156ac31af1aa0' - '4bf54f475bdcfdcf2f8a2dd973e922d83e76f016558617603129b21c70bf7' - 'd0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1ce80204646bf99b5771' - 'd249a6fea627', 16 - ) + "6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422070edb71d" + "b44ff568280fdb1709f8fc3feab39f1f824adaeb2a298088156ac31af1aa0" + "4bf54f475bdcfdcf2f8a2dd973e922d83e76f016558617603129b21c70bf7" + "d0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1ce80204646bf99b5771" + "d249a6fea627", + 16, + ), ), - x=int('8185fee9cc7c0e91fd85503274f1cd5a3fd15a49', 16) + x=int("8185fee9cc7c0e91fd85503274f1cd5a3fd15a49", 16), ) DSA_KEY_2048 = DSAPrivateNumbers( public_numbers=DSAPublicNumbers( parameter_numbers=DSAParameterNumbers( p=int( - 'ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace5e9c4' - '1434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17dac62c98e70' - '6af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b12252c40278fff' - '9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d244e54561b0' - 'dca39b301de8c49da9fb23df33c6182e3f983208c560fb5119fbf78eb' - 'e3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a2b4f0e9e3' - 'd9dbac122f750dd754325135257488b1f6ecabf21bff2947fe0d3b2cb' - '7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a908c36e9' - '5e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac5aa66ef7', - 16 + "ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace5e9c4" + "1434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17dac62c98e70" + "6af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b12252c40278fff" + "9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d244e54561b0" + "dca39b301de8c49da9fb23df33c6182e3f983208c560fb5119fbf78eb" + "e3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a2b4f0e9e3" + "d9dbac122f750dd754325135257488b1f6ecabf21bff2947fe0d3b2cb" + "7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a908c36e9" + "5e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac5aa66ef7", + 16, ), q=int( - '8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b18f507' - '192c19d', 16 + "8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b18f507" + "192c19d", + 16, ), g=int( - 'e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b1' - '913413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9' - '8076739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908b' - 'ae03e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d555' - '1b2fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c6156' - '8f78d0706b10a26f23b4f197c322b825002284a0aca91807bba98ece9' - '12b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f840387' - '3d12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed27' - '3b146ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302', - 16 - ) + "e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b1" + "913413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9" + "8076739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908b" + "ae03e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d555" + "1b2fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c6156" + "8f78d0706b10a26f23b4f197c322b825002284a0aca91807bba98ece9" + "12b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f840387" + "3d12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed27" + "3b146ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302", + 16, + ), ), y=int( - '6b32e31ab9031dc4dd0b5039a78d07826687ab087ae6de4736f5b0434e125' - '3092e8a0b231f9c87f3fc8a4cb5634eb194bf1b638b7a7889620ce6711567' - 'e36aa36cda4604cfaa601a45918371d4ccf68d8b10a50a0460eb1dc0fff62' - 'ef5e6ee4d473e18ea4a66c196fb7e677a49b48241a0b4a97128eff30fa437' - '050501a584f8771e7280d26d5af30784039159c11ebfea10b692fd0a58215' - 'eeb18bff117e13f08db792ed4151a218e4bed8dddfb0793225bd1e9773505' - '166f4bd8cedbb286ea28232972da7bae836ba97329ba6b0a36508e50a52a7' - '675e476d4d4137eae13f22a9d2fefde708ba8f34bf336c6e76331761e4b06' - '17633fe7ec3f23672fb19d27', 16 - ) + "6b32e31ab9031dc4dd0b5039a78d07826687ab087ae6de4736f5b0434e125" + "3092e8a0b231f9c87f3fc8a4cb5634eb194bf1b638b7a7889620ce6711567" + "e36aa36cda4604cfaa601a45918371d4ccf68d8b10a50a0460eb1dc0fff62" + "ef5e6ee4d473e18ea4a66c196fb7e677a49b48241a0b4a97128eff30fa437" + "050501a584f8771e7280d26d5af30784039159c11ebfea10b692fd0a58215" + "eeb18bff117e13f08db792ed4151a218e4bed8dddfb0793225bd1e9773505" + "166f4bd8cedbb286ea28232972da7bae836ba97329ba6b0a36508e50a52a7" + "675e476d4d4137eae13f22a9d2fefde708ba8f34bf336c6e76331761e4b06" + "17633fe7ec3f23672fb19d27", + 16, + ), ), x=int( - '405772da6e90d809e77d5de796562a2dd4dfd10ef00a83a3aba6bd818a0348a1', - 16 - ) + "405772da6e90d809e77d5de796562a2dd4dfd10ef00a83a3aba6bd818a0348a1", 16 + ), ) DSA_KEY_3072 = DSAPrivateNumbers( public_numbers=DSAPublicNumbers( parameter_numbers=DSAParameterNumbers( p=int( - 'f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d582' - '8c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a84' - '2ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e' - '80abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84e' - 'c389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea265' - '1b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a142' - '85a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab060' - '548de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba' - '9844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1' - 'd54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818' - 'f06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673' - 'ae4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f747' - '6cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c1' - '136f303f4b4d25ad5b692229957', 16 + "f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d582" + "8c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a84" + "2ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e" + "80abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84e" + "c389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea265" + "1b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a142" + "85a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab060" + "548de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba" + "9844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1" + "d54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818" + "f06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673" + "ae4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f747" + "6cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c1" + "136f303f4b4d25ad5b692229957", + 16, ), q=int( - 'd3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210f6169' - '041653b', 16 + "d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210f6169" + "041653b", + 16, ), g=int( - 'ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978db2104' - 'd7394b493c18332c64cec906a71c3778bd93341165dee8e6cd4ca6f13' - 'afff531191194ada55ecf01ff94d6cf7c4768b82dd29cd131aaf202ae' - 'fd40e564375285c01f3220af4d70b96f1395420d778228f1461f5d0b8' - 'e47357e87b1fe3286223b553e3fc9928f16ae3067ded6721bedf1d1a0' - '1bfd22b9ae85fce77820d88cdf50a6bde20668ad77a707d1c60fcc5d5' - '1c9de488610d0285eb8ff721ff141f93a9fb23c1d1f7654c07c46e588' - '36d1652828f71057b8aff0b0778ef2ca934ea9d0f37daddade2d823a4' - 'd8e362721082e279d003b575ee59fd050d105dfd71cd63154efe431a0' - '869178d9811f4f231dc5dcf3b0ec0f2b0f9896c32ec6c7ee7d60aa971' - '09e09224907328d4e6acd10117e45774406c4c947da8020649c3168f6' - '90e0bd6e91ac67074d1d436b58ae374523deaf6c93c1e6920db4a080b' - '744804bb073cecfe83fa9398cf150afa286dc7eb7949750cf5001ce10' - '4e9187f7e16859afa8fd0d775ae', 16 - ) + "ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978db2104" + "d7394b493c18332c64cec906a71c3778bd93341165dee8e6cd4ca6f13" + "afff531191194ada55ecf01ff94d6cf7c4768b82dd29cd131aaf202ae" + "fd40e564375285c01f3220af4d70b96f1395420d778228f1461f5d0b8" + "e47357e87b1fe3286223b553e3fc9928f16ae3067ded6721bedf1d1a0" + "1bfd22b9ae85fce77820d88cdf50a6bde20668ad77a707d1c60fcc5d5" + "1c9de488610d0285eb8ff721ff141f93a9fb23c1d1f7654c07c46e588" + "36d1652828f71057b8aff0b0778ef2ca934ea9d0f37daddade2d823a4" + "d8e362721082e279d003b575ee59fd050d105dfd71cd63154efe431a0" + "869178d9811f4f231dc5dcf3b0ec0f2b0f9896c32ec6c7ee7d60aa971" + "09e09224907328d4e6acd10117e45774406c4c947da8020649c3168f6" + "90e0bd6e91ac67074d1d436b58ae374523deaf6c93c1e6920db4a080b" + "744804bb073cecfe83fa9398cf150afa286dc7eb7949750cf5001ce10" + "4e9187f7e16859afa8fd0d775ae", + 16, + ), ), y=int( - '814824e435e1e6f38daa239aad6dad21033afce6a3ebd35c1359348a0f241' - '8871968c2babfc2baf47742148828f8612183178f126504da73566b6bab33' - 'ba1f124c15aa461555c2451d86c94ee21c3e3fc24c55527e01b1f03adcdd8' - 'ec5cb08082803a7b6a829c3e99eeb332a2cf5c035b0ce0078d3d414d31fa4' - '7e9726be2989b8d06da2e6cd363f5a7d1515e3f4925e0b32adeae3025cc5a' - '996f6fd27494ea408763de48f3bb39f6a06514b019899b312ec570851637b' - '8865cff3a52bf5d54ad5a19e6e400a2d33251055d0a440b50d53f4791391d' - 'c754ad02b9eab74c46b4903f9d76f824339914db108057af7cde657d41766' - 'a99991ac8787694f4185d6f91d7627048f827b405ec67bf2fe56141c4c581' - 'd8c317333624e073e5879a82437cb0c7b435c0ce434e15965db1315d64895' - '991e6bbe7dac040c42052408bbc53423fd31098248a58f8a67da3a39895cd' - '0cc927515d044c1e3cb6a3259c3d0da354cce89ea3552c59609db10ee9899' - '86527436af21d9485ddf25f90f7dff6d2bae', 16 - ) + "814824e435e1e6f38daa239aad6dad21033afce6a3ebd35c1359348a0f241" + "8871968c2babfc2baf47742148828f8612183178f126504da73566b6bab33" + "ba1f124c15aa461555c2451d86c94ee21c3e3fc24c55527e01b1f03adcdd8" + "ec5cb08082803a7b6a829c3e99eeb332a2cf5c035b0ce0078d3d414d31fa4" + "7e9726be2989b8d06da2e6cd363f5a7d1515e3f4925e0b32adeae3025cc5a" + "996f6fd27494ea408763de48f3bb39f6a06514b019899b312ec570851637b" + "8865cff3a52bf5d54ad5a19e6e400a2d33251055d0a440b50d53f4791391d" + "c754ad02b9eab74c46b4903f9d76f824339914db108057af7cde657d41766" + "a99991ac8787694f4185d6f91d7627048f827b405ec67bf2fe56141c4c581" + "d8c317333624e073e5879a82437cb0c7b435c0ce434e15965db1315d64895" + "991e6bbe7dac040c42052408bbc53423fd31098248a58f8a67da3a39895cd" + "0cc927515d044c1e3cb6a3259c3d0da354cce89ea3552c59609db10ee9899" + "86527436af21d9485ddf25f90f7dff6d2bae", + 16, + ), ), x=int( - 'b2764c46113983777d3e7e97589f1303806d14ad9f2f1ef033097de954b17706', - 16 - ) + "b2764c46113983777d3e7e97589f1303806d14ad9f2f1ef033097de954b17706", 16 + ), ) diff --git a/tests/hazmat/primitives/fixtures_ec.py b/tests/hazmat/primitives/fixtures_ec.py index 21c6903173e1..d1d0a46ffe25 100644 --- a/tests/hazmat/primitives/fixtures_ec.py +++ b/tests/hazmat/primitives/fixtures_ec.py @@ -9,288 +9,272 @@ EC_KEY_SECT571R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '213997069697108634621868251335076179190383272087548888968788698953' - '131928375431570122753130054966269038244076049869476736547896549201' - '7388482714521707824160638375437887802901' + "213997069697108634621868251335076179190383272087548888968788698953" + "131928375431570122753130054966269038244076049869476736547896549201" + "7388482714521707824160638375437887802901" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT571R1(), x=int( - '42585672410900520895287019432267514156432686681290164230262278' - '54789182447139054594501570747809649335533486119017169439209005' - '883737780433424425566023654583165324498640038089' + "42585672410900520895287019432267514156432686681290164230262278" + "54789182447139054594501570747809649335533486119017169439209005" + "883737780433424425566023654583165324498640038089" ), y=int( - '13822523320209387572500458104799806851658024537477228250738334' - '46977851514777531296572763848253279034733550774927720436494321' - '97281333379623823457479233585424800362717541750' - ) - ) + "13822523320209387572500458104799806851658024537477228250738334" + "46977851514777531296572763848253279034733550774927720436494321" + "97281333379623823457479233585424800362717541750" + ), + ), ) EC_KEY_SECT409R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '604993237916498765317587097853603474519114726157206838874832379003' - '281871982139714656205843929472002062791572217653118715727' + "604993237916498765317587097853603474519114726157206838874832379003" + "281871982139714656205843929472002062791572217653118715727" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT409R1(), x=int( - '76237701339268928039087238870073679814646664010783544301589269' - '2272579213400205907766385199643053767195204247826349822350081' + "76237701339268928039087238870073679814646664010783544301589269" + "2272579213400205907766385199643053767195204247826349822350081" ), y=int( - '10056668929618383045204866060110626563392345494925302478351744' - '01475129090774493235522729123877384838835703483224447476728811' - ) - ) + "10056668929618383045204866060110626563392345494925302478351744" + "01475129090774493235522729123877384838835703483224447476728811" + ), + ), ) EC_KEY_SECT283R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '589705077255658434962118789801402573495547207239917043241273753671' - '0603230261342427657' + "589705077255658434962118789801402573495547207239917043241273753671" + "0603230261342427657" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT283R1(), x=int( - '10694213430317013187241490088760888472172922291550831393222973' - '531614941756901942108493' + "10694213430317013187241490088760888472172922291550831393222973" + "531614941756901942108493" ), y=int( - '11461553100313943515373601367527399649593366728262918214942116' - '4359557613202950705170' - ) - ) + "11461553100313943515373601367527399649593366728262918214942116" + "4359557613202950705170" + ), + ), ) EC_KEY_SECT233R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '343470067105388144757135261232658742142830154753739648095101899829' - '8288' + "343470067105388144757135261232658742142830154753739648095101899829" + "8288" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT233R1(), x=int( - '74494951569151557692195071465128140646140765188698294062550374' - '71118267' + "74494951569151557692195071465128140646140765188698294062550374" + "71118267" ), y=int( - '48699150823022962508544923825876164485917001162461401797511748' - '44872205' - ) - ) + "48699150823022962508544923825876164485917001162461401797511748" + "44872205" + ), + ), ) EC_KEY_SECT163R2 = ec.EllipticCurvePrivateNumbers( - private_value=int( - '11788436193853888218177032687141056784083668635' - ), + private_value=int("11788436193853888218177032687141056784083668635"), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT163R2(), - x=int( - '5247234453330640212490501030772203801908103222463' - ), - y=int( - '3172513801099088785224248292142866317754124455206' - ) - ) + x=int("5247234453330640212490501030772203801908103222463"), + y=int("3172513801099088785224248292142866317754124455206"), + ), ) EC_KEY_SECT571K1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '592811051234886966121888758661314648311634839499582476726008738218' - '165015048237934517672316204181933804884636855291118594744334592153' - '883208936227914544246799490897169723387' + "592811051234886966121888758661314648311634839499582476726008738218" + "165015048237934517672316204181933804884636855291118594744334592153" + "883208936227914544246799490897169723387" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT571K1(), x=int( - '81362471461936552203898455874182916939857774872643607884250052' - '29301336524105230729653881789373412990921493551253481866317181' - '50644729351721577822595637058949405764944491655' + "81362471461936552203898455874182916939857774872643607884250052" + "29301336524105230729653881789373412990921493551253481866317181" + "50644729351721577822595637058949405764944491655" ), y=int( - '14058041260812945396067821061063618047896814719828637241661260' - '31235681542401975593036630733881695595289523801041910183736211' - '587294494888450327374439795428519848065589000434' - ) - ) + "14058041260812945396067821061063618047896814719828637241661260" + "31235681542401975593036630733881695595289523801041910183736211" + "587294494888450327374439795428519848065589000434" + ), + ), ) EC_KEY_SECT409K1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '110321743150399087059465162400463719641470113494908091197354523708' - '934106732952992153105338671368548199643686444619485307877' + "110321743150399087059465162400463719641470113494908091197354523708" + "934106732952992153105338671368548199643686444619485307877" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT409K1(), x=int( - '62280214209410363493525178797944995742119600145953755916426161' - '0790364158569265348038207313261547476506319796469776797725796' + "62280214209410363493525178797944995742119600145953755916426161" + "0790364158569265348038207313261547476506319796469776797725796" ), y=int( - '46653883749102474289095010108777579907422472804577185369332018' - '7318642669590280811057512951467298158275464566214288556375885' - ) - ) + "46653883749102474289095010108777579907422472804577185369332018" + "7318642669590280811057512951467298158275464566214288556375885" + ), + ), ) EC_KEY_SECT283K1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '182508394415444014156574733141549331538128234395356466108310015130' - '3868915489347291850' + "182508394415444014156574733141549331538128234395356466108310015130" + "3868915489347291850" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT283K1(), x=int( - '31141647206111886426350703123670451554123180910379592764773885' - '2959123367428352287032' + "31141647206111886426350703123670451554123180910379592764773885" + "2959123367428352287032" ), y=int( - '71787460144483665964585187837283963089964760704065205376175384' - '58957627834444017112582' - ) - ) + "71787460144483665964585187837283963089964760704065205376175384" + "58957627834444017112582" + ), + ), ) EC_KEY_SECT233K1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '172670089647474613734091436081960550801254775902629891892394471086' - '2070' + "172670089647474613734091436081960550801254775902629891892394471086" + "2070" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT233K1(), x=int( - '55693911474339510991521579392202889561373678973929426354737048' - '68129172' + "55693911474339510991521579392202889561373678973929426354737048" + "68129172" ), y=int( - '11025856248546376145959939911850923631416718241836051344384802' - '737277815' - ) - ) + "11025856248546376145959939911850923631416718241836051344384802" + "737277815" + ), + ), ) EC_KEY_SECT163K1 = ec.EllipticCurvePrivateNumbers( - private_value=int( - '3699303791425402204035307605170569820290317991287' - ), + private_value=int("3699303791425402204035307605170569820290317991287"), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECT163K1(), - x=int( - '4479755902310063321544063130576409926980094120721' - ), - y=int( - '3051218481937171839039826690648109285113977745779' - ) - ) + x=int("4479755902310063321544063130576409926980094120721"), + y=int("3051218481937171839039826690648109285113977745779"), + ), ) EC_KEY_SECP521R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '662751235215460886290293902658128847495347691199214706697089140769' - '672273950767961331442265530524063943548846724348048614239791498442' - '5997823106818915698960565' + "662751235215460886290293902658128847495347691199214706697089140769" + "672273950767961331442265530524063943548846724348048614239791498442" + "5997823106818915698960565" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECP521R1(), x=int( - '12944742826257420846659527752683763193401384271391513286022917' - '29910013082920512632908350502247952686156279140016049549948975' - '670668730618745449113644014505462' + "12944742826257420846659527752683763193401384271391513286022917" + "29910013082920512632908350502247952686156279140016049549948975" + "670668730618745449113644014505462" ), y=int( - '10784108810271976186737587749436295782985563640368689081052886' - '16296815984553198866894145509329328086635278430266482551941240' - '591605833440825557820439734509311' - ) - ) + "10784108810271976186737587749436295782985563640368689081052886" + "16296815984553198866894145509329328086635278430266482551941240" + "591605833440825557820439734509311" + ), + ), ) EC_KEY_SECP384R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '280814107134858470598753916394807521398239633534281633982576099083' - '35787109896602102090002196616273211495718603965098' + "280814107134858470598753916394807521398239633534281633982576099083" + "35787109896602102090002196616273211495718603965098" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECP384R1(), x=int( - '10036914308591746758780165503819213553101287571902957054148542' - '504671046744460374996612408381962208627004841444205030' + "10036914308591746758780165503819213553101287571902957054148542" + "504671046744460374996612408381962208627004841444205030" ), y=int( - '17337335659928075994560513699823544906448896792102247714689323' - '575406618073069185107088229463828921069465902299522926' - ) - ) + "17337335659928075994560513699823544906448896792102247714689323" + "575406618073069185107088229463828921069465902299522926" + ), + ), ) EC_KEY_SECP256R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '271032978511595617649844168316234344656921218699414461240502635010' - '25776962849' + "271032978511595617649844168316234344656921218699414461240502635010" + "25776962849" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECP256R1(), x=int( - '49325986169170464532722748935508337546545346352733747948730305' - '442770101441241' + "49325986169170464532722748935508337546545346352733747948730305" + "442770101441241" ), y=int( - '51709162888529903487188595007092772817469799707382623884187518' - '455962250433661' - ) - ) + "51709162888529903487188595007092772817469799707382623884187518" + "455962250433661" + ), + ), ) EC_KEY_SECP256K1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '683341569008473593765879222774207677458810362976327530563215318048' - '64380736732' + "683341569008473593765879222774207677458810362976327530563215318048" + "64380736732" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECP256K1(), x=int( - '59251322975795306609293064274738085741081547489119277536110995' - '120127593127884' + "59251322975795306609293064274738085741081547489119277536110995" + "120127593127884" ), y=int( - '10334192001480392039227801832201340147605940717841294644187071' - '8261641142297801' - ) - ) + "10334192001480392039227801832201340147605940717841294644187071" + "8261641142297801" + ), + ), ) EC_KEY_SECP224R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '234854340492774342642505519082413233282383066880756900834047566251' - '50' + "234854340492774342642505519082413233282383066880756900834047566251" + "50" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECP224R1(), x=int( - '51165676638271204691095081341581621487998422645261573824239666' - '1214' + "51165676638271204691095081341581621487998422645261573824239666" + "1214" ), y=int( - '14936601450555711309158397172719963843891926209168533453717969' - '1265' - ) - ) + "14936601450555711309158397172719963843891926209168533453717969" + "1265" + ), + ), ) EC_KEY_SECP192R1 = ec.EllipticCurvePrivateNumbers( private_value=int( - '4534766128536179420071447168915990251715442361606049349869' + "4534766128536179420071447168915990251715442361606049349869" ), public_numbers=ec.EllipticCurvePublicNumbers( curve=ec.SECP192R1(), - x=int( - '5415069751170397888083674339683360671310515485781457536999' - ), - y=int( - '18671605334415960797751252911958331304288357195986572776' - ) - ) + x=int("5415069751170397888083674339683360671310515485781457536999"), + y=int("18671605334415960797751252911958331304288357195986572776"), + ), ) diff --git a/tests/hazmat/primitives/fixtures_rsa.py b/tests/hazmat/primitives/fixtures_rsa.py index a531783e5847..801fb914cf8e 100644 --- a/tests/hazmat/primitives/fixtures_rsa.py +++ b/tests/hazmat/primitives/fixtures_rsa.py @@ -5,7 +5,8 @@ from __future__ import absolute_import, division, print_function from cryptography.hazmat.primitives.asymmetric.rsa import ( - RSAPrivateNumbers, RSAPublicNumbers + RSAPrivateNumbers, + RSAPublicNumbers, ) @@ -18,7 +19,8 @@ ), d=int( "272869352cacf9c866c4e107acc95d4c608ca91460a93d28588d51cfccc07f449" - "18bbe7660f9f16adc2b4ed36ca310ef3d63b79bd447456e3505736a45a6ed21", 16 + "18bbe7660f9f16adc2b4ed36ca310ef3d63b79bd447456e3505736a45a6ed21", + 16, ), dmp1=int( "addff2ec7564c6b64bc670d250b6f24b0b8db6b2810099813b7e7658cecf5c39", 16 @@ -34,178 +36,239 @@ n=int( "ae5411f963c50e3267fafcf76381c8b1e5f7b741fdb2a544bcf48bd607b10c991" "90caeb8011dc22cf83d921da55ec32bd05cac3ee02ca5e1dbef93952850b525", - 16 + 16, ), - ) + ), ) RSA_KEY_512_ALT = RSAPrivateNumbers( p=int( - "febe19c29a0b50fefa4f7b1832f84df1caf9be8242da25c9d689e18226e67ce5", - 16), + "febe19c29a0b50fefa4f7b1832f84df1caf9be8242da25c9d689e18226e67ce5", 16 + ), q=int( - "eb616c639dd999feda26517e1c77b6878f363fe828c4e6670ec1787f28b1e731", - 16), + "eb616c639dd999feda26517e1c77b6878f363fe828c4e6670ec1787f28b1e731", 16 + ), d=int( "80edecfde704a806445a4cc782b85d3f36f17558f385654ea767f006470fdfcbda5e2" - "206839289d3f419b4e4fb8e1acee1b4fb9c591f69b64ec83937f5829241", 16), + "206839289d3f419b4e4fb8e1acee1b4fb9c591f69b64ec83937f5829241", + 16, + ), dmp1=int( - "7f4fa06e2a3077a54691cc5216bf13ad40a4b9fa3dd0ea4bca259487484baea5", - 16), + "7f4fa06e2a3077a54691cc5216bf13ad40a4b9fa3dd0ea4bca259487484baea5", 16 + ), dmq1=int( - "35eaa70d5a8711c352ed1c15ab27b0e3f46614d575214535ae279b166597fac1", - 16), + "35eaa70d5a8711c352ed1c15ab27b0e3f46614d575214535ae279b166597fac1", 16 + ), iqmp=int( - "cc1f272de6846851ec80cb89a02dbac78f44b47bc08f53b67b4651a3acde8b19", - 16), + "cc1f272de6846851ec80cb89a02dbac78f44b47bc08f53b67b4651a3acde8b19", 16 + ), public_numbers=RSAPublicNumbers( e=65537, n=int( "ea397388b999ef0f7e7416fa000367efd9a0ba0deddd3f8160d1c36d62267f210" "fbd9c97abeb6654450ff03e7601b8caa6c6f4cba18f0b52c179d17e8f258ad5", - 16), - ) + 16, + ), + ), ) RSA_KEY_522 = RSAPrivateNumbers( p=int( "1a8aab9a069f92b52fdf05824f2846223dc27adfc806716a247a77d4c36885e4bf", - 16), + 16, + ), q=int( "19e8d620d177ec54cdb733bb1915e72ef644b1202b889ceb524613efa49c07eb4f", - 16), + 16, + ), d=int( "10b8a7c0a92c1ae2d678097d69db3bfa966b541fb857468291d48d1b52397ea2bac0d" - "4370c159015c7219e3806a01bbafaffdd46f86e3da1e2d1fe80a0369ccd745", 16), + "4370c159015c7219e3806a01bbafaffdd46f86e3da1e2d1fe80a0369ccd745", + 16, + ), dmp1=int( - "3eb6277f66e6e2dcf89f1b8529431f730839dbd9a3e49555159bc8470eee886e5", - 16), + "3eb6277f66e6e2dcf89f1b8529431f730839dbd9a3e49555159bc8470eee886e5", 16 + ), dmq1=int( "184b4d74aa54c361e51eb23fee4eae5e4786b37b11b6e0447af9c0b9c4e4953c5b", - 16), + 16, + ), iqmp=int( - "f80e9ab4fa7b35d0d232ef51c4736d1f2dcf2c7b1dd8716211b1bf1337e74f8ae", - 16), + "f80e9ab4fa7b35d0d232ef51c4736d1f2dcf2c7b1dd8716211b1bf1337e74f8ae", 16 + ), public_numbers=RSAPublicNumbers( e=65537, n=int( "2afaea0e0bb6fca037da7d190b5270a6c665bc18e7a456f7e69beaac4433db748" "ba99acdd14697e453bca596eb35b47f2d48f1f85ef08ce5109dad557a9cf85ebf" - "1", 16), + "1", + 16, + ), ), ) RSA_KEY_599 = RSAPrivateNumbers( p=int( "cf95d20be0c7af69f4b3d909f65d858c26d1a7ef34da8e3977f4fa230580e58814b54" - "24be99", 16), + "24be99", + 16, + ), q=int( "6052be4b28debd4265fe12ace5aa4a0c4eb8d63ff8853c66824b35622161eb48a3bc8" - "c3ada5", 16), + "c3ada5", + 16, + ), d=int( "69d9adc465e61585d3142d7cc8dd30605e8d1cbbf31009bc2cd5538dc40528d5d68ee" "fe6a42d23674b6ec76e192351bf368c8968f0392110bf1c2825dbcff071270b80adcc" - "fa1d19d00a1", 16), + "fa1d19d00a1", + 16, + ), dmp1=int( "a86d10edde456687fba968b1f298d2e07226adb1221b2a466a93f3d83280f0bb46c20" - "2b6811", 16), + "2b6811", + 16, + ), dmq1=int( "40d570e08611e6b1da94b95d46f8e7fe80be48f7a5ff8838375b08039514a399b11c2" - "80735", 16), + "80735", + 16, + ), iqmp=int( "cd051cb0ea68b88765c041262ace2ec4db11dab14afd192742e34d5da3328637fabdf" - "bae26e", 16), + "bae26e", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( "4e1b470fe00642426f3808e74c959632dd67855a4c503c5b7876ccf4dc7f6a1a4" "9107b90d26daf0a7879a6858218345fbc6e59f01cd095ca5647c27c25265e6c47" - "4fea89537191c7073d9d", 16), - ) + "4fea89537191c7073d9d", + 16, + ), + ), ) RSA_KEY_745 = RSAPrivateNumbers( p=int( "1c5a0cfe9a86debd19eca33ba961f15bc598aa7983a545ce775b933afc89eb51bcf90" - "836257fdd060d4b383240241d", 16 + "836257fdd060d4b383240241d", + 16, ), q=int( "fb2634f657f82ee6b70553382c4e2ed26b947c97ce2f0016f1b282cf2998184ad0527" - "a9eead826dd95fe06b57a025", 16 + "a9eead826dd95fe06b57a025", + 16, ), d=int( "402f30f976bc07d15ff0779abff127b20a8b6b1d0024cc2ad8b6762d38f174f81e792" "3b49d80bdbdd80d9675cbc7b2793ec199a0430eb5c84604dacfdb29259ae6a1a44676" - "22f0b23d4cb0f5cb1db4b8173c8d9d3e57a74dbd200d2141", 16), + "22f0b23d4cb0f5cb1db4b8173c8d9d3e57a74dbd200d2141", + 16, + ), dmp1=int( "e5e95b7751a6649f199be21bef7a51c9e49821d945b6fc5f538b4a670d8762c375b00" - "8e70f31d52b3ea2bd14c3101", 16), + "8e70f31d52b3ea2bd14c3101", + 16, + ), dmq1=int( "12b85d5843645f72990fcf8d2f58408b34b3a3b9d9078dd527fceb5d2fb7839008092" - "dd4aca2a1fb00542801dcef5", 16), + "dd4aca2a1fb00542801dcef5", + 16, + ), iqmp=int( "5672740d947f621fc7969e3a44ec26736f3f819863d330e63e9409e139d20753551ac" - "c16544dd2bdadb9dee917440", 16), + "c16544dd2bdadb9dee917440", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( "1bd085f92237774d34013b477ceebbb2f2feca71118db9b7429341477947e7b1d" "04e8c43ede3c52bb25781af58d4ff81289f301eac62dc3bcd7dafd7a4d5304e9f" - "308e766952fbf2b62373e66611fa53189987dbef9f7243dcbbeb25831", 16), - ) + "308e766952fbf2b62373e66611fa53189987dbef9f7243dcbbeb25831", + 16, + ), + ), ) RSA_KEY_768 = RSAPrivateNumbers( p=int( "f80c0061b607f93206b68e208906498d68c6e396faf457150cf975c8f849848465869" - "7ecd402313397088044c4c2071b", 16), + "7ecd402313397088044c4c2071b", + 16, + ), q=int( "e5b5dbecc93c6d306fc14e6aa9737f9be2728bc1a326a8713d2849b34c1cb54c63468" - "3a68abb1d345dbf15a3c492cf55", 16), + "3a68abb1d345dbf15a3c492cf55", + 16, + ), d=int( "d44601442255ffa331212c60385b5e898555c75c0272632ff42d57c4b16ca97dbca9f" "d6d99cd2c9fd298df155ed5141b4be06c651934076133331d4564d73faed7ce98e283" - "2f7ce3949bc183be7e7ca34f6dd04a9098b6c73649394b0a76c541", 16), + "2f7ce3949bc183be7e7ca34f6dd04a9098b6c73649394b0a76c541", + 16, + ), dmp1=int( "a5763406fa0b65929661ce7b2b8c73220e43a5ebbfe99ff15ddf464fd238105ad4f2a" - "c83818518d70627d8908703bb03", 16), + "c83818518d70627d8908703bb03", + 16, + ), dmq1=int( "cb467a9ef899a39a685aecd4d0ad27b0bfdc53b68075363c373d8eb2bed8eccaf3533" - "42f4db735a9e087b7539c21ba9d", 16), + "42f4db735a9e087b7539c21ba9d", + 16, + ), iqmp=int( "5fe86bd3aee0c4d09ef11e0530a78a4534c9b833422813b5c934a450c8e564d8097a0" - "6fd74f1ebe2d5573782093f587a", 16), + "6fd74f1ebe2d5573782093f587a", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( "de92f1eb5f4abf426b6cac9dd1e9bf57132a4988b4ed3f8aecc15e251028bd6df" "46eb97c711624af7db15e6430894d1b640c13929329241ee094f5a4fe1a20bc9b" "75232320a72bc567207ec54d6b48dccb19737cf63acc1021abb337f19130f7", - 16), - ) + 16, + ), + ), ) RSA_KEY_1024 = RSAPrivateNumbers( p=int( "ea4d9d9a1a068be44b9a5f8f6de0512b2c5ba1fb804a4655babba688e6e890b347c1a" - "7426685a929337f513ae4256f0b7e5022d642237f960c5b24b96bee8e51", 16), + "7426685a929337f513ae4256f0b7e5022d642237f960c5b24b96bee8e51", + 16, + ), q=int( "cffb33e400d6f08b410d69deb18a85cf0ed88fcca9f32d6f2f66c62143d49aff92c11" - "4de937d4f1f62d4635ee89af99ce86d38a2b05310f3857c7b5d586ac8f9", 16), + "4de937d4f1f62d4635ee89af99ce86d38a2b05310f3857c7b5d586ac8f9", + 16, + ), d=int( "3d12d46d04ce942fb99be7bf30587b8cd3e21d75a2720e7bda1b867f1d418d91d8b9f" "e1c00181fdde94f2faf33b4e6f800a1b3ae3b972ccb6d5079dcb6c794070ac8306d59" "c00b58b7a9a81122a6b055832de7c72334a07494d8e7c9fbeed2cc37e011d9e6bfc6e" - "9bcddbef7f0f5771d9cf82cd4b268c97ec684575c24b6c881", 16), + "9bcddbef7f0f5771d9cf82cd4b268c97ec684575c24b6c881", + 16, + ), dmp1=int( "470f2b11257b7ec9ca34136f487f939e6861920ad8a9ae132a02e74af5dceaa5b4c98" - "2949ccb44b67e2bcad2f58674db237fe250e0d62b47b28fa1dfaa603b41", 16), + "2949ccb44b67e2bcad2f58674db237fe250e0d62b47b28fa1dfaa603b41", + 16, + ), dmq1=int( "c616e8317d6b3ae8272973709b80e8397256697ff14ea03389de454f619f99915a617" - "45319fefbe154ec1d49441a772c2f63f7d15c478199afc60469bfd0d561", 16), + "45319fefbe154ec1d49441a772c2f63f7d15c478199afc60469bfd0d561", + 16, + ), iqmp=int( "d15e7c9ad357dfcd5dbdc8427680daf1006761bcfba93a7f86589ad88832a8d564b1c" - "d4291a658c96fbaea7ca588795820902d85caebd49c2d731e3fe0243130", 16), + "d4291a658c96fbaea7ca588795820902d85caebd49c2d731e3fe0243130", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -213,31 +276,44 @@ "ede07be3bed0e355d48e0dfab1e4fb5187adf42d7d3fb0401c082acb8481bf17f" "0e871f8877be04c3a1197d40aa260e2e0c48ed3fd2b93dc3fc0867591f67f3cd6" "0a77adee1d68a8c3730a5702485f6ac9ede7f0fd2918e037ee4cc1fc1b4c9", - 16), - ) + 16, + ), + ), ) RSA_KEY_1025 = RSAPrivateNumbers( p=int( "18e9bfb7071725da04d31c103fa3563648c69def43a204989214eb57b0c8b299f9ef3" - "5dda79a62d8d67fd2a9b69fbd8d0490aa2edc1e111a2b8eb7c737bb691a5", 16), + "5dda79a62d8d67fd2a9b69fbd8d0490aa2edc1e111a2b8eb7c737bb691a5", + 16, + ), q=int( "d8eccaeeb95815f3079d13685f3f72ca2bf2550b349518049421375df88ca9bbb4ba8" - "cb0e3502203c9eeae174112509153445d251313e4711a102818c66fcbb7", 16), + "cb0e3502203c9eeae174112509153445d251313e4711a102818c66fcbb7", + 16, + ), d=int( "fe9ac54910b8b1bc948a03511c54cab206a1d36d50d591124109a48abb7480977ccb0" "47b4d4f1ce7b0805df2d4fa3fe425f49b78535a11f4b87a4eba0638b3340c23d4e6b2" "1ecebe9d5364ea6ead2d47b27836019e6ecb407000a50dc95a8614c9d0031a6e3a524" - "d2345cfb76e15c1f69d5ba35bdfb6ec63bcb115a757ef79d9", 16), + "d2345cfb76e15c1f69d5ba35bdfb6ec63bcb115a757ef79d9", + 16, + ), dmp1=int( "18537e81006a68ea76d590cc88e73bd26bc38d09c977959748e5265c0ce21c0b5fd26" - "53d975f97ef759b809f791487a8fff1264bf561627fb4527a3f0bbb72c85", 16), + "53d975f97ef759b809f791487a8fff1264bf561627fb4527a3f0bbb72c85", + 16, + ), dmq1=int( "c807eac5a1f1e1239f04b04dd16eff9a00565127a91046fa89e1eb5d6301cace85447" - "4d1f47b0332bd35b4214b66e9166953241538f761f30d969272ee214f17", 16), + "4d1f47b0332bd35b4214b66e9166953241538f761f30d969272ee214f17", + 16, + ), iqmp=int( "133aa74dd41fe70fa244f07d0c4091a22f8c8f0134fe6aea9ec8b55383b758fefe358" - "2beec36eca91715eee7d21931f24fa9e97e8e3a50f9cd0f731574a5eafcc", 16), + "2beec36eca91715eee7d21931f24fa9e97e8e3a50f9cd0f731574a5eafcc", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -245,31 +321,44 @@ "bf276fe3523f38f5ddaf3ea9aa88486a9d8760ff732489075862bee0e599de5c5" "f509b4519f4f446521bad15cd279a498fe1e89107ce0d237e3103d7c5eb801666" "42e2924b152aebff97b71fdd2d68ebb45034cc784e2e822ff6d1edf98af3f3", - 16), - ) + 16, + ), + ), ) RSA_KEY_1026 = RSAPrivateNumbers( p=int( "1fcbfb8719c5bdb5fe3eb0937c76bb096e750b9442dfe31d6a877a13aed2a6a4e9f79" - "40f815f1c307dd6bc2b4b207bb6fe5be3a15bd2875a957492ce197cdedb1", 16), + "40f815f1c307dd6bc2b4b207bb6fe5be3a15bd2875a957492ce197cdedb1", + 16, + ), q=int( "1f704a0f6b8966dd52582fdc08227dd3dbaeaa781918b41144b692711091b4ca4eb62" - "985c3513853828ce8739001dfba9a9a7f1a23cbcaf74280be925e2e7b50d", 16), + "985c3513853828ce8739001dfba9a9a7f1a23cbcaf74280be925e2e7b50d", + 16, + ), d=int( "c67975e35a1d0d0b3ebfca736262cf91990cb31cf4ac473c0c816f3bc2720bcba2475" "e8d0de8535d257816c0fc53afc1b597eada8b229069d6ef2792fc23f59ffb4dc6c3d9" "0a3c462082025a4cba7561296dd3d8870c4440d779406f00879afe2c681e7f5ee055e" - "ff829e6e55883ec20830c72300762e6e3a333d94b4dbe4501", 16), + "ff829e6e55883ec20830c72300762e6e3a333d94b4dbe4501", + 16, + ), dmp1=int( "314730ca7066c55d086a9fbdf3670ef7cef816b9efea8b514b882ae9d647217cf41d7" - "e9989269dc9893d02e315cb81f058c49043c2cac47adea58bdf5e20e841", 16), + "e9989269dc9893d02e315cb81f058c49043c2cac47adea58bdf5e20e841", + 16, + ), dmq1=int( "1da28a9d687ff7cfeebc2439240de7505a8796376968c8ec723a2b669af8ce53d9c88" - "af18540bd78b2da429014923fa435f22697ac60812d7ca9c17a557f394cd", 16), + "af18540bd78b2da429014923fa435f22697ac60812d7ca9c17a557f394cd", + 16, + ), iqmp=int( "727947b57b8a36acd85180522f1b381bce5fdbd962743b3b14af98a36771a80f58ddd" - "62675d72a5935190da9ddc6fd6d6d5e9e9f805a2e92ab8d56b820493cdf", 16), + "62675d72a5935190da9ddc6fd6d6d5e9e9f805a2e92ab8d56b820493cdf", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -277,31 +366,44 @@ "9cfae6ab0446da18e26f33e1d753bc1cc03585c100cf0ab5ef056695706fc8b0c" "9c710cd73fe6e5beda70f515a96fabd3cc5ac49efcb2594b220ff3b603fcd927f" "6a0838ef04bf52f3ed9eab801f09e5aed1613ddeb946ed0fbb02060b3a36fd", - 16), - ) + 16, + ), + ), ) RSA_KEY_1027 = RSAPrivateNumbers( p=int( "30135e54cfb072c3d3eaf2000f3ed92ceafc85efc867b9d4bf5612f2978c432040093" - "4829f741c0f002b54af2a4433ff872b6321ef00ff1e72cba4e0ced937c7d", 16), + "4829f741c0f002b54af2a4433ff872b6321ef00ff1e72cba4e0ced937c7d", + 16, + ), q=int( "1d01a8aead6f86b78c875f18edd74214e06535d65da054aeb8e1851d6f3319b4fb6d8" - "6b01e07d19f8261a1ded7dc08116345509ab9790e3f13e65c037e5bb7e27", 16), + "6b01e07d19f8261a1ded7dc08116345509ab9790e3f13e65c037e5bb7e27", + 16, + ), d=int( "21cf4477df79561c7818731da9b9c88cd793f1b4b8e175bd0bfb9c0941a4dc648ecf1" "6d96b35166c9ea116f4c2eb33ce1c231e641a37c25e54c17027bdec08ddafcb83642e" "795a0dd133155ccc5eed03b6e745930d9ac7cfe91f9045149f33295af03a2198c660f" - "08d8150d13ce0e2eb02f21ac75d63b55822f77bd5be8d07619", 16), + "08d8150d13ce0e2eb02f21ac75d63b55822f77bd5be8d07619", + 16, + ), dmp1=int( "173fb695931e845179511c18b546b265cb79b517c135902377281bdf9f34205e1f399" - "4603ad63e9f6e7885ea73a929f03fa0d6bed943051ce76cddde2d89d434d", 16), + "4603ad63e9f6e7885ea73a929f03fa0d6bed943051ce76cddde2d89d434d", + 16, + ), dmq1=int( "10956b387b2621327da0c3c8ffea2af8be967ee25163222746c28115a406e632a7f12" - "5a9397224f1fa5c116cd3a313e5c508d31db2deb83b6e082d213e33f7fcf", 16), + "5a9397224f1fa5c116cd3a313e5c508d31db2deb83b6e082d213e33f7fcf", + 16, + ), iqmp=int( "234f833949f2c0d797bc6a0e906331e17394fa8fbc8449395766d3a8d222cf6167c48" - "8e7fe1fe9721d3e3b699a595c8e6f063d92bd840dbc84d763b2b37002109", 16), + "8e7fe1fe9721d3e3b699a595c8e6f063d92bd840dbc84d763b2b37002109", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -309,31 +411,44 @@ "0a5ae9f579ef1fd7e42937f921eb3123c4a045cc47a2159fbbf904783e654954c" "42294c30a95c15db7c7b91f136244e548f62474b137087346c5522e54f226f49d" "6c93bc58cb39972e41bde452bb3ae9d60eb93e5e1ce91d222138d9890c7d0b", - 16), - ) + 16, + ), + ), ) RSA_KEY_1028 = RSAPrivateNumbers( p=int( "359d17378fae8e9160097daee78a206bd52efe1b757c12a6da8026cc4fc4bb2620f12" - "b8254f4db6aed8228be8ee3e5a27ec7d31048602f01edb00befd209e8c75", 16), + "b8254f4db6aed8228be8ee3e5a27ec7d31048602f01edb00befd209e8c75", + 16, + ), q=int( "33a2e70b93d397c46e63b273dcd3dcfa64291342a6ce896e1ec8f1c0edc44106550f3" - "c06e7d3ca6ea29eccf3f6ab5ac6235c265313d6ea8e8767e6a343f616581", 16), + "c06e7d3ca6ea29eccf3f6ab5ac6235c265313d6ea8e8767e6a343f616581", + 16, + ), d=int( "880640088d331aa5c0f4cf2887809a420a2bc086e671e6ffe4e47a8c80792c038a314" "9a8e45ef9a72816ab45b36e3af6800351067a6b2751843d4232413146bb575491463a" "8addd06ce3d1bcf7028ec6c5d938c545a20f0a40214b5c574ca7e840062b2b5f8ed49" - "4b144bb2113677c4b10519177fee1d4f5fb8a1c159b0b47c01", 16), + "4b144bb2113677c4b10519177fee1d4f5fb8a1c159b0b47c01", + 16, + ), dmp1=int( "75f8c52dad2c1cea26b8bba63236ee4059489e3d2db766136098bcc6b67fde8f77cd3" - "640035107bfb1ffc6480983cfb84fe0c3be008424ebc968a7db7e01f005", 16), + "640035107bfb1ffc6480983cfb84fe0c3be008424ebc968a7db7e01f005", + 16, + ), dmq1=int( "3893c59469e4ede5cd0e6ff9837ca023ba9b46ff40c60ccf1bec10f7d38db5b1ba817" - "6c41a3f750ec4203b711455aca06d1e0adffc5cffa42bb92c7cb77a6c01", 16), + "6c41a3f750ec4203b711455aca06d1e0adffc5cffa42bb92c7cb77a6c01", + 16, + ), iqmp=int( "ad32aafae3c962ac25459856dc8ef1f733c3df697eced29773677f435d186cf759d1a" - "5563dd421ec47b4d7e7f12f29647c615166d9c43fc49001b29089344f65", 16), + "5563dd421ec47b4d7e7f12f29647c615166d9c43fc49001b29089344f65", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -341,31 +456,44 @@ "e3510c68073954d3ba4deb38643e7a820a4cf06e75f7f82eca545d412bd637819" "45c28d406e95a6cced5ae924a8bfa4f3def3e0250d91246c269ec40c89c93a85a" "cd3770ba4d2e774732f43abe94394de43fb57f93ca25f7a59d75d400a3eff5", - 16), - ) + 16, + ), + ), ) RSA_KEY_1029 = RSAPrivateNumbers( p=int( "66f33e513c0b6b6adbf041d037d9b1f0ebf8de52812a3ac397a963d3f71ba64b3ad04" - "e4d4b5e377e6fa22febcac292c907dc8dcfe64c807fd9a7e3a698850d983", 16), + "e4d4b5e377e6fa22febcac292c907dc8dcfe64c807fd9a7e3a698850d983", + 16, + ), q=int( "3b47a89a19022461dcc2d3c05b501ee76955e8ce3cf821beb4afa85a21a26fd7203db" - "deb8941f1c60ada39fd6799f6c07eb8554113f1020460ec40e93cd5f6b21", 16), + "deb8941f1c60ada39fd6799f6c07eb8554113f1020460ec40e93cd5f6b21", + 16, + ), d=int( "280c42af8b1c719821f2f6e2bf5f3dd53c81b1f3e1e7cc4fce6e2f830132da0665bde" "bc1e307106b112b52ad5754867dddd028116cf4471bc14a58696b99524b1ad8f05b31" "cf47256e54ab4399b6a073b2c0452441438dfddf47f3334c13c5ec86ece4d33409056" - "139328fafa992fb5f5156f25f9b21d3e1c37f156d963d97e41", 16), + "139328fafa992fb5f5156f25f9b21d3e1c37f156d963d97e41", + 16, + ), dmp1=int( "198c7402a4ec10944c50ab8488d7b5991c767e75eb2817bd427dff10335ae141fa2e8" - "7c016dc22d975cac229b9ffdf7d943ddfd3a04b8bf82e83c3b32c5698b11", 16), + "7c016dc22d975cac229b9ffdf7d943ddfd3a04b8bf82e83c3b32c5698b11", + 16, + ), dmq1=int( "15fd30c7687b68ef7c2a30cdeb913ec56c4757c218cf9a04d995470797ee5f3a17558" - "fbb6d00af245d2631d893b382da48a72bc8a613024289895952ab245b0c1", 16), + "fbb6d00af245d2631d893b382da48a72bc8a613024289895952ab245b0c1", + 16, + ), iqmp=int( "4f8fde17e84557a3f4e242d889e898545ab55a1a8e075c9bb0220173ccffe84659abe" - "a235104f82e32750309389d4a52af57dbb6e48d831917b6efeb190176570", 16), + "a235104f82e32750309389d4a52af57dbb6e48d831917b6efeb190176570", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -373,31 +501,44 @@ "99a9f74981c3eeaaf947d5c2d64a1a80f5c5108a49a715c3f7be95a016b8d3300" "965ead4a4df76e642d761526803e9434d4ec61b10cb50526d4dcaef02593085de" "d8c331c1b27b200a45628403065efcb2c0a0ca1f75d648d40a007fbfbf2cae3", - 16), - ) + 16, + ), + ), ) RSA_KEY_1030 = RSAPrivateNumbers( p=int( "6f4ac8a8172ef1154cf7f80b5e91de723c35a4c512860bfdbafcc3b994a2384bf7796" - "3a2dd0480c7e04d5d418629651a0de8979add6f47b23da14c27a682b69c9", 16), + "3a2dd0480c7e04d5d418629651a0de8979add6f47b23da14c27a682b69c9", + 16, + ), q=int( "65a9f83e07dea5b633e036a9dccfb32c46bf53c81040a19c574c3680838fc6d28bde9" - "55c0ff18b30481d4ab52a9f5e9f835459b1348bbb563ad90b15a682fadb3", 16), + "55c0ff18b30481d4ab52a9f5e9f835459b1348bbb563ad90b15a682fadb3", + 16, + ), d=int( "290db707b3e1a96445ae8ea93af55a9f211a54ebe52995c2eb28085d1e3f09c986e73" "a00010c8e4785786eaaa5c85b98444bd93b585d0c24363ccc22c482e150a3fd900176" "86968e4fa20423ae72823b0049defceccb39bb34aa4ef64e6b14463b76d6a871c859e" - "37285455b94b8e1527d1525b1682ac6f7c8fd79d576c55318c1", 16), + "37285455b94b8e1527d1525b1682ac6f7c8fd79d576c55318c1", + 16, + ), dmp1=int( "23f7fa84010225dea98297032dac5d45745a2e07976605681acfe87e0920a8ab3caf5" - "9d9602f3d63dc0584f75161fd8fff20c626c21c5e02a85282276a74628a9", 16), + "9d9602f3d63dc0584f75161fd8fff20c626c21c5e02a85282276a74628a9", + 16, + ), dmq1=int( "18ebb657765464a8aa44bf019a882b72a2110a77934c54915f70e6375088b10331982" - "962bce1c7edd8ef9d3d95aa2566d2a99da6ebab890b95375919408d00f33", 16), + "962bce1c7edd8ef9d3d95aa2566d2a99da6ebab890b95375919408d00f33", + 16, + ), iqmp=int( "3d59d208743c74054151002d77dcdfc55af3d41357e89af88d7eef2767be54c290255" - "9258d85cf2a1083c035a33e65a1ca46dc8b706847c1c6434cef7b71a9dae", 16), + "9258d85cf2a1083c035a33e65a1ca46dc8b706847c1c6434cef7b71a9dae", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -405,31 +546,44 @@ "8fcdbb6b4e12168304f587999f9d96a421fc80cb933a490df85d25883e6a88750" "d6bd8b3d4117251eee8f45e70e6daac7dbbd92a9103c623a09355cf00e3f16168" "e38b9c4cb5b368deabbed8df466bc6835eaba959bc1c2f4ec32a09840becc8b", - 16), - ) + 16, + ), + ), ) RSA_KEY_1031 = RSAPrivateNumbers( p=int( "c0958c08e50137db989fb7cc93abf1984543e2f955d4f43fb2967f40105e79274c852" - "293fa06ce63ca8436155e475ed6d1f73fea4c8e2516cc79153e3dc83e897", 16), + "293fa06ce63ca8436155e475ed6d1f73fea4c8e2516cc79153e3dc83e897", + 16, + ), q=int( "78cae354ea5d6862e5d71d20273b7cddb8cdfab25478fe865180676b04250685c4d03" - "30c216574f7876a7b12dfe69f1661d3b0cea6c2c0dcfb84050f817afc28d", 16), + "30c216574f7876a7b12dfe69f1661d3b0cea6c2c0dcfb84050f817afc28d", + 16, + ), d=int( "1d55cc02b17a5d25bfb39f2bc58389004d0d7255051507f75ef347cdf5519d1a00f4b" "d235ce4171bfab7bdb7a6dcfae1cf41433fb7da5923cc84f15a675c0b83492c95dd99" "a9fc157aea352ffdcbb5d59dbc3662171d5838d69f130678ee27841a79ef64f679ce9" - "3821fa69c03f502244c04b737edad8967def8022a144feaab29", 16), + "3821fa69c03f502244c04b737edad8967def8022a144feaab29", + 16, + ), dmp1=int( "5b1c2504ec3a984f86b4414342b5bcf59a0754f13adf25b2a0edbc43f5ba8c3cc061d" - "80b03e5866d059968f0d10a98deaeb4f7830436d76b22cf41f2914e13eff", 16), + "80b03e5866d059968f0d10a98deaeb4f7830436d76b22cf41f2914e13eff", + 16, + ), dmq1=int( "6c361e1819691ab5d67fb2a8f65c958d301cdf24d90617c68ec7005edfb4a7b638cde" - "79d4b61cfba5c86e8c0ccf296bc7f611cb8d4ae0e072a0f68552ec2d5995", 16), + "79d4b61cfba5c86e8c0ccf296bc7f611cb8d4ae0e072a0f68552ec2d5995", + 16, + ), iqmp=int( "b7d61945fdc8b92e075b15554bab507fa8a18edd0a18da373ec6c766c71eece61136a" - "84b90b6d01741d40458bfad17a9bee9d4a8ed2f6e270782dc3bf5d58b56e", 16), + "84b90b6d01741d40458bfad17a9bee9d4a8ed2f6e270782dc3bf5d58b56e", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -437,38 +591,51 @@ "9f73da0690581691626d8a7cf5d972cced9c2091ccf999024b23b4e6dc6d99f80" "a454737dec0caffaebe4a3fac250ed02079267c8f39620b5ae3e125ca35338522" "dc9353ecac19cb2fe3b9e3a9291619dbb1ea3a7c388e9ee6469fbf5fb22892b", - 16), - ) + 16, + ), + ), ) RSA_KEY_1536 = RSAPrivateNumbers( p=int( "f1a65fa4e2aa6e7e2b560251e8a4cd65b625ad9f04f6571785782d1c213d91c961637" "0c572f2783caf2899f7fb690cf99a0184257fbd4b071b212c88fb348279a5387e61f1" - "17e9c62980c45ea863fa9292087c0f66ecdcde6443d5a37268bf71", 16), + "17e9c62980c45ea863fa9292087c0f66ecdcde6443d5a37268bf71", + 16, + ), q=int( "e54c2cbc3839b1da6ae6fea45038d986d6f523a3ae76051ba20583aab711ea5965cf5" "3cf54128cc9573f7460bba0fd6758a57aaf240c391790fb38ab473d83ef735510c53d" - "1d10c31782e8fd7da42615e33565745c30a5e6ceb2a3ae0666cc35", 16), + "1d10c31782e8fd7da42615e33565745c30a5e6ceb2a3ae0666cc35", + 16, + ), d=int( "7bcad87e23da2cb2a8c328883fabce06e1f8e9b776c8bf253ad9884e6200e3bd9bd3b" "a2cbe87d3854527bf005ba5d878c5b0fa20cfb0a2a42884ae95ca12bf7304285e9214" "5e992f7006c7c0ae839ad550da495b143bec0f4806c7f44caed45f3ccc6dc44cfaf30" "7abdb757e3d28e41c2d21366835c0a41e50a95af490ac03af061d2feb36ac0afb87be" "a13fb0f0c5a410727ebedb286c77f9469473fae27ef2c836da6071ef7efc1647f1233" - "4009a89eecb09a8287abc8c2afd1ddd9a1b0641", 16), + "4009a89eecb09a8287abc8c2afd1ddd9a1b0641", + 16, + ), dmp1=int( "a845366cd6f9df1f34861bef7594ed025aa83a12759e245f58adaa9bdff9c3befb760" "75d3701e90038e888eec9bf092df63400152cb25fc07effc6c74c45f0654ccbde15cd" - "90dd5504298a946fa5cf22a956072da27a6602e6c6e5c97f2db9c1", 16), + "90dd5504298a946fa5cf22a956072da27a6602e6c6e5c97f2db9c1", + 16, + ), dmq1=int( "28b0c1e78cdac03310717992d321a3888830ec6829978c048156152d805b4f8919c61" "70b5dd204e5ddf3c6c53bc6aff15d0bd09faff7f351b94abb9db980b31f150a6d7573" - "08eb66938f89a5225cb4dd817a824c89e7a0293b58fc2eefb7e259", 16), + "08eb66938f89a5225cb4dd817a824c89e7a0293b58fc2eefb7e259", + 16, + ), iqmp=int( "6c1536c0e16e42a094b6caaf50231ba81916871497d73dcbbbd4bdeb9e60cae0413b3" "8143b5d680275b29ed7769fe5577e4f9b3647ddb064941120914526d64d80016d2eb7" - "dc362da7c569623157f3d7cff8347f11494bf5c048d77e28d3f515", 16), + "dc362da7c569623157f3d7cff8347f11494bf5c048d77e28d3f515", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -477,8 +644,10 @@ "c248ceef4050160705c188043c8559bf6dbfb6c4bb382eda4e9547575a8227d5b" "3c0a7088391364cf9f018d8bea053b226ec65e8cdbeaf48a071d0074860a734b1" "cb7d2146d43014b20776dea42f7853a54690e6cbbf3331a9f43763cfe2a51c329" - "3bea3b2eebec0d8e43eb317a443afe541107d886e5243c096091543ae65", 16), - ) + "3bea3b2eebec0d8e43eb317a443afe541107d886e5243c096091543ae65", + 16, + ), + ), ) RSA_KEY_2048 = RSAPrivateNumbers( @@ -486,12 +655,16 @@ "e14202e58c5f7446648d75e5dc465781f661f6b73000c080368afcfb21377f4ef19da" "845d4ef9bc6b151f6d9f34629103f2e57615f9ba0a3a2fbb035069e1d63b4bb0e78ad" "dad1ec3c6f87e25c877a1c4c1972098e09158ef7b9bc163852a18d44a70b7b31a03dc" - "2614fd9ab7bf002cba79054544af3bfbdb6aed06c7b24e6ab", 16), + "2614fd9ab7bf002cba79054544af3bfbdb6aed06c7b24e6ab", + 16, + ), q=int( "dbe2bea1ff92599bd19f9d045d6ce62250c05cfeac5117f3cf3e626cb696e3d886379" "557d5a57b7476f9cf886accfd40508a805fe3b45a78e1a8a125e516cda91640ee6398" "ec5a39d3e6b177ef12ab00d07907a17640e4ca454fd8487da3c4ffa0d5c2a5edb1221" - "1c8e33c7ee9fa6753771fd111ec04b8317f86693eb2928c89", 16), + "1c8e33c7ee9fa6753771fd111ec04b8317f86693eb2928c89", + 16, + ), d=int( "aef17f80f2653bc30539f26dd4c82ed6abc1d1b53bc0abcdbee47e9a8ab433abde865" "9fcfae1244d22de6ad333c95aee7d47f30b6815065ac3322744d3ea75058002cd1b29" @@ -500,22 +673,30 @@ "c8263ce2802a769a090e993fd49abc50c3d3c78c29bee2de0c98055d2f102f1c5684b" "8dddee611d5205392d8e8dd61a15bf44680972a87f040a611a149271eeb2573f8bf6f" "627dfa70e77def2ee6584914fa0290e041349ea0999cdff3e493365885b906cbcf195" - "843345809a85098cca90fea014a21", 16), + "843345809a85098cca90fea014a21", + 16, + ), dmp1=int( "9ba56522ffcfa5244eae805c87cc0303461f82be29691b9a7c15a5a050df6c143c575" "7c288d3d7ab7f32c782e9d9fcddc10a604e6425c0e5d0e46069035d95a923646d276d" "d9d95b8696fa29ab0de18e53f6f119310f8dd9efca62f0679291166fed8cbd5f18fe1" - "3a5f1ead1d71d8c90f40382818c18c8d069be793dbc094f69", 16), + "3a5f1ead1d71d8c90f40382818c18c8d069be793dbc094f69", + 16, + ), dmq1=int( "a8d4a0aaa2212ccc875796a81353da1fdf00d46676c88d2b96a4bfcdd924622d8e607" "f3ac1c01dda7ebfb0a97dd7875c2a7b2db6728fb827b89c519f5716fb3228f4121647" "04b30253c17de2289e9cce3343baa82eb404f789e094a094577a9b0c5314f1725fdf5" - "8e87611ad20da331bd30b8aebc7dc97d0e9a9ba8579772c9", 16), + "8e87611ad20da331bd30b8aebc7dc97d0e9a9ba8579772c9", + 16, + ), iqmp=int( "17bd5ef638c49440d1853acb3fa63a5aca28cb7f94ed350db7001c8445da8943866a7" "0936e1ee2716c98b484e357cc054d82fbbd98d42f880695d38a1dd4eb096f629b9417" "aca47e6de5da9f34e60e8a0ffd7e35be74deeef67298d94b3e0db73fc4b7a4cb360c8" - "9d2117a0bfd9434d37dc7c027d6b01e5295c875015510917d", 16), + "9d2117a0bfd9434d37dc7c027d6b01e5295c875015510917d", + 16, + ), public_numbers=RSAPublicNumbers( e=65537, n=int( @@ -526,8 +707,10 @@ "c29e53635e24c87a5b2c4215968063cdeb68a972babbc1e3cff00fb9a80e372a4" "d0c2c920d1e8cee333ce470dc2e8145adb05bf29aee1d24f141e8cc784989c587" "fc6fbacd979f3f2163c1d7299b365bc72ffe2848e967aed1e48dcc515b3a50ed4" - "de04fd053846ca10a223b10cc841cc80fdebee44f3114c13e886af583", 16), - ) + "de04fd053846ca10a223b10cc841cc80fdebee44f3114c13e886af583", + 16, + ), + ), ) RSA_KEY_2048_ALT = RSAPrivateNumbers( @@ -598,6 +781,6 @@ "715070507278514207864914944621214574162116786377990456375" "964817771730371110612100247262908550409785456157505694419" "00451152778245269283276012328748538414051025541" - ) - ) + ), + ), ) diff --git a/tests/hazmat/primitives/test_3des.py b/tests/hazmat/primitives/test_3des.py index 0f0f147095df..d14dcad9f71f 100644 --- a/tests/hazmat/primitives/test_3des.py +++ b/tests/hazmat/primitives/test_3des.py @@ -45,11 +45,7 @@ class TestTripleDESModeCBC(object): test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CBC"), - [ - "TCBCMMT1.rsp", - "TCBCMMT2.rsp", - "TCBCMMT3.rsp", - ], + ["TCBCMMT1.rsp", "TCBCMMT2.rsp", "TCBCMMT3.rsp"], lambda key1, key2, key3, **kwargs: algorithms.TripleDES( binascii.unhexlify(key1 + key2 + key3) ), @@ -82,11 +78,7 @@ class TestTripleDESModeOFB(object): test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "OFB"), - [ - "TOFBMMT1.rsp", - "TOFBMMT2.rsp", - "TOFBMMT3.rsp", - ], + ["TOFBMMT1.rsp", "TOFBMMT2.rsp", "TOFBMMT3.rsp"], lambda key1, key2, key3, **kwargs: algorithms.TripleDES( binascii.unhexlify(key1 + key2 + key3) ), @@ -119,11 +111,7 @@ class TestTripleDESModeCFB(object): test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CFB"), - [ - "TCFB64MMT1.rsp", - "TCFB64MMT2.rsp", - "TCFB64MMT3.rsp", - ], + ["TCFB64MMT1.rsp", "TCFB64MMT2.rsp", "TCFB64MMT3.rsp"], lambda key1, key2, key3, **kwargs: algorithms.TripleDES( binascii.unhexlify(key1 + key2 + key3) ), @@ -156,11 +144,7 @@ class TestTripleDESModeCFB8(object): test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "CFB"), - [ - "TCFB8MMT1.rsp", - "TCFB8MMT2.rsp", - "TCFB8MMT3.rsp", - ], + ["TCFB8MMT1.rsp", "TCFB8MMT2.rsp", "TCFB8MMT3.rsp"], lambda key1, key2, key3, **kwargs: algorithms.TripleDES( binascii.unhexlify(key1 + key2 + key3) ), @@ -193,11 +177,7 @@ class TestTripleDESModeECB(object): test_mmt = generate_encrypt_test( load_nist_vectors, os.path.join("ciphers", "3DES", "ECB"), - [ - "TECBMMT1.rsp", - "TECBMMT2.rsp", - "TECBMMT3.rsp", - ], + ["TECBMMT1.rsp", "TECBMMT2.rsp", "TECBMMT3.rsp"], lambda key1, key2, key3, **kwargs: algorithms.TripleDES( binascii.unhexlify(key1 + key2 + key3) ), diff --git a/tests/hazmat/primitives/test_aead.py b/tests/hazmat/primitives/test_aead.py index f8cf648ed45c..753c7c192bc9 100644 --- a/tests/hazmat/primitives/test_aead.py +++ b/tests/hazmat/primitives/test_aead.py @@ -12,13 +12,17 @@ from cryptography.exceptions import InvalidTag, UnsupportedAlgorithm, _Reasons from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives.ciphers.aead import ( - AESCCM, AESGCM, ChaCha20Poly1305 + AESCCM, + AESGCM, + ChaCha20Poly1305, ) from .utils import _load_all_params from ...utils import ( - load_nist_ccm_vectors, load_nist_vectors, load_vectors_from_file, - raises_unsupported_algorithm + load_nist_ccm_vectors, + load_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) @@ -37,7 +41,7 @@ def _aead_supported(cls): @pytest.mark.skipif( _aead_supported(ChaCha20Poly1305), - reason="Requires OpenSSL without ChaCha20Poly1305 support" + reason="Requires OpenSSL without ChaCha20Poly1305 support", ) @pytest.mark.requires_backend_interface(interface=CipherBackend) def test_chacha20poly1305_unsupported_on_older_openssl(backend): @@ -47,7 +51,7 @@ def test_chacha20poly1305_unsupported_on_older_openssl(backend): @pytest.mark.skipif( not _aead_supported(ChaCha20Poly1305), - reason="Does not support ChaCha20Poly1305" + reason="Does not support ChaCha20Poly1305", ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestChaCha20Poly1305(object): @@ -78,11 +82,12 @@ def test_bad_key(self, backend): [ [object(), b"data", b""], [b"0" * 12, object(), b""], - [b"0" * 12, b"data", object()] - ] + [b"0" * 12, b"data", object()], + ], ) - def test_params_not_bytes_encrypt(self, nonce, data, associated_data, - backend): + def test_params_not_bytes_encrypt( + self, nonce, data, associated_data, backend + ): key = ChaCha20Poly1305.generate_key() chacha = ChaCha20Poly1305(key) with pytest.raises(TypeError): @@ -121,8 +126,8 @@ def test_associated_data_none_equal_to_empty_bytestring(self, backend): "vector", load_vectors_from_file( os.path.join("ciphers", "ChaCha20Poly1305", "openssl.txt"), - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_openssl_vectors(self, vector, backend): key = binascii.unhexlify(vector["key"]) @@ -145,8 +150,8 @@ def test_openssl_vectors(self, vector, backend): "vector", load_vectors_from_file( os.path.join("ciphers", "ChaCha20Poly1305", "boringssl.txt"), - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_boringssl_vectors(self, vector, backend): key = binascii.unhexlify(vector["key"]) @@ -231,22 +236,30 @@ def test_invalid_nonce_length(self, backend): _load_all_params( os.path.join("ciphers", "AES", "CCM"), [ - "DVPT128.rsp", "DVPT192.rsp", "DVPT256.rsp", - "VADT128.rsp", "VADT192.rsp", "VADT256.rsp", - "VNT128.rsp", "VNT192.rsp", "VNT256.rsp", - "VPT128.rsp", "VPT192.rsp", "VPT256.rsp", + "DVPT128.rsp", + "DVPT192.rsp", + "DVPT256.rsp", + "VADT128.rsp", + "VADT192.rsp", + "VADT256.rsp", + "VNT128.rsp", + "VNT192.rsp", + "VNT256.rsp", + "VPT128.rsp", + "VPT192.rsp", + "VPT256.rsp", ], - load_nist_ccm_vectors - ) + load_nist_ccm_vectors, + ), ) def test_vectors(self, vector, backend): key = binascii.unhexlify(vector["key"]) nonce = binascii.unhexlify(vector["nonce"]) - adata = binascii.unhexlify(vector["adata"])[:vector["alen"]] + adata = binascii.unhexlify(vector["adata"])[: vector["alen"]] ct = binascii.unhexlify(vector["ct"]) - pt = binascii.unhexlify(vector["payload"])[:vector["plen"]] + pt = binascii.unhexlify(vector["payload"])[: vector["plen"]] aesccm = AESCCM(key, vector["tlen"]) - if vector.get('fail'): + if vector.get("fail"): with pytest.raises(InvalidTag): aesccm.decrypt(nonce, ct, adata) else: @@ -279,7 +292,7 @@ def test_nonce_too_long(self, backend): [object(), b"data", b""], [b"0" * 12, object(), b""], [b"0" * 12, b"data", object()], - ] + ], ) def test_params_not_bytes(self, nonce, data, associated_data, backend): key = AESCCM.generate_key(128) @@ -345,7 +358,7 @@ def _load_gcm_vectors(): "gcmEncryptExtIV192.rsp", "gcmEncryptExtIV256.rsp", ], - load_nist_vectors + load_nist_vectors, ) return [x for x in vectors if len(x["tag"]) == 32] @@ -393,8 +406,8 @@ def test_vectors(self, backend, vector): [ [object(), b"data", b""], [b"0" * 12, object(), b""], - [b"0" * 12, b"data", object()] - ] + [b"0" * 12, b"data", object()], + ], ) def test_params_not_bytes(self, nonce, data, associated_data, backend): key = AESGCM.generate_key(128) diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index d99ba406d050..03328caff061 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -31,11 +31,15 @@ class TestAESModeXTS(object): # data unit length that is divisible by 8. The NIST vectors include # tests for implementations that support encryption of data that is # not divisible modulo 8, but OpenSSL is not such an implementation. - [x for x in _load_all_params( - os.path.join("ciphers", "AES", "XTS", "tweak-128hexstr"), - ["XTSGenAES128.rsp", "XTSGenAES256.rsp"], - load_nist_vectors - ) if int(x["dataunitlen"]) / 8.0 == int(x["dataunitlen"]) // 8] + [ + x + for x in _load_all_params( + os.path.join("ciphers", "AES", "XTS", "tweak-128hexstr"), + ["XTSGenAES128.rsp", "XTSGenAES256.rsp"], + load_nist_vectors, + ) + if int(x["dataunitlen"]) / 8.0 == int(x["dataunitlen"]) // 8 + ], ) def test_xts_vectors(self, vector, backend): key = binascii.unhexlify(vector["key"]) @@ -263,9 +267,7 @@ def test_gcm_tag_with_only_aad(self, backend): tag = binascii.unhexlify(b"0f247e7f9c2505de374006738018493b") cipher = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ) encryptor = cipher.encryptor() encryptor.authenticate_additional_data(aad) @@ -280,9 +282,7 @@ def test_gcm_ciphertext_with_no_aad(self, backend): pt = binascii.unhexlify(b"28286a321293253c3e0aa2704a278032") cipher = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ) encryptor = cipher.encryptor() computed_ct = encryptor.update(pt) + encryptor.finalize() @@ -293,13 +293,11 @@ def test_gcm_ciphertext_limit(self, backend): encryptor = base.Cipher( algorithms.AES(b"\x00" * 16), modes.GCM(b"\x01" * 16), - backend=backend + backend=backend, ).encryptor() encryptor._bytes_processed = modes.GCM._MAX_ENCRYPTED_BYTES - 16 encryptor.update(b"0" * 16) - assert ( - encryptor._bytes_processed == modes.GCM._MAX_ENCRYPTED_BYTES - ) + assert encryptor._bytes_processed == modes.GCM._MAX_ENCRYPTED_BYTES with pytest.raises(ValueError): encryptor.update(b"0") @@ -307,7 +305,7 @@ def test_gcm_aad_limit(self, backend): encryptor = base.Cipher( algorithms.AES(b"\x00" * 16), modes.GCM(b"\x01" * 16), - backend=backend + backend=backend, ).encryptor() encryptor._aad_bytes_processed = modes.GCM._MAX_AAD_BYTES - 16 encryptor.authenticate_additional_data(b"0" * 16) @@ -319,7 +317,7 @@ def test_gcm_ciphertext_increments(self, backend): encryptor = base.Cipher( algorithms.AES(b"\x00" * 16), modes.GCM(b"\x01" * 16), - backend=backend + backend=backend, ).encryptor() encryptor.update(b"0" * 8) assert encryptor._bytes_processed == 8 @@ -332,7 +330,7 @@ def test_gcm_aad_increments(self, backend): encryptor = base.Cipher( algorithms.AES(b"\x00" * 16), modes.GCM(b"\x01" * 16), - backend=backend + backend=backend, ).encryptor() encryptor.authenticate_additional_data(b"0" * 8) assert encryptor._aad_bytes_processed == 8 @@ -345,17 +343,13 @@ def test_gcm_tag_decrypt_none(self, backend): aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") encryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ).encryptor() encryptor.authenticate_additional_data(aad) encryptor.finalize() decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ).decryptor() decryptor.authenticate_additional_data(aad) with pytest.raises(ValueError): @@ -367,18 +361,14 @@ def test_gcm_tag_decrypt_mode(self, backend): aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") encryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ).encryptor() encryptor.authenticate_additional_data(aad) encryptor.finalize() tag = encryptor.tag decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv, tag), - backend=backend + algorithms.AES(key), modes.GCM(iv, tag), backend=backend ).decryptor() decryptor.authenticate_additional_data(aad) decryptor.finalize() @@ -389,18 +379,14 @@ def test_gcm_tag_decrypt_finalize(self, backend): aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") encryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ).encryptor() encryptor.authenticate_additional_data(aad) encryptor.finalize() tag = encryptor.tag decryptor = base.Cipher( - algorithms.AES(key), - modes.GCM(iv), - backend=backend + algorithms.AES(key), modes.GCM(iv), backend=backend ).decryptor() decryptor.authenticate_additional_data(aad) @@ -408,9 +394,7 @@ def test_gcm_tag_decrypt_finalize(self, backend): def test_gcm_tag_decrypt_finalize_tag_length(self, backend): decryptor = base.Cipher( - algorithms.AES(b"0" * 16), - modes.GCM(b"0" * 12), - backend=backend + algorithms.AES(b"0" * 16), modes.GCM(b"0" * 12), backend=backend ).decryptor() with pytest.raises(ValueError): decryptor.finalize_with_tag(b"tagtooshort") @@ -420,14 +404,14 @@ def test_buffer_protocol(self, backend): enc = base.Cipher( algorithms.AES(bytearray(b"\x00" * 16)), modes.GCM(bytearray(b"\x00" * 12)), - backend + backend, ).encryptor() enc.authenticate_additional_data(bytearray(b"foo")) ct = enc.update(data) + enc.finalize() dec = base.Cipher( algorithms.AES(bytearray(b"\x00" * 16)), modes.GCM(bytearray(b"\x00" * 12), enc.tag), - backend + backend, ).decryptor() dec.authenticate_additional_data(bytearray(b"foo")) pt = dec.update(ct) + dec.finalize() @@ -445,7 +429,7 @@ def test_buffer_protocol(self, backend): modes.XTS(bytearray(b"\x00" * 16)), # Add a dummy mode for coverage of the cipher_supported check. DummyMode(), - ] + ], ) @pytest.mark.requires_backend_interface(interface=CipherBackend) def test_buffer_protocol_alternate_modes(mode, backend): diff --git a/tests/hazmat/primitives/test_arc4.py b/tests/hazmat/primitives/test_arc4.py index 1a1734443704..de20b7098ae7 100644 --- a/tests/hazmat/primitives/test_arc4.py +++ b/tests/hazmat/primitives/test_arc4.py @@ -35,7 +35,7 @@ class TestARC4(object): "rfc-6229-128.txt", "rfc-6229-192.txt", "rfc-6229-256.txt", - "arc4.txt" + "arc4.txt", ], lambda key, **kwargs: algorithms.ARC4(binascii.unhexlify(key)), ) diff --git a/tests/hazmat/primitives/test_asym_utils.py b/tests/hazmat/primitives/test_asym_utils.py index b49ca3f2f84a..70bff012fbcb 100644 --- a/tests/hazmat/primitives/test_asym_utils.py +++ b/tests/hazmat/primitives/test_asym_utils.py @@ -7,7 +7,9 @@ import pytest from cryptography.hazmat.primitives.asymmetric.utils import ( - Prehashed, decode_dss_signature, encode_dss_signature + Prehashed, + decode_dss_signature, + encode_dss_signature, ) @@ -18,11 +20,11 @@ def test_dss_signature(): r_s1 = ( 1037234182290683143945502320610861668562885151617, - 559776156650501990899426031439030258256861634312 + 559776156650501990899426031439030258256861634312, ) sig2 = encode_dss_signature(*r_s1) assert sig2 == ( - b'0-\x02\x15\x00\xb5\xaf0xg\xfb\x8bT9\x00\x13\xccg\x02\r\xdf\x1f,\x0b' + b"0-\x02\x15\x00\xb5\xaf0xg\xfb\x8bT9\x00\x13\xccg\x02\r\xdf\x1f,\x0b" b'\x81\x02\x14b\r;"\xabP1D\x0c>5\xea\xb6\xf4\x81)\x8f\x9e\x9f\x08' ) assert decode_dss_signature(sig2) == r_s1 diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py index 37158f153c7a..f827eee3b6c2 100644 --- a/tests/hazmat/primitives/test_block.py +++ b/tests/hazmat/primitives/test_block.py @@ -8,16 +8,18 @@ import pytest -from cryptography.exceptions import ( - AlreadyFinalized, _Reasons -) +from cryptography.exceptions import AlreadyFinalized, _Reasons from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives.ciphers import ( - Cipher, algorithms, base, modes + Cipher, + algorithms, + base, + modes, ) from .utils import ( - generate_aead_exception_test, generate_aead_tag_exception_test + generate_aead_exception_test, + generate_aead_tag_exception_test, ) from ...doubles import DummyCipherAlgorithm, DummyMode from ...utils import raises_unsupported_algorithm @@ -29,7 +31,7 @@ def test_creates_encryptor(self, backend): cipher = Cipher( algorithms.AES(binascii.unhexlify(b"0" * 32)), modes.CBC(binascii.unhexlify(b"0" * 32)), - backend + backend, ) assert isinstance(cipher.encryptor(), base.CipherContext) @@ -37,7 +39,7 @@ def test_creates_decryptor(self, backend): cipher = Cipher( algorithms.AES(binascii.unhexlify(b"0" * 32)), modes.CBC(binascii.unhexlify(b"0" * 32)), - backend + backend, ) assert isinstance(cipher.decryptor(), base.CipherContext) @@ -53,7 +55,7 @@ def test_use_after_finalize(self, backend): cipher = Cipher( algorithms.AES(binascii.unhexlify(b"0" * 32)), modes.CBC(binascii.unhexlify(b"0" * 32)), - backend + backend, ) encryptor = cipher.encryptor() encryptor.update(b"a" * 16) @@ -74,7 +76,7 @@ def test_use_update_into_after_finalize(self, backend): cipher = Cipher( algorithms.AES(binascii.unhexlify(b"0" * 32)), modes.CBC(binascii.unhexlify(b"0" * 32)), - backend + backend, ) encryptor = cipher.encryptor() encryptor.update(b"a" * 16) @@ -85,9 +87,7 @@ def test_use_update_into_after_finalize(self, backend): def test_unaligned_block_encryption(self, backend): cipher = Cipher( - algorithms.AES(binascii.unhexlify(b"0" * 32)), - modes.ECB(), - backend + algorithms.AES(binascii.unhexlify(b"0" * 32)), modes.ECB(), backend ) encryptor = cipher.encryptor() ct = encryptor.update(b"a" * 15) @@ -105,9 +105,7 @@ def test_unaligned_block_encryption(self, backend): @pytest.mark.parametrize("mode", [DummyMode(), None]) def test_nonexistent_cipher(self, backend, mode): - cipher = Cipher( - DummyCipherAlgorithm(), mode, backend - ) + cipher = Cipher(DummyCipherAlgorithm(), mode, backend) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_CIPHER): cipher.encryptor() @@ -116,9 +114,7 @@ def test_nonexistent_cipher(self, backend, mode): def test_incorrectly_padded(self, backend): cipher = Cipher( - algorithms.AES(b"\x00" * 16), - modes.CBC(b"\x00" * 16), - backend + algorithms.AES(b"\x00" * 16), modes.CBC(b"\x00" * 16), backend ) encryptor = cipher.encryptor() encryptor.update(b"1") @@ -140,12 +136,10 @@ def test_incorrectly_padded(self, backend): @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAEADCipherContext(object): test_aead_exceptions = generate_aead_exception_test( - algorithms.AES, - modes.GCM, + algorithms.AES, modes.GCM, ) test_aead_tag_exceptions = generate_aead_tag_exception_test( - algorithms.AES, - modes.GCM, + algorithms.AES, modes.GCM, ) @@ -154,41 +148,31 @@ class TestModeValidation(object): def test_cbc(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), - modes.CBC(b"abc"), - backend, + algorithms.AES(b"\x00" * 16), modes.CBC(b"abc"), backend, ) def test_ofb(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), - modes.OFB(b"abc"), - backend, + algorithms.AES(b"\x00" * 16), modes.OFB(b"abc"), backend, ) def test_cfb(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), - modes.CFB(b"abc"), - backend, + algorithms.AES(b"\x00" * 16), modes.CFB(b"abc"), backend, ) def test_cfb8(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), - modes.CFB8(b"abc"), - backend, + algorithms.AES(b"\x00" * 16), modes.CFB8(b"abc"), backend, ) def test_ctr(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), - modes.CTR(b"abc"), - backend, + algorithms.AES(b"\x00" * 16), modes.CTR(b"abc"), backend, ) def test_gcm(self): diff --git a/tests/hazmat/primitives/test_camellia.py b/tests/hazmat/primitives/test_camellia.py index 07a735ad3158..b752345d3e44 100644 --- a/tests/hazmat/primitives/test_camellia.py +++ b/tests/hazmat/primitives/test_camellia.py @@ -13,9 +13,7 @@ from cryptography.hazmat.primitives.ciphers import algorithms, modes from .utils import generate_encrypt_test -from ...utils import ( - load_cryptrec_vectors, load_nist_vectors -) +from ...utils import load_cryptrec_vectors, load_nist_vectors @pytest.mark.supported( @@ -32,7 +30,7 @@ class TestCamelliaModeECB(object): [ "camellia-128-ecb.txt", "camellia-192-ecb.txt", - "camellia-256-ecb.txt" + "camellia-256-ecb.txt", ], lambda key, **kwargs: algorithms.Camellia(binascii.unhexlify(key)), lambda **kwargs: modes.ECB(), diff --git a/tests/hazmat/primitives/test_cast5.py b/tests/hazmat/primitives/test_cast5.py index 87e12a33a846..eff5d252f594 100644 --- a/tests/hazmat/primitives/test_cast5.py +++ b/tests/hazmat/primitives/test_cast5.py @@ -46,7 +46,7 @@ class TestCAST5ModeCBC(object): os.path.join("ciphers", "CAST5"), ["cast5-cbc.txt"], lambda key, **kwargs: algorithms.CAST5(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)), ) @@ -63,7 +63,7 @@ class TestCAST5ModeOFB(object): os.path.join("ciphers", "CAST5"), ["cast5-ofb.txt"], lambda key, **kwargs: algorithms.CAST5(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)), ) @@ -80,5 +80,5 @@ class TestCAST5ModeCFB(object): os.path.join("ciphers", "CAST5"), ["cast5-cfb.txt"], lambda key, **kwargs: algorithms.CAST5(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)), ) diff --git a/tests/hazmat/primitives/test_chacha20.py b/tests/hazmat/primitives/test_chacha20.py index 7c475c0f70a1..cb12d3c91ae2 100644 --- a/tests/hazmat/primitives/test_chacha20.py +++ b/tests/hazmat/primitives/test_chacha20.py @@ -30,8 +30,8 @@ class TestChaCha20(object): _load_all_params( os.path.join("ciphers", "ChaCha20"), ["rfc7539.txt"], - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_vectors(self, vector, backend): key = binascii.unhexlify(vector["key"]) @@ -47,9 +47,7 @@ def test_vectors(self, vector, backend): def test_buffer_protocol(self, backend): key = bytearray(os.urandom(32)) nonce = bytearray(os.urandom(16)) - cipher = Cipher( - algorithms.ChaCha20(key, nonce), None, backend - ) + cipher = Cipher(algorithms.ChaCha20(key, nonce), None, backend) enc = cipher.encryptor() ct = enc.update(bytearray(b"hello")) + enc.finalize() dec = cipher.decryptor() diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index f29ba9a916a1..185c21359154 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -14,20 +14,28 @@ from cryptography.hazmat.primitives import ciphers from cryptography.hazmat.primitives.ciphers import modes from cryptography.hazmat.primitives.ciphers.algorithms import ( - AES, ARC4, Blowfish, CAST5, Camellia, IDEA, SEED, TripleDES + AES, + ARC4, + Blowfish, + CAST5, + Camellia, + IDEA, + SEED, + TripleDES, ) from ...utils import ( - load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm + load_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) class TestAES(object): - @pytest.mark.parametrize(("key", "keysize"), [ - (b"0" * 32, 128), - (b"0" * 48, 192), - (b"0" * 64, 256), - ]) + @pytest.mark.parametrize( + ("key", "keysize"), + [(b"0" * 32, 128), (b"0" * 48, 192), (b"0" * 64, 256)], + ) def test_key_size(self, key, keysize): cipher = AES(binascii.unhexlify(key)) assert cipher.key_size == keysize @@ -44,8 +52,7 @@ def test_invalid_key_type(self): class TestAESXTS(object): @pytest.mark.requires_backend_interface(interface=CipherBackend) @pytest.mark.parametrize( - "mode", - (modes.CBC, modes.CTR, modes.CFB, modes.CFB8, modes.OFB) + "mode", (modes.CBC, modes.CTR, modes.CFB, modes.CFB8, modes.OFB) ) def test_invalid_key_size_with_mode(self, mode, backend): with pytest.raises(ValueError): @@ -66,11 +73,10 @@ def test_xts_wrong_key_size(self, backend): class TestCamellia(object): - @pytest.mark.parametrize(("key", "keysize"), [ - (b"0" * 32, 128), - (b"0" * 48, 192), - (b"0" * 64, 256), - ]) + @pytest.mark.parametrize( + ("key", "keysize"), + [(b"0" * 32, 128), (b"0" * 48, 192), (b"0" * 64, 256)], + ) def test_key_size(self, key, keysize): cipher = Camellia(binascii.unhexlify(key)) assert cipher.key_size == keysize @@ -85,11 +91,7 @@ def test_invalid_key_type(self): class TestTripleDES(object): - @pytest.mark.parametrize("key", [ - b"0" * 16, - b"0" * 32, - b"0" * 48, - ]) + @pytest.mark.parametrize("key", [b"0" * 16, b"0" * 32, b"0" * 48]) def test_key_size(self, key): cipher = TripleDES(binascii.unhexlify(key)) assert cipher.key_size == 192 @@ -104,9 +106,10 @@ def test_invalid_key_type(self): class TestBlowfish(object): - @pytest.mark.parametrize(("key", "keysize"), [ - (b"0" * (keysize // 4), keysize) for keysize in range(32, 449, 8) - ]) + @pytest.mark.parametrize( + ("key", "keysize"), + [(b"0" * (keysize // 4), keysize) for keysize in range(32, 449, 8)], + ) def test_key_size(self, key, keysize): cipher = Blowfish(binascii.unhexlify(key)) assert cipher.key_size == keysize @@ -121,9 +124,10 @@ def test_invalid_key_type(self): class TestCAST5(object): - @pytest.mark.parametrize(("key", "keysize"), [ - (b"0" * (keysize // 4), keysize) for keysize in range(40, 129, 8) - ]) + @pytest.mark.parametrize( + ("key", "keysize"), + [(b"0" * (keysize // 4), keysize) for keysize in range(40, 129, 8)], + ) def test_key_size(self, key, keysize): cipher = CAST5(binascii.unhexlify(key)) assert cipher.key_size == keysize @@ -138,15 +142,18 @@ def test_invalid_key_type(self): class TestARC4(object): - @pytest.mark.parametrize(("key", "keysize"), [ - (b"0" * 10, 40), - (b"0" * 14, 56), - (b"0" * 16, 64), - (b"0" * 20, 80), - (b"0" * 32, 128), - (b"0" * 48, 192), - (b"0" * 64, 256), - ]) + @pytest.mark.parametrize( + ("key", "keysize"), + [ + (b"0" * 10, 40), + (b"0" * 14, 56), + (b"0" * 16, 64), + (b"0" * 20, 80), + (b"0" * 32, 128), + (b"0" * 48, 192), + (b"0" * 64, 256), + ], + ) def test_key_size(self, key, keysize): cipher = ARC4(binascii.unhexlify(key)) assert cipher.key_size == keysize @@ -207,8 +214,8 @@ class TestCipherUpdateInto(object): "params", load_vectors_from_file( os.path.join("ciphers", "AES", "ECB", "ECBGFSbox128.rsp"), - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_update_into(self, params, backend): key = binascii.unhexlify(params["key"]) @@ -272,8 +279,8 @@ def test_finalize_with_tag_already_finalized(self, backend): "params", load_vectors_from_file( os.path.join("ciphers", "AES", "ECB", "ECBGFSbox128.rsp"), - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_update_into_multiple_calls(self, params, backend): key = binascii.unhexlify(params["key"]) diff --git a/tests/hazmat/primitives/test_cmac.py b/tests/hazmat/primitives/test_cmac.py index e319396d6865..e4a35df621fd 100644 --- a/tests/hazmat/primitives/test_cmac.py +++ b/tests/hazmat/primitives/test_cmac.py @@ -9,32 +9,42 @@ import pytest from cryptography.exceptions import ( - AlreadyFinalized, InvalidSignature, _Reasons + AlreadyFinalized, + InvalidSignature, + _Reasons, ) from cryptography.hazmat.backends.interfaces import CMACBackend from cryptography.hazmat.primitives.ciphers.algorithms import ( - AES, ARC4, TripleDES + AES, + ARC4, + TripleDES, ) from cryptography.hazmat.primitives.cmac import CMAC from ...utils import ( - load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm + load_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) vectors_aes128 = load_vectors_from_file( - "CMAC/nist-800-38b-aes128.txt", load_nist_vectors) + "CMAC/nist-800-38b-aes128.txt", load_nist_vectors +) vectors_aes192 = load_vectors_from_file( - "CMAC/nist-800-38b-aes192.txt", load_nist_vectors) + "CMAC/nist-800-38b-aes192.txt", load_nist_vectors +) vectors_aes256 = load_vectors_from_file( - "CMAC/nist-800-38b-aes256.txt", load_nist_vectors) + "CMAC/nist-800-38b-aes256.txt", load_nist_vectors +) vectors_aes = vectors_aes128 + vectors_aes192 + vectors_aes256 vectors_3des = load_vectors_from_file( - "CMAC/nist-800-38b-3des.txt", load_nist_vectors) + "CMAC/nist-800-38b-3des.txt", load_nist_vectors +) fake_key = b"\x00" * 16 @@ -43,8 +53,9 @@ class TestCMAC(object): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) @pytest.mark.parametrize("params", vectors_aes) def test_aes_generate(self, backend, params): @@ -58,8 +69,9 @@ def test_aes_generate(self, backend, params): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) @pytest.mark.parametrize("params", vectors_aes) def test_aes_verify(self, backend, params): @@ -73,8 +85,9 @@ def test_aes_verify(self, backend, params): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - TripleDES(fake_key)), - skip_message="Does not support CMAC." + TripleDES(fake_key) + ), + skip_message="Does not support CMAC.", ) @pytest.mark.parametrize("params", vectors_3des) def test_3des_generate(self, backend, params): @@ -93,8 +106,9 @@ def test_3des_generate(self, backend, params): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - TripleDES(fake_key)), - skip_message="Does not support CMAC." + TripleDES(fake_key) + ), + skip_message="Does not support CMAC.", ) @pytest.mark.parametrize("params", vectors_3des) def test_3des_verify(self, backend, params): @@ -113,8 +127,9 @@ def test_3des_verify(self, backend, params): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) def test_invalid_verify(self, backend): key = b"2b7e151628aed2a6abf7158809cf4f3c" @@ -125,9 +140,8 @@ def test_invalid_verify(self, backend): cmac.verify(b"foobar") @pytest.mark.supported( - only_if=lambda backend: backend.cipher_supported( - ARC4(fake_key), None), - skip_message="Does not support CMAC." + only_if=lambda backend: backend.cipher_supported(ARC4(fake_key), None), + skip_message="Does not support CMAC.", ) def test_invalid_algorithm(self, backend): key = b"0102030405" @@ -136,8 +150,9 @@ def test_invalid_algorithm(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) def test_raises_after_finalize(self, backend): key = b"2b7e151628aed2a6abf7158809cf4f3c" @@ -158,23 +173,25 @@ def test_raises_after_finalize(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) def test_verify_reject_unicode(self, backend): key = b"2b7e151628aed2a6abf7158809cf4f3c" cmac = CMAC(AES(key), backend) with pytest.raises(TypeError): - cmac.update(u'') + cmac.update(u"") with pytest.raises(TypeError): - cmac.verify(u'') + cmac.verify(u"") @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) def test_copy_with_backend(self, backend): key = b"2b7e151628aed2a6abf7158809cf4f3c" @@ -185,8 +202,9 @@ def test_copy_with_backend(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.cmac_algorithm_supported( - AES(fake_key)), - skip_message="Does not support CMAC." + AES(fake_key) + ), + skip_message="Does not support CMAC.", ) def test_buffer_protocol(self, backend): key = bytearray(b"2b7e151628aed2a6abf7158809cf4f3c") diff --git a/tests/hazmat/primitives/test_concatkdf.py b/tests/hazmat/primitives/test_concatkdf.py index 673150999865..271e01175d30 100644 --- a/tests/hazmat/primitives/test_concatkdf.py +++ b/tests/hazmat/primitives/test_concatkdf.py @@ -8,9 +8,7 @@ import pytest -from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, _Reasons -) +from cryptography.exceptions import AlreadyFinalized, InvalidKey, _Reasons from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import hashes @@ -102,38 +100,26 @@ def test_invalid_verify(self, backend): def test_unicode_typeerror(self, backend): with pytest.raises(TypeError): ConcatKDFHash( - hashes.SHA256(), - 16, - otherinfo=u"foo", - backend=backend + hashes.SHA256(), 16, otherinfo=u"foo", backend=backend ) with pytest.raises(TypeError): ckdf = ConcatKDFHash( - hashes.SHA256(), - 16, - otherinfo=None, - backend=backend + hashes.SHA256(), 16, otherinfo=None, backend=backend ) ckdf.derive(u"foo") with pytest.raises(TypeError): ckdf = ConcatKDFHash( - hashes.SHA256(), - 16, - otherinfo=None, - backend=backend + hashes.SHA256(), 16, otherinfo=None, backend=backend ) ckdf.verify(u"foo", b"bar") with pytest.raises(TypeError): ckdf = ConcatKDFHash( - hashes.SHA256(), - 16, - otherinfo=None, - backend=backend + hashes.SHA256(), 16, otherinfo=None, backend=backend ) ckdf.verify(b"foo", u"bar") @@ -162,8 +148,10 @@ def test_derive(self, backend): b"8f0af7fce1d045edbc5790931e8d5ca79c73" ) - okm = binascii.unhexlify(b"64ce901db10d558661f10b6836a122a7" - b"605323ce2f39bf27eaaac8b34cf89f2f") + okm = binascii.unhexlify( + b"64ce901db10d558661f10b6836a122a7" + b"605323ce2f39bf27eaaac8b34cf89f2f" + ) oinfo = binascii.unhexlify( b"a1b2c3d4e55e600be5f367e0e8a465f4bf2704db00c9325c" @@ -181,8 +169,10 @@ def test_buffer_protocol(self, backend): b"8f0af7fce1d045edbc5790931e8d5ca79c73" ) - okm = binascii.unhexlify(b"64ce901db10d558661f10b6836a122a7" - b"605323ce2f39bf27eaaac8b34cf89f2f") + okm = binascii.unhexlify( + b"64ce901db10d558661f10b6836a122a7" + b"605323ce2f39bf27eaaac8b34cf89f2f" + ) oinfo = binascii.unhexlify( b"a1b2c3d4e55e600be5f367e0e8a465f4bf2704db00c9325c" @@ -200,8 +190,10 @@ def test_derive_explicit_salt(self, backend): b"8f0af7fce1d045edbc5790931e8d5ca79c73" ) - okm = binascii.unhexlify(b"64ce901db10d558661f10b6836a122a7" - b"605323ce2f39bf27eaaac8b34cf89f2f") + okm = binascii.unhexlify( + b"64ce901db10d558661f10b6836a122a7" + b"605323ce2f39bf27eaaac8b34cf89f2f" + ) oinfo = binascii.unhexlify( b"a1b2c3d4e55e600be5f367e0e8a465f4bf2704db00c9325c" @@ -221,8 +213,10 @@ def test_verify(self, backend): b"8f0af7fce1d045edbc5790931e8d5ca79c73" ) - okm = binascii.unhexlify(b"64ce901db10d558661f10b6836a122a7" - b"605323ce2f39bf27eaaac8b34cf89f2f") + okm = binascii.unhexlify( + b"64ce901db10d558661f10b6836a122a7" + b"605323ce2f39bf27eaaac8b34cf89f2f" + ) oinfo = binascii.unhexlify( b"a1b2c3d4e55e600be5f367e0e8a465f4bf2704db00c9325c" @@ -254,45 +248,38 @@ def test_unicode_typeerror(self, backend): with pytest.raises(TypeError): ConcatKDFHMAC( hashes.SHA256(), - 16, salt=u"foo", + 16, + salt=u"foo", otherinfo=None, - backend=backend + backend=backend, ) with pytest.raises(TypeError): ConcatKDFHMAC( hashes.SHA256(), - 16, salt=None, + 16, + salt=None, otherinfo=u"foo", - backend=backend + backend=backend, ) with pytest.raises(TypeError): ckdf = ConcatKDFHMAC( - hashes.SHA256(), - 16, salt=None, - otherinfo=None, - backend=backend + hashes.SHA256(), 16, salt=None, otherinfo=None, backend=backend ) ckdf.derive(u"foo") with pytest.raises(TypeError): ckdf = ConcatKDFHMAC( - hashes.SHA256(), - 16, salt=None, - otherinfo=None, - backend=backend + hashes.SHA256(), 16, salt=None, otherinfo=None, backend=backend ) ckdf.verify(u"foo", b"bar") with pytest.raises(TypeError): ckdf = ConcatKDFHMAC( - hashes.SHA256(), - 16, salt=None, - otherinfo=None, - backend=backend + hashes.SHA256(), 16, salt=None, otherinfo=None, backend=backend ) ckdf.verify(b"foo", u"bar") diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index 98d1b5337f94..29b0e3ef6b01 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -11,7 +11,10 @@ import pytest from cryptography.hazmat.backends.interfaces import ( - DERSerializationBackend, DHBackend, PEMSerializationBackend) + DERSerializationBackend, + DHBackend, + PEMSerializationBackend, +) from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import dh from cryptography.utils import int_from_bytes @@ -25,100 +28,72 @@ def _skip_dhx_unsupported(backend, is_dhx): if not is_dhx: return if not backend.dh_x942_serialization_supported(): - pytest.skip( - "DH x9.42 serialization is not supported" - ) + pytest.skip("DH x9.42 serialization is not supported") def test_dh_parameternumbers(): - params = dh.DHParameterNumbers( - 65537, 2 - ) + params = dh.DHParameterNumbers(65537, 2) assert params.p == 65537 assert params.g == 2 with pytest.raises(TypeError): - dh.DHParameterNumbers( - None, 2 - ) + dh.DHParameterNumbers(None, 2) with pytest.raises(TypeError): - dh.DHParameterNumbers( - 65537, None - ) + dh.DHParameterNumbers(65537, None) with pytest.raises(TypeError): - dh.DHParameterNumbers( - None, None - ) + dh.DHParameterNumbers(None, None) with pytest.raises(ValueError): - dh.DHParameterNumbers( - 65537, 1 - ) + dh.DHParameterNumbers(65537, 1) - params = dh.DHParameterNumbers( - 65537, 7, 1245 - ) + params = dh.DHParameterNumbers(65537, 7, 1245) assert params.p == 65537 assert params.g == 7 assert params.q == 1245 with pytest.raises(TypeError): - dh.DHParameterNumbers( - 65537, 2, "hello" - ) + dh.DHParameterNumbers(65537, 2, "hello") def test_dh_numbers(): - params = dh.DHParameterNumbers( - 65537, 2 - ) + params = dh.DHParameterNumbers(65537, 2) - public = dh.DHPublicNumbers( - 1, params - ) + public = dh.DHPublicNumbers(1, params) assert public.parameter_numbers is params assert public.y == 1 with pytest.raises(TypeError): - dh.DHPublicNumbers( - 1, None - ) + dh.DHPublicNumbers(1, None) with pytest.raises(TypeError): - dh.DHPublicNumbers( - None, params - ) + dh.DHPublicNumbers(None, params) - private = dh.DHPrivateNumbers( - 1, public - ) + private = dh.DHPrivateNumbers(1, public) assert private.public_numbers is public assert private.x == 1 with pytest.raises(TypeError): - dh.DHPrivateNumbers( - 1, None - ) + dh.DHPrivateNumbers(1, None) with pytest.raises(TypeError): - dh.DHPrivateNumbers( - None, public - ) + dh.DHPrivateNumbers(None, public) def test_dh_parameter_numbers_equality(): assert dh.DHParameterNumbers(65537, 2) == dh.DHParameterNumbers(65537, 2) assert dh.DHParameterNumbers(65537, 7, 12345) == dh.DHParameterNumbers( - 65537, 7, 12345) + 65537, 7, 12345 + ) assert dh.DHParameterNumbers(6, 2) != dh.DHParameterNumbers(65537, 2) assert dh.DHParameterNumbers(65537, 2, 123) != dh.DHParameterNumbers( - 65537, 2, 456) + 65537, 2, 456 + ) assert dh.DHParameterNumbers(65537, 5) != dh.DHParameterNumbers(65537, 2) assert dh.DHParameterNumbers(65537, 2) != object() @@ -163,7 +138,8 @@ def test_dh_parameters_supported(self, backend): b"bcfc7f938a269710ed69e330523e4039029b7900977c740990d46efed79b9bbe" b"73505ae878808944ce4d9c6c52daecc0a87dc889c53499be93db8551ee685f30" b"349bf1b443d4ebaee0d5e8b441a40d4e8178f8f612f657a5eb91e0a8e" - b"107755f", 16 + b"107755f", + 16, ) assert backend.dh_parameters_supported(valid_p, 5) assert not backend.dh_parameters_supported(23, 22) @@ -171,12 +147,11 @@ def test_dh_parameters_supported(self, backend): @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join("asymmetric", "DH", "rfc3526.txt"), - load_nist_vectors - ) + os.path.join("asymmetric", "DH", "rfc3526.txt"), load_nist_vectors + ), ) def test_dh_parameters_allows_rfc3526_groups(self, backend, vector): - p = int_from_bytes(binascii.unhexlify(vector["p"]), 'big') + p = int_from_bytes(binascii.unhexlify(vector["p"]), "big") params = dh.DHParameterNumbers(p, int(vector["g"])) param = params.parameters(backend) key = param.generate_private_key() @@ -189,12 +164,13 @@ def test_dh_parameters_allows_rfc3526_groups(self, backend, vector): @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join("asymmetric", "DH", "RFC5114.txt"), - load_nist_vectors)) + os.path.join("asymmetric", "DH", "RFC5114.txt"), load_nist_vectors + ), + ) def test_dh_parameters_supported_with_q(self, backend, vector): - assert backend.dh_parameters_supported(int(vector["p"], 16), - int(vector["g"], 16), - int(vector["q"], 16)) + assert backend.dh_parameters_supported( + int(vector["p"], 16), int(vector["g"], 16), int(vector["q"], 16) + ) @pytest.mark.skip_fips(reason="modulus too small for FIPS") @pytest.mark.parametrize("with_q", [False, True]) @@ -202,7 +178,8 @@ def test_convert_to_numbers(self, backend, with_q): if with_q: vector = load_vectors_from_file( os.path.join("asymmetric", "DH", "RFC5114.txt"), - load_nist_vectors)[0] + load_nist_vectors, + )[0] p = int(vector["p"], 16) g = int(vector["g"], 16) q = int(vector["q"], 16) @@ -223,12 +200,13 @@ def test_convert_to_numbers(self, backend, with_q): deserialized_public = public.public_key(backend) deserialized_private = private.private_key(backend) - assert isinstance(deserialized_params, - dh.DHParametersWithSerialization) - assert isinstance(deserialized_public, - dh.DHPublicKeyWithSerialization) - assert isinstance(deserialized_private, - dh.DHPrivateKeyWithSerialization) + assert isinstance( + deserialized_params, dh.DHParametersWithSerialization + ) + assert isinstance(deserialized_public, dh.DHPublicKeyWithSerialization) + assert isinstance( + deserialized_private, dh.DHPrivateKeyWithSerialization + ) def test_numbers_unsupported_parameters(self, backend): # p is set to 21 because when calling private_key we want it to @@ -249,7 +227,8 @@ def test_generate_dh(self, backend, with_q): if with_q: vector = load_vectors_from_file( os.path.join("asymmetric", "DH", "RFC5114.txt"), - load_nist_vectors)[0] + load_nist_vectors, + )[0] p = int(vector["p"], 16) g = int(vector["g"], 16) q = int(vector["q"], 16) @@ -303,11 +282,13 @@ def test_exchange_algorithm(self, backend): key2 = parameters.generate_private_key() shared_key_bytes = key2.exchange(key1.public_key()) - symkey = int_from_bytes(shared_key_bytes, 'big') + symkey = int_from_bytes(shared_key_bytes, "big") - symkey_manual = pow(key1.public_key().public_numbers().y, - key2.private_numbers().x, - parameters.parameter_numbers().p) + symkey_manual = pow( + key1.public_key().public_numbers().y, + key2.private_numbers().x, + parameters.parameter_numbers().p, + ) assert symkey == symkey_manual @@ -318,44 +299,54 @@ def test_symmetric_key_padding(self, backend): In length 63 bytes instead 64. We make sure here that we add padding to the key. """ - p = int("11859949538425015739337467917303613431031019140213666" - "129025407300654026585086345323066284800963463204246390" - "256567934582260424238844463330887962689642467123") + p = int( + "11859949538425015739337467917303613431031019140213666" + "129025407300654026585086345323066284800963463204246390" + "256567934582260424238844463330887962689642467123" + ) g = 2 - y = int("32155788395534640648739966373159697798396966919821525" - "72238852825117261342483718574508213761865276905503199" - "969908098203345481366464874759377454476688391248") - x = int("409364065449673443397833358558926598469347813468816037" - "268451847116982490733450463194921405069999008617231539" - "7147035896687401350877308899732826446337707128") + y = int( + "32155788395534640648739966373159697798396966919821525" + "72238852825117261342483718574508213761865276905503199" + "969908098203345481366464874759377454476688391248" + ) + x = int( + "409364065449673443397833358558926598469347813468816037" + "268451847116982490733450463194921405069999008617231539" + "7147035896687401350877308899732826446337707128" + ) parameters = dh.DHParameterNumbers(p, g) public = dh.DHPublicNumbers(y, parameters) private = dh.DHPrivateNumbers(x, public) key = private.private_key(backend) symkey = key.exchange(public.public_key(backend)) assert len(symkey) == 512 // 8 - assert symkey[:1] == b'\x00' + assert symkey[:1] == b"\x00" @pytest.mark.parametrize( "vector", load_vectors_from_file( os.path.join("asymmetric", "DH", "bad_exchange.txt"), - load_nist_vectors)) + load_nist_vectors, + ), + ) def test_bad_exchange(self, backend, vector): if ( - backend._fips_enabled and - int(vector["p1"]) < backend._fips_dh_min_modulus + backend._fips_enabled + and int(vector["p1"]) < backend._fips_dh_min_modulus ): pytest.skip("modulus too small for FIPS mode") - parameters1 = dh.DHParameterNumbers(int(vector["p1"]), - int(vector["g"])) + parameters1 = dh.DHParameterNumbers( + int(vector["p1"]), int(vector["g"]) + ) public1 = dh.DHPublicNumbers(int(vector["y1"]), parameters1) private1 = dh.DHPrivateNumbers(int(vector["x1"]), public1) key1 = private1.private_key(backend) pub_key1 = key1.public_key() - parameters2 = dh.DHParameterNumbers(int(vector["p2"]), - int(vector["g"])) + parameters2 = dh.DHParameterNumbers( + int(vector["p2"]), int(vector["g"]) + ) public2 = dh.DHPublicNumbers(int(vector["y2"]), parameters2) private2 = dh.DHPrivateNumbers(int(vector["x2"]), public2) key2 = private2.private_key(backend) @@ -375,32 +366,33 @@ def test_bad_exchange(self, backend, vector): @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join("asymmetric", "DH", "vec.txt"), - load_nist_vectors)) + os.path.join("asymmetric", "DH", "vec.txt"), load_nist_vectors + ), + ) def test_dh_vectors(self, backend, vector): if ( - backend._fips_enabled and - int(vector["p"]) < backend._fips_dh_min_modulus + backend._fips_enabled + and int(vector["p"]) < backend._fips_dh_min_modulus ): pytest.skip("modulus too small for FIPS mode") - parameters = dh.DHParameterNumbers(int(vector["p"]), - int(vector["g"])) + parameters = dh.DHParameterNumbers(int(vector["p"]), int(vector["g"])) public = dh.DHPublicNumbers(int(vector["y"]), parameters) private = dh.DHPrivateNumbers(int(vector["x"]), public) key = private.private_key(backend) symkey = key.exchange(public.public_key(backend)) - assert int_from_bytes(symkey, 'big') == int(vector["k"], 16) + assert int_from_bytes(symkey, "big") == int(vector["k"], 16) @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join("asymmetric", "DH", "RFC5114.txt"), - load_nist_vectors)) + os.path.join("asymmetric", "DH", "RFC5114.txt"), load_nist_vectors + ), + ) def test_dh_vectors_with_q(self, backend, vector): - parameters = dh.DHParameterNumbers(int(vector["p"], 16), - int(vector["g"], 16), - int(vector["q"], 16)) + parameters = dh.DHParameterNumbers( + int(vector["p"], 16), int(vector["g"], 16), int(vector["q"], 16) + ) public1 = dh.DHPublicNumbers(int(vector["ystatcavs"], 16), parameters) private1 = dh.DHPrivateNumbers(int(vector["xstatcavs"], 16), public1) public2 = dh.DHPublicNumbers(int(vector["ystatiut"], 16), parameters) @@ -410,34 +402,28 @@ def test_dh_vectors_with_q(self, backend, vector): symkey1 = key1.exchange(public2.public_key(backend)) symkey2 = key2.exchange(public1.public_key(backend)) - assert int_from_bytes(symkey1, 'big') == int(vector["z"], 16) - assert int_from_bytes(symkey2, 'big') == int(vector["z"], 16) + assert int_from_bytes(symkey1, "big") == int(vector["z"], 16) + assert int_from_bytes(symkey2, "big") == int(vector["z"], 16) @pytest.mark.requires_backend_interface(interface=DHBackend) @pytest.mark.requires_backend_interface(interface=PEMSerializationBackend) @pytest.mark.requires_backend_interface(interface=DERSerializationBackend) class TestDHPrivateKeySerialization(object): - @pytest.mark.parametrize( ("encoding", "loader_func"), [ - [ - serialization.Encoding.PEM, - serialization.load_pem_private_key - ], - [ - serialization.Encoding.DER, - serialization.load_der_private_key - ], - ] + [serialization.Encoding.PEM, serialization.load_pem_private_key], + [serialization.Encoding.DER, serialization.load_der_private_key], + ], ) def test_private_bytes_unencrypted(self, backend, encoding, loader_func): parameters = FFDH3072_P.parameters(backend) key = parameters.generate_private_key() serialized = key.private_bytes( - encoding, serialization.PrivateFormat.PKCS8, - serialization.NoEncryption() + encoding, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), ) loaded_key = loader_func(serialized, None, backend) loaded_priv_num = loaded_key.private_numbers() @@ -451,7 +437,7 @@ def test_private_bytes_unencrypted(self, backend, encoding, loader_func): (serialization.Encoding.DER, serialization.PrivateFormat.Raw), (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), (serialization.Encoding.X962, serialization.PrivateFormat.PKCS8), - ] + ], ) def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): parameters = FFDH3072_P.parameters(backend) @@ -467,35 +453,39 @@ def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): serialization.load_pem_private_key, serialization.Encoding.PEM, False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhkey.der"), serialization.load_der_private_key, serialization.Encoding.DER, False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.pem"), serialization.load_pem_private_key, serialization.Encoding.PEM, True, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.der"), serialization.load_der_private_key, serialization.Encoding.DER, True, - ) - ] + ), + ], ) - def test_private_bytes_match(self, key_path, loader_func, - encoding, is_dhx, backend): + def test_private_bytes_match( + self, key_path, loader_func, encoding, is_dhx, backend + ): _skip_dhx_unsupported(backend, is_dhx) key_bytes = load_vectors_from_file( - key_path, - lambda pemfile: pemfile.read(), mode="rb" + key_path, lambda pemfile: pemfile.read(), mode="rb" ) key = loader_func(key_bytes, None, backend) serialized = key.private_bytes( - encoding, serialization.PrivateFormat.PKCS8, - serialization.NoEncryption() + encoding, + serialization.PrivateFormat.PKCS8, + serialization.NoEncryption(), ) assert serialized == key_bytes @@ -507,30 +497,33 @@ def test_private_bytes_match(self, key_path, loader_func, serialization.load_pem_private_key, os.path.join("asymmetric", "DH", "dhkey.txt"), False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhkey.der"), serialization.load_der_private_key, os.path.join("asymmetric", "DH", "dhkey.txt"), False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.pem"), serialization.load_pem_private_key, os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.txt"), True, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.der"), serialization.load_der_private_key, os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.txt"), True, - ) - ] + ), + ], ) - def test_private_bytes_values(self, key_path, loader_func, - vec_path, is_dhx, backend): + def test_private_bytes_values( + self, key_path, loader_func, vec_path, is_dhx, backend + ): _skip_dhx_unsupported(backend, is_dhx) key_bytes = load_vectors_from_file( - key_path, - lambda pemfile: pemfile.read(), mode="rb" + key_path, lambda pemfile: pemfile.read(), mode="rb" ) vec = load_vectors_from_file(vec_path, load_nist_vectors)[0] key = loader_func(key_bytes, None, backend) @@ -538,12 +531,15 @@ def test_private_bytes_values(self, key_path, loader_func, assert private_numbers.x == int(vec["x"], 16) assert private_numbers.public_numbers.y == int(vec["y"], 16) assert private_numbers.public_numbers.parameter_numbers.g == int( - vec["g"], 16) + vec["g"], 16 + ) assert private_numbers.public_numbers.parameter_numbers.p == int( - vec["p"], 16) + vec["p"], 16 + ) if "q" in vec: assert private_numbers.public_numbers.parameter_numbers.q == int( - vec["q"], 16) + vec["q"], 16 + ) else: assert private_numbers.public_numbers.parameter_numbers.q is None @@ -554,7 +550,7 @@ def test_private_bytes_traditional_openssl_invalid(self, backend): key.private_bytes( serialization.Encoding.PEM, serialization.PrivateFormat.TraditionalOpenSSL, - serialization.NoEncryption() + serialization.NoEncryption(), ) def test_private_bytes_invalid_encoding(self, backend): @@ -564,7 +560,7 @@ def test_private_bytes_invalid_encoding(self, backend): key.private_bytes( "notencoding", serialization.PrivateFormat.PKCS8, - serialization.NoEncryption() + serialization.NoEncryption(), ) def test_private_bytes_invalid_format(self, backend): @@ -574,7 +570,7 @@ def test_private_bytes_invalid_format(self, backend): key.private_bytes( serialization.Encoding.PEM, "invalidformat", - serialization.NoEncryption() + serialization.NoEncryption(), ) def test_private_bytes_invalid_encryption_algorithm(self, backend): @@ -584,7 +580,7 @@ def test_private_bytes_invalid_encryption_algorithm(self, backend): key.private_bytes( serialization.Encoding.PEM, serialization.PrivateFormat.PKCS8, - "notanencalg" + "notanencalg", ) def test_private_bytes_unsupported_encryption_type(self, backend): @@ -594,7 +590,7 @@ def test_private_bytes_unsupported_encryption_type(self, backend): key.private_bytes( serialization.Encoding.PEM, serialization.PrivateFormat.PKCS8, - DummyKeySerializationEncryption() + DummyKeySerializationEncryption(), ) @@ -602,19 +598,12 @@ def test_private_bytes_unsupported_encryption_type(self, backend): @pytest.mark.requires_backend_interface(interface=PEMSerializationBackend) @pytest.mark.requires_backend_interface(interface=DERSerializationBackend) class TestDHPublicKeySerialization(object): - @pytest.mark.parametrize( ("encoding", "loader_func"), [ - [ - serialization.Encoding.PEM, - serialization.load_pem_public_key - ], - [ - serialization.Encoding.DER, - serialization.load_der_public_key - ], - ] + [serialization.Encoding.PEM, serialization.load_pem_public_key], + [serialization.Encoding.DER, serialization.load_der_public_key], + ], ) def test_public_bytes(self, backend, encoding, loader_func): parameters = FFDH3072_P.parameters(backend) @@ -635,35 +624,37 @@ def test_public_bytes(self, backend, encoding, loader_func): serialization.load_pem_public_key, serialization.Encoding.PEM, False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhpub.der"), serialization.load_der_public_key, serialization.Encoding.DER, False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhpub_rfc5114_2.pem"), serialization.load_pem_public_key, serialization.Encoding.PEM, True, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhpub_rfc5114_2.der"), serialization.load_der_public_key, serialization.Encoding.DER, True, - ) - ] + ), + ], ) - def test_public_bytes_match(self, key_path, loader_func, - encoding, is_dhx, backend): + def test_public_bytes_match( + self, key_path, loader_func, encoding, is_dhx, backend + ): _skip_dhx_unsupported(backend, is_dhx) key_bytes = load_vectors_from_file( - key_path, - lambda pemfile: pemfile.read(), mode="rb" + key_path, lambda pemfile: pemfile.read(), mode="rb" ) pub_key = loader_func(key_bytes, backend) serialized = pub_key.public_bytes( - encoding, - serialization.PublicFormat.SubjectPublicKeyInfo, + encoding, serialization.PublicFormat.SubjectPublicKeyInfo, ) assert serialized == key_bytes @@ -675,30 +666,33 @@ def test_public_bytes_match(self, key_path, loader_func, serialization.load_pem_public_key, os.path.join("asymmetric", "DH", "dhkey.txt"), False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhpub.der"), serialization.load_der_public_key, os.path.join("asymmetric", "DH", "dhkey.txt"), False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhpub_rfc5114_2.pem"), serialization.load_pem_public_key, os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.txt"), True, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhpub_rfc5114_2.der"), serialization.load_der_public_key, os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.txt"), True, - ) - ] + ), + ], ) - def test_public_bytes_values(self, key_path, loader_func, - vec_path, is_dhx, backend): + def test_public_bytes_values( + self, key_path, loader_func, vec_path, is_dhx, backend + ): _skip_dhx_unsupported(backend, is_dhx) key_bytes = load_vectors_from_file( - key_path, - lambda pemfile: pemfile.read(), mode="rb" + key_path, lambda pemfile: pemfile.read(), mode="rb" ) vec = load_vectors_from_file(vec_path, load_nist_vectors)[0] pub_key = loader_func(key_bytes, backend) @@ -716,8 +710,7 @@ def test_public_bytes_invalid_encoding(self, backend): key = parameters.generate_private_key().public_key() with pytest.raises(TypeError): key.public_bytes( - "notencoding", - serialization.PublicFormat.SubjectPublicKeyInfo + "notencoding", serialization.PublicFormat.SubjectPublicKeyInfo ) def test_public_bytes_pkcs1_unsupported(self, backend): @@ -733,19 +726,12 @@ def test_public_bytes_pkcs1_unsupported(self, backend): @pytest.mark.requires_backend_interface(interface=PEMSerializationBackend) @pytest.mark.requires_backend_interface(interface=DERSerializationBackend) class TestDHParameterSerialization(object): - @pytest.mark.parametrize( ("encoding", "loader_func"), [ - [ - serialization.Encoding.PEM, - serialization.load_pem_parameters - ], - [ - serialization.Encoding.DER, - serialization.load_der_parameters - ], - ] + [serialization.Encoding.PEM, serialization.load_pem_parameters], + [serialization.Encoding.DER, serialization.load_der_parameters], + ], ) def test_parameter_bytes(self, backend, encoding, loader_func): parameters = FFDH3072_P.parameters(backend) @@ -764,35 +750,37 @@ def test_parameter_bytes(self, backend, encoding, loader_func): serialization.load_pem_parameters, serialization.Encoding.PEM, False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhp.der"), serialization.load_der_parameters, serialization.Encoding.DER, False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhp_rfc5114_2.pem"), serialization.load_pem_parameters, serialization.Encoding.PEM, True, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhp_rfc5114_2.der"), serialization.load_der_parameters, serialization.Encoding.DER, True, - ) - ] + ), + ], ) - def test_parameter_bytes_match(self, param_path, loader_func, - encoding, backend, is_dhx): + def test_parameter_bytes_match( + self, param_path, loader_func, encoding, backend, is_dhx + ): _skip_dhx_unsupported(backend, is_dhx) param_bytes = load_vectors_from_file( - param_path, - lambda pemfile: pemfile.read(), mode="rb" + param_path, lambda pemfile: pemfile.read(), mode="rb" ) parameters = loader_func(param_bytes, backend) serialized = parameters.parameter_bytes( - encoding, - serialization.ParameterFormat.PKCS3, + encoding, serialization.ParameterFormat.PKCS3, ) assert serialized == param_bytes @@ -804,30 +792,33 @@ def test_parameter_bytes_match(self, param_path, loader_func, serialization.load_pem_parameters, os.path.join("asymmetric", "DH", "dhkey.txt"), False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhp.der"), serialization.load_der_parameters, os.path.join("asymmetric", "DH", "dhkey.txt"), False, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhp_rfc5114_2.pem"), serialization.load_pem_parameters, os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.txt"), True, - ), ( + ), + ( os.path.join("asymmetric", "DH", "dhp_rfc5114_2.der"), serialization.load_der_parameters, os.path.join("asymmetric", "DH", "dhkey_rfc5114_2.txt"), True, - ) - ] + ), + ], ) - def test_public_bytes_values(self, param_path, loader_func, - vec_path, backend, is_dhx): + def test_public_bytes_values( + self, param_path, loader_func, vec_path, backend, is_dhx + ): _skip_dhx_unsupported(backend, is_dhx) key_bytes = load_vectors_from_file( - param_path, - lambda pemfile: pemfile.read(), mode="rb" + param_path, lambda pemfile: pemfile.read(), mode="rb" ) vec = load_vectors_from_file(vec_path, load_nist_vectors)[0] parameters = loader_func(key_bytes, backend) @@ -844,22 +835,25 @@ def test_public_bytes_values(self, param_path, loader_func, [ ( serialization.Encoding.Raw, - serialization.PublicFormat.SubjectPublicKeyInfo + serialization.PublicFormat.SubjectPublicKeyInfo, ), (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), - ] + list(itertools.product( - [ - serialization.Encoding.Raw, - serialization.Encoding.X962, - serialization.Encoding.PEM, - serialization.Encoding.DER - ], - [ - serialization.PublicFormat.Raw, - serialization.PublicFormat.UncompressedPoint, - serialization.PublicFormat.CompressedPoint - ] - )) + ] + + list( + itertools.product( + [ + serialization.Encoding.Raw, + serialization.Encoding.X962, + serialization.Encoding.PEM, + serialization.Encoding.DER, + ], + [ + serialization.PublicFormat.Raw, + serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint, + ], + ) + ), ) def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): parameters = FFDH3072_P.parameters(backend) @@ -871,22 +865,18 @@ def test_parameter_bytes_invalid_encoding(self, backend): parameters = FFDH3072_P.parameters(backend) with pytest.raises(TypeError): parameters.parameter_bytes( - "notencoding", - serialization.ParameterFormat.PKCS3 + "notencoding", serialization.ParameterFormat.PKCS3 ) def test_parameter_bytes_invalid_format(self, backend): parameters = FFDH3072_P.parameters(backend) with pytest.raises(ValueError): - parameters.parameter_bytes( - serialization.Encoding.PEM, - "notformat" - ) + parameters.parameter_bytes(serialization.Encoding.PEM, "notformat") def test_parameter_bytes_openssh_unsupported(self, backend): parameters = FFDH3072_P.parameters(backend) with pytest.raises(TypeError): parameters.parameter_bytes( serialization.Encoding.OpenSSH, - serialization.ParameterFormat.PKCS3 + serialization.ParameterFormat.PKCS3, ) diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index fd1aa6ea5f30..695069a32cfc 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -11,31 +11,31 @@ from cryptography.exceptions import AlreadyFinalized, InvalidSignature from cryptography.hazmat.backends.interfaces import ( - DSABackend, PEMSerializationBackend + DSABackend, + PEMSerializationBackend, ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import dsa from cryptography.hazmat.primitives.asymmetric.utils import ( - Prehashed, encode_dss_signature + Prehashed, + encode_dss_signature, ) from cryptography.utils import CryptographyDeprecationWarning -from .fixtures_dsa import ( - DSA_KEY_1024, DSA_KEY_2048, DSA_KEY_3072 -) +from .fixtures_dsa import DSA_KEY_1024, DSA_KEY_2048, DSA_KEY_3072 from .utils import skip_fips_traditional_openssl from ...doubles import DummyHashAlgorithm, DummyKeySerializationEncryption from ...utils import ( - load_fips_dsa_key_pair_vectors, load_fips_dsa_sig_vectors, + load_fips_dsa_key_pair_vectors, + load_fips_dsa_sig_vectors, load_vectors_from_file, ) def _skip_if_dsa_not_supported(backend, algorithm, p, q, g): - if ( - not backend.dsa_parameters_supported(p, q, g) or - not backend.dsa_hash_supported(algorithm) - ): + if not backend.dsa_parameters_supported( + p, q, g + ) or not backend.dsa_hash_supported(algorithm): pytest.skip( "{} does not support the provided parameters".format(backend) ) @@ -60,21 +60,18 @@ def test_generate_invalid_dsa_parameters(self, backend): @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join( - "asymmetric", "DSA", "FIPS_186-3", "KeyPair.rsp"), - load_fips_dsa_key_pair_vectors - ) + os.path.join("asymmetric", "DSA", "FIPS_186-3", "KeyPair.rsp"), + load_fips_dsa_key_pair_vectors, + ), ) def test_generate_dsa_keys(self, vector, backend): if ( - backend._fips_enabled and - vector['p'] < backend._fips_dsa_min_modulus + backend._fips_enabled + and vector["p"] < backend._fips_dsa_min_modulus ): pytest.skip("Small modulus blocked in FIPS mode") parameters = dsa.DSAParameterNumbers( - p=vector['p'], - q=vector['q'], - g=vector['g'] + p=vector["p"], q=vector["q"], g=vector["g"] ).parameters(backend) skey = parameters.generate_private_key() numbers = skey.private_numbers() @@ -85,10 +82,10 @@ def test_generate_dsa_keys(self, vector, backend): assert parameter_numbers.p == skey_parameters.p assert parameter_numbers.q == skey_parameters.q assert parameter_numbers.g == skey_parameters.g - assert skey_parameters.p == vector['p'] - assert skey_parameters.q == vector['q'] - assert skey_parameters.g == vector['g'] - assert skey.key_size == vector['p'].bit_length() + assert skey_parameters.p == vector["p"] + assert skey_parameters.q == vector["q"] + assert skey_parameters.g == vector["g"] + assert skey.key_size == vector["p"].bit_length() assert pkey.key_size == skey.key_size public_numbers = pkey.public_numbers() assert numbers.public_numbers.y == public_numbers.y @@ -136,7 +133,7 @@ def test_generate_dsa_private_key_and_parameters(self, backend): ( DSA_KEY_2048.public_numbers.parameter_numbers.p, 2 ** 250, - DSA_KEY_2048.public_numbers.parameter_numbers.g + DSA_KEY_2048.public_numbers.parameter_numbers.g, ), ( DSA_KEY_3072.public_numbers.parameter_numbers.p, @@ -146,19 +143,19 @@ def test_generate_dsa_private_key_and_parameters(self, backend): ( DSA_KEY_1024.public_numbers.parameter_numbers.p, DSA_KEY_1024.public_numbers.parameter_numbers.q, - 0 + 0, ), ( DSA_KEY_1024.public_numbers.parameter_numbers.p, DSA_KEY_1024.public_numbers.parameter_numbers.q, - 1 + 1, ), ( DSA_KEY_1024.public_numbers.parameter_numbers.p, DSA_KEY_1024.public_numbers.parameter_numbers.q, - 2 ** 1200 + 2 ** 1200, ), - ] + ], ) def test_invalid_parameters_values(self, p, q, g, backend): with pytest.raises(ValueError): @@ -270,17 +267,18 @@ def test_invalid_parameters_values(self, p, q, g, backend): DSA_KEY_1024.public_numbers.parameter_numbers.q, DSA_KEY_1024.public_numbers.parameter_numbers.g, 2 ** 100, - DSA_KEY_1024.x + DSA_KEY_1024.x, ), - ] + ], ) def test_invalid_dsa_private_key_arguments(self, p, q, g, y, x, backend): with pytest.raises(ValueError): dsa.DSAPrivateNumbers( public_numbers=dsa.DSAPublicNumbers( parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g), - y=y - ), x=x + y=y, + ), + x=x, ).private_key(backend) @pytest.mark.parametrize( @@ -346,13 +344,12 @@ def test_invalid_dsa_private_key_arguments(self, p, q, g, y, x, backend): 2 ** 1200, DSA_KEY_1024.public_numbers.y, ), - ] + ], ) def test_invalid_dsa_public_key_arguments(self, p, q, g, y, backend): with pytest.raises(ValueError): dsa.DSAPublicNumbers( - parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g), - y=y + parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g), y=y ).public_key(backend) def test_large_p(self, backend): @@ -360,7 +357,8 @@ def test_large_p(self, backend): os.path.join("asymmetric", "PEM_Serialization", "dsa_4096.pem"), lambda pemfile: serialization.load_pem_private_key( pemfile.read(), None, backend - ), mode="rb" + ), + mode="rb", ) pn = key.private_numbers() assert pn.public_numbers.parameter_numbers.p.bit_length() == 4096 @@ -373,67 +371,68 @@ def test_large_p(self, backend): q=pn.public_numbers.parameter_numbers.q, g=pn.public_numbers.parameter_numbers.g, ), - y=pn.public_numbers.y - ), x=pn.x + y=pn.public_numbers.y, + ), + x=pn.x, ).private_key(backend) @pytest.mark.requires_backend_interface(interface=DSABackend) class TestDSAVerification(object): _algorithms_dict = { - 'SHA1': hashes.SHA1, - 'SHA224': hashes.SHA224, - 'SHA256': hashes.SHA256, - 'SHA384': hashes.SHA384, - 'SHA512': hashes.SHA512 + "SHA1": hashes.SHA1, + "SHA224": hashes.SHA224, + "SHA256": hashes.SHA256, + "SHA384": hashes.SHA384, + "SHA512": hashes.SHA512, } @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join( - "asymmetric", "DSA", "FIPS_186-3", "SigVer.rsp"), - load_fips_dsa_sig_vectors - ) + os.path.join("asymmetric", "DSA", "FIPS_186-3", "SigVer.rsp"), + load_fips_dsa_sig_vectors, + ), ) def test_dsa_verification(self, vector, backend): - digest_algorithm = vector['digest_algorithm'].replace("-", "") + digest_algorithm = vector["digest_algorithm"].replace("-", "") algorithm = self._algorithms_dict[digest_algorithm] _skip_if_dsa_not_supported( - backend, algorithm, vector['p'], vector['q'], vector['g'] + backend, algorithm, vector["p"], vector["q"], vector["g"] ) public_key = dsa.DSAPublicNumbers( parameter_numbers=dsa.DSAParameterNumbers( - vector['p'], vector['q'], vector['g'] + vector["p"], vector["q"], vector["g"] ), - y=vector['y'] + y=vector["y"], ).public_key(backend) - sig = encode_dss_signature(vector['r'], vector['s']) + sig = encode_dss_signature(vector["r"], vector["s"]) - if vector['result'] == "F": + if vector["result"] == "F": with pytest.raises(InvalidSignature): - public_key.verify(sig, vector['msg'], algorithm()) + public_key.verify(sig, vector["msg"], algorithm()) else: - public_key.verify(sig, vector['msg'], algorithm()) + public_key.verify(sig, vector["msg"], algorithm()) def test_dsa_verify_invalid_asn1(self, backend): public_key = DSA_KEY_1024.public_numbers.public_key(backend) with pytest.raises(InvalidSignature): - public_key.verify(b'fakesig', b'fakemsg', hashes.SHA1()) + public_key.verify(b"fakesig", b"fakemsg", hashes.SHA1()) def test_signature_not_bytes(self, backend): public_key = DSA_KEY_1024.public_numbers.public_key(backend) - with pytest.raises(TypeError), \ - pytest.warns(CryptographyDeprecationWarning): + with pytest.raises(TypeError), pytest.warns( + CryptographyDeprecationWarning + ): public_key.verifier(1234, hashes.SHA1()) def test_use_after_finalize(self, backend): public_key = DSA_KEY_1024.public_numbers.public_key(backend) with pytest.warns(CryptographyDeprecationWarning): - verifier = public_key.verifier(b'fakesig', hashes.SHA1()) - verifier.update(b'irrelevant') + verifier = public_key.verifier(b"fakesig", hashes.SHA1()) + verifier.update(b"irrelevant") with pytest.raises(InvalidSignature): verifier.verify() with pytest.raises(AlreadyFinalized): @@ -473,57 +472,57 @@ def test_prehashed_digest_mismatch(self, backend): def test_prehashed_unsupported_in_signer_ctx(self, backend): private_key = DSA_KEY_1024.private_key(backend) - with pytest.raises(TypeError), \ - pytest.warns(CryptographyDeprecationWarning): + with pytest.raises(TypeError), pytest.warns( + CryptographyDeprecationWarning + ): private_key.signer(Prehashed(hashes.SHA1())) def test_prehashed_unsupported_in_verifier_ctx(self, backend): public_key = DSA_KEY_1024.private_key(backend).public_key() - with pytest.raises(TypeError), \ - pytest.warns(CryptographyDeprecationWarning): - public_key.verifier( - b"0" * 64, Prehashed(hashes.SHA1()) - ) + with pytest.raises(TypeError), pytest.warns( + CryptographyDeprecationWarning + ): + public_key.verifier(b"0" * 64, Prehashed(hashes.SHA1())) @pytest.mark.requires_backend_interface(interface=DSABackend) class TestDSASignature(object): _algorithms_dict = { - 'SHA1': hashes.SHA1, - 'SHA224': hashes.SHA224, - 'SHA256': hashes.SHA256, - 'SHA384': hashes.SHA384, - 'SHA512': hashes.SHA512} + "SHA1": hashes.SHA1, + "SHA224": hashes.SHA224, + "SHA256": hashes.SHA256, + "SHA384": hashes.SHA384, + "SHA512": hashes.SHA512, + } @pytest.mark.parametrize( "vector", load_vectors_from_file( - os.path.join( - "asymmetric", "DSA", "FIPS_186-3", "SigGen.txt"), - load_fips_dsa_sig_vectors - ) + os.path.join("asymmetric", "DSA", "FIPS_186-3", "SigGen.txt"), + load_fips_dsa_sig_vectors, + ), ) def test_dsa_signing(self, vector, backend): - digest_algorithm = vector['digest_algorithm'].replace("-", "") + digest_algorithm = vector["digest_algorithm"].replace("-", "") algorithm = self._algorithms_dict[digest_algorithm] _skip_if_dsa_not_supported( - backend, algorithm, vector['p'], vector['q'], vector['g'] + backend, algorithm, vector["p"], vector["q"], vector["g"] ) private_key = dsa.DSAPrivateNumbers( public_numbers=dsa.DSAPublicNumbers( parameter_numbers=dsa.DSAParameterNumbers( - vector['p'], vector['q'], vector['g'] + vector["p"], vector["q"], vector["g"] ), - y=vector['y'] + y=vector["y"], ), - x=vector['x'] + x=vector["x"], ).private_key(backend) - signature = private_key.sign(vector['msg'], algorithm()) + signature = private_key.sign(vector["msg"], algorithm()) assert signature - private_key.public_key().verify(signature, vector['msg'], algorithm()) + private_key.public_key().verify(signature, vector["msg"], algorithm()) def test_use_after_finalize(self, backend): private_key = DSA_KEY_1024.private_key(backend) @@ -586,8 +585,7 @@ def test_dsa_parameter_numbers_invalid_types(self): def test_dsa_public_numbers(self): parameter_numbers = dsa.DSAParameterNumbers(p=1, q=2, g=3) public_numbers = dsa.DSAPublicNumbers( - y=4, - parameter_numbers=parameter_numbers + y=4, parameter_numbers=parameter_numbers ) assert public_numbers.y == 4 assert public_numbers.parameter_numbers == parameter_numbers @@ -603,12 +601,10 @@ def test_dsa_public_numbers_invalid_types(self): def test_dsa_private_numbers(self): parameter_numbers = dsa.DSAParameterNumbers(p=1, q=2, g=3) public_numbers = dsa.DSAPublicNumbers( - y=4, - parameter_numbers=parameter_numbers + y=4, parameter_numbers=parameter_numbers ) private_numbers = dsa.DSAPrivateNumbers( - x=5, - public_numbers=public_numbers + x=5, public_numbers=public_numbers ) assert private_numbers.x == 5 assert private_numbers.public_numbers == public_numbers @@ -616,8 +612,7 @@ def test_dsa_private_numbers(self): def test_dsa_private_numbers_invalid_types(self): parameter_numbers = dsa.DSAParameterNumbers(p=1, q=2, g=3) public_numbers = dsa.DSAPublicNumbers( - y=4, - parameter_numbers=parameter_numbers + y=4, parameter_numbers=parameter_numbers ) with pytest.raises(TypeError): dsa.DSAPrivateNumbers(x=4, public_numbers=None) @@ -632,8 +627,7 @@ def test_repr(self): ) public_numbers = dsa.DSAPublicNumbers( - y=4, - parameter_numbers=parameter_numbers + y=4, parameter_numbers=parameter_numbers ) assert repr(public_numbers) == ( " the group order. It should be diff --git a/tests/hazmat/primitives/test_hash_vectors.py b/tests/hazmat/primitives/test_hash_vectors.py index 0698f4134fc8..9301b6217101 100644 --- a/tests/hazmat/primitives/test_hash_vectors.py +++ b/tests/hazmat/primitives/test_hash_vectors.py @@ -25,10 +25,7 @@ class TestSHA1(object): test_sha1 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA1"), - [ - "SHA1LongMsg.rsp", - "SHA1ShortMsg.rsp", - ], + ["SHA1LongMsg.rsp", "SHA1ShortMsg.rsp"], hashes.SHA1(), ) @@ -42,10 +39,7 @@ class TestSHA224(object): test_sha224 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), - [ - "SHA224LongMsg.rsp", - "SHA224ShortMsg.rsp", - ], + ["SHA224LongMsg.rsp", "SHA224ShortMsg.rsp"], hashes.SHA224(), ) @@ -59,10 +53,7 @@ class TestSHA256(object): test_sha256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), - [ - "SHA256LongMsg.rsp", - "SHA256ShortMsg.rsp", - ], + ["SHA256LongMsg.rsp", "SHA256ShortMsg.rsp"], hashes.SHA256(), ) @@ -76,10 +67,7 @@ class TestSHA384(object): test_sha384 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), - [ - "SHA384LongMsg.rsp", - "SHA384ShortMsg.rsp", - ], + ["SHA384LongMsg.rsp", "SHA384ShortMsg.rsp"], hashes.SHA384(), ) @@ -93,10 +81,7 @@ class TestSHA512(object): test_sha512 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), - [ - "SHA512LongMsg.rsp", - "SHA512ShortMsg.rsp", - ], + ["SHA512LongMsg.rsp", "SHA512ShortMsg.rsp"], hashes.SHA512(), ) @@ -110,10 +95,7 @@ class TestSHA512224(object): test_sha512_224 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), - [ - "SHA512_224LongMsg.rsp", - "SHA512_224ShortMsg.rsp", - ], + ["SHA512_224LongMsg.rsp", "SHA512_224ShortMsg.rsp"], hashes.SHA512_224(), ) @@ -127,10 +109,7 @@ class TestSHA512256(object): test_sha512_256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA2"), - [ - "SHA512_256LongMsg.rsp", - "SHA512_256ShortMsg.rsp", - ], + ["SHA512_256LongMsg.rsp", "SHA512_256ShortMsg.rsp"], hashes.SHA512_256(), ) @@ -144,16 +123,15 @@ class TestMD5(object): test_md5 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "MD5"), - [ - "rfc-1321.txt", - ], + ["rfc-1321.txt"], hashes.MD5(), ) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.BLAKE2b(digest_size=64)), + hashes.BLAKE2b(digest_size=64) + ), skip_message="Does not support BLAKE2b", ) @pytest.mark.requires_backend_interface(interface=HashBackend) @@ -161,16 +139,15 @@ class TestBLAKE2b(object): test_b2b = generate_hash_test( load_hash_vectors, os.path.join("hashes", "blake2"), - [ - "blake2b.txt", - ], + ["blake2b.txt"], hashes.BLAKE2b(digest_size=64), ) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.BLAKE2s(digest_size=32)), + hashes.BLAKE2s(digest_size=32) + ), skip_message="Does not support BLAKE2s", ) @pytest.mark.requires_backend_interface(interface=HashBackend) @@ -178,9 +155,7 @@ class TestBLAKE2s256(object): test_b2s = generate_hash_test( load_hash_vectors, os.path.join("hashes", "blake2"), - [ - "blake2s.txt", - ], + ["blake2s.txt"], hashes.BLAKE2s(digest_size=32), ) @@ -194,10 +169,7 @@ class TestSHA3224(object): test_sha3_224 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), - [ - "SHA3_224LongMsg.rsp", - "SHA3_224ShortMsg.rsp", - ], + ["SHA3_224LongMsg.rsp", "SHA3_224ShortMsg.rsp"], hashes.SHA3_224(), ) @@ -211,10 +183,7 @@ class TestSHA3256(object): test_sha3_256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), - [ - "SHA3_256LongMsg.rsp", - "SHA3_256ShortMsg.rsp", - ], + ["SHA3_256LongMsg.rsp", "SHA3_256ShortMsg.rsp"], hashes.SHA3_256(), ) @@ -228,10 +197,7 @@ class TestSHA3384(object): test_sha3_384 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), - [ - "SHA3_384LongMsg.rsp", - "SHA3_384ShortMsg.rsp", - ], + ["SHA3_384LongMsg.rsp", "SHA3_384ShortMsg.rsp"], hashes.SHA3_384(), ) @@ -245,17 +211,15 @@ class TestSHA3512(object): test_sha3_512 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHA3"), - [ - "SHA3_512LongMsg.rsp", - "SHA3_512ShortMsg.rsp", - ], + ["SHA3_512LongMsg.rsp", "SHA3_512ShortMsg.rsp"], hashes.SHA3_512(), ) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.SHAKE128(digest_size=16)), + hashes.SHAKE128(digest_size=16) + ), skip_message="Does not support SHAKE128", ) @pytest.mark.requires_backend_interface(interface=HashBackend) @@ -263,10 +227,7 @@ class TestSHAKE128(object): test_shake128 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHAKE"), - [ - "SHAKE128LongMsg.rsp", - "SHAKE128ShortMsg.rsp", - ], + ["SHAKE128LongMsg.rsp", "SHAKE128ShortMsg.rsp"], hashes.SHAKE128(digest_size=16), ) @@ -274,24 +235,23 @@ class TestSHAKE128(object): "vector", _load_all_params( os.path.join("hashes", "SHAKE"), - [ - "SHAKE128VariableOut.rsp", - ], + ["SHAKE128VariableOut.rsp"], load_nist_vectors, - ) + ), ) def test_shake128_variable(self, vector, backend): - output_length = int(vector['outputlen']) // 8 - msg = binascii.unhexlify(vector['msg']) + output_length = int(vector["outputlen"]) // 8 + msg = binascii.unhexlify(vector["msg"]) shake = hashes.SHAKE128(digest_size=output_length) m = hashes.Hash(shake, backend=backend) m.update(msg) - assert m.finalize() == binascii.unhexlify(vector['output']) + assert m.finalize() == binascii.unhexlify(vector["output"]) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.SHAKE256(digest_size=32)), + hashes.SHAKE256(digest_size=32) + ), skip_message="Does not support SHAKE256", ) @pytest.mark.requires_backend_interface(interface=HashBackend) @@ -299,10 +259,7 @@ class TestSHAKE256(object): test_shake256 = generate_hash_test( load_hash_vectors, os.path.join("hashes", "SHAKE"), - [ - "SHAKE256LongMsg.rsp", - "SHAKE256ShortMsg.rsp", - ], + ["SHAKE256LongMsg.rsp", "SHAKE256ShortMsg.rsp"], hashes.SHAKE256(digest_size=32), ) @@ -310,16 +267,14 @@ class TestSHAKE256(object): "vector", _load_all_params( os.path.join("hashes", "SHAKE"), - [ - "SHAKE256VariableOut.rsp", - ], + ["SHAKE256VariableOut.rsp"], load_nist_vectors, - ) + ), ) def test_shake256_variable(self, vector, backend): - output_length = int(vector['outputlen']) // 8 - msg = binascii.unhexlify(vector['msg']) + output_length = int(vector["outputlen"]) // 8 + msg = binascii.unhexlify(vector["msg"]) shake = hashes.SHAKE256(digest_size=output_length) m = hashes.Hash(shake, backend=backend) m.update(msg) - assert m.finalize() == binascii.unhexlify(vector['output']) + assert m.finalize() == binascii.unhexlify(vector["output"]) diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index a743045cb9be..25676921208e 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -52,10 +52,7 @@ def test_unsupported_hash(self, backend): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA1(object): - test_sha1 = generate_base_hash_test( - hashes.SHA1(), - digest_size=20, - ) + test_sha1 = generate_base_hash_test(hashes.SHA1(), digest_size=20,) @pytest.mark.supported( @@ -64,10 +61,7 @@ class TestSHA1(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA224(object): - test_sha224 = generate_base_hash_test( - hashes.SHA224(), - digest_size=28, - ) + test_sha224 = generate_base_hash_test(hashes.SHA224(), digest_size=28,) @pytest.mark.supported( @@ -76,10 +70,7 @@ class TestSHA224(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA256(object): - test_sha256 = generate_base_hash_test( - hashes.SHA256(), - digest_size=32, - ) + test_sha256 = generate_base_hash_test(hashes.SHA256(), digest_size=32,) @pytest.mark.supported( @@ -88,10 +79,7 @@ class TestSHA256(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA384(object): - test_sha384 = generate_base_hash_test( - hashes.SHA384(), - digest_size=48, - ) + test_sha384 = generate_base_hash_test(hashes.SHA384(), digest_size=48,) @pytest.mark.supported( @@ -100,10 +88,7 @@ class TestSHA384(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA512(object): - test_sha512 = generate_base_hash_test( - hashes.SHA512(), - digest_size=64, - ) + test_sha512 = generate_base_hash_test(hashes.SHA512(), digest_size=64,) @pytest.mark.supported( @@ -112,22 +97,19 @@ class TestSHA512(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestMD5(object): - test_md5 = generate_base_hash_test( - hashes.MD5(), - digest_size=16, - ) + test_md5 = generate_base_hash_test(hashes.MD5(), digest_size=16,) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.BLAKE2b(digest_size=64)), + hashes.BLAKE2b(digest_size=64) + ), skip_message="Does not support BLAKE2b", ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestBLAKE2b(object): test_blake2b = generate_base_hash_test( - hashes.BLAKE2b(digest_size=64), - digest_size=64, + hashes.BLAKE2b(digest_size=64), digest_size=64, ) def test_invalid_digest_size(self, backend): @@ -143,14 +125,14 @@ def test_invalid_digest_size(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.BLAKE2s(digest_size=32)), + hashes.BLAKE2s(digest_size=32) + ), skip_message="Does not support BLAKE2s", ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestBLAKE2s(object): test_blake2s = generate_base_hash_test( - hashes.BLAKE2s(digest_size=32), - digest_size=32, + hashes.BLAKE2s(digest_size=32), digest_size=32, ) def test_invalid_digest_size(self, backend): @@ -182,18 +164,12 @@ def test_buffer_protocol_hash(backend): class TestSHAKE(object): - @pytest.mark.parametrize( - "xof", - [hashes.SHAKE128, hashes.SHAKE256] - ) + @pytest.mark.parametrize("xof", [hashes.SHAKE128, hashes.SHAKE256]) def test_invalid_digest_type(self, xof): with pytest.raises(TypeError): xof(digest_size=object()) - @pytest.mark.parametrize( - "xof", - [hashes.SHAKE128, hashes.SHAKE256] - ) + @pytest.mark.parametrize("xof", [hashes.SHAKE128, hashes.SHAKE256]) def test_invalid_digest_size(self, xof): with pytest.raises(ValueError): xof(digest_size=-5) diff --git a/tests/hazmat/primitives/test_hkdf.py b/tests/hazmat/primitives/test_hkdf.py index 195bfb3a4f71..1d7de6c472ee 100644 --- a/tests/hazmat/primitives/test_hkdf.py +++ b/tests/hazmat/primitives/test_hkdf.py @@ -9,15 +9,15 @@ import pytest -from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, _Reasons -) +from cryptography.exceptions import AlreadyFinalized, InvalidKey, _Reasons from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.hkdf import HKDF, HKDFExpand from ...utils import ( - load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm + load_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) @@ -32,127 +32,67 @@ def test_length_limit(self, backend): big_length, salt=None, info=None, - backend=backend + backend=backend, ) def test_already_finalized(self, backend): - hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend - ) + hkdf = HKDF(hashes.SHA256(), 16, salt=None, info=None, backend=backend) hkdf.derive(b"\x01" * 16) with pytest.raises(AlreadyFinalized): hkdf.derive(b"\x02" * 16) - hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend - ) + hkdf = HKDF(hashes.SHA256(), 16, salt=None, info=None, backend=backend) hkdf.verify(b"\x01" * 16, b"gJ\xfb{\xb1Oi\xc5sMC\xb7\xe4@\xf7u") with pytest.raises(AlreadyFinalized): hkdf.verify(b"\x02" * 16, b"gJ\xfb{\xb1Oi\xc5sMC\xb7\xe4@\xf7u") - hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend - ) + hkdf = HKDF(hashes.SHA256(), 16, salt=None, info=None, backend=backend) def test_verify(self, backend): - hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend - ) + hkdf = HKDF(hashes.SHA256(), 16, salt=None, info=None, backend=backend) hkdf.verify(b"\x01" * 16, b"gJ\xfb{\xb1Oi\xc5sMC\xb7\xe4@\xf7u") def test_verify_invalid(self, backend): - hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend - ) + hkdf = HKDF(hashes.SHA256(), 16, salt=None, info=None, backend=backend) with pytest.raises(InvalidKey): hkdf.verify(b"\x02" * 16, b"gJ\xfb{\xb1Oi\xc5sMC\xb7\xe4@\xf7u") def test_unicode_typeerror(self, backend): with pytest.raises(TypeError): - HKDF( - hashes.SHA256(), - 16, - salt=u"foo", - info=None, - backend=backend - ) + HKDF(hashes.SHA256(), 16, salt=u"foo", info=None, backend=backend) with pytest.raises(TypeError): - HKDF( - hashes.SHA256(), - 16, - salt=None, - info=u"foo", - backend=backend - ) + HKDF(hashes.SHA256(), 16, salt=None, info=u"foo", backend=backend) with pytest.raises(TypeError): hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend + hashes.SHA256(), 16, salt=None, info=None, backend=backend ) hkdf.derive(u"foo") with pytest.raises(TypeError): hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend + hashes.SHA256(), 16, salt=None, info=None, backend=backend ) hkdf.verify(u"foo", b"bar") with pytest.raises(TypeError): hkdf = HKDF( - hashes.SHA256(), - 16, - salt=None, - info=None, - backend=backend + hashes.SHA256(), 16, salt=None, info=None, backend=backend ) hkdf.verify(b"foo", u"bar") def test_derive_short_output(self, backend): - hkdf = HKDF( - hashes.SHA256(), - 4, - salt=None, - info=None, - backend=backend - ) + hkdf = HKDF(hashes.SHA256(), 4, salt=None, info=None, backend=backend) assert hkdf.derive(b"\x01" * 16) == b"gJ\xfb{" @@ -165,7 +105,7 @@ def test_derive_long_output(self, backend): int(vector["l"]), salt=vector["salt"], info=vector["info"], - backend=backend + backend=backend, ) ikm = binascii.unhexlify(vector["ikm"]) @@ -180,7 +120,7 @@ def test_buffer_protocol(self, backend): int(vector["l"]), salt=vector["salt"], info=vector["info"], - backend=backend + backend=backend, ) ikm = bytearray(binascii.unhexlify(vector["ikm"])) @@ -194,8 +134,10 @@ def test_derive(self, backend): b"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5" ) - okm = (b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" - b"5bf34007208d5b887185865") + okm = ( + b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" + b"5bf34007208d5b887185865" + ) info = binascii.unhexlify(b"f0f1f2f3f4f5f6f7f8f9") hkdf = HKDFExpand(hashes.SHA256(), 42, info, backend) @@ -203,12 +145,17 @@ def test_derive(self, backend): assert binascii.hexlify(hkdf.derive(prk)) == okm def test_buffer_protocol(self, backend): - prk = bytearray(binascii.unhexlify( - b"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5" - )) + prk = bytearray( + binascii.unhexlify( + b"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2" + b"b3e5" + ) + ) - okm = (b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" - b"5bf34007208d5b887185865") + okm = ( + b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" + b"5bf34007208d5b887185865" + ) info = binascii.unhexlify(b"f0f1f2f3f4f5f6f7f8f9") hkdf = HKDFExpand(hashes.SHA256(), 42, info, backend) @@ -220,8 +167,10 @@ def test_verify(self, backend): b"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5" ) - okm = (b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" - b"5bf34007208d5b887185865") + okm = ( + b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c" + b"5bf34007208d5b887185865" + ) info = binascii.unhexlify(b"f0f1f2f3f4f5f6f7f8f9") hkdf = HKDFExpand(hashes.SHA256(), 42, info, backend) diff --git a/tests/hazmat/primitives/test_hkdf_vectors.py b/tests/hazmat/primitives/test_hkdf_vectors.py index 290cefbf6c28..97385e203c19 100644 --- a/tests/hazmat/primitives/test_hkdf_vectors.py +++ b/tests/hazmat/primitives/test_hkdf_vectors.py @@ -17,7 +17,7 @@ @pytest.mark.supported( only_if=lambda backend: backend.hmac_supported(hashes.SHA1()), - skip_message="Does not support SHA1." + skip_message="Does not support SHA1.", ) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDFSHA1(object): @@ -25,13 +25,13 @@ class TestHKDFSHA1(object): load_nist_vectors, os.path.join("KDF"), ["rfc-5869-HKDF-SHA1.txt"], - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.hmac_supported(hashes.SHA256()), - skip_message="Does not support SHA256." + skip_message="Does not support SHA256.", ) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHKDFSHA256(object): @@ -39,5 +39,5 @@ class TestHKDFSHA256(object): load_nist_vectors, os.path.join("KDF"), ["rfc-5869-HKDF-SHA256.txt"], - hashes.SHA256() + hashes.SHA256(), ) diff --git a/tests/hazmat/primitives/test_hmac.py b/tests/hazmat/primitives/test_hmac.py index 0e2fe688ac82..e60ae16f21b2 100644 --- a/tests/hazmat/primitives/test_hmac.py +++ b/tests/hazmat/primitives/test_hmac.py @@ -9,7 +9,9 @@ import pytest from cryptography.exceptions import ( - AlreadyFinalized, InvalidSignature, _Reasons + AlreadyFinalized, + InvalidSignature, + _Reasons, ) from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import hashes, hmac @@ -25,9 +27,7 @@ ) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACCopy(object): - test_copy = generate_base_hmac_test( - hashes.MD5(), - ) + test_copy = generate_base_hmac_test(hashes.MD5(),) @pytest.mark.requires_backend_interface(interface=HMACBackend) @@ -55,27 +55,27 @@ def test_raises_after_finalize(self, backend): h.finalize() def test_verify(self, backend): - h = hmac.HMAC(b'', hashes.SHA1(), backend=backend) + h = hmac.HMAC(b"", hashes.SHA1(), backend=backend) digest = h.finalize() - h = hmac.HMAC(b'', hashes.SHA1(), backend=backend) + h = hmac.HMAC(b"", hashes.SHA1(), backend=backend) h.verify(digest) with pytest.raises(AlreadyFinalized): - h.verify(b'') + h.verify(b"") def test_invalid_verify(self, backend): - h = hmac.HMAC(b'', hashes.SHA1(), backend=backend) + h = hmac.HMAC(b"", hashes.SHA1(), backend=backend) with pytest.raises(InvalidSignature): - h.verify(b'') + h.verify(b"") with pytest.raises(AlreadyFinalized): - h.verify(b'') + h.verify(b"") def test_verify_reject_unicode(self, backend): - h = hmac.HMAC(b'', hashes.SHA1(), backend=backend) + h = hmac.HMAC(b"", hashes.SHA1(), backend=backend) with pytest.raises(TypeError): - h.verify(u'') + h.verify(u"") def test_unsupported_hash(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): diff --git a/tests/hazmat/primitives/test_hmac_vectors.py b/tests/hazmat/primitives/test_hmac_vectors.py index 6ff71fe38508..b463427366bb 100644 --- a/tests/hazmat/primitives/test_hmac_vectors.py +++ b/tests/hazmat/primitives/test_hmac_vectors.py @@ -22,12 +22,7 @@ @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACMD5(object): test_hmac_md5 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-2202-md5.txt", - ], - hashes.MD5(), + load_hash_vectors, "HMAC", ["rfc-2202-md5.txt"], hashes.MD5(), ) @@ -38,12 +33,7 @@ class TestHMACMD5(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA1(object): test_hmac_sha1 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-2202-sha1.txt", - ], - hashes.SHA1(), + load_hash_vectors, "HMAC", ["rfc-2202-sha1.txt"], hashes.SHA1(), ) @@ -54,12 +44,7 @@ class TestHMACSHA1(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA224(object): test_hmac_sha224 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-4231-sha224.txt", - ], - hashes.SHA224(), + load_hash_vectors, "HMAC", ["rfc-4231-sha224.txt"], hashes.SHA224(), ) @@ -70,12 +55,7 @@ class TestHMACSHA224(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA256(object): test_hmac_sha256 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-4231-sha256.txt", - ], - hashes.SHA256(), + load_hash_vectors, "HMAC", ["rfc-4231-sha256.txt"], hashes.SHA256(), ) @@ -86,12 +66,7 @@ class TestHMACSHA256(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA384(object): test_hmac_sha384 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-4231-sha384.txt", - ], - hashes.SHA384(), + load_hash_vectors, "HMAC", ["rfc-4231-sha384.txt"], hashes.SHA384(), ) @@ -102,19 +77,14 @@ class TestHMACSHA384(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA512(object): test_hmac_sha512 = generate_hmac_test( - load_hash_vectors, - "HMAC", - [ - "rfc-4231-sha512.txt", - ], - hashes.SHA512(), + load_hash_vectors, "HMAC", ["rfc-4231-sha512.txt"], hashes.SHA512(), ) @pytest.mark.supported( - only_if=lambda backend: backend.hmac_supported(hashes.BLAKE2b( - digest_size=64 - )), + only_if=lambda backend: backend.hmac_supported( + hashes.BLAKE2b(digest_size=64) + ), skip_message="Does not support BLAKE2", ) @pytest.mark.requires_backend_interface(interface=HMACBackend) diff --git a/tests/hazmat/primitives/test_idea.py b/tests/hazmat/primitives/test_idea.py index 6b8a2a870e27..1f766def082a 100644 --- a/tests/hazmat/primitives/test_idea.py +++ b/tests/hazmat/primitives/test_idea.py @@ -46,7 +46,7 @@ class TestIDEAModeCBC(object): os.path.join("ciphers", "IDEA"), ["idea-cbc.txt"], lambda key, **kwargs: algorithms.IDEA(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)), ) @@ -63,7 +63,7 @@ class TestIDEAModeOFB(object): os.path.join("ciphers", "IDEA"), ["idea-ofb.txt"], lambda key, **kwargs: algorithms.IDEA(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)), ) @@ -80,5 +80,5 @@ class TestIDEAModeCFB(object): os.path.join("ciphers", "IDEA"), ["idea-cfb.txt"], lambda key, **kwargs: algorithms.IDEA(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)), ) diff --git a/tests/hazmat/primitives/test_kbkdf.py b/tests/hazmat/primitives/test_kbkdf.py index a16f1768dd50..5ff5d74ea871 100644 --- a/tests/hazmat/primitives/test_kbkdf.py +++ b/tests/hazmat/primitives/test_kbkdf.py @@ -6,13 +6,13 @@ import pytest -from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, _Reasons -) +from cryptography.exceptions import AlreadyFinalized, InvalidKey, _Reasons from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.kbkdf import ( - CounterLocation, KBKDFHMAC, Mode + CounterLocation, + KBKDFHMAC, + Mode, ) from ...doubles import DummyHashAlgorithm @@ -22,137 +22,316 @@ @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestKBKDFHMAC(object): def test_invalid_key(self, backend): - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) key = kdf.derive(b"material") - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) with pytest.raises(InvalidKey): kdf.verify(b"material2", key) def test_already_finalized(self, backend): - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) - - kdf.derive(b'material') + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) + + kdf.derive(b"material") with pytest.raises(AlreadyFinalized): - kdf.derive(b'material2') - - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + kdf.derive(b"material2") + + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) - key = kdf.derive(b'material') + key = kdf.derive(b"material") with pytest.raises(AlreadyFinalized): - kdf.verify(b'material', key) + kdf.verify(b"material", key) - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) - kdf.verify(b'material', key) + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) + kdf.verify(b"material", key) with pytest.raises(AlreadyFinalized): kdf.verify(b"material", key) def test_key_length(self, backend): - kdf = KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 85899345920, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + kdf = KBKDFHMAC( + hashes.SHA1(), + Mode.CounterMode, + 85899345920, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) with pytest.raises(ValueError): - kdf.derive(b'material') + kdf.derive(b"material") def test_rlen(self, backend): with pytest.raises(ValueError): - KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 5, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 5, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_r_type(self, backend): with pytest.raises(TypeError): - KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 32, b'r', 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + hashes.SHA1(), + Mode.CounterMode, + 32, + b"r", + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_l_type(self, backend): with pytest.raises(TypeError): - KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 32, 4, b'l', - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + hashes.SHA1(), + Mode.CounterMode, + 32, + 4, + b"l", + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_l(self, backend): with pytest.raises(ValueError): - KBKDFHMAC(hashes.SHA1(), Mode.CounterMode, 32, 4, None, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + hashes.SHA1(), + Mode.CounterMode, + 32, + 4, + None, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_unsupported_mode(self, backend): with pytest.raises(TypeError): - KBKDFHMAC(hashes.SHA256(), None, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + hashes.SHA256(), + None, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_unsupported_location(self, backend): with pytest.raises(TypeError): - KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - None, b'label', b'context', None, - backend=backend) + KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + None, + b"label", + b"context", + None, + backend=backend, + ) def test_unsupported_parameters(self, backend): with pytest.raises(ValueError): - KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - b'fixed', backend=backend) + KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + b"fixed", + backend=backend, + ) def test_unsupported_hash(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): - KBKDFHMAC(object(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + object(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_unsupported_algorithm(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): - KBKDFHMAC(DummyHashAlgorithm(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + KBKDFHMAC( + DummyHashAlgorithm(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) def test_invalid_backend(self, backend): with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE): - KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=object()) + KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=object(), + ) def test_unicode_error_label(self, backend): with pytest.raises(TypeError): - KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, u'label', b'context', - backend=backend) + KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + u"label", + b"context", + backend=backend, + ) def test_unicode_error_context(self, backend): with pytest.raises(TypeError): - KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', u'context', - None, backend=backend) + KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + u"context", + None, + backend=backend, + ) def test_unicode_error_key_material(self, backend): with pytest.raises(TypeError): - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 32, 4, 4, - CounterLocation.BeforeFixed, b'label', - b'context', None, backend=backend) - kdf.derive(u'material') + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 32, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) + kdf.derive(u"material") def test_buffer_protocol(self, backend): - kdf = KBKDFHMAC(hashes.SHA256(), Mode.CounterMode, 10, 4, 4, - CounterLocation.BeforeFixed, b'label', b'context', - None, backend=backend) + kdf = KBKDFHMAC( + hashes.SHA256(), + Mode.CounterMode, + 10, + 4, + 4, + CounterLocation.BeforeFixed, + b"label", + b"context", + None, + backend=backend, + ) key = kdf.derive(bytearray(b"material")) - assert key == b'\xb7\x01\x05\x98\xf5\x1a\x12L\xc7.' + assert key == b"\xb7\x01\x05\x98\xf5\x1a\x12L\xc7." diff --git a/tests/hazmat/primitives/test_kbkdf_vectors.py b/tests/hazmat/primitives/test_kbkdf_vectors.py index 7bdbbdc765d4..462e04ec5a87 100644 --- a/tests/hazmat/primitives/test_kbkdf_vectors.py +++ b/tests/hazmat/primitives/test_kbkdf_vectors.py @@ -19,5 +19,5 @@ class TestCounterKDFCounterMode(object): test_kbkdfctr = generate_kbkdf_counter_mode_test( load_nist_kbkdf_vectors, os.path.join("KDF"), - ["nist-800-108-KBKDF-CTR.txt"] + ["nist-800-108-KBKDF-CTR.txt"], ) diff --git a/tests/hazmat/primitives/test_keywrap.py b/tests/hazmat/primitives/test_keywrap.py index c74b144b66fc..9b91ccf36b33 100644 --- a/tests/hazmat/primitives/test_keywrap.py +++ b/tests/hazmat/primitives/test_keywrap.py @@ -24,15 +24,15 @@ class TestAESKeyWrap(object): _load_all_params( os.path.join("keywrap", "kwtestvectors"), ["KW_AE_128.txt", "KW_AE_192.txt", "KW_AE_256.txt"], - load_nist_vectors - ) + load_nist_vectors, + ), ) @pytest.mark.supported( only_if=lambda backend: backend.cipher_supported( algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES key wrap (RFC 3394) because AES-ECB" - " is unsupported", + " is unsupported", ) def test_wrap(self, backend, params): wrapping_key = binascii.unhexlify(params["k"]) @@ -45,15 +45,15 @@ def test_wrap(self, backend, params): _load_all_params( os.path.join("keywrap", "kwtestvectors"), ["KW_AD_128.txt", "KW_AD_192.txt", "KW_AD_256.txt"], - load_nist_vectors - ) + load_nist_vectors, + ), ) @pytest.mark.supported( only_if=lambda backend: backend.cipher_supported( algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES key wrap (RFC 3394) because AES-ECB" - " is unsupported", + " is unsupported", ) def test_unwrap(self, backend, params): wrapping_key = binascii.unhexlify(params["k"]) @@ -72,7 +72,7 @@ def test_unwrap(self, backend, params): algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES key wrap (RFC 3394) because AES-ECB" - " is unsupported", + " is unsupported", ) def test_wrap_invalid_key_length(self, backend): # The wrapping key must be of length [16, 24, 32] @@ -84,7 +84,7 @@ def test_wrap_invalid_key_length(self, backend): algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES key wrap (RFC 3394) because AES-ECB" - " is unsupported", + " is unsupported", ) def test_unwrap_invalid_key_length(self, backend): with pytest.raises(ValueError): @@ -95,7 +95,7 @@ def test_unwrap_invalid_key_length(self, backend): algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES key wrap (RFC 3394) because AES-ECB" - " is unsupported", + " is unsupported", ) def test_wrap_invalid_key_to_wrap_length(self, backend): # Keys to wrap must be at least 16 bytes long @@ -121,7 +121,7 @@ def test_unwrap_invalid_wrapped_key_length(self, backend): algorithms.AES(b"\x00" * 16), modes.ECB() ), skip_message="Does not support AES key wrap (RFC 5649) because AES-ECB" - " is unsupported", + " is unsupported", ) @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAESKeyWrapWithPadding(object): @@ -130,8 +130,8 @@ class TestAESKeyWrapWithPadding(object): _load_all_params( os.path.join("keywrap", "kwtestvectors"), ["KWP_AE_128.txt", "KWP_AE_192.txt", "KWP_AE_256.txt"], - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_wrap(self, backend, params): wrapping_key = binascii.unhexlify(params["k"]) @@ -143,7 +143,7 @@ def test_wrap(self, backend, params): @pytest.mark.parametrize( "params", - _load_all_params("keywrap", ["kwp_botan.txt"], load_nist_vectors) + _load_all_params("keywrap", ["kwp_botan.txt"], load_nist_vectors), ) def test_wrap_additional_vectors(self, backend, params): wrapping_key = binascii.unhexlify(params["key"]) @@ -158,8 +158,8 @@ def test_wrap_additional_vectors(self, backend, params): _load_all_params( os.path.join("keywrap", "kwtestvectors"), ["KWP_AD_128.txt", "KWP_AD_192.txt", "KWP_AD_256.txt"], - load_nist_vectors - ) + load_nist_vectors, + ), ) def test_unwrap(self, backend, params): wrapping_key = binascii.unhexlify(params["k"]) @@ -177,7 +177,7 @@ def test_unwrap(self, backend, params): @pytest.mark.parametrize( "params", - _load_all_params("keywrap", ["kwp_botan.txt"], load_nist_vectors) + _load_all_params("keywrap", ["kwp_botan.txt"], load_nist_vectors), ) def test_unwrap_additional_vectors(self, backend, params): wrapping_key = binascii.unhexlify(params["key"]) @@ -190,18 +190,18 @@ def test_unwrap_additional_vectors(self, backend, params): def test_unwrap_invalid_wrapped_key_length(self, backend): # Keys to unwrap must be at least 16 bytes with pytest.raises( - keywrap.InvalidUnwrap, match='Must be at least 16 bytes' + keywrap.InvalidUnwrap, match="Must be at least 16 bytes" ): keywrap.aes_key_unwrap_with_padding( b"sixteen_byte_key", b"\x00" * 15, backend ) def test_wrap_invalid_key_length(self, backend): - with pytest.raises(ValueError, match='must be a valid AES key length'): + with pytest.raises(ValueError, match="must be a valid AES key length"): keywrap.aes_key_wrap_with_padding(b"badkey", b"\x00", backend) def test_unwrap_invalid_key_length(self, backend): - with pytest.raises(ValueError, match='must be a valid AES key length'): + with pytest.raises(ValueError, match="must be a valid AES key length"): keywrap.aes_key_unwrap_with_padding( b"badkey", b"\x00" * 16, backend ) diff --git a/tests/hazmat/primitives/test_padding.py b/tests/hazmat/primitives/test_padding.py index fb72a794b5ee..f66d0ee8521d 100644 --- a/tests/hazmat/primitives/test_padding.py +++ b/tests/hazmat/primitives/test_padding.py @@ -18,14 +18,17 @@ def test_invalid_block_size(self, size): with pytest.raises(ValueError): padding.PKCS7(size) - @pytest.mark.parametrize(("size", "padded"), [ - (128, b"1111"), - (128, b"1111111111111111"), - (128, b"111111111111111\x06"), - (128, b""), - (128, b"\x06" * 6), - (128, b"\x00" * 16), - ]) + @pytest.mark.parametrize( + ("size", "padded"), + [ + (128, b"1111"), + (128, b"1111111111111111"), + (128, b"111111111111111\x06"), + (128, b""), + (128, b"\x06" * 6), + (128, b"\x00" * 16), + ], + ) def test_invalid_padding(self, size, padded): unpadder = padding.PKCS7(size).unpadder() with pytest.raises(ValueError): @@ -40,46 +43,36 @@ def test_non_bytes(self): with pytest.raises(TypeError): unpadder.update(u"abc") - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x06\x06\x06\x06\x06\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x02\x02", - ), - ( - 128, - b"1" * 16, - b"1" * 16 + b"\x10" * 16, - ), - ( - 128, - b"1" * 17, - b"1" * 17 + b"\x0F" * 15, - ) - ]) + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x06\x06\x06\x06\x06\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x02\x02", + ), + (128, b"1" * 16, b"1" * 16 + b"\x10" * 16), + (128, b"1" * 17, b"1" * 17 + b"\x0F" * 15), + ], + ) def test_pad(self, size, unpadded, padded): padder = padding.PKCS7(size).padder() result = padder.update(unpadded) result += padder.finalize() assert result == padded - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x06\x06\x06\x06\x06\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x02\x02", - ), - ]) + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x06\x06\x06\x06\x06\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x02\x02", + ), + ], + ) def test_unpad(self, size, unpadded, padded): unpadder = padding.PKCS7(size).unpadder() result = unpadder.update(padded) @@ -123,15 +116,18 @@ def test_invalid_block_size(self, size): with pytest.raises(ValueError): padding.ANSIX923(size) - @pytest.mark.parametrize(("size", "padded"), [ - (128, b"1111"), - (128, b"1111111111111111"), - (128, b"111111111111111\x06"), - (128, b"1111111111\x06\x06\x06\x06\x06\x06"), - (128, b""), - (128, b"\x06" * 6), - (128, b"\x00" * 16), - ]) + @pytest.mark.parametrize( + ("size", "padded"), + [ + (128, b"1111"), + (128, b"1111111111111111"), + (128, b"111111111111111\x06"), + (128, b"1111111111\x06\x06\x06\x06\x06\x06"), + (128, b""), + (128, b"\x06" * 6), + (128, b"\x00" * 16), + ], + ) def test_invalid_padding(self, size, padded): unpadder = padding.ANSIX923(size).unpadder() with pytest.raises(ValueError): @@ -146,46 +142,36 @@ def test_non_bytes(self): with pytest.raises(TypeError): unpadder.update(u"abc") - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x00\x00\x00\x00\x00\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x00\x02", - ), - ( - 128, - b"1" * 16, - b"1" * 16 + b"\x00" * 15 + b"\x10", - ), - ( - 128, - b"1" * 17, - b"1" * 17 + b"\x00" * 14 + b"\x0F", - ) - ]) + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x00\x00\x00\x00\x00\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x00\x02", + ), + (128, b"1" * 16, b"1" * 16 + b"\x00" * 15 + b"\x10"), + (128, b"1" * 17, b"1" * 17 + b"\x00" * 14 + b"\x0F"), + ], + ) def test_pad(self, size, unpadded, padded): padder = padding.ANSIX923(size).padder() result = padder.update(unpadded) result += padder.finalize() assert result == padded - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x00\x00\x00\x00\x00\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x00\x02", - ), - ]) + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x00\x00\x00\x00\x00\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x00\x02", + ), + ], + ) def test_unpad(self, size, unpadded, padded): unpadder = padding.ANSIX923(size).unpadder() result = unpadder.update(padded) diff --git a/tests/hazmat/primitives/test_pbkdf2hmac.py b/tests/hazmat/primitives/test_pbkdf2hmac.py index 0254b2168313..584655fe879c 100644 --- a/tests/hazmat/primitives/test_pbkdf2hmac.py +++ b/tests/hazmat/primitives/test_pbkdf2hmac.py @@ -6,9 +6,7 @@ import pytest -from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, _Reasons -) +from cryptography.exceptions import AlreadyFinalized, InvalidKey, _Reasons from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC diff --git a/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py b/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py index fe51f543804a..13bdbc5f3554 100644 --- a/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py +++ b/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py @@ -20,10 +20,5 @@ @pytest.mark.requires_backend_interface(interface=PBKDF2HMACBackend) class TestPBKDF2HMACSHA1(object): test_pbkdf2_sha1 = generate_pbkdf2_test( - load_nist_vectors, - "KDF", - [ - "rfc-6070-PBKDF2-SHA1.txt", - ], - hashes.SHA1(), + load_nist_vectors, "KDF", ["rfc-6070-PBKDF2-SHA1.txt"], hashes.SHA1(), ) diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py index 61c5342394f9..466dac5c14b2 100644 --- a/tests/hazmat/primitives/test_pkcs12.py +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -14,7 +14,8 @@ from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.serialization import load_pem_private_key from cryptography.hazmat.primitives.serialization.pkcs12 import ( - load_key_and_certificates, serialize_key_and_certificates + load_key_and_certificates, + serialize_key_and_certificates, ) from .utils import load_vectors_from_file @@ -28,19 +29,22 @@ def _test_load_pkcs12_ec_keys(self, filename, password, backend): os.path.join("x509", "custom", "ca", "ca.pem"), lambda pemfile: x509.load_pem_x509_certificate( pemfile.read(), backend - ), mode="rb" + ), + mode="rb", ) key = load_vectors_from_file( os.path.join("x509", "custom", "ca", "ca_key.pem"), lambda pemfile: load_pem_private_key( pemfile.read(), None, backend - ), mode="rb" + ), + mode="rb", ) parsed_key, parsed_cert, parsed_more_certs = load_vectors_from_file( os.path.join("pkcs12", filename), lambda derfile: load_key_and_certificates( derfile.read(), password, backend - ), mode="rb" + ), + mode="rb", ) assert parsed_cert == cert assert parsed_key.private_numbers() == key.private_numbers() @@ -51,7 +55,7 @@ def _test_load_pkcs12_ec_keys(self, filename, password, backend): [ ("cert-key-aes256cbc.p12", b"cryptography"), ("cert-none-key-none.p12", b"cryptography"), - ] + ], ) def test_load_pkcs12_ec_keys(self, filename, password, backend): self._test_load_pkcs12_ec_keys(filename, password, backend) @@ -61,11 +65,11 @@ def test_load_pkcs12_ec_keys(self, filename, password, backend): [ ("cert-rc2-key-3des.p12", b"cryptography"), ("no-password.p12", None), - ] + ], ) @pytest.mark.supported( only_if=lambda backend: backend.cipher_supported(_RC2(), None), - skip_message="Does not support RC2" + skip_message="Does not support RC2", ) @pytest.mark.skip_fips(reason="Unsupported algorithm in FIPS mode") def test_load_pkcs12_ec_keys_rc2(self, filename, password, backend): @@ -76,14 +80,15 @@ def test_load_pkcs12_cert_only(self, backend): os.path.join("x509", "custom", "ca", "ca.pem"), lambda pemfile: x509.load_pem_x509_certificate( pemfile.read(), backend - ), mode="rb" + ), + mode="rb", ) parsed_key, parsed_cert, parsed_more_certs = load_vectors_from_file( os.path.join("pkcs12", "cert-aes256cbc-no-key.p12"), lambda data: load_key_and_certificates( data.read(), b"cryptography", backend ), - mode="rb" + mode="rb", ) assert parsed_cert is None assert parsed_key is None @@ -94,14 +99,15 @@ def test_load_pkcs12_key_only(self, backend): os.path.join("x509", "custom", "ca", "ca_key.pem"), lambda pemfile: load_pem_private_key( pemfile.read(), None, backend - ), mode="rb" + ), + mode="rb", ) parsed_key, parsed_cert, parsed_more_certs = load_vectors_from_file( os.path.join("pkcs12", "no-cert-key-aes256cbc.p12"), lambda data: load_key_and_certificates( data.read(), b"cryptography", backend ), - mode="rb" + mode="rb", ) assert parsed_key.private_numbers() == key.private_numbers() assert parsed_cert is None @@ -109,15 +115,11 @@ def test_load_pkcs12_key_only(self, backend): def test_non_bytes(self, backend): with pytest.raises(TypeError): - load_key_and_certificates( - b"irrelevant", object(), backend - ) + load_key_and_certificates(b"irrelevant", object(), backend) def test_not_a_pkcs12(self, backend): with pytest.raises(ValueError): - load_key_and_certificates( - b"invalid", b"pass", backend - ) + load_key_and_certificates(b"invalid", b"pass", backend) def test_invalid_password(self, backend): with pytest.raises(ValueError): @@ -125,13 +127,15 @@ def test_invalid_password(self, backend): os.path.join("pkcs12", "cert-key-aes256cbc.p12"), lambda derfile: load_key_and_certificates( derfile.read(), b"invalid", backend - ), mode="rb" + ), + mode="rb", ) def test_buffer_protocol(self, backend): p12 = load_vectors_from_file( os.path.join("pkcs12", "cert-key-aes256cbc.p12"), - lambda derfile: derfile.read(), mode="rb" + lambda derfile: derfile.read(), + mode="rb", ) p12buffer = bytearray(p12) parsed_key, parsed_cert, parsed_more_certs = load_key_and_certificates( @@ -147,34 +151,39 @@ def _load_cert(backend, path): path, lambda pemfile: x509.load_pem_x509_certificate( pemfile.read(), backend - ), mode='rb' + ), + mode="rb", ) def _load_ca(backend): - cert = _load_cert(backend, os.path.join('x509', 'custom', 'ca', 'ca.pem')) + cert = _load_cert(backend, os.path.join("x509", "custom", "ca", "ca.pem")) key = load_vectors_from_file( - os.path.join('x509', 'custom', 'ca', 'ca_key.pem'), - lambda pemfile: load_pem_private_key( - pemfile.read(), None, backend - ), mode='rb' + os.path.join("x509", "custom", "ca", "ca_key.pem"), + lambda pemfile: load_pem_private_key(pemfile.read(), None, backend), + mode="rb", ) return cert, key class TestPKCS12Creation(object): - @pytest.mark.parametrize('name', [None, b'name']) - @pytest.mark.parametrize(('encryption_algorithm', 'password'), [ - (serialization.BestAvailableEncryption(b'password'), b'password'), - (serialization.NoEncryption(), None) - ]) + @pytest.mark.parametrize("name", [None, b"name"]) + @pytest.mark.parametrize( + ("encryption_algorithm", "password"), + [ + (serialization.BestAvailableEncryption(b"password"), b"password"), + (serialization.NoEncryption(), None), + ], + ) def test_generate(self, backend, name, encryption_algorithm, password): cert, key = _load_ca(backend) p12 = serialize_key_and_certificates( - name, key, cert, None, encryption_algorithm) + name, key, cert, None, encryption_algorithm + ) - parsed_key, parsed_cert, parsed_more_certs = \ - load_key_and_certificates(p12, password, backend) + parsed_key, parsed_cert, parsed_more_certs = load_key_and_certificates( + p12, password, backend + ) assert parsed_cert == cert assert parsed_key.private_numbers() == key.private_numbers() assert parsed_more_certs == [] @@ -182,53 +191,60 @@ def test_generate(self, backend, name, encryption_algorithm, password): def test_generate_with_cert_key_ca(self, backend): cert, key = _load_ca(backend) cert2 = _load_cert( - backend, os.path.join('x509', 'custom', 'dsa_selfsigned_ca.pem') + backend, os.path.join("x509", "custom", "dsa_selfsigned_ca.pem") ) - cert3 = _load_cert(backend, os.path.join('x509', 'letsencryptx3.pem')) + cert3 = _load_cert(backend, os.path.join("x509", "letsencryptx3.pem")) encryption = serialization.NoEncryption() p12 = serialize_key_and_certificates( - None, key, cert, [cert2, cert3], encryption) + None, key, cert, [cert2, cert3], encryption + ) - parsed_key, parsed_cert, parsed_more_certs = \ - load_key_and_certificates(p12, None, backend) + parsed_key, parsed_cert, parsed_more_certs = load_key_and_certificates( + p12, None, backend + ) assert parsed_cert == cert assert parsed_key.private_numbers() == key.private_numbers() assert parsed_more_certs == [cert2, cert3] def test_generate_wrong_types(self, backend): cert, key = _load_ca(backend) - cert2 = _load_cert(backend, os.path.join('x509', 'letsencryptx3.pem')) + cert2 = _load_cert(backend, os.path.join("x509", "letsencryptx3.pem")) encryption = serialization.NoEncryption() with pytest.raises(TypeError) as exc: serialize_key_and_certificates( - b'name', cert, cert, None, encryption) - assert str(exc.value) == \ - 'Key must be RSA, DSA, or EllipticCurve private key.' + b"name", cert, cert, None, encryption + ) + assert ( + str(exc.value) + == "Key must be RSA, DSA, or EllipticCurve private key." + ) with pytest.raises(TypeError) as exc: - serialize_key_and_certificates(b'name', key, key, None, encryption) - assert str(exc.value) == 'cert must be a certificate' + serialize_key_and_certificates(b"name", key, key, None, encryption) + assert str(exc.value) == "cert must be a certificate" with pytest.raises(TypeError) as exc: - serialize_key_and_certificates( - b'name', key, cert, None, key) - assert str( - exc.value) == ('Key encryption algorithm must be a ' - 'KeySerializationEncryption instance') + serialize_key_and_certificates(b"name", key, cert, None, key) + assert str(exc.value) == ( + "Key encryption algorithm must be a " + "KeySerializationEncryption instance" + ) with pytest.raises(TypeError) as exc: serialize_key_and_certificates(None, key, cert, cert2, encryption) with pytest.raises(TypeError) as exc: serialize_key_and_certificates(None, key, cert, [key], encryption) - assert str(exc.value) == 'all values in cas must be certificates' + assert str(exc.value) == "all values in cas must be certificates" def test_generate_no_cert(self, backend): _, key = _load_ca(backend) p12 = serialize_key_and_certificates( - None, key, None, None, serialization.NoEncryption()) - parsed_key, parsed_cert, parsed_more_certs = \ - load_key_and_certificates(p12, None, backend) + None, key, None, None, serialization.NoEncryption() + ) + parsed_key, parsed_cert, parsed_more_certs = load_key_and_certificates( + p12, None, backend + ) assert parsed_cert is None assert parsed_key.private_numbers() == key.private_numbers() assert parsed_more_certs == [] @@ -239,14 +255,13 @@ def test_must_supply_something(self): None, None, None, None, serialization.NoEncryption() ) assert str(exc.value) == ( - 'You must supply at least one of key, cert, or cas' + "You must supply at least one of key, cert, or cas" ) def test_generate_unsupported_encryption_type(self, backend): cert, key = _load_ca(backend) with pytest.raises(ValueError) as exc: serialize_key_and_certificates( - None, key, cert, None, - DummyKeySerializationEncryption(), + None, key, cert, None, DummyKeySerializationEncryption(), ) - assert str(exc.value) == 'Unsupported key encryption type' + assert str(exc.value) == "Unsupported key encryption type" diff --git a/tests/hazmat/primitives/test_poly1305.py b/tests/hazmat/primitives/test_poly1305.py index edca46230fe7..8779484ac9aa 100644 --- a/tests/hazmat/primitives/test_poly1305.py +++ b/tests/hazmat/primitives/test_poly1305.py @@ -10,18 +10,22 @@ import pytest from cryptography.exceptions import ( - AlreadyFinalized, InvalidSignature, _Reasons + AlreadyFinalized, + InvalidSignature, + _Reasons, ) from cryptography.hazmat.primitives.poly1305 import Poly1305 from ...utils import ( - load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm + load_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) @pytest.mark.supported( only_if=lambda backend: not backend.poly1305_supported(), - skip_message="Requires OpenSSL without poly1305 support" + skip_message="Requires OpenSSL without poly1305 support", ) def test_poly1305_unsupported(backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_MAC): @@ -30,14 +34,14 @@ def test_poly1305_unsupported(backend): @pytest.mark.supported( only_if=lambda backend: backend.poly1305_supported(), - skip_message="Requires OpenSSL with poly1305 support" + skip_message="Requires OpenSSL with poly1305 support", ) class TestPoly1305(object): @pytest.mark.parametrize( "vector", load_vectors_from_file( os.path.join("poly1305", "rfc7539.txt"), load_nist_vectors - ) + ), ) def test_vectors(self, vector, backend): key = binascii.unhexlify(vector["key"]) @@ -67,10 +71,10 @@ def test_raises_after_finalize(self, backend): def test_reject_unicode(self, backend): poly = Poly1305(b"0" * 32) with pytest.raises(TypeError): - poly.update(u'') + poly.update(u"") with pytest.raises(TypeError): - Poly1305.generate_tag(b"0" * 32, u'') + Poly1305.generate_tag(b"0" * 32, u"") def test_verify(self, backend): poly = Poly1305(b"0" * 32) @@ -103,10 +107,10 @@ def test_invalid_verify(self, backend): def test_verify_reject_unicode(self, backend): poly = Poly1305(b"0" * 32) with pytest.raises(TypeError): - poly.verify(u'') + poly.verify(u"") with pytest.raises(TypeError): - Poly1305.verify_tag(b"0" * 32, b"msg", u'') + Poly1305.verify_tag(b"0" * 32, b"msg", u"") def test_invalid_key_type(self, backend): with pytest.raises(TypeError): diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index bde8b2095b7d..530f648889c2 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -11,36 +11,61 @@ import pytest from cryptography.exceptions import ( - AlreadyFinalized, InvalidSignature, _Reasons + AlreadyFinalized, + InvalidSignature, + _Reasons, ) from cryptography.hazmat.backends.interfaces import ( - PEMSerializationBackend, RSABackend + PEMSerializationBackend, + RSABackend, ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ( - padding, rsa, utils as asym_utils + padding, + rsa, + utils as asym_utils, ) from cryptography.hazmat.primitives.asymmetric.rsa import ( - RSAPrivateNumbers, RSAPublicNumbers + RSAPrivateNumbers, + RSAPublicNumbers, ) from cryptography.utils import CryptographyDeprecationWarning from .fixtures_rsa import ( - RSA_KEY_1024, RSA_KEY_1025, RSA_KEY_1026, RSA_KEY_1027, RSA_KEY_1028, - RSA_KEY_1029, RSA_KEY_1030, RSA_KEY_1031, RSA_KEY_1536, RSA_KEY_2048, - RSA_KEY_2048_ALT, RSA_KEY_512, RSA_KEY_512_ALT, RSA_KEY_522, RSA_KEY_599, - RSA_KEY_745, RSA_KEY_768, + RSA_KEY_1024, + RSA_KEY_1025, + RSA_KEY_1026, + RSA_KEY_1027, + RSA_KEY_1028, + RSA_KEY_1029, + RSA_KEY_1030, + RSA_KEY_1031, + RSA_KEY_1536, + RSA_KEY_2048, + RSA_KEY_2048_ALT, + RSA_KEY_512, + RSA_KEY_512_ALT, + RSA_KEY_522, + RSA_KEY_599, + RSA_KEY_745, + RSA_KEY_768, ) from .utils import ( - _check_rsa_private_numbers, generate_rsa_verification_test, - skip_fips_traditional_openssl + _check_rsa_private_numbers, + generate_rsa_verification_test, + skip_fips_traditional_openssl, ) from ...doubles import ( - DummyAsymmetricPadding, DummyHashAlgorithm, DummyKeySerializationEncryption + DummyAsymmetricPadding, + DummyHashAlgorithm, + DummyKeySerializationEncryption, ) from ...utils import ( - load_nist_vectors, load_pkcs1_vectors, load_rsa_nist_vectors, - load_vectors_from_file, raises_unsupported_algorithm + load_nist_vectors, + load_pkcs1_vectors, + load_rsa_nist_vectors, + load_vectors_from_file, + raises_unsupported_algorithm, ) @@ -89,11 +114,9 @@ def _build_oaep_sha2_vectors(): load_vectors_from_file( os.path.join( base_path, - "oaep-{}-{}.txt".format( - mgf1alg.name, oaepalg.name - ) + "oaep-{}-{}.txt".format(mgf1alg.name, oaepalg.name), ), - load_pkcs1_vectors + load_pkcs1_vectors, ) ) # We've loaded the files, but the loaders don't give us any information @@ -107,8 +130,7 @@ def _build_oaep_sha2_vectors(): def _skip_pss_hash_algorithm_unsupported(backend, hash_alg): if not backend.rsa_padding_supported( padding.PSS( - mgf=padding.MGF1(hash_alg), - salt_length=padding.PSS.MAX_LENGTH + mgf=padding.MGF1(hash_alg), salt_length=padding.PSS.MAX_LENGTH ) ): pytest.skip( @@ -127,19 +149,22 @@ def test_modular_inverse(): "d1f9f6c09fd3d38987f7970247b85a6da84907753d42ec52bc23b745093f4fff5cff3" "617ce43d00121a9accc0051f519c76e08cf02fc18acfe4c9e6aea18da470a2b611d2e" "56a7b35caa2c0239bc041a53cc5875ca0b668ae6377d4b23e932d8c995fd1e58ecfd8" - "c4b73259c0d8a54d691cca3f6fb85c8a5c1baf588e898d481", 16 + "c4b73259c0d8a54d691cca3f6fb85c8a5c1baf588e898d481", + 16, ) q = int( "d1519255eb8f678c86cfd06802d1fbef8b664441ac46b73d33d13a8404580a33a8e74" "cb2ea2e2963125b3d454d7a922cef24dd13e55f989cbabf64255a736671f4629a47b5" "b2347cfcd669133088d1c159518531025297c2d67c9da856a12e80222cd03b4c6ec0f" - "86c957cb7bb8de7a127b645ec9e820aa94581e4762e209f01", 16 + "86c957cb7bb8de7a127b645ec9e820aa94581e4762e209f01", + 16, ) assert rsa._modinv(q, p) == int( "0275e06afa722999315f8f322275483e15e2fb46d827b17800f99110b269a6732748f" "624a382fa2ed1ec68c99f7fc56fb60e76eea51614881f497ba7034c17dde955f92f15" "772f8b2b41f3e56d88b1e096cdd293eba4eae1e82db815e0fadea0c4ec971bc6fd875" - "c20e67e48c31a611e98d32c6213ae4c4d7b53023b2f80c538", 16 + "c20e67e48c31a611e98d32c6213ae4c4d7b53023b2f80c538", + 16, ) @@ -149,16 +174,16 @@ class TestRSA(object): ("public_exponent", "key_size"), itertools.product( (3, 65537), - (1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1536, 2048) - ) + (1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1536, 2048), + ), ) def test_generate_rsa_keys(self, backend, public_exponent, key_size): if backend._fips_enabled: if key_size < backend._fips_rsa_min_key_size: pytest.skip("Key size not FIPS compliant: {}".format(key_size)) if public_exponent < backend._fips_rsa_min_public_exponent: - pytest.skip("Exponent not FIPS compliant: {}".format( - public_exponent) + pytest.skip( + "Exponent not FIPS compliant: {}".format(public_exponent) ) skey = rsa.generate_private_key(public_exponent, key_size, backend) assert skey.key_size == key_size @@ -169,38 +194,39 @@ def test_generate_rsa_keys(self, backend, public_exponent, key_size): def test_generate_bad_public_exponent(self, backend): with pytest.raises(ValueError): - rsa.generate_private_key(public_exponent=1, - key_size=2048, - backend=backend) + rsa.generate_private_key( + public_exponent=1, key_size=2048, backend=backend + ) with pytest.raises(ValueError): - rsa.generate_private_key(public_exponent=4, - key_size=2048, - backend=backend) + rsa.generate_private_key( + public_exponent=4, key_size=2048, backend=backend + ) with pytest.raises(ValueError): - rsa.generate_private_key(public_exponent=65535, - key_size=2048, - backend=backend) + rsa.generate_private_key( + public_exponent=65535, key_size=2048, backend=backend + ) def test_cant_generate_insecure_tiny_key(self, backend): with pytest.raises(ValueError): - rsa.generate_private_key(public_exponent=65537, - key_size=511, - backend=backend) + rsa.generate_private_key( + public_exponent=65537, key_size=511, backend=backend + ) with pytest.raises(ValueError): - rsa.generate_private_key(public_exponent=65537, - key_size=256, - backend=backend) + rsa.generate_private_key( + public_exponent=65537, key_size=256, backend=backend + ) @pytest.mark.parametrize( "pkcs1_example", load_vectors_from_file( os.path.join( - "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt"), - load_pkcs1_vectors - ) + "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt" + ), + load_pkcs1_vectors, + ), ) def test_load_pss_vect_example_keys(self, pkcs1_example): secret, public = pkcs1_example @@ -213,15 +239,13 @@ def test_load_pss_vect_example_keys(self, pkcs1_example): dmq1=secret["dmq1"], iqmp=secret["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=secret["public_exponent"], - n=secret["modulus"] - ) + e=secret["public_exponent"], n=secret["modulus"] + ), ) _check_rsa_private_numbers(private_num) public_num = rsa.RSAPublicNumbers( - e=public["public_exponent"], - n=public["modulus"] + e=public["public_exponent"], n=public["modulus"] ) assert public_num @@ -235,17 +259,18 @@ def test_load_pss_vect_example_keys(self, pkcs1_example): "vector", load_vectors_from_file( os.path.join("asymmetric", "RSA", "oaep-label.txt"), - load_nist_vectors) + load_nist_vectors, + ), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=b"label" + label=b"label", ) ), - skip_message="Does not support RSA OAEP labels" + skip_message="Does not support RSA OAEP labels", ) def test_oaep_label_decrypt(self, vector, backend): private_key = serialization.load_der_private_key( @@ -257,8 +282,8 @@ def test_oaep_label_decrypt(self, vector, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA512()), algorithm=hashes.SHA512(), - label=binascii.unhexlify(vector["oaeplabel"]) - ) + label=binascii.unhexlify(vector["oaeplabel"]), + ), ) assert vector["output"][1:-1] == decrypted @@ -267,17 +292,17 @@ def test_oaep_label_decrypt(self, vector, backend): [ (b"amazing encrypted msg", b"some label"), (b"amazing encrypted msg", b""), - ] + ], ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=b"label" + label=b"label", ) ), - skip_message="Does not support RSA OAEP labels" + skip_message="Does not support RSA OAEP labels", ) def test_oaep_label_roundtrip(self, msg, label, backend): private_key = RSA_KEY_2048.private_key(backend) @@ -286,54 +311,52 @@ def test_oaep_label_roundtrip(self, msg, label, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=label - ) + label=label, + ), ) pt = private_key.decrypt( ct, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=label - ) + label=label, + ), ) assert pt == msg @pytest.mark.parametrize( ("enclabel", "declabel"), - [ - (b"label1", b"label2"), - (b"label3", b""), - (b"", b"label4"), - ] + [(b"label1", b"label2"), (b"label3", b""), (b"", b"label4")], ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=b"label" + label=b"label", ) ), - skip_message="Does not support RSA OAEP labels" + skip_message="Does not support RSA OAEP labels", ) def test_oaep_wrong_label(self, enclabel, declabel, backend): private_key = RSA_KEY_2048.private_key(backend) msg = b"test" ct = private_key.public_key().encrypt( - msg, padding.OAEP( + msg, + padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=enclabel - ) + label=enclabel, + ), ) with pytest.raises(ValueError): private_key.decrypt( - ct, padding.OAEP( + ct, + padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=declabel - ) + label=declabel, + ), ) @pytest.mark.supported( @@ -341,10 +364,10 @@ def test_oaep_wrong_label(self, enclabel, declabel, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), - label=b"label" + label=b"label", ) ), - skip_message="Requires backend without RSA OAEP label support" + skip_message="Requires backend without RSA OAEP label support", ) def test_unsupported_oaep_label_decrypt(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -354,8 +377,8 @@ def test_unsupported_oaep_label_decrypt(self, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=b"label" - ) + label=b"label", + ), ) @@ -372,15 +395,16 @@ class TestRSASignature(object): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) @pytest.mark.parametrize( "pkcs1_example", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs1v15sign-vectors.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join("asymmetric", "RSA", "pkcs1v15sign-vectors.txt"), + load_pkcs1_vectors, + ) + ), ) def test_pkcs1v15_signing(self, pkcs1_example, backend): private, public, example = pkcs1_example @@ -392,14 +416,13 @@ def test_pkcs1v15_signing(self, pkcs1_example, backend): dmq1=private["dmq1"], iqmp=private["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=private["public_exponent"], - n=private["modulus"] - ) + e=private["public_exponent"], n=private["modulus"] + ), ).private_key(backend) signature = private_key.sign( binascii.unhexlify(example["message"]), padding.PKCS1v15(), - hashes.SHA1() + hashes.SHA1(), ) assert binascii.hexlify(signature) == example["signature"] @@ -407,18 +430,21 @@ def test_pkcs1v15_signing(self, pkcs1_example, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) @pytest.mark.parametrize( "pkcs1_example", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join( + "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt" + ), + load_pkcs1_vectors, + ) + ), ) def test_pss_signing(self, pkcs1_example, backend): private, public, example = pkcs1_example @@ -430,21 +456,19 @@ def test_pss_signing(self, pkcs1_example, backend): dmq1=private["dmq1"], iqmp=private["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=private["public_exponent"], - n=private["modulus"] - ) + e=private["public_exponent"], n=private["modulus"] + ), ).private_key(backend) public_key = rsa.RSAPublicNumbers( - e=public["public_exponent"], - n=public["modulus"] + e=public["public_exponent"], n=public["modulus"] ).public_key(backend) signature = private_key.sign( binascii.unhexlify(example["message"]), padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA1() + hashes.SHA1(), ) assert len(signature) == (private_key.key_size + 7) // 8 # PSS signatures contain randomness so we can't do an exact @@ -455,22 +479,21 @@ def test_pss_signing(self, pkcs1_example, backend): binascii.unhexlify(example["message"]), padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), hashes.SHA1(), ) @pytest.mark.parametrize( "hash_alg", - [hashes.SHA224(), hashes.SHA256(), hashes.SHA384(), hashes.SHA512()] + [hashes.SHA224(), hashes.SHA256(), hashes.SHA384(), hashes.SHA512()], ) def test_pss_signing_sha2(self, hash_alg, backend): _skip_pss_hash_algorithm_unsupported(backend, hash_alg) private_key = RSA_KEY_768.private_key(backend) public_key = private_key.public_key() pss = padding.PSS( - mgf=padding.MGF1(hash_alg), - salt_length=padding.PSS.MAX_LENGTH + mgf=padding.MGF1(hash_alg), salt_length=padding.PSS.MAX_LENGTH ) msg = b"testing signature" signature = private_key.sign(msg, pss, hash_alg) @@ -478,15 +501,15 @@ def test_pss_signing_sha2(self, hash_alg, backend): @pytest.mark.supported( only_if=lambda backend: ( - backend.hash_supported(hashes.SHA512()) and - backend.rsa_padding_supported( + backend.hash_supported(hashes.SHA512()) + and backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ) ), - skip_message="Does not support SHA512." + skip_message="Does not support SHA512.", ) def test_pss_minimum_key_size_for_digest(self, backend): private_key = RSA_KEY_522.private_key(backend) @@ -494,23 +517,23 @@ def test_pss_minimum_key_size_for_digest(self, backend): b"no failure", padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA512() + hashes.SHA512(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported(hashes.SHA512()), - skip_message="Does not support SHA512." + skip_message="Does not support SHA512.", ) def test_pss_signing_digest_too_large_for_key_size(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -519,19 +542,19 @@ def test_pss_signing_digest_too_large_for_key_size(self, backend): b"msg", padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA512() + hashes.SHA512(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_pss_signing_salt_length_too_long(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -539,17 +562,16 @@ def test_pss_signing_salt_length_too_long(self, backend): private_key.sign( b"failure coming", padding.PSS( - mgf=padding.MGF1(hashes.SHA1()), - salt_length=1000000 + mgf=padding.MGF1(hashes.SHA1()), salt_length=1000000 ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_use_after_finalize(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -576,7 +598,7 @@ def test_padding_incorrect_type(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_unsupported_pss_mgf(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -584,40 +606,33 @@ def test_unsupported_pss_mgf(self, backend): private_key.sign( b"msg", padding.PSS( - mgf=DummyMGF(), - salt_length=padding.PSS.MAX_LENGTH + mgf=DummyMGF(), salt_length=padding.PSS.MAX_LENGTH ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_pkcs1_digest_too_large_for_key_size(self, backend): private_key = RSA_KEY_599.private_key(backend) with pytest.raises(ValueError): private_key.sign( - b"failure coming", - padding.PKCS1v15(), - hashes.SHA512() + b"failure coming", padding.PKCS1v15(), hashes.SHA512() ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_pkcs1_minimum_key_size(self, backend): private_key = RSA_KEY_745.private_key(backend) - private_key.sign( - b"no failure", - padding.PKCS1v15(), - hashes.SHA512() - ) + private_key.sign(b"no failure", padding.PKCS1v15(), hashes.SHA512()) def test_sign(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -632,7 +647,7 @@ def test_sign(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_prehashed_sign(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -648,14 +663,15 @@ def test_prehashed_sign(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.hash_supported( - hashes.BLAKE2s(digest_size=32)), + hashes.BLAKE2s(digest_size=32) + ), skip_message="Does not support BLAKE2s", ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_unsupported_hash(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -668,7 +684,7 @@ def test_unsupported_hash(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_prehashed_digest_mismatch(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -685,31 +701,32 @@ def test_prehashed_digest_mismatch(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_prehashed_unsupported_in_signer_ctx(self, backend): private_key = RSA_KEY_512.private_key(backend) - with pytest.raises(TypeError), \ - pytest.warns(CryptographyDeprecationWarning): + with pytest.raises(TypeError), pytest.warns( + CryptographyDeprecationWarning + ): private_key.signer( - padding.PKCS1v15(), - asym_utils.Prehashed(hashes.SHA1()) + padding.PKCS1v15(), asym_utils.Prehashed(hashes.SHA1()) ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_prehashed_unsupported_in_verifier_ctx(self, backend): public_key = RSA_KEY_512.private_key(backend).public_key() - with pytest.raises(TypeError), \ - pytest.warns(CryptographyDeprecationWarning): + with pytest.raises(TypeError), pytest.warns( + CryptographyDeprecationWarning + ): public_key.verifier( b"0" * 64, padding.PKCS1v15(), - asym_utils.Prehashed(hashes.SHA1()) + asym_utils.Prehashed(hashes.SHA1()), ) @@ -719,34 +736,34 @@ class TestRSAVerification(object): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) @pytest.mark.parametrize( "pkcs1_example", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs1v15sign-vectors.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join("asymmetric", "RSA", "pkcs1v15sign-vectors.txt"), + load_pkcs1_vectors, + ) + ), ) def test_pkcs1v15_verification(self, pkcs1_example, backend): private, public, example = pkcs1_example public_key = rsa.RSAPublicNumbers( - e=public["public_exponent"], - n=public["modulus"] + e=public["public_exponent"], n=public["modulus"] ).public_key(backend) public_key.verify( binascii.unhexlify(example["signature"]), binascii.unhexlify(example["message"]), padding.PKCS1v15(), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_invalid_pkcs1v15_signature_wrong_data(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -756,10 +773,7 @@ def test_invalid_pkcs1v15_signature_wrong_data(self, backend): ) with pytest.raises(InvalidSignature): public_key.verify( - signature, - b"incorrect data", - padding.PKCS1v15(), - hashes.SHA1() + signature, b"incorrect data", padding.PKCS1v15(), hashes.SHA1() ) def test_invalid_signature_sequence_removed(self, backend): @@ -794,14 +808,14 @@ def test_invalid_signature_sequence_removed(self, backend): sig, binascii.unhexlify(b"313233343030"), padding.PKCS1v15(), - hashes.SHA256() + hashes.SHA256(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_invalid_pkcs1v15_signature_wrong_key(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -816,54 +830,53 @@ def test_invalid_pkcs1v15_signature_wrong_key(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( - padding.PSS( - mgf=padding.MGF1(hashes.SHA1()), - salt_length=20 - ) + padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=20) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) @pytest.mark.parametrize( "pkcs1_example", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join( + "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt" + ), + load_pkcs1_vectors, + ) + ), ) def test_pss_verification(self, pkcs1_example, backend): private, public, example = pkcs1_example public_key = rsa.RSAPublicNumbers( - e=public["public_exponent"], - n=public["modulus"] + e=public["public_exponent"], n=public["modulus"] ).public_key(backend) public_key.verify( binascii.unhexlify(example["signature"]), binascii.unhexlify(example["message"]), padding.PSS( - mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=20 + mgf=padding.MGF1(algorithm=hashes.SHA1()), salt_length=20 ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_invalid_pss_signature_wrong_data(self, backend): public_key = rsa.RSAPublicNumbers( n=int( b"dffc2137d5e810cde9e4b4612f5796447218bab913b3fa98bdf7982e4fa6" b"ec4d6653ef2b29fb1642b095befcbea6decc178fb4bed243d3c3592c6854" - b"6af2d3f3", 16 + b"6af2d3f3", + 16, ), - e=65537 + e=65537, ).public_key(backend) signature = binascii.unhexlify( b"0e68c3649df91c5bc3665f96e157efa75b71934aaa514d91e94ca8418d100f45" @@ -875,19 +888,19 @@ def test_invalid_pss_signature_wrong_data(self, backend): b"incorrect data", padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_invalid_pss_signature_wrong_key(self, backend): signature = binascii.unhexlify( @@ -900,9 +913,10 @@ def test_invalid_pss_signature_wrong_key(self, backend): b"5a95441be90866a14c4d2e139cd16db540ec6c7abab13ffff91443fd46a8" b"960cbb7658ded26a5c95c86f6e40384e1c1239c63e541ba221191c4dd303" b"231b42e33c6dbddf5ec9a746f09bf0c25d0f8d27f93ee0ae5c0d723348f4" - b"030d3581e13522e1", 16 + b"030d3581e13522e1", + 16, ), - e=65537 + e=65537, ).public_key(backend) with pytest.raises(InvalidSignature): public_key.verify( @@ -910,19 +924,19 @@ def test_invalid_pss_signature_wrong_key(self, backend): b"sign me", padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_invalid_pss_signature_data_too_large_for_modulus(self, backend): signature = binascii.unhexlify( @@ -935,9 +949,10 @@ def test_invalid_pss_signature_data_too_large_for_modulus(self, backend): b"5a95441be90866a14c4d2e139cd16db540ec6c7abab13ffff91443fd46a8" b"960cbb7658ded26a5c95c86f6e40384e1c1239c63e541ba221191c4dd303" b"231b42e33c6dbddf5ec9a746f09bf0c25d0f8d27f93ee0ae5c0d723348f4" - b"030d3581e13522", 16 + b"030d3581e13522", + 16, ), - e=65537 + e=65537, ).public_key(backend) with pytest.raises(InvalidSignature): public_key.verify( @@ -945,16 +960,16 @@ def test_invalid_pss_signature_data_too_large_for_modulus(self, backend): b"sign me", padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_use_after_finalize(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -965,9 +980,7 @@ def test_use_after_finalize(self, backend): with pytest.warns(CryptographyDeprecationWarning): verifier = public_key.verifier( - signature, - padding.PKCS1v15(), - hashes.SHA1() + signature, padding.PKCS1v15(), hashes.SHA1() ) verifier.update(b"sign me") verifier.verify() @@ -988,19 +1001,16 @@ def test_unsupported_padding(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_signature_not_bytes(self, backend): public_key = RSA_KEY_512.public_numbers.public_key(backend) signature = 1234 - with pytest.raises(TypeError), \ - pytest.warns(CryptographyDeprecationWarning): - public_key.verifier( - signature, - padding.PKCS1v15(), - hashes.SHA1() - ) + with pytest.raises(TypeError), pytest.warns( + CryptographyDeprecationWarning + ): + public_key.verifier(signature, padding.PKCS1v15(), hashes.SHA1()) def test_padding_incorrect_type(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -1012,7 +1022,7 @@ def test_padding_incorrect_type(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=0) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_unsupported_pss_mgf(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -1022,24 +1032,23 @@ def test_unsupported_pss_mgf(self, backend): b"sig", b"msg", padding.PSS( - mgf=DummyMGF(), - salt_length=padding.PSS.MAX_LENGTH + mgf=DummyMGF(), salt_length=padding.PSS.MAX_LENGTH ), - hashes.SHA1() + hashes.SHA1(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) @pytest.mark.supported( only_if=lambda backend: backend.hash_supported(hashes.SHA512()), - skip_message="Does not support SHA512." + skip_message="Does not support SHA512.", ) def test_pss_verify_digest_too_large_for_key_size(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -1054,19 +1063,19 @@ def test_pss_verify_digest_too_large_for_key_size(self, backend): b"msg doesn't matter", padding.PSS( mgf=padding.MGF1(algorithm=hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ), - hashes.SHA512() + hashes.SHA512(), ) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS." + skip_message="Does not support PSS.", ) def test_pss_verify_salt_length_too_long(self, backend): signature = binascii.unhexlify( @@ -1077,21 +1086,20 @@ def test_pss_verify_salt_length_too_long(self, backend): n=int( b"d309e4612809437548b747d7f9eb9cd3340f54fe42bb3f84a36933b0839c" b"11b0c8b7f67e11f7252370161e31159c49c784d4bc41c42a78ce0f0b40a3" - b"ca8ffb91", 16 + b"ca8ffb91", + 16, ), - e=65537 + e=65537, ).public_key(backend) with pytest.raises(InvalidSignature): public_key.verify( signature, b"sign me", padding.PSS( - mgf=padding.MGF1( - algorithm=hashes.SHA1(), - ), - salt_length=1000000 + mgf=padding.MGF1(algorithm=hashes.SHA1(),), + salt_length=1000000, ), - hashes.SHA1() + hashes.SHA1(), ) def test_verify(self, backend): @@ -1133,219 +1141,229 @@ class TestRSAPSSMGF1Verification(object): only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA1()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS using MGF1 with SHA1." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGenPSS_186-2.rsp", - "SigGenPSS_186-3.rsp", - "SigVerPSS_186-3.rsp", - ], - hashes.SHA1(), - lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1( - algorithm=hash_alg, + skip_message="Does not support PSS using MGF1 with SHA1.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGenPSS_186-2.rsp", + "SigGenPSS_186-3.rsp", + "SigVerPSS_186-3.rsp", + ], + hashes.SHA1(), + lambda params, hash_alg: padding.PSS( + mgf=padding.MGF1(algorithm=hash_alg,), + salt_length=params["salt_length"], ), - salt_length=params["salt_length"] ) - )) + ) test_rsa_pss_mgf1_sha224 = pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA224()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS using MGF1 with SHA224." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGenPSS_186-2.rsp", - "SigGenPSS_186-3.rsp", - "SigVerPSS_186-3.rsp", - ], - hashes.SHA224(), - lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1( - algorithm=hash_alg, + skip_message="Does not support PSS using MGF1 with SHA224.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGenPSS_186-2.rsp", + "SigGenPSS_186-3.rsp", + "SigVerPSS_186-3.rsp", + ], + hashes.SHA224(), + lambda params, hash_alg: padding.PSS( + mgf=padding.MGF1(algorithm=hash_alg,), + salt_length=params["salt_length"], ), - salt_length=params["salt_length"] ) - )) + ) test_rsa_pss_mgf1_sha256 = pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA256()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS using MGF1 with SHA256." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGenPSS_186-2.rsp", - "SigGenPSS_186-3.rsp", - "SigVerPSS_186-3.rsp", - ], - hashes.SHA256(), - lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1( - algorithm=hash_alg, + skip_message="Does not support PSS using MGF1 with SHA256.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGenPSS_186-2.rsp", + "SigGenPSS_186-3.rsp", + "SigVerPSS_186-3.rsp", + ], + hashes.SHA256(), + lambda params, hash_alg: padding.PSS( + mgf=padding.MGF1(algorithm=hash_alg,), + salt_length=params["salt_length"], ), - salt_length=params["salt_length"] ) - )) + ) test_rsa_pss_mgf1_sha384 = pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA384()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS using MGF1 with SHA384." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGenPSS_186-2.rsp", - "SigGenPSS_186-3.rsp", - "SigVerPSS_186-3.rsp", - ], - hashes.SHA384(), - lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1( - algorithm=hash_alg, + skip_message="Does not support PSS using MGF1 with SHA384.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGenPSS_186-2.rsp", + "SigGenPSS_186-3.rsp", + "SigVerPSS_186-3.rsp", + ], + hashes.SHA384(), + lambda params, hash_alg: padding.PSS( + mgf=padding.MGF1(algorithm=hash_alg,), + salt_length=params["salt_length"], ), - salt_length=params["salt_length"] ) - )) + ) test_rsa_pss_mgf1_sha512 = pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PSS( mgf=padding.MGF1(hashes.SHA512()), - salt_length=padding.PSS.MAX_LENGTH + salt_length=padding.PSS.MAX_LENGTH, ) ), - skip_message="Does not support PSS using MGF1 with SHA512." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGenPSS_186-2.rsp", - "SigGenPSS_186-3.rsp", - "SigVerPSS_186-3.rsp", - ], - hashes.SHA512(), - lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1( - algorithm=hash_alg, + skip_message="Does not support PSS using MGF1 with SHA512.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGenPSS_186-2.rsp", + "SigGenPSS_186-3.rsp", + "SigVerPSS_186-3.rsp", + ], + hashes.SHA512(), + lambda params, hash_alg: padding.PSS( + mgf=padding.MGF1(algorithm=hash_alg,), + salt_length=params["salt_length"], ), - salt_length=params["salt_length"] ) - )) + ) @pytest.mark.requires_backend_interface(interface=RSABackend) class TestRSAPKCS1Verification(object): test_rsa_pkcs1v15_verify_sha1 = pytest.mark.supported( only_if=lambda backend: ( - backend.hash_supported(hashes.SHA1()) and - backend.rsa_padding_supported(padding.PKCS1v15()) + backend.hash_supported(hashes.SHA1()) + and backend.rsa_padding_supported(padding.PKCS1v15()) ), - skip_message="Does not support SHA1 and PKCS1v1.5." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGen15_186-2.rsp", - "SigGen15_186-3.rsp", - "SigVer15_186-3.rsp", - ], - hashes.SHA1(), - lambda params, hash_alg: padding.PKCS1v15() - )) + skip_message="Does not support SHA1 and PKCS1v1.5.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGen15_186-2.rsp", + "SigGen15_186-3.rsp", + "SigVer15_186-3.rsp", + ], + hashes.SHA1(), + lambda params, hash_alg: padding.PKCS1v15(), + ) + ) test_rsa_pkcs1v15_verify_sha224 = pytest.mark.supported( only_if=lambda backend: ( - backend.hash_supported(hashes.SHA224()) and - backend.rsa_padding_supported(padding.PKCS1v15()) + backend.hash_supported(hashes.SHA224()) + and backend.rsa_padding_supported(padding.PKCS1v15()) ), - skip_message="Does not support SHA224 and PKCS1v1.5." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGen15_186-2.rsp", - "SigGen15_186-3.rsp", - "SigVer15_186-3.rsp", - ], - hashes.SHA224(), - lambda params, hash_alg: padding.PKCS1v15() - )) + skip_message="Does not support SHA224 and PKCS1v1.5.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGen15_186-2.rsp", + "SigGen15_186-3.rsp", + "SigVer15_186-3.rsp", + ], + hashes.SHA224(), + lambda params, hash_alg: padding.PKCS1v15(), + ) + ) test_rsa_pkcs1v15_verify_sha256 = pytest.mark.supported( only_if=lambda backend: ( - backend.hash_supported(hashes.SHA256()) and - backend.rsa_padding_supported(padding.PKCS1v15()) + backend.hash_supported(hashes.SHA256()) + and backend.rsa_padding_supported(padding.PKCS1v15()) ), - skip_message="Does not support SHA256 and PKCS1v1.5." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGen15_186-2.rsp", - "SigGen15_186-3.rsp", - "SigVer15_186-3.rsp", - ], - hashes.SHA256(), - lambda params, hash_alg: padding.PKCS1v15() - )) + skip_message="Does not support SHA256 and PKCS1v1.5.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGen15_186-2.rsp", + "SigGen15_186-3.rsp", + "SigVer15_186-3.rsp", + ], + hashes.SHA256(), + lambda params, hash_alg: padding.PKCS1v15(), + ) + ) test_rsa_pkcs1v15_verify_sha384 = pytest.mark.supported( only_if=lambda backend: ( - backend.hash_supported(hashes.SHA384()) and - backend.rsa_padding_supported(padding.PKCS1v15()) + backend.hash_supported(hashes.SHA384()) + and backend.rsa_padding_supported(padding.PKCS1v15()) ), - skip_message="Does not support SHA384 and PKCS1v1.5." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGen15_186-2.rsp", - "SigGen15_186-3.rsp", - "SigVer15_186-3.rsp", - ], - hashes.SHA384(), - lambda params, hash_alg: padding.PKCS1v15() - )) + skip_message="Does not support SHA384 and PKCS1v1.5.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGen15_186-2.rsp", + "SigGen15_186-3.rsp", + "SigVer15_186-3.rsp", + ], + hashes.SHA384(), + lambda params, hash_alg: padding.PKCS1v15(), + ) + ) test_rsa_pkcs1v15_verify_sha512 = pytest.mark.supported( only_if=lambda backend: ( - backend.hash_supported(hashes.SHA512()) and - backend.rsa_padding_supported(padding.PKCS1v15()) + backend.hash_supported(hashes.SHA512()) + and backend.rsa_padding_supported(padding.PKCS1v15()) ), - skip_message="Does not support SHA512 and PKCS1v1.5." - )(generate_rsa_verification_test( - load_rsa_nist_vectors, - os.path.join("asymmetric", "RSA", "FIPS_186-2"), - [ - "SigGen15_186-2.rsp", - "SigGen15_186-3.rsp", - "SigVer15_186-3.rsp", - ], - hashes.SHA512(), - lambda params, hash_alg: padding.PKCS1v15() - )) + skip_message="Does not support SHA512 and PKCS1v1.5.", + )( + generate_rsa_verification_test( + load_rsa_nist_vectors, + os.path.join("asymmetric", "RSA", "FIPS_186-2"), + [ + "SigGen15_186-2.rsp", + "SigGen15_186-3.rsp", + "SigVer15_186-3.rsp", + ], + hashes.SHA512(), + lambda params, hash_alg: padding.PKCS1v15(), + ) + ) class TestPSS(object): @@ -1356,20 +1374,12 @@ def test_calculate_max_pss_salt_length(self): def test_invalid_salt_length_not_integer(self): with pytest.raises(TypeError): padding.PSS( - mgf=padding.MGF1( - hashes.SHA1() - ), - salt_length=b"not_a_length" + mgf=padding.MGF1(hashes.SHA1()), salt_length=b"not_a_length" ) def test_invalid_salt_length_negative_integer(self): with pytest.raises(ValueError): - padding.PSS( - mgf=padding.MGF1( - hashes.SHA1() - ), - salt_length=-1 - ) + padding.PSS(mgf=padding.MGF1(hashes.SHA1()), salt_length=-1) def test_valid_pss_parameters(self): algorithm = hashes.SHA1() @@ -1402,11 +1412,7 @@ class TestOAEP(object): def test_invalid_algorithm(self): mgf = padding.MGF1(hashes.SHA1()) with pytest.raises(TypeError): - padding.OAEP( - mgf=mgf, - algorithm=b"", - label=None - ) + padding.OAEP(mgf=mgf, algorithm=b"", label=None) @pytest.mark.requires_backend_interface(interface=RSABackend) @@ -1415,15 +1421,16 @@ class TestRSADecryption(object): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) @pytest.mark.parametrize( "vector", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs1v15crypt-vectors.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join("asymmetric", "RSA", "pkcs1v15crypt-vectors.txt"), + load_pkcs1_vectors, + ) + ), ) def test_decrypt_pkcs1v15_vectors(self, vector, backend): private, public, example = vector @@ -1435,9 +1442,8 @@ def test_decrypt_pkcs1v15_vectors(self, vector, backend): dmq1=private["dmq1"], iqmp=private["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=private["public_exponent"], - n=private["modulus"] - ) + e=private["public_exponent"], n=private["modulus"] + ), ).private_key(backend) ciphertext = binascii.unhexlify(example["encryption"]) assert len(ciphertext) == (skey.key_size + 7) // 8 @@ -1453,35 +1459,29 @@ def test_unsupported_padding(self, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_decrypt_invalid_decrypt(self, backend): private_key = RSA_KEY_512.private_key(backend) with pytest.raises(ValueError): - private_key.decrypt( - b"\x00" * 64, - padding.PKCS1v15() - ) + private_key.decrypt(b"\x00" * 64, padding.PKCS1v15()) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_decrypt_ciphertext_too_large(self, backend): private_key = RSA_KEY_512.private_key(backend) with pytest.raises(ValueError): - private_key.decrypt( - b"\x00" * 65, - padding.PKCS1v15() - ) + private_key.decrypt(b"\x00" * 65, padding.PKCS1v15()) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) def test_decrypt_ciphertext_too_small(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -1490,28 +1490,28 @@ def test_decrypt_ciphertext_too_small(self, backend): b"69d210f2b9bdfb48b12f9ea05009c77da257cc600ccefe3a6283789d8ea0" ) with pytest.raises(ValueError): - private_key.decrypt( - ct, - padding.PKCS1v15() - ) + private_key.decrypt(ct, padding.PKCS1v15()) @pytest.mark.supported( only_if=lambda backend: backend.rsa_padding_supported( padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None + label=None, ) ), - skip_message="Does not support OAEP." + skip_message="Does not support OAEP.", ) @pytest.mark.parametrize( "vector", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "oaep-vect.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join( + "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "oaep-vect.txt" + ), + load_pkcs1_vectors, + ) + ), ) def test_decrypt_oaep_vectors(self, vector, backend): private, public, example = vector @@ -1523,17 +1523,16 @@ def test_decrypt_oaep_vectors(self, vector, backend): dmq1=private["dmq1"], iqmp=private["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=private["public_exponent"], - n=private["modulus"] - ) + e=private["public_exponent"], n=private["modulus"] + ), ).private_key(backend) message = skey.decrypt( binascii.unhexlify(example["encryption"]), padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None - ) + label=None, + ), ) assert message == binascii.unhexlify(example["message"]) @@ -1542,15 +1541,14 @@ def test_decrypt_oaep_vectors(self, vector, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA224()), algorithm=hashes.SHA224(), - label=None + label=None, ) ), - skip_message="Does not support OAEP using SHA224 MGF1 and SHA224 hash." - ) - @pytest.mark.parametrize( - "vector", - _build_oaep_sha2_vectors() + skip_message=( + "Does not support OAEP using SHA224 MGF1 and SHA224 hash." + ), ) + @pytest.mark.parametrize("vector", _build_oaep_sha2_vectors()) def test_decrypt_oaep_sha2_vectors(self, vector, backend): private, public, example, mgf1_alg, hash_alg = vector skey = rsa.RSAPrivateNumbers( @@ -1561,17 +1559,16 @@ def test_decrypt_oaep_sha2_vectors(self, vector, backend): dmq1=private["dmq1"], iqmp=private["iqmp"], public_numbers=rsa.RSAPublicNumbers( - e=private["public_exponent"], - n=private["modulus"] - ) + e=private["public_exponent"], n=private["modulus"] + ), ).private_key(backend) message = skey.decrypt( binascii.unhexlify(example["encryption"]), padding.OAEP( mgf=padding.MGF1(algorithm=mgf1_alg), algorithm=hash_alg, - label=None - ) + label=None, + ), ) assert message == binascii.unhexlify(example["message"]) @@ -1580,10 +1577,10 @@ def test_decrypt_oaep_sha2_vectors(self, vector, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None + label=None, ) ), - skip_message="Does not support OAEP." + skip_message="Does not support OAEP.", ) def test_invalid_oaep_decryption(self, backend): # More recent versions of OpenSSL may raise RSA_R_OAEP_DECODING_ERROR @@ -1592,12 +1589,12 @@ def test_invalid_oaep_decryption(self, backend): private_key = RSA_KEY_512.private_key(backend) ciphertext = private_key.public_key().encrypt( - b'secure data', + b"secure data", padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None - ) + label=None, + ), ) private_key_alt = RSA_KEY_512_ALT.private_key(backend) @@ -1608,8 +1605,8 @@ def test_invalid_oaep_decryption(self, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None - ) + label=None, + ), ) @pytest.mark.supported( @@ -1617,27 +1614,27 @@ def test_invalid_oaep_decryption(self, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None + label=None, ) ), - skip_message="Does not support OAEP." + skip_message="Does not support OAEP.", ) def test_invalid_oaep_decryption_data_to_large_for_modulus(self, backend): key = RSA_KEY_2048_ALT.private_key(backend) ciphertext = ( - b'\xb1ph\xc0\x0b\x1a|\xe6\xda\xea\xb5\xd7%\x94\x07\xf96\xfb\x96' - b'\x11\x9b\xdc4\xea.-\x91\x80\x13S\x94\x04m\xe9\xc5/F\x1b\x9b:\\' - b'\x1d\x04\x16ML\xae\xb32J\x01yuA\xbb\x83\x1c\x8f\xf6\xa5\xdbp\xcd' - b'\nx\xc7\xf6\x15\xb2/\xdcH\xae\xe7\x13\x13by\r4t\x99\x0fc\x1f\xc1' - b'\x1c\xb1\xdd\xc5\x08\xd1\xee\xa1XQ\xb8H@L5v\xc3\xaf\xf2\r\x97' - b'\xed\xaa\xe7\xf1\xd4xai\xd3\x83\xd9\xaa9\xbfx\xe1\x87F \x01\xff' - b'L\xccv}ae\xb3\xfa\xf2B\xb8\xf9\x04H\x94\x85\xcb\x86\xbb\\ghx!W31' - b'\xc7;t\na_E\xc2\x16\xb0;\xa1\x18\t\x1b\xe1\xdb\x80>)\x15\xc6\x12' - b'\xcb\xeeg`\x8b\x9b\x1b\x05y4\xb0\x84M6\xcd\xa1\x827o\xfd\x96\xba' - b'Z#\x8d\xae\x01\xc9\xf2\xb6\xde\x89{8&eQ\x1e8\x03\x01#?\xb66\\' - b'\xad.\xe9\xfa!\x95 c{\xcaz\xe0*\tP\r\x91\x9a)B\xb5\xadN\xf4$\x83' - b'\t\xb5u\xab\x19\x99' + b"\xb1ph\xc0\x0b\x1a|\xe6\xda\xea\xb5\xd7%\x94\x07\xf96\xfb\x96" + b"\x11\x9b\xdc4\xea.-\x91\x80\x13S\x94\x04m\xe9\xc5/F\x1b\x9b:\\" + b"\x1d\x04\x16ML\xae\xb32J\x01yuA\xbb\x83\x1c\x8f\xf6\xa5\xdbp\xcd" + b"\nx\xc7\xf6\x15\xb2/\xdcH\xae\xe7\x13\x13by\r4t\x99\x0fc\x1f\xc1" + b"\x1c\xb1\xdd\xc5\x08\xd1\xee\xa1XQ\xb8H@L5v\xc3\xaf\xf2\r\x97" + b"\xed\xaa\xe7\xf1\xd4xai\xd3\x83\xd9\xaa9\xbfx\xe1\x87F \x01\xff" + b"L\xccv}ae\xb3\xfa\xf2B\xb8\xf9\x04H\x94\x85\xcb\x86\xbb\\ghx!W31" + b"\xc7;t\na_E\xc2\x16\xb0;\xa1\x18\t\x1b\xe1\xdb\x80>)\x15\xc6\x12" + b"\xcb\xeeg`\x8b\x9b\x1b\x05y4\xb0\x84M6\xcd\xa1\x827o\xfd\x96\xba" + b"Z#\x8d\xae\x01\xc9\xf2\xb6\xde\x89{8&eQ\x1e8\x03\x01#?\xb66\\" + b"\xad.\xe9\xfa!\x95 c{\xcaz\xe0*\tP\r\x91\x9a)B\xb5\xadN\xf4$\x83" + b"\t\xb5u\xab\x19\x99" ) with pytest.raises(ValueError): @@ -1646,8 +1643,8 @@ def test_invalid_oaep_decryption_data_to_large_for_modulus(self, backend): padding.OAEP( algorithm=hashes.SHA1(), mgf=padding.MGF1(hashes.SHA1()), - label=None - ) + label=None, + ), ) def test_unsupported_oaep_mgf(self, backend): @@ -1656,10 +1653,8 @@ def test_unsupported_oaep_mgf(self, backend): private_key.decrypt( b"0" * 64, padding.OAEP( - mgf=DummyMGF(), - algorithm=hashes.SHA1(), - label=None - ) + mgf=DummyMGF(), algorithm=hashes.SHA1(), label=None + ), ) @@ -1670,25 +1665,34 @@ class TestRSAEncryption(object): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None + label=None, ) ), - skip_message="Does not support OAEP." + skip_message="Does not support OAEP.", ) @pytest.mark.parametrize( ("key_data", "pad"), itertools.product( - (RSA_KEY_1024, RSA_KEY_1025, RSA_KEY_1026, RSA_KEY_1027, - RSA_KEY_1028, RSA_KEY_1029, RSA_KEY_1030, RSA_KEY_1031, - RSA_KEY_1536, RSA_KEY_2048), + ( + RSA_KEY_1024, + RSA_KEY_1025, + RSA_KEY_1026, + RSA_KEY_1027, + RSA_KEY_1028, + RSA_KEY_1029, + RSA_KEY_1030, + RSA_KEY_1031, + RSA_KEY_1536, + RSA_KEY_2048, + ), [ padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None + label=None, ) - ] - ) + ], + ), ) def test_rsa_encrypt_oaep(self, key_data, pad, backend): private_key = key_data.private_key(backend) @@ -1705,32 +1709,37 @@ def test_rsa_encrypt_oaep(self, key_data, pad, backend): padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA512(), - label=None + label=None, ) ), - skip_message="Does not support OAEP using SHA256 MGF1 and SHA512 hash." + skip_message=( + "Does not support OAEP using SHA256 MGF1 and SHA512 hash." + ), ) @pytest.mark.parametrize( ("mgf1hash", "oaephash"), - itertools.product([ - hashes.SHA1(), - hashes.SHA224(), - hashes.SHA256(), - hashes.SHA384(), - hashes.SHA512(), - ], [ - hashes.SHA1(), - hashes.SHA224(), - hashes.SHA256(), - hashes.SHA384(), - hashes.SHA512(), - ]) + itertools.product( + [ + hashes.SHA1(), + hashes.SHA224(), + hashes.SHA256(), + hashes.SHA384(), + hashes.SHA512(), + ], + [ + hashes.SHA1(), + hashes.SHA224(), + hashes.SHA256(), + hashes.SHA384(), + hashes.SHA512(), + ], + ), ) def test_rsa_encrypt_oaep_sha2(self, mgf1hash, oaephash, backend): pad = padding.OAEP( mgf=padding.MGF1(algorithm=mgf1hash), algorithm=oaephash, - label=None + label=None, ) private_key = RSA_KEY_2048.private_key(backend) pt = b"encrypt me using sha2 hashes!" @@ -1745,16 +1754,25 @@ def test_rsa_encrypt_oaep_sha2(self, mgf1hash, oaephash, backend): only_if=lambda backend: backend.rsa_padding_supported( padding.PKCS1v15() ), - skip_message="Does not support PKCS1v1.5." + skip_message="Does not support PKCS1v1.5.", ) @pytest.mark.parametrize( ("key_data", "pad"), itertools.product( - (RSA_KEY_1024, RSA_KEY_1025, RSA_KEY_1026, RSA_KEY_1027, - RSA_KEY_1028, RSA_KEY_1029, RSA_KEY_1030, RSA_KEY_1031, - RSA_KEY_1536, RSA_KEY_2048), - [padding.PKCS1v15()] - ) + ( + RSA_KEY_1024, + RSA_KEY_1025, + RSA_KEY_1026, + RSA_KEY_1027, + RSA_KEY_1028, + RSA_KEY_1029, + RSA_KEY_1030, + RSA_KEY_1031, + RSA_KEY_1536, + RSA_KEY_2048, + ), + [padding.PKCS1v15()], + ), ) def test_rsa_encrypt_pkcs1v15(self, key_data, pad, backend): private_key = key_data.private_key(backend) @@ -1769,35 +1787,38 @@ def test_rsa_encrypt_pkcs1v15(self, key_data, pad, backend): @pytest.mark.parametrize( ("key_data", "pad"), itertools.product( - (RSA_KEY_1024, RSA_KEY_1025, RSA_KEY_1026, RSA_KEY_1027, - RSA_KEY_1028, RSA_KEY_1029, RSA_KEY_1030, RSA_KEY_1031, - RSA_KEY_1536, RSA_KEY_2048), + ( + RSA_KEY_1024, + RSA_KEY_1025, + RSA_KEY_1026, + RSA_KEY_1027, + RSA_KEY_1028, + RSA_KEY_1029, + RSA_KEY_1030, + RSA_KEY_1031, + RSA_KEY_1536, + RSA_KEY_2048, + ), ( padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), - label=None + label=None, ), - padding.PKCS1v15() - ) - ) + padding.PKCS1v15(), + ), + ), ) def test_rsa_encrypt_key_too_small(self, key_data, pad, backend): private_key = key_data.private_key(backend) public_key = private_key.public_key() # Slightly smaller than the key size but not enough for padding. with pytest.raises(ValueError): - public_key.encrypt( - b"\x00" * (private_key.key_size // 8 - 1), - pad - ) + public_key.encrypt(b"\x00" * (private_key.key_size // 8 - 1), pad) # Larger than the key size. with pytest.raises(ValueError): - public_key.encrypt( - b"\x00" * (private_key.key_size // 8 + 5), - pad - ) + public_key.encrypt(b"\x00" * (private_key.key_size // 8 + 5), pad) def test_unsupported_padding(self, backend): private_key = RSA_KEY_512.private_key(backend) @@ -1816,10 +1837,8 @@ def test_unsupported_oaep_mgf(self, backend): public_key.encrypt( b"ciphertext", padding.OAEP( - mgf=DummyMGF(), - algorithm=hashes.SHA1(), - label=None - ) + mgf=DummyMGF(), algorithm=hashes.SHA1(), label=None + ), ) @@ -1839,7 +1858,7 @@ def test_rsa_private_numbers(self): dmp1=1, dmq1=1, iqmp=2, - public_numbers=public_numbers + public_numbers=public_numbers, ) assert private_numbers.p == 3 @@ -1875,18 +1894,20 @@ def test_public_numbers_invalid_types(self): (3, 5, 1, 1, None, 2, rsa.RSAPublicNumbers(e=1, n=15)), (3, 5, 1, 1, 1, None, rsa.RSAPublicNumbers(e=1, n=15)), (3, 5, 1, 1, 1, 2, None), - ] + ], ) - def test_private_numbers_invalid_types(self, p, q, d, dmp1, dmq1, iqmp, - public_numbers): + def test_private_numbers_invalid_types( + self, p, q, d, dmp1, dmq1, iqmp, public_numbers + ): with pytest.raises(TypeError): rsa.RSAPrivateNumbers( - p=p, q=q, + p=p, + q=q, d=d, dmp1=dmp1, dmq1=dmq1, iqmp=iqmp, - public_numbers=public_numbers + public_numbers=public_numbers, ) @pytest.mark.parametrize( @@ -1896,7 +1917,7 @@ def test_private_numbers_invalid_types(self, p, q, d, dmp1, dmq1, iqmp, (1, 15), # public_exponent < 3 (17, 15), # public_exponent > modulus (14, 15), # public_exponent not odd - ] + ], ) def test_invalid_public_numbers_argument_values(self, e, n, backend): # Start with public_exponent=7, modulus=15. Then change one value at a @@ -1921,10 +1942,11 @@ def test_invalid_public_numbers_argument_values(self, e, n, backend): (3, 11, 3, 1, 3, 2, 6, 33), # public_exponent is not odd (3, 11, 3, 2, 3, 2, 7, 33), # dmp1 is not odd (3, 11, 3, 1, 4, 2, 7, 33), # dmq1 is not odd - ] + ], ) - def test_invalid_private_numbers_argument_values(self, p, q, d, dmp1, dmq1, - iqmp, e, n, backend): + def test_invalid_private_numbers_argument_values( + self, p, q, d, dmp1, dmq1, iqmp, e, n, backend + ): # Start with p=3, q=11, private_exponent=3, public_exponent=7, # modulus=33, dmp1=1, dmq1=3, iqmp=2. Then change one value at # a time to test the bounds. @@ -1937,10 +1959,7 @@ def test_invalid_private_numbers_argument_values(self, p, q, d, dmp1, dmq1, dmp1=dmp1, dmq1=dmq1, iqmp=iqmp, - public_numbers=rsa.RSAPublicNumbers( - e=e, - n=n - ) + public_numbers=rsa.RSAPublicNumbers(e=e, n=n), ).private_key(backend) def test_public_number_repr(self): @@ -2016,18 +2035,19 @@ def test_private_numbers_hash(self): class TestRSAPrimeFactorRecovery(object): @pytest.mark.parametrize( "vector", - _flatten_pkcs1_examples(load_vectors_from_file( - os.path.join( - "asymmetric", "RSA", "pkcs1v15crypt-vectors.txt"), - load_pkcs1_vectors - )) + _flatten_pkcs1_examples( + load_vectors_from_file( + os.path.join("asymmetric", "RSA", "pkcs1v15crypt-vectors.txt"), + load_pkcs1_vectors, + ) + ), ) def test_recover_prime_factors(self, vector): private, public, example = vector p, q = rsa.rsa_recover_prime_factors( private["modulus"], private["public_exponent"], - private["private_exponent"] + private["private_exponent"], ) # Unfortunately there is no convention on which prime should be p # and which one q. The function we use always makes p > q, but the @@ -2049,15 +2069,15 @@ class TestRSAPrivateKeySerialization(object): itertools.product( [ serialization.PrivateFormat.TraditionalOpenSSL, - serialization.PrivateFormat.PKCS8 + serialization.PrivateFormat.PKCS8, ], [ b"s", b"longerpassword", b"!*$&(@#$*&($T@%_somesymbols", b"\x01" * 1000, - ] - ) + ], + ), ) def test_private_bytes_encrypted_pem(self, backend, fmt, password): skip_fips_traditional_openssl(backend, fmt) @@ -2065,7 +2085,7 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): serialized = key.private_bytes( serialization.Encoding.PEM, fmt, - serialization.BestAvailableEncryption(password) + serialization.BestAvailableEncryption(password), ) loaded_key = serialization.load_pem_private_key( serialized, password, backend @@ -2081,7 +2101,7 @@ def test_private_bytes_encrypted_pem(self, backend, fmt, password): (serialization.Encoding.DER, serialization.PrivateFormat.Raw), (serialization.Encoding.Raw, serialization.PrivateFormat.Raw), (serialization.Encoding.X962, serialization.PrivateFormat.PKCS8), - ] + ], ) def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): key = RSA_KEY_2048.private_key(backend) @@ -2094,15 +2114,15 @@ def test_private_bytes_rejects_invalid(self, encoding, fmt, backend): [serialization.PrivateFormat.PKCS8, b"s"], [serialization.PrivateFormat.PKCS8, b"longerpassword"], [serialization.PrivateFormat.PKCS8, b"!*$&(@#$*&($T@%_somesymbol"], - [serialization.PrivateFormat.PKCS8, b"\x01" * 1000] - ] + [serialization.PrivateFormat.PKCS8, b"\x01" * 1000], + ], ) def test_private_bytes_encrypted_der(self, backend, fmt, password): key = RSA_KEY_2048.private_key(backend) serialized = key.private_bytes( serialization.Encoding.DER, fmt, - serialization.BestAvailableEncryption(password) + serialization.BestAvailableEncryption(password), ) loaded_key = serialization.load_der_private_key( serialized, password, backend @@ -2117,27 +2137,28 @@ def test_private_bytes_encrypted_der(self, backend, fmt, password): [ serialization.Encoding.PEM, serialization.PrivateFormat.TraditionalOpenSSL, - serialization.load_pem_private_key + serialization.load_pem_private_key, ], [ serialization.Encoding.DER, serialization.PrivateFormat.TraditionalOpenSSL, - serialization.load_der_private_key + serialization.load_der_private_key, ], [ serialization.Encoding.PEM, serialization.PrivateFormat.PKCS8, - serialization.load_pem_private_key + serialization.load_pem_private_key, ], [ serialization.Encoding.DER, serialization.PrivateFormat.PKCS8, - serialization.load_der_private_key + serialization.load_der_private_key, ], - ] + ], ) - def test_private_bytes_unencrypted(self, backend, encoding, fmt, - loader_func): + def test_private_bytes_unencrypted( + self, backend, encoding, fmt, loader_func + ): key = RSA_KEY_2048.private_key(backend) serialized = key.private_bytes( encoding, fmt, serialization.NoEncryption() @@ -2157,17 +2178,17 @@ def test_private_bytes_unencrypted(self, backend, encoding, fmt, os.path.join( "asymmetric", "Traditional_OpenSSL_Serialization", - "testrsa.pem" + "testrsa.pem", ), serialization.Encoding.PEM, - serialization.load_pem_private_key + serialization.load_pem_private_key, ], [ os.path.join("asymmetric", "DER_Serialization", "testrsa.der"), serialization.Encoding.DER, - serialization.load_der_private_key + serialization.load_der_private_key, ], - ] + ], ) def test_private_bytes_traditional_openssl_unencrypted( self, backend, key_path, encoding, loader_func @@ -2179,7 +2200,7 @@ def test_private_bytes_traditional_openssl_unencrypted( serialized = key.private_bytes( encoding, serialization.PrivateFormat.TraditionalOpenSSL, - serialization.NoEncryption() + serialization.NoEncryption(), ) assert serialized == key_bytes @@ -2189,7 +2210,7 @@ def test_private_bytes_traditional_der_encrypted_invalid(self, backend): key.private_bytes( serialization.Encoding.DER, serialization.PrivateFormat.TraditionalOpenSSL, - serialization.BestAvailableEncryption(b"password") + serialization.BestAvailableEncryption(b"password"), ) def test_private_bytes_invalid_encoding(self, backend): @@ -2198,7 +2219,7 @@ def test_private_bytes_invalid_encoding(self, backend): key.private_bytes( "notencoding", serialization.PrivateFormat.PKCS8, - serialization.NoEncryption() + serialization.NoEncryption(), ) def test_private_bytes_invalid_format(self, backend): @@ -2207,7 +2228,7 @@ def test_private_bytes_invalid_format(self, backend): key.private_bytes( serialization.Encoding.PEM, "invalidformat", - serialization.NoEncryption() + serialization.NoEncryption(), ) def test_private_bytes_invalid_encryption_algorithm(self, backend): @@ -2216,7 +2237,7 @@ def test_private_bytes_invalid_encryption_algorithm(self, backend): key.private_bytes( serialization.Encoding.PEM, serialization.PrivateFormat.TraditionalOpenSSL, - "notanencalg" + "notanencalg", ) def test_private_bytes_unsupported_encryption_type(self, backend): @@ -2225,7 +2246,7 @@ def test_private_bytes_unsupported_encryption_type(self, backend): key.private_bytes( serialization.Encoding.PEM, serialization.PrivateFormat.TraditionalOpenSSL, - DummyKeySerializationEncryption() + DummyKeySerializationEncryption(), ) @@ -2240,30 +2261,34 @@ class TestRSAPEMPublicKeySerialization(object): serialization.load_pem_public_key, serialization.Encoding.PEM, serialization.PublicFormat.PKCS1, - ), ( + ), + ( os.path.join("asymmetric", "public", "PKCS1", "rsa.pub.der"), serialization.load_der_public_key, serialization.Encoding.DER, serialization.PublicFormat.PKCS1, - ), ( + ), + ( os.path.join("asymmetric", "PKCS8", "unenc-rsa-pkcs8.pub.pem"), serialization.load_pem_public_key, serialization.Encoding.PEM, serialization.PublicFormat.SubjectPublicKeyInfo, - ), ( + ), + ( os.path.join( "asymmetric", "DER_Serialization", - "unenc-rsa-pkcs8.pub.der" + "unenc-rsa-pkcs8.pub.der", ), serialization.load_der_public_key, serialization.Encoding.DER, serialization.PublicFormat.SubjectPublicKeyInfo, - ) - ] + ), + ], ) - def test_public_bytes_match(self, key_path, loader_func, encoding, format, - backend): + def test_public_bytes_match( + self, key_path, loader_func, encoding, format, backend + ): key_bytes = load_vectors_from_file( key_path, lambda pemfile: pemfile.read(), mode="rb" ) @@ -2274,7 +2299,8 @@ def test_public_bytes_match(self, key_path, loader_func, encoding, format, def test_public_bytes_openssh(self, backend): key_bytes = load_vectors_from_file( os.path.join("asymmetric", "public", "PKCS1", "rsa.pub.pem"), - lambda pemfile: pemfile.read(), mode="rb" + lambda pemfile: pemfile.read(), + mode="rb", ) key = serialization.load_pem_public_key(key_bytes, backend) @@ -2322,22 +2348,25 @@ def test_public_bytes_invalid_format(self, backend): [ ( serialization.Encoding.Raw, - serialization.PublicFormat.SubjectPublicKeyInfo + serialization.PublicFormat.SubjectPublicKeyInfo, ), (serialization.Encoding.Raw, serialization.PublicFormat.PKCS1), - ] + list(itertools.product( - [ - serialization.Encoding.Raw, - serialization.Encoding.X962, - serialization.Encoding.PEM, - serialization.Encoding.DER - ], - [ - serialization.PublicFormat.Raw, - serialization.PublicFormat.UncompressedPoint, - serialization.PublicFormat.CompressedPoint - ] - )) + ] + + list( + itertools.product( + [ + serialization.Encoding.Raw, + serialization.Encoding.X962, + serialization.Encoding.PEM, + serialization.Encoding.DER, + ], + [ + serialization.PublicFormat.Raw, + serialization.PublicFormat.UncompressedPoint, + serialization.PublicFormat.CompressedPoint, + ], + ) + ), ) def test_public_bytes_rejects_invalid(self, encoding, fmt, backend): key = RSA_KEY_2048.private_key(backend).public_key() diff --git a/tests/hazmat/primitives/test_scrypt.py b/tests/hazmat/primitives/test_scrypt.py index 8f3a14edc569..52e7e153802a 100644 --- a/tests/hazmat/primitives/test_scrypt.py +++ b/tests/hazmat/primitives/test_scrypt.py @@ -10,7 +10,9 @@ import pytest from cryptography.exceptions import ( - AlreadyFinalized, InvalidKey, UnsupportedAlgorithm + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, ) from cryptography.hazmat.backends.interfaces import ScryptBackend from cryptography.hazmat.primitives.kdf.scrypt import Scrypt, _MEM_LIMIT @@ -18,7 +20,8 @@ from tests.utils import load_nist_vectors, load_vectors_from_file vectors = load_vectors_from_file( - os.path.join("KDF", "scrypt.txt"), load_nist_vectors) + os.path.join("KDF", "scrypt.txt"), load_nist_vectors +) def _skip_if_memory_limited(memory_limit, params): @@ -29,8 +32,10 @@ def _skip_if_memory_limited(memory_limit, params): vlen = 32 * int(params["r"]) * (int(params["n"]) + 2) * 4 memory_required = blen + vlen if memory_limit < memory_required: - pytest.skip("Test exceeds Scrypt memory limit. " - "This is likely a 32-bit platform.") + pytest.skip( + "Test exceeds Scrypt memory limit. " + "This is likely a 32-bit platform." + ) def test_memory_limit_skip(): @@ -53,8 +58,14 @@ def test_derive(self, backend, params): salt = params["salt"] derived_key = params["derived_key"] - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) assert binascii.hexlify(scrypt.derive(password)) == derived_key def test_unsupported_backend(self): @@ -66,8 +77,14 @@ def test_unsupported_backend(self): backend = object() with pytest.raises(UnsupportedAlgorithm): - Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) def test_salt_not_bytes(self, backend): work_factor = 1024 @@ -77,8 +94,14 @@ def test_salt_not_bytes(self, backend): salt = 1 with pytest.raises(TypeError): - Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) def test_scrypt_malloc_failure(self, backend): password = b"NaCl" @@ -88,8 +111,14 @@ def test_scrypt_malloc_failure(self, backend): length = 64 salt = b"NaCl" - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) with pytest.raises(MemoryError): scrypt.derive(password) @@ -102,8 +131,14 @@ def test_password_not_bytes(self, backend): length = 64 salt = b"NaCl" - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) with pytest.raises(TypeError): scrypt.derive(password) @@ -116,10 +151,16 @@ def test_buffer_protocol(self, backend): length = 10 salt = b"NaCl" - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) - assert scrypt.derive(password) == b'\xf4\x92\x86\xb2\x06\x0c\x848W\x87' + assert scrypt.derive(password) == b"\xf4\x92\x86\xb2\x06\x0c\x848W\x87" @pytest.mark.parametrize("params", vectors) def test_verify(self, backend, params): @@ -132,8 +173,14 @@ def test_verify(self, backend, params): salt = params["salt"] derived_key = params["derived_key"] - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) assert scrypt.verify(password, binascii.unhexlify(derived_key)) is None def test_invalid_verify(self, backend): @@ -145,8 +192,14 @@ def test_invalid_verify(self, backend): salt = b"NaCl" derived_key = b"fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e773" - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) with pytest.raises(InvalidKey): scrypt.verify(password, binascii.unhexlify(derived_key)) @@ -159,8 +212,14 @@ def test_already_finalized(self, backend): length = 64 salt = b"NaCl" - scrypt = Scrypt(salt, length, work_factor, block_size, - parallelization_factor, backend) + scrypt = Scrypt( + salt, + length, + work_factor, + block_size, + parallelization_factor, + backend, + ) scrypt.derive(password) with pytest.raises(AlreadyFinalized): scrypt.derive(password) diff --git a/tests/hazmat/primitives/test_seed.py b/tests/hazmat/primitives/test_seed.py index 2d03d774948a..66da97836a0a 100644 --- a/tests/hazmat/primitives/test_seed.py +++ b/tests/hazmat/primitives/test_seed.py @@ -46,7 +46,7 @@ class TestSEEDModeCBC(object): os.path.join("ciphers", "SEED"), ["rfc-4196.txt"], lambda key, **kwargs: algorithms.SEED(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.CBC(binascii.unhexlify(iv)), ) @@ -63,7 +63,7 @@ class TestSEEDModeOFB(object): os.path.join("ciphers", "SEED"), ["seed-ofb.txt"], lambda key, **kwargs: algorithms.SEED(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.OFB(binascii.unhexlify(iv)), ) @@ -80,5 +80,5 @@ class TestSEEDModeCFB(object): os.path.join("ciphers", "SEED"), ["seed-cfb.txt"], lambda key, **kwargs: algorithms.SEED(binascii.unhexlify((key))), - lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)) + lambda iv, **kwargs: modes.CFB(binascii.unhexlify(iv)), ) diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 44f5cec6a507..46694c64852c 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -15,26 +15,44 @@ from cryptography.exceptions import UnsupportedAlgorithm, _Reasons from cryptography.hazmat.backends.interfaces import ( - DERSerializationBackend, DSABackend, EllipticCurveBackend, - PEMSerializationBackend, RSABackend + DERSerializationBackend, + DSABackend, + EllipticCurveBackend, + PEMSerializationBackend, + RSABackend, ) from cryptography.hazmat.primitives.asymmetric import ( - dsa, ec, ed25519, ed448, rsa, x25519, x448 + dsa, + ec, + ed25519, + ed448, + rsa, + x25519, + x448, ) from cryptography.hazmat.primitives.serialization import ( - BestAvailableEncryption, Encoding, NoEncryption, - PrivateFormat, PublicFormat, - load_der_parameters, load_der_private_key, - load_der_public_key, load_pem_parameters, load_pem_private_key, + BestAvailableEncryption, + Encoding, + NoEncryption, + PrivateFormat, + PublicFormat, + load_der_parameters, + load_der_private_key, + load_der_public_key, + load_pem_parameters, + load_pem_private_key, load_pem_public_key, - load_ssh_private_key, load_ssh_public_key, ssh, + load_ssh_private_key, + load_ssh_public_key, + ssh, ) from .test_ec import _skip_curve_unsupported from .utils import ( - _check_dsa_private_numbers, _check_rsa_private_numbers, - load_vectors_from_file + _check_dsa_private_numbers, + _check_rsa_private_numbers, + load_vectors_from_file, ) from ...doubles import DummyKeySerializationEncryption from ...utils import raises_unsupported_algorithm @@ -57,12 +75,13 @@ class TestBufferProtocolSerialization(object): (["DER_Serialization", "enc2-rsa-pkcs8.der"], bytearray(b"baz")), (["DER_Serialization", "unenc-rsa-pkcs8.der"], None), (["DER_Serialization", "testrsa.der"], None), - ] + ], ) def test_load_der_rsa_private_key(self, key_path, password, backend): data = load_vectors_from_file( os.path.join("asymmetric", *key_path), - lambda derfile: derfile.read(), mode="rb" + lambda derfile: derfile.read(), + mode="rb", ) key = load_der_private_key(bytearray(data), password, backend) assert key @@ -75,22 +94,23 @@ def test_load_der_rsa_private_key(self, key_path, password, backend): [ ( ["PEM_Serialization", "rsa_private_key.pem"], - bytearray(b"123456") + bytearray(b"123456"), ), (["PKCS8", "unenc-rsa-pkcs8.pem"], None), (["PKCS8", "enc-rsa-pkcs8.pem"], bytearray(b"foobar")), (["PKCS8", "enc2-rsa-pkcs8.pem"], bytearray(b"baz")), ( ["Traditional_OpenSSL_Serialization", "key1.pem"], - bytearray(b"123456") + bytearray(b"123456"), ), - ] + ], ) def test_load_pem_rsa_private_key(self, key_path, password, backend): _skip_fips_format(key_path, password, backend) data = load_vectors_from_file( os.path.join("asymmetric", *key_path), - lambda pemfile: pemfile.read(), mode="rb" + lambda pemfile: pemfile.read(), + mode="rb", ) key = load_pem_private_key(bytearray(data), password, backend) assert key @@ -108,7 +128,7 @@ class TestDERSerialization(object): (["DER_Serialization", "enc2-rsa-pkcs8.der"], b"baz"), (["DER_Serialization", "unenc-rsa-pkcs8.der"], None), (["DER_Serialization", "testrsa.der"], None), - ] + ], ) def test_load_der_rsa_private_key(self, key_path, password, backend): key = load_vectors_from_file( @@ -116,7 +136,7 @@ def test_load_der_rsa_private_key(self, key_path, password, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) assert key assert isinstance(key, rsa.RSAPrivateKey) @@ -130,7 +150,7 @@ def test_load_der_rsa_private_key(self, key_path, password, backend): (["DER_Serialization", "dsa.1024.der"], None), (["DER_Serialization", "dsa.2048.der"], None), (["DER_Serialization", "dsa.3072.der"], None), - ] + ], ) def test_load_der_dsa_private_key(self, key_path, password, backend): key = load_vectors_from_file( @@ -138,17 +158,14 @@ def test_load_der_dsa_private_key(self, key_path, password, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) assert key assert isinstance(key, dsa.DSAPrivateKey) _check_dsa_private_numbers(key.private_numbers()) @pytest.mark.parametrize( - "key_path", - [ - ["DER_Serialization", "enc-rsa-pkcs8.der"], - ] + "key_path", [["DER_Serialization", "enc-rsa-pkcs8.der"]] ) @pytest.mark.requires_backend_interface(interface=RSABackend) def test_password_not_bytes(self, key_path, backend): @@ -161,7 +178,7 @@ def test_password_not_bytes(self, key_path, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) @pytest.mark.parametrize( @@ -169,7 +186,7 @@ def test_password_not_bytes(self, key_path, backend): [ (["DER_Serialization", "ec_private_key.der"], None), (["DER_Serialization", "ec_private_key_encrypted.der"], b"123456"), - ] + ], ) @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) def test_load_der_ec_private_key(self, key_path, password, backend): @@ -179,7 +196,7 @@ def test_load_der_ec_private_key(self, key_path, password, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) assert key @@ -188,10 +205,7 @@ def test_load_der_ec_private_key(self, key_path, password, backend): assert key.curve.key_size == 256 @pytest.mark.parametrize( - "key_path", - [ - ["DER_Serialization", "enc-rsa-pkcs8.der"], - ] + "key_path", [["DER_Serialization", "enc-rsa-pkcs8.der"]] ) @pytest.mark.requires_backend_interface(interface=RSABackend) def test_wrong_password(self, key_path, backend): @@ -204,14 +218,11 @@ def test_wrong_password(self, key_path, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) @pytest.mark.parametrize( - "key_path", - [ - ["DER_Serialization", "unenc-rsa-pkcs8.der"] - ] + "key_path", [["DER_Serialization", "unenc-rsa-pkcs8.der"]] ) @pytest.mark.requires_backend_interface(interface=RSABackend) def test_unused_password(self, key_path, backend): @@ -224,17 +235,14 @@ def test_unused_password(self, key_path, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) @pytest.mark.parametrize( ("key_path", "password"), itertools.product( - [ - ["DER_Serialization", "enc-rsa-pkcs8.der"], - ], - [b"", None] - ) + [["DER_Serialization", "enc-rsa-pkcs8.der"]], [b"", None] + ), ) @pytest.mark.requires_backend_interface(interface=RSABackend) def test_missing_password(self, key_path, password, backend): @@ -246,16 +254,14 @@ def test_missing_password(self, key_path, password, backend): lambda derfile: load_der_private_key( derfile.read(), password, backend ), - mode="rb" + mode="rb", ) def test_wrong_format(self, backend): key_data = b"---- NOT A KEY ----\n" with pytest.raises(ValueError): - load_der_private_key( - key_data, None, backend - ) + load_der_private_key(key_data, None, backend) with pytest.raises(ValueError): load_der_private_key( @@ -264,7 +270,8 @@ def test_wrong_format(self, backend): def test_corrupt_der_pkcs8(self, backend): # unenc-rsa-pkcs8 with a bunch of data missing. - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ MIICdQIBADALBgkqhkiG9w0BAQEEggJhMIICXQIBAAKBgQC7JHoJfg6yNzLMOWet 8Z49a4KD0dCspMAYvo2YAMB7/wdEycocujbhJ2n/seONi+5XqTqqFkM5VBl8rmkk FPZk/7x0xmdsTPECSWnHK+HhoaNDFPR3j8jQhVo1laxiqcEhAHegi5cwtFosuJAv @@ -278,13 +285,12 @@ def test_corrupt_der_pkcs8(self, backend): z+KOpdpPRR5TQmbEMEspjsFpFymMiuYPgmihQbO2cJl1qScY5OkCQQCJ6m5tcN8l Xxg/SNpjEIv+qAyUD96XVlOJlOIeLHQ8kYE0C6ZA+MsqYIzgAreJk88Yn0lU/X0/ mu/UpE/BRZmR - """).encode() + """ + ).encode() bad_der = base64.b64decode(b"".join(key_data.splitlines())) with pytest.raises(ValueError): - load_der_private_key( - bad_der, None, backend - ) + load_der_private_key(bad_der, None, backend) with pytest.raises(ValueError): load_der_private_key( @@ -293,14 +299,16 @@ def test_corrupt_der_pkcs8(self, backend): def test_corrupt_traditional_format_der(self, backend): # privkey with a bunch of data missing. - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ MIIBPAIBAAJBAKrbeqkuRk8VcRmWFmtP+LviMB3+6dizWW3DwaffznyHGAFwUJ/I Tv0XtbsCyl3QoyKGhrOAy3RvPK5M38iuXT0CAwEAAQJAZ3cnzaHXM/bxGaR5CR1R rD1qFBAVfoQFiOH9uPJgMaoAuoQEisPHVcZDKcOv4wEg6/TInAIXBnEigtqvRzuy mvcpHZwQJdmdHHkGKAs37Dfxi67HbkUCIQCeZGliHXFa071Fp06ZeWlR2ADonTZz rJBhdTe0v5pCeQIhAIZfkiGgGBX4cIuuckzEm43g9WMUjxP/0GlK39vIyihxAiEA mymehFRT0MvqW5xAKAx7Pgkt8HVKwVhc2LwGKHE0DZM= - """).encode() + """ + ).encode() bad_der = base64.b64decode(b"".join(key_data.splitlines())) with pytest.raises(ValueError): @@ -315,20 +323,20 @@ def test_corrupt_traditional_format_der(self, backend): "key_file", [ os.path.join( - "asymmetric", "DER_Serialization", "unenc-rsa-pkcs8.pub.der"), + "asymmetric", "DER_Serialization", "unenc-rsa-pkcs8.pub.der" + ), os.path.join( - "asymmetric", "DER_Serialization", "rsa_public_key.der"), + "asymmetric", "DER_Serialization", "rsa_public_key.der" + ), os.path.join("asymmetric", "public", "PKCS1", "rsa.pub.der"), - ] + ], ) @pytest.mark.requires_backend_interface(interface=RSABackend) def test_load_der_rsa_public_key(self, key_file, backend): key = load_vectors_from_file( key_file, - lambda derfile: load_der_public_key( - derfile.read(), backend - ), - mode="rb" + lambda derfile: load_der_public_key(derfile.read(), backend), + mode="rb", ) assert key assert isinstance(key, rsa.RSAPublicKey) @@ -343,19 +351,19 @@ def test_load_der_invalid_public_key(self, backend): "key_file", [ os.path.join( - "asymmetric", "DER_Serialization", "unenc-dsa-pkcs8.pub.der"), + "asymmetric", "DER_Serialization", "unenc-dsa-pkcs8.pub.der" + ), os.path.join( - "asymmetric", "DER_Serialization", "dsa_public_key.der"), - ] + "asymmetric", "DER_Serialization", "dsa_public_key.der" + ), + ], ) @pytest.mark.requires_backend_interface(interface=DSABackend) def test_load_der_dsa_public_key(self, key_file, backend): key = load_vectors_from_file( key_file, - lambda derfile: load_der_public_key( - derfile.read(), backend - ), - mode="rb" + lambda derfile: load_der_public_key(derfile.read(), backend), + mode="rb", ) assert key assert isinstance(key, dsa.DSAPublicKey) @@ -365,12 +373,10 @@ def test_load_ec_public_key(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) key = load_vectors_from_file( os.path.join( - "asymmetric", "DER_Serialization", - "ec_public_key.der"), - lambda derfile: load_der_public_key( - derfile.read(), backend + "asymmetric", "DER_Serialization", "ec_public_key.der" ), - mode="rb" + lambda derfile: load_der_public_key(derfile.read(), backend), + mode="rb", ) assert key assert isinstance(key, ec.EllipticCurvePublicKey) @@ -381,9 +387,7 @@ def test_wrong_parameters_format(self, backend): param_data = b"---- NOT A KEY ----\n" with pytest.raises(ValueError): - load_der_parameters( - param_data, backend - ) + load_der_parameters(param_data, backend) @pytest.mark.requires_backend_interface(interface=PEMSerializationBackend) @@ -408,9 +412,11 @@ class TestPEMSerialization(object): (["Traditional_OpenSSL_Serialization", "key1.pem"], b"123456"), (["Traditional_OpenSSL_Serialization", "key2.pem"], b"a123456"), (["Traditional_OpenSSL_Serialization", "testrsa.pem"], None), - (["Traditional_OpenSSL_Serialization", "testrsa-encrypted.pem"], - b"password"), - ] + ( + ["Traditional_OpenSSL_Serialization", "testrsa-encrypted.pem"], + b"password", + ), + ], ) def test_load_pem_rsa_private_key(self, key_file, password, backend): _skip_fips_format(key_file, password, backend) @@ -418,7 +424,7 @@ def test_load_pem_rsa_private_key(self, key_file, password, backend): os.path.join("asymmetric", *key_file), lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) assert key @@ -433,7 +439,7 @@ def test_load_pem_rsa_private_key(self, key_file, password, backend): (["Traditional_OpenSSL_Serialization", "dsa.3072.pem"], None), (["PKCS8", "unenc-dsa-pkcs8.pem"], None), (["PEM_Serialization", "dsa_private_key.pem"], b"123456"), - ] + ], ) def test_load_dsa_private_key(self, key_path, password, backend): _skip_fips_format(key_path, password, backend) @@ -441,7 +447,7 @@ def test_load_dsa_private_key(self, key_path, password, backend): os.path.join("asymmetric", *key_path), lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) assert key assert isinstance(key, dsa.DSAPrivateKey) @@ -454,7 +460,7 @@ def test_load_dsa_private_key(self, key_path, password, backend): (["PKCS8", "ec_private_key_encrypted.pem"], b"123456"), (["PEM_Serialization", "ec_private_key.pem"], None), (["PEM_Serialization", "ec_private_key_encrypted.pem"], b"123456"), - ] + ], ) @pytest.mark.requires_backend_interface(interface=EllipticCurveBackend) def test_load_pem_ec_private_key(self, key_path, password, backend): @@ -464,7 +470,7 @@ def test_load_pem_ec_private_key(self, key_path, password, backend): os.path.join("asymmetric", *key_path), lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) assert key @@ -477,16 +483,17 @@ def test_load_pem_ec_private_key(self, key_path, password, backend): [ os.path.join("asymmetric", "PKCS8", "unenc-rsa-pkcs8.pub.pem"), os.path.join( - "asymmetric", "PEM_Serialization", "rsa_public_key.pem"), + "asymmetric", "PEM_Serialization", "rsa_public_key.pem" + ), os.path.join("asymmetric", "public", "PKCS1", "rsa.pub.pem"), - ] + ], ) def test_load_pem_rsa_public_key(self, key_file, backend): key = load_vectors_from_file( key_file, lambda pemfile: load_pem_public_key( pemfile.read().encode(), backend - ) + ), ) assert key assert isinstance(key, rsa.RSAPublicKey) @@ -498,16 +505,16 @@ def test_load_pem_rsa_public_key(self, key_file, backend): [ os.path.join("asymmetric", "PKCS8", "unenc-dsa-pkcs8.pub.pem"), os.path.join( - "asymmetric", "PEM_Serialization", - "dsa_public_key.pem"), - ] + "asymmetric", "PEM_Serialization", "dsa_public_key.pem" + ), + ], ) def test_load_pem_dsa_public_key(self, key_file, backend): key = load_vectors_from_file( key_file, lambda pemfile: load_pem_public_key( pemfile.read().encode(), backend - ) + ), ) assert key assert isinstance(key, dsa.DSAPublicKey) @@ -517,11 +524,11 @@ def test_load_ec_public_key(self, backend): _skip_curve_unsupported(backend, ec.SECP256R1()) key = load_vectors_from_file( os.path.join( - "asymmetric", "PEM_Serialization", - "ec_public_key.pem"), + "asymmetric", "PEM_Serialization", "ec_public_key.pem" + ), lambda pemfile: load_pem_public_key( pemfile.read().encode(), backend - ) + ), ) assert key assert isinstance(key, ec.EllipticCurvePublicKey) @@ -534,52 +541,53 @@ def test_load_ec_public_key(self, backend): def test_rsa_traditional_encrypted_values(self, backend): pkey = load_vectors_from_file( os.path.join( - "asymmetric", "Traditional_OpenSSL_Serialization", "key1.pem"), + "asymmetric", "Traditional_OpenSSL_Serialization", "key1.pem" + ), lambda pemfile: load_pem_private_key( pemfile.read().encode(), b"123456", backend - ) + ), ) assert pkey numbers = pkey.private_numbers() assert numbers.p == int( "fb7d316fc51531b36d93adaefaf52db6ad5beb793d37c4cf9dfc1ddd17cfbafb", - 16 + 16, ) assert numbers.q == int( "df98264e646de9a0fbeab094e31caad5bc7adceaaae3c800ca0275dd4bb307f5", - 16 + 16, ) assert numbers.d == int( "db4848c36f478dd5d38f35ae519643b6b810d404bcb76c00e44015e56ca1cab0" "7bb7ae91f6b4b43fcfc82a47d7ed55b8c575152116994c2ce5325ec24313b911", - 16 + 16, ) assert numbers.dmp1 == int( "ce997f967192c2bcc3853186f1559fd355c190c58ddc15cbf5de9b6df954c727", - 16 + 16, ) assert numbers.dmq1 == int( "b018a57ab20ffaa3862435445d863369b852cf70a67c55058213e3fe10e3848d", - 16 + 16, ) assert numbers.iqmp == int( "6a8d830616924f5cf2d1bc1973f97fde6b63e052222ac7be06aa2532d10bac76", - 16 + 16, ) assert numbers.public_numbers.e == 65537 assert numbers.public_numbers.n == int( "dba786074f2f0350ce1d99f5aed5b520cfe0deb5429ec8f2a88563763f566e77" "9814b7c310e5326edae31198eed439b845dd2db99eaa60f5c16a43f4be6bcf37", - 16 + 16, ) @pytest.mark.parametrize( "key_path", [ ["Traditional_OpenSSL_Serialization", "testrsa.pem"], - ["PKCS8", "unenc-rsa-pkcs8.pem"] - ] + ["PKCS8", "unenc-rsa-pkcs8.pem"], + ], ) def test_unused_password(self, key_path, backend): key_file = os.path.join("asymmetric", *key_path) @@ -590,7 +598,7 @@ def test_unused_password(self, key_path, backend): key_file, lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) def test_invalid_encoding_with_traditional(self, backend): @@ -602,7 +610,7 @@ def test_invalid_encoding_with_traditional(self, backend): lambda pemfile: load_pem_private_key( pemfile.read(), None, backend ), - mode="rb" + mode="rb", ) for enc in (Encoding.OpenSSH, Encoding.Raw, Encoding.X962): @@ -615,8 +623,8 @@ def test_invalid_encoding_with_traditional(self, backend): "key_path", [ ["Traditional_OpenSSL_Serialization", "testrsa-encrypted.pem"], - ["PKCS8", "enc-rsa-pkcs8.pem"] - ] + ["PKCS8", "enc-rsa-pkcs8.pem"], + ], ) def test_password_not_bytes(self, key_path, backend): key_file = os.path.join("asymmetric", *key_path) @@ -627,15 +635,15 @@ def test_password_not_bytes(self, key_path, backend): key_file, lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) @pytest.mark.parametrize( "key_path", [ ["Traditional_OpenSSL_Serialization", "testrsa-encrypted.pem"], - ["PKCS8", "enc-rsa-pkcs8.pem"] - ] + ["PKCS8", "enc-rsa-pkcs8.pem"], + ], ) def test_wrong_password(self, key_path, backend): key_file = os.path.join("asymmetric", *key_path) @@ -646,19 +654,18 @@ def test_wrong_password(self, key_path, backend): key_file, lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) @pytest.mark.parametrize( ("key_path", "password"), itertools.product( [ - ["Traditional_OpenSSL_Serialization", - "testrsa-encrypted.pem"], + ["Traditional_OpenSSL_Serialization", "testrsa-encrypted.pem"], ["PKCS8", "enc-rsa-pkcs8.pem"], ], - [b"", None] - ) + [b"", None], + ), ) def test_missing_password(self, key_path, password, backend): key_file = os.path.join("asymmetric", *key_path) @@ -668,16 +675,14 @@ def test_missing_password(self, key_path, password, backend): key_file, lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) def test_wrong_private_format(self, backend): key_data = b"---- NOT A KEY ----\n" with pytest.raises(ValueError): - load_pem_private_key( - key_data, None, backend - ) + load_pem_private_key(key_data, None, backend) with pytest.raises(ValueError): load_pem_private_key( @@ -698,7 +703,8 @@ def test_wrong_parameters_format(self, backend): def test_corrupt_traditional_format(self, backend): # privkey.pem with a bunch of data missing. - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ -----BEGIN RSA PRIVATE KEY----- MIIBPAIBAAJBAKrbeqkuRk8VcRmWFmtP+LviMB3+6dizWW3DwaffznyHGAFwUJ/I Tv0XtbsCyl3QoyKGhrOAy3RvPK5M38iuXT0CAwEAAQJAZ3cnzaHXM/bxGaR5CR1R @@ -707,12 +713,11 @@ def test_corrupt_traditional_format(self, backend): rJBhdTe0v5pCeQIhAIZfkiGgGBX4cIuuckzEm43g9WMUjxP/0GlK39vIyihxAiEA mymehFRT0MvqW5xAKAx7Pgkt8HVKwVhc2LwGKHE0DZM= -----END RSA PRIVATE KEY----- - """).encode() + """ + ).encode() with pytest.raises(ValueError): - load_pem_private_key( - key_data, None, backend - ) + load_pem_private_key(key_data, None, backend) with pytest.raises(ValueError): load_pem_private_key( @@ -721,7 +726,8 @@ def test_corrupt_traditional_format(self, backend): def test_traditional_encrypted_corrupt_format(self, backend): # privkey.pem with a single bit flipped - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ -----BEGIN RSA PRIVATE KEY----- Proc-Type: <,ENCRYPTED DEK-Info: AES-128-CBC,5E22A2BD85A653FB7A3ED20DE84F54CD @@ -734,22 +740,20 @@ def test_traditional_encrypted_corrupt_format(self, backend): 5A295jD9BQp9CY0nNFSsy+qiXWToq2xT3y5zVNEStmN0SCGNaIlUnJzL9IHW+oMI kPmXZMnAYBWeeCF1gf3J3aE5lZInegHNfEI0+J0LazC2aNU5Dg/BNqrmRqKWEIo/ -----END RSA PRIVATE KEY----- - """).encode() + """ + ).encode() password = b"this password is wrong" with pytest.raises(ValueError): - load_pem_private_key( - key_data, None, backend - ) + load_pem_private_key(key_data, None, backend) with pytest.raises(ValueError): - load_pem_private_key( - key_data, password, backend - ) + load_pem_private_key(key_data, password, backend) def test_unsupported_key_encryption(self, backend): - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: FAKE-123,5E22A2BD85A653FB7A3ED20DE84F54CD @@ -762,18 +766,18 @@ def test_unsupported_key_encryption(self, backend): 5A295jD9BQp9CY0nNFSsy+qiXWToq2xT3y5zVNEStmN0SCGNaIlUnJzL9IHW+oMI kPmXZMnAYBWeeCF1gf3J3aE5lZInegHNfEI0+J0LazC2aNU5Dg/BNqrmRqKWEIo/ -----END RSA PRIVATE KEY----- - """).encode() + """ + ).encode() password = b"password" with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_CIPHER): - load_pem_private_key( - key_data, password, backend - ) + load_pem_private_key(key_data, password, backend) def test_corrupt_pkcs8_format(self, backend): # unenc-rsa-pkcs8.pem with a bunch of data missing. - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ -----BEGIN PRIVATE KEY----- MIICdQIBADALBgkqhkiG9w0BAQEEggJhMIICXQIBAAKBgQC7JHoJfg6yNzLMOWet 8Z49a4KD0dCspMAYvo2YAMB7/wdEycocujbhJ2n/seONi+5XqTqqFkM5VBl8rmkk @@ -789,12 +793,11 @@ def test_corrupt_pkcs8_format(self, backend): Xxg/SNpjEIv+qAyUD96XVlOJlOIeLHQ8kYE0C6ZA+MsqYIzgAreJk88Yn0lU/X0/ mu/UpE/BRZmR -----END PRIVATE KEY----- - """).encode() + """ + ).encode() with pytest.raises(ValueError): - load_pem_private_key( - key_data, None, backend - ) + load_pem_private_key(key_data, None, backend) with pytest.raises(ValueError): load_pem_private_key( @@ -803,7 +806,8 @@ def test_corrupt_pkcs8_format(self, backend): def test_pks8_encrypted_corrupt_format(self, backend): # enc-rsa-pkcs8.pem with some bits flipped. - key_data = textwrap.dedent("""\ + key_data = textwrap.dedent( + """\ -----BEGIN ENCRYPTED PRIVATE KEY----- MIICojAcBgoqhkiG9w0BDAEDMA4ECHK0M0+QuEL9AgIBIcSCAoDRq+KRY+0XP0tO lwBTzViiXSXoyNnKAZKt5r5K/fGNntv22g/1s/ZNCetrqsJDC5eMUPPacz06jFq/ @@ -821,27 +825,23 @@ def test_pks8_encrypted_corrupt_format(self, backend): 6JLgl8FrvdfjHwIvmSOO1YMNmILBq000Q8WDqyErBDs4hsvtO6VQ4LeqJj6gClX3 qeJNaJFu -----END ENCRYPTED PRIVATE KEY----- - """).encode() + """ + ).encode() password = b"this password is wrong" with pytest.raises(ValueError): - load_pem_private_key( - key_data, None, backend - ) + load_pem_private_key(key_data, None, backend) with pytest.raises(ValueError): - load_pem_private_key( - key_data, password, backend - ) + load_pem_private_key(key_data, password, backend) def test_rsa_pkcs8_encrypted_values(self, backend): pkey = load_vectors_from_file( - os.path.join( - "asymmetric", "PKCS8", "enc-rsa-pkcs8.pem"), + os.path.join("asymmetric", "PKCS8", "enc-rsa-pkcs8.pem"), lambda pemfile: load_pem_private_key( pemfile.read().encode(), b"foobar", backend - ) + ), ) assert pkey @@ -852,7 +852,8 @@ def test_rsa_pkcs8_encrypted_values(self, backend): "376a7fe5b19f95b35ca358ea5c8abd7ae051d49cd2f1e45969a1ae945460" "3c14b278664a0e414ebc8913acb6203626985525e17a600611b028542dd0" "562aad787fb4f1650aa318cdcff751e1b187cbf6785fbe164e9809491b95" - "dd68480567c99b1a57", 16 + "dd68480567c99b1a57", + 16, ) assert numbers.public_numbers.e == 65537 @@ -862,37 +863,43 @@ def test_rsa_pkcs8_encrypted_values(self, backend): "f3d9785c3a2c09e4c8090909fb3721e19a3009ec21221523a729265707a5" "8f13063671c42a4096cad378ef2510cb59e23071489d8893ac4934dd149f" "34f2d094bea57f1c8027c3a77248ac9b91218737d0c3c3dfa7d7829e6977" - "cf7d995688c86c81", 16 + "cf7d995688c86c81", + 16, ) assert numbers.p == int( "00db122ac857b2c0437d7616daa98e597bb75ca9ad3a47a70bec10c10036" "03328794b225c8e3eee6ffd3fd6d2253d28e071fe27d629ab072faa14377" - "ce6118cb67", 16 + "ce6118cb67", + 16, ) assert numbers.q == int( "00df1b8aa8506fcbbbb9d00257f2975e38b33d2698fd0f37e82d7ef38c56" "f21b6ced63c825383782a7115cfcc093300987dbd2853b518d1c8f26382a" - "2d2586d391", 16 + "2d2586d391", + 16, ) assert numbers.dmp1 == int( "00be18aca13e60712fdf5daa85421eb10d86d654b269e1255656194fb0c4" "2dd01a1070ea12c19f5c39e09587af02f7b1a1030d016a9ffabf3b36d699" - "ceaf38d9bf", 16 + "ceaf38d9bf", + 16, ) assert numbers.dmq1 == int( "71aa8978f90a0c050744b77cf1263725b203ac9f730606d8ae1d289dce4a" "28b8d534e9ea347aeb808c73107e583eb80c546d2bddadcdb3c82693a4c1" - "3d863451", 16 + "3d863451", + 16, ) assert numbers.iqmp == int( "136b7b1afac6e6279f71b24217b7083485a5e827d156024609dae39d48a6" "bdb55af2f062cc4a3b077434e6fffad5faa29a2b5dba2bed3e4621e478c0" - "97ccfe7f", 16 + "97ccfe7f", + 16, ) def test_load_pem_dsa_private_key(self, backend): @@ -900,7 +907,7 @@ def test_load_pem_dsa_private_key(self, backend): os.path.join("asymmetric", "PKCS8", "unenc-dsa-pkcs8.pem"), lambda pemfile: load_pem_private_key( pemfile.read().encode(), None, backend - ) + ), ) assert key assert isinstance(key, dsa.DSAPrivateKey) @@ -911,15 +918,14 @@ def test_load_pem_dsa_private_key(self, backend): num = key.private_numbers() pub = num.public_numbers parameter_numbers = pub.parameter_numbers - assert num.x == int("00a535a8e1d0d91beafc8bee1d9b2a3a8de3311203", - 16) + assert num.x == int("00a535a8e1d0d91beafc8bee1d9b2a3a8de3311203", 16) assert pub.y == int( "2b260ea97dc6a12ae932c640e7df3d8ff04a8a05a0324f8d5f1b23f15fa1" "70ff3f42061124eff2586cb11b49a82dcdc1b90fc6a84fb10109cb67db5d" "2da971aeaf17be5e37284563e4c64d9e5fc8480258b319f0de29d54d8350" "70d9e287914d77df81491f4423b62da984eb3f45eb2a29fcea5dae525ac6" "ab6bcce04bfdf5b6", - 16 + 16, ) assert parameter_numbers.p == int( @@ -928,11 +934,12 @@ def test_load_pem_dsa_private_key(self, backend): "071d4dceb2782794ad393cc08a4d4ada7f68d6e839a5fcd34b4e402d82cb" "8a8cb40fec31911bf9bd360b034caacb4c5e947992573c9e90099c1b0f05" "940cabe5d2de49a167", - 16 + 16, ) assert parameter_numbers.q == int( - "00adc0e869b36f0ac013a681fdf4d4899d69820451", 16) + "00adc0e869b36f0ac013a681fdf4d4899d69820451", 16 + ) assert parameter_numbers.g == int( "008c6b4589afa53a4d1048bfc346d1f386ca75521ccf72ddaa251286880e" @@ -940,69 +947,61 @@ def test_load_pem_dsa_private_key(self, backend): "e71141ba324f5b93131929182c88a9fa4062836066cebe74b5c6690c7d10" "1106c240ab7ebd54e4e3301fd086ce6adac922fb2713a2b0887cba13b9bc" "68ce5cfff241cd3246", - 16 + 16, ) @pytest.mark.parametrize( - ("key_file", "password"), - [ - ("bad-oid-dsa-key.pem", None), - ] + ("key_file", "password"), [("bad-oid-dsa-key.pem", None)] ) def test_load_bad_oid_key(self, key_file, password, backend): with pytest.raises(ValueError): load_vectors_from_file( - os.path.join( - "asymmetric", "PKCS8", key_file), + os.path.join("asymmetric", "PKCS8", key_file), lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) @pytest.mark.parametrize( - ("key_file", "password"), - [ - ("bad-encryption-oid.pem", b"password"), - ] + ("key_file", "password"), [("bad-encryption-oid.pem", b"password")] ) def test_load_bad_encryption_oid_key(self, key_file, password, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_CIPHER): load_vectors_from_file( - os.path.join( - "asymmetric", "PKCS8", key_file), + os.path.join("asymmetric", "PKCS8", key_file), lambda pemfile: load_pem_private_key( pemfile.read().encode(), password, backend - ) + ), ) @pytest.mark.requires_backend_interface(interface=RSABackend) class TestRSASSHSerialization(object): def test_load_ssh_public_key_unsupported(self, backend): - ssh_key = b'ecdsa-sha2-junk AAAAE2VjZHNhLXNoYTItbmlzdHAyNTY=' + ssh_key = b"ecdsa-sha2-junk AAAAE2VjZHNhLXNoYTItbmlzdHAyNTY=" with pytest.raises(UnsupportedAlgorithm): load_ssh_public_key(ssh_key, backend) def test_load_ssh_public_key_bad_format(self, backend): - ssh_key = b'ssh-rsa not-a-real-key' + ssh_key = b"ssh-rsa not-a-real-key" with pytest.raises(ValueError): load_ssh_public_key(ssh_key, backend) def test_load_ssh_public_key_rsa_too_short(self, backend): - ssh_key = b'ssh-rsa' + ssh_key = b"ssh-rsa" with pytest.raises(ValueError): load_ssh_public_key(ssh_key, backend) def test_load_ssh_public_key_truncated_int(self, backend): - ssh_key = b'ssh-rsa AAAAB3NzaC1yc2EAAAA=' + ssh_key = b"ssh-rsa AAAAB3NzaC1yc2EAAAA=" with pytest.raises(ValueError): load_ssh_public_key(ssh_key, backend) - ssh_key = b'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAACKr+IHXo' + ssh_key = b"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAACKr+IHXo" with pytest.raises(ValueError): load_ssh_public_key(ssh_key, backend) @@ -1071,16 +1070,18 @@ def test_load_ssh_public_key_rsa(self, backend): expected_e = 0x10001 expected_n = int( - '00C3BBF5D13F59322BA0A0B77EA0B6CF570241628AE24B5BA454D' - '23DCA295652B3523B67752653DFFD69587FAD9578DD6406F23691' - 'EA491C3F8B2D391D0312D9653C303B651067ADF887A5241843CEF' - '8019680A088E092FEC305FB04EA070340BB9BD0F1635B2AD84142' - '61B4E2D010ABD8FC6D2FB768912F78EE6B05A60857532B75B75EF' - 'C007601A4EF58BA947B7E75E38F3443CDD87E7C138A1DAD9D9FB3' - '19FF69DA43A9F6F6B0CD243F042CD1A5AFAEB286BD46AEB2D922B' - 'D01385D6892167074A0907F94A2BF08A54ABB2FFFFC89920861D0' - '46F8706AB88DDADBD9E8204D48B87789081E074024C8996783B31' - '7076A98ABF0A2D8550EAF2097D8CCC7BE76EF', 16) + "00C3BBF5D13F59322BA0A0B77EA0B6CF570241628AE24B5BA454D" + "23DCA295652B3523B67752653DFFD69587FAD9578DD6406F23691" + "EA491C3F8B2D391D0312D9653C303B651067ADF887A5241843CEF" + "8019680A088E092FEC305FB04EA070340BB9BD0F1635B2AD84142" + "61B4E2D010ABD8FC6D2FB768912F78EE6B05A60857532B75B75EF" + "C007601A4EF58BA947B7E75E38F3443CDD87E7C138A1DAD9D9FB3" + "19FF69DA43A9F6F6B0CD243F042CD1A5AFAEB286BD46AEB2D922B" + "D01385D6892167074A0907F94A2BF08A54ABB2FFFFC89920861D0" + "46F8706AB88DDADBD9E8204D48B87789081E074024C8996783B31" + "7076A98ABF0A2D8550EAF2097D8CCC7BE76EF", + 16, + ) expected = rsa.RSAPublicNumbers(expected_e, expected_n) @@ -1090,7 +1091,7 @@ def test_load_ssh_public_key_rsa(self, backend): @pytest.mark.requires_backend_interface(interface=DSABackend) class TestDSSSSHSerialization(object): def test_load_ssh_public_key_dss_too_short(self, backend): - ssh_key = b'ssh-dss' + ssh_key = b"ssh-dss" with pytest.raises(ValueError): load_ssh_public_key(ssh_key, backend) @@ -1173,14 +1174,16 @@ def test_load_ssh_public_key_dss(self, backend): "96a7032c01cdd8485b5cbfb73a46bb04708f98a18bc88d4c7812b284da8f900" "6e473e89897f9bc9125c69bbfd8ef691c0e76c1c34e6c843b8fe240e6e5aeb3" "13486e5fa917ab1288ff1a6ebcf9dcdeed3c5fc88474e30476f53a5ec816ef6" - "9f4", 16 + "9f4", + 16, ) expected_p = int( "b9b052d7f07630148d4d838b17790ef4f43437238ebebd5032ea483fd7b7902" "5ec3dc65ebd563ab586a633b4344f6acd10af31353bcf29111fa5e3b8d5c1e8" "7befe3c65f9b8be69c740716698c8366c8ef925b9cec1dcd69e73d926b554e2" "b4b6ddd1453eab39ba0f846e1555adcc33c5a8637128c9ed61104a45505a748" - "f6db", 16 + "f6db", + 16, ) expected_q = 1230879958723280233885494314531920096931919647917 expected_g = int( @@ -1188,11 +1191,12 @@ def test_load_ssh_public_key_dss(self, backend): "7bc249b6cf8f5f5c5022afefd4df5bf9d13bbdf182df5af2a5c5d1dc7604185" "7d5b0e4b22b856c300f850a3b00bac394b728755b8b7a56522eefc491573967" "debb5982fc94d6a8c291f758feae63ad769a5621947221522a2dc31d18ede6f" - "b656", 16 + "b656", + 16, ) expected = dsa.DSAPublicNumbers( expected_y, - dsa.DSAParameterNumbers(expected_p, expected_q, expected_g) + dsa.DSAParameterNumbers(expected_p, expected_q, expected_g), ) assert numbers == expected @@ -1213,11 +1217,13 @@ def test_load_ssh_public_key_ecdsa_nist_p256(self, backend): expected_x = int( "44196257377740326295529888716212621920056478823906609851236662550" - "785814128027", 10 + "785814128027", + 10, ) expected_y = int( "12257763433170736656417248739355923610241609728032203358057767672" - "925775019611", 10 + "925775019611", + 10, ) assert key.public_numbers() == ec.EllipticCurvePublicNumbers( @@ -1249,11 +1255,13 @@ def test_load_ssh_public_key_ecdsa_nist_p384(self, backend): expected_x = int( "31541830871345183397582554827482786756220448716666815789487537666" - "592636882822352575507883817901562613492450642523901", 10 + "592636882822352575507883817901562613492450642523901", + 10, ) expected_y = int( "15111413269431823234030344298767984698884955023183354737123929430" - "995703524272335782455051101616329050844273733614670", 10 + "995703524272335782455051101616329050844273733614670", + 10, ) assert key.public_numbers() == ec.EllipticCurvePublicNumbers( @@ -1274,12 +1282,14 @@ def test_load_ssh_public_key_ecdsa_nist_p521(self, backend): expected_x = int( "54124123120178189598842622575230904027376313369742467279346415219" "77809037378785192537810367028427387173980786968395921877911964629" - "142163122798974160187785455", 10 + "142163122798974160187785455", + 10, ) expected_y = int( "16111775122845033200938694062381820957441843014849125660011303579" "15284560361402515564433711416776946492019498546572162801954089916" - "006665939539407104638103918", 10 + "006665939539407104638103918", + 10, ) assert key.public_numbers() == ec.EllipticCurvePublicNumbers( @@ -1328,7 +1338,7 @@ def test_load_ssh_public_key_ecdsa_nist_p256_bad_curve_name(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support" + skip_message="Requires OpenSSL with Ed25519 support", ) class TestEd25519SSHSerialization(object): def test_load_ssh_public_key(self, backend): @@ -1338,9 +1348,7 @@ def test_load_ssh_public_key(self, backend): ) key = load_ssh_public_key(ssh_key, backend) assert isinstance(key, ed25519.Ed25519PublicKey) - assert key.public_bytes( - Encoding.Raw, PublicFormat.Raw - ) == ( + assert key.public_bytes(Encoding.Raw, PublicFormat.Raw) == ( b"m\x9f\x82\x99\xa9`\xee\xb5\xa9\xe01\x19\xdd0\x81\x16\x8d\xfc" b"N\x06G\xecV\xbc\x19\xaf\xc6 - """).splitlines() + """ + ).splitlines() vectors = tuple(load_pkcs1_vectors(vector_data)) expected = ( ( { - 'modulus': int( - '495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f77' - '8a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e58' - '2de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218' - 'f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a' - '2b8efab0561b0810344739ada0733f', 16), - 'public_exponent': int('10001', 16), - 'private_exponent': int( - '6c66ffe98980c38fcdeab5159898836165f4b4b817c4f6a8d486ee4ea' - '9130fe9b9092bd136d184f95f504a607eac565846d2fdd6597a8967c7' - '396ef95a6eeebb4578a643966dca4d8ee3de842de63279c618159c1ab' - '54a89437b6a6120e4930afb52a4ba6ced8a4947ac64b30a3497cbe701' - 'c2d6266d517219ad0ec6d347dbe9', 16), - 'p': int( - '8dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab7' - '2619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c' - '8060645a1d29edb', 16), - 'q': int( - '847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b' - '97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca41' - '74825b48f49706d', 16), - 'dmp1': int( - '05c2a83c124b3621a2aa57ea2c3efe035eff4560f33ddebb7adab81fc' - 'e69a0c8c2edc16520dda83d59a23be867963ac65f2cc710bbcfb96ee1' - '03deb771d105fd85', 16), - 'dmq1': int( - '04cae8aa0d9faa165c87b682ec140b8ed3b50b24594b7a3b2c220b366' - '9bb819f984f55310a1ae7823651d4a02e99447972595139363434e5e3' - '0a7e7d241551e1b9', 16), - 'iqmp': int( - '07d3e47bf686600b11ac283ce88dbb3f6051e8efd04680e44c171ef53' - '1b80b2b7c39fc766320e2cf15d8d99820e96ff30dc69691839c4b40d7' - 'b06e45307dc91f3f', 16), - 'examples': [ + "modulus": int( + "495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f77" + "8a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e58" + "2de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218" + "f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a" + "2b8efab0561b0810344739ada0733f", + 16, + ), + "public_exponent": int("10001", 16), + "private_exponent": int( + "6c66ffe98980c38fcdeab5159898836165f4b4b817c4f6a8d486ee4ea" + "9130fe9b9092bd136d184f95f504a607eac565846d2fdd6597a8967c7" + "396ef95a6eeebb4578a643966dca4d8ee3de842de63279c618159c1ab" + "54a89437b6a6120e4930afb52a4ba6ced8a4947ac64b30a3497cbe701" + "c2d6266d517219ad0ec6d347dbe9", + 16, + ), + "p": int( + "8dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab7" + "2619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c" + "8060645a1d29edb", + 16, + ), + "q": int( + "847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b" + "97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca41" + "74825b48f49706d", + 16, + ), + "dmp1": int( + "05c2a83c124b3621a2aa57ea2c3efe035eff4560f33ddebb7adab81fc" + "e69a0c8c2edc16520dda83d59a23be867963ac65f2cc710bbcfb96ee1" + "03deb771d105fd85", + 16, + ), + "dmq1": int( + "04cae8aa0d9faa165c87b682ec140b8ed3b50b24594b7a3b2c220b366" + "9bb819f984f55310a1ae7823651d4a02e99447972595139363434e5e3" + "0a7e7d241551e1b9", + 16, + ), + "iqmp": int( + "07d3e47bf686600b11ac283ce88dbb3f6051e8efd04680e44c171ef53" + "1b80b2b7c39fc766320e2cf15d8d99820e96ff30dc69691839c4b40d7" + "b06e45307dc91f3f", + 16, + ), + "examples": [ { - 'message': b'81332f4be62948415ea1d899792eeacf6c6e1db1d' - b'a8be13b5cea41db2fed467092e1ff398914c71425' - b'9775f595f8547f735692a575e6923af78f22c6997' - b'ddb90fb6f72d7bb0dd5744a31decd3dc368584983' - b'6ed34aec596304ad11843c4f88489f209735f5fb7' - b'fdaf7cec8addc5818168f880acbf490d51005b7a8' - b'e84e43e54287977571dd99eea4b161eb2df1f5108' - b'f12a4142a83322edb05a75487a3435c9a78ce53ed' - b'93bc550857d7a9fb', - 'salt': b'1d65491d79c864b373009be6f6f2467bac4c78fa', - 'signature': b'0262ac254bfa77f3c1aca22c5179f8f040422b3' - b'c5bafd40a8f21cf0fa5a667ccd5993d42dbafb4' - b'09c520e25fce2b1ee1e716577f1efa17f3da280' - b'52f40f0419b23106d7845aaf01125b698e7a4df' - b'e92d3967bb00c4d0d35ba3552ab9a8b3eef07c7' - b'fecdbc5424ac4db1e20cb37d0b2744769940ea9' - b'07e17fbbca673b20522380c5' - }, { - 'message': b'e2f96eaf0e05e7ba326ecca0ba7fd2f7c02356f3c' - b'ede9d0faabf4fcc8e60a973e5595fd9ea08', - 'salt': b'435c098aa9909eb2377f1248b091b68987ff1838', - 'signature': b'2707b9ad5115c58c94e932e8ec0a280f56339e4' - b'4a1b58d4ddcff2f312e5f34dcfe39e89c6a94dc' - b'ee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6' - b'c86ee68396e8b3a14c9c8f34b178eb741f9d3f1' - b'21109bf5c8172fada2e768f9ea1433032c004a8' - b'aa07eb990000a48dc94c8bac8aabe2b09b1aa46' - b'c0a2aa0e12f63fbba775ba7e' - } - ] + "message": b"81332f4be62948415ea1d899792eeacf6c6e1db1d" + b"a8be13b5cea41db2fed467092e1ff398914c71425" + b"9775f595f8547f735692a575e6923af78f22c6997" + b"ddb90fb6f72d7bb0dd5744a31decd3dc368584983" + b"6ed34aec596304ad11843c4f88489f209735f5fb7" + b"fdaf7cec8addc5818168f880acbf490d51005b7a8" + b"e84e43e54287977571dd99eea4b161eb2df1f5108" + b"f12a4142a83322edb05a75487a3435c9a78ce53ed" + b"93bc550857d7a9fb", + "salt": b"1d65491d79c864b373009be6f6f2467bac4c78fa", + "signature": b"0262ac254bfa77f3c1aca22c5179f8f040422b3" + b"c5bafd40a8f21cf0fa5a667ccd5993d42dbafb4" + b"09c520e25fce2b1ee1e716577f1efa17f3da280" + b"52f40f0419b23106d7845aaf01125b698e7a4df" + b"e92d3967bb00c4d0d35ba3552ab9a8b3eef07c7" + b"fecdbc5424ac4db1e20cb37d0b2744769940ea9" + b"07e17fbbca673b20522380c5", + }, + { + "message": b"e2f96eaf0e05e7ba326ecca0ba7fd2f7c02356f3c" + b"ede9d0faabf4fcc8e60a973e5595fd9ea08", + "salt": b"435c098aa9909eb2377f1248b091b68987ff1838", + "signature": b"2707b9ad5115c58c94e932e8ec0a280f56339e4" + b"4a1b58d4ddcff2f312e5f34dcfe39e89c6a94dc" + b"ee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6" + b"c86ee68396e8b3a14c9c8f34b178eb741f9d3f1" + b"21109bf5c8172fada2e768f9ea1433032c004a8" + b"aa07eb990000a48dc94c8bac8aabe2b09b1aa46" + b"c0a2aa0e12f63fbba775ba7e", + }, + ], }, - { - 'modulus': int( - '495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f77' - '8a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e58' - '2de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218' - 'f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a' - '2b8efab0561b0810344739ada0733f', 16), - 'public_exponent': int('10001', 16) - } + "modulus": int( + "495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f77" + "8a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e58" + "2de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218" + "f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a" + "2b8efab0561b0810344739ada0733f", + 16, + ), + "public_exponent": int("10001", 16), + }, ), ( { - 'modulus': int( - 'e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd0' - '6c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee31' - '5ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b' - '1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddb' - 'c2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8d' - 'e3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6f' - 'd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b', 16), - 'public_exponent': int('10001', 16), - 'private_exponent': int( - '6a7fd84fb85fad073b34406db74f8d61a6abc12196a961dd79565e9da' - '6e5187bce2d980250f7359575359270d91590bb0e427c71460b55d514' - '10b191bcf309fea131a92c8e702738fa719f1e0041f52e40e91f229f4' - 'd96a1e6f172e15596b4510a6daec26105f2bebc53316b87bdf2131166' - '6070e8dfee69d52c71a976caae79c72b68d28580dc686d9f5129d225f' - '82b3d615513a882b3db91416b48ce08888213e37eeb9af800d81cab32' - '8ce420689903c00c7b5fd31b75503a6d419684d629', 16), - 'p': int( - 'f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac' - '086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a' - '82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f61' - '54a762aed165d47dee367', 16), - 'q': int( - 'ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f' - '288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e472' - '8cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b48' - '9c176128092d629e49d3d', 16), - 'dmp1': int( - '2bb68bddfb0c4f56c8558bffaf892d8043037841e7fa81cfa61a38c5e' - '39b901c8ee71122a5da2227bd6cdeeb481452c12ad3d61d5e4f776a0a' - 'b556591befe3e59e5a7fddb8345e1f2f35b9f4cee57c32414c086aec9' - '93e9353e480d9eec6289f', 16), - 'dmq1': int( - '4ff897709fad079746494578e70fd8546130eeab5627c49b080f05ee4' - 'ad9f3e4b7cba9d6a5dff113a41c3409336833f190816d8a6bc42e9bec' - '56b7567d0f3c9c696db619b245d901dd856db7c8092e77e9a1cccd56e' - 'e4dba42c5fdb61aec2669', 16), - 'iqmp': int( - '77b9d1137b50404a982729316efafc7dfe66d34e5a182600d5f30a0a8' - '512051c560d081d4d0a1835ec3d25a60f4e4d6aa948b2bf3dbb5b124c' - 'bbc3489255a3a948372f6978496745f943e1db4f18382ceaa505dfc65' - '757bb3f857a58dce52156', 16), - 'examples': [ + "modulus": int( + "e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd0" + "6c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee31" + "5ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b" + "1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddb" + "c2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8d" + "e3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6f" + "d4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b", + 16, + ), + "public_exponent": int("10001", 16), + "private_exponent": int( + "6a7fd84fb85fad073b34406db74f8d61a6abc12196a961dd79565e9da" + "6e5187bce2d980250f7359575359270d91590bb0e427c71460b55d514" + "10b191bcf309fea131a92c8e702738fa719f1e0041f52e40e91f229f4" + "d96a1e6f172e15596b4510a6daec26105f2bebc53316b87bdf2131166" + "6070e8dfee69d52c71a976caae79c72b68d28580dc686d9f5129d225f" + "82b3d615513a882b3db91416b48ce08888213e37eeb9af800d81cab32" + "8ce420689903c00c7b5fd31b75503a6d419684d629", + 16, + ), + "p": int( + "f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac" + "086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a" + "82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f61" + "54a762aed165d47dee367", + 16, + ), + "q": int( + "ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f" + "288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e472" + "8cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b48" + "9c176128092d629e49d3d", + 16, + ), + "dmp1": int( + "2bb68bddfb0c4f56c8558bffaf892d8043037841e7fa81cfa61a38c5e" + "39b901c8ee71122a5da2227bd6cdeeb481452c12ad3d61d5e4f776a0a" + "b556591befe3e59e5a7fddb8345e1f2f35b9f4cee57c32414c086aec9" + "93e9353e480d9eec6289f", + 16, + ), + "dmq1": int( + "4ff897709fad079746494578e70fd8546130eeab5627c49b080f05ee4" + "ad9f3e4b7cba9d6a5dff113a41c3409336833f190816d8a6bc42e9bec" + "56b7567d0f3c9c696db619b245d901dd856db7c8092e77e9a1cccd56e" + "e4dba42c5fdb61aec2669", + 16, + ), + "iqmp": int( + "77b9d1137b50404a982729316efafc7dfe66d34e5a182600d5f30a0a8" + "512051c560d081d4d0a1835ec3d25a60f4e4d6aa948b2bf3dbb5b124c" + "bbc3489255a3a948372f6978496745f943e1db4f18382ceaa505dfc65" + "757bb3f857a58dce52156", + 16, + ), + "examples": [ { - 'message': b'06add75ab689de067744e69a2ebd4b90fa9383003' - b'cd05ff536cbf294cd215f0923b7fc9004f0aa1852' - b'71a1d0061fd0e9777ad1ec0c71591f578bf7b8e5a' - b'1', - 'signature': b'4514210e541d5bad7dd60ae549b943acc44f213' - b'90df5b61318455a17610df5b74d84aed232f17e' - b'59d91dd2659922f812dbd49681690384b954e9a' - b'dfb9b1a968c0cbff763eceed62750c59164b5e0' - b'80a8fef3d55bfe2acfad2752a6a8459fa1fab49' - b'ad378c6964b23ee97fd1034610c5cc14c61e0eb' - b'fb1711f8ade96fe6557b38' + "message": b"06add75ab689de067744e69a2ebd4b90fa9383003" + b"cd05ff536cbf294cd215f0923b7fc9004f0aa1852" + b"71a1d0061fd0e9777ad1ec0c71591f578bf7b8e5a" + b"1", + "signature": b"4514210e541d5bad7dd60ae549b943acc44f213" + b"90df5b61318455a17610df5b74d84aed232f17e" + b"59d91dd2659922f812dbd49681690384b954e9a" + b"dfb9b1a968c0cbff763eceed62750c59164b5e0" + b"80a8fef3d55bfe2acfad2752a6a8459fa1fab49" + b"ad378c6964b23ee97fd1034610c5cc14c61e0eb" + b"fb1711f8ade96fe6557b38", } - ] + ], }, - { - 'modulus': int( - 'e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd0' - '6c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee31' - '5ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b' - '1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddb' - 'c2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8d' - 'e3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6f' - 'd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b', 16), - 'public_exponent': int('10001', 16) - } - ) + "modulus": int( + "e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd0" + "6c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee31" + "5ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b" + "1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddb" + "c2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8d" + "e3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6f" + "d4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b", + 16, + ), + "public_exponent": int("10001", 16), + }, + ), ) assert vectors == expected def test_load_pkcs1_oaep_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ Test vectors for RSA-OAEP ========================= @@ -1083,88 +1159,106 @@ def test_load_pkcs1_oaep_vectors(): 15 91 2d f6 96 ff e0 70 29 32 94 6d 71 49 2b 44 # ============================================= - """).splitlines() + """ + ).splitlines() vectors = load_pkcs1_vectors(vector_data) expected = [ ( { - 'modulus': int( - 'a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae481' - '1a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6' - 'c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb' - '662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616' - 'd4f5ba10d4cfd226de88d39f16fb', 16), - 'public_exponent': int('10001', 16), - 'private_exponent': int( - '53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4' - 'f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b' - '8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3' - 'd3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d' - '0cf539e9cfcdd3de653729ead5d1', 16), - 'p': int( - 'd32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9' - 'cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dc' - 'ad212eac7ca39d', 16), - 'q': int( - 'cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3' - 'd5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030' - 'e860b0288b5d77', 16), - 'dmp1': int( - '0e12bf1718e9cef5599ba1c3882fe8046a90874eefce8f2ccc20e4f27' - '41fb0a33a3848aec9c9305fbecbd2d76819967d4671acc6431e403796' - '8db37878e695c1', 16), - 'dmq1': int( - '95297b0f95a2fa67d00707d609dfd4fc05c89dafc2ef6d6ea55bec771' - 'ea333734d9251e79082ecda866efef13c459e1a631386b7e354c899f5' - 'f112ca85d71583', 16), - 'iqmp': int( - '4f456c502493bdc0ed2ab756a3a6ed4d67352a697d4216e93212b127a' - '63d5411ce6fa98d5dbefd73263e3728142743818166ed7dd63687dd2a' - '8ca1d2f4fbd8e1', 16), - 'examples': [ + "modulus": int( + "a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae481" + "1a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6" + "c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb" + "662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616" + "d4f5ba10d4cfd226de88d39f16fb", + 16, + ), + "public_exponent": int("10001", 16), + "private_exponent": int( + "53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4" + "f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b" + "8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3" + "d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d" + "0cf539e9cfcdd3de653729ead5d1", + 16, + ), + "p": int( + "d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9" + "cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dc" + "ad212eac7ca39d", + 16, + ), + "q": int( + "cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3" + "d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030" + "e860b0288b5d77", + 16, + ), + "dmp1": int( + "0e12bf1718e9cef5599ba1c3882fe8046a90874eefce8f2ccc20e4f27" + "41fb0a33a3848aec9c9305fbecbd2d76819967d4671acc6431e403796" + "8db37878e695c1", + 16, + ), + "dmq1": int( + "95297b0f95a2fa67d00707d609dfd4fc05c89dafc2ef6d6ea55bec771" + "ea333734d9251e79082ecda866efef13c459e1a631386b7e354c899f5" + "f112ca85d71583", + 16, + ), + "iqmp": int( + "4f456c502493bdc0ed2ab756a3a6ed4d67352a697d4216e93212b127a" + "63d5411ce6fa98d5dbefd73263e3728142743818166ed7dd63687dd2a" + "8ca1d2f4fbd8e1", + 16, + ), + "examples": [ { - 'message': b'6628194e12073db03ba94cda9ef9532397d50dba7' - b'9b987004afefe34', - 'seed': b'18b776ea21069d69776a33e96bad48e1dda0a5ef', - 'encryption': b'354fe67b4a126d5d35fe36c777791a3f7ba13d' - b'ef484e2d3908aff722fad468fb21696de95d0b' - b'e911c2d3174f8afcc201035f7b6d8e69402de5' - b'451618c21a535fa9d7bfc5b8dd9fc243f8cf92' - b'7db31322d6e881eaa91a996170e657a05a2664' - b'26d98c88003f8477c1227094a0d9fa1e8c4024' - b'309ce1ecccb5210035d47ac72e8a' - }, { - 'message': b'750c4047f547e8e41411856523298ac9bae245efa' - b'f1397fbe56f9dd5', - 'seed': b'0cc742ce4a9b7f32f951bcb251efd925fe4fe35f', - 'encryption': b'640db1acc58e0568fe5407e5f9b701dff8c3c9' - b'1e716c536fc7fcec6cb5b71c1165988d4a279e' - b'1577d730fc7a29932e3f00c81515236d8d8e31' - b'017a7a09df4352d904cdeb79aa583adcc31ea6' - b'98a4c05283daba9089be5491f67c1a4ee48dc7' - b'4bbbe6643aef846679b4cb395a352d5ed11591' - b'2df696ffe0702932946d71492b44' - } - ] + "message": b"6628194e12073db03ba94cda9ef9532397d50dba7" + b"9b987004afefe34", + "seed": b"18b776ea21069d69776a33e96bad48e1dda0a5ef", + "encryption": b"354fe67b4a126d5d35fe36c777791a3f7ba13d" + b"ef484e2d3908aff722fad468fb21696de95d0b" + b"e911c2d3174f8afcc201035f7b6d8e69402de5" + b"451618c21a535fa9d7bfc5b8dd9fc243f8cf92" + b"7db31322d6e881eaa91a996170e657a05a2664" + b"26d98c88003f8477c1227094a0d9fa1e8c4024" + b"309ce1ecccb5210035d47ac72e8a", + }, + { + "message": b"750c4047f547e8e41411856523298ac9bae245efa" + b"f1397fbe56f9dd5", + "seed": b"0cc742ce4a9b7f32f951bcb251efd925fe4fe35f", + "encryption": b"640db1acc58e0568fe5407e5f9b701dff8c3c9" + b"1e716c536fc7fcec6cb5b71c1165988d4a279e" + b"1577d730fc7a29932e3f00c81515236d8d8e31" + b"017a7a09df4352d904cdeb79aa583adcc31ea6" + b"98a4c05283daba9089be5491f67c1a4ee48dc7" + b"4bbbe6643aef846679b4cb395a352d5ed11591" + b"2df696ffe0702932946d71492b44", + }, + ], }, - { - 'modulus': int( - 'a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae481' - '1a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6' - 'c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb' - '662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616' - 'd4f5ba10d4cfd226de88d39f16fb', 16), - 'public_exponent': int('10001', 16), - } + "modulus": int( + "a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae481" + "1a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6" + "c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb" + "662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616" + "d4f5ba10d4cfd226de88d39f16fb", + 16, + ), + "public_exponent": int("10001", 16), + }, ) ] assert vectors == expected def test_load_hotp_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # HOTP Test Vectors # RFC 4226 Appendix D @@ -1197,7 +1291,8 @@ def test_load_hotp_vectors(): TRUNCATED = 66ef7655 HOTP = 969429 SECRET = 12345678901234567890 - """).splitlines() + """ + ).splitlines() assert load_nist_vectors(vector_data) == [ { @@ -1232,7 +1327,8 @@ def test_load_hotp_vectors(): def test_load_totp_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # TOTP Test Vectors # RFC 6238 Appendix B @@ -1253,7 +1349,8 @@ def test_load_totp_vectors(): TOTP = 90693936 MODE = SHA512 SECRET = 12345678901234567890 - """).splitlines() + """ + ).splitlines() assert load_nist_vectors(vector_data) == [ { @@ -1278,7 +1375,8 @@ def test_load_totp_vectors(): def test_load_rsa_nist_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.4 # "SigGen PKCS#1 RSASSA-PSS" information # Mod sizes selected: 1024 1536 2048 3072 4096 @@ -1307,33 +1405,40 @@ def test_load_rsa_nist_vectors(): SHAAlg = SHA512 Msg = 3456781293fab829 S = deadbeef0000 - """).splitlines() + """ + ).splitlines() vectors = load_rsa_nist_vectors(vector_data) assert vectors == [ { - "modulus": int("bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda" - "707a146b3b4e29989d", 16), + "modulus": int( + "bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda" + "707a146b3b4e29989d", + 16, + ), "public_exponent": 65537, "algorithm": "SHA1", "salt_length": 20, "msg": b"1248f62a4389f42f7b4bb131053d6c88a994db2075b912ccbe3ea7dc6" - b"11714f14e", + b"11714f14e", "s": b"682cf53c1145d22a50caa9eb1a9ba70670c5915e0fdfde6457a765de2a8" - b"fe12de97", - "fail": False + b"fe12de97", + "fail": False, }, { - "modulus": int("bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda" - "707a146b3b4e29989d", 16), + "modulus": int( + "bcb47b2e0dafcba81ff2a2b5cb115ca7e757184c9d72bcdcda" + "707a146b3b4e29989d", + 16, + ), "public_exponent": 65537, "algorithm": "SHA384", "salt_length": 20, "msg": b"e511903c2f1bfba245467295ac95413ac4746c984c3750a728c388aa6" - b"28b0ebf", + b"28b0ebf", "s": b"9c748702bbcc1f9468864cd360c8c39d007b2d8aaee833606c70f7593cf" - b"0d1519", - "fail": False + b"0d1519", + "fail": False, }, { "modulus": 78187493520, @@ -1342,13 +1447,14 @@ def test_load_rsa_nist_vectors(): "salt_length": 20, "msg": b"3456781293fab829", "s": b"deadbeef0000", - "fail": False + "fail": False, }, ] def test_load_rsa_nist_pkcs1v15_verification_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # "SigVer PKCS#1 Ver 1.5" information # Mod sizes selected: 1024 1536 2048 3072 4096 @@ -1377,50 +1483,73 @@ def test_load_rsa_nist_pkcs1v15_verification_vectors(): S = 2b91c6ae2b3c46ff18d5b7abe239634cb752d0acb53eea0ccd8ea8483036a50e8faf SaltVal = 11223344555432167890 Result = P - """).splitlines() + """ + ).splitlines() vectors = load_rsa_nist_vectors(vector_data) assert vectors == [ { - "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b" - "9bfeb7aa72db126411", 16), - "p": int("e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003ea" - "a5931e6be5c3", 16), - "q": int("d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e4" - "9354d66ff84f", 16), + "modulus": int( + "be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b" + "9bfeb7aa72db126411", + 16, + ), + "p": int( + "e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003ea" + "a5931e6be5c3", + 16, + ), + "q": int( + "d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e4" + "9354d66ff84f", + 16, + ), "public_exponent": 17, "algorithm": "SHA1", - "private_exponent": int("0d0f17362bdad181db4e1fe03e8de1a3208989914" - "e14bf269558826bfa20faf4b68d", 16), + "private_exponent": int( + "0d0f17362bdad181db4e1fe03e8de1a3208989914" + "e14bf269558826bfa20faf4b68d", + 16, + ), "msg": b"6b9cfac0ba1c7890b13e381ce752195cc1375237db2afcf6a9dcd1f95" - b"ec733a80c", + b"ec733a80c", "s": b"562d87b5781c01d166fef3972669a0495c145b898a17df4743fbefb0a15" - b"82bd6ba9d", + b"82bd6ba9d", "saltval": b"11223344555432167890", - "fail": True + "fail": True, }, { - "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b" - "9bfeb7aa72db126411", 16), - "p": int("e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003ea" - "a5931e6be5c3", 16), - "q": int("d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e4" - "9354d66ff84f", 16), + "modulus": int( + "be499b5e7f06c83fa0293e31465c8eb6b58af920bae52a7b5b" + "9bfeb7aa72db126411", + 16, + ), + "p": int( + "e7a80c5d211c06acb900939495f26d365fc2b4825b75e356f89003ea" + "a5931e6be5c3", + 16, + ), + "q": int( + "d248aa248000f720258742da67b711940c8f76e1ecd52b67a6ffe1e4" + "9354d66ff84f", + 16, + ), "public_exponent": 3, "algorithm": "SHA1", "private_exponent": int("bfa20faf4b68d", 16), "msg": b"2a67c70ff14f9b34ddb42e6f89d5971057a0da980fc9ae70c81a84da0" - b"c0ac42737", + b"c0ac42737", "s": b"2b91c6ae2b3c46ff18d5b7abe239634cb752d0acb53eea0ccd8ea848303" - b"6a50e8faf", + b"6a50e8faf", "saltval": b"11223344555432167890", - "fail": False + "fail": False, }, ] def test_load_rsa_nist_pss_verification_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # "SigVer PKCS#1 RSASSA-PSS" information # Mod sizes selected: 1024 1536 2048 3072 4096 @@ -1450,7 +1579,8 @@ def test_load_rsa_nist_pss_verification_vectors(): S = 2b91c6ae2b3c46ff18d5b7abe239634cb7 SaltVal = 11223344555432167890 Result = P - """).splitlines() + """ + ).splitlines() vectors = load_rsa_nist_vectors(vector_data) assert vectors == [ @@ -1465,7 +1595,7 @@ def test_load_rsa_nist_pss_verification_vectors(): "s": b"562d87b5781c01d166fef3972669a0495c", "saltval": b"11223344555432167890", "salt_length": 10, - "fail": True + "fail": True, }, { "modulus": int("be499b5e7f06c83fa0293e31465c8eb6b5", 16), @@ -1478,13 +1608,14 @@ def test_load_rsa_nist_pss_verification_vectors(): "s": b"2b91c6ae2b3c46ff18d5b7abe239634cb7", "saltval": b"11223344555432167890", "salt_length": 10, - "fail": False + "fail": False, }, ] def test_load_fips_dsa_key_pair_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.1 # "KeyPair" information # Mod sizes selected: L=1024, N=160:: L=2048, N=224 :: L=2048, N=256 :: L @@ -1599,213 +1730,303 @@ def test_load_fips_dsa_key_pair_vectors(): 623399b473ce712a2184cf2da1861706c41466806aefe41b497db82aca6c31c8f4aa68c17d1d9e\ 380b57998917655783ec96e5234a131f7299398d36f1f5f84297a55ff292f1f060958c358fed34\ 6db2de45127ca728a9417b2c54203e33e53b9a061d924395b09afab8daf3e8dd7eedcec3ac - """).splitlines() + """ + ).splitlines() expected = [ - {'g': int('06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce499' - '1d2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d3000' - '42bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34cd12' - '615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f' - '4fd9f93cd6f4f17fc076341a7e7d9', 16), - 'p': int('d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725e' - 'f341eabb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae791210' - '2b6b502e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189c' - 'ef1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097f7' - '19076640e20980a0093113a8bd73', 16), - 'q': int('96c5390a8b612c0e422bb2b0ea194a3ec935a281', 16), - 'x': int('8185fee9cc7c0e91fd85503274f1cd5a3fd15a49', 16), - 'y': int('6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422' - '070edb71db44ff568280fdb1709f8fc3feab39f1f824adaeb2a29808815' - '6ac31af1aa04bf54f475bdcfdcf2f8a2dd973e922d83e76f01655861760' - '3129b21c70bf7d0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1ce80' - '204646bf99b5771d249a6fea627', 16)}, - {'g': int('06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce4991d' - '2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d30004' - '2bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34cd126' - '15474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f4fd9' - 'f93cd6f4f17fc076341a7e7d9', 16), - 'p': int('d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef341e' - 'abb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6b50' - '2e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189cef1a' - 'ce778d7845a5c1c1c7147123188f8dc551054ee162b634d6' - '0f097f719076640e20980a0093113a8bd73', 16), - 'q': int('96c5390a8b612c0e422bb2b0ea194a3ec935a281', 16), - 'x': int('85322d6ea73083064376099ca2f65f56e8522d9b', 16), - 'y': int('21f8690f717c9f4dcb8f4b6971de2f15b9231fcf41b7eeb997d781f240' - 'bfdddfd2090d22083c26cca39bf37c9caf1ec89518ea64845a50d747b49' - '131ffff6a2fd11ea7bacbb93c7d05137383a06365af82225dd3713c' - 'a5a45006316f53bd12b0e260d5f79795e5a4c9f353f12867a1d3' - '202394673ada8563b71555e53f415254', 16)}, - - {'g': int('e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b191' - '3413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9807' - '6739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908bae0' - '3e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5551b2' - 'fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78' - 'd0706b10a26f23b4f197c322b825002284a0aca91807bba98ece912' - 'b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f8403873d' - '12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b1' - '46ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302', 16), - 'p': int('ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace' - '5e9c41434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17d' - 'ac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b122' - '52c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d2' - '44e54561b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5' - '119fbf78ebe3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a' - '2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf21bff2947' - 'fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a' - '908c36e95e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac' - '5aa66ef7', 16), - 'q': int('8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b1' - '8f507192c19d', 16), - 'x': int('405772da6e90d809e77d5de796562a2dd4dfd10ef00a83a3aba6' - 'bd818a0348a1', 16), - 'y': int('6b32e31ab9031dc4dd0b5039a78d07826687ab087ae6de4736f5' - 'b0434e1253092e8a0b231f9c87f3fc8a4cb5634eb194bf1b638' - 'b7a7889620ce6711567e36aa36cda4604cfaa601a45918371d' - '4ccf68d8b10a50a0460eb1dc0fff62ef5e6ee4d473e18ea4a6' - '6c196fb7e677a49b48241a0b4a97128eff30fa437050501a584' - 'f8771e7280d26d5af30784039159c11ebfea10b692fd0a58215ee' - 'b18bff117e13f08db792ed4151a218e4bed8dddfb0793225bd1e97' - '73505166f4bd8cedbb286ea28232972da7bae836ba97329ba6b0a36508' - 'e50a52a7675e476d4d4137eae13f22a9d2fefde708ba8f34bf336c6e7' - '6331761e4b0617633fe7ec3f23672fb19d27', 16)}, - {'g': int('e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b191' - '3413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9807' - '6739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908bae0' - '3e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5551b2' - 'fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78' - 'd0706b10a26f23b4f197c322b825002284a0aca91807bba98ece912' - 'b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f8403873d' - '12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b1' - '46ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302', 16), - 'p': int('ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace' - '5e9c41434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17d' - 'ac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b122' - '52c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d2' - '44e54561b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5' - '119fbf78ebe3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a' - '2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf21bff2947' - 'fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a' - '908c36e95e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac' - '5aa66ef7', 16), - 'q': int('8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b1' - '8f507192c19d', 16), - 'x': int('0e0b95e31fda3f888059c46c3002ef8f2d6be112d0209aeb9e95' - '45da67aeea80', 16), - 'y': int('778082b77ddba6f56597cc74c3a612abf2ddbd85cc81430c99ab' - '843c1f630b9db0139965f563978164f9bf3a8397256be714625' - 'cd41cd7fa0067d94ea66d7e073f7125af692ad01371d4a17f45' - '50590378f2b074030c20e36911598a1018772f61be3b24de4be' - '5a388ccc09e15a92819c31dec50de9fde105b49eaa097b9d13d' - '9219eeb33b628facfd1c78a7159c8430d0647c506e7e3de74763c' - 'b351eada72c00bef3c9641881e6254870c1e6599f8ca2f1bbb74f' - '39a905e3a34e4544168e6e50c9e3305fd09cab6ed4aff6fda6e0d' - '5bf375c81ac9054406d9193b003c89272f1bd83d48250134b65c77' - 'c2b6332d38d34d9016f0e8975536ad6c348a1faedb0', 16)}, - - {'g': int('ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978d' - 'b2104d7394b493c18332c64cec906a71c3778bd93341165dee8' - 'e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4768b82' - 'dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1' - '395420d778228f1461f5d0b8e47357e87b1fe3286223b553e3' - 'fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce77820d88cdf' - '50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721f' - 'f141f93a9fb23c1d1f7654c07c46e58836d1652828f71057b8aff0b077' - '8ef2ca934ea9d0f37daddade2d823a4d8e362721082e279d003b575ee' - '59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b' - '0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd1011' - '7e45774406c4c947da8020649c3168f690e0bd6e91ac67074d1d436b' - '58ae374523deaf6c93c1e6920db4a080b744804bb073cecfe83fa939' - '8cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d' - '775ae', 16), - 'p': int('f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828' - 'c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a842' - 'ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e8' - '0abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84ec' - '389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651' - 'b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a1428' - '5a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab0605' - '48de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9' - '844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d' - '54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818f' - '06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673a' - 'e4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476' - 'cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c11' - '36f303f4b4d25ad5b692229957', 16), - 'q': int('d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210' - 'f6169041653b', 16), - 'x': int('b2764c46113983777d3e7e97589f1303806d14ad9f2f1ef03309' - '7de954b17706', 16), - 'y': int('814824e435e1e6f38daa239aad6dad21033afce6a3ebd35c1359348a0f2' - '418871968c2babfc2baf47742148828f8612183178f126504da73566b6' - 'bab33ba1f124c15aa461555c2451d86c94ee21c3e3fc24c55527e' - '01b1f03adcdd8ec5cb08082803a7b6a829c3e99eeb332a2cf5c035b0c' - 'e0078d3d414d31fa47e9726be2989b8d06da2e6cd363f5a7d1515e3f4' - '925e0b32adeae3025cc5a996f6fd27494ea408763de48f3bb39f6a06' - '514b019899b312ec570851637b8865cff3a52bf5d54ad5a19e6e400' - 'a2d33251055d0a440b50d53f4791391dc754ad02b9eab74c46b4903' - 'f9d76f824339914db108057af7cde657d41766a99991ac8787694f' - '4185d6f91d7627048f827b405ec67bf2fe56141c4c581d8c317333' - '624e073e5879a82437cb0c7b435c0ce434e15965db1315d648959' - '91e6bbe7dac040c42052408bbc53423fd31098248a58f8a67da3a' - '39895cd0cc927515d044c1e3cb6a3259c3d0da354cce89ea3552c' - '59609db10ee989986527436af21d9485ddf25f90f7dff6d2bae', 16)}, - {'g': int('ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978d' - 'b2104d7394b493c18332c64cec906a71c3778bd93341165dee8' - 'e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4768b82' - 'dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1' - '395420d778228f1461f5d0b8e47357e87b1fe3286223b553e3' - 'fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce77820d88cdf' - '50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721f' - 'f141f93a9fb23c1d1f7654c07c46e58836d1652828f71057b8aff0b077' - '8ef2ca934ea9d0f37daddade2d823a4d8e362721082e279d003b575ee' - '59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b' - '0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd1011' - '7e45774406c4c947da8020649c3168f690e0bd6e91ac67074d1d436b' - '58ae374523deaf6c93c1e6920db4a080b744804bb073cecfe83fa939' - '8cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d' - '775ae', 16), - 'p': int('f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828' - 'c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a842' - 'ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e8' - '0abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84ec' - '389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651' - 'b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a1428' - '5a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab0605' - '48de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9' - '844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d' - '54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818f' - '06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673a' - 'e4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476' - 'cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c11' - '36f303f4b4d25ad5b692229957', 16), - 'q': int('d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210' - 'f6169041653b', 16), - 'x': int('52e3e040efb30e1befd909a0bdbcfd140d005b1bff094af97186' - '080262f1904d', 16), - 'y': int('a5ae6e8f9b7a68ab0516dad4d7b7d002126f811d5a52e3d35c6d' - '387fcb43fd19bf7792362f9c98f8348aa058bb62376685f3d0c3' - '66c520d697fcd8416947151d4bbb6f32b53528a016479e99d2cd' - '48d1fc679027c15f0042f207984efe05c1796bca8eba678dfdd0' - '0b80418e3ea840557e73b09e003882f9a68edba3431d351d1ca0' - '7a8150b018fdbdf6c2f1ab475792a3ccaa6594472a45f8dc777b' - '60bf67de3e0f65c20d11b7d59faedf83fbce52617f500d9e5149' - '47c455274c6e900464767fb56599b81344cf6d12c25cb2b7d038' - 'd7b166b6cf30534811c15d0e8ab880a2ac06786ae2ddde61329a' - '78d526f65245380ce877e979c5b50de66c9c30d66382c8f25465' - '3d25a1eb1d3a4897d7623399b473ce712a2184cf2da1861706c4' - '1466806aefe41b497db82aca6c31c8f4aa68c17d1d9e380b5799' - '8917655783ec96e5234a131f7299398d36f1f5f84297a55ff292' - 'f1f060958c358fed346db2de45127ca728a9417b2c54203e33e5' - '3b9a061d924395b09afab8daf3e8dd7eedcec3ac', 16)} + { + "g": int( + "06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce499" + "1d2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d3000" + "42bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34cd12" + "615474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f" + "4fd9f93cd6f4f17fc076341a7e7d9", + 16, + ), + "p": int( + "d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725e" + "f341eabb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae791210" + "2b6b502e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189c" + "ef1ace778d7845a5c1c1c7147123188f8dc551054ee162b634d60f097f7" + "19076640e20980a0093113a8bd73", + 16, + ), + "q": int("96c5390a8b612c0e422bb2b0ea194a3ec935a281", 16), + "x": int("8185fee9cc7c0e91fd85503274f1cd5a3fd15a49", 16), + "y": int( + "6f26d98d41de7d871b6381851c9d91fa03942092ab6097e76422" + "070edb71db44ff568280fdb1709f8fc3feab39f1f824adaeb2a29808815" + "6ac31af1aa04bf54f475bdcfdcf2f8a2dd973e922d83e76f01655861760" + "3129b21c70bf7d0e5dc9e68fe332e295b65876eb9a12fe6fca9f1a1ce80" + "204646bf99b5771d249a6fea627", + 16, + ), + }, + { + "g": int( + "06b7861abbd35cc89e79c52f68d20875389b127361ca66822138ce4991d" + "2b862259d6b4548a6495b195aa0e0b6137ca37eb23b94074d3c3d30004" + "2bdf15762812b6333ef7b07ceba78607610fcc9ee68491dbc1e34cd126" + "15474e52b18bc934fb00c61d39e7da8902291c4434a4e2224c3f4fd9" + "f93cd6f4f17fc076341a7e7d9", + 16, + ), + "p": int( + "d38311e2cd388c3ed698e82fdf88eb92b5a9a483dc88005d4b725ef341e" + "abb47cf8a7a8a41e792a156b7ce97206c4f9c5ce6fc5ae7912102b6b50" + "2e59050b5b21ce263dddb2044b652236f4d42ab4b5d6aa73189cef1a" + "ce778d7845a5c1c1c7147123188f8dc551054ee162b634d6" + "0f097f719076640e20980a0093113a8bd73", + 16, + ), + "q": int("96c5390a8b612c0e422bb2b0ea194a3ec935a281", 16), + "x": int("85322d6ea73083064376099ca2f65f56e8522d9b", 16), + "y": int( + "21f8690f717c9f4dcb8f4b6971de2f15b9231fcf41b7eeb997d781f240" + "bfdddfd2090d22083c26cca39bf37c9caf1ec89518ea64845a50d747b49" + "131ffff6a2fd11ea7bacbb93c7d05137383a06365af82225dd3713c" + "a5a45006316f53bd12b0e260d5f79795e5a4c9f353f12867a1d3" + "202394673ada8563b71555e53f415254", + 16, + ), + }, + { + "g": int( + "e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b191" + "3413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9807" + "6739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908bae0" + "3e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5551b2" + "fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78" + "d0706b10a26f23b4f197c322b825002284a0aca91807bba98ece912" + "b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f8403873d" + "12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b1" + "46ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302", + 16, + ), + "p": int( + "ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace" + "5e9c41434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17d" + "ac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b122" + "52c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d2" + "44e54561b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5" + "119fbf78ebe3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a" + "2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf21bff2947" + "fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a" + "908c36e95e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac" + "5aa66ef7", + 16, + ), + "q": int( + "8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b1" + "8f507192c19d", + 16, + ), + "x": int( + "405772da6e90d809e77d5de796562a2dd4dfd10ef00a83a3aba6" + "bd818a0348a1", + 16, + ), + "y": int( + "6b32e31ab9031dc4dd0b5039a78d07826687ab087ae6de4736f5" + "b0434e1253092e8a0b231f9c87f3fc8a4cb5634eb194bf1b638" + "b7a7889620ce6711567e36aa36cda4604cfaa601a45918371d" + "4ccf68d8b10a50a0460eb1dc0fff62ef5e6ee4d473e18ea4a6" + "6c196fb7e677a49b48241a0b4a97128eff30fa437050501a584" + "f8771e7280d26d5af30784039159c11ebfea10b692fd0a58215ee" + "b18bff117e13f08db792ed4151a218e4bed8dddfb0793225bd1e97" + "73505166f4bd8cedbb286ea28232972da7bae836ba97329ba6b0a36508" + "e50a52a7675e476d4d4137eae13f22a9d2fefde708ba8f34bf336c6e7" + "6331761e4b0617633fe7ec3f23672fb19d27", + 16, + ), + }, + { + "g": int( + "e4c4eca88415b23ecf811c96e48cd24200fe916631a68a684e6ccb6b191" + "3413d344d1d8d84a333839d88eee431521f6e357c16e6a93be111a9807" + "6739cd401bab3b9d565bf4fb99e9d185b1e14d61c93700133f908bae0" + "3e28764d107dcd2ea7674217622074bb19efff482f5f5c1a86d5551b2" + "fc68d1c6e9d8011958ef4b9c2a3a55d0d3c882e6ad7f9f0f3c61568f78" + "d0706b10a26f23b4f197c322b825002284a0aca91807bba98ece912" + "b80e10cdf180cf99a35f210c1655fbfdd74f13b1b5046591f8403873d" + "12239834dd6c4eceb42bf7482e1794a1601357b629ddfa971f2ed273b1" + "46ec1ca06d0adf55dd91d65c37297bda78c6d210c0bc26e558302", + 16, + ), + "p": int( + "ea1fb1af22881558ef93be8a5f8653c5a559434c49c8c2c12ace" + "5e9c41434c9cf0a8e9498acb0f4663c08b4484eace845f6fb17d" + "ac62c98e706af0fc74e4da1c6c2b3fbf5a1d58ff82fc1a66f3e8b122" + "52c40278fff9dd7f102eed2cb5b7323ebf1908c234d935414dded7f8d2" + "44e54561b0dca39b301de8c49da9fb23df33c6182e3f983208c560fb5" + "119fbf78ebe3e6564ee235c6a15cbb9ac247baba5a423bc6582a1a9d8a" + "2b4f0e9e3d9dbac122f750dd754325135257488b1f6ecabf21bff2947" + "fe0d3b2cb7ffe67f4e7fcdf1214f6053e72a5bb0dd20a0e9fe6db2df0a" + "908c36e95e60bf49ca4368b8b892b9c79f61ef91c47567c40e1f80ac" + "5aa66ef7", + 16, + ), + "q": int( + "8ec73f3761caf5fdfe6e4e82098bf10f898740dcb808204bf6b1" + "8f507192c19d", + 16, + ), + "x": int( + "0e0b95e31fda3f888059c46c3002ef8f2d6be112d0209aeb9e95" + "45da67aeea80", + 16, + ), + "y": int( + "778082b77ddba6f56597cc74c3a612abf2ddbd85cc81430c99ab" + "843c1f630b9db0139965f563978164f9bf3a8397256be714625" + "cd41cd7fa0067d94ea66d7e073f7125af692ad01371d4a17f45" + "50590378f2b074030c20e36911598a1018772f61be3b24de4be" + "5a388ccc09e15a92819c31dec50de9fde105b49eaa097b9d13d" + "9219eeb33b628facfd1c78a7159c8430d0647c506e7e3de74763c" + "b351eada72c00bef3c9641881e6254870c1e6599f8ca2f1bbb74f" + "39a905e3a34e4544168e6e50c9e3305fd09cab6ed4aff6fda6e0d" + "5bf375c81ac9054406d9193b003c89272f1bd83d48250134b65c77" + "c2b6332d38d34d9016f0e8975536ad6c348a1faedb0", + 16, + ), + }, + { + "g": int( + "ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978d" + "b2104d7394b493c18332c64cec906a71c3778bd93341165dee8" + "e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4768b82" + "dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1" + "395420d778228f1461f5d0b8e47357e87b1fe3286223b553e3" + "fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce77820d88cdf" + "50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721f" + "f141f93a9fb23c1d1f7654c07c46e58836d1652828f71057b8aff0b077" + "8ef2ca934ea9d0f37daddade2d823a4d8e362721082e279d003b575ee" + "59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b" + "0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd1011" + "7e45774406c4c947da8020649c3168f690e0bd6e91ac67074d1d436b" + "58ae374523deaf6c93c1e6920db4a080b744804bb073cecfe83fa939" + "8cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d" + "775ae", + 16, + ), + "p": int( + "f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828" + "c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a842" + "ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e8" + "0abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84ec" + "389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651" + "b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a1428" + "5a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab0605" + "48de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9" + "844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d" + "54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818f" + "06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673a" + "e4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476" + "cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c11" + "36f303f4b4d25ad5b692229957", + 16, + ), + "q": int( + "d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210" + "f6169041653b", + 16, + ), + "x": int( + "b2764c46113983777d3e7e97589f1303806d14ad9f2f1ef03309" + "7de954b17706", + 16, + ), + "y": int( + "814824e435e1e6f38daa239aad6dad21033afce6a3ebd35c1359348a0f2" + "418871968c2babfc2baf47742148828f8612183178f126504da73566b6" + "bab33ba1f124c15aa461555c2451d86c94ee21c3e3fc24c55527e" + "01b1f03adcdd8ec5cb08082803a7b6a829c3e99eeb332a2cf5c035b0c" + "e0078d3d414d31fa47e9726be2989b8d06da2e6cd363f5a7d1515e3f4" + "925e0b32adeae3025cc5a996f6fd27494ea408763de48f3bb39f6a06" + "514b019899b312ec570851637b8865cff3a52bf5d54ad5a19e6e400" + "a2d33251055d0a440b50d53f4791391dc754ad02b9eab74c46b4903" + "f9d76f824339914db108057af7cde657d41766a99991ac8787694f" + "4185d6f91d7627048f827b405ec67bf2fe56141c4c581d8c317333" + "624e073e5879a82437cb0c7b435c0ce434e15965db1315d648959" + "91e6bbe7dac040c42052408bbc53423fd31098248a58f8a67da3a" + "39895cd0cc927515d044c1e3cb6a3259c3d0da354cce89ea3552c" + "59609db10ee989986527436af21d9485ddf25f90f7dff6d2bae", + 16, + ), + }, + { + "g": int( + "ce84b30ddf290a9f787a7c2f1ce92c1cbf4ef400e3cd7ce4978d" + "b2104d7394b493c18332c64cec906a71c3778bd93341165dee8" + "e6cd4ca6f13afff531191194ada55ecf01ff94d6cf7c4768b82" + "dd29cd131aaf202aefd40e564375285c01f3220af4d70b96f1" + "395420d778228f1461f5d0b8e47357e87b1fe3286223b553e3" + "fc9928f16ae3067ded6721bedf1d1a01bfd22b9ae85fce77820d88cdf" + "50a6bde20668ad77a707d1c60fcc5d51c9de488610d0285eb8ff721f" + "f141f93a9fb23c1d1f7654c07c46e58836d1652828f71057b8aff0b077" + "8ef2ca934ea9d0f37daddade2d823a4d8e362721082e279d003b575ee" + "59fd050d105dfd71cd63154efe431a0869178d9811f4f231dc5dcf3b" + "0ec0f2b0f9896c32ec6c7ee7d60aa97109e09224907328d4e6acd1011" + "7e45774406c4c947da8020649c3168f690e0bd6e91ac67074d1d436b" + "58ae374523deaf6c93c1e6920db4a080b744804bb073cecfe83fa939" + "8cf150afa286dc7eb7949750cf5001ce104e9187f7e16859afa8fd0d" + "775ae", + 16, + ), + "p": int( + "f335666dd1339165af8b9a5e3835adfe15c158e4c3c7bd53132e7d5828" + "c352f593a9a787760ce34b789879941f2f01f02319f6ae0b756f1a842" + "ba54c85612ed632ee2d79ef17f06b77c641b7b080aff52a03fc2462e8" + "0abc64d223723c236deeb7d201078ec01ca1fbc1763139e25099a84ec" + "389159c409792080736bd7caa816b92edf23f2c351f90074aa5ea2651" + "b372f8b58a0a65554db2561d706a63685000ac576b7e4562e262a1428" + "5a9c6370b290e4eb7757527d80b6c0fd5df831d36f3d1d35f12ab0605" + "48de1605fd15f7c7aafed688b146a02c945156e284f5b71282045aba9" + "844d48b5df2e9e7a5887121eae7d7b01db7cdf6ff917cd8eb50c6bf1d" + "54f90cce1a491a9c74fea88f7e7230b047d16b5a6027881d6f154818f" + "06e513faf40c8814630e4e254f17a47bfe9cb519b98289935bf17673a" + "e4c8033504a20a898d0032ee402b72d5986322f3bdfb27400561f7476" + "cd715eaabb7338b854e51fc2fa026a5a579b6dcea1b1c0559c13d3c11" + "36f303f4b4d25ad5b692229957", + 16, + ), + "q": int( + "d3eba6521240694015ef94412e08bf3cf8d635a455a398d6f210" + "f6169041653b", + 16, + ), + "x": int( + "52e3e040efb30e1befd909a0bdbcfd140d005b1bff094af97186" + "080262f1904d", + 16, + ), + "y": int( + "a5ae6e8f9b7a68ab0516dad4d7b7d002126f811d5a52e3d35c6d" + "387fcb43fd19bf7792362f9c98f8348aa058bb62376685f3d0c3" + "66c520d697fcd8416947151d4bbb6f32b53528a016479e99d2cd" + "48d1fc679027c15f0042f207984efe05c1796bca8eba678dfdd0" + "0b80418e3ea840557e73b09e003882f9a68edba3431d351d1ca0" + "7a8150b018fdbdf6c2f1ab475792a3ccaa6594472a45f8dc777b" + "60bf67de3e0f65c20d11b7d59faedf83fbce52617f500d9e5149" + "47c455274c6e900464767fb56599b81344cf6d12c25cb2b7d038" + "d7b166b6cf30534811c15d0e8ab880a2ac06786ae2ddde61329a" + "78d526f65245380ce877e979c5b50de66c9c30d66382c8f25465" + "3d25a1eb1d3a4897d7623399b473ce712a2184cf2da1861706c4" + "1466806aefe41b497db82aca6c31c8f4aa68c17d1d9e380b5799" + "8917655783ec96e5234a131f7299398d36f1f5f84297a55ff292" + "f1f060958c358fed346db2de45127ca728a9417b2c54203e33e5" + "3b9a061d924395b09afab8daf3e8dd7eedcec3ac", + 16, + ), + }, ] assert expected == load_fips_dsa_key_pair_vectors(vector_data) def test_load_fips_dsa_sig_ver_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # "SigVer" information # Mod sizes selected: SHA-1 L=1024, N=160,SHA-384 L=2048, N=256 @@ -1902,166 +2123,236 @@ def test_load_fips_dsa_sig_ver_vectors(): R = 343ea0a9e66277380f604d5880fca686bffab69ca97bfba015a102a7e23dce0e S = 6258488c770e0f5ad7b9da8bade5023fc0d17c6ec517bd08d53e6dc01ac5c2b3 Result = P - """).splitlines() + """ + ).splitlines() expected = [ { - 'p': int('dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1' - 'f35147b795caea923f0d3577158f8a0c89dabd1962c2c453306b5d70' - 'cacfb01430aceb54e5a5fa6f9340d3bd2da612fceeb76b0ec1ebfae6' - '35a56ab141b108e00dc76eefe2edd0c514c21c457457c39065dba9d0' - 'ecb7569c247172d8438ad2827b60435b', 16), - 'q': int('e956602b83d195dbe945b3ac702fc61f81571f1d', 16), - 'g': int('d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe' - '548c234895baa77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6' - 'edb127a4b5d75cd8b46608bfa148249dffdb59807c5d7dde3fe3080c' - 'a3a2d28312142becb1fa8e24003e21c7287108174b95d5bc711e1c8d' - '9b1076784f5dc37a964a5e51390da713', 16), - 'digest_algorithm': 'SHA-1', - 'msg': binascii.unhexlify( - b'0fe1bfee500bdb76026099b1d37553f6bdfe48c82094ef98cb309dd77733' - b'0bedfaa2f94c823ef74ef4074b50d8706041ac0e371c7c22dcf70263b8d6' - b'0e17a86c7c379cfda8f22469e0df9d49d59439fc99891873628fff25dda5' - b'fac5ac794e948babdde968143ba05f1128f34fdad5875edc4cd71c6c24ba' - b'2060ffbd439ce2b3'), - 'x': int('1d93010c29ecfc432188942f46f19f44f0e1bb5d', 16), - 'y': int('6240ea0647117c38fe705106d56db578f3e10130928452d4f3587881' - 'b8a2bc6873a8befc3237f20914e2a91c7f07a928ee22adeed23d74ab' - '7f82ea11f70497e578f7a9b4cbd6f10226222b0b4da2ea1e49813d6b' - 'b9882fbf675c0846bb80cc891857b89b0ef1beb6cce3378a9aab5d66' - 'ad4cb9277cf447dfe1e64434749432fb', 16), - 'r': int('b5af307867fb8b54390013cc67020ddf1f2c0b81', 16), - 's': int('620d3b22ab5031440c3e35eab6f481298f9e9f08', 16), - 'result': 'P'}, - { - 'p': int('dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1' - 'f35147b795caea923f0d3577158f8a0c89dabd1962c2c453306b5d70' - 'cacfb01430aceb54e5a5fa6f9340d3bd2da612fceeb76b0ec1ebfae6' - '35a56ab141b108e00dc76eefe2edd0c514c21c457457c39065dba9d0' - 'ecb7569c247172d8438ad2827b60435b', 16), - 'q': int('e956602b83d195dbe945b3ac702fc61f81571f1d', 16), - 'g': int('d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe' - '548c234895baa77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6' - 'edb127a4b5d75cd8b46608bfa148249dffdb59807c5d7dde3fe3080c' - 'a3a2d28312142becb1fa8e24003e21c7287108174b95d5bc711e1c8d' - '9b1076784f5dc37a964a5e51390da713', 16), - 'digest_algorithm': 'SHA-1', - 'msg': binascii.unhexlify( - b'97d50898025d2f9ba633866e968ca75e969d394edba6517204cb3dd537c2' - b'ba38778a2dc9dbc685a915e5676fcd43bc3726bc59ce3d7a9fae35565082' - b'a069c139fa37c90d922b126933db3fa6c5ef6b1edf00d174a51887bb7690' - b'9c6a94fe994ecc7b7fc8f26113b17f30f9d01693df99a125b4f17e184331' - b'c6b6e8ca00f54f3a'), - 'x': int('350e13534692a7e0c4b7d58836046c436fbb2322', 16), - 'y': int('69974de550fe6bd3099150faea1623ad3fb6d9bf23a07215093f3197' - '25ad0877accffd291b6da18eb0cbe51676ceb0977504eb97c27c0b19' - '1883f72fb2710a9fbd8bcf13be0bf854410b32f42b33ec89d3cc1cf8' - '92bcd536c4195ca9ada302ad600c3408739935d77dc247529ca47f84' - '4cc86f5016a2fe962c6e20ca7c4d4e8f', 16), - 'r': int('b5d05faa7005764e8dae0327c5bf1972ff7681b9', 16), - 's': int('18ea15bd9f00475b25204cbc23f8c23e01588015', 16), - 'result': 'F'}, - { - 'p': int('e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a4' - '6b989e59f4d98425ee3c932fa3c2b6f637bdb6545bec526faa037e1' - '1f5578a4363b9fca5eba60d6a9cbaa2befd04141d989c7356285132' - 'c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f8cc7949631fd0' - 'e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c' - '851ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2d' - 'a293a01622cf43c6dd79625d41ba8f9ef7e3086ab39134283d8e96c' - '89249488120fd061e4a87d34af41069c0b4fd3934c31b589cbe85b6' - '8b912718d5dab859fda7082511fad1d152044905005546e19b14aa9' - '6585a55269bf2b831', 16), - 'q': int('8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b3' - '8bd43db2f', 16), - 'g': int('dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05' - 'aab636528b7b1fe9cd33765f853d6dbe13d09f2681f8c7b1ed7886a' - 'aed70c7bd76dbe858ffb8bd86235ddf759244678f428c6519af593d' - 'c94eeadbd9852ba2b3d61664e8d58c29d2039af3c3d6d16f90988f6' - 'a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84' - 'c763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a' - '34c077c5aa8026cb2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8' - 'f2e91316905b6add1fd22e83bc2f089f1d5e6a6e6707c18ff55ddcb' - '7954e8bceaf0efc4e8314910c03b0e51175f344faafee476a373ac9' - '5743cec712b72cf2e', 16), - 'digest_algorithm': 'SHA-384', - 'msg': binascii.unhexlify( - b'6cd6ccfd66bcd832189c5f0c77994210e3bf2c43416f0fe77c4e92f31c5' - b'369538dc2c003f146c5ac79df43194ccf3c44d470d9f1083bd15b99b5bc' - b'f88c32d8a9021f09ea2288d7b3bf345a12aef3949c1e121b9fb371a67c2' - b'd1377364206ac839dd78483561426bda0303f285aa12e9c45d3cdfc6bea' - b'e3549703b187deeb3296'), - 'x': int('56c897b5938ad5b3d437d7e4826da586a6b3be15e893fa1aaa946f2' - '0a028b6b3', 16), - 'y': int('38ad44489e1a5778b9689f4dcf40e2acf23840fb954e987d6e8cb62' - '9106328ac64e1f3c3eba48b21176ad4afe3b733bead382ee1597e1b' - '83e4b43424f2daaba04e5bd79e1436693ac2bddb79a298f026e57e2' - '00a252efd1e848a4a2e90be6e78f5242b468b9c0c6d2615047a5a40' - 'b9ae7e57a519114db55bf3bed65e580f894b094630ca9c217f6accd' - '091e72d2f22da620044ff372d7273f9445017fad492959e59600b74' - '94dbe766a03e40125d4e6747c76f68a5b0cdc0e7d7cee12d08c6fb7' - 'd0fb049e420a33405075ed4463296345ca695fb7feab7c1b5333ae5' - '19fcd4bb6a043f4555378969114743d4face96cad31c0e0089da4e3' - 'f61b6d7dabc088ab7', 16), - 'r': int('3b85b17be240ed658beb3652c9d93e8e9eea160d35ee24596143058' - '02963374e', 16), - 's': int('726800a5174a53b56dce86064109c0273cd11fcfa3c92c5cd6aa910' - '260c0e3c7', 16), - 'result': 'F'}, - { - 'p': int('e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a4' - '6b989e59f4d98425ee3c932fa3c2b6f637bdb6545bec526faa037e1' - '1f5578a4363b9fca5eba60d6a9cbaa2befd04141d989c7356285132' - 'c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f8cc7949631fd0' - 'e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c' - '851ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2d' - 'a293a01622cf43c6dd79625d41ba8f9ef7e3086ab39134283d8e96c' - '89249488120fd061e4a87d34af41069c0b4fd3934c31b589cbe85b6' - '8b912718d5dab859fda7082511fad1d152044905005546e19b14aa9' - '6585a55269bf2b831', 16), - 'q': int('8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b3' - '8bd43db2f', 16), - 'g': int('dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05' - 'aab636528b7b1fe9cd33765f853d6dbe13d09f2681f8c7b1ed7886a' - 'aed70c7bd76dbe858ffb8bd86235ddf759244678f428c6519af593d' - 'c94eeadbd9852ba2b3d61664e8d58c29d2039af3c3d6d16f90988f6' - 'a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84' - 'c763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a' - '34c077c5aa8026cb2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8' - 'f2e91316905b6add1fd22e83bc2f089f1d5e6a6e6707c18ff55ddcb' - '7954e8bceaf0efc4e8314910c03b0e51175f344faafee476a373ac9' - '5743cec712b72cf2e', 16), - 'digest_algorithm': 'SHA-384', - 'msg': binascii.unhexlify( - b'3ad6b0884f358dea09c31a9abc40c45a6000611fc2b907b30eac00413fd' - b'2819de7015488a411609d46c499b8f7afa1b78b352ac7f8535bd805b8ff' - b'2a5eae557098c668f7ccd73af886d6823a6d456c29931ee864ed46d7673' - b'82785728c2a83fcff5271007d2a67d06fa205fd7b9d1a42ea5d6dc76e5e' - b'18a9eb148cd1e8b262ae'), - 'x': int('2faf566a9f057960f1b50c69508f483d9966d6e35743591f3a677a9' - 'dc40e1555', 16), - 'y': int('926425d617babe87c442b03903e32ba5bbf0cd9d602b59c4df791a4d' - '64a6d4333ca0c0d370552539197d327dcd1bbf8c454f24b03fc7805f' - '862db34c7b066ddfddbb11dbd010b27123062d028fe041cb56a2e774' - '88348ae0ab6705d87aac4d4e9e6600e9e706326d9979982cffa839be' - 'b9eacc3963bcca455a507e80c1c37ad4e765b2c9c0477a075e9bc584' - 'feacdf3a35a9391d4711f14e197c54022282bfed9a191213d64127f1' - '7a9c5affec26e0c71f15d3a5b16098fec118c45bf8bb2f3b1560df09' - '49254c1c0aeb0a16d5a95a40fab8521fbe8ea77c51169b587cc3360e' - '5733e6a23b9fded8c40724ea1f9e93614b3a6c9b4f8dbbe915b79449' - '7227ba62', 16), - 'r': int('343ea0a9e66277380f604d5880fca686bffab69ca97bfba015a102a' - '7e23dce0e', 16), - 's': int('6258488c770e0f5ad7b9da8bade5023fc0d17c6ec517bd08d53e6dc' - '01ac5c2b3', 16), - 'result': 'P'} + "p": int( + "dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1" + "f35147b795caea923f0d3577158f8a0c89dabd1962c2c453306b5d70" + "cacfb01430aceb54e5a5fa6f9340d3bd2da612fceeb76b0ec1ebfae6" + "35a56ab141b108e00dc76eefe2edd0c514c21c457457c39065dba9d0" + "ecb7569c247172d8438ad2827b60435b", + 16, + ), + "q": int("e956602b83d195dbe945b3ac702fc61f81571f1d", 16), + "g": int( + "d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe" + "548c234895baa77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6" + "edb127a4b5d75cd8b46608bfa148249dffdb59807c5d7dde3fe3080c" + "a3a2d28312142becb1fa8e24003e21c7287108174b95d5bc711e1c8d" + "9b1076784f5dc37a964a5e51390da713", + 16, + ), + "digest_algorithm": "SHA-1", + "msg": binascii.unhexlify( + b"0fe1bfee500bdb76026099b1d37553f6bdfe48c82094ef98cb309dd77733" + b"0bedfaa2f94c823ef74ef4074b50d8706041ac0e371c7c22dcf70263b8d6" + b"0e17a86c7c379cfda8f22469e0df9d49d59439fc99891873628fff25dda5" + b"fac5ac794e948babdde968143ba05f1128f34fdad5875edc4cd71c6c24ba" + b"2060ffbd439ce2b3" + ), + "x": int("1d93010c29ecfc432188942f46f19f44f0e1bb5d", 16), + "y": int( + "6240ea0647117c38fe705106d56db578f3e10130928452d4f3587881" + "b8a2bc6873a8befc3237f20914e2a91c7f07a928ee22adeed23d74ab" + "7f82ea11f70497e578f7a9b4cbd6f10226222b0b4da2ea1e49813d6b" + "b9882fbf675c0846bb80cc891857b89b0ef1beb6cce3378a9aab5d66" + "ad4cb9277cf447dfe1e64434749432fb", + 16, + ), + "r": int("b5af307867fb8b54390013cc67020ddf1f2c0b81", 16), + "s": int("620d3b22ab5031440c3e35eab6f481298f9e9f08", 16), + "result": "P", + }, + { + "p": int( + "dc5bf3a88b2d99e4c95cdd7a0501cc38630d425cf5c390af3429cff1" + "f35147b795caea923f0d3577158f8a0c89dabd1962c2c453306b5d70" + "cacfb01430aceb54e5a5fa6f9340d3bd2da612fceeb76b0ec1ebfae6" + "35a56ab141b108e00dc76eefe2edd0c514c21c457457c39065dba9d0" + "ecb7569c247172d8438ad2827b60435b", + 16, + ), + "q": int("e956602b83d195dbe945b3ac702fc61f81571f1d", 16), + "g": int( + "d7eb9ca20a3c7a079606bafc4c9261ccaba303a5dc9fe9953f197dfe" + "548c234895baa77f441ee6a2d97b909cbbd26ff7b869d24cae51b5c6" + "edb127a4b5d75cd8b46608bfa148249dffdb59807c5d7dde3fe3080c" + "a3a2d28312142becb1fa8e24003e21c7287108174b95d5bc711e1c8d" + "9b1076784f5dc37a964a5e51390da713", + 16, + ), + "digest_algorithm": "SHA-1", + "msg": binascii.unhexlify( + b"97d50898025d2f9ba633866e968ca75e969d394edba6517204cb3dd537c2" + b"ba38778a2dc9dbc685a915e5676fcd43bc3726bc59ce3d7a9fae35565082" + b"a069c139fa37c90d922b126933db3fa6c5ef6b1edf00d174a51887bb7690" + b"9c6a94fe994ecc7b7fc8f26113b17f30f9d01693df99a125b4f17e184331" + b"c6b6e8ca00f54f3a" + ), + "x": int("350e13534692a7e0c4b7d58836046c436fbb2322", 16), + "y": int( + "69974de550fe6bd3099150faea1623ad3fb6d9bf23a07215093f3197" + "25ad0877accffd291b6da18eb0cbe51676ceb0977504eb97c27c0b19" + "1883f72fb2710a9fbd8bcf13be0bf854410b32f42b33ec89d3cc1cf8" + "92bcd536c4195ca9ada302ad600c3408739935d77dc247529ca47f84" + "4cc86f5016a2fe962c6e20ca7c4d4e8f", + 16, + ), + "r": int("b5d05faa7005764e8dae0327c5bf1972ff7681b9", 16), + "s": int("18ea15bd9f00475b25204cbc23f8c23e01588015", 16), + "result": "F", + }, + { + "p": int( + "e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a4" + "6b989e59f4d98425ee3c932fa3c2b6f637bdb6545bec526faa037e1" + "1f5578a4363b9fca5eba60d6a9cbaa2befd04141d989c7356285132" + "c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f8cc7949631fd0" + "e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c" + "851ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2d" + "a293a01622cf43c6dd79625d41ba8f9ef7e3086ab39134283d8e96c" + "89249488120fd061e4a87d34af41069c0b4fd3934c31b589cbe85b6" + "8b912718d5dab859fda7082511fad1d152044905005546e19b14aa9" + "6585a55269bf2b831", + 16, + ), + "q": int( + "8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b3" + "8bd43db2f", + 16, + ), + "g": int( + "dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05" + "aab636528b7b1fe9cd33765f853d6dbe13d09f2681f8c7b1ed7886a" + "aed70c7bd76dbe858ffb8bd86235ddf759244678f428c6519af593d" + "c94eeadbd9852ba2b3d61664e8d58c29d2039af3c3d6d16f90988f6" + "a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84" + "c763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a" + "34c077c5aa8026cb2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8" + "f2e91316905b6add1fd22e83bc2f089f1d5e6a6e6707c18ff55ddcb" + "7954e8bceaf0efc4e8314910c03b0e51175f344faafee476a373ac9" + "5743cec712b72cf2e", + 16, + ), + "digest_algorithm": "SHA-384", + "msg": binascii.unhexlify( + b"6cd6ccfd66bcd832189c5f0c77994210e3bf2c43416f0fe77c4e92f31c5" + b"369538dc2c003f146c5ac79df43194ccf3c44d470d9f1083bd15b99b5bc" + b"f88c32d8a9021f09ea2288d7b3bf345a12aef3949c1e121b9fb371a67c2" + b"d1377364206ac839dd78483561426bda0303f285aa12e9c45d3cdfc6bea" + b"e3549703b187deeb3296" + ), + "x": int( + "56c897b5938ad5b3d437d7e4826da586a6b3be15e893fa1aaa946f2" + "0a028b6b3", + 16, + ), + "y": int( + "38ad44489e1a5778b9689f4dcf40e2acf23840fb954e987d6e8cb62" + "9106328ac64e1f3c3eba48b21176ad4afe3b733bead382ee1597e1b" + "83e4b43424f2daaba04e5bd79e1436693ac2bddb79a298f026e57e2" + "00a252efd1e848a4a2e90be6e78f5242b468b9c0c6d2615047a5a40" + "b9ae7e57a519114db55bf3bed65e580f894b094630ca9c217f6accd" + "091e72d2f22da620044ff372d7273f9445017fad492959e59600b74" + "94dbe766a03e40125d4e6747c76f68a5b0cdc0e7d7cee12d08c6fb7" + "d0fb049e420a33405075ed4463296345ca695fb7feab7c1b5333ae5" + "19fcd4bb6a043f4555378969114743d4face96cad31c0e0089da4e3" + "f61b6d7dabc088ab7", + 16, + ), + "r": int( + "3b85b17be240ed658beb3652c9d93e8e9eea160d35ee24596143058" + "02963374e", + 16, + ), + "s": int( + "726800a5174a53b56dce86064109c0273cd11fcfa3c92c5cd6aa910" + "260c0e3c7", + 16, + ), + "result": "F", + }, + { + "p": int( + "e7c1c86125db9ef417da1ced7ea0861bdad629216a3f3c745df42a4" + "6b989e59f4d98425ee3c932fa3c2b6f637bdb6545bec526faa037e1" + "1f5578a4363b9fca5eba60d6a9cbaa2befd04141d989c7356285132" + "c2eaf74f2d868521cdc0a17ae9a2546ef863027d3f8cc7949631fd0" + "e2971417a912c8b8c5c989730db6ea6e8baee0e667850429038093c" + "851ccb6fb173bb081e0efe0bd7450e0946888f89f75e443ab93ef2d" + "a293a01622cf43c6dd79625d41ba8f9ef7e3086ab39134283d8e96c" + "89249488120fd061e4a87d34af41069c0b4fd3934c31b589cbe85b6" + "8b912718d5dab859fda7082511fad1d152044905005546e19b14aa9" + "6585a55269bf2b831", + 16, + ), + "q": int( + "8e056ec9d4b7acb580087a6ed9ba3478711bb025d5b8d9c731ef9b3" + "8bd43db2f", + 16, + ), + "g": int( + "dc2bfb9776786ad310c8b0cdcbba3062402613c67e6959a8d8d1b05" + "aab636528b7b1fe9cd33765f853d6dbe13d09f2681f8c7b1ed7886a" + "aed70c7bd76dbe858ffb8bd86235ddf759244678f428c6519af593d" + "c94eeadbd9852ba2b3d61664e8d58c29d2039af3c3d6d16f90988f6" + "a8c824569f3d48050e30896a9e17cd0232ef01ab8790008f6973b84" + "c763a72f4ae8b485abfb7e8efeb86808fa2b281d3e5d65d28f5992a" + "34c077c5aa8026cb2fbc34a45f7e9bd216b10e6f12ecb172e9a6eb8" + "f2e91316905b6add1fd22e83bc2f089f1d5e6a6e6707c18ff55ddcb" + "7954e8bceaf0efc4e8314910c03b0e51175f344faafee476a373ac9" + "5743cec712b72cf2e", + 16, + ), + "digest_algorithm": "SHA-384", + "msg": binascii.unhexlify( + b"3ad6b0884f358dea09c31a9abc40c45a6000611fc2b907b30eac00413fd" + b"2819de7015488a411609d46c499b8f7afa1b78b352ac7f8535bd805b8ff" + b"2a5eae557098c668f7ccd73af886d6823a6d456c29931ee864ed46d7673" + b"82785728c2a83fcff5271007d2a67d06fa205fd7b9d1a42ea5d6dc76e5e" + b"18a9eb148cd1e8b262ae" + ), + "x": int( + "2faf566a9f057960f1b50c69508f483d9966d6e35743591f3a677a9" + "dc40e1555", + 16, + ), + "y": int( + "926425d617babe87c442b03903e32ba5bbf0cd9d602b59c4df791a4d" + "64a6d4333ca0c0d370552539197d327dcd1bbf8c454f24b03fc7805f" + "862db34c7b066ddfddbb11dbd010b27123062d028fe041cb56a2e774" + "88348ae0ab6705d87aac4d4e9e6600e9e706326d9979982cffa839be" + "b9eacc3963bcca455a507e80c1c37ad4e765b2c9c0477a075e9bc584" + "feacdf3a35a9391d4711f14e197c54022282bfed9a191213d64127f1" + "7a9c5affec26e0c71f15d3a5b16098fec118c45bf8bb2f3b1560df09" + "49254c1c0aeb0a16d5a95a40fab8521fbe8ea77c51169b587cc3360e" + "5733e6a23b9fded8c40724ea1f9e93614b3a6c9b4f8dbbe915b79449" + "7227ba62", + 16, + ), + "r": int( + "343ea0a9e66277380f604d5880fca686bffab69ca97bfba015a102a" + "7e23dce0e", + 16, + ), + "s": int( + "6258488c770e0f5ad7b9da8bade5023fc0d17c6ec517bd08d53e6dc" + "01ac5c2b3", + 16, + ), + "result": "P", + }, ] assert expected == load_fips_dsa_sig_vectors(vector_data) def test_load_fips_dsa_sig_gen_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.2 # "SigGen" information for "dsa2_values" # Mod sizes selected: SHA-1 L=1024, N=160, SHA-256 L=2048, N=256 @@ -2145,155 +2436,219 @@ def test_load_fips_dsa_sig_gen_vectors(): 60bc1dc46f78ceaaa2c02f5375dd82e708744aa40b15799eb81d7e5b1a R = bcd490568c0a89ba311bef88ea4f4b03d273e793722722327095a378dd6f3522 S = 74498fc43091fcdd2d1ef0775f8286945a01cd72b805256b0451f9cbd943cf82 - """).splitlines() + """ + ).splitlines() expected = [ { - 'p': int('a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed325' - '6b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4' - 'c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b0' - '2e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd' - '5ebe2d1229681b5b06439ac9c7e9d8bde283', 16), - 'q': int('f85f0f83ac4df7ea0cdf8f469bfeeaea14156495', 16), - 'g': int('2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df1' - '31f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40' - 'b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd' - '64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909' - 'a6a3a99bbe089216368171bd0ba81de4fe33', 16), - 'digest_algorithm': 'SHA-1', - 'msg': binascii.unhexlify( - b'3b46736d559bd4e0c2c1b2553a33ad3c6cf23cac998d3d0c0e8fa4b19bc' - b'a06f2f386db2dcff9dca4f40ad8f561ffc308b46c5f31a7735b5fa7e0f9' - b'e6cb512e63d7eea05538d66a75cd0d4234b5ccf6c1715ccaaf9cdc0a222' - b'8135f716ee9bdee7fc13ec27a03a6d11c5c5b3685f51900b1337153bc6c' - b'4e8f52920c33fa37f4e7'), - 'y': int('313fd9ebca91574e1c2eebe1517c57e0c21b0209872140c5328761b' - 'bb2450b33f1b18b409ce9ab7c4cd8fda3391e8e34868357c199e16a' - '6b2eba06d6749def791d79e95d3a4d09b24c392ad89dbf100995ae1' - '9c01062056bb14bce005e8731efde175f95b975089bdcdaea562b32' - '786d96f5a31aedf75364008ad4fffebb970b', 16), - 'r': int('50ed0e810e3f1c7cb6ac62332058448bd8b284c0', 16), - 's': int('c6aded17216b46b7e4b6f2a97c1ad7cc3da83fde', 16)}, - { - 'p': int('a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed325' - '6b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4' - 'c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b0' - '2e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd' - '5ebe2d1229681b5b06439ac9c7e9d8bde283', 16), - 'q': int('f85f0f83ac4df7ea0cdf8f469bfeeaea14156495', 16), - 'g': int('2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df1' - '31f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40' - 'b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd' - '64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909' - 'a6a3a99bbe089216368171bd0ba81de4fe33', 16), - 'digest_algorithm': 'SHA-1', - 'msg': binascii.unhexlify( - b'd2bcb53b044b3e2e4b61ba2f91c0995fb83a6a97525e66441a3b489d959' - b'4238bc740bdeea0f718a769c977e2de003877b5d7dc25b182ae533db33e' - b'78f2c3ff0645f2137abc137d4e7d93ccf24f60b18a820bc07c7b4b5fe08' - b'b4f9e7d21b256c18f3b9d49acc4f93e2ce6f3754c7807757d2e11760426' - b'12cb32fc3f4f70700e25'), - 'y': int('29bdd759aaa62d4bf16b4861c81cf42eac2e1637b9ecba512bdbc13' - 'ac12a80ae8de2526b899ae5e4a231aef884197c944c732693a634d7' - '659abc6975a773f8d3cd5a361fe2492386a3c09aaef12e4a7e73ad7' - 'dfc3637f7b093f2c40d6223a195c136adf2ea3fbf8704a675aa7817' - 'aa7ec7f9adfb2854d4e05c3ce7f76560313b', 16), - 'r': int('a26c00b5750a2d27fe7435b93476b35438b4d8ab', 16), - 's': int('61c9bfcb2938755afa7dad1d1e07c6288617bf70', 16)}, - { - 'p': int('a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe1' - '3a059705e663230a377bf7323a8fa117100200bfd5adf857393b0bb' - 'd67906c081e585410e38480ead51684dac3a38f7b64c9eb109f1973' - '9a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4' - '1047dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543e' - 'adb7718f317bf5d9577a6156561b082a10029cd44012b18de684450' - '9fe058ba87980792285f2750969fe89c2cd6498db3545638d5379d1' - '25dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31' - 'b9f96d5f34445ceb6309f2f6d2c8dde06441e87980d303ef9a1ff00' - '7e8be2f0be06cc15f', 16), - 'q': int('e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e686' - '04d6b9dfb', 16), - 'g': int('5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa' - '104abfb5d84579a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff' - '8071d63b9bb956e547af3a8df99e5d3061979652ff96b765cb3ee49' - '3643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533' - '0392a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec' - '1354f09e2eb78e95f037a5804b6171659f88715ce1a9b0cc90c27f3' - '5ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372f4240de8' - '347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d' - '2183f1ba3b7b45a68f1ff1893caf69a827802f7b6a48d51da6fbefb' - '64fd9a6c5b75c4561', 16), - 'digest_algorithm': 'SHA-256', - 'msg': binascii.unhexlify( - b'4e3a28bcf90d1d2e75f075d9fbe55b36c5529b17bc3a9ccaba6935c9e20' - b'548255b3dfae0f91db030c12f2c344b3a29c4151c5b209f5e319fdf1c23' - b'b190f64f1fe5b330cb7c8fa952f9d90f13aff1cb11d63181da9efc6f7e1' - b'5bfed4862d1a62c7dcf3ba8bf1ff304b102b1ec3f1497dddf09712cf323' - b'f5610a9d10c3d9132659'), - 'y': int('5a55dceddd1134ee5f11ed85deb4d634a3643f5f36dc3a706892564' - '69a0b651ad22880f14ab85719434f9c0e407e60ea420e2a0cd29422' - 'c4899c416359dbb1e592456f2b3cce233259c117542fd05f31ea25b' - '015d9121c890b90e0bad033be1368d229985aac7226d1c8c2eab325' - 'ef3b2cd59d3b9f7de7dbc94af1a9339eb430ca36c26c46ecfa6c548' - '1711496f624e188ad7540ef5df26f8efacb820bd17a1f618acb50c9' - 'bc197d4cb7ccac45d824a3bf795c234b556b06aeb92917345325208' - '4003f69fe98045fe74002ba658f93475622f76791d9b2623d1b5fff' - '2cc16844746efd2d30a6a8134bfc4c8cc80a46107901fb973c28fc5' - '53130f3286c1489da', 16), - 'r': int('633055e055f237c38999d81c397848c38cce80a55b649d9e7905c29' - '8e2a51447', 16), - 's': int('2bbf68317660ec1e4b154915027b0bc00ee19cfc0bf75d01930504f' - '2ce10a8b0', 16)}, - { - 'p': int('a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe1' - '3a059705e663230a377bf7323a8fa117100200bfd5adf857393b0bb' - 'd67906c081e585410e38480ead51684dac3a38f7b64c9eb109f1973' - '9a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4' - '1047dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543e' - 'adb7718f317bf5d9577a6156561b082a10029cd44012b18de684450' - '9fe058ba87980792285f2750969fe89c2cd6498db3545638d5379d1' - '25dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31' - 'b9f96d5f34445ceb6309f2f6d2c8dde06441e87980d303ef9a1ff00' - '7e8be2f0be06cc15f', 16), - 'q': int('e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e686' - '04d6b9dfb', 16), - 'g': int('5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa' - '104abfb5d84579a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff' - '8071d63b9bb956e547af3a8df99e5d3061979652ff96b765cb3ee49' - '3643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533' - '0392a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec' - '1354f09e2eb78e95f037a5804b6171659f88715ce1a9b0cc90c27f3' - '5ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372f4240de8' - '347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d' - '2183f1ba3b7b45a68f1ff1893caf69a827802f7b6a48d51da6fbefb' - '64fd9a6c5b75c4561', 16), - 'digest_algorithm': 'SHA-256', - 'msg': binascii.unhexlify( - b'a733b3f588d5ac9b9d4fe2f804df8c256403a9f8eef6f191fc48e1267fb' - b'5b4d546ba11e77b667844e489bf0d5f72990aeb061d01ccd7949a23def7' - b'4a803b7d92d51abfadeb4885ffd8ffd58ab87548a15c087a39b8993b2fa' - b'64c9d31a594eeb7512da16955834336a234435c5a9d0dd9b15a94e11615' - b'4dea63fdc8dd7a512181'), - 'y': int('356ed47537fbf02cb30a8cee0537f300dff1d0c467399ce70b87a87' - '58d5ec9dd256246fccaeb9dfe109f2a984f2ddaa87aad54ce0d31f9' - '07e504521baf4207d7073b0a4a9fc67d8ddda99f87aed6e0367cec2' - '7f9c608af743bf1ee6e11d55a182d43b024ace534029b866f642282' - '8bb81a39aae9601ee81c7f81dd358e69f4e2edfa4654d8a65bc6431' - '1dc86aac4abc1fc7a3f65159661a0d8e288eb8d665cb0adf5ac3d6b' - 'a8e9453facf7542393ae24fd50451d3828086558f7ec528e284935a' - '53f67a1aa8e25d8ad5c4ad55d83aef883a4d9eeb6297e6a53f65049' - 'ba9e2c6b7953a760bc1dc46f78ceaaa2c02f5375dd82e708744aa40' - 'b15799eb81d7e5b1a', 16), - 'r': int('bcd490568c0a89ba311bef88ea4f4b03d273e793722722327095a37' - '8dd6f3522', 16), - 's': int('74498fc43091fcdd2d1ef0775f8286945a01cd72b805256b0451f9c' - 'bd943cf82', 16)} + "p": int( + "a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed325" + "6b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4" + "c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b0" + "2e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd" + "5ebe2d1229681b5b06439ac9c7e9d8bde283", + 16, + ), + "q": int("f85f0f83ac4df7ea0cdf8f469bfeeaea14156495", 16), + "g": int( + "2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df1" + "31f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40" + "b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd" + "64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909" + "a6a3a99bbe089216368171bd0ba81de4fe33", + 16, + ), + "digest_algorithm": "SHA-1", + "msg": binascii.unhexlify( + b"3b46736d559bd4e0c2c1b2553a33ad3c6cf23cac998d3d0c0e8fa4b19bc" + b"a06f2f386db2dcff9dca4f40ad8f561ffc308b46c5f31a7735b5fa7e0f9" + b"e6cb512e63d7eea05538d66a75cd0d4234b5ccf6c1715ccaaf9cdc0a222" + b"8135f716ee9bdee7fc13ec27a03a6d11c5c5b3685f51900b1337153bc6c" + b"4e8f52920c33fa37f4e7" + ), + "y": int( + "313fd9ebca91574e1c2eebe1517c57e0c21b0209872140c5328761b" + "bb2450b33f1b18b409ce9ab7c4cd8fda3391e8e34868357c199e16a" + "6b2eba06d6749def791d79e95d3a4d09b24c392ad89dbf100995ae1" + "9c01062056bb14bce005e8731efde175f95b975089bdcdaea562b32" + "786d96f5a31aedf75364008ad4fffebb970b", + 16, + ), + "r": int("50ed0e810e3f1c7cb6ac62332058448bd8b284c0", 16), + "s": int("c6aded17216b46b7e4b6f2a97c1ad7cc3da83fde", 16), + }, + { + "p": int( + "a8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed325" + "6b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4" + "c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b0" + "2e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd" + "5ebe2d1229681b5b06439ac9c7e9d8bde283", + 16, + ), + "q": int("f85f0f83ac4df7ea0cdf8f469bfeeaea14156495", 16), + "g": int( + "2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df1" + "31f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40" + "b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd" + "64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909" + "a6a3a99bbe089216368171bd0ba81de4fe33", + 16, + ), + "digest_algorithm": "SHA-1", + "msg": binascii.unhexlify( + b"d2bcb53b044b3e2e4b61ba2f91c0995fb83a6a97525e66441a3b489d959" + b"4238bc740bdeea0f718a769c977e2de003877b5d7dc25b182ae533db33e" + b"78f2c3ff0645f2137abc137d4e7d93ccf24f60b18a820bc07c7b4b5fe08" + b"b4f9e7d21b256c18f3b9d49acc4f93e2ce6f3754c7807757d2e11760426" + b"12cb32fc3f4f70700e25" + ), + "y": int( + "29bdd759aaa62d4bf16b4861c81cf42eac2e1637b9ecba512bdbc13" + "ac12a80ae8de2526b899ae5e4a231aef884197c944c732693a634d7" + "659abc6975a773f8d3cd5a361fe2492386a3c09aaef12e4a7e73ad7" + "dfc3637f7b093f2c40d6223a195c136adf2ea3fbf8704a675aa7817" + "aa7ec7f9adfb2854d4e05c3ce7f76560313b", + 16, + ), + "r": int("a26c00b5750a2d27fe7435b93476b35438b4d8ab", 16), + "s": int("61c9bfcb2938755afa7dad1d1e07c6288617bf70", 16), + }, + { + "p": int( + "a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe1" + "3a059705e663230a377bf7323a8fa117100200bfd5adf857393b0bb" + "d67906c081e585410e38480ead51684dac3a38f7b64c9eb109f1973" + "9a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4" + "1047dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543e" + "adb7718f317bf5d9577a6156561b082a10029cd44012b18de684450" + "9fe058ba87980792285f2750969fe89c2cd6498db3545638d5379d1" + "25dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31" + "b9f96d5f34445ceb6309f2f6d2c8dde06441e87980d303ef9a1ff00" + "7e8be2f0be06cc15f", + 16, + ), + "q": int( + "e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e686" + "04d6b9dfb", + 16, + ), + "g": int( + "5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa" + "104abfb5d84579a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff" + "8071d63b9bb956e547af3a8df99e5d3061979652ff96b765cb3ee49" + "3643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533" + "0392a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec" + "1354f09e2eb78e95f037a5804b6171659f88715ce1a9b0cc90c27f3" + "5ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372f4240de8" + "347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d" + "2183f1ba3b7b45a68f1ff1893caf69a827802f7b6a48d51da6fbefb" + "64fd9a6c5b75c4561", + 16, + ), + "digest_algorithm": "SHA-256", + "msg": binascii.unhexlify( + b"4e3a28bcf90d1d2e75f075d9fbe55b36c5529b17bc3a9ccaba6935c9e20" + b"548255b3dfae0f91db030c12f2c344b3a29c4151c5b209f5e319fdf1c23" + b"b190f64f1fe5b330cb7c8fa952f9d90f13aff1cb11d63181da9efc6f7e1" + b"5bfed4862d1a62c7dcf3ba8bf1ff304b102b1ec3f1497dddf09712cf323" + b"f5610a9d10c3d9132659" + ), + "y": int( + "5a55dceddd1134ee5f11ed85deb4d634a3643f5f36dc3a706892564" + "69a0b651ad22880f14ab85719434f9c0e407e60ea420e2a0cd29422" + "c4899c416359dbb1e592456f2b3cce233259c117542fd05f31ea25b" + "015d9121c890b90e0bad033be1368d229985aac7226d1c8c2eab325" + "ef3b2cd59d3b9f7de7dbc94af1a9339eb430ca36c26c46ecfa6c548" + "1711496f624e188ad7540ef5df26f8efacb820bd17a1f618acb50c9" + "bc197d4cb7ccac45d824a3bf795c234b556b06aeb92917345325208" + "4003f69fe98045fe74002ba658f93475622f76791d9b2623d1b5fff" + "2cc16844746efd2d30a6a8134bfc4c8cc80a46107901fb973c28fc5" + "53130f3286c1489da", + 16, + ), + "r": int( + "633055e055f237c38999d81c397848c38cce80a55b649d9e7905c29" + "8e2a51447", + 16, + ), + "s": int( + "2bbf68317660ec1e4b154915027b0bc00ee19cfc0bf75d01930504f" + "2ce10a8b0", + 16, + ), + }, + { + "p": int( + "a8adb6c0b4cf9588012e5deff1a871d383e0e2a85b5e8e03d814fe1" + "3a059705e663230a377bf7323a8fa117100200bfd5adf857393b0bb" + "d67906c081e585410e38480ead51684dac3a38f7b64c9eb109f1973" + "9a4517cd7d5d6291e8af20a3fbf17336c7bf80ee718ee087e322ee4" + "1047dabefbcc34d10b66b644ddb3160a28c0639563d71993a26543e" + "adb7718f317bf5d9577a6156561b082a10029cd44012b18de684450" + "9fe058ba87980792285f2750969fe89c2cd6498db3545638d5379d1" + "25dccf64e06c1af33a6190841d223da1513333a7c9d78462abaab31" + "b9f96d5f34445ceb6309f2f6d2c8dde06441e87980d303ef9a1ff00" + "7e8be2f0be06cc15f", + 16, + ), + "q": int( + "e71f8567447f42e75f5ef85ca20fe557ab0343d37ed09edc3f6e686" + "04d6b9dfb", + 16, + ), + "g": int( + "5ba24de9607b8998e66ce6c4f812a314c6935842f7ab54cd82b19fa" + "104abfb5d84579a623b2574b37d22ccae9b3e415e48f5c0f9bcbdff" + "8071d63b9bb956e547af3a8df99e5d3061979652ff96b765cb3ee49" + "3643544c75dbe5bb39834531952a0fb4b0378b3fcbb4c8b5800a533" + "0392a2a04e700bb6ed7e0b85795ea38b1b962741b3f33b9dde2f4ec" + "1354f09e2eb78e95f037a5804b6171659f88715ce1a9b0cc90c27f3" + "5ef2f10ff0c7c7a2bb0154d9b8ebe76a3d764aa879af372f4240de8" + "347937e5a90cec9f41ff2f26b8da9a94a225d1a913717d73f10397d" + "2183f1ba3b7b45a68f1ff1893caf69a827802f7b6a48d51da6fbefb" + "64fd9a6c5b75c4561", + 16, + ), + "digest_algorithm": "SHA-256", + "msg": binascii.unhexlify( + b"a733b3f588d5ac9b9d4fe2f804df8c256403a9f8eef6f191fc48e1267fb" + b"5b4d546ba11e77b667844e489bf0d5f72990aeb061d01ccd7949a23def7" + b"4a803b7d92d51abfadeb4885ffd8ffd58ab87548a15c087a39b8993b2fa" + b"64c9d31a594eeb7512da16955834336a234435c5a9d0dd9b15a94e11615" + b"4dea63fdc8dd7a512181" + ), + "y": int( + "356ed47537fbf02cb30a8cee0537f300dff1d0c467399ce70b87a87" + "58d5ec9dd256246fccaeb9dfe109f2a984f2ddaa87aad54ce0d31f9" + "07e504521baf4207d7073b0a4a9fc67d8ddda99f87aed6e0367cec2" + "7f9c608af743bf1ee6e11d55a182d43b024ace534029b866f642282" + "8bb81a39aae9601ee81c7f81dd358e69f4e2edfa4654d8a65bc6431" + "1dc86aac4abc1fc7a3f65159661a0d8e288eb8d665cb0adf5ac3d6b" + "a8e9453facf7542393ae24fd50451d3828086558f7ec528e284935a" + "53f67a1aa8e25d8ad5c4ad55d83aef883a4d9eeb6297e6a53f65049" + "ba9e2c6b7953a760bc1dc46f78ceaaa2c02f5375dd82e708744aa40" + "b15799eb81d7e5b1a", + 16, + ), + "r": int( + "bcd490568c0a89ba311bef88ea4f4b03d273e793722722327095a37" + "8dd6f3522", + 16, + ), + "s": int( + "74498fc43091fcdd2d1ef0775f8286945a01cd72b805256b0451f9c" + "bd943cf82", + 16, + ), + }, ] assert expected == load_fips_dsa_sig_vectors(vector_data) def test_load_fips_ecdsa_key_pair_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # "Key Pair" information # Curves selected: P-192 K-233 B-571 @@ -2346,67 +2701,97 @@ def test_load_fips_ecdsa_key_pair_vectors(): 7d6289980819292a719eb247195529ea60ad62862de0a26c72bfc49ecc81c2f9ed704e3168f Qy = 0721496cf16f988b1aabef3368450441df8439a0ca794170f270ead56203d675b57f5\ a4090a3a2f602a77ff3bac1417f7e25a683f667b3b91f105016a47afad46a0367b18e2bdf0c - """).splitlines() + """ + ).splitlines() expected = [ { "curve": "secp192r1", "d": int("e5ce89a34adddf25ff3bf1ffe6803f57d0220de3118798ea", 16), "x": int("8abf7b3ceb2b02438af19543d3e5b1d573fa9ac60085840f", 16), - "y": int("a87f80182dcd56a6a061f81f7da393e7cffd5e0738c6b245", 16) + "y": int("a87f80182dcd56a6a061f81f7da393e7cffd5e0738c6b245", 16), }, - { "curve": "secp192r1", "d": int("7d14435714ad13ff23341cb567cc91198ff8617cc39751b2", 16), "x": int("39dc723b19527daa1e80425209c56463481b9b47c51f8cbd", 16), "y": int("432a3e84f2a16418834fabaf6b7d2341669512951f1672ad", 16), }, - { "curve": "sect233k1", - "d": int("1da7422b50e3ff051f2aaaed10acea6cbf6110c517da2f4e" - "aca8b5b87", 16), - "x": int("1c7475da9a161e4b3f7d6b086494063543a979e34b8d7ac4" - "4204d47bf9f", 16), - "y": int("131cbd433f112871cc175943991b6a1350bf0cdd57ed8c83" - "1a2a7710c92", 16), + "d": int( + "1da7422b50e3ff051f2aaaed10acea6cbf6110c517da2f4e" "aca8b5b87", + 16, + ), + "x": int( + "1c7475da9a161e4b3f7d6b086494063543a979e34b8d7ac4" + "4204d47bf9f", + 16, + ), + "y": int( + "131cbd433f112871cc175943991b6a1350bf0cdd57ed8c83" + "1a2a7710c92", + 16, + ), }, - { "curve": "sect233k1", - "d": int("530951158f7b1586978c196603c12d25607d2cb0557efadb" - "23cd0ce8", 16), - "x": int("d37500a0391d98d3070d493e2b392a2c79dc736c097ed24b" - "7dd5ddec44", 16), - "y": int("1d996cc79f37d8dba143d4a8ad9a8a60ed7ea760aae1ddba" - "34d883f65d9", 16), + "d": int( + "530951158f7b1586978c196603c12d25607d2cb0557efadb" "23cd0ce8", + 16, + ), + "x": int( + "d37500a0391d98d3070d493e2b392a2c79dc736c097ed24b" + "7dd5ddec44", + 16, + ), + "y": int( + "1d996cc79f37d8dba143d4a8ad9a8a60ed7ea760aae1ddba" + "34d883f65d9", + 16, + ), }, - { "curve": "sect571r1", - "d": int("1443e93c7ef6802655f641ecbe95e75f1f15b02d2e172f49" - "a32e22047d5c00ebe1b3ff0456374461360667dbf07bc67f" - "7d6135ee0d1d46a226a530fefe8ebf3b926e9fbad8d57a6", 16), - "x": int("53e3710d8e7d4138db0a369c97e5332c1be38a20a4a84c36" - "f5e55ea9fd6f34545b864ea64f319e74b5ee9e4e1fa1b7c5" - "b2db0e52467518f8c45b658824871d5d4025a6320ca06f8", 16), - "y": int("3a22cfd370c4a449b936ae97ab97aab11c57686cca99d14e" - "f184f9417fad8bedae4df8357e3710bcda1833b30e297d4b" - "f637938b995d231e557d13f062e81e830af5ab052208ead", 16), + "d": int( + "1443e93c7ef6802655f641ecbe95e75f1f15b02d2e172f49" + "a32e22047d5c00ebe1b3ff0456374461360667dbf07bc67f" + "7d6135ee0d1d46a226a530fefe8ebf3b926e9fbad8d57a6", + 16, + ), + "x": int( + "53e3710d8e7d4138db0a369c97e5332c1be38a20a4a84c36" + "f5e55ea9fd6f34545b864ea64f319e74b5ee9e4e1fa1b7c5" + "b2db0e52467518f8c45b658824871d5d4025a6320ca06f8", + 16, + ), + "y": int( + "3a22cfd370c4a449b936ae97ab97aab11c57686cca99d14e" + "f184f9417fad8bedae4df8357e3710bcda1833b30e297d4b" + "f637938b995d231e557d13f062e81e830af5ab052208ead", + 16, + ), }, - { "curve": "sect571r1", - "d": int("3d2bd44ca9eeee8c860a4873ed55a54bdfdf5dab4060df72" - "92877960b85d1fd496aa33c587347213d7f6bf208a6ab4b4" - "30546e7b6ffbc3135bd12f44a28517867ca3c83a821d6f8", 16), - "x": int("7a7af10f6617090bade18b2e092d0dfdc87cd616db7f2db1" - "33477a82bfe3ea421ebb7d6289980819292a719eb2471955" - "29ea60ad62862de0a26c72bfc49ecc81c2f9ed704e3168f", 16), - "y": int("721496cf16f988b1aabef3368450441df8439a0ca794170f" - "270ead56203d675b57f5a4090a3a2f602a77ff3bac1417f7" - "e25a683f667b3b91f105016a47afad46a0367b18e2bdf0c", 16), + "d": int( + "3d2bd44ca9eeee8c860a4873ed55a54bdfdf5dab4060df72" + "92877960b85d1fd496aa33c587347213d7f6bf208a6ab4b4" + "30546e7b6ffbc3135bd12f44a28517867ca3c83a821d6f8", + 16, + ), + "x": int( + "7a7af10f6617090bade18b2e092d0dfdc87cd616db7f2db1" + "33477a82bfe3ea421ebb7d6289980819292a719eb2471955" + "29ea60ad62862de0a26c72bfc49ecc81c2f9ed704e3168f", + 16, + ), + "y": int( + "721496cf16f988b1aabef3368450441df8439a0ca794170f" + "270ead56203d675b57f5a4090a3a2f602a77ff3bac1417f7" + "e25a683f667b3b91f105016a47afad46a0367b18e2bdf0c", + 16, + ), }, ] @@ -2414,7 +2799,8 @@ def test_load_fips_ecdsa_key_pair_vectors(): def test_load_fips_ecdsa_signing_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.2 # "SigVer" information for "ecdsa_values" # Curves/SHAs selected: P-192, B-571,SHA-512 @@ -2481,7 +2867,8 @@ def test_load_fips_ecdsa_signing_vectors(): bdcf3035f6829ede041b745955d219dc5d30ddd8b37f6ba0f6d2857504cdc68a1ed812a10 S = 34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0a20b3cc583dcd9\ 30c43f9b93079c5ee18a1f5a66e7c3527c18610f9b47a4da7e245ef803e0662e4d2ad721c - """).splitlines() + """ + ).splitlines() expected = [ { @@ -2499,7 +2886,7 @@ def test_load_fips_ecdsa_signing_vectors(): "y": int("76fab681d00b414ea636ba215de26d98c41bd7f2e4d65477", 16), "r": int("6994d962bdd0d793ffddf855ec5bf2f91a9698b46258a63e", 16), "s": int("02ba6465a234903744ab02bc8521405b73cf5fc00e1a9f41", 16), - "fail": True + "fail": True, }, { "curve": "secp192r1", @@ -2527,22 +2914,37 @@ def test_load_fips_ecdsa_signing_vectors(): b"d74e38983b24c0748618e2f92ef7cac257ff4bd1f41113f2891eb13c4793" b"0e69ddbe91f270fb" ), - "d": int("3e1b03ffca4399d5b439fac8f87a5cb06930f00d304193d7daf83d59" - "47d0c1e293f74aef8e56849f16147133c37a6b3d1b1883e5d61d6b87" - "1ea036c5291d9a74541f28878cb986", 16), - "x": int("3b236fc135d849d50140fdaae1045e6ae35ef61091e98f5059b30eb1" - "6acdd0deb2bc0d3544bc3a666e0014e50030134fe5466a9e4d3911ed" - "580e28851f3747c0010888e819d3d1f", 16), - "y": int("3a8b6627a587d289032bd76374d16771188d7ff281c39542c8977f68" - "72fa932e5daa14e13792dea9ffe8e9f68d6b525ec99b81a5a60cfb05" - "90cc6f297cfff8d7ba1a8bb81fe2e16", 16), - "r": int("2eb1c5c1fc93cf3c8babed12c031cf1504e094174fd335104cbe4a2a" - "bd210b5a14b1c3a455579f1ed0517c31822340e4dd3c1f967e1b4b9d" - "071a1072afc1a199f8c548cd449a634", 16), - "s": int("22f97bb48641235826cf4e597fa8de849402d6bd6114ad2d7fbcf53a" - "08247e5ee921f1bd5994dffee36eedff5592bb93b8bb148214da3b7b" - "aebffbd96b4f86c55b3f6bbac142442", 16), - "fail": False + "d": int( + "3e1b03ffca4399d5b439fac8f87a5cb06930f00d304193d7daf83d59" + "47d0c1e293f74aef8e56849f16147133c37a6b3d1b1883e5d61d6b87" + "1ea036c5291d9a74541f28878cb986", + 16, + ), + "x": int( + "3b236fc135d849d50140fdaae1045e6ae35ef61091e98f5059b30eb1" + "6acdd0deb2bc0d3544bc3a666e0014e50030134fe5466a9e4d3911ed" + "580e28851f3747c0010888e819d3d1f", + 16, + ), + "y": int( + "3a8b6627a587d289032bd76374d16771188d7ff281c39542c8977f68" + "72fa932e5daa14e13792dea9ffe8e9f68d6b525ec99b81a5a60cfb05" + "90cc6f297cfff8d7ba1a8bb81fe2e16", + 16, + ), + "r": int( + "2eb1c5c1fc93cf3c8babed12c031cf1504e094174fd335104cbe4a2a" + "bd210b5a14b1c3a455579f1ed0517c31822340e4dd3c1f967e1b4b9d" + "071a1072afc1a199f8c548cd449a634", + 16, + ), + "s": int( + "22f97bb48641235826cf4e597fa8de849402d6bd6114ad2d7fbcf53a" + "08247e5ee921f1bd5994dffee36eedff5592bb93b8bb148214da3b7b" + "aebffbd96b4f86c55b3f6bbac142442", + 16, + ), + "fail": False, }, { "curve": "sect571r1", @@ -2554,28 +2956,44 @@ def test_load_fips_ecdsa_signing_vectors(): b"0f10bc31c249b7b46edd2462a55f85560d99bde9d5b06b97817d1dbe0a67" b"c701d6e6e7878272" ), - "d": int("2e09ffd8b434bb7f67d1d3ccf482164f1653c6e4ec64dec2517aa21b" - "7a93b2b21ea1eebb54734882f29303e489f02e3b741a87287e2dcdf3" - "858eb6d2ec668f8b5b26f442ce513a2", 16), - "x": int("36f1be8738dd7dae4486b86a08fe90424f3673e76b10e739442e15f3" - "bfafaf841842ac98e490521b7e7bb94c127529f6ec6a42cc6f06fc80" - "606f1210fe020ff508148f93301c9d3", 16), - "y": int("4d39666ebe99fe214336ad440d776c88eb916f2f4a3433548b87d2ae" - "bed840b424d15c8341b4a0a657bf6a234d4fe78631c8e07ac1f4dc74" - "74cd6b4545d536b7b17c160db4562d9", 16), - "r": int("3d8105f87fe3166046c08e80a28acc98a80b8b7a729623053c2a9e80" - "afd06756edfe09bdcf3035f6829ede041b745955d219dc5d30ddd8b3" - "7f6ba0f6d2857504cdc68a1ed812a10", 16), - "s": int("34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0" - "a20b3cc583dcd930c43f9b93079c5ee18a1f5a66e7c3527c18610f9b" - "47a4da7e245ef803e0662e4d2ad721c", 16) - } + "d": int( + "2e09ffd8b434bb7f67d1d3ccf482164f1653c6e4ec64dec2517aa21b" + "7a93b2b21ea1eebb54734882f29303e489f02e3b741a87287e2dcdf3" + "858eb6d2ec668f8b5b26f442ce513a2", + 16, + ), + "x": int( + "36f1be8738dd7dae4486b86a08fe90424f3673e76b10e739442e15f3" + "bfafaf841842ac98e490521b7e7bb94c127529f6ec6a42cc6f06fc80" + "606f1210fe020ff508148f93301c9d3", + 16, + ), + "y": int( + "4d39666ebe99fe214336ad440d776c88eb916f2f4a3433548b87d2ae" + "bed840b424d15c8341b4a0a657bf6a234d4fe78631c8e07ac1f4dc74" + "74cd6b4545d536b7b17c160db4562d9", + 16, + ), + "r": int( + "3d8105f87fe3166046c08e80a28acc98a80b8b7a729623053c2a9e80" + "afd06756edfe09bdcf3035f6829ede041b745955d219dc5d30ddd8b3" + "7f6ba0f6d2857504cdc68a1ed812a10", + 16, + ), + "s": int( + "34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0" + "a20b3cc583dcd930c43f9b93079c5ee18a1f5a66e7c3527c18610f9b" + "47a4da7e245ef803e0662e4d2ad721c", + 16, + ), + }, ] assert expected == load_fips_ecdsa_signing_vectors(vector_data) def test_load_kasvs_dh_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ [SHA(s) supported (Used for hashing Z): SHA256 ] # Generated on Thu Mar 17 20:44:26 2011 @@ -2745,70 +3163,83 @@ def test_load_kasvs_dh_vectors(): d518475576730ed528779366568e46b7dd4ed787cb72d0733c93 CAVSHashZZ = 17dbbaa7a20c1390cd8cb3d31ee947bf9dde87739e067b9861ffeea9 Result = P (0 - Correct) - """).splitlines() + """ + ).splitlines() expected = [ { - 'fail_agree': False, - 'fail_z': False, - 'g': int( + "fail_agree": False, + "fail_z": False, + "g": int( "a51883e9ac0539859df3d25c716437008bb4bd8ec4786eb4bc643299daef5" "e3e5af5863a6ac40a597b83a27583f6a658d408825105b16d31b6ed088fc6" "23f648fd6d95e9cefcb0745763cddf564c87bcf4ba7928e74fd6a3080481f" "588d535e4c026b58a21e1e5ec412ff241b436043e29173f1dc6cb943c0974" - "2de989547288", 16), - 'p': int( + "2de989547288", + 16, + ), + "p": int( "da3a8085d372437805de95b88b675122f575df976610c6a844de99f1df82a" "06848bf7a42f18895c97402e81118e01a00d0855d51922f434c022350861d" "58ddf60d65bc6941fc6064b147071a4c30426d82fc90d888f94990267c64b" "eef8c304a4b2b26fb93724d6a9472fa16bc50c5b9b8b59afb62cfe9ea3ba0" - "42c73a6ade35", 16), - 'q': 1386090807861091316803998193774751098153687863463, - 'x1': 381229709512864262422021151581620734547375903702, - 'x2': 479735944608461101114916716909067001453470352916, - 'y1': int( + "42c73a6ade35", + 16, + ), + "q": 1386090807861091316803998193774751098153687863463, + "x1": 381229709512864262422021151581620734547375903702, + "x2": 479735944608461101114916716909067001453470352916, + "y1": int( "5a7890f6d20ee9c7162cd84222cb0c7cb5b4f29244a58fc95327fc41045f4" "76fb3da42fca76a1dd59222a7a7c3872d5af7d8dc254e003eccdb38f29161" "9c51911df2b6ed67d0b459f4bc25819c0078777b9a1a24c72e7c037a3720a" "1edad5863ef5ac75ce816869c820859558d5721089ddbe331f55bef741396" - "a3bbf85c6c1a", 16), - 'y2': int( + "a3bbf85c6c1a", + 16, + ), + "y2": int( "b92af0468b841ea5de4ca91d895b5e922245421de57ed7a88d2de41610b20" "8e8e233705f17b2e9eb91914bad2fa87f0a58519a7da2980bc06e7411c925" "a6050526bd86e621505e6f610b63fdcd9afcfaa96bd087afca44d9197cc35" "b559f731357a5b979250c0f3a254bb8165f5072156e3fd6f9a6e69bcf4b45" - "78f78b3bde7", 16), - 'z': binascii.unhexlify( + "78f78b3bde7", + 16, + ), + "z": binascii.unhexlify( b"8d8f4175e16e15a42eb9099b11528af88741cc206a088971d3064bb291ed" b"a608d1600bff829624db258fd15e95d96d3e74c6be3232afe5c855b9c596" b"81ce13b7aea9ff2b16707e4c02f0e82bf6dadf2149ac62630f6c62dea0e5" b"05e3279404da5ffd5a088e8474ae0c8726b8189cb3d2f04baffe700be849" b"df9f91567fc2ebb8" - ) + ), }, { - 'fail_agree': False, - 'fail_z': False, - 'g': int( + "fail_agree": False, + "fail_z": False, + "g": int( "a51883e9ac0539859df3d25c716437008bb4bd8ec4786eb4bc643299daef5" "e3e5af5863a6ac40a597b83a27583f6a658d408825105b16d31b6ed088fc6" "23f648fd6d95e9cefcb0745763cddf564c87bcf4ba7928e74fd6a3080481f" "588d535e4c026b58a21e1e5ec412ff241b436043e29173f1dc6cb943c0974" - "2de989547288", 16), - 'p': int( + "2de989547288", + 16, + ), + "p": int( "da3a8085d372437805de95b88b675122f575df976610c6a844de99f1df82a" "06848bf7a42f18895c97402e81118e01a00d0855d51922f434c022350861d" "58ddf60d65bc6941fc6064b147071a4c30426d82fc90d888f94990267c64b" "eef8c304a4b2b26fb93724d6a9472fa16bc50c5b9b8b59afb62cfe9ea3ba0" - "42c73a6ade35", 16), - 'q': 1386090807861091316803998193774751098153687863463, - 'x1': int( - "32e642683d745a23dccf4f12f989d8dfd1fd9894c422930950cb4c71", - 16), - 'x2': int( - "7d8ae93df3bc09d399a4157ec562126acf51092c3269ab27f60a3a2b", - 16), - 'y1': int( + "42c73a6ade35", + 16, + ), + "q": 1386090807861091316803998193774751098153687863463, + "x1": int( + "32e642683d745a23dccf4f12f989d8dfd1fd9894c422930950cb4c71", 16 + ), + "x2": int( + "7d8ae93df3bc09d399a4157ec562126acf51092c3269ab27f60a3a2b", 16 + ), + "y1": int( "8cd371363b32fcc2e936e345f2278b77001f2efdf78512c3ee75c12f88507" "e2d5c0e5cdded3bb78435506c8028a3f4d6f028c0f49a0d61f1285795197e" "56deac80279e723f2b3746e213ac8ec60f1cefc2308ff17a7e9e2efab537e" @@ -2817,8 +3248,10 @@ def test_load_kasvs_dh_vectors(): "3e1c450c5798dc05f8265ad9e35095ff112af9e889f00315fa337a76a4506" "70866eca12cc6ad0778576962eb9cdc12721d3c15e4d87b67488a145d4002" "40670eb26695a42879cd3940a55087f6527667277e1212a202dbe455c45c6" - "4b9be4a38153557bbb8fd755", 16), - 'y2': int( + "4b9be4a38153557bbb8fd755", + 16, + ), + "y2": int( "22127e9728e906ea4b1512c8b1e80474b58446210c23ccfc800f83c2c15da" "8159940e494b235266f6a9d5f80529067794f1a9edd566755d23d0a3060fe" "074c5a10122df3e472973bba39ea3a988e8387f5f0491e590b6b5edc299b4" @@ -2827,8 +3260,10 @@ def test_load_kasvs_dh_vectors(): "6c3d75d9bcf83f4b8d1ed39408bd8d973b4ea81e8e832eac361dcd5307133" "88a60971ea9f8b1e69c1e99df1cca12bdaf293dacfa1419c5692ceffa9198" "8aef3321ac8cbc2efae6c4337c8808310fb5a240395a98e6004fe613c39e8" - "4f4177341746d9e388dcb2e8", 16), - 'z': binascii.unhexlify( + "4f4177341746d9e388dcb2e8", + 16, + ), + "z": binascii.unhexlify( b"0efeaa399a182e0a603baf0dd95aa0fae5289ebd47d5f0f60c86bc936839" b"c31c9f7f37bf04f76ab02f4094a8ab10ed907ec7291585cc085c3e8981df" b"2bd46a01c19ec9a2f66709df1d4fefbeb48c8263554e46890f59eb642bf9" @@ -2838,31 +3273,35 @@ def test_load_kasvs_dh_vectors(): b"ce2a585eb9e8f308b48cf4e29593b6f7a02e8625e1e8bff1ea1405f8c8c3" b"4b8339a9a99c7c9de4eb9895df7719ccda9394f53080eff1226f6b9c7ae0" b"a38941e18b1a137aabbb62308eb35ba2" - ) + ), }, { - 'fail_agree': False, - 'fail_z': True, - 'g': int( + "fail_agree": False, + "fail_z": True, + "g": int( "a51883e9ac0539859df3d25c716437008bb4bd8ec4786eb4bc643299daef5" "e3e5af5863a6ac40a597b83a27583f6a658d408825105b16d31b6ed088fc6" "23f648fd6d95e9cefcb0745763cddf564c87bcf4ba7928e74fd6a3080481f" "588d535e4c026b58a21e1e5ec412ff241b436043e29173f1dc6cb943c0974" - "2de989547288", 16), - 'p': int( + "2de989547288", + 16, + ), + "p": int( "da3a8085d372437805de95b88b675122f575df976610c6a844de99f1df82a" "06848bf7a42f18895c97402e81118e01a00d0855d51922f434c022350861d" "58ddf60d65bc6941fc6064b147071a4c30426d82fc90d888f94990267c64b" "eef8c304a4b2b26fb93724d6a9472fa16bc50c5b9b8b59afb62cfe9ea3ba0" - "42c73a6ade35", 16), - 'q': 1386090807861091316803998193774751098153687863463, - 'x1': int( - "66502429aba271e2f2ee2197a2b336e5f0467f192aa28b60dcbf1194", - 16), - 'x2': int( - "106b358be4f068348ac240ecbb454e5c39ca80b078cb0fafd856e9c5", - 16), - 'y1': int( + "42c73a6ade35", + 16, + ), + "q": 1386090807861091316803998193774751098153687863463, + "x1": int( + "66502429aba271e2f2ee2197a2b336e5f0467f192aa28b60dcbf1194", 16 + ), + "x2": int( + "106b358be4f068348ac240ecbb454e5c39ca80b078cb0fafd856e9c5", 16 + ), + "y1": int( "dfb001294215423d7146a2453cdb8598ccef01e1d931a913c3e4ed4a3cf38" "a912066c28e4eaf77dd80ff07183a6160bd95932f513402f864dcf7a70cbe" "dc9b60bbfbc67f72a83d5f6463a2b5a4fc906d3e921f5e1069126113265b4" @@ -2871,8 +3310,10 @@ def test_load_kasvs_dh_vectors(): "51043d351bb74a952e6a694e6e7456f714c47d7c8eeeb4fd83ad93c86b784" "45f9393fdfd65c7dbd7fd6eba9794ddf183901b1d213321fd0ab3f7588ab0" "f6b3692f365a87131eda0e062505861988f6ce63150207545ecf9678e0971" - "330253dfb7cfd546c5346fec", 16), - 'y2': int( + "330253dfb7cfd546c5346fec", + 16, + ), + "y2": int( "715d0781975b7b03162f4401c1eda343fd9bf1140006034573b31828a618c" "356163554cd27da956f7179a69e860fb6efeaa2e2aa9f1261506a8344c492" "9953621381b13d6426e152c0f2f94bfcd2b758eca24923596d427ed8f957e" @@ -2881,8 +3322,10 @@ def test_load_kasvs_dh_vectors(): "ad5c5bd490ea600e04379232fb1077fbf394f4579accdbe352714e25b8891" "6dca8d8f7e0c4ed9594f7693f656a235a2e88ebda48b0d557e32da9f12d2a" "4c3180f05b16b4fba9bec79278a3971b77f9223b5ab78b857e0376c500821" - "1592c8c72d521373ee3b22b8", 16), - 'z': binascii.unhexlify( + "1592c8c72d521373ee3b22b8", + 16, + ), + "z": binascii.unhexlify( b"cf879ebd107bb877457809c3fc410218b7acba3c5967495a8f1c3370d57f" b"038a48dd69f9f69b9f4dd855e7c58a1e4ec32646a978266eb314db468ea1" b"dfcee8a85a1644a5732498c4fbcdf85098c6ed0ce12e431e99142fd23353" @@ -2892,12 +3335,12 @@ def test_load_kasvs_dh_vectors(): b"665095490056287e4fc49e6cb3181cb2bf06444fd0040150271c9ce1f61c" b"13ecd5dd022194a2dbf3e1c7fbc6bd19497c7b888b4da613d28fa6f378a4" b"3369cb8795a1c823f7d6cf4d84bba578" - ) + ), }, { - 'fail_agree': True, - 'fail_z': False, - 'g': int( + "fail_agree": True, + "fail_z": False, + "g": int( "35513ec441402b78353ab1bba550b21c76c89973885a627170262ef52497d" "5d137b8927a212aaab2f051198c90bb81dffd9eb10b36b7ca3b63565b4c10" "25aea3b5e9c4a348c9cfa17f3907a1e4469701c0dedb8a4b9e96c5965b1fb" @@ -2906,8 +3349,10 @@ def test_load_kasvs_dh_vectors(): "65bb4e1e9474993fe382fd23480dc875861be152997a621fdb7aef977ea5b" "4d3d74486b162dc28f95a64cf65587a919a57eef92934fc9410df7f09fa82" "f975328ed82ff29cc3e15a971f56f4ac2dcb289252575e02a6cdb7fcc6cdd" - "d7b0dca9c422e63eb2b8f05", 16), - 'p': int( + "d7b0dca9c422e63eb2b8f05", + 16, + ), + "p": int( "f3722b9b911c6aede9eaeeaa406283de66a097f39a7225df6c3c916e57920" "d356e50478d307dbfd146bfb91b6f68ecbbcf54b3d19c33a4b17293fea3e3" "d6bff8ac4cca93a805386f062a8a27ae906ef5da94d279fd7b3d7289e0095" @@ -2916,17 +3361,19 @@ def test_load_kasvs_dh_vectors(): "3c3dfda8de8429e087c5be97fc5c9db9526031ad3a218bd9916fb4a3c2796" "6d208b1e360014c01e95530c148fb3cd27e6a7250d3c3b81dcd220ca14548" "dbccf99ebb9e334db6bcd14e632c98dd3f9860af7ae450f1b7809b45f0ec1" - "0e6f27672beebc9963befc73", 16), - 'q': int( - "a9a17de95a29091bf8e07dab53ea1aba9403be3c61027c6c8f48bac5", - 16), - 'x1': int( - "1610eaa4e0ccc8857e2b53149e008492b1fbd9025a6e8d95aaee9c0f", - 16), - 'x2': int( - "c4c83d75b27864b052cadc556e500e25aabf0c9d1bc01f0e1fe3862", - 16), - 'y1': int( + "0e6f27672beebc9963befc73", + 16, + ), + "q": int( + "a9a17de95a29091bf8e07dab53ea1aba9403be3c61027c6c8f48bac5", 16 + ), + "x1": int( + "1610eaa4e0ccc8857e2b53149e008492b1fbd9025a6e8d95aaee9c0f", 16 + ), + "x2": int( + "c4c83d75b27864b052cadc556e500e25aabf0c9d1bc01f0e1fe3862", 16 + ), + "y1": int( "51ee21cd9f97015180f258fad5c94ff5a458806b1412087236bf77fe87aae" "1a36735816ed6e2160a731159814b6ae1f3f52c478dd9207094adfb62f766" "7d5c366327e66d23096395e938504db330953a708015f861fe9d948761109" @@ -2935,8 +3382,10 @@ def test_load_kasvs_dh_vectors(): "a6f14ccdb29db02f64911bd83bfdcdfc843dd14a4cab9acb0bda8b293d2f5" "f7050768e57533cbc415a29e6f31cc365e107f91ae3722484e2c7329a85af" "69055a5a104da37e810878896d1b247b02b75234ecff82b1958f42d7b0316" - "22e9394c98b5229112f7f620", 16), - 'y2': int( + "22e9394c98b5229112f7f620", + 16, + ), + "y2": int( "467a857337a82472a1307a64dccc8e9994c5c63ec4312936885d17be41905" "1a5f037fbb052d7010ebe01634d9e8b8b522d9ab4749fdc274f465369b89e" "360df8f70b7865a3c71d2dbcd2df19e9293dab1153d3d63fcb7deb559b684" @@ -2945,8 +3394,10 @@ def test_load_kasvs_dh_vectors(): "c193f460dcd0be7e6e06e546da7653770dc5859df87029e722dbe81361030" "569148d1636988926bf0dcfe47c9d8a54698c08b3b5c70afe86b5c6f64346" "3f8f34889d27d6cfd2d478c2d7b3d008a985c7380f0b43f10024b59c35438" - "80883c42d0e7e0a07326ba3a", 16), - 'z': binascii.unhexlify( + "80883c42d0e7e0a07326ba3a", + 16, + ), + "z": binascii.unhexlify( b"10a30bacab82e652415376baffdbc008c7eb2e5a3aa68bc10ce486ca8498" b"3fd89b1b027bb40e75333406361005f5e756526a95fe01202df9217d81b1" b"713d5187c368fdd4c9c2433d9e6c18844769479b725c4140c92a304ee1bc" @@ -2956,41 +3407,47 @@ def test_load_kasvs_dh_vectors(): b"68c90178974a0602436cd186748bcc63a629edc3a0db59415cccd37a6513" b"0ea477c89da92d41371f5972891cf41f9c7f0e75ccbff9893225384db30d" b"aa5e310f08e3e0fad98bcdf8ecf35fe5" - ) + ), }, { - 'fail_agree': False, - 'fail_z': False, - 'g': int("35513ec441402b78353ab1bba550b21c76c89973885a627170262ef5" - "2497d5d137b8927a212aaab2f051198c90bb81dffd9eb10b36b7ca3b" - "63565b4c1025aea3b5e9c4a348c9cfa17f3907a1e4469701c0dedb8a" - "4b9e96c5965b1fb8c229b0c34baac774bf9dda4fc5ee8764358b3c84" - "812878aab7464bc09e97aecab7d7e3fbb4870e2a3b89667a4158bf1e" - "d1a90dfaf47019fbb52b1b96365bb4e1e9474993fe382fd23480dc87" - "5861be152997a621fdb7aef977ea5b4d3d74486b162dc28f95a64cf6" - "5587a919a57eef92934fc9410df7f09fa82f975328ed82ff29cc3e15" - "a971f56f4ac2dcb289252575e02a6cdb7fcc6cddd7b0dca9c422e63e" - "b2b8f05", 16), - 'p': int("f3722b9b911c6aede9eaeeaa406283de66a097f39a7225df6c3c916e" - "57920d356e50478d307dbfd146bfb91b6f68ecbbcf54b3d19c33a4b1" - "7293fea3e3d6bff8ac4cca93a805386f062a8a27ae906ef5da94d279" - "fd7b3d7289e00956f76bae9c0d2b8d11742ca5809630632aae58f9c6" - "dce00c7380581deffde2187b022f83c6ceaeaadb0844a17fcbb04039" - "ca6843c91f0c9058b22434b263c3dfda8de8429e087c5be97fc5c9db" - "9526031ad3a218bd9916fb4a3c27966d208b1e360014c01e95530c14" - "8fb3cd27e6a7250d3c3b81dcd220ca14548dbccf99ebb9e334db6bcd" - "14e632c98dd3f9860af7ae450f1b7809b45f0ec10e6f27672beebc99" - "63befc73", 16), - 'q': int( - "a9a17de95a29091bf8e07dab53ea1aba9403be3c61027c6c8f48bac5", - 16), - 'x1': int( - "9ee22ac51664e40e0a24dbb94142dba40605e2b6eeaaa0268a0f6847", - 16), - 'x2': int( - "438093a468236658821bf64eb08456139963d4fb27121c3ed6c55876", - 16), - 'y1': int( + "fail_agree": False, + "fail_z": False, + "g": int( + "35513ec441402b78353ab1bba550b21c76c89973885a627170262ef5" + "2497d5d137b8927a212aaab2f051198c90bb81dffd9eb10b36b7ca3b" + "63565b4c1025aea3b5e9c4a348c9cfa17f3907a1e4469701c0dedb8a" + "4b9e96c5965b1fb8c229b0c34baac774bf9dda4fc5ee8764358b3c84" + "812878aab7464bc09e97aecab7d7e3fbb4870e2a3b89667a4158bf1e" + "d1a90dfaf47019fbb52b1b96365bb4e1e9474993fe382fd23480dc87" + "5861be152997a621fdb7aef977ea5b4d3d74486b162dc28f95a64cf6" + "5587a919a57eef92934fc9410df7f09fa82f975328ed82ff29cc3e15" + "a971f56f4ac2dcb289252575e02a6cdb7fcc6cddd7b0dca9c422e63e" + "b2b8f05", + 16, + ), + "p": int( + "f3722b9b911c6aede9eaeeaa406283de66a097f39a7225df6c3c916e" + "57920d356e50478d307dbfd146bfb91b6f68ecbbcf54b3d19c33a4b1" + "7293fea3e3d6bff8ac4cca93a805386f062a8a27ae906ef5da94d279" + "fd7b3d7289e00956f76bae9c0d2b8d11742ca5809630632aae58f9c6" + "dce00c7380581deffde2187b022f83c6ceaeaadb0844a17fcbb04039" + "ca6843c91f0c9058b22434b263c3dfda8de8429e087c5be97fc5c9db" + "9526031ad3a218bd9916fb4a3c27966d208b1e360014c01e95530c14" + "8fb3cd27e6a7250d3c3b81dcd220ca14548dbccf99ebb9e334db6bcd" + "14e632c98dd3f9860af7ae450f1b7809b45f0ec10e6f27672beebc99" + "63befc73", + 16, + ), + "q": int( + "a9a17de95a29091bf8e07dab53ea1aba9403be3c61027c6c8f48bac5", 16 + ), + "x1": int( + "9ee22ac51664e40e0a24dbb94142dba40605e2b6eeaaa0268a0f6847", 16 + ), + "x2": int( + "438093a468236658821bf64eb08456139963d4fb27121c3ed6c55876", 16 + ), + "y1": int( "c2630c9d38ed5c825d1c6a3eba7143f3fc8a049c8bcd1efc212d2af64eca9" "94308208691d330aa8f27fc4a1e55de4e512113996d21375a667f8c26d76d" "ee2f6809b15432a33fb735aca5c2263940f58712bded08f55443dee300b94" @@ -2999,8 +3456,10 @@ def test_load_kasvs_dh_vectors(): "d43c4ffc9a605addbdcce0cb3790c6db846156bb857a7b3df40dc6ed04d19" "cc9eaebb6bbc034e77c3d882a1a62317cce25b6130f0803e3bc49b5e36768" "260073a617034872be0b50bed32740224beaf582d67fbcfef3b3ecc18f9c7" - "1c782e9a68495ef31dc7986e", 16), - 'y2': int( + "1c782e9a68495ef31dc7986e", + 16, + ), + "y2": int( "e192da8e1244e27221c1765344a5bb379dce741d427a734b4bdb6c4d16b24" "90bd37564d745008e63ae46ef332331d79887ac63298ce143e125f8b320c0" "f859b7f5f2c1e0053e4a7a16997e6143ff702300c9863ae7caef5c1dfca0e" @@ -3009,8 +3468,10 @@ def test_load_kasvs_dh_vectors(): "a56431cd48579bf53c903bbe066dd78b23c0996ef3a880f0d91315104366a" "82f01abdecce96fd371f94e8420f8bc5b896c801df573554f749b03d0d28b" "1e1a990bc61c7e9659342ac7e268e9c0b7c40fdaab394f29cf0a54f780022" - "f9a03b0bd28eb7db8b0b1b47", 16), - 'z': binascii.unhexlify( + "f9a03b0bd28eb7db8b0b1b47", + 16, + ), + "z": binascii.unhexlify( b"56f8f40fa4b8f3580f9014b30d60a42933a53a62182a690142f458dc275c" b"3b2f0e721bc5ee6e890b14516419110f5252ff1cceea8e274b2987aa78e3" b"bae90c1935b276b7a1f1c944f79d4774b7a85b3355bdf25cb02bddfbda4e" @@ -3020,8 +3481,8 @@ def test_load_kasvs_dh_vectors(): b"b75d049d4c82097af8a5ce353e14416b3eeb31ba9bc4f6f3dbd846c5299f" b"b5c0043a1b95b9149b39d14df9e6a69547abf8a4d518475576730ed52877" b"9366568e46b7dd4ed787cb72d0733c93" - ) - } + ), + }, ] assert expected == load_kasvs_dh_vectors(vector_data) @@ -3032,7 +3493,8 @@ def test_load_kasvs_ecdh_vectors_empty_vector_data(): def test_load_kasvs_ecdh_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # Parameter set(s) supported: EA EB EC ED EE # CAVSid: CAVSid (in hex: 434156536964) @@ -3183,148 +3645,291 @@ def test_load_kasvs_ecdh_vectors(): - """).splitlines() + """ + ).splitlines() expected = [ - {'errno': 0, - 'fail': False, - 'COUNT': 0, - 'CAVS': { - 'd': int("f70c297a683d6b7ef82b5af7349606c4447c8b4fc6fa5e80", 16), - 'x': int("f7b5061fb557e516c50abf541d97dbfd76ca7172b22cf590", 16), - 'y': int("135e15e21f9e85c76205fd148a92ac19f9e6243ddab322d1", 16)}, - 'IUT': { - 'd': int("a5b4bbad57f101ca48021cb7440cd681a9d40cd51b99d917", 16), - 'x': int("79a77fcb18a32cdb59ed5d87740f29e8565d649dbf01ce86", 16), - 'y': int("f7187efaa0b1573f1fb00905d46810b880bf738b4c720bb7", 16)}, - 'Z': int("26382468d721761e14a87dc3bee67340095c6455962d1ba3", 16), - 'curve': 'secp192r1'}, - - {'errno': 8, - 'fail': True, - 'COUNT': 2, - 'CAVS': { - 'd': int("5f909dcb0ccce58c82fada748c47297579e6a981b5518a96", 16), - 'x': int("537f1ecfda0e366de393a9bc8188fcc280311bffefe21ecf", 16), - 'y': int("a1fa1f98498d65f2754caff4e5303a4066a5ff89fde95381", 16)}, - 'IUT': { - 'd': int("3357aa7f47f3e09421602cc12cdce4434c68e330d44de05e", 16), - 'x': int("6a33d43d9c72173eabc7a771a5687748c4774c62762e96ec", 16), - 'y': int("8033f238b3abc69470aad4be8dbe4f60a2fd50207626c56a", 16)}, - 'Z': int("3153034f6617326f19c35be8c99a0585431adf09d2f8e0fd", 16), - 'curve': 'secp192r1'}, - - {'errno': 13, - 'fail': False, - 'COUNT': 8, - 'CAVS': { - 'd': int("8fcfaf0524cc868fad20e50410a2205319f1327308d98dc8", 16), - 'x': int("9b0243d80a9e328738080fb4d46bc450243d0efb7ead0c92", 16), - 'y': int("ad5bebad7f03849693071537f60ef858cad214123beee7c7", 16)}, - 'IUT': { - 'd': int("bba95dac90289cb68ca2b006f9757219b70579c299ad7a7d", 16), - 'x': int("7733dc0cb365cd6312724196b9b4eb491fd4d2e31b9afdb1", 16), - 'y': int("92ffa3722acc5b94d772258ba2d471b06c0f53f56fcd8662", 16)}, - 'Z': int("0f3c6e4a29a08296ae730f56a1ebf819ea2edfa6f0434e40", 16), - 'curve': 'secp192r1'}, - - {'errno': 0, - 'fail': False, - 'COUNT': 0, - 'CAVS': { - 'd': int("e53a88af7cf8ce6bf13c8b9ad191494e37a6acc1368c71f4" - "306e39e5", 16), - 'x': int("3a24217c4b957fea922eec9d9ac52d5cb4b3fcd95efde1e4" - "fa0dd6e2", 16), - 'y': int("775b94025a808eb6f4af14ea4b57dca576c35373c6dc198b" - "15b981df", 16)}, - 'IUT': { - 'd': int("09f51e302c6a0fe6ff48f34c208c6af91e70f65f88102e6f" - "cab9af4a", 16), - 'x': int("c5d5706ccd7424c74fd616e699865af96e56f39adea6aa05" - "9e5092b5", 16), - 'y': int("f0729077bb602404d56d2f7e2ba5bb2f383df4a542556788" - "1ff0165d", 16)}, - 'Z': int("b1259ceedfb663d9515089cf727e7024fb3d86cbcec611b4" - "ba0b4ab6", 16), - 'curve': 'secp224r1'}, - - {'errno': 2, - 'fail': True, - 'COUNT': 0, - 'CAVS': { - 'd': int("305dfb4a8850cc59280891147baf457bfe5e2bae98457163" - "4a77dc8d3472fa9b", 16), - 'x': int("202cb5a224e6c2a84e624094486edf04116c8d68ec1f4a0e" - "0ed9ee090e1a900b", 16), - 'y': int("cacf3a5789bb33954be600425d62d9eae5371f90f8816725" - "8814213e4a4f4b1a", 16)}, - 'IUT': { - 'd': int("72cc52808f294b64b6f7233c3d2f5d96cc1d29287320e39e" - "1c151deef0bc14eb", 16), - 'x': int("49a768c9a4ca56e374f685dd76a461b1016c59dcded2c8d8" - "cbd9f23ca453831f", 16), - 'y': int("b1e3bb9b5f12a3b5ae788535d4554bd8c46e0e6130075e4e" - "437d3854cf8f1c34", 16)}, - 'Z': int("c0147c3c2691b450b5edc08b51aea224d9f4359ff67aab6d" - "a3146f396dbceaea", 16), - 'curve': 'secp256r1'}, - - {'errno': 0, - 'fail': False, - 'COUNT': 0, - 'CAVS': { - 'd': int("0e5c98ff2d2a3aab14ad0067b60dbe64e4f541ab5bed11c5" - "a0c55ae1e60b51ff5faaf377837977d80cbfdc33c2ff542b", 16), - 'x': int("d1bf2ac21637d66d6398aac01dcd56ac6f065fb45d1f6f16" - "747bab9e9b01b4630b59b20927aea147355bf41838acb482", 16), - 'y': int("4c9e23f1c5a41647d094086bf4ed31708651f21d996c4778" - "0688ac10f77deee2e43b5241b6caecd2fd5444bc50472e0e", 16)}, - 'IUT': { - 'd': int("f865418473e5bf7d2e1bbcd9bd5a9270c003a9dd35e77813" - "3ca59fcab4bb64fe24d6800e7047bdd033abc8bfa8db35b5", 16), - 'x': int("32b72ab9b558249dcbc6cbade234f58e4f7aa5d3f6420ea9" - "9a5f997e8c2a91fb7fd83779d0d2169428683771c745fd1a", 16), - 'y': int("c749e02a3719bb56bf1dfc4ba3820309c01ab6e84cb29db7" - "cdd80f127233f5295687f8178f3a8704c1063b84c2ee472f", 16)}, - 'Z': int("a781430e6078a179df3f9ee27cd8fdc6188f161b6c4ccc40" - "53ef6c6ca6fc222946883a53c06db08f0a020023ced055aa", 16), - 'curve': 'secp384r1'}, - - {'errno': 7, - 'fail': True, - 'COUNT': 0, - 'CAVS': { - 'd': int("0000002fef62381162942889a6094a6bb9ac1f4ddf66d9cd" - "a9f618232d31b90c50d7da78a47ed91d40cae946898571db" - "972dc294b109815f38feee9eaac0d5f7c3250728", 16), - 'x': int("0000004b05ffa025113390797f2736174aa1c784f4dd34e7" - "64ee40d40e4d2442677ebea3498086c9473e5c92789cbdb0" - "2bb327bbd61d58690f6a83d9ca73bccbde37dec4", 16), - 'y': int("0000004da67cffc98070b82af61feba78787efefb13bd810" - "d80ff92304788e49a4e5b634b3565474a8ecb1615d7b1b77" - "a7a27875adb73a8a5d8f3f84e5e8b744cda250b0", 16)}, - 'IUT': { - 'd': int("00000311a5e520e238141527671a38cb6f776d96a9f82ef7" - "0dffa11dc0895f4060f1abbb9ad6fd259e4a7beaf5f7266e" - "a1bb45bcbfebfda2705e5c551e710fb1d745f57e", 16), - 'x': int("0000010ba3778cb2cc965834c0a9593adc6a222692656d65" - "7fb0d15293edf0ab33762384a96a16fddea7540b7ccbcca4" - "6ec4ac9bcf95fdb5aa18e158aab4d91981bd733e", 16), - 'y': int("0000018522df93ddd636e5bc94daecdc600fa241686ec186" - "34fd30b7cbdfdc9ffba1166ac08df34a31896f6fad191414" - "929261ebd7187afb72919f8a0c926be37f99c1e5", 16)}, - 'Z': int("01a5e4b31be4b1346e53906b6767b1fe94ec1a8a5abc28fb" - "6f01518c056959af3bc9335dddab178b52318cc551255993" - "1b8dc18de0ce810c2c7f15769d7ce70e719c", 16), - 'curve': 'secp521r1'} + { + "errno": 0, + "fail": False, + "COUNT": 0, + "CAVS": { + "d": int( + "f70c297a683d6b7ef82b5af7349606c4447c8b4fc6fa5e80", 16 + ), + "x": int( + "f7b5061fb557e516c50abf541d97dbfd76ca7172b22cf590", 16 + ), + "y": int( + "135e15e21f9e85c76205fd148a92ac19f9e6243ddab322d1", 16 + ), + }, + "IUT": { + "d": int( + "a5b4bbad57f101ca48021cb7440cd681a9d40cd51b99d917", 16 + ), + "x": int( + "79a77fcb18a32cdb59ed5d87740f29e8565d649dbf01ce86", 16 + ), + "y": int( + "f7187efaa0b1573f1fb00905d46810b880bf738b4c720bb7", 16 + ), + }, + "Z": int("26382468d721761e14a87dc3bee67340095c6455962d1ba3", 16), + "curve": "secp192r1", + }, + { + "errno": 8, + "fail": True, + "COUNT": 2, + "CAVS": { + "d": int( + "5f909dcb0ccce58c82fada748c47297579e6a981b5518a96", 16 + ), + "x": int( + "537f1ecfda0e366de393a9bc8188fcc280311bffefe21ecf", 16 + ), + "y": int( + "a1fa1f98498d65f2754caff4e5303a4066a5ff89fde95381", 16 + ), + }, + "IUT": { + "d": int( + "3357aa7f47f3e09421602cc12cdce4434c68e330d44de05e", 16 + ), + "x": int( + "6a33d43d9c72173eabc7a771a5687748c4774c62762e96ec", 16 + ), + "y": int( + "8033f238b3abc69470aad4be8dbe4f60a2fd50207626c56a", 16 + ), + }, + "Z": int("3153034f6617326f19c35be8c99a0585431adf09d2f8e0fd", 16), + "curve": "secp192r1", + }, + { + "errno": 13, + "fail": False, + "COUNT": 8, + "CAVS": { + "d": int( + "8fcfaf0524cc868fad20e50410a2205319f1327308d98dc8", 16 + ), + "x": int( + "9b0243d80a9e328738080fb4d46bc450243d0efb7ead0c92", 16 + ), + "y": int( + "ad5bebad7f03849693071537f60ef858cad214123beee7c7", 16 + ), + }, + "IUT": { + "d": int( + "bba95dac90289cb68ca2b006f9757219b70579c299ad7a7d", 16 + ), + "x": int( + "7733dc0cb365cd6312724196b9b4eb491fd4d2e31b9afdb1", 16 + ), + "y": int( + "92ffa3722acc5b94d772258ba2d471b06c0f53f56fcd8662", 16 + ), + }, + "Z": int("0f3c6e4a29a08296ae730f56a1ebf819ea2edfa6f0434e40", 16), + "curve": "secp192r1", + }, + { + "errno": 0, + "fail": False, + "COUNT": 0, + "CAVS": { + "d": int( + "e53a88af7cf8ce6bf13c8b9ad191494e37a6acc1368c71f4" + "306e39e5", + 16, + ), + "x": int( + "3a24217c4b957fea922eec9d9ac52d5cb4b3fcd95efde1e4" + "fa0dd6e2", + 16, + ), + "y": int( + "775b94025a808eb6f4af14ea4b57dca576c35373c6dc198b" + "15b981df", + 16, + ), + }, + "IUT": { + "d": int( + "09f51e302c6a0fe6ff48f34c208c6af91e70f65f88102e6f" + "cab9af4a", + 16, + ), + "x": int( + "c5d5706ccd7424c74fd616e699865af96e56f39adea6aa05" + "9e5092b5", + 16, + ), + "y": int( + "f0729077bb602404d56d2f7e2ba5bb2f383df4a542556788" + "1ff0165d", + 16, + ), + }, + "Z": int( + "b1259ceedfb663d9515089cf727e7024fb3d86cbcec611b4" "ba0b4ab6", + 16, + ), + "curve": "secp224r1", + }, + { + "errno": 2, + "fail": True, + "COUNT": 0, + "CAVS": { + "d": int( + "305dfb4a8850cc59280891147baf457bfe5e2bae98457163" + "4a77dc8d3472fa9b", + 16, + ), + "x": int( + "202cb5a224e6c2a84e624094486edf04116c8d68ec1f4a0e" + "0ed9ee090e1a900b", + 16, + ), + "y": int( + "cacf3a5789bb33954be600425d62d9eae5371f90f8816725" + "8814213e4a4f4b1a", + 16, + ), + }, + "IUT": { + "d": int( + "72cc52808f294b64b6f7233c3d2f5d96cc1d29287320e39e" + "1c151deef0bc14eb", + 16, + ), + "x": int( + "49a768c9a4ca56e374f685dd76a461b1016c59dcded2c8d8" + "cbd9f23ca453831f", + 16, + ), + "y": int( + "b1e3bb9b5f12a3b5ae788535d4554bd8c46e0e6130075e4e" + "437d3854cf8f1c34", + 16, + ), + }, + "Z": int( + "c0147c3c2691b450b5edc08b51aea224d9f4359ff67aab6d" + "a3146f396dbceaea", + 16, + ), + "curve": "secp256r1", + }, + { + "errno": 0, + "fail": False, + "COUNT": 0, + "CAVS": { + "d": int( + "0e5c98ff2d2a3aab14ad0067b60dbe64e4f541ab5bed11c5" + "a0c55ae1e60b51ff5faaf377837977d80cbfdc33c2ff542b", + 16, + ), + "x": int( + "d1bf2ac21637d66d6398aac01dcd56ac6f065fb45d1f6f16" + "747bab9e9b01b4630b59b20927aea147355bf41838acb482", + 16, + ), + "y": int( + "4c9e23f1c5a41647d094086bf4ed31708651f21d996c4778" + "0688ac10f77deee2e43b5241b6caecd2fd5444bc50472e0e", + 16, + ), + }, + "IUT": { + "d": int( + "f865418473e5bf7d2e1bbcd9bd5a9270c003a9dd35e77813" + "3ca59fcab4bb64fe24d6800e7047bdd033abc8bfa8db35b5", + 16, + ), + "x": int( + "32b72ab9b558249dcbc6cbade234f58e4f7aa5d3f6420ea9" + "9a5f997e8c2a91fb7fd83779d0d2169428683771c745fd1a", + 16, + ), + "y": int( + "c749e02a3719bb56bf1dfc4ba3820309c01ab6e84cb29db7" + "cdd80f127233f5295687f8178f3a8704c1063b84c2ee472f", + 16, + ), + }, + "Z": int( + "a781430e6078a179df3f9ee27cd8fdc6188f161b6c4ccc40" + "53ef6c6ca6fc222946883a53c06db08f0a020023ced055aa", + 16, + ), + "curve": "secp384r1", + }, + { + "errno": 7, + "fail": True, + "COUNT": 0, + "CAVS": { + "d": int( + "0000002fef62381162942889a6094a6bb9ac1f4ddf66d9cd" + "a9f618232d31b90c50d7da78a47ed91d40cae946898571db" + "972dc294b109815f38feee9eaac0d5f7c3250728", + 16, + ), + "x": int( + "0000004b05ffa025113390797f2736174aa1c784f4dd34e7" + "64ee40d40e4d2442677ebea3498086c9473e5c92789cbdb0" + "2bb327bbd61d58690f6a83d9ca73bccbde37dec4", + 16, + ), + "y": int( + "0000004da67cffc98070b82af61feba78787efefb13bd810" + "d80ff92304788e49a4e5b634b3565474a8ecb1615d7b1b77" + "a7a27875adb73a8a5d8f3f84e5e8b744cda250b0", + 16, + ), + }, + "IUT": { + "d": int( + "00000311a5e520e238141527671a38cb6f776d96a9f82ef7" + "0dffa11dc0895f4060f1abbb9ad6fd259e4a7beaf5f7266e" + "a1bb45bcbfebfda2705e5c551e710fb1d745f57e", + 16, + ), + "x": int( + "0000010ba3778cb2cc965834c0a9593adc6a222692656d65" + "7fb0d15293edf0ab33762384a96a16fddea7540b7ccbcca4" + "6ec4ac9bcf95fdb5aa18e158aab4d91981bd733e", + 16, + ), + "y": int( + "0000018522df93ddd636e5bc94daecdc600fa241686ec186" + "34fd30b7cbdfdc9ffba1166ac08df34a31896f6fad191414" + "929261ebd7187afb72919f8a0c926be37f99c1e5", + 16, + ), + }, + "Z": int( + "01a5e4b31be4b1346e53906b6767b1fe94ec1a8a5abc28fb" + "6f01518c056959af3bc9335dddab178b52318cc551255993" + "1b8dc18de0ce810c2c7f15769d7ce70e719c", + 16, + ), + "curve": "secp521r1", + }, ] assert expected == load_kasvs_ecdh_vectors(vector_data) def test_load_kasvs_ecdh_kdf_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # Parameter set(s) supported: EB EC ED EE # CAVSid: CAVSid (in hex: 434156536964) # IUTid: In hex: a1b2c3d4e5 @@ -3361,39 +3966,68 @@ def test_load_kasvs_ecdh_kdf_vectors(): ffdfa60dd7 DKM = ad65fa2d12541c3a21f3cd223efb Result = F (12 - Tag changed ) - """).splitlines() + """ + ).splitlines() expected = [ - {'errno': 12, - 'fail': True, - 'COUNT': 50, - 'CAVS': { - 'd': int("540904b67b3716823dd621ed72ad3dbc615887b4f56f910b" - "78a57199", 16), - 'x': int("28e5f3a72d8f6b8499dd1bcdfceafcecec68a0d715789bcf" - "4b55fe15", 16), - 'y': int("8c8006a7da7c1a19f5328d7e865522b0c0dfb9a29b2c46dc" - "96590d2a", 16)}, - 'IUT': { - 'd': int("5e717ae889fc8d67be11c2ebe1a7d3550051448d68a040b2" - "dee8e327", 16), - 'x': int("ae7f3db340b647d61713f5374c019f1be2b28573cb6219bb" - "7b747223", 16), - 'y': int("800e6bffcf97c15864ec6e5673fb83359b45f89b8a26a27f" - "6f3dfbff", 16)}, - 'OI': int("a1b2c3d4e5bb7f1b40d14ebd70443393990b574341565369" - "645b1582daab9cc6c30d61fdcf1cdfc7e9a304651e0fdb", 16), - 'Z': int("43f23b2c760d686fc99cc008b63aea92f866e224265af60d" - "2d8ae540", 16), - 'DKM': int("ad65fa2d12541c3a21f3cd223efb", 16), - 'curve': 'secp224r1'} + { + "errno": 12, + "fail": True, + "COUNT": 50, + "CAVS": { + "d": int( + "540904b67b3716823dd621ed72ad3dbc615887b4f56f910b" + "78a57199", + 16, + ), + "x": int( + "28e5f3a72d8f6b8499dd1bcdfceafcecec68a0d715789bcf" + "4b55fe15", + 16, + ), + "y": int( + "8c8006a7da7c1a19f5328d7e865522b0c0dfb9a29b2c46dc" + "96590d2a", + 16, + ), + }, + "IUT": { + "d": int( + "5e717ae889fc8d67be11c2ebe1a7d3550051448d68a040b2" + "dee8e327", + 16, + ), + "x": int( + "ae7f3db340b647d61713f5374c019f1be2b28573cb6219bb" + "7b747223", + 16, + ), + "y": int( + "800e6bffcf97c15864ec6e5673fb83359b45f89b8a26a27f" + "6f3dfbff", + 16, + ), + }, + "OI": int( + "a1b2c3d4e5bb7f1b40d14ebd70443393990b574341565369" + "645b1582daab9cc6c30d61fdcf1cdfc7e9a304651e0fdb", + 16, + ), + "Z": int( + "43f23b2c760d686fc99cc008b63aea92f866e224265af60d" "2d8ae540", + 16, + ), + "DKM": int("ad65fa2d12541c3a21f3cd223efb", 16), + "curve": "secp224r1", + } ] assert expected == load_kasvs_ecdh_vectors(vector_data) def test_load_x963_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 12.0 # 'ANS X9.63-2001' information for sample @@ -3443,37 +4077,48 @@ def test_load_x963_vectors(): d6e4dd2a599acceb3ea54a6217ce0b50eef4f6b40a5c30250a5a8eeee208002267089dbf351f3f\ 5022aa9638bf1ee419dea9c4ff745a25ac27bda33ca08bd56dd1a59b4106cf2dbbc0ab2aa8e2ef\ a7b17902d34276951ceccab87f9661c3e8816 - """).splitlines() + """ + ).splitlines() assert load_x963_vectors(vector_data) == [ - {"hash": "SHA-1", "count": 0, - "shared_secret_length": 192, - "Z": "1c7d7b5f0597b03d06a018466ed1a93e30ed4b04dc64ccdd", - "sharedinfo_length": 0, - "key_data_length": 128, - "key_data": "bf71dffd8f4d99223936beb46fee8ccc"}, - {"hash": "SHA-1", "count": 1, - "shared_secret_length": 192, - "Z": "5ed096510e3fcf782ceea98e9737993e2b21370f6cda2ab1", - "sharedinfo_length": 0, - "key_data_length": 128, - "key_data": "ec3e224446bfd7b3be1df404104af953"}, - {"hash": "SHA-512", "count": 0, - "shared_secret_length": 521, - "Z": "00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9adb369348b\ + { + "hash": "SHA-1", + "count": 0, + "shared_secret_length": 192, + "Z": "1c7d7b5f0597b03d06a018466ed1a93e30ed4b04dc64ccdd", + "sharedinfo_length": 0, + "key_data_length": 128, + "key_data": "bf71dffd8f4d99223936beb46fee8ccc", + }, + { + "hash": "SHA-1", + "count": 1, + "shared_secret_length": 192, + "Z": "5ed096510e3fcf782ceea98e9737993e2b21370f6cda2ab1", + "sharedinfo_length": 0, + "key_data_length": 128, + "key_data": "ec3e224446bfd7b3be1df404104af953", + }, + { + "hash": "SHA-512", + "count": 0, + "shared_secret_length": 521, + "Z": "00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9adb369348b\ 81507392f1a86ddfdb7c4ff8231c4bd0f44e44a1b55b1404747a9e2e753f55ef05a2d", - "sharedinfo_length": 128, - "sharedinfo": "e3b5b4c1b0d5cf1d2b3a2f9937895d31", - "key_data_length": 1024, - "key_data": "4463f869f3cc18769b52264b0112b5858f7ad32a5a2d96d8cffabf7f\ + "sharedinfo_length": 128, + "sharedinfo": "e3b5b4c1b0d5cf1d2b3a2f9937895d31", + "key_data_length": 1024, + "key_data": "4463f869f3cc18769b52264b0112b5858f7ad32a5a2d96d8cffabf7f\ a733633d6e4dd2a599acceb3ea54a6217ce0b50eef4f6b40a5c30250a5a8eeee208002267089db\ f351f3f5022aa9638bf1ee419dea9c4ff745a25ac27bda33ca08bd56dd1a59b4106cf2dbbc0ab2\ -aa8e2efa7b17902d34276951ceccab87f9661c3e8816"}, +aa8e2efa7b17902d34276951ceccab87f9661c3e8816", + }, ] def test_load_kbkdf_vectors(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 14.4 # "SP800-108 - KDF" information for "test1" # KDF Mode Supported: Counter Mode @@ -3523,50 +4168,58 @@ def test_load_kbkdf_vectors(): instring = 7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43aa1b91eeb5\ 730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a701 KO = b8894c6133a46701909b5c8a84322dec - """).splitlines() + """ + ).splitlines() assert load_nist_kbkdf_vectors(vector_data) == [ - {'prf': 'hmac_sha1', - 'ctrlocation': 'before_fixed', - 'rlen': 8, - 'l': 128, - 'ki': b'00a39bd547fb88b2d98727cf64c195c61e1cad6c', - 'fixedinputdatabytelen': b'60', - 'fixedinputdata': b'98132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc\ -30056f6876f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242', - 'binary rep of i': b'01', - 'instring': b'0198132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc3005\ -6f6876f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242', - 'ko': b'0611e1903609b47ad7a5fc2c82e47702'}, - {'prf': 'hmac_sha1', - 'ctrlocation': 'before_fixed', - 'rlen': 8, - 'l': 128, - 'ki': b'a39bdf744ed7e33fdec060c8736e9725179885a8', - 'fixedinputdatabytelen': b'60', - 'fixedinputdata': b'af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9\ -c591e18235019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832', - 'binary rep of i': b'01', - 'instring': b'01af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9c591\ -e18235019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832', - 'ko': b'51dc4668947e3685099bc3b5f8527468'}, - {'prf': 'hmac_sha224', - 'ctrlocation': 'after_fixed', - 'rlen': 8, - 'l': 128, - 'ki': b'ab56556b107a3a79fe084df0f1bb3ad049a6cc1490f20da4b3df282c', - 'fixedinputdatabytelen': b'60', - 'fixedinputdata': b'7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43\ -aa1b91eeb5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a7', - 'binary rep of i': b'01', - 'instring': b'7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43aa1b91\ -eeb5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a701', - 'ko': b'b8894c6133a46701909b5c8a84322dec'} + { + "prf": "hmac_sha1", + "ctrlocation": "before_fixed", + "rlen": 8, + "l": 128, + "ki": b"00a39bd547fb88b2d98727cf64c195c61e1cad6c", + "fixedinputdatabytelen": b"60", + "fixedinputdata": b"98132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc\ +30056f6876f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242", + "binary rep of i": b"01", + "instring": b"0198132c1ffaf59ae5cbc0a3133d84c551bb97e0c75ecaddfc3005\ +6f6876f59803009bffc7d75c4ed46f40b8f80426750d15bc1ddb14ac5dcb69a68242", + "ko": b"0611e1903609b47ad7a5fc2c82e47702", + }, + { + "prf": "hmac_sha1", + "ctrlocation": "before_fixed", + "rlen": 8, + "l": 128, + "ki": b"a39bdf744ed7e33fdec060c8736e9725179885a8", + "fixedinputdatabytelen": b"60", + "fixedinputdata": b"af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9\ +c591e18235019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832", + "binary rep of i": b"01", + "instring": b"01af71b44940acff98949ad17f1ca20e8fdb3957cacdcd41e9c591\ +e18235019f90b9f8ee6e75700bcab2f8407525a104799b3e9725e27d738a9045e832", + "ko": b"51dc4668947e3685099bc3b5f8527468", + }, + { + "prf": "hmac_sha224", + "ctrlocation": "after_fixed", + "rlen": 8, + "l": 128, + "ki": b"ab56556b107a3a79fe084df0f1bb3ad049a6cc1490f20da4b3df282c", + "fixedinputdatabytelen": b"60", + "fixedinputdata": b"7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43\ +aa1b91eeb5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a7", + "binary rep of i": b"01", + "instring": b"7f50fc1f77c3ac752443154c1577d3c47b86fccffe82ff43aa1b91\ +eeb5730d7e9e6aab78374d854aecb7143faba6b1eb90d3d9e7a2f6d78dd9a6c4a701", + "ko": b"b8894c6133a46701909b5c8a84322dec", + }, ] def test_load_nist_ccm_vectors_dvpt(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # "CCM-DVPT" information # AES Keylen: 128 @@ -3606,61 +4259,63 @@ def test_load_nist_ccm_vectors_dvpt(): Adata = 00 CT = 3a65e03af37b81d05acc7ec1bc39deb0 Result = Fail - """).splitlines() + """ + ).splitlines() assert load_nist_ccm_vectors(vector_data) == [ { - 'key': b'4ae701103c63deca5b5a3939d7d05992', - 'alen': 0, - 'plen': 0, - 'nlen': 7, - 'tlen': 4, - 'nonce': b'5a8aa485c316e9', - 'adata': b'00', - 'ct': b'02209f55', - 'fail': False, - 'payload': b'00' - }, - { - 'key': b'4ae701103c63deca5b5a3939d7d05992', - 'alen': 0, - 'plen': 0, - 'nlen': 7, - 'tlen': 4, - 'nonce': b'3796cf51b87266', - 'adata': b'00', - 'ct': b'9a04c241', - 'fail': True, - 'payload': b'00' - }, - { - 'key': b'4bb3c4a4f893ad8c9bdc833c325d62b3', - 'alen': 0, - 'plen': 0, - 'nlen': 7, - 'tlen': 16, - 'nonce': b'5a8aa485c316e9', - 'adata': b'00', - 'ct': b'75d582db43ce9b13ab4b6f7f14341330', - 'fail': False, - 'payload': b'00' - }, - { - 'key': b'4bb3c4a4f893ad8c9bdc833c325d62b3', - 'alen': 0, - 'plen': 0, - 'nlen': 7, - 'tlen': 16, - 'nonce': b'3796cf51b87266', - 'adata': b'00', - 'ct': b'3a65e03af37b81d05acc7ec1bc39deb0', - 'fail': True, - 'payload': b'00' - } + "key": b"4ae701103c63deca5b5a3939d7d05992", + "alen": 0, + "plen": 0, + "nlen": 7, + "tlen": 4, + "nonce": b"5a8aa485c316e9", + "adata": b"00", + "ct": b"02209f55", + "fail": False, + "payload": b"00", + }, + { + "key": b"4ae701103c63deca5b5a3939d7d05992", + "alen": 0, + "plen": 0, + "nlen": 7, + "tlen": 4, + "nonce": b"3796cf51b87266", + "adata": b"00", + "ct": b"9a04c241", + "fail": True, + "payload": b"00", + }, + { + "key": b"4bb3c4a4f893ad8c9bdc833c325d62b3", + "alen": 0, + "plen": 0, + "nlen": 7, + "tlen": 16, + "nonce": b"5a8aa485c316e9", + "adata": b"00", + "ct": b"75d582db43ce9b13ab4b6f7f14341330", + "fail": False, + "payload": b"00", + }, + { + "key": b"4bb3c4a4f893ad8c9bdc833c325d62b3", + "alen": 0, + "plen": 0, + "nlen": 7, + "tlen": 16, + "nonce": b"3796cf51b87266", + "adata": b"00", + "ct": b"3a65e03af37b81d05acc7ec1bc39deb0", + "fail": True, + "payload": b"00", + }, ] def test_load_nist_ccm_vectors_vadt(): - vector_data = textwrap.dedent(""" + vector_data = textwrap.dedent( + """ # CAVS 11.0 # "CCM-VADT" information # AES Keylen: 128 @@ -3700,52 +4355,53 @@ def test_load_nist_ccm_vectors_vadt(): Adata = c5 Payload = 032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead CT = f0828917020651c085e42459c544ec52e99372005362baf308ebe - """).splitlines() + """ + ).splitlines() assert load_nist_ccm_vectors(vector_data) == [ { - 'plen': 24, - 'nlen': 13, - 'tlen': 16, - 'alen': 0, - 'key': b'd24a3d3dde8c84830280cb87abad0bb3', - 'nonce': b'f1100035bb24a8d26004e0e24b', - 'adata': b'00', - 'payload': b'7c86135ed9c2a515aaae0e9a208133897269220f30870006', - 'ct': b'1faeb0ee2ca2cd52f0aa3966578344f24e69b742c4ab37ab11233' - }, - { - 'plen': 24, - 'nlen': 13, - 'tlen': 16, - 'alen': 0, - 'key': b'd24a3d3dde8c84830280cb87abad0bb3', - 'nonce': b'f1100035bb24a8d26004e0e24b', - 'adata': b'00', - 'payload': b'48df73208cdc63d716752df7794807b1b2a80794a2433455', - 'ct': b'642145210f947bc4a0b1e678fd8c990c2c1d89d4110a95c954d61' - }, - { - 'plen': 24, - 'nlen': 13, - 'tlen': 16, - 'alen': 1, - 'key': b'08b0da255d2083808a1b4d367090bacc', - 'nonce': b'777828b13679a9e2ca89568233', - 'adata': b'dd', - 'payload': b'1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0', - 'ct': b'e8b80af4960d5417c15726406e345c5c46831192b03432eed16b6' - }, - { - 'plen': 24, - 'nlen': 13, - 'tlen': 16, - 'alen': 1, - 'key': b'08b0da255d2083808a1b4d367090bacc', - 'nonce': b'777828b13679a9e2ca89568233', - 'adata': b'c5', - 'payload': b'032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead', - 'ct': b'f0828917020651c085e42459c544ec52e99372005362baf308ebe' - } + "plen": 24, + "nlen": 13, + "tlen": 16, + "alen": 0, + "key": b"d24a3d3dde8c84830280cb87abad0bb3", + "nonce": b"f1100035bb24a8d26004e0e24b", + "adata": b"00", + "payload": b"7c86135ed9c2a515aaae0e9a208133897269220f30870006", + "ct": b"1faeb0ee2ca2cd52f0aa3966578344f24e69b742c4ab37ab11233", + }, + { + "plen": 24, + "nlen": 13, + "tlen": 16, + "alen": 0, + "key": b"d24a3d3dde8c84830280cb87abad0bb3", + "nonce": b"f1100035bb24a8d26004e0e24b", + "adata": b"00", + "payload": b"48df73208cdc63d716752df7794807b1b2a80794a2433455", + "ct": b"642145210f947bc4a0b1e678fd8c990c2c1d89d4110a95c954d61", + }, + { + "plen": 24, + "nlen": 13, + "tlen": 16, + "alen": 1, + "key": b"08b0da255d2083808a1b4d367090bacc", + "nonce": b"777828b13679a9e2ca89568233", + "adata": b"dd", + "payload": b"1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0", + "ct": b"e8b80af4960d5417c15726406e345c5c46831192b03432eed16b6", + }, + { + "plen": 24, + "nlen": 13, + "tlen": 16, + "alen": 1, + "key": b"08b0da255d2083808a1b4d367090bacc", + "nonce": b"777828b13679a9e2ca89568233", + "adata": b"c5", + "payload": b"032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead", + "ct": b"f0828917020651c085e42459c544ec52e99372005362baf308ebe", + }, ] @@ -3767,16 +4423,15 @@ def test_raises_unsupported_algorithm_wrong_reason(): # Check that it fails if the wrong reason code is raised. with pytest.raises(AssertionError): with raises_unsupported_algorithm(None): - raise UnsupportedAlgorithm("An error.", - _Reasons.BACKEND_MISSING_INTERFACE) + raise UnsupportedAlgorithm( + "An error.", _Reasons.BACKEND_MISSING_INTERFACE + ) def test_raises_unsupported_no_exc(): # Check that it fails if no exception is raised. with pytest.raises(pytest.fail.Exception): - with raises_unsupported_algorithm( - _Reasons.BACKEND_MISSING_INTERFACE - ): + with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE): pass @@ -3785,6 +4440,7 @@ def test_raises_unsupported_algorithm(): with raises_unsupported_algorithm( _Reasons.BACKEND_MISSING_INTERFACE ) as exc_info: - raise UnsupportedAlgorithm("An error.", - _Reasons.BACKEND_MISSING_INTERFACE) + raise UnsupportedAlgorithm( + "An error.", _Reasons.BACKEND_MISSING_INTERFACE + ) assert exc_info.type is UnsupportedAlgorithm diff --git a/tests/test_warnings.py b/tests/test_warnings.py index d27e757fc845..073c699bc084 100644 --- a/tests/test_warnings.py +++ b/tests/test_warnings.py @@ -21,7 +21,7 @@ def test_deprecated(self, monkeypatch): value=1, module_name=mod.__name__, message="deprecated message text", - warning_class=DeprecationWarning + warning_class=DeprecationWarning, ) mod.Y = deprecated( value=2, @@ -55,7 +55,7 @@ def test_deleting_deprecated_members(self, monkeypatch): value=1, module_name=mod.__name__, message="deprecated message text", - warning_class=DeprecationWarning + warning_class=DeprecationWarning, ) mod.Y = deprecated( value=2, diff --git a/tests/utils.py b/tests/utils.py index 401b4e33871c..5d98af00e337 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -29,9 +29,7 @@ def check_backend_support(backend, item): for mark in item.node.iter_markers("supported"): if not mark.kwargs["only_if"](backend): - pytest.skip("{} ({})".format( - mark.kwargs["skip_message"], backend - )) + pytest.skip("{} ({})".format(mark.kwargs["skip_message"], backend)) @contextmanager @@ -55,8 +53,11 @@ def load_nist_vectors(vector_data): line = line.strip() # Blank lines, comments, and section headers are ignored - if not line or line.startswith("#") or (line.startswith("[") and - line.endswith("]")): + if ( + not line + or line.startswith("#") + or (line.startswith("[") and line.endswith("]")) + ): continue if line.strip() == "FAIL": @@ -101,11 +102,9 @@ def load_cryptrec_vectors(vector_data): ct = line.split(" : ")[1].replace(" ", "").encode("ascii") # after a C is found the K+P+C tuple is complete # there are many P+C pairs for each K - cryptrec_list.append({ - "key": key, - "plaintext": pt, - "ciphertext": ct - }) + cryptrec_list.append( + {"key": key, "plaintext": pt, "ciphertext": ct} + ) else: raise ValueError("Invalid line in file '{}'".format(line)) return cryptrec_list @@ -163,9 +162,9 @@ def load_pkcs1_vectors(vector_data): vectors = [] for line in vector_data: if ( - line.startswith("# PSS Example") or - line.startswith("# OAEP Example") or - line.startswith("# PKCS#1 v1.5") + line.startswith("# PSS Example") + or line.startswith("# OAEP Example") + or line.startswith("# PKCS#1 v1.5") ): if example_vector: for key, value in six.iteritems(example_vector): @@ -191,9 +190,8 @@ def load_pkcs1_vectors(vector_data): elif line.startswith("# Encryption"): attr = "encryption" continue - elif ( - example_vector and - line.startswith("# =============================================") + elif example_vector and line.startswith( + "# =============================================" ): for key, value in six.iteritems(example_vector): hex_str = "".join(value).replace(" ", "").encode("ascii") @@ -208,9 +206,8 @@ def load_pkcs1_vectors(vector_data): example_vector[attr].append(line.strip()) continue - if ( - line.startswith("# Example") or - line.startswith("# =============================================") + if line.startswith("# Example") or line.startswith( + "# =============================================" ): if key: assert private_key_vector @@ -228,18 +225,16 @@ def load_pkcs1_vectors(vector_data): examples = [] assert ( - private_key_vector['public_exponent'] == - public_key_vector['public_exponent'] + private_key_vector["public_exponent"] + == public_key_vector["public_exponent"] ) assert ( - private_key_vector['modulus'] == - public_key_vector['modulus'] + private_key_vector["modulus"] + == public_key_vector["modulus"] ) - vectors.append( - (private_key_vector, public_key_vector) - ) + vectors.append((private_key_vector, public_key_vector)) public_key_vector = collections.defaultdict(list) private_key_vector = collections.defaultdict(list) @@ -321,15 +316,10 @@ def load_rsa_nist_vectors(vector_data): "public_exponent": e, "salt_length": salt_length, "algorithm": value, - "fail": False + "fail": False, } else: - test_data = { - "modulus": n, - "p": p, - "q": q, - "algorithm": value - } + test_data = {"modulus": n, "p": p, "q": q, "algorithm": value} if salt_length is not None: test_data["salt_length"] = salt_length data.append(test_data) @@ -359,21 +349,24 @@ def load_fips_dsa_key_pair_vectors(vector_data): continue if line.startswith("P"): - vectors.append({'p': int(line.split("=")[1], 16)}) + vectors.append({"p": int(line.split("=")[1], 16)}) elif line.startswith("Q"): - vectors[-1]['q'] = int(line.split("=")[1], 16) + vectors[-1]["q"] = int(line.split("=")[1], 16) elif line.startswith("G"): - vectors[-1]['g'] = int(line.split("=")[1], 16) - elif line.startswith("X") and 'x' not in vectors[-1]: - vectors[-1]['x'] = int(line.split("=")[1], 16) - elif line.startswith("X") and 'x' in vectors[-1]: - vectors.append({'p': vectors[-1]['p'], - 'q': vectors[-1]['q'], - 'g': vectors[-1]['g'], - 'x': int(line.split("=")[1], 16) - }) + vectors[-1]["g"] = int(line.split("=")[1], 16) + elif line.startswith("X") and "x" not in vectors[-1]: + vectors[-1]["x"] = int(line.split("=")[1], 16) + elif line.startswith("X") and "x" in vectors[-1]: + vectors.append( + { + "p": vectors[-1]["p"], + "q": vectors[-1]["q"], + "g": vectors[-1]["g"], + "x": int(line.split("=")[1], 16), + } + ) elif line.startswith("Y"): - vectors[-1]['y'] = int(line.split("=")[1], 16) + vectors[-1]["y"] = int(line.split("=")[1], 16) return vectors @@ -403,33 +396,37 @@ def load_fips_dsa_sig_vectors(vector_data): name, value = [c.strip() for c in line.split("=")] if name == "P": - vectors.append({'p': int(value, 16), - 'digest_algorithm': digest_algorithm}) + vectors.append( + {"p": int(value, 16), "digest_algorithm": digest_algorithm} + ) elif name == "Q": - vectors[-1]['q'] = int(value, 16) + vectors[-1]["q"] = int(value, 16) elif name == "G": - vectors[-1]['g'] = int(value, 16) - elif name == "Msg" and 'msg' not in vectors[-1]: + vectors[-1]["g"] = int(value, 16) + elif name == "Msg" and "msg" not in vectors[-1]: hexmsg = value.strip().encode("ascii") - vectors[-1]['msg'] = binascii.unhexlify(hexmsg) - elif name == "Msg" and 'msg' in vectors[-1]: + vectors[-1]["msg"] = binascii.unhexlify(hexmsg) + elif name == "Msg" and "msg" in vectors[-1]: hexmsg = value.strip().encode("ascii") - vectors.append({'p': vectors[-1]['p'], - 'q': vectors[-1]['q'], - 'g': vectors[-1]['g'], - 'digest_algorithm': - vectors[-1]['digest_algorithm'], - 'msg': binascii.unhexlify(hexmsg)}) + vectors.append( + { + "p": vectors[-1]["p"], + "q": vectors[-1]["q"], + "g": vectors[-1]["g"], + "digest_algorithm": vectors[-1]["digest_algorithm"], + "msg": binascii.unhexlify(hexmsg), + } + ) elif name == "X": - vectors[-1]['x'] = int(value, 16) + vectors[-1]["x"] = int(value, 16) elif name == "Y": - vectors[-1]['y'] = int(value, 16) + vectors[-1]["y"] = int(value, 16) elif name == "R": - vectors[-1]['r'] = int(value, 16) + vectors[-1]["r"] = int(value, 16) elif name == "S": - vectors[-1]['s'] = int(value, 16) + vectors[-1]["s"] = int(value, 16) elif name == "Result": - vectors[-1]['result'] = value.split("(")[0].strip() + vectors[-1]["result"] = value.split("(")[0].strip() return vectors @@ -441,14 +438,12 @@ def load_fips_dsa_sig_vectors(vector_data): "P-256": "secp256r1", "P-384": "secp384r1", "P-521": "secp521r1", - "K-163": "sect163k1", "K-233": "sect233k1", "K-256": "secp256k1", "K-283": "sect283k1", "K-409": "sect409k1", "K-571": "sect571k1", - "B-163": "sect163r2", "B-233": "sect233r1", "B-283": "sect283r1", @@ -476,10 +471,7 @@ def load_fips_ecdsa_key_pair_vectors(vector_data): if key_data is not None: vectors.append(key_data) - key_data = { - "curve": curve_name, - "d": int(line.split("=")[1], 16) - } + key_data = {"curve": curve_name, "d": int(line.split("=")[1], 16)} elif key_data is not None: if line.startswith("Qx = "): @@ -521,7 +513,7 @@ def load_fips_ecdsa_signing_vectors(vector_data): data = { "curve": curve_name, "digest_algorithm": digest_name, - "message": binascii.unhexlify(hexmsg) + "message": binascii.unhexlify(hexmsg), } elif data is not None: @@ -551,10 +543,7 @@ def load_kasvs_dh_vectors(vector_data): result_rx = re.compile(r"([FP]) \(([0-9]+) -") vectors = [] - data = { - "fail_z": False, - "fail_agree": False - } + data = {"fail_z": False, "fail_agree": False} for line in vector_data: line = line.strip() @@ -596,7 +585,7 @@ def load_kasvs_dh_vectors(vector_data): "q": data["q"], "g": data["g"], "fail_z": False, - "fail_agree": False + "fail_agree": False, } return vectors @@ -646,7 +635,7 @@ def load_kasvs_ecdh_vectors(vector_data): tag = line curve = None elif line.startswith("[Curve selected:"): - curve = curve_name_map[line.split(':')[1].strip()[:-1]] + curve = curve_name_map[line.split(":")[1].strip()[:-1]] if tag is not None and curve is not None: sets[tag.strip("[]")] = curve @@ -775,8 +764,8 @@ def load_nist_kbkdf_vectors(vector_data): if line.startswith("[") and line.endswith("]"): tag_data = line[1:-1] name, value = [c.strip() for c in tag_data.split("=")] - if value.endswith('_BITS'): - value = int(value.split('_')[0]) + if value.endswith("_BITS"): + value = int(value.split("_")[0]) tag.update({name.lower(): value}) continue @@ -798,17 +787,19 @@ def load_nist_kbkdf_vectors(vector_data): def load_ed25519_vectors(vector_data): data = [] for line in vector_data: - secret_key, public_key, message, signature, _ = line.split(':') + secret_key, public_key, message, signature, _ = line.split(":") # In the vectors the first element is secret key + public key secret_key = secret_key[0:64] # In the vectors the signature section is signature + message signature = signature[0:128] - data.append({ - "secret_key": secret_key, - "public_key": public_key, - "message": message, - "signature": signature - }) + data.append( + { + "secret_key": secret_key, + "public_key": public_key, + "message": message, + "signature": signature, + } + ) return data diff --git a/tests/wycheproof/test_aes.py b/tests/wycheproof/test_aes.py index 2b1ed77d019b..e33c01e99f54 100644 --- a/tests/wycheproof/test_aes.py +++ b/tests/wycheproof/test_aes.py @@ -11,9 +11,7 @@ from cryptography.exceptions import InvalidTag from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives import padding -from cryptography.hazmat.primitives.ciphers import ( - Cipher, algorithms, modes -) +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESGCM from ..hazmat.primitives.test_aead import _aead_supported @@ -31,8 +29,9 @@ def test_aes_cbc_pkcs5(backend, wycheproof): cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend) enc = cipher.encryptor() - computed_ct = enc.update( - padder.update(msg) + padder.finalize()) + enc.finalize() + computed_ct = ( + enc.update(padder.update(msg) + padder.finalize()) + enc.finalize() + ) dec = cipher.decryptor() padded_msg = dec.update(ct) + dec.finalize() unpadder = padding.PKCS7(128).unpadder() @@ -69,7 +68,7 @@ def test_aes_gcm(backend, wycheproof): dec = Cipher( algorithms.AES(key), modes.GCM(iv, tag, min_tag_length=len(tag)), - backend + backend, ).decryptor() dec.authenticate_additional_data(aad) computed_msg = dec.update(ct) + dec.finalize() @@ -81,7 +80,7 @@ def test_aes_gcm(backend, wycheproof): dec = Cipher( algorithms.AES(key), modes.GCM(iv, tag, min_tag_length=len(tag)), - backend + backend, ).decryptor() dec.authenticate_additional_data(aad) dec.update(ct) @@ -131,8 +130,8 @@ def test_aes_ccm_aead_api(backend, wycheproof): tag = binascii.unhexlify(wycheproof.testcase["tag"]) if ( - wycheproof.invalid and - wycheproof.testcase["comment"] == "Invalid tag size" + wycheproof.invalid + and wycheproof.testcase["comment"] == "Invalid tag size" ): with pytest.raises(ValueError): AESCCM(key, tag_length=wycheproof.testgroup["tagSize"] // 8) diff --git a/tests/wycheproof/test_chacha20poly1305.py b/tests/wycheproof/test_chacha20poly1305.py index deef5a0a7dfe..48023ca63d70 100644 --- a/tests/wycheproof/test_chacha20poly1305.py +++ b/tests/wycheproof/test_chacha20poly1305.py @@ -17,7 +17,7 @@ @pytest.mark.skipif( not _aead_supported(ChaCha20Poly1305), - reason="Requires OpenSSL with ChaCha20Poly1305 support" + reason="Requires OpenSSL with ChaCha20Poly1305 support", ) @pytest.mark.requires_backend_interface(interface=CipherBackend) @pytest.mark.wycheproof_tests("chacha20_poly1305_test.json") diff --git a/tests/wycheproof/test_dsa.py b/tests/wycheproof/test_dsa.py index 5019dc6addb6..9185b3e2f4e0 100644 --- a/tests/wycheproof/test_dsa.py +++ b/tests/wycheproof/test_dsa.py @@ -34,10 +34,8 @@ def test_dsa_signature(backend, wycheproof): ) digest = _DIGESTS[wycheproof.testgroup["sha"]] - if ( - wycheproof.valid or ( - wycheproof.acceptable and not wycheproof.has_flag("NoLeadingZero") - ) + if wycheproof.valid or ( + wycheproof.acceptable and not wycheproof.has_flag("NoLeadingZero") ): key.verify( binascii.unhexlify(wycheproof.testcase["sig"]), diff --git a/tests/wycheproof/test_ecdsa.py b/tests/wycheproof/test_ecdsa.py index 49a3388d095b..802bb9f00b3e 100644 --- a/tests/wycheproof/test_ecdsa.py +++ b/tests/wycheproof/test_ecdsa.py @@ -75,9 +75,8 @@ def test_ecdsa_signature(backend, wycheproof): if not backend.hash_supported(digest): pytest.skip("Hash {} not supported".format(digest)) - if ( - wycheproof.valid or - (wycheproof.acceptable and not wycheproof.has_flag("MissingZero")) + if wycheproof.valid or ( + wycheproof.acceptable and not wycheproof.has_flag("MissingZero") ): key.verify( binascii.unhexlify(wycheproof.testcase["sig"]), diff --git a/tests/wycheproof/test_eddsa.py b/tests/wycheproof/test_eddsa.py index 5beca130438d..42c1498afff1 100644 --- a/tests/wycheproof/test_eddsa.py +++ b/tests/wycheproof/test_eddsa.py @@ -15,11 +15,9 @@ @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support" -) -@pytest.mark.wycheproof_tests( - "eddsa_test.json", + skip_message="Requires OpenSSL with Ed25519 support", ) +@pytest.mark.wycheproof_tests("eddsa_test.json") def test_ed25519_signature(backend, wycheproof): # We want to fail if/when wycheproof adds more edwards curve tests # so we can add them as well. @@ -44,11 +42,9 @@ def test_ed25519_signature(backend, wycheproof): @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), - skip_message="Requires OpenSSL with Ed448 support" -) -@pytest.mark.wycheproof_tests( - "ed448_test.json", + skip_message="Requires OpenSSL with Ed448 support", ) +@pytest.mark.wycheproof_tests("ed448_test.json") def test_ed448_signature(backend, wycheproof): key = Ed448PublicKey.from_public_bytes( binascii.unhexlify(wycheproof.testgroup["key"]["pk"]) diff --git a/tests/wycheproof/test_hkdf.py b/tests/wycheproof/test_hkdf.py index 7038d6232c8e..3e1687ea3105 100644 --- a/tests/wycheproof/test_hkdf.py +++ b/tests/wycheproof/test_hkdf.py @@ -35,7 +35,7 @@ def test_hkdf(backend, wycheproof): length=wycheproof.testcase["size"], salt=binascii.unhexlify(wycheproof.testcase["salt"]), info=binascii.unhexlify(wycheproof.testcase["info"]), - backend=backend + backend=backend, ) return @@ -44,7 +44,7 @@ def test_hkdf(backend, wycheproof): length=wycheproof.testcase["size"], salt=binascii.unhexlify(wycheproof.testcase["salt"]), info=binascii.unhexlify(wycheproof.testcase["info"]), - backend=backend + backend=backend, ) result = h.derive(binascii.unhexlify(wycheproof.testcase["ikm"])) assert result == binascii.unhexlify(wycheproof.testcase["okm"]) diff --git a/tests/wycheproof/test_keywrap.py b/tests/wycheproof/test_keywrap.py index 5f694e4d3346..9c7d522e61e0 100644 --- a/tests/wycheproof/test_keywrap.py +++ b/tests/wycheproof/test_keywrap.py @@ -44,11 +44,9 @@ def test_keywrap(backend, wycheproof): key_to_wrap = binascii.unhexlify(wycheproof.testcase["msg"]) expected = binascii.unhexlify(wycheproof.testcase["ct"]) - if ( - wycheproof.valid or ( - wycheproof.acceptable and - wycheproof.testcase["comment"] != "invalid size of wrapped key" - ) + if wycheproof.valid or ( + wycheproof.acceptable + and wycheproof.testcase["comment"] != "invalid size of wrapped key" ): result = keywrap.aes_key_wrap(wrapping_key, key_to_wrap, backend) assert result == expected diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index a7c26e6aae47..c71f05adf58c 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -36,11 +36,9 @@ def should_verify(backend, wycheproof): if wycheproof.acceptable: if ( - ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER or - backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - ) and wycheproof.has_flag("MissingNull") - ): + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER + or backend._lib.CRYPTOGRAPHY_IS_LIBRESSL + ) and wycheproof.has_flag("MissingNull"): return False return True @@ -99,9 +97,7 @@ def test_rsa_pkcs1v15_signature(backend, wycheproof): ) -@pytest.mark.wycheproof_tests( - "rsa_sig_gen_misc_test.json" -) +@pytest.mark.wycheproof_tests("rsa_sig_gen_misc_test.json") def test_rsa_pkcs1v15_signature_generation(backend, wycheproof): key = serialization.load_pem_private_key( wycheproof.testgroup["privateKeyPem"].encode(), @@ -150,9 +146,9 @@ def test_rsa_pss_signature(backend, wycheproof): binascii.unhexlify(wycheproof.testcase["msg"]), padding.PSS( mgf=padding.MGF1(mgf_digest), - salt_length=wycheproof.testgroup["sLen"] + salt_length=wycheproof.testgroup["sLen"], ), - digest + digest, ) else: with pytest.raises(InvalidSignature): @@ -161,17 +157,17 @@ def test_rsa_pss_signature(backend, wycheproof): binascii.unhexlify(wycheproof.testcase["msg"]), padding.PSS( mgf=padding.MGF1(mgf_digest), - salt_length=wycheproof.testgroup["sLen"] + salt_length=wycheproof.testgroup["sLen"], ), - digest + digest, ) @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER or - backend._lib.CRYPTOGRAPHY_IS_LIBRESSL + backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER + or backend._lib.CRYPTOGRAPHY_IS_LIBRESSL ), skip_message=( "A handful of these tests fail on OpenSSL 1.0.2 and since upstream " @@ -210,7 +206,7 @@ def test_rsa_oaep_encryption(backend, wycheproof): padding_algo = padding.OAEP( mgf=padding.MGF1(algorithm=mgf_digest), algorithm=digest, - label=binascii.unhexlify(wycheproof.testcase["label"]) + label=binascii.unhexlify(wycheproof.testcase["label"]), ) if not backend.rsa_padding_supported(padding_algo): @@ -222,15 +218,13 @@ def test_rsa_oaep_encryption(backend, wycheproof): if wycheproof.valid or wycheproof.acceptable: pt = key.decrypt( - binascii.unhexlify(wycheproof.testcase["ct"]), - padding_algo + binascii.unhexlify(wycheproof.testcase["ct"]), padding_algo ) assert pt == binascii.unhexlify(wycheproof.testcase["msg"]) else: with pytest.raises(ValueError): key.decrypt( - binascii.unhexlify(wycheproof.testcase["ct"]), - padding_algo + binascii.unhexlify(wycheproof.testcase["ct"]), padding_algo ) @@ -248,13 +242,12 @@ def test_rsa_pkcs1_encryption(backend, wycheproof): if wycheproof.valid: pt = key.decrypt( - binascii.unhexlify(wycheproof.testcase["ct"]), - padding.PKCS1v15() + binascii.unhexlify(wycheproof.testcase["ct"]), padding.PKCS1v15() ) assert pt == binascii.unhexlify(wycheproof.testcase["msg"]) else: with pytest.raises(ValueError): key.decrypt( binascii.unhexlify(wycheproof.testcase["ct"]), - padding.PKCS1v15() + padding.PKCS1v15(), ) diff --git a/tests/wycheproof/test_x25519.py b/tests/wycheproof/test_x25519.py index 295794670825..ce2a965e3a42 100644 --- a/tests/wycheproof/test_x25519.py +++ b/tests/wycheproof/test_x25519.py @@ -9,18 +9,20 @@ import pytest from cryptography.hazmat.primitives.asymmetric.x25519 import ( - X25519PrivateKey, X25519PublicKey + X25519PrivateKey, + X25519PublicKey, ) @pytest.mark.supported( only_if=lambda backend: backend.x25519_supported(), - skip_message="Requires OpenSSL with X25519 support" + skip_message="Requires OpenSSL with X25519 support", ) @pytest.mark.wycheproof_tests("x25519_test.json") def test_x25519(backend, wycheproof): assert set(wycheproof.testgroup.items()) == { - ("curve", "curve25519"), ("type", "XdhComp") + ("curve", "curve25519"), + ("type", "XdhComp"), } private_key = X25519PrivateKey.from_private_bytes( diff --git a/tests/wycheproof/test_x448.py b/tests/wycheproof/test_x448.py index 094bf57c48c8..fcac80996f74 100644 --- a/tests/wycheproof/test_x448.py +++ b/tests/wycheproof/test_x448.py @@ -9,18 +9,20 @@ import pytest from cryptography.hazmat.primitives.asymmetric.x448 import ( - X448PrivateKey, X448PublicKey + X448PrivateKey, + X448PublicKey, ) @pytest.mark.supported( only_if=lambda backend: backend.x448_supported(), - skip_message="Requires OpenSSL with X448 support" + skip_message="Requires OpenSSL with X448 support", ) @pytest.mark.wycheproof_tests("x448_test.json") def test_x448(backend, wycheproof): assert set(wycheproof.testgroup.items()) == { - ("curve", "curve448"), ("type", "XdhComp") + ("curve", "curve448"), + ("type", "XdhComp"), } private_key = X448PrivateKey.from_private_bytes( diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 98371a62cf53..5816718a087e 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -24,23 +24,22 @@ def _load_data(filename, loader): return load_vectors_from_file( - filename=filename, - loader=lambda data: loader(data.read()), - mode="rb" + filename=filename, loader=lambda data: loader(data.read()), mode="rb" ) def _cert_and_issuer(): from cryptography.hazmat.backends.openssl.backend import backend + cert = _load_cert( os.path.join("x509", "cryptography.io.pem"), x509.load_pem_x509_certificate, - backend + backend, ) issuer = _load_cert( os.path.join("x509", "rapidssl_sha256_ca_g3.pem"), x509.load_pem_x509_certificate, - backend + backend, ) return cert, issuer @@ -51,23 +50,23 @@ def _generate_root(private_key=None, algorithm=hashes.SHA256()): if private_key is None: private_key = EC_KEY_SECP256R1.private_key(backend) - subject = x509.Name([ - x509.NameAttribute(x509.NameOID.COUNTRY_NAME, u'US'), - x509.NameAttribute(x509.NameOID.COMMON_NAME, u'Cryptography CA'), - ]) - - builder = x509.CertificateBuilder().serial_number( - 123456789 - ).issuer_name( - subject - ).subject_name( - subject - ).public_key( - private_key.public_key() - ).not_valid_before( - datetime.datetime.now() - ).not_valid_after( - datetime.datetime.now() + datetime.timedelta(days=3650) + subject = x509.Name( + [ + x509.NameAttribute(x509.NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(x509.NameOID.COMMON_NAME, u"Cryptography CA"), + ] + ) + + builder = ( + x509.CertificateBuilder() + .serial_number(123456789) + .issuer_name(subject) + .subject_name(subject) + .public_key(private_key.public_key()) + .not_valid_before(datetime.datetime.now()) + .not_valid_after( + datetime.datetime.now() + datetime.timedelta(days=3650) + ) ) cert = builder.sign(private_key, algorithm, backend) @@ -84,10 +83,12 @@ def test_load_request(self): os.path.join("x509", "ocsp", "req-sha1.der"), ocsp.load_der_ocsp_request, ) - assert req.issuer_name_hash == (b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" - b"\xc7mmLpQ\x9e`\xa7\xbd") - assert req.issuer_key_hash == (b"yu\xbb\x84:\xcb,\xdez\t\xbe1" - b"\x1bC\xbc\x1c*MSX") + assert req.issuer_name_hash == ( + b"8\xcaF\x8c\x07D\x8d\xf4\x81\x96" b"\xc7mmLpQ\x9e`\xa7\xbd" + ) + assert req.issuer_key_hash == ( + b"yu\xbb\x84:\xcb,\xdez\t\xbe1" b"\x1bC\xbc\x1c*MSX" + ) assert isinstance(req.hash_algorithm, hashes.SHA1) assert req.serial_number == int( "98D9E5C0B4C373552DF77C5D0F1EB5128E4945F9", 16 @@ -125,7 +126,7 @@ def test_serialize_request(self): req_bytes = load_vectors_from_file( filename=os.path.join("x509", "ocsp", "req-sha1.der"), loader=lambda data: data.read(), - mode="rb" + mode="rb", ) req = ocsp.load_der_ocsp_request(req_bytes) assert req.public_bytes(serialization.Encoding.DER) == req_bytes @@ -196,16 +197,14 @@ def test_create_ocsp_request(self): [ [x509.OCSPNonce(b"0000"), False], [x509.OCSPNonce(b"\x00\x01\x02"), True], - ] + ], ) def test_create_ocsp_request_with_extension(self, ext, critical): cert, issuer = _cert_and_issuer() builder = ocsp.OCSPRequestBuilder() builder = builder.add_certificate( cert, issuer, hashes.SHA1() - ).add_extension( - ext, critical - ) + ).add_extension(ext, critical) req = builder.build() assert len(req.extensions) == 1 assert req.extensions[0].value == ext @@ -219,13 +218,25 @@ def test_add_response_twice(self): time = datetime.datetime.now() builder = ocsp.OCSPResponseBuilder() builder = builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, time, - time, None, None + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + time, + None, + None, ) with pytest.raises(ValueError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, time, - time, None, None + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + time, + None, + None, ) def test_invalid_add_response(self): @@ -235,28 +246,58 @@ def test_invalid_add_response(self): builder = ocsp.OCSPResponseBuilder() with pytest.raises(TypeError): builder.add_response( - 'bad', issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, - time, time, None, None + "bad", + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + time, + None, + None, ) with pytest.raises(TypeError): builder.add_response( - cert, 'bad', hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, - time, time, None, None + cert, + "bad", + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + time, + None, + None, ) with pytest.raises(ValueError): builder.add_response( - cert, issuer, 'notahash', ocsp.OCSPCertStatus.GOOD, - time, time, None, None + cert, + issuer, + "notahash", + ocsp.OCSPCertStatus.GOOD, + time, + time, + None, + None, ) with pytest.raises(TypeError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, - 'bad', time, None, None + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + "bad", + time, + None, + None, ) with pytest.raises(TypeError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, - time, 'bad', None, None + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + "bad", + None, + None, ) with pytest.raises(TypeError): @@ -265,28 +306,58 @@ def test_invalid_add_response(self): ) with pytest.raises(ValueError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, - time, time, time, None + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + time, + time, + None, ) with pytest.raises(ValueError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.GOOD, - time, time, None, reason + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.GOOD, + time, + time, + None, + reason, ) with pytest.raises(TypeError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.REVOKED, - time, time, None, reason + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.REVOKED, + time, + time, + None, + reason, ) with pytest.raises(TypeError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.REVOKED, - time, time, time, 0 + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.REVOKED, + time, + time, + time, + 0, ) with pytest.raises(ValueError): builder.add_response( - cert, issuer, hashes.SHA256(), ocsp.OCSPCertStatus.REVOKED, - time, time, time - datetime.timedelta(days=36500), None + cert, + issuer, + hashes.SHA256(), + ocsp.OCSPCertStatus.REVOKED, + time, + time, + time - datetime.timedelta(days=36500), + None, ) def test_invalid_certificates(self): @@ -294,9 +365,9 @@ def test_invalid_certificates(self): with pytest.raises(ValueError): builder.certificates([]) with pytest.raises(TypeError): - builder.certificates(['notacert']) + builder.certificates(["notacert"]) with pytest.raises(TypeError): - builder.certificates('invalid') + builder.certificates("invalid") _, issuer = _cert_and_issuer() builder = builder.certificates([issuer]) @@ -307,9 +378,9 @@ def test_invalid_responder_id(self): builder = ocsp.OCSPResponseBuilder() cert, _ = _cert_and_issuer() with pytest.raises(TypeError): - builder.responder_id(ocsp.OCSPResponderEncoding.HASH, 'invalid') + builder.responder_id(ocsp.OCSPResponderEncoding.HASH, "invalid") with pytest.raises(TypeError): - builder.responder_id('notanenum', cert) + builder.responder_id("notanenum", cert) builder = builder.responder_id(ocsp.OCSPResponderEncoding.NAME, cert) with pytest.raises(ValueError): @@ -337,8 +408,14 @@ def test_sign_no_responder_id(self): this_update = current_time - datetime.timedelta(days=1) next_update = this_update + datetime.timedelta(days=7) builder = builder.add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, ) with pytest.raises(ValueError): builder.sign(private_key, hashes.SHA256()) @@ -353,11 +430,17 @@ def test_sign_invalid_hash_algorithm(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, ) with pytest.raises(TypeError): - builder.sign(private_key, 'notahash') + builder.sign(private_key, "notahash") def test_sign_good_cert(self): builder = ocsp.OCSPResponseBuilder() @@ -369,15 +452,23 @@ def test_sign_good_cert(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, ) resp = builder.sign(private_key, hashes.SHA256()) assert resp.responder_name == root_cert.subject assert resp.responder_key_hash is None assert (current_time - resp.produced_at).total_seconds() < 10 - assert (resp.signature_algorithm_oid == - x509.SignatureAlgorithmOID.ECDSA_WITH_SHA256) + assert ( + resp.signature_algorithm_oid + == x509.SignatureAlgorithmOID.ECDSA_WITH_SHA256 + ) assert resp.certificate_status == ocsp.OCSPCertStatus.GOOD assert resp.revocation_time is None assert resp.revocation_reason is None @@ -398,8 +489,14 @@ def test_sign_revoked_cert(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, - this_update, next_update, revoked_date, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.REVOKED, + this_update, + next_update, + revoked_date, + None, ) resp = builder.sign(private_key, hashes.SHA256()) assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED @@ -418,13 +515,19 @@ def test_sign_with_appended_certs(self): current_time = datetime.datetime.utcnow().replace(microsecond=0) this_update = current_time - datetime.timedelta(days=1) next_update = this_update + datetime.timedelta(days=7) - builder = builder.responder_id( - ocsp.OCSPResponderEncoding.NAME, root_cert - ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None - ).certificates( - [root_cert] + builder = ( + builder.responder_id(ocsp.OCSPResponderEncoding.NAME, root_cert) + .add_response( + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, + ) + .certificates([root_cert]) ) resp = builder.sign(private_key, hashes.SHA256()) assert resp.certificates == [root_cert] @@ -439,8 +542,14 @@ def test_sign_revoked_no_next_update(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, - this_update, None, revoked_date, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.REVOKED, + this_update, + None, + revoked_date, + None, ) resp = builder.sign(private_key, hashes.SHA256()) assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED @@ -463,9 +572,14 @@ def test_sign_revoked_with_reason(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, - this_update, next_update, revoked_date, - x509.ReasonFlags.key_compromise + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.REVOKED, + this_update, + next_update, + revoked_date, + x509.ReasonFlags.key_compromise, ) resp = builder.sign(private_key, hashes.SHA256()) assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED @@ -487,13 +601,19 @@ def test_sign_responder_id_key_hash(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.HASH, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, ) resp = builder.sign(private_key, hashes.SHA256()) assert resp.responder_name is None assert resp.responder_key_hash == ( - b'\x8ca\x94\xe0\x948\xed\x89\xd8\xd4N\x89p\t\xd6\xf9^_\xec}' + b"\x8ca\x94\xe0\x948\xed\x89\xd8\xd4N\x89p\t\xd6\xf9^_\xec}" ) private_key.public_key().verify( resp.signature, resp.tbs_response_bytes, ec.ECDSA(hashes.SHA256()) @@ -509,10 +629,17 @@ def test_invalid_sign_responder_cert_does_not_match_private_key(self): builder = builder.responder_id( ocsp.OCSPResponderEncoding.HASH, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, ) from cryptography.hazmat.backends.openssl.backend import backend + diff_key = ec.generate_private_key(ec.SECP256R1(), backend) with pytest.raises(ValueError): builder.sign(diff_key, hashes.SHA256()) @@ -524,13 +651,19 @@ def test_sign_with_extension(self): current_time = datetime.datetime.utcnow().replace(microsecond=0) this_update = current_time - datetime.timedelta(days=1) next_update = this_update + datetime.timedelta(days=7) - builder = builder.responder_id( - ocsp.OCSPResponderEncoding.HASH, root_cert - ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.GOOD, this_update, - next_update, None, None - ).add_extension( - x509.OCSPNonce(b"012345"), False + builder = ( + builder.responder_id(ocsp.OCSPResponderEncoding.HASH, root_cert) + .add_response( + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.GOOD, + this_update, + next_update, + None, + None, + ) + .add_extension(x509.OCSPNonce(b"012345"), False) ) resp = builder.sign(private_key, hashes.SHA256()) assert len(resp.extensions) == 1 @@ -548,7 +681,7 @@ def test_sign_with_extension(self): (ocsp.OCSPResponseStatus.TRY_LATER, b"0\x03\n\x01\x03"), (ocsp.OCSPResponseStatus.SIG_REQUIRED, b"0\x03\n\x01\x05"), (ocsp.OCSPResponseStatus.UNAUTHORIZED, b"0\x03\n\x01\x06"), - ] + ], ) def test_build_non_successful_statuses(self, status, der): resp = ocsp.OCSPResponseBuilder.build_unsuccessful(status) @@ -578,58 +711,81 @@ def test_repr(self): @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_eq(self, backend): - sct1 = _load_data( - os.path.join("x509", "ocsp", "resp-sct-extension.der"), - ocsp.load_der_ocsp_response, - ).single_extensions.get_extension_for_class( - x509.SignedCertificateTimestamps - ).value - sct2 = _load_data( - os.path.join("x509", "ocsp", "resp-sct-extension.der"), - ocsp.load_der_ocsp_response, - ).single_extensions.get_extension_for_class( - x509.SignedCertificateTimestamps - ).value + sct1 = ( + _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + .single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ) + .value + ) + sct2 = ( + _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + .single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ) + .value + ) assert sct1 == sct2 @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_ne(self, backend): - sct1 = _load_data( - os.path.join("x509", "ocsp", "resp-sct-extension.der"), - ocsp.load_der_ocsp_response, - ).single_extensions.get_extension_for_class( - x509.SignedCertificateTimestamps - ).value + sct1 = ( + _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + .single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ) + .value + ) sct2 = x509.SignedCertificateTimestamps([]) assert sct1 != sct2 assert sct1 != object() @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_hash(self, backend): - sct1 = _load_data( - os.path.join("x509", "ocsp", "resp-sct-extension.der"), - ocsp.load_der_ocsp_response, - ).single_extensions.get_extension_for_class( - x509.SignedCertificateTimestamps - ).value - sct2 = _load_data( - os.path.join("x509", "ocsp", "resp-sct-extension.der"), - ocsp.load_der_ocsp_response, - ).single_extensions.get_extension_for_class( - x509.SignedCertificateTimestamps - ).value + sct1 = ( + _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + .single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ) + .value + ) + sct2 = ( + _load_data( + os.path.join("x509", "ocsp", "resp-sct-extension.der"), + ocsp.load_der_ocsp_response, + ) + .single_extensions.get_extension_for_class( + x509.SignedCertificateTimestamps + ) + .value + ) sct3 = x509.SignedCertificateTimestamps([]) assert hash(sct1) == hash(sct2) assert hash(sct1) != hash(sct3) @@ -646,14 +802,17 @@ def test_load_response(self): ocsp.load_der_ocsp_response, ) from cryptography.hazmat.backends.openssl.backend import backend + issuer = _load_cert( os.path.join("x509", "letsencryptx3.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert resp.response_status == ocsp.OCSPResponseStatus.SUCCESSFUL - assert (resp.signature_algorithm_oid == - x509.SignatureAlgorithmOID.RSA_WITH_SHA256) + assert ( + resp.signature_algorithm_oid + == x509.SignatureAlgorithmOID.RSA_WITH_SHA256 + ) assert isinstance(resp.signature_hash_algorithm, hashes.SHA256) assert resp.signature == base64.b64decode( b"I9KUlyLV/2LbNCVu1BQphxdNlU/jBzXsPYVscPjW5E93pCrSO84GkIWoOJtqsnt" @@ -674,7 +833,7 @@ def test_load_response(self): resp.signature, resp.tbs_response_bytes, PKCS1v15(), - resp.signature_hash_algorithm + resp.signature_hash_algorithm, ) assert resp.certificates == [] assert resp.responder_key_hash is None @@ -686,10 +845,10 @@ def test_load_response(self): assert resp.this_update == datetime.datetime(2018, 8, 30, 11, 0) assert resp.next_update == datetime.datetime(2018, 9, 6, 11, 0) assert resp.issuer_key_hash == ( - b'\xa8Jjc\x04}\xdd\xba\xe6\xd19\xb7\xa6Ee\xef\xf3\xa8\xec\xa1' + b"\xa8Jjc\x04}\xdd\xba\xe6\xd19\xb7\xa6Ee\xef\xf3\xa8\xec\xa1" ) assert resp.issuer_name_hash == ( - b'~\xe6j\xe7r\x9a\xb3\xfc\xf8\xa2 dl\x16\xa1-`q\x08]' + b"~\xe6j\xe7r\x9a\xb3\xfc\xf8\xa2 dl\x16\xa1-`q\x08]" ) assert isinstance(resp.hash_algorithm, hashes.SHA1) assert resp.serial_number == 271024907440004808294641238224534273948400 @@ -783,7 +942,7 @@ def test_load_responder_key_hash(self): ) assert resp.responder_name is None assert resp.responder_key_hash == ( - b'\x0f\x80a\x1c\x821a\xd5/(\xe7\x8dF8\xb4,\xe1\xc6\xd9\xe2' + b"\x0f\x80a\x1c\x821a\xd5/(\xe7\x8dF8\xb4,\xe1\xc6\xd9\xe2" ) def test_load_revoked_reason(self): @@ -817,7 +976,7 @@ def test_serialize_reponse(self): resp_bytes = load_vectors_from_file( filename=os.path.join("x509", "ocsp", "resp-revoked.der"), loader=lambda data: data.read(), - mode="rb" + mode="rb", ) resp = ocsp.load_der_ocsp_response(resp_bytes) assert resp.public_bytes(serialization.Encoding.DER) == resp_bytes @@ -834,7 +993,8 @@ def test_invalid_serialize_encoding(self): @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_single_extensions_sct(self, backend): @@ -848,15 +1008,16 @@ def test_single_extensions_sct(self, backend): assert len(ext.value) == 4 log_ids = [base64.b64encode(sct.log_id) for sct in ext.value] assert log_ids == [ - b'RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=', - b'b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=', - b'u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=', - b'7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/cs=' + b"RJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gag=", + b"b1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RM=", + b"u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=", + b"7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/cs=", ] @pytest.mark.supported( only_if=lambda backend: ( - not backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + not backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL < 1.1.0f", ) def test_skips_single_extensions_scts_if_unsupported(self, backend): @@ -888,7 +1049,7 @@ def test_single_extensions(self, backend): class TestOCSPEdDSA(object): @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support / OCSP" + skip_message="Requires OpenSSL with Ed25519 support / OCSP", ) def test_invalid_algorithm(self, backend): builder = ocsp.OCSPResponseBuilder() @@ -902,16 +1063,21 @@ def test_invalid_algorithm(self, backend): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, - this_update, next_update, revoked_date, - x509.ReasonFlags.key_compromise + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.REVOKED, + this_update, + next_update, + revoked_date, + x509.ReasonFlags.key_compromise, ) with pytest.raises(ValueError): builder.sign(private_key, hashes.SHA256()) @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support / OCSP" + skip_message="Requires OpenSSL with Ed25519 support / OCSP", ) def test_sign_ed25519(self, backend): builder = ocsp.OCSPResponseBuilder() @@ -925,9 +1091,14 @@ def test_sign_ed25519(self, backend): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, - this_update, next_update, revoked_date, - x509.ReasonFlags.key_compromise + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.REVOKED, + this_update, + next_update, + revoked_date, + x509.ReasonFlags.key_compromise, ) resp = builder.sign(private_key, None) assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED @@ -936,15 +1107,16 @@ def test_sign_ed25519(self, backend): assert resp.this_update == this_update assert resp.next_update == next_update assert resp.signature_hash_algorithm is None - assert (resp.signature_algorithm_oid == - x509.SignatureAlgorithmOID.ED25519) + assert ( + resp.signature_algorithm_oid == x509.SignatureAlgorithmOID.ED25519 + ) private_key.public_key().verify( resp.signature, resp.tbs_response_bytes ) @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), - skip_message="Requires OpenSSL with Ed448 support / OCSP" + skip_message="Requires OpenSSL with Ed448 support / OCSP", ) def test_sign_ed448(self, backend): builder = ocsp.OCSPResponseBuilder() @@ -958,9 +1130,14 @@ def test_sign_ed448(self, backend): builder = builder.responder_id( ocsp.OCSPResponderEncoding.NAME, root_cert ).add_response( - cert, issuer, hashes.SHA1(), ocsp.OCSPCertStatus.REVOKED, - this_update, next_update, revoked_date, - x509.ReasonFlags.key_compromise + cert, + issuer, + hashes.SHA1(), + ocsp.OCSPCertStatus.REVOKED, + this_update, + next_update, + revoked_date, + x509.ReasonFlags.key_compromise, ) resp = builder.sign(private_key, None) assert resp.certificate_status == ocsp.OCSPCertStatus.REVOKED @@ -969,8 +1146,7 @@ def test_sign_ed448(self, backend): assert resp.this_update == this_update assert resp.next_update == next_update assert resp.signature_hash_algorithm is None - assert (resp.signature_algorithm_oid == - x509.SignatureAlgorithmOID.ED448) + assert resp.signature_algorithm_oid == x509.SignatureAlgorithmOID.ED448 private_key.public_key().verify( resp.signature, resp.tbs_response_bytes ) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index ced646506e62..63cfb39f033e 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -21,23 +21,44 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat._der import ( - BIT_STRING, CONSTRUCTED, CONTEXT_SPECIFIC, DERReader, GENERALIZED_TIME, - INTEGER, OBJECT_IDENTIFIER, PRINTABLE_STRING, SEQUENCE, SET, UTC_TIME + BIT_STRING, + CONSTRUCTED, + CONTEXT_SPECIFIC, + DERReader, + GENERALIZED_TIME, + INTEGER, + OBJECT_IDENTIFIER, + PRINTABLE_STRING, + SEQUENCE, + SET, + UTC_TIME, ) from cryptography.hazmat.backends.interfaces import ( - DSABackend, EllipticCurveBackend, RSABackend, X509Backend + DSABackend, + EllipticCurveBackend, + RSABackend, + X509Backend, ) from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ( - dsa, ec, ed25519, ed448, padding, rsa + dsa, + ec, + ed25519, + ed448, + padding, + rsa, ) from cryptography.hazmat.primitives.asymmetric.utils import ( - decode_dss_signature + decode_dss_signature, ) from cryptography.x509.name import _ASN1Type from cryptography.x509.oid import ( - AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, - NameOID, SignatureAlgorithmOID, SubjectInformationAccessOID, + AuthorityInformationAccessOID, + ExtendedKeyUsageOID, + ExtensionOID, + NameOID, + SignatureAlgorithmOID, + SubjectInformationAccessOID, ) from ..hazmat.primitives.fixtures_dsa import DSA_KEY_2048 @@ -64,14 +85,14 @@ def _load_cert(filename, loader, backend): cert = load_vectors_from_file( filename=filename, loader=lambda pemfile: loader(pemfile.read(), backend), - mode="rb" + mode="rb", ) return cert ParsedCertificate = collections.namedtuple( "ParsedCertificate", - ["not_before_tag", "not_after_tag", "issuer", "subject"] + ["not_before_tag", "not_after_tag", "issuer", "subject"], ) @@ -121,7 +142,7 @@ def test_load_pem_crl(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) assert isinstance(crl, x509.CertificateRevocationList) @@ -129,15 +150,15 @@ def test_load_pem_crl(self, backend): assert fingerprint == b"3234b0cb4c0cedf6423724b736729dcfc9e441ef" assert isinstance(crl.signature_hash_algorithm, hashes.SHA256) assert ( - crl.signature_algorithm_oid == - SignatureAlgorithmOID.RSA_WITH_SHA256 + crl.signature_algorithm_oid + == SignatureAlgorithmOID.RSA_WITH_SHA256 ) def test_load_der_crl(self, backend): crl = _load_cert( os.path.join("x509", "PKITS_data", "crls", "GoodCACRL.crl"), x509.load_der_x509_crl, - backend + backend, ) assert isinstance(crl, x509.CertificateRevocationList) @@ -159,7 +180,7 @@ def test_unknown_signature_algorithm(self, backend): "x509", "custom", "crl_md2_unknown_crit_entry_ext.pem" ), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(UnsupportedAlgorithm): @@ -169,38 +190,38 @@ def test_issuer(self, backend): crl = _load_cert( os.path.join("x509", "PKITS_data", "crls", "GoodCACRL.crl"), x509.load_der_x509_crl, - backend + backend, ) assert isinstance(crl.issuer, x509.Name) assert list(crl.issuer) == [ - x509.NameAttribute(x509.OID_COUNTRY_NAME, u'US'), + x509.NameAttribute(x509.OID_COUNTRY_NAME, u"US"), x509.NameAttribute( - x509.OID_ORGANIZATION_NAME, u'Test Certificates 2011' + x509.OID_ORGANIZATION_NAME, u"Test Certificates 2011" ), - x509.NameAttribute(x509.OID_COMMON_NAME, u'Good CA') + x509.NameAttribute(x509.OID_COMMON_NAME, u"Good CA"), ] assert crl.issuer.get_attributes_for_oid(x509.OID_COMMON_NAME) == [ - x509.NameAttribute(x509.OID_COMMON_NAME, u'Good CA') + x509.NameAttribute(x509.OID_COMMON_NAME, u"Good CA") ] def test_equality(self, backend): crl1 = _load_cert( os.path.join("x509", "PKITS_data", "crls", "GoodCACRL.crl"), x509.load_der_x509_crl, - backend + backend, ) crl2 = _load_cert( os.path.join("x509", "PKITS_data", "crls", "GoodCACRL.crl"), x509.load_der_x509_crl, - backend + backend, ) crl3 = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) assert crl1 == crl2 @@ -211,7 +232,7 @@ def test_update_dates(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) assert isinstance(crl.next_update, datetime.datetime) @@ -224,7 +245,7 @@ def test_revoked_cert_retrieval(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) for r in crl: @@ -236,9 +257,10 @@ def test_revoked_cert_retrieval(self, backend): def test_get_revoked_certificate_by_serial_number(self, backend): crl = _load_cert( os.path.join( - "x509", "PKITS_data", "crls", "LongSerialNumberCACRL.crl"), + "x509", "PKITS_data", "crls", "LongSerialNumberCACRL.crl" + ), x509.load_der_x509_crl, - backend + backend, ) serial_number = 725064303890588110203033396814564464046290047507 revoked = crl.get_revoked_certificate_by_serial_number(serial_number) @@ -254,7 +276,7 @@ def test_revoked_cert_retrieval_retain_only_revoked(self, backend): revoked = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, )[11] assert revoked.revocation_date == datetime.datetime(2015, 1, 1, 0, 0) assert revoked.serial_number == 11 @@ -263,7 +285,7 @@ def test_extensions(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_ian_aia_aki.pem"), x509.load_pem_x509_crl, - backend + backend, ) crl_number = crl.extensions.get_extension_for_oid( @@ -281,27 +303,27 @@ def test_extensions(self, backend): assert crl_number.value == x509.CRLNumber(1) assert crl_number.critical is False assert aki.value == x509.AuthorityKeyIdentifier( - key_identifier=( - b'yu\xbb\x84:\xcb,\xdez\t\xbe1\x1bC\xbc\x1c*MSX' - ), + key_identifier=(b"yu\xbb\x84:\xcb,\xdez\t\xbe1\x1bC\xbc\x1c*MSX"), authority_cert_issuer=None, - authority_cert_serial_number=None + authority_cert_serial_number=None, + ) + assert aia.value == x509.AuthorityInformationAccess( + [ + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.DNSName(u"cryptography.io"), + ) + ] + ) + assert ian.value == x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] ) - assert aia.value == x509.AuthorityInformationAccess([ - x509.AccessDescription( - AuthorityInformationAccessOID.CA_ISSUERS, - x509.DNSName(u"cryptography.io") - ) - ]) - assert ian.value == x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) def test_delta_crl_indicator(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_delta_crl_indicator.pem"), x509.load_pem_x509_crl, - backend + backend, ) dci = crl.extensions.get_extension_for_oid( @@ -314,7 +336,7 @@ def test_signature(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) assert crl.signature == binascii.unhexlify( @@ -333,31 +355,33 @@ def test_tbs_certlist_bytes(self, backend): crl = _load_cert( os.path.join("x509", "PKITS_data", "crls", "GoodCACRL.crl"), x509.load_der_x509_crl, - backend + backend, ) ca_cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), x509.load_der_x509_certificate, - backend + backend, ) ca_cert.public_key().verify( - crl.signature, crl.tbs_certlist_bytes, - padding.PKCS1v15(), crl.signature_hash_algorithm + crl.signature, + crl.tbs_certlist_bytes, + padding.PKCS1v15(), + crl.signature_hash_algorithm, ) def test_public_bytes_pem(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_empty.pem"), x509.load_pem_x509_crl, - backend + backend, ) # Encode it to PEM and load it back. - crl = x509.load_pem_x509_crl(crl.public_bytes( - encoding=serialization.Encoding.PEM, - ), backend) + crl = x509.load_pem_x509_crl( + crl.public_bytes(encoding=serialization.Encoding.PEM,), backend + ) assert len(crl) == 0 assert crl.last_update == datetime.datetime(2015, 12, 20, 23, 44, 47) @@ -367,13 +391,13 @@ def test_public_bytes_der(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) # Encode it to DER and load it back. - crl = x509.load_der_x509_crl(crl.public_bytes( - encoding=serialization.Encoding.DER, - ), backend) + crl = x509.load_der_x509_crl( + crl.public_bytes(encoding=serialization.Encoding.DER,), backend + ) assert len(crl) == 12 assert crl.last_update == datetime.datetime(2015, 1, 1, 0, 0, 0) @@ -392,10 +416,11 @@ def test_public_bytes_der(self, backend): x509.load_der_x509_crl, serialization.Encoding.DER, ), - ] + ], ) - def test_public_bytes_match(self, cert_path, loader_func, encoding, - backend): + def test_public_bytes_match( + self, cert_path, loader_func, encoding, backend + ): crl_bytes = load_vectors_from_file( cert_path, lambda pemfile: pemfile.read(), mode="rb" ) @@ -407,22 +432,22 @@ def test_public_bytes_invalid_encoding(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_empty.pem"), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(TypeError): - crl.public_bytes('NotAnEncoding') + crl.public_bytes("NotAnEncoding") def test_verify_bad(self, backend): crl = _load_cert( os.path.join("x509", "custom", "invalid_signature.pem"), x509.load_pem_x509_crl, - backend + backend, ) crt = _load_cert( os.path.join("x509", "custom", "invalid_signature.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert not crl.is_signature_valid(crt.public_key()) @@ -431,12 +456,12 @@ def test_verify_good(self, backend): crl = _load_cert( os.path.join("x509", "custom", "valid_signature.pem"), x509.load_pem_x509_crl, - backend + backend, ) crt = _load_cert( os.path.join("x509", "custom", "valid_signature.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert crl.is_signature_valid(crt.public_key()) @@ -445,7 +470,7 @@ def test_verify_argument_must_be_a_public_key(self, backend): crl = _load_cert( os.path.join("x509", "custom", "valid_signature.pem"), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(TypeError): @@ -461,7 +486,7 @@ def test_revoked_basics(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) for i, rev in enumerate(crl): @@ -477,14 +502,20 @@ def test_revoked_extensions(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) exp_issuer = [ - x509.DirectoryName(x509.Name([ - x509.NameAttribute(x509.OID_COUNTRY_NAME, u"US"), - x509.NameAttribute(x509.OID_COMMON_NAME, u"cryptography.io"), - ])) + x509.DirectoryName( + x509.Name( + [ + x509.NameAttribute(x509.OID_COUNTRY_NAME, u"US"), + x509.NameAttribute( + x509.OID_COMMON_NAME, u"cryptography.io" + ), + ] + ) + ) ] # First revoked cert doesn't have extensions, test if it is handled @@ -504,16 +535,17 @@ def test_revoked_extensions(self, backend): rev1 = crl[1] assert isinstance(rev1.extensions, x509.Extensions) - reason = rev1.extensions.get_extension_for_class( - x509.CRLReason).value + reason = rev1.extensions.get_extension_for_class(x509.CRLReason).value assert reason == x509.CRLReason(x509.ReasonFlags.unspecified) issuer = rev1.extensions.get_extension_for_class( - x509.CertificateIssuer).value + x509.CertificateIssuer + ).value assert issuer == x509.CertificateIssuer(exp_issuer) date = rev1.extensions.get_extension_for_class( - x509.InvalidityDate).value + x509.InvalidityDate + ).value assert date == x509.InvalidityDate(datetime.datetime(2015, 1, 1, 0, 0)) # Check if all reason flags can be found in the CRL. @@ -533,7 +565,7 @@ def test_no_revoked_certs(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_empty.pem"), x509.load_pem_x509_crl, - backend + backend, ) assert len(crl) == 0 @@ -541,7 +573,7 @@ def test_duplicate_entry_ext(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_dup_entry_ext.pem"), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(x509.DuplicateExtension): @@ -553,7 +585,7 @@ def test_unsupported_crit_entry_ext(self, backend): "x509", "custom", "crl_md2_unknown_crit_entry_ext.pem" ), x509.load_pem_x509_crl, - backend + backend, ) ext = crl[0].extensions.get_extension_for_oid( @@ -563,11 +595,9 @@ def test_unsupported_crit_entry_ext(self, backend): def test_unsupported_reason(self, backend): crl = _load_cert( - os.path.join( - "x509", "custom", "crl_unsupported_reason.pem" - ), + os.path.join("x509", "custom", "crl_unsupported_reason.pem"), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(ValueError): @@ -579,7 +609,7 @@ def test_invalid_cert_issuer_ext(self, backend): "x509", "custom", "crl_inval_cert_issuer_entry_ext.pem" ), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(ValueError): @@ -589,7 +619,7 @@ def test_indexing(self, backend): crl = _load_cert( os.path.join("x509", "custom", "crl_all_reasons.pem"), x509.load_pem_x509_crl, - backend + backend, ) with pytest.raises(IndexError): @@ -606,21 +636,27 @@ def test_get_revoked_certificate_doesnt_reorder(self, backend): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) ) for i in [2, 500, 3, 49, 7, 1]: - revoked_cert = x509.RevokedCertificateBuilder().serial_number( - i - ).revocation_date( - datetime.datetime(2012, 1, 1, 1, 1) - ).build(backend) + revoked_cert = ( + x509.RevokedCertificateBuilder() + .serial_number(i) + .revocation_date(datetime.datetime(2012, 1, 1, 1, 1)) + .build(backend) + ) builder = builder.add_revoked_certificate(revoked_cert) crl = builder.sign(private_key, hashes.SHA256(), backend) assert crl[0].serial_number == 2 @@ -639,7 +675,7 @@ def test_load_pem_cert(self, backend): cert = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert isinstance(cert, x509.Certificate) assert cert.serial_number == 11559813051657483483 @@ -662,19 +698,19 @@ def test_alternate_rsa_with_sha1_oid(self, backend): cert = _load_cert( os.path.join("x509", "alternate-rsa-sha1-oid.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert isinstance(cert.signature_hash_algorithm, hashes.SHA1) assert ( - cert.signature_algorithm_oid == - SignatureAlgorithmOID._RSA_WITH_SHA1 + cert.signature_algorithm_oid + == SignatureAlgorithmOID._RSA_WITH_SHA1 ) def test_load_der_cert(self, backend): cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), x509.load_der_x509_certificate, - backend + backend, ) assert isinstance(cert, x509.Certificate) assert cert.serial_number == 2 @@ -686,7 +722,7 @@ def test_signature(self, backend): cert = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert cert.signature == binascii.unhexlify( b"8e0f72fcbebe4755abcaf76c8ce0bae17cde4db16291638e1b1ce04a93cdb4c" @@ -705,7 +741,7 @@ def test_tbs_certificate_bytes(self, backend): cert = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert cert.tbs_certificate_bytes == binascii.unhexlify( b"308202d8a003020102020900a06cb4b955f7f4db300d06092a864886f70d010" @@ -734,132 +770,126 @@ def test_tbs_certificate_bytes(self, backend): b"3040530030101ff" ) cert.public_key().verify( - cert.signature, cert.tbs_certificate_bytes, - padding.PKCS1v15(), cert.signature_hash_algorithm + cert.signature, + cert.tbs_certificate_bytes, + padding.PKCS1v15(), + cert.signature_hash_algorithm, ) def test_issuer(self, backend): cert = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "Validpre2000UTCnotBeforeDateTest3EE.crt" + "x509", + "PKITS_data", + "certs", + "Validpre2000UTCnotBeforeDateTest3EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) issuer = cert.issuer assert isinstance(issuer, x509.Name) assert list(issuer) == [ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), x509.NameAttribute( - NameOID.ORGANIZATION_NAME, u'Test Certificates 2011' + NameOID.ORGANIZATION_NAME, u"Test Certificates 2011" ), - x509.NameAttribute(NameOID.COMMON_NAME, u'Good CA') + x509.NameAttribute(NameOID.COMMON_NAME, u"Good CA"), ] assert issuer.get_attributes_for_oid(NameOID.COMMON_NAME) == [ - x509.NameAttribute(NameOID.COMMON_NAME, u'Good CA') + x509.NameAttribute(NameOID.COMMON_NAME, u"Good CA") ] def test_all_issuer_name_types(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", - "all_supported_names.pem" - ), + os.path.join("x509", "custom", "all_supported_names.pem"), x509.load_pem_x509_certificate, - backend + backend, ) issuer = cert.issuer assert isinstance(issuer, x509.Name) assert list(issuer) == [ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), - x509.NameAttribute(NameOID.COUNTRY_NAME, u'CA'), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Texas'), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'Illinois'), - x509.NameAttribute(NameOID.LOCALITY_NAME, u'Chicago'), - x509.NameAttribute(NameOID.LOCALITY_NAME, u'Austin'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'Zero, LLC'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'One, LLC'), - x509.NameAttribute(NameOID.COMMON_NAME, u'common name 0'), - x509.NameAttribute(NameOID.COMMON_NAME, u'common name 1'), - x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u'OU 0'), - x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u'OU 1'), - x509.NameAttribute(NameOID.DN_QUALIFIER, u'dnQualifier0'), - x509.NameAttribute(NameOID.DN_QUALIFIER, u'dnQualifier1'), - x509.NameAttribute(NameOID.SERIAL_NUMBER, u'123'), - x509.NameAttribute(NameOID.SERIAL_NUMBER, u'456'), - x509.NameAttribute(NameOID.TITLE, u'Title 0'), - x509.NameAttribute(NameOID.TITLE, u'Title 1'), - x509.NameAttribute(NameOID.SURNAME, u'Surname 0'), - x509.NameAttribute(NameOID.SURNAME, u'Surname 1'), - x509.NameAttribute(NameOID.GIVEN_NAME, u'Given Name 0'), - x509.NameAttribute(NameOID.GIVEN_NAME, u'Given Name 1'), - x509.NameAttribute(NameOID.PSEUDONYM, u'Incognito 0'), - x509.NameAttribute(NameOID.PSEUDONYM, u'Incognito 1'), - x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u'Last Gen'), - x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u'Next Gen'), - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'dc0'), - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'dc1'), - x509.NameAttribute(NameOID.EMAIL_ADDRESS, u'test0@test.local'), - x509.NameAttribute(NameOID.EMAIL_ADDRESS, u'test1@test.local'), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"CA"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Texas"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Illinois"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"Chicago"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"Austin"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Zero, LLC"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"One, LLC"), + x509.NameAttribute(NameOID.COMMON_NAME, u"common name 0"), + x509.NameAttribute(NameOID.COMMON_NAME, u"common name 1"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"OU 0"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"OU 1"), + x509.NameAttribute(NameOID.DN_QUALIFIER, u"dnQualifier0"), + x509.NameAttribute(NameOID.DN_QUALIFIER, u"dnQualifier1"), + x509.NameAttribute(NameOID.SERIAL_NUMBER, u"123"), + x509.NameAttribute(NameOID.SERIAL_NUMBER, u"456"), + x509.NameAttribute(NameOID.TITLE, u"Title 0"), + x509.NameAttribute(NameOID.TITLE, u"Title 1"), + x509.NameAttribute(NameOID.SURNAME, u"Surname 0"), + x509.NameAttribute(NameOID.SURNAME, u"Surname 1"), + x509.NameAttribute(NameOID.GIVEN_NAME, u"Given Name 0"), + x509.NameAttribute(NameOID.GIVEN_NAME, u"Given Name 1"), + x509.NameAttribute(NameOID.PSEUDONYM, u"Incognito 0"), + x509.NameAttribute(NameOID.PSEUDONYM, u"Incognito 1"), + x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u"Last Gen"), + x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u"Next Gen"), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"dc0"), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"dc1"), + x509.NameAttribute(NameOID.EMAIL_ADDRESS, u"test0@test.local"), + x509.NameAttribute(NameOID.EMAIL_ADDRESS, u"test1@test.local"), ] def test_subject(self, backend): cert = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "Validpre2000UTCnotBeforeDateTest3EE.crt" + "x509", + "PKITS_data", + "certs", + "Validpre2000UTCnotBeforeDateTest3EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) subject = cert.subject assert isinstance(subject, x509.Name) assert list(subject) == [ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), x509.NameAttribute( - NameOID.ORGANIZATION_NAME, u'Test Certificates 2011' + NameOID.ORGANIZATION_NAME, u"Test Certificates 2011" ), x509.NameAttribute( NameOID.COMMON_NAME, - u'Valid pre2000 UTC notBefore Date EE Certificate Test3' - ) + u"Valid pre2000 UTC notBefore Date EE Certificate Test3", + ), ] assert subject.get_attributes_for_oid(NameOID.COMMON_NAME) == [ x509.NameAttribute( NameOID.COMMON_NAME, - u'Valid pre2000 UTC notBefore Date EE Certificate Test3' + u"Valid pre2000 UTC notBefore Date EE Certificate Test3", ) ] def test_unicode_name(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", - "utf8_common_name.pem" - ), + os.path.join("x509", "custom", "utf8_common_name.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME) == [ - x509.NameAttribute( - NameOID.COMMON_NAME, - u'We heart UTF8!\u2122' - ) + x509.NameAttribute(NameOID.COMMON_NAME, u"We heart UTF8!\u2122") ] assert cert.issuer.get_attributes_for_oid(NameOID.COMMON_NAME) == [ - x509.NameAttribute( - NameOID.COMMON_NAME, - u'We heart UTF8!\u2122' - ) + x509.NameAttribute(NameOID.COMMON_NAME, u"We heart UTF8!\u2122") ] def test_non_ascii_dns_name(self, backend): cert = _load_cert( os.path.join("x509", "utf8-dnsname.pem"), x509.load_pem_x509_certificate, - backend + backend, ) san = cert.extensions.get_extension_for_class( x509.SubjectAlternativeName @@ -868,64 +898,65 @@ def test_non_ascii_dns_name(self, backend): names = san.get_values_for_type(x509.DNSName) assert names == [ - u'partner.biztositas.hu', u'biztositas.hu', u'*.biztositas.hu', - u'biztos\xedt\xe1s.hu', u'*.biztos\xedt\xe1s.hu', - u'xn--biztosts-fza2j.hu', u'*.xn--biztosts-fza2j.hu' + u"partner.biztositas.hu", + u"biztositas.hu", + u"*.biztositas.hu", + u"biztos\xedt\xe1s.hu", + u"*.biztos\xedt\xe1s.hu", + u"xn--biztosts-fza2j.hu", + u"*.xn--biztosts-fza2j.hu", ] def test_all_subject_name_types(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", - "all_supported_names.pem" - ), + os.path.join("x509", "custom", "all_supported_names.pem"), x509.load_pem_x509_certificate, - backend + backend, ) subject = cert.subject assert isinstance(subject, x509.Name) assert list(subject) == [ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'AU'), - x509.NameAttribute(NameOID.COUNTRY_NAME, u'DE'), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'California'), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u'New York'), - x509.NameAttribute(NameOID.LOCALITY_NAME, u'San Francisco'), - x509.NameAttribute(NameOID.LOCALITY_NAME, u'Ithaca'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'Org Zero, LLC'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'Org One, LLC'), - x509.NameAttribute(NameOID.COMMON_NAME, u'CN 0'), - x509.NameAttribute(NameOID.COMMON_NAME, u'CN 1'), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"AU"), + x509.NameAttribute(NameOID.COUNTRY_NAME, u"DE"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"California"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"New York"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"San Francisco"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"Ithaca"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Org Zero, LLC"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Org One, LLC"), + x509.NameAttribute(NameOID.COMMON_NAME, u"CN 0"), + x509.NameAttribute(NameOID.COMMON_NAME, u"CN 1"), x509.NameAttribute( - NameOID.ORGANIZATIONAL_UNIT_NAME, u'Engineering 0' + NameOID.ORGANIZATIONAL_UNIT_NAME, u"Engineering 0" ), x509.NameAttribute( - NameOID.ORGANIZATIONAL_UNIT_NAME, u'Engineering 1' + NameOID.ORGANIZATIONAL_UNIT_NAME, u"Engineering 1" ), - x509.NameAttribute(NameOID.DN_QUALIFIER, u'qualified0'), - x509.NameAttribute(NameOID.DN_QUALIFIER, u'qualified1'), - x509.NameAttribute(NameOID.SERIAL_NUMBER, u'789'), - x509.NameAttribute(NameOID.SERIAL_NUMBER, u'012'), - x509.NameAttribute(NameOID.TITLE, u'Title IX'), - x509.NameAttribute(NameOID.TITLE, u'Title X'), - x509.NameAttribute(NameOID.SURNAME, u'Last 0'), - x509.NameAttribute(NameOID.SURNAME, u'Last 1'), - x509.NameAttribute(NameOID.GIVEN_NAME, u'First 0'), - x509.NameAttribute(NameOID.GIVEN_NAME, u'First 1'), - x509.NameAttribute(NameOID.PSEUDONYM, u'Guy Incognito 0'), - x509.NameAttribute(NameOID.PSEUDONYM, u'Guy Incognito 1'), - x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u'32X'), - x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u'Dreamcast'), - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'dc2'), - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'dc3'), - x509.NameAttribute(NameOID.EMAIL_ADDRESS, u'test2@test.local'), - x509.NameAttribute(NameOID.EMAIL_ADDRESS, u'test3@test.local'), + x509.NameAttribute(NameOID.DN_QUALIFIER, u"qualified0"), + x509.NameAttribute(NameOID.DN_QUALIFIER, u"qualified1"), + x509.NameAttribute(NameOID.SERIAL_NUMBER, u"789"), + x509.NameAttribute(NameOID.SERIAL_NUMBER, u"012"), + x509.NameAttribute(NameOID.TITLE, u"Title IX"), + x509.NameAttribute(NameOID.TITLE, u"Title X"), + x509.NameAttribute(NameOID.SURNAME, u"Last 0"), + x509.NameAttribute(NameOID.SURNAME, u"Last 1"), + x509.NameAttribute(NameOID.GIVEN_NAME, u"First 0"), + x509.NameAttribute(NameOID.GIVEN_NAME, u"First 1"), + x509.NameAttribute(NameOID.PSEUDONYM, u"Guy Incognito 0"), + x509.NameAttribute(NameOID.PSEUDONYM, u"Guy Incognito 1"), + x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u"32X"), + x509.NameAttribute(NameOID.GENERATION_QUALIFIER, u"Dreamcast"), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"dc2"), + x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"dc3"), + x509.NameAttribute(NameOID.EMAIL_ADDRESS, u"test2@test.local"), + x509.NameAttribute(NameOID.EMAIL_ADDRESS, u"test3@test.local"), ] def test_load_good_ca_cert(self, backend): cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), x509.load_der_x509_certificate, - backend + backend, ) assert cert.not_valid_before == datetime.datetime(2010, 1, 1, 8, 30) @@ -940,11 +971,13 @@ def test_load_good_ca_cert(self, backend): def test_utc_pre_2000_not_before_cert(self, backend): cert = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "Validpre2000UTCnotBeforeDateTest3EE.crt" + "x509", + "PKITS_data", + "certs", + "Validpre2000UTCnotBeforeDateTest3EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) assert cert.not_valid_before == datetime.datetime(1950, 1, 1, 12, 1) @@ -952,11 +985,13 @@ def test_utc_pre_2000_not_before_cert(self, backend): def test_pre_2000_utc_not_after_cert(self, backend): cert = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "Invalidpre2000UTCEEnotAfterDateTest7EE.crt" + "x509", + "PKITS_data", + "certs", + "Invalidpre2000UTCEEnotAfterDateTest7EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) assert cert.not_valid_after == datetime.datetime(1999, 1, 1, 12, 1) @@ -965,7 +1000,7 @@ def test_post_2000_utc_cert(self, backend): cert = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert cert.not_valid_before == datetime.datetime( 2014, 11, 26, 21, 41, 20 @@ -977,11 +1012,13 @@ def test_post_2000_utc_cert(self, backend): def test_generalized_time_not_before_cert(self, backend): cert = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "ValidGeneralizedTimenotBeforeDateTest4EE.crt" + "x509", + "PKITS_data", + "certs", + "ValidGeneralizedTimenotBeforeDateTest4EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) assert cert.not_valid_before == datetime.datetime(2002, 1, 1, 12, 1) assert cert.not_valid_after == datetime.datetime(2030, 12, 31, 8, 30) @@ -990,11 +1027,13 @@ def test_generalized_time_not_before_cert(self, backend): def test_generalized_time_not_after_cert(self, backend): cert = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "ValidGeneralizedTimenotAfterDateTest8EE.crt" + "x509", + "PKITS_data", + "certs", + "ValidGeneralizedTimenotAfterDateTest8EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) assert cert.not_valid_before == datetime.datetime(2010, 1, 1, 8, 30) assert cert.not_valid_after == datetime.datetime(2050, 1, 1, 12, 1) @@ -1005,7 +1044,7 @@ def test_invalid_version_cert(self, backend): _load_cert( os.path.join("x509", "custom", "invalid_version.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert exc.value.parsed_version == 7 @@ -1014,12 +1053,12 @@ def test_eq(self, backend): cert = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) cert2 = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert cert == cert2 @@ -1027,15 +1066,17 @@ def test_ne(self, backend): cert = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) cert2 = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "ValidGeneralizedTimenotAfterDateTest8EE.crt" + "x509", + "PKITS_data", + "certs", + "ValidGeneralizedTimenotAfterDateTest8EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) assert cert != cert2 assert cert != object() @@ -1044,20 +1085,22 @@ def test_hash(self, backend): cert1 = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) cert2 = _load_cert( os.path.join("x509", "custom", "post2000utctime.pem"), x509.load_pem_x509_certificate, - backend + backend, ) cert3 = _load_cert( os.path.join( - "x509", "PKITS_data", "certs", - "ValidGeneralizedTimenotAfterDateTest8EE.crt" + "x509", + "PKITS_data", + "certs", + "ValidGeneralizedTimenotAfterDateTest8EE.crt", ), x509.load_der_x509_certificate, - backend + backend, ) assert hash(cert1) == hash(cert2) @@ -1067,7 +1110,7 @@ def test_version_1_cert(self, backend): cert = _load_cert( os.path.join("x509", "v1_cert.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert cert.version is x509.Version.v1 @@ -1083,7 +1126,7 @@ def test_unsupported_signature_hash_algorithm_cert(self, backend): cert = _load_cert( os.path.join("x509", "verisign_md2_root.pem"), x509.load_pem_x509_certificate, - backend + backend, ) with pytest.raises(UnsupportedAlgorithm): cert.signature_hash_algorithm @@ -1093,13 +1136,13 @@ def test_public_bytes_pem(self, backend): cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), x509.load_der_x509_certificate, - backend + backend, ) # Encode it to PEM and load it back. - cert = x509.load_pem_x509_certificate(cert.public_bytes( - encoding=serialization.Encoding.PEM, - ), backend) + cert = x509.load_pem_x509_certificate( + cert.public_bytes(encoding=serialization.Encoding.PEM,), backend + ) # We should recover what we had to start with. assert cert.not_valid_before == datetime.datetime(2010, 1, 1, 8, 30) @@ -1116,13 +1159,13 @@ def test_public_bytes_der(self, backend): cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), x509.load_der_x509_certificate, - backend + backend, ) # Encode it to DER and load it back. - cert = x509.load_der_x509_certificate(cert.public_bytes( - encoding=serialization.Encoding.DER, - ), backend) + cert = x509.load_der_x509_certificate( + cert.public_bytes(encoding=serialization.Encoding.DER,), backend + ) # We should recover what we had to start with. assert cert.not_valid_before == datetime.datetime(2010, 1, 1, 8, 30) @@ -1138,11 +1181,11 @@ def test_public_bytes_invalid_encoding(self, backend): cert = _load_cert( os.path.join("x509", "PKITS_data", "certs", "GoodCACert.crt"), x509.load_der_x509_certificate, - backend + backend, ) with pytest.raises(TypeError): - cert.public_bytes('NotAnEncoding') + cert.public_bytes("NotAnEncoding") @pytest.mark.parametrize( ("cert_path", "loader_func", "encoding"), @@ -1157,10 +1200,11 @@ def test_public_bytes_invalid_encoding(self, backend): x509.load_der_x509_certificate, serialization.Encoding.DER, ), - ] + ], ) - def test_public_bytes_match(self, cert_path, loader_func, encoding, - backend): + def test_public_bytes_match( + self, cert_path, loader_func, encoding, backend + ): cert_bytes = load_vectors_from_file( cert_path, lambda pemfile: pemfile.read(), mode="rb" ) @@ -1170,11 +1214,9 @@ def test_public_bytes_match(self, cert_path, loader_func, encoding, def test_certificate_repr(self, backend): cert = _load_cert( - os.path.join( - "x509", "cryptography.io.pem" - ), + os.path.join("x509", "cryptography.io.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert repr(cert) == ( " 2 bytes with pytest.raises(ValueError): - x509.NameAttribute( - NameOID.COUNTRY_NAME, - u'\U0001F37A\U0001F37A' - ) + x509.NameAttribute(NameOID.COUNTRY_NAME, u"\U0001F37A\U0001F37A") def test_invalid_type(self): with pytest.raises(TypeError): @@ -4481,28 +4766,23 @@ def test_invalid_type(self): def test_eq(self): assert x509.NameAttribute( - x509.ObjectIdentifier('2.999.1'), u'value' - ) == x509.NameAttribute( - x509.ObjectIdentifier('2.999.1'), u'value' - ) + x509.ObjectIdentifier("2.999.1"), u"value" + ) == x509.NameAttribute(x509.ObjectIdentifier("2.999.1"), u"value") def test_ne(self): assert x509.NameAttribute( - x509.ObjectIdentifier('2.5.4.3'), u'value' - ) != x509.NameAttribute( - x509.ObjectIdentifier('2.5.4.5'), u'value' - ) + x509.ObjectIdentifier("2.5.4.3"), u"value" + ) != x509.NameAttribute(x509.ObjectIdentifier("2.5.4.5"), u"value") assert x509.NameAttribute( - x509.ObjectIdentifier('2.999.1'), u'value' - ) != x509.NameAttribute( - x509.ObjectIdentifier('2.999.1'), u'value2' + x509.ObjectIdentifier("2.999.1"), u"value" + ) != x509.NameAttribute(x509.ObjectIdentifier("2.999.1"), u"value2") + assert ( + x509.NameAttribute(x509.ObjectIdentifier("2.999.2"), u"value") + != object() ) - assert x509.NameAttribute( - x509.ObjectIdentifier('2.999.2'), u'value' - ) != object() def test_repr(self): - na = x509.NameAttribute(x509.ObjectIdentifier('2.5.4.3'), u'value') + na = x509.NameAttribute(x509.ObjectIdentifier("2.5.4.3"), u"value") if not six.PY2: assert repr(na) == ( "", ), ( - u'Certificación', - u'Certificación', + u"Certificación", + u"Certificación", "", ), - ]) + ], + ) def test_repr(self, common_name, org_name, expected_repr): - name = x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, common_name), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, org_name), - ]) + name = x509.Name( + [ + x509.NameAttribute(NameOID.COMMON_NAME, common_name), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, org_name), + ] + ) assert repr(name) == expected_repr def test_rfc4514_string(self): - n = x509.Name([ - x509.RelativeDistinguishedName([ - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'net'), - ]), - x509.RelativeDistinguishedName([ - x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u'example'), - ]), - x509.RelativeDistinguishedName([ - x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u'Sales'), - x509.NameAttribute(NameOID.COMMON_NAME, u'J. Smith'), - ]), - ]) - assert (n.rfc4514_string() == - 'OU=Sales+CN=J. Smith,DC=example,DC=net') + n = x509.Name( + [ + x509.RelativeDistinguishedName( + [x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"net")] + ), + x509.RelativeDistinguishedName( + [x509.NameAttribute(NameOID.DOMAIN_COMPONENT, u"example")] + ), + x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + NameOID.ORGANIZATIONAL_UNIT_NAME, u"Sales" + ), + x509.NameAttribute(NameOID.COMMON_NAME, u"J. Smith"), + ] + ), + ] + ) + assert n.rfc4514_string() == "OU=Sales+CN=J. Smith,DC=example,DC=net" def test_rfc4514_string_empty_values(self): - n = x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u''), - x509.NameAttribute(NameOID.LOCALITY_NAME, u''), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), - x509.NameAttribute(NameOID.COMMON_NAME, u'cryptography.io'), - ]) - assert (n.rfc4514_string() == 'CN=cryptography.io,O=PyCA,L=,ST=,C=US') + n = x509.Name( + [ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u""), + x509.NameAttribute(NameOID.LOCALITY_NAME, u""), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"PyCA"), + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io"), + ] + ) + assert n.rfc4514_string() == "CN=cryptography.io,O=PyCA,L=,ST=,C=US" def test_not_nameattribute(self): with pytest.raises(TypeError): @@ -4765,10 +5108,12 @@ def test_not_nameattribute(self): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_bytes(self, backend): - name = x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u'cryptography.io'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), - ]) + name = x509.Name( + [ + x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"PyCA"), + ] + ) assert name.public_bytes(backend) == binascii.unhexlify( b"30293118301606035504030c0f63727970746f6772617068792e696f310d300" b"b060355040a0c0450794341" @@ -4779,14 +5124,16 @@ def test_bmpstring_bytes(self, backend): # For this test we need an odd length string. BMPString is UCS-2 # encoded so it will always be even length and OpenSSL will error if # you pass an odd length string without encoding it properly first. - name = x509.Name([ - x509.NameAttribute( - NameOID.COMMON_NAME, - u'cryptography.io', - _ASN1Type.BMPString - ), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), - ]) + name = x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, + u"cryptography.io", + _ASN1Type.BMPString, + ), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"PyCA"), + ] + ) assert name.public_bytes(backend) == binascii.unhexlify( b"30383127302506035504031e1e00630072007900700074006f00670072006100" b"7000680079002e0069006f310d300b060355040a0c0450794341" @@ -4795,14 +5142,16 @@ def test_bmpstring_bytes(self, backend): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_universalstring_bytes(self, backend): # UniversalString is UCS-4 - name = x509.Name([ - x509.NameAttribute( - NameOID.COMMON_NAME, - u'cryptography.io', - _ASN1Type.UniversalString - ), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), - ]) + name = x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, + u"cryptography.io", + _ASN1Type.UniversalString, + ), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"PyCA"), + ] + ) assert name.public_bytes(backend) == binascii.unhexlify( b"30563145304306035504031c3c00000063000000720000007900000070000000" b"740000006f000000670000007200000061000000700000006800000079000000" @@ -4812,7 +5161,7 @@ def test_universalstring_bytes(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support" + skip_message="Requires OpenSSL with Ed25519 support", ) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestEd25519Certificate(object): @@ -4820,7 +5169,7 @@ def test_load_pem_cert(self, backend): cert = _load_cert( os.path.join("x509", "ed25519", "root-ed25519.pem"), x509.load_pem_x509_certificate, - backend + backend, ) # self-signed, so this will work cert.public_key().verify(cert.signature, cert.tbs_certificate_bytes) @@ -4833,14 +5182,14 @@ def test_deepcopy(self, backend): cert = _load_cert( os.path.join("x509", "ed25519", "root-ed25519.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert copy.deepcopy(cert) is cert @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), - skip_message="Requires OpenSSL with Ed448 support" + skip_message="Requires OpenSSL with Ed448 support", ) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestEd448Certificate(object): @@ -4848,7 +5197,7 @@ def test_load_pem_cert(self, backend): cert = _load_cert( os.path.join("x509", "ed448", "root-ed448.pem"), x509.load_pem_x509_certificate, - backend + backend, ) # self-signed, so this will work cert.public_key().verify(cert.signature, cert.tbs_certificate_bytes) @@ -4862,11 +5211,12 @@ def test_load_pem_cert(self, backend): class TestSignatureRejection(object): """Test if signing rejects DH keys properly. """ + def load_key(self, backend): data = load_vectors_from_file( os.path.join("asymmetric", "DH", "dhkey.pem"), lambda pemfile: pemfile.read(), - mode="rb" + mode="rb", ) return serialization.load_pem_private_key(data, None, backend) @@ -4875,18 +5225,18 @@ def test_crt_signing_check(self, backend): public_key = RSA_KEY_2048.private_key(backend).public_key() not_valid_before = datetime.datetime(2020, 1, 1, 1, 1) not_valid_after = datetime.datetime(2050, 12, 31, 8, 30) - builder = x509.CertificateBuilder().serial_number( - 777 - ).issuer_name(x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), - ])).subject_name(x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u'US'), - ])).public_key( - public_key - ).not_valid_before( - not_valid_before - ).not_valid_after( - not_valid_after + builder = ( + x509.CertificateBuilder() + .serial_number(777) + .issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) + ) + .subject_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) + ) + .public_key(public_key) + .not_valid_before(not_valid_before) + .not_valid_after(not_valid_after) ) with pytest.raises(TypeError): @@ -4895,7 +5245,7 @@ def test_crt_signing_check(self, backend): def test_csr_signing_check(self, backend): private_key = self.load_key(backend) builder = x509.CertificateSigningRequestBuilder().subject_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) ) with pytest.raises(TypeError): @@ -4905,9 +5255,14 @@ def test_crl_signing_check(self, backend): private_key = self.load_key(backend) last_time = datetime.datetime.utcnow().replace(microsecond=0) next_time = last_time - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"CA")]) - ).last_update(last_time).next_update(next_time) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"CA")]) + ) + .last_update(last_time) + .next_update(next_time) + ) with pytest.raises(TypeError): builder.sign(private_key, hashes.SHA256(), backend) @@ -4924,7 +5279,5 @@ def notrandom(size): serial_number = x509.random_serial_number() - assert ( - serial_number == utils.int_from_bytes(sample_data, "big") >> 1 - ) + assert serial_number == utils.int_from_bytes(sample_data, "big") >> 1 assert serial_number.bit_length() < 160 diff --git a/tests/x509/test_x509_crlbuilder.py b/tests/x509/test_x509_crlbuilder.py index 04244c1baa7f..922d24917979 100644 --- a/tests/x509/test_x509_crlbuilder.py +++ b/tests/x509/test_x509_crlbuilder.py @@ -12,12 +12,17 @@ from cryptography import x509 from cryptography.hazmat.backends.interfaces import ( - DSABackend, EllipticCurveBackend, RSABackend, X509Backend + DSABackend, + EllipticCurveBackend, + RSABackend, + X509Backend, ) from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec, ed25519, ed448 from cryptography.x509.oid import ( - AuthorityInformationAccessOID, NameOID, SignatureAlgorithmOID + AuthorityInformationAccessOID, + NameOID, + SignatureAlgorithmOID, ) from ..hazmat.primitives.fixtures_dsa import DSA_KEY_2048 @@ -34,11 +39,11 @@ def test_issuer_name_invalid(self): def test_set_issuer_name_twice(self): builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) ) with pytest.raises(ValueError): builder.issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) ) @pytest.mark.requires_backend_interface(interface=RSABackend) @@ -50,11 +55,20 @@ def test_aware_last_update(self, backend): utc_last = datetime.datetime(2012, 1, 17, 6, 43) next_time = datetime.datetime(2022, 1, 17, 6, 43) private_key = RSA_KEY_2048.private_key(backend) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update(last_time).next_update(next_time) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_time) + .next_update(next_time) + ) crl = builder.sign(private_key, hashes.SHA256(), backend) assert crl.last_update == utc_last @@ -85,11 +99,20 @@ def test_aware_next_update(self, backend): utc_next = datetime.datetime(2022, 1, 17, 6, 43) last_time = datetime.datetime(2012, 1, 17, 6, 43) private_key = RSA_KEY_2048.private_key(backend) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update(last_time).next_update(next_time) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_time) + .next_update(next_time) + ) crl = builder.sign(private_key, hashes.SHA256(), backend) assert crl.next_update == utc_next @@ -114,18 +137,14 @@ def test_set_next_update_twice(self): def test_last_update_after_next_update(self): builder = x509.CertificateRevocationListBuilder() - builder = builder.next_update( - datetime.datetime(2002, 1, 1, 12, 1) - ) + builder = builder.next_update(datetime.datetime(2002, 1, 1, 12, 1)) with pytest.raises(ValueError): builder.last_update(datetime.datetime(2003, 1, 1, 12, 1)) def test_next_update_after_last_update(self): builder = x509.CertificateRevocationListBuilder() - builder = builder.last_update( - datetime.datetime(2002, 1, 1, 12, 1) - ) + builder = builder.last_update(datetime.datetime(2002, 1, 1, 12, 1)) with pytest.raises(ValueError): builder.next_update(datetime.datetime(2001, 1, 1, 12, 1)) @@ -141,9 +160,7 @@ def test_add_invalid_extension(self): builder = x509.CertificateRevocationListBuilder() with pytest.raises(TypeError): - builder.add_extension( - object(), False - ) + builder.add_extension(object(), False) def test_add_invalid_revoked_certificate(self): builder = x509.CertificateRevocationListBuilder() @@ -155,10 +172,10 @@ def test_add_invalid_revoked_certificate(self): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_no_issuer_name(self, backend): private_key = RSA_KEY_2048.private_key(backend) - builder = x509.CertificateRevocationListBuilder().last_update( - datetime.datetime(2002, 1, 1, 12, 1) - ).next_update( - datetime.datetime(2030, 1, 1, 12, 1) + builder = ( + x509.CertificateRevocationListBuilder() + .last_update(datetime.datetime(2002, 1, 1, 12, 1)) + .next_update(datetime.datetime(2030, 1, 1, 12, 1)) ) with pytest.raises(ValueError): @@ -168,10 +185,12 @@ def test_no_issuer_name(self, backend): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_no_last_update(self, backend): private_key = RSA_KEY_2048.private_key(backend) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).next_update( - datetime.datetime(2030, 1, 1, 12, 1) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) + ) + .next_update(datetime.datetime(2030, 1, 1, 12, 1)) ) with pytest.raises(ValueError): @@ -181,10 +200,12 @@ def test_no_last_update(self, backend): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_no_next_update(self, backend): private_key = RSA_KEY_2048.private_key(backend) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u'US')]) - ).last_update( - datetime.datetime(2030, 1, 1, 12, 1) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) + ) + .last_update(datetime.datetime(2030, 1, 1, 12, 1)) ) with pytest.raises(ValueError): @@ -196,11 +217,20 @@ def test_sign_empty_list(self, backend): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update(last_update).next_update(next_update) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + ) crl = builder.sign(private_key, hashes.SHA256(), backend) assert len(crl) == 0 @@ -216,18 +246,20 @@ def test_sign_empty_list(self, backend): b"\xc3\x9c\xf3\xfc\xd3F\x084\xbb\xceF\x7f\xa0|[\xf3\xe2\x08" b"\xcbY", None, - None + None, ), - x509.AuthorityInformationAccess([ - x509.AccessDescription( - AuthorityInformationAccessOID.CA_ISSUERS, - x509.DNSName(u"cryptography.io") - ) - ]), - x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) - ] + x509.AuthorityInformationAccess( + [ + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.DNSName(u"cryptography.io"), + ) + ] + ), + x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] + ), + ], ) @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) @@ -235,16 +267,20 @@ def test_sign_extensions(self, backend, extension): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_extension( - extension, False + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_extension(extension, False) ) crl = builder.sign(private_key, hashes.SHA256(), backend) @@ -260,22 +296,25 @@ def test_sign_multiple_extensions_critical(self, backend): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - ian = x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) + ian = x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] + ) crl_number = x509.CRLNumber(13) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_extension( - crl_number, False - ).add_extension( - ian, True + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_extension(crl_number, False) + .add_extension(ian, True) ) crl = builder.sign(private_key, hashes.SHA256(), backend) @@ -296,21 +335,30 @@ def test_freshestcrl_extension(self, backend): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - freshest = x509.FreshestCRL([ - x509.DistributionPoint([ - x509.UniformResourceIdentifier(u"http://d.om/delta"), - ], None, None, None) - ]) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_extension( - freshest, False + freshest = x509.FreshestCRL( + [ + x509.DistributionPoint( + [x509.UniformResourceIdentifier(u"http://d.om/delta")], + None, + None, + None, + ) + ] + ) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_extension(freshest, False) ) crl = builder.sign(private_key, hashes.SHA256(), backend) @@ -329,16 +377,20 @@ def test_add_unsupported_extension(self, backend): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_extension( - x509.OCSPNoCheck(), False + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_extension(x509.OCSPNoCheck(), False) ) with pytest.raises(NotImplementedError): builder.sign(private_key, hashes.SHA256(), backend) @@ -349,14 +401,19 @@ def test_sign_rsa_key_too_small(self, backend): private_key = RSA_KEY_512.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) ) with pytest.raises(ValueError): @@ -368,14 +425,19 @@ def test_sign_with_invalid_hash(self, backend): private_key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) ) with pytest.raises(TypeError): @@ -383,21 +445,26 @@ def test_sign_with_invalid_hash(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support" + skip_message="Requires OpenSSL with Ed25519 support", ) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_sign_with_invalid_hash_ed25519(self, backend): private_key = ed25519.Ed25519PrivateKey.generate() last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) ) with pytest.raises(ValueError): @@ -407,21 +474,26 @@ def test_sign_with_invalid_hash_ed25519(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), - skip_message="Requires OpenSSL with Ed448 support" + skip_message="Requires OpenSSL with Ed448 support", ) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_sign_with_invalid_hash_ed448(self, backend): private_key = ed448.Ed448PrivateKey.generate() last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) ) with pytest.raises(ValueError): @@ -436,36 +508,42 @@ def test_sign_dsa_key(self, backend): invalidity_date = x509.InvalidityDate( datetime.datetime(2002, 1, 1, 0, 0) ) - ian = x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) - revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( - 2 - ).revocation_date( - datetime.datetime(2012, 1, 1, 1, 1) - ).add_extension( - invalidity_date, False - ).build(backend) + ian = x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] + ) + revoked_cert0 = ( + x509.RevokedCertificateBuilder() + .serial_number(2) + .revocation_date(datetime.datetime(2012, 1, 1, 1, 1)) + .add_extension(invalidity_date, False) + .build(backend) + ) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_revoked_certificate( - revoked_cert0 - ).add_extension( - ian, False + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_revoked_certificate(revoked_cert0) + .add_extension(ian, False) ) crl = builder.sign(private_key, hashes.SHA256(), backend) - assert crl.extensions.get_extension_for_class( - x509.IssuerAlternativeName - ).value == ian + assert ( + crl.extensions.get_extension_for_class( + x509.IssuerAlternativeName + ).value + == ian + ) assert crl[0].serial_number == revoked_cert0.serial_number assert crl[0].revocation_date == revoked_cert0.revocation_date assert len(crl[0].extensions) == 1 @@ -481,36 +559,42 @@ def test_sign_ec_key(self, backend): invalidity_date = x509.InvalidityDate( datetime.datetime(2002, 1, 1, 0, 0) ) - ian = x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) - revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( - 2 - ).revocation_date( - datetime.datetime(2012, 1, 1, 1, 1) - ).add_extension( - invalidity_date, False - ).build(backend) + ian = x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] + ) + revoked_cert0 = ( + x509.RevokedCertificateBuilder() + .serial_number(2) + .revocation_date(datetime.datetime(2012, 1, 1, 1, 1)) + .add_extension(invalidity_date, False) + .build(backend) + ) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_revoked_certificate( - revoked_cert0 - ).add_extension( - ian, False + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_revoked_certificate(revoked_cert0) + .add_extension(ian, False) ) crl = builder.sign(private_key, hashes.SHA256(), backend) - assert crl.extensions.get_extension_for_class( - x509.IssuerAlternativeName - ).value == ian + assert ( + crl.extensions.get_extension_for_class( + x509.IssuerAlternativeName + ).value + == ian + ) assert crl[0].serial_number == revoked_cert0.serial_number assert crl[0].revocation_date == revoked_cert0.revocation_date assert len(crl[0].extensions) == 1 @@ -520,7 +604,7 @@ def test_sign_ec_key(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.ed25519_supported(), - skip_message="Requires OpenSSL with Ed25519 support" + skip_message="Requires OpenSSL with Ed25519 support", ) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_sign_ed25519_key(self, backend): @@ -528,38 +612,44 @@ def test_sign_ed25519_key(self, backend): invalidity_date = x509.InvalidityDate( datetime.datetime(2002, 1, 1, 0, 0) ) - ian = x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) - revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( - 2 - ).revocation_date( - datetime.datetime(2012, 1, 1, 1, 1) - ).add_extension( - invalidity_date, False - ).build(backend) + ian = x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] + ) + revoked_cert0 = ( + x509.RevokedCertificateBuilder() + .serial_number(2) + .revocation_date(datetime.datetime(2012, 1, 1, 1, 1)) + .add_extension(invalidity_date, False) + .build(backend) + ) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_revoked_certificate( - revoked_cert0 - ).add_extension( - ian, False + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_revoked_certificate(revoked_cert0) + .add_extension(ian, False) ) crl = builder.sign(private_key, None, backend) assert crl.signature_hash_algorithm is None assert crl.signature_algorithm_oid == SignatureAlgorithmOID.ED25519 - assert crl.extensions.get_extension_for_class( - x509.IssuerAlternativeName - ).value == ian + assert ( + crl.extensions.get_extension_for_class( + x509.IssuerAlternativeName + ).value + == ian + ) assert crl[0].serial_number == revoked_cert0.serial_number assert crl[0].revocation_date == revoked_cert0.revocation_date assert len(crl[0].extensions) == 1 @@ -569,7 +659,7 @@ def test_sign_ed25519_key(self, backend): @pytest.mark.supported( only_if=lambda backend: backend.ed448_supported(), - skip_message="Requires OpenSSL with Ed448 support" + skip_message="Requires OpenSSL with Ed448 support", ) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_sign_ed448_key(self, backend): @@ -577,38 +667,44 @@ def test_sign_ed448_key(self, backend): invalidity_date = x509.InvalidityDate( datetime.datetime(2002, 1, 1, 0, 0) ) - ian = x509.IssuerAlternativeName([ - x509.UniformResourceIdentifier(u"https://cryptography.io"), - ]) - revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( - 2 - ).revocation_date( - datetime.datetime(2012, 1, 1, 1, 1) - ).add_extension( - invalidity_date, False - ).build(backend) + ian = x509.IssuerAlternativeName( + [x509.UniformResourceIdentifier(u"https://cryptography.io")] + ) + revoked_cert0 = ( + x509.RevokedCertificateBuilder() + .serial_number(2) + .revocation_date(datetime.datetime(2012, 1, 1, 1, 1)) + .add_extension(invalidity_date, False) + .build(backend) + ) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_revoked_certificate( - revoked_cert0 - ).add_extension( - ian, False + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_revoked_certificate(revoked_cert0) + .add_extension(ian, False) ) crl = builder.sign(private_key, None, backend) assert crl.signature_hash_algorithm is None assert crl.signature_algorithm_oid == SignatureAlgorithmOID.ED448 - assert crl.extensions.get_extension_for_class( - x509.IssuerAlternativeName - ).value == ian + assert ( + crl.extensions.get_extension_for_class( + x509.IssuerAlternativeName + ).value + == ian + ) assert crl[0].serial_number == revoked_cert0.serial_number assert crl[0].revocation_date == revoked_cert0.revocation_date assert len(crl[0].extensions) == 1 @@ -622,11 +718,20 @@ def test_dsa_key_sign_md5(self, backend): private_key = DSA_KEY_2048.private_key(backend) last_time = datetime.datetime(2012, 1, 16, 22, 43) next_time = datetime.datetime(2022, 1, 17, 6, 43) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update(last_time).next_update(next_time) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_time) + .next_update(next_time) + ) with pytest.raises(ValueError): builder.sign(private_key, hashes.MD5(), backend) @@ -638,11 +743,20 @@ def test_ec_key_sign_md5(self, backend): private_key = EC_KEY_SECP256R1.private_key(backend) last_time = datetime.datetime(2012, 1, 16, 22, 43) next_time = datetime.datetime(2022, 1, 17, 6, 43) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update(last_time).next_update(next_time) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_time) + .next_update(next_time) + ) with pytest.raises(ValueError): builder.sign(private_key, hashes.MD5(), backend) @@ -656,30 +770,34 @@ def test_sign_with_revoked_certificates(self, backend): invalidity_date = x509.InvalidityDate( datetime.datetime(2002, 1, 1, 0, 0) ) - revoked_cert0 = x509.RevokedCertificateBuilder().serial_number( - 38 - ).revocation_date( - datetime.datetime(2011, 1, 1, 1, 1) - ).build(backend) - revoked_cert1 = x509.RevokedCertificateBuilder().serial_number( - 2 - ).revocation_date( - datetime.datetime(2012, 1, 1, 1, 1) - ).add_extension( - invalidity_date, False - ).build(backend) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_revoked_certificate( - revoked_cert0 - ).add_revoked_certificate( - revoked_cert1 + revoked_cert0 = ( + x509.RevokedCertificateBuilder() + .serial_number(38) + .revocation_date(datetime.datetime(2011, 1, 1, 1, 1)) + .build(backend) + ) + revoked_cert1 = ( + x509.RevokedCertificateBuilder() + .serial_number(2) + .revocation_date(datetime.datetime(2012, 1, 1, 1, 1)) + .add_extension(invalidity_date, False) + .build(backend) + ) + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_revoked_certificate(revoked_cert0) + .add_revoked_certificate(revoked_cert1) ) crl = builder.sign(private_key, hashes.SHA256(), backend) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index dd5c7fdc5229..850a8b1a2257 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -17,7 +17,10 @@ from cryptography import utils, x509 from cryptography.hazmat.backends.interfaces import ( - DSABackend, EllipticCurveBackend, RSABackend, X509Backend + DSABackend, + EllipticCurveBackend, + RSABackend, + X509Backend, ) from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec @@ -25,8 +28,13 @@ from cryptography.x509.extensions import _key_identifier_from_public_key from cryptography.x509.general_name import _lazy_import_idna from cryptography.x509.oid import ( - AuthorityInformationAccessOID, ExtendedKeyUsageOID, ExtensionOID, - NameOID, ObjectIdentifier, SubjectInformationAccessOID, _OID_NAMES + AuthorityInformationAccessOID, + ExtendedKeyUsageOID, + ExtensionOID, + NameOID, + ObjectIdentifier, + SubjectInformationAccessOID, + _OID_NAMES, ) from .test_x509 import _load_cert @@ -36,16 +44,15 @@ def _make_certbuilder(private_key): - name = x509.Name( - [x509.NameAttribute(NameOID.COMMON_NAME, u'example.org')]) + name = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"example.org")]) return ( x509.CertificateBuilder() - .subject_name(name) - .issuer_name(name) - .public_key(private_key.public_key()) - .serial_number(777) - .not_valid_before(datetime.datetime(1999, 1, 1)) - .not_valid_after(datetime.datetime(2020, 1, 1)) + .subject_name(name) + .issuer_name(name) + .public_key(private_key.public_key()) + .serial_number(777) + .not_valid_before(datetime.datetime(1999, 1, 1)) + .not_valid_after(datetime.datetime(2020, 1, 1)) ) @@ -81,26 +88,16 @@ def test_repr(self): ) def test_eq(self): - ext1 = x509.Extension( - x509.ObjectIdentifier('1.2.3.4'), False, 'value' - ) - ext2 = x509.Extension( - x509.ObjectIdentifier('1.2.3.4'), False, 'value' - ) + ext1 = x509.Extension(x509.ObjectIdentifier("1.2.3.4"), False, "value") + ext2 = x509.Extension(x509.ObjectIdentifier("1.2.3.4"), False, "value") assert ext1 == ext2 def test_ne(self): - ext1 = x509.Extension( - x509.ObjectIdentifier('1.2.3.4'), False, 'value' - ) - ext2 = x509.Extension( - x509.ObjectIdentifier('1.2.3.5'), False, 'value' - ) - ext3 = x509.Extension( - x509.ObjectIdentifier('1.2.3.4'), True, 'value' - ) + ext1 = x509.Extension(x509.ObjectIdentifier("1.2.3.4"), False, "value") + ext2 = x509.Extension(x509.ObjectIdentifier("1.2.3.5"), False, "value") + ext3 = x509.Extension(x509.ObjectIdentifier("1.2.3.4"), True, "value") ext4 = x509.Extension( - x509.ObjectIdentifier('1.2.3.4'), False, 'value4' + x509.ObjectIdentifier("1.2.3.4"), False, "value4" ) assert ext1 != ext2 assert ext1 != ext3 @@ -111,17 +108,17 @@ def test_hash(self): ext1 = x509.Extension( ExtensionOID.BASIC_CONSTRAINTS, False, - x509.BasicConstraints(ca=False, path_length=None) + x509.BasicConstraints(ca=False, path_length=None), ) ext2 = x509.Extension( ExtensionOID.BASIC_CONSTRAINTS, False, - x509.BasicConstraints(ca=False, path_length=None) + x509.BasicConstraints(ca=False, path_length=None), ) ext3 = x509.Extension( ExtensionOID.BASIC_CONSTRAINTS, False, - x509.BasicConstraints(ca=True, path_length=None) + x509.BasicConstraints(ca=True, path_length=None), ) assert hash(ext1) == hash(ext2) assert hash(ext1) != hash(ext3) @@ -150,10 +147,12 @@ def test_eq(self): def test_ne(self): ext1 = x509.TLSFeature([x509.TLSFeatureType.status_request]) ext2 = x509.TLSFeature([x509.TLSFeatureType.status_request_v2]) - ext3 = x509.TLSFeature([ - x509.TLSFeatureType.status_request, - x509.TLSFeatureType.status_request_v2 - ]) + ext3 = x509.TLSFeature( + [ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2, + ] + ) assert ext1 != ext2 assert ext1 != ext3 assert ext1 != object() @@ -161,10 +160,12 @@ def test_ne(self): def test_hash(self): ext1 = x509.TLSFeature([x509.TLSFeatureType.status_request]) ext2 = x509.TLSFeature([x509.TLSFeatureType.status_request]) - ext3 = x509.TLSFeature([ - x509.TLSFeatureType.status_request, - x509.TLSFeatureType.status_request_v2 - ]) + ext3 = x509.TLSFeature( + [ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2, + ] + ) assert hash(ext1) == hash(ext2) assert hash(ext1) != hash(ext3) @@ -182,10 +183,12 @@ def test_iter(self): assert list(ext2) == ext2_features def test_indexing(self): - ext = x509.TLSFeature([ - x509.TLSFeatureType.status_request, - x509.TLSFeatureType.status_request_v2, - ]) + ext = x509.TLSFeature( + [ + x509.TLSFeatureType.status_request, + x509.TLSFeatureType.status_request_v2, + ] + ) assert ext[-1] == ext[1] assert ext[0] == x509.TLSFeatureType.status_request @@ -249,10 +252,9 @@ def test_hash(self): class TestCertificateIssuer(object): def test_iter_names(self): - ci = x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - ]) + ci = x509.CertificateIssuer( + [x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local")] + ) assert len(ci) == 2 assert list(ci) == [ x509.DNSName(u"cryptography.io"), @@ -260,13 +262,15 @@ def test_iter_names(self): ] def test_indexing(self): - ci = x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), - x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), - ]) + ci = x509.CertificateIssuer( + [ + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), + x509.RFC822Name(u"email@another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), + ] + ) assert ci[-1] == ci[4] assert ci[2:6:2] == [ci[2], ci[4]] @@ -295,9 +299,7 @@ def test_repr(self): ) def test_get_values_for_type(self): - ci = x509.CertificateIssuer( - [x509.DNSName(u"cryptography.io")] - ) + ci = x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]) names = ci.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] @@ -337,9 +339,7 @@ def test_hash(self): def test_repr(self): reason1 = x509.CRLReason(x509.ReasonFlags.unspecified) - assert repr(reason1) == ( - "" - ) + assert repr(reason1) == ("") class TestDeltaCRLIndicator(object): @@ -360,9 +360,7 @@ def test_ne(self): def test_repr(self): delta1 = x509.DeltaCRLIndicator(2) - assert repr(delta1) == ( - "" - ) + assert repr(delta1) == ("") def test_hash(self): delta1 = x509.DeltaCRLIndicator(1) @@ -545,11 +543,11 @@ def test_repr(self): def test_eq(self): pi = x509.PolicyInformation( x509.ObjectIdentifier("1.2.3"), - [u"string", x509.UserNotice(None, u"hi")] + [u"string", x509.UserNotice(None, u"hi")], ) pi2 = x509.PolicyInformation( x509.ObjectIdentifier("1.2.3"), - [u"string", x509.UserNotice(None, u"hi")] + [u"string", x509.UserNotice(None, u"hi")], ) assert pi == pi2 @@ -570,11 +568,11 @@ def test_ne(self): def test_hash(self): pi = x509.PolicyInformation( x509.ObjectIdentifier("1.2.3"), - [u"string", x509.UserNotice(None, u"hi")] + [u"string", x509.UserNotice(None, u"hi")], ) pi2 = x509.PolicyInformation( x509.ObjectIdentifier("1.2.3"), - [u"string", x509.UserNotice(None, u"hi")] + [u"string", x509.UserNotice(None, u"hi")], ) pi3 = x509.PolicyInformation(x509.ObjectIdentifier("1.2.3"), None) assert hash(pi) == hash(pi2) @@ -662,10 +660,9 @@ def test_long_oid(self, backend): cert = _load_cert( os.path.join("x509", "bigoid.pem"), x509.load_pem_x509_certificate, - backend + backend, ) - ext = cert.extensions.get_extension_for_class( - x509.CertificatePolicies) + ext = cert.extensions.get_extension_for_class(x509.CertificatePolicies) oid = x509.ObjectIdentifier( "1.3.6.1.4.1.311.21.8.8950086.10656446.2706058" @@ -698,19 +695,21 @@ def test_cps_uri_policy_qualifier(self, backend): cert = _load_cert( os.path.join("x509", "custom", "cp_cps_uri.pem"), x509.load_pem_x509_certificate, - backend + backend, ) cp = cert.extensions.get_extension_for_oid( ExtensionOID.CERTIFICATE_POLICIES ).value - assert cp == x509.CertificatePolicies([ - x509.PolicyInformation( - x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), - [u"http://other.com/cps"] - ) - ]) + assert cp == x509.CertificatePolicies( + [ + x509.PolicyInformation( + x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), + [u"http://other.com/cps"], + ) + ] + ) def test_user_notice_with_notice_reference(self, backend): cert = _load_cert( @@ -718,26 +717,28 @@ def test_user_notice_with_notice_reference(self, backend): "x509", "custom", "cp_user_notice_with_notice_reference.pem" ), x509.load_pem_x509_certificate, - backend + backend, ) cp = cert.extensions.get_extension_for_oid( ExtensionOID.CERTIFICATE_POLICIES ).value - assert cp == x509.CertificatePolicies([ - x509.PolicyInformation( - x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), - [ - u"http://example.com/cps", - u"http://other.com/cps", - x509.UserNotice( - x509.NoticeReference(u"my org", [1, 2, 3, 4]), - u"thing" - ) - ] - ) - ]) + assert cp == x509.CertificatePolicies( + [ + x509.PolicyInformation( + x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), + [ + u"http://example.com/cps", + u"http://other.com/cps", + x509.UserNotice( + x509.NoticeReference(u"my org", [1, 2, 3, 4]), + u"thing", + ), + ], + ) + ] + ) def test_user_notice_with_explicit_text(self, backend): cert = _load_cert( @@ -745,19 +746,21 @@ def test_user_notice_with_explicit_text(self, backend): "x509", "custom", "cp_user_notice_with_explicit_text.pem" ), x509.load_pem_x509_certificate, - backend + backend, ) cp = cert.extensions.get_extension_for_oid( ExtensionOID.CERTIFICATE_POLICIES ).value - assert cp == x509.CertificatePolicies([ - x509.PolicyInformation( - x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), - [x509.UserNotice(None, u"thing")] - ) - ]) + assert cp == x509.CertificatePolicies( + [ + x509.PolicyInformation( + x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), + [x509.UserNotice(None, u"thing")], + ) + ] + ) def test_user_notice_no_explicit_text(self, backend): cert = _load_cert( @@ -765,24 +768,25 @@ def test_user_notice_no_explicit_text(self, backend): "x509", "custom", "cp_user_notice_no_explicit_text.pem" ), x509.load_pem_x509_certificate, - backend + backend, ) cp = cert.extensions.get_extension_for_oid( ExtensionOID.CERTIFICATE_POLICIES ).value - assert cp == x509.CertificatePolicies([ - x509.PolicyInformation( - x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), - [ - x509.UserNotice( - x509.NoticeReference(u"my org", [1, 2, 3, 4]), - None - ) - ] - ) - ]) + assert cp == x509.CertificatePolicies( + [ + x509.PolicyInformation( + x509.ObjectIdentifier("2.16.840.1.12345.1.2.3.4.1"), + [ + x509.UserNotice( + x509.NoticeReference(u"my org", [1, 2, 3, 4]), None + ) + ], + ) + ] + ) class TestKeyUsage(object): @@ -797,7 +801,7 @@ def test_key_agreement_false_encipher_decipher_true(self): key_cert_sign=False, crl_sign=False, encipher_only=True, - decipher_only=False + decipher_only=False, ) with pytest.raises(ValueError): @@ -810,7 +814,7 @@ def test_key_agreement_false_encipher_decipher_true(self): key_cert_sign=False, crl_sign=False, encipher_only=True, - decipher_only=True + decipher_only=True, ) with pytest.raises(ValueError): @@ -823,7 +827,7 @@ def test_key_agreement_false_encipher_decipher_true(self): key_cert_sign=False, crl_sign=False, encipher_only=False, - decipher_only=True + decipher_only=True, ) def test_properties_key_agreement_true(self): @@ -836,7 +840,7 @@ def test_properties_key_agreement_true(self): key_cert_sign=True, crl_sign=False, encipher_only=False, - decipher_only=False + decipher_only=False, ) assert ku.digital_signature is True assert ku.content_commitment is True @@ -856,7 +860,7 @@ def test_key_agreement_true_properties(self): key_cert_sign=False, crl_sign=False, encipher_only=False, - decipher_only=True + decipher_only=True, ) assert ku.key_agreement is True assert ku.encipher_only is False @@ -872,7 +876,7 @@ def test_key_agreement_false_properties(self): key_cert_sign=False, crl_sign=False, encipher_only=False, - decipher_only=False + decipher_only=False, ) assert ku.key_agreement is False with pytest.raises(ValueError): @@ -891,7 +895,7 @@ def test_repr_key_agreement_false(self): key_cert_sign=True, crl_sign=False, encipher_only=False, - decipher_only=False + decipher_only=False, ) assert repr(ku) == ( ", critical=False, value=)>" + "igest=b'\\t#\\x84\\x93\"0I\\x8b\\xc9\\x80\\xaa\\x80\\x98Eoo" + "\\xf7\\xff:\\xc9')>)>" ) else: assert repr(ext) == ( ", critical=False, value=)>" + "igest='\\t#\\x84\\x93\"0I\\x8b\\xc9\\x80\\xaa\\x80\\x98Eoo" + "\\xf7\\xff:\\xc9')>)>" ) def test_eq(self): @@ -1074,16 +1078,16 @@ def test_authority_cert_issuer_not_generalname(self): def test_authority_cert_serial_number_not_integer(self): dirname = x509.DirectoryName( - x509.Name([ - x509.NameAttribute( - x509.ObjectIdentifier('2.999.1'), - u'value1' - ), - x509.NameAttribute( - x509.ObjectIdentifier('2.999.2'), - u'value2' - ), - ]) + x509.Name( + [ + x509.NameAttribute( + x509.ObjectIdentifier("2.999.1"), u"value1" + ), + x509.NameAttribute( + x509.ObjectIdentifier("2.999.2"), u"value2" + ), + ] + ) ) with pytest.raises(TypeError): x509.AuthorityKeyIdentifier(b"identifier", [dirname], "notanint") @@ -1094,16 +1098,16 @@ def test_authority_issuer_none_serial_not_none(self): def test_authority_issuer_not_none_serial_none(self): dirname = x509.DirectoryName( - x509.Name([ - x509.NameAttribute( - x509.ObjectIdentifier('2.999.1'), - u'value1' - ), - x509.NameAttribute( - x509.ObjectIdentifier('2.999.2'), - u'value2' - ), - ]) + x509.Name( + [ + x509.NameAttribute( + x509.ObjectIdentifier("2.999.1"), u"value1" + ), + x509.NameAttribute( + x509.ObjectIdentifier("2.999.2"), u"value2" + ), + ] + ) ) with pytest.raises(ValueError): x509.AuthorityKeyIdentifier(b"identifier", [dirname], None) @@ -1124,7 +1128,7 @@ def test_authority_cert_serial_zero(self): def test_iter_input(self): dirnames = [ x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"myCN")]) ) ] aki = x509.AuthorityKeyIdentifier(b"digest", iter(dirnames), 1234) @@ -1132,7 +1136,7 @@ def test_iter_input(self): def test_repr(self): dirname = x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"myCN")]) ) aki = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) @@ -1151,21 +1155,21 @@ def test_repr(self): def test_eq(self): dirname = x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"myCN")]) ) aki = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) dirname2 = x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"myCN")]) ) aki2 = x509.AuthorityKeyIdentifier(b"digest", [dirname2], 1234) assert aki == aki2 def test_ne(self): dirname = x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"myCN")]) ) dirname5 = x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'aCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"aCN")]) ) aki = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) aki2 = x509.AuthorityKeyIdentifier(b"diges", [dirname], 1234) @@ -1180,7 +1184,7 @@ def test_ne(self): def test_hash(self): dirname = x509.DirectoryName( - x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"myCN")]) ) aki1 = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) aki2 = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) @@ -1211,9 +1215,7 @@ def test_path_length_negative(self): def test_repr(self): na = x509.BasicConstraints(ca=True, path_length=None) - assert repr(na) == ( - "" - ) + assert repr(na) == ("") def test_hash(self): na = x509.BasicConstraints(ca=True, path_length=None) @@ -1242,14 +1244,16 @@ def test_not_all_oids(self): x509.ExtendedKeyUsage(["notoid"]) def test_iter_len(self): - eku = x509.ExtendedKeyUsage([ - x509.ObjectIdentifier("1.3.6.1.5.5.7.3.1"), - x509.ObjectIdentifier("1.3.6.1.5.5.7.3.2"), - ]) + eku = x509.ExtendedKeyUsage( + [ + x509.ObjectIdentifier("1.3.6.1.5.5.7.3.1"), + x509.ObjectIdentifier("1.3.6.1.5.5.7.3.2"), + ] + ) assert len(eku) == 2 assert list(eku) == [ ExtendedKeyUsageOID.SERVER_AUTH, - ExtendedKeyUsageOID.CLIENT_AUTH + ExtendedKeyUsageOID.CLIENT_AUTH, ] def test_iter_input(self): @@ -1261,10 +1265,12 @@ def test_iter_input(self): assert list(aia) == usages def test_repr(self): - eku = x509.ExtendedKeyUsage([ - x509.ObjectIdentifier("1.3.6.1.5.5.7.3.1"), - x509.ObjectIdentifier("1.3.6.1.5.5.7.3.2"), - ]) + eku = x509.ExtendedKeyUsage( + [ + x509.ObjectIdentifier("1.3.6.1.5.5.7.3.1"), + x509.ObjectIdentifier("1.3.6.1.5.5.7.3.2"), + ] + ) assert repr(eku) == ( ", )>" def test_eq(self): - name = x509.Name([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1') - ]) - name2 = x509.Name([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1') - ]) + name = x509.Name( + [x509.NameAttribute(x509.ObjectIdentifier("2.999.1"), u"value1")] + ) + name2 = x509.Name( + [x509.NameAttribute(x509.ObjectIdentifier("2.999.1"), u"value1")] + ) gn = x509.DirectoryName(name) gn2 = x509.DirectoryName(name2) assert gn == gn2 def test_ne(self): - name = x509.Name([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1') - ]) - name2 = x509.Name([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.2'), u'value2') - ]) + name = x509.Name( + [x509.NameAttribute(x509.ObjectIdentifier("2.999.1"), u"value1")] + ) + name2 = x509.Name( + [x509.NameAttribute(x509.ObjectIdentifier("2.999.2"), u"value2")] + ) gn = x509.DirectoryName(name) gn2 = x509.DirectoryName(name2) assert gn != gn2 assert gn != object() def test_hash(self): - name = x509.Name([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1') - ]) - name2 = x509.Name([ - x509.NameAttribute(x509.ObjectIdentifier('2.999.2'), u'value2') - ]) + name = x509.Name( + [x509.NameAttribute(x509.ObjectIdentifier("2.999.1"), u"value1")] + ) + name2 = x509.Name( + [x509.NameAttribute(x509.ObjectIdentifier("2.999.2"), u"value2")] + ) gn = x509.DirectoryName(name) gn2 = x509.DirectoryName(name) gn3 = x509.DirectoryName(name2) @@ -1918,9 +1911,7 @@ def test_idna_with_port(self): u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" ) - assert gn.value == ( - u"gopher://xn--80ato2c.cryptography:70/some/path" - ) + assert gn.value == (u"gopher://xn--80ato2c.cryptography:70/some/path") def test_empty_hostname(self): gn = x509.UniformResourceIdentifier(u"ldap:///some-nonsense") @@ -1948,13 +1939,9 @@ def test_hash(self): def test_repr(self): gn = x509.UniformResourceIdentifier(u"string") if not six.PY2: - assert repr(gn) == ( - "" - ) + assert repr(gn) == ("") else: - assert repr(gn) == ( - "" - ) + assert repr(gn) == ("") class TestRegisteredID(object): @@ -2089,17 +2076,14 @@ def test_hash(self): class TestGeneralNames(object): def test_get_values_for_type(self): - gns = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] - ) + gns = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) names = gns.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): - gns = x509.GeneralNames([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - ]) + gns = x509.GeneralNames( + [x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local")] + ) assert len(gns) == 2 assert list(gns) == [ x509.DNSName(u"cryptography.io"), @@ -2115,28 +2099,24 @@ def test_iter_input(self): assert list(gns) == names def test_indexing(self): - gn = x509.GeneralNames([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), - x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), - ]) + gn = x509.GeneralNames( + [ + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), + x509.RFC822Name(u"email@another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), + ] + ) assert gn[-1] == gn[4] assert gn[2:6:2] == [gn[2], gn[4]] def test_invalid_general_names(self): with pytest.raises(TypeError): - x509.GeneralNames( - [x509.DNSName(u"cryptography.io"), "invalid"] - ) + x509.GeneralNames([x509.DNSName(u"cryptography.io"), "invalid"]) def test_repr(self): - gns = x509.GeneralNames( - [ - x509.DNSName(u"cryptography.io") - ] - ) + gns = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) if not six.PY2: assert repr(gns) == ( "])>" @@ -2147,21 +2127,13 @@ def test_repr(self): ) def test_eq(self): - gns = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] - ) - gns2 = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] - ) + gns = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) + gns2 = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) assert gns == gns2 def test_ne(self): - gns = x509.GeneralNames( - [x509.DNSName(u"cryptography.io")] - ) - gns2 = x509.GeneralNames( - [x509.RFC822Name(u"admin@cryptography.io")] - ) + gns = x509.GeneralNames([x509.DNSName(u"cryptography.io")]) + gns2 = x509.GeneralNames([x509.RFC822Name(u"admin@cryptography.io")]) assert gns != gns2 assert gns != object() @@ -2175,17 +2147,14 @@ def test_hash(self): class TestIssuerAlternativeName(object): def test_get_values_for_type(self): - san = x509.IssuerAlternativeName( - [x509.DNSName(u"cryptography.io")] - ) + san = x509.IssuerAlternativeName([x509.DNSName(u"cryptography.io")]) names = san.get_values_for_type(x509.DNSName) assert names == [u"cryptography.io"] def test_iter_names(self): - san = x509.IssuerAlternativeName([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - ]) + san = x509.IssuerAlternativeName( + [x509.DNSName(u"cryptography.io"), x509.DNSName(u"crypto.local")] + ) assert len(san) == 2 assert list(san) == [ x509.DNSName(u"cryptography.io"), @@ -2193,13 +2162,15 @@ def test_iter_names(self): ] def test_indexing(self): - ian = x509.IssuerAlternativeName([ - x509.DNSName(u"cryptography.io"), - x509.DNSName(u"crypto.local"), - x509.DNSName(u"another.local"), - x509.RFC822Name(u"email@another.local"), - x509.UniformResourceIdentifier(u"http://another.local"), - ]) + ian = x509.IssuerAlternativeName( + [ + x509.DNSName(u"cryptography.io"), + x509.DNSName(u"crypto.local"), + x509.DNSName(u"another.local"), + x509.RFC822Name(u"email@another.local"), + x509.UniformResourceIdentifier(u"http://another.local"), + ] + ) assert ian[-1] == ian[4] assert ian[2:6:2] == [ian[2], ian[4]] @@ -2210,11 +2181,7 @@ def test_invalid_general_names(self): ) def test_repr(self): - san = x509.IssuerAlternativeName( - [ - x509.DNSName(u"cryptography.io") - ] - ) + san = x509.IssuerAlternativeName([x509.DNSName(u"cryptography.io")]) if not six.PY2: assert repr(san) == ( "', u'email ', - u'email ', u'myemail:' + u"email", + u"email ", + u"email ", + u"email ", + u"myemail:", ] def test_other_name(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", "san_other_name.pem" - ), + os.path.join("x509", "custom", "san_other_name.pem"), x509.load_pem_x509_certificate, - backend + backend, ) ext = cert.extensions.get_extension_for_oid( @@ -2666,8 +2600,9 @@ def test_other_name(self, backend): assert ext is not None assert ext.critical is False - expected = x509.OtherName(x509.ObjectIdentifier("1.2.3.4"), - b'\x16\x0bHello World') + expected = x509.OtherName( + x509.ObjectIdentifier("1.2.3.4"), b"\x16\x0bHello World" + ) assert len(ext.value) == 1 assert list(ext.value)[0] == expected @@ -2675,12 +2610,16 @@ def test_other_name(self, backend): assert othernames == [expected] def test_certbuilder(self, backend): - sans = [u'*.example.org', u'*.xn--4ca7aey.example.com', - u'foobar.example.net'] + sans = [ + u"*.example.org", + u"*.xn--4ca7aey.example.com", + u"foobar.example.net", + ] private_key = RSA_KEY_2048.private_key(backend) builder = _make_certbuilder(private_key) builder = builder.add_extension( - SubjectAlternativeName(list(map(DNSName, sans))), True) + SubjectAlternativeName(list(map(DNSName, sans))), True + ) cert = builder.sign(private_key, hashes.SHA1(), backend) result = [ @@ -2697,11 +2636,9 @@ def test_certbuilder(self, backend): class TestExtendedKeyUsageExtension(object): def test_eku(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", "extended_key_usage.pem" - ), + os.path.join("x509", "custom", "extended_key_usage.pem"), x509.load_pem_x509_certificate, - backend + backend, ) ext = cert.extensions.get_extension_for_oid( ExtensionOID.EXTENDED_KEY_USAGE @@ -2735,14 +2672,14 @@ def test_invalid_access_location(self): def test_valid_nonstandard_method(self): ad = x509.AccessDescription( ObjectIdentifier("2.999.1"), - x509.UniformResourceIdentifier(u"http://example.com") + x509.UniformResourceIdentifier(u"http://example.com"), ) assert ad is not None def test_repr(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) if not six.PY2: assert repr(ad) == ( @@ -2760,26 +2697,26 @@ def test_repr(self): def test_eq(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) assert ad == ad2 def test_ne(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) ad3 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://notthesame") + x509.UniformResourceIdentifier(u"http://notthesame"), ) assert ad != ad2 assert ad != ad3 @@ -2788,15 +2725,15 @@ def test_ne(self): def test_hash(self): ad = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) ad2 = x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) ad3 = x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) assert hash(ad) == hash(ad2) assert hash(ad) != hash(ad3) @@ -2851,7 +2788,7 @@ def test_inhibit_policy_mapping(self, backend): cert = _load_cert( os.path.join("x509", "department-of-state-root.pem"), x509.load_pem_x509_certificate, - backend + backend, ) ext = cert.extensions.get_extension_for_oid( ExtensionOID.POLICY_CONSTRAINTS, @@ -2866,7 +2803,7 @@ def test_require_explicit_policy(self, backend): cert = _load_cert( os.path.join("x509", "custom", "policy_constraints_explicit.pem"), x509.load_pem_x509_certificate, - backend + backend, ) ext = cert.extensions.get_extension_for_oid( ExtensionOID.POLICY_CONSTRAINTS @@ -2883,49 +2820,57 @@ def test_invalid_descriptions(self): x509.AuthorityInformationAccess(["notanAccessDescription"]) def test_iter_len(self): - aia = x509.AuthorityInformationAccess([ - x509.AccessDescription( - AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") - ), - x509.AccessDescription( - AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") - ) - ]) + aia = x509.AuthorityInformationAccess( + [ + x509.AccessDescription( + AuthorityInformationAccessOID.OCSP, + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), + ), + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.UniformResourceIdentifier( + u"http://domain.com/ca.crt" + ), + ), + ] + ) assert len(aia) == 2 assert list(aia) == [ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ), x509.AccessDescription( AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") - ) + x509.UniformResourceIdentifier(u"http://domain.com/ca.crt"), + ), ] def test_iter_input(self): desc = [ x509.AccessDescription( AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), ) ] aia = x509.AuthorityInformationAccess(iter(desc)) assert list(aia) == desc def test_repr(self): - aia = x509.AuthorityInformationAccess([ - x509.AccessDescription( - AuthorityInformationAccessOID.OCSP, - x509.UniformResourceIdentifier(u"http://ocsp.domain.com") - ), - x509.AccessDescription( - AuthorityInformationAccessOID.CA_ISSUERS, - x509.UniformResourceIdentifier(u"http://domain.com/ca.crt") - ) - ]) + aia = x509.AuthorityInformationAccess( + [ + x509.AccessDescription( + AuthorityInformationAccessOID.OCSP, + x509.UniformResourceIdentifier(u"http://ocsp.domain.com"), + ), + x509.AccessDescription( + AuthorityInformationAccessOID.CA_ISSUERS, + x509.UniformResourceIdentifier( + u"http://domain.com/ca.crt" + ), + ), + ] + ) if not six.PY2: assert repr(aia) == ( "' + assert repr(onc) == "" class TestInhibitAnyPolicy(object): @@ -4718,11 +4893,9 @@ def test_hash(self): class TestInhibitAnyPolicyExtension(object): def test_inhibit_any_policy(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", "inhibit_any_policy_5.pem" - ), + os.path.join("x509", "custom", "inhibit_any_policy_5.pem"), x509.load_pem_x509_certificate, - backend + backend, ) iap = cert.extensions.get_extension_for_oid( ExtensionOID.INHIBIT_ANY_POLICY @@ -4739,7 +4912,8 @@ class TestIssuingDistributionPointExtension(object): x509.IssuingDistributionPoint( full_name=[ x509.UniformResourceIdentifier( - u"http://myhost.com/myca.crl") + u"http://myhost.com/myca.crl" + ) ], relative_name=None, only_contains_user_certs=False, @@ -4747,14 +4921,15 @@ class TestIssuingDistributionPointExtension(object): only_some_reasons=None, indirect_crl=True, only_contains_attribute_certs=False, - ) + ), ), ( "crl_idp_fullname_only.pem", x509.IssuingDistributionPoint( full_name=[ x509.UniformResourceIdentifier( - u"http://myhost.com/myca.crl") + u"http://myhost.com/myca.crl" + ) ], relative_name=None, only_contains_user_certs=False, @@ -4762,14 +4937,15 @@ class TestIssuingDistributionPointExtension(object): only_some_reasons=None, indirect_crl=False, only_contains_attribute_certs=False, - ) + ), ), ( "crl_idp_fullname_only_aa.pem", x509.IssuingDistributionPoint( full_name=[ x509.UniformResourceIdentifier( - u"http://myhost.com/myca.crl") + u"http://myhost.com/myca.crl" + ) ], relative_name=None, only_contains_user_certs=False, @@ -4777,14 +4953,15 @@ class TestIssuingDistributionPointExtension(object): only_some_reasons=None, indirect_crl=False, only_contains_attribute_certs=True, - ) + ), ), ( "crl_idp_fullname_only_user.pem", x509.IssuingDistributionPoint( full_name=[ x509.UniformResourceIdentifier( - u"http://myhost.com/myca.crl") + u"http://myhost.com/myca.crl" + ) ], relative_name=None, only_contains_user_certs=True, @@ -4792,23 +4969,26 @@ class TestIssuingDistributionPointExtension(object): only_some_reasons=None, indirect_crl=False, only_contains_attribute_certs=False, - ) + ), ), ( "crl_idp_only_ca.pem", x509.IssuingDistributionPoint( full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" - ) - ]), + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, + value=u"PyCA", + ) + ] + ), only_contains_user_certs=False, only_contains_ca_certs=True, only_some_reasons=None, indirect_crl=False, only_contains_attribute_certs=False, - ) + ), ), ( "crl_idp_reasons_only.pem", @@ -4817,62 +4997,71 @@ class TestIssuingDistributionPointExtension(object): relative_name=None, only_contains_user_certs=False, only_contains_ca_certs=False, - only_some_reasons=frozenset([ - x509.ReasonFlags.key_compromise - ]), + only_some_reasons=frozenset( + [x509.ReasonFlags.key_compromise] + ), indirect_crl=False, only_contains_attribute_certs=False, - ) + ), ), ( "crl_idp_relative_user_all_reasons.pem", x509.IssuingDistributionPoint( full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" - ) - ]), + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, + value=u"PyCA", + ) + ] + ), only_contains_user_certs=True, only_contains_ca_certs=False, - only_some_reasons=frozenset([ - x509.ReasonFlags.key_compromise, - x509.ReasonFlags.ca_compromise, - x509.ReasonFlags.affiliation_changed, - x509.ReasonFlags.superseded, - x509.ReasonFlags.cessation_of_operation, - x509.ReasonFlags.certificate_hold, - x509.ReasonFlags.privilege_withdrawn, - x509.ReasonFlags.aa_compromise, - ]), + only_some_reasons=frozenset( + [ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.affiliation_changed, + x509.ReasonFlags.superseded, + x509.ReasonFlags.cessation_of_operation, + x509.ReasonFlags.certificate_hold, + x509.ReasonFlags.privilege_withdrawn, + x509.ReasonFlags.aa_compromise, + ] + ), indirect_crl=False, only_contains_attribute_certs=False, - ) + ), ), ( "crl_idp_relativename_only.pem", x509.IssuingDistributionPoint( full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" - ) - ]), + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, + value=u"PyCA", + ) + ] + ), only_contains_user_certs=False, only_contains_ca_certs=False, only_some_reasons=None, indirect_crl=False, only_contains_attribute_certs=False, - ) + ), ), - ] + ], ) @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_vectors(self, filename, expected, backend): crl = _load_cert( os.path.join("x509", "custom", filename), - x509.load_pem_x509_crl, backend + x509.load_pem_x509_crl, + backend, ) idp = crl.extensions.get_extension_for_class( x509.IssuingDistributionPoint @@ -4881,51 +5070,96 @@ def test_vectors(self, filename, expected, backend): @pytest.mark.parametrize( ( - "error", "only_contains_user_certs", "only_contains_ca_certs", - "indirect_crl", "only_contains_attribute_certs", - "only_some_reasons", "full_name", "relative_name" + "error", + "only_contains_user_certs", + "only_contains_ca_certs", + "indirect_crl", + "only_contains_attribute_certs", + "only_some_reasons", + "full_name", + "relative_name", ), [ ( - TypeError, False, False, False, False, 'notafrozenset', None, - None + TypeError, + False, + False, + False, + False, + "notafrozenset", + None, + None, ), ( - TypeError, False, False, False, False, frozenset(['bad']), - None, None + TypeError, + False, + False, + False, + False, + frozenset(["bad"]), + None, + None, ), ( - ValueError, False, False, False, False, - frozenset([x509.ReasonFlags.unspecified]), None, None + ValueError, + False, + False, + False, + False, + frozenset([x509.ReasonFlags.unspecified]), + None, + None, ), ( - ValueError, False, False, False, False, - frozenset([x509.ReasonFlags.remove_from_crl]), None, None + ValueError, + False, + False, + False, + False, + frozenset([x509.ReasonFlags.remove_from_crl]), + None, + None, ), - (TypeError, 'notabool', False, False, False, None, None, None), - (TypeError, False, 'notabool', False, False, None, None, None), - (TypeError, False, False, 'notabool', False, None, None, None), - (TypeError, False, False, False, 'notabool', None, None, None), + (TypeError, "notabool", False, False, False, None, None, None), + (TypeError, False, "notabool", False, False, None, None, None), + (TypeError, False, False, "notabool", False, None, None, None), + (TypeError, False, False, False, "notabool", None, None, None), (ValueError, True, True, False, False, None, None, None), (ValueError, False, False, True, True, None, None, None), (ValueError, False, False, False, False, None, None, None), - ] + ], ) - def test_invalid_init(self, error, only_contains_user_certs, - only_contains_ca_certs, indirect_crl, - only_contains_attribute_certs, only_some_reasons, - full_name, relative_name): + def test_invalid_init( + self, + error, + only_contains_user_certs, + only_contains_ca_certs, + indirect_crl, + only_contains_attribute_certs, + only_some_reasons, + full_name, + relative_name, + ): with pytest.raises(error): x509.IssuingDistributionPoint( - full_name, relative_name, only_contains_user_certs, - only_contains_ca_certs, only_some_reasons, indirect_crl, - only_contains_attribute_certs + full_name, + relative_name, + only_contains_user_certs, + only_contains_ca_certs, + only_some_reasons, + indirect_crl, + only_contains_attribute_certs, ) def test_repr(self): idp = x509.IssuingDistributionPoint( - None, None, False, False, - frozenset([x509.ReasonFlags.key_compromise]), False, False + None, + None, + False, + False, + frozenset([x509.ReasonFlags.key_compromise]), + False, + False, ) if not six.PY2: assert repr(idp) == ( @@ -4952,10 +5186,13 @@ def test_eq(self): only_contains_attribute_certs=False, only_some_reasons=None, full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") - ]) + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), ) idp2 = x509.IssuingDistributionPoint( only_contains_user_certs=False, @@ -4964,10 +5201,13 @@ def test_eq(self): only_contains_attribute_certs=False, only_some_reasons=None, full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") - ]) + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), ) assert idp1 == idp2 @@ -4979,10 +5219,13 @@ def test_ne(self): only_contains_attribute_certs=False, only_some_reasons=None, full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") - ]) + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), ) idp2 = x509.IssuingDistributionPoint( only_contains_user_certs=True, @@ -4991,10 +5234,13 @@ def test_ne(self): only_contains_attribute_certs=False, only_some_reasons=None, full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") - ]) + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), ) assert idp1 != idp2 assert idp1 != object() @@ -5008,11 +5254,18 @@ def test_hash(self): ) idp3 = x509.IssuingDistributionPoint( None, - x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA") - ]), - True, False, None, False, False + x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), + True, + False, + None, + False, + False, ) assert hash(idp1) == hash(idp2) assert hash(idp1) != hash(idp3) @@ -5076,11 +5329,13 @@ def test_hash(self): ), x509.IssuingDistributionPoint( full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" - ) - ]), + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), only_contains_user_certs=False, only_contains_ca_certs=True, only_some_reasons=None, @@ -5098,53 +5353,65 @@ def test_hash(self): ), x509.IssuingDistributionPoint( full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA"), - x509.NameAttribute( - oid=x509.NameOID.COMMON_NAME, value=u"cryptography") - ]), + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ), + x509.NameAttribute( + oid=x509.NameOID.COMMON_NAME, value=u"cryptography" + ), + ] + ), only_contains_user_certs=True, only_contains_ca_certs=False, - only_some_reasons=frozenset([ - x509.ReasonFlags.key_compromise, - x509.ReasonFlags.ca_compromise, - x509.ReasonFlags.affiliation_changed, - x509.ReasonFlags.privilege_withdrawn, - x509.ReasonFlags.aa_compromise, - ]), + only_some_reasons=frozenset( + [ + x509.ReasonFlags.key_compromise, + x509.ReasonFlags.ca_compromise, + x509.ReasonFlags.affiliation_changed, + x509.ReasonFlags.privilege_withdrawn, + x509.ReasonFlags.aa_compromise, + ] + ), indirect_crl=False, only_contains_attribute_certs=False, ), x509.IssuingDistributionPoint( full_name=None, - relative_name=x509.RelativeDistinguishedName([ - x509.NameAttribute( - oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" - ) - ]), + relative_name=x509.RelativeDistinguishedName( + [ + x509.NameAttribute( + oid=x509.NameOID.ORGANIZATION_NAME, value=u"PyCA" + ) + ] + ), only_contains_user_certs=False, only_contains_ca_certs=False, only_some_reasons=None, indirect_crl=False, only_contains_attribute_certs=False, ), - ] + ], ) def test_generate(self, idp, backend): key = RSA_KEY_2048.private_key(backend) last_update = datetime.datetime(2002, 1, 1, 12, 1) next_update = datetime.datetime(2030, 1, 1, 12, 1) - builder = x509.CertificateRevocationListBuilder().issuer_name( - x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u"cryptography.io CA") - ]) - ).last_update( - last_update - ).next_update( - next_update - ).add_extension( - idp, True + builder = ( + x509.CertificateRevocationListBuilder() + .issuer_name( + x509.Name( + [ + x509.NameAttribute( + NameOID.COMMON_NAME, u"cryptography.io CA" + ) + ] + ) + ) + .last_update(last_update) + .next_update(next_update) + .add_extension(idp, True) ) crl = builder.sign(key, hashes.SHA256(), backend) @@ -5162,7 +5429,7 @@ def test_load(self, backend): cert = _load_cert( os.path.join("x509", "cryptography.io.precert.pem"), x509.load_pem_x509_certificate, - backend + backend, ) poison = cert.extensions.get_extension_for_oid( ExtensionOID.PRECERT_POISON @@ -5175,9 +5442,11 @@ def test_load(self, backend): def test_generate(self, backend): private_key = RSA_KEY_2048.private_key(backend) - cert = _make_certbuilder(private_key).add_extension( - x509.PrecertPoison(), critical=True - ).sign(private_key, hashes.SHA256(), backend) + cert = ( + _make_certbuilder(private_key) + .add_extension(x509.PrecertPoison(), critical=True) + .sign(private_key, hashes.SHA256(), backend) + ) poison = cert.extensions.get_extension_for_oid( ExtensionOID.PRECERT_POISON ).value @@ -5206,7 +5475,7 @@ def test_ne(self): def test_repr(self): pcp = x509.PrecertPoison() - assert repr(pcp) == '' + assert repr(pcp) == "" @pytest.mark.requires_backend_interface(interface=RSABackend) @@ -5214,76 +5483,107 @@ def test_repr(self): class TestSignedCertificateTimestamps(object): @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_eq(self, backend): - sct = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] - sct2 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] + sct = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) + sct2 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) assert sct == sct2 @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_ne(self, backend): - sct = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] - sct2 = _load_cert( - os.path.join("x509", "cryptography-scts.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] + sct = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) + sct2 = ( + _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) assert sct != sct2 assert sct != object() @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_hash(self, backend): - sct = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] - sct2 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] - sct3 = _load_cert( - os.path.join("x509", "cryptography-scts.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value[0] + sct = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) + sct2 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) + sct3 = ( + _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value[0] + ) assert hash(sct) == hash(sct2) assert hash(sct) != hash(sct3) @@ -5302,89 +5602,121 @@ def test_repr(self): @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_eq(self, backend): - psct1 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value - psct2 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value + psct1 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) + psct2 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) assert psct1 == psct2 @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_ne(self, backend): - psct1 = _load_cert( - os.path.join("x509", "cryptography-scts.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value - psct2 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value + psct1 = ( + _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) + psct2 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) assert psct1 != psct2 assert psct1 != object() @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_hash(self, backend): - psct1 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value - psct2 = _load_cert( - os.path.join("x509", "badssl-sct.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value - psct3 = _load_cert( - os.path.join("x509", "cryptography-scts.pem"), - x509.load_pem_x509_certificate, - backend - ).extensions.get_extension_for_class( - x509.PrecertificateSignedCertificateTimestamps - ).value + psct1 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) + psct2 = ( + _load_cert( + os.path.join("x509", "badssl-sct.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) + psct3 = ( + _load_cert( + os.path.join("x509", "cryptography-scts.pem"), + x509.load_pem_x509_certificate, + backend, + ) + .extensions.get_extension_for_class( + x509.PrecertificateSignedCertificateTimestamps + ) + .value + ) assert hash(psct1) == hash(psct2) assert hash(psct1) != hash(psct3) @pytest.mark.supported( only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER), + backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER + ), skip_message="Requires OpenSSL 1.1.0f+", ) def test_simple(self, backend): cert = _load_cert( os.path.join("x509", "badssl-sct.pem"), x509.load_pem_x509_certificate, - backend + backend, ) scts = cert.extensions.get_extension_for_class( x509.PrecertificateSignedCertificateTimestamps @@ -5401,20 +5733,21 @@ def test_simple(self, backend): 2016, 11, 17, 1, 56, 25, 396000 ) assert ( - sct.entry_type == - x509.certificate_transparency.LogEntryType.PRE_CERTIFICATE + sct.entry_type + == x509.certificate_transparency.LogEntryType.PRE_CERTIFICATE ) @pytest.mark.supported( only_if=lambda backend: ( - not backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER), + not backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER + ), skip_message="Requires OpenSSL < 1.1.0", ) def test_skips_scts_if_unsupported(self, backend): cert = _load_cert( os.path.join("x509", "badssl-sct.pem"), x509.load_pem_x509_certificate, - backend + backend, ) assert len(cert.extensions) == 10 with pytest.raises(x509.ExtensionNotFound): @@ -5433,11 +5766,9 @@ def test_skips_scts_if_unsupported(self, backend): class TestInvalidExtension(object): def test_invalid_certificate_policies_data(self, backend): cert = _load_cert( - os.path.join( - "x509", "custom", "cp_invalid.pem" - ), + os.path.join("x509", "custom", "cp_invalid.pem"), x509.load_pem_x509_certificate, - backend + backend, ) with pytest.raises(ValueError): cert.extensions @@ -5476,6 +5807,6 @@ def test_hash(self): def test_all_extension_oid_members_have_names_defined(): for oid in dir(ExtensionOID): - if oid.startswith('__'): + if oid.startswith("__"): continue assert getattr(ExtensionOID, oid) in _OID_NAMES diff --git a/tests/x509/test_x509_revokedcertbuilder.py b/tests/x509/test_x509_revokedcertbuilder.py index 75c6b2697180..0db6d2a6f7de 100644 --- a/tests/x509/test_x509_revokedcertbuilder.py +++ b/tests/x509/test_x509_revokedcertbuilder.py @@ -30,10 +30,10 @@ def test_serial_number_must_be_positive(self): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_minimal_serial_number(self, backend): revocation_date = datetime.datetime(2002, 1, 1, 12, 1) - builder = x509.RevokedCertificateBuilder().serial_number( - 1 - ).revocation_date( - revocation_date + builder = ( + x509.RevokedCertificateBuilder() + .serial_number(1) + .revocation_date(revocation_date) ) revoked_certificate = builder.build(backend) @@ -42,10 +42,10 @@ def test_minimal_serial_number(self, backend): @pytest.mark.requires_backend_interface(interface=X509Backend) def test_biggest_serial_number(self, backend): revocation_date = datetime.datetime(2002, 1, 1, 12, 1) - builder = x509.RevokedCertificateBuilder().serial_number( - (1 << 159) - 1 - ).revocation_date( - revocation_date + builder = ( + x509.RevokedCertificateBuilder() + .serial_number((1 << 159) - 1) + .revocation_date(revocation_date) ) revoked_certificate = builder.build(backend) @@ -67,10 +67,10 @@ def test_aware_revocation_date(self, backend): time = tz.localize(time) utc_time = datetime.datetime(2012, 1, 17, 6, 43) serial_number = 333 - builder = x509.RevokedCertificateBuilder().serial_number( - serial_number - ).revocation_date( - time + builder = ( + x509.RevokedCertificateBuilder() + .serial_number(serial_number) + .revocation_date(time) ) revoked_certificate = builder.build(backend) @@ -129,10 +129,10 @@ def test_no_revocation_date(self, backend): def test_create_revoked(self, backend): serial_number = 333 revocation_date = datetime.datetime(2002, 1, 1, 12, 1) - builder = x509.RevokedCertificateBuilder().serial_number( - serial_number - ).revocation_date( - revocation_date + builder = ( + x509.RevokedCertificateBuilder() + .serial_number(serial_number) + .revocation_date(revocation_date) ) revoked_certificate = builder.build(backend) @@ -145,21 +145,18 @@ def test_create_revoked(self, backend): [ x509.InvalidityDate(datetime.datetime(2015, 1, 1, 0, 0)), x509.CRLReason(x509.ReasonFlags.ca_compromise), - x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), - ]) - ] + x509.CertificateIssuer([x509.DNSName(u"cryptography.io")]), + ], ) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_add_extensions(self, backend, extension): serial_number = 333 revocation_date = datetime.datetime(2002, 1, 1, 12, 1) - builder = x509.RevokedCertificateBuilder().serial_number( - serial_number - ).revocation_date( - revocation_date - ).add_extension( - extension, False + builder = ( + x509.RevokedCertificateBuilder() + .serial_number(serial_number) + .revocation_date(revocation_date) + .add_extension(extension, False) ) revoked_certificate = builder.build(backend) @@ -179,20 +176,17 @@ def test_add_multiple_extensions(self, backend): invalidity_date = x509.InvalidityDate( datetime.datetime(2015, 1, 1, 0, 0) ) - certificate_issuer = x509.CertificateIssuer([ - x509.DNSName(u"cryptography.io"), - ]) + certificate_issuer = x509.CertificateIssuer( + [x509.DNSName(u"cryptography.io")] + ) crl_reason = x509.CRLReason(x509.ReasonFlags.aa_compromise) - builder = x509.RevokedCertificateBuilder().serial_number( - serial_number - ).revocation_date( - revocation_date - ).add_extension( - invalidity_date, True - ).add_extension( - crl_reason, True - ).add_extension( - certificate_issuer, True + builder = ( + x509.RevokedCertificateBuilder() + .serial_number(serial_number) + .revocation_date(revocation_date) + .add_extension(invalidity_date, True) + .add_extension(crl_reason, True) + .add_extension(certificate_issuer, True) ) revoked_certificate = builder.build(backend) diff --git a/tox.ini b/tox.ini index 989adf6ccc3b..239f2467c1cc 100644 --- a/tox.ini +++ b/tox.ini @@ -66,6 +66,7 @@ extras = pep8test commands = flake8 . + black --check . [testenv:packaging] deps = @@ -74,7 +75,7 @@ commands = check-manifest [flake8] -ignore = W504 +ignore = E203,E211,W503,W504 exclude = .tox,*.egg,.git,_build,.hypothesis select = E,W,F,N,I application-import-names = cryptography,cryptography_vectors,tests diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 420632e6e4f2..05cfe30d989f 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -5,8 +5,14 @@ from __future__ import absolute_import, division, print_function __all__ = [ - "__title__", "__summary__", "__uri__", "__version__", "__author__", - "__email__", "__license__", "__copyright__", + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", ] __title__ = "cryptography_vectors" diff --git a/vectors/cryptography_vectors/__init__.py b/vectors/cryptography_vectors/__init__.py index abcfe14c2f0a..f39ffe03ab0c 100644 --- a/vectors/cryptography_vectors/__init__.py +++ b/vectors/cryptography_vectors/__init__.py @@ -7,14 +7,26 @@ import os from cryptography_vectors.__about__ import ( - __author__, __copyright__, __email__, __license__, __summary__, __title__, - __uri__, __version__ + __author__, + __copyright__, + __email__, + __license__, + __summary__, + __title__, + __uri__, + __version__, ) __all__ = [ - "__title__", "__summary__", "__uri__", "__version__", "__author__", - "__email__", "__license__", "__copyright__", + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", ] diff --git a/vectors/setup.py b/vectors/setup.py index bf02e389fffe..482c01b35a8f 100644 --- a/vectors/setup.py +++ b/vectors/setup.py @@ -15,20 +15,18 @@ about = {} with open(os.path.join(base_dir, "cryptography_vectors", "__about__.py")) as f: - exec(f.read(), about) + exec (f.read(), about) setup( name=about["__title__"], version=about["__version__"], - description=about["__summary__"], license=about["__license__"], url=about["__uri__"], author=about["__author__"], author_email=about["__email__"], - packages=find_packages(), zip_safe=False, - include_package_data=True + include_package_data=True, ) From 6bd3faa114da01a2af1970251e5d5236041022a0 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 20 Jul 2020 16:16:29 -0400 Subject: [PATCH 877/988] Tell people to use black in our dev docs (#5328) * Tell people to use black in our dev docs * For codecov --- docs/development/submitting-patches.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/development/submitting-patches.rst b/docs/development/submitting-patches.rst index ac1986a33004..11281b525464 100644 --- a/docs/development/submitting-patches.rst +++ b/docs/development/submitting-patches.rst @@ -19,9 +19,10 @@ Code ---- When in doubt, refer to :pep:`8` for Python code. You can check if your code -meets our automated requirements by running ``flake8`` against it. If you've -installed the development requirements this will automatically use our -configuration. You can also run the ``tox`` job with ``tox -e pep8``. +meets our automated requirements by formatting it with ``black`` and running +``flake8`` against it. If you've installed the development requirements this +will automatically use our configuration. You can also run the ``tox`` job with +``tox -e pep8``. `Write comments as complete sentences.`_ From b0d9bdcfc9659fffcb1d539cb00130f8fda3d011 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 20 Jul 2020 15:16:47 -0500 Subject: [PATCH 878/988] prep 3.0 for release (#5327) * prep 3.0 for release * okay then --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index efec7d08547b..abb373b10047 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v3-0: -3.0 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +3.0 - 2020-07-20 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Removed support for passing an :class:`~cryptography.x509.Extension` instance to diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 54292526a831..c28f6950a9ed 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -22,7 +22,7 @@ ) __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.0.dev1" +__version__ = "3.0" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 05cfe30d989f..8b25ee489156 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -20,7 +20,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.0.dev1" +__version__ = "3.0" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 03bf8906d53799ca278102abeddde4bde7a9d2e4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 20 Jul 2020 18:05:54 -0500 Subject: [PATCH 879/988] 3.1 time (#5330) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index abb373b10047..ae6df225e65e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v3-1: + +3.1 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v3-0: 3.0 - 2020-07-20 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index c28f6950a9ed..1b3cd70acb16 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -22,7 +22,7 @@ ) __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.0" +__version__ = "3.1.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 8b25ee489156..86ac18f18595 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -20,7 +20,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.0" +__version__ = "3.1.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 274f6af443b0ff6d9df408855f98edff61828119 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 20 Jul 2020 20:59:53 -0400 Subject: [PATCH 880/988] Delete several unused bindings (#5331) --- src/_cffi_src/openssl/crypto.py | 2 -- src/_cffi_src/openssl/pkcs7.py | 16 ---------------- src/_cffi_src/openssl/ssl.py | 16 ---------------- 3 files changed, 34 deletions(-) diff --git a/src/_cffi_src/openssl/crypto.py b/src/_cffi_src/openssl/crypto.py index d88354420530..28d513d56387 100644 --- a/src/_cffi_src/openssl/crypto.py +++ b/src/_cffi_src/openssl/crypto.py @@ -30,8 +30,6 @@ """ FUNCTIONS = """ -int CRYPTO_mem_ctrl(int); - void OPENSSL_cleanup(void); /* as of 1.1.0 OpenSSL does its own locking *angelic chorus*. This function diff --git a/src/_cffi_src/openssl/pkcs7.py b/src/_cffi_src/openssl/pkcs7.py index 1bece5b7ef09..7486248e0ebe 100644 --- a/src/_cffi_src/openssl/pkcs7.py +++ b/src/_cffi_src/openssl/pkcs7.py @@ -54,24 +54,8 @@ """ FUNCTIONS = """ -PKCS7 *SMIME_read_PKCS7(BIO *, BIO **); -int SMIME_write_PKCS7(BIO *, PKCS7 *, BIO *, int); - void PKCS7_free(PKCS7 *); -PKCS7 *PKCS7_sign(X509 *, EVP_PKEY *, Cryptography_STACK_OF_X509 *, - BIO *, int); -int PKCS7_verify(PKCS7 *, Cryptography_STACK_OF_X509 *, X509_STORE *, BIO *, - BIO *, int); -Cryptography_STACK_OF_X509 *PKCS7_get0_signers(PKCS7 *, - Cryptography_STACK_OF_X509 *, - int); - -PKCS7 *PKCS7_encrypt(Cryptography_STACK_OF_X509 *, BIO *, - const EVP_CIPHER *, int); -int PKCS7_decrypt(PKCS7 *, EVP_PKEY *, X509 *, BIO *, int); - -BIO *PKCS7_dataInit(PKCS7 *, BIO *); int PKCS7_type_is_encrypted(PKCS7 *); int PKCS7_type_is_signed(PKCS7 *); int PKCS7_type_is_enveloped(PKCS7 *); diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index a00a0595bddc..ba04572e1f10 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -23,7 +23,6 @@ static const long Cryptography_HAS_TLSEXT_STATUS_REQ_CB; static const long Cryptography_HAS_STATUS_REQ_OCSP_RESP; static const long Cryptography_HAS_TLSEXT_STATUS_REQ_TYPE; -static const long Cryptography_HAS_SSL_CTX_SET_CLIENT_CERT_ENGINE; static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS; static const long Cryptography_HAS_DTLS; static const long Cryptography_HAS_SIGALGS; @@ -331,10 +330,6 @@ int SSL_SESSION_has_ticket(const SSL_SESSION *); long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *); -/* not a macro, but older OpenSSLs don't pass the args as const */ -char *SSL_CIPHER_description(const SSL_CIPHER *, char *, int); -int SSL_SESSION_print(BIO *, const SSL_SESSION *); - /* not macros, but will be conditionally bound so can't live in functions */ const COMP_METHOD *SSL_get_current_compression(SSL *); const COMP_METHOD *SSL_get_current_expansion(SSL *); @@ -468,9 +463,6 @@ void SSL_CTX_set_cert_cb(SSL_CTX *, int (*)(SSL *, void *), void *); void SSL_set_cert_cb(SSL *, int (*)(SSL *, void *), void *); -/* Added in 1.0.2 */ -const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *); - int SSL_SESSION_set1_id_context(SSL_SESSION *, const unsigned char *, unsigned int); /* Added in 1.1.0 for the great opaquing of structs */ @@ -541,12 +533,6 @@ """ CUSTOMIZATIONS = """ -#if CRYPTOGRAPHY_IS_LIBRESSL -const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx) { - return ctx->method; -} -#endif - #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 static const long Cryptography_HAS_VERIFIED_CHAIN = 0; Cryptography_STACK_OF_X509 *(*SSL_get0_verified_chain)(const SSL *) = NULL; @@ -668,8 +654,6 @@ static const long Cryptography_HAS_COMPRESSION = 1; #endif -static const long Cryptography_HAS_SSL_CTX_SET_CLIENT_CERT_ENGINE = 1; - static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS = 1; /* in OpenSSL 1.1.0 the SSL_ST values were renamed to TLS_ST and several were From 82da2316f1e5d18d02b2ab5ed7353a020f2ccaa1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 20 Jul 2020 21:08:16 -0400 Subject: [PATCH 881/988] fixes #5329 -- properly run CI on x.y tags (#5332) --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a91b52ce837..2b0b89c4cc8a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: - master - '*.*.x' tags: + - '*.*' - '*.*.*' jobs: From f7bc5ef7c3e585662c0c29ba9478995c6630e5bd Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 20 Jul 2020 22:58:57 -0400 Subject: [PATCH 882/988] fixes #5321 -- deprecate support for OpenSSL 1.0.2 (#5333) --- CHANGELOG.rst | 5 +++++ docs/installation.rst | 4 ++++ src/_cffi_src/openssl/cryptography.py | 1 + .../hazmat/bindings/openssl/binding.py | 16 ++++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ae6df225e65e..025fa3658fec 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,11 @@ Changelog .. note:: This version is not yet released and is under active development. +* Deprecated OpenSSL 1.0.2 support. OpenSSL 1.0.2 is no longer supported by + the OpenSSL project. At this time there is no time table for dropping + support, however we strongly encourage all users to upgrade or install + ``cryptography`` from a wheel. + .. _v3-0: 3.0 - 2020-07-20 diff --git a/docs/installation.rst b/docs/installation.rst index 4fec22972f65..388eb6b15465 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -29,6 +29,10 @@ OpenSSL releases: * ``OpenSSL 1.1.0-latest`` * ``OpenSSL 1.1.1-latest`` +.. warning:: + + Cryptography 3.1 has deprecated support for OpenSSL 1.0.2. + Building cryptography on Windows -------------------------------- diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index 369c23c74a5c..bae7da3ad199 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -66,6 +66,7 @@ static const int CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I; +static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_110; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111; static const int CRYPTOGRAPHY_OPENSSL_LESS_THAN_111B; static const int CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE; diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index fbe5ca9a5dad..398cfd55a813 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -7,6 +7,7 @@ import collections import threading import types +import warnings import cryptography from cryptography import utils @@ -153,6 +154,19 @@ def init_static_locks(cls): _openssl_assert(cls.lib, res == 1) +def _verify_openssl_version(lib): + if ( + lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 + and not lib.CRYPTOGRAPHY_IS_LIBRESSL + ): + warnings.warn( + "OpenSSL version 1.0.2 is no longer supported by the OpenSSL " + "project, please upgrade. A future version of cryptography will " + "drop support for it.", + utils.CryptographyDeprecationWarning, + ) + + def _verify_package_version(version): # Occasionally we run into situations where the version of the Python # package does not match the version of the shared object that is loaded. @@ -182,3 +196,5 @@ def _verify_package_version(version): # condition registering the OpenSSL locks. On Python 3.4+ the import lock # is per module so this approach will not work. Binding.init_static_locks() + +_verify_openssl_version(Binding.lib) From 56391ad537829ff981a3008e2d0c03a465e0d44c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 20 Jul 2020 23:11:38 -0400 Subject: [PATCH 883/988] Remove from nonsense from travis script that I think is unused (#5334) --- .travis/run.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis/run.sh b/.travis/run.sh index 53065609b54a..19bb8b568b29 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -2,11 +2,6 @@ SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") -if [[ "${TOXENV}" == "pypy" ]]; then - PYENV_ROOT="$HOME/.pyenv" - PATH="$PYENV_ROOT/bin:$PATH" - eval "$(pyenv init -)" -fi if [ -n "${LIBRESSL}" ]; then LIBRESSL_DIR="ossl-2/${LIBRESSL}" export CFLAGS="-Werror -Wno-error=deprecated-declarations -Wno-error=discarded-qualifiers -Wno-error=unused-function -I$HOME/$LIBRESSL_DIR/include" From c3a5e082c5473d82682f02a37c9d58607f718a3b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 21 Jul 2020 12:36:08 -0400 Subject: [PATCH 884/988] fixed copyright year (#5337) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 91bdf25f135c..87e2b5869c6c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -71,7 +71,7 @@ # General information about the project. project = "Cryptography" -copyright = "2013-2017, Individual Contributors" +copyright = "2013-2020, Individual Contributors" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From 73b128d7550ee95cec33b9587cddf8ad21d2f02d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 24 Jul 2020 20:16:44 -0400 Subject: [PATCH 885/988] Refs #5113 -- build against openssl with no ct (#5343) --- .travis.yml | 2 +- src/_cffi_src/openssl/ct.py | 9 +++- .../hazmat/backends/openssl/ocsp.py | 2 +- .../hazmat/backends/openssl/x509.py | 2 +- tests/x509/test_ocsp.py | 24 ++++------- tests/x509/test_x509_ext.py | 42 +++++++------------ 6 files changed, 32 insertions(+), 49 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9c203101ae4e..fe374101ce8a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ matrix: - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.1g - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2" + env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2 no-ct" - python: 3.8 env: TOXENV=py38-ssh OPENSSL=1.1.1g - python: 3.8 diff --git a/src/_cffi_src/openssl/ct.py b/src/_cffi_src/openssl/ct.py index 71125dd17e09..162004a8da73 100644 --- a/src/_cffi_src/openssl/ct.py +++ b/src/_cffi_src/openssl/ct.py @@ -5,7 +5,7 @@ from __future__ import absolute_import, division, print_function INCLUDES = """ -#if CRYPTOGRAPHY_OPENSSL_110_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER && !defined(OPENSSL_NO_CT) #include typedef STACK_OF(SCT) Cryptography_STACK_OF_SCT; @@ -65,7 +65,7 @@ """ CUSTOMIZATIONS = """ -#if CRYPTOGRAPHY_OPENSSL_110_OR_GREATER +#if CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER && !defined(OPENSSL_NO_CT) static const long Cryptography_HAS_SCT = 1; #else static const long Cryptography_HAS_SCT = 0; @@ -85,7 +85,12 @@ SCT_SOURCE_X509V3_EXTENSION, SCT_SOURCE_OCSP_STAPLED_RESPONSE } sct_source_t; + +/* OpenSSL compiled with `no-ct` still defines the `SCT` struct. */ +#if !defined(OPENSSL_NO_CT) typedef void SCT; +#endif + typedef void Cryptography_STACK_OF_SCT; sct_version_t (*SCT_get_version)(const SCT *) = NULL; diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index 1de75a26ca64..c432e222c259 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -345,7 +345,7 @@ def extensions(self): @utils.cached_property @_requires_successful_response def single_extensions(self): - if self._backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER: + if self._backend._lib.Cryptography_HAS_SCT: return _OCSP_SINGLERESP_EXT_PARSER.parse( self._backend, self._single ) diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index ce643254f2a6..1ebb6946892f 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -133,7 +133,7 @@ def signature_algorithm_oid(self): @utils.cached_property def extensions(self): - if self._backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER: + if self._backend._lib.Cryptography_HAS_SCT: return _CERTIFICATE_EXTENSION_PARSER.parse( self._backend, self._x509 ) diff --git a/tests/x509/test_ocsp.py b/tests/x509/test_ocsp.py index 5816718a087e..b64940242905 100644 --- a/tests/x509/test_ocsp.py +++ b/tests/x509/test_ocsp.py @@ -710,10 +710,8 @@ def test_repr(self): ) @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_eq(self, backend): sct1 = ( @@ -739,10 +737,8 @@ def test_eq(self, backend): assert sct1 == sct2 @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_ne(self, backend): sct1 = ( @@ -760,10 +756,8 @@ def test_ne(self, backend): assert sct1 != object() @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_hash(self, backend): sct1 = ( @@ -992,10 +986,8 @@ def test_invalid_serialize_encoding(self): resp.public_bytes(serialization.Encoding.PEM) @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_single_extensions_sct(self, backend): resp = _load_data( diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 850a8b1a2257..b50a73895872 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -5482,10 +5482,8 @@ def test_repr(self): @pytest.mark.requires_backend_interface(interface=X509Backend) class TestSignedCertificateTimestamps(object): @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_eq(self, backend): sct = ( @@ -5513,10 +5511,8 @@ def test_eq(self, backend): assert sct == sct2 @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_ne(self, backend): sct = ( @@ -5545,10 +5541,8 @@ def test_ne(self, backend): assert sct != object() @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_hash(self, backend): sct = ( @@ -5601,10 +5595,8 @@ def test_repr(self): ) @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_eq(self, backend): psct1 = ( @@ -5632,10 +5624,8 @@ def test_eq(self, backend): assert psct1 == psct2 @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_ne(self, backend): psct1 = ( @@ -5664,10 +5654,8 @@ def test_ne(self, backend): assert psct1 != object() @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_hash(self, backend): psct1 = ( @@ -5707,10 +5695,8 @@ def test_hash(self, backend): assert hash(psct1) != hash(psct3) @pytest.mark.supported( - only_if=lambda backend: ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER - ), - skip_message="Requires OpenSSL 1.1.0f+", + only_if=lambda backend: (backend._lib.Cryptography_HAS_SCT), + skip_message="Requires CT support", ) def test_simple(self, backend): cert = _load_cert( From ec64843db4c4963658084c4d01307c4b50cb8740 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 24 Jul 2020 23:02:37 -0400 Subject: [PATCH 886/988] Lock old issues+PRs automatically (#5342) --- .github/workflows/lock.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/lock.yml diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml new file mode 100644 index 000000000000..7356bd4af3f9 --- /dev/null +++ b/.github/workflows/lock.yml @@ -0,0 +1,14 @@ +name: Lock Issues +on: + schedule: + - cron: '0 0 * * *' + +jobs: + lock: + runs-on: ubuntu-latest + steps: + - uses: dessant/lock-threads@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + issue-lock-inactive-days: 90 + pr-lock-inactive-days: 90 From 2329b415459eb0e7d177b782a93ed4704d679e98 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 25 Jul 2020 13:02:11 -0500 Subject: [PATCH 887/988] remove 4 OCSP bindings we don't use (#5344) --- src/_cffi_src/openssl/ocsp.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/_cffi_src/openssl/ocsp.py b/src/_cffi_src/openssl/ocsp.py index 829314a32563..f1a8bf617941 100644 --- a/src/_cffi_src/openssl/ocsp.py +++ b/src/_cffi_src/openssl/ocsp.py @@ -46,8 +46,6 @@ X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *, int); int OCSP_request_onereq_count(OCSP_REQUEST *); OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *, int); -int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *); -X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *, int); OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *); OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *, OCSP_CERTID *); OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *, const X509 *, const X509 *); @@ -59,7 +57,6 @@ OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *, OCSP_CERTID *, int, int, ASN1_TIME *, ASN1_TIME *, ASN1_TIME *); -int OCSP_basic_add1_nonce(OCSP_BASICRESP *, unsigned char *, int); int OCSP_basic_add1_cert(OCSP_BASICRESP *, X509 *); int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *, X509_EXTENSION *, int); int OCSP_basic_sign(OCSP_BASICRESP *, X509 *, EVP_PKEY *, const EVP_MD *, @@ -69,7 +66,6 @@ OCSP_REQUEST *OCSP_REQUEST_new(void); void OCSP_REQUEST_free(OCSP_REQUEST *); -int OCSP_request_add1_nonce(OCSP_REQUEST *, unsigned char *, int); int OCSP_REQUEST_add_ext(OCSP_REQUEST *, X509_EXTENSION *, int); int OCSP_id_get0_info(ASN1_OCTET_STRING **, ASN1_OBJECT **, ASN1_OCTET_STRING **, ASN1_INTEGER **, OCSP_CERTID *); From a58c3d809a654bf0abf4a35d2bd934d4a2d63e67 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Sun, 26 Jul 2020 02:29:01 +0200 Subject: [PATCH 888/988] Emit the deprecation one level up the stack (#5348) Ref: https://github.com/pyca/cryptography/issues/5335#issuecomment-661880248 --- src/cryptography/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index b666506386b1..f128502e2fd5 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -37,4 +37,5 @@ "it is now deprecated in cryptography, and will be removed in a " "future release.", CryptographyDeprecationWarning, + stacklevel=2, ) From b1250e451974cfad35dc1d3770a303018b956b8d Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Sun, 26 Jul 2020 03:32:58 +0200 Subject: [PATCH 889/988] Add deprecation warning handling advice note (#5346) * Add deprecation warning handling advice note This tip is being added to help the library maintainers keep testing cryptography where supporting multiple Python runtime is still necessary. Resolves https://github.com/pyca/cryptography/issues/5335 * Move deprecation suppression advice to FAQ --- CHANGELOG.rst | 4 ++++ docs/faq.rst | 27 +++++++++++++++++++++++++++ docs/spelling_wordlist.txt | 2 ++ 3 files changed, 33 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 025fa3658fec..213b706b5dd6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,6 +37,10 @@ Changelog actually dropping support, however we strongly encourage all users to upgrade their Python, as Python 2 no longer receives support from the Python core team. + + If you have trouble suppressing this warning, please, check out :ref:`an FAQ + entry about addressing this issue `. + * Added support for ``OpenSSH`` serialization format for ``ec``, ``ed25519``, ``rsa`` and ``dsa`` private keys: :func:`~cryptography.hazmat.primitives.serialization.load_ssh_private_key` diff --git a/docs/faq.rst b/docs/faq.rst index 38a895d84db5..341dba343c96 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -1,6 +1,33 @@ Frequently asked questions ========================== +.. _faq-howto-handle-deprecation-warning: + +I cannot suppress the deprecation warning that ``cryptography`` emits on import +------------------------------------------------------------------------------- + +.. hint:: + + The deprecation warning emitted on import does not inherit + :py:exc:`DeprecationWarning` but inherits :py:exc:`UserWarning` + instead. + +If your pytest setup follows the best practices of failing on +emitted warnings (``filterwarnings = error``), you may ignore it +by adding the following line at the end of the list:: + + ignore:Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in a future release.:UserWarning:cryptography + +**Note:** Using ``cryptography.utils.CryptographyDeprecationWarning`` +is not possible here because specifying it triggers +``import cryptography`` internally that emits the warning before +the ignore rule even kicks in. + +Ref: https://github.com/pytest-dev/pytest/issues/7524 + +The same applies when you use :py:func:`~warnings.filterwarnings` in +your code or invoke CPython with :std:option:`-W` command line option. + ``cryptography`` failed to install! ----------------------------------- diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 68711533b404..7488ccdf2575 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -19,6 +19,7 @@ codebook committer committers conda +CPython Cryptanalysis crypto cryptographic @@ -88,6 +89,7 @@ preprocessors presentational pseudorandom pyOpenSSL +pytest relicensed responder runtime From b44f6819cca420a1209869c4aee0135af30928d0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 25 Jul 2020 21:39:09 -0500 Subject: [PATCH 890/988] slight language tweaks for the py2 warning link (#5349) --- CHANGELOG.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 213b706b5dd6..22b8983f9d52 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -38,8 +38,8 @@ Changelog their Python, as Python 2 no longer receives support from the Python core team. - If you have trouble suppressing this warning, please, check out :ref:`an FAQ - entry about addressing this issue `. + If you have trouble suppressing this warning in tests view the :ref:`FAQ + entry addressing this issue `. * Added support for ``OpenSSH`` serialization format for ``ec``, ``ed25519``, ``rsa`` and ``dsa`` private keys: From ff0de1dec51c93a3e99e8ce56a17a19aeaf754c4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 26 Jul 2020 00:12:18 -0500 Subject: [PATCH 891/988] upgrade pypy/pypy3 in CI (#5350) --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index fe374101ce8a..e1c01f6e1606 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,12 +25,12 @@ matrix: env: TOXENV=py36 - python: 3.8 env: TOXENV=py38-idna - - python: pypy2.7-7.1.1 - # I don't know how to enumerate pypy versions in Travis other than to look at - # https://github.com/travis-ci/travis-nightly-builder/blob/build/Rakefile#L74-L106 + # Travis lists available Pythons (including PyPy) by arch and distro here: + # https://docs.travis-ci.com/user/languages/python/#python-versions + - python: pypy2.7-7.3.1 env: TOXENV=pypy-nocoverage dist: xenial - - python: pypy3.6-7.2.0 + - python: pypy3.6-7.3.1 env: TOXENV=pypy3-nocoverage - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l From 442926c60cdf4343028e47d5bfd92d97b98e1429 Mon Sep 17 00:00:00 2001 From: omnigrok Date: Sun, 26 Jul 2020 07:50:20 -0700 Subject: [PATCH 892/988] fixes #5113 - Making some SRTP related symbols conditional on OPENSSL_NO_SRTP (#5338) * fixes #5113 - Making some SRTP related symbols conditional on OPENSSL_NO_SRTP. * don't remove one symbol, test with no-srtp * test against a no-srtp build Co-authored-by: Paul Kehrer --- .travis.yml | 2 +- src/_cffi_src/openssl/ssl.py | 10 ++++++++++ .../hazmat/bindings/openssl/_conditional.py | 9 +++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e1c01f6e1606..61c0b71fa6da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ matrix: - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.1g - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2 no-ct" + env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2 no-srtp no-ct" - python: 3.8 env: TOXENV=py38-ssh OPENSSL=1.1.1g - python: 3.8 diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index ba04572e1f10..8b73dbc05964 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -50,6 +50,7 @@ static const long Cryptography_HAS_NEXTPROTONEG; static const long Cryptography_HAS_SET_CERT_CB; static const long Cryptography_HAS_CUSTOM_EXT; +static const long Cryptography_HAS_SRTP; static const long SSL_FILETYPE_PEM; static const long SSL_FILETYPE_ASN1; @@ -762,6 +763,15 @@ int (*SSL_extension_supported)(unsigned int) = NULL; #endif +#ifndef OPENSSL_NO_SRTP +static const long Cryptography_HAS_SRTP = 1; +#else +static const long Cryptography_HAS_SRTP = 0; +int (*SSL_CTX_set_tlsext_use_srtp)(SSL_CTX *, const char *) = NULL; +int (*SSL_set_tlsext_use_srtp)(SSL *, const char *) = NULL; +SRTP_PROTECTION_PROFILE * (*SSL_get_selected_srtp_profile)(SSL *) = NULL; +#endif + #if CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 && !CRYPTOGRAPHY_IS_LIBRESSL int (*SSL_CIPHER_is_aead)(const SSL_CIPHER *) = NULL; int (*SSL_CIPHER_get_cipher_nid)(const SSL_CIPHER *) = NULL; diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 3e0c235cb499..38d3e7dd55f3 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -297,6 +297,14 @@ def cryptography_has_verified_chain(): ] +def cryptography_has_srtp(): + return [ + "SSL_CTX_set_tlsext_use_srtp", + "SSL_set_tlsext_use_srtp", + "SSL_get_selected_srtp_profile", + ] + + # This is a mapping of # {condition: function-returning-names-dependent-on-that-condition} so we can # loop over them and delete unsupported names at runtime. It will be removed @@ -354,4 +362,5 @@ def cryptography_has_verified_chain(): ), "Cryptography_HAS_ENGINE": cryptography_has_engine, "Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain, + "Cryptography_HAS_SRTP": cryptography_has_srtp, } From ace8a92be9ab5f4b65d25191d25bb690be5e2338 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 26 Jul 2020 12:07:31 -0500 Subject: [PATCH 893/988] remove idna support finally (#5351) * remove idna support finally * remove unused import --- .travis.yml | 2 - CHANGELOG.rst | 3 + docs/faq.rst | 12 ---- docs/spelling_wordlist.txt | 1 - docs/x509/reference.rst | 49 +++++----------- setup.py | 4 -- src/cryptography/x509/general_name.py | 82 ++------------------------- tests/x509/test_x509_ext.py | 67 ++++------------------ tox.ini | 1 - 9 files changed, 34 insertions(+), 187 deletions(-) diff --git a/.travis.yml b/.travis.yml index 61c0b71fa6da..65f27b9c3664 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,8 +23,6 @@ matrix: # Setting 'python' is just to make travis's UI a bit prettier - python: 3.6 env: TOXENV=py36 - - python: 3.8 - env: TOXENV=py38-idna # Travis lists available Pythons (including PyPy) by arch and distro here: # https://docs.travis-ci.com/user/languages/python/#python-versions - python: pypy2.7-7.3.1 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 22b8983f9d52..1c54115022de 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,9 @@ Changelog .. note:: This version is not yet released and is under active development. +* **BACKWARDS INCOMPATIBLE:** Removed support for ``idna`` based + :term:`U-label` parsing in various X.509 classes. This support was originally + deprecated in version 2.1 and moved to an extra in 2.5. * Deprecated OpenSSL 1.0.2 support. OpenSSL 1.0.2 is no longer supported by the OpenSSL project. At this time there is no time table for dropping support, however we strongly encourage all users to upgrade or install diff --git a/docs/faq.rst b/docs/faq.rst index 341dba343c96..dba7b05ed9ac 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -126,18 +126,6 @@ support multiple versions of Python. The Python 3.5 ``abi3`` wheel can be used with any version of Python greater than or equal to 3.5. Recent versions of ``pip`` will automatically install ``abi3`` wheels. -``ImportError``: ``idna`` is not installed ------------------------------------------- - -``cryptography`` deprecated passing :term:`U-label` strings to various X.509 -constructors in version 2.1 and in version 2.5 moved the ``idna`` dependency -to a ``setuptools`` extra. If you see this exception you should upgrade your -software so that it no longer depends on this deprecated feature. If that is -not yet possible you can also install ``cryptography`` with -``pip install cryptography[idna]`` to automatically install the missing -dependency. This workaround will be available until the feature is fully -removed. - Why can't I import my PEM file? ------------------------------- diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 7488ccdf2575..b6984dda00a1 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -54,7 +54,6 @@ Google hazmat Homebrew hostname -idna indistinguishability initialisms interoperability diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 1198bc43f310..d360297eb23d 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -432,9 +432,6 @@ X.509 Certificate Object :raises cryptography.x509.UnsupportedGeneralNameType: If an extension contains a general name that is not supported. - :raises UnicodeError: If an extension contains IDNA encoding that is - invalid or not compliant with IDNA 2008. - .. doctest:: >>> for ext in cert.extensions: @@ -889,9 +886,6 @@ X.509 CSR (Certificate Signing Request) Object :raises cryptography.x509.UnsupportedGeneralNameType: If an extension contains a general name that is not supported. - :raises UnicodeError: If an extension contains IDNA encoding that is - invalid or not compliant with IDNA 2008. - .. method:: get_attribute_for_oid(oid) .. versionadded:: 3.0 @@ -1412,17 +1406,10 @@ General Name Classes .. versionadded:: 0.9 - .. versionchanged:: 2.1 - - .. warning:: - - Starting with version 2.1 :term:`U-label` input is deprecated. If - passing an internationalized domain name (IDN) you should first IDNA - encode the value and then pass the result as a string. Accessing - ``value`` will return the :term:`A-label` encoded form even if you pass - a U-label. This breaks backwards compatibility, but only for - internationalized domain names. + .. versionchanged:: 3.1 + :term:`U-label` support has been removed. Encode them to + :term:`A-label` before use. This corresponds to an email address. For example, ``user@example.com``. @@ -1430,6 +1417,8 @@ General Name Classes internationalized domain name then it must be encoded to an :term:`A-label` string before being passed. + :raises ValueError: If the provided string is not an :term:`A-label`. + .. attribute:: value :type: :term:`text` @@ -1438,16 +1427,10 @@ General Name Classes .. versionadded:: 0.9 - .. versionchanged:: 2.1 + .. versionchanged:: 3.1 - .. warning:: - - Starting with version 2.1 :term:`U-label` input is deprecated. If - passing an internationalized domain name (IDN) you should first IDNA - encode the value and then pass the result as a string. Accessing - ``value`` will return the :term:`A-label` encoded form even if you pass - a U-label. This breaks backwards compatibility, but only for - internationalized domain names. + :term:`U-label` support has been removed. Encode them to + :term:`A-label` before use. This corresponds to a domain name. For example, ``cryptography.io``. @@ -1455,6 +1438,8 @@ General Name Classes name then it must be encoded to an :term:`A-label` string before being passed. + :raises ValueError: If the provided string is not an :term:`A-label`. + :type: :term:`text` .. attribute:: value @@ -1475,16 +1460,10 @@ General Name Classes .. versionadded:: 0.9 - .. versionchanged:: 2.1 + .. versionchanged:: 3.1 - .. warning:: - - Starting with version 2.1 :term:`U-label` input is deprecated. If - passing an internationalized domain name (IDN) you should first IDNA - encode the value and then pass the result as a string. Accessing - ``value`` will return the :term:`A-label` encoded form even if you pass - a U-label. This breaks backwards compatibility, but only for - internationalized domain names. + :term:`U-label` support has been removed. Encode them to + :term:`A-label` before use. This corresponds to a uniform resource identifier. For example, ``https://cryptography.io``. @@ -1493,6 +1472,8 @@ General Name Classes name then it must be encoded to an :term:`A-label` string before being passed. + :raises ValueError: If the provided string is not an :term:`A-label`. + .. attribute:: value :type: :term:`text` diff --git a/setup.py b/setup.py index 450279142e3d..32fb410d3a78 100644 --- a/setup.py +++ b/setup.py @@ -253,10 +253,6 @@ def run(self): # This extra is for OpenSSH private keys that use bcrypt KDF # Versions: v3.1.3 - ignore_few_rounds, v3.1.5 - abi3 "ssh": ["bcrypt >= 3.1.5"], - # This extra is for the U-label support that was deprecated in - # cryptography 2.1. If you need this deprecated path install with - # pip install cryptography[idna] - "idna": ["idna >= 2.1"], }, # for cffi zip_safe=False, diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py index 5336a10f603d..9be9d8c991e1 100644 --- a/src/cryptography/x509/general_name.py +++ b/src/cryptography/x509/general_name.py @@ -6,11 +6,9 @@ import abc import ipaddress -import warnings from email.utils import parseaddr import six -from six.moves import urllib_parse from cryptography import utils from cryptography.x509.name import Name @@ -30,21 +28,6 @@ } -def _lazy_import_idna(): - # Import idna lazily becase it allocates a decent amount of memory, and - # we're only using it in deprecated paths. - try: - import idna - - return idna - except ImportError: - raise ImportError( - "idna is not installed, but a deprecated feature that requires it" - " was used. See: https://cryptography.io/en/latest/faq/#importe" - "rror-idna-is-not-installed" - ) - - class UnsupportedGeneralNameType(Exception): def __init__(self, msg, type): super(UnsupportedGeneralNameType, self).__init__(msg) @@ -67,14 +50,10 @@ def __init__(self, value): try: value.encode("ascii") except UnicodeEncodeError: - value = self._idna_encode(value) - warnings.warn( + raise ValueError( "RFC822Name values should be passed as an A-label string. " "This means unicode characters should be encoded via " - "idna. Support for passing unicode strings (aka U-label) " - "will be removed in a future version.", - utils.PersistentlyDeprecated2017, - stacklevel=2, + "a library like idna." ) else: raise TypeError("value must be string") @@ -95,12 +74,6 @@ def _init_without_validation(cls, value): instance._value = value return instance - def _idna_encode(self, value): - idna = _lazy_import_idna() - _, address = parseaddr(value) - parts = address.split(u"@") - return parts[0] + "@" + idna.encode(parts[1]).decode("ascii") - def __repr__(self): return "".format(self.value) @@ -117,16 +90,6 @@ def __hash__(self): return hash(self.value) -def _idna_encode(value): - idna = _lazy_import_idna() - # Retain prefixes '*.' for common/alt names and '.' for name constraints - for prefix in ["*.", "."]: - if value.startswith(prefix): - value = value[len(prefix) :] - return prefix + idna.encode(value).decode("ascii") - return idna.encode(value).decode("ascii") - - @utils.register_interface(GeneralName) class DNSName(object): def __init__(self, value): @@ -134,14 +97,10 @@ def __init__(self, value): try: value.encode("ascii") except UnicodeEncodeError: - value = _idna_encode(value) - warnings.warn( + raise ValueError( "DNSName values should be passed as an A-label string. " "This means unicode characters should be encoded via " - "idna. Support for passing unicode strings (aka U-label) " - "will be removed in a future version.", - utils.PersistentlyDeprecated2017, - stacklevel=2, + "a library like idna." ) else: raise TypeError("value must be string") @@ -179,14 +138,10 @@ def __init__(self, value): try: value.encode("ascii") except UnicodeEncodeError: - value = self._idna_encode(value) - warnings.warn( + raise ValueError( "URI values should be passed as an A-label string. " "This means unicode characters should be encoded via " - "idna. Support for passing unicode strings (aka U-label) " - " will be removed in a future version.", - utils.PersistentlyDeprecated2017, - stacklevel=2, + "a library like idna." ) else: raise TypeError("value must be string") @@ -201,31 +156,6 @@ def _init_without_validation(cls, value): instance._value = value return instance - def _idna_encode(self, value): - idna = _lazy_import_idna() - parsed = urllib_parse.urlparse(value) - if parsed.port: - netloc = ( - idna.encode(parsed.hostname) - + ":{}".format(parsed.port).encode("ascii") - ).decode("ascii") - else: - netloc = idna.encode(parsed.hostname).decode("ascii") - - # Note that building a URL in this fashion means it should be - # semantically indistinguishable from the original but is not - # guaranteed to be exactly the same. - return urllib_parse.urlunparse( - ( - parsed.scheme, - netloc, - parsed.path, - parsed.params, - parsed.query, - parsed.fragment, - ) - ) - def __repr__(self): return "".format(self.value) diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index b50a73895872..a89c01dadb19 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -15,7 +15,7 @@ import six -from cryptography import utils, x509 +from cryptography import x509 from cryptography.hazmat.backends.interfaces import ( DSABackend, EllipticCurveBackend, @@ -26,7 +26,6 @@ from cryptography.hazmat.primitives.asymmetric import ec from cryptography.x509 import DNSName, NameConstraints, SubjectAlternativeName from cryptography.x509.extensions import _key_identifier_from_public_key -from cryptography.x509.general_name import _lazy_import_idna from cryptography.x509.oid import ( AuthorityInformationAccessOID, ExtendedKeyUsageOID, @@ -56,17 +55,6 @@ def _make_certbuilder(private_key): ) -def test_lazy_idna_import(): - try: - __import__("idna") - pytest.skip("idna is installed") - except ImportError: - pass - - with pytest.raises(ImportError): - _lazy_import_idna() - - class TestExtension(object): def test_not_an_oid(self): bc = x509.BasicConstraints(ca=False, path_length=None) @@ -1736,15 +1724,9 @@ def test_key_cert_sign_crl_sign(self, backend): class TestDNSName(object): - def test_init_deprecated(self): - pytest.importorskip("idna") - with pytest.warns(utils.CryptographyDeprecationWarning): - name = x509.DNSName(u".\xf5\xe4\xf6\xfc.example.com") - assert name.value == u".xn--4ca7aey.example.com" - - with pytest.warns(utils.CryptographyDeprecationWarning): - name = x509.DNSName(u"\xf5\xe4\xf6\xfc.example.com") - assert name.value == u"xn--4ca7aey.example.com" + def test_non_a_label(self): + with pytest.raises(ValueError): + x509.DNSName(u".\xf5\xe4\xf6\xfc.example.com") def test_init(self): name = x509.DNSName(u"*.xn--4ca7aey.example.com") @@ -1855,15 +1837,9 @@ def test_single_label(self): gn = x509.RFC822Name(u"administrator") assert gn.value == u"administrator" - def test_idna(self): - pytest.importorskip("idna") - with pytest.warns(utils.CryptographyDeprecationWarning): - gn = x509.RFC822Name(u"email@em\xe5\xefl.com") - - assert gn.value == u"email@xn--eml-vla4c.com" - - gn2 = x509.RFC822Name(u"email@xn--eml-vla4c.com") - assert gn2.value == u"email@xn--eml-vla4c.com" + def test_non_a_label(self): + with pytest.raises(ValueError): + x509.RFC822Name(u"email@em\xe5\xefl.com") def test_hash(self): g1 = x509.RFC822Name(u"email@host.com") @@ -1895,39 +1871,16 @@ def test_with_port(self): gn = x509.UniformResourceIdentifier(u"singlelabel:443/test") assert gn.value == u"singlelabel:443/test" - def test_idna_no_port(self): - pytest.importorskip("idna") - with pytest.warns(utils.CryptographyDeprecationWarning): - gn = x509.UniformResourceIdentifier( + def test_non_a_label(self): + with pytest.raises(ValueError): + x509.UniformResourceIdentifier( u"http://\u043f\u044b\u043a\u0430.cryptography" ) - assert gn.value == u"http://xn--80ato2c.cryptography" - - def test_idna_with_port(self): - pytest.importorskip("idna") - with pytest.warns(utils.CryptographyDeprecationWarning): - gn = x509.UniformResourceIdentifier( - u"gopher://\u043f\u044b\u043a\u0430.cryptography:70/some/path" - ) - - assert gn.value == (u"gopher://xn--80ato2c.cryptography:70/some/path") - def test_empty_hostname(self): gn = x509.UniformResourceIdentifier(u"ldap:///some-nonsense") assert gn.value == "ldap:///some-nonsense" - def test_query_and_fragment(self): - pytest.importorskip("idna") - with pytest.warns(utils.CryptographyDeprecationWarning): - gn = x509.UniformResourceIdentifier( - u"ldap://\u043f\u044b\u043a\u0430.cryptography:90/path?query=" - u"true#somedata" - ) - assert gn.value == ( - u"ldap://xn--80ato2c.cryptography:90/path?query=true#somedata" - ) - def test_hash(self): g1 = x509.UniformResourceIdentifier(u"http://host.com") g2 = x509.UniformResourceIdentifier(u"http://host.com") diff --git a/tox.ini b/tox.ini index 239f2467c1cc..8c845707f75e 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,6 @@ isolated_build = True [testenv] extras = test - idna: idna ssh: ssh deps = # This must be kept in sync with .travis/install.sh and .github/workflows/ci.yml From 25c3bb49552bdf61a351cf5df62650e7e946d78b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 26 Jul 2020 20:45:42 -0500 Subject: [PATCH 894/988] start trying to make our error handling a bit more generic (#5352) * start trying to make our error handling a bit more generic * remove more and black * attach error stack to memorylimit error * blaaack --- src/_cffi_src/openssl/err.py | 16 --------- .../hazmat/backends/openssl/backend.py | 33 ++++--------------- .../hazmat/backends/openssl/dh.py | 18 ++++------ .../hazmat/bindings/openssl/_conditional.py | 9 ----- .../hazmat/bindings/openssl/binding.py | 33 ++++++++++++------- 5 files changed, 34 insertions(+), 75 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index c0697f5d469b..81fd712d1c44 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -11,7 +11,6 @@ TYPES = """ static const int Cryptography_HAS_EC_CODES; static const int Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR; -static const int Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED; static const int ERR_LIB_DH; static const int ERR_LIB_EVP; @@ -23,9 +22,6 @@ static const int ERR_LIB_SSL; static const int ERR_LIB_X509; -static const int ERR_R_MALLOC_FAILURE; -static const int EVP_R_MEMORY_LIMIT_EXCEEDED; - static const int ASN1_R_BOOLEAN_IS_WRONG_LENGTH; static const int ASN1_R_BUFFER_TOO_SMALL; static const int ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER; @@ -51,8 +47,6 @@ static const int ASN1_R_NO_MULTIPART_BOUNDARY; static const int ASN1_R_HEADER_TOO_LONG; -static const int DH_R_INVALID_PUBKEY; - static const int EVP_F_EVP_ENCRYPTFINAL_EX; static const int EVP_R_AES_KEY_SETUP_FAILED; @@ -80,9 +74,6 @@ static const int EVP_R_WRONG_FINAL_BLOCK_LENGTH; static const int EVP_R_CAMELLIA_KEY_SETUP_FAILED; -static const int EC_R_UNKNOWN_GROUP; -static const int EC_R_NOT_A_NIST_PRIME; - static const int PEM_R_BAD_BASE64_DECODE; static const int PEM_R_BAD_DECRYPT; static const int PEM_R_BAD_END_LINE; @@ -174,11 +165,4 @@ static const long Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR = 0; static const long RSA_R_PKCS_DECODING_ERROR = 0; #endif - -#ifdef EVP_R_MEMORY_LIMIT_EXCEEDED -static const long Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED = 1; -#else -static const long EVP_R_MEMORY_LIMIT_EXCEEDED = 0; -static const long Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED = 0; -#endif """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index a98d3e26f5b9..a736d0ab5de3 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -435,6 +435,9 @@ def derive_pbkdf2_hmac( def _consume_errors(self): return binding._consume_errors(self._lib) + def _consume_errors_with_text(self): + return binding._consume_errors_with_text(self._lib) + def _bn_to_int(self, bn): assert bn != self._ffi.NULL @@ -1473,18 +1476,7 @@ def elliptic_curve_supported(self, curve): group = self._lib.EC_GROUP_new_by_curve_name(curve_nid) if group == self._ffi.NULL: - errors = self._consume_errors() - self.openssl_assert( - curve_nid == self._lib.NID_undef - or errors[0]._lib_reason_match( - self._lib.ERR_LIB_EC, self._lib.EC_R_UNKNOWN_GROUP - ) - or - # This occurs in FIPS mode for unsupported curves on RHEL - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EC, self._lib.EC_R_NOT_A_NIST_PRIME - ) - ) + self._consume_errors() return False else: self.openssl_assert(curve_nid != self._lib.NID_undef) @@ -2398,25 +2390,14 @@ def derive_scrypt(self, key_material, salt, length, n, r, p): length, ) if res != 1: - errors = self._consume_errors() - if not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111: - # This error is only added to the stack in 1.1.1+ - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EVP, self._lib.ERR_R_MALLOC_FAILURE - ) - or errors[0]._lib_reason_match( - self._lib.ERR_LIB_EVP, - self._lib.EVP_R_MEMORY_LIMIT_EXCEEDED, - ) - ) - + errors = self._consume_errors_with_text() # memory required formula explained here: # https://blog.filippo.io/the-scrypt-parameters/ min_memory = 128 * n * r // (1024 ** 2) raise MemoryError( "Not enough memory to derive key. These parameters require" - " {} MB of memory.".format(min_memory) + " {} MB of memory.".format(min_memory), + errors, ) return self._ffi.buffer(buf)[:] diff --git a/src/cryptography/hazmat/backends/openssl/dh.py b/src/cryptography/hazmat/backends/openssl/dh.py index 95179d374e4c..2862676c65ea 100644 --- a/src/cryptography/hazmat/backends/openssl/dh.py +++ b/src/cryptography/hazmat/backends/openssl/dh.py @@ -79,16 +79,6 @@ def parameter_bytes(self, encoding, format): return self._backend._parameter_bytes(encoding, format, self._dh_cdata) -def _handle_dh_compute_key_error(errors, backend): - lib = backend._lib - - backend.openssl_assert( - errors[0]._lib_reason_match(lib.ERR_LIB_DH, lib.DH_R_INVALID_PUBKEY) - ) - - raise ValueError("Public key value is invalid for this exchange.") - - def _get_dh_num_bits(backend, dh_cdata): p = backend._ffi.new("BIGNUM **") backend._lib.DH_get0_pqg(dh_cdata, p, backend._ffi.NULL, backend._ffi.NULL) @@ -149,8 +139,12 @@ def exchange(self, peer_public_key): ) if res == -1: - errors = self._backend._consume_errors() - return _handle_dh_compute_key_error(errors, self._backend) + errors_with_text = self._backend._consume_errors_with_text() + raise ValueError( + "Error computing shared key. Public key is likely invalid " + "for this exchange.", + errors_with_text, + ) else: self._backend.openssl_assert(res >= 1) diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 38d3e7dd55f3..99290501e549 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -270,12 +270,6 @@ def cryptography_has_raw_key(): ] -def cryptography_has_evp_r_memory_limit_exceeded(): - return [ - "EVP_R_MEMORY_LIMIT_EXCEEDED", - ] - - def cryptography_has_engine(): return [ "ENGINE_by_id", @@ -357,9 +351,6 @@ def cryptography_has_srtp(): "Cryptography_HAS_EVP_DIGESTFINAL_XOF": ( cryptography_has_evp_digestfinal_xof ), - "Cryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDED": ( - cryptography_has_evp_r_memory_limit_exceeded - ), "Cryptography_HAS_ENGINE": cryptography_has_engine, "Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain, "Cryptography_HAS_SRTP": cryptography_has_srtp, diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 398cfd55a813..73340e7cf04f 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -52,20 +52,29 @@ def _consume_errors(lib): return errors +def _errors_with_text(errors): + errors_with_text = [] + for err in errors: + buf = ffi.new("char[]", 256) + lib.ERR_error_string_n(err.code, buf, len(buf)) + err_text_reason = ffi.string(buf) + + errors_with_text.append( + _OpenSSLErrorWithText( + err.code, err.lib, err.func, err.reason, err_text_reason + ) + ) + + return errors_with_text + + +def _consume_errors_with_text(lib): + return _errors_with_text(_consume_errors(lib)) + + def _openssl_assert(lib, ok): if not ok: - errors = _consume_errors(lib) - errors_with_text = [] - for err in errors: - buf = ffi.new("char[]", 256) - lib.ERR_error_string_n(err.code, buf, len(buf)) - err_text_reason = ffi.string(buf) - - errors_with_text.append( - _OpenSSLErrorWithText( - err.code, err.lib, err.func, err.reason, err_text_reason - ) - ) + errors_with_text = _consume_errors_with_text(lib) raise InternalError( "Unknown OpenSSL error. This error is commonly encountered when " From bc609feef8bfd472bbf3cefad2a18a1761af9751 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 26 Jul 2020 21:36:39 -0500 Subject: [PATCH 895/988] simplify more errors (#5353) the quest to stop using unstable openssl error codes continues --- src/_cffi_src/openssl/err.py | 14 ------ .../hazmat/backends/openssl/rsa.py | 46 ++++--------------- .../hazmat/bindings/openssl/_conditional.py | 7 --- tests/hazmat/primitives/test_rsa.py | 6 +-- 4 files changed, 13 insertions(+), 60 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 81fd712d1c44..b65e091f9991 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -10,7 +10,6 @@ TYPES = """ static const int Cryptography_HAS_EC_CODES; -static const int Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR; static const int ERR_LIB_DH; static const int ERR_LIB_EVP; @@ -92,14 +91,7 @@ static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR; -static const int RSA_R_BAD_PAD_BYTE_COUNT; -static const int RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE; -static const int RSA_R_DATA_TOO_LARGE_FOR_MODULUS; static const int RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY; -static const int RSA_R_BLOCK_TYPE_IS_NOT_01; -static const int RSA_R_BLOCK_TYPE_IS_NOT_02; -static const int RSA_R_PKCS_DECODING_ERROR; -static const int RSA_R_OAEP_DECODING_ERROR; static const int SSL_TLSEXT_ERR_OK; static const int SSL_TLSEXT_ERR_ALERT_WARNING; @@ -159,10 +151,4 @@ CUSTOMIZATIONS = """ static const long Cryptography_HAS_EC_CODES = 1; -#ifdef RSA_R_PKCS_DECODING_ERROR -static const long Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR = 1; -#else -static const long Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR = 0; -static const long RSA_R_PKCS_DECODING_ERROR = 0; -#endif """ diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 5c1fda51749d..df697a1f6220 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -127,33 +127,15 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): def _handle_rsa_enc_dec_error(backend, key): - errors = backend._consume_errors() - backend.openssl_assert(errors) - backend.openssl_assert(errors[0].lib == backend._lib.ERR_LIB_RSA) + errors = backend._consume_errors_with_text() if isinstance(key, _RSAPublicKey): - backend.openssl_assert( - errors[0].reason == backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE - ) raise ValueError( "Data too long for key size. Encrypt less data or use a " - "larger key size." + "larger key size.", + errors, ) else: - decoding_errors = [ - backend._lib.RSA_R_BAD_PAD_BYTE_COUNT, - backend._lib.RSA_R_BLOCK_TYPE_IS_NOT_01, - backend._lib.RSA_R_BLOCK_TYPE_IS_NOT_02, - backend._lib.RSA_R_OAEP_DECODING_ERROR, - # Though this error looks similar to the - # RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE, this occurs on decrypts, - # rather than on encrypts - backend._lib.RSA_R_DATA_TOO_LARGE_FOR_MODULUS, - ] - if backend._lib.Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR: - decoding_errors.append(backend._lib.RSA_R_PKCS_DECODING_ERROR) - - backend.openssl_assert(errors[0].reason in decoding_errors) - raise ValueError("Decryption failed.") + raise ValueError("Decryption failed.", errors) def _rsa_sig_determine_padding(backend, key, padding, algorithm): @@ -241,20 +223,12 @@ def _rsa_sig_sign(backend, padding, algorithm, private_key, data): buf = backend._ffi.new("unsigned char[]", buflen[0]) res = backend._lib.EVP_PKEY_sign(pkey_ctx, buf, buflen, data, len(data)) if res != 1: - errors = backend._consume_errors() - backend.openssl_assert(errors[0].lib == backend._lib.ERR_LIB_RSA) - if errors[0].reason == backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE: - reason = ( - "Salt length too long for key size. Try using " - "MAX_LENGTH instead." - ) - else: - backend.openssl_assert( - errors[0].reason - == backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY - ) - reason = "Digest too large for key size. Use a larger key." - raise ValueError(reason) + errors = backend._consume_errors_with_text() + raise ValueError( + "Digest or salt length too long for key size. Use a larger key " + "or shorter salt length if you are specifying a PSS salt", + errors, + ) return backend._ffi.buffer(buf)[:] diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 99290501e549..a1547b69744e 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -13,10 +13,6 @@ def cryptography_has_ec2m(): ] -def cryptography_has_rsa_r_pkcs_decoding_error(): - return ["RSA_R_PKCS_DECODING_ERROR"] - - def cryptography_has_rsa_oaep_md(): return [ "EVP_PKEY_CTX_set_rsa_oaep_md", @@ -306,9 +302,6 @@ def cryptography_has_srtp(): # lists so we can use coverage to measure which are used. CONDITIONAL_NAMES = { "Cryptography_HAS_EC2M": cryptography_has_ec2m, - "Cryptography_HAS_RSA_R_PKCS_DECODING_ERROR": ( - cryptography_has_rsa_r_pkcs_decoding_error - ), "Cryptography_HAS_RSA_OAEP_MD": cryptography_has_rsa_oaep_md, "Cryptography_HAS_RSA_OAEP_LABEL": cryptography_has_rsa_oaep_label, "Cryptography_HAS_SSL3_METHOD": cryptography_has_ssl3_method, diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 530f648889c2..fc806c9ef417 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -1583,9 +1583,9 @@ def test_decrypt_oaep_sha2_vectors(self, vector, backend): skip_message="Does not support OAEP.", ) def test_invalid_oaep_decryption(self, backend): - # More recent versions of OpenSSL may raise RSA_R_OAEP_DECODING_ERROR - # This test triggers it and confirms that we properly handle it. Other - # backends should also return the proper ValueError. + # More recent versions of OpenSSL may raise different errors. + # This test triggers a failure and confirms that we properly handle + # it. private_key = RSA_KEY_512.private_key(backend) ciphertext = private_key.public_key().encrypt( From d54b6f0fa36f33aab23df7f96d88560c6849b526 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 26 Jul 2020 23:10:04 -0500 Subject: [PATCH 896/988] more error simplification (#5354) X509 signing for RSA keys that are too small. Let's just say signing failed and attach the more specific problem as the error stack. A bit uglier, but far more generic and stable to OpenSSL/LibreSSL/BoringSSL Also be a bit more generic for OCSP signing --- src/_cffi_src/openssl/err.py | 3 -- .../hazmat/backends/openssl/backend.py | 43 +++++-------------- tests/x509/test_x509.py | 4 +- 3 files changed, 12 insertions(+), 38 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index b65e091f9991..7ff4bc949772 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -91,8 +91,6 @@ static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR; -static const int RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY; - static const int SSL_TLSEXT_ERR_OK; static const int SSL_TLSEXT_ERR_ALERT_WARNING; static const int SSL_TLSEXT_ERR_ALERT_FATAL; @@ -128,7 +126,6 @@ static const int SSL_AD_UNKNOWN_PSK_IDENTITY; static const int X509_R_CERT_ALREADY_IN_HASH_TABLE; -static const int X509_R_KEY_VALUES_MISMATCH; """ FUNCTIONS = """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index a736d0ab5de3..5dd925f17703 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -932,15 +932,8 @@ def create_x509_csr(self, builder, private_key, algorithm): # Sign the request using the requester's private key. res = self._lib.X509_REQ_sign(x509_req, private_key._evp_pkey, evp_md) if res == 0: - errors = self._consume_errors() - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_RSA, - self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY, - ) - ) - - raise ValueError("Digest too big for RSA key") + errors = self._consume_errors_with_text() + raise ValueError("Signing failed", errors) return _CertificateSigningRequest(self, x509_req) @@ -1005,14 +998,8 @@ def create_x509_certificate(self, builder, private_key, algorithm): # Sign the certificate with the issuer's private key. res = self._lib.X509_sign(x509_cert, private_key._evp_pkey, evp_md) if res == 0: - errors = self._consume_errors() - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_RSA, - self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY, - ) - ) - raise ValueError("Digest too big for RSA key") + errors = self._consume_errors_with_text() + raise ValueError("Signing failed", errors) return _Certificate(self, x509_cert) @@ -1091,14 +1078,8 @@ def create_x509_crl(self, builder, private_key, algorithm): res = self._lib.X509_CRL_sign(x509_crl, private_key._evp_pkey, evp_md) if res == 0: - errors = self._consume_errors() - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_RSA, - self._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY, - ) - ) - raise ValueError("Digest too big for RSA key") + errors = self._consume_errors_with_text() + raise ValueError("Signing failed", errors) return _CertificateRevocationList(self, x509_crl) @@ -1716,14 +1697,12 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): flags, ) if res != 1: - errors = self._consume_errors() - self.openssl_assert( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_X509, - self._lib.X509_R_KEY_VALUES_MISMATCH, - ) + errors = self._consume_errors_with_text() + raise ValueError( + "Error while signing. responder_cert must be signed " + "by private_key", + errors, ) - raise ValueError("responder_cert must be signed by private_key") return basic diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 63cfb39f033e..3e63dde74ff1 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -4085,11 +4085,9 @@ def test_rsa_key_too_small(self, backend): x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, u"US")]) ) - with pytest.raises(ValueError) as exc: + with pytest.raises(ValueError): builder.sign(private_key, hashes.SHA512(), backend) - assert str(exc.value) == "Digest too big for RSA key" - @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) def test_build_cert_with_aia(self, backend): From c03efbab6e18f90b83b0e3708eda0bda361ccc1c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 27 Jul 2020 06:31:41 -0500 Subject: [PATCH 897/988] remove every error we don't use in cryptography or pyopenssl (#5355) * remove every error we don't use in cryptography or pyopenssl sorry external consumers, carrying things we don't use and don't have downstream tests for has become too much of a burden * re-add a constant we need for tests for now * pyopenssl needs these three --- src/_cffi_src/openssl/err.py | 115 +++-------------------------------- 1 file changed, 7 insertions(+), 108 deletions(-) diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 7ff4bc949772..52cfd71f6013 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -9,122 +9,23 @@ """ TYPES = """ -static const int Cryptography_HAS_EC_CODES; - -static const int ERR_LIB_DH; -static const int ERR_LIB_EVP; -static const int ERR_LIB_EC; -static const int ERR_LIB_PEM; -static const int ERR_LIB_ASN1; -static const int ERR_LIB_RSA; -static const int ERR_LIB_PKCS12; -static const int ERR_LIB_SSL; -static const int ERR_LIB_X509; - -static const int ASN1_R_BOOLEAN_IS_WRONG_LENGTH; -static const int ASN1_R_BUFFER_TOO_SMALL; -static const int ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER; -static const int ASN1_R_DATA_IS_WRONG; -static const int ASN1_R_DECODE_ERROR; -static const int ASN1_R_DEPTH_EXCEEDED; -static const int ASN1_R_ENCODE_ERROR; -static const int ASN1_R_ERROR_GETTING_TIME; -static const int ASN1_R_ERROR_LOADING_SECTION; -static const int ASN1_R_MSTRING_WRONG_TAG; -static const int ASN1_R_NESTED_ASN1_STRING; -static const int ASN1_R_NO_MATCHING_CHOICE_TYPE; -static const int ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM; -static const int ASN1_R_UNKNOWN_OBJECT_TYPE; -static const int ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE; -static const int ASN1_R_UNKNOWN_TAG; -static const int ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE; -static const int ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE; -static const int ASN1_R_UNSUPPORTED_TYPE; -static const int ASN1_R_WRONG_TAG; -static const int ASN1_R_NO_CONTENT_TYPE; -static const int ASN1_R_NO_MULTIPART_BODY_FAILURE; -static const int ASN1_R_NO_MULTIPART_BOUNDARY; -static const int ASN1_R_HEADER_TOO_LONG; - static const int EVP_F_EVP_ENCRYPTFINAL_EX; - -static const int EVP_R_AES_KEY_SETUP_FAILED; -static const int EVP_R_BAD_DECRYPT; -static const int EVP_R_CIPHER_PARAMETER_ERROR; -static const int EVP_R_CTRL_NOT_IMPLEMENTED; -static const int EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED; static const int EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH; -static const int EVP_R_DECODE_ERROR; -static const int EVP_R_DIFFERENT_KEY_TYPES; -static const int EVP_R_INITIALIZATION_ERROR; -static const int EVP_R_INPUT_NOT_INITIALIZED; -static const int EVP_R_INVALID_KEY_LENGTH; -static const int EVP_R_KEYGEN_FAILURE; -static const int EVP_R_MISSING_PARAMETERS; -static const int EVP_R_NO_CIPHER_SET; -static const int EVP_R_NO_DIGEST_SET; -static const int EVP_R_PUBLIC_KEY_NOT_RSA; -static const int EVP_R_UNKNOWN_PBE_ALGORITHM; -static const int EVP_R_UNSUPPORTED_CIPHER; -static const int EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION; -static const int EVP_R_UNSUPPORTED_KEYLENGTH; -static const int EVP_R_UNSUPPORTED_SALT_TYPE; +static const int EVP_R_BAD_DECRYPT; static const int EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM; -static const int EVP_R_WRONG_FINAL_BLOCK_LENGTH; -static const int EVP_R_CAMELLIA_KEY_SETUP_FAILED; - -static const int PEM_R_BAD_BASE64_DECODE; -static const int PEM_R_BAD_DECRYPT; -static const int PEM_R_BAD_END_LINE; -static const int PEM_R_BAD_IV_CHARS; -static const int PEM_R_BAD_PASSWORD_READ; -static const int PEM_R_ERROR_CONVERTING_PRIVATE_KEY; -static const int PEM_R_NO_START_LINE; -static const int PEM_R_NOT_DEK_INFO; -static const int PEM_R_NOT_ENCRYPTED; -static const int PEM_R_NOT_PROC_TYPE; -static const int PEM_R_PROBLEMS_GETTING_PASSWORD; -static const int PEM_R_READ_KEY; -static const int PEM_R_SHORT_HEADER; -static const int PEM_R_UNSUPPORTED_CIPHER; +static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR; static const int PEM_R_UNSUPPORTED_ENCRYPTION; +static const int EVP_R_UNKNOWN_PBE_ALGORITHM; -static const int PKCS12_R_PKCS12_CIPHERFINAL_ERROR; +static const int ERR_LIB_EVP; +static const int ERR_LIB_PEM; +static const int ERR_LIB_ASN1; +static const int ERR_LIB_PKCS12; static const int SSL_TLSEXT_ERR_OK; -static const int SSL_TLSEXT_ERR_ALERT_WARNING; static const int SSL_TLSEXT_ERR_ALERT_FATAL; static const int SSL_TLSEXT_ERR_NOACK; -static const int SSL_AD_CLOSE_NOTIFY; -static const int SSL_AD_UNEXPECTED_MESSAGE; -static const int SSL_AD_BAD_RECORD_MAC; -static const int SSL_AD_RECORD_OVERFLOW; -static const int SSL_AD_DECOMPRESSION_FAILURE; -static const int SSL_AD_HANDSHAKE_FAILURE; -static const int SSL_AD_BAD_CERTIFICATE; -static const int SSL_AD_UNSUPPORTED_CERTIFICATE; -static const int SSL_AD_CERTIFICATE_REVOKED; -static const int SSL_AD_CERTIFICATE_EXPIRED; -static const int SSL_AD_CERTIFICATE_UNKNOWN; -static const int SSL_AD_ILLEGAL_PARAMETER; -static const int SSL_AD_UNKNOWN_CA; -static const int SSL_AD_ACCESS_DENIED; -static const int SSL_AD_DECODE_ERROR; -static const int SSL_AD_DECRYPT_ERROR; -static const int SSL_AD_PROTOCOL_VERSION; -static const int SSL_AD_INSUFFICIENT_SECURITY; -static const int SSL_AD_INTERNAL_ERROR; -static const int SSL_AD_USER_CANCELLED; -static const int SSL_AD_NO_RENEGOTIATION; - -static const int SSL_AD_UNSUPPORTED_EXTENSION; -static const int SSL_AD_CERTIFICATE_UNOBTAINABLE; -static const int SSL_AD_UNRECOGNIZED_NAME; -static const int SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE; -static const int SSL_AD_BAD_CERTIFICATE_HASH_VALUE; -static const int SSL_AD_UNKNOWN_PSK_IDENTITY; - static const int X509_R_CERT_ALREADY_IN_HASH_TABLE; """ @@ -146,6 +47,4 @@ """ CUSTOMIZATIONS = """ -static const long Cryptography_HAS_EC_CODES = 1; - """ From 84a15eb772d24c805c884f62cabe8fe2becedf74 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 27 Jul 2020 14:24:35 -0500 Subject: [PATCH 898/988] shrink bindings more (#5356) * shrink bindings more * readd a binding we do need * readd two more bindings we need --- src/_cffi_src/openssl/aes.py | 3 -- src/_cffi_src/openssl/asn1.py | 1 - src/_cffi_src/openssl/ecdsa.py | 9 ---- src/_cffi_src/openssl/err.py | 1 - src/_cffi_src/openssl/evp.py | 2 - src/_cffi_src/openssl/objects.py | 8 ---- src/_cffi_src/openssl/pem.py | 4 -- src/_cffi_src/openssl/pkcs7.py | 2 - src/_cffi_src/openssl/rsa.py | 9 ---- src/_cffi_src/openssl/ssl.py | 43 ------------------- .../hazmat/bindings/openssl/_conditional.py | 9 ---- 11 files changed, 91 deletions(-) diff --git a/src/_cffi_src/openssl/aes.py b/src/_cffi_src/openssl/aes.py index 5c9dee6df0ec..25ef3ec0e3cb 100644 --- a/src/_cffi_src/openssl/aes.py +++ b/src/_cffi_src/openssl/aes.py @@ -13,9 +13,6 @@ """ FUNCTIONS = """ -int AES_set_encrypt_key(const unsigned char *, const int, AES_KEY *); -int AES_set_decrypt_key(const unsigned char *, const int, AES_KEY *); - int AES_wrap_key(AES_KEY *, const unsigned char *, unsigned char *, const unsigned char *, unsigned int); int AES_unwrap_key(AES_KEY *, const unsigned char *, unsigned char *, diff --git a/src/_cffi_src/openssl/asn1.py b/src/_cffi_src/openssl/asn1.py index 3e148ce0f355..da55b670e041 100644 --- a/src/_cffi_src/openssl/asn1.py +++ b/src/_cffi_src/openssl/asn1.py @@ -62,7 +62,6 @@ /* ASN1 TIME */ ASN1_TIME *ASN1_TIME_new(void); void ASN1_TIME_free(ASN1_TIME *); -ASN1_TIME *ASN1_TIME_set(ASN1_TIME *, time_t); int ASN1_TIME_set_string(ASN1_TIME *, const char *); /* ASN1 GENERALIZEDTIME */ diff --git a/src/_cffi_src/openssl/ecdsa.py b/src/_cffi_src/openssl/ecdsa.py index 44a778a68690..3134e24b61d4 100644 --- a/src/_cffi_src/openssl/ecdsa.py +++ b/src/_cffi_src/openssl/ecdsa.py @@ -9,8 +9,6 @@ """ TYPES = """ -static const int Cryptography_HAS_ECDSA; - typedef ... ECDSA_SIG; typedef ... CRYPTO_EX_new; @@ -19,12 +17,6 @@ """ FUNCTIONS = """ -ECDSA_SIG *ECDSA_SIG_new(); -void ECDSA_SIG_free(ECDSA_SIG *); -int i2d_ECDSA_SIG(const ECDSA_SIG *, unsigned char **); -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **s, const unsigned char **, long); -ECDSA_SIG *ECDSA_do_sign(const unsigned char *, int, EC_KEY *); -int ECDSA_do_verify(const unsigned char *, int, const ECDSA_SIG *, EC_KEY *); int ECDSA_sign(int, const unsigned char *, int, unsigned char *, unsigned int *, EC_KEY *); int ECDSA_verify(int, const unsigned char *, int, const unsigned char *, int, @@ -34,5 +26,4 @@ """ CUSTOMIZATIONS = """ -static const long Cryptography_HAS_ECDSA = 1; """ diff --git a/src/_cffi_src/openssl/err.py b/src/_cffi_src/openssl/err.py index 52cfd71f6013..0dd7414674fe 100644 --- a/src/_cffi_src/openssl/err.py +++ b/src/_cffi_src/openssl/err.py @@ -36,7 +36,6 @@ const char *ERR_reason_error_string(unsigned long); unsigned long ERR_get_error(void); unsigned long ERR_peek_error(void); -unsigned long ERR_peek_last_error(void); void ERR_clear_error(void); void ERR_put_error(int, int, int, const char *, int); diff --git a/src/_cffi_src/openssl/evp.py b/src/_cffi_src/openssl/evp.py index a0767021d18c..d7ac93e603fc 100644 --- a/src/_cffi_src/openssl/evp.py +++ b/src/_cffi_src/openssl/evp.py @@ -90,8 +90,6 @@ ENGINE *, EVP_PKEY *); -int PKCS5_PBKDF2_HMAC_SHA1(const char *, int, const unsigned char *, int, int, - int, unsigned char *); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *, ENGINE *); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int, ENGINE *); diff --git a/src/_cffi_src/openssl/objects.py b/src/_cffi_src/openssl/objects.py index 265ac75c0905..236903d986a9 100644 --- a/src/_cffi_src/openssl/objects.py +++ b/src/_cffi_src/openssl/objects.py @@ -20,21 +20,13 @@ """ FUNCTIONS = """ -ASN1_OBJECT *OBJ_nid2obj(int); const char *OBJ_nid2ln(int); const char *OBJ_nid2sn(int); int OBJ_obj2nid(const ASN1_OBJECT *); -int OBJ_ln2nid(const char *); int OBJ_sn2nid(const char *); int OBJ_txt2nid(const char *); ASN1_OBJECT *OBJ_txt2obj(const char *, int); int OBJ_obj2txt(char *, int, const ASN1_OBJECT *, int); -int OBJ_cmp(const ASN1_OBJECT *, const ASN1_OBJECT *); -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *); -int OBJ_create(const char *, const char *, const char *); -void OBJ_NAME_do_all(int, void (*) (const OBJ_NAME *, void *), void *); -/* OBJ_cleanup became a macro in 1.1.0 */ -void OBJ_cleanup(void); """ CUSTOMIZATIONS = """ diff --git a/src/_cffi_src/openssl/pem.py b/src/_cffi_src/openssl/pem.py index 09b523d604ac..3f279c4fffa9 100644 --- a/src/_cffi_src/openssl/pem.py +++ b/src/_cffi_src/openssl/pem.py @@ -24,13 +24,9 @@ int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, char *, int, pem_password_cb *, void *); -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *, EVP_PKEY *, int, char *, int, - pem_password_cb *, void *); int i2d_PKCS8PrivateKey_bio(BIO *, EVP_PKEY *, const EVP_CIPHER *, char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_nid_bio(BIO *, EVP_PKEY *, int, - char *, int, pem_password_cb *, void *); int i2d_PKCS7_bio(BIO *, PKCS7 *); PKCS7 *d2i_PKCS7_bio(BIO *, PKCS7 **); diff --git a/src/_cffi_src/openssl/pkcs7.py b/src/_cffi_src/openssl/pkcs7.py index 7486248e0ebe..7f31b82b6296 100644 --- a/src/_cffi_src/openssl/pkcs7.py +++ b/src/_cffi_src/openssl/pkcs7.py @@ -56,12 +56,10 @@ FUNCTIONS = """ void PKCS7_free(PKCS7 *); -int PKCS7_type_is_encrypted(PKCS7 *); int PKCS7_type_is_signed(PKCS7 *); int PKCS7_type_is_enveloped(PKCS7 *); int PKCS7_type_is_signedAndEnveloped(PKCS7 *); int PKCS7_type_is_data(PKCS7 *); -int PKCS7_type_is_digest(PKCS7 *); """ CUSTOMIZATIONS = "" diff --git a/src/_cffi_src/openssl/rsa.py b/src/_cffi_src/openssl/rsa.py index 4b9154635a6d..765498fbc9ef 100644 --- a/src/_cffi_src/openssl/rsa.py +++ b/src/_cffi_src/openssl/rsa.py @@ -25,19 +25,10 @@ FUNCTIONS = """ RSA *RSA_new(void); void RSA_free(RSA *); -int RSA_size(const RSA *); int RSA_generate_key_ex(RSA *, int, BIGNUM *, BN_GENCB *); int RSA_check_key(const RSA *); RSA *RSAPublicKey_dup(RSA *); int RSA_blinding_on(RSA *, BN_CTX *); -int RSA_public_encrypt(int, const unsigned char *, unsigned char *, - RSA *, int); -int RSA_private_encrypt(int, const unsigned char *, unsigned char *, - RSA *, int); -int RSA_public_decrypt(int, const unsigned char *, unsigned char *, - RSA *, int); -int RSA_private_decrypt(int, const unsigned char *, unsigned char *, - RSA *, int); int RSA_print(BIO *, const RSA *, int); /* added in 1.1.0 when the RSA struct was opaqued */ diff --git a/src/_cffi_src/openssl/ssl.py b/src/_cffi_src/openssl/ssl.py index 8b73dbc05964..c38e309a1835 100644 --- a/src/_cffi_src/openssl/ssl.py +++ b/src/_cffi_src/openssl/ssl.py @@ -19,7 +19,6 @@ static const long Cryptography_HAS_TLSv1_2; static const long Cryptography_HAS_TLSv1_3; static const long Cryptography_HAS_SECURE_RENEGOTIATION; -static const long Cryptography_HAS_COMPRESSION; static const long Cryptography_HAS_TLSEXT_STATUS_REQ_CB; static const long Cryptography_HAS_STATUS_REQ_OCSP_RESP; static const long Cryptography_HAS_TLSEXT_STATUS_REQ_TYPE; @@ -151,7 +150,6 @@ typedef ... SSL_CIPHER; typedef ... Cryptography_STACK_OF_SSL_CIPHER; -typedef ... COMP_METHOD; typedef struct { const char *name; @@ -164,20 +162,10 @@ const char *SSL_state_string_long(const SSL *); SSL_SESSION *SSL_get1_session(SSL *); int SSL_set_session(SSL *, SSL_SESSION *); -int SSL_get_verify_mode(const SSL *); -void SSL_set_verify(SSL *, int, int (*)(int, X509_STORE_CTX *)); -void SSL_set_verify_depth(SSL *, int); -int SSL_get_verify_depth(const SSL *); -int (*SSL_get_verify_callback(const SSL *))(int, X509_STORE_CTX *); -void SSL_set_info_callback(SSL *ssl, void (*)(const SSL *, int, int)); -void (*SSL_get_info_callback(const SSL *))(const SSL *, int, int); SSL *SSL_new(SSL_CTX *); void SSL_free(SSL *); int SSL_set_fd(SSL *, int); -SSL_CTX *SSL_get_SSL_CTX(const SSL *); SSL_CTX *SSL_set_SSL_CTX(SSL *, SSL_CTX *); -BIO *SSL_get_rbio(const SSL *); -BIO *SSL_get_wbio(const SSL *); void SSL_set_bio(SSL *, BIO *, BIO *); void SSL_set_connect_state(SSL *); void SSL_set_accept_state(SSL *); @@ -195,14 +183,6 @@ X509_VERIFY_PARAM *SSL_get0_param(SSL *); X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *); -int SSL_use_certificate(SSL *, X509 *); -int SSL_use_certificate_ASN1(SSL *, const unsigned char *, int); -int SSL_use_certificate_file(SSL *, const char *, int); -int SSL_use_PrivateKey(SSL *, EVP_PKEY *); -int SSL_use_PrivateKey_ASN1(int, SSL *, const unsigned char *, long); -int SSL_use_PrivateKey_file(SSL *, const char *, int); -int SSL_check_private_key(const SSL *); - int SSL_get_sigalgs(SSL *, int, int *, int *, int *, unsigned char *, unsigned char *); @@ -217,7 +197,6 @@ int SSL_renegotiate(SSL *); int SSL_renegotiate_pending(SSL *); const char *SSL_get_cipher_list(const SSL *, int); -Cryptography_STACK_OF_SSL_CIPHER *SSL_get_ciphers(const SSL *); /* context */ void SSL_CTX_free(SSL_CTX *); @@ -225,7 +204,6 @@ int SSL_CTX_set_default_verify_paths(SSL_CTX *); void SSL_CTX_set_verify(SSL_CTX *, int, int (*)(int, X509_STORE_CTX *)); void SSL_CTX_set_verify_depth(SSL_CTX *, int); -int (*SSL_CTX_get_verify_callback(const SSL_CTX *))(int, X509_STORE_CTX *); int SSL_CTX_get_verify_mode(const SSL_CTX *); int SSL_CTX_get_verify_depth(const SSL_CTX *); int SSL_CTX_set_cipher_list(SSL_CTX *, const char *); @@ -233,11 +211,9 @@ void SSL_CTX_set_default_passwd_cb(SSL_CTX *, pem_password_cb *); void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *, void *); int SSL_CTX_use_certificate(SSL_CTX *, X509 *); -int SSL_CTX_use_certificate_ASN1(SSL_CTX *, int, const unsigned char *); int SSL_CTX_use_certificate_file(SSL_CTX *, const char *, int); int SSL_CTX_use_certificate_chain_file(SSL_CTX *, const char *); int SSL_CTX_use_PrivateKey(SSL_CTX *, EVP_PKEY *); -int SSL_CTX_use_PrivateKey_ASN1(int, SSL_CTX *, const unsigned char *, long); int SSL_CTX_use_PrivateKey_file(SSL_CTX *, const char *, int); int SSL_CTX_check_private_key(const SSL_CTX *); void SSL_CTX_set_cert_verify_callback(SSL_CTX *, @@ -331,11 +307,6 @@ int SSL_SESSION_has_ticket(const SSL_SESSION *); long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *); -/* not macros, but will be conditionally bound so can't live in functions */ -const COMP_METHOD *SSL_get_current_compression(SSL *); -const COMP_METHOD *SSL_get_current_expansion(SSL *); -const char *SSL_COMP_get_name(const COMP_METHOD *); - unsigned long SSL_set_mode(SSL *, unsigned long); unsigned long SSL_clear_mode(SSL *, unsigned long); unsigned long SSL_get_mode(SSL *); @@ -343,10 +314,6 @@ unsigned long SSL_set_options(SSL *, unsigned long); unsigned long SSL_get_options(SSL *); -void SSL_set_app_data(SSL *, char *); -char * SSL_get_app_data(SSL *); -void SSL_set_read_ahead(SSL *, int); - int SSL_want_read(const SSL *); int SSL_want_write(const SSL *); @@ -645,16 +612,6 @@ static const long Cryptography_HAS_SET_CERT_CB = 1; #endif -/* In OpenSSL 1.0.2i+ the handling of COMP_METHOD when OPENSSL_NO_COMP was - changed and we no longer need to typedef void */ -#if (defined(OPENSSL_NO_COMP) && CRYPTOGRAPHY_OPENSSL_LESS_THAN_102I) || \ - CRYPTOGRAPHY_IS_LIBRESSL -static const long Cryptography_HAS_COMPRESSION = 0; -typedef void COMP_METHOD; -#else -static const long Cryptography_HAS_COMPRESSION = 1; -#endif - static const long Cryptography_HAS_SSL_CTX_CLEAR_OPTIONS = 1; /* in OpenSSL 1.1.0 the SSL_ST values were renamed to TLS_ST and several were diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index a1547b69744e..9cf489acde06 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -33,14 +33,6 @@ def cryptography_has_ssl3_method(): ] -def cryptography_has_compression(): - return [ - "SSL_get_current_compression", - "SSL_get_current_expansion", - "SSL_COMP_get_name", - ] - - def cryptography_has_102_verification(): return [ "X509_V_ERR_SUITE_B_INVALID_VERSION", @@ -305,7 +297,6 @@ def cryptography_has_srtp(): "Cryptography_HAS_RSA_OAEP_MD": cryptography_has_rsa_oaep_md, "Cryptography_HAS_RSA_OAEP_LABEL": cryptography_has_rsa_oaep_label, "Cryptography_HAS_SSL3_METHOD": cryptography_has_ssl3_method, - "Cryptography_HAS_COMPRESSION": cryptography_has_compression, "Cryptography_HAS_102_VERIFICATION": cryptography_has_102_verification, "Cryptography_HAS_110_VERIFICATION_PARAMS": ( cryptography_has_110_verification_params From 7fc93ee7844165a3eea96939c677a84a13a44e03 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 28 Jul 2020 17:09:43 -0400 Subject: [PATCH 899/988] Remove unused code (#5360) --- src/cryptography/utils.py | 6 ------ tests/test_cryptography_utils.py | 5 ----- 2 files changed, 11 deletions(-) diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index c65768363267..bdb3dbf4776f 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -117,12 +117,6 @@ def verify_interface(iface, klass): ) -# No longer needed as of 2.2, but retained because we have external consumers -# who use it. -def bit_length(x): - return x.bit_length() - - class _DeprecatedValue(object): def __init__(self, value, message, warning_class): self.value = value diff --git a/tests/test_cryptography_utils.py b/tests/test_cryptography_utils.py index ddea7602c124..0158ef351fe0 100644 --- a/tests/test_cryptography_utils.py +++ b/tests/test_cryptography_utils.py @@ -58,8 +58,3 @@ def t(self): assert len(accesses) == 1 assert t.t == 14 assert len(accesses) == 1 - - -def test_bit_length(): - assert utils.bit_length(1) == 1 - assert utils.bit_length(11) == 4 From a13da93e43d2a7e06b345787807a0c689dc3ad85 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 30 Jul 2020 09:44:31 -0500 Subject: [PATCH 900/988] remove some more constants we don't need (#5361) these are gone in 3.0 anyway and were removed in that draft PR --- src/_cffi_src/openssl/crypto.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/_cffi_src/openssl/crypto.py b/src/_cffi_src/openssl/crypto.py index 28d513d56387..f3623b21f146 100644 --- a/src/_cffi_src/openssl/crypto.py +++ b/src/_cffi_src/openssl/crypto.py @@ -23,10 +23,6 @@ static const int OPENSSL_BUILT_ON; static const int OPENSSL_PLATFORM; static const int OPENSSL_DIR; -static const int CRYPTO_MEM_CHECK_ON; -static const int CRYPTO_MEM_CHECK_OFF; -static const int CRYPTO_MEM_CHECK_ENABLE; -static const int CRYPTO_MEM_CHECK_DISABLE; """ FUNCTIONS = """ From 241f845071a8747d0986ed60575e28840f096b79 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 30 Jul 2020 15:03:34 -0500 Subject: [PATCH 901/988] handle unnamed-but-really-named curves in 1.0.2u (#5362) * handle unnamed-but-really-named curves in 1.0.2u * handle openssl 1.0.2 not supporting better install commands on make * do what openssl didn't feel was necessary in 1.0.2t/u I didn't bind the named curve constant, fight me. --- .travis.yml | 2 ++ .travis/install.sh | 11 ++++++++--- src/_cffi_src/openssl/cryptography.py | 3 +++ src/cryptography/hazmat/backends/openssl/backend.py | 11 +++++++++++ src/cryptography/hazmat/backends/openssl/ec.py | 9 ++------- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 65f27b9c3664..532e65743111 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,8 @@ matrix: dist: xenial - python: pypy3.6-7.3.1 env: TOXENV=pypy3-nocoverage + - python: 3.8 + env: TOXENV=py38 OPENSSL=1.0.2u - python: 2.7 env: TOXENV=py27 OPENSSL=1.1.0l - python: 2.7 diff --git a/.travis/install.sh b/.travis/install.sh index 599eee0d2907..91df42285cdb 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -25,9 +25,14 @@ if [ -n "${OPENSSL}" ]; then shlib_sed make depend make -j"$(nproc)" - # avoid installing the docs - # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 - make install_sw install_ssldirs + # CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 + if [ "${OPENSSL}" == "1.0.2u" ]; then + make install + else + # avoid installing the docs on versions of OpenSSL that aren't ancient. + # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728 + make install_sw install_ssldirs + fi popd fi elif [ -n "${LIBRESSL}" ]; then diff --git a/src/_cffi_src/openssl/cryptography.py b/src/_cffi_src/openssl/cryptography.py index bae7da3ad199..d9d4a9ea0f41 100644 --- a/src/_cffi_src/openssl/cryptography.py +++ b/src/_cffi_src/openssl/cryptography.py @@ -35,6 +35,8 @@ #define CRYPTOGRAPHY_OPENSSL_102L_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x100020cf && !CRYPTOGRAPHY_IS_LIBRESSL) +#define CRYPTOGRAPHY_OPENSSL_102U_OR_GREATER \ + (OPENSSL_VERSION_NUMBER >= 0x1000215fL && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110_OR_GREATER \ (OPENSSL_VERSION_NUMBER >= 0x10100000 && !CRYPTOGRAPHY_IS_LIBRESSL) #define CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER \ @@ -62,6 +64,7 @@ TYPES = """ static const int CRYPTOGRAPHY_OPENSSL_102L_OR_GREATER; +static const int CRYPTOGRAPHY_OPENSSL_102U_OR_GREATER; static const int CRYPTOGRAPHY_OPENSSL_110_OR_GREATER; static const int CRYPTOGRAPHY_OPENSSL_110F_OR_GREATER; diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 5dd925f17703..e76d7bb5ab88 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1578,8 +1578,19 @@ def derive_elliptic_curve_private_key(self, private_value, curve): def _ec_key_new_by_curve(self, curve): curve_nid = self._elliptic_curve_to_nid(curve) + return self._ec_key_new_by_curve_nid(curve_nid) + + def _ec_key_new_by_curve_nid(self, curve_nid): ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) self.openssl_assert(ec_cdata != self._ffi.NULL) + # Setting the ASN.1 flag to OPENSSL_EC_NAMED_CURVE is + # only necessary on OpenSSL 1.0.2t/u. Once we drop support for 1.0.2 + # we can remove this as it's done automatically when getting an EC_KEY + # from new_by_curve_name + # CRYPTOGRAPHY_OPENSSL_102U_OR_GREATER + self._lib.EC_KEY_set_asn1_flag( + ec_cdata, backend._lib.OPENSSL_EC_NAMED_CURVE + ) return self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) def load_der_ocsp_request(self, data): diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py index 3ecec0da2009..bf61bcf16b20 100644 --- a/src/cryptography/hazmat/backends/openssl/ec.py +++ b/src/cryptography/hazmat/backends/openssl/ec.py @@ -47,7 +47,7 @@ def _ec_key_curve_sn(backend, ec_key): # explicitly encoded a curve with the same parameters as a named curve. # Don't do that. if ( - backend._lib.CRYPTOGRAPHY_OPENSSL_110_OR_GREATER + backend._lib.CRYPTOGRAPHY_OPENSSL_102U_OR_GREATER and backend._lib.EC_GROUP_get_asn1_flag(group) == 0 ): raise NotImplementedError( @@ -199,12 +199,7 @@ def public_key(self): self._backend.openssl_assert(group != self._backend._ffi.NULL) curve_nid = self._backend._lib.EC_GROUP_get_curve_name(group) - - public_ec_key = self._backend._lib.EC_KEY_new_by_curve_name(curve_nid) - self._backend.openssl_assert(public_ec_key != self._backend._ffi.NULL) - public_ec_key = self._backend._ffi.gc( - public_ec_key, self._backend._lib.EC_KEY_free - ) + public_ec_key = self._backend._ec_key_new_by_curve_nid(curve_nid) point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) self._backend.openssl_assert(point != self._backend._ffi.NULL) From 0140054a326f263cb8c8756a9c4ea84be5c72eb4 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Jul 2020 16:43:43 -0400 Subject: [PATCH 902/988] Commit to dropping OpenSSL 1.0.2 (#5363) --- CHANGELOG.rst | 5 ++--- src/cryptography/hazmat/bindings/openssl/binding.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1c54115022de..23566ce4faca 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,9 +12,8 @@ Changelog :term:`U-label` parsing in various X.509 classes. This support was originally deprecated in version 2.1 and moved to an extra in 2.5. * Deprecated OpenSSL 1.0.2 support. OpenSSL 1.0.2 is no longer supported by - the OpenSSL project. At this time there is no time table for dropping - support, however we strongly encourage all users to upgrade or install - ``cryptography`` from a wheel. + the OpenSSL project. The next version of ``cryptography`` will drop support + for it. .. _v3-0: diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 73340e7cf04f..e462201e2634 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -170,7 +170,7 @@ def _verify_openssl_version(lib): ): warnings.warn( "OpenSSL version 1.0.2 is no longer supported by the OpenSSL " - "project, please upgrade. A future version of cryptography will " + "project, please upgrade. The next version of cryptography will " "drop support for it.", utils.CryptographyDeprecationWarning, ) From d9c821eaf9f6d0816802736eda88086ac98a9d66 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 30 Jul 2020 17:03:33 -0400 Subject: [PATCH 903/988] Attempt to retry when downloading OpenSSL (#5364) * Attempt to retry when downloading OpenSSL * logging --- .github/workflows/download_openssl.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index cb3a494cb1f8..99612ab79d48 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -9,6 +9,19 @@ def get_response(session, url, token): + # Retry on non-502s + for i in range(5): + response = session.get( + url, headers={"Authorization": "token " + token} + ) + if response.status_code != 200: + print( + "HTTP error ({}) fetching {}, retrying".format( + response.status_code, url + ) + ) + continue + return response response = session.get(url, headers={"Authorization": "token " + token}) if response.status_code != 200: raise ValueError( From 80a4ce7b9ddf285b7a75209dd4f01586ed76a8d6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Aug 2020 15:48:30 -0500 Subject: [PATCH 904/988] check if a value is null before we gc (#5369) --- src/cryptography/hazmat/backends/openssl/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index e76d7bb5ab88..e455c1821a27 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2480,8 +2480,8 @@ def load_key_and_certificates_from_pkcs12(self, data, password): num = self._lib.sk_X509_num(sk_x509_ptr[0]) for i in range(num): x509 = self._lib.sk_X509_value(sk_x509, i) - x509 = self._ffi.gc(x509, self._lib.X509_free) self.openssl_assert(x509 != self._ffi.NULL) + x509 = self._ffi.gc(x509, self._lib.X509_free) additional_certificates.append(_Certificate(self, x509)) return (key, cert, additional_certificates) From 6d68bfdaeeab1186b9ce93a2b9253339853e58e6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 2 Aug 2020 16:28:54 -0500 Subject: [PATCH 905/988] add basic PKCS7 test vectors (#5370) --- docs/development/test-vectors.rst | 8 ++ .../pkcs7/amazon-roots.p7b | Bin 0 -> 1848 bytes .../cryptography_vectors/pkcs7/enveloped.pem | 91 ++++++++++++++++++ vectors/cryptography_vectors/pkcs7/isrg.pem | 33 +++++++ 4 files changed, 132 insertions(+) create mode 100644 vectors/cryptography_vectors/pkcs7/amazon-roots.p7b create mode 100644 vectors/cryptography_vectors/pkcs7/enveloped.pem create mode 100644 vectors/cryptography_vectors/pkcs7/isrg.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index d2508203c7a6..720bbbfb1cb7 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -569,6 +569,14 @@ Custom PKCS12 Test Vectors (``x509/custom/ca/ca.pem``) encrypted via AES 256 CBC with the password ``cryptography`` and no private key. +Custom PKCS7 Test Vectors +~~~~~~~~~~~~~~~~~~~~~~~~~ +* ``pkcs7/isrg.pem`` - A PEM encoded PKCS7 file containing the ISRG X1 root + CA. +* ``pkcs7/amazon-roots.p7b`` - A DER encoded PCKS7 file containing Amazon Root + CA 2 and 3. +* ``pkcs7/enveloped.pem`` - A PEM encoded PKCS7 file with enveloped data. + Custom OpenSSH Test Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/pkcs7/amazon-roots.p7b b/vectors/cryptography_vectors/pkcs7/amazon-roots.p7b new file mode 100644 index 0000000000000000000000000000000000000000..cb027da5aa5312180731f3e78845b42e7f5d872c GIT binary patch literal 1848 zcmcIldo+}37@zO^7zSfxs>z+UOls&eVv0&qEs`M(l)g z8O%ZH;+$U`8~hq_na4|BT*ZfHq2=> zAOq&oVLAu^h6s2W3gpt)(GlMxmw{Y_89oeeQCdMS~^A}zxFPDg|rs=&A<0KzK$0JNPV zBBy zI;$U0J6J#A#Jj6sq1@kQ@OrjU_~uraR#bwSS!U?ASR? ze7qt1kxDtOZn=PvEdsUzbr9W2?0j7H#hFb=URtqgX0Tu6Y|o8nbLuqTo0ivvHIF1u zvcb{uE7_G-XNKxGeyt)bn6g%`ew`Yy&PKfpj(Ztw1~a5BUWDcYtU6Nep45roj7o%JSz$M&Fd|>|M6E=bi3F7Ui*He z$-X8|@eT#nCiV-Yif=J#PfSt*qr{Wcjc&Sr)7~k1(DHhKEDwLQbmr?+pZaZdHX(=e^>qKx6b{>(Jh#-G_7MMj#hX-uYsJFu{_tf*!348HVcF;i3XeI(T+-# zIUluqYVpESvrNE{y(sS{=2YBq8@N4+j&2?MEPl!?=nfwcgxu%~nKG&mG04E?@RIp% zN(rP!=gQi%Q|#94XKTdl@Q!o)Zw6em=gl1+)d@VU?L!GnS|uV4_$$b7T>TC(Aa?Au zo6Iqt!tJ^;nsZr}Ir|`>(9>vGM72zxp@cY@H0VWqbA`OM=D7E*hd$X_r^`E}tVP*& zPx@(&KQy=y8BX_DbTgefNz8Zf86Mf--@Y$uqA3CAJJLM#?rp&nVLW($!bR3)UZ9U6 z;9SU=tu8%|M`hba!s8>%+w>DW^p1#F+tOEPQt=D#hsr<*Kmh-A5BUmX_OMvm9kiJ@ z>T@cyOYA-3wA^Kqb&$9WK-?;%|Ds6C@6LPC{Bbh#wAmm6;%6wP-SaG*BBVwp7nOfI z8#Nzrg2qesXn}jsN)=eoFvjGuk92OXw0!Uf>(GW{T~+g^h>?A3W>MnYG{T{_)RRfk zK`aF*rrPkQfD+m{6f-#S$>L0lE{7fSso75W$*%w>`ckBvmKIvjzuB4n$k(0U1Ujzq zO1kLp5l~ek=;X}lP9yMjhg?b2YmEoa_IeoX=_RcHJZw)qCE%(K*d5XqcFe0MudcW3 ze^IN;*?atOkvz%ycdIk_`EIL;l9Sm3==0x|EOlqVcoNxS;EU zdMh^wL=Jkt!d51Z=JC8!Pw5o|*M*kuYAX~BHjiDj+nTMyQQP2BlfoK(ax!73=0xDS zhBajli`F?ZQ^rBRK9@VVIEf3Sj25n4Z<|)tg}`;V#~=DERO7d{`sgS%%zU{E%Hd^% S Date: Sun, 2 Aug 2020 23:56:49 -0500 Subject: [PATCH 906/988] add docker builders, migrate travis to focal by default (#5372) * add docker builders, migrate travis to focal by default * get it right * use older versions where necessary --- .travis.yml | 13 ++++++++++--- docs/installation.rst | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 532e65743111..322b59af80de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ sudo: true -dist: bionic +dist: focal language: python @@ -27,7 +27,6 @@ matrix: # https://docs.travis-ci.com/user/languages/python/#python-versions - python: pypy2.7-7.3.1 env: TOXENV=pypy-nocoverage - dist: xenial - python: pypy3.6-7.3.1 env: TOXENV=pypy3-nocoverage - python: 3.8 @@ -82,6 +81,12 @@ matrix: - python: 3.8 services: docker env: TOXENV=py38 DOCKER=pyca/cryptography-runner-sid + - python: 3.6 + services: docker + env: TOXENV=py36 DOCKER=pyca/cryptography-runner-ubuntu-bionic + - python: 3.8 + services: docker + env: TOXENV=py38 DOCKER=pyca/cryptography-runner-ubuntu-focal - python: 2.7 services: docker env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling @@ -113,6 +118,8 @@ matrix: - python: 2.7 env: DOWNSTREAM=pyopenssl + # Tests fail on OpenSSLs that enforce reasonable key length minimums + dist: bionic - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1g - python: 2.7 @@ -129,7 +136,7 @@ matrix: env: DOWNSTREAM=certbot-josepy - python: 2.7 env: DOWNSTREAM=urllib3 - # Tests hangs when run under bionic + # Tests hang when run under bionic/focal dist: xenial install: diff --git a/docs/installation.rst b/docs/installation.rst index 388eb6b15465..e94865cef1ac 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -16,7 +16,7 @@ PyPy 7.1+, and PyPy3 7.0 on these operating systems. * x86-64 CentOS 7.x, 8.x * x86-64 Fedora (latest) * macOS 10.15 Catalina -* x86-64 Ubuntu 16.04 and rolling +* x86-64 Ubuntu 18.04, 20.04, and rolling * x86-64 Debian Stretch (9.x), Buster (10.x), Bullseye (11.x), and Sid (unstable) * x86-64 Alpine (latest) From c898871daac710f00154cb7041e3876fc66c1ef5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 4 Aug 2020 22:50:02 -0500 Subject: [PATCH 907/988] support PKCS7 certificate parsing (#5371) * support PKCS7 certificate parsing * refcounts are different in 1.0.2 * rename the functions * black * empty commit * review feedback --- CHANGELOG.rst | 5 ++ .../primitives/asymmetric/serialization.rst | 50 ++++++++++++ src/_cffi_src/openssl/nid.py | 2 + .../hazmat/backends/openssl/backend.py | 47 +++++++++++ .../hazmat/primitives/serialization/pkcs7.py | 15 ++++ tests/hazmat/primitives/test_pkcs7.py | 79 +++++++++++++++++++ 6 files changed, 198 insertions(+) create mode 100644 src/cryptography/hazmat/primitives/serialization/pkcs7.py create mode 100644 tests/hazmat/primitives/test_pkcs7.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 23566ce4faca..735937f0b98d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,11 @@ Changelog * Deprecated OpenSSL 1.0.2 support. OpenSSL 1.0.2 is no longer supported by the OpenSSL project. The next version of ``cryptography`` will drop support for it. +* Added initial support for parsing certificates from PKCS7 files with + :func:`~cryptography.hazmat.primitives.serialization.pkcs7.load_pem_pkcs7_certificates` + and + :func:`~cryptography.hazmat.primitives.serialization.pkcs7.load_der_pkcs7_certificates` + . .. _v3-0: diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index b2030609a4ce..164ba376c1f6 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -528,6 +528,56 @@ file suffix. :return bytes: Serialized PKCS12. +PKCS7 +~~~~~ + +.. currentmodule:: cryptography.hazmat.primitives.serialization.pkcs7 + +PKCS7 is a format described in :rfc:`2315`, among other specifications. It can +contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, +``p7m``, or ``p7s`` file suffix but other suffixes are also seen in the wild. + +.. note:: + + ``cryptography`` only supports parsing certificates from PKCS7 files at + this time. + +.. function:: load_pem_pkcs7_certificates(data) + + .. versionadded:: 3.1 + + Deserialize a PEM encoded PKCS7 blob to a list of certificates. PKCS7 can + contain many other types of data, including CRLs, but this function will + ignore everything except certificates. + + :param data: The data. + :type data: bytes + + :returns: A list of :class:`~cryptography.x509.Certificate`. + + :raises ValueError: If the PKCS7 data could not be loaded. + + :raises cryptography.exceptions.UnsupportedAlgorithm: If the PKCS7 data + is of a type that is not supported. + +.. function:: load_der_pkcs7_certificates(data) + + .. versionadded:: 3.1 + + Deserialize a DER encoded PKCS7 blob to a list of certificates. PKCS7 can + contain many other types of data, including CRLs, but this function will + ignore everything except certificates. + + :param data: The data. + :type data: bytes + + :returns: A list of :class:`~cryptography.x509.Certificate`. + + :raises ValueError: If the PKCS7 data could not be loaded. + + :raises cryptography.exceptions.UnsupportedAlgorithm: If the PKCS7 data + is of a type that is not supported. + Serialization Formats ~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/_cffi_src/openssl/nid.py b/src/_cffi_src/openssl/nid.py index cdd4c0dbfa68..aecdc9c0f4ed 100644 --- a/src/_cffi_src/openssl/nid.py +++ b/src/_cffi_src/openssl/nid.py @@ -25,6 +25,8 @@ static const int NID_subject_alt_name; static const int NID_crl_reason; + +static const int NID_pkcs7_signed; """ FUNCTIONS = """ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index e455c1821a27..d2df2271955e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2562,6 +2562,53 @@ def create_poly1305_ctx(self, key): return _Poly1305Context(self, key) + def load_pem_pkcs7_certificates(self, data): + utils._check_bytes("data", data) + bio = self._bytes_to_bio(data) + p7 = self._lib.PEM_read_bio_PKCS7( + bio.bio, self._ffi.NULL, self._ffi.NULL, self._ffi.NULL + ) + if p7 == self._ffi.NULL: + raise ValueError("Unable to parse PKCS7 data") + + p7 = self._ffi.gc(p7, self._lib.PKCS7_free) + return self._load_pkcs7_certificates(p7) + + def load_der_pkcs7_certificates(self, data): + utils._check_bytes("data", data) + bio = self._bytes_to_bio(data) + p7 = self._lib.d2i_PKCS7_bio(bio.bio, self._ffi.NULL) + if p7 == self._ffi.NULL: + raise ValueError("Unable to parse PKCS7 data") + + p7 = self._ffi.gc(p7, self._lib.PKCS7_free) + return self._load_pkcs7_certificates(p7) + + def _load_pkcs7_certificates(self, p7): + nid = self._lib.OBJ_obj2nid(p7.type) + self.openssl_assert(nid != self._lib.NID_undef) + if nid != self._lib.NID_pkcs7_signed: + raise UnsupportedAlgorithm( + "Only basic signed structures are currently supported. NID" + " for this data was {}".format(nid), + _Reasons.UNSUPPORTED_SERIALIZATION, + ) + + sk_x509 = p7.d.sign.cert + num = self._lib.sk_X509_num(sk_x509) + certs = [] + for i in range(num): + x509 = self._lib.sk_X509_value(sk_x509, i) + self.openssl_assert(x509 != self._ffi.NULL) + res = self._lib.X509_up_ref(x509) + # When OpenSSL is less than 1.1.0 up_ref returns the current + # refcount. On 1.1.0+ it returns 1 for success. + self.openssl_assert(res >= 1) + x509 = self._ffi.gc(x509, self._lib.X509_free) + certs.append(_Certificate(self, x509)) + + return certs + class GetCipherByName(object): def __init__(self, fmt): diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs7.py b/src/cryptography/hazmat/primitives/serialization/pkcs7.py new file mode 100644 index 000000000000..59da844dea95 --- /dev/null +++ b/src/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -0,0 +1,15 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.hazmat.backends import default_backend + + +def load_pem_pkcs7_certificates(data): + return default_backend().load_pem_pkcs7_certificates(data) + + +def load_der_pkcs7_certificates(data): + return default_backend().load_der_pkcs7_certificates(data) diff --git a/tests/hazmat/primitives/test_pkcs7.py b/tests/hazmat/primitives/test_pkcs7.py new file mode 100644 index 000000000000..b7afe7512ac2 --- /dev/null +++ b/tests/hazmat/primitives/test_pkcs7.py @@ -0,0 +1,79 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import os + +import pytest + +from cryptography import x509 +from cryptography.exceptions import _Reasons +from cryptography.hazmat.primitives.serialization import pkcs7 + +from .utils import load_vectors_from_file +from ...utils import raises_unsupported_algorithm + + +class TestPKCS7Loading(object): + def test_load_invalid_der_pkcs7(self): + with pytest.raises(ValueError): + pkcs7.load_der_pkcs7_certificates(b"nonsense") + + def test_load_invalid_pem_pkcs7(self): + with pytest.raises(ValueError): + pkcs7.load_pem_pkcs7_certificates(b"nonsense") + + def test_not_bytes_der(self): + with pytest.raises(TypeError): + pkcs7.load_der_pkcs7_certificates(38) + + def test_not_bytes_pem(self): + with pytest.raises(TypeError): + pkcs7.load_pem_pkcs7_certificates(38) + + def test_load_pkcs7_pem(self): + certs = load_vectors_from_file( + os.path.join("pkcs7", "isrg.pem"), + lambda pemfile: pkcs7.load_pem_pkcs7_certificates(pemfile.read()), + mode="rb", + ) + assert len(certs) == 1 + assert certs[0].subject.get_attributes_for_oid( + x509.oid.NameOID.COMMON_NAME + ) == [ + x509.NameAttribute(x509.oid.NameOID.COMMON_NAME, u"ISRG Root X1") + ] + + def test_load_pkcs7_der(self): + certs = load_vectors_from_file( + os.path.join("pkcs7", "amazon-roots.p7b"), + lambda derfile: pkcs7.load_der_pkcs7_certificates(derfile.read()), + mode="rb", + ) + assert len(certs) == 2 + assert certs[0].subject.get_attributes_for_oid( + x509.oid.NameOID.COMMON_NAME + ) == [ + x509.NameAttribute( + x509.oid.NameOID.COMMON_NAME, u"Amazon Root CA 3" + ) + ] + assert certs[1].subject.get_attributes_for_oid( + x509.oid.NameOID.COMMON_NAME + ) == [ + x509.NameAttribute( + x509.oid.NameOID.COMMON_NAME, u"Amazon Root CA 2" + ) + ] + + def test_load_pkcs7_unsupported_type(self): + with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_SERIALIZATION): + load_vectors_from_file( + os.path.join("pkcs7", "enveloped.pem"), + lambda pemfile: pkcs7.load_pem_pkcs7_certificates( + pemfile.read() + ), + mode="rb", + ) From cfa7fb74bc92aeafb4d64ce0e19ae8f2cae072f5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 5 Aug 2020 00:22:53 -0500 Subject: [PATCH 908/988] pyopenssl can run on focal now (#5374) --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 322b59af80de..6a09378e7687 100644 --- a/.travis.yml +++ b/.travis.yml @@ -118,8 +118,6 @@ matrix: - python: 2.7 env: DOWNSTREAM=pyopenssl - # Tests fail on OpenSSLs that enforce reasonable key length minimums - dist: bionic - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1g - python: 2.7 From 7deca00c0b81091d1e43f9430ffd430ff9019d1e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 5 Aug 2020 16:07:57 -0400 Subject: [PATCH 909/988] Reduce the usage of python2 in CI for downstreams (#5375) --- .travis.yml | 10 +++++----- tox.ini | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6a09378e7687..efc2b17a9519 100644 --- a/.travis.yml +++ b/.travis.yml @@ -109,14 +109,14 @@ matrix: apt: packages: - libenchant-dev - - python: 2.7 + - python: 3.8 services: docker env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/ - python: 3.8 env: TOXENV=packaging - - python: 2.7 + - python: 3.8 env: DOWNSTREAM=pyopenssl - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1g @@ -128,11 +128,11 @@ matrix: # BOTO_CONFIG works around this boto issue on travis: # https://github.com/boto/boto/issues/3717 env: DOWNSTREAM=dynamodb-encryption-sdk BOTO_CONFIG=/dev/null - - python: 2.7 + - python: 3.8 env: DOWNSTREAM=certbot - - python: 2.7 + - python: 3.8 env: DOWNSTREAM=certbot-josepy - - python: 2.7 + - python: 3.8 env: DOWNSTREAM=urllib3 # Tests hang when run under bionic/focal dist: xenial diff --git a/tox.ini b/tox.ini index 8c845707f75e..bc5de1ad9953 100644 --- a/tox.ini +++ b/tox.ini @@ -55,7 +55,7 @@ commands = [testenv:docs-linkcheck] extras = docs -basepython = python2.7 +basepython = python3 commands = sphinx-build -W -b linkcheck docs docs/_build/html From 4d2b52d4d1a8c9b57a0e5e3096769b2736c5f827 Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Thu, 6 Aug 2020 06:32:08 +1000 Subject: [PATCH 910/988] Add initial OpenDev ARM64 testing (#5341) This is the initial configuration for Zuul to run pyca/cryptography tox jobs on a range of ARM64 nodes provided by OpenDev. The underlying ARM64 resources are donated for use by the OpenDev project by Linaro. This is under discussion at https://github.com/pyca/cryptography/issues/5339 If the OpenDev Zuul app (https://github.com/apps/opendev-zuul) is added to this repository, it should be able to speculatively test and run these jobs (however, some configuration will be required on the OpenDev side before this will happen). This is currently a very simple run of tox on the code. For basic job documentation see https://zuul-ci.org/docs/zuul/reference/jobs.html. These jobs inherit from the opendev base job defined in https://opendev.org/opendev/base-jobs. This handles the node setup, initial clone of pull requests, etc. and then after the job runs the log collection, upload and publishing steps. This in turn uses a lot of reusable components from https://zuul-ci.org/docs/zuul-jobs/ --- .zuul.d/jobs.yaml | 33 +++++++++++++++++++++++++++++ .zuul.d/project.yaml | 7 ++++++ .zuul.playbooks/playbooks/main.yaml | 32 ++++++++++++++++++++++++++++ MANIFEST.in | 3 +++ 4 files changed, 75 insertions(+) create mode 100644 .zuul.d/jobs.yaml create mode 100644 .zuul.d/project.yaml create mode 100644 .zuul.playbooks/playbooks/main.yaml diff --git a/.zuul.d/jobs.yaml b/.zuul.d/jobs.yaml new file mode 100644 index 000000000000..66cdc1712a7a --- /dev/null +++ b/.zuul.d/jobs.yaml @@ -0,0 +1,33 @@ +- job: + name: pyca-cryptography-base + abstract: true + description: Run pyca/cryptography unit testing + run: .zuul.playbooks/playbooks/main.yaml + +- job: + name: pyca-cryptography-ubuntu-focal-py38-arm64 + parent: pyca-cryptography-base + nodeset: ubuntu-focal-arm64 + vars: + tox_envlist: py38 + +- job: + name: pyca-cryptography-ubuntu-bionic-py36-arm64 + parent: pyca-cryptography-base + nodeset: ubuntu-bionic-arm64 + vars: + tox_envlist: py36 + +- job: + name: pyca-cryptography-ubuntu-xenial-py27-arm64 + parent: pyca-cryptography-base + nodeset: ubuntu-xenial-arm64 + vars: + tox_envlist: py27 + +- job: + name: pyca-cryptography-centos-8-py36-arm64 + parent: pyca-cryptography-base + nodeset: centos-8-arm64 + vars: + tox_envlist: py36 diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml new file mode 100644 index 000000000000..b686107e68e2 --- /dev/null +++ b/.zuul.d/project.yaml @@ -0,0 +1,7 @@ +- project: + check: + jobs: + - pyca-cryptography-ubuntu-focal-py38-arm64 + - pyca-cryptography-ubuntu-bionic-py36-arm64 + - pyca-cryptography-ubuntu-xenial-py27-arm64 + - pyca-cryptography-centos-8-py36-arm64 diff --git a/.zuul.playbooks/playbooks/main.yaml b/.zuul.playbooks/playbooks/main.yaml new file mode 100644 index 000000000000..bb1a36603d35 --- /dev/null +++ b/.zuul.playbooks/playbooks/main.yaml @@ -0,0 +1,32 @@ +- hosts: all + tasks: + + - name: Install tox + include_role: + name: ensure-tox + + - name: Install required packages + package: + name: + - build-essential + - libssl-dev + - libffi-dev + - python3-dev + become: yes + when: ansible_distribution in ['Debian', 'Ubuntu'] + + - name: Install required packages + package: + name: + - redhat-rpm-config + - gcc + - libffi-devel + - openssl-devel + - python3-devel + become: yes + when: ansible_distribution == 'CentOS' + + - name: Run tox + include_role: + name: tox + diff --git a/MANIFEST.in b/MANIFEST.in index f1fc294be5fa..7e97167a1b63 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -21,3 +21,6 @@ recursive-exclude .travis * recursive-exclude .github * exclude release.py .coveragerc codecov.yml dev-requirements.txt rtd-requirements.txt tox.ini + +recursive-exclude .zuul.d * +recursive-exclude .zuul.playbooks * From 3a238400ac2708501ec0a2695a2bdb95043eb5de Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 5 Aug 2020 22:11:06 -0400 Subject: [PATCH 911/988] define SYS_getrandom on linux arm64 (#5378) --- src/_cffi_src/openssl/src/osrandom_engine.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/src/osrandom_engine.h b/src/_cffi_src/openssl/src/osrandom_engine.h index 47089b2eb1bc..93d918b88bf5 100644 --- a/src/_cffi_src/openssl/src/osrandom_engine.h +++ b/src/_cffi_src/openssl/src/osrandom_engine.h @@ -34,10 +34,12 @@ * wheels, since that's the predominant way you get a situation where * you don't have SYS_getrandom at compile time but do have the syscall * at runtime */ - #if defined __x86_64__ + #if defined(__x86_64__) #define SYS_getrandom 318 #elif defined(__i386__) #define SYS_getrandom 355 + #elif defined(__aarch64__) + #define SYS_getrandom 278 #endif #endif #endif /* __linux__ */ From dabc36d7e49eb3dff344c8e8f29687e40da561ee Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 5 Aug 2020 22:11:36 -0400 Subject: [PATCH 912/988] Update which PyPy versions we test against (#5377) refs #5376 --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index e94865cef1ac..1a371f4d9ca6 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -11,7 +11,7 @@ Supported platforms ------------------- Currently we test ``cryptography`` on Python 2.7, 3.5+, -PyPy 7.1+, and PyPy3 7.0 on these operating systems. +PyPy 7.3.1, and PyPy3 7.3.1 on these operating systems. * x86-64 CentOS 7.x, 8.x * x86-64 Fedora (latest) From 1372bc87a2f00c5a95091b2bb00b0044173e86ec Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 7 Aug 2020 18:42:25 -0400 Subject: [PATCH 913/988] Run pep8 and packaging in the same job (#5380) --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index efc2b17a9519..65845fa75728 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ branches: matrix: include: - python: 3.8 - env: TOXENV=pep8 + env: TOXENV=pep8,packaging # Setting 'python' is just to make travis's UI a bit prettier - python: 3.6 env: TOXENV=py36 @@ -113,8 +113,6 @@ matrix: services: docker env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/ - - python: 3.8 - env: TOXENV=packaging - python: 3.8 env: DOWNSTREAM=pyopenssl From 9e84c88ad3c5bf8b404fe86e22bdadd6b56e58ec Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 7 Aug 2020 21:27:17 -0400 Subject: [PATCH 914/988] Sleep after errors to increase the chance of success (#5382) --- .github/workflows/download_openssl.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py index 99612ab79d48..1d5e3bfb471a 100644 --- a/.github/workflows/download_openssl.py +++ b/.github/workflows/download_openssl.py @@ -1,6 +1,7 @@ import io import os import sys +import time import zipfile import requests @@ -20,6 +21,7 @@ def get_response(session, url, token): response.status_code, url ) ) + time.sleep(2) continue return response response = session.get(url, headers={"Authorization": "token " + token}) From 77099636b6559bf4c77758192ed1c6fd7cef0a28 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 9 Aug 2020 23:57:17 -0500 Subject: [PATCH 915/988] separate these into two test files (#5383) * separate these into two test files AES-GCM is so painful in collection that I want it in another file * fix flake8 --- tests/hazmat/primitives/test_aes.py | 183 +--------------------- tests/hazmat/primitives/test_aes_gcm.py | 197 ++++++++++++++++++++++++ 2 files changed, 198 insertions(+), 182 deletions(-) create mode 100644 tests/hazmat/primitives/test_aes_gcm.py diff --git a/tests/hazmat/primitives/test_aes.py b/tests/hazmat/primitives/test_aes.py index 03328caff061..f98ba6fddff8 100644 --- a/tests/hazmat/primitives/test_aes.py +++ b/tests/hazmat/primitives/test_aes.py @@ -12,7 +12,7 @@ from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives.ciphers import algorithms, base, modes -from .utils import _load_all_params, generate_aead_test, generate_encrypt_test +from .utils import _load_all_params, generate_encrypt_test from ...doubles import DummyMode from ...utils import load_nist_vectors @@ -237,187 +237,6 @@ class TestAESModeCTR(object): ) -@pytest.mark.supported( - only_if=lambda backend: backend.cipher_supported( - algorithms.AES(b"\x00" * 16), modes.GCM(b"\x00" * 12) - ), - skip_message="Does not support AES GCM", -) -@pytest.mark.requires_backend_interface(interface=CipherBackend) -class TestAESModeGCM(object): - test_gcm = generate_aead_test( - load_nist_vectors, - os.path.join("ciphers", "AES", "GCM"), - [ - "gcmDecrypt128.rsp", - "gcmDecrypt192.rsp", - "gcmDecrypt256.rsp", - "gcmEncryptExtIV128.rsp", - "gcmEncryptExtIV192.rsp", - "gcmEncryptExtIV256.rsp", - ], - algorithms.AES, - modes.GCM, - ) - - def test_gcm_tag_with_only_aad(self, backend): - key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") - iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") - aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") - tag = binascii.unhexlify(b"0f247e7f9c2505de374006738018493b") - - cipher = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ) - encryptor = cipher.encryptor() - encryptor.authenticate_additional_data(aad) - encryptor.finalize() - assert encryptor.tag == tag - - def test_gcm_ciphertext_with_no_aad(self, backend): - key = binascii.unhexlify(b"e98b72a9881a84ca6b76e0f43e68647a") - iv = binascii.unhexlify(b"8b23299fde174053f3d652ba") - ct = binascii.unhexlify(b"5a3c1cf1985dbb8bed818036fdd5ab42") - tag = binascii.unhexlify(b"23c7ab0f952b7091cd324835043b5eb5") - pt = binascii.unhexlify(b"28286a321293253c3e0aa2704a278032") - - cipher = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ) - encryptor = cipher.encryptor() - computed_ct = encryptor.update(pt) + encryptor.finalize() - assert computed_ct == ct - assert encryptor.tag == tag - - def test_gcm_ciphertext_limit(self, backend): - encryptor = base.Cipher( - algorithms.AES(b"\x00" * 16), - modes.GCM(b"\x01" * 16), - backend=backend, - ).encryptor() - encryptor._bytes_processed = modes.GCM._MAX_ENCRYPTED_BYTES - 16 - encryptor.update(b"0" * 16) - assert encryptor._bytes_processed == modes.GCM._MAX_ENCRYPTED_BYTES - with pytest.raises(ValueError): - encryptor.update(b"0") - - def test_gcm_aad_limit(self, backend): - encryptor = base.Cipher( - algorithms.AES(b"\x00" * 16), - modes.GCM(b"\x01" * 16), - backend=backend, - ).encryptor() - encryptor._aad_bytes_processed = modes.GCM._MAX_AAD_BYTES - 16 - encryptor.authenticate_additional_data(b"0" * 16) - assert encryptor._aad_bytes_processed == modes.GCM._MAX_AAD_BYTES - with pytest.raises(ValueError): - encryptor.authenticate_additional_data(b"0") - - def test_gcm_ciphertext_increments(self, backend): - encryptor = base.Cipher( - algorithms.AES(b"\x00" * 16), - modes.GCM(b"\x01" * 16), - backend=backend, - ).encryptor() - encryptor.update(b"0" * 8) - assert encryptor._bytes_processed == 8 - encryptor.update(b"0" * 7) - assert encryptor._bytes_processed == 15 - encryptor.update(b"0" * 18) - assert encryptor._bytes_processed == 33 - - def test_gcm_aad_increments(self, backend): - encryptor = base.Cipher( - algorithms.AES(b"\x00" * 16), - modes.GCM(b"\x01" * 16), - backend=backend, - ).encryptor() - encryptor.authenticate_additional_data(b"0" * 8) - assert encryptor._aad_bytes_processed == 8 - encryptor.authenticate_additional_data(b"0" * 18) - assert encryptor._aad_bytes_processed == 26 - - def test_gcm_tag_decrypt_none(self, backend): - key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") - iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") - aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") - - encryptor = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ).encryptor() - encryptor.authenticate_additional_data(aad) - encryptor.finalize() - - decryptor = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ).decryptor() - decryptor.authenticate_additional_data(aad) - with pytest.raises(ValueError): - decryptor.finalize() - - def test_gcm_tag_decrypt_mode(self, backend): - key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") - iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") - aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") - - encryptor = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ).encryptor() - encryptor.authenticate_additional_data(aad) - encryptor.finalize() - tag = encryptor.tag - - decryptor = base.Cipher( - algorithms.AES(key), modes.GCM(iv, tag), backend=backend - ).decryptor() - decryptor.authenticate_additional_data(aad) - decryptor.finalize() - - def test_gcm_tag_decrypt_finalize(self, backend): - key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") - iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") - aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") - - encryptor = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ).encryptor() - encryptor.authenticate_additional_data(aad) - encryptor.finalize() - tag = encryptor.tag - - decryptor = base.Cipher( - algorithms.AES(key), modes.GCM(iv), backend=backend - ).decryptor() - decryptor.authenticate_additional_data(aad) - - decryptor.finalize_with_tag(tag) - - def test_gcm_tag_decrypt_finalize_tag_length(self, backend): - decryptor = base.Cipher( - algorithms.AES(b"0" * 16), modes.GCM(b"0" * 12), backend=backend - ).decryptor() - with pytest.raises(ValueError): - decryptor.finalize_with_tag(b"tagtooshort") - - def test_buffer_protocol(self, backend): - data = bytearray(b"helloworld") - enc = base.Cipher( - algorithms.AES(bytearray(b"\x00" * 16)), - modes.GCM(bytearray(b"\x00" * 12)), - backend, - ).encryptor() - enc.authenticate_additional_data(bytearray(b"foo")) - ct = enc.update(data) + enc.finalize() - dec = base.Cipher( - algorithms.AES(bytearray(b"\x00" * 16)), - modes.GCM(bytearray(b"\x00" * 12), enc.tag), - backend, - ).decryptor() - dec.authenticate_additional_data(bytearray(b"foo")) - pt = dec.update(ct) + dec.finalize() - assert pt == data - - @pytest.mark.parametrize( "mode", [ diff --git a/tests/hazmat/primitives/test_aes_gcm.py b/tests/hazmat/primitives/test_aes_gcm.py new file mode 100644 index 000000000000..f289f18b11cc --- /dev/null +++ b/tests/hazmat/primitives/test_aes_gcm.py @@ -0,0 +1,197 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import binascii +import os + +import pytest + +from cryptography.hazmat.backends.interfaces import CipherBackend +from cryptography.hazmat.primitives.ciphers import algorithms, base, modes + +from .utils import generate_aead_test +from ...utils import load_nist_vectors + + +@pytest.mark.supported( + only_if=lambda backend: backend.cipher_supported( + algorithms.AES(b"\x00" * 16), modes.GCM(b"\x00" * 12) + ), + skip_message="Does not support AES GCM", +) +@pytest.mark.requires_backend_interface(interface=CipherBackend) +class TestAESModeGCM(object): + test_gcm = generate_aead_test( + load_nist_vectors, + os.path.join("ciphers", "AES", "GCM"), + [ + "gcmDecrypt128.rsp", + "gcmDecrypt192.rsp", + "gcmDecrypt256.rsp", + "gcmEncryptExtIV128.rsp", + "gcmEncryptExtIV192.rsp", + "gcmEncryptExtIV256.rsp", + ], + algorithms.AES, + modes.GCM, + ) + + def test_gcm_tag_with_only_aad(self, backend): + key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") + iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") + aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") + tag = binascii.unhexlify(b"0f247e7f9c2505de374006738018493b") + + cipher = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ) + encryptor = cipher.encryptor() + encryptor.authenticate_additional_data(aad) + encryptor.finalize() + assert encryptor.tag == tag + + def test_gcm_ciphertext_with_no_aad(self, backend): + key = binascii.unhexlify(b"e98b72a9881a84ca6b76e0f43e68647a") + iv = binascii.unhexlify(b"8b23299fde174053f3d652ba") + ct = binascii.unhexlify(b"5a3c1cf1985dbb8bed818036fdd5ab42") + tag = binascii.unhexlify(b"23c7ab0f952b7091cd324835043b5eb5") + pt = binascii.unhexlify(b"28286a321293253c3e0aa2704a278032") + + cipher = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ) + encryptor = cipher.encryptor() + computed_ct = encryptor.update(pt) + encryptor.finalize() + assert computed_ct == ct + assert encryptor.tag == tag + + def test_gcm_ciphertext_limit(self, backend): + encryptor = base.Cipher( + algorithms.AES(b"\x00" * 16), + modes.GCM(b"\x01" * 16), + backend=backend, + ).encryptor() + encryptor._bytes_processed = modes.GCM._MAX_ENCRYPTED_BYTES - 16 + encryptor.update(b"0" * 16) + assert encryptor._bytes_processed == modes.GCM._MAX_ENCRYPTED_BYTES + with pytest.raises(ValueError): + encryptor.update(b"0") + + def test_gcm_aad_limit(self, backend): + encryptor = base.Cipher( + algorithms.AES(b"\x00" * 16), + modes.GCM(b"\x01" * 16), + backend=backend, + ).encryptor() + encryptor._aad_bytes_processed = modes.GCM._MAX_AAD_BYTES - 16 + encryptor.authenticate_additional_data(b"0" * 16) + assert encryptor._aad_bytes_processed == modes.GCM._MAX_AAD_BYTES + with pytest.raises(ValueError): + encryptor.authenticate_additional_data(b"0") + + def test_gcm_ciphertext_increments(self, backend): + encryptor = base.Cipher( + algorithms.AES(b"\x00" * 16), + modes.GCM(b"\x01" * 16), + backend=backend, + ).encryptor() + encryptor.update(b"0" * 8) + assert encryptor._bytes_processed == 8 + encryptor.update(b"0" * 7) + assert encryptor._bytes_processed == 15 + encryptor.update(b"0" * 18) + assert encryptor._bytes_processed == 33 + + def test_gcm_aad_increments(self, backend): + encryptor = base.Cipher( + algorithms.AES(b"\x00" * 16), + modes.GCM(b"\x01" * 16), + backend=backend, + ).encryptor() + encryptor.authenticate_additional_data(b"0" * 8) + assert encryptor._aad_bytes_processed == 8 + encryptor.authenticate_additional_data(b"0" * 18) + assert encryptor._aad_bytes_processed == 26 + + def test_gcm_tag_decrypt_none(self, backend): + key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") + iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") + aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") + + encryptor = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ).encryptor() + encryptor.authenticate_additional_data(aad) + encryptor.finalize() + + decryptor = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ).decryptor() + decryptor.authenticate_additional_data(aad) + with pytest.raises(ValueError): + decryptor.finalize() + + def test_gcm_tag_decrypt_mode(self, backend): + key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") + iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") + aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") + + encryptor = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ).encryptor() + encryptor.authenticate_additional_data(aad) + encryptor.finalize() + tag = encryptor.tag + + decryptor = base.Cipher( + algorithms.AES(key), modes.GCM(iv, tag), backend=backend + ).decryptor() + decryptor.authenticate_additional_data(aad) + decryptor.finalize() + + def test_gcm_tag_decrypt_finalize(self, backend): + key = binascii.unhexlify(b"5211242698bed4774a090620a6ca56f3") + iv = binascii.unhexlify(b"b1e1349120b6e832ef976f5d") + aad = binascii.unhexlify(b"b6d729aab8e6416d7002b9faa794c410d8d2f193") + + encryptor = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ).encryptor() + encryptor.authenticate_additional_data(aad) + encryptor.finalize() + tag = encryptor.tag + + decryptor = base.Cipher( + algorithms.AES(key), modes.GCM(iv), backend=backend + ).decryptor() + decryptor.authenticate_additional_data(aad) + + decryptor.finalize_with_tag(tag) + + def test_gcm_tag_decrypt_finalize_tag_length(self, backend): + decryptor = base.Cipher( + algorithms.AES(b"0" * 16), modes.GCM(b"0" * 12), backend=backend + ).decryptor() + with pytest.raises(ValueError): + decryptor.finalize_with_tag(b"tagtooshort") + + def test_buffer_protocol(self, backend): + data = bytearray(b"helloworld") + enc = base.Cipher( + algorithms.AES(bytearray(b"\x00" * 16)), + modes.GCM(bytearray(b"\x00" * 12)), + backend, + ).encryptor() + enc.authenticate_additional_data(bytearray(b"foo")) + ct = enc.update(data) + enc.finalize() + dec = base.Cipher( + algorithms.AES(bytearray(b"\x00" * 16)), + modes.GCM(bytearray(b"\x00" * 12), enc.tag), + backend, + ).decryptor() + dec.authenticate_additional_data(bytearray(b"foo")) + pt = dec.update(ct) + dec.finalize() + assert pt == data From 95a5bac2017e3def8e8efe3b25b46eb9ca2da01a Mon Sep 17 00:00:00 2001 From: stphnlyd Date: Wed, 12 Aug 2020 00:27:44 +0800 Subject: [PATCH 916/988] return from void function cannot compile on solaris studio (#5385) --- src/_cffi_src/openssl/hmac.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_cffi_src/openssl/hmac.py b/src/_cffi_src/openssl/hmac.py index b006e642d33c..2bc70068ed6b 100644 --- a/src/_cffi_src/openssl/hmac.py +++ b/src/_cffi_src/openssl/hmac.py @@ -37,7 +37,7 @@ void Cryptography_HMAC_CTX_free(HMAC_CTX *ctx) { #if CRYPTOGRAPHY_OPENSSL_110_OR_GREATER - return HMAC_CTX_free(ctx); + HMAC_CTX_free(ctx); #else if (ctx != NULL) { HMAC_CTX_cleanup(ctx); From e597fa019d7aa335386fcf63b086012dc4b4f87f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 14 Aug 2020 13:45:42 -0500 Subject: [PATCH 917/988] deprecate support for python 3.5 (#5387) --- CHANGELOG.rst | 2 ++ src/cryptography/__init__.py | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 735937f0b98d..1a95a9eb8b8c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,8 @@ Changelog * Deprecated OpenSSL 1.0.2 support. OpenSSL 1.0.2 is no longer supported by the OpenSSL project. The next version of ``cryptography`` will drop support for it. +* Deprecated support for Python 3.5. This version sees very little use and will + be removed in the next release. * Added initial support for parsing certificates from PKCS7 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs7.load_pem_pkcs7_certificates` and diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index f128502e2fd5..f16efce6ba78 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -39,3 +39,10 @@ CryptographyDeprecationWarning, stacklevel=2, ) +if sys.version_info[:2] == (3, 5): + warnings.warn( + "Python 3.5 support will be dropped in the next release of" + "cryptography. Please upgrade your Python.", + CryptographyDeprecationWarning, + stacklevel=2, + ) From 40bfc7f75b0a084ea10ac3d1866262e9d61b426e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 14 Aug 2020 22:48:08 -0500 Subject: [PATCH 918/988] remove KDF backend requirements (#5389) --- .../primitives/key-derivation-functions.rst | 38 +++++++++---------- src/cryptography/hazmat/backends/__init__.py | 7 ++++ .../hazmat/primitives/kdf/concatkdf.py | 7 +++- .../hazmat/primitives/kdf/hkdf.py | 7 +++- .../hazmat/primitives/kdf/kbkdf.py | 4 +- .../hazmat/primitives/kdf/pbkdf2.py | 4 +- .../hazmat/primitives/kdf/scrypt.py | 4 +- .../hazmat/primitives/kdf/x963kdf.py | 4 +- tests/hazmat/backends/test_no_backend.py | 16 ++++++++ 9 files changed, 63 insertions(+), 28 deletions(-) create mode 100644 tests/hazmat/backends/test_no_backend.py diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index e2714465be2d..fc74a98f039d 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -36,7 +36,7 @@ PBKDF2 .. currentmodule:: cryptography.hazmat.primitives.kdf.pbkdf2 -.. class:: PBKDF2HMAC(algorithm, length, salt, iterations, backend) +.. class:: PBKDF2HMAC(algorithm, length, salt, iterations, backend=None) .. versionadded:: 0.2 @@ -89,7 +89,7 @@ PBKDF2 takes. Higher numbers help mitigate brute force attacks against derived keys. A `more detailed description`_ can be consulted for additional information. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.PBKDF2HMACBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the @@ -143,7 +143,7 @@ Scrypt .. currentmodule:: cryptography.hazmat.primitives.kdf.scrypt -.. class:: Scrypt(salt, length, n, r, p, backend) +.. class:: Scrypt(salt, length, n, r, p, backend=None) .. versionadded:: 1.6 @@ -189,7 +189,7 @@ Scrypt power of 2. :param int r: Block size parameter. :param int p: Parallelization parameter. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.ScryptBackend`. The computational and memory cost of Scrypt can be adjusted by manipulating @@ -259,7 +259,7 @@ ConcatKDF .. currentmodule:: cryptography.hazmat.primitives.kdf.concatkdf -.. class:: ConcatKDFHash(algorithm, length, otherinfo, backend) +.. class:: ConcatKDFHash(algorithm, length, otherinfo, backend=None) .. versionadded:: 1.0 @@ -303,7 +303,7 @@ ConcatKDF :param bytes otherinfo: Application specific context information. If ``None`` is explicitly passed an empty byte string will be used. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.HashBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised @@ -349,7 +349,7 @@ ConcatKDF raises an exception if they do not match. -.. class:: ConcatKDFHMAC(algorithm, length, salt, otherinfo, backend) +.. class:: ConcatKDFHMAC(algorithm, length, salt, otherinfo, backend=None) .. versionadded:: 1.0 @@ -402,7 +402,7 @@ ConcatKDF :param bytes otherinfo: Application specific context information. If ``None`` is explicitly passed an empty byte string will be used. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the @@ -452,7 +452,7 @@ HKDF .. currentmodule:: cryptography.hazmat.primitives.kdf.hkdf -.. class:: HKDF(algorithm, length, salt, info, backend) +.. class:: HKDF(algorithm, length, salt, info, backend=None) .. versionadded:: 0.2 @@ -508,7 +508,7 @@ HKDF :param bytes info: Application specific context information. If ``None`` is explicitly passed an empty byte string will be used. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the @@ -555,7 +555,7 @@ HKDF raises an exception if they do not match. -.. class:: HKDFExpand(algorithm, length, info, backend) +.. class:: HKDFExpand(algorithm, length, info, backend=None) .. versionadded:: 0.5 @@ -603,7 +603,7 @@ HKDF :param bytes info: Application specific context information. If ``None`` is explicitly passed an empty byte string will be used. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the @@ -656,7 +656,7 @@ KBKDF .. currentmodule:: cryptography.hazmat.primitives.kdf.kbkdf .. class:: KBKDFHMAC(algorithm, mode, length, rlen, llen, location,\ - label, context, fixed, backend) + label, context, fixed, backend=None) .. versionadded:: 1.4 @@ -734,9 +734,8 @@ KBKDF may supply your own fixed data. If ``fixed`` is specified, ``label`` and ``context`` is ignored. - :param backend: A cryptography backend - :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` - instance. + :param backend: An optional instance of + :class:`~cryptography.hazmat.backends.interfaces.HMACBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the provided ``backend`` does not implement @@ -813,7 +812,7 @@ X963KDF .. currentmodule:: cryptography.hazmat.primitives.kdf.x963kdf -.. class:: X963KDF(algorithm, length, otherinfo, backend) +.. class:: X963KDF(algorithm, length, otherinfo, backend=None) .. versionadded:: 1.1 @@ -863,9 +862,8 @@ X963KDF :param bytes sharedinfo: Application specific context information. If ``None`` is explicitly passed an empty byte string will be used. - :param backend: A cryptography backend - :class:`~cryptography.hazmat.backends.interfaces.HashBackend` - instance. + :param backend: An optional instance of + :class:`~cryptography.hazmat.backends.interfaces.HashBackend`. :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the provided ``backend`` does not implement diff --git a/src/cryptography/hazmat/backends/__init__.py b/src/cryptography/hazmat/backends/__init__.py index 50af41a8c598..1563936dde6e 100644 --- a/src/cryptography/hazmat/backends/__init__.py +++ b/src/cryptography/hazmat/backends/__init__.py @@ -17,3 +17,10 @@ def default_backend(): _default_backend = backend return _default_backend + + +def _get_backend(backend): + if backend is None: + return default_backend() + else: + return backend diff --git a/src/cryptography/hazmat/primitives/kdf/concatkdf.py b/src/cryptography/hazmat/primitives/kdf/concatkdf.py index f424689c9737..7cc0324fc4f5 100644 --- a/src/cryptography/hazmat/primitives/kdf/concatkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/concatkdf.py @@ -13,6 +13,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import constant_time, hashes, hmac @@ -53,7 +54,8 @@ def _concatkdf_derive(key_material, length, auxfn, otherinfo): @utils.register_interface(KeyDerivationFunction) class ConcatKDFHash(object): - def __init__(self, algorithm, length, otherinfo, backend): + def __init__(self, algorithm, length, otherinfo, backend=None): + backend = _get_backend(backend) _common_args_checks(algorithm, length, otherinfo) self._algorithm = algorithm @@ -88,7 +90,8 @@ def verify(self, key_material, expected_key): @utils.register_interface(KeyDerivationFunction) class ConcatKDFHMAC(object): - def __init__(self, algorithm, length, salt, otherinfo, backend): + def __init__(self, algorithm, length, salt, otherinfo, backend=None): + backend = _get_backend(backend) _common_args_checks(algorithm, length, otherinfo) self._algorithm = algorithm diff --git a/src/cryptography/hazmat/primitives/kdf/hkdf.py b/src/cryptography/hazmat/primitives/kdf/hkdf.py index 0a758044227e..9bb6bc213253 100644 --- a/src/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/hkdf.py @@ -13,6 +13,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time, hmac from cryptography.hazmat.primitives.kdf import KeyDerivationFunction @@ -20,7 +21,8 @@ @utils.register_interface(KeyDerivationFunction) class HKDF(object): - def __init__(self, algorithm, length, salt, info, backend): + def __init__(self, algorithm, length, salt, info, backend=None): + backend = _get_backend(backend) if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", @@ -56,7 +58,8 @@ def verify(self, key_material, expected_key): @utils.register_interface(KeyDerivationFunction) class HKDFExpand(object): - def __init__(self, algorithm, length, info, backend): + def __init__(self, algorithm, length, info, backend=None): + backend = _get_backend(backend) if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", diff --git a/src/cryptography/hazmat/primitives/kdf/kbkdf.py b/src/cryptography/hazmat/primitives/kdf/kbkdf.py index deb428919192..864337001c89 100644 --- a/src/cryptography/hazmat/primitives/kdf/kbkdf.py +++ b/src/cryptography/hazmat/primitives/kdf/kbkdf.py @@ -15,6 +15,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time, hashes, hmac from cryptography.hazmat.primitives.kdf import KeyDerivationFunction @@ -42,8 +43,9 @@ def __init__( label, context, fixed, - backend, + backend=None, ): + backend = _get_backend(backend) if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", diff --git a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py index 1d82f2a64b77..5b67d48bbab6 100644 --- a/src/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ b/src/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -11,6 +11,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import PBKDF2HMACBackend from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.primitives.kdf import KeyDerivationFunction @@ -18,7 +19,8 @@ @utils.register_interface(KeyDerivationFunction) class PBKDF2HMAC(object): - def __init__(self, algorithm, length, salt, iterations, backend): + def __init__(self, algorithm, length, salt, iterations, backend=None): + backend = _get_backend(backend) if not isinstance(backend, PBKDF2HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement PBKDF2HMACBackend.", diff --git a/src/cryptography/hazmat/primitives/kdf/scrypt.py b/src/cryptography/hazmat/primitives/kdf/scrypt.py index 1fcc8f9d3643..f028646aa02d 100644 --- a/src/cryptography/hazmat/primitives/kdf/scrypt.py +++ b/src/cryptography/hazmat/primitives/kdf/scrypt.py @@ -13,6 +13,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import ScryptBackend from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.primitives.kdf import KeyDerivationFunction @@ -25,7 +26,8 @@ @utils.register_interface(KeyDerivationFunction) class Scrypt(object): - def __init__(self, salt, length, n, r, p, backend): + def __init__(self, salt, length, n, r, p, backend=None): + backend = _get_backend(backend) if not isinstance(backend, ScryptBackend): raise UnsupportedAlgorithm( "Backend object does not implement ScryptBackend.", diff --git a/src/cryptography/hazmat/primitives/kdf/x963kdf.py b/src/cryptography/hazmat/primitives/kdf/x963kdf.py index 50c30b33d9fe..1898d526a48f 100644 --- a/src/cryptography/hazmat/primitives/kdf/x963kdf.py +++ b/src/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -13,6 +13,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import constant_time, hashes from cryptography.hazmat.primitives.kdf import KeyDerivationFunction @@ -24,7 +25,8 @@ def _int_to_u32be(n): @utils.register_interface(KeyDerivationFunction) class X963KDF(object): - def __init__(self, algorithm, length, sharedinfo, backend): + def __init__(self, algorithm, length, sharedinfo, backend=None): + backend = _get_backend(backend) max_len = algorithm.digest_size * (2 ** 32 - 1) if length > max_len: diff --git a/tests/hazmat/backends/test_no_backend.py b/tests/hazmat/backends/test_no_backend.py new file mode 100644 index 000000000000..67866929e71d --- /dev/null +++ b/tests/hazmat/backends/test_no_backend.py @@ -0,0 +1,16 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.hazmat.backends import _get_backend, default_backend + + +def test_get_backend_no_backend(): + assert _get_backend(None) is default_backend() + + +def test_get_backend(): + faux_backend = object() + assert _get_backend(faux_backend) is faux_backend From 519cae6a2d0d7e0c3bf6ff542b716e4f753ca380 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 14 Aug 2020 23:34:04 -0500 Subject: [PATCH 919/988] x509 optional backend args (#5390) --- docs/x509/reference.rst | 44 +++++++++++++++++------------------ src/cryptography/x509/base.py | 31 ++++++++++++++++-------- src/cryptography/x509/name.py | 4 +++- 3 files changed, 46 insertions(+), 33 deletions(-) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index d360297eb23d..484339e61036 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -149,7 +149,7 @@ X.509 Reference Loading Certificates ~~~~~~~~~~~~~~~~~~~~ -.. function:: load_pem_x509_certificate(data, backend) +.. function:: load_pem_x509_certificate(data, backend=None) .. versionadded:: 0.7 @@ -159,7 +159,7 @@ Loading Certificates :param bytes data: The PEM encoded certificate data. - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -173,7 +173,7 @@ Loading Certificates >>> cert.serial_number 2 -.. function:: load_der_x509_certificate(data, backend) +.. function:: load_der_x509_certificate(data, backend=None) .. versionadded:: 0.7 @@ -183,7 +183,7 @@ Loading Certificates :param bytes data: The DER encoded certificate data. - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -192,7 +192,7 @@ Loading Certificates Loading Certificate Revocation Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. function:: load_pem_x509_crl(data, backend) +.. function:: load_pem_x509_crl(data, backend=None) .. versionadded:: 1.1 @@ -202,7 +202,7 @@ Loading Certificate Revocation Lists :param bytes data: The PEM encoded request data. - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -218,7 +218,7 @@ Loading Certificate Revocation Lists >>> isinstance(crl.signature_hash_algorithm, hashes.SHA256) True -.. function:: load_der_x509_crl(data, backend) +.. function:: load_der_x509_crl(data, backend=None) .. versionadded:: 1.1 @@ -227,7 +227,7 @@ Loading Certificate Revocation Lists :param bytes data: The DER encoded request data. - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -237,7 +237,7 @@ Loading Certificate Revocation Lists Loading Certificate Signing Requests ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. function:: load_pem_x509_csr(data, backend) +.. function:: load_pem_x509_csr(data, backend=None) .. versionadded:: 0.9 @@ -248,7 +248,7 @@ Loading Certificate Signing Requests :param bytes data: The PEM encoded request data. - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -264,7 +264,7 @@ Loading Certificate Signing Requests >>> isinstance(csr.signature_hash_algorithm, hashes.SHA256) True -.. function:: load_der_x509_csr(data, backend) +.. function:: load_der_x509_csr(data, backend=None) .. versionadded:: 0.9 @@ -273,7 +273,7 @@ Loading Certificate Signing Requests :param bytes data: The DER encoded request data. - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -780,7 +780,7 @@ X.509 Certificate Builder :param critical: Set to ``True`` if the extension must be understood and handled by whoever reads the certificate. - .. method:: sign(private_key, algorithm, backend) + .. method:: sign(private_key, algorithm, backend=None) Sign the certificate using the CA's private key. @@ -803,7 +803,7 @@ X.509 Certificate Builder :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` otherwise. - :param backend: Backend that will be used to build the certificate. + :param backend: An optional backend used to build the certificate. Must support the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -1021,7 +1021,7 @@ X.509 Certificate Revocation List Builder obtained from an existing CRL or created with :class:`~cryptography.x509.RevokedCertificateBuilder`. - .. method:: sign(private_key, algorithm, backend) + .. method:: sign(private_key, algorithm, backend=None) Sign this CRL using the CA's private key. @@ -1044,7 +1044,7 @@ X.509 Certificate Revocation List Builder :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` otherwise. - :param backend: Backend that will be used to build the CRL. + :param backend: An optional backend used to build the CRL. Must support the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -1140,11 +1140,11 @@ X.509 Revoked Certificate Builder :param critical: Set to ``True`` if the extension must be understood and handled. - .. method:: build(backend) + .. method:: build(backend=None) Create a revoked certificate object using the provided backend. - :param backend: Backend that will be used to build the revoked + :param backend: An optional backend used to build the revoked certificate. Must support the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -1212,9 +1212,9 @@ X.509 CSR (Certificate Signing Request) Builder Object :returns: A new :class:`~cryptography.x509.CertificateSigningRequestBuilder`. - .. method:: sign(private_key, algorithm, backend) + .. method:: sign(private_key, algorithm, backend=None) - :param backend: Backend that will be used to sign the request. + :param backend: An optional backend used to sign the request. Must support the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. @@ -1294,11 +1294,11 @@ X.509 CSR (Certificate Signing Request) Builder Object >>> cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME) [, value='Good CA')>] - .. method:: public_bytes(backend) + .. method:: public_bytes(backend=None) .. versionadded:: 1.6 - :param backend: A backend supporting the + :param backend: An optional backend supporting the :class:`~cryptography.hazmat.backends.interfaces.X509Backend` interface. diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 102468a45bb5..f3bc872b9456 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -12,6 +12,7 @@ import six from cryptography import utils +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.primitives.asymmetric import ( dsa, ec, @@ -66,27 +67,33 @@ class Version(Enum): v3 = 2 -def load_pem_x509_certificate(data, backend): +def load_pem_x509_certificate(data, backend=None): + backend = _get_backend(backend) return backend.load_pem_x509_certificate(data) -def load_der_x509_certificate(data, backend): +def load_der_x509_certificate(data, backend=None): + backend = _get_backend(backend) return backend.load_der_x509_certificate(data) -def load_pem_x509_csr(data, backend): +def load_pem_x509_csr(data, backend=None): + backend = _get_backend(backend) return backend.load_pem_x509_csr(data) -def load_der_x509_csr(data, backend): +def load_der_x509_csr(data, backend=None): + backend = _get_backend(backend) return backend.load_der_x509_csr(data) -def load_pem_x509_crl(data, backend): +def load_pem_x509_crl(data, backend=None): + backend = _get_backend(backend) return backend.load_pem_x509_crl(data) -def load_der_x509_crl(data, backend): +def load_der_x509_crl(data, backend=None): + backend = _get_backend(backend) return backend.load_der_x509_crl(data) @@ -468,10 +475,11 @@ def add_attribute(self, oid, value): self._attributes + [(oid, value)], ) - def sign(self, private_key, algorithm, backend): + def sign(self, private_key, algorithm, backend=None): """ Signs the request using the requestor's private key. """ + backend = _get_backend(backend) if self._subject_name is None: raise ValueError("A CertificateSigningRequest must have a subject") return backend.create_x509_csr(self, private_key, algorithm) @@ -672,10 +680,11 @@ def add_extension(self, extension, critical): self._extensions + [extension], ) - def sign(self, private_key, algorithm, backend): + def sign(self, private_key, algorithm, backend=None): """ Signs the certificate using the CA's private key. """ + backend = _get_backend(backend) if self._subject_name is None: raise ValueError("A certificate must have a subject name") @@ -801,7 +810,8 @@ def add_revoked_certificate(self, revoked_certificate): self._revoked_certificates + [revoked_certificate], ) - def sign(self, private_key, algorithm, backend): + def sign(self, private_key, algorithm, backend=None): + backend = _get_backend(backend) if self._issuer_name is None: raise ValueError("A CRL must have an issuer name") @@ -866,7 +876,8 @@ def add_extension(self, extension, critical): self._extensions + [extension], ) - def build(self, backend): + def build(self, backend=None): + backend = _get_backend(backend) if self._serial_number is None: raise ValueError("A revoked certificate must have a serial number") if self._revocation_date is None: diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index 6848b7a31ed4..0be876a0ed6c 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -9,6 +9,7 @@ import six from cryptography import utils +from cryptography.hazmat.backends import _get_backend from cryptography.x509.oid import NameOID, ObjectIdentifier @@ -225,7 +226,8 @@ def get_attributes_for_oid(self, oid): def rdns(self): return self._attributes - def public_bytes(self, backend): + def public_bytes(self, backend=None): + backend = _get_backend(backend) return backend.x509_name_bytes(self) def __eq__(self, other): From ad608e2355b99f9faf23e4be7ffba0bd1e0eacc1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Aug 2020 00:55:11 -0400 Subject: [PATCH 920/988] update to latest libessl 3.1.x (#5391) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 65845fa75728..4bc0c1c11a32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,7 +50,7 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 - python: 3.8 - env: TOXENV=py38 LIBRESSL=3.1.2 + env: TOXENV=py38 LIBRESSL=3.1.3 - python: 3.8 env: TOXENV=py38 LIBRESSL=3.2.0 From 24070d795443f9b01c926a9f7111e4405c0dbaa6 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 00:05:47 -0500 Subject: [PATCH 921/988] make backend optional in serialization (#5392) --- .../primitives/asymmetric/serialization.rst | 36 +++++++++---------- .../hazmat/primitives/serialization/base.py | 19 ++++++---- .../hazmat/primitives/serialization/pkcs12.py | 5 +-- .../hazmat/primitives/serialization/ssh.py | 8 +++-- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 164ba376c1f6..914fe51df7ca 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -126,7 +126,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END extract the public key with :meth:`Certificate.public_key `. -.. function:: load_pem_private_key(data, password, backend) +.. function:: load_pem_private_key(data, password, backend=None) .. versionadded:: 0.6 @@ -140,7 +140,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END be ``None`` if the private key is not encrypted. :type data: :term:`bytes-like` - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.PEMSerializationBackend`. :returns: One of @@ -162,7 +162,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END is of a type that is not supported by the backend or if the key is encrypted with a symmetric cipher that is not supported by the backend. -.. function:: load_pem_public_key(data, backend) +.. function:: load_pem_public_key(data, backend=None) .. versionadded:: 0.6 @@ -179,7 +179,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END :param bytes data: The PEM encoded key data. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.PEMSerializationBackend`. @@ -197,7 +197,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END :raises cryptography.exceptions.UnsupportedAlgorithm: If the serialized key is of a type that is not supported by the backend. -.. function:: load_pem_parameters(data, backend) +.. function:: load_pem_parameters(data, backend=None) .. versionadded:: 2.0 @@ -214,7 +214,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END :param bytes data: The PEM encoded parameters data. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.PEMSerializationBackend`. @@ -236,7 +236,7 @@ data is binary. DER keys may be in a variety of formats, but as long as you know whether it is a public or private key the loading functions will handle the rest. -.. function:: load_der_private_key(data, password, backend) +.. function:: load_der_private_key(data, password, backend=None) .. versionadded:: 0.8 @@ -250,7 +250,7 @@ the rest. be ``None`` if the private key is not encrypted. :type password: :term:`bytes-like` - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DERSerializationBackend`. :returns: One of @@ -281,7 +281,7 @@ the rest. >>> isinstance(key, rsa.RSAPrivateKey) True -.. function:: load_der_public_key(data, backend) +.. function:: load_der_public_key(data, backend=None) .. versionadded:: 0.8 @@ -291,7 +291,7 @@ the rest. :param bytes data: The DER encoded key data. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DERSerializationBackend`. :returns: One of @@ -317,7 +317,7 @@ the rest. >>> isinstance(key, rsa.RSAPublicKey) True -.. function:: load_der_parameters(data, backend) +.. function:: load_der_parameters(data, backend=None) .. versionadded:: 2.0 @@ -326,7 +326,7 @@ the rest. :param bytes data: The DER encoded parameters data. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DERSerializationBackend`. :returns: Currently only @@ -369,7 +369,7 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than ``ssh-rsa``. ECDSA keys have a slightly different format, they begin with ``ecdsa-sha2-{curve}``. -.. function:: load_ssh_public_key(data, backend) +.. function:: load_ssh_public_key(data, backend=None) .. versionadded:: 0.7 @@ -380,7 +380,7 @@ DSA keys look almost identical but begin with ``ssh-dss`` rather than :param data: The OpenSSH encoded key data. :type data: :term:`bytes-like` - :param backend: A backend which implements + :param backend: An optional backend which implements :class:`~cryptography.hazmat.backends.interfaces.RSABackend`, :class:`~cryptography.hazmat.backends.interfaces.DSABackend`, or :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend` @@ -418,7 +418,7 @@ An example ECDSA key in OpenSSH format:: BAUGBw== -----END OPENSSH PRIVATE KEY----- -.. function:: load_ssh_private_key(data, password, backend) +.. function:: load_ssh_private_key(data, password, backend=None) .. versionadded:: 3.0 @@ -431,7 +431,7 @@ An example ECDSA key in OpenSSH format:: :param bytes password: Password bytes to use to decrypt password-protected key. Or ``None`` if not needed. - :param backend: A backend which implements + :param backend: An optional backend which implements :class:`~cryptography.hazmat.backends.interfaces.RSABackend`, :class:`~cryptography.hazmat.backends.interfaces.DSABackend`, or :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend` @@ -466,7 +466,7 @@ file suffix. ``cryptography`` only supports a single private key and associated certificates when parsing PKCS12 files at this time. -.. function:: load_key_and_certificates(data, password, backend) +.. function:: load_key_and_certificates(data, password, backend=None) .. versionadded:: 2.5 @@ -479,7 +479,7 @@ file suffix. if the PKCS12 is not encrypted. :type password: :term:`bytes-like` - :param backend: A backend instance. + :param backend: An optional backend instance. :returns: A tuple of ``(private_key, certificate, additional_certificates)``. diff --git a/src/cryptography/hazmat/primitives/serialization/base.py b/src/cryptography/hazmat/primitives/serialization/base.py index b8cca0f0a2a1..b2b403470f98 100644 --- a/src/cryptography/hazmat/primitives/serialization/base.py +++ b/src/cryptography/hazmat/primitives/serialization/base.py @@ -10,29 +10,36 @@ import six from cryptography import utils +from cryptography.hazmat.backends import _get_backend -def load_pem_private_key(data, password, backend): +def load_pem_private_key(data, password, backend=None): + backend = _get_backend(backend) return backend.load_pem_private_key(data, password) -def load_pem_public_key(data, backend): +def load_pem_public_key(data, backend=None): + backend = _get_backend(backend) return backend.load_pem_public_key(data) -def load_pem_parameters(data, backend): +def load_pem_parameters(data, backend=None): + backend = _get_backend(backend) return backend.load_pem_parameters(data) -def load_der_private_key(data, password, backend): +def load_der_private_key(data, password, backend=None): + backend = _get_backend(backend) return backend.load_der_private_key(data, password) -def load_der_public_key(data, backend): +def load_der_public_key(data, backend=None): + backend = _get_backend(backend) return backend.load_der_public_key(data) -def load_der_parameters(data, backend): +def load_der_parameters(data, backend=None): + backend = _get_backend(backend) return backend.load_der_parameters(data) diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs12.py b/src/cryptography/hazmat/primitives/serialization/pkcs12.py index d4e5015256f0..136613d9ec3e 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs12.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs12.py @@ -5,12 +5,13 @@ from __future__ import absolute_import, division, print_function from cryptography import x509 -from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.backends import _get_backend, default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa -def load_key_and_certificates(data, password, backend): +def load_key_and_certificates(data, password, backend=None): + backend = _get_backend(backend) return backend.load_key_and_certificates_from_pkcs12(data, password) diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index 35091ed309ea..ea0f4a6b8383 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -13,7 +13,7 @@ from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm -from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.backends import _get_backend, default_backend from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.serialization import ( @@ -471,10 +471,11 @@ def _lookup_kformat(key_type): raise UnsupportedAlgorithm("Unsupported key type: %r" % key_type) -def load_ssh_private_key(data, password, backend): +def load_ssh_private_key(data, password, backend=None): """Load private key from OpenSSH custom encoding. """ utils._check_byteslike("data", data) + backend = _get_backend(backend) if password is not None: utils._check_bytes("password", password) @@ -626,9 +627,10 @@ def serialize_ssh_private_key(private_key, password=None): return txt -def load_ssh_public_key(data, backend): +def load_ssh_public_key(data, backend=None): """Load public key from OpenSSH one-line format. """ + backend = _get_backend(backend) utils._check_byteslike("data", data) m = _SSH_PUBKEY_RC.match(data) From 4fe585447aae672eaaee4529e6311f767440ab80 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 08:50:47 -0500 Subject: [PATCH 922/988] optional backend for hash, cipher, cmac, hmac, keywrap (#5394) --- docs/hazmat/primitives/cryptographic-hashes.rst | 4 ++-- docs/hazmat/primitives/keywrap.rst | 16 ++++++++-------- docs/hazmat/primitives/mac/cmac.rst | 4 ++-- docs/hazmat/primitives/mac/hmac.rst | 4 ++-- docs/hazmat/primitives/symmetric-encryption.rst | 4 ++-- .../hazmat/primitives/ciphers/base.py | 4 +++- src/cryptography/hazmat/primitives/cmac.py | 4 +++- src/cryptography/hazmat/primitives/hashes.py | 4 +++- src/cryptography/hazmat/primitives/hmac.py | 4 +++- src/cryptography/hazmat/primitives/keywrap.py | 13 +++++++++---- 10 files changed, 37 insertions(+), 24 deletions(-) diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index 24cc70b5e436..6615ba6fa5ba 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -5,7 +5,7 @@ Message digests (Hashing) .. module:: cryptography.hazmat.primitives.hashes -.. class:: Hash(algorithm, backend) +.. class:: Hash(algorithm, backend=None) A cryptographic hash function takes an arbitrary block of data and calculates a fixed-size bit string (a digest), such that different data @@ -42,7 +42,7 @@ Message digests (Hashing) :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` instance such as those described in :ref:`below `. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.HashBackend` instance. diff --git a/docs/hazmat/primitives/keywrap.rst b/docs/hazmat/primitives/keywrap.rst index 1c15f9d19475..9d8abbd09171 100644 --- a/docs/hazmat/primitives/keywrap.rst +++ b/docs/hazmat/primitives/keywrap.rst @@ -11,7 +11,7 @@ to protect keys at rest or transmit them over insecure networks. Many of the protections offered by key wrapping are also offered by using authenticated :doc:`symmetric encryption `. -.. function:: aes_key_wrap(wrapping_key, key_to_wrap, backend) +.. function:: aes_key_wrap(wrapping_key, key_to_wrap, backend=None) .. versionadded:: 1.1 @@ -22,14 +22,14 @@ protections offered by key wrapping are also offered by using authenticated :param bytes key_to_wrap: The key to wrap. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` instance that supports :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. :return bytes: The wrapped key as bytes. -.. function:: aes_key_unwrap(wrapping_key, wrapped_key, backend) +.. function:: aes_key_unwrap(wrapping_key, wrapped_key, backend=None) .. versionadded:: 1.1 @@ -40,7 +40,7 @@ protections offered by key wrapping are also offered by using authenticated :param bytes wrapped_key: The wrapped key. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` instance that supports :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. @@ -50,7 +50,7 @@ protections offered by key wrapping are also offered by using authenticated :raises cryptography.hazmat.primitives.keywrap.InvalidUnwrap: This is raised if the key is not successfully unwrapped. -.. function:: aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend) +.. function:: aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend=None) .. versionadded:: 2.2 @@ -61,14 +61,14 @@ protections offered by key wrapping are also offered by using authenticated :param bytes key_to_wrap: The key to wrap. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` instance that supports :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. :return bytes: The wrapped key as bytes. -.. function:: aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend) +.. function:: aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend=None) .. versionadded:: 2.2 @@ -79,7 +79,7 @@ protections offered by key wrapping are also offered by using authenticated :param bytes wrapped_key: The wrapped key. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` instance that supports :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES`. diff --git a/docs/hazmat/primitives/mac/cmac.rst b/docs/hazmat/primitives/mac/cmac.rst index a5b13caf71d2..796af22007b1 100644 --- a/docs/hazmat/primitives/mac/cmac.rst +++ b/docs/hazmat/primitives/mac/cmac.rst @@ -17,7 +17,7 @@ of a message. A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`. -.. class:: CMAC(algorithm, backend) +.. class:: CMAC(algorithm, backend=None) .. versionadded:: 0.4 @@ -56,7 +56,7 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`. :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.CMACBackend`. :raises TypeError: This is raised if the provided ``algorithm`` is not an instance of :class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm` diff --git a/docs/hazmat/primitives/mac/hmac.rst b/docs/hazmat/primitives/mac/hmac.rst index 9d11694bd569..ba49da224236 100644 --- a/docs/hazmat/primitives/mac/hmac.rst +++ b/docs/hazmat/primitives/mac/hmac.rst @@ -15,7 +15,7 @@ message authentication codes using a cryptographic hash function coupled with a secret key. You can use an HMAC to verify both the integrity and authenticity of a message. -.. class:: HMAC(key, algorithm, backend) +.. class:: HMAC(key, algorithm, backend=None) HMAC objects take a ``key`` and a :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` instance. @@ -60,7 +60,7 @@ of a message. :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` instance such as those described in :ref:`Cryptographic Hashes `. - :param backend: An + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` instance. diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 46f0786d67ee..74db180cb2a9 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -20,7 +20,7 @@ in an "encrypt-then-MAC" formulation as `described by Colin Percival`_. **To minimize the risk of security issues you should evaluate Fernet to see if it fits your needs before implementing anything using this module.** -.. class:: Cipher(algorithm, mode, backend) +.. class:: Cipher(algorithm, mode, backend=None) Cipher objects combine an algorithm such as :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES` with a @@ -51,7 +51,7 @@ it fits your needs before implementing anything using this module.** :param mode: A :class:`~cryptography.hazmat.primitives.ciphers.modes.Mode` instance such as those described :ref:`below `. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` instance. diff --git a/src/cryptography/hazmat/primitives/ciphers/base.py b/src/cryptography/hazmat/primitives/ciphers/base.py index 8adfa9d62120..dae425a2993d 100644 --- a/src/cryptography/hazmat/primitives/ciphers/base.py +++ b/src/cryptography/hazmat/primitives/ciphers/base.py @@ -16,6 +16,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives.ciphers import modes @@ -97,7 +98,8 @@ def tag(self): class Cipher(object): - def __init__(self, algorithm, mode, backend): + def __init__(self, algorithm, mode, backend=None): + backend = _get_backend(backend) if not isinstance(backend, CipherBackend): raise UnsupportedAlgorithm( "Backend object does not implement CipherBackend.", diff --git a/src/cryptography/hazmat/primitives/cmac.py b/src/cryptography/hazmat/primitives/cmac.py index edf9d5364df4..bf962c906908 100644 --- a/src/cryptography/hazmat/primitives/cmac.py +++ b/src/cryptography/hazmat/primitives/cmac.py @@ -10,12 +10,14 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import CMACBackend from cryptography.hazmat.primitives import ciphers class CMAC(object): - def __init__(self, algorithm, backend, ctx=None): + def __init__(self, algorithm, backend=None, ctx=None): + backend = _get_backend(backend) if not isinstance(backend, CMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement CMACBackend.", diff --git a/src/cryptography/hazmat/primitives/hashes.py b/src/cryptography/hazmat/primitives/hashes.py index a39e5df4834a..18e2bab36340 100644 --- a/src/cryptography/hazmat/primitives/hashes.py +++ b/src/cryptography/hazmat/primitives/hashes.py @@ -14,6 +14,7 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HashBackend @@ -68,7 +69,8 @@ class ExtendableOutputFunction(object): @utils.register_interface(HashContext) class Hash(object): - def __init__(self, algorithm, backend, ctx=None): + def __init__(self, algorithm, backend=None, ctx=None): + backend = _get_backend(backend) if not isinstance(backend, HashBackend): raise UnsupportedAlgorithm( "Backend object does not implement HashBackend.", diff --git a/src/cryptography/hazmat/primitives/hmac.py b/src/cryptography/hazmat/primitives/hmac.py index 1dd32457f375..8c421dc68df9 100644 --- a/src/cryptography/hazmat/primitives/hmac.py +++ b/src/cryptography/hazmat/primitives/hmac.py @@ -10,13 +10,15 @@ UnsupportedAlgorithm, _Reasons, ) +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import hashes @utils.register_interface(hashes.HashContext) class HMAC(object): - def __init__(self, key, algorithm, backend, ctx=None): + def __init__(self, key, algorithm, backend=None, ctx=None): + backend = _get_backend(backend) if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", diff --git a/src/cryptography/hazmat/primitives/keywrap.py b/src/cryptography/hazmat/primitives/keywrap.py index 7ea16d876e45..2439cafe6d59 100644 --- a/src/cryptography/hazmat/primitives/keywrap.py +++ b/src/cryptography/hazmat/primitives/keywrap.py @@ -6,6 +6,7 @@ import struct +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.primitives.ciphers import Cipher from cryptography.hazmat.primitives.ciphers.algorithms import AES from cryptography.hazmat.primitives.ciphers.modes import ECB @@ -33,7 +34,8 @@ def _wrap_core(wrapping_key, a, r, backend): return a + b"".join(r) -def aes_key_wrap(wrapping_key, key_to_wrap, backend): +def aes_key_wrap(wrapping_key, key_to_wrap, backend=None): + backend = _get_backend(backend) if len(wrapping_key) not in [16, 24, 32]: raise ValueError("The wrapping key must be a valid AES key length") @@ -71,7 +73,8 @@ def _unwrap_core(wrapping_key, a, r, backend): return a, r -def aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend): +def aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend=None): + backend = _get_backend(backend) if len(wrapping_key) not in [16, 24, 32]: raise ValueError("The wrapping key must be a valid AES key length") @@ -90,7 +93,8 @@ def aes_key_wrap_with_padding(wrapping_key, key_to_wrap, backend): return _wrap_core(wrapping_key, aiv, r, backend) -def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): +def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend=None): + backend = _get_backend(backend) if len(wrapped_key) < 16: raise InvalidUnwrap("Must be at least 16 bytes") @@ -132,7 +136,8 @@ def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend): return data[:-b] -def aes_key_unwrap(wrapping_key, wrapped_key, backend): +def aes_key_unwrap(wrapping_key, wrapped_key, backend=None): + backend = _get_backend(backend) if len(wrapped_key) < 24: raise InvalidUnwrap("Must be at least 24 bytes") From f317452e96143bf8c207d840926e28561fdeea16 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 08:51:21 -0500 Subject: [PATCH 923/988] optional backend for dh, dsa, ec (#5395) --- docs/hazmat/primitives/asymmetric/dh.rst | 16 +++++++-------- docs/hazmat/primitives/asymmetric/dsa.rst | 20 +++++++++---------- docs/hazmat/primitives/asymmetric/ec.rst | 16 +++++++-------- .../hazmat/primitives/asymmetric/dh.py | 13 ++++++++---- .../hazmat/primitives/asymmetric/dsa.py | 16 ++++++++++----- .../hazmat/primitives/asymmetric/ec.py | 13 ++++++++---- 6 files changed, 55 insertions(+), 39 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/dh.rst b/docs/hazmat/primitives/asymmetric/dh.rst index edfe614362a4..145196adc581 100644 --- a/docs/hazmat/primitives/asymmetric/dh.rst +++ b/docs/hazmat/primitives/asymmetric/dh.rst @@ -129,7 +129,7 @@ API for additional functionality. Group parameters ~~~~~~~~~~~~~~~~ -.. function:: generate_parameters(generator, key_size, backend) +.. function:: generate_parameters(generator, key_size, backend=None) .. versionadded:: 1.7 @@ -140,7 +140,7 @@ Group parameters :param key_size: The bit length of the prime modulus to generate. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.DHBackend` instance. @@ -349,11 +349,11 @@ Numbers p subgroup order value. - .. method:: parameters(backend) + .. method:: parameters(backend=None) .. versionadded:: 1.7 - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DHBackend`. :returns: A new instance of :class:`DHParameters`. @@ -377,11 +377,11 @@ Numbers The private value. - .. method:: private_key(backend) + .. method:: private_key(backend=None) .. versionadded:: 1.7 - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DHBackend`. :returns: A new instance of :class:`DHPrivateKey`. @@ -405,11 +405,11 @@ Numbers The public value. - .. method:: public_key(backend) + .. method:: public_key(backend=None) .. versionadded:: 1.7 - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DHBackend`. :returns: A new instance of :class:`DHPublicKey`. diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index 142ce1aeb010..2eae56df1c36 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -17,7 +17,7 @@ DSA Generation ~~~~~~~~~~ -.. function:: generate_private_key(key_size, backend) +.. function:: generate_private_key(key_size, backend=None) .. versionadded:: 0.5 @@ -34,7 +34,7 @@ Generation be either 1024, 2048, 3072, or 4096. For keys generated in 2015 this should be `at least 2048`_ (See page 41). - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. :return: An instance of @@ -44,7 +44,7 @@ Generation the provided ``backend`` does not implement :class:`~cryptography.hazmat.backends.interfaces.DSABackend` -.. function:: generate_parameters(key_size, backend) +.. function:: generate_parameters(key_size, backend=None) .. versionadded:: 0.5 @@ -60,7 +60,7 @@ Generation should be either 1024, 2048, 3072, or 4096. For keys generated in 2015 this should be `at least 2048`_ (See page 41). - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. :return: An instance of @@ -183,9 +183,9 @@ Numbers The generator. - .. method:: parameters(backend) + .. method:: parameters(backend=None) - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. :returns: A new instance of @@ -210,9 +210,9 @@ Numbers The :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAParameterNumbers` associated with the public key. - .. method:: public_key(backend) + .. method:: public_key(backend=None) - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. :returns: A new instance of @@ -242,9 +242,9 @@ Numbers The :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicNumbers` associated with the private key. - .. method:: private_key(backend) + .. method:: private_key(backend=None) - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.DSABackend`. :returns: A new instance of diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 3b344f66b739..4232e31df08f 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -6,7 +6,7 @@ Elliptic curve cryptography .. module:: cryptography.hazmat.primitives.asymmetric.ec -.. function:: generate_private_key(curve, backend) +.. function:: generate_private_key(curve, backend=None) .. versionadded:: 0.5 @@ -14,13 +14,13 @@ Elliptic curve cryptography :param curve: An instance of :class:`EllipticCurve`. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend`. :returns: A new instance of :class:`EllipticCurvePrivateKey`. -.. function:: derive_private_key(private_value, curve, backend) +.. function:: derive_private_key(private_value, curve, backend=None) .. versionadded:: 1.6 @@ -31,7 +31,7 @@ Elliptic curve cryptography :param curve: An instance of :class:`EllipticCurve`. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend`. :returns: A new instance of :class:`EllipticCurvePrivateKey`. @@ -144,12 +144,12 @@ Elliptic Curve Signature Algorithms The private value. - .. method:: private_key(backend) + .. method:: private_key(backend=None) Convert a collection of numbers into a private key suitable for doing actual cryptographic operations. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend`. :returns: A new instance of :class:`EllipticCurvePrivateKey`. @@ -186,12 +186,12 @@ Elliptic Curve Signature Algorithms The affine y component of the public point used for verifying. - .. method:: public_key(backend) + .. method:: public_key(backend=None) Convert a collection of numbers into a public key suitable for doing actual cryptographic operations. - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.EllipticCurveBackend`. :raises ValueError: Raised if the point is invalid for the curve. diff --git a/src/cryptography/hazmat/primitives/asymmetric/dh.py b/src/cryptography/hazmat/primitives/asymmetric/dh.py index 4e583f3c957a..cd9fbfab4600 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dh.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dh.py @@ -9,9 +9,11 @@ import six from cryptography import utils +from cryptography.hazmat.backends import _get_backend -def generate_parameters(generator, key_size, backend): +def generate_parameters(generator, key_size, backend=None): + backend = _get_backend(backend) return backend.generate_dh_parameters(generator, key_size) @@ -40,7 +42,8 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def private_key(self, backend): + def private_key(self, backend=None): + backend = _get_backend(backend) return backend.load_dh_private_numbers(self) public_numbers = utils.read_only_property("_public_numbers") @@ -72,7 +75,8 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def public_key(self, backend): + def public_key(self, backend=None): + backend = _get_backend(backend) return backend.load_dh_public_numbers(self) y = utils.read_only_property("_y") @@ -106,7 +110,8 @@ def __eq__(self, other): def __ne__(self, other): return not self == other - def parameters(self, backend): + def parameters(self, backend=None): + backend = _get_backend(backend) return backend.load_dh_parameter_numbers(self) p = utils.read_only_property("_p") diff --git a/src/cryptography/hazmat/primitives/asymmetric/dsa.py b/src/cryptography/hazmat/primitives/asymmetric/dsa.py index fadedfa46ff4..8ccc66665f36 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/dsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -9,6 +9,7 @@ import six from cryptography import utils +from cryptography.hazmat.backends import _get_backend @six.add_metaclass(abc.ABCMeta) @@ -119,11 +120,13 @@ def verify(self, signature, data, algorithm): DSAPublicKeyWithSerialization = DSAPublicKey -def generate_parameters(key_size, backend): +def generate_parameters(key_size, backend=None): + backend = _get_backend(backend) return backend.generate_dsa_parameters(key_size) -def generate_private_key(key_size, backend): +def generate_private_key(key_size, backend=None): + backend = _get_backend(backend) return backend.generate_dsa_private_key_and_parameters(key_size) @@ -168,7 +171,8 @@ def __init__(self, p, q, g): q = utils.read_only_property("_q") g = utils.read_only_property("_g") - def parameters(self, backend): + def parameters(self, backend=None): + backend = _get_backend(backend) return backend.load_dsa_parameter_numbers(self) def __eq__(self, other): @@ -203,7 +207,8 @@ def __init__(self, y, parameter_numbers): y = utils.read_only_property("_y") parameter_numbers = utils.read_only_property("_parameter_numbers") - def public_key(self, backend): + def public_key(self, backend=None): + backend = _get_backend(backend) return backend.load_dsa_public_numbers(self) def __eq__(self, other): @@ -240,7 +245,8 @@ def __init__(self, x, public_numbers): x = utils.read_only_property("_x") public_numbers = utils.read_only_property("_public_numbers") - def private_key(self, backend): + def private_key(self, backend=None): + backend = _get_backend(backend) return backend.load_dsa_private_numbers(self) def __eq__(self, other): diff --git a/src/cryptography/hazmat/primitives/asymmetric/ec.py b/src/cryptography/hazmat/primitives/asymmetric/ec.py index aaa415107f6f..c7e694fc5615 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/ec.py +++ b/src/cryptography/hazmat/primitives/asymmetric/ec.py @@ -11,6 +11,7 @@ from cryptography import utils from cryptography.hazmat._oid import ObjectIdentifier +from cryptography.hazmat.backends import _get_backend class EllipticCurveOID(object): @@ -320,11 +321,13 @@ def __init__(self, algorithm): algorithm = utils.read_only_property("_algorithm") -def generate_private_key(curve, backend): +def generate_private_key(curve, backend=None): + backend = _get_backend(backend) return backend.generate_elliptic_curve_private_key(curve) -def derive_private_key(private_value, curve, backend): +def derive_private_key(private_value, curve, backend=None): + backend = _get_backend(backend) if not isinstance(private_value, six.integer_types): raise TypeError("private_value must be an integer type.") @@ -351,7 +354,8 @@ def __init__(self, x, y, curve): self._x = x self._curve = curve - def public_key(self, backend): + def public_key(self, backend=None): + backend = _get_backend(backend) return backend.load_elliptic_curve_public_numbers(self) def encode_point(self): @@ -438,7 +442,8 @@ def __init__(self, private_value, public_numbers): self._private_value = private_value self._public_numbers = public_numbers - def private_key(self, backend): + def private_key(self, backend=None): + backend = _get_backend(backend) return backend.load_elliptic_curve_private_numbers(self) private_value = utils.read_only_property("_private_value") From ab9a65ba1818d00346ec7af7e216017a7c6316d2 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 08:51:42 -0500 Subject: [PATCH 924/988] make backend arg optional for rsa (#5396) --- docs/hazmat/primitives/asymmetric/rsa.rst | 12 ++++++------ src/cryptography/hazmat/primitives/asymmetric/rsa.py | 10 +++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index ea4cce90542c..c3311c80c96c 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -14,7 +14,7 @@ Unlike symmetric cryptography, where the key is typically just a random series of bytes, RSA keys have a complex internal structure with `specific mathematical properties`_. -.. function:: generate_private_key(public_exponent, key_size, backend) +.. function:: generate_private_key(public_exponent, key_size, backend=None) .. versionadded:: 0.5 @@ -49,7 +49,7 @@ mathematical properties`_. `at least 2048`_ (See page 41). It must not be less than 512. Some backends may have additional limitations. - :param backend: A backend which implements + :param backend: An optional backend which implements :class:`~cryptography.hazmat.backends.interfaces.RSABackend`. :return: An instance of @@ -403,9 +403,9 @@ is unavailable. The public exponent. - .. method:: public_key(backend) + .. method:: public_key(backend=None) - :param backend: An instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.RSABackend`. :returns: A new instance of @@ -470,9 +470,9 @@ is unavailable. A `Chinese remainder theorem`_ coefficient used to speed up RSA operations. Calculated as: q\ :sup:`-1` mod p - .. method:: private_key(backend) + .. method:: private_key(backend=None) - :param backend: A new instance of + :param backend: An optional instance of :class:`~cryptography.hazmat.backends.interfaces.RSABackend`. :returns: An instance of diff --git a/src/cryptography/hazmat/primitives/asymmetric/rsa.py b/src/cryptography/hazmat/primitives/asymmetric/rsa.py index ea8b523d0967..d8b8ddd914cc 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -16,6 +16,7 @@ from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import RSABackend @@ -109,7 +110,8 @@ def verify(self, signature, data, padding, algorithm): RSAPublicKeyWithSerialization = RSAPublicKey -def generate_private_key(public_exponent, key_size, backend): +def generate_private_key(public_exponent, key_size, backend=None): + backend = _get_backend(backend) if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( "Backend object does not implement RSABackend.", @@ -304,7 +306,8 @@ def __init__(self, p, q, d, dmp1, dmq1, iqmp, public_numbers): iqmp = utils.read_only_property("_iqmp") public_numbers = utils.read_only_property("_public_numbers") - def private_key(self, backend): + def private_key(self, backend=None): + backend = _get_backend(backend) return backend.load_rsa_private_numbers(self) def __eq__(self, other): @@ -351,7 +354,8 @@ def __init__(self, e, n): e = utils.read_only_property("_e") n = utils.read_only_property("_n") - def public_key(self, backend): + def public_key(self, backend=None): + backend = _get_backend(backend) return backend.load_rsa_public_numbers(self) def __repr__(self): From 4ef460abb2ca5dafa245f685f4b76e704567cca1 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Aug 2020 11:26:43 -0400 Subject: [PATCH 925/988] Attempt to get wycheproof working on arm64 (#5393) --- .zuul.playbooks/playbooks/main.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.zuul.playbooks/playbooks/main.yaml b/.zuul.playbooks/playbooks/main.yaml index bb1a36603d35..f55636cd78d3 100644 --- a/.zuul.playbooks/playbooks/main.yaml +++ b/.zuul.playbooks/playbooks/main.yaml @@ -26,7 +26,15 @@ become: yes when: ansible_distribution == 'CentOS' + - name: Clone wycheproof + git: + repo: https://github.com/google/wycheproof + dest: "{{ ansible_facts.env['HOME'] }}/wycheproof" + depth: 1 + - name: Run tox include_role: name: tox + vars: + tox_extra_args: "-- --wycheproof-root={{ ansible_facts.env['HOME'] }}/wycheproof/" From 652983a624f27c3bde8b4204ed9ab0597bc7217e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 11:09:43 -0500 Subject: [PATCH 926/988] improve CI speed by removing some macos builders (#5397) testing on every python version is necessary but we don't need to do it on all platforms. macos has the lowest concurrency so let's cut there. --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b0b89c4cc8a..f3f514c1c5ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,8 +17,6 @@ jobs: PYTHON: - {VERSION: "2.7", TOXENV: "py27", EXTRA_CFLAGS: ""} - {VERSION: "3.5", TOXENV: "py35", EXTRA_CFLAGS: ""} - - {VERSION: "3.6", TOXENV: "py36", EXTRA_CFLAGS: ""} - - {VERSION: "3.7", TOXENV: "py37", EXTRA_CFLAGS: ""} - {VERSION: "3.8", TOXENV: "py38", EXTRA_CFLAGS: "-DUSE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on macOS" steps: From fce9a79215a772f4286ee5674fbe9cf4d17c5f9e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Aug 2020 12:50:13 -0400 Subject: [PATCH 927/988] fixes #4706 -- don't internal error on corrupt private key (#5307) * fixes #4706 -- don't internal error on corrupt private key * Temporary disable paramiko --- .travis.yml | 6 ++-- .../hazmat/backends/openssl/rsa.py | 5 ++++ tests/hazmat/primitives/fixtures_rsa.py | 30 +++++++++++++++++++ tests/hazmat/primitives/test_rsa.py | 7 +++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4bc0c1c11a32..f05d344e1903 100644 --- a/.travis.yml +++ b/.travis.yml @@ -118,8 +118,10 @@ matrix: env: DOWNSTREAM=pyopenssl - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1g - - python: 2.7 - env: DOWNSTREAM=paramiko + # Temporary disabled until + # https://github.com/paramiko/paramiko/pull/1723 is merged + # - python: 2.7 + # env: DOWNSTREAM=paramiko - python: 2.7 env: DOWNSTREAM=aws-encryption-sdk - python: 2.7 diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index df697a1f6220..d4dffa13ce02 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -314,6 +314,11 @@ def verify(self): @utils.register_interface(RSAPrivateKeyWithSerialization) class _RSAPrivateKey(object): def __init__(self, backend, rsa_cdata, evp_pkey): + res = backend._lib.RSA_check_key(rsa_cdata) + if res != 1: + errors = backend._consume_errors_with_text() + raise ValueError("Invalid private key", errors) + self._backend = backend self._rsa_cdata = rsa_cdata self._evp_pkey = evp_pkey diff --git a/tests/hazmat/primitives/fixtures_rsa.py b/tests/hazmat/primitives/fixtures_rsa.py index 801fb914cf8e..2c0627282130 100644 --- a/tests/hazmat/primitives/fixtures_rsa.py +++ b/tests/hazmat/primitives/fixtures_rsa.py @@ -784,3 +784,33 @@ ), ), ) + +RSA_KEY_CORRUPTED = b""" +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAuYE4k09MAsi1yjMrXekMe6sT9bEt3ko47dnmN8YBgO8DiiCc +226TnQPvuX3FGxU+Y1zTJpcvVL3L37UOvh4CSb9zKyrFK9/x/UcCfK3Eq8JdS98P +CVeGpkp5E+vwIKY72rc1RSSSCs0PtFdYbSn4trwf5BjPxIqXwIOS3R7zC7cLPHY4 +YdsM4gLGVOP17uXJr/MPoAtWTBVm5zx4bHm6Xclzgf86sbPdL3LxNs0fz4HqJZgA +6EUtyl6Qypq2LjXbdmm2i3vC+MxW6nEPItPqgComhq0zBmVonsiEO87rEtD548Yq +DKvxwHhlcODcVkAYebJ+W5L6PPJBNYA3t5wYyQIDAQABAoIBAAbHkg5msftpGt5Z +Vb3yUuepem7hWTF5YFlIRw5l2wNcURNpbswEhOVNJbuG+KCple7Dw4TuDmhHs/zr +BRqpDhXldhrUtb2uc3ihqWiVFJbieqE4jUbGvMJusvtXXeDwU6wGWzV/V4qndCrk +u4PGypk4Cbbq6ZP2oufPryQ3D4Ff1TA06RSWdP3Cg673VqwLtkXwsRDhymAviiqU +hxQg8bRNiD7mYoUKyLVeV7YRDLTBugfiFmy54yC99NJclLkYmzCgRt1EuoW0Hixx +EIQFEOLftgpc+sKpbbiOileMsc/stytHXXqfgozhBxDNeSzdNYfwEpkLJpLZSUNV +EhS4X1cCgYEAz+7DkXksWw9zLqYniMIcvcBnHQcy3Anqbcu8Zbw+I9wOwzNt44Bo +f88i2idvWvMsRq/LX4WD4jjPB4Z3wAzGBCq+2cy0GrWByMu+VbpwCrntRBkS5huY +IIf1nr1+BuySNt8TL6nZNKz0D8+5c8wT+VbVdPH//4MzfDrK81PPnesCgYEA5GMy +ji4l+8zO33LFMlWQGYgfSMd4jGMQD0VCvfhlosK0Py0AfZj/GKEGHduo/37KVVvb +6XdJqYgB7OxPmdEqbMGeYPKv7pKkG1jXRuEtmXXJ9hS1t0oIvXJLHJnQrOOoRRAR ++xJZbI7WjemY+ZCMOAPT1tm97pxjs81WgSJ6ExsCgYEAze5ADfEeNskkYAz6lnz4 +jgzhkmQwwK+pVzgxy9g8brNkg3qJ2Iix9fKlJ71qkX7IWPF9z4qhxQhSMbfBHZkI ++9OB1J7huJoOgVkXliwIbvcYvxq+Fts5XO6KGb699AmT/XgMvmXO0lbAGLC3kLGL +DqQrH3kU+m9sLBrmKPrWYiUCgYEA3/8etW4zmMvd1jAFkoFyzGfCbyocZGxAcwm2 +FQYMAN8/03p6sbSd9XTwv9YR4Uxke+WURkjVuW2IneuDgtQv6QCFKob74Jx4Uc4H +jiAKDioFg9H6C6OUAOKZIpsFnJvIDLxfNkVf6WYKrrL+cz6/F61BVsbGTsGZ094/ +ynWbDyMCgYEAh44C/wkebe0zz/llG+KTRGENsw1c7+pm0/l3wPYAlH02ewbyRjFf +OKPfyyBtBkoD5rG3IbLyPxsbd3wWwyUzSYq02qRJq43XqyMZhRnNlYhEnNu/Gr5H +sN1f13zqkKoRxxbIjyh4RDYlAv4Sehk27z2Q3gBe9bI5xKkoQ/VfF2w= +-----END RSA PRIVATE KEY----- +""" diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index fc806c9ef417..b23a176fea1c 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -49,6 +49,7 @@ RSA_KEY_599, RSA_KEY_745, RSA_KEY_768, + RSA_KEY_CORRUPTED, ) from .utils import ( _check_rsa_private_numbers, @@ -729,6 +730,12 @@ def test_prehashed_unsupported_in_verifier_ctx(self, backend): asym_utils.Prehashed(hashes.SHA1()), ) + def test_corrupted_private_key(self, backend): + with pytest.raises(ValueError): + serialization.load_pem_private_key( + RSA_KEY_CORRUPTED, password=None, backend=backend + ) + @pytest.mark.requires_backend_interface(interface=RSABackend) class TestRSAVerification(object): From 8c21ebae7056d607639dc97a4118089678b6afcc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Aug 2020 15:10:36 -0400 Subject: [PATCH 928/988] Improve debugability of this internal error (#5399) --- src/cryptography/hazmat/backends/openssl/backend.py | 4 ++-- src/cryptography/hazmat/backends/openssl/ciphers.py | 3 ++- src/cryptography/hazmat/bindings/openssl/binding.py | 6 ++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index d2df2271955e..487a94ccc620 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -230,8 +230,8 @@ def __init__(self): if self._lib.Cryptography_HAS_EVP_PKEY_DHX: self._dh_types.append(self._lib.EVP_PKEY_DHX) - def openssl_assert(self, ok): - return binding._openssl_assert(self._lib, ok) + def openssl_assert(self, ok, errors=None): + return binding._openssl_assert(self._lib, ok, errors=errors) def _is_fips_enabled(self): fips_mode = getattr(self._lib, "FIPS_mode", lambda: 0) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 8e9b58cd2a4f..6092803b7fe6 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -167,7 +167,8 @@ def finalize(self): errors[0]._lib_reason_match( self._backend._lib.ERR_LIB_EVP, self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH, - ) + ), + errors=errors, ) raise ValueError( "The length of the provided data is not a multiple of " diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index e462201e2634..178a81e0d56c 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -72,9 +72,11 @@ def _consume_errors_with_text(lib): return _errors_with_text(_consume_errors(lib)) -def _openssl_assert(lib, ok): +def _openssl_assert(lib, ok, errors=None): if not ok: - errors_with_text = _consume_errors_with_text(lib) + if errors is None: + errors = _consume_errors(lib) + errors_with_text = _errors_with_text(errors) raise InternalError( "Unknown OpenSSL error. This error is commonly encountered when " From 1be5b5e8b82242933e1dad597f9611556f3911b5 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 14:47:55 -0500 Subject: [PATCH 929/988] get rid of xenial builder on arm64 (#5398) * get rid of xenial builder on arm64 death to xenial * remove from project.yaml as well * try py27 on centos8 --- .zuul.d/jobs.yaml | 10 +++++----- .zuul.d/project.yaml | 2 +- .zuul.playbooks/playbooks/main.yaml | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.zuul.d/jobs.yaml b/.zuul.d/jobs.yaml index 66cdc1712a7a..bcfc6d79c52d 100644 --- a/.zuul.d/jobs.yaml +++ b/.zuul.d/jobs.yaml @@ -19,15 +19,15 @@ tox_envlist: py36 - job: - name: pyca-cryptography-ubuntu-xenial-py27-arm64 + name: pyca-cryptography-centos-8-py36-arm64 parent: pyca-cryptography-base - nodeset: ubuntu-xenial-arm64 + nodeset: centos-8-arm64 vars: - tox_envlist: py27 + tox_envlist: py36 - job: - name: pyca-cryptography-centos-8-py36-arm64 + name: pyca-cryptography-centos-8-py27-arm64 parent: pyca-cryptography-base nodeset: centos-8-arm64 vars: - tox_envlist: py36 + tox_envlist: py27 diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml index b686107e68e2..233903728ee0 100644 --- a/.zuul.d/project.yaml +++ b/.zuul.d/project.yaml @@ -3,5 +3,5 @@ jobs: - pyca-cryptography-ubuntu-focal-py38-arm64 - pyca-cryptography-ubuntu-bionic-py36-arm64 - - pyca-cryptography-ubuntu-xenial-py27-arm64 - pyca-cryptography-centos-8-py36-arm64 + - pyca-cryptography-centos-8-py27-arm64 diff --git a/.zuul.playbooks/playbooks/main.yaml b/.zuul.playbooks/playbooks/main.yaml index f55636cd78d3..fc92398ffa62 100644 --- a/.zuul.playbooks/playbooks/main.yaml +++ b/.zuul.playbooks/playbooks/main.yaml @@ -23,6 +23,7 @@ - libffi-devel - openssl-devel - python3-devel + - python2-devel become: yes when: ansible_distribution == 'CentOS' From e52b861d759473ee73b2550b53179949a4727890 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 15:16:50 -0500 Subject: [PATCH 930/988] add changelog and update backend docs for optional change (#5401) --- CHANGELOG.rst | 2 ++ docs/hazmat/backends/index.rst | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1a95a9eb8b8c..999805943137 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,8 @@ Changelog for it. * Deprecated support for Python 3.5. This version sees very little use and will be removed in the next release. +* ``backend`` arguments to functions are no longer required and the + default backend will automatically be selected if no ``backend`` is provided. * Added initial support for parsing certificates from PKCS7 files with :func:`~cryptography.hazmat.primitives.serialization.pkcs7.load_pem_pkcs7_certificates` and diff --git a/docs/hazmat/backends/index.rst b/docs/hazmat/backends/index.rst index a8a1ff301f09..97dbc869b8ce 100644 --- a/docs/hazmat/backends/index.rst +++ b/docs/hazmat/backends/index.rst @@ -8,10 +8,13 @@ Getting a backend .. currentmodule:: cryptography.hazmat.backends -``cryptography`` was originally designed to support multiple backends, but -this design has been deprecated. +``cryptography`` was designed to support multiple cryptographic backends, but +consumers rarely need this flexibility. Starting with version 3.1 ``backend`` +arguments are optional and the default backend will automatically be selected +if none is specified. -You can get the default backend by calling :func:`~default_backend`. +On older versions you can get the default backend by calling +:func:`~default_backend`. .. function:: default_backend() From 0fa77f1530656b2938d73945d0467b0725da1a1d Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 15:34:59 -0500 Subject: [PATCH 931/988] HOTP and TOTP should also have optional backends (#5402) --- docs/hazmat/primitives/twofactor.rst | 12 ++++++------ src/cryptography/hazmat/primitives/twofactor/hotp.py | 4 +++- src/cryptography/hazmat/primitives/twofactor/totp.py | 4 +++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/hazmat/primitives/twofactor.rst b/docs/hazmat/primitives/twofactor.rst index 51625dfc28e2..838e5e1055c3 100644 --- a/docs/hazmat/primitives/twofactor.rst +++ b/docs/hazmat/primitives/twofactor.rst @@ -18,7 +18,7 @@ codes (HMAC). .. currentmodule:: cryptography.hazmat.primitives.twofactor.hotp -.. class:: HOTP(key, length, algorithm, backend, enforce_key_length=True) +.. class:: HOTP(key, length, algorithm, backend=None, enforce_key_length=True) .. versionadded:: 0.3 @@ -49,15 +49,15 @@ codes (HMAC). :param cryptography.hazmat.primitives.hashes.HashAlgorithm algorithm: A :class:`~cryptography.hazmat.primitives.hashes` instance. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` instance. :param enforce_key_length: A boolean flag defaulting to True that toggles whether a minimum key length of 128 :term:`bits` is enforced. This exists to work around the fact that as documented in `Issue #2915`_, the Google Authenticator PAM module by default generates 80 bit keys. - If this flag is set to False, the application develop should implement - additional checks of the key length before passing it into + If this flag is set to False, the application developer should + implement additional checks of the key length before passing it into :class:`~cryptography.hazmat.primitives.twofactor.hotp.HOTP`. .. versionadded:: 1.5 @@ -141,7 +141,7 @@ similar to the following code. .. currentmodule:: cryptography.hazmat.primitives.twofactor.totp -.. class:: TOTP(key, length, algorithm, time_step, backend, enforce_key_length=True) +.. class:: TOTP(key, length, algorithm, time_step, backend=None, enforce_key_length=True) TOTP objects take a ``key``, ``length``, ``algorithm`` and ``time_step`` parameter. The ``key`` should be :doc:`randomly generated bytes @@ -173,7 +173,7 @@ similar to the following code. :class:`~cryptography.hazmat.primitives.hashes` instance. :param int time_step: The time step size. The recommended size is 30. - :param backend: A + :param backend: An optional :class:`~cryptography.hazmat.backends.interfaces.HMACBackend` instance. :param enforce_key_length: A boolean flag defaulting to True that toggles diff --git a/src/cryptography/hazmat/primitives/twofactor/hotp.py b/src/cryptography/hazmat/primitives/twofactor/hotp.py index ed385502e3df..c00eec0e548b 100644 --- a/src/cryptography/hazmat/primitives/twofactor/hotp.py +++ b/src/cryptography/hazmat/primitives/twofactor/hotp.py @@ -9,6 +9,7 @@ import six from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time, hmac from cryptography.hazmat.primitives.hashes import SHA1, SHA256, SHA512 @@ -18,8 +19,9 @@ class HOTP(object): def __init__( - self, key, length, algorithm, backend, enforce_key_length=True + self, key, length, algorithm, backend=None, enforce_key_length=True ): + backend = _get_backend(backend) if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", diff --git a/src/cryptography/hazmat/primitives/twofactor/totp.py b/src/cryptography/hazmat/primitives/twofactor/totp.py index 6056321eacba..d59539b3f9db 100644 --- a/src/cryptography/hazmat/primitives/twofactor/totp.py +++ b/src/cryptography/hazmat/primitives/twofactor/totp.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.backends.interfaces import HMACBackend from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.primitives.twofactor import InvalidToken @@ -19,9 +20,10 @@ def __init__( length, algorithm, time_step, - backend, + backend=None, enforce_key_length=True, ): + backend = _get_backend(backend) if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( "Backend object does not implement HMACBackend.", From 679a1c7b93cb9d48f4813e7fdffd51c427667841 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 15 Aug 2020 16:52:16 -0400 Subject: [PATCH 932/988] clean up error stack in p7 (#5403) --- src/cryptography/hazmat/backends/openssl/backend.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 487a94ccc620..afe57a537b19 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2569,6 +2569,7 @@ def load_pem_pkcs7_certificates(self, data): bio.bio, self._ffi.NULL, self._ffi.NULL, self._ffi.NULL ) if p7 == self._ffi.NULL: + self._consume_errors() raise ValueError("Unable to parse PKCS7 data") p7 = self._ffi.gc(p7, self._lib.PKCS7_free) @@ -2579,6 +2580,7 @@ def load_der_pkcs7_certificates(self, data): bio = self._bytes_to_bio(data) p7 = self._lib.d2i_PKCS7_bio(bio.bio, self._ffi.NULL) if p7 == self._ffi.NULL: + self._consume_errors() raise ValueError("Unable to parse PKCS7 data") p7 = self._ffi.gc(p7, self._lib.PKCS7_free) From 9a55f775e5faa58e260451725d8d5bd3b41ce379 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 18:05:46 -0500 Subject: [PATCH 933/988] move the x509 parsers into the backend object (#5405) * move the parser into the backend object This allows us to generate the list of supported extensions when instantiating the backend object rather than building multiple parsers and picking the right one at runtime when parsing the extensions themselves. * sigh --- .../hazmat/backends/openssl/backend.py | 62 +++++++++ .../hazmat/backends/openssl/decode_asn1.py | 120 +++++------------- .../hazmat/backends/openssl/ocsp.py | 17 +-- .../hazmat/backends/openssl/x509.py | 22 +--- 4 files changed, 103 insertions(+), 118 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index afe57a537b19..3d1079ad9048 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -42,6 +42,14 @@ from cryptography.hazmat.backends.openssl.cmac import _CMACContext from cryptography.hazmat.backends.openssl.decode_asn1 import ( _CRL_ENTRY_REASON_ENUM_TO_CODE, + _CRL_EXTENSION_HANDLERS, + _EXTENSION_HANDLERS_BASE, + _EXTENSION_HANDLERS_SCT, + _OCSP_BASICRESP_EXTENSION_HANDLERS, + _OCSP_REQ_EXTENSION_HANDLERS, + _OCSP_SINGLERESP_EXTENSION_HANDLERS_SCT, + _REVOKED_EXTENSION_HANDLERS, + _X509ExtensionParser, ) from cryptography.hazmat.backends.openssl.dh import ( _DHParameters, @@ -219,6 +227,7 @@ def __init__(self): self._cipher_registry = {} self._register_default_ciphers() + self._register_x509_ext_parsers() if self._fips_enabled and self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: warnings.warn( "OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.", @@ -404,6 +413,59 @@ def _register_default_ciphers(self): ) self.register_cipher_adapter(AES, XTS, _get_xts_cipher) + def _register_x509_ext_parsers(self): + ext_handlers = _EXTENSION_HANDLERS_BASE.copy() + # All revoked extensions are valid single response extensions, see: + # https://tools.ietf.org/html/rfc6960#section-4.4.5 + singleresp_handlers = _REVOKED_EXTENSION_HANDLERS.copy() + + if self._lib.Cryptography_HAS_SCT: + ext_handlers.update(_EXTENSION_HANDLERS_SCT) + singleresp_handlers.update(_OCSP_SINGLERESP_EXTENSION_HANDLERS_SCT) + + self._certificate_extension_parser = _X509ExtensionParser( + self, + ext_count=self._lib.X509_get_ext_count, + get_ext=self._lib.X509_get_ext, + handlers=ext_handlers, + ) + self._csr_extension_parser = _X509ExtensionParser( + self, + ext_count=self._lib.sk_X509_EXTENSION_num, + get_ext=self._lib.sk_X509_EXTENSION_value, + handlers=ext_handlers, + ) + self._revoked_cert_extension_parser = _X509ExtensionParser( + self, + ext_count=self._lib.X509_REVOKED_get_ext_count, + get_ext=self._lib.X509_REVOKED_get_ext, + handlers=_REVOKED_EXTENSION_HANDLERS, + ) + self._crl_extension_parser = _X509ExtensionParser( + self, + ext_count=self._lib.X509_CRL_get_ext_count, + get_ext=self._lib.X509_CRL_get_ext, + handlers=_CRL_EXTENSION_HANDLERS, + ) + self._ocsp_req_ext_parser = _X509ExtensionParser( + self, + ext_count=self._lib.OCSP_REQUEST_get_ext_count, + get_ext=self._lib.OCSP_REQUEST_get_ext, + handlers=_OCSP_REQ_EXTENSION_HANDLERS, + ) + self._ocsp_basicresp_ext_parser = _X509ExtensionParser( + self, + ext_count=self._lib.OCSP_BASICRESP_get_ext_count, + get_ext=self._lib.OCSP_BASICRESP_get_ext, + handlers=_OCSP_BASICRESP_EXTENSION_HANDLERS, + ) + self._ocsp_singleresp_ext_parser = _X509ExtensionParser( + self, + ext_count=self._lib.OCSP_SINGLERESP_get_ext_count, + get_ext=self._lib.OCSP_SINGLERESP_get_ext, + handlers=singleresp_handlers, + ) + def create_symmetric_encryption_ctx(self, cipher, mode): return _CipherContext(self, cipher, mode, _CipherContext._ENCRYPT) diff --git a/src/cryptography/hazmat/backends/openssl/decode_asn1.py b/src/cryptography/hazmat/backends/openssl/decode_asn1.py index 56dcf26c1b54..279b00ca5c10 100644 --- a/src/cryptography/hazmat/backends/openssl/decode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -181,21 +181,25 @@ def _decode_delta_crl_indicator(backend, ext): class _X509ExtensionParser(object): - def __init__(self, ext_count, get_ext, handlers): + def __init__(self, backend, ext_count, get_ext, handlers): self.ext_count = ext_count self.get_ext = get_ext self.handlers = handlers + self._backend = backend - def parse(self, backend, x509_obj): + def parse(self, x509_obj): extensions = [] seen_oids = set() - for i in range(self.ext_count(backend, x509_obj)): - ext = self.get_ext(backend, x509_obj, i) - backend.openssl_assert(ext != backend._ffi.NULL) - crit = backend._lib.X509_EXTENSION_get_critical(ext) + for i in range(self.ext_count(x509_obj)): + ext = self.get_ext(x509_obj, i) + self._backend.openssl_assert(ext != self._backend._ffi.NULL) + crit = self._backend._lib.X509_EXTENSION_get_critical(ext) critical = crit == 1 oid = x509.ObjectIdentifier( - _obj2txt(backend, backend._lib.X509_EXTENSION_get_object(ext)) + _obj2txt( + self._backend, + self._backend._lib.X509_EXTENSION_get_object(ext), + ) ) if oid in seen_oids: raise x509.DuplicateExtension( @@ -207,8 +211,8 @@ def parse(self, backend, x509_obj): # ourselves. if oid == ExtensionOID.TLS_FEATURE: # The extension contents are a SEQUENCE OF INTEGERs. - data = backend._lib.X509_EXTENSION_get_data(ext) - data_bytes = _asn1_string_to_bytes(backend, data) + data = self._backend._lib.X509_EXTENSION_get_data(ext) + data_bytes = _asn1_string_to_bytes(self._backend, data) features = DERReader(data_bytes).read_single_element(SEQUENCE) parsed = [] while not features.is_empty(): @@ -221,9 +225,9 @@ def parse(self, backend, x509_obj): seen_oids.add(oid) continue elif oid == ExtensionOID.PRECERT_POISON: - data = backend._lib.X509_EXTENSION_get_data(ext) + data = self._backend._lib.X509_EXTENSION_get_data(ext) # The contents of the extension must be an ASN.1 NULL. - reader = DERReader(_asn1_string_to_bytes(backend, data)) + reader = DERReader(_asn1_string_to_bytes(self._backend, data)) reader.read_single_element(NULL).check_empty() extensions.append( x509.Extension(oid, critical, x509.PrecertPoison()) @@ -235,21 +239,21 @@ def parse(self, backend, x509_obj): handler = self.handlers[oid] except KeyError: # Dump the DER payload into an UnrecognizedExtension object - data = backend._lib.X509_EXTENSION_get_data(ext) - backend.openssl_assert(data != backend._ffi.NULL) - der = backend._ffi.buffer(data.data, data.length)[:] + data = self._backend._lib.X509_EXTENSION_get_data(ext) + self._backend.openssl_assert(data != self._backend._ffi.NULL) + der = self._backend._ffi.buffer(data.data, data.length)[:] unrecognized = x509.UnrecognizedExtension(oid, der) extensions.append(x509.Extension(oid, critical, unrecognized)) else: - ext_data = backend._lib.X509V3_EXT_d2i(ext) - if ext_data == backend._ffi.NULL: - backend._consume_errors() + ext_data = self._backend._lib.X509V3_EXT_d2i(ext) + if ext_data == self._backend._ffi.NULL: + self._backend._consume_errors() raise ValueError( "The {} extension is invalid and can't be " "parsed".format(oid) ) - value = handler(backend, ext_data) + value = handler(self._backend, ext_data) extensions.append(x509.Extension(oid, critical, value)) seen_oids.add(oid) @@ -813,7 +817,7 @@ def _decode_nonce(backend, nonce): return x509.OCSPNonce(_asn1_string_to_bytes(backend, nonce)) -_EXTENSION_HANDLERS_NO_SCT = { +_EXTENSION_HANDLERS_BASE = { ExtensionOID.BASIC_CONSTRAINTS: _decode_basic_constraints, ExtensionOID.SUBJECT_KEY_IDENTIFIER: _decode_subject_key_identifier, ExtensionOID.KEY_USAGE: _decode_key_usage, @@ -835,11 +839,11 @@ def _decode_nonce(backend, nonce): ExtensionOID.NAME_CONSTRAINTS: _decode_name_constraints, ExtensionOID.POLICY_CONSTRAINTS: _decode_policy_constraints, } -_EXTENSION_HANDLERS = _EXTENSION_HANDLERS_NO_SCT.copy() -_EXTENSION_HANDLERS[ - ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS -] = _decode_precert_signed_certificate_timestamps - +_EXTENSION_HANDLERS_SCT = { + ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: ( + _decode_precert_signed_certificate_timestamps + ) +} _REVOKED_EXTENSION_HANDLERS = { CRLEntryExtensionOID.CRL_REASON: _decode_crl_reason, @@ -867,66 +871,8 @@ def _decode_nonce(backend, nonce): OCSPExtensionOID.NONCE: _decode_nonce, } -# All revoked extensions are valid single response extensions, see: -# https://tools.ietf.org/html/rfc6960#section-4.4.5 -_OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT = _REVOKED_EXTENSION_HANDLERS.copy() -_OCSP_SINGLERESP_EXTENSION_HANDLERS = ( - _OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT.copy() -) -_OCSP_SINGLERESP_EXTENSION_HANDLERS[ - ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS -] = _decode_signed_certificate_timestamps - -_CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), - handlers=_EXTENSION_HANDLERS_NO_SCT, -) - -_CERTIFICATE_EXTENSION_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), - handlers=_EXTENSION_HANDLERS, -) - -_CSR_EXTENSION_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.sk_X509_EXTENSION_num(x), - get_ext=lambda backend, x, i: backend._lib.sk_X509_EXTENSION_value(x, i), - handlers=_EXTENSION_HANDLERS, -) - -_REVOKED_CERTIFICATE_EXTENSION_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.X509_REVOKED_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.X509_REVOKED_get_ext(x, i), - handlers=_REVOKED_EXTENSION_HANDLERS, -) - -_CRL_EXTENSION_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.X509_CRL_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.X509_CRL_get_ext(x, i), - handlers=_CRL_EXTENSION_HANDLERS, -) - -_OCSP_REQ_EXT_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.OCSP_REQUEST_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.OCSP_REQUEST_get_ext(x, i), - handlers=_OCSP_REQ_EXTENSION_HANDLERS, -) - -_OCSP_BASICRESP_EXT_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.OCSP_BASICRESP_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.OCSP_BASICRESP_get_ext(x, i), - handlers=_OCSP_BASICRESP_EXTENSION_HANDLERS, -) - -_OCSP_SINGLERESP_EXT_PARSER = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.OCSP_SINGLERESP_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.OCSP_SINGLERESP_get_ext(x, i), - handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS, -) - -_OCSP_SINGLERESP_EXT_PARSER_NO_SCT = _X509ExtensionParser( - ext_count=lambda backend, x: backend._lib.OCSP_SINGLERESP_get_ext_count(x), - get_ext=lambda backend, x, i: backend._lib.OCSP_SINGLERESP_get_ext(x, i), - handlers=_OCSP_SINGLERESP_EXTENSION_HANDLERS_NO_SCT, -) +_OCSP_SINGLERESP_EXTENSION_HANDLERS_SCT = { + ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS: ( + _decode_signed_certificate_timestamps + ) +} diff --git a/src/cryptography/hazmat/backends/openssl/ocsp.py b/src/cryptography/hazmat/backends/openssl/ocsp.py index c432e222c259..50c02e7a8018 100644 --- a/src/cryptography/hazmat/backends/openssl/ocsp.py +++ b/src/cryptography/hazmat/backends/openssl/ocsp.py @@ -10,10 +10,6 @@ from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( _CRL_ENTRY_REASON_CODE_TO_ENUM, - _OCSP_BASICRESP_EXT_PARSER, - _OCSP_REQ_EXT_PARSER, - _OCSP_SINGLERESP_EXT_PARSER, - _OCSP_SINGLERESP_EXT_PARSER_NO_SCT, _asn1_integer_to_int, _asn1_string_to_bytes, _decode_x509_name, @@ -340,19 +336,12 @@ def serial_number(self): @utils.cached_property @_requires_successful_response def extensions(self): - return _OCSP_BASICRESP_EXT_PARSER.parse(self._backend, self._basic) + return self._backend._ocsp_basicresp_ext_parser.parse(self._basic) @utils.cached_property @_requires_successful_response def single_extensions(self): - if self._backend._lib.Cryptography_HAS_SCT: - return _OCSP_SINGLERESP_EXT_PARSER.parse( - self._backend, self._single - ) - else: - return _OCSP_SINGLERESP_EXT_PARSER_NO_SCT.parse( - self._backend, self._single - ) + return self._backend._ocsp_singleresp_ext_parser.parse(self._single) def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: @@ -400,7 +389,7 @@ def hash_algorithm(self): @utils.cached_property def extensions(self): - return _OCSP_REQ_EXT_PARSER.parse(self._backend, self._ocsp_request) + return self._backend._ocsp_req_ext_parser.parse(self._ocsp_request) def public_bytes(self, encoding): if encoding is not serialization.Encoding.DER: diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 1ebb6946892f..4d0dac7649a6 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -10,11 +10,6 @@ from cryptography import utils, x509 from cryptography.exceptions import UnsupportedAlgorithm from cryptography.hazmat.backends.openssl.decode_asn1 import ( - _CERTIFICATE_EXTENSION_PARSER, - _CERTIFICATE_EXTENSION_PARSER_NO_SCT, - _CRL_EXTENSION_PARSER, - _CSR_EXTENSION_PARSER, - _REVOKED_CERTIFICATE_EXTENSION_PARSER, _asn1_integer_to_int, _asn1_string_to_bytes, _decode_x509_name, @@ -133,14 +128,7 @@ def signature_algorithm_oid(self): @utils.cached_property def extensions(self): - if self._backend._lib.Cryptography_HAS_SCT: - return _CERTIFICATE_EXTENSION_PARSER.parse( - self._backend, self._x509 - ) - else: - return _CERTIFICATE_EXTENSION_PARSER_NO_SCT.parse( - self._backend, self._x509 - ) + return self._backend._certificate_extension_parser.parse(self._x509) @property def signature(self): @@ -207,8 +195,8 @@ def revocation_date(self): @utils.cached_property def extensions(self): - return _REVOKED_CERTIFICATE_EXTENSION_PARSER.parse( - self._backend, self._x509_revoked + return self._backend._revoked_cert_extension_parser.parse( + self._x509_revoked ) @@ -363,7 +351,7 @@ def __len__(self): @utils.cached_property def extensions(self): - return _CRL_EXTENSION_PARSER.parse(self._backend, self._x509_crl) + return self._backend._crl_extension_parser.parse(self._x509_crl) def is_signature_valid(self, public_key): if not isinstance( @@ -449,7 +437,7 @@ def extensions(self): ), ), ) - return _CSR_EXTENSION_PARSER.parse(self._backend, x509_exts) + return self._backend._csr_extension_parser.parse(x509_exts) def public_bytes(self, encoding): bio = self._backend._create_mem_bio_gc() From 4a581a9e7080aaf802f7208ce66cd941336bfcf8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 15 Aug 2020 18:40:22 -0500 Subject: [PATCH 934/988] move encoders into backend as well (#5406) this will be useful later, i swear --- .../hazmat/backends/openssl/backend.py | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 3d1079ad9048..1ff07d924e8b 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -228,6 +228,7 @@ def __init__(self): self._cipher_registry = {} self._register_default_ciphers() self._register_x509_ext_parsers() + self._register_x509_encoders() if self._fips_enabled and self._lib.CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE: warnings.warn( "OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.", @@ -466,6 +467,21 @@ def _register_x509_ext_parsers(self): handlers=singleresp_handlers, ) + def _register_x509_encoders(self): + self._extension_encode_handlers = _EXTENSION_ENCODE_HANDLERS.copy() + self._crl_extension_encode_handlers = ( + _CRL_EXTENSION_ENCODE_HANDLERS.copy() + ) + self._crl_entry_extension_encode_handlers = ( + _CRL_ENTRY_EXTENSION_ENCODE_HANDLERS.copy() + ) + self._ocsp_request_extension_encode_handlers = ( + _OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS.copy() + ) + self._ocsp_basicresp_extension_encode_handlers = ( + _OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS.copy() + ) + def create_symmetric_encryption_ctx(self, cipher, mode): return _CipherContext(self, cipher, mode, _CipherContext._ENCRYPT) @@ -971,7 +987,7 @@ def create_x509_csr(self, builder, private_key, algorithm): # sk_extensions and will be freed along with it. self._create_x509_extensions( extensions=builder._extensions, - handlers=_EXTENSION_ENCODE_HANDLERS, + handlers=self._extension_encode_handlers, x509_obj=sk_extension, add_func=self._lib.sk_X509_EXTENSION_insert, gc=False, @@ -1045,7 +1061,7 @@ def create_x509_certificate(self, builder, private_key, algorithm): # Add extensions. self._create_x509_extensions( extensions=builder._extensions, - handlers=_EXTENSION_ENCODE_HANDLERS, + handlers=self._extension_encode_handlers, x509_obj=x509_cert, add_func=self._lib.X509_add_ext, gc=True, @@ -1123,7 +1139,7 @@ def create_x509_crl(self, builder, private_key, algorithm): # Add extensions. self._create_x509_extensions( extensions=builder._extensions, - handlers=_CRL_EXTENSION_ENCODE_HANDLERS, + handlers=self._crl_extension_encode_handlers, x509_obj=x509_crl, add_func=self._lib.X509_CRL_add_ext, gc=True, @@ -1217,7 +1233,7 @@ def create_x509_revoked_certificate(self, builder): # add CRL entry extensions self._create_x509_extensions( extensions=builder._extensions, - handlers=_CRL_ENTRY_EXTENSION_ENCODE_HANDLERS, + handlers=self._crl_entry_extension_encode_handlers, x509_obj=x509_revoked, add_func=self._lib.X509_REVOKED_add_ext, gc=True, @@ -1687,7 +1703,7 @@ def create_ocsp_request(self, builder): self.openssl_assert(onereq != self._ffi.NULL) self._create_x509_extensions( extensions=builder._extensions, - handlers=_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS, + handlers=self._ocsp_request_extension_encode_handlers, x509_obj=ocsp_req, add_func=self._lib.OCSP_REQUEST_add_ext, gc=True, @@ -1755,7 +1771,7 @@ def _create_ocsp_basic_response(self, builder, private_key, algorithm): self._create_x509_extensions( extensions=builder._extensions, - handlers=_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS, + handlers=self._ocsp_basicresp_extension_encode_handlers, x509_obj=basic, add_func=self._lib.OCSP_BASICRESP_add_ext, gc=True, From 872835ea0ded7a1a07ff025646c46bc29899b83f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 16 Aug 2020 14:23:02 -0500 Subject: [PATCH 935/988] update submitting patches docs to be a bit more true (#5407) For now best practice is that they should be optional. --- docs/development/submitting-patches.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/development/submitting-patches.rst b/docs/development/submitting-patches.rst index 11281b525464..b4ed175e6adb 100644 --- a/docs/development/submitting-patches.rst +++ b/docs/development/submitting-patches.rst @@ -81,10 +81,9 @@ Every recipe should include a version or algorithmic marker of some sort in its output in order to allow transparent upgrading of the algorithms in use, as the algorithms or parameters needed to achieve a given security margin evolve. -APIs at the :doc:`/hazmat/primitives/index` layer should always take an -explicit backend, APIs at the recipes layer should automatically use the -:func:`~cryptography.hazmat.backends.default_backend`, but optionally allow -specifying a different backend. +APIs at the :doc:`/hazmat/primitives/index` and recipes layer should +automatically use the :func:`~cryptography.hazmat.backends.default_backend`, +but optionally allow specifying a different backend. C bindings ~~~~~~~~~~ From 42ad3b0cd8cbce9acb8a78c9b016ce716c146406 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 16 Aug 2020 15:49:01 -0500 Subject: [PATCH 936/988] be consistent in our testing (#5409) * be consistent in our testing we don't use default_backend this way in our tests * more black --- tests/hazmat/primitives/test_pbkdf2hmac.py | 31 +++++++++----------- tests/hazmat/primitives/test_x963_vectors.py | 3 +- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/tests/hazmat/primitives/test_pbkdf2hmac.py b/tests/hazmat/primitives/test_pbkdf2hmac.py index 584655fe879c..34fd25cf47e5 100644 --- a/tests/hazmat/primitives/test_pbkdf2hmac.py +++ b/tests/hazmat/primitives/test_pbkdf2hmac.py @@ -7,7 +7,6 @@ import pytest from cryptography.exceptions import AlreadyFinalized, InvalidKey, _Reasons -from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC @@ -16,47 +15,45 @@ class TestPBKDF2HMAC(object): - def test_already_finalized(self): - kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, default_backend()) + def test_already_finalized(self, backend): + kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, backend) kdf.derive(b"password") with pytest.raises(AlreadyFinalized): kdf.derive(b"password2") - kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, default_backend()) + kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, backend) key = kdf.derive(b"password") with pytest.raises(AlreadyFinalized): kdf.verify(b"password", key) - kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, default_backend()) + kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, backend) kdf.verify(b"password", key) with pytest.raises(AlreadyFinalized): kdf.verify(b"password", key) - def test_unsupported_algorithm(self): + def test_unsupported_algorithm(self, backend): with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_HASH): - PBKDF2HMAC( - DummyHashAlgorithm(), 20, b"salt", 10, default_backend() - ) + PBKDF2HMAC(DummyHashAlgorithm(), 20, b"salt", 10, backend) - def test_invalid_key(self): - kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, default_backend()) + def test_invalid_key(self, backend): + kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, backend) key = kdf.derive(b"password") - kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, default_backend()) + kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, backend) with pytest.raises(InvalidKey): kdf.verify(b"password2", key) - def test_unicode_error_with_salt(self): + def test_unicode_error_with_salt(self, backend): with pytest.raises(TypeError): - PBKDF2HMAC(hashes.SHA1(), 20, u"salt", 10, default_backend()) + PBKDF2HMAC(hashes.SHA1(), 20, u"salt", 10, backend) - def test_unicode_error_with_key_material(self): - kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, default_backend()) + def test_unicode_error_with_key_material(self, backend): + kdf = PBKDF2HMAC(hashes.SHA1(), 20, b"salt", 10, backend) with pytest.raises(TypeError): kdf.derive(u"unicode here") def test_buffer_protocol(self, backend): - kdf = PBKDF2HMAC(hashes.SHA1(), 10, b"salt", 10, default_backend()) + kdf = PBKDF2HMAC(hashes.SHA1(), 10, b"salt", 10, backend) data = bytearray(b"data") assert kdf.derive(data) == b"\xe9n\xaa\x81\xbbt\xa4\xf6\x08\xce" diff --git a/tests/hazmat/primitives/test_x963_vectors.py b/tests/hazmat/primitives/test_x963_vectors.py index 31447a05bc77..e3b54fc15516 100644 --- a/tests/hazmat/primitives/test_x963_vectors.py +++ b/tests/hazmat/primitives/test_x963_vectors.py @@ -9,7 +9,6 @@ import pytest -from cryptography.hazmat.backends import default_backend from cryptography.hazmat.backends.interfaces import HashBackend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.x963kdf import X963KDF @@ -58,7 +57,7 @@ def test_x963(self, backend, vector): algorithm=hashfn(), length=key_data_len, sharedinfo=sharedinfo, - backend=default_backend(), + backend=backend, ) xkdf.verify(key, key_data) From 0ed8d6624608c1a23f5a2909b3db45c56915f20e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 16 Aug 2020 17:04:10 -0500 Subject: [PATCH 937/988] use _get_backend everywhere (#5408) * use _get_backend everywhere * black --- src/cryptography/fernet.py | 5 ++--- .../hazmat/primitives/serialization/pkcs12.py | 5 +++-- src/cryptography/hazmat/primitives/serialization/pkcs7.py | 8 +++++--- src/cryptography/hazmat/primitives/serialization/ssh.py | 7 +++---- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/cryptography/fernet.py b/src/cryptography/fernet.py index b5641965913e..00c25286715a 100644 --- a/src/cryptography/fernet.py +++ b/src/cryptography/fernet.py @@ -14,7 +14,7 @@ from cryptography import utils from cryptography.exceptions import InvalidSignature -from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.primitives import hashes, padding from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.hmac import HMAC @@ -29,8 +29,7 @@ class InvalidToken(Exception): class Fernet(object): def __init__(self, key, backend=None): - if backend is None: - backend = default_backend() + backend = _get_backend(backend) key = base64.urlsafe_b64decode(key) if len(key) != 32: diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs12.py b/src/cryptography/hazmat/primitives/serialization/pkcs12.py index 136613d9ec3e..201f32941c1f 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs12.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs12.py @@ -5,7 +5,7 @@ from __future__ import absolute_import, division, print_function from cryptography import x509 -from cryptography.hazmat.backends import _get_backend, default_backend +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa @@ -44,6 +44,7 @@ def serialize_key_and_certificates(name, key, cert, cas, encryption_algorithm): if key is None and cert is None and not cas: raise ValueError("You must supply at least one of key, cert, or cas") - return default_backend().serialize_key_and_certificates_to_pkcs12( + backend = _get_backend(None) + return backend.serialize_key_and_certificates_to_pkcs12( name, key, cert, cas, encryption_algorithm ) diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs7.py b/src/cryptography/hazmat/primitives/serialization/pkcs7.py index 59da844dea95..fcdd1c9aa3c8 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs7.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -4,12 +4,14 @@ from __future__ import absolute_import, division, print_function -from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.backends import _get_backend def load_pem_pkcs7_certificates(data): - return default_backend().load_pem_pkcs7_certificates(data) + backend = _get_backend(None) + return backend.load_pem_pkcs7_certificates(data) def load_der_pkcs7_certificates(data): - return default_backend().load_der_pkcs7_certificates(data) + backend = _get_backend(None) + return backend.load_der_pkcs7_certificates(data) diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index ea0f4a6b8383..250498d8f5f7 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -13,7 +13,7 @@ from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm -from cryptography.hazmat.backends import _get_backend, default_backend +from cryptography.hazmat.backends import _get_backend from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, rsa from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.serialization import ( @@ -579,9 +579,8 @@ def serialize_ssh_private_key(private_key, password=None): salt = os.urandom(16) f_kdfoptions.put_sshstr(salt) f_kdfoptions.put_u32(rounds) - ciph = _init_cipher( - ciphername, password, salt, rounds, default_backend() - ) + backend = _get_backend(None) + ciph = _init_cipher(ciphername, password, salt, rounds, backend) else: ciphername = kdfname = _NONE blklen = 8 From ad17c0378414181b1464bcfb9cef2a26620a4088 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 16 Aug 2020 18:24:35 -0400 Subject: [PATCH 938/988] Attempt to drop the user switch in docker (#5411) --- .travis/run.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis/run.sh b/.travis/run.sh index 19bb8b568b29..01605c2717d4 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -21,9 +21,7 @@ fi source ~/.venv/bin/activate if [ -n "${DOCKER}" ]; then - # We will be able to drop the -u once we switch the default container user in the - # dockerfiles. - docker run --rm -u 2000:2000 \ + docker run --rm \ -v "${TRAVIS_BUILD_DIR}":"${TRAVIS_BUILD_DIR}" \ -v "${HOME}/wycheproof":/wycheproof \ -w "${TRAVIS_BUILD_DIR}" \ From 7081923cb759dd84d7675651ac41d69e161e306e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 16 Aug 2020 17:50:38 -0500 Subject: [PATCH 939/988] refactor wheel builder to use workflows and download/build separately (#5412) * refactor wheel builder to use workflows and download/build separately * Update .github/workflows/wheel-builder.yml Co-authored-by: Alex Gaynor Co-authored-by: Alex Gaynor --- .github/workflows/wheel-builder.yml | 68 +++++++++++++++-------------- release.py | 14 +++--- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index d57e2a83277b..d8ad49b595b9 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -1,7 +1,9 @@ name: Wheel Builder on: - repository_dispatch: - types: [wheel-builder] + workflow_dispatch: + inputs: + version: + required: true jobs: manylinux: @@ -15,21 +17,21 @@ jobs: CONTAINER: "pyca/cryptography-manylinux1:x86_64" - NAME: manylinux2010_x86_64 CONTAINER: "pyca/cryptography-manylinux2010:x86_64" - name: "Python ${{ matrix.PYTHON }} for ${{ matrix.MANYLINUX.NAME }}" + name: "${{ matrix.PYTHON }} for ${{ matrix.MANYLINUX.NAME }}" steps: - run: /opt/python/${{ matrix.PYTHON }}/bin/python -m virtualenv .venv - - name: Downgrade pip, can't remember why - run: .venv/bin/pip install -U pip==10.0.1 - name: Install Python dependencies - run: .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" + run: .venv/bin/pip install -U pip wheel cffi six ipaddress "enum34; python_version < '3'" + - run: .venv/bin/pip download cryptography==${{ github.event.inputs.version }} --no-deps --no-binary cryptography && tar zxvf cryptography*.tar.gz && mkdir tmpwheelhouse - run: | REGEX="cp3([0-9])*" if [[ "${{ matrix.PYTHON }}" =~ $REGEX ]]; then - PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" + PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" fi + cd cryptography* LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ - .venv/bin/pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --no-binary cryptography --no-deps --wheel-dir=tmpwheelhouse $PY_LIMITED_API + ../.venv/bin/python setup.py bdist_wheel $PY_LIMITED_API && mv dist/cryptography*.whl ../tmpwheelhouse - run: auditwheel repair --plat ${{ matrix.MANYLINUX.NAME }} tmpwheelhouse/cryptograph*.whl -w wheelhouse/ - run: unzip wheelhouse/*.whl -d execstack.check - run: | @@ -40,8 +42,6 @@ jobs: else exit 0 fi - - name: Upgrade pip again so we can actually use manylinux2010 - run: .venv/bin/pip install -U pip - run: .venv/bin/pip install cryptography --no-index -f wheelhouse/ - run: | .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" @@ -49,7 +49,7 @@ jobs: - run: mv wheelhouse/cryptography*.whl cryptography-wheelhouse/ - uses: actions/upload-artifact@v1 with: - name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-${{ matrix.MANYLINUX.NAME }}-${{ matrix.PYTHON }}" + name: "cryptography-${{ github.event.inputs.version }}-${{ matrix.MANYLINUX.NAME }}-${{ matrix.PYTHON }}" path: cryptography-wheelhouse/ macos: @@ -65,7 +65,7 @@ jobs: ABI_VERSION: '3.5' DOWNLOAD_URL: 'https://www.python.org/ftp/python/3.8.2/python-3.8.2-macosx10.9.pkg' BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3' - name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS" + name: "${{ matrix.PYTHON.VERSION }} ABI ${{ matrix.PYTHON.ABI_VERSION }} macOS" steps: - uses: actions/checkout@master - run: | @@ -81,24 +81,20 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ${{ matrix.PYTHON.BIN_PATH }} -m virtualenv venv - # Downgrade pip, I can't remember why - - run: venv/bin/pip install -U pip==10.0.1 - - run: venv/bin/pip install -U wheel - - run: venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" - + - run: venv/bin/pip install -U pip wheel cffi six ipaddress "enum34; python_version < '3'" + - run: venv/bin/pip download cryptography==${{ github.event.inputs.version }} --no-deps --no-binary cryptography && tar zxvf cryptography*.tar.gz && mkdir wheelhouse - name: Build the wheel run: | REGEX="3\.([0-9])*" - if [[ "$PYTHON_VERSION" =~ $REGEX ]]; then - PY_LIMITED_API="--build-option --py-limited-api=cp3${BASH_REMATCH[1]}" + if [[ "${{ matrix.PYTHON.ABI_VERSION }}" =~ $REGEX ]]; then + PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" fi + cd cryptography* CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS="1" \ LDFLAGS="${HOME}/openssl-macos/lib/libcrypto.a ${HOME}/openssl-macos/lib/libssl.a" \ CFLAGS="-I${HOME}/openssl-macos/include -mmacosx-version-min=10.10 -march=core2" \ - venv/bin/pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --wheel-dir=wheelhouse --no-binary cryptography --no-deps $PY_LIMITED_API - env: - PYTHON_VERSION: ${{ matrix.PYTHON.ABI_VERSION }} + ../venv/bin/python setup.py bdist_wheel $PY_LIMITED_API && mv dist/cryptography*.whl ../wheelhouse - run: venv/bin/pip install -f wheelhouse --no-index cryptography - run: | venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" @@ -107,7 +103,7 @@ jobs: - run: mv wheelhouse/cryptography*.whl cryptography-wheelhouse/ - uses: actions/upload-artifact@v1 with: - name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}" + name: "cryptography-${{ github.event.inputs.version }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}" path: cryptography-wheelhouse/ windows: @@ -118,16 +114,17 @@ jobs: - {ARCH: 'x86', WINDOWS: 'win32'} - {ARCH: 'x64', WINDOWS: 'win64'} PYTHON: - - {VERSION: "2.7", TOXENV: "py27", MSVC_VERSION: "2010"} - - {VERSION: "3.5", TOXENV: "py35", MSVC_VERSION: "2019"} - - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019"} - - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019"} - - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019"} - name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" + - {VERSION: "2.7", MSVC_VERSION: "2010"} + - {VERSION: "3.5", MSVC_VERSION: "2019"} + - {VERSION: "3.6", MSVC_VERSION: "2019"} + - {VERSION: "3.7", MSVC_VERSION: "2019"} + - {VERSION: "3.8", MSVC_VERSION: "2019"} + - {VERSION: "3.8", MSVC_VERSION: "2019", "USE_ABI3": "true", "ABI_VERSION": "cp36"} + name: "${{ matrix.PYTHON.VERSION }} ${{ matrix.WINDOWS.WINDOWS }} ${{ matrix.PYTHON.ABI_VERSION }}" steps: - uses: actions/checkout@master - name: Setup python - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON.VERSION }} architecture: ${{ matrix.WINDOWS.ARCH }} @@ -147,8 +144,13 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: pip install cffi six ipaddress "enum34; python_version < '3'" - - run: pip wheel cryptography==${{ github.event.client_payload.BUILD_VERSION }} --wheel-dir=wheelhouse --no-binary cryptography + - run: python -m pip install -U pip wheel cffi six ipaddress "enum34; python_version < '3'" + - run: pip download cryptography==${{ github.event.inputs.version }} --no-deps --no-binary cryptography && tar zxvf cryptography*.tar.gz && mkdir wheelhouse + shell: bash + - run: cd cryptography* && python setup.py bdist_wheel && mv dist/cryptography*.whl ../wheelhouse + if: matrix.PYTHON.USE_ABI3 != 'true' + - run: cd cryptography* && python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/cryptography*.whl ../wheelhouse + if: matrix.PYTHON.USE_ABI3 == 'true' - run: pip install -f wheelhouse --no-index cryptography - name: Print the OpenSSL we built and linked against run: | @@ -158,5 +160,5 @@ jobs: - run: move wheelhouse\cryptography*.whl cryptography-wheelhouse\ - uses: actions/upload-artifact@v1 with: - name: "cryptography-${{ github.event.client_payload.BUILD_VERSION }}-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.VERSION }}" + name: "cryptography-${{ github.event.inputs.version }}-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.VERSION }}-${{ matrix.PYTHON.ABI_VERSION}}" path: cryptography-wheelhouse\ diff --git a/release.py b/release.py index a5eea848e0b0..550c261dc566 100644 --- a/release.py +++ b/release.py @@ -83,18 +83,14 @@ def build_github_actions_wheels(token, version): session = requests.Session() response = session.post( - "https://api.github.com/repos/pyca/cryptography/dispatches", + "https://api.github.com/repos/pyca/cryptography/actions/workflows/" + "wheel-builder.yml/dispatches", headers={ "Content-Type": "application/json", - "Accept": "application/vnd.github.everest-preview+json", + "Accept": "application/vnd.github.v3+json", "Authorization": "token {}".format(token), }, - data=json.dumps( - { - "event_type": "wheel-builder", - "client_payload": {"BUILD_VERSION": version}, - } - ), + data=json.dumps({"ref": "master", "inputs": {"version": version}}), ) response.raise_for_status() @@ -103,7 +99,7 @@ def build_github_actions_wheels(token, version): response = session.get( ( "https://api.github.com/repos/pyca/cryptography/actions/workflows/" - "wheel-builder.yml/runs?event=repository_dispatch" + "wheel-builder.yml/runs?event=workflow_dispatch" ), headers={ "Content-Type": "application/json", From b2c5ac891939e11dfa326ea47cbdfd8d2d465fd7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 16 Aug 2020 20:10:47 -0500 Subject: [PATCH 940/988] Docs testing (#5413) * document we test on aarch64 even odds this angers the spellchecker * Just as my previous commit msg prophesied * Update docs/spelling_wordlist.txt Co-authored-by: Alex Gaynor Co-authored-by: Alex Gaynor --- docs/installation.rst | 8 +++++--- docs/spelling_wordlist.txt | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 1a371f4d9ca6..62126fc76816 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -13,10 +13,12 @@ Supported platforms Currently we test ``cryptography`` on Python 2.7, 3.5+, PyPy 7.3.1, and PyPy3 7.3.1 on these operating systems. -* x86-64 CentOS 7.x, 8.x +* x86-64 CentOS 7.x +* x86-64 & AArch64 CentOS 8.x * x86-64 Fedora (latest) -* macOS 10.15 Catalina -* x86-64 Ubuntu 18.04, 20.04, and rolling +* x86-64 macOS 10.15 Catalina +* x86-64 & AArch64 Ubuntu 18.04, 20.04 +* x86-64 Ubuntu rolling * x86-64 Debian Stretch (9.x), Buster (10.x), Bullseye (11.x), and Sid (unstable) * x86-64 Alpine (latest) diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index b6984dda00a1..9ec971b36ad2 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -1,3 +1,4 @@ +AArch accessor affine Authenticator From bc4b956f7532646d3c9be44eb1f6ed0fe66cd44a Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 17 Aug 2020 09:23:36 -0400 Subject: [PATCH 941/988] Run AWS SDK tests on Python 3.7 (#5414) * Run AWS SDK tests on Python 3.8 * switch to 37 * Update aws-encryption-sdk.sh * Update dynamodb-encryption-sdk.sh --- .travis.yml | 4 ++-- .travis/downstream.d/aws-encryption-sdk.sh | 2 +- .travis/downstream.d/dynamodb-encryption-sdk.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index f05d344e1903..3dd391751aa6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -122,9 +122,9 @@ matrix: # https://github.com/paramiko/paramiko/pull/1723 is merged # - python: 2.7 # env: DOWNSTREAM=paramiko - - python: 2.7 + - python: 3.7 env: DOWNSTREAM=aws-encryption-sdk - - python: 2.7 + - python: 3.7 # BOTO_CONFIG works around this boto issue on travis: # https://github.com/boto/boto/issues/3717 env: DOWNSTREAM=dynamodb-encryption-sdk BOTO_CONFIG=/dev/null diff --git a/.travis/downstream.d/aws-encryption-sdk.sh b/.travis/downstream.d/aws-encryption-sdk.sh index d986c7490382..276d47eee559 100755 --- a/.travis/downstream.d/aws-encryption-sdk.sh +++ b/.travis/downstream.d/aws-encryption-sdk.sh @@ -6,7 +6,7 @@ case "${1}" in cd aws-encryption-sdk-python git rev-parse HEAD pip install -e . - pip install -r test/upstream-requirements-py27.txt + pip install -r test/upstream-requirements-py37.txt ;; run) cd aws-encryption-sdk-python diff --git a/.travis/downstream.d/dynamodb-encryption-sdk.sh b/.travis/downstream.d/dynamodb-encryption-sdk.sh index 7ceff16d319f..60bbecf36afd 100755 --- a/.travis/downstream.d/dynamodb-encryption-sdk.sh +++ b/.travis/downstream.d/dynamodb-encryption-sdk.sh @@ -6,7 +6,7 @@ case "${1}" in cd aws-dynamodb-encryption-python git rev-parse HEAD pip install -e . - pip install -r test/upstream-requirements-py27.txt + pip install -r test/upstream-requirements-py37.txt ;; run) cd aws-dynamodb-encryption-python From f90ba1808ee9bd9a13c5673b776484644f29d7ba Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 23 Aug 2020 23:41:33 -0500 Subject: [PATCH 942/988] chunked update_into (#5419) * chunked update_into * all pointer arithmetic all the time * review feedback --- .../hazmat/backends/openssl/ciphers.py | 34 ++++++++++++------- tests/hazmat/primitives/test_ciphers.py | 17 ++++++++++ 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 6092803b7fe6..171605a683de 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -17,6 +17,7 @@ class _CipherContext(object): _ENCRYPT = 1 _DECRYPT = 0 + _MAX_CHUNK_SIZE = 2 ** 31 def __init__(self, backend, cipher, mode, operation): self._backend = backend @@ -124,25 +125,32 @@ def update(self, data): return bytes(buf[:n]) def update_into(self, data, buf): - if len(buf) < (len(data) + self._block_size_bytes - 1): + total_data_len = len(data) + if len(buf) < (total_data_len + self._block_size_bytes - 1): raise ValueError( "buffer must be at least {} bytes for this " "payload".format(len(data) + self._block_size_bytes - 1) ) - buf = self._backend._ffi.cast( - "unsigned char *", self._backend._ffi.from_buffer(buf) - ) + data_processed = 0 + total_out = 0 outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherUpdate( - self._ctx, - buf, - outlen, - self._backend._ffi.from_buffer(data), - len(data), - ) - self._backend.openssl_assert(res != 0) - return outlen[0] + baseoutbuf = self._backend._ffi.from_buffer(buf) + baseinbuf = self._backend._ffi.from_buffer(data) + + while data_processed != total_data_len: + outbuf = baseoutbuf + total_out + inbuf = baseinbuf + data_processed + inlen = min(self._MAX_CHUNK_SIZE, total_data_len - data_processed) + + res = self._backend._lib.EVP_CipherUpdate( + self._ctx, outbuf, outlen, inbuf, inlen + ) + self._backend.openssl_assert(res != 0) + data_processed += inlen + total_out += outlen[0] + + return total_out def finalize(self): if ( diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index 185c21359154..104e679e54a6 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -316,3 +316,20 @@ def test_update_into_buffer_too_small_gcm(self, backend): buf = bytearray(5) with pytest.raises(ValueError): encryptor.update_into(b"testing", buf) + + def test_update_into_auto_chunking(self, backend, monkeypatch): + key = b"\x00" * 16 + c = ciphers.Cipher(AES(key), modes.ECB(), backend) + encryptor = c.encryptor() + # Lower max chunk size so we can test chunking + monkeypatch.setattr(encryptor._ctx, "_MAX_CHUNK_SIZE", 40) + buf = bytearray(527) + pt = b"abcdefghijklmnopqrstuvwxyz012345" * 16 # 512 bytes + processed = encryptor.update_into(pt, buf) + assert processed == 512 + decryptor = c.decryptor() + # Change max chunk size to verify alternate boundaries don't matter + monkeypatch.setattr(decryptor._ctx, "_MAX_CHUNK_SIZE", 73) + decbuf = bytearray(527) + decprocessed = decryptor.update_into(buf[:processed], decbuf) + assert decbuf[:decprocessed] == pt From b6c51be988850fac0766e29530879a780b51a5c0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 24 Aug 2020 07:22:47 -0500 Subject: [PATCH 943/988] document that we auto-chunk on symmetric cipher contexts now (#5420) --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 999805943137..8898afa79c40 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -23,6 +23,8 @@ Changelog and :func:`~cryptography.hazmat.primitives.serialization.pkcs7.load_der_pkcs7_certificates` . +* Resolved an issue causing large symmetric encryption calls (greater than + 2\ :sup:`31` bytes) to raise an ``OverflowError``. .. _v3-0: From ed3ded47e7764d52fbf1d9100ebfe7df38cb494b Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 24 Aug 2020 09:11:22 -0400 Subject: [PATCH 944/988] bump libressl 3.1.x (#5421) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3dd391751aa6..103c2f835409 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,7 +50,7 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.0.2 - python: 3.8 - env: TOXENV=py38 LIBRESSL=3.1.3 + env: TOXENV=py38 LIBRESSL=3.1.4 - python: 3.8 env: TOXENV=py38 LIBRESSL=3.2.0 From b9d26d2608aac4df9bac6ea914a8b01b5fed7df8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 24 Aug 2020 13:01:45 -0500 Subject: [PATCH 945/988] add some words about separating ECDH and ECDSA (#5423) * add some words about separating ECDH and ECDSA * Thomas Pornin wrote some good words about why you should try not to mix your ECDH and ECDSA keys. --- docs/hazmat/primitives/asymmetric/ec.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 4232e31df08f..72768f8332cd 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -47,6 +47,10 @@ Elliptic Curve Signature Algorithms The ECDSA signature algorithm first standardized in NIST publication `FIPS 186-3`_, and later in `FIPS 186-4`_. + Note that while elliptic curve keys can be used for both signing and key + exchange, this is `bad cryptographic practice`_. Instead, users should + generate separate signing and ECDH keys. + :param algorithm: An instance of :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`. @@ -254,6 +258,10 @@ Elliptic Curve Key Exchange algorithm key, derivation of multiple keys, and destroys any structure that may be present. + Note that while elliptic curve keys can be used for both signing and key + exchange, this is `bad cryptographic practice`_. Instead, users should + generate separate signing and ECDH keys. + .. warning:: This example does not give `forward secrecy`_ and is only provided as a @@ -972,3 +980,4 @@ Elliptic Curve Object Identifiers .. _`EdDSA`: https://en.wikipedia.org/wiki/EdDSA .. _`forward secrecy`: https://en.wikipedia.org/wiki/Forward_secrecy .. _`SEC 1 v2.0`: https://www.secg.org/sec1-v2.pdf +.. _`bad cryptographic practice`: https://crypto.stackexchange.com/a/3313 From 1394edb83a26f720d52f5a1df37f0c7296d85497 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 24 Aug 2020 19:43:58 -0400 Subject: [PATCH 946/988] rephrase changelog entry (#5422) * rephrase changelog entry * Update CHANGELOG.rst --- CHANGELOG.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8898afa79c40..f517963a911c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -23,8 +23,10 @@ Changelog and :func:`~cryptography.hazmat.primitives.serialization.pkcs7.load_der_pkcs7_certificates` . -* Resolved an issue causing large symmetric encryption calls (greater than - 2\ :sup:`31` bytes) to raise an ``OverflowError``. +* Calling ``update`` or ``update_into`` on + :class:`~cryptography.hazmat.primitives.ciphers.CipherContext` with ``data`` + longer than 2\ :sup:`31` bytes no longer raises an ``OverflowError``. This + also resolves the same issue in :doc:`/fernet`. .. _v3-0: From 0b2435940eaa5be72cf385b59b35221c40152049 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 25 Aug 2020 10:28:08 -0500 Subject: [PATCH 947/988] remove keywords with side effects hack in setup.py (#5426) --- setup.py | 147 ++----------------------------------------------------- 1 file changed, 5 insertions(+), 142 deletions(-) diff --git a/setup.py b/setup.py index 32fb410d3a78..82800a96e59b 100644 --- a/setup.py +++ b/setup.py @@ -9,13 +9,11 @@ import os import platform import sys -from distutils.command.build import build import pkg_resources import setuptools from setuptools import find_packages, setup -from setuptools.command.install import install if pkg_resources.parse_version( @@ -49,145 +47,6 @@ ) -def keywords_with_side_effects(argv): - """ - Get a dictionary with setup keywords that (can) have side effects. - - :param argv: A list of strings with command line arguments. - :returns: A dictionary with keyword arguments for the ``setup()`` function. - - This setup.py script uses the setuptools 'setup_requires' feature because - this is required by the cffi package to compile extension modules. The - purpose of ``keywords_with_side_effects()`` is to avoid triggering the cffi - build process as a result of setup.py invocations that don't need the cffi - module to be built (setup.py serves the dual purpose of exposing package - metadata). - - All of the options listed by ``python setup.py --help`` that print - information should be recognized here. The commands ``clean``, - ``egg_info``, ``register``, ``sdist`` and ``upload`` are also recognized. - Any combination of these options and commands is also supported. - - This function was originally based on the `setup.py script`_ of SciPy (see - also the discussion in `pip issue #25`_). - - .. _pip issue #25: https://github.com/pypa/pip/issues/25 - .. _setup.py script: https://github.com/scipy/scipy/blob/master/setup.py - """ - no_setup_requires_arguments = ( - "-h", - "--help", - "-n", - "--dry-run", - "-q", - "--quiet", - "-v", - "--verbose", - "-V", - "--version", - "--author", - "--author-email", - "--classifiers", - "--contact", - "--contact-email", - "--description", - "--egg-base", - "--fullname", - "--help-commands", - "--keywords", - "--licence", - "--license", - "--long-description", - "--maintainer", - "--maintainer-email", - "--name", - "--no-user-cfg", - "--obsoletes", - "--platforms", - "--provides", - "--requires", - "--url", - "clean", - "egg_info", - "register", - "sdist", - "upload", - ) - - def is_short_option(argument): - """Check whether a command line argument is a short option.""" - return len(argument) >= 2 and argument[0] == "-" and argument[1] != "-" - - def expand_short_options(argument): - """Expand combined short options into canonical short options.""" - return ("-" + char for char in argument[1:]) - - def argument_without_setup_requirements(argv, i): - """Check whether a command line argument needs setup requirements.""" - if argv[i] in no_setup_requires_arguments: - # Simple case: An argument which is either an option or a command - # which doesn't need setup requirements. - return True - elif is_short_option(argv[i]) and all( - option in no_setup_requires_arguments - for option in expand_short_options(argv[i]) - ): - # Not so simple case: Combined short options none of which need - # setup requirements. - return True - elif argv[i - 1 : i] == ["--egg-base"]: - # Tricky case: --egg-info takes an argument which should not make - # us use setup_requires (defeating the purpose of this code). - return True - else: - return False - - if all( - argument_without_setup_requirements(argv, i) - for i in range(1, len(argv)) - ): - return {"cmdclass": {"build": DummyBuild, "install": DummyInstall}} - else: - cffi_modules = [ - "src/_cffi_src/build_openssl.py:ffi", - "src/_cffi_src/build_padding.py:ffi", - ] - - return { - "setup_requires": setup_requirements, - "cffi_modules": cffi_modules, - } - - -setup_requires_error = ( - "Requested setup command that needs 'setup_requires' " - "while command line arguments implied a side effect " - "free command or option." -) - - -class DummyBuild(build): - """ - This class makes it very obvious when ``keywords_with_side_effects()`` has - incorrectly interpreted the command line arguments to ``setup.py build`` as - one of the 'side effect free' commands or options. - """ - - def run(self): - raise RuntimeError(setup_requires_error) - - -class DummyInstall(install): - """ - This class makes it very obvious when ``keywords_with_side_effects()`` has - incorrectly interpreted the command line arguments to ``setup.py install`` - as one of the 'side effect free' commands or options. - """ - - def run(self): - raise RuntimeError(setup_requires_error) - - with open(os.path.join(base_dir, "README.rst")) as f: long_description = f.read() @@ -230,6 +89,7 @@ def run(self): include_package_data=True, python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*", install_requires=["six >= 1.4.1"] + setup_requirements, + setup_requires=setup_requirements, extras_require={ ":python_version < '3'": ["enum34", "ipaddress"], "test": [ @@ -257,5 +117,8 @@ def run(self): # for cffi zip_safe=False, ext_package="cryptography.hazmat.bindings", - **keywords_with_side_effects(sys.argv) + cffi_modules=[ + "src/_cffi_src/build_openssl.py:ffi", + "src/_cffi_src/build_padding.py:ffi", + ], ) From bda138768ae1231481a1c9a2f6afcbf016d934f1 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 26 Aug 2020 21:59:43 -0500 Subject: [PATCH 948/988] new black, actually slightly different than the old black (#5429) --- release.py | 4 +- .../hazmat/backends/openssl/backend.py | 3 +- .../hazmat/backends/openssl/encode_asn1.py | 8 ++- .../hazmat/backends/openssl/rsa.py | 3 +- .../hazmat/primitives/serialization/ssh.py | 30 +++----- src/cryptography/x509/extensions.py | 3 +- src/cryptography/x509/ocsp.py | 10 ++- tests/hazmat/backends/test_openssl.py | 6 +- tests/hazmat/backends/test_openssl_memleak.py | 5 +- tests/hazmat/primitives/test_block.py | 26 +++++-- tests/hazmat/primitives/test_dh.py | 6 +- tests/hazmat/primitives/test_dsa.py | 3 +- tests/hazmat/primitives/test_ec.py | 3 +- tests/hazmat/primitives/test_hashes.py | 36 +++++++--- tests/hazmat/primitives/test_hmac.py | 4 +- tests/hazmat/primitives/test_hmac_vectors.py | 30 ++++++-- .../primitives/test_pbkdf2hmac_vectors.py | 5 +- tests/hazmat/primitives/test_pkcs12.py | 6 +- tests/hazmat/primitives/test_rsa.py | 24 +++++-- tests/hazmat/primitives/test_serialization.py | 69 ++++++++++++++----- tests/test_fernet.py | 14 ++-- tests/test_utils.py | 3 +- tests/wycheproof/test_rsa.py | 6 +- tests/x509/test_x509.py | 68 +++++++++++++----- tests/x509/test_x509_ext.py | 6 +- 25 files changed, 270 insertions(+), 111 deletions(-) diff --git a/release.py b/release.py index 550c261dc566..5f3f251d17bd 100644 --- a/release.py +++ b/release.py @@ -71,7 +71,9 @@ def download_artifacts_github_actions(session, token, run_url): continue p = z.open(name) out_path = os.path.join( - os.path.dirname(__file__), "dist", os.path.basename(name), + os.path.dirname(__file__), + "dist", + os.path.basename(name), ) with open(out_path, "wb") as f: f.write(p.read()) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 1ff07d924e8b..97c7fd054495 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -399,7 +399,8 @@ def _register_default_ciphers(self): SEED, mode_cls, GetCipherByName("seed-{mode.name}") ) for cipher_cls, mode_cls in itertools.product( - [CAST5, IDEA], [CBC, OFB, CFB, ECB], + [CAST5, IDEA], + [CBC, OFB, CFB, ECB], ): self.register_cipher_adapter( cipher_cls, diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index 154f6764cad8..88d709d21457 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -211,7 +211,8 @@ def _encode_certificate_policies(backend, certificate_policies): backend, x509.OID_CPS_QUALIFIER.dotted_string ) pqi.d.cpsuri = _encode_asn1_str( - backend, qualifier.encode("ascii"), + backend, + qualifier.encode("ascii"), ) else: assert isinstance(qualifier, x509.UserNotice) @@ -313,7 +314,10 @@ def _encode_authority_key_identifier(backend, authority_keyid): backend.openssl_assert(akid != backend._ffi.NULL) akid = backend._ffi.gc(akid, backend._lib.AUTHORITY_KEYID_free) if authority_keyid.key_identifier is not None: - akid.keyid = _encode_asn1_str(backend, authority_keyid.key_identifier,) + akid.keyid = _encode_asn1_str( + backend, + authority_keyid.key_identifier, + ) if authority_keyid.authority_cert_issuer is not None: akid.issuer = _encode_general_names( diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index d4dffa13ce02..423f6878c124 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -448,7 +448,8 @@ def public_numbers(self): self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) self._backend.openssl_assert(e[0] != self._backend._ffi.NULL) return rsa.RSAPublicNumbers( - e=self._backend._bn_to_int(e[0]), n=self._backend._bn_to_int(n[0]), + e=self._backend._bn_to_int(e[0]), + n=self._backend._bn_to_int(n[0]), ) def public_bytes(self, encoding, format): diff --git a/src/cryptography/hazmat/primitives/serialization/ssh.py b/src/cryptography/hazmat/primitives/serialization/ssh.py index 250498d8f5f7..5ecae59f8aa6 100644 --- a/src/cryptography/hazmat/primitives/serialization/ssh.py +++ b/src/cryptography/hazmat/primitives/serialization/ssh.py @@ -95,22 +95,19 @@ def _ssh_pem_encode(data, prefix=_SK_START + b"\n", suffix=_SK_END + b"\n"): def _check_block_size(data, block_len): - """Require data to be full blocks - """ + """Require data to be full blocks""" if not data or len(data) % block_len != 0: raise ValueError("Corrupt data: missing padding") def _check_empty(data): - """All data should have been parsed. - """ + """All data should have been parsed.""" if data: raise ValueError("Corrupt data: unparsed data") def _init_cipher(ciphername, password, salt, rounds, backend): - """Generate key + iv and return cipher. - """ + """Generate key + iv and return cipher.""" if not password: raise ValueError("Key is password-protected.") @@ -150,8 +147,7 @@ def _get_mpint(data): def _to_mpint(val): - """Storage format for signed bigint. - """ + """Storage format for signed bigint.""" if val < 0: raise ValueError("negative mpint not allowed") if not val: @@ -161,8 +157,7 @@ def _to_mpint(val): class _FragList(object): - """Build recursive structure without data copy. - """ + """Build recursive structure without data copy.""" def __init__(self, init=None): self.flist = [] @@ -462,8 +457,7 @@ def encode_private(self, private_key, f_priv): def _lookup_kformat(key_type): - """Return valid format or throw error - """ + """Return valid format or throw error""" if not isinstance(key_type, bytes): key_type = memoryview(key_type).tobytes() if key_type in _KEY_FORMATS: @@ -472,8 +466,7 @@ def _lookup_kformat(key_type): def load_ssh_private_key(data, password, backend=None): - """Load private key from OpenSSH custom encoding. - """ + """Load private key from OpenSSH custom encoding.""" utils._check_byteslike("data", data) backend = _get_backend(backend) if password is not None: @@ -547,8 +540,7 @@ def load_ssh_private_key(data, password, backend=None): def serialize_ssh_private_key(private_key, password=None): - """Serialize private key with OpenSSH custom encoding. - """ + """Serialize private key with OpenSSH custom encoding.""" if password is not None: utils._check_bytes("password", password) if password and len(password) > _MAX_PASSWORD: @@ -627,8 +619,7 @@ def serialize_ssh_private_key(private_key, password=None): def load_ssh_public_key(data, backend=None): - """Load public key from OpenSSH one-line format. - """ + """Load public key from OpenSSH one-line format.""" backend = _get_backend(backend) utils._check_byteslike("data", data) @@ -671,8 +662,7 @@ def load_ssh_public_key(data, backend=None): def serialize_ssh_public_key(public_key): - """One-line public key format for OpenSSH - """ + """One-line public key format for OpenSSH""" if isinstance(public_key, ec.EllipticCurvePublicKey): key_type = _ecdsa_key_type(public_key) elif isinstance(public_key, rsa.RSAPublicKey): diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 6a9ead51f0a8..130ba69b8769 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -38,7 +38,8 @@ def _key_identifier_from_public_key(public_key): if isinstance(public_key, RSAPublicKey): data = public_key.public_bytes( - serialization.Encoding.DER, serialization.PublicFormat.PKCS1, + serialization.Encoding.DER, + serialization.PublicFormat.PKCS1, ) elif isinstance(public_key, EllipticCurvePublicKey): data = public_key.public_bytes( diff --git a/src/cryptography/x509/ocsp.py b/src/cryptography/x509/ocsp.py index c9ec86713b03..f8e27224ecaf 100644 --- a/src/cryptography/x509/ocsp.py +++ b/src/cryptography/x509/ocsp.py @@ -221,7 +221,10 @@ def add_response( revocation_reason, ) return OCSPResponseBuilder( - singleresp, self._responder_id, self._certs, self._extensions, + singleresp, + self._responder_id, + self._certs, + self._extensions, ) def responder_id(self, encoding, responder_cert): @@ -250,7 +253,10 @@ def certificates(self, certs): if not all(isinstance(x, x509.Certificate) for x in certs): raise TypeError("certs must be a list of Certificates") return OCSPResponseBuilder( - self._response, self._responder_id, certs, self._extensions, + self._response, + self._responder_id, + certs, + self._extensions, ) def add_extension(self, extension, critical): diff --git a/tests/hazmat/backends/test_openssl.py b/tests/hazmat/backends/test_openssl.py index acec247df4a9..2f7e7bebfd0c 100644 --- a/tests/hazmat/backends/test_openssl.py +++ b/tests/hazmat/backends/test_openssl.py @@ -91,7 +91,11 @@ def test_nonexistent_cipher(self, mode): type(mode), lambda backend, cipher, mode: backend._ffi.NULL, ) - cipher = Cipher(DummyCipherAlgorithm(), mode, backend=b,) + cipher = Cipher( + DummyCipherAlgorithm(), + mode, + backend=b, + ) with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_CIPHER): cipher.encryptor() diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 96b5f2ae0930..d8bc8660a830 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -135,7 +135,10 @@ def assert_no_memory_leaks(s, argv=[]): # Shell out to a fresh Python process because OpenSSL does not allow you to # install new memory hooks after the first malloc/free occurs. proc = subprocess.Popen( - argv, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + argv, + env=env, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, ) try: proc.wait() diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py index f827eee3b6c2..593199315a06 100644 --- a/tests/hazmat/primitives/test_block.py +++ b/tests/hazmat/primitives/test_block.py @@ -136,10 +136,12 @@ def test_incorrectly_padded(self, backend): @pytest.mark.requires_backend_interface(interface=CipherBackend) class TestAEADCipherContext(object): test_aead_exceptions = generate_aead_exception_test( - algorithms.AES, modes.GCM, + algorithms.AES, + modes.GCM, ) test_aead_tag_exceptions = generate_aead_tag_exception_test( - algorithms.AES, modes.GCM, + algorithms.AES, + modes.GCM, ) @@ -148,31 +150,41 @@ class TestModeValidation(object): def test_cbc(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), modes.CBC(b"abc"), backend, + algorithms.AES(b"\x00" * 16), + modes.CBC(b"abc"), + backend, ) def test_ofb(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), modes.OFB(b"abc"), backend, + algorithms.AES(b"\x00" * 16), + modes.OFB(b"abc"), + backend, ) def test_cfb(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), modes.CFB(b"abc"), backend, + algorithms.AES(b"\x00" * 16), + modes.CFB(b"abc"), + backend, ) def test_cfb8(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), modes.CFB8(b"abc"), backend, + algorithms.AES(b"\x00" * 16), + modes.CFB8(b"abc"), + backend, ) def test_ctr(self, backend): with pytest.raises(ValueError): Cipher( - algorithms.AES(b"\x00" * 16), modes.CTR(b"abc"), backend, + algorithms.AES(b"\x00" * 16), + modes.CTR(b"abc"), + backend, ) def test_gcm(self): diff --git a/tests/hazmat/primitives/test_dh.py b/tests/hazmat/primitives/test_dh.py index 29b0e3ef6b01..63a7c642ef7a 100644 --- a/tests/hazmat/primitives/test_dh.py +++ b/tests/hazmat/primitives/test_dh.py @@ -654,7 +654,8 @@ def test_public_bytes_match( ) pub_key = loader_func(key_bytes, backend) serialized = pub_key.public_bytes( - encoding, serialization.PublicFormat.SubjectPublicKeyInfo, + encoding, + serialization.PublicFormat.SubjectPublicKeyInfo, ) assert serialized == key_bytes @@ -780,7 +781,8 @@ def test_parameter_bytes_match( ) parameters = loader_func(param_bytes, backend) serialized = parameters.parameter_bytes( - encoding, serialization.ParameterFormat.PKCS3, + encoding, + serialization.ParameterFormat.PKCS3, ) assert serialized == param_bytes diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py index 695069a32cfc..bda275064ea2 100644 --- a/tests/hazmat/primitives/test_dsa.py +++ b/tests/hazmat/primitives/test_dsa.py @@ -936,7 +936,8 @@ def test_public_bytes_match( ) key = loader_func(key_bytes, backend) serialized = key.public_bytes( - encoding, serialization.PublicFormat.SubjectPublicKeyInfo, + encoding, + serialization.PublicFormat.SubjectPublicKeyInfo, ) assert serialized == key_bytes diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index be330c11247e..8361306f719b 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -951,7 +951,8 @@ def test_public_bytes_match( ) key = loader_func(key_bytes, backend) serialized = key.public_bytes( - encoding, serialization.PublicFormat.SubjectPublicKeyInfo, + encoding, + serialization.PublicFormat.SubjectPublicKeyInfo, ) assert serialized == key_bytes diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py index 25676921208e..eadd0febf25f 100644 --- a/tests/hazmat/primitives/test_hashes.py +++ b/tests/hazmat/primitives/test_hashes.py @@ -52,7 +52,10 @@ def test_unsupported_hash(self, backend): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA1(object): - test_sha1 = generate_base_hash_test(hashes.SHA1(), digest_size=20,) + test_sha1 = generate_base_hash_test( + hashes.SHA1(), + digest_size=20, + ) @pytest.mark.supported( @@ -61,7 +64,10 @@ class TestSHA1(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA224(object): - test_sha224 = generate_base_hash_test(hashes.SHA224(), digest_size=28,) + test_sha224 = generate_base_hash_test( + hashes.SHA224(), + digest_size=28, + ) @pytest.mark.supported( @@ -70,7 +76,10 @@ class TestSHA224(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA256(object): - test_sha256 = generate_base_hash_test(hashes.SHA256(), digest_size=32,) + test_sha256 = generate_base_hash_test( + hashes.SHA256(), + digest_size=32, + ) @pytest.mark.supported( @@ -79,7 +88,10 @@ class TestSHA256(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA384(object): - test_sha384 = generate_base_hash_test(hashes.SHA384(), digest_size=48,) + test_sha384 = generate_base_hash_test( + hashes.SHA384(), + digest_size=48, + ) @pytest.mark.supported( @@ -88,7 +100,10 @@ class TestSHA384(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestSHA512(object): - test_sha512 = generate_base_hash_test(hashes.SHA512(), digest_size=64,) + test_sha512 = generate_base_hash_test( + hashes.SHA512(), + digest_size=64, + ) @pytest.mark.supported( @@ -97,7 +112,10 @@ class TestSHA512(object): ) @pytest.mark.requires_backend_interface(interface=HashBackend) class TestMD5(object): - test_md5 = generate_base_hash_test(hashes.MD5(), digest_size=16,) + test_md5 = generate_base_hash_test( + hashes.MD5(), + digest_size=16, + ) @pytest.mark.supported( @@ -109,7 +127,8 @@ class TestMD5(object): @pytest.mark.requires_backend_interface(interface=HashBackend) class TestBLAKE2b(object): test_blake2b = generate_base_hash_test( - hashes.BLAKE2b(digest_size=64), digest_size=64, + hashes.BLAKE2b(digest_size=64), + digest_size=64, ) def test_invalid_digest_size(self, backend): @@ -132,7 +151,8 @@ def test_invalid_digest_size(self, backend): @pytest.mark.requires_backend_interface(interface=HashBackend) class TestBLAKE2s(object): test_blake2s = generate_base_hash_test( - hashes.BLAKE2s(digest_size=32), digest_size=32, + hashes.BLAKE2s(digest_size=32), + digest_size=32, ) def test_invalid_digest_size(self, backend): diff --git a/tests/hazmat/primitives/test_hmac.py b/tests/hazmat/primitives/test_hmac.py index e60ae16f21b2..7ea931aca4db 100644 --- a/tests/hazmat/primitives/test_hmac.py +++ b/tests/hazmat/primitives/test_hmac.py @@ -27,7 +27,9 @@ ) @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACCopy(object): - test_copy = generate_base_hmac_test(hashes.MD5(),) + test_copy = generate_base_hmac_test( + hashes.MD5(), + ) @pytest.mark.requires_backend_interface(interface=HMACBackend) diff --git a/tests/hazmat/primitives/test_hmac_vectors.py b/tests/hazmat/primitives/test_hmac_vectors.py index b463427366bb..b39df1a75e7c 100644 --- a/tests/hazmat/primitives/test_hmac_vectors.py +++ b/tests/hazmat/primitives/test_hmac_vectors.py @@ -22,7 +22,10 @@ @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACMD5(object): test_hmac_md5 = generate_hmac_test( - load_hash_vectors, "HMAC", ["rfc-2202-md5.txt"], hashes.MD5(), + load_hash_vectors, + "HMAC", + ["rfc-2202-md5.txt"], + hashes.MD5(), ) @@ -33,7 +36,10 @@ class TestHMACMD5(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA1(object): test_hmac_sha1 = generate_hmac_test( - load_hash_vectors, "HMAC", ["rfc-2202-sha1.txt"], hashes.SHA1(), + load_hash_vectors, + "HMAC", + ["rfc-2202-sha1.txt"], + hashes.SHA1(), ) @@ -44,7 +50,10 @@ class TestHMACSHA1(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA224(object): test_hmac_sha224 = generate_hmac_test( - load_hash_vectors, "HMAC", ["rfc-4231-sha224.txt"], hashes.SHA224(), + load_hash_vectors, + "HMAC", + ["rfc-4231-sha224.txt"], + hashes.SHA224(), ) @@ -55,7 +64,10 @@ class TestHMACSHA224(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA256(object): test_hmac_sha256 = generate_hmac_test( - load_hash_vectors, "HMAC", ["rfc-4231-sha256.txt"], hashes.SHA256(), + load_hash_vectors, + "HMAC", + ["rfc-4231-sha256.txt"], + hashes.SHA256(), ) @@ -66,7 +78,10 @@ class TestHMACSHA256(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA384(object): test_hmac_sha384 = generate_hmac_test( - load_hash_vectors, "HMAC", ["rfc-4231-sha384.txt"], hashes.SHA384(), + load_hash_vectors, + "HMAC", + ["rfc-4231-sha384.txt"], + hashes.SHA384(), ) @@ -77,7 +92,10 @@ class TestHMACSHA384(object): @pytest.mark.requires_backend_interface(interface=HMACBackend) class TestHMACSHA512(object): test_hmac_sha512 = generate_hmac_test( - load_hash_vectors, "HMAC", ["rfc-4231-sha512.txt"], hashes.SHA512(), + load_hash_vectors, + "HMAC", + ["rfc-4231-sha512.txt"], + hashes.SHA512(), ) diff --git a/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py b/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py index 13bdbc5f3554..4b97b0d13a97 100644 --- a/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py +++ b/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py @@ -20,5 +20,8 @@ @pytest.mark.requires_backend_interface(interface=PBKDF2HMACBackend) class TestPBKDF2HMACSHA1(object): test_pbkdf2_sha1 = generate_pbkdf2_test( - load_nist_vectors, "KDF", ["rfc-6070-PBKDF2-SHA1.txt"], hashes.SHA1(), + load_nist_vectors, + "KDF", + ["rfc-6070-PBKDF2-SHA1.txt"], + hashes.SHA1(), ) diff --git a/tests/hazmat/primitives/test_pkcs12.py b/tests/hazmat/primitives/test_pkcs12.py index 466dac5c14b2..297483e2f99d 100644 --- a/tests/hazmat/primitives/test_pkcs12.py +++ b/tests/hazmat/primitives/test_pkcs12.py @@ -262,6 +262,10 @@ def test_generate_unsupported_encryption_type(self, backend): cert, key = _load_ca(backend) with pytest.raises(ValueError) as exc: serialize_key_and_certificates( - None, key, cert, None, DummyKeySerializationEncryption(), + None, + key, + cert, + None, + DummyKeySerializationEncryption(), ) assert str(exc.value) == "Unsupported key encryption type" diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index b23a176fea1c..bfb946ee5de4 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -1103,7 +1103,9 @@ def test_pss_verify_salt_length_too_long(self, backend): signature, b"sign me", padding.PSS( - mgf=padding.MGF1(algorithm=hashes.SHA1(),), + mgf=padding.MGF1( + algorithm=hashes.SHA1(), + ), salt_length=1000000, ), hashes.SHA1(), @@ -1163,7 +1165,9 @@ class TestRSAPSSMGF1Verification(object): ], hashes.SHA1(), lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1(algorithm=hash_alg,), + mgf=padding.MGF1( + algorithm=hash_alg, + ), salt_length=params["salt_length"], ), ) @@ -1188,7 +1192,9 @@ class TestRSAPSSMGF1Verification(object): ], hashes.SHA224(), lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1(algorithm=hash_alg,), + mgf=padding.MGF1( + algorithm=hash_alg, + ), salt_length=params["salt_length"], ), ) @@ -1213,7 +1219,9 @@ class TestRSAPSSMGF1Verification(object): ], hashes.SHA256(), lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1(algorithm=hash_alg,), + mgf=padding.MGF1( + algorithm=hash_alg, + ), salt_length=params["salt_length"], ), ) @@ -1238,7 +1246,9 @@ class TestRSAPSSMGF1Verification(object): ], hashes.SHA384(), lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1(algorithm=hash_alg,), + mgf=padding.MGF1( + algorithm=hash_alg, + ), salt_length=params["salt_length"], ), ) @@ -1263,7 +1273,9 @@ class TestRSAPSSMGF1Verification(object): ], hashes.SHA512(), lambda params, hash_alg: padding.PSS( - mgf=padding.MGF1(algorithm=hash_alg,), + mgf=padding.MGF1( + algorithm=hash_alg, + ), salt_length=params["salt_length"], ), ) diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 46694c64852c..2f56711d5dab 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -1467,11 +1467,15 @@ def test_openssl_serialization_unsupported(self, backend): key = ed25519.Ed25519PrivateKey.generate() with pytest.raises(ValueError): key.private_bytes( - Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.PEM, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) with pytest.raises(ValueError): key.private_bytes( - Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.DER, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) @@ -1543,11 +1547,15 @@ def test_openssl_serialization_unsupported(self, backend): key = x448.X448PrivateKey.generate() with pytest.raises(ValueError): key.private_bytes( - Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.PEM, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) with pytest.raises(ValueError): key.private_bytes( - Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.DER, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) def test_openssh_serialization_unsupported(self, backend): @@ -1630,11 +1638,15 @@ def test_openssl_serialization_unsupported(self, backend): key = x25519.X25519PrivateKey.generate() with pytest.raises(ValueError): key.private_bytes( - Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.PEM, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) with pytest.raises(ValueError): key.private_bytes( - Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.DER, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) def test_openssh_serialization_unsupported(self, backend): @@ -1717,28 +1729,34 @@ def test_openssl_serialization_unsupported(self, backend): key = ed448.Ed448PrivateKey.generate() with pytest.raises(ValueError): key.private_bytes( - Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.PEM, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) with pytest.raises(ValueError): key.private_bytes( - Encoding.DER, PrivateFormat.TraditionalOpenSSL, NoEncryption(), + Encoding.DER, + PrivateFormat.TraditionalOpenSSL, + NoEncryption(), ) def test_openssh_serialization_unsupported(self, backend): key = ed448.Ed448PrivateKey.generate() with pytest.raises(ValueError): key.public_key().public_bytes( - Encoding.OpenSSH, PublicFormat.OpenSSH, + Encoding.OpenSSH, + PublicFormat.OpenSSH, ) with pytest.raises(ValueError): key.private_bytes( - Encoding.PEM, PrivateFormat.OpenSSH, NoEncryption(), + Encoding.PEM, + PrivateFormat.OpenSSH, + NoEncryption(), ) class TestDHSerialization(object): - """Test all options with least-supported key type. - """ + """Test all options with least-supported key type.""" def test_dh_public_key(self, backend): data = load_vectors_from_file( @@ -1951,7 +1969,9 @@ def test_load_ssh_private_key(self, key_file, backend): if password: encryption = BestAvailableEncryption(password) priv_data2 = private_key.private_bytes( - Encoding.PEM, PrivateFormat.OpenSSH, encryption, + Encoding.PEM, + PrivateFormat.OpenSSH, + encryption, ) private_key2 = load_ssh_private_key(priv_data2, password, backend) assert ( @@ -2062,7 +2082,10 @@ def make_file( kdfoptions=b"", nkeys=1, pub_type=b"ecdsa-sha2-nistp256", - pub_fields=(b"nistp256", b"\x04" * 65,), + pub_fields=( + b"nistp256", + b"\x04" * 65, + ), priv_type=None, priv_fields=(b"nistp256", b"\x04" * 65, b"\x7F" * 32), comment=b"comment", @@ -2073,8 +2096,7 @@ def make_file( footer=b"-----END OPENSSH PRIVATE KEY-----\n", cut=8192, ): - """Create private key file - """ + """Create private key file""" if not priv_type: priv_type = pub_type @@ -2157,7 +2179,10 @@ def test_ssh_errors_bad_values(self, backend): def test_ssh_errors_pubpriv_mismatch(self, backend): # ecdsa public-private mismatch data = self.make_file( - pub_fields=(b"nistp256", b"\x04" + b"\x05" * 64,) + pub_fields=( + b"nistp256", + b"\x04" + b"\x05" * 64, + ) ) with pytest.raises(ValueError): load_ssh_private_key(data, None, backend) @@ -2187,14 +2212,20 @@ def test_ssh_errors_pubpriv_mismatch(self, backend): data = self.make_file( pub_type=b"ssh-ed25519", pub_fields=(pk1,), - priv_fields=(pk1, sk + pk2,), + priv_fields=( + pk1, + sk + pk2, + ), ) with pytest.raises(ValueError): load_ssh_private_key(data, None, backend) data = self.make_file( pub_type=b"ssh-ed25519", pub_fields=(pk1,), - priv_fields=(pk2, sk + pk1,), + priv_fields=( + pk2, + sk + pk1, + ), ) with pytest.raises(ValueError): load_ssh_private_key(data, None, backend) diff --git a/tests/test_fernet.py b/tests/test_fernet.py index 094e3e346c1a..38409b03e888 100644 --- a/tests/test_fernet.py +++ b/tests/test_fernet.py @@ -50,7 +50,8 @@ def test_default_backend(): ) class TestFernet(object): @json_parametrize( - ("secret", "now", "iv", "src", "token"), "generate.json", + ("secret", "now", "iv", "src", "token"), + "generate.json", ) def test_generate(self, secret, now, iv, src, token, backend): f = Fernet(secret.encode("ascii"), backend=backend) @@ -62,7 +63,8 @@ def test_generate(self, secret, now, iv, src, token, backend): assert actual_token == token.encode("ascii") @json_parametrize( - ("secret", "now", "src", "ttl_sec", "token"), "verify.json", + ("secret", "now", "src", "ttl_sec", "token"), + "verify.json", ) def test_verify( self, secret, now, src, ttl_sec, token, backend, monkeypatch @@ -70,7 +72,9 @@ def test_verify( f = Fernet(secret.encode("ascii"), backend=backend) current_time = calendar.timegm(iso8601.parse_date(now).utctimetuple()) payload = f.decrypt_at_time( - token.encode("ascii"), ttl=ttl_sec, current_time=current_time, + token.encode("ascii"), + ttl=ttl_sec, + current_time=current_time, ) assert payload == src.encode("ascii") monkeypatch.setattr(time, "time", lambda: current_time) @@ -83,7 +87,9 @@ def test_invalid(self, secret, token, now, ttl_sec, backend, monkeypatch): current_time = calendar.timegm(iso8601.parse_date(now).utctimetuple()) with pytest.raises(InvalidToken): f.decrypt_at_time( - token.encode("ascii"), ttl=ttl_sec, current_time=current_time, + token.encode("ascii"), + ttl=ttl_sec, + current_time=current_time, ) monkeypatch.setattr(time, "time", lambda: current_time) with pytest.raises(InvalidToken): diff --git a/tests/test_utils.py b/tests/test_utils.py index e0b93c55d38e..d6afa3b34902 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -362,7 +362,8 @@ def test_load_hash_vectors_bad_data(): def test_load_vectors_from_file(): vectors = load_vectors_from_file( - os.path.join("ciphers", "Blowfish", "bf-cfb.txt"), load_nist_vectors, + os.path.join("ciphers", "Blowfish", "bf-cfb.txt"), + load_nist_vectors, ) assert vectors == [ { diff --git a/tests/wycheproof/test_rsa.py b/tests/wycheproof/test_rsa.py index c71f05adf58c..1262b58853d3 100644 --- a/tests/wycheproof/test_rsa.py +++ b/tests/wycheproof/test_rsa.py @@ -136,7 +136,8 @@ def test_rsa_pss_signature(backend, wycheproof): if digest is None or mgf_digest is None: pytest.skip( "PSS with digest={} and MGF digest={} not supported".format( - wycheproof.testgroup["sha"], wycheproof.testgroup["mgfSha"], + wycheproof.testgroup["sha"], + wycheproof.testgroup["mgfSha"], ) ) @@ -212,7 +213,8 @@ def test_rsa_oaep_encryption(backend, wycheproof): if not backend.rsa_padding_supported(padding_algo): pytest.skip( "OAEP with digest={} and MGF digest={} not supported".format( - wycheproof.testgroup["sha"], wycheproof.testgroup["mgfSha"], + wycheproof.testgroup["sha"], + wycheproof.testgroup["mgfSha"], ) ) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index 3e63dde74ff1..11c80816cff7 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -380,7 +380,10 @@ def test_public_bytes_pem(self, backend): # Encode it to PEM and load it back. crl = x509.load_pem_x509_crl( - crl.public_bytes(encoding=serialization.Encoding.PEM,), backend + crl.public_bytes( + encoding=serialization.Encoding.PEM, + ), + backend, ) assert len(crl) == 0 @@ -396,7 +399,10 @@ def test_public_bytes_der(self, backend): # Encode it to DER and load it back. crl = x509.load_der_x509_crl( - crl.public_bytes(encoding=serialization.Encoding.DER,), backend + crl.public_bytes( + encoding=serialization.Encoding.DER, + ), + backend, ) assert len(crl) == 12 @@ -1141,7 +1147,10 @@ def test_public_bytes_pem(self, backend): # Encode it to PEM and load it back. cert = x509.load_pem_x509_certificate( - cert.public_bytes(encoding=serialization.Encoding.PEM,), backend + cert.public_bytes( + encoding=serialization.Encoding.PEM, + ), + backend, ) # We should recover what we had to start with. @@ -1164,7 +1173,10 @@ def test_public_bytes_der(self, backend): # Encode it to DER and load it back. cert = x509.load_der_x509_certificate( - cert.public_bytes(encoding=serialization.Encoding.DER,), backend + cert.public_bytes( + encoding=serialization.Encoding.DER, + ), + backend, ) # We should recover what we had to start with. @@ -1429,7 +1441,10 @@ def test_public_bytes_pem(self, backend): # Encode it to PEM and load it back. request = x509.load_pem_x509_csr( - request.public_bytes(encoding=serialization.Encoding.PEM,), backend + request.public_bytes( + encoding=serialization.Encoding.PEM, + ), + backend, ) # We should recover what we had to start with. @@ -1456,7 +1471,10 @@ def test_public_bytes_der(self, backend): # Encode it to DER and load it back. request = x509.load_der_x509_csr( - request.public_bytes(encoding=serialization.Encoding.DER,), backend + request.public_bytes( + encoding=serialization.Encoding.DER, + ), + backend, ) # We should recover what we had to start with. @@ -1660,7 +1678,8 @@ def test_build_cert(self, backend): ) .public_key(subject_private_key.public_key()) .add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) .add_extension( x509.SubjectAlternativeName( @@ -2336,12 +2355,14 @@ def test_not_valid_before_may_only_be_set_once(self): def test_add_extension_checks_for_duplicates(self): builder = x509.CertificateBuilder().add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) with pytest.raises(ValueError): builder.add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) def test_add_invalid_extension_type(self): @@ -2513,7 +2534,8 @@ def test_build_cert_with_dsa_private_key(self, backend): ) .public_key(subject_private_key.public_key()) .add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) .add_extension( x509.SubjectAlternativeName( @@ -2563,7 +2585,8 @@ def test_build_cert_with_ec_private_key(self, backend): ) .public_key(subject_private_key.public_key()) .add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) .add_extension( x509.SubjectAlternativeName( @@ -2615,7 +2638,8 @@ def test_build_cert_with_ed25519(self, backend): ) .public_key(subject_private_key.public_key()) .add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) .add_extension( x509.SubjectAlternativeName( @@ -2712,7 +2736,8 @@ def test_build_cert_with_ed448(self, backend): ) .public_key(subject_private_key.public_key()) .add_extension( - x509.BasicConstraints(ca=False, path_length=None), True, + x509.BasicConstraints(ca=False, path_length=None), + True, ) .add_extension( x509.SubjectAlternativeName( @@ -3292,7 +3317,8 @@ def test_build_ca_request_with_path_length_none(self, backend): "unrecognized", [ x509.UnrecognizedExtension( - x509.ObjectIdentifier("1.2.3.4.5"), b"abcdef", + x509.ObjectIdentifier("1.2.3.4.5"), + b"abcdef", ) ], ) @@ -3740,11 +3766,13 @@ def test_build_ca_request_with_dsa(self, backend): def test_add_duplicate_extension(self): builder = x509.CertificateSigningRequestBuilder().add_extension( - x509.BasicConstraints(True, 2), critical=True, + x509.BasicConstraints(True, 2), + critical=True, ) with pytest.raises(ValueError): builder.add_extension( - x509.BasicConstraints(True, 2), critical=True, + x509.BasicConstraints(True, 2), + critical=True, ) def test_set_invalid_subject(self): @@ -4001,7 +4029,10 @@ def test_subject_alt_names(self, backend): .subject_name( x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u"SAN")]) ) - .add_extension(san, critical=False,) + .add_extension( + san, + critical=False, + ) .sign(private_key, hashes.SHA256(), backend) ) @@ -5207,8 +5238,7 @@ def test_load_pem_cert(self, backend): @pytest.mark.requires_backend_interface(interface=X509Backend) class TestSignatureRejection(object): - """Test if signing rejects DH keys properly. - """ + """Test if signing rejects DH keys properly.""" def load_key(self, backend): data = load_vectors_from_file( diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index a89c01dadb19..2cd216fb688a 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -2749,7 +2749,8 @@ def test_inhibit_policy_mapping(self, backend): assert ext.critical is True assert ext.value == x509.PolicyConstraints( - require_explicit_policy=None, inhibit_policy_mapping=0, + require_explicit_policy=None, + inhibit_policy_mapping=0, ) def test_require_explicit_policy(self, backend): @@ -2763,7 +2764,8 @@ def test_require_explicit_policy(self, backend): ) assert ext.critical is True assert ext.value == x509.PolicyConstraints( - require_explicit_policy=1, inhibit_policy_mapping=None, + require_explicit_policy=1, + inhibit_policy_mapping=None, ) From c63106c46be435d274f9d3fd82bc74bb3f348226 Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Thu, 27 Aug 2020 13:21:59 +1000 Subject: [PATCH 949/988] Build manylinux wheels with Zuul (#5386) This adds the Zuul playbooks and role to build manylinux wheels for aarch64 and x86_64 (while aarch64 is the primary goal; it's good for the overall code to keep it flexible). It first builds an sdist from the checkout and then builds the wheels in the appropriate containers. Note this adds the jobs in the gate pipeline, which currently responds to Pull Requests, and the release pipeline, which responds to pushes to refs/tags/.* (see [1]). Note for results of jobs run against tags you will need to find the job directly from https://zuul.opendev.org/t/pyca/builds because there is nowhere to report the results as such (it could be configured to send an email). The wheels are published to the wheelhouse/ directory in the Zuul logs, which is also listed as an artifact on the build results page. [1] https://review.opendev.org/748323 --- .zuul.d/jobs.yaml | 37 ++++- .zuul.d/project.yaml | 6 + .zuul.playbooks/playbooks/{ => tox}/main.yaml | 0 .zuul.playbooks/playbooks/wheel/main.yaml | 6 + .../roles/build-wheel-manylinux/README.rst | 1 + .../files/build-wheels.sh | 51 ++++++ .../build-wheel-manylinux/tasks/main.yaml | 145 ++++++++++++++++++ 7 files changed, 245 insertions(+), 1 deletion(-) rename .zuul.playbooks/playbooks/{ => tox}/main.yaml (100%) create mode 100644 .zuul.playbooks/playbooks/wheel/main.yaml create mode 100644 .zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/README.rst create mode 100644 .zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/files/build-wheels.sh create mode 100644 .zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/tasks/main.yaml diff --git a/.zuul.d/jobs.yaml b/.zuul.d/jobs.yaml index bcfc6d79c52d..1430b0c31510 100644 --- a/.zuul.d/jobs.yaml +++ b/.zuul.d/jobs.yaml @@ -2,7 +2,7 @@ name: pyca-cryptography-base abstract: true description: Run pyca/cryptography unit testing - run: .zuul.playbooks/playbooks/main.yaml + run: .zuul.playbooks/playbooks/tox/main.yaml - job: name: pyca-cryptography-ubuntu-focal-py38-arm64 @@ -31,3 +31,38 @@ nodeset: centos-8-arm64 vars: tox_envlist: py27 + +- job: + name: pyca-cryptography-build-wheel + abstract: true + run: .zuul.playbooks/playbooks/wheel/main.yaml + +- job: + name: pyca-cryptography-build-wheel-arm64 + parent: pyca-cryptography-build-wheel + nodeset: ubuntu-bionic-arm64 + vars: + wheel_builds: + - platform: manylinux2014_aarch64 + image: pyca/cryptography-manylinux2014_aarch64 + pythons: + - cp35-cp35m + +- job: + name: pyca-cryptography-build-wheel-x86_64 + parent: pyca-cryptography-build-wheel + nodeset: ubuntu-bionic + vars: + wheel_builds: + - platform: manylinux1_x86_64 + image: pyca/cryptography-manylinux1:x86_64 + pythons: + - cp27-cp27m + - cp27-cp27mu + - cp35-cp35m + - platform: manylinux2010_x86_64 + image: pyca/cryptography-manylinux2010:x86_64 + pythons: + - cp27-cp27m + - cp27-cp27mu + - cp35-cp35m diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml index 233903728ee0..3cda2ff87d00 100644 --- a/.zuul.d/project.yaml +++ b/.zuul.d/project.yaml @@ -1,7 +1,13 @@ - project: check: jobs: + - pyca-cryptography-build-wheel-arm64 + - pyca-cryptography-build-wheel-x86_64 - pyca-cryptography-ubuntu-focal-py38-arm64 - pyca-cryptography-ubuntu-bionic-py36-arm64 - pyca-cryptography-centos-8-py36-arm64 - pyca-cryptography-centos-8-py27-arm64 + release: + jobs: + - pyca-cryptography-build-wheel-arm64 + - pyca-cryptography-build-wheel-x86_64 diff --git a/.zuul.playbooks/playbooks/main.yaml b/.zuul.playbooks/playbooks/tox/main.yaml similarity index 100% rename from .zuul.playbooks/playbooks/main.yaml rename to .zuul.playbooks/playbooks/tox/main.yaml diff --git a/.zuul.playbooks/playbooks/wheel/main.yaml b/.zuul.playbooks/playbooks/wheel/main.yaml new file mode 100644 index 000000000000..7fcdd82efe2b --- /dev/null +++ b/.zuul.playbooks/playbooks/wheel/main.yaml @@ -0,0 +1,6 @@ +- hosts: all + tasks: + + - name: Build wheel + include_role: + name: build-wheel-manylinux diff --git a/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/README.rst b/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/README.rst new file mode 100644 index 000000000000..13c22d2cbaca --- /dev/null +++ b/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/README.rst @@ -0,0 +1 @@ +Build manylinux wheels for cryptography diff --git a/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/files/build-wheels.sh b/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/files/build-wheels.sh new file mode 100644 index 000000000000..65a8201823ca --- /dev/null +++ b/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/files/build-wheels.sh @@ -0,0 +1,51 @@ +#!/bin/bash -ex + +# Compile wheels +cd /io + +mkdir -p wheelhouse.final + +for P in ${PYTHONS}; do + + PYBIN=/opt/python/${P}/bin + + "${PYBIN}"/python -m virtualenv .venv + + .venv/bin/pip install cffi six ipaddress "enum34; python_version < '3'" + + REGEX="cp3([0-9])*" + if [[ "${PYBIN}" =~ $REGEX ]]; then + PY_LIMITED_API="--py-limited-api=cp3${BASH_REMATCH[1]}" + fi + + LDFLAGS="-L/opt/pyca/cryptography/openssl/lib" \ + CFLAGS="-I/opt/pyca/cryptography/openssl/include -Wl,--exclude-libs,ALL" \ + .venv/bin/python setup.py bdist_wheel $PY_LIMITED_API + + auditwheel repair --plat ${PLAT} -w wheelhouse/ dist/cryptography*.whl + + # Sanity checks + # NOTE(ianw) : no execstack on aarch64, comes from + # prelink, which was never supported. CentOS 8 does + # have it separate, skip for now. + if [[ "${PLAT}" != "manylinux2014_aarch64" ]]; then + for f in wheelhouse/*.whl; do + unzip $f -d execstack.check + + results=$(execstack execstack.check/cryptography/hazmat/bindings/*.so) + count=$(echo "$results" | grep -c '^X' || true) + if [ "$count" -ne 0 ]; then + exit 1 + fi + rm -rf execstack.check + done + fi + + .venv/bin/pip install cryptography --no-index -f wheelhouse/ + .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" + + # Cleanup + mv wheelhouse/* wheelhouse.final + rm -rf .venv dist wheelhouse + +done diff --git a/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/tasks/main.yaml b/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/tasks/main.yaml new file mode 100644 index 000000000000..aebf7d6b7fbb --- /dev/null +++ b/.zuul.playbooks/playbooks/wheel/roles/build-wheel-manylinux/tasks/main.yaml @@ -0,0 +1,145 @@ +# Wheel builds is a list of dicts, with keys +# +# platform: the manylinux platform name +# image: the docker image to build in +# pythons: list of pythons in the image to build wheels for +- name: Sanity check build list + assert: + that: wheel_builds is defined + +- name: Ensure pip installed + include_role: + name: ensure-pip + +- name: Run ensure-docker + include_role: + name: ensure-docker + +- name: Workaround Linaro aarch64 cloud MTU issues + # NOTE(ianw) : Docker default networking, the Linaro NAT setup and + # *insert random things here* cause PMTU issues, resulting in hung + # connections, particularly to fastly CDN (particularly annoying + # because pypi and pythonhosted live behind that). Can remove after + # upstream changes merge, or we otherwise find a solution in the + # upstream cloud. + # https://review.opendev.org/747062 + # https://review.opendev.org/746833 + # https://review.opendev.org/747064 + when: ansible_architecture == 'aarch64' + block: + - name: Install jq + package: + name: jq + state: present + become: yes + + - name: Reset docker MTU + shell: | + jq --arg mtu 1400 '. + {mtu: $mtu|tonumber}' /etc/docker/daemon.json > /etc/docker/daemon.json.new + cat /etc/docker/daemon.json.new + mv /etc/docker/daemon.json.new /etc/docker/daemon.json + service docker restart + become: yes + +# We build an sdist of the checkout, and then build wheels from the +# sdist. This ensures that nothing is left out of the sdist. +- name: Install sdist required packages + package: + name: + - build-essential + - libssl-dev + - libffi-dev + - python3-dev + become: yes + when: ansible_distribution in ['Debian', 'Ubuntu'] + +- name: Create sdist + command: | + python3 setup.py sdist + args: + chdir: '{{ ansible_user_dir }}/{{ zuul.project.src_dir }}' + +- name: Find output file + find: + paths: '{{ ansible_user_dir }}/{{ zuul.project.src_dir }}/dist' + file_type: file + patterns: "*.tar.gz" + register: _sdist + +- assert: + that: + - _sdist.matched == 1 + +- name: Create a build area + file: + path: '{{ ansible_user_dir }}/build' + state: directory + +- name: Create build area from sdist + unarchive: + src: '{{ _sdist.files[0].path }}' + dest: '{{ ansible_user_dir }}/build' + remote_src: yes + +- name: Find cryptography subdir from sdist build dir + set_fact: + _build_dir: "{{ ansible_user_dir }}/build/{{ _sdist.files[0].path | basename | replace('.tar.gz', '') }}" + +- name: Show _build_dir + debug: + var: _build_dir + +- name: Install build script + copy: + src: build-wheels.sh + dest: '{{ _build_dir }}' + mode: 0755 + +- name: Pre-pull containers + command: >- + docker pull {{ item.image }} + become: yes + loop: '{{ wheel_builds }}' + +- name: Run builds + command: | + docker run --rm \ + -e PLAT={{ item.platform }} \ + -e PYTHONS="{{ item.pythons | join(' ') }}" \ + -v {{ _build_dir }}:/io \ + {{ item.image }} \ + /io/build-wheels.sh + become: yes + loop: '{{ wheel_builds }}' + +- name: Copy sdist to output + synchronize: + src: '{{ _sdist.files[0].path }}' + dest: '{{ zuul.executor.log_root }}' + mode: pull + +- name: Return sdist artifact + zuul_return: + data: + zuul: + artifacts: + - name: '{{ _sdist.files[0].path | basename }}' + url: 'sdist/{{ _sdist.files[0].path }}' + metadata: + type: sdist + +- name: Copy wheels to output + synchronize: + src: '{{ _build_dir }}/wheelhouse.final/' + dest: '{{ zuul.executor.log_root }}/wheelhouse' + mode: pull + +- name: Return wheelhouse artifact + zuul_return: + data: + zuul: + artifacts: + - name: "Wheelhouse" + url: "wheelhouse" + metadata: + type: wheelhouse From ba2c0e5e3e4fb242b80474d2ff7368c91e7ebeaf Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 26 Aug 2020 23:00:17 -0500 Subject: [PATCH 950/988] 3.1 release (#5430) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f517963a911c..3facb2ac1642 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v3-1: -3.1 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +3.1 - 2020-08-26 +~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Removed support for ``idna`` based :term:`U-label` parsing in various X.509 classes. This support was originally diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 1b3cd70acb16..fd1b7a581734 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -22,7 +22,7 @@ ) __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.1.dev1" +__version__ = "3.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 86ac18f18595..0ae2179b0c46 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -20,7 +20,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.1.dev1" +__version__ = "3.1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From c2624de7ee23493c9f2a98271e16cf0f0a6cf2bc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 27 Aug 2020 00:54:03 -0500 Subject: [PATCH 951/988] bump version for 3.2 dev (#5431) --- CHANGELOG.rst | 7 +++++++ src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3facb2ac1642..f1e2fd59ed4a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _v3-2: + +3.2 - `master`_ +~~~~~~~~~~~~~~~ + +.. note:: This version is not yet released and is under active development. + .. _v3-1: 3.1 - 2020-08-26 diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index fd1b7a581734..57905d3ef4e9 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -22,7 +22,7 @@ ) __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.1" +__version__ = "3.2.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index 0ae2179b0c46..e1a01178cdc4 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -20,7 +20,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.1" +__version__ = "3.2.dev1" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" From 761e9aa9901fbce8ea5d020ee9ebb6375e01b842 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 27 Aug 2020 17:32:38 -0400 Subject: [PATCH 952/988] re-enable paramiko downstream testing (#5436) --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 103c2f835409..44a7ea0e3734 100644 --- a/.travis.yml +++ b/.travis.yml @@ -118,10 +118,8 @@ matrix: env: DOWNSTREAM=pyopenssl - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1g - # Temporary disabled until - # https://github.com/paramiko/paramiko/pull/1723 is merged - # - python: 2.7 - # env: DOWNSTREAM=paramiko + - python: 2.7 + env: DOWNSTREAM=paramiko - python: 3.7 env: DOWNSTREAM=aws-encryption-sdk - python: 3.7 From b31ecb0ff93427c89ad002a7a7eee63b3ad8cf39 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 27 Aug 2020 19:11:37 -0400 Subject: [PATCH 953/988] try running paramiko downstream tests on py3 (#5437) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 44a7ea0e3734..2985521617ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -118,7 +118,7 @@ matrix: env: DOWNSTREAM=pyopenssl - python: 3.7 env: DOWNSTREAM=twisted OPENSSL=1.1.1g - - python: 2.7 + - python: 3.7 env: DOWNSTREAM=paramiko - python: 3.7 env: DOWNSTREAM=aws-encryption-sdk From 1fd7cacdb8675242bb8438cf427b9417dcea6968 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 28 Aug 2020 09:29:04 -0400 Subject: [PATCH 954/988] Removed urllib3 downstream test (#5442) --- .travis.yml | 4 ---- .travis/downstream.d/urllib3.sh | 18 ------------------ 2 files changed, 22 deletions(-) delete mode 100755 .travis/downstream.d/urllib3.sh diff --git a/.travis.yml b/.travis.yml index 2985521617ed..fca538be18b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -130,10 +130,6 @@ matrix: env: DOWNSTREAM=certbot - python: 3.8 env: DOWNSTREAM=certbot-josepy - - python: 3.8 - env: DOWNSTREAM=urllib3 - # Tests hang when run under bionic/focal - dist: xenial install: - ./.travis/install.sh diff --git a/.travis/downstream.d/urllib3.sh b/.travis/downstream.d/urllib3.sh deleted file mode 100755 index dad06159846f..000000000000 --- a/.travis/downstream.d/urllib3.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -ex - -case "${1}" in - install) - git clone --depth 1 https://github.com/shazow/urllib3 - cd urllib3 - git rev-parse HEAD - pip install -r ./dev-requirements.txt - pip install -e ".[socks]" - ;; - run) - cd urllib3 - pytest test - ;; - *) - exit 1 - ;; -esac From 8bc6920444afcdaeb4307c365b718b3ddc9e6c0c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 28 Aug 2020 10:55:41 -0400 Subject: [PATCH 955/988] Break users on OpenSSL 1.0.2 (#5438) fixes #5432 --- CHANGELOG.rst | 3 +++ docs/faq.rst | 13 ++++++++++++ docs/installation.rst | 3 ++- .../hazmat/bindings/openssl/binding.py | 20 +++++++++++++------ tests/hazmat/bindings/test_openssl.py | 12 +++++++++++ tox.ini | 2 ++ 6 files changed, 46 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f1e2fd59ed4a..60d8b6182174 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,9 @@ Changelog .. note:: This version is not yet released and is under active development. +* Support for OpenSSL 1.0.2 has been removed. Users on older version of OpenSSL + will need to upgrade. + .. _v3-1: 3.1 - 2020-08-26 diff --git a/docs/faq.rst b/docs/faq.rst index dba7b05ed9ac..33c5417d12db 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -109,6 +109,19 @@ Your ``pip`` and/or ``setuptools`` are outdated. Please upgrade to the latest versions with ``pip install -U pip setuptools`` (or on Windows ``python -m pip install -U pip setuptools``). +Importing cryptography causes a ``RuntimeError`` about OpenSSL 1.0.2 +-------------------------------------------------------------------- + +The OpenSSL project has dropped support for the 1.0.2 release series. Since it +is no longer receiving security patches from upstream, ``cryptography`` is also +dropping support for it. To fix this issue you should upgrade to a newer +version of OpenSSL (1.1.0 or later). This may require you to upgrade to a newer +operating system. + +For the 3.2 release, you can set the ``CRYPTOGRAPHY_ALLOW_OPENSSL_102`` +environment variable. Please note that this is *temporary* and will be removed +in ``cryptography`` 3.3. + Installing cryptography with OpenSSL 0.9.8, 1.0.0, 1.0.1 fails -------------------------------------------------------------- diff --git a/docs/installation.rst b/docs/installation.rst index 62126fc76816..c773fdce5d69 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -33,7 +33,8 @@ OpenSSL releases: .. warning:: - Cryptography 3.1 has deprecated support for OpenSSL 1.0.2. + Cryptography 3.2 has dropped support for OpenSSL 1.0.2, see the + :doc:`FAQ ` for more details Building cryptography on Windows -------------------------------- diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 178a81e0d56c..bf6f12029b5b 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import collections +import os import threading import types import warnings @@ -170,12 +171,19 @@ def _verify_openssl_version(lib): lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_110 and not lib.CRYPTOGRAPHY_IS_LIBRESSL ): - warnings.warn( - "OpenSSL version 1.0.2 is no longer supported by the OpenSSL " - "project, please upgrade. The next version of cryptography will " - "drop support for it.", - utils.CryptographyDeprecationWarning, - ) + if os.environ.get("CRYPTOGRAPHY_ALLOW_OPENSSL_102"): + warnings.warn( + "OpenSSL version 1.0.2 is no longer supported by the OpenSSL " + "project, please upgrade. The next version of cryptography " + "will completely remove support for it.", + utils.CryptographyDeprecationWarning, + ) + else: + raise RuntimeError( + "You are linking against OpenSSL 1.0.2, which is no longer " + "supported by the OpenSSL project. You need to upgrade to a " + "newer version of OpenSSL." + ) def _verify_package_version(version): diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index a4f6ac015695..ecee34091dc7 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -4,6 +4,8 @@ from __future__ import absolute_import, division, print_function +import pretend + import pytest from cryptography.exceptions import InternalError @@ -11,6 +13,7 @@ Binding, _consume_errors, _openssl_assert, + _verify_openssl_version, _verify_package_version, ) @@ -125,3 +128,12 @@ def test_check_startup_errors_are_allowed(self): def test_version_mismatch(self): with pytest.raises(ImportError): _verify_package_version("nottherightversion") + + def test_verify_openssl_version(self, monkeypatch): + monkeypatch.delenv("CRYPTOGRAPHY_ALLOW_OPENSSL_102", raising=False) + lib = pretend.stub( + CRYPTOGRAPHY_OPENSSL_LESS_THAN_110=True, + CRYPTOGRAPHY_IS_LIBRESSL=False, + ) + with pytest.raises(RuntimeError): + _verify_openssl_version(lib) diff --git a/tox.ini b/tox.ini index bc5de1ad9953..e94d3c1e0753 100644 --- a/tox.ini +++ b/tox.ini @@ -13,6 +13,8 @@ deps = ./vectors randomorder: pytest-randomly passenv = ARCHFLAGS LDFLAGS CFLAGS INCLUDE LIB LD_LIBRARY_PATH USERNAME PYTHONIOENCODING OPENSSL_FORCE_FIPS_MODE +setenv = + CRYPTOGRAPHY_ALLOW_OPENSSL_102=1 commands = pip list # We use parallel mode and then combine here so that coverage.py will take From 31a5da73f88f04558aac538682b0901326c37152 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 29 Aug 2020 08:28:32 -0500 Subject: [PATCH 956/988] update docs to not use backends (#5404) --- docs/fernet.rst | 2 - docs/hazmat/primitives/asymmetric/dh.rst | 16 ++------ docs/hazmat/primitives/asymmetric/dsa.rst | 6 +-- docs/hazmat/primitives/asymmetric/ec.rst | 30 +++++--------- docs/hazmat/primitives/asymmetric/rsa.rst | 8 +--- .../primitives/asymmetric/serialization.rst | 16 +++----- docs/hazmat/primitives/asymmetric/utils.rst | 2 - docs/hazmat/primitives/asymmetric/x25519.rst | 3 -- docs/hazmat/primitives/asymmetric/x448.rst | 3 -- .../primitives/cryptographic-hashes.rst | 3 +- .../primitives/key-derivation-functions.rst | 32 --------------- docs/hazmat/primitives/mac/cmac.rst | 5 +-- docs/hazmat/primitives/mac/hmac.rst | 5 +-- .../primitives/symmetric-encryption.rst | 17 ++------ docs/hazmat/primitives/twofactor.rst | 8 ++-- docs/x509/ocsp.rst | 15 +++---- docs/x509/reference.rst | 40 ++++++------------- docs/x509/tutorial.rst | 7 +--- 18 files changed, 56 insertions(+), 162 deletions(-) diff --git a/docs/fernet.rst b/docs/fernet.rst index dd9d75bd1dc6..960f47137850 100644 --- a/docs/fernet.rst +++ b/docs/fernet.rst @@ -229,7 +229,6 @@ password through a key derivation function such as >>> import base64 >>> import os >>> from cryptography.fernet import Fernet - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC >>> password = b"password" @@ -239,7 +238,6 @@ password through a key derivation function such as ... length=32, ... salt=salt, ... iterations=100000, - ... backend=default_backend() ... ) >>> key = base64.urlsafe_b64encode(kdf.derive(password)) >>> f = Fernet(key) diff --git a/docs/hazmat/primitives/asymmetric/dh.rst b/docs/hazmat/primitives/asymmetric/dh.rst index 145196adc581..6b47da089378 100644 --- a/docs/hazmat/primitives/asymmetric/dh.rst +++ b/docs/hazmat/primitives/asymmetric/dh.rst @@ -31,13 +31,11 @@ present. .. code-block:: pycon - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import dh >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate some parameters. These can be reused. - >>> parameters = dh.generate_parameters(generator=2, key_size=2048, - ... backend=default_backend()) + >>> parameters = dh.generate_parameters(generator=2, key_size=2048) >>> # Generate a private key for use in the exchange. >>> server_private_key = parameters.generate_private_key() >>> # In a real handshake the peer is a remote client. For this @@ -51,7 +49,6 @@ present. ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key) >>> # And now we can demonstrate that the handshake performed in the >>> # opposite direction gives the same final value @@ -63,7 +60,6 @@ present. ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(same_shared_key) >>> derived_key == same_derived_key @@ -75,13 +71,11 @@ example of the ephemeral form: .. code-block:: pycon - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import dh >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate some parameters. These can be reused. - >>> parameters = dh.generate_parameters(generator=2, key_size=2048, - ... backend=default_backend()) + >>> parameters = dh.generate_parameters(generator=2, key_size=2048) >>> # Generate a private key for use in the exchange. >>> private_key = parameters.generate_private_key() >>> # In a real handshake the peer_public_key will be received from the @@ -96,7 +90,6 @@ example of the ephemeral form: ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key, but >>> # we can reuse the parameters. @@ -108,7 +101,6 @@ example of the ephemeral form: ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key_2) To assemble a :class:`~DHParameters` and a :class:`~DHPublicKey` from @@ -118,9 +110,9 @@ example, if **p**, **g**, and **y** are :class:`int` objects received from a peer:: pn = dh.DHParameterNumbers(p, g) - parameters = pn.parameters(default_backend()) + parameters = pn.parameters() peer_public_numbers = dh.DHPublicNumbers(y, pn) - peer_public_key = peer_public_numbers.public_key(default_backend()) + peer_public_key = peer_public_numbers.public_key() See also the :class:`~cryptography.hazmat.backends.interfaces.DHBackend` diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst index 2eae56df1c36..788e4270b886 100644 --- a/docs/hazmat/primitives/asymmetric/dsa.rst +++ b/docs/hazmat/primitives/asymmetric/dsa.rst @@ -78,12 +78,10 @@ instance. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import dsa >>> private_key = dsa.generate_private_key( ... key_size=1024, - ... backend=default_backend() ... ) >>> data = b"this is some data I'd like to sign" >>> signature = private_key.sign( @@ -103,7 +101,7 @@ separately and pass that value using >>> from cryptography.hazmat.primitives.asymmetric import utils >>> chosen_hash = hashes.SHA256() - >>> hasher = hashes.Hash(chosen_hash, default_backend()) + >>> hasher = hashes.Hash(chosen_hash) >>> hasher.update(b"data & ") >>> hasher.update(b"more data") >>> digest = hasher.finalize() @@ -146,7 +144,7 @@ separately and pass that value using .. doctest:: >>> chosen_hash = hashes.SHA256() - >>> hasher = hashes.Hash(chosen_hash, default_backend()) + >>> hasher = hashes.Hash(chosen_hash) >>> hasher.update(b"data & ") >>> hasher.update(b"more data") >>> digest = hasher.finalize() diff --git a/docs/hazmat/primitives/asymmetric/ec.rst b/docs/hazmat/primitives/asymmetric/ec.rst index 72768f8332cd..5691560f3c76 100644 --- a/docs/hazmat/primitives/asymmetric/ec.rst +++ b/docs/hazmat/primitives/asymmetric/ec.rst @@ -56,11 +56,10 @@ Elliptic Curve Signature Algorithms .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import ec >>> private_key = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ) >>> data = b"this is some data I'd like to sign" >>> signature = private_key.sign( @@ -80,7 +79,7 @@ Elliptic Curve Signature Algorithms >>> from cryptography.hazmat.primitives.asymmetric import utils >>> chosen_hash = hashes.SHA256() - >>> hasher = hashes.Hash(chosen_hash, default_backend()) + >>> hasher = hashes.Hash(chosen_hash) >>> hasher.update(b"data & ") >>> hasher.update(b"more data") >>> digest = hasher.finalize() @@ -112,7 +111,7 @@ Elliptic Curve Signature Algorithms .. doctest:: >>> chosen_hash = hashes.SHA256() - >>> hasher = hashes.Hash(chosen_hash, default_backend()) + >>> hasher = hashes.Hash(chosen_hash) >>> hasher.update(b"data & ") >>> hasher.update(b"more data") >>> digest = hasher.finalize() @@ -270,18 +269,17 @@ Elliptic Curve Key Exchange algorithm .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import ec >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate a private key for use in the exchange. >>> server_private_key = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ) >>> # In a real handshake the peer is a remote client. For this >>> # example we'll generate another local private key though. >>> peer_private_key = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ) >>> shared_key = server_private_key.exchange( ... ec.ECDH(), peer_private_key.public_key()) @@ -291,7 +289,6 @@ Elliptic Curve Key Exchange algorithm ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key) >>> # And now we can demonstrate that the handshake performed in the >>> # opposite direction gives the same final value @@ -303,7 +300,6 @@ Elliptic Curve Key Exchange algorithm ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(same_shared_key) >>> derived_key == same_derived_key True @@ -316,19 +312,18 @@ Elliptic Curve Key Exchange algorithm .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import ec >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF >>> # Generate a private key for use in the exchange. >>> private_key = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ) >>> # In a real handshake the peer_public_key will be received from the >>> # other party. For this example we'll generate another private key >>> # and get a public key from that. >>> peer_public_key = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ).public_key() >>> shared_key = private_key.exchange(ec.ECDH(), peer_public_key) >>> # Perform key derivation. @@ -337,14 +332,13 @@ Elliptic Curve Key Exchange algorithm ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key. >>> private_key_2 = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ) >>> peer_public_key_2 = ec.generate_private_key( - ... ec.SECP384R1(), default_backend() + ... ec.SECP384R1() ... ).public_key() >>> shared_key_2 = private_key_2.exchange(ec.ECDH(), peer_public_key_2) >>> derived_key_2 = HKDF( @@ -352,7 +346,6 @@ Elliptic Curve Key Exchange algorithm ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key_2) Elliptic Curves @@ -787,11 +780,10 @@ This sample demonstrates how to generate a private key and serialize it. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import serialization >>> from cryptography.hazmat.primitives.asymmetric import ec - >>> private_key = ec.generate_private_key(ec.SECP384R1(), default_backend()) + >>> private_key = ec.generate_private_key(ec.SECP384R1()) >>> serialized_private = private_key.private_bytes( ... encoding=serialization.Encoding.PEM, @@ -831,14 +823,12 @@ in PEM format. >>> loaded_public_key = serialization.load_pem_public_key( ... serialized_public, - ... backend=default_backend() ... ) >>> loaded_private_key = serialization.load_pem_private_key( ... serialized_private, ... # or password=None, if in plain text ... password=b'testpassword', - ... backend=default_backend() ... ) diff --git a/docs/hazmat/primitives/asymmetric/rsa.rst b/docs/hazmat/primitives/asymmetric/rsa.rst index c3311c80c96c..b8060e4740fd 100644 --- a/docs/hazmat/primitives/asymmetric/rsa.rst +++ b/docs/hazmat/primitives/asymmetric/rsa.rst @@ -32,12 +32,10 @@ mathematical properties`_. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> private_key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) :param int public_exponent: The public exponent of the new key. @@ -68,14 +66,12 @@ markers), you can load it: .. code-block:: pycon - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import serialization >>> with open("path/to/key.pem", "rb") as key_file: ... private_key = serialization.load_pem_private_key( ... key_file.read(), ... password=None, - ... backend=default_backend() ... ) Serialized keys may optionally be encrypted on disk using a password. In this @@ -171,7 +167,7 @@ separately and pass that value using >>> from cryptography.hazmat.primitives.asymmetric import utils >>> chosen_hash = hashes.SHA256() - >>> hasher = hashes.Hash(chosen_hash, default_backend()) + >>> hasher = hashes.Hash(chosen_hash) >>> hasher.update(b"data & ") >>> hasher.update(b"more data") >>> digest = hasher.finalize() @@ -221,7 +217,7 @@ separately and pass that value using .. doctest:: >>> chosen_hash = hashes.SHA256() - >>> hasher = hashes.Hash(chosen_hash, default_backend()) + >>> hasher = hashes.Hash(chosen_hash) >>> hasher.update(b"data & ") >>> hasher.update(b"more data") >>> digest = hasher.finalize() diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 914fe51df7ca..56b2c696ccaa 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -88,10 +88,9 @@ methods. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.asymmetric import dsa, rsa >>> from cryptography.hazmat.primitives.serialization import load_pem_private_key - >>> key = load_pem_private_key(pem_data, password=None, backend=default_backend()) + >>> key = load_pem_private_key(pem_data, password=None) >>> if isinstance(key, rsa.RSAPrivateKey): ... signature = sign_with_rsa_key(key, message) ... elif isinstance(key, dsa.DSAPrivateKey): @@ -173,7 +172,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END .. doctest:: >>> from cryptography.hazmat.primitives.serialization import load_pem_public_key - >>> key = load_pem_public_key(public_pem_data, backend=default_backend()) + >>> key = load_pem_public_key(public_pem_data) >>> isinstance(key, rsa.RSAPublicKey) True @@ -208,7 +207,7 @@ all begin with ``-----BEGIN {format}-----`` and end with ``-----END >>> from cryptography.hazmat.primitives.serialization import load_pem_parameters >>> from cryptography.hazmat.primitives.asymmetric import dh - >>> parameters = load_pem_parameters(parameters_pem_data, backend=default_backend()) + >>> parameters = load_pem_parameters(parameters_pem_data) >>> isinstance(parameters, dh.DHParameters) True @@ -274,10 +273,9 @@ the rest. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> from cryptography.hazmat.primitives.serialization import load_der_private_key - >>> key = load_der_private_key(der_data, password=None, backend=default_backend()) + >>> key = load_der_private_key(der_data, password=None) >>> isinstance(key, rsa.RSAPrivateKey) True @@ -310,10 +308,9 @@ the rest. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> from cryptography.hazmat.primitives.serialization import load_der_public_key - >>> key = load_der_public_key(public_der_data, backend=default_backend()) + >>> key = load_der_public_key(public_der_data) >>> isinstance(key, rsa.RSAPublicKey) True @@ -341,10 +338,9 @@ the rest. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.asymmetric import dh >>> from cryptography.hazmat.primitives.serialization import load_der_parameters - >>> parameters = load_der_parameters(parameters_der_data, backend=default_backend()) + >>> parameters = load_der_parameters(parameters_der_data) >>> isinstance(parameters, dh.DHParameters) True diff --git a/docs/hazmat/primitives/asymmetric/utils.rst b/docs/hazmat/primitives/asymmetric/utils.rst index f46acb2ec081..487926e91256 100644 --- a/docs/hazmat/primitives/asymmetric/utils.rst +++ b/docs/hazmat/primitives/asymmetric/utils.rst @@ -57,7 +57,6 @@ Asymmetric Utilities .. doctest:: >>> import hashlib - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import ( ... padding, rsa, utils @@ -65,7 +64,6 @@ Asymmetric Utilities >>> private_key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) >>> prehashed_msg = hashlib.sha256(b"A message I want to sign").digest() >>> signature = private_key.sign( diff --git a/docs/hazmat/primitives/asymmetric/x25519.rst b/docs/hazmat/primitives/asymmetric/x25519.rst index ea01fbaa08e7..014f3d01d5d3 100644 --- a/docs/hazmat/primitives/asymmetric/x25519.rst +++ b/docs/hazmat/primitives/asymmetric/x25519.rst @@ -21,7 +21,6 @@ present. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF @@ -39,7 +38,6 @@ present. ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key. >>> private_key_2 = X25519PrivateKey.generate() @@ -50,7 +48,6 @@ present. ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key_2) Key interfaces diff --git a/docs/hazmat/primitives/asymmetric/x448.rst b/docs/hazmat/primitives/asymmetric/x448.rst index 4e1f0421f542..f166355b83fa 100644 --- a/docs/hazmat/primitives/asymmetric/x448.rst +++ b/docs/hazmat/primitives/asymmetric/x448.rst @@ -21,7 +21,6 @@ present. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric.x448 import X448PrivateKey >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF @@ -39,7 +38,6 @@ present. ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key) >>> # For the next handshake we MUST generate another private key. >>> private_key_2 = X448PrivateKey.generate() @@ -50,7 +48,6 @@ present. ... length=32, ... salt=None, ... info=b'handshake data', - ... backend=default_backend() ... ).derive(shared_key_2) Key interfaces diff --git a/docs/hazmat/primitives/cryptographic-hashes.rst b/docs/hazmat/primitives/cryptographic-hashes.rst index 6615ba6fa5ba..4cdc034a6b84 100644 --- a/docs/hazmat/primitives/cryptographic-hashes.rst +++ b/docs/hazmat/primitives/cryptographic-hashes.rst @@ -20,9 +20,8 @@ Message digests (Hashing) .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes - >>> digest = hashes.Hash(hashes.SHA256(), backend=default_backend()) + >>> digest = hashes.Hash(hashes.SHA256()) >>> digest.update(b"abc") >>> digest.update(b"123") >>> digest.finalize() diff --git a/docs/hazmat/primitives/key-derivation-functions.rst b/docs/hazmat/primitives/key-derivation-functions.rst index fc74a98f039d..62457b28490c 100644 --- a/docs/hazmat/primitives/key-derivation-functions.rst +++ b/docs/hazmat/primitives/key-derivation-functions.rst @@ -55,8 +55,6 @@ PBKDF2 >>> import os >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> # Salts should be randomly generated >>> salt = os.urandom(16) >>> # derive @@ -65,7 +63,6 @@ PBKDF2 ... length=32, ... salt=salt, ... iterations=100000, - ... backend=backend ... ) >>> key = kdf.derive(b"my great password") >>> # verify @@ -74,7 +71,6 @@ PBKDF2 ... length=32, ... salt=salt, ... iterations=100000, - ... backend=backend ... ) >>> kdf.verify(b"my great password", key) @@ -159,8 +155,6 @@ Scrypt >>> import os >>> from cryptography.hazmat.primitives.kdf.scrypt import Scrypt - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> salt = os.urandom(16) >>> # derive >>> kdf = Scrypt( @@ -169,7 +163,6 @@ Scrypt ... n=2**14, ... r=8, ... p=1, - ... backend=backend ... ) >>> key = kdf.derive(b"my great password") >>> # verify @@ -179,7 +172,6 @@ Scrypt ... n=2**14, ... r=8, ... p=1, - ... backend=backend ... ) >>> kdf.verify(b"my great password", key) @@ -276,21 +268,17 @@ ConcatKDF >>> import os >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.concatkdf import ConcatKDFHash - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> otherinfo = b"concatkdf-example" >>> ckdf = ConcatKDFHash( ... algorithm=hashes.SHA256(), ... length=32, ... otherinfo=otherinfo, - ... backend=backend ... ) >>> key = ckdf.derive(b"input key") >>> ckdf = ConcatKDFHash( ... algorithm=hashes.SHA256(), ... length=32, ... otherinfo=otherinfo, - ... backend=backend ... ) >>> ckdf.verify(b"input key", key) @@ -364,8 +352,6 @@ ConcatKDF >>> import os >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.concatkdf import ConcatKDFHMAC - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> salt = os.urandom(16) >>> otherinfo = b"concatkdf-example" >>> ckdf = ConcatKDFHMAC( @@ -373,7 +359,6 @@ ConcatKDF ... length=32, ... salt=salt, ... otherinfo=otherinfo, - ... backend=backend ... ) >>> key = ckdf.derive(b"input key") >>> ckdf = ConcatKDFHMAC( @@ -381,7 +366,6 @@ ConcatKDF ... length=32, ... salt=salt, ... otherinfo=otherinfo, - ... backend=backend ... ) >>> ckdf.verify(b"input key", key) @@ -468,8 +452,6 @@ HKDF >>> import os >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDF - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> salt = os.urandom(16) >>> info = b"hkdf-example" >>> hkdf = HKDF( @@ -477,7 +459,6 @@ HKDF ... length=32, ... salt=salt, ... info=info, - ... backend=backend ... ) >>> key = hkdf.derive(b"input key") >>> hkdf = HKDF( @@ -485,7 +466,6 @@ HKDF ... length=32, ... salt=salt, ... info=info, - ... backend=backend ... ) >>> hkdf.verify(b"input key", key) @@ -575,22 +555,18 @@ HKDF >>> import os >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.hkdf import HKDFExpand - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> info = b"hkdf-example" >>> key_material = os.urandom(16) >>> hkdf = HKDFExpand( ... algorithm=hashes.SHA256(), ... length=32, ... info=info, - ... backend=backend ... ) >>> key = hkdf.derive(key_material) >>> hkdf = HKDFExpand( ... algorithm=hashes.SHA256(), ... length=32, ... info=info, - ... backend=backend ... ) >>> hkdf.verify(key_material, key) @@ -676,8 +652,6 @@ KBKDF >>> from cryptography.hazmat.primitives.kdf.kbkdf import ( ... CounterLocation, KBKDFHMAC, Mode ... ) - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> label = b"KBKDF HMAC Label" >>> context = b"KBKDF HMAC Context" >>> kdf = KBKDFHMAC( @@ -690,7 +664,6 @@ KBKDF ... label=label, ... context=context, ... fixed=None, - ... backend=backend ... ) >>> key = kdf.derive(b"input key") >>> kdf = KBKDFHMAC( @@ -703,7 +676,6 @@ KBKDF ... label=label, ... context=context, ... fixed=None, - ... backend=backend ... ) >>> kdf.verify(b"input key", key) @@ -835,21 +807,17 @@ X963KDF >>> import os >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.kdf.x963kdf import X963KDF - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> sharedinfo = b"ANSI X9.63 Example" >>> xkdf = X963KDF( ... algorithm=hashes.SHA256(), ... length=32, ... sharedinfo=sharedinfo, - ... backend=backend ... ) >>> key = xkdf.derive(b"input key") >>> xkdf = X963KDF( ... algorithm=hashes.SHA256(), ... length=32, ... sharedinfo=sharedinfo, - ... backend=backend ... ) >>> xkdf.verify(b"input key", key) diff --git a/docs/hazmat/primitives/mac/cmac.rst b/docs/hazmat/primitives/mac/cmac.rst index 796af22007b1..b40a90a82aa9 100644 --- a/docs/hazmat/primitives/mac/cmac.rst +++ b/docs/hazmat/primitives/mac/cmac.rst @@ -26,10 +26,9 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import cmac >>> from cryptography.hazmat.primitives.ciphers import algorithms - >>> c = cmac.CMAC(algorithms.AES(key), backend=default_backend()) + >>> c = cmac.CMAC(algorithms.AES(key)) >>> c.update(b"message to authenticate") >>> c.finalize() b'CT\x1d\xc8\x0e\x15\xbe4e\xdb\xb6\x84\xca\xd9Xk' @@ -47,7 +46,7 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`. .. doctest:: - >>> c = cmac.CMAC(algorithms.AES(key), backend=default_backend()) + >>> c = cmac.CMAC(algorithms.AES(key)) >>> c.update(b"message to authenticate") >>> c.verify(b"an incorrect signature") Traceback (most recent call last): diff --git a/docs/hazmat/primitives/mac/hmac.rst b/docs/hazmat/primitives/mac/hmac.rst index ba49da224236..3695270b7ab2 100644 --- a/docs/hazmat/primitives/mac/hmac.rst +++ b/docs/hazmat/primitives/mac/hmac.rst @@ -27,9 +27,8 @@ of a message. .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes, hmac - >>> h = hmac.HMAC(key, hashes.SHA256(), backend=default_backend()) + >>> h = hmac.HMAC(key, hashes.SHA256()) >>> h.update(b"message to hash") >>> h.finalize() b'#F\xdaI\x8b"e\xc4\xf1\xbb\x9a\x8fc\xff\xf5\xdex.\xbc\xcd/+\x8a\x86\x1d\x84\'\xc3\xa6\x1d\xd8J' @@ -47,7 +46,7 @@ of a message. .. doctest:: - >>> h = hmac.HMAC(key, hashes.SHA256(), backend=default_backend()) + >>> h = hmac.HMAC(key, hashes.SHA256()) >>> h.update(b"message to hash") >>> h.verify(b"an incorrect signature") Traceback (most recent call last): diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 74db180cb2a9..287607df2c7f 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -33,11 +33,9 @@ it fits your needs before implementing anything using this module.** >>> import os >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> key = os.urandom(32) >>> iv = os.urandom(16) - >>> cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend) + >>> cipher = Cipher(algorithms.AES(key), modes.CBC(iv)) >>> encryptor = cipher.encryptor() >>> ct = encryptor.update(b"a secret message") + encryptor.finalize() >>> decryptor = cipher.decryptor() @@ -147,10 +145,9 @@ Algorithms .. doctest:: >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - >>> from cryptography.hazmat.backends import default_backend >>> nonce = os.urandom(16) >>> algorithm = algorithms.ChaCha20(key, nonce) - >>> cipher = Cipher(algorithm, mode=None, backend=default_backend()) + >>> cipher = Cipher(algorithm, mode=None) >>> encryptor = cipher.encryptor() >>> ct = encryptor.update(b"a secret message") >>> decryptor = cipher.decryptor() @@ -231,9 +228,8 @@ Weak ciphers .. doctest:: >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - >>> from cryptography.hazmat.backends import default_backend >>> algorithm = algorithms.ARC4(key) - >>> cipher = Cipher(algorithm, mode=None, backend=default_backend()) + >>> cipher = Cipher(algorithm, mode=None) >>> encryptor = cipher.encryptor() >>> ct = encryptor.update(b"a secret message") >>> decryptor = cipher.decryptor() @@ -425,7 +421,6 @@ Modes import os - from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.ciphers import ( Cipher, algorithms, modes ) @@ -439,7 +434,6 @@ Modes encryptor = Cipher( algorithms.AES(key), modes.GCM(iv), - backend=default_backend() ).encryptor() # associated_data will be authenticated but not encrypted, @@ -458,7 +452,6 @@ Modes decryptor = Cipher( algorithms.AES(key), modes.GCM(iv, tag), - backend=default_backend() ).decryptor() # We put associated_data back in or the tag will fail to verify @@ -595,11 +588,9 @@ Interfaces >>> import os >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes - >>> from cryptography.hazmat.backends import default_backend - >>> backend = default_backend() >>> key = os.urandom(32) >>> iv = os.urandom(16) - >>> cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend) + >>> cipher = Cipher(algorithms.AES(key), modes.CBC(iv)) >>> encryptor = cipher.encryptor() >>> # the buffer needs to be at least len(data) + n - 1 where n is cipher/mode block size in bytes >>> buf = bytearray(31) diff --git a/docs/hazmat/primitives/twofactor.rst b/docs/hazmat/primitives/twofactor.rst index 838e5e1055c3..1d2ab452ce0a 100644 --- a/docs/hazmat/primitives/twofactor.rst +++ b/docs/hazmat/primitives/twofactor.rst @@ -33,11 +33,10 @@ codes (HMAC). .. doctest:: >>> import os - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.twofactor.hotp import HOTP >>> from cryptography.hazmat.primitives.hashes import SHA1 >>> key = os.urandom(20) - >>> hotp = HOTP(key, 6, SHA1(), backend=default_backend()) + >>> hotp = HOTP(key, 6, SHA1()) >>> hotp_value = hotp.generate(0) >>> hotp.verify(hotp_value, 0) @@ -129,7 +128,7 @@ similar to the following code. assert look_ahead >= 0 correct_counter = None - otp = HOTP(key, 6, default_backend()) + otp = HOTP(key, 6) for count in range(counter, counter + look_ahead): try: otp.verify(hotp, count) @@ -155,11 +154,10 @@ similar to the following code. >>> import os >>> import time - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives.twofactor.totp import TOTP >>> from cryptography.hazmat.primitives.hashes import SHA1 >>> key = os.urandom(20) - >>> totp = TOTP(key, 8, SHA1(), 30, backend=default_backend()) + >>> totp = TOTP(key, 8, SHA1(), 30) >>> time_value = time.time() >>> totp_value = totp.generate(time_value) >>> totp.verify(totp_value, time_value) diff --git a/docs/x509/ocsp.rst b/docs/x509/ocsp.rst index 80ff99087c78..0c2d07aef852 100644 --- a/docs/x509/ocsp.rst +++ b/docs/x509/ocsp.rst @@ -167,12 +167,11 @@ Creating Requests .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import serialization >>> from cryptography.hazmat.primitives.hashes import SHA1 >>> from cryptography.x509 import load_pem_x509_certificate, ocsp - >>> cert = load_pem_x509_certificate(pem_cert, default_backend()) - >>> issuer = load_pem_x509_certificate(pem_issuer, default_backend()) + >>> cert = load_pem_x509_certificate(pem_cert) + >>> issuer = load_pem_x509_certificate(pem_issuer) >>> builder = ocsp.OCSPRequestBuilder() >>> # SHA1 is in this example because RFC 5019 mandates its use. >>> builder = builder.add_certificate(cert, issuer, SHA1()) @@ -315,13 +314,12 @@ Creating Responses .. doctest:: >>> import datetime - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes, serialization >>> from cryptography.x509 import load_pem_x509_certificate, ocsp - >>> cert = load_pem_x509_certificate(pem_cert, default_backend()) - >>> issuer = load_pem_x509_certificate(pem_issuer, default_backend()) - >>> responder_cert = load_pem_x509_certificate(pem_responder_cert, default_backend()) - >>> responder_key = serialization.load_pem_private_key(pem_responder_key, None, default_backend()) + >>> cert = load_pem_x509_certificate(pem_cert) + >>> issuer = load_pem_x509_certificate(pem_issuer) + >>> responder_cert = load_pem_x509_certificate(pem_responder_cert) + >>> responder_key = serialization.load_pem_private_key(pem_responder_key, None) >>> builder = ocsp.OCSPResponseBuilder() >>> # SHA1 is in this example because RFC 5019 mandates its use. >>> builder = builder.add_response( @@ -350,7 +348,6 @@ Creating Responses .. doctest:: - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes, serialization >>> from cryptography.x509 import load_pem_x509_certificate, ocsp >>> response = ocsp.OCSPResponseBuilder.build_unsuccessful( diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 484339e61036..a46c5d623238 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -168,8 +168,7 @@ Loading Certificates .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend - >>> cert = x509.load_pem_x509_certificate(pem_data, default_backend()) + >>> cert = x509.load_pem_x509_certificate(pem_data) >>> cert.serial_number 2 @@ -212,9 +211,8 @@ Loading Certificate Revocation Lists .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes - >>> crl = x509.load_pem_x509_crl(pem_crl_data, default_backend()) + >>> crl = x509.load_pem_x509_crl(pem_crl_data) >>> isinstance(crl.signature_hash_algorithm, hashes.SHA256) True @@ -258,9 +256,8 @@ Loading Certificate Signing Requests .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes - >>> csr = x509.load_pem_x509_csr(pem_req_data, default_backend()) + >>> csr = x509.load_pem_x509_csr(pem_req_data) >>> isinstance(csr.signature_hash_algorithm, hashes.SHA256) True @@ -474,8 +471,8 @@ X.509 Certificate Object >>> from cryptography.hazmat.primitives.serialization import load_pem_public_key >>> from cryptography.hazmat.primitives.asymmetric import padding - >>> issuer_public_key = load_pem_public_key(pem_issuer_public_key, default_backend()) - >>> cert_to_check = x509.load_pem_x509_certificate(pem_data_to_check, default_backend()) + >>> issuer_public_key = load_pem_public_key(pem_issuer_public_key) + >>> cert_to_check = x509.load_pem_x509_certificate(pem_data_to_check) >>> issuer_public_key.verify( ... cert_to_check.signature, ... cert_to_check.tbs_certificate_bytes, @@ -671,7 +668,6 @@ X.509 Certificate Builder .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> from cryptography.x509.oid import NameOID @@ -680,7 +676,6 @@ X.509 Certificate Builder >>> private_key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) >>> public_key = private_key.public_key() >>> builder = x509.CertificateBuilder() @@ -705,7 +700,6 @@ X.509 Certificate Builder ... ) >>> certificate = builder.sign( ... private_key=private_key, algorithm=hashes.SHA256(), - ... backend=default_backend() ... ) >>> isinstance(certificate, x509.Certificate) True @@ -945,7 +939,6 @@ X.509 Certificate Revocation List Builder .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> from cryptography.x509.oid import NameOID @@ -954,7 +947,6 @@ X.509 Certificate Revocation List Builder >>> private_key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) >>> builder = x509.CertificateRevocationListBuilder() >>> builder = builder.issuer_name(x509.Name([ @@ -966,11 +958,10 @@ X.509 Certificate Revocation List Builder ... 333 ... ).revocation_date( ... datetime.datetime.today() - ... ).build(default_backend()) + ... ).build() >>> builder = builder.add_revoked_certificate(revoked_cert) >>> crl = builder.sign( ... private_key=private_key, algorithm=hashes.SHA256(), - ... backend=default_backend() ... ) >>> len(crl) 1 @@ -1107,12 +1098,11 @@ X.509 Revoked Certificate Builder .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> import datetime >>> builder = x509.RevokedCertificateBuilder() >>> builder = builder.revocation_date(datetime.datetime.today()) >>> builder = builder.serial_number(3333) - >>> revoked_certificate = builder.build(default_backend()) + >>> revoked_certificate = builder.build() >>> isinstance(revoked_certificate, x509.RevokedCertificate) True @@ -1161,14 +1151,12 @@ X.509 CSR (Certificate Signing Request) Builder Object .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> from cryptography.x509.oid import AttributeOID, NameOID >>> private_key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) >>> builder = x509.CertificateSigningRequestBuilder() >>> builder = builder.subject_name(x509.Name([ @@ -1181,7 +1169,7 @@ X.509 CSR (Certificate Signing Request) Builder Object ... AttributeOID.CHALLENGE_PASSWORD, b"changeit" ... ) >>> request = builder.sign( - ... private_key, hashes.SHA256(), default_backend() + ... private_key, hashes.SHA256() ... ) >>> isinstance(request, x509.CertificateSigningRequest) True @@ -1907,8 +1895,7 @@ X.509 Extensions .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend - >>> issuer_cert = x509.load_pem_x509_certificate(pem_data, default_backend()) + >>> issuer_cert = x509.load_pem_x509_certificate(pem_data) >>> x509.AuthorityKeyIdentifier.from_issuer_public_key(issuer_cert.public_key()) @@ -1937,8 +1924,7 @@ X.509 Extensions .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend - >>> issuer_cert = x509.load_pem_x509_certificate(pem_data, default_backend()) + >>> issuer_cert = x509.load_pem_x509_certificate(pem_data) >>> ski_ext = issuer_cert.extensions.get_extension_for_class(x509.SubjectKeyIdentifier) >>> x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier(ski_ext.value) @@ -1985,8 +1971,7 @@ X.509 Extensions .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend - >>> csr = x509.load_pem_x509_csr(pem_req_data, default_backend()) + >>> csr = x509.load_pem_x509_csr(pem_req_data) >>> x509.SubjectKeyIdentifier.from_public_key(csr.public_key()) @@ -2021,9 +2006,8 @@ X.509 Extensions .. doctest:: >>> from cryptography import x509 - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import hashes - >>> cert = x509.load_pem_x509_certificate(cryptography_cert_pem, default_backend()) + >>> cert = x509.load_pem_x509_certificate(cryptography_cert_pem) >>> # Get the subjectAltName extension from the certificate >>> ext = cert.extensions.get_extension_for_oid(ExtensionOID.SUBJECT_ALTERNATIVE_NAME) >>> # Get the dNSName entries from the SAN extension diff --git a/docs/x509/tutorial.rst b/docs/x509/tutorial.rst index cc2ffb770683..f5ca416ceb9f 100644 --- a/docs/x509/tutorial.rst +++ b/docs/x509/tutorial.rst @@ -27,14 +27,12 @@ are the most common types of keys on the web right now): .. code-block:: pycon - >>> from cryptography.hazmat.backends import default_backend >>> from cryptography.hazmat.primitives import serialization >>> from cryptography.hazmat.primitives.asymmetric import rsa >>> # Generate our key >>> key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) >>> # Write our key to disk for safe keeping >>> with open("path/to/store/key.pem", "wb") as f: @@ -76,7 +74,7 @@ a few details: ... ]), ... critical=False, ... # Sign the CSR with our private key. - ... ).sign(key, hashes.SHA256(), default_backend()) + ... ).sign(key, hashes.SHA256()) >>> # Write our CSR out to disk. >>> with open("path/to/csr.pem", "wb") as f: ... f.write(csr.public_bytes(serialization.Encoding.PEM)) @@ -105,7 +103,6 @@ Like generating a CSR, we start with creating a new private key: >>> key = rsa.generate_private_key( ... public_exponent=65537, ... key_size=2048, - ... backend=default_backend() ... ) >>> # Write our key to disk for safe keeping >>> with open("path/to/store/key.pem", "wb") as f: @@ -145,7 +142,7 @@ Then we generate the certificate itself: ... x509.SubjectAlternativeName([x509.DNSName(u"localhost")]), ... critical=False, ... # Sign our certificate with our private key - ... ).sign(key, hashes.SHA256(), default_backend()) + ... ).sign(key, hashes.SHA256()) >>> # Write our certificate out to disk. >>> with open("path/to/certificate.pem", "wb") as f: ... f.write(cert.public_bytes(serialization.Encoding.PEM)) From 63dfc57fca688d0f8d0515001f249c317d5e54dc Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 29 Aug 2020 10:39:31 -0400 Subject: [PATCH 957/988] fixed verify script that couldn't have ever worked (#5443) --- docs/development/custom-vectors/secp256k1/verify_secp256k1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py index 485f0718bc02..f721b0001213 100644 --- a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py +++ b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py @@ -35,12 +35,12 @@ def verify_one_vector(vector): signature, ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]()) ) verifier.update(message) - return verifier.verify() + verifier.verify() def verify_vectors(vectors): for vector in vectors: - assert verify_one_vector(vector) + verify_one_vector(vector) vector_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt") From d9f182d8c0ba8923673e6da1fbdddc2f050d298f Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 1 Sep 2020 18:34:24 +0200 Subject: [PATCH 958/988] Add a missing space to py35 deprecation warning (#5448) This fixes a typo that's been introduced in #5387. --- src/cryptography/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/__init__.py b/src/cryptography/__init__.py index f16efce6ba78..7211614d7f4a 100644 --- a/src/cryptography/__init__.py +++ b/src/cryptography/__init__.py @@ -41,7 +41,7 @@ ) if sys.version_info[:2] == (3, 5): warnings.warn( - "Python 3.5 support will be dropped in the next release of" + "Python 3.5 support will be dropped in the next release of " "cryptography. Please upgrade your Python.", CryptographyDeprecationWarning, stacklevel=2, From ad05ebbb32677607344a6c68b37f253ac7e419cc Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 1 Sep 2020 15:21:13 -0500 Subject: [PATCH 959/988] re-add a few engine bindings for advanced users (#5449) * re-add a few engine bindings for advanced users For users who are capable of compiling cryptography against custom openssl and properly using these functions this hopefully allows PKCS11 usage through OpenSSL engines. * forgot to save my buffer --- src/_cffi_src/openssl/engine.py | 15 +++++++++++++++ .../hazmat/bindings/openssl/_conditional.py | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/src/_cffi_src/openssl/engine.py b/src/_cffi_src/openssl/engine.py index fa503a2644b5..24cdd42a8393 100644 --- a/src/_cffi_src/openssl/engine.py +++ b/src/_cffi_src/openssl/engine.py @@ -10,6 +10,7 @@ TYPES = """ typedef ... ENGINE; +typedef ... UI_METHOD; static const long Cryptography_HAS_ENGINE; """ @@ -25,6 +26,12 @@ int ENGINE_free(ENGINE *); const char *ENGINE_get_name(const ENGINE *); +// These bindings are unused by cryptography or pyOpenSSL but are present +// for advanced users who need them. +int ENGINE_ctrl_cmd_string(ENGINE *, const char *, const char *, int); +void ENGINE_load_builtin_engines(void); +EVP_PKEY *ENGINE_load_private_key(ENGINE *, const char *, UI_METHOD *, void *); +EVP_PKEY *ENGINE_load_public_key(ENGINE *, const char *, UI_METHOD *, void *); """ CUSTOMIZATIONS = """ @@ -44,6 +51,14 @@ const char *(*ENGINE_get_id)(const ENGINE *) = NULL; const char *(*ENGINE_get_name)(const ENGINE *) = NULL; +int (*ENGINE_ctrl_cmd_string)(ENGINE *, const char *, const char *, + int) = NULL; +void (*ENGINE_load_builtin_engines)(void) = NULL; +EVP_PKEY *(*ENGINE_load_private_key)(ENGINE *, const char *, UI_METHOD *, + void *) = NULL; +EVP_PKEY *(*ENGINE_load_public_key)(ENGINE *, const char *, + UI_METHOD *, void *) = NULL; + #else static const long Cryptography_HAS_ENGINE = 1; #endif diff --git a/src/cryptography/hazmat/bindings/openssl/_conditional.py b/src/cryptography/hazmat/bindings/openssl/_conditional.py index 9cf489acde06..cdc18eab6848 100644 --- a/src/cryptography/hazmat/bindings/openssl/_conditional.py +++ b/src/cryptography/hazmat/bindings/openssl/_conditional.py @@ -270,6 +270,10 @@ def cryptography_has_engine(): "ENGINE_free", "ENGINE_get_name", "Cryptography_add_osrandom_engine", + "ENGINE_ctrl_cmd_string", + "ENGINE_load_builtin_engines", + "ENGINE_load_private_key", + "ENGINE_load_public_key", ] From 3367c18bf2e71639843e38498f5ad2159835122d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 5 Sep 2020 11:46:34 -0400 Subject: [PATCH 960/988] Be clear that a lack of authentication often means you don't have secrecy (#5454) --- docs/hazmat/primitives/symmetric-encryption.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 287607df2c7f..8551acb2693f 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -11,7 +11,8 @@ where the sender and receiver both use the same secret key. Note that symmetric encryption is **not** sufficient for most applications because it only provides secrecy but not authenticity. That means an attacker can't see the message but an attacker can create bogus messages and force the application to -decrypt them. +decrypt them. In many contexts, a lack of authentication on encrypted messages +can result in a loss of secrecy as well. For this reason it is **strongly** recommended to combine encryption with a message authentication code, such as :doc:`HMAC `, From bfe7b455c52437e3cf555472d7ca03f00740277d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 13 Sep 2020 20:03:36 -0400 Subject: [PATCH 961/988] Account for Bruce redoing his website or something (#5461) --- docs/development/test-vectors.rst | 2 +- vectors/cryptography_vectors/ciphers/Blowfish/bf-cbc.txt | 2 +- vectors/cryptography_vectors/ciphers/Blowfish/bf-cfb.txt | 2 +- vectors/cryptography_vectors/ciphers/Blowfish/bf-ecb.txt | 2 +- vectors/cryptography_vectors/ciphers/Blowfish/bf-ofb.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 720bbbfb1cb7..212f0e847e18 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -731,7 +731,7 @@ header format (substituting the correct information): .. _`IETF`: https://www.ietf.org/ .. _`Project Wycheproof`: https://github.com/google/wycheproof .. _`NIST CAVP`: https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program -.. _`Bruce Schneier's vectors`: https://www.schneier.com/code/vectors.txt +.. _`Bruce Schneier's vectors`: https://www.schneier.com/wp-content/uploads/2015/12/vectors-2.txt .. _`Camellia page`: https://info.isl.ntt.co.jp/crypt/eng/camellia/ .. _`CRYPTREC`: https://www.cryptrec.go.jp .. _`OpenSSL's test vectors`: https://github.com/openssl/openssl/blob/97cf1f6c2854a3a955fd7dd3a1f113deba00c9ef/crypto/evp/evptests.txt#L232 diff --git a/vectors/cryptography_vectors/ciphers/Blowfish/bf-cbc.txt b/vectors/cryptography_vectors/ciphers/Blowfish/bf-cbc.txt index 184d9565fd98..ad3fa0cf2fe6 100644 --- a/vectors/cryptography_vectors/ciphers/Blowfish/bf-cbc.txt +++ b/vectors/cryptography_vectors/ciphers/Blowfish/bf-cbc.txt @@ -1,4 +1,4 @@ -# Reformatted from https://www.schneier.com/code/vectors.txt +# Reformatted from https://www.schneier.com/wp-content/uploads/2015/12/vectors-2.txt # to look like the NIST vectors [ENCRYPT] diff --git a/vectors/cryptography_vectors/ciphers/Blowfish/bf-cfb.txt b/vectors/cryptography_vectors/ciphers/Blowfish/bf-cfb.txt index 8a326f500d46..cd2f58ff91df 100644 --- a/vectors/cryptography_vectors/ciphers/Blowfish/bf-cfb.txt +++ b/vectors/cryptography_vectors/ciphers/Blowfish/bf-cfb.txt @@ -1,4 +1,4 @@ -# Reformatted from https://www.schneier.com/code/vectors.txt +# Reformatted from https://www.schneier.com/wp-content/uploads/2015/12/vectors-2.txt # to look like the NIST vectors [ENCRYPT] diff --git a/vectors/cryptography_vectors/ciphers/Blowfish/bf-ecb.txt b/vectors/cryptography_vectors/ciphers/Blowfish/bf-ecb.txt index bb18a5a3f1bc..70c1c030803f 100644 --- a/vectors/cryptography_vectors/ciphers/Blowfish/bf-ecb.txt +++ b/vectors/cryptography_vectors/ciphers/Blowfish/bf-ecb.txt @@ -1,4 +1,4 @@ -# Reformatted from https://www.schneier.com/code/vectors.txt +# Reformatted from https://www.schneier.com/wp-content/uploads/2015/12/vectors-2.txt # to look like the NIST vectors [ENCRYPT] diff --git a/vectors/cryptography_vectors/ciphers/Blowfish/bf-ofb.txt b/vectors/cryptography_vectors/ciphers/Blowfish/bf-ofb.txt index 21a7421842f2..f87609a996ca 100644 --- a/vectors/cryptography_vectors/ciphers/Blowfish/bf-ofb.txt +++ b/vectors/cryptography_vectors/ciphers/Blowfish/bf-ofb.txt @@ -1,4 +1,4 @@ -# Reformatted from https://www.schneier.com/code/vectors.txt +# Reformatted from https://www.schneier.com/wp-content/uploads/2015/12/vectors-2.txt # to look like the NIST vectors [ENCRYPT] From 1a9e2e1ad7d4c7aadbad24d447896e74177f6fd7 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 13 Sep 2020 19:04:18 -0500 Subject: [PATCH 962/988] allow bytes-like for padding (#5462) this doesn't improve efficiency in any way (copies galore!), but it does make it consistent between a cipher context and a padding context --- docs/hazmat/primitives/padding.rst | 3 ++- src/cryptography/hazmat/primitives/padding.py | 8 +++---- tests/hazmat/primitives/test_padding.py | 24 +++++++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/docs/hazmat/primitives/padding.rst b/docs/hazmat/primitives/padding.rst index 9581df88bd70..99d500a05b68 100644 --- a/docs/hazmat/primitives/padding.rst +++ b/docs/hazmat/primitives/padding.rst @@ -107,7 +107,8 @@ multiple of the block size. .. method:: update(data) - :param bytes data: The data you wish to pass into the context. + :param data: The data you wish to pass into the context. + :type data: :term:`bytes-like` :return bytes: Returns the data that was padded or unpadded. :raises TypeError: Raised if data is not bytes. :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize`. diff --git a/src/cryptography/hazmat/primitives/padding.py b/src/cryptography/hazmat/primitives/padding.py index 95913614cb2d..d3dc7093ae51 100644 --- a/src/cryptography/hazmat/primitives/padding.py +++ b/src/cryptography/hazmat/primitives/padding.py @@ -40,9 +40,9 @@ def _byte_padding_update(buffer_, data, block_size): if buffer_ is None: raise AlreadyFinalized("Context was already finalized.") - utils._check_bytes("data", data) + utils._check_byteslike("data", data) - buffer_ += data + buffer_ += bytes(data) finished_blocks = len(buffer_) // (block_size // 8) @@ -64,9 +64,9 @@ def _byte_unpadding_update(buffer_, data, block_size): if buffer_ is None: raise AlreadyFinalized("Context was already finalized.") - utils._check_bytes("data", data) + utils._check_byteslike("data", data) - buffer_ += data + buffer_ += bytes(data) finished_blocks = max(len(buffer_) // (block_size // 8) - 1, 0) diff --git a/tests/hazmat/primitives/test_padding.py b/tests/hazmat/primitives/test_padding.py index f66d0ee8521d..bf5379730131 100644 --- a/tests/hazmat/primitives/test_padding.py +++ b/tests/hazmat/primitives/test_padding.py @@ -109,6 +109,18 @@ def test_large_padding(self): assert data == b"" + def test_bytearray(self): + padder = padding.PKCS7(128).padder() + unpadded = bytearray(b"t" * 38) + padded = ( + padder.update(unpadded) + + padder.update(unpadded) + + padder.finalize() + ) + unpadder = padding.PKCS7(128).unpadder() + final = unpadder.update(padded) + unpadder.finalize() + assert final == unpadded + unpadded + class TestANSIX923(object): @pytest.mark.parametrize("size", [127, 4096, -2]) @@ -193,3 +205,15 @@ def test_use_after_finalize(self): unpadder.update(b"") with pytest.raises(AlreadyFinalized): unpadder.finalize() + + def test_bytearray(self): + padder = padding.ANSIX923(128).padder() + unpadded = bytearray(b"t" * 38) + padded = ( + padder.update(unpadded) + + padder.update(unpadded) + + padder.finalize() + ) + unpadder = padding.ANSIX923(128).unpadder() + final = unpadder.update(padded) + unpadder.finalize() + assert final == unpadded + unpadded From 6d3644f4e55d491b85bc790f51a989c5edccb9fb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 13 Sep 2020 19:20:09 -0500 Subject: [PATCH 963/988] add pkcs7/smime bindings (#5458) * add pkcs7/smime bindings * Update src/_cffi_src/openssl/pkcs7.py Co-authored-by: Alex Gaynor * Update src/_cffi_src/openssl/pkcs7.py Co-authored-by: Alex Gaynor Co-authored-by: Alex Gaynor --- src/_cffi_src/openssl/pkcs7.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/_cffi_src/openssl/pkcs7.py b/src/_cffi_src/openssl/pkcs7.py index 7f31b82b6296..72f9c2130246 100644 --- a/src/_cffi_src/openssl/pkcs7.py +++ b/src/_cffi_src/openssl/pkcs7.py @@ -24,6 +24,7 @@ typedef ... PKCS7_DIGEST; typedef ... PKCS7_ENCRYPT; typedef ... PKCS7_ENVELOPE; +typedef ... PKCS7_SIGNER_INFO; typedef struct { ASN1_OBJECT *type; @@ -51,10 +52,21 @@ static const int PKCS7_NOVERIFY; static const int PKCS7_STREAM; static const int PKCS7_TEXT; +static const int PKCS7_PARTIAL; """ FUNCTIONS = """ void PKCS7_free(PKCS7 *); +PKCS7 *PKCS7_sign(X509 *, EVP_PKEY *, Cryptography_STACK_OF_X509 *, + BIO *, int); +int SMIME_write_PKCS7(BIO *, PKCS7 *, BIO *, int); +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *, X509 *, EVP_PKEY *, + const EVP_MD *, int); +int PKCS7_final(PKCS7 *, BIO *, int); +/* Included verify due to external consumer, see + https://github.com/pyca/cryptography/issues/5433 */ +int PKCS7_verify(PKCS7 *, Cryptography_STACK_OF_X509 *, X509_STORE *, BIO *, + BIO *, int); int PKCS7_type_is_signed(PKCS7 *); int PKCS7_type_is_enveloped(PKCS7 *); From 00ba159220a2dff6ee32d64fcfeff48f742946b4 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 14 Sep 2020 18:40:05 -0500 Subject: [PATCH 964/988] add RSA 4096-bit self-signed CA for some upcoming tests (#5464) --- docs/development/test-vectors.rst | 4 ++ .../x509/custom/ca/rsa_ca.pem | 28 ++++++++++ .../x509/custom/ca/rsa_key.pem | 52 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 vectors/cryptography_vectors/x509/custom/ca/rsa_ca.pem create mode 100644 vectors/cryptography_vectors/x509/custom/ca/rsa_key.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index 212f0e847e18..6146c9c139b9 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -109,6 +109,8 @@ Custom asymmetric vectors * ``x509/custom/ca/ca_key.pem`` - An unencrypted PCKS8 ``secp256r1`` key. It is the private key for the certificate ``x509/custom/ca/ca.pem``. This key is encoded in several of the PKCS12 custom vectors. +* ``x509/custom/ca/rsa_key.pem`` - An unencrypted PCKS8 4096 bit RSA key. It is + the private key for the certificate ``x509/custom/ca/rsa_ca.pem``. * ``asymmetric/EC/compressed_points.txt`` - Contains compressed public points generated using OpenSSL. * ``asymmetric/X448/x448-pkcs8-enc.pem`` and @@ -414,6 +416,8 @@ Custom X.509 Vectors * ``rsa_pss.pem`` - A certificate with an RSA PSS signature. * ``root-ed448.pem`` - An ``ed448`` self-signed CA certificate using ``ed448-pkcs8.pem`` as key. +* ``ca/rsa_ca.pem`` - A self-signed RSA certificate with ``basicConstraints`` + set to true. Its private key is ``ca/rsa_key.pem``. Custom X.509 Request Vectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/vectors/cryptography_vectors/x509/custom/ca/rsa_ca.pem b/vectors/cryptography_vectors/x509/custom/ca/rsa_ca.pem new file mode 100644 index 000000000000..089bcce10e72 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/ca/rsa_ca.pem @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIExzCCAq+gAwIBAgIJAOcS06ClbtbJMA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV +BAMMD2NyeXB0b2dyYXBoeSBDQTAeFw0yMDA5MTQyMTQwNDJaFw00ODAxMzEyMTQw +NDJaMBoxGDAWBgNVBAMMD2NyeXB0b2dyYXBoeSBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANBIheRc1HT4MzV5GvUbDk9CFU6DTomRApNqRmizriRq +m6OY4Ht3d71BXog6/IBkqAnZ4/XJQ40G4sVDb52k11oPvfJ/F5pc+6UqPBL+QGzY +GkJoubAqXFpI6ow0qayFNQLv0T9o4yh0QQOoGvgCmv91qmitLrZNXu4U9S76G+Di +GST+QyMkMxj+VsGRsRRBufV1urcnvFWjU6Q2+cr2cp0mMAG96NTyIskYiJ8vL03W +z4DX4klO4X47fPmDnU/OMn4SbvMZ896j1L0J04S+uVThTkxQWcFcqXhX5qM8kzcj +JUmybFlbf150j3WiucW48K/j7fJ0x9q3iUo4Gva0coScglJWcgo/BBCwFDw8NVba +7npxSRMiaS3qTv0dEFcRnvByc+7hyGxxlWdTE9tHisUI1eZVk9P9ziqNOZKscY8Z +X1+/C4M9X69Y7A8I74F5dO27IRycEgOrSo2z1NhfSwbqJr9a2TBtRsFinn8rjKBI +zNn0E5p9jO1WjxtkcjHfXXpLN8FFMvoYI9l/K+ZWDm9sboaF8jrgozSc004AFemA +H79mmCGVRKXn1vDAo4DLC6p3NiBFYQcYbW9V+beGD6srsF6xJtuY/UwtPROLWSzu +CCrZ/4BlmpNsR0ehIFFvzEKjX6rR2yp3YKlguDbMBMKMpfSGxAFwcZ7OiaxR20UH +AgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBADSveDS4 +y2V/N6Li2n9ChGNdCMr/45M0cl+GpL55aA36AWYMRLv0wip7MWV3yOj4mkjGBlTE +awKHH1FtetsE6B4a7M2hHhOXyXE60uUdptEx6ckGrJ1iyqu5cQUX1P+VnXbmOxfF +bl+Ugzjbgirx239rA4ezkDRuOvKcCbDOFV/gw3ZHfJ/IQeRXIQRl/y51wcnFUvFM +JEESYiijeDbEcY8r1/phmVQL0CO7WLMmTxlFj4X/TR3MTZWJQIap9GiLs5+n3QiO +jsZ3GuFOomB8oTebYkXniwbNu5hgLP/seRQzGA7B9VDZryAhCtvGgjtQh0eW2Qxt +sgmDJGOPKnKT3O5U0v3+IPLEYpe8JSzgAhhh6H1rAJRUNwP2gRcO4eOUJSkdl218 +fRNT0ILzosuWxwprER9ciMQF8q0JJKMhcfHRMH0S5mWVJAIkj68KY05oCy2zNyYa +oruopKSWXe0Bzr40znm40P7xIkui2BGQMlDPpbCaEfLsLqyctfbdmMlxac/QgIfY +TltrbqmI3MNy5uqGViGFpWPCB+kD8EsJF9nlKJXlu/i55qgUr/2/2CdeWlZDBP8A +1fdzmpYpWnwhE0KobzLS2z3AwDxiY/RSWUfypLZA0K/lpaEtYB6UHMDZ0/8WqgZV +gNucCuty0cA4Kf7eX1TlAKVwH8hTkVmJc2rX +-----END CERTIFICATE----- diff --git a/vectors/cryptography_vectors/x509/custom/ca/rsa_key.pem b/vectors/cryptography_vectors/x509/custom/ca/rsa_key.pem new file mode 100644 index 000000000000..97e39a501f20 --- /dev/null +++ b/vectors/cryptography_vectors/x509/custom/ca/rsa_key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDQSIXkXNR0+DM1 +eRr1Gw5PQhVOg06JkQKTakZos64kapujmOB7d3e9QV6IOvyAZKgJ2eP1yUONBuLF +Q2+dpNdaD73yfxeaXPulKjwS/kBs2BpCaLmwKlxaSOqMNKmshTUC79E/aOModEED +qBr4Apr/daporS62TV7uFPUu+hvg4hkk/kMjJDMY/lbBkbEUQbn1dbq3J7xVo1Ok +NvnK9nKdJjABvejU8iLJGIifLy9N1s+A1+JJTuF+O3z5g51PzjJ+Em7zGfPeo9S9 +CdOEvrlU4U5MUFnBXKl4V+ajPJM3IyVJsmxZW39edI91ornFuPCv4+3ydMfat4lK +OBr2tHKEnIJSVnIKPwQQsBQ8PDVW2u56cUkTImkt6k79HRBXEZ7wcnPu4chscZVn +UxPbR4rFCNXmVZPT/c4qjTmSrHGPGV9fvwuDPV+vWOwPCO+BeXTtuyEcnBIDq0qN +s9TYX0sG6ia/WtkwbUbBYp5/K4ygSMzZ9BOafYztVo8bZHIx3116SzfBRTL6GCPZ +fyvmVg5vbG6GhfI64KM0nNNOABXpgB+/ZpghlUSl59bwwKOAywuqdzYgRWEHGG1v +Vfm3hg+rK7BesSbbmP1MLT0Ti1ks7ggq2f+AZZqTbEdHoSBRb8xCo1+q0dsqd2Cp +YLg2zATCjKX0hsQBcHGezomsUdtFBwIDAQABAoICAQDH6YQRvwPwzTWhkn7MWU6v +xjbbJ+7e3T9CrNOttSBlNanzKU31U6KrFS4dxbgLqBEde3Rwud/LYZuRSPu9rLVC +bS+crF3EPJEQY2xLspu1nOn/abMoolAIHEp7jiR5QVWzXulRWmQFtSed0eEowJ9y +qMaKOAdI1RRToev/TfIqM/l8Z0ubVChzSdONcUAsuDU7ouc22r3K2Lv0Nwwkwc0a +hse3NEdg9JNsvs6LM2fM52w9N3ircjm+xmxatPft3HTcSucREIzg2hDb7K2HkOQj +0ykq2Eh97ml+56eocADBAEvO46FZVxf2WhxEBY8Xdz4VJMmDWJFmnZj5ksZWmrX6 +U5BfFY7DZvE2EpoZ5ph1Fm6dcXrJFkaZEyJLlzFKehXMipVenjCanIPpEEUvIz+p +m0QVoNJRj/GcNyIEZ0BCXedBOUWU4XE1pG4r6oZqwUvcjsVrqXP5kbJMVybiS6Kd +6T8ve+4qsn3ZvGRVKjInqf2WI0Wvum2sTF+4OAkYvFel9dKNjpYnnj4tLFc/EKWz +9+pE/Zz5fMOyMD9qXM6bdVkPjWjy1vXmNW4qFCZljrb395hTvsAPMsO6bbAM+lu6 +YcdOAf8k7awTb79kPMrPcbCygyKSGN9C9T3a/Nhrbr3TPi9SD9hC5Q8bL9uSHcR2 +hgRQcApxsfDRrGwy2lheEQKCAQEA/Hrynao+k6sYtlDc/ueCjb323EzsuhOxPqUZ +fKtGeFkJzKuaKTtymasvVpAAqJBEhTALrptGWlJQ0Y/EVaPpZ9pmk791EWNXdXsX +wwufbHxm6K9aOeogev8cd+B/9wUAQPQVotyRzCcOfbVe7t81cBNktqam5Zb9Y4Zr +qu63gBB1UttdmIF5qitl3JcFztlBjiza2UrqgVdKE+d9vLR84IBRy3dyQIOi6C1c +y37GNgObjx8ZcUVV54/KgvoVvDkvN6TEbUdC9eQz7FW7DA7MMVqyDvWZrSjBzVhK +2bTrd+Pi6S4n/ETvA6XRufHC8af4bdE2hzuq5VZO1kkgH37djwKCAQEA0y/YU0b4 +vCYpZ1MNhBFI6J9346DHD55Zu5dWFRqNkC0PiO6xEMUaUMbG4gxkiQPNT5WvddQs +EbRQTnd4FFdqB7XWoH+wERN7zjbT+BZVrHVC4gxEEy33s5oXGn7/ATxaowo7I4oq +15MwgZu3hBNxVUtuePZ6D9/ePNGOGOUtdMRrusmVX7gZEXxwvlLJXyVepl2V4JV1 +otI8EZCcoRhSfeYNEs4VhN0WmfMSV7ge0eFfVb6Lb+6PCcasYED8S0tBN2vjzvol +zCMv8skPATm7SopqBDoBPcXCHwN/gUFXHf/lrvE6bbeX1ZMxnRYKdQLLNYyQK9cr +nCUJXuNM21tVCQKCAQBapCkFwWDF0t8EVPOB78tG57QAUv2JsBgpzUvhHfwmqJCE +Efc+ZkE2Oea8xOX3nhN7XUxUWxpewr6Q/XQW6smYpye8UzfMDkYPvylAtKN/Zwnq +70kNEainf37Q6qAGJp14tCgwV89f44WoS7zRNQESQ2QczqeMNTCy0kdFDn6CU2ZL +YMWxQopTNVFUaEOFhympySCoceTOmm/VxX22iXVrg6XZzgAOeTO69s4hoFm4eoMW +Vqvjpmi4wT6K1w2GjWEOMPDz6ml3rX2WkxCbu5RDA7R4+mM5bzBkcBYvImyGliGY +ZSGlx3mnbZhlkQ3Tg+IESt+wnRM1Uk7rT0VhCUKxAoIBABWYuPibM2iaRnWoiqNM +2TXgyPPgRzsTqH2ElmsGEiACW6pXLohWf8Bu83u+ZLGWT/Kpjg3wqqkM1YGQuhjq +b49mSxKSvECiy3BlLvwZ3J0MSNCxDG0hsEkPovk0r4NC1soBi9awlH0DMlyuve+l +xVtBoYSBQC5LaICztWJaXXGpfJLXdo0ZWIbvQOBVuv4d5jYBMAiNgEAsW7Q4I6xd +vmHdmsyngo/ZxCvuLZwG2jAAai1slPnXXY1UYeBeBO72PS8bu2o5LpBXsNmVMhGg +A8U1rm3MOMBGbvmY8/sV4YDR4H0pch4yPja7HMHBtUQOCxXoz/2LvYv0RacMe5mb +F3ECggEAWxQZnT8pObxKrISZpHSKi54VxuLYbemS63Tdr4HE/KuiFAvbM6AeZOki +jbiMnqrCTOhJRS/i9HV78zSxRZZyVm961tnsjqMyaamX/S4yD7v3Vzu1mfsdVCa2 +Sl+JUUxsEgs/G3Fu6I/0TsCSn/HgNLM8b3f8TDkbpnOqKX165ddojXqSCfxjuYau +Szih/+jF1dz2/zBye1ARkLRdY/SzlzGl0cVn8bfkE0YEde7wvQ624Biy7r9i1o40 +7cy/8EQBR2FcXpOAZ7UgOqgGLNhXnd4FPsX4ldKOf5De8FErQOFirJ8pCUxFGr0U +fDWXtBuybAb5u+ZaVwHgqaaPCkKkVQ== +-----END PRIVATE KEY----- From c61f24bb4df584bd3a2fb640298dad4bd6351ecd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 14 Sep 2020 23:05:14 -0500 Subject: [PATCH 965/988] add prelim python 3.9 CI (#5466) * add prelim python 3.9 CI * do we need v2? --- .github/workflows/ci.yml | 6 ++++-- .travis.yml | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3f514c1c5ba..afac37aaf956 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,11 +18,12 @@ jobs: - {VERSION: "2.7", TOXENV: "py27", EXTRA_CFLAGS: ""} - {VERSION: "3.5", TOXENV: "py35", EXTRA_CFLAGS: ""} - {VERSION: "3.8", TOXENV: "py38", EXTRA_CFLAGS: "-DUSE_OSRANDOM_RNG_FOR_TESTING"} + - {VERSION: "3.9.0-rc.1", TOXENV: "py39"} name: "Python ${{ matrix.PYTHON.VERSION }} on macOS" steps: - uses: actions/checkout@master - name: Setup python - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON.VERSION }} @@ -63,11 +64,12 @@ jobs: - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019", CL_FLAGS: ""} - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019", CL_FLAGS: ""} - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019", CL_FLAGS: "/D USE_OSRANDOM_RNG_FOR_TESTING"} + - {VERSION: "3.9.0-rc.1", TOXENV: "py39", MSVC_VERSION: "2019", CL_FLAGS: ""} name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" steps: - uses: actions/checkout@master - name: Setup python - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.PYTHON.VERSION }} architecture: ${{ matrix.WINDOWS.ARCH }} diff --git a/.travis.yml b/.travis.yml index fca538be18b9..b2d5ba949785 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,8 @@ matrix: # Setting 'python' is just to make travis's UI a bit prettier - python: 3.6 env: TOXENV=py36 + - python: 3.9-dev + env: TOXENV=py39 # Travis lists available Pythons (including PyPy) by arch and distro here: # https://docs.travis-ci.com/user/languages/python/#python-versions - python: pypy2.7-7.3.1 From 20c0388086b4eec91fdf1f9fd9535f4c741e4851 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 19 Sep 2020 18:07:26 -0500 Subject: [PATCH 966/988] smime signer support (#5465) * smime signer support * fix ed25519 check * change some wording * python 2.7... * review feedback * s/secure/signed * do some verification in the tests * review feedback * doc return value --- CHANGELOG.rst | 2 + docs/hazmat/primitives/index.rst | 1 + docs/hazmat/primitives/smime.rst | 128 +++++ src/_cffi_src/openssl/pkcs7.py | 1 + .../hazmat/backends/openssl/backend.py | 62 ++- src/cryptography/hazmat/primitives/smime.py | 109 ++++ tests/hazmat/primitives/test_smime.py | 518 ++++++++++++++++++ 7 files changed, 820 insertions(+), 1 deletion(-) create mode 100644 docs/hazmat/primitives/smime.rst create mode 100644 src/cryptography/hazmat/primitives/smime.py create mode 100644 tests/hazmat/primitives/test_smime.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 60d8b6182174..1c8925803e22 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,8 @@ Changelog * Support for OpenSSL 1.0.2 has been removed. Users on older version of OpenSSL will need to upgrade. +* Added basic support for SMIME signing via + :class:`~cryptography.hazmat.primitives.smime.SMIMESignatureBuilder`. .. _v3-1: diff --git a/docs/hazmat/primitives/index.rst b/docs/hazmat/primitives/index.rst index 72e5b26ce33d..bbe4418e7c18 100644 --- a/docs/hazmat/primitives/index.rst +++ b/docs/hazmat/primitives/index.rst @@ -14,5 +14,6 @@ Primitives mac/index cryptographic-hashes symmetric-encryption + smime padding twofactor diff --git a/docs/hazmat/primitives/smime.rst b/docs/hazmat/primitives/smime.rst new file mode 100644 index 000000000000..556dd9b55bad --- /dev/null +++ b/docs/hazmat/primitives/smime.rst @@ -0,0 +1,128 @@ +.. hazmat:: + +S/MIME +====== + +.. module:: cryptography.hazmat.primitives.smime + +.. testsetup:: + + ca_key = b""" + -----BEGIN PRIVATE KEY----- + MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgA8Zqz5vLeR0ePZUe + jBfdyMmnnI4U5uAJApWTsMn/RuWhRANCAAQY/8+7+Tm49d3D7sBAiwZ1BqtPzdgs + UiROH+AQRme1XxW5Yr07zwxvvhr3tKEPtLnLboazUPlsUb/Bgte+xfkF + -----END PRIVATE KEY----- + """.strip() + + ca_cert = b""" + -----BEGIN CERTIFICATE----- + MIIBUTCB96ADAgECAgIDCTAKBggqhkjOPQQDAjAnMQswCQYDVQQGEwJVUzEYMBYG + A1UEAwwPY3J5cHRvZ3JhcGh5IENBMB4XDTE3MDEwMTEyMDEwMFoXDTM4MTIzMTA4 + MzAwMFowJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD2NyeXB0b2dyYXBoeSBDQTBZ + MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBj/z7v5Obj13cPuwECLBnUGq0/N2CxS + JE4f4BBGZ7VfFblivTvPDG++Gve0oQ+0uctuhrNQ+WxRv8GC177F+QWjEzARMA8G + A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANES742XWm64tkGnz8Dn + pG6u2lHkZFQr3oaVvPcemvlbAiEA0WGGzmYx5C9UvfXIK7NEziT4pQtyESE0uRVK + Xw4nMqk= + -----END CERTIFICATE----- + """.strip() + + +S/MIME provides a method to send and receive signed MIME messages. It is +commonly used in email. S/MIME has multiple versions, but this +module implements a subset of :rfc:`2632`, also known as S/MIME Version 3. + + +.. class:: SMIMESignatureBuilder + + .. versionadded:: 3.2 + + .. doctest:: + + >>> from cryptography.hazmat.primitives import hashes, serialization, smime + >>> from cryptography import x509 + >>> cert = x509.load_pem_x509_certificate(ca_cert) + >>> key = serialization.load_pem_private_key(ca_key, None) + >>> options = [smime.SMIMEOptions.DetachedSignature] + >>> smime.SMIMESignatureBuilder().set_data( + ... b"data to sign" + ... ).add_signer( + ... cert, key, hashes.SHA256() + ... ).sign( + ... serialization.Encoding.PEM, options + ... ) + b'...' + + .. method:: set_data(data) + + :param data: The data to be hashed and signed. + :type data: :term:`bytes-like` + + .. method:: add_signer(certificate, private_key, hash_algorithm) + + :param certificate: The :class:`~cryptography.x509.Certificate`. + + :param private_key: The + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + associated with the certificate provided. + + :param hash_algorithm: The + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that + will be used to generate the signature. This must be an instance of + :class:`~cryptography.hazmat.primitives.hashes.SHA1`, + :class:`~cryptography.hazmat.primitives.hashes.SHA224`, + :class:`~cryptography.hazmat.primitives.hashes.SHA256`, + :class:`~cryptography.hazmat.primitives.hashes.SHA384`, or + :class:`~cryptography.hazmat.primitives.hashes.SHA512`. + + .. method:: sign(encoding, options, backend=None) + + :param encoding: :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` + or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`. + + :param options: A list of :class:`~cryptography.hazmat.primitives.smime.SMIMEOptions`. + + :return bytes: The signed S/MIME message. + + :param backend: An optional backend. + + +.. class:: SMIMEOptions + + .. versionadded:: 3.2 + + An enumeration of options for S/MIME signature creation. + + .. attribute:: Text + + The text option adds ``text/plain`` headers to the S/MIME message when + serializing to + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`. + This option is disallowed with ``DER`` serialization. + + .. attribute:: Binary + + S/MIME signing normally converts line endings (LF to CRLF). When + passing this option the data will not be converted. + + .. attribute:: DetachedSignature + + Don't embed the signed data within the ASN.1. When signing with + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` this + also results in the data being added as clear text before the + PEM encoded structure. + + .. attribute:: NoCapabilities + + S/MIME structures contain a ``MIMECapabilities`` section inside the + ``authenticatedAttributes``. Passing this as an option removes + ``MIMECapabilities``. + + .. attribute:: NoAttributes + + S/MIME structures contain an ``authenticatedAttributes`` section. + Passing this as an option removes that section. Note that if you + pass ``NoAttributes`` you can't pass ``NoCapabilities`` since + ``NoAttributes`` removes ``MIMECapabilities`` and more. diff --git a/src/_cffi_src/openssl/pkcs7.py b/src/_cffi_src/openssl/pkcs7.py index 72f9c2130246..1878ec59dc15 100644 --- a/src/_cffi_src/openssl/pkcs7.py +++ b/src/_cffi_src/openssl/pkcs7.py @@ -67,6 +67,7 @@ https://github.com/pyca/cryptography/issues/5433 */ int PKCS7_verify(PKCS7 *, Cryptography_STACK_OF_X509 *, X509_STORE *, BIO *, BIO *, int); +PKCS7 *SMIME_read_PKCS7(BIO *, BIO **); int PKCS7_type_is_signed(PKCS7 *); int PKCS7_type_is_enveloped(PKCS7 *); diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 97c7fd054495..f7d6a47c7a9c 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -115,7 +115,7 @@ _RevokedCertificate, ) from cryptography.hazmat.bindings.openssl import binding -from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives import hashes, serialization, smime from cryptography.hazmat.primitives.asymmetric import ( dsa, ec, @@ -2690,6 +2690,66 @@ def _load_pkcs7_certificates(self, p7): return certs + def smime_sign(self, builder, encoding, options): + bio = self._bytes_to_bio(builder._data) + init_flags = self._lib.PKCS7_PARTIAL + final_flags = 0 + + if smime.SMIMEOptions.DetachedSignature in options: + # Don't embed the data in the PKCS7 structure + init_flags |= self._lib.PKCS7_DETACHED + final_flags |= self._lib.PKCS7_DETACHED + + # This just inits a structure for us. However, there + # are flags we need to set, joy. + p7 = self._lib.PKCS7_sign( + self._ffi.NULL, + self._ffi.NULL, + self._ffi.NULL, + self._ffi.NULL, + init_flags, + ) + self.openssl_assert(p7 != self._ffi.NULL) + p7 = self._ffi.gc(p7, self._lib.PKCS7_free) + signer_flags = 0 + # These flags are configurable on a per-signature basis + # but we've deliberately chosen to make the API only allow + # setting it across all signatures for now. + if smime.SMIMEOptions.NoCapabilities in options: + signer_flags |= self._lib.PKCS7_NOSMIMECAP + elif smime.SMIMEOptions.NoAttributes in options: + signer_flags |= self._lib.PKCS7_NOATTR + for certificate, private_key, hash_algorithm in builder._signers: + md = self._evp_md_non_null_from_algorithm(hash_algorithm) + p7signerinfo = self._lib.PKCS7_sign_add_signer( + p7, certificate._x509, private_key._evp_pkey, md, signer_flags + ) + self.openssl_assert(p7signerinfo != self._ffi.NULL) + + for option in options: + # DetachedSignature, NoCapabilities, and NoAttributes are already + # handled so we just need to check these last two options. + if option is smime.SMIMEOptions.Text: + final_flags |= self._lib.PKCS7_TEXT + elif option is smime.SMIMEOptions.Binary: + final_flags |= self._lib.PKCS7_BINARY + + bio_out = self._create_mem_bio_gc() + if encoding is serialization.Encoding.PEM: + # This finalizes the structure + res = self._lib.SMIME_write_PKCS7( + bio_out, p7, bio.bio, final_flags + ) + else: + assert encoding is serialization.Encoding.DER + # We need to call finalize here becauase i2d_PKCS7_bio does not + # finalize. + res = self._lib.PKCS7_final(p7, bio.bio, final_flags) + self.openssl_assert(res == 1) + res = self._lib.i2d_PKCS7_bio(bio_out, p7) + self.openssl_assert(res == 1) + return self._read_mem_bio(bio_out) + class GetCipherByName(object): def __init__(self, fmt): diff --git a/src/cryptography/hazmat/primitives/smime.py b/src/cryptography/hazmat/primitives/smime.py new file mode 100644 index 000000000000..538ba6a00012 --- /dev/null +++ b/src/cryptography/hazmat/primitives/smime.py @@ -0,0 +1,109 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from enum import Enum + +from cryptography import x509 +from cryptography.hazmat.backends import _get_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ec, rsa +from cryptography.utils import _check_byteslike + + +class SMIMESignatureBuilder(object): + def __init__(self, data=None, signers=[]): + self._data = data + self._signers = signers + + def set_data(self, data): + _check_byteslike("data", data) + if self._data is not None: + raise ValueError("data may only be set once") + + return SMIMESignatureBuilder(data, self._signers) + + def add_signer(self, certificate, private_key, hash_algorithm): + if not isinstance( + hash_algorithm, + ( + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + ), + ): + raise TypeError( + "hash_algorithm must be one of hashes.SHA1, SHA224, " + "SHA256, SHA384, or SHA512" + ) + if not isinstance(certificate, x509.Certificate): + raise TypeError("certificate must be a x509.Certificate") + + if not isinstance( + private_key, (rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey) + ): + raise TypeError("Only RSA & EC keys are supported at this time.") + + return SMIMESignatureBuilder( + self._data, + self._signers + [(certificate, private_key, hash_algorithm)], + ) + + def sign(self, encoding, options, backend=None): + if len(self._signers) == 0: + raise ValueError("Must have at least one signer") + if self._data is None: + raise ValueError("You must add data to sign") + options = list(options) + if not all(isinstance(x, SMIMEOptions) for x in options): + raise ValueError("options must be from the SMIMEOptions enum") + if ( + encoding is not serialization.Encoding.PEM + and encoding is not serialization.Encoding.DER + ): + raise ValueError("Must be PEM or DER from the Encoding enum") + + # Text is a meaningless option unless it is accompanied by + # DetachedSignature + if ( + SMIMEOptions.Text in options + and SMIMEOptions.DetachedSignature not in options + ): + raise ValueError( + "When passing the Text option you must also pass " + "DetachedSignature" + ) + + if ( + SMIMEOptions.Text in options + and encoding is serialization.Encoding.DER + ): + raise ValueError( + "The Text option does nothing when serializing to DER" + ) + + # No attributes implies no capabilities so we'll error if you try to + # pass both. + if ( + SMIMEOptions.NoAttributes in options + and SMIMEOptions.NoCapabilities in options + ): + raise ValueError( + "NoAttributes is a superset of NoCapabilities. Do not pass " + "both values." + ) + + backend = _get_backend(backend) + return backend.smime_sign(self, encoding, options) + + +class SMIMEOptions(Enum): + Text = "Add text/plain MIME type" + Binary = "Don't translate input data into canonical MIME format" + DetachedSignature = "Don't embed data in the PKCS7 structure" + NoCapabilities = "Don't embed SMIME capabilities" + NoAttributes = "Don't embed authenticatedAttributes" diff --git a/tests/hazmat/primitives/test_smime.py b/tests/hazmat/primitives/test_smime.py new file mode 100644 index 000000000000..c2ff275e0999 --- /dev/null +++ b/tests/hazmat/primitives/test_smime.py @@ -0,0 +1,518 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import os + +import pytest + +from cryptography import x509 +from cryptography.hazmat.primitives import hashes, serialization, smime +from cryptography.hazmat.primitives.asymmetric import ed25519 + +from .utils import load_vectors_from_file + + +# We have no public verification API and won't be adding one until we get +# some requirements from users so this function exists to give us basic +# verification for the signing tests. +def _smime_verify(encoding, sig, msg, certs, options, backend): + sig_bio = backend._bytes_to_bio(sig) + if encoding is serialization.Encoding.DER: + p7 = backend._lib.d2i_PKCS7_bio(sig_bio.bio, backend._ffi.NULL) + else: + p7 = backend._lib.SMIME_read_PKCS7(sig_bio.bio, backend._ffi.NULL) + backend.openssl_assert(p7 != backend._ffi.NULL) + p7 = backend._ffi.gc(p7, backend._lib.PKCS7_free) + flags = 0 + for option in options: + if option is smime.SMIMEOptions.Text: + flags |= backend._lib.PKCS7_TEXT + store = backend._lib.X509_STORE_new() + backend.openssl_assert(store != backend._ffi.NULL) + store = backend._ffi.gc(store, backend._lib.X509_STORE_free) + for cert in certs: + res = backend._lib.X509_STORE_add_cert(store, cert._x509) + backend.openssl_assert(res == 1) + if msg is None: + res = backend._lib.PKCS7_verify( + p7, + backend._ffi.NULL, + store, + backend._ffi.NULL, + backend._ffi.NULL, + flags, + ) + else: + msg_bio = backend._bytes_to_bio(msg) + res = backend._lib.PKCS7_verify( + p7, backend._ffi.NULL, store, msg_bio.bio, backend._ffi.NULL, flags + ) + backend.openssl_assert(res == 1) + + +def _load_cert_key(): + key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca_key.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None + ), + mode="rb", + ) + cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate(pemfile.read()), + mode="rb", + ) + return cert, key + + +class TestSMIMEBuilder(object): + def test_invalid_data(self): + builder = smime.SMIMESignatureBuilder() + with pytest.raises(TypeError): + builder.set_data(u"not bytes") + + def test_set_data_twice(self): + builder = smime.SMIMESignatureBuilder().set_data(b"test") + with pytest.raises(ValueError): + builder.set_data(b"test") + + def test_sign_no_signer(self): + builder = smime.SMIMESignatureBuilder().set_data(b"test") + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, []) + + def test_sign_no_data(self): + cert, key = _load_cert_key() + builder = smime.SMIMESignatureBuilder().add_signer( + cert, key, hashes.SHA256() + ) + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, []) + + def test_unsupported_hash_alg(self): + cert, key = _load_cert_key() + with pytest.raises(TypeError): + smime.SMIMESignatureBuilder().add_signer( + cert, key, hashes.SHA512_256() + ) + + def test_not_a_cert(self): + cert, key = _load_cert_key() + with pytest.raises(TypeError): + smime.SMIMESignatureBuilder().add_signer( + b"notacert", key, hashes.SHA256() + ) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Does not support ed25519.", + ) + def test_unsupported_key_type(self, backend): + cert, _ = _load_cert_key() + key = ed25519.Ed25519PrivateKey.generate() + with pytest.raises(TypeError): + smime.SMIMESignatureBuilder().add_signer( + cert, key, hashes.SHA256() + ) + + def test_sign_invalid_options(self): + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, [b"invalid"]) + + def test_sign_invalid_encoding(self): + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.Raw, []) + + def test_sign_invalid_options_text_no_detached(self): + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + options = [smime.SMIMEOptions.Text] + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, options) + + def test_sign_invalid_options_text_der_encoding(self): + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + options = [ + smime.SMIMEOptions.Text, + smime.SMIMEOptions.DetachedSignature, + ] + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.DER, options) + + def test_sign_invalid_options_no_attrs_and_no_caps(self): + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + options = [ + smime.SMIMEOptions.NoAttributes, + smime.SMIMEOptions.NoCapabilities, + ] + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, options) + + def test_smime_sign_detached(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + options = [smime.SMIMEOptions.DetachedSignature] + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig = builder.sign(serialization.Encoding.PEM, options) + sig_binary = builder.sign(serialization.Encoding.DER, options) + # We don't have a generic ASN.1 parser available to us so we instead + # will assert on specific byte sequences being present based on the + # parameters chosen above. + assert b"sha-256" in sig + # Detached signature means that the signed data is *not* embedded into + # the PKCS7 structure itself, but is present in the PEM serialization + # as a separate section before the PKCS7 data. So we should expect to + # have data in sig but not in sig_binary + assert data in sig + _smime_verify( + serialization.Encoding.PEM, sig, data, [cert], options, backend + ) + assert data not in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + data, + [cert], + options, + backend, + ) + + def test_sign_byteslike(self): + data = bytearray(b"hello world") + cert, key = _load_cert_key() + options = [smime.SMIMEOptions.DetachedSignature] + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig = builder.sign(serialization.Encoding.PEM, options) + assert bytes(data) in sig + + @pytest.mark.parametrize( + ("hash_alg", "expected_value"), + [ + (hashes.SHA1(), b"\x06\x05+\x0e\x03\x02\x1a"), + (hashes.SHA256(), b"\x06\t`\x86H\x01e\x03\x04\x02\x01"), + (hashes.SHA384(), b"\x06\t`\x86H\x01e\x03\x04\x02\x02"), + (hashes.SHA512(), b"\x06\t`\x86H\x01e\x03\x04\x02\x03"), + ], + ) + def test_smime_sign_alternate_digests_der( + self, hash_alg, expected_value, backend + ): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hash_alg) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + assert expected_value in sig + _smime_verify( + serialization.Encoding.DER, sig, None, [cert], options, backend + ) + + @pytest.mark.parametrize( + ("hash_alg", "expected_value"), + [ + (hashes.SHA1(), b"sha1"), + (hashes.SHA256(), b"sha-256"), + (hashes.SHA384(), b"sha-384"), + (hashes.SHA512(), b"sha-512"), + ], + ) + def test_smime_sign_alternate_digests_detached_pem( + self, hash_alg, expected_value + ): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hash_alg) + ) + options = [smime.SMIMEOptions.DetachedSignature] + sig = builder.sign(serialization.Encoding.PEM, options) + # When in detached signature mode the hash algorithm is stored as a + # byte string like "sha-384". + assert expected_value in sig + + def test_smime_sign_attached(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + options = [] + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig_binary = builder.sign(serialization.Encoding.DER, options) + # When not passing detached signature the signed data is embedded into + # the PKCS7 structure itself + assert data in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_binary(self, backend): + data = b"hello\nworld" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + options = [] + sig_no_binary = builder.sign(serialization.Encoding.DER, options) + sig_binary = builder.sign( + serialization.Encoding.DER, [smime.SMIMEOptions.Binary] + ) + # Binary prevents translation of LF to CR+LF (SMIME canonical form) + # so data should not be present in sig_no_binary, but should be present + # in sig_binary + assert data not in sig_no_binary + _smime_verify( + serialization.Encoding.DER, + sig_no_binary, + None, + [cert], + options, + backend, + ) + assert data in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_smime_canonicalization(self, backend): + data = b"hello\nworld" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [] + sig_binary = builder.sign(serialization.Encoding.DER, options) + # LF gets converted to CR+LF (SMIME canonical form) + # so data should not be present in the sig + assert data not in sig_binary + assert b"hello\r\nworld" in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_text(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [ + smime.SMIMEOptions.Text, + smime.SMIMEOptions.DetachedSignature, + ] + sig_pem = builder.sign(serialization.Encoding.PEM, options) + # The text option adds text/plain headers to the S/MIME message + # These headers are only relevant in PEM mode, not binary, which is + # just the PKCS7 structure itself. + assert b"text/plain" in sig_pem + # When passing the Text option the header is prepended so the actual + # signed data is this. + signed_data = b"Content-Type: text/plain\r\n\r\nhello world" + _smime_verify( + serialization.Encoding.PEM, + sig_pem, + signed_data, + [cert], + options, + backend, + ) + + def test_smime_sign_no_capabilities(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [smime.SMIMEOptions.NoCapabilities] + sig_binary = builder.sign(serialization.Encoding.DER, options) + # NoCapabilities removes the SMIMECapabilities attribute from the + # PKCS7 structure. This is an ASN.1 sequence with the + # OID 1.2.840.113549.1.9.15. It does NOT remove all authenticated + # attributes, so we verify that by looking for the signingTime OID. + + # 1.2.840.113549.1.9.15 SMIMECapabilities as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary + # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_no_attributes(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [smime.SMIMEOptions.NoAttributes] + sig_binary = builder.sign(serialization.Encoding.DER, options) + # NoAttributes removes all authenticated attributes, so we shouldn't + # find SMIMECapabilities or signingTime. + + # 1.2.840.113549.1.9.15 SMIMECapabilities as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary + # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" not in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_multiple_signers(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + rsa_key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_key.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None + ), + mode="rb", + ) + rsa_cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read() + ), + mode="rb", + ) + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA512()) + .add_signer(rsa_cert, rsa_key, hashes.SHA512()) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + # There should be three SHA512 OIDs in this structure + assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 3 + _smime_verify( + serialization.Encoding.DER, + sig, + None, + [cert, rsa_cert], + options, + backend, + ) + + def test_multiple_signers_different_hash_algs(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + rsa_key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_key.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None + ), + mode="rb", + ) + rsa_cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read() + ), + mode="rb", + ) + builder = ( + smime.SMIMESignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA384()) + .add_signer(rsa_cert, rsa_key, hashes.SHA512()) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + # There should be two SHA384 and two SHA512 OIDs in this structure + assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x02") == 2 + assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 2 + _smime_verify( + serialization.Encoding.DER, + sig, + None, + [cert, rsa_cert], + options, + backend, + ) From 0b35c5d701f4873b1a6c4fe31a66c4c59db170aa Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 20 Sep 2020 17:49:09 -0400 Subject: [PATCH 967/988] Remove bindings docs (#5469) --- docs/development/c-bindings.rst | 2 +- docs/hazmat/bindings/index.rst | 22 --------------- docs/hazmat/bindings/openssl.rst | 47 -------------------------------- docs/index.rst | 1 - 4 files changed, 1 insertion(+), 71 deletions(-) delete mode 100644 docs/hazmat/bindings/index.rst delete mode 100644 docs/hazmat/bindings/openssl.rst diff --git a/docs/development/c-bindings.rst b/docs/development/c-bindings.rst index 1b58dab6290f..efc21ca0a8f5 100644 --- a/docs/development/c-bindings.rst +++ b/docs/development/c-bindings.rst @@ -5,7 +5,7 @@ C bindings are bindings to C libraries, using cffi_ whenever possible. .. _cffi: https://cffi.readthedocs.io -Bindings live in :py:mod:`cryptography.hazmat.bindings`. +Bindings live in ``cryptography.hazmat.bindings``. When modifying the bindings you will need to recompile the C extensions to test the changes. This can be accomplished with ``pip install -e .`` in the diff --git a/docs/hazmat/bindings/index.rst b/docs/hazmat/bindings/index.rst deleted file mode 100644 index 655f4620d492..000000000000 --- a/docs/hazmat/bindings/index.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. hazmat:: - -Bindings -======== - -.. module:: cryptography.hazmat.bindings - -``cryptography`` aims to provide low-level CFFI based bindings to multiple -native C libraries. These provide no automatic initialization of the library -and may not provide complete wrappers for its API. - -Using these functions directly is likely to require you to be careful in -managing memory allocation, locking and other resources. - - -Individual bindings -------------------- - -.. toctree:: - :maxdepth: 1 - - openssl diff --git a/docs/hazmat/bindings/openssl.rst b/docs/hazmat/bindings/openssl.rst deleted file mode 100644 index bc7ec2d916b6..000000000000 --- a/docs/hazmat/bindings/openssl.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. hazmat:: - -OpenSSL binding -=============== - -.. currentmodule:: cryptography.hazmat.bindings.openssl.binding - -These are `CFFI`_ bindings to the `OpenSSL`_ C library. Cryptography supports -OpenSSL version 1.0.2 and greater. - -.. class:: cryptography.hazmat.bindings.openssl.binding.Binding() - - This is the exposed API for the OpenSSL bindings. It has two public - attributes: - - .. attribute:: ffi - - This is a ``cffi.FFI`` instance. It can be used to allocate and - otherwise manipulate OpenSSL structures. - - .. attribute:: lib - - This is a ``cffi`` library. It can be used to call OpenSSL functions, - and access constants. - - .. classmethod:: init_static_locks - - Enables the best available locking callback for OpenSSL. - See :ref:`openssl-threading`. - -.. _openssl-threading: - -Threading ---------- - -``cryptography`` enables OpenSSLs `thread safety facilities`_ in several -different ways depending on the configuration of your system. For users on -OpenSSL 1.1.0 or newer (including anyone who uses a binary wheel) the OpenSSL -internal locking callbacks are automatically used. Otherwise, we first attempt -to use the callbacks provided by your Python implementation specifically for -OpenSSL. This will work in every case except where ``cryptography`` is linked -against a different version of OpenSSL than the one used by your Python -implementation. For this final case we have a C-based locking callback. - -.. _`CFFI`: https://cffi.readthedocs.io -.. _`OpenSSL`: https://www.openssl.org/ -.. _`thread safety facilities`: https://www.openssl.org/docs/man1.0.2/man3/CRYPTO_THREADID_set_callback.html diff --git a/docs/index.rst b/docs/index.rst index 396ed0b6e9d5..ec3913f41d8c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -68,7 +68,6 @@ hazmat layer only when necessary. exceptions random-numbers hazmat/backends/index - hazmat/bindings/index .. toctree:: :maxdepth: 2 From d473130a64ec50b5ac6f79ad4955c6e07d99c6ff Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 20 Sep 2020 22:19:53 -0400 Subject: [PATCH 968/988] bump to latest libressl point release (#5470) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b2d5ba949785..0c399c4171e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,7 +54,7 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.1.4 - python: 3.8 - env: TOXENV=py38 LIBRESSL=3.2.0 + env: TOXENV=py38 LIBRESSL=3.2.1 - python: 2.7 services: docker From e11ed9bfa96d327f63392e4b9db4c173a751aeb8 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 22 Sep 2020 11:03:01 -0500 Subject: [PATCH 969/988] test against 1.1.1h (#5474) --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0c399c4171e9..51cb8841f43f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,13 +40,13 @@ matrix: - python: 3.8 env: TOXENV=py38 OPENSSL=1.1.0l - python: 2.7 - env: TOXENV=py27 OPENSSL=1.1.1g + env: TOXENV=py27 OPENSSL=1.1.1h - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1g + env: TOXENV=py38 OPENSSL=1.1.1h - python: 3.8 - env: TOXENV=py38 OPENSSL=1.1.1g OPENSSL_CONFIG_FLAGS="no-engine no-rc2 no-srtp no-ct" + env: TOXENV=py38 OPENSSL=1.1.1h OPENSSL_CONFIG_FLAGS="no-engine no-rc2 no-srtp no-ct" - python: 3.8 - env: TOXENV=py38-ssh OPENSSL=1.1.1g + env: TOXENV=py38-ssh OPENSSL=1.1.1h - python: 3.8 env: TOXENV=py38 LIBRESSL=2.9.2 - python: 3.8 @@ -106,7 +106,7 @@ matrix: env: TOXENV=py38 DOCKER=pyca/cryptography-runner-alpine:latest - python: 3.8 - env: TOXENV=docs OPENSSL=1.1.1g + env: TOXENV=docs OPENSSL=1.1.1h addons: apt: packages: @@ -119,7 +119,7 @@ matrix: - python: 3.8 env: DOWNSTREAM=pyopenssl - python: 3.7 - env: DOWNSTREAM=twisted OPENSSL=1.1.1g + env: DOWNSTREAM=twisted OPENSSL=1.1.1h - python: 3.7 env: DOWNSTREAM=paramiko - python: 3.7 From 3268a91c64bbbbea67c919ca59520df97518db6e Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 22 Sep 2020 14:05:02 -0400 Subject: [PATCH 970/988] Forward-port 3.1.1 changelog (#5476) --- CHANGELOG.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1c8925803e22..0a4b5ad4519b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,14 @@ Changelog * Added basic support for SMIME signing via :class:`~cryptography.hazmat.primitives.smime.SMIMESignatureBuilder`. +.. _v3-1-1: + +3.1.1 - 2020-09-22 +~~~~~~~~~~~~~~~~~~ + +* Updated Windows, macOS, and ``manylinux`` wheels to be compiled with + OpenSSL 1.1.1h. + .. _v3-1: 3.1 - 2020-08-26 From 9daa295d83ea6d9809c0da830f71068b1b32cd8c Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 2 Oct 2020 11:05:33 -0400 Subject: [PATCH 971/988] Update windows CI for new GHA syntax (#5477) * Update windows CI for new GHA syntax * Update ci.yml * Update ci.yml * Update ci.yml * Update ci.yml --- .github/workflows/ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afac37aaf956..0450c1a813ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -85,11 +85,12 @@ jobs: - name: Download OpenSSL run: | python .github/workflows/download_openssl.py windows openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} - echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" - echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" - echo "::set-env name=CL::${{ matrix.PYTHON.CL_FLAGS }}" + echo "INCLUDE=C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;$INCLUDE" >> $GITHUB_ENV + echo "LIB=C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;$LIB" >> $GITHUB_ENV + echo "CL=${{ matrix.PYTHON.CL_FLAGS }}" >> $GITHUB_ENV env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash - run: git clone https://github.com/google/wycheproof - run: tox -r -- --color=yes --wycheproof-root=wycheproof From cd6f6b02961239ac3c1290abf8dab03b825a98e5 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Fri, 2 Oct 2020 23:47:49 -0400 Subject: [PATCH 972/988] Update wheel builder for new GHA syntax (#5478) * Update wheel builder for new GHA syntax * Update wheel-builder.yml * Update wheel-builder.yml --- .github/workflows/wheel-builder.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index d8ad49b595b9..ba15dd656a93 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -139,10 +139,11 @@ jobs: - name: Download OpenSSL run: | python .github/workflows/download_openssl.py windows openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }} - echo "::set-env name=INCLUDE::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;%INCLUDE%" - echo "::set-env name=LIB::C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;%LIB%" + echo "INCLUDE=C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/include;$INCLUDE" >> $GITHUB_ENV + echo "LIB=C:/openssl-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.MSVC_VERSION }}/lib;$LIB" >> $GITHUB_ENV env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash - run: python -m pip install -U pip wheel cffi six ipaddress "enum34; python_version < '3'" - run: pip download cryptography==${{ github.event.inputs.version }} --no-deps --no-binary cryptography && tar zxvf cryptography*.tar.gz && mkdir wheelhouse From e74895bffc5590639132a49d9905ef6bff1b0125 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 7 Oct 2020 09:26:05 -0400 Subject: [PATCH 973/988] Update CI for 3.9 release (#5480) --- .github/workflows/ci.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0450c1a813ab..717504a61229 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,8 +17,7 @@ jobs: PYTHON: - {VERSION: "2.7", TOXENV: "py27", EXTRA_CFLAGS: ""} - {VERSION: "3.5", TOXENV: "py35", EXTRA_CFLAGS: ""} - - {VERSION: "3.8", TOXENV: "py38", EXTRA_CFLAGS: "-DUSE_OSRANDOM_RNG_FOR_TESTING"} - - {VERSION: "3.9.0-rc.1", TOXENV: "py39"} + - {VERSION: "3.9", TOXENV: "py39", EXTRA_CFLAGS: "-DUSE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on macOS" steps: - uses: actions/checkout@master @@ -63,8 +62,8 @@ jobs: - {VERSION: "3.5", TOXENV: "py35", MSVC_VERSION: "2019", CL_FLAGS: ""} - {VERSION: "3.6", TOXENV: "py36", MSVC_VERSION: "2019", CL_FLAGS: ""} - {VERSION: "3.7", TOXENV: "py37", MSVC_VERSION: "2019", CL_FLAGS: ""} - - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019", CL_FLAGS: "/D USE_OSRANDOM_RNG_FOR_TESTING"} - - {VERSION: "3.9.0-rc.1", TOXENV: "py39", MSVC_VERSION: "2019", CL_FLAGS: ""} + - {VERSION: "3.8", TOXENV: "py38", MSVC_VERSION: "2019", CL_FLAGS: ""} + - {VERSION: "3.9", TOXENV: "py39", MSVC_VERSION: "2019", CL_FLAGS: "/D USE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" steps: - uses: actions/checkout@master From 27026d37ffde697f76f84c8eb716ff2b8b983110 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 17 Oct 2020 19:49:36 -0400 Subject: [PATCH 974/988] fixed twisted tests (#5489) --- .travis/downstream.d/twisted.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/downstream.d/twisted.sh b/.travis/downstream.d/twisted.sh index 3d45413bbe21..522e763ec3b7 100755 --- a/.travis/downstream.d/twisted.sh +++ b/.travis/downstream.d/twisted.sh @@ -5,7 +5,7 @@ case "${1}" in git clone --depth=1 https://github.com/twisted/twisted cd twisted git rev-parse HEAD - pip install ".[tls,conch,http2]" + pip install ".[all_non_platform]" ;; run) cd twisted From ca622468f7665ddda00b7358d0ba0652beba7a89 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 19 Oct 2020 10:28:09 -0400 Subject: [PATCH 975/988] bumped to latest libressl (#5491) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 51cb8841f43f..29349ed87109 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,7 +54,7 @@ matrix: - python: 3.8 env: TOXENV=py38 LIBRESSL=3.1.4 - python: 3.8 - env: TOXENV=py38 LIBRESSL=3.2.1 + env: TOXENV=py38 LIBRESSL=3.2.2 - python: 2.7 services: docker From 5edf5b828a8ebac030bf8c6f27ec8bf0d008885c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 24 Oct 2020 17:10:25 -0700 Subject: [PATCH 976/988] migrate smime builder to pkcs7 module and rename (#5496) * migrate smime builder to pkcs7 module and rename * missed a rename --- CHANGELOG.rst | 4 +- .../primitives/asymmetric/serialization.rst | 124 +++++ docs/hazmat/primitives/index.rst | 1 - docs/hazmat/primitives/smime.rst | 128 ----- .../hazmat/backends/openssl/backend.py | 16 +- .../hazmat/primitives/serialization/pkcs7.py | 102 ++++ src/cryptography/hazmat/primitives/smime.py | 109 ---- tests/hazmat/primitives/test_pkcs7.py | 505 +++++++++++++++++ tests/hazmat/primitives/test_smime.py | 518 ------------------ 9 files changed, 741 insertions(+), 766 deletions(-) delete mode 100644 docs/hazmat/primitives/smime.rst delete mode 100644 src/cryptography/hazmat/primitives/smime.py delete mode 100644 tests/hazmat/primitives/test_smime.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0a4b5ad4519b..32a6c8522547 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,8 +10,8 @@ Changelog * Support for OpenSSL 1.0.2 has been removed. Users on older version of OpenSSL will need to upgrade. -* Added basic support for SMIME signing via - :class:`~cryptography.hazmat.primitives.smime.SMIMESignatureBuilder`. +* Added basic support for PKCS7 signing (including SMIME) via + :class:`~cryptography.hazmat.primitives.serialization.pkcs7.PKCS7SignatureBuilder`. .. _v3-1-1: diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index 56b2c696ccaa..f3dca471a7f2 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -574,6 +574,130 @@ contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, :raises cryptography.exceptions.UnsupportedAlgorithm: If the PKCS7 data is of a type that is not supported. +.. testsetup:: + + ca_key = b""" + -----BEGIN PRIVATE KEY----- + MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgA8Zqz5vLeR0ePZUe + jBfdyMmnnI4U5uAJApWTsMn/RuWhRANCAAQY/8+7+Tm49d3D7sBAiwZ1BqtPzdgs + UiROH+AQRme1XxW5Yr07zwxvvhr3tKEPtLnLboazUPlsUb/Bgte+xfkF + -----END PRIVATE KEY----- + """.strip() + + ca_cert = b""" + -----BEGIN CERTIFICATE----- + MIIBUTCB96ADAgECAgIDCTAKBggqhkjOPQQDAjAnMQswCQYDVQQGEwJVUzEYMBYG + A1UEAwwPY3J5cHRvZ3JhcGh5IENBMB4XDTE3MDEwMTEyMDEwMFoXDTM4MTIzMTA4 + MzAwMFowJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD2NyeXB0b2dyYXBoeSBDQTBZ + MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBj/z7v5Obj13cPuwECLBnUGq0/N2CxS + JE4f4BBGZ7VfFblivTvPDG++Gve0oQ+0uctuhrNQ+WxRv8GC177F+QWjEzARMA8G + A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANES742XWm64tkGnz8Dn + pG6u2lHkZFQr3oaVvPcemvlbAiEA0WGGzmYx5C9UvfXIK7NEziT4pQtyESE0uRVK + Xw4nMqk= + -----END CERTIFICATE----- + """.strip() + + +.. class:: PKCS7SignatureBuilder + + The PKCS7 signature builder can create both basic PKCS7 signed messages as + well as S/MIME messages, which are commonly used in email. S/MIME has + multiple versions, but this implements a subset of :rfc:`2632`, also known + as S/MIME Version 3. + + .. versionadded:: 3.2 + + .. doctest:: + + >>> from cryptography import x509 + >>> from cryptography.hazmat.primitives import hashes, serialization + >>> from cryptography.hazmat.primitives.serialization import pkcs7 + >>> cert = x509.load_pem_x509_certificate(ca_cert) + >>> key = serialization.load_pem_private_key(ca_key, None) + >>> options = [pkcs7.PKCS7Options.DetachedSignature] + >>> pkcs7.PKCS7SignatureBuilder().set_data( + ... b"data to sign" + ... ).add_signer( + ... cert, key, hashes.SHA256() + ... ).sign( + ... serialization.Encoding.PEM, options + ... ) + b'...' + + .. method:: set_data(data) + + :param data: The data to be hashed and signed. + :type data: :term:`bytes-like` + + .. method:: add_signer(certificate, private_key, hash_algorithm) + + :param certificate: The :class:`~cryptography.x509.Certificate`. + + :param private_key: The + :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey` or + :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` + associated with the certificate provided. + + :param hash_algorithm: The + :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that + will be used to generate the signature. This must be an instance of + :class:`~cryptography.hazmat.primitives.hashes.SHA1`, + :class:`~cryptography.hazmat.primitives.hashes.SHA224`, + :class:`~cryptography.hazmat.primitives.hashes.SHA256`, + :class:`~cryptography.hazmat.primitives.hashes.SHA384`, or + :class:`~cryptography.hazmat.primitives.hashes.SHA512`. + + .. method:: sign(encoding, options, backend=None) + + :param encoding: :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` + or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`. + + :param options: A list of + :class:`~cryptography.hazmat.primitives.serialization.pkcs7.PKCS7Options`. + + :return bytes: The signed PKCS7 message. + + :param backend: An optional backend. + + +.. class:: PKCS7Options + + .. versionadded:: 3.2 + + An enumeration of options for PKCS7 signature creation. + + .. attribute:: Text + + The text option adds ``text/plain`` headers to an S/MIME message when + serializing to + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`. + This option is disallowed with ``DER`` serialization. + + .. attribute:: Binary + + S/MIME signing normally converts line endings (LF to CRLF). When + passing this option the data will not be converted. + + .. attribute:: DetachedSignature + + Don't embed the signed data within the ASN.1. When signing with + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` this + also results in the data being added as clear text before the + PEM encoded structure. + + .. attribute:: NoCapabilities + + PKCS7 structures contain a ``MIMECapabilities`` section inside the + ``authenticatedAttributes``. Passing this as an option removes + ``MIMECapabilities``. + + .. attribute:: NoAttributes + + PKCS7 structures contain an ``authenticatedAttributes`` section. + Passing this as an option removes that section. Note that if you + pass ``NoAttributes`` you can't pass ``NoCapabilities`` since + ``NoAttributes`` removes ``MIMECapabilities`` and more. + Serialization Formats ~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/hazmat/primitives/index.rst b/docs/hazmat/primitives/index.rst index bbe4418e7c18..72e5b26ce33d 100644 --- a/docs/hazmat/primitives/index.rst +++ b/docs/hazmat/primitives/index.rst @@ -14,6 +14,5 @@ Primitives mac/index cryptographic-hashes symmetric-encryption - smime padding twofactor diff --git a/docs/hazmat/primitives/smime.rst b/docs/hazmat/primitives/smime.rst deleted file mode 100644 index 556dd9b55bad..000000000000 --- a/docs/hazmat/primitives/smime.rst +++ /dev/null @@ -1,128 +0,0 @@ -.. hazmat:: - -S/MIME -====== - -.. module:: cryptography.hazmat.primitives.smime - -.. testsetup:: - - ca_key = b""" - -----BEGIN PRIVATE KEY----- - MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgA8Zqz5vLeR0ePZUe - jBfdyMmnnI4U5uAJApWTsMn/RuWhRANCAAQY/8+7+Tm49d3D7sBAiwZ1BqtPzdgs - UiROH+AQRme1XxW5Yr07zwxvvhr3tKEPtLnLboazUPlsUb/Bgte+xfkF - -----END PRIVATE KEY----- - """.strip() - - ca_cert = b""" - -----BEGIN CERTIFICATE----- - MIIBUTCB96ADAgECAgIDCTAKBggqhkjOPQQDAjAnMQswCQYDVQQGEwJVUzEYMBYG - A1UEAwwPY3J5cHRvZ3JhcGh5IENBMB4XDTE3MDEwMTEyMDEwMFoXDTM4MTIzMTA4 - MzAwMFowJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD2NyeXB0b2dyYXBoeSBDQTBZ - MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBj/z7v5Obj13cPuwECLBnUGq0/N2CxS - JE4f4BBGZ7VfFblivTvPDG++Gve0oQ+0uctuhrNQ+WxRv8GC177F+QWjEzARMA8G - A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANES742XWm64tkGnz8Dn - pG6u2lHkZFQr3oaVvPcemvlbAiEA0WGGzmYx5C9UvfXIK7NEziT4pQtyESE0uRVK - Xw4nMqk= - -----END CERTIFICATE----- - """.strip() - - -S/MIME provides a method to send and receive signed MIME messages. It is -commonly used in email. S/MIME has multiple versions, but this -module implements a subset of :rfc:`2632`, also known as S/MIME Version 3. - - -.. class:: SMIMESignatureBuilder - - .. versionadded:: 3.2 - - .. doctest:: - - >>> from cryptography.hazmat.primitives import hashes, serialization, smime - >>> from cryptography import x509 - >>> cert = x509.load_pem_x509_certificate(ca_cert) - >>> key = serialization.load_pem_private_key(ca_key, None) - >>> options = [smime.SMIMEOptions.DetachedSignature] - >>> smime.SMIMESignatureBuilder().set_data( - ... b"data to sign" - ... ).add_signer( - ... cert, key, hashes.SHA256() - ... ).sign( - ... serialization.Encoding.PEM, options - ... ) - b'...' - - .. method:: set_data(data) - - :param data: The data to be hashed and signed. - :type data: :term:`bytes-like` - - .. method:: add_signer(certificate, private_key, hash_algorithm) - - :param certificate: The :class:`~cryptography.x509.Certificate`. - - :param private_key: The - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey` or - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` - associated with the certificate provided. - - :param hash_algorithm: The - :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` that - will be used to generate the signature. This must be an instance of - :class:`~cryptography.hazmat.primitives.hashes.SHA1`, - :class:`~cryptography.hazmat.primitives.hashes.SHA224`, - :class:`~cryptography.hazmat.primitives.hashes.SHA256`, - :class:`~cryptography.hazmat.primitives.hashes.SHA384`, or - :class:`~cryptography.hazmat.primitives.hashes.SHA512`. - - .. method:: sign(encoding, options, backend=None) - - :param encoding: :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` - or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`. - - :param options: A list of :class:`~cryptography.hazmat.primitives.smime.SMIMEOptions`. - - :return bytes: The signed S/MIME message. - - :param backend: An optional backend. - - -.. class:: SMIMEOptions - - .. versionadded:: 3.2 - - An enumeration of options for S/MIME signature creation. - - .. attribute:: Text - - The text option adds ``text/plain`` headers to the S/MIME message when - serializing to - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`. - This option is disallowed with ``DER`` serialization. - - .. attribute:: Binary - - S/MIME signing normally converts line endings (LF to CRLF). When - passing this option the data will not be converted. - - .. attribute:: DetachedSignature - - Don't embed the signed data within the ASN.1. When signing with - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` this - also results in the data being added as clear text before the - PEM encoded structure. - - .. attribute:: NoCapabilities - - S/MIME structures contain a ``MIMECapabilities`` section inside the - ``authenticatedAttributes``. Passing this as an option removes - ``MIMECapabilities``. - - .. attribute:: NoAttributes - - S/MIME structures contain an ``authenticatedAttributes`` section. - Passing this as an option removes that section. Note that if you - pass ``NoAttributes`` you can't pass ``NoCapabilities`` since - ``NoAttributes`` removes ``MIMECapabilities`` and more. diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index f7d6a47c7a9c..3fd87ac5b1e1 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -115,7 +115,7 @@ _RevokedCertificate, ) from cryptography.hazmat.bindings.openssl import binding -from cryptography.hazmat.primitives import hashes, serialization, smime +from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ( dsa, ec, @@ -151,7 +151,7 @@ XTS, ) from cryptography.hazmat.primitives.kdf import scrypt -from cryptography.hazmat.primitives.serialization import ssh +from cryptography.hazmat.primitives.serialization import pkcs7, ssh from cryptography.x509 import ocsp @@ -2690,12 +2690,12 @@ def _load_pkcs7_certificates(self, p7): return certs - def smime_sign(self, builder, encoding, options): + def pkcs7_sign(self, builder, encoding, options): bio = self._bytes_to_bio(builder._data) init_flags = self._lib.PKCS7_PARTIAL final_flags = 0 - if smime.SMIMEOptions.DetachedSignature in options: + if pkcs7.PKCS7Options.DetachedSignature in options: # Don't embed the data in the PKCS7 structure init_flags |= self._lib.PKCS7_DETACHED final_flags |= self._lib.PKCS7_DETACHED @@ -2715,9 +2715,9 @@ def smime_sign(self, builder, encoding, options): # These flags are configurable on a per-signature basis # but we've deliberately chosen to make the API only allow # setting it across all signatures for now. - if smime.SMIMEOptions.NoCapabilities in options: + if pkcs7.PKCS7Options.NoCapabilities in options: signer_flags |= self._lib.PKCS7_NOSMIMECAP - elif smime.SMIMEOptions.NoAttributes in options: + elif pkcs7.PKCS7Options.NoAttributes in options: signer_flags |= self._lib.PKCS7_NOATTR for certificate, private_key, hash_algorithm in builder._signers: md = self._evp_md_non_null_from_algorithm(hash_algorithm) @@ -2729,9 +2729,9 @@ def smime_sign(self, builder, encoding, options): for option in options: # DetachedSignature, NoCapabilities, and NoAttributes are already # handled so we just need to check these last two options. - if option is smime.SMIMEOptions.Text: + if option is pkcs7.PKCS7Options.Text: final_flags |= self._lib.PKCS7_TEXT - elif option is smime.SMIMEOptions.Binary: + elif option is pkcs7.PKCS7Options.Binary: final_flags |= self._lib.PKCS7_BINARY bio_out = self._create_mem_bio_gc() diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs7.py b/src/cryptography/hazmat/primitives/serialization/pkcs7.py index fcdd1c9aa3c8..658f7e5d2d18 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs7.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -4,7 +4,13 @@ from __future__ import absolute_import, division, print_function +from enum import Enum + +from cryptography import x509 from cryptography.hazmat.backends import _get_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ec, rsa +from cryptography.utils import _check_byteslike def load_pem_pkcs7_certificates(data): @@ -15,3 +21,99 @@ def load_pem_pkcs7_certificates(data): def load_der_pkcs7_certificates(data): backend = _get_backend(None) return backend.load_der_pkcs7_certificates(data) + + +class PKCS7SignatureBuilder(object): + def __init__(self, data=None, signers=[]): + self._data = data + self._signers = signers + + def set_data(self, data): + _check_byteslike("data", data) + if self._data is not None: + raise ValueError("data may only be set once") + + return PKCS7SignatureBuilder(data, self._signers) + + def add_signer(self, certificate, private_key, hash_algorithm): + if not isinstance( + hash_algorithm, + ( + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + ), + ): + raise TypeError( + "hash_algorithm must be one of hashes.SHA1, SHA224, " + "SHA256, SHA384, or SHA512" + ) + if not isinstance(certificate, x509.Certificate): + raise TypeError("certificate must be a x509.Certificate") + + if not isinstance( + private_key, (rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey) + ): + raise TypeError("Only RSA & EC keys are supported at this time.") + + return PKCS7SignatureBuilder( + self._data, + self._signers + [(certificate, private_key, hash_algorithm)], + ) + + def sign(self, encoding, options, backend=None): + if len(self._signers) == 0: + raise ValueError("Must have at least one signer") + if self._data is None: + raise ValueError("You must add data to sign") + options = list(options) + if not all(isinstance(x, PKCS7Options) for x in options): + raise ValueError("options must be from the PKCS7Options enum") + if ( + encoding is not serialization.Encoding.PEM + and encoding is not serialization.Encoding.DER + ): + raise ValueError("Must be PEM or DER from the Encoding enum") + + # Text is a meaningless option unless it is accompanied by + # DetachedSignature + if ( + PKCS7Options.Text in options + and PKCS7Options.DetachedSignature not in options + ): + raise ValueError( + "When passing the Text option you must also pass " + "DetachedSignature" + ) + + if ( + PKCS7Options.Text in options + and encoding is serialization.Encoding.DER + ): + raise ValueError( + "The Text option does nothing when serializing to DER" + ) + + # No attributes implies no capabilities so we'll error if you try to + # pass both. + if ( + PKCS7Options.NoAttributes in options + and PKCS7Options.NoCapabilities in options + ): + raise ValueError( + "NoAttributes is a superset of NoCapabilities. Do not pass " + "both values." + ) + + backend = _get_backend(backend) + return backend.pkcs7_sign(self, encoding, options) + + +class PKCS7Options(Enum): + Text = "Add text/plain MIME type" + Binary = "Don't translate input data into canonical MIME format" + DetachedSignature = "Don't embed data in the PKCS7 structure" + NoCapabilities = "Don't embed SMIME capabilities" + NoAttributes = "Don't embed authenticatedAttributes" diff --git a/src/cryptography/hazmat/primitives/smime.py b/src/cryptography/hazmat/primitives/smime.py deleted file mode 100644 index 538ba6a00012..000000000000 --- a/src/cryptography/hazmat/primitives/smime.py +++ /dev/null @@ -1,109 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -from enum import Enum - -from cryptography import x509 -from cryptography.hazmat.backends import _get_backend -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import ec, rsa -from cryptography.utils import _check_byteslike - - -class SMIMESignatureBuilder(object): - def __init__(self, data=None, signers=[]): - self._data = data - self._signers = signers - - def set_data(self, data): - _check_byteslike("data", data) - if self._data is not None: - raise ValueError("data may only be set once") - - return SMIMESignatureBuilder(data, self._signers) - - def add_signer(self, certificate, private_key, hash_algorithm): - if not isinstance( - hash_algorithm, - ( - hashes.SHA1, - hashes.SHA224, - hashes.SHA256, - hashes.SHA384, - hashes.SHA512, - ), - ): - raise TypeError( - "hash_algorithm must be one of hashes.SHA1, SHA224, " - "SHA256, SHA384, or SHA512" - ) - if not isinstance(certificate, x509.Certificate): - raise TypeError("certificate must be a x509.Certificate") - - if not isinstance( - private_key, (rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey) - ): - raise TypeError("Only RSA & EC keys are supported at this time.") - - return SMIMESignatureBuilder( - self._data, - self._signers + [(certificate, private_key, hash_algorithm)], - ) - - def sign(self, encoding, options, backend=None): - if len(self._signers) == 0: - raise ValueError("Must have at least one signer") - if self._data is None: - raise ValueError("You must add data to sign") - options = list(options) - if not all(isinstance(x, SMIMEOptions) for x in options): - raise ValueError("options must be from the SMIMEOptions enum") - if ( - encoding is not serialization.Encoding.PEM - and encoding is not serialization.Encoding.DER - ): - raise ValueError("Must be PEM or DER from the Encoding enum") - - # Text is a meaningless option unless it is accompanied by - # DetachedSignature - if ( - SMIMEOptions.Text in options - and SMIMEOptions.DetachedSignature not in options - ): - raise ValueError( - "When passing the Text option you must also pass " - "DetachedSignature" - ) - - if ( - SMIMEOptions.Text in options - and encoding is serialization.Encoding.DER - ): - raise ValueError( - "The Text option does nothing when serializing to DER" - ) - - # No attributes implies no capabilities so we'll error if you try to - # pass both. - if ( - SMIMEOptions.NoAttributes in options - and SMIMEOptions.NoCapabilities in options - ): - raise ValueError( - "NoAttributes is a superset of NoCapabilities. Do not pass " - "both values." - ) - - backend = _get_backend(backend) - return backend.smime_sign(self, encoding, options) - - -class SMIMEOptions(Enum): - Text = "Add text/plain MIME type" - Binary = "Don't translate input data into canonical MIME format" - DetachedSignature = "Don't embed data in the PKCS7 structure" - NoCapabilities = "Don't embed SMIME capabilities" - NoAttributes = "Don't embed authenticatedAttributes" diff --git a/tests/hazmat/primitives/test_pkcs7.py b/tests/hazmat/primitives/test_pkcs7.py index b7afe7512ac2..2a87451d51cc 100644 --- a/tests/hazmat/primitives/test_pkcs7.py +++ b/tests/hazmat/primitives/test_pkcs7.py @@ -10,6 +10,8 @@ from cryptography import x509 from cryptography.exceptions import _Reasons +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ed25519 from cryptography.hazmat.primitives.serialization import pkcs7 from .utils import load_vectors_from_file @@ -77,3 +79,506 @@ def test_load_pkcs7_unsupported_type(self): ), mode="rb", ) + + +# We have no public verification API and won't be adding one until we get +# some requirements from users so this function exists to give us basic +# verification for the signing tests. +def _smime_verify(encoding, sig, msg, certs, options, backend): + sig_bio = backend._bytes_to_bio(sig) + if encoding is serialization.Encoding.DER: + p7 = backend._lib.d2i_PKCS7_bio(sig_bio.bio, backend._ffi.NULL) + else: + p7 = backend._lib.SMIME_read_PKCS7(sig_bio.bio, backend._ffi.NULL) + backend.openssl_assert(p7 != backend._ffi.NULL) + p7 = backend._ffi.gc(p7, backend._lib.PKCS7_free) + flags = 0 + for option in options: + if option is pkcs7.PKCS7Options.Text: + flags |= backend._lib.PKCS7_TEXT + store = backend._lib.X509_STORE_new() + backend.openssl_assert(store != backend._ffi.NULL) + store = backend._ffi.gc(store, backend._lib.X509_STORE_free) + for cert in certs: + res = backend._lib.X509_STORE_add_cert(store, cert._x509) + backend.openssl_assert(res == 1) + if msg is None: + res = backend._lib.PKCS7_verify( + p7, + backend._ffi.NULL, + store, + backend._ffi.NULL, + backend._ffi.NULL, + flags, + ) + else: + msg_bio = backend._bytes_to_bio(msg) + res = backend._lib.PKCS7_verify( + p7, backend._ffi.NULL, store, msg_bio.bio, backend._ffi.NULL, flags + ) + backend.openssl_assert(res == 1) + + +def _load_cert_key(): + key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca_key.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None + ), + mode="rb", + ) + cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate(pemfile.read()), + mode="rb", + ) + return cert, key + + +class TestPKCS7Builder(object): + def test_invalid_data(self): + builder = pkcs7.PKCS7SignatureBuilder() + with pytest.raises(TypeError): + builder.set_data(u"not bytes") + + def test_set_data_twice(self): + builder = pkcs7.PKCS7SignatureBuilder().set_data(b"test") + with pytest.raises(ValueError): + builder.set_data(b"test") + + def test_sign_no_signer(self): + builder = pkcs7.PKCS7SignatureBuilder().set_data(b"test") + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, []) + + def test_sign_no_data(self): + cert, key = _load_cert_key() + builder = pkcs7.PKCS7SignatureBuilder().add_signer( + cert, key, hashes.SHA256() + ) + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, []) + + def test_unsupported_hash_alg(self): + cert, key = _load_cert_key() + with pytest.raises(TypeError): + pkcs7.PKCS7SignatureBuilder().add_signer( + cert, key, hashes.SHA512_256() + ) + + def test_not_a_cert(self): + cert, key = _load_cert_key() + with pytest.raises(TypeError): + pkcs7.PKCS7SignatureBuilder().add_signer( + b"notacert", key, hashes.SHA256() + ) + + @pytest.mark.supported( + only_if=lambda backend: backend.ed25519_supported(), + skip_message="Does not support ed25519.", + ) + def test_unsupported_key_type(self, backend): + cert, _ = _load_cert_key() + key = ed25519.Ed25519PrivateKey.generate() + with pytest.raises(TypeError): + pkcs7.PKCS7SignatureBuilder().add_signer( + cert, key, hashes.SHA256() + ) + + def test_sign_invalid_options(self): + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, [b"invalid"]) + + def test_sign_invalid_encoding(self): + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.Raw, []) + + def test_sign_invalid_options_text_no_detached(self): + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + options = [pkcs7.PKCS7Options.Text] + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, options) + + def test_sign_invalid_options_text_der_encoding(self): + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + options = [ + pkcs7.PKCS7Options.Text, + pkcs7.PKCS7Options.DetachedSignature, + ] + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.DER, options) + + def test_sign_invalid_options_no_attrs_and_no_caps(self): + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(b"test") + .add_signer(cert, key, hashes.SHA256()) + ) + options = [ + pkcs7.PKCS7Options.NoAttributes, + pkcs7.PKCS7Options.NoCapabilities, + ] + with pytest.raises(ValueError): + builder.sign(serialization.Encoding.PEM, options) + + def test_smime_sign_detached(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + options = [pkcs7.PKCS7Options.DetachedSignature] + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig = builder.sign(serialization.Encoding.PEM, options) + sig_binary = builder.sign(serialization.Encoding.DER, options) + # We don't have a generic ASN.1 parser available to us so we instead + # will assert on specific byte sequences being present based on the + # parameters chosen above. + assert b"sha-256" in sig + # Detached signature means that the signed data is *not* embedded into + # the PKCS7 structure itself, but is present in the PEM serialization + # as a separate section before the PKCS7 data. So we should expect to + # have data in sig but not in sig_binary + assert data in sig + _smime_verify( + serialization.Encoding.PEM, sig, data, [cert], options, backend + ) + assert data not in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + data, + [cert], + options, + backend, + ) + + def test_sign_byteslike(self): + data = bytearray(b"hello world") + cert, key = _load_cert_key() + options = [pkcs7.PKCS7Options.DetachedSignature] + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig = builder.sign(serialization.Encoding.PEM, options) + assert bytes(data) in sig + + @pytest.mark.parametrize( + ("hash_alg", "expected_value"), + [ + (hashes.SHA1(), b"\x06\x05+\x0e\x03\x02\x1a"), + (hashes.SHA256(), b"\x06\t`\x86H\x01e\x03\x04\x02\x01"), + (hashes.SHA384(), b"\x06\t`\x86H\x01e\x03\x04\x02\x02"), + (hashes.SHA512(), b"\x06\t`\x86H\x01e\x03\x04\x02\x03"), + ], + ) + def test_smime_sign_alternate_digests_der( + self, hash_alg, expected_value, backend + ): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hash_alg) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + assert expected_value in sig + _smime_verify( + serialization.Encoding.DER, sig, None, [cert], options, backend + ) + + @pytest.mark.parametrize( + ("hash_alg", "expected_value"), + [ + (hashes.SHA1(), b"sha1"), + (hashes.SHA256(), b"sha-256"), + (hashes.SHA384(), b"sha-384"), + (hashes.SHA512(), b"sha-512"), + ], + ) + def test_smime_sign_alternate_digests_detached_pem( + self, hash_alg, expected_value + ): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hash_alg) + ) + options = [pkcs7.PKCS7Options.DetachedSignature] + sig = builder.sign(serialization.Encoding.PEM, options) + # When in detached signature mode the hash algorithm is stored as a + # byte string like "sha-384". + assert expected_value in sig + + def test_smime_sign_attached(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + options = [] + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig_binary = builder.sign(serialization.Encoding.DER, options) + # When not passing detached signature the signed data is embedded into + # the PKCS7 structure itself + assert data in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_binary(self, backend): + data = b"hello\nworld" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + options = [] + sig_no_binary = builder.sign(serialization.Encoding.DER, options) + sig_binary = builder.sign( + serialization.Encoding.DER, [pkcs7.PKCS7Options.Binary] + ) + # Binary prevents translation of LF to CR+LF (SMIME canonical form) + # so data should not be present in sig_no_binary, but should be present + # in sig_binary + assert data not in sig_no_binary + _smime_verify( + serialization.Encoding.DER, + sig_no_binary, + None, + [cert], + options, + backend, + ) + assert data in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_smime_canonicalization(self, backend): + data = b"hello\nworld" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [] + sig_binary = builder.sign(serialization.Encoding.DER, options) + # LF gets converted to CR+LF (SMIME canonical form) + # so data should not be present in the sig + assert data not in sig_binary + assert b"hello\r\nworld" in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_text(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [ + pkcs7.PKCS7Options.Text, + pkcs7.PKCS7Options.DetachedSignature, + ] + sig_pem = builder.sign(serialization.Encoding.PEM, options) + # The text option adds text/plain headers to the S/MIME message + # These headers are only relevant in PEM mode, not binary, which is + # just the PKCS7 structure itself. + assert b"text/plain" in sig_pem + # When passing the Text option the header is prepended so the actual + # signed data is this. + signed_data = b"Content-Type: text/plain\r\n\r\nhello world" + _smime_verify( + serialization.Encoding.PEM, + sig_pem, + signed_data, + [cert], + options, + backend, + ) + + def test_smime_sign_no_capabilities(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [pkcs7.PKCS7Options.NoCapabilities] + sig_binary = builder.sign(serialization.Encoding.DER, options) + # NoCapabilities removes the SMIMECapabilities attribute from the + # PKCS7 structure. This is an ASN.1 sequence with the + # OID 1.2.840.113549.1.9.15. It does NOT remove all authenticated + # attributes, so we verify that by looking for the signingTime OID. + + # 1.2.840.113549.1.9.15 SMIMECapabilities as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary + # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_smime_sign_no_attributes(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [pkcs7.PKCS7Options.NoAttributes] + sig_binary = builder.sign(serialization.Encoding.DER, options) + # NoAttributes removes all authenticated attributes, so we shouldn't + # find SMIMECapabilities or signingTime. + + # 1.2.840.113549.1.9.15 SMIMECapabilities as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary + # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID + assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" not in sig_binary + _smime_verify( + serialization.Encoding.DER, + sig_binary, + None, + [cert], + options, + backend, + ) + + def test_multiple_signers(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + rsa_key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_key.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None + ), + mode="rb", + ) + rsa_cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read() + ), + mode="rb", + ) + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA512()) + .add_signer(rsa_cert, rsa_key, hashes.SHA512()) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + # There should be three SHA512 OIDs in this structure + assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 3 + _smime_verify( + serialization.Encoding.DER, + sig, + None, + [cert, rsa_cert], + options, + backend, + ) + + def test_multiple_signers_different_hash_algs(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + rsa_key = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_key.pem"), + lambda pemfile: serialization.load_pem_private_key( + pemfile.read(), None + ), + mode="rb", + ) + rsa_cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read() + ), + mode="rb", + ) + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA384()) + .add_signer(rsa_cert, rsa_key, hashes.SHA512()) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + # There should be two SHA384 and two SHA512 OIDs in this structure + assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x02") == 2 + assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 2 + _smime_verify( + serialization.Encoding.DER, + sig, + None, + [cert, rsa_cert], + options, + backend, + ) diff --git a/tests/hazmat/primitives/test_smime.py b/tests/hazmat/primitives/test_smime.py deleted file mode 100644 index c2ff275e0999..000000000000 --- a/tests/hazmat/primitives/test_smime.py +++ /dev/null @@ -1,518 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import absolute_import, division, print_function - -import os - -import pytest - -from cryptography import x509 -from cryptography.hazmat.primitives import hashes, serialization, smime -from cryptography.hazmat.primitives.asymmetric import ed25519 - -from .utils import load_vectors_from_file - - -# We have no public verification API and won't be adding one until we get -# some requirements from users so this function exists to give us basic -# verification for the signing tests. -def _smime_verify(encoding, sig, msg, certs, options, backend): - sig_bio = backend._bytes_to_bio(sig) - if encoding is serialization.Encoding.DER: - p7 = backend._lib.d2i_PKCS7_bio(sig_bio.bio, backend._ffi.NULL) - else: - p7 = backend._lib.SMIME_read_PKCS7(sig_bio.bio, backend._ffi.NULL) - backend.openssl_assert(p7 != backend._ffi.NULL) - p7 = backend._ffi.gc(p7, backend._lib.PKCS7_free) - flags = 0 - for option in options: - if option is smime.SMIMEOptions.Text: - flags |= backend._lib.PKCS7_TEXT - store = backend._lib.X509_STORE_new() - backend.openssl_assert(store != backend._ffi.NULL) - store = backend._ffi.gc(store, backend._lib.X509_STORE_free) - for cert in certs: - res = backend._lib.X509_STORE_add_cert(store, cert._x509) - backend.openssl_assert(res == 1) - if msg is None: - res = backend._lib.PKCS7_verify( - p7, - backend._ffi.NULL, - store, - backend._ffi.NULL, - backend._ffi.NULL, - flags, - ) - else: - msg_bio = backend._bytes_to_bio(msg) - res = backend._lib.PKCS7_verify( - p7, backend._ffi.NULL, store, msg_bio.bio, backend._ffi.NULL, flags - ) - backend.openssl_assert(res == 1) - - -def _load_cert_key(): - key = load_vectors_from_file( - os.path.join("x509", "custom", "ca", "ca_key.pem"), - lambda pemfile: serialization.load_pem_private_key( - pemfile.read(), None - ), - mode="rb", - ) - cert = load_vectors_from_file( - os.path.join("x509", "custom", "ca", "ca.pem"), - loader=lambda pemfile: x509.load_pem_x509_certificate(pemfile.read()), - mode="rb", - ) - return cert, key - - -class TestSMIMEBuilder(object): - def test_invalid_data(self): - builder = smime.SMIMESignatureBuilder() - with pytest.raises(TypeError): - builder.set_data(u"not bytes") - - def test_set_data_twice(self): - builder = smime.SMIMESignatureBuilder().set_data(b"test") - with pytest.raises(ValueError): - builder.set_data(b"test") - - def test_sign_no_signer(self): - builder = smime.SMIMESignatureBuilder().set_data(b"test") - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, []) - - def test_sign_no_data(self): - cert, key = _load_cert_key() - builder = smime.SMIMESignatureBuilder().add_signer( - cert, key, hashes.SHA256() - ) - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, []) - - def test_unsupported_hash_alg(self): - cert, key = _load_cert_key() - with pytest.raises(TypeError): - smime.SMIMESignatureBuilder().add_signer( - cert, key, hashes.SHA512_256() - ) - - def test_not_a_cert(self): - cert, key = _load_cert_key() - with pytest.raises(TypeError): - smime.SMIMESignatureBuilder().add_signer( - b"notacert", key, hashes.SHA256() - ) - - @pytest.mark.supported( - only_if=lambda backend: backend.ed25519_supported(), - skip_message="Does not support ed25519.", - ) - def test_unsupported_key_type(self, backend): - cert, _ = _load_cert_key() - key = ed25519.Ed25519PrivateKey.generate() - with pytest.raises(TypeError): - smime.SMIMESignatureBuilder().add_signer( - cert, key, hashes.SHA256() - ) - - def test_sign_invalid_options(self): - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(b"test") - .add_signer(cert, key, hashes.SHA256()) - ) - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, [b"invalid"]) - - def test_sign_invalid_encoding(self): - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(b"test") - .add_signer(cert, key, hashes.SHA256()) - ) - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.Raw, []) - - def test_sign_invalid_options_text_no_detached(self): - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(b"test") - .add_signer(cert, key, hashes.SHA256()) - ) - options = [smime.SMIMEOptions.Text] - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, options) - - def test_sign_invalid_options_text_der_encoding(self): - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(b"test") - .add_signer(cert, key, hashes.SHA256()) - ) - options = [ - smime.SMIMEOptions.Text, - smime.SMIMEOptions.DetachedSignature, - ] - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.DER, options) - - def test_sign_invalid_options_no_attrs_and_no_caps(self): - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(b"test") - .add_signer(cert, key, hashes.SHA256()) - ) - options = [ - smime.SMIMEOptions.NoAttributes, - smime.SMIMEOptions.NoCapabilities, - ] - with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, options) - - def test_smime_sign_detached(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - options = [smime.SMIMEOptions.DetachedSignature] - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - sig = builder.sign(serialization.Encoding.PEM, options) - sig_binary = builder.sign(serialization.Encoding.DER, options) - # We don't have a generic ASN.1 parser available to us so we instead - # will assert on specific byte sequences being present based on the - # parameters chosen above. - assert b"sha-256" in sig - # Detached signature means that the signed data is *not* embedded into - # the PKCS7 structure itself, but is present in the PEM serialization - # as a separate section before the PKCS7 data. So we should expect to - # have data in sig but not in sig_binary - assert data in sig - _smime_verify( - serialization.Encoding.PEM, sig, data, [cert], options, backend - ) - assert data not in sig_binary - _smime_verify( - serialization.Encoding.DER, - sig_binary, - data, - [cert], - options, - backend, - ) - - def test_sign_byteslike(self): - data = bytearray(b"hello world") - cert, key = _load_cert_key() - options = [smime.SMIMEOptions.DetachedSignature] - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - sig = builder.sign(serialization.Encoding.PEM, options) - assert bytes(data) in sig - - @pytest.mark.parametrize( - ("hash_alg", "expected_value"), - [ - (hashes.SHA1(), b"\x06\x05+\x0e\x03\x02\x1a"), - (hashes.SHA256(), b"\x06\t`\x86H\x01e\x03\x04\x02\x01"), - (hashes.SHA384(), b"\x06\t`\x86H\x01e\x03\x04\x02\x02"), - (hashes.SHA512(), b"\x06\t`\x86H\x01e\x03\x04\x02\x03"), - ], - ) - def test_smime_sign_alternate_digests_der( - self, hash_alg, expected_value, backend - ): - data = b"hello world" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hash_alg) - ) - options = [] - sig = builder.sign(serialization.Encoding.DER, options) - assert expected_value in sig - _smime_verify( - serialization.Encoding.DER, sig, None, [cert], options, backend - ) - - @pytest.mark.parametrize( - ("hash_alg", "expected_value"), - [ - (hashes.SHA1(), b"sha1"), - (hashes.SHA256(), b"sha-256"), - (hashes.SHA384(), b"sha-384"), - (hashes.SHA512(), b"sha-512"), - ], - ) - def test_smime_sign_alternate_digests_detached_pem( - self, hash_alg, expected_value - ): - data = b"hello world" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hash_alg) - ) - options = [smime.SMIMEOptions.DetachedSignature] - sig = builder.sign(serialization.Encoding.PEM, options) - # When in detached signature mode the hash algorithm is stored as a - # byte string like "sha-384". - assert expected_value in sig - - def test_smime_sign_attached(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - options = [] - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - sig_binary = builder.sign(serialization.Encoding.DER, options) - # When not passing detached signature the signed data is embedded into - # the PKCS7 structure itself - assert data in sig_binary - _smime_verify( - serialization.Encoding.DER, - sig_binary, - None, - [cert], - options, - backend, - ) - - def test_smime_sign_binary(self, backend): - data = b"hello\nworld" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - options = [] - sig_no_binary = builder.sign(serialization.Encoding.DER, options) - sig_binary = builder.sign( - serialization.Encoding.DER, [smime.SMIMEOptions.Binary] - ) - # Binary prevents translation of LF to CR+LF (SMIME canonical form) - # so data should not be present in sig_no_binary, but should be present - # in sig_binary - assert data not in sig_no_binary - _smime_verify( - serialization.Encoding.DER, - sig_no_binary, - None, - [cert], - options, - backend, - ) - assert data in sig_binary - _smime_verify( - serialization.Encoding.DER, - sig_binary, - None, - [cert], - options, - backend, - ) - - def test_smime_sign_smime_canonicalization(self, backend): - data = b"hello\nworld" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - options = [] - sig_binary = builder.sign(serialization.Encoding.DER, options) - # LF gets converted to CR+LF (SMIME canonical form) - # so data should not be present in the sig - assert data not in sig_binary - assert b"hello\r\nworld" in sig_binary - _smime_verify( - serialization.Encoding.DER, - sig_binary, - None, - [cert], - options, - backend, - ) - - def test_smime_sign_text(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - options = [ - smime.SMIMEOptions.Text, - smime.SMIMEOptions.DetachedSignature, - ] - sig_pem = builder.sign(serialization.Encoding.PEM, options) - # The text option adds text/plain headers to the S/MIME message - # These headers are only relevant in PEM mode, not binary, which is - # just the PKCS7 structure itself. - assert b"text/plain" in sig_pem - # When passing the Text option the header is prepended so the actual - # signed data is this. - signed_data = b"Content-Type: text/plain\r\n\r\nhello world" - _smime_verify( - serialization.Encoding.PEM, - sig_pem, - signed_data, - [cert], - options, - backend, - ) - - def test_smime_sign_no_capabilities(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - options = [smime.SMIMEOptions.NoCapabilities] - sig_binary = builder.sign(serialization.Encoding.DER, options) - # NoCapabilities removes the SMIMECapabilities attribute from the - # PKCS7 structure. This is an ASN.1 sequence with the - # OID 1.2.840.113549.1.9.15. It does NOT remove all authenticated - # attributes, so we verify that by looking for the signingTime OID. - - # 1.2.840.113549.1.9.15 SMIMECapabilities as an ASN.1 DER encoded OID - assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary - # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID - assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" in sig_binary - _smime_verify( - serialization.Encoding.DER, - sig_binary, - None, - [cert], - options, - backend, - ) - - def test_smime_sign_no_attributes(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA256()) - ) - - options = [smime.SMIMEOptions.NoAttributes] - sig_binary = builder.sign(serialization.Encoding.DER, options) - # NoAttributes removes all authenticated attributes, so we shouldn't - # find SMIMECapabilities or signingTime. - - # 1.2.840.113549.1.9.15 SMIMECapabilities as an ASN.1 DER encoded OID - assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary - # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID - assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" not in sig_binary - _smime_verify( - serialization.Encoding.DER, - sig_binary, - None, - [cert], - options, - backend, - ) - - def test_multiple_signers(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - rsa_key = load_vectors_from_file( - os.path.join("x509", "custom", "ca", "rsa_key.pem"), - lambda pemfile: serialization.load_pem_private_key( - pemfile.read(), None - ), - mode="rb", - ) - rsa_cert = load_vectors_from_file( - os.path.join("x509", "custom", "ca", "rsa_ca.pem"), - loader=lambda pemfile: x509.load_pem_x509_certificate( - pemfile.read() - ), - mode="rb", - ) - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA512()) - .add_signer(rsa_cert, rsa_key, hashes.SHA512()) - ) - options = [] - sig = builder.sign(serialization.Encoding.DER, options) - # There should be three SHA512 OIDs in this structure - assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 3 - _smime_verify( - serialization.Encoding.DER, - sig, - None, - [cert, rsa_cert], - options, - backend, - ) - - def test_multiple_signers_different_hash_algs(self, backend): - data = b"hello world" - cert, key = _load_cert_key() - rsa_key = load_vectors_from_file( - os.path.join("x509", "custom", "ca", "rsa_key.pem"), - lambda pemfile: serialization.load_pem_private_key( - pemfile.read(), None - ), - mode="rb", - ) - rsa_cert = load_vectors_from_file( - os.path.join("x509", "custom", "ca", "rsa_ca.pem"), - loader=lambda pemfile: x509.load_pem_x509_certificate( - pemfile.read() - ), - mode="rb", - ) - builder = ( - smime.SMIMESignatureBuilder() - .set_data(data) - .add_signer(cert, key, hashes.SHA384()) - .add_signer(rsa_cert, rsa_key, hashes.SHA512()) - ) - options = [] - sig = builder.sign(serialization.Encoding.DER, options) - # There should be two SHA384 and two SHA512 OIDs in this structure - assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x02") == 2 - assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 2 - _smime_verify( - serialization.Encoding.DER, - sig, - None, - [cert, rsa_cert], - options, - backend, - ) From 95c4f68c1b50b8eb84a0f3268bc6fdbd08e20f08 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 24 Oct 2020 18:17:06 -0700 Subject: [PATCH 977/988] PKCS7SignatureBuilder now supports three serializations (#5497) * PKCS7SignatureBuilder now supports three serializations PEM, DER, and SMIME. SMIME embeds the S/MIME headers and has the detached signature concept. * thanks libre --- .../primitives/asymmetric/serialization.rst | 21 ++-- src/_cffi_src/openssl/pkcs7.py | 1 + .../hazmat/backends/openssl/backend.py | 8 +- .../hazmat/primitives/serialization/base.py | 1 + .../hazmat/primitives/serialization/pkcs7.py | 19 ++-- tests/hazmat/primitives/test_pkcs7.py | 97 ++++++++++++------- 6 files changed, 95 insertions(+), 52 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index f3dca471a7f2..cc6d2bae5f75 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -620,7 +620,7 @@ contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, ... ).add_signer( ... cert, key, hashes.SHA256() ... ).sign( - ... serialization.Encoding.PEM, options + ... serialization.Encoding.SMIME, options ... ) b'...' @@ -649,8 +649,9 @@ contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, .. method:: sign(encoding, options, backend=None) - :param encoding: :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` - or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`. + :param encoding: :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.DER`, + or :attr:`~cryptography.hazmat.primitives.serialization.Encoding.SMIME`. :param options: A list of :class:`~cryptography.hazmat.primitives.serialization.pkcs7.PKCS7Options`. @@ -670,19 +671,19 @@ contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, The text option adds ``text/plain`` headers to an S/MIME message when serializing to - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`. + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.SMIME`. This option is disallowed with ``DER`` serialization. .. attribute:: Binary - S/MIME signing normally converts line endings (LF to CRLF). When + Signing normally converts line endings (LF to CRLF). When passing this option the data will not be converted. .. attribute:: DetachedSignature Don't embed the signed data within the ASN.1. When signing with - :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM` this - also results in the data being added as clear text before the + :attr:`~cryptography.hazmat.primitives.serialization.Encoding.SMIME` + this also results in the data being added as clear text before the PEM encoded structure. .. attribute:: NoCapabilities @@ -891,6 +892,12 @@ Serialization Encodings The format used by elliptic curve point encodings. This is a binary format. + .. attribute:: SMIME + + .. versionadded:: 3.2 + + An output format used for PKCS7. This is a text format. + Serialization Encryption Types ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/_cffi_src/openssl/pkcs7.py b/src/_cffi_src/openssl/pkcs7.py index 1878ec59dc15..c22263dfe6c1 100644 --- a/src/_cffi_src/openssl/pkcs7.py +++ b/src/_cffi_src/openssl/pkcs7.py @@ -60,6 +60,7 @@ PKCS7 *PKCS7_sign(X509 *, EVP_PKEY *, Cryptography_STACK_OF_X509 *, BIO *, int); int SMIME_write_PKCS7(BIO *, PKCS7 *, BIO *, int); +int PEM_write_bio_PKCS7_stream(BIO *, PKCS7 *, BIO *, int); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *, X509 *, EVP_PKEY *, const EVP_MD *, int); int PKCS7_final(PKCS7 *, BIO *, int); diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 3fd87ac5b1e1..81e4289e8b37 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2735,11 +2735,17 @@ def pkcs7_sign(self, builder, encoding, options): final_flags |= self._lib.PKCS7_BINARY bio_out = self._create_mem_bio_gc() - if encoding is serialization.Encoding.PEM: + if encoding is serialization.Encoding.SMIME: # This finalizes the structure res = self._lib.SMIME_write_PKCS7( bio_out, p7, bio.bio, final_flags ) + elif encoding is serialization.Encoding.PEM: + res = self._lib.PKCS7_final(p7, bio.bio, final_flags) + self.openssl_assert(res == 1) + res = self._lib.PEM_write_bio_PKCS7_stream( + bio_out, p7, bio.bio, final_flags + ) else: assert encoding is serialization.Encoding.DER # We need to call finalize here becauase i2d_PKCS7_bio does not diff --git a/src/cryptography/hazmat/primitives/serialization/base.py b/src/cryptography/hazmat/primitives/serialization/base.py index b2b403470f98..fc27235c5cf2 100644 --- a/src/cryptography/hazmat/primitives/serialization/base.py +++ b/src/cryptography/hazmat/primitives/serialization/base.py @@ -49,6 +49,7 @@ class Encoding(Enum): OpenSSH = "OpenSSH" Raw = "Raw" X962 = "ANSI X9.62" + SMIME = "S/MIME" class PrivateFormat(Enum): diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs7.py b/src/cryptography/hazmat/primitives/serialization/pkcs7.py index 658f7e5d2d18..b33cb7094c63 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs7.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -71,11 +71,14 @@ def sign(self, encoding, options, backend=None): options = list(options) if not all(isinstance(x, PKCS7Options) for x in options): raise ValueError("options must be from the PKCS7Options enum") - if ( - encoding is not serialization.Encoding.PEM - and encoding is not serialization.Encoding.DER + if encoding not in ( + serialization.Encoding.PEM, + serialization.Encoding.DER, + serialization.Encoding.SMIME, ): - raise ValueError("Must be PEM or DER from the Encoding enum") + raise ValueError( + "Must be PEM, DER, or SMIME from the Encoding enum" + ) # Text is a meaningless option unless it is accompanied by # DetachedSignature @@ -88,12 +91,12 @@ def sign(self, encoding, options, backend=None): "DetachedSignature" ) - if ( - PKCS7Options.Text in options - and encoding is serialization.Encoding.DER + if PKCS7Options.Text in options and encoding in ( + serialization.Encoding.DER, + serialization.Encoding.PEM, ): raise ValueError( - "The Text option does nothing when serializing to DER" + "The Text option is only available for SMIME serialization" ) # No attributes implies no capabilities so we'll error if you try to diff --git a/tests/hazmat/primitives/test_pkcs7.py b/tests/hazmat/primitives/test_pkcs7.py index 2a87451d51cc..f60467c2915d 100644 --- a/tests/hazmat/primitives/test_pkcs7.py +++ b/tests/hazmat/primitives/test_pkcs7.py @@ -84,10 +84,17 @@ def test_load_pkcs7_unsupported_type(self): # We have no public verification API and won't be adding one until we get # some requirements from users so this function exists to give us basic # verification for the signing tests. -def _smime_verify(encoding, sig, msg, certs, options, backend): +def _pkcs7_verify(encoding, sig, msg, certs, options, backend): sig_bio = backend._bytes_to_bio(sig) if encoding is serialization.Encoding.DER: p7 = backend._lib.d2i_PKCS7_bio(sig_bio.bio, backend._ffi.NULL) + elif encoding is serialization.Encoding.PEM: + p7 = backend._lib.PEM_read_bio_PKCS7( + sig_bio.bio, + backend._ffi.NULL, + backend._ffi.NULL, + backend._ffi.NULL, + ) else: p7 = backend._lib.SMIME_read_PKCS7(sig_bio.bio, backend._ffi.NULL) backend.openssl_assert(p7 != backend._ffi.NULL) @@ -149,7 +156,7 @@ def test_set_data_twice(self): def test_sign_no_signer(self): builder = pkcs7.PKCS7SignatureBuilder().set_data(b"test") with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, []) + builder.sign(serialization.Encoding.SMIME, []) def test_sign_no_data(self): cert, key = _load_cert_key() @@ -157,7 +164,7 @@ def test_sign_no_data(self): cert, key, hashes.SHA256() ) with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, []) + builder.sign(serialization.Encoding.SMIME, []) def test_unsupported_hash_alg(self): cert, key = _load_cert_key() @@ -193,7 +200,7 @@ def test_sign_invalid_options(self): .add_signer(cert, key, hashes.SHA256()) ) with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, [b"invalid"]) + builder.sign(serialization.Encoding.SMIME, [b"invalid"]) def test_sign_invalid_encoding(self): cert, key = _load_cert_key() @@ -214,7 +221,7 @@ def test_sign_invalid_options_text_no_detached(self): ) options = [pkcs7.PKCS7Options.Text] with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, options) + builder.sign(serialization.Encoding.SMIME, options) def test_sign_invalid_options_text_der_encoding(self): cert, key = _load_cert_key() @@ -242,7 +249,7 @@ def test_sign_invalid_options_no_attrs_and_no_caps(self): pkcs7.PKCS7Options.NoCapabilities, ] with pytest.raises(ValueError): - builder.sign(serialization.Encoding.PEM, options) + builder.sign(serialization.Encoding.SMIME, options) def test_smime_sign_detached(self, backend): data = b"hello world" @@ -254,22 +261,22 @@ def test_smime_sign_detached(self, backend): .add_signer(cert, key, hashes.SHA256()) ) - sig = builder.sign(serialization.Encoding.PEM, options) + sig = builder.sign(serialization.Encoding.SMIME, options) sig_binary = builder.sign(serialization.Encoding.DER, options) # We don't have a generic ASN.1 parser available to us so we instead # will assert on specific byte sequences being present based on the # parameters chosen above. assert b"sha-256" in sig # Detached signature means that the signed data is *not* embedded into - # the PKCS7 structure itself, but is present in the PEM serialization + # the PKCS7 structure itself, but is present in the SMIME serialization # as a separate section before the PKCS7 data. So we should expect to # have data in sig but not in sig_binary assert data in sig - _smime_verify( - serialization.Encoding.PEM, sig, data, [cert], options, backend + _pkcs7_verify( + serialization.Encoding.SMIME, sig, data, [cert], options, backend ) assert data not in sig_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_binary, data, @@ -288,9 +295,29 @@ def test_sign_byteslike(self): .add_signer(cert, key, hashes.SHA256()) ) - sig = builder.sign(serialization.Encoding.PEM, options) + sig = builder.sign(serialization.Encoding.SMIME, options) assert bytes(data) in sig + def test_sign_pem(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + options = [] + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + sig = builder.sign(serialization.Encoding.PEM, options) + _pkcs7_verify( + serialization.Encoding.PEM, + sig, + None, + [cert], + options, + backend, + ) + @pytest.mark.parametrize( ("hash_alg", "expected_value"), [ @@ -300,7 +327,7 @@ def test_sign_byteslike(self): (hashes.SHA512(), b"\x06\t`\x86H\x01e\x03\x04\x02\x03"), ], ) - def test_smime_sign_alternate_digests_der( + def test_sign_alternate_digests_der( self, hash_alg, expected_value, backend ): data = b"hello world" @@ -313,7 +340,7 @@ def test_smime_sign_alternate_digests_der( options = [] sig = builder.sign(serialization.Encoding.DER, options) assert expected_value in sig - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig, None, [cert], options, backend ) @@ -326,9 +353,7 @@ def test_smime_sign_alternate_digests_der( (hashes.SHA512(), b"sha-512"), ], ) - def test_smime_sign_alternate_digests_detached_pem( - self, hash_alg, expected_value - ): + def test_sign_alternate_digests_detached(self, hash_alg, expected_value): data = b"hello world" cert, key = _load_cert_key() builder = ( @@ -337,12 +362,12 @@ def test_smime_sign_alternate_digests_detached_pem( .add_signer(cert, key, hash_alg) ) options = [pkcs7.PKCS7Options.DetachedSignature] - sig = builder.sign(serialization.Encoding.PEM, options) + sig = builder.sign(serialization.Encoding.SMIME, options) # When in detached signature mode the hash algorithm is stored as a # byte string like "sha-384". assert expected_value in sig - def test_smime_sign_attached(self, backend): + def test_sign_attached(self, backend): data = b"hello world" cert, key = _load_cert_key() options = [] @@ -356,7 +381,7 @@ def test_smime_sign_attached(self, backend): # When not passing detached signature the signed data is embedded into # the PKCS7 structure itself assert data in sig_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_binary, None, @@ -365,7 +390,7 @@ def test_smime_sign_attached(self, backend): backend, ) - def test_smime_sign_binary(self, backend): + def test_sign_binary(self, backend): data = b"hello\nworld" cert, key = _load_cert_key() builder = ( @@ -382,7 +407,7 @@ def test_smime_sign_binary(self, backend): # so data should not be present in sig_no_binary, but should be present # in sig_binary assert data not in sig_no_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_no_binary, None, @@ -391,7 +416,7 @@ def test_smime_sign_binary(self, backend): backend, ) assert data in sig_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_binary, None, @@ -400,7 +425,7 @@ def test_smime_sign_binary(self, backend): backend, ) - def test_smime_sign_smime_canonicalization(self, backend): + def test_sign_smime_canonicalization(self, backend): data = b"hello\nworld" cert, key = _load_cert_key() builder = ( @@ -415,7 +440,7 @@ def test_smime_sign_smime_canonicalization(self, backend): # so data should not be present in the sig assert data not in sig_binary assert b"hello\r\nworld" in sig_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_binary, None, @@ -424,7 +449,7 @@ def test_smime_sign_smime_canonicalization(self, backend): backend, ) - def test_smime_sign_text(self, backend): + def test_sign_text(self, backend): data = b"hello world" cert, key = _load_cert_key() builder = ( @@ -437,16 +462,16 @@ def test_smime_sign_text(self, backend): pkcs7.PKCS7Options.Text, pkcs7.PKCS7Options.DetachedSignature, ] - sig_pem = builder.sign(serialization.Encoding.PEM, options) + sig_pem = builder.sign(serialization.Encoding.SMIME, options) # The text option adds text/plain headers to the S/MIME message - # These headers are only relevant in PEM mode, not binary, which is + # These headers are only relevant in SMIME mode, not binary, which is # just the PKCS7 structure itself. assert b"text/plain" in sig_pem # When passing the Text option the header is prepended so the actual # signed data is this. signed_data = b"Content-Type: text/plain\r\n\r\nhello world" - _smime_verify( - serialization.Encoding.PEM, + _pkcs7_verify( + serialization.Encoding.SMIME, sig_pem, signed_data, [cert], @@ -454,7 +479,7 @@ def test_smime_sign_text(self, backend): backend, ) - def test_smime_sign_no_capabilities(self, backend): + def test_sign_no_capabilities(self, backend): data = b"hello world" cert, key = _load_cert_key() builder = ( @@ -474,7 +499,7 @@ def test_smime_sign_no_capabilities(self, backend): assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" in sig_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_binary, None, @@ -483,7 +508,7 @@ def test_smime_sign_no_capabilities(self, backend): backend, ) - def test_smime_sign_no_attributes(self, backend): + def test_sign_no_attributes(self, backend): data = b"hello world" cert, key = _load_cert_key() builder = ( @@ -501,7 +526,7 @@ def test_smime_sign_no_attributes(self, backend): assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x0f" not in sig_binary # 1.2.840.113549.1.9.5 signingTime as an ASN.1 DER encoded OID assert b"\x06\t*\x86H\x86\xf7\r\x01\t\x05" not in sig_binary - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig_binary, None, @@ -537,7 +562,7 @@ def test_multiple_signers(self, backend): sig = builder.sign(serialization.Encoding.DER, options) # There should be three SHA512 OIDs in this structure assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 3 - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig, None, @@ -574,7 +599,7 @@ def test_multiple_signers_different_hash_algs(self, backend): # There should be two SHA384 and two SHA512 OIDs in this structure assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x02") == 2 assert sig.count(b"\x06\t`\x86H\x01e\x03\x04\x02\x03") == 2 - _smime_verify( + _pkcs7_verify( serialization.Encoding.DER, sig, None, From 085d1e44c6fe0480a4f67c34caf747943f4a2f20 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Oct 2020 06:11:48 -0700 Subject: [PATCH 978/988] allow additional certificates to be added to a pkcs7 (#5498) * allow additional certificates to be added to a pkcs7 * be more verbose about what these additional certs might be used for * missing test --- .../primitives/asymmetric/serialization.rst | 8 +++ .../hazmat/backends/openssl/backend.py | 11 ++++- .../hazmat/primitives/serialization/pkcs7.py | 11 ++++- tests/hazmat/primitives/test_pkcs7.py | 49 +++++++++++++++++++ 4 files changed, 77 insertions(+), 2 deletions(-) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index cc6d2bae5f75..bb278d8e11ad 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -647,6 +647,14 @@ contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, :class:`~cryptography.hazmat.primitives.hashes.SHA384`, or :class:`~cryptography.hazmat.primitives.hashes.SHA512`. + .. method:: add_certificate(certificate) + + Add an additional certificate (typically used to help build a + verification chain) to the PKCS7 structure. This method may + be called multiple times to add as many certificates as desired. + + :param certificate: The :class:`~cryptography.x509.Certificate` to add. + .. method:: sign(encoding, options, backend=None) :param encoding: :attr:`~cryptography.hazmat.primitives.serialization.Encoding.PEM`, diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 81e4289e8b37..76600dc08f9d 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2695,6 +2695,15 @@ def pkcs7_sign(self, builder, encoding, options): init_flags = self._lib.PKCS7_PARTIAL final_flags = 0 + if len(builder._additional_certs) == 0: + certs = self._ffi.NULL + else: + certs = self._lib.sk_X509_new_null() + certs = self._ffi.gc(certs, self._lib.sk_X509_free) + for cert in builder._additional_certs: + res = self._lib.sk_X509_push(certs, cert._x509) + self.openssl_assert(res >= 1) + if pkcs7.PKCS7Options.DetachedSignature in options: # Don't embed the data in the PKCS7 structure init_flags |= self._lib.PKCS7_DETACHED @@ -2705,7 +2714,7 @@ def pkcs7_sign(self, builder, encoding, options): p7 = self._lib.PKCS7_sign( self._ffi.NULL, self._ffi.NULL, - self._ffi.NULL, + certs, self._ffi.NULL, init_flags, ) diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs7.py b/src/cryptography/hazmat/primitives/serialization/pkcs7.py index b33cb7094c63..275d7708348f 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs7.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -24,9 +24,10 @@ def load_der_pkcs7_certificates(data): class PKCS7SignatureBuilder(object): - def __init__(self, data=None, signers=[]): + def __init__(self, data=None, signers=[], additional_certs=[]): self._data = data self._signers = signers + self._additional_certs = additional_certs def set_data(self, data): _check_byteslike("data", data) @@ -63,6 +64,14 @@ def add_signer(self, certificate, private_key, hash_algorithm): self._signers + [(certificate, private_key, hash_algorithm)], ) + def add_certificate(self, certificate): + if not isinstance(certificate, x509.Certificate): + raise TypeError("certificate must be a x509.Certificate") + + return PKCS7SignatureBuilder( + self._data, self._signers, self._additional_certs + [certificate] + ) + def sign(self, encoding, options, backend=None): if len(self._signers) == 0: raise ValueError("Must have at least one signer") diff --git a/tests/hazmat/primitives/test_pkcs7.py b/tests/hazmat/primitives/test_pkcs7.py index f60467c2915d..03a928352c9f 100644 --- a/tests/hazmat/primitives/test_pkcs7.py +++ b/tests/hazmat/primitives/test_pkcs7.py @@ -607,3 +607,52 @@ def test_multiple_signers_different_hash_algs(self, backend): options, backend, ) + + def test_add_additional_cert_not_a_cert(self, backend): + with pytest.raises(TypeError): + pkcs7.PKCS7SignatureBuilder().add_certificate(b"notacert") + + def test_add_additional_cert(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + rsa_cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read() + ), + mode="rb", + ) + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA384()) + .add_certificate(rsa_cert) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + assert ( + sig.count(rsa_cert.public_bytes(serialization.Encoding.DER)) == 1 + ) + + def test_add_multiple_additional_certs(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + rsa_cert = load_vectors_from_file( + os.path.join("x509", "custom", "ca", "rsa_ca.pem"), + loader=lambda pemfile: x509.load_pem_x509_certificate( + pemfile.read() + ), + mode="rb", + ) + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA384()) + .add_certificate(rsa_cert) + .add_certificate(rsa_cert) + ) + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + assert ( + sig.count(rsa_cert.public_bytes(serialization.Encoding.DER)) == 2 + ) From 836a92a28fbe9df8c37121e340b91ed9cd519ddd Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Oct 2020 06:15:18 -0700 Subject: [PATCH 979/988] chunking didn't actually work (#5499) --- src/cryptography/hazmat/backends/openssl/ciphers.py | 2 +- tests/hazmat/primitives/test_ciphers.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py index 171605a683de..1e805d235aa2 100644 --- a/src/cryptography/hazmat/backends/openssl/ciphers.py +++ b/src/cryptography/hazmat/backends/openssl/ciphers.py @@ -17,7 +17,7 @@ class _CipherContext(object): _ENCRYPT = 1 _DECRYPT = 0 - _MAX_CHUNK_SIZE = 2 ** 31 + _MAX_CHUNK_SIZE = 2 ** 31 - 1 def __init__(self, backend, cipher, mode, operation): self._backend = backend diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index 104e679e54a6..4d82f0c13f42 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -333,3 +333,12 @@ def test_update_into_auto_chunking(self, backend, monkeypatch): decbuf = bytearray(527) decprocessed = decryptor.update_into(buf[:processed], decbuf) assert decbuf[:decprocessed] == pt + + def test_max_chunk_size_fits_in_int32(self, backend): + # max chunk must fit in signed int32 or else a call large enough to + # cause chunking will result in the very OverflowError we want to + # avoid with chunking. + key = b"\x00" * 16 + c = ciphers.Cipher(AES(key), modes.ECB(), backend) + encryptor = c.encryptor() + backend._ffi.new("int *", encryptor._ctx._MAX_CHUNK_SIZE) From 611c4a340f6c53a7e28a9695a3248bd4e9f8558d Mon Sep 17 00:00:00 2001 From: frennkie Date: Sun, 25 Oct 2020 15:50:18 +0100 Subject: [PATCH 980/988] PKCS7SignatureBuilder now supports new option NoCerts when signing (#5500) --- .../primitives/asymmetric/serialization.rst | 7 +++++++ .../hazmat/backends/openssl/backend.py | 4 ++++ .../hazmat/primitives/serialization/pkcs7.py | 1 + tests/hazmat/primitives/test_pkcs7.py | 17 +++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst index bb278d8e11ad..6b2e858db9af 100644 --- a/docs/hazmat/primitives/asymmetric/serialization.rst +++ b/docs/hazmat/primitives/asymmetric/serialization.rst @@ -707,6 +707,13 @@ contain certificates, CRLs, and much more. PKCS7 files commonly have a ``p7b``, pass ``NoAttributes`` you can't pass ``NoCapabilities`` since ``NoAttributes`` removes ``MIMECapabilities`` and more. + .. attribute:: NoCerts + + Don't include the signer's certificate in the PKCS7 structure. This can + reduce the size of the signature but requires that the recipient can + obtain the signer's certificate by other means (for example from a + previously signed message). + Serialization Formats ~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index 76600dc08f9d..d948de22896f 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -2728,6 +2728,10 @@ def pkcs7_sign(self, builder, encoding, options): signer_flags |= self._lib.PKCS7_NOSMIMECAP elif pkcs7.PKCS7Options.NoAttributes in options: signer_flags |= self._lib.PKCS7_NOATTR + + if pkcs7.PKCS7Options.NoCerts in options: + signer_flags |= self._lib.PKCS7_NOCERTS + for certificate, private_key, hash_algorithm in builder._signers: md = self._evp_md_non_null_from_algorithm(hash_algorithm) p7signerinfo = self._lib.PKCS7_sign_add_signer( diff --git a/src/cryptography/hazmat/primitives/serialization/pkcs7.py b/src/cryptography/hazmat/primitives/serialization/pkcs7.py index 275d7708348f..1e11e28ef5b3 100644 --- a/src/cryptography/hazmat/primitives/serialization/pkcs7.py +++ b/src/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -129,3 +129,4 @@ class PKCS7Options(Enum): DetachedSignature = "Don't embed data in the PKCS7 structure" NoCapabilities = "Don't embed SMIME capabilities" NoAttributes = "Don't embed authenticatedAttributes" + NoCerts = "Don't embed signer certificate" diff --git a/tests/hazmat/primitives/test_pkcs7.py b/tests/hazmat/primitives/test_pkcs7.py index 03a928352c9f..8b93cb6334ba 100644 --- a/tests/hazmat/primitives/test_pkcs7.py +++ b/tests/hazmat/primitives/test_pkcs7.py @@ -535,6 +535,23 @@ def test_sign_no_attributes(self, backend): backend, ) + def test_sign_no_certs(self, backend): + data = b"hello world" + cert, key = _load_cert_key() + builder = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(data) + .add_signer(cert, key, hashes.SHA256()) + ) + + options = [] + sig = builder.sign(serialization.Encoding.DER, options) + assert sig.count(cert.public_bytes(serialization.Encoding.DER)) == 1 + + options = [pkcs7.PKCS7Options.NoCerts] + sig_no = builder.sign(serialization.Encoding.DER, options) + assert sig_no.count(cert.public_bytes(serialization.Encoding.DER)) == 0 + def test_multiple_signers(self, backend): data = b"hello world" cert, key = _load_cert_key() From 52a0e44e97dd6e150509b14c9b1f76a261f12786 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 25 Oct 2020 10:55:27 -0400 Subject: [PATCH 981/988] Add a dependabot configuration to bump our github actions (#5501) --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000000..123014908beb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" From 08a97cca715ca0842d6792d0079e351efbb48ec9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2020 11:46:21 -0400 Subject: [PATCH 982/988] Bump actions/upload-artifact from v1 to v2.2.0 (#5502) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from v1 to v2.2.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v1...27bce4eee761b5bc643f46a8dfb41b430c8d05f6) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/wheel-builder.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index ba15dd656a93..7fcbec44c188 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -47,7 +47,7 @@ jobs: .venv/bin/python -c "from cryptography.hazmat.backends.openssl.backend import backend;print('Loaded: ' + backend.openssl_version_text());print('Linked Against: ' + backend._ffi.string(backend._lib.OPENSSL_VERSION_TEXT).decode('ascii'))" - run: mkdir cryptography-wheelhouse - run: mv wheelhouse/cryptography*.whl cryptography-wheelhouse/ - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v2.2.0 with: name: "cryptography-${{ github.event.inputs.version }}-${{ matrix.MANYLINUX.NAME }}-${{ matrix.PYTHON }}" path: cryptography-wheelhouse/ @@ -101,7 +101,7 @@ jobs: - run: mkdir cryptography-wheelhouse - run: mv wheelhouse/cryptography*.whl cryptography-wheelhouse/ - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v2.2.0 with: name: "cryptography-${{ github.event.inputs.version }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}" path: cryptography-wheelhouse/ @@ -159,7 +159,7 @@ jobs: - run: mkdir cryptography-wheelhouse - run: move wheelhouse\cryptography*.whl cryptography-wheelhouse\ - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v2.2.0 with: name: "cryptography-${{ github.event.inputs.version }}-${{ matrix.WINDOWS.WINDOWS }}-${{ matrix.PYTHON.VERSION }}-${{ matrix.PYTHON.ABI_VERSION}}" path: cryptography-wheelhouse\ From 8be1d4b1113eabea306dd60ab64e7f00815d6a52 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 25 Oct 2020 11:57:55 -0400 Subject: [PATCH 983/988] Stop using @master for GH actions (#5503) --- .github/workflows/ci.yml | 4 ++-- .github/workflows/wheel-builder.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 717504a61229..b55266721e95 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - {VERSION: "3.9", TOXENV: "py39", EXTRA_CFLAGS: "-DUSE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on macOS" steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 - name: Setup python uses: actions/setup-python@v2 with: @@ -66,7 +66,7 @@ jobs: - {VERSION: "3.9", TOXENV: "py39", MSVC_VERSION: "2019", CL_FLAGS: "/D USE_OSRANDOM_RNG_FOR_TESTING"} name: "Python ${{ matrix.PYTHON.VERSION }} on ${{ matrix.WINDOWS.WINDOWS }}" steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 - name: Setup python uses: actions/setup-python@v2 with: diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml index 7fcbec44c188..74012f09b53a 100644 --- a/.github/workflows/wheel-builder.yml +++ b/.github/workflows/wheel-builder.yml @@ -67,7 +67,7 @@ jobs: BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3' name: "${{ matrix.PYTHON.VERSION }} ABI ${{ matrix.PYTHON.ABI_VERSION }} macOS" steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 - run: | curl "$PYTHON_DOWNLOAD_URL" -o python.pkg sudo installer -pkg python.pkg -target / @@ -122,7 +122,7 @@ jobs: - {VERSION: "3.8", MSVC_VERSION: "2019", "USE_ABI3": "true", "ABI_VERSION": "cp36"} name: "${{ matrix.PYTHON.VERSION }} ${{ matrix.WINDOWS.WINDOWS }} ${{ matrix.PYTHON.ABI_VERSION }}" steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 - name: Setup python uses: actions/setup-python@v2 with: From ada53e7ca0f04a33711c330a130d34376e5ecc2b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Oct 2020 09:13:43 -0700 Subject: [PATCH 984/988] make the regexes for branches more strict (#5504) We don't want them to build when dependabot makes a branch like dependabot/github_actions/actions/upload-artifact-v2.2.0. --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 29349ed87109..b0f0fe78d6e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,8 +13,8 @@ cache: branches: only: - master - - /\d+\.\d+\.x/ - - /\d+\.\d+(\.\d+)?/ + - /^\d+\.\d+\.x$/ + - /^\d+\.\d+(\.\d+)?$/ matrix: include: From bf4b962f4b92a1633835b2d17974f18de2d61620 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Oct 2020 16:12:38 -0700 Subject: [PATCH 985/988] be more verbose in the 102 deprecation notice (#5505) --- src/cryptography/hazmat/bindings/openssl/binding.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index bf6f12029b5b..f6bf93729118 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -181,8 +181,11 @@ def _verify_openssl_version(lib): else: raise RuntimeError( "You are linking against OpenSSL 1.0.2, which is no longer " - "supported by the OpenSSL project. You need to upgrade to a " - "newer version of OpenSSL." + "supported by the OpenSSL project. To use this version of " + "cryptography you need to upgrade to a newer version of " + "OpenSSL. For this version only you can also set the " + "environment variable CRYPTOGRAPHY_ALLOW_OPENSSL_102 to " + "allow OpenSSL 1.0.2." ) From cf9bd6a36bc7b05abca114b76e216598d9ad9b16 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Oct 2020 17:15:11 -0700 Subject: [PATCH 986/988] move blinding to __init__ on both RSA public and private (#5506) * move blinding to __init__ on both RSA public and private * change signature to guarantee this test is testing what we think --- .../hazmat/backends/openssl/backend.py | 2 -- .../hazmat/backends/openssl/rsa.py | 12 ++++++++-- tests/hazmat/primitives/test_rsa.py | 24 +++++++++---------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index d948de22896f..b7757e333d9e 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -623,8 +623,6 @@ def load_rsa_private_numbers(self, numbers): self.openssl_assert(res == 1) res = self._lib.RSA_set0_crt_params(rsa_cdata, dmp1, dmq1, iqmp) self.openssl_assert(res == 1) - res = self._lib.RSA_blinding_on(rsa_cdata, self._ffi.NULL) - self.openssl_assert(res == 1) evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) return _RSAPrivateKey(self, rsa_cdata, evp_pkey) diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 423f6878c124..69926c8f3723 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -319,6 +319,11 @@ def __init__(self, backend, rsa_cdata, evp_pkey): errors = backend._consume_errors_with_text() raise ValueError("Invalid private key", errors) + # Blinding is on by default in many versions of OpenSSL, but let's + # just be conservative here. + res = backend._lib.RSA_blinding_on(rsa_cdata, backend._ffi.NULL) + backend.openssl_assert(res == 1) + self._backend = backend self._rsa_cdata = rsa_cdata self._evp_pkey = evp_pkey @@ -351,8 +356,6 @@ def public_key(self): ctx = self._backend._lib.RSAPublicKey_dup(self._rsa_cdata) self._backend.openssl_assert(ctx != self._backend._ffi.NULL) ctx = self._backend._ffi.gc(ctx, self._backend._lib.RSA_free) - res = self._backend._lib.RSA_blinding_on(ctx, self._backend._ffi.NULL) - self._backend.openssl_assert(res == 1) evp_pkey = self._backend._rsa_cdata_to_evp_pkey(ctx) return _RSAPublicKey(self._backend, ctx, evp_pkey) @@ -411,6 +414,11 @@ def sign(self, data, padding, algorithm): @utils.register_interface(RSAPublicKeyWithSerialization) class _RSAPublicKey(object): def __init__(self, backend, rsa_cdata, evp_pkey): + # Blinding is on by default in many versions of OpenSSL, but let's + # just be conservative here. + res = backend._lib.RSA_blinding_on(rsa_cdata, backend._ffi.NULL) + backend.openssl_assert(res == 1) + self._backend = backend self._rsa_cdata = rsa_cdata self._evp_pkey = evp_pkey diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index bfb946ee5de4..d7fa7744f493 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -946,21 +946,19 @@ def test_invalid_pss_signature_wrong_key(self, backend): skip_message="Does not support PSS.", ) def test_invalid_pss_signature_data_too_large_for_modulus(self, backend): + # 2048 bit PSS signature signature = binascii.unhexlify( - b"cb43bde4f7ab89eb4a79c6e8dd67e0d1af60715da64429d90c716a490b799c29" - b"194cf8046509c6ed851052367a74e2e92d9b38947ed74332acb115a03fcc0222" + b"58750fc3d2f560d1f3e37c8e28bc8da6d3e93f5d58f8becd25b1c931eea30fea" + b"54cb17d44b90104a0aacb7fe9ffa2a59c5788435911d63de78178d21eb875ccd" + b"0b07121b641ed4fe6bcb1ca5060322765507b4f24bdba8a698a8e4e07e6bf2c4" + b"7a736abe5a912e85cd32f648f3e043b4385e8b612dcce342c5fddf18c524deb5" + b"6295b95f6dfa759b2896b793628a90f133e74c1ff7d3af43e3f7ee792df2e5b6" + b"a19e996ac3676884354899a437b3ae4e3ac91976c336c332a3b1db0d172b19cb" + b"40ad3d871296cfffb3c889ce74a179a3e290852c35d59525afe4b39dc907fad2" + b"ac462c50a488dca486031a3dc8c4cdbbc53e9f71d64732e1533a5d1249b833ce" ) - public_key = rsa.RSAPublicNumbers( - n=int( - b"381201f4905d67dfeb3dec131a0fbea773489227ec7a1448c3109189ac68" - b"5a95441be90866a14c4d2e139cd16db540ec6c7abab13ffff91443fd46a8" - b"960cbb7658ded26a5c95c86f6e40384e1c1239c63e541ba221191c4dd303" - b"231b42e33c6dbddf5ec9a746f09bf0c25d0f8d27f93ee0ae5c0d723348f4" - b"030d3581e13522", - 16, - ), - e=65537, - ).public_key(backend) + # 1024 bit key + public_key = RSA_KEY_1024.private_key(backend).public_key() with pytest.raises(InvalidSignature): public_key.verify( signature, From 58494b41d6ecb0f56b7c5f05d5f5e3ca0320d494 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 25 Oct 2020 21:16:42 -0400 Subject: [PATCH 987/988] Attempt to mitigate Bleichenbacher attacks on RSA decryption (#5507) --- CHANGELOG.rst | 6 +++++ docs/spelling_wordlist.txt | 1 + .../hazmat/backends/openssl/rsa.py | 26 ++++++++----------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 32a6c8522547..f105465e2eaa 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,12 @@ Changelog .. note:: This version is not yet released and is under active development. +* **SECURITY ISSUE:** Attempted to make RSA PKCS#1v1.5 decryption more constant + time, to protect against Bleichenbacher vulnerabilities. Due to limitations + imposed by our API, we cannot completely mitigate this vulnerability and a + future release will contain a new API which is designed to be resilient to + these for contexts where it is required. Credit to **Hubert Kario** for + reporting the issue. *CVE-2020-25659* * Support for OpenSSL 1.0.2 has been removed. Users on older version of OpenSSL will need to upgrade. * Added basic support for PKCS7 signing (including SMIME) via diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 9ec971b36ad2..c8c275142ff7 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -7,6 +7,7 @@ backend Backends backends bcrypt +Bleichenbacher Blowfish boolean Botan diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index 69926c8f3723..66b37224e443 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -119,23 +119,19 @@ def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding): outlen = backend._ffi.new("size_t *", buf_size) buf = backend._ffi.new("unsigned char[]", buf_size) + # Everything from this line onwards is written with the goal of being as + # constant-time as is practical given the constraints of Python and our + # API. See Bleichenbacher's '98 attack on RSA, and its many many variants. + # As such, you should not attempt to change this (particularly to "clean it + # up") without understanding why it was written this way (see + # Chesterton's Fence), and without measuring to verify you have not + # introduced observable time differences. res = crypt(pkey_ctx, buf, outlen, data, len(data)) + resbuf = backend._ffi.buffer(buf)[: outlen[0]] + backend._lib.ERR_clear_error() if res <= 0: - _handle_rsa_enc_dec_error(backend, key) - - return backend._ffi.buffer(buf)[: outlen[0]] - - -def _handle_rsa_enc_dec_error(backend, key): - errors = backend._consume_errors_with_text() - if isinstance(key, _RSAPublicKey): - raise ValueError( - "Data too long for key size. Encrypt less data or use a " - "larger key size.", - errors, - ) - else: - raise ValueError("Decryption failed.", errors) + raise ValueError("Encryption/decryption failed.") + return resbuf def _rsa_sig_determine_padding(backend, key, padding, algorithm): From c9e65222c91df8b6f61650a3460e30232962c1e0 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sun, 25 Oct 2020 18:53:53 -0700 Subject: [PATCH 988/988] 3.2 release (#5508) --- CHANGELOG.rst | 6 ++---- src/cryptography/__about__.py | 2 +- vectors/cryptography_vectors/__about__.py | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f105465e2eaa..007f802006d1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,10 +3,8 @@ Changelog .. _v3-2: -3.2 - `master`_ -~~~~~~~~~~~~~~~ - -.. note:: This version is not yet released and is under active development. +3.2 - 2020-10-25 +~~~~~~~~~~~~~~~~ * **SECURITY ISSUE:** Attempted to make RSA PKCS#1v1.5 decryption more constant time, to protect against Bleichenbacher vulnerabilities. Due to limitations diff --git a/src/cryptography/__about__.py b/src/cryptography/__about__.py index 57905d3ef4e9..b960f7ed1af5 100644 --- a/src/cryptography/__about__.py +++ b/src/cryptography/__about__.py @@ -22,7 +22,7 @@ ) __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.2.dev1" +__version__ = "3.2" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org" diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py index e1a01178cdc4..3b41b82e0ab9 100644 --- a/vectors/cryptography_vectors/__about__.py +++ b/vectors/cryptography_vectors/__about__.py @@ -20,7 +20,7 @@ __uri__ = "https://github.com/pyca/cryptography" -__version__ = "3.2.dev1" +__version__ = "3.2" __author__ = "The cryptography developers" __email__ = "cryptography-dev@python.org"